summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsaurabhb172020-02-26 16:04:40 +0530
committersaurabhb172020-02-26 16:04:40 +0530
commit039ac92480a09266146fc5b0c9ec67a32a2565ad (patch)
tree7b6cef031a580680690a0f32410db940f7e7d7d5
parentaa35045840b78d3f48212db45da59a2e5c69b223 (diff)
downloadKiCad-eSim-039ac92480a09266146fc5b0c9ec67a32a2565ad.tar.gz
KiCad-eSim-039ac92480a09266146fc5b0c9ec67a32a2565ad.tar.bz2
KiCad-eSim-039ac92480a09266146fc5b0c9ec67a32a2565ad.zip
Added secondary files
-rw-r--r--CMakeModules/CMakeFindFrameworks.cmake32
-rw-r--r--CMakeModules/CheckCXXSymbolExists.cmake42
-rw-r--r--CMakeModules/CheckFindPackageResult.cmake8
-rw-r--r--CMakeModules/CreateBzrVersionHeader.cmake75
-rw-r--r--CMakeModules/CreateGitVersionHeader.cmake105
-rw-r--r--CMakeModules/CreateSVNVersionHeader.cmake61
-rw-r--r--CMakeModules/FindBazaar.cmake81
-rw-r--r--CMakeModules/FindCairo.cmake168
-rw-r--r--CMakeModules/FindGLEW.cmake112
-rw-r--r--CMakeModules/FindGdiPlus.cmake22
-rw-r--r--CMakeModules/FindOpenSSL.cmake342
-rw-r--r--CMakeModules/FindPackageMessage.cmake57
-rw-r--r--CMakeModules/FindPythonInterp.cmake175
-rw-r--r--CMakeModules/FindPythonLibs.cmake322
-rw-r--r--CMakeModules/FindSubversion.cmake140
-rw-r--r--CMakeModules/FindZLIB.cmake.unused39
-rw-r--r--CMakeModules/FindwxWidgets.cmake1145
-rw-r--r--CMakeModules/Functions.cmake71
-rw-r--r--CMakeModules/Html2C.cmake13
-rw-r--r--CMakeModules/KiCadVersion.cmake37
-rw-r--r--CMakeModules/MinGWResourceCompiler.cmake44
-rw-r--r--CMakeModules/PNG2cpp.cmake81
-rw-r--r--CMakeModules/PerformFeatureChecks.cmake115
-rw-r--r--CMakeModules/SelectLibraryConfigurations.cmake87
-rw-r--r--CMakeModules/Shaders.cmake57
-rw-r--r--CMakeModules/TokenList2DsnLexer.cmake387
-rw-r--r--CMakeModules/UsewxWidgets.cmake89
-rw-r--r--CMakeModules/WriteVersionHeader.cmake88
-rw-r--r--CMakeModules/cmake_uninstall.cmake.in22
-rw-r--r--CMakeModules/config.h.cmake80
-rw-r--r--CMakeModules/download_boost.cmake322
-rw-r--r--CMakeModules/download_cairo.cmake109
-rw-r--r--CMakeModules/download_glew.cmake89
-rw-r--r--CMakeModules/download_libpng.cmake76
-rw-r--r--CMakeModules/download_openssl.cmake127
-rw-r--r--CMakeModules/download_pcre.cmake67
-rw-r--r--CMakeModules/download_pixman.cmake83
-rw-r--r--CMakeModules/download_pkgconfig.cmake80
-rw-r--r--CMakeModules/download_swig.cmake79
-rw-r--r--CMakeModules/download_wxpython.cmake121
-rw-r--r--CMakeModules/download_wxwidgets.cmake119
-rw-r--r--Documentation/GUI_Translation_HOWTO.odtbin0 -> 235937 bytes
-rw-r--r--Documentation/GUI_Translation_HOWTO.pdfbin0 -> 339069 bytes
-rw-r--r--Documentation/HOW_TO_CONTRIBUTE.txt56
-rw-r--r--Documentation/KIWAY_Build_Symbols_Defined.txt29
-rw-r--r--Documentation/biu-plan.txt243
-rw-r--r--Documentation/changelogs/CHANGELOG-2007.txt1547
-rw-r--r--Documentation/changelogs/CHANGELOG-2008.txt1561
-rw-r--r--Documentation/changelogs/CHANGELOG-2009.txt1013
-rw-r--r--Documentation/changelogs/CHANGELOG-2010.txt1010
-rw-r--r--Documentation/changelogs/CHANGELOG-2011.txt297
-rw-r--r--Documentation/coding_style_policy.pdfbin0 -> 190635 bytes
-rw-r--r--Documentation/development/Doxyfile1780
-rw-r--r--Documentation/development/coding-style-policy.md800
-rw-r--r--Documentation/development/compiling.md413
-rw-r--r--Documentation/development/road-map.md834
-rw-r--r--Documentation/development/stable-release-policy.md80
-rw-r--r--Documentation/guidelines/UIpolicies.txt85
-rw-r--r--Documentation/interactive_router/build.sh5
-rw-r--r--Documentation/interactive_router/interactive_router.mmd73
-rw-r--r--Documentation/interactive_router/pictures/opengl_menu.pngbin0 -> 44164 bytes
-rw-r--r--Documentation/interactive_router/pictures/route_icon.pngbin0 -> 547 bytes
-rw-r--r--Documentation/interactive_router/pictures/router_options.pngbin0 -> 38081 bytes
-rw-r--r--Documentation/interactive_router/pictures/rules_editor.pngbin0 -> 59613 bytes
-rw-r--r--Documentation/notes_about_pcbnew_new_file_format.odtbin0 -> 41015 bytes
-rw-r--r--Documentation/rules_for_capitalization_in_Kicad_UI.txt48
-rw-r--r--Documentation/s-expressions.txt89
-rw-r--r--Documentation/wxWidgets_patch_notes.txt20
-rw-r--r--common/CMakeLists.txt493
-rw-r--r--common/base_screen.cpp471
-rw-r--r--common/base_struct.cpp592
-rw-r--r--common/base_units.cpp423
-rw-r--r--common/basicframe.cpp758
-rw-r--r--common/bezier_curves.cpp435
-rw-r--r--common/bin_mod.cpp72
-rw-r--r--common/bitmap.cpp45
-rw-r--r--common/block_commande.cpp233
-rw-r--r--common/build_version.cpp45
-rw-r--r--common/class_bitmap_base.cpp300
-rw-r--r--common/class_colors_design_settings.cpp156
-rw-r--r--common/class_layer_box_selector.cpp149
-rw-r--r--common/class_marker_base.cpp208
-rw-r--r--common/class_page_info.cpp283
-rw-r--r--common/class_plotter.cpp519
-rw-r--r--common/class_undoredo_container.cpp348
-rw-r--r--common/colors.cpp184
-rw-r--r--common/common.cpp511
-rw-r--r--common/common_plotDXF_functions.cpp815
-rw-r--r--common/common_plotGERBER_functions.cpp594
-rw-r--r--common/common_plotHPGL_functions.cpp740
-rw-r--r--common/common_plotPDF_functions.cpp834
-rw-r--r--common/common_plotPS_functions.cpp1090
-rw-r--r--common/common_plotSVG_functions.cpp623
-rw-r--r--common/common_plot_functions.cpp165
-rw-r--r--common/config_params.cpp529
-rw-r--r--common/confirm.cpp160
-rw-r--r--common/convert_basic_shapes_to_polygon.cpp249
-rw-r--r--common/copy_to_clipboard.cpp159
-rw-r--r--common/dialog_about/AboutDialog_main.cpp501
-rw-r--r--common/dialog_about/aboutinfo.h174
-rw-r--r--common/dialog_about/dialog_about.cpp399
-rw-r--r--common/dialog_about/dialog_about.h99
-rw-r--r--common/dialog_about/dialog_about_base.cpp82
-rw-r--r--common/dialog_about/dialog_about_base.fbp752
-rw-r--r--common/dialog_about/dialog_about_base.h56
-rw-r--r--common/dialog_shim.cpp619
-rw-r--r--common/dialogs/dialog_display_info_HTML_base.cpp41
-rw-r--r--common/dialogs/dialog_display_info_HTML_base.fbp271
-rw-r--r--common/dialogs/dialog_display_info_HTML_base.h53
-rw-r--r--common/dialogs/dialog_env_var_config.cpp285
-rw-r--r--common/dialogs/dialog_env_var_config_base.cpp108
-rw-r--r--common/dialogs/dialog_env_var_config_base.fbp558
-rw-r--r--common/dialogs/dialog_env_var_config_base.h61
-rw-r--r--common/dialogs/dialog_exit_base.cpp98
-rw-r--r--common/dialogs/dialog_exit_base.fbp754
-rw-r--r--common/dialogs/dialog_exit_base.h64
-rw-r--r--common/dialogs/dialog_get_component.cpp144
-rw-r--r--common/dialogs/dialog_get_component_base.cpp90
-rw-r--r--common/dialogs/dialog_get_component_base.fbp906
-rw-r--r--common/dialogs/dialog_get_component_base.h67
-rw-r--r--common/dialogs/dialog_hotkeys_editor.cpp389
-rw-r--r--common/dialogs/dialog_hotkeys_editor_base.cpp60
-rw-r--r--common/dialogs/dialog_hotkeys_editor_base.fbp391
-rw-r--r--common/dialogs/dialog_hotkeys_editor_base.h58
-rw-r--r--common/dialogs/dialog_image_editor.cpp179
-rw-r--r--common/dialogs/dialog_image_editor.fbp978
-rw-r--r--common/dialogs/dialog_image_editor.h69
-rw-r--r--common/dialogs/dialog_image_editor_base.cpp103
-rw-r--r--common/dialogs/dialog_image_editor_base.h69
-rw-r--r--common/dialogs/dialog_list_selector_base.cpp80
-rw-r--r--common/dialogs/dialog_list_selector_base.fbp661
-rw-r--r--common/dialogs/dialog_list_selector_base.h66
-rw-r--r--common/dialogs/dialog_page_settings.cpp841
-rw-r--r--common/dialogs/dialog_page_settings.h120
-rw-r--r--common/dialogs/dialog_page_settings_base.cpp423
-rw-r--r--common/dialogs/dialog_page_settings_base.fbp4454
-rw-r--r--common/dialogs/dialog_page_settings_base.h126
-rw-r--r--common/dialogs/wx_html_report_panel.cpp302
-rw-r--r--common/dialogs/wx_html_report_panel.h122
-rw-r--r--common/dialogs/wx_html_report_panel_base.cpp94
-rw-r--r--common/dialogs/wx_html_report_panel_base.fbp823
-rw-r--r--common/dialogs/wx_html_report_panel_base.h64
-rw-r--r--common/displlst.cpp252
-rw-r--r--common/dlist.cpp228
-rw-r--r--common/draw_frame.cpp1306
-rw-r--r--common/draw_panel.cpp1619
-rw-r--r--common/draw_panel_gal.cpp415
-rw-r--r--common/drawtxt.cpp685
-rw-r--r--common/dsnlexer.cpp835
-rw-r--r--common/eda_dde.cpp211
-rw-r--r--common/eda_doc.cpp241
-rw-r--r--common/eda_text.cpp517
-rw-r--r--common/filter_reader.cpp107
-rw-r--r--common/findkicadhelppath.cpp.notused126
-rw-r--r--common/footprint_info.cpp317
-rw-r--r--common/fp_lib_table.cpp789
-rw-r--r--common/fp_lib_table.keywords7
-rw-r--r--common/fpid.cpp395
-rw-r--r--common/gal/cairo/cairo_compositor.cpp159
-rw-r--r--common/gal/cairo/cairo_gal.cpp1074
-rw-r--r--common/gal/color4d.cpp179
-rw-r--r--common/gal/graphics_abstraction_layer.cpp240
-rw-r--r--common/gal/opengl/cached_container.cpp547
-rw-r--r--common/gal/opengl/gpu_manager.cpp302
-rw-r--r--common/gal/opengl/noncached_container.cpp89
-rw-r--r--common/gal/opengl/opengl_compositor.cpp291
-rw-r--r--common/gal/opengl/opengl_gal.cpp1204
-rw-r--r--common/gal/opengl/shader.cpp272
-rw-r--r--common/gal/opengl/shader.frag75
-rw-r--r--common/gal/opengl/shader.vert95
-rw-r--r--common/gal/opengl/vertex_container.cpp60
-rw-r--r--common/gal/opengl/vertex_item.cpp53
-rw-r--r--common/gal/opengl/vertex_manager.cpp234
-rw-r--r--common/gal/stroke_font.cpp403
-rw-r--r--common/geometry/hetriang.cpp739
-rw-r--r--common/geometry/seg.cpp158
-rw-r--r--common/geometry/shape.cpp38
-rw-r--r--common/geometry/shape_collisions.cpp496
-rw-r--r--common/geometry/shape_file_io.cpp146
-rw-r--r--common/geometry/shape_line_chain.cpp580
-rw-r--r--common/geometry/shape_poly_set.cpp805
-rw-r--r--common/gestfich.cpp420
-rw-r--r--common/getrunningmicrosecs.cpp97
-rw-r--r--common/gr_basic.cpp1268
-rw-r--r--common/grid_tricks.cpp289
-rw-r--r--common/hotkeys_basic.cpp846
-rw-r--r--common/html_messagebox.cpp106
-rw-r--r--common/kicad_curl/kicad_curl.cpp224
-rw-r--r--common/kicad_curl/kicad_curl_easy.cpp94
-rw-r--r--common/kiface_i.cpp107
-rw-r--r--common/kiway.cpp432
-rw-r--r--common/kiway_express.cpp60
-rw-r--r--common/kiway_holder.cpp32
-rw-r--r--common/kiway_player.cpp205
-rw-r--r--common/lockfile.cpp56
-rw-r--r--common/lset.cpp747
-rw-r--r--common/math/math_util.cpp91
-rw-r--r--common/msgpanel.cpp243
-rw-r--r--common/netlist.keywords40
-rw-r--r--common/newstroke_font.cpp11359
-rw-r--r--common/origin_viewitem.cpp88
-rw-r--r--common/page_layout/class_worksheet_dataitem.cpp577
-rw-r--r--common/page_layout/class_worksheet_layout.cpp248
-rw-r--r--common/page_layout/page_layout_default_description.cpp164
-rw-r--r--common/page_layout/page_layout_graphic_items.cpp423
-rw-r--r--common/page_layout/page_layout_reader.cpp875
-rw-r--r--common/page_layout/page_layout_reader.keywords48
-rw-r--r--common/page_layout/title_block_shapes.cpp258
-rw-r--r--common/painter.cpp76
-rw-r--r--common/pcb.keywords207
-rw-r--r--common/pcb_plot_params.keywords30
-rw-r--r--common/pcbcommon.cpp74
-rw-r--r--common/pgm_base.cpp883
-rw-r--r--common/prependpath.cpp40
-rw-r--r--common/project.cpp381
-rw-r--r--common/ptree.cpp220
-rw-r--r--common/reporter.cpp81
-rw-r--r--common/richio.cpp607
-rw-r--r--common/search_stack.cpp210
-rw-r--r--common/searchhelpfilefullpath.cpp187
-rw-r--r--common/selcolor.cpp264
-rw-r--r--common/single_top.cpp308
-rw-r--r--common/string.cpp485
-rw-r--r--common/strtok_r.c35
-rw-r--r--common/systemdirsappend.cpp166
-rw-r--r--common/tool/action_manager.cpp269
-rw-r--r--common/tool/context_menu.cpp391
-rw-r--r--common/tool/tool_action.cpp65
-rw-r--r--common/tool/tool_base.cpp97
-rw-r--r--common/tool/tool_dispatcher.cpp363
-rw-r--r--common/tool/tool_event.cpp162
-rw-r--r--common/tool/tool_interactive.cpp73
-rw-r--r--common/tool/tool_manager.cpp777
-rw-r--r--common/trigo.cpp436
-rw-r--r--common/utf8.cpp255
-rw-r--r--common/validators.cpp85
-rw-r--r--common/view/view.cpp1086
-rw-r--r--common/view/view_controls.cpp47
-rw-r--r--common/view/view_group.cpp162
-rw-r--r--common/view/view_item.cpp109
-rw-r--r--common/view/wx_view_controls.cpp491
-rw-r--r--common/wildcards_and_files_ext.cpp104
-rw-r--r--common/worksheet.cpp280
-rw-r--r--common/worksheet_viewitem.cpp210
-rw-r--r--common/wx_status_popup.cpp65
-rw-r--r--common/wx_unit_binder.cpp86
-rw-r--r--common/wxunittext.cpp195
-rw-r--r--common/wxwineda.cpp324
-rw-r--r--common/xnode.cpp93
-rw-r--r--common/zoom.cpp301
-rw-r--r--demos/CMakeLists.txt15
-rw-r--r--demos/complex_hierarchy/ampli_ht.sch776
-rw-r--r--demos/complex_hierarchy/complex_hierarchy-cache.lib324
-rw-r--r--demos/complex_hierarchy/complex_hierarchy.kicad_pcb3981
-rw-r--r--demos/complex_hierarchy/complex_hierarchy.net805
-rw-r--r--demos/complex_hierarchy/complex_hierarchy.pro38
-rw-r--r--demos/complex_hierarchy/complex_hierarchy.sch427
-rw-r--r--demos/complex_hierarchy/complex_hierarchy_schlib.lib324
-rw-r--r--demos/ecc83/ecc83-pp-cache.lib141
-rw-r--r--demos/ecc83/ecc83-pp.kicad_pcb792
-rw-r--r--demos/ecc83/ecc83-pp.net211
-rw-r--r--demos/ecc83/ecc83-pp.pro39
-rw-r--r--demos/ecc83/ecc83-pp.sch379
-rw-r--r--demos/ecc83/ecc83-pp_v2-cache.lib141
-rw-r--r--demos/ecc83/ecc83-pp_v2.kicad_pcb690
-rw-r--r--demos/ecc83/ecc83-pp_v2.net211
-rw-r--r--demos/ecc83/ecc83-pp_v2.pro32
-rw-r--r--demos/ecc83/ecc83-pp_v2.sch371
-rw-r--r--demos/ecc83/ecc83_schlib.dcm3
-rw-r--r--demos/ecc83/ecc83_schlib.lib141
-rw-r--r--demos/ecc83/fp-lib-table3
-rw-r--r--demos/electric/electric-cache.lib530
-rw-r--r--demos/electric/electric.pro14
-rw-r--r--demos/electric/electric.sch1463
-rw-r--r--demos/flat_hierarchy/flat_hierarchy-cache.lib592
-rw-r--r--demos/flat_hierarchy/flat_hierarchy.kicad_pcb4161
-rw-r--r--demos/flat_hierarchy/flat_hierarchy.net993
-rw-r--r--demos/flat_hierarchy/flat_hierarchy.pro81
-rw-r--r--demos/flat_hierarchy/flat_hierarchy.sch30
-rw-r--r--demos/flat_hierarchy/flat_hierarchy_schlib.lib592
-rw-r--r--demos/flat_hierarchy/pic_programmer.sch1349
-rw-r--r--demos/flat_hierarchy/pic_sockets.sch485
-rw-r--r--demos/interf_u/image.lib19
-rw-r--r--demos/interf_u/image.mod432
-rw-r--r--demos/interf_u/interf_u-cache.lib681
-rw-r--r--demos/interf_u/interf_u.cmp171
-rw-r--r--demos/interf_u/interf_u.kicad_pcb3373
-rw-r--r--demos/interf_u/interf_u.net1183
-rw-r--r--demos/interf_u/interf_u.pro40
-rw-r--r--demos/interf_u/interf_u.sch2876
-rw-r--r--demos/interf_u/interf_u_schlib.lib681
-rw-r--r--demos/interf_u/pagelayout_logo.kicad_wks141
-rw-r--r--demos/interf_u/tux.bmpbin0 -> 185814 bytes
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/in_out_conn.sch2285
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213-cache.lib1055
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb15552
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.net2772
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.pro37
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.sch2566
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213_schlib.lib1055
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wingsbin0 -> 4995 bytes
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wrl465
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wingsbin0 -> 4661 bytes
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wrl883
-rw-r--r--demos/kit-dev-coldfire-xilinx_5213/xilinx.sch1054
-rw-r--r--demos/microwave/microwave.kicad_pcb987
-rw-r--r--demos/microwave/microwave.pro6
-rw-r--r--demos/microwave/shape1.txt547
-rw-r--r--demos/pic_programmer/fp-lib-table4
-rw-r--r--demos/pic_programmer/libs/pic_programmer_fp.pretty/1pin-4.kicad_mod12
-rw-r--r--demos/pic_programmer/libs/pic_programmer_schlib.lib606
-rw-r--r--demos/pic_programmer/pic_programmer-cache.lib606
-rw-r--r--demos/pic_programmer/pic_programmer.kicad_pcb4172
-rw-r--r--demos/pic_programmer/pic_programmer.net1089
-rw-r--r--demos/pic_programmer/pic_programmer.pro37
-rw-r--r--demos/pic_programmer/pic_programmer.sch1369
-rw-r--r--demos/pic_programmer/pic_sockets.sch461
-rw-r--r--demos/pspice/pspice-cache.lib115
-rw-r--r--demos/pspice/pspice.cir33
-rw-r--r--demos/pspice/pspice.pro49
-rw-r--r--demos/pspice/pspice.sch498
-rw-r--r--demos/python_scripts_examples/gen_gerber_and_drill_files_board.py119
-rw-r--r--demos/python_scripts_examples/plot_board.py211
-rw-r--r--demos/sonde xilinx/sonde xilinx-cache.lib318
-rw-r--r--demos/sonde xilinx/sonde xilinx.kicad_pcb1660
-rw-r--r--demos/sonde xilinx/sonde xilinx.net420
-rw-r--r--demos/sonde xilinx/sonde xilinx.pro45
-rw-r--r--demos/sonde xilinx/sonde xilinx.sch818
-rw-r--r--demos/sonde xilinx/sonde xilinx_schlib.lib318
-rw-r--r--demos/test_pads_inside_pads/test_pads_inside_pads-cache.lib18
-rw-r--r--demos/test_pads_inside_pads/test_pads_inside_pads.kicad_pcb195
-rw-r--r--demos/test_pads_inside_pads/test_pads_inside_pads.net44
-rw-r--r--demos/test_pads_inside_pads/test_pads_inside_pads.pro108
-rw-r--r--demos/test_pads_inside_pads/test_pads_inside_pads.sch99
-rw-r--r--demos/test_xil_95108/carte_test-cache.lib667
-rw-r--r--demos/test_xil_95108/carte_test.kicad_pcb4205
-rw-r--r--demos/test_xil_95108/carte_test.net974
-rw-r--r--demos/test_xil_95108/carte_test.pro89
-rw-r--r--demos/test_xil_95108/carte_test.sch1834
-rw-r--r--demos/test_xil_95108/carte_test_schlib.lib605
-rw-r--r--demos/test_xil_95108/fp-lib-table7
-rw-r--r--demos/video/bus_pci.sch2745
-rw-r--r--demos/video/esvideo.sch1190
-rw-r--r--demos/video/fp-lib-table3
-rw-r--r--demos/video/graphic.sch1654
-rw-r--r--demos/video/libs/footprints.pretty/LRTDK.kicad_mod20
-rw-r--r--demos/video/libs/footprints.pretty/PLCC68.kicad_mod92
-rw-r--r--demos/video/libs/footprints.pretty/PLCC84.kicad_mod108
-rw-r--r--demos/video/libs/footprints.pretty/sim72.kicad_mod91
-rw-r--r--demos/video/libs/video_schlib.lib1720
-rw-r--r--demos/video/modul.sch969
-rw-r--r--demos/video/muxdata.sch651
-rw-r--r--demos/video/pal-ntsc.sch1325
-rw-r--r--demos/video/rams.sch1753
-rw-r--r--demos/video/video-cache.lib1720
-rw-r--r--demos/video/video.kicad_pcb30024
-rw-r--r--demos/video/video.net4910
-rw-r--r--demos/video/video.pro38
-rw-r--r--demos/video/video.sch1014
-rw-r--r--helpers/tools_to_build_newstroke-font/AUTHOR.txt4
-rw-r--r--helpers/tools_to_build_newstroke-font/README.txt32
-rw-r--r--helpers/tools_to_build_newstroke-font/charlist.txt2914
-rw-r--r--helpers/tools_to_build_newstroke-font/coord.txt31
-rw-r--r--helpers/tools_to_build_newstroke-font/font-cache.lib12409
-rw-r--r--helpers/tools_to_build_newstroke-font/font.dcm3
-rw-r--r--helpers/tools_to_build_newstroke-font/font.kicad_pcb376
-rw-r--r--helpers/tools_to_build_newstroke-font/font.lib7348
-rw-r--r--helpers/tools_to_build_newstroke-font/font.pro41
-rw-r--r--helpers/tools_to_build_newstroke-font/font.sch5128
-rw-r--r--helpers/tools_to_build_newstroke-font/font_draft.sch2213
-rw-r--r--helpers/tools_to_build_newstroke-font/font_draft1.lib1215
-rw-r--r--helpers/tools_to_build_newstroke-font/fontconv.awk334
-rw-r--r--helpers/tools_to_build_newstroke-font/newstroke_font.h11330
-rw-r--r--helpers/tools_to_build_newstroke-font/symbol.dcm3
-rw-r--r--helpers/tools_to_build_newstroke-font/symbol.lib5337
-rw-r--r--helpers/tools_to_build_newstroke-font/symbols.sch3241
-rw-r--r--helpers/tools_to_build_newstroke-font/test.h7
-rw-r--r--helpers/tools_to_build_newstroke-font/testlist.txt11
-rw-r--r--include/HersheyCyrillic.h.unused70
-rw-r--r--include/base_struct.h567
-rw-r--r--include/base_units.h194
-rw-r--r--include/bezier_curves.h60
-rw-r--r--include/bin_mod.h66
-rw-r--r--include/bitmaps.h570
-rw-r--r--include/block_commande.h211
-rw-r--r--include/build_version.h39
-rw-r--r--include/class_base_screen.h508
-rw-r--r--include/class_bitmap_base.h216
-rw-r--r--include/class_board_design_settings.h568
-rw-r--r--include/class_board_item.h335
-rw-r--r--include/class_collector.h287
-rw-r--r--include/class_colors_design_settings.h89
-rw-r--r--include/class_draw_panel_gal.h219
-rw-r--r--include/class_drawpanel.h504
-rw-r--r--include/class_drc_item.h274
-rw-r--r--include/class_eda_rect.h226
-rw-r--r--include/class_layer_box_selector.h106
-rw-r--r--include/class_macros_record.h45
-rw-r--r--include/class_marker_base.h233
-rw-r--r--include/class_page_info.h238
-rw-r--r--include/class_pcb_screen.h105
-rw-r--r--include/class_title_block.h165
-rw-r--r--include/class_undoredo_container.h328
-rw-r--r--include/class_worksheet_dataitem.h537
-rw-r--r--include/colors.h213
-rw-r--r--include/colors_selection.h34
-rw-r--r--include/common.h422
-rw-r--r--include/config_params.h366
-rw-r--r--include/confirm.h110
-rw-r--r--include/convert_basic_shapes_to_polygon.h99
-rw-r--r--include/convert_from_iu.h69
-rw-r--r--include/convert_to_biu.h101
-rw-r--r--include/core/typeinfo.h179
-rw-r--r--include/dialog_env_var_config.h64
-rw-r--r--include/dialog_get_component.h81
-rw-r--r--include/dialog_helpers.h218
-rw-r--r--include/dialog_hotkeys_editor.h256
-rw-r--r--include/dialog_shim.h134
-rw-r--r--include/dlist.h258
-rw-r--r--include/draw_frame.h812
-rw-r--r--include/drawtxt.h155
-rw-r--r--include/dsnlexer.h544
-rw-r--r--include/eda_dde.h51
-rw-r--r--include/eda_doc.h57
-rw-r--r--include/eda_text.h331
-rw-r--r--include/fctsys.h47
-rw-r--r--include/filter_reader.h99
-rw-r--r--include/footprint_info.h256
-rw-r--r--include/fp_lib_table.h635
-rw-r--r--include/fpid.h198
-rw-r--r--include/frame_type.h70
-rw-r--r--include/gal/cairo/cairo_compositor.h127
-rw-r--r--include/gal/cairo/cairo_gal.h405
-rw-r--r--include/gal/color4d.h222
-rw-r--r--include/gal/compositor.h106
-rw-r--r--include/gal/definitions.h48
-rw-r--r--include/gal/graphics_abstraction_layer.h910
-rw-r--r--include/gal/opengl/cached_container.h170
-rw-r--r--include/gal/opengl/glm/core/_detail.hpp482
-rw-r--r--include/gal/opengl/glm/core/_fixes.hpp55
-rw-r--r--include/gal/opengl/glm/core/_swizzle.hpp861
-rw-r--r--include/gal/opengl/glm/core/_swizzle_func.hpp787
-rw-r--r--include/gal/opengl/glm/core/_vectorize.hpp159
-rw-r--r--include/gal/opengl/glm/core/dummy.cpp40
-rw-r--r--include/gal/opengl/glm/core/func_common.hpp430
-rw-r--r--include/gal/opengl/glm/core/func_common.inl1226
-rw-r--r--include/gal/opengl/glm/core/func_exponential.hpp123
-rw-r--r--include/gal/opengl/glm/core/func_exponential.inl156
-rw-r--r--include/gal/opengl/glm/core/func_geometric.hpp138
-rw-r--r--include/gal/opengl/glm/core/func_geometric.inl321
-rw-r--r--include/gal/opengl/glm/core/func_integer.hpp201
-rw-r--r--include/gal/opengl/glm/core/func_integer.inl648
-rw-r--r--include/gal/opengl/glm/core/func_matrix.hpp150
-rw-r--r--include/gal/opengl/glm/core/func_matrix.inl582
-rw-r--r--include/gal/opengl/glm/core/func_noise.hpp87
-rw-r--r--include/gal/opengl/glm/core/func_noise.inl364
-rw-r--r--include/gal/opengl/glm/core/func_packing.hpp193
-rw-r--r--include/gal/opengl/glm/core/func_packing.inl208
-rw-r--r--include/gal/opengl/glm/core/func_trigonometric.hpp203
-rw-r--r--include/gal/opengl/glm/core/func_trigonometric.inl244
-rw-r--r--include/gal/opengl/glm/core/func_vector_relational.hpp138
-rw-r--r--include/gal/opengl/glm/core/func_vector_relational.inl178
-rw-r--r--include/gal/opengl/glm/core/hint.hpp40
-rw-r--r--include/gal/opengl/glm/core/intrinsic_common.hpp89
-rw-r--r--include/gal/opengl/glm/core/intrinsic_common.inl313
-rw-r--r--include/gal/opengl/glm/core/intrinsic_exponential.hpp79
-rw-r--r--include/gal/opengl/glm/core/intrinsic_exponential.inl27
-rw-r--r--include/gal/opengl/glm/core/intrinsic_geometric.hpp76
-rw-r--r--include/gal/opengl/glm/core/intrinsic_geometric.inl146
-rw-r--r--include/gal/opengl/glm/core/intrinsic_matrix.hpp69
-rw-r--r--include/gal/opengl/glm/core/intrinsic_matrix.inl1070
-rw-r--r--include/gal/opengl/glm/core/intrinsic_trigonometric.hpp48
-rw-r--r--include/gal/opengl/glm/core/intrinsic_trigonometric.inl27
-rw-r--r--include/gal/opengl/glm/core/intrinsic_vector_relational.hpp48
-rw-r--r--include/gal/opengl/glm/core/intrinsic_vector_relational.inl366
-rw-r--r--include/gal/opengl/glm/core/setup.hpp694
-rw-r--r--include/gal/opengl/glm/core/type.hpp341
-rw-r--r--include/gal/opengl/glm/core/type_float.hpp84
-rw-r--r--include/gal/opengl/glm/core/type_gentype.hpp169
-rw-r--r--include/gal/opengl/glm/core/type_gentype.inl366
-rw-r--r--include/gal/opengl/glm/core/type_half.hpp118
-rw-r--r--include/gal/opengl/glm/core/type_half.inl421
-rw-r--r--include/gal/opengl/glm/core/type_int.hpp142
-rw-r--r--include/gal/opengl/glm/core/type_mat.hpp41
-rw-r--r--include/gal/opengl/glm/core/type_mat.inl27
-rw-r--r--include/gal/opengl/glm/core/type_mat2x2.hpp314
-rw-r--r--include/gal/opengl/glm/core/type_mat2x2.inl688
-rw-r--r--include/gal/opengl/glm/core/type_mat2x3.hpp258
-rw-r--r--include/gal/opengl/glm/core/type_mat2x3.inl633
-rw-r--r--include/gal/opengl/glm/core/type_mat2x4.hpp260
-rw-r--r--include/gal/opengl/glm/core/type_mat2x4.inl652
-rw-r--r--include/gal/opengl/glm/core/type_mat3x2.hpp265
-rw-r--r--include/gal/opengl/glm/core/type_mat3x2.inl670
-rw-r--r--include/gal/opengl/glm/core/type_mat3x3.hpp318
-rw-r--r--include/gal/opengl/glm/core/type_mat3x3.inl800
-rw-r--r--include/gal/opengl/glm/core/type_mat3x4.hpp266
-rw-r--r--include/gal/opengl/glm/core/type_mat3x4.inl700
-rw-r--r--include/gal/opengl/glm/core/type_mat4x2.hpp270
-rw-r--r--include/gal/opengl/glm/core/type_mat4x2.inl716
-rw-r--r--include/gal/opengl/glm/core/type_mat4x3.hpp268
-rw-r--r--include/gal/opengl/glm/core/type_mat4x3.inl725
-rw-r--r--include/gal/opengl/glm/core/type_mat4x4.hpp320
-rw-r--r--include/gal/opengl/glm/core/type_mat4x4.inl893
-rw-r--r--include/gal/opengl/glm/core/type_size.hpp43
-rw-r--r--include/gal/opengl/glm/core/type_vec.hpp41
-rw-r--r--include/gal/opengl/glm/core/type_vec.inl27
-rw-r--r--include/gal/opengl/glm/core/type_vec1.hpp212
-rw-r--r--include/gal/opengl/glm/core/type_vec1.inl928
-rw-r--r--include/gal/opengl/glm/core/type_vec2.hpp317
-rw-r--r--include/gal/opengl/glm/core/type_vec2.inl998
-rw-r--r--include/gal/opengl/glm/core/type_vec3.hpp342
-rw-r--r--include/gal/opengl/glm/core/type_vec3.inl1122
-rw-r--r--include/gal/opengl/glm/core/type_vec4.hpp399
-rw-r--r--include/gal/opengl/glm/core/type_vec4.inl1348
-rw-r--r--include/gal/opengl/glm/ext.hpp145
-rw-r--r--include/gal/opengl/glm/glm.hpp129
-rw-r--r--include/gal/opengl/glm/gtc/constants.hpp186
-rw-r--r--include/gal/opengl/glm/gtc/constants.inl186
-rw-r--r--include/gal/opengl/glm/gtc/epsilon.hpp94
-rw-r--r--include/gal/opengl/glm/gtc/epsilon.inl286
-rw-r--r--include/gal/opengl/glm/gtc/half_float.hpp454
-rw-r--r--include/gal/opengl/glm/gtc/half_float.inl1050
-rw-r--r--include/gal/opengl/glm/gtc/matrix_access.hpp87
-rw-r--r--include/gal/opengl/glm/gtc/matrix_access.inl80
-rw-r--r--include/gal/opengl/glm/gtc/matrix_integer.hpp506
-rw-r--r--include/gal/opengl/glm/gtc/matrix_inverse.hpp74
-rw-r--r--include/gal/opengl/glm/gtc/matrix_inverse.inl159
-rw-r--r--include/gal/opengl/glm/gtc/matrix_transform.hpp291
-rw-r--r--include/gal/opengl/glm/gtc/matrix_transform.inl434
-rw-r--r--include/gal/opengl/glm/gtc/noise.hpp80
-rw-r--r--include/gal/opengl/glm/gtc/noise.inl867
-rw-r--r--include/gal/opengl/glm/gtc/quaternion.hpp381
-rw-r--r--include/gal/opengl/glm/gtc/quaternion.inl792
-rw-r--r--include/gal/opengl/glm/gtc/random.hpp114
-rw-r--r--include/gal/opengl/glm/gtc/random.inl170
-rw-r--r--include/gal/opengl/glm/gtc/reciprocal.hpp133
-rw-r--r--include/gal/opengl/glm/gtc/reciprocal.inl199
-rw-r--r--include/gal/opengl/glm/gtc/swizzle.hpp375
-rw-r--r--include/gal/opengl/glm/gtc/swizzle.inl116
-rw-r--r--include/gal/opengl/glm/gtc/type_precision.hpp669
-rw-r--r--include/gal/opengl/glm/gtc/type_precision.inl32
-rw-r--r--include/gal/opengl/glm/gtc/type_ptr.hpp169
-rw-r--r--include/gal/opengl/glm/gtc/type_ptr.inl473
-rw-r--r--include/gal/opengl/glm/gtc/ulp.hpp90
-rw-r--r--include/gal/opengl/glm/gtc/ulp.inl318
-rw-r--r--include/gal/opengl/glm/gtx/associated_min_max.hpp106
-rw-r--r--include/gal/opengl/glm/gtx/associated_min_max.inl912
-rw-r--r--include/gal/opengl/glm/gtx/bit.hpp140
-rw-r--r--include/gal/opengl/glm/gtx/bit.inl600
-rw-r--r--include/gal/opengl/glm/gtx/closest_point.hpp66
-rw-r--r--include/gal/opengl/glm/gtx/closest_point.inl36
-rw-r--r--include/gal/opengl/glm/gtx/color_cast.hpp124
-rw-r--r--include/gal/opengl/glm/gtx/color_cast.inl733
-rw-r--r--include/gal/opengl/glm/gtx/color_space.hpp96
-rw-r--r--include/gal/opengl/glm/gtx/color_space.inl149
-rw-r--r--include/gal/opengl/glm/gtx/color_space_YCoCg.hpp84
-rw-r--r--include/gal/opengl/glm/gtx/color_space_YCoCg.inl64
-rw-r--r--include/gal/opengl/glm/gtx/compatibility.hpp176
-rw-r--r--include/gal/opengl/glm/gtx/compatibility.inl60
-rw-r--r--include/gal/opengl/glm/gtx/component_wise.hpp82
-rw-r--r--include/gal/opengl/glm/gtx/component_wise.inl47
-rw-r--r--include/gal/opengl/glm/gtx/constants.hpp33
-rw-r--r--include/gal/opengl/glm/gtx/epsilon.hpp29
-rw-r--r--include/gal/opengl/glm/gtx/euler_angles.hpp156
-rw-r--r--include/gal/opengl/glm/gtx/euler_angles.inl244
-rw-r--r--include/gal/opengl/glm/gtx/extend.hpp66
-rw-r--r--include/gal/opengl/glm/gtx/extend.inl55
-rw-r--r--include/gal/opengl/glm/gtx/extented_min_max.hpp194
-rw-r--r--include/gal/opengl/glm/gtx/extented_min_max.inl178
-rw-r--r--include/gal/opengl/glm/gtx/fast_exponential.hpp99
-rw-r--r--include/gal/opengl/glm/gtx/fast_exponential.inl148
-rw-r--r--include/gal/opengl/glm/gtx/fast_square_root.hpp85
-rw-r--r--include/gal/opengl/glm/gtx/fast_square_root.inl136
-rw-r--r--include/gal/opengl/glm/gtx/fast_trigonometry.hpp100
-rw-r--r--include/gal/opengl/glm/gtx/fast_trigonometry.inl75
-rw-r--r--include/gal/opengl/glm/gtx/gradient_paint.hpp76
-rw-r--r--include/gal/opengl/glm/gtx/gradient_paint.inl43
-rw-r--r--include/gal/opengl/glm/gtx/handed_coordinate_space.hpp74
-rw-r--r--include/gal/opengl/glm/gtx/handed_coordinate_space.inl33
-rw-r--r--include/gal/opengl/glm/gtx/inertia.hpp115
-rw-r--r--include/gal/opengl/glm/gtx/inertia.inl114
-rw-r--r--include/gal/opengl/glm/gtx/int_10_10_10_2.hpp64
-rw-r--r--include/gal/opengl/glm/gtx/int_10_10_10_2.inl19
-rw-r--r--include/gal/opengl/glm/gtx/integer.hpp104
-rw-r--r--include/gal/opengl/glm/gtx/integer.inl203
-rw-r--r--include/gal/opengl/glm/gtx/intersect.hpp102
-rw-r--r--include/gal/opengl/glm/gtx/intersect.inl196
-rw-r--r--include/gal/opengl/glm/gtx/log_base.hpp65
-rw-r--r--include/gal/opengl/glm/gtx/log_base.inl24
-rw-r--r--include/gal/opengl/glm/gtx/matrix_cross_product.hpp71
-rw-r--r--include/gal/opengl/glm/gtx/matrix_cross_product.inl44
-rw-r--r--include/gal/opengl/glm/gtx/matrix_interpolation.hpp88
-rw-r--r--include/gal/opengl/glm/gtx/matrix_interpolation.inl131
-rw-r--r--include/gal/opengl/glm/gtx/matrix_major_storage.hpp143
-rw-r--r--include/gal/opengl/glm/gtx/matrix_major_storage.inl173
-rw-r--r--include/gal/opengl/glm/gtx/matrix_operation.hpp112
-rw-r--r--include/gal/opengl/glm/gtx/matrix_operation.inl124
-rw-r--r--include/gal/opengl/glm/gtx/matrix_query.hpp117
-rw-r--r--include/gal/opengl/glm/gtx/matrix_query.inl154
-rw-r--r--include/gal/opengl/glm/gtx/mixed_product.hpp65
-rw-r--r--include/gal/opengl/glm/gtx/mixed_product.inl22
-rw-r--r--include/gal/opengl/glm/gtx/multiple.hpp73
-rw-r--r--include/gal/opengl/glm/gtx/multiple.inl128
-rw-r--r--include/gal/opengl/glm/gtx/noise.hpp29
-rw-r--r--include/gal/opengl/glm/gtx/norm.hpp133
-rw-r--r--include/gal/opengl/glm/gtx/norm.inl156
-rw-r--r--include/gal/opengl/glm/gtx/normal.hpp67
-rw-r--r--include/gal/opengl/glm/gtx/normal.inl22
-rw-r--r--include/gal/opengl/glm/gtx/normalize_dot.hpp76
-rw-r--r--include/gal/opengl/glm/gtx/normalize_dot.inl115
-rw-r--r--include/gal/opengl/glm/gtx/number_precision.hpp88
-rw-r--r--include/gal/opengl/glm/gtx/number_precision.inl13
-rw-r--r--include/gal/opengl/glm/gtx/ocl_type.hpp132
-rw-r--r--include/gal/opengl/glm/gtx/ocl_type.inl27
-rw-r--r--include/gal/opengl/glm/gtx/optimum_pow.hpp91
-rw-r--r--include/gal/opengl/glm/gtx/optimum_pow.inl58
-rw-r--r--include/gal/opengl/glm/gtx/orthonormalize.hpp72
-rw-r--r--include/gal/opengl/glm/gtx/orthonormalize.inl43
-rw-r--r--include/gal/opengl/glm/gtx/perpendicular.hpp67
-rw-r--r--include/gal/opengl/glm/gtx/perpendicular.inl21
-rw-r--r--include/gal/opengl/glm/gtx/polar_coordinates.hpp72
-rw-r--r--include/gal/opengl/glm/gtx/polar_coordinates.inl55
-rw-r--r--include/gal/opengl/glm/gtx/projection.hpp65
-rw-r--r--include/gal/opengl/glm/gtx/projection.inl21
-rw-r--r--include/gal/opengl/glm/gtx/quaternion.hpp195
-rw-r--r--include/gal/opengl/glm/gtx/quaternion.inl208
-rw-r--r--include/gal/opengl/glm/gtx/random.hpp29
-rw-r--r--include/gal/opengl/glm/gtx/raw_data.hpp75
-rw-r--r--include/gal/opengl/glm/gtx/raw_data.inl11
-rw-r--r--include/gal/opengl/glm/gtx/reciprocal.hpp26
-rw-r--r--include/gal/opengl/glm/gtx/rotate_vector.hpp132
-rw-r--r--include/gal/opengl/glm/gtx/rotate_vector.inl215
-rw-r--r--include/gal/opengl/glm/gtx/simd_mat4.hpp206
-rw-r--r--include/gal/opengl/glm/gtx/simd_mat4.inl590
-rw-r--r--include/gal/opengl/glm/gtx/simd_vec4.hpp517
-rw-r--r--include/gal/opengl/glm/gtx/simd_vec4.inl727
-rw-r--r--include/gal/opengl/glm/gtx/spline.hpp90
-rw-r--r--include/gal/opengl/glm/gtx/spline.inl70
-rw-r--r--include/gal/opengl/glm/gtx/std_based_type.hpp83
-rw-r--r--include/gal/opengl/glm/gtx/std_based_type.inl13
-rw-r--r--include/gal/opengl/glm/gtx/string_cast.hpp70
-rw-r--r--include/gal/opengl/glm/gtx/string_cast.inl588
-rw-r--r--include/gal/opengl/glm/gtx/transform.hpp131
-rw-r--r--include/gal/opengl/glm/gtx/transform.inl90
-rw-r--r--include/gal/opengl/glm/gtx/transform2.hpp135
-rw-r--r--include/gal/opengl/glm/gtx/transform2.inl154
-rw-r--r--include/gal/opengl/glm/gtx/ulp.hpp29
-rw-r--r--include/gal/opengl/glm/gtx/unsigned_int.hpp26
-rw-r--r--include/gal/opengl/glm/gtx/unsigned_int.inl13
-rw-r--r--include/gal/opengl/glm/gtx/vec1.hpp137
-rw-r--r--include/gal/opengl/glm/gtx/vec1.inl27
-rw-r--r--include/gal/opengl/glm/gtx/vector_access.hpp85
-rw-r--r--include/gal/opengl/glm/gtx/vector_access.inl53
-rw-r--r--include/gal/opengl/glm/gtx/vector_angle.hpp88
-rw-r--r--include/gal/opengl/glm/gtx/vector_angle.inl57
-rw-r--r--include/gal/opengl/glm/gtx/vector_query.hpp112
-rw-r--r--include/gal/opengl/glm/gtx/vector_query.inl164
-rw-r--r--include/gal/opengl/glm/gtx/verbose_operator.hpp83
-rw-r--r--include/gal/opengl/glm/gtx/verbose_operator.inl124
-rw-r--r--include/gal/opengl/glm/gtx/wrap.hpp73
-rw-r--r--include/gal/opengl/glm/gtx/wrap.inl165
-rw-r--r--include/gal/opengl/glm/virtrev/xstream.hpp166
-rw-r--r--include/gal/opengl/gpu_manager.h182
-rw-r--r--include/gal/opengl/noncached_container.h73
-rw-r--r--include/gal/opengl/opengl_compositor.h109
-rw-r--r--include/gal/opengl/opengl_gal.h394
-rw-r--r--include/gal/opengl/shader.h210
-rw-r--r--include/gal/opengl/vertex_common.h76
-rw-r--r--include/gal/opengl/vertex_container.h176
-rw-r--r--include/gal/opengl/vertex_item.h103
-rw-r--r--include/gal/opengl/vertex_manager.h347
-rw-r--r--include/gal/stroke_font.h226
-rw-r--r--include/geometry/rtree.h1905
-rw-r--r--include/geometry/seg.h384
-rw-r--r--include/geometry/shape.h171
-rw-r--r--include/geometry/shape_circle.h103
-rw-r--r--include/geometry/shape_convex.h189
-rw-r--r--include/geometry/shape_file_io.h69
-rw-r--r--include/geometry/shape_index.h363
-rw-r--r--include/geometry/shape_index_list.h291
-rw-r--r--include/geometry/shape_line_chain.h598
-rw-r--r--include/geometry/shape_poly_set.h374
-rw-r--r--include/geometry/shape_rect.h168
-rw-r--r--include/geometry/shape_segment.h101
-rw-r--r--include/gestfich.h165
-rw-r--r--include/gr_basic.h258
-rw-r--r--include/grid_tricks.h96
-rw-r--r--include/hashtables.h144
-rw-r--r--include/hotkeys_basic.h245
-rw-r--r--include/html_messagebox.h85
-rw-r--r--include/i18n_utility.h41
-rw-r--r--include/id.h294
-rw-r--r--include/import_export.h60
-rw-r--r--include/ki_mutex.h56
-rw-r--r--include/kicad_curl/kicad_curl.h108
-rw-r--r--include/kicad_curl/kicad_curl_easy.h184
-rw-r--r--include/kicad_device_context.h204
-rw-r--r--include/kicad_string.h174
-rw-r--r--include/kiface_i.h140
-rw-r--r--include/kiway.h431
-rw-r--r--include/kiway_express.h105
-rw-r--r--include/kiway_mgr.h68
-rw-r--r--include/kiway_player.h309
-rw-r--r--include/layers_id_colors_and_visibility.h678
-rw-r--r--include/length.h.usuned278
-rw-r--r--include/macros.h119
-rw-r--r--include/mail_type.h44
-rw-r--r--include/math/box2.h476
-rw-r--r--include/math/math_util.h56
-rw-r--r--include/math/matrix3x3.h404
-rw-r--r--include/math/vector2d.h579
-rw-r--r--include/menus_helpers.h205
-rw-r--r--include/msgpanel.h195
-rw-r--r--include/newstroke_font.h35
-rw-r--r--include/online_help.h13
-rw-r--r--include/origin_viewitem.h146
-rw-r--r--include/pad_shapes.h55
-rw-r--r--include/painter.h314
-rw-r--r--include/pcbcommon.h42
-rw-r--r--include/pcbstruct.h106
-rw-r--r--include/pgm_base.h372
-rw-r--r--include/plot_common.h1104
-rw-r--r--include/profile.h90
-rw-r--r--include/project.h322
-rw-r--r--include/ptree.h96
-rw-r--r--include/reporter.h168
-rw-r--r--include/richio.h715
-rw-r--r--include/search_stack.h127
-rw-r--r--include/tool/action_manager.h138
-rw-r--r--include/tool/context_menu.h230
-rw-r--r--include/tool/coroutine.h268
-rw-r--r--include/tool/delegate.h100
-rw-r--r--include/tool/examples/Makefile9
-rw-r--r--include/tool/examples/coroutine_example.cpp49
-rw-r--r--include/tool/examples/delegate_example.cpp34
-rw-r--r--include/tool/tool_action.h223
-rw-r--r--include/tool/tool_base.h226
-rw-r--r--include/tool/tool_dispatcher.h135
-rw-r--r--include/tool/tool_event.h585
-rw-r--r--include/tool/tool_interactive.h121
-rw-r--r--include/tool/tool_manager.h455
-rw-r--r--include/tool/tool_settings.h80
-rw-r--r--include/trigo.h274
-rw-r--r--include/ttl/halfedge/hedart.h191
-rw-r--r--include/ttl/halfedge/hetraits.h189
-rw-r--r--include/ttl/halfedge/hetriang.h514
-rw-r--r--include/ttl/ttl.h1901
-rw-r--r--include/ttl/ttl_util.h129
-rw-r--r--include/utf8.h229
-rw-r--r--include/validators.h81
-rw-r--r--include/view/view.h721
-rw-r--r--include/view/view_controls.h269
-rw-r--r--include/view/view_group.h205
-rw-r--r--include/view/view_item.h356
-rw-r--r--include/view/view_rtree.h92
-rw-r--r--include/view/wx_view_controls.h153
-rw-r--r--include/wildcards_and_files_ext.h110
-rw-r--r--include/worksheet.h49
-rw-r--r--include/worksheet_shape_builder.h695
-rw-r--r--include/worksheet_viewitem.h171
-rw-r--r--include/wxBasePcbFrame.h703
-rw-r--r--include/wxPcbStruct.h1740
-rw-r--r--include/wx_status_popup.h58
-rw-r--r--include/wx_unit_binder.h97
-rw-r--r--include/wxstruct.h527
-rw-r--r--include/wxunittext.h144
-rw-r--r--include/xnode.h100
-rw-r--r--kicad/CMakeLists.txt148
-rw-r--r--kicad/Info.plist34
-rw-r--r--kicad/class_treeproject_item.cpp262
-rw-r--r--kicad/class_treeproject_item.h84
-rw-r--r--kicad/class_treeprojectfiles.cpp112
-rw-r--r--kicad/class_treeprojectfiles.h57
-rw-r--r--kicad/commandframe.cpp116
-rw-r--r--kicad/dialogs/dialog_template_selector.cpp280
-rw-r--r--kicad/dialogs/dialog_template_selector.fbp1105
-rw-r--r--kicad/dialogs/dialog_template_selector.h128
-rw-r--r--kicad/dialogs/dialog_template_selector_base.cpp125
-rw-r--r--kicad/dialogs/dialog_template_selector_base.h110
-rw-r--r--kicad/file_pro.icnsbin0 -> 165611 bytes
-rw-r--r--kicad/files-io.cpp249
-rw-r--r--kicad/kicad.cpp310
-rw-r--r--kicad/kicad.h337
-rw-r--r--kicad/kicad.icnsbin0 -> 130074 bytes
-rw-r--r--kicad/kicad.rc3
-rw-r--r--kicad/kicad_doc.icnsbin0 -> 157065 bytes
-rw-r--r--kicad/logokicad.pngbin0 -> 5450 bytes
-rw-r--r--kicad/mainframe.cpp547
-rw-r--r--kicad/menubar.cpp501
-rw-r--r--kicad/pgm_kicad.h76
-rw-r--r--kicad/preferences.cpp96
-rw-r--r--kicad/prjconfig.cpp398
-rw-r--r--kicad/project_template.cpp236
-rw-r--r--kicad/project_template.h204
-rw-r--r--kicad/tree_project_frame.cpp1093
-rw-r--r--kicad/tree_project_frame.h184
-rw-r--r--lib_dxf/CMakeLists.txt12
-rw-r--r--lib_dxf/CREDITS.txt4
-rw-r--r--lib_dxf/drw_base.h493
-rw-r--r--lib_dxf/drw_entities.cpp1517
-rw-r--r--lib_dxf/drw_entities.h1342
-rw-r--r--lib_dxf/drw_interface.h227
-rw-r--r--lib_dxf/drw_objects.cpp1435
-rw-r--r--lib_dxf/drw_objects.h743
-rw-r--r--lib_dxf/intern/drw_cptable932.h7812
-rw-r--r--lib_dxf/intern/drw_cptable936.h21943
-rw-r--r--lib_dxf/intern/drw_cptable949.h17199
-rw-r--r--lib_dxf/intern/drw_cptable950.h13654
-rw-r--r--lib_dxf/intern/drw_cptables.h1330
-rw-r--r--lib_dxf/intern/drw_textcodec.cpp693
-rw-r--r--lib_dxf/intern/drw_textcodec.h99
-rw-r--r--lib_dxf/intern/dxfreader.cpp333
-rw-r--r--lib_dxf/intern/dxfreader.h101
-rw-r--r--lib_dxf/intern/dxfwriter.cpp319
-rw-r--r--lib_dxf/intern/dxfwriter.h71
-rw-r--r--lib_dxf/libdxfrw.cpp3985
-rw-r--r--lib_dxf/libdxfrw.h147
-rw-r--r--new/CMakeLists.txt251
-rw-r--r--new/Doxyfile1552
-rw-r--r--new/design.h476
-rw-r--r--new/drawing.pngbin0 -> 63275 bytes
-rw-r--r--new/drawing.svg964
-rwxr-xr-xnew/make-dir-lib-source-test-data.sh150
-rwxr-xr-xnew/make-html.sh3
-rw-r--r--new/sch_canvas.cpp148
-rw-r--r--new/sch_canvas.h69
-rw-r--r--new/sch_dir_lib_source.cpp732
-rw-r--r--new/sch_dir_lib_source.h202
-rw-r--r--new/sch_lib.cpp278
-rw-r--r--new/sch_lib.h365
-rw-r--r--new/sch_lib_table.cpp341
-rw-r--r--new/sch_lib_table.h388
-rw-r--r--new/sch_lib_table.keywords6
-rw-r--r--new/sch_lpid.cpp501
-rw-r--r--new/sch_lpid.h245
-rw-r--r--new/sch_part.cpp675
-rw-r--r--new/sch_part.h908
-rw-r--r--new/sch_sweet_parser.cpp1561
-rw-r--r--new/sch_sweet_parser.h132
-rw-r--r--new/sweet.i38
-rw-r--r--new/sweet.keywords81
-rw-r--r--new/sweet_edit.cpp244
-rw-r--r--new/sweet_editor_panel.cpp76
-rw-r--r--new/sweet_editor_panel.fbp938
-rw-r--r--new/sweet_editor_panel.h67
-rw-r--r--new/sweet_spec_for_schematic_parts_EN.fodt732
-rw-r--r--new/test_sch_lib_table.cpp128
-rw-r--r--new/toolchain-mingw32.cmake45
-rw-r--r--new/toolchain-mingw64.cmake35
-rw-r--r--new/utf8.h59
-rwxr-xr-xpackaging/mac-osx/dmg-generator/AdiumApplescriptRunnerbin0 -> 18612 bytes
-rw-r--r--packaging/mac-osx/dmg-generator/Artwork/Anonymous_aiga_left_arrow.svg54
-rw-r--r--packaging/mac-osx/dmg-generator/Artwork/dmgBackground.pngbin0 -> 118847 bytes
-rw-r--r--packaging/mac-osx/dmg-generator/Artwork/dmgBackground.svg196
-rw-r--r--packaging/mac-osx/dmg-generator/Makefile40
-rw-r--r--packaging/mac-osx/dmg-generator/RightDS_Storebin0 -> 12292 bytes
-rw-r--r--packaging/mac-osx/dmg-generator/dmg_kicad.scptbin0 -> 15724 bytes
-rwxr-xr-xpackaging/mac-osx/dmg-generator/make-diskimage.sh78
-rwxr-xr-xpackaging/mac-osx/dmg-generator/mkaliasbin0 -> 34552 bytes
-rw-r--r--packaging/windows/nsis/Dutch.nsh28
-rw-r--r--packaging/windows/nsis/English.nsh28
-rw-r--r--packaging/windows/nsis/French.nsh31
-rw-r--r--packaging/windows/nsis/Installer Docs.odtbin0 -> 38520 bytes
-rw-r--r--packaging/windows/nsis/Italian.nsh31
-rw-r--r--packaging/windows/nsis/Japanese.nsh28
-rw-r--r--packaging/windows/nsis/Polish.nsh28
-rw-r--r--packaging/windows/nsis/Portuguese.nsh30
-rw-r--r--packaging/windows/nsis/Russian.nsh30
-rw-r--r--packaging/windows/nsis/Spanish.nsh31
-rw-r--r--packaging/windows/nsis/install.icobin0 -> 3638 bytes
-rw-r--r--packaging/windows/nsis/install.nsi304
-rw-r--r--packaging/windows/nsis/uninstall.icobin0 -> 3638 bytes
-rw-r--r--pagelayout_editor/CMakeLists.txt165
-rw-r--r--pagelayout_editor/Info.plist35
-rw-r--r--pagelayout_editor/class_pl_editor_layout.cpp53
-rw-r--r--pagelayout_editor/class_pl_editor_layout.h97
-rw-r--r--pagelayout_editor/class_pl_editor_screen.cpp140
-rw-r--r--pagelayout_editor/class_pl_editor_screen.h80
-rw-r--r--pagelayout_editor/controle.cpp62
-rw-r--r--pagelayout_editor/design_tree_frame.cpp291
-rw-r--r--pagelayout_editor/design_tree_frame.h108
-rw-r--r--pagelayout_editor/dialogs/dialog_new_dataitem.cpp185
-rw-r--r--pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp157
-rw-r--r--pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp1666
-rw-r--r--pagelayout_editor/dialogs/dialog_new_dataitem_base.h76
-rw-r--r--pagelayout_editor/dialogs/dialogs_for_printing.cpp251
-rw-r--r--pagelayout_editor/dialogs/properties_frame_base.cpp638
-rw-r--r--pagelayout_editor/dialogs/properties_frame_base.fbp7684
-rw-r--r--pagelayout_editor/dialogs/properties_frame_base.h145
-rw-r--r--pagelayout_editor/events_functions.cpp589
-rw-r--r--pagelayout_editor/files.cpp260
-rw-r--r--pagelayout_editor/hotkeys.cpp256
-rw-r--r--pagelayout_editor/hotkeys.h51
-rw-r--r--pagelayout_editor/invoke_pl_editor_dialog.h67
-rw-r--r--pagelayout_editor/menubar.cpp183
-rw-r--r--pagelayout_editor/onleftclick.cpp77
-rw-r--r--pagelayout_editor/onrightclick.cpp127
-rw-r--r--pagelayout_editor/page_layout_writer.cpp472
-rw-r--r--pagelayout_editor/pl_editor.cpp206
-rw-r--r--pagelayout_editor/pl_editor.icnsbin0 -> 12539 bytes
-rw-r--r--pagelayout_editor/pl_editor.rc3
-rw-r--r--pagelayout_editor/pl_editor_config.cpp104
-rw-r--r--pagelayout_editor/pl_editor_doc.icnsbin0 -> 55232 bytes
-rw-r--r--pagelayout_editor/pl_editor_frame.cpp786
-rw-r--r--pagelayout_editor/pl_editor_frame.h374
-rw-r--r--pagelayout_editor/pl_editor_id.h79
-rw-r--r--pagelayout_editor/pl_editor_undo_redo.cpp161
-rw-r--r--pagelayout_editor/properties_frame.cpp493
-rw-r--r--pagelayout_editor/properties_frame.h70
-rw-r--r--pagelayout_editor/toolbars_pl_editor.cpp167
910 files changed, 478511 insertions, 0 deletions
diff --git a/CMakeModules/CMakeFindFrameworks.cmake b/CMakeModules/CMakeFindFrameworks.cmake
new file mode 100644
index 0000000..7fdeb84
--- /dev/null
+++ b/CMakeModules/CMakeFindFrameworks.cmake
@@ -0,0 +1,32 @@
+# - helper module to find OSX frameworks
+
+#=============================================================================
+# Copyright 2003-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if(NOT CMAKE_FIND_FRAMEWORKS_INCLUDED)
+ set(CMAKE_FIND_FRAMEWORKS_INCLUDED 1)
+ macro(CMAKE_FIND_FRAMEWORKS fwk)
+ set(${fwk}_FRAMEWORKS)
+ if(APPLE)
+ foreach(dir
+ ~/Library/Frameworks/${fwk}.framework
+ /Library/Frameworks/${fwk}.framework
+ /System/Library/Frameworks/${fwk}.framework
+ /Network/Library/Frameworks/${fwk}.framework)
+ if(EXISTS ${dir})
+ set(${fwk}_FRAMEWORKS ${${fwk}_FRAMEWORKS} ${dir})
+ endif()
+ endforeach()
+ endif()
+ endmacro()
+endif()
diff --git a/CMakeModules/CheckCXXSymbolExists.cmake b/CMakeModules/CheckCXXSymbolExists.cmake
new file mode 100644
index 0000000..2100973
--- /dev/null
+++ b/CMakeModules/CheckCXXSymbolExists.cmake
@@ -0,0 +1,42 @@
+# - Check if a symbol exists as a function, variable, or macro in C++
+# CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>)
+#
+# Check that the <symbol> is available after including given header
+# <files> and store the result in a <variable>. Specify the list
+# of files in one argument as a semicolon-separated list.
+# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as opposed
+# to CHECK_SYMBOL_EXISTS(), which works only for C.
+#
+# If the header files define the symbol as a macro it is considered
+# available and assumed to work. If the header files declare the
+# symbol as a function or variable then the symbol must also be
+# available for linking. If the symbol is a type or enum value
+# it will not be recognized (consider using CheckTypeSize or
+# CheckCSourceCompiles).
+#
+# The following variables may be set before calling this macro to
+# modify the way the check is run:
+#
+# CMAKE_REQUIRED_FLAGS = string of compile command line flags
+# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+# CMAKE_REQUIRED_INCLUDES = list of include directories
+# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+
+#=============================================================================
+# Copyright 2003-2011 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+include(CheckSymbolExists)
+
+macro(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
+ _CHECK_SYMBOL_EXISTS("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
+endmacro()
diff --git a/CMakeModules/CheckFindPackageResult.cmake b/CMakeModules/CheckFindPackageResult.cmake
new file mode 100644
index 0000000..3cb1a21
--- /dev/null
+++ b/CMakeModules/CheckFindPackageResult.cmake
@@ -0,0 +1,8 @@
+macro(check_find_package_result _VAR _PKGNAME)
+ if(${_VAR})
+ message(STATUS "Check for installed ${_PKGNAME} -- found")
+ else(${_VAR})
+ message(STATUS "Check for installed ${_PKGNAME} -- not found")
+ message(FATAL_ERROR "${_PKGNAME} was not found - it is required to build Kicad")
+ endif(${_VAR})
+endmacro(check_find_package_result)
diff --git a/CMakeModules/CreateBzrVersionHeader.cmake b/CMakeModules/CreateBzrVersionHeader.cmake
new file mode 100644
index 0000000..2c86e5f
--- /dev/null
+++ b/CMakeModules/CreateBzrVersionHeader.cmake
@@ -0,0 +1,75 @@
+#
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2010 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2010-2015 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+macro( create_bzr_version_header _bzr_src_path )
+ # If bzr is not found or an error occurs using the bzr commands to determine the repo
+ # version, set the build version string to "no-bzr"
+ set( KICAD_BUILD_VERSION "no-bzr" )
+
+ # Include Bazaar support to automagically create version header file.
+ find_package( Bazaar )
+
+ if( Bazaar_FOUND )
+ set( _Bazaar_SAVED_LC_ALL "$ENV{LC_ALL}" )
+ set( ENV{LC_ALL} C )
+
+ # Get the tree revision
+ execute_process(
+ COMMAND ${Bazaar_EXECUTABLE} revno --tree ${_bzr_src_path}
+ OUTPUT_VARIABLE _bzr_TREE_DATE
+ RESULT_VARIABLE _bzr_revno_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE )
+
+ if( ${_bzr_revno_result} EQUAL 0 )
+ # Get more info about that revision
+ execute_process(
+ COMMAND ${Bazaar_EXECUTABLE} log -r${_bzr_TREE_DATE} ${_bzr_src_path}
+ OUTPUT_VARIABLE _bzr_LAST_CHANGE_LOG
+ ERROR_VARIABLE _bzr_log_error
+ RESULT_VARIABLE _bzr_log_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE )
+
+ if( ${_bzr_log_result} EQUAL 0 )
+ string( REGEX REPLACE "^(.*\n)?revno: ([^ \n]+).*"
+ "\\2" Kicad_REPO_REVISION "${_bzr_LAST_CHANGE_LOG}" )
+ string( REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*"
+ "\\2" Kicad_REPO_LAST_CHANGED_AUTHOR "${_bzr_LAST_CHANGE_LOG}" )
+ string( REGEX REPLACE "^(.*\n)?timestamp: [a-zA-Z]+ ([^ \n]+).*"
+ "\\2" Kicad_REPO_LAST_CHANGED_DATE "${_bzr_LAST_CHANGE_LOG}" )
+ endif()
+ endif()
+
+ set( ENV{LC_ALL} ${_Bazaar_SAVED_LC_ALL} )
+ endif()
+
+ # Check to make sure 'bzr log' command did not fail. Otherwise, default
+ # to "no-bzr" as the revision.
+ if( Kicad_REPO_LAST_CHANGED_DATE )
+ string( REGEX REPLACE "^([0-9]+)\\-([0-9]+)\\-([0-9]+)" "\\1-\\2-\\3"
+ _kicad_bzr_date ${Kicad_REPO_LAST_CHANGED_DATE} )
+ set( KICAD_BUILD_VERSION "(${_kicad_bzr_date} BZR ${Kicad_REPO_REVISION})" )
+ endif()
+
+ set( KICAD_BUILD_VERSION ${KICAD_BUILD_VERSION} )
+endmacro()
diff --git a/CMakeModules/CreateGitVersionHeader.cmake b/CMakeModules/CreateGitVersionHeader.cmake
new file mode 100644
index 0000000..c05ec3d
--- /dev/null
+++ b/CMakeModules/CreateGitVersionHeader.cmake
@@ -0,0 +1,105 @@
+#
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2010 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2010-2016 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+macro( create_git_version_header _git_src_path )
+ # If an error occurs using the git commands to determine the repo
+ # version, set the build version string to "git-error".
+ set( KICAD_GIT_BUILD_VERSION "git-error" )
+
+ # Include Git support to automagically create version header file.
+ find_package( Git )
+
+ if( GIT_FOUND )
+ set( _Git_SAVED_LC_ALL "$ENV{LC_ALL}" )
+ set( ENV{LC_ALL} C )
+
+ # Get latest commit hash
+ execute_process(
+ COMMAND
+ ${GIT_EXECUTABLE} --no-pager log -1 HEAD
+ --pretty=format:%H
+ WORKING_DIRECTORY ${_git_src_path}
+ OUTPUT_VARIABLE _git_LONG_HASH
+ ERROR_VARIABLE _git_log_error
+ RESULT_VARIABLE _git_log_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if( ${_git_log_result} EQUAL 0 )
+ execute_process(
+ COMMAND
+ ${GIT_EXECUTABLE} --no-pager log -1 HEAD
+ --pretty=format:%h
+ WORKING_DIRECTORY ${_git_src_path}
+ OUTPUT_VARIABLE _git_SHORT_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ execute_process(
+ COMMAND
+ ${GIT_EXECUTABLE} --no-pager log -1 HEAD
+ --pretty=format:%cn
+ WORKING_DIRECTORY ${_git_src_path}
+ OUTPUT_VARIABLE _git_LAST_COMITTER
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ execute_process(
+ COMMAND
+ ${GIT_EXECUTABLE} --no-pager log -1 HEAD
+ --pretty=format:%cd --date=short
+ WORKING_DIRECTORY ${_git_src_path}
+ OUTPUT_VARIABLE _git_LAST_CHANGE_LOG
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ execute_process(
+ COMMAND
+ ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY ${_git_src_path}
+ OUTPUT_VARIABLE _git_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ message(STATUS "Git hash: ${_git_LONG_HASH}")
+ message(STATUS "Git branch: ${_git_BRANCH}")
+
+ if( ${_git_log_result} EQUAL 0 )
+ string( REGEX REPLACE "^(.*\n)?revno: ([^ \n]+).*"
+ "\\2" Kicad_REPO_REVISION "revision ${_git_SHORT_HASH}" )
+ string( REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*"
+ "\\2" Kicad_REPO_LAST_CHANGED_AUTHOR "${_git_LAST_COMITTER}")
+ string( REGEX REPLACE "^(.*\n)?timestamp: [a-zA-Z]+ ([^ \n]+).*"
+ "\\2" Kicad_REPO_LAST_CHANGED_DATE "${_git_LAST_CHANGE_LOG}")
+ endif()
+ endif()
+
+ set( ENV{LC_ALL} ${_Git_SAVED_LC_ALL} )
+ endif( GIT_FOUND )
+
+ # Check to make sure 'git' command did not fail. Otherwise fallback
+ # to "no-git" as the revision.
+ if( Kicad_REPO_LAST_CHANGED_DATE )
+ string( REGEX REPLACE "^([0-9]+)\\-([0-9]+)\\-([0-9]+)" "\\1-\\2-\\3"
+ _kicad_git_date ${Kicad_REPO_LAST_CHANGED_DATE} )
+ set( KICAD_VERSION "(${_kicad_git_date} ${Kicad_REPO_REVISION})" )
+ set( KICAD_BRANCH_NAME ${_git_BRANCH} )
+ endif()
+
+endmacro()
diff --git a/CMakeModules/CreateSVNVersionHeader.cmake b/CMakeModules/CreateSVNVersionHeader.cmake
new file mode 100644
index 0000000..1c6b9d9
--- /dev/null
+++ b/CMakeModules/CreateSVNVersionHeader.cmake
@@ -0,0 +1,61 @@
+macro(create_svn_version_header)
+ # Include Subversion support to automagically create version header file.
+ find_package(Subversion)
+
+ if(Subversion_FOUND)
+ # Copied from the CMake module FindSubversion.cmake. The default
+ # version prevents generating the output files when the "svn info"
+ # command fails. Just fall back to using "build_version.h" for
+ # the version strings.
+ set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
+ set(ENV{LC_ALL} C)
+
+ execute_process(
+ COMMAND ${Subversion_SVN_EXECUTABLE} info ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE Kicad_WC_INFO
+ ERROR_VARIABLE _svn_error
+ RESULT_VARIABLE _svn_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(NOT ${_svn_result} EQUAL 0)
+ message(STATUS
+ "Using <build_version.h> for version string.")
+ else(NOT ${_svn_result} EQUAL 0)
+ string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
+ "\\2" Kicad_WC_URL "${Kicad_WC_INFO}")
+ string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
+ "\\2" Kicad_WC_REVISION "${Kicad_WC_INFO}")
+ string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
+ "\\2" Kicad_WC_LAST_CHANGED_AUTHOR "${Kicad_WC_INFO}")
+ string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
+ "\\2" Kicad_WC_LAST_CHANGED_REV "${Kicad_WC_INFO}")
+ string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
+ "\\2" Kicad_WC_LAST_CHANGED_DATE "${Kicad_WC_INFO}")
+ endif(NOT ${_svn_result} EQUAL 0)
+
+ set(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL})
+ endif(Subversion_FOUND)
+
+ # Check to make sure 'svn info' command did not fail. Otherwise fallback
+ # to version strings defined in "<kicad-src-dir>/include/build_version.h".
+ if(Kicad_WC_LAST_CHANGED_DATE)
+ string(REGEX REPLACE "^([0-9]+)\\-([0-9]+)\\-([0-9]+).*" "\\1\\2\\3"
+ _kicad_svn_date ${Kicad_WC_LAST_CHANGED_DATE})
+ set(KICAD_BUILD_VERSION
+ "(${_kicad_svn_date} SVN-R${Kicad_WC_LAST_CHANGED_REV})")
+
+ # Definition to conditionally use date and revision returned from the
+ # Subversion info command instead of hand coded date and revision in
+ # "include/build_version.h". If subversion is not found then the date
+ # and version information must be manually edited.
+ # Directive means SVN build, program version and build version will
+ # reflect this.
+ add_definitions(-DHAVE_SVN_VERSION)
+
+ # Generate version.h.
+ configure_file(${CMAKE_SOURCE_DIR}/CMakeModules/version.h.cmake
+ ${CMAKE_BINARY_DIR}/version.h)
+
+ message(STATUS "Kicad SVN build version: ${KICAD_BUILD_VERSION}")
+ endif(Kicad_WC_LAST_CHANGED_DATE)
+endmacro(create_svn_version_header)
diff --git a/CMakeModules/FindBazaar.cmake b/CMakeModules/FindBazaar.cmake
new file mode 100644
index 0000000..91cd855
--- /dev/null
+++ b/CMakeModules/FindBazaar.cmake
@@ -0,0 +1,81 @@
+#
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2010 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2010 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+# This CMake script finds the Bazaar version control system executable and
+# and fetches the veresion string to valid that Bazaar was found and executes
+# properly.
+#
+# Usage:
+# find_package( Bazaar )
+#
+# User definable.
+# Bazaar_EXECUTABLE Set this to use a version of Bazaar that is not in
+# current path. Defaults to bzr.
+#
+# Defines:
+# Bazaar_FOUND Set to TRUE if Bazaar command line client is found
+# and the bzr --version command executes properly.
+# Bazaar_VERSION Result of the bzr --version command.
+#
+
+set( Bazaar_FOUND FALSE )
+
+find_program( Bazaar_EXECUTABLE bzr
+ DOC "Bazaar version control system command line client" )
+mark_as_advanced( Bazaar_EXECUTABLE )
+
+if( Bazaar_EXECUTABLE )
+
+ # Bazaar commands should be executed with the C locale, otherwise
+ # the message (which are parsed) may be translated causing the regular
+ # expressions to fail.
+ set( _Bazaar_SAVED_LC_ALL "$ENV{LC_ALL}" )
+ set( ENV{LC_ALL} C )
+
+ # Fetch the Bazaar executable version.
+ execute_process( COMMAND ${Bazaar_EXECUTABLE} --version
+ OUTPUT_VARIABLE _bzr_version_output
+ ERROR_VARIABLE _bzr_version_error
+ RESULT_VARIABLE _bzr_version_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE )
+
+ if( ${_bzr_version_result} EQUAL 0 )
+ set( Bazaar_FOUND TRUE )
+ string( REGEX REPLACE "^[\n]*Bazaar \\(bzr\\) ([0-9.a-z]+).*"
+ "\\1" Bazaar_VERSION "${_bzr_version_output}" )
+ message( STATUS "Bazaar version control system version ${Bazaar_VERSION} found." )
+ endif()
+
+ # restore the previous LC_ALL
+ set( ENV{LC_ALL} ${_Bazaar_SAVED_LC_ALL} )
+endif()
+
+if( NOT Bazaar_FOUND )
+ if( NOT Bazaar_FIND_QUIETLY )
+ message( STATUS "Bazaar version control command line client was not found." )
+ else()
+ if( Bazaar_FIND_REQUIRED )
+ message( FATAL_ERROR "Bazaar version control command line client was not found." )
+ endif()
+ endif()
+endif()
diff --git a/CMakeModules/FindCairo.cmake b/CMakeModules/FindCairo.cmake
new file mode 100644
index 0000000..bc23028
--- /dev/null
+++ b/CMakeModules/FindCairo.cmake
@@ -0,0 +1,168 @@
+# - Try to find the CAIRO library
+# Once done this will define
+#
+# CAIRO_ROOT_DIR - Set this variable to the root installation of CAIRO
+#
+# Read-Only variables:
+# CAIRO_FOUND - system has the CAIRO library
+# CAIRO_INCLUDE_DIR - the CAIRO include directory
+# CAIRO_LIBRARIES - The libraries needed to use CAIRO
+# CAIRO_VERSION - This is set to $major.$minor.$revision (eg. 0.9.8)
+
+#=============================================================================
+# Copyright 2012 Dmitry Baryshnikov <polimax at mail dot ru>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if (UNIX)
+ find_package(PkgConfig)
+ if (PKG_CONFIG_FOUND)
+ pkg_check_modules(_CAIRO cairo)
+ endif (PKG_CONFIG_FOUND)
+endif (UNIX)
+
+SET(_CAIRO_ROOT_HINTS
+ $ENV{CAIRO}
+ ${CAIRO_ROOT_DIR}
+ )
+SET(_CAIRO_ROOT_PATHS
+ $ENV{CAIRO}/src
+ /usr
+ /usr/local
+ )
+SET(_CAIRO_ROOT_HINTS_AND_PATHS
+ HINTS ${_CAIRO_ROOT_HINTS}
+ PATHS ${_CAIRO_ROOT_PATHS}
+ )
+
+FIND_PATH(CAIRO_INCLUDE_DIR
+ NAMES
+ cairo.h
+ HINTS
+ ${_CAIRO_INCLUDEDIR}
+ ${_CAIRO_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ include
+ "include/cairo"
+)
+
+IF(WIN32 AND NOT CYGWIN)
+ # MINGW should go here too
+ IF(MSVC)
+ # Implementation details:
+ # We are using the libraries located in the VC subdir instead of the parent directory eventhough :
+ FIND_LIBRARY(CAIRO_DEBUG
+ NAMES
+ cairod
+ ${_CAIRO_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "VC"
+ "lib/VC"
+ )
+
+ FIND_LIBRARY(CAIRO_RELEASE
+ NAMES
+ cairo
+ ${_CAIRO_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "VC"
+ "lib/VC"
+ )
+
+ if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+ if(NOT CAIRO_DEBUG)
+ set(CAIRO_DEBUG ${CAIRO_RELEASE})
+ endif(NOT CAIRO_DEBUG)
+ set( CAIRO_LIBRARIES
+ optimized ${CAIRO_RELEASE} debug ${CAIRO_DEBUG}
+ )
+ else()
+ set( CAIRO_LIBRARIES ${CAIRO_RELEASE})
+ endif()
+ MARK_AS_ADVANCED(CAIRO_DEBUG CAIRO_RELEASE)
+ ELSEIF(MINGW)
+ # same player, for MingW
+ FIND_LIBRARY(CAIRO
+ NAMES
+ cairo
+ ${_CAIRO_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "lib/MinGW"
+ )
+
+ MARK_AS_ADVANCED(CAIRO)
+ set( CAIRO_LIBRARIES ${CAIRO})
+ ELSE(MSVC)
+ # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
+ FIND_LIBRARY(CAIRO
+ NAMES
+ cairo
+ HINTS
+ ${_CAIRO_LIBDIR}
+ ${_CAIRO_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ lib
+ )
+
+ MARK_AS_ADVANCED(CAIRO)
+ set( CAIRO_LIBRARIES ${CAIRO} )
+ ENDIF(MSVC)
+ELSE(WIN32 AND NOT CYGWIN)
+
+ FIND_LIBRARY(CAIRO_LIBRARY
+ NAMES
+ cairo
+ HINTS
+ ${_CAIRO_LIBDIR}
+ ${_CAIRO_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "local/lib"
+ )
+
+ MARK_AS_ADVANCED(CAIRO_LIBRARY)
+
+ # compat defines
+ SET(CAIRO_LIBRARIES ${CAIRO_LIBRARY})
+
+ENDIF(WIN32 AND NOT CYGWIN)
+
+ # if (CAIRO_INCLUDE_DIR)
+ # file(READ "${CAIRO_INCLUDE_DIR}/gcore/gdal_version.h" _wxgisgdal_VERSION_H_CONTENTS)
+ # string(REGEX REPLACE ".*# define[ \t]+GDAL_RELEASE_NAME[ \t]+\"([0-9A-Za-z.]+)\".*"
+ # "\\1" CAIRO_VERSION ${_wxgisgdal_VERSION_H_CONTENTS})
+ # set(CAIRO_VERSION ${CAIRO_VERSION} CACHE INTERNAL "The version number for wxgisgdal libraries")
+ # endif (CAIRO_INCLUDE_DIR)
+
+include(FindPackageHandleStandardArgs)
+
+# if (CAIRO_VERSION)
+ # find_package_handle_standard_args(CAIRO
+ # REQUIRED_VARS
+ # CAIRO_LIBRARIES
+ # CAIRO_INCLUDE_DIR
+ # VERSION_VAR
+ # CAIRO_VERSION
+ # FAIL_MESSAGE
+ # "Could NOT find CAIRO, try to set the path to CAIRO root folder in the system variable CAIRO_ROOT_DIR"
+ # )
+# else (CAIRO_VERSION)
+ find_package_handle_standard_args(CAIRO "Could NOT find CAIRO, try to set the path to CAIRO root folder in the system variable CAIRO"
+ CAIRO_LIBRARIES
+ CAIRO_INCLUDE_DIR
+ )
+# endif (CAIRO_VERSION)
+
+MARK_AS_ADVANCED(CAIRO_INCLUDE_DIR CAIRO_LIBRARIES)
+
diff --git a/CMakeModules/FindGLEW.cmake b/CMakeModules/FindGLEW.cmake
new file mode 100644
index 0000000..621fe3b
--- /dev/null
+++ b/CMakeModules/FindGLEW.cmake
@@ -0,0 +1,112 @@
+# Copyright (c) 2009 Boudewijn Rempt <boud@valdyas.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+# - try to find glew library and include files
+# GLEW_INCLUDE_DIR, where to find GL/glew.h, etc.
+# GLEW_LIBRARIES, the libraries to link against
+# GLEW_FOUND, If false, do not try to use GLEW.
+# Also defined, but not for general use are:
+# GLEW_GLEW_LIBRARY = the full path to the glew library.
+
+IF (WIN32)
+
+ IF(CYGWIN)
+
+ FIND_PATH( GLEW_INCLUDE_DIR GL/glew.h)
+
+ FIND_LIBRARY( GLEW_GLEW_LIBRARY glew32
+ ${OPENGL_LIBRARY_DIR}
+ /usr/lib/w32api
+ /usr/X11R6/lib
+ )
+
+
+ ELSE(CYGWIN)
+
+ FIND_PATH( GLEW_INCLUDE_DIR GL/glew.h
+ $ENV{GLEW_ROOT_PATH}/include
+ )
+
+ FIND_LIBRARY( GLEW_GLEW_LIBRARY
+ NAMES glew glew32 glew32s
+ PATHS
+ $ENV{GLEW_ROOT_PATH}/lib
+ $ENV{GLEW_ROOT_PATH}/lib/Release/Win32
+ ${OPENGL_LIBRARY_DIR}
+ )
+
+ ENDIF(CYGWIN)
+
+ELSE (WIN32)
+
+ IF (APPLE)
+# These values for Apple could probably do with improvement.
+ FIND_PATH( GLEW_INCLUDE_DIR GL/glew.h
+ /System/Library/Frameworks/GLEW.framework/Versions/A/Headers
+ /opt/local/include
+ ${OPENGL_LIBRARY_DIR}
+ )
+
+ FIND_LIBRARY( GLEW_GLEW_LIBRARY GLEW
+ /opt/local/lib
+ )
+
+ ELSE (APPLE)
+
+ FIND_PATH( GLEW_INCLUDE_DIR GL/glew.h
+ /usr/include/GL
+ /usr/openwin/share/include
+ /usr/openwin/include
+ /usr/X11R6/include
+ /usr/include/X11
+ /opt/graphics/OpenGL/include
+ /opt/graphics/OpenGL/contrib/libglew
+ )
+
+ FIND_LIBRARY( GLEW_GLEW_LIBRARY GLEW
+ /usr/openwin/lib
+ /usr/X11R6/lib
+ /usr/lib
+ /usr/lib/x86_64-linux-gnu
+ )
+
+ ENDIF (APPLE)
+
+ENDIF (WIN32)
+
+SET( GLEW_FOUND "NO" )
+IF(GLEW_INCLUDE_DIR)
+ IF(GLEW_GLEW_LIBRARY)
+ # Is -lXi and -lXmu required on all platforms that have it?
+ # If not, we need some way to figure out what platform we are on.
+ SET( GLEW_LIBRARIES
+ ${GLEW_GLEW_LIBRARY}
+ ${GLEW_cocoa_LIBRARY}
+ )
+ SET( GLEW_FOUND "YES" )
+
+#The following deprecated settings are for backwards compatibility with CMake1.4
+ SET (GLEW_LIBRARY ${GLEW_LIBRARIES})
+ SET (GLEW_INCLUDE_PATH ${GLEW_INCLUDE_DIR})
+
+ ENDIF(GLEW_GLEW_LIBRARY)
+ENDIF(GLEW_INCLUDE_DIR)
+
+IF(GLEW_FOUND)
+ IF(NOT GLEW_FIND_QUIETLY)
+ MESSAGE(STATUS "Found Glew: ${GLEW_LIBRARIES}")
+ ENDIF(NOT GLEW_FIND_QUIETLY)
+ELSE(GLEW_FOUND)
+ IF(GLEW_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find Glew")
+ ENDIF(GLEW_FIND_REQUIRED)
+ENDIF(GLEW_FOUND)
+
+MARK_AS_ADVANCED(
+ GLEW_INCLUDE_DIR
+ GLEW_GLEW_LIBRARY
+ GLEW_Xmu_LIBRARY
+ GLEW_Xi_LIBRARY
+)
diff --git a/CMakeModules/FindGdiPlus.cmake b/CMakeModules/FindGdiPlus.cmake
new file mode 100644
index 0000000..cde55a3
--- /dev/null
+++ b/CMakeModules/FindGdiPlus.cmake
@@ -0,0 +1,22 @@
+# - Try to find Microsoft GDI+ build files.
+# Once done this will define
+#
+# GDI_PLUS_FOUND - system has GDI+
+# GDI_PLUS_INCLUDE_DIR - the GDI+ include directory
+# GDI_PLUS_LIBRARIES - Link these to use GDI+
+
+if(GDI_PLUS_INCLUDE_DIR AND GDI_PLUS_LIBRARIES)
+ set(GDI_PLUS_FIND_QUIETLY TRUE)
+endif(GDI_PLUS_INCLUDE_DIR AND GDI_PLUS_LIBRARIES)
+
+find_path(GDI_PLUS_INCLUDE_DIR GdiPlus.h )
+
+find_library(GDI_PLUS_LIBRARIES gdiplus )
+
+# handle the QUIETLY and REQUIRED arguments and set GDI_PLUS_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+
+find_package_handle_standard_args(GDI_PLUS DEFAULT_MSG GDI_PLUS_LIBRARIES GDI_PLUS_INCLUDE_DIR)
+
+mark_as_advanced(GDI_PLUS_INCLUDE_DIR GDI_PLUS_LIBRARIES)
diff --git a/CMakeModules/FindOpenSSL.cmake b/CMakeModules/FindOpenSSL.cmake
new file mode 100644
index 0000000..de91787
--- /dev/null
+++ b/CMakeModules/FindOpenSSL.cmake
@@ -0,0 +1,342 @@
+#.rst:
+# FindOpenSSL
+# -----------
+#
+# Try to find the OpenSSL encryption library
+#
+# Once done this will define
+#
+# ::
+#
+# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL
+#
+#
+#
+# Read-Only variables:
+#
+# ::
+#
+# OPENSSL_FOUND - system has the OpenSSL library
+# OPENSSL_INCLUDE_DIR - the OpenSSL include directory
+# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL
+# OPENSSL_VERSION - This is set to $major.$minor.$revision$path (eg. 0.9.8s)
+
+#=============================================================================
+# Copyright 2006-2009 Kitware, Inc.
+# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
+# Copyright 2009-2011 Mathieu Malaterre <mathieu.malaterre@gmail.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if (UNIX)
+ find_package(PkgConfig QUIET)
+ pkg_check_modules(_OPENSSL QUIET openssl)
+endif ()
+
+if (WIN32)
+ # http://www.slproweb.com/products/Win32OpenSSL.html
+ set(_OPENSSL_ROOT_HINTS
+ ${OPENSSL_ROOT_DIR}
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
+ ENV OPENSSL_ROOT_DIR
+ )
+ file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
+ set(_OPENSSL_ROOT_PATHS
+ "${_programfiles}/OpenSSL"
+ "${_programfiles}/OpenSSL-Win32"
+ "${_programfiles}/OpenSSL-Win64"
+ "C:/OpenSSL/"
+ "C:/OpenSSL-Win32/"
+ "C:/OpenSSL-Win64/"
+ )
+ unset(_programfiles)
+else ()
+ set(_OPENSSL_ROOT_HINTS
+ ${OPENSSL_ROOT_DIR}
+ ENV OPENSSL_ROOT_DIR
+ )
+endif ()
+
+set(_OPENSSL_ROOT_HINTS_AND_PATHS
+ HINTS ${_OPENSSL_ROOT_HINTS}
+ PATHS ${_OPENSSL_ROOT_PATHS}
+ )
+
+find_path(OPENSSL_INCLUDE_DIR
+ NAMES
+ openssl/ssl.h
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_INCLUDEDIR}
+ PATH_SUFFIXES
+ include
+)
+
+if(WIN32 AND NOT CYGWIN)
+ if(MSVC)
+ # /MD and /MDd are the standard values - if someone wants to use
+ # others, the libnames have to change here too
+ # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
+ # TODO: handle /MT and static lib
+ # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
+ # * MD for dynamic-release
+ # * MDd for dynamic-debug
+ # * MT for static-release
+ # * MTd for static-debug
+
+ # Implementation details:
+ # We are using the libraries located in the VC subdir instead of the parent directory eventhough :
+ # libeay32MD.lib is identical to ../libeay32.lib, and
+ # ssleay32MD.lib is identical to ../ssleay32.lib
+ find_library(LIB_EAY_DEBUG
+ NAMES
+ libeay32MDd
+ libeay32d
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "VC"
+ "lib/VC"
+ )
+
+ find_library(LIB_EAY_RELEASE
+ NAMES
+ libeay32MD
+ libeay32
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "VC"
+ "lib/VC"
+ )
+
+ find_library(SSL_EAY_DEBUG
+ NAMES
+ ssleay32MDd
+ ssleay32d
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "VC"
+ "lib/VC"
+ )
+
+ find_library(SSL_EAY_RELEASE
+ NAMES
+ ssleay32MD
+ ssleay32
+ ssl
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "VC"
+ "lib/VC"
+ )
+
+ set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}")
+ set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}")
+ set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
+ set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
+
+ include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+ select_library_configurations(LIB_EAY)
+ select_library_configurations(SSL_EAY)
+
+ mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE
+ SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE)
+ set( OPENSSL_LIBRARIES ${SSL_EAY_LIBRARY} ${LIB_EAY_LIBRARY} )
+ elseif(MINGW)
+ message( STATUS "Searching for OpenSSL in MinGW." )
+ # same player, for MinGW
+ set(LIB_EAY_NAMES libeay32)
+ set(SSL_EAY_NAMES ssleay32)
+ list(APPEND LIB_EAY_NAMES crypto)
+ list(APPEND SSL_EAY_NAMES ssl)
+
+ find_library(LIB_EAY
+ NAMES
+ ${LIB_EAY_NAMES}
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "lib/MinGW"
+ # Do not search system path. Otherwise the DLL will be found rather than the link library.
+ NO_SYSTEM_ENVIRONMENT_PATH
+ NO_CMAKE_SYSTEM_PATH
+ )
+
+ find_library(SSL_EAY
+ NAMES
+ ${SSL_EAY_NAMES}
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ PATH_SUFFIXES
+ "lib"
+ "lib/MinGW"
+ # Do not search system path. Otherwise the DLL will be found rather than the link library.
+ NO_SYSTEM_ENVIRONMENT_PATH
+ NO_CMAKE_SYSTEM_PATH
+ )
+
+ mark_as_advanced(SSL_EAY LIB_EAY)
+ set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
+ unset(LIB_EAY_NAMES)
+ unset(SSL_EAY_NAMES)
+ else()
+ # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
+ find_library(LIB_EAY
+ NAMES
+ libeay32
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_LIBDIR}
+ PATH_SUFFIXES
+ lib
+ )
+
+ find_library(SSL_EAY
+ NAMES
+ ssleay32
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_LIBDIR}
+ PATH_SUFFIXES
+ lib
+ )
+
+ mark_as_advanced(SSL_EAY LIB_EAY)
+ set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
+ endif()
+else()
+
+ find_library(OPENSSL_SSL_LIBRARY
+ NAMES
+ ssl
+ ssleay32
+ ssleay32MD
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_LIBDIR}
+ PATH_SUFFIXES
+ lib
+ )
+
+ find_library(OPENSSL_CRYPTO_LIBRARY
+ NAMES
+ crypto
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_LIBDIR}
+ PATH_SUFFIXES
+ lib
+ )
+
+ mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
+
+ # compat defines
+ set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
+ set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
+
+ set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY})
+
+endif()
+
+function(from_hex HEX DEC)
+ string(TOUPPER "${HEX}" HEX)
+ set(_res 0)
+ string(LENGTH "${HEX}" _strlen)
+
+ while (_strlen GREATER 0)
+ math(EXPR _res "${_res} * 16")
+ string(SUBSTRING "${HEX}" 0 1 NIBBLE)
+ string(SUBSTRING "${HEX}" 1 -1 HEX)
+ if (NIBBLE STREQUAL "A")
+ math(EXPR _res "${_res} + 10")
+ elseif (NIBBLE STREQUAL "B")
+ math(EXPR _res "${_res} + 11")
+ elseif (NIBBLE STREQUAL "C")
+ math(EXPR _res "${_res} + 12")
+ elseif (NIBBLE STREQUAL "D")
+ math(EXPR _res "${_res} + 13")
+ elseif (NIBBLE STREQUAL "E")
+ math(EXPR _res "${_res} + 14")
+ elseif (NIBBLE STREQUAL "F")
+ math(EXPR _res "${_res} + 15")
+ else()
+ math(EXPR _res "${_res} + ${NIBBLE}")
+ endif()
+
+ string(LENGTH "${HEX}" _strlen)
+ endwhile()
+
+ set(${DEC} ${_res} PARENT_SCOPE)
+endfunction()
+
+if (OPENSSL_INCLUDE_DIR)
+ if (_OPENSSL_VERSION)
+ set(OPENSSL_VERSION "${_OPENSSL_VERSION}")
+ elseif(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h")
+ file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
+ REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
+
+ # The version number is encoded as 0xMNNFFPPS: major minor fix patch status
+ # The status gives if this is a developer or prerelease and is ignored here.
+ # Major, minor, and fix directly translate into the version numbers shown in
+ # the string. The patch field translates to the single character suffix that
+ # indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so
+ # on.
+
+ message(STATUS "OPENSSL_VERSION_STR=${openssl_version_str}")
+
+ string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$"
+ "\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}")
+ list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
+ list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
+ from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR)
+ list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX)
+ from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX)
+ list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH)
+
+ if (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
+ from_hex("${OPENSSL_VERSION_PATCH}" _tmp)
+ # 96 is the ASCII code of 'a' minus 1
+ math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96")
+ unset(_tmp)
+ # Once anyone knows how OpenSSL would call the patch versions beyond 'z'
+ # this should be updated to handle that, too. This has not happened yet
+ # so it is simply ignored here for now.
+ string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING)
+ endif ()
+
+ set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}")
+ endif ()
+endif ()
+
+include(FindPackageHandleStandardArgs)
+
+if (OPENSSL_VERSION)
+ find_package_handle_standard_args(OpenSSL
+ REQUIRED_VARS
+ OPENSSL_LIBRARIES
+ OPENSSL_INCLUDE_DIR
+ VERSION_VAR
+ OPENSSL_VERSION
+ FAIL_MESSAGE
+ "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
+ )
+else ()
+ find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
+ OPENSSL_LIBRARIES
+ OPENSSL_INCLUDE_DIR
+ )
+endif ()
+
+mark_as_advanced(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES)
diff --git a/CMakeModules/FindPackageMessage.cmake b/CMakeModules/FindPackageMessage.cmake
new file mode 100644
index 0000000..b6a58e4
--- /dev/null
+++ b/CMakeModules/FindPackageMessage.cmake
@@ -0,0 +1,57 @@
+#.rst:
+# FindPackageMessage
+# ------------------
+#
+#
+#
+# FIND_PACKAGE_MESSAGE(<name> "message for user" "find result details")
+#
+# This macro is intended to be used in FindXXX.cmake modules files. It
+# will print a message once for each unique find result. This is useful
+# for telling the user where a package was found. The first argument
+# specifies the name (XXX) of the package. The second argument
+# specifies the message to display. The third argument lists details
+# about the find result so that if they change the message will be
+# displayed again. The macro also obeys the QUIET argument to the
+# find_package command.
+#
+# Example:
+#
+# ::
+#
+# if(X11_FOUND)
+# FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}"
+# "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]")
+# else()
+# ...
+# endif()
+
+#=============================================================================
+# Copyright 2008-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+function(FIND_PACKAGE_MESSAGE pkg msg details)
+ # Avoid printing a message repeatedly for the same find result.
+ if(NOT ${pkg}_FIND_QUIETLY)
+ string(REGEX REPLACE "[\n]" "" details "${details}")
+ set(DETAILS_VAR FIND_PACKAGE_MESSAGE_DETAILS_${pkg})
+ if(NOT "${details}" STREQUAL "${${DETAILS_VAR}}")
+ # The message has not yet been printed.
+ message(STATUS "${msg}")
+
+ # Save the find details in the cache to avoid printing the same
+ # message again.
+ set("${DETAILS_VAR}" "${details}"
+ CACHE INTERNAL "Details about finding ${pkg}")
+ endif()
+ endif()
+endfunction()
diff --git a/CMakeModules/FindPythonInterp.cmake b/CMakeModules/FindPythonInterp.cmake
new file mode 100644
index 0000000..9910699
--- /dev/null
+++ b/CMakeModules/FindPythonInterp.cmake
@@ -0,0 +1,175 @@
+# - Find python interpreter
+# This module finds if Python interpreter is installed and determines where the
+# executables are. This code sets the following variables:
+#
+# PYTHONINTERP_FOUND - Was the Python executable found
+# PYTHON_EXECUTABLE - path to the Python interpreter
+#
+# PYTHON_VERSION_STRING - Python version found e.g. 2.5.2
+# PYTHON_VERSION_MAJOR - Python major version found e.g. 2
+# PYTHON_VERSION_MINOR - Python minor version found e.g. 5
+# PYTHON_VERSION_PATCH - Python patch version found e.g. 2
+#
+# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list of
+# version numbers that should be taken into account when searching for Python.
+# You need to set this variable before calling find_package(PythonInterp).
+#
+# You can point to a preferred python install to use by setting the following
+# to the point at the root directory of the python install:
+#
+# PYTHON_ROOT_DIR - The root directory of the python install
+#=============================================================================
+# Copyright 2005-2010 Kitware, Inc.
+# Copyright 2011 Bjoern Ricks <bjoern.ricks@gmail.com>
+# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+unset(_Python_NAMES)
+
+set(_PYTHON1_VERSIONS 1.6 1.5)
+set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
+set(_PYTHON3_VERSIONS 3.3 3.2 3.1 3.0)
+
+if(PythonInterp_FIND_VERSION)
+ if(PythonInterp_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+ string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" _PYTHON_FIND_MAJ_MIN "${PythonInterp_FIND_VERSION}")
+ string(REGEX REPLACE "^([0-9]+).*" "\\1" _PYTHON_FIND_MAJ "${_PYTHON_FIND_MAJ_MIN}")
+ list(APPEND _Python_NAMES python${_PYTHON_FIND_MAJ_MIN} python${_PYTHON_FIND_MAJ})
+ unset(_PYTHON_FIND_OTHER_VERSIONS)
+ if(NOT PythonInterp_FIND_VERSION_EXACT)
+ foreach(_PYTHON_V ${_PYTHON${_PYTHON_FIND_MAJ}_VERSIONS})
+ if(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
+ list(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
+ endif()
+ endforeach()
+ endif()
+ unset(_PYTHON_FIND_MAJ_MIN)
+ unset(_PYTHON_FIND_MAJ)
+ else()
+ list(APPEND _Python_NAMES python${PythonInterp_FIND_VERSION})
+ set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonInterp_FIND_VERSION}_VERSIONS})
+ endif()
+else()
+ set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
+endif()
+
+list(APPEND _Python_NAMES python)
+
+# Search for the preferred executable first
+if( ${PYTHON_ROOT_DIR} )
+ # Search for any of the executable names solely in the directory we've
+ # been pointed to. Failure to find the python executable here is a fatal
+ # fail.
+ find_program(PYTHON_EXECUTABLE NAMES ${_Python_NAMES}
+ PATHS ${PYTHON_ROOT_DIR}
+ NO_DEFAULT_PATH )
+else()
+ # If there is no specific path given, look for python in the path
+ find_program(PYTHON_EXECUTABLE NAMES ${_Python_NAMES})
+endif()
+
+# Set up the versions we know about, in the order we will search. Always add
+# the user supplied additional versions to the front.
+set(_Python_VERSIONS
+ ${Python_ADDITIONAL_VERSIONS}
+ ${_PYTHON_FIND_OTHER_VERSIONS}
+ )
+
+unset(_PYTHON_FIND_OTHER_VERSIONS)
+unset(_PYTHON1_VERSIONS)
+unset(_PYTHON2_VERSIONS)
+unset(_PYTHON3_VERSIONS)
+
+# Search for newest python version if python executable isn't found
+if(NOT PYTHON_EXECUTABLE)
+
+ # If using the MINGW compiler, we mustn't find the standard python
+ # distribution because of multiple C-Runtime errors. We must instead
+ # use the Python-a-mingw-us distribution
+ if(MINGW)
+ list( APPEND _Python_PPATHS ${PYTHON_ROOT_DIR} )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.9" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.8" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.7" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.6" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.5" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.4" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.3" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.2" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.1" )
+ list( APPEND _Python_PPATHS "C:/python/${_CURRENT_VERSION}.0" )
+ else()
+ list( APPEND _Python_PPATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath] )
+ endif()
+
+ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
+ set(_Python_NAMES python${_CURRENT_VERSION})
+ if(WIN32)
+ list(APPEND _Python_NAMES python)
+ endif()
+ find_program(PYTHON_EXECUTABLE
+ NAMES ${_Python_NAMES}
+ PATHS ${_Python_PPATHS}
+ )
+ endforeach()
+endif()
+
+# determine python version string
+if(PYTHON_EXECUTABLE)
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
+ "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
+ OUTPUT_VARIABLE _VERSION
+ RESULT_VARIABLE _PYTHON_VERSION_RESULT
+ ERROR_QUIET)
+ if(NOT _PYTHON_VERSION_RESULT)
+ string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}")
+ list(GET _VERSION 0 PYTHON_VERSION_MAJOR)
+ list(GET _VERSION 1 PYTHON_VERSION_MINOR)
+ list(GET _VERSION 2 PYTHON_VERSION_PATCH)
+ if(PYTHON_VERSION_PATCH EQUAL 0)
+ # it's called "Python 2.7", not "2.7.0"
+ string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
+ endif()
+ else()
+ # sys.version predates sys.version_info, so use that
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)"
+ OUTPUT_VARIABLE _VERSION
+ RESULT_VARIABLE _PYTHON_VERSION_RESULT
+ ERROR_QUIET)
+ if(NOT _PYTHON_VERSION_RESULT)
+ string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}")
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
+ string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
+ if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*")
+ string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}")
+ else()
+ set(PYTHON_VERSION_PATCH "0")
+ endif()
+ else()
+ # sys.version was first documented for Python 1.5, so assume
+ # this is older.
+ set(PYTHON_VERSION_STRING "1.4")
+ set(PYTHON_VERSION_MAJOR "1")
+ set(PYTHON_VERSION_MAJOR "4")
+ set(PYTHON_VERSION_MAJOR "0")
+ endif()
+ endif()
+ unset(_PYTHON_VERSION_RESULT)
+ unset(_VERSION)
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set PYTHONINTERP_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PythonInterp REQUIRED_VARS PYTHON_EXECUTABLE VERSION_VAR PYTHON_VERSION_STRING)
+
+mark_as_advanced(PYTHON_EXECUTABLE)
diff --git a/CMakeModules/FindPythonLibs.cmake b/CMakeModules/FindPythonLibs.cmake
new file mode 100644
index 0000000..5ff25b7
--- /dev/null
+++ b/CMakeModules/FindPythonLibs.cmake
@@ -0,0 +1,322 @@
+# - Find python libraries
+# This module finds if Python is installed and determines where the
+# include files and libraries are. It also determines what the name of
+# the library is. This code sets the following variables:
+#
+# PYTHONLIBS_FOUND - have the Python libs been found
+# PYTHON_LIBRARIES - path to the python library
+# PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated)
+# PYTHON_INCLUDE_DIRS - path to where Python.h is found
+# PYTHON_DEBUG_LIBRARIES - path to the debug library (deprecated)
+# PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8)
+#
+# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list of
+# version numbers that should be taken into account when searching for Python.
+# You need to set this variable before calling find_package(PythonLibs).
+#
+# You can point to a preferred python install to use by setting the following
+# to the point at the root directory of the python install:
+#
+# PYTHON_ROOT_DIR - The root directory of the python install
+#
+# If you'd like to specify the installation of Python to use, you should modify
+# the following cache variables:
+# PYTHON_LIBRARY - path to the python library
+# PYTHON_INCLUDE_DIR - path to where Python.h is found
+
+#=============================================================================
+# Copyright 2001-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+include(CMakeFindFrameworks)
+
+# Search for the python framework on Apple.
+cmake_find_frameworks(Python)
+
+set(_PYTHON1_VERSIONS 1.6 1.5)
+set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
+set(_PYTHON3_VERSIONS 3.3 3.2 3.1 3.0)
+
+if(PythonLibs_FIND_VERSION)
+ if(PythonLibs_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+ string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" _PYTHON_FIND_MAJ_MIN "${PythonLibs_FIND_VERSION}")
+ string(REGEX REPLACE "^([0-9]+).*" "\\1" _PYTHON_FIND_MAJ "${_PYTHON_FIND_MAJ_MIN}")
+ unset(_PYTHON_FIND_OTHER_VERSIONS)
+ if(PythonLibs_FIND_VERSION_EXACT)
+ if(_PYTHON_FIND_MAJ_MIN STREQUAL PythonLibs_FIND_VERSION)
+ set(_PYTHON_FIND_OTHER_VERSIONS "${PythonLibs_FIND_VERSION}")
+ else()
+ set(_PYTHON_FIND_OTHER_VERSIONS "${PythonLibs_FIND_VERSION}" "${_PYTHON_FIND_MAJ_MIN}")
+ endif()
+ else()
+ foreach(_PYTHON_V ${_PYTHON${_PYTHON_FIND_MAJ}_VERSIONS})
+ if(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
+ list(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
+ endif()
+ endforeach()
+ endif()
+ unset(_PYTHON_FIND_MAJ_MIN)
+ unset(_PYTHON_FIND_MAJ)
+ else()
+ set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonLibs_FIND_VERSION}_VERSIONS})
+ endif()
+else()
+ set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
+endif()
+
+# Set up the versions we know about, in the order we will search. Always add
+# the user supplied additional versions to the front.
+set(_Python_VERSIONS
+ ${Python_ADDITIONAL_VERSIONS}
+ ${_PYTHON_FIND_OTHER_VERSIONS}
+ )
+
+unset(_PYTHON_FIND_OTHER_VERSIONS)
+unset(_PYTHON1_VERSIONS)
+unset(_PYTHON2_VERSIONS)
+unset(_PYTHON3_VERSIONS)
+
+foreach(_CURRENT_VERSION ${_Python_VERSIONS})
+ string(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION})
+
+ if(WIN32)
+ if(MINGW)
+ find_library(PYTHON_DEBUG_LIBRARY
+ NAMES python{$_CURRENT_VERSION}_d
+ PATHS
+ "${PYTHON_ROOT_DIR}"
+ "c:/python${_CURRENT_VERSION}"
+ "c:/python${_CURRENT_VERSION_NO_DOTS}"
+ NO_SYSTEM_ENVIRONMENT_PATH
+ )
+ else()
+ find_library(PYTHON_DEBUG_LIBRARY
+ NAMES python${_CURRENT_VERSION_NO_DOTS}_d python
+ PATHS
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
+ [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+ [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+ )
+ endif()
+ endif()
+
+ if(MINGW)
+ find_library(PYTHON_LIBRARY
+ NAMES python${_CURRENT_VERSION}
+ PATHS
+ "${PYTHON_ROOT_DIR}"
+ "C:/python"
+ PATH_SUFFIXES
+ ${_CURRENT_VERSION}
+ ${_CURRENT_VERSION_NO_DOTS}
+ NO_SYSTEM_ENVIRONMENT_PATH
+ )
+ else()
+ find_library(PYTHON_LIBRARY
+ NAMES
+ python${_CURRENT_VERSION_NO_DOTS}
+ python${_CURRENT_VERSION}mu
+ python${_CURRENT_VERSION}m
+ python${_CURRENT_VERSION}u
+ python${_CURRENT_VERSION}
+ PATHS
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+ [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+ # Avoid finding the .dll in the PATH. We want the .lib.
+ NO_SYSTEM_ENVIRONMENT_PATH
+ )
+ endif()
+
+ # Look for the static library in the Python config directory
+ find_library(PYTHON_LIBRARY
+ NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION}
+ # Avoid finding the .dll in the PATH. We want the .lib.
+ NO_SYSTEM_ENVIRONMENT_PATH
+ # This is where the static library is usually located
+ PATH_SUFFIXES python${_CURRENT_VERSION}/config
+ )
+
+ # For backward compatibility, honour value of PYTHON_INCLUDE_PATH, if
+ # PYTHON_INCLUDE_DIR is not set.
+ if(DEFINED PYTHON_INCLUDE_PATH AND NOT DEFINED PYTHON_INCLUDE_DIR)
+ set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_PATH}" CACHE PATH
+ "Path to where Python.h is found" FORCE)
+ endif()
+
+ set(PYTHON_FRAMEWORK_INCLUDES)
+
+ if(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
+ foreach(dir ${Python_FRAMEWORKS})
+ set(PYTHON_FRAMEWORK_INCLUDES ${PYTHON_FRAMEWORK_INCLUDES}
+ ${dir}/Versions/${_CURRENT_VERSION}/include/python${_CURRENT_VERSION})
+ endforeach()
+ endif()
+
+ if(MINGW)
+ find_path(PYTHON_INCLUDE_DIR
+ NAMES Python.h
+ PATHS
+ "${PYTHON_ROOT_DIR}"
+ "C:/python${_CURRENT_VERSION}"
+ "C:/python${_CURRENT_VERSION_NOT_DOTS}"
+ PATH_SUFFIXES
+ include
+ python${_CURRENT_VERSION}
+ python${_CURRENT_VERSION_NOT_DOTS}
+ )
+ else()
+ find_path(PYTHON_INCLUDE_DIR
+ NAMES Python.h
+ PATHS
+ ${PYTHON_FRAMEWORK_INCLUDES}
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
+ [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
+ PATH_SUFFIXES
+ python${_CURRENT_VERSION}mu
+ python${_CURRENT_VERSION}m
+ python${_CURRENT_VERSION}u
+ python${_CURRENT_VERSION}
+ )
+ endif()
+
+ # For backward compatibility, set PYTHON_INCLUDE_PATH.
+ set(PYTHON_INCLUDE_PATH "${PYTHON_INCLUDE_DIR}")
+
+ if(PYTHON_INCLUDE_DIR AND EXISTS "${PYTHON_INCLUDE_DIR}/patchlevel.h")
+ file(STRINGS "${PYTHON_INCLUDE_DIR}/patchlevel.h" python_version_str
+ REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
+ string(REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
+ PYTHONLIBS_VERSION_STRING "${python_version_str}")
+ unset(python_version_str)
+ endif()
+
+ if(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
+ break()
+ endif()
+endforeach()
+
+mark_as_advanced(
+ PYTHON_DEBUG_LIBRARY
+ PYTHON_LIBRARY
+ PYTHON_INCLUDE_DIR
+)
+
+# We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the
+# cache entries because they are meant to specify the location of a single
+# library. We now set the variables listed by the documentation for this
+# module.
+set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
+set(PYTHON_DEBUG_LIBRARIES "${PYTHON_DEBUG_LIBRARY}")
+
+# These variables have been historically named in this module different from
+# what SELECT_LIBRARY_CONFIGURATIONS() expects.
+set(PYTHON_LIBRARY_DEBUG "${PYTHON_DEBUG_LIBRARY}")
+set(PYTHON_LIBRARY_RELEASE "${PYTHON_LIBRARY}")
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+select_library_configurations(PYTHON)
+# SELECT_LIBRARY_CONFIGURATIONS() sets ${PREFIX}_FOUND if it has a library.
+# Unset this, this prefix doesn't match the module prefix, they are different
+# for historical reasons.
+unset(PYTHON_FOUND)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PythonLibs
+ REQUIRED_VARS PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS
+ VERSION_VAR PYTHONLIBS_VERSION_STRING)
+
+# PYTHON_ADD_MODULE(<name> src1 src2 ... srcN) is used to build modules for python.
+# PYTHON_WRITE_MODULES_HEADER(<filename>) writes a header file you can include
+# in your sources to initialize the static python modules
+function(PYTHON_ADD_MODULE _NAME )
+ get_property(_TARGET_SUPPORTS_SHARED_LIBS
+ GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
+ option(PYTHON_ENABLE_MODULE_${_NAME} "Add module ${_NAME}" TRUE)
+ option(PYTHON_MODULE_${_NAME}_BUILD_SHARED
+ "Add module ${_NAME} shared" ${_TARGET_SUPPORTS_SHARED_LIBS})
+
+ # Mark these options as advanced
+ mark_as_advanced(PYTHON_ENABLE_MODULE_${_NAME}
+ PYTHON_MODULE_${_NAME}_BUILD_SHARED)
+
+ if(PYTHON_ENABLE_MODULE_${_NAME})
+ if(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
+ set(PY_MODULE_TYPE MODULE)
+ else()
+ set(PY_MODULE_TYPE STATIC)
+ set_property(GLOBAL APPEND PROPERTY PY_STATIC_MODULES_LIST ${_NAME})
+ endif()
+
+ set_property(GLOBAL APPEND PROPERTY PY_MODULES_LIST ${_NAME})
+ add_library(${_NAME} ${PY_MODULE_TYPE} ${ARGN})
+# target_link_libraries(${_NAME} ${PYTHON_LIBRARIES})
+
+ if(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
+ set_target_properties(${_NAME} PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}")
+ if(WIN32 AND NOT CYGWIN)
+ set_target_properties(${_NAME} PROPERTIES SUFFIX ".pyd")
+ endif()
+ endif()
+
+ endif()
+endfunction()
+
+function(PYTHON_WRITE_MODULES_HEADER _filename)
+
+ get_property(PY_STATIC_MODULES_LIST GLOBAL PROPERTY PY_STATIC_MODULES_LIST)
+
+ get_filename_component(_name "${_filename}" NAME)
+ string(REPLACE "." "_" _name "${_name}")
+ string(TOUPPER ${_name} _nameUpper)
+ set(_filename ${CMAKE_CURRENT_BINARY_DIR}/${_filename})
+
+ set(_filenameTmp "${_filename}.in")
+ file(WRITE ${_filenameTmp} "/*Created by cmake, do not edit, changes will be lost*/\n")
+ file(APPEND ${_filenameTmp}
+"#ifndef ${_nameUpper}
+#define ${_nameUpper}
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif /* __cplusplus */
+
+")
+
+ foreach(_currentModule ${PY_STATIC_MODULES_LIST})
+ file(APPEND ${_filenameTmp} "extern void init${PYTHON_MODULE_PREFIX}${_currentModule}(void);\n\n")
+ endforeach()
+
+ file(APPEND ${_filenameTmp}
+"#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+")
+
+
+ foreach(_currentModule ${PY_STATIC_MODULES_LIST})
+ file(APPEND ${_filenameTmp} "int ${_name}_${_currentModule}(void) \n{\n static char name[]=\"${PYTHON_MODULE_PREFIX}${_currentModule}\"; return PyImport_AppendInittab(name, init${PYTHON_MODULE_PREFIX}${_currentModule});\n}\n\n")
+ endforeach()
+
+ file(APPEND ${_filenameTmp} "void ${_name}_LoadAllPythonModules(void)\n{\n")
+ foreach(_currentModule ${PY_STATIC_MODULES_LIST})
+ file(APPEND ${_filenameTmp} " ${_name}_${_currentModule}();\n")
+ endforeach()
+ file(APPEND ${_filenameTmp} "}\n\n")
+ file(APPEND ${_filenameTmp} "#ifndef EXCLUDE_LOAD_ALL_FUNCTION\nvoid CMakeLoadAllPythonModules(void)\n{\n ${_name}_LoadAllPythonModules();\n}\n#endif\n\n#endif\n")
+
+# with configure_file() cmake complains that you may not use a file created using file(WRITE) as input file for configure_file()
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_filename}" OUTPUT_QUIET ERROR_QUIET)
+
+endfunction()
diff --git a/CMakeModules/FindSubversion.cmake b/CMakeModules/FindSubversion.cmake
new file mode 100644
index 0000000..31f20c2
--- /dev/null
+++ b/CMakeModules/FindSubversion.cmake
@@ -0,0 +1,140 @@
+#
+# From CMake 2.6.1
+#
+
+#
+# - Extract information from a subversion working copy
+# The module defines the following variables:
+# Subversion_SVN_EXECUTABLE - path to svn command line client
+# Subversion_VERSION_SVN - version of svn command line client
+# Subversion_FOUND - true if the command line client was found
+# If the command line client executable is found the macro
+# Subversion_WC_INFO(<dir> <var-prefix>)
+# is defined to extract information of a subversion working copy at
+# a given location. The macro defines the following variables:
+# <var-prefix>_WC_URL - url of the repository (at <dir>)
+# <var-prefix>_WC_ROOT - root url of the repository
+# <var-prefix>_WC_REVISION - current revision
+# <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit
+# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
+# <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
+# <var-prefix>_WC_LAST_CHANGED_LOG - last log of base revision
+# <var-prefix>_WC_INFO - output of command `svn info <dir>'
+# Example usage:
+# FIND_PACKAGE(Subversion)
+# IF(Subversion_FOUND)
+# Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project)
+# MESSAGE("Current revision is ${Project_WC_REVISION}")
+# Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project)
+# MESSAGE("Last changed log is ${Project_LAST_CHANGED_LOG}")
+# ENDIF(Subversion_FOUND)
+
+# Copyright (c) 2006, Tristan Carel
+# 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 the University of California, Berkeley 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 REGENTS 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 REGENTS AND 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.
+
+# $Id: FindSubversion.cmake,v 1.2.2.3 2008-05-23 20:09:34 hoffman Exp $
+
+SET(Subversion_FOUND FALSE)
+SET(Subversion_SVN_FOUND FALSE)
+
+FIND_PROGRAM(Subversion_SVN_EXECUTABLE svn
+ DOC "subversion command line client")
+MARK_AS_ADVANCED(Subversion_SVN_EXECUTABLE)
+
+IF(Subversion_SVN_EXECUTABLE)
+ SET(Subversion_SVN_FOUND TRUE)
+ SET(Subversion_FOUND TRUE)
+
+ MACRO(Subversion_WC_INFO dir prefix)
+ # the subversion commands should be executed with the C locale, otherwise
+ # the message (which are parsed) may be translated, Alex
+ SET(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
+ SET(ENV{LC_ALL} C)
+
+ EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} --version
+ WORKING_DIRECTORY ${dir}
+ OUTPUT_VARIABLE Subversion_VERSION_SVN
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir}
+ OUTPUT_VARIABLE ${prefix}_WC_INFO
+ ERROR_VARIABLE Subversion_svn_info_error
+ RESULT_VARIABLE Subversion_svn_info_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ IF(NOT ${Subversion_svn_info_result} EQUAL 0)
+ MESSAGE(STATUS "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
+ ELSE(NOT ${Subversion_svn_info_result} EQUAL 0)
+
+ STRING(REGEX REPLACE "^(.*\n)?svn, version ([.0-9]+).*"
+ "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}")
+ STRING(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
+ "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
+ STRING(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
+ "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}")
+ STRING(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
+ "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}")
+ STRING(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
+ "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
+ STRING(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
+ "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
+
+ ENDIF(NOT ${Subversion_svn_info_result} EQUAL 0)
+
+ # restore the previous LC_ALL
+ SET(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL})
+
+ ENDMACRO(Subversion_WC_INFO)
+
+ MACRO(Subversion_WC_LOG dir prefix)
+ # This macro can block if the certificate is not signed:
+ # svn ask you to accept the certificate and wait for your answer
+ # This macro requires a svn server network access (Internet most of the time)
+ # and can also be slow since it access the svn server
+ EXECUTE_PROCESS(COMMAND
+ ${Subversion_SVN_EXECUTABLE} log -r BASE ${dir}
+ OUTPUT_VARIABLE ${prefix}_LAST_CHANGED_LOG
+ ERROR_VARIABLE Subversion_svn_log_error
+ RESULT_VARIABLE Subversion_svn_log_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ IF(NOT ${Subversion_svn_log_result} EQUAL 0)
+ MESSAGE(STATUS "Command \"${Subversion_SVN_EXECUTABLE} log -r BASE ${dir}\" failed with output:\n${Subversion_svn_log_error}")
+ ENDIF(NOT ${Subversion_svn_log_result} EQUAL 0)
+ ENDMACRO(Subversion_WC_LOG)
+
+ENDIF(Subversion_SVN_EXECUTABLE)
+
+IF(NOT Subversion_FOUND)
+ IF(NOT Subversion_FIND_QUIETLY)
+ MESSAGE(STATUS "Subversion was not found.")
+ ELSE(NOT Subversion_FIND_QUIETLY)
+ IF(Subversion_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Subversion was not found.")
+ ENDIF(Subversion_FIND_REQUIRED)
+ ENDIF(NOT Subversion_FIND_QUIETLY)
+ENDIF(NOT Subversion_FOUND)
+
+# FindSubversion.cmake ends here.
diff --git a/CMakeModules/FindZLIB.cmake.unused b/CMakeModules/FindZLIB.cmake.unused
new file mode 100644
index 0000000..0fdc315
--- /dev/null
+++ b/CMakeModules/FindZLIB.cmake.unused
@@ -0,0 +1,39 @@
+#
+# From CMake 2.6.1 + some path changes
+#
+
+# - Find zlib
+# Find the native ZLIB includes and library
+#
+# ZLIB_INCLUDE_DIR - where to find zlib.h, etc.
+# ZLIB_LIBRARIES - List of libraries when using zlib.
+# ZLIB_FOUND - True if zlib found.
+
+IF(MSYS)
+ SET(ZLIB_DIR_SEARCH
+ c:/msys/1.0
+ )
+ENDIF(MSYS)
+
+IF (ZLIB_INCLUDE_DIR)
+ # Already in cache, be silent
+ SET(ZLIB_FIND_QUIETLY TRUE)
+ENDIF (ZLIB_INCLUDE_DIR)
+
+FIND_PATH(ZLIB_INCLUDE_DIR zlib.h PATHS ${ZLIB_DIR_SEARCH}/local/include)
+
+SET(ZLIB_NAMES z zlib zdll)
+FIND_LIBRARY(ZLIB_LIBRARY NAMES ${ZLIB_NAMES} PATHS ${ZLIB_DIR_SEARCH}/local/lib)
+
+# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB DEFAULT_MSG ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
+
+IF(ZLIB_FOUND)
+ SET( ZLIB_LIBRARIES ${ZLIB_LIBRARY} )
+ELSE(ZLIB_FOUND)
+ SET( ZLIB_LIBRARIES )
+ENDIF(ZLIB_FOUND)
+
+MARK_AS_ADVANCED( ZLIB_LIBRARY ZLIB_INCLUDE_DIR )
diff --git a/CMakeModules/FindwxWidgets.cmake b/CMakeModules/FindwxWidgets.cmake
new file mode 100644
index 0000000..b93035d
--- /dev/null
+++ b/CMakeModules/FindwxWidgets.cmake
@@ -0,0 +1,1145 @@
+# - Find a wxWidgets (a.k.a., wxWindows) installation.
+# This module finds if wxWidgets is installed and selects a default
+# configuration to use. wxWidgets is a modular library. To specify the
+# modules that you will use, you need to name them as components to
+# the package:
+#
+# find_package(wxWidgets COMPONENTS core base ...)
+#
+# There are two search branches: a windows style and a unix style. For
+# windows, the following variables are searched for and set to
+# defaults in case of multiple choices. Change them if the defaults
+# are not desired (i.e., these are the only variables you should
+# change to select a configuration):
+#
+# wxWidgets_ROOT_DIR - Base wxWidgets directory
+# (e.g., C:/wxWidgets-2.6.3).
+# wxWidgets_LIB_DIR - Path to wxWidgets libraries
+# (e.g., C:/wxWidgets-2.6.3/lib/vc_lib).
+# wxWidgets_CONFIGURATION - Configuration to use
+# (e.g., msw, mswd, mswu, mswunivud, etc.)
+# wxWidgets_EXCLUDE_COMMON_LIBRARIES
+# - Set to TRUE to exclude linking of
+# commonly required libs (e.g., png tiff
+# jpeg zlib regex expat).
+#
+# For unix style it uses the wx-config utility. You can select between
+# debug/release, unicode/ansi, universal/non-universal, and
+# static/shared in the QtDialog or ccmake interfaces by turning ON/OFF
+# the following variables:
+#
+# wxWidgets_USE_DEBUG
+# wxWidgets_USE_UNICODE
+# wxWidgets_USE_UNIVERSAL
+# wxWidgets_USE_STATIC
+#
+# There is also a wxWidgets_CONFIG_OPTIONS variable for all other
+# options that need to be passed to the wx-config utility. For
+# example, to use the base toolkit found in the /usr/local path, set
+# the variable (before calling the FIND_PACKAGE command) as such:
+#
+# set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr)
+#
+# The following are set after the configuration is done for both
+# windows and unix style:
+#
+# wxWidgets_FOUND - Set to TRUE if wxWidgets was found.
+# wxWidgets_INCLUDE_DIRS - Include directories for WIN32
+# i.e., where to find "wx/wx.h" and
+# "wx/setup.h"; possibly empty for unices.
+# wxWidgets_LIBRARIES - Path to the wxWidgets libraries.
+# wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for
+# rpath on UNIX. Typically an empty string
+# in WIN32 environment.
+# wxWidgets_DEFINITIONS - Contains defines required to compile/link
+# against WX, e.g. WXUSINGDLL
+# wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link
+# against WX debug builds, e.g. __WXDEBUG__
+# wxWidgets_CXX_FLAGS - Include dirs and compiler flags for
+# unices, empty on WIN32. Essentially
+# "`wx-config --cxxflags`".
+# wxWidgets_USE_FILE - Convenience include file.
+#
+# Sample usage:
+# # Note that for MinGW users the order of libs is important!
+# find_package(wxWidgets COMPONENTS net gl core base)
+# if(wxWidgets_FOUND)
+# include(${wxWidgets_USE_FILE})
+# # and for each of your dependent executable/library targets:
+# target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
+# endif(wxWidgets_FOUND)
+#
+# If wxWidgets is required (i.e., not an optional part):
+# find_package(wxWidgets REQUIRED net gl core base)
+# include(${wxWidgets_USE_FILE})
+# # and for each of your dependent executable/library targets:
+# target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
+#
+# If a wxWidgets version or greater is required:
+# find_package(wxWidgets 2.8.12 COMPONENTS net gl core base REQUIRED)
+#
+# If specific wxWidgets version is required:
+# find_package(wxWidgets 2.8.12 EXACT COMPONENTS net gl core base REQUIRED)
+#
+#=============================================================================
+# Copyright 2004-2009 Kitware, Inc.
+# Copyright 2007-2009 Miguel A. Figueroa-Villanueva <miguelf at ieee dot org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+#
+# FIXME: check this and provide a correct sample usage...
+# Remember to connect back to the upper text.
+# Sample usage with monolithic wx build:
+#
+# find_package(wxWidgets COMPONENTS mono)
+# ...
+
+# NOTES
+#
+# This module has been tested on the WIN32 platform with wxWidgets
+# 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to
+# easily extend support to all possible builds, e.g., static/shared,
+# debug/release, unicode, universal, multilib/monolithic, etc..
+#
+# If you want to use the module and your build type is not supported
+# out-of-the-box, please contact me to exchange information on how
+# your system is setup and I'll try to add support for it.
+#
+# AUTHOR
+#
+# Miguel A. Figueroa-Villanueva (miguelf at ieee dot org).
+# Jan Woetzel (jw at mip.informatik.uni-kiel.de).
+#
+# Based on previous works of:
+# Jan Woetzel (FindwxWindows.cmake),
+# Jorgen Bodde and Jerry Fath (FindwxWin.cmake).
+
+# TODO/ideas
+#
+# (1) Option/Setting to use all available wx libs
+# In contrast to expert developer who lists the
+# minimal set of required libs in wxWidgets_USE_LIBS
+# there is the newbie user:
+# - who just wants to link against WX with more 'magic'
+# - doesn't know the internal structure of WX or how it was built,
+# in particular if it is monolithic or not
+# - want to link against all available WX libs
+# Basically, the intent here is to mimic what wx-config would do by
+# default (i.e., `wx-config --libs`).
+#
+# Possible solution:
+# Add a reserved keyword "std" that initializes to what wx-config
+# would default to. If the user has not set the wxWidgets_USE_LIBS,
+# default to "std" instead of "base core" as it is now. To implement
+# "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe
+# checking whether a minimal set was found.
+
+
+# FIXME: This and all the dbg_msg calls should be removed after the
+# module stabilizes.
+#
+# Helper macro to control the debugging output globally. There are
+# two versions for controlling how verbose your output should be.
+macro(dbg_msg _MSG)
+# message(STATUS "${_MSG}")
+endmacro(dbg_msg)
+macro(dbg_msg_v _MSG)
+# message(STATUS "${_MSG}")
+endmacro(dbg_msg_v)
+
+# Clear return values in case the module is loaded more than once.
+set(wxWidgets_FOUND FALSE)
+set(wxWidgets_INCLUDE_DIRS "")
+set(wxWidgets_LIBRARIES "")
+set(wxWidgets_LIBRARY_DIRS "")
+set(wxWidgets_CXX_FLAGS "")
+
+# Using SYSTEM with INCLUDE_DIRECTORIES in conjunction with wxWidgets on
+# the Mac produces compiler errors. Set wxWidgets_INCLUDE_DIRS_NO_SYSTEM
+# to prevent UsewxWidgets.cmake from using SYSTEM.
+#
+# See cmake mailing list discussions for more info:
+# http://www.cmake.org/pipermail/cmake/2008-April/021115.html
+# http://www.cmake.org/pipermail/cmake/2008-April/021146.html
+#
+if(APPLE)
+ set(wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1)
+endif(APPLE)
+
+# DEPRECATED: This is a patch to support the DEPRECATED use of
+# wxWidgets_USE_LIBS.
+#
+# If wxWidgets_USE_LIBS is set:
+# - if using <components>, then override wxWidgets_USE_LIBS
+# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS
+if(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS)
+ set(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS})
+endif(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS)
+dbg_msg("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}")
+
+# Add the convenience use file if available.
+#
+# Get dir of this file which may reside in:
+# - CMAKE_MAKE_ROOT/Modules on CMake installation
+# - CMAKE_MODULE_PATH if user prefers his own specialized version
+set(wxWidgets_USE_FILE "")
+get_filename_component(
+ wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
+# Prefer an existing customized version, but the user might override
+# the FindwxWidgets module and not the UsewxWidgets one.
+if(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
+ set(wxWidgets_USE_FILE
+ "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
+else(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
+ set(wxWidgets_USE_FILE UsewxWidgets)
+endif(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
+
+#=====================================================================
+#=====================================================================
+
+
+if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_HOST_UNIX )
+ dbg_msg( "setting win32 style" )
+ set(wxWidgets_FIND_STYLE "win32")
+else()
+ if(CMAKE_HOST_UNIX OR MSYS)
+ dbg_msg( "unix style" )
+ set(wxWidgets_FIND_STYLE "unix")
+ endif()
+endif()
+
+#=====================================================================
+# WIN32_FIND_STYLE
+#=====================================================================
+if(wxWidgets_FIND_STYLE STREQUAL "win32")
+ dbg_msg("Using win32 path")
+
+ # Useful common wx libs needed by almost all components.
+ set(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat)
+
+ # DEPRECATED: Use find_package(wxWidgets COMPONENTS mono) instead.
+ if(NOT wxWidgets_FIND_COMPONENTS)
+ if(wxWidgets_USE_MONOLITHIC)
+ set(wxWidgets_FIND_COMPONENTS mono)
+ else(wxWidgets_USE_MONOLITHIC)
+ set(wxWidgets_FIND_COMPONENTS core base) # this is default
+ endif(wxWidgets_USE_MONOLITHIC)
+ endif(NOT wxWidgets_FIND_COMPONENTS)
+
+ # Add the common (usually required libs) unless
+ # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set.
+ if(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES)
+ list(APPEND wxWidgets_FIND_COMPONENTS
+ ${wxWidgets_COMMON_LIBRARIES})
+ endif(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES)
+
+ #-------------------------------------------------------------------
+ # WIN32: Helper MACROS
+ #-------------------------------------------------------------------
+ #
+ # Get filename components for a configuration. For example,
+ # if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d
+ # if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG=""
+ #
+ macro(wx_get_name_components _CONFIGURATION _UNV _UCD _DBG)
+ string(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}")
+ string(REGEX REPLACE "msw.*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}")
+ if(${_UCD} STREQUAL ${_CONFIGURATION})
+ set(${_UCD} "")
+ endif(${_UCD} STREQUAL ${_CONFIGURATION})
+ string(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}")
+ endmacro(wx_get_name_components)
+
+ #
+ # Find libraries associated to a configuration.
+ #
+ macro(wx_find_libs _UNV _UCD _DBG)
+ dbg_msg_v("m_unv = ${_UNV}")
+ dbg_msg_v("m_ucd = ${_UCD}")
+ dbg_msg_v("m_dbg = ${_DBG}")
+
+ # FIXME: What if both regex libs are available. regex should be
+ # found outside the loop and only wx${LIB}${_UCD}${_DBG}.
+ # Find wxWidgets common libraries.
+ foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
+ find_library(WX_${LIB}${_DBG}
+ NAMES
+ wx${LIB}${_UCD}${_DBG} # for regex
+ wx${LIB}${_DBG}
+ PATHS ${WX_LIB_DIR}
+ NO_DEFAULT_PATH
+ )
+ mark_as_advanced(WX_${LIB}${_DBG})
+ endforeach(LIB)
+
+ dbg_msg( "WX_LIB_DIR:${WX_LIB_DIR}" )
+
+ # Find wxWidgets multilib base libraries.
+ find_library(WX_base${_DBG}
+ NAMES
+ wxbase31${_UCD}${_DBG}
+ wxbase30${_UCD}${_DBG}
+ wxbase29${_UCD}${_DBG}
+ wxbase28${_UCD}${_DBG}
+ wxbase27${_UCD}${_DBG}
+ wxbase26${_UCD}${_DBG}
+ wxbase25${_UCD}${_DBG}
+ PATHS ${WX_LIB_DIR}
+ NO_DEFAULT_PATH
+ )
+ mark_as_advanced(WX_base${_DBG})
+ foreach(LIB net odbc xml)
+ find_library(WX_${LIB}${_DBG}
+ NAMES
+ wxbase31${_UCD}${_DBG}_${LIB}
+ wxbase30${_UCD}${_DBG}_${LIB}
+ wxbase29${_UCD}${_DBG}_${LIB}
+ wxbase28${_UCD}${_DBG}_${LIB}
+ wxbase27${_UCD}${_DBG}_${LIB}
+ wxbase26${_UCD}${_DBG}_${LIB}
+ wxbase25${_UCD}${_DBG}_${LIB}
+ PATHS ${WX_LIB_DIR}
+ NO_DEFAULT_PATH
+ )
+ mark_as_advanced(WX_${LIB}${_DBG})
+ endforeach(LIB)
+
+ # Find wxWidgets monolithic library.
+ find_library(WX_mono${_DBG}
+ NAMES
+ wxmsw${_UNV}31${_UCD}${_DBG}
+ wxmsw${_UNV}30${_UCD}${_DBG}
+ wxmsw${_UNV}29${_UCD}${_DBG}
+ wxmsw${_UNV}28${_UCD}${_DBG}
+ wxmsw${_UNV}27${_UCD}${_DBG}
+ wxmsw${_UNV}26${_UCD}${_DBG}
+ wxmsw${_UNV}25${_UCD}${_DBG}
+ PATHS ${WX_LIB_DIR}
+ NO_DEFAULT_PATH
+ )
+ mark_as_advanced(WX_mono${_DBG})
+
+ # Find wxWidgets multilib libraries.
+ foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
+ webview stc ribbon propgrid)
+ find_library(WX_${LIB}${_DBG}
+ NAMES
+ wxmsw${_UNV}31${_UCD}${_DBG}_${LIB}
+ wxmsw${_UNV}30${_UCD}${_DBG}_${LIB}
+ wxmsw${_UNV}29${_UCD}${_DBG}_${LIB}
+ wxmsw${_UNV}28${_UCD}${_DBG}_${LIB}
+ wxmsw${_UNV}27${_UCD}${_DBG}_${LIB}
+ wxmsw${_UNV}26${_UCD}${_DBG}_${LIB}
+ wxmsw${_UNV}25${_UCD}${_DBG}_${LIB}
+ PATHS ${WX_LIB_DIR}
+ NO_DEFAULT_PATH
+ )
+ mark_as_advanced(WX_${LIB}${_DBG})
+ endforeach(LIB)
+ endmacro(wx_find_libs)
+
+ #
+ # Clear all library paths, so that FIND_LIBRARY refinds them.
+ #
+ # Clear a lib, reset its found flag, and mark as advanced.
+ macro(wx_clear_lib _LIB)
+ set(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE)
+ set(${_LIB}_FOUND FALSE)
+ mark_as_advanced(${_LIB})
+ endmacro(wx_clear_lib)
+ # Clear all debug or release library paths (arguments are "d" or "").
+ macro(wx_clear_all_libs _DBG)
+ # Clear wxWidgets common libraries.
+ foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
+ wx_clear_lib(WX_${LIB}${_DBG})
+ endforeach(LIB)
+
+ # Clear wxWidgets multilib base libraries.
+ wx_clear_lib(WX_base${_DBG})
+ foreach(LIB net odbc xml)
+ wx_clear_lib(WX_${LIB}${_DBG})
+ endforeach(LIB)
+
+ # Clear wxWidgets monolithic library.
+ wx_clear_lib(WX_mono${_DBG})
+
+ # Clear wxWidgets multilib libraries.
+ foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
+ webview stc ribbon propgrid)
+ wx_clear_lib(WX_${LIB}${_DBG})
+ endforeach(LIB)
+ endmacro(wx_clear_all_libs)
+ # Clear all wxWidgets debug libraries.
+ macro(wx_clear_all_dbg_libs)
+ wx_clear_all_libs("d")
+ endmacro(wx_clear_all_dbg_libs)
+ # Clear all wxWidgets release libraries.
+ macro(wx_clear_all_rel_libs)
+ wx_clear_all_libs("")
+ endmacro(wx_clear_all_rel_libs)
+
+ #
+ # Set the wxWidgets_LIBRARIES variable.
+ # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails.
+ #
+ macro(wx_set_libraries _LIBS _DBG)
+ dbg_msg_v("Looking for ${${_LIBS}}")
+ if(WX_USE_REL_AND_DBG)
+ foreach(LIB ${${_LIBS}})
+ dbg_msg_v("Searching for ${LIB} and ${LIB}d")
+ dbg_msg_v("WX_${LIB} : ${WX_${LIB}}")
+ dbg_msg_v("WX_${LIB}d : ${WX_${LIB}d}")
+ if(WX_${LIB} AND WX_${LIB}d)
+ dbg_msg_v("Found ${LIB} and ${LIB}d")
+ list(APPEND wxWidgets_LIBRARIES
+ debug ${WX_${LIB}d} optimized ${WX_${LIB}}
+ )
+ else(WX_${LIB} AND WX_${LIB}d)
+ dbg_msg_v("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}")
+ set(wxWidgets_FOUND FALSE)
+ endif(WX_${LIB} AND WX_${LIB}d)
+ endforeach(LIB)
+ else(WX_USE_REL_AND_DBG)
+ foreach(LIB ${${_LIBS}})
+ dbg_msg_v("Searching for ${LIB}${_DBG}")
+ dbg_msg_v("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}")
+ if(WX_${LIB}${_DBG})
+ dbg_msg_v("Found ${LIB}${_DBG}")
+ list(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}})
+ else(WX_${LIB}${_DBG})
+ dbg_msg_v(
+ "- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}")
+ set(wxWidgets_FOUND FALSE)
+ endif(WX_${LIB}${_DBG})
+ endforeach(LIB)
+ endif(WX_USE_REL_AND_DBG)
+
+ dbg_msg_v("OpenGL")
+ list(FIND ${_LIBS} gl WX_USE_GL)
+ if(NOT WX_USE_GL EQUAL -1)
+ dbg_msg_v("- is required.")
+ list(APPEND wxWidgets_LIBRARIES opengl32 glu32)
+ endif(NOT WX_USE_GL EQUAL -1)
+
+ list(APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32)
+ endmacro(wx_set_libraries)
+
+ #-------------------------------------------------------------------
+ # WIN32: Start actual work.
+ #-------------------------------------------------------------------
+
+ # Look for an installation tree.
+ find_path(wxWidgets_ROOT_DIR
+ NAMES include/wx/wx.h
+ PATHS
+ $ENV{wxWidgets_ROOT_DIR}
+ $ENV{WXWIN}
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" # WX 2.6.x
+ C:/
+ D:/
+ $ENV{ProgramFiles}
+ PATH_SUFFIXES
+ wxWidgets-3.0.2
+ wxWidgets-3.0.1
+ wxWidgets-3.0.0
+ wxWidgets-2.9.5
+ wxWidgets-2.9.4
+ wxWidgets-2.9.3
+ wxWidgets-2.9.2
+ wxWidgets-2.9.1
+ wxWidgets-2.9.0
+ wxWidgets-2.8.9
+ wxWidgets-2.8.8
+ wxWidgets-2.8.7
+ wxWidgets-2.8.6
+ wxWidgets-2.8.5
+ wxWidgets-2.8.4
+ wxWidgets-2.8.3
+ wxWidgets-2.8.2
+ wxWidgets-2.8.1
+ wxWidgets-2.8.0
+ wxWidgets-2.7.4
+ wxWidgets-2.7.3
+ wxWidgets-2.7.2
+ wxWidgets-2.7.1
+ wxWidgets-2.7.0
+ wxWidgets-2.7.0-1
+ wxWidgets-2.6.4
+ wxWidgets-2.6.3
+ wxWidgets-2.6.2
+ wxWidgets-2.6.1
+ wxWidgets-2.5.4
+ wxWidgets-2.5.3
+ wxWidgets-2.5.2
+ wxWidgets-2.5.1
+ wxWidgets
+ DOC "wxWidgets base/installation directory?"
+ )
+
+ # If wxWidgets_ROOT_DIR changed, clear lib dir.
+ if(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
+ dbg_msg( "WX_ROOT_DIR != wxWidgets_ROOT_DIR" )
+
+ set(WX_ROOT_DIR ${wxWidgets_ROOT_DIR}
+ CACHE INTERNAL "wxWidgets_ROOT_DIR")
+ set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
+ CACHE PATH "Cleared." FORCE)
+ endif(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
+
+ if(WX_ROOT_DIR)
+ dbg_msg( "WX_ROOT_DIR == wxWidgets_ROOT_DIR" )
+
+ # Select one default tree inside the already determined wx tree.
+ # Prefer static/shared order usually consistent with build
+ # settings.
+ if(MINGW)
+ dbg_msg( "MINGW" )
+ set(WX_LIB_DIR_PREFIX gcc)
+ else(MINGW)
+ set(WX_LIB_DIR_PREFIX vc)
+ endif(MINGW)
+ if(BUILD_SHARED_LIBS)
+ dbg_msg( "BUILD_SHARED_LIBS" )
+ find_path(wxWidgets_LIB_DIR
+ NAMES
+ msw/wx/setup.h
+ mswd/wx/setup.h
+ mswu/wx/setup.h
+ mswud/wx/setup.h
+ mswuniv/wx/setup.h
+ mswunivd/wx/setup.h
+ mswunivu/wx/setup.h
+ mswunivud/wx/setup.h
+ PATHS
+ ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_dll # prefer shared
+ ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_lib
+ DOC "Path to wxWidgets libraries?"
+ NO_DEFAULT_PATH
+ )
+ else(BUILD_SHARED_LIBS)
+ dbg_msg( "!BUILD_SHARED_LIBS WX_LIB_DIR:${WX_LIB_DIR}" )
+ find_path(wxWidgets_LIB_DIR
+ NAMES
+ msw/wx/setup.h
+ mswd/wx/setup.h
+ mswu/wx/setup.h
+ mswud/wx/setup.h
+ mswuniv/wx/setup.h
+ mswunivd/wx/setup.h
+ mswunivu/wx/setup.h
+ mswunivud/wx/setup.h
+ PATHS
+ ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_lib # prefer static
+ ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_dll
+ DOC "Path to wxWidgets libraries?"
+ NO_DEFAULT_PATH
+ )
+ endif(BUILD_SHARED_LIBS)
+
+ # If wxWidgets_LIB_DIR changed, clear all libraries.
+ if(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR)
+ set(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR")
+ wx_clear_all_dbg_libs()
+ wx_clear_all_rel_libs()
+ endif(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR)
+
+ if(WX_LIB_DIR)
+ # If building shared libs, define WXUSINGDLL to use dllimport.
+ if(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*")
+ set(wxWidgets_DEFINITIONS WXUSINGDLL)
+ dbg_msg_v("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}")
+ endif(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*")
+
+ # Search for available configuration types.
+ foreach(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw)
+ set(WX_${CFG}_FOUND FALSE)
+ if(EXISTS ${WX_LIB_DIR}/${CFG})
+ list(APPEND WX_CONFIGURATION_LIST ${CFG})
+ set(WX_${CFG}_FOUND TRUE)
+ set(WX_CONFIGURATION ${CFG})
+ endif(EXISTS ${WX_LIB_DIR}/${CFG})
+ endforeach(CFG)
+ dbg_msg_v("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}")
+
+ if(WX_CONFIGURATION)
+ set(wxWidgets_FOUND TRUE)
+
+ # If the selected configuration wasn't found force the default
+ # one. Otherwise, use it but still force a refresh for
+ # updating the doc string with the current list of available
+ # configurations.
+ if(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
+ set(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING
+ "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
+ else(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
+ set(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING
+ "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
+ endif(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
+
+ # If release config selected, and both release/debug exist.
+ if(WX_${wxWidgets_CONFIGURATION}d_FOUND)
+ OPTION(wxWidgets_USE_REL_AND_DBG
+ "Use release and debug configurations?" TRUE)
+ set(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG})
+ else(WX_${wxWidgets_CONFIGURATION}d_FOUND)
+ # If the option exists (already in cache), force it false.
+ if(wxWidgets_USE_REL_AND_DBG)
+ set(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL
+ "No ${wxWidgets_CONFIGURATION}d found." FORCE)
+ endif(wxWidgets_USE_REL_AND_DBG)
+ set(WX_USE_REL_AND_DBG FALSE)
+ endif(WX_${wxWidgets_CONFIGURATION}d_FOUND)
+
+ # Get configuration parameters from the name.
+ wx_get_name_components(${wxWidgets_CONFIGURATION} UNV UCD DBG)
+
+ # Set wxWidgets lib setup include directory.
+ if(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
+ set(wxWidgets_INCLUDE_DIRS
+ ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION})
+ else(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
+ dbg_msg("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.")
+ set(wxWidgets_FOUND FALSE)
+ endif(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
+
+ # Set wxWidgets main include directory.
+ if(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
+ list(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include)
+ else(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
+ dbg_msg("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h")
+ set(wxWidgets_FOUND FALSE)
+ endif(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
+
+ # Find wxWidgets libraries.
+ wx_find_libs("${UNV}" "${UCD}" "${DBG}")
+ if(WX_USE_REL_AND_DBG)
+ wx_find_libs("${UNV}" "${UCD}" "d")
+ endif(WX_USE_REL_AND_DBG)
+
+ # Settings for requested libs (i.e., include dir, libraries, etc.).
+ wx_set_libraries(wxWidgets_FIND_COMPONENTS "${DBG}")
+
+ # Add necessary definitions for unicode builds
+ if("${UCD}" STREQUAL "u")
+ list(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE)
+ endif("${UCD}" STREQUAL "u")
+
+ # Add necessary definitions for debug builds
+ set(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__)
+
+ endif(WX_CONFIGURATION)
+ endif(WX_LIB_DIR)
+ endif(WX_ROOT_DIR)
+
+#=====================================================================
+# UNIX_FIND_STYLE
+#=====================================================================
+else(wxWidgets_FIND_STYLE STREQUAL "win32")
+ dbg_msg("NOT win32 path")
+
+ if(wxWidgets_FIND_STYLE STREQUAL "unix")
+ dbg_msg("unix find style")
+
+ #-----------------------------------------------------------------
+ # UNIX: Helper MACROS
+ #-----------------------------------------------------------------
+ #
+ # Set the default values based on "wx-config --selected-config".
+ #
+ macro(wx_config_select_get_default)
+ execute_process(
+ COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+ ${wxWidgets_CONFIG_OPTIONS} --selected-config
+ OUTPUT_VARIABLE _wx_selected_config
+ RESULT_VARIABLE _wx_result
+ ERROR_QUIET
+ )
+ if(_wx_result EQUAL 0)
+ foreach(_opt_name debug static unicode universal)
+ string(TOUPPER ${_opt_name} _upper_opt_name)
+ if(_wx_selected_config MATCHES ".*${_opt_name}.*")
+ set(wxWidgets_DEFAULT_${_upper_opt_name} ON)
+ else(_wx_selected_config MATCHES ".*${_opt_name}.*")
+ set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
+ endif(_wx_selected_config MATCHES ".*${_opt_name}.*")
+ endforeach(_opt_name)
+ else(_wx_result EQUAL 0)
+ foreach(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL)
+ set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
+ endforeach(_upper_opt_name)
+ endif(_wx_result EQUAL 0)
+ endmacro(wx_config_select_get_default)
+
+ #
+ # Query a boolean configuration option to determine if the system
+ # has both builds available. If so, provide the selection option
+ # to the user.
+ #
+ macro(wx_config_select_query_bool _OPT_NAME _OPT_HELP)
+ execute_process(
+ COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+ ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes
+ RESULT_VARIABLE _wx_result_yes
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+ execute_process(
+ COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+ ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no
+ RESULT_VARIABLE _wx_result_no
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+ string(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME)
+ if(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
+ OPTION(wxWidgets_USE_${_UPPER_OPT_NAME}
+ ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}})
+ else(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
+ # If option exists (already in cache), force to available one.
+ if(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME})
+ if(_wx_result_yes EQUAL 0)
+ set(wxWidgets_USE_${_UPPER_OPT_NAME} ON CACHE BOOL ${_OPT_HELP} FORCE)
+ else(_wx_result_yes EQUAL 0)
+ set(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE)
+ endif(_wx_result_yes EQUAL 0)
+ endif(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME})
+ endif(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
+ endmacro(wx_config_select_query_bool)
+
+ #
+ # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting
+ # among multiple builds.
+ #
+ macro(wx_config_select_set_options)
+ set(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS})
+ foreach(_opt_name debug static unicode universal)
+ string(TOUPPER ${_opt_name} _upper_opt_name)
+ if(DEFINED wxWidgets_USE_${_upper_opt_name})
+ if(wxWidgets_USE_${_upper_opt_name})
+ list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes)
+ else(wxWidgets_USE_${_upper_opt_name})
+ list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no)
+ endif(wxWidgets_USE_${_upper_opt_name})
+ endif(DEFINED wxWidgets_USE_${_upper_opt_name})
+ endforeach(_opt_name)
+ endmacro(wx_config_select_set_options)
+
+ #-----------------------------------------------------------------
+ # UNIX: Start actual work.
+ #-----------------------------------------------------------------
+ # Support cross-compiling, only search in the target platform.
+ find_program(wxWidgets_CONFIG_EXECUTABLE wx-config
+ ONLY_CMAKE_FIND_ROOT_PATH
+ )
+
+ if(wxWidgets_CONFIG_EXECUTABLE)
+ set(wxWidgets_FOUND TRUE)
+
+ # get defaults based on "wx-config --selected-config"
+ wx_config_select_get_default()
+
+ # for each option: if both builds are available, provide option
+ wx_config_select_query_bool(debug "Use debug build?")
+ wx_config_select_query_bool(unicode "Use unicode build?")
+ wx_config_select_query_bool(universal "Use universal build?")
+ wx_config_select_query_bool(static "Link libraries statically?")
+
+ # process selection to set wxWidgets_SELECT_OPTIONS
+ wx_config_select_set_options()
+ dbg_msg("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}")
+
+ # run the wx-config program to get cxxflags
+ execute_process(
+ COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+ ${wxWidgets_SELECT_OPTIONS} --cxxflags
+ OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
+ RESULT_VARIABLE RET
+ ERROR_QUIET
+ )
+ if(RET EQUAL 0)
+ string(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS)
+ separate_arguments(wxWidgets_CXX_FLAGS)
+
+ dbg_msg_v("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
+
+ # parse definitions from cxxflags;
+ # drop -D* from CXXFLAGS and the -D prefix
+ string(REGEX MATCHALL "-D[^;]+"
+ wxWidgets_DEFINITIONS "${wxWidgets_CXX_FLAGS}")
+ string(REGEX REPLACE "-D[^;]+(;|$)" ""
+ wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
+ string(REGEX REPLACE ";$" ""
+ wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
+ string(REPLACE "-D" ""
+ wxWidgets_DEFINITIONS "${wxWidgets_DEFINITIONS}")
+
+ # parse include dirs from cxxflags; drop -I prefix
+ string(REGEX MATCHALL "-I[^;]+"
+ wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}")
+ string(REGEX REPLACE "-I[^;]+;" ""
+ wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
+ string(REPLACE "-I" ""
+ wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}")
+
+ # Flags are a string, not a list, fix it here
+ string(REPLACE ";" " "
+ wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
+
+ dbg_msg_v("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
+ dbg_msg_v("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
+ dbg_msg_v("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
+
+ else(RET EQUAL 0)
+ set(wxWidgets_FOUND FALSE)
+ dbg_msg_v("${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}")
+ endif(RET EQUAL 0)
+
+ # run the wx-config program to get the libs
+ # - NOTE: wx-config doesn't verify that the libs requested exist
+ # it just produces the names. Maybe a TRY_COMPILE would
+ # be useful here...
+ string(REPLACE ";" ","
+ wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}")
+ execute_process(
+ COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+ ${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS}
+ OUTPUT_VARIABLE wxWidgets_LIBRARIES
+ RESULT_VARIABLE RET
+ ERROR_QUIET
+ )
+ if(RET EQUAL 0)
+ string(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES)
+ separate_arguments(wxWidgets_LIBRARIES)
+ string(REPLACE "-framework;" "-framework "
+ wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+ string(REPLACE "-arch;" "-arch "
+ wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+ string(REPLACE "-isysroot;" "-isysroot "
+ wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+
+ # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
+ string(REGEX MATCHALL "-L[^;]+"
+ wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}")
+ string(REPLACE "-L" ""
+ wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}")
+
+ dbg_msg_v("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
+ dbg_msg_v("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")
+
+ else(RET EQUAL 0)
+ set(wxWidgets_FOUND FALSE)
+ dbg_msg("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}")
+ endif(RET EQUAL 0)
+ endif(wxWidgets_CONFIG_EXECUTABLE)
+
+ # When using wx-config in MSYS, the include paths are UNIX style paths which may or may
+ # not work correctly depending on you MSYS/MinGW configuration. CMake expects native
+ # paths internally.
+ if(wxWidgets_FOUND AND MSYS)
+ find_program(_cygpath_exe cygpath ONLY_CMAKE_FIND_ROOT_PATH)
+ dbg_msg_v("_cygpath_exe: ${_cygpath_exe}")
+ if(_cygpath_exe)
+ set(_tmp_path "")
+ foreach(_path ${wxWidgets_INCLUDE_DIRS})
+ execute_process(
+ COMMAND cygpath -w ${_path}
+ OUTPUT_VARIABLE _native_path
+ RESULT_VARIABLE _retv
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+ if(_retv EQUAL 0)
+ file(TO_CMAKE_PATH ${_native_path} _native_path)
+ dbg_msg_v("Path ${_path} converted to ${_native_path}")
+ set(_tmp_path "${_tmp_path} ${_native_path}")
+ endif()
+ endforeach()
+ dbg_msg("Setting wxWidgets_INCLUDE_DIRS = ${_tmp_path}")
+ set(wxWidgets_INCLUDE_DIRS ${_tmp_path})
+ separate_arguments(wxWidgets_INCLUDE_DIRS)
+ list(REMOVE_ITEM wxWidgets_INCLUDE_DIRS "")
+ endif()
+ endif()
+#=====================================================================
+# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE
+#=====================================================================
+ else(wxWidgets_FIND_STYLE STREQUAL "unix")
+ if(NOT wxWidgets_FIND_QUIETLY)
+ message(STATUS
+ "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
+ " Platform unknown/unsupported. It's neither WIN32 nor UNIX "
+ "find style."
+ )
+ endif(NOT wxWidgets_FIND_QUIETLY)
+ endif(wxWidgets_FIND_STYLE STREQUAL "unix")
+endif(wxWidgets_FIND_STYLE STREQUAL "win32")
+
+
+# Check if a specfic version was requested by find_package().
+if(wxWidgets_FOUND AND wxWidgets_FIND_VERSION)
+ find_file(_filename wx/version.h PATHS ${wxWidgets_INCLUDE_DIRS} NO_DEFAULT_PATH)
+ dbg_msg("_filename: ${_filename}")
+
+ if(NOT _filename)
+ message(FATAL_ERROR "wxWidgets wx/version.h file not found in ${wxWidgets_INCLUDE_DIRS}.")
+ endif()
+
+ file(READ ${_filename} _wx_version_h)
+
+ string(REGEX REPLACE "^(.*\n)?#define wxMAJOR_VERSION[ ]+([0-9]+).*"
+ "\\2" wxWidgets_VERSION_MAJOR "${_wx_version_h}" )
+ string(REGEX REPLACE "^(.*\n)?#define wxMINOR_VERSION[ ]+([0-9]+).*"
+ "\\2" wxWidgets_VERSION_MINOR "${_wx_version_h}" )
+ string(REGEX REPLACE "^(.*\n)?#define wxRELEASE_NUMBER[ ]+([0-9]+).*"
+ "\\2" wxWidgets_VERSION_PATCH "${_wx_version_h}" )
+ set(wxWidgets_VERSION_STRING
+ "${wxWidgets_VERSION_MAJOR}.${wxWidgets_VERSION_MINOR}.${wxWidgets_VERSION_PATCH}" )
+ dbg_msg("wxWidgets_VERSION_STRING: ${wxWidgets_VERSION_STRING}")
+endif()
+
+
+# Debug output:
+dbg_msg("wxWidgets_FOUND : ${wxWidgets_FOUND}")
+dbg_msg("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}")
+dbg_msg("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}")
+dbg_msg("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}")
+dbg_msg("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}")
+dbg_msg("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}")
+dbg_msg("wxWidgets_FIND_VERSION : ${wxWidgets_FIND_VERSION}")
+dbg_msg("wxWidgets_VERSION_MAJOR : ${wxWidgets_VERSION_MAJOR}")
+dbg_msg("wxWidgets_VERSION_MINOR : ${wxWidgets_VERSION_MINOR}")
+dbg_msg("wxWidgets_VERSION_PATCH : ${wxWidgets_VERSION_PATCH}")
+
+#=====================================================================
+#=====================================================================
+# Maintain consistency with all other variables.
+dbg_msg("wxWidgets_FOUND : ${wxWidgets_FOUND}")
+set(WXWIDGETS_FOUND ${wxWidgetsS_FOUND})
+
+include(FindPackageHandleStandardArgs)
+
+find_package_handle_standard_args(wxWidgets
+ FOUND_VAR wxWidgets_FOUND
+ REQUIRED_VARS wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS
+ VERSION_VAR wxWidgets_VERSION_STRING
+ )
+
+#=====================================================================
+# Macros for use in wxWidgets apps.
+# - This module will not fail to find wxWidgets based on the code
+# below. Hence, it's required to check for validity of:
+#
+# wxWidgets_wxrc_EXECUTABLE
+#=====================================================================
+
+# Resource file compiler.
+find_program(wxWidgets_wxrc_EXECUTABLE wxrc
+ ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw
+ )
+
+#
+# wx_split_arguments_on(<keyword> <left> <right> <arg1> <arg2> ...)
+#
+# Sets <left> and <right> to contain arguments to the left and right,
+# respectively, of <keyword>.
+#
+# Example usage:
+# function(wxwidgets_add_resources outfiles)
+# wx_split_arguments_on(OPTIONS wxrc_files wxrc_options ${ARGN})
+# ...
+# endfunction(wxwidgets_add_resources)
+#
+# wxwidgets_add_resources(sources ${xrc_files} OPTIONS -e -o file.C)
+#
+# NOTE: This is a generic piece of code that should be renamed to
+# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
+# FindPackageStandardArgs.cmake. At the time of this writing
+# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied
+# here a bit more generalized. So, there are already two find modules
+# using this approach.
+#
+function(wx_split_arguments_on _keyword _leftvar _rightvar)
+ # FIXME: Document that the input variables will be cleared.
+ #list(APPEND ${_leftvar} "")
+ #list(APPEND ${_rightvar} "")
+ set(${_leftvar} "")
+ set(${_rightvar} "")
+
+ set(_doing_right FALSE)
+ foreach(element ${ARGN})
+ if("${element}" STREQUAL "${_keyword}")
+ set(_doing_right TRUE)
+ else("${element}" STREQUAL "${_keyword}")
+ if(_doing_right)
+ list(APPEND ${_rightvar} "${element}")
+ else(_doing_right)
+ list(APPEND ${_leftvar} "${element}")
+ endif(_doing_right)
+ endif("${element}" STREQUAL "${_keyword}")
+ endforeach(element)
+
+ set(${_leftvar} ${${_leftvar}} PARENT_SCOPE)
+ set(${_rightvar} ${${_rightvar}} PARENT_SCOPE)
+endfunction(wx_split_arguments_on)
+
+#
+# wx_get_dependencies_from_xml(
+# <depends>
+# <match_pattern>
+# <clean_pattern>
+# <xml_contents>
+# <depends_path>
+# )
+#
+# FIXME: Add documentation here...
+#
+function(wx_get_dependencies_from_xml
+ _depends
+ _match_patt
+ _clean_patt
+ _xml_contents
+ _depends_path
+ )
+
+ string(REGEX MATCHALL
+ ${_match_patt}
+ dep_file_list
+ "${${_xml_contents}}"
+ )
+ foreach(dep_file ${dep_file_list})
+ string(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}")
+
+ # make the file have an absolute path
+ if(NOT IS_ABSOLUTE "${dep_file}")
+ set(dep_file "${${_depends_path}}/${dep_file}")
+ endif(NOT IS_ABSOLUTE "${dep_file}")
+
+ # append file to dependency list
+ list(APPEND ${_depends} "${dep_file}")
+ endforeach(dep_file)
+
+ set(${_depends} ${${_depends}} PARENT_SCOPE)
+endfunction(wx_get_dependencies_from_xml)
+
+#
+# wxwidgets_add_resources(<sources> <xrc_files>
+# OPTIONS <options> [NO_CPP_CODE])
+#
+# Adds a custom command for resource file compilation of the
+# <xrc_files> and appends the output files to <sources>.
+#
+# Example usages:
+# wxwidgets_add_resources(sources xrc/main_frame.xrc)
+# wxwidgets_add_resources(sources ${xrc_files} OPTIONS -e -o altname.cxx)
+#
+function(wxwidgets_add_resources _outfiles)
+ wx_split_arguments_on(OPTIONS rc_file_list rc_options ${ARGN})
+
+ # Parse files for dependencies.
+ set(rc_file_list_abs "")
+ set(rc_depends "")
+ foreach(rc_file ${rc_file_list})
+ get_filename_component(depends_path ${rc_file} PATH)
+
+ get_filename_component(rc_file_abs ${rc_file} ABSOLUTE)
+ list(APPEND rc_file_list_abs "${rc_file_abs}")
+
+ # All files have absolute paths or paths relative to the location
+ # of the rc file.
+ file(READ "${rc_file_abs}" rc_file_contents)
+
+ # get bitmap/bitmap2 files
+ wx_get_dependencies_from_xml(
+ rc_depends
+ "<bitmap[^<]+"
+ "^<bitmap[^>]*>"
+ rc_file_contents
+ depends_path
+ )
+
+ # get url files
+ wx_get_dependencies_from_xml(
+ rc_depends
+ "<url[^<]+"
+ "^<url[^>]*>"
+ rc_file_contents
+ depends_path
+ )
+
+ # get wxIcon files
+ wx_get_dependencies_from_xml(
+ rc_depends
+ "<object[^>]*class=\"wxIcon\"[^<]+"
+ "^<object[^>]*>"
+ rc_file_contents
+ depends_path
+ )
+ endforeach(rc_file)
+
+ #
+ # Parse options.
+ #
+ # If NO_CPP_CODE option specified, then produce .xrs file rather
+ # than a .cpp file (i.e., don't add the default --cpp-code option).
+ list(FIND rc_options NO_CPP_CODE index)
+ if(index EQUAL -1)
+ list(APPEND rc_options --cpp-code)
+ # wxrc's default output filename for cpp code.
+ set(outfile resource.cpp)
+ else(index EQUAL -1)
+ list(REMOVE_AT rc_options ${index})
+ # wxrc's default output filename for xrs file.
+ set(outfile resource.xrs)
+ endif(index EQUAL -1)
+
+ # Get output name for use in add_custom_command.
+ # - short option scanning
+ list(FIND rc_options -o index)
+ if(NOT index EQUAL -1)
+ MATH(EXPR filename_index "${index} + 1")
+ list(GET rc_options ${filename_index} outfile)
+ #list(REMOVE_AT rc_options ${index} ${filename_index})
+ endif(NOT index EQUAL -1)
+ # - long option scanning
+ string(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}")
+ if(outfile_opt)
+ string(REPLACE "--output=" "" outfile "${outfile_opt}")
+ endif(outfile_opt)
+ #string(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
+ #string(REGEX REPLACE ";$" "" rc_options "${rc_options}")
+
+ if(NOT IS_ABSOLUTE "${outfile}")
+ set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
+ endif(NOT IS_ABSOLUTE "${outfile}")
+ add_custom_command(
+ OUTPUT "${outfile}"
+ COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs}
+ DEPENDS ${rc_file_list_abs} ${rc_depends}
+ )
+
+ # Add generated header to output file list.
+ list(FIND rc_options -e short_index)
+ list(FIND rc_options --extra-cpp-code long_index)
+ if(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
+ get_filename_component(outfile_ext ${outfile} EXT)
+ string(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}")
+ list(APPEND ${_outfiles} "${outfile_header}")
+ set_source_files_properties(
+ "${outfile_header}" PROPERTIES GENERATED TRUE
+ )
+ endif(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
+
+ # Add generated file to output file list.
+ list(APPEND ${_outfiles} "${outfile}")
+
+ set(${_outfiles} ${${_outfiles}} PARENT_SCOPE)
+endfunction(wxwidgets_add_resources)
diff --git a/CMakeModules/Functions.cmake b/CMakeModules/Functions.cmake
new file mode 100644
index 0000000..e3d7f8c
--- /dev/null
+++ b/CMakeModules/Functions.cmake
@@ -0,0 +1,71 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2010 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+
+# Function make_lexer
+# is a standard way to invoke TokenList2DsnLexer.cmake.
+# Extra arguments are treated as source files which depend on the generated
+# outHeaderFile
+
+function( make_lexer inputFile outHeaderFile outCppFile enum )
+ add_custom_command(
+ OUTPUT ${outHeaderFile}
+ ${outCppFile}
+ COMMAND ${CMAKE_COMMAND}
+ -Denum=${enum}
+ -DinputFile=${inputFile}
+ -DoutHeaderFile=${outHeaderFile}
+ -DoutCppFile=${outCppFile}
+ -P ${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake
+ DEPENDS ${inputFile}
+ ${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake
+ COMMENT "TokenList2DsnLexer.cmake creating:
+ ${outHeaderFile} and
+ ${outCppFile} from
+ ${inputFile}"
+ )
+
+ # extra_args, if any, are treated as source files (typically headers) which
+ # are known to depend on the generated outHeader.
+ foreach( extra_arg ${ARGN} )
+ set_source_files_properties( ${extra_arg}
+ PROPERTIES OBJECT_DEPENDS ${outHeaderFile}
+ )
+ endforeach()
+
+endfunction()
+
+
+# Is a macro instead of function so there's a higher probability that the
+# scope of CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA is global
+macro( add_conffiles )
+ if( ${ARGC} STREQUAL "0" )
+ # remove the file when user passes no arguments, which he should do exactly once at top
+ file( REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conffiles )
+ else()
+ foreach( filename ${ARGV} )
+ file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/conffiles "${filename}\n" )
+ endforeach()
+ set( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_CURRENT_BINARY_DIR}/conffiles )
+ endif()
+endmacro( add_conffiles )
diff --git a/CMakeModules/Html2C.cmake b/CMakeModules/Html2C.cmake
new file mode 100644
index 0000000..99919b3
--- /dev/null
+++ b/CMakeModules/Html2C.cmake
@@ -0,0 +1,13 @@
+
+# CMake script file to process a text file by wrapping every line in double quotes.
+# Input file must not abuse quotes, staying with single quotes is probably best.
+
+set( lines "" )
+file( STRINGS ${inputFile} lines )
+
+file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMake from an HTML file\n" )
+
+foreach( line ${lines} )
+ STRING(REGEX REPLACE "\"" "\\\\\"" linem ${line})
+ file( APPEND ${outputFile} "\"" ${linem} "\\n\"\n" )
+endforeach( line ${lines} )
diff --git a/CMakeModules/KiCadVersion.cmake b/CMakeModules/KiCadVersion.cmake
new file mode 100644
index 0000000..8d02afb
--- /dev/null
+++ b/CMakeModules/KiCadVersion.cmake
@@ -0,0 +1,37 @@
+#
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2016 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+# Note: unless you are the person responsible for creating releases,
+# do *not* change these variables. This way the KiCad project
+# can maintain control over what is an official KiCad build and
+# what is not. Setting these variable that conflict with KiCad
+# releases is a shooting offense.
+#
+# This file gets included in the WriteVersionHeader.cmake file to set
+# the KiCad version when the source is provided in an archive file.
+# When KiCad is cloned using git, the git version is used. The only
+# time this should be set to a value other than "no-vcs-found" is when
+# a source archive is created. This eliminates the need to set
+# KICAD_VERSION during the build configuration step.
+set( KICAD_VERSION "4.0.7" )
diff --git a/CMakeModules/MinGWResourceCompiler.cmake b/CMakeModules/MinGWResourceCompiler.cmake
new file mode 100644
index 0000000..0e13ee5
--- /dev/null
+++ b/CMakeModules/MinGWResourceCompiler.cmake
@@ -0,0 +1,44 @@
+# resource compilation for mingw (http://www.cmake.org/Bug/view.php?id=4068)
+
+macro(dbg_msg _MSG)
+# message(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
+endmacro(dbg_msg)
+
+macro(mingw_resource_compiler _NAME)
+ # Resource compiler name.
+ if(NOT DEFINED CMAKE_RC_COMPILER)
+ set(CMAKE_RC_COMPILER windres.exe)
+ endif(NOT DEFINED CMAKE_RC_COMPILER)
+ dbg_msg("CMAKE_RC_COMPILER: ${CMAKE_RC_COMPILER}")
+
+ # Input file.
+ set(_IN "${CMAKE_CURRENT_SOURCE_DIR}/${_NAME}.rc")
+ dbg_msg("_IN: ${_IN}")
+
+ # Output file.
+ set(_OUT "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_NAME}.dir/${_NAME}_rc.obj")
+ dbg_msg("_OUT: ${_OUT}")
+
+ # Include directories.
+ set(_WINDRES_INCLUDE_DIRS -I${CMAKE_CURRENT_SOURCE_DIR})
+ foreach(wx_include_dir ${wxWidgets_INCLUDE_DIRS})
+ set(_WINDRES_INCLUDE_DIRS ${_WINDRES_INCLUDE_DIRS} -I${wx_include_dir})
+ endforeach(wx_include_dir ${wxWidgets_INCLUDE_DIRS})
+ dbg_msg("_WINDRES_INCLUDE_DIRS: ${_WINDRES_INCLUDE_DIRS}")
+
+ # windres arguments.
+ set(_ARGS ${_WINDRES_INCLUDE_DIRS} -i${_IN} -o${_OUT})
+ dbg_msg("_ARGS: ${_ARGS}")
+
+ # Compile resource file.
+ add_custom_command(OUTPUT ${_OUT}
+ COMMAND ${CMAKE_RC_COMPILER}
+ ARGS ${_ARGS}
+ COMMENT "Compiling ${_NAME}'s resource file"
+ VERBATIM)
+
+ # Set a NAME_RESOURCES variable
+ string(TOUPPER ${_NAME} _NAME_UPPER)
+ set(${_NAME_UPPER}_RESOURCES ${_OUT})
+ dbg_msg("${_NAME_UPPER}_RESOURCES: ${${_NAME_UPPER}_RESOURCES}")
+endmacro(mingw_resource_compiler)
diff --git a/CMakeModules/PNG2cpp.cmake b/CMakeModules/PNG2cpp.cmake
new file mode 100644
index 0000000..986f534
--- /dev/null
+++ b/CMakeModules/PNG2cpp.cmake
@@ -0,0 +1,81 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2011 Kicad Developers, see change_log.txt for contributors#.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+#############################################################################
+#
+# This script converts a *.png file into a *.cpp file.
+# The *.cpp file will contain a BITMAP_DEF structure, which is simply a byte
+# array and a length of bytes which were found in the *.png file.
+#
+#
+# Invocation Parameters are: inputFile, outCppFile
+#
+# inputFile - Required, full path and file name of the input PNG file
+#
+# outCppFile - Required, full path and file name of where to save the
+# generated cpp file.
+
+
+file( READ ${inputFile} file_contents HEX )
+
+get_filename_component( png_name "${inputFile}" NAME_WE )
+
+# split into pairs of ASCII, where each pair gives a single byte's value
+string( REGEX MATCHALL "[0-9a-fA-F][0-9a-fA-F]" byte_list ${file_contents} )
+
+set( output_begin "
+/* Do not modify this file, it was automatically generated by the
+ * PNG2cpp CMake script, using a *.png file as input.
+ */
+
+#include <bitmaps.h>
+
+static const unsigned char png[] = {"
+)
+
+set( output_end "};
+
+const BITMAP_OPAQUE ${png_name}_xpm[1] = {{ png, sizeof( png ), \"${png_name}_xpm\" }};
+
+//EOF
+" )
+
+set( byte_count 0 )
+set( byte_array "" )
+
+foreach( byte ${byte_list} )
+
+ math( EXPR modulus "${byte_count} % 16" )
+ if( modulus EQUAL 0 )
+ set( byte_array "${byte_array}\n" )
+ endif()
+
+ set( byte_array "${byte_array} 0x${byte}," )
+ math( EXPR byte_count "${byte_count} + 1" )
+endforeach()
+
+set( byte_array "${byte_array}\n" )
+
+file( WRITE ${outCppFile} "${output_begin}" )
+file( APPEND ${outCppFile} "${byte_array}" )
+file( APPEND ${outCppFile} "${output_end}" )
+
diff --git a/CMakeModules/PerformFeatureChecks.cmake b/CMakeModules/PerformFeatureChecks.cmake
new file mode 100644
index 0000000..0240046
--- /dev/null
+++ b/CMakeModules/PerformFeatureChecks.cmake
@@ -0,0 +1,115 @@
+#
+# Check for platform specific features and generate configuration header..
+#
+# This cmake file was written to create a platform specific configuration
+# header to handle differences between build platforms. Please add new
+# feature checks to this file. Always check the wxWidgets headers first
+# before adding new feature checks. The wxWidgets build system does a
+# very good job of handling platform and compiler differences.
+#
+# Should you feel the need to do this:
+#
+# #ifdef SYSTEM_A
+# # include <some_header_for_system_a.h>
+# #elif SYSTEM_B
+# # include <some_other_header_for_system_b.h>
+# #elif SYSTEM_C
+# # include <yet_another_header_for_system_c.h>
+# #endif
+#
+# in your source, don't. It is not portable nor is it maintainable.
+# Use cmake to detect system specific dependencies and update the
+# configuration header instead.
+#
+# See this link for information on writing cmake system checks:
+#
+# http://www.vtk.org/Wiki/CMake_HowToDoPlatformChecks
+#
+# More importantly see "Recommendations for Writing Autoconf Macros" in:
+#
+# http://www.lrde.epita.fr/~adl/dl/autotools.pdf
+#
+# for an explanation of why you should do this. Even though this is an
+# autotools tutorial. This section clearly explains why checking for
+# features is superior to checking for systems. The previous section of
+# this tutorial shows how to create a system independent check for _mkdir().
+# Consider it a benchmark when writing your own feature tests.
+#
+
+macro( perform_feature_checks )
+
+ include( CheckIncludeFile )
+ #include( CheckFunctionExists )
+ include( CheckLibraryExists )
+ include( CheckSymbolExists )
+ include( CheckIncludeFileCXX )
+ include( CheckCXXSymbolExists )
+ include( CheckCXXSourceCompiles )
+ include( CheckCXXCompilerFlag )
+
+ check_cxx_compiler_flag( -fvisibility=hidden GXX_HAS_VISIBILITY_FLAG )
+ check_cxx_compiler_flag( -fvisibility-inlines-hidden GXX_HAS_VISIBILITY_INLINES_FLAG )
+
+ check_include_file( "malloc.h" HAVE_MALLOC_H )
+
+ # FIXME: Visual C++ does not support the "not" keyword natively. It is
+ # defined as a macro in <iso646.h>. There should be a cmake macro
+ # to check if compiler supports the not keyword natively. If not,
+ # then check for <iso646.h> and include it. Although it doesn't
+ # appear to cause any problems with other compilers, that doesn't
+ # mean won't fail somewhere down the line.
+ check_include_file( "iso646.h" HAVE_ISO646_H )
+
+ # The STDINT header file test is required because MinGW under Windows
+ # doesn't define HAVE_STDINT_H even though it does have it.
+ #
+ # We need to add it to the global compiler definitions as config.h is not
+ # included in pyport.h which is where the problem ocurrs without this
+ # fix.
+ check_include_file( "stdint.h" HAVE_STDINT_H )
+
+ if( HAVE_STDINT_H )
+ add_definitions( -DHAVE_STDINT_H )
+ endif()
+
+ # no place is this used, and "HAVE_STRINGS_H", if present in config.h then
+ # conflicts with /usr/include/python2.6/Python.h. Please rename the macro if
+ # re-introduce this.
+ # check_include_file("strings.h" HAVE_STRINGS_H)
+
+ check_symbol_exists( strcasecmp "string.h" HAVE_STRCASECMP )
+ check_symbol_exists( strcasecmp "strings.h" HAVE_STRCASECMP )
+ check_symbol_exists( strncasecmp "string.h" HAVE_STRNCASECMP )
+ check_symbol_exists( strncasecmp "strings.h" HAVE_STRNCASECMP )
+ check_symbol_exists( strtok_r "string.h" HAVE_STRTOKR )
+
+ check_cxx_symbol_exists( strcasecmp "string.h" HAVE_STRCASECMP )
+ check_cxx_symbol_exists( strncasecmp "string.h" HAVE_STRNCASECMP )
+
+ # Some platforms define malloc and free in malloc.h instead of stdlib.h.
+ check_symbol_exists( malloc "stdlib.h" MALLOC_IN_STDLIB_H )
+
+ # Check for functions in math.h.
+ check_include_file( "math.h" HAVE_MATH_H )
+
+ # Check for functions in C++ cmath.
+ check_include_file_cxx( cmath HAVE_CXX_CMATH )
+ check_cxx_symbol_exists( asinh cmath HAVE_CMATH_ASINH )
+ check_cxx_symbol_exists( acosh cmath HAVE_CMATH_ACOSH )
+ check_cxx_symbol_exists( atanh cmath HAVE_CMATH_ATANH )
+
+ # CMakes check_cxx_symbol_exists() doesn't work for templates so we must create a
+ # small program to verify isinf() exists in cmath.
+ check_cxx_source_compiles( "#include <cmath>\nint main(int argc, char** argv)\n{\n (void)argv;\n std::isinf(1.0); (void)argc;\n return 0;\n}\n" HAVE_CMATH_ISINF )
+
+ #check_symbol_exists( clock_gettime "time.h" HAVE_CLOCK_GETTIME ) non-standard library, does not work
+ check_library_exists( rt clock_gettime "" HAVE_CLOCK_GETTIME )
+
+ # HAVE_GETTIMEOFDAY is already in use within 2.9 wxWidgets, so use HAVE_GETTIMEOFDAY_FUNC
+ check_symbol_exists( gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY_FUNC )
+
+ # Check for Posix getc_unlocked() for improved performance over getc(). Fall back to
+ # getc() on platforms where getc_unlocked() doesn't exist.
+ check_symbol_exists( getc_unlocked "stdio.h" HAVE_FGETC_NOLOCK )
+
+endmacro( perform_feature_checks )
diff --git a/CMakeModules/SelectLibraryConfigurations.cmake b/CMakeModules/SelectLibraryConfigurations.cmake
new file mode 100644
index 0000000..5bca064
--- /dev/null
+++ b/CMakeModules/SelectLibraryConfigurations.cmake
@@ -0,0 +1,87 @@
+# select_library_configurations( basename )
+#
+# This macro takes a library base name as an argument, and will choose good
+# values for basename_LIBRARY, basename_LIBRARIES, basename_LIBRARY_DEBUG, and
+# basename_LIBRARY_RELEASE depending on what has been found and set. If only
+# basename_LIBRARY_RELEASE is defined, basename_LIBRARY, basename_LIBRARY_DEBUG,
+# and basename_LIBRARY_RELEASE will be set to the release value. If only
+# basename_LIBRARY_DEBUG is defined, then basename_LIBRARY,
+# basename_LIBRARY_DEBUG and basename_LIBRARY_RELEASE will take the debug value.
+#
+# If the generator supports configuration types, then basename_LIBRARY and
+# basename_LIBRARIES will be set with debug and optimized flags specifying the
+# library to be used for the given configuration. If no build type has been set
+# or the generator in use does not support configuration types, then
+# basename_LIBRARY and basename_LIBRARIES will take only the release values.
+
+#=============================================================================
+# Copyright 2009 Will Dicharry <wdicharry@stellarscience.com>
+# Copyright 2005-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# This macro was adapted from the FindQt4 CMake module and is maintained by Will
+# Dicharry <wdicharry@stellarscience.com>.
+
+# Utility macro to check if one variable exists while another doesn't, and set
+# one that doesn't exist to the one that exists.
+macro( _set_library_name basename GOOD BAD )
+ if( ${basename}_LIBRARY_${GOOD} AND NOT ${basename}_LIBRARY_${BAD} )
+ set( ${basename}_LIBRARY_${BAD} ${${basename}_LIBRARY_${GOOD}} )
+ set( ${basename}_LIBRARY ${${basename}_LIBRARY_${GOOD}} )
+ set( ${basename}_LIBRARIES ${${basename}_LIBRARY_${GOOD}} )
+ endif()
+endmacro()
+
+macro( select_library_configurations basename )
+ # if only the release version was found, set the debug to be the release
+ # version.
+ _set_library_name( ${basename} RELEASE DEBUG )
+ # if only the debug version was found, set the release value to be the
+ # debug value.
+ _set_library_name( ${basename} DEBUG RELEASE )
+
+ # Set a default case, which will come into effect if
+ # -no build type is set and the generator only supports one build type
+ # at a time (i.e. CMAKE_CONFIGURATION_TYPES is false)
+ # -${basename}_LIBRARY_DEBUG and ${basename}_LIBRARY_RELEASE are the same
+ # -${basename}_LIBRARY_DEBUG and ${basename}_LIBRARY_RELEASE are both empty
+ set( ${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} )
+ set( ${basename}_LIBRARIES ${${basename}_LIBRARY_RELEASE} )
+
+ if( ${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE AND
+ NOT ${basename}_LIBRARY_DEBUG STREQUAL ${basename}_LIBRARY_RELEASE )
+ # if the generator supports configuration types or CMAKE_BUILD_TYPE
+ # is set, then set optimized and debug options.
+ if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+ set( ${basename}_LIBRARY "" )
+ foreach( _libname IN LISTS ${basename}_LIBRARY_RELEASE )
+ list( APPEND ${basename}_LIBRARY optimized "${_libname}" )
+ endforeach()
+ foreach( _libname IN LISTS ${basename}_LIBRARY_DEBUG )
+ list( APPEND ${basename}_LIBRARY debug "${_libname}" )
+ endforeach()
+ set( ${basename}_LIBRARIES "${${basename}_LIBRARY}" )
+ endif()
+ endif()
+
+ set( ${basename}_LIBRARY ${${basename}_LIBRARY} CACHE FILEPATH
+ "The ${basename} library" )
+
+ if( ${basename}_LIBRARY )
+ set( ${basename}_FOUND TRUE )
+ endif()
+
+ mark_as_advanced( ${basename}_LIBRARY
+ ${basename}_LIBRARY_RELEASE
+ ${basename}_LIBRARY_DEBUG
+ )
+endmacro()
diff --git a/CMakeModules/Shaders.cmake b/CMakeModules/Shaders.cmake
new file mode 100644
index 0000000..c7f0e57
--- /dev/null
+++ b/CMakeModules/Shaders.cmake
@@ -0,0 +1,57 @@
+# CMake script file to process a GLSL source file, so it can be included
+# in C array and compiled in to an application.
+
+# number of input files
+list( LENGTH inputFiles shadersNumber )
+
+# check if GLSL source files were updated since the last time
+set( update "FALSE" )
+foreach( inputFile ${inputFiles} )
+ if( ${inputFile} IS_NEWER_THAN ${outputFile} )
+ set( update "TRUE" )
+ endif( ${inputFile} IS_NEWER_THAN ${outputFile} )
+endforeach( inputFile ${inputFiles} )
+
+if( NOT update )
+ message( "Headers are up-to-date" )
+ return()
+endif( NOT update )
+
+# write header
+file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMake.
+
+#ifndef SHADER_SRC_H
+#define SHADER_SRC_H
+
+const unsigned int shaders_number = ${shadersNumber};
+const char* shaders_src[] =
+{\n" )
+
+foreach( inputFile ${inputFiles} )
+ # put the input file name into the output file
+ file( APPEND ${outputFile} "\n// ${inputFile}" )
+
+ # process the input file
+ file( READ ${inputFile} contents )
+
+ # remove /* */ comments
+ string( REGEX REPLACE "/\\*.*\\*/" "" contents "${contents}" )
+ # remove // comments
+ string( REGEX REPLACE "//[^\n]*" "" contents "${contents}" )
+ # remove whitespaces at the beginning of each line
+ string( REGEX REPLACE "\n([\t ])*" "\n" contents "${contents}" )
+ # remove unnecessary spaces
+ string( REGEX REPLACE " *([\\*/+&\\|,=<>\(\)]) *" "\\1" contents "${contents}" )
+ # remove empty lines & wrap every line in "" and add '\n' at the end of each line
+ string( REGEX REPLACE "\n+" "\\\\n\"\n\"" contents "${contents}" )
+ # remove unnecessary " & \n from the beginning and the end of contents
+ string( REGEX REPLACE "^\\\\n\"" "" contents "${contents}" )
+ string( REGEX REPLACE "\"$" "," contents "${contents}" )
+
+ file( APPEND ${outputFile} "${contents}" )
+endforeach( inputFile ${inputFiles} )
+
+# write footer
+file( APPEND ${outputFile} "};
+#endif /* SHADER_SRC_H */" )
+
diff --git a/CMakeModules/TokenList2DsnLexer.cmake b/CMakeModules/TokenList2DsnLexer.cmake
new file mode 100644
index 0000000..d11bc5c
--- /dev/null
+++ b/CMakeModules/TokenList2DsnLexer.cmake
@@ -0,0 +1,387 @@
+
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2010 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2010 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+#
+# This script converts a plain text file with a line feed separated list
+# of token names into the appropriate source and header files required by
+# the DSN lexer. See files "<base_source_path>/common/dsnlexer.cpp" and
+# "<base_source_path>/include/dsnlexer.h" for more information about how
+# the DSN lexer works. The token list file format requires a single token
+# per line. Tokens can only contain lower case letters, numbers, and
+# underscores. The first letter of each token must be a lower case letter.
+# Tokens must be unique. If any of the above criteria are not met, the
+# source and header files will not be generated and a build error will
+# occur.
+#
+# Valid tokens: a a1 foo_1 foo_bar2
+# Invalid tokens: 1 A _foo bar_ foO
+#
+# Invocation Parameters are: enum, inputFile, outCppFile, outHeaderFile
+#
+# enum - Required, namespace in which the enum T will be placed.
+# Keep it short because from outside the class you want a short enum name
+# like enum::T. Enums are contained in their own namespace to avoid
+# collisions on enum value names, a problem with C++ unless the enum
+# itself is in a separate namespace.
+#
+# inputFile - Required, name of the token list file, or "*.keywords" file.
+# Choose the basefilename carefully, it decides the class name
+# used in the generated *_lexer.h file.
+#
+# outCppFile - Optional, full path and file name of where to save the generated
+# cpp keywords file. If not defined, the output path is the same
+# path as the token list file path, with a file name of *_keywords.cpp
+#
+# outHeaderFile - Optional, full path and file name of where to save the generated
+# *.h lexfer file. If not defined, the output path is the same
+# path as the token list file path, with a file name of *_lexer.h
+#
+# Use the max_lexer() CMake function from functions.cmake for invocation convenience.
+
+
+#message( STATUS "TokenList2DsnLexer.cmake" ) # indicate we are running
+
+set( tokens "" )
+set( lineCount 0 )
+set( dsnErrorMsg "TokenList2DsnLexer.cmake failure:" )
+
+if( NOT EXISTS ${inputFile} )
+ message( FATAL_ERROR "${dsnErrorMsg} file ${inputFile} cannot be found." )
+endif()
+
+if( NOT DEFINED enum )
+ message( FATAL_ERROR "${dsnErrorMsg} missing \"enum\" processing ${inputFile}." )
+endif()
+
+get_filename_component( outputPath "${inputFile}" PATH )
+
+# the keywords filename without extension is important, it sets the classname into RESULT
+get_filename_component( result "${inputFile}" NAME_WE )
+string( TOUPPER "${result}" RESULT )
+
+set( LEXERCLASS "${RESULT}_LEXER" )
+set( PARSERCLASS "${RESULT}_PARSER" )
+
+#message( "enum:'${enum}' result:'${result}' outputPath:'${outputPath}' inputFile:'${inputFile}'" )
+
+if( NOT DEFINED outCppFile )
+ set( outCppFile "${outputPath}/${result}_keywords.cpp" )
+endif()
+
+if( NOT DEFINED outHeaderFile )
+ set( outHeaderFile "${outputPath}/${result}_lexer.h" )
+endif()
+
+# Create tag for generating header file.
+set( headerTag "${LEXERCLASS}_H_" )
+
+set( includeFileHeader
+"
+/* Do not modify this file it was automatically generated by the
+ * TokenList2DsnLexer CMake script.
+ */
+
+#ifndef ${headerTag}
+#define ${headerTag}
+
+#include <dsnlexer.h>
+
+/**
+ * C++ does not put enum _values_ in separate namespaces unless the enum itself
+ * is in a separate namespace. All the token enums must be in separate namespaces
+ * otherwise the C++ compiler will eventually complain if it sees more than one
+ * DSNLEXER in the same compilation unit, say by mutliple header file inclusion.
+ * Plus this also enables re-use of the same enum name T. A typedef can always be used
+ * to clarify which enum T is in play should that ever be a problem. This is
+ * unlikely since Parse() functions will usually only be exposed to one header
+ * file like this one. But if there is a problem, then use:
+ * typedef ${enum}::T T;
+ * within that problem area.
+ */
+namespace ${enum}
+{
+ /// enum T contains all this lexer's tokens.
+ enum T
+ {
+ // these first few are negative special ones for syntax, and are
+ // inherited from DSNLEXER.
+ T_NONE = DSN_NONE,
+ T_COMMENT = DSN_COMMENT,
+ T_STRING_QUOTE = DSN_STRING_QUOTE,
+ T_QUOTE_DEF = DSN_QUOTE_DEF,
+ T_DASH = DSN_DASH,
+ T_SYMBOL = DSN_SYMBOL,
+ T_NUMBER = DSN_NUMBER,
+ T_RIGHT = DSN_RIGHT, // right bracket: ')'
+ T_LEFT = DSN_LEFT, // left bracket: '('
+ T_STRING = DSN_STRING, // a quoted string, stripped of the quotes
+ T_EOF = DSN_EOF, // special case for end of file
+
+"
+)
+
+
+set( sourceFileHeader
+"
+/* Do not modify this file it was automatically generated by the
+ * TokenList2DsnLexer CMake script.
+ *
+ * Include this file in your lexer class to provide the keywords for
+ * your DSN lexer.
+ */
+
+#include <${result}_lexer.h>
+
+using namespace ${enum};
+
+#define TOKDEF(x) { #x, T_##x }
+
+const KEYWORD ${LEXERCLASS}::keywords[] = {
+"
+)
+
+file( STRINGS ${inputFile} lines NO_HEX_CONVERSION )
+
+foreach( line ${lines} )
+ math( EXPR lineCount "${lineCount} + 1" )
+
+ # strip any comment from # to end of line
+ string( REGEX REPLACE "#.*$" "" tmpToken "${line}" )
+ string( STRIP "${tmpToken}" token )
+
+ # Ignore empty lines.
+ if( NOT token STREQUAL "" ) # if token is "off" simple if( token) does not work
+ # Make sure token is valid.
+
+ #message( "token=${token}" )
+
+ string( REGEX MATCH "[a-z][_0-9a-z]*" validToken "${token}" )
+ #message( "validToken=${validToken}" )
+
+ if( validToken STREQUAL token )
+ list( APPEND tokens "${validToken}" )
+ else()
+ message( FATAL_ERROR
+ "Invalid token string \"${tmpToken}\" at line ${lineCount} in file "
+ "<${inputFile}>." )
+ endif()
+ endif()
+endforeach()
+
+list( SORT tokens )
+
+# Check for duplicates.
+list( LENGTH tokens tokensBefore )
+list( REMOVE_DUPLICATES tokens )
+list( LENGTH tokens tokensAfter )
+
+if( NOT ( tokensBefore EQUAL tokensAfter ) )
+ message( FATAL_ERROR "Duplicate tokens found in file <${inputFile}>." )
+endif()
+
+file( WRITE "${outHeaderFile}" "${includeFileHeader}" )
+file( WRITE "${outCppFile}" "${sourceFileHeader}" )
+
+set( lineCount 1 )
+
+foreach( token ${tokens} )
+ if( lineCount EQUAL 1 )
+ file( APPEND "${outHeaderFile}" " T_${token} = 0" )
+ else( lineCount EQUAL 1 )
+ file( APPEND "${outHeaderFile}" " T_${token}" )
+ endif( lineCount EQUAL 1 )
+
+ file(APPEND "${outCppFile}" " TOKDEF( ${token} )" )
+
+ if( lineCount EQUAL tokensAfter )
+ file( APPEND "${outHeaderFile}" "\n" )
+ file( APPEND "${outCppFile}" "\n" )
+ else( lineCount EQUAL tokensAfter )
+ file( APPEND "${outHeaderFile}" ",\n" )
+ file( APPEND "${outCppFile}" ",\n" )
+ endif( lineCount EQUAL tokensAfter )
+ math( EXPR lineCount "${lineCount} + 1" )
+endforeach()
+
+file( APPEND "${outHeaderFile}"
+" };
+} // namespace ${enum}
+
+
+/**
+ * Class ${LEXERCLASS}
+ * is an automatically generated class using the TokenList2DnsLexer.cmake
+ * technology, based on keywords provided by file:
+ * ${inputFile}
+ */
+class ${LEXERCLASS} : public DSNLEXER
+{
+ /// Auto generated lexer keywords table and length:
+ static const KEYWORD keywords[];
+ static const unsigned keyword_count;
+
+public:
+ /**
+ * Constructor ( const std::string&, const wxString& )
+ * @param aSExpression is (utf8) text possibly from the clipboard that you want to parse.
+ * @param aSource is a description of the origin of @a aSExpression, such as a filename.
+ * If left empty, then _(\"clipboard\") is used.
+ */
+ ${LEXERCLASS}( const std::string& aSExpression, const wxString& aSource = wxEmptyString ) :
+ DSNLEXER( keywords, keyword_count, aSExpression, aSource )
+ {
+ }
+
+ /**
+ * Constructor ( FILE* )
+ * takes @a aFile already opened for reading and @a aFilename as parameters.
+ * The opened file is assumed to be positioned at the beginning of the file
+ * for purposes of accurate line number reporting in error messages. The
+ * FILE is closed by this instance when its destructor is called.
+ * @param aFile is a FILE already opened for reading.
+ * @param aFilename is the name of the opened file, needed for error reporting.
+ */
+ ${LEXERCLASS}( FILE* aFile, const wxString& aFilename ) :
+ DSNLEXER( keywords, keyword_count, aFile, aFilename )
+ {
+ }
+
+ /**
+ * Constructor ( LINE_READER* )
+ * intializes a lexer and prepares to read from @a aLineReader which
+ * is assumed ready, and may be in use by other DSNLEXERs also. No ownership
+ * is taken of @a aLineReader. This enables it to be used by other lexers also.
+ * The transition between grammars in such a case, must happen on a text
+ * line boundary, not within the same line of text.
+ *
+ * @param aLineReader is any subclassed instance of LINE_READER, such as
+ * STRING_LINE_READER or FILE_LINE_READER. No ownership is taken of aLineReader.
+ */
+ ${LEXERCLASS}( LINE_READER* aLineReader ) :
+ DSNLEXER( keywords, keyword_count, aLineReader )
+ {
+ }
+
+ /**
+ * Function TokenName
+ * returns the name of the token in ASCII form.
+ */
+ static const char* TokenName( ${enum}::T aTok );
+
+ /**
+ * Function NextTok
+ * returns the next token found in the input file or T_EOF when reaching
+ * the end of file. Users should wrap this function to return an enum
+ * to aid in grammar debugging while running under a debugger, but leave
+ * this lower level function returning an int (so the enum does not collide
+ * with another usage).
+ * @return ${enum}::T - the type of token found next.
+ * @throw IO_ERROR - only if the LINE_READER throws it.
+ */
+ ${enum}::T NextTok() throw( IO_ERROR )
+ {
+ return (${enum}::T) DSNLEXER::NextTok();
+ }
+
+ /**
+ * Function NeedSYMBOL
+ * calls NextTok() and then verifies that the token read in
+ * satisfies bool IsSymbol().
+ * If not, an IO_ERROR is thrown.
+ * @return int - the actual token read in.
+ * @throw IO_ERROR, if the next token does not satisfy IsSymbol()
+ */
+ ${enum}::T NeedSYMBOL() throw( IO_ERROR )
+ {
+ return (${enum}::T) DSNLEXER::NeedSYMBOL();
+ }
+
+ /**
+ * Function NeedSYMBOLorNUMBER
+ * calls NextTok() and then verifies that the token read in
+ * satisfies bool IsSymbol() or tok==T_NUMBER.
+ * If not, an IO_ERROR is thrown.
+ * @return int - the actual token read in.
+ * @throw IO_ERROR, if the next token does not satisfy the above test
+ */
+ ${enum}::T NeedSYMBOLorNUMBER() throw( IO_ERROR )
+ {
+ return (${enum}::T) DSNLEXER::NeedSYMBOLorNUMBER();
+ }
+
+ /**
+ * Function CurTok
+ * returns whatever NextTok() returned the last time it was called.
+ */
+ ${enum}::T CurTok()
+ {
+ return (${enum}::T) DSNLEXER::CurTok();
+ }
+
+ /**
+ * Function PrevTok
+ * returns whatever NextTok() returned the 2nd to last time it was called.
+ */
+ ${enum}::T PrevTok()
+ {
+ return (${enum}::T) DSNLEXER::PrevTok();
+ }
+};
+
+// example usage
+
+/**
+ * Class ${LEXCLASS}_PARSER
+ * holds data and functions pertinent to parsing a S-expression file .
+ *
+class ${PARSERCLASS} : public ${LEXERCLASS}
+{
+
+};
+*/
+
+#endif // ${headerTag}
+"
+)
+
+file( APPEND "${outCppFile}"
+"};
+
+const unsigned ${LEXERCLASS}::keyword_count = unsigned( sizeof( ${LEXERCLASS}::keywords )/sizeof( ${LEXERCLASS}::keywords[0] ) );
+
+
+const char* ${LEXERCLASS}::TokenName( T aTok )
+{
+ const char* ret;
+
+ if( aTok < 0 )
+ ret = DSNLEXER::Syntax( aTok );
+ else if( (unsigned) aTok < keyword_count )
+ ret = keywords[aTok].name;
+ else
+ ret = \"token too big\";
+
+ return ret;
+}
+"
+)
diff --git a/CMakeModules/UsewxWidgets.cmake b/CMakeModules/UsewxWidgets.cmake
new file mode 100644
index 0000000..9ecfff0
--- /dev/null
+++ b/CMakeModules/UsewxWidgets.cmake
@@ -0,0 +1,89 @@
+# - Convenience include for using wxWidgets library.
+# Determines if wxWidgets was FOUND and sets the appropriate libs, incdirs,
+# flags, etc. INCLUDE_DIRECTORIES and LINK_DIRECTORIES are called.
+#
+# USAGE
+# # Note that for MinGW users the order of libs is important!
+# FIND_PACKAGE(wxWidgets REQUIRED net gl core base)
+# INCLUDE(${wxWidgets_USE_FILE})
+# # and for each of your dependant executable/library targets:
+# TARGET_LINK_LIBRARIES(<YourTarget> ${wxWidgets_LIBRARIES})
+#
+# DEPRECATED
+# LINK_LIBRARIES is not called in favor of adding dependencies per target.
+#
+# AUTHOR
+# Jan Woetzel <jw -at- mip.informatik.uni-kiel.de>
+
+#=============================================================================
+# Copyright 2004-2009 Kitware, Inc.
+# Copyright 2006 Jan Woetzel
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# debug message and logging.
+# comment these out for distribution
+IF (NOT LOGFILE )
+ # SET(LOGFILE "${PROJECT_BINARY_DIR}/CMakeOutput.log")
+ENDIF (NOT LOGFILE )
+MACRO(MSG _MSG)
+ # FILE(APPEND ${LOGFILE} "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}\n")
+ # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
+ENDMACRO(MSG)
+
+
+MSG("wxWidgets_FOUND=${wxWidgets_FOUND}")
+IF (wxWidgets_FOUND)
+ IF (wxWidgets_INCLUDE_DIRS)
+ IF(wxWidgets_INCLUDE_DIRS_NO_SYSTEM)
+ INCLUDE_DIRECTORIES(${wxWidgets_INCLUDE_DIRS})
+ ELSE(wxWidgets_INCLUDE_DIRS_NO_SYSTEM)
+ INCLUDE_DIRECTORIES(SYSTEM ${wxWidgets_INCLUDE_DIRS})
+ ENDIF(wxWidgets_INCLUDE_DIRS_NO_SYSTEM)
+ MSG("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
+ ENDIF(wxWidgets_INCLUDE_DIRS)
+
+ IF (wxWidgets_LIBRARY_DIRS)
+ LINK_DIRECTORIES(${wxWidgets_LIBRARY_DIRS})
+ MSG("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")
+ ENDIF(wxWidgets_LIBRARY_DIRS)
+
+ IF (wxWidgets_DEFINITIONS)
+ SET_PROPERTY(DIRECTORY APPEND
+ PROPERTY COMPILE_DEFINITIONS ${wxWidgets_DEFINITIONS})
+ MSG("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
+ ENDIF(wxWidgets_DEFINITIONS)
+
+ IF (wxWidgets_DEFINITIONS_DEBUG)
+ SET_PROPERTY(DIRECTORY APPEND
+ PROPERTY COMPILE_DEFINITIONS_DEBUG ${wxWidgets_DEFINITIONS_DEBUG})
+ MSG("wxWidgets_DEFINITIONS_DEBUG=${wxWidgets_DEFINITIONS_DEBUG}")
+ ENDIF(wxWidgets_DEFINITIONS_DEBUG)
+
+ IF (wxWidgets_CXX_FLAGS)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${wxWidgets_CXX_FLAGS}")
+ MSG("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
+ ENDIF(wxWidgets_CXX_FLAGS)
+
+ # DEPRECATED JW
+ # just for backward compatibility: add deps to all targets
+ # library projects better use advanced FIND_PACKAGE(wxWidgets) directly.
+ #IF(wxWidgets_LIBRARIES)
+ # LINK_LIBRARIES(${wxWidgets_LIBRARIES})
+ # # BUG: str too long: MSG("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
+ # IF(LOGFILE)
+ # FILE(APPEND ${LOGFILE} "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${wxWidgets_LIBRARIES}\n")
+ # ENDIF(LOGFILE)
+ #ENDIF(wxWidgets_LIBRARIES)
+
+ELSE (wxWidgets_FOUND)
+ MESSAGE("wxWidgets requested but not found.")
+ENDIF(wxWidgets_FOUND)
diff --git a/CMakeModules/WriteVersionHeader.cmake b/CMakeModules/WriteVersionHeader.cmake
new file mode 100644
index 0000000..013a36a
--- /dev/null
+++ b/CMakeModules/WriteVersionHeader.cmake
@@ -0,0 +1,88 @@
+#
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2015 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2015-2016 KiCad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+# Automagically create version header file if the version string was
+# not defined during the build configuration. If
+# CreateGitVersionHeader cannot determine the current repo version, a
+# version.h file is still created with KICAD_VERSION set to "no-vcs-found".
+include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
+
+# Attempt to detect if we have a git repo and set the version string if
+# the version wasn't set to something other than the default value in
+# KiCadVersion.cmake.
+if( KICAD_VERSION STREQUAL "no-vcs-found" AND EXISTS "${SRC_PATH}/.git" )
+ message( STATUS "Using Git to determine build version string." )
+ include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
+ create_git_version_header( ${SRC_PATH} )
+endif()
+
+# $KICAD_VERSION_FULL will always be set to something. Even if it is "no-vcs-found".
+set( KICAD_VERSION_FULL "${KICAD_VERSION}" )
+
+# Optional branch name detected by git or configuration defined option.
+if( KICAD_BRANCH_NAME )
+ set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_BRANCH_NAME}" )
+endif()
+
+# Optional user version information defined at configuration.
+if( KICAD_VERSION_EXTRA )
+ set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_VERSION_EXTRA}" )
+endif()
+
+set( _wvh_new_version_text
+"/* Do not modify this file, it was automatically generated by CMake. */
+
+/*
+ * Define the KiCad build version string.
+ */
+#ifndef __KICAD_VERSION_H__
+#define __KICAD_VERSION_H__
+
+#define KICAD_VERSION_FULL \"${KICAD_VERSION_FULL}\"
+
+#endif /* __KICAD_VERSION_H__ */
+" )
+
+set( _wvh_write_version_file ON )
+
+# Only write the header if it has changed, to avoid rebuilds
+if( EXISTS ${OUTPUT_FILE} )
+ file( READ ${OUTPUT_FILE} _wvh_old_version_text )
+ if( _wvh_old_version_text STREQUAL _wvh_new_version_text )
+ message( STATUS "Not updating ${OUTPUT_FILE}" )
+ set( _wvh_write_version_file OFF )
+ endif()
+endif()
+
+if( _wvh_write_version_file )
+ message( STATUS "Writing ${OUTPUT_FILE} file with version: ${KICAD_VERSION_FULL}" )
+
+ file( WRITE ${OUTPUT_FILE} ${_wvh_new_version_text} )
+
+endif()
+
+# There should always be a valid version.h file. Otherwise, the build will fail.
+if( NOT EXISTS ${OUTPUT_FILE} )
+ message( FATAL_ERROR "Configuration failed to write file ${OUTPUT_FILE}." )
+endif()
diff --git a/CMakeModules/cmake_uninstall.cmake.in b/CMakeModules/cmake_uninstall.cmake.in
new file mode 100644
index 0000000..fdb4804
--- /dev/null
+++ b/CMakeModules/cmake_uninstall.cmake.in
@@ -0,0 +1,22 @@
+if( NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" )
+ message( FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"" )
+endif()
+
+file( READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files )
+string( REGEX REPLACE "\n" ";" files "${files}" )
+
+foreach( file ${files} )
+ message( STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"" )
+ if( EXISTS "$ENV{DESTDIR}${file}" )
+ exec_program(
+ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+ OUTPUT_VARIABLE rm_out
+ RETURN_VALUE rm_retval
+ )
+ if( NOT "${rm_retval}" STREQUAL "0" )
+ message( STATUS "Problem when removing \"$ENV{DESTDIR}${file}\"" )
+ endif()
+ else()
+ message( STATUS "File \"$ENV{DESTDIR}${file}\" does not exist." )
+ endif()
+endforeach()
diff --git a/CMakeModules/config.h.cmake b/CMakeModules/config.h.cmake
new file mode 100644
index 0000000..3b4e121
--- /dev/null
+++ b/CMakeModules/config.h.cmake
@@ -0,0 +1,80 @@
+// Do not modify this file, it was automatically generated by CMake.
+
+#ifndef CONFIG_H_
+#define CONFIG_H_
+
+#cmakedefine HAVE_STRCASECMP
+
+#cmakedefine HAVE_STRNCASECMP
+
+#cmakedefine HAVE_STRTOKR // spelled odly to differ from wx's similar test
+
+// Handle platform differences in math.h
+#cmakedefine HAVE_MATH_H
+
+// Handle platform differences in C++ cmath.
+#cmakedefine HAVE_CXX_CMATH
+
+#cmakedefine HAVE_CMATH_ASINH
+
+#cmakedefine HAVE_CMATH_ACOSH
+
+#cmakedefine HAVE_CMATH_ATANH
+
+#cmakedefine HAVE_CMATH_ISINF
+
+#cmakedefine HAVE_CLOCK_GETTIME
+
+#cmakedefine HAVE_GETTIMEOFDAY_FUNC
+
+#cmakedefine MALLOC_IN_STDLIB_H
+
+#if !defined( MALLOC_IN_STDLIB_H )
+#include <malloc.h>
+#endif
+
+#cmakedefine HAVE_ISO646_H
+
+#if defined( HAVE_ISO646_H )
+#include <iso646.h>
+#endif
+
+#if defined( HAVE_STRCASECMP )
+#define stricmp strcasecmp
+#endif
+
+#if defined( HAVE_STRNCASECMP )
+#define strnicmp strncasecmp
+#endif
+
+// Use Posix getc_unlocked() instead of getc() when it's available.
+#cmakedefine HAVE_FGETC_NOLOCK
+
+// Warning!!! Using wxGraphicContext for rendering is experimental.
+#cmakedefine USE_WX_GRAPHICS_CONTEXT 1
+
+#cmakedefine USE_IMAGES_IN_MENUS 1
+
+/// The legacy file format revision of the *.brd file created by this build
+#define LEGACY_BOARD_FILE_VERSION 2
+
+/// The install prefix defined during CMake configuration or fall back to CMAKE_INSTALL_PREFIX.
+#define DEFAULT_INSTALL_PATH "@DEFAULT_INSTALL_PATH@"
+
+/// The wxPython version found during configuration.
+#if defined( KICAD_SCRIPTING_WXPYTHON )
+#define WXPYTHON_VERSION "@WXPYTHON_VERSION@"
+#endif
+
+/// When defined, build the GITHUB_PLUGIN for pcbnew.
+#cmakedefine BUILD_GITHUB_PLUGIN
+
+/// When defined, use KIWAY and KIFACE DSOs
+#cmakedefine USE_KIWAY_DLLS
+
+/// A file extension with a leading '.' is a suffix, and this one is used on
+/// top level program modules which implement the KIFACE.
+#define KIFACE_SUFFIX wxT( "@KIFACE_SUFFIX@" )
+#define KIFACE_PREFIX wxT( "@KIFACE_PREFIX@" )
+
+#endif // CONFIG_H_
diff --git a/CMakeModules/download_boost.cmake b/CMakeModules/download_boost.cmake
new file mode 100644
index 0000000..c29888c
--- /dev/null
+++ b/CMakeModules/download_boost.cmake
@@ -0,0 +1,322 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+
+
+# Download a particular boost version, and patch it [and build it if BUILD_GITHUB_PLUGIN].
+# Assumes include( ExternalProject ) was done inline previous to this file
+# and that set( DOWNLOAD_DIR ... ) was set in a higher context.
+
+
+#-----<configure>----------------------------------------------------------------
+
+set( BOOST_RELEASE 1.54.0 )
+set( BOOST_MD5 15cb8c0803064faef0c4ddf5bc5ca279 ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( BOOST_ROOT "${PROJECT_SOURCE_DIR}/boost_root" )
+
+
+# Space separated list which indicates the subset of boost libraries to compile.
+# Chosen libraries are based on AVHTTP requirements, and possibly
+# unit_test_framework for its own worth.
+# tool_manager.cpp -> coroutine -> context (_jump_fcontext) (on OSX)
+
+set( BOOST_LIBS_BUILT
+ context
+ #coroutine
+ date_time
+ #exception
+ filesystem
+ iostreams
+ locale
+ program_options
+ regex
+ #signals
+ system
+ thread
+ #unit_test_framework
+ )
+#-----</configure>---------------------------------------------------------------
+
+if( NOT BZIP2_FOUND )
+ find_package( BZip2 REQUIRED )
+endif()
+
+string( REGEX REPLACE "\\." "_" BOOST_VERS "${BOOST_RELEASE}" )
+set( PREFIX ${DOWNLOAD_DIR}/boost_${BOOST_VERS} )
+
+# <SOURCE_DIR> = ${PREFIX}/src/boost
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+# path to the boost headers in the repo.
+# repo = "${headers_src}/../.bzr" = "<SOURCE_DIR>/.bzr"
+set( headers_src "${PREFIX}/src/boost/boost" )
+
+
+function( set_boost_lib_names libs output )
+ foreach( lib ${libs} )
+ set( fullpath_lib "${BOOST_ROOT}/lib/libboost_${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}" )
+ list( APPEND results ${fullpath_lib} )
+ endforeach()
+ # set the results into variable represented by output into caller's scope
+ set( ${output} ${results} PARENT_SCOPE )
+endfunction()
+
+
+# (BTW "test" yields "unit_test_framework" when passed to bootstrap.sh ).
+#message( STATUS "BOOST_LIBS_BUILT:${BOOST_LIBS_BUILT}" )
+string( REPLACE "unit_test_framework" "test" boost_libs_list "${BOOST_LIBS_BUILT}" )
+#message( STATUS "REPLACE libs_csv:${boost_libs_list}" )
+
+# Default Toolset
+set( BOOST_TOOLSET "toolset=gcc" )
+
+if( KICAD_BUILD_STATIC OR APPLE )
+ set( BOOST_LINKTYPE "link=static" )
+else()
+ unset( BOOST_LINKTYPE )
+endif()
+
+
+find_program(patch_bin NAMES patch patch.exe)
+
+if( "${patch_bin}" STREQUAL "patch_bin-NOTFOUND" )
+ set( PATCH_STR_CMD ${PATCH_STR_CMD} )
+else()
+ set( PATCH_STR_CMD ${patch_bin} -p0 -i )
+endif()
+
+
+
+if( MINGW AND NOT CMAKE_HOST_UNIX ) # building for MINGW on windows not UNIX
+ if( MSYS )
+ # The Boost system does not build properly on MSYS using bootstrap.sh. Running
+ # bootstrap.bat with cmd.exe does. It's ugly but it works. At least for Boost
+ # version 1.54.
+ set( bootstrap cmd.exe /c "bootstrap.bat mingw" )
+ else()
+ set( bootstrap ./bootstrap.bat mingw )
+ endif()
+
+ foreach( lib ${boost_libs_list} )
+ set( b2_libs ${b2_libs} --with-${lib} )
+ endforeach()
+ unset( BOOST_CFLAGS )
+
+else()
+ string( REGEX REPLACE "\\;" "," libs_csv "${boost_libs_list}" )
+ #message( STATUS "libs_csv:${libs_csv}" )
+
+ set( bootstrap ./bootstrap.sh --with-libraries=${libs_csv} )
+ # pass to *both* C and C++ compilers
+ set( BOOST_CFLAGS "cflags=${PIC_FLAG}" )
+ set( BOOST_CXXFLAGS "cxxflags=${PIC_FLAG}" )
+ set( BOOST_INCLUDE "${BOOST_ROOT}/include" )
+ unset( b2_libs )
+endif()
+
+
+if( APPLE )
+ set( BOOST_CXXFLAGS "cxxflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -fno-common" )
+ set( BOOST_LINKFLAGS "linkflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -fno-common" )
+ set( BOOST_TOOLSET "toolset=darwin" )
+
+ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
+ set(BOOST_CXXFLAGS "${BOOST_CXXFLAGS} -fno-lto" )
+ set(BOOST_LINKFLAGS "${BOOST_LINKFLAGS} -fno-lto" )
+ endif()
+
+ if( CMAKE_OSX_ARCHITECTURES )
+
+ if( (CMAKE_OSX_ARCHITECTURES MATCHES "386" OR CMAKE_OSX_ARCHITECTURES MATCHES "ppc ") AND
+ (CMAKE_OSX_ARCHITECTURES MATCHES "64"))
+ message( "-- BOOST found 32/64 Address Model" )
+
+ set( BOOST_ADDRESSMODEL "address-model=32_64" )
+ endif()
+
+ if( (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "386") AND
+ (CMAKE_OSX_ARCHITECTURES MATCHES "ppc"))
+ message("-- BOOST found ppc/x86 Architecture")
+
+ set(BOOST_ARCHITECTURE "architecture=combined")
+ elseif( (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "386") )
+ message("-- BOOST found x86 Architecture")
+
+ set(BOOST_ARCHITECTURE "architecture=x86")
+ elseif( (CMAKE_OSX_ARCHITECTURES MATCHES "ppc64" OR CMAKE_OSX_ARCHITECTURES MATCHES "ppc") )
+ message("-- BOOST found ppc Architecture")
+
+ set(BOOST_ARCHITECTURE "architecture=ppc")
+ endif()
+
+ set( BOOST_CFLAGS "${BOOST_CFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
+ set( BOOST_CXXFLAGS "${BOOST_CXXFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
+ set( BOOST_LINKFLAGS "${BOOST_LINKFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
+ endif()
+endif()
+
+ExternalProject_Add( boost
+ PREFIX "${PREFIX}"
+
+ URL http://downloads.sourceforge.net/project/boost/boost/${BOOST_RELEASE}/boost_${BOOST_VERS}.tar.bz2
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ TIMEOUT 1200 # 20 minutes
+ URL_MD5 ${BOOST_MD5}
+ # If download fails, then enable "LOG_DOWNLOAD ON" and try again.
+ # Upon a second failure with logging enabled, then look at these logs:
+ # <src>/.downloads-by-cmake$ less /tmp/product/.downloads-by-cmake/boost_1_54_0/src/boost-stamp/boost-download-out.log
+ # <src>/.downloads-by-cmake$ less /tmp/product/.downloads-by-cmake/boost_1_54_0/src/boost-stamp/boost-download-err.log
+ # If out.log does not show 100%, then try increasing TIMEOUT even more, or download the URL manually and put it
+ # into <src>/.downloads-by-cmake/ dir.
+ # LOG_DOWNLOAD ON
+
+ INSTALL_DIR "${BOOST_ROOT}"
+
+ # The patch command executes with the working directory set to <SOURCE_DIR>
+ # Revert the branch to pristine before applying patch sets as bzr patch
+ # fails when applying a patch to the branch twice and doesn't have a switch
+ # to ignore previously applied patches
+ PATCH_COMMAND bzr revert
+ # bzr revert is insufficient to remove "added" files:
+ COMMAND bzr clean-tree -q --force
+
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_minkowski.patch"
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_cstdint.patch"
+
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86.patch" #https://svn.boost.org/trac/boost/ticket/8266
+ # tell bzr about "added" files by last patch:
+ COMMAND bzr add libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
+ COMMAND bzr add libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
+
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86_build.patch" #https://svn.boost.org/trac/boost/ticket/8266
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_older_openssl.patch" #https://svn.boost.org/trac/boost/ticket/9273
+
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_mingw.patch" #https://svn.boost.org/trac/boost/ticket/7262
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_mingw64_interlocked.patch"
+
+ # tell bzr about "added" files by last patch:
+ COMMAND bzr add libs/context/src/asm/make_i386_ms_pe_gas.S
+ COMMAND bzr add libs/context/src/asm/jump_i386_ms_pe_gas.S
+ COMMAND bzr add libs/context/src/asm/make_x86_64_ms_pe_gas.S
+ COMMAND bzr add libs/context/src/asm/jump_x86_64_ms_pe_gas.S
+
+ COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/patch_macosx_context_ppc_v2.patch" #https://svn.boost.org/trac/boost/ticket/8266
+ COMMAND bzr add libs/context/build/Jamfile.v2
+ COMMAND bzr add libs/context/build/architecture.jam
+ COMMAND bzr add libs/context/src/asm/jump_combined_sysv_macho_gas.S
+ COMMAND bzr add libs/context/src/asm/jump_ppc32_sysv_macho_gas.S
+ COMMAND bzr add libs/context/src/asm/jump_ppc64_sysv_macho_gas.S
+ COMMAND bzr add libs/context/src/asm/make_combined_sysv_macho_gas.S
+ COMMAND bzr add libs/context/src/asm/make_ppc32_sysv_macho_gas.S
+ COMMAND bzr add libs/context/src/asm/make_ppc64_sysv_macho_gas.S
+
+ # [Mis-]use this step to erase all the boost headers and libraries before
+ # replacing them below.
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${BOOST_ROOT}"
+
+ BINARY_DIR "${PREFIX}/src/boost/"
+ CONFIGURE_COMMAND ${bootstrap}
+
+ BUILD_COMMAND ./b2
+ variant=release
+ threading=multi
+ ${BOOST_CFLAGS}
+ ${BOOST_TOOLSET}
+ ${BOOST_CXXFLAGS}
+ ${BOOST_LINKFLAGS}
+ ${BOOST_ADDRESSMODEL}
+ ${BOOST_ARCHITECTURE}
+ ${b2_libs}
+ ${BOOST_LINKTYPE}
+ --prefix=<INSTALL_DIR>
+ install
+
+ INSTALL_COMMAND ""
+ )
+
+if( MINGW )
+ execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion
+ OUTPUT_VARIABLE GCC_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE )
+
+ string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.[0-9]+.*" "\\1\\2" BOOST_GCC_VERSION ${GCC_VERSION} )
+ #message( STATUS "BOOST_GCC_VERSION: ${BOOST_GCC_VERSION}" )
+
+ string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9])" "\\1_\\2" BOOST_LIB_VERSION ${BOOST_RELEASE} )
+ #message( STATUS "BOOST_LIB_VERSION: ${BOOST_LIB_VERSION}" )
+
+ # adjust the names of the libraries to suit the build. There's no
+ # symbolic links provided on the MinGW build to allow us to use
+ # generic names for the libs
+ foreach( lib ${BOOST_LIBS_BUILT} )
+ set( mingw_boost_libs ${mingw_boost_libs} ${lib}-mgw${BOOST_GCC_VERSION}-mt-${BOOST_LIB_VERSION} )
+ endforeach()
+
+ set( BOOST_LIBS_BUILT ${mingw_boost_libs} )
+ set( BOOST_INCLUDE "${BOOST_ROOT}/include/boost-${BOOST_LIB_VERSION}" )
+ unset( mingw_boost_libs )
+endif()
+
+set( boost_libs "" )
+set_boost_lib_names( "${BOOST_LIBS_BUILT}" boost_libs )
+
+set( Boost_LIBRARIES ${boost_libs} )
+set( Boost_INCLUDE_DIR "${BOOST_INCLUDE}" )
+
+mark_as_advanced( Boost_LIBRARIES Boost_INCLUDE_DIR )
+
+#message( STATUS "BOOST_ROOT:${BOOST_ROOT} BOOST_LIBRARIES:${BOOST_LIBRARIES}" )
+#message( STATUS "Boost_INCLUDE_DIR: ${Boost_INCLUDE_DIR}" )
+
+
+
+ExternalProject_Add_Step( boost bzr_commit_boost
+ COMMAND bzr ci -q -m pristine <SOURCE_DIR>
+ COMMENT "committing pristine boost files to 'boost scratch repo'"
+ DEPENDERS patch
+ )
+
+
+ExternalProject_Add_Step( boost bzr_add_boost
+ # add only the headers to the scratch repo, repo = "../.bzr" from ${headers_src}
+ COMMAND bzr add -q ${PREFIX}/src/boost
+ COMMENT "adding pristine boost files to 'boost scratch repo'"
+ DEPENDERS bzr_commit_boost
+ )
+
+
+ExternalProject_Add_Step( boost bzr_init_boost
+ COMMAND bzr init -q <SOURCE_DIR>
+ #creates a .bzrignore file in boost root dir, to avoid copying useless files
+ #moreover these files have a very very long name, and sometimes
+ #have a too long full file name to be handled by DOS commands
+ COMMAND echo "*.htm*" > ${PREFIX}/src/boost/.bzrignore
+ COMMENT "creating 'boost scratch repo' specifically for boost to track boost patches"
+ DEPENDERS bzr_add_boost
+ DEPENDEES download
+ )
+
diff --git a/CMakeModules/download_cairo.cmake b/CMakeModules/download_cairo.cmake
new file mode 100644
index 0000000..2d8b30e
--- /dev/null
+++ b/CMakeModules/download_cairo.cmake
@@ -0,0 +1,109 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds CAIRO
+
+#-----<configure>----------------------------------------------------------------
+
+set( CAIRO_RELEASE 1.12.0 )
+set( CAIRO_MD5 e6c85575ba7094f88b637bdfd835a751 ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( CAIRO_ROOT "${PROJECT_SOURCE_DIR}/cairo_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+if( NOT BZIP2_FOUND )
+ find_package( BZip2 REQUIRED )
+endif()
+
+set( PREFIX ${DOWNLOAD_DIR}/cairo )
+
+if ( KICAD_BUILD_STATIC )
+ set( CAIRO_BUILDTYPE --disable-shared )
+endif( KICAD_BUILD_STATIC )
+
+
+if (APPLE)
+
+ set( CAIRO_CFLAGS "CFLAGS=" )
+ set( CAIRO_LDFLAGS "LDFLAGS=-framework CoreServices -framework Cocoa" )
+ set( CAIRO_OPTS --enable-ft=no )
+
+ if( CMAKE_OSX_ARCHITECTURES )
+ set( CAIRO_CFLAGS "${CAIRO_CFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
+ set( CAIRO_LDFLAGS "${CAIRO_LDFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}" )
+ endif( CMAKE_OSX_ARCHITECTURES )
+
+ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
+ set(CAIRO_CFLAGS "${CAIRO_CFLAGS} -fno-lto" )
+ endif()
+
+ if( CMAKE_OSX_SYSROOT )
+ #set( CAIRO_CFLAGS "${CAIRO_CFLAGS} -isysroot ${CMAKE_OSX_SYSROOT}")
+ set( CAIRO_LDFLAGS "${CAIRO_LDFLAGS} -isysroot ${CMAKE_OSX_SYSROOT}")
+ endif( CMAKE_OSX_SYSROOT)
+
+endif(APPLE)
+
+# <SOURCE_DIR> = ${PREFIX}/src/glew
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( cairo
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://cairographics.org/releases/cairo-${CAIRO_RELEASE}.tar.gz
+ URL_MD5 ${CAIRO_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ DEPENDS pkgconfig pixman libpng
+
+ BUILD_IN_SOURCE 1
+ #SOURCE_DIR "${PREFIX}"
+ #PATCH_COMMAND ""
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${CAIRO_ROOT}"
+
+ CONFIGURE_COMMAND ./configure --prefix=${CAIRO_ROOT} --enable-static ${CAIRO_BUILDTYPE}
+ PKG_CONFIG=${PROJECT_SOURCE_DIR}/pkgconfig_root/bin/pkg-config
+ PKG_CONFIG_PATH=${PROJECT_SOURCE_DIR}/pixman_root/lib/pkgconfig:${PROJECT_SOURCE_DIR}/libpng_root/lib/pkgconfig
+ --enable-png=yes --enable-svg=yes
+ --disable-silent-rules --disable-dependency-tracking
+ ${CAIRO_CFLAGS}
+ ${CAIRO_LDFLAGS}
+ ${CAIRO_OPTS}
+
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND $(MAKE)
+
+ INSTALL_DIR "${CAIRO_ROOT}"
+ INSTALL_COMMAND $(MAKE) install
+ )
+
+# match these with whatever FindCairo.cmake sets
+# Dick i'vent set it because /lib and /lib64 issue in non multiarch binaries OSs
+#set( CAIRO_FOUND true )
+set( CAIRO_INCLUDE_DIR ${CAIRO_ROOT}/include )
+set( CAIRO_LIBRARIES ${CAIRO_ROOT}/lib )
diff --git a/CMakeModules/download_glew.cmake b/CMakeModules/download_glew.cmake
new file mode 100644
index 0000000..1c7d690
--- /dev/null
+++ b/CMakeModules/download_glew.cmake
@@ -0,0 +1,89 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds GLEW
+
+#-----<configure>----------------------------------------------------------------
+
+set( GLEW_RELEASE 1.10.0 )
+set( GLEW_MD5 2f09e5e6cb1b9f3611bcac79bc9c2d5d ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( GLEW_ROOT "${PROJECT_SOURCE_DIR}/glew_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+if( NOT BZIP2_FOUND )
+ find_package( BZip2 REQUIRED )
+endif()
+
+set( PREFIX ${DOWNLOAD_DIR}/glew )
+
+if (APPLE)
+ if( CMAKE_OSX_ARCHITECTURES )
+ set( GLEW_CFLAGS "CFLAGS.EXTRA=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ set( GLEW_LDFLAGS "LDFLAGS.EXTRA=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ set( GLEW_STRIP "STRIP=")
+ endif( CMAKE_OSX_ARCHITECTURES )
+endif(APPLE)
+
+# <SOURCE_DIR> = ${PREFIX}/src/glew
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( glew
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://sourceforge.net/projects/glew/files/glew/1.10.0/glew-${GLEW_RELEASE}.tgz
+ URL_MD5 ${GLEW_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ #SOURCE_DIR "${PREFIX}"
+ BUILD_IN_SOURCE 1
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${GLEW_ROOT}"
+
+ #PATCH_COMMAND "true"
+ CONFIGURE_COMMAND ""
+
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND $(MAKE) ${GLEW_CFLAGS} ${GLEW_LDFLAGS} ${GLEW_STRIP}
+
+ INSTALL_DIR "${GLEW_ROOT}"
+ INSTALL_COMMAND $(MAKE) GLEW_DEST="${GLEW_ROOT}" install
+ )
+
+#
+# Optional Steps
+#
+
+if( APPLE )
+# On OSX is needed to run ranlib to make .a indexes for all platforms
+ExternalProject_Add_Step( glew glew_osx_ranlib
+ COMMAND ranlib "${GLEW_ROOT}/lib/libGLEW.a"
+ COMMENT "ranlib ${GLEW_ROOT}/lib/libGLEW.a - Needed on OSX only"
+ DEPENDEES install
+ )
+endif()
diff --git a/CMakeModules/download_libpng.cmake b/CMakeModules/download_libpng.cmake
new file mode 100644
index 0000000..35de835
--- /dev/null
+++ b/CMakeModules/download_libpng.cmake
@@ -0,0 +1,76 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds LIBPNG
+
+#-----<configure>----------------------------------------------------------------
+
+set( LIBPNG_RELEASE 1.4.12 )
+set( LIBPNG_MD5 849b14d88e1240a1b9f2cb39dd39701e ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( LIBPNG_ROOT "${PROJECT_SOURCE_DIR}/libpng_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+find_package( BZip2 REQUIRED )
+
+set( PREFIX ${DOWNLOAD_DIR}/libpng )
+
+if (APPLE)
+ if( CMAKE_OSX_ARCHITECTURES )
+ SET( LIBPNG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES}")
+ endif( CMAKE_OSX_ARCHITECTURES )
+endif(APPLE)
+
+if (KICAD_BUILD_STATIC)
+ set(LIBPNG_OPTS --enable-static --disable-shared)
+else()
+ set(LIBPNG_OPTS --enable-static --enable-shared)
+endif(KICAD_BUILD_STATIC)
+
+# <SOURCE_DIR> = ${PREFIX}/src/glew
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( libpng
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://sourceforge.net/projects/libpng/files/libpng14/${LIBPNG_RELEASE}/libpng-${LIBPNG_RELEASE}.tar.bz2
+ URL_MD5 ${LIBPNG_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ #SOURCE_DIR "${PREFIX}"
+ BUILD_IN_SOURCE 1
+
+ #PATCH_COMMAND "true"
+ CONFIGURE_COMMAND ./configure --prefix=${LIBPNG_ROOT} ${LIBPNG_OPTS} ${LIBPNG_CFLAGS} --disable-dependency-tracking
+ #BINARY_DIR "${PREFIX}"
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBPNG_ROOT}"
+
+ BUILD_COMMAND $(MAKE)
+
+ INSTALL_DIR "${LIBPNG_ROOT}"
+ INSTALL_COMMAND $(MAKE) install
+ )
diff --git a/CMakeModules/download_openssl.cmake b/CMakeModules/download_openssl.cmake
new file mode 100644
index 0000000..6ab8fc7
--- /dev/null
+++ b/CMakeModules/download_openssl.cmake
@@ -0,0 +1,127 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+
+
+# Download OPENSSL and install into ${PREFIX}, typically in our KiCad source tree.
+# Assumes include( ExternalProject ) was done inline previous to this file
+# and that set( DOWNLOAD_DIR ... ) was set in a higher context.
+
+#-----<configure>-------------------------------------------------------------------------------------
+
+set( OPENSSL_RELEASE "1.0.1e" )
+set( OPENSSL_MD5 08bec482fe1c4795e819bfcfcb9647b9 ) # re-calc on every RELEASE change
+
+#-----</configure>-----------------------------------------------------------------------------------
+
+set( PREFIX ${DOWNLOAD_DIR}/openssl-${OPENSSL_RELEASE} )
+
+# CMake barfs if we pass in an empty CMAKE_TOOLCHAIN_FILE, so we only set it up
+# if it has a non-empty value
+unset( TOOLCHAIN )
+if( CMAKE_TOOLCHAIN_FILE )
+ set( TOOLCHAIN "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" )
+endif()
+
+FIND_PROGRAM (patch_bin NAMES patch.exe patch)
+
+if( "${patch_bin}" STREQUAL "patch_bin-NOTFOUND" )
+ set( PATCH_STR_CMD bzr patch -p0 )
+else()
+ set( PATCH_STR_CMD ${patch_bin} -p0 -i )
+endif()
+
+ExternalProject_Add(
+ openssl
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${PREFIX}
+ TIMEOUT 60
+ URL http://launchpad.net/openssl-cmake/1.0.1e/1.0.1e-1/+download/openssl-cmake-1.0.1e-src.tar.gz
+ URL_MD5 ${OPENSSL_MD5}
+
+ # mingw uses msvcrt.dll's printf() which cannot handle %zd, so having
+ # BIO_snprintf() reference printf()'s formating attributes is a bug, since
+ # BIO_snprintf() does its own formatting and is different from msvcrt's printf().
+
+ # This one would be easier if Windows folks could be asked to install "patch.exe"
+ # PATCH_COMMAND patch -p0 < ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
+
+ # This one requires the bzr commit below, since bzr patch only knows a working tree.
+
+ # Revert the branch to pristine before applying patch sets as bzr patch
+ # fails when applying a patch to the branch twice and doesn't have a switch
+ # to ignore previously applied patches
+ PATCH_COMMAND bzr revert
+ # PATCH_COMMAND continuation (any *_COMMAND here can be continued with COMMAND):
+ COMMAND ${PATCH_STR_CMD} ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
+
+ CONFIGURE_COMMAND
+ ${CMAKE_COMMAND}
+ -G ${CMAKE_GENERATOR}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ -DBUILD_SHARED_LIBS=ON
+ ${TOOLCHAIN}
+ <SOURCE_DIR>
+
+ BUILD_IN_SOURCE 1
+ BUILD_COMMAND ${CMAKE_MAKE_PROGRAM}
+ INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install
+ )
+
+# In order to use "bzr patch", we have to have a bzr working tree, this means a bzr repo
+# must be created and source committed to it. These extra steps do that.
+
+set( target "openssl" )
+
+ExternalProject_Add_Step( ${target} bzr_commit_${target}
+ COMMAND bzr ci -q -m pristine <SOURCE_DIR>
+ COMMENT "committing pristine ${target} files to '${target} scratch repo'"
+ DEPENDERS patch
+ )
+
+ExternalProject_Add_Step( ${target} bzr_add_${target}
+ COMMAND bzr add -q <SOURCE_DIR>
+ COMMENT "adding pristine ${target} files to '${target} scratch repo'"
+ DEPENDERS bzr_commit_${target}
+ )
+
+ExternalProject_Add_Step( ${target} bzr_init_${target}
+ COMMAND bzr init -q <SOURCE_DIR>
+ COMMENT "creating '${target} scratch repo' specifically for tracking ${target} patches"
+ DEPENDERS bzr_add_${target}
+ DEPENDEES download
+ )
+
+# The spelling of these is always taken from CMake Module's FindXYZ.cmake file:
+set( OPENSSL_INCLUDE_DIR
+ ${PREFIX}/include
+ CACHE FILEPATH "OPENSSL include directory"
+ )
+
+set( OPENSSL_LIBRARIES
+ ${PREFIX}/lib/libssl${CMAKE_IMPORT_LIBRARY_SUFFIX}
+ ${PREFIX}/lib/libcrypto${CMAKE_IMPORT_LIBRARY_SUFFIX}
+ CACHE STRING "OPENSSL libraries"
+ )
+set( OPENSSL_FOUND true )
+
diff --git a/CMakeModules/download_pcre.cmake b/CMakeModules/download_pcre.cmake
new file mode 100644
index 0000000..09f8900
--- /dev/null
+++ b/CMakeModules/download_pcre.cmake
@@ -0,0 +1,67 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds PCRE
+
+#-----<configure>----------------------------------------------------------------
+
+set( PCRE_RELEASE 8.34 )
+set( PCRE_MD5 eb34b2c9c727fd64940d6fd9a00995eb ) # re-calc this on every RELEASE change
+
+set( PCRE_ROOT "${PROJECT_SOURCE_DIR}/pcre_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+find_package( BZip2 REQUIRED )
+
+set( PREFIX ${DOWNLOAD_DIR}/pcre )
+
+if (APPLE)
+ if( CMAKE_OSX_ARCHITECTURES )
+ set( PCRE_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ set( PCRE_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ set( PCRE_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ endif( CMAKE_OSX_ARCHITECTURES )
+endif(APPLE)
+
+ExternalProject_Add( pcre
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://sourceforge.net/projects/pcre/files/pcre/${PCRE_RELEASE}/pcre-${PCRE_RELEASE}.tar.gz
+ URL_MD5 ${PCRE_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ #SOURCE_DIR "${PREFIX}"
+ BUILD_IN_SOURCE 1
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PCRE_ROOT}"
+
+ #PATCH_COMMAND "true"
+ CONFIGURE_COMMAND ./configure --prefix=${PCRE_ROOT} ${PCRE_CFLAGS} ${PCRE_CXXFLAGS} ${PCRE_LDFLAGS} --disable-dependency-tracking
+
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND $(MAKE)
+
+ INSTALL_DIR "${PCRE_ROOT}"
+ INSTALL_COMMAND $(MAKE) install
+ )
diff --git a/CMakeModules/download_pixman.cmake b/CMakeModules/download_pixman.cmake
new file mode 100644
index 0000000..cba41a1
--- /dev/null
+++ b/CMakeModules/download_pixman.cmake
@@ -0,0 +1,83 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds PIXMAN
+
+#-----<configure>----------------------------------------------------------------
+
+set( PIXMAN_RELEASE 0.32.4 )
+set( PIXMAN_MD5 eba449138b972fbf4547a8c152fea162 ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( PIXMAN_ROOT "${PROJECT_SOURCE_DIR}/pixman_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+if( NOT BZIP2_FOUND )
+ find_package( BZip2 REQUIRED )
+endif()
+
+set( PREFIX ${DOWNLOAD_DIR}/pixman )
+
+set(PIXMAN_CPPFLAGS "CFLAGS=")
+
+if (APPLE)
+ if( CMAKE_OSX_ARCHITECTURES )
+ set(PIXMAN_CPPFLAGS "${PIXMAN_CPPFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES} -fno-common -mmacosx-version-min=10.5")
+ else()
+ set(PIXMAN_CPPFLAGS "${PIXMAN_CPPFLAGS} -fno-common -mmacosx-version-min=10.5")
+ endif( CMAKE_OSX_ARCHITECTURES )
+endif(APPLE)
+
+if (KICAD_BUILD_STATIC)
+ set(PIXMAN_OPTS --enable-static=yes --enable-shared=no)
+else()
+ set(PIXMAN_OPTS --enable-static=yes --enable-shared=yes)
+endif(KICAD_BUILD_STATIC)
+
+# <SOURCE_DIR> = ${PREFIX}/src/glew
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( pixman
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://cairographics.org/releases/pixman-${PIXMAN_RELEASE}.tar.gz
+ URL_MD5 ${PIXMAN_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ #SOURCE_DIR "${PREFIX}"
+ BUILD_IN_SOURCE 1
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PIXMAN_ROOT}"
+
+ #PATCH_COMMAND "true"
+ CONFIGURE_COMMAND ./configure --prefix=${PIXMAN_ROOT} ${PIXMAN_OPTS} ${PIXMAN_CPPFLAGS} --disable-dependency-tracking
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND $(MAKE)
+
+ INSTALL_DIR "${PIXMAN_ROOT}"
+ INSTALL_COMMAND $(MAKE) install
+ )
diff --git a/CMakeModules/download_pkgconfig.cmake b/CMakeModules/download_pkgconfig.cmake
new file mode 100644
index 0000000..a0f6c53
--- /dev/null
+++ b/CMakeModules/download_pkgconfig.cmake
@@ -0,0 +1,80 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds CAIRO
+
+#-----<configure>----------------------------------------------------------------
+
+set( PKGCONFIG_RELEASE 0.28 )
+set( PKGCONFIG_MD5 aa3c86e67551adc3ac865160e34a2a0d ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( PKGCONFIG_ROOT "${PROJECT_SOURCE_DIR}/pkgconfig_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+if( NOT BZIP2_FOUND )
+ find_package( BZip2 REQUIRED )
+endif()
+
+set( PREFIX ${DOWNLOAD_DIR}/pkgconfig )
+
+if ( KICAD_BUILD_STATIC )
+ set( PKGCONFIG_BUILDTYPE --enable-shared=no --enable-static=yes )
+else()
+ set( PKGCONFIG_BUILDTYPE --enable-shared=yes --enable-static=yes )
+endif( KICAD_BUILD_STATIC )
+
+# <SOURCE_DIR> = ${PREFIX}/src/glew
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( pkgconfig
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://pkgconfig.freedesktop.org/releases/pkg-config-${PKGCONFIG_RELEASE}.tar.gz
+ URL_MD5 ${PKGCONFIG_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ #SOURCE_DIR "${PREFIX}"
+ BUILD_IN_SOURCE 1
+
+ #PATCH_COMMAND "true"
+ CONFIGURE_COMMAND ./configure --prefix=${PKGCONFIG_ROOT} --with-internal-glib ${PKGCONFIG_BUILDTYPE} --disable-silent-rules
+ #BINARY_DIR "${PREFIX}"
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PKGCONFIG_ROOT}"
+
+ BUILD_COMMAND $(MAKE)
+
+ INSTALL_DIR "${PKGCONFIG_ROOT}"
+ INSTALL_COMMAND $(MAKE) install
+ )
+
+ExternalProject_Add_Step( pkgconfig pkgconfig_cleanup
+ COMMAND ${CMAKE_COMMAND} -E remove_directory "${PKGCONFIG_ROOT}"
+ COMMENT "pkgconfig - cleanup destination before proceeding in install"
+ DEPENDEES build
+ )
+
diff --git a/CMakeModules/download_swig.cmake b/CMakeModules/download_swig.cmake
new file mode 100644
index 0000000..e72918e
--- /dev/null
+++ b/CMakeModules/download_swig.cmake
@@ -0,0 +1,79 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds SWIG
+
+#-----<configure>----------------------------------------------------------------
+
+set( SWIG_RELEASE 2.0.11 )
+set( SWIG_MD5 291ba57c0acd218da0b0916c280dcbae ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( SWIG_ROOT "${PROJECT_SOURCE_DIR}/swig_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+find_package( BZip2 REQUIRED )
+
+set( PREFIX ${DOWNLOAD_DIR}/swig )
+
+if (APPLE)
+ if( CMAKE_OSX_ARCHITECTURES )
+ set( SWIG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ set( SWIG_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ set( SWIG_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
+ endif( CMAKE_OSX_ARCHITECTURES )
+
+ set( SWIG_PYTHON "--with-python=/usr/bin/python2.6" )
+ set( SWIG_OPTS --disable-dependency-tracking )
+endif(APPLE)
+
+# <SOURCE_DIR> = ${PREFIX}/src/glew
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( swig
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://sourceforge.net/projects/swig/files/swig/swig-${SWIG_RELEASE}/swig-${SWIG_RELEASE}.tar.gz
+ URL_MD5 ${SWIG_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ DEPENDS pcre
+
+ #SOURCE_DIR "${PREFIX}"
+ BUILD_IN_SOURCE 1
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${SWIG_ROOT}"
+
+ #PATCH_COMMAND "true"
+ CONFIGURE_COMMAND ./configure --prefix=${SWIG_ROOT} --with-pcre-prefix=${PCRE_ROOT} ${SWIG_CFLAGS} ${SWIG_LDFLAGS} ${SWIG_CXXFLAGS} ${SWIG_PYTHON} ${SWIG_OPTS}
+
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND $(MAKE)
+
+ INSTALL_DIR "${SWIG_ROOT}"
+ INSTALL_COMMAND $(MAKE) install
+ )
diff --git a/CMakeModules/download_wxpython.cmake b/CMakeModules/download_wxpython.cmake
new file mode 100644
index 0000000..112a8de
--- /dev/null
+++ b/CMakeModules/download_wxpython.cmake
@@ -0,0 +1,121 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds LIBWXPYTHON
+
+#-----<configure>----------------------------------------------------------------
+
+set( LIBWXPYTHON_RELEASE 3.0.0.0 )
+set( LIBWXPYTHON_MD5 f5e32c7d85dc261ba777e113c3b7e365 ) # re-calc this on every RELEASE change
+
+set( LIBWXPYTHON_ROOT "${PROJECT_SOURCE_DIR}/libwxpython_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+find_package( BZip2 REQUIRED )
+
+set( PREFIX ${DOWNLOAD_DIR}/libwxpython )
+set( LIBWXPYTHON_EXEC python )
+set( LIBWXPYTHON_OPTS --wxpy_installdir=${LIBWXPYTHON_ROOT}/wxPython )
+
+if (APPLE)
+ SET( LIBWXPYTHON_EXEC python2.6 )
+ SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --osx_cocoa )
+ #SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_framework --mac_framework_prefix=${LIBWXPYTHON_ROOT}/wxPython )
+
+ if( CMAKE_OSX_ARCHITECTURES )
+ STRING(REGEX REPLACE " -arch " "," LIBWXPYTHON_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
+ SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_arch=${LIBWXPYTHON_ARCHITECTURES})
+ endif( CMAKE_OSX_ARCHITECTURES )
+
+ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
+ SET( LIBWXPYTHON_PRECMD export CFLAGS=-Qunused-arguments && )
+ endif()
+endif(APPLE)
+
+if ( KICAD_BUILD_STATIC )
+ #message fail
+ set( LIBWXPYTHON_BUILDTYPE "--disable-shared" )
+endif( KICAD_BUILD_STATIC )
+
+# <SOURCE_DIR> = ${PREFIX}/src/libwx
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( libwxpython
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://sourceforge.net/projects/wxpython/files/wxPython/${LIBWXPYTHON_RELEASE}/wxPython-src-${LIBWXPYTHON_RELEASE}.tar.bz2
+ URL_MD5 ${LIBWXPYTHON_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ BUILD_IN_SOURCE 1
+
+ PATCH_COMMAND bzr revert
+ COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx.patch"
+ COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx_multiarch.patch" # http://trac.wxwidgets.org/ticket/15957
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}"
+ COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean
+
+ CONFIGURE_COMMAND ${LIBWXPYTHON_PRECMD} ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --prefix=${LIBWXPYTHON_ROOT} --unicode --install ${LIBWXPYTHON_OPTS}
+
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND true
+
+ INSTALL_DIR "${LIBWXPYTHON_ROOT}"
+ INSTALL_COMMAND true
+ )
+
+ExternalProject_Add_Step( libwxpython bzr_commit_libwxpython
+ COMMAND bzr ci -q -m pristine <SOURCE_DIR>
+ COMMENT "committing pristine libwxpython files to 'libwxpython scratch repo'"
+ DEPENDERS patch
+ )
+
+
+ExternalProject_Add_Step( libwxpython bzr_add_libwxpython
+ COMMAND bzr add -q ${PREFIX}/src/libwxpython
+ COMMENT "adding pristine libwxpython files to 'libwxpython scratch repo'"
+ DEPENDERS bzr_commit_libwxpython
+ )
+
+
+ExternalProject_Add_Step( libwxpython bzr_init_libwxpython
+ COMMAND bzr init -q <SOURCE_DIR>
+ COMMENT "creating 'libwxpython scratch repo' specifically for libwx to track libwx patches"
+ DEPENDERS bzr_add_libwxpython
+ DEPENDEES download
+ )
+
+######
+# Now is time to search what we have built
+######
+
+ExternalProject_Add_Step( libwxpython libwxpython_recursive_message
+ COMMAND cmake .
+ COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad"
+ DEPENDEES install
+ )
+
diff --git a/CMakeModules/download_wxwidgets.cmake b/CMakeModules/download_wxwidgets.cmake
new file mode 100644
index 0000000..ed7ebe8
--- /dev/null
+++ b/CMakeModules/download_wxwidgets.cmake
@@ -0,0 +1,119 @@
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+# Downloads and builds LIBWX
+
+#-----<configure>----------------------------------------------------------------
+
+set( LIBWX_RELEASE 3.0.0 )
+set( LIBWX_MD5 241998efc12205172ed24c18788ea2cd ) # re-calc this on every RELEASE change
+
+# The boost headers [and static libs if built] go here, at the top of KiCad
+# source tree in boost_root.
+set( LIBWX_ROOT "${PROJECT_SOURCE_DIR}/libwx_root" )
+
+#-----</configure>---------------------------------------------------------------
+
+if( NOT BZIP2_FOUND )
+ find_package( BZip2 REQUIRED )
+endif()
+
+set( PREFIX ${DOWNLOAD_DIR}/libwx )
+
+if (APPLE)
+ if( CMAKE_OSX_ARCHITECTURES )
+ STRING(REGEX REPLACE " -arch " "," LIBWX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
+ SET( LIBWX_ARCHITECTURES --enable-universal_binary=${LIBWX_ARCHITECTURES})
+ endif( CMAKE_OSX_ARCHITECTURES )
+endif(APPLE)
+
+if ( KICAD_BUILD_STATIC )
+ set( LIBWX_BUILDTYPE "--disable-shared" )
+endif( KICAD_BUILD_STATIC )
+
+# <SOURCE_DIR> = ${PREFIX}/src/libwx
+# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
+# download, the patch is applied. This lets you regenerate a new patch at any time
+# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
+
+ExternalProject_Add( libwx
+ PREFIX "${PREFIX}"
+ DOWNLOAD_DIR "${DOWNLOAD_DIR}"
+ URL http://downloads.sourceforge.net/project/wxwindows/${LIBWX_RELEASE}/wxWidgets-${LIBWX_RELEASE}.tar.bz2
+ URL_MD5 ${LIBWX_MD5}
+ STAMP_DIR "${PREFIX}"
+
+ BUILD_IN_SOURCE 1
+
+ PATCH_COMMAND bzr revert
+ COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx.patch"
+ COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx_bug_15908.patch"
+
+ UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWX_ROOT}"
+
+ CONFIGURE_COMMAND ./configure --prefix=${LIBWX_ROOT} -with-opengl --enable-aui --enable-debug_info -with-expat=builtin --with-regex=builtin --enable-utf8 ${LIBWX_ARCHITECTURES} ${LIBWX_BUILDTYPE}
+ #BINARY_DIR "${PREFIX}"
+
+ BUILD_COMMAND $(MAKE) VERBOSE=1
+
+ INSTALL_DIR "${LIBWX_ROOT}"
+ INSTALL_COMMAND make install
+ )
+
+#SET directories
+set(wxWidgets_BIN_DIR ${LIBWX_ROOT}/bin)
+set(wxWidgets_CONFIG_EXECUTABLE ${LIBWX_ROOT}/bin/wx-config)
+set(wxWidgets_INCLUDE_DIRS ${LIBWX_ROOT}/include)
+set(wxWidgets_LIBRARY_DIRS ${LIBWX_ROOT}/lib)
+
+
+ExternalProject_Add_Step( libwx bzr_commit_libwx
+ COMMAND bzr ci -q -m pristine <SOURCE_DIR>
+ COMMENT "committing pristine libwx files to 'libwx scratch repo'"
+ DEPENDERS patch
+ )
+
+
+ExternalProject_Add_Step( libwx bzr_add_libwx
+ COMMAND bzr add -q ${PREFIX}/src/libwx
+ COMMENT "adding pristine libwx files to 'libwx scratch repo'"
+ DEPENDERS bzr_commit_libwx
+ )
+
+
+ExternalProject_Add_Step( libwx bzr_init_libwx
+ COMMAND bzr init -q <SOURCE_DIR>
+ COMMENT "creating 'libwx scratch repo' specifically for libwx to track libwx patches"
+ DEPENDERS bzr_add_libwx
+ DEPENDEES download
+ )
+
+######
+# Now is time to search what we have built
+######
+
+ExternalProject_Add_Step( libwx libwx_recursive_message
+ COMMAND cmake .
+ COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad"
+ DEPENDEES install
+ )
+
diff --git a/Documentation/GUI_Translation_HOWTO.odt b/Documentation/GUI_Translation_HOWTO.odt
new file mode 100644
index 0000000..1638460
--- /dev/null
+++ b/Documentation/GUI_Translation_HOWTO.odt
Binary files differ
diff --git a/Documentation/GUI_Translation_HOWTO.pdf b/Documentation/GUI_Translation_HOWTO.pdf
new file mode 100644
index 0000000..6e6e408
--- /dev/null
+++ b/Documentation/GUI_Translation_HOWTO.pdf
Binary files differ
diff --git a/Documentation/HOW_TO_CONTRIBUTE.txt b/Documentation/HOW_TO_CONTRIBUTE.txt
new file mode 100644
index 0000000..d042329
--- /dev/null
+++ b/Documentation/HOW_TO_CONTRIBUTE.txt
@@ -0,0 +1,56 @@
+Contribute to KiCad (under Linux)
+--------------------
+
+1) make sure you have all the dependencies of KiCad:
+ sudo apt-get install debhelper dpatch libx11-dev
+ sudo apt-get install libglu1-mesa-dev libgl1-mesa-dev mesa-common-dev
+ sudo apt-get install libwxbase2.8-dev libwxgtk2.8-dev libboost-dev fakeroot
+ sudo apt-get install cmake bzr
+ sudo apt-get install cmake bzr bzrtools
+
+2) initialize Bazaar:
+ bzr whoami "John Doe <john.doe@gmail.com>"
+
+3) get latest KiCad source tree:
+ cd ~/
+ bzr branch lp:kicad kicad.bzr
+
+ this should leave you with the folder kicad.bzr
+
+4) Read coding_style_policy.pdf, in kicad.bzr/Documentation,
+ and other docs.
+
+5) create a local (branch) copy of the KiCad project
+ bzr branch ./kicad.bzr ./kicad.my_contrib
+
+6) Modify/add source code in
+ cd kicad.my_contrib
+ gedit .......
+ if you need to create and add the file foo.cpp do so and:
+ bzr add foo.cpp
+ if you need to delete files:
+ bzr rm foo.cpp
+
+7) Compile:
+ cd kicad.my_contrib
+ mkdir build; cd build
+ cmake ../ -DCMAKE_BUILD_TYPE=Debug
+ to build a debug version
+ or
+ cmake ../ -DCMAKE_BUILD_TYPE=Release
+ to build a release version
+ make -j8
+
+8) Repeat step 6 and 7 until satisfied.
+
+9) Create a patch file:
+ cd kicad.my_contrib
+ bzr diff > my_changes.patch
+
+9) Send the patch file "my_changes.patch" to the KiCad developers mailing list.
+ in the subject of the e-mail include the keyword "[PATCH]".
+ in the body of the e-mail clearly explain what you have done.
+
+
+for more info see INSTALL.txt.
+
diff --git a/Documentation/KIWAY_Build_Symbols_Defined.txt b/Documentation/KIWAY_Build_Symbols_Defined.txt
new file mode 100644
index 0000000..f10dea9
--- /dev/null
+++ b/Documentation/KIWAY_Build_Symbols_Defined.txt
@@ -0,0 +1,29 @@
+
+KIWAY Build Symbols, Definitions and Intentions
+
+
+COMPILING_DLL:
+
+ This is a signal to import_export.h, and when present, toggles the
+ interpretation of the #defines in that file. Its purpose should not be
+ extended beyond this.
+
+
+USE_KIWAY_DLLS:
+
+ Comes from CMake as a user configuration variable, settable in the Cmake
+ user interface. It decides if KiCad will be built with the *.kiface program
+ modules.
+
+
+BUILD_KIWAY_DLL:
+
+ Comes from CMake, but at the 2nd tier, not the top tier. By 2nd tier,
+ something like pcbnew/CMakeLists.txt, not /CMakeLists.txt is meant. It is
+ not a user configuration variable. Instead, the 2nd tier CMakeLists.txt file
+ looks at the top level USE_KIWAY_DLLS and decides how the object files under
+ the 2nd tier's control will be built. If it decides it wants to march in
+ lockstep with USE_KIWAY_DLLS, then this local CMakeLists.txt file may pass a
+ defined BUILD_KIWAY_DLL (singular) on the compiler command line to the
+ pertinent set of compilation steps under its control.
+
diff --git a/Documentation/biu-plan.txt b/Documentation/biu-plan.txt
new file mode 100644
index 0000000..6fe9267
--- /dev/null
+++ b/Documentation/biu-plan.txt
@@ -0,0 +1,243 @@
+Proposed Plan for adding Nano Meters into PCBNEW as the Board Internal Unit
+===========================================================================
+
+Author: Dick Hollenbeck November 25, 2011
+
+Introduction:
+============
+
+This document sketches out a plan to move KiCad's PCBNEW program from deci-mil
+internal units to nanometer internal units. The changes to the code are
+significant enough to describe the basic process before the work is started.
+
+Definitions:
+===========
+
+*) Board Internal Units (BIU). This is a pseudonym for the engineering units
+used by a BOARD when it is in RAM, and only when it is in RAM. BIU is
+essentially equal to nanometers in the future, and equal to deci-mils currently.
+A BIU refers typically to a measurement or a position on an XY grid, and this is
+because this grid is dimensioned in BIUs along both its X and Y axes. Both X and
+Y can be either positive or negative on this grid. In the case of measurements
+or scalars, there can be a radius, a diameter, a distance (length), and all of
+these can and should be expressed in BIUs, so long we are in RAM and so long as
+we are talking about the objects within the class BOARD instance. One special
+feature of XY points within the BIU coordinate system is that they will always
+be integers. In contrast, distances and other forms of measurements are not
+subject to the same limitation by the very nature of physics. Coordinates are
+always integers because we used signed whole numbers to represent these BIU
+coordinates.
+
+*) Snap grid. A snap grid is a subset of the full set of possible XY coordinates
+in the BIU coordinate system. Points falling on the snap grid are evenly spaced
+in X and Y directions and are some integer multiple apart in this 2D space,
+greater than one BIU.
+
+Assumptions:
+===========
+
+a) It is ok to modify the board file format in order to handle the BIU change.
+
+b) Boards saved on disk in the new format will not be readable using old software.
+
+c) Since we have no backwards compatibility obligation (see b) above), we can
+make significant changes to the file format while we have this disruption
+opportunity.
+
+General:
+=======
+
+With nano meters as the Board Internal Unit (BIU), a 32 bit signed integer can
+only hold about 2 meters of positive length and 2 meters of negative length.
+Moreover, because most of the bits within a 32 bit integer can be "used up" to
+hold a typical length within a board, it is very likely that if pure 32 bit
+integer math is done, such as the multiplication of two integers in order to
+calculate a hypotenuse, then there will be an overflow within the 32 bit
+integer. (Another way to think of the BIU acronym is "Board Integer Unit" instead
+of as Board Internal Unit, to pave the way for the BFU, discussed below.)
+
+Therefore all intermediate products, quotients, trig, and exponential
+calculations should be done using some larger floating point type. By larger,
+bitness or number of bits is meant. Distances that do not have to be rounded
+back to integer immediately can and should stay in the larger floating point
+"value container" for as long as possible. The typedef name of this floating
+point type is BFU (Board Float Unit). The engineering units on a BFU are the
+same as on a BIU. A typedef is nice so that we can toggle between double and
+"long double" for various compilations, and so that when performing casts, these
+are brief textual expressions.
+
+Format Strings:
+==============
+
+Because all our save to disk functions use printf() style format strings, we
+discuss how to construct a format string in the most usable way. There should be
+a printf() style format string like "%.6g" for the BFU (cast to a hard coded
+double) enclosed within a #define and its name should be FMT_ENG. This format
+string will be used at least for saving BOARD and MODULE files, and perhaps
+more.
+
+FMT_ENG stands for "format string for ENGineering units used out in the file". A
+define is needed simply to provide consistency across many sites of usage. BIUs
+will be scaled before being written to disk in most every case, and since
+scaling is a multiplication, it means casting one of the factors to BFU, and
+then this product is output with a printf() style function using the FMT_ENG
+string segment.
+
+That is, the FMT_ENG will be suitable for use with a BFU type. When BFU is set
+to double, then FMT_ENG will be set to "%.6g". When BFU is set to long double
+then FMT_ENG will be set to "%.6Lg". For example:
+
+#if USE_DOUBLE_BFU
+typedef double BFU;
+#define FMT_ENG ".%10g"
+#else
+typedef long double BFU;
+#define FMT_ENG ".%10Lg"
+#endif
+
+A format string can then be built up using compile time concatenation of
+strings, like this:
+
+fprintf( fp, "Value: " FMT_ENG " " FMT_ENG "\n", BFU( biu1 * scale), BFU( biu2 * scale ) );
+
+The 3rd and 4th arguments are BFUs, and the casting is done after the multiply
+since the scaling factor is already a double or perhaps even a long double. The
+final argument needs to match the format string, so the final product is wrapped
+in a BFU, which could actually be a truncation down to 64 bit float from 80 bit
+float. The key points are: the calculation must be done in a float type at least
+as bit-wide as BFU, and that the value actually passed to fprintf() must match
+the format string.
+
+Choosing BIU Units:
+==================
+
+BIUs are only used when a BOARD or MODULE is in RAM. A BIU is equivalent to
+either a 1) deci-mil or 2) nanometer, depending on how the source code is
+compiled. It is not a runtime decision. Form 1) is needed only during the
+preparation phase of the source code transition to nanometers. After the
+transition, only nanometers will be used in the compilation. No runtime
+switching is needed or wanted. Again, BIUs can only be one or the other for a
+given compilation, and this will swing based on a single #define.
+
+Eventually we may want to actually use "BIU" as our integer type in source code
+for those lengths which pertain to the board coordinate space. This would give
+us the ability to easily modify it, go to a larger bitness, make the source code
+more readable, and keep the type information out of the variable name. This
+would mean having a point and/or size class based on BIU as the contained
+integer types. This is a nice to have, but not immediately mandatory.
+
+There will be a number of places within the source code which will have to be
+doctored up to use the BFU casting. It will take some time to find all these
+sites. During this time it should be possible to continue using deci-mils as the
+BIU for source compilation.
+
+There are a quite a number of path ways in and out of BOARDs and MODULEs. Most
+everyone of these pathways involve conversion or scaling of BIUs. An example of
+a pathway in is a BOARD disk file loading function. An example of a pathway out
+of a BOARD is a disk file saving function. Likewise for MODULEs. We can
+characterize the load and save functions by their source and destination
+representations of lengths.
+
+BOARDs and MODULEs will soon have a new format, which is basically the existing
+format expressed in um or nm (TBD) rather than in deci-mils. For discussion, we
+will say this new format is in mm, even though it may end up being in um. In
+another year or two we will switch to s-expressions, or sooner if there is a
+volunteer.
+
+Here are the required immediate need BOARD load functions:
+
+1) Legacy to deci-mil loader. This loader uses a floating point scaling factor
+of unity, since destination is a RAM BOARD using deci-mils as its BIU.
+
+2) Legacy to nanometer loader. This loader uses a floating point scaling factor
+of 2540, since destination is a RAM BOARD using nanometers as its BIU, and
+the source format is using deci-mils.
+
+3) mm to nanometer loader. This loader uses a floating point scaling factor
+of 1000000, since the destination is a RAM BOARD using nanometers as its BIU.
+
+There is no need for a nm to deci-mil loader. (Once somebody saves a file in the
+new format, that format is used going forward, or its backup in the old format.)
+
+Now duplicate the above 3 loader types for MODULEs.
+
+Here are the required immediate need BOARD save functions:
+
+1) deci-mil to deci-mil, using a floating point scaling factor of unity. It
+should be possible to use trailing zero suppression on the deci-mils to get a
+BOARD that is identical to an old BOARD, and this can be used to test the new
+save function, using "diff" with whitespace ignore. This saver is only in play
+when the BIU is compiled to be deci-mils.
+
+2) nanometer to mm, using a floating point scaling factor of 1/1000000. This
+saver is only in play when the BIU is compiled to be nanometers.
+
+Now duplicate the above 3 saver types for MODULEs.
+
+New BOARD and MODULE files will have a new field in them identifying the
+engineering units used, say mm.
+
+In actuality, the source code to all 3 loaders, and to all 3 savers can be the
+same source code with a single variable in each case for scaling.
+
+All 6 loaders and all 6 savers should be written in parallel with existing
+loaders and savers, so that we can toggle usage back and forth between the two
+for awhile. This means we do not gut existing savers and loaders until the new
+ones are debugged and stable.
+
+The new savers and loaders are to be done in the context of a plug-in
+architecture, described elsewhere.
+
+Angles and Rotations:
+====================
+
+Internally we are switching from using an int to hold 1/10 of degrees angle to a
+typedef called DEGREES. The allowed values that DEGREES can hold will be
+enforced by the user interface policy, decided elsewhere. The engineering units
+in the DEGREES type is degrees, no longer tenths of degrees.
+
+/// a value used to hold rotations or angles.
+typedef double DEGREES;
+
+
+User Interface Changes:
+======================
+
+All these changes have to be done in a way where they hinge on one #ifdef.
+
+*) The grid dimension choices will have to be changed.
+
+*) The drawing routines will have to be changed to handle the case that BIU is
+compiled to be nm. Work towards getting legacy drawing code capable of handling
+a compile time #define to control a single scaling factor. Only the scaling
+factor should need be changed in the final state. Up until then, the work
+required is to inject the BFU casting where needed along with the scaling
+factor(s).
+
+*) Remove any funky imperial to metric conversion functions which tried to hide/mask
+problems with lack of BIU precision.
+
+*) There may be some fix ups pertaining to "near enough" type testing involving
+the user's mouse position, other than bounding box hit testing which should take
+care of itself (in BIUs). This has more to do with near-ness to a line type
+tests, and these are thought to best be done in screen coordinates anyway, not
+BIUs.
+
+Work Tasks:
+==========
+
+*) Within PCBNEW, find math expressions involving BIUs and cast them to BFUs
+early enough so that the compiler generates code in the BFU realm.
+
+*) Find a way to consistently round values from BFUs back to BIUs, and put that
+code in place. This could be done using a set accessor on a BIU, or other way.
+
+*) Fix the User Interface issues mentioned above, and more found later.
+
+*) Write the 4 new load and save functions. Vladimir recently committed code
+which can be a starting point for some of these functions, except that the new
+ones should reside within a PLUGIN object where we can save the scaling factor
+variable as a member field of the plugin. In order to meet the requirements
+of all 3 board loaders, we may have to dynamically change the scaling factor
+depending on what we find in the *.brd file and how the plugin is compiled.
+
diff --git a/Documentation/changelogs/CHANGELOG-2007.txt b/Documentation/changelogs/CHANGELOG-2007.txt
new file mode 100644
index 0000000..a0d98bf
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2007.txt
@@ -0,0 +1,1547 @@
+KiCad ChangeLog 2007
+====================
+
+2007-Dec-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ First draft (and code..) about new zone handling, using polygons to define an outline.
+ Now currently not useable because the fill function (and many other important functions) is not implemented.
+ Many functions are not yet implemented: merging zones, cutout, DRC ...
+ Nevertheless, one can create, modify edit and save zone outlines
+
+
+2007-Dec-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ * Because of the discussion 4 months ago about using Boost::Python, and
+ because of an excellent boost::ptr_vector class, I want to make some of the
+ boost libraries be necessary for building Kicad. These would be:
+ 1) boost pointer container library (immediately)
+ http://www.boost.org/libs/ptr_container/doc/ptr_container.html
+ See the work in specctra.cpp to see where this is going:
+ typedef boost::ptr_vector<ELEM> ELEM_ARRAY found within class PARENT.
+ I found that gcc 4.2.1 was complaining about the standard ubuntu libboost-dev
+ package and would not compile ptr_vector class. But the svn of boost
+ fixed this.
+ 2) boost::python when building python in.
+ * Added FIND_PACKAGE(Boost) to CMakeLists.txt
+
+
+2007-Dec-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ added strlower() to common.h and string.cpp.
+ fixed compiler warnings in common/gr_basic.cpp and pcbnew/clean.cpp
++pcbnew
+ started the DSN file import/export for SPECCTRA routers, adding dsn.cpp and
+ specctra.cpp, with "stand alone" compile support for it in pcbnew/CMakeLists.txt.
+
+
+2007-Dec-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ WinEDA_PcbFrame::Other_Layer_Route() was leaving in the bridging segment
+ when the DRC denied the via insertion.
+
+
+2007-Dec-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ some changes about zones: enhanced dialog, and files reorganisation
+
+
+2007-Dec-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ WinEDA_PcbFrame::Other_Layer_Route() now returns bool, so that if the DRC
+ would not allow the new via placement, then it can be checked and the layer
+ change can also then be aborted. Previously the layer change would happen
+ in mid track even if the via could not be placed.
+
+
+2007-Dec-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * surbrill.cpp's int WinEDA_PcbFrame::Select_High_Light( wxDC* DC )
+ was re-written to use the GENERAL_COLLECTOR, and the scanList is set to
+ give pads a higher search priority than tracks, vias or zones.
+ The objective was to use the pad if possible, rather than a track on a pad,
+ so the pad can be sent to eeschema. Finding the track only (even though
+ on a pad) would not send anything to eeschema.
+
+
+2007-Dec-12 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Fized zone drawing bug in svn HEAD only.
+ pcbnew/zones.cpp, see:
+ http://tech.groups.yahoo.com/group/kicad-users/message/2993
+
+
+2007-Dec-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ * Fixed hotkey table for '+' and '-' bug. The lookup table in
+ common/hotkeys_basic.cpp had bad entries for + and -. These hotkeys
+ were not working on Linux.
+ * Added polygon directory to Doxyfile.
+
+
+2007-Dec-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++cvpcb:
+ listboxes.cpp FootprintListBox::m_ActiveFootprint member was not initialized.
+ Can crash cvpcb (WINDOWS only, i believe)
+
+
+2007-Dec-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ changes in file organisation and classes to prepare zone redesign. No real new code.
+ class zone functions and definitions moved in class_zone.h and .cpp
+
+
+2007-Dec-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Very minor bug in drill map : inaccurate via shapes (I believe EXCELLON drill file has no problems)
+
+
+2007-Dec-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all
+ Solved zoom key command problems (under linux and windows)
+ (seen http://sourceforge.net/tracker/index.php?func=detail&aid=1844960&group_id=145591&atid=762476)
+
++pcbnew
+ solved bug when loading a footprint in modedit: invisible text attribute was lost (trunk and tag)
+
+
+2007-Dec-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ added the D() macro to fctsys.h to ease conditional debug printf()s.
+ worked on http://sourceforge.net/tracker/index.php?func=detail&aid=1844960&group_id=145591&atid=762476
+ but could not resolve it in 1/2 day.
+
+
+2007-Dec-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * drc.cpp and dialog_drc.cpp update.
+ Added double click support on a MARKER or unconnected DRC_ITEM in the listboxes.
+ On Linux, it sometimes pops up the menu from PcbGeneralLocateAndDisplay()
+ for some reason after repositioning the cursor. That is not intended, but
+ after several attempts to work around it, I realized it is not so bad to
+ have this happen.
+ * Added right click popup menus to the list boxes. User must first select
+ the item he wants to go to, as the right click does not change the selection.
+ * Added WinEDA_BasePcbFrame::CursorGoto( const wxPoint& ) by factoring it
+ out of pcbnew/find.cpp
+ Done now, its ready for folks to start using it and testing it.
+
+
+2007-Dec-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved an annotation problem: in multiple parts per package components,
+ when sorted by position, parts were not grouped by package.
+
+
+2007-Dec-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ drc.cpp and dialog_drc.cpp intermediate update.
+
+
+2007-Nov-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * added virtual GetPosition() to BOARD_ITEM and derivatives.
+ * added classes DRC, REPORT_ISSUE, DRC_ITEM and rearranged drc.cpp entirely
+ to comprize the DRC class. The result has finer granularity of functions
+ and each is fairly well documented in English, see drc_stuff.h.
+ Keeping old stuff commented out at bottom of drc.cpp until some more usage
+ and testing is done.
+ * Made the DRC dialog modeless, so it can sit off to the side while the MARKER
+ are inspected one by one.
+
+
+2007-Nov-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Removed a bug (function block() ) which crashes pcbnew when erasing a zone by block delete
+
+
+2007-Nov-27 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * changed class MARQUEUR to class MARKER name only.
+ * Moved BOARD's MARKERs from m_Drawings to vector<MARKER*> m_markers so
+ they can be easily deleted and navigated to from the drc dialog.
+ * deprecated the MARKER::Unlink() function.
+ * Added
+ BOARD::Add( BOARD_ITEM*, int )
+ BOARD::GetMARKER(int)
+ BOARD::Delete( BOARD_ITEM* )
+ BOARD::DeleteMARKERs();
+ * Changed BOARD::~BOARD() to use DeleteMARKERs().
+ * Revised screen drawing routine to know about BOARD::m_markers.
+ * Revised BOARD::Visit() to know about BOARD::m_markers.
+ * Revised pcbnew/find.cpp to know about BOARD::m_markers.
+ * removed wxYield() from drc.cpp
+
+
+2007-Nov-26 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ DRC code and dialog rework start. This breaks DRC, until I get out the
+ other end of the tunnel.
+
+
+2007-Nov-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * dialog_track_options uses a portable technique for SetFocus(), namely the
+ function OnInitDialog( wxInitDialogEvent& event ).
+ * started work on dialog_drc, not checked in. basic wxHtmlListBox is working with dummied text.
++all
+ makefile.include's now use CXX instead of CC for compiling.
+
+
+2007-Nov-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Removed a bug (function Delete_Zone() ) which crashes pcbnew when erasing a zone by popup menu
+
+
+2007-Nov-13 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew
+ * The "Page Settings" dialog box has been enhanced; it now includes a
+ wxStdDialogButtonSizer, and is also now designed to be expandable.
++ pcbnew
+ * The "DRC Control" and "Netlist:" dialog boxes have also been enhanced. Each
+ of those dialogs now includes a wxStdDialogButtonSizer and a "Cancel" button,
+ (so each of those dialogs can now (otherwise) be cancelled by pressing the
+ "Esc" key), and is also now designed to be expandable.
+
+
+2007-Nov-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Fixed modedit.cpp bug which occurred when selecting a non pad item (such
+ as a text field) in the module editor, then selecting Dimensions -> Pad Settings
+ in the module editor.
+
+
+2007-Nov-11 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew & gerbview
+ * The "Colors" dialog box has been enhanced; the distance between adjacent
+ controls now increases (and in both horizontal and vertical directions)
+ when that dialog is resized. And the "Cancel" button is no longer centre-
+ justified; it is now right-justifed instead.
++ eeschema
+ * A wxStdDialogButtonSizer is now used within the "EESchema Colors" dialog box,
+ meaning that the sequence of the "OK", "Cancel", and "Apply" buttons within
+ that dialog now depends upon which (OS) version of KiCad is being used (and
+ thus matching the nature of the corresponding dialogs within Pcbnew and GerbView
+ in that regard). (As of yet, the vertical distance between adjacent controls
+ does not increase when this dialog is resized, but that aspect will also be
+ implemented when time permits.)
++ gerbview
+ * The "GerbView Layer Colors:" dialog box has been updated, and is now similar
+ in nature to the corresponding dialogs within EESchema and Pcbnew. Tool tips
+ have also been provided for the "Show All" and "Show None" buttons.
+
+
+2007-Nov-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ More comprehensive dialog in netlist plugin interface.
+ Eeschema configuration now shows the plugin netlist list
+
+
+2007-Nov-09 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ 3d-viewer
+ * The 3d_canvas.cpp file has been updated to use a const parameter, as suggested
+ within (Bug) Request ID 1828487.
++ pcbnew
+ * Sizers have now been provided for the "Pcbnew Layer Colors:" dialog box (previously
+ identified as the "Colors:" dialog box), and tool tips have been provided for the
+ "Show All" and "Show None" buttons.
+ * The reglage.cpp file (which is not currently used) has been removed, and replaced
+ with reglage.cpp.notused.
+
+
+2007-Nov-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ removed not used files
+
+
+2007-Nov-07 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ all
+ * The common/svg_print.cpp, common/svg_print.h, and common/svg_print.pjd files (which
+ are not currently used) have been removed, and replaced with svg_print.cpp.notused,
+ svg_print.h.notused, and svg_print.pjd.notused. And common/makefile.include has
+ also been updated so that none of those files are now listed at all.
++ eeschema
+ * A "Cancel" button has now been provided within each of the "Component properties",
+ "EESchema Annotation", "EESchema Erc", "Global Label properties", "Label properties",
+ and "Text properties" dialog boxes, and each of those dialogs can now (otherwise) be
+ cancelled by pressing the "Esc" key. (In due course, each of those dialogs will be
+ refined yet further; this is just an incremental enhancement.)
+ * The eestatus.cpp file (which is not currently used) has been removed, and replaced
+ with eestatus.cpp.notused.
+
+
+2007-Nov-05 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema
+ * The previously provided "Close" button within the "Netlist" dialog box has
+ now been replaced with a "Cancel" button, and this dialog can now (otherwise)
+ be cancelled by pressing the "Esc" key. General cleanup and beautification of
+ eeschema/netlist_control.cpp.
++ pcbnew
+ * The color of each text string provided within the "Swap Layers:" dialog box is
+ now set to blue for each string specifying that the associated layer is *not*
+ being swapped with any other layer, or to fushia for each string specifying that
+ the associated layer *is* being swapped with another layer. (This change was
+ made after being suggested by Dick Hollenbeck.)
++ gerbview
+ * The color of each text string provided within the "Layer selection" dialog box
+ is similarly now set to blue for each string specifying that the associated
+ Gerber layer is *not* being exported to any pcbnew layer, or to fushia for each
+ string specifying that the associated Gerber layer *is* being exported to a
+ pcbnew layer.
+
+
+2007-Nov-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ fixed a crashing bug which happened if you "dragged" a module with
+ tracks. Then deleted one of the pad connected tracks, then deleted the
+ next track attached to the first one. Memory was being corrupted because
+ PcbGeneralLocate() and display was not being called on the 2nd track to
+ be deleted because the m_Flags test:
+ bool ItemFree = (GetCurItem()==0 || GetCurItem()->m_Flags==0);
+ was returning false. Solution was to SetCurItem(NULL) after deleting a
+ TRACK. This makes sense, SetCurItem() is used for designating a "selected"
+ item, and a deleted TRACK is not even in the BOARD anymore and should not
+ be selected or selectable. I think this bug may have been causing spurious
+ crashes for the last couple of months.
+
+
+2007-Nov-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ solved: eeschema, pcbnew and cvpcb did not find libraries when they were
+ in the default library path, but in a subdirectory
+ (this is because the default path was not added to the name if the name had
+ already a path)
+
+
+2007-Nov-02 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Sizers have now been provided for the "Swap Layers:" dialog box, and the
+ previously provided radiobuttons have been replaced with buttons and static
+ text strings. (In the previous version of this dialog, radiobuttons were being
+ used in an inappropriate manner. The most "orthodox" way of implementing the
+ functionality within this dialog would be to provide a combobox for each layer,
+ but as up to 30 strings would be needed within the dropdown list associated with
+ each of those controls (one string for each of the layers, and another string to
+ deselect the layer), such controls would be less than user-friendly. Hence a
+ button is now provided for each layer instead (and which, like the previously
+ provided radiobutton, invokes the "Select Layer:" dialog box after being clicked
+ on). Two static text strings are also provided for each layer, with one of them
+ being used to identify that layer, and the other being used to identify which
+ layer that each layer is currently being swapped to.) The previously provided
+ "Select" and "Deselect" buttons are no longer required, and are thus no longer
+ provided.
++ gerbview
+ * The "Layer selection" dialog box (invoked during the "Export to Pcbnew" command)
+ has similarly been updated. (This dialog did use spacers before, but once again,
+ the previously provided radiobuttons were being used in an inappropriate manner.)
+
+
+2007-Nov-01 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Provided new definitions of FIRST_COPPER_LAYER and LAST_COPPER_LAYER within
+ include/pcbstruct.h, and used those definitions within various other files.
+ Beautified and generally refined 3d-viewer/3d_draw.cpp and pcbnew/plotgerb.cpp.
+
+
+2007-Oct-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++kicad:
+ rename mdiframe.cpp to mainframe.cpp
+ create commandframe.cpp to handle the command frame (which have the 4 "fast launch" buttons)
+
+
+2007-Oct-31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ * Added Doxygen configuration file, whose standard name is Doxyfile. Output
+ is set to go to ./doxygen directory just off the project tree.
+ * Added a note to todo.txt which asks folks to start using "Doxygen compatible"
+ comments in member functions and classes. Run Doxygen on the project, then
+ look at the documentation for class INSPECTOR as an example.
++ pcbnew
+ * zones.cpp, Trace_Pcb(), & EDGE_ZONE class:
+ Reversed the usage of EDGE_ZONE::Pnext and Pback in the list management to be
+ consistent with other classes and with BOARD_ITEM::IterateForward() and
+ BOARD::~BOARD().
+ * Fixed a display bug when high contrast mode is enabled and the track tool
+ is selected.
+
+
+2007-Oct-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ gcc 4.2.1 compatibility: change char * to const char * whenever it was necessary,
+ mainly in .xpm files
+
+
+2007-Oct-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ added BOARD_ITEM::Save() and to all derived classes as well. Made virtual
+ and removed all UI code from these utility functions.
+ removed WriteDesc() functions from all BOARD_ITEM derived classes, although
+ Keeping old ones in commented out form for a while for reference.
+ @todo: delete these from *.cpp files eventually.
+ zones.cpp, clean up in prep for enhancements.
++ gerbview
+ fixed bug which came about when BOARD::~BOARD() started deleting the objects
+ that a BOARD owns. export_to_pcbnew.cpp was not consistent with this
+ design and was crashing. Also, export_to_pcbnew.cpp now uses the simple
+ BOARD::Save() function. It was another place to maintain the PCB file format,
+ rather than simply putting that knowledge into one place like BOARD::Save().
++ all
+ beautified gr_basic.cpp and made CLIP_LINE macro a static inline function.
+
+
+2007-Oct-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++cvpcb: listboxes.cpp problem solved: exists only under windows
+ now apply to windows only, because this Workaround creates a problem undex linux
++others:
+ some very minor problems solved
++eeschema:
+ in B.O.M.: the footprint field can be added to the field list
+
+
+2007-Oct-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++cvpcb: listboxes.cpp problem solved: Workaround for a curious bug in wxWidgets:
+ if we switch from a long list of footprints to a short list (a filtered footprint list),
+ and if the selected item is near the end of the long list,
+ the new list is not displayed from the top of the list box
++eeschema:
+ Implemented: graying in/out of "Edit/Undo", "Edit/Redo" menu items,
+ when Undo/Redo stack is empty/filled.
++pcbnew:
+ Implemented: action for ID_POPUP_PCB_DELETE_MARKER
+
+
+2007-Oct-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all:
+ remove unused files.
+ some translations
++cvpcb:
+ set flag wxFRAME_FLOAT_ON_PARENT when create the footprint 3D frame and the
+ display frame
+ minor other changes
++ pcbnew:
+ Use collector class to locate items in modedit.
+ This is a big enhancement,
+ but a small work for me because Dick made all the work.
+
+
+2007-Oct-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ Add class_marker.cpp and class_marker.h and move MARQUEUR functions in class_marker.cpp
+ Change MARQUEUR::HitTest to take in account the zoom level.
+ change global var EDA_Appl to g_EDA_Appl
+
+
+2007-Oct-25 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ cvpcb
+ * Fine-tuned contents of dialog_display_options.cpp, dialog_display_options.h,
+ and dialog_display_options.pjd, so that the controls within the associated
+ ("Display Options") dialog box now also expand if that dialog is expanded.
++ all
+ * The share/selcolor.cpp file (which is no longer used) has been removed, and
+ replaced with share/selcolor.cpp.notused
+
+
+2007-Oct-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ cvpcb:
+ 2 missing .prj files added (and updated)
+ dialog_display_option.cpp is rebuild from its dialog_display_option.prj source
+
+
+2007-Oct-23 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema
+ * Sizers have now been provided for the "EESchema Preferences" dialog box,
+ together with "OK", "Cancel", and "Apply" buttons. And an additional bitmap
+ button and checkbox have also been provided for the purpose of editing the
+ color and visibility of the grid.
+
+
+2007-Oct-21 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ all
+ * Provided an MAYBE_RESIZE_BORDER field within all of the .pjd files (used by
+ DialogBlocks), and restored the MAYBE_RESIZE_BORDER field to cleaningoptions_dialog.h
+
+
+2007-Oct-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ added UIpolicies.txt
+
+
+2007-Oct-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ rename dialog_clean_pcb.pjd to cleaningoptions_dialog.pjd,
+ accordind to the corresponding cpp filename.
+ enter the new tool tips in cleaningoptions_dialog.pjd.
++all:
+ USE_RESIZE_BORDER is now defined (default) in fctsys.h.
+ Therefore, under windows, dialogs are now resizable (like under unix)
+
+
+2007-Oct-21 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew & gerbview
+ * Sizers have now been provided within the "Colors" dialog box.
+
+
+2007-Oct-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * "Clean tracks" changed to "Track operations".
+ * Housekeeping on clean.cpp completed.
+ Added static void ConnectDanglingEndToVia( BOARD* pcb ) in clean.cpp which
+ extends tracks to via centers. Call it from "extend to pads", works nice.
+ * Added tooltip text to cleaningoptions_dialog.cpp's m_ConnectToPadsOpt
+ but don't know if DialogBlocks will parse this backwards.
+ * Made compilable, somebody broke #define VIA_???? s throughout. Would not compile.
+ * SEGVIA::SetPos() & GetPos() added.
+
+
+2007-Oct-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ Removed enhancements in connectivity computation because
+ rastnest computation does not work (errors) with short track segments
+ (lenght < width) . This is not a bug, but an algorithm problem, so
+ I must work on algos.
+
+
+2007-Oct-17 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Rolled back previous changes (made in revision 336) that edited the values of
+ vias' Shape property (following feedback from Jean-Pierre Charras concerning
+ the true significance of that property).
+
+
+2007-Oct-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ remove a change for Read VIA because via attributes
+ (TROUGH VIA, BLIND VIA or BURIED VIA) are autorisations for layer connection,
+ and are not a real layer indicator.
+ If a via connect layers from copper to component, it can have a BURIED VIA attribute.
+ the meaning is for this via the layer pair can be changed for other layer pair
+ if after editing this via connect 2 tracks which are only int internal layers,
+ its layer pair can be changed.
+ If a via has a TROUGH VIA attribute, it connects ALL layers, whenever tracks
+ connected to it.
+ Note: curenty: only TROUGH VIA are handled.
+ Other types (BLIND VIA and BURIED VIA) are only experimental.
+ A **lot** of code is needed for a full support.
+ enhancements in connectivity computation
+
+
+2007-Oct-15 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Made some changes involving vias so that these would have the correct value
+ of the Shape property assigned to them - while being created, and while files
+ are being saved, and while files are being loaded.
+
+
+2007-Oct-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew:
+ * housekeeping and translation to English on bottom third of pcbnew/clean.cpp.
+ No algorithm changes were intended, only improved readability.
+ * my todo: figure out how to intercept double clicks on a wxWidgets text control
+ so I can complete the work I started on MARQUEUR error tracking.
+
+
+2007-Oct-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ ratsnest.cpp translated into english.
+ Many infos on the LEE algorithm used here added.
+ todo (by myself): connect.cpp translation.
+ onrightclick() bug (created by last change) solved: one could reselect an item,
+ while moving a previously selected item (pcbnew crashes).
+
+
+2007-Oct-13 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema
+ * The previously provided "Quit" button within the "List of Material" dialog box
+ has been replaced with "OK", "Cancel", and "Apply" buttons. Greater consistency
+ has also been achieved after clicking on the "Create List" button; none of the
+ prevailing settings are subsequently saved (previously, some, but not all, of
+ the settings were subsequently saved). (However, settings can still be saved by
+ clicking on either of the "OK" or "Apply" buttons instead.) Assorted cleanup
+ and beautification of associated source code.
+ * The genliste.cpp file (which is no longer used) has been removed, and replaced
+ with genliste.cpp.notused
+
+
+2007-Oct-12 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ * m_NetCode is now private or protected throughout.
+ added SetNet() and GetNet() to all classes which have this member name.
+ ditto for m_Sous_NetCode, for which there is now SetSubNet() and GetSubNet().
++ pcbnew
+ added more disambiguating text to the PcbGeneralLocateAndDisplay() popup
+ menu for tracks. We need all the info we can get there I found after using
+ the software for many hours.
+
+
+ Jean-Pierre:
+
+ I never thought I would find a greater problem in using Kicad than having to
+ lay down all the ground and power tracks, rather that just linking vias into
+ pre-established zones or "tagged layers".
+
+ But I have, hundreds of my tracks and vias are showing
+ unconnected under my BGA, (where say the track or via is NetCode==0) and it
+ should not be, because the damn track ties the BGA pad to a nearby via.
+ How can the software be made to think these three items are on the same net,
+ without re-entering all the damn tracks?
+
+ This issue has been coming up for months on the user list, it must be dealt with now.
+ There is always the same lame answer, "make sure your tracks go to the center of the pads".
+ Nonsense, the software picked the track end points, not me, and grid was on when it did it.
+ There are bugs here.
+
+ Does Recalcule_all_net_connexion() work, and why is not called from anywhere?
+
+
+
+2007-Oct-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * D_PAD::Draw() refinements.
+ * WinEDA_DrawFrame::SetToolID() will redraw the DrawPanel if the track
+ button is selected or de-selected and the high-contrast mode is in play.
+ * If high-contrast mode is in play, the Select Layer Pair dialog completion
+ will redraw the DisplayPanel, now that SMD pads' colors are so dependent
+ on these variables.
+
+
+2007-Oct-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * D_PAD::Draw() so that it shows SMD pads as greyed out when in high contrast
+ mode and not on current layer. Slight variation on this when laying down
+ tracks: m_Route_Layer_BOTTOM or m_Route_Layer_TOP layers' SMD pads are
+ not greyed out.
+ * Changed English UI text for "Cotation" to "Dimension".
+
+
+2007-Oct-11 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * The "Target Properties" and "Pads Global Edit" dialog boxes can now (otherwise)
+ be cancelled by pressing the "Esc" key, and the caption of the "OK" button
+ within the latter dialog box has been capitalised (so that an icon is now
+ provided within that button within the Linux version of KiCad).
+ * The pcbpiste.cpp file (which is no longer used) has been removed, and replaced
+ with pcbpiste.cpp.notused
++ cvpcb
+ * The affiche.cpp file (which is no longer used) has been removed, and replaced
+ with affiche.cpp.notused
+
+
+2007-Oct-11 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * The previously provided "Exit" button within the "Colors:" dialog box has been
+ replaced with "OK", "Cancel", and "Apply" buttons, and the code for editing the
+ visibility of the Grid layer from that dialog now is "cleaner" than before.
+ Details associated with buttons within that dialog box moved from set_color.cpp
+ to set_color.h (matching implementation for GerbView's corresponding dialog box).
+ * Fixed bug which previously prevented the Copper layer from being selected as the
+ current layer when only one copper layer is enabled (and made some modifications
+ to the code for selecting the next copper layer and previous copper layer).
++ gerbview
+ * The code for editing the visibility of the Grid layer from the "GerbView Layer
+ Colors:" dialog box is "cleaner" than before, and assorted other beautification.
++ eeschema
+ * The options.cpp file (which is no longer used) has been removed, and replaced
+ with options.cpp.notused
+
+
+2007-Oct-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * bug fix: prevent OnRightClick() from calling PcbGeneralLocateAndDisplay()
+ when creating a new track.
+ * bug fix: popup menu was not handling Mires, because the collector was not
+ being asked to find them.
+ * added TRACK::ShowWidth() and call it from BOARD_ITEM::MenuText(). There was
+ not enough information in Selection Clarification at a busy junction to
+ make a reasonable choice.
+ * SEGVIA::MenuText() shows via width, rather than net_code.
+ * Beautified ratsnets.cpp, I would like to understand it better. It would help
+ if the comments were in English.
++ all
+ * Changed English UI text "Mire" to "Target" according to this post:
+ http://tech.groups.yahoo.com/group/kicad-users/message/1380
+ * rewrote msgpanel.cpp so it retains wxStrings and therefore can repaint its
+ window when being uncovered, resized or whatever.
+
+
+2007-Oct-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ changed pcbnew/onrightclick.cpp so that a right click only shows the
+ Selection Clarification menu if there is no selected object or if the
+ click is in a position different from where the selection was previously
+ made.
+
+
+2007-Oct-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema:
+ cross-probing minor bug solved ( due to last modification): pins/pads not probed
+
+
+2007-Oct-08 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ gerbview
+ Display on screen now updates properly (in Linux version) after clicking on
+ the "OK" button provided within the "GerbView Layer Colors" dialog box.
+
+
+2007-Oct-7 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ create new file cross-probing.cpp
+ move RemoteCommand() to cross-probing.cpp and create SendMessageToPCBNEW()
+
++ pcbnew
+ bug in move pad fixed (could crash pcbnew)
+ Small change in selection clarification (side effect removed):
+ - Escape or click on title does not show the next popup menu.
+ - the title is displayed under linux
+ - definition CUIVRE_N translated into COPPER_LAYER_N
+
+
+2007-Oct-07 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ all
+ * Various dialog boxes can now (otherwise) be cancelled by pressing the "Esc" key.
+ (Some dialog boxes still require attention in that regard though, so that task
+ is not yet complete.) And the captions of the "OK" button within various dialog
+ boxes have been fully capitalised (meaning that an icon is now provided within
+ each of those buttons within the Linux version of KiCad).
+ * DIALOG_STYLE (defined within include/wxstruct.h) now includes MAYBE_RESIZE_BORDER
+ field. (Refer to 2007-Oct-2 UPDATE notes for the relevance of this.)
+ * Beautification and house keeping.
++ eeschema
+ * The editpart.cpp and libedpart.cpp files (which are no longer used) have been
+ removed, and replaced with editpart.cpp.notused and libedpart.cpp.notused
++ cvpcb
+ * Additional "OK", "Cancel", and "Apply" buttons have now been provided for the
+ "Options" dialog box which lists various display options for footprints.
++ pcbnew
+ * Invoking the "Select Layer Pair:" dialog box is no longer possible whenever only
+ one (copper) layer is currently enabled. And it is no longer possible to select
+ the same layer to be both the Top Layer and Bottom Layer (for any Layer Pair).
+ * Deselecting layers during the "Swap layers" command is now more user-friendly,
+ due to the provision of an additional "(Deselect)" radiobutton within the (child)
+ "Select Layer:" dialog box (which is always invoked whenever a different
+ radiobutton within the "Swap Layers:" dialog box is clicked on). (It had
+ previously been necessary to cancel the "Select Layer:" dialog box before being
+ able to click on the "Deselect" button within the "Swap Layers:" dialog box.)
+ * Definition for NB_LAYERS changed from (EDGE_N + 1) to (LAST_NO_COPPER_LAYER + 1)
+ (Although EDGE_N is currently the "last" layer, that wouldn't necessarily still
+ be true if any additional layers are ever defined in the future.) And comparisons
+ to 29 (or 28) have been replaced with comparisons to NB_LAYERS (when appropriate).
++ gerbview
+ * The previously provided "Exit" button within the "GerbView Layer Colors" dialog
+ box has been replaced with "OK", "Cancel", and "Apply" buttons; and both the
+ visibility and color of the Grid layer can now be edited from the same dialog.
+ * Deselecting (Gerber) layers during the "Export to Pcbnew" command is now more
+ user-friendly, due to the provision of an additional "(Deselect)" radiobutton
+ within the (child) "Select Layer:" dialog box (which is always invoked whenever
+ a different radiobutton within the "Layer selection:" dialog box is clicked on).
+ (It had previously been necessary to cancel the "Select Layer:" dialog box before
+ being able to click on the "Deselect" button within the "Layer selection:" dialog
+ box.)
+ * The "Export to Pcbnew" command now requires at least one Gerber file to have been
+ already loaded. And Gerber files can now be loaded into any of the 32 (Gerber)
+ layers provided. (It had previously been necessary to avoid having any gaps within
+ the sequence of used Gerber layers.)
+
+
+2007-Oct-6 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ create new file cross-probing.cpp
+ move RemoteCommand() and SendMessageToEESCHEMA() to cross-probing.cpp
+
+
+2007-Oct-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ made BOARD_ITEM::UnLink() virtual
+ added BOARD_ITEM::DeleteStructure().
+ added EDA_BaseStruct::DeleteStructList()
+ deleted gerbview/struct.cpp, pcbnew/struct.cpp,
+ BOARD::~BOARD() now deletes objects that it owns.
+ Collectors now finds MARQUEURs also
+ added MARQUEURS::Display_Infos()
+ added MARQUEURS::HitTest()
+
+
+2007-Oct-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ The lack of border resizing in dialogs has been a problem. In my world,
+ dialog boxes are resizable. I use large fonts, I like to see stuff.
+ So now for __UNIX__ they are resizeable, for windows not.
+ See fctsys.h and the #define for MAYBE_RESIZE_BORDER. For windows it defaults
+ to zero which means resizeable is not featured. A compiler command line
+ option of "USE_RESIZE_BORDER" can override this windows default.
+
+
+2007-Oct-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew/eeschema
+ Cross-probing pcbnew to eeschema:
+ A left click on a pad in pcbnew moves the eeschema cursor on the corresponding component pin
+ A left click on a footprint ref or value in pcbnew moves the eeschema cursor on the corresponding component ref or value
+ A left ckick on a footprint moves the eeschema cursor on the corresponding component anchor
++ pcbnew
+ removed drc.cpp change line 584, and translate comments in english.
+ nothing broken:
+ -> a pad with its netcode = 0 means the pad ** must be left unconnected ** (not attached to * a net).
+ -> a track with its netcode = 0 means the track is not attached to a net (cannot be connected to any pad).
+
+
+2007-Sep-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Added dedicated Show() function for SEGVIA. Enhanced BOARD_ITEM::MenuText()
+ for SEGVIA.
+
+
+2007-Sep-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * drc.c made a change near line 584 to comment out pt_pad->m_NetCode test against
+ zero. This was preventing me from laying out my board. It's possible that
+ this broke something else, but it is also clear that something was broke before
+ this change, because I could not put down some tracks.
+ * beautification, house keeping.
+
+
+
+2007-Sep-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ create new file onleftclick.cpp
+ move onleftcligk() and onleftDcligk() from edit.cpp to onleftclick.cpp
+
+
+2007-Sep-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ test case for OnLeftClick() handling enhancements.
+ TAB key removed, because is not needed for block selection and double click.
+ (SHIHT ou CTRL or ALT key is sufficient to suppress the popup menu
+ if needed for a double click )
+ Some work is still needed, of course
++ pcbnew
+ Color grid setting now works
+
+
+2007-Sep-26 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ test case for OnLeftClick() handling from a release circumstance.
+ a few simple changes to void WinEDA_DrawPanel::OnMouseEvent( wxMouseEvent& event ),
+ but they affect all programs in a subtle way.
+ TAB key allow double clicking, but is not needed for block selection.
+
++ pcbnew
+ GENERAL_COLLECTOR::GetCount() returns int, not unsigned. Was tired of the
+ compiler complaining when using an int ndx.
+
+
+2007-Sep-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * removed reference to global display options DisplayOpt.DisplayZones in
+ collectors.cpp so collectors.cpp can continue to be used in multiple future
+ (non-display related) general contexts. I don't want unnecessary dependencies
+ in there. The way to completely ignore a type is to exclude it from scanList.
+ The way to sometimes ignore a type is to add support for this in COLLECTORS_GUIDE.
+ * Moved TYPEZONE to end of AllBoardItems, added GENERAL_COLLECTOR::AllButZones to
+ provide support for DisplayOpt.DisplayZones.
+ * Added aHotKeyCode to PcbGeneralLocateAndDisplay()
++ gerbview
+ * viewer was getting stuck in a loop when loading a bad gerber file. Fixed
+ the bug, but line 223 through 225 of readgerb.cpp needs review.
+ * beautified a few files with uncrustify, (any I had to look at).
+
+
+2007-sept-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ * add class_board_item.cpp file and move BOARD_ITEM::MenuText() and BOARD_ITEM::MenuIcon() in it
+ * Add zone detection, forgotten in PcbGeneralLocateAndDisplay()
++ class_collector.h:
+ add void COLLECTOR::Remove( unsigned int item_position ), needed by zone detection, see PcbGeneralLocateAndDisplay
+
+
+2007-Sep-25 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ gerbview
+ The "Exit" button previously provided within the dialog box invoked from the
+ "Preferences -> File ext" menu entry has now been replaced by "OK" and "Cancel"
+ buttons. Similarly, the "Accept" button previously provided within each of the
+ dialog boxes invoked from the "Preferences -> Options" and "Preferences -> Display"
+ menu entries has now been replaced by an "OK" button. And each of those three
+ dialog boxes can now (otherwise) be cancelled by pressing the "Esc" key.
+
+
+2007-sept-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ * small change in hotkeys handling
+ (Ki_HotkeyInfo: new member m_IdMenuEvent to call an existing event handler from a hotkey list)
+
++ eeschema:
+ * added drag component in pop up menu and hotkeys
+ * plot svg format: incorrect arc draw fixed
+
+
+2007-Sep-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ GENERAL_COLLECTOR::Collect() was skipping thru hole pads even though they
+ were visible.
+ Highlight tool now sends message to eeschema when a pad is selected.
+
+
+2007-Sep-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema
+ * beautify, add debug Show() functions, changed ReturnFieldName()
+ to return "const wxString&" for speed, added GetFieldValue().
+ * tracking down questionable behavior (a bug?) in erc regarding pwr_flag, still looking
+
+
+2007-sept-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ * hotkeys handling finished
++ pcbnew
+ * bug fix: a subtle bug in place via : partial drc only was made.
+
+
+2007-Sep-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * controle.cpp, added Function AllAreModulesAndReturnSmallestIfSo() which is
+ called from PcbGeneralLocateAndDisplay()
+ * onrightclick.cpp changed to calls to BOARD_ITEM::MenuText(), and switched
+ to member functions for createPopupMenus() so we can get all the state
+ information we need for the proper menus.
+ * BOARD_ITEM::MenuText() got new argument BOARD*, and elaboration for
+ TRACKs and VIAs and Pcb Graphics.
+ * Fixed a problem in GENERAL_COLLECTOR::Inspect() so it now knows that MODULEs
+ have their own visibility controls (same for pads and pcb texts). This
+ interpretation must always match the drawing code's interpretation.
+ * Made TRACK::TRACK( const TRACK& ) protected to enforce use of TRACK::Copy()
+
+
+2007-Sep-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ kicad
+ * Inverted the logic associated with filters. Filters now enable a file
+ in the project manager. The default is to ignore all files.
+ * The filter for *.sch files is smarter, in that it looks to display only
+ top level *.sch files, rather than all *.sch files.
++ Others
+ More beautification
+
+
+2007-sept-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ * EDA_BaseStruct.SetType() removed.
+ The m_StructType member of class EDA_BaseStruct is no more modified in kicad.
+ Now Virtual functions can be widely used.
+ * The old EDA_BaseStruct.ReturnClassName() was removed.
+ the virtual EDA_BaseStruct.GetClass() is used instead.
+
++ gerbview: hotkeys Ok.
+
+
+2007-Sep-13 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew & gerbview
+ A Cancel button has now been provided for the "Colors" dialog box, which also
+ permits it to (otherwise) be cancelled by pressing the "Esc" key; the button
+ whose color matches that of the color currently selected (for the layer being
+ edited) also has the initial focus set to it.
+
+
+2007-Sep-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Changed PcbLocateAndDisplay() to be tool specific in its search and to present
+ a popup menu when there are multiple items under the mouse. It is also
+ a framework for future enhancements.
+ @todo: grep for @todo and finish off those tasks.
+ * Introduced a formal notion of "selected item". This is done with the addition
+ of the WinEDA_BasePcbFrame::SetCurItem() function. So now you have to first
+ select an item with the left mouse button before you attempt to use the
+ right button popup menu. Right button no longer has an effect on the
+ currently selected item. The currently selected item is shown in the MsgPanel.
+ When none is selected, the m_Pcb is shown.
+ * Tweaked the OnRightClick() popup menus so that the most likely choices are
+ at the top.
+ * Added wxString BOARD_ITEM::MenuText() const and BOARD_ITEM::MenuIcon() and
+ both need more work, work which I will not have time to do.
+
+
+2007-Sep-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Searched and did not see any usage of TRACK::Copy(int), where int was other
+ than '1', so renamed it to TRACK::CopyList(int) and commented it out because
+ with int==1, this makes Copy(1) equivalent to the new Copy(void).
+ * Made TRACK::Copy() capable of copying SEGZONE too.
+
+
+2007-sept-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ gerbview
+ Programmable hotkeys added. Fixed a compilation probleme in ansi mode (non unicode mode).
+
+
+2007-Sep-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Made good progress in onrightclick.cpp for multiple items under the mouse.
+ * Fixed some macros in macros.h so they can be followed with a semicolon and
+ used like simple expressions.
+ All changes not yet committed.
+
+2007-sept-6 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ Programmable hotkeys update.
+ some features are still subject to change (mainly path for config files: see 2007-aug-30 UPDATE))
+ The preference menu has a command to create and reread config hotkey files.
+ the hotkey ? lists the current hotkeys.
+
+
+2007-Sep-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Made GENERAL_COLLECTORS_GUIDE and GENERAL_COLLECTOR useable. They can now
+ serve as a fully functional replacement for PcbGeneralLocateAndDisplay(),
+ see DEBUG code in BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay().
+ * Made GENERAL_COLLECTOR capable of Collect()ing from a MODULE as well as a BOARD.
+ * pcbnew/onrightclick.cpp changed English from "Free Module" to "Unlock Module".
+ Next I hope to add some UI to handle multiple items under the mouse in onrightclick.cpp
+
+
+2007-sept-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ better comments in editrack-part2 (the todo remark solved)
++ todo.txt: note about editrack-part2 modified (problem solved)
+
+
+2007-Aug-31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & gerbview
+ * Added TRACK::Copy() which can copy a SEGVIA or a TRACK.
+ * Changed export_to_pcbnew.cpp so it created a SEGVIA properly, a significant change.
+ Moved and changed a big block of code in export_to_pcbnew.cpp so we can
+ properly construct the SEGVIA(). Not tested.
+ * Make EDA_BaseStruct::m_StructType private so we can trap where it is being
+ changed. (It should never be changed after construction, see comment above
+ EDA_BaseStruct::SetType().)
+
+
+2007-Aug-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Removed SEGVIA::IsViaOnLayer, and instead implemented an override to
+ virtual BOARD_ITEM::IsOnLayer() called SEGVIA::IsOnLayer().
+ * Tweaked TRACK::Visit() to not traverse the KICAD_T scan list and a
+ corresponding change to BOARD::Vist() so we can now get VIA priority
+ if desired. (Have to traverse m_Tracks twice, wonder if we could use
+ two lists: m_Tracks and a new m_Vias?)
+ * Changed signature of MODULE::Display_Infos( WinEDA_DrawFrame* frame ) so
+ it gets called virtually with any BOARD_ITEM* which is actually a MODULE*.
+ This was a bug.
+ * With virtual functions, it is now critical that the correct object type
+ be instantiated. This was not happening in ioascii.cpp when reading
+ the vias. Bug fixed.
+ * GENERAL_COLLECTOR getting closer to useable.
+
+
+2007-aug-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ more about programmable hotkeys.
+ Most existing hotkeys are programmable and displayed in popup menus or tools
+ Work still in progress but most features are ok.
+ some features are not fixed (mainly the configuration files path, which is
+ currently the home directory under unix systems and kicad/template under windows))
+
+
+2007-Aug-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Started abstract class COLLECTORS_GUIDE.
+ Renamed classtrc.cpp to classtrc.cpp.notused
+ Changed some comments in class BOARD's header to english, clarifying
+ linked list contents.
+
+
+2007-aug-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ Display grid size in mils or mm in popup menu according to the current unit choice
+
+
+2007-Aug-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ * Removed class EDA_BaseLineStruct, which brought no behavioral advantage, only data.
+ Classes which were based on it got its data members added and their initializers.
+ * Changed type of EDA_BaseStruct::m_StructType from int to KICAD_T which is an
+ enum. This makes debugging easier since gdb will show the name of the
+ KICAD_T rather than simply a number. Added NOT_USED = -1 to KICAD_T enum for
+ 3d which was using -1.
+ * More beautification using latest uncrustify and the committed uncrustify.cfg
+
+
+2007-Aug-24 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ A new option has now been provided which permits Gerber files to be generated
+ in which the contents of the Edges Pcb layer are not also included with the
+ contents of each other layer.
+
+
+2007-Aug-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ * Fixed MODULE::Visit() and BOARD::Vist() so they traverse certain lists
+ only once and they are working nicely now.
+ * You can test the GENERALCOLLECTOR::Scan() code by compiling with DEBUG=1 on
+ the command line and enabling the stuff near line 124 in
+ pcbnew/controle.cpp, then watch Show( std::cout ) show the selected items in
+ xml format on your console. (launch pcbnew from command line.)
+ @todo:
+ The layer selection mechanism used by the collector is still inadequate, so
+ tomorrow I will add a new class COLLECTORS_GUIDE which can be used by a
+ COLLECTOR to control its operation. It adds the concept of layer
+ locking, even though PCBNEW does not support that in the UI yet.
+
+
+2007-Aug-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ Things are still pretty transient, should be stable a day or two:
+ * Fixed a filename case sensitivity problem that would show up on Linux
+ but probably not on Windows: bitmap/Reload.xpm needed uppercase R.
+ * Wedged a new class BOARD_ITEM underneath all PCB drawable classes. This is
+ a big change and may introduce a bug or two, but it is worth it for the
+ future, because we can add virtual functions there that do not impact
+ the entire project (since everything is derived from EDA_BaseStruct).
+ The corresponding class in EESCHEMA seems to be DrawPartStruct, so we had
+ nothing in PCBNEW like that.
+ BOARD_ITEM::GetLayer() and SetLayer() introduced, more functions to come.
+ Much of this work is geared towards making collectors.cpp's ARROWCOLLECTOR::Inspect()
+ very very simple, and that can be a model for future work.
+ * Changed min() and max() macros to MIN() and MAX() because min() and max()
+ are actually reserved according to the C++ standard! (and their usage prevented
+ the use of #include <vector>).
+ * Added files class_collector.h, collectors.h, and collectors.cpp.
+ File collectors.cpp is still unfinished.
+ * Started using a function and class comment style that will make sense to the
+ Doxygen source code documenter program.
+ * Beautified more un-beautified files.
+
+
+2007-aug-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ First version of programmable hotkeys by editing hotkey configuration files.
+ some hotkeys are not programmable (Zoom)(work in progress)
+
+
+2007-Aug-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ administrative
+ Added copyright.h as a proposed copyright header for Mr. Charras's review.
+ Added uncrustify.cfg, the configuration file for the "uncrustify" C++ beautifier.
+
+
+2007-Aug-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & eeschema
+ * Moved allowed m_Flags values from pcbnew.h, general.h, and eeschema/delete.cpp to base_struct.h
+ near m_Flags itself. Several of the flags values were changed. I am only
+ comfortable with this change if m_Flags is not written to disk anywhere,
+ and we need to give that some thought. If m_Flags is a memory only usage
+ and not saved to disk, then this change should be safe. I could not find
+ any case where m_Flags was being saved to disk, but I could have missed one.
+ The reason for the change was to consolidate into one place the allowed values
+ so that as new flags are allocated there is no conflict.
+ * Moved most all the pcbnew/affiche.cpp functions to virtual member functions of their
+ respective classes with the name Display_Infos().
+ * Moved GetEquipot() global function to BOARD::FindNet().
+ These changes are working towards a concise locate.cpp module, on the way
+ to implementing the multiple choice support. Mass edits should be slowing down
+ in a day or so.
+
+
+2007-Aug-20 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew
+ The comments provided within postscript files now fully comply with Adobe's
+ Document Structuring Convention.
+
+
+2007-aug-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ modify hotkeys.cpp code (large modifications).
+ Added: common code in hotkeys_basic.cpp (in common) and hotkeys_basic.h (in include)
+ In the future, i hope hotkeys will be programmed by a config file
+
++ pcbnew
+ filename drc_dialog.prj changed to dialog_drc.prj
+ (according to the fulename dialog_drc.cpp and dialog_drc.h created by dialogblock from the .prj)
+
+
+2007-Aug-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ * Made BASE_SCREEN::m_CurrentItem private so we can force usage of the new
+ SetCurItem() function, and use it to put a breakpoint on the only place
+ that m_CurrentItem is changed, namely in the new SetCurItem() function.
+ ( Added new function GetCurItem() as well to class BASE_SCREEN in
+ drawpanel_wxstruct.h.) Using a stack trace at the breakpoint we can tell
+ who called it. There were in excess of 450 edits to get this done so I
+ had to commit it asap so other folks could get on with edits without a
+ merge conflict.
+ * Started work on the COLLECTOR class which will assist in giving a choice
+ in PCBNEW when there is more than one click candidate at the same mouse
+ or cursor coordinates. COLLECTOR not committed yet.
+ * More beautification.
+ * The mouse click and part synchronization from EESCHEMA to PCBNEW would
+ track fine but would not always position the PCBNEW part on screen. Now
+ we center it unconditionally. No change was made in the reverse direction
+ since that code uses the long established Find support.
+
+
+2007-Aug-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ * Added mouse click, TCP/IP socket based, part synchronization in the reverse
+ of how it was working, so a mouse click on a module in PCBNEW will take
+ EESCHEMA to the part with the same reference.
+ * More beautification, working with developer of uncrustify. Almost ready
+ to add the customized uncrustifiy configuration file to this project.
+ * Fixed a bug in pcbnew/tracepcb.cpp's WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
+ which was using a bool for the MaskLay variable, causing through hole pads
+ on modules on copper layer not to be shown when the copper components were
+ set to invisible.
+
+
+2007-aug-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ modify hotkeys.cpp code.
+
+
+2007-Aug-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ Improved MODULE::FindPadOrModule().
+ Ran more source files through auto-beautifier.
+ Renamed dupltrac.cpp to dupltrac.cpp.notused.
+
+
+2007-aug-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ better hotkeys.cpp code.
+
+
+2007-Aug-09 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ Released the new Visitor paradigm. Wrote MODULE::FindPadOrModule() using
+ it.
+
+
+2007-aug-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ Some new hotkeys (see hotkeys.cpp).
+ Now, the key ? display the current existing hotkeys
+
+
+2007-Aug-08 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ * Renamed locate.cpp's distance() to DistanceTest() and moved it to trigo.cpp.
+ Pass more parameters to DistanceTest and removed globals that were used by
+ distance() in locate.cpp.
+ Moved and renamed DistanceTest function proto from protos.h to trigo.h.
+ * Implemented HitTest() for class_cotation, class_mire, and a few other classes
+ by factoring out existing code from locate.cpp. locate.cpp should operate
+ exactly the same as before.
+ * Improved or implemented the Show() function for several classes.
+ * Detected that the suspected class_module hit-testing bug was not real,
+ i.e. no bug found.
+
+
+2007-aug-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ bug in class_hierarchy_sheet.cpp.
+
++ pcbnew
+ small change in block commands:
+ rastnest was updated for each footprint, while moving footprints.
+ Now it is updated at the end of changes.
+ enhancements in block.cpp and connect.cpp
+
+
+2007-Aug-07 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ * More searching work. Made HitTest() virtual. Factored out a HitTest()
+ function for both class_module and class_pad from existing code.
+ * Embellished the Show() function for several of the classes. Could be the
+ basis of a possible future XML export, but with the native format being
+ ascii already, this is of questionable value as an export.
+ * Discovered a long time existing bug in class_module hit-testing.
+ Still need to understand it. It could just be an improperly formatted module.
+
+
+2007-Aug-06 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ Started sketching out a new search architecture. To learn more:
+ look for "INSPECTOR" text in base_struct.h.
+
+
+2007-Aug-05 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ * Added some conditional DEBUG code for showing the pcb object tree in
+ simple XML format. See class EDA_BaseStruct's new Show() function.
+ * Changed the function name of Locate( const wxPoint& ref_pos ) to bool HitTest(..)
+ in both class_text_mod and base_struct.
+ * More beautification and commenting.
+
+
+2007-Aug-04 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Read-ability formatting, I am playing with a C++ beautifier called "uncrustify".
+ I had to patch it and spent 2 days getting it configured. Patch not
+ sent upstream yet.
+ Fixed a bug in "display local ratsnest pad or module": if you had a small
+ module and the mouse clicked its reference text, the ratnest for
+ the associated module would not show. The work around was to add
+ support to Show_1_Ratsnest() so it could take a TYPETEXTEMODULE as
+ the result of the hit-testing. But I think a longer term better
+ solution will be to create a specific search function for this kind
+ of hit-testing, one which could disregard text and look only for
+ pads and modules.
+
+
+2007-aug-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ Drc test now generates a DRC file report.
+
+
+2007-Jul-31 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ Drill Map and Drill Report files now list the diameters of each drill in
+ the selected drill unit first, and then in the other drill unit.
+ Drill report files also now list the tool assigned to each drill, and
+ the correct hole count and oval count for each drill size; the
+ file creation date and the selected drill unit are also listed.
+
+
+2007-Jul-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ Some file are added (missing .prj files)
+ Better Drc test:
+ Zones can be tested.
+ better pad to pad test.
+
+
+2007-Jul-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+ ** Some minor enhancements
++ pcbnew
+ In Drc diags, better (more explicit) messages
+ Change (and simplify) code in 'update' as well as 'insert' modules into main PCB from within the module editor,
+ because it had a bug (crashes when there was no footprint in pcb)
+
+
+
+2007-June-21 UPDATE Tim Hanson <tim@hardcarve.com>
+================================================================================
++ pcbnew
+ 1. added button to 'update' as well as 'insert' modules into main PCB
+ from within the module editor. Made them functional, of course.
+ 2. added control-o, control-s & control-f to pcbnew,
+ though I'm not perfectly happy with the implementation -- wxwidgets puts
+ the control-characters in alphabetical order!
+
+
+2007-June-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ minor enhancement in Edit footprint dialog (more help tool tips).
+ better hotkey.cpp (code cleaning and info messages)
+
+
+2007-June-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ After locking a module with 'L', update the status window with the locked
+ status. Side step some asserts from wxWidgets which were happening when
+ running compiled for debug.
+
+
+2007-June-16 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ pcbnew
+ fix debug assert starting pcbnew with wx2.6
++ build
+ add install targets for resources and docs
+
+
+2007-June-15 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ ** only modules on the present layer are subject to individual module
+ moves, rotations, or layer swaps, with the 'M', 'G', 'R' or 'S' hotkeys.
+ ** only unlocked modules are subject to the individual module moves,
+ rotations, or layer swaps, with the 'M', 'G', 'R' or 'S' hotkeys.
+ ** implemented the 'L' hotkey to quickly lock or unlock a module,
+ just by hovering over it and hitting the 'L' or 'l' key. The lock is
+ toggled.
+ ** Enhanced locate.cpp's Locate_Prefered_Module(BOARD * Pcb, int typeloc)
+ significantly, it now has a widely ranging behavior based on the
+ typeloc argument.
+
+
+2007-June-14 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++ eeschema
+ Added sorting by value or position in to the annotation window
+ (Thanks for patch to Andrey Fedorushkov).
+
+2007-June-13 RELEASE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++All:
+ merging my development with svn version
+
++ pcbnew:
+ bug fix (problem in postscript generation due to the internationalization
+ of floating point number notation )
+ added tool to select layer pair and monitor active layer
+
++ eeschema
+ bug fix:
+ crash libedit when loading certain components (linux only)
+ incomplete generation of erc file list
+
+
+2007-June-13 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ build:
+ dynamic linking by default, use make -f makefile.gtk KICAD_STATIC_LINK=1
+ or uncomment the bit in libs.linux for static
+
+
+2007-June-11 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ build:
+ removed several 2 line scripts for configuring wx builds and put them in
+ how-to-build-kicad.txt
+ improved KICAD_STATIC_LINK handling so it can be overridden on the command
+ line e.g. "make -f makefile.gtk KICAD_STATIC_LINK=0"
+
+
+2007-June-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ Started this change log file.
+
+
+2007-June-5 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ pcbnew:
+ fixed 3d-display image export (blank box in image)
++ build:
+ fixed makefile clean targets so they don't fail if already clean
+ fixed wx2.6 compatibility
+
+
+2007-May-25 RELEASE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ bug: problem with 3D shapes.
++ Gerbview:
+ Better (but crude...) support to export gerber files to pcbnew.
+
diff --git a/Documentation/changelogs/CHANGELOG-2008.txt b/Documentation/changelogs/CHANGELOG-2008.txt
new file mode 100644
index 0000000..d210585
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2008.txt
@@ -0,0 +1,1561 @@
+KiCad ChangeLog 2008
+====================
+
+2008-Dec-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Note: this is a work in progress!
+ Files modification.
+ More about italic and bold fields in libraries
+ Use DLIST to handle fields in lib entries
+ Bugs and problems solved in fields edition (some are windows only).
+
+
+2008-Dec-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Note: this is a work in progress!
+ Change dialog to edit fields in libedit.
+ Most of code created by Dick to edit fields in shematic is reused (this was the goal).
+ Component dialog properties -in libedit) is not modified, and fields can be also edited with it.
+ New dialog box is similar to the component dialog box used in schematic.
+ But all features do not work (work in progress!)
+ TODO (by me):
+ use vector to handle fields in libraries, like schematic.
+ Finish work, and test it.
+
+2008-Dec-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ * gr_basic.h DOXYGEN comments. made a couple functions static and removed
+ those from gr_basic.h since they are private to gr_basic.c. changed the
+ polygon code to use wxPoints since that is what the underlying wxWidgets
+ API uses.
+++gerbview
+ * More work on drawing polygons, erasure of polygons completed.
+ * Added full support for aperture macro 6, MOIRE.
+ * Example 2 in RS274xrevd_e.pdf almost draws properly now. Need ARC support
+ in polygons, and need polygon aperture type support to complete.
+
+
+2008-Dec-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ More about italic and bold texts options in fields and graphic texts
+
+
+2008-Dec-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Added dialog box to edit graphic items (graphic segments, circles, arcs)
+ properties
+
+
+2008-Dec-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All
+ Cleaning code to draw/plot texts:
+ Now only one function is used to draw and plot texts in pcbnew in all formats
+ Italics texts are allowed in pcbnew (work in progress)
+
+2008-Dec-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All
+ Cleaning code to draw/plot texts (work in progress):
+ Now only one function is used to draw and plot texts (not for pcbnew)
+ (easier to maintain and ensure texts have the same size in ploting and drawing)
+ In eeschema, italic and bold texts allowed (in pcbenew, texts thickness is already adjustable)
+
+
+2008-Dec-18 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Virtualize DrawFrame class methods required to eliminate compiling
+ drawframe.cpp multiple times depending on the application being built.
+ * Move zoom.cpp and drawframe.cpp to common library and update CMake files.
+ * drawpanel.cpp - Extracted mouse wheel events out of mouse event handler,
+ generate commands for mouse wheel events, and moved panning from DrawFrame
+ class into DrawPanel class.
+ * Initial ground work for new zoom implementation.
+
+
+2008-Dec-15 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++gerbview
+ Implemented most of the "thermal" aperture macro, at least so that it
+ displays as concentric circles OK. Still need to do the cross hairs.
+ Fixed a bug loading aperture macros from disk, could crash gerbview.
+ Switched TRACKs to after polygons in tracepcb.cpp, temporary solution until
+ I have more time.
+
+
+2008-Dec-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Display a short net name on vias and pads (if zoom level allows it).
+ Short net names are net names without hierarchy path
+ Add m_ShortNetname and change m_Netname to private in classes D_PAD and EQUIPOT
+
+
+2008-Dec-08 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Remove all instances of application pointers both global and embedded
+ member variables. Use wxGetApp() for improved readability and type
+ safety.
+
+
+2008-Dec-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * As a final migration step, made BOARD_ITEM::SetNext() and
+ BOARD_ITEM::SetBack() _private_, starting at BOARD_ITEM in the class
+ hierarchy so that the compiler will tell us where they are used illegally.
+ Classes derived from BOARD_ITEM then also cannot expose SetNext() and
+ SetPrev(), and this forces everthing related to BOARD_ITEM through DLIST for
+ list manipulation. The compiler turned up a couple I had missed, two of which
+ were the back pointers of MODULE::m_Reference->Back(), m_Value->Back(), which I
+ do not think are needed since the MODULE owns these texts, not the other way around.
+ This should be the final nail in the coffin for undisciplined list manipulation
+ within pcbnew and gerbview.
+ * Converted BOARD::Delete() into BOARD::Remove() and then added an inline for
+ BOARD::Delete() which deletes what Remove() returns.
+ * Removed BOARD::DeleteMARKER( int ) since BOARD::Delete() works.
+ * Removed gerbview's undelete.cpp and made gerbview use pcbnew's,
+ by moving the two supporting functions into the common base class
+ of WinEDA_BasePcbFrame, had to add some "#if !defined(GERBVIEW)"s.
+
+
+2008-Dec-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * Renamed Struct3D_Master to S3D_MASTER.
+ * MODULE::m_3D_Drawings is now a DLIST<>
+ * Removed AddToChain(), DeleteStructList() and replaced with calls to DLIST<>
+ members so that list item counting stays accurate.
+
+
+2008-Dec-05 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Simplified and improved grid implementation. User grid will no longer
+ be displayed if it is the same as any of the default grid sizes.
+ * Removed unused grid code in BASE_SCREEN class.
+ * Source file share/drawpanel.cpp now compiled into common library.
+ * Declare WinEDA_Appl so you can use wxGetApp() instead of passing app
+ pointers all over the place.
+ * Fixed assertion in debug build of 3D viewer.
+ * Some general code beautification and redundant header file removal in files
+ changed by the grid implementation.
+
+
+2008-Dec-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * added g_CurrentTrackList, and made g_CurrentTrackSegment and g_FirstTrackSegment
+ be #defines into this DLIST<TRACK>, see pcbnew.h.
+ * Changed to DLIST<> for almost all the list heads in BOARD.
+ Switched datatype of BOARD::m_Track, BOARD::m_Zone, etc to DLIST<>.
+ This simplifies BOARD::~BOARD() somewhat, and adds automatic counting of list elements and encapsulation
+ of all list operations into DHEAD member functions, see common/dlist.cpp.
+ * Removed TRACK::Insert() since it no long fits with the new BOARD::m_Track and BOARD::m_Zone datatypes.
+ * Removed the g_UnDeleteStack support from <any>::UnLink(), this may leave a deficiency, but this code needs
+ to be external to UnLink() anyway.
+ * Made TRACK::SetNext() and TRACK::SetBack() private so they may not be used,
+ the only way to put a TRACK on a list is through DLIST<TRACK>::PushFront()
+ and other member functions of DLIST<TRACK>.
+ * Switched to std::vector<TRACK*> in track.cpp to hold the temporary static list.
+ * Renamed some KICAD_Ts to more closely match the corresponding classname.
+++gerbview
+ * Switched to GR_COPY mode for drawing so we can see the erasures. debugged
+ erasures in rs274d.cpp.
+ * Now using order specific TRACK loading, so erasures come after objects they
+ are intended to erase. Still need layer ordering and polygon ordering support, my todo.
+
+ I do not like DeleteStructList() and plan to migrate away from it, DLIST<>:DeletAll()
+ does something like it.
+
+
+=======
+2008-Dec-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Switch to polygons in zones (old way no more supported)
+ areas can be now filled using solid polygons, or using segments to fill areas inside polygons.
+ results are same, but using segments can be better (faster redraw time) for polygons having a lot
+ of segments (more than 10000)
+
+2008-Dec-02 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++build fixes
+ * Changed wxWidgets library find order so monolithic build is no longer
+ required (at least on MinGW).
+ * Changed CreateSVNVersionHeader.cmake to fall back to "build_version.h"
+ when 'svn info' command fails. The default macro that ships with CMake
+ will not create build files when 'svn info' fails.
+
+
+2008-Nov-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ edit component in schematic editor. works pretty well, I'm done.
+
+
+2008-Nov-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ edit component in schematic editor. It is not complete but further.
+ Keep your old eeschema binary, this one does not fully work yet, another day or so.
+ Switched away from wxGrid to wxListCtrl, and that class is poorly documented
+ so much time pioneering how to use it. Should go faster now.
+
+
+2008-Nov-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ + Made _protected_ EDA_BaseStruct's:
+ EDA_BaseStruct* Pnext; /* Linked list: Link (next struct) */
+ EDA_BaseStruct* Pback; /* Linked list: Link (previous struct) */
+ EDA_BaseStruct* m_Parent; /* Linked list: Link (parent struct) */
+ EDA_BaseStruct* m_Son; /* Linked list: Link (son struct) */
+ + Split TRACK::Draw() out for SEGVIA
+ + Added dlist.h & dlist.cpp for DLIST<> template. All the _inline_ list manipulation
+ code throughout the package is rediculous. I don't mind list traversal, only
+ list manipulation. DLIST<> templates can be used to consolidate reliable
+ list manipulation operations and get this code out of the mainline.
+ These functions are shared/inherited for any derivation, so only one copy exists
+ in the final program image. To use, simply declare e.g. DLIST<D_PAD> or similar.
+ See dlist.h, template class DLIST for function comments.
+ + added EDA_BaseStruct::m_List to assist in debugging list manipulation functions.
++eeschema
+ Started on the edit component in schematic editor. It is not complete and
+ breaks the usefulness of the editor at this moment. Do not build this version
+ if you want to fully use eeschema.
+
+
+2008-Nov-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Some cleanup in dialog pad edition.
+ Added:
+ Zones now have a min thickness filled area parameter
+ that ensure a minimun width for filled copper areas
+ (areas below this min thickness are removed)
+ Shapes also are better
+
+
+2008-Nov-19 UPDATE Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
+++kicad-library
+ Moved {number}DIP packages to DIP-{number}__{WIDTH} seperated library dip_sockets.mod
+ Created DIP Packages board
+++kicad.pro template
+ Added dip_sockets library to pcbnew libraries in template file
+
+
+2008-Nov-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ First version of pcbnew using polygonal filled areas in zones in rats nets calculations.
+ Needs more tests.
+
+
+2008-Nov-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+kbool:
+ Using the last version (1.9) of kbool, downloaded from the wxArt2D project site
+ (see www.wxart2d.org)
+ But the version 1.8 bug still is here.
+ So using the workaround remains mandatory.
+ (this is not a problem because thermal shapes are better...)
+
+
+
+2008-Nov-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++gerbiew
+ + Added support for displaying most aperture macros embedded in a RS274X compatible file.
+ Cleanup of rs274d.cpp and added the beginning of the isDark support, which we
+ need to discuss. GERBER::m_ImageNegative can toggle during the course of reading
+ a rs274x file and sometimes this means erasing things.
+ + Tested pcbnew's gerber plotting, still working. Done
+ with aperture macros for now, but we need to handle the isDark support to
+ top it off after discussion.
+
+
+2008-Nov-8 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Thermal shapes modification for round and oblong pads.
+ This is a workaround for a bug (i believe) of kbool.
+ New thermal shapes have NO angle < 90 degrees between 2 adjacent segments.
+ For shapes that have angle < 90 degrees between 2 adjacent segments,
+ under certains circumstances kbool drops some holes and creates a bad filled area.
+ (see zones_convert_brd_items_to_polygons.cpp)
+
+
+2008-Nov-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++gerview
+ Added support for reading in aperture macros embedded in a RS274X compatible file.
+ Cannot display them yet.
+ General cleanup of gerbview. GERBER_Descr replaced with class GERBER.
+ ReturnToolDescr() replaced with GERBER::GetDCODE().
+ D_CODEs are created lazily now. pcbnew's gerber plotting needs testing, might
+ have broke something there, accidentally.
+
+
+2008-nov-5 UPDATE Andrey Fedorushkov <andrf@mail.ru>
+================================================================================
++all:
+ Add cyrillic font support.
+ Add russian GOST worksheet support.
+
+2008-nov-2 CLEANUP Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
+++kicad:
+ Cleanup comment/codestyle to make things more clear for newbie codeviewer
+ and developers.
+ + buildmnu.cpp
+ + commandframe.cpp
+ + kicad.cpp
+ + treeprj_frame.cpp
+
+
+2008-oct-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All
+ Use double instead float when possible, ande code cleaning.
+ Some changes for a better code compatibility with others compliers (MSVC)
+ (__MSVC__ must be defined when using MSVC)
+ (double round(double) and typeof unkown in MSVC)
+ Note: I cannot test kicad under MSVC.
+
+
+2008-Oct-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ Fixed SCH_COMPONENT() copy constructor with Jean-Pierre's bug catch.
+ Developed a non-functional fbp file using wxFormBuilder for the new
+ dialog_edit_component_in_schematic dialog which I plan on coding in the
+ next couple of weeks as time permits.
+
+2008-oct-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Solved a bug when creating a new zone outline that could crash pcbnew
+ More about copper zones filled without grid (by polygons)
+ Currently for tests only (work in progress).
+ now working: Thermal reliefs parameters can be set.
+
+2008-oct-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ More about copper zones filled without grid (by polygons)
+ Currently for tests only (work in progress).
+ now working
+ thermal reliefs.
+ texts on copper zones.
+ Removing insulated copper islands.
+ currently : not implemented:
+ trapezoidal pads
+
+2008-oct-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ More about copper zones filled without grid (by polygons)
+ Currently for eyes and tests only (work in progress).
+ now working
+ thermal reliefs.
+ texts on copper zones.
+ To select this feature choose No Grid in zone grid filling.
+ Work in progress:
+ currently : not implemented:
+ Removing insulated copper islands.
+ trapezoidal pads
+
+
+2008-Oct-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ First work on arbitrary number of user fields, i.e. name/value pairs,
+ per schematic component. Use std::vector to hold fields, added GetField()
+ function to SCH_COMPONENT.
+
+
+2008-oct-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ First tests about copper zones filled without grid (by polygons)
+ Currently for eyes and tests only.
+ To select this feature choose No Grid in zone grid filling.
+ Work in progress:
+ currently : not implemented:
+ thermal reliefs (pads are always covered by copper zones).
+ texts on copper zones.
+ Removing insulated copper islands.
+
+2008-Oct-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ gen_modules_placefile.cpp: backed out of the "Cu & Cmp" centric terminology
+ and moved towards using layer names which are BOARD specific.
+
+
+2008-Sep-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ more about use polygons in zone fill algos on technicals layers:
+ plot Ok. holes are handled
+
+2008-Sep-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Starting work to use polygons in zone fill algos.
+ Currently, use this to add zone on non copper layers (technical layers)
+ Only for eyes.
+ Plot outputs do not handle this.
+ Problems with holes in zones.
+ Also: first used of wxFormBuilder
+
+
+2008-Sep-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Fixed a bug in modedit which crashes pcbnew when closing the properties module dialog
+ Both in trunk and tagged versions
+
+
+2008-Sep-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ code cleaning
+ PartTextStruct class name changed to a name : SCH_CMP_FIELD
+
+2008-Sep-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Fixed a problem in zone filling algo: due tu differents ways to truncate coordinates
+ between 2 functions (one round coordinates, and others truncate coordinates),
+ some start points used to fill zones can be inside the zone outlines,
+ but placed outside when init matrix parameters when rounding them instead of truncate.
+ So zone was filled inside and outside when happens.
+
+
+2008-Sep-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ Fixed a bug plotting pins with circles in them from eeschema.
+ Added type FILL_T.
+
+
+2008-Aug-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ subtle bug solved: no response to the first left click command after opening a dialog box
+ (after an item edition, for instance)
+
+2008-Aug-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ bug solved: netlist calculations could crash eeschema under very rare circumstances.
+ recent bug solved: background filled shapes (filled but not solid: texts are readables inside shapes)
+ were drawn (and plotted) as filled (solid) shapes
+
+2008-Aug-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ bug solved: Horizontal Oblong pads holes have a bad T Code size in the drill file.
+
+
+2008-Aug-15 UPDATE Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
++About dialog
+modified: (common.cpp) GetAboutBuildVersion() is a custom build version for the about dialog
+ (config.h.cmake)
+ (CreateSVNVersionHeader.cmake) KICAD_ABOUT_VERSION macro added
+
+added: (about_dialog.cpp) InitKiCadAbout() initalise the about dialog
+
+removed: (common/infospgm.cpp) is no longer needed
+
+
+2008-Aug-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ libedit:
+ solved : a bug which can crash eeschema on a double click.
+ modified : pin lenght edit in pin edit dialog. The value (handle by spin control) was not editable with recent wxWidgets versions
+
+2008-Aug-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ bug solved: pads holes not printed.
+ enforced controls against malformed libraries
+
+2008-Aug-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Removed an obsolete option in the plot menu, in gerber format.
+ Cleanup code.
+ Solved a minor bug: rastnest was not displayed after a move module
+ and if the command was aborted
+
+2008-Juil-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Added component sheet X,Y location in BOM.
+ Netlist generation: now spaces in names are replaced by '_' for pcbnew (which does not accept spaces)
+ Bug: print all pages did not work.
+ Please note in complex hierarchy, the current "Print All" function needs to be enhanced,
+ because it does not draw all sheets but only all different sheets
+
+2008-Jule-08 UPDATE Andrey Fedorushkov <andrf@mail.ru>
+================================================================================
++pcbnew:
+ Added displayed length highlighted net to pcbnew/affiche.cpp
+
+
+2008-June-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ Default path kicad/share added when searching kicad data (like library, internat ...)
+ Kicad data Default paths are now (windows version and linux server install)
+ 1 - kicad/share
+ 2 - kicad
+
+
+2008-June-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Bug solved: Eeschema crashed when creating a new subsheet with the same
+ filename as an existing filename, if loading this existing file.
+
+
+2008-June-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ Online doc format changed to PDF format.
+ This is **very** easier to handle, because :
+ - Openoffice has a very good pdf export function.
+ - Only one file for application
+ - Is standart (The old html format used a zipped archive, not standart)
+ - the doc tree is less complex (see doc/help/fr or doc/help/en for the new tree).
+
+ If a localized doc file is not found, the english version is automatically loaded instead.
+ No need to copy the same pdf file in subdirectory.
+
+
+2008-June-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ minor changes
+ added void SetLocaleTo_C_standard(void) and void SetLocaleTo_Default(void)
+ This is wrapper to the C setlocale( LC_NUMERIC, "C" )
+ and setlocale( LC_NUMERIC, "" )function,
+ but could make more easier an optional use of locale in kicad in floating point notations
+
+
+2008-May-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ removed GPC library due to its unacceptable (and stupid) license
+ using the powerfull kbool library insteed (see polygon/kbool)
++all:
+ minor changes
+
+
+2008-May-22 UPDATE Martin Kajdas <kajdas@cox.com>
+================================================================================
++all
+ Moved all XPM files to <kicad>/bitmaps directory and fixed all related files
++PCBnew
+ Changed File/Export shortcut from 'x' to 'e'
+
+
+2008-May-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved: problem in manual part selection for multiple parts per package components
+
+
+2008-May-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ Removed bitmaps.cpp. Made a static library target named "bitmaps" which
+ gets linked into any app needing bitmaps. Changed bitmaps.h to simply
+ include an alphabetized listing of the bitmap arrays.
+ We can now continue to migrate all remaining bitmaps into:
+ > the <base>/bitmaps directory
+ > the <base>/bitmaps/CMakeLists.txt file there
+ > the include/bitmaps.h file.
+
+
+2008-May-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved: bad update of toolbars (eeschema and libedit):
+ undo/redo buttons were not always updated after a change.
+
++kicad
+ the project tree now (as earlier) reads subdirs list files when starting
+ kicad. This feature can be disabled (see treeprj_frame.cpp)
+
+2008-May-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved netlist problems for multiple parts per package components
+ in complex hierarchies.
+
+
+
+2008-May-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++common.c
+ wrote wxString& operator << ( wxString&, const wxPoint& ) by moving code
+ from DRC_ITEM::ShowCoord()
++pcbnew
+ * embellished DRAWSEGMENT::MenuText() and DRAWSEGMENT::Display_Infos()
+ * wrote wxString BOARD_ITEM::ShowShape( Track_Shapes aShape )
+ * wrote wxPoint DRAWSEGMENT::GetEnd() which calculates the end point of an arc
+ * wrote DRAWSEGMENT::GetLength()
+ * Added S_ARC support to the specctra_export.cpp for EDGES_PCB with DRAWSEGMENTS
+ of arcs. Arc and lines can be intermixed, its just that they must be
+ contiguous. The user can now use the improved DRAWSEGMENT::Display_Infos() to
+ find any bad or non-contiguous DRAWSEGMENTS, since that function now shows
+ the two endpoints of any segment.
+
+
+2008-May-2 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
++cmake
+ * Use Subversion to automatically generate build date and revision level
+ when building with CMake. Header file build_version.h will still need
+ manual updates when using the hand written make files.
+
+
+2008-May-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added DRAWSEGMENT::GetStart(), GetEnd() and support S_ARC and S_SEGMENT
+ with it for now.
+ * Added arc support to pcb perimeter of the specctra export.
+
+
+2008-May-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added ZONE_CONTAINER::GetBoundingBox() and used it to clean up
+ ZONE_CONTAINER deletion.
+ * For end of edge dragging activity: used full DrawPanel->Refresh()
+ to clean up all XOR artifacts.
+
+
+2008-May-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Fixed bugs in layer name handling within the BOARD
+
+
+2008-Apr-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ made in some dialogs the ESC key working (linux version, already working under windows)
+ screen number and screen count now are set
+
+
+2008-Apr-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added WinEDA_PcbFrame::UpdateToolbarLayerInfo() by factoring it out of
+ ReCreateLayerBox().
+ * Changed call in void WinEDA_PcbFrame::SetToolbars() from ReCreateLayerBox()
+ to UpdateToolbarLayerInfo().
+ * Removed calls to SetToolbars() from:
+ > share/drawpanel.cpp's void WinEDA_DrawPanel::OnMouseEvent( wxMouseEvent& event )
+ > void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
+
+
+2008-Apr-28 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Layer names were not being set into the htoolbar listbox properly if the
+ BOARD was loaded via the command line as happens when kicad chain loads
+ pcbnew. Also, layer names were not being set if a second board was loaded
+ that had the same number of layers as the previous board. The solution was
+ to comment out the listbox rebuild test in WinEDAChoiceBox*
+ WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
+ * files.cpp: added Clear_Pcb( false ) to LoadOnePcbFile() and call it if
+ not appending. This way a user can get into the file selection dialog and
+ still abort (change his mind) without losing the current board. Removed calls to
+ Clear_Pcb() where LoadOnePcbFile() would now do that.
+ * edtxtmod.cpp: fixed the drawing relics when moving and rotating module texts.
+
+
+2008-Apr-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ PS output: now shows oblong holes with the true shape.
+
+
+2008-Apr-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ * Spent a 1/2 day tracking down two linked list bugs in deleting a
+ DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE. I cannot believe in the year
+ 2008 we should have to debug a linked list function. This is stuff I expected
+ to do 20 years ago, not today. The function
+ void WinEDA_SchematicFrame::DeleteSheetLabel( wxDC* DC,
+ Hierarchical_PIN_Sheet_Struct* SheetLabelToDel ) never worked as
+ far as I can tell.
+ Should switch to boost::ptr_vector ASAP everywhere, and leave linked lists in the 1980's.
+ * Hierarchical_PIN_Sheet_Struct::Hierarchical_PIN_Sheet_Struct() was not
+ setting the m_Parent.
+
+
+2008-Apr-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ * Added WinEDA_LibeditFrame::GeneralControle( wxDC* DC, wxPoint Mouse );
+ * Added WinEDA_ViewlibFrame::GeneralControle( wxDC* DC, wxPoint Mouse );
+ Needed: Move redundant code to WinEDA_DrawFrame::GeneralControle
+
+ ** Current sheet only Annotation and clear annotation now works for complex hierarchies
+
+
+2008-Apr-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ * Made a little more sense out of the GetScreen() problem by making it
+ non-virtual, and having the two types of frame classes (eeschema's and pcbnew's)
+ each return their respective types of screens {SCH,PCB}_SCREEN*.
+ * Added GetBaseScreen() as the virtual function which always returns BASE_SCREEN*.
+ * Made WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint Mouse ){ dummy }
+ * Added WinEDA_SchematicFrame::GeneralControle( wxDC* DC, wxPoint Mouse );
+ * Moved to void <class>::Place( WinEDA_SchematicFrame* frame, wxDC* DC ) from
+ void <class>::Place( WinEDA_DrawFrame* frame, wxDC* DC ) so that these
+ functions can use the new SCH_SCREEN* WinEDA_SchematicFrame::GetScreen()
+ function (the non-virtual one that returns SCH_SCREEN* not BASE_SCREEN*).
+ * Made some menus conformant to UIpolicies.txt regarding uppercase.
+ * Beautified 5-10 files.
+
+
+2008-Apr-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ very small bug in display component info removed
++pcbnew
++cvpcb
+ removed bug: forgotten paths when adding lib files when not in the default lib path
+ (same problem as in eeschema, solved in 2008-Apr-09 Update)
+
+
+2008-Apr-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ In complex hierarchies, multiples parts per packages now should work,
+ without restrictions
+ Update and use annotate_dialog.pjd to create annotate dialog
+
+
+2008-Apr-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ More code cleaning and Files cleaning and reorganization.
+ change DrawSheetLabelStruct class name to a better name: Hierarchical_PIN_Sheet_Struct
+ For simple Hierarchies, files are now compatables with old eescheam versions
+ In complex hierarchies, multiples parts per packages have still problems,
+ but i hope to solve that soon
+ (in fact all the last changes were made for that)
+
+
+2008-Apr-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ code cleaning. SCH_ITEM class used for all schematic items in eeschema.
+ Files reorganization.
+
+
+2008-Apr-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ code cleaning.
+
+
+2008-Apr-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ removed bug: forgotten paths when adding lib files when not in the default lib path
+ Also: adding SCH_COMPONENT.m_PartPerPackageSelections to handle multiple parts per package selection
+ in a complex hierarchy, but yet, no other code to do that.
+
+
+2008-Mar-30 UPDATE Jonas Diemer <diemer-at-gmx.de>
+================================================================================
++eeschema
++pcbnew
+ Display a warning on a file format version mismatch.
+
+2008-Mar-31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ Tweaked class MsgPanel so that the screen drawing only happens from
+ its OnPaint() function.
++pcbnew
+ Added virtual BOARD_ITEM::Draw() and forced all BOARD_ITEM derived classes
+ to implement it so that all these functions are also virtual.
+ Made the offset argument default to the new wxPoint BOARD_ITEM::ZeroOffset.
+ Coded DRAWSEGMENT::Draw() from Trace_DrawSegmentPcb() and removed the latter.
+ Coded EQUIPOT::Draw(), and BOARD::Draw(). Both are dummies for now, but
+ both can be reasonably implemented in the future.
+
+
+2008-Mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Solved: eeschema crashes when create a new sheet, using the default filename and enter it.
+ Solved: eeschema crashes when delete a sheet label (pin sheet), undo this and move the label.
+ (bad value (not updated) for the DrawSheetLabelStruct.m_Parent member after redo command in sheet edit).
+
++all:
+ Added comments in gestfich.cpp to explain the default paths used by kicad to find help files and lib files
+
+
+2008-Mar-30 UPDATE Jonas Diemer <diemer-at-gmx.de>
+================================================================================
++eeschema
+ Removed artifacts resulting from redraws in XOR-Mode.
+
+2008-Mar-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Ensure graphic and footprint texts have a sufficient size to be seen on screen.
+ (bug 1909165, due to text on edge layer with a 0 value for X size)
+
+2008-Mar-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Netlist dialog redesigned, netlist.cpp code modified
+ and added an option to remove not locked footprints
+ when not found in netlist
+
+
+2008-Mar-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ pcbplot.cpp now saves the selected layers as wxConfig options,
+ i.e. retentitively. The ESC key now works in that dialog.
+ Make upper/lower case conformat to UIpolicies.txt
+ Put buttons at bottom, "Close" as bottom button.
+
+
+2008-Mar-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Removed an very old bug in onrightclick.cpp which crashes eeschema when
+ right clicking in a field inside a component.
+ Old code should never works, but ...
+
+
+2008-Mar-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ refined the dialog_freeroute_exchange
+ If possible (i.e. if freeroute.jnlp is found in kicad binary directory) javaws is called insteed of the default browser)
+ So @todo removed
+
+2008-Mar-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ Renamed some classes and their corresponding KICAD_T types so they are both
+ simpler, shorter and more closely match each other: the type and the classname.
+ Wedged a class SCH_ITEM underneath most eeschema drawable items, and this
+ class came from DrawPartStruct which was largely disfunctional. Eeschema
+ now more closely matches what we have in pcbnew with the BOARD_ITEM base class.
+ The corresponding class in eeschema is now SCH_ITEM. Put in some of Jonas'
+ patch for the dragging of a block. Needs testing, especially dragging
+ text since there is no GetBoundingBox() for that yet. As an interrim solution
+ we could make SCH_ITEM::GetBoundingBox() return a HUGE rectangle so that any class
+ not implementing GetBoundingBox() in eeschema will get properly re-drawn,
+ in theory.
+
+ We are currently using XORing for dragging a single object and using full
+ redraws for dragging a block. I suppose this can be an experiment for a
+ week or so. I would not expect that dragging a block of labels with no
+ other object to work currently (i.e. *visually* correctly).
+
+
+2008-Mar-19 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
+ * Support for Gnome/KDE menu added.
+ * install.txt rewritten and must be used as main source of information for
+ KiCad installation.
+ * how-to-build-kicad.txt deprecated.
+ * how-to-build-for-windows.txt deprecated.
+
+
+2008-Mar-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ refined the dialog_freeroute_exchange.pjd file, adding tooltips, wording
+ changes, wxID_CANCEL so ESC key closes, and added this comment also:
+ // @todo:
+ // 1) add freeroute.jnlp to the Kicad project
+ // 2) change this next C++ line simply run $ "javaws freeroute.jnlp" as a system
+ // command, bypassing the browser altogether. Merely need a PATH to javaws.
+
+
+2008-Mar-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ MODULE::GetBoundingBox() takes in account the clearence around the pads
+ (the clearence limit shape around pads (when shown) was not always erased )
+
+
+2008-Mar-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Fixed a crashing bug which occured when you run the module editor, select
+ "Update module in current board" and then run the DRC checker after that.
+ * Changed to void CreateSortedPadListByXCoord( BOARD* aBoard, std::vector<D_PAD*>* aVector )
+ So caller can safely forget to delete the array of pad pointers and the vector's
+ destructor handles this automatically.
+ * Delete pad from within PCBNEW, not module editor, now uses PostDirtyRect()
+
+
+2008-Mar-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ * cleaned up some xor artifacts, see eeschema/getpart.cpp's comment:
+ // switch from normal mode to xor mode for the duration of the move, first
+ // by erasing fully any "normal drawing mode" primitives with the PostDirtyRect(),
+ // then by drawing the first time in xor mode so that subsequent xor
+ // drawing will fully erase this first copy and then the previous copy.
+ * redraw the entire screen at end of a component move.
+ * added many calls to Refresh() to eeschema/onleftclick.cpp and in such cases
+ I now pass a NULL DC to TestDanglingEnds()
+
+
+2008-Mar-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+ some code cleaning and comment translations.
+ added:
+ /** EDA_Rect::Merge( EDA_Rect & aRect )
+ * Modify Position and Size of this in order to contain the given rect
+ * mainly used to calculate bounding boxes
+ * @param aRect = given rect to merge with this
+ */
+
+
+2008-Mar-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Added a tool to the upper toolbar which gives and easy access to freeroute
+ Solved a bug in plot postscript format when drawing oblong pads:
+ Bad oblong pad size after drawing a round pad
+
+
+2008-Mar-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Dirty rect used in footprint rotation, flip and delete.
+ Better calculation of the footprint dirty rect.
+
+
+2008-Mar-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ Added bool EDA_Rect::Intersects().
++eeschema
+ Added provisionary calls to eeschema/eeredraw.cpp for
+ if( panel->m_ClipBox.Intersects( item->GetBoundingBox() ) )
+
+
+2008-Mar-11 UPDATE Per Uddén <p.udden@telia.com>
+================================================================================
++3d-viewer
+ * Fix TODO: Add S_ARC and S_CIRCLE shape render to board edge and module edge.
+ Ex. Now is a board with arcs at corners showing correctly.
+
+
+2008-Mar-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Improved some comments on new functions dirty area functions
+ * Changed
+ void ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ); to
+ void ConvertPcbUnitsToPixelsUnits( EDA_Rect* aRect );
+ which I prefer because it is clearer to the human reader of the calling
+ context that the passed argument is to be modified. References as function
+ arguments are fine, but if they are to be modified, passing by pointer
+ gives human reader a clearer picture when looking at the calling context.
+ * TRACK::GetBoundingBox() now (1) rounds up the radius, and (2) returns a bounding
+ box which is [pos,dim) in nature, [inclusive, exclusive).
+ * Changed from "new wxDCClip()" to use an automatic wxDCClip() variable in
+ drawpanel.cpp
+ * Removed a printf() from "release" build of drawpanel.cpp
+ * Added WinEDA_DrawPanel::PostDirtyRect()
+ * Renamed Supprime_Une_Piste() to Remove_One_Track() and it now uses
+ PostDirtyRect().
+ * void WinEDA_PcbFrame::Delete_net( wxDC* DC, TRACK* Track ) now redraws
+ the screen after a net deletion.
+ * eeschema/dialog_find.cpp: set the initial keyboard focus to the text control
+
+
+2008-Mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Pcbnew can import footprints in gpcb format in Nelib format only
+ Pcbnew automatically recognizes pcbnew or gpcb format when importing a footprint.
+ Due to differences between pcbnew and gpcb,
+ only gpcb newlib files containing only one footprint (one element) are useables.
+ Dirty rectangle calculation debugged.
+ WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ) can be used to convert a bouding box to a clip box
+ (see example in deltrack.cpp)
++eeschema:
+ restored: missing lines in schedit.cpp (problems in a lot of commands)
+
+
+2008-Mar-06 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++help
+ Eliminated bug "help files not found!".
+
+
+2008-Mar-5 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Solved problem in fill zone calculations when using buried or blind vias (like micro vias)
+
+
+2008-Feb-18 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++common
+ Path for the help files changed to doc/help.
++help
+ help moved to the doc/help.
++doc
+ Separated from KiCad source code to the trunk/kicad-doc.
++library
++modules
+ Separated from KiCad source code to the trunk/kicad-library.
+
+
+2008-Mar-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Completed transision to BOARD::GetLayerName() and away from ReturnPcbLayerName().
+ LayerNames and LAYER_T are saved in the *.brd file and may be edited
+ there with a text editor until the UI is in place to edit them in PCBNEW.
+ To understand the strategy, see BOARD::GetLayerName() in class_board.cpp
+ and see WinEDA_BasePcbFrame::ReadSetup(). I will be adding "Board" menu
+ item to Preferences, but there is more to come before the UI gets done:
+ net classes.
+ * Clear_Pcb() now deletes the existing BOARD() and new's a new BOARD() so that
+ the default BOARD::m_Layer[] values can be set in the new BOARD's constructor.
+
+
+2008-mars-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+3d display:
+ Added Jonas Diemer's patch (enhanced movings from mouse and tools)
+
+
+2008-Mar-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ Changed ioascii.cpp to save and load board specific layer names, for DEBUG
+ build only. I want to add class LAYER, see below. Added
+ BOARD::SetLayerName(), BOARD::SetLayerType(), and BOARD::GetLayerType().
+ Will add a UI for editing those soon as soon class LAYER is stable. The
+ BOARD::SetLayerXXXX( int layerNdx, VALUE ) functions would simply route to
+ LAYER::SetXXXX( VALUE ). Then layer specific global variables would migrate
+ to the BOARD::LAYER[]s.
+
+ Jean-Pierre please have a look at pcbstruct.h's class LAYER which is just a
+ prototype for now. EDA_BoardDesignSettings::m_LayerColor would go away,
+ and then I would add LAYER[] to EDA_BoardDesignSettings or BOARD.
+ Whether EDA_BoardDesignSettings or BOARD I don't have a strong preference.
+ I understand this is a bunch of work, and there are tricks needed to handle
+ adding and deleting the number of layers....
+
+
+2008-Feb-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ controle.cpp: fixed the magnetic track if tracks are parallel.
+
+
+2008-Feb-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Renaming the sheet filename now works in simple and complex hierarchies.
+ Use carefully because this can change the whole schematic structure.
+ Gen Bom List now works in unicode build version
+ (label list generation crashed eeschema in unicode build version)
++all
+ Display filename and full sheet name ("sheet path") in sheet reference
+ the full sheet name has no meanning in pcbnew.
+
+
+2008-Feb-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Fixed: problem which could crash eeschema when a sub schematic file in a hierarchy was not found.
+
+
+2008-Feb-27 UPDATE Wayne Stambaugh <stambaughw{at}verizon{dot}net>
+================================================================================
++ eeschema
+ * fixed escape key handling and add accelerate keys in annotate dialog.
+ * factored out eeschema frame class to prevent rebuild of entire project
+ when making changes to eeschema frames.
+ * refactor main eeschema event loop by factoring out most of the non-drawing
+ events.
++ cmake
+ * small fix to root CMakeList file to prevent GCC flags being used with
+ other compilers.
+
+
+2008-Feb-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ changed in class DrawSheetStruct m_s member name to m_AssociatedScreen
+ some others minor problems solved.
+ some files "uncrustified"
+ Major problem in undo/redo when a sheet is deleted not yet solved
+ Only for a complex hierarchy, could lost data.
+ When a sheet is deleted by block delete. it is put in undo list.
+ It is really deleted after 10 changes (when the undo list is full).
+ At this time, the associated data is also deleted.
+ If an other (not deleted) sheet shares the same data, this data is lost.
+ Need work to solve this problem and keep the undo/redo feature.
+
+
+2008-Feb-25 UPDATE Wayne Stambaugh <stambaughw{at}verizon{dot}net>
+================================================================================
++eeschema
+ * converted annotate_dialog layout to Gnome HIG per UIPolicy.txt factor
+ out dialog code from annotate.cpp.
+ * refactor and uncrustify schframe.cpp and schedit.cpp
+ * modify eeschema CMakeList.txt to reflect code changes.
+
+
+2008-Feb-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * specctra_export.cpp: added DSN 'outline' support from EDGE_MODULEs.
+ lines and circles, not arcs.
+ * factored out EDGE_MODULE::ShowShape() from EDGE_MODULE::Show().
+ * drc.cpp changed AsSecondItem to HasSecondItem and test it in generating
+ the file report and when making the popup menu in the dialog_drc and
+ when generating the html list item.
+
+
+2008-Feb-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ added : full text conversion between text, label, global label and hierarchical label
+ some problems fixed:
+ - annotation incorrectly cleared.
+ - reference not copied in component copy.
+ - incorrect redo when changing the chip name in component edition
+
+ bugs not fixed:
+ - incorrect annotation in complex hierarchy with multi parts per package (duplicates created).
+
+
+2008-Feb-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Fixed bug in getpart.cpp:
+ eeschema crashed when aborting a new component place command
+ Global Symbols now have their shapes
+ Bad global label shape fixed when reading a schematic file
+
+
+2008-Feb-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra_export.cpp fixed the offset problem with freerouter.net.
+ http://tech.groups.yahoo.com/group/kicad-devel/message/1076
+
+
+2008-Feb-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ Add ZONE_CONTAINER support to the ID_PCB_HIGHLIGHT_BUTT tool and
+ WinEDA_PcbFrame::DrawHightLight(). Added TYPEZONE_CONTAINER to
+ GENERAL_COLLECTOR::AllButZones[] so that containers are editable even
+ when the "Show Zones" toggle is off. This came from using the software
+ and realizing that if something is visible (zone containers remain visible
+ even when Show Zones is off) then it should be selectable. Otherwise it is
+ confusing and frustrating.
+
+
+2008-Feb-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Start to use BOARD::GetLayerName() in anticipation of configurable layer
+ names per board.
+ * Comment out a printf() which will lock up pcbnew when
+ it is run under kicad project manager and the interprocess fifo gets filled.
+ * Cross probe was not showing the not found message properly. wxString was
+ being used for two purposes, input and Printf() destination.
++gerbview
+ Now loads all gerber files given on the command line, not just one. The
+ first file is loaded into layer 1 (index 0), the second one is loaded
+ into layer 2 (index 1) etc.
+
+
+2008-Feb-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Fixed bug in gen bill of material (dialog_build_BOM.cpp):
+ eeschema crashed when created a B.O.M. (i think: unicode version only)
+
+
+2008-Feb-18 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++eeschema
+ Added menu View with all possible elements from the top toolbar.
+ Find item added in to the Edit menu.
++all
+ Translated part of IDs to english.
+
+
+2008-Feb-15 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++eeschema
+ Added item "Delete" in "Edit" menu.
+ Added menu "Place" with all possible elements from the right toolbar.
+
+
+2008-Feb-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra export: now generate unique pin names from module padnames in the
+ case where there are non-unique pad names within a module. Tested with
+ Electra demo, and *.dsn files load OK in there as well as in freerouter.
+ Stopped using reserved layer name "signal" and instead output a full
+ padstack consisting of all pertinent layers for via, pads, and keepouts.
+
+
+2008-Feb-12 UPDATE Tim Hanson sideskate@gmail.com
+================================================================================
++eeschema
+ * commiting my changes to allow multiple instances of a given schematic file within a hierarchy:
+ ** internally, m_currentScreen has been replaced with m_currentSheet,
+ which is a list or 'path' of screens. The path of screens is used to generate
+ a series of timestamps, which is converted to flat component reference via a look-up
+ table in the schematic files.
+ ** this means that m_currentScreen is no longer used -- use GetScreen().
+ ** GetScreen is virtual, as some of the dialogs keep around a WinEDA_BaseScreen pointer.
+ ** all sub-sheets in a given schematic must have different names to generate a meaningful netlist.
+
+
+2008-Feb-12 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++eeschema
+ Added item "New" in "File" menu
++all
+ Russian translation update.
+
+
+2008-Feb-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added case TYPETRACK, TYPEVIA, and TYPEMODULE support to Board::Add() so
+ that we can over time hide more of the storage architecture of a BOARD and
+ isolate those dependencies in fewer places.
+ * Fixed some pad orientation issues in specctra_export.
+ * Added VIA_MICROVIA & VIA_BLIND_BURIED support to SPECCTRA::makeVIA().
+ * Commented out the specctra design import menu choice for now, don't have
+ time or need for this import.
+ * Specctra export adds 1/2 mil to clearance rules for freerouter so that
+ the routed board clears our DRC checker OK.
+ * Session import seems done now.
+
+
+2008-Feb-7 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ added "const" to SEGVIA::GetDrillValue() const;
+ added GetDrillValue() to DRC instead of accessing SEGVIA::m_Drill directly.
+ changed specctra_export so it aborts if all reference designators are not
+ unique. Unless they are unique we cannot import the routed session. A
+ good example is the xylinx board which now fails to export.
+ first rough work on SEGVIA::makeVIA() but needs much more work. Simple
+ session files with vias at least import. Now encode drill diameter in
+ padstack name for later session import.
+ updated todo.txt file.
+
+
+2008-Feb-7 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra import of *.ses, did tracks and components.
+ renamed copy_track.cpp to copy_track.cpp.notused
+ removed copy_track.cpp from pcbnew/CMakeLists.txt
+ added setlocale() around import and export for float text style.
+
+
+2008-Feb-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ started specctra imports of *.ses and *.dsn, by adding menus to File | Import.
+
+
+2008-Feb-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra_export.cpp now supports blind/buried/microvias. Fixed how modules
+ are displayed on back of board. Added a circle keepout for each copper-less
+ through hole.
+
+
+2008-Feb-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * specctra_export.cpp was not exporting the nets correctly, now fixed.
+ * Had a problem with an isolated pad modification on a single module instance
+ in the context of several unmodified instances of same module, now fixed.
+ * Fixed oval pads to make freerouting.net happy.
+ See: http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408
+ Done with specctra export for now, will think about adding controls (by dialog)
+ on the export later.
+ * Beautification of a few modules.
+
+
+2008-Jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ remove the old EDGEZONE class.
+ A ZONE_CONTAINER class is used instead to handle the creation of a new zone outline
+
+
+2008-Jan-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ SPECCTRA export does most items now, except existing tracks. Soon will
+ need testing.
+
+
+2008-Jan-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ - Better criteria to find starting poind in zone filling: the filling alg. uses
+ pads, vias and track ends to find where start the filling.
+ - Added a tool + option in popup menu in track mode (select track width):
+ when creating a track, if activated: if we starts on an existing track,
+ the new track takes the width of the existing track
+
+
+2008-Jan-27 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all:
+ I got a patch from Mr. Wayne Stambaugh which makes it possible to compile
+ infospgm.cpp once and link the same *.o file multiple times.
+ Jean-Pierre, if you not yet using CMake, you should edit your make.include
+ so that infospgm.cpp is only compiled once for everything, not once per
+ program. Wayne is a competent developer who contacted me about contributing.
+ I consider him a welcome addition to the developers, Dick.
+
+
+2008-Jan-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * SPECCTRA export does padstacks ok, except that oval pad's arcs need to be split
+ into quarter circle arcs, and no consideration is given to "layer types".
+ See page bottom of page 74 of the SECCTRA Design Language Reference, May 2000.
+ * HISTORY_NUMBER was spelt with a zero.
+ * Width was spelt as Widht
+
+
+2008-Jan-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ - void Change_Side_Module( MODULE* Module, wxDC* DC ) is now member of class BOARD.
+
+ - Better support for micro vias and buried vias (drill files now are useable for board manufacturers)
+ But not yet tested by a board manufacturer. Be carefull.
+ Todo: tools to conversion between via through and buried via and buried viad optimisation.
+ But must works for micro vias (needed for my next board)
+ (in pcbnew micro vias are blind vias between 2 adjacent layers: micro vias must be enabled
+ in Dimensions/track and via menu, and placed by ctrl v.
+ They are intended to connect small pitch BGA pins to the inner layer, and can be drilled by laser
+ if the hole diameter is small < 0.2mm. A laser can only drill a hole between 2 adjacent layers ).
+
+ ** Currently use buried via for tests only, not for production **.
+
+
+2008-Jan-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Export a specctra *.dsn file includes some padstacks, not ovals yet.
+ * Many many refinements to specctra.cpp and specctra.h.
+ * added COLLECTOR::BasePtr(), which is used in qsort. Could have used
+ * std::sort() instead.
+ * Wrote D_PAD::Compare()
+ * updated todo.txt
+
+
+2008-Jan-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Bugs about fill zones removed (not all, of course).
+ Fixed an old bug in block delete (could crashes pcbnew after deleting footprints).
+
+2008-Jan-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Export a *.dsn file includes ZONE_CONTAINERs, was actually able to load
+ a board with zones into the freerouter.net package! No components, traces yet,
+ just zones and layers. Fixed parsers and Format()ers.
+ * Rewrote SPECCTRA_DB::readTIME() to dodge a missing strptime() on windows.
+
+
+2008-Jan-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Plot option in GERBER format Plot (Exclude Edge Pcb layer) modification:
+ - the default is OFF (like odl pcbnew versions)
+ - this setup is now save in config (is persistant)
+
+ In Zone creation, now delete last created corner works.
+
+2008-Jan-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Actually able now to export a *.dsn file, but the contents of the file
+ is incomplete, not a complete input BOARD.
+ * Added DRAWSEGMENT::Show() for debugging.
+ * Changed specctra.h's POINT to use double for coordinates. Changed format
+ string for Format()ing a double.
+ * Changed specctra_export.cpp to actually output an incomplete file.
+ * Added BOARD::GetCopperLayerCount() and BOARD::GetLayerName().
+
+
+2008-Jan-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ Added specctra_export.cpp, specctra.cpp, specctra.h, dsn.cpp, and dsn.h to
+ pcbnew's link requirements. Updated CMakeLists.txt to reflect this. This
+ increased pcbnew's size by 175kb so far. Started the actual export (i.e.
+ BOARD to DSN::PCB copying logic) which is going into specctra_export.cpp's
+ void WinEDA_PcbFrame::ExportToSPECCTRA( wxCommandEvent& event ) so that the
+ huge header file, specctra.h need only be included in one or two *.cpp
+ files. The specctra export menu support was added to id.h, wxPcbStruct.h,
+ menubarpcb.cpp, and pcbframe.cpp. After dsn export, I intend to add an
+ import, and a session file feedback merge. See the revised
+ how-to-build-kicad.txt for the new boost c++ libraries requirement.
+
+
+2008-Jan-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ labels and texts display changed when rotated 180 degres:
+ horizontal text are now right justified insteed of 180 degree rotated, and are readable.
+
++pcbnew:
+ bug 1874663 solved (edit a pad netname does not work very well)
+
+2008-Jan-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ On line DRC when creating a zone outline.
+ Needs more work to display errors DRC.
+
+
+2008-Jan-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ filtering small mouse moves ( < 5 pixels) when clicking.
+ Starting a wire or a track is now more easily because these small moves do not start a block commnad.
+
++pcbnew:
+ rework of drill filles creation (excellon and reports)
+ needed to have a clean implantation of buried vias and mainly microvia
+ which involve a more complex drill files generation
+ This is better to continue work on zones because :
+ hight density boards = use of BGA = microvias + good zones handling
+ When a board has buried or blind vias (microvia are blind vias),
+ pcbnew creates a drill file per layer pair. for a 4 layer board:
+ drill file for layer1 to layer 2
+ drill file for layer2 to layer 3
+ drill file for layer3 to layer 4
+
+
+2008-Jan-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+ how-to-build-kicad.txt: added the Boost C++ Libraries installation info
+ and requirement.
+
+
+2008-Jan-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Move Zone outlines added
+ Zone outline DRC works (needs improvements)
+ some bugs solved, but polyline.cpp still needs work.
+ gendrill: code cleaning.
+
+2008-Jan-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ code cleaning:
+ DRAWSEGMENT class functions moved in the new files class_drawsegment.cpp et .h
+
+
+2008-Jan-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ missing footprints in export netlist (bug 1867321)
+ Affected: PadsPcb converter did not list all footprints
+
++pcbnew:
+ fixed: memory not freeed in block copy (minor bug)
+ Support for micro vias (generation of drill files not finished)
+
+2008-jan-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Block commands now works with zones.
+ Some code cleanning.
+
+
+2008-Jan-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Added pad_shapes.h and blended it into class_pad.h and PolyLine2Kicad.h.
+ Renamed the pad shapes in there to avoid namespace conflicts.
+ RECT became PAD_RECT, CIRCLE became PAD_CIRCLE, etc.
+ * common.cpp's ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
+ has commented out code that I tested as part of a possible new scheme to support
+ custom layer names per project.
+ * More specctra dsn import export work.
+
+
+2008-jan-05 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Added: Delete cutout outline in zone popup menu
+ the GUI about zones is now working.
+ Some work is needed ( a zone in a zone of the same net is not merged )
+ Currently No DRC for outlines
+
+
+2008-jan-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ More about zones:
+ Outlines can be edited. Outlines are merged if needeed.
+ Currently No DRC for outlines
+
+
+2008-jan-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all
+ wxstruct modified and wxPcbStuct.h added:
+ classes relatives to pcbnew, cvpcb and gerbview are moved in wxPcbStuct.h
+
diff --git a/Documentation/changelogs/CHANGELOG-2009.txt b/Documentation/changelogs/CHANGELOG-2009.txt
new file mode 100644
index 0000000..fbdae4f
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2009.txt
@@ -0,0 +1,1013 @@
+KiCad ChangeLog 2009
+====================
+
+
+2009-Dec-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Added option to use some usual Gerber files extension, depending on the layer
+ Do not allow in plot menu to output files for non enabled layers.
+++Kicad and Gerbview
+ Display Gerber files that use usual files extension (in tree project or dialog files)
+ (See http://en.wikipedia.org/wiki/Gerber_File)
+
+2009-Dec-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Renamed dialog_layers_setup* files.
+ Got rid of the header file since there was only one file including it.
+ Auto-position the column titles based on flexgridsizer column widths.
+ Added m_TitlePanel with contrasting background color (whose color value may not
+ be ideal for all platforms).
+
+
+2009-Dec-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Finished the Layer Setup Dialog. I assumed that the new layer order will
+ be in place soon. It works fine now, but the layer order is probably
+ misleading, since it does not reflect the current stackup but rather the
+ future stackup. I dropped support for a single layer board. The minimum
+ is two copper layers. Avoid the side you don't want anything on.
+
+ Within a month I should have the layer visibility and selection widget
+ in place.
+
+
+2009-Dec-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ * Factored out the DSNLEXER class so it can be re-used more generally. The
+ constructor takes a keyword table, so it can be used for arbitrary DSN
+ syntax files of your own chosing. Simply create an enum {} with all your
+ unique tokens in it. Then create a KEYWORD table. See SPECCTRA_DB::keywords[].
+ The reason you want an enum is to give the C++ debugger better type information
+ so it can show symbolic integer symbols.
+ * Factored out common richio.cpp and richio.h
+ which is what DSNLEXER uses.
+ * Fixed some minor issues with reading circuit descriptor from a *.dsn file.
+
+
+2009-Dec-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * Moved ReturnLayerName() to static BOARD::GetDefaultLayerName() and migrated
+ to a Specctra DSN compatible default layer naming scheme:
+ Component becomes Front, Copper becomes Back.
+ * set_color.h: Cmp becomes Front, Cu becomes Back.
+ * D_PAD::DisplayInfo() changed to use actual copper layer names.
+ * more layer setup dialog work, moved all programmatic wxControl instantiation
+ into the wxFormbuilder environment, but this is fraught with danger:
+ wxFlexGridSizer used the tallest control to establish the row heights, so
+ be careful about changing control borders in the scroll panel. The vertical
+ size can explode since just a couple of pixels times the number of rows
+ is substantial. Currently I am setting a 5 pixel border only left, top, and right
+ but not bottom.
+ * Set copper layer count is back in place as a hack until I can get the enabled
+ layer bit map fully operational.
+
+
+2009-Dec-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Make the source file to the specctra freerouter help panel be html, not *.h
+ This makes it easier to preview the page in a browser. Then autogenerate
+ the *.h file from the html using a CMake script.
+
+2009-Dec-2 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Compiler warning, object name, bug, and string fixes.
+* Fixed EESchema options dialog focus bug so escape key now works in GTK.
+* Rename schematic objects for improved readability.
+* Fixed GCC compiler warnings in plot code.
+* Added paragraph in UIpolicies.txt about setting dialog box sizes.
+* Lots of message box string clean up.
+
+2009-Nov-05 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ control of masks clearance: Pad Editor Dialog rewritten to handle mask clearances
+ and a locad Net clearance
+
+2009-Nov-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ CMakeLists.txt support for AUI.
+
+
+2009-Nov-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Added: control of masks clearance
+ - Solder mask clearance can be now defined at footprint and pad level
+ - Solder paste clearance can be now defined as a global value
+ and also at footprint and pad level.
+ The clearance is defined by a constant value and a value proportional to the pad size.
+ The final value is the sum of the 2 partial values
+ Note: this is a work in progress:
+ currently, the pad dialog is not finished and does not
+ have an option to enter the mask values
+ Planned:
+ option to define a net clearance at pad level and footprint level,
+ as an alternate value to the Netclasses values.
+ this option could be useful to create fiducials, and for very small footprints.
+
+
+2009-Nov-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * Added exporting of netclass vias to specctra_export.
+ * DIALOG_DESIGN_RULES now remembers its last selected TAB and screen position and
+ window size, and its grid columns are automatically expanded to fit the
+ column titles. Remembering screen position and size allows someone with
+ multiple monitors to have a given window always come up on the monitor last chosen
+ for it.
+
+
+2009-oct-30 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Replace library editor pin properties dialog box and minor update.
+* Replaced library pin properties dialog with wxFormBuilder version.
+* Remove DialogBlocks version of pin properties dialog.
+* Add pin properties dialog support code to pin object.
+* Create single event handler for displaying pin properties dialog.
+* Remove left over DialogBlocks project file for annotate dialog.
+* Fixed escape key bug in library editor new component dialog.
+* Add GetUnitsLabel() to get human readable units for dialog labels.
+* Translate French comments in all modified files.
+* Some minor clean up of Doxygen comments.
+
+2009-oct-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Rewrite the GUI relative to the tracks widths and vias diameters and drills selection
+ and edition, for compatibility with new netclass approach.
+ Now vias dimensions are defined by their diameter and drill values
+ (This is also a simpler an better way than the old one that considers
+ via diameters and drill values as independant parmeters)
+ When set a via to a "custom" value, the diameter and the drill values are set.
+ (of course one can use the drill defualt value of the netclass)
+ So the via hole edit options (in popup menu) does not exist no more.
+ The global tracks widths and vias diameters and drills changes are now
+ accessible by a specific dialog frame.
+
+
+2009-oct-27 UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+++common
+ Doxygen output directory changed to Documentation/doxygen
+ Cleanup of HOTKEY IDs
+ Creation and cleanup of hotkey submenu
+
+++misc
+ Moved pcbcfg.cpp to pcbnew_config.cpp
+ Moved eeconfig.ccp to eeschema_config.cpp
+ Fixed typos
+
+2009-oct-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Rework on print function: fixed the fully broken print function in Modedit
+ and better code.
+ Removed the display vias option tool in Modedit and Gerbview left toolbar,
+ because this option has no sense here.
+
+2009-oct-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ * Work on Net Classes: tracks and vias sizes, vias drill
+ come from netclass netclasses values. Global values removed.
+ * Added for DRC drill vias and microvias min drill value
+
+2009-oct-20 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Replace component library editor draw item dialog box.
+* Created new component library editor draw item dialog box with
+ wxFormBuilder.
+* Removed previous DialogBlocks version of the draw item dialog box.
+* Removed some additional global variables used in component library
+ editor.
+* Add IsFillable() method to draw item base object.
+
+wxWidgets 2.9 string fixes and other minor updates.
+* Replace all known instances of (const wxChar*) casts to GetChars() for
+ wxWidgets 2.9 compatibility.
+* Cleaned up get component dialog so last part gets saved on wild card
+ selections.
+* Remove redundant schematic component drawing code.
+* Added SCH_COMPONENT constructor to create new component from library
+ component object.
+* Add message panel helpers to WinEDA_DrawFrame and update old message
+ panel access code.
+* Using library viewer to add component to schematic now respects unit
+ and body style selection.
+
+2009-oct-14 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Fix save last grid size and other minor updates.
+* Create single event handler for grid size events.
+* Fix all frame windows to use new grid size event handler.
+* Use offset relative to ID instead of ComboBox index to save last grid size.
+* Move last grid size load/save setting into WinEDA_DrawFrame.
+* Add equality and assignment operators the GRID_TYPE.
+* Add current grid helper methods to BASE_SCREEN.
+* Add GetPins helper to LIB_COMPONENT to replace GetNextPin where applicable.
+* Add AppendMsgPanel helper to WinEDA_DrawFrame.
+* Improve rounding for display of coordinates when millimeter units are selected.
+
+2009-oct-01 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+* Component library viewer restores state between uses.
+* Fixed automatic zoom calculations in library viewer.
+* Make library entry list dialog restore previous selection.
+* Fix bounding box calculation for vertical field and text draw objects.
+* Changed library draw object comparison to test for greater and less than.
+* Initial preparation for merging separate library component draw item lists.
+
+
+2009-sept-29 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+* Eliminate external direct manipulation of component draw item pointer.
+* Add draw item remove, add, and locate methods to library component object.
+* Remove redundant locate pin, field, and draw item code.
+* Fix add new pin drawing bug that left initial pin draw in place.
+* Improved best zoom calculations for small components.
+* Library component bounding box calculation now includes fields.
+* Removed unnecessary header file "libcmp.h".
+* Fixed potential locate draw item bug in library editor hot key handler.
+
+2009-sept-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ * make pcbnew compatible with last changes
+ (Delete base screen in WinEDA_DrawFrame destructor to prevent potential memory leak.)
+ * Starting complementary work on Net Classes (moving target)
+
+2009-sept-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Component library editor improvements and minor bug fixes.
+* Component library objects renamed for improved readability.
+* Fields now move when selected in library editor.
+* Add copy constructor to all library draw and library component objects.
+* Added copy constructor to EDA_BaseStruct.
+* Delete base screen in WinEDA_DrawFrame destructor to prevent potential memory leak.
+* Fixed memory access bug when replacing and adding a component to library.
+* Moved library component block manipulation code into component object.
+* Removed all of the global variables used by the library editor main window object.
+* The usual code cleaning and refactoring.
+
+2009-sept-22:
+Command ID refactoring and other minor improvements.
+* Split out application specific command IDs to prevent unnecessary rebuilding.
+* Eliminate duplicate menu and tool bar command IDs.
+* Split component library editor and viewer definitions to separate header files.
+* More component library and document file merge code.
+* A bunch of minor string readability and consistency fixes.
+
+2009-sept-18:
+Component library object and other minor improvements.
+* Create static component library methods to manage library list.
+* Rename component library, component, and alias objects to more readable name.
+* Use pointer to component instead of root name to prevent redundant library searches.
+* Add append message helper to message panel that calculates string length.
+* Initial ground work for merging library and library document files.
+* Improved component library file load error checking.
+* Minor component library editor improvements.
+
+
+2009-sept-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Speed up ZONE_CONTAINER::Copy method
+ Speed up NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) by using afast binary search
+ Switch to kbool V2.1. This version solves others problems in zones calculations.
+ Adding an other way to generate thermal shape; DO NOT USE: this is for kbool tests only
+ (I am thinking some bugs are remaining, so i am always working on kbool tests.
+ Klaas Olwerda is supporting me)
+
+
+2009-sept-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ moved copper layers properties (layers couns anf layers names) from Design rules
+ to a specific dialog.
+ This must be seen as a TEMPORARY work, until a volunteer creates a better dialog box,
+ because there is currently no other way to change copper layers names.
+
+2009-Sep-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Finished initial NETCLASS work, along with UI. Put NETCLASS support
+ into DRC. Fixed DRC dialog so progress during DRC is sensible and visible.
+ The specctra_export probably still needs a little work regarding VIAs.
+ I compiled wxformbuilder from source, so you may need to upgrade to
+ load my *.fbp files.
+
+ Jean-Pierre @ todo: pcbnew/zones_test_and_combine_areas.cpp needs to
+ use NETCLASS and not g_DesignSettings.m_TrackClearance
+
+
+2009-sept-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Work on undo/redo in pcbnew finished.
+ Switch to kbool V2.0. This version solves some problems in zones calculations but not all.
+ The Kbool's author, Klaas Holweda, is still working on these problems
+ Thanks to Klaas
+
+
+2009-aug-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Work on undo/redo in pcbnew almost finished.
+
+2009-Aug-16 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * first of my work on NETCLASSes, more to come.
+ wrote: BOARD* BOARD_ITEM::GetBoard(), int BOARD_CONNECTED_ITEM::GetClearance( BOARD_CONNECTED_ITEM* ),
+ rewrote: classes NETCLASS, NETCLASSES, BOARD::SynchronizeNetsAndNetClasses(),
+ added: NETCLASS::m_ViaDrillSize, NETCLASS::m_Description. Removed netname from
+ EQUIPOTs in *.brd file (were redundant with NETCLASSes in *.brd file). NETCLASSes
+ now follow EQUIPOTs in *.brd file.
+ NETs and NETCLASSes are linked by pointer from class NET.
+ BOARD::SynchronizeNetsAndNetClasses() will validate pointers, NETs and NETCLASSes.
+ * Pay particular attention to the new:
+ int BOARD_CONNECTED_ITEM::GetClearance( BOARD_CONNECTED_ITEM* aItem ) const
+ which considers two netclasses and finds the largest distance from the two
+ involved.
+ * I would love to see class NETINFO_ITEM renamed to NET.
+
+
+2009-Aug-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ MsgPanel is dynamically sized based on system gui font. Before this fix
+ the window height was hardcoded and was too small on systems with large
+ fonts. See WinEDA_MsgPanel::GetRequiredHeight();
+
+
+2009-aug-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Work on undo/redo in pcbnew in progress.
+ SEG_ZONE is now deprecated.
+ When a zone is fille by segment, the ZONE_CONTAINER handles these segments
+
+2009-july-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Starting work on undo/redo in pcbnew.
+ Currently, undo redo commands are only delete one item (and only for some items)
+
+
+2009-july-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++all
+ Rework on undo/redo and block functions
+ Better and simpler coding of block and undo/redo functions
+ The goal is to have the same functions in eeschema and pcbnew.
+ and have a full undo/redo in pcbnew.
+
+2009-july-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ First work about net classes. This is a work in progress and a moving target.
+ Manual routing and DRC do not use yet this feature
+
+
+2009-Jul-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ added support to specctra import for the <structure_out> descriptor.
+ <route_descriptor> had confused <structure_descriptor> with the <structure_out_descriptor>
+ The fix facillitates round tripping from the TOPO-R router.
+
+
+2009-july-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema:
+ Enhanced netlist creation and ERC tests for component having multiple parts per package
+ Connecting power pins of all parts is no more needed.
+ Usually, these components have in schematic duplicated power pins.
+ Op amps having 4 parts have also 4 duplicated pins per power input,
+ and therefore the user must place 4 power symboles per physical power pin
+ Now Only one power is needed (now eeschema search for a connected pin
+ between duplicated power pins)
+ Note this is a work in progress because the ERC does not check if these duplicate
+ are connected to the *same* net.
+
+2009-july-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Use a common class for markers in pcbnew and eeschema:
+ created a basic class called MARKER_BASE
+ class DRC_ITEM is also common to pcbnew and eeschema
+ class MARKER (in pcbnew) and class MARKER_SCH (eeschema) are derived
+ from this basic class.
+ The main goal is to use a common class for pcbnew and eeschema to handle
+ errors and to have similar dialogs
+ and have more comprehensive ERC messages errors in eeschema
+ This is a work in progress
+
+
+
+2009-july-05 UPDATE Jerry Jacobs <jerkejacobs@gmail.com
+================================================================================
++ Closing bug 2802441, No single error messages any more, 2009-06-07 over2there.
+ Fixed this both in eeschema and cvpcb, for now printing wxstring in a
+ messagebox. Should make a nice textctrl dialog.
++ Added cvpcb directory to Doxyfile
+
+2009-june-19 UPDATE Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
+Added Hauptmech patch.
+I Updated doc to match this patch.
+
+++Pcbnew:
+> * Board thickness in the 3D view can be set in *.pcb files (hand edit)
+> * Hotkey files bug: incorrect file extension as default in some open/save dialogs.
+> * Hotkeys made available for pcbnew [add track] and [add module] tools.
+> * Drag and Move hotkeys extended to drag tracks and move nodes/vias when the [add track] tool is active.
+> * Show/Hide Invisible Text button added to lefthand menu
+> * Dropdown list of clearance history available next to trackwidth history.
+
+
+2009-june-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Added: in DRC tests: tests for vias min size and tracks min width.
+ Added: Option to show the via area while creating a new track.
+ Useful in compact designs to know how to place a via during track creation.
+
+2009-june-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema:
+ Added text justification for graphic texts in libedit
+ Minor bug 2803506 fixed (error when mirroring bus entries)
+ Some code cleaning.
+ Better locating algo for arcs in libedit
+
+2009-may-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema:
+ Changes about thickness of lines in draw/plot functions.
+ Now there is only one thickness parameter for plot and print.
+ This is now the default thickness value,
+ used for items that have a line thickness = 0,
+ and NOT the minimum thickness.
+ reasons:
+ - Obviously, differents parameters to draw and plot are bad.
+ (what you plot is NOT what you see)
+ - small texts are not readable with an minimum thickness value
+ that could be good for others items.
+
+
+2009-may-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Cleaned and optimized code about new hershey fonts and bold texts handling.
+ Bold texts use now the same font as normal texts.
+ Only the pen size used to draw them is bigger.
+ - The max pen size allowed depending on texts sizes is now tested
+ when loading boards and modules, and clamped if too large.
+
+
+
+2009-may-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Finished code cleaning about ratsnets calculations and handling
+ Obscure code removed ( I hope)
+ Better names for some members of BOARD class.
+
+2009-may-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ clean code in ratsnet calculations (work in progress)
+ The old code was very difficukt to understand, and was sometime very ugly.
+ Mainly, the list of nets (RATSNEST_ITEM class, formerly EQUIPOT class)
+ are now handled in a std::vector, and not a linked list.
+ This is better, because nets identifiers for pads and tracks are a number called netcode.
+ now, this is the index of the given net in this list, and the code to find a net given by its netcode
+ is very fast.
+
+
+2009-may-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Rework on TEXTE_PCB, SCH_TEXT and EDA_TextStruct classes.
+ Code seriously cleaned, obscure and duplicated code removed,
+ and some oddities removed ( like different .m_Orient values in eeschema and
+ pcbnew, for the same text orientation )
+ Multiline texts (in comments and Pcb texts) are now supported.
+ In pcbnew text justifications could work (but not yet used and tested)
+
+
+2009-may-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ Better dialog options for zones on technical layers.
+ Zones on silk screen filled with segments are now plotted
+ Better support of multiline texts (work in progress)
+
+2009-apr-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Eeschema:
+ When annotating: tests and repairs bad (duplicated) time stamps.
+ Can be found in old schematics or converted from others tools ...
+
+2009-apr-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Fixed: fully broken netlist import from eeschema when using time stamp.
+ (normal operation worked fine)
+ Added: alawys print diags in dialog window when reading a netlist
+
+2009-apr-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ALL:
+ Code clarification: There were 3 functions to display info:
+ - DisplayInfo (displaying a message info)
+ - class members DisplayInfo and Display_Infos doing the same thing
+ (and sometimes these 2 functions were existing in some classes)
+ This was *very* confusing and created minor bugs
+ (info in eeschema was not always displayed, because the "bad" function was used)
+ Now DisplayInfo is renamed DisplayInfoMessage
+ Ann class member DisplayInfo is used in all classes ( replaces all Display_Infos instances)
+
+2009-apr-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++eeschema:
+ Default libraries path are now differents for pcbnew and eeschema (as it do)
+ Fixed: bad library search path for schematic component docs (docs were not found)
+ Added: display actual lib paths in eeschema lib config dialog.
+
+ These next fix give the same behavior than "old" version
+ Use relative paths in libraries and doc filenames when possible
+ i.e when a file is found in a sub path in a default path
+ (very important for Windows/linux/mac compatibility of projects and their configs)
+
+ TODO: allows user to add paths in list. Currently the user path for lib is broken
+ (but the new code could allow the user to add more than one user path)
+
+ TODO: do the same for pcbnew and cvpcb
+
+2009-apr-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++eeschema:
+ - Viewlib: listboxes for lib or component selection are now resizable
+ - library cache name changed from <root_name>.cache.lib to <root_name>-cache.lib
+ Needed by the new code using wxFileName.
+ When wxFileName calculate the filename, it returns <root_name>,
+ and the old code returns <root_name>.cache
+ So to avoid problems or ugly code, the lib cache name is now <root_name>-cache
+ Old cache is used if the lib cache with the new name is not found.
+
+
+2009-apr-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ fixed: bug 2738052 (Delete tool does not delete zones outlines)
+++eeschema:
+ fixed: void history file list in menu
+++All:
+ made GetAssociatedDocument() compatible with last changes in kicad path handling.
+ Get PDF doc associated with a component now works
+ Some work still needed.
+
+2009-apr-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++common:
+ overbar patch merged in drawtxt.cpp and mainly in eechema/class_pin.cpp
+ some cleanup and some compiling problems fixed.
+
+++eeschema:
+ changed dialog_eeschema_config.cpp to use wxFormBuilder to create
+ the corresponding equivalent dialog in dialog_eeschema_config_fbp.cpp
+
+2009-apr-05 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Removed all instances #ifdef eda_global, COMMON_GLOBL, and MAIN in order
+ to unobfuscate global variables.
+ * Moved global variables common to all applications into common.cpp.
+ * Moved global variables common to Pcbnew, Gerbview, and Cvpcb into
+ pcbcommon.cpp.
+ * Create pcbcommon library to prevent compiling shared PCB drawing object
+ files multiple times.
+ * Replaced round() with wxRound and eliminate MSVC specific implementation.
+ * Moved project configuration files into the application class.
+ * Moved editor name global variable into the application class.
+ * Created load and save settings methods for basic frame class and begin
+ putting global variables in the class where they are used.
+ * Start replacing obsolete wxWidgets file functions and redundant Kicad
+ file name manipulation code with wxFileName.
+ * Initial library search path implementation using wxPathList.
+ * Define correct wxFileDialog wild cards.
+ * Apply patch Fix typo in about box to keep MAC folks happy.
+ * Lots of general code clean up, spelling error fixes, and uncrustification.
+ * Renamed Affiche_Status_Box to UpdateStatusBar.
+++EESchema
+ * Defined Load() method so library file drawing objects can load themselves.
+ * Defined GetBoundingBox() method so library file drawing objects can
+ calculate their own bounding box.
+ * Fix arc library drawing object bounding box calculation.
+ * Remember last import and export library path in library editor.
+ * Add new library search path support.
+++Kicad
+ * Eliminate the one giant case statement to rule them all command event
+ handler and create per command event handlers.
+++CvPcb
+ * Add new library search path support.
+ * Add message dialogs to prompt user of library file load errors instead of
+ failing silently.
+ * Fix NULL pointer bug were display frame would crash CvPcb when
+ WinEDA_DisplayFrame::Get_Module() could not find foot print module.
+++PcbNew
+ * Add new library search path support.
+ * Add message dialogs to prompt user of library file load errors instead of
+ failing silently.
+
+
+2009-mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ added BOM generator (in postprocess menu)
+
+
+2009-mar-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All
+ code cleanup in project_config.cpp.
+ Now parameters common to all projects are saved on exit.
+ (they are usally options like colors, draw options ...)
+
+++pcbnew:
+ added option to show or not netnames on pads and tracks
+
+
+2009-mar-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ in DRC: added test pads to holes.
+++Al:
+ minor changes.
+
+
+2009-mar-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ Fixed:
+ bug that crashes pcbnew when removing all footprints
+ (in connection calculations, pointers to pads not reset)
+
+ bug that crashes pcbnew when filling a zone
+ if a module has a trapezoidal pad
+ (trapezoidal pads are not yet implemented in zone filling,
+ they are now calculated as rect shape (todo: a better handling) )
+
+
+2009-mar-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++eeschema:
+ Added: option to print ALL users fields in B.O.M.,
+ so if more than 8 fields, they are printed. (issue 2680640)
+
+++pcbnew:
+ Added 5 metric grids (1mm, 0.5mm 0.25mm 0.2mm and 0.1mm) in default grid list.
+ Minor bug in drill map creation (PS format) fixed
+
+2009-mar-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ fixed: a bug that can delete an existing zone after creating a new zone,
+ if the new zone contains this existing zone
+ This is a DRC error, buf can be temporary possible when creating complex zones
+
+2009-mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+++gerbview:
+ print,plot: error message displayed when no layer selected.
+
+
+2009-Mar-5 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++pcbnew:
+ bug fix in zones_convert_brd_items_to_polygons.cpp:
+ Fixes "thermal stub bleed" in zone fill. Small (compared to thermal width) pads are handled properly now.
+
+
+2009-mar-05 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ bug fix in move_or_drag_track.cpp:
+ function SortTrackEndPoints() broken: does not handle pointers to pads for start and end and flags relative to these pointers
+ MergeCollinearTracks( ) broken, because it merge segments having different width or without any connectivity test.
+ 2 collinear segments can be merged only in no other segment or vais is connected to the common point
+ and if they have the same width. See cleanup.cpp for merge functions
+ These functions break the connectivity calculations.
+ So they are temporary disabled (see my comments in these functions)
+ bug fix in Marque_Une_Piste(): the last segments created can be see as part of the flagged track:
+ so delete track (or edit track width) deletes the track and some others segments (last created)
+ bug fix 2660689 Unconnected pads in RC4. Also fixed some no deletion of the old track when creating a new track
+
+
+2009-Feb-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Fixed hot key bug that caused undo and redo events in the library editor
+ to be passed to the schematic frame. Fixes bug #1896790.
+ * Fixed hot key bug that allowed new wire to be placed during block move
+ causing a manage cursor message box to pop up.
+ * Fixed hot key bug that allows an object in block to be deleted during
+ a move or drag operation.
+
+
+2009-Feb-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * Markers were not shown when on top of a high-lighted pad. Moved highlight
+ drawing function into class BOARD and out of Frame. Call BOARD::DrawHighLight() from
+ within BOARD::Draw() to fix.
+ * Gerbers were not generated if you had EDGE_MODULEs on a copper layer, such as in
+ a MuWaveBasicShape. The line thickness was not being put into the gerber via a DCODE.
+ These gerber files were bad, and geda gerbv would also complain.
+ * A few window titles were not conformant with UIpolicies.txt.
+ * You could not load a *.pro file from another project into PCBNEW if your current
+ project had none. Changed wildcard mask.
+ * Deleted gen_self.h and moved that code into muonde.cpp
+
+
+2009-Feb-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * dialog boxes calling OnInitDialog are flashing because these functions
+ change the size of controls that are already on screen. This leads to
+ an annoying resize operation. So I renamed OnInitDialog(event) to
+ void init() and call it from the constructors. Did this for
+ dialog_general_options.cpp and dialog_display_options.
+ * dialog_general_options was not setting g_MagneticPadOption and g_MagneticTrackOption
+
+
+2009-Feb-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ bug fix:
+ 2628615 Error message after right click into zone
+ 2625434 Crash after trying to edit a line/drawing
+++cvpcb
+ fix: 2625090 CVpcb - language selection
+
+
+2009-Feb-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++gr_basic.cpp
+ Added: Function ClipAndDrawFilledPoly()
+ Used to clip a polygon and display it as Filled Polygon
+ uses the Sutherland and Hodgman algo to clip the given poly against a rectangle.
+ This rectangle is the drawing area
+ this is useful under Linux (2009) because filled polygons are incorrectly drawn
+ if they have too large coordinates (seems due to integer overflows in calculations)
+ Could be removed in some years, if become unnecessary.
+
+
+2009-Feb-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Loading a module into the module editor was changing the layer count
+ of a loaded board. This is because void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
+ calls bool WinEDA_BasePcbFrame::Clear_Pcb( bool query )
+ which then sets the global g_DesignSettings.m_CopperLayerCount = 2;
+ This is terrible.
+ We need a layer count in each board, not as a global. For now, comment out the assignment in initpcb.cpp.
+
+
+2009-Feb-17 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ Dialog track options redesigned with wxFormBuilder
+ Alt via drill renamed Specific via drill in dialog and popup menu.
+ Added tips in dialog.
+
+
+2009-Feb-09 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema
+ Changed dialog_edit_label so that it is UIpolicies.txt compliant. Proper case
+ on window titles, resizeable dialog border, minimum text width handling.
+
+
+2009-Feb-7 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ change grid size type from integer to double (using wxRealPoint insteed of wxSize)
+ This is mandatory in Pcbnew to handle metric user grids without error
+ (was unusable before, using integer grid size).
+ A lot of footprints uses not metric grid.
+ refinements for user grid (mainly in read/write config).
+
+
+2009-Feb-06 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ added "cutout" from a ZONE_CONTAINER capability to the SPECCTRA export.
+ added "netless zone" support to SPECCTRA export.
+
+
+2009-Feb-6 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+ Added a forgotten contributor (Tim Hanson) to kicad contributor list.
+
+++pcbnew:
+ Zoom factors in 1.5 progression, and limited to 18 values
+ (near to to Wayne Stambaugh's changes: 15 values are not enought for pcbnew)
+ removed minor problems in zoom box selection (removed blank line).
+ Added user grid selection in modedit and refinements when user grid is selected.
+
+
+++eeschema:
+ Zoom factors in 1.5 progression, and limited to 15 values according to Wayne Stambaugh's changes.
+
+2009-Feb-05 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Change CMakeList.txt so that all PCB object classes that do not need built
+ separately for pcbnew, gerbview, and cvpcb only get built once and added
+ to the common library.
+ * Override all classes derived from WinEDA_BasePcbFrame so that the source
+ code file basepcbframe.cpp only gets compiled once and added to the common
+ library.
+ * Prevent cursor movement keys from moving outside of client area by
+ automatically scrolling the drawing.
+
+
+2009-Feb-4 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++pcbnew:
+++eeschema:
+ Zoom factors in 3th root series of 2. So two intermediates between half/double scale.
+
+2009-Feb-04 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Refactor header files to reduce the number of files that need recompiled
+ when making changes to base classes.
+ * Move sine and cosine look up tables from trigo.h to trigo.cpp to avoid
+ multiple recompiles.
+
+
+2009-feb-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ change filename drawpanel_wxstruct.h to class_drawpanel.h
+ and move class BASE_SCREEN description from drawpanel_wxstruct.h to a new file: class_base_screen.h
+ minor enhancement for window zoom command.
+ refinements in 3D zones drawing.
+
+2009-jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ Print functions and display zoom level modified to use the new zoom implementation
+ Comments added in some functions.
+ Code cleaning
+ some bugs fixed.
+ Added contributors to list in about Kicad.
+
+2009-Jan-29 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Replace zoom implementation with a more flexible ( and hopefully useful )
+ design.
+ * Removed gr_basic.h from fctsys.h so that the entire project doesn't get
+ rebuilt unnecessarily.
+
+
+2009-Jan-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ common.c added EnsureTextCtrlWidth()
+++eeschema
+ * dialog edit component in schematic: make sure chipname text control is wide
+ enough to handle unusually long chip names.
+ * Retain and re-use user's desired dialog edit component window size.
+ Did not have time to look at dialog edit component in library.
+
+
+2009-Jan-27 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++pcbnew:
+ Zone arc approximation starts with half increment offset from v/h for pads and vias
+ to get more fill space between rows.
+
+2009-Jan-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ Found why remove unused thermal stubs fails sometimes:
+ Only the first filled area in a zone was tested.
+ Solved.
+
+2009-Jan-18 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Replace Kicad file history implementation with wxFileHistory.
+ * Laid groundwork for search paths using wxPathList in EDA_Appl.
+ * Made ReCreateMenuBar actually recreate the menu bar. Now language updates
+ to menus can be changed without restarting program.
+ * Lots of general housekeeping, simplification, and code beautifying.
+++EESchema
+ * Fix zoom and pan bug in library viewer panel due to incorrect DrawPanel
+ rectangle.
+ * Add zoom accelerator keys to library viewer (works in GTK, not Windows).
+ * Add Postscript header to new print dialog so Linux build works.
+++PcbNew
+ * Add Postscript header to new print dialog so Linux build works.
+
+
+2009-Jan-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ Cleaned code in print dialogs.
+ They are now specific to eeschema and pcbnew.
+ Gerbview uses pcbnew dialog.
+ The code is now a lot more easy to understand.
+
+
+2009-Jan-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Added: patch from Rok Markovic (rok@kanardia.eu) to remove unused stubs in thermal pads
+ Modified: print boards when printing in color mode layers on one sheet:
+ now printed in OR mode like drawings on screen
+ Also in SVG mode, but OR mode seems not work very well in SVG mode (tested with inkscape).
+
+
+
+2009-Jan-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Added: print SVG format.
+ SVG print/plot function uses WRITE modeinsteed of OR mode as graphic mode.
+ todo ? uses OR graphic mode with black background color (wait and see)
+++eeschema:
+ Code cleanup for Print SVG format, and used wxFormBuilder in SVG print dialog
+
+
+2009-Jan-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Calculations to create filled areas in a zone modified and uses 2 pass:
+ 1 - filled areas are calculated with pads in zone.
+ 2 - If thermal shapes are wanted, they are added (i.e. copper removed after ).
+ Seen comments in zones_convert_brd_items_to_polygons.cpp
+ The initial method was calculate filled areas in one pass.
+ With the 2 pass calculation, the calculation time is more expensive but:
+ - Kbool seems now works correctly in cases where the one pass way does not work
+ - Thermal reliefs can have a better shape (todo..) because when calculating them, the filled
+ areas are known (this was not the case in one pass way)
+
+
+2009-Jan-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Print and plot functions now properly prints all sheets in a complex hierarchy
+ plot files created have now a new filename in order to be compatible with complex hierarchies
+
+
+2009-Jan-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Print function now properly prints all sheets in a complex hierarchy
+ Note: plot functions are not updated and do not plot all sheets.
+
+
+2009-Jan-07 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Don't pan or zoom on mouse wheel events when the cursor is not in the
+ drawing area.
+ * Reduce all zoom code to a single zoom command handler.
+ * Eliminate redundant zoom command identifiers.
+ * Move pop up zoom command handler from DrawPanel to DrawFrame.
+ * Change hot key zoom handlers to use command events.
+ * Added DrawFrame event table to replace COMMON_EVENTS_DRAWFRAME macro.
+ * Added locale path relative to binary path for development purposes.
+ * Minor code clean ups and duplicate header removal in files that were
+ updated.
+
+
+2009-Jan-04 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ wxPcbStruct.h: made m_Pcb private, added GetBoard(). Am considering
+ putting each gerber layer into its own BOARD.
+
+
+2009-Jan-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Code cleaning.
+ LibDrawPolyline uses now std::vector<wxPoint> to handle corners.
+ DrawPolylineStruct uses now std::vector<wxPoint> to handle corners.
+
diff --git a/Documentation/changelogs/CHANGELOG-2010.txt b/Documentation/changelogs/CHANGELOG-2010.txt
new file mode 100644
index 0000000..40f5d1b
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2010.txt
@@ -0,0 +1,1010 @@
+KiCad ChangeLog 2010
+====================
+
+2010-dec-31 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Exclude boost header include path from Doxygen files.
+ * Coding guide line and doxygen warning fixes.
+++EESchema
+ * Rename OBJ_CMP_TO_LIST to SCH_REFERENCE.
+ * Move code related to SCH_REFERENCE into the object where it belongs in hope
+ that some day the object members can be made private instead of public.
+ * Add GetComponent method to sheet path and sheet path list objects.
+ * Move screen list code into screen list object.
+
+
+2010-Dec-28 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++richio:
+ * Deleted kicad_exceptions, because it required the big #include <wx/wx.h> and
+ that was slowing down compiling. Moved that stuff back into richio.h where
+ it came from.
+ * Enhanced IO_ERROR to format an errorText.
+ * Added THROW_IO_ERROR() and THROW_PARSE_ERROR() macros to capture the
+ the call site of the thrower. If you have problems compiling, it is probably
+ due to the definition of __LOC__ in richio.h. Some compilers may not support
+ __func__ in C++ yet. Find a macro that identifies your compiler, and we can
+ work out something in the #define of __LOC__.
+
+2010-Dec-28 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++new:
+ Completed most of /new class LIB_TABLE.
+ Completed all of /new class LPID.
+++common:
+ Tricked xnode.h into not issuing deprecation warnings.
+++richio:
+ * Added support of DSNLEXER( LINE_READER* ) to TokenList2DsnLexer.cmake, which
+ allows the chaining of different grammars on top of a common LINE_READER.
+ * Changed OUTPUT_FORMATTER::Quoted() to return a std::string and not modify
+ its input parameter.
+
+
+2010-dec-21 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Doxygen comment warning fixes.
+ * Coding policy fixes.
+++common
+ * Add clone method to EDA_ITEM object.
+++EESchema
+ * Replace GenCopy() method with Clone() in all items derived from SCH_ITEM.
+ * Simplify repeat last schematic item with new Clone() method.
+ * Simplify duplicate schematic item method with new Clone() method.
+ * Separate objects in sch_items.h/cpp into separate files per object.
+
+
+2010-dec-20, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+common:
+ Rename EDA_Rect::Inside to EDA_Rect::Contains
+ ( EDA_Rect::Inside( const EDA_Rect& aRect ) was very ambiguous )
+ Fix some Doxygen warnings and erroneous comments
+
+
+2010-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++new:
+ Completed a good portion of /new class DIR_LIB_SOURCE.
+ Added an autonomous CMakeLists.txt file to /new, with new-docs target and
+ test program target.
+
+2010-dec-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Gerbview:
+ Added: in file dialog, multiple file selection.
+ Added: Draw mode selector (in left toolbar):
+ Raw mode:
+ a Gerber image is drawn on screen without buffering.
+ Artifacts happen if there are negative items drawn, if more than one
+ Gerber file is shown.
+ Stacked mode:
+ each Geber image is drawn in a buffer and after drawn on screen
+ No artifact with negative items.
+ Each Gerber image covers previous images.
+ OR mode (transparency mode):
+ each Geber image is drawn in a buffer and after drawn on screen
+ No artifact with negative items.
+ Each Gerber image is "ORed" with previous images, like in Pcbnew.
+ Try to optimize Draw function in buffered modes.
+ (Useful for PC that have problems with "blit" graphic function)
+ Fix minor issues.
+
+2010-dec-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ * Remove deprecated options and quoted project name option in Doxygen file.
+ * Make Bazaar ignore the files generated by Doxygen in the new folder.
+++EESchema
+ * More schematic component encapsulation work.
+ * Doxygen comment fixes.
+
+
+2010-Dec-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema:
+ Committed a new design for a "Distributed Library System".
+ To make the html docs, run doxygen in <kicad_base>/new with that as your
+ current working directory, or run the shell script in there. You need
+ Doxygen installed.
+
+
+2010-dec-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++common
+ * Make base marker hit test method const.
+++EESchema
+ * Improve hit testing for schematic components.
+ * Add initial support for hit test filtering.
+ * Moved static function CountConnectedItems() into SCH_SCREEN object.
+ * Add IsConnected() method to SCH_ITEM object.
+
+
+2010-dec-10 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Make a whole bunch of object methods const in order to make HitTest() const.
+ * Lots of coding policy fixes.
+++common
+ * Add Inside override to EDA_Rect to test if another EDA_Rect is inside.
+ * Add additional parameter to EDA_TextStruct GetTextBox method to support
+ Y axis inversion and non-default thickness.
+ * Add accuracy parameter to EDA_TextStruct TextHitTest method.
+++EESchema
+ * Refactor schematic object hit testing to provide coherent object interface.
+ * Remove redundant GetBoundaryBox from schematic component object.
+ * Remove redundant layer member from schematic text object.
+ * Create hit test override to check for rectangle intersection and
+ containment.
+ * Simplify schematic block selection hit testing.
+ * Make schematic and component library object enum naming consistent.
+
+
+2010-dec-08 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Coding policy object naming and formating fixes.
+++GerbView
+ * Fix compiler warnings.
+++Common
+ * Change item list type from SCH_ITEM to EDA_BaseStruct in BASE_SCREEN
+ object.
+ * Encapsulate BASE_SCREEN drawing item list member.
+ * Change grid container from wxWidgets to standard C++ container.
+
+
+2010-dec-07 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Finish encapsulating LIB_FIELD object.
+ * Encapsulated all members currently in use in LIB_PIN object.
+++Common
+ * Add SetModified() helper to EDA_BaseStruct object that checks for a parent
+ object and sets it's modified status as well.
+
+
+2010-dec-02 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move color configuration dialog to dialogs folder.
+ * Simplify color configuration dialog design, remove enable grid checkbox( I
+ think we have enough places to do this), and remove abbreviated labels.
+ * Restore changing value field behavior to create new component from the
+ current one and handle all of the potential library naming conflict issues.
+ * Create a toolbar button perform the same function as renaming the value
+ field for improved usability.
+ * Add new copy component bitmap contributed by Jean-Pierre Charras.
+
+
+2010-dec-02, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ For zone filling algo, change the default polygon library from Kbool to Boost::polygon.
+
+
+2010-dec-01, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Gerbview:
+ Added support for complex definitions of parameters in aperture macros and primitives macro
+ (a complex definition in a parameter that is calculated by an arithmetical expression)
+ Gerbview should now have a decent support of Gerber language.
+ Currently only the obscure knockout command is not supported (I have no motivation to do that)
+ Other "bug":
+ scale in A and B axis is poorly supported: coordinates are scaled, but shapes can have problem:
+ fro instance, a circle is drawn as a circle when A and B scales are different,
+ and perhaps should be an ellipse.
+ On the other hand, Gerber doc is not clear about the meaning of A and B scale.
+ (Alas! Gerber doc is not clear about most of advanced commands)
+
+
+2010-nov-19 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move library new component and schematic edit sheet dialogs to dialogs
+ folder.
+ * Set library new component and schematic edit sheet dialogs default button.
+ * Create wxFormBuilder version of edit sheet label dialog and remove hand
+ coded version.
+ * More coding policy fixes.
+
+
+2010-nov-19 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move library dimension, schematic configuration, and schematic options
+ dialogs to dialogs folder.
+ * Set library dimension, schematic configuration, and schematic options
+ dialogs default button to OK button.
+ * Kicad coding policy clean ups.
+
+
+2010-nov-17 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move library text edit, library draw item edit, SVG print, and BOM dialogs
+ to dialogs folder.
+ * Rename library text edit dialog file and object names to comply with
+ coding policy.
+ * Set default button in library text edit, library draw item edit, SVG print,
+ and BOM dialogs.
+ * Move BOM dialog code into BOM dialog object source file.
+
+
+2010-nov-11 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Make schematic object file naming consistent.
+ * Move annotate dialog to dialogs subdirectory and set the "Annotation"
+ button as the default.
+ * Move ERC dialog to dialogs subdirectory and set the "Test Erc" button
+ as the default.
+ * Move the print dialog to dialogs subdirectory and set the "Print" button
+ as the default.
+ * Create print dialog header and move the OnPrint() method into
+ schframe.cpp.
+
+
+2010-nov-10 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Header file rationalization.
+ * Move schematic object load code into the appropriate schematic object.
+
+
+2010-nov-3 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++common
+ * Initial ground work for using Boost container for storing draw items
+ instead of internal linked list.
+++EESchema
+ * Move tests for dangling end code back into schematic objects.
+ * Add clear draw object state helper to SCH_SCREEN object.
+ * Add support for schematic objects to keep temporary list of connection
+ objects for dangling end and other connection related tests.
+ * Rearrange schematic label object code.
+ * Remove duplicate error message boxes when loading schematic items.
+
+
+2010-oct-28, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+PolyLine.cpp:
+ remove unused method CPolyLine::TestPointInsideContour() which was a duplicate of
+ TestPointInsidePolygon().
+ In CPolyLine::TestPointInside(); replace curious algo (which have a problem)
+ to test a point inside a polygon by TestPointInsidePolygon()
+++Pcbnew:
+ fix a bug in Drc and clearance calculations when using a dummy pad
+ ( in zones calcualtions and to test holes ot tracks and holes to pads DRC).
+
+2010-oct-26 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Change screen list object array type from wxARRAY to std::vector.
+ * Move all SCH_SCREEN methods into file class_sch_screen.cpp.
+ * Move find dialog files to dialogs sub-directory.
+ * Remove hallucinatory save and restore methods I wrote from component
+ library draw objects.
+ * Merge external TstAlignSegment function to SCH_LINE::MergeOverlap method.
+ * Move save schematic method to files-io.cpp and remove empty file
+ save_schemas.cpp.
+++include
+ * Remove unused internal link list next and back methods from base screen
+ object.
+
+
+2010-oct-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Remove common library component and alias base class CMP_LIB_ENTRY.
+ * Derive LIB_COMPONENT and LIB_ALIAS directly from EDA_BaseStruct.
+ * Encapsulate most library draw item object members.
+ * Make most library draw item get methods constant.
+ * Merge two edit component properties methods into a single method.
+ * Update double click left mouse button to use merged edit component
+ properties method.
+ * Set schematic find dialog find button as default button.
+++include
+ * Add in-line flag state helpers to EDA_BaseStruct.
+
+
+2010-oct-22 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ Component library editor bug fixes and other minor fixes.
+ * Fix bug that prevented component from being replaced in library when
+ the component root name was changed.
+ * Fix drawing bug when changing text or field item string while move in
+ progress.
+ * Fix drawing bug when rotating text item while move in progress.
+ * Prevent undo or redo when editing a component draw item.
+ * Fix assert bug when replacing component in library when the component
+ root name was changed.
+ * Fix bug in field editor caused by new root alias implementation that
+ prevented any field from being changed.
+ * Fix minor spacing issues with EESchema find dialog.
+ * Deprecate remaining internal linked list code from component library
+ objects.
+ * Rename pin object files to match new library object file naming
+ scheme.
+ * Move LIB_TEXT object definition into it's own header file.
+
+2010-Oct-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++richio:
+ LINE_READERs will now allocate a smaller initial size buffer, say 5000 bytes,
+ and then resize their buffers up to some provided maximum, after which an
+ exception is thrown should a line exceed that maximum line length.
+
+
+2010-oct-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ Added support for gerber commands:
+ SR (Step and Repeat)
+ multiple MOIN and/or MOMM in file (switch units from inch to mm and mm to inch)
+
+2010-oct-09, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ Fixed some issues:
+ Now aperture macro with parameters works.
+ Note: complex parameters (like $1 + 4) are not supported
+
+ other commands not yet supported:
+ SF (scale factors)
+ Offsets (image and layer)
+ Rotations (image and layer)
+ Axis definition
+ Mirroring
+ SR (Step and repeat)
+ KO
+
+2010-Oct-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++richio:
+ * LINE_READER now has a GetSource() function which is used in error
+ reporting. This is typically the name of the file which is supplying the
+ lines of text, or string "clipboard" if the text is coming from the clipboard.
+ Derived classes FILE_LINE_READER and STRING_LINE_READER's constructors both
+ need an additional parameter which identifies the source.
+ * FILE_LINE_READER now owns the source FILE and will close it in its destructor.
+ This resulted in the removal of several fclose() statements that had been
+ there to close a file associated with a FILE_LINE_READER.
+ * DSNLEXER now supports an internal LINE_READER* stack which is used to handle
+ nested s-expression files, with the ability to resume from the proper place
+ in the containing file. There is now PushReader() and PopReader() functions
+ in DSNLEXER to handle this. No protection is provided against circular
+ inclusions, but this could be done by searching the stack and comparing
+ GetSource() values for anything already on the stack before pushing.
+ Each s-expression grammar is free to define one or more keywords that cause
+ nesting to occur. That policy choice is not part of DSNLEXER's job.
+ One example might be:
+ (inherit (footprint library_uri ftprintname))
+
+2010-oct-04 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ Initial work on new component library stucture.
+ * Use C++ map in component library instead of boost::ptr_vector.
+ * Drop Boost pointer containers for standard C++ containers.
+ * Moved duplicate name user interface elements from library object to
+ library editor.
+ * Added code to support direct addition and replacement of component
+ alias objects into libraries.
+ * Removed temporary strings used to add and remove alias objects.
+ * Libraries only store alias objects, components now accessed thru alias.
+ * Simplify library API for adding, removing, and replacing components.
+ * Updated edit component in library dialog and library editor to reflect
+ component library object changes.
+ * Fixed bug in library viewer when displaying alias name.
+ * Made a few header files compile stand alone per the new coding policy.
+ * Remove some dead code and the usual code formatting fixes.
+
+
+2010-oct-03, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ finished Draw functions for aperture macros.
+ Now aperture macros are draww correctly.
+ Known bug: aperture macros having parameters are incorrect: parameters are not transmited correctly.
+ Work still in progress.
+
+2010-sept-28, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ Important changes:
+ graphic functions rewritten.
+ graphics items are now specific to gerbview (added a GERBER_DRAW_ITEM class)
+ and do not use tracks from pcbnew.
+ The way used to draw them is also new.
+ Apertures are now correctly drawn for round, oval, rectangular and regular polygon shapes
+ (with or without holes)
+ Aperture definition type Polygon is not yet handle.
+ Polygons are correctly drawn.
+ TODO:
+ Draw functions for aperture macros.
+ Work in progress.
+
+
+2010-Aug-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++CMakeModules:
+ Revise TokenList2DsnLexer.cmake to take outCppFile and outHeaderFile optinally
+ and enum mandatorily. Standardize the script's invocation technique within
+ all the CMakeLists.txt files.
+
+2010-Aug-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++CMakeModules:
+ Revise TokenList2DsnLexer.cmake to make an entire derived lexer class that
+ returns the proper enum type for superior debugging.
+++eeschema
+ * netform.cpp now outputs the allowed footprint filters for a given library
+ component.
+ * There is an auto-generated class called NETLIST_LEXER which is defined in
+ from netlist.keywords by TokenList2DsnLexer.cmake into netlist_lexer.h, that
+ may be the basis of loading a S-expression form of the generic netlist format
+ which is written from netform.cpp.
+
+
+2010-Aug-7 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ * add xnode.cpp and xnode.h which can be used to output either an XML or
+ S-expression document file.
+ * Add class STREAM_OUTPUTFORMATTER which is a richio class which can write
+ to any of the wxOutputStream derivatives, such as file, socket, zip, tar.
+ * Added netlist.keywords
+++eeschema
+ * netform.cpp can now output S-expression OK, although I have it commented out
+ pending the addition of a UI for it.
+
+
+2010-Aug-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema netform.cpp:
+ * Finish up first working version of the XML export.
+
+2010-Aug-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema netlist.cpp and netform.cpp:
+ * Found several speed optimizations in the netlist export code.
+ * Now sort the pins properly if they have pin numbers like A1 and A10,
+ i.e. alphanumerics in them.
+
+
+2010-Jul-30 & 31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema:
+ * Now link with XML support within wxWidgets.
+ * Export the generic netlist in XML. Only the libpart elements are missing now.
+ Still need to rework the chain loaded netlist plugin, but may do that in XSL.
+ * OBJ_CMP_TO_LIST class now uses a std::string to hold the 8 bit string m_Ref,
+ but hides this behind accessors which provide for both Unicode and 8 bit
+ set and get functions.
+ * build_BOM.cpp retains the selected filename on subsequent runs as a default.
+ * Code cleaning, especially in build_BOM.cpp.
+
+
+2010-jul-27, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++all:
+ Updated boost to version 1.44
+ Added boost::polygon (experimental)
+++pcbnew:
+ Added experimental zone fill calculations with boost::polygon
+ old file zones_convert_brd_items_to_polygons.cpp has now 2 versions:
+ zones_convert_brd_items_to_polygons_with_Boost.cpp use boost::polygon to calculate filled areas
+ zones_convert_brd_items_to_polygons_with_BKbool.cpp use kbool (code cleaned).
+
+ >>> to use boost polygon version:
+ call cmake with option: -DUSE_BOOST_POLYGON_LIBRARY=ON
+
+2010-jul-12, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ Added grid origin patch from Lorenzo Marcantonio.
+ Converted set grid dialog from DialogBlocks to wxFormBuilder,
+ and added in this dialog the grid origin parameters settings.
+
+2010-jun-24 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema component library and hierarchical sheet label object improvements.
+ * Continue component library class clean up and encapsulation work.
+ * Change hierarchical sheet label container to boost::vector_ptr.
+ * Encapsulate hierarchical label handling in hierarchical sheet class.
+ * Convert some missed occurrences of wxString::GetData() to GetChars( wxString ).
+ * Fix some minor code formatting issues.
+
+2010-jun-23, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++eeschema:
+ In netlist generation, changed the rule to calculate netnames of nets with labels:
+ Previously, named nets (i.e. nets with local, hierarchical or global labels) have their name
+ defined by the first label found in list.
+ So net names could be changed without really changing the schematic.
+ Now the names are calculated from the rules (by priority order) :
+ 1 - use the most top level labels in hierarchies.
+ 2 - use global labels first, local labels next (hidden power pins names are global labels).
+ 3 - use alphabetic sort (so, if GND and AGND are connected, the net will be always named AGND,
+ and adding a VSS connection cannot change the net name)
+ So power nets and nets that have more than one label cannot have their netname changed
+ if there is no actual change relative to these nets names in schematic
+
+
+2010-Jun-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema:
+ Added "template fieldnames" to eeschema. Thanks to
+ Brian Sidebotham <brian.sidebotham@gmail.com> for the origins of this patch.
+ https://lists.launchpad.net/kicad-developers/msg04828.html
+
+ A template fieldnames are a list of template elements
+ consisting of {name, value, visibility} which you want shown in the eeschema
+ component fieldname (property) editors (both schematic and library versions
+ of the editors). Template fieldnames are forced into the editors'
+ presentation of the fields even though those fields may not exist in the
+ component. Entering a non-blank value while in a field editor will cause the
+ field & value to be retained in the component. Therefore it is unusual to
+ provide a non-blank '.value' in a template, because a trip through the field
+ editor will invariably add that field to the component since the template
+ being applied has initially a non blank 'value'. The current template editor
+ is only going to last about a week and it does not support adding non-blank
+ template values yet, nor visibility control, only field '.name'. But the
+ template fieldnames configuration storage and component field editors do
+ know how to handle template.visible and template.value already, in addition
+ to template.name. See the file .eeschema in your home directory for the
+ configuration storage, keyword: FieldNames. e.g. only field Manufacturer has
+ a '.value':
+
+ FieldNames=(templatefields (field (name "Manufacturer")(value "IBM 12")) (field (name "Vendor")) (field (name "Installed")) (field (name "Ralphy") visible))
+
+ DSNLEXER is used to parse the FieldNames record, & OUTPUTFORMATTER to generate it.
+
+
+2010-jun-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+bitmap2component:
+ Use wxWidgets.
+ Better user interface
+ More bitmaps file format import (from wxWidgets)
+ This tool does not use Kicad classes. So it can be hacked by guys who do not know kicad sources.
+
+2010-jun-10, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Added an experimental tool (bitmap2component) to create logos from .bmp bitmaps. Added Potrace library to convert bitmaps to polygons
+ This tool uses potarce library that converts a bitmap picture (.bmp or .pgm format) to a set of polygons.
+ bitmap2component converts a bitmap to a .emp footprint (that can be imported by modedit) or a .lib component that can be
+ imported by libedit.
+ Note: imported bitmaps logos are vectored by potrace, so there is no pixelation effect.
+ Scale is 1:1 for 300ppi pictures.
+ bitmap2component currently runs only is command line mode
+ run
+ bitmap2component bitmapfile.bmp bitmapfile.lib 1 to create a schematic component logo
+ (import this file using libedit)
+ or
+ bitmap2component bitmapfile.bmp bitmapfile.emp 1 to create a footprint logo
+ (import this file using modedit)
+
+
+2010-may-18, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Set minimum cmake version requirement to 2.6.4
+ (does not works with 2.6.1)
+++Pcbnew, Module Editor:
+ Added footprint name edition in the module properties dialog.
+ Until now, the footprint name used to retrieve a footprint in lib was
+ set only when saving the footprint in lib, and could not be edited without saving
+ the footprint in lib.
+
+2010-may-01, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Board and footprint editors:
+ Auto update 3D display after footprint or board edition.
+ (board or footprint is reloaded only when the 3D frame is reactivated, so
+ no extra time is needed during edition)
+
+2010-apr-29, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Fixed a crash that happens sometimes when opening the design rule dialog.
+ (due to the sorting function by netclass then by netname)
+ The sorting by netclass then by netname is now working well.
+
+
+2010-apr-23, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Fixed minor problems.
+ Changed French word COTATION to DIMENSION in class COTATION (now class DIMENSION)
+
+2010-apr-22, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew+Gerbview:
+ Fixed minor problems in printing.
+
+2010-apr-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ * Added VRML export, from the patch sent by Lorenzo Marcantonio ( october 2009, 11)
+ * Fixed :
+ options to control vrml export.
+ flipped footprints
+ * Tested using Cortona and Blender.
+
+ Needs more testing and refinements
+
+2010-apr-16, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Cvpcb:
+ Fixed a bug in footprint display frame (coordinates not displayed). Windows only.
+ Added right toolbar to select display options
+ Can now read netlists using UTF8 encoding.
+ Convert dialog_display_option from DialogBlocks to wxFormBuilder
+++Pcbnew:
+ Fixed a very minor bug.
+Cvpcb+Pcbnew:
+ Code cleanup in read netlist functions: use now FILE_LINE_READER.
+
+2010-Apr-12 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ Switched the source code repository from subversion at sourceforge.net to
+ launchpad using bazaar.
+
+
+2010-apr-08, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Drc: take in account the clearance "local parameters" for pads that have local parameters.
+ Until now, only NETCLASS clearance values were used.
+ (local parameters are used in zone filling)
+ But because a pad (or a footprint) can have a specific clearance value
+ Drc used now this value, and NETCLASS value only if no local value specified.
+
+2010-mar-31, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew
+ Fixed an issue in GERBER file creation, under Vista and W7 only for non administrator users
+ Plot files were 0 byte length.
+ This was due to use of function tmpfile() in a GERBER function
+ to create a temporary file that seems not working using mingw.
+ Replaced by more usual files functions.
+
+2010-mar-29, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew
+ enhancements in printing or plot in SVG format:
+ When printing technical layers, pads on solder mask or solder paste layers
+ where printed in sketch mode.
+ Now they are printed as solid shapes, with dimensions according to
+ solder paste or solder mask clearances.
+
+
+2010-mar-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema
+ Some bugs fixed
+ Starting enhancements in Libedit: menubar and commands to "plot"
+ current component in PNG or SVF file (SVG file not fully working, must be refined)
+
+2010-mar-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ All:
+ Stable verion for kicad release
+
+2010-mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Added (see dialog_layers_setup.cpp) compilation options to
+ -hide non active copper layers
+ -show inner layers in same order than the layer manager
+ Currently these options are 2 define
+ HIDE_INACTIVE_LAYERS
+ // if defined, displays only active copper layers
+ // if not displays always 1=the full set (16 layers)
+ USE_LAYER_MANAGER_COPPER_LAYERS_ORDER
+ //if defined, used the layer manager copper layers order
+ // (from FRONT to BACK) to display inner layers.
+ // if not, use the default order (from BACK to FRONT)
+
+ Currently not active, can be changed if the correponding lines are uncommented in dialog_layers_setup.cpp
+
+2010-Mar-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ * DSNLEXER now owns an abstract LINE_READER by pointer so that polymorphism
+ can be used in alternative LINE_READERS.
+ * Write FILE_LINE_READER and STRING_LINE_READER. The latter can be used
+ to parse text coming from the clipboard or other string source.
+
+
+2010-Feb-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ DSNLEXER now supports:
+ 1) nested quotes. This is in anticipation of broader usage of the
+ file type/syntax. A string like this in the file:
+ "my ""favorate"" string"
+ can be returned as
+ my "favorite" string
+ 2) CommentsAsTokens is implemented, so you can ask the lexer to return
+ comments as tokens, so they can be preserved. The default is to ignore
+ them. A comment is defined as any line that has # as its first
+ non-blank character. (This means comments cannot follow anything else
+ on a line.)
+
+
+2010-Feb-19 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+kicad: fixing an annoying problem:
+ * Building the tree project can be *very* long if there are a lot of subdirectories
+ * in the working directory.
+ * Unfornately, this happens easily if the project file *.pro is in the home directory
+ * So the tree project is built "on demand":
+ * First the tree is built from the current directory and shows files and subdirs.
+ * > First level subdirs trees are built (i.e subdirs contents are not read)
+ * > When expanding a subdir, each subdir content is read,
+ * and the corresponding sub tree is populated on the fly.
+
+
+2010-Feb-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+kicad:
+ * Building the tree project can be *very* long if there are a lot of
+ * subdirectories in the working directory.
+ * Unfornately, this happens easily if the project file *.pro
+ * is in the home directory
+ * when subdirs are not loaded, double click on a directory to load its files and subdirs
+ * #define ADD_FILES_IN_SUBDIRS was used until now.
+ * It is now commented, so one must double click on a subdir name to load its files
+ * See treeprj_frme.cpp for more info
+
+2010-Feb-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Eeschema, libedit: fixed last problems when editing alias info.
+ Now alias changes can be undone, and are correctly updated in lib
+ when updating the current edited component in memory
+ New code could be a good starting point to store all aliases info in the
+ root component,
+ and also easily store it to the *.lib files and remove the .dcm associated files
+ (most of code is done)
+
+
+2010-Feb-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Eeschema, libedit: fixed add/remove alias functions, broken
+All: added in popup menus hotkeys info for zoom commands
+
+
+2010-Feb-14 UPDATE Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
+================================================================================
+++ KiCad
+ Check if project is noname.pro so we don't get a error if kicad is first run.
+ Removed double separator in file menu.
+ Moved recent project to submenu in Open recent.
+
+++ Common
+ Added CTest/CDash support file
+ Moved helper tool to helper subdirectory
+
+++ OSX
+ Update compiling doc
+
+2010-Feb-07 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++ all:
+ Finnish translation, take one.
+
+2010-Feb-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ gerbview:
+ Use layer_widget to manage gerber layers colors and visibility.
+
+2010-Jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ pcbnew:
+ More about work on color selection and items visibility:
+ removed global variables and a lot of redundancies
+ Now Modedit does not uses the visiblity options of the board editor
+ (That can create a problem if hide modules is activated)
+ work in progress but almost finished
+
+
+2010-Jan-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ pcbnew:
+ More about work on color selection and items visibility
+ work in progress
+
+2010-Jan-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+ ++ All:
+ added a test to solve a problem when cross compiling Kicad under Linux for Windows
+ Specific to countries that use a comma as separators in floating point numbers notation:
+ Depending on wxWideget version:
+ printed as 0,5 and read as 0.5
+ or
+ printed as 0.5 and read as 0,5
+ So float values are always broken in dialogs (many are seen as 0)
+ Now a test is made, and if there are problems relative to floats
+ (write/read conversion error),
+ use the C convention (always a point as separator)
+
+ ++ eeschema:
+ Removed metrics grid values, that cannot be handled in schematic.
+ (because 2 items are seen as connected if they have the same coordinates
+ mixing mm and mils with internal units = 1 mil break netlist
+ and ERC calculations
+ So grid value *must* be an integer (in 1/1000 inch).
+ And metric grid is not very useful in schematic.
+ (Also 1 mil and 0.025 mm can be seen as the same value for a schematic that do not
+ needs precision in dimensions, so no need to have mils and mm in grid values)
+
+++ pcbnew:
+ Starting work on color selection and items visibility
+ * code cleaning and removing global values.
+ * Separe visibility options for board editor and module editor
+ (work in progress, just starting)
+
+
+2010-Jan-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+ *fixed eeschema crash when using the hotkey m (move) command.
+* Pcbnew :added option to show/hide footprints values and/or references
+ See if show/hide footprints texts option is now always useful.
+
+2010-Jan-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Pcbnew:
+ Code cleaning about visibility variables (duplicates) in draw functions.
+ Removed old color and visiblity dialog
+ work in progress
+
+2010-Jan-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Pcbnew:
+ in variable names, change non existent word Hight to High
+ Remove redundant tool in left toolbar (option toolbar)
+ (this option is now in layers manager)
+ Show layers in horizontal combo box in same order as in layer manager.
+
+++all:
+ minor code cleaning.
+
+2010-Jan-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew's PCB_LAYER_WIDGET
+ Removed wxformbuilder dependency from LAYER_WIDGET, thus killing off
+ layer_widget_base.* and panel_layer_select.fbp.
+ Added aPointSize to LAYER_WIDGET constructor so it uses that font size.
+ Removed layer_widget.h from wxPcbStruct.h for faster compiles with less
+ dependencies, and this meant moving the class LYRS out of
+ class WinEDA_PcbFrame. While doing that I renamed it to PCB_LAYER_WIDGET.
+ Integration of PCB_LAYER_WIDGET into WinEDA_PcbFrame to fully support
+ the layer change logic. Added syncLayerWidget(),
+ * WinEDA_PcbFrame:
+ Added syncLayerWidget(), syncLayerBox() (via a rename), setActiveLayer(),
+ and getActiveLayer().
+ Use a font size in PCB_LAYER_WIDGET 80% of the system font size for systems
+ with screen resolution height <= 900, or 100% if not. See WinEDA_PcbFrame
+ constructor.
+ * See TODO.txt for more things that need to be done.
+
+
+2010-Jan-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Pcbnew:
+ Update Layer manager display when changing active layer (from hotkey or menus)
+ fixed minor problems and fixed Layer Alignment Target bug.
+
+2010-Jan-22 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Minor fixes and code cleaning.
+
+* Remove redundant background redrawing RedrawActiveWindow.
+* Remove redundant managed cursor callback in RedrawActiveWindow.
+* Use refresh to redraw instead of directly calling RedrawActiveWindow.
+* Remove unused SetDrawBgColor for drawframe.cpp.
+* Fix compiler warning in cvpcb/cvframe.cpp.
+* Fix menu spelling and syntax errors in pcbnew.
+* Rename Trace_Curseur to DrawCursor in common/drawpanel.cpp.
+
+2010-Jan-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Integration of LAYER_WIDGET into WinEDA_PcbFrame. See
+ TODO.txt for more things that need to be done.
+
+
+2010-Jan-17 UPDATE Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
+================================================================================
+More work to make kicad more Mac OS X compliant.
+* Workaround for wxAboutDialog bug.
+* WXMAC needs wxID_EXIT to make closing the application function properly.
+* Workaround for hotkeys, on Mac OS X we can't use Fx keys.
+ This needs to be further implemented and is a work in progress.
+ We need to modify the hotkey code to display Mac OS X the
+ special modifier keys in the hotkey list.
+
+
+2010-Jan-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++any
+ Finished up complete implementation of class LAYER_WIDGET and am now ready to
+ integrate it into PCBNEW. This class was kept as general as possible by
+ omitting as many Kicad document structures as possible, and so can be used
+ in GERBVIEW. For GERBVIEW it could benefit from some minor additional
+ work such as a "move up" function for layer order changes. This is a matter
+ of rearranging wxWindows within the m_LayersFlexGridSizer.
+ Integration into PCBNEW should be done in just a few days.
+
+
+2010-Jan-17 UPDATE Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
+================================================================================
++ EESchema
+ + Added Torsten Huter's patch for hotkeys
+ + Moved recent opened documents to submenu
+
++ Pcbnew
+ + Big (re)organisation of pcbframe menubar and cleanup
+
+2010-Jan-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Minor bug fixes, compiler warning fixes and code cleaning.
+
+* Fix debug asserts when passing NULL pointers to wxAuiPaneInfo.
+* Fix Kicad main window sash sizer bug when using wxAui.
+* Remove specctra_test from Visual Studio builds to prevent build errors.
+* Add WIN32 to layer widget test so it will build properly on Visual Studio.
+* Fixed compiler conversion warnings in PCBNew.
+* Fixed worksheet print scaling in PCBNew.
+* Minor code renaming.
+
+2010-Jan-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All
+ Use wxAutoBufferedPaintDC in OnPaint event
+ Seems solves slow grid redraw on some PC (tested under Window 7)
+ and is faster than use wxPaintDC, not buffered
+ (note MACOSX has natively a double buffer, so no change for MACOSX)
+
+2010-Jan-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Gerbview
+ Added support of arcs in polygons outlines.
+ Needed to show copper areas in some gerber files
+ Not fully tested but works better than without this support...
+
+
+2010-Jan-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ - fixed a potential bug in a fill zone function: AddClearanceAreasPolygonsToPolysList()
+ - Try to fix a problem with AddClearanceAreasPolygonsToPolysList() under Window Vista and Window 7
+ This is perhaps a problem in kbool library
+ (a bug in Bool_Engine destructor ?)
+ It happens when:
+ - a lot of polygon corners are added in group A
+ - nothing in group B
+ - No operation asked in kbool engine ( that also has a bug if an operation is asked
+ with no polygon in group B)
+ - and call the Bool_Engine destructor.
+ Could be a stack error or overflow, very hard to locate and debug.
+ - Under Vista seems create always a crash.
+ - Under Window 7 sometimes create a crash.
+ - No problem under XP and Linux.
+ -Workaround:
+ Leave the group A void if group B is void.
+ I am not sure this change fix the problem.
+ Just it solves this problem with 2 samples boards that crash Pcbnew without this change.
+
+2010-Jan-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Rewrite plot dialog using wxDialogBlocks.
+ Display layers list according to the Setup layers dialog order.
+++Gerbview
+ Write Gerbview plot dialog using wxDialogBlocks.
+ Do not use anymore the Pcbnew one.
+
diff --git a/Documentation/changelogs/CHANGELOG-2011.txt b/Documentation/changelogs/CHANGELOG-2011.txt
new file mode 100644
index 0000000..fc3e1e6
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2011.txt
@@ -0,0 +1,297 @@
+KiCad ChangeLog 2011
+====================
+
+Please add newer entries at the top, list the date and your name with
+email address.
+
+
+2011-Dec-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ Enhanced algorithms to calculate board connections:
+ - A track is seen connected to a pad if the track end is inside the pad shape.
+ - Pads inside pads are now seen connected, if the center of the pad is
+ *inside* the other pad.
+ (this is made to be sure a large copper area is shared by the 2 pads,
+ and to keep algorithm fast).
+ Algorithm to calculate pads connections is still very fast.
+ However some other functions (drag pads, track len calculation ...)
+ still need the track end exactly on the pad position.
+
+
+2011-Dec-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ * changed all the RotatePoint() functions in trigo.{h,cpp} to take a double as the
+ angle, which is still in tenths of degrees for now.
+ * EDA_TEXT::m_Orient is now double, still in tenths of degrees (for a short while),
+ but the double means parsing files and saving them use a different format string.
+++pcbnew
+ * DRAWSEGMENT::GetStart() and GetEnd() do not operate for S_ARC like they used to.
+ They are now simply accessors for m_Start and m_End. Use DRAWSEGMENT::GetArcStart()
+ and GetArcEnd() and GetCenter() for arcs. specctra_export.cpp was the only
+ source file dependent on the old behavior.
+ * DIMENSION::m_Text is now contained, not dynamically allocated.
+ * more kicad_plugin work.
+
+
+2011-Dec-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++PCBNew
+ * added BOARD::GetPad(int), made BOARD::m_NetInfo private, and contained
+ within the BOARD, not dynamically allocated and owned via pointer.
+ * added BOARD::GetPadCount()
+ * changed NETINFO_LIST::GetCount() to GetNetCount()
+ * added BOARD::GetNetCount()
+ * more kicad_plugin work.
+
+2011-Dec-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++PCBNew
+ * Removed Pcb_Frame argument from BOARD() constructor, since it precludes
+ having a BOARD being edited by more than one editor, it was a bad design.
+ And this meant removing m_PcbFrame from BOARD.
+ * removed BOARD::SetWindowFrame(), since BOARD::m_PcbFrame gone.
+ * Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
+ * Added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
+ * A couple of dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
+ such as dialog_mask_clearance, dialog_drc, etc.
+ * Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
+ with build_version.h's #define BOARD_FILE_VERSION, although there may be a
+ better place for this constant.
+ * Made the public functions in PARAM_CFG_ARRAY be type const.
+ void SaveParam(..) const and void ReadParam(..) const
+ * PARAM_CFG_BASE now has virtual destructor since we have various ways of
+ destroying the derived classes and boost::ptr_vector must be told about this.
+ * Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
+ an automatic PARAM_CFG_ARRAY which is on the stack.
+ * PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
+ since it has to access the current BOARD and the BOARD can change.
+ Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
+ * Made the m_BoundingBox member private, this was a brutally hard task,
+ and indicative of the lack of commitment to accessors and object oriented
+ design on the part of KiCad developers. We must do better.
+ Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
+ * Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
+
+
+2011-Dec-04, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ Enhanced algorithms to calculate board connections:
+ Previously, a track was seen connected to a pad only if the track end is
+ exactly on the pad position.
+ Now a track is seen connected to a pad if the track end is inside the pad shape.
+ Algorithm to calculate pads connections to track is still very fast.
+ However some other functions (drag pads, track len calculation ...)
+ still need the track end exactly on the pad position.
+
+2011-Nov-27 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++PCBNew
+ * Add PLUGIN and IO_MGR classes.
+ * Remove one argument from BOARD constructor,
+ * add BOARD::SetWindowFrame()
+
+2011-sept-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ PCBNew locate code refactoring.
+
+ * Move various locate functions into the appropriate board item object.
+ * Unified best zoom for all frames derived from PCB_BASE_FRAME.
+ * Remove track.cpp as it is no longer needed.
+ * Dead code removal.
+ * Remove scary frame window pointer member from board item objects.
+ * Add draw bounding box to gerber draw item for debugging purposes.
+
+2012-Sept-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ * Write an automatic bitmap generation script in cmake, PNG2cpp.cmake
+ * Write an infrastructure generate *.png files from inkscape files, and do
+ it maintaing the "as needed" change detection support.
+ * Support an *.SVG maintainer mode, AND an *.SVG user mode.
+ * Engineer a seemless switchover from old style xpm files, with minimal
+ impact to system wide source code.
+
+2011-Sept-07, UPDATE Andrey Fedorushkov <andrf@mail.ru>
+================================================================================
+Pcbnew:
+ Add hotkey "P" - place item
+ Add Roman Bashkov patch for record/play sequence hotkey macros
+ Add record and play macros for sequence hotkey.
+ Macros set to numeric key 0..9:
+ <Ctrl>+<numkey> - start record macros
+ <hotkey> <mouse move> ... <hotkey>|<mouse place>
+ <Ctrl>+<numkey> - end record macros
+ <numkey> - play macros
+ Add menu save/read macros to/from xml-file
+ Add configure rotate angle for rotate module: 45 or 90 deg.
+ Fix segfault when move/drag segment if disconnected to pad
+
+2011-Sept-01, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+ Add Fabrizio Tappero <fabrizio-dot-tappero[at]gmail-dot-com> in contributors list.
+Eeschema:
+ Graphic texts ans labels: fix fully broken undo/redo code relative to the way undo/redo command
+ handles changes (maintly move) for labels
+ Fix minor bug for undo command relative to block rotate
+ Remove dead code.
+ Add new class BITMAP_BASE, and (for Eeschema) SCH_BITMAP to handle bitmap images in schematic.
+ Remember plot Bitmaps in not possble with all plotters.
+
+
+2011-Aug-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ Add support for not plated through holes (NPTH) pads
+ * These NPTH pads are used for mechanical purpose only, and cannot be connected to a net.
+ * When these pads have a same size and shape for the hole and the pad, the pad is not plotted
+ in GERBER files.
+
+2011-Apr-12, UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+Minor UI changes that affect OS X platform.
+ - Fix for opening the help contents
+ - Fix for opening files with the default editor
+ - Fix for opening PDF files
+
+Solved all with the BSD open command, for other OS'es which have X11 and
+utilities they can use the xdg-open command which I added to the pdf viewer tries
+list.
+
+Kicad projectview:
+Remove not-existing files when a empty project is created, this confuses when
+users try to open it. Show a entry that the project is empty instead of these
+void files.
+
+2011-Apr-6, UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+Cleanup of all the menubar code to have the same style, remove the C comments.
+Make the wxMenu behave native on OSX for KiCad, CvPCB and Gerbview and remove
+unneeded ifdefs when using the wxIDs. Add a OnQuit for the gerber frame.
+Change item->SetBitmap( item ) to use macro SET_BITMAP for menu items.
+
+2011-Apr-4, UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+More native OSX changes, this removes some WXMAC defines replaced by wxID
+macros. These are handled by wxWidgets itself and reduces in-app platform
+defines. More work needs to be done for CvPCB and Gerbview.
+
+All:
+ Hotkey names in menu's all have tabs, this looks more uniform and pretty.
+
+EESschema & PCBNew:
+ Fix about and preferences wxMenu to be more native (remove unneeded WXMAC )
+ Disable all icons in wxMenu on OSX with macro SETBITMAPS
+
+jp charras:
+ SETBITMAPS is incorrectly used here. change to SET_BITMAP
+
+2011-Mar-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ EESchema multiple item hit testing and other minor improvements.
+
+ * Add item clarification context menu to EESchema when multiple unresolved
+ items are found at the current cross hair position.
+ * Add collector class SCH_COLLECTOR for supporting multiple item hit testing.
+ * Removed bit wise masked filtering from schematic item hit testing.
+ * Removed all old hit testing functions and methods scattered about the
+ EESchema source code.
+ * Move terminal point test function into SCH_SCREEN object.
+ * Fixed bug in terminal point test when terminating a bus to a label.
+ * Define the < operator for sorting schematic items.
+ * Add area calculation method to EDA_Rect item.
+ * Add method for returning an item's bitmap for menu display purposes.
+ * Add method for returning an item's menu text for menu display purposes.
+ * Changed EDA_ITEMS container from boost::ptr_vector to std::vector.
+ * Factor coordinate string conversion code from EDA_DRAW_FRAME to function CoordinateToString().
+
+2011-Mar-16, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Gerbview:
+ Added: read Excellon files created by Pcbnew.
+ The full Excellon command set is not supported, but drill files created by Pcbnew are supported.
+
+2011-Feb-05, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+CvPcb:
+ Code cleanup. Rename WinEDA_CvpcbFrame to CVPCB_MAINFRAME,
+ according to coding style policy.
+ Change in CvPcb:
+ CvPcb does not use now .dcm files, only .mod files,
+ to read modules keywords and doc
+
+
+2011-Feb-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common:
+ * macros.h now has TO_UTF8() and FROM_UTF8() which are working converters
+ to and from UTF-8 encoding for any wxWidgets build mode. We can switch to
+ them at any time. I am using them now for specctra conversions and
+ elsewhere where I wanted gauranteed UTF8 encoding.
+ * added OUTPUTFORMATTER::Quoted( const wxString& ) to simplify converting
+ to UTF8 encoded s-expression atoms. The recommended technique is now simply:
+ out->Quoted( wxString ).c_str()
+
+2011-Jan-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ * DSNLEXER::NextTok() now uses two separate modes to parse quoted strings.
+ This gives us the freedom to control our own destiny separate from the
+ constraints put on us by the Specctra DSN spec.
+ * Added Documentation/s-expressions.txt to explain all this.
+ * Enhanced our quoting protocol by moving away from doubling up double quotes
+ to a C like escape mechanism.
+ * Now support multi-line strings, which when properly escaped, can still be
+ read in as a token originating on a single line.
+
+2011-Jan-21 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ EESchema code refactoring and coding policy naming fixes.
+
+ * Move schematic wire and bus break code into schematic screen object.
+ * Move schematic test for dangling ends into schematic screen object.
+ * Remove left over debugging output in schematic screen object.
+ * Remove unused file eeschema/cleanup.cpp.
+ * Fix bug in schematic line object hit test algorithm.
+ * Fix a string concatenation compile error added in r2752.
+ * Rename class WinEDA_BasicFrame to EDA_BASE_FRAME.
+ * Rename class WinEDA_DrawFrame to EDA_DRAW_FRAME.
+ * Rename class WinEDA_DrawPanel to EDA_DRAW_PANEL.
+
+2011-Jan-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ * TokenList2DsnLexer.cmake now supports comments, which start with a leading
+ # character, and may be either on their own line or on a line after a token.
+ * DSNLEXER::PopReader() now pops even the last LINE_READER* and returns it.
+++pcbnew:
+ * SPECCTRA_DB now inherits from new class SPECCTRA_LEXER, which led to a great
+ deal of simplification and code factoring.
+ * Moved specctra keywords into specctra.keywords.
+
+2011-Jan-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ * TokenList2DsnLexer.cmake now wraps each token enum in its own namespace. It
+ also no longer setup of the "using" directive in the header file, which was
+ bad behavior. C++ enum values will have name collisions unless the enums
+ themselves are different namespaces.
+++new:
+ * Sweet library is now a DSO/DLL.
+ * Brought in SWIG to do a wrap of the Sweet DSO/DLL for unit testing
+ and scripting. The SWIG DSO/DLLs are built separate from the Sweet DSO/DLL
+ and are also optional.
+
+2011-Jan-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++new:
+ * Added the basic structure to the Sweet parser in sch_part.cpp.
+ * Got inheritence working off of the 'extends' keyword and PART::inherit()
+ * Tossed the units support out of sweet.keywords, since we agreed to go dimensionless.
+++richio:
+ * Added the problemInputLine support to PARSE_ERROR, so UI can show the
+ offending line of bytes. Yes bytes, not even guaranteed to be characters.
+
+
diff --git a/Documentation/coding_style_policy.pdf b/Documentation/coding_style_policy.pdf
new file mode 100644
index 0000000..e9b1b32
--- /dev/null
+++ b/Documentation/coding_style_policy.pdf
Binary files differ
diff --git a/Documentation/development/Doxyfile b/Documentation/development/Doxyfile
new file mode 100644
index 0000000..37b6522
--- /dev/null
+++ b/Documentation/development/Doxyfile
@@ -0,0 +1,1780 @@
+
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME = "KiCad Developer's Resource Documentation"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = doxygen
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 6
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text "
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = coding-style-policy.md \
+ stable-release-policy.md \
+ road-map.md \
+ compiling.md
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS = *.h
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/Documentation/development/coding-style-policy.md b/Documentation/development/coding-style-policy.md
new file mode 100644
index 0000000..2a54dc1
--- /dev/null
+++ b/Documentation/development/coding-style-policy.md
@@ -0,0 +1,800 @@
+# KiCad C++ Source Code Style Guide #
+
+Latest Publishing: February 2013
+
+First Published: September 2010
+
+written by
+
+Wayne Stambaugh \<<stambaughw@verizon.net>\>
+and
+Dick Hollenbeck \<<dick@softplc.com>\>
+
+[TOC]
+
+# 1. Introduction # {#intro}
+The purpose of this document is to provide a reference guide for KiCad
+developers about how source code should be styled and formatted in
+KiCad. It is not a comprehensive programming guide because it does not
+discuss many things such as software engineering strategies, source
+directories, existing classes, or how to internationalize text. The goal
+is to make all of the KiCad source conform to this guide.
+
+## 1.1 Why Coding Style Matters ## {#why}
+You may be thinking to yourself that using the style defined in this
+document will not make you a good programmer and you would be correct.
+Any given coding style is no substitute for experience. However, any
+experienced coder will tell that the only thing worse than looking at
+code that is not in your preferred coding style, is looking at twenty
+different coding styles that are not your preferred coding style.
+Consistency makes a) problems easier to spot, and b) looking at code for
+long periods of time more tolerable.
+
+## 1.2 Enforcement ## {#enforcement}
+The KiCad coding police are not going to break down your door and beat
+you with your keyboard if you don't follow these guidelines (although
+there are those who would argue that they should). However, there are
+some very sound reasons why you should follow them. If you are
+contributing patches, you are much more likely to be taken seriously by
+the primary developers if your patches are formatted correctly. Busy
+developers don't have the time to go back and reformat your code. If you
+have a desire to become a regular KiCad developer with commit access to
+the development branch, you're not likely to get a glowing
+recommendation by the lead developers if you will not follow these
+guidelines. It is just good programming courtesy to follow this policy
+because it is respectful of the investment already made by the existing
+developers. The other KiCad developers will appreciate your effort.
+
+**Warning**
+
+**Do not modify this document without the consent of the project
+leader. All changes to this document require approval.**
+
+
+# 2. Naming Conventions # {#naming_conventions}
+Before delving into anything as esoteric as indentation and formatting,
+naming conventions need to be addressed. This section does not attempt
+to define what names you use for your code. Rather, it defines the style
+for naming. See the references section for links to some excellent
+coding references. When defining multiple word names use the following
+conventions for improved readability:
+
+- Use underscores for all upper and all lower case variables to make
+ multiple word names more readable.
+- Use camel case for mixed case variable names.
+
+Avoid mixing camel case and underscores.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ CamelCaseName // if camelcase, then no underscores
+ all_lower_case_name
+ ALL_UPPER_CASE_NAME
+~~~~~~~~~~~~~
+
+## 2.1 Class, Type Definitions, Name Space, and Macro Names ## {#definitions}
+Class, typedef, enum, name space, and macro names should be comprised of
+all capital letters.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ class SIMPLE
+ #define LONG_MACRO_WITH_UNDERSCORES
+ typedef boost::ptr_vector<PIN> PIN_LIST;
+ enum KICAD_T {...};
+~~~~~~~~~~~~~
+
+## 2.2 Local, Private and Automatic Variables ## {#local_variables}
+The first character of automatic, static local, and private variable
+names should be lower case. This indicates that the variable will not be
+“visible†outside of the function, file, or class where they are
+defined, respectively. The limited visibility is being acknowledged with
+the lowercase starting letter, where lowercase is considered to be less
+boisterous than uppercase.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ int i;
+ double aPrivateVariable;
+ static char* static_variable = NULL;
+~~~~~~~~~~~~~
+
+## 2.3 Public and Global Variables ## {#global_variables}
+The first character of public and global variable names are to be
+uppercase. This indicates that the variable is visible outside the class
+or file in which it was defined. (An exception is the use of prefix `g_`
+which is also sometimes used to indicate a global variable.)
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ char* GlobalVariable;
+~~~~~~~~~~~~~
+
+## 2.4 Local, Private and Static Functions ## {#functions}
+The first character of local, private, and static functions should be
+lower case. This indicates that the function is not visible outside the
+class or file where it is defined.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ bool isModified();
+ static int buildList( int* list );
+~~~~~~~~~~~~~
+
+## 2.5 Function Arguments ## {#function_arguments}
+Function arguments are prefixed with an 'a' to indicate these are
+arguments to a function. The 'a' stands for “argumentâ€, and it also
+enables clever and concise Doxygen comments.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ /*/** */*
+ * Function SetFoo
+ * takes aFoo and copies it into this instance.
+ */
+ void SetFoo( int aFoo );
+~~~~~~~~~~~~~
+
+Notice how the reader can say “a Foo†to himself when reading this.
+
+## 2.6 Pointers ## {#pointers}
+It is not desired to identify a pointer by building a 'p' into the
+variable name. The pointer aspect of the variable pertains to type, not
+purpose.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ MODULE* module;
+~~~~~~~~~~~~~
+
+The purpose of the variable is that it represents a MODULE. Something
+like `p_module` would only make that harder to discern.
+
+## 2.7 Accessing Member Variables and Member Functions ## {#accessing_members}
+We do not use “`this->`†to access either member variables or member
+functions from within the containing class. We let C++ perform this for
+us.
+
+
+# 3. Commenting # {#commenting}
+Comments in KiCad typically fall into two categories: in line code
+comments and Doxygen comments. In line comments have no set formatting
+rules other than they should have the same indent level as the code if
+they do not follow a statement. In line comments that follow statements
+should not exceed 99 columns unless absolutely necessary. The prevents
+word wrapping in an editor when the viewable columns is set to 100. In
+line comments can use either the C++ or the C commenting style, but C++
+comments are preferred for single line comments or comments consisting
+of only a few lines.
+
+## 3.1 Blank Lines Above Comments ## {#blank_lines_above_comments}
+If a comment is the first thing on a line, then that comment should have
+one or more blank lines above them. One blank line is preferred.
+
+## 3.2 Doxygen ## {#doxygen}
+Doxygen is a C++ source code documenting tool used by the project. Descriptive
+*.html files can be generated from the source code by installing Doxygen and
+building the target named **doxygen-docs**.
+
+ $ cd <kicad_build_base>
+ $ make doxygen-docs
+
+The \*.html files will be placed into
+\<kicad\_project\_base\>/Documentation/doxygen/html/
+
+Doxygen comments are used to build developer documentation from the
+source code. They should normally be only placed in header files and not
+in \*.cpp files. This eliminates the obligation to keep two comments in
+agreement with each other. is if the class, function, or enum, etc. is
+only defined in a \*.cpp source file and not present in any header file,
+in which case the Doxygen comments should go into the \*.cpp source file.
+Again, avoid duplicating the Doxygen comments in both the header and
+\*.cpp source files.
+
+KiCad uses the JAVADOC comment style defined in the [“Documenting the
+codeâ€][doccode] section of the Doxygen [manual][manual]. Don't forget
+to use the special Doxygen tags: bug, todo, deprecated, etc., so other
+developers can quickly get useful information about your code. It is
+good practice to actually generate the Doxygen \*.html files by
+building target doxygen-docs, and then to review the quality of your
+Doxygen comments with a web browser before submitting a patch.
+
+[doccode]: http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html
+[manual]: http://www.stack.nl/~dimitri/doxygen/manual.html
+
+### 3.2.1 Function Comments ### {#function_comments}
+These go into a header file, unless the function is a private (i.e.
+static) function known only to a \*.cpp file. The format of a function
+comment is chosen to serve a dual purpose role: delineation of the
+function declaration within the source code and to create a consistent
+leading sentence in the doxygen html output. The chosen format is
+“Function \<name\>†as shown in the example below.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ /*/** */*
+ * Function Print
+ * formats and writes text to the output stream.
+ * @param nestLevel is the multiple of spaces to precede the output with.
+ * @param fmt is a printf() style format string.
+ * @param ... is a variable list of parameters that will get blended into
+ * the output under control of the format string.
+ * @return int - the number of characters output.
+ * @throw IO_ERROR, if there is a problem outputting, such asisk.
+ */
+ int PRINTF_FUNC Print( int nestLevel,
+ const char* fmt, ... ) throw( IO_ERROR );
+~~~~~~~~~~~~~
+
+The “Function \<name\>†text goes on the 2nd line of the comment. The
+\@return keyword if present, should show the type of the return value
+followed by a hiphen. The \@param keyword names a function parameter
+and the text following should flow like a normal English sentence.
+
+### 3.2.2 Class Comments ### {#class_comments}
+A class comment describes a class declaration by giving the purpose and
+use of the class. Its format is similar to a function comment. Doxygen
+can use the html \<p\> (paragraph designation) to begin a new paragraph
+in its output. So if the text of the comment is large, break it put into
+multiple paragraphs.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ /*/** */*
+ * Class OUTPUTFORMATTER
+ * is an important interface (abstract) class used to output UTF8 text in
+ * a convenient way. The primary interface is "printf() - like" but
+ * with support for indentation control. The destination of the 8 bit
+ * wide text is up to the implementer.
+ * <p>
+ * The implementer only has to implement the write() function, but can
+ * also optionally re-implement GetQuoteChar().
+ * <p>
+ * If you want to output a wxString, then use CONV_TO_UTF8() on it
+ * before passing it as an argument to Print().
+ * <p>
+ * Since this is an abstract interface, only classes derived from
+ * this one may actually be used.
+ */
+ class OUTPUTFORMATTER
+ {
+~~~~~~~~~~~~~
+
+
+# 4. Formatting # {#formatting}
+This section defines the formatting style used in the KiCad source.
+
+## 4.1 Indentation ## {#indentation}
+The indentation level for the KiCad source code is defined as four
+spaces. Please do not use tabs.
+
+### 4.1.1 Defines ### {#defines}
+There should be only one space after a \#define statement.
+
+### 4.1.2 Column Alignment ### {#column_alignment}
+Please try to align multiple consecutive similar lines into consistent
+columns when possible, such as \#define lines which can be thought of as
+containing 4 columns: \#define, symbol, value, and comment. Notice how
+all 4 columns are aligned in the example below.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ #define LN_RED 12 // my favorite
+ #define LN_GREEN 13 // eco friendly
+~~~~~~~~~~~~~
+
+Another common case is the declaration of automatic variables. These are
+preferably shown in columns of type and variable name.
+
+## 4.2 Blank Lines ## {#blank_lines}
+
+### 4.2.1 Function Declarations ### {#function_declarations}
+There should be 1 blank line above a function declaration in a class
+file if that function declaration is presented with a Javadoc comment.
+This is consist with the statement above about blank lines above
+comments.
+
+### 4.2.2 Function Definitions ### {#function_definitions}
+Function definitions in *.cpp files will not typically be accompanied by
+any comment, since those are normally only in the header file. It is
+desirable to set off the function definition within the *.cpp file by
+leaving two blank lines above the function definition.
+
+### 4.2.3 If Statements ### {#if_statements}
+There should be one blank line above if statements.
+
+## 4.3 Line Length ### {#line_length}
+The maximum line width is 99 columns. An exception to this is a long
+quoted string such as the internationalized text required to satisfy
+MSVC++, described below.
+
+## 4.4 Strings ## {#strings}
+The KiCad project team no longer supports compiling with Microsoft
+Visual C++. When you need to break long strings into smaller substrings,
+please use the C99 compliant method for improved readability. Using
+any of previously accepted methods defined below for breaking
+long internationalized strings will no longer be accepted.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ // This works with C99 compliant compilers is the **only** accepted method:
+ wxChar* foo = _( “this is a long string broken â€
+ “into pieces for readability.†);
+
+ // This works with MSVC, breaks POEdit, and is **not** acceptable:
+ wxChar* foo = _( “this is a long string broken â€
+ L“into pieces for readability†);
+
+ // This works with MSVC, is ugly, and is **not** accepted:
+ wxChar* foo = _( “this is a long string \
+ broken into pieces for readability†);
+~~~~~~~~~~~~~
+
+A second acceptable solution is to simply put the text all on one
+line, even if it exceeds the 99 character line length limit. However,
+the preferred method is to break strings within the 99 character limit
+whenever possible to prevent wrapping.
+
+## 4.5 Trailing Whitespace ## {#trailing_whitespace}
+Many programming editors conveniently indent your code for you. Some of
+them do it rather poorly and leave trailing whitespace. Thankfully, most
+editors come with a remove trailing whitespace macro or at least a
+setting to make trailing whitespace visible so you can see it and
+manually remove it. Trailing whitespace is known to break some text
+parsing tools. It also leads to unnecessary diffs in the version control
+system. Please remove trailing whitespace.
+
+## 4.6 Multiple Statements per Line ## {#multiple_statements_per_line}
+It is generally preferred that each statement be placed on its own line.
+This is especially true for statements without keywords.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ x=1; y=2; z=3; // Bad, should be on separate lines.
+~~~~~~~~~~~~~
+
+## 4.7 Braces ## {#braces}
+Braces should be placed on the line proceeding the keyword and indented
+to the same level. It is not necessary to use braces if there is only a
+single line statement after the keyword. In the case of if..else
+if..else, indent all to the same level.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ void function()
+ {
+ if( foo )
+ {
+ statement1;
+ statement2;
+ }
+ else if( bar )
+ {
+ statement3;
+ statement4;
+ }
+ else
+ statement5;
+ }
+~~~~~~~~~~~~~
+
+## 4.8 Parenthesis ## {#parenthesis}
+Parenthesis should be placed immediately after function names and
+keywords. Spaces should be placed after the opening parenthesis, before
+the closing parenthesis, and between the comma and the next argument in
+functions. No space is needed if a function has no arguments.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ void Function( int aArg1, int aArg2 )
+ {
+ while( busy )
+ {
+ if( a || b || c )
+ doSomething();
+ else
+ doSomethingElse();
+ }
+ }
+~~~~~~~~~~~~~
+
+## 4.9 Switch Formatting ## {#switch}
+The case statement is to be indented to the same level as the switch.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ switch( foo )
+ {
+ case 1:
+ doOne();
+ break;
+ case 2:
+ doTwo();
+ // Fall through.
+ default:
+ doDefault();
+ }
+~~~~~~~~~~~~~
+
+
+# 5. License Statement # {#license_statement}
+There is a the file copyright.h which you can copy into the top of
+your new source files and edit the \<author\> field. KiCad depends on
+the copyright enforcement capabilities of copyright law, and this
+means that source files must be copyrighted and not be released into
+the public domain. Each source file has one or more owners.
+
+
+# 6. Header Files # {#header_files}
+Project \*.h source files should:
+
+- contain a license statement
+- contain a nested include \#ifndef
+- be fully self standing and not depend on other headers that are not
+ included within it.
+
+The license statement was described above.
+
+## 6.1 Nested Include #ifndef ## {#nested_include}
+Each header file should include an \#ifndef which is commonly used to
+prevent compiler errors in the case where the header file is seen
+multiple times in the code stream presented to the compiler. Just
+after the license statement, at the top of the file there should be
+lines similar to these (but with a filename specific token other than
+`RICHIO_H_`):
+
+~~~~~~~~~~~~~{.cpp}
+ #ifndef RICHIO_H_
+ #define RICHIO_H_
+~~~~~~~~~~~~~
+
+And at the very bottom of the header file, use a line like this one:
+
+~~~~~~~~~~~~~{.cpp}
+ #endif // RICHIO_H_
+~~~~~~~~~~~~~
+
+The \#ifndef wrapper begins after the license statement, and ends at
+the very bottom of the file. It is important that it wrap any nested
+\#include statements, so that the compiler can skip them if the
+\#ifndef evaluates to false, which will reduce compilation time.
+
+## 6.2 Headers Without Unsatisfied Dependencies ## {#header_depends}
+Any header file should include other headers that it depends on. (Note:
+KiCad is not at this point now, but this section is a goal of the
+project.)
+
+It should be possible to run the compiler on any header file within the
+project, and with proper include paths being passed to the compiler, the
+header file should compile without error.
+
+**Example**
+
+ $ cd /svn/kicad/testing.checkout/include
+ $ g++ wx-config --cxxflags -I . xnode.h -o /tmp/junk
+
+Such structuring of the header files removes the need within a client
+\*.cpp file to include some project header file before some other project
+header file. (A client \*.cpp file is one that intends to **use, not
+implement,** the public API exposed within the header file.)
+
+Client code should not have to piece together things that a header file
+wishes to expose. The exposing header file should be viewed as a fully
+sufficient **ticket to use** the public API of that header file.
+
+This is not saying anything about how much to expose, only that that
+which is exposed needs to be fully usable merely by including the header
+file that exposes it, with no additional includes.
+
+For situations where there is a class header file and an
+implementation \*.cpp file, it is desirable to hide as much of the
+private implementation as is practical and any header file that is not
+needed as part of the public API can and should be included only in
+the implementation \*.cpp file. However, the number one concern of
+this section is that client (using) code can use the public API which
+is exposed in the header file, merely by including that one header
+file.
+
+
+# 7. I Wrote X Lines of Code Before I Read This Document # {#x_lines}
+It's OK. We all make mistakes. Fortunately, KiCad provides a
+configuration file for the code beautifier uncrustify. Uncrustify won't
+fix your naming problems but it does a pretty decent job of formatting
+your source code. There are a few places where uncrustify makes some
+less than ideal indentation choices. It struggles with the string
+declaration macros wxT(“â€) and \_(“â€) and functions used as arguments to
+other functions. After you uncrustify your source code, please review the
+indentation for any glaring errors and manually fix them. See the
+uncrustify [website][uncrustify] for more information.
+
+[uncrustify]: http://uncrustify.sourceforge.net/
+
+
+# 8. Show Me an Example # {#show_me_an_example}
+Nothing drives the point home like an example. The source file richio.h
+below was taken directly from the KiCad source.
+
+~~~~~~~~~~~~~{.cpp}
+ /*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+ #ifndef RICHIO_H_
+ #define RICHIO_H_
+
+
+ // This file defines 3 classes useful for working with DSN text files and is named
+ // "richio" after its author, Richard Hollenbeck, aka Dick Hollenbeck.
+
+
+ #include <string>
+ #include <vector>
+
+ // I really did not want to be dependent on wxWidgets in richio
+ // but the errorText needs to be wide char so wxString rules.
+ #include <wx/wx.h>
+ #include <cstdio> // FILE
+
+
+
+ /*/** */*
+ * Struct IOError
+ * is a class used to hold an error message and may be used to throw exceptions
+ * containing meaningful error messages.
+ */
+ struct IOError
+ {
+ wxString errorText;
+
+ IOError( const wxChar* aMsg ) :
+ errorText( aMsg )
+ {
+ }
+
+ IOError( const wxString& aMsg ) :
+ errorText( aMsg )
+ {
+ }
+ };
+
+
+ /*/** */*
+ * Class LINE_READER
+ * reads single lines of text into its buffer and increments a line number counter.
+ * It throws an exception if a line is too long.
+ */
+ class LINE_READER
+ {
+ protected:
+
+ FILE* fp;
+ int lineNum;
+ unsigned maxLineLength;
+ unsigned length;
+ char* line;
+ unsigned capacity;
+
+ public:
+
+ /*/** */*
+ * Constructor LINE_READER
+ * takes an open FILE and the size of the desired line buffer.
+ * @param aFile An open file in "ascii" mode, not binary mode.
+ * @param aMaxLineLength The number of bytes to use in the line buffer.
+ */
+ LINE_READER( FILE* aFile, unsigned aMaxLineLength );
+
+ ~LINE_READER()
+ {
+ delete[] line;
+ }
+
+ /*
+ int CharAt( int aNdx )
+ {
+ if( (unsigned) aNdx < capacity )
+ return (char) (unsigned char) line[aNdx];
+ return -1;
+ }
+ */
+
+ /*/** */*
+ * Function ReadLine
+ * reads a line of text into the buffer and increments the line number
+ * counter. If the line is larger than the buffer size, then an exception
+ * is thrown.
+ * @return int - The number of bytes read, 0 at end of file.
+ * @throw IOError only when a line is too long.
+ */
+ int ReadLine() throw (IOError);
+
+ operator char* ()
+ {
+ return line;
+ }
+
+ int LineNumber()
+ {
+ return lineNum;
+ }
+
+ unsigned Length()
+ {
+ return length;
+ }
+ };
+
+
+
+ /*/** */*
+ * Class OUTPUTFORMATTER
+ * is an interface (abstract class) used to output ASCII text in a convenient
+ * way. The primary interface is printf() like but with support for indentation
+ * control. The destination of the 8 bit wide text is up to the implementer.
+ * If you want to output a wxString, then use CONV_TO_UTF8() on it before passing
+ * it as an argument to Print().
+ * <p>
+ * Since this is an abstract interface, only classes derived from this one
+ * will be the implementations.
+ */
+ class OUTPUTFORMATTER
+ {
+
+ #if defined(__GNUG__) // The GNU C++ compiler defines this
+
+ // When used on a C++ function, we must account for the "this" pointer,
+ // so increase the STRING-INDEX and FIRST-TO_CHECK by one.
+ // See http://docs.freebsd.org/info/gcc/gcc.info.Function_Attributes.html
+ // Then to get format checking during the compile, compile with -Wall or -Wformat
+ #define PRINTF_FUNC __attribute__ ((format (printf, 3, 4)))
+
+ #else
+ #define PRINTF_FUNC // nothing
+ #endif
+
+ public:
+
+ /*/** */*
+ * Function Print
+ * formats and writes text to the output stream.
+ *
+ * @param nestLevel The multiple of spaces to preceed the output with.
+ * @param fmt A printf() style format string.
+ * @param ... a variable list of parameters that will get blended into
+ * the output under control of the format string.
+ * @return int - the number of characters output.
+ * @throw IOError, if there is a problem outputting, such as a full disk.
+ */
+ virtual int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IOError ) = 0;
+
+ /*/** */*
+ * Function GetQuoteChar
+ * performs quote character need determination.
+ * It returns the quote character as a single character string for a given
+ * input wrapee string. If the wrappee does not need to be quoted,
+ * the return value is "" (the null string), such as when there are no
+ * delimiters in the input wrapee string. If you want the quote_char
+ * to be assuredly not "", then pass in "(" as the wrappee.
+ * <p>
+ * Implementations are free to override the default behavior, which is to
+ * call the static function of the same name.
+
+ * @param wrapee A string that might need wrapping on each end.
+ * @return const char* - the quote_char as a single character string, or ""
+ * if the wrapee does not need to be wrapped.
+ */
+ virtual const char* GetQuoteChar( const char* wrapee ) = 0;
+
+ virtual ~OUTPUTFORMATTER() {}
+
+ /*/** */*
+ * Function GetQuoteChar
+ * performs quote character need determination according to the Specctra DSN
+ * specification.
+
+ * @param wrapee A string that might need wrapping on each end.
+ * @param quote_char A single character C string which provides the current
+ * quote character, should it be needed by the wrapee.
+ *
+ * @return const char* - the quote_char as a single character string, or ""
+ * if the wrapee does not need to be wrapped.
+ */
+ static const char* GetQuoteChar( const char* wrapee, const char* quote_char );
+ };
+
+
+ /*/** */*
+ * Class STRINGFORMATTER
+ * implements OUTPUTFORMATTER to a memory buffer. After Print()ing the
+ * string is available through GetString()
+ */
+ class STRINGFORMATTER : public OUTPUTFORMATTER
+ {
+ std::vector<char> buffer;
+ std::string mystring;
+
+ int sprint( const char* fmt, ... );
+ int vprint( const char* fmt, va_list ap );
+
+ public:
+
+ /*/** */*
+ * Constructor STRINGFORMATTER
+ * reserves space in the buffer
+ */
+ STRINGFORMATTER( int aReserve = 300 ) :
+ buffer( aReserve, '\0' )
+ {
+ }
+
+
+ /*/** */*
+ * Function Clear
+ * clears the buffer and empties the internal string.
+ */
+ void Clear()
+ {
+ mystring.clear();
+ }
+
+ /*/** */*
+ * Function StripUseless
+ * removes whitespace, '(', and ')' from the mystring.
+ */
+ void StripUseless();
+
+
+ std::string GetString()
+ {
+ return mystring;
+ }
+
+
+ //-----<OUTPUTFORMATTER>------------------------------------------------
+ int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IOError );
+ const char* GetQuoteChar( const char* wrapee );
+ //-----</OUTPUTFORMATTER>-----------------------------------------------
+ };
+
+
+ #endif // RICHIO_H_
+~~~~~~~~~~~~~
+
+
+# 9. Resources # {#resources}
+There are plenty of excellent resources on the Internet on C++ coding
+styles and coding do's and don'ts. Here are a few useful ones. In most
+cases, the coding styles do not follow the KiCad coding style but there
+is plenty of other good information here. Besides, most of them have
+some great humor in them enjoyable to read. Who knows, you might even
+learn something new.
+
+- [C++ Coding Standard][cppstandard]
+- [Linux Kernel Coding Style][kernel]
+- [C++ Operator Overloading Guidelines][overloading]
+- [Wikipedia's Programming Style Page][style]
+
+[cppstandard]:http://www.possibility.com/Cpp/CppCodingStandard.html
+[kernel]:http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/Documentation/CodingStyle
+[overloading]:http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html
+[style]:http://en.wikipedia.org/wiki/Programming_style
diff --git a/Documentation/development/compiling.md b/Documentation/development/compiling.md
new file mode 100644
index 0000000..6a5ac92
--- /dev/null
+++ b/Documentation/development/compiling.md
@@ -0,0 +1,413 @@
+# Building KiCad from Source #
+If you are a user and not a developer, please consider using one of the prebuilt packages
+of KiCad which can be found at the [download][] page on the [KiCad website][]. Building KiCad
+from source is not for the faint of heart and is not recommended unless you have reasonable
+software development experience. This document contains the instructions on how to build KiCad
+from source on the supported platforms. It is not intended as a guide for installing or building
+[library dependencies](#library_dependencies). Please consult you platforms documentation for
+installing packages or the source code when building the library dependencies. Currently the
+supported platforms are Windows Versions 7-10, just about any version of Linux, and OSX
+10.7-10.10. You may be able to build KiCad on other platforms but it is not supported. On
+Windows and Linux the [GNU GCC][] is the only supported compiler and on OSX [Clang][] is the
+only supported compiler.
+
+[TOC]
+
+# Development Tools # {#development_tools}
+
+Before you begin building KiCad, there are a few tools required in addition to your compiler.
+Some of these tools are required to build from source and some are optional.
+
+## CMake Build Configuration Tool ## {#cmake}
+
+[CMake][] is the build configuration and makefile generation tool used by KiCad. It is required.
+
+
+## Bazaar Version Control System ## {#bazaar}
+
+The official source code repository is hosted on [Launchpad][] and requires the [Bazaar][] version
+control system in order to create a branch of the latest source. Bazaar is not required if you are
+going to build a stable version of KiCad from a source archive.
+
+## GIT Version Control System ## {#git}
+
+If you prefer to use [GIT][] for version control, there is a mirror of the official KiCad
+repository on [Github][]. GIT is not required if you are going to build a stable version of
+KiCad from a source archive. Please note that the Github mirror is read only. Do not submit
+pull requests to Github. Changes should be sent to the KiCad developer's [mailing list][] as
+an attached patch with [PATCH] at the beginning of the subject.
+
+## Doxygen Code Documentation Generator ## {#doxygen_section}
+
+The KiCad source code is documented using [Doxygen][] which parses the KiCad source code files
+and builds a dependency tree along with the source documentation into HTML. Doxygen is only
+required if you are going to build the KiCad documentation.
+
+## SWIG Simplified Wrapper and Interface Generator ## {#swig}
+
+[SWIG][] is used to generate the Python scripting language extensions for KiCad. SWIG is not
+required if you are not going to build the KiCad scripting extension.
+
+
+# Library Dependencies # {#library_dependencies}
+
+This section includes a list of library dependencies required to build KiCad. It does not
+include any dependencies of the libraries. Please consult the library's documentation for any
+additional dependencies. Some of these libraries are optional depending on you build
+configuration. This is not a guide on how to install the library dependencies using you systems
+package management tools or how to build the library from source. Consult the appropriate
+documentation to perform these tasks.
+
+## wxWidgets Cross Platform GUI Library## {#wxwidgets}
+
+[wxWidgets][] is the graphical user interface (GUI) library used by KiCad. The current minimum
+version is 3.0.0. However, 3.0.2 should be used whenever possible as there are some known bugs
+in prior versions that can cause problems on some platforms. Please note that there are also
+some platform specific patches that must be applied before building wxWidgets from source. These
+patches can be found in the [patches folder][] in the KiCad source. These patches are named by
+the wxWidgets version and platform name they should be applied against. wxWidgets must be built
+with the --with-opengl option. If you installed the packaged version of wxWidgets on your system,
+verify that it was built with this option.
+
+## Boost C++ Libraries ## {#boost}
+
+The [Boost][] C++ library is required only if you intend to build KiCad with the system installed
+version of Boost instead of the default internally built version. If you use the system installed
+version of Boost, version 1.56 or greater is required. Please note there are some platform
+specific patches required to build a working Boost library. These patches can be found in the
+[patches folder][] in the KiCad source. These patches are named by the platform name they should
+be applied against.
+
+## GLEW OpenGL Extension Wrangler Library ## {#glew}
+
+The [OpenGL Extension Wrangler][GLEW] is an OpenGL helper library used by the KiCad graphics
+abstraction library [GAL] and is always required to build KiCad.
+
+## GLUT OpenGL Utility Toolkit Library ## {#glut}
+
+The [OpenGL Utility Toolkit][GLUT] is an OpenGL helper library used by the KiCad graphics
+abstraction library [GAL] and is always required to build KiCad.
+
+## Cairo 2D Graphics Library ## {#cairo}
+
+The [Cairo][] 2D graphics library is used as a fallback rendering canvas when OpenGL is no
+available and is always required to build KiCad.
+
+## Python Programming Language ## {#python}
+
+The [Python][] programming language is used to provide scripting support to KiCad. It only needs
+to be install if the [KiCad scripting](#kicad_scripting) build configuration option is enabled.
+
+## wxPython Library ## {#wxpython}
+
+The [wxPython][] library is used to provide a scripting console for Pcbnew. It only needs to be
+installed if the [wxPython scripting](#wxpython_scripting) build configuration option is enabled.
+When building KiCad with wxPython support, make sure the version of the wxWidgets library and
+the version of wxPython installed on your system are the same. Mismatched versions have been
+known to cause runtime issues.
+
+# KiCad Build Configuration Options # {#build_opts}
+
+KiCad has many build options that can be configured to build different options depending on
+the availability of support for each option on a given platform. This section documents
+these options and their default values.
+
+## Case Sensitivity ## {#case_sensitive_opt}
+
+The KICAD_KEEPCASE option allows you to build KiCad so that the string matching for component
+names is case sensitive of case insensitive. This option is enabled by default.
+
+## Advanced Graphics Context ## {#graphics_context_opt}
+
+The USE_WX_GRAPHICS_CONTEXT option replaces wxDC with wxGraphicsContext for graphics rendering.
+This option is disabled by default. Warning: the is experimental and has not been maintained
+so use at your own risk.
+
+## Graphics Context Overlay ## {#overlay_opt}
+
+The USE_WX_OVERLAY option is used to enable the optional wxOverlay class for graphics rendering
+on OSX. This is enabled on OSX by default and disabled on all other platforms.
+
+## Scripting Support ## {#scripting_opt}
+
+The KICAD_SCRIPTING option is used to enable building the Python scripting support into Pcbnew.
+This options is disabled by default.
+
+## Scripting Module Support ## {#scripting_mod_opt}
+
+The KICAD_SCRIPTING_MODULES option is used to enable building and installing the Python modules
+supplied by KiCad. This option is disabled by default.
+
+## wxPython Scripting Support ## {#wxpython_opt}
+
+The KICAD_SCRIPTING_WXPYTHON option is used to enable building the wxPython interface into
+Pcbnew including the wxPython console. This option is disabled by default.
+
+## Github Plugin ## {#github_opt}
+
+The BUILD_GITHUB_PLUGIN option is used to control if the Github plugin is built. This option is
+enabled by default.
+
+## Build with Static Libraries ## {#static_lib_opt}
+
+The KICAD_BUILD_STATIC option is used to build KiCad with static libraries. This option is
+used for OSX builds only and is disabled by default.
+
+## Build with Dynamic Libraries ## {#dynamic_lib_opt}
+
+The KICAD_BUILD_DYNAMIC option is used to build KiCad with dynamic libraries. This option is
+used for OSX only and is disabled by default.
+
+## Build with System Boost ## {#boost_opt}
+
+The KICAD_SKIP_BOOST option allow you to use the Boost libraries installed on your system to
+be used instead of downloading Boost 1.54 and building a custom version specifically for
+building KiCad. It is high recommended that you enable this option on Linux and use Boost
+version 1.56 or greater. On other platforms you mileage may vary. This option is disabled
+by default.
+
+## OSX Dependency Builder ## {#osx_deps_opt}
+
+The USE_OSX_DEPS_BUILDER option forces the build configuration to download and build the
+required dependencies to build KiCad on OSX. This option is not longer maintained and most
+likely is broken. Use it at your own peril.
+
+## Setting the Build Version and Repository Name ## {#build_version_opt}
+
+The KiCad version string is defined by the three CMake variables KICAD_VERSION, KICAD_BRANCH_NAME,
+and KICAD_VERSION_EXTRA. Variables KICAD_BRANCH_NAME and KICAD_VERSION_EXTRA are defined as empty
+strings and can be set at configuration. Unless the source branch is a stable release archive,
+KICAD_VERSION is set to "no-vcs-found". If an optional variable is not define, it is not appended
+to the full version string. If an optional variable is defined it is appended along with a leading
+'-' to the full version string as follows:
+
+ KICAD_VERSION[-KICAD_BRANCH_NAME][-KICAD_VERSION_EXTRA]
+
+When the version string is set to "no-vcs-found", the build script automatically creates the
+version string information from the [git][] repository information as follows:
+
+
+ (2016-08-26 revision 67230ac)-master
+ | | |
+ | | branch name, "HEAD" if not on a branch,
+ | | or "unknown" if no .git present
+ | |
+ | abbreviated commit hash, or no-git if no .git
+ | present
+ |
+ date of commit, or date of build if no .git present
+
+# Getting the KiCad Source Code ## {#getting_src}
+
+There are several ways to get the KiCad source. If you want to build the stable version you
+can down load the source archive from the [KiCad Launchpad][] developers page. Use tar or some
+other archive program to extract the source on your system. If you are using tar, use the
+following command:
+
+ tar -xzf kicad_src_archive.tar.gz
+
+If you are contributing directly to the KiCad project on Launchpad, you can create a local
+branch on your machine by using the following command:
+
+ bzr branch lp:repo_to_branch
+
+If you prefer to use [GIT][] as you version control system, you can clone the KiCad mirror on
+Github using the following command:
+
+ git clone https://github.com/KiCad/kicad-source-mirror
+
+Here is a list of source links:
+
+Stable release archive: https://launchpad.net/kicad/4.0/4.0.0-rc1/+download/kicad-4.0.0-rc1.tar.xz
+
+Development branch: https://code.launchpad.net/~kicad-product-committers/kicad/product
+
+Github mirror: https://github.com/KiCad/kicad-source-mirror
+
+# Building KiCad on Linux # {#build_linux}
+
+To perform a full build on Linux, run the following commands:
+
+ cd kicad_source_tree
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ ../../
+ make
+ sudo make install
+
+If the CMake configuration fails, determine the missing dependencies and install them on your
+system. By default, CMake sets the install path on Linux to /usr/local. Use the
+CMAKE_INSTALL_PREFIX option to specify a different install path.
+
+# Building KiCad on Windows # {#build_windows}
+
+The preferred Windows build environment is [MSYS2][]. The [MinGW][] build environment is still
+supported but it is not recommended because the developer is responsible for building *all* of
+the dependencies from source which is a huge and frustrating undertaking. The [MSYS2][] project
+provides packages for all of the require dependencies to build KiCad. To setup the [MSYS2][]
+build environment, depending on your system download and run either the [MSYS2 32-bit Installer][]
+or the [MSYS2 64-bit Installer][]. After the installer is finished, update to the latest
+package versions by running the `msys2_shell.bat` file located in the MSYS2 install path and
+running the command `pacman -Syu`. If the msys2-runtime package is updated, close the shell
+and run `msys2_shell.bat`.
+
+## MSYS2 the Easy Way ## {#msys2_easy}
+
+The easiest way to build KiCad using the [MSYS2][] build environment is to use the KiCad
+[PKGBUILD][] provided by the MSYS2 project to build package using the head of the KiCad
+development branch. To build the KiCad package, run the `msys2_shell.bat` file located in the
+MSYS2 install path and run the following commands:
+
+ pacman -S git
+ mkdir src
+ cd src
+ git clone https://github.com/Alexpux/MINGW-packages
+ cd MinGW-packages/mingw-w64-kicad-git
+ makepkg-mingw -is
+
+This will download and install all of the build dependencies, clone the KiCad source mirror
+from Github, create both 32-bit and 64-bit KiCad packages depending on your MSYS setup, and
+install the newly built KiCad packages. Please note that this build process takes a very
+long time to build even on a fast system.
+
+## MSYS2 the Hard Way ## {#msys2_hard}
+
+If you do not want to create KiCad packages and prefer the traditional `make && make install`
+method of building KiCad, your task is significantly more involved. For 64 bit builds run
+the `mingw64_shell.bat` file located in the MSYS2 install path. At the command prompt run the
+the following commands:
+
+ pacman -S mingw-w64-x86_64-cmake \
+ mingw-w64-x86_64-doxygen \
+ mingw-w64-x86_64-gcc \
+ mingw-w64-x86_64-python2 \
+ mingw-w64-x86_64-pkg-config \
+ mingw-w64-x86_64-swig \
+ mingw-w64-x86_64-boost \
+ mingw-w64-x86_64-cairo \
+ mingw-w64-x86_64-glew \
+ mingw-w64-x86_64-curl \
+ mingw-w64-x86_64-wxPython \
+ mingw-w64-x86_64-wxWidgets
+ cd kicad-source
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -G "MSYS Makefiles" \
+ -DCMAKE_PREFIX_PATH=/mingw64 \
+ -DCMAKE_INSTALL_PREFIX=/mingw64 \
+ -DDEFAULT_INSTALL_PATH=/mingw64 \
+ -DKICAD_SKIP_BOOST=ON \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ ../../
+ make install
+
+# Building KiCad on OSX # {#build_osx}
+
+Building on OSX is challenging at best. It typically requires building dependency libraries
+that require patching in order to work correctly. For more information on the complexities of
+building KiCad on OSX, see the [OSX bundle build scripts][].
+
+Download the wxPython source and build using the following commands:
+
+ cd path-to-wxwidgets-src
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx.patch
+ patch -p0 < path-to-kicad-src/wxwidgets-3.0.0_macosx_bug_15908.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx_soname.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.2_macosx_yosemite.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx_scrolledwindow.patch
+ mkdir build
+ cd build
+ export MAC_OS_X_VERSION_MIN_REQUIRED=10.7
+ ../configure \
+ --prefix=`pwd`/../wx-bin \
+ --with-opengl \
+ --enable-aui \
+ --enable-utf8 \
+ --enable-html \
+ --enable-stl \
+ --with-libjpeg=builtin \
+ --with-libpng=builtin \
+ --with-regex=builtin \
+ --with-libtiff=builtin \
+ --with-zlib=builtin \
+ --with-expat=builtin \
+ --without-liblzma \
+ --with-macosx-version-min=10.7 \
+ --enable-universal-binary=i386,x86_64 \
+ CC=clang \
+ CXX=clang++
+
+Build KiCad using the following commands:
+
+ cd kicad-source
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
+ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 \
+ -DwxWidgets_CONFIG_EXECUTABLE=path-to-wx-install/bin/wx-config \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ -DPYTHON_EXECUTABLE=path-to-python-exe/python \
+ -DPYTHON_SITE_PACKAGE_PATH=wx/wx-bin/lib/python2.7/site-packages \
+ -DCMAKE_INSTALL_PREFIX=../bin \
+ -DCMAKE_BUILD_TYPE=Release \
+ ../../
+ make
+ make install
+
+# Known Issues # {#known_issues}
+
+There are some known issues that are platform and/or dependencie specific. This section provides
+a list of the currently known issues when building KiCad.
+
+## Boost C++ Library Issues ## {#boost_issue}
+
+As of version 5 of [GNU GCC][], using the default configuration of downloading, patching, and
+building of Boost 1.54 will cause the KiCad build to fail. Therefore a newer version of Boost
+must be used to build KiCad. If your system has Boost 1.56 or greater installed, you job is
+straight forward. Configure your KiCad build using `-DKICAD_SKIP_BOOST=ON`. If your system
+does not have Boost 1.56 or greater installed, you will have to download and [build Boost][]
+from source. If you are building Boost on windows using [MinGW][] you will have to apply the
+Boost patches in the KiCad source [patch folder][].
+
+
+[download]: http://kicad-pcb.org/download/
+[KiCad website]: http://kicad-pcb.org/
+[KiCad Launchpad]: https://launchpad.net/kicad
+[GNU GCC]: https://gcc.gnu.org/
+[Clang]: http://clang.llvm.org/
+[CMake]: https://cmake.org/
+[Launchpad]: https://code.launchpad.net/~kicad-product-committers/kicad/product
+[Bazaar]: http://bazaar.canonical.com/en/
+[GIT]: https://git-scm.com/
+[Github]: https://github.com/KiCad/kicad-source-mirror
+[Doxygen]: http://www.stack.nl/~dimitri/doxygen/
+[mailing list]: https://launchpad.net/~kicad-developers
+[SWIG]: http://www.swig.org/
+[wxWidgets]: http://wxwidgets.org/
+[patches folder]: http://bazaar.launchpad.net/~kicad-product-committers/kicad/product/files/head:/patches/
+[Boost]: http://www.boost.org/
+[GLEW]: http://glew.sourceforge.net/
+[GLUT]: https://www.opengl.org/resources/libraries/glut/
+[Cairo]: http://cairographics.org/
+[Python]: https://www.python.org/
+[wxPython]: http://wxpython.org/
+[MSYS2]: http://msys2.github.io/
+[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20150916.exe
+[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20150916.exe
+[PKGBUILD]: https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-kicad-git/PKGBUILD
+[OSX bundle build scripts]:http://bazaar.launchpad.net/~adamwolf/+junk/kicad-mac-packaging/files
+[MinGW]: http://mingw.org/
+[build Boost]: http://www.boost.org/doc/libs/1_59_0/more/getting_started/index.html
diff --git a/Documentation/development/road-map.md b/Documentation/development/road-map.md
new file mode 100644
index 0000000..c1366da
--- /dev/null
+++ b/Documentation/development/road-map.md
@@ -0,0 +1,834 @@
+# Road Map #
+
+This document is the KiCad Developer's road map document. It is a living
+document that should be maintained as the project progresses. The goal of
+this document is to provide an overview for developers of where the project
+is headed to prevent resource conflicts and endless rehashing of previously
+discussed topics. It is broken into sections for each major component of
+the KiCad source code and documentation. It defines tasks that developers
+an use to contribute to the project and provides updated status information.
+Tasks should define clear objective and avoid vague generalizations so that
+a new developer can complete the task. It is not a place for developers to
+add their own personal wish list It should only be updated with approval
+of the project manager after discussion with the lead developers.
+
+Each entry in the road map is made up of four sections. The goal should
+be a brief description of the what the road map entry will accomplish. The
+task section should be a list of deliverable items that are specific enough
+hat they can be documented as completed. The dependencies sections is a list
+of requirements that must be completed before work can begin on any of the
+tasks. The status section should include a list of completed tasks or marked
+as complete as when the goal is met.
+
+[TOC]
+
+# Project # {#project}
+This section defines the tasks for the project related goals that are not
+related to coding or documentation. It is a catch all for issues such as
+developer and user relations, dissemination of information on websites,
+policies, etc.
+
+## Stable Release ## {#stable_release}
+**Goal:**
+
+Provide a lightweight stable release mechanism that is robust enough to meet
+the requirements of Linux packagers and corporate users but avoid the burden
+of back porting fixes to a maintenance branch to avoid the additional work for
+developers.
+
+**Task:**
+- Devise a process to have some type of reasonably stable release protocol
+ to provide "stable" releases for Linux distribution packagers and corporate
+ users.
+- Document "stable" release procedure.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Initial planning stages.
+
+
+## Website Improvements ## {#website_improvements}
+**Goal:**
+
+Make the website at www.kicad-pcb.org as the definitive resource for both
+users and developers which will provide a single point of reference instead
+of the many separate websites currently in used.
+
+**Task:**
+- Define the content and design of the website.
+- Implement the new design.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+
+# General # {#general}
+This section defines the tasks that affect all or most of KiCad or do not
+fit under as specific part of the code such as the board editor or the
+schematic editor.
+
+## Convert to a Single Process Application. ## {#kiway}
+**Goal:**
+
+Merge common schematic and board code into to separate dynamic objects to allow
+Eeschema and Pcbnew to run under a single process.
+
+**Task:**
+- Convert the majority core code in Eeschema and Pcbnew into dynamic libraries.
+- Provide a robust method for communicating between code running under a single
+ process.
+- Revise the schematic editor and board editor main windows run under a single
+ process instead of multiple stand alone applications.
+- Design a method for passing information between the dynamic libraries running
+ under the same process.
+- Remove inter-process communications between Eeschema and Pcbnew.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Stage 1 code released.
+- Stage 2 in process.
+
+## User Interface Modernization ## {#wxaui}
+**Goal:**
+
+Give KiCad a more modern user interface with dockable tool bars and windows.
+Create perspectives to allow users to arrange dockable windows as they prefer.
+
+**Task:**
+- Take advantage of the advanced UI features in wxAui such as detaching and
+ hiding.
+- Study ergonomics of various commercial/proprietary PCB applications (when
+ in doubt about any particular UI solution, check how it has been done in a
+ certain proprietary app that is very popular among OSHW folks and do exactly
+ opposite).
+- Clean up menu structure. Menus must allow access to all features of the
+ program in a clear and logical way. Currently some functions of Pcbnew are
+ accessible only through tool bars
+- Redesign dialogs, make sure they are following same style rules.
+- Check quality of translations. Either fix or remove bad quality translations.
+- Develop a global shortcut manager that allows the user assign arbitrary
+ shortcuts for any tool or action.
+
+**Dependencies:**
+- [wxWidgets 3](#wxwidgets3)
+
+**Status:**
+- No progress.
+
+
+# Build Tools # {#build_tools}
+This section covers build tools for both the KiCad source as well as the
+custom dependency builds required to build KiCad.
+
+## Create Separate Build Dependency Project ## {#depends_prj}
+**Goal:**
+
+Move the library dependencies and their patches into a separate project to
+developers to build and install them as required instead of requiring them
+at build time. Give developers the flexibility to build and/or install
+library dependencies as they see fit. Remove them from the KiCad source code
+to reduce the build footprint.
+
+**Task:**
+- Create a separate project to build all external dependency libraries that are
+ currently build from source (Boost, OpenSSL, etc).
+- Use CMake to create a package configuration file for each library so the
+ KiCad find package can pull in header paths, library dependencies, compile
+ flags, and link flags to build KiCad.
+- Use CMake find package to pull external dependencies.
+- Remove all build from source dependencies for KiCad source code.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Initial concept discussions.
+
+## Platform Binary Installers ## {#installers}
+**Goal:**
+
+Provide quality installers for all supported platforms.
+
+**Task:**
+- Bring OSX installer up to the level of the Window's and Linux installers.
+- Possible use of CPack to build platform specific installers as long as they
+ are of the same or better quality than the current independent installers.
+
+**Dependencies**
+- None
+
+**Status**
+- No progress
+
+
+# Common Library # {#common_lib}
+This section covers the source code shared between all of the KiCad
+applications
+
+## Unified Rendering Framework ## {#unified_rendering}
+**Goal:**
+
+Provide a single framework for developing new tools. Port existing tools
+to the new framework and remove the legacy framework tools.
+
+**Task:**
+- Port wxDC to GAL or get Cairo rendering to nearly the performance of the
+ current wxDC rendering so that we have a single framework to develop new
+ tools and we can continue to support systems that don't have a complete
+ OpenGL stack.
+
+**Dependencies**
+- [Tool framework](http://www.ohwr.org/projects/cern-kicad/wiki/WorkPackages)
+
+**Status**
+- No progress
+
+## Unified Geometry Library ## {#geometry_lib}
+**Goal:**
+
+Select a single geometry library so that all applications share a common
+base for 2D objects. Remove any redundant geometry libraries and code to
+clean up code base.
+
+**Task:**
+- Select the best geometry library (Boost, etc.) for the task.
+- Port all legacy geometry code to the selected library.
+- Remove any unused geometry library code.
+
+**Dependencies:**
+- None
+
+**Status:**
+- In progress as part of push and shove router.
+
+## Conversion to wxWidgets 3 ## {#wxwidgets3}
+**Goal:**
+
+Stop supporting the version 2 branch of wxWidgets so that newer features
+provided by version 3 can be utilized.
+
+**Task:**
+- Make wxWidgets 3 a build requirement.
+- Remove all wxWidgets 2 specific code.
+
+**Dependencies:**
+- wxWidgets 3 is widely available on Linux distributions.
+
+**Status:**
+- Build now requires 3.0.0 or greater.
+
+## Linux Printing Improvements ## {#linux_print}
+**Goal:**
+
+Bring printing on Linux up to par with printing on Windows.
+
+**Task:**
+- Resolve Linux printing issues.
+
+**Dependencies**
+- [wxWidgets 3](#wxwidgets3)
+
+**Status**
+- No progress.
+
+## Object Properties and Introspection ## {#object_props}
+**Goal:**
+
+Provide an object introspection system using properties.
+
+**Task:**
+- Select existing or develop property system.
+- Add definable properties to base objects.
+- Create introspection framework for manipulating object properties.
+- Serialization of properties to and from files and/or other I/O structures.
+- Create tool to edit property name/type/value table.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Dynamic Library Plugin ## {#plugin_base}
+**Goal:**
+
+Create a base library plugin for handling external file I/O. This will allow
+plugins to be provided that are external to the project such as providing solid
+model file support (STEP, IGES, etc.) using OpenCascade without making it a
+project dependency.
+
+**Task:**
+- Create a plugin to handle dynamically registered plugins for loading and
+ saving file formats.
+- This object should be flexible enough to be extended for handling all file
+ plugin types including schematic, board, footprint library, component
+ library, etc.
+- See [blueprint](https://blueprints.launchpad.net/kicad/+spec/pluggable-file-io)
+ on Launchpad for more information.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+
+# KiCad: Application Launcher # {#kicad}
+This section applies to the source code for the KiCad application launcher.
+
+
+# Eeschema: Schematic Editor # {#eeschema}
+This section applies to the source code for the Eeschema schematic editor.
+
+## Coherent SCHEMATIC Object ## {#sch_object}
+**Goal:**
+
+Clean up the code related to the schematic object(s) into a coherent object for
+managing and manipulating the schematic.
+
+**Task:**
+- Move most if not all of the code from SCH_SCREEN to the new SCHEMATIC object.
+- Add any missing functionality to the SCHEMATIC object.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Hierarchical Sheet Design ## {#hierarchy_fix}
+**Goal:**
+
+Create a more robust sheet instance design rather than recreating them on the
+fly every time sheet information is required.
+
+**Task:**
+- Choose a data structure to contain the sheet hierarchy.
+- Create helper class to manipulate the hierarchy data structure.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Schematic and Component Library Plugin ## {#sch_plugin}
+**Goal:**
+Create a plugin manager for loading and saving schematics and component
+libraries similar to the board plugin manager.
+
+**Task:**
+- Design plugin manager for schematics and component libraries.
+- Port the current schematic and component library file formats to use the
+ plugin.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base)
+
+**Status:**
+- No progress.
+
+## Graphics Abstraction Layer Conversion ## {#sch_gal}
+**Goal:**
+
+Take advantage of advanced graphics rendering in Eeschema.
+
+**Task:**
+- Port graphics rendering to GAL.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Port Editing Tools ## {#sch_tool_framework}
+**Goal:**
+
+Use standard tool framework across all applications.
+
+**Task:**
+- Rewrite editing tools using the new tool framework.
+
+**Dependencies:**
+- [GAL port](#sch_gal).
+
+**Status:**
+- No progress.
+
+## S-Expression File Format ## {#sch_sexpr}
+**Goal:**
+
+Make schematic file format more readable, add new features, and take advantage
+of the s-expression capability used in Pcbnew.
+
+**Task:**
+- Finalize feature set and file format.
+- Discuss the possibility of dropping the unit-less proposal temporarily to get
+ the s-expression file format and SWEET library format implemented without
+ completely rewriting Eeschema.
+- Add new s-expression file format to plugin.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base).
+
+**Status:**
+- File format document nearly complete.
+
+## Implement Sweet Component Libraries ## {#sch_sweet}
+**Goal:**
+
+Make component library design more robust and feature rich. Use s-expressions
+to make component library files more readable.
+
+**Task:**
+- Use sweet component file format for component libraries.
+
+**Dependencies:**
+- [S-expression file format](#sch_sexpr).
+
+**Status:**
+- Initial SWEET library written.
+
+## Component Library Editor Improvements ## {#lib_editor_usability}
+**Goal:**
+
+Make editing components with multiple units and/or alternate graphical
+representations easier.
+
+**Task:**
+- Determine usability improvements in the library editor for components with
+ multiple units and/or alternate graphical representations.
+- Implement said useability improvements.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+## Component and Netlist Attributes ## {#netlist_attributes}
+**Goal:**
+Provide a method of passing information to other tools via the net list.
+
+**Task:**
+- Add virtual components and attributes to netlist to define properties that
+ can be used by other tools besides the board editor.
+
+**Dependencies:**
+- [S-expression schematic file format](#sch_sexpr).
+
+**Status:**
+- No progress.
+
+## Net Highlighting ## {#sch_net_highlight}
+**Goal:**
+Highlight wires, buses, and junctions when corresponding net in Pcbnew is selected.
+
+**Task:**
+- Add communications link to handle net selection from Pcbnew.
+- Implement highlight algorithm for net objects.
+- Highlight objects connected to net selected in Pcbnew.
+
+**Dependencies:**
+- [GAL port, maybe](#sch_gal).
+
+**Status:**
+- No progress.
+
+# CvPcb: Footprint Association Tool # {#cvpcb}
+This section covers the source code of the footprint assignment tool CvPcb.
+
+## Footprint Assignment Tool ##
+**Goal:**
+
+Merge the footprint assignment functionality of CvPcb into Eeschema so
+footprints can be assigned inside the schematic editor eliminating the need
+to launch an separate program.
+
+**Task:**
+- Merge footprint assignment capability into Pcbnew shared library.
+- Remove CvPcb as a stand alone tool.
+- Add functionality to both the schematic and board editors so users can assign
+ footprints as they prefer.
+
+**Dependencies:**
+- [Convert to a single process application](#kiway).
+
+**Status:**
+- Initial library conversion committed to product branch.
+
+
+# Pcbnew: Circuit Board Editor # {#pcbnew}
+This section covers the source code of the board editing application Pcbnew.
+
+## Tool Framework ## {#pcb_tool_framework}
+**Goal:**
+
+Unify all board editing tools under a single framework.
+
+**Task:**
+- Complete porting of all board editing tools to new tool framework so they
+ are available in the OpenGL and Cairo canvases.
+- Remove all duplicate legacy editing tools.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Initial porting work in progress.
+
+## Linked Objects ## {#pcb_linked_objects}
+**Goal:**
+
+Provide a way to allow external objects such as footprints to be externally
+linked in the board file so that changes in the footprint are automatically
+updated. This will all a one to many object relationship which can pave the
+way for real board modules.
+
+**Task:**
+- Add externally and internally linked objects to the file format to allow for
+ footprints and/or other board objects to be shared (one to many relationship)
+ instead of only supporting embedded objects (one to one relationship) that
+ can only be edited in place.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+## Modeling ## {#modeling}
+**Goal:**
+
+Provide improved solid modeling support for KiCad including the file formats
+available in OpenCascade.
+
+**Task:**
+- Design plugin architecture to handle loading and saving 3D models.
+- Back port existing 3D formats (IDF and S3D) to plugin
+- Add STEP 3D modeling capability.
+- Add IGES 3D modeling capability.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base).
+
+**Status:**
+- No progress.
+
+## Push and Shove Router Improvements ## {#ps_router_improvements}
+**Goal:**
+Add features such as matched length and microwave tools to the P&S router.
+
+**Task:**
+- Determine which features are feasible.
+- Look at the recently opened FreeRouter code at
+ http://www.freerouting.net/fen/download/file.php?id=146 for inspiration.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Match trace length work in progress.
+
+## Layer Improvements ## {#pcb_layers}
+**Goal:**
+
+Increase the number of usable technical and user defined layers in Pcbnew.
+
+**Task:**
+- Extend the number of copper and mechanical layers.
+- Develop a type safe flag set template or adapt something already available.
+- Refactor Pcbnew code to use new flag and remove the 32 layer limitation.
+- Extend the board file format to handle the additional layers.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Work complete on 32 copper and 32 technical layers is complete.
+
+## Pin and Part Swapping ## {#pcb_drc}
+**Goal:**
+
+Allow Pcbnew to perform pin and/or part swapping during layout so the user
+does not have to do it in Eeschema and re-import the net list.
+
+**Task:**
+- Provide forward and back annotation between the schematic and board editors.
+- Define netlist file format changes required to handle pin/part swapping.
+- Update netlist file formatter and parser to handle file format changes.
+- Develop a netlist comparison engine that will produce a netlist diff that
+ can be passed between the schematic and board editors.
+- Create pin/part swap dialog to manipulate swappable pins and parts.
+- Add support to handle net label back annotation changes.
+
+**Dependencies:**
+- [S-expression schematic file format](#sch_sexpr).
+- [Convert to a single process application](#kiway).
+
+**Status:**
+- No progress.
+
+## Intelligent Selection Tool ## {#pcb_selection_tool}
+**Goal:**
+
+Make the selection tool easier for the user to determine which object(s) are
+being selected.
+
+**Task:**
+- Determine and define the actual desired behavior.
+- Improve ambiguous selections when multiple items are under the cursor or in
+ the selection bounding box.
+
+**Dependencies:**
+- Tool framework.
+- Unified geometry library.
+
+**Status:**
+- Initial design committed to product branch.
+
+## Clipboard Support ## {#fp_edit_clipboard}
+**Goal:**
+
+Provide clipboard cut and paste for footprints..
+
+**Task:**
+- Clipboard cut and paste to and from clipboard of footprints in footprint
+ editor.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Design Rule Check (DRC) Improvements. ## {#drc_improvements}
+**Goal:**
+
+Create additional DRC tests for improved error checking.
+
+**Task:**
+- Replace geometry code with [unified geometry library](#geometry_lib).
+- Remove floating point code from clearance calculations to prevent rounding
+ errors.
+- Add checks for component, silk screen, and mask clearances.
+- Add checks for keep out zones.
+- Remove DRC related limitations such as no arc or text on copper layers.
+- Add option for saving and loading DRC options.
+
+**Dependencies:**
+- [Unified geometry library.](#geometry_lib)
+
+**Progress:**
+- Planning
+
+## Segment End Point Snapping. ## {#segment_snapping}
+**Goal:**
+
+It is not uncommon for board edge segment end points to inadvertently not
+be closed causing issues for the 3D viewer and exporting to different file
+formats due the board outline not being a fully enclosed polygon. This
+feature would add segment end snapping support to allow the board outline
+to be fully enclosed. This feature would only need to be supported by the
+GAL rendering.
+
+**Tasks**
+- Mark board edge segment ends with a drag indicator to make it visible to the
+ user that the segment end does not have an endpoint with any other board edge
+ segment.
+- Allow the user to smap the unconnected segment end to the nearest segment end
+ point.
+- Automatically connect unconnected segments with and additional segment when
+ opening the 3D viewer or exporting the board to another format. Warn the
+ user that an addition segment has be added and should be verified.
+
+**Dependencies:**
+- None
+
+**Progress:**
+- Initial discussion.
+
+## Keepout Zones. ## {#keepout_zones}
+**Goal:**
+
+Add support for keepout zones on boards and footprints.
+
+**Task:**
+- Add keepout support to zone classes.
+- Add keepout zone support to board editor.
+- Add keepout zone support to library editor.
+
+**Dependencies:**
+- [DRC Improvements.](#drc_improvements)
+
+**Progress:**
+- Planning
+
+
+## Gerber File Attributes ## {#gerber_attributes}
+**Goal:**
+
+Add file attributes to gerber files for defining layer stacks. See
+[this](http://www.ucamco.com/files/downloads/file/5/Extending_the_Gerber_Format_with_Attributes.pdf)
+document and [this](http://www.ucamco.com/files/downloads/file/22/Kick_Starting_a_Revolution_IPC-2581_Meets_Gerber.pdf)
+document for more information.
+
+**Task:**
+- Implement gerber file attributes as an optional setting when plotting gerber
+ files.
+
+**Dependencies:**
+- None
+
+**Progress:**
+- Done both in Pcbnew and Gerbview.
+
+## Net Highlighting ## {#pcb_net_highlight}
+**Goal:**
+Highlight rats nest links and/or traces when corresponding net in Eeschema is selected.
+
+**Task:**
+- Add communications link to handle net selection from Eeschema.
+- Implement highlight algorithm for objects connected to the selected net.
+- Highlight objects connected to net selected in Eeschema
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+
+# GerbView: Gerber File Viewer # {#gerbview}
+
+This section covers the source code for the GerbView gerber file viewer.
+
+## Graphics Abstraction Layer ## {#gerbview_gal}
+**Goal:**
+
+Graphics rendering unification.
+
+**Task:**
+- Port graphics rendering layer to GAL.
+
+**Dependencies:**
+- None.
+
+**Status**
+- No progress.
+
+# Documentation # {#documentation}
+This section defines the tasks for both the user and developer documentation.
+
+## Conversion to Markup/down Format ## {#doc_format}
+**Goal:**
+
+Make documentation more VCS friendly and separate document content and
+formatting for more uniform formatting across all user documentation.
+
+**Task:**
+- Convert the documentation to a mark up/down language to reduce the VCS
+ footprint, to be able to actually use the VCS to see what changed, and
+ improve the formatting consistency.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Started with this document.
+
+## Grammar Check ## {#doc_grammar}
+**Goal:**
+
+Improve user documentation readability and make life easier to for translators.
+
+**Task:**
+- Review and revise all of the English documentation so that it is update with
+ the current functionality of the code.
+- Translate the update documentation into other languages.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Maintenance ## {#doc_maintenance}
+**Task:**
+- Keep screen shots current with the source changes.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+## Convert Developer Documentation to Markup/down Format ## {#dev_doc_format}
+**Goal:**
+
+Improve developers documentation to make life easier for new developers to get
+involved with the project.
+
+**Task:**
+- Convert platform build instructions from plain text to new format to be
+ merged with the developer documentation.
+- Convert how to contribute to KiCad instructions from plain text to the new
+ format to merged with the developer documentation.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+
+# Unit Testing # {#unittest}
+**Goal:**
+
+Improve the quality of KiCad and ensure changes do no break existing
+capabilities.
+
+**Task:**
+- Explore the possibility of including a C++ unit test framework in addition
+ to the existing Python framework.
+- Create robust enough test coverage to determine if code changes break any
+ core functionality.
+
+**Dependencies:**
+- Completion of the initial release of this document.
+
+**Status:**
+- In progress.
+
+
+# Circuit Simulation # {#simulation}
+**Goal:**
+
+Provide quality circuit simulation capabilities similar to commercial products.
+
+**Task:**
+- Evaluate and select simulation library (spice, gnucap, qucs, etc).
+- Evaluate and select plotting library with wxWidgets support.
+- Confirm current spice netlist export is up to the task and add missing
+ support for simulations.
+- Use plotting library to handle simulator output in a consistent manor similar
+ to LTSpice.
+- Develop a tool that allows fine tuning of components on the fly.
+- Use plugin for the simulation code to allow support of different simulation
+ libraries.
+- Create a library of simulation components such as voltage source, current
+ source, current probe, etc.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base).
+
+**Status:**
+- No progress.
diff --git a/Documentation/development/stable-release-policy.md b/Documentation/development/stable-release-policy.md
new file mode 100644
index 0000000..556b20e
--- /dev/null
+++ b/Documentation/development/stable-release-policy.md
@@ -0,0 +1,80 @@
+# Stable Release Policy #
+
+This document defines the project requirements that must be satisfied in order to create a new
+stable release of the KiCad project. It is designed to be a reference for developers and user's
+so that both groups expectations are understood. This document is only to be modified by the
+project leader or at the request of the project leader. It should be noted that this policy is
+not cast in stone and at any time in the future, should the decision be made by the project at
+large that it can be revised to suit the ongoing needs of the project and it's users.
+
+The current release policy is to support the concept of a lightweight stable release. The goal
+is to provide regular stable releases of KiCad without the burden of trying to provide long term
+support of a full stable release branch. Therefore, once a new release is created, the only
+patches that will be made to the stable release branch will be for bugs that cause KiCad to crash
+or possible corruption and/or loss of data. No other changes from the current development branch
+will be backported to the last stable release by the project.
+
+[TOC]
+
+# Stable Release Interval # {#stable_release_interval}
+
+The criteria required for new stable releases is based on the developers decision that enough
+new features and/or improvements have been made to the current development branch to justify a
+new stable release. This decision is completely discretionary and can be proposed at any time
+by any developer on the KiCad developers mailing list. Once a request for a new stable release
+is made, a consensus must be reached by the primary developers to proceed with the release with
+the final decision and announcement being made by the project leader.
+
+
+# Feature Freeze # {#feature_freeze}
+
+Once the announcement has been made that a new stable release is in effect, the current
+development branch is frozen. No new features or potentially disruptive core code changes can
+be committed with out approval of the primary developers and/or the project leader.
+
+# Bug Fixing # {#bug_fixing}
+
+After the development branch has been frozen, work will continue to fix bugs reported against
+the development branch. Bugs will be prioritized based on their severity. All bugs that cause
+KiCad to crash or cause loss and/or corruption of data must be fixed. All other bugs must be
+evaluated to see if they fit into the scope of the stable release. All bugs that fit into the
+scope of the stable release will be tagged and must be fixed. All other bugs will be tagged for
+the next stable release and fixed when it is convenient. Once the stable release is officially
+announced, the bugs tagged as "Fix Committed" that are relevant to the stable release will be
+changed to "Fix Released".
+
+# User Documentation # {#user_docs}
+
+The user documentation will be updated to reflect the current changes in the code. This includes
+all new features, any behavioral changes to existing features, and all screen shots as required.
+Completion of the English version of the user documentation is minimum that is required for
+release. Foreign language translations can be released at any time as the become available.
+
+# Stable Release Series Branch # {#stable_branch}
+
+Once the primary developers decide that the stable release criteria has been met, a new series
+branch will be created from the current product branch on Launchpad. At this time the freeze
+will be removed from the product branch and normal development can resume. The stable release
+version will be incremented from the previous stable release and tagged in the stable release
+branch build configuration.
+
+# System Installers # {#system_installers}
+
+To proved the best user experience for platforms that do not have package managers, full system
+installers will be provided. Currently this only pertains to Windows and OSX. The full system
+installers will include all KiCad binary files, all binary library dependencies, user
+documentation, component libraries, 3D model libraries, demo project files, and project template
+files. Optionally, the footprint libraries can be included for users who prefer not us use the
+GitHub plugin.
+
+# Source Archives # {#source_archives}
+
+To provide a convenient method for system packagers to build KiCad from known stable sources,
+source archives in the most common formats along with the resulting md5sum checksum will be
+added to either the KiCad developer's site on Launchpad or the main website at www.kicad-pcb.org.
+
+# Stable Release Announcement # {#announcement}
+
+Once all of the above tasks have been completed, the project leader will post an announcement on
+the developers mailing list and the Launchpad site. This announcement should include a list of
+new features and improvements made since the previous stable release.
diff --git a/Documentation/guidelines/UIpolicies.txt b/Documentation/guidelines/UIpolicies.txt
new file mode 100644
index 0000000..98a2c18
--- /dev/null
+++ b/Documentation/guidelines/UIpolicies.txt
@@ -0,0 +1,85 @@
+
+** General UI Guidelines for KiCad Development
+
+
+Capitalization:
+
+ For any visible text used within KiCad, follow recommendations here:
+ http://developer.gnome.org/hig-book/stable/design-text-labels.html.en
+ in the "Capitalization" section. This applies to all Menus, Titles,
+ Labels, Tooltips, Buttons, etc.
+
+ The capitalization for the application names is KiCad, Eeschema, CvPcb,
+ GerbView, and Pcbnew. All strings that have application names that are
+ visible to the user should be capitalized this way. It's also a good
+ idea use this capitalization in source code comments as well to prevent
+ confusion of new contributors.
+
+
+Dialogs:
+
+ Follow the recommendations here:
+
+ http://developer.gnome.org/hig-book/stable/design-window.html.en
+ paying particular attention to "initial focus", "sensible default values",
+ "default buttons", ESC key termination. Please note that the escape key
+ termination only works properly if there is a dialog button defined with
+ an ID of wxID_CANCEL or SetEscapeID( MY_ESCAPE_BUTTON_ID ) is called during
+ dialog initialization. The former is the preferred method for handling
+ escape key dialog termination. There is a checkbox in wxformbuilder for
+ the "default" control, and this is the one fired when the "enter" key
+ is pressed.
+
+ Use wxWidgets "sizers" in all dialogs, no matter how simple they are:
+ http://zetcode.com/tutorials/wxwidgetstutorial/layoutmanagement
+ and keep dialogs resizeable.
+
+ Configure the sizers so that as the dialog window is expanded, the most
+ sensible use of the increased dialog window occurs automatically by the
+ sizers. For example, in the DRC dialog of Pcbnew, sizers should be used to
+ expand the text control to use the full available free window area, so that
+ the user's view of the items in the text control is maximized as he/she
+ expands the dialog window, making it easier to read more DRC error messages.
+ In other dialogs without one component more important than the others, the
+ sizers might be configured to position the controls to sensible positions
+ near the perimeter of the increasingly larger dialog box, not necessarily
+ leaving them all bundled tightly together. The dialog box should look
+ nice at any size large enough to show all the components.
+
+ When using wxFormBuilder, please add the following settings to the
+ "Dialog" node:
+ subclass.name <- DIALOG_SHIM
+ subclass.header <- dialog_shim.h
+
+ This will provide for an override of the Show( bool ) wxWindow() function
+ and provide retentitive size and position for the session.
+
+ Use tooltips to explain the functionality of each non-obvious control.
+ This is important because the help files and the wiki often lag behind
+ the source code.
+
+ Avoid defining initial dialog sizes if possible. Let the sizers do their
+ job. After the dialog is fit to the sizers, set the minimum size to the
+ current size to prevent the dialog controls from being obscured when
+ resizing the dialog. If the labels or text of the dialog controls are,
+ set or changed at run time. Rerun wxWindow::Fit() to allow the dialog to
+ re-size and adjust for the new control widths. This can all be done after
+ the dialog is created but before it is shown or use class methods to
+ re-size the dialog as required. Reset the minimum size to the updated
+ dialog size.
+
+ Dialog windows shall not exceed 1024 x 768 when displayed in a 13 point font.
+ Note that the font used by end users is not something that you control from
+ within the dialog, but for testing purposes please do not exceed this dialog
+ size should the user have selected a font size of 13 points.
+
+Quoting:
+ Filenames, paths or other text should be with single quotes ''. e.g.:
+ 'filename.kicad_pcb'
+ 'longpath/subdir'
+ 'FOOTPRINTNAME'
+ 'anything else'
+
+ Often text strings like this end up in panels which use HTML rendering, and this
+ can happen in the future. Previously used angle brackets only cause grief there.
+
diff --git a/Documentation/interactive_router/build.sh b/Documentation/interactive_router/build.sh
new file mode 100644
index 0000000..4d44c89
--- /dev/null
+++ b/Documentation/interactive_router/build.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+pandoc -f markdown_mmd -t html interactive_router.mmd > interactive_router.html
+pandoc -f markdown_mmd -t latex interactive_router.mmd > tmp.tex
+pdflatex interactive_router.tex \ No newline at end of file
diff --git a/Documentation/interactive_router/interactive_router.mmd b/Documentation/interactive_router/interactive_router.mmd
new file mode 100644
index 0000000..573a481
--- /dev/null
+++ b/Documentation/interactive_router/interactive_router.mmd
@@ -0,0 +1,73 @@
+# Interactive Router #
+
+The Interactive Router lets you quickly and efficient route your PCBs by shoving off or walking around items on the PCB that collide with the trace you are currently drawing.
+
+Following modes are supported:
+
+- **Shove**, attempting to push and shove all items colliding with the currently routed track.
+- **Walk around**, trying to avoid obstacles by hugging/walking around them.
+- **Highlight collisions** which highlights all violating objects with a nice, shiny green color and shows violating clearance regions.
+
+
+## Setting up ##
+
+Before using the Interactive Router, please set up these two things:
+- Clearance settings. To set the clearances, open the *Design Rules* dialog and make sure at least the default clearance
+value looks sensible.
+
+- Enable OpenGL mode by selecting *View->Switch canvas to OpenGL* menu option or pressing **F11**.
+
+![Screenshot](pictures/opengl_menu.png)
+
+## Laying out tracks ##
+
+To activate the router tool press the *Interactive Router* button ![Interactive Router Button](pictures/route_icon.png) or the **X** key.
+The cursor will turn into a cross and the tool name, will appear in the status bar.
+
+To start a track, click on any item (a pad, track or a via) or press the **X** key again hovering the mouse over that item.
+The new track will use the net of the starting item. Clicking or pressing **X** on empty PCB space starts a track with no net assigned.
+
+Move the mouse to define shape of the track. The router will try to follow mouse trail, hugging unmovable obstacles
+(such as pads) and shoving colliding traces/vias, depending on the mode. Retreating mouse cursor will cause the shoved items to spring back
+to their former locations.
+
+Clicking on a pad/track/via in the same net finishes routing. Clicking in empty space fixes the segments routed so far and continues routing the trace.
+
+In order to stop routing and undo all changes (shoved items, etc.), simply press **Esc**.
+
+Pressing **V** or selecting *Place Through Via* from the context menu while routing a track attaches a via at the end of the trace being routed.
+Pressing **V** again disables via placement. Clicking in any spot establishes the via and continues routing.
+
+Pressing **/** or selecting *Switch Track Posture* from the context menu toggles the direction of the initial track segment between straight or diagonal.
+
+**Note**: By default, the router snaps to centers/axes of the items. Snapping can be disabled by holding **Shift** while routing or selecting items.
+
+## Setting track widths and via sizes ##
+
+There are several ways to pre-select a track width/via size or to change it during routing:
+- Use standard Kicad shortcuts.
+- Press **W** or select *Custom Track Width* from the context menu to type in a custom width/via size.
+- Pick a predefined width from the *Select Track Width* sub-menu of the context menu.
+- Select *Use the starting track width* in the *Select Track Width* menu to pick the width from the start item (or the traces already connected to it).
+
+## Dragging ##
+
+The router can drag track segments, corners and vias. To drag an item, click on it with **Ctrl** key pressed, hover the mouse and press **G** or select *Drag Track/Via* from the context menu.
+Finish dragging by clicking again or abort by pressing *Esc*.
+
+## Options ##
+
+The router behavior be configured by pressing *E* or selecting *Routing Options* from the context menu. It opens a window like the one below:
+
+![Screenshot](pictures/router_options.png)
+
+The options are:
+
+- **Mode** - select how the router handles DRC violation (shoving, walking around, etc.)
+- **Shove vias** - when disabled, vias are treated as un-movable objects and hugged instead of shoved.
+- **Jump over obstacles** - when enabled, the router tries to move colliding traces behind solid obstacles (e.g. pads) instead of "reflecting" back the collision
+- **Remove redundant tracks** - removes loops while routing (e.g. if the new track ensures same connectivity as an already existing one, the old track is removed). Loop removal works locally (only between the start and end of the currently routed trace).
+- **Automatic neckdown** - when enabled, the router tries to break out pads/vias in a clean way, avoiding acute angles and jagged breakout traces.
+- **Smooth dragged segments** - when enabled, the router attempts to merge several jagged segments into a single straight one (dragging mode).
+- **Allow DRC violations** (*Highlight collisions* mode only) - allows to establish a track even if is violating the DRC rules.
+- **Optimizer effort** - defines how much time the router shall spend optimizing the routed/shoved traces. More effort means cleaner routing (but slower), less effort means faster routing but somewhat jagged traces.
diff --git a/Documentation/interactive_router/pictures/opengl_menu.png b/Documentation/interactive_router/pictures/opengl_menu.png
new file mode 100644
index 0000000..cd6decb
--- /dev/null
+++ b/Documentation/interactive_router/pictures/opengl_menu.png
Binary files differ
diff --git a/Documentation/interactive_router/pictures/route_icon.png b/Documentation/interactive_router/pictures/route_icon.png
new file mode 100644
index 0000000..c87ac05
--- /dev/null
+++ b/Documentation/interactive_router/pictures/route_icon.png
Binary files differ
diff --git a/Documentation/interactive_router/pictures/router_options.png b/Documentation/interactive_router/pictures/router_options.png
new file mode 100644
index 0000000..9eaecf4
--- /dev/null
+++ b/Documentation/interactive_router/pictures/router_options.png
Binary files differ
diff --git a/Documentation/interactive_router/pictures/rules_editor.png b/Documentation/interactive_router/pictures/rules_editor.png
new file mode 100644
index 0000000..277e7a2
--- /dev/null
+++ b/Documentation/interactive_router/pictures/rules_editor.png
Binary files differ
diff --git a/Documentation/notes_about_pcbnew_new_file_format.odt b/Documentation/notes_about_pcbnew_new_file_format.odt
new file mode 100644
index 0000000..9616f2b
--- /dev/null
+++ b/Documentation/notes_about_pcbnew_new_file_format.odt
Binary files differ
diff --git a/Documentation/rules_for_capitalization_in_Kicad_UI.txt b/Documentation/rules_for_capitalization_in_Kicad_UI.txt
new file mode 100644
index 0000000..f3f1458
--- /dev/null
+++ b/Documentation/rules_for_capitalization_in_Kicad_UI.txt
@@ -0,0 +1,48 @@
+Gnome rules, used in Kicad:
+
+8.3.2. Capitalization
+
+Two styles of capitalization are used in GNOME user interface elements:
+
+Header capitalization
+ Capitalize all words in the element, with the following exceptions:
+ Articles: a, an, the.
+ Conjunctions: and, but, for, not, so, yet ...
+ Prepositions of three or fewer letters: at, for, by, in, to ...
+
+Sentence capitalization
+ Capitalize the first letter of the first word, and any other words normally capitalized in sentences,
+ such as application names.
+
+The following table indicates the capitalization style to use for each type of user interface element.
+Table 8-3 Capitalization Style Guidelines for User Interface Elements
+
+Element Style
+
+Check box labels Sentence
+Command button labels Header
+Column heading labels Header
+Desktop background object labels Header
+Dialog messages Sentence
+Drop-down combination box labels Sentence
+Drop-down list box labels Sentence
+Field labels Sentence
+Filenames Sentence
+Graphic equivalent text:
+for example, Alt text on web pages Sentence
+Group box or frame labels Header
+Items in drop-down combination boxes,
+drop-down list boxes, and list boxes Sentence
+List box labels Sentence
+Menu items Header
+Menu items in applications Header
+Menu titles in applications Header
+Radio button labels Sentence
+Slider labels Sentence
+Spin box labels Sentence
+Tabbed section titles Header
+Text box labels Sentence
+Titlebar labels Header
+Toolbar button labels Header
+Tooltips Sentence
+Webpage titles and navigational elements Header
diff --git a/Documentation/s-expressions.txt b/Documentation/s-expressions.txt
new file mode 100644
index 0000000..35bf29a
--- /dev/null
+++ b/Documentation/s-expressions.txt
@@ -0,0 +1,89 @@
+
+S-Expression Support in Kicad
+============================================================================
+Author: Dick Hollenbeck
+Date: Jan 2011
+
+
+An s-expression is a text stream or string, in the same vain as XML, consisting
+of a sequence of elements. Each element is either an atom or list. An atom
+corresponds to a string, while a list corresponds to an s-expression. The
+following grammar represents our definition of an s-expression:
+
+sexpr ::= ( sx )
+sx ::= atom sxtail | sexpr sxtail | NULL
+sxtail ::= sx | NULL
+atom :: quoted | value
+quoted :: "ws_string"
+value :: nws_string
+
+An atom can either be a quoted string, which is a string containing whitespace
+surrounded by double quotes, or a non-whitespace string that does not require
+surrounding quotes.
+
+The s-expression syntax used in Kicad uses two quoting/syntax strategies, given
+by the needs of the Specctra DSN specification and of our own non-specctra
+needs. The Specctra DSN specification is not very clear with regard to quoting
+and on top of that there is Freerouter's interpretation, which would actually
+supercede anything in the Specctra DSN spec anyway, due to a desire to be
+compatible with Freerouter.
+
+We have our own needs, which go beyond those of the Specctra DSN spec, so we
+support the two syntaxes or quoting protocols for quoted atoms:
+
+1) Specctra quoting protocol (specctraMode)
+2) Kicad quoting protocol (non-specctraMode)
+
+We can control our own destiny better by having a separately defined mode for
+non Specctra DSN files.
+
+To summarize, in specctraMode Freerouter dictates to us what we need to do. In
+non-specctraMode, which can be thought of as Kicad mode, we have our own quoting
+protocol and can make changes without breaking the specctraMode.
+
+There needs to be agreement between how a file is saved, and how a file is read
+back in, in either mode, to fulfill the round-tripping requirements. A file
+written using one mode may not necessarily be readable using the other mode,
+although it might be. Just don't count on it.
+
+
+In Kicad mode:
+
+OUTPUTFORMATTER::Quoted() is the tool to wrap s-expression atoms.
+DSNLEXER::NexTok() is basically the inverse function, and reads tokens back in.
+These two must agree, so that what is written out comes back in un-altered.
+
+The decision to wrap the string or not is left to the Quoted() function. If the
+string is wrapped, it will also escape internal double quotes, \n's and \r's.
+Any null string is wrapped in quotes, and so is any string which starts with
+'#', so that it is not confused with an s-expression comment.
+
+
+Kicad S-expression Syntax and Quoting Protocol (non-specctraMode):
+==================================================================
+
+*) Some atoms are considered keywords, and constitute a grammar superimposed on
+the s-expressions. All keywords are ASCII and lowercase. International characters
+are not to be used here.
+
+*) All Kicad s-expression files are saved using a UTF8 encoding and should
+support any international characters in the atoms which are not keywords.
+
+*) DSNLEXER::NextTok() requires that any token be on a single line of input. If
+you want to save a multi-line string, Quoted() will automatically escape the \n
+or \r for you and put the output on a single line. It should round-trip fine.
+
+*) There can be escape sequences in a quoted string only. Escape sequences allow
+foreign tools to generate byte patterns in the input stream. C style 2 byte hex
+codes are supported, and so are 3 byte octal escape sequences. See
+DSNLEXER::NextTok() for the full list of escape sequences, by searching file
+dsnlexer.cpp for the string "ESCAPE SEQUENCES". Any use of the escape mechanism
+must still produce UTF-8 encoded text after the escape handling is applied.
+
+*) Just because an escape sequence is supported on input, does not mean that
+OUTPUTFORMATTER::Quoted() must generate such an escape sequence for output. For
+example, having true tabs in the s-expression file is OK. So that will not be
+escaped on output. Other similar cases exist.
+
+*) Backslash is the escape byte.
+
diff --git a/Documentation/wxWidgets_patch_notes.txt b/Documentation/wxWidgets_patch_notes.txt
new file mode 100644
index 0000000..9b825de
--- /dev/null
+++ b/Documentation/wxWidgets_patch_notes.txt
@@ -0,0 +1,20 @@
+--== notes about wxWidgets problems ==--
+Last Revised: 02-jul-2015
+
+Kicad needs wxWidgets, the multi platform G.U.I toolkit.
+
+use *only* wxWidgets
+>= 3.0.1 On Windows
+>= 3.0.2 on Linux (prevision versions have bugs which crash Kicad)
+>= 3.0.2 on OSX (which need patches: see patches/wxwidgets-3.0.0_macosx_xxx)
+
+Known bug on Windows:
+Postscript printers print tracks like thin line.
+It happens only for PS drivers, and PDF printer.
+Other drivers (PCL for instance) work fine,
+so it is unlikely a bug inside Kicad/wxWidgets
+
+On 3.0.2 Window version 64 bits:
+The mirror mode gives a blank sheet.
+This is a bug in wxWidgets 3.0.2
+wxWidgets 3.0.2 must be patched (see patches/wxWidgets-3.0.2-msw-dc-orientation-fix.patch) and rebuilt.
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
new file mode 100644
index 0000000..549a2c8
--- /dev/null
+++ b/common/CMakeLists.txt
@@ -0,0 +1,493 @@
+include_directories( BEFORE ${INC_BEFORE} )
+include_directories(
+ ./dialogs
+ ./dialog_about
+ ${CAIRO_INCLUDE_DIR}
+ ${GLEW_INCLUDE_DIR}
+ ${CURL_INCLUDE_DIRS}
+ ../3d-viewer
+ ../pcbnew
+ ../polygon
+ ${INC_AFTER}
+ )
+
+
+if( NOT APPLE ) # windows and linux use openssl under curl
+ find_package( OpenSSL REQUIRED )
+endif()
+
+
+# Generate header files containing shader programs
+# Order of input files is significant
+add_custom_command(
+ OUTPUT gal/opengl/shader_src.h
+ COMMAND ${CMAKE_COMMAND}
+ -DinputFiles="${PROJECT_SOURCE_DIR}/common/gal/opengl/shader.vert\\;${PROJECT_SOURCE_DIR}/common/gal/opengl/shader.frag"
+ -DoutputFile="shader_src.h"
+ -P ${CMAKE_MODULE_PATH}/Shaders.cmake
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/common/gal/opengl
+ COMMENT "Generating headers containing GLSL source code"
+ )
+
+add_custom_target(
+ shader_headers ALL
+ DEPENDS gal/opengl/shader_src.h
+ )
+
+set( GAL_SRCS
+ # Common part
+ draw_panel_gal.cpp
+ painter.cpp
+ worksheet_viewitem.cpp
+ origin_viewitem.cpp
+ gal/graphics_abstraction_layer.cpp
+ gal/stroke_font.cpp
+ gal/color4d.cpp
+ view/view_controls.cpp
+ view/wx_view_controls.cpp
+ geometry/hetriang.cpp
+
+ # OpenGL GAL
+ gal/opengl/opengl_gal.cpp
+ gal/opengl/shader.cpp
+ gal/opengl/vertex_item.cpp
+ gal/opengl/vertex_container.cpp
+ gal/opengl/cached_container.cpp
+ gal/opengl/noncached_container.cpp
+ gal/opengl/vertex_manager.cpp
+ gal/opengl/gpu_manager.cpp
+ gal/opengl/opengl_compositor.cpp
+
+ # Cairo GAL
+ gal/cairo/cairo_gal.cpp
+ gal/cairo/cairo_compositor.cpp
+ )
+
+add_library( gal STATIC ${GAL_SRCS} )
+add_dependencies( gal shader_headers )
+add_dependencies( gal lib-dependencies )
+
+target_link_libraries( gal
+ ${GLEW_LIBRARIES}
+ ${CAIRO_LIBRARIES}
+ ${PIXMAN_LIBRARY}
+ ${OPENGL_LIBRARIES}
+)
+
+
+# Only for win32 cross compilation using MXE
+if( WIN32 AND MSYS )
+ add_definitions( -DGLEW_STATIC )
+endif()
+
+
+# A shared library subsetted from common which restricts what can go into
+# a single_top link image. By not linking to common, we control what does
+# statically go into single_top link images. My current thinking is that only
+# wxWidgets should be a shared link from single top, everything else should be
+# statically bound into it. Otherwise you will have DSO loading problems. After it
+# sets the LIB PATHS however, we want the *.kiface modules to use shared linking.
+add_library( singletop STATIC EXCLUDE_FROM_ALL
+ confirm.cpp
+ eda_doc.cpp
+ kiway.cpp
+ kiway_holder.cpp
+ )
+
+
+# A shared library used by multiple *.kiface files and one or two program
+# launchers. Object files can migrate into here over time, but only if they are
+# surely needed and certainly used from more than one place without recompilation.
+# Functions and data all need to use the #include <import_export.h> and be declared
+# as APIEXPORT
+set( LIB_KICAD_SRCS
+ colors.cpp
+ dlist.cpp
+ string.cpp
+ )
+
+if( future )
+add_library( lib_kicad SHARED
+ )
+target_link_libraries( lib_kicad
+ ${wxWidgets_LIBRARIES}
+ )
+set_target_properties( lib_kicad PROPERTIES
+ OUTPUT_NAME ki
+ )
+install( TARGETS lib_kicad
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+endif()
+
+
+# KiCad build version string defaults to "no-vcs-found" which forces the build version header
+# command to look for git to create the version string header when the .git path is found in
+# the source path.
+set( KICAD_BRANCH_NAME "" CACHE STRING "KiCad repository name." )
+set( KICAD_VERSION_EXTRA "" CACHE STRING
+ "User defined configuration string to append to KiCad version." )
+
+# Generate version header file.
+add_custom_target(
+ version_header ALL
+ COMMAND ${CMAKE_COMMAND}
+ -DKICAD_VERSION=${KICAD_VERSION}
+ -DKICAD_BRANCH_NAME=${KICAD_BRANCH_NAME}
+ -DKICAD_VERSION_EXTRA=${KICAD_VERSION_EXTRA}
+ -DOUTPUT_FILE=${CMAKE_BINARY_DIR}/kicad_build_version.h
+ -DSRC_PATH=${PROJECT_SOURCE_DIR}
+ -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}
+ -P ${CMAKE_MODULE_PATH}/WriteVersionHeader.cmake
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Generating version string header"
+ )
+
+set( COMMON_ABOUT_DLG_SRCS
+ dialog_about/AboutDialog_main.cpp
+ dialog_about/dialog_about.cpp
+ dialog_about/dialog_about_base.cpp
+ dialogs/dialog_display_info_HTML_base.cpp
+ dialogs/dialog_exit_base.cpp
+ dialogs/dialog_image_editor.cpp
+ dialogs/dialog_image_editor_base.cpp
+ dialogs/dialog_get_component.cpp
+ dialogs/dialog_get_component_base.cpp
+ dialogs/dialog_hotkeys_editor.cpp
+ dialogs/dialog_hotkeys_editor_base.cpp
+ dialogs/dialog_list_selector_base.cpp
+ dialogs/dialog_page_settings_base.cpp
+ dialogs/dialog_env_var_config_base.cpp
+ dialogs/dialog_env_var_config.cpp
+ dialogs/wx_html_report_panel_base.cpp
+ dialogs/wx_html_report_panel.cpp
+ )
+
+set( COMMON_PAGE_LAYOUT_SRCS
+ page_layout/title_block_shapes.cpp
+ page_layout/class_worksheet_dataitem.cpp
+ page_layout/class_worksheet_layout.cpp
+ page_layout/page_layout_default_description.cpp
+ page_layout/page_layout_graphic_items.cpp
+ page_layout/page_layout_reader_keywords.cpp
+ page_layout/page_layout_reader.cpp
+ )
+
+set( COMMON_SRCS
+ ${LIB_KICAD_SRCS}
+ ${COMMON_ABOUT_DLG_SRCS}
+ ${COMMON_PAGE_LAYOUT_SRCS}
+ base_struct.cpp
+ basicframe.cpp
+ bezier_curves.cpp
+ bin_mod.cpp
+ bitmap.cpp
+ block_commande.cpp
+ build_version.cpp
+ class_bitmap_base.cpp
+ class_colors_design_settings.cpp
+ class_layer_box_selector.cpp
+ class_marker_base.cpp
+ class_plotter.cpp
+ class_undoredo_container.cpp
+ colors.cpp
+ common.cpp
+ common_plot_functions.cpp
+ common_plotHPGL_functions.cpp
+ common_plotPS_functions.cpp
+ common_plotPDF_functions.cpp
+ common_plotGERBER_functions.cpp
+ common_plotDXF_functions.cpp
+ common_plotSVG_functions.cpp
+ config_params.cpp
+ confirm.cpp
+ copy_to_clipboard.cpp
+ convert_basic_shapes_to_polygon.cpp
+ dialog_shim.cpp
+ displlst.cpp
+ draw_frame.cpp
+ draw_panel.cpp
+ drawtxt.cpp
+ dsnlexer.cpp
+ eda_dde.cpp
+ eda_doc.cpp
+ filter_reader.cpp
+# findkicadhelppath.cpp.notused deprecated, use searchhelpfilefullpath.cpp
+ gestfich.cpp
+ getrunningmicrosecs.cpp
+ grid_tricks.cpp
+ gr_basic.cpp
+ hotkeys_basic.cpp
+ html_messagebox.cpp
+ kiface_i.cpp
+ kiway.cpp
+ kiway_express.cpp
+ kiway_holder.cpp
+ kiway_player.cpp
+ lockfile.cpp
+ msgpanel.cpp
+ netlist_keywords.cpp
+ newstroke_font.cpp
+ prependpath.cpp
+ project.cpp
+ ptree.cpp
+ reporter.cpp
+ richio.cpp
+ searchhelpfilefullpath.cpp
+ search_stack.cpp
+ selcolor.cpp
+ systemdirsappend.cpp
+ trigo.cpp
+ utf8.cpp
+ validators.cpp
+ wildcards_and_files_ext.cpp
+ worksheet.cpp
+ wxwineda.cpp
+ wx_unit_binder.cpp
+ wx_status_popup.cpp
+ xnode.cpp
+ zoom.cpp
+ )
+
+if( TRUE OR NOT USE_KIWAY_DLLS )
+#if( NOT USE_KIWAY_DLLS )
+ # We DO NOT want pgm_base.cpp linked into the KIFACE, only into the KIWAY.
+ # Check the map files to verify eda_pgm.o not being linked in.
+ list( APPEND COMMON_SRCS pgm_base.cpp )
+endif()
+
+if( NOT HAVE_STRTOKR )
+ list( APPEND COMMON_SRCS strtok_r.c )
+endif()
+
+
+set( COMMON_SRCS
+ ${COMMON_SRCS}
+ kicad_curl/kicad_curl.cpp
+ kicad_curl/kicad_curl_easy.cpp
+
+ view/view.cpp
+ view/view_item.cpp
+ view/view_group.cpp
+
+ math/math_util.cpp
+
+ tool/tool_action.cpp
+ tool/tool_base.cpp
+ tool/tool_manager.cpp
+ tool/tool_dispatcher.cpp
+ tool/tool_event.cpp
+ tool/tool_interactive.cpp
+ tool/action_manager.cpp
+ tool/context_menu.cpp
+
+ geometry/seg.cpp
+ geometry/shape.cpp
+ geometry/shape_line_chain.cpp
+ geometry/shape_poly_set.cpp
+ geometry/shape_collisions.cpp
+ geometry/shape_file_io.cpp
+ )
+add_library( common STATIC ${COMMON_SRCS} )
+add_dependencies( common lib-dependencies )
+add_dependencies( common version_header )
+target_link_libraries( common
+ ${Boost_LIBRARIES}
+ ${CURL_LIBRARIES}
+ ${OPENSSL_LIBRARIES} # empty on Apple
+ )
+
+
+set( PCB_COMMON_SRCS
+ base_screen.cpp
+ eda_text.cpp
+ class_page_info.cpp
+ pcbcommon.cpp
+ lset.cpp
+ footprint_info.cpp
+ ../pcbnew/basepcbframe.cpp
+ ../pcbnew/class_board.cpp
+ ../pcbnew/class_board_connected_item.cpp
+ ../pcbnew/class_board_design_settings.cpp
+ ../pcbnew/class_board_item.cpp
+ ../pcbnew/class_dimension.cpp
+ ../pcbnew/class_drawsegment.cpp
+ ../pcbnew/class_drc_item.cpp
+ ../pcbnew/class_edge_mod.cpp
+ ../pcbnew/class_netclass.cpp
+ ../pcbnew/class_netinfo_item.cpp
+ ../pcbnew/class_netinfolist.cpp
+ ../pcbnew/class_marker_pcb.cpp
+ ../pcbnew/class_mire.cpp
+ ../pcbnew/class_module.cpp
+ ../pcbnew/class_pad.cpp
+ ../pcbnew/class_pad_draw_functions.cpp
+ ../pcbnew/class_pcb_text.cpp
+ ../pcbnew/class_text_mod.cpp
+ ../pcbnew/class_track.cpp
+ ../pcbnew/class_zone.cpp
+ ../pcbnew/class_zone_settings.cpp
+ ../pcbnew/classpcb.cpp
+ ../pcbnew/ratsnest_data.cpp
+ ../pcbnew/ratsnest_viewitem.cpp
+ ../pcbnew/collectors.cpp
+ ../pcbnew/netlist_reader.cpp
+ ../pcbnew/legacy_netlist_reader.cpp
+ ../pcbnew/kicad_netlist_reader.cpp
+ ../pcbnew/sel_layer.cpp
+ ../pcbnew/pcb_plot_params.cpp
+ ../pcbnew/io_mgr.cpp
+ ../pcbnew/plugin.cpp
+ ../pcbnew/eagle_plugin.cpp
+ ../pcbnew/legacy_plugin.cpp
+ ../pcbnew/kicad_plugin.cpp
+ ../pcbnew/gpcb_plugin.cpp
+ ../pcbnew/pcb_netlist.cpp
+ ../pcbnew/specctra.cpp
+ ../pcbnew/specctra_export.cpp
+ ../pcbnew/specctra_keywords.cpp
+ pcb_plot_params_keywords.cpp
+ pcb_keywords.cpp
+ ../pcbnew/pcb_parser.cpp
+ fp_lib_table_keywords.cpp
+ fpid.cpp
+ fp_lib_table.cpp
+)
+
+set( PCB_COMMON_SRCS
+ ${PCB_COMMON_SRCS}
+ ../pcbnew/pcb_painter.cpp
+ )
+
+# add -DPCBNEW to compilation of these PCBNEW sources
+set_source_files_properties( ${PCB_COMMON_SRCS} PROPERTIES
+ COMPILE_DEFINITIONS "PCBNEW"
+ )
+
+add_library( pcbcommon STATIC ${PCB_COMMON_SRCS} )
+add_dependencies( pcbcommon lib-dependencies )
+
+# auto-generate specctra_lexer.h and specctra_keywords.cpp
+make_lexer(
+ ${PROJECT_SOURCE_DIR}/pcbnew/specctra.keywords
+ ${PROJECT_SOURCE_DIR}/pcbnew/specctra_lexer.h
+ ${PROJECT_SOURCE_DIR}/pcbnew/specctra_keywords.cpp
+ DSN
+
+ # Pass header file with dependency on *_lexer.h as extra_arg
+ specctra.h
+ )
+
+add_custom_target(
+ specctra_lexer_source_files ALL
+ DEPENDS
+ ${PROJECT_SOURCE_DIR}/pcbnew/specctra_lexer.h
+ ${PROJECT_SOURCE_DIR}/pcbnew/specctra_keywords.cpp
+ )
+
+add_dependencies( pcbcommon specctra_lexer_source_files )
+
+# auto-generate netlist_lexer.h and netlist_keywords.cpp
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords
+ ${PROJECT_SOURCE_DIR}/include/netlist_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/netlist_keywords.cpp
+ NL_T
+
+ # Pass header file with dependency on *_lexer.h as extra_arg
+ ${CMAKE_PROJECT_SOURCE_DIR}/pcbnew/netlist_reader.h
+ )
+
+add_custom_target(
+ netlist_lexer_source_files ALL
+ DEPENDS
+ ${PROJECT_SOURCE_DIR}/include/netlist_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/netlist_keywords.cpp
+ )
+
+add_dependencies( common netlist_lexer_source_files )
+add_dependencies( pcbcommon netlist_lexer_source_files )
+
+# auto-generate pcb_plot_params_lexer.h and pcb_plot_params_keywords.cpp
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_plot_params.keywords
+ ${PROJECT_SOURCE_DIR}/include/pcb_plot_params_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_plot_params_keywords.cpp
+ PCBPLOTPARAMS_T
+
+ # Pass header file with dependencies on *_lexer.h as extra_arg
+ ${PROJECT_SOURCE_DIR}/pcbnew/pcb_plot_params.h
+ )
+
+add_custom_target(
+ pcb_plot_lexer_source_files ALL
+ DEPENDS
+ ${PROJECT_SOURCE_DIR}/include/pcb_plot_params_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_plot_params_keywords.cpp
+ )
+
+add_dependencies( pcbcommon pcb_plot_lexer_source_files )
+
+# auto-generate pcbnew_sexpr.h and pcbnew_sexpr.cpp
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb.keywords
+ ${PROJECT_SOURCE_DIR}/include/pcb_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_keywords.cpp
+ PCB_KEYS_T
+
+ # Pass header file with dependency on *_lexer.h as extra_arg
+ ${PROJECT_SOURCE_DIR}/pcbnew/pcb_parser.h
+ )
+
+add_custom_target(
+ pcb_lexer_source_files ALL
+ DEPENDS
+ ${PROJECT_SOURCE_DIR}/include/pcb_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_keywords.cpp
+ )
+
+add_dependencies( pcbcommon pcb_lexer_source_files )
+
+# auto-generate pcbnew s-expression footprint library table code.
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/fp_lib_table.keywords
+ ${PROJECT_SOURCE_DIR}/include/fp_lib_table_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/fp_lib_table_keywords.cpp
+ FP_LIB_TABLE_T
+ )
+
+add_custom_target(
+ fp_lib_table_lexer_source_files ALL
+ DEPENDS
+ ${PROJECT_SOURCE_DIR}/include/fp_lib_table_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/fp_lib_table_keywords.cpp
+ )
+
+add_dependencies( pcbcommon fp_lib_table_lexer_source_files )
+
+# auto-generate page layout reader s-expression page_layout_reader_lexer.h
+# and title_block_reader_keywords.cpp.
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/page_layout/page_layout_reader.keywords
+ ${PROJECT_SOURCE_DIR}/include/page_layout_reader_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/page_layout/page_layout_reader_keywords.cpp
+ TB_READER_T
+ )
+
+add_custom_target(
+ page_layout_lexer_source_files ALL
+ DEPENDS
+ ${PROJECT_SOURCE_DIR}/include/page_layout_reader_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/page_layout/page_layout_reader_keywords.cpp
+ )
+
+add_dependencies( common page_layout_lexer_source_files )
+
+# This one gets made only when testing.
+# to build it, first enable #define STAND_ALONE at top of dsnlexer.cpp
+add_executable( dsntest EXCLUDE_FROM_ALL dsnlexer.cpp )
+target_link_libraries( dsntest common ${wxWidgets_LIBRARIES} rt )
+
+add_dependencies( dsntest lib-dependencies )
+
diff --git a/common/base_screen.cpp b/common/base_screen.cpp
new file mode 100644
index 0000000..8fa0b7d
--- /dev/null
+++ b/common/base_screen.cpp
@@ -0,0 +1,471 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file base_screen.cpp
+ * @brief BASE_SCREEN object implementation.
+ */
+
+#include <fctsys.h>
+#include <macros.h>
+#include <common.h>
+#include <base_struct.h>
+#include <class_base_screen.h>
+#include <id.h>
+#include <base_units.h>
+
+wxString BASE_SCREEN::m_PageLayoutDescrFileName; // the name of the page layout descr file.
+
+BASE_SCREEN::BASE_SCREEN( KICAD_T aType ) :
+ EDA_ITEM( aType )
+{
+ m_UndoRedoCountMax = DEFAULT_MAX_UNDO_ITEMS;
+ m_FirstRedraw = true;
+ m_ScreenNumber = 1;
+ m_NumberOfScreens = 1; // Hierarchy: Root: ScreenNumber = 1
+ m_Zoom = 32.0;
+ m_Grid.m_Size = wxRealPoint( 50, 50 ); // Default grid size
+ m_Grid.m_CmdId = ID_POPUP_GRID_LEVEL_50;
+ m_Center = true;
+ m_IsPrinting = false;
+ m_ScrollPixelsPerUnitX = 1;
+ m_ScrollPixelsPerUnitY = 1;
+
+ m_FlagModified = false; // Set when any change is made on board.
+ m_FlagSave = false; // Used in auto save set when an auto save is required.
+
+ SetCurItem( NULL );
+}
+
+
+BASE_SCREEN::~BASE_SCREEN()
+{
+}
+
+
+void BASE_SCREEN::InitDataPoints( const wxSize& aPageSizeIU )
+{
+ if( m_Center )
+ {
+ m_crossHairPosition.x = 0;
+ m_crossHairPosition.y = 0;
+
+ m_DrawOrg.x = -aPageSizeIU.x / 2;
+ m_DrawOrg.y = -aPageSizeIU.y / 2;
+ }
+ else
+ {
+ m_crossHairPosition.x = aPageSizeIU.x / 2;
+ m_crossHairPosition.y = aPageSizeIU.y / 2;
+
+ m_DrawOrg.x = 0;
+ m_DrawOrg.y = 0;
+ }
+
+ m_O_Curseur.x = m_O_Curseur.y = 0;
+}
+
+
+double BASE_SCREEN::GetScalingFactor() const
+{
+ double scale = 1.0 / GetZoom();
+ return scale;
+}
+
+
+void BASE_SCREEN::SetScalingFactor( double aScale )
+{
+ // Limit zoom to max and min allowed values:
+ double zoom = Clamp( GetMinAllowedZoom(), aScale, GetMaxAllowedZoom() );
+
+ SetZoom( zoom );
+}
+
+
+bool BASE_SCREEN::SetFirstZoom()
+{
+ return SetZoom( GetMinAllowedZoom() );
+}
+
+
+bool BASE_SCREEN::SetLastZoom()
+{
+ return SetZoom( GetMaxAllowedZoom() );
+}
+
+
+bool BASE_SCREEN::SetZoom( double iu_per_du )
+{
+ if( iu_per_du == m_Zoom )
+ return false;
+
+ //wxLogDebug( "Zoom:%.16g 1/Zoom:%.16g", iu_per_du, 1/iu_per_du );
+
+ if( iu_per_du < GetMinAllowedZoom() )
+ return false;
+
+ if( iu_per_du > GetMaxAllowedZoom() )
+ return false;
+
+ m_Zoom = iu_per_du;
+
+ return true;
+}
+
+
+bool BASE_SCREEN::SetNextZoom()
+{
+ for( unsigned i=0; i < m_ZoomList.size(); ++i )
+ {
+ if( m_Zoom < m_ZoomList[i] )
+ {
+ SetZoom( m_ZoomList[i] );
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+bool BASE_SCREEN::SetPreviousZoom()
+{
+ for( unsigned i = m_ZoomList.size(); i != 0; --i )
+ {
+ if( m_Zoom > m_ZoomList[i - 1] )
+ {
+ SetZoom( m_ZoomList[i - 1] );
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/* Build the list of human readable grid list.
+ * The list shows the grid size both in mils or mm.
+ * aMmFirst = true to have mm first and mils after
+ * false to have mils first and mm after
+ */
+int BASE_SCREEN::BuildGridsChoiceList( wxArrayString& aGridsList, bool aMmFirst) const
+{
+ wxString msg;
+ wxRealPoint curr_grid_size = GetGridSize();
+ int idx = -1;
+ int idx_usergrid = -1;
+
+ for( size_t i = 0; i < GetGridCount(); i++ )
+ {
+ const GRID_TYPE& grid = m_grids[i];
+ double gridValueMils = To_User_Unit( INCHES, grid.m_Size.x ) * 1000;
+ double gridValue_mm = To_User_Unit( MILLIMETRES, grid.m_Size.x );
+
+ if( grid.m_CmdId == ID_POPUP_GRID_USER )
+ {
+ msg = _( "User Grid" );
+ idx_usergrid = i;
+ }
+ else
+ {
+ if( aMmFirst )
+ msg.Printf( _( "Grid: %.4f mm (%.2f mils)" ),
+ gridValue_mm, gridValueMils );
+ else
+ msg.Printf( _( "Grid: %.2f mils (%.4f mm)" ),
+ gridValueMils, gridValue_mm );
+ }
+
+ aGridsList.Add( msg );
+
+ if( curr_grid_size == grid.m_Size )
+ idx = i;
+ }
+
+ if( idx < 0 )
+ idx = idx_usergrid;
+
+ return idx;
+}
+
+
+void BASE_SCREEN::SetGridList( GRIDS& gridlist )
+{
+ if( !m_grids.empty() )
+ m_grids.clear();
+
+ m_grids = gridlist;
+}
+
+
+int BASE_SCREEN::SetGrid( const wxRealPoint& size )
+{
+ wxASSERT( !m_grids.empty() );
+
+ GRID_TYPE nearest_grid = m_grids[0];
+ int gridIdx = 0;
+
+ for( unsigned i = 0; i < m_grids.size(); i++ )
+ {
+ if( m_grids[i].m_Size == size )
+ {
+ m_Grid = m_grids[i];
+ return m_grids[i].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
+ }
+
+ // keep track of the nearest larger grid size, if the exact size is not found
+ if ( size.x < m_grids[i].m_Size.x )
+ {
+ gridIdx = m_grids[i].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
+ nearest_grid = m_grids[i];
+ }
+ }
+
+ m_Grid = nearest_grid;
+
+ wxLogWarning( wxT( "Grid size( %f, %f ) not in grid list, falling back " ) \
+ wxT( "to grid size( %f, %f )." ),
+ size.x, size.y, m_Grid.m_Size.x, m_Grid.m_Size.y );
+
+ return gridIdx;
+}
+
+
+int BASE_SCREEN::SetGrid( int aCommandId )
+{
+ wxASSERT( !m_grids.empty() );
+
+ for( unsigned i = 0; i < m_grids.size(); i++ )
+ {
+ if( m_grids[i].m_CmdId == aCommandId )
+ {
+ m_Grid = m_grids[i];
+ return m_grids[i].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
+ }
+ }
+
+ m_Grid = m_grids[0];
+
+ wxLogWarning( wxT( "Grid ID %d not in grid list, falling back to " ) \
+ wxT( "grid size( %g, %g )." ), aCommandId,
+ m_Grid.m_Size.x, m_Grid.m_Size.y );
+
+ return m_grids[0].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
+}
+
+
+
+void BASE_SCREEN::AddGrid( const GRID_TYPE& grid )
+{
+ for( unsigned i = 0; i < m_grids.size(); i++ )
+ {
+ if( m_grids[i].m_Size == grid.m_Size && grid.m_CmdId != ID_POPUP_GRID_USER )
+ {
+ wxLogDebug( wxT( "Discarding duplicate grid size( %g, %g )." ),
+ grid.m_Size.x, grid.m_Size.y );
+ return;
+ }
+
+ if( m_grids[i].m_CmdId == grid.m_CmdId )
+ {
+ wxLogDebug( wxT( "Changing grid ID %d from size( %g, %g ) to " ) \
+ wxT( "size( %g, %g )." ),
+ grid.m_CmdId, m_grids[i].m_Size.x,
+ m_grids[i].m_Size.y, grid.m_Size.x, grid.m_Size.y );
+ m_grids[i].m_Size = grid.m_Size;
+ return;
+ }
+ }
+
+ m_grids.push_back( grid );
+}
+
+
+void BASE_SCREEN::AddGrid( const wxRealPoint& size, int id )
+{
+ GRID_TYPE grid;
+
+ grid.m_Size = size;
+ grid.m_CmdId = id;
+ AddGrid( grid );
+}
+
+
+void BASE_SCREEN::AddGrid( const wxRealPoint& size, EDA_UNITS_T aUnit, int id )
+{
+ wxRealPoint new_size;
+ GRID_TYPE new_grid;
+
+ new_size.x = From_User_Unit( aUnit, size.x );
+ new_size.y = From_User_Unit( aUnit, size.y );
+ new_grid.m_CmdId = id;
+ new_grid.m_Size = new_size;
+
+ AddGrid( new_grid );
+}
+
+
+GRID_TYPE& BASE_SCREEN::GetGrid( size_t aIndex )
+{
+ wxCHECK_MSG( !m_grids.empty() && aIndex < m_grids.size(), m_Grid,
+ wxT( "Cannot get grid object outside the bounds of the grid list." ) );
+
+ return m_grids[ aIndex ];
+}
+
+
+bool BASE_SCREEN::GridExists( int aCommandId )
+{
+ // tests for grid command ID (not an index in grid list, but a wxID) exists in grid list.
+ for( unsigned i = 0; i < m_grids.size(); i++ )
+ {
+ if( m_grids[i].m_CmdId == aCommandId )
+ return true;
+ }
+
+ return false;
+}
+
+
+wxPoint BASE_SCREEN::getNearestGridPosition( const wxPoint& aPosition,
+ const wxPoint& aGridOrigin, wxRealPoint* aGridSize ) const
+{
+ wxPoint pt;
+ wxRealPoint gridSize;
+
+ if( aGridSize )
+ gridSize = *aGridSize;
+ else
+ gridSize = GetGridSize();
+
+ double offset = fmod( aGridOrigin.x, gridSize.x );
+ int x = KiROUND( (aPosition.x - offset) / gridSize.x );
+
+ pt.x = KiROUND( x * gridSize.x + offset );
+
+ offset = fmod( aGridOrigin.y, gridSize.y );
+
+ int y = KiROUND( (aPosition.y - offset) / gridSize.y );
+ pt.y = KiROUND ( y * gridSize.y + offset );
+
+ return pt;
+}
+
+
+wxPoint BASE_SCREEN::getCursorPosition( bool aOnGrid, const wxPoint& aGridOrigin, wxRealPoint* aGridSize ) const
+{
+ if( aOnGrid )
+ return getNearestGridPosition( m_crossHairPosition, aGridOrigin, aGridSize );
+
+ return m_crossHairPosition;
+}
+
+
+wxPoint BASE_SCREEN::getCrossHairScreenPosition() const
+{
+ wxPoint pos = m_crossHairPosition - m_DrawOrg;
+ double scalar = GetScalingFactor();
+
+ pos.x = KiROUND( (double) pos.x * scalar );
+ pos.y = KiROUND( (double) pos.y * scalar );
+
+ return pos;
+}
+
+
+void BASE_SCREEN::setCrossHairPosition( const wxPoint& aPosition, const wxPoint& aGridOrigin, bool aSnapToGrid )
+{
+ if( aSnapToGrid )
+ m_crossHairPosition = getNearestGridPosition( aPosition, aGridOrigin, NULL );
+ else
+ m_crossHairPosition = aPosition;
+}
+
+
+void BASE_SCREEN::ClearUndoRedoList()
+{
+ ClearUndoORRedoList( m_UndoList );
+ ClearUndoORRedoList( m_RedoList );
+}
+
+
+void BASE_SCREEN::PushCommandToUndoList( PICKED_ITEMS_LIST* aNewitem )
+{
+ m_UndoList.PushCommand( aNewitem );
+
+ // Delete the extra items, if count max reached
+ if( m_UndoRedoCountMax > 0 )
+ {
+ int extraitems = GetUndoCommandCount() - m_UndoRedoCountMax;
+ if( extraitems > 0 )
+ ClearUndoORRedoList( m_UndoList, extraitems );
+ }
+}
+
+
+void BASE_SCREEN::PushCommandToRedoList( PICKED_ITEMS_LIST* aNewitem )
+{
+ m_RedoList.PushCommand( aNewitem );
+
+ // Delete the extra items, if count max reached
+ if( m_UndoRedoCountMax > 0 )
+ {
+ int extraitems = GetRedoCommandCount() - m_UndoRedoCountMax;
+ if( extraitems > 0 )
+ ClearUndoORRedoList( m_RedoList, extraitems );
+ }
+}
+
+
+PICKED_ITEMS_LIST* BASE_SCREEN::PopCommandFromUndoList( )
+{
+ return m_UndoList.PopCommand( );
+}
+
+
+PICKED_ITEMS_LIST* BASE_SCREEN::PopCommandFromRedoList( )
+{
+ return m_RedoList.PopCommand( );
+}
+
+
+#if defined(DEBUG)
+
+void BASE_SCREEN::Show( int nestLevel, std::ostream& os ) const
+{
+ // for now, make it look like XML, expand on this later.
+ NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << ">\n";
+
+ /* this class will eventually go away, but here's a place holder until then.
+ for( EDA_ITEM* item = m_drawList; item; item = item->Next() )
+ {
+ item->Show( nestLevel+1, os );
+ }
+ */
+
+ NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
+}
+
+#endif
diff --git a/common/base_struct.cpp b/common/base_struct.cpp
new file mode 100644
index 0000000..9b6273d
--- /dev/null
+++ b/common/base_struct.cpp
@@ -0,0 +1,592 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file base_struct.cpp
+ * @brief Implementation of EDA_ITEM base class for KiCad.
+ */
+
+#include <fctsys.h>
+#include <trigo.h>
+#include <common.h>
+#include <macros.h>
+#include <kicad_string.h>
+#include <wxstruct.h>
+#include <class_drawpanel.h>
+#include <class_base_screen.h>
+
+#include "../eeschema/dialogs/dialog_schematic_find.h"
+
+
+const wxString traceFindReplace( wxT( "KicadFindReplace" ) );
+
+
+enum textbox {
+ ID_TEXTBOX_LIST = 8010
+};
+
+
+EDA_ITEM::EDA_ITEM( EDA_ITEM* parent, KICAD_T idType )
+{
+ initVars();
+ m_StructType = idType;
+ m_Parent = parent;
+}
+
+
+EDA_ITEM::EDA_ITEM( KICAD_T idType )
+{
+ initVars();
+ m_StructType = idType;
+}
+
+
+EDA_ITEM::EDA_ITEM( const EDA_ITEM& base )
+{
+ initVars();
+ m_StructType = base.m_StructType;
+ m_Parent = base.m_Parent;
+ m_Flags = base.m_Flags;
+
+ // A copy of an item cannot have the same time stamp as the original item.
+ SetTimeStamp( GetNewTimeStamp() );
+ m_Status = base.m_Status;
+}
+
+
+void EDA_ITEM::initVars()
+{
+ m_StructType = TYPE_NOT_INIT;
+ Pnext = NULL; // Linked list: Link (next struct)
+ Pback = NULL; // Linked list: Link (previous struct)
+ m_Parent = NULL; // Linked list: Link (parent struct)
+ m_List = NULL; // I am not on any list yet
+ m_Image = NULL; // Link to an image copy for undelete or abort command
+ m_Flags = 0; // flags for editions and other
+ SetTimeStamp( 0 ); // Time stamp used for logical links
+ m_Status = 0;
+ m_forceVisible = false; // true to override the visibility setting of the item.
+}
+
+
+void EDA_ITEM::SetModified()
+{
+ SetFlags( IS_CHANGED );
+
+ // If this a child object, then the parent modification state also needs to be set.
+ if( m_Parent )
+ m_Parent->SetModified();
+}
+
+
+EDA_ITEM* EDA_ITEM::Clone() const
+{
+ wxCHECK_MSG( false, NULL, wxT( "Clone not implemented in derived class " ) + GetClass() +
+ wxT( ". Bad programmer!" ) );
+}
+
+
+SEARCH_RESULT EDA_ITEM::IterateForward( EDA_ITEM* listStart,
+ INSPECTOR* inspector,
+ const void* testData,
+ const KICAD_T scanTypes[] )
+{
+ EDA_ITEM* p = listStart;
+
+ for( ; p; p = p->Pnext )
+ {
+ if( SEARCH_QUIT == p->Visit( inspector, testData, scanTypes ) )
+ return SEARCH_QUIT;
+ }
+
+ return SEARCH_CONTINUE;
+}
+
+
+// see base_struct.h
+// many classes inherit this method, be careful:
+SEARCH_RESULT EDA_ITEM::Visit( INSPECTOR* inspector, const void* testData,
+ const KICAD_T scanTypes[] )
+{
+ KICAD_T stype;
+
+#if 0 && defined(DEBUG)
+ std::cout << GetClass().mb_str() << ' ';
+#endif
+
+ for( const KICAD_T* p = scanTypes; (stype = *p) != EOT; ++p )
+ {
+ // If caller wants to inspect my type
+ if( stype == Type() )
+ {
+ if( SEARCH_QUIT == inspector->Inspect( this, testData ) )
+ return SEARCH_QUIT;
+
+ break;
+ }
+ }
+
+ return SEARCH_CONTINUE;
+}
+
+
+wxString EDA_ITEM::GetSelectMenuText() const
+{
+ wxFAIL_MSG( wxT( "GetSelectMenuText() was not overridden for schematic item type " ) +
+ GetClass() );
+
+ return wxString( wxT( "Undefined menu text for " ) + GetClass() );
+}
+
+
+bool EDA_ITEM::Matches( const wxString& aText, wxFindReplaceData& aSearchData )
+{
+ wxString text = aText;
+ wxString searchText = aSearchData.GetFindString();
+
+ // Don't match if searching for replaceable item and the item doesn't support text replace.
+ if( (aSearchData.GetFlags() & FR_SEARCH_REPLACE) && !IsReplaceable() )
+ return false;
+
+ if( aSearchData.GetFlags() & wxFR_WHOLEWORD )
+ return aText.IsSameAs( searchText, aSearchData.GetFlags() & wxFR_MATCHCASE );
+
+ if( aSearchData.GetFlags() & FR_MATCH_WILDCARD )
+ {
+ if( aSearchData.GetFlags() & wxFR_MATCHCASE )
+ return text.Matches( searchText );
+
+ return text.MakeUpper().Matches( searchText.MakeUpper() );
+ }
+
+ if( aSearchData.GetFlags() & wxFR_MATCHCASE )
+ return aText.Find( searchText ) != wxNOT_FOUND;
+
+ return text.MakeUpper().Find( searchText.MakeUpper() ) != wxNOT_FOUND;
+}
+
+
+bool EDA_ITEM::Replace( wxFindReplaceData& aSearchData, wxString& aText )
+{
+ wxCHECK_MSG( IsReplaceable(), false,
+ wxT( "Attempt to replace text in <" ) + GetClass() + wxT( "> item." ) );
+
+ wxString searchString = (aSearchData.GetFlags() & wxFR_MATCHCASE) ? aText : aText.Upper();
+
+ int result = searchString.Find( (aSearchData.GetFlags() & wxFR_MATCHCASE) ?
+ aSearchData.GetFindString() :
+ aSearchData.GetFindString().Upper() );
+
+ if( result == wxNOT_FOUND )
+ return false;
+
+ wxString prefix = aText.Left( result );
+ wxString suffix;
+
+ if( aSearchData.GetFindString().length() + result < aText.length() )
+ suffix = aText.Right( aText.length() - ( aSearchData.GetFindString().length() + result ) );
+
+ wxLogTrace( traceFindReplace, wxT( "Replacing '%s', prefix '%s', replace '%s', suffix '%s'." ),
+ GetChars( aText ), GetChars( prefix ), GetChars( aSearchData.GetReplaceString() ),
+ GetChars( suffix ) );
+
+ aText = prefix + aSearchData.GetReplaceString() + suffix;
+
+ return true;
+}
+
+
+bool EDA_ITEM::operator<( const EDA_ITEM& aItem ) const
+{
+ wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
+ GetChars( GetClass() ) ) );
+
+ return false;
+}
+
+#ifdef USE_EDA_ITEM_OP_EQ // see base_struct.h for explanations
+EDA_ITEM& EDA_ITEM::operator=( const EDA_ITEM& aItem )
+{
+ if( &aItem != this )
+ {
+ m_Image = aItem.m_Image;
+ m_StructType = aItem.m_StructType;
+ m_Parent = aItem.m_Parent;
+ m_Flags = aItem.m_Flags;
+ m_TimeStamp = aItem.m_TimeStamp;
+ m_Status = aItem.m_Status;
+ m_forceVisible = aItem.m_forceVisible;
+ }
+
+ return *this;
+}
+#endif
+
+const BOX2I EDA_ITEM::ViewBBox() const
+{
+ // Basic fallback
+ return BOX2I( VECTOR2I( GetBoundingBox().GetOrigin() ),
+ VECTOR2I( GetBoundingBox().GetSize() ) );
+}
+
+
+void EDA_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
+{
+ // Basic fallback
+ aCount = 1;
+ aLayers[0] = 0;
+}
+
+
+#if defined(DEBUG)
+
+// A function that should have been in wxWidgets
+std::ostream& operator<<( std::ostream& out, const wxSize& size )
+{
+ out << " width=\"" << size.GetWidth() << "\" height=\"" << size.GetHeight() << "\"";
+ return out;
+}
+
+
+// A function that should have been in wxWidgets
+std::ostream& operator<<( std::ostream& out, const wxPoint& pt )
+{
+ out << " x=\"" << pt.x << "\" y=\"" << pt.y << "\"";
+ return out;
+}
+
+
+void EDA_ITEM::ShowDummy( std::ostream& os ) const
+{
+ // XML output:
+ wxString s = GetClass();
+
+ os << '<' << s.Lower().mb_str() << ">"
+ << " Need ::Show() override for this class "
+ << "</" << s.Lower().mb_str() << ">\n";
+}
+
+
+std::ostream& EDA_ITEM::NestedSpace( int nestLevel, std::ostream& os )
+{
+ for( int i = 0; i<nestLevel; ++i )
+ os << " ";
+
+ // number of spaces here controls indent per nest level
+
+ return os;
+}
+
+#endif
+
+
+/******************/
+/* Class EDA_RECT */
+/******************/
+
+void EDA_RECT::Normalize()
+{
+ if( m_Size.y < 0 )
+ {
+ m_Size.y = -m_Size.y;
+ m_Pos.y -= m_Size.y;
+ }
+
+ if( m_Size.x < 0 )
+ {
+ m_Size.x = -m_Size.x;
+ m_Pos.x -= m_Size.x;
+ }
+}
+
+
+void EDA_RECT::Move( const wxPoint& aMoveVector )
+{
+ m_Pos += aMoveVector;
+}
+
+
+bool EDA_RECT::Contains( const wxPoint& aPoint ) const
+{
+ wxPoint rel_pos = aPoint - m_Pos;
+ wxSize size = m_Size;
+
+ if( size.x < 0 )
+ {
+ size.x = -size.x;
+ rel_pos.x += size.x;
+ }
+
+ if( size.y < 0 )
+ {
+ size.y = -size.y;
+ rel_pos.y += size.y;
+ }
+
+ return (rel_pos.x >= 0) && (rel_pos.y >= 0) && ( rel_pos.y <= size.y) && ( rel_pos.x <= size.x);
+}
+
+
+/*
+ * return true if aRect is inside me (or on boundaries)
+ */
+bool EDA_RECT::Contains( const EDA_RECT& aRect ) const
+{
+ return Contains( aRect.GetOrigin() ) && Contains( aRect.GetEnd() );
+}
+
+
+/* Intersects
+ * test for a common area between segment and rect.
+ * return true if at least a common point is found
+ */
+bool EDA_RECT::Intersects( const wxPoint& aPoint1, const wxPoint& aPoint2 ) const
+{
+ wxPoint point2, point4;
+
+ if( Contains( aPoint1 ) || Contains( aPoint2 ) )
+ return true;
+
+ point2.x = GetEnd().x;
+ point2.y = GetOrigin().y;
+ point4.x = GetOrigin().x;
+ point4.y = GetEnd().y;
+
+ //Only need to test 3 sides since a straight line cant enter and exit on same side
+ if( SegmentIntersectsSegment( aPoint1, aPoint2, GetOrigin() , point2 ) )
+ return true;
+
+ if( SegmentIntersectsSegment( aPoint1, aPoint2, point2 , GetEnd() ) )
+ return true;
+
+ if( SegmentIntersectsSegment( aPoint1, aPoint2, GetEnd() , point4 ) )
+ return true;
+
+ return false;
+}
+
+
+/* Intersects
+ * test for a common area between 2 rect.
+ * return true if at least a common point is found
+ */
+bool EDA_RECT::Intersects( const EDA_RECT& aRect ) const
+{
+ // this logic taken from wxWidgets' geometry.cpp file:
+ bool rc;
+ EDA_RECT me(*this);
+ EDA_RECT rect(aRect);
+ me.Normalize(); // ensure size is >= 0
+ rect.Normalize(); // ensure size is >= 0
+
+ // calculate the left common area coordinate:
+ int left = std::max( me.m_Pos.x, rect.m_Pos.x );
+ // calculate the right common area coordinate:
+ int right = std::min( me.m_Pos.x + me.m_Size.x, rect.m_Pos.x + rect.m_Size.x );
+ // calculate the upper common area coordinate:
+ int top = std::max( me.m_Pos.y, aRect.m_Pos.y );
+ // calculate the lower common area coordinate:
+ int bottom = std::min( me.m_Pos.y + me.m_Size.y, rect.m_Pos.y + rect.m_Size.y );
+
+ // if a common area exists, it must have a positive (null accepted) size
+ if( left <= right && top <= bottom )
+ rc = true;
+ else
+ rc = false;
+
+ return rc;
+}
+
+
+EDA_RECT& EDA_RECT::Inflate( int aDelta )
+{
+ Inflate( aDelta, aDelta );
+ return *this;
+}
+
+
+EDA_RECT& EDA_RECT::Inflate( wxCoord dx, wxCoord dy )
+{
+ if( m_Size.x >= 0 )
+ {
+ if( m_Size.x < -2 * dx )
+ {
+ // Don't allow deflate to eat more width than we have,
+ m_Pos.x += m_Size.x / 2;
+ m_Size.x = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.x -= dx;
+ m_Size.x += 2 * dx;
+ }
+ }
+ else // size.x < 0:
+ {
+ if( m_Size.x > -2 * dx )
+ {
+ // Don't allow deflate to eat more width than we have,
+ m_Pos.x -= m_Size.x / 2;
+ m_Size.x = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.x += dx;
+ m_Size.x -= 2 * dx; // m_Size.x <0: inflate when dx > 0
+ }
+ }
+
+ if( m_Size.y >= 0 )
+ {
+ if( m_Size.y < -2 * dy )
+ {
+ // Don't allow deflate to eat more height than we have,
+ m_Pos.y += m_Size.y / 2;
+ m_Size.y = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.y -= dy;
+ m_Size.y += 2 * dy;
+ }
+ }
+ else // size.y < 0:
+ {
+ if( m_Size.y > 2 * dy )
+ {
+ // Don't allow deflate to eat more height than we have,
+ m_Pos.y -= m_Size.y / 2;
+ m_Size.y = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.y += dy;
+ m_Size.y -= 2 * dy; // m_Size.y <0: inflate when dy > 0
+ }
+ }
+
+ return *this;
+}
+
+
+void EDA_RECT::Merge( const EDA_RECT& aRect )
+{
+ Normalize(); // ensure width and height >= 0
+ EDA_RECT rect = aRect;
+ rect.Normalize(); // ensure width and height >= 0
+ wxPoint end = GetEnd();
+ wxPoint rect_end = rect.GetEnd();
+
+ // Change origin and size in order to contain the given rect
+ m_Pos.x = std::min( m_Pos.x, rect.m_Pos.x );
+ m_Pos.y = std::min( m_Pos.y, rect.m_Pos.y );
+ end.x = std::max( end.x, rect_end.x );
+ end.y = std::max( end.y, rect_end.y );
+ SetEnd( end );
+}
+
+
+void EDA_RECT::Merge( const wxPoint& aPoint )
+{
+ Normalize(); // ensure width and height >= 0
+
+ wxPoint end = GetEnd();
+ // Change origin and size in order to contain the given rect
+ m_Pos.x = std::min( m_Pos.x, aPoint.x );
+ m_Pos.y = std::min( m_Pos.y, aPoint.y );
+ end.x = std::max( end.x, aPoint.x );
+ end.y = std::max( end.y, aPoint.y );
+ SetEnd( end );
+}
+
+
+double EDA_RECT::GetArea() const
+{
+ return (double) GetWidth() * (double) GetHeight();
+}
+
+
+EDA_RECT EDA_RECT::Common( const EDA_RECT& aRect ) const
+{
+ EDA_RECT r;
+
+ if( Intersects( aRect ) )
+ {
+ wxPoint originA( std::min( GetOrigin().x, GetEnd().x ),
+ std::min( GetOrigin().y, GetEnd().y ) );
+ wxPoint originB( std::min( aRect.GetOrigin().x, aRect.GetEnd().x ),
+ std::min( aRect.GetOrigin().y, aRect.GetEnd().y ) );
+ wxPoint endA( std::max( GetOrigin().x, GetEnd().x ),
+ std::max( GetOrigin().y, GetEnd().y ) );
+ wxPoint endB( std::max( aRect.GetOrigin().x, aRect.GetEnd().x ),
+ std::max( aRect.GetOrigin().y, aRect.GetEnd().y ) );
+
+ r.SetOrigin( wxPoint( std::max( originA.x, originB.x ), std::max( originA.y, originB.y ) ) );
+ r.SetEnd ( wxPoint( std::min( endA.x, endB.x ), std::min( endA.y, endB.y ) ) );
+ }
+
+ return r;
+}
+
+
+/* Calculate the bounding box of this, when rotated
+ */
+const EDA_RECT EDA_RECT::GetBoundingBoxRotated( wxPoint aRotCenter, double aAngle )
+{
+ wxPoint corners[4];
+
+ // Build the corners list
+ corners[0] = GetOrigin();
+ corners[2] = GetEnd();
+ corners[1].x = corners[0].x;
+ corners[1].y = corners[2].y;
+ corners[3].x = corners[2].x;
+ corners[3].y = corners[0].y;
+
+ // Rotate all corners, to find the bounding box
+ for( int ii = 0; ii < 4; ii ++ )
+ RotatePoint( &corners[ii], aRotCenter, aAngle );
+
+ // Find the corners bounding box
+ wxPoint start = corners[0];
+ wxPoint end = corners[0];
+
+ for( int ii = 1; ii < 4; ii ++ )
+ {
+ start.x = std::min( start.x, corners[ii].x);
+ start.y = std::min( start.y, corners[ii].y);
+ end.x = std::max( end.x, corners[ii].x);
+ end.y = std::max( end.y, corners[ii].y);
+ }
+
+ EDA_RECT bbox;
+ bbox.SetOrigin( start );
+ bbox.SetEnd( end );
+
+ return bbox;
+}
diff --git a/common/base_units.cpp b/common/base_units.cpp
new file mode 100644
index 0000000..7cf035c
--- /dev/null
+++ b/common/base_units.cpp
@@ -0,0 +1,423 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 CERN
+ * Copyright (C) 1992-2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @author Wayne Stambaugh <stambaughw@verizon.net>
+ * @file base_units.cpp
+ * @brief Code to handle objects that require both schematic and board internal units.
+ * @note This file is an ugly hack to solve the problem of formatting the base units
+ * for either schematics or boards in objects that are include in both domains.
+ * At some point in the future. This code should be rolled back into the
+ * appropriate object and build with the correct internal unit formatting
+ * depending on the application.
+ */
+
+#include <macros.h>
+#include <base_struct.h>
+#include <class_title_block.h>
+#include <common.h>
+#include <base_units.h>
+
+
+#if defined( PCBNEW ) || defined( CVPCB ) || defined( EESCHEMA ) || defined( GERBVIEW ) || defined( PL_EDITOR )
+#define IU_TO_MM( x ) ( x / IU_PER_MM )
+#define IU_TO_IN( x ) ( x / IU_PER_MILS / 1000 )
+#define MM_TO_IU( x ) ( x * IU_PER_MM )
+#define IN_TO_IU( x ) ( x * IU_PER_MILS * 1000 )
+#else
+#error "Cannot resolve internal units due to no definition of EESCHEMA, CVPCB or PCBNEW."
+#endif
+
+
+// Helper function to print a float number without using scientific notation
+// and no trailing 0
+// So we cannot always just use the %g or the %f format to print a fp number
+// this helper function uses the %f format when needed, or %g when %f is
+// not well working and then removes trailing 0
+
+std::string Double2Str( double aValue )
+{
+ char buf[50];
+ int len;
+
+ if( aValue != 0.0 && fabs( aValue ) <= 0.0001 )
+ {
+ // For these small values, %f works fine,
+ // and %g gives an exponent
+ len = sprintf( buf, "%.16f", aValue );
+
+ while( --len > 0 && buf[len] == '0' )
+ buf[len] = '\0';
+
+ if( buf[len] == '.' )
+ buf[len] = '\0';
+ else
+ ++len;
+ }
+ else
+ {
+ // For these values, %g works fine, and sometimes %f
+ // gives a bad value (try aValue = 1.222222222222, with %.16f format!)
+ len = sprintf( buf, "%.16g", aValue );
+ }
+
+ return std::string( buf, len );
+}
+
+
+double To_User_Unit( EDA_UNITS_T aUnit, double aValue )
+{
+ switch( aUnit )
+ {
+ case MILLIMETRES:
+ return IU_TO_MM( aValue );
+
+ case INCHES:
+ return IU_TO_IN( aValue );
+
+ case DEGREES:
+ return aValue / 10.0f;
+
+ default:
+ return aValue;
+ }
+}
+
+/* Convert a value to a string using double notation.
+ * For readability, the mantissa has 0, 1, 3 or 4 digits, depending on units
+ * for unit = inch the mantissa has 3 digits (Eeschema) or 4 digits
+ * for unit = mil the mantissa has 0 digits (Eeschema) or 1 digits
+ * for unit = mm the mantissa has 3 digits (Eeschema) or 4 digits
+ * Should be used only to display info in status,
+ * but not in dialogs, because 4 digits only
+ * could truncate the actual value
+ */
+wxString CoordinateToString( int aValue, bool aConvertToMils )
+{
+ return LengthDoubleToString( (double) aValue, aConvertToMils );
+}
+
+wxString LengthDoubleToString( double aValue, bool aConvertToMils )
+{
+ wxString text;
+ const wxChar* format;
+ double value = To_User_Unit( g_UserUnit, aValue );
+
+ if( g_UserUnit == INCHES )
+ {
+ if( aConvertToMils )
+ {
+#if defined( EESCHEMA )
+ format = wxT( "%.0f" );
+#else
+ format = wxT( "%.1f" );
+#endif
+ value *= 1000;
+ }
+ else
+ {
+#if defined( EESCHEMA )
+ format = wxT( "%.3f" );
+#else
+ format = wxT( "%.4f" );
+#endif
+ }
+ }
+ else
+ {
+#if defined( EESCHEMA )
+ format = wxT( "%.2f" );
+#else
+ format = wxT( "%.3f" );
+#endif
+ }
+
+ text.Printf( format, value );
+
+ if( g_UserUnit == INCHES )
+ text += ( aConvertToMils ) ? _( " mils" ) : _( " in" );
+ else
+ text += _( " mm" );
+
+ return text;
+}
+
+/* Remove trailing 0 from a string containing a converted float number.
+ * the trailing 0 are removed if the mantissa has more
+ * than aTrailingZeroAllowed digits and some trailing 0
+ */
+void StripTrailingZeros( wxString& aStringValue, unsigned aTrailingZeroAllowed )
+{
+ struct lconv * lc = localeconv();
+ char sep = lc->decimal_point[0];
+ unsigned sep_pos = aStringValue.Find( sep );
+
+ if( sep_pos > 0 )
+ {
+ // We want to keep at least aTrailingZeroAllowed digits after the separator
+ unsigned min_len = sep_pos + aTrailingZeroAllowed + 1;
+
+ while( aStringValue.Len() > min_len )
+ {
+ if( aStringValue.Last() == '0' )
+ aStringValue.RemoveLast();
+ else
+ break;
+ }
+ }
+}
+
+
+/* Convert a value to a string using double notation.
+ * For readability, the mantissa has 3 or more digits,
+ * the trailing 0 are removed if the mantissa has more than 3 digits
+ * and some trailing 0
+ * This function should be used to display values in dialogs because a value
+ * entered in mm (for instance 2.0 mm) could need up to 8 digits mantissa
+ * if displayed in inch to avoid truncation or rounding made just by the printf function.
+ * otherwise the actual value is rounded when read from dialog and converted
+ * in internal units, and therefore modified.
+ */
+wxString StringFromValue( EDA_UNITS_T aUnit, int aValue, bool aAddUnitSymbol )
+{
+ double value_to_print = To_User_Unit( aUnit, aValue );
+
+#if defined( EESCHEMA )
+ wxString stringValue = wxString::Format( wxT( "%.3f" ), value_to_print );
+
+ // Strip trailing zeros. However, keep at least 3 digits in mantissa
+ // For readability
+ StripTrailingZeros( stringValue, 3 );
+
+#else
+
+ char buf[50];
+ int len;
+
+ if( value_to_print != 0.0 && fabs( value_to_print ) <= 0.0001 )
+ {
+ len = sprintf( buf, "%.10f", value_to_print );
+
+ while( --len > 0 && buf[len] == '0' )
+ buf[len] = '\0';
+
+ if( buf[len]=='.' || buf[len]==',' )
+ buf[len] = '\0';
+ else
+ ++len;
+ }
+ else
+ {
+ len = sprintf( buf, "%.10g", value_to_print );
+ }
+
+ wxString stringValue( buf, wxConvUTF8 );
+
+#endif
+
+ if( aAddUnitSymbol )
+ {
+ switch( aUnit )
+ {
+ case INCHES:
+ stringValue += _( " \"" );
+ break;
+
+ case MILLIMETRES:
+ stringValue += _( " mm" );
+ break;
+
+ case DEGREES:
+ stringValue += _( " deg" );
+ break;
+
+ case UNSCALED_UNITS:
+ break;
+ }
+ }
+
+ return stringValue;
+}
+
+
+void PutValueInLocalUnits( wxTextCtrl& aTextCtr, int aValue )
+{
+ wxString msg = StringFromValue( g_UserUnit, aValue );
+
+ aTextCtr.SetValue( msg );
+}
+
+
+double From_User_Unit( EDA_UNITS_T aUnit, double aValue )
+{
+ double value;
+
+ switch( aUnit )
+ {
+ case MILLIMETRES:
+ value = MM_TO_IU( aValue );
+ break;
+
+ case INCHES:
+ value = IN_TO_IU( aValue );
+ break;
+
+ case DEGREES:
+ // Convert to "decidegrees"
+ value = aValue * 10;
+ break;
+
+ default:
+ case UNSCALED_UNITS:
+ value = aValue;
+ }
+
+ return value;
+}
+
+
+double DoubleValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
+{
+ double value;
+ double dtmp = 0;
+
+ // Acquire the 'right' decimal point separator
+ const struct lconv* lc = localeconv();
+
+ wxChar decimal_point = lc->decimal_point[0];
+ wxString buf( aTextValue.Strip( wxString::both ) );
+
+ // Convert the period in decimal point
+ buf.Replace( wxT( "." ), wxString( decimal_point, 1 ) );
+
+ // An ugly fix needed by WxWidgets 2.9.1 that sometimes
+ // back to a point as separator, although the separator is the comma
+ // TODO: remove this line if WxWidgets 2.9.2 fixes this issue
+ buf.Replace( wxT( "," ), wxString( decimal_point, 1 ) );
+
+ // Find the end of the numeric part
+ unsigned brk_point = 0;
+
+ while( brk_point < buf.Len() )
+ {
+ wxChar ch = buf[brk_point];
+
+ if( !( (ch >= '0' && ch <='9') || (ch == decimal_point) || (ch == '-') || (ch == '+') ) )
+ {
+ break;
+ }
+
+ ++brk_point;
+ }
+
+ // Extract the numeric part
+ buf.Left( brk_point );
+
+ buf.ToDouble( &dtmp );
+
+ // Check the optional unit designator (2 ch significant)
+ wxString unit( buf.Mid( brk_point ).Strip( wxString::leading ).Left( 2 ).Lower() );
+
+ if( aUnits == INCHES || aUnits == MILLIMETRES )
+ {
+ if( unit == wxT( "in" ) || unit == wxT( "\"" ) )
+ {
+ aUnits = INCHES;
+ }
+ else if( unit == wxT( "mm" ) )
+ {
+ aUnits = MILLIMETRES;
+ }
+ else if( unit == wxT( "mi" ) || unit == wxT( "th" ) ) // Mils or thous
+ {
+ aUnits = INCHES;
+ dtmp /= 1000;
+ }
+ }
+ else if( aUnits == DEGREES )
+ {
+ if( unit == wxT( "ra" ) ) // Radians
+ {
+ dtmp *= 180.0f / M_PI;
+ }
+ }
+
+ value = From_User_Unit( aUnits, dtmp );
+
+ return value;
+}
+
+
+int ValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
+{
+ double value = DoubleValueFromString( aUnits, aTextValue );
+ return KiROUND( value );
+}
+
+
+int ValueFromString( const wxString& aTextValue )
+{
+ int value;
+
+ value = ValueFromString( g_UserUnit, aTextValue);
+
+ return value;
+}
+
+int ValueFromTextCtrl( const wxTextCtrl& aTextCtr )
+{
+ int value;
+ wxString msg = aTextCtr.GetValue();
+
+ value = ValueFromString( g_UserUnit, msg );
+
+ return value;
+}
+
+
+wxString& operator <<( wxString& aString, const wxPoint& aPos )
+{
+ aString << wxT( "@ (" ) << CoordinateToString( aPos.x );
+ aString << wxT( "," ) << CoordinateToString( aPos.y );
+ aString << wxT( ")" );
+
+ return aString;
+}
+
+/**
+ * Function AngleToStringDegrees
+ * is a helper to convert the \a double \a aAngle (in internal unit)
+ * to a string in degrees
+ */
+wxString AngleToStringDegrees( double aAngle )
+{
+ wxString text;
+
+ text.Printf( wxT( "%.3f" ), aAngle/10.0 );
+ StripTrailingZeros( text, 1 );
+
+ return text;
+}
+
diff --git a/common/basicframe.cpp b/common/basicframe.cpp
new file mode 100644
index 0000000..fad5e64
--- /dev/null
+++ b/common/basicframe.cpp
@@ -0,0 +1,758 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2013-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file basicframe.cpp
+ * @brief EDA_BASE_FRAME class implementation.
+ */
+#include <config.h>
+
+// kicad_curl.h must be included before wx headers, to avoid
+// conflicts for some defines, at least on Windows
+#ifdef BUILD_GITHUB_PLUGIN
+#include <curl/curlver.h>
+#include <kicad_curl/kicad_curl.h>
+#endif
+
+#include <wx/aboutdlg.h>
+#include <wx/fontdlg.h>
+#include <wx/clipbrd.h>
+#include <wx/statline.h>
+#include <wx/platinfo.h>
+#include <wx/stdpaths.h>
+
+#include <build_version.h>
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <kiface_i.h>
+#include <online_help.h>
+#include <id.h>
+#include <eda_doc.h>
+#include <wxstruct.h>
+#include <macros.h>
+#include <menus_helpers.h>
+#include <dialog_shim.h>
+
+#include <boost/version.hpp>
+#include <typeinfo>
+#include <wx/display.h>
+
+/// The default auto save interval is 10 minutes.
+#define DEFAULT_AUTO_SAVE_INTERVAL 600
+
+
+const wxChar traceAutoSave[] = wxT( "KicadAutoSave" );
+
+/// Configuration file entry name for auto save interval.
+static const wxChar entryAutoSaveInterval[] = wxT( "AutoSaveInterval" );
+
+/// Configuration file entry for wxAuiManger perspective.
+static const wxChar entryPerspective[] = wxT( "Perspective" );
+
+/// Configuration file entry for most recently used path.
+static const wxChar entryMruPath[] = wxT( "MostRecentlyUsedPath" );
+
+
+EDA_BASE_FRAME::EDA_BASE_FRAME( wxWindow* aParent, FRAME_T aFrameType,
+ const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString& aFrameName ) :
+ wxFrame( aParent, wxID_ANY, aTitle, aPos, aSize, aStyle, aFrameName )
+{
+ wxSize minsize;
+
+ m_Ident = aFrameType;
+ m_mainToolBar = NULL;
+ m_hasAutoSave = false;
+ m_autoSaveState = false;
+ m_autoSaveInterval = -1;
+ m_autoSaveTimer = new wxTimer( this, ID_AUTO_SAVE_TIMER );
+ m_mruPath = wxStandardPaths::Get().GetDocumentsDir();
+ minsize.x = 470;
+ minsize.y = 350;
+
+ SetSizeHints( minsize.x, minsize.y, -1, -1, -1, -1 );
+
+ if( ( aSize.x < minsize.x ) || ( aSize.y < minsize.y ) )
+ SetSize( 0, 0, minsize.x, minsize.y );
+
+ // Create child subwindows.
+
+ // Dimensions of the user area of the main window.
+ GetClientSize( &m_FrameSize.x, &m_FrameSize.y );
+
+ m_FramePos.x = m_FramePos.y = 0;
+
+ Connect( ID_HELP_COPY_VERSION_STRING,
+ wxEVT_COMMAND_MENU_SELECTED,
+ wxCommandEventHandler( EDA_BASE_FRAME::CopyVersionInfoToClipboard ) );
+
+ Connect( ID_AUTO_SAVE_TIMER, wxEVT_TIMER,
+ wxTimerEventHandler( EDA_BASE_FRAME::onAutoSaveTimer ) );
+
+ // hook wxEVT_CLOSE_WINDOW so we can call SaveSettings(). This function seems
+ // to be called before any other hook for wxCloseEvent, which is necessary.
+ Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( EDA_BASE_FRAME::windowClosing ) );
+}
+
+
+void EDA_BASE_FRAME::windowClosing( wxCloseEvent& event )
+{
+ DIALOG_SHIM* dlg = NULL;
+ wxWindowList list = GetChildren();
+
+ // Quasi modal dialogs create issues (crashes) when closing Kicad.
+ // I am guessing they are delete too late, when deleting main frames.
+ // AFAIK, only these DIALOG_SHIM dialogs create such issues.
+ // The policy is do not allow closing Kicad if a Quasi modal dialog is open.
+ // (Anyway, closing without prompting the user is certainly bad,
+ // because an edit is in preogress)
+ // Therefore, iterate through the child list to find at least
+ // a DIALOG_SHIM opened in quasi modal mode
+ for( wxWindowList::iterator iter = list.begin(); iter != list.end(); ++iter )
+ {
+ if( (dlg = dynamic_cast<DIALOG_SHIM*> (*iter) ) != NULL )
+ {
+ if( dlg->IsQuasiModal() )
+ break;
+ else
+ dlg = NULL;
+ }
+ }
+
+ if( dlg )
+ {
+ // Happens when a quasi modal dialog is currently open.
+ // For example: if the Kicad manager try to close Kicad.
+ wxMessageBox( _(
+ "The program cannot be closed\n"
+ "A quasi-modal dialog window is currently open, please close it first." ) );
+ event.Veto();
+ return;
+ }
+
+ wxConfigBase* cfg = config();
+
+ if( cfg )
+ SaveSettings( cfg ); // virtual, wxFrame specific
+
+ event.Skip(); // we did not "handle" the event, only eavesdropped on it.
+}
+
+
+EDA_BASE_FRAME::~EDA_BASE_FRAME()
+{
+ delete m_autoSaveTimer;
+
+ // This is needed for OSX: avoids further OnDraw processing after this
+ // destructor and before the native window is destroyed
+ this->Freeze();
+}
+
+
+bool EDA_BASE_FRAME::ProcessEvent( wxEvent& aEvent )
+{
+ if( !wxFrame::ProcessEvent( aEvent ) )
+ return false;
+
+ if( IsShown() && m_hasAutoSave &&
+ (m_autoSaveState != isAutoSaveRequired()) && (m_autoSaveInterval > 0) )
+ {
+ if( !m_autoSaveState )
+ {
+ wxLogTrace( traceAutoSave, wxT( "Starting auto save timer." ) );
+ m_autoSaveTimer->Start( m_autoSaveInterval * 1000, wxTIMER_ONE_SHOT );
+ m_autoSaveState = true;
+ }
+ else if( m_autoSaveTimer->IsRunning() )
+ {
+ wxLogTrace( traceAutoSave, wxT( "Stopping auto save timer." ) );
+ m_autoSaveTimer->Stop();
+ m_autoSaveState = false;
+ }
+ }
+
+ return true;
+}
+
+
+bool EDA_BASE_FRAME::Enable( bool enable )
+{
+ // so we can do logging of this state change:
+
+#if defined(DEBUG)
+ const char* type_id = typeid( *this ).name();
+ printf( "wxFrame %-28s: %s\n", type_id, enable ? "enabled" : "disabled" );
+#endif
+
+ return wxFrame::Enable( enable );
+}
+
+
+void EDA_BASE_FRAME::onAutoSaveTimer( wxTimerEvent& aEvent )
+{
+ if( !doAutoSave() )
+ m_autoSaveTimer->Start( m_autoSaveInterval * 1000, wxTIMER_ONE_SHOT );
+}
+
+
+bool EDA_BASE_FRAME::doAutoSave()
+{
+ wxCHECK_MSG( false, true, wxT( "Auto save timer function not overridden. Bad programmer!" ) );
+}
+
+
+void EDA_BASE_FRAME::ReCreateMenuBar()
+{
+}
+
+
+void EDA_BASE_FRAME::ShowChangedLanguage()
+{
+ ReCreateMenuBar();
+ GetMenuBar()->Refresh();
+}
+
+
+void EDA_BASE_FRAME::LoadSettings( wxConfigBase* aCfg )
+{
+ int maximized = 0;
+
+ wxString baseCfgName = ConfigBaseName();
+
+ wxString text = baseCfgName + wxT( "Pos_x" );
+ aCfg->Read( text, &m_FramePos.x );
+
+ text = baseCfgName + wxT( "Pos_y" );
+ aCfg->Read( text, &m_FramePos.y );
+
+ text = baseCfgName + wxT( "Size_x" );
+ aCfg->Read( text, &m_FrameSize.x, 600 );
+
+ text = baseCfgName + wxT( "Size_y" );
+ aCfg->Read( text, &m_FrameSize.y, 400 );
+
+ text = baseCfgName + wxT( "Maximized" );
+ aCfg->Read( text, &maximized, 0 );
+
+ if( m_hasAutoSave )
+ {
+ text = baseCfgName + entryAutoSaveInterval;
+ aCfg->Read( text, &m_autoSaveInterval, DEFAULT_AUTO_SAVE_INTERVAL );
+ }
+
+ // Ensure the window is on a connected display, and is visible.
+ // (at least a corner of the frame must be visible on screen)
+ // Sometimes, if a window was moved on an auxiliary display, and when this
+ // display is no more available, it is not the case.
+ wxRect rect( m_FramePos, m_FrameSize );
+
+ if( wxDisplay::GetFromPoint( rect.GetTopLeft() ) == wxNOT_FOUND &&
+ wxDisplay::GetFromPoint( rect.GetTopRight() ) == wxNOT_FOUND &&
+ wxDisplay::GetFromPoint( rect.GetBottomLeft() ) == wxNOT_FOUND &&
+ wxDisplay::GetFromPoint( rect.GetBottomRight() ) == wxNOT_FOUND )
+ {
+ m_FramePos = wxDefaultPosition;
+ }
+
+ // Ensure Window title bar is visible
+#if defined( __WXMAC__ )
+ // for macOSX, the window must be below system (macOSX) toolbar
+ // Ypos_min = GetMBarHeight(); seems no more exist in new API (subject to change)
+ int Ypos_min = 20;
+#else
+ int Ypos_min = 0;
+#endif
+ if( m_FramePos.y < Ypos_min )
+ m_FramePos.y = Ypos_min;
+
+ if( maximized )
+ Maximize();
+
+ aCfg->Read( baseCfgName + entryPerspective, &m_perspective );
+ aCfg->Read( baseCfgName + entryMruPath, &m_mruPath );
+}
+
+
+void EDA_BASE_FRAME::SaveSettings( wxConfigBase* aCfg )
+{
+ wxString text;
+
+ if( IsIconized() )
+ return;
+
+ wxString baseCfgName = ConfigBaseName();
+
+ m_FrameSize = GetSize();
+ m_FramePos = GetPosition();
+
+ text = baseCfgName + wxT( "Pos_x" );
+ aCfg->Write( text, (long) m_FramePos.x );
+
+ text = baseCfgName + wxT( "Pos_y" );
+ aCfg->Write( text, (long) m_FramePos.y );
+
+ text = baseCfgName + wxT( "Size_x" );
+ aCfg->Write( text, (long) m_FrameSize.x );
+
+ text = baseCfgName + wxT( "Size_y" );
+ aCfg->Write( text, (long) m_FrameSize.y );
+
+ text = baseCfgName + wxT( "Maximized" );
+ aCfg->Write( text, IsMaximized() );
+
+ if( m_hasAutoSave )
+ {
+ text = baseCfgName + entryAutoSaveInterval;
+ aCfg->Write( text, m_autoSaveInterval );
+ }
+
+ // Once this is fully implemented, wxAuiManager will be used to maintain
+ // the persistance of the main frame and all it's managed windows and
+ // all of the legacy frame persistence position code can be removed.
+ wxString perspective = m_auimgr.SavePerspective();
+
+ // printf( "perspective(%s): %s\n",
+ // TO_UTF8( m_FrameName + entryPerspective ), TO_UTF8( perspective ) );
+ aCfg->Write( baseCfgName + entryPerspective, perspective );
+ aCfg->Write( baseCfgName + entryMruPath, m_mruPath );
+}
+
+
+wxConfigBase* EDA_BASE_FRAME::config()
+{
+ // KICAD_MANAGER_FRAME overrides this
+ wxConfigBase* ret = Kiface().KifaceSettings();
+ //wxASSERT( ret );
+ return ret;
+}
+
+
+const SEARCH_STACK& EDA_BASE_FRAME::sys_search()
+{
+ return Kiface().KifaceSearch();
+}
+
+
+wxString EDA_BASE_FRAME::help_name()
+{
+ return Kiface().GetHelpFileName();
+}
+
+
+void EDA_BASE_FRAME::PrintMsg( const wxString& text )
+{
+ SetStatusText( text );
+}
+
+
+void EDA_BASE_FRAME::UpdateFileHistory( const wxString& FullFileName,
+ wxFileHistory* aFileHistory )
+{
+ wxFileHistory* fileHistory = aFileHistory;
+
+ if( !fileHistory )
+ fileHistory = &Kiface().GetFileHistory();
+
+ fileHistory->AddFileToHistory( FullFileName );
+}
+
+
+wxString EDA_BASE_FRAME::GetFileFromHistory( int cmdId, const wxString& type,
+ wxFileHistory* aFileHistory )
+{
+ wxFileHistory* fileHistory = aFileHistory;
+
+ if( !fileHistory )
+ fileHistory = &Kiface().GetFileHistory();
+
+ int baseId = fileHistory->GetBaseId();
+
+ wxASSERT( cmdId >= baseId && cmdId < baseId + (int) fileHistory->GetCount() );
+
+ unsigned i = cmdId - baseId;
+
+ if( i < fileHistory->GetCount() )
+ {
+ wxString fn = fileHistory->GetHistoryFile( i );
+
+ if( wxFileName::FileExists( fn ) )
+ return fn;
+ else
+ {
+ wxString msg = wxString::Format(
+ wxT( "file '%s' was not found." ),
+ GetChars( fn ) );
+
+ wxMessageBox( msg );
+
+ fileHistory->RemoveFileFromHistory( i );
+ }
+ }
+
+ return wxEmptyString;
+}
+
+
+void EDA_BASE_FRAME::GetKicadHelp( wxCommandEvent& event )
+{
+ const SEARCH_STACK& search = sys_search();
+
+ /* We have to get document for beginners,
+ * or the full specific doc
+ * if event id is wxID_INDEX, we want the document for beginners.
+ * else the specific doc file (its name is in Kiface().GetHelpFileName())
+ * The document for beginners is the same for all KiCad utilities
+ */
+ if( event.GetId() == wxID_INDEX )
+ {
+ // List of possible names for Getting Started in KiCad
+ const wxChar* names[2] = {
+ wxT( "getting_started_in_kicad" ),
+ wxT( "Getting_Started_in_KiCad" )
+ };
+
+ wxString helpFile;
+ // Search for "getting_started_in_kicad.html" or "getting_started_in_kicad.pdf"
+ // or "Getting_Started_in_KiCad.html" or "Getting_Started_in_KiCad.pdf"
+ for( unsigned ii = 0; ii < DIM( names ); ii++ )
+ {
+ helpFile = SearchHelpFileFullPath( search, names[ii] );
+
+ if( !helpFile.IsEmpty() )
+ break;
+ }
+
+ if( !helpFile )
+ {
+ wxString msg = wxString::Format( _(
+ "Html or pdf help file \n'%s'\n or\n'%s' could not be found." ), names[0], names[1] );
+ wxMessageBox( msg );
+ }
+ else
+ {
+ GetAssociatedDocument( this, helpFile );
+ }
+
+ return;
+ }
+
+ wxString base_name = help_name();
+ wxString helpFile = SearchHelpFileFullPath( search, base_name );
+
+ if( !helpFile )
+ {
+ wxString msg = wxString::Format( _(
+ "Help file '%s' could not be found." ),
+ GetChars( base_name )
+ );
+ wxMessageBox( msg );
+ }
+ else
+ {
+ GetAssociatedDocument( this, helpFile );
+ }
+}
+
+
+void EDA_BASE_FRAME::OnSelectPreferredEditor( wxCommandEvent& event )
+{
+ // Ask for the current editor and instruct GetEditorName() to not show
+ // unless we pass false as argument.
+ wxString editorname = Pgm().GetEditorName( false );
+
+ // Ask the user to select a new editor, but suggest the current one as the default.
+ editorname = Pgm().AskUserForPreferredEditor( editorname );
+
+ // If we have a new editor name request it to be copied to m_editor_name and saved
+ // to the preferences file. If the user cancelled the dialog then the previous
+ // value will be retained.
+ if( !editorname.IsEmpty() )
+ Pgm().SetEditorName( editorname );
+}
+
+
+void EDA_BASE_FRAME::GetKicadAbout( wxCommandEvent& event )
+{
+ bool ShowAboutDialog(wxWindow * parent);
+ ShowAboutDialog( this );
+}
+
+
+void EDA_BASE_FRAME::AddHelpVersionInfoMenuEntry( wxMenu* aMenu )
+{
+ wxASSERT( aMenu != NULL );
+
+ // Copy version string to clipboard for bug report purposes.
+ AddMenuItem( aMenu, ID_HELP_COPY_VERSION_STRING,
+ _( "Copy &Version Information" ),
+ _( "Copy the version string to clipboard to send with bug reports" ),
+ KiBitmap( copy_button_xpm ) );
+}
+
+
+// This is an enhanced version of the compiler build macro provided by wxWidgets
+// in <wx/build.h>. Please do not make any of these strings translatable. They
+// are used for conveying troubleshooting information to developers.
+
+#if defined(__GXX_ABI_VERSION)
+ #define __ABI_VERSION ",compiler with C++ ABI " __WX_BO_STRINGIZE(__GXX_ABI_VERSION)
+#else
+ #define __ABI_VERSION ",compiler without C++ ABI "
+#endif
+
+#if defined(__INTEL_COMPILER)
+ #define __BO_COMPILER ",Intel C++"
+#elif defined(__GNUG__)
+ #define __BO_COMPILER ",GCC " \
+ __WX_BO_STRINGIZE(__GNUC__) "." \
+ __WX_BO_STRINGIZE(__GNUC_MINOR__) "." \
+ __WX_BO_STRINGIZE(__GNUC_PATCHLEVEL__)
+#elif defined(__VISUALC__)
+ #define __BO_COMPILER ",Visual C++"
+#elif defined(__BORLANDC__)
+ #define __BO_COMPILER ",Borland C++"
+#elif defined(__DIGITALMARS__)
+ #define __BO_COMPILER ",DigitalMars"
+#elif defined(__WATCOMC__)
+ #define __BO_COMPILER ",Watcom C++"
+#else
+ #define __BO_COMPILER ",unknown"
+#endif
+
+
+static inline const char* KICAD_BUILD_OPTIONS_SIGNATURE()
+{
+ return
+#ifdef __WXDEBUG__
+ " (debug,"
+#else
+ " (release,"
+#endif
+ __WX_BO_UNICODE __ABI_VERSION __BO_COMPILER __WX_BO_STL
+ __WX_BO_WXWIN_COMPAT_2_8 ")"
+ ;
+}
+
+
+void EDA_BASE_FRAME::CopyVersionInfoToClipboard( wxCommandEvent& event )
+{
+ if( !wxTheClipboard->Open() )
+ {
+ wxMessageBox( _( "Could not open clipboard to write version information." ),
+ _( "Clipboard Error" ), wxOK | wxICON_EXCLAMATION, this );
+ return;
+ }
+
+ wxString msg_version;
+ wxPlatformInfo info;
+
+ msg_version = wxT( "Application: " ) + Pgm().App().GetAppName() + wxT( "\n" );
+ msg_version << wxT( "Version: " ) << GetBuildVersion()
+#ifdef DEBUG
+ << wxT( " debug" )
+#else
+ << wxT( " release" )
+#endif
+ << wxT( " build\n" );
+ msg_version << wxT( "wxWidgets: Version " ) << FROM_UTF8( wxVERSION_NUM_DOT_STRING )
+ << FROM_UTF8( KICAD_BUILD_OPTIONS_SIGNATURE() ) << wxT( "\n" )
+ << wxT( "Platform: " ) << wxGetOsDescription() << wxT( ", " )
+ << info.GetArchName() << wxT( ", " ) << info.GetEndiannessName()
+ << wxT( ", " ) << info.GetPortIdName() << wxT( "\n" );
+
+ // Just in case someone builds KiCad with the platform native of Boost instead of
+ // the version included with the KiCad source.
+ msg_version << wxT( "Boost version: " ) << ( BOOST_VERSION / 100000 ) << wxT( "." )
+ << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." )
+ << ( BOOST_VERSION % 100 ) << wxT( "\n" );
+
+#ifdef BUILD_GITHUB_PLUGIN
+ // Shows the Curl library version in use:
+ msg_version << "Curl version: " << KICAD_CURL::GetVersion() << "\n";
+#endif
+
+ msg_version << wxT( " USE_WX_GRAPHICS_CONTEXT=" );
+#ifdef USE_WX_GRAPHICS_CONTEXT
+ msg_version << wxT( "ON\n" );
+#else
+ msg_version << wxT( "OFF\n" );
+#endif
+
+ msg_version << wxT( " USE_WX_OVERLAY=" );
+#ifdef USE_WX_OVERLAY
+ msg_version << wxT( "ON\n" );
+#else
+ msg_version << wxT( "OFF\n" );
+#endif
+
+ msg_version << wxT( " KICAD_SCRIPTING=" );
+#ifdef KICAD_SCRIPTING
+ msg_version << wxT( "ON\n" );
+#else
+ msg_version << wxT( "OFF\n" );
+#endif
+
+ msg_version << wxT( " KICAD_SCRIPTING_MODULES=" );
+#ifdef KICAD_SCRIPTING_MODULES
+ msg_version << wxT( "ON\n" );
+#else
+ msg_version << wxT( "OFF\n" );
+#endif
+
+ msg_version << wxT( " KICAD_SCRIPTING_WXPYTHON=" );
+#ifdef KICAD_SCRIPTING_WXPYTHON
+ msg_version << wxT( "ON\n" );
+#else
+ msg_version << wxT( "OFF\n" );
+#endif
+
+ msg_version << wxT( " USE_FP_LIB_TABLE=HARD_CODED_ON\n" );
+
+ msg_version << wxT( " BUILD_GITHUB_PLUGIN=" );
+#ifdef BUILD_GITHUB_PLUGIN
+ msg_version << wxT( "ON\n" );
+#else
+ msg_version << wxT( "OFF\n" );
+#endif
+
+ wxTheClipboard->SetData( new wxTextDataObject( msg_version ) );
+ wxTheClipboard->Close();
+
+ wxMessageBox( msg_version, _( "Version Information (copied to the clipboard)" ) );
+}
+
+
+bool EDA_BASE_FRAME::IsWritable( const wxFileName& aFileName )
+{
+ wxString msg;
+ wxFileName fn = aFileName;
+
+ // Check for absence of a file path with a file name. Unfortunately KiCad
+ // uses paths relative to the current project path without the ./ part which
+ // confuses wxFileName. Making the file name path absolute may be less than
+ // elegant but it solves the problem.
+ if( fn.GetPath().IsEmpty() && fn.HasName() )
+ fn.MakeAbsolute();
+
+ wxCHECK_MSG( fn.IsOk(), false,
+ wxT( "File name object is invalid. Bad programmer!" ) );
+ wxCHECK_MSG( !fn.GetPath().IsEmpty(), false,
+ wxT( "File name object path <" ) + fn.GetFullPath() +
+ wxT( "> is not set. Bad programmer!" ) );
+
+ if( fn.IsDir() && !fn.IsDirWritable() )
+ {
+ msg.Printf( _( "You do not have write permissions to folder <%s>." ),
+ GetChars( fn.GetPath() ) );
+ }
+ else if( !fn.FileExists() && !fn.IsDirWritable() )
+ {
+ msg.Printf( _( "You do not have write permissions to save file <%s> to folder <%s>." ),
+ GetChars( fn.GetFullName() ), GetChars( fn.GetPath() ) );
+ }
+ else if( fn.FileExists() && !fn.IsFileWritable() )
+ {
+ msg.Printf( _( "You do not have write permissions to save file <%s>." ),
+ GetChars( fn.GetFullPath() ) );
+ }
+
+ if( !msg.IsEmpty() )
+ {
+ wxMessageBox( msg );
+ return false;
+ }
+
+ return true;
+}
+
+
+void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName,
+ const wxString& aBackupFileExtension )
+{
+ wxCHECK_RET( aFileName.IsOk(), wxT( "Invalid file name!" ) );
+ wxCHECK_RET( !aBackupFileExtension.IsEmpty(), wxT( "Invalid backup file extension!" ) );
+
+ wxFileName autoSaveFileName = aFileName;
+
+ // Check for auto save file.
+ autoSaveFileName.SetName( AUTOSAVE_PREFIX_FILENAME + aFileName.GetName() );
+
+ wxLogTrace( traceAutoSave,
+ wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() );
+
+ if( !autoSaveFileName.FileExists() )
+ return;
+
+ wxString msg = wxString::Format( _(
+ "Well this is potentially embarrassing!\n"
+ "It appears that the last time you were editing the file\n"
+ "'%s'\n"
+ "it was not saved properly. Do you wish to restore the last saved edits you made?" ),
+ GetChars( aFileName.GetFullName() )
+ );
+
+ int response = wxMessageBox( msg, Pgm().App().GetAppName(), wxYES_NO | wxICON_QUESTION, this );
+
+ // Make a backup of the current file, delete the file, and rename the auto save file to
+ // the file name.
+ if( response == wxYES )
+ {
+ // Get the backup file name.
+ wxFileName backupFileName = aFileName;
+ backupFileName.SetExt( aBackupFileExtension );
+
+ // If an old backup file exists, delete it. If an old copy of the file exists, rename
+ // it to the backup file name
+ if( aFileName.FileExists() )
+ {
+ // Remove the old file backup file.
+ if( backupFileName.FileExists() )
+ wxRemoveFile( backupFileName.GetFullPath() );
+
+ // Rename the old file to the backup file name.
+ if( !wxRenameFile( aFileName.GetFullPath(), backupFileName.GetFullPath() ) )
+ {
+ msg.Printf( _( "Could not create backup file <%s>" ),
+ GetChars( backupFileName.GetFullPath() ) );
+ wxMessageBox( msg );
+ }
+ }
+
+ if( !wxRenameFile( autoSaveFileName.GetFullPath(), aFileName.GetFullPath() ) )
+ {
+ wxMessageBox( _( "The auto save file could not be renamed to the board file name." ),
+ Pgm().App().GetAppName(), wxOK | wxICON_EXCLAMATION, this );
+ }
+ }
+ else
+ {
+ wxLogTrace( traceAutoSave,
+ wxT( "Removing auto save file " ) + autoSaveFileName.GetFullPath() );
+
+ // Remove the auto save file when using the previous file as is.
+ wxRemoveFile( autoSaveFileName.GetFullPath() );
+ }
+}
+
diff --git a/common/bezier_curves.cpp b/common/bezier_curves.cpp
new file mode 100644
index 0000000..9dc67b6
--- /dev/null
+++ b/common/bezier_curves.cpp
@@ -0,0 +1,435 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/************************************/
+/* routines to handle bezier curves */
+/************************************/
+
+#include <fctsys.h>
+#include <bezier_curves.h>
+
+
+#define add_segment(segment) if(s_bezier_Points_Buffer[s_bezier_Points_Buffer.size()-1] != segment) s_bezier_Points_Buffer.push_back(segment);
+
+
+// Local variables:
+static std::vector<wxPoint> s_bezier_Points_Buffer;
+
+static int bezier_recursion_limit = 12;
+static double bezier_approximation_scale = 0.5; // 1
+
+static double bezier_curve_collinearity_epsilon = 1e-30;
+static double bezier_curve_angle_tolerance_epsilon = 0.0001;
+static double bezier_distance_tolerance_square; // derived by approximation_scale
+static double bezier_angle_tolerance = 0.0;
+static double bezier_cusp_limit = 0.0;
+
+// Local functions:
+static void recursive_bezier( int x1, int y1, int x2, int y2, int x3, int y3, int level );
+static void recursive_bezier( int x1,
+ int y1,
+ int x2,
+ int y2,
+ int x3,
+ int y3,
+ int x4,
+ int y4,
+ int level );
+
+/***********************************************************************************/
+
+
+std::vector<wxPoint> Bezier2Poly( wxPoint c1, wxPoint c2, wxPoint c3, wxPoint c4 )
+{
+ return Bezier2Poly( c1.x, c1.y, c2.x, c2.y, c3.x, c3.y, c4.x, c4.y );
+}
+
+
+std::vector<wxPoint> Bezier2Poly( wxPoint c1, wxPoint c2, wxPoint c3 )
+{
+ return Bezier2Poly( c1.x, c1.y, c2.x, c2.y, c3.x, c3.y );
+}
+
+
+inline double calc_sq_distance( int x1, int y1, int x2, int y2 )
+{
+ int dx = x2 - x1;
+ int dy = y2 - y1;
+
+ return (double)dx * dx + (double)dy * dy;
+}
+
+inline double sqrt_len( int dx, int dy )
+{
+ return ((double)dx * dx) + ((double)dy * dy);
+}
+
+
+std::vector<wxPoint> Bezier2Poly( int x1, int y1, int x2, int y2, int x3, int y3 )
+{
+ s_bezier_Points_Buffer.clear();
+
+ bezier_distance_tolerance_square = 0.5 / bezier_approximation_scale;
+ bezier_distance_tolerance_square *= bezier_distance_tolerance_square;
+ s_bezier_Points_Buffer.push_back( wxPoint( x1, y1 ) );
+ recursive_bezier( x1, y1, x2, y2, x3, y3, 0 );
+ s_bezier_Points_Buffer.push_back( wxPoint( x3, y3 ) );
+
+ wxLogDebug( wxT( "Bezier Conversion - End (%d vertex)" ), s_bezier_Points_Buffer.size() );
+ return s_bezier_Points_Buffer;
+}
+
+
+std::vector<wxPoint> Bezier2Poly( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 )
+{
+ s_bezier_Points_Buffer.clear();
+ bezier_distance_tolerance_square = 0.5 / bezier_approximation_scale;
+ bezier_distance_tolerance_square *= bezier_distance_tolerance_square;
+
+ s_bezier_Points_Buffer.push_back( wxPoint( x1, y1 ) );
+ recursive_bezier( x1, y1, x2, y2, x3, y3, x4, y4, 0 );
+ s_bezier_Points_Buffer.push_back( wxPoint( x4, y4 ) );
+ wxLogDebug( wxT( "Bezier Conversion - End (%d vertex)" ), s_bezier_Points_Buffer.size() );
+ return s_bezier_Points_Buffer;
+}
+
+
+void recursive_bezier( int x1, int y1, int x2, int y2, int x3, int y3, int level )
+{
+ if( abs( level ) > bezier_recursion_limit )
+ {
+ return;
+ }
+
+ // Calculate all the mid-points of the line segments
+ //----------------------
+ int x12 = (x1 + x2) / 2;
+ int y12 = (y1 + y2) / 2;
+ int x23 = (x2 + x3) / 2;
+ int y23 = (y2 + y3) / 2;
+ int x123 = (x12 + x23) / 2;
+ int y123 = (y12 + y23) / 2;
+
+ int dx = x3 - x1;
+ int dy = y3 - y1;
+ double d = fabs( ((double) (x2 - x3) * dy) - ((double) (y2 - y3) * dx ) );
+ double da;
+
+ if( d > bezier_curve_collinearity_epsilon )
+ {
+ // Regular case
+ //-----------------
+ if( d * d <= bezier_distance_tolerance_square * (dx * dx + dy * dy) )
+ {
+ // If the curvature doesn't exceed the distance_tolerance value
+ // we tend to finish subdivisions.
+ //----------------------
+ if( bezier_angle_tolerance < bezier_curve_angle_tolerance_epsilon )
+ {
+ add_segment( wxPoint( x123, y123 ) );
+ return;
+ }
+
+ // Angle & Cusp Condition
+ //----------------------
+ da = fabs( atan2( (double) ( y3 - y2 ), (double) ( x3 - x2 ) ) -
+ atan2( (double) ( y2 - y1 ), (double) ( x2 - x1 ) ) );
+ if( da >=M_PI )
+ da = 2 * M_PI - da;
+
+ if( da < bezier_angle_tolerance )
+ {
+ // Finally we can stop the recursion
+ //----------------------
+ add_segment( wxPoint( x123, y123 ) );
+ return;
+ }
+ }
+ }
+ else
+ {
+ // Collinear case
+ //------------------
+ da = sqrt_len(dx, dy);
+ if( da == 0 )
+ {
+ d = calc_sq_distance( x1, y1, x2, y2 );
+ }
+ else
+ {
+ d = ( (double)(x2 - x1) * dx + (double)(y2 - y1) * dy ) / da;
+ if( d > 0 && d < 1 )
+ {
+ // Simple collinear case, 1---2---3
+ // We can leave just two endpoints
+ return;
+ }
+ if( d <= 0 )
+ d = calc_sq_distance( x2, y2, x1, y1 );
+ else if( d >= 1 )
+ d = calc_sq_distance( x2, y2, x3, y3 );
+ else
+ d = calc_sq_distance( x2, y2, x1 + (int) d * dx,
+ y1 + (int) d * dy );
+ }
+ if( d < bezier_distance_tolerance_square )
+ {
+ add_segment( wxPoint( x2, y2 ) );
+ return;
+ }
+ }
+
+ // Continue subdivision
+ //----------------------
+ recursive_bezier( x1, y1, x12, y12, x123, y123, level + 1 );
+ recursive_bezier( x123, y123, x23, y23, x3, y3, -(level + 1) );
+}
+
+
+void recursive_bezier( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int level )
+{
+ if( abs( level ) > bezier_recursion_limit )
+ {
+ return;
+ }
+
+ // Calculate all the mid-points of the line segments
+ //----------------------
+ int x12 = (x1 + x2) / 2;
+ int y12 = (y1 + y2) / 2;
+ int x23 = (x2 + x3) / 2;
+ int y23 = (y2 + y3) / 2;
+ int x34 = (x3 + x4) / 2;
+ int y34 = (y3 + y4) / 2;
+ int x123 = (x12 + x23) / 2;
+ int y123 = (y12 + y23) / 2;
+ int x234 = (x23 + x34) / 2;
+ int y234 = (y23 + y34) / 2;
+ int x1234 = (x123 + x234) / 2;
+ int y1234 = (y123 + y234) / 2;
+
+
+ // Try to approximate the full cubic curve by a single straight line
+ //------------------
+ int dx = x4 - x1;
+ int dy = y4 - y1;
+
+ double d2 = fabs( (double) ( (x2 - x4) * dy - (y2 - y4) * dx ) );
+ double d3 = fabs( (double) ( (x3 - x4) * dy - (y3 - y4) * dx ) );
+ double da1, da2, k;
+
+ switch( (int(d2 > bezier_curve_collinearity_epsilon) << 1) +
+ int(d3 > bezier_curve_collinearity_epsilon) )
+ {
+ case 0:
+
+ // All collinear OR p1==p4
+ //----------------------
+ k = dx * dx + dy * dy;
+ if( k == 0 )
+ {
+ d2 = calc_sq_distance( x1, y1, x2, y2 );
+ d3 = calc_sq_distance( x4, y4, x3, y3 );
+ }
+ else
+ {
+ k = 1 / k;
+ da1 = x2 - x1;
+ da2 = y2 - y1;
+ d2 = k * (da1 * dx + da2 * dy);
+ da1 = x3 - x1;
+ da2 = y3 - y1;
+ d3 = k * (da1 * dx + da2 * dy);
+ if( d2 > 0 && d2 < 1 && d3 > 0 && d3 < 1 )
+ {
+ // Simple collinear case, 1---2---3---4
+ // We can leave just two endpoints
+ return;
+ }
+ if( d2 <= 0 )
+ d2 = calc_sq_distance( x2, y2, x1, y1 );
+ else if( d2 >= 1 )
+ d2 = calc_sq_distance( x2, y2, x4, y4 );
+ else
+ d2 = calc_sq_distance( x2, y2, x1 + (int) d2 * dx,
+ y1 + (int) d2 * dy );
+
+ if( d3 <= 0 )
+ d3 = calc_sq_distance( x3, y3, x1, y1 );
+ else if( d3 >= 1 )
+ d3 = calc_sq_distance( x3, y3, x4, y4 );
+ else
+ d3 = calc_sq_distance( x3, y3, x1 + (int) d3 * dx,
+ y1 + (int) d3 * dy );
+ }
+ if( d2 > d3 )
+ {
+ if( d2 < bezier_distance_tolerance_square )
+ {
+ add_segment( wxPoint( x2, y2 ) );
+ return;
+ }
+ }
+ else
+ {
+ if( d3 < bezier_distance_tolerance_square )
+ {
+ add_segment( wxPoint( x3, y3 ) );
+ return;
+ }
+ }
+ break;
+
+ case 1:
+
+ // p1,p2,p4 are collinear, p3 is significant
+ //----------------------
+ if( d3 * d3 <= bezier_distance_tolerance_square * sqrt_len(dx, dy) )
+ {
+ if( bezier_angle_tolerance < bezier_curve_angle_tolerance_epsilon )
+ {
+ add_segment( wxPoint( x23, y23 ) );
+ return;
+ }
+
+ // Angle Condition
+ //----------------------
+ da1 = fabs( atan2( (double) ( y4 - y3 ), (double) ( x4 - x3 ) ) -
+ atan2( (double) ( y3 - y2 ), (double) ( x3 - x2 ) ) );
+ if( da1 >= M_PI )
+ da1 = 2 * M_PI - da1;
+
+ if( da1 < bezier_angle_tolerance )
+ {
+ add_segment( wxPoint( x2, y2 ) );
+ add_segment( wxPoint( x3, y3 ) );
+ return;
+ }
+
+ if( bezier_cusp_limit != 0.0 )
+ {
+ if( da1 > bezier_cusp_limit )
+ {
+ add_segment( wxPoint( x3, y3 ) );
+ return;
+ }
+ }
+ }
+ break;
+
+ case 2:
+
+ // p1,p3,p4 are collinear, p2 is significant
+ //----------------------
+ if( d2 * d2 <= bezier_distance_tolerance_square * sqrt_len(dx, dy) )
+ {
+ if( bezier_angle_tolerance < bezier_curve_angle_tolerance_epsilon )
+ {
+ add_segment( wxPoint( x23, y23 ) );
+ return;
+ }
+
+ // Angle Condition
+ //----------------------
+ da1 = fabs( atan2( (double) ( y3 - y2 ), (double) ( x3 - x2 ) ) -
+ atan2( (double) ( y2 - y1 ), (double) ( x2 - x1 ) ) );
+ if( da1 >= M_PI )
+ da1 = 2 * M_PI - da1;
+
+ if( da1 < bezier_angle_tolerance )
+ {
+ add_segment( wxPoint( x2, y2 ) );
+ add_segment( wxPoint( x3, y3 ) );
+ return;
+ }
+
+ if( bezier_cusp_limit != 0.0 )
+ {
+ if( da1 > bezier_cusp_limit )
+ {
+ add_segment( wxPoint( x2, y2 ) );
+ return;
+ }
+ }
+ }
+ break;
+
+ case 3:
+
+ // Regular case
+ //-----------------
+ if( (d2 + d3) * (d2 + d3) <= bezier_distance_tolerance_square * sqrt_len(dx, dy) )
+ {
+ // If the curvature doesn't exceed the distance_tolerance value
+ // we tend to finish subdivisions.
+ //----------------------
+ if( bezier_angle_tolerance < bezier_curve_angle_tolerance_epsilon )
+ {
+ add_segment( wxPoint( x23, y23 ) );
+ return;
+ }
+
+ // Angle & Cusp Condition
+ //----------------------
+ k = atan2( (double) ( y3 - y2 ), (double) ( x3 - x2 ) );
+ da1 = fabs( k - atan2( (double) ( y2 - y1 ),
+ (double) ( x2 - x1 ) ) );
+ da2 = fabs( atan2( (double) ( y4 - y3 ),
+ (double) ( x4 - x3 ) ) - k );
+ if( da1 >= M_PI )
+ da1 = 2 * M_PI - da1;
+ if( da2 >= M_PI )
+ da2 = 2 * M_PI - da2;
+
+ if( da1 + da2 < bezier_angle_tolerance )
+ {
+ // Finally we can stop the recursion
+ //----------------------
+ add_segment( wxPoint( x23, y23 ) );
+ return;
+ }
+
+ if( bezier_cusp_limit != 0.0 )
+ {
+ if( da1 > bezier_cusp_limit )
+ {
+ add_segment( wxPoint( x2, y2 ) );
+ return;
+ }
+
+ if( da2 > bezier_cusp_limit )
+ {
+ add_segment( wxPoint( x3, y3 ) );
+ return;
+ }
+ }
+ }
+ break;
+ }
+
+ // Continue subdivision
+ //----------------------
+ recursive_bezier( x1, y1, x12, y12, x123, y123, x1234, y1234, level + 1 );
+ recursive_bezier( x1234, y1234, x234, y234, x34, y34, x4, y4, level + 1 );
+}
diff --git a/common/bin_mod.cpp b/common/bin_mod.cpp
new file mode 100644
index 0000000..af3370d
--- /dev/null
+++ b/common/bin_mod.cpp
@@ -0,0 +1,72 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <bin_mod.h>
+#include <online_help.h>
+#include <common.h>
+
+
+BIN_MOD::BIN_MOD( const char* aName ) :
+ m_name( aName ),
+ m_config( 0 )
+{
+}
+
+
+void BIN_MOD::Init()
+{
+ // do an OS specific wxConfig instantiation, using the bin_mod (EXE/DLL/DSO) name.
+ m_config = GetNewConfig( wxString::FromUTF8( m_name ) );
+
+ m_history.Load( *m_config );
+
+ // Prepare On Line Help. Use only lower case for help file names, in order to
+ // avoid problems with upper/lower case file names under windows and unix.
+ // Help files are now using html format.
+ // Old help files used pdf format.
+ // so when searching a help file, the .html file will be searched,
+ // and if not found, the .pdf file will be searched.
+ m_help_file = wxString::FromUTF8( m_name ); // no ext given. can be .html or .pdf
+}
+
+
+void BIN_MOD::End()
+{
+ if( m_config )
+ {
+ m_history.Save( *m_config );
+
+ // Deleting a wxConfigBase writes its contents to disk if changed.
+ // Might be NULL if called twice, in which case nothing happens.
+ delete m_config;
+ m_config = 0;
+ }
+}
+
+
+BIN_MOD::~BIN_MOD()
+{
+ End();
+}
+
diff --git a/common/bitmap.cpp b/common/bitmap.cpp
new file mode 100644
index 0000000..25cb8ad
--- /dev/null
+++ b/common/bitmap.cpp
@@ -0,0 +1,45 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <wx/image.h>
+#include <wx/bitmap.h>
+#include <wx/mstream.h>
+
+#include <bitmaps.h>
+
+
+wxBitmap KiBitmap( BITMAP_DEF aBitmap )
+{
+ wxMemoryInputStream is( aBitmap->png, aBitmap->byteCount );
+
+ return wxBitmap( wxImage( is, wxBITMAP_TYPE_PNG, -1 ), -1 );
+}
+
+wxBitmap* KiBitmapNew( BITMAP_DEF aBitmap )
+{
+ wxMemoryInputStream is( aBitmap->png, aBitmap->byteCount );
+
+ return new wxBitmap( wxImage( is, wxBITMAP_TYPE_PNG, -1 ), -1 );
+}
diff --git a/common/block_commande.cpp b/common/block_commande.cpp
new file mode 100644
index 0000000..e313eb4
--- /dev/null
+++ b/common/block_commande.cpp
@@ -0,0 +1,233 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file block_commande.cpp
+ * @brief Common routines for managing on block commands.
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <draw_frame.h>
+#include <common.h>
+#include <macros.h>
+#include <base_struct.h>
+#include <class_base_screen.h>
+#include <class_drawpanel.h>
+#include <confirm.h>
+#include <block_commande.h>
+
+
+BLOCK_SELECTOR::BLOCK_SELECTOR() :
+ EDA_RECT()
+{
+ m_state = STATE_NO_BLOCK; // State (enum BLOCK_STATE_T) of block.
+ m_command = BLOCK_IDLE; // Type (enum BLOCK_COMMAND_T) of operation.
+ m_color = BROWN;
+}
+
+
+BLOCK_SELECTOR::~BLOCK_SELECTOR()
+{
+}
+
+
+void BLOCK_SELECTOR::SetMessageBlock( EDA_DRAW_FRAME* frame )
+{
+ wxString msg;
+
+ switch( m_command )
+ {
+ case BLOCK_IDLE:
+ break;
+
+ case BLOCK_MOVE: // Move
+ case BLOCK_PRESELECT_MOVE: // Move with preselection list
+ case BLOCK_MOVE_EXACT:
+ msg = _( "Block Move" );
+ break;
+
+ case BLOCK_DRAG: // Drag
+ msg = _( "Block Drag" );
+ break;
+
+ case BLOCK_DRAG_ITEM: // Drag
+ msg = _( "Drag item" );
+ break;
+
+ case BLOCK_COPY: // Copy
+ msg = _( "Block Copy" );
+ break;
+
+ case BLOCK_DELETE: // Delete
+ msg = _( "Block Delete" );
+ break;
+
+ case BLOCK_SAVE: // Save
+ msg = _( "Block Save" );
+ break;
+
+ case BLOCK_PASTE:
+ msg = _( "Block Paste" );
+ break;
+
+ case BLOCK_ZOOM: // Window Zoom
+ msg = _( "Win Zoom" );
+ break;
+
+ case BLOCK_ROTATE: // Rotate 90 deg
+ msg = _( "Block Rotate" );
+ break;
+
+ case BLOCK_FLIP: // Flip
+ msg = _( "Block Flip" );
+ break;
+
+ case BLOCK_MIRROR_X:
+ case BLOCK_MIRROR_Y: // mirror
+ msg = _( "Block Mirror" );
+ break;
+
+ case BLOCK_ABORT:
+ break;
+
+ default:
+ msg = wxT( "???" );
+ break;
+ }
+
+ frame->DisplayToolMsg( msg );
+}
+
+
+void BLOCK_SELECTOR::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+ GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor )
+{
+ if( !aDC )
+ return;
+
+ int w = GetWidth();
+ int h = GetHeight();
+
+ GRSetDrawMode( aDC, aDrawMode );
+
+ if( w == 0 || h == 0 )
+ GRLine( aPanel->GetClipBox(), aDC, GetX() + aOffset.x, GetY() + aOffset.y,
+ GetRight() + aOffset.x, GetBottom() + aOffset.y, 0, aColor );
+ else
+ GRRect( aPanel->GetClipBox(), aDC, GetX() + aOffset.x, GetY() + aOffset.y,
+ GetRight() + aOffset.x, GetBottom() + aOffset.y, 0, aColor );
+}
+
+
+void BLOCK_SELECTOR::InitData( EDA_DRAW_PANEL* aPanel, const wxPoint& startpos )
+{
+ m_state = STATE_BLOCK_INIT;
+ SetOrigin( startpos );
+ SetSize( wxSize( 0, 0 ) );
+ m_items.ClearItemsList();
+ aPanel->SetMouseCapture( DrawAndSizingBlockOutlines, AbortBlockCurrentCommand );
+}
+
+
+void BLOCK_SELECTOR::ClearItemsList()
+{
+ m_items.ClearItemsList();
+}
+
+
+void BLOCK_SELECTOR::ClearListAndDeleteItems()
+{
+ m_items.ClearListAndDeleteItems();
+}
+
+
+void BLOCK_SELECTOR::PushItem( ITEM_PICKER& aItem )
+{
+ m_items.PushItem( aItem );
+}
+
+
+void BLOCK_SELECTOR::Clear()
+{
+ if( m_command != BLOCK_IDLE )
+ {
+ m_command = BLOCK_IDLE;
+ m_state = STATE_NO_BLOCK;
+ ClearItemsList();
+ }
+}
+
+
+void DrawAndSizingBlockOutlines( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition,
+ bool aErase )
+{
+ BLOCK_SELECTOR* block;
+
+ block = &aPanel->GetScreen()->m_BlockLocate;
+
+ block->SetMoveVector( wxPoint( 0, 0 ) );
+
+ if( aErase && aDC )
+ block->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode, block->GetColor() );
+
+ block->SetLastCursorPosition( aPanel->GetParent()->GetCrossHairPosition() );
+ block->SetEnd( aPanel->GetParent()->GetCrossHairPosition() );
+
+ if( aDC )
+ block->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode, block->GetColor() );
+
+ if( block->GetState() == STATE_BLOCK_INIT )
+ {
+ if( block->GetWidth() || block->GetHeight() )
+ // 2nd point exists: the rectangle is not surface anywhere
+ block->SetState( STATE_BLOCK_END );
+ }
+}
+
+
+void AbortBlockCurrentCommand( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
+{
+ BASE_SCREEN* screen = aPanel->GetScreen();
+
+ if( aPanel->IsMouseCaptured() ) // Erase current drawing on screen
+ {
+ // Clear block outline.
+ aPanel->CallMouseCapture( aDC, wxDefaultPosition, false );
+ aPanel->SetMouseCapture( NULL, NULL );
+ screen->SetCurItem( NULL );
+
+ // Delete the picked wrapper if this is a picked list.
+ if( screen->m_BlockLocate.GetCommand() != BLOCK_PASTE )
+ screen->m_BlockLocate.ClearItemsList();
+ }
+
+ screen->m_BlockLocate.SetState( STATE_NO_BLOCK );
+ screen->m_BlockLocate.SetCommand( BLOCK_ABORT );
+ aPanel->GetParent()->HandleBlockEnd( aDC );
+
+ screen->m_BlockLocate.SetCommand( BLOCK_IDLE );
+ aPanel->GetParent()->DisplayToolMsg( wxEmptyString );
+ aPanel->SetCursor( (wxStockCursor) aPanel->GetCurrentCursor() );
+}
diff --git a/common/build_version.cpp b/common/build_version.cpp
new file mode 100644
index 0000000..bb30861
--- /dev/null
+++ b/common/build_version.cpp
@@ -0,0 +1,45 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2015-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+// Date for KiCad build version
+#include <fctsys.h>
+
+// The include file version.h is always created even if the repo version cannot be
+// determined. In this case KICAD_BUILD_VERSION will default to "no-bzr".
+#include <kicad_build_version.h>
+
+
+/**
+ * Function GetBuildVersion
+ * Return the build version string.
+ */
+wxString GetBuildVersion()
+{
+ wxString msg = wxString::Format(
+ wxT( "%s" ),
+ wxT( KICAD_VERSION_FULL )
+ );
+
+ return msg;
+}
diff --git a/common/class_bitmap_base.cpp b/common/class_bitmap_base.cpp
new file mode 100644
index 0000000..9c118a1
--- /dev/null
+++ b/common/class_bitmap_base.cpp
@@ -0,0 +1,300 @@
+/**
+ * @file class_bitmap_base.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 jean-pierre.charras
+ * Copyright (C) 2011-2016 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "fctsys.h"
+#include "gr_basic.h"
+#include "macros.h"
+#include "class_drawpanel.h"
+#include "trigo.h"
+#include "common.h"
+#include "richio.h"
+#include "plot_common.h"
+
+#include "class_bitmap_base.h"
+
+#include <wx/mstream.h>
+
+
+/**********************/
+/* class BITMAP_BASE */
+/**********************/
+
+BITMAP_BASE::BITMAP_BASE( const wxPoint& pos )
+{
+ m_Scale = 1.0; // 1.0 = original bitmap size
+ m_bitmap = NULL;
+ m_image = NULL;
+ m_ppi = 300; // the bitmap definition. the default is 300PPI
+ m_pixelScaleFactor = 1000.0 / m_ppi; // a value OK for bitmaps using 300 PPI
+ // for Eeschema which uses currently 1000PPI
+}
+
+
+BITMAP_BASE::BITMAP_BASE( const BITMAP_BASE& aSchBitmap )
+{
+ m_Scale = aSchBitmap.m_Scale;
+ m_ppi = aSchBitmap.m_ppi;
+ m_pixelScaleFactor = aSchBitmap.m_pixelScaleFactor;
+ m_image = new wxImage( *aSchBitmap.m_image );
+ m_bitmap = new wxBitmap( *m_image );
+}
+
+
+/**
+ * Function ImportData
+ * Copy aItem image to me and update m_bitmap
+ */
+void BITMAP_BASE::ImportData( BITMAP_BASE* aItem )
+{
+ *m_image = *aItem->m_image;
+ *m_bitmap = *aItem->m_bitmap;
+ m_Scale = aItem->m_Scale;
+ m_ppi = aItem->m_ppi;
+ m_pixelScaleFactor = aItem->m_pixelScaleFactor;
+}
+
+
+bool BITMAP_BASE::ReadImageFile( const wxString& aFullFilename )
+{
+ wxImage* new_image = new wxImage();
+
+ if( !new_image->LoadFile( aFullFilename ) )
+ {
+ delete new_image;
+ return false;
+ }
+
+ delete m_image;
+ m_image = new_image;
+ m_bitmap = new wxBitmap( *m_image );
+
+ return true;
+}
+
+
+bool BITMAP_BASE::SaveData( FILE* aFile ) const
+{
+ if( m_image )
+ {
+ wxMemoryOutputStream stream;
+ m_image->SaveFile( stream, wxBITMAP_TYPE_PNG );
+
+ // Write binary data in hexadecimal form (ASCII)
+ wxStreamBuffer* buffer = stream.GetOutputStreamBuffer();
+ char* begin = (char*) buffer->GetBufferStart();
+
+ for( int ii = 0; begin < buffer->GetBufferEnd(); begin++, ii++ )
+ {
+ if( ii >= 32 )
+ {
+ ii = 0;
+
+ if( fprintf( aFile, "\n" ) == EOF )
+ return false;
+ }
+
+ if( fprintf( aFile, "%2.2X ", *begin & 0xFF ) == EOF )
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+void BITMAP_BASE::SaveData( wxArrayString& aPngStrings ) const
+{
+ if( m_image )
+ {
+ wxMemoryOutputStream stream;
+ m_image->SaveFile( stream, wxBITMAP_TYPE_PNG );
+
+ // Write binary data in hexadecimal form (ASCII)
+ wxStreamBuffer* buffer = stream.GetOutputStreamBuffer();
+ char* begin = (char*) buffer->GetBufferStart();
+ wxString line;
+
+ for( int ii = 0; begin < buffer->GetBufferEnd(); begin++, ii++ )
+ {
+ if( ii >= 32 )
+ {
+ ii = 0;
+ aPngStrings.Add( line );
+ line.Empty();
+ }
+
+ line << wxString::Format( wxT( "%2.2X " ), *begin & 0xFF );
+ }
+
+ // Add last line:
+ if( !line.IsEmpty() )
+ aPngStrings.Add( line );
+ }
+}
+
+
+bool BITMAP_BASE::LoadData( LINE_READER& aLine, wxString& aErrorMsg )
+{
+ wxMemoryOutputStream stream;
+ char* line;
+
+ while( true )
+ {
+ if( !aLine.ReadLine() )
+ {
+ aErrorMsg = wxT("Unexpected end of data");
+ return false;
+ }
+
+ line = aLine.Line();
+
+ if( strnicmp( line, "EndData", 4 ) == 0 )
+ {
+ // all the PNG date is read.
+ // We expect here m_image and m_bitmap are void
+ m_image = new wxImage();
+ wxMemoryInputStream istream( stream );
+ m_image->LoadFile( istream, wxBITMAP_TYPE_PNG );
+ m_bitmap = new wxBitmap( *m_image );
+ break;
+ }
+
+ // Read PNG data, stored in hexadecimal,
+ // each byte = 2 hexadecimal digits and a space between 2 bytes
+ // and put it in memory stream buffer
+ int len = strlen( line );
+ for( ; len > 0; len -= 3, line += 3 )
+ {
+ int value = 0;
+ if( sscanf( line, "%X", &value ) == 1 )
+ stream.PutC( (char) value );
+ else
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+const EDA_RECT BITMAP_BASE::GetBoundingBox() const
+{
+ EDA_RECT rect;
+
+ wxSize size = GetSize();
+
+ rect.Inflate( size.x / 2, size.y / 2 );
+
+ return rect;
+}
+
+
+void BITMAP_BASE::DrawBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPos )
+{
+ if( m_bitmap == NULL )
+ return;
+
+ wxPoint pos = aPos;
+ wxSize size = GetSize();
+
+ // This fixes a bug in OSX that should be fixed in the 3.0.3 version or later.
+ // See: http://trac.wxwidgets.org/ticket/16329 for more information.
+ if( ( size.x == 0 ) || ( size.y == 0 ) )
+ return;
+
+ // To draw the bitmap, pos is the upper left corner position
+ pos.x -= size.x / 2;
+ pos.y -= size.y / 2;
+
+ double scale;
+ int logicalOriginX, logicalOriginY;
+ aDC->GetUserScale( &scale, &scale );
+ aDC->GetLogicalOrigin( &logicalOriginX, &logicalOriginY );
+ aDC->SetUserScale( scale * GetScalingFactor(), scale * GetScalingFactor() );
+ aDC->SetLogicalOrigin( logicalOriginX / GetScalingFactor(),
+ logicalOriginY / GetScalingFactor() );
+ aDC->DrawBitmap( *m_bitmap,
+ KiROUND( pos.x / GetScalingFactor() ),
+ KiROUND( pos.y / GetScalingFactor() ),
+ true );
+ aDC->SetUserScale( scale, scale );
+ aDC->SetLogicalOrigin( logicalOriginX, logicalOriginY );
+}
+
+
+wxSize BITMAP_BASE::GetSize() const
+{
+ wxSize size;
+
+ if( m_bitmap )
+ {
+ size.x = m_bitmap->GetWidth();
+ size.y = m_bitmap->GetHeight();
+
+ size.x = KiROUND( size.x * GetScalingFactor() );
+ size.y = KiROUND( size.y * GetScalingFactor() );
+ }
+
+ return size;
+}
+
+
+void BITMAP_BASE::Mirror( bool aVertically )
+{
+ if( m_image )
+ {
+ *m_image = m_image->Mirror( not aVertically );
+ RebuildBitmap();
+ }
+}
+
+
+void BITMAP_BASE::Rotate( bool aRotateCCW )
+{
+ if( m_image )
+ {
+ *m_image = m_image->Rotate90( aRotateCCW );
+ RebuildBitmap();
+ }
+}
+
+
+void BITMAP_BASE::PlotImage( PLOTTER* aPlotter,
+ const wxPoint& aPos,
+ EDA_COLOR_T aDefaultColor,
+ int aDefaultPensize )
+{
+ if( m_image == NULL )
+ return;
+
+ // These 2 lines are useful only for plotters that cannot plot a bitmap
+ // and plot a rectangle instead of.
+ aPlotter->SetColor( aDefaultColor );
+ aPlotter->SetCurrentLineWidth( aDefaultPensize );
+ aPlotter->PlotImage( *m_image, aPos, GetScalingFactor() );
+}
diff --git a/common/class_colors_design_settings.cpp b/common/class_colors_design_settings.cpp
new file mode 100644
index 0000000..dbdd6ac
--- /dev/null
+++ b/common/class_colors_design_settings.cpp
@@ -0,0 +1,156 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_colors_design_settings.cpp
+ * @brief Handle colors used to draw all items or layers.
+ */
+#include <fctsys.h>
+#include <colors.h>
+#include <macros.h>
+
+#include <class_colors_design_settings.h>
+
+/* Class for handle list of color settings for designs
+ * in Eeschema, Pcbnew and GerbView
+ */
+
+/* Initial colors values: optimized for Pcbnew 64 layers.
+ * The table is not actually used by Eeschema.
+ * these values are superseded by config reading
+ */
+static const EDA_COLOR_T default_layer_color[] = {
+ RED, YELLOW, LIGHTMAGENTA, LIGHTRED,
+ CYAN, GREEN, BLUE, DARKGRAY,
+ MAGENTA, LIGHTGRAY, MAGENTA, RED,
+ BROWN, LIGHTGRAY, BLUE, GREEN,
+
+ RED, YELLOW, LIGHTMAGENTA, LIGHTRED,
+ CYAN, GREEN, BLUE, DARKGRAY,
+ MAGENTA, LIGHTGRAY, MAGENTA, RED,
+ BROWN, LIGHTGRAY, BLUE, GREEN,
+
+ BLUE, MAGENTA,
+ LIGHTCYAN, RED,
+ MAGENTA, CYAN,
+ BROWN, MAGENTA,
+ LIGHTGRAY,
+ BLUE,
+ GREEN, YELLOW,
+ YELLOW,
+ LIGHTMAGENTA,
+ YELLOW,
+ DARKGRAY
+};
+
+
+static const EDA_COLOR_T default_items_color[] = {
+ LIGHTGRAY, // unused
+ CYAN, // VIA_MICROVIA_VISIBLE
+ BROWN, // VIA_BBLIND_VISIBLE
+ LIGHTGRAY, // VIA_THROUGH_VISIBLE
+ YELLOW, // NON_PLATED_VISIBLE
+ LIGHTGRAY, // MOD_TEXT_FR_VISIBLE
+ BLUE, // MOD_TEXT_BK_VISIBLE
+ DARKGRAY, // MOD_TEXT_INVISIBLE
+ BLUE, // ANCHOR_VISIBLE
+ RED, // PAD_FR_VISIBLE
+ GREEN, // PAD_BK_VISIBLE
+ LIGHTGRAY, // RATSNEST_VISIBLE
+ DARKGRAY, // GRID_VISIBLE
+ LIGHTRED, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY,
+ LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY,
+ LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY,
+ LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY,
+ LIGHTGRAY, LIGHTGRAY, LIGHTGRAY
+};
+
+
+COLORS_DESIGN_SETTINGS::COLORS_DESIGN_SETTINGS()
+{
+ for( unsigned src = 0, dst = 0; dst < DIM(m_LayersColors); ++dst )
+ {
+ m_LayersColors[dst] = default_layer_color[src++];
+
+ if( src >= DIM( default_layer_color ) )
+ src = 0; // wrap the source.
+ }
+
+ for( unsigned src = 0, dst = 0; dst < DIM(m_ItemsColors); ++dst )
+ {
+ m_ItemsColors[dst] = default_items_color[src++];
+
+ if( src >= DIM( default_items_color ) )
+ src = 0;
+ }
+}
+
+
+EDA_COLOR_T COLORS_DESIGN_SETTINGS::GetLayerColor( LAYER_NUM aLayer ) const
+{
+ if( (unsigned) aLayer < DIM(m_LayersColors) )
+ {
+ return m_LayersColors[aLayer];
+ }
+ return UNSPECIFIED_COLOR;
+}
+
+
+void COLORS_DESIGN_SETTINGS::SetLayerColor( LAYER_NUM aLayer, EDA_COLOR_T aColor )
+{
+ if( (unsigned) aLayer < DIM(m_LayersColors) )
+ {
+ m_LayersColors[aLayer] = aColor;
+ }
+}
+
+
+EDA_COLOR_T COLORS_DESIGN_SETTINGS::GetItemColor( int aItemIdx ) const
+{
+ if( (unsigned) aItemIdx < DIM( m_ItemsColors ) )
+ {
+ return m_ItemsColors[aItemIdx];
+ }
+
+ return UNSPECIFIED_COLOR;
+}
+
+
+void COLORS_DESIGN_SETTINGS::SetItemColor( int aItemIdx, EDA_COLOR_T aColor )
+{
+ if( (unsigned) aItemIdx < DIM(m_ItemsColors) )
+ {
+ m_ItemsColors[aItemIdx] = aColor;
+ }
+}
+
+
+void COLORS_DESIGN_SETTINGS::SetAllColorsAs( EDA_COLOR_T aColor )
+{
+ for( unsigned ii = 0; ii < DIM(m_LayersColors); ii++ )
+ m_LayersColors[ii] = aColor;
+
+ for( unsigned ii = 0; ii < DIM(m_ItemsColors); ii++ )
+ m_ItemsColors[ii] = aColor;
+}
diff --git a/common/class_layer_box_selector.cpp b/common/class_layer_box_selector.cpp
new file mode 100644
index 0000000..ad2df99
--- /dev/null
+++ b/common/class_layer_box_selector.cpp
@@ -0,0 +1,149 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <common.h>
+#include <colors_selection.h>
+#include <layers_id_colors_and_visibility.h>
+#include <bitmaps.h>
+#include <colors.h>
+
+#include <wx/wx.h>
+#include <wx/ownerdrw.h>
+#include <wx/menuitem.h>
+
+#include <class_layer_box_selector.h>
+
+
+LAYER_SELECTOR::LAYER_SELECTOR()
+{
+ m_layerhotkeys = true;
+ m_hotkeys = NULL;
+}
+
+
+bool LAYER_SELECTOR::SetLayersHotkeys( bool value )
+{
+ m_layerhotkeys = value;
+ return m_layerhotkeys;
+}
+
+
+void LAYER_SELECTOR::SetBitmapLayer( wxBitmap& aLayerbmp, LAYER_NUM aLayer )
+{
+ wxMemoryDC bmpDC;
+ wxBrush brush;
+
+ // Prepare Bitmap
+ bmpDC.SelectObject( aLayerbmp );
+ brush.SetColour( MakeColour( GetLayerColor( aLayer ) ) );
+ brush.SetStyle( wxBRUSHSTYLE_SOLID );
+
+ bmpDC.SetBrush( brush );
+ bmpDC.DrawRectangle( 0, 0, aLayerbmp.GetWidth(), aLayerbmp.GetHeight() );
+ bmpDC.SetBrush( *wxTRANSPARENT_BRUSH );
+ bmpDC.SetPen( *wxBLACK_PEN );
+ bmpDC.DrawRectangle( 0, 0, aLayerbmp.GetWidth(), aLayerbmp.GetHeight() );
+}
+
+/* class to display a layer list in a wxBitmapComboBox.
+ */
+LAYER_BOX_SELECTOR::LAYER_BOX_SELECTOR( wxWindow* parent, wxWindowID id,
+ const wxPoint& pos, const wxSize& size,
+ int n, const wxString choices[] ) :
+ wxBitmapComboBox( parent, id, wxEmptyString, pos, size, n, choices, wxCB_READONLY ),
+ LAYER_SELECTOR()
+{
+ m_hotkeys = NULL;
+
+ if( choices != NULL )
+ ResyncBitmapOnly();
+}
+
+
+LAYER_BOX_SELECTOR::LAYER_BOX_SELECTOR( wxWindow* parent, wxWindowID id,
+ const wxPoint& pos, const wxSize& size,
+ const wxArrayString& choices ) :
+ wxBitmapComboBox( parent, id, wxEmptyString, pos, size, choices, wxCB_READONLY ),
+ LAYER_SELECTOR()
+{
+ m_hotkeys = NULL;
+
+ if( !choices.IsEmpty() )
+ ResyncBitmapOnly();
+}
+
+
+// Get Current Item #
+int LAYER_BOX_SELECTOR::GetChoice()
+{
+ return GetSelection();
+}
+
+
+// Get Current Layer
+LAYER_NUM LAYER_BOX_SELECTOR::GetLayerSelection() const
+{
+ if( GetSelection() < 0 )
+ return UNDEFINED_LAYER;
+
+ return (LAYER_NUM)(intptr_t) GetClientData( GetSelection() );
+}
+
+
+// Set Layer #
+int LAYER_BOX_SELECTOR::SetLayerSelection( LAYER_NUM layer )
+{
+ int elements = GetCount();
+
+ for( int i = 0; i < elements; i++ )
+ {
+ if( GetClientData( i ) == (void*)(intptr_t) layer )
+ {
+ if( GetSelection() != i ) // Element (i) is not selected
+ {
+ SetSelection( i );
+ return i;
+ }
+ else
+ return i; //If element already selected; do nothing
+ }
+ }
+
+ // Not Found
+ SetSelection( -1 );
+ return -1;
+}
+
+
+void LAYER_BOX_SELECTOR::ResyncBitmapOnly()
+{
+ int elements = GetCount();
+
+ for( LAYER_NUM i = 0; i < elements; ++i )
+ {
+ wxBitmap layerbmp( 14, 14 );
+ SetBitmapLayer( layerbmp, i );
+ }
+}
+
diff --git a/common/class_marker_base.cpp b/common/class_marker_base.cpp
new file mode 100644
index 0000000..91e05a2
--- /dev/null
+++ b/common/class_marker_base.cpp
@@ -0,0 +1,208 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_marker_base.cpp
+ * @brief Implementation of MARKER_BASE class.
+ * Markers are used to show something (usually a drc/erc problem).
+ * Markers in Pcbnew and Eeschema are derived from this base class.
+ */
+
+/* file class_marker_base.cpp
+ */
+
+#include "fctsys.h"
+#include "gr_basic.h"
+#include "class_base_screen.h"
+#include "common.h"
+#include "macros.h"
+#include "class_drawpanel.h"
+#include "class_marker_base.h"
+#include "dialog_display_info_HTML_base.h"
+
+
+// Default marquer shape:
+const int M_SHAPE_SCALE = 6; // default scaling factor for MarkerShapeCorners coordinates
+/* The graphic shape of markers is a polygon.
+ * MarkerShapeCorners contains the coordinates of corners of the polygonal default shape
+ * actual coordinates are these values * .m_ScalingFactor
+*/
+static const wxPoint MarkerShapeCorners[] =
+{
+ wxPoint( 0, 0 ),
+ wxPoint( 8, 1 ),
+ wxPoint( 4, 3 ),
+ wxPoint( 13, 8 ),
+ wxPoint( 9, 9 ),
+ wxPoint( 8, 13 ),
+ wxPoint( 3, 4 ),
+ wxPoint( 1, 8 )
+};
+const unsigned CORNERS_COUNT = DIM( MarkerShapeCorners );
+
+/*******************/
+/* Classe MARKER_BASE */
+/*******************/
+
+void MARKER_BASE::init()
+{
+ m_MarkerType = MARKER_UNSPEC;
+ m_ErrorLevel = MARKER_SEVERITY_UNSPEC;
+ m_Color = RED;
+ wxPoint start = MarkerShapeCorners[0];
+ wxPoint end = MarkerShapeCorners[0];
+
+ for( unsigned ii = 0; ii < CORNERS_COUNT; ii++ )
+ {
+ wxPoint corner = MarkerShapeCorners[ii];
+ start.x = std::min( start.x, corner.x);
+ start.y = std::min( start.y, corner.y);
+ end.x = std::max( end.x, corner.x);
+ end.y = std::max( end.y, corner.y);
+ }
+
+ m_ShapeBoundingBox.SetOrigin(start);
+ m_ShapeBoundingBox.SetEnd(end);
+}
+
+
+MARKER_BASE::MARKER_BASE( const MARKER_BASE& aMarker )
+{
+ m_Pos = aMarker.m_Pos;
+ m_ErrorLevel = aMarker.m_ErrorLevel;
+ m_MarkerType = aMarker.m_MarkerType;
+ m_Color = aMarker.m_Color;
+ m_ShapeBoundingBox = aMarker.m_ShapeBoundingBox;
+ m_ScalingFactor = aMarker.m_ScalingFactor;
+}
+
+
+MARKER_BASE::MARKER_BASE()
+{
+ m_ScalingFactor = M_SHAPE_SCALE;
+ init();
+}
+
+
+MARKER_BASE::MARKER_BASE( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos,
+ const wxString& bText, const wxPoint& bPos )
+{
+ m_ScalingFactor = M_SHAPE_SCALE;
+ init();
+
+ SetData( aErrorCode, aMarkerPos,
+ aText, aPos,
+ bText, bPos );
+}
+
+
+MARKER_BASE::MARKER_BASE( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos )
+{
+ m_ScalingFactor = M_SHAPE_SCALE;
+ init();
+ SetData( aErrorCode, aMarkerPos, aText, aPos );
+}
+
+
+MARKER_BASE::~MARKER_BASE()
+{
+}
+
+
+void MARKER_BASE::SetData( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos,
+ const wxString& bText, const wxPoint& bPos )
+{
+ m_Pos = aMarkerPos;
+ m_drc.SetData( aErrorCode,
+ aText, bText, aPos, bPos );
+}
+
+
+void MARKER_BASE::SetData( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos )
+{
+ m_Pos = aMarkerPos;
+ m_drc.SetData( aErrorCode,
+ aText, aPos );
+}
+
+
+bool MARKER_BASE::HitTestMarker( const wxPoint& refPos ) const
+{
+ wxPoint rel_pos = refPos - m_Pos;
+ rel_pos.x /= m_ScalingFactor;
+ rel_pos.y /= m_ScalingFactor;
+
+ return m_ShapeBoundingBox.Contains( rel_pos );
+}
+
+
+EDA_RECT MARKER_BASE::GetBoundingBoxMarker() const
+{
+ wxSize realsize = m_ShapeBoundingBox.GetSize();
+ wxPoint realposition = m_ShapeBoundingBox.GetPosition();
+ realsize.x *= m_ScalingFactor;
+ realsize.y *= m_ScalingFactor;
+ realposition.x *= m_ScalingFactor;
+ realposition.y *= m_ScalingFactor;
+ realposition += m_Pos;
+ return EDA_RECT( m_Pos, realsize );
+}
+
+void MARKER_BASE::DrawMarker( EDA_DRAW_PANEL* aPanel, wxDC* aDC, GR_DRAWMODE aDrawMode,
+ const wxPoint& aOffset )
+{
+ wxPoint corners[CORNERS_COUNT];
+
+ GRSetDrawMode( aDC, aDrawMode );
+
+ for( unsigned ii = 0; ii < CORNERS_COUNT; ii++ )
+ {
+ corners[ii] = MarkerShapeCorners[ii];
+ corners[ii].x *= m_ScalingFactor;
+ corners[ii].y *= m_ScalingFactor;
+ corners[ii] += m_Pos + aOffset;
+ }
+
+ GRClosedPoly( aPanel->GetClipBox(), aDC, CORNERS_COUNT, corners,
+ true, // = Filled
+ 0, // outline width
+ m_Color, // outline color
+ m_Color // fill collor
+ );
+}
+
+
+void MARKER_BASE::DisplayMarkerInfo( EDA_DRAW_FRAME* aFrame )
+{
+ wxString msg = m_drc.ShowHtml();
+ DIALOG_DISPLAY_HTML_TEXT_BASE infodisplay( (wxWindow*)aFrame, wxID_ANY, _( "Marker Info" ),
+ wxGetMousePosition(), wxSize( 550, 140 ) );
+
+ infodisplay.m_htmlWindow->SetPage( msg );
+ infodisplay.ShowModal();
+}
diff --git a/common/class_page_info.cpp b/common/class_page_info.cpp
new file mode 100644
index 0000000..2cf94d4
--- /dev/null
+++ b/common/class_page_info.cpp
@@ -0,0 +1,283 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <common.h>
+#include <class_page_info.h>
+#include <macros.h>
+
+
+// late arriving wxPAPER_A0, wxPAPER_A1
+#if wxABI_VERSION >= 20999
+ #define PAPER_A0 wxPAPER_A0
+ #define PAPER_A1 wxPAPER_A1
+#else
+ #define PAPER_A0 wxPAPER_A2
+ #define PAPER_A1 wxPAPER_A2
+#endif
+
+
+// Standard paper sizes nicknames.
+const wxChar PAGE_INFO::A4[] = wxT( "A4" );
+const wxChar PAGE_INFO::A3[] = wxT( "A3" );
+const wxChar PAGE_INFO::A2[] = wxT( "A2" );
+const wxChar PAGE_INFO::A1[] = wxT( "A1" );
+const wxChar PAGE_INFO::A0[] = wxT( "A0" );
+const wxChar PAGE_INFO::A[] = wxT( "A" );
+const wxChar PAGE_INFO::B[] = wxT( "B" ) ;
+const wxChar PAGE_INFO::C[] = wxT( "C" );
+const wxChar PAGE_INFO::D[] = wxT( "D" );
+const wxChar PAGE_INFO::E[] = wxT( "E" );
+
+const wxChar PAGE_INFO::GERBER[] = wxT( "GERBER" );
+const wxChar PAGE_INFO::USLetter[] = wxT( "USLetter" );
+const wxChar PAGE_INFO::USLegal[] = wxT( "USLegal" );
+const wxChar PAGE_INFO::USLedger[] = wxT( "USLedger" );
+const wxChar PAGE_INFO::Custom[] = wxT( "User" );
+
+
+// Standard page sizes in mils, all constants
+// see: https://lists.launchpad.net/kicad-developers/msg07389.html
+// also see: wx/defs.h
+
+// local readability macro for millimeter wxSize
+#define MMsize( x, y ) wxSize( Mm2mils( x ), Mm2mils( y ) )
+
+// All MUST be defined as landscape.
+const PAGE_INFO PAGE_INFO::pageA4( MMsize( 297, 210 ), wxT( "A4" ), wxPAPER_A4 );
+const PAGE_INFO PAGE_INFO::pageA3( MMsize( 420, 297 ), wxT( "A3" ), wxPAPER_A3 );
+const PAGE_INFO PAGE_INFO::pageA2( MMsize( 594, 420 ), wxT( "A2" ), wxPAPER_A2 );
+const PAGE_INFO PAGE_INFO::pageA1( MMsize( 841, 594 ), wxT( "A1" ), PAPER_A1 );
+const PAGE_INFO PAGE_INFO::pageA0( MMsize( 1189, 841 ), wxT( "A0" ), PAPER_A0 );
+
+const PAGE_INFO PAGE_INFO::pageA( wxSize( 11000, 8500 ), wxT( "A" ), wxPAPER_LETTER );
+const PAGE_INFO PAGE_INFO::pageB( wxSize( 17000, 11000 ), wxT( "B" ), wxPAPER_TABLOID );
+const PAGE_INFO PAGE_INFO::pageC( wxSize( 22000, 17000 ), wxT( "C" ), wxPAPER_CSHEET );
+const PAGE_INFO PAGE_INFO::pageD( wxSize( 34000, 22000 ), wxT( "D" ), wxPAPER_DSHEET );
+const PAGE_INFO PAGE_INFO::pageE( wxSize( 44000, 34000 ), wxT( "E" ), wxPAPER_ESHEET );
+
+const PAGE_INFO PAGE_INFO::pageGERBER( wxSize( 32000, 32000 ), wxT( "GERBER" ), wxPAPER_NONE );
+const PAGE_INFO PAGE_INFO::pageUser( wxSize( 17000, 11000 ), Custom, wxPAPER_NONE );
+
+// US paper sizes
+const PAGE_INFO PAGE_INFO::pageUSLetter( wxSize( 11000, 8500 ), wxT( "USLetter" ), wxPAPER_LETTER );
+const PAGE_INFO PAGE_INFO::pageUSLegal( wxSize( 14000, 8500 ), wxT( "USLegal" ), wxPAPER_LEGAL );
+const PAGE_INFO PAGE_INFO::pageUSLedger( wxSize( 17000, 11000 ), wxT( "USLedger" ), wxPAPER_TABLOID );
+
+// Custom paper size for next instantiation of type "User"
+int PAGE_INFO::s_user_width = 17000;
+int PAGE_INFO::s_user_height = 11000;
+
+
+inline void PAGE_INFO::updatePortrait()
+{
+ // update m_portrait based on orientation of m_size.x and m_size.y
+ m_portrait = ( m_size.y > m_size.x );
+}
+
+
+PAGE_INFO::PAGE_INFO( const wxSize& aSizeMils, const wxString& aType, wxPaperSize aPaperId ) :
+ m_type( aType ), m_size( aSizeMils ), m_paper_id( aPaperId )
+{
+ updatePortrait();
+
+ // This constructor is protected, and only used by const PAGE_INFO's known
+ // only to class implementation, so no further changes to "this" object are
+ // expected.
+}
+
+
+PAGE_INFO::PAGE_INFO( const wxString& aType, bool IsPortrait )
+{
+ SetType( aType, IsPortrait );
+}
+
+
+bool PAGE_INFO::SetType( const wxString& aType, bool IsPortrait )
+{
+ bool rc = true;
+
+ // all are landscape initially
+ if( aType == pageA4.GetType() )
+ *this = pageA4;
+ else if( aType == pageA3.GetType() )
+ *this = pageA3;
+ else if( aType == pageA2.GetType() )
+ *this = pageA2;
+ else if( aType == pageA1.GetType() )
+ *this = pageA1;
+ else if( aType == pageA0.GetType() )
+ *this = pageA0;
+ else if( aType == pageA.GetType() )
+ *this = pageA;
+ else if( aType == pageB.GetType() )
+ *this = pageB;
+ else if( aType == pageC.GetType() )
+ *this = pageC;
+ else if( aType == pageD.GetType() )
+ *this = pageD;
+ else if( aType == pageE.GetType() )
+ *this = pageE;
+ else if( aType == pageGERBER.GetType() )
+ *this = pageGERBER;
+ else if( aType == pageUSLetter.GetType() )
+ *this = pageUSLetter;
+ else if( aType == pageUSLegal.GetType() )
+ *this = pageUSLegal;
+ else if( aType == pageUSLedger.GetType() )
+ *this = pageUSLedger;
+ else if( aType == pageUser.GetType() )
+ {
+ // pageUser is const, and may not and does not hold the custom size,
+ // so customize *this later
+ *this = pageUser;
+
+ // customize:
+ m_size.x = s_user_width;
+ m_size.y = s_user_height;
+
+ updatePortrait();
+ }
+ else
+ rc = false;
+
+ if( IsPortrait )
+ {
+ // all private PAGE_INFOs are landscape, must swap x and y
+ m_size = wxSize( m_size.y, m_size.x );
+ updatePortrait();
+ }
+
+ return rc;
+}
+
+
+bool PAGE_INFO::IsCustom() const
+{
+ return m_type == Custom;
+}
+
+
+void PAGE_INFO::SetPortrait( bool isPortrait )
+{
+ if( m_portrait != isPortrait )
+ {
+ // swap x and y in m_size
+ m_size = wxSize( m_size.y, m_size.x );
+
+ m_portrait = isPortrait;
+
+ // margins are not touched, do that if you want
+ }
+}
+
+
+static int clampWidth( int aWidthInMils )
+{
+/* was giving EESCHEMA single component SVG plotter grief
+ However a minimal test is made to avoid values that crashes Kicad
+ if( aWidthInMils < 4000 ) // 4" is about a baseball card
+ aWidthInMils = 4000;
+ else if( aWidthInMils > 44000 ) //44" is plotter size
+ aWidthInMils = 44000;
+*/
+ if( aWidthInMils < 10 )
+ aWidthInMils = 10;
+ return aWidthInMils;
+}
+
+
+static int clampHeight( int aHeightInMils )
+{
+/* was giving EESCHEMA single component SVG plotter grief
+ clamping is best done at the UI, i.e. dialog, levels
+ However a minimal test is made to avoid values that crashes Kicad
+ if( aHeightInMils < 4000 )
+ aHeightInMils = 4000;
+ else if( aHeightInMils > 44000 )
+ aHeightInMils = 44000;
+*/
+ if( aHeightInMils < 10 )
+ aHeightInMils = 10;
+ return aHeightInMils;
+}
+
+
+void PAGE_INFO::SetCustomWidthMils( int aWidthInMils )
+{
+ s_user_width = clampWidth( aWidthInMils );
+}
+
+
+void PAGE_INFO::SetCustomHeightMils( int aHeightInMils )
+{
+ s_user_height = clampHeight( aHeightInMils );
+}
+
+
+void PAGE_INFO::SetWidthMils( int aWidthInMils )
+{
+ if( m_size.x != aWidthInMils )
+ {
+ m_size.x = clampWidth( aWidthInMils );
+
+ m_type = Custom;
+ m_paper_id = wxPAPER_NONE;
+
+ updatePortrait();
+ }
+}
+
+
+void PAGE_INFO::SetHeightMils( int aHeightInMils )
+{
+ if( m_size.y != aHeightInMils )
+ {
+ m_size.y = clampHeight( aHeightInMils );
+
+ m_type = Custom;
+ m_paper_id = wxPAPER_NONE;
+
+ updatePortrait();
+ }
+}
+
+
+void PAGE_INFO::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR )
+{
+ aFormatter->Print( aNestLevel, "(page %s", aFormatter->Quotew( GetType() ).c_str() );
+
+ // The page dimensions are only required for user defined page sizes.
+ // Internally, the page size is in mils
+ if( GetType() == PAGE_INFO::Custom )
+ aFormatter->Print( 0, " %g %g",
+ GetWidthMils() * 25.4 / 1000.0,
+ GetHeightMils() * 25.4 / 1000.0 );
+
+ if( !IsCustom() && IsPortrait() )
+ aFormatter->Print( 0, " portrait" );
+
+ aFormatter->Print( 0, ")\n" );
+}
diff --git a/common/class_plotter.cpp b/common/class_plotter.cpp
new file mode 100644
index 0000000..9c1e9c0
--- /dev/null
+++ b/common/class_plotter.cpp
@@ -0,0 +1,519 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_plotter.cpp
+ * @brief KiCad: Base of all the plot routines
+ * the class PLOTTER handle basic functions to plot schematic and boards
+ * with different plot formats.
+ *
+ * There are currently engines for:
+ * HPGL
+ * POSTSCRIPT
+ * GERBER
+ * DXF
+ * an SVG 'plot' is also provided along with the 'print' function by wx, but
+ * is not handled here.
+ */
+
+#include <fctsys.h>
+
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <common.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <class_base_screen.h>
+#include <drawtxt.h>
+
+PLOTTER::PLOTTER( )
+{
+ plotScale = 1;
+ defaultPenWidth = 0;
+ currentPenWidth = -1; // To-be-set marker
+ penState = 'Z'; // End-of-path idle
+ m_plotMirror = false; // Plot mirror option flag
+ m_mirrorIsHorizontal = true;
+ m_yaxisReversed = false;
+ outputFile = 0;
+ colorMode = false; // Starts as a BW plot
+ negativeMode = false;
+ // Temporary init to avoid not initialized vars, will be set later
+ m_IUsPerDecimil = 1; // will be set later to the actual value
+ iuPerDeviceUnit = 1; // will be set later to the actual value
+ m_dashMarkLength_mm = 0.5; // Dashed line parameter in mm: segment
+ m_dashGapLength_mm = 0.25; // Dashed line parameter in mm: gap
+}
+
+PLOTTER::~PLOTTER()
+{
+ // Emergency cleanup, but closing the file is
+ // usually made in EndPlot().
+ if( outputFile )
+ fclose( outputFile );
+}
+
+
+bool PLOTTER::OpenFile( const wxString& aFullFilename )
+{
+ filename = aFullFilename;
+
+ wxASSERT( !outputFile );
+
+ // Open the file in text mode (not suitable for all plotters
+ // but only for most of them
+ outputFile = wxFopen( filename, wxT( "wt" ) );
+
+ if( outputFile == NULL )
+ return false ;
+
+ return true;
+}
+
+
+DPOINT PLOTTER::userToDeviceCoordinates( const wxPoint& aCoordinate )
+{
+ wxPoint pos = aCoordinate - plotOffset;
+
+ double x = pos.x * plotScale;
+ double y = ( paperSize.y - pos.y * plotScale );
+
+ if( m_plotMirror )
+ {
+ if( m_mirrorIsHorizontal )
+ x = ( paperSize.x - pos.x * plotScale );
+ else
+ y = pos.y * plotScale;
+ }
+
+ if( m_yaxisReversed )
+ y = paperSize.y - y;
+
+ x *= iuPerDeviceUnit;
+ y *= iuPerDeviceUnit;
+
+ return DPOINT( x, y );
+}
+
+
+DPOINT PLOTTER::userToDeviceSize( const wxSize& size )
+{
+ return DPOINT( size.x * plotScale * iuPerDeviceUnit,
+ size.y * plotScale * iuPerDeviceUnit );
+}
+
+
+double PLOTTER::userToDeviceSize( double size ) const
+{
+ return size * plotScale * iuPerDeviceUnit;
+}
+
+
+double PLOTTER::GetDashMarkLenIU() const
+{
+ double mark = userToDeviceSize( m_dashMarkLength_mm*10000/25.4*m_IUsPerDecimil - GetCurrentLineWidth() );
+ return ( mark < 0.0 ) ? 0.0 : mark;
+}
+
+
+double PLOTTER::GetDashGapLenIU() const
+{
+ return userToDeviceSize( m_dashGapLength_mm*10000/25.4*m_IUsPerDecimil + GetCurrentLineWidth() );
+}
+
+void PLOTTER::Arc( const wxPoint& centre, double StAngle, double EndAngle, int radius,
+ FILL_T fill, int width )
+{
+ wxPoint start, end;
+ const int delta = 50; // increment (in 0.1 degrees) to draw circles
+
+ if( StAngle > EndAngle )
+ std::swap( StAngle, EndAngle );
+
+ SetCurrentLineWidth( width );
+ /* Please NOTE the different sign due to Y-axis flip */
+ start.x = centre.x + KiROUND( cosdecideg( radius, -StAngle ) );
+ start.y = centre.y + KiROUND( sindecideg( radius, -StAngle ) );
+ MoveTo( start );
+ for( int ii = StAngle + delta; ii < EndAngle; ii += delta )
+ {
+ end.x = centre.x + KiROUND( cosdecideg( radius, -ii ) );
+ end.y = centre.y + KiROUND( sindecideg( radius, -ii ) );
+ LineTo( end );
+ }
+
+ end.x = centre.x + KiROUND( cosdecideg( radius, -EndAngle ) );
+ end.y = centre.y + KiROUND( sindecideg( radius, -EndAngle ) );
+ FinishTo( end );
+}
+
+
+void PLOTTER::PlotImage(const wxImage & aImage, const wxPoint& aPos, double aScaleFactor )
+{
+ wxSize size( aImage.GetWidth() * aScaleFactor,
+ aImage.GetHeight() * aScaleFactor );
+
+ wxPoint start = aPos;
+ start.x -= size.x / 2;
+ start.y -= size.y / 2;
+
+ wxPoint end = start;
+ end.x += size.x;
+ end.y += size.y;
+
+ Rect( start, end, NO_FILL );
+}
+
+
+void PLOTTER::markerSquare( const wxPoint& position, int radius )
+{
+ double r = KiROUND( radius / 1.4142 );
+ std::vector< wxPoint > corner_list;
+ wxPoint corner;
+ corner.x = position.x + r;
+ corner.y = position.y + r;
+ corner_list.push_back( corner );
+ corner.x = position.x + r;
+ corner.y = position.y - r;
+ corner_list.push_back( corner );
+ corner.x = position.x - r;
+ corner.y = position.y - r;
+ corner_list.push_back( corner );
+ corner.x = position.x - r;
+ corner.y = position.y + r;
+ corner_list.push_back( corner );
+ corner.x = position.x + r;
+ corner.y = position.y + r;
+ corner_list.push_back( corner );
+
+ PlotPoly( corner_list, NO_FILL, GetCurrentLineWidth() );
+}
+
+
+void PLOTTER::markerCircle( const wxPoint& position, int radius )
+{
+ Circle( position, radius * 2, NO_FILL, GetCurrentLineWidth() );
+}
+
+
+void PLOTTER::markerLozenge( const wxPoint& position, int radius )
+{
+ std::vector< wxPoint > corner_list;
+ wxPoint corner;
+ corner.x = position.x;
+ corner.y = position.y + radius;
+ corner_list.push_back( corner );
+ corner.x = position.x + radius;
+ corner.y = position.y,
+ corner_list.push_back( corner );
+ corner.x = position.x;
+ corner.y = position.y - radius;
+ corner_list.push_back( corner );
+ corner.x = position.x - radius;
+ corner.y = position.y;
+ corner_list.push_back( corner );
+ corner.x = position.x;
+ corner.y = position.y + radius;
+ corner_list.push_back( corner );
+
+ PlotPoly( corner_list, NO_FILL, GetCurrentLineWidth() );
+}
+
+
+void PLOTTER::markerHBar( const wxPoint& pos, int radius )
+{
+ MoveTo( wxPoint( pos.x - radius, pos.y ) );
+ FinishTo( wxPoint( pos.x + radius, pos.y ) );
+}
+
+
+void PLOTTER::markerSlash( const wxPoint& pos, int radius )
+{
+ MoveTo( wxPoint( pos.x - radius, pos.y - radius ) );
+ FinishTo( wxPoint( pos.x + radius, pos.y + radius ) );
+}
+
+
+void PLOTTER::markerBackSlash( const wxPoint& pos, int radius )
+{
+ MoveTo( wxPoint( pos.x + radius, pos.y - radius ) );
+ FinishTo( wxPoint( pos.x - radius, pos.y + radius ) );
+}
+
+
+void PLOTTER::markerVBar( const wxPoint& pos, int radius )
+{
+ MoveTo( wxPoint( pos.x, pos.y - radius ) );
+ FinishTo( wxPoint( pos.x, pos.y + radius ) );
+}
+
+
+void PLOTTER::Marker( const wxPoint& position, int diametre, unsigned aShapeId )
+{
+ int radius = diametre / 2;
+ /* Marker are composed by a series of 'parts' superimposed; not every
+ combination make sense, obviously. Since they are used in order I
+ tried to keep the uglier/more complex constructions at the end.
+ Also I avoided the |/ |\ -/ -\ construction because they're *very*
+ ugly... if needed they could be added anyway... I'd like to see
+ a board with more than 58 drilling/slotting tools!
+ If Visual C++ supported the 0b literals they would be optimally
+ and easily encoded as an integer array. We have to do with octal */
+ static const unsigned char marker_patterns[MARKER_COUNT] = {
+ // Bit order: O Square Lozenge - | \ /
+ // First choice: simple shapes
+ 0003, // X
+ 0100, // O
+ 0014, // +
+ 0040, // Sq
+ 0020, // Lz
+ // Two simple shapes
+ 0103, // X O
+ 0017, // X +
+ 0043, // X Sq
+ 0023, // X Lz
+ 0114, // O +
+ 0140, // O Sq
+ 0120, // O Lz
+ 0054, // + Sq
+ 0034, // + Lz
+ 0060, // Sq Lz
+ // Three simple shapes
+ 0117, // X O +
+ 0143, // X O Sq
+ 0123, // X O Lz
+ 0057, // X + Sq
+ 0037, // X + Lz
+ 0063, // X Sq Lz
+ 0154, // O + Sq
+ 0134, // O + Lz
+ 0074, // + Sq Lz
+ // Four simple shapes
+ 0174, // O Sq Lz +
+ 0163, // X O Sq Lz
+ 0157, // X O Sq +
+ 0137, // X O Lz +
+ 0077, // X Sq Lz +
+ // This draws *everything *
+ 0177, // X O Sq Lz +
+ // Here we use the single bars... so the cross is forbidden
+ 0110, // O -
+ 0104, // O |
+ 0101, // O /
+ 0050, // Sq -
+ 0044, // Sq |
+ 0041, // Sq /
+ 0030, // Lz -
+ 0024, // Lz |
+ 0021, // Lz /
+ 0150, // O Sq -
+ 0144, // O Sq |
+ 0141, // O Sq /
+ 0130, // O Lz -
+ 0124, // O Lz |
+ 0121, // O Lz /
+ 0070, // Sq Lz -
+ 0064, // Sq Lz |
+ 0061, // Sq Lz /
+ 0170, // O Sq Lz -
+ 0164, // O Sq Lz |
+ 0161, // O Sq Lz /
+ // Last resort: the backlash component (easy to confound)
+ 0102, // \ O
+ 0042, // \ Sq
+ 0022, // \ Lz
+ 0142, // \ O Sq
+ 0122, // \ O Lz
+ 0062, // \ Sq Lz
+ 0162 // \ O Sq Lz
+ };
+ if( aShapeId >= MARKER_COUNT )
+ {
+ // Fallback shape
+ markerCircle( position, radius );
+ }
+ else
+ {
+ // Decode the pattern and draw the corresponding parts
+ unsigned char pat = marker_patterns[aShapeId];
+ if( pat & 0001 )
+ markerSlash( position, radius );
+ if( pat & 0002 )
+ markerBackSlash( position, radius );
+ if( pat & 0004 )
+ markerVBar( position, radius );
+ if( pat & 0010 )
+ markerHBar( position, radius );
+ if( pat & 0020 )
+ markerLozenge( position, radius );
+ if( pat & 0040 )
+ markerSquare( position, radius );
+ if( pat & 0100 )
+ markerCircle( position, radius );
+ }
+}
+
+
+void PLOTTER::segmentAsOval( const wxPoint& start, const wxPoint& end, int width,
+ EDA_DRAW_MODE_T tracemode )
+{
+ wxPoint center( (start.x + end.x) / 2, (start.y + end.y) / 2 );
+ wxSize size( end.x - start.x, end.y - start.y );
+ double orient;
+
+ if( size.y == 0 )
+ orient = 0;
+ else if( size.x == 0 )
+ orient = 900;
+ else
+ orient = -ArcTangente( size.y, size.x );
+
+ size.x = KiROUND( EuclideanNorm( size ) ) + width;
+ size.y = width;
+
+ FlashPadOval( center, size, orient, tracemode );
+}
+
+
+void PLOTTER::sketchOval( const wxPoint& pos, const wxSize& aSize, double orient, int width )
+{
+ SetCurrentLineWidth( width );
+ width = currentPenWidth;
+ int radius, deltaxy, cx, cy;
+ wxSize size( aSize );
+
+ if( size.x > size.y )
+ {
+ std::swap( size.x, size.y );
+ orient = AddAngles( orient, 900 );
+ }
+
+ deltaxy = size.y - size.x; /* distance between centers of the oval */
+ radius = ( size.x - width ) / 2;
+ cx = -radius;
+ cy = -deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ MoveTo( wxPoint( cx + pos.x, cy + pos.y ) );
+ cx = -radius;
+ cy = deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ FinishTo( wxPoint( cx + pos.x, cy + pos.y ) );
+
+ cx = radius;
+ cy = -deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ MoveTo( wxPoint( cx + pos.x, cy + pos.y ) );
+ cx = radius;
+ cy = deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ FinishTo( wxPoint( cx + pos.x, cy + pos.y ) );
+
+ cx = 0;
+ cy = deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ Arc( wxPoint( cx + pos.x, cy + pos.y ),
+ orient + 1800, orient + 3600,
+ radius, NO_FILL );
+ cx = 0;
+ cy = -deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ Arc( wxPoint( cx + pos.x, cy + pos.y ),
+ orient, orient + 1800,
+ radius, NO_FILL );
+}
+
+
+void PLOTTER::ThickSegment( const wxPoint& start, const wxPoint& end, int width,
+ EDA_DRAW_MODE_T tracemode )
+{
+ if( tracemode == FILLED )
+ {
+ SetCurrentLineWidth( width );
+ MoveTo( start );
+ FinishTo( end );
+ }
+ else
+ {
+ SetCurrentLineWidth( -1 );
+ segmentAsOval( start, end, width, tracemode );
+ }
+}
+
+
+void PLOTTER::ThickArc( const wxPoint& centre, double StAngle, double EndAngle,
+ int radius, int width, EDA_DRAW_MODE_T tracemode )
+{
+ if( tracemode == FILLED )
+ Arc( centre, StAngle, EndAngle, radius, NO_FILL, width );
+ else
+ {
+ SetCurrentLineWidth( -1 );
+ Arc( centre, StAngle, EndAngle,
+ radius - ( width - currentPenWidth ) / 2, NO_FILL, -1 );
+ Arc( centre, StAngle, EndAngle,
+ radius + ( width - currentPenWidth ) / 2, NO_FILL, -1 );
+ }
+}
+
+
+void PLOTTER::ThickRect( const wxPoint& p1, const wxPoint& p2, int width,
+ EDA_DRAW_MODE_T tracemode )
+{
+ if( tracemode == FILLED )
+ Rect( p1, p2, NO_FILL, width );
+ else
+ {
+ SetCurrentLineWidth( -1 );
+ wxPoint offsetp1( p1.x - (width - currentPenWidth) / 2,
+ p1.y - (width - currentPenWidth) / 2 );
+ wxPoint offsetp2( p2.x + (width - currentPenWidth) / 2,
+ p2.y + (width - currentPenWidth) / 2 );
+ Rect( offsetp1, offsetp2, NO_FILL, -1 );
+ offsetp1.x += (width - currentPenWidth);
+ offsetp1.y += (width - currentPenWidth);
+ offsetp2.x -= (width - currentPenWidth);
+ offsetp2.y -= (width - currentPenWidth);
+ Rect( offsetp1, offsetp2, NO_FILL, -1 );
+ }
+}
+
+
+void PLOTTER::ThickCircle( const wxPoint& pos, int diametre, int width, EDA_DRAW_MODE_T tracemode )
+{
+ if( tracemode == FILLED )
+ Circle( pos, diametre, NO_FILL, width );
+ else
+ {
+ SetCurrentLineWidth( -1 );
+ Circle( pos, diametre - width + currentPenWidth, NO_FILL, -1 );
+ Circle( pos, diametre + width - currentPenWidth, NO_FILL, -1 );
+ }
+}
+
+
+void PLOTTER::SetPageSettings( const PAGE_INFO& aPageSettings )
+{
+ pageInfo = aPageSettings;
+}
diff --git a/common/class_undoredo_container.cpp b/common/class_undoredo_container.cpp
new file mode 100644
index 0000000..9c71d1a
--- /dev/null
+++ b/common/class_undoredo_container.cpp
@@ -0,0 +1,348 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 jean-pierre.charras@gipsa-lab.inpg.fr
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2009 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <base_struct.h>
+
+#include <base_struct.h>
+#include <class_undoredo_container.h>
+
+
+ITEM_PICKER::ITEM_PICKER( EDA_ITEM* aItem, UNDO_REDO_T aUndoRedoStatus )
+{
+ m_undoRedoStatus = aUndoRedoStatus;
+ SetItem( aItem );
+ m_pickerFlags = 0;
+ m_link = NULL;
+}
+
+
+PICKED_ITEMS_LIST::PICKED_ITEMS_LIST()
+{
+ m_Status = UR_UNSPECIFIED;
+}
+
+PICKED_ITEMS_LIST::~PICKED_ITEMS_LIST()
+{
+}
+
+
+void PICKED_ITEMS_LIST::PushItem( const ITEM_PICKER& aItem )
+{
+ m_ItemsList.push_back( aItem );
+}
+
+
+ITEM_PICKER PICKED_ITEMS_LIST::PopItem()
+{
+ ITEM_PICKER item;
+
+ if( m_ItemsList.size() != 0 )
+ {
+ item = m_ItemsList.back();
+ m_ItemsList.pop_back();
+ }
+
+ return item;
+}
+
+
+bool PICKED_ITEMS_LIST::ContainsItem( const EDA_ITEM* aItem ) const
+{
+ for( size_t i = 0; i < m_ItemsList.size(); i++ )
+ {
+ if( m_ItemsList[ i ].GetItem() == aItem )
+ return true;
+ }
+
+ return false;
+}
+
+
+int PICKED_ITEMS_LIST::FindItem( const EDA_ITEM* aItem ) const
+{
+ for( size_t i = 0; i < m_ItemsList.size(); i++ )
+ {
+ if( m_ItemsList[i].GetItem() == aItem )
+ return i;
+ }
+
+ return -1;
+}
+
+
+void PICKED_ITEMS_LIST::ClearItemsList()
+{
+ m_ItemsList.clear();
+}
+
+
+void PICKED_ITEMS_LIST::ClearListAndDeleteItems()
+{
+ bool show_error_message = true;
+
+ // Delete items is they are not flagged UR_NEW, or if this is a block operation
+ while( GetCount() > 0 )
+ {
+ ITEM_PICKER wrapper = PopItem();
+ if( wrapper.GetItem() == NULL ) // No more item in list.
+ break;
+ switch( wrapper.GetStatus() )
+ {
+ case UR_UNSPECIFIED:
+ if( show_error_message )
+ wxMessageBox( wxT( "ClearListAndDeleteItems() error: UR_UNSPECIFIED command type" ) );
+
+ show_error_message = false;
+ break;
+
+ case UR_WIRE_IMAGE:
+ {
+ // Specific to eeschema: a linked list of wires is stored. The wrapper picks only
+ // the first item (head of list), and is owner of all picked items.
+ EDA_ITEM* item = wrapper.GetItem();
+
+ while( item )
+ {
+ // Delete old copy of wires
+ EDA_ITEM* nextitem = item->Next();
+ delete item;
+ item = nextitem;
+ }
+ }
+ break;
+
+ case UR_MOVED:
+ case UR_FLIPPED:
+ case UR_MIRRORED_X:
+ case UR_MIRRORED_Y:
+ case UR_ROTATED:
+ case UR_ROTATED_CLOCKWISE:
+ case UR_NEW: // Do nothing, items are in use, the picker is not owner of items
+ break;
+
+ case UR_CHANGED:
+ case UR_EXCHANGE_T:
+ delete wrapper.GetLink(); // the picker is owner of this item
+ break;
+
+ case UR_DELETED: // the picker is owner of this item
+ case UR_LIBEDIT: /* Libedit save always a copy of the current item
+ * So, the picker is always owner of the picked item
+ */
+ case UR_MODEDIT: /* Specific to the module editor (modedit creates a full
+ * copy of the current module when changed),
+ * and the picker is owner of this item
+ */
+ delete wrapper.GetItem();
+ break;
+
+ default:
+ wxFAIL_MSG( wxString::Format( wxT( "Cannot clear unknown undo/redo command %d" ),
+ wrapper.GetStatus() ) );
+ break;
+ }
+ }
+}
+
+
+ITEM_PICKER PICKED_ITEMS_LIST::GetItemWrapper( unsigned int aIdx ) const
+{
+ ITEM_PICKER picker;
+
+ if( aIdx < m_ItemsList.size() )
+ picker = m_ItemsList[aIdx];
+
+ return picker;
+}
+
+
+EDA_ITEM* PICKED_ITEMS_LIST::GetPickedItem( unsigned int aIdx ) const
+{
+ if( aIdx < m_ItemsList.size() )
+ return m_ItemsList[aIdx].GetItem();
+ else
+ return NULL;
+}
+
+
+EDA_ITEM* PICKED_ITEMS_LIST::GetPickedItemLink( unsigned int aIdx ) const
+{
+ if( aIdx < m_ItemsList.size() )
+ return m_ItemsList[aIdx].GetLink();
+ else
+ return NULL;
+}
+
+
+UNDO_REDO_T PICKED_ITEMS_LIST::GetPickedItemStatus( unsigned int aIdx ) const
+{
+ if( aIdx < m_ItemsList.size() )
+ return m_ItemsList[aIdx].GetStatus();
+ else
+ return UR_UNSPECIFIED;
+}
+
+
+STATUS_FLAGS PICKED_ITEMS_LIST::GetPickerFlags( unsigned aIdx ) const
+{
+ if( aIdx < m_ItemsList.size() )
+ return m_ItemsList[aIdx].GetFlags();
+ else
+ return 0;
+}
+
+
+bool PICKED_ITEMS_LIST::SetPickedItem( EDA_ITEM* aItem, unsigned aIdx )
+{
+ if( aIdx < m_ItemsList.size() )
+ {
+ m_ItemsList[aIdx].SetItem( aItem );
+ return true;
+ }
+ else
+ return false;
+}
+
+
+bool PICKED_ITEMS_LIST::SetPickedItemLink( EDA_ITEM* aLink, unsigned aIdx )
+{
+ if( aIdx < m_ItemsList.size() )
+ {
+ m_ItemsList[aIdx].SetLink( aLink );
+ return true;
+ }
+ else
+ return false;
+}
+
+
+bool PICKED_ITEMS_LIST::SetPickedItem( EDA_ITEM* aItem, UNDO_REDO_T aStatus, unsigned aIdx )
+{
+ if( aIdx < m_ItemsList.size() )
+ {
+ m_ItemsList[aIdx].SetItem( aItem );
+ m_ItemsList[aIdx].SetStatus( aStatus );
+ return true;
+ }
+ else
+ return false;
+}
+
+
+bool PICKED_ITEMS_LIST::SetPickedItemStatus( UNDO_REDO_T aStatus, unsigned aIdx )
+{
+ if( aIdx < m_ItemsList.size() )
+ {
+ m_ItemsList[aIdx].SetStatus( aStatus );
+ return true;
+ }
+ else
+ return false;
+}
+
+
+bool PICKED_ITEMS_LIST::SetPickerFlags( STATUS_FLAGS aFlags, unsigned aIdx )
+{
+ if( aIdx < m_ItemsList.size() )
+ {
+ m_ItemsList[aIdx].SetFlags( aFlags );
+ return true;
+ }
+ else
+ return false;
+}
+
+
+bool PICKED_ITEMS_LIST::RemovePicker( unsigned aIdx )
+{
+ if( aIdx >= m_ItemsList.size() )
+ return false;
+ m_ItemsList.erase( m_ItemsList.begin() + aIdx );
+ return true;
+}
+
+
+void PICKED_ITEMS_LIST::CopyList( const PICKED_ITEMS_LIST& aSource )
+{
+ m_ItemsList = aSource.m_ItemsList; // Vector's copy
+}
+
+
+void PICKED_ITEMS_LIST::ReversePickersListOrder()
+{
+ std::vector <ITEM_PICKER> tmp;
+ while( !m_ItemsList.empty() )
+ {
+ tmp.push_back( m_ItemsList.back() );
+ m_ItemsList.pop_back();
+ }
+
+ m_ItemsList.swap( tmp );
+}
+
+
+/**********************************************/
+/********** UNDO_REDO_CONTAINER ***************/
+/**********************************************/
+
+UNDO_REDO_CONTAINER::UNDO_REDO_CONTAINER()
+{
+}
+
+
+UNDO_REDO_CONTAINER::~UNDO_REDO_CONTAINER()
+{
+ ClearCommandList();
+}
+
+
+void UNDO_REDO_CONTAINER::ClearCommandList()
+{
+ for( unsigned ii = 0; ii < m_CommandsList.size(); ii++ )
+ delete m_CommandsList[ii];
+
+ m_CommandsList.clear();
+}
+
+
+void UNDO_REDO_CONTAINER::PushCommand( PICKED_ITEMS_LIST* aItem )
+{
+ m_CommandsList.push_back( aItem );
+}
+
+
+PICKED_ITEMS_LIST* UNDO_REDO_CONTAINER::PopCommand()
+{
+ if( m_CommandsList.size() != 0 )
+ {
+ PICKED_ITEMS_LIST* item = m_CommandsList.back();
+ m_CommandsList.pop_back();
+ return item;
+ }
+
+ return NULL;
+}
diff --git a/common/colors.cpp b/common/colors.cpp
new file mode 100644
index 0000000..0cc6042
--- /dev/null
+++ b/common/colors.cpp
@@ -0,0 +1,184 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <colors.h>
+#include <i18n_utility.h>
+
+
+/**
+ * The predefined colors used in KiCad.
+ * Please: if you change a value, remember these values are carefully chosen
+ * to have good results in Pcbnew, that uses the ORed value of basic colors
+ * when displaying superimposed objects
+ * This list must have exactly NBCOLORS items
+ */
+
+const StructColors g_ColorRefs[NBCOLORS] =
+{
+ { 0, 0, 0, BLACK, _HKI( "Black" ), DARKDARKGRAY },
+ { 72, 72, 72, DARKDARKGRAY, _HKI( "Gray 1" ), DARKGRAY },
+ { 132, 132, 132, DARKGRAY, _HKI( "Gray 2" ), LIGHTGRAY },
+ { 194, 194, 194, LIGHTGRAY, _HKI( "Gray 3" ), WHITE },
+ { 255, 255, 255, WHITE, _HKI( "White" ), WHITE },
+ { 194, 255, 255, LIGHTYELLOW, _HKI( "L.Yellow" ), WHITE },
+ { 72, 0, 0, DARKBLUE, _HKI( "Blue 1" ), BLUE },
+ { 0, 72, 0, DARKGREEN, _HKI( "Green 1" ), GREEN },
+ { 72, 72, 0, DARKCYAN, _HKI( "Cyan 1" ), CYAN },
+ { 0, 0, 72, DARKRED, _HKI( "Red 1" ), RED },
+ { 72, 0, 72, DARKMAGENTA, _HKI( "Magenta 1" ), MAGENTA },
+ { 0, 72, 72, DARKBROWN, _HKI( "Brown 1" ), BROWN },
+ { 132, 0, 0, BLUE, _HKI( "Blue 2" ), LIGHTBLUE },
+ { 0, 132, 0, GREEN, _HKI( "Green 2" ), LIGHTGREEN },
+ { 132, 132, 0, CYAN, _HKI( "Cyan 2" ), LIGHTCYAN },
+ { 0, 0, 132, RED, _HKI( "Red 2" ), LIGHTRED },
+ { 132, 0, 132, MAGENTA, _HKI( "Magenta 2" ), LIGHTMAGENTA },
+ { 0, 132, 132, BROWN, _HKI( "Brown 2" ), YELLOW },
+ { 194, 0, 0, LIGHTBLUE, _HKI( "Blue 3" ), PUREBLUE, },
+ { 0, 194, 0, LIGHTGREEN, _HKI( "Green 3" ), PUREGREEN },
+ { 194, 194, 0, LIGHTCYAN, _HKI( "Cyan 3" ), PURECYAN },
+ { 0, 0, 194, LIGHTRED, _HKI( "Red 3" ), PURERED },
+ { 194, 0, 194, LIGHTMAGENTA, _HKI( "Magenta 3" ), PUREMAGENTA },
+ { 0, 194, 194, YELLOW, _HKI( "Yellow 3" ), PUREYELLOW },
+ { 255, 0, 0, PUREBLUE, _HKI( "Blue 4" ), WHITE },
+ { 0, 255, 0, PUREGREEN, _HKI( "Green 4" ), WHITE },
+ { 255, 255, 0, PURECYAN, _HKI( "Cyan 4" ), WHITE },
+ { 0, 0, 255, PURERED, _HKI( "Red 4" ), WHITE },
+ { 255, 0, 255, PUREMAGENTA, _HKI( "Magenta 4" ), WHITE },
+ { 0, 255, 255, PUREYELLOW, _HKI( "Yellow 4" ), WHITE },
+};
+
+
+EDA_COLOR_T ColorByName( const wxString& aName )
+{
+ // look for a match in the palette itself
+ for( EDA_COLOR_T trying = BLACK; trying < NBCOLORS; trying = NextColor(trying) )
+ {
+ if( 0 == aName.CmpNoCase( ColorGetName( trying ) ) )
+ return trying;
+ }
+
+ // Not found, no idea...
+ return UNSPECIFIED_COLOR;
+}
+
+
+bool ColorIsLight( EDA_COLOR_T aColor )
+{
+ const StructColors &c = g_ColorRefs[ColorGetBase( aColor )];
+ int r = c.m_Red;
+ int g = c.m_Green;
+ int b = c.m_Blue;
+ return ((r * r) + (g * g) + (b * b)) > (128 * 128 * 3);
+}
+
+
+EDA_COLOR_T ColorFindNearest( const wxColour &aColor )
+{
+ return ColorFindNearest( aColor.Red(), aColor.Green(), aColor.Blue() );
+}
+
+
+EDA_COLOR_T ColorFindNearest( int aR, int aG, int aB )
+{
+ EDA_COLOR_T candidate = BLACK;
+
+ /* Find the 'nearest' color in the palette. This is fun. There is
+ a gazilion of metrics for the color space and no one of the
+ useful one is in the RGB color space. Who cares, this is a CAD,
+ not a photosomething...
+
+ I hereby declare that the distance is the sum of the square of the
+ component difference. Think about the RGB color cube. Now get the
+ euclidean distance, but without the square root... for ordering
+ purposes it's the same, obviously. Also each component can't be
+ less of the target one, since I found this currently work better...
+ */
+ int nearest_distance = 255 * 255 * 3 + 1; // Can't beat this
+
+ for( EDA_COLOR_T trying = BLACK; trying < NBCOLORS; trying = NextColor(trying) )
+ {
+ const StructColors &c = g_ColorRefs[trying];
+ int distance = (aR - c.m_Red) * (aR - c.m_Red) +
+ (aG - c.m_Green) * (aG - c.m_Green) +
+ (aB - c.m_Blue) * (aB - c.m_Blue);
+
+ if( distance < nearest_distance && c.m_Red >= aR &&
+ c.m_Green >= aG && c.m_Blue >= aB )
+ {
+ nearest_distance = distance;
+ candidate = trying;
+ }
+ }
+
+ return candidate;
+}
+
+
+EDA_COLOR_T ColorMix( EDA_COLOR_T aColor1, EDA_COLOR_T aColor2 )
+{
+ /* Memoization storage. This could be potentially called for each
+ * color merge so a cache is useful (there are few colours anyway) */
+ static EDA_COLOR_T mix_cache[NBCOLORS][NBCOLORS];
+
+ // TODO how is alpha used? it's a mac only thing, I have no idea
+ aColor1 = ColorGetBase( aColor1 );
+ aColor2 = ColorGetBase( aColor2 );
+
+ // First easy thing: a black gives always the other colour
+ if( aColor1 == BLACK )
+ return aColor2;
+
+ if( aColor2 == BLACK)
+ return aColor1;
+
+ /* Now we are sure that black can't occur, so the rule is:
+ * BLACK means not computed yet. If we're lucky we already have
+ * an answer */
+ EDA_COLOR_T candidate = mix_cache[aColor1][aColor2];
+
+ if( candidate != BLACK )
+ return candidate;
+
+ // Blend the two colors (i.e. OR the RGB values)
+ const StructColors &c1 = g_ColorRefs[aColor1];
+ const StructColors &c2 = g_ColorRefs[aColor2];
+
+ // Ask the palette for the nearest color to the mix
+ wxColour mixed( c1.m_Red | c2.m_Red,
+ c1.m_Green | c2.m_Green,
+ c1.m_Blue | c2.m_Blue );
+ candidate = ColorFindNearest( mixed );
+
+ /* Here, BLACK is *not* a good answer, since it would recompute the next time.
+ * Even theorically its not possible (with the current rules), but
+ * maybe the metric will change in the future */
+ if( candidate == BLACK )
+ candidate = DARKDARKGRAY;
+
+ // Store the result in the cache. The operation is commutative, too
+ mix_cache[aColor1][aColor2] = candidate;
+ mix_cache[aColor2][aColor1] = candidate;
+ return candidate;
+}
+
diff --git a/common/common.cpp b/common/common.cpp
new file mode 100644
index 0000000..911d581
--- /dev/null
+++ b/common/common.cpp
@@ -0,0 +1,511 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file common.cpp
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <common.h>
+#include <macros.h>
+#include <build_version.h>
+#include <confirm.h>
+#include <base_units.h>
+#include <reporter.h>
+
+#include <wx/process.h>
+#include <wx/config.h>
+#include <wx/utils.h>
+#include <wx/stdpaths.h>
+
+#include <pgm_base.h>
+
+
+/**
+ * Global variables definitions.
+ *
+ * TODO: All of these variables should be moved into the class were they
+ * are defined and used. Most of them probably belong in the
+ * application class.
+ */
+
+bool g_ShowPageLimits = true;
+EDA_UNITS_T g_UserUnit;
+EDA_COLOR_T g_GhostColor;
+
+
+/* Class LOCALE_IO
+ * is a class that can be instantiated within a scope in which you are expecting
+ * exceptions to be thrown. Its constructor sets a "C" locale, to read/print files
+ * with fp numbers.
+ * Its destructor insures that the default locale is restored if an exception
+ * is thrown, or not.
+ */
+
+int LOCALE_IO::m_c_count = 0;
+
+LOCALE_IO::LOCALE_IO()
+{
+ wxASSERT_MSG( m_c_count >= 0, wxT( "LOCALE_IO::m_c_count mismanaged." ) );
+
+ // use thread safe, atomic operation
+ if( __sync_fetch_and_add( &m_c_count, 1 ) == 0 )
+ {
+ // Store the user locale name, to restore this locale later, in dtor
+ m_user_locale = setlocale( LC_ALL, 0 );
+ // Switch the locale to C locale, to read/write files with fp numbers
+ setlocale( LC_ALL, "C" );
+ }
+}
+
+LOCALE_IO::~LOCALE_IO()
+{
+ // use thread safe, atomic operation
+ if( __sync_sub_and_fetch( &m_c_count, 1 ) == 0 )
+ {
+ // revert to the user locale
+ setlocale( LC_ALL, m_user_locale.c_str() );
+ }
+
+ wxASSERT_MSG( m_c_count >= 0, wxT( "LOCALE_IO::m_c_count mismanaged." ) );
+}
+
+
+wxSize GetTextSize( const wxString& aSingleLine, wxWindow* aWindow )
+{
+ wxCoord width;
+ wxCoord height;
+
+ {
+ wxClientDC dc( aWindow );
+ dc.SetFont( aWindow->GetFont() );
+ dc.GetTextExtent( aSingleLine, &width, &height );
+ }
+
+ return wxSize( width, height );
+}
+
+
+bool EnsureTextCtrlWidth( wxTextCtrl* aCtrl, const wxString* aString )
+{
+ wxWindow* window = aCtrl->GetParent();
+
+ if( !window )
+ window = aCtrl;
+
+ wxString ctrlText;
+
+ if( !aString )
+ {
+ ctrlText = aCtrl->GetValue();
+ aString = &ctrlText;
+ }
+
+ wxSize textz = GetTextSize( *aString, window );
+ wxSize ctrlz = aCtrl->GetSize();
+
+ if( ctrlz.GetWidth() < textz.GetWidth() + 10 )
+ {
+ ctrlz.SetWidth( textz.GetWidth() + 10 );
+ aCtrl->SetSizeHints( ctrlz );
+ return true;
+ }
+
+ return false;
+}
+
+
+wxString ReturnUnitSymbol( EDA_UNITS_T aUnit, const wxString& formatString )
+{
+ wxString tmp;
+ wxString label;
+
+ switch( aUnit )
+ {
+ case INCHES:
+ tmp = _( "\"" );
+ break;
+
+ case MILLIMETRES:
+ tmp = _( "mm" );
+ break;
+
+ case UNSCALED_UNITS:
+ break;
+
+ case DEGREES:
+ wxASSERT( false );
+ break;
+ }
+
+ if( formatString.IsEmpty() )
+ return tmp;
+
+ label.Printf( formatString, GetChars( tmp ) );
+
+ return label;
+}
+
+
+wxString GetUnitsLabel( EDA_UNITS_T aUnit )
+{
+ wxString label;
+
+ switch( aUnit )
+ {
+ case INCHES:
+ label = _( "inches" );
+ break;
+
+ case MILLIMETRES:
+ label = _( "millimeters" );
+ break;
+
+ case UNSCALED_UNITS:
+ label = _( "units" );
+ break;
+
+ case DEGREES:
+ wxASSERT( false );
+ break;
+ }
+
+ return label;
+}
+
+
+wxString GetAbbreviatedUnitsLabel( EDA_UNITS_T aUnit )
+{
+ wxString label;
+
+ switch( aUnit )
+ {
+ case INCHES:
+ label = _( "in" );
+ break;
+
+ case MILLIMETRES:
+ label = _( "mm" );
+ break;
+
+ case UNSCALED_UNITS:
+ break;
+
+ case DEGREES:
+ label = _( "deg" );
+ break;
+
+ default:
+ label = wxT( "??" );
+ break;
+ }
+
+ return label;
+}
+
+
+void AddUnitSymbol( wxStaticText& Stext, EDA_UNITS_T aUnit )
+{
+ wxString msg = Stext.GetLabel();
+
+ msg += ReturnUnitSymbol( aUnit );
+
+ Stext.SetLabel( msg );
+}
+
+
+void wxStringSplit( const wxString& aText, wxArrayString& aStrings, wxChar aSplitter )
+{
+ wxString tmp;
+
+ for( unsigned ii = 0; ii < aText.Length(); ii++ )
+ {
+ if( aText[ii] == aSplitter )
+ {
+ aStrings.Add( tmp );
+ tmp.Clear();
+ }
+
+ else
+ tmp << aText[ii];
+ }
+
+ if( !tmp.IsEmpty() )
+ {
+ aStrings.Add( tmp );
+ }
+}
+
+
+int ProcessExecute( const wxString& aCommandLine, int aFlags, wxProcess *callback )
+{
+ return wxExecute( aCommandLine, aFlags, callback );
+}
+
+
+time_t GetNewTimeStamp()
+{
+ static time_t oldTimeStamp;
+ time_t newTimeStamp;
+
+ newTimeStamp = time( NULL );
+
+ if( newTimeStamp <= oldTimeStamp )
+ newTimeStamp = oldTimeStamp + 1;
+
+ oldTimeStamp = newTimeStamp;
+
+ return newTimeStamp;
+}
+
+
+double RoundTo0( double x, double precision )
+{
+ assert( precision != 0 );
+
+ long long ix = KiROUND( x * precision );
+
+ if ( x < 0.0 )
+ ix = -ix;
+
+ int remainder = ix % 10; // remainder is in precision mm
+
+ if( remainder <= 2 )
+ ix -= remainder; // truncate to the near number
+ else if( remainder >= 8 )
+ ix += 10 - remainder; // round to near number
+
+ if ( x < 0 )
+ ix = -ix;
+
+ return (double) ix / precision;
+}
+
+
+wxConfigBase* GetNewConfig( const wxString& aProgName )
+{
+ wxConfigBase* cfg = 0;
+ wxFileName configname;
+ configname.AssignDir( GetKicadConfigPath() );
+ configname.SetFullName( aProgName );
+
+ cfg = new wxFileConfig( wxT( "" ), wxT( "" ), configname.GetFullPath() );
+ return cfg;
+}
+
+wxString GetKicadLockFilePath()
+{
+ wxFileName lockpath;
+ lockpath.AssignDir( wxGetHomeDir() ); // Default wx behavior
+
+#if defined( __WXMAC__ )
+ // In OSX use the standard per user cache directory
+ lockpath.AppendDir( wxT( "Library" ) );
+ lockpath.AppendDir( wxT( "Caches" ) );
+ lockpath.AppendDir( wxT( "kicad" ) );
+#elif defined( __UNIX__ )
+ wxString envstr;
+ // Try first the standard XDG_RUNTIME_DIR, falling back to XDG_CACHE_HOME
+ if( wxGetEnv( wxT( "XDG_RUNTIME_DIR" ), &envstr ) && !envstr.IsEmpty() )
+ {
+ lockpath.AssignDir( envstr );
+ }
+ else if( wxGetEnv( wxT( "XDG_CACHE_HOME" ), &envstr ) && !envstr.IsEmpty() )
+ {
+ lockpath.AssignDir( envstr );
+ }
+ else
+ {
+ // If all fails, just use ~/.cache
+ lockpath.AppendDir( wxT( ".cache" ) );
+ }
+
+ lockpath.AppendDir( wxT( "kicad" ) );
+#endif
+
+#if defined( __WXMAC__ ) || defined( __UNIX__ )
+ if( !lockpath.DirExists() )
+ {
+ // Lockfiles should be only readable by the user
+ lockpath.Mkdir( 0700, wxPATH_MKDIR_FULL );
+ }
+#endif
+ return lockpath.GetPath();
+}
+
+
+wxString GetKicadConfigPath()
+{
+ wxFileName cfgpath;
+
+ // From the wxWidgets wxStandardPaths::GetUserConfigDir() help:
+ // Unix: ~ (the home directory)
+ // Windows: "C:\Documents and Settings\username\Application Data"
+ // Mac: ~/Library/Preferences
+ cfgpath.AssignDir( wxStandardPaths::Get().GetUserConfigDir() );
+
+#if !defined( __WINDOWS__ ) && !defined( __WXMAC__ )
+ wxString envstr;
+
+ if( !wxGetEnv( wxT( "XDG_CONFIG_HOME" ), &envstr ) || envstr.IsEmpty() )
+ {
+ // XDG_CONFIG_HOME is not set, so use the fallback
+ cfgpath.AppendDir( wxT( ".config" ) );
+ }
+ else
+ {
+ // Override the assignment above with XDG_CONFIG_HOME
+ cfgpath.AssignDir( envstr );
+ }
+#endif
+
+ cfgpath.AppendDir( wxT( "kicad" ) );
+
+ if( !cfgpath.DirExists() )
+ {
+ cfgpath.Mkdir( wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL );
+ }
+
+ return cfgpath.GetPath();
+}
+
+
+#include <ki_mutex.h>
+const wxString ExpandEnvVarSubstitutions( const wxString& aString )
+{
+ // wxGetenv( wchar_t* ) is not re-entrant on linux.
+ // Put a lock on multithreaded use of wxGetenv( wchar_t* ), called from wxEpandEnvVars(),
+ static MUTEX getenv_mutex;
+
+ MUTLOCK lock( getenv_mutex );
+
+ // We reserve the right to do this another way, by providing our own member
+ // function.
+ return wxExpandEnvVars( aString );
+}
+
+bool EnsureFileDirectoryExists( wxFileName* aTargetFullFileName,
+ const wxString& aBaseFilename,
+ REPORTER* aReporter )
+{
+ wxString msg;
+ wxString baseFilePath = wxFileName( aBaseFilename ).GetPath();
+
+ // make aTargetFullFileName path, which is relative to aBaseFilename path (if it is not
+ // already an absolute path) absolute:
+ if( !aTargetFullFileName->MakeAbsolute( baseFilePath ) )
+ {
+ if( aReporter )
+ {
+ msg.Printf( _( "Cannot make path '%s' absolute with respect to '%s'." ),
+ GetChars( aTargetFullFileName->GetPath() ),
+ GetChars( baseFilePath ) );
+ aReporter->Report( msg, REPORTER::RPT_ERROR );
+ }
+
+ return false;
+ }
+
+ // Ensure the path of aTargetFullFileName exists, and create it if needed:
+ wxString outputPath( aTargetFullFileName->GetPath() );
+
+ if( !wxFileName::DirExists( outputPath ) )
+ {
+ if( wxMkdir( outputPath ) )
+ {
+ if( aReporter )
+ {
+ msg.Printf( _( "Output directory '%s' created.\n" ), GetChars( outputPath ) );
+ aReporter->Report( msg, REPORTER::RPT_INFO );
+ return true;
+ }
+ }
+ else
+ {
+ if( aReporter )
+ {
+ msg.Printf( _( "Cannot create output directory '%s'.\n" ),
+ GetChars( outputPath ) );
+ aReporter->Report( msg, REPORTER::RPT_ERROR );
+ }
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+#ifdef __WXMAC__
+wxString GetOSXKicadUserDataDir()
+{
+ // According to wxWidgets documentation for GetUserDataDir:
+ // Mac: ~/Library/Application Support/appname
+ wxFileName udir( wxStandardPaths::Get().GetUserDataDir(), wxEmptyString );
+
+ // Since appname is different if started via launcher or standalone binary
+ // map all to "kicad" here
+ udir.RemoveLastDir();
+ udir.AppendDir( wxT( "kicad" ) );
+
+ return udir.GetPath();
+}
+
+
+wxString GetOSXKicadMachineDataDir()
+{
+ return wxT( "/Library/Application Support/kicad" );
+}
+
+
+wxString GetOSXKicadDataDir()
+{
+ // According to wxWidgets documentation for GetDataDir:
+ // Mac: appname.app/Contents/SharedSupport bundle subdirectory
+ wxFileName ddir( wxStandardPaths::Get().GetDataDir(), wxEmptyString );
+
+ // This must be mapped to main bundle for everything but kicad.app
+ const wxArrayString dirs = ddir.GetDirs();
+ if( dirs[dirs.GetCount() - 3] != wxT( "kicad.app" ) )
+ {
+ // Bundle structure resp. current path is
+ // kicad.app/Contents/Applications/<standalone>.app/Contents/SharedSupport
+ // and will be mapped to
+ // kicad.app/Contents/SharedSupprt
+ ddir.RemoveLastDir();
+ ddir.RemoveLastDir();
+ ddir.RemoveLastDir();
+ ddir.RemoveLastDir();
+ ddir.AppendDir( wxT( "SharedSupport" ) );
+ }
+
+ return ddir.GetPath();
+}
+#endif
diff --git a/common/common_plotDXF_functions.cpp b/common/common_plotDXF_functions.cpp
new file mode 100644
index 0000000..5544ab1
--- /dev/null
+++ b/common/common_plotDXF_functions.cpp
@@ -0,0 +1,815 @@
+/**
+ * @file common_plotDXF_functions.cpp
+ * @brief KiCad: Common plot DXF Routines.
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <kicad_string.h>
+#include <convert_basic_shapes_to_polygon.h>
+
+/**
+ * Oblique angle for DXF native text
+ * (I don't remember if 15 degrees is the ISO value... it looks nice anyway)
+ */
+static const double DXF_OBLIQUE_ANGLE = 15;
+
+/**
+ * Set the scale/position for the DXF plot
+ * The DXF engine doesn't support line widths and mirroring. The output
+ * coordinate system is in the first quadrant (in mm)
+ */
+void DXF_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror )
+{
+ plotOffset = aOffset;
+ plotScale = aScale;
+
+ /* DXF paper is 'virtual' so there is no need of a paper size.
+ Also this way we can handle the aux origin which can be useful
+ (for example when aligning to a mechanical drawing) */
+ paperSize.x = 0;
+ paperSize.y = 0;
+
+ /* Like paper size DXF units are abstract too. Anyway there is a
+ * system variable (MEASUREMENT) which will be set to 1 to indicate
+ * metric units */
+ m_IUsPerDecimil = aIusPerDecimil;
+ iuPerDeviceUnit = 1.0 / aIusPerDecimil; // Gives a DXF in decimils
+ iuPerDeviceUnit *= 0.00254; // ... now in mm
+
+ SetDefaultLineWidth( 0 ); // No line width on DXF
+ m_plotMirror = false; // No mirroring on DXF
+ m_currentColor = BLACK;
+}
+
+/**
+ * Opens the DXF plot with a skeleton header
+ */
+bool DXF_PLOTTER::StartPlot()
+{
+ wxASSERT( outputFile );
+
+ // DXF HEADER - Boilerplate
+ // Defines the minimum for drawing i.e. the angle system and the
+ // continuous linetype
+ fputs( " 0\n"
+ "SECTION\n"
+ " 2\n"
+ "HEADER\n"
+ " 9\n"
+ "$ANGBASE\n"
+ " 50\n"
+ "0.0\n"
+ " 9\n"
+ "$ANGDIR\n"
+ " 70\n"
+ " 1\n"
+ " 9\n"
+ "$MEASUREMENT\n"
+ " 70\n"
+ "0\n"
+ " 0\n" // This means 'metric units'
+ "ENDSEC\n"
+ " 0\n"
+ "SECTION\n"
+ " 2\n"
+ "TABLES\n"
+ " 0\n"
+ "TABLE\n"
+ " 2\n"
+ "LTYPE\n"
+ " 70\n"
+ "1\n"
+ " 0\n"
+ "LTYPE\n"
+ " 2\n"
+ "CONTINUOUS\n"
+ " 70\n"
+ "0\n"
+ " 3\n"
+ "Solid line\n"
+ " 72\n"
+ "65\n"
+ " 73\n"
+ "0\n"
+ " 40\n"
+ "0.0\n"
+ " 0\n"
+ "ENDTAB\n",
+ outputFile );
+
+ // Text styles table
+ // Defines 4 text styles, one for each bold/italic combination
+ fputs( " 0\n"
+ "TABLE\n"
+ " 2\n"
+ "STYLE\n"
+ " 70\n"
+ "4\n", outputFile );
+
+ static const char *style_name[4] = {"KICAD", "KICADB", "KICADI", "KICADBI"};
+ for(int i = 0; i < 4; i++ )
+ {
+ fprintf( outputFile,
+ " 0\n"
+ "STYLE\n"
+ " 2\n"
+ "%s\n" // Style name
+ " 70\n"
+ "0\n" // Standard flags
+ " 40\n"
+ "0\n" // Non-fixed height text
+ " 41\n"
+ "1\n" // Width factor (base)
+ " 42\n"
+ "1\n" // Last height (mandatory)
+ " 50\n"
+ "%g\n" // Oblique angle
+ " 71\n"
+ "0\n" // Generation flags (default)
+ " 3\n"
+ // The standard ISO font (when kicad is build with it
+ // the dxf text in acad matches *perfectly*)
+ "isocp.shx\n", // Font name (when not bigfont)
+ // Apply a 15 degree angle to italic text
+ style_name[i], i < 2 ? 0 : DXF_OBLIQUE_ANGLE );
+ }
+
+
+ // Layer table - one layer per color
+ fprintf( outputFile,
+ " 0\n"
+ "ENDTAB\n"
+ " 0\n"
+ "TABLE\n"
+ " 2\n"
+ "LAYER\n"
+ " 70\n"
+ "%d\n", NBCOLORS );
+
+ /* The layer/colors palette. The acad/DXF palette is divided in 3 zones:
+
+ - The primary colors (1 - 9)
+ - An HSV zone (10-250, 5 values x 2 saturations x 10 hues
+ - Greys (251 - 255)
+
+ There is *no* black... the white does it on paper, usually, and
+ anyway it depends on the plotter configuration, since DXF colors
+ are meant to be logical only (they represent *both* line color and
+ width); later version with plot styles only complicate the matter!
+
+ As usual, brown and magenta/purple are difficult to place since
+ they are actually variations of other colors.
+ */
+ static const struct {
+ const char *name;
+ int color;
+ } dxf_layer[NBCOLORS] = {
+ { "BLACK", 7 }, // In DXF, color 7 is *both* white and black!
+ { "GRAY1", 251 },
+ { "GRAY2", 8 },
+ { "GRAY3", 9 },
+ { "WHITE", 7 },
+ { "LYELLOW", 51 },
+ { "BLUE1", 178 },
+ { "GREEN1", 98 },
+ { "CYAN1", 138 },
+ { "RED1", 18 },
+ { "MAGENTA1", 228 },
+ { "BROWN1", 58 },
+ { "BLUE2", 5 },
+ { "GREEN2", 3 },
+ { "CYAN2", 4 },
+ { "RED2", 1 },
+ { "MAGENTA2", 6 },
+ { "BROWN2", 54 },
+ { "BLUE3", 171 },
+ { "GREEN3", 91 },
+ { "CYAN3", 131 },
+ { "RED3", 11 },
+ { "MAGENTA3", 221 },
+ { "YELLOW3", 2 },
+ { "BLUE4", 5 },
+ { "GREEN4", 3 },
+ { "CYAN4", 4 },
+ { "RED4", 1 },
+ { "MAGENTA4", 6 },
+ { "YELLOW4", 2 }
+ };
+
+ for( EDA_COLOR_T i = BLACK; i < NBCOLORS; i = NextColor(i) )
+ {
+ fprintf( outputFile,
+ " 0\n"
+ "LAYER\n"
+ " 2\n"
+ "%s\n" // Layer name
+ " 70\n"
+ "0\n" // Standard flags
+ " 62\n"
+ "%d\n" // Color number
+ " 6\n"
+ "CONTINUOUS\n",// Linetype name
+ dxf_layer[i].name, dxf_layer[i].color );
+ }
+
+ // End of layer table, begin entities
+ fputs( " 0\n"
+ "ENDTAB\n"
+ " 0\n"
+ "ENDSEC\n"
+ " 0\n"
+ "SECTION\n"
+ " 2\n"
+ "ENTITIES\n", outputFile );
+
+ return true;
+}
+
+
+bool DXF_PLOTTER::EndPlot()
+{
+ wxASSERT( outputFile );
+
+ // DXF FOOTER
+ fputs( " 0\n"
+ "ENDSEC\n"
+ " 0\n"
+ "EOF\n", outputFile );
+ fclose( outputFile );
+ outputFile = NULL;
+
+ return true;
+}
+
+
+/**
+ * The DXF exporter handles 'colors' as layers...
+ */
+void DXF_PLOTTER::SetColor( EDA_COLOR_T color )
+{
+ if( ( color >= 0 && colorMode )
+ || ( color == BLACK )
+ || ( color == WHITE ) )
+ {
+ m_currentColor = color;
+ }
+ else
+ m_currentColor = BLACK;
+}
+
+/**
+ * DXF rectangle: fill not supported
+ */
+void DXF_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width )
+{
+ MoveTo( p1 );
+ LineTo( wxPoint( p1.x, p2.y ) );
+ LineTo( wxPoint( p2.x, p2.y ) );
+ LineTo( wxPoint( p2.x, p1.y ) );
+ FinishTo( wxPoint( p1.x, p1.y ) );
+}
+
+
+/**
+ * DXF circle: full functionality; it even does 'fills' drawing a
+ * circle with a dual-arc polyline wide as the radius.
+ *
+ * I could use this trick to do other filled primitives
+ */
+void DXF_PLOTTER::Circle( const wxPoint& centre, int diameter, FILL_T fill, int width )
+{
+ wxASSERT( outputFile );
+ double radius = userToDeviceSize( diameter / 2 );
+ DPOINT centre_dev = userToDeviceCoordinates( centre );
+ if( radius > 0 )
+ {
+ wxString cname( ColorGetName( m_currentColor ) );
+ if (!fill)
+ {
+ fprintf( outputFile, "0\nCIRCLE\n8\n%s\n10\n%g\n20\n%g\n40\n%g\n",
+ TO_UTF8( cname ),
+ centre_dev.x, centre_dev.y, radius );
+ }
+ if (fill == FILLED_SHAPE)
+ {
+ double r = radius*0.5;
+ fprintf( outputFile, "0\nPOLYLINE\n");
+ fprintf( outputFile, "8\n%s\n66\n1\n70\n1\n", TO_UTF8( cname ));
+ fprintf( outputFile, "40\n%g\n41\n%g\n", radius, radius);
+ fprintf( outputFile, "0\nVERTEX\n8\n%s\n", TO_UTF8( cname ));
+ fprintf( outputFile, "10\n%g\n 20\n%g\n42\n1.0\n",
+ centre_dev.x-r, centre_dev.y );
+ fprintf( outputFile, "0\nVERTEX\n8\n%s\n", TO_UTF8( cname ));
+ fprintf( outputFile, "10\n%g\n 20\n%g\n42\n1.0\n",
+ centre_dev.x+r, centre_dev.y );
+ fprintf( outputFile, "0\nSEQEND\n");
+ }
+ }
+}
+
+
+/**
+ * DXF polygon: doesn't fill it but at least it close the filled ones
+ * DXF does not know thick outline.
+ * It does not know thhick segments, therefore filled polygons with thick outline
+ * are converted to inflated polygon by aWidth/2
+ */
+void DXF_PLOTTER::PlotPoly( const std::vector<wxPoint>& aCornerList,
+ FILL_T aFill, int aWidth)
+{
+ if( aCornerList.size() <= 1 )
+ return;
+
+ unsigned last = aCornerList.size() - 1;
+
+ // Plot outlines with lines (thickness = 0) to define the polygon
+ if( aWidth <= 0 )
+ {
+ MoveTo( aCornerList[0] );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ LineTo( aCornerList[ii] );
+
+ // Close polygon if 'fill' requested
+ if( aFill )
+ {
+ if( aCornerList[last] != aCornerList[0] )
+ LineTo( aCornerList[0] );
+ }
+
+ PenFinish();
+
+ return;
+ }
+
+
+ // if the polygon outline has thickness, and is not filled
+ // (i.e. is a polyline) plot outlines with thick segments
+ if( aWidth > 0 && !aFill )
+ {
+ MoveTo( aCornerList[0] );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ ThickSegment( aCornerList[ii-1], aCornerList[ii],
+ aWidth, FILLED );
+
+ return;
+ }
+
+ // The polygon outline has thickness, and is filled
+ // Build and plot the polygon which contains the initial
+ // polygon and its thick outline
+ SHAPE_POLY_SET bufferOutline;
+ SHAPE_POLY_SET bufferPolybase;
+ const int circleToSegmentsCount = 16;
+
+ bufferPolybase.NewOutline();
+
+ // enter outline as polygon:
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ {
+ TransformRoundedEndsSegmentToPolygon( bufferOutline,
+ aCornerList[ii-1], aCornerList[ii], circleToSegmentsCount, aWidth );
+ }
+
+ // enter the initial polygon:
+ for( unsigned ii = 0; ii < aCornerList.size(); ii++ )
+ {
+ bufferPolybase.Append( aCornerList[ii] );
+ }
+
+ // Merge polygons to build the polygon which contains the initial
+ // polygon and its thick outline
+
+ bufferPolybase.BooleanAdd( bufferOutline ); // create the outline which contains thick outline
+ bufferPolybase.Fracture();
+
+
+ if( bufferPolybase.OutlineCount() < 1 ) // should not happen
+ return;
+
+ const SHAPE_LINE_CHAIN& path = bufferPolybase.COutline( 0 );
+
+ if( path.PointCount() < 2 ) // should not happen
+ return;
+
+ // Now, output the final polygon to DXF file:
+ last = path.PointCount() - 1;
+ VECTOR2I point = path.CPoint( 0 );
+
+ wxPoint startPoint( point.x, point.y );
+ MoveTo( startPoint );
+
+ for( int ii = 1; ii < path.PointCount(); ii++ )
+ {
+ point = path.CPoint( ii );
+ LineTo( wxPoint( point.x, point.y ) );
+ }
+
+ // Close polygon, if needed
+ point = path.CPoint( last );
+ wxPoint endPoint( point.x, point.y );
+
+ if( endPoint != startPoint )
+ LineTo( startPoint );
+
+ PenFinish();
+}
+
+
+void DXF_PLOTTER::PenTo( const wxPoint& pos, char plume )
+{
+ wxASSERT( outputFile );
+ if( plume == 'Z' )
+ {
+ return;
+ }
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ DPOINT pen_lastpos_dev = userToDeviceCoordinates( penLastpos );
+
+ if( penLastpos != pos && plume == 'D' )
+ {
+ // DXF LINE
+ wxString cname( ColorGetName( m_currentColor ) );
+ fprintf( outputFile, "0\nLINE\n8\n%s\n10\n%g\n20\n%g\n11\n%g\n21\n%g\n",
+ TO_UTF8( cname ),
+ pen_lastpos_dev.x, pen_lastpos_dev.y, pos_dev.x, pos_dev.y );
+ }
+ penLastpos = pos;
+}
+
+
+/**
+ * Dashed lines are not (yet) supported by DXF_PLOTTER
+ */
+void DXF_PLOTTER::SetDash( bool dashed )
+{
+ // NOP for now
+}
+
+
+void DXF_PLOTTER::ThickSegment( const wxPoint& aStart, const wxPoint& aEnd, int aWidth,
+ EDA_DRAW_MODE_T aPlotMode )
+{
+ MoveTo( aStart );
+ FinishTo( aEnd );
+}
+
+/* Plot an arc in DXF format
+ * Filling is not supported
+ */
+void DXF_PLOTTER::Arc( const wxPoint& centre, double StAngle, double EndAngle, int radius,
+ FILL_T fill, int width )
+{
+ wxASSERT( outputFile );
+
+ if( radius <= 0 )
+ return;
+
+ // In DXF, arcs are drawn CCW.
+ // In Kicad, arcs are CW or CCW
+ // If StAngle > EndAngle, it is CW. So transform it to CCW
+ if( StAngle > EndAngle )
+ {
+ std::swap( StAngle, EndAngle );
+ }
+
+ DPOINT centre_dev = userToDeviceCoordinates( centre );
+ double radius_dev = userToDeviceSize( radius );
+
+ // Emit a DXF ARC entity
+ wxString cname( ColorGetName( m_currentColor ) );
+ fprintf( outputFile,
+ "0\nARC\n8\n%s\n10\n%g\n20\n%g\n40\n%g\n50\n%g\n51\n%g\n",
+ TO_UTF8( cname ),
+ centre_dev.x, centre_dev.y, radius_dev,
+ StAngle / 10.0, EndAngle / 10.0 );
+}
+
+/**
+ * DXF oval pad: always done in sketch mode
+ */
+void DXF_PLOTTER::FlashPadOval( const wxPoint& pos, const wxSize& aSize, double orient,
+ EDA_DRAW_MODE_T trace_mode )
+{
+ wxSize size( aSize );
+
+ /* The chip is reduced to an oval tablet with size.y > size.x
+ * (Oval vertical orientation 0) */
+ if( size.x > size.y )
+ {
+ std::swap( size.x, size.y );
+ orient = AddAngles( orient, 900 );
+ }
+
+ sketchOval( pos, size, orient, -1 );
+}
+
+
+/**
+ * DXF round pad: always done in sketch mode; it could be filled but it isn't
+ * pretty if other kinds of pad aren't...
+ */
+void DXF_PLOTTER::FlashPadCircle( const wxPoint& pos, int diametre,
+ EDA_DRAW_MODE_T trace_mode )
+{
+ Circle( pos, diametre, NO_FILL );
+}
+
+
+/**
+ * DXF rectangular pad: alwayd done in sketch mode
+ */
+void DXF_PLOTTER::FlashPadRect( const wxPoint& pos, const wxSize& padsize,
+ double orient, EDA_DRAW_MODE_T trace_mode )
+{
+ wxASSERT( outputFile );
+ wxSize size;
+ int ox, oy, fx, fy;
+
+ size.x = padsize.x / 2;
+ size.y = padsize.y / 2;
+
+ if( size.x < 0 )
+ size.x = 0;
+ if( size.y < 0 )
+ size.y = 0;
+
+ // If a dimension is zero, the trace is reduced to 1 line
+ if( size.x == 0 )
+ {
+ ox = pos.x;
+ oy = pos.y - size.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ fx = pos.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+ FinishTo( wxPoint( fx, fy ) );
+ return;
+ }
+ if( size.y == 0 )
+ {
+ ox = pos.x - size.x;
+ oy = pos.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ fx = pos.x + size.x;
+ fy = pos.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+ FinishTo( wxPoint( fx, fy ) );
+ return;
+ }
+
+ ox = pos.x - size.x;
+ oy = pos.y - size.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+
+ fx = pos.x - size.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ fx = pos.x + size.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ fx = pos.x + size.x;
+ fy = pos.y - size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ FinishTo( wxPoint( ox, oy ) );
+}
+
+
+/**
+ * DXF trapezoidal pad: only sketch mode is supported
+ */
+void DXF_PLOTTER::FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode )
+{
+ wxPoint coord[4]; /* coord actual corners of a trapezoidal trace */
+
+ for( int ii = 0; ii < 4; ii++ )
+ {
+ coord[ii] = aCorners[ii];
+ RotatePoint( &coord[ii], aPadOrient );
+ coord[ii] += aPadPos;
+ }
+
+ // Plot edge:
+ MoveTo( coord[0] );
+ LineTo( coord[1] );
+ LineTo( coord[2] );
+ LineTo( coord[3] );
+ FinishTo( coord[0] );
+}
+
+/**
+ * Checks if a given string contains non-ASCII characters.
+ * FIXME: the performance of this code is really poor, but in this case it can be
+ * acceptable because the plot operation is not called very often.
+ * @param string String to check
+ * @return true if it contains some non-ASCII character, false if all characters are
+ * inside ASCII range (<=255).
+ */
+bool containsNonAsciiChars( const wxString& string )
+{
+ for( unsigned i = 0; i < string.length(); i++ )
+ {
+ wchar_t ch = string[i];
+ if( ch > 255 )
+ return true;
+ }
+ return false;
+}
+
+void DXF_PLOTTER::Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed )
+{
+ // Fix me: see how to use DXF text mode for multiline texts
+ if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
+ aMultilineAllowed = false; // the text has only one line.
+
+ if( textAsLines || containsNonAsciiChars( aText ) || aMultilineAllowed )
+ {
+ // output text as graphics.
+ // Perhaps multiline texts could be handled as DXF text entity
+ // but I do not want spend time about this (JPC)
+ PLOTTER::Text( aPos, aColor, aText, aOrient, aSize, aH_justify, aV_justify,
+ aWidth, aItalic, aBold, aMultilineAllowed );
+ }
+ else
+ {
+ /* Emit text as a text entity. This loses formatting and shape but it's
+ more useful as a CAD object */
+ DPOINT origin_dev = userToDeviceCoordinates( aPos );
+ SetColor( aColor );
+ wxString cname( ColorGetName( m_currentColor ) );
+ DPOINT size_dev = userToDeviceSize( aSize );
+ int h_code = 0, v_code = 0;
+ switch( aH_justify )
+ {
+ case GR_TEXT_HJUSTIFY_LEFT:
+ h_code = 0;
+ break;
+ case GR_TEXT_HJUSTIFY_CENTER:
+ h_code = 1;
+ break;
+ case GR_TEXT_HJUSTIFY_RIGHT:
+ h_code = 2;
+ break;
+ }
+ switch( aV_justify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP:
+ v_code = 3;
+ break;
+ case GR_TEXT_VJUSTIFY_CENTER:
+ v_code = 2;
+ break;
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ v_code = 1;
+ break;
+ }
+
+ // Position, size, rotation and alignment
+ // The two alignment point usages is somewhat idiot (see the DXF ref)
+ // Anyway since we don't use the fit/aligned options, they're the same
+ fprintf( outputFile,
+ " 0\n"
+ "TEXT\n"
+ " 7\n"
+ "%s\n" // Text style
+ " 8\n"
+ "%s\n" // Layer name
+ " 10\n"
+ "%g\n" // First point X
+ " 11\n"
+ "%g\n" // Second point X
+ " 20\n"
+ "%g\n" // First point Y
+ " 21\n"
+ "%g\n" // Second point Y
+ " 40\n"
+ "%g\n" // Text height
+ " 41\n"
+ "%g\n" // Width factor
+ " 50\n"
+ "%g\n" // Rotation
+ " 51\n"
+ "%g\n" // Oblique angle
+ " 71\n"
+ "%d\n" // Mirror flags
+ " 72\n"
+ "%d\n" // H alignment
+ " 73\n"
+ "%d\n", // V alignment
+ aBold ? (aItalic ? "KICADBI" : "KICADB")
+ : (aItalic ? "KICADI" : "KICAD"),
+ TO_UTF8( cname ),
+ origin_dev.x, origin_dev.x,
+ origin_dev.y, origin_dev.y,
+ size_dev.y, fabs( size_dev.x / size_dev.y ),
+ aOrient / 10.0,
+ aItalic ? DXF_OBLIQUE_ANGLE : 0,
+ size_dev.x < 0 ? 2 : 0, // X mirror flag
+ h_code, v_code );
+
+ /* There are two issue in emitting the text:
+ - Our overline character (~) must be converted to the appropriate
+ control sequence %%O or %%o
+ - Text encoding in DXF is more or less unspecified since depends on
+ the DXF declared version, the acad version reading it *and* some
+ system variables to be put in the header handled only by newer acads
+ Also before R15 unicode simply is not supported (you need to use
+ bigfonts which are a massive PITA). Common denominator solution:
+ use Latin1 (and however someone could choke on it, anyway). Sorry
+ for the extended latin people. If somewant want to try fixing this
+ recent version seems to use UTF-8 (and not UCS2 like the rest of
+ Windows)
+
+ XXX Actually there is a *third* issue: older DXF formats are limited
+ to 255 bytes records (it was later raised to 2048); since I'm lazy
+ and text so long is not probable I just don't implement this rule.
+ If someone is interested in fixing this, you have to emit the first
+ partial lines with group code 3 (max 250 bytes each) and then finish
+ with a group code 1 (less than 250 bytes). The DXF refs explains it
+ in no more details...
+ */
+
+ bool overlining = false;
+ fputs( " 1\n", outputFile );
+ for( unsigned i = 0; i < aText.length(); i++ )
+ {
+ /* Here I do a bad thing: writing the output one byte at a time!
+ but today I'm lazy and I have no idea on how to coerce a Unicode
+ wxString to spit out latin1 encoded text ...
+
+ Atleast stdio is *supposed* to do output buffering, so there is
+ hope is not too slow */
+ wchar_t ch = aText[i];
+ if( ch > 255 )
+ {
+ // I can't encode this...
+ putc( '?', outputFile );
+ }
+ else
+ {
+ if( ch == '~' )
+ {
+ // Handle the overline toggle
+ fputs( overlining ? "%%o" : "%%O", outputFile );
+ overlining = !overlining;
+ }
+ else
+ {
+ putc( ch, outputFile );
+ }
+ }
+ }
+ putc( '\n', outputFile );
+ }
+}
+
diff --git a/common/common_plotGERBER_functions.cpp b/common/common_plotGERBER_functions.cpp
new file mode 100644
index 0000000..914388d
--- /dev/null
+++ b/common/common_plotGERBER_functions.cpp
@@ -0,0 +1,594 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file common_plotGERBER_functions.cpp
+ * @brief Common GERBER plot routines.
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <common.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <kicad_string.h>
+
+#include <build_version.h>
+
+
+GERBER_PLOTTER::GERBER_PLOTTER()
+{
+ workFile = 0;
+ finalFile = 0;
+ currentAperture = apertures.end();
+
+ // number of digits after the point (number of digits of the mantissa
+ // Be carefull: the Gerber coordinates are stored in an integer
+ // so 6 digits (inches) or 5 digits (mm) is a good value
+ // To avoid overflow, 7 digits (inches) or 6 digits is a max.
+ // with lower values than 6 digits (inches) or 5 digits (mm),
+ // Creating self-intersecting polygons from non-intersecting polygons
+ // happen easily.
+ m_gerberUnitInch = false;
+ m_gerberUnitFmt = 6;
+}
+
+
+void GERBER_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror )
+{
+ wxASSERT( aMirror == false );
+ m_plotMirror = false;
+ plotOffset = aOffset;
+ wxASSERT( aScale == 1 ); // aScale parameter is not used in Gerber
+ plotScale = 1; // Plot scale is *always* 1.0
+
+ m_IUsPerDecimil = aIusPerDecimil;
+ // gives now a default value to iuPerDeviceUnit (because the units of the caller is now known)
+ // which could be modified later by calling SetGerberCoordinatesFormat()
+ iuPerDeviceUnit = pow( 10.0, m_gerberUnitFmt ) / ( m_IUsPerDecimil * 10000.0 );
+
+ // We don't handle the filmbox, and it's more useful to keep the
+ // origin at the origin
+ paperSize.x = 0;
+ paperSize.y = 0;
+ SetDefaultLineWidth( 100 * aIusPerDecimil ); // Arbitrary default
+}
+
+
+void GERBER_PLOTTER::SetGerberCoordinatesFormat( int aResolution, bool aUseInches )
+{
+ m_gerberUnitInch = aUseInches;
+ m_gerberUnitFmt = aResolution;
+
+ iuPerDeviceUnit = pow( 10.0, m_gerberUnitFmt ) / ( m_IUsPerDecimil * 10000.0 );
+
+ if( ! m_gerberUnitInch )
+ iuPerDeviceUnit *= 25.4; // gerber output in mm
+}
+
+
+void GERBER_PLOTTER::emitDcode( const DPOINT& pt, int dcode )
+{
+
+ fprintf( outputFile, "X%dY%dD%02d*\n",
+ KiROUND( pt.x ), KiROUND( pt.y ), dcode );
+}
+
+
+bool GERBER_PLOTTER::StartPlot()
+{
+ wxASSERT( outputFile );
+
+ finalFile = outputFile; // the actual gerber file will be created later
+
+ // Create a temporary filename to store gerber file
+ // note tmpfile() does not work under Vista and W7 in user mode
+ m_workFilename = filename + wxT(".tmp");
+ workFile = wxFopen( m_workFilename, wxT( "wt" ));
+ outputFile = workFile;
+ wxASSERT( outputFile );
+
+ if( outputFile == NULL )
+ return false;
+
+ for( unsigned ii = 0; ii < m_headerExtraLines.GetCount(); ii++ )
+ {
+ if( ! m_headerExtraLines[ii].IsEmpty() )
+ fprintf( outputFile, "%s\n", TO_UTF8( m_headerExtraLines[ii] ) );
+ }
+
+ // Set coordinate format to 3.6 or 4.5 absolute, leading zero omitted
+ // the number of digits for the integer part of coordintes is needed
+ // in gerber format, but is not very important when omitting leading zeros
+ // It is fixed here to 3 (inch) or 4 (mm), but is not actually used
+ int leadingDigitCount = m_gerberUnitInch ? 3 : 4;
+
+ fprintf( outputFile, "%%FSLAX%d%dY%d%d*%%\n",
+ leadingDigitCount, m_gerberUnitFmt,
+ leadingDigitCount, m_gerberUnitFmt );
+ fprintf( outputFile,
+ "G04 Gerber Fmt %d.%d, Leading zero omitted, Abs format (unit %s)*\n",
+ leadingDigitCount, m_gerberUnitFmt,
+ m_gerberUnitInch ? "inch" : "mm" );
+
+ wxString Title = creator + wxT( " " ) + GetBuildVersion();
+ fprintf( outputFile, "G04 Created by KiCad (%s) date %s*\n",
+ TO_UTF8( Title ), TO_UTF8( DateAndTime() ) );
+
+ /* Mass parameter: unit = INCHES/MM */
+ if( m_gerberUnitInch )
+ fputs( "%MOIN*%\n", outputFile );
+ else
+ fputs( "%MOMM*%\n", outputFile );
+
+ // Be sure the usual dark polarity is selected:
+ fputs( "%LPD*%\n", outputFile );
+
+ // Specify linear interpol (G01):
+ fputs( "G01*\n", outputFile );
+
+ fputs( "G04 APERTURE LIST*\n", outputFile );
+ /* Select the default aperture */
+ SetCurrentLineWidth( -1 );
+
+ return true;
+}
+
+
+bool GERBER_PLOTTER::EndPlot()
+{
+ char line[1024];
+ wxString msg;
+
+ wxASSERT( outputFile );
+
+ /* Outfile is actually a temporary file i.e. workFile */
+ fputs( "M02*\n", outputFile );
+ fflush( outputFile );
+
+ fclose( workFile );
+ workFile = wxFopen( m_workFilename, wxT( "rt" ));
+ wxASSERT( workFile );
+ outputFile = finalFile;
+
+ // Placement of apertures in RS274X
+ while( fgets( line, 1024, workFile ) )
+ {
+ fputs( line, outputFile );
+
+ if( strcmp( strtok( line, "\n\r" ), "G04 APERTURE LIST*" ) == 0 )
+ {
+ writeApertureList();
+ fputs( "G04 APERTURE END LIST*\n", outputFile );
+ }
+ }
+
+ fclose( workFile );
+ fclose( finalFile );
+ ::wxRemoveFile( m_workFilename );
+ outputFile = 0;
+
+ return true;
+}
+
+
+void GERBER_PLOTTER::SetDefaultLineWidth( int width )
+{
+ defaultPenWidth = width;
+ currentAperture = apertures.end();
+}
+
+
+void GERBER_PLOTTER::SetCurrentLineWidth( int width )
+{
+ int pen_width;
+
+ if( width > 0 )
+ pen_width = width;
+ else
+ pen_width = defaultPenWidth;
+
+ selectAperture( wxSize( pen_width, pen_width ), APERTURE::Plotting );
+ currentPenWidth = pen_width;
+}
+
+
+std::vector<APERTURE>::iterator GERBER_PLOTTER::getAperture( const wxSize& size,
+ APERTURE::APERTURE_TYPE type )
+{
+ int last_D_code = 9;
+
+ // Search an existing aperture
+ std::vector<APERTURE>::iterator tool = apertures.begin();
+
+ while( tool != apertures.end() )
+ {
+ last_D_code = tool->DCode;
+
+ if( (tool->Type == type) && (tool->Size == size) )
+ return tool;
+
+ tool++;
+ }
+
+ // Allocate a new aperture
+ APERTURE new_tool;
+ new_tool.Size = size;
+ new_tool.Type = type;
+ new_tool.DCode = last_D_code + 1;
+ apertures.push_back( new_tool );
+ return apertures.end() - 1;
+}
+
+
+void GERBER_PLOTTER::selectAperture( const wxSize& size,
+ APERTURE::APERTURE_TYPE type )
+{
+ wxASSERT( outputFile );
+
+ if( ( currentAperture == apertures.end() )
+ || ( currentAperture->Type != type )
+ || ( currentAperture->Size != size ) )
+ {
+ // Pick an existing aperture or create a new one
+ currentAperture = getAperture( size, type );
+ fprintf( outputFile, "D%d*\n", currentAperture->DCode );
+ }
+}
+
+
+void GERBER_PLOTTER::writeApertureList()
+{
+ wxASSERT( outputFile );
+ char cbuf[1024];
+
+ // Init
+ for( std::vector<APERTURE>::iterator tool = apertures.begin();
+ tool != apertures.end(); tool++ )
+ {
+ // apertude sizes are in inch or mm, regardless the
+ // coordinates format
+ double fscale = 0.0001 * plotScale / m_IUsPerDecimil; // inches
+
+ if(! m_gerberUnitInch )
+ fscale *= 25.4; // size in mm
+
+ char* text = cbuf + sprintf( cbuf, "%%ADD%d", tool->DCode );
+
+ /* Please note: the Gerber specs for mass parameters say that
+ exponential syntax is *not* allowed and the decimal point should
+ also be always inserted. So the %g format is ruled out, but %f is fine
+ (the # modifier forces the decimal point). Sadly the %f formatter
+ can't remove trailing zeros but thats not a problem, since nothing
+ forbid it (the file is only slightly longer) */
+
+ switch( tool->Type )
+ {
+ case APERTURE::Circle:
+ sprintf( text, "C,%#f*%%\n", tool->Size.x * fscale );
+ break;
+
+ case APERTURE::Rect:
+ sprintf( text, "R,%#fX%#f*%%\n",
+ tool->Size.x * fscale,
+ tool->Size.y * fscale );
+ break;
+
+ case APERTURE::Plotting:
+ sprintf( text, "C,%#f*%%\n", tool->Size.x * fscale );
+ break;
+
+ case APERTURE::Oval:
+ sprintf( text, "O,%#fX%#f*%%\n",
+ tool->Size.x * fscale,
+ tool->Size.y * fscale );
+ break;
+ }
+
+ fputs( cbuf, outputFile );
+ }
+}
+
+
+void GERBER_PLOTTER::PenTo( const wxPoint& aPos, char plume )
+{
+ DPOINT pos_dev = userToDeviceCoordinates( aPos );
+
+ switch( plume )
+ {
+ case 'Z':
+ break;
+
+ case 'U':
+ emitDcode( pos_dev, 2 );
+ break;
+
+ case 'D':
+ emitDcode( pos_dev, 1 );
+ }
+
+ penState = plume;
+}
+
+
+void GERBER_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width )
+{
+ std::vector< wxPoint > cornerList;
+
+ // Build corners list
+ cornerList.push_back( p1 );
+ wxPoint corner(p1.x, p2.y);
+ cornerList.push_back( corner );
+ cornerList.push_back( p2 );
+ corner.x = p2.x;
+ corner.y = p1.y;
+ cornerList.push_back( corner );
+ cornerList.push_back( p1 );
+
+ PlotPoly( cornerList, fill, width );
+}
+
+
+void GERBER_PLOTTER::Circle( const wxPoint& aCenter, int aDiameter, FILL_T aFill, int aWidth )
+{
+ Arc( aCenter, 0, 3600, aDiameter / 2, aFill, aWidth );
+}
+
+
+void GERBER_PLOTTER::Arc( const wxPoint& aCenter, double aStAngle, double aEndAngle,
+ int aRadius, FILL_T aFill, int aWidth )
+{
+ wxASSERT( outputFile );
+ wxPoint start, end;
+ start.x = aCenter.x + KiROUND( cosdecideg( aRadius, aStAngle ) );
+ start.y = aCenter.y - KiROUND( sindecideg( aRadius, aStAngle ) );
+ SetCurrentLineWidth( aWidth );
+ MoveTo( start );
+ end.x = aCenter.x + KiROUND( cosdecideg( aRadius, aEndAngle ) );
+ end.y = aCenter.y - KiROUND( sindecideg( aRadius, aEndAngle ) );
+ DPOINT devEnd = userToDeviceCoordinates( end );
+ DPOINT devCenter = userToDeviceCoordinates( aCenter ) - userToDeviceCoordinates( start );
+
+ fprintf( outputFile, "G75*\n" ); // Multiquadrant mode
+
+ if( aStAngle < aEndAngle )
+ fprintf( outputFile, "G03" );
+ else
+ fprintf( outputFile, "G02" );
+
+ fprintf( outputFile, "X%dY%dI%dJ%dD01*\n",
+ KiROUND( devEnd.x ), KiROUND( devEnd.y ),
+ KiROUND( devCenter.x ), KiROUND( devCenter.y ) );
+ fprintf( outputFile, "G01*\n" ); // Back to linear interp.
+}
+
+
+void GERBER_PLOTTER:: PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth )
+{
+ if( aCornerList.size() <= 1 )
+ return;
+
+ // Gerber format does not know filled polygons with thick outline
+ // Therefore, to plot a filled polygon with outline having a thickness,
+ // one should plot outline as thick segments
+
+ SetCurrentLineWidth( aWidth );
+
+ if( aFill )
+ {
+ fputs( "G36*\n", outputFile );
+
+ MoveTo( aCornerList[0] );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ LineTo( aCornerList[ii] );
+
+ FinishTo( aCornerList[0] );
+ fputs( "G37*\n", outputFile );
+ }
+
+ if( aWidth > 0 )
+ {
+ MoveTo( aCornerList[0] );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ LineTo( aCornerList[ii] );
+
+ // Ensure the thick outline is closed for filled polygons
+ // (if not filled, could be only a polyline)
+ if( aFill && ( aCornerList[aCornerList.size()-1] != aCornerList[0] ) )
+ LineTo( aCornerList[0] );
+
+ PenFinish();
+ }
+}
+
+
+void GERBER_PLOTTER::FlashPadCircle( const wxPoint& pos, int diametre, EDA_DRAW_MODE_T trace_mode )
+{
+ wxSize size( diametre, diametre );
+
+ if( trace_mode == SKETCH )
+ {
+ SetCurrentLineWidth( -1 );
+ Circle( pos, diametre - currentPenWidth, NO_FILL );
+ }
+ else
+ {
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ selectAperture( size, APERTURE::Circle );
+ emitDcode( pos_dev, 3 );
+ }
+}
+
+
+void GERBER_PLOTTER::FlashPadOval( const wxPoint& pos, const wxSize& aSize, double orient,
+ EDA_DRAW_MODE_T trace_mode )
+{
+ int x0, y0, x1, y1, delta;
+ wxSize size( aSize );
+
+ /* Plot a flashed shape. */
+ if( ( orient == 0 || orient == 900 || orient == 1800 || orient == 2700 )
+ && trace_mode == FILLED )
+ {
+ if( orient == 900 || orient == 2700 ) /* orientation turned 90 deg. */
+ std::swap( size.x, size.y );
+
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ selectAperture( size, APERTURE::Oval );
+ emitDcode( pos_dev, 3 );
+ }
+ else /* Plot pad as a segment. */
+ {
+ if( size.x > size.y )
+ {
+ std::swap( size.x, size.y );
+
+ if( orient < 2700 )
+ orient += 900;
+ else
+ orient -= 2700;
+ }
+
+ if( trace_mode == FILLED )
+ {
+ /* XXX to do: use an aperture macro to declare the rotated pad */
+ /* The pad is reduced to an oval with dy > dx */
+ delta = size.y - size.x;
+ x0 = 0;
+ y0 = -delta / 2;
+ x1 = 0;
+ y1 = delta / 2;
+ RotatePoint( &x0, &y0, orient );
+ RotatePoint( &x1, &y1, orient );
+ ThickSegment( wxPoint( pos.x + x0, pos.y + y0 ),
+ wxPoint( pos.x + x1, pos.y + y1 ),
+ size.x, trace_mode );
+ }
+ else
+ {
+ sketchOval( pos, size, orient, -1 );
+ }
+ }
+}
+
+
+void GERBER_PLOTTER::FlashPadRect( const wxPoint& pos, const wxSize& aSize,
+ double orient, EDA_DRAW_MODE_T trace_mode )
+
+{
+ wxSize size( aSize );
+
+ // Plot as an aperture flash
+ switch( int( orient ) )
+ {
+ case 900:
+ case 2700: // rotation of 90 degrees or 270 swaps sizes
+ std::swap( size.x, size.y );
+
+ // Pass through
+ case 0:
+ case 1800:
+ if( trace_mode == SKETCH )
+ {
+ SetCurrentLineWidth( -1 );
+ Rect( wxPoint( pos.x - (size.x - currentPenWidth) / 2,
+ pos.y - (size.y - currentPenWidth) / 2 ),
+ wxPoint( pos.x + (size.x - currentPenWidth) / 2,
+ pos.y + (size.y - currentPenWidth) / 2 ),
+ NO_FILL );
+ }
+ else
+ {
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ selectAperture( size, APERTURE::Rect );
+ emitDcode( pos_dev, 3 );
+ }
+ break;
+
+ default: // plot pad shape as polygon
+ {
+ // XXX to do: use an aperture macro to declare the rotated pad
+ wxPoint coord[4];
+ // coord[0] is assumed the lower left
+ // coord[1] is assumed the upper left
+ // coord[2] is assumed the upper right
+ // coord[3] is assumed the lower right
+
+ /* Trace the outline. */
+ coord[0].x = -size.x/2; // lower left
+ coord[0].y = size.y/2;
+ coord[1].x = -size.x/2; // upper left
+ coord[1].y = -size.y/2;
+ coord[2].x = size.x/2; // upper right
+ coord[2].y = -size.y/2;
+ coord[3].x = size.x/2; // lower right
+ coord[3].y = size.y/2;
+
+ FlashPadTrapez( pos, coord, orient, trace_mode );
+ }
+ break;
+ }
+}
+
+
+void GERBER_PLOTTER::FlashPadTrapez( const wxPoint& aPadPos, const wxPoint* aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode )
+
+{
+ // XXX to do: use an aperture macro to declare the pad
+ // polygon corners list
+ std::vector< wxPoint > cornerList;
+
+ for( int ii = 0; ii < 4; ii++ )
+ cornerList.push_back( aCorners[ii] );
+
+ // Draw the polygon and fill the interior as required
+ for( unsigned ii = 0; ii < 4; ii++ )
+ {
+ RotatePoint( &cornerList[ii], aPadOrient );
+ cornerList[ii] += aPadPos;
+ }
+
+ // Close the polygon
+ cornerList.push_back( cornerList[0] );
+
+ SetCurrentLineWidth( -1 );
+ PlotPoly( cornerList, aTrace_Mode==FILLED ? FILLED_SHAPE : NO_FILL );
+}
+
+
+void GERBER_PLOTTER::SetLayerPolarity( bool aPositive )
+{
+ if( aPositive )
+ fprintf( outputFile, "%%LPD*%%\n" );
+ else
+ fprintf( outputFile, "%%LPC*%%\n" );
+}
diff --git a/common/common_plotHPGL_functions.cpp b/common/common_plotHPGL_functions.cpp
new file mode 100644
index 0000000..ba99b67
--- /dev/null
+++ b/common/common_plotHPGL_functions.cpp
@@ -0,0 +1,740 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file common_plotHPGL_functions.cpp
+ * @brief KiCad: Common plot HPGL Routines
+ * Filled primitive are not supported, but some could be using HPGL/2
+ * Since this plot engine is mostly intended for import in external programs,
+ * sadly HPGL/2 isn't supported a lot... some of the primitives use overlapped
+ * strokes to fill the shape
+ */
+
+/* Some HPGL commands:
+ * Note: the HPGL unit is 25 micrometers
+ * All commands MUST be terminated by a semi-colon or a linefeed.
+ * Spaces can NOT be substituted for required commas in the syntax of a command.
+ *
+ *
+ * AA (Arc Absolute): Angle is a floating point # (requires non integer value)
+ * Draws an arc with the center at (X,Y).
+ * A positive angle creates a counter-clockwise arc.
+ * If the chord angle is specified,
+ * this will be the number of degrees used for stepping around the arc.
+ * If no value is given then a default value of five degrees is used.
+ * AA x, y, a {,b};
+ *
+ * AR (Arc Relative):
+ * AR Dx, Dy, a {, b};
+ *
+ * CA (Alternate Character Set):
+ * CA {n};
+ *
+ * CI (Circle):
+ * CI r {,b};
+ *
+ * CP (Character Plot):
+ * CP {h, v};
+ * h [-127.9999 .. 127.9999] Anzahl der Zeichen horizontal
+ * v [-127.9999 .. 127.9999] Anzahl der Zeichen vertikal
+ *
+ * CS (Standard Character Set):
+ * CS {n};
+ *
+ * DR (Relative Direction for Label Text):
+ * DR s, a;
+ *
+ * DI (Absolute Direction for Label Text):
+ * DI {s, a};
+ *
+ * DT (Define Terminator - this character becomes unavailable except to terminate a label string.
+ * Default is ^C control-C):
+ * DT t;
+ *
+ * EA (rEctangle Absolute - Unfilled, from current position to diagonal x,y):
+ * EA x, y;
+ *
+ * ER (rEctangle Relative - Unfilled, from current position to diagonal x,y):
+ * ER x,y;
+ *
+ * FT (Fill Type):
+ * FT {s {,l {a}}};
+ *
+ * IM (Input Mask):
+ * IM {f};
+ *
+ * IN (Initialize): This command instructs the controller to begin processing the HPGL plot file.
+ * Without this, the commands in the file are received but never executed.
+ * If multiple IN s are found during execution of the file,
+ * the controller performs a Pause/Cancel operation.
+ * All motion from the previous job, yet to be executed, is lost,
+ * and the new information is executed.
+ * IN;
+ *
+ * IP Input P1 and P2:
+ * IP {P1x, P1y {, P2x, P2y}};
+ *
+ * IW (Input Window):
+ * IW {XUL, YUL, XOR, YOR};
+ *
+ * LB (Label):
+ * LB c1 .. cn t;
+ *
+ * PA (Plot Absolute): Moves to an absolute HPGL position and sets absolute mode for
+ * future PU and PD commands. If no arguments follow the command,
+ * only absolute mode is set.
+ * PA {x1, y1 {{PU|PD|,} ..., ..., xn, yn}};
+ * P1x, P1y, P2x, P2y [Integer in ASCII]
+ *
+ * PD (Pen Down): Executes <current pen> pen then moves to the requested position
+ * if one is specified. This position is dependent on whether absolute
+ * or relative mode is set. This command performs no motion in 3-D mode,
+ * but the outputs and feedrates are affected.
+ * PD {x, y};
+ *
+ * PR (Plot Relative): Moves to the relative position specified and sets relative mode
+ * for future PU and PD commands.
+ * If no arguments follow the command, only relative mode is set.
+ * PR {Dx1, Dy1 {{PU|PD|,} ..., ..., Dxn, Dyn}};
+ *
+ * PS (Paper Size):
+ * PS {n};
+ *
+ * PT (Pen Thickness):
+ * PT {l};
+ *
+ * PU (Pen Up): Executes <current pen> pen then moves to the requested position
+ * if one is specified. This position is dependent on whether absolute
+ * or relative mode is set.
+ * This command performs no motion in 3-D mode, but the outputs
+ * and feedrates are affected.
+ * PU {x, y};
+ *
+ * RA (Rectangle Absolute - Filled, from current position to diagonal x,y):
+ * RA x, y;
+ *
+ * RO (Rotate Coordinate System):
+ * RO;
+ *
+ * RR (Rectangle Relative - Filled, from current position to diagonal x,y):
+ * RR x, y;
+ *
+ * SA (Select Alternate Set):
+ * SA;
+ *
+ * SC (Scale):
+ * SC {Xmin, Xmax, Ymin, Ymax};
+ *
+ * SI (Absolute Character Size):
+ * SI b, h;
+ * b [-127.9999 .. 127.9999, keine 0]
+ * h [-127.9999 .. 127.9999, keine 0]
+ *
+ * SL (Character Slant):
+ * SL {a};
+ * a [-3.5 .. -0.5, 0.5 .. 3.5]
+*
+ * SP (Select Pen): Selects a new pen or tool for use.
+ * If no pen number or a value of zero is given,
+ * the controller performs an EOF (end of file command).
+ * Once an EOF is performed, no motion is executed,
+ * until a new IN command is received.
+ * SP n;
+ *
+ * SR (Relative Character Size):
+ * SR {b, h};
+ * b [-127.9999 .. 127.9999, keine 0]
+ * h [-127.9999 .. 127.9999, keine 0]
+ *
+ * SS (Select Standard Set):
+ * SS;
+ *
+ * TL (Tick Length):
+ * TL {tp {, tm}};
+ *
+ * UC (User Defined Character):
+ * UC {i,} x1, y1, {i,} x2, y2, ... {i,} xn, yn;
+ *
+ * VS (Velocity Select):
+ * VS {v {, n}};
+ * v [1 .. 40]
+ * n [1 .. 8, je nach Ausstattung]
+ *
+ * XT (X Tick):
+ * XT;
+ *
+ * YT (Y Tick):
+ * YT;
+ */
+
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <kicad_string.h>
+
+// HPGL scale factor (1 PLU = 1/40mm = 25 micrometers)
+static const double PLUsPERDECIMIL = 0.102041;
+
+HPGL_PLOTTER::HPGL_PLOTTER()
+{
+ SetPenSpeed( 40 ); // Default pen speed = 40 cm/s; Pen speed is *always* in cm
+ SetPenNumber( 1 ); // Default pen num = 1
+ SetPenDiameter( 0.0 );
+ SetPenOverlap( 0.0 );
+}
+
+void HPGL_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror )
+{
+ plotOffset = aOffset;
+ plotScale = aScale;
+ m_IUsPerDecimil = aIusPerDecimil;
+ iuPerDeviceUnit = PLUsPERDECIMIL / aIusPerDecimil;
+ /* Compute the paper size in IUs */
+ paperSize = pageInfo.GetSizeMils();
+ paperSize.x *= 10.0 * aIusPerDecimil;
+ paperSize.y *= 10.0 * aIusPerDecimil;
+ SetDefaultLineWidth( 0 ); // HPGL has pen sizes instead
+ m_plotMirror = aMirror;
+}
+
+
+/**
+ * At the start of the HPGL plot pen speed and number are requested
+ */
+bool HPGL_PLOTTER::StartPlot()
+{
+ wxASSERT( outputFile );
+ fprintf( outputFile, "IN;VS%d;PU;PA;SP%d;\n", penSpeed, penNumber );
+ return true;
+}
+
+
+/**
+ * HPGL end of plot: pen return and release
+ */
+bool HPGL_PLOTTER::EndPlot()
+{
+ wxASSERT( outputFile );
+ fputs( "PU;PA;SP0;\n", outputFile );
+ fclose( outputFile );
+ outputFile = NULL;
+ return true;
+}
+
+
+/**
+ * HPGL rectangle: fill not supported
+ */
+void HPGL_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width )
+{
+ wxASSERT( outputFile );
+ DPOINT p2dev = userToDeviceCoordinates( p2 );
+ MoveTo( p1 );
+ fprintf( outputFile, "EA %.0f,%.0f;\n", p2dev.x, p2dev.y );
+ PenFinish();
+}
+
+
+/**
+ * HPGL circle: fill not supported
+ */
+void HPGL_PLOTTER::Circle( const wxPoint& centre, int diameter, FILL_T fill,
+ int width )
+{
+ wxASSERT( outputFile );
+ double radius = userToDeviceSize( diameter / 2 );
+
+ if( radius > 0 )
+ {
+ MoveTo( centre );
+ fprintf( outputFile, "CI %g;\n", radius );
+ PenFinish();
+ }
+}
+
+
+/**
+ * HPGL polygon: fill not supported (but closed, at least)
+ */
+void HPGL_PLOTTER::PlotPoly( const std::vector<wxPoint>& aCornerList,
+ FILL_T aFill, int aWidth )
+{
+ if( aCornerList.size() <= 1 )
+ return;
+
+ SetCurrentLineWidth( aWidth );
+
+ MoveTo( aCornerList[0] );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ LineTo( aCornerList[ii] );
+
+ // Close polygon if filled.
+ if( aFill )
+ {
+ int ii = aCornerList.size() - 1;
+
+ if( aCornerList[ii] != aCornerList[0] )
+ LineTo( aCornerList[0] );
+ }
+
+ PenFinish();
+}
+
+
+/**
+ * Pen control logic (remove redundant pen activations)
+ */
+void HPGL_PLOTTER::penControl( char plume )
+{
+ wxASSERT( outputFile );
+
+ switch( plume )
+ {
+ case 'U':
+
+ if( penState != 'U' )
+ {
+ fputs( "PU;", outputFile );
+ penState = 'U';
+ }
+
+ break;
+
+ case 'D':
+
+ if( penState != 'D' )
+ {
+ fputs( "PD;", outputFile );
+ penState = 'D';
+ }
+
+ break;
+
+ case 'Z':
+ fputs( "PU;", outputFile );
+ penState = 'U';
+ penLastpos.x = -1;
+ penLastpos.y = -1;
+ break;
+ }
+}
+
+
+void HPGL_PLOTTER::PenTo( const wxPoint& pos, char plume )
+{
+ wxASSERT( outputFile );
+
+ if( plume == 'Z' )
+ {
+ penControl( 'Z' );
+ return;
+ }
+
+ penControl( plume );
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+
+ if( penLastpos != pos )
+ fprintf( outputFile, "PA %.0f,%.0f;\n", pos_dev.x, pos_dev.y );
+
+ penLastpos = pos;
+}
+
+
+/**
+ * HPGL supports dashed lines
+ */
+void HPGL_PLOTTER::SetDash( bool dashed )
+{
+ wxASSERT( outputFile );
+
+ if( dashed )
+ fputs( "LI 2;\n", outputFile );
+ else
+ fputs( "LI;\n", outputFile );
+}
+
+
+void HPGL_PLOTTER::ThickSegment( const wxPoint& start, const wxPoint& end,
+ int width, EDA_DRAW_MODE_T tracemode )
+{
+ wxPoint center;
+ wxSize size;
+
+ // Suppress overlap if pen is too big
+ if( penDiameter >= width )
+ {
+ MoveTo( start );
+ FinishTo( end );
+ }
+ else
+ segmentAsOval( start, end, width, tracemode );
+}
+
+
+/* Plot an arc:
+ * Center = center coord
+ * Stangl, endAngle = angle of beginning and end
+ * Radius = radius of the arc
+ * Command
+ * PU PY x, y; PD start_arc_X AA, start_arc_Y, angle, NbSegm; PU;
+ * Or PU PY x, y; PD start_arc_X AA, start_arc_Y, angle, PU;
+ */
+void HPGL_PLOTTER::Arc( const wxPoint& centre, double StAngle, double EndAngle, int radius,
+ FILL_T fill, int width )
+{
+ wxASSERT( outputFile );
+ double angle;
+
+ if( radius <= 0 )
+ return;
+
+ DPOINT centre_dev = userToDeviceCoordinates( centre );
+
+ if( m_plotMirror )
+ angle = StAngle - EndAngle;
+ else
+ angle = EndAngle - StAngle;
+
+ NORMALIZE_ANGLE_180( angle );
+ angle /= 10;
+
+ // Calculate arc start point:
+ wxPoint cmap;
+ cmap.x = centre.x + KiROUND( cosdecideg( radius, StAngle ) );
+ cmap.y = centre.y - KiROUND( sindecideg( radius, StAngle ) );
+ DPOINT cmap_dev = userToDeviceCoordinates( cmap );
+
+ fprintf( outputFile,
+ "PU;PA %.0f,%.0f;PD;AA %.0f,%.0f,",
+ cmap_dev.x, cmap_dev.y,
+ centre_dev.x, centre_dev.y );
+ fprintf( outputFile, "%.0f", angle );
+ fprintf( outputFile, ";PU;\n" );
+ PenFinish();
+}
+
+
+/* Plot oval pad.
+ */
+void HPGL_PLOTTER::FlashPadOval( const wxPoint& pos, const wxSize& aSize, double orient,
+ EDA_DRAW_MODE_T trace_mode )
+{
+ int deltaxy, cx, cy;
+ wxSize size( aSize );
+
+ /* The pad is reduced to an oval with size.y > size.x
+ * (Oval vertical orientation 0)
+ */
+ if( size.x > size.y )
+ {
+ std::swap( size.x, size.y );
+ orient = AddAngles( orient, 900 );
+ }
+
+ deltaxy = size.y - size.x; // distance between centers of the oval
+
+ if( trace_mode == FILLED )
+ {
+ FlashPadRect( pos, wxSize( size.x, deltaxy + KiROUND( penDiameter ) ),
+ orient, trace_mode );
+ cx = 0; cy = deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ FlashPadCircle( wxPoint( cx + pos.x, cy + pos.y ), size.x, trace_mode );
+ cx = 0; cy = -deltaxy / 2;
+ RotatePoint( &cx, &cy, orient );
+ FlashPadCircle( wxPoint( cx + pos.x, cy + pos.y ), size.x, trace_mode );
+ }
+ else // Plot in SKETCH mode.
+ {
+ sketchOval( pos, size, orient, KiROUND( penDiameter ) );
+ }
+}
+
+
+/* Plot round pad or via.
+ */
+void HPGL_PLOTTER::FlashPadCircle( const wxPoint& pos, int diametre,
+ EDA_DRAW_MODE_T trace_mode )
+{
+ wxASSERT( outputFile );
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+
+ int delta = KiROUND( penDiameter - penOverlap );
+ int radius = ( diametre - KiROUND( penDiameter ) ) / 2;
+
+ if( radius < 0 )
+ radius = 0;
+
+ double rsize = userToDeviceSize( radius );
+
+ fprintf( outputFile, "PA %.0f,%.0f;CI %.0f;\n",
+ pos_dev.x, pos_dev.y, rsize );
+
+ if( trace_mode == FILLED ) // Plot in filled mode.
+ {
+ if( delta > 0 )
+ {
+ while( (radius -= delta ) >= 0 )
+ {
+ rsize = userToDeviceSize( radius );
+ fprintf( outputFile, "PA %.0f,%.0f;CI %.0f;\n",
+ pos_dev.x, pos_dev.y, rsize );
+ }
+ }
+ }
+
+ PenFinish();
+}
+
+
+void HPGL_PLOTTER::FlashPadRect( const wxPoint& pos, const wxSize& padsize,
+ double orient, EDA_DRAW_MODE_T trace_mode )
+{
+ wxASSERT( outputFile );
+ wxSize size;
+ int delta;
+ int ox, oy, fx, fy;
+
+ size.x = padsize.x / 2;
+ size.y = padsize.y / 2;
+
+ size.x = (padsize.x - (int) penDiameter) / 2;
+ size.y = (padsize.y - (int) penDiameter) / 2;
+
+ if( size.x < 0 )
+ size.x = 0;
+
+ if( size.y < 0 )
+ size.y = 0;
+
+ // If a dimension is zero, the trace is reduced to 1 line.
+ if( size.x == 0 )
+ {
+ ox = pos.x;
+ oy = pos.y - size.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ fx = pos.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+ FinishTo( wxPoint( fx, fy ) );
+ return;
+ }
+
+ if( size.y == 0 )
+ {
+ ox = pos.x - size.x;
+ oy = pos.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ fx = pos.x + size.x;
+ fy = pos.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+ FinishTo( wxPoint( fx, fy ) );
+ return;
+ }
+
+ ox = pos.x - size.x;
+ oy = pos.y - size.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+
+ fx = pos.x - size.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ fx = pos.x + size.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ fx = pos.x + size.x;
+ fy = pos.y - size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ FinishTo( wxPoint( ox, oy ) );
+
+ if( trace_mode == FILLED )
+ {
+ // Plot in filled mode.
+ delta = (int) (penDiameter - penOverlap);
+
+ if( delta > 0 )
+ while( (size.x > 0) && (size.y > 0) )
+ {
+ size.x -= delta;
+ size.y -= delta;
+
+ if( size.x < 0 )
+ size.x = 0;
+
+ if( size.y < 0 )
+ size.y = 0;
+
+ ox = pos.x - size.x;
+ oy = pos.y - size.y;
+ RotatePoint( &ox, &oy, pos.x, pos.y, orient );
+ MoveTo( wxPoint( ox, oy ) );
+
+ fx = pos.x - size.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ fx = pos.x + size.x;
+ fy = pos.y + size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ fx = pos.x + size.x;
+ fy = pos.y - size.y;
+ RotatePoint( &fx, &fy, pos.x, pos.y, orient );
+ LineTo( wxPoint( fx, fy ) );
+
+ FinishTo( wxPoint( ox, oy ) );
+ }
+
+
+ }
+}
+
+
+void HPGL_PLOTTER::FlashPadTrapez( const wxPoint& aPadPos, const wxPoint* aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode )
+{
+ wxPoint polygone[4]; // coordinates of corners relatives to the pad
+ wxPoint coord[4]; // absolute coordinates of corners (coordinates in plotter space)
+ int move;
+
+ move = KiROUND( penDiameter );
+
+ for( int ii = 0; ii < 4; ii++ )
+ polygone[ii] = aCorners[ii];
+
+ // polygone[0] is assumed the lower left
+ // polygone[1] is assumed the upper left
+ // polygone[2] is assumed the upper right
+ // polygone[3] is assumed the lower right
+
+ // Plot the outline:
+ for( int ii = 0; ii < 4; ii++ )
+ {
+ coord[ii] = polygone[ii];
+ RotatePoint( &coord[ii], aPadOrient );
+ coord[ii] += aPadPos;
+ }
+
+ MoveTo( coord[0] );
+ LineTo( coord[1] );
+ LineTo( coord[2] );
+ LineTo( coord[3] );
+ FinishTo( coord[0] );
+
+ // Fill shape:
+ if( aTrace_Mode == FILLED )
+ {
+ // TODO: replace this par the HPGL plot polygon.
+ int jj;
+ // Fill the shape
+ move = KiROUND( penDiameter - penOverlap );
+ // Calculate fill height.
+
+ if( polygone[0].y == polygone[3].y ) // Horizontal
+ {
+ jj = polygone[3].y - (int) ( penDiameter + ( 2 * penOverlap ) );
+ }
+ else // vertical
+ {
+ jj = polygone[3].x - (int) ( penDiameter + ( 2 * penOverlap ) );
+ }
+
+ // Calculation of dd = number of segments was traced to fill.
+ int delta = (int) ( penDiameter - penOverlap );
+
+ if( delta )
+ jj = jj / delta;
+ else
+ jj = 0;
+
+ // Trace the outline.
+ for( ; jj > 0; jj-- )
+ {
+ polygone[0].x += move;
+ polygone[0].y -= move;
+ polygone[1].x += move;
+ polygone[1].y += move;
+ polygone[2].x -= move;
+ polygone[2].y += move;
+ polygone[3].x -= move;
+ polygone[3].y -= move;
+
+ // Test for crossed vertexes.
+ if( polygone[0].x > polygone[3].x ) /* X axis intersection on
+ * vertexes 0 and 3 */
+ {
+ polygone[0].x = polygone[3].x = 0;
+ }
+
+ if( polygone[1].x > polygone[2].x ) /* X axis intersection on
+ * vertexes 1 and 2 */
+ {
+ polygone[1].x = polygone[2].x = 0;
+ }
+
+ if( polygone[1].y > polygone[0].y ) /* Y axis intersection on
+ * vertexes 0 and 1 */
+ {
+ polygone[0].y = polygone[1].y = 0;
+ }
+
+ if( polygone[2].y > polygone[3].y ) /* Y axis intersection on
+ * vertexes 2 and 3 */
+ {
+ polygone[2].y = polygone[3].y = 0;
+ }
+
+ for( int ii = 0; ii < 4; ii++ )
+ {
+ coord[ii] = polygone[ii];
+ RotatePoint( &coord[ii], aPadOrient );
+ coord[ii] += aPadPos;
+ }
+
+ MoveTo( coord[0] );
+ LineTo( coord[1] );
+ LineTo( coord[2] );
+ LineTo( coord[3] );
+ FinishTo( coord[0] );
+ }
+ }
+}
diff --git a/common/common_plotPDF_functions.cpp b/common/common_plotPDF_functions.cpp
new file mode 100644
index 0000000..a95e7de
--- /dev/null
+++ b/common/common_plotPDF_functions.cpp
@@ -0,0 +1,834 @@
+/**
+ * @file common_plotPDF_functions.cpp
+ * @brief Kicad: Common plot PDF Routines
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2012 Lorenzo Marcantonio, l.marcantonio@logossrl.com
+ * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <common.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <kicad_string.h>
+#include <wx/zstream.h>
+#include <wx/mstream.h>
+
+
+/*
+ * Open or create the plot file aFullFilename
+ * return true if success, false if the file cannot be created/opened
+ *
+ * Opens the PDF file in binary mode
+ */
+bool PDF_PLOTTER::OpenFile( const wxString& aFullFilename )
+{
+ filename = aFullFilename;
+
+ wxASSERT( !outputFile );
+
+ // Open the PDF file in binary mode
+ outputFile = wxFopen( filename, wxT( "wb" ) );
+
+ if( outputFile == NULL )
+ return false ;
+
+ return true;
+}
+
+void PDF_PLOTTER::SetPageSettings( const PAGE_INFO& aPageSettings )
+{
+ wxASSERT( !workFile );
+ pageInfo = aPageSettings;
+}
+
+void PDF_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror )
+{
+ m_plotMirror = aMirror;
+ plotOffset = aOffset;
+ plotScale = aScale;
+ m_IUsPerDecimil = aIusPerDecimil;
+
+ // The CTM is set to 1 user unit per decimil
+ iuPerDeviceUnit = 1.0 / aIusPerDecimil;
+
+ SetDefaultLineWidth( 100 / iuPerDeviceUnit ); // arbitrary default
+
+ /* The paper size in this engined is handled page by page
+ Look in the StartPage function */
+}
+
+
+/**
+ * Pen width setting for PDF. Since the specs *explicitly* says that a 0
+ * width is a bad thing to use (since it results in 1 pixel traces), we
+ * convert such requests to the minimal width (like 1)
+ * Note pen width = 0 is used in plot polygons to plot filled polygons with
+ * no outline thickness
+ * use in this case pen width = 1 does not actally change the polygon
+ */
+void PDF_PLOTTER::SetCurrentLineWidth( int width )
+{
+ wxASSERT( workFile );
+ int pen_width;
+
+ if( width > 0 )
+ pen_width = width;
+ else if( width == 0 )
+ pen_width = 1;
+ else
+ pen_width = defaultPenWidth;
+
+ if( pen_width != currentPenWidth )
+ fprintf( workFile, "%g w\n",
+ userToDeviceSize( pen_width ) );
+
+ currentPenWidth = pen_width;
+}
+
+
+/**
+ * PDF supports colors fully. It actually has distinct fill and pen colors,
+ * but we set both at the same time.
+ *
+ * XXX Keeping them divided could result in a minor optimization in
+ * eeschema filled shapes, but would propagate to all the other plot
+ * engines. Also arcs are filled as pies but only the arc is stroked so
+ * it would be difficult to handle anyway.
+ */
+void PDF_PLOTTER::emitSetRGBColor( double r, double g, double b )
+{
+ wxASSERT( workFile );
+ fprintf( workFile, "%g %g %g rg %g %g %g RG\n",
+ r, g, b, r, g, b );
+}
+
+/**
+ * PDF supports dashed lines
+ */
+void PDF_PLOTTER::SetDash( bool dashed )
+{
+ wxASSERT( workFile );
+ if( dashed )
+ fprintf( workFile, "[%d %d] 0 d\n",
+ (int) GetDashMarkLenIU(), (int) GetDashGapLenIU() );
+ else
+ fputs( "[] 0 d\n", workFile );
+}
+
+
+/**
+ * Rectangles in PDF. Supported by the native operator
+ */
+void PDF_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width )
+{
+ wxASSERT( workFile );
+ DPOINT p1_dev = userToDeviceCoordinates( p1 );
+ DPOINT p2_dev = userToDeviceCoordinates( p2 );
+
+ SetCurrentLineWidth( width );
+ fprintf( workFile, "%g %g %g %g re %c\n", p1_dev.x, p1_dev.y,
+ p2_dev.x - p1_dev.x, p2_dev.y - p1_dev.y,
+ fill == NO_FILL ? 'S' : 'B' );
+}
+
+
+/**
+ * Circle drawing for PDF. They're approximated by curves, but fill is supported
+ */
+void PDF_PLOTTER::Circle( const wxPoint& pos, int diametre, FILL_T aFill, int width )
+{
+ wxASSERT( workFile );
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ double radius = userToDeviceSize( diametre / 2.0 );
+
+ /* OK. Here's a trick. PDF doesn't support circles or circular angles, that's
+ a fact. You'll have to do with cubic beziers. These *can't* represent
+ circular arcs (NURBS can, beziers don't). But there is a widely known
+ approximation which is really good
+ */
+
+ SetCurrentLineWidth( width );
+ double magic = radius * 0.551784; // You don't want to know where this come from
+
+ // This is the convex hull for the bezier approximated circle
+ fprintf( workFile, "%g %g m "
+ "%g %g %g %g %g %g c "
+ "%g %g %g %g %g %g c "
+ "%g %g %g %g %g %g c "
+ "%g %g %g %g %g %g c %c\n",
+ pos_dev.x - radius, pos_dev.y,
+
+ pos_dev.x - radius, pos_dev.y + magic,
+ pos_dev.x - magic, pos_dev.y + radius,
+ pos_dev.x, pos_dev.y + radius,
+
+ pos_dev.x + magic, pos_dev.y + radius,
+ pos_dev.x + radius, pos_dev.y + magic,
+ pos_dev.x + radius, pos_dev.y,
+
+ pos_dev.x + radius, pos_dev.y - magic,
+ pos_dev.x + magic, pos_dev.y - radius,
+ pos_dev.x, pos_dev.y - radius,
+
+ pos_dev.x - magic, pos_dev.y - radius,
+ pos_dev.x - radius, pos_dev.y - magic,
+ pos_dev.x - radius, pos_dev.y,
+
+ aFill == NO_FILL ? 's' : 'b' );
+}
+
+
+/**
+ * The PDF engine can't directly plot arcs, it uses the base emulation.
+ * So no filled arcs (not a great loss... )
+ */
+void PDF_PLOTTER::Arc( const wxPoint& centre, double StAngle, double EndAngle, int radius,
+ FILL_T fill, int width )
+{
+ wxASSERT( workFile );
+ if( radius <= 0 )
+ return;
+
+ /* Arcs are not so easily approximated by beziers (in the general case),
+ so we approximate them in the old way */
+ wxPoint start, end;
+ const int delta = 50; // increment (in 0.1 degrees) to draw circles
+
+ if( StAngle > EndAngle )
+ std::swap( StAngle, EndAngle );
+
+ SetCurrentLineWidth( width );
+
+ // Usual trig arc plotting routine...
+ start.x = centre.x + KiROUND( cosdecideg( radius, -StAngle ) );
+ start.y = centre.y + KiROUND( sindecideg( radius, -StAngle ) );
+ DPOINT pos_dev = userToDeviceCoordinates( start );
+ fprintf( workFile, "%g %g m ", pos_dev.x, pos_dev.y );
+ for( int ii = StAngle + delta; ii < EndAngle; ii += delta )
+ {
+ end.x = centre.x + KiROUND( cosdecideg( radius, -ii ) );
+ end.y = centre.y + KiROUND( sindecideg( radius, -ii ) );
+ pos_dev = userToDeviceCoordinates( end );
+ fprintf( workFile, "%g %g l ", pos_dev.x, pos_dev.y );
+ }
+
+ end.x = centre.x + KiROUND( cosdecideg( radius, -EndAngle ) );
+ end.y = centre.y + KiROUND( sindecideg( radius, -EndAngle ) );
+ pos_dev = userToDeviceCoordinates( end );
+ fprintf( workFile, "%g %g l ", pos_dev.x, pos_dev.y );
+
+ // The arc is drawn... if not filled we stroke it, otherwise we finish
+ // closing the pie at the center
+ if( fill == NO_FILL )
+ {
+ fputs( "S\n", workFile );
+ }
+ else
+ {
+ pos_dev = userToDeviceCoordinates( centre );
+ fprintf( workFile, "%g %g l b\n", pos_dev.x, pos_dev.y );
+ }
+}
+
+
+/**
+ * Polygon plotting for PDF. Everything is supported
+ */
+void PDF_PLOTTER::PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth )
+{
+ wxASSERT( workFile );
+ if( aCornerList.size() <= 1 )
+ return;
+
+ SetCurrentLineWidth( aWidth );
+
+ DPOINT pos = userToDeviceCoordinates( aCornerList[0] );
+ fprintf( workFile, "%g %g m\n", pos.x, pos.y );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ {
+ pos = userToDeviceCoordinates( aCornerList[ii] );
+ fprintf( workFile, "%g %g l\n", pos.x, pos.y );
+ }
+
+ // Close path and stroke(/fill)
+ fprintf( workFile, "%c\n", aFill == NO_FILL ? 'S' : 'b' );
+}
+
+
+void PDF_PLOTTER::PenTo( const wxPoint& pos, char plume )
+{
+ wxASSERT( workFile );
+ if( plume == 'Z' )
+ {
+ if( penState != 'Z' )
+ {
+ fputs( "S\n", workFile );
+ penState = 'Z';
+ penLastpos.x = -1;
+ penLastpos.y = -1;
+ }
+ return;
+ }
+
+ if( penState != plume || pos != penLastpos )
+ {
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ fprintf( workFile, "%g %g %c\n",
+ pos_dev.x, pos_dev.y,
+ ( plume=='D' ) ? 'l' : 'm' );
+ }
+ penState = plume;
+ penLastpos = pos;
+}
+
+/**
+ * PDF images are handles as inline, not XObject streams...
+ */
+void PDF_PLOTTER::PlotImage( const wxImage & aImage, const wxPoint& aPos,
+ double aScaleFactor )
+{
+ wxASSERT( workFile );
+ wxSize pix_size( aImage.GetWidth(), aImage.GetHeight() );
+
+ // Requested size (in IUs)
+ DPOINT drawsize( aScaleFactor * pix_size.x,
+ aScaleFactor * pix_size.y );
+
+ // calculate the bitmap start position
+ wxPoint start( aPos.x - drawsize.x / 2,
+ aPos.y + drawsize.y / 2);
+
+ DPOINT dev_start = userToDeviceCoordinates( start );
+
+ /* PDF has an uhm... simplified coordinate system handling. There is
+ *one* operator to do everything (the PS concat equivalent). At least
+ they kept the matrix stack to save restore environments. Also images
+ are always emitted at the origin with a size of 1x1 user units.
+ What we need to do is:
+ 1) save the CTM end estabilish the new one
+ 2) plot the image
+ 3) restore the CTM
+ 4) profit
+ */
+ fprintf( workFile, "q %g 0 0 %g %g %g cm\n", // Step 1
+ userToDeviceSize( drawsize.x ),
+ userToDeviceSize( drawsize.y ),
+ dev_start.x, dev_start.y );
+
+ /* An inline image is a cross between a dictionary and a stream.
+ A real ugly construct (compared with the elegance of the PDF
+ format). Also it accepts some 'abbreviations', which is stupid
+ since the content stream is usually compressed anyway... */
+ fprintf( workFile,
+ "BI\n"
+ " /BPC 8\n"
+ " /CS %s\n"
+ " /W %d\n"
+ " /H %d\n"
+ "ID\n", colorMode ? "/RGB" : "/G", pix_size.x, pix_size.y );
+
+ /* Here comes the stream (in binary!). I *could* have hex or ascii84
+ encoded it, but who cares? I'll go through zlib anyway */
+ for( int y = 0; y < pix_size.y; y++ )
+ {
+ for( int x = 0; x < pix_size.x; x++ )
+ {
+ unsigned char r = aImage.GetRed( x, y ) & 0xFF;
+ unsigned char g = aImage.GetGreen( x, y ) & 0xFF;
+ unsigned char b = aImage.GetBlue( x, y ) & 0xFF;
+ // As usual these days, stdio buffering has to suffeeeeerrrr
+ if( colorMode )
+ {
+ putc( r, workFile );
+ putc( g, workFile );
+ putc( b, workFile );
+ }
+ else
+ {
+ // Grayscale conversion
+ putc( (r + g + b) / 3, workFile );
+ }
+ }
+ }
+
+ fputs( "EI Q\n", workFile ); // Finish step 2 and do step 3
+}
+
+
+/**
+ * Allocate a new handle in the table of the PDF object. The
+ * handle must be completed using startPdfObject. It's an in-RAM operation
+ * only, no output is done.
+ */
+int PDF_PLOTTER::allocPdfObject()
+{
+ xrefTable.push_back( 0 );
+ return xrefTable.size() - 1;
+}
+
+
+/**
+ * Open a new PDF object and returns the handle if the parameter is -1.
+ * Otherwise fill in the xref entry for the passed object
+ */
+int PDF_PLOTTER::startPdfObject(int handle)
+{
+ wxASSERT( outputFile );
+ wxASSERT( !workFile );
+ if( handle < 0)
+ handle = allocPdfObject();
+
+ xrefTable[handle] = ftell( outputFile );
+ fprintf( outputFile, "%d 0 obj\n", handle );
+ return handle;
+}
+
+
+/**
+ * Close the current PDF object
+ */
+void PDF_PLOTTER::closePdfObject()
+{
+ wxASSERT( outputFile );
+ wxASSERT( !workFile );
+ fputs( "endobj\n", outputFile );
+}
+
+
+/**
+ * Starts a PDF stream (for the page). Returns the object handle opened
+ * Pass -1 (default) for a fresh object. Especially from PDF 1.5 streams
+ * can contain a lot of things, but for the moment we only handle page
+ * content.
+ */
+int PDF_PLOTTER::startPdfStream(int handle)
+{
+ wxASSERT( outputFile );
+ wxASSERT( !workFile );
+ handle = startPdfObject( handle );
+
+ // This is guaranteed to be handle+1 but needs to be allocated since
+ // you could allocate more object during stream preparation
+ streamLengthHandle = allocPdfObject();
+ fprintf( outputFile,
+ "<< /Length %d 0 R /Filter /FlateDecode >>\n" // Length is deferred
+ "stream\n", handle + 1 );
+
+ // Open a temporary file to accumulate the stream
+ workFilename = filename + wxT(".tmp");
+ workFile = wxFopen( workFilename, wxT( "w+b" ));
+ wxASSERT( workFile );
+ return handle;
+}
+
+
+/**
+ * Finish the current PDF stream (writes the deferred length, too)
+ */
+void PDF_PLOTTER::closePdfStream()
+{
+ wxASSERT( workFile );
+
+ long stream_len = ftell( workFile );
+
+ if( stream_len < 0 )
+ {
+ wxASSERT( false );
+ return;
+ }
+
+ // Rewind the file, read in the page stream and DEFLATE it
+ fseek( workFile, 0, SEEK_SET );
+ unsigned char *inbuf = new unsigned char[stream_len];
+
+ int rc = fread( inbuf, 1, stream_len, workFile );
+ wxASSERT( rc == stream_len );
+ (void) rc;
+
+ // We are done with the temporary file, junk it
+ fclose( workFile );
+ workFile = 0;
+ ::wxRemoveFile( workFilename );
+
+ // NULL means memos owns the memory, but provide a hint on optimum size needed.
+ wxMemoryOutputStream memos( NULL, std::max( 2000l, stream_len ) ) ;
+
+ {
+ /* Somewhat standard parameters to compress in DEFLATE. The PDF spec is
+ * misleading, it says it wants a DEFLATE stream but it really want a ZLIB
+ * stream! (a DEFLATE stream would be generated with -15 instead of 15)
+ * rc = deflateInit2( &zstrm, Z_BEST_COMPRESSION, Z_DEFLATED, 15,
+ * 8, Z_DEFAULT_STRATEGY );
+ */
+
+ wxZlibOutputStream zos( memos, wxZ_BEST_COMPRESSION, wxZLIB_ZLIB );
+
+ zos.Write( inbuf, stream_len );
+
+ delete[] inbuf;
+
+ } // flush the zip stream using zos destructor
+
+ wxStreamBuffer* sb = memos.GetOutputStreamBuffer();
+
+ unsigned out_count = sb->Tell();
+
+ fwrite( sb->GetBufferStart(), 1, out_count, outputFile );
+
+ fputs( "endstream\n", outputFile );
+ closePdfObject();
+
+ // Writing the deferred length as an indirect object
+ startPdfObject( streamLengthHandle );
+ fprintf( outputFile, "%u\n", out_count );
+ closePdfObject();
+}
+
+/**
+ * Starts a new page in the PDF document
+ */
+void PDF_PLOTTER::StartPage()
+{
+ wxASSERT( outputFile );
+ wxASSERT( !workFile );
+
+ // Compute the paper size in IUs
+ paperSize = pageInfo.GetSizeMils();
+ paperSize.x *= 10.0 / iuPerDeviceUnit;
+ paperSize.y *= 10.0 / iuPerDeviceUnit;
+
+ // Open the content stream; the page object will go later
+ pageStreamHandle = startPdfStream();
+
+ /* Now, until ClosePage *everything* must be wrote in workFile, to be
+ compressed later in closePdfStream */
+
+ // Default graphic settings (coordinate system, default color and line style)
+ fprintf( workFile,
+ "%g 0 0 %g 0 0 cm 1 J 1 j 0 0 0 rg 0 0 0 RG %g w\n",
+ 0.0072 * plotScaleAdjX, 0.0072 * plotScaleAdjY,
+ userToDeviceSize( defaultPenWidth ) );
+}
+
+/**
+ * Close the current page in the PDF document (and emit its compressed stream)
+ */
+void PDF_PLOTTER::ClosePage()
+{
+ wxASSERT( workFile );
+
+ // Close the page stream (and compress it)
+ closePdfStream();
+
+ // Emit the page object and put it in the page list for later
+ pageHandles.push_back( startPdfObject() );
+
+ /* Page size is in 1/72 of inch (default user space units)
+ Works like the bbox in postscript but there is no need for
+ swapping the sizes, since PDF doesn't require a portrait page.
+ We use the MediaBox but PDF has lots of other less used boxes
+ to use */
+
+ const double BIGPTsPERMIL = 0.072;
+ wxSize psPaperSize = pageInfo.GetSizeMils();
+
+ fprintf( outputFile,
+ "<<\n"
+ "/Type /Page\n"
+ "/Parent %d 0 R\n"
+ "/Resources <<\n"
+ " /ProcSet [/PDF /Text /ImageC /ImageB]\n"
+ " /Font %d 0 R >>\n"
+ "/MediaBox [0 0 %d %d]\n"
+ "/Contents %d 0 R\n"
+ ">>\n",
+ pageTreeHandle,
+ fontResDictHandle,
+ int( ceil( psPaperSize.x * BIGPTsPERMIL ) ),
+ int( ceil( psPaperSize.y * BIGPTsPERMIL ) ),
+ pageStreamHandle );
+ closePdfObject();
+
+ // Mark the page stream as idle
+ pageStreamHandle = 0;
+}
+
+/**
+ * The PDF engine supports multiple pages; the first one is opened
+ * 'for free' the following are to be closed and reopened. Between
+ * each page parameters can be set
+ */
+bool PDF_PLOTTER::StartPlot()
+{
+ wxASSERT( outputFile );
+
+ // First things first: the customary null object
+ xrefTable.clear();
+ xrefTable.push_back( 0 );
+
+ /* The header (that's easy!). The second line is binary junk required
+ to make the file binary from the beginning (the important thing is
+ that they must have the bit 7 set) */
+ fputs( "%PDF-1.5\n%\200\201\202\203\n", outputFile );
+
+ /* Allocate an entry for the page tree root, it will go in every page
+ parent entry */
+ pageTreeHandle = allocPdfObject();
+
+ /* In the same way, the font resource dictionary is used by every page
+ (it *could* be inherited via the Pages tree */
+ fontResDictHandle = allocPdfObject();
+
+ /* Now, the PDF is read from the end, (more or less)... so we start
+ with the page stream for page 1. Other more important stuff is written
+ at the end */
+ StartPage();
+ return true;
+}
+
+
+bool PDF_PLOTTER::EndPlot()
+{
+ wxASSERT( outputFile );
+
+ // Close the current page (often the only one)
+ ClosePage();
+
+ /* We need to declare the resources we're using (fonts in particular)
+ The useful standard one is the Helvetica family. Adding external fonts
+ is *very* involved! */
+ struct {
+ const char *psname;
+ const char *rsname;
+ int font_handle;
+ } fontdefs[4] = {
+ { "/Helvetica", "/KicadFont", 0 },
+ { "/Helvetica-Oblique", "/KicadFontI", 0 },
+ { "/Helvetica-Bold", "/KicadFontB", 0 },
+ { "/Helvetica-BoldOblique", "/KicadFontBI", 0 }
+ };
+
+ /* Declare the font resources. Since they're builtin fonts, no descriptors (yay!)
+ We'll need metrics anyway to do any aligment (these are in the shared with
+ the postscript engine) */
+ for( int i = 0; i < 4; i++ )
+ {
+ fontdefs[i].font_handle = startPdfObject();
+ fprintf( outputFile,
+ "<< /BaseFont %s\n"
+ " /Type /Font\n"
+ " /Subtype /Type1\n"
+
+ /* Adobe is so Mac-based that the nearest thing to Latin1 is
+ the Windows ANSI encoding! */
+ " /Encoding /WinAnsiEncoding\n"
+ ">>\n",
+ fontdefs[i].psname );
+ closePdfObject();
+ }
+
+ // Named font dictionary (was allocated, now we emit it)
+ startPdfObject( fontResDictHandle );
+ fputs( "<<\n", outputFile );
+ for( int i = 0; i < 4; i++ )
+ {
+ fprintf( outputFile, " %s %d 0 R\n",
+ fontdefs[i].rsname, fontdefs[i].font_handle );
+ }
+ fputs( ">>\n", outputFile );
+ closePdfObject();
+
+ /* The page tree: it's a B-tree but luckily we only have few pages!
+ So we use just an array... The handle was allocated at the beginning,
+ now we instantiate the corresponding object */
+ startPdfObject( pageTreeHandle );
+ fputs( "<<\n"
+ "/Type /Pages\n"
+ "/Kids [\n", outputFile );
+
+ for( unsigned i = 0; i < pageHandles.size(); i++ )
+ fprintf( outputFile, "%d 0 R\n", pageHandles[i] );
+
+ fprintf( outputFile,
+ "]\n"
+ "/Count %ld\n"
+ ">>\n", (long) pageHandles.size() );
+ closePdfObject();
+
+
+ // The info dictionary
+ int infoDictHandle = startPdfObject();
+ char date_buf[250];
+ time_t ltime = time( NULL );
+ strftime( date_buf, 250, "D:%Y%m%d%H%M%S",
+ localtime( &ltime ) );
+ fprintf( outputFile,
+ "<<\n"
+ "/Producer (KiCAD PDF)\n"
+ "/CreationDate (%s)\n"
+ "/Creator (%s)\n"
+ "/Title (%s)\n"
+ "/Trapped false\n",
+ date_buf,
+ TO_UTF8( creator ),
+ TO_UTF8( filename ) );
+
+ fputs( ">>\n", outputFile );
+ closePdfObject();
+
+ // The catalog, at last
+ int catalogHandle = startPdfObject();
+ fprintf( outputFile,
+ "<<\n"
+ "/Type /Catalog\n"
+ "/Pages %d 0 R\n"
+ "/Version /1.5\n"
+ "/PageMode /UseNone\n"
+ "/PageLayout /SinglePage\n"
+ ">>\n", pageTreeHandle );
+ closePdfObject();
+
+ /* Emit the xref table (format is crucial to the byte, each entry must
+ be 20 bytes long, and object zero must be done in that way). Also
+ the offset must be kept along for the trailer */
+ long xref_start = ftell( outputFile );
+ fprintf( outputFile,
+ "xref\n"
+ "0 %ld\n"
+ "0000000000 65535 f \n", (long) xrefTable.size() );
+ for( unsigned i = 1; i < xrefTable.size(); i++ )
+ {
+ fprintf( outputFile, "%010ld 00000 n \n", xrefTable[i] );
+ }
+
+ // Done the xref, go for the trailer
+ fprintf( outputFile,
+ "trailer\n"
+ "<< /Size %lu /Root %d 0 R /Info %d 0 R >>\n"
+ "startxref\n"
+ "%ld\n" // The offset we saved before
+ "%%%%EOF\n",
+ (unsigned long) xrefTable.size(), catalogHandle, infoDictHandle, xref_start );
+
+ fclose( outputFile );
+ outputFile = NULL;
+
+ return true;
+}
+
+void PDF_PLOTTER::Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed )
+{
+ // PDF files do not like 0 sized texts which create broken files.
+ if( aSize.x == 0 || aSize.y == 0 )
+ return;
+
+ // Fix me: see how to use PDF text mode for multiline texts
+ if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
+ aMultilineAllowed = false; // the text has only one line.
+
+ // Emit native PDF text (if requested)
+ // Currently: does not work: disable it
+ bool use_native = false; // = m_textMode != PLOTTEXTMODE_STROKE && !aMultilineAllowed;
+
+ if( use_native )
+ {
+ const char *fontname = aItalic ? (aBold ? "/KicadFontBI" : "/KicadFontI")
+ : (aBold ? "/KicadFontB" : "/KicadFont");
+
+ // Compute the copious tranformation parameters
+ double ctm_a, ctm_b, ctm_c, ctm_d, ctm_e, ctm_f;
+ double wideningFactor, heightFactor;
+ computeTextParameters( aPos, aText, aOrient, aSize, aH_justify,
+ aV_justify, aWidth, aItalic, aBold,
+ &wideningFactor, &ctm_a, &ctm_b, &ctm_c,
+ &ctm_d, &ctm_e, &ctm_f, &heightFactor );
+
+ SetColor( aColor );
+ SetCurrentLineWidth( aWidth );
+
+ /* We use the full CTM instead of the text matrix because the same
+ coordinate system will be used for the overlining. Also the %f
+ for the trig part of the matrix to avoid %g going in exponential
+ format (which is not supported)
+ Rendermode 0 shows the text, rendermode 3 is invisible */
+ fprintf( workFile, "q %f %f %f %f %g %g cm BT %s %g Tf %d Tr %g Tz ",
+ ctm_a, ctm_b, ctm_c, ctm_d, ctm_e, ctm_f,
+ fontname, heightFactor,
+ (m_textMode == PLOTTEXTMODE_NATIVE) ? 0 : 3,
+ wideningFactor * 100 );
+
+ // The text must be escaped correctly
+ fputsPostscriptString( workFile, aText );
+ fputs( " Tj ET\n", workFile );
+
+ /* We are still in text coordinates, plot the overbars (if we're
+ * not doing phantom text) */
+ if( m_textMode == PLOTTEXTMODE_NATIVE )
+ {
+ std::vector<int> pos_pairs;
+ postscriptOverlinePositions( aText, aSize.x, aItalic, aBold, &pos_pairs );
+ int overbar_y = KiROUND( aSize.y * 1.1 );
+ for( unsigned i = 0; i < pos_pairs.size(); i += 2)
+ {
+ /* This is a nontrivial situation: we are *not* in the user
+ coordinate system, so the userToDeviceCoordinates function
+ can't be used! Strange as it may seem, the userToDeviceSize
+ is the right function to use here... */
+ DPOINT dev_from = userToDeviceSize( wxSize( pos_pairs[i], overbar_y ) );
+ DPOINT dev_to = userToDeviceSize( wxSize( pos_pairs[i + 1], overbar_y ) );
+ fprintf( workFile, "%g %g m %g %g l ",
+ dev_from.x, dev_from.y, dev_to.x, dev_to.y );
+ }
+ }
+
+ // Stroke and restore the CTM
+ fputs( "S Q\n", workFile );
+ }
+
+ // Plot the stroked text (if requested)
+ if( !use_native )
+ {
+ PLOTTER::Text( aPos, aColor, aText, aOrient, aSize, aH_justify, aV_justify,
+ aWidth, aItalic, aBold, aMultilineAllowed );
+ }
+}
+
diff --git a/common/common_plotPS_functions.cpp b/common/common_plotPS_functions.cpp
new file mode 100644
index 0000000..bbf9ede
--- /dev/null
+++ b/common/common_plotPS_functions.cpp
@@ -0,0 +1,1090 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file common_plotPS_functions.cpp
+ * @brief Kicad: Common plot Postscript Routines
+ */
+
+#include <fctsys.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <common.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <kicad_string.h>
+
+/* Forward declaration of the font width metrics
+ (yes extern! this is the way to forward declare variables */
+extern const double hv_widths[256];
+extern const double hvb_widths[256];
+extern const double hvo_widths[256];
+extern const double hvbo_widths[256];
+
+const double PSLIKE_PLOTTER::postscriptTextAscent = 0.718;
+
+
+// Common routines for Postscript-like plotting engines
+
+void PSLIKE_PLOTTER::SetDefaultLineWidth( int width )
+{
+ defaultPenWidth = width;
+ currentPenWidth = -1;
+}
+
+
+void PSLIKE_PLOTTER::SetColor( EDA_COLOR_T color )
+{
+ // Return at invalid color index
+ if( color < 0 )
+ return;
+
+ if( colorMode )
+ {
+ double r = g_ColorRefs[color].m_Red / 255.0;
+ double g = g_ColorRefs[color].m_Green / 255.0;
+ double b = g_ColorRefs[color].m_Blue / 255.0;
+ if( negativeMode )
+ emitSetRGBColor( 1 - r, 1 - g, 1 - b );
+ else
+ emitSetRGBColor( r, g, b );
+ }
+ else
+ {
+ /* B/W Mode - Use BLACK or WHITE for all items
+ * note the 2 colors are used in B&W mode, mainly by Pcbnew to draw
+ * holes in white on pads in black
+ */
+ double k = 1; // White
+ if( color != WHITE )
+ k = 0;
+ if( negativeMode )
+ emitSetRGBColor( 1 - k, 1 - k, 1 - k );
+ else
+ emitSetRGBColor( k, k, k );
+ }
+}
+
+
+void PSLIKE_PLOTTER::FlashPadOval( const wxPoint& aPadPos, const wxSize& aSize,
+ double aPadOrient, EDA_DRAW_MODE_T aTraceMode )
+{
+ int x0, y0, x1, y1, delta;
+ wxSize size( aSize );
+
+ // The pad is reduced to an oval by dy > dx
+ if( size.x > size.y )
+ {
+ std::swap( size.x, size.y );
+ aPadOrient = AddAngles( aPadOrient, 900 );
+ }
+
+ delta = size.y - size.x;
+ x0 = 0;
+ y0 = -delta / 2;
+ x1 = 0;
+ y1 = delta / 2;
+ RotatePoint( &x0, &y0, aPadOrient );
+ RotatePoint( &x1, &y1, aPadOrient );
+
+ if( aTraceMode == FILLED )
+ ThickSegment( wxPoint( aPadPos.x + x0, aPadPos.y + y0 ),
+ wxPoint( aPadPos.x + x1, aPadPos.y + y1 ), size.x, aTraceMode );
+ else
+ sketchOval( aPadPos, size, aPadOrient, -1 );
+}
+
+
+void PSLIKE_PLOTTER::FlashPadCircle( const wxPoint& aPadPos, int aDiameter,
+ EDA_DRAW_MODE_T aTraceMode )
+{
+ if( aTraceMode == FILLED )
+ Circle( aPadPos, aDiameter, FILLED_SHAPE, 0 );
+ else // Plot a ring:
+ {
+ SetCurrentLineWidth( USE_DEFAULT_LINE_WIDTH );
+ int linewidth = GetCurrentLineWidth();
+
+ // avoid aDiameter <= 1 )
+ if( linewidth > aDiameter-2 )
+ linewidth = aDiameter-2;
+
+ Circle( aPadPos, aDiameter - linewidth, NO_FILL, linewidth );
+ }
+
+ SetCurrentLineWidth( USE_DEFAULT_LINE_WIDTH );
+}
+
+
+void PSLIKE_PLOTTER::FlashPadRect( const wxPoint& aPadPos, const wxSize& aSize,
+ double aPadOrient, EDA_DRAW_MODE_T aTraceMode )
+{
+ static std::vector< wxPoint > cornerList;
+ wxSize size( aSize );
+ cornerList.clear();
+
+ if( aTraceMode == FILLED )
+ SetCurrentLineWidth( 0 );
+ else
+ SetCurrentLineWidth( USE_DEFAULT_LINE_WIDTH );
+
+ size.x -= GetCurrentLineWidth();
+ size.y -= GetCurrentLineWidth();
+
+ if( size.x < 1 )
+ size.x = 1;
+
+ if( size.y < 1 )
+ size.y = 1;
+
+ int dx = size.x / 2;
+ int dy = size.y / 2;
+
+ wxPoint corner;
+ corner.x = aPadPos.x - dx;
+ corner.y = aPadPos.y + dy;
+ cornerList.push_back( corner );
+ corner.x = aPadPos.x - dx;
+ corner.y = aPadPos.y - dy;
+ cornerList.push_back( corner );
+ corner.x = aPadPos.x + dx;
+ corner.y = aPadPos.y - dy;
+ cornerList.push_back( corner );
+ corner.x = aPadPos.x + dx;
+ corner.y = aPadPos.y + dy,
+ cornerList.push_back( corner );
+
+ for( unsigned ii = 0; ii < cornerList.size(); ii++ )
+ {
+ RotatePoint( &cornerList[ii], aPadPos, aPadOrient );
+ }
+
+ cornerList.push_back( cornerList[0] );
+
+ PlotPoly( cornerList, ( aTraceMode == FILLED ) ? FILLED_SHAPE : NO_FILL,
+ GetCurrentLineWidth() );
+}
+
+
+void PSLIKE_PLOTTER::FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTraceMode )
+{
+ static std::vector< wxPoint > cornerList;
+ cornerList.clear();
+
+ for( int ii = 0; ii < 4; ii++ )
+ cornerList.push_back( aCorners[ii] );
+
+ if( aTraceMode == FILLED )
+ {
+ SetCurrentLineWidth( 0 );
+ }
+ else
+ {
+ SetCurrentLineWidth( USE_DEFAULT_LINE_WIDTH );
+ int w = GetCurrentLineWidth();
+ // offset polygon by w
+ // coord[0] is assumed the lower left
+ // coord[1] is assumed the upper left
+ // coord[2] is assumed the upper right
+ // coord[3] is assumed the lower right
+
+ /* Trace the outline. */
+ cornerList[0].x += w;
+ cornerList[0].y -= w;
+ cornerList[1].x += w;
+ cornerList[1].y += w;
+ cornerList[2].x -= w;
+ cornerList[2].y += w;
+ cornerList[3].x -= w;
+ cornerList[3].y -= w;
+ }
+
+ for( int ii = 0; ii < 4; ii++ )
+ {
+ RotatePoint( &cornerList[ii], aPadOrient );
+ cornerList[ii] += aPadPos;
+ }
+
+ cornerList.push_back( cornerList[0] );
+ PlotPoly( cornerList, ( aTraceMode == FILLED ) ? FILLED_SHAPE : NO_FILL,
+ GetCurrentLineWidth() );
+}
+
+
+/**
+ * Write on a stream a string escaped for postscript/PDF
+ */
+void PSLIKE_PLOTTER::fputsPostscriptString(FILE *fout, const wxString& txt)
+{
+ putc( '(', fout );
+ for( unsigned i = 0; i < txt.length(); i++ )
+ {
+ // Lazyness made me use stdio buffering yet another time...
+ wchar_t ch = txt[i];
+
+ if( ch < 256 )
+ {
+ switch (ch)
+ {
+ // The ~ shouldn't reach the outside
+ case '~':
+ break;
+ // These characters must be escaped
+ case '(':
+ case ')':
+ case '\\':
+ putc( '\\', fout );
+
+ // FALLTHRU
+ default:
+ putc( ch, fout );
+ break;
+ }
+ }
+ }
+
+ putc( ')', fout );
+}
+
+
+/**
+ * Sister function for the GraphicTextWidth in drawtxt.cpp
+ * Does the same processing (i.e. calculates a text string width) but
+ * using postscript metrics for the Helvetica font (optionally used for
+ * PS and PDF plotting
+ */
+int PSLIKE_PLOTTER::returnPostscriptTextWidth( const wxString& aText, int aXSize,
+ bool aItalic, bool aBold )
+{
+ const double *width_table = aBold ? ( aItalic ? hvbo_widths : hvb_widths )
+ : ( aItalic ? hvo_widths : hv_widths );
+ double tally = 0;
+
+ for( unsigned i = 0; i < aText.length(); i++ )
+ {
+ wchar_t AsciiCode = aText[i];
+ // Skip the negation marks and untabled points
+ if( AsciiCode != '~' && AsciiCode < 256 )
+ {
+ tally += width_table[AsciiCode];
+ }
+ }
+
+ // Widths are proportional to height, but height is enlarged by a
+ // scaling factor
+ return KiROUND( aXSize * tally / postscriptTextAscent );
+}
+
+
+/**
+ * Computes the x coordinates for the overlining in a string of text.
+ * Fills the passed vector with couples of (start, stop) values to be
+ * used in the text coordinate system (use computeTextParameters to
+ * obtain the parameters to estabilish such a system)
+ */
+void PSLIKE_PLOTTER::postscriptOverlinePositions( const wxString& aText, int aXSize,
+ bool aItalic, bool aBold,
+ std::vector<int> *pos_pairs )
+{
+ /* XXX This function is *too* similar to returnPostscriptTextWidth.
+ Consider merging them... */
+ const double *width_table = aBold ? ( aItalic ? hvbo_widths : hvb_widths )
+ : ( aItalic ? hvo_widths : hv_widths );
+ double tally = 0;
+
+ for( unsigned i = 0; i < aText.length(); i++ )
+ {
+ wchar_t AsciiCode = aText[i];
+ // Skip the negation marks and untabled points
+ if( AsciiCode != '~' && AsciiCode < 256 )
+ {
+ tally += width_table[AsciiCode];
+ }
+ else
+ {
+ if( AsciiCode == '~' )
+ pos_pairs->push_back( KiROUND( aXSize * tally / postscriptTextAscent ) );
+ }
+ }
+
+ // Special rule: we have to complete the last bar if the ~ aren't matched
+ if( pos_pairs->size() % 2 == 1 )
+ pos_pairs->push_back( KiROUND( aXSize * tally / postscriptTextAscent ) );
+}
+
+void PS_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror )
+{
+ m_plotMirror = aMirror;
+ plotOffset = aOffset;
+ plotScale = aScale;
+ m_IUsPerDecimil = aIusPerDecimil;
+ iuPerDeviceUnit = 1.0 / aIusPerDecimil;
+ /* Compute the paper size in IUs */
+ paperSize = pageInfo.GetSizeMils();
+ paperSize.x *= 10.0 * aIusPerDecimil;
+ paperSize.y *= 10.0 * aIusPerDecimil;
+ SetDefaultLineWidth( 100 * aIusPerDecimil ); // arbitrary default
+}
+
+
+/** This is the core for postscript/PDF text alignment
+ * It computes the transformation matrix to generate a user space
+ * system aligned with the text. Even the PS uses the concat
+ * operator to simplify PDF generation (concat is everything PDF
+ * has to modify the CTM. Lots of parameters, both in and out.
+ */
+void PSLIKE_PLOTTER::computeTextParameters( const wxPoint& aPos,
+ const wxString& aText,
+ int aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ double *wideningFactor,
+ double *ctm_a,
+ double *ctm_b,
+ double *ctm_c,
+ double *ctm_d,
+ double *ctm_e,
+ double *ctm_f,
+ double *heightFactor )
+{
+ // Compute the starting position (compensated for alignment)
+ wxPoint start_pos = aPos;
+
+ // This is an approximation of the text bounds (in IUs)
+ int tw = returnPostscriptTextWidth( aText, aSize.x, aItalic, aWidth );
+ int th = aSize.y;
+ int dx, dy;
+
+ switch( aH_justify )
+ {
+ case GR_TEXT_HJUSTIFY_CENTER:
+ dx = -tw / 2;
+ break;
+
+ case GR_TEXT_HJUSTIFY_RIGHT:
+ dx = -tw;
+ break;
+
+ case GR_TEXT_HJUSTIFY_LEFT:
+ dx = 0;
+ break;
+ }
+
+ switch( aV_justify )
+ {
+ case GR_TEXT_VJUSTIFY_CENTER:
+ dy = th / 2;
+ break;
+
+ case GR_TEXT_VJUSTIFY_TOP:
+ dy = th;
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ dy = 0;
+ break;
+ }
+
+ RotatePoint( &dx, &dy, aOrient );
+ RotatePoint( &tw, &th, aOrient );
+ start_pos.x += dx;
+ start_pos.y += dy;
+ DPOINT pos_dev = userToDeviceCoordinates( start_pos );
+ DPOINT sz_dev = userToDeviceSize( aSize );
+
+ // Now returns the final values... the widening factor
+ *wideningFactor = sz_dev.y / sz_dev.x;
+
+ // The CTM transformation matrix
+ double alpha = DECIDEG2RAD( aOrient );
+ double sinalpha = sin( alpha );
+ double cosalpha = cos( alpha );
+
+ *ctm_a = cosalpha;
+ *ctm_b = sinalpha;
+ *ctm_c = -sinalpha;
+ *ctm_d = cosalpha;
+ *ctm_e = pos_dev.x;
+ *ctm_f = pos_dev.y;
+
+ // This is because the letters are less than 1 unit high
+ *heightFactor = sz_dev.y / postscriptTextAscent;
+}
+
+
+/* Set the current line width (in IUs) for the next plot
+ */
+void PS_PLOTTER::SetCurrentLineWidth( int width )
+{
+ wxASSERT( outputFile );
+ int pen_width;
+
+ if( width >= 0 )
+ pen_width = width;
+ else
+ pen_width = defaultPenWidth;
+
+ if( pen_width != GetCurrentLineWidth() )
+ fprintf( outputFile, "%g setlinewidth\n", userToDeviceSize( pen_width ) );
+
+ currentPenWidth = pen_width;
+}
+
+
+void PS_PLOTTER::emitSetRGBColor( double r, double g, double b )
+{
+ wxASSERT( outputFile );
+
+ // XXX why %.3g ? shouldn't %g suffice? who cares...
+ fprintf( outputFile, "%.3g %.3g %.3g setrgbcolor\n", r, g, b );
+}
+
+
+/**
+ * Postscript supports dashed lines
+ */
+void PS_PLOTTER::SetDash( bool dashed )
+{
+ wxASSERT( outputFile );
+ if( dashed )
+ fprintf( outputFile, "[%d %d] 0 setdash\n",
+ (int) GetDashMarkLenIU(), (int) GetDashGapLenIU() );
+ else
+ fputs( "solidline\n", outputFile );
+}
+
+
+void PS_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width )
+{
+ DPOINT p1_dev = userToDeviceCoordinates( p1 );
+ DPOINT p2_dev = userToDeviceCoordinates( p2 );
+
+ SetCurrentLineWidth( width );
+ fprintf( outputFile, "%g %g %g %g rect%d\n", p1_dev.x, p1_dev.y,
+ p2_dev.x - p1_dev.x, p2_dev.y - p1_dev.y, fill );
+}
+
+
+void PS_PLOTTER::Circle( const wxPoint& pos, int diametre, FILL_T fill, int width )
+{
+ wxASSERT( outputFile );
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ double radius = userToDeviceSize( diametre / 2.0 );
+
+ SetCurrentLineWidth( width );
+ fprintf( outputFile, "%g %g %g cir%d\n", pos_dev.x, pos_dev.y, radius, fill );
+}
+
+
+void PS_PLOTTER::Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int radius, FILL_T fill, int width )
+{
+ wxASSERT( outputFile );
+ if( radius <= 0 )
+ return;
+
+ if( StAngle > EndAngle )
+ std::swap( StAngle, EndAngle );
+
+ SetCurrentLineWidth( width );
+
+ // Calculate start point.
+ DPOINT centre_dev = userToDeviceCoordinates( centre );
+ double radius_dev = userToDeviceSize( radius );
+
+ if( m_plotMirror )
+ {
+ if( m_mirrorIsHorizontal )
+ {
+ StAngle = 1800.0 -StAngle;
+ EndAngle = 1800.0 -EndAngle;
+ std::swap( StAngle, EndAngle );
+ }
+ else
+ {
+ StAngle = -StAngle;
+ EndAngle = -EndAngle;
+ }
+ }
+
+ fprintf( outputFile, "%g %g %g %g %g arc%d\n", centre_dev.x, centre_dev.y,
+ radius_dev, StAngle / 10.0, EndAngle / 10.0, fill );
+}
+
+
+void PS_PLOTTER::PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth )
+{
+ if( aCornerList.size() <= 1 )
+ return;
+
+ SetCurrentLineWidth( aWidth );
+
+ DPOINT pos = userToDeviceCoordinates( aCornerList[0] );
+ fprintf( outputFile, "newpath\n%g %g moveto\n", pos.x, pos.y );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ {
+ pos = userToDeviceCoordinates( aCornerList[ii] );
+ fprintf( outputFile, "%g %g lineto\n", pos.x, pos.y );
+ }
+
+ // Close/(fill) the path
+ fprintf( outputFile, "poly%d\n", aFill );
+}
+
+
+/**
+ * Postscript-likes at the moment are the only plot engines supporting bitmaps...
+ */
+void PS_PLOTTER::PlotImage( const wxImage & aImage, const wxPoint& aPos,
+ double aScaleFactor )
+{
+ wxSize pix_size; // size of the bitmap in pixels
+ pix_size.x = aImage.GetWidth();
+ pix_size.y = aImage.GetHeight();
+ DPOINT drawsize( aScaleFactor * pix_size.x,
+ aScaleFactor * pix_size.y ); // requested size of image
+
+ // calculate the bottom left corner position of bitmap
+ wxPoint start = aPos;
+ start.x -= drawsize.x / 2; // left
+ start.y += drawsize.y / 2; // bottom (Y axis reversed)
+
+ // calculate the top right corner position of bitmap
+ wxPoint end;
+ end.x = start.x + drawsize.x;
+ end.y = start.y - drawsize.y;
+
+ fprintf( outputFile, "/origstate save def\n" );
+ fprintf( outputFile, "/pix %d string def\n", pix_size.x );
+
+ // Locate lower-left corner of image
+ DPOINT start_dev = userToDeviceCoordinates( start );
+ fprintf( outputFile, "%g %g translate\n", start_dev.x, start_dev.y );
+ // Map image size to device
+ DPOINT end_dev = userToDeviceCoordinates( end );
+ fprintf( outputFile, "%g %g scale\n",
+ std::abs(end_dev.x - start_dev.x), std::abs(end_dev.y - start_dev.y));
+
+ // Dimensions of source image (in pixels
+ fprintf( outputFile, "%d %d 8", pix_size.x, pix_size.y );
+ // Map unit square to source
+ fprintf( outputFile, " [%d 0 0 %d 0 %d]\n", pix_size.x, -pix_size.y , pix_size.y);
+ // include image data in ps file
+ fprintf( outputFile, "{currentfile pix readhexstring pop}\n" );
+
+ if( colorMode )
+ fputs( "false 3 colorimage\n", outputFile );
+ else
+ fputs( "image\n", outputFile );
+ // Single data source, 3 colors, Output RGB data (hexadecimal)
+ // (or the same downscaled to gray)
+ int jj = 0;
+
+ for( int yy = 0; yy < pix_size.y; yy ++ )
+ {
+ for( int xx = 0; xx < pix_size.x; xx++, jj++ )
+ {
+ if( jj >= 16 )
+ {
+ jj = 0;
+ fprintf( outputFile, "\n");
+ }
+
+ int red, green, blue;
+ red = aImage.GetRed( xx, yy) & 0xFF;
+ green = aImage.GetGreen( xx, yy) & 0xFF;
+ blue = aImage.GetBlue( xx, yy) & 0xFF;
+
+ if( colorMode )
+ fprintf( outputFile, "%2.2X%2.2X%2.2X", red, green, blue );
+ else
+ fprintf( outputFile, "%2.2X", (red + green + blue) / 3 );
+ }
+ }
+
+ fprintf( outputFile, "\n");
+ fprintf( outputFile, "origstate restore\n" );
+}
+
+
+void PS_PLOTTER::PenTo( const wxPoint& pos, char plume )
+{
+ wxASSERT( outputFile );
+
+ if( plume == 'Z' )
+ {
+ if( penState != 'Z' )
+ {
+ fputs( "stroke\n", outputFile );
+ penState = 'Z';
+ penLastpos.x = -1;
+ penLastpos.y = -1;
+ }
+
+ return;
+ }
+
+ if( penState == 'Z' )
+ {
+ fputs( "newpath\n", outputFile );
+ }
+
+ if( penState != plume || pos != penLastpos )
+ {
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ fprintf( outputFile, "%g %g %sto\n",
+ pos_dev.x, pos_dev.y,
+ ( plume=='D' ) ? "line" : "move" );
+ }
+
+ penState = plume;
+ penLastpos = pos;
+}
+
+
+/**
+ * The code within this function (and the CloseFilePS function)
+ * creates postscript files whose contents comply with Adobe's
+ * Document Structuring Convention, as documented by assorted
+ * details described within the following URLs:
+ *
+ * http://en.wikipedia.org/wiki/Document_Structuring_Conventions
+ * http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf
+ *
+ *
+ * BBox is the boundary box (position and size of the "client rectangle"
+ * for drawings (page - margins) in mils (0.001 inch)
+ */
+bool PS_PLOTTER::StartPlot()
+{
+ wxASSERT( outputFile );
+ wxString msg;
+
+ static const char* PSMacro[] =
+ {
+ "%%BeginProlog\n",
+ "/line { newpath moveto lineto stroke } bind def\n",
+ "/cir0 { newpath 0 360 arc stroke } bind def\n",
+ "/cir1 { newpath 0 360 arc gsave fill grestore stroke } bind def\n",
+ "/cir2 { newpath 0 360 arc gsave fill grestore stroke } bind def\n",
+ "/arc0 { newpath arc stroke } bind def\n",
+ "/arc1 { newpath 4 index 4 index moveto arc closepath gsave fill\n",
+ " grestore stroke } bind def\n",
+ "/arc2 { newpath 4 index 4 index moveto arc closepath gsave fill\n",
+ " grestore stroke } bind def\n",
+ "/poly0 { stroke } bind def\n",
+ "/poly1 { closepath gsave fill grestore stroke } bind def\n",
+ "/poly2 { closepath gsave fill grestore stroke } bind def\n",
+ "/rect0 { rectstroke } bind def\n",
+ "/rect1 { rectfill } bind def\n",
+ "/rect2 { rectfill } bind def\n",
+ "/linemode0 { 0 setlinecap 0 setlinejoin 0 setlinewidth } bind def\n",
+ "/linemode1 { 1 setlinecap 1 setlinejoin } bind def\n",
+ "/dashedline { [200] 100 setdash } bind def\n",
+ "/solidline { [] 0 setdash } bind def\n",
+
+ // This is for 'hidden' text (search anchors for PDF)
+ "/phantomshow { moveto\n",
+ " /KicadFont findfont 0.000001 scalefont setfont\n",
+ " show } bind def\n",
+
+ // This is for regular postscript text
+ "/textshow { gsave\n",
+ " findfont exch scalefont setfont concat 1 scale 0 0 moveto show\n",
+ " } bind def\n",
+
+ // Utility for getting Latin1 encoded fonts
+ "/reencodefont {\n",
+ " findfont dup length dict begin\n",
+ " { 1 index /FID ne\n",
+ " { def }\n",
+ " { pop pop } ifelse\n",
+ " } forall\n",
+ " /Encoding ISOLatin1Encoding def\n",
+ " currentdict\n",
+ " end } bind def\n"
+
+ // Remap AdobeStandard fonts to Latin1
+ "/KicadFont /Helvetica reencodefont definefont pop\n",
+ "/KicadFont-Bold /Helvetica-Bold reencodefont definefont pop\n",
+ "/KicadFont-Oblique /Helvetica-Oblique reencodefont definefont pop\n",
+ "/KicadFont-BoldOblique /Helvetica-BoldOblique reencodefont definefont pop\n",
+ "%%EndProlog\n",
+ NULL
+ };
+
+ time_t time1970 = time( NULL );
+
+ fputs( "%!PS-Adobe-3.0\n", outputFile ); // Print header
+
+ fprintf( outputFile, "%%%%Creator: %s\n", TO_UTF8( creator ) );
+
+ /* A "newline" character ("\n") is not included in the following string,
+ because it is provided by the ctime() function. */
+ fprintf( outputFile, "%%%%CreationDate: %s", ctime( &time1970 ) );
+ fprintf( outputFile, "%%%%Title: %s\n", TO_UTF8( filename ) );
+ fprintf( outputFile, "%%%%Pages: 1\n" );
+ fprintf( outputFile, "%%%%PageOrder: Ascend\n" );
+
+ // Print boundary box in 1/72 pixels per inch, box is in mils
+ const double BIGPTsPERMIL = 0.072;
+
+ /* The coordinates of the lower left corner of the boundary
+ box need to be "rounded down", but the coordinates of its
+ upper right corner need to be "rounded up" instead. */
+ wxSize psPaperSize = pageInfo.GetSizeMils();
+
+ if( !pageInfo.IsPortrait() )
+ psPaperSize.Set( pageInfo.GetHeightMils(), pageInfo.GetWidthMils() );
+
+ fprintf( outputFile, "%%%%BoundingBox: 0 0 %d %d\n",
+ (int) ceil( psPaperSize.x * BIGPTsPERMIL ),
+ (int) ceil( psPaperSize.y * BIGPTsPERMIL ) );
+
+ // Specify the size of the sheet and the name associated with that size.
+ // (If the "User size" option has been selected for the sheet size,
+ // identify the sheet size as "Custom" (rather than as "User"), but
+ // otherwise use the name assigned by KiCad for each sheet size.)
+ //
+ // (The Document Structuring Convention also supports sheet weight,
+ // sheet color, and sheet type properties being specified within a
+ // %%DocumentMedia comment, but they are not being specified here;
+ // a zero and two null strings are subsequently provided instead.)
+ //
+ // (NOTE: m_Size.y is *supposed* to be listed before m_Size.x;
+ // the order in which they are specified is not wrong!)
+ // Also note pageSize is given in mils, not in internal units and must be
+ // converted to internal units.
+
+ if( pageInfo.IsCustom() )
+ fprintf( outputFile, "%%%%DocumentMedia: Custom %d %d 0 () ()\n",
+ KiROUND( psPaperSize.x * BIGPTsPERMIL ),
+ KiROUND( psPaperSize.y * BIGPTsPERMIL ) );
+
+ else // a standard paper size
+ fprintf( outputFile, "%%%%DocumentMedia: %s %d %d 0 () ()\n",
+ TO_UTF8( pageInfo.GetType() ),
+ KiROUND( psPaperSize.x * BIGPTsPERMIL ),
+ KiROUND( psPaperSize.y * BIGPTsPERMIL ) );
+
+ if( pageInfo.IsPortrait() )
+ fprintf( outputFile, "%%%%Orientation: Portrait\n" );
+ else
+ fprintf( outputFile, "%%%%Orientation: Landscape\n" );
+
+ fprintf( outputFile, "%%%%EndComments\n" );
+
+ // Now specify various other details.
+
+ for( int ii = 0; PSMacro[ii] != NULL; ii++ )
+ {
+ fputs( PSMacro[ii], outputFile );
+ }
+
+ // The following string has been specified here (rather than within
+ // PSMacro[]) to highlight that it has been provided to ensure that the
+ // contents of the postscript file comply with the details specified
+ // within the Document Structuring Convention.
+ fputs( "%%Page: 1 1\n"
+ "%%BeginPageSetup\n"
+ "gsave\n"
+ "0.0072 0.0072 scale\n" // Configure postscript for decimils coordinates
+ "linemode1\n", outputFile );
+
+
+ // Rototranslate the coordinate to achieve the landscape layout
+ if( !pageInfo.IsPortrait() )
+ fprintf( outputFile, "%d 0 translate 90 rotate\n", 10 * psPaperSize.x );
+
+ // Apply the user fine scale adjustments
+ if( plotScaleAdjX != 1.0 || plotScaleAdjY != 1.0 )
+ fprintf( outputFile, "%g %g scale\n",
+ plotScaleAdjX, plotScaleAdjY );
+
+ // Set default line width
+ fprintf( outputFile, "%g setlinewidth\n", userToDeviceSize( defaultPenWidth ) );
+ fputs( "%%EndPageSetup\n", outputFile );
+
+ return true;
+}
+
+
+bool PS_PLOTTER::EndPlot()
+{
+ wxASSERT( outputFile );
+ fputs( "showpage\n"
+ "grestore\n"
+ "%%EOF\n", outputFile );
+ fclose( outputFile );
+ outputFile = NULL;
+
+ return true;
+}
+
+
+
+void PS_PLOTTER::Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed )
+{
+ SetCurrentLineWidth( aWidth );
+ SetColor( aColor );
+
+ // Fix me: see how to use PS text mode for multiline texts
+ if( aMultilineAllowed && !aText.Contains( wxT( "\n" ) ) )
+ aMultilineAllowed = false; // the text has only one line.
+
+ // Draw the native postscript text (if requested)
+ // Currently: does not work: disable it
+ bool use_native = false; // = m_textMode == PLOTTEXTMODE_NATIVE && !aMultilineAllowed;
+
+ if( use_native )
+ {
+ const char *fontname = aItalic ? (aBold ? "/KicadFont-BoldOblique"
+ : "/KicadFont-Oblique")
+ : (aBold ? "/KicadFont-Bold"
+ : "/KicadFont");
+
+ // Compute the copious tranformation parameters
+ double ctm_a, ctm_b, ctm_c, ctm_d, ctm_e, ctm_f;
+ double wideningFactor, heightFactor;
+ computeTextParameters( aPos, aText, aOrient, aSize, aH_justify,
+ aV_justify, aWidth, aItalic, aBold,
+ &wideningFactor, &ctm_a, &ctm_b, &ctm_c,
+ &ctm_d, &ctm_e, &ctm_f, &heightFactor );
+
+
+ // The text must be escaped correctly, the others are the various
+ // parameters. The CTM is formatted with %f since sin/cos tends
+ // to make %g use exponential notation (which is not supported)
+ fputsPostscriptString( outputFile, aText );
+ fprintf( outputFile, " %g [%f %f %f %f %f %f] %g %s textshow\n",
+ wideningFactor, ctm_a, ctm_b, ctm_c, ctm_d, ctm_e, ctm_f,
+ heightFactor, fontname );
+
+ /* The textshow operator retained the coordinate system, we use it
+ * to plot the overbars. See the PDF sister function for more
+ * details */
+
+ std::vector<int> pos_pairs;
+ postscriptOverlinePositions( aText, aSize.x, aItalic, aBold, &pos_pairs );
+ int overbar_y = KiROUND( aSize.y * 1.1 );
+
+ for( unsigned i = 0; i < pos_pairs.size(); i += 2)
+ {
+ DPOINT dev_from = userToDeviceSize( wxSize( pos_pairs[i], overbar_y ) );
+ DPOINT dev_to = userToDeviceSize( wxSize( pos_pairs[i + 1], overbar_y ) );
+ fprintf( outputFile, "%g %g %g %g line ",
+ dev_from.x, dev_from.y, dev_to.x, dev_to.y );
+ }
+
+ // Restore the CTM
+ fputs( "grestore\n", outputFile );
+ }
+
+ // Draw the hidden postscript text (if requested)
+ if( m_textMode == PLOTTEXTMODE_PHANTOM )
+ {
+ fputsPostscriptString( outputFile, aText );
+ DPOINT pos_dev = userToDeviceCoordinates( aPos );
+ fprintf( outputFile, " %g %g phantomshow\n", pos_dev.x, pos_dev.y );
+ }
+
+ // Draw the stroked text (if requested)
+ if( !use_native )
+ {
+ PLOTTER::Text( aPos, aColor, aText, aOrient, aSize, aH_justify, aV_justify,
+ aWidth, aItalic, aBold, aMultilineAllowed );
+ }
+}
+
+
+/**
+ * Character widths for Helvetica
+ */
+const double hv_widths[256] = {
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.355, 0.556, 0.556, 0.889, 0.667, 0.191,
+ 0.333, 0.333, 0.389, 0.584, 0.278, 0.333, 0.278, 0.278,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556,
+ 0.556, 0.556, 0.278, 0.278, 0.584, 0.584, 0.584, 0.556,
+ 1.015, 0.667, 0.667, 0.722, 0.722, 0.667, 0.611, 0.778,
+ 0.722, 0.278, 0.500, 0.667, 0.556, 0.833, 0.722, 0.778,
+ 0.667, 0.778, 0.722, 0.667, 0.611, 0.722, 0.667, 0.944,
+ 0.667, 0.667, 0.611, 0.278, 0.278, 0.278, 0.469, 0.556,
+ 0.333, 0.556, 0.556, 0.500, 0.556, 0.556, 0.278, 0.556,
+ 0.556, 0.222, 0.222, 0.500, 0.222, 0.833, 0.556, 0.556,
+ 0.556, 0.556, 0.333, 0.500, 0.278, 0.556, 0.500, 0.722,
+ 0.500, 0.500, 0.500, 0.334, 0.260, 0.334, 0.584, 0.278,
+ 0.278, 0.278, 0.222, 0.556, 0.333, 1.000, 0.556, 0.556,
+ 0.333, 1.000, 0.667, 0.333, 1.000, 0.278, 0.278, 0.278,
+ 0.278, 0.222, 0.222, 0.333, 0.333, 0.350, 0.556, 1.000,
+ 0.333, 1.000, 0.500, 0.333, 0.944, 0.278, 0.278, 0.667,
+ 0.278, 0.333, 0.556, 0.556, 0.556, 0.556, 0.260, 0.556,
+ 0.333, 0.737, 0.370, 0.556, 0.584, 0.333, 0.737, 0.333,
+ 0.400, 0.584, 0.333, 0.333, 0.333, 0.556, 0.537, 0.278,
+ 0.333, 0.333, 0.365, 0.556, 0.834, 0.834, 0.834, 0.611,
+ 0.667, 0.667, 0.667, 0.667, 0.667, 0.667, 1.000, 0.722,
+ 0.667, 0.667, 0.667, 0.667, 0.278, 0.278, 0.278, 0.278,
+ 0.722, 0.722, 0.778, 0.778, 0.778, 0.778, 0.778, 0.584,
+ 0.778, 0.722, 0.722, 0.722, 0.722, 0.667, 0.667, 0.611,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.889, 0.500,
+ 0.556, 0.556, 0.556, 0.556, 0.278, 0.278, 0.278, 0.278,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.584,
+ 0.611, 0.556, 0.556, 0.556, 0.556, 0.500, 0.556, 0.500
+};
+
+/**
+ * Character widths for Helvetica-Bold
+ */
+const double hvb_widths[256] = {
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.333, 0.474, 0.556, 0.556, 0.889, 0.722, 0.238,
+ 0.333, 0.333, 0.389, 0.584, 0.278, 0.333, 0.278, 0.278,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556,
+ 0.556, 0.556, 0.333, 0.333, 0.584, 0.584, 0.584, 0.611,
+ 0.975, 0.722, 0.722, 0.722, 0.722, 0.667, 0.611, 0.778,
+ 0.722, 0.278, 0.556, 0.722, 0.611, 0.833, 0.722, 0.778,
+ 0.667, 0.778, 0.722, 0.667, 0.611, 0.722, 0.667, 0.944,
+ 0.667, 0.667, 0.611, 0.333, 0.278, 0.333, 0.584, 0.556,
+ 0.333, 0.556, 0.611, 0.556, 0.611, 0.556, 0.333, 0.611,
+ 0.611, 0.278, 0.278, 0.556, 0.278, 0.889, 0.611, 0.611,
+ 0.611, 0.611, 0.389, 0.556, 0.333, 0.611, 0.556, 0.778,
+ 0.556, 0.556, 0.500, 0.389, 0.280, 0.389, 0.584, 0.278,
+ 0.278, 0.278, 0.278, 0.556, 0.500, 1.000, 0.556, 0.556,
+ 0.333, 1.000, 0.667, 0.333, 1.000, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.500, 0.500, 0.350, 0.556, 1.000,
+ 0.333, 1.000, 0.556, 0.333, 0.944, 0.278, 0.278, 0.667,
+ 0.278, 0.333, 0.556, 0.556, 0.556, 0.556, 0.280, 0.556,
+ 0.333, 0.737, 0.370, 0.556, 0.584, 0.333, 0.737, 0.333,
+ 0.400, 0.584, 0.333, 0.333, 0.333, 0.611, 0.556, 0.278,
+ 0.333, 0.333, 0.365, 0.556, 0.834, 0.834, 0.834, 0.611,
+ 0.722, 0.722, 0.722, 0.722, 0.722, 0.722, 1.000, 0.722,
+ 0.667, 0.667, 0.667, 0.667, 0.278, 0.278, 0.278, 0.278,
+ 0.722, 0.722, 0.778, 0.778, 0.778, 0.778, 0.778, 0.584,
+ 0.778, 0.722, 0.722, 0.722, 0.722, 0.667, 0.667, 0.611,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.889, 0.556,
+ 0.556, 0.556, 0.556, 0.556, 0.278, 0.278, 0.278, 0.278,
+ 0.611, 0.611, 0.611, 0.611, 0.611, 0.611, 0.611, 0.584,
+ 0.611, 0.611, 0.611, 0.611, 0.611, 0.556, 0.611, 0.556
+};
+
+/**
+ * Character widths for Helvetica-Oblique
+ */
+const double hvo_widths[256] = {
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.355, 0.556, 0.556, 0.889, 0.667, 0.191,
+ 0.333, 0.333, 0.389, 0.584, 0.278, 0.333, 0.278, 0.278,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556,
+ 0.556, 0.556, 0.278, 0.278, 0.584, 0.584, 0.584, 0.556,
+ 1.015, 0.667, 0.667, 0.722, 0.722, 0.667, 0.611, 0.778,
+ 0.722, 0.278, 0.500, 0.667, 0.556, 0.833, 0.722, 0.778,
+ 0.667, 0.778, 0.722, 0.667, 0.611, 0.722, 0.667, 0.944,
+ 0.667, 0.667, 0.611, 0.278, 0.278, 0.278, 0.469, 0.556,
+ 0.333, 0.556, 0.556, 0.500, 0.556, 0.556, 0.278, 0.556,
+ 0.556, 0.222, 0.222, 0.500, 0.222, 0.833, 0.556, 0.556,
+ 0.556, 0.556, 0.333, 0.500, 0.278, 0.556, 0.500, 0.722,
+ 0.500, 0.500, 0.500, 0.334, 0.260, 0.334, 0.584, 0.278,
+ 0.278, 0.278, 0.222, 0.556, 0.333, 1.000, 0.556, 0.556,
+ 0.333, 1.000, 0.667, 0.333, 1.000, 0.278, 0.278, 0.278,
+ 0.278, 0.222, 0.222, 0.333, 0.333, 0.350, 0.556, 1.000,
+ 0.333, 1.000, 0.500, 0.333, 0.944, 0.278, 0.278, 0.667,
+ 0.278, 0.333, 0.556, 0.556, 0.556, 0.556, 0.260, 0.556,
+ 0.333, 0.737, 0.370, 0.556, 0.584, 0.333, 0.737, 0.333,
+ 0.400, 0.584, 0.333, 0.333, 0.333, 0.556, 0.537, 0.278,
+ 0.333, 0.333, 0.365, 0.556, 0.834, 0.834, 0.834, 0.611,
+ 0.667, 0.667, 0.667, 0.667, 0.667, 0.667, 1.000, 0.722,
+ 0.667, 0.667, 0.667, 0.667, 0.278, 0.278, 0.278, 0.278,
+ 0.722, 0.722, 0.778, 0.778, 0.778, 0.778, 0.778, 0.584,
+ 0.778, 0.722, 0.722, 0.722, 0.722, 0.667, 0.667, 0.611,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.889, 0.500,
+ 0.556, 0.556, 0.556, 0.556, 0.278, 0.278, 0.278, 0.278,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.584,
+ 0.611, 0.556, 0.556, 0.556, 0.556, 0.500, 0.556, 0.500
+};
+
+/**
+ * Character widths for Helvetica-BoldOblique
+ */
+const double hvbo_widths[256] = {
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278, 0.278,
+ 0.278, 0.333, 0.474, 0.556, 0.556, 0.889, 0.722, 0.238,
+ 0.333, 0.333, 0.389, 0.584, 0.278, 0.333, 0.278, 0.278,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556,
+ 0.556, 0.556, 0.333, 0.333, 0.584, 0.584, 0.584, 0.611,
+ 0.975, 0.722, 0.722, 0.722, 0.722, 0.667, 0.611, 0.778,
+ 0.722, 0.278, 0.556, 0.722, 0.611, 0.833, 0.722, 0.778,
+ 0.667, 0.778, 0.722, 0.667, 0.611, 0.722, 0.667, 0.944,
+ 0.667, 0.667, 0.611, 0.333, 0.278, 0.333, 0.584, 0.556,
+ 0.333, 0.556, 0.611, 0.556, 0.611, 0.556, 0.333, 0.611,
+ 0.611, 0.278, 0.278, 0.556, 0.278, 0.889, 0.611, 0.611,
+ 0.611, 0.611, 0.389, 0.556, 0.333, 0.611, 0.556, 0.778,
+ 0.556, 0.556, 0.500, 0.389, 0.280, 0.389, 0.584, 0.278,
+ 0.278, 0.278, 0.278, 0.556, 0.500, 1.000, 0.556, 0.556,
+ 0.333, 1.000, 0.667, 0.333, 1.000, 0.278, 0.278, 0.278,
+ 0.278, 0.278, 0.278, 0.500, 0.500, 0.350, 0.556, 1.000,
+ 0.333, 1.000, 0.556, 0.333, 0.944, 0.278, 0.278, 0.667,
+ 0.278, 0.333, 0.556, 0.556, 0.556, 0.556, 0.280, 0.556,
+ 0.333, 0.737, 0.370, 0.556, 0.584, 0.333, 0.737, 0.333,
+ 0.400, 0.584, 0.333, 0.333, 0.333, 0.611, 0.556, 0.278,
+ 0.333, 0.333, 0.365, 0.556, 0.834, 0.834, 0.834, 0.611,
+ 0.722, 0.722, 0.722, 0.722, 0.722, 0.722, 1.000, 0.722,
+ 0.667, 0.667, 0.667, 0.667, 0.278, 0.278, 0.278, 0.278,
+ 0.722, 0.722, 0.778, 0.778, 0.778, 0.778, 0.778, 0.584,
+ 0.778, 0.722, 0.722, 0.722, 0.722, 0.667, 0.667, 0.611,
+ 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.889, 0.556,
+ 0.556, 0.556, 0.556, 0.556, 0.278, 0.278, 0.278, 0.278,
+ 0.611, 0.611, 0.611, 0.611, 0.611, 0.611, 0.611, 0.584,
+ 0.611, 0.611, 0.611, 0.611, 0.611, 0.556, 0.611, 0.556
+};
diff --git a/common/common_plotSVG_functions.cpp b/common/common_plotSVG_functions.cpp
new file mode 100644
index 0000000..09b69d1
--- /dev/null
+++ b/common/common_plotSVG_functions.cpp
@@ -0,0 +1,623 @@
+/**
+ * @file common_plotPS_functions.cpp
+ * @brief Kicad: Common plot SVG functions
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* Some info on basic items SVG format, used here:
+ * The root element of all SVG files is the <svg> element.
+ *
+ * The <g> element is used to group SVG shapes together.
+ * Once grouped you can transform the whole group of shapes as if it was a single shape.
+ * This is an advantage compared to a nested <svg> element
+ * which cannot be the target of transformation by itself.
+ *
+ * The <rect> element represents a rectangle.
+ * Using this element you can draw rectangles of various width, height,
+ * with different stroke (outline) and fill colors, with sharp or rounded corners etc.
+ *
+ * <svg xmlns="http://www.w3.org/2000/svg"
+ * xmlns:xlink="http://www.w3.org/1999/xlink">
+ *
+ * <rect x="10" y="10" height="100" width="100"
+ * style="stroke:#006600; fill: #00cc00"/>
+ *
+ * </svg>
+ *
+ * The <circle> element is used to draw circles.
+ * <circle cx="40" cy="40" r="24" style="stroke:#006600; fill:#00cc00"/>
+ *
+ * The <ellipse> element is used to draw ellipses.
+ * An ellipse is a circle that does not have equal height and width.
+ * Its radius in the x and y directions are different, in other words.
+ * <ellipse cx="40" cy="40" rx="30" ry="15"
+ * style="stroke:#006600; fill:#00cc00"/>
+ *
+ * The <line> element is used to draw lines.
+ *
+ * <line x1="0" y1="10" x2="0" y2="100" style="stroke:#006600;"/>
+ * <line x1="10" y1="10" x2="100" y2="100" style="stroke:#006600;"/>
+ *
+ * The <polyline> element is used to draw multiple connected lines
+ * Here is a simple example:
+ *
+ * <polyline points="0,0 30,0 15,30" style="stroke:#006600;"/>
+ *
+ * The <polygon> element is used to draw with multiple (3 or more) sides / edges.
+ * Here is a simple example:
+ *
+ * <polygon points="0,0 50,0 25,50" style="stroke:#660000; fill:#cc3333;"/>
+ *
+ * The <path> element is used to draw advanced shapes combined from lines and arcs,
+ * with or without fill.
+ * It is probably the most advanced and versatile SVG shape of them all.
+ * It is probably also the hardest element to master.
+ * <path d="M50,50
+ * A30,30 0 0,1 35,20
+ * L100,100
+ * M110,110
+ * L100,0"
+ * style="stroke:#660000; fill:none;"/>
+ *
+ * Draw an elliptic arc: it is one of basic path command:
+ * <path d="M(startx,starty) A(radiusx,radiusy)
+ * rotation-axe-x
+ * flag_arc_large,flag_sweep endx,endy">
+ * flag_arc_large: 0 = small arc > 180 deg, 1 = large arc > 180 deg
+ * flag_sweep : 0 = CCW, 1 = CW
+ * The center of ellipse is automatically calculated.
+ */
+#include <fctsys.h>
+#include <trigo.h>
+#include <wxstruct.h>
+#include <base_struct.h>
+#include <common.h>
+#include <plot_common.h>
+#include <macros.h>
+#include <kicad_string.h>
+
+
+
+/**
+ * Function XmlEsc
+ * translates '<' to "&lt;", '>' to "&gt;" and so on, according to the spec:
+ * http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html#charescaping
+ * May be moved to a library if needed generally, but not expecting that.
+ */
+static wxString XmlEsc( const wxString& aStr, bool isAttribute = false )
+{
+ wxString escaped;
+
+ escaped.reserve( aStr.length() );
+
+ for( wxString::const_iterator it = aStr.begin(); it != aStr.end(); ++it )
+ {
+ const wxChar c = *it;
+
+ switch( c )
+ {
+ case wxS( '<' ):
+ escaped.append( wxS( "&lt;" ) );
+ break;
+ case wxS( '>' ):
+ escaped.append( wxS( "&gt;" ) );
+ break;
+ case wxS( '&' ):
+ escaped.append( wxS( "&amp;" ) );
+ break;
+ case wxS( '\r' ):
+ escaped.append( wxS( "&#xD;" ) );
+ break;
+ default:
+ if( isAttribute )
+ {
+ switch( c )
+ {
+ case wxS( '"' ):
+ escaped.append( wxS( "&quot;" ) );
+ break;
+ case wxS( '\t' ):
+ escaped.append( wxS( "&#x9;" ) );
+ break;
+ case wxS( '\n' ):
+ escaped.append( wxS( "&#xA;" ));
+ break;
+ default:
+ escaped.append(c);
+ }
+ }
+ else
+ escaped.append(c);
+ }
+ }
+
+ return escaped;
+}
+
+
+SVG_PLOTTER::SVG_PLOTTER()
+{
+ m_graphics_changed = true;
+ SetTextMode( PLOTTEXTMODE_STROKE );
+ m_fillMode = NO_FILL; // or FILLED_SHAPE or FILLED_WITH_BG_BODYCOLOR
+ m_pen_rgb_color = 0; // current color value (black)
+ m_brush_rgb_color = 0; // current color value (black)
+ m_dashed = false;
+}
+
+
+void SVG_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror )
+{
+ m_plotMirror = aMirror;
+ m_yaxisReversed = true; // unlike other plotters, SVG has Y axis reversed
+ plotOffset = aOffset;
+ plotScale = aScale;
+ m_IUsPerDecimil = aIusPerDecimil;
+ iuPerDeviceUnit = 1.0 / aIusPerDecimil;
+ /* Compute the paper size in IUs */
+ paperSize = pageInfo.GetSizeMils();
+ paperSize.x *= 10.0 * aIusPerDecimil;
+ paperSize.y *= 10.0 * aIusPerDecimil;
+ SetDefaultLineWidth( 100 * aIusPerDecimil ); // arbitrary default
+}
+
+
+void SVG_PLOTTER::SetColor( EDA_COLOR_T color )
+{
+ PSLIKE_PLOTTER::SetColor( color );
+
+ if( m_graphics_changed )
+ setSVGPlotStyle();
+}
+
+
+void SVG_PLOTTER::setFillMode( FILL_T fill )
+{
+ if( m_fillMode != fill )
+ {
+ m_graphics_changed = true;
+ m_fillMode = fill;
+ }
+}
+
+
+void SVG_PLOTTER::setSVGPlotStyle()
+{
+ fputs( "</g>\n<g style=\"", outputFile );
+ fputs( "fill:#", outputFile );
+ // output the background fill color
+ fprintf( outputFile, "%6.6lX; ", m_brush_rgb_color );
+
+ switch( m_fillMode )
+ {
+ case NO_FILL:
+ fputs( "fill-opacity:0.0; ", outputFile );
+ break;
+
+ case FILLED_SHAPE:
+ fputs( "fill-opacity:1.0; ", outputFile );
+ break;
+
+ case FILLED_WITH_BG_BODYCOLOR:
+ fputs( "fill-opacity:0.6; ", outputFile );
+ break;
+ }
+
+ double pen_w = userToDeviceSize( GetCurrentLineWidth() );
+ fprintf( outputFile, "\nstroke:#%6.6lX; stroke-width:%g; stroke-opacity:1; \n",
+ m_pen_rgb_color, pen_w );
+ fputs( "stroke-linecap:round; stroke-linejoin:round;", outputFile );
+
+ if( m_dashed )
+ fprintf( outputFile, "stroke-dasharray:%g,%g;",
+ GetDashMarkLenIU(), GetDashGapLenIU() );
+
+ fputs( "\">\n", outputFile );
+
+ m_graphics_changed = false;
+}
+
+/* Set the current line width (in IUs) for the next plot
+ */
+void SVG_PLOTTER::SetCurrentLineWidth( int width )
+{
+ int pen_width;
+
+ if( width >= 0 )
+ pen_width = width;
+ else
+ pen_width = defaultPenWidth;
+
+ if( pen_width != currentPenWidth )
+ {
+ m_graphics_changed = true;
+ currentPenWidth = pen_width;
+ }
+
+ if( m_graphics_changed )
+ setSVGPlotStyle();
+}
+
+
+/* initialize m_red, m_green, m_blue ( 0 ... 255)
+ * from reduced values r, g ,b ( 0.0 to 1.0 )
+ */
+void SVG_PLOTTER::emitSetRGBColor( double r, double g, double b )
+{
+ int red = (int) ( 255.0 * r );
+ int green = (int) ( 255.0 * g );
+ int blue = (int) ( 255.0 * b );
+ long rgb_color = (red << 16) | (green << 8) | blue;
+
+ if( m_pen_rgb_color != rgb_color )
+ {
+ m_graphics_changed = true;
+ m_pen_rgb_color = rgb_color;
+
+ // Currently, use the same color for brush and pen
+ // (i.e. to draw and fill a contour)
+ m_brush_rgb_color = rgb_color;
+ }
+}
+
+
+/**
+ * SVG supports dashed lines
+ */
+void SVG_PLOTTER::SetDash( bool dashed )
+{
+ if( m_dashed != dashed )
+ {
+ m_graphics_changed = true;
+ m_dashed = dashed;
+ }
+
+ if( m_graphics_changed )
+ setSVGPlotStyle();
+}
+
+
+void SVG_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width )
+{
+ EDA_RECT rect( p1, wxSize( p2.x -p1.x, p2.y -p1.y ) );
+ rect.Normalize();
+ DPOINT org_dev = userToDeviceCoordinates( rect.GetOrigin() );
+ DPOINT end_dev = userToDeviceCoordinates( rect.GetEnd() );
+ DSIZE size_dev = end_dev - org_dev;
+ // Ensure size of rect in device coordinates is > 0
+ // I don't know if this is a SVG issue or a Inkscape issue, but
+ // Inkscape has problems with negative or null values for width and/or height, so avoid them
+ DBOX rect_dev( org_dev, size_dev);
+ rect_dev.Normalize();
+
+ setFillMode( fill );
+ SetCurrentLineWidth( width );
+
+ // Rectangles having a 0 size value for height or width are just not drawn on Inscape,
+ // so use a line when happens.
+ if( rect_dev.GetSize().x == 0.0 || rect_dev.GetSize().y == 0.0 ) // Draw a line
+ fprintf( outputFile,
+ "<line x1=\"%g\" y1=\"%g\" x2=\"%g\" y2=\"%g\" />\n",
+ rect_dev.GetPosition().x, rect_dev.GetPosition().y,
+ rect_dev.GetEnd().x, rect_dev.GetEnd().y
+ );
+
+ else
+ fprintf( outputFile,
+ "<rect x=\"%g\" y=\"%g\" width=\"%g\" height=\"%g\" rx=\"%g\" />\n",
+ rect_dev.GetPosition().x, rect_dev.GetPosition().y,
+ rect_dev.GetSize().x, rect_dev.GetSize().y,
+ 0.0 // radius of rounded corners
+ );
+}
+
+
+void SVG_PLOTTER::Circle( const wxPoint& pos, int diametre, FILL_T fill, int width )
+{
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ double radius = userToDeviceSize( diametre / 2.0 );
+
+ setFillMode( fill );
+ SetCurrentLineWidth( width );
+
+ fprintf( outputFile,
+ "<circle cx=\"%g\" cy=\"%g\" r=\"%g\" /> \n",
+ pos_dev.x, pos_dev.y, radius );
+}
+
+
+void SVG_PLOTTER::Arc( const wxPoint& centre, double StAngle, double EndAngle, int radius,
+ FILL_T fill, int width )
+{
+ /* Draws an arc of a circle, centred on (xc,yc), with starting point
+ * (x1, y1) and ending at (x2, y2). The current pen is used for the outline
+ * and the current brush for filling the shape.
+ *
+ * The arc is drawn in an anticlockwise direction from the start point to
+ * the end point
+ */
+
+ if( radius <= 0 )
+ return;
+
+ if( StAngle > EndAngle )
+ std::swap( StAngle, EndAngle );
+
+ setFillMode( fill );
+ SetCurrentLineWidth( width );
+
+ // Calculate start point.
+ DPOINT centre_dev = userToDeviceCoordinates( centre );
+ double radius_dev = userToDeviceSize( radius );
+
+ if( !m_yaxisReversed ) // Should be never the case
+ {
+ double tmp = StAngle;
+ StAngle = -EndAngle;
+ EndAngle = -tmp;
+ }
+
+ if( m_plotMirror )
+ {
+ if( m_mirrorIsHorizontal )
+ {
+ StAngle = 1800.0 -StAngle;
+ EndAngle = 1800.0 -EndAngle;
+ std::swap( StAngle, EndAngle );
+ }
+ else
+ {
+ StAngle = -StAngle;
+ EndAngle = -EndAngle;
+ }
+ }
+
+ DPOINT start;
+ start.x = radius_dev;
+ RotatePoint( &start.x, &start.y, StAngle );
+ DPOINT end;
+ end.x = radius_dev;
+ RotatePoint( &end.x, &end.y, EndAngle );
+ start += centre_dev;
+ end += centre_dev;
+
+ double theta1 = DECIDEG2RAD( StAngle );
+
+ if( theta1 < 0 )
+ theta1 = theta1 + M_PI * 2;
+
+ double theta2 = DECIDEG2RAD( EndAngle );
+
+ if( theta2 < 0 )
+ theta2 = theta2 + M_PI * 2;
+
+ if( theta2 < theta1 )
+ theta2 = theta2 + M_PI * 2;
+
+ int flg_arc = 0; // flag for large or small arc. 0 means less than 180 degrees
+
+ if( fabs( theta2 - theta1 ) > M_PI )
+ flg_arc = 1;
+
+ int flg_sweep = 0; // flag for sweep always 0
+
+ // Draw a single arc: an arc is one of 3 curve commands (2 other are 2 bezier curves)
+ // params are start point, radius1, radius2, X axe rotation,
+ // flag arc size (0 = small arc > 180 deg, 1 = large arc > 180 deg),
+ // sweep arc ( 0 = CCW, 1 = CW),
+ // end point
+ fprintf( outputFile, "<path d=\"M%g %g A%g %g 0.0 %d %d %g %g \" />\n",
+ start.x, start.y, radius_dev, radius_dev,
+ flg_arc, flg_sweep,
+ end.x, end.y );
+}
+
+
+void SVG_PLOTTER::PlotPoly( const std::vector<wxPoint>& aCornerList,
+ FILL_T aFill, int aWidth )
+{
+ if( aCornerList.size() <= 1 )
+ return;
+
+ setFillMode( aFill );
+ SetCurrentLineWidth( aWidth );
+
+ switch( aFill )
+ {
+ case NO_FILL:
+ fprintf( outputFile, "<polyline fill=\"none;\"\n" );
+ break;
+
+ case FILLED_WITH_BG_BODYCOLOR:
+ case FILLED_SHAPE:
+ fprintf( outputFile, "<polyline style=\"fill-rule:evenodd;\"\n" );
+ break;
+ }
+
+ DPOINT pos = userToDeviceCoordinates( aCornerList[0] );
+ fprintf( outputFile, "points=\"%d,%d\n", (int) pos.x, (int) pos.y );
+
+ for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
+ {
+ pos = userToDeviceCoordinates( aCornerList[ii] );
+ fprintf( outputFile, "%d,%d\n", (int) pos.x, (int) pos.y );
+ }
+
+ // Close/(fill) the path
+ fprintf( outputFile, "\" /> \n" );
+}
+
+
+/**
+ * Postscript-likes at the moment are the only plot engines supporting bitmaps...
+ */
+void SVG_PLOTTER::PlotImage( const wxImage& aImage, const wxPoint& aPos,
+ double aScaleFactor )
+{
+ // in svg file we must insert a link to a png image file to plot an image
+ // the image itself is not included in the svg file.
+ // So we prefer skip the image, and just draw a rectangle,
+ // like other plotters which do not support images
+
+ PLOTTER::PlotImage( aImage, aPos, aScaleFactor );
+
+}
+
+
+void SVG_PLOTTER::PenTo( const wxPoint& pos, char plume )
+{
+ if( plume == 'Z' )
+ {
+ if( penState != 'Z' )
+ {
+ fputs( "\" />\n", outputFile );
+ penState = 'Z';
+ penLastpos.x = -1;
+ penLastpos.y = -1;
+ }
+
+ return;
+ }
+
+ if( penState == 'Z' ) // here plume = 'D' or 'U'
+ {
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+
+ // Ensure we do not use a fill mode when moving tne pen,
+ // in SVG mode (i;e. we are plotting only basic lines, not a filled area
+ if( m_fillMode != NO_FILL )
+ {
+ setFillMode( NO_FILL );
+ setSVGPlotStyle();
+ }
+
+ fprintf( outputFile, "<path d=\"M%d %d\n",
+ (int) pos_dev.x, (int) pos_dev.y );
+ }
+ else if( penState != plume || pos != penLastpos )
+ {
+ DPOINT pos_dev = userToDeviceCoordinates( pos );
+ fprintf( outputFile, "L%d %d\n",
+ (int) pos_dev.x, (int) pos_dev.y );
+ }
+
+ penState = plume;
+ penLastpos = pos;
+}
+
+
+/**
+ * The code within this function
+ * creates SVG files header
+ */
+bool SVG_PLOTTER::StartPlot()
+{
+ wxASSERT( outputFile );
+ wxString msg;
+
+ static const char* header[] =
+ {
+ "<?xml version=\"1.0\" standalone=\"no\"?>\n",
+ " <!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \n",
+ " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"> \n",
+ "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" \n",
+ NULL
+ };
+
+ // Write header.
+ for( int ii = 0; header[ii] != NULL; ii++ )
+ {
+ fputs( header[ii], outputFile );
+ }
+
+ // Write viewport pos and size
+ wxPoint origin; // TODO set to actual value
+ fprintf( outputFile,
+ " width=\"%gcm\" height=\"%gcm\" viewBox=\"%d %d %d %d \">\n",
+ (double) paperSize.x / m_IUsPerDecimil * 2.54 / 10000,
+ (double) paperSize.y / m_IUsPerDecimil * 2.54 / 10000,
+ origin.x, origin.y,
+ (int) ( paperSize.x / m_IUsPerDecimil ),
+ (int) ( paperSize.y / m_IUsPerDecimil) );
+
+ // Write title
+ char date_buf[250];
+ time_t ltime = time( NULL );
+ strftime( date_buf, 250, "%Y/%m/%d %H:%M:%S",
+ localtime( &ltime ) );
+
+ fprintf( outputFile,
+ "<title>SVG Picture created as %s date %s </title>\n",
+ TO_UTF8( XmlEsc( wxFileName( filename ).GetFullName() ) ), date_buf );
+ // End of header
+ fprintf( outputFile, " <desc>Picture generated by %s </desc>\n",
+ TO_UTF8( XmlEsc( creator ) ) );
+
+ // output the pen and brush color (RVB values in hex) and opacity
+ double opacity = 1.0; // 0.0 (transparent to 1.0 (solid)
+ fprintf( outputFile,
+ "<g style=\"fill:#%6.6lX; fill-opacity:%g;stroke:#%6.6lX; stroke-opacity:%g;\n",
+ m_brush_rgb_color, opacity, m_pen_rgb_color, opacity );
+
+ // output the pen cap and line joint
+ fputs( "stroke-linecap:round; stroke-linejoin:round; \"\n", outputFile );
+ fputs( " transform=\"translate(0 0) scale(1 1)\">\n", outputFile );
+ return true;
+}
+
+
+bool SVG_PLOTTER::EndPlot()
+{
+ fputs( "</g> \n</svg>\n", outputFile );
+ fclose( outputFile );
+ outputFile = NULL;
+
+ return true;
+}
+
+
+void SVG_PLOTTER::Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed )
+{
+ setFillMode( NO_FILL );
+ SetColor( aColor );
+ SetCurrentLineWidth( aWidth );
+
+ // TODO: see if the postscript native text code can be used in SVG plotter
+
+ PLOTTER::Text( aPos, aColor, aText, aOrient, aSize, aH_justify, aV_justify,
+ aWidth, aItalic, aBold, aMultilineAllowed );
+}
diff --git a/common/common_plot_functions.cpp b/common/common_plot_functions.cpp
new file mode 100644
index 0000000..cda3788
--- /dev/null
+++ b/common/common_plot_functions.cpp
@@ -0,0 +1,165 @@
+/**
+ * @file common_plot_functions.cpp
+ * @brief Kicad: Common plotting functions
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <base_struct.h>
+#include <plot_common.h>
+#include <worksheet.h>
+#include <class_base_screen.h>
+#include <drawtxt.h>
+#include <class_title_block.h>
+#include "worksheet_shape_builder.h"
+#include "class_worksheet_dataitem.h"
+#include <wx/filename.h>
+
+
+
+wxString GetDefaultPlotExtension( PlotFormat aFormat )
+{
+ switch( aFormat )
+ {
+ case PLOT_FORMAT_DXF:
+ return DXF_PLOTTER::GetDefaultFileExtension();
+
+ case PLOT_FORMAT_POST:
+ return PS_PLOTTER::GetDefaultFileExtension();
+
+ case PLOT_FORMAT_PDF:
+ return PDF_PLOTTER::GetDefaultFileExtension();
+
+ case PLOT_FORMAT_HPGL:
+ return HPGL_PLOTTER::GetDefaultFileExtension();
+
+ case PLOT_FORMAT_GERBER:
+ return GERBER_PLOTTER::GetDefaultFileExtension();
+
+ case PLOT_FORMAT_SVG:
+ return SVG_PLOTTER::GetDefaultFileExtension();
+
+ default:
+ wxASSERT( false );
+ return wxEmptyString;
+ }
+}
+
+
+
+void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock,
+ const PAGE_INFO& aPageInfo,
+ int aSheetNumber, int aNumberOfSheets,
+ const wxString &aSheetDesc, const wxString &aFilename )
+{
+ /* Note: Page sizes values are given in mils
+ */
+ double iusPerMil = plotter->GetIUsPerDecimil() * 10.0;
+
+ EDA_COLOR_T plotColor = plotter->GetColorMode() ? RED : BLACK;
+ plotter->SetColor( plotColor );
+ WS_DRAW_ITEM_LIST drawList;
+
+ // Print only a short filename, if aFilename is the full filename
+ wxFileName fn( aFilename );
+
+ // Prepare plot parameters
+ drawList.SetPenSize(PLOTTER::USE_DEFAULT_LINE_WIDTH );
+ drawList.SetMilsToIUfactor( iusPerMil );
+ drawList.SetSheetNumber( aSheetNumber );
+ drawList.SetSheetCount( aNumberOfSheets );
+ drawList.SetFileName( fn.GetFullName() ); // Print only the short filename
+ drawList.SetSheetName( aSheetDesc );
+
+
+ drawList.BuildWorkSheetGraphicList( aPageInfo,
+ aTitleBlock, plotColor, plotColor );
+
+ // Draw item list
+ for( WS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item;
+ item = drawList.GetNext() )
+ {
+ plotter->SetCurrentLineWidth( PLOTTER::USE_DEFAULT_LINE_WIDTH );
+
+ switch( item->GetType() )
+ {
+ case WS_DRAW_ITEM_BASE::wsg_line:
+ {
+ WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item;
+ plotter->SetCurrentLineWidth( line->GetPenWidth() );
+ plotter->MoveTo( line->GetStart() );
+ plotter->FinishTo( line->GetEnd() );
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_rect:
+ {
+ WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item;
+ plotter->Rect( rect->GetStart(),
+ rect->GetEnd(),
+ NO_FILL,
+ rect->GetPenWidth() );
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_text:
+ {
+ WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item;
+ plotter->Text( text->GetTextPosition(), text->GetColor(),
+ text->GetShownText(), text->GetOrientation(),
+ text->GetSize(),
+ text->GetHorizJustify(), text->GetVertJustify(),
+ text->GetPenWidth(),
+ text->IsItalic(), text->IsBold(),
+ text->IsMultilineAllowed() );
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_poly:
+ {
+ WS_DRAW_ITEM_POLYGON* poly = (WS_DRAW_ITEM_POLYGON*) item;
+ plotter->PlotPoly( poly->m_Corners,
+ poly->IsFilled() ? FILLED_SHAPE : NO_FILL,
+ poly->GetPenWidth() );
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_bitmap:
+ {
+ WS_DRAW_ITEM_BITMAP* bm = (WS_DRAW_ITEM_BITMAP*) item;
+
+ WORKSHEET_DATAITEM_BITMAP* parent = (WORKSHEET_DATAITEM_BITMAP*)bm->GetParent();
+
+ if( parent->m_ImageBitmap == NULL )
+ break;
+
+ parent->m_ImageBitmap->PlotImage( plotter, bm->GetPosition(),
+ plotColor, PLOTTER::USE_DEFAULT_LINE_WIDTH );
+ }
+ break;
+ }
+ }
+}
diff --git a/common/config_params.cpp b/common/config_params.cpp
new file mode 100644
index 0000000..1882ac1
--- /dev/null
+++ b/common/config_params.cpp
@@ -0,0 +1,529 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <pgm_base.h>
+#include <common.h>
+#include <kicad_string.h>
+#include <gestfich.h>
+#include <wxstruct.h>
+#include <config_params.h>
+
+#include <wx/apptrait.h>
+#include <wx/stdpaths.h>
+
+#include <wildcards_and_files_ext.h>
+
+#include <boost/foreach.hpp>
+
+
+void wxConfigLoadParams( wxConfigBase* aCfg,
+ const PARAM_CFG_ARRAY& aList, const wxString& aGroup )
+{
+ wxASSERT( aCfg );
+
+ BOOST_FOREACH( const PARAM_CFG_BASE& param, aList )
+ {
+ if( !!param.m_Group )
+ aCfg->SetPath( param.m_Group );
+ else
+ aCfg->SetPath( aGroup );
+
+ if( param.m_Setup )
+ continue;
+
+ param.ReadParam( aCfg );
+ }
+}
+
+
+void wxConfigLoadSetups( wxConfigBase* aCfg, const PARAM_CFG_ARRAY& aList )
+{
+ wxASSERT( aCfg );
+
+ BOOST_FOREACH( const PARAM_CFG_BASE& param, aList )
+ {
+ if( !param.m_Setup )
+ continue;
+
+ param.ReadParam( aCfg );
+ }
+}
+
+
+void wxConfigSaveParams( wxConfigBase* aCfg,
+ const PARAM_CFG_ARRAY& aList, const wxString& aGroup )
+{
+ wxASSERT( aCfg );
+
+ BOOST_FOREACH( const PARAM_CFG_BASE& param, aList )
+ {
+ if( !!param.m_Group )
+ aCfg->SetPath( param.m_Group );
+ else
+ aCfg->SetPath( aGroup );
+
+ if( param.m_Setup )
+ continue;
+
+ if( param.m_Type == PARAM_COMMAND_ERASE ) // Erase all data
+ {
+ if( !!param.m_Ident )
+ aCfg->DeleteGroup( param.m_Ident );
+ }
+ else
+ {
+ param.SaveParam( aCfg );
+ }
+ }
+}
+
+
+void wxConfigSaveSetups( wxConfigBase* aCfg, const PARAM_CFG_ARRAY& aList )
+{
+ wxASSERT( aCfg );
+
+ BOOST_FOREACH( const PARAM_CFG_BASE& param, aList )
+ {
+ if( !param.m_Setup )
+ continue;
+
+ if( param.m_Type == PARAM_COMMAND_ERASE ) // Erase all data
+ {
+ if( !!param.m_Ident )
+ aCfg->DeleteGroup( param.m_Ident );
+ }
+ else
+ {
+ param.SaveParam( aCfg );
+ }
+ }
+}
+
+
+void ConfigBaseWriteDouble( wxConfigBase* aConfig, const wxString& aKey, double aValue )
+{
+ // Use a single strategy, regardless of wx version.
+ // Want C locale float string.
+
+ LOCALE_IO toggle;
+ wxString tnumber = wxString::Format( wxT( "%.16g" ), aValue );
+
+ aConfig->Write( aKey, tnumber );
+}
+
+
+PARAM_CFG_BASE::PARAM_CFG_BASE( const wxString& ident, const paramcfg_id type,
+ const wxChar* group )
+{
+ m_Ident = ident;
+ m_Type = type;
+ m_Group = group;
+ m_Setup = false;
+}
+
+
+PARAM_CFG_INT::PARAM_CFG_INT( const wxString& ident, int* ptparam,
+ int default_val, int min, int max,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_INT, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val;
+ m_Min = min;
+ m_Max = max;
+}
+
+
+PARAM_CFG_INT::PARAM_CFG_INT( bool Insetup, const wxString& ident, int* ptparam,
+ int default_val, int min, int max,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_INT, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val;
+ m_Min = min;
+ m_Max = max;
+ m_Setup = Insetup;
+}
+
+
+void PARAM_CFG_INT::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ int itmp = aConfig->Read( m_Ident, m_Default );
+
+ if( (itmp < m_Min) || (itmp > m_Max) )
+ itmp = m_Default;
+
+ *m_Pt_param = itmp;
+}
+
+
+void PARAM_CFG_INT::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ aConfig->Write( m_Ident, *m_Pt_param );
+}
+
+
+PARAM_CFG_INT_WITH_SCALE::PARAM_CFG_INT_WITH_SCALE( const wxString& ident, int* ptparam,
+ int default_val, int min, int max,
+ const wxChar* group, double aBiu2cfgunit ) :
+ PARAM_CFG_INT( ident, ptparam, default_val, min, max, group )
+{
+ m_Type = PARAM_INT_WITH_SCALE;
+ m_BIU_to_cfgunit = aBiu2cfgunit;
+}
+
+
+PARAM_CFG_INT_WITH_SCALE::PARAM_CFG_INT_WITH_SCALE( bool Insetup,
+ const wxString& ident, int* ptparam,
+ int default_val, int min, int max,
+ const wxChar* group, double aBiu2cfgunit ) :
+ PARAM_CFG_INT( Insetup, ident, ptparam, default_val, min, max, group )
+{
+ m_Type = PARAM_INT_WITH_SCALE;
+ m_BIU_to_cfgunit = aBiu2cfgunit;
+}
+
+
+void PARAM_CFG_INT_WITH_SCALE::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ double dtmp = (double) m_Default * m_BIU_to_cfgunit;
+ aConfig->Read( m_Ident, &dtmp );
+
+ int itmp = KiROUND( dtmp / m_BIU_to_cfgunit );
+
+ if( (itmp < m_Min) || (itmp > m_Max) )
+ itmp = m_Default;
+
+ *m_Pt_param = itmp;
+}
+
+
+void PARAM_CFG_INT_WITH_SCALE::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ // We cannot use aConfig->Write for a double, because
+ // this function uses a format with very few digits in mantissa,
+ // and truncature issues are frequent.
+ // We uses our function.
+ ConfigBaseWriteDouble( aConfig, m_Ident, *m_Pt_param * m_BIU_to_cfgunit );
+}
+
+
+PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR( const wxString& ident, EDA_COLOR_T* ptparam,
+ EDA_COLOR_T default_val,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_SETCOLOR, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val;
+}
+
+
+PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR( bool Insetup,
+ const wxString& ident,
+ EDA_COLOR_T* ptparam,
+ EDA_COLOR_T default_val,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_SETCOLOR, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val;
+ m_Setup = Insetup;
+}
+
+
+void PARAM_CFG_SETCOLOR::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ EDA_COLOR_T itmp = ColorByName( aConfig->Read( m_Ident, wxT("NONE") ) );
+
+ if( itmp == UNSPECIFIED_COLOR )
+ itmp = m_Default;
+ *m_Pt_param = itmp;
+}
+
+
+void PARAM_CFG_SETCOLOR::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ aConfig->Write( m_Ident, ColorGetName( *m_Pt_param ) );
+}
+
+
+PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE( const wxString& ident, double* ptparam,
+ double default_val, double min, double max,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_DOUBLE, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val;
+ m_Min = min;
+ m_Max = max;
+}
+
+
+PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE( bool Insetup,
+ const wxString& ident,
+ double* ptparam,
+ double default_val,
+ double min,
+ double max,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_DOUBLE, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val;
+ m_Min = min;
+ m_Max = max;
+ m_Setup = Insetup;
+}
+
+
+void PARAM_CFG_DOUBLE::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ double dtmp = m_Default;
+ aConfig->Read( m_Ident, &dtmp );
+
+ if( (dtmp < m_Min) || (dtmp > m_Max) )
+ dtmp = m_Default;
+
+ *m_Pt_param = dtmp;
+}
+
+
+void PARAM_CFG_DOUBLE::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ // We cannot use aConfig->Write for a double, because
+ // this function uses a format with very few digits in mantissa,
+ // and truncature issues are frequent.
+ // We uses our function.
+ ConfigBaseWriteDouble( aConfig, m_Ident, *m_Pt_param );
+}
+
+
+PARAM_CFG_BOOL::PARAM_CFG_BOOL( const wxString& ident, bool* ptparam,
+ int default_val, const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_BOOL, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val ? true : false;
+}
+
+
+PARAM_CFG_BOOL::PARAM_CFG_BOOL( bool Insetup,
+ const wxString& ident,
+ bool* ptparam,
+ int default_val,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_BOOL, group )
+{
+ m_Pt_param = ptparam;
+ m_Default = default_val ? true : false;
+ m_Setup = Insetup;
+}
+
+
+void PARAM_CFG_BOOL::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ int itmp = aConfig->Read( m_Ident, (int) m_Default );
+
+ *m_Pt_param = itmp ? true : false;
+}
+
+
+void PARAM_CFG_BOOL::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ aConfig->Write( m_Ident, *m_Pt_param );
+}
+
+
+PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( const wxString& ident,
+ wxString* ptparam,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_WXSTRING, group )
+{
+ m_Pt_param = ptparam;
+}
+
+
+PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( bool Insetup, const wxString& ident,
+ wxString* ptparam,
+ const wxString& default_val,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_WXSTRING, group )
+{
+ m_Pt_param = ptparam;
+ m_Setup = Insetup;
+ m_default = default_val;
+}
+
+
+void PARAM_CFG_WXSTRING::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ *m_Pt_param = aConfig->Read( m_Ident, m_default );
+}
+
+
+void PARAM_CFG_WXSTRING::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ aConfig->Write( m_Ident, *m_Pt_param );
+}
+
+
+PARAM_CFG_FILENAME::PARAM_CFG_FILENAME( const wxString& ident,
+ wxString* ptparam,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_FILENAME, group )
+{
+ m_Pt_param = ptparam;
+}
+
+
+void PARAM_CFG_FILENAME::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ wxString prm = aConfig->Read( m_Ident );
+ // file names are stored using Unix notation
+ // under Window we must use \ instead of /
+ // mainly if there is a server name in path (something like \\server\kicad)
+#ifdef __WINDOWS__
+ prm.Replace(wxT("/"), wxT("\\"));
+#endif
+ *m_Pt_param = prm;
+}
+
+
+void PARAM_CFG_FILENAME::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ wxString prm = *m_Pt_param;
+ // filenames are stored using Unix notation
+ prm.Replace(wxT("\\"), wxT("/") );
+ aConfig->Write( m_Ident, prm );
+}
+
+
+PARAM_CFG_LIBNAME_LIST::PARAM_CFG_LIBNAME_LIST( const wxChar* ident,
+ wxArrayString* ptparam,
+ const wxChar* group ) :
+ PARAM_CFG_BASE( ident, PARAM_LIBNAME_LIST, group )
+{
+ m_Pt_param = ptparam;
+}
+
+
+void PARAM_CFG_LIBNAME_LIST::ReadParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ int indexlib = 1; // We start indexlib to 1 because first
+ // lib name is LibName1
+ wxString libname, id_lib;
+ wxArrayString* libname_list = m_Pt_param;
+
+ while( 1 )
+ {
+ id_lib = m_Ident;
+ id_lib << indexlib;
+ indexlib++;
+ libname = aConfig->Read( id_lib, wxT( "" ) );
+
+ if( libname.IsEmpty() )
+ break;
+ // file names are stored using Unix notation
+ // under Window we must use \ instead of /
+ // mainly if there is a server name in path (something like \\server\kicad)
+#ifdef __WINDOWS__
+ libname.Replace(wxT("/"), wxT("\\"));
+#endif
+ libname_list->Add( libname );
+ }
+}
+
+
+void PARAM_CFG_LIBNAME_LIST::SaveParam( wxConfigBase* aConfig ) const
+{
+ if( !m_Pt_param || !aConfig )
+ return;
+
+ wxArrayString* libname_list = m_Pt_param;
+
+ wxString configkey;
+ wxString libname;
+
+ for( unsigned indexlib = 0; indexlib < libname_list->GetCount(); indexlib++ )
+ {
+ configkey = m_Ident;
+
+ // We use indexlib+1 because first lib name is LibName1
+ configkey << (indexlib + 1);
+ libname = libname_list->Item( indexlib );
+
+ // filenames are stored using Unix notation
+ libname.Replace(wxT("\\"), wxT("/") );
+ aConfig->Write( configkey, libname );
+ }
+}
diff --git a/common/confirm.cpp b/common/confirm.cpp
new file mode 100644
index 0000000..7aeb85f
--- /dev/null
+++ b/common/confirm.cpp
@@ -0,0 +1,160 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file confirm.cpp
+ * @brief utilities to display some error, warning and info short messges
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <wx/wx.h>
+#include <wx/html/htmlwin.h>
+#include <wx/stockitem.h>
+#include <html_messagebox.h>
+#include <dialog_exit_base.h>
+#include <bitmaps.h>
+
+class DIALOG_EXIT: public DIALOG_EXIT_BASE
+{
+public:
+ DIALOG_EXIT( wxWindow *aParent, const wxString& aMessage ) :
+ DIALOG_EXIT_BASE( aParent )
+ {
+ m_bitmap->SetBitmap( KiBitmap( dialog_warning_xpm ) );
+
+ if( !aMessage.IsEmpty() )
+ m_TextInfo->SetLabel( aMessage );
+
+ GetSizer()->Fit( this );
+ GetSizer()->SetSizeHints( this );
+ };
+
+private:
+ void OnSaveAndExit( wxCommandEvent& event ) { EndModal( wxID_YES ); }
+ void OnCancel( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
+ void OnExitNoSave( wxCommandEvent& event ) { EndModal( wxID_NO ); }
+};
+
+
+int DisplayExitDialog( wxWindow* parent, const wxString& aMessage )
+{
+ DIALOG_EXIT dlg( parent, aMessage );
+
+ int ret = dlg.ShowModal();
+ return ret;
+}
+
+
+void DisplayError( wxWindow* parent, const wxString& text, int displaytime )
+{
+ wxMessageDialog* dialog;
+
+ if( displaytime > 0 )
+ dialog = new wxMessageDialog( parent, text, _( "Warning" ),
+ wxOK | wxCENTRE | wxICON_INFORMATION
+ | wxRESIZE_BORDER
+ );
+ else
+ dialog = new wxMessageDialog( parent, text, _( "Error" ),
+ wxOK | wxCENTRE | wxICON_ERROR
+ | wxRESIZE_BORDER
+ );
+
+ dialog->ShowModal();
+ dialog->Destroy();
+}
+
+
+void DisplayInfoMessage( wxWindow* parent, const wxString& text, int displaytime )
+{
+ wxMessageDialog* dialog;
+
+ dialog = new wxMessageDialog( parent, text, _( "Info" ),
+ wxOK | wxCENTRE | wxICON_INFORMATION );
+
+ dialog->ShowModal();
+ dialog->Destroy();
+}
+
+
+void DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title,
+ const wxString& text, const wxSize& size )
+{
+ HTML_MESSAGE_BOX dlg( parent, title, wxDefaultPosition, size );
+
+ dlg.AddHTML_Text( text );
+ dlg.ShowModal();
+}
+
+
+bool IsOK( wxWindow* aParent, const wxString& aMessage )
+{
+ wxMessageDialog dlg( aParent, aMessage, _( "Confirmation" ),
+ wxYES_NO | wxCENTRE | wxICON_QUESTION );
+
+ return dlg.ShowModal() == wxID_YES;
+}
+
+
+class DIALOG_YES_NO_CANCEL : public DIALOG_EXIT
+{
+public:
+ DIALOG_YES_NO_CANCEL( wxWindow *aParent,
+ const wxString& aPrimaryMessage,
+ const wxString& aSecondaryMessage = wxEmptyString,
+ const wxString& aYesButtonText = wxEmptyString,
+ const wxString& aNoButtonText = wxEmptyString,
+ const wxString& aCancelButtonText = wxEmptyString ) :
+ DIALOG_EXIT( aParent, aSecondaryMessage )
+ {
+ m_TextInfo->SetLabel( aPrimaryMessage );
+
+ if( aSecondaryMessage.IsEmpty() )
+ m_staticText2->Hide();
+
+ m_buttonSaveAndExit->SetLabel( aYesButtonText.IsEmpty() ? wxGetStockLabel( wxID_YES ) :
+ aYesButtonText );
+ m_buttonExitNoSave->SetLabel( aNoButtonText.IsEmpty() ? wxGetStockLabel( wxID_NO ) :
+ aNoButtonText );
+ m_buttonCancel->SetLabel( aCancelButtonText.IsEmpty() ? wxGetStockLabel( wxID_CANCEL ) :
+ aCancelButtonText );
+ GetSizer()->Fit( this );
+ GetSizer()->SetSizeHints( this );
+ };
+};
+
+
+int YesNoCancelDialog( wxWindow* aParent,
+ const wxString& aPrimaryMessage,
+ const wxString& aSecondaryMessage,
+ const wxString& aYesButtonText,
+ const wxString& aNoButtonText,
+ const wxString& aCancelButtonText )
+{
+ DIALOG_YES_NO_CANCEL dlg( aParent, aPrimaryMessage, aSecondaryMessage,
+ aYesButtonText, aNoButtonText, aCancelButtonText );
+
+ return dlg.ShowModal();
+}
diff --git a/common/convert_basic_shapes_to_polygon.cpp b/common/convert_basic_shapes_to_polygon.cpp
new file mode 100644
index 0000000..fbbd3c1
--- /dev/null
+++ b/common/convert_basic_shapes_to_polygon.cpp
@@ -0,0 +1,249 @@
+/**
+ * @file convert_basic_shapes_to_polygon.cpp
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+#include <vector>
+
+#include <fctsys.h>
+#include <trigo.h>
+#include <macros.h>
+#include <common.h>
+#include <convert_basic_shapes_to_polygon.h>
+
+
+/**
+ * Function TransformCircleToPolygon
+ * convert a circle to a polygon, using multiple straight lines
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aCenter = the center of the circle
+ * @param aRadius = the radius of the circle
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * Note: the polygon is inside the circle, so if you want to have the polygon
+ * outside the circle, you should give aRadius calculated with a corrrection factor
+ */
+void TransformCircleToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aCenter, int aRadius,
+ int aCircleToSegmentsCount )
+{
+ wxPoint corner_position;
+ int delta = 3600 / aCircleToSegmentsCount; // rot angle in 0.1 degree
+ int halfstep = 1800 / aCircleToSegmentsCount; // the starting value for rot angles
+
+ aCornerBuffer.NewOutline();
+
+ for( int ii = 0; ii < aCircleToSegmentsCount; ii++ )
+ {
+ corner_position.x = aRadius;
+ corner_position.y = 0;
+ int angle = (ii * delta) + halfstep;
+ RotatePoint( &corner_position.x, &corner_position.y, angle );
+ corner_position += aCenter;
+ aCornerBuffer.Append( corner_position.x, corner_position.y );
+ }
+}
+
+
+/**
+ * Function TransformRoundedEndsSegmentToPolygon
+ * convert a segment with rounded ends to a polygon
+ * Convert arcs to multiple straight lines
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aStart = the segment start point coordinate
+ * @param aEnd = the segment end point coordinate
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * @param aWidth = the segment width
+ * Note: the polygon is inside the arc ends, so if you want to have the polygon
+ * outside the circle, you should give aStart and aEnd calculated with a correction factor
+ */
+void TransformRoundedEndsSegmentToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aStart, wxPoint aEnd,
+ int aCircleToSegmentsCount,
+ int aWidth )
+{
+ int radius = aWidth / 2;
+ wxPoint endp = aEnd - aStart; // end point coordinate for the same segment starting at (0,0)
+ wxPoint startp = aStart;
+ wxPoint corner;
+ VECTOR2I polypoint;
+
+ aCornerBuffer.NewOutline();
+
+ // normalize the position in order to have endp.x >= 0;
+ if( endp.x < 0 )
+ {
+ endp = aStart - aEnd;
+ startp = aEnd;
+ }
+
+ double delta_angle = ArcTangente( endp.y, endp.x ); // delta_angle is in 0.1 degrees
+ int seg_len = KiROUND( EuclideanNorm( endp ) );
+
+ int delta = 3600 / aCircleToSegmentsCount; // rot angle in 0.1 degree
+
+ // Compute the outlines of the segment, and creates a polygon
+ // add right rounded end:
+ for( int ii = 0; ii < 1800; ii += delta )
+ {
+ corner = wxPoint( 0, radius );
+ RotatePoint( &corner, ii );
+ corner.x += seg_len;
+ RotatePoint( &corner, -delta_angle );
+ corner += startp;
+ polypoint.x = corner.x;
+ polypoint.y = corner.y;
+ aCornerBuffer.Append( polypoint.x, polypoint.y );
+ }
+
+ // Finish arc:
+ corner = wxPoint( seg_len, -radius );
+ RotatePoint( &corner, -delta_angle );
+ corner += startp;
+ polypoint.x = corner.x;
+ polypoint.y = corner.y;
+ aCornerBuffer.Append( polypoint.x, polypoint.y );
+
+ // add left rounded end:
+ for( int ii = 0; ii < 1800; ii += delta )
+ {
+ corner = wxPoint( 0, -radius );
+ RotatePoint( &corner, ii );
+ RotatePoint( &corner, -delta_angle );
+ corner += startp;
+ polypoint.x = corner.x;
+ polypoint.y = corner.y;
+ aCornerBuffer.Append( polypoint.x, polypoint.y );
+ }
+
+ // Finish arc:
+ corner = wxPoint( 0, radius );
+ RotatePoint( &corner, -delta_angle );
+ corner += startp;
+ polypoint.x = corner.x;
+ polypoint.y = corner.y;
+ aCornerBuffer.Append( polypoint.x, polypoint.y );
+}
+
+
+/**
+ * Function TransformArcToPolygon
+ * Creates a polygon from an Arc
+ * Convert arcs to multiple straight segments
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aCentre = centre of the arc or circle
+ * @param aStart = start point of the arc, or a point on the circle
+ * @param aArcAngle = arc angle in 0.1 degrees. For a circle, aArcAngle = 3600
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * @param aWidth = width (thickness) of the line
+ */
+void TransformArcToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aCentre, wxPoint aStart, double aArcAngle,
+ int aCircleToSegmentsCount, int aWidth )
+{
+ wxPoint arc_start, arc_end;
+ int delta = 3600 / aCircleToSegmentsCount; // rotate angle in 0.1 degree
+
+ arc_end = arc_start = aStart;
+
+ if( aArcAngle != 3600 )
+ {
+ RotatePoint( &arc_end, aCentre, -aArcAngle );
+ }
+
+ if( aArcAngle < 0 )
+ {
+ std::swap( arc_start, arc_end );
+ aArcAngle = -aArcAngle;
+ }
+
+ // Compute the ends of segments and creates poly
+ wxPoint curr_end = arc_start;
+ wxPoint curr_start = arc_start;
+
+ for( int ii = delta; ii < aArcAngle; ii += delta )
+ {
+ curr_end = arc_start;
+ RotatePoint( &curr_end, aCentre, -ii );
+ TransformRoundedEndsSegmentToPolygon( aCornerBuffer, curr_start, curr_end,
+ aCircleToSegmentsCount, aWidth );
+ curr_start = curr_end;
+ }
+
+ if( curr_end != arc_end )
+ TransformRoundedEndsSegmentToPolygon( aCornerBuffer,
+ curr_end, arc_end,
+ aCircleToSegmentsCount, aWidth );
+}
+
+
+/**
+ * Function TransformRingToPolygon
+ * Creates a polygon from a ring
+ * Convert arcs to multiple straight segments
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aCentre = centre of the arc or circle
+ * @param aRadius = radius of the circle
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * @param aWidth = width (thickness) of the ring
+ */
+void TransformRingToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aCentre, int aRadius,
+ int aCircleToSegmentsCount, int aWidth )
+{
+ int delta = 3600 / aCircleToSegmentsCount; // rotate angle in 0.1 degree
+
+ // Compute the corners posituions and creates poly
+ wxPoint curr_point;
+ int inner_radius = aRadius - ( aWidth / 2 );
+ int outer_radius = inner_radius + aWidth;
+
+ aCornerBuffer.NewOutline();
+
+ // Draw the inner circle of the ring
+ for( int ii = 0; ii < 3600; ii += delta )
+ {
+ curr_point.x = inner_radius;
+ curr_point.y = 0;
+ RotatePoint( &curr_point, ii );
+ curr_point += aCentre;
+ aCornerBuffer.Append( curr_point.x, curr_point.y );
+ }
+
+ // Draw the last point of inner circle
+ aCornerBuffer.Append( aCentre.x + inner_radius, aCentre.y );
+
+ // Draw the outer circle of the ring
+ for( int ii = 0; ii < 3600; ii += delta )
+ {
+ curr_point.x = outer_radius;
+ curr_point.y = 0;
+ RotatePoint( &curr_point, -ii );
+ curr_point += aCentre;
+ aCornerBuffer.Append( curr_point.x, curr_point.y );
+ }
+
+ // Draw the last point of outer circle
+ aCornerBuffer.Append( aCentre.x + outer_radius, aCentre.y );
+ aCornerBuffer.Append( aCentre.x + inner_radius, aCentre.y );
+}
diff --git a/common/copy_to_clipboard.cpp b/common/copy_to_clipboard.cpp
new file mode 100644
index 0000000..1c58546
--- /dev/null
+++ b/common/copy_to_clipboard.cpp
@@ -0,0 +1,159 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2006 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file copy_to_clipboard.cpp
+ */
+
+#include <wx/clipbrd.h>
+//#include <wx/metafile.h>
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <id.h>
+#include <class_drawpanel.h>
+#include <class_base_screen.h>
+#include <confirm.h>
+#include <draw_frame.h>
+
+static bool DrawPageOnClipboard( EDA_DRAW_FRAME* aFrame );
+
+
+void EDA_DRAW_FRAME::CopyToClipboard( wxCommandEvent& event )
+{
+ DrawPageOnClipboard( this );
+
+ if( event.GetId() == ID_GEN_COPY_BLOCK_TO_CLIPBOARD )
+ {
+ if( GetScreen()->IsBlockActive() )
+ m_canvas->SetCursor( wxCursor( (wxStockCursor) m_canvas->GetDefaultCursor() ) );
+
+ m_canvas->EndMouseCapture();
+ }
+}
+
+
+/* copy the current page or block to the clipboard ,
+ * to export drawings to other applications (word processing ...)
+ * This is not suitable for copy command within Eeschema or Pcbnew
+ */
+bool DrawPageOnClipboard( EDA_DRAW_FRAME* aFrame )
+{
+ bool DrawBlock = false;
+ wxRect DrawArea;
+ BASE_SCREEN* screen = aFrame->GetCanvas()->GetScreen();
+
+ if( screen->IsBlockActive() )
+ {
+ DrawBlock = true;
+ DrawArea.SetX( screen->m_BlockLocate.GetX() );
+ DrawArea.SetY( screen->m_BlockLocate.GetY() );
+ DrawArea.SetWidth( screen->m_BlockLocate.GetWidth() );
+ DrawArea.SetHeight( screen->m_BlockLocate.GetHeight() );
+ }
+ else
+ DrawArea.SetSize( aFrame->GetPageSizeIU() );
+
+ // Calculate a reasonable dc size, in pixels, and the dc scale to fit
+ // the drawings into the dc size
+ // scale is the ratio resolution (in PPI) / internal units
+ double ppi = 300; // Use 300 pixels per inch to create bitmap images on start
+ double inch2Iu = 1000.0 * (double) screen->MilsToIuScalar();
+ double scale = ppi / inch2Iu;
+
+ wxSize dcsize = DrawArea.GetSize();
+
+ int maxdim = std::max( dcsize.x, dcsize.y );
+ // the max size in pixels of the bitmap used to byuild the sheet copy
+ const int maxbitmapsize = 3000;
+
+ while( int( maxdim * scale ) > maxbitmapsize )
+ {
+ ppi = ppi / 1.5;
+ scale = ppi / inch2Iu;
+ }
+
+ dcsize.x *= scale;
+ dcsize.y *= scale;
+
+ // Set draw offset, zoom... to values needed to draw in the memory DC
+ // after saving initial values:
+ wxPoint tmp_startvisu = screen->m_StartVisu;
+ double tmpzoom = screen->GetZoom();
+ wxPoint old_org = screen->m_DrawOrg;
+ screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
+ screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
+
+ screen->SetZoom( 1 ); // we use zoom = 1 in draw functions.
+
+ wxMemoryDC dc;
+ wxBitmap image( dcsize );
+ dc.SelectObject( image );
+
+ EDA_RECT tmp = *aFrame->GetCanvas()->GetClipBox();
+ GRResetPenAndBrush( &dc );
+ GRForceBlackPen( false );
+ screen->m_IsPrinting = true;
+ dc.SetUserScale( scale, scale );
+
+ aFrame->GetCanvas()->SetClipBox( EDA_RECT( wxPoint( 0, 0 ),
+ wxSize( 0x7FFFFF0, 0x7FFFFF0 ) ) );
+
+ if( DrawBlock )
+ {
+ dc.SetClippingRegion( DrawArea );
+ }
+
+ dc.Clear();
+ aFrame->GetCanvas()->EraseScreen( &dc );
+ const LSET allLayersMask = LSET().set();
+ aFrame->PrintPage( &dc, allLayersMask, false );
+ screen->m_IsPrinting = false;
+ aFrame->GetCanvas()->SetClipBox( tmp );
+
+ bool success = true;
+
+ if( wxTheClipboard->Open() )
+ {
+ // This data objects are held by the clipboard,
+ // so do not delete them in the app.
+ wxBitmapDataObject* clipbrd_data = new wxBitmapDataObject( image );
+ wxTheClipboard->SetData( clipbrd_data );
+ wxTheClipboard->Close();
+ }
+ else
+ success = false;
+
+ // Deselect Bitmap from DC in order to delete the MemoryDC safely
+ // without deleting the bitmap
+ dc.SelectObject( wxNullBitmap );
+
+ GRForceBlackPen( false );
+
+ screen->m_StartVisu = tmp_startvisu;
+ screen->m_DrawOrg = old_org;
+ screen->SetZoom( tmpzoom );
+
+ return success;
+}
diff --git a/common/dialog_about/AboutDialog_main.cpp b/common/dialog_about/AboutDialog_main.cpp
new file mode 100644
index 0000000..662229a
--- /dev/null
+++ b/common/dialog_about/AboutDialog_main.cpp
@@ -0,0 +1,501 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2010-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <dialog_about.h>
+#include <aboutinfo.h>
+#include <wx/aboutdlg.h>
+#include <wx/textctrl.h>
+#include <boost/version.hpp>
+
+
+/* Used icons:
+ * lang_xx_xpm[]; // Icons of various national flags
+ * show_3d_xpm[]; // 3D icon
+ * edit_module_xpm[];
+ * icon_kicad_xpm[]; // Icon of the application
+ */
+#include <bitmaps.h>
+#include <wxstruct.h>
+#include <common.h>
+#include <pgm_base.h>
+#include <build_version.h>
+
+
+#include <wx/arrimpl.cpp>
+WX_DEFINE_OBJARRAY( Contributors )
+
+// Helper functions:
+static wxString HtmlHyperlink( const wxString& url, const wxString& description = wxEmptyString );
+static wxString HtmlNewline( const unsigned int amount = 1 );
+
+
+/**
+ * Initializes the <code>AboutAppInfo</code> object with application specific information.
+ *
+ * This the object which holds all information about the application
+ */
+static void InitKiCadAboutNew( AboutAppInfo& info )
+{
+ // Set application specific icon
+ const wxTopLevelWindow* const tlw = wxDynamicCast( Pgm().App().GetTopWindow(),
+ wxTopLevelWindow );
+
+ if( tlw )
+ info.SetIcon( tlw->GetIcon() );
+ else
+ {
+ wxBitmap bitmap = KiBitmap( icon_kicad_xpm );
+ wxIcon icon;
+
+ icon.CopyFromBitmap( bitmap );
+
+ info.SetIcon( icon );
+ }
+
+ /* Set title */
+ info.SetAppName( wxT( ".: " ) + Pgm().App().GetAppName() + wxT( " :." ) );
+
+ /* Copyright information */
+ info.SetCopyright( wxT( "(C) 1992-2015 KiCad Developers Team" ) );
+
+ /* KiCad build version */
+ wxString version;
+ version << wxT( "Version: " ) << GetBuildVersion()
+#ifdef DEBUG
+ << wxT( ", debug" )
+#else
+ << wxT( ", release" )
+#endif
+ << wxT( " build" );
+
+ info.SetBuildVersion( version );
+
+ /* wxWidgets version */
+ wxString libVersion;
+ libVersion << wxT( "wxWidgets " )
+ << wxMAJOR_VERSION << wxT( "." )
+ << wxMINOR_VERSION << wxT( "." )
+ << wxRELEASE_NUMBER
+
+ /* Unicode or ANSI version */
+#if wxUSE_UNICODE
+ << wxT( " Unicode " );
+#else
+ << wxT( " ANSI " );
+#endif
+
+ // Just in case someone builds KiCad with the platform native of Boost instead of
+ // the version included with the KiCad source.
+ libVersion << wxT( "and Boost " ) << ( BOOST_VERSION / 100000 ) << wxT( "." )
+ << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." ) << ( BOOST_VERSION % 100 )
+ << wxT( "\n" );
+
+ // Operating System Information
+
+ wxPlatformInfo platformInfo;
+
+ libVersion << wxT( "Platform: " ) << wxGetOsDescription() << wxT( ", " )
+ << platformInfo.GetArchName();
+
+ info.SetLibVersion( libVersion );
+
+
+ /* info/description part HTML formatted */
+
+ wxString description;
+
+ /* short description */
+ description << wxT( "<p>" );
+ description << wxT( "<b><u>" )
+ << _( "Description" )
+ << wxT( "</u></b>" ); // bold & underlined font for caption
+
+ description << wxT( "<p>" )
+ << _( "The KiCad EDA Suite is a set of open source applications for the "
+ "creation of electronic schematics and to design printed circuit boards." )
+ << wxT( "</p>" );
+
+ description << wxT( "</p>" );
+
+ /* websites */
+ description << wxT( "<p>" );
+ description << wxT( "<b><u>" )
+ << _( "KiCad on the web" )
+ << wxT( "</u></b>" ); // bold & underlined font for caption
+
+ // bullet-ed list with some http links
+ description << wxT( "<ul>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "http://www.kicad-pcb.org" ),
+ _( "The official KiCad website" ) )
+ << wxT( "</li>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://launchpad.net/kicad" ),
+ _( "Developer's website on Launchpad" ) )
+ << wxT("</li>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://github.com/KiCad/" ),
+ _( "Official repository for component and footprint libraries" ) )
+ << wxT( "</li>" );
+ description << wxT( "</ul>" );
+ description << wxT( "</p>" );
+
+ description << wxT( "<p><b><u>" )
+ << _( "Bug tracker" )
+ << wxT( "</u></b>" ); // bold & underlined font caption
+
+ // bullet-ed list with some http links
+ description << wxT( "<ul>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://bugs.launchpad.net/kicad/+bugs?orderby=-id&start=0" ),
+ _( "Report or examine bugs" ) )
+ << wxT( "</li>" );
+ description << wxT( "</ul></p>" );
+
+ description << wxT( "<p><b><u>" )
+ << _( "KiCad user's groups and community" )
+ << wxT( "</u></b>" ); // bold & underlined font caption
+
+ description << wxT( "<ul>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://groups.yahoo.com/neo/groups/kicad-users/info" ),
+ _( "KiCad user's group" ) )
+ << wxT( "</li>" );
+
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://forum.kicad.info" ),
+ _( "KiCad forum" ) )
+ << wxT( "</li>" );
+
+ description << wxT( "</ul></p>" );
+
+ info.SetDescription( description );
+
+
+ /* License information also HTML formatted */
+ wxString license;
+ license
+ << wxT( "<div align='center'>" )
+ << HtmlNewline( 4 )
+ << _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
+ << HtmlHyperlink( wxT( "http://www.gnu.org/licenses" ),
+ _( "GNU General Public License (GPL) version 3 or any later version" ) )
+ << wxT( "</div>" );
+
+ info.SetLicense( license );
+
+
+ /* A contributor consists of the following information:
+ * Mandatory:
+ * - Name
+ * - EMail address
+ * Optional:
+ * - Category
+ * - Category specific icon
+ *
+ * All contributors of the same category will be enumerated under this category
+ * which should be represented by the same icon.
+ */
+
+ // The core developers
+ info.AddDeveloper( new Contributor( wxT( "Jean-Pierre Charras" ),
+ wxT( "jp.charras@wanadoo.fr" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Dick Hollenbeck" ),
+ wxT( "dick@softplc.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Wayne Stambaugh" ),
+ wxT( "stambaughw@gmail.com" ) ) );
+
+ // alphabetically by last name after main 3 above:
+ info.AddDeveloper( new Contributor( wxT( "Frank Bennett" ),
+ wxT( "bennett78@lpbroadband.net" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Cirilo Bernardo" ),
+ wxT( "cirilo_bernardo@yahoo.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Jonas Diemer" ),
+ wxT( "diemer@gmx.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Torsten Hüter" ),
+ wxT( "torstenhtr@gmx.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Jerry Jacobs" ),
+ wxT( "xor.gate.engineering@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Mario Luzeiro" ),
+ wxT( "mrluzeiro@ua.pt" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Daniel Majewski" ),
+ wxT( "lordblick@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Lorenzo Marcantonio" ),
+ wxT( "lomarcan@tin.it" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Marco Mattila" ),
+ wxT( "marcom99@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Chris Pavlina" ),
+ wxT( "pavlina.chris@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Miguel Angel Ajo Pelayo" ),
+ wxT( "miguelangel@nbee.es" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Jacobo Aragunde Perez" ),
+ wxT( "jaragunde@igalia.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Simon Richter" ),
+ wxT( "Simon.Richter@hogyros.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Mark Roszko" ),
+ wxT( "mark.roszko@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Marco Serantoni" ),
+ wxT( "marco.serantoni@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Brian Sidebotham" ),
+ wxT( "brian.sidebotham@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Mateusz Skowroński" ),
+ wxT( "skowri@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Rafael Sokolowski" ),
+ wxT( "rafael.sokolowski@web.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Vesa Solonen" ),
+ wxT( "vesa.solonen@hut.fi" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Bernhard Stegmaier" ),
+ wxT( "stegmaier@sw-systems.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Orson (Maciej Sumiński)" ),
+ wxT( "maciej.suminski@cern.ch" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Tomasz Wlostowski" ),
+ wxT( "tomasz.wlostowski@cern.ch" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Adam Wolf" ),
+ wxT( "adamwolf@feelslikeburning.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Alexander Zakamaldin" ),
+ wxT( "zaka62@mail.ru" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Henner Zeller" ),
+ wxT( "h.zeller@acm.org" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Andrew Zonenberg" ),
+ wxT( "azonenberg@drawersteak.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Nick Østergaard" ),
+ wxT( "oe.nick@gmail.com" ) ) );
+
+ // The document writers
+ info.AddDocWriter( new Contributor( wxT( "Jean-Pierre Charras" ),
+ wxT( "jp.charras@wanadoo.fr" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Marco Ciampa" ),
+ wxT( "ciampix@libero.it" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Dick Hollenbeck" ),
+ wxT( "dick@softplc.com" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Igor Plyatov" ),
+ wxT( "plyatov@gmail.com" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Wayne Stambaugh" ),
+ wxT( "stambaughw@gmail.com" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Fabrizio Tappero" ),
+ wxT( "fabrizio.tappero@gmail.com" ) ) );
+
+ /* The translators
+ * As category the language to which the translation was done is used
+ * and as icon the national flag of the corresponding country.
+ */
+ info.AddTranslator( new Contributor( wxT( "Martin Kratoška" ),
+ wxT( "martin@ok1rr.com" ),
+ wxT( "Czech (CZ)" ),
+ KiBitmapNew( lang_cs_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Jerry Jacobs" ),
+ wxT( "xor.gate.engineering@gmail.com" ),
+ wxT( "Dutch (NL)" ),
+ KiBitmapNew( lang_nl_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Vesa Solonen" ),
+ wxT( "vesa.solonen@hut.fi" ),
+ wxT( "Finnish (FI)" ),
+ KiBitmapNew( lang_fi_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Jean-Pierre Charras" ),
+ wxT( "jp.charras@wanadoo.fr" ),
+ wxT( "French (FR)" ),
+ KiBitmapNew( lang_fr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Mateusz Skowroński" ),
+ wxT( "skowri@gmail.com" ),
+ wxT( "Polish (PL)" ),
+ KiBitmapNew( lang_pl_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Kerusey Karyu" ),
+ wxT( "keruseykaryu@o2.pl" ),
+ wxT( "Polish (PL)" ),
+ KiBitmapNew( lang_pl_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Renie Marquet" ),
+ wxT( "reniemarquet@uol.com.br" ),
+ wxT( "Portuguese (PT)" ),
+ KiBitmapNew( lang_pt_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Igor Plyatov" ),
+ wxT( "plyatov@gmail.com" ),
+ wxT( "Russian (RU)" ),
+ KiBitmapNew( lang_ru_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Andrey Fedorushkov" ),
+ wxT( "andrf@mail.ru" ),
+ wxT( "Russian (RU)" ),
+ KiBitmapNew( lang_ru_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Eldar Khayrullin" ),
+ wxT( "eldar.khayrullin@mail.ru" ),
+ wxT( "Russian (RU)" ),
+ KiBitmapNew( lang_ru_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Pedro Martin del Valle" ),
+ wxT( "pkicad@yahoo.es" ),
+ wxT( "Spanish (ES)" ),
+ KiBitmapNew( lang_es_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Iñigo Zuluaga" ),
+ wxT( "inigo_zuluaga@yahoo.es" ),
+ wxT( "Spanish (ES)" ),
+ KiBitmapNew( lang_es_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Iñigo Figuero" ),
+ wxT( "ifs@elektroquark.com" ),
+ wxT( "Spanish (ES)" ),
+ KiBitmapNew( lang_es_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Rafael Sokolowski" ),
+ wxT( "rafael.sokolowski@web.de" ),
+ wxT( "German (DE)" ),
+ KiBitmapNew( lang_de_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Kenta Yonekura" ),
+ wxT( "yoneken@kicad.jp" ),
+ wxT( "Japanese (JA)" ),
+ KiBitmapNew( lang_jp_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Manolis Stefanis" ),
+ wxT( "" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Athanasios Vlastos" ),
+ wxT( "" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Milonas Kostas" ),
+ wxT( "milonas.ko@gmail.com" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Michail Misirlis" ),
+ wxT( "mmisirlis@gmail.com" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Massimo Cioce" ),
+ wxT( "ciocemax@alice.it" ),
+ wxT( "Italian (IT)" ),
+ KiBitmapNew( lang_it_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Marco Ciampa" ),
+ wxT( "ciampix@libero.it" ),
+ wxT( "Italian (IT)" ),
+ KiBitmapNew( lang_it_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Evgeniy Ivanov" ),
+ wxT( "evgeniy_p_ivanov@yahoo.ca" ),
+ wxT( "Bulgarian (BG)" ),
+ KiBitmapNew( lang_bg_xpm ) ) );
+
+ // TODO: are these all russian translators,
+ // placed them here now,
+ // or else align them below other language maintainer with mail adress
+ info.AddTranslator( new Contributor( wxT( "Remy Halvick" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+ info.AddTranslator( new Contributor( wxT( "David Briscoe" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+ info.AddTranslator( new Contributor( wxT( "Dominique Laigle" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+ info.AddTranslator( new Contributor( wxT( "Paul Burke" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+
+ // Programm credits for icons
+ info.AddArtist( new Contributor( wxT( "Iñigo Zuluaga" ),
+ wxT( "inigo_zuluaga@yahoo.es" ),
+ wxT( "Icons by" ),
+ KiBitmapNew( edit_module_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Konstantin Baranovskiy" ),
+ wxT( "baranovskiykonstantin@gmail.com" ),
+ wxT( "New icons by" ),
+ KiBitmapNew( edit_module_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Fabrizio Tappero" ),
+ wxT( "fabrizio.tappero@gmail.com" ),
+ wxT( "New icons by" ),
+ KiBitmapNew( edit_module_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Christophe Boschat" ),
+ wxT( "nox454@hotmail.fr" ),
+ wxT( "3D models by" ),
+ KiBitmapNew( three_d_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Renie Marquet" ),
+ wxT( "reniemarquet@uol.com.br" ),
+ wxT( "3D models by" ),
+ KiBitmapNew( three_d_xpm ) ) );
+
+ // Programm credits for package developers.
+ info.AddPackager( new Contributor( wxT( "Jean-Samuel Reynaud" ),
+ wxT( "js.reynaud@gmail.com" ) ) );
+ info.AddPackager( new Contributor( wxT( "Bernhard Stegmaier" ),
+ wxT( "stegmaier@sw-systems.de" ) ) );
+ info.AddPackager( new Contributor( wxT( "Adam Wolf" ),
+ wxT( "adamwolf@feelslikeburning.com" ) ) );
+ info.AddPackager( new Contributor( wxT( "Nick Østergaard" ),
+ wxT( "oe.nick@gmail.com" ) ) );
+}
+
+
+bool ShowAboutDialog( wxWindow* parent )
+{
+ AboutAppInfo info;
+
+ InitKiCadAboutNew( info );
+
+ dialog_about* dlg = new dialog_about( parent, info );
+ dlg->SetIcon( info.GetIcon() );
+ dlg->Show();
+
+ return true;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Helper functions
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Function HtmlHyperlink
+ *
+ * wraps \a aUrl with a HTML anchor tag containing a hyperlink text reference
+ * to form a HTML hyperlink.
+ *
+ * @param aUrl the url that will be embedded in an anchor tag containing a hyperlink reference
+ * @param aDescription the optional describing text that will be represented as a hyperlink.
+ * If not specified the url will be used as hyperlink.
+ * @return a HTML conform hyperlink like <a href='url'>description</a>
+ */
+static wxString HtmlHyperlink( const wxString& aUrl, const wxString& aDescription )
+{
+ wxString hyperlink = wxEmptyString;
+
+ if( aDescription.IsEmpty() )
+ hyperlink << wxT( "<a href='" ) << aUrl << wxT( "'>" ) << aUrl << wxT( "</a>" );
+ else
+ hyperlink << wxT( "<a href='" ) << aUrl << wxT( "'>" ) << aDescription << wxT( "</a>" );
+
+ return hyperlink;
+}
+
+
+/**
+ * Function HtmlNewline
+ *
+ * creates an HTML newline character sequence of \a aCount.
+ *
+ * @param aCount the number of HTML newline tags to concatenate, default is to return just
+ * one <br> tag.
+ * @return the concatenated amount of HTML newline tag(s) <br>
+ */
+static wxString HtmlNewline( const unsigned int aCount )
+{
+ wxString newlineTags = wxEmptyString;
+
+ for( size_t i = 0; i<aCount; ++i )
+ newlineTags << wxT( "<br>" );
+
+ return newlineTags;
+}
diff --git a/common/dialog_about/aboutinfo.h b/common/dialog_about/aboutinfo.h
new file mode 100644
index 0000000..8e19c59
--- /dev/null
+++ b/common/dialog_about/aboutinfo.h
@@ -0,0 +1,174 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef ABOUTAPPINFO_H
+#define ABOUTAPPINFO_H
+
+#include <wx/aboutdlg.h>
+#include <wx/bitmap.h>
+#include <wx/dynarray.h>
+
+class Contributor;
+
+WX_DECLARE_OBJARRAY( Contributor, Contributors );
+
+
+/**
+ * An object of this class is meant to be used to store application specific information
+ * like who has contributed in which area of the application, the license, copyright
+ * and other descriptive information.
+ */
+class AboutAppInfo
+{
+public:
+ AboutAppInfo() {};
+ virtual ~AboutAppInfo() {};
+
+ void AddDeveloper( const Contributor* developer )
+ {
+ if( developer != NULL )
+ developers.Add( developer );
+ }
+
+ void AddDocWriter( const Contributor* docwriter )
+ {
+ if( docwriter != NULL )
+ docwriters.Add( docwriter );
+ }
+
+ void AddArtist( const Contributor* artist )
+ {
+ if( artist != NULL )
+ artists.Add( artist );
+ }
+
+ void AddTranslator( const Contributor* translator )
+ {
+ if( translator != NULL )
+ translators.Add( translator );
+ }
+
+ void AddPackager( const Contributor* packager )
+ {
+ if( packager != NULL )
+ packagers.Add( packager );
+ }
+
+ Contributors GetDevelopers() { return developers; }
+ Contributors GetDocWriters() { return docwriters; }
+ Contributors GetArtists() { return artists; }
+ Contributors GetTranslators() { return translators; }
+ Contributors GetPackagers() { return packagers; }
+
+ void SetDescription( const wxString& text ) { description = text; }
+ wxString& GetDescription() { return description; }
+
+ void SetLicense( const wxString& text ) { license = text; }
+ wxString& GetLicense() { return license; }
+
+ void SetCopyright( const wxString& text ) { copyright = text; }
+ wxString GetCopyright()
+ {
+ wxString copyrightText = copyright;
+
+#if wxUSE_UNICODE
+ const wxString utf8_copyrightSign = wxString::FromUTF8( "\xc2\xa9" );
+ copyrightText.Replace( _T( "(c)" ), utf8_copyrightSign );
+ copyrightText.Replace( _T( "(C)" ), utf8_copyrightSign );
+#endif // wxUSE_UNICODE
+
+ return copyrightText;
+ }
+
+ void SetAppName( const wxString& name ) { appName = name; }
+ wxString& GetAppName() { return appName; }
+
+ void SetBuildVersion( const wxString& version ) { buildVersion = version; }
+ wxString& GetBuildVersion() { return buildVersion; }
+
+ void SetLibVersion( const wxString& version ) { libVersion = version; }
+ wxString& GetLibVersion() { return libVersion; }
+
+ void SetIcon( const wxIcon& icon ) { appIcon = icon; }
+ wxIcon& GetIcon() { return appIcon; }
+
+private:
+ Contributors developers;
+ Contributors docwriters;
+ Contributors artists;
+ Contributors translators;
+ Contributors packagers;
+
+ wxString description;
+ wxString license;
+
+ wxString copyright; // Todo: copyright sign in unicode
+ wxString appName;
+ wxString buildVersion;
+ wxString libVersion;
+
+ wxIcon appIcon;
+};
+
+
+/**
+ * A contributor, a person which was involved in the development of the application
+ * or which has contributed in any kind somehow to the project.
+ *
+ * A contributor consists of the following mandatory information:
+ * - Name
+ * - EMail address
+ *
+ * Each contributor can have optional information assigned like:
+ * - A category
+ * - A category specific icon
+ */
+class Contributor
+{
+public:
+ Contributor( const wxString& name,
+ const wxString& email,
+ const wxString& category = wxEmptyString,
+ wxBitmap* icon = NULL ) :
+ m_checked( false )
+ { m_name = name; m_email = email; m_category = category; m_icon = icon; }
+
+ virtual ~Contributor() {}
+
+ wxString& GetName() { return m_name; }
+ wxString& GetEMail() { return m_email; }
+ wxString& GetCategory() { return m_category; }
+ wxBitmap* GetIcon() { return m_icon; }
+ void SetChecked( bool status ) { m_checked = status; }
+ bool IsChecked() { return m_checked; }
+
+private:
+ wxString m_name;
+ wxString m_email;
+ wxString m_category;
+ wxBitmap* m_icon;
+ bool m_checked;
+};
+
+#endif // ABOUTAPPINFO_H
diff --git a/common/dialog_about/dialog_about.cpp b/common/dialog_about/dialog_about.cpp
new file mode 100644
index 0000000..e947c87
--- /dev/null
+++ b/common/dialog_about/dialog_about.cpp
@@ -0,0 +1,399 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <dialog_about.h>
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class dialog_about methods
+///////////////////////////////////////////////////////////////////////////////
+
+dialog_about::dialog_about(wxWindow *parent, AboutAppInfo& appInfo)
+ : dialog_about_base(parent), info(appInfo)
+{
+ picInformation = KiBitmap( info_xpm );
+ picDevelopers = KiBitmap( preference_xpm );
+ picDocWriters = KiBitmap( editor_xpm );
+ picArtists = KiBitmap( palette_xpm );
+ picTranslators = KiBitmap( language_xpm );
+ picLicense = KiBitmap( tools_xpm );
+ picPackagers = KiBitmap( zip_xpm );
+
+ m_bitmapApp->SetBitmap( info.GetIcon() );
+
+ m_staticTextAppTitle->SetLabel( info.GetAppName() );
+ m_staticTextCopyright->SetLabel( info.GetCopyright() );
+ m_staticTextBuildVersion->SetLabel( info.GetBuildVersion() );
+ m_staticTextLibVersion->SetLabel( info.GetLibVersion() );
+
+ DeleteNotebooks();
+ CreateNotebooks();
+
+ GetSizer()->SetSizeHints( this );
+ m_auiNotebook->Update();
+ SetFocus();
+ Centre();
+}
+
+
+dialog_about::~dialog_about()
+{
+}
+
+
+wxFlexGridSizer* dialog_about::CreateFlexGridSizer()
+{
+ // three columns with vertical and horizontal extra space of two pixels
+ wxFlexGridSizer* fgSizer1 = new wxFlexGridSizer( 3, 2, 2 );
+ fgSizer1->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ return fgSizer1;
+}
+
+
+void dialog_about::DeleteNotebooks()
+{
+ for( size_t i=0; i<m_auiNotebook->GetPageCount(); ++i )
+ m_auiNotebook->DeletePage( i );
+}
+
+
+void dialog_about::CreateNotebooks()
+{
+ CreateNotebookHtmlPage( m_auiNotebook, _( "Information" ), picInformation,
+ info.GetDescription() );
+
+ CreateNotebookPage( m_auiNotebook, _( "Developers" ) , picDevelopers, info.GetDevelopers() );
+ CreateNotebookPage( m_auiNotebook, _( "Doc Writers" ), picDocWriters, info.GetDocWriters() );
+
+ CreateNotebookPageByCategory( m_auiNotebook, _( "Artists" ), picArtists, info.GetArtists() );
+ CreateNotebookPageByCategory( m_auiNotebook, _( "Translators" ), picTranslators,
+ info.GetTranslators() );
+ CreateNotebookPageByCategory( m_auiNotebook, _( "Packagers" ), picPackagers,
+ info.GetPackagers() );
+
+ CreateNotebookHtmlPage( m_auiNotebook, _( "License" ), picLicense, info.GetLicense() );
+}
+
+void dialog_about::CreateNotebookPage( wxAuiNotebook* parent, const wxString& caption,
+ const wxBitmap& icon, const Contributors& contributors )
+{
+ wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxScrolledWindow* m_scrolledWindow1 = new wxScrolledWindow( parent, wxID_ANY,
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow1->SetScrollRate( 5, 5 );
+
+ /* Panel for additional space at the left,
+ * but can also be used to show an additional bitmap.
+ */
+ wxPanel* panel1 = new wxPanel( m_scrolledWindow1 );
+
+ wxFlexGridSizer* fgSizer1 = CreateFlexGridSizer();
+
+ for( size_t i=0; i<contributors.GetCount(); ++i )
+ {
+ Contributor* contributor = &contributors.Item( i );
+
+ // Icon at first column
+ wxStaticBitmap* m_bitmap1 = CreateStaticBitmap( m_scrolledWindow1, contributor->GetIcon() );
+ fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
+
+ // Name of contributor at second column
+ if ( contributor->GetName() != wxEmptyString )
+ {
+ wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ contributor->GetName(),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+
+ // Email address of contributor at third column
+ if ( contributor->GetEMail() != wxEmptyString )
+ {
+ wxHyperlinkCtrl* hyperlink = CreateHyperlink( m_scrolledWindow1,
+ contributor->GetEMail() );
+ fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+ }
+
+ bSizer->Add( panel1, 1, wxEXPAND|wxALL, 10 );
+ bSizer->Add( fgSizer1, 7, wxEXPAND|wxALL, 10 ); // adjust width of panel with first int value
+ m_scrolledWindow1->SetSizer( bSizer );
+ m_scrolledWindow1->Layout();
+ bSizer->Fit( m_scrolledWindow1 );
+ parent->AddPage( m_scrolledWindow1, caption, false, icon );
+}
+
+
+void dialog_about::CreateNotebookPageByCategory(wxAuiNotebook* parent, const wxString& caption,
+ const wxBitmap& icon,
+ const Contributors& contributors)
+{
+ wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxScrolledWindow* m_scrolledWindow1 = new wxScrolledWindow( parent, wxID_ANY,
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow1->SetScrollRate( 5, 5 );
+
+ /* Panel for additional space at the left,
+ * but can also be used to show an additional bitmap.
+ */
+ wxPanel* panel1 = new wxPanel( m_scrolledWindow1 );
+
+ wxFlexGridSizer* fgSizer1 = CreateFlexGridSizer();
+
+ for( size_t i=0; i<contributors.GetCount(); ++i )
+ {
+ Contributor* contributor = &contributors.Item( i );
+
+ wxBitmap* icon = contributor->GetIcon();
+ wxString category = contributor->GetCategory();
+
+ /* to construct the next row we expect to have
+ * a category and a contributor that was not considered up to now
+ */
+ if( ( category != wxEmptyString ) && !( contributor->IsChecked() ) )
+ {
+ // Icon at first column
+ wxStaticBitmap* m_bitmap1 = CreateStaticBitmap( m_scrolledWindow1, icon );
+ fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
+
+ // Category name at second column
+ wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ contributor->GetCategory() + wxT( ":" ),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false,
+ wxEmptyString ) ); // bold font
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+
+ // Nothing at third column
+ fgSizer1->AddSpacer( 5 );
+
+ // Now, all contributors of the same category will follow
+ for( size_t j=0; j<contributors.GetCount(); ++j )
+ {
+ Contributor* contributor = &contributors.Item( j );
+
+ if ( contributor->GetCategory() == category )
+ {
+ // First column is empty
+ fgSizer1->AddSpacer(5);
+
+ // Name of contributor at second column
+ wxStaticText* m_staticText2 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ wxT(" • ") + contributor->GetName(),
+ wxDefaultPosition,
+ wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText2, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+
+ // Email address of contributor at third column
+ if( contributor->GetEMail() != wxEmptyString )
+ {
+ wxHyperlinkCtrl* hyperlink = CreateHyperlink( m_scrolledWindow1,
+ contributor->GetEMail() );
+ fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+
+ /* this contributor was added to the GUI,
+ * thus can be ignored next time
+ */
+ contributor->SetChecked( true );
+ }
+ }
+ }
+ else
+ {
+ continue;
+ }
+ }
+
+ /* Now, lets list the remaining contributors that have not been considered
+ * because they were not assigned to any category.
+ */
+ for ( size_t k=0; k<contributors.GetCount(); ++k )
+ {
+ Contributor* contributor = &contributors.Item( k );
+
+ if ( contributor->IsChecked() )
+ continue;
+
+ // Icon at first column
+ wxStaticBitmap* m_bitmap1 = CreateStaticBitmap( m_scrolledWindow1, contributor->GetIcon() );
+ fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
+
+ // Name of contributor at second column
+ if( contributor->GetName() != wxEmptyString )
+ {
+ wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ contributor->GetName(),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+
+ // Email address of contributor at third column
+ if ( contributor->GetEMail() != wxEmptyString )
+ {
+ wxHyperlinkCtrl* hyperlink = CreateHyperlink( m_scrolledWindow1,
+ contributor->GetEMail() );
+ fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+ }
+
+ bSizer->Add( panel1, 1, wxEXPAND|wxALL, 10 );
+ bSizer->Add( fgSizer1, 7, wxEXPAND|wxALL, 10 ); // adjust width of panel with first int value
+ m_scrolledWindow1->SetSizer( bSizer );
+ m_scrolledWindow1->Layout();
+ bSizer->Fit( m_scrolledWindow1 );
+ parent->AddPage( m_scrolledWindow1, caption, false, icon );
+}
+
+
+void dialog_about::CreateNotebookHtmlPage( wxAuiNotebook* parent, const wxString& caption,
+ const wxBitmap& icon, const wxString& html )
+{
+ wxPanel* panel = new wxPanel( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ wxTAB_TRAVERSAL );
+
+ wxBoxSizer* bSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxString htmlPage = wxEmptyString, htmlContent = html;
+
+ // to have a unique look background color for HTML pages is set to the default as it is
+ // used for all the other widgets
+ wxString htmlColor = ( this->GetBackgroundColour() ).GetAsString( wxC2S_HTML_SYNTAX );
+
+ // beginning of HTML structure
+ htmlPage.Append( wxT( "<html><body bgcolor='" ) + htmlColor + wxT( "'>" ) );
+
+ htmlPage.Append( htmlContent );
+
+ // end of HTML structure indicated by closing tags
+ htmlPage.Append( wxT( "</body></html>" ) );
+
+ // the HTML page is going to be created with previously created HTML content
+ wxHtmlWindow* htmlWindow = new wxHtmlWindow( panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ wxHW_SCROLLBAR_AUTO|wxHW_NO_SELECTION );
+
+ // HTML font set to font properties as they are used for widgets to have an unique look
+ // under different platforms with HTML
+ wxFont font = this->GetFont();
+ htmlWindow->SetStandardFonts( font.GetPointSize(), font.GetFaceName(), font.GetFaceName() );
+ htmlWindow->SetPage( htmlPage );
+
+ // the HTML window shall not be used to open external links, thus this task is delegated
+ // to users default browser
+ htmlWindow->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED,
+ wxHtmlLinkEventHandler( dialog_about::OnHtmlLinkClicked ), NULL, this );
+
+ // no additional space around the HTML window as it is also the case by the other notebook pages
+ bSizer->Add( htmlWindow, 1, wxALL|wxEXPAND, 0 );
+ panel->SetSizer( bSizer );
+ panel->Layout();
+ bSizer->Fit( panel );
+ parent->AddPage( panel, caption, false, icon );
+}
+
+
+wxHyperlinkCtrl* dialog_about::CreateHyperlink(wxScrolledWindow* parent, const wxString& email)
+{
+ wxHyperlinkCtrl* hyperlink = new wxHyperlinkCtrl(
+ parent, wxID_ANY,
+ wxT( "<" ) + email + wxT( ">" ), /* the label */
+ wxT( "mailto:" ) + email
+ + wxT( "?subject=KiCad - " )
+ + info.GetBuildVersion()
+ + wxT( " , " ) + info.GetLibVersion()
+ ); /* the url */
+
+ return hyperlink;
+}
+
+
+wxStaticBitmap* dialog_about::CreateStaticBitmap(wxScrolledWindow* parent, wxBitmap* icon)
+{
+ wxStaticBitmap* bitmap = new wxStaticBitmap( parent, wxID_ANY, wxNullBitmap,
+ wxDefaultPosition, wxDefaultSize, 0 );
+
+ if( icon )
+ {
+ bitmap->SetBitmap( *icon );
+ }
+ else
+ {
+ bitmap->SetBitmap( KiBitmap( right_xpm ) );
+ }
+
+ return bitmap;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Event handlers
+///////////////////////////////////////////////////////////////////////////////
+
+void dialog_about::OnClose( wxCloseEvent &event )
+{
+ Destroy();
+}
+
+
+void dialog_about::OnOkClick( wxCommandEvent &event )
+{
+ Destroy();
+}
+
+
+void dialog_about::OnHtmlLinkClicked( wxHtmlLinkEvent& event )
+{
+ ::wxLaunchDefaultBrowser( event.GetLinkInfo().GetHref() );
+}
diff --git a/common/dialog_about/dialog_about.h b/common/dialog_about/dialog_about.h
new file mode 100644
index 0000000..067ee63
--- /dev/null
+++ b/common/dialog_about/dialog_about.h
@@ -0,0 +1,99 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2010-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef DIALOG_ABOUT_H
+#define DIALOG_ABOUT_H
+
+#include <wx/html/htmlwin.h>
+#include <wx/statbmp.h>
+#include <wx/stattext.h>
+#include <wx/hyperlink.h>
+
+#include <aboutinfo.h>
+#include <dialog_about_base.h>
+
+/* Pixel information of icons in XPM format.
+ * All KiCad icons are linked into shared library 'libbitmaps.a'.
+ * Icons:
+ * preference_xpm[]; // Icon for 'Developers' tab
+ * editor_xpm[]; // Icon for 'Doc Writers' tab
+ * palette_xpm[]; // Icon for 'Artists' tab
+ * language_xpm[]; // Icon for 'Translators' tab
+ * right_xpm[]; // Right arrow icon for list items
+ * info_xpm[]; // Bulb for description tab
+ * tools_xpm[]; // Sheet of paper icon for license info tab
+ */
+#include <bitmaps.h>
+
+/**
+ * About dialog to show application specific information.
+ * Needs an <code>AboutAppInfo</code> object that contains the data to be displayed.
+ */
+class dialog_about : public dialog_about_base
+{
+private:
+
+ // Icons for the various tabs of wxAuiNotebook
+ wxBitmap picInformation;
+ wxBitmap picDevelopers;
+ wxBitmap picDocWriters;
+ wxBitmap picArtists;
+ wxBitmap picTranslators;
+ wxBitmap picPackagers;
+ wxBitmap picLicense;
+
+ AboutAppInfo info;
+
+public:
+ dialog_about( wxWindow* dlg, AboutAppInfo& appInfo );
+ ~dialog_about();
+
+private:
+ void initDialog();
+ virtual void OnClose( wxCloseEvent& event );
+ virtual void OnOkClick( wxCommandEvent& event );
+ virtual void OnHtmlLinkClicked( wxHtmlLinkEvent& event );
+
+ // Notebook pages
+ wxFlexGridSizer* CreateFlexGridSizer();
+ void DeleteNotebooks();
+ void CreateNotebooks();
+ void CreateNotebookPage( wxAuiNotebook* parent,
+ const wxString& caption,
+ const wxBitmap& icon,
+ const Contributors& contributors );
+ void CreateNotebookPageByCategory( wxAuiNotebook* parent,
+ const wxString& caption,
+ const wxBitmap& icon,
+ const Contributors& contributors );
+ void CreateNotebookHtmlPage( wxAuiNotebook* parent,
+ const wxString& caption,
+ const wxBitmap& icon,
+ const wxString& html );
+
+ wxHyperlinkCtrl* CreateHyperlink( wxScrolledWindow* parent, const wxString& email );
+ wxStaticBitmap* CreateStaticBitmap( wxScrolledWindow* parent, wxBitmap* icon );
+};
+
+#endif // DIALOG_ABOUT_H
diff --git a/common/dialog_about/dialog_about_base.cpp b/common/dialog_about/dialog_about_base.cpp
new file mode 100644
index 0000000..19b9db7
--- /dev/null
+++ b/common/dialog_about/dialog_about_base.cpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 5 2014)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_about_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+dialog_about_base::dialog_about_base( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
+
+ wxBoxSizer* bSizer1;
+ bSizer1 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer3;
+ bSizer3 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmapApp = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer3->Add( m_bitmapApp, 1, wxALIGN_CENTER|wxALL, 5 );
+
+ wxBoxSizer* b_apptitleSizer;
+ b_apptitleSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextAppTitle = new wxStaticText( this, wxID_ANY, _("App Title"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextAppTitle->Wrap( -1 );
+ m_staticTextAppTitle->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) );
+
+ b_apptitleSizer->Add( m_staticTextAppTitle, 0, wxALIGN_CENTER|wxALL, 5 );
+
+ m_staticTextCopyright = new wxStaticText( this, wxID_ANY, _("Copyright Info"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextCopyright->Wrap( -1 );
+ b_apptitleSizer->Add( m_staticTextCopyright, 0, wxALIGN_CENTER|wxALL, 1 );
+
+ m_staticTextBuildVersion = new wxStaticText( this, wxID_ANY, _("Build Version Info"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextBuildVersion->Wrap( -1 );
+ b_apptitleSizer->Add( m_staticTextBuildVersion, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextLibVersion = new wxStaticText( this, wxID_ANY, _("Lib Version Info"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextLibVersion->Wrap( -1 );
+ b_apptitleSizer->Add( m_staticTextLibVersion, 0, wxALIGN_CENTER|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizer3->Add( b_apptitleSizer, 10, wxEXPAND, 5 );
+
+
+ bSizer3->Add( 0, 0, 2, wxEXPAND, 5 );
+
+
+ bSizer1->Add( bSizer3, 0, wxEXPAND, 5 );
+
+ wxStaticLine* m_staticline1;
+ m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer1->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
+
+ m_auiNotebook = new wxAuiNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_SCROLL_BUTTONS|wxAUI_NB_TAB_FIXED_WIDTH );
+ m_auiNotebook->SetMinSize( wxSize( 750,350 ) );
+
+
+ bSizer1->Add( m_auiNotebook, 2, wxEXPAND | wxALL, 5 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizer->Realize();
+
+ bSizer1->Add( m_sdbSizer, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ this->SetSizer( bSizer1 );
+ this->Layout();
+}
+
+dialog_about_base::~dialog_about_base()
+{
+}
diff --git a/common/dialog_about/dialog_about_base.fbp b/common/dialog_about/dialog_about_base.fbp
new file mode 100644
index 0000000..e776d48
--- /dev/null
+++ b/common/dialog_about/dialog_about_base.fbp
@@ -0,0 +1,752 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_about_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">MyProject</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">1</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="name">dialog_about_base</property>
+ <property name="pos"></property>
+ <property name="size">750,437</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP</property>
+ <property name="subclass"></property>
+ <property name="title">About...</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer1</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer3</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="spacer" expanded="0">
+ <property name="height">0</property>
+ <property name="permission">protected</property>
+ <property name="width">0</property>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">1</property>
+ <object class="wxStaticBitmap" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmap"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_bitmapApp</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">10</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">b_apptitleSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font">,90,92,14,70,0</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">App Title</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextAppTitle</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">1</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Copyright Info</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextCopyright</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxLEFT|wxRIGHT|wxTOP</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Build Version Info</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextBuildVersion</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Lib Version Info</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextLibVersion</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">2</property>
+ <object class="spacer" expanded="0">
+ <property name="height">0</property>
+ <property name="permission">protected</property>
+ <property name="width">0</property>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">none</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">2</property>
+ <object class="wxAuiNotebook" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">750,350</property>
+ <property name="moveable">1</property>
+ <property name="name">m_auiNotebook</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxAUI_NB_SCROLL_BUTTONS|wxAUI_NB_TAB_FIXED_WIDTH</property>
+ <property name="subclass"></property>
+ <property name="tab_ctrl_height">-1</property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="uniform_bitmap_size"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnAuiNotebookAllowDND"></event>
+ <event name="OnAuiNotebookBeginDrag"></event>
+ <event name="OnAuiNotebookButton"></event>
+ <event name="OnAuiNotebookDragMotion"></event>
+ <event name="OnAuiNotebookEndDrag"></event>
+ <event name="OnAuiNotebookPageChanged"></event>
+ <event name="OnAuiNotebookPageChanging"></event>
+ <event name="OnAuiNotebookPageClose"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">0</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick"></event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick"></event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialog_about/dialog_about_base.h b/common/dialog_about/dialog_about_base.h
new file mode 100644
index 0000000..9098984
--- /dev/null
+++ b/common/dialog_about/dialog_about_base.h
@@ -0,0 +1,56 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 5 2014)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_ABOUT_BASE_H__
+#define __DIALOG_ABOUT_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/statbmp.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/sizer.h>
+#include <wx/statline.h>
+#include <wx/aui/auibook.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class dialog_about_base
+///////////////////////////////////////////////////////////////////////////////
+class dialog_about_base : public wxDialog
+{
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmapApp;
+ wxStaticText* m_staticTextAppTitle;
+ wxStaticText* m_staticTextCopyright;
+ wxStaticText* m_staticTextBuildVersion;
+ wxStaticText* m_staticTextLibVersion;
+ wxAuiNotebook* m_auiNotebook;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+
+ public:
+
+ dialog_about_base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About..."), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 750,437 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP );
+ ~dialog_about_base();
+
+};
+
+#endif //__DIALOG_ABOUT_BASE_H__
diff --git a/common/dialog_shim.cpp b/common/dialog_shim.cpp
new file mode 100644
index 0000000..a05a5b6
--- /dev/null
+++ b/common/dialog_shim.cpp
@@ -0,0 +1,619 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <dialog_shim.h>
+#include <kiway_player.h>
+#include <wx/evtloop.h>
+#include <pgm_base.h>
+
+
+/// Toggle a window's "enable" status to disabled, then enabled on destruction.
+class WDO_ENABLE_DISABLE
+{
+ wxWindow* m_win;
+
+public:
+
+ WDO_ENABLE_DISABLE( wxWindow* aWindow ) :
+ m_win( aWindow )
+ {
+ if( m_win )
+ m_win->Disable();
+ }
+
+ ~WDO_ENABLE_DISABLE()
+ {
+ if( m_win )
+ {
+ m_win->Enable();
+ m_win->SetFocus(); // let's focus back on the parent window
+ }
+ }
+};
+
+
+DIALOG_SHIM::DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& title,
+ const wxPoint& pos, const wxSize& size, long style, const wxString& name ) :
+ wxDialog( aParent, id, title, pos, size, style, name ),
+ KIWAY_HOLDER( 0 ),
+ m_qmodal_loop( 0 ),
+ m_qmodal_showing( false ),
+ m_qmodal_parent_disabler( 0 )
+{
+ // pray that aParent is either a KIWAY_PLAYER or DIALOG_SHIM derivation.
+ KIWAY_HOLDER* h = dynamic_cast<KIWAY_HOLDER*>( aParent );
+
+ // wxASSERT_MSG( h, wxT( "DIALOG_SHIM's parent is NULL or not derived from KIWAY_PLAYER nor DIALOG_SHIM" ) );
+
+ if( h )
+ SetKiway( this, &h->Kiway() );
+
+ Bind( wxEVT_CLOSE_WINDOW, &DIALOG_SHIM::OnCloseWindow, this );
+ Bind( wxEVT_BUTTON, &DIALOG_SHIM::OnButton, this );
+
+#ifdef __WINDOWS__
+ // On Windows, the app top windows can be brought to the foreground
+ // (at least temporary) in certain circumstances,
+ // for instance when calling an external tool in Eeschema boom generation.
+ // So set the parent KIWAY_PLAYER kicad frame (if exists) to top window
+ // to avoid this annoying behavior
+ KIWAY_PLAYER* parent_kiwayplayer = dynamic_cast<KIWAY_PLAYER*>( aParent );
+
+ if( parent_kiwayplayer )
+ Pgm().App().SetTopWindow( parent_kiwayplayer );
+#endif
+
+#if DLGSHIM_USE_SETFOCUS
+ Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_SHIM::onInit ) );
+#endif
+}
+
+
+DIALOG_SHIM::~DIALOG_SHIM()
+{
+ // if the dialog is quasi-modal, this will end its event loop
+ if( IsQuasiModal() )
+ EndQuasiModal( wxID_CANCEL );
+
+ delete m_qmodal_parent_disabler; // usually NULL by now
+}
+
+void DIALOG_SHIM::FinishDialogSettings()
+{
+ // must be called from the constructor of derived classes,
+ // when all widgets are initialized, and therefore their size fixed
+
+ // SetSizeHints fixes the minimal size of sizers in the dialog
+ // (SetSizeHints calls Fit(), so no need to call it)
+ GetSizer()->SetSizeHints( this );
+
+ // the default position, when calling the first time the dlg
+ Center();
+}
+
+void DIALOG_SHIM::FixOSXCancelButtonIssue()
+{
+#ifdef __WXMAC__
+ // A ugly hack to fix an issue on OSX: ctrl+c closes the dialog instead of
+ // copying a text if a button with wxID_CANCEL is used in a wxStdDialogButtonSizer
+ // created by wxFormBuilder: the label is &Cancel, and this accelerator key has priority
+ // to copy text standard accelerator, and the dlg is closed when trying to copy text
+ wxButton* button = dynamic_cast< wxButton* > ( wxWindow::FindWindowById( wxID_CANCEL, this ) );
+
+ if( button )
+ button->SetLabel( _( "Cancel" ) );
+#endif
+}
+
+
+// our hashtable is an implementation secret, don't need or want it in a header file
+#include <hashtables.h>
+#include <base_struct.h> // EDA_RECT
+#include <typeinfo>
+
+static RECT_MAP class_map;
+
+bool DIALOG_SHIM::Show( bool show )
+{
+ bool ret;
+ const char* hash_key;
+
+ if( m_hash_key.size() )
+ {
+ // a special case like EDA_LIST_DIALOG, which has multiple uses.
+ hash_key = m_hash_key.c_str();
+ }
+ else
+ {
+ hash_key = typeid(*this).name();
+ }
+
+ // Show or hide the window. If hiding, save current position and size.
+ // If showing, use previous position and size.
+ if( show )
+ {
+ wxDialog::Raise(); // Needed on OS X and some other window managers (i.e. Unity)
+ ret = wxDialog::Show( show );
+
+ // classname is key, returns a zeroed out default EDA_RECT if none existed before.
+ EDA_RECT r = class_map[ hash_key ];
+
+ if( r.GetSize().x != 0 && r.GetSize().y != 0 )
+ SetSize( r.GetPosition().x, r.GetPosition().y, r.GetSize().x, r.GetSize().y, 0 );
+ }
+ else
+ {
+ // Save the dialog's position & size before hiding, using classname as key
+ EDA_RECT r( wxDialog::GetPosition(), wxDialog::GetSize() );
+ class_map[ hash_key ] = r;
+
+ ret = wxDialog::Show( show );
+ }
+ return ret;
+}
+
+
+bool DIALOG_SHIM::Enable( bool enable )
+{
+ // so we can do logging of this state change:
+
+#if defined(DEBUG)
+ const char* type_id = typeid( *this ).name();
+ printf( "wxDialog %s: %s\n", type_id, enable ? "enabled" : "disabled" );
+#endif
+
+ return wxDialog::Enable( enable );
+}
+
+
+#if DLGSHIM_USE_SETFOCUS
+
+static bool findWindowRecursively( const wxWindowList& children, const wxWindow* wanted )
+{
+ for( wxWindowList::const_iterator it = children.begin(); it != children.end(); ++it )
+ {
+ const wxWindow* child = *it;
+
+ if( wanted == child )
+ return true;
+ else
+ {
+ if( findWindowRecursively( child->GetChildren(), wanted ) )
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+static bool findWindowRecursively( const wxWindow* topmost, const wxWindow* wanted )
+{
+ // wanted may be NULL and that is ok.
+
+ if( wanted == topmost )
+ return true;
+
+ return findWindowRecursively( topmost->GetChildren(), wanted );
+}
+
+
+/// Set the focus if it is not already set in a derived constructor to a specific control.
+void DIALOG_SHIM::onInit( wxInitDialogEvent& aEvent )
+{
+ wxWindow* focusWnd = wxWindow::FindFocus();
+
+ // If focusWnd is not already this window or a child of it, then SetFocus().
+ // Otherwise the derived class's constructor SetFocus() already to a specific
+ // child control.
+
+ if( !findWindowRecursively( this, focusWnd ) )
+ {
+ // Linux wxGTK needs this to allow the ESCAPE key to close a wxDialog window.
+ SetFocus();
+ }
+
+ aEvent.Skip(); // derived class's handler should be called too
+}
+#endif
+
+
+/*
+ Quasi-Modal Mode Explained:
+
+ The gtk calls in wxDialog::ShowModal() cause event routing problems if that
+ modal dialog then tries to use KIWAY_PLAYER::ShowModal(). The latter shows up
+ and mostly works but does not respond to the window decoration close button.
+ There is no way to get around this without reversing the gtk calls temporarily.
+
+ Quasi-Modal mode is our own almost modal mode which disables only the parent
+ of the DIALOG_SHIM, leaving other frames operable and while staying captured in the
+ nested event loop. This avoids the gtk calls and leaves event routing pure
+ and sufficient to operate the KIWAY_PLAYER::ShowModal() properly. When using
+ ShowQuasiModal() you have to use EndQuasiModal() in your dialogs and not
+ EndModal(). There is also IsQuasiModal() but its value can only be true
+ when the nested event loop is active. Do not mix the modal and quasi-modal
+ functions. Use one set or the other.
+
+ You might find this behavior preferable over a pure modal mode, and it was said
+ that only the Mac has this natively, but now other platforms have something
+ similar. You CAN use it anywhere for any dialog. But you MUST use it when
+ you want to use KIWAY_PLAYER::ShowModal() from a dialog event.
+*/
+
+
+
+/*
+/// wxEventLoopActivator but with a friend so it
+/// has access to m_evtLoopOld, and it does not SetActive() as that is
+/// done inside base class Run().
+class ELOOP_ACTIVATOR
+{
+ friend class EVENT_LOOP;
+
+public:
+ ELOOP_ACTIVATOR( WX_EVENT_LOOP* evtLoop )
+ {
+ m_evtLoopOld = wxEventLoopBase::GetActive();
+ // wxEventLoopBase::SetActive( evtLoop );
+ }
+
+ ~ELOOP_ACTIVATOR()
+ {
+ // restore the previously active event loop
+ wxEventLoopBase::SetActive( m_evtLoopOld );
+ }
+
+private:
+ WX_EVENT_LOOP* m_evtLoopOld;
+};
+*/
+
+
+class EVENT_LOOP : public WX_EVENT_LOOP
+{
+public:
+
+ EVENT_LOOP()
+ {
+ ;
+ }
+
+ ~EVENT_LOOP()
+ {
+ }
+
+#if 0 // does not work any better than inherited wxGuiEventLoop functions:
+
+ // sets the "should exit" flag and wakes up the loop so that it terminates
+ // soon
+ void ScheduleExit( int rc = 0 )
+ {
+ wxCHECK_RET( IsInsideRun(), wxT("can't call ScheduleExit() if not running") );
+
+ m_exitcode = rc;
+ m_shouldExit = true;
+
+ OnExit();
+
+ // all we have to do to exit from the loop is to (maybe) wake it up so that
+ // it can notice that Exit() had been called
+ //
+ // in particular, do *not* use here calls such as PostQuitMessage() (under
+ // MSW) which terminate the current event loop here because we're not sure
+ // that it is going to be processed by the correct event loop: it would be
+ // possible that another one is started and terminated by mistake if we do
+ // this
+ WakeUp();
+ }
+
+ int Run()
+ {
+ // event loops are not recursive, you need to create another loop!
+ //wxCHECK_MSG( !IsInsideRun(), -1, wxT("can't reenter a message loop") );
+
+ // ProcessIdle() and ProcessEvents() below may throw so the code here should
+ // be exception-safe, hence we must use local objects for all actions we
+ // should undo
+ wxEventLoopActivator activate(this);
+
+ // We might be called again, after a previous call to ScheduleExit(), so
+ // reset this flag.
+ m_shouldExit = false;
+
+ // Set this variable to true for the duration of this method.
+ setInsideRun( true );
+
+ struct SET_FALSE
+ {
+ EVENT_LOOP* m_loop;
+ SET_FALSE( EVENT_LOOP* aLoop ) : m_loop( aLoop ) {}
+ ~SET_FALSE() { m_loop->setInsideRun( false ); }
+ } t( this );
+
+ // Finally really run the loop.
+ return DoRun();
+ }
+
+ bool ProcessEvents()
+ {
+ // process pending wx events first as they correspond to low-level events
+ // which happened before, i.e. typically pending events were queued by a
+ // previous call to Dispatch() and if we didn't process them now the next
+ // call to it might enqueue them again (as happens with e.g. socket events
+ // which would be generated as long as there is input available on socket
+ // and this input is only removed from it when pending event handlers are
+ // executed)
+ if( wxTheApp )
+ {
+ wxTheApp->ProcessPendingEvents();
+
+ // One of the pending event handlers could have decided to exit the
+ // loop so check for the flag before trying to dispatch more events
+ // (which could block indefinitely if no more are coming).
+ if( m_shouldExit )
+ return false;
+ }
+
+ return Dispatch();
+ }
+
+
+ int DoRun()
+ {
+ // we must ensure that OnExit() is called even if an exception is thrown
+ // from inside ProcessEvents() but we must call it from Exit() in normal
+ // situations because it is supposed to be called synchronously,
+ // wxModalEventLoop depends on this (so we can't just use ON_BLOCK_EXIT or
+ // something similar here)
+ #if wxUSE_EXCEPTIONS
+ for( ; ; )
+ {
+ try
+ {
+ #endif // wxUSE_EXCEPTIONS
+
+ // this is the event loop itself
+ for( ; ; )
+ {
+ // generate and process idle events for as long as we don't
+ // have anything else to do
+ while ( !m_shouldExit && !Pending() && ProcessIdle() )
+ ;
+
+ if ( m_shouldExit )
+ break;
+
+ // a message came or no more idle processing to do, dispatch
+ // all the pending events and call Dispatch() to wait for the
+ // next message
+ if ( !ProcessEvents() )
+ {
+ // we got WM_QUIT
+ break;
+ }
+ }
+
+ // Process the remaining queued messages, both at the level of the
+ // underlying toolkit level (Pending/Dispatch()) and wx level
+ // (Has/ProcessPendingEvents()).
+ //
+ // We do run the risk of never exiting this loop if pending event
+ // handlers endlessly generate new events but they shouldn't do
+ // this in a well-behaved program and we shouldn't just discard the
+ // events we already have, they might be important.
+ for( ; ; )
+ {
+ bool hasMoreEvents = false;
+ if ( wxTheApp && wxTheApp->HasPendingEvents() )
+ {
+ wxTheApp->ProcessPendingEvents();
+ hasMoreEvents = true;
+ }
+
+ if ( Pending() )
+ {
+ Dispatch();
+ hasMoreEvents = true;
+ }
+
+ if ( !hasMoreEvents )
+ break;
+ }
+
+ #if wxUSE_EXCEPTIONS
+ // exit the outer loop as well
+ break;
+ }
+ catch ( ... )
+ {
+ try
+ {
+ if ( !wxTheApp || !wxTheApp->OnExceptionInMainLoop() )
+ {
+ OnExit();
+ break;
+ }
+ //else: continue running the event loop
+ }
+ catch ( ... )
+ {
+ // OnException() throwed, possibly rethrowing the same
+ // exception again: very good, but we still need OnExit() to
+ // be called
+ OnExit();
+ throw;
+ }
+ }
+ }
+ #endif // wxUSE_EXCEPTIONS
+
+ return m_exitcode;
+ }
+
+protected:
+ int m_exitcode;
+
+ /* this only works if you add
+ friend class EVENT_LOOP
+ to EventLoopBase
+ */
+ void setInsideRun( bool aValue )
+ {
+ m_isInsideRun = aValue;
+ }
+#endif
+};
+
+
+int DIALOG_SHIM::ShowQuasiModal()
+{
+ // This is an exception safe way to zero a pointer before returning.
+ // Yes, even though DismissModal() clears this first normally, this is
+ // here in case there's an exception before the dialog is dismissed.
+ struct NULLER
+ {
+ void*& m_what;
+ NULLER( void*& aPtr ) : m_what( aPtr ) {}
+ ~NULLER() { m_what = 0; } // indeed, set it to NULL on destruction
+ } clear_this( (void*&) m_qmodal_loop );
+
+ // release the mouse if it's currently captured as the window having it
+ // will be disabled when this dialog is shown -- but will still keep the
+ // capture making it impossible to do anything in the modal dialog itself
+ wxWindow* win = wxWindow::GetCapture();
+ if( win )
+ win->ReleaseMouse();
+
+ // Get the optimal parent
+ wxWindow* parent = GetParentForModalDialog( GetParent(), GetWindowStyle() );
+
+ // Show the optimal parent
+ DBG( if( parent ) printf( "%s: optimal parent: %s\n", __func__, typeid(*parent).name() );)
+
+ wxASSERT_MSG( !m_qmodal_parent_disabler,
+ wxT( "Caller using ShowQuasiModal() twice on same window?" ) );
+
+ // quasi-modal: disable only my "optimal" parent
+ m_qmodal_parent_disabler = new WDO_ENABLE_DISABLE( parent );
+
+ Show( true );
+
+ m_qmodal_showing = true;
+
+ EVENT_LOOP event_loop;
+
+ m_qmodal_loop = &event_loop;
+
+ event_loop.Run();
+
+ return GetReturnCode();
+}
+
+
+void DIALOG_SHIM::EndQuasiModal( int retCode )
+{
+ // Hook up validator and transfer data from controls handling so quasi-modal dialogs
+ // handle validation in the same way as other dialogs.
+ if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
+ return;
+
+ SetReturnCode( retCode );
+
+ if( !IsQuasiModal() )
+ {
+ wxFAIL_MSG( wxT( "either DIALOG_SHIM::EndQuasiModal called twice or ShowQuasiModal wasn't called" ) );
+ return;
+ }
+
+ m_qmodal_showing = false;
+
+ if( m_qmodal_loop )
+ {
+ if( m_qmodal_loop->IsRunning() )
+ m_qmodal_loop->Exit( 0 );
+ else
+ m_qmodal_loop->ScheduleExit( 0 );
+
+ m_qmodal_loop = NULL;
+ }
+
+ delete m_qmodal_parent_disabler;
+ m_qmodal_parent_disabler = 0;
+
+ Show( false );
+}
+
+
+void DIALOG_SHIM::OnCloseWindow( wxCloseEvent& aEvent )
+{
+ if( IsQuasiModal() )
+ {
+ EndQuasiModal( wxID_CANCEL );
+ return;
+ }
+
+ // This is mandatory to allow wxDialogBase::OnCloseWindow() to be called.
+ aEvent.Skip();
+}
+
+
+void DIALOG_SHIM::OnButton( wxCommandEvent& aEvent )
+{
+ if( IsQuasiModal() )
+ {
+ const int id = aEvent.GetId();
+
+ if( id == GetAffirmativeId() )
+ {
+ EndQuasiModal( id );
+ }
+ else if( id == wxID_APPLY )
+ {
+ // Dialogs that provide Apply buttons should make sure data is valid before
+ // allowing a transfer, as there is no other way to indicate failure
+ // (i.e. the dialog can't refuse to close as it might with OK, because it
+ // isn't closing anyway)
+ if( Validate() )
+ {
+ bool success = TransferDataFromWindow();
+ (void) success;
+ }
+ }
+ else if( id == GetEscapeId() ||
+ (id == wxID_CANCEL && GetEscapeId() == wxID_ANY) )
+ {
+ EndQuasiModal( wxID_CANCEL );
+ }
+ else // not a standard button
+ {
+ aEvent.Skip();
+ }
+
+ return;
+ }
+
+ // This is mandatory to allow wxDialogBase::OnButton() to be called.
+ aEvent.Skip();
+}
diff --git a/common/dialogs/dialog_display_info_HTML_base.cpp b/common/dialogs/dialog_display_info_HTML_base.cpp
new file mode 100644
index 0000000..5a693c8
--- /dev/null
+++ b/common/dialogs/dialog_display_info_HTML_base.cpp
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Nov 5 2013)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_display_info_HTML_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_DISPLAY_HTML_TEXT_BASE::DIALOG_DISPLAY_HTML_TEXT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxSize( 400,120 ), wxDefaultSize );
+
+ wxBoxSizer* bMainSizer;
+ bMainSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_htmlWindow = new wxHtmlWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO|wxSUNKEN_BORDER );
+ bMainSizer->Add( m_htmlWindow, 1, wxEXPAND, 5 );
+
+ m_buttonClose = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ m_buttonClose->SetDefault();
+ bMainSizer->Add( m_buttonClose, 0, wxALIGN_RIGHT|wxALL, 10 );
+
+
+ this->SetSizer( bMainSizer );
+ this->Layout();
+
+ // Connect Events
+ m_htmlWindow->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_DISPLAY_HTML_TEXT_BASE::OnHTMLLinkClicked ), NULL, this );
+ m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_HTML_TEXT_BASE::OnCloseButtonClick ), NULL, this );
+}
+
+DIALOG_DISPLAY_HTML_TEXT_BASE::~DIALOG_DISPLAY_HTML_TEXT_BASE()
+{
+ // Disconnect Events
+ m_htmlWindow->Disconnect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_DISPLAY_HTML_TEXT_BASE::OnHTMLLinkClicked ), NULL, this );
+ m_buttonClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DISPLAY_HTML_TEXT_BASE::OnCloseButtonClick ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_display_info_HTML_base.fbp b/common/dialogs/dialog_display_info_HTML_base.fbp
new file mode 100644
index 0000000..2147dcd
--- /dev/null
+++ b/common/dialogs/dialog_display_info_HTML_base.fbp
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration" />
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_display_info_HTML_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_display_info_HTML</property>
+ <property name="namespace" />
+ <property name="path">.</property>
+ <property name="precompiled_header" />
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg" />
+ <property name="center" />
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style" />
+ <property name="fg" />
+ <property name="font" />
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size" />
+ <property name="minimum_size">400,120</property>
+ <property name="name">DIALOG_DISPLAY_HTML_TEXT_BASE</property>
+ <property name="pos" />
+ <property name="size">465,202</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title" />
+ <property name="tooltip" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnActivate" />
+ <event name="OnActivateApp" />
+ <event name="OnAuiFindManager" />
+ <event name="OnAuiPaneButton" />
+ <event name="OnAuiPaneClose" />
+ <event name="OnAuiPaneMaximize" />
+ <event name="OnAuiPaneRestore" />
+ <event name="OnAuiRender" />
+ <event name="OnChar" />
+ <event name="OnClose" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnHibernate" />
+ <event name="OnIconize" />
+ <event name="OnIdle" />
+ <event name="OnInitDialog" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size">-1,-1</property>
+ <property name="name">bMainSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxHtmlWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer" />
+ <property name="aui_name" />
+ <property name="aui_position" />
+ <property name="aui_row" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_htmlWindow</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">public</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style">wxHW_SCROLLBAR_AUTO</property>
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style">wxSUNKEN_BORDER</property>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnHtmlCellClicked" />
+ <event name="OnHtmlCellHover" />
+ <event name="OnHtmlLinkClicked">OnHTMLLinkClicked</event>
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">10</property>
+ <property name="flag">wxALIGN_RIGHT|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer" />
+ <property name="aui_name" />
+ <property name="aui_position" />
+ <property name="aui_row" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_CANCEL</property>
+ <property name="label">Close</property>
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonClose</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style">wxBU_EXACTFIT</property>
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnCloseButtonClick</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_display_info_HTML_base.h b/common/dialogs/dialog_display_info_HTML_base.h
new file mode 100644
index 0000000..4cfa053
--- /dev/null
+++ b/common/dialogs/dialog_display_info_HTML_base.h
@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Nov 5 2013)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_DISPLAY_INFO_HTML_BASE_H__
+#define __DIALOG_DISPLAY_INFO_HTML_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/html/htmlwin.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/button.h>
+#include <wx/sizer.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_DISPLAY_HTML_TEXT_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_DISPLAY_HTML_TEXT_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxButton* m_buttonClose;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnHTMLLinkClicked( wxHtmlLinkEvent& event ) { event.Skip(); }
+ virtual void OnCloseButtonClick( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+ wxHtmlWindow* m_htmlWindow;
+
+ DIALOG_DISPLAY_HTML_TEXT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 465,202 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_DISPLAY_HTML_TEXT_BASE();
+
+};
+
+#endif //__DIALOG_DISPLAY_INFO_HTML_BASE_H__
diff --git a/common/dialogs/dialog_env_var_config.cpp b/common/dialogs/dialog_env_var_config.cpp
new file mode 100644
index 0000000..79ef7dd
--- /dev/null
+++ b/common/dialogs/dialog_env_var_config.cpp
@@ -0,0 +1,285 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
+ * Copyright (C) 2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file dialg_env_var_config.cpp
+ */
+
+#include <dialog_env_var_config.h>
+
+#include <validators.h>
+#include <html_messagebox.h>
+
+#include <wx/regex.h>
+
+
+DIALOG_ENV_VAR_CONFIG::DIALOG_ENV_VAR_CONFIG( wxWindow* aParent, const ENV_VAR_MAP& aEnvVarMap ) :
+ DIALOG_ENV_VAR_CONFIG_BASE( aParent )
+{
+ m_extDefsChanged = false;
+ m_envVarMap = aEnvVarMap;
+
+ m_grid->AppendRows( (int) m_envVarMap.size() );
+
+ for( size_t row = 0; row < m_envVarMap.size(); row++ )
+ {
+ wxGridCellTextEditor* editor = new wxGridCellTextEditor;
+ ENVIRONMENT_VARIABLE_CHAR_VALIDATOR envVarValidator;
+ editor->SetValidator( envVarValidator );
+ m_grid->SetCellEditor( (int) row, 0, editor );
+
+ editor = new wxGridCellTextEditor;
+ FILE_NAME_WITH_PATH_CHAR_VALIDATOR pathValidator;
+ editor->SetValidator( pathValidator );
+ m_grid->SetCellEditor( (int) row, 1, editor );
+ }
+}
+
+
+bool DIALOG_ENV_VAR_CONFIG::TransferDataToWindow()
+{
+ wxLogDebug( wxT( "In DIALOG_ENV_VAR_CONFIG::TransferDataToWindow()." ) );
+
+ if( !wxDialog::TransferDataToWindow() )
+ return false;
+
+ long row = 0L;
+
+ for( ENV_VAR_MAP_ITER it = m_envVarMap.begin(); it != m_envVarMap.end(); ++it )
+ {
+ m_grid->SetCellValue( row, 0, it->first );
+ m_grid->SetCellValue( row, 1, it->second.GetValue() );
+
+ // Highlight environment variables that are externally defined.
+ if( it->second.GetDefinedExternally() )
+ {
+ wxGridCellAttr* attr = m_grid->GetOrCreateCellAttr( row, 0 );
+ attr->SetBackgroundColour( *wxLIGHT_GREY );
+ m_grid->SetRowAttr( row, attr );
+ }
+
+ row++;
+ }
+
+ m_grid->AutoSizeColumns();
+ m_grid->AutoSizeRows();
+ GetSizer()->Layout();
+ GetSizer()->Fit( this );
+ GetSizer()->SetSizeHints( this );
+
+ return true;
+}
+
+
+bool DIALOG_ENV_VAR_CONFIG::TransferDataFromWindow()
+{
+ if( !wxDialog::TransferDataFromWindow() )
+ return false;
+
+ int row;
+ wxArrayString envVarNames;
+
+ for( row = 0; row < m_grid->GetNumberRows(); row++ )
+ {
+ wxString caption = _( "Invalid Input" );
+ wxString name = m_grid->GetCellValue( row, 0 );
+ wxString value = m_grid->GetCellValue( row, 1 );
+
+ // Ignore completely empty rows.
+ if( name.IsEmpty() && value.IsEmpty() )
+ continue;
+
+ wxLogDebug( wxT( "Row %d, name: %s, value %s." ), row,
+ GetChars( name ), GetChars( value ) );
+
+ // Name cannot be empty.
+ if( name.IsEmpty() )
+ {
+ wxMessageBox( _( "Environment variable name cannot be empty." ),
+ caption, wxOK | wxICON_ERROR, this );
+ m_grid->GoToCell( row, 0 );
+ m_grid->SetGridCursor( row, 0 );
+ return false;
+ }
+
+ // Value cannot be empty.
+ if( value.IsEmpty() )
+ {
+ wxMessageBox( _( "Environment variable value cannot be empty." ), caption,
+ wxOK | wxICON_ERROR, this );
+ m_grid->GoToCell( row, 1 );
+ m_grid->SetGridCursor( row, 1 );
+ m_grid->SetFocus();
+ return false;
+ }
+
+ // First character of the environment variable name cannot be a digit (0-9).
+ if( name.Left( 1 ).IsNumber() )
+ {
+ wxMessageBox( _( "The first character of an environment variable name cannot be "
+ "a digit (0-9)." ), caption, wxOK | wxICON_ERROR, this );
+ m_grid->GoToCell( row, 0 );
+ m_grid->SetGridCursor( row, 0 );
+ m_grid->SelectBlock( row, 0, row, 0 );
+ m_grid->SetFocus();
+ return false;
+ }
+
+ // Check for duplicate environment variable names.
+ if( envVarNames.Index( name ) != wxNOT_FOUND )
+ {
+ wxMessageBox( _( "Cannot have duplicate environment variable names." ), caption,
+ wxOK | wxICON_ERROR, this );
+ m_grid->GoToCell( row, 0 );
+ m_grid->SetGridCursor( row, 0 );
+ m_grid->SelectRow( row );
+ m_grid->SetFocus();
+ return false;
+ }
+
+ envVarNames.Add( name );
+ }
+
+ // Add new entries and update any modified entries.
+ for( row = 0; row < m_grid->GetNumberRows(); row++ )
+ {
+ wxString name = m_grid->GetCellValue( row, 0 );
+ wxString value = m_grid->GetCellValue( row, 1 );
+ ENV_VAR_MAP_ITER it = m_envVarMap.find( name );
+
+ if( it == m_envVarMap.end() )
+ {
+ ENV_VAR_ITEM item( value, wxGetEnv( name, NULL ) );
+
+ // Add new environment variable.
+ m_envVarMap[ name ] = item;
+ }
+ else if( it->second.GetValue() != value )
+ {
+ // Environment variable already defined but it's value changed.
+ it->second.SetValue( value );
+
+ // Externally defined variable has been changed.
+ if( it->second.GetDefinedExternally() )
+ m_extDefsChanged = true;
+ }
+ }
+
+ std::vector< wxString > removeFromMap;
+
+ // Remove deleted entries from the map.
+ for( ENV_VAR_MAP_ITER it = m_envVarMap.begin(); it != m_envVarMap.end(); ++it )
+ {
+ bool found = false;
+
+ for( row = 0; row < m_grid->GetNumberRows(); row++ )
+ {
+ if( m_grid->GetCellValue( row, 0 ) == it->first )
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if( !found )
+ removeFromMap.push_back( it->first );
+ }
+
+ for( size_t i = 0; i < removeFromMap.size(); i++ )
+ m_envVarMap.erase( removeFromMap[i] );
+
+ return true;
+}
+
+
+void DIALOG_ENV_VAR_CONFIG::OnAddRow( wxCommandEvent& aEvent )
+{
+ m_grid->AppendRows();
+
+ int row = m_grid->GetNumberRows() - 1;
+ wxGridCellTextEditor* editor = new wxGridCellTextEditor;
+ ENVIRONMENT_VARIABLE_CHAR_VALIDATOR envVarNameValidator;
+ editor->SetValidator( envVarNameValidator );
+ m_grid->SetCellEditor( row, 0, editor );
+
+ editor = new wxGridCellTextEditor;
+ FILE_NAME_WITH_PATH_CHAR_VALIDATOR pathValidator;
+ editor->SetValidator( pathValidator );
+ m_grid->SetCellEditor( row, 1, editor );
+ m_grid->GoToCell( row, 0 );
+ m_grid->SetGridCursor( row, 0 );
+ m_grid->SetFocus();
+}
+
+
+void DIALOG_ENV_VAR_CONFIG::OnDeleteSelectedRows( wxCommandEvent& aEvent )
+{
+ if( !m_grid->IsSelection() )
+ return;
+
+ wxGridUpdateLocker locker( m_grid );
+
+ for( int n = 0; n < m_grid->GetNumberRows(); )
+ {
+ if( m_grid->IsInSelection( n , 0 ) )
+ m_grid->DeleteRows( n, 1 );
+ else
+ n++;
+ }
+}
+
+
+void DIALOG_ENV_VAR_CONFIG::OnHelpRequest( wxCommandEvent& aEvent )
+{
+ wxString msg = _( "Enter the name and path for each environment variable. Grey entries "
+ "are names that have been defined externally at the system or user "
+ "level. Environment variables defined at the system or user level "
+ "take precedence over the ones defined in this table. This means the "
+ "values in this table are ignored." );
+ msg << wxT( "<br><br><b>" );
+ msg << _( "To ensure environment variable names are valid on all platforms, the name field "
+ "will only accept upper case letters, digits, and the underscore characters." );
+ msg << wxT( "</b><br><br>" );
+ msg << _( "<b>KIGITHUB</b> is used by KiCad to define the URL of the repository "
+ "of the official KiCad libraries." );
+ msg << wxT( "<br><br>" );
+ msg << _( "<b>KISYS3DMOD</b> is the base path of system footprint 3D "
+ "shapes (.3Dshapes folders)." );
+ msg << wxT( "<br><br>" );
+ msg << _( "<b>KISYSMOD</b> is the base path of locally installed system "
+ "footprint libraries (.pretty folders)." );
+ msg << wxT( "<br><br>" );
+ msg << _( "<b>KIPRJMOD</b> is internally defined by KiCad (cannot be edited) and is set "
+ "to the absolute path of the currently loaded project file. This environment "
+ "variable can be used to define files and paths relative to the currently loaded "
+ "project. For instance, ${KIPRJMOD}/libs/footprints.pretty can be defined as a "
+ "folder containing a project specific footprint library named footprints.pretty." );
+ msg << wxT( "<br><br>" );
+ msg << _( "<b>KICAD_PTEMPLATES</b> is optional and can be defined if you want to "
+ "create your own project templates folder." );
+
+ HTML_MESSAGE_BOX dlg( GetParent(), _( "Environment Variable Help" ) );
+ dlg.AddHTML_Text( msg );
+ dlg.ShowModal();
+}
diff --git a/common/dialogs/dialog_env_var_config_base.cpp b/common/dialogs/dialog_env_var_config_base.cpp
new file mode 100644
index 0000000..8f8590a
--- /dev/null
+++ b/common/dialogs/dialog_env_var_config_base.cpp
@@ -0,0 +1,108 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_env_var_config_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_ENV_VAR_CONFIG_BASE::DIALOG_ENV_VAR_CONFIG_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* mainSizer;
+ mainSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bupperSizer;
+ bupperSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bleftSizer;
+ bleftSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_grid = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ // Grid
+ m_grid->CreateGrid( 0, 2 );
+ m_grid->EnableEditing( true );
+ m_grid->EnableGridLines( true );
+ m_grid->EnableDragGridSize( true );
+ m_grid->SetMargins( 0, 0 );
+
+ // Columns
+ m_grid->EnableDragColMove( false );
+ m_grid->EnableDragColSize( true );
+ m_grid->SetColLabelSize( 30 );
+ m_grid->SetColLabelValue( 0, _("Name") );
+ m_grid->SetColLabelValue( 1, _("Path") );
+ m_grid->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Rows
+ m_grid->EnableDragRowSize( true );
+ m_grid->SetRowLabelSize( 40 );
+ m_grid->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Label Appearance
+
+ // Cell Defaults
+ m_grid->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
+ bleftSizer->Add( m_grid, 1, wxALL|wxEXPAND, 5 );
+
+
+ bupperSizer->Add( bleftSizer, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* brightSizer;
+ brightSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_buttonAdd = new wxButton( this, wxID_ANY, _("Add"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonAdd->SetToolTip( _("Add a new entry to the table.") );
+
+ brightSizer->Add( m_buttonAdd, 0, wxALL|wxEXPAND, 5 );
+
+ m_buttonDelete = new wxButton( this, wxID_ANY, _("Delete"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonDelete->SetToolTip( _("Remove the selected entry from the table.") );
+
+ brightSizer->Add( m_buttonDelete, 0, wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND, 5 );
+
+
+ bupperSizer->Add( brightSizer, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ mainSizer->Add( bupperSizer, 1, wxEXPAND, 5 );
+
+ m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ mainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer->AddButton( m_sdbSizerCancel );
+ m_sdbSizerHelp = new wxButton( this, wxID_HELP );
+ m_sdbSizer->AddButton( m_sdbSizerHelp );
+ m_sdbSizer->Realize();
+
+ mainSizer->Add( m_sdbSizer, 0, wxALL|wxALIGN_RIGHT, 5 );
+
+
+ this->SetSizer( mainSizer );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ m_buttonAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ENV_VAR_CONFIG_BASE::OnAddRow ), NULL, this );
+ m_buttonDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ENV_VAR_CONFIG_BASE::OnDeleteSelectedRows ), NULL, this );
+ m_sdbSizerHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ENV_VAR_CONFIG_BASE::OnHelpRequest ), NULL, this );
+}
+
+DIALOG_ENV_VAR_CONFIG_BASE::~DIALOG_ENV_VAR_CONFIG_BASE()
+{
+ // Disconnect Events
+ m_buttonAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ENV_VAR_CONFIG_BASE::OnAddRow ), NULL, this );
+ m_buttonDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ENV_VAR_CONFIG_BASE::OnDeleteSelectedRows ), NULL, this );
+ m_sdbSizerHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ENV_VAR_CONFIG_BASE::OnHelpRequest ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_env_var_config_base.fbp b/common/dialogs/dialog_env_var_config_base.fbp
new file mode 100644
index 0000000..8c86db4
--- /dev/null
+++ b/common/dialogs/dialog_env_var_config_base.fbp
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_env_var_config_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_env_var_editor_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center">wxBOTH</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">DIALOG_ENV_VAR_CONFIG_BASE</property>
+ <property name="pos"></property>
+ <property name="size">363,177</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title">Path Configuration</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">mainSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bupperSizer</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bleftSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxGrid" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="autosize_cols">0</property>
+ <property name="autosize_rows">0</property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="cell_bg"></property>
+ <property name="cell_font"></property>
+ <property name="cell_horiz_alignment">wxALIGN_LEFT</property>
+ <property name="cell_text"></property>
+ <property name="cell_vert_alignment">wxALIGN_TOP</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="col_label_horiz_alignment">wxALIGN_CENTRE</property>
+ <property name="col_label_size">30</property>
+ <property name="col_label_values">&quot;Name&quot; &quot;Path&quot;</property>
+ <property name="col_label_vert_alignment">wxALIGN_CENTRE</property>
+ <property name="cols">2</property>
+ <property name="column_sizes"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="drag_col_move">0</property>
+ <property name="drag_col_size">1</property>
+ <property name="drag_grid_size">1</property>
+ <property name="drag_row_size">1</property>
+ <property name="editing">1</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="grid_line_color"></property>
+ <property name="grid_lines">1</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label_bg"></property>
+ <property name="label_font"></property>
+ <property name="label_text"></property>
+ <property name="margin_height">0</property>
+ <property name="margin_width">0</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_grid</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="row_label_horiz_alignment">wxALIGN_CENTRE</property>
+ <property name="row_label_size">40</property>
+ <property name="row_label_values"></property>
+ <property name="row_label_vert_alignment">wxALIGN_CENTRE</property>
+ <property name="row_sizes"></property>
+ <property name="rows">0</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnGridCellChange"></event>
+ <event name="OnGridCellLeftClick"></event>
+ <event name="OnGridCellLeftDClick"></event>
+ <event name="OnGridCellRightClick"></event>
+ <event name="OnGridCellRightDClick"></event>
+ <event name="OnGridCmdCellChange"></event>
+ <event name="OnGridCmdCellLeftClick"></event>
+ <event name="OnGridCmdCellLeftDClick"></event>
+ <event name="OnGridCmdCellRightClick"></event>
+ <event name="OnGridCmdCellRightDClick"></event>
+ <event name="OnGridCmdColSize"></event>
+ <event name="OnGridCmdEditorCreated"></event>
+ <event name="OnGridCmdEditorHidden"></event>
+ <event name="OnGridCmdEditorShown"></event>
+ <event name="OnGridCmdLabelLeftClick"></event>
+ <event name="OnGridCmdLabelLeftDClick"></event>
+ <event name="OnGridCmdLabelRightClick"></event>
+ <event name="OnGridCmdLabelRightDClick"></event>
+ <event name="OnGridCmdRangeSelect"></event>
+ <event name="OnGridCmdRowSize"></event>
+ <event name="OnGridCmdSelectCell"></event>
+ <event name="OnGridColSize"></event>
+ <event name="OnGridEditorCreated"></event>
+ <event name="OnGridEditorHidden"></event>
+ <event name="OnGridEditorShown"></event>
+ <event name="OnGridLabelLeftClick"></event>
+ <event name="OnGridLabelLeftDClick"></event>
+ <event name="OnGridLabelRightClick"></event>
+ <event name="OnGridLabelRightDClick"></event>
+ <event name="OnGridRangeSelect"></event>
+ <event name="OnGridRowSize"></event>
+ <event name="OnGridSelectCell"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">brightSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Add</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonAdd</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip">Add a new entry to the table.</property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnAddRow</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Delete</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonDelete</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip">Remove the selected entry from the table.</property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnDeleteSelectedRows</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_RIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">1</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick"></event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick">OnHelpRequest</event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick"></event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_env_var_config_base.h b/common/dialogs/dialog_env_var_config_base.h
new file mode 100644
index 0000000..69b74f2
--- /dev/null
+++ b/common/dialogs/dialog_env_var_config_base.h
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_ENV_VAR_CONFIG_BASE_H__
+#define __DIALOG_ENV_VAR_CONFIG_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/font.h>
+#include <wx/grid.h>
+#include <wx/gdicmn.h>
+#include <wx/sizer.h>
+#include <wx/button.h>
+#include <wx/statline.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_ENV_VAR_CONFIG_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_ENV_VAR_CONFIG_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxGrid* m_grid;
+ wxButton* m_buttonAdd;
+ wxButton* m_buttonDelete;
+ wxStaticLine* m_staticline1;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+ wxButton* m_sdbSizerCancel;
+ wxButton* m_sdbSizerHelp;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDeleteSelectedRows( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHelpRequest( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_ENV_VAR_CONFIG_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Path Configuration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 363,177 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_ENV_VAR_CONFIG_BASE();
+
+};
+
+#endif //__DIALOG_ENV_VAR_CONFIG_BASE_H__
diff --git a/common/dialogs/dialog_exit_base.cpp b/common/dialogs/dialog_exit_base.cpp
new file mode 100644
index 0000000..0e1d422
--- /dev/null
+++ b/common/dialogs/dialog_exit_base.cpp
@@ -0,0 +1,98 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Oct 8 2012)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_exit_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_EXIT_BASE::DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizerMain;
+ bSizerMain = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerUpper;
+ bSizerUpper = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerBitmap;
+ bSizerBitmap = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerBitmap->Add( m_bitmap, 0, wxALL, 5 );
+
+
+ bSizerUpper->Add( bSizerBitmap, 0, 0, 5 );
+
+ wxBoxSizer* bSizerMessages;
+ bSizerMessages = new wxBoxSizer( wxVERTICAL );
+
+ m_TextInfo = new wxStaticText( this, wxID_ANY, _("Save the changes before closing?"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextInfo->Wrap( -1 );
+ m_TextInfo->SetFont( wxFont( 8, 74, 90, 92, false, wxT("MS Shell Dlg 2") ) );
+
+ bSizerMessages->Add( m_TextInfo, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerMessages->Add( 10, 10, 0, 0, 5 );
+
+ m_staticText2 = new wxStaticText( this, wxID_ANY, _("If you don't save, all your changes will be permanently lost."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText2->Wrap( -1 );
+ bSizerMessages->Add( m_staticText2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerUpper->Add( bSizerMessages, 1, wxEXPAND, 5 );
+
+
+ bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerLower;
+ bSizerLower = new wxBoxSizer( wxVERTICAL );
+
+ m_staticline = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerLower->Add( m_staticline, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerButtons;
+ bSizerButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonSaveAndExit = new wxButton( this, wxID_ANY, _("Save and Exit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSaveAndExit->SetDefault();
+ bSizerButtons->Add( m_buttonSaveAndExit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonExitNoSave = new wxButton( this, wxID_ANY, _("Exit without Save"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerButtons->Add( m_buttonExitNoSave, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerButtons->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerLower->Add( bSizerButtons, 0, wxALIGN_RIGHT, 5 );
+
+
+ bSizerMain->Add( bSizerLower, 0, wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizerMain );
+ this->Layout();
+ bSizerMain->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ m_buttonSaveAndExit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EXIT_BASE::OnSaveAndExit ), NULL, this );
+ m_buttonExitNoSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EXIT_BASE::OnExitNoSave ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EXIT_BASE::OnCancel ), NULL, this );
+}
+
+DIALOG_EXIT_BASE::~DIALOG_EXIT_BASE()
+{
+ // Disconnect Events
+ m_buttonSaveAndExit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EXIT_BASE::OnSaveAndExit ), NULL, this );
+ m_buttonExitNoSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EXIT_BASE::OnExitNoSave ), NULL, this );
+ m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EXIT_BASE::OnCancel ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_exit_base.fbp b/common/dialogs/dialog_exit_base.fbp
new file mode 100644
index 0000000..a02b755
--- /dev/null
+++ b/common/dialogs/dialog_exit_base.fbp
@@ -0,0 +1,754 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="11" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_exit_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_exit_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center">wxBOTH</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">DIALOG_EXIT_BASE</property>
+ <property name="pos"></property>
+ <property name="size">-1,-1</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerMain</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerUpper</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerBitmap</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticBitmap" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmap"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_bitmap</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerMessages</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font">MS Shell Dlg 2,90,92,8,74,0</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Save the changes before closing?</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextInfo</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="spacer" expanded="1">
+ <property name="height">10</property>
+ <property name="permission">protected</property>
+ <property name="width">10</property>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">If you don&apos;t save, all your changes will be permanently lost.</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerLower</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_RIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerButtons</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Save and Exit</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonSaveAndExit</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnSaveAndExit</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Exit without Save</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonExitNoSave</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnExitNoSave</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_CANCEL</property>
+ <property name="label">Cancel</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonCancel</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnCancel</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_exit_base.h b/common/dialogs/dialog_exit_base.h
new file mode 100644
index 0000000..7330435
--- /dev/null
+++ b/common/dialogs/dialog_exit_base.h
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Oct 8 2012)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_EXIT_BASE_H__
+#define __DIALOG_EXIT_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/statbmp.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/statline.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_EXIT_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_EXIT_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmap;
+ wxStaticText* m_TextInfo;
+ wxStaticText* m_staticText2;
+ wxStaticLine* m_staticline;
+ wxButton* m_buttonSaveAndExit;
+ wxButton* m_buttonExitNoSave;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnSaveAndExit( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnExitNoSave( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_EXIT_BASE();
+
+};
+
+#endif //__DIALOG_EXIT_BASE_H__
diff --git a/common/dialogs/dialog_get_component.cpp b/common/dialogs/dialog_get_component.cpp
new file mode 100644
index 0000000..c0516bb
--- /dev/null
+++ b/common/dialogs/dialog_get_component.cpp
@@ -0,0 +1,144 @@
+/*********************************/
+/* dialog_get_component.cpp */
+/*********************************/
+
+#include <fctsys.h>
+#include <common.h>
+#include <macros.h>
+#include <draw_frame.h>
+#include <dialog_get_component.h>
+
+
+/****************************************************************************/
+/* Show a dialog frame to choose a name from an history list, or a new name */
+/* to select a component or a module */
+/****************************************************************************/
+
+static unsigned s_HistoryMaxCount = 8; // Max number of items displayed in history list
+
+
+/*
+ * Dialog frame to choose a component or a footprint
+ * This dialog shows an history of last selected items
+ */
+DIALOG_GET_COMPONENT::DIALOG_GET_COMPONENT( EDA_DRAW_FRAME* parent,
+ wxArrayString& HistoryList,
+ const wxString& Title,
+ bool show_extra_tool ) :
+ DIALOG_GET_COMPONENT_BASE( parent, -1, Title )
+{
+
+#ifdef __WXMAC__
+ m_auxToolSelector = false;
+#else
+ m_auxToolSelector = show_extra_tool;
+#endif
+ initDialog( HistoryList );
+
+ m_textCmpNameCtrl->SetFocus();
+ GetSizer()->Fit( this );
+ GetSizer()->SetSizeHints( this );
+}
+
+void DIALOG_GET_COMPONENT::initDialog( wxArrayString& aHistoryList )
+{
+ SetFocus();
+ m_GetExtraFunction = false;
+ m_selectionIsKeyword = false;
+ m_historyList->Append( aHistoryList );
+ if( !m_auxToolSelector )
+ {
+ m_buttonBrowse->Show( false );
+ m_buttonBrowse->Enable( false );
+ }
+}
+
+
+void DIALOG_GET_COMPONENT::OnCancel( wxCommandEvent& event )
+{
+ m_Text = wxEmptyString;
+ EndModal( wxID_CANCEL );
+}
+
+void DIALOG_GET_COMPONENT::Accept( wxCommandEvent& event )
+{
+ m_selectionIsKeyword = false;
+ switch( event.GetId() )
+ {
+ case ID_SEL_BY_LISTBOX:
+ m_Text = m_historyList->GetStringSelection();
+ break;
+
+ case wxID_OK:
+ m_Text = m_textCmpNameCtrl->GetValue();
+ break;
+
+ case ID_ACCEPT_KEYWORD:
+ m_selectionIsKeyword = true;
+ m_Text = m_textCmpNameCtrl->GetValue();
+ break;
+
+ case ID_LIST_ALL:
+ m_Text = wxT( "*" );
+ break;
+ }
+
+ m_Text.Trim( false ); // Remove blanks at beginning
+ m_Text.Trim( true ); // Remove blanks at end
+
+ EndModal( wxID_OK );
+}
+
+
+/* Get the component name by the extra function */
+void DIALOG_GET_COMPONENT::GetExtraSelection( wxCommandEvent& event )
+{
+ m_GetExtraFunction = true;
+ EndModal( wxID_OK );
+}
+
+
+// Return the component name selected by the dialog
+wxString DIALOG_GET_COMPONENT::GetComponentName( void )
+{
+ return m_Text;
+}
+
+
+/* Initialize the default component name default choice
+*/
+void DIALOG_GET_COMPONENT::SetComponentName( const wxString& name )
+{
+ if( m_textCmpNameCtrl )
+ {
+ m_textCmpNameCtrl->SetValue( name );
+ m_textCmpNameCtrl->SetSelection(-1, -1);
+ }
+}
+
+
+/*
+ * Add the string "aName" to the history list aHistoryList
+ */
+void AddHistoryComponentName( wxArrayString& aHistoryList, const wxString& aName )
+{
+ if( ( aHistoryList.GetCount() > 0 ) && ( aName == aHistoryList[0] ) )
+ return;
+
+ /* remove an old identical name if exists */
+ for( unsigned ii = 1; ii < aHistoryList.GetCount(); ii++ )
+ {
+ if( aName == aHistoryList[ii] )
+ {
+ aHistoryList.RemoveAt( ii );
+ ii--;
+ }
+ }
+
+ // Add the new name at the beginning of the history list
+ aHistoryList.Insert(aName, 0);
+
+ // Remove extra names
+ while( aHistoryList.GetCount() >= s_HistoryMaxCount )
+ aHistoryList.RemoveAt( aHistoryList.GetCount()-1 );
+}
diff --git a/common/dialogs/dialog_get_component_base.cpp b/common/dialogs/dialog_get_component_base.cpp
new file mode 100644
index 0000000..8e8810c
--- /dev/null
+++ b/common/dialogs/dialog_get_component_base.cpp
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Nov 5 2013)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_get_component_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_GET_COMPONENT_BASE::DIALOG_GET_COMPONENT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizerMain;
+ bSizerMain = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeft;
+ bSizerLeft = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextName = new wxStaticText( this, wxID_ANY, _("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextName->Wrap( -1 );
+ bSizerLeft->Add( m_staticTextName, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCmpNameCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_textCmpNameCtrl->SetMaxLength( 0 );
+ bSizerLeft->Add( m_textCmpNameCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextHistory = new wxStaticText( this, wxID_ANY, _("History list:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHistory->Wrap( -1 );
+ bSizerLeft->Add( m_staticTextHistory, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_historyList = new wxListBox( this, ID_SEL_BY_LISTBOX, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ m_historyList->SetMinSize( wxSize( 200,100 ) );
+
+ bSizerLeft->Add( m_historyList, 1, wxALL|wxEXPAND, 5 );
+
+
+ bSizerMain->Add( bSizerLeft, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerRight;
+ bSizerRight = new wxBoxSizer( wxVERTICAL );
+
+ m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonOK->SetDefault();
+ bSizerRight->Add( m_buttonOK, 0, wxALL|wxEXPAND, 5 );
+
+ m_buttonKW = new wxButton( this, ID_ACCEPT_KEYWORD, _("Search by Keyword"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonKW, 0, wxALL|wxEXPAND, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonCancel, 0, wxALL|wxEXPAND, 5 );
+
+ m_buttonList = new wxButton( this, ID_LIST_ALL, _("List All"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonList, 0, wxALL|wxEXPAND, 5 );
+
+ m_buttonBrowse = new wxButton( this, ID_EXTRA_TOOL, _("Select by Browser"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonBrowse, 0, wxALL|wxEXPAND, 5 );
+
+
+ bSizerMain->Add( bSizerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ this->SetSizer( bSizerMain );
+ this->Layout();
+ bSizerMain->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ m_historyList->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonKW->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::OnCancel ), NULL, this );
+ m_buttonList->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonBrowse->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::GetExtraSelection ), NULL, this );
+}
+
+DIALOG_GET_COMPONENT_BASE::~DIALOG_GET_COMPONENT_BASE()
+{
+ // Disconnect Events
+ m_historyList->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonKW->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::OnCancel ), NULL, this );
+ m_buttonList->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::Accept ), NULL, this );
+ m_buttonBrowse->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_COMPONENT_BASE::GetExtraSelection ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_get_component_base.fbp b/common/dialogs/dialog_get_component_base.fbp
new file mode 100644
index 0000000..10a950c
--- /dev/null
+++ b/common/dialogs/dialog_get_component_base.fbp
@@ -0,0 +1,906 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="11" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_get_component_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_get_component_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center">wxBOTH</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">DIALOG_GET_COMPONENT_BASE</property>
+ <property name="pos"></property>
+ <property name="size">-1,-1</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerMain</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerLeft</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Name:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextName</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCmpNameCtrl</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">History list:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextHistory</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxListBox" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices"></property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">ID_SEL_BY_LISTBOX</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">200,100</property>
+ <property name="moveable">1</property>
+ <property name="name">m_historyList</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnListBox">Accept</event>
+ <event name="OnListBoxDClick"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerRight</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_OK</property>
+ <property name="label">OK</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonOK</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">Accept</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">ID_ACCEPT_KEYWORD</property>
+ <property name="label">Search by Keyword</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonKW</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">Accept</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_CANCEL</property>
+ <property name="label">Cancel</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonCancel</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnCancel</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">ID_LIST_ALL</property>
+ <property name="label">List All</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonList</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">Accept</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">ID_EXTRA_TOOL</property>
+ <property name="label">Select by Browser</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonBrowse</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">GetExtraSelection</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_get_component_base.h b/common/dialogs/dialog_get_component_base.h
new file mode 100644
index 0000000..a0a39d5
--- /dev/null
+++ b/common/dialogs/dialog_get_component_base.h
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Nov 5 2013)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_GET_COMPONENT_BASE_H__
+#define __DIALOG_GET_COMPONENT_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/textctrl.h>
+#include <wx/listbox.h>
+#include <wx/sizer.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+#define ID_SEL_BY_LISTBOX 1000
+#define ID_ACCEPT_KEYWORD 1001
+#define ID_LIST_ALL 1002
+#define ID_EXTRA_TOOL 1003
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_GET_COMPONENT_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_GET_COMPONENT_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxStaticText* m_staticTextName;
+ wxTextCtrl* m_textCmpNameCtrl;
+ wxStaticText* m_staticTextHistory;
+ wxListBox* m_historyList;
+ wxButton* m_buttonOK;
+ wxButton* m_buttonKW;
+ wxButton* m_buttonCancel;
+ wxButton* m_buttonList;
+ wxButton* m_buttonBrowse;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void Accept( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+ virtual void GetExtraSelection( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_GET_COMPONENT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_GET_COMPONENT_BASE();
+
+};
+
+#endif //__DIALOG_GET_COMPONENT_BASE_H__
diff --git a/common/dialogs/dialog_hotkeys_editor.cpp b/common/dialogs/dialog_hotkeys_editor.cpp
new file mode 100644
index 0000000..0dfedf2
--- /dev/null
+++ b/common/dialogs/dialog_hotkeys_editor.cpp
@@ -0,0 +1,389 @@
+/**
+ * @file dialog_hotkeys_editor.cpp
+ */
+
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2014 Kicad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <algorithm>
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <common.h>
+#include <confirm.h>
+
+#include <dialog_hotkeys_editor.h>
+
+
+HOTKEY_LIST_CTRL::HOTKEY_LIST_CTRL( wxWindow *aParent, struct EDA_HOTKEY_CONFIG* aSection ) :
+ wxListCtrl( aParent, wxID_ANY, wxDefaultPosition,
+ wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VIRTUAL )
+{
+ m_sectionTag = aSection->m_SectionTag;
+ m_curEditingRow = -1;
+
+ InsertColumn( 0, _( "Command" ) );
+ InsertColumn( 1, _( "Hotkey" ) );
+
+ // Add a dummy hotkey_spec which is a header before each hotkey list
+ EDA_HOTKEY** hotkey_descr_list;
+
+ // Add a copy of hotkeys to our list
+ for( hotkey_descr_list = aSection->m_HK_InfoList; *hotkey_descr_list; hotkey_descr_list++ )
+ {
+ EDA_HOTKEY* hotkey_descr = *hotkey_descr_list;
+ m_hotkeys.push_back( new EDA_HOTKEY( hotkey_descr ) );
+ }
+
+ // Set item count to hotkey size, this gets it to autoload the entries
+ SetItemCount( m_hotkeys.size() );
+
+ SetColumnWidth( 0, wxLIST_AUTOSIZE );
+ SetColumnWidth( 1, wxLIST_AUTOSIZE );
+
+ Bind( wxEVT_CHAR, &HOTKEY_LIST_CTRL::OnChar, this );
+ Bind( wxEVT_LIST_ITEM_SELECTED, &HOTKEY_LIST_CTRL::OnListItemSelected, this );
+ Bind( wxEVT_SIZE, &HOTKEY_LIST_CTRL::OnSize, this );
+}
+
+
+void HOTKEY_LIST_CTRL::OnSize( wxSizeEvent& aEvent )
+{
+ recalculateColumns();
+ aEvent.Skip();
+}
+
+
+void HOTKEY_LIST_CTRL::recalculateColumns()
+{
+ float totalLength = 0;
+ float scale = 0;
+
+ // Find max character length of first column
+ int maxInfoMsgLength = 0;
+
+ for( int i = 0; i < GetItemCount(); i++ )
+ {
+ int length = GetItemText( i, 0 ).Length();
+
+ if( length > maxInfoMsgLength )
+ maxInfoMsgLength = length;
+ }
+
+ // Find max character length of second column
+ int maxKeyCodeLength = 0;
+
+ for( int i = 0; i < GetItemCount(); i++ )
+ {
+ int length = GetItemText( i, 1 ).Length();
+ if( length > maxKeyCodeLength )
+ maxKeyCodeLength = length;
+ }
+
+ // Use the lengths of column texts to create a scale of the max list width
+ // to set the column widths
+ totalLength = maxInfoMsgLength + maxKeyCodeLength;
+
+ scale = (double) GetClientSize().x / totalLength;
+
+ SetColumnWidth( 0, int( maxInfoMsgLength*scale ) - 2 );
+ SetColumnWidth( 1, int( maxKeyCodeLength*scale ) );
+}
+
+
+void HOTKEY_LIST_CTRL::OnListItemSelected( wxListEvent& aEvent )
+{
+ m_curEditingRow = aEvent.GetIndex();
+}
+
+
+void HOTKEY_LIST_CTRL::DeselectRow( int aRow )
+{
+ SetItemState( aRow, 0, wxLIST_STATE_SELECTED );
+}
+
+
+wxString HOTKEY_LIST_CTRL::OnGetItemText( long aRow, long aColumn ) const
+{
+ EDA_HOTKEY* hotkey_descr = m_hotkeys[aRow];
+
+ if( aColumn == 0 )
+ {
+ return wxGetTranslation( hotkey_descr->m_InfoMsg );
+ }
+ else
+ {
+ return KeyNameFromKeyCode( hotkey_descr->m_KeyCode );
+ }
+}
+
+
+void HOTKEY_LIST_CTRL::OnChar( wxKeyEvent& aEvent )
+{
+ if( m_curEditingRow != -1 )
+ {
+ long key = aEvent.GetKeyCode();
+
+ switch( key )
+ {
+ case WXK_ESCAPE:
+ // Remove selection
+ DeselectRow( m_curEditingRow );
+ m_curEditingRow = -1;
+ break;
+
+ default:
+ if( key >= 'a' && key <= 'z' ) // convert to uppercase
+ key = key + ('A' - 'a');
+
+ // Remap Ctrl A (=1+GR_KB_CTRL) to Ctrl Z(=26+GR_KB_CTRL)
+ // to GR_KB_CTRL+'A' .. GR_KB_CTRL+'Z'
+ if( aEvent.ControlDown() && key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z )
+ key += 'A' - 1;
+
+ /* Disallow shift for keys that have two keycodes on them (e.g. number and
+ * punctuation keys) leaving only the "letter keys" of A-Z.
+ * Then, you can have, e.g. Ctrl-5 and Ctrl-% (GB layout)
+ * and Ctrl-( and Ctrl-5 (FR layout).
+ * Otherwise, you'd have to have to say Ctrl-Shift-5 on a FR layout
+ */
+ bool keyIsLetter = key >= 'A' && key <= 'Z';
+
+ if( aEvent.ShiftDown() && ( keyIsLetter || key > 256 ) )
+ key |= GR_KB_SHIFT;
+
+ if( aEvent.ControlDown() )
+ key |= GR_KB_CTRL;
+
+ if( aEvent.AltDown() )
+ key |= GR_KB_ALT;
+
+ // See if this key code is handled in hotkeys names list
+ bool exists;
+ KeyNameFromKeyCode( key, &exists );
+
+ if( exists && m_hotkeys[m_curEditingRow]->m_KeyCode != key )
+ {
+ bool canUpdate = ((HOTKEY_SECTION_PAGE *)m_parent)->GetDialog()->CanSetKey( key, m_sectionTag );
+
+ if( canUpdate )
+ {
+ m_hotkeys[m_curEditingRow]->m_KeyCode = key;
+ recalculateColumns();
+ }
+
+ // Remove selection
+ DeselectRow( m_curEditingRow );
+ m_curEditingRow = -1;
+ }
+ }
+ }
+ RefreshItems(0,m_hotkeys.size()-1);
+}
+
+
+void HOTKEY_LIST_CTRL::RestoreFrom( struct EDA_HOTKEY_CONFIG* aSection )
+{
+ int row = 0;
+
+ EDA_HOTKEY** info_ptr;
+
+ for( info_ptr = aSection->m_HK_InfoList; *info_ptr; info_ptr++ )
+ {
+ EDA_HOTKEY* info = *info_ptr;
+ m_hotkeys[row++]->m_KeyCode = info->m_KeyCode;
+ }
+
+ // Remove selection
+ DeselectRow( m_curEditingRow );
+ m_curEditingRow = -1;
+
+ RefreshItems( 0, m_hotkeys.size()-1 );
+}
+
+
+HOTKEY_SECTION_PAGE::HOTKEY_SECTION_PAGE( HOTKEYS_EDITOR_DIALOG* aDialog,
+ wxNotebook* aParent,
+ const wxString& aTitle,
+ EDA_HOTKEY_CONFIG* aSection ) :
+ wxPanel( aParent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxNO_BORDER ),
+ m_hotkeySection( aSection ),
+ m_dialog( aDialog )
+{
+ aParent->AddPage( this, aTitle );
+
+ wxBoxSizer* bMainSizer = new wxBoxSizer( wxVERTICAL );
+
+ SetSizer( bMainSizer );
+ Layout();
+ bMainSizer->Fit( this );
+
+ m_hotkeyList = new HOTKEY_LIST_CTRL( this, aSection );
+ bMainSizer->Add( m_hotkeyList, 1, wxALL|wxEXPAND, 5 );
+}
+
+
+void HOTKEY_SECTION_PAGE::Restore()
+{
+ m_hotkeyList->RestoreFrom( m_hotkeySection );
+
+ Update();
+}
+
+
+void InstallHotkeyFrame( EDA_BASE_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys )
+{
+ HOTKEYS_EDITOR_DIALOG dialog( aParent, aHotkeys );
+
+ int diag = dialog.ShowModal();
+ if( diag == wxID_OK )
+ {
+ aParent->ReCreateMenuBar();
+ aParent->Refresh();
+ }
+}
+
+
+HOTKEYS_EDITOR_DIALOG::HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent,
+ EDA_HOTKEY_CONFIG* aHotkeys ) :
+ HOTKEYS_EDITOR_DIALOG_BASE( aParent ),
+ m_parent( aParent ),
+ m_hotkeys( aHotkeys )
+{
+ EDA_HOTKEY_CONFIG* section;
+
+ for( section = m_hotkeys; section->m_HK_InfoList; section++ )
+ {
+ m_hotkeySectionPages.push_back( new HOTKEY_SECTION_PAGE( this, m_hotkeySections,
+ wxGetTranslation( *section->m_Title ),
+ section ) );
+ }
+
+ m_sdbSizerOK->SetDefault();
+ Center();
+}
+
+
+void HOTKEYS_EDITOR_DIALOG::OnOKClicked( wxCommandEvent& event )
+{
+ std::vector<HOTKEY_SECTION_PAGE*>::iterator i;
+
+ for( i = m_hotkeySectionPages.begin(); i != m_hotkeySectionPages.end(); ++i )
+ {
+ std::vector<EDA_HOTKEY*>& hotkey_vec = (*i)->GetHotkeys();
+ EDA_HOTKEY_CONFIG* section = (*i)->GetHotkeySection();
+
+ EDA_HOTKEY** info_ptr;
+
+ for( info_ptr = section->m_HK_InfoList; *info_ptr; info_ptr++ )
+ {
+ EDA_HOTKEY* info = *info_ptr;
+
+ /* find the corresponding hotkey */
+ std::vector<EDA_HOTKEY*>::iterator j;
+
+ for( j = hotkey_vec.begin(); j != hotkey_vec.end(); ++j )
+ {
+ if( (*j) && (*j)->m_Idcommand == info->m_Idcommand )
+ {
+ info->m_KeyCode = (*j)->m_KeyCode;
+ break;
+ }
+ }
+ }
+ }
+
+ /* save the hotkeys */
+ m_parent->WriteHotkeyConfig( m_hotkeys );
+
+ EndModal( wxID_OK );
+}
+
+
+
+void HOTKEYS_EDITOR_DIALOG::UndoClicked( wxCommandEvent& aEvent )
+{
+ std::vector<HOTKEY_SECTION_PAGE*>::iterator i;
+
+ for( i = m_hotkeySectionPages.begin(); i != m_hotkeySectionPages.end(); ++i )
+ {
+ (*i)->Restore();
+ }
+}
+
+
+bool HOTKEYS_EDITOR_DIALOG::CanSetKey( long aKey, const wxString* sectionTag )
+{
+ std::vector<HOTKEY_SECTION_PAGE*>::iterator i;
+
+ EDA_HOTKEY* conflictingKey = NULL;
+ HOTKEY_SECTION_PAGE* conflictingSection = NULL;
+
+ for( i = m_hotkeySectionPages.begin(); i != m_hotkeySectionPages.end(); ++i )
+ {
+ // Any non Common section can only conflict with itself and Common
+ if( *sectionTag != g_CommonSectionTag
+ && *((*i)->GetHotkeySection()->m_SectionTag) != g_CommonSectionTag
+ && *((*i)->GetHotkeySection()->m_SectionTag) != *sectionTag )
+ continue;
+
+ std::vector<EDA_HOTKEY*>& hotkey_vec = (*i)->GetHotkeys();
+ /* find the corresponding hotkey */
+ std::vector<EDA_HOTKEY*>::iterator j;
+
+ for( j = hotkey_vec.begin(); j != hotkey_vec.end(); ++j )
+ {
+ if( aKey == (*j)->m_KeyCode )
+ {
+ conflictingKey = (*j);
+ conflictingSection = (*i);
+
+ break;
+ }
+ }
+ }
+
+ if( conflictingKey != NULL )
+ {
+ wxString info = wxGetTranslation( conflictingKey->m_InfoMsg );
+ wxString msg = wxString::Format(
+ _( "<%s> is already assigned to \"%s\" in section \"%s\". Are you sure you want "
+ "to change its assignment?" ),
+ KeyNameFromKeyCode( aKey ), GetChars( info ),
+ *(conflictingSection->GetHotkeySection()->m_Title) );
+
+ wxMessageDialog dlg( this, msg, _( "Confirm change" ), wxYES_NO | wxNO_DEFAULT );
+
+ if( dlg.ShowModal() == wxID_YES )
+ {
+ conflictingKey->m_KeyCode = 0;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/common/dialogs/dialog_hotkeys_editor_base.cpp b/common/dialogs/dialog_hotkeys_editor_base.cpp
new file mode 100644
index 0000000..ef2f7c9
--- /dev/null
+++ b/common/dialogs/dialog_hotkeys_editor_base.cpp
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_hotkeys_editor_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+HOTKEYS_EDITOR_DIALOG_BASE::HOTKEYS_EDITOR_DIALOG_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bMainSizer;
+ bMainSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText1 = new wxStaticText( this, wxID_ANY, _("Select a row and press a new key combination to alter the binding."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->Wrap( 400 );
+ bMainSizer->Add( m_staticText1, 0, wxALL|wxEXPAND, 5 );
+
+ m_hotkeySections = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ bMainSizer->Add( m_hotkeySections, 1, wxEXPAND | wxALL, 5 );
+
+ wxBoxSizer* b_buttonsSizer;
+ b_buttonsSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer->AddButton( m_sdbSizerCancel );
+ m_sdbSizer->Realize();
+
+ b_buttonsSizer->Add( m_sdbSizer, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ m_undoButton = new wxButton( this, wxID_UNDO, _("Undo"), wxDefaultPosition, wxDefaultSize, 0 );
+ b_buttonsSizer->Add( m_undoButton, 0, wxALL|wxEXPAND, 5 );
+
+
+ bMainSizer->Add( b_buttonsSizer, 0, wxALIGN_RIGHT, 5 );
+
+
+ this->SetSizer( bMainSizer );
+ this->Layout();
+
+ // Connect Events
+ m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( HOTKEYS_EDITOR_DIALOG_BASE::OnOKClicked ), NULL, this );
+ m_undoButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( HOTKEYS_EDITOR_DIALOG_BASE::UndoClicked ), NULL, this );
+}
+
+HOTKEYS_EDITOR_DIALOG_BASE::~HOTKEYS_EDITOR_DIALOG_BASE()
+{
+ // Disconnect Events
+ m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( HOTKEYS_EDITOR_DIALOG_BASE::OnOKClicked ), NULL, this );
+ m_undoButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( HOTKEYS_EDITOR_DIALOG_BASE::UndoClicked ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_hotkeys_editor_base.fbp b/common/dialogs/dialog_hotkeys_editor_base.fbp
new file mode 100644
index 0000000..7b12ee4
--- /dev/null
+++ b/common/dialogs/dialog_hotkeys_editor_base.fbp
@@ -0,0 +1,391 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_hotkeys_editor_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_hotkeys_editor_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">HOTKEYS_EDITOR_DIALOG_BASE</property>
+ <property name="pos"></property>
+ <property name="size">450,500</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title">Hotkeys Editor</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bMainSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Select a row and press a new key combination to alter the binding.</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">400</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">1</property>
+ <object class="wxNotebook" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmapsize"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_hotkeySections</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnNotebookPageChanged"></event>
+ <event name="OnNotebookPageChanging"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_RIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">b_buttonsSizer</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick"></event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick">OnOKClicked</event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_UNDO</property>
+ <property name="label">Undo</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_undoButton</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">UndoClicked</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_hotkeys_editor_base.h b/common/dialogs/dialog_hotkeys_editor_base.h
new file mode 100644
index 0000000..f0d4d9e
--- /dev/null
+++ b/common/dialogs/dialog_hotkeys_editor_base.h
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_HOTKEYS_EDITOR_BASE_H__
+#define __DIALOG_HOTKEYS_EDITOR_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/notebook.h>
+#include <wx/sizer.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class HOTKEYS_EDITOR_DIALOG_BASE
+///////////////////////////////////////////////////////////////////////////////
+class HOTKEYS_EDITOR_DIALOG_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxStaticText* m_staticText1;
+ wxNotebook* m_hotkeySections;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+ wxButton* m_sdbSizerCancel;
+ wxButton* m_undoButton;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnOKClicked( wxCommandEvent& event ) { event.Skip(); }
+ virtual void UndoClicked( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ HOTKEYS_EDITOR_DIALOG_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Hotkeys Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 450,500 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~HOTKEYS_EDITOR_DIALOG_BASE();
+
+};
+
+#endif //__DIALOG_HOTKEYS_EDITOR_BASE_H__
diff --git a/common/dialogs/dialog_image_editor.cpp b/common/dialogs/dialog_image_editor.cpp
new file mode 100644
index 0000000..9d0edd2
--- /dev/null
+++ b/common/dialogs/dialog_image_editor.cpp
@@ -0,0 +1,179 @@
+/**
+ * @file dialog_image_editor.cpp
+ */
+
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 jean-pierre.charras
+ * Copyright (C) 2011 Kicad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <class_bitmap_base.h>
+
+#include <dialog_image_editor.h>
+
+DIALOG_IMAGE_EDITOR::DIALOG_IMAGE_EDITOR( wxWindow* aParent, BITMAP_BASE* aItem )
+ : DIALOG_IMAGE_EDITOR_BASE( aParent )
+{
+ m_workingImage = new BITMAP_BASE( * aItem );
+ m_lastImage = NULL;
+ m_buttonUndoLast->Enable( false );
+ wxString msg;
+ msg.Printf( wxT("%f"), m_workingImage->m_Scale );
+ m_textCtrlScale->SetValue( msg );
+
+ GetSizer()->SetSizeHints( this );
+ Layout();
+ Fit();
+ SetMinSize( GetBestSize() );
+
+ Centre();
+ SetFocus();
+}
+
+void DIALOG_IMAGE_EDITOR::OnUndoLastChange( wxCommandEvent& event )
+{
+ BITMAP_BASE * tmp = m_workingImage;
+ m_workingImage = m_lastImage;
+ delete tmp;
+ m_buttonUndoLast->Enable( false );
+ m_lastImage = NULL;
+ m_panelDraw->Refresh();
+}
+
+void DIALOG_IMAGE_EDITOR::OnMirrorX_click( wxCommandEvent& event )
+{
+ delete m_lastImage;
+ m_lastImage = new BITMAP_BASE( * m_workingImage );
+ m_buttonUndoLast->Enable( true );
+ m_buttonUndoLast->Enable( true );
+ m_workingImage->Mirror( true );
+ m_panelDraw->Refresh();
+}
+
+void DIALOG_IMAGE_EDITOR::OnMirrorY_click( wxCommandEvent& event )
+{
+ delete m_lastImage;
+ m_lastImage = new BITMAP_BASE( * m_workingImage );
+ m_buttonUndoLast->Enable( true );
+ m_workingImage->Mirror( false );
+ m_panelDraw->Refresh();
+}
+
+void DIALOG_IMAGE_EDITOR::OnRotateClick( wxCommandEvent& event )
+{
+ delete m_lastImage;
+ m_lastImage = new BITMAP_BASE( * m_workingImage );
+ m_buttonUndoLast->Enable( true );
+ m_workingImage->Rotate( false );
+ m_panelDraw->Refresh();
+}
+
+void DIALOG_IMAGE_EDITOR::OnGreyScaleConvert( wxCommandEvent& event )
+{
+ delete m_lastImage;
+ m_lastImage = new BITMAP_BASE( * m_workingImage );
+ m_buttonUndoLast->Enable( true );
+ wxImage& image = *m_workingImage->GetImageData();
+ image = image.ConvertToGreyscale();
+ m_workingImage->RebuildBitmap();
+ m_panelDraw->Refresh();
+}
+
+void DIALOG_IMAGE_EDITOR::OnHalfSize( wxCommandEvent& event )
+{
+ delete m_lastImage;
+ m_lastImage = new BITMAP_BASE( * m_workingImage );
+ m_buttonUndoLast->Enable( true );
+ wxSize psize = m_workingImage->GetSizePixels();
+ wxImage& image = *m_workingImage->GetImageData();
+
+ image = image.Scale(psize.x/2, psize.y/2, wxIMAGE_QUALITY_HIGH);
+ m_workingImage->RebuildBitmap();
+ m_panelDraw->Refresh();
+}
+
+/* Test params values correctness
+ * Currently scale value must give an actual image
+ * > MIN_SIZE pixels and < MAX_SIZE pixels
+ */
+bool DIALOG_IMAGE_EDITOR::CheckValues()
+{
+ #define MIN_SIZE 16
+ #define MAX_SIZE 6000
+ double tmp;
+ wxString msg = m_textCtrlScale->GetValue();
+ // Test number correctness
+ if( ! msg.ToDouble( &tmp ) )
+ {
+ wxMessageBox( _("Incorrect scale number" ) );
+ return false;
+ }
+
+ // Test value correctness
+ wxSize psize = m_workingImage->GetSizePixels();
+ if ( (psize.x * tmp) < MIN_SIZE || (psize.y * tmp) < MIN_SIZE )
+ {
+ wxMessageBox( _("Scale is too small for this image" ) );
+ return false;
+ }
+ if ( (psize.x * tmp) > MAX_SIZE || (psize.y * tmp) > MAX_SIZE )
+ {
+ wxMessageBox( _("Scale is too large for this image" ) );
+ return false;
+ }
+
+ return true;
+}
+
+void DIALOG_IMAGE_EDITOR::OnOK_Button( wxCommandEvent& aEvent )
+{
+ if( CheckValues() )
+ EndModal( wxID_OK );
+ return;
+}
+
+void DIALOG_IMAGE_EDITOR::OnCancel_Button( wxCommandEvent& aEvent )
+{
+ EndModal( wxID_CANCEL );
+}
+
+void DIALOG_IMAGE_EDITOR::OnRedrawPanel( wxPaintEvent& event )
+{
+ wxPaintDC dc( m_panelDraw );
+ wxSize size = m_panelDraw->GetClientSize();
+ dc.SetDeviceOrigin( size.x/2, size.y/2 );
+
+ double scale = 1.0 / m_workingImage->GetScalingFactor();
+ dc.SetUserScale( scale, scale );
+ m_workingImage->DrawBitmap( NULL, &dc, wxPoint(0,0) );
+}
+
+void DIALOG_IMAGE_EDITOR::TransfertToImage(BITMAP_BASE* aItem )
+{
+ wxString msg = m_textCtrlScale->GetValue();
+ msg.ToDouble( &m_workingImage->m_Scale );
+ aItem->ImportData( m_workingImage );
+}
+
diff --git a/common/dialogs/dialog_image_editor.fbp b/common/dialogs/dialog_image_editor.fbp
new file mode 100644
index 0000000..04c5c7e
--- /dev/null
+++ b/common/dialogs/dialog_image_editor.fbp
@@ -0,0 +1,978 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="11" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration" />
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_image_editor_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_image_editor</property>
+ <property name="namespace" />
+ <property name="path">.</property>
+ <property name="precompiled_header" />
+ <property name="relative_path">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_managed">0</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center">wxBOTH</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style" />
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">DIALOG_IMAGE_EDITOR_BASE</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size">340,299</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass" />
+ <property name="title">Image Editor</property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnActivate" />
+ <event name="OnActivateApp" />
+ <event name="OnAuiFindManager" />
+ <event name="OnAuiPaneButton" />
+ <event name="OnAuiPaneClose" />
+ <event name="OnAuiPaneMaximize" />
+ <event name="OnAuiPaneRestore" />
+ <event name="OnAuiRender" />
+ <event name="OnChar" />
+ <event name="OnClose" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnHibernate" />
+ <event name="OnIconize" />
+ <event name="OnIdle" />
+ <event name="OnInitDialog" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size" />
+ <property name="name">bSizerMain</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size" />
+ <property name="name">bUpperSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size" />
+ <property name="name">bSizerLeft</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">1</property>
+ <object class="wxPanel" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">256,256</property>
+ <property name="moveable">1</property>
+ <property name="name">m_panelDraw</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER|wxTAB_TRAVERSAL</property>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint">OnRedrawPanel</event>
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size" />
+ <property name="name">bSizerRight</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Mirror X</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonMirrorX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnMirrorX_click</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Mirror Y</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonMirrorY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnMirrorY_click</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Rotate</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonRotate</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnRotateClick</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Grey</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonGrey</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnGreyScaleConvert</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Half Size</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonHalfSize</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnHalfSize</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Undo Last</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_buttonUndoLast</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnButtonClick">OnUndoLastChange</event>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Image Scale:</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextScale</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <property name="wrap">-1</property>
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name" />
+ <property name="best_size" />
+ <property name="bg" />
+ <property name="caption" />
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help" />
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg" />
+ <property name="floatable">1</property>
+ <property name="font" />
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer" />
+ <property name="max_size" />
+ <property name="maximize_button">0</property>
+ <property name="maximum_size" />
+ <property name="maxlength">0</property>
+ <property name="min_size" />
+ <property name="minimize_button">0</property>
+ <property name="minimum_size" />
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlScale</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position" />
+ <property name="pane_size" />
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos" />
+ <property name="position" />
+ <property name="resize">Resizable</property>
+ <property name="row" />
+ <property name="show">1</property>
+ <property name="size" />
+ <property name="style" />
+ <property name="subclass" />
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip" />
+ <property name="validator_data_type" />
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable" />
+ <property name="value" />
+ <property name="window_extra_style" />
+ <property name="window_name" />
+ <property name="window_style" />
+ <event name="OnChar" />
+ <event name="OnEnterWindow" />
+ <event name="OnEraseBackground" />
+ <event name="OnKeyDown" />
+ <event name="OnKeyUp" />
+ <event name="OnKillFocus" />
+ <event name="OnLeaveWindow" />
+ <event name="OnLeftDClick" />
+ <event name="OnLeftDown" />
+ <event name="OnLeftUp" />
+ <event name="OnMiddleDClick" />
+ <event name="OnMiddleDown" />
+ <event name="OnMiddleUp" />
+ <event name="OnMotion" />
+ <event name="OnMouseEvents" />
+ <event name="OnMouseWheel" />
+ <event name="OnPaint" />
+ <event name="OnRightDClick" />
+ <event name="OnRightDown" />
+ <event name="OnRightUp" />
+ <event name="OnSetFocus" />
+ <event name="OnSize" />
+ <event name="OnText" />
+ <event name="OnTextEnter" />
+ <event name="OnTextMaxLen" />
+ <event name="OnTextURL" />
+ <event name="OnUpdateUI" />
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_RIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size" />
+ <property name="name">m_sdbSizer1</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick" />
+ <event name="OnCancelButtonClick">OnCancel_Button</event>
+ <event name="OnContextHelpButtonClick" />
+ <event name="OnHelpButtonClick" />
+ <event name="OnNoButtonClick" />
+ <event name="OnOKButtonClick">OnOK_Button</event>
+ <event name="OnSaveButtonClick" />
+ <event name="OnYesButtonClick" />
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_image_editor.h b/common/dialogs/dialog_image_editor.h
new file mode 100644
index 0000000..226221c
--- /dev/null
+++ b/common/dialogs/dialog_image_editor.h
@@ -0,0 +1,69 @@
+/**
+ * @file dialog_image_editor.h
+ */
+
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 jean-pierre.charras
+ * Copyright (C) 2011 Kicad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _DIALOG_IMAGE_EDITOR_H_
+#define _DIALOG_IMAGE_EDITOR_H_
+
+#include <dialog_image_editor_base.h>
+
+
+class DIALOG_IMAGE_EDITOR : public DIALOG_IMAGE_EDITOR_BASE
+{
+private:
+ BITMAP_BASE* m_workingImage; // The copy of BITMAP_BASE to be edited
+ BITMAP_BASE* m_lastImage; // the saved BITMAP_BASE before a new change.
+ // Used to undo the last change
+
+public:
+ DIALOG_IMAGE_EDITOR( wxWindow* aParent, BITMAP_BASE* aItem );
+ ~DIALOG_IMAGE_EDITOR(){ delete m_workingImage; }
+
+
+public:
+ /**
+ * Function TransfertToImage
+ * copy edited image to aItem
+ * @param aItem = the target
+ */
+ void TransfertToImage( BITMAP_BASE* aItem );
+
+private:
+ void OnUndoLastChange( wxCommandEvent& event );
+ void OnGreyScaleConvert( wxCommandEvent& event );
+ void OnHalfSize( wxCommandEvent& event );
+ void OnMirrorX_click( wxCommandEvent& event );
+ void OnMirrorY_click( wxCommandEvent& event );
+ void OnRotateClick( wxCommandEvent& event );
+ void OnOK_Button( wxCommandEvent& aEvent );
+ void OnCancel_Button( wxCommandEvent& aEvent );
+ void OnRedrawPanel( wxPaintEvent& event );
+ bool CheckValues();
+};
+
+
+#endif // _DIALOG_IMAGE_EDITOR_H_
diff --git a/common/dialogs/dialog_image_editor_base.cpp b/common/dialogs/dialog_image_editor_base.cpp
new file mode 100644
index 0000000..e11c764
--- /dev/null
+++ b/common/dialogs/dialog_image_editor_base.cpp
@@ -0,0 +1,103 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 30 2011)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_image_editor_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_IMAGE_EDITOR_BASE::DIALOG_IMAGE_EDITOR_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizerMain;
+ bSizerMain = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bUpperSizer;
+ bUpperSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerLeft;
+ bSizerLeft = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelDraw = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
+ m_panelDraw->SetMinSize( wxSize( 256,256 ) );
+
+ bSizerLeft->Add( m_panelDraw, 1, wxEXPAND | wxALL, 5 );
+
+ wxBoxSizer* bSizerRight;
+ bSizerRight = new wxBoxSizer( wxVERTICAL );
+
+ m_buttonMirrorX = new wxButton( this, wxID_ANY, _("Mirror X"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonMirrorX, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_buttonMirrorY = new wxButton( this, wxID_ANY, _("Mirror Y"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonMirrorY, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_buttonRotate = new wxButton( this, wxID_ANY, _("Rotate"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonRotate, 0, wxEXPAND|wxALL, 5 );
+
+ m_buttonGrey = new wxButton( this, wxID_ANY, _("Grey"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonGrey, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_buttonHalfSize = new wxButton( this, wxID_ANY, _("Half Size"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonHalfSize->SetDefault();
+ bSizerRight->Add( m_buttonHalfSize, 0, wxALL|wxEXPAND, 5 );
+
+ m_buttonUndoLast = new wxButton( this, wxID_ANY, _("Undo Last"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_buttonUndoLast, 0, wxALL|wxEXPAND, 5 );
+
+ m_staticTextScale = new wxStaticText( this, wxID_ANY, _("Image Scale:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextScale->Wrap( -1 );
+ bSizerRight->Add( m_staticTextScale, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlScale = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRight->Add( m_textCtrlScale, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ bSizerLeft->Add( bSizerRight, 0, wxEXPAND, 5 );
+
+ bUpperSizer->Add( bSizerLeft, 1, wxEXPAND, 5 );
+
+ bSizerMain->Add( bUpperSizer, 1, wxEXPAND, 5 );
+
+ m_sdbSizer1 = new wxStdDialogButtonSizer();
+ m_sdbSizer1OK = new wxButton( this, wxID_OK );
+ m_sdbSizer1->AddButton( m_sdbSizer1OK );
+ m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer1->AddButton( m_sdbSizer1Cancel );
+ m_sdbSizer1->Realize();
+ bSizerMain->Add( m_sdbSizer1, 0, wxALIGN_RIGHT, 5 );
+
+ this->SetSizer( bSizerMain );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ m_panelDraw->Connect( wxEVT_PAINT, wxPaintEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnRedrawPanel ), NULL, this );
+ m_buttonMirrorX->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnMirrorX_click ), NULL, this );
+ m_buttonMirrorY->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnMirrorY_click ), NULL, this );
+ m_buttonRotate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnRotateClick ), NULL, this );
+ m_buttonGrey->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnGreyScaleConvert ), NULL, this );
+ m_buttonHalfSize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnHalfSize ), NULL, this );
+ m_buttonUndoLast->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnUndoLastChange ), NULL, this );
+ m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnCancel_Button ), NULL, this );
+ m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnOK_Button ), NULL, this );
+}
+
+DIALOG_IMAGE_EDITOR_BASE::~DIALOG_IMAGE_EDITOR_BASE()
+{
+ // Disconnect Events
+ m_panelDraw->Disconnect( wxEVT_PAINT, wxPaintEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnRedrawPanel ), NULL, this );
+ m_buttonMirrorX->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnMirrorX_click ), NULL, this );
+ m_buttonMirrorY->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnMirrorY_click ), NULL, this );
+ m_buttonRotate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnRotateClick ), NULL, this );
+ m_buttonGrey->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnGreyScaleConvert ), NULL, this );
+ m_buttonHalfSize->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnHalfSize ), NULL, this );
+ m_buttonUndoLast->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnUndoLastChange ), NULL, this );
+ m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnCancel_Button ), NULL, this );
+ m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMAGE_EDITOR_BASE::OnOK_Button ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_image_editor_base.h b/common/dialogs/dialog_image_editor_base.h
new file mode 100644
index 0000000..a7522a1
--- /dev/null
+++ b/common/dialogs/dialog_image_editor_base.h
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 30 2011)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_IMAGE_EDITOR_BASE_H__
+#define __DIALOG_IMAGE_EDITOR_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/button.h>
+#include <wx/stattext.h>
+#include <wx/textctrl.h>
+#include <wx/sizer.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_IMAGE_EDITOR_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_IMAGE_EDITOR_BASE : public wxDialog
+{
+ private:
+
+ protected:
+ wxPanel* m_panelDraw;
+ wxButton* m_buttonMirrorX;
+ wxButton* m_buttonMirrorY;
+ wxButton* m_buttonRotate;
+ wxButton* m_buttonGrey;
+ wxButton* m_buttonHalfSize;
+ wxButton* m_buttonUndoLast;
+ wxStaticText* m_staticTextScale;
+ wxTextCtrl* m_textCtrlScale;
+ wxStdDialogButtonSizer* m_sdbSizer1;
+ wxButton* m_sdbSizer1OK;
+ wxButton* m_sdbSizer1Cancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnRedrawPanel( wxPaintEvent& event ) { event.Skip(); }
+ virtual void OnMirrorX_click( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMirrorY_click( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRotateClick( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnGreyScaleConvert( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHalfSize( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnUndoLastChange( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel_Button( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOK_Button( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_IMAGE_EDITOR_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Image Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 340,299 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_IMAGE_EDITOR_BASE();
+
+};
+
+#endif //__DIALOG_IMAGE_EDITOR_BASE_H__
diff --git a/common/dialogs/dialog_list_selector_base.cpp b/common/dialogs/dialog_list_selector_base.cpp
new file mode 100644
index 0000000..d38d417
--- /dev/null
+++ b/common/dialogs/dialog_list_selector_base.cpp
@@ -0,0 +1,80 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 5 2014)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_list_selector_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+EDA_LIST_DIALOG_BASE::EDA_LIST_DIALOG_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxSize( 400,400 ), wxDefaultSize );
+
+ wxBoxSizer* bSizerMain;
+ bSizerMain = new wxBoxSizer( wxVERTICAL );
+
+ m_filterLabel = new wxStaticText( this, wxID_ANY, _("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_filterLabel->Wrap( -1 );
+ m_filterLabel->SetToolTip( _("Enter a string to filter items.\nOnly names containing this string will be listed") );
+
+ bSizerMain->Add( m_filterLabel, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_filterBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerMain->Add( m_filterBox, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticText2 = new wxStaticText( this, wxID_ANY, _("Items:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText2->Wrap( -1 );
+ bSizerMain->Add( m_staticText2, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_listBox = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES|wxALWAYS_SHOW_SB|wxVSCROLL );
+ m_listBox->SetMinSize( wxSize( -1,200 ) );
+
+ bSizerMain->Add( m_listBox, 3, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_staticTextMsg = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextMsg->Wrap( -1 );
+ bSizerMain->Add( m_staticTextMsg, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_messages = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
+ m_messages->SetMinSize( wxSize( -1,80 ) );
+
+ bSizerMain->Add( m_messages, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer->AddButton( m_sdbSizerCancel );
+ m_sdbSizer->Realize();
+
+ bSizerMain->Add( m_sdbSizer, 0, wxALL|wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizerMain );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( EDA_LIST_DIALOG_BASE::onClose ) );
+ m_filterBox->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( EDA_LIST_DIALOG_BASE::textChangeInFilterBox ), NULL, this );
+ m_listBox->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( EDA_LIST_DIALOG_BASE::onListItemActivated ), NULL, this );
+ m_listBox->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( EDA_LIST_DIALOG_BASE::onListItemSelected ), NULL, this );
+ m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( EDA_LIST_DIALOG_BASE::onCancelClick ), NULL, this );
+ m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( EDA_LIST_DIALOG_BASE::onOkClick ), NULL, this );
+}
+
+EDA_LIST_DIALOG_BASE::~EDA_LIST_DIALOG_BASE()
+{
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( EDA_LIST_DIALOG_BASE::onClose ) );
+ m_filterBox->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( EDA_LIST_DIALOG_BASE::textChangeInFilterBox ), NULL, this );
+ m_listBox->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( EDA_LIST_DIALOG_BASE::onListItemActivated ), NULL, this );
+ m_listBox->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( EDA_LIST_DIALOG_BASE::onListItemSelected ), NULL, this );
+ m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( EDA_LIST_DIALOG_BASE::onCancelClick ), NULL, this );
+ m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( EDA_LIST_DIALOG_BASE::onOkClick ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_list_selector_base.fbp b/common/dialogs/dialog_list_selector_base.fbp
new file mode 100644
index 0000000..1d1d0e2
--- /dev/null
+++ b/common/dialogs/dialog_list_selector_base.fbp
@@ -0,0 +1,661 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_list_selector_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_list_selector_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center">wxBOTH</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">decl_pure_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size">400,400</property>
+ <property name="name">EDA_LIST_DIALOG_BASE</property>
+ <property name="pos"></property>
+ <property name="size">400,400</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose">onClose</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerMain</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Filter:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_filterLabel</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip">Enter a string to filter items.&#x0A;Only names containing this string will be listed</property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_filterBox</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">textChangeInFilterBox</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Items:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">3</property>
+ <object class="wxListCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">-1,200</property>
+ <property name="moveable">1</property>
+ <property name="name">m_listBox</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxALWAYS_SHOW_SB|wxVSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnListBeginDrag"></event>
+ <event name="OnListBeginLabelEdit"></event>
+ <event name="OnListBeginRDrag"></event>
+ <event name="OnListCacheHint"></event>
+ <event name="OnListColBeginDrag"></event>
+ <event name="OnListColClick"></event>
+ <event name="OnListColDragging"></event>
+ <event name="OnListColEndDrag"></event>
+ <event name="OnListColRightClick"></event>
+ <event name="OnListDeleteAllItems"></event>
+ <event name="OnListDeleteItem"></event>
+ <event name="OnListEndLabelEdit"></event>
+ <event name="OnListInsertItem"></event>
+ <event name="OnListItemActivated">onListItemActivated</event>
+ <event name="OnListItemDeselected"></event>
+ <event name="OnListItemFocused"></event>
+ <event name="OnListItemMiddleClick"></event>
+ <event name="OnListItemRightClick"></event>
+ <event name="OnListItemSelected">onListItemSelected</event>
+ <event name="OnListKeyDown"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Messages:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextMsg</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">-1,80</property>
+ <property name="moveable">1</property>
+ <property name="name">m_messages</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick">onCancelClick</event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick">onOkClick</event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_list_selector_base.h b/common/dialogs/dialog_list_selector_base.h
new file mode 100644
index 0000000..c274c2c
--- /dev/null
+++ b/common/dialogs/dialog_list_selector_base.h
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 5 2014)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_LIST_SELECTOR_BASE_H__
+#define __DIALOG_LIST_SELECTOR_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/textctrl.h>
+#include <wx/listctrl.h>
+#include <wx/sizer.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class EDA_LIST_DIALOG_BASE
+///////////////////////////////////////////////////////////////////////////////
+class EDA_LIST_DIALOG_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxStaticText* m_filterLabel;
+ wxTextCtrl* m_filterBox;
+ wxStaticText* m_staticText2;
+ wxListCtrl* m_listBox;
+ wxStaticText* m_staticTextMsg;
+ wxTextCtrl* m_messages;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+ wxButton* m_sdbSizerCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void onClose( wxCloseEvent& event ) = 0;
+ virtual void textChangeInFilterBox( wxCommandEvent& event ) = 0;
+ virtual void onListItemActivated( wxListEvent& event ) = 0;
+ virtual void onListItemSelected( wxListEvent& event ) = 0;
+ virtual void onCancelClick( wxCommandEvent& event ) = 0;
+ virtual void onOkClick( wxCommandEvent& event ) = 0;
+
+
+ public:
+
+ EDA_LIST_DIALOG_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 400,400 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~EDA_LIST_DIALOG_BASE();
+
+};
+
+#endif //__DIALOG_LIST_SELECTOR_BASE_H__
diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp
new file mode 100644
index 0000000..ef17651
--- /dev/null
+++ b/common/dialogs/dialog_page_settings.cpp
@@ -0,0 +1,841 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2015 Kicad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file dialog_page_settings.cpp
+ */
+
+#include <fctsys.h>
+#include <macros.h> // DIM()
+#include <common.h>
+#include <project.h>
+#include <confirm.h>
+#include <gr_basic.h>
+#include <base_struct.h>
+#include <class_drawpanel.h>
+#include <class_title_block.h>
+#include <draw_frame.h>
+#include <worksheet_shape_builder.h>
+#include <class_base_screen.h>
+#include <wildcards_and_files_ext.h>
+
+#include <wx/valgen.h>
+#include <wx/tokenzr.h>
+
+#ifdef EESCHEMA
+#include <class_sch_screen.h>
+#include <general.h>
+#endif
+
+#include <worksheet.h>
+#include <dialog_page_settings.h>
+
+
+// List of page formats.
+// they are prefixed by "_HKI" (already in use for hotkeys) instead of "_",
+// because we need both the translated and the not translated version.
+// when displayed in dialog we should explicitely call wxGetTranslation()
+// to show the translated version.
+// See hotkeys_basic.h for more info
+#define _HKI( x ) wxT( x )
+static const wxString pageFmts[] =
+{
+ _HKI("A4 210x297mm"),
+ _HKI("A3 297x420mm"),
+ _HKI("A2 420x594mm"),
+ _HKI("A1 594x841mm"),
+ _HKI("A0 841x1189mm"),
+ _HKI("A 8.5x11in"),
+ _HKI("B 11x17in"),
+ _HKI("C 17x22in"),
+ _HKI("D 22x34in"),
+ _HKI("E 34x44in"),
+ _HKI("USLetter 8.5x11in"), // USLetter without space is correct
+ _HKI("USLegal 8.5x14in"), // USLegal without space is correct
+ _HKI("USLedger 11x17in"), // USLedger without space is correct
+ _HKI("User (Custom)"), // size defined by user. The string must contain "Custom"
+ // to be reconized in code
+};
+
+void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event )
+{
+ DIALOG_PAGES_SETTINGS dlg( this );
+ dlg.SetWksFileName( BASE_SCREEN::m_PageLayoutDescrFileName );
+
+ if( dlg.ShowModal() == wxID_OK )
+ {
+ if( m_canvas )
+ m_canvas->Refresh();
+ }
+}
+
+
+DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) :
+ DIALOG_PAGES_SETTINGS_BASE( parent ),
+ m_initialized( false )
+{
+ m_parent = parent;
+ m_screen = m_parent->GetScreen();
+ m_projectPath = Prj().GetProjectPath();
+ m_page_bitmap = NULL;
+ m_tb = m_parent->GetTitleBlock();
+ m_customFmt = false;
+ m_localPrjConfigChanged = false;
+ m_pagelayout = NULL;
+
+ initDialog();
+
+ GetSizer()->SetSizeHints( this );
+ Centre();
+}
+
+
+DIALOG_PAGES_SETTINGS::~DIALOG_PAGES_SETTINGS()
+{
+ delete m_page_bitmap;
+ delete m_pagelayout;
+}
+
+
+void DIALOG_PAGES_SETTINGS::initDialog()
+{
+ wxString msg;
+ double customSizeX;
+ double customSizeY;
+
+ // initalize page format choice box and page format list.
+ // The first shows translated strings, the second contains not translated strings
+ m_paperSizeComboBox->Clear();
+
+ for( unsigned ii = 0; ii < DIM(pageFmts); ii++ )
+ {
+ m_pageFmt.Add( pageFmts[ii] );
+ m_paperSizeComboBox->Append( wxGetTranslation( pageFmts[ii] ) );
+ }
+
+ // initialize the page layout descr filename
+ SetWksFileName( BASE_SCREEN::m_PageLayoutDescrFileName );
+
+
+#ifdef EESCHEMA
+ // Init display value for schematic sub-sheet number
+ wxString format = m_TextSheetCount->GetLabel();
+ msg.Printf( format, m_screen->m_NumberOfScreens );
+ m_TextSheetCount->SetLabel( msg );
+
+ format = m_TextSheetNumber->GetLabel();
+ msg.Printf( format, m_screen->m_ScreenNumber );
+ m_TextSheetNumber->SetLabel( msg );
+#else
+ m_TextSheetCount->Show( false );
+ m_TextSheetNumber->Show( false );
+#endif
+
+ m_pageInfo = m_parent->GetPageSettings();
+ SetCurrentPageSizeSelection( m_pageInfo.GetType() );
+ m_orientationComboBox->SetSelection( m_pageInfo.IsPortrait() );
+
+ // only a click fires the "selection changed" event, so have to fabricate this check
+ wxCommandEvent dummy;
+ OnPaperSizeChoice( dummy );
+
+ if( m_customFmt) // The custom value is defined by the page size
+ {
+ customSizeX = m_pageInfo.GetWidthMils();
+ customSizeY = m_pageInfo.GetHeightMils();
+ }
+ else // The custom value is set to a default value, or the last defined value
+ {
+ customSizeX = m_pageInfo.GetCustomWidthMils();
+ customSizeY = m_pageInfo.GetCustomHeightMils();
+ }
+
+ switch( g_UserUnit )
+ {
+ case MILLIMETRES:
+ customSizeX *= 25.4e-3;
+ customSizeY *= 25.4e-3;
+
+ msg.Printf( wxT( "%.2f" ), customSizeX );
+ m_TextUserSizeX->SetValue( msg );
+
+ msg.Printf( wxT( "%.2f" ), customSizeY );
+ m_TextUserSizeY->SetValue( msg );
+ break;
+
+ default:
+ case INCHES:
+ customSizeX /= 1000.0;
+ customSizeY /= 1000.0;
+
+ msg.Printf( wxT( "%.3f" ), customSizeX );
+ m_TextUserSizeX->SetValue( msg );
+
+ msg.Printf( wxT( "%.3f" ), customSizeY );
+ m_TextUserSizeY->SetValue( msg );
+ break;
+ }
+
+ m_TextRevision->SetValue( m_tb.GetRevision() );
+ m_TextDate->SetValue( m_tb.GetDate() );
+ m_TextTitle->SetValue( m_tb.GetTitle() );
+ m_TextCompany->SetValue( m_tb.GetCompany() );
+ m_TextComment1->SetValue( m_tb.GetComment1() );
+ m_TextComment2->SetValue( m_tb.GetComment2() );
+ m_TextComment3->SetValue( m_tb.GetComment3() );
+ m_TextComment4->SetValue( m_tb.GetComment4() );
+
+#ifndef EESCHEMA
+ // these options have meaning only for Eeschema.
+ // disable them for other apps
+ m_RevisionExport->Show( false );
+ m_DateExport->Show( false );
+ m_TitleExport->Show( false );
+ m_CompanyExport->Show( false );
+ m_Comment1Export->Show( false );
+ m_Comment2Export->Show( false );
+ m_Comment3Export->Show( false );
+ m_Comment4Export->Show( false );
+#endif
+
+ GetPageLayoutInfoFromDialog();
+ UpdatePageLayoutExample();
+
+ // Make the OK button the default.
+ m_sdbSizerOK->SetDefault();
+ m_initialized = true;
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnOkClick( wxCommandEvent& event )
+{
+ if( SavePageSettings() )
+ {
+ m_screen->SetModify();
+ m_parent->GetCanvas()->Refresh();
+
+ if( LocalPrjConfigChanged() )
+ m_parent->SaveProjectSettings( true );
+ }
+
+ event.Skip();
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnPaperSizeChoice( wxCommandEvent& event )
+{
+ int idx = m_paperSizeComboBox->GetSelection();
+
+ if( idx < 0 )
+ idx = 0;
+
+ const wxString paperType = m_pageFmt[idx];
+
+ if( paperType.Contains( PAGE_INFO::Custom ) )
+ {
+ m_orientationComboBox->Enable( false );
+ m_TextUserSizeX->Enable( true );
+ m_TextUserSizeY->Enable( true );
+ m_customFmt = true;
+ }
+ else
+ {
+ m_orientationComboBox->Enable( true );
+
+#if 0
+ // ForcePortrait() does not exist, but could be useful.
+ // so I leave these lines, which could be seen as a todo feature
+ if( paperType.ForcePortrait() )
+ {
+ m_orientationComboBox->SetStringSelection( _( "Portrait" ) );
+ m_orientationComboBox->Enable( false );
+ }
+#endif
+ m_TextUserSizeX->Enable( false );
+ m_TextUserSizeY->Enable( false );
+ m_customFmt = false;
+ }
+
+ GetPageLayoutInfoFromDialog();
+ UpdatePageLayoutExample();
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnUserPageSizeXTextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextUserSizeX->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnUserPageSizeYTextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextUserSizeY->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnPageOrientationChoice( wxCommandEvent& event )
+{
+ if( m_initialized )
+ {
+ GetPageLayoutInfoFromDialog();
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnRevisionTextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextRevision->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetRevision( m_TextRevision->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnDateTextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextDate->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetDate( m_TextDate->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnTitleTextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextTitle->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetTitle( m_TextTitle->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnCompanyTextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextCompany->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetCompany( m_TextCompany->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnComment1TextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextComment1->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetComment1( m_TextComment1->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnComment2TextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextComment2->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetComment2( m_TextComment2->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnComment3TextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextComment3->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetComment3( m_TextComment3->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnComment4TextUpdated( wxCommandEvent& event )
+{
+ if( m_initialized && m_TextComment4->IsModified() )
+ {
+ GetPageLayoutInfoFromDialog();
+ m_tb.SetComment4( m_TextComment4->GetValue() );
+ UpdatePageLayoutExample();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::OnDateApplyClick( wxCommandEvent& event )
+{
+ wxDateTime datetime = m_PickDate->GetValue();
+ wxString date =
+ // We can choose different formats. Only one must be uncommented
+ //
+ // datetime.Format( wxLocale::GetInfo( wxLOCALE_SHORT_DATE_FMT ) );
+ // datetime.Format( wxLocale::GetInfo( wxLOCALE_LONG_DATE_FMT ) );
+ // datetime.Format( wxT("%Y-%b-%d") );
+ datetime.FormatISODate();
+
+ m_TextDate->SetValue( date );
+}
+
+
+bool DIALOG_PAGES_SETTINGS::SavePageSettings()
+{
+ bool retSuccess = false;
+
+ wxString fileName = GetWksFileName();
+
+ if( fileName != BASE_SCREEN::m_PageLayoutDescrFileName )
+ {
+ wxString fullFileName =
+ WORKSHEET_LAYOUT::MakeFullFileName( fileName, m_projectPath );
+
+ if( !fullFileName.IsEmpty() )
+ {
+
+ if( !wxFileExists( fullFileName ) )
+ {
+ wxString msg;
+ msg.Printf( _("Page layout description file <%s> not found. Abort"),
+ GetChars( fullFileName ) );
+ wxMessageBox( msg );
+ return false;
+ }
+ }
+
+ BASE_SCREEN::m_PageLayoutDescrFileName = fileName;
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ pglayout.SetPageLayout( fullFileName );
+ m_localPrjConfigChanged = true;
+ }
+
+ int idx = m_paperSizeComboBox->GetSelection();
+
+ if( idx < 0 )
+ idx = 0;
+
+ const wxString paperType = m_pageFmt[idx];
+
+ if( paperType.Contains( PAGE_INFO::Custom ) )
+ {
+ GetCustomSizeMilsFromDialog();
+
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::Custom );
+
+ if( retSuccess )
+ {
+ if( m_layout_size.x < MIN_PAGE_SIZE || m_layout_size.y < MIN_PAGE_SIZE ||
+ m_layout_size.x > MAX_PAGE_SIZE || m_layout_size.y > MAX_PAGE_SIZE )
+ {
+ wxString msg = wxString::Format( _( "Selected custom paper size\nis out of the permissible \
+limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ),
+ g_UserUnit == INCHES ? MIN_PAGE_SIZE / 1000. : MIN_PAGE_SIZE * 25.4 / 1000,
+ g_UserUnit == INCHES ? MAX_PAGE_SIZE / 1000. : MAX_PAGE_SIZE * 25.4 / 1000,
+ g_UserUnit == INCHES ? _( "inches" ) : _( "mm" ) );
+
+ if( wxMessageBox( msg, _( "Warning!" ), wxYES_NO | wxICON_EXCLAMATION, this ) == wxYES )
+ {
+ return false;
+ }
+
+ m_layout_size.x = Clamp( MIN_PAGE_SIZE, m_layout_size.x, MAX_PAGE_SIZE );
+ m_layout_size.y = Clamp( MIN_PAGE_SIZE, m_layout_size.y, MAX_PAGE_SIZE );
+ }
+
+ PAGE_INFO::SetCustomWidthMils( m_layout_size.x );
+ PAGE_INFO::SetCustomHeightMils( m_layout_size.y );
+
+ m_pageInfo.SetWidthMils( m_layout_size.x );
+ m_pageInfo.SetHeightMils( m_layout_size.y );
+ }
+ }
+ else
+ {
+ // search for longest common string first, e.g. A4 before A
+ if( paperType.Contains( PAGE_INFO::USLetter ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::USLetter );
+ else if( paperType.Contains( PAGE_INFO::USLegal ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::USLegal );
+ else if( paperType.Contains( PAGE_INFO::USLedger ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::USLedger );
+ else if( paperType.Contains( PAGE_INFO::GERBER ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::GERBER );
+ else if( paperType.Contains( PAGE_INFO::A4 ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::A4 );
+ else if( paperType.Contains( PAGE_INFO::A3 ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::A3 );
+ else if( paperType.Contains( PAGE_INFO::A2 ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::A2 );
+ else if( paperType.Contains( PAGE_INFO::A1 ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::A1 );
+ else if( paperType.Contains( PAGE_INFO::A0 ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::A0 );
+ else if( paperType.Contains( PAGE_INFO::A ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::A );
+ else if( paperType.Contains( PAGE_INFO::B ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::B );
+ else if( paperType.Contains( PAGE_INFO::C ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::C );
+ else if( paperType.Contains( PAGE_INFO::D ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::D );
+ else if( paperType.Contains( PAGE_INFO::E ) )
+ retSuccess = m_pageInfo.SetType( PAGE_INFO::E );
+
+ if( retSuccess )
+ {
+ int choice = m_orientationComboBox->GetSelection();
+ m_pageInfo.SetPortrait( choice != 0 );
+ }
+ }
+
+ if( !retSuccess )
+ {
+ wxASSERT_MSG( false, wxT( "the translation for paper size must preserve original spellings" ) );
+ m_pageInfo.SetType( PAGE_INFO::A4 );
+ }
+
+ m_parent->SetPageSettings( m_pageInfo );
+
+ m_tb.SetRevision( m_TextRevision->GetValue() );
+ m_tb.SetDate( m_TextDate->GetValue() );
+ m_tb.SetCompany( m_TextCompany->GetValue() );
+ m_tb.SetTitle( m_TextTitle->GetValue() );
+ m_tb.SetComment1( m_TextComment1->GetValue() );
+ m_tb.SetComment2( m_TextComment2->GetValue() );
+ m_tb.SetComment3( m_TextComment3->GetValue() );
+ m_tb.SetComment4( m_TextComment4->GetValue() );
+
+ m_parent->SetTitleBlock( m_tb );
+
+
+#ifdef EESCHEMA
+ // Exports settings to other sheets if requested:
+ SCH_SCREEN* screen;
+
+ // Build the screen list
+ SCH_SCREENS ScreenList;
+
+ // Update title blocks for all screens
+ for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
+ {
+ if( screen == m_screen )
+ continue;
+
+ TITLE_BLOCK tb2 = screen->GetTitleBlock();
+
+ if( m_RevisionExport->IsChecked() )
+ tb2.SetRevision( m_tb.GetRevision() );
+
+ if( m_DateExport->IsChecked() )
+ tb2.SetDate( m_tb.GetDate() );
+
+ if( m_TitleExport->IsChecked() )
+ tb2.SetTitle( m_tb.GetTitle() );
+
+ if( m_CompanyExport->IsChecked() )
+ tb2.SetCompany( m_tb.GetCompany() );
+
+ if( m_Comment1Export->IsChecked() )
+ tb2.SetComment1( m_tb.GetComment1() );
+
+ if( m_Comment2Export->IsChecked() )
+ tb2.SetComment2( m_tb.GetComment2() );
+
+ if( m_Comment3Export->IsChecked() )
+ tb2.SetComment3( m_tb.GetComment3() );
+
+ if( m_Comment4Export->IsChecked() )
+ tb2.SetComment4( m_tb.GetComment4() );
+
+ screen->SetTitleBlock( tb2 );
+ }
+
+#endif
+
+ return true;
+}
+
+
+void DIALOG_PAGES_SETTINGS::SetCurrentPageSizeSelection( const wxString& aPaperSize )
+{
+ // search all the not translated label list containing our paper type
+ for( unsigned i = 0; i < m_pageFmt.GetCount(); ++i )
+ {
+ // parse each label looking for aPaperSize within it
+ wxStringTokenizer st( m_pageFmt[i] );
+
+ while( st.HasMoreTokens() )
+ {
+ if( st.GetNextToken() == aPaperSize )
+ {
+ m_paperSizeComboBox->SetSelection( i );
+ return;
+ }
+ }
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample()
+{
+ int lyWidth, lyHeight;
+
+ wxSize clamped_layout_size( Clamp( MIN_PAGE_SIZE, m_layout_size.x, MAX_PAGE_SIZE ),
+ Clamp( MIN_PAGE_SIZE, m_layout_size.y, MAX_PAGE_SIZE ) );
+
+ double lyRatio = clamped_layout_size.x < clamped_layout_size.y ?
+ (double) clamped_layout_size.y / clamped_layout_size.x :
+ (double) clamped_layout_size.x / clamped_layout_size.y;
+
+ if( clamped_layout_size.x < clamped_layout_size.y )
+ {
+ lyHeight = MAX_PAGE_EXAMPLE_SIZE;
+ lyWidth = KiROUND( (double) lyHeight / lyRatio );
+ }
+ else
+ {
+ lyWidth = MAX_PAGE_EXAMPLE_SIZE;
+ lyHeight = KiROUND( (double) lyWidth / lyRatio );
+ }
+
+ if( m_page_bitmap )
+ {
+ m_PageLayoutExampleBitmap->SetBitmap( wxNullBitmap );
+ delete m_page_bitmap;
+ }
+
+ m_page_bitmap = new wxBitmap( lyWidth + 1, lyHeight + 1 );
+
+ if( m_page_bitmap->IsOk() )
+ {
+ // Calculate layout preview scale.
+ int appScale = m_screen->MilsToIuScalar();
+
+ double scaleW = (double) lyWidth / clamped_layout_size.x / appScale;
+ double scaleH = (double) lyHeight / clamped_layout_size.y / appScale;
+
+ // Prepare DC.
+ wxSize example_size( lyWidth + 1, lyHeight + 1 );
+ wxMemoryDC memDC;
+ memDC.SelectObject( *m_page_bitmap );
+ memDC.SetClippingRegion( wxPoint( 0, 0 ), example_size );
+ memDC.Clear();
+ memDC.SetUserScale( scaleW, scaleH );
+
+ // Get logical page size and margins.
+ PAGE_INFO pageDUMMY;
+
+ // Get page type
+ int idx = m_paperSizeComboBox->GetSelection();
+
+ if( idx < 0 )
+ idx = 0;
+
+ wxString pageFmtName = m_pageFmt[idx].BeforeFirst( ' ' );
+ bool portrait = clamped_layout_size.x < clamped_layout_size.y;
+ pageDUMMY.SetType( pageFmtName, portrait );
+ if( m_customFmt )
+ {
+ pageDUMMY.SetWidthMils( clamped_layout_size.x );
+ pageDUMMY.SetHeightMils( clamped_layout_size.y );
+ }
+
+ // Draw layout preview.
+ wxString emptyString;
+ GRResetPenAndBrush( &memDC );
+
+ WORKSHEET_LAYOUT::SetAltInstance( m_pagelayout );
+ DrawPageLayout( &memDC, NULL, pageDUMMY,
+ emptyString, emptyString,
+ m_tb, m_screen->m_NumberOfScreens,
+ m_screen->m_ScreenNumber, 1, appScale, DARKGRAY, RED );
+
+ memDC.SelectObject( wxNullBitmap );
+ m_PageLayoutExampleBitmap->SetBitmap( *m_page_bitmap );
+ WORKSHEET_LAYOUT::SetAltInstance( NULL );
+
+ // Refresh the dialog.
+ Layout();
+ Refresh();
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::GetPageLayoutInfoFromDialog()
+{
+ int idx = m_paperSizeComboBox->GetSelection();
+
+ if( idx < 0 )
+ idx = 0;
+
+ const wxString paperType = m_pageFmt[idx];
+
+ // here we assume translators will keep original paper size spellings
+ if( paperType.Contains( PAGE_INFO::Custom ) )
+ {
+ GetCustomSizeMilsFromDialog();
+
+ if( m_layout_size.x && m_layout_size.y )
+ {
+ if( m_layout_size.x < m_layout_size.y )
+ m_orientationComboBox->SetStringSelection( _( "Portrait" ) );
+ else
+ m_orientationComboBox->SetStringSelection( _( "Landscape" ) );
+ }
+ }
+ else
+ {
+ PAGE_INFO pageInfo; // SetType() later to lookup size
+
+ static const wxChar* papers[] = {
+ // longest common string first, since sequential search below
+ PAGE_INFO::A4,
+ PAGE_INFO::A3,
+ PAGE_INFO::A2,
+ PAGE_INFO::A1,
+ PAGE_INFO::A0,
+ PAGE_INFO::A,
+ PAGE_INFO::B,
+ PAGE_INFO::C,
+ PAGE_INFO::D,
+ PAGE_INFO::E,
+ PAGE_INFO::USLetter,
+ PAGE_INFO::USLegal,
+ PAGE_INFO::USLedger,
+ };
+
+ unsigned i;
+
+ for( i=0; i < DIM( papers ); ++i )
+ {
+ if( paperType.Contains( papers[i] ) )
+ {
+ pageInfo.SetType( papers[i] );
+ break;
+ }
+ }
+
+ wxASSERT( i != DIM(papers) ); // dialog UI match the above list?
+
+ m_layout_size = pageInfo.GetSizeMils();
+
+ // swap sizes to match orientation
+ bool isPortrait = (bool) m_orientationComboBox->GetSelection();
+
+ if( ( isPortrait && m_layout_size.x >= m_layout_size.y ) ||
+ ( !isPortrait && m_layout_size.x < m_layout_size.y ) )
+ {
+ m_layout_size.Set( m_layout_size.y, m_layout_size.x );
+ }
+ }
+}
+
+
+void DIALOG_PAGES_SETTINGS::GetCustomSizeMilsFromDialog()
+{
+ double customSizeX;
+ double customSizeY;
+ wxString msg;
+
+ msg = m_TextUserSizeX->GetValue();
+ msg.ToDouble( &customSizeX );
+
+ msg = m_TextUserSizeY->GetValue();
+ msg.ToDouble( &customSizeY );
+
+ switch( g_UserUnit )
+ {
+ case MILLIMETRES:
+ customSizeX *= 1000. / 25.4;
+ customSizeY *= 1000. / 25.4;
+ break;
+
+ default:
+ case INCHES:
+ customSizeX *= 1000.;
+ customSizeY *= 1000.;
+ }
+
+ // Prepare to painless double -> int conversion.
+ customSizeX = Clamp( double( INT_MIN ), customSizeX, double( INT_MAX ) );
+ customSizeY = Clamp( double( INT_MIN ), customSizeY, double( INT_MAX ) );
+ m_layout_size = wxSize( KiROUND( customSizeX ), KiROUND( customSizeY ) );
+}
+
+// Called on .kicad_wks file description selection change
+void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event )
+{
+ // Display a file picker dialog
+ wxFileDialog fileDialog( this, _( "Select Page Layout Descr File" ),
+ m_projectPath, GetWksFileName(),
+ PageLayoutDescrFileWildcard,
+ wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST );
+
+ if( fileDialog.ShowModal() != wxID_OK )
+ return;
+
+ wxString fileName = fileDialog.GetPath();
+
+ // Try to remove the path, if the path is the current working dir,
+ // or the dir of kicad.pro (template), and use a relative path
+ wxString shortFileName = WORKSHEET_LAYOUT::MakeShortFileName( fileName, m_projectPath );
+
+ // For Win/Linux/macOS compatibility, a relative path is a good idea
+ if( shortFileName != GetWksFileName() && shortFileName != fileName )
+ {
+ wxString msg = wxString::Format( _(
+ "The page layout descr filename has changed.\n"
+ "Do you want to use the relative path:\n"
+ "'%s'\n"
+ "instead of\n"
+ "'%s'" ), GetChars( shortFileName ), GetChars( fileName ) );
+
+ if( !IsOK( this, msg ) )
+ shortFileName = fileName;
+ }
+
+ SetWksFileName( shortFileName );
+
+ if( m_pagelayout == NULL )
+ m_pagelayout = new WORKSHEET_LAYOUT;
+
+ m_pagelayout->SetPageLayout( fileName );
+
+ GetPageLayoutInfoFromDialog();
+ UpdatePageLayoutExample();
+}
diff --git a/common/dialogs/dialog_page_settings.h b/common/dialogs/dialog_page_settings.h
new file mode 100644
index 0000000..5127886
--- /dev/null
+++ b/common/dialogs/dialog_page_settings.h
@@ -0,0 +1,120 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Kicad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _DIALOG_PAGES_SETTINGS_H_
+#define _DIALOG_PAGES_SETTINGS_H_
+
+#include <dialog_page_settings_base.h>
+
+#define MAX_PAGE_EXAMPLE_SIZE 200
+
+/*!
+ * DIALOG_PAGES_SETTINGS class declaration
+ */
+
+class DIALOG_PAGES_SETTINGS: public DIALOG_PAGES_SETTINGS_BASE
+{
+private:
+ EDA_DRAW_FRAME* m_parent;
+ BASE_SCREEN* m_screen;
+ wxString m_projectPath; // the curr project path
+ wxArrayString m_pageFmt; /// list of page sizes (not translated)
+ bool m_initialized;
+ bool m_localPrjConfigChanged; /// the page layuout filename was changed
+ wxBitmap* m_page_bitmap; /// Temporary bitmap for the page layout example.
+ wxSize m_layout_size; /// Logical page layout size.
+ PAGE_INFO m_pageInfo; /// Temporary page info.
+ bool m_customFmt; /// true if the page selection is custom
+ TITLE_BLOCK m_tb; /// Temporary title block (basic inscriptions).
+ WORKSHEET_LAYOUT *m_pagelayout; // the alternate and temporary page layout shown by the dialog
+ // when the initial one is replaced by a new one
+
+public:
+ DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent );
+ ~DIALOG_PAGES_SETTINGS();
+
+ const wxString GetWksFileName()
+ {
+ return m_textCtrlFilePicker->GetValue();
+ }
+
+ void SetWksFileName(const wxString& aFilename )
+ {
+ m_textCtrlFilePicker->SetValue( aFilename );
+ }
+
+ void EnableWksFileNamePicker( bool aEnable )
+ {
+ m_textCtrlFilePicker->Enable( aEnable );
+ m_buttonBrowse->Enable( aEnable );
+ }
+
+private:
+ void initDialog(); // Initialisation of member variables
+
+ // event handler for button OK
+ void OnOkClick( wxCommandEvent& event );
+
+ // event handlers for page size choice
+ void OnPaperSizeChoice( wxCommandEvent& event );
+ void OnUserPageSizeXTextUpdated( wxCommandEvent& event );
+ void OnUserPageSizeYTextUpdated( wxCommandEvent& event );
+ void OnPageOrientationChoice( wxCommandEvent& event );
+
+ // event handler for texts in title block
+ void OnRevisionTextUpdated( wxCommandEvent& event );
+ void OnDateTextUpdated( wxCommandEvent& event );
+ void OnTitleTextUpdated( wxCommandEvent& event );
+ void OnCompanyTextUpdated( wxCommandEvent& event );
+ void OnComment1TextUpdated( wxCommandEvent& event );
+ void OnComment2TextUpdated( wxCommandEvent& event );
+ void OnComment3TextUpdated( wxCommandEvent& event );
+ void OnComment4TextUpdated( wxCommandEvent& event );
+
+ // Handle button click for setting the date from the picker
+ void OnDateApplyClick( wxCommandEvent& event );
+
+ // .kicad_wks file description selection
+ void OnWksFileSelection( wxCommandEvent& event );
+
+ // Save in the current title block the new page settings
+ // return true if changes are made, or false if not
+ bool SavePageSettings();
+
+ void SetCurrentPageSizeSelection( const wxString& aPaperSize );
+
+ // Update page layout example
+ void UpdatePageLayoutExample();
+
+ // Get page layout info from selected dialog items
+ void GetPageLayoutInfoFromDialog();
+
+ // Get custom page size in mils from dialog
+ void GetCustomSizeMilsFromDialog();
+
+ /// @return true if the local prj config is chande
+ /// i.e. if the page layout descr file has chnaged
+ bool LocalPrjConfigChanged() { return m_localPrjConfigChanged; }
+};
+
+#endif // _DIALOG_PAGES_SETTINGS_H_
diff --git a/common/dialogs/dialog_page_settings_base.cpp b/common/dialogs/dialog_page_settings_base.cpp
new file mode 100644
index 0000000..197a255
--- /dev/null
+++ b/common/dialogs/dialog_page_settings_base.cpp
@@ -0,0 +1,423 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar 9 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_page_settings_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bMainSizer;
+ bMainSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bUpperSizerH;
+ bUpperSizerH = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bleftSizer;
+ bleftSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextPaper = new wxStaticText( this, wxID_ANY, _("Paper"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPaper->Wrap( -1 );
+ bleftSizer->Add( m_staticTextPaper, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bleftSizer->Add( m_staticline2, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextSize = new wxStaticText( this, wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSize->Wrap( -1 );
+ bleftSizer->Add( m_staticTextSize, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxString m_paperSizeComboBoxChoices[] = { _("dummy text") };
+ int m_paperSizeComboBoxNChoices = sizeof( m_paperSizeComboBoxChoices ) / sizeof( wxString );
+ m_paperSizeComboBox = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_paperSizeComboBoxNChoices, m_paperSizeComboBoxChoices, 0 );
+ m_paperSizeComboBox->SetSelection( 0 );
+ bleftSizer->Add( m_paperSizeComboBox, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextOrient = new wxStaticText( this, wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextOrient->Wrap( -1 );
+ bleftSizer->Add( m_staticTextOrient, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxString m_orientationComboBoxChoices[] = { _("Landscape"), _("Portrait") };
+ int m_orientationComboBoxNChoices = sizeof( m_orientationComboBoxChoices ) / sizeof( wxString );
+ m_orientationComboBox = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_orientationComboBoxNChoices, m_orientationComboBoxChoices, 0 );
+ m_orientationComboBox->SetSelection( 0 );
+ bleftSizer->Add( m_orientationComboBox, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextCustSize = new wxStaticText( this, wxID_ANY, _("Custom Size:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCustSize->Wrap( -1 );
+ bleftSizer->Add( m_staticTextCustSize, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerCustSize;
+ bSizerCustSize = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizercustHeight;
+ bSizercustHeight = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextHeight = new wxStaticText( this, wxID_ANY, _("Height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHeight->Wrap( -1 );
+ bSizercustHeight->Add( m_staticTextHeight, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_TextUserSizeY = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_LEFT );
+ m_TextUserSizeY->SetMaxLength( 6 );
+ m_TextUserSizeY->SetToolTip( _("Custom paper height.") );
+
+ bSizercustHeight->Add( m_TextUserSizeY, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerCustSize->Add( bSizercustHeight, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizercustWidth;
+ bSizercustWidth = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextWidth = new wxStaticText( this, wxID_ANY, _("Width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextWidth->Wrap( -1 );
+ bSizercustWidth->Add( m_staticTextWidth, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_TextUserSizeX = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_LEFT );
+ m_TextUserSizeX->SetMaxLength( 6 );
+ m_TextUserSizeX->SetToolTip( _("Custom paper width.") );
+
+ bSizercustWidth->Add( m_TextUserSizeX, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerCustSize->Add( bSizercustWidth, 1, wxEXPAND, 5 );
+
+
+ bleftSizer->Add( bSizerCustSize, 0, wxEXPAND, 5 );
+
+ m_staticTextPreview = new wxStaticText( this, wxID_ANY, _("Layout Preview"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPreview->Wrap( -1 );
+ bleftSizer->Add( m_staticTextPreview, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_PageLayoutExampleBitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER );
+ m_PageLayoutExampleBitmap->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_PageLayoutExampleBitmap->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bleftSizer->Add( m_PageLayoutExampleBitmap, 1, wxALL|wxEXPAND, 5 );
+
+
+ bUpperSizerH->Add( bleftSizer, 0, wxEXPAND, 5 );
+
+ m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bUpperSizerH->Add( m_staticline1, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizerRight;
+ bSizerRight = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTexttbprm = new wxStaticText( this, wxID_ANY, _("Title Block Parameters"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTexttbprm->Wrap( -1 );
+ bSizerRight->Add( m_staticTexttbprm, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerRight->Add( m_staticline3, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* SheetInfoSizer;
+ SheetInfoSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextSheetCount = new wxStaticText( this, wxID_ANY, _("Number of sheets: %d"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextSheetCount->Wrap( -1 );
+ SheetInfoSizer->Add( m_TextSheetCount, 0, wxALL, 5 );
+
+
+ SheetInfoSizer->Add( 5, 5, 1, wxEXPAND, 5 );
+
+ m_TextSheetNumber = new wxStaticText( this, wxID_ANY, _("Sheet number: %d"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextSheetNumber->Wrap( -1 );
+ SheetInfoSizer->Add( m_TextSheetNumber, 0, wxALL, 5 );
+
+
+ bSizerRight->Add( SheetInfoSizer, 0, 0, 5 );
+
+ wxBoxSizer* bSizerDate;
+ bSizerDate = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDate = new wxStaticText( this, wxID_ANY, _("Issue Date"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDate->Wrap( -1 );
+ bSizerDate->Add( m_staticTextDate, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerissuedate;
+ bSizerissuedate = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextDate = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextDate->SetMaxLength( 0 );
+ m_TextDate->SetMinSize( wxSize( 100,-1 ) );
+
+ bSizerissuedate->Add( m_TextDate, 3, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_ApplyDate = new wxButton( this, wxID_ANY, _("<<<"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ bSizerissuedate->Add( m_ApplyDate, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_PickDate = new wxDatePickerCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT );
+ bSizerissuedate->Add( m_PickDate, 2, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_DateExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerissuedate->Add( m_DateExport, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerDate->Add( bSizerissuedate, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerDate, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerRev;
+ bSizerRev = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextRev = new wxStaticText( this, wxID_ANY, _("Revision"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRev->Wrap( -1 );
+ bSizerRev->Add( m_staticTextRev, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer9;
+ bSizer9 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextRevision = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextRevision->SetMaxLength( 0 );
+ m_TextRevision->SetMinSize( wxSize( 100,-1 ) );
+
+ bSizer9->Add( m_TextRevision, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_RevisionExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer9->Add( m_RevisionExport, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerRev->Add( bSizer9, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerRev, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerTitle;
+ bSizerTitle = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextTitle = new wxStaticText( this, wxID_ANY, _("Title"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTitle->Wrap( -1 );
+ bSizerTitle->Add( m_staticTextTitle, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer12;
+ bSizer12 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextTitle = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextTitle->SetMaxLength( 0 );
+ m_TextTitle->SetMinSize( wxSize( 360,-1 ) );
+
+ bSizer12->Add( m_TextTitle, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_TitleExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer12->Add( m_TitleExport, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerTitle->Add( bSizer12, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerTitle, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerCompany;
+ bSizerCompany = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText13 = new wxStaticText( this, wxID_ANY, _("Company"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText13->Wrap( -1 );
+ bSizerCompany->Add( m_staticText13, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer14;
+ bSizer14 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextCompany = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextCompany->SetMaxLength( 0 );
+ m_TextCompany->SetMinSize( wxSize( 360,-1 ) );
+
+ bSizer14->Add( m_TextCompany, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_CompanyExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer14->Add( m_CompanyExport, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerCompany->Add( bSizer14, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerCompany, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerComment1;
+ bSizerComment1 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextComment1 = new wxStaticText( this, wxID_ANY, _("Comment1"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextComment1->Wrap( -1 );
+ bSizerComment1->Add( m_staticTextComment1, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizercmt1;
+ bSizercmt1 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextComment1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextComment1->SetMaxLength( 0 );
+ m_TextComment1->SetMinSize( wxSize( 360,-1 ) );
+
+ bSizercmt1->Add( m_TextComment1, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_Comment1Export = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizercmt1->Add( m_Comment1Export, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerComment1->Add( bSizercmt1, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerComment1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerComment2;
+ bSizerComment2 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextComment2 = new wxStaticText( this, wxID_ANY, _("Comment2"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextComment2->Wrap( -1 );
+ bSizerComment2->Add( m_staticTextComment2, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizercmt2;
+ bSizercmt2 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextComment2 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextComment2->SetMaxLength( 0 );
+ m_TextComment2->SetMinSize( wxSize( 360,-1 ) );
+
+ bSizercmt2->Add( m_TextComment2, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_Comment2Export = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizercmt2->Add( m_Comment2Export, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerComment2->Add( bSizercmt2, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerComment2, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerComment12;
+ bSizerComment12 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextComment3 = new wxStaticText( this, wxID_ANY, _("Comment3"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextComment3->Wrap( -1 );
+ bSizerComment12->Add( m_staticTextComment3, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizercmt3;
+ bSizercmt3 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextComment3 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextComment3->SetMaxLength( 0 );
+ m_TextComment3->SetMinSize( wxSize( 360,-1 ) );
+
+ bSizercmt3->Add( m_TextComment3, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_Comment3Export = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizercmt3->Add( m_Comment3Export, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerComment12->Add( bSizercmt3, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerComment12, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerComment4;
+ bSizerComment4 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextComment4 = new wxStaticText( this, wxID_ANY, _("Comment4"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextComment4->Wrap( -1 );
+ bSizerComment4->Add( m_staticTextComment4, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizercmt4;
+ bSizercmt4 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_TextComment4 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_TextComment4->SetMaxLength( 0 );
+ m_TextComment4->SetMinSize( wxSize( 360,-1 ) );
+
+ bSizercmt4->Add( m_TextComment4, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+ m_Comment4Export = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizercmt4->Add( m_Comment4Export, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerComment4->Add( bSizercmt4, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerComment4, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerFilename;
+ bSizerFilename = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextfilename = new wxStaticText( this, wxID_ANY, _("Page layout description file"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextfilename->Wrap( -1 );
+ bSizerFilename->Add( m_staticTextfilename, 0, wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerfileSelection;
+ bSizerfileSelection = new wxBoxSizer( wxHORIZONTAL );
+
+ m_textCtrlFilePicker = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerfileSelection->Add( m_textCtrlFilePicker, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonBrowse = new wxButton( this, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ bSizerfileSelection->Add( m_buttonBrowse, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerFilename->Add( bSizerfileSelection, 1, wxEXPAND, 5 );
+
+
+ bSizerRight->Add( bSizerFilename, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+
+ bUpperSizerH->Add( bSizerRight, 1, wxEXPAND, 5 );
+
+
+ bMainSizer->Add( bUpperSizerH, 1, wxEXPAND, 5 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer->AddButton( m_sdbSizerCancel );
+ m_sdbSizer->Realize();
+
+ bMainSizer->Add( m_sdbSizer, 0, wxALIGN_RIGHT|wxALL, 5 );
+
+
+ this->SetSizer( bMainSizer );
+ this->Layout();
+
+ // Connect Events
+ m_paperSizeComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPaperSizeChoice ), NULL, this );
+ m_orientationComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPageOrientationChoice ), NULL, this );
+ m_TextUserSizeY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeYTextUpdated ), NULL, this );
+ m_TextUserSizeX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeXTextUpdated ), NULL, this );
+ m_TextDate->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnDateTextUpdated ), NULL, this );
+ m_ApplyDate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnDateApplyClick ), NULL, this );
+ m_TextRevision->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnRevisionTextUpdated ), NULL, this );
+ m_TextTitle->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTitleTextUpdated ), NULL, this );
+ m_TitleExport->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCheckboxTitleClick ), NULL, this );
+ m_TextCompany->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCompanyTextUpdated ), NULL, this );
+ m_TextComment1->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment1TextUpdated ), NULL, this );
+ m_TextComment2->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment2TextUpdated ), NULL, this );
+ m_TextComment3->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment3TextUpdated ), NULL, this );
+ m_TextComment4->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment4TextUpdated ), NULL, this );
+ m_buttonBrowse->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnWksFileSelection ), NULL, this );
+ m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this );
+}
+
+DIALOG_PAGES_SETTINGS_BASE::~DIALOG_PAGES_SETTINGS_BASE()
+{
+ // Disconnect Events
+ m_paperSizeComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPaperSizeChoice ), NULL, this );
+ m_orientationComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPageOrientationChoice ), NULL, this );
+ m_TextUserSizeY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeYTextUpdated ), NULL, this );
+ m_TextUserSizeX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeXTextUpdated ), NULL, this );
+ m_TextDate->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnDateTextUpdated ), NULL, this );
+ m_ApplyDate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnDateApplyClick ), NULL, this );
+ m_TextRevision->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnRevisionTextUpdated ), NULL, this );
+ m_TextTitle->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTitleTextUpdated ), NULL, this );
+ m_TitleExport->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCheckboxTitleClick ), NULL, this );
+ m_TextCompany->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCompanyTextUpdated ), NULL, this );
+ m_TextComment1->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment1TextUpdated ), NULL, this );
+ m_TextComment2->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment2TextUpdated ), NULL, this );
+ m_TextComment3->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment3TextUpdated ), NULL, this );
+ m_TextComment4->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment4TextUpdated ), NULL, this );
+ m_buttonBrowse->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnWksFileSelection ), NULL, this );
+ m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this );
+
+}
diff --git a/common/dialogs/dialog_page_settings_base.fbp b/common/dialogs/dialog_page_settings_base.fbp
new file mode 100644
index 0000000..a456426
--- /dev/null
+++ b/common/dialogs/dialog_page_settings_base.fbp
@@ -0,0 +1,4454 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_page_settings_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_page_settings_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">DIALOG_PAGES_SETTINGS_BASE</property>
+ <property name="pos"></property>
+ <property name="size">748,470</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title">Page Settings</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size">-1,-1</property>
+ <property name="name">bMainSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bUpperSizerH</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bleftSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Paper</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPaper</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Size:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextSize</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;dummy text&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_paperSizeComboBox</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">0</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice">OnPaperSizeChoice</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Orientation:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextOrient</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Landscape&quot; &quot;Portrait&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_orientationComboBox</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">0</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice">OnPageOrientationChoice</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Custom Size:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextCustSize</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerCustSize</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizercustHeight</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Height:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextHeight</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">6</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextUserSizeY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_LEFT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip">Custom paper height.</property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnUserPageSizeYTextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizercustWidth</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Width:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextWidth</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">6</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextUserSizeX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_LEFT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip">Custom paper width.</property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxTextValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnUserPageSizeXTextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Layout Preview</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPreview</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxStaticBitmap" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg">wxSYS_COLOUR_WINDOW</property>
+ <property name="bitmap">Load From Icon Resource; </property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg">wxSYS_COLOUR_WINDOW</property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_PageLayoutExampleBitmap</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size">-1,-1</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_VERTICAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerRight</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Title Block Parameters</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTexttbprm</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">SheetInfoSizer</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Number of sheets: %d</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextSheetCount</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="spacer" expanded="0">
+ <property name="height">5</property>
+ <property name="permission">protected</property>
+ <property name="width">5</property>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Sheet number: %d</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextSheetNumber</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDate</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Issue Date</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextDate</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerissuedate</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">3</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">100,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextDate</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnDateTextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">&lt;&lt;&lt;</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_ApplyDate</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxBU_EXACTFIT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnDateApplyClick</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">2</property>
+ <object class="wxDatePickerCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_PickDate</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxDP_DEFAULT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnDateChanged"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_DateExport</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerRev</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Revision</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextRev</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer9</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">100,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextRevision</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnRevisionTextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_RevisionExport</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerTitle</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Title</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextTitle</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer12</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">360,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextTitle</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnTitleTextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_TitleExport</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox">OnCheckboxTitleClick</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerCompany</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Company</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText13</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer14</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">360,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextCompany</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnCompanyTextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_CompanyExport</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerComment1</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Comment1</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextComment1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizercmt1</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">360,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextComment1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnComment1TextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_Comment1Export</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerComment2</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Comment2</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextComment2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizercmt2</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">360,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextComment2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnComment2TextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_Comment2Export</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerComment12</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Comment3</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextComment3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizercmt3</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">360,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextComment3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnComment3TextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_Comment3Export</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerComment4</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Comment4</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextComment4</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizercmt4</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">360,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_TextComment4</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText">OnComment4TextUpdated</event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Export to other sheets</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_Comment4Export</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerFilename</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Page layout description file</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextfilename</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerfileSelection</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlFilePicker</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Browse</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonBrowse</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxBU_EXACTFIT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnWksFileSelection</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_RIGHT|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="0">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick"></event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick">OnOkClick</event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/dialog_page_settings_base.h b/common/dialogs/dialog_page_settings_base.h
new file mode 100644
index 0000000..13ccf6f
--- /dev/null
+++ b/common/dialogs/dialog_page_settings_base.h
@@ -0,0 +1,126 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar 9 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_PAGE_SETTINGS_BASE_H__
+#define __DIALOG_PAGE_SETTINGS_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/statline.h>
+#include <wx/choice.h>
+#include <wx/textctrl.h>
+#include <wx/sizer.h>
+#include <wx/valtext.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/statbmp.h>
+#include <wx/button.h>
+#include <wx/datectrl.h>
+#include <wx/dateevt.h>
+#include <wx/checkbox.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_PAGES_SETTINGS_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_PAGES_SETTINGS_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxStaticText* m_staticTextPaper;
+ wxStaticLine* m_staticline2;
+ wxStaticText* m_staticTextSize;
+ wxChoice* m_paperSizeComboBox;
+ wxStaticText* m_staticTextOrient;
+ wxChoice* m_orientationComboBox;
+ wxStaticText* m_staticTextCustSize;
+ wxStaticText* m_staticTextHeight;
+ wxTextCtrl* m_TextUserSizeY;
+ wxStaticText* m_staticTextWidth;
+ wxTextCtrl* m_TextUserSizeX;
+ wxStaticText* m_staticTextPreview;
+ wxStaticBitmap* m_PageLayoutExampleBitmap;
+ wxStaticLine* m_staticline1;
+ wxStaticText* m_staticTexttbprm;
+ wxStaticLine* m_staticline3;
+ wxStaticText* m_TextSheetCount;
+ wxStaticText* m_TextSheetNumber;
+ wxStaticText* m_staticTextDate;
+ wxTextCtrl* m_TextDate;
+ wxButton* m_ApplyDate;
+ wxDatePickerCtrl* m_PickDate;
+ wxCheckBox* m_DateExport;
+ wxStaticText* m_staticTextRev;
+ wxTextCtrl* m_TextRevision;
+ wxCheckBox* m_RevisionExport;
+ wxStaticText* m_staticTextTitle;
+ wxTextCtrl* m_TextTitle;
+ wxCheckBox* m_TitleExport;
+ wxStaticText* m_staticText13;
+ wxTextCtrl* m_TextCompany;
+ wxCheckBox* m_CompanyExport;
+ wxStaticText* m_staticTextComment1;
+ wxTextCtrl* m_TextComment1;
+ wxCheckBox* m_Comment1Export;
+ wxStaticText* m_staticTextComment2;
+ wxTextCtrl* m_TextComment2;
+ wxCheckBox* m_Comment2Export;
+ wxStaticText* m_staticTextComment3;
+ wxTextCtrl* m_TextComment3;
+ wxCheckBox* m_Comment3Export;
+ wxStaticText* m_staticTextComment4;
+ wxTextCtrl* m_TextComment4;
+ wxCheckBox* m_Comment4Export;
+ wxStaticText* m_staticTextfilename;
+ wxTextCtrl* m_textCtrlFilePicker;
+ wxButton* m_buttonBrowse;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+ wxButton* m_sdbSizerCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnPaperSizeChoice( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnPageOrientationChoice( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnUserPageSizeYTextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnUserPageSizeXTextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDateTextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDateApplyClick( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRevisionTextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnTitleTextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCheckboxTitleClick( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCompanyTextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnComment1TextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnComment2TextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnComment3TextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnComment4TextUpdated( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnWksFileSelection( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 748,470 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_PAGES_SETTINGS_BASE();
+
+};
+
+#endif //__DIALOG_PAGE_SETTINGS_BASE_H__
diff --git a/common/dialogs/wx_html_report_panel.cpp b/common/dialogs/wx_html_report_panel.cpp
new file mode 100644
index 0000000..c9dca09
--- /dev/null
+++ b/common/dialogs/wx_html_report_panel.cpp
@@ -0,0 +1,302 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
+ * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "wx_html_report_panel.h"
+
+#include <wildcards_and_files_ext.h>
+#include <boost/foreach.hpp>
+
+WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow* parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style ) :
+ WX_HTML_REPORT_PANEL_BASE( parent, id, pos, size, style ),
+ m_reporter( this ),
+ m_severities( -1 ),
+ m_showAll( true ),
+ m_lazyUpdate( false )
+{
+ syncCheckboxes();
+ m_htmlView->SetPage( addHeader( "" ) );
+}
+
+
+WX_HTML_REPORT_PANEL::~WX_HTML_REPORT_PANEL()
+{
+}
+
+
+void WX_HTML_REPORT_PANEL::MsgPanelSetMinSize( const wxSize& aMinSize )
+{
+ m_htmlView->SetMinSize( aMinSize );
+ GetSizer()->SetSizeHints( this );
+}
+
+
+REPORTER& WX_HTML_REPORT_PANEL::Reporter()
+{
+ return m_reporter;
+}
+
+
+void WX_HTML_REPORT_PANEL::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
+{
+ REPORT_LINE line;
+ line.message = aText;
+ line.severity = aSeverity;
+
+ m_report.push_back( line );
+
+ m_html += generateHtml( line );
+
+ if( !m_lazyUpdate )
+ {
+ m_htmlView->AppendToPage( generateHtml( line ) );
+ scrollToBottom();
+ }
+}
+
+
+void WX_HTML_REPORT_PANEL::SetLazyUpdate( bool aLazyUpdate )
+{
+ m_lazyUpdate = aLazyUpdate;
+}
+
+
+void WX_HTML_REPORT_PANEL::Flush()
+{
+ m_htmlView->SetPage( addHeader( m_html ) );
+ scrollToBottom();
+}
+
+
+void WX_HTML_REPORT_PANEL::scrollToBottom()
+{
+ int x, y, xUnit, yUnit;
+
+ m_htmlView->GetVirtualSize( &x, &y );
+ m_htmlView->GetScrollPixelsPerUnit( &xUnit, &yUnit );
+ m_htmlView->Scroll( 0, y / yUnit );
+}
+
+
+void WX_HTML_REPORT_PANEL::refreshView()
+{
+ wxString html;
+
+ BOOST_FOREACH( REPORT_LINE l, m_report )
+ {
+ html += generateHtml( l );
+ }
+
+ m_htmlView->SetPage( addHeader( html ) );
+ scrollToBottom();
+}
+
+
+wxString WX_HTML_REPORT_PANEL::addHeader( const wxString& aBody )
+{
+ wxColour bgcolor = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW );
+ wxColour fgcolor = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT );
+ wxString s = "<html><body bgcolor=\"" + bgcolor.GetAsString( wxC2S_HTML_SYNTAX ) +
+ "\" text=\"" + fgcolor.GetAsString( wxC2S_HTML_SYNTAX ) + "\">";
+ s += aBody;
+ s += "</body></html>";
+
+ return s;
+}
+
+
+wxString WX_HTML_REPORT_PANEL::generateHtml( const REPORT_LINE& aLine )
+{
+ if( !m_showAll && ! ( m_severities & aLine.severity ) )
+ return wxEmptyString;
+
+ switch( aLine.severity )
+ {
+ case REPORTER::RPT_ERROR:
+ return wxString( "<font color=\"red\" size=2>" ) + _( "<b>Error: </b></font><font size=2>" ) + aLine.message + wxString( "</font><br>" );
+ case REPORTER::RPT_WARNING:
+ return wxString( "<font color=\"orange\" size=2>" ) + _( "<b>Warning: </b></font><font size=2>" ) + aLine.message + wxString( "</font><br>" );
+ case REPORTER::RPT_INFO:
+ return wxString( "<font color=\"gray\" size=2>" ) + _( "<b>Info: </b>" ) + aLine.message + wxString( "</font><br>" );
+ case REPORTER::RPT_ACTION:
+ return wxString( "<font color=\"darkgreen\" size=2>" ) + aLine.message + wxString( "</font><br>" );
+ default:
+ return wxString( "<font size=2>" ) + aLine.message + wxString( "</font><br>" );
+ }
+}
+
+
+wxString WX_HTML_REPORT_PANEL::generatePlainText( const REPORT_LINE& aLine )
+{
+ switch( aLine.severity )
+ {
+ case REPORTER::RPT_ERROR:
+ return _( "Error: " ) + aLine.message + wxT( "\n" );
+ case REPORTER::RPT_WARNING:
+ return _( "Warning: " ) + aLine.message + wxT( "\n" );
+ case REPORTER::RPT_INFO:
+ return _( "Info: " ) + aLine.message + wxT( "\n" );
+ default:
+ return aLine.message + wxT( "\n" );
+ }
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowAll( wxCommandEvent& event )
+{
+ if ( event.IsChecked() )
+ m_showAll = true;
+ else
+ m_showAll = false;
+
+ syncCheckboxes();
+ refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::syncCheckboxes()
+{
+ m_checkBoxShowAll->SetValue( m_showAll );
+ m_checkBoxShowWarnings->Enable( !m_showAll );
+ m_checkBoxShowWarnings->SetValue( m_severities & REPORTER::RPT_WARNING );
+ m_checkBoxShowErrors->Enable( !m_showAll );
+ m_checkBoxShowErrors->SetValue( m_severities & REPORTER::RPT_ERROR );
+ m_checkBoxShowInfos->Enable( !m_showAll );
+ m_checkBoxShowInfos->SetValue( m_severities & REPORTER::RPT_INFO );
+ m_checkBoxShowActions->Enable( !m_showAll );
+ m_checkBoxShowActions->SetValue( m_severities & REPORTER::RPT_ACTION );
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowWarnings( wxCommandEvent& event )
+{
+ if ( event.IsChecked() )
+ m_severities |= REPORTER::RPT_WARNING;
+ else
+ m_severities &= ~REPORTER::RPT_WARNING;
+
+ refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowErrors( wxCommandEvent& event )
+{
+ if ( event.IsChecked() )
+ m_severities |= REPORTER::RPT_ERROR;
+ else
+ m_severities &= ~REPORTER::RPT_ERROR;
+
+ refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowInfos( wxCommandEvent& event )
+{
+ if ( event.IsChecked() )
+ m_severities |= REPORTER::RPT_INFO;
+ else
+ m_severities &= ~REPORTER::RPT_INFO;
+
+ refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowActions( wxCommandEvent& event )
+{
+ if ( event.IsChecked() )
+ m_severities |= REPORTER::RPT_ACTION;
+ else
+ m_severities &= ~REPORTER::RPT_ACTION;
+
+ refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event )
+{
+ wxFileName fn( "./report.txt" );
+
+ wxFileDialog dlg( this, _( "Save report to file" ), fn.GetPath(), fn.GetName(),
+ TextWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
+
+ if( dlg.ShowModal() != wxID_OK )
+ return;
+
+ fn = dlg.GetPath();
+
+ if( fn.GetExt().IsEmpty() )
+ fn.SetExt( wxT( "txt" ) );
+
+ wxFile f( fn.GetFullPath(), wxFile::write );
+
+ if( !f.IsOpened() )
+ {
+ wxString msg;
+
+ msg.Printf( _( "Cannot write report to file '%s'." ),
+ fn.GetFullPath().GetData() );
+ wxMessageBox( msg, _( "File save error" ), wxOK | wxICON_ERROR, this );
+ return;
+ }
+
+ BOOST_FOREACH( REPORT_LINE l, m_report )
+ {
+ f.Write( generatePlainText( l ) );
+ }
+
+ f.Close();
+}
+
+
+void WX_HTML_REPORT_PANEL::Clear()
+{
+ m_html.clear();
+ m_report.clear();
+}
+
+
+void WX_HTML_REPORT_PANEL::SetLabel( const wxString& aLabel )
+{
+ m_box->GetStaticBox()->SetLabel( aLabel );
+}
+
+
+void WX_HTML_REPORT_PANEL::SetVisibleSeverities( int aSeverities )
+{
+ if( aSeverities < 0 )
+ m_showAll = true;
+ else
+ {
+ m_showAll = false;
+ m_severities = aSeverities;
+ }
+
+ syncCheckboxes();
+}
+
+
+int WX_HTML_REPORT_PANEL::GetVisibleSeverities()
+{
+ return m_showAll ? m_severities | 0x80000000 : m_severities & ~0x80000000;
+}
diff --git a/common/dialogs/wx_html_report_panel.h b/common/dialogs/wx_html_report_panel.h
new file mode 100644
index 0000000..03e351f
--- /dev/null
+++ b/common/dialogs/wx_html_report_panel.h
@@ -0,0 +1,122 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
+ * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __WX_HTML_REPORT_PANEL_H__
+#define __WX_HTML_REPORT_PANEL_H__
+
+#include <wx/wx.h>
+#include <reporter.h>
+#include <vector>
+
+#include "wx_html_report_panel_base.h"
+
+
+/**
+ * Class WX_HTML_REPORT_PANEL
+ *
+ * A widget for browsing a rich text error/status report. Used in numerous
+ * dialogs in eeschema and pcbnew. Provides error filtering functionality
+ * and saving report files.
+ *
+ * The messages are reported throuth a REPORTER object
+ */
+class WX_HTML_REPORT_PANEL : public WX_HTML_REPORT_PANEL_BASE
+{
+public:
+ WX_HTML_REPORT_PANEL( wxWindow* parent, wxWindowID id = wxID_ANY,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL );
+ ~WX_HTML_REPORT_PANEL();
+
+ ///> Set the min size of the area which displays html messages:
+ void MsgPanelSetMinSize( const wxSize& aMinSize );
+
+ ///> returns the reporter object that reports to this panel
+ REPORTER& Reporter();
+
+ ///> reports a string directly.
+ void Report( const wxString& aText, REPORTER::SEVERITY aSeverity );
+
+ ///> clears the report panel
+ void Clear();
+
+ ///> sets the frame label
+ void SetLabel( const wxString& aLabel );
+
+ ///> Sets the lasy update. If this mode is on, messages are stored but the display
+ ///> is not updated (Updating display can be very time consumming if there are many messages)
+ ///> A call to Flush() will be needed after build the report
+ void SetLazyUpdate( bool aLazyUpdate );
+
+ ///> Forces updating the HTML page, after the report is built in lazy mode
+ void Flush();
+
+ ///> Set the visible severity filter.
+ ///> if aSeverities < 0 the m_showAll option is set
+ void SetVisibleSeverities( int aSeverities );
+
+ ///> @return the visible severity filter.
+ ///> If the m_showAll option is set, the mask is < 0
+ int GetVisibleSeverities();
+
+private:
+ struct REPORT_LINE
+ {
+ REPORTER::SEVERITY severity;
+ wxString message;
+ };
+
+ typedef std::vector<REPORT_LINE> REPORT_LINES;
+
+ wxString addHeader( const wxString& aBody );
+ wxString generateHtml( const REPORT_LINE& aLine );
+ wxString generatePlainText( const REPORT_LINE& aLine );
+
+ void refreshView();
+ void scrollToBottom();
+ void syncCheckboxes();
+
+ void onCheckBoxShowAll( wxCommandEvent& event );
+ void onCheckBoxShowWarnings( wxCommandEvent& event );
+ void onCheckBoxShowErrors( wxCommandEvent& event );
+ void onCheckBoxShowInfos( wxCommandEvent& event );
+ void onCheckBoxShowActions( wxCommandEvent& event );
+
+ void onBtnSaveToFile( wxCommandEvent& event );
+
+ ///> copy of the report, stored for filtering
+ REPORT_LINES m_report;
+
+ ///> the reporter
+ WX_HTML_PANEL_REPORTER m_reporter;
+
+ ///> message severities to display (mask)
+ int m_severities;
+
+ ///> show all messages flag (overrides m_severities)
+ bool m_showAll;
+
+ wxString m_html;
+
+ bool m_lazyUpdate;
+};
+
+#endif //__WX_HTML_REPORT_PANEL_H__
diff --git a/common/dialogs/wx_html_report_panel_base.cpp b/common/dialogs/wx_html_report_panel_base.cpp
new file mode 100644
index 0000000..bd33c8c
--- /dev/null
+++ b/common/dialogs/wx_html_report_panel_base.cpp
@@ -0,0 +1,94 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "wx_html_report_panel_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+WX_HTML_REPORT_PANEL_BASE::WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+ m_box = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxVERTICAL );
+
+ wxFlexGridSizer* fgSizer4;
+ fgSizer4 = new wxFlexGridSizer( 2, 1, 0, 0 );
+ fgSizer4->AddGrowableCol( 0 );
+ fgSizer4->AddGrowableRow( 0 );
+ fgSizer4->SetFlexibleDirection( wxBOTH );
+ fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_htmlView = new wxHtmlWindow( m_box->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO );
+ m_htmlView->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ fgSizer4->Add( m_htmlView, 1, wxEXPAND, 5 );
+
+ wxFlexGridSizer* fgSizer3;
+ fgSizer3 = new wxFlexGridSizer( 1, 7, 0, 0 );
+ fgSizer3->AddGrowableCol( 6 );
+ fgSizer3->SetFlexibleDirection( wxBOTH );
+ fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticText3 = new wxStaticText( m_box->GetStaticBox(), wxID_ANY, _("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText3->Wrap( -1 );
+ fgSizer3->Add( m_staticText3, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
+
+ m_checkBoxShowAll = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("All"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxShowAll->SetValue(true);
+ fgSizer3->Add( m_checkBoxShowAll, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_checkBoxShowWarnings = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Warnings"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxShowWarnings->Enable( false );
+
+ fgSizer3->Add( m_checkBoxShowWarnings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_checkBoxShowErrors = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Errors"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxShowErrors->Enable( false );
+
+ fgSizer3->Add( m_checkBoxShowErrors, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_checkBoxShowInfos = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Infos"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxShowInfos->Enable( false );
+
+ fgSizer3->Add( m_checkBoxShowInfos, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_checkBoxShowActions = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Actions"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxShowActions->Enable( false );
+
+ fgSizer3->Add( m_checkBoxShowActions, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_btnSaveReportToFile = new wxButton( m_box->GetStaticBox(), wxID_ANY, _("Save report to file..."), wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizer3->Add( m_btnSaveReportToFile, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxLEFT, 5 );
+
+
+ fgSizer4->Add( fgSizer3, 1, wxEXPAND, 5 );
+
+
+ m_box->Add( fgSizer4, 1, wxEXPAND|wxALL, 5 );
+
+
+ this->SetSizer( m_box );
+ this->Layout();
+
+ // Connect Events
+ m_checkBoxShowAll->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowAll ), NULL, this );
+ m_checkBoxShowWarnings->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this );
+ m_checkBoxShowErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowErrors ), NULL, this );
+ m_checkBoxShowInfos->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowInfos ), NULL, this );
+ m_checkBoxShowActions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowActions ), NULL, this );
+ m_btnSaveReportToFile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onBtnSaveToFile ), NULL, this );
+}
+
+WX_HTML_REPORT_PANEL_BASE::~WX_HTML_REPORT_PANEL_BASE()
+{
+ // Disconnect Events
+ m_checkBoxShowAll->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowAll ), NULL, this );
+ m_checkBoxShowWarnings->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this );
+ m_checkBoxShowErrors->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowErrors ), NULL, this );
+ m_checkBoxShowInfos->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowInfos ), NULL, this );
+ m_checkBoxShowActions->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowActions ), NULL, this );
+ m_btnSaveReportToFile->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onBtnSaveToFile ), NULL, this );
+
+}
diff --git a/common/dialogs/wx_html_report_panel_base.fbp b/common/dialogs/wx_html_report_panel_base.fbp
new file mode 100644
index 0000000..8b635e0
--- /dev/null
+++ b/common/dialogs/wx_html_report_panel_base.fbp
@@ -0,0 +1,823 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">wx_html_report_panel_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">WX_HTML_REPORT_PANEL_BASE</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Panel" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">WX_HTML_REPORT_PANEL_BASE</property>
+ <property name="pos"></property>
+ <property name="size">500,300</property>
+ <property name="subclass"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxTAB_TRAVERSAL</property>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxStaticBoxSizer" expanded="1">
+ <property name="id">wxID_ANY</property>
+ <property name="label">Messages:</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_box</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">protected</property>
+ <event name="OnUpdateUI"></event>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxALL</property>
+ <property name="proportion">1</property>
+ <object class="wxFlexGridSizer" expanded="0">
+ <property name="cols">1</property>
+ <property name="flexible_direction">wxBOTH</property>
+ <property name="growablecols">0</property>
+ <property name="growablerows">0</property>
+ <property name="hgap">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">fgSizer4</property>
+ <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+ <property name="permission">none</property>
+ <property name="rows">2</property>
+ <property name="vgap">0</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxHtmlWindow" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font">,90,90,10,70,0</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_htmlView</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxHW_SCROLLBAR_AUTO</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHtmlCellClicked"></event>
+ <event name="OnHtmlCellHover"></event>
+ <event name="OnHtmlLinkClicked"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxFlexGridSizer" expanded="0">
+ <property name="cols">7</property>
+ <property name="flexible_direction">wxBOTH</property>
+ <property name="growablecols">6</property>
+ <property name="growablerows"></property>
+ <property name="hgap">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">fgSizer3</property>
+ <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+ <property name="permission">none</property>
+ <property name="rows">1</property>
+ <property name="vgap">0</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Filter:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">1</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">All</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxShowAll</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox">onCheckBoxShowAll</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">0</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Warnings</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxShowWarnings</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox">onCheckBoxShowWarnings</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">0</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Errors</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxShowErrors</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox">onCheckBoxShowErrors</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">0</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Infos</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxShowInfos</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox">onCheckBoxShowInfos</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">0</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Actions</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxShowActions</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox">onCheckBoxShowActions</event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Save report to file...</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size">-1,-1</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_btnSaveReportToFile</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">onBtnSaveToFile</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/wx_html_report_panel_base.h b/common/dialogs/wx_html_report_panel_base.h
new file mode 100644
index 0000000..b65449e
--- /dev/null
+++ b/common/dialogs/wx_html_report_panel_base.h
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __WX_HTML_REPORT_PANEL_BASE_H__
+#define __WX_HTML_REPORT_PANEL_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+#include <wx/html/htmlwin.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/checkbox.h>
+#include <wx/button.h>
+#include <wx/sizer.h>
+#include <wx/statbox.h>
+#include <wx/panel.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class WX_HTML_REPORT_PANEL_BASE
+///////////////////////////////////////////////////////////////////////////////
+class WX_HTML_REPORT_PANEL_BASE : public wxPanel
+{
+ private:
+
+ protected:
+ wxStaticBoxSizer* m_box;
+ wxHtmlWindow* m_htmlView;
+ wxStaticText* m_staticText3;
+ wxCheckBox* m_checkBoxShowAll;
+ wxCheckBox* m_checkBoxShowWarnings;
+ wxCheckBox* m_checkBoxShowErrors;
+ wxCheckBox* m_checkBoxShowInfos;
+ wxCheckBox* m_checkBoxShowActions;
+ wxButton* m_btnSaveReportToFile;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void onCheckBoxShowAll( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onCheckBoxShowWarnings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onCheckBoxShowErrors( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onCheckBoxShowInfos( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onCheckBoxShowActions( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onBtnSaveToFile( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL );
+ ~WX_HTML_REPORT_PANEL_BASE();
+
+};
+
+#endif //__WX_HTML_REPORT_PANEL_BASE_H__
diff --git a/common/displlst.cpp b/common/displlst.cpp
new file mode 100644
index 0000000..b8961f6
--- /dev/null
+++ b/common/displlst.cpp
@@ -0,0 +1,252 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file displlst.cpp
+ */
+
+#include <fctsys.h>
+#include <macros.h>
+#include <draw_frame.h>
+#include <kicad_string.h>
+#include <dialog_helpers.h>
+
+EDA_LIST_DIALOG::EDA_LIST_DIALOG( EDA_DRAW_FRAME* aParent, const wxString& aTitle,
+ const wxArrayString& aItemHeaders,
+ const std::vector<wxArrayString>& aItemList,
+ const wxString& aSelection,
+ void( *aCallBackFunction )( wxString&, void* ),
+ void* aCallBackFunctionData,
+ bool aSortList ) :
+ EDA_LIST_DIALOG_BASE( aParent, wxID_ANY, aTitle )
+{
+ m_sortList = aSortList;
+ m_cb_func = aCallBackFunction;
+ m_cb_data = aCallBackFunctionData;
+ m_itemsListCp = &aItemList;
+
+ initDialog( aItemHeaders, aSelection );
+
+ // DIALOG_SHIM needs a unique hash_key because classname is not sufficient
+ // because so many dialogs share this same class, with different numbers of
+ // columns, different column names, and column widths.
+ m_hash_key = TO_UTF8( aTitle );
+
+ m_filterBox->SetFocus();
+
+ // this line fixes an issue on Linux Ubuntu using Unity (dialog not shown),
+ // and works fine on all systems
+ GetSizer()->Fit( this );
+
+ Centre();
+}
+
+
+void EDA_LIST_DIALOG::initDialog( const wxArrayString& aItemHeaders,
+ const wxString& aSelection)
+{
+
+ for( unsigned i = 0; i < aItemHeaders.Count(); i++ )
+ {
+ wxListItem column;
+
+ column.SetId( i );
+ column.SetText( aItemHeaders.Item( i ) );
+
+ m_listBox->InsertColumn( i, column );
+ }
+
+ InsertItems( *m_itemsListCp, 0 );
+
+ if( m_cb_func == NULL )
+ {
+ m_messages->Show( false );
+ m_staticTextMsg->Show( false );
+ }
+
+ for( unsigned col = 0; col < aItemHeaders.Count(); ++col )
+ {
+ m_listBox->SetColumnWidth( col, wxLIST_AUTOSIZE );
+ int columnwidth = m_listBox->GetColumnWidth( col );
+ m_listBox->SetColumnWidth( col, wxLIST_AUTOSIZE_USEHEADER );
+ int headerwidth = m_listBox->GetColumnWidth( col );
+ m_listBox->SetColumnWidth( col, std::max( columnwidth, headerwidth ) );
+ }
+
+ if( !!aSelection )
+ {
+ for( unsigned row = 0; row < m_itemsListCp->size(); ++row )
+ {
+ if( (*m_itemsListCp)[row][0] == aSelection )
+ {
+ m_listBox->SetItemState( row, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED );
+ m_listBox->EnsureVisible( row );
+ break;
+ }
+ }
+ }
+}
+
+
+void EDA_LIST_DIALOG::textChangeInFilterBox( wxCommandEvent& event )
+{
+ wxString filter;
+ wxString itemName;
+
+ filter = wxT( "*" ) + m_filterBox->GetLineText( 0 ).MakeLower() + wxT( "*" );
+
+ m_listBox->DeleteAllItems();
+
+ for( unsigned i = 0; i < m_itemsListCp->size(); i++ )
+ {
+ itemName = (*m_itemsListCp)[i].Item( 0 );
+
+ if( itemName.MakeLower().Matches( filter ) )
+ {
+ Append( (*m_itemsListCp)[i] );
+ }
+ }
+
+ if( m_sortList )
+ sortList();
+}
+
+
+wxString EDA_LIST_DIALOG::GetTextSelection( int aColumn )
+{
+ wxCHECK_MSG( unsigned( aColumn ) < unsigned( m_listBox->GetColumnCount() ), wxEmptyString,
+ wxT( "Invalid list control column." ) );
+
+ long item = m_listBox->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
+
+ if( item >= 0 ) // if something is selected.
+ {
+ wxListItem info;
+
+ info.m_mask = wxLIST_MASK_TEXT;
+ info.m_itemId = item;
+ info.m_col = aColumn;
+
+ if( m_listBox->GetItem( info ) )
+ return info.m_text;
+ }
+
+ return wxEmptyString;
+}
+
+
+void EDA_LIST_DIALOG::Append( const wxArrayString& itemList )
+{
+ long itemIndex = m_listBox->InsertItem( m_listBox->GetItemCount(), itemList[0] );
+
+ m_listBox->SetItemData( itemIndex, (long) &(itemList[0]) );
+
+ // Adding the next columns content
+ for( unsigned i = 1; i < itemList.size(); i++ )
+ {
+ m_listBox->SetItem( itemIndex, i, itemList[i] );
+ }
+}
+
+
+void EDA_LIST_DIALOG::InsertItems( const std::vector< wxArrayString >& itemList, int position )
+{
+ for( unsigned row = 0; row < itemList.size(); row++ )
+ {
+ wxASSERT( (int) itemList[row].GetCount() == m_listBox->GetColumnCount() );
+
+ long itemIndex = 0;
+ for( unsigned col = 0; col < itemList[row].GetCount(); col++ )
+ {
+
+ if( col == 0 )
+ {
+ itemIndex = m_listBox->InsertItem( row+position, itemList[row].Item( col ) );
+ m_listBox->SetItemData( itemIndex, (long) &itemList[row].Item( col ) );
+ }
+ else
+ {
+ m_listBox->SetItem( itemIndex, col, itemList[row].Item( col ) );
+ }
+ }
+ }
+
+ if( m_sortList )
+ sortList();
+}
+
+
+void EDA_LIST_DIALOG::onCancelClick( wxCommandEvent& event )
+{
+ EndModal( wxID_CANCEL );
+}
+
+
+void EDA_LIST_DIALOG::onListItemSelected( wxListEvent& event )
+{
+ if( m_cb_func )
+ {
+ m_messages->Clear();
+ wxString text = GetTextSelection();
+ m_cb_func( text, m_cb_data );
+ m_messages->WriteText( text );
+ }
+}
+
+
+void EDA_LIST_DIALOG::onListItemActivated( wxListEvent& event )
+{
+ EndModal( wxID_OK );
+}
+
+
+void EDA_LIST_DIALOG::onOkClick( wxCommandEvent& event )
+{
+ EndModal( wxID_OK );
+}
+
+
+void EDA_LIST_DIALOG::onClose( wxCloseEvent& event )
+{
+ EndModal( wxID_CANCEL );
+}
+
+
+/* Sort alphabetically, case insensitive.
+ */
+static int wxCALLBACK myCompareFunction( wxIntPtr aItem1, wxIntPtr aItem2,
+ wxIntPtr WXUNUSED( aSortData ) )
+{
+ wxString* component1Name = (wxString*) aItem1;
+ wxString* component2Name = (wxString*) aItem2;
+
+ return StrNumCmp( *component1Name, *component2Name, INT_MAX, true );
+}
+
+
+void EDA_LIST_DIALOG::sortList()
+{
+ m_listBox->SortItems( myCompareFunction, 0 );
+}
diff --git a/common/dlist.cpp b/common/dlist.cpp
new file mode 100644
index 0000000..512fd1c
--- /dev/null
+++ b/common/dlist.cpp
@@ -0,0 +1,228 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2008 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2008 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <dlist.h>
+#include <base_struct.h>
+
+
+/* Implement the class DHEAD from dlist.h */
+
+
+DHEAD::~DHEAD()
+{
+ if( meOwner )
+ DeleteAll();
+}
+
+
+void DHEAD::DeleteAll()
+{
+ EDA_ITEM* next;
+ EDA_ITEM* item = first;
+
+ while( item )
+ {
+ next = item->Next();
+ delete item; // virtual destructor, class specific
+ item = next;
+ }
+
+ first = 0;
+ last = 0;
+ count = 0;
+}
+
+
+void DHEAD::append( EDA_ITEM* aNewElement )
+{
+ wxASSERT( aNewElement != NULL );
+
+ if( first ) // list is not empty, first is not touched
+ {
+ wxASSERT( last != NULL );
+
+ aNewElement->SetNext( 0 );
+ aNewElement->SetBack( last );
+
+ last->SetNext( aNewElement );
+ last = aNewElement;
+ }
+ else // list is empty, first and last are changed
+ {
+ aNewElement->SetNext( 0 );
+ aNewElement->SetBack( 0 );
+
+ first = aNewElement;
+ last = aNewElement;
+ }
+
+ aNewElement->SetList( this );
+
+ ++count;
+}
+
+
+void DHEAD::append( DHEAD& aList )
+{
+ if( aList.first )
+ {
+ // Change the item's list to me.
+ for( EDA_ITEM* item = aList.first; item; item = item->Next() )
+ item->SetList( this );
+
+ if( first ) // this list is not empty, set last item's next to the first item in aList
+ {
+ wxCHECK_RET( last != NULL, wxT( "Last list element not set." ) );
+
+ last->SetNext( aList.first );
+ aList.first->SetBack( last );
+ last = aList.last;
+ }
+ else // this list is empty, first and last are same as aList
+ {
+ first = aList.first;
+ last = aList.last;
+ }
+
+ count += aList.count;
+
+ aList.count = 0;
+ aList.first = NULL;
+ aList.last = NULL;
+ }
+}
+
+
+void DHEAD::insert( EDA_ITEM* aNewElement, EDA_ITEM* aAfterMe )
+{
+ wxASSERT( aNewElement != NULL );
+
+ if( !aAfterMe )
+ append( aNewElement );
+ else
+ {
+ wxASSERT( aAfterMe->GetList() == this );
+
+ // the list cannot be empty if aAfterMe is supposedly on the list
+ wxASSERT( first && last );
+
+ if( first == aAfterMe )
+ {
+ aAfterMe->SetBack( aNewElement );
+
+ aNewElement->SetBack( 0 ); // first in list does not point back
+ aNewElement->SetNext( aAfterMe );
+
+ first = aNewElement;
+ }
+ else
+ {
+ EDA_ITEM* oldBack = aAfterMe->Back();
+
+ aAfterMe->SetBack( aNewElement );
+
+ aNewElement->SetBack( oldBack );
+ aNewElement->SetNext( aAfterMe );
+
+ oldBack->SetNext( aNewElement );
+ }
+
+ aNewElement->SetList( this );
+
+ ++count;
+ }
+}
+
+
+void DHEAD::remove( EDA_ITEM* aElement )
+{
+ wxASSERT( aElement );
+ wxASSERT( aElement->GetList() == this );
+
+ if( aElement->Next() )
+ {
+ aElement->Next()->SetBack( aElement->Back() );
+ }
+ else // element being removed is last
+ {
+ wxASSERT( last == aElement );
+ last = aElement->Back();
+ }
+
+ if( aElement->Back() )
+ {
+ aElement->Back()->SetNext( aElement->Next() );
+ }
+ else // element being removed is first
+ {
+ wxASSERT( first == aElement );
+ first = aElement->Next();
+ }
+
+ aElement->SetBack( 0 );
+ aElement->SetNext( 0 );
+ aElement->SetList( 0 );
+
+ --count;
+}
+
+#if defined(DEBUG)
+
+void DHEAD::VerifyListIntegrity()
+{
+ EDA_ITEM* item;
+ unsigned i = 0;
+
+ for( item = first; item && i<count; ++i, item = item->Next() )
+ {
+ if( i < count-1 )
+ {
+ wxASSERT( item->Next() );
+ }
+
+ wxASSERT( item->GetList() == this );
+ }
+
+ wxASSERT( item == NULL );
+ wxASSERT( i == count );
+
+ i = 0;
+ for( item = last; item && i<count; ++i, item = item->Back() )
+ {
+ if( i < count-1 )
+ {
+ wxASSERT( item->Back() );
+ }
+ }
+
+ wxASSERT( item == NULL );
+ wxASSERT( i == count );
+
+ // printf("list %p has %d items.\n", this, count );
+}
+
+#endif
+
diff --git a/common/draw_frame.cpp b/common/draw_frame.cpp
new file mode 100644
index 0000000..2a81a17
--- /dev/null
+++ b/common/draw_frame.cpp
@@ -0,0 +1,1306 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2015 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr
+ * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2004-2016 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file draw_frame.cpp
+ */
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <kiface_i.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <bitmaps.h>
+#include <macros.h>
+#include <id.h>
+#include <class_drawpanel.h>
+#include <class_draw_panel_gal.h>
+#include <class_base_screen.h>
+#include <msgpanel.h>
+#include <draw_frame.h>
+#include <confirm.h>
+#include <kicad_device_context.h>
+#include <dialog_helpers.h>
+#include <base_units.h>
+#include <math/box2.h>
+
+#include <wx/fontdlg.h>
+#include <wx/snglinst.h>
+#include <view/view.h>
+#include <view/view_controls.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <tool/tool_manager.h>
+#include <tool/tool_dispatcher.h>
+
+/**
+ * Definition for enabling and disabling scroll bar setting trace output. See the
+ * wxWidgets documentation on useing the WXTRACE environment variable.
+ */
+static const wxString traceScrollSettings( wxT( "KicadScrollSettings" ) );
+
+
+// Configuration entry names.
+static const wxString CursorShapeEntryKeyword( wxT( "CursorShape" ) );
+static const wxString ShowGridEntryKeyword( wxT( "ShowGrid" ) );
+static const wxString GridColorEntryKeyword( wxT( "GridColor" ) );
+static const wxString LastGridSizeIdKeyword( wxT( "_LastGridSize" ) );
+static const wxString MaxUndoItemsEntry(wxT( "MaxUndoItems" ) );
+
+
+BEGIN_EVENT_TABLE( EDA_DRAW_FRAME, KIWAY_PLAYER )
+ EVT_MOUSEWHEEL( EDA_DRAW_FRAME::OnMouseEvent )
+ EVT_MENU_OPEN( EDA_DRAW_FRAME::OnMenuOpen )
+ EVT_ACTIVATE( EDA_DRAW_FRAME::OnActivate )
+ EVT_MENU_RANGE( ID_ZOOM_BEGIN, ID_ZOOM_END, EDA_DRAW_FRAME::OnZoom )
+
+ EVT_MENU_RANGE( ID_POPUP_ZOOM_START_RANGE, ID_POPUP_ZOOM_END_RANGE,
+ EDA_DRAW_FRAME::OnZoom )
+
+ EVT_MENU_RANGE( ID_POPUP_GRID_LEVEL_1000, ID_POPUP_GRID_USER,
+ EDA_DRAW_FRAME::OnSelectGrid )
+
+ EVT_TOOL( ID_TB_OPTIONS_SHOW_GRID, EDA_DRAW_FRAME::OnToggleGridState )
+ EVT_TOOL_RANGE( ID_TB_OPTIONS_SELECT_UNIT_MM, ID_TB_OPTIONS_SELECT_UNIT_INCH,
+ EDA_DRAW_FRAME::OnSelectUnits )
+ EVT_TOOL( ID_TB_OPTIONS_SELECT_CURSOR, EDA_DRAW_FRAME::OnToggleCrossHairStyle )
+
+ EVT_UPDATE_UI( wxID_UNDO, EDA_DRAW_FRAME::OnUpdateUndo )
+ EVT_UPDATE_UI( wxID_REDO, EDA_DRAW_FRAME::OnUpdateRedo )
+ EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_GRID, EDA_DRAW_FRAME::OnUpdateGrid )
+ EVT_UPDATE_UI( ID_TB_OPTIONS_SELECT_CURSOR, EDA_DRAW_FRAME::OnUpdateCrossHairStyle )
+ EVT_UPDATE_UI_RANGE( ID_TB_OPTIONS_SELECT_UNIT_MM, ID_TB_OPTIONS_SELECT_UNIT_INCH,
+ EDA_DRAW_FRAME::OnUpdateUnits )
+END_EVENT_TABLE()
+
+
+EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent,
+ FRAME_T aFrameType,
+ const wxString& aTitle,
+ const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString & aFrameName ) :
+ KIWAY_PLAYER( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName )
+{
+ m_file_checker = NULL;
+
+ m_drawToolBar = NULL;
+ m_optionsToolBar = NULL;
+ m_gridSelectBox = NULL;
+ m_zoomSelectBox = NULL;
+ m_hotkeysDescrList = NULL;
+
+ m_canvas = NULL;
+ m_galCanvas = NULL;
+ m_galCanvasActive = false;
+ m_toolManager = NULL;
+ m_toolDispatcher = NULL;
+ m_messagePanel = NULL;
+ m_currentScreen = NULL;
+ m_toolId = ID_NO_TOOL_SELECTED;
+ m_lastDrawToolId = ID_NO_TOOL_SELECTED;
+ m_showAxis = false; // true to draw axis.
+ m_showBorderAndTitleBlock = false; // true to display reference sheet.
+ m_showGridAxis = false; // true to draw the grid axis
+ m_showOriginAxis = false; // true to draw the grid origin
+ m_cursorShape = 0;
+ m_LastGridSizeId = 0;
+ m_drawGrid = true; // hide/Show grid. default = show
+ m_gridColor = DARKGRAY; // Default grid color
+ m_showPageLimits = false;
+ m_drawBgColor = BLACK; // the background color of the draw canvas:
+ // BLACK for Pcbnew, BLACK or WHITE for eeschema
+ m_snapToGrid = true;
+ m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
+ m_movingCursorWithKeyboard = false;
+ m_zoomLevelCoeff = 1.0;
+
+ m_auimgr.SetFlags(wxAUI_MGR_DEFAULT|wxAUI_MGR_LIVE_RESIZE);
+
+ CreateStatusBar( 6 );
+
+ // set the size of the status bar subwindows:
+
+ wxWindow* stsbar = GetStatusBar();
+
+ int dims[] = {
+
+ // remainder of status bar on far left is set to a default or whatever is left over.
+ -1,
+
+ // When using GetTextSize() remember the width of character '1' is not the same
+ // as the width of '0' unless the font is fixed width, and it usually won't be.
+
+ // zoom:
+ GetTextSize( wxT( "Z 762000" ), stsbar ).x + 10,
+
+ // cursor coords
+ GetTextSize( wxT( "X 0234.567890 Y 0234.567890" ), stsbar ).x + 10,
+
+ // delta distances
+ GetTextSize( wxT( "dx 0234.567890 dx 0234.567890 d 0234.567890" ), stsbar ).x + 10,
+
+ // units display, Inches is bigger than mm
+ GetTextSize( _( "Inches" ), stsbar ).x + 10,
+
+ // Size for the panel used as "Current tool in play": will take longest string from
+ // void PCB_EDIT_FRAME::OnSelectTool( wxCommandEvent& aEvent ) in pcbnew/edit.cpp
+ GetTextSize( wxT( "Add layer alignment target" ), stsbar ).x + 10,
+ };
+
+ SetStatusWidths( DIM( dims ), dims );
+
+ // Create child subwindows.
+ GetClientSize( &m_FrameSize.x, &m_FrameSize.y );
+ m_FramePos.x = m_FramePos.y = 0;
+ m_FrameSize.y -= m_MsgFrameHeight;
+
+ m_canvas = new EDA_DRAW_PANEL( this, -1, wxPoint( 0, 0 ), m_FrameSize );
+ m_messagePanel = new EDA_MSG_PANEL( this, -1, wxPoint( 0, m_FrameSize.y ),
+ wxSize( m_FrameSize.x, m_MsgFrameHeight ) );
+
+ m_messagePanel->SetBackgroundColour( MakeColour( LIGHTGRAY ) );
+}
+
+
+EDA_DRAW_FRAME::~EDA_DRAW_FRAME()
+{
+ delete m_toolManager;
+ delete m_toolDispatcher;
+ delete m_galCanvas;
+
+ delete m_currentScreen;
+ m_currentScreen = NULL;
+
+ m_auimgr.UnInit();
+
+ ReleaseFile();
+}
+
+
+void EDA_DRAW_FRAME::ReleaseFile()
+{
+ delete m_file_checker;
+ m_file_checker = 0;
+}
+
+
+bool EDA_DRAW_FRAME::LockFile( const wxString& aFileName )
+{
+ delete m_file_checker;
+
+ m_file_checker = ::LockFile( aFileName );
+
+ return bool( m_file_checker );
+}
+
+
+void EDA_DRAW_FRAME::unitsChangeRefresh()
+{
+ UpdateStatusBar();
+ UpdateMsgPanel();
+}
+
+
+void EDA_DRAW_FRAME::EraseMsgBox()
+{
+ if( m_messagePanel )
+ m_messagePanel->EraseMsgBox();
+}
+
+
+void EDA_DRAW_FRAME::OnActivate( wxActivateEvent& event )
+{
+ if( m_canvas )
+ m_canvas->SetCanStartBlock( -1 );
+
+ event.Skip(); // required under wxMAC
+}
+
+
+void EDA_DRAW_FRAME::OnMenuOpen( wxMenuEvent& event )
+{
+ if( m_canvas )
+ m_canvas->SetCanStartBlock( -1 );
+
+ event.Skip();
+}
+
+
+void EDA_DRAW_FRAME::SkipNextLeftButtonReleaseEvent()
+{
+ m_canvas->SetIgnoreLeftButtonReleaseEvent( true );
+}
+
+
+void EDA_DRAW_FRAME::OnToggleGridState( wxCommandEvent& aEvent )
+{
+ SetGridVisibility( !IsGridVisible() );
+
+ if( IsGalCanvasActive() )
+ {
+ GetGalCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() );
+ GetGalCanvas()->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
+ }
+
+ m_canvas->Refresh();
+}
+
+
+void EDA_DRAW_FRAME::OnSelectUnits( wxCommandEvent& aEvent )
+{
+ if( aEvent.GetId() == ID_TB_OPTIONS_SELECT_UNIT_MM && g_UserUnit != MILLIMETRES )
+ {
+ g_UserUnit = MILLIMETRES;
+ unitsChangeRefresh();
+ }
+ else if( aEvent.GetId() == ID_TB_OPTIONS_SELECT_UNIT_INCH && g_UserUnit != INCHES )
+ {
+ g_UserUnit = INCHES;
+ unitsChangeRefresh();
+ }
+}
+
+
+void EDA_DRAW_FRAME::OnToggleCrossHairStyle( wxCommandEvent& aEvent )
+{
+ INSTALL_UNBUFFERED_DC( dc, m_canvas );
+ m_canvas->CrossHairOff( &dc );
+ SetCursorShape( !GetCursorShape() );
+ m_canvas->CrossHairOn( &dc );
+}
+
+
+void EDA_DRAW_FRAME::OnUpdateUndo( wxUpdateUIEvent& aEvent )
+{
+ if( GetScreen() )
+ aEvent.Enable( GetScreen()->GetUndoCommandCount() > 0 );
+}
+
+
+void EDA_DRAW_FRAME::OnUpdateRedo( wxUpdateUIEvent& aEvent )
+{
+ if( GetScreen() )
+ aEvent.Enable( GetScreen()->GetRedoCommandCount() > 0 );
+}
+
+
+void EDA_DRAW_FRAME::OnUpdateUnits( wxUpdateUIEvent& aEvent )
+{
+ bool enable;
+
+ enable = ( ((aEvent.GetId() == ID_TB_OPTIONS_SELECT_UNIT_MM) && (g_UserUnit == MILLIMETRES))
+ || ((aEvent.GetId() == ID_TB_OPTIONS_SELECT_UNIT_INCH) && (g_UserUnit == INCHES)) );
+
+ aEvent.Check( enable );
+ DisplayUnitsMsg();
+}
+
+
+void EDA_DRAW_FRAME::OnUpdateGrid( wxUpdateUIEvent& aEvent )
+{
+ wxString tool_tip = IsGridVisible() ? _( "Hide grid" ) : _( "Show grid" );
+
+ aEvent.Check( IsGridVisible() );
+ m_optionsToolBar->SetToolShortHelp( ID_TB_OPTIONS_SHOW_GRID, tool_tip );
+}
+
+
+void EDA_DRAW_FRAME::OnUpdateCrossHairStyle( wxUpdateUIEvent& aEvent )
+{
+ aEvent.Check( m_cursorShape );
+}
+
+
+void EDA_DRAW_FRAME::ReCreateAuxiliaryToolbar()
+{
+}
+
+
+void EDA_DRAW_FRAME::ReCreateMenuBar()
+{
+}
+
+
+bool EDA_DRAW_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem )
+{
+ return false;
+}
+
+int EDA_DRAW_FRAME::WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList, wxString* aFullFileName )
+{
+ int result = EDA_BASE_FRAME::WriteHotkeyConfig( aDescList, aFullFileName );
+
+ if( IsGalCanvasActive() )
+ GetToolManager()->UpdateHotKeys();
+
+ return result;
+}
+
+void EDA_DRAW_FRAME::ToolOnRightClick( wxCommandEvent& event )
+{
+}
+
+
+void EDA_DRAW_FRAME::PrintPage( wxDC* aDC, LSET aPrintMask, bool aPrintMirrorMode, void* aData )
+{
+ wxMessageBox( wxT("EDA_DRAW_FRAME::PrintPage() error") );
+}
+
+
+void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event )
+{
+ int* clientData;
+ int eventId = ID_POPUP_GRID_LEVEL_100;
+
+ if( event.GetEventType() == wxEVT_CHOICE )
+ {
+ if( m_gridSelectBox == NULL ) // Should not happen
+ return;
+
+ /*
+ * Don't use wxCommandEvent::GetClientData() here. It always
+ * returns NULL in GTK. This solution is not as elegant but
+ * it works.
+ */
+ int index = m_gridSelectBox->GetSelection();
+ wxASSERT( index != wxNOT_FOUND );
+ clientData = (int*) m_gridSelectBox->wxItemContainer::GetClientData( index );
+
+ if( clientData != NULL )
+ eventId = *clientData;
+ }
+ else
+ {
+ eventId = event.GetId();
+ }
+
+ int idx = eventId - ID_POPUP_GRID_LEVEL_1000;
+
+ // Notify GAL
+ TOOL_MANAGER* mgr = GetToolManager();
+
+ if( mgr && IsGalCanvasActive() )
+ {
+ mgr->RunAction( "common.Control.gridPreset", true, idx );
+ }
+ else
+ SetPresetGrid( idx );
+
+ m_canvas->Refresh();
+}
+
+
+void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event )
+{
+ if( m_zoomSelectBox == NULL )
+ return; // Should not happen!
+
+ int id = m_zoomSelectBox->GetCurrentSelection();
+
+ if( id < 0 || !( id < (int)m_zoomSelectBox->GetCount() ) )
+ return;
+
+ if( id == 0 ) // Auto zoom (Fit in Page)
+ {
+ Zoom_Automatique( true );
+ }
+ else
+ {
+ id--;
+ double selectedZoom = GetScreen()->m_ZoomList[id];
+
+ if( GetScreen()->GetZoom() == selectedZoom )
+ return;
+
+ GetScreen()->SetZoom( selectedZoom );
+ RedrawScreen( GetScrollCenterPosition(), false );
+ }
+
+ // Notify GAL
+ TOOL_MANAGER* mgr = GetToolManager();
+
+ if( mgr && IsGalCanvasActive() )
+ {
+ mgr->RunAction( "common.Control.zoomPreset", true, id );
+ UpdateStatusBar();
+ }
+}
+
+
+double EDA_DRAW_FRAME::GetZoom()
+{
+ return GetScreen()->GetZoom();
+}
+
+
+void EDA_DRAW_FRAME::OnMouseEvent( wxMouseEvent& event )
+{
+ event.Skip();
+}
+
+
+void EDA_DRAW_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& MousePos )
+{
+}
+
+
+void EDA_DRAW_FRAME::DisplayToolMsg( const wxString& msg )
+{
+ SetStatusText( msg, 5 );
+}
+
+
+void EDA_DRAW_FRAME::DisplayUnitsMsg()
+{
+ wxString msg;
+
+ switch( g_UserUnit )
+ {
+ case INCHES:
+ msg = _( "Inches" );
+ break;
+
+ case MILLIMETRES:
+ msg = _( "mm" );
+ break;
+
+ default:
+ msg = _( "Units" );
+ break;
+ }
+
+ SetStatusText( msg, 4 );
+}
+
+
+
+void EDA_DRAW_FRAME::OnSize( wxSizeEvent& SizeEv )
+{
+ m_FrameSize = GetClientSize( );
+
+ SizeEv.Skip();
+}
+
+
+void EDA_DRAW_FRAME::SetToolID( int aId, int aCursor, const wxString& aToolMsg )
+{
+ // Keep default cursor in toolbars
+ SetCursor( wxNullCursor );
+
+ // Change m_canvas cursor if requested.
+ if( m_canvas && aCursor >= 0 )
+ m_canvas->SetCurrentCursor( aCursor );
+
+ DisplayToolMsg( aToolMsg );
+
+ if( aId < 0 )
+ return;
+
+ wxCHECK2_MSG( aId >= ID_NO_TOOL_SELECTED, aId = ID_NO_TOOL_SELECTED,
+ wxString::Format( wxT( "Current tool ID cannot be set to %d." ), aId ) );
+
+ m_toolId = aId;
+}
+
+
+wxPoint EDA_DRAW_FRAME::GetGridPosition( const wxPoint& aPosition ) const
+{
+ wxPoint pos = aPosition;
+
+ if( m_currentScreen != NULL && m_snapToGrid )
+ pos = GetNearestGridPosition( aPosition );
+
+ return pos;
+}
+
+
+void EDA_DRAW_FRAME::SetNextGrid()
+{
+ BASE_SCREEN * screen = GetScreen();
+
+ int new_grid_cmd = screen->GetGridCmdId();
+
+ // if the grid id is the not the last, increment it
+ if( screen->GridExists( new_grid_cmd + 1 ) )
+ new_grid_cmd += 1;
+
+ SetPresetGrid( new_grid_cmd - ID_POPUP_GRID_LEVEL_1000 );
+}
+
+
+void EDA_DRAW_FRAME::SetPrevGrid()
+{
+ BASE_SCREEN * screen = GetScreen();
+
+ int new_grid_cmd = screen->GetGridCmdId();
+
+ // if the grid id is the not the first, increment it
+ if( screen->GridExists( new_grid_cmd - 1 ) )
+ new_grid_cmd -= 1;
+
+ SetPresetGrid( new_grid_cmd - ID_POPUP_GRID_LEVEL_1000 );
+}
+
+
+void EDA_DRAW_FRAME::SetPresetGrid( int aIndex )
+{
+ BASE_SCREEN * screen = GetScreen();
+
+ if( ! screen->GridExists( aIndex + ID_POPUP_GRID_LEVEL_1000 ) )
+ aIndex = screen->GetGrids()[0].m_CmdId;
+
+ // aIndex is a Command Id relative to ID_POPUP_GRID_LEVEL_1000 comand id code.
+ // we need an index in grid list (the cmd id in list is is screen->GetGrids()[0].m_CmdId):
+ int glistIdx = aIndex + ID_POPUP_GRID_LEVEL_1000 - screen->GetGrids()[0].m_CmdId;
+
+ if( m_gridSelectBox )
+ {
+ if( glistIdx < 0 || glistIdx >= (int) m_gridSelectBox->GetCount() )
+ {
+ wxASSERT_MSG( false, "Invalid grid index" );
+ return;
+ }
+
+ m_gridSelectBox->SetSelection( glistIdx );
+ }
+
+ // Be sure m_LastGridSizeId is up to date.
+ m_LastGridSizeId = aIndex;
+ GetScreen()->SetGrid( aIndex + ID_POPUP_GRID_LEVEL_1000 );
+
+ // Put cursor on new grid
+ SetCrossHairPosition( RefPos( true ) );
+}
+
+
+int EDA_DRAW_FRAME::BlockCommand( int key )
+{
+ return 0;
+}
+
+
+void EDA_DRAW_FRAME::InitBlockPasteInfos()
+{
+ GetScreen()->m_BlockLocate.ClearItemsList();
+ m_canvas->SetMouseCaptureCallback( NULL );
+}
+
+
+void EDA_DRAW_FRAME::HandleBlockPlace( wxDC* DC )
+{
+}
+
+
+bool EDA_DRAW_FRAME::HandleBlockEnd( wxDC* DC )
+{
+ return false;
+}
+
+
+void EDA_DRAW_FRAME::UpdateStatusBar()
+{
+ SetStatusText( GetZoomLevelIndicator(), 1 );
+
+ // Absolute and relative cursor positions are handled by overloading this function and
+ // handling the internal to user units conversion at the appropriate level.
+
+ // refresh units display
+ DisplayUnitsMsg();
+}
+
+const wxString EDA_DRAW_FRAME::GetZoomLevelIndicator() const
+{
+ wxString Line;
+ double level = 0.0;
+
+ if( IsGalCanvasActive() )
+ {
+ KIGFX::GAL* gal = m_galCanvas->GetGAL();
+ KIGFX::VIEW* view = m_galCanvas->GetView();
+ double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor();
+ level = m_zoomLevelCoeff * zoomFactor * view->GetScale();
+ }
+ else if( BASE_SCREEN* screen = GetScreen() )
+ {
+ level = m_zoomLevelCoeff / (double) screen->GetZoom();
+ }
+
+ // returns a human readable value which can be displayed as zoom
+ // level indicator in dialogs.
+ Line.Printf( wxT( "Z %.2f" ), level );
+
+ return Line;
+}
+
+
+void EDA_DRAW_FRAME::LoadSettings( wxConfigBase* aCfg )
+{
+ EDA_BASE_FRAME::LoadSettings( aCfg );
+
+ wxString baseCfgName = ConfigBaseName();
+
+ aCfg->Read( baseCfgName + CursorShapeEntryKeyword, &m_cursorShape, ( long )0 );
+
+ bool btmp;
+ if( aCfg->Read( baseCfgName + ShowGridEntryKeyword, &btmp ) )
+ SetGridVisibility( btmp );
+
+ int itmp;
+ if( aCfg->Read( baseCfgName + GridColorEntryKeyword, &itmp ) )
+ SetGridColor( ColorFromInt( itmp ) );
+
+ aCfg->Read( baseCfgName + LastGridSizeIdKeyword, &m_LastGridSizeId, 0L );
+
+ // m_LastGridSizeId is an offset, expected to be >= 0
+ if( m_LastGridSizeId < 0 )
+ m_LastGridSizeId = 0;
+
+ m_UndoRedoCountMax = aCfg->Read( baseCfgName + MaxUndoItemsEntry,
+ long( DEFAULT_MAX_UNDO_ITEMS ) );
+}
+
+
+void EDA_DRAW_FRAME::SaveSettings( wxConfigBase* aCfg )
+{
+ EDA_BASE_FRAME::SaveSettings( aCfg );
+
+ wxString baseCfgName = ConfigBaseName();
+
+ aCfg->Write( baseCfgName + CursorShapeEntryKeyword, m_cursorShape );
+ aCfg->Write( baseCfgName + ShowGridEntryKeyword, IsGridVisible() );
+ aCfg->Write( baseCfgName + GridColorEntryKeyword, ( long ) GetGridColor() );
+ aCfg->Write( baseCfgName + LastGridSizeIdKeyword, ( long ) m_LastGridSizeId );
+ aCfg->Write( baseCfgName + MaxUndoItemsEntry, long( GetScreen()->GetMaxUndoItems() ) );
+}
+
+
+void EDA_DRAW_FRAME::AppendMsgPanel( const wxString& textUpper,
+ const wxString& textLower,
+ EDA_COLOR_T color, int pad )
+{
+ if( m_messagePanel == NULL )
+ return;
+
+ m_messagePanel->AppendMessage( textUpper, textLower, color, pad );
+}
+
+
+void EDA_DRAW_FRAME::ClearMsgPanel()
+{
+ if( m_messagePanel == NULL )
+ return;
+
+ m_messagePanel->EraseMsgBox();
+}
+
+
+void EDA_DRAW_FRAME::SetMsgPanel( const MSG_PANEL_ITEMS& aList )
+{
+ if( m_messagePanel == NULL )
+ return;
+
+ ClearMsgPanel();
+
+ for( unsigned i = 0; i < aList.size(); i++ )
+ m_messagePanel->AppendMessage( aList[i] );
+}
+
+
+void EDA_DRAW_FRAME::SetMsgPanel( EDA_ITEM* aItem )
+{
+ wxCHECK_RET( aItem != NULL, wxT( "Invalid EDA_ITEM pointer. Bad programmer." ) );
+
+ MSG_PANEL_ITEMS items;
+ aItem->GetMsgPanelInfo( items );
+ SetMsgPanel( items );
+}
+
+
+void EDA_DRAW_FRAME::UpdateMsgPanel()
+{
+ EDA_ITEM* item = GetScreen()->GetCurItem();
+
+ if( item )
+ SetMsgPanel( item );
+}
+
+// FIXME: There needs to be a better way for child windows to load preferences.
+// This function pushes four preferences from a parent window to a child window
+// i.e. from eeschema to the schematic symbol editor
+void EDA_DRAW_FRAME::PushPreferences( const EDA_DRAW_PANEL* aParentCanvas )
+{
+ m_canvas->SetEnableZoomNoCenter( aParentCanvas->GetEnableZoomNoCenter() );
+ m_canvas->SetEnableMiddleButtonPan( aParentCanvas->GetEnableMiddleButtonPan() );
+ m_canvas->SetMiddleButtonPanLimited( aParentCanvas->GetMiddleButtonPanLimited() );
+ m_canvas->SetEnableAutoPan( aParentCanvas->GetEnableAutoPan() );
+}
+
+wxString EDA_DRAW_FRAME::CoordinateToString( int aValue, bool aConvertToMils ) const
+{
+ return ::CoordinateToString( aValue, aConvertToMils );
+}
+
+wxString EDA_DRAW_FRAME::LengthDoubleToString( double aValue, bool aConvertToMils ) const
+{
+ return ::LengthDoubleToString( aValue, aConvertToMils );
+}
+
+
+bool EDA_DRAW_FRAME::HandleBlockBegin( wxDC* aDC, int aKey, const wxPoint& aPosition )
+{
+ BLOCK_SELECTOR* block = &GetScreen()->m_BlockLocate;
+
+ if( ( block->GetCommand() != BLOCK_IDLE ) || ( block->GetState() != STATE_NO_BLOCK ) )
+ return false;
+
+ block->SetCommand( (BLOCK_COMMAND_T) BlockCommand( aKey ) );
+
+ if( block->GetCommand() == 0 )
+ return false;
+
+ switch( block->GetCommand() )
+ {
+ case BLOCK_IDLE:
+ break;
+
+ case BLOCK_MOVE: // Move
+ case BLOCK_DRAG: // Drag (block defined)
+ case BLOCK_DRAG_ITEM: // Drag from a drag item command
+ case BLOCK_COPY: // Copy
+ case BLOCK_COPY_AND_INCREMENT: // Copy and increment relevant references
+ case BLOCK_DELETE: // Delete
+ case BLOCK_SAVE: // Save
+ case BLOCK_ROTATE: // Rotate 90 deg
+ case BLOCK_FLIP: // Flip
+ case BLOCK_ZOOM: // Window Zoom
+ case BLOCK_MIRROR_X:
+ case BLOCK_MIRROR_Y: // mirror
+ case BLOCK_PRESELECT_MOVE: // Move with preselection list
+ block->InitData( m_canvas, aPosition );
+ break;
+
+ case BLOCK_PASTE:
+ block->InitData( m_canvas, aPosition );
+ block->SetLastCursorPosition( wxPoint( 0, 0 ) );
+ InitBlockPasteInfos();
+
+ if( block->GetCount() == 0 ) // No data to paste
+ {
+ DisplayError( this, wxT( "No block to paste" ), 20 );
+ GetScreen()->m_BlockLocate.SetCommand( BLOCK_IDLE );
+ m_canvas->SetMouseCaptureCallback( NULL );
+ return true;
+ }
+
+ if( !m_canvas->IsMouseCaptured() )
+ {
+ block->ClearItemsList();
+ DisplayError( this,
+ wxT( "EDA_DRAW_FRAME::HandleBlockBegin() Err: m_mouseCaptureCallback NULL" ) );
+ return true;
+ }
+
+ block->SetState( STATE_BLOCK_MOVE );
+ m_canvas->CallMouseCapture( aDC, aPosition, false );
+ break;
+
+ default:
+ {
+ wxString msg;
+ msg << wxT( "EDA_DRAW_FRAME::HandleBlockBegin() error: Unknown command " ) <<
+ block->GetCommand();
+ DisplayError( this, msg );
+ }
+ break;
+ }
+
+ block->SetMessageBlock( this );
+ return true;
+}
+
+
+// I am not seeing a problem with this size yet:
+static const double MAX_AXIS = INT_MAX - 100;
+
+#define VIRT_MIN (-MAX_AXIS/2.0) ///< min X or Y coordinate in virtual space
+#define VIRT_MAX (MAX_AXIS/2.0) ///< max X or Y coordinate in virtual space
+
+
+void EDA_DRAW_FRAME::AdjustScrollBars( const wxPoint& aCenterPositionIU )
+{
+ BASE_SCREEN* screen = GetScreen();
+
+ if( !screen || !m_canvas )
+ return;
+
+ double scale = screen->GetScalingFactor();
+
+ wxLogTrace( traceScrollSettings, wxT( "Center Position = ( %d, %d ), scale = %.10g" ),
+ aCenterPositionIU.x, aCenterPositionIU.y, scale );
+
+ // Calculate the portion of the drawing that can be displayed in the
+ // client area at the current zoom level.
+
+ // visible viewport in device units ~ pixels
+ wxSize clientSizeDU = m_canvas->GetClientSize();
+
+ // Size of the client window in IU
+ DSIZE clientSizeIU( clientSizeDU.x / scale, clientSizeDU.y / scale );
+
+ // Full drawing or "page" rectangle in internal units
+ DBOX pageRectIU( wxPoint( 0, 0 ), wxSize( GetPageSizeIU().x, GetPageSizeIU().y ) );
+
+ // The upper left corner of the client rectangle in internal units.
+ double xIU = aCenterPositionIU.x - clientSizeIU.x / 2.0;
+ double yIU = aCenterPositionIU.y - clientSizeIU.y / 2.0;
+
+ // If drawn around the center, adjust the client rectangle accordingly.
+ if( screen->m_Center )
+ {
+ // half page offset.
+ xIU += pageRectIU.GetWidth() / 2.0;
+ yIU += pageRectIU.GetHeight() / 2.0;
+ }
+
+ DBOX clientRectIU( wxPoint( xIU, yIU ), wxSize( clientSizeIU.x, clientSizeIU.y ) );
+ wxPoint centerPositionIU;
+
+ // put "int" limits on the clientRect
+ if( clientRectIU.GetLeft() < VIRT_MIN )
+ clientRectIU.MoveLeftTo( VIRT_MIN );
+ if( clientRectIU.GetTop() < VIRT_MIN )
+ clientRectIU.MoveTopTo( VIRT_MIN );
+ if( clientRectIU.GetRight() > VIRT_MAX )
+ clientRectIU.MoveRightTo( VIRT_MAX );
+ if( clientRectIU.GetBottom() > VIRT_MAX )
+ clientRectIU.MoveBottomTo( VIRT_MAX );
+
+ centerPositionIU.x = KiROUND( clientRectIU.GetX() + clientRectIU.GetWidth() / 2 );
+ centerPositionIU.y = KiROUND( clientRectIU.GetY() + clientRectIU.GetHeight() / 2 );
+
+ if( screen->m_Center )
+ {
+ centerPositionIU.x -= KiROUND( pageRectIU.GetWidth() / 2.0 );
+ centerPositionIU.y -= KiROUND( pageRectIU.GetHeight() / 2.0 );
+ }
+
+ DSIZE virtualSizeIU;
+
+ if( pageRectIU.GetLeft() < clientRectIU.GetLeft() && pageRectIU.GetRight() > clientRectIU.GetRight() )
+ {
+ virtualSizeIU.x = pageRectIU.GetSize().x;
+ }
+ else
+ {
+ double pageCenterX = pageRectIU.GetX() + ( pageRectIU.GetWidth() / 2 );
+ double clientCenterX = clientRectIU.GetX() + ( clientRectIU.GetWidth() / 2 );
+
+ if( clientRectIU.GetWidth() > pageRectIU.GetWidth() )
+ {
+ if( pageCenterX > clientCenterX )
+ virtualSizeIU.x = ( pageCenterX - clientRectIU.GetLeft() ) * 2;
+ else if( pageCenterX < clientCenterX )
+ virtualSizeIU.x = ( clientRectIU.GetRight() - pageCenterX ) * 2;
+ else
+ virtualSizeIU.x = clientRectIU.GetWidth();
+ }
+ else
+ {
+ if( pageCenterX > clientCenterX )
+ virtualSizeIU.x = pageRectIU.GetWidth() + ( (pageRectIU.GetLeft() - clientRectIU.GetLeft() ) * 2 );
+ else if( pageCenterX < clientCenterX )
+ virtualSizeIU.x = pageRectIU.GetWidth() + ( (clientRectIU.GetRight() - pageRectIU.GetRight() ) * 2 );
+ else
+ virtualSizeIU.x = pageRectIU.GetWidth();
+ }
+ }
+
+ if( pageRectIU.GetTop() < clientRectIU.GetTop() && pageRectIU.GetBottom() > clientRectIU.GetBottom() )
+ {
+ virtualSizeIU.y = pageRectIU.GetSize().y;
+ }
+ else
+ {
+ double pageCenterY = pageRectIU.GetY() + ( pageRectIU.GetHeight() / 2 );
+ double clientCenterY = clientRectIU.GetY() + ( clientRectIU.GetHeight() / 2 );
+
+ if( clientRectIU.GetHeight() > pageRectIU.GetHeight() )
+ {
+ if( pageCenterY > clientCenterY )
+ virtualSizeIU.y = ( pageCenterY - clientRectIU.GetTop() ) * 2;
+ else if( pageCenterY < clientCenterY )
+ virtualSizeIU.y = ( clientRectIU.GetBottom() - pageCenterY ) * 2;
+ else
+ virtualSizeIU.y = clientRectIU.GetHeight();
+ }
+ else
+ {
+ if( pageCenterY > clientCenterY )
+ virtualSizeIU.y = pageRectIU.GetHeight() +
+ ( ( pageRectIU.GetTop() - clientRectIU.GetTop() ) * 2 );
+ else if( pageCenterY < clientCenterY )
+ virtualSizeIU.y = pageRectIU.GetHeight() +
+ ( ( clientRectIU.GetBottom() - pageRectIU.GetBottom() ) * 2 );
+ else
+ virtualSizeIU.y = pageRectIU.GetHeight();
+ }
+ }
+
+ // put "int" limits on the virtualSizeIU
+ virtualSizeIU.x = std::min( virtualSizeIU.x, MAX_AXIS );
+ virtualSizeIU.y = std::min( virtualSizeIU.y, MAX_AXIS );
+
+ if( screen->m_Center )
+ {
+ screen->m_DrawOrg.x = -KiROUND( virtualSizeIU.x / 2.0 );
+ screen->m_DrawOrg.y = -KiROUND( virtualSizeIU.y / 2.0 );
+ }
+ else
+ {
+ screen->m_DrawOrg.x = -KiROUND( ( virtualSizeIU.x - pageRectIU.GetWidth() ) / 2.0 );
+ screen->m_DrawOrg.y = -KiROUND( ( virtualSizeIU.y - pageRectIU.GetHeight() ) / 2.0 );
+ }
+
+ /* Always set scrollbar pixels per unit to 1 unless you want the zoom
+ * around cursor to jump around. This reported problem occurs when the
+ * zoom point is not on a pixel per unit increment. If you set the
+ * pixels per unit to 10, you have potential for the zoom point to
+ * jump around +/-5 pixels from the nearest grid point.
+ */
+ screen->m_ScrollPixelsPerUnitX = screen->m_ScrollPixelsPerUnitY = 1;
+
+ // Number of scroll bar units for the given zoom level in device units.
+ double unitsX = virtualSizeIU.x * scale;
+ double unitsY = virtualSizeIU.y * scale;
+
+ // Calculate the scroll bar position in internal units to place the
+ // center position at the center of client rectangle.
+ SetScrollCenterPosition( centerPositionIU );
+
+ double posX = centerPositionIU.x - clientRectIU.GetWidth() / 2.0 - screen->m_DrawOrg.x;
+ double posY = centerPositionIU.y - clientRectIU.GetHeight() / 2.0 - screen->m_DrawOrg.y;
+
+ // Convert scroll bar position to device units.
+ posX = KiROUND( posX * scale );
+ posY = KiROUND( posY * scale );
+
+ if( posX < 0 )
+ {
+ wxLogTrace( traceScrollSettings, wxT( "Required scroll bar X position %.10g" ), posX );
+ posX = 0;
+ }
+
+ if( posX > unitsX )
+ {
+ wxLogTrace( traceScrollSettings, wxT( "Required scroll bar X position %.10g" ), posX );
+ posX = unitsX;
+ }
+
+ if( posY < 0 )
+ {
+ wxLogTrace( traceScrollSettings, wxT( "Required scroll bar Y position %.10g" ), posY );
+ posY = 0;
+ }
+
+ if( posY > unitsY )
+ {
+ wxLogTrace( traceScrollSettings, wxT( "Required scroll bar Y position %.10g" ), posY );
+ posY = unitsY;
+ }
+
+ screen->m_ScrollbarPos = wxPoint( KiROUND( posX ), KiROUND( posY ) );
+ screen->m_ScrollbarNumber = wxSize( KiROUND( unitsX ), KiROUND( unitsY ) );
+
+ wxLogTrace( traceScrollSettings,
+ wxT( "Drawing = (%.10g, %.10g), Client = (%.10g, %.10g), Offset = (%d, %d), SetScrollbars(%d, %d, %d, %d, %d, %d)" ),
+ virtualSizeIU.x, virtualSizeIU.y, clientSizeIU.x, clientSizeIU.y,
+ screen->m_DrawOrg.x, screen->m_DrawOrg.y,
+ screen->m_ScrollPixelsPerUnitX, screen->m_ScrollPixelsPerUnitY,
+ screen->m_ScrollbarNumber.x, screen->m_ScrollbarNumber.y,
+ screen->m_ScrollbarPos.x, screen->m_ScrollbarPos.y );
+
+ bool noRefresh = true;
+
+ m_canvas->SetScrollbars( screen->m_ScrollPixelsPerUnitX,
+ screen->m_ScrollPixelsPerUnitY,
+ screen->m_ScrollbarNumber.x,
+ screen->m_ScrollbarNumber.y,
+ screen->m_ScrollbarPos.x,
+ screen->m_ScrollbarPos.y, noRefresh );
+}
+
+
+void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable )
+{
+ KIGFX::VIEW* view = GetGalCanvas()->GetView();
+ KIGFX::GAL* gal = GetGalCanvas()->GetGAL();
+
+ // Display the same view after canvas switching
+ if( aEnable )
+ {
+ // Switch to GAL renderer from legacy
+ if( !m_galCanvasActive )
+ {
+ // Set up viewport
+ double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor();
+ double zoom = 1.0 / ( zoomFactor * m_canvas->GetZoom() );
+ view->SetScale( zoom );
+ view->SetCenter( VECTOR2D( m_canvas->GetScreenCenterLogicalPosition() ) );
+ }
+
+ // Set up grid settings
+ gal->SetGridVisibility( IsGridVisible() );
+ gal->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) );
+ gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) );
+
+ // Transfer EDA_DRAW_PANEL settings
+ GetGalCanvas()->GetViewControls()->EnableCursorWarping( !m_canvas->GetEnableZoomNoCenter() );
+ GetGalCanvas()->GetViewControls()->EnableMousewheelPan( m_canvas->GetEnableMousewheelPan() );
+ GetToolManager()->RunAction( "pcbnew.Control.switchCursor" );
+ }
+ else if( m_galCanvasActive )
+ {
+ // Switch to legacy renderer from GAL
+ double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor();
+ // TODO replace it with EDA_DRAW_PANEL_GAL::GetLegacyZoom
+ m_canvas->SetZoom( 1.0 / ( zoomFactor * view->GetScale() ) );
+ VECTOR2D center = view->GetCenter();
+ AdjustScrollBars( wxPoint( center.x, center.y ) );
+ }
+
+ m_canvas->SetEvtHandlerEnabled( !aEnable );
+ GetGalCanvas()->SetEvtHandlerEnabled( aEnable );
+
+ // Switch panes
+ m_auimgr.GetPane( wxT( "DrawFrame" ) ).Show( !aEnable );
+ m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable );
+ m_auimgr.Update();
+
+ // Reset current tool on switch();
+ SetToolID( ID_NO_TOOL_SELECTED, wxCURSOR_DEFAULT, wxEmptyString );
+
+ m_galCanvasActive = aEnable;
+}
+
+//-----< BASE_SCREEN API moved here >--------------------------------------------
+
+wxPoint EDA_DRAW_FRAME::GetCrossHairPosition( bool aInvertY ) const
+{
+ // subject to change, borrow from old BASE_SCREEN for now.
+ if( IsGalCanvasActive() )
+ {
+ VECTOR2I cursor = GetGalCanvas()->GetViewControls()->GetCursorPosition();
+
+ return wxPoint( cursor.x, cursor.y );
+ }
+ else
+ {
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ return screen->getCrossHairPosition( aInvertY );
+ }
+}
+
+
+void EDA_DRAW_FRAME::SetCrossHairPosition( const wxPoint& aPosition, bool aSnapToGrid )
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ screen->setCrossHairPosition( aPosition, GetGridOrigin(), aSnapToGrid );
+}
+
+
+wxPoint EDA_DRAW_FRAME::GetCursorPosition( bool aOnGrid, wxRealPoint* aGridSize ) const
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ return screen->getCursorPosition( aOnGrid, GetGridOrigin(), aGridSize );
+}
+
+
+wxPoint EDA_DRAW_FRAME::GetNearestGridPosition( const wxPoint& aPosition, wxRealPoint* aGridSize ) const
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ return screen->getNearestGridPosition( aPosition, GetGridOrigin(), aGridSize );
+}
+
+
+wxPoint EDA_DRAW_FRAME::GetCrossHairScreenPosition() const
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ return screen->getCrossHairScreenPosition();
+}
+
+
+void EDA_DRAW_FRAME::SetMousePosition( const wxPoint& aPosition )
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ screen->setMousePosition( aPosition );
+}
+
+
+wxPoint EDA_DRAW_FRAME::RefPos( bool useMouse ) const
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ return screen->refPos( useMouse );
+}
+
+
+const wxPoint& EDA_DRAW_FRAME::GetScrollCenterPosition() const
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ return screen->getScrollCenterPosition();
+}
+
+
+void EDA_DRAW_FRAME::SetScrollCenterPosition( const wxPoint& aPoint )
+{
+ BASE_SCREEN* screen = GetScreen(); // virtual call
+ screen->setScrollCenterPosition( aPoint );
+}
+
+//-----</BASE_SCREEN API moved here >--------------------------------------------
+
+void EDA_DRAW_FRAME::RefreshCrossHair( const wxPoint &aOldPos,
+ const wxPoint &aEvtPos,
+ wxDC* aDC )
+{
+ wxPoint newpos = GetCrossHairPosition();
+
+ // Redraw the crosshair if it moved
+ if( aOldPos != newpos )
+ {
+ SetCrossHairPosition( aOldPos, false );
+ m_canvas->CrossHairOff( aDC );
+ SetCrossHairPosition( newpos, false );
+ m_canvas->CrossHairOn( aDC );
+
+ if( m_canvas->IsMouseCaptured() )
+ {
+#ifdef USE_WX_OVERLAY
+ wxDCOverlay oDC( m_overlay, (wxWindowDC*)aDC );
+ oDC.Clear();
+ m_canvas->CallMouseCapture( aDC, aEvtPos, false );
+#else
+ m_canvas->CallMouseCapture( aDC, aEvtPos, true );
+#endif
+ }
+#ifdef USE_WX_OVERLAY
+ else
+ {
+ m_overlay.Reset();
+ }
+#endif
+ }
+}
+
+void EDA_DRAW_FRAME::GeneralControlKeyMovement( int aHotKey, wxPoint *aPos,
+ bool aSnapToGrid )
+{
+
+ // If requested snap the current position to the grid
+ if( aSnapToGrid )
+ *aPos = GetNearestGridPosition( *aPos );
+
+ switch( aHotKey )
+ {
+ // All these keys have almost the same treatment
+ case GR_KB_CTRL | WXK_NUMPAD8:
+ case GR_KB_CTRL | WXK_UP:
+ case GR_KB_CTRL | WXK_NUMPAD2:
+ case GR_KB_CTRL | WXK_DOWN:
+ case GR_KB_CTRL | WXK_NUMPAD4:
+ case GR_KB_CTRL | WXK_LEFT:
+ case GR_KB_CTRL | WXK_NUMPAD6:
+ case GR_KB_CTRL | WXK_RIGHT:
+ case WXK_NUMPAD8:
+ case WXK_UP:
+ case WXK_NUMPAD2:
+ case WXK_DOWN:
+ case WXK_NUMPAD4:
+ case WXK_LEFT:
+ case WXK_NUMPAD6:
+ case WXK_RIGHT:
+ {
+ /* Here's a tricky part: when doing cursor key movement, the
+ * 'previous' point should be taken from memory, *not* from the
+ * freshly computed position in the event. Otherwise you can't do
+ * sub-pixel movement. The m_movingCursorWithKeyboard oneshot 'eats'
+ * the automatic motion event generated by cursor warping */
+ wxRealPoint gridSize = GetScreen()->GetGridSize();
+ *aPos = GetCrossHairPosition();
+
+ // Bonus: ^key moves faster (x10)
+ switch( aHotKey )
+ {
+ case GR_KB_CTRL|WXK_NUMPAD8:
+ case GR_KB_CTRL|WXK_UP:
+ aPos->y -= KiROUND( 10 * gridSize.y );
+ break;
+
+ case GR_KB_CTRL|WXK_NUMPAD2:
+ case GR_KB_CTRL|WXK_DOWN:
+ aPos->y += KiROUND( 10 * gridSize.y );
+ break;
+
+ case GR_KB_CTRL|WXK_NUMPAD4:
+ case GR_KB_CTRL|WXK_LEFT:
+ aPos->x -= KiROUND( 10 * gridSize.x );
+ break;
+
+ case GR_KB_CTRL|WXK_NUMPAD6:
+ case GR_KB_CTRL|WXK_RIGHT:
+ aPos->x += KiROUND( 10 * gridSize.x );
+ break;
+
+ case WXK_NUMPAD8:
+ case WXK_UP:
+ aPos->y -= KiROUND( gridSize.y );
+ break;
+
+ case WXK_NUMPAD2:
+ case WXK_DOWN:
+ aPos->y += KiROUND( gridSize.y );
+ break;
+
+ case WXK_NUMPAD4:
+ case WXK_LEFT:
+ aPos->x -= KiROUND( gridSize.x );
+ break;
+
+ case WXK_NUMPAD6:
+ case WXK_RIGHT:
+ aPos->x += KiROUND( gridSize.x );
+ break;
+
+ default: /* Can't happen since we entered the statement */
+ break;
+ }
+ m_canvas->MoveCursor( *aPos );
+ m_movingCursorWithKeyboard = true;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
diff --git a/common/draw_panel.cpp b/common/draw_panel.cpp
new file mode 100644
index 0000000..3bd1103
--- /dev/null
+++ b/common/draw_panel.cpp
@@ -0,0 +1,1619 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr
+ * Copyright (C) 2007-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file draw_panel.cpp
+ */
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <kiface_i.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <macros.h>
+#include <id.h>
+#include <class_drawpanel.h>
+#include <class_draw_panel_gal.h>
+#include <class_base_screen.h>
+#include <draw_frame.h>
+#include <view/view_controls.h>
+
+#include <kicad_device_context.h>
+
+static const int CURSOR_SIZE = 12; ///< Cursor size in pixels
+
+#define CLIP_BOX_PADDING 2
+
+// keys to store options in config:
+#define ENBL_ZOOM_NO_CENTER_KEY wxT( "ZoomNoCenter" )
+#define ENBL_MOUSEWHEEL_PAN_KEY wxT( "MousewheelPAN" )
+#define ENBL_MIDDLE_BUTT_PAN_KEY wxT( "MiddleButtonPAN" )
+#define MIDDLE_BUTT_PAN_LIMITED_KEY wxT( "MiddleBtnPANLimited" )
+#define ENBL_AUTO_PAN_KEY wxT( "AutoPAN" )
+
+
+// Definitions for enabling and disabling debugging features in drawpanel.cpp.
+// Please don't forget to turn these off before making any commits to Launchpad.
+#define DEBUG_SHOW_CLIP_RECT 0 // Set to 1 to draw clipping rectangle.
+
+
+/**
+ * Trace mask used to enable or disable the trace output of coordinates during drawing
+ * functions. The coordinate dumping can be turned on by setting the WXTRACE environment
+ * variable to "kicad_dump_coords". See the wxWidgets documentation on wxLogTrace for
+ * more information.
+ */
+#define KICAD_TRACE_COORDS wxT( "kicad_dump_coords" )
+
+
+// Events used by EDA_DRAW_PANEL
+BEGIN_EVENT_TABLE( EDA_DRAW_PANEL, wxScrolledWindow )
+ EVT_LEAVE_WINDOW( EDA_DRAW_PANEL::OnMouseLeaving )
+ EVT_ENTER_WINDOW( EDA_DRAW_PANEL::OnMouseEntering )
+ EVT_MOUSEWHEEL( EDA_DRAW_PANEL::OnMouseWheel )
+#ifdef USE_OSX_MAGNIFY_EVENT
+ EVT_MAGNIFY( EDA_DRAW_PANEL::OnMagnify )
+#endif
+ EVT_MOUSE_EVENTS( EDA_DRAW_PANEL::OnMouseEvent )
+ EVT_CHAR( EDA_DRAW_PANEL::OnKeyEvent )
+ EVT_CHAR_HOOK( EDA_DRAW_PANEL::OnCharHook )
+ EVT_PAINT( EDA_DRAW_PANEL::OnPaint )
+ EVT_ERASE_BACKGROUND( EDA_DRAW_PANEL::OnEraseBackground )
+ EVT_SCROLLWIN( EDA_DRAW_PANEL::OnScroll )
+ EVT_ACTIVATE( EDA_DRAW_PANEL::OnActivate )
+ EVT_MENU_RANGE( ID_PAN_UP, ID_PAN_RIGHT, EDA_DRAW_PANEL::OnPan )
+END_EVENT_TABLE()
+
+
+/***********************************************************************/
+/* EDA_DRAW_PANEL base functions (EDA_DRAW_PANEL is the main panel)*/
+/***********************************************************************/
+
+EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
+ const wxPoint& pos, const wxSize& size ) :
+ wxScrolledWindow( parent, id, pos, size, wxBORDER | wxHSCROLL | wxVSCROLL )
+{
+ wxASSERT( parent );
+
+ ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
+ DisableKeyboardScrolling();
+
+ m_scrollIncrementX = std::min( size.x / 8, 10 );
+ m_scrollIncrementY = std::min( size.y / 8, 10 );
+
+ SetLayoutDirection( wxLayout_LeftToRight );
+
+ SetBackgroundColour( MakeColour( parent->GetDrawBgColor() ) );
+
+#if KICAD_USE_BUFFERED_DC || KICAD_USE_BUFFERED_PAINTDC
+ SetBackgroundStyle( wxBG_STYLE_CUSTOM );
+#endif
+
+ m_ClipBox.SetSize( size );
+ m_ClipBox.SetX( 0 );
+ m_ClipBox.SetY( 0 );
+ m_canStartBlock = -1; // Command block can start if >= 0
+ m_abortRequest = false;
+ m_enableMousewheelPan = false;
+ m_enableMiddleButtonPan = true;
+ m_enableZoomNoCenter = false;
+ m_panScrollbarLimits = false;
+ m_enableAutoPan = true;
+ m_ignoreMouseEvents = false;
+ // Be sure a mouse release button event will be ignored when creating the canvas
+ // if the mouse click was not made inside the canvas (can happen sometimes, when
+ // launching an editor from a double click made in an other frame)
+ m_ignoreNextLeftButtonRelease = true;
+
+ m_mouseCaptureCallback = NULL;
+ m_endMouseCaptureCallback = NULL;
+
+ wxConfigBase* cfg = Kiface().KifaceSettings();
+
+ if( cfg )
+ {
+ cfg->Read( ENBL_MOUSEWHEEL_PAN_KEY, &m_enableMousewheelPan, false );
+ cfg->Read( ENBL_MIDDLE_BUTT_PAN_KEY, &m_enableMiddleButtonPan, true );
+ cfg->Read( ENBL_ZOOM_NO_CENTER_KEY, &m_enableZoomNoCenter, false );
+ cfg->Read( MIDDLE_BUTT_PAN_LIMITED_KEY, &m_panScrollbarLimits, false );
+ cfg->Read( ENBL_AUTO_PAN_KEY, &m_enableAutoPan, true );
+ }
+
+ m_requestAutoPan = false;
+ m_enableBlockCommands = false;
+ m_minDragEventCount = 0;
+
+#ifdef __WXMAC__
+ m_defaultCursor = m_currentCursor = wxCURSOR_CROSS;
+ m_showCrossHair = false;
+#else
+ m_defaultCursor = m_currentCursor = wxCURSOR_ARROW;
+ m_showCrossHair = true;
+#endif
+
+ m_cursorLevel = 0;
+ m_PrintIsMirrored = false;
+}
+
+
+EDA_DRAW_PANEL::~EDA_DRAW_PANEL()
+{
+ wxConfigBase* cfg = Kiface().KifaceSettings();
+
+ if( cfg )
+ {
+ cfg->Write( ENBL_MOUSEWHEEL_PAN_KEY, m_enableMousewheelPan );
+ cfg->Write( ENBL_MIDDLE_BUTT_PAN_KEY, m_enableMiddleButtonPan );
+ cfg->Write( ENBL_ZOOM_NO_CENTER_KEY, m_enableZoomNoCenter );
+ cfg->Write( MIDDLE_BUTT_PAN_LIMITED_KEY, m_panScrollbarLimits );
+ cfg->Write( ENBL_AUTO_PAN_KEY, m_enableAutoPan );
+ }
+}
+
+
+EDA_DRAW_FRAME* EDA_DRAW_PANEL::GetParent() const
+{
+ wxWindow* mom = wxScrolledWindow::GetParent();
+ return (EDA_DRAW_FRAME*) mom;
+}
+
+
+void* EDA_DRAW_PANEL::GetDisplayOptions()
+{
+ return GetParent()->GetDisplayOptions();
+}
+
+
+BASE_SCREEN* EDA_DRAW_PANEL::GetScreen()
+{
+ EDA_DRAW_FRAME* parentFrame = GetParent();
+
+ return parentFrame->GetScreen();
+}
+
+
+wxPoint EDA_DRAW_PANEL::ToDeviceXY( const wxPoint& pos )
+{
+ wxPoint ret;
+ INSTALL_UNBUFFERED_DC( dc, this );
+ ret.x = dc.LogicalToDeviceX( pos.x );
+ ret.y = dc.LogicalToDeviceY( pos.y );
+ return ret;
+}
+
+
+wxPoint EDA_DRAW_PANEL::ToLogicalXY( const wxPoint& pos )
+{
+ wxPoint ret;
+ INSTALL_UNBUFFERED_DC( dc, this );
+ ret.x = dc.DeviceToLogicalX( pos.x );
+ ret.y = dc.DeviceToLogicalY( pos.y );
+ return ret;
+}
+
+
+void EDA_DRAW_PANEL::DrawCrossHair( wxDC* aDC, EDA_COLOR_T aColor )
+{
+ if( m_cursorLevel != 0 || aDC == NULL || !m_showCrossHair )
+ return;
+
+ wxPoint cursor = GetParent()->GetCrossHairPosition();
+
+ GRSetDrawMode( aDC, GR_XOR );
+
+ if( GetParent()->m_cursorShape != 0 ) // Draws full screen crosshair.
+ {
+ wxSize clientSize = GetClientSize();
+
+ // Y axis
+ wxPoint lineStart( cursor.x, aDC->DeviceToLogicalY( 0 ) );
+ wxPoint lineEnd( cursor.x, aDC->DeviceToLogicalY( clientSize.y ) );
+
+ GRLine( &m_ClipBox, aDC, lineStart, lineEnd, 0, aColor );
+
+ // X axis
+ lineStart = wxPoint( aDC->DeviceToLogicalX( 0 ), cursor.y );
+ lineEnd = wxPoint( aDC->DeviceToLogicalX( clientSize.x ), cursor.y );
+
+ GRLine( &m_ClipBox, aDC, lineStart, lineEnd, 0, aColor );
+ }
+ else
+ {
+ int len = aDC->DeviceToLogicalXRel( CURSOR_SIZE );
+
+ GRLine( &m_ClipBox, aDC, cursor.x - len, cursor.y,
+ cursor.x + len, cursor.y, 0, aColor );
+ GRLine( &m_ClipBox, aDC, cursor.x, cursor.y - len,
+ cursor.x, cursor.y + len, 0, aColor );
+ }
+}
+
+
+void EDA_DRAW_PANEL::CrossHairOff( wxDC* DC )
+{
+ DrawCrossHair( DC );
+ --m_cursorLevel;
+}
+
+
+void EDA_DRAW_PANEL::CrossHairOn( wxDC* DC )
+{
+ ++m_cursorLevel;
+ DrawCrossHair( DC );
+
+ if( m_cursorLevel > 0 ) // Shouldn't happen, but just in case ..
+ m_cursorLevel = 0;
+}
+
+
+double EDA_DRAW_PANEL::GetZoom()
+{
+ return GetScreen()->GetZoom();
+}
+
+
+void EDA_DRAW_PANEL::SetZoom( double zoom )
+{
+ GetScreen()->SetZoom( zoom );
+}
+
+
+wxRealPoint EDA_DRAW_PANEL::GetGrid()
+{
+ return GetScreen()->GetGridSize();
+}
+
+
+bool EDA_DRAW_PANEL::IsPointOnDisplay( const wxPoint& aPosition )
+{
+ wxPoint pos;
+ EDA_RECT display_rect;
+
+ INSTALL_UNBUFFERED_DC( dc, this ); // Refresh the clip box to the entire screen size.
+ SetClipBox( dc );
+
+ display_rect = m_ClipBox;
+
+ // Slightly decreased the size of the useful screen area to avoid drawing limits.
+ #define PIXEL_MARGIN 8
+ display_rect.Inflate( -PIXEL_MARGIN );
+
+ return display_rect.Contains( aPosition );
+}
+
+
+void EDA_DRAW_PANEL::RefreshDrawingRect( const EDA_RECT& aRect, bool aEraseBackground )
+{
+ INSTALL_UNBUFFERED_DC( dc, this );
+
+ wxRect rect = aRect;
+
+ rect.x = dc.LogicalToDeviceX( rect.x );
+ rect.y = dc.LogicalToDeviceY( rect.y );
+ rect.width = dc.LogicalToDeviceXRel( rect.width );
+ rect.height = dc.LogicalToDeviceYRel( rect.height );
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "Refresh area: drawing (%d, %d, %d, %d), device (%d, %d, %d, %d)" ),
+ aRect.GetX(), aRect.GetY(), aRect.GetWidth(), aRect.GetHeight(),
+ rect.x, rect.y, rect.width, rect.height );
+
+ RefreshRect( rect, aEraseBackground );
+}
+
+
+void EDA_DRAW_PANEL::Refresh( bool eraseBackground, const wxRect* rect )
+{
+ if( GetParent()->IsGalCanvasActive() )
+ {
+ GetParent()->GetGalCanvas()->Refresh();
+ }
+ else
+ {
+ wxScrolledWindow::Refresh( eraseBackground, rect );
+ }
+}
+
+
+wxPoint EDA_DRAW_PANEL::GetScreenCenterLogicalPosition()
+{
+ wxSize size = GetClientSize() / 2;
+ INSTALL_UNBUFFERED_DC( dc, this );
+
+ return wxPoint( dc.DeviceToLogicalX( size.x ), dc.DeviceToLogicalY( size.y ) );
+}
+
+
+void EDA_DRAW_PANEL::MoveCursorToCrossHair()
+{
+ MoveCursor( GetParent()->GetCrossHairPosition() );
+}
+
+
+void EDA_DRAW_PANEL::MoveCursor( const wxPoint& aPosition )
+{
+ if( GetParent()->IsGalCanvasActive() )
+ return;
+
+ int x, y, xPpu, yPpu;
+ wxPoint screenPos, drawingPos;
+ wxRect clientRect( wxPoint( 0, 0 ), GetClientSize() );
+
+ INSTALL_UNBUFFERED_DC( dc, this );
+ screenPos.x = dc.LogicalToDeviceX( aPosition.x );
+ screenPos.y = dc.LogicalToDeviceY( aPosition.y );
+
+ // Scroll if the requested mouse position cursor is outside the drawing area.
+ if( !clientRect.Contains( screenPos ) )
+ {
+ GetViewStart( &x, &y );
+ GetScrollPixelsPerUnit( &xPpu, &yPpu );
+ CalcUnscrolledPosition( screenPos.x, screenPos.y, &drawingPos.x, &drawingPos.y );
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "MoveCursor() initial screen position(%d, %d) " ) \
+ wxT( "rectangle(%d, %d, %d, %d) view(%d, %d)" ),
+ screenPos.x, screenPos.y, clientRect.x, clientRect.y,
+ clientRect.width, clientRect.height, x, y );
+
+ if( screenPos.y < clientRect.GetTop() )
+ y -= m_scrollIncrementY * yPpu;
+ else if( screenPos.y > clientRect.GetBottom() )
+ y += m_scrollIncrementY * yPpu;
+ else if( clientRect.GetRight() < screenPos.x )
+ x += m_scrollIncrementX * xPpu;
+ else
+ x -= m_scrollIncrementX * xPpu;
+
+ Scroll( x, y );
+ CalcScrolledPosition( drawingPos.x, drawingPos.y, &screenPos.x, &screenPos.y );
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "MoveCursor() scrolled screen position(%d, %d) view(%d, %d)" ),
+ screenPos.x, screenPos.y, x, y );
+ }
+
+ WarpPointer( screenPos.x, screenPos.y );
+}
+
+
+void EDA_DRAW_PANEL::OnActivate( wxActivateEvent& event )
+{
+ m_canStartBlock = -1; // Block Command can't start
+ event.Skip();
+}
+
+
+void EDA_DRAW_PANEL::OnScroll( wxScrollWinEvent& event )
+{
+ int id = event.GetEventType();
+ int x, y;
+ int ppux, ppuy;
+ int csizeX, csizeY;
+ int unitsX, unitsY;
+
+ GetViewStart( &x, &y );
+ GetScrollPixelsPerUnit( &ppux, &ppuy );
+ GetClientSize( &csizeX, &csizeY );
+ GetVirtualSize( &unitsX, &unitsY );
+
+ int tmpX = x;
+ int tmpY = y;
+
+ csizeX /= ppux;
+ csizeY /= ppuy;
+
+ unitsX /= ppux;
+ unitsY /= ppuy;
+
+ int dir = event.GetOrientation(); // wxHORIZONTAL or wxVERTICAL
+
+ // On windows and on wxWidgets >= 2.9.5 and < 3.1,
+ // there is a bug in mousewheel event which always generates 2 scroll events
+ // (should be the case only for the default mousewheel event)
+ // with id = wxEVT_SCROLLWIN_LINEUP or wxEVT_SCROLLWIN_LINEDOWN
+ // so we skip these events.
+ // Note they are here just in case, because they are not actually used
+ // in Kicad
+#if wxCHECK_VERSION( 3, 1, 0 ) || !wxCHECK_VERSION( 2, 9, 5 ) || ( !defined (__WINDOWS__) && !defined (__WXMAC__) )
+ int maxX = unitsX - csizeX;
+ int maxY = unitsY - csizeY;
+
+ if( id == wxEVT_SCROLLWIN_LINEUP )
+ {
+ if( dir == wxHORIZONTAL )
+ {
+ x -= m_scrollIncrementX;
+
+ if( x < 0 )
+ x = 0;
+ }
+ else
+ {
+ y -= m_scrollIncrementY;
+
+ if( y < 0 )
+ y = 0;
+ }
+ }
+ else if( id == wxEVT_SCROLLWIN_LINEDOWN )
+ {
+ if( dir == wxHORIZONTAL )
+ {
+ x += m_scrollIncrementX;
+ if( x > maxX )
+ x = maxX;
+ }
+ else
+ {
+ y += m_scrollIncrementY;
+
+ if( y > maxY )
+ y = maxY;
+ }
+ }
+ else
+#endif
+ if( id == wxEVT_SCROLLWIN_THUMBTRACK )
+ {
+ if( dir == wxHORIZONTAL )
+ x = event.GetPosition();
+ else
+ y = event.GetPosition();
+ }
+ else
+ {
+ event.Skip();
+ return;
+ }
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "Setting scroll bars ppuX=%d, ppuY=%d, unitsX=%d, unitsY=%d, posX=%d, posY=%d" ),
+ ppux, ppuy, unitsX, unitsY, x, y );
+
+ double scale = GetParent()->GetScreen()->GetScalingFactor();
+
+ wxPoint center = GetParent()->GetScrollCenterPosition();
+ center.x += KiROUND( (double) ( x - tmpX ) / scale );
+ center.y += KiROUND( (double) ( y - tmpY ) / scale );
+ GetParent()->SetScrollCenterPosition( center );
+
+ Scroll( x, y );
+ event.Skip();
+}
+
+
+void EDA_DRAW_PANEL::SetClipBox( wxDC& aDC, const wxRect* aRect )
+{
+ wxRect clipBox;
+
+ // Use the entire visible device area if no clip area was defined.
+ if( aRect == NULL )
+ {
+ BASE_SCREEN* Screen = GetScreen();
+
+ if( !Screen )
+ return;
+
+ Screen->m_StartVisu = CalcUnscrolledPosition( wxPoint( 0, 0 ) );
+ clipBox.SetSize( GetClientSize() );
+
+ int scrollX, scrollY;
+
+ double scalar = Screen->GetScalingFactor();
+ scrollX = KiROUND( Screen->GetGridSize().x * scalar );
+ scrollY = KiROUND( Screen->GetGridSize().y * scalar );
+
+ m_scrollIncrementX = std::max( GetClientSize().x / 8, scrollX );
+ m_scrollIncrementY = std::max( GetClientSize().y / 8, scrollY );
+ Screen->m_ScrollbarPos.x = GetScrollPos( wxHORIZONTAL );
+ Screen->m_ScrollbarPos.y = GetScrollPos( wxVERTICAL );
+ }
+ else
+ {
+ clipBox = *aRect;
+ }
+
+ // Pad clip box in device units.
+ clipBox.Inflate( CLIP_BOX_PADDING );
+
+ // Convert from device units to drawing units.
+ m_ClipBox.SetOrigin( wxPoint( aDC.DeviceToLogicalX( clipBox.x ),
+ aDC.DeviceToLogicalY( clipBox.y ) ) );
+ m_ClipBox.SetSize( wxSize( aDC.DeviceToLogicalXRel( clipBox.width ),
+ aDC.DeviceToLogicalYRel( clipBox.height ) ) );
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "Device clip box=(%d, %d, %d, %d), Logical clip box=(%d, %d, %d, %d)" ),
+ clipBox.x, clipBox.y, clipBox.width, clipBox.height,
+ m_ClipBox.GetX(), m_ClipBox.GetY(), m_ClipBox.GetWidth(), m_ClipBox.GetHeight() );
+}
+
+
+void EDA_DRAW_PANEL::EraseScreen( wxDC* DC )
+{
+ GRSetDrawMode( DC, GR_COPY );
+
+ EDA_COLOR_T bgColor = GetParent()->GetDrawBgColor();
+
+ GRSFilledRect( NULL, DC, m_ClipBox.GetX(), m_ClipBox.GetY(),
+ m_ClipBox.GetRight(), m_ClipBox.GetBottom(),
+ 0, bgColor, bgColor );
+
+ // Set to one (1) to draw bounding box validate bounding box calculation.
+#if DEBUG_SHOW_CLIP_RECT
+ EDA_RECT bBox = m_ClipBox;
+ GRRect( NULL, DC, bBox.GetOrigin().x, bBox.GetOrigin().y,
+ bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA );
+#endif
+}
+
+
+void EDA_DRAW_PANEL::DoPrepareDC( wxDC& dc )
+{
+ wxScrolledWindow::DoPrepareDC( dc );
+
+ if( GetScreen() != NULL )
+ {
+ double scale = GetScreen()->GetScalingFactor();
+ dc.SetUserScale( scale, scale );
+
+ wxPoint pt = GetScreen()->m_DrawOrg;
+ dc.SetLogicalOrigin( pt.x, pt.y );
+ }
+
+ SetClipBox( dc ); // Reset the clip box to the entire screen.
+ GRResetPenAndBrush( &dc );
+ dc.SetBackgroundMode( wxTRANSPARENT );
+}
+
+
+void EDA_DRAW_PANEL::OnPaint( wxPaintEvent& event )
+{
+ if( GetScreen() == NULL )
+ {
+ event.Skip();
+ return;
+ }
+
+ INSTALL_PAINTDC( paintDC, this );
+
+ wxRect region = GetUpdateRegion().GetBox();
+ SetClipBox( paintDC, &region );
+ ReDraw( &paintDC, true );
+}
+
+
+void EDA_DRAW_PANEL::ReDraw( wxDC* DC, bool erasebg )
+{
+ BASE_SCREEN* Screen = GetScreen();
+
+ if( Screen == NULL )
+ return;
+
+ EDA_COLOR_T bgColor = GetParent()->GetDrawBgColor();
+
+ if( ( bgColor != WHITE ) && ( bgColor != BLACK ) )
+ bgColor = BLACK;
+
+ if( bgColor == WHITE )
+ {
+ g_XorMode = GR_NXOR;
+ g_GhostColor = BLACK;
+ }
+ else
+ {
+ g_XorMode = GR_XOR;
+ g_GhostColor = WHITE;
+ }
+
+ GRResetPenAndBrush( DC );
+
+ DC->SetBackground( bgColor == BLACK ? *wxBLACK_BRUSH : *wxWHITE_BRUSH );
+ DC->SetBackgroundMode( wxSOLID );
+
+ if( erasebg )
+ EraseScreen( DC );
+
+ GetParent()->RedrawActiveWindow( DC, erasebg );
+
+ // Verfies that the clipping is working correctly. If these two sets of numbers are
+ // not the same or really close. The clipping algorithms are broken.
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "Clip box: (%d, %d, %d, %d), Draw extents (%d, %d, %d, %d)" ),
+ m_ClipBox.GetX(), m_ClipBox.GetY(), m_ClipBox.GetRight(), m_ClipBox.GetBottom(),
+ DC->MinX(), DC->MinY(), DC->MaxX(), DC->MaxY() );
+}
+
+
+void EDA_DRAW_PANEL::SetEnableMousewheelPan( bool aEnable )
+{
+ m_enableMousewheelPan = aEnable;
+
+ if( GetParent()->IsGalCanvasActive() )
+ GetParent()->GetGalCanvas()->GetViewControls()->EnableMousewheelPan( aEnable );
+}
+
+
+void EDA_DRAW_PANEL::SetEnableZoomNoCenter( bool aEnable )
+{
+ m_enableZoomNoCenter = aEnable;
+
+ if( GetParent()->IsGalCanvasActive() )
+ GetParent()->GetGalCanvas()->GetViewControls()->EnableCursorWarping( !aEnable );
+}
+
+
+void EDA_DRAW_PANEL::DrawBackGround( wxDC* DC )
+{
+ EDA_COLOR_T axis_color = BLUE;
+
+ GRSetDrawMode( DC, GR_COPY );
+
+ if( GetParent()->IsGridVisible() )
+ DrawGrid( DC );
+
+ // Draw axis
+ if( GetParent()->m_showAxis )
+ {
+ wxSize pageSize = GetParent()->GetPageSizeIU();
+
+ // Draw the Y axis
+ GRLine( &m_ClipBox, DC, 0, -pageSize.y, 0, pageSize.y, 0, axis_color );
+
+ // Draw the X axis
+ GRLine( &m_ClipBox, DC, -pageSize.x, 0, pageSize.x, 0, 0, axis_color );
+ }
+
+ if( GetParent()->m_showOriginAxis )
+ DrawAuxiliaryAxis( DC, GR_COPY );
+
+ if( GetParent()->m_showGridAxis )
+ DrawGridAxis( DC, GR_COPY, GetParent()->GetGridOrigin() );
+}
+
+
+void EDA_DRAW_PANEL::DrawGrid( wxDC* aDC )
+{
+ #define MIN_GRID_SIZE 10 // min grid size in pixels to allow drawing
+ BASE_SCREEN* screen = GetScreen();
+ wxRealPoint gridSize;
+ wxSize screenSize;
+ wxPoint org;
+ wxRealPoint screenGridSize;
+
+ /* The grid must be visible. this is possible only is grid value
+ * and zoom value are sufficient
+ */
+ gridSize = screen->GetGridSize();
+ screen->m_StartVisu = CalcUnscrolledPosition( wxPoint( 0, 0 ) );
+ screenSize = GetClientSize();
+
+ screenGridSize.x = aDC->LogicalToDeviceXRel( KiROUND( gridSize.x ) );
+ screenGridSize.y = aDC->LogicalToDeviceYRel( KiROUND( gridSize.y ) );
+
+ org = m_ClipBox.GetPosition();
+
+ if( screenGridSize.x < MIN_GRID_SIZE || screenGridSize.y < MIN_GRID_SIZE )
+ {
+ screenGridSize.x *= 2.0;
+ screenGridSize.y *= 2.0;
+ gridSize.x *= 2.0;
+ gridSize.y *= 2.0;
+ }
+
+ if( screenGridSize.x < MIN_GRID_SIZE || screenGridSize.y < MIN_GRID_SIZE )
+ return;
+
+ org = GetParent()->GetNearestGridPosition( org, &gridSize );
+
+ // Setting the nearest grid position can select grid points outside the clip box.
+ // Incrementing the start point by one grid step should prevent drawing grid points
+ // outside the clip box.
+ if( org.x < m_ClipBox.GetX() )
+ org.x += KiROUND( gridSize.x );
+
+ if( org.y < m_ClipBox.GetY() )
+ org.y += KiROUND( gridSize.y );
+
+ // Use a pixel based draw to display grid. There are a lot of calls, so the cost is
+ // high and grid is slowly drawn on some platforms. Please note that this should
+ // always be enabled until the bitmap based solution below is fixed.
+#ifndef __WXMAC__
+ GRSetColorPen( aDC, GetParent()->GetGridColor() );
+#else
+ // On mac (Cocoa), a point isn't a pixel and being of size 1 don't survive to antialiasing
+ GRSetColorPen( aDC, GetParent()->GetGridColor(), aDC->DeviceToLogicalXRel( 2 ) );
+#endif
+
+ int xpos;
+ double right = ( double ) m_ClipBox.GetRight();
+ double bottom = ( double ) m_ClipBox.GetBottom();
+
+#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
+ wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
+ if( gcdc )
+ {
+ wxGraphicsContext *gc = gcdc->GetGraphicsContext();
+
+ // Grid point size
+ const int gsz = 1;
+ const double w = aDC->DeviceToLogicalXRel( gsz );
+ const double h = aDC->DeviceToLogicalYRel( gsz );
+
+ // Use our own pen
+ wxPen pen( MakeColour( GetParent()->GetGridColor() ), h );
+ pen.SetCap( wxCAP_BUTT );
+ gc->SetPen( pen );
+
+ // draw grid
+ wxGraphicsPath path = gc->CreatePath();
+ for( double x = (double) org.x - w/2.0; x <= right - w/2.0; x += gridSize.x )
+ {
+ for( double y = (double) org.y; y <= bottom; y += gridSize.y )
+ {
+ path.MoveToPoint( x, y );
+ path.AddLineToPoint( x+w, y );
+ }
+ }
+ gc->StrokePath( path );
+ }
+ else
+#endif
+ {
+ GRSetColorPen( aDC, GetParent()->GetGridColor() );
+
+ for( double x = (double) org.x; x <= right; x += gridSize.x )
+ {
+ xpos = KiROUND( x );
+
+ for( double y = (double) org.y; y <= bottom; y += gridSize.y )
+ {
+ aDC->DrawPoint( xpos, KiROUND( y ) );
+ }
+ }
+ }
+}
+
+// Set to 1 to draw auxirilary axis as lines, 0 to draw as target (circle with cross)
+#define DRAW_AXIS_AS_LINES 0
+// Size in pixels of the target shape
+#define AXIS_SIZE_IN_PIXELS 15
+
+void EDA_DRAW_PANEL::DrawAuxiliaryAxis( wxDC* aDC, GR_DRAWMODE aDrawMode )
+{
+ wxPoint origin = GetParent()->GetAuxOrigin();
+
+ if( origin == wxPoint( 0, 0 ) )
+ return;
+
+ EDA_COLOR_T color = RED;
+
+ GRSetDrawMode( aDC, aDrawMode );
+
+#if DRAW_AXIS_AS_LINES
+ wxSize pageSize = GetParent()->GetPageSizeIU();
+ // Draw the Y axis
+ GRLine( &m_ClipBox, aDC, origin.x, -pageSize.y,
+ origin.x, pageSize.y, 0, color );
+
+ // Draw the X axis
+ GRLine( &m_ClipBox, aDC, -pageSize.x, origin.y,
+ pageSize.x, origin.y, 0, color );
+#else
+ int radius = aDC->DeviceToLogicalXRel( AXIS_SIZE_IN_PIXELS );
+ int linewidth = aDC->DeviceToLogicalXRel( 1 );
+
+ GRSetColorPen( aDC, color, linewidth );
+
+ GRLine( &m_ClipBox, aDC, origin.x, origin.y-radius,
+ origin.x, origin.y+radius, 0, color );
+
+ // Draw the + shape
+ GRLine( &m_ClipBox, aDC, origin.x-radius, origin.y,
+ origin.x+radius, origin.y, 0, color );
+
+ GRCircle( &m_ClipBox, aDC, origin, radius, linewidth, color );
+#endif
+}
+
+
+void EDA_DRAW_PANEL::DrawGridAxis( wxDC* aDC, GR_DRAWMODE aDrawMode, const wxPoint& aGridOrigin )
+{
+ if( !GetParent()->m_showGridAxis || ( !aGridOrigin.x && !aGridOrigin.y ) )
+ return;
+
+ EDA_COLOR_T color = GetParent()->GetGridColor();
+
+ GRSetDrawMode( aDC, aDrawMode );
+
+#if DRAW_AXIS_AS_LINES
+ wxSize pageSize = GetParent()->GetPageSizeIU();
+ // Draw the Y axis
+ GRLine( &m_ClipBox, aDC, aGridOrigin.x, -pageSize.y,
+ aGridOrigin.x, pageSize.y, 0, color );
+
+ // Draw the X axis
+ GRLine( &m_ClipBox, aDC, -pageSize.x, aGridOrigin.y,
+ pageSize.x, aGridOrigin.y, 0, color );
+#else
+ int radius = aDC->DeviceToLogicalXRel( AXIS_SIZE_IN_PIXELS );
+ int linewidth = aDC->DeviceToLogicalXRel( 1 );
+
+ GRSetColorPen( aDC, GetParent()->GetGridColor(), linewidth );
+
+ GRLine( &m_ClipBox, aDC, aGridOrigin.x-radius, aGridOrigin.y-radius,
+ aGridOrigin.x+radius, aGridOrigin.y+radius, 0, color );
+
+ // Draw the X shape
+ GRLine( &m_ClipBox, aDC, aGridOrigin.x+radius, aGridOrigin.y-radius,
+ aGridOrigin.x-radius, aGridOrigin.y+radius, 0, color );
+
+ GRCircle( &m_ClipBox, aDC, aGridOrigin, radius, linewidth, color );
+#endif
+}
+
+
+bool EDA_DRAW_PANEL::OnRightClick( wxMouseEvent& event )
+{
+ wxPoint pos;
+ wxMenu MasterMenu;
+
+ INSTALL_UNBUFFERED_DC( dc, this );
+
+ pos = event.GetLogicalPosition( dc );
+
+ if( !GetParent()->OnRightClick( pos, &MasterMenu ) )
+ return false;
+
+ GetParent()->AddMenuZoomAndGrid( &MasterMenu );
+
+ pos = event.GetPosition();
+ m_ignoreMouseEvents = true;
+ PopupMenu( &MasterMenu, pos );
+ // here, we are waiting for popup menu closing.
+ // Among different ways, it can be closed by clicking on the left mouse button.
+ // The expected behavior is to move the mouse cursor to its initial
+ // location, where the right click was made.
+ // However there is a case where the move cursor does not work as expected:
+ // when the user left clicks on the caption frame: the entire window is moved.
+ // Calling wxSafeYield avoid this behavior because it allows the left click
+ // to be proceeded before moving the mouse
+ wxSafeYield();
+
+ // Move the mouse cursor to its initial position:
+ MoveCursorToCrossHair();
+ m_ignoreMouseEvents = false;
+
+ return true;
+}
+
+
+void EDA_DRAW_PANEL::OnMouseEntering( wxMouseEvent& aEvent )
+{
+ // This is an ugly hack that fixes some cross hair display bugs when the mouse leaves the
+ // canvas area during middle button mouse panning.
+ if( m_cursorLevel != 0 )
+ m_cursorLevel = 0;
+
+ aEvent.Skip();
+}
+
+
+void EDA_DRAW_PANEL::OnMouseLeaving( wxMouseEvent& event )
+{
+ if( m_mouseCaptureCallback == NULL ) // No command in progress.
+ m_requestAutoPan = false;
+
+ if( !m_enableAutoPan || !m_requestAutoPan || m_ignoreMouseEvents )
+ return;
+
+ // Auto pan when mouse has left the client window
+ // Ensure the cross_hair position is updated,
+ // because it will be used to center the screen.
+ // We use a position inside the client window
+ wxRect area( wxPoint( 0, 0 ), GetClientSize() );
+ wxPoint cross_hair_pos = event.GetPosition();
+
+ // Certain window managers (e.g. awesome wm) incorrectly trigger "on leave" event,
+ // therefore test if the cursor has really left the panel area
+ if( !area.Contains( cross_hair_pos ) )
+ {
+ INSTALL_UNBUFFERED_DC( dc, this );
+ cross_hair_pos.x = dc.DeviceToLogicalX( cross_hair_pos.x );
+ cross_hair_pos.y = dc.DeviceToLogicalY( cross_hair_pos.y );
+
+ GetParent()->SetCrossHairPosition( cross_hair_pos );
+
+ wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_POPUP_ZOOM_CENTER );
+ cmd.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( cmd );
+ }
+
+ event.Skip();
+}
+
+
+void EDA_DRAW_PANEL::OnMouseWheel( wxMouseEvent& event )
+{
+ if( m_ignoreMouseEvents )
+ return;
+
+ wxRect rect = wxRect( wxPoint( 0, 0 ), GetClientSize() );
+
+ // Ignore scroll events if the cursor is outside the drawing area.
+ if( event.GetWheelRotation() == 0 || !GetParent()->IsEnabled()
+ || !rect.Contains( event.GetPosition() ) )
+ {
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "OnMouseWheel() position(%d, %d) rectangle(%d, %d, %d, %d)" ),
+ event.GetPosition().x, event.GetPosition().y,
+ rect.x, rect.y, rect.width, rect.height );
+ event.Skip();
+ return;
+ }
+
+ INSTALL_UNBUFFERED_DC( dc, this );
+ GetParent()->SetCrossHairPosition( event.GetLogicalPosition( dc ) );
+
+ wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
+ cmd.SetEventObject( this );
+
+ bool offCenterReq = event.ControlDown() && event.ShiftDown();
+ offCenterReq = offCenterReq || m_enableZoomNoCenter;
+
+ int axis = event.GetWheelAxis();
+ int wheelRotation = event.GetWheelRotation();
+
+ if( m_enableMousewheelPan )
+ {
+ wxPoint newStart = GetViewStart();
+ if( axis == wxMOUSE_WHEEL_HORIZONTAL )
+ newStart.x += wheelRotation;
+ else
+ newStart.y -= wheelRotation;
+
+ wxPoint center = GetScreenCenterLogicalPosition();
+ GetParent()->SetScrollCenterPosition( center );
+ Scroll( newStart );
+ }
+ else if( wheelRotation > 0 )
+ {
+ if( event.ShiftDown() && !event.ControlDown() )
+ cmd.SetId( ID_PAN_UP );
+ else if( event.ControlDown() && !event.ShiftDown() )
+ cmd.SetId( ID_PAN_LEFT );
+ else if( offCenterReq )
+ cmd.SetId( ID_OFFCENTER_ZOOM_IN );
+ else
+ cmd.SetId( ID_POPUP_ZOOM_IN );
+ }
+ else if( wheelRotation < 0 )
+ {
+ if( event.ShiftDown() && !event.ControlDown() )
+ cmd.SetId( ID_PAN_DOWN );
+ else if( event.ControlDown() && !event.ShiftDown() )
+ cmd.SetId( ID_PAN_RIGHT );
+ else if( offCenterReq )
+ cmd.SetId( ID_OFFCENTER_ZOOM_OUT );
+ else
+ cmd.SetId( ID_POPUP_ZOOM_OUT );
+ }
+
+ if( cmd.GetId() )
+ GetEventHandler()->ProcessEvent( cmd );
+ event.Skip();
+}
+
+
+#ifdef USE_OSX_MAGNIFY_EVENT
+void EDA_DRAW_PANEL::OnMagnify( wxMouseEvent& event )
+{
+ // Scale the panel around our cursor position.
+ bool warpCursor = false;
+
+ wxPoint cursorPosition = GetParent()->GetCursorPosition( false );
+ wxPoint centerPosition = GetParent()->GetScrollCenterPosition();
+ wxPoint vector = centerPosition - cursorPosition;
+
+ double magnification = ( event.GetMagnification() + 1.0f );
+ double scaleFactor = GetZoom() / magnification;
+
+ // Scale the vector between the cursor and center point
+ vector.x /= magnification;
+ vector.y /= magnification;
+
+ SetZoom(scaleFactor);
+
+ // Recenter the window along our scaled vector such that the
+ // cursor becomes our scale axis, remaining fixed on screen
+ GetParent()->RedrawScreen( cursorPosition + vector, warpCursor );
+
+ event.Skip();
+}
+#endif
+
+
+void EDA_DRAW_PANEL::OnMouseEvent( wxMouseEvent& event )
+{
+ int localrealbutt = 0, localbutt = 0;
+ BASE_SCREEN* screen = GetScreen();
+
+ if( !screen )
+ return;
+
+ /* Adjust value to filter mouse displacement before consider the drag
+ * mouse is really a drag command, not just a movement while click
+ */
+#define MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND 5
+
+ if( event.Leaving() )
+ m_canStartBlock = -1;
+
+ if( !IsMouseCaptured() ) // No mouse capture in progress.
+ m_requestAutoPan = false;
+
+ if( GetParent()->IsActive() )
+ SetFocus();
+ else
+ return;
+
+ if( !event.IsButton() && !event.Moving() && !event.Dragging() )
+ return;
+
+ if( event.RightDown() )
+ {
+ OnRightClick( event );
+ return;
+ }
+
+ if( m_ignoreMouseEvents )
+ return;
+
+ if( event.LeftIsDown() )
+ localrealbutt |= GR_M_LEFT_DOWN;
+
+ if( event.MiddleIsDown() )
+ localrealbutt |= GR_M_MIDDLE_DOWN;
+
+ if( event.LeftDown() )
+ localbutt = GR_M_LEFT_DOWN;
+
+ if( event.ButtonDClick( 1 ) )
+ localbutt = GR_M_LEFT_DOWN | GR_M_DCLICK;
+
+ if( event.MiddleDown() )
+ localbutt = GR_M_MIDDLE_DOWN;
+
+ localrealbutt |= localbutt; // compensation default wxGTK
+
+ INSTALL_UNBUFFERED_DC( DC, this );
+ DC.SetBackground( *wxBLACK_BRUSH );
+
+ // Compute the cursor position in drawing (logical) units.
+ GetParent()->SetMousePosition( event.GetLogicalPosition( DC ) );
+
+ int kbstat = 0;
+
+ if( event.ShiftDown() )
+ kbstat |= GR_KB_SHIFT;
+
+ if( event.ControlDown() )
+ kbstat |= GR_KB_CTRL;
+
+ if( event.AltDown() )
+ kbstat |= GR_KB_ALT;
+
+ // Calling Double Click and Click functions :
+ if( localbutt == (int) ( GR_M_LEFT_DOWN | GR_M_DCLICK ) )
+ {
+ GetParent()->OnLeftDClick( &DC, GetParent()->RefPos( true ) );
+
+ // inhibit a response to the mouse left button release,
+ // because we have a double click, and we do not want a new
+ // OnLeftClick command at end of this Double Click
+ m_ignoreNextLeftButtonRelease = true;
+ }
+ else if( event.LeftUp() )
+ {
+ // A block command is in progress: a left up is the end of block
+ // or this is the end of a double click, already seen
+ // Note also m_ignoreNextLeftButtonRelease can be set by
+ // the call to OnLeftClick(), so do not change it after calling OnLeftClick
+ bool ignoreEvt = m_ignoreNextLeftButtonRelease;
+ m_ignoreNextLeftButtonRelease = false;
+
+ if( screen->m_BlockLocate.GetState() == STATE_NO_BLOCK && !ignoreEvt )
+ GetParent()->OnLeftClick( &DC, GetParent()->RefPos( true ) );
+
+ }
+ else if( !event.LeftIsDown() )
+ {
+ /* be sure there is a response to a left button release command
+ * even when a LeftUp event is not seen. This happens when a
+ * double click opens a dialog box, and the release mouse button
+ * is made when the dialog box is opened.
+ */
+ m_ignoreNextLeftButtonRelease = false;
+ }
+
+ if( event.ButtonDown( wxMOUSE_BTN_MIDDLE ) && m_enableMiddleButtonPan )
+ {
+ if( m_panScrollbarLimits )
+ {
+ int ppux, ppuy;
+ GetScrollPixelsPerUnit( &ppux, &ppuy );
+ GetViewStart( &m_PanStartCenter.x, &m_PanStartCenter.y );
+ m_PanStartCenter.x *= ppux;
+ m_PanStartCenter.y *= ppuy;
+ }
+ else
+ m_PanStartCenter = GetParent()->GetScrollCenterPosition();
+
+ m_PanStartEventPosition = event.GetPosition();
+
+ INSTALL_UNBUFFERED_DC( dc, this );
+ CrossHairOff( &dc );
+ }
+
+ if( event.ButtonUp( wxMOUSE_BTN_MIDDLE ) && m_enableMiddleButtonPan )
+ {
+ INSTALL_UNBUFFERED_DC( dc, this );
+ CrossHairOn( &dc );
+ }
+
+ if( event.MiddleIsDown() && m_enableMiddleButtonPan )
+ {
+ wxPoint currentPosition = event.GetPosition();
+
+ if( m_panScrollbarLimits )
+ {
+ int x, y;
+ int tmpX, tmpY;
+ int ppux, ppuy;
+ int maxX, maxY;
+ int vsizeX, vsizeY;
+ int csizeX, csizeY;
+
+ GetViewStart( &tmpX, &tmpY );
+ GetScrollPixelsPerUnit( &ppux, &ppuy );
+ GetVirtualSize( &vsizeX, &vsizeY );
+ GetClientSize( &csizeX, &csizeY );
+
+ maxX = vsizeX - csizeX;
+ maxY = vsizeY - csizeY;
+
+ x = m_PanStartCenter.x + m_PanStartEventPosition.x - currentPosition.x;
+ y = m_PanStartCenter.y + m_PanStartEventPosition.y - currentPosition.y;
+
+ bool shouldMoveCursor = false;
+
+ if( x < 0 )
+ {
+ currentPosition.x += x;
+ x = 0;
+ shouldMoveCursor = true;
+ }
+
+ if( y < 0 )
+ {
+ currentPosition.y += y;
+ y = 0;
+ shouldMoveCursor = true;
+ }
+
+ if( x > maxX )
+ {
+ currentPosition.x += ( x - maxX );
+ x = maxX;
+ shouldMoveCursor = true;
+ }
+
+ if( y > maxY )
+ {
+ currentPosition.y += ( y - maxY );
+ y = maxY;
+ shouldMoveCursor = true;
+ }
+
+ if( shouldMoveCursor )
+ WarpPointer( currentPosition.x, currentPosition.y );
+
+ Scroll( x/ppux, y/ppuy );
+
+ double scale = GetParent()->GetScreen()->GetScalingFactor();
+
+ wxPoint center = GetParent()->GetScrollCenterPosition();
+ center.x += KiROUND( (double) ( x - tmpX ) / scale ) / ppux;
+ center.y += KiROUND( (double) ( y - tmpY ) / scale ) / ppuy;
+ GetParent()->SetScrollCenterPosition( center );
+
+ Refresh();
+ Update();
+ }
+ else
+ {
+ double scale = GetParent()->GetScreen()->GetScalingFactor();
+ int x = m_PanStartCenter.x +
+ KiROUND( (double) ( m_PanStartEventPosition.x - currentPosition.x ) / scale );
+ int y = m_PanStartCenter.y +
+ KiROUND( (double) ( m_PanStartEventPosition.y - currentPosition.y ) / scale );
+
+ GetParent()->RedrawScreen( wxPoint( x, y ), false );
+ }
+ }
+
+ if( event.ButtonUp( wxMOUSE_BTN_MIDDLE ) && !m_enableMiddleButtonPan &&
+ (screen->m_BlockLocate.GetState() == STATE_NO_BLOCK) )
+ {
+ // The middle button has been released, with no block command:
+ // We use it for a zoom center at cursor position command
+ wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_POPUP_ZOOM_CENTER );
+ cmd.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( cmd );
+ }
+
+ // Calling the general function on mouse changes (and pseudo key commands)
+ GetParent()->GeneralControl( &DC, event.GetLogicalPosition( DC ), 0 );
+
+ /*******************************/
+ /* Control of block commands : */
+ /*******************************/
+
+ // Command block can't start if mouse is dragging a new panel
+ static EDA_DRAW_PANEL* lastPanel;
+ if( lastPanel != this )
+ {
+ m_minDragEventCount = 0;
+ m_canStartBlock = -1;
+ }
+
+ /* A new command block can start after a release buttons
+ * and if the drag is enough
+ * This is to avoid a false start block when a dialog box is dismissed,
+ * or when changing panels in hierarchy navigation
+ * or when clicking while and moving mouse
+ */
+ if( !event.LeftIsDown() && !event.MiddleIsDown() )
+ {
+ m_minDragEventCount = 0;
+ m_canStartBlock = 0;
+
+ /* Remember the last cursor position when a drag mouse starts
+ * this is the last position ** before ** clicking a button
+ * this is useful to start a block command from the point where the
+ * mouse was clicked first
+ * (a filter creates a delay for the real block command start, and
+ * we must remember this point)
+ */
+ m_CursorStartPos = GetParent()->GetCrossHairPosition();
+ }
+
+ if( m_enableBlockCommands && !(localbutt & GR_M_DCLICK) )
+ {
+ if( !screen->IsBlockActive() )
+ {
+ screen->m_BlockLocate.SetOrigin( m_CursorStartPos );
+ }
+
+ if( event.LeftDown() || ( !m_enableMiddleButtonPan && event.MiddleDown() ) )
+ {
+ if( screen->m_BlockLocate.GetState() == STATE_BLOCK_MOVE )
+ {
+ m_requestAutoPan = false;
+ GetParent()->HandleBlockPlace( &DC );
+ m_ignoreNextLeftButtonRelease = true;
+ }
+ }
+ else if( ( m_canStartBlock >= 0 )
+ && ( event.LeftIsDown() || ( !m_enableMiddleButtonPan && event.MiddleIsDown() ) )
+ && !IsMouseCaptured() )
+ {
+ // Mouse is dragging: if no block in progress, start a block command.
+ if( screen->m_BlockLocate.GetState() == STATE_NO_BLOCK )
+ {
+ // Start a block command
+ int cmd_type = kbstat;
+
+ if( !m_enableMiddleButtonPan && event.MiddleIsDown() )
+ cmd_type |= MOUSE_MIDDLE;
+
+ // A block command is started if the drag is enough. A small
+ // drag is ignored (it is certainly a little mouse move when
+ // clicking) not really a drag mouse
+ if( m_minDragEventCount < MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND )
+ m_minDragEventCount++;
+ else
+ {
+ if( !GetParent()->HandleBlockBegin( &DC, cmd_type, m_CursorStartPos ) )
+ {
+ // should not occur: error
+ GetParent()->DisplayToolMsg(
+ wxT( "EDA_DRAW_PANEL::OnMouseEvent() Block Error" ) );
+ }
+ else
+ {
+ m_requestAutoPan = true;
+ SetCursor( wxCURSOR_SIZING );
+ }
+ }
+ }
+ }
+
+ if( event.ButtonUp( wxMOUSE_BTN_LEFT ) ||
+ ( !m_enableMiddleButtonPan && event.ButtonUp( wxMOUSE_BTN_MIDDLE ) ) )
+ {
+ /* Release the mouse button: end of block.
+ * The command can finish (DELETE) or have a next command (MOVE,
+ * COPY). However the block command is canceled if the block
+ * size is small because a block command filtering is already
+ * made, this case happens, but only when the on grid cursor has
+ * not moved.
+ */
+ #define BLOCK_MINSIZE_LIMIT 1
+ bool BlockIsSmall =
+ ( std::abs( screen->m_BlockLocate.GetWidth() ) < BLOCK_MINSIZE_LIMIT )
+ && ( std::abs( screen->m_BlockLocate.GetHeight() ) < BLOCK_MINSIZE_LIMIT );
+
+ if( (screen->m_BlockLocate.GetState() != STATE_NO_BLOCK) && BlockIsSmall )
+ {
+ if( m_endMouseCaptureCallback )
+ {
+ m_endMouseCaptureCallback( this, &DC );
+ m_requestAutoPan = false;
+ }
+
+ SetCursor( (wxStockCursor) m_currentCursor );
+ }
+ else if( screen->m_BlockLocate.GetState() == STATE_BLOCK_END )
+ {
+ m_requestAutoPan = false;
+ GetParent()->HandleBlockEnd( &DC );
+ SetCursor( (wxStockCursor) m_currentCursor );
+ if( screen->m_BlockLocate.GetState() == STATE_BLOCK_MOVE )
+ {
+ m_requestAutoPan = true;
+ SetCursor( wxCURSOR_HAND );
+ }
+ }
+ }
+ }
+
+ // End of block command on a double click
+ // To avoid an unwanted block move command if the mouse is moved while double clicking
+ if( localbutt == (int) ( GR_M_LEFT_DOWN | GR_M_DCLICK ) )
+ {
+ if( !screen->IsBlockActive() && IsMouseCaptured() )
+ {
+ m_endMouseCaptureCallback( this, &DC );
+ }
+ }
+
+#if 0
+ wxString msg_debug;
+ msg_debug.Printf( " block state %d, cmd %d",
+ screen->m_BlockLocate.GetState(),
+ screen->m_BlockLocate.GetCommand() );
+ GetParent()->PrintMsg( msg_debug );
+#endif
+
+ lastPanel = this;
+}
+
+
+
+void EDA_DRAW_PANEL::OnCharHook( wxKeyEvent& event )
+{
+ event.Skip();
+}
+
+void EDA_DRAW_PANEL::OnKeyEvent( wxKeyEvent& event )
+{
+ int localkey;
+ wxPoint pos;
+
+ localkey = event.GetKeyCode();
+
+ switch( localkey )
+ {
+ default:
+ break;
+
+ case WXK_ESCAPE:
+ m_abortRequest = true;
+
+ if( IsMouseCaptured() )
+ EndMouseCapture();
+ else
+ EndMouseCapture( ID_NO_TOOL_SELECTED, m_defaultCursor, wxEmptyString );
+ break;
+ }
+
+ /* Normalize keys code to easily handle keys from Ctrl+A to Ctrl+Z
+ * They have an ascii code from 1 to 27 remapped
+ * to GR_KB_CTRL + 'A' to GR_KB_CTRL + 'Z'
+ */
+ if( event.ControlDown() && localkey >= WXK_CONTROL_A && localkey <= WXK_CONTROL_Z )
+ localkey += 'A' - 1;
+
+ /* Disallow shift for keys that have two keycodes on them (e.g. number and
+ * punctuation keys) leaving only the "letter keys" of A-Z.
+ * Then, you can have, e.g. Ctrl-5 and Ctrl-% (GB layout)
+ * and Ctrl-( and Ctrl-5 (FR layout).
+ * Otherwise, you'd have to have to say Ctrl-Shift-5 on a FR layout
+ */
+ bool keyIsLetter = ( localkey >= 'A' && localkey <= 'Z' ) ||
+ ( localkey >= 'a' && localkey <= 'z' );
+
+ if( event.ShiftDown() && ( keyIsLetter || localkey > 256 ) )
+ localkey |= GR_KB_SHIFT;
+
+ if( event.ControlDown() )
+ localkey |= GR_KB_CTRL;
+
+ if( event.AltDown() )
+ localkey |= GR_KB_ALT;
+
+ INSTALL_UNBUFFERED_DC( DC, this );
+
+ // Some key commands use the current mouse position: refresh it.
+ pos = wxGetMousePosition() - GetScreenPosition();
+
+ // Compute the cursor position in drawing units. Also known as logical units to wxDC.
+ pos = wxPoint( DC.DeviceToLogicalX( pos.x ), DC.DeviceToLogicalY( pos.y ) );
+
+ GetParent()->SetMousePosition( pos );
+
+ if( !GetParent()->GeneralControl( &DC, pos, localkey ) )
+ event.Skip();
+}
+
+
+void EDA_DRAW_PANEL::OnPan( wxCommandEvent& event )
+{
+ int x, y;
+ int ppux, ppuy;
+ int unitsX, unitsY;
+ int maxX, maxY;
+ int tmpX, tmpY;
+
+ GetViewStart( &x, &y );
+ GetScrollPixelsPerUnit( &ppux, &ppuy );
+ GetVirtualSize( &unitsX, &unitsY );
+ tmpX = x;
+ tmpY = y;
+ maxX = unitsX;
+ maxY = unitsY;
+ unitsX /= ppux;
+ unitsY /= ppuy;
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "Scroll center position before pan: (%d, %d)" ), tmpX, tmpY );
+
+ switch( event.GetId() )
+ {
+ case ID_PAN_UP:
+ y -= m_scrollIncrementY;
+ break;
+
+ case ID_PAN_DOWN:
+ y += m_scrollIncrementY;
+ break;
+
+ case ID_PAN_LEFT:
+ x -= m_scrollIncrementX;
+ break;
+
+ case ID_PAN_RIGHT:
+ x += m_scrollIncrementX;
+ break;
+
+ default:
+ wxLogDebug( wxT( "Unknown ID %d in EDA_DRAW_PANEL::OnPan()." ), event.GetId() );
+ }
+
+ bool updateCenterScrollPos = true;
+
+ if( x < 0 )
+ {
+ x = 0;
+ updateCenterScrollPos = false;
+ }
+
+ if( y < 0 )
+ {
+ y = 0;
+ updateCenterScrollPos = false;
+ }
+
+ if( x > maxX )
+ {
+ x = maxX;
+ updateCenterScrollPos = false;
+ }
+
+ if( y > maxY )
+ {
+ y = maxY;
+ updateCenterScrollPos = false;
+ }
+
+ // Don't update the scroll position beyond the scroll limits.
+ if( updateCenterScrollPos )
+ {
+ double scale = GetParent()->GetScreen()->GetScalingFactor();
+
+ wxPoint center = GetParent()->GetScrollCenterPosition();
+ center.x += KiROUND( (double) ( x - tmpX ) / scale );
+ center.y += KiROUND( (double) ( y - tmpY ) / scale );
+ GetParent()->SetScrollCenterPosition( center );
+
+ wxLogTrace( KICAD_TRACE_COORDS,
+ wxT( "Scroll center position after pan: (%d, %d)" ), center.x, center.y );
+ }
+
+ Scroll( x/ppux, y/ppuy );
+}
+
+
+void EDA_DRAW_PANEL::EndMouseCapture( int id, int cursor, const wxString& title,
+ bool aCallEndFunc )
+{
+ if( m_mouseCaptureCallback && m_endMouseCaptureCallback && aCallEndFunc )
+ {
+ INSTALL_UNBUFFERED_DC( dc, this );
+ m_endMouseCaptureCallback( this, &dc );
+ }
+
+ m_mouseCaptureCallback = NULL;
+ m_endMouseCaptureCallback = NULL;
+ m_requestAutoPan = false;
+
+ if( id != -1 && cursor != -1 )
+ {
+ wxASSERT( cursor > wxCURSOR_NONE && cursor < wxCURSOR_MAX );
+ GetParent()->SetToolID( id, cursor, title );
+ }
+}
+
+
+void EDA_DRAW_PANEL::CallMouseCapture( wxDC* aDC, const wxPoint& aPosition, bool aErase )
+{
+ wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
+ wxCHECK_RET( m_mouseCaptureCallback != NULL, wxT( "Mouse capture callback not set." ) );
+
+ m_mouseCaptureCallback( this, aDC, aPosition, aErase );
+}
+
+
+void EDA_DRAW_PANEL::CallEndMouseCapture( wxDC* aDC )
+{
+ wxCHECK_RET( aDC != NULL, wxT( "Invalid device context." ) );
+
+ // CallEndMouseCapture is sometimes called with m_endMouseCaptureCallback == NULL
+ // for instance after an ABORT in block paste.
+ if( m_endMouseCaptureCallback )
+ m_endMouseCaptureCallback( this, aDC );
+}
diff --git a/common/draw_panel_gal.cpp b/common/draw_panel_gal.cpp
new file mode 100644
index 0000000..2cd2e4c
--- /dev/null
+++ b/common/draw_panel_gal.cpp
@@ -0,0 +1,415 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/wx.h>
+#include <wx/frame.h>
+#include <wx/window.h>
+#include <wx/event.h>
+#include <wx/colour.h>
+#include <wx/filename.h>
+#include <confirm.h>
+
+#include <class_draw_panel_gal.h>
+#include <view/view.h>
+#include <view/wx_view_controls.h>
+#include <pcb_painter.h>
+
+#include <gal/graphics_abstraction_layer.h>
+#include <gal/opengl/opengl_gal.h>
+#include <gal/cairo/cairo_gal.h>
+
+#include <tool/tool_dispatcher.h>
+#include <tool/tool_manager.h>
+
+#include <boost/foreach.hpp>
+
+#ifdef __WXDEBUG__
+#include <profile.h>
+#endif /* __WXDEBUG__ */
+
+EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId,
+ const wxPoint& aPosition, const wxSize& aSize,
+ GAL_TYPE aGalType ) :
+ wxScrolledCanvas( aParentWindow, aWindowId, aPosition, aSize )
+{
+ m_parent = aParentWindow;
+ m_gal = NULL;
+ m_backend = GAL_TYPE_NONE;
+ m_view = NULL;
+ m_painter = NULL;
+ m_eventDispatcher = NULL;
+ m_lostFocus = false;
+
+ SetLayoutDirection( wxLayout_LeftToRight );
+
+ SwitchBackend( aGalType );
+ SetBackgroundStyle( wxBG_STYLE_CUSTOM );
+
+// Scrollbars broken in GAL on OSX
+#ifdef __WXMAC__
+ ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_NEVER );
+#else
+ ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
+#endif
+ EnableScrolling( false, false ); // otherwise Zoom Auto disables GAL canvas
+
+ m_painter = new KIGFX::PCB_PAINTER( m_gal );
+
+ m_view = new KIGFX::VIEW( true );
+ m_view->SetPainter( m_painter );
+ m_view->SetGAL( m_gal );
+
+ Connect( wxEVT_SIZE, wxSizeEventHandler( EDA_DRAW_PANEL_GAL::onSize ), NULL, this );
+ Connect( wxEVT_ENTER_WINDOW, wxEventHandler( EDA_DRAW_PANEL_GAL::onEnter ), NULL, this );
+ Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( EDA_DRAW_PANEL_GAL::onLostFocus ), NULL, this );
+
+ const wxEventType events[] =
+ {
+ wxEVT_LEFT_UP, wxEVT_LEFT_DOWN, wxEVT_LEFT_DCLICK,
+ wxEVT_RIGHT_UP, wxEVT_RIGHT_DOWN, wxEVT_RIGHT_DCLICK,
+ wxEVT_MIDDLE_UP, wxEVT_MIDDLE_DOWN, wxEVT_MIDDLE_DCLICK,
+ wxEVT_MOTION, wxEVT_MOUSEWHEEL, wxEVT_CHAR,
+#ifdef USE_OSX_MAGNIFY_EVENT
+ wxEVT_MAGNIFY,
+#endif
+ KIGFX::WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE
+ };
+
+ BOOST_FOREACH( wxEventType eventType, events )
+ {
+ Connect( eventType, wxEventHandler( EDA_DRAW_PANEL_GAL::onEvent ),
+ NULL, m_eventDispatcher );
+ }
+
+ // View controls is the first in the event handler chain, so the Tool Framework operates
+ // on updated viewport data.
+ m_viewControls = new KIGFX::WX_VIEW_CONTROLS( m_view, this );
+
+ // Set up timer that prevents too frequent redraw commands
+ m_refreshTimer.SetOwner( this );
+ m_pendingRefresh = false;
+ m_drawing = false;
+ m_drawingEnabled = false;
+ Connect( wxEVT_TIMER, wxTimerEventHandler( EDA_DRAW_PANEL_GAL::onRefreshTimer ), NULL, this );
+}
+
+
+EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL()
+{
+ delete m_painter;
+ delete m_viewControls;
+ delete m_view;
+ delete m_gal;
+}
+
+
+void EDA_DRAW_PANEL_GAL::SetFocus()
+{
+// Windows has a strange manner on bringing up and activating windows
+// containing a GAL canvas just after moving the mouse cursor into its area.
+// Feel free to uncomment or extend the following #ifdef if you experience
+// similar problems on your platform.
+#ifdef __WINDOWS__
+ if( !GetParent()->IsDescendant( wxWindow::FindFocus() ) )
+ return;
+#endif
+
+ wxScrolledCanvas::SetFocus();
+ m_lostFocus = false;
+}
+
+
+void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
+{
+ m_pendingRefresh = false;
+
+ if( m_drawing )
+ return;
+
+ m_drawing = true;
+
+// Scrollbars broken in GAL on OSX
+#ifndef __WXMAC__
+ m_viewControls->UpdateScrollbars();
+#endif
+
+ m_view->UpdateItems();
+ m_gal->BeginDrawing();
+ m_gal->ClearScreen( m_painter->GetSettings()->GetBackgroundColor() );
+
+ KIGFX::COLOR4D gridColor = static_cast<KIGFX::PCB_RENDER_SETTINGS*> (m_painter->GetSettings())->GetLayerColor( ITEM_GAL_LAYER ( GRID_VISIBLE ) );
+ m_gal->SetGridColor ( gridColor );
+
+ if( m_view->IsDirty() )
+ {
+ m_view->ClearTargets();
+
+ // Grid has to be redrawn only when the NONCACHED target is redrawn
+ if( m_view->IsTargetDirty( KIGFX::TARGET_NONCACHED ) )
+ m_gal->DrawGrid();
+
+ m_view->Redraw();
+ }
+
+ m_gal->DrawCursor( m_viewControls->GetCursorPosition() );
+ m_gal->EndDrawing();
+
+ m_lastRefresh = wxGetLocalTimeMillis();
+ m_drawing = false;
+}
+
+
+void EDA_DRAW_PANEL_GAL::onSize( wxSizeEvent& aEvent )
+{
+ m_gal->ResizeScreen( aEvent.GetSize().x, aEvent.GetSize().y );
+ m_view->MarkTargetDirty( KIGFX::TARGET_CACHED );
+ m_view->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
+}
+
+
+void EDA_DRAW_PANEL_GAL::Refresh( bool aEraseBackground, const wxRect* aRect )
+{
+ if( m_pendingRefresh )
+ return;
+
+ m_pendingRefresh = true;
+
+#ifdef __WXMAC__
+ // Timers on OS X may have a high latency (seen up to 500ms and more) which
+ // makes repaints jerky. No negative impact seen without throttling, so just
+ // do an unconditional refresh for OS X.
+ ForceRefresh();
+#else
+ wxLongLong t = wxGetLocalTimeMillis();
+ wxLongLong delta = t - m_lastRefresh;
+
+ if( delta >= MinRefreshPeriod )
+ {
+ ForceRefresh();
+ }
+ else
+ {
+ // One shot timer
+ m_refreshTimer.Start( ( MinRefreshPeriod - delta ).ToLong(), true );
+ }
+#endif
+}
+
+
+void EDA_DRAW_PANEL_GAL::ForceRefresh()
+{
+ wxPaintEvent redrawEvent;
+ wxPostEvent( this, redrawEvent );
+}
+
+
+void EDA_DRAW_PANEL_GAL::SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher )
+{
+ m_eventDispatcher = aEventDispatcher;
+ const wxEventType eventTypes[] = { wxEVT_TOOL };
+
+ if( m_eventDispatcher )
+ {
+ BOOST_FOREACH( wxEventType type, eventTypes )
+ {
+ m_parent->Connect( type, wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
+ NULL, m_eventDispatcher );
+ }
+ }
+ else
+ {
+ BOOST_FOREACH( wxEventType type, eventTypes )
+ {
+ // While loop is used to be sure that all event handlers are removed.
+ while( m_parent->Disconnect( type,
+ wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ),
+ NULL, m_eventDispatcher ) );
+ }
+ }
+}
+
+
+void EDA_DRAW_PANEL_GAL::StartDrawing()
+{
+ // Start querying GAL if it is ready
+ m_refreshTimer.StartOnce( 100 );
+}
+
+
+void EDA_DRAW_PANEL_GAL::StopDrawing()
+{
+ m_drawingEnabled = false;
+ Disconnect( wxEVT_PAINT, wxPaintEventHandler( EDA_DRAW_PANEL_GAL::onPaint ), NULL, this );
+ m_pendingRefresh = false;
+ m_drawing = true;
+ m_refreshTimer.Stop();
+}
+
+
+void EDA_DRAW_PANEL_GAL::SetHighContrastLayer( LAYER_ID aLayer )
+{
+ // Set display settings for high contrast mode
+ KIGFX::RENDER_SETTINGS* rSettings = m_view->GetPainter()->GetSettings();
+
+ SetTopLayer( aLayer );
+
+ rSettings->ClearActiveLayers();
+ rSettings->SetActiveLayer( aLayer );
+
+ m_view->UpdateAllLayersColor();
+}
+
+
+void EDA_DRAW_PANEL_GAL::SetTopLayer( LAYER_ID aLayer )
+{
+ m_view->ClearTopLayers();
+ m_view->SetTopLayer( aLayer );
+ m_view->UpdateAllLayersOrder();
+}
+
+
+double EDA_DRAW_PANEL_GAL::GetLegacyZoom() const
+{
+ double zoomFactor = m_gal->GetWorldScale() / m_gal->GetZoomFactor();
+ return ( 1.0 / ( zoomFactor * m_view->GetScale() ) );
+}
+
+
+bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
+{
+ // Do not do anything if the currently used GAL is correct
+ if( aGalType == m_backend && m_gal != NULL )
+ return true;
+
+ bool result = true; // assume everything will be fine
+
+ // Prevent refreshing canvas during backend switch
+ StopDrawing();
+
+ KIGFX::GAL* new_gal = NULL;
+
+ try
+ {
+ switch( aGalType )
+ {
+ case GAL_TYPE_OPENGL:
+ new_gal = new KIGFX::OPENGL_GAL( this, this, this );
+ break;
+
+ case GAL_TYPE_CAIRO:
+ new_gal = new KIGFX::CAIRO_GAL( this, this, this );
+ break;
+
+ default:
+ assert( false );
+ // warn about unhandled GAL canvas type, but continue with the fallback option
+
+ case GAL_TYPE_NONE:
+ // KIGFX::GAL is a stub - it actually does cannot display anything,
+ // but prevents code relying on GAL canvas existence from crashing
+ new_gal = new KIGFX::GAL();
+ break;
+ }
+ }
+ catch( std::runtime_error& err )
+ {
+ new_gal = new KIGFX::GAL();
+ aGalType = GAL_TYPE_NONE;
+ DisplayError( m_parent, wxString( err.what() ) );
+ result = false;
+ }
+
+ assert( new_gal );
+ delete m_gal;
+ m_gal = new_gal;
+
+ wxSize size = GetClientSize();
+ m_gal->ResizeScreen( size.GetX(), size.GetY() );
+
+ if( m_painter )
+ m_painter->SetGAL( m_gal );
+
+ if( m_view )
+ m_view->SetGAL( m_gal );
+
+ m_backend = aGalType;
+
+ return result;
+}
+
+
+void EDA_DRAW_PANEL_GAL::onEvent( wxEvent& aEvent )
+{
+ if( m_lostFocus )
+ SetFocus();
+
+ if( !m_eventDispatcher )
+ aEvent.Skip();
+ else
+ m_eventDispatcher->DispatchWxEvent( aEvent );
+
+ Refresh();
+}
+
+
+void EDA_DRAW_PANEL_GAL::onEnter( wxEvent& aEvent )
+{
+ // Getting focus is necessary in order to receive key events properly
+ SetFocus();
+
+ aEvent.Skip();
+}
+
+
+void EDA_DRAW_PANEL_GAL::onLostFocus( wxFocusEvent& aEvent )
+{
+ m_lostFocus = true;
+
+ aEvent.Skip();
+}
+
+
+void EDA_DRAW_PANEL_GAL::onRefreshTimer( wxTimerEvent& aEvent )
+{
+ if( !m_drawingEnabled )
+ {
+ if( m_gal->IsInitialized() )
+ {
+ m_drawing = false;
+ m_pendingRefresh = true;
+ Connect( wxEVT_PAINT, wxPaintEventHandler( EDA_DRAW_PANEL_GAL::onPaint ), NULL, this );
+ m_drawingEnabled = true;
+ }
+ else
+ {
+ // Try again soon
+ m_refreshTimer.Start( 100, true );
+ return;
+ }
+ }
+
+ wxPaintEvent redrawEvent;
+ wxPostEvent( this, redrawEvent );
+}
diff --git a/common/drawtxt.cpp b/common/drawtxt.cpp
new file mode 100644
index 0000000..15a2280
--- /dev/null
+++ b/common/drawtxt.cpp
@@ -0,0 +1,685 @@
+/**
+ * Functions to draw and plot text on screen
+ * @file drawtxt.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <plot_common.h>
+#include <eda_text.h> // EDA_TEXT_HJUSTIFY_T and EDA_TEXT_VJUSTIFY_T
+#include <trigo.h>
+#include <macros.h>
+#include <class_drawpanel.h>
+#include <class_base_screen.h>
+
+#include <gal/stroke_font.h>
+
+
+#include <newstroke_font.h>
+#include <plot_common.h>
+
+using namespace KIGFX;
+
+
+// A ugly hack to avoid UTF8::uni_iter method not found at link stage
+// in gerbview and pl_editor.
+// Hoping I (JPC) can remove that soon.
+void dummy()
+{
+ UTF8 text = "x";
+ for( UTF8::uni_iter it = text.ubegin(), end = text.uend(); it < end; ++it )
+ ;
+}
+
+
+int OverbarPositionY( int size_v )
+{
+ return KiROUND( size_v * STROKE_FONT::OVERBAR_HEIGHT );
+}
+
+
+/**
+ * Function GetPensizeForBold
+ * @return the "best" value for a pen size to draw/plot a bold text
+ * @param aTextSize = the char size (height or width)
+ */
+int GetPenSizeForBold( int aTextSize )
+{
+ return KiROUND( aTextSize / 5.0 );
+}
+
+
+/**
+ * Function Clamp_Text_PenSize
+ * As a rule, pen width should not be >1/4em, otherwise the character
+ * will be cluttered up in its own fatness
+ * so pen width max is aSize/4 for bold text, and aSize/6 for normal text
+ * The "best" pen width is aSize/5 for bold texts,
+ * so the clamp is consistant with bold option.
+ * @param aPenSize = the pen size to clamp
+ * @param aSize the char size (height or width)
+ * @param aBold = true if text accept bold pen size
+ * @return the max pen size allowed
+ */
+int Clamp_Text_PenSize( int aPenSize, int aSize, bool aBold )
+{
+ int penSize = aPenSize;
+ double scale = aBold ? 4.0 : 6.0;
+ int maxWidth = KiROUND( std::abs( aSize ) / scale );
+
+ if( penSize > maxWidth )
+ penSize = maxWidth;
+
+ return penSize;
+}
+
+
+int Clamp_Text_PenSize( int aPenSize, wxSize aSize, bool aBold )
+{
+ int size = std::min( std::abs( aSize.x ), std::abs( aSize.y ) );
+
+ return Clamp_Text_PenSize( aPenSize, size, aBold );
+}
+
+
+/* Functions to draw / plot a string.
+ * texts have only one line.
+ * They can be in italic.
+ * Horizontal and Vertical justification are handled.
+ * Texts can be rotated
+ * substrings between ~ markers can be "negated" (i.e. with an over bar
+ */
+
+/**
+ * Function NegableTextLength
+ * Return the text length (char count) of a negable string,
+ * excluding the ~ markers
+ */
+int NegableTextLength( const wxString& aText )
+{
+ int char_count = aText.length();
+
+ // Fix the character count, removing the ~ found
+ for( int i = char_count - 1; i >= 0; i-- )
+ {
+ if( aText[i] == '~' )
+ {
+ // '~~' draw as '~' and count as two chars
+ if( i > 0 && aText[i - 1] == '~' )
+ i--;
+ else
+ char_count--;
+ }
+ }
+
+ return char_count;
+}
+
+
+/* Function GetHersheyShapeDescription
+ * return a pointer to the shape corresponding to unicode value AsciiCode
+ * Note we use the same font for Bold and Normal texts
+ * because KiCad handles a variable pen size to do that
+ * that gives better results in XOR draw mode.
+ */
+static const char* GetHersheyShapeDescription( int AsciiCode )
+{
+ // calculate font length
+ int font_length_max = newstroke_font_bufsize;
+
+ if( AsciiCode >= (32 + font_length_max) )
+ AsciiCode = '?';
+
+ if( AsciiCode < 32 )
+ AsciiCode = 32; // Clamp control chars
+
+ AsciiCode -= 32;
+
+ return newstroke_font[AsciiCode];
+}
+
+
+int GraphicTextWidth( const wxString& aText, int aXSize, bool aItalic, bool aWidth )
+{
+ int tally = 0;
+ int char_count = aText.length();
+
+ for( int i = 0; i < char_count; i++ )
+ {
+ int asciiCode = aText[i];
+
+ /* Skip the negation marks
+ * and first '~' char of '~~'
+ * ('~~' draw as '~')
+ */
+ if( asciiCode == '~' )
+ {
+ if( i == 0 || aText[i - 1] != '~' )
+ continue;
+ }
+
+ const char* shape_ptr = GetHersheyShapeDescription( asciiCode );
+ // Get metrics
+ int xsta = *shape_ptr++ - 'R';
+ int xsto = *shape_ptr++ - 'R';
+ tally += KiROUND( aXSize * (xsto - xsta) * STROKE_FONT::STROKE_FONT_SCALE );
+ }
+
+ // For italic correction, add 1/8 size
+ if( aItalic )
+ {
+ tally += KiROUND( aXSize * STROKE_FONT::ITALIC_TILT );
+ }
+
+ return tally;
+}
+
+
+// Helper function for drawing character polylines
+static void DrawGraphicTextPline( EDA_RECT* aClipBox,
+ wxDC* aDC,
+ EDA_COLOR_T aColor,
+ int aWidth,
+ bool aSketchMode,
+ int point_count,
+ wxPoint* coord,
+ void (* aCallback)( int x0, int y0, int xf, int yf ),
+ PLOTTER* aPlotter )
+{
+ if( aPlotter )
+ {
+ aPlotter->MoveTo( coord[0] );
+
+ for( int ik = 1; ik < point_count; ik++ )
+ {
+ aPlotter->LineTo( coord[ik] );
+ }
+
+ aPlotter->PenFinish();
+ }
+ else if( aCallback )
+ {
+ for( int ik = 0; ik < (point_count - 1); ik++ )
+ {
+ aCallback( coord[ik].x, coord[ik].y,
+ coord[ik + 1].x, coord[ik + 1].y );
+ }
+ }
+ else if( aDC )
+ {
+ if( aSketchMode )
+ {
+ for( int ik = 0; ik < (point_count - 1); ik++ )
+ GRCSegm( aClipBox, aDC, coord[ik].x, coord[ik].y,
+ coord[ik + 1].x, coord[ik + 1].y, aWidth, aColor );
+ }
+ else
+ GRPoly( aClipBox, aDC, point_count, coord, 0,
+ aWidth, aColor, aColor );
+ }
+}
+
+
+/**
+ * Function DrawGraphicText
+ * Draw a graphic text (like module texts)
+ * @param aClipBox = the clipping rect, or NULL if no clipping
+ * @param aDC = the current Device Context. NULL if draw within a 3D GL Canvas
+ * @param aPos = text position (according to h_justify, v_justify)
+ * @param aColor (enum EDA_COLOR_T) = text color
+ * @param aText = text to draw
+ * @param aOrient = angle in 0.1 degree
+ * @param aSize = text size (size.x or size.y can be < 0 for mirrored texts)
+ * @param aH_justify = horizontal justification (Left, center, right)
+ * @param aV_justify = vertical justification (bottom, center, top)
+ * @param aWidth = line width (pen width) (use default width if aWidth = 0)
+ * if width < 0 : draw segments in sketch mode, width = abs(width)
+ * Use a value min(aSize.x, aSize.y) / 5 for a bold text
+ * @param aItalic = true to simulate an italic font
+ * @param aBold = true to use a bold font. Useful only with default width value (aWidth = 0)
+ * @param aCallback() = function called (if non null) to draw each segment.
+ * used to draw 3D texts or for plotting, NULL for normal drawings
+ * @param aPlotter = a pointer to a PLOTTER instance, when this function is used to plot
+ * the text. NULL to draw this text.
+ */
+void DrawGraphicText( EDA_RECT* aClipBox,
+ wxDC* aDC,
+ const wxPoint& aPos,
+ EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ void (* aCallback)( int x0, int y0, int xf, int yf ),
+ PLOTTER* aPlotter )
+{
+ int AsciiCode;
+ int x0, y0;
+ int size_h, size_v;
+ unsigned ptr;
+ int dx, dy; // Draw coordinate for segments to draw. also used in some other calculation
+ wxPoint current_char_pos; // Draw coordinates for the current char
+ wxPoint overbar_pos; // Start point for the current overbar
+ int overbar_italic_comp; // Italic compensation for overbar
+ #define BUF_SIZE 100
+ wxPoint coord[BUF_SIZE + 1]; // Buffer coordinate used to draw polylines (one char shape)
+ bool sketch_mode = false;
+ bool italic_reverse = false; // true for mirrored texts with m_Size.x < 0
+
+ size_h = aSize.x; /* PLEASE NOTE: H is for HORIZONTAL not for HEIGHT */
+ size_v = aSize.y;
+
+ if( aWidth == 0 && aBold ) // Use default values if aWidth == 0
+ aWidth = GetPenSizeForBold( std::min( aSize.x, aSize.y ) );
+
+ if( aWidth < 0 )
+ {
+ aWidth = -aWidth;
+ sketch_mode = true;
+ }
+
+#ifdef CLIP_PEN // made by draw and plot functions
+ aWidth = Clamp_Text_PenSize( aWidth, aSize, aBold );
+#endif
+
+ if( size_h < 0 ) // text is mirrored using size.x < 0 (mirror / Y axis)
+ italic_reverse = true;
+
+ unsigned char_count = NegableTextLength( aText );
+
+ if( char_count == 0 )
+ return;
+
+ current_char_pos = aPos;
+
+ dx = GraphicTextWidth( aText, size_h, aItalic, aWidth );
+ dy = size_v;
+
+ /* Do not draw the text if out of draw area! */
+ if( aClipBox )
+ {
+ int xm, ym, ll, xc, yc;
+ ll = std::abs( dx );
+
+ xc = current_char_pos.x;
+ yc = current_char_pos.y;
+
+ x0 = aClipBox->GetX() - ll;
+ y0 = aClipBox->GetY() - ll;
+ xm = aClipBox->GetRight() + ll;
+ ym = aClipBox->GetBottom() + ll;
+
+ if( xc < x0 )
+ return;
+
+ if( yc < y0 )
+ return;
+
+ if( xc > xm )
+ return;
+
+ if( yc > ym )
+ return;
+ }
+
+
+ /* Compute the position of the first letter of the text
+ * this position is the position of the left bottom point of the letter
+ * this is the same as the text position only for a left and bottom justified text
+ * In others cases, this position must be calculated from the text position ans size
+ */
+
+ switch( aH_justify )
+ {
+ case GR_TEXT_HJUSTIFY_CENTER:
+ current_char_pos.x -= dx / 2;
+ break;
+
+ case GR_TEXT_HJUSTIFY_RIGHT:
+ current_char_pos.x -= dx;
+ break;
+
+ case GR_TEXT_HJUSTIFY_LEFT:
+ break;
+ }
+
+ switch( aV_justify )
+ {
+ case GR_TEXT_VJUSTIFY_CENTER:
+ current_char_pos.y += dy / 2;
+ break;
+
+ case GR_TEXT_VJUSTIFY_TOP:
+ current_char_pos.y += dy;
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ break;
+ }
+
+ // Note: if aPanel == NULL, we are using a GL Canvas that handle scaling
+ if( aSize.x == 0 )
+ return;
+
+ /* if a text size is too small, the text cannot be drawn, and it is drawn as a single
+ * graphic line */
+ if( aDC && ( aDC->LogicalToDeviceYRel( std::abs( aSize.y ) ) < MIN_DRAWABLE_TEXT_SIZE ))
+ {
+ // draw the text as a line always vertically centered
+ wxPoint end( current_char_pos.x + dx, current_char_pos.y );
+
+ RotatePoint( &current_char_pos, aPos, aOrient );
+ RotatePoint( &end, aPos, aOrient );
+
+ if( aPlotter )
+ {
+ aPlotter->MoveTo( current_char_pos );
+ aPlotter->FinishTo( end );
+ }
+ else if( aCallback )
+ {
+ aCallback( current_char_pos.x, current_char_pos.y, end.x, end.y );
+ }
+ else
+ GRLine( aClipBox, aDC,
+ current_char_pos.x, current_char_pos.y, end.x, end.y, aWidth, aColor );
+
+ return;
+ }
+
+ if( aItalic )
+ {
+ overbar_italic_comp = KiROUND( OverbarPositionY( size_v ) * STROKE_FONT::ITALIC_TILT );
+
+ if( italic_reverse )
+ {
+ overbar_italic_comp = -overbar_italic_comp;
+ }
+ }
+ else
+ {
+ overbar_italic_comp = 0;
+ }
+
+ int overbars = 0; // Number of '~' seen (except '~~')
+ ptr = 0; // ptr = text index
+
+ while( ptr < char_count )
+ {
+ if( aText[ptr + overbars] == '~' )
+ {
+ if( ptr + overbars + 1 < aText.length()
+ && aText[ptr + overbars + 1] == '~' ) /* '~~' draw as '~' */
+ ptr++; // skip first '~' char and draw second
+
+ else
+ {
+ // Found an overbar, adjust the pointers
+ overbars++;
+
+ if( overbars & 1 ) // odd overbars count
+ {
+ // Starting the overbar
+ overbar_pos = current_char_pos;
+ overbar_pos.x += overbar_italic_comp;
+ overbar_pos.y -= OverbarPositionY( size_v );
+ RotatePoint( &overbar_pos, aPos, aOrient );
+ }
+ else
+ {
+ // Ending the overbar
+ coord[0] = overbar_pos;
+ overbar_pos = current_char_pos;
+ overbar_pos.x += overbar_italic_comp;
+ overbar_pos.y -= OverbarPositionY( size_v );
+ RotatePoint( &overbar_pos, aPos, aOrient );
+ coord[1] = overbar_pos;
+ // Plot the overbar segment
+ DrawGraphicTextPline( aClipBox, aDC, aColor, aWidth,
+ sketch_mode, 2, coord, aCallback, aPlotter );
+ }
+
+ continue; // Skip ~ processing
+ }
+ }
+
+ AsciiCode = aText.GetChar( ptr + overbars );
+
+ const char* ptcar = GetHersheyShapeDescription( AsciiCode );
+ // Get metrics
+ int xsta = *ptcar++ - 'R';
+ int xsto = *ptcar++ - 'R';
+ int point_count = 0;
+ bool endcar = false;
+
+ while( !endcar )
+ {
+ int hc1, hc2;
+ hc1 = *ptcar++;
+
+ if( hc1 )
+ {
+ hc2 = *ptcar++;
+ }
+ else
+ {
+ // End of character, insert a synthetic pen up:
+ hc1 = ' ';
+ hc2 = 'R';
+ endcar = true;
+ }
+
+ // Do the Hershey decode thing:
+ // coordinates values are coded as <value> + 'R'
+ hc1 -= 'R';
+ hc2 -= 'R';
+
+ // Pen up request
+ if( hc1 == -50 && hc2 == 0 )
+ {
+ if( point_count )
+ {
+ if( aWidth <= 1 )
+ aWidth = 0;
+
+ DrawGraphicTextPline( aClipBox, aDC, aColor, aWidth,
+ sketch_mode, point_count, coord,
+ aCallback, aPlotter );
+ }
+
+ point_count = 0;
+ }
+ else
+ {
+ wxPoint currpoint;
+ hc1 -= xsta; hc2 -= 10; // Align the midpoint
+ hc1 = KiROUND( hc1 * size_h * STROKE_FONT::STROKE_FONT_SCALE );
+ hc2 = KiROUND( hc2 * size_v * STROKE_FONT::STROKE_FONT_SCALE );
+
+ // To simulate an italic font,
+ // add a x offset depending on the y offset
+ if( aItalic )
+ hc1 -= KiROUND( italic_reverse ? -hc2 * STROKE_FONT::ITALIC_TILT
+ : hc2 * STROKE_FONT::ITALIC_TILT );
+
+ currpoint.x = hc1 + current_char_pos.x;
+ currpoint.y = hc2 + current_char_pos.y;
+
+ RotatePoint( &currpoint, aPos, aOrient );
+ coord[point_count] = currpoint;
+
+ if( point_count < BUF_SIZE - 1 )
+ point_count++;
+ }
+ } // end draw 1 char
+
+ ptr++;
+
+ // Apply the advance width
+ current_char_pos.x += KiROUND( size_h * (xsto - xsta) * STROKE_FONT::STROKE_FONT_SCALE );
+ }
+
+ if( overbars % 2 )
+ {
+ // Close the last overbar
+ coord[0] = overbar_pos;
+ overbar_pos = current_char_pos;
+ overbar_pos.y -= OverbarPositionY( size_v );
+ RotatePoint( &overbar_pos, aPos, aOrient );
+ coord[1] = overbar_pos;
+
+ // Plot the overbar segment
+ DrawGraphicTextPline( aClipBox, aDC, aColor, aWidth,
+ sketch_mode, 2, coord, aCallback, aPlotter );
+ }
+}
+
+void DrawGraphicHaloText( EDA_RECT* aClipBox, wxDC * aDC,
+ const wxPoint &aPos,
+ enum EDA_COLOR_T aBgColor,
+ enum EDA_COLOR_T aColor1,
+ enum EDA_COLOR_T aColor2,
+ const wxString &aText,
+ double aOrient,
+ const wxSize &aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth, bool aItalic, bool aBold,
+ void (*aCallback)( int x0, int y0, int xf, int yf ),
+ PLOTTER * aPlotter )
+{
+ // Swap color if contrast would be better
+ if( ColorIsLight( aBgColor ) )
+ {
+ EDA_COLOR_T c = aColor1;
+ aColor1 = aColor2;
+ aColor2 = c;
+ }
+
+ DrawGraphicText( aClipBox, aDC, aPos, aColor1, aText, aOrient, aSize,
+ aH_justify, aV_justify, aWidth, aItalic, aBold,
+ aCallback, aPlotter );
+
+ DrawGraphicText( aClipBox, aDC, aPos, aColor2, aText, aOrient, aSize,
+ aH_justify, aV_justify, aWidth / 4, aItalic, aBold,
+ aCallback, aPlotter );
+}
+
+/**
+ * Function PlotGraphicText
+ * same as DrawGraphicText, but plot graphic text insteed of draw it
+ * @param aPos = text position (according to aH_justify, aV_justify)
+ * @param aColor (enum EDA_COLOR_T) = text color
+ * @param aText = text to draw
+ * @param aOrient = angle in 0.1 degree
+ * @param aSize = text size (size.x or size.y can be < 0 for mirrored texts)
+ * @param aH_justify = horizontal justification (Left, center, right)
+ * @param aV_justify = vertical justification (bottom, center, top)
+ * @param aWidth = line width (pen width) (default = 0)
+ * if width < 0 : draw segments in sketch mode, width = abs(width)
+ * Use a value min(aSize.x, aSize.y) / 5 for a bold text
+ * @param aItalic = true to simulate an italic font
+ * @param aBold = true to use a bold font Useful only with default width value (aWidth = 0)
+ * @param aMultilineAllowed = true to plot text as multiline, otherwise single line
+ */
+void PLOTTER::Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed )
+{
+ int textPensize = aWidth;
+
+ if( textPensize == 0 && aBold ) // Use default values if aWidth == 0
+ textPensize = GetPenSizeForBold( std::min( aSize.x, aSize.y ) );
+
+ if( textPensize >= 0 )
+ textPensize = Clamp_Text_PenSize( aWidth, aSize, aBold );
+ else
+ textPensize = -Clamp_Text_PenSize( -aWidth, aSize, aBold );
+
+ SetCurrentLineWidth( textPensize );
+
+ if( aColor >= 0 )
+ SetColor( aColor );
+
+ if( aMultilineAllowed )
+ {
+ // EDA_TEXT needs for calculations of the position of every
+ // line according to orientation and justifications
+ wxArrayString strings;
+ EDA_TEXT* multilineText = new EDA_TEXT( aText );
+ multilineText->SetSize( aSize );
+ multilineText->SetTextPosition( aPos );
+ multilineText->SetOrientation( aOrient );
+ multilineText->SetHorizJustify( aH_justify );
+ multilineText->SetVertJustify( aV_justify );
+ multilineText->SetThickness( aWidth );
+ multilineText->SetMultilineAllowed( aMultilineAllowed );
+
+ std::vector<wxPoint> positions;
+ wxStringSplit( aText, strings, '\n' );
+ positions.reserve( strings.Count() );
+
+ multilineText->GetPositionsOfLinesOfMultilineText(
+ positions, strings.Count() );
+
+ for( unsigned ii = 0; ii < strings.Count(); ii++ )
+ {
+ wxString& txt = strings.Item( ii );
+ DrawGraphicText( NULL, NULL, positions[ii], aColor, txt,
+ aOrient, aSize,
+ aH_justify, aV_justify,
+ textPensize, aItalic, aBold, NULL, this );
+ }
+
+ delete multilineText;
+ }
+ else
+ {
+ DrawGraphicText( NULL, NULL, aPos, aColor, aText,
+ aOrient, aSize,
+ aH_justify, aV_justify,
+ textPensize, aItalic, aBold, NULL, this );
+ }
+
+ if( aWidth != textPensize )
+ SetCurrentLineWidth( aWidth );
+}
diff --git a/common/dsnlexer.cpp b/common/dsnlexer.cpp
new file mode 100644
index 0000000..2211427
--- /dev/null
+++ b/common/dsnlexer.cpp
@@ -0,0 +1,835 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2007-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <cstdarg>
+#include <cstdio>
+#include <cstdlib> // bsearch()
+#include <cctype>
+
+#include <macros.h>
+#include <fctsys.h>
+#include <dsnlexer.h>
+
+
+//#define STANDALONE 1 // enable this for stand alone testing.
+
+#define FMT_CLIPBOARD _( "clipboard" )
+
+
+//-----<DSNLEXER>-------------------------------------------------------------
+
+void DSNLEXER::init()
+{
+ curTok = DSN_NONE;
+ prevTok = DSN_NONE;
+
+ stringDelimiter = '"';
+
+ specctraMode = false;
+ space_in_quoted_tokens = false;
+ commentsAreTokens = false;
+
+ curOffset = 0;
+
+#if 1
+ if( keywordCount > 11 )
+ {
+ // resize the hashtable bucket count
+ keyword_hash.reserve( keywordCount );
+ }
+
+ // fill the specialized "C string" hashtable from keywords[]
+ const KEYWORD* it = keywords;
+ const KEYWORD* end = it + keywordCount;
+
+ for( ; it < end; ++it )
+ {
+ keyword_hash[it->name] = it->token;
+ }
+#endif
+}
+
+
+DSNLEXER::DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
+ FILE* aFile, const wxString& aFilename ) :
+ iOwnReaders( true ),
+ start( NULL ),
+ next( NULL ),
+ limit( NULL ),
+ reader( NULL ),
+ keywords( aKeywordTable ),
+ keywordCount( aKeywordCount )
+{
+ FILE_LINE_READER* fileReader = new FILE_LINE_READER( aFile, aFilename );
+ PushReader( fileReader );
+ init();
+}
+
+
+DSNLEXER::DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
+ const std::string& aClipboardTxt, const wxString& aSource ) :
+ iOwnReaders( true ),
+ start( NULL ),
+ next( NULL ),
+ limit( NULL ),
+ reader( NULL ),
+ keywords( aKeywordTable ),
+ keywordCount( aKeywordCount )
+{
+ STRING_LINE_READER* stringReader = new STRING_LINE_READER( aClipboardTxt, aSource.IsEmpty() ?
+ wxString( FMT_CLIPBOARD ) : aSource );
+ PushReader( stringReader );
+ init();
+}
+
+
+DSNLEXER::DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
+ LINE_READER* aLineReader ) :
+ iOwnReaders( false ),
+ start( NULL ),
+ next( NULL ),
+ limit( NULL ),
+ reader( NULL ),
+ keywords( aKeywordTable ),
+ keywordCount( aKeywordCount )
+{
+ if( aLineReader )
+ PushReader( aLineReader );
+ init();
+}
+
+
+static const KEYWORD empty_keywords[1] = {};
+
+DSNLEXER::DSNLEXER( const std::string& aSExpression, const wxString& aSource ) :
+ iOwnReaders( true ),
+ start( NULL ),
+ next( NULL ),
+ limit( NULL ),
+ reader( NULL ),
+ keywords( empty_keywords ),
+ keywordCount( 0 )
+{
+ STRING_LINE_READER* stringReader = new STRING_LINE_READER( aSExpression, aSource.IsEmpty() ?
+ wxString( FMT_CLIPBOARD ) : aSource );
+ PushReader( stringReader );
+ init();
+}
+
+
+DSNLEXER::~DSNLEXER()
+{
+ if( iOwnReaders )
+ {
+ // delete the LINE_READERs from the stack, since I own them.
+ for( READER_STACK::iterator it = readerStack.begin(); it!=readerStack.end(); ++it )
+ delete *it;
+ }
+}
+
+void DSNLEXER::SetSpecctraMode( bool aMode )
+{
+ specctraMode = aMode;
+ if( aMode )
+ {
+ // specctra mode defaults, some of which can still be changed in this mode.
+ space_in_quoted_tokens = true;
+ }
+ else
+ {
+ space_in_quoted_tokens = false;
+ stringDelimiter = '"';
+ }
+}
+
+
+bool DSNLEXER::SyncLineReaderWith( DSNLEXER& aLexer )
+{
+ // Synchronize the pointers handling the data read by the LINE_READER
+ // only if aLexer shares the same LINE_READER, because only in this case
+ // the char buffer is be common
+
+ if( reader != aLexer.reader )
+ return false;
+
+ // We can synchronize the pointers which handle the data currently read
+ start = aLexer.start;
+ next = aLexer.next;
+ limit = aLexer.limit;
+
+ // Sync these parameters is not mandatory, but could help
+ // for instance in debug
+ curText = aLexer.curText;
+ curOffset = aLexer.curOffset;
+
+ return true;
+}
+
+
+void DSNLEXER::PushReader( LINE_READER* aLineReader )
+{
+ readerStack.push_back( aLineReader );
+ reader = aLineReader;
+ start = (const char*) (*reader);
+
+ // force a new readLine() as first thing.
+ limit = start;
+ next = start;
+}
+
+
+LINE_READER* DSNLEXER::PopReader()
+{
+ LINE_READER* ret = 0;
+
+ if( readerStack.size() )
+ {
+ ret = reader;
+ readerStack.pop_back();
+
+ if( readerStack.size() )
+ {
+ reader = readerStack.back();
+ start = reader->Line();
+
+ // force a new readLine() as first thing.
+ limit = start;
+ next = start;
+ }
+ else
+ {
+ reader = 0;
+ start = dummy;
+ limit = dummy;
+ limit = dummy;
+ }
+ }
+ return ret;
+}
+
+
+#if 0
+static int compare( const void* a1, const void* a2 )
+{
+ const KEYWORD* k1 = (const KEYWORD*) a1;
+ const KEYWORD* k2 = (const KEYWORD*) a2;
+
+ int ret = strcmp( k1->name, k2->name );
+ return ret;
+}
+
+int DSNLEXER::findToken( const std::string& tok )
+{
+ KEYWORD search;
+
+ search.name = tok.c_str();
+
+ const KEYWORD* findings = (const KEYWORD*) bsearch( &search,
+ keywords, keywordCount,
+ sizeof(KEYWORD), compare );
+ if( findings )
+ return findings->token;
+ else
+ return DSN_SYMBOL; // not a keyword, some arbitrary symbol.
+}
+
+#else
+
+inline int DSNLEXER::findToken( const std::string& tok )
+{
+ KEYWORD_MAP::const_iterator it = keyword_hash.find( tok.c_str() );
+ if( it != keyword_hash.end() )
+ return it->second;
+
+ return DSN_SYMBOL; // not a keyword, some arbitrary symbol.
+}
+#endif
+
+
+const char* DSNLEXER::Syntax( int aTok )
+{
+ const char* ret;
+
+ switch( aTok )
+ {
+ case DSN_NONE:
+ ret = "NONE";
+ break;
+ case DSN_STRING_QUOTE:
+ ret = "string_quote"; // a special DSN syntax token, see specctra spec.
+ break;
+ case DSN_QUOTE_DEF:
+ ret = "quoted text delimiter";
+ break;
+ case DSN_DASH:
+ ret = "-";
+ break;
+ case DSN_SYMBOL:
+ ret = "symbol";
+ break;
+ case DSN_NUMBER:
+ ret = "number";
+ break;
+ case DSN_RIGHT:
+ ret = ")";
+ break;
+ case DSN_LEFT:
+ ret = "(";
+ break;
+ case DSN_STRING:
+ ret = "quoted string";
+ break;
+ case DSN_EOF:
+ ret = "end of input";
+ break;
+ default:
+ ret = "???";
+ }
+
+ return ret;
+}
+
+
+const char* DSNLEXER::GetTokenText( int aTok )
+{
+ const char* ret;
+
+ if( aTok < 0 )
+ {
+ return Syntax( aTok );
+ }
+ else if( (unsigned) aTok < keywordCount )
+ {
+ ret = keywords[aTok].name;
+ }
+ else
+ ret = "token too big";
+
+ return ret;
+}
+
+
+wxString DSNLEXER::GetTokenString( int aTok )
+{
+ wxString ret;
+
+ ret << wxT("'") << wxString::FromUTF8( GetTokenText(aTok) ) << wxT("'");
+
+ return ret;
+}
+
+
+bool DSNLEXER::IsSymbol( int aTok )
+{
+ // This is static and not inline to reduce code space.
+
+ // if aTok is >= 0, then it is a coincidental match to a keyword.
+ return aTok==DSN_SYMBOL
+ || aTok==DSN_STRING
+ || aTok>=0
+ ;
+}
+
+
+void DSNLEXER::Expecting( int aTok ) throw( IO_ERROR )
+{
+ wxString errText = wxString::Format(
+ _("Expecting '%s'"), GetChars( GetTokenString( aTok ) ) );
+ THROW_PARSE_ERROR( errText, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+}
+
+
+void DSNLEXER::Expecting( const char* text ) throw( IO_ERROR )
+{
+ wxString errText = wxString::Format(
+ _("Expecting '%s'"), GetChars( wxString::FromUTF8( text ) ) );
+ THROW_PARSE_ERROR( errText, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+}
+
+
+void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
+{
+ wxString errText = wxString::Format(
+ _("Unexpected '%s'"), GetChars( GetTokenString( aTok ) ) );
+ THROW_PARSE_ERROR( errText, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+}
+
+
+void DSNLEXER::Duplicate( int aTok ) throw( IO_ERROR )
+{
+ wxString errText = wxString::Format(
+ _("%s is a duplicate"), GetTokenString( aTok ).GetData() );
+ THROW_PARSE_ERROR( errText, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+}
+
+
+void DSNLEXER::Unexpected( const char* text ) throw( IO_ERROR )
+{
+ wxString errText = wxString::Format(
+ _("Unexpected '%s'"), GetChars( wxString::FromUTF8( text ) ) );
+ THROW_PARSE_ERROR( errText, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+}
+
+
+void DSNLEXER::NeedLEFT() throw( IO_ERROR )
+{
+ int tok = NextTok();
+ if( tok != DSN_LEFT )
+ Expecting( DSN_LEFT );
+}
+
+
+void DSNLEXER::NeedRIGHT() throw( IO_ERROR )
+{
+ int tok = NextTok();
+ if( tok != DSN_RIGHT )
+ Expecting( DSN_RIGHT );
+}
+
+
+int DSNLEXER::NeedSYMBOL() throw( IO_ERROR )
+{
+ int tok = NextTok();
+ if( !IsSymbol( tok ) )
+ Expecting( DSN_SYMBOL );
+ return tok;
+}
+
+
+int DSNLEXER::NeedSYMBOLorNUMBER() throw( IO_ERROR )
+{
+ int tok = NextTok();
+ if( !IsSymbol( tok ) && tok!=DSN_NUMBER )
+ Expecting( "symbol|number" );
+ return tok;
+}
+
+
+int DSNLEXER::NeedNUMBER( const char* aExpectation ) throw( IO_ERROR )
+{
+ int tok = NextTok();
+ if( tok != DSN_NUMBER )
+ {
+ wxString errText = wxString::Format(
+ _("need a NUMBER for '%s'"), wxString::FromUTF8( aExpectation ).GetData() );
+ THROW_PARSE_ERROR( errText, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+ }
+ return tok;
+}
+
+
+/**
+ * Function isSpace
+ * tests for whitespace. Our whitespace, by our definition, is a subset of ASCII,
+ * i.e. no bytes with MSB on can be considered whitespace, since they are likely part
+ * of a multibyte UTF8 character.
+ */
+static bool isSpace( char cc )
+{
+ // cc is signed, so it is often negative.
+ // Treat negative as large positive to exclude rapidly.
+ if( (unsigned char) cc <= ' ' )
+ {
+ switch( (unsigned char) cc )
+ {
+ case ' ':
+ case '\n':
+ case '\r':
+ case '\t':
+ case '\0': // PCAD s-expression files have this.
+ return true;
+ }
+ }
+ return false;
+}
+
+
+inline bool isDigit( char cc )
+{
+ return '0' <= cc && cc <= '9';
+}
+
+
+/// return true if @a cc is an s-expression separator character
+inline bool isSep( char cc )
+{
+ return isSpace( cc ) || cc=='(' || cc==')';
+}
+
+
+/**
+ * Function isNumber
+ * returns true if the next sequence of text is a number:
+ * either an integer, fixed point, or float with exponent. Stops scanning
+ * at the first non-number character, even if it is not whitespace.
+ *
+ * @param cp is the start of the current token.
+ * @param limit is the end of the current token.
+ *
+ * @return bool - true if input token is a number, else false.
+ */
+static bool isNumber( const char* cp, const char* limit )
+{
+ // regex for a float: "^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?" i.e. any number,
+ // code traversal manually here:
+
+ bool sawNumber = false;
+
+ if( cp < limit && ( *cp=='-' || *cp=='+' ) )
+ ++cp;
+
+ while( cp < limit && isDigit( *cp ) )
+ {
+ ++cp;
+ sawNumber = true;
+ }
+
+ if( cp < limit && *cp == '.' )
+ {
+ ++cp;
+
+ while( cp < limit && isDigit( *cp ) )
+ {
+ ++cp;
+ sawNumber = true;
+ }
+ }
+
+ if( sawNumber )
+ {
+ if( cp < limit && ( *cp=='E' || *cp=='e' ) )
+ {
+ ++cp;
+
+ sawNumber = false; // exponent mandates at least one digit thereafter.
+
+ if( cp < limit && ( *cp=='-' || *cp=='+' ) )
+ ++cp;
+
+ while( cp < limit && isDigit( *cp ) )
+ {
+ ++cp;
+ sawNumber = true;
+ }
+ }
+ }
+
+ return sawNumber && cp==limit;
+}
+
+
+int DSNLEXER::NextTok() throw( IO_ERROR )
+{
+ const char* cur = next;
+ const char* head = cur;
+
+ prevTok = curTok;
+
+ if( curTok == DSN_EOF )
+ goto exit;
+
+ if( cur >= limit )
+ {
+L_read:
+ // blank lines are returned as "\n" and will have a len of 1.
+ // EOF will have a len of 0 and so is detectable.
+ int len = readLine();
+ if( len == 0 )
+ {
+ cur = start; // after readLine(), since start can change, set cur offset to start
+ curTok = DSN_EOF;
+ goto exit;
+ }
+
+ cur = start; // after readLine() since start can change.
+
+ // skip leading whitespace
+ while( cur<limit && isSpace( *cur ) )
+ ++cur;
+
+ // If the first non-blank character is #, this line is a comment.
+ // Comments cannot follow any other token on the same line.
+ if( cur<limit && *cur=='#' )
+ {
+ if( commentsAreTokens )
+ {
+ // Grab the entire current line [excluding end of line char(s)] as the
+ // current token. The '#' character may not be at offset zero.
+
+ while( limit[-1] == '\n' || limit[-1] == '\r' )
+ --limit;
+
+ curText.clear();
+ curText.append( start, limit );
+
+ cur = start; // ensure a good curOffset below
+ curTok = DSN_COMMENT;
+ head = limit; // do a readLine() on next call in here.
+ goto exit;
+ }
+ else
+ goto L_read;
+ }
+ }
+ else
+ {
+ // skip leading whitespace
+ while( cur<limit && isSpace( *cur ) )
+ ++cur;
+ }
+
+ if( cur >= limit )
+ goto L_read;
+
+ if( *cur == '(' )
+ {
+ curText = *cur;
+ curTok = DSN_LEFT;
+ head = cur+1;
+ goto exit;
+ }
+
+ if( *cur == ')' )
+ {
+ curText = *cur;
+ curTok = DSN_RIGHT;
+ head = cur+1;
+ goto exit;
+ }
+
+ // Non-specctraMode, understands and deciphers escaped \, \r, \n, and \".
+ // Strips off leading and trailing double quotes
+ if( !specctraMode )
+ {
+ // a quoted string, will return DSN_STRING
+ if( *cur == stringDelimiter )
+ {
+ // copy the token, character by character so we can remove doubled up quotes.
+ curText.clear();
+
+ ++cur; // skip over the leading delimiter, which is always " in non-specctraMode
+
+ head = cur;
+
+ while( head<limit )
+ {
+ // ESCAPE SEQUENCES:
+ if( *head =='\\' )
+ {
+ char tbuf[8];
+ char c;
+ int i;
+
+ if( ++head >= limit )
+ break; // throw exception at L_unterminated
+
+ switch( *head++ )
+ {
+ case '"':
+ case '\\': c = head[-1]; break;
+ case 'a': c = '\x07'; break;
+ case 'b': c = '\x08'; break;
+ case 'f': c = '\x0c'; break;
+ case 'n': c = '\n'; break;
+ case 'r': c = '\r'; break;
+ case 't': c = '\x09'; break;
+ case 'v': c = '\x0b'; break;
+
+ case 'x': // 1 or 2 byte hex escape sequence
+ for( i=0; i<2; ++i )
+ {
+ if( !isxdigit( head[i] ) )
+ break;
+ tbuf[i] = head[i];
+ }
+ tbuf[i] = '\0';
+ if( i > 0 )
+ c = (char) strtoul( tbuf, NULL, 16 );
+ else
+ c = 'x'; // a goofed hex escape sequence, interpret as 'x'
+ head += i;
+ break;
+
+ default: // 1-3 byte octal escape sequence
+ --head;
+ for( i=0; i<3; ++i )
+ {
+ if( head[i] < '0' || head[i] > '7' )
+ break;
+ tbuf[i] = head[i];
+ }
+ tbuf[i] = '\0';
+ if( i > 0 )
+ c = (char) strtoul( tbuf, NULL, 8 );
+ else
+ c = '\\'; // a goofed octal escape sequence, interpret as '\'
+ head += i;
+ break;
+ }
+
+ curText += c;
+ }
+
+ else if( *head == '"' ) // end of the non-specctraMode DSN_STRING
+ {
+ curTok = DSN_STRING;
+ ++head; // omit this trailing double quote
+ goto exit;
+ }
+
+ else
+ curText += *head++;
+
+ } // while
+
+ // L_unterminated:
+ wxString errtxt( _( "Un-terminated delimited string" ) );
+ THROW_PARSE_ERROR( errtxt, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+ }
+ }
+
+ else // is specctraMode, tests in this block should not occur in KiCad mode.
+ {
+ /* get the dash out of a <pin_reference> which is embedded for example
+ like: U2-14 or "U2"-"14"
+ This is detectable by a non-space immediately preceeding the dash.
+ */
+ if( *cur == '-' && cur>start && !isSpace( cur[-1] ) )
+ {
+ curText = '-';
+ curTok = DSN_DASH;
+ head = cur+1;
+ goto exit;
+ }
+
+ // switching the string_quote character
+ if( prevTok == DSN_STRING_QUOTE )
+ {
+ static const wxString errtxt( _("String delimiter must be a single character of ', \", or $"));
+
+ char cc = *cur;
+ switch( cc )
+ {
+ case '\'':
+ case '$':
+ case '"':
+ break;
+ default:
+ THROW_PARSE_ERROR( errtxt, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+ }
+
+ curText = cc;
+
+ head = cur+1;
+
+ if( head<limit && !isSep( *head ) )
+ {
+ THROW_PARSE_ERROR( errtxt, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+ }
+
+ curTok = DSN_QUOTE_DEF;
+ goto exit;
+ }
+
+ // specctraMode DSN_STRING
+ if( *cur == stringDelimiter )
+ {
+ ++cur; // skip over the leading delimiter: ",', or $
+
+ head = cur;
+
+ while( head<limit && !isStringTerminator( *head ) )
+ ++head;
+
+ if( head >= limit )
+ {
+ wxString errtxt( _( "Un-terminated delimited string" ) );
+ THROW_PARSE_ERROR( errtxt, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
+ }
+
+ curText.clear();
+ curText.append( cur, head );
+
+ ++head; // skip over the trailing delimiter
+
+ curTok = DSN_STRING;
+ goto exit;
+ }
+ } // specctraMode
+
+ // non-quoted token, read it into curText.
+ curText.clear();
+
+ head = cur;
+ while( head<limit && !isSep( *head ) )
+ curText += *head++;
+
+ if( isNumber( curText.c_str(), curText.c_str() + curText.size() ) )
+ {
+ curTok = DSN_NUMBER;
+ goto exit;
+ }
+
+ if( specctraMode && curText == "string_quote" )
+ {
+ curTok = DSN_STRING_QUOTE;
+ goto exit;
+ }
+
+ curTok = findToken( curText );
+
+exit: // single point of exit, no returns elsewhere please.
+
+ curOffset = cur - start;
+
+ next = head;
+
+ // printf("tok:\"%s\"\n", curText.c_str() );
+ return curTok;
+}
+
+
+wxArrayString* DSNLEXER::ReadCommentLines() throw( IO_ERROR )
+{
+ wxArrayString* ret = 0;
+ bool cmt_setting = SetCommentsAreTokens( true );
+ int tok = NextTok();
+
+ if( tok == DSN_COMMENT )
+ {
+ ret = new wxArrayString();
+
+ do
+ {
+ ret->Add( FromUTF8() );
+ }
+ while( ( tok = NextTok() ) == DSN_COMMENT );
+ }
+
+ SetCommentsAreTokens( cmt_setting );
+
+ return ret;
+}
diff --git a/common/eda_dde.cpp b/common/eda_dde.cpp
new file mode 100644
index 0000000..92f965d
--- /dev/null
+++ b/common/eda_dde.cpp
@@ -0,0 +1,211 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file eda_dde.cpp
+ */
+
+#include <fctsys.h>
+#include <eda_dde.h>
+#include <draw_frame.h>
+#include <id.h>
+#include <common.h>
+#include <macros.h>
+
+static const wxString HOSTNAME( wxT( "localhost" ) );
+
+// buffer for read and write data in socket connections
+#define IPC_BUF_SIZE 4096
+static char client_ipc_buffer[IPC_BUF_SIZE];
+
+static wxSocketServer* server;
+
+
+/**********************************/
+/* Routines related to the server */
+/**********************************/
+
+/* Function to initialize a server socket
+ */
+wxSocketServer* CreateServer( wxWindow* window, int service, bool local )
+{
+ wxIPV4address addr;
+
+ // Set the port number
+ addr.Service( service );
+
+ // Listen on localhost only if requested
+ if( local )
+ addr.Hostname( HOSTNAME );
+
+ server = new wxSocketServer( addr );
+
+ if( server )
+ {
+ server->SetNotify( wxSOCKET_CONNECTION_FLAG );
+ server->SetEventHandler( *window, ID_EDA_SOCKET_EVENT_SERV );
+ server->Notify( true );
+ }
+
+ return server;
+}
+
+
+/* Function called on every client request.
+ */
+void EDA_DRAW_FRAME::OnSockRequest( wxSocketEvent& evt )
+{
+ size_t len;
+ wxSocketBase* sock = evt.GetSocket();
+
+ switch( evt.GetSocketEvent() )
+ {
+ case wxSOCKET_INPUT:
+ sock->Read( client_ipc_buffer, 1 );
+
+ if( sock->LastCount() == 0 )
+ break; // No data, occurs on opening connection
+
+ sock->Read( client_ipc_buffer + 1, IPC_BUF_SIZE - 2 );
+ len = 1 + sock->LastCount();
+ client_ipc_buffer[len] = 0;
+ ExecuteRemoteCommand( client_ipc_buffer );
+ break;
+
+ case wxSOCKET_LOST:
+ return;
+ break;
+
+ default:
+ wxPrintf( wxT( "EDA_DRAW_FRAME::OnSockRequest() error: Invalid event !" ) );
+ break;
+ }
+}
+
+
+/* Function called when a connection is requested by a client.
+ */
+void EDA_DRAW_FRAME::OnSockRequestServer( wxSocketEvent& evt )
+{
+ wxSocketBase* sock2;
+ wxSocketServer* server = (wxSocketServer*) evt.GetSocket();
+
+ sock2 = server->Accept();
+
+ if( sock2 == NULL )
+ return;
+
+ sock2->Notify( true );
+ sock2->SetEventHandler( *this, ID_EDA_SOCKET_EVENT );
+ sock2->SetNotify( wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG );
+}
+
+
+/**********************************/
+/* Routines related to the CLIENT */
+/**********************************/
+
+/* Used by a client to sent (by a socket connection) a data to a server.
+ * - Open a Socket Client connection
+ * - Send the buffer cmdline
+ * - Close the socket connection
+ *
+ * service is the service number for the TC/IP connection
+ */
+bool SendCommand( int service, const char* cmdline )
+{
+ wxSocketClient* sock_client;
+ bool success = false;
+ wxIPV4address addr;
+
+ // Create a connexion
+ addr.Hostname( HOSTNAME );
+ addr.Service( service );
+
+ // Mini-tutorial for Connect() :-)
+ // (JP CHARRAS Note: see wxWidgets: sockets/client.cpp sample)
+ // ---------------------------
+ //
+ // There are two ways to use Connect(): blocking and non-blocking,
+ // depending on the value passed as the 'wait' (2nd) parameter.
+ //
+ // Connect(addr, true) will wait until the connection completes,
+ // returning true on success and false on failure. This call blocks
+ // the GUI (this might be changed in future releases to honor the
+ // wxSOCKET_BLOCK flag).
+ //
+ // Connect(addr, false) will issue a nonblocking connection request
+ // and return immediately. If the return value is true, then the
+ // connection has been already successfully established. If it is
+ // false, you must wait for the request to complete, either with
+ // WaitOnConnect() or by watching wxSOCKET_CONNECTION / LOST
+ // events (please read the documentation).
+ //
+ // WaitOnConnect() itself never blocks the GUI (this might change
+ // in the future to honor the wxSOCKET_BLOCK flag). This call will
+ // return false on timeout, or true if the connection request
+ // completes, which in turn might mean:
+ //
+ // a) That the connection was successfully established
+ // b) That the connection request failed (for example, because
+ // it was refused by the peer.
+ //
+ // Use IsConnected() to distinguish between these two.
+ //
+ // So, in a brief, you should do one of the following things:
+ //
+ // For blocking Connect:
+ //
+ // bool success = client->Connect(addr, true);
+ //
+ // For nonblocking Connect:
+ //
+ // client->Connect(addr, false);
+ //
+ // bool waitmore = true;
+ // while (! client->WaitOnConnect(seconds, millis) && waitmore )
+ // {
+ // // possibly give some feedback to the user,
+ // // update waitmore if needed.
+ // }
+ // bool success = client->IsConnected();
+ //
+ // And that's all :-)
+
+ sock_client = new wxSocketClient();
+ sock_client->SetTimeout( 2 ); // Time out in Seconds
+ sock_client->Connect( addr, false );
+ sock_client->WaitOnConnect( 0, 100 );
+
+ if( sock_client->Ok() && sock_client->IsConnected() )
+ {
+ success = true;
+ sock_client->SetFlags( wxSOCKET_NOWAIT /*wxSOCKET_WAITALL*/ );
+ sock_client->Write( cmdline, strlen( cmdline ) );
+ }
+
+ sock_client->Close();
+ sock_client->Destroy();
+ return success;
+}
diff --git a/common/eda_doc.cpp b/common/eda_doc.cpp
new file mode 100644
index 0000000..d94d00c
--- /dev/null
+++ b/common/eda_doc.cpp
@@ -0,0 +1,241 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file eda_doc.cpp
+ */
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <common.h>
+#include <confirm.h>
+#include <gestfich.h>
+
+#include <wx/mimetype.h>
+#include <wx/tokenzr.h>
+#include <wx/filename.h>
+#include <macros.h>
+
+
+void PGM_BASE::ReadPdfBrowserInfos()
+{
+ wxASSERT( m_common_settings );
+
+ wxString browser = m_common_settings->Read( wxT( "PdfBrowserName" ), wxEmptyString );
+ SetPdfBrowserName( browser );
+
+ int tmp;
+ m_common_settings->Read( wxT( "UseSystemBrowser" ), &tmp, 0 );
+ m_use_system_pdf_browser = bool( tmp );
+}
+
+
+void PGM_BASE::WritePdfBrowserInfos()
+{
+ wxASSERT( m_common_settings );
+
+ m_common_settings->Write( wxT( "PdfBrowserName" ), GetPdfBrowserName() );
+ m_common_settings->Write( wxT( "UseSystemBrowser" ), m_use_system_pdf_browser );
+}
+
+
+// Mime type extensions (PDF files are not considered here)
+static wxMimeTypesManager* mimeDatabase;
+static const wxFileTypeInfo EDAfallbacks[] =
+{
+ wxFileTypeInfo( wxT( "text/html" ),
+ wxT( "wxhtml %s" ),
+ wxT( "wxhtml %s" ),
+ wxT( "html document (from KiCad)" ),
+ wxT( "htm" ),
+ wxT( "html" ),wxNullPtr ),
+
+ wxFileTypeInfo( wxT( "application/sch" ),
+ wxT( "eeschema %s" ),
+ wxT( "eeschema -p %s" ),
+ wxT( "sch document (from KiCad)" ),
+ wxT( "sch" ),
+ wxT( "SCH" ), wxNullPtr ),
+
+ // must terminate the table with this!
+ wxFileTypeInfo()
+};
+
+
+bool GetAssociatedDocument( wxWindow* aParent,
+ const wxString& aDocName,
+ const wxPathList* aPaths)
+
+{
+ wxString docname, fullfilename;
+ wxString msg;
+ wxString command;
+ bool success = false;
+
+ // Is an internet url
+ static const wxChar* url_header[] = {
+ wxT( "http:" ),
+ wxT( "https:" ),
+ wxT( "ftp:" ),
+ wxT( "www." )
+ };
+
+ for( unsigned ii = 0; ii < DIM(url_header); ii++ )
+ {
+ if( aDocName.First( url_header[ii] ) == 0 ) // looks like an internet url
+ {
+ wxLaunchDefaultBrowser( aDocName );
+ return true;
+ }
+ }
+
+ docname = aDocName;
+
+#ifdef __WINDOWS__
+ docname.Replace( UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP );
+#else
+ docname.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
+#endif
+
+
+ /* Compute the full file name */
+ if( wxIsAbsolutePath( aDocName ) || aPaths == NULL)
+ fullfilename = aDocName;
+ /* If the file exists, this is a trivial case: return the filename
+ * "as this". the name can be an absolute path, or a relative path
+ * like ./filename or ../<filename>
+ */
+ else if( wxFileName::FileExists( aDocName ) )
+ fullfilename = aDocName;
+ else
+ {
+ fullfilename = aPaths->FindValidPath( aDocName );
+ }
+
+ wxString mask( wxT( "*" ) ), extension;
+
+#ifdef __WINDOWS__
+ mask += wxT( ".*" );
+ extension = wxT( ".*" );
+#endif
+
+ if( wxIsWild( fullfilename ) )
+ {
+ fullfilename = EDA_FILE_SELECTOR( _( "Doc Files" ),
+ wxPathOnly( fullfilename ),
+ fullfilename,
+ extension,
+ mask,
+ aParent,
+ wxFD_OPEN,
+ true,
+ wxPoint( -1, -1 ) );
+ if( fullfilename.IsEmpty() )
+ return false;
+ }
+
+ if( !wxFileExists( fullfilename ) )
+ {
+ msg.Printf( _( "Doc File '%s' not found" ), GetChars( aDocName ) );
+ DisplayError( aParent, msg );
+ return false;
+ }
+
+ wxFileName currentFileName( fullfilename );
+
+ wxString file_ext = currentFileName.GetExt();
+
+ if( file_ext == wxT( "pdf" ) )
+ {
+ success = OpenPDF( fullfilename );
+ return success;
+ }
+
+ /* Try to launch some browser (useful under linux) */
+ wxFileType* filetype;
+
+ wxString type;
+ filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( file_ext );
+
+ if( !filetype ) // 2nd attempt.
+ {
+ mimeDatabase = new wxMimeTypesManager;
+ mimeDatabase->AddFallbacks( EDAfallbacks );
+ filetype = mimeDatabase->GetFileTypeFromExtension( file_ext );
+ delete mimeDatabase;
+ mimeDatabase = NULL;
+ }
+
+ if( filetype )
+ {
+ wxFileType::MessageParameters params( fullfilename, type );
+
+ success = filetype->GetOpenCommand( &command, params );
+ delete filetype;
+
+ if( success )
+ success = ProcessExecute( command );
+ }
+
+ if( !success )
+ {
+ msg.Printf( _( "Unknown MIME type for doc file <%s>" ), GetChars( fullfilename ) );
+ DisplayError( aParent, msg );
+ }
+
+ return success;
+}
+
+
+int KeyWordOk( const wxString& KeyList, const wxString& Database )
+{
+ wxString KeysCopy, DataList;
+
+ if( KeyList.IsEmpty() )
+ return 0;
+
+ KeysCopy = KeyList; KeysCopy.MakeUpper();
+ DataList = Database; DataList.MakeUpper();
+
+ wxStringTokenizer Token( KeysCopy, wxT( " \n\r" ) );
+
+ while( Token.HasMoreTokens() )
+ {
+ wxString Key = Token.GetNextToken();
+
+ // Search Key in Datalist:
+ wxStringTokenizer Data( DataList, wxT( " \n\r" ) );
+
+ while( Data.HasMoreTokens() )
+ {
+ wxString word = Data.GetNextToken();
+
+ if( word == Key )
+ return 1; // Key found !
+ }
+ }
+
+ // keyword not found
+ return 0;
+}
diff --git a/common/eda_text.cpp b/common/eda_text.cpp
new file mode 100644
index 0000000..0b53d00
--- /dev/null
+++ b/common/eda_text.cpp
@@ -0,0 +1,517 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2004-2016 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file eda_text.cpp
+ * @brief Implementation of base KiCad text object.
+ */
+
+#include <eda_text.h>
+#include <drawtxt.h>
+#include <macros.h>
+#include <trigo.h> // RotatePoint
+#include <class_drawpanel.h> // EDA_DRAW_PANEL
+
+// Conversion to application internal units defined at build time.
+#if defined( PCBNEW )
+ #include <class_board_item.h> // for FMT_IU
+#elif defined( EESCHEMA )
+ #include <sch_item_struct.h> // for FMT_IU
+#elif defined( GERBVIEW )
+#elif defined( PL_EDITOR )
+ #include <base_units.h>
+ #define FMT_IU Double2Str
+#else
+#error "Cannot resolve units formatting due to no definition of EESCHEMA or PCBNEW."
+#endif
+
+#include <gal/stroke_font.h>
+
+#include <convert_to_biu.h>
+
+EDA_TEXT::EDA_TEXT( const wxString& text )
+{
+ m_Size.x = m_Size.y = Mils2iu( DEFAULT_SIZE_TEXT ); // Width and height of font.
+ m_Orient = 0; // Rotation angle in 0.1 degrees.
+ m_Attributs = 0;
+ m_Mirror = false; // display mirror if true
+ m_HJustify = GR_TEXT_HJUSTIFY_CENTER; // Default horizontal justification is centered.
+ m_VJustify = GR_TEXT_VJUSTIFY_CENTER; // Default vertical justification is centered.
+ m_Thickness = 0; // thickness
+ m_Italic = false; // true = italic shape.
+ m_Bold = false;
+ m_MultilineAllowed = false; // Set to true for multiline text.
+ m_Text = text;
+}
+
+
+EDA_TEXT::EDA_TEXT( const EDA_TEXT& aText )
+{
+ m_Pos = aText.m_Pos;
+ m_Size = aText.m_Size;
+ m_Orient = aText.m_Orient;
+ m_Attributs = aText.m_Attributs;
+ m_Mirror = aText.m_Mirror;
+ m_HJustify = aText.m_HJustify;
+ m_VJustify = aText.m_VJustify;
+ m_Thickness = aText.m_Thickness;
+ m_Italic = aText.m_Italic;
+ m_Bold = aText.m_Bold;
+ m_MultilineAllowed = aText.m_MultilineAllowed;
+ m_Text = aText.m_Text;
+}
+
+
+EDA_TEXT::~EDA_TEXT()
+{
+}
+
+
+int EDA_TEXT::LenSize( const wxString& aLine ) const
+{
+ return GraphicTextWidth( aLine, m_Size.x, m_Italic, m_Bold );
+}
+
+
+wxString EDA_TEXT::ShortenedShownText() const
+{
+ wxString tmp = GetShownText();
+ tmp.Replace( wxT( "\n" ), wxT( " " ) );
+ tmp.Replace( wxT( "\r" ), wxT( " " ) );
+ tmp.Replace( wxT( "\t" ), wxT( " " ) );
+
+ if( tmp.Length() > 15 )
+ tmp = tmp.Left( 12 ) + wxT( "..." );
+
+ return tmp;
+}
+
+
+/*
+ * calculate the distance (pitch) between 2 text lines
+ * the distance includes the interline + room for chars like j { and [
+ * Is used for multiline texts, but also for single line texts, to calculate
+ * the text bounding box
+ */
+int EDA_TEXT::GetInterline( int aTextThickness ) const
+{
+ int thickness = aTextThickness <= 0 ? m_Thickness : aTextThickness;
+ return KiROUND( m_Size.y * KIGFX::STROKE_FONT::INTERLINE_PITCH_RATIO ) + thickness;
+}
+
+EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
+{
+ EDA_RECT rect;
+ wxPoint pos;
+ wxArrayString strings;
+ wxString text = GetShownText();
+ int thickness = ( aThickness < 0 ) ? m_Thickness : aThickness;
+ int linecount = 1;
+
+ if( m_MultilineAllowed )
+ {
+ wxStringSplit( text, strings, '\n' );
+
+ if( strings.GetCount() ) // GetCount() == 0 for void strings
+ {
+ if( aLine >= 0 && (aLine < (int)strings.GetCount()) )
+ text = strings.Item( aLine );
+ else
+ text = strings.Item( 0 );
+
+ linecount = strings.GetCount();
+ }
+ }
+
+ // calculate the H and V size
+ int dx = LenSize( text );
+ int dy = GetInterline( aThickness );
+
+ // Creates bounding box (rectangle) for an horizontal text
+ wxSize textsize = wxSize( dx, dy );
+
+ if( aInvertY )
+ rect.SetOrigin( m_Pos.x, -m_Pos.y );
+ else
+ rect.SetOrigin( m_Pos );
+
+ // The bbox vertical size returned by GetInterline( aThickness )
+ // includes letters like j and y and ] + interval between lines.
+ // The interval below the last line is not usefull, and we can use its half value
+ // as vertical margin above the text
+ // the full interval is roughly m_Size.y * 0.4 - aThickness/2
+ rect.Move( wxPoint( 0, aThickness/4 - KiROUND( m_Size.y * 0.2 ) ) );
+
+ // for multiline texts and aLine < 0, merge all rectangles
+ // ( if aLine < 0, we want the full text bounding box )
+ if( m_MultilineAllowed && aLine < 0 )
+ {
+ for( unsigned ii = 1; ii < strings.GetCount(); ii++ )
+ {
+ text = strings.Item( ii );
+ dx = LenSize( text );
+ textsize.x = std::max( textsize.x, dx );
+ textsize.y += dy;
+ }
+ }
+
+ rect.SetSize( textsize );
+
+ /* Now, calculate the rect origin, according to text justification
+ * At this point the rectangle origin is the text origin (m_Pos).
+ * This is true only for left and top text justified texts (using top to bottom Y axis
+ * orientation). and must be recalculated for others justifications
+ * also, note the V justification is relative to the first line
+ */
+ switch( m_HJustify )
+ {
+ case GR_TEXT_HJUSTIFY_LEFT:
+ if( m_Mirror )
+ rect.SetX( rect.GetX() - rect.GetWidth() );
+ break;
+
+ case GR_TEXT_HJUSTIFY_CENTER:
+ rect.SetX( rect.GetX() - (rect.GetWidth() / 2) );
+ break;
+
+ case GR_TEXT_HJUSTIFY_RIGHT:
+ if( !m_Mirror )
+ rect.SetX( rect.GetX() - rect.GetWidth() );
+ break;
+ }
+
+ dy = m_Size.y + thickness;
+
+ switch( m_VJustify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP:
+ break;
+
+ case GR_TEXT_VJUSTIFY_CENTER:
+ rect.SetY( rect.GetY() - ( dy / 2) );
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ rect.SetY( rect.GetY() - dy );
+ break;
+ }
+
+ if( linecount > 1 )
+ {
+ int yoffset;
+ linecount -= 1;
+
+ switch( m_VJustify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP:
+ break;
+
+ case GR_TEXT_VJUSTIFY_CENTER:
+ yoffset = linecount * GetInterline() / 2;
+ rect.SetY( rect.GetY() - yoffset );
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ yoffset = linecount * GetInterline( aThickness );
+ rect.SetY( rect.GetY() - yoffset );
+ break;
+ }
+ }
+
+ rect.Normalize(); // Make h and v sizes always >= 0
+
+ return rect;
+}
+
+
+bool EDA_TEXT::TextHitTest( const wxPoint& aPoint, int aAccuracy ) const
+{
+ EDA_RECT rect = GetTextBox( -1 ); // Get the full text area.
+ wxPoint location = aPoint;
+
+ rect.Inflate( aAccuracy );
+ RotatePoint( &location, m_Pos, -m_Orient );
+
+ return rect.Contains( location );
+}
+
+
+bool EDA_TEXT::TextHitTest( const EDA_RECT& aRect, bool aContains, int aAccuracy ) const
+{
+ EDA_RECT rect = aRect;
+
+ rect.Inflate( aAccuracy );
+
+ if( aContains )
+ return rect.Contains( GetTextBox( -1 ) );
+
+ return rect.Intersects( GetTextBox( -1 ) );
+}
+
+
+void EDA_TEXT::Draw( EDA_RECT* aClipBox, wxDC* aDC, const wxPoint& aOffset,
+ EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode,
+ EDA_DRAW_MODE_T aFillMode, EDA_COLOR_T aAnchor_color )
+{
+ if( m_MultilineAllowed )
+ {
+ std::vector<wxPoint> positions;
+ wxArrayString strings;
+ wxStringSplit( GetShownText(), strings, '\n' );
+ positions.reserve( strings.Count() );
+
+ GetPositionsOfLinesOfMultilineText(positions, strings.Count() );
+
+ for( unsigned ii = 0; ii < strings.Count(); ii++ )
+ {
+ wxString& txt = strings.Item( ii );
+ drawOneLineOfText( aClipBox, aDC, aOffset, aColor,
+ aDrawMode, aFillMode, txt, positions[ii] );
+ }
+ }
+ else
+ drawOneLineOfText( aClipBox, aDC, aOffset, aColor,
+ aDrawMode, aFillMode, GetShownText(), m_Pos );
+
+ // Draw text anchor, if requested
+ if( aAnchor_color != UNSPECIFIED_COLOR )
+ {
+ GRDrawAnchor( aClipBox, aDC,
+ m_Pos.x + aOffset.x, m_Pos.y + aOffset.y,
+ DIM_ANCRE_TEXTE, aAnchor_color );
+ }
+}
+
+
+void EDA_TEXT::GetPositionsOfLinesOfMultilineText(
+ std::vector<wxPoint>& aPositions, int aLineCount ) const
+{
+ wxPoint pos = m_Pos; // Position of first line of the
+ // multiline text according to
+ // the center of the multiline text block
+
+ wxPoint offset; // Offset to next line.
+
+ offset.y = GetInterline();
+
+ if( aLineCount > 1 )
+ {
+ switch( m_VJustify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP:
+ break;
+
+ case GR_TEXT_VJUSTIFY_CENTER:
+ pos.y -= ( aLineCount - 1 ) * offset.y / 2;
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ pos.y -= ( aLineCount - 1 ) * offset.y;
+ break;
+ }
+ }
+
+ // Rotate the position of the first line
+ // around the center of the multiline text block
+ RotatePoint( &pos, m_Pos, m_Orient );
+
+ // Rotate the offset lines to increase happened in the right direction
+ RotatePoint( &offset, m_Orient );
+
+ for( int ii = 0; ii < aLineCount; ii++ )
+ {
+ aPositions.push_back( pos );
+ pos += offset;
+ }
+}
+
+void EDA_TEXT::drawOneLineOfText( EDA_RECT* aClipBox, wxDC* aDC,
+ const wxPoint& aOffset, EDA_COLOR_T aColor,
+ GR_DRAWMODE aDrawMode, EDA_DRAW_MODE_T aFillMode,
+ const wxString& aText, const wxPoint &aPos )
+{
+ int width = m_Thickness;
+
+ if( aDrawMode != UNSPECIFIED_DRAWMODE )
+ GRSetDrawMode( aDC, aDrawMode );
+
+ if( aFillMode == SKETCH )
+ width = -width;
+
+ wxSize size = m_Size;
+
+ if( m_Mirror )
+ size.x = -size.x;
+
+ DrawGraphicText( aClipBox, aDC, aOffset + aPos, aColor, aText, m_Orient, size,
+ m_HJustify, m_VJustify, width, m_Italic, m_Bold );
+}
+
+
+wxString EDA_TEXT::GetTextStyleName()
+{
+ int style = 0;
+
+ if( m_Italic )
+ style = 1;
+
+ if( m_Bold )
+ style += 2;
+
+ wxString stylemsg[4] = {
+ _("Normal"),
+ _("Italic"),
+ _("Bold"),
+ _("Bold+Italic")
+ };
+
+ return stylemsg[style];
+}
+
+
+bool EDA_TEXT::IsDefaultFormatting() const
+{
+ return ( ( m_Size.x == Mils2iu( DEFAULT_SIZE_TEXT ) )
+ && ( m_Size.y == Mils2iu( DEFAULT_SIZE_TEXT ) )
+ && ( m_Attributs == 0 )
+ && ( m_Mirror == false )
+ && ( m_HJustify == GR_TEXT_HJUSTIFY_CENTER )
+ && ( m_VJustify == GR_TEXT_VJUSTIFY_CENTER )
+ && ( m_Thickness == 0 )
+ && ( m_Italic == false )
+ && ( m_Bold == false )
+ && ( m_MultilineAllowed == false ) );
+}
+
+void EDA_TEXT::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR )
+{
+#ifndef GERBVIEW // Gerbview does not use EDA_TEXT::Format
+ // and does not define FMT_IU, used here
+ // however this function should exist
+ if( !IsDefaultFormatting() )
+ {
+ aFormatter->Print( aNestLevel+1, "(effects" );
+
+ if( ( m_Size.x != Mils2iu( DEFAULT_SIZE_TEXT ) )
+ || ( m_Size.y != Mils2iu( DEFAULT_SIZE_TEXT ) )
+ || ( m_Thickness != 0 ) || m_Bold || m_Italic )
+ {
+ aFormatter->Print( 0, " (font" );
+
+ // Add font support here at some point in the future.
+
+ if( ( m_Size.x != Mils2iu( DEFAULT_SIZE_TEXT ) )
+ || ( m_Size.y != Mils2iu( DEFAULT_SIZE_TEXT ) ) )
+ aFormatter->Print( 0, " (size %s %s)", FMT_IU( m_Size.GetHeight() ).c_str(),
+ FMT_IU( m_Size.GetWidth() ).c_str() );
+
+ if( m_Thickness != 0 )
+ aFormatter->Print( 0, " (thickness %s)", FMT_IU( GetThickness() ).c_str() );
+
+ if( m_Bold )
+ aFormatter->Print( 0, " bold" );
+
+ if( IsItalic() )
+ aFormatter->Print( 0, " italic" );
+
+ aFormatter->Print( 0, ")");
+ }
+
+ if( m_Mirror || ( m_HJustify != GR_TEXT_HJUSTIFY_CENTER )
+ || ( m_VJustify != GR_TEXT_VJUSTIFY_CENTER ) )
+ {
+ aFormatter->Print( 0, " (justify");
+
+ if( m_HJustify != GR_TEXT_HJUSTIFY_CENTER )
+ aFormatter->Print( 0, (m_HJustify == GR_TEXT_HJUSTIFY_LEFT) ? " left" : " right" );
+
+ if( m_VJustify != GR_TEXT_VJUSTIFY_CENTER )
+ aFormatter->Print( 0, (m_VJustify == GR_TEXT_VJUSTIFY_TOP) ? " top" : " bottom" );
+
+ if( m_Mirror )
+ aFormatter->Print( 0, " mirror" );
+
+ aFormatter->Print( 0, ")" );
+ }
+
+ // As of now the only place this is used is in Eeschema to hide or show the text.
+ if( m_Attributs )
+ aFormatter->Print( 0, " hide" );
+
+ aFormatter->Print( 0, ")\n" );
+ }
+#endif
+}
+
+// Convert the text shape to a list of segment
+// each segment is stored as 2 wxPoints: its starting point and its ending point
+// we are using DrawGraphicText to create the segments.
+// and therefore a call-back function is needed
+static std::vector<wxPoint>* s_cornerBuffer;
+
+// This is a call back function, used by DrawGraphicText to put each segment in buffer
+static void addTextSegmToBuffer( int x0, int y0, int xf, int yf )
+{
+ s_cornerBuffer->push_back( wxPoint( x0, y0 ) );
+ s_cornerBuffer->push_back( wxPoint( xf, yf ) );
+}
+
+void EDA_TEXT::TransformTextShapeToSegmentList( std::vector<wxPoint>& aCornerBuffer ) const
+{
+ wxSize size = GetSize();
+
+ if( IsMirrored() )
+ size.x = -size.x;
+
+ s_cornerBuffer = &aCornerBuffer;
+ EDA_COLOR_T color = BLACK; // not actually used, but needed by DrawGraphicText
+
+ if( IsMultilineAllowed() )
+ {
+ wxArrayString strings_list;
+ wxStringSplit( GetShownText(), strings_list, wxChar('\n') );
+ std::vector<wxPoint> positions;
+ positions.reserve( strings_list.Count() );
+ GetPositionsOfLinesOfMultilineText( positions,strings_list.Count() );
+
+ for( unsigned ii = 0; ii < strings_list.Count(); ii++ )
+ {
+ wxString txt = strings_list.Item( ii );
+ DrawGraphicText( NULL, NULL, positions[ii], color,
+ txt, GetOrientation(), size,
+ GetHorizJustify(), GetVertJustify(),
+ GetThickness(), IsItalic(),
+ true, addTextSegmToBuffer );
+ }
+ }
+ else
+ {
+ DrawGraphicText( NULL, NULL, GetTextPosition(), color,
+ GetText(), GetOrientation(), size,
+ GetHorizJustify(), GetVertJustify(),
+ GetThickness(), IsItalic(),
+ true, addTextSegmToBuffer );
+ }
+}
diff --git a/common/filter_reader.cpp b/common/filter_reader.cpp
new file mode 100644
index 0000000..7ab9018
--- /dev/null
+++ b/common/filter_reader.cpp
@@ -0,0 +1,107 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <string.h>
+#include <richio.h>
+#include <filter_reader.h>
+
+
+FILTER_READER::FILTER_READER( LINE_READER& aReader ) :
+ LINE_READER( 1 ),
+ reader( aReader )
+{
+ // Not using our own line buffer, will be using aReader's. This changes
+ // the meaning of this->line to be merely a pointer to aReader's line, which of course
+ // is not owned here.
+ delete [] line;
+
+ line = 0;
+}
+
+
+FILTER_READER::~FILTER_READER()
+{
+ // Our 'line' points to aReader's, and he will delete that buffer.
+ // Prevent subsequent call to ~LINE_READER() from deleting a buffer we do not own.
+ line = 0;
+}
+
+
+char* FILTER_READER::ReadLine() throw( IO_ERROR )
+{
+ char* s;
+
+ while( ( s = reader.ReadLine() ) != NULL )
+ {
+ if( !strchr( "#\n\r", s[0] ) )
+ break;
+ }
+
+ line = reader.Line();
+ length = reader.Length();
+
+ return length ? line : NULL;
+}
+
+
+WHITESPACE_FILTER_READER::WHITESPACE_FILTER_READER( LINE_READER& aReader ) :
+ LINE_READER( 1 ),
+ reader( aReader )
+{
+ // Not using our own line buffer, will be using aReader's. This changes
+ // the meaning of this->line to be merely a pointer to aReader's line, which of course
+ // is not owned here.
+ delete [] line;
+
+ line = 0;
+}
+
+
+WHITESPACE_FILTER_READER::~WHITESPACE_FILTER_READER()
+{
+ // Our 'line' points to aReader's, and he will delete that buffer.
+ // Prevent subsequent call to ~LINE_READER() from deleting a buffer we do not own.
+ line = 0;
+}
+
+
+char* WHITESPACE_FILTER_READER::ReadLine() throw( IO_ERROR )
+{
+ char* s;
+
+ while( ( s = reader.ReadLine() ) != NULL )
+ {
+ while( s != NULL && strchr( " \t", *s ) )
+ s++;
+
+ if( s != NULL && !strchr( "#\n\r", *s ) )
+ break;
+ }
+
+ line = s;
+ length = reader.Length();
+
+ return length ? line : NULL;
+}
diff --git a/common/findkicadhelppath.cpp.notused b/common/findkicadhelppath.cpp.notused
new file mode 100644
index 0000000..d2d781e
--- /dev/null
+++ b/common/findkicadhelppath.cpp.notused
@@ -0,0 +1,126 @@
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <macros.h>
+#include <gestfich.h>
+
+
+/**
+ * Function FindKicadHelpPath
+ * finds the absolute path for KiCad "help" (or "help/&ltlanguage&gt")
+ * Find path kicad/doc/help/xx/ or kicad/doc/help/:
+ * from BinDir
+ * else from environment variable KICAD
+ * else from one of s_HelpPathList
+ * typically c:/kicad/doc/help or /usr/share/kicad/help
+ * or /usr/local/share/kicad/help
+ * (must have kicad in path name)
+ *
+ * xx = iso639-1 language id (2 letters (generic) or 4 letters):
+ * fr = french (or fr_FR)
+ * en = English (or en_GB or en_US ...)
+ * de = deutch
+ * es = spanish
+ * pt = portuguese (or pt_BR ...)
+ *
+ * default = en (if not found = fr)
+ */
+wxString FindKicadHelpPath()
+{
+ bool found = false;
+ wxString bin_dir = Pgm().GetExecutablePath();
+
+ if( bin_dir.Last() == '/' )
+ bin_dir.RemoveLast();
+
+ wxString fullPath = bin_dir.BeforeLast( '/' ); // cd ..
+
+ fullPath += wxT( "/doc/help/" );
+
+ wxString localeString = Pgm().GetLocale()->GetCanonicalName();
+
+ wxString path_tmp = fullPath;
+
+#ifdef __WINDOWS__
+ path_tmp.MakeLower();
+#endif
+
+ if( path_tmp.Contains( wxT( "kicad" ) ) )
+ {
+ if( wxDirExists( fullPath ) )
+ found = true;
+ }
+
+ // find kicad/help/ from environment variable KICAD
+ if( !found && Pgm().IsKicadEnvVariableDefined() )
+ {
+ fullPath = Pgm().GetKicadEnvVariable() + wxT( "/doc/help/" );
+
+ if( wxDirExists( fullPath ) )
+ found = true;
+ }
+
+ if( !found )
+ {
+ // Possibilities online help
+ const static wxChar* possibilities[] = {
+#ifdef __WINDOWS__
+ wxT( "c:/kicad/doc/help/" ),
+ wxT( "d:/kicad/doc/help/" ),
+ wxT( "c:/Program Files/kicad/doc/help/" ),
+ wxT( "d:/Program Files/kicad/doc/help/" ),
+#else
+ wxT( "/usr/share/doc/kicad/help/" ),
+ wxT( "/usr/local/share/doc/kicad/help/" ),
+ wxT( "/usr/local/kicad/doc/help/" ), // default install for "universal
+ // tarballs" and build for a server
+ // (new)
+ wxT( "/usr/local/kicad/help/" ), // default install for "universal
+ // tarballs" and build for a server
+ // (old)
+#endif
+ };
+
+ for( unsigned i=0; i<DIM(possibilities); ++i )
+ {
+ fullPath = possibilities[i];
+
+ if( wxDirExists( fullPath ) )
+ {
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if( found )
+ {
+ wxString langFullPath = fullPath + localeString + UNIX_STRING_DIR_SEP;
+
+ if( wxDirExists( langFullPath ) )
+ return langFullPath;
+
+ langFullPath = fullPath + localeString.Left( 2 ) + UNIX_STRING_DIR_SEP;
+
+ if( wxDirExists( langFullPath ) )
+ return langFullPath;
+
+ langFullPath = fullPath + wxT( "en/" );
+
+ if( wxDirExists( langFullPath ) )
+ {
+ return langFullPath;
+ }
+ else
+ {
+ langFullPath = fullPath + wxT( "fr/" );
+
+ if( wxDirExists( langFullPath ) )
+ return langFullPath;
+ }
+ return fullPath;
+ }
+
+ return wxEmptyString;
+}
+
diff --git a/common/footprint_info.cpp b/common/footprint_info.cpp
new file mode 100644
index 0000000..3f5e64b
--- /dev/null
+++ b/common/footprint_info.cpp
@@ -0,0 +1,317 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 Jean-Pierre Charras, <jp.charras@wanadoo.fr>
+ * Copyright (C) 2013-2016 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file footprint_info.cpp
+ */
+
+
+/**
+ No. concurrent threads doing "http(s) GET". More than 6 is not significantly
+ faster, less than 6 is likely slower. Main thread is in this count, so if
+ set to 1 then no temp threads are created.
+*/
+#define READER_THREADS 6
+
+/*
+ * Functions to read footprint libraries and fill m_footprints by available footprints names
+ * and their documentation (comments and keywords)
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <macros.h>
+#include <pgm_base.h>
+#include <wildcards_and_files_ext.h>
+#include <footprint_info.h>
+#include <io_mgr.h>
+#include <fp_lib_table.h>
+#include <fpid.h>
+#include <class_module.h>
+#include <boost/thread.hpp>
+#include <html_messagebox.h>
+
+
+/*
+static wxString ToHTMLFragment( const IO_ERROR* aDerivative )
+{
+ @todo
+
+ 1) change up IO_ERROR so it keeps linenumbers, source file name and
+ error message in separate strings.
+
+ 2) Add a summarizing virtual member like
+ virtual wxString What()
+ to combine all portions of an IO_ERROR's text into a single wxString.
+
+ 3) Do same for PARSE_ERROR.
+
+ 4) Add a "reason or error category" to IO_ERROR and thereby also PARSE_ERROR?
+
+ msg += "
+
+ for( int i=0; i<aCount; ++i )
+ {
+
+
+ wxArrayString* sl = wxStringSplit( aList, wxChar( '\n' ) );
+
+
+ delete sl;
+ }
+
+ wxString msg = wxT( "<ul>" );
+
+ for ( unsigned ii = 0; ii < strings_list->GetCount(); ii++ )
+ {
+ msg += wxT( "<li>" );
+ msg += strings_list->Item( ii ) + wxT( "</li>" );
+ }
+
+ msg += wxT( "</ul>" );
+
+ m_htmlWindow->AppendToPage( msg );
+
+ delete strings_list;
+}
+*/
+
+
+void FOOTPRINT_INFO::load()
+{
+ FP_LIB_TABLE* fptable = m_owner->GetTable();
+
+ wxASSERT( fptable );
+
+ std::auto_ptr<MODULE> m( fptable->FootprintLoad( m_nickname, m_fpname ) );
+
+ if( m.get() == NULL ) // Should happen only with malformed/broken libraries
+ {
+ m_pad_count = 0;
+ m_unique_pad_count = 0;
+ }
+ else
+ {
+ m_pad_count = m->GetPadCount( DO_NOT_INCLUDE_NPTH );
+ m_unique_pad_count = m->GetUniquePadCount( DO_NOT_INCLUDE_NPTH );
+ m_keywords = m->GetKeywords();
+ m_doc = m->GetDescription();
+
+ // tell ensure_loaded() I'm loaded.
+ m_loaded = true;
+ }
+}
+
+
+void FOOTPRINT_LIST::loader_job( const wxString* aNicknameList, int aJobZ )
+{
+ for( int i=0; i<aJobZ; ++i )
+ {
+ const wxString& nickname = aNicknameList[i];
+
+ try
+ {
+ wxArrayString fpnames = m_lib_table->FootprintEnumerate( nickname );
+
+ for( unsigned ni=0; ni<fpnames.GetCount(); ++ni )
+ {
+ FOOTPRINT_INFO* fpinfo = new FOOTPRINT_INFO( this, nickname, fpnames[ni] );
+
+ addItem( fpinfo );
+ }
+ }
+ catch( const PARSE_ERROR& pe )
+ {
+ // m_errors.push_back is not thread safe, lock its MUTEX.
+ MUTLOCK lock( m_errors_lock );
+
+ ++m_error_count; // modify only under lock
+ m_errors.push_back( new IO_ERROR( pe ) );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ MUTLOCK lock( m_errors_lock );
+
+ ++m_error_count;
+ m_errors.push_back( new IO_ERROR( ioe ) );
+ }
+
+ // Catch anything unexpected and map it into the expected.
+ // Likely even more important since this function runs on GUI-less
+ // worker threads.
+ catch( const std::exception& se )
+ {
+ // This is a round about way to do this, but who knows what THROW_IO_ERROR()
+ // may be tricked out to do someday, keep it in the game.
+ try
+ {
+ THROW_IO_ERROR( se.what() );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ MUTLOCK lock( m_errors_lock );
+
+ ++m_error_count;
+ m_errors.push_back( new IO_ERROR( ioe ) );
+ }
+ }
+ }
+}
+
+
+bool FOOTPRINT_LIST::ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxString* aNickname )
+{
+ bool retv = true;
+
+ m_lib_table = aTable;
+
+ // Clear data before reading files
+ m_error_count = 0;
+ m_errors.clear();
+ m_list.clear();
+
+ if( aNickname )
+ // single footprint
+ loader_job( aNickname, 1 );
+ else
+ {
+ std::vector< wxString > nicknames;
+
+ // do all of them
+ nicknames = aTable->GetLogicalLibs();
+
+ // Even though the PLUGIN API implementation is the place for the
+ // locale toggling, in order to keep LOCAL_IO::C_count at 1 or greater
+ // for the duration of all helper threads, we increment by one here via instantiation.
+ // Only done here because of the multi-threaded nature of this code.
+ // Without this C_count skips in and out of "equal to zero" and causes
+ // needless locale toggling among the threads, based on which of them
+ // are in a PLUGIN::FootprintLoad() function. And that is occasionally
+ // none of them.
+ LOCALE_IO top_most_nesting;
+
+ // Something which will not invoke a thread copy constructor, one of many ways obviously:
+ typedef boost::ptr_vector< boost::thread > MYTHREADS;
+
+ MYTHREADS threads;
+
+ unsigned jobz = (nicknames.size() + READER_THREADS - 1) / READER_THREADS;
+
+ // Give each thread JOBZ nicknames to process. The last portion of, or if the entire
+ // size() is small, I'll do myself.
+ for( unsigned i=0; i<nicknames.size(); )
+ {
+ if( i + jobz >= nicknames.size() ) // on the last iteration of this for(;;)
+ {
+ jobz = nicknames.size() - i;
+
+ // Only a little bit to do, I'll do it myself on current thread.
+ // I am part of the READER_THREADS count.
+ loader_job( &nicknames[i], jobz );
+ }
+ else
+ {
+ // Delegate the job to a temporary thread created here.
+ threads.push_back( new boost::thread( &FOOTPRINT_LIST::loader_job,
+ this, &nicknames[i], jobz ) );
+ }
+
+ i += jobz;
+ }
+
+ // Wait for all the worker threads to complete, it does not matter in what order
+ // we wait for them as long as a full sweep is made. Think of the great race,
+ // everyone must finish.
+ for( unsigned i=0; i<threads.size(); ++i )
+ {
+ threads[i].join();
+ }
+
+ m_list.sort();
+ }
+
+ // The result of this function can be a blend of successes and failures, whose
+ // mix is given by the Count()s of the two lists. The return value indicates whether
+ // an abort occurred, even true does not necessarily mean full success, although
+ // false definitely means failure.
+
+ return retv;
+}
+
+
+FOOTPRINT_INFO* FOOTPRINT_LIST::GetModuleInfo( const wxString& aFootprintName )
+{
+ if( aFootprintName.IsEmpty() )
+ return NULL;
+
+ BOOST_FOREACH( FOOTPRINT_INFO& fp, m_list )
+ {
+ FPID fpid;
+
+ wxCHECK_MSG( fpid.Parse( aFootprintName ) < 0, NULL,
+ wxString::Format( wxT( "'%s' is not a valid FPID." ),
+ GetChars( aFootprintName ) ) );
+
+ wxString libNickname = fpid.GetLibNickname();
+ wxString footprintName = fpid.GetFootprintName();
+
+ if( libNickname == fp.GetNickname() && footprintName == fp.GetFootprintName() )
+ return &fp;
+ }
+
+ return NULL;
+}
+
+
+bool FOOTPRINT_INFO::InLibrary( const wxString& aLibrary ) const
+{
+ return aLibrary == m_nickname;
+}
+
+
+void FOOTPRINT_LIST::DisplayErrors( wxTopLevelWindow* aWindow )
+{
+ // @todo: go to a more HTML !<table>! ? centric output, possibly with
+ // recommendations for remedy of errors. Add numeric error codes
+ // to PARSE_ERROR, and switch on them for remedies, etc. Full
+ // access is provided to everything in every exception!
+
+ HTML_MESSAGE_BOX dlg( aWindow, _( "Load Error" ) );
+
+ dlg.MessageSet( _( "Errors were encountered loading footprints:" ) );
+
+ wxString msg;
+
+ for( unsigned i = 0; i<m_errors.size(); ++i )
+ {
+ msg += wxT( "<p>" ) + m_errors[i].errorText + wxT( "</p>" );
+ }
+
+ // Preserve new lines in error messages so queued errors don't run together.
+ msg.Replace( "\n", "<BR>" );
+ dlg.AddHTML_Text( msg );
+
+ dlg.ShowModal();
+}
diff --git a/common/fp_lib_table.cpp b/common/fp_lib_table.cpp
new file mode 100644
index 0000000..d9fc1e7
--- /dev/null
+++ b/common/fp_lib_table.cpp
@@ -0,0 +1,789 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2012-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <wx/config.h> // wxExpandEnvVars()
+#include <wx/filename.h>
+#include <wx/stdpaths.h>
+
+#include <set>
+
+//#include <pgm_base.h>
+#include <kiface_i.h>
+#include <search_stack.h>
+#include <pcb_netlist.h>
+#include <reporter.h>
+#include <footprint_info.h>
+#include <wildcards_and_files_ext.h>
+#include <fpid.h>
+#include <fp_lib_table_lexer.h>
+#include <fp_lib_table.h>
+#include <class_module.h>
+
+using namespace FP_LIB_TABLE_T;
+
+
+static const wxChar global_tbl_name[] = wxT( "fp-lib-table" );
+
+
+void FP_LIB_TABLE::ROW::SetType( const wxString& aType )
+{
+ type = IO_MGR::EnumFromStr( aType );
+
+ if( IO_MGR::PCB_FILE_T( -1 ) == type )
+ type = IO_MGR::KICAD;
+}
+
+
+void FP_LIB_TABLE::ROW::SetFullURI( const wxString& aFullURI )
+{
+ uri_user = aFullURI;
+
+#if !FP_LATE_ENVVAR
+ uri_expanded = FP_LIB_TABLE::ExpandSubstitutions( aFullURI );
+#endif
+}
+
+
+const wxString FP_LIB_TABLE::ROW::GetFullURI( bool aSubstituted ) const
+{
+ if( aSubstituted )
+ {
+#if !FP_LATE_ENVVAR // early expansion
+ return uri_expanded;
+
+#else // late expansion
+ return FP_LIB_TABLE::ExpandSubstitutions( uri_user );
+#endif
+ }
+ else
+ return uri_user;
+}
+
+
+FP_LIB_TABLE::ROW::ROW( const ROW& a ) :
+ nickName( a.nickName ),
+ type( a.type ),
+ options( a.options ),
+ description( a.description ),
+ properties( 0 )
+{
+ // may call ExpandSubstitutions()
+ SetFullURI( a.uri_user );
+
+ if( a.properties )
+ properties = new PROPERTIES( *a.properties );
+}
+
+
+FP_LIB_TABLE::ROW& FP_LIB_TABLE::ROW::operator=( const ROW& r )
+{
+ nickName = r.nickName;
+ type = r.type;
+ options = r.options;
+ description = r.description;
+ properties = r.properties ? new PROPERTIES( *r.properties ) : NULL;
+
+ // may call ExpandSubstitutions()
+ SetFullURI( r.uri_user );
+
+ // Do not copy the PLUGIN, it is lazily created. Delete any existing
+ // destination plugin.
+ setPlugin( NULL );
+
+ return *this;
+}
+
+
+bool FP_LIB_TABLE::ROW::operator==( const ROW& r ) const
+{
+ return nickName == r.nickName
+ && uri_user == r.uri_user
+ && type == r.type
+ && options == r.options
+ && description == r.description
+ ;
+}
+
+
+FP_LIB_TABLE::FP_LIB_TABLE( FP_LIB_TABLE* aFallBackTable ) :
+ fallBack( aFallBackTable )
+{
+ // not copying fall back, simply search aFallBackTable separately
+ // if "nickName not found".
+}
+
+
+FP_LIB_TABLE::~FP_LIB_TABLE()
+{
+ // *fallBack is not owned here.
+}
+
+
+wxArrayString FP_LIB_TABLE::FootprintEnumerate( const wxString& aNickname )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+ return row->plugin->FootprintEnumerate( row->GetFullURI( true ), row->GetProperties() );
+}
+
+
+MODULE* FP_LIB_TABLE::FootprintLoad( const wxString& aNickname, const wxString& aFootprintName )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+
+ MODULE* ret = row->plugin->FootprintLoad( row->GetFullURI( true ), aFootprintName, row->GetProperties() );
+
+ // The library cannot know its own name, because it might have been renamed or moved.
+ // Therefore footprints cannot know their own library nickname when residing in
+ // a footprint library.
+ // Only at this API layer can we tell the footprint about its actual library nickname.
+ if( ret )
+ {
+ // remove "const"-ness, I really do want to set nickname without
+ // having to copy the FPID and its two strings, twice each.
+ FPID& fpid = (FPID&) ret->GetFPID();
+
+ // Catch any misbehaving plugin, which should be setting internal footprint name properly:
+ wxASSERT( aFootprintName == (wxString) fpid.GetFootprintName() );
+
+ // and clearing nickname
+ wxASSERT( !fpid.GetLibNickname().size() );
+
+ fpid.SetLibNickname( row->GetNickName() );
+ }
+
+ return ret;
+}
+
+
+FP_LIB_TABLE::SAVE_T FP_LIB_TABLE::FootprintSave( const wxString& aNickname, const MODULE* aFootprint, bool aOverwrite )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+
+ if( !aOverwrite )
+ {
+ // Try loading the footprint to see if it already exists, caller wants overwrite
+ // protection, which is atypical, not the default.
+
+ wxString fpname = aFootprint->GetFPID().GetFootprintName();
+
+ std::auto_ptr<MODULE> m( row->plugin->FootprintLoad( row->GetFullURI( true ), fpname, row->GetProperties() ) );
+
+ if( m.get() )
+ return SAVE_SKIPPED;
+ }
+
+ row->plugin->FootprintSave( row->GetFullURI( true ), aFootprint, row->GetProperties() );
+
+ return SAVE_OK;
+}
+
+
+void FP_LIB_TABLE::FootprintDelete( const wxString& aNickname, const wxString& aFootprintName )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+ return row->plugin->FootprintDelete( row->GetFullURI( true ), aFootprintName, row->GetProperties() );
+}
+
+
+bool FP_LIB_TABLE::IsFootprintLibWritable( const wxString& aNickname )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+ return row->plugin->IsFootprintLibWritable( row->GetFullURI( true ) );
+}
+
+
+void FP_LIB_TABLE::FootprintLibDelete( const wxString& aNickname )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+ row->plugin->FootprintLibDelete( row->GetFullURI( true ), row->GetProperties() );
+}
+
+
+void FP_LIB_TABLE::FootprintLibCreate( const wxString& aNickname )
+{
+ const ROW* row = FindRow( aNickname );
+ wxASSERT( (PLUGIN*) row->plugin );
+ row->plugin->FootprintLibCreate( row->GetFullURI( true ), row->GetProperties() );
+}
+
+
+const wxString FP_LIB_TABLE::GetDescription( const wxString& aNickname )
+{
+ // use "no exception" form of find row:
+ const ROW* row = findRow( aNickname );
+ if( row )
+ return row->description;
+ else
+ return wxEmptyString;
+}
+
+
+void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
+{
+ /*
+ (fp_lib_table
+ (lib (name NICKNAME)(descr DESCRIPTION)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ :
+ )
+
+ Elements after (name) are order independent.
+ */
+
+ T tok;
+ wxString errMsg; // to collect error messages
+
+ // This table may be nested within a larger s-expression, or not.
+ // Allow for parser of that optional containing s-epression to have looked ahead.
+ if( in->CurTok() != T_fp_lib_table )
+ {
+ in->NeedLEFT();
+ if( ( tok = in->NextTok() ) != T_fp_lib_table )
+ in->Expecting( T_fp_lib_table );
+ }
+
+ while( ( tok = in->NextTok() ) != T_RIGHT )
+ {
+ ROW row; // reconstructed for each row in input stream.
+
+ if( tok == T_EOF )
+ in->Expecting( T_RIGHT );
+
+ if( tok != T_LEFT )
+ in->Expecting( T_LEFT );
+
+ if( ( tok = in->NextTok() ) != T_lib )
+ in->Expecting( T_lib );
+
+ // (name NICKNAME)
+ in->NeedLEFT();
+
+ if( ( tok = in->NextTok() ) != T_name )
+ in->Expecting( T_name );
+
+ in->NeedSYMBOLorNUMBER();
+
+ row.SetNickName( in->FromUTF8() );
+
+ in->NeedRIGHT();
+
+ // After (name), remaining (lib) elements are order independent, and in
+ // some cases optional.
+ bool sawType = false;
+ bool sawOpts = false;
+ bool sawDesc = false;
+ bool sawUri = false;
+
+ while( ( tok = in->NextTok() ) != T_RIGHT )
+ {
+ if( tok == T_EOF )
+ in->Unexpected( T_EOF );
+
+ if( tok != T_LEFT )
+ in->Expecting( T_LEFT );
+
+ tok = in->NeedSYMBOLorNUMBER();
+
+ switch( tok )
+ {
+ case T_uri:
+ if( sawUri )
+ in->Duplicate( tok );
+ sawUri = true;
+ in->NeedSYMBOLorNUMBER();
+ // Saved path and file names use the Unix notation (separator = '/')
+ // However old files, and files edited by hand can use the windows
+ // separator. Force the unix notation.
+ // (It works on windows, and moreover, wxFileName and wxDir takes care to that
+ // on windows)
+ // moreover, URLs use the '/' as separator
+ {
+ wxString uri = in->FromUTF8();
+ uri.Replace( '\\', '/' );
+ row.SetFullURI( uri );
+ }
+ break;
+
+ case T_type:
+ if( sawType )
+ in->Duplicate( tok );
+ sawType = true;
+ in->NeedSYMBOLorNUMBER();
+ row.SetType( in->FromUTF8() );
+ break;
+
+ case T_options:
+ if( sawOpts )
+ in->Duplicate( tok );
+ sawOpts = true;
+ in->NeedSYMBOLorNUMBER();
+ row.SetOptions( in->FromUTF8() );
+ break;
+
+ case T_descr:
+ if( sawDesc )
+ in->Duplicate( tok );
+ sawDesc = true;
+ in->NeedSYMBOLorNUMBER();
+ row.SetDescr( in->FromUTF8() );
+ break;
+
+ default:
+ in->Unexpected( tok );
+ }
+
+ in->NeedRIGHT();
+ }
+
+ if( !sawType )
+ in->Expecting( T_type );
+
+ if( !sawUri )
+ in->Expecting( T_uri );
+
+ // all nickNames within this table fragment must be unique, so we do not
+ // use doReplace in InsertRow(). (However a fallBack table can have a
+ // conflicting nickName and ours will supercede that one since in
+ // FindLib() we search this table before any fall back.)
+ if( !InsertRow( row ) )
+ {
+ wxString msg = wxString::Format(
+ _( "'%s' is a duplicate footprint library nickName" ),
+ GetChars( row.nickName ) );
+ if( !errMsg.IsEmpty() )
+ errMsg << '\n';
+
+ errMsg << msg;
+ }
+ }
+
+ if( !errMsg.IsEmpty() )
+ THROW_IO_ERROR( errMsg );
+}
+
+
+void FP_LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR, boost::interprocess::lock_exception )
+{
+ out->Print( nestLevel, "(fp_lib_table\n" );
+
+ for( ROWS_CITER it = rows.begin(); it != rows.end(); ++it )
+ it->Format( out, nestLevel+1 );
+
+ out->Print( nestLevel, ")\n" );
+}
+
+
+void FP_LIB_TABLE::ROW::Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR, boost::interprocess::lock_exception )
+{
+ // In Kicad, we save path and file names using the Unix notation (separator = '/')
+ // So ensure separator is always '/' is saved URI string
+ wxString uri = GetFullURI();
+ uri.Replace( '\\', '/' );
+
+ out->Print( nestLevel, "(lib (name %s)(type %s)(uri %s)(options %s)(descr %s))\n",
+ out->Quotew( GetNickName() ).c_str(),
+ out->Quotew( GetType() ).c_str(),
+ out->Quotew( uri ).c_str(),
+ out->Quotew( GetOptions() ).c_str(),
+ out->Quotew( GetDescr() ).c_str()
+ );
+}
+
+#define OPT_SEP '|' ///< options separator character
+
+PROPERTIES* FP_LIB_TABLE::ParseOptions( const std::string& aOptionsList )
+{
+ if( aOptionsList.size() )
+ {
+ const char* cp = &aOptionsList[0];
+ const char* end = cp + aOptionsList.size();
+
+ PROPERTIES props;
+ std::string pair;
+
+ // Parse all name=value pairs
+ while( cp < end )
+ {
+ pair.clear();
+
+ // Skip leading white space.
+ while( cp < end && isspace( *cp ) )
+ ++cp;
+
+ // Find the end of pair/field
+ while( cp < end )
+ {
+ if( *cp=='\\' && cp+1<end && cp[1]==OPT_SEP )
+ {
+ ++cp; // skip the escape
+ pair += *cp++; // add the separator
+ }
+ else if( *cp==OPT_SEP )
+ {
+ ++cp; // skip the separator
+ break; // process the pair
+ }
+ else
+ pair += *cp++;
+ }
+
+ // stash the pair
+ if( pair.size() )
+ {
+ // first equals sign separates 'name' and 'value'.
+ size_t eqNdx = pair.find( '=' );
+ if( eqNdx != pair.npos )
+ {
+ std::string name = pair.substr( 0, eqNdx );
+ std::string value = pair.substr( eqNdx + 1 );
+ props[name] = value;
+ }
+ else
+ props[pair] = ""; // property is present, but with no value.
+ }
+ }
+
+ if( props.size() )
+ return new PROPERTIES( props );
+ }
+ return NULL;
+}
+
+
+UTF8 FP_LIB_TABLE::FormatOptions( const PROPERTIES* aProperties )
+{
+ UTF8 ret;
+
+ if( aProperties )
+ {
+ for( PROPERTIES::const_iterator it = aProperties->begin(); it != aProperties->end(); ++it )
+ {
+ const std::string& name = it->first;
+
+ const UTF8& value = it->second;
+
+ if( ret.size() )
+ ret += OPT_SEP;
+
+ ret += name;
+
+ // the separation between name and value is '='
+ if( value.size() )
+ {
+ ret += '=';
+
+ for( std::string::const_iterator si = value.begin(); si != value.end(); ++si )
+ {
+ // escape any separator in the value.
+ if( *si == OPT_SEP )
+ ret += '\\';
+
+ ret += *si;
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+
+
+std::vector<wxString> FP_LIB_TABLE::GetLogicalLibs()
+{
+ // Only return unique logical library names. Use std::set::insert() to
+ // quietly reject any duplicates, which can happen when encountering a duplicate
+ // nickname from one of the fall back table(s).
+
+ std::set<wxString> unique;
+ std::vector<wxString> ret;
+ const FP_LIB_TABLE* cur = this;
+
+ do
+ {
+ for( ROWS_CITER it = cur->rows.begin(); it!=cur->rows.end(); ++it )
+ {
+ unique.insert( it->nickName );
+ }
+
+ } while( ( cur = cur->fallBack ) != 0 );
+
+ ret.reserve( unique.size() );
+
+ // DBG(printf( "%s: count:%zd\n", __func__, unique.size() );)
+
+ // return a sorted, unique set of nicknames in a std::vector<wxString> to caller
+ for( std::set<wxString>::const_iterator it = unique.begin(); it!=unique.end(); ++it )
+ {
+ //DBG(printf( " %s\n", TO_UTF8( *it ) );)
+ ret.push_back( *it );
+ }
+
+ return ret;
+}
+
+
+FP_LIB_TABLE::ROW* FP_LIB_TABLE::findRow( const wxString& aNickName ) const
+{
+ FP_LIB_TABLE* cur = (FP_LIB_TABLE*) this;
+
+ do
+ {
+ cur->ensureIndex();
+
+ INDEX_CITER it = cur->nickIndex.find( aNickName );
+
+ if( it != cur->nickIndex.end() )
+ {
+ return &cur->rows[it->second]; // found
+ }
+
+ // not found, search fall back table(s), if any
+ } while( ( cur = cur->fallBack ) != 0 );
+
+ return 0; // not found
+}
+
+
+const FP_LIB_TABLE::ROW* FP_LIB_TABLE::FindRowByURI( const wxString& aURI )
+{
+ FP_LIB_TABLE* cur = this;
+
+ do
+ {
+ cur->ensureIndex();
+
+ for( unsigned i = 0; i < cur->rows.size(); i++ )
+ {
+ wxString uri = cur->rows[i].GetFullURI( true );
+
+ if( wxFileName::GetPathSeparator() == wxChar( '\\' ) && uri.Find( wxChar( '/' ) ) >= 0 )
+ uri.Replace( wxT( "/" ), wxT( "\\" ) );
+
+ if( (wxFileName::IsCaseSensitive() && uri == aURI)
+ || (!wxFileName::IsCaseSensitive() && uri.Upper() == aURI.Upper() ) )
+ {
+ return &cur->rows[i]; // found
+ }
+ }
+
+ // not found, search fall back table(s), if any
+ } while( ( cur = cur->fallBack ) != 0 );
+
+ return 0; // not found
+}
+
+
+bool FP_LIB_TABLE::InsertRow( const ROW& aRow, bool doReplace )
+{
+ ensureIndex();
+
+ INDEX_CITER it = nickIndex.find( aRow.nickName );
+
+ if( it == nickIndex.end() )
+ {
+ rows.push_back( aRow );
+ nickIndex.insert( INDEX_VALUE( aRow.nickName, rows.size() - 1 ) );
+ return true;
+ }
+
+ if( doReplace )
+ {
+ rows[it->second] = aRow;
+ return true;
+ }
+
+ return false;
+}
+
+
+const FP_LIB_TABLE::ROW* FP_LIB_TABLE::FindRow( const wxString& aNickname )
+ throw( IO_ERROR )
+{
+ ROW* row = findRow( aNickname );
+
+ if( !row )
+ {
+ wxString msg = wxString::Format(
+ _( "fp-lib-table files contain no lib with nickname '%s'" ),
+ GetChars( aNickname ) );
+
+ THROW_IO_ERROR( msg );
+ }
+
+ // We've been 'lazy' up until now, but it cannot be deferred any longer,
+ // instantiate a PLUGIN of the proper kind if it is not already in this ROW.
+ if( !row->plugin )
+ row->setPlugin( IO_MGR::PluginFind( row->type ) );
+
+ return row;
+}
+
+
+// wxGetenv( wchar_t* ) is not re-entrant on linux.
+// Put a lock on multithreaded use of wxGetenv( wchar_t* ), called from wxEpandEnvVars(),
+// needed by bool ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxString* aNickname = NULL );
+#include <ki_mutex.h>
+
+const wxString FP_LIB_TABLE::ExpandSubstitutions( const wxString& aString )
+{
+// Duplicate code: the same is now in common.cpp, due to the fact it is used
+// in many other places than FP_LIB_TABLE
+#if 0
+ static MUTEX getenv_mutex;
+
+ MUTLOCK lock( getenv_mutex );
+
+ // We reserve the right to do this another way, by providing our own member
+ // function.
+ return wxExpandEnvVars( aString );
+#else
+ return ExpandEnvVarSubstitutions( aString );
+#endif
+}
+
+
+bool FP_LIB_TABLE::IsEmpty( bool aIncludeFallback )
+{
+ if( !aIncludeFallback || !fallBack )
+ return rows.empty();
+
+ return rows.empty() && fallBack->IsEmpty( true );
+}
+
+
+MODULE* FP_LIB_TABLE::FootprintLoadWithOptionalNickname( const FPID& aFootprintId )
+ throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
+{
+ wxString nickname = aFootprintId.GetLibNickname();
+ wxString fpname = aFootprintId.GetFootprintName();
+
+ if( nickname.size() )
+ {
+ return FootprintLoad( nickname, fpname );
+ }
+
+ // nickname is empty, sequentially search (alphabetically) all libs/nicks for first match:
+ else
+ {
+ std::vector<wxString> nicks = GetLogicalLibs();
+
+ // Search each library going through libraries alphabetically.
+ for( unsigned i = 0; i<nicks.size(); ++i )
+ {
+ // FootprintLoad() returns NULL on not found, does not throw exception
+ // unless there's an IO_ERROR.
+ MODULE* ret = FootprintLoad( nicks[i], fpname );
+ if( ret )
+ return ret;
+ }
+
+ return NULL;
+ }
+}
+
+
+const wxString FP_LIB_TABLE::GlobalPathEnvVariableName()
+{
+ return wxT( "KISYSMOD" );
+}
+
+
+bool FP_LIB_TABLE::LoadGlobalTable( FP_LIB_TABLE& aTable )
+ throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
+{
+ bool tableExists = true;
+ wxFileName fn = GetGlobalTableFileName();
+
+ if( !fn.FileExists() )
+ {
+ tableExists = false;
+
+ if( !fn.DirExists() && !fn.Mkdir( 0x777, wxPATH_MKDIR_FULL ) )
+ {
+ THROW_IO_ERROR( wxString::Format( _( "Cannot create global library table path '%s'." ),
+ GetChars( fn.GetPath() ) ) );
+ }
+
+ // Attempt to copy the default global file table from the KiCad
+ // template folder to the user's home configuration path.
+ wxString fileName = Kiface().KifaceSearch().FindValidPath( global_tbl_name );
+
+ // The fallback is to create an empty global footprint table for the user to populate.
+ if( fileName.IsEmpty() || !::wxCopyFile( fileName, fn.GetFullPath(), false ) )
+ {
+ FP_LIB_TABLE emptyTable;
+
+ emptyTable.Save( fn.GetFullPath() );
+ }
+ }
+
+ aTable.Load( fn.GetFullPath() );
+
+ return tableExists;
+}
+
+
+wxString FP_LIB_TABLE::GetGlobalTableFileName()
+{
+ wxFileName fn;
+
+ fn.SetPath( GetKicadConfigPath() );
+ fn.SetName( global_tbl_name );
+
+ return fn.GetFullPath();
+}
+
+// prefer wxString filename so it can be seen in a debugger easier than wxFileName.
+
+void FP_LIB_TABLE::Load( const wxString& aFileName )
+ throw( IO_ERROR )
+{
+ // It's OK if footprint library tables are missing.
+ if( wxFileName::IsFileReadable( aFileName ) )
+ {
+ FILE_LINE_READER reader( aFileName );
+ FP_LIB_TABLE_LEXER lexer( &reader );
+
+ Parse( &lexer );
+ }
+}
+
+
+void FP_LIB_TABLE::Save( const wxString& aFileName )
+ const throw( IO_ERROR, boost::interprocess::lock_exception )
+{
+ FILE_OUTPUTFORMATTER sf( aFileName );
+ Format( &sf, 0 );
+}
+
diff --git a/common/fp_lib_table.keywords b/common/fp_lib_table.keywords
new file mode 100644
index 0000000..27b1242
--- /dev/null
+++ b/common/fp_lib_table.keywords
@@ -0,0 +1,7 @@
+fp_lib_table
+lib
+name
+type
+uri
+options
+descr
diff --git a/common/fpid.cpp b/common/fpid.cpp
new file mode 100644
index 0000000..ba70c67
--- /dev/null
+++ b/common/fpid.cpp
@@ -0,0 +1,395 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <cstring>
+#include <memory>
+#include <wx/wx.h> // _()
+
+#include <macros.h> // TO_UTF8()
+#include <fpid.h>
+#include <kicad_string.h>
+
+
+static inline bool isDigit( char c )
+{
+ return c >= '0' && c <= '9';
+}
+
+
+const char* EndsWithRev( const char* start, const char* tail, char separator )
+{
+ bool sawDigit = false;
+
+ while( tail > start && isDigit( *--tail ) )
+ {
+ sawDigit = true;
+ }
+
+ // if sawDigit, tail points to the 'v' here.
+
+ if( sawDigit && tail-3 >= start )
+ {
+ tail -= 3;
+
+ if( tail[0]==separator && tail[1]=='r' && tail[2]=='e' && tail[3]=='v' )
+ {
+ return tail+1; // omit separator, return "revN[N..]"
+ }
+ }
+
+ return 0;
+}
+
+
+#if 0 // Not used
+int RevCmp( const char* s1, const char* s2 )
+{
+ int r = strncmp( s1, s2, 3 );
+
+ if( r || strlen(s1)<4 || strlen(s2)<4 )
+ {
+ return r;
+ }
+
+ int rnum1 = atoi( s1+3 );
+ int rnum2 = atoi( s2+3 );
+
+ return -(rnum1 - rnum2); // swap the sign, higher revs first
+}
+#endif
+
+//----<Policy and field test functions>-------------------------------------
+
+
+static inline int okLogical( const std::string& aField )
+{
+ // std::string::npos is largest positive number, casting to int makes it -1.
+ // Returning that means success.
+ return int( aField.find_first_of( ":" ) );
+}
+
+
+static int okRevision( const std::string& aField )
+{
+ char rev[32]; // C string for speed
+
+ if( aField.size() >= 4 )
+ {
+ strcpy( rev, "x/" );
+ strncat( rev, aField.c_str(), sizeof(rev)-strlen(rev)-1 );
+
+ if( EndsWithRev( rev, rev + strlen(rev), '/' ) == rev+2 )
+ return -1; // success
+ }
+
+ return 0; // first character position "is in error", is best we can do.
+}
+
+
+//----</Policy and field test functions>-------------------------------------
+
+
+void FPID::clear()
+{
+ nickname.clear();
+ footprint.clear();
+ revision.clear();
+}
+
+
+int FPID::Parse( const UTF8& aId )
+{
+ clear();
+
+ const char* buffer = aId.c_str();
+ const char* rev = EndsWithRev( buffer, buffer+aId.length(), '/' );
+ size_t revNdx;
+ size_t partNdx;
+ int offset;
+
+ //=====<revision>=========================================
+ // in a FPID like discret:R3/rev4
+ if( rev )
+ {
+ revNdx = rev - buffer;
+
+ // no need to check revision, EndsWithRev did that.
+ revision = aId.substr( revNdx );
+ --revNdx; // back up to omit the '/' which precedes the rev
+ }
+ else
+ {
+ revNdx = aId.size();
+ }
+
+ //=====<nickname>==========================================
+ if( ( partNdx = aId.find( ':' ) ) != aId.npos )
+ {
+ offset = SetLibNickname( aId.substr( 0, partNdx ) );
+
+ if( offset > -1 )
+ {
+ return offset;
+ }
+
+ ++partNdx; // skip ':'
+ }
+ else
+ {
+ partNdx = 0;
+ }
+
+ //=====<footprint name>====================================
+ if( partNdx >= revNdx )
+ return partNdx; // Error: no footprint name.
+
+ // Be sure the footprint name is valid.
+ // Some chars can be found in board file (in old board files
+ // or converted files from an other EDA tool
+ std::string fpname = aId.substr( partNdx, revNdx-partNdx );
+ ReplaceIllegalFileNameChars( &fpname, '_' );
+ SetFootprintName( UTF8( fpname ) );
+
+ return -1;
+}
+
+
+FPID::FPID( const std::string& aId ) throw( PARSE_ERROR )
+{
+ int offset = Parse( aId );
+
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR( _( "Illegal character found in FPID string" ),
+ wxString::FromUTF8( aId.c_str() ),
+ aId.c_str(),
+ 0,
+ offset );
+ }
+}
+
+
+FPID::FPID( const wxString& aId ) throw( PARSE_ERROR )
+{
+ UTF8 id = aId;
+
+ int offset = Parse( id );
+
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR( _( "Illegal character found in FPID string" ),
+ aId,
+ id.c_str(),
+ 0,
+ offset );
+ }
+}
+
+
+int FPID::SetLibNickname( const UTF8& aLogical )
+{
+ int offset = okLogical( aLogical );
+
+ if( offset == -1 )
+ {
+ nickname = aLogical;
+ }
+
+ return offset;
+}
+
+
+int FPID::SetFootprintName( const UTF8& aFootprintName )
+{
+ int separation = int( aFootprintName.find_first_of( "/" ) );
+
+ if( separation != -1 )
+ {
+ footprint = aFootprintName.substr( 0, separation-1 );
+ return separation;
+ }
+ else
+ {
+ footprint = aFootprintName;
+ }
+
+ return -1;
+}
+
+
+int FPID::SetRevision( const UTF8& aRevision )
+{
+ int offset = okRevision( aRevision );
+
+ if( offset == -1 )
+ {
+ revision = aRevision;
+ }
+
+ return offset;
+}
+
+
+UTF8 FPID::Format() const
+{
+ UTF8 ret;
+
+ if( nickname.size() )
+ {
+ ret += nickname;
+ ret += ':';
+ }
+
+ ret += footprint;
+
+ if( revision.size() )
+ {
+ ret += '/';
+ ret += revision;
+ }
+
+ return ret;
+}
+
+
+UTF8 FPID::GetFootprintNameAndRev() const
+{
+ UTF8 ret;
+
+ if( revision.size() )
+ {
+ ret += '/';
+ ret += revision;
+ }
+
+ return ret;
+}
+
+
+#if 0 // this is broken, it does not output aFootprintName for some reason
+
+UTF8 FPID::Format( const UTF8& aLogicalLib, const UTF8& aFootprintName,
+ const UTF8& aRevision )
+ throw( PARSE_ERROR )
+{
+ UTF8 ret;
+ int offset;
+
+ if( aLogicalLib.size() )
+ {
+ offset = okLogical( aLogicalLib );
+
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR( _( "Illegal character found in logical library name" ),
+ wxString::FromUTF8( aLogicalLib.c_str() ),
+ aLogicalLib.c_str(),
+ 0,
+ offset );
+ }
+
+ ret += aLogicalLib;
+ ret += ':';
+ }
+
+ if( aRevision.size() )
+ {
+ offset = okRevision( aRevision );
+
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR( _( "Illegal character found in revision" ),
+ wxString::FromUTF8( aRevision.c_str() ),
+ aRevision.c_str(),
+ 0,
+ offset );
+ }
+
+ ret += '/';
+ ret += aRevision;
+ }
+
+ return ret;
+}
+#endif
+
+
+int FPID::compare( const FPID& aFPID ) const
+{
+ // Don't bother comparing the same object.
+ if( this == &aFPID )
+ return 0;
+
+ int retv = nickname.compare( aFPID.nickname );
+
+ if( retv != 0 )
+ return retv;
+
+ retv = footprint.compare( aFPID.footprint );
+
+ if( retv != 0 )
+ return retv;
+
+ return revision.compare( aFPID.revision );
+}
+
+
+#if 0 && defined(DEBUG)
+
+// build this with Debug CMAKE_BUILD_TYPE
+
+void FPID::Test()
+{
+ static const char* lpids[] = {
+ "smt:R_0805/rev0",
+ "mysmt:R_0805/rev2",
+ "device:AXIAL-0500",
+ };
+
+ for( unsigned i=0; i<sizeof(lpids)/sizeof(lpids[0]); ++i )
+ {
+ // test some round tripping
+
+ FPID lpid( lpids[i] ); // parse
+
+ // format
+ printf( "input:'%s' full:'%s' nickname: %s footprint:'%s' rev:'%s'\n",
+ lpids[i],
+ lpid.Format().c_str(),
+ lpid.GetLibNickname().c_str(),
+ lpid.GetFootprintName().c_str(),
+ lpid.GetRevision().c_str() );
+ }
+}
+
+
+int main( int argc, char** argv )
+{
+ FPID::Test();
+
+ return 0;
+}
+
+#endif
diff --git a/common/gal/cairo/cairo_compositor.cpp b/common/gal/cairo/cairo_compositor.cpp
new file mode 100644
index 0000000..f81cb5a
--- /dev/null
+++ b/common/gal/cairo/cairo_compositor.cpp
@@ -0,0 +1,159 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http:O//www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file cairo_compositor.cpp
+ * @brief Class that handles multitarget rendering (ie. to different textures/surfaces) and
+ * later compositing into a single image (Cairo flavour).
+ */
+
+#include <gal/cairo/cairo_compositor.h>
+#include <wx/log.h>
+
+using namespace KIGFX;
+
+CAIRO_COMPOSITOR::CAIRO_COMPOSITOR( cairo_t** aMainContext ) :
+ m_current( 0 ), m_currentContext( aMainContext ), m_mainContext( *aMainContext )
+{
+ // Do not have uninitialized members:
+ cairo_matrix_init_identity( &m_matrix );
+ m_stride = 0;
+ m_bufferSize = 0;
+}
+
+
+CAIRO_COMPOSITOR::~CAIRO_COMPOSITOR()
+{
+ clean();
+}
+
+
+void CAIRO_COMPOSITOR::Initialize()
+{
+ // Nothing has to be done
+}
+
+
+void CAIRO_COMPOSITOR::Resize( unsigned int aWidth, unsigned int aHeight )
+{
+ clean();
+
+ assert( aWidth > 0 );
+ assert( aHeight > 0 );
+
+ m_width = aWidth;
+ m_height = aHeight;
+
+ m_stride = cairo_format_stride_for_width( CAIRO_FORMAT_ARGB32, m_width );
+ m_bufferSize = m_stride * m_height;
+}
+
+
+unsigned int CAIRO_COMPOSITOR::CreateBuffer()
+{
+ // Pixel storage
+ BitmapPtr bitmap( new unsigned int[m_bufferSize] );
+
+ memset( bitmap.get(), 0x00, m_bufferSize * sizeof(int) );
+
+ // Create the Cairo surface
+ cairo_surface_t* surface = cairo_image_surface_create_for_data(
+ (unsigned char*) bitmap.get(),
+ CAIRO_FORMAT_ARGB32, m_width,
+ m_height, m_stride );
+ cairo_t* context = cairo_create( surface );
+#ifdef __WXDEBUG__
+ cairo_status_t status = cairo_status( context );
+ wxASSERT_MSG( status == CAIRO_STATUS_SUCCESS, wxT( "Cairo context creation error" ) );
+#endif /* __WXDEBUG__ */
+
+ // Set default settings for the buffer
+ cairo_set_antialias( context, CAIRO_ANTIALIAS_SUBPIXEL );
+ cairo_set_line_join( context, CAIRO_LINE_JOIN_ROUND );
+ cairo_set_line_cap( context, CAIRO_LINE_CAP_ROUND );
+
+ // Use the same transformation matrix as the main context
+ cairo_get_matrix( m_mainContext, &m_matrix );
+ cairo_set_matrix( context, &m_matrix );
+
+ // Store the new buffer
+ CAIRO_BUFFER buffer = { context, surface, bitmap };
+ m_buffers.push_back( buffer );
+
+ return usedBuffers();
+}
+
+
+void CAIRO_COMPOSITOR::SetBuffer( unsigned int aBufferHandle )
+{
+ wxASSERT_MSG( aBufferHandle <= usedBuffers(), wxT( "Tried to use a not existing buffer" ) );
+
+ // Get currently used transformation matrix, so it can be applied to the new buffer
+ cairo_get_matrix( *m_currentContext, &m_matrix );
+
+ m_current = aBufferHandle - 1;
+ *m_currentContext = m_buffers[m_current].context;
+
+ // Apply the current transformation matrix
+ cairo_set_matrix( *m_currentContext, &m_matrix );
+}
+
+
+void CAIRO_COMPOSITOR::ClearBuffer()
+{
+ // Clear the pixel storage
+ memset( m_buffers[m_current].bitmap.get(), 0x00, m_bufferSize * sizeof(int) );
+}
+
+
+void CAIRO_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
+{
+ wxASSERT_MSG( aBufferHandle <= usedBuffers(), wxT( "Tried to use a not existing buffer" ) );
+
+ // Reset the transformation matrix, so it is possible to composite images using
+ // screen coordinates instead of world coordinates
+ cairo_get_matrix( m_mainContext, &m_matrix );
+ cairo_identity_matrix( m_mainContext );
+
+ // Draw the selected buffer contents
+ cairo_set_source_surface( m_mainContext, m_buffers[aBufferHandle - 1].surface, 0.0, 0.0 );
+ cairo_paint( m_mainContext );
+
+ // Restore the transformation matrix
+ cairo_set_matrix( m_mainContext, &m_matrix );
+}
+
+
+void CAIRO_COMPOSITOR::clean()
+{
+ CAIRO_BUFFERS::const_iterator it;
+
+ for( it = m_buffers.begin(); it != m_buffers.end(); ++it )
+ {
+ cairo_destroy( it->context );
+ cairo_surface_destroy( it->surface );
+ }
+
+ m_buffers.clear();
+}
diff --git a/common/gal/cairo/cairo_gal.cpp b/common/gal/cairo/cairo_gal.cpp
new file mode 100644
index 0000000..b7ead4c
--- /dev/null
+++ b/common/gal/cairo/cairo_gal.cpp
@@ -0,0 +1,1074 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * CAIRO_GAL - Graphics Abstraction Layer for Cairo
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/image.h>
+#include <wx/log.h>
+
+#include <gal/cairo/cairo_gal.h>
+#include <gal/cairo/cairo_compositor.h>
+#include <gal/definitions.h>
+
+#include <limits>
+
+using namespace KIGFX;
+
+
+const float CAIRO_GAL::LAYER_ALPHA = 0.8;
+
+
+CAIRO_GAL::CAIRO_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
+ wxEvtHandler* aPaintListener, const wxString& aName ) :
+ wxWindow( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxEXPAND, aName )
+{
+ parentWindow = aParent;
+ mouseListener = aMouseListener;
+ paintListener = aPaintListener;
+
+ // Initialize the flags
+ isGrouping = false;
+ isInitialized = false;
+ isDeleteSavedPixels = false;
+ validCompositor = false;
+ groupCounter = 0;
+
+ // Connecting the event handlers
+ Connect( wxEVT_PAINT, wxPaintEventHandler( CAIRO_GAL::onPaint ) );
+
+ // Mouse events are skipped to the parent
+ Connect( wxEVT_MOTION, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_LEFT_UP, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MIDDLE_DCLICK, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_RIGHT_DCLICK, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+#if defined _WIN32 || defined _WIN64
+ Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) );
+#endif
+
+ SetSize( aParent->GetSize() );
+ screenSize = VECTOR2I( aParent->GetSize() );
+
+ cursorPixels = NULL;
+ cursorPixelsSaved = NULL;
+ initCursor();
+
+ // Grid color settings are different in Cairo and OpenGL
+ SetGridColor( COLOR4D( 0.1, 0.1, 0.1, 0.8 ) );
+
+ // Allocate memory for pixel storage
+ allocateBitmaps();
+
+ initSurface();
+}
+
+
+CAIRO_GAL::~CAIRO_GAL()
+{
+ deinitSurface();
+ deleteBitmaps();
+
+ delete cursorPixels;
+ delete cursorPixelsSaved;
+
+ ClearCache();
+}
+
+
+void CAIRO_GAL::BeginDrawing()
+{
+ initSurface();
+
+ if( !validCompositor )
+ setCompositor();
+
+ compositor->SetMainContext( context );
+ compositor->SetBuffer( mainBuffer );
+
+ // Cairo grouping prevents display of overlapping items on the same layer in the lighter color
+ cairo_push_group( currentContext );
+}
+
+
+void CAIRO_GAL::EndDrawing()
+{
+ // Force remaining objects to be drawn
+ Flush();
+
+ // Cairo grouping prevents display of overlapping items on the same layer in the lighter color
+ cairo_pop_group_to_source( currentContext );
+ cairo_paint_with_alpha( currentContext, LAYER_ALPHA );
+
+ // Merge buffers on the screen
+ compositor->DrawBuffer( mainBuffer );
+ compositor->DrawBuffer( overlayBuffer );
+
+ // This code was taken from the wxCairo example - it's not the most efficient one
+ // Here is a good place for optimizations
+
+ // Now translate the raw context data from the format stored
+ // by cairo into a format understood by wxImage.
+ unsigned char* wxOutputPtr = wxOutput;
+
+ for( size_t count = 0; count < bufferSize; count++ )
+ {
+ unsigned int value = bitmapBuffer[count];
+ *wxOutputPtr++ = ( value >> 16 ) & 0xff; // Red pixel
+ *wxOutputPtr++ = ( value >> 8 ) & 0xff; // Green pixel
+ *wxOutputPtr++ = value & 0xff; // Blue pixel
+ }
+
+ wxImage img( screenSize.x, screenSize.y, (unsigned char*) wxOutput, true );
+ wxBitmap bmp( img );
+ wxClientDC client_dc( this );
+ wxBufferedDC dc;
+ dc.Init( &client_dc, bmp );
+
+ // Now it is the time to blit the mouse cursor
+ blitCursor( dc );
+
+ deinitSurface();
+}
+
+
+void CAIRO_GAL::DrawLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ cairo_move_to( currentContext, aStartPoint.x, aStartPoint.y );
+ cairo_line_to( currentContext, aEndPoint.x, aEndPoint.y );
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint,
+ double aWidth )
+{
+ if( isFillEnabled )
+ {
+ // Filled tracks mode
+ SetLineWidth( aWidth );
+
+ cairo_move_to( currentContext, (double) aStartPoint.x, (double) aStartPoint.y );
+ cairo_line_to( currentContext, (double) aEndPoint.x, (double) aEndPoint.y );
+ }
+ else
+ {
+ // Outline mode for tracks
+ VECTOR2D startEndVector = aEndPoint - aStartPoint;
+ double lineAngle = atan2( startEndVector.y, startEndVector.x );
+ double lineLength = startEndVector.EuclideanNorm();
+
+ cairo_save( currentContext );
+
+ cairo_translate( currentContext, aStartPoint.x, aStartPoint.y );
+ cairo_rotate( currentContext, lineAngle );
+
+ cairo_arc( currentContext, 0.0, 0.0, aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 );
+ cairo_arc( currentContext, lineLength, 0.0, aWidth / 2.0, -M_PI / 2.0, M_PI / 2.0 );
+
+ cairo_move_to( currentContext, 0.0, aWidth / 2.0 );
+ cairo_line_to( currentContext, lineLength, aWidth / 2.0 );
+
+ cairo_move_to( currentContext, 0.0, -aWidth / 2.0 );
+ cairo_line_to( currentContext, lineLength, -aWidth / 2.0 );
+
+ cairo_restore( currentContext );
+ }
+
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::DrawCircle( const VECTOR2D& aCenterPoint, double aRadius )
+{
+ // A circle is drawn using an arc
+ cairo_new_sub_path( currentContext );
+ cairo_arc( currentContext, aCenterPoint.x, aCenterPoint.y, aRadius, 0.0, 2 * M_PI );
+
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double aStartAngle,
+ double aEndAngle )
+{
+ SWAP( aStartAngle, >, aEndAngle );
+
+ cairo_new_sub_path( currentContext );
+ cairo_arc( currentContext, aCenterPoint.x, aCenterPoint.y, aRadius, aStartAngle, aEndAngle );
+
+ if( isFillEnabled )
+ {
+ VECTOR2D startPoint( cos( aStartAngle ) * aRadius + aCenterPoint.x,
+ sin( aStartAngle ) * aRadius + aCenterPoint.y );
+ VECTOR2D endPoint( cos( aEndAngle ) * aRadius + aCenterPoint.x,
+ sin( aEndAngle ) * aRadius + aCenterPoint.y );
+
+ cairo_move_to( currentContext, aCenterPoint.x, aCenterPoint.y );
+ cairo_line_to( currentContext, startPoint.x, startPoint.y );
+ cairo_line_to( currentContext, endPoint.x, endPoint.y );
+ cairo_close_path( currentContext );
+ }
+
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ // Calculate the diagonal points
+ VECTOR2D diagonalPointA( aEndPoint.x, aStartPoint.y );
+ VECTOR2D diagonalPointB( aStartPoint.x, aEndPoint.y );
+
+ // The path is composed from 4 segments
+ cairo_move_to( currentContext, aStartPoint.x, aStartPoint.y );
+ cairo_line_to( currentContext, diagonalPointA.x, diagonalPointA.y );
+ cairo_line_to( currentContext, aEndPoint.x, aEndPoint.y );
+ cairo_line_to( currentContext, diagonalPointB.x, diagonalPointB.y );
+ cairo_close_path( currentContext );
+
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::DrawCurve( const VECTOR2D& aStartPoint, const VECTOR2D& aControlPointA,
+ const VECTOR2D& aControlPointB, const VECTOR2D& aEndPoint )
+{
+ cairo_move_to( currentContext, aStartPoint.x, aStartPoint.y );
+ cairo_curve_to( currentContext, aControlPointA.x, aControlPointA.y, aControlPointB.x,
+ aControlPointB.y, aEndPoint.x, aEndPoint.y );
+ cairo_line_to( currentContext, aEndPoint.x, aEndPoint.y );
+
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::ResizeScreen( int aWidth, int aHeight )
+{
+ screenSize = VECTOR2I( aWidth, aHeight );
+
+ // Recreate the bitmaps
+ deleteBitmaps();
+ allocateBitmaps();
+
+ if( validCompositor )
+ compositor->Resize( aWidth, aHeight );
+
+ validCompositor = false;
+
+ SetSize( wxSize( aWidth, aHeight ) );
+}
+
+
+bool CAIRO_GAL::Show( bool aShow )
+{
+ bool s = wxWindow::Show( aShow );
+
+ if( aShow )
+ wxWindow::Raise();
+
+ return s;
+}
+
+
+void CAIRO_GAL::Flush()
+{
+ storePath();
+}
+
+
+void CAIRO_GAL::ClearScreen( const COLOR4D& aColor )
+{
+ backgroundColor = aColor;
+ cairo_set_source_rgb( currentContext, aColor.r, aColor.g, aColor.b );
+ cairo_rectangle( currentContext, 0.0, 0.0, screenSize.x, screenSize.y );
+ cairo_fill( currentContext );
+}
+
+
+void CAIRO_GAL::SetIsFill( bool aIsFillEnabled )
+{
+ storePath();
+ isFillEnabled = aIsFillEnabled;
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SET_FILL;
+ groupElement.boolArgument = aIsFillEnabled;
+ currentGroup->push_back( groupElement );
+ }
+}
+
+
+void CAIRO_GAL::SetIsStroke( bool aIsStrokeEnabled )
+{
+ storePath();
+ isStrokeEnabled = aIsStrokeEnabled;
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SET_STROKE;
+ groupElement.boolArgument = aIsStrokeEnabled;
+ currentGroup->push_back( groupElement );
+ }
+}
+
+
+void CAIRO_GAL::SetStrokeColor( const COLOR4D& aColor )
+{
+ storePath();
+ strokeColor = aColor;
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SET_STROKECOLOR;
+ groupElement.arguments[0] = strokeColor.r;
+ groupElement.arguments[1] = strokeColor.g;
+ groupElement.arguments[2] = strokeColor.b;
+ groupElement.arguments[3] = strokeColor.a;
+ currentGroup->push_back( groupElement );
+ }
+}
+
+
+void CAIRO_GAL::SetFillColor( const COLOR4D& aColor )
+{
+ storePath();
+ fillColor = aColor;
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SET_FILLCOLOR;
+ groupElement.arguments[0] = fillColor.r;
+ groupElement.arguments[1] = fillColor.g;
+ groupElement.arguments[2] = fillColor.b;
+ groupElement.arguments[3] = fillColor.a;
+ currentGroup->push_back( groupElement );
+ }
+}
+
+
+void CAIRO_GAL::SetLineWidth( double aLineWidth )
+{
+ storePath();
+
+ lineWidth = aLineWidth;
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SET_LINE_WIDTH;
+ groupElement.arguments[0] = aLineWidth;
+ currentGroup->push_back( groupElement );
+ }
+ else
+ {
+ // Make lines appear at least 1 pixel wide, no matter of zoom
+ double x = 1.0, y = 1.0;
+ cairo_device_to_user_distance( currentContext, &x, &y );
+ double minWidth = std::min( fabs( x ), fabs( y ) );
+ cairo_set_line_width( currentContext, std::max( aLineWidth, minWidth ) );
+ }
+}
+
+
+void CAIRO_GAL::SetLayerDepth( double aLayerDepth )
+{
+ super::SetLayerDepth( aLayerDepth );
+
+ if( isInitialized )
+ {
+ storePath();
+
+ cairo_pop_group_to_source( currentContext );
+ cairo_paint_with_alpha( currentContext, LAYER_ALPHA );
+
+ cairo_push_group( currentContext );
+ }
+}
+
+
+void CAIRO_GAL::Transform( const MATRIX3x3D& aTransformation )
+{
+ cairo_matrix_t cairoTransformation;
+
+ cairo_matrix_init( &cairoTransformation,
+ aTransformation.m_data[0][0],
+ aTransformation.m_data[1][0],
+ aTransformation.m_data[0][1],
+ aTransformation.m_data[1][1],
+ aTransformation.m_data[0][2],
+ aTransformation.m_data[1][2] );
+
+ cairo_transform( currentContext, &cairoTransformation );
+}
+
+
+void CAIRO_GAL::Rotate( double aAngle )
+{
+ storePath();
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_ROTATE;
+ groupElement.arguments[0] = aAngle;
+ currentGroup->push_back( groupElement );
+ }
+ else
+ {
+ cairo_rotate( currentContext, aAngle );
+ }
+}
+
+
+void CAIRO_GAL::Translate( const VECTOR2D& aTranslation )
+{
+ storePath();
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_TRANSLATE;
+ groupElement.arguments[0] = aTranslation.x;
+ groupElement.arguments[1] = aTranslation.y;
+ currentGroup->push_back( groupElement );
+ }
+ else
+ {
+ cairo_translate( currentContext, aTranslation.x, aTranslation.y );
+ }
+}
+
+
+void CAIRO_GAL::Scale( const VECTOR2D& aScale )
+{
+ storePath();
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SCALE;
+ groupElement.arguments[0] = aScale.x;
+ groupElement.arguments[1] = aScale.y;
+ currentGroup->push_back( groupElement );
+ }
+ else
+ {
+ cairo_scale( currentContext, aScale.x, aScale.y );
+ }
+}
+
+
+void CAIRO_GAL::Save()
+{
+ storePath();
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_SAVE;
+ currentGroup->push_back( groupElement );
+ }
+ else
+ {
+ cairo_save( currentContext );
+ }
+}
+
+
+void CAIRO_GAL::Restore()
+{
+ storePath();
+
+ if( isGrouping )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.command = CMD_RESTORE;
+ currentGroup->push_back( groupElement );
+ }
+ else
+ {
+ cairo_restore( currentContext );
+ }
+}
+
+
+int CAIRO_GAL::BeginGroup()
+{
+ initSurface();
+
+ // If the grouping is started: the actual path is stored in the group, when
+ // a attribute was changed or when grouping stops with the end group method.
+ storePath();
+
+ GROUP group;
+ int groupNumber = getNewGroupNumber();
+ groups.insert( std::make_pair( groupNumber, group ) );
+ currentGroup = &groups[groupNumber];
+ isGrouping = true;
+
+ return groupNumber;
+}
+
+
+void CAIRO_GAL::EndGroup()
+{
+ storePath();
+ isGrouping = false;
+
+ deinitSurface();
+}
+
+
+void CAIRO_GAL::DrawGroup( int aGroupNumber )
+{
+ // This method implements a small Virtual Machine - all stored commands
+ // are executed; nested calling is also possible
+
+ storePath();
+
+ for( GROUP::iterator it = groups[aGroupNumber].begin();
+ it != groups[aGroupNumber].end(); ++it )
+ {
+ switch( it->command )
+ {
+ case CMD_SET_FILL:
+ isFillEnabled = it->boolArgument;
+ break;
+
+ case CMD_SET_STROKE:
+ isStrokeEnabled = it->boolArgument;
+ break;
+
+ case CMD_SET_FILLCOLOR:
+ fillColor = COLOR4D( it->arguments[0], it->arguments[1], it->arguments[2],
+ it->arguments[3] );
+ break;
+
+ case CMD_SET_STROKECOLOR:
+ strokeColor = COLOR4D( it->arguments[0], it->arguments[1], it->arguments[2],
+ it->arguments[3] );
+ break;
+
+ case CMD_SET_LINE_WIDTH:
+ {
+ // Make lines appear at least 1 pixel wide, no matter of zoom
+ double x = 1.0, y = 1.0;
+ cairo_device_to_user_distance( currentContext, &x, &y );
+ double minWidth = std::min( fabs( x ), fabs( y ) );
+ cairo_set_line_width( currentContext, std::max( it->arguments[0], minWidth ) );
+ }
+ break;
+
+
+ case CMD_STROKE_PATH:
+ cairo_set_source_rgb( currentContext, strokeColor.r, strokeColor.g, strokeColor.b );
+ cairo_append_path( currentContext, it->cairoPath );
+ cairo_stroke( currentContext );
+ break;
+
+ case CMD_FILL_PATH:
+ cairo_set_source_rgb( currentContext, fillColor.r, fillColor.g, fillColor.b );
+ cairo_append_path( currentContext, it->cairoPath );
+ cairo_fill( currentContext );
+ break;
+
+ case CMD_TRANSFORM:
+ cairo_matrix_t matrix;
+ cairo_matrix_init( &matrix, it->arguments[0], it->arguments[1], it->arguments[2],
+ it->arguments[3], it->arguments[4], it->arguments[5] );
+ cairo_transform( currentContext, &matrix );
+ break;
+
+ case CMD_ROTATE:
+ cairo_rotate( currentContext, it->arguments[0] );
+ break;
+
+ case CMD_TRANSLATE:
+ cairo_translate( currentContext, it->arguments[0], it->arguments[1] );
+ break;
+
+ case CMD_SCALE:
+ cairo_scale( currentContext, it->arguments[0], it->arguments[1] );
+ break;
+
+ case CMD_SAVE:
+ cairo_save( currentContext );
+ break;
+
+ case CMD_RESTORE:
+ cairo_restore( currentContext );
+ break;
+
+ case CMD_CALL_GROUP:
+ DrawGroup( it->intArgument );
+ break;
+ }
+ }
+}
+
+
+void CAIRO_GAL::ChangeGroupColor( int aGroupNumber, const COLOR4D& aNewColor )
+{
+ storePath();
+
+ for( GROUP::iterator it = groups[aGroupNumber].begin();
+ it != groups[aGroupNumber].end(); ++it )
+ {
+ if( it->command == CMD_SET_FILLCOLOR || it->command == CMD_SET_STROKECOLOR )
+ {
+ it->arguments[0] = aNewColor.r;
+ it->arguments[1] = aNewColor.g;
+ it->arguments[2] = aNewColor.b;
+ it->arguments[3] = aNewColor.a;
+ }
+ }
+}
+
+
+void CAIRO_GAL::ChangeGroupDepth( int aGroupNumber, int aDepth )
+{
+ // Cairo does not have any possibilities to change the depth coordinate of stored items,
+ // it depends only on the order of drawing
+}
+
+
+void CAIRO_GAL::DeleteGroup( int aGroupNumber )
+{
+ storePath();
+
+ // Delete the Cairo paths
+ std::deque<GROUP_ELEMENT>::iterator it, end;
+
+ for( it = groups[aGroupNumber].begin(), end = groups[aGroupNumber].end(); it != end; ++it )
+ {
+ if( it->command == CMD_FILL_PATH || it->command == CMD_STROKE_PATH )
+ {
+ cairo_path_destroy( it->cairoPath );
+ }
+ }
+
+ // Delete the group
+ groups.erase( aGroupNumber );
+}
+
+
+void CAIRO_GAL::ClearCache()
+{
+ for( int i = groups.size() - 1; i >= 0; --i )
+ {
+ DeleteGroup( i );
+ }
+}
+
+
+void CAIRO_GAL::SaveScreen()
+{
+ // Copy the current bitmap to the backup buffer
+ int offset = 0;
+
+ for( int j = 0; j < screenSize.y; j++ )
+ {
+ for( int i = 0; i < stride; i++ )
+ {
+ bitmapBufferBackup[offset + i] = bitmapBuffer[offset + i];
+ offset += stride;
+ }
+ }
+}
+
+
+void CAIRO_GAL::RestoreScreen()
+{
+ int offset = 0;
+
+ for( int j = 0; j < screenSize.y; j++ )
+ {
+ for( int i = 0; i < stride; i++ )
+ {
+ bitmapBuffer[offset + i] = bitmapBufferBackup[offset + i];
+ offset += stride;
+ }
+ }
+}
+
+
+void CAIRO_GAL::SetTarget( RENDER_TARGET aTarget )
+{
+ // If the compositor is not set, that means that there is a recaching process going on
+ // and we do not need the compositor now
+ if( !validCompositor )
+ return;
+
+ // Cairo grouping prevents display of overlapping items on the same layer in the lighter color
+ if( isInitialized )
+ {
+ storePath();
+
+ cairo_pop_group_to_source( currentContext );
+ cairo_paint_with_alpha( currentContext, LAYER_ALPHA );
+ }
+
+ switch( aTarget )
+ {
+ default:
+ case TARGET_CACHED:
+ case TARGET_NONCACHED:
+ compositor->SetBuffer( mainBuffer );
+ break;
+
+ case TARGET_OVERLAY:
+ compositor->SetBuffer( overlayBuffer );
+ break;
+ }
+
+ if( isInitialized )
+ cairo_push_group( currentContext );
+
+ currentTarget = aTarget;
+}
+
+
+RENDER_TARGET CAIRO_GAL::GetTarget() const
+{
+ return currentTarget;
+}
+
+
+void CAIRO_GAL::ClearTarget( RENDER_TARGET aTarget )
+{
+ // Save the current state
+ unsigned int currentBuffer = compositor->GetBuffer();
+
+ switch( aTarget )
+ {
+ // Cached and noncached items are rendered to the same buffer
+ default:
+ case TARGET_CACHED:
+ case TARGET_NONCACHED:
+ compositor->SetBuffer( mainBuffer );
+ break;
+
+ case TARGET_OVERLAY:
+ compositor->SetBuffer( overlayBuffer );
+ break;
+ }
+
+ compositor->ClearBuffer();
+
+ // Restore the previous state
+ compositor->SetBuffer( currentBuffer );
+}
+
+
+void CAIRO_GAL::SetCursorSize( unsigned int aCursorSize )
+{
+ GAL::SetCursorSize( aCursorSize );
+ initCursor();
+}
+
+
+void CAIRO_GAL::DrawCursor( const VECTOR2D& aCursorPosition )
+{
+ // Now we should only store the position of the mouse cursor
+ // The real drawing routines are in blitCursor()
+ cursorPosition = VECTOR2D( aCursorPosition.x - cursorSize / 2,
+ aCursorPosition.y - cursorSize / 2 );
+}
+
+
+void CAIRO_GAL::drawGridLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ cairo_move_to( currentContext, aStartPoint.x, aStartPoint.y );
+ cairo_line_to( currentContext, aEndPoint.x, aEndPoint.y );
+ cairo_set_source_rgb( currentContext, gridColor.r, gridColor.g, gridColor.b );
+ cairo_stroke( currentContext );
+}
+
+
+void CAIRO_GAL::storePath()
+{
+ if( isElementAdded )
+ {
+ isElementAdded = false;
+
+ if( !isGrouping )
+ {
+ if( isFillEnabled )
+ {
+ cairo_set_source_rgb( currentContext, fillColor.r, fillColor.g, fillColor.b );
+ cairo_fill_preserve( currentContext );
+ }
+
+ if( isStrokeEnabled )
+ {
+ cairo_set_source_rgb( currentContext, strokeColor.r, strokeColor.g,
+ strokeColor.b );
+ cairo_stroke_preserve( currentContext );
+ }
+ }
+ else
+ {
+ // Copy the actual path, append it to the global path list
+ // then check, if the path needs to be stroked/filled and
+ // add this command to the group list;
+ if( isStrokeEnabled )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.cairoPath = cairo_copy_path( currentContext );
+ groupElement.command = CMD_STROKE_PATH;
+ currentGroup->push_back( groupElement );
+ }
+
+ if( isFillEnabled )
+ {
+ GROUP_ELEMENT groupElement;
+ groupElement.cairoPath = cairo_copy_path( currentContext );
+ groupElement.command = CMD_FILL_PATH;
+ currentGroup->push_back( groupElement );
+ }
+ }
+
+ cairo_new_path( currentContext );
+ }
+}
+
+
+void CAIRO_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
+{
+ PostPaint();
+}
+
+
+void CAIRO_GAL::skipMouseEvent( wxMouseEvent& aEvent )
+{
+ // Post the mouse event to the event listener registered in constructor, if any
+ if( mouseListener )
+ wxPostEvent( mouseListener, aEvent );
+}
+
+
+void CAIRO_GAL::initCursor()
+{
+ if( cursorPixels )
+ delete cursorPixels;
+
+ if( cursorPixelsSaved )
+ delete cursorPixelsSaved;
+
+ cursorPixels = new wxBitmap( cursorSize, cursorSize );
+ cursorPixelsSaved = new wxBitmap( cursorSize, cursorSize );
+
+ wxMemoryDC cursorShape( *cursorPixels );
+
+ cursorShape.SetBackground( *wxTRANSPARENT_BRUSH );
+ wxColour color( cursorColor.r * cursorColor.a * 255, cursorColor.g * cursorColor.a * 255,
+ cursorColor.b * cursorColor.a * 255, 255 );
+ wxPen pen = wxPen( color );
+ cursorShape.SetPen( pen );
+ cursorShape.Clear();
+
+ cursorShape.DrawLine( 0, cursorSize / 2, cursorSize, cursorSize / 2 );
+ cursorShape.DrawLine( cursorSize / 2, 0, cursorSize / 2, cursorSize );
+}
+
+
+void CAIRO_GAL::blitCursor( wxBufferedDC& clientDC )
+{
+ if( !isCursorEnabled )
+ return;
+
+ wxMemoryDC cursorSave( *cursorPixelsSaved );
+ wxMemoryDC cursorShape( *cursorPixels );
+
+ if( !isDeleteSavedPixels )
+ {
+ // Restore pixels that were overpainted by the previous cursor
+ clientDC.Blit( savedCursorPosition.x, savedCursorPosition.y,
+ cursorSize, cursorSize, &cursorSave, 0, 0 );
+ }
+ else
+ {
+ isDeleteSavedPixels = false;
+ }
+
+ // Store pixels that are going to be overpainted
+ VECTOR2D cursorScreen = ToScreen( cursorPosition ) - cursorSize / 2.0f;
+ cursorSave.Blit( 0, 0, cursorSize, cursorSize, &clientDC, cursorScreen.x, cursorScreen.y );
+
+ // Draw the cursor
+ clientDC.Blit( cursorScreen.x, cursorScreen.y, cursorSize, cursorSize,
+ &cursorShape, 0, 0, wxOR );
+
+ savedCursorPosition.x = (wxCoord) cursorScreen.x;
+ savedCursorPosition.y = (wxCoord) cursorScreen.y;
+}
+
+
+void CAIRO_GAL::allocateBitmaps()
+{
+ // Create buffer, use the system independent Cairo context backend
+ stride = cairo_format_stride_for_width( GAL_FORMAT, screenSize.x );
+ bufferSize = stride * screenSize.y;
+
+ bitmapBuffer = new unsigned int[bufferSize];
+ bitmapBufferBackup = new unsigned int[bufferSize];
+ wxOutput = new unsigned char[bufferSize * 3];
+}
+
+
+void CAIRO_GAL::deleteBitmaps()
+{
+ delete[] bitmapBuffer;
+ delete[] bitmapBufferBackup;
+ delete[] wxOutput;
+}
+
+
+void CAIRO_GAL::initSurface()
+{
+ if( isInitialized )
+ return;
+
+ // Create the Cairo surface
+ surface = cairo_image_surface_create_for_data( (unsigned char*) bitmapBuffer, GAL_FORMAT,
+ screenSize.x, screenSize.y, stride );
+ context = cairo_create( surface );
+#ifdef __WXDEBUG__
+ cairo_status_t status = cairo_status( context );
+ wxASSERT_MSG( status == CAIRO_STATUS_SUCCESS, wxT( "Cairo context creation error" ) );
+#endif /* __WXDEBUG__ */
+ currentContext = context;
+
+ cairo_set_antialias( context, CAIRO_ANTIALIAS_SUBPIXEL );
+
+ // Clear the screen
+ ClearScreen( backgroundColor );
+
+ // Compute the world <-> screen transformations
+ ComputeWorldScreenMatrix();
+
+ cairo_matrix_init( &cairoWorldScreenMatrix, worldScreenMatrix.m_data[0][0],
+ worldScreenMatrix.m_data[1][0], worldScreenMatrix.m_data[0][1],
+ worldScreenMatrix.m_data[1][1], worldScreenMatrix.m_data[0][2],
+ worldScreenMatrix.m_data[1][2] );
+
+ cairo_set_matrix( context, &cairoWorldScreenMatrix );
+
+ // Start drawing with a new path
+ cairo_new_path( context );
+ isElementAdded = true;
+
+ cairo_set_line_join( context, CAIRO_LINE_JOIN_ROUND );
+ cairo_set_line_cap( context, CAIRO_LINE_CAP_ROUND );
+
+ lineWidth = 0;
+
+ isDeleteSavedPixels = true;
+ isInitialized = true;
+}
+
+
+void CAIRO_GAL::deinitSurface()
+{
+ if( !isInitialized )
+ return;
+
+ // Destroy Cairo objects
+ cairo_destroy( context );
+ cairo_surface_destroy( surface );
+
+ isInitialized = false;
+}
+
+
+void CAIRO_GAL::setCompositor()
+{
+ // Recreate the compositor with the new Cairo context
+ compositor.reset( new CAIRO_COMPOSITOR( &currentContext ) );
+ compositor->Resize( screenSize.x, screenSize.y );
+
+ // Prepare buffers
+ mainBuffer = compositor->CreateBuffer();
+ overlayBuffer = compositor->CreateBuffer();
+
+ validCompositor = true;
+}
+
+
+void CAIRO_GAL::drawPoly( const std::deque<VECTOR2D>& aPointList )
+{
+ // Iterate over the point list and draw the segments
+ std::deque<VECTOR2D>::const_iterator it = aPointList.begin();
+
+ cairo_move_to( currentContext, it->x, it->y );
+
+ for( ++it; it != aPointList.end(); ++it )
+ {
+ cairo_line_to( currentContext, it->x, it->y );
+ }
+
+ isElementAdded = true;
+}
+
+
+void CAIRO_GAL::drawPoly( const VECTOR2D aPointList[], int aListSize )
+{
+ // Iterate over the point list and draw the segments
+ const VECTOR2D* ptr = aPointList;
+
+ cairo_move_to( currentContext, ptr->x, ptr->y );
+
+ for( int i = 0; i < aListSize; ++i )
+ {
+ ++ptr;
+ cairo_line_to( currentContext, ptr->x, ptr->y );
+ }
+
+ isElementAdded = true;
+}
+
+
+unsigned int CAIRO_GAL::getNewGroupNumber()
+{
+ wxASSERT_MSG( groups.size() < std::numeric_limits<unsigned int>::max(),
+ wxT( "There are no free slots to store a group" ) );
+
+ while( groups.find( groupCounter ) != groups.end() )
+ {
+ groupCounter++;
+ }
+
+ return groupCounter++;
+}
diff --git a/common/gal/color4d.cpp b/common/gal/color4d.cpp
new file mode 100644
index 0000000..3b509d3
--- /dev/null
+++ b/common/gal/color4d.cpp
@@ -0,0 +1,179 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Color class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <gal/color4d.h>
+
+using namespace KIGFX;
+
+COLOR4D::COLOR4D( EDA_COLOR_T aColor )
+{
+ r = g_ColorRefs[aColor].m_Red / 255.0;
+ g = g_ColorRefs[aColor].m_Green / 255.0;
+ b = g_ColorRefs[aColor].m_Blue / 255.0;
+ a = 1.0;
+}
+
+
+#ifdef WX_COMPATIBILITY
+ COLOR4D::COLOR4D( const wxColour& aColor )
+ {
+ r = aColor.Red();
+ g = aColor.Green();
+ b = aColor.Blue();
+ a = aColor.Alpha();
+ }
+#endif
+
+
+const bool COLOR4D::operator==( const COLOR4D& aColor )
+{
+ return a == aColor.a && r == aColor.r && g == aColor.g && b == aColor.b;
+}
+
+
+const bool COLOR4D::operator!=( const COLOR4D& aColor )
+{
+ return a != aColor.a || r != aColor.r || g != aColor.g || b != aColor.b;
+}
+
+
+void COLOR4D::ToHSV( double& aOutH, double& aOutS, double& aOutV ) const
+{
+ double min, max, delta;
+
+ min = r < g ? r : g;
+ min = min < b ? min : b;
+
+ max = r > g ? r : g;
+ max = max > b ? max : b;
+
+ aOutV = max; // v
+ delta = max - min;
+
+ if( max > 0.0 )
+ {
+ aOutS = ( delta / max ); // s
+ }
+ else
+ {
+ // r = g = b = 0 // s = 0, v is undefined
+ aOutS = 0.0;
+ aOutH = NAN; // its now undefined
+ return;
+ }
+
+ if( r >= max ) // > is bogus, just keeps compiler happy
+ aOutH = ( g - b ) / delta; // between yellow & magenta
+ else if( g >= max )
+ aOutH = 2.0 + ( b - r ) / delta; // between cyan & yellow
+ else
+ aOutH = 4.0 + ( r - g ) / delta; // between magenta & cyan
+
+ aOutH *= 60.0; // degrees
+
+ if( aOutH < 0.0 )
+ aOutH += 360.0;
+}
+
+
+void COLOR4D::FromHSV( double aInH, double aInS, double aInV )
+{
+ double hh, p, q, t, ff;
+ long i;
+
+ if( aInS <= 0.0 ) // < is bogus, just shuts up warnings
+ {
+ r = aInV;
+ g = aInV;
+ b = aInV;
+ return;
+ }
+
+ hh = aInH;
+
+ if( hh >= 360.0 )
+ hh = 0.0;
+
+ hh /= 60.0;
+
+ i = (long) hh;
+ ff = hh - i;
+
+ p = aInV * ( 1.0 - aInS );
+ q = aInV * ( 1.0 - ( aInS * ff ) );
+ t = aInV * ( 1.0 - ( aInS * ( 1.0 - ff ) ) );
+
+ switch( i )
+ {
+ case 0:
+ r = aInV;
+ g = t;
+ b = p;
+ break;
+
+ case 1:
+ r = q;
+ g = aInV;
+ b = p;
+ break;
+
+ case 2:
+ r = p;
+ g = aInV;
+ b = t;
+ break;
+
+ case 3:
+ r = p;
+ g = q;
+ b = aInV;
+ break;
+
+ case 4:
+ r = t;
+ g = p;
+ b = aInV;
+ break;
+
+ case 5:
+ default:
+ r = aInV;
+ g = p;
+ b = q;
+ break;
+ }
+}
+
+
+COLOR4D& COLOR4D::Saturate( double aFactor )
+{
+ double h, s, v;
+
+ ToHSV( h, s, v );
+ FromHSV( h, aFactor, 1.0 );
+
+ return *this;
+}
diff --git a/common/gal/graphics_abstraction_layer.cpp b/common/gal/graphics_abstraction_layer.cpp
new file mode 100644
index 0000000..d9e9eac
--- /dev/null
+++ b/common/gal/graphics_abstraction_layer.cpp
@@ -0,0 +1,240 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Graphics Abstraction Layer (GAL) - base class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/log.h>
+
+#include <gal/graphics_abstraction_layer.h>
+#include <gal/definitions.h>
+
+using namespace KIGFX;
+
+
+const double GAL::METRIC_UNIT_LENGTH = 1e9;
+
+
+GAL::GAL() :
+ strokeFont( this )
+{
+ // Set the default values for the internal variables
+ SetIsFill( false );
+ SetIsStroke( true );
+ SetFillColor( COLOR4D( 0.0, 0.0, 0.0, 0.0 ) );
+ SetStrokeColor( COLOR4D( 1.0, 1.0, 1.0, 1.0 ) );
+ SetLookAtPoint( VECTOR2D( 0, 0 ) );
+ SetZoomFactor( 1.0 );
+ SetWorldUnitLength( 1.0 / METRIC_UNIT_LENGTH * 2.54 ); // 1 inch in nanometers
+ SetScreenDPI( 106 ); // Display resolution setting
+ SetDepthRange( VECTOR2D( GAL::MIN_DEPTH, GAL::MAX_DEPTH ) );
+ SetLayerDepth( 0.0 );
+ SetFlip( false, false );
+ SetLineWidth( 1.0 );
+ ComputeWorldScale();
+
+ // Set grid defaults
+ SetGridVisibility( true );
+ SetGridStyle( GRID_STYLE_LINES );
+ SetGridDrawThreshold( 10 );
+ SetCoarseGrid( 10 );
+ SetGridLineWidth( 0.5 );
+
+ // Initialize the cursor shape
+ SetCursorColor( COLOR4D( 1.0, 1.0, 1.0, 1.0 ) );
+ SetCursorSize( 80 );
+ SetCursorEnabled( false );
+
+ strokeFont.LoadNewStrokeFont( newstroke_font, newstroke_font_bufsize );
+}
+
+
+GAL::~GAL()
+{
+}
+
+
+void GAL::SetTextAttributes( const EDA_TEXT* aText )
+{
+ strokeFont.SetGlyphSize( VECTOR2D( aText->GetSize() ) );
+ strokeFont.SetHorizontalJustify( aText->GetHorizJustify() );
+ strokeFont.SetVerticalJustify( aText->GetVertJustify() );
+ strokeFont.SetBold( aText->IsBold() );
+ strokeFont.SetItalic( aText->IsItalic() );
+ strokeFont.SetMirrored( aText->IsMirrored() );
+}
+
+
+void GAL::ComputeWorldScreenMatrix()
+{
+ ComputeWorldScale();
+
+ worldScreenMatrix.SetIdentity();
+
+ MATRIX3x3D translation;
+ translation.SetIdentity();
+ translation.SetTranslation( 0.5 * VECTOR2D( screenSize ) );
+
+ MATRIX3x3D scale;
+ scale.SetIdentity();
+ scale.SetScale( VECTOR2D( worldScale, worldScale ) );
+
+ MATRIX3x3D flip;
+ flip.SetIdentity();
+ flip.SetScale( VECTOR2D( flipX, flipY ) );
+
+ MATRIX3x3D lookat;
+ lookat.SetIdentity();
+ lookat.SetTranslation( -lookAtPoint );
+
+ worldScreenMatrix = translation * flip * scale * lookat * worldScreenMatrix;
+ screenWorldMatrix = worldScreenMatrix.Inverse();
+}
+
+
+void GAL::DrawGrid()
+{
+ if( !gridVisibility )
+ return;
+
+ SetTarget( TARGET_NONCACHED );
+
+ // Draw the grid
+ // For the drawing the start points, end points and increments have
+ // to be calculated in world coordinates
+ VECTOR2D worldStartPoint = screenWorldMatrix * VECTOR2D( 0.0, 0.0 );
+ VECTOR2D worldEndPoint = screenWorldMatrix * VECTOR2D( screenSize );
+
+ int gridScreenSizeDense = KiROUND( gridSize.x * worldScale );
+ int gridScreenSizeCoarse = KiROUND( gridSize.x * static_cast<double>( gridTick ) * worldScale );
+
+ // Compute the line marker or point radius of the grid
+ double marker = 2.0 * gridLineWidth / worldScale;
+ double doubleMarker = 2.0 * marker;
+
+ // Check if the grid would not be too dense
+ if( std::max( gridScreenSizeDense, gridScreenSizeCoarse ) > gridDrawThreshold )
+ {
+ // Compute grid variables
+ int gridStartX = KiROUND( worldStartPoint.x / gridSize.x );
+ int gridEndX = KiROUND( worldEndPoint.x / gridSize.x );
+ int gridStartY = KiROUND( worldStartPoint.y / gridSize.y );
+ int gridEndY = KiROUND( worldEndPoint.y / gridSize.y );
+
+ assert( gridEndX >= gridStartX );
+ assert( gridEndY >= gridStartY );
+
+ // Correct the index, else some lines are not correctly painted
+ gridStartX -= std::abs( gridOrigin.x / gridSize.x ) + 1;
+ gridStartY -= std::abs( gridOrigin.y / gridSize.y ) + 1;
+ gridEndX += std::abs( gridOrigin.x / gridSize.x ) + 1;
+ gridEndY += std::abs( gridOrigin.y / gridSize.y ) + 1;
+
+ // Draw the grid behind all other layers
+ SetLayerDepth( depthRange.y * 0.75 );
+
+ if( gridStyle == GRID_STYLE_LINES )
+ {
+ SetIsFill( false );
+ SetIsStroke( true );
+ SetStrokeColor( gridColor );
+
+ // Now draw the grid, every coarse grid line gets the double width
+
+ // Vertical lines
+ for( int j = gridStartY; j < gridEndY; j += 1 )
+ {
+ if( j % gridTick == 0 && gridScreenSizeDense > gridDrawThreshold )
+ SetLineWidth( doubleMarker );
+ else
+ SetLineWidth( marker );
+
+ if( ( j % gridTick == 0 && gridScreenSizeCoarse > gridDrawThreshold )
+ || gridScreenSizeDense > gridDrawThreshold )
+ {
+ drawGridLine( VECTOR2D( gridStartX * gridSize.x, j * gridSize.y + gridOrigin.y ),
+ VECTOR2D( gridEndX * gridSize.x, j * gridSize.y + gridOrigin.y ) );
+ }
+ }
+
+ // Horizontal lines
+ for( int i = gridStartX; i < gridEndX; i += 1 )
+ {
+ if( i % gridTick == 0 && gridScreenSizeDense > gridDrawThreshold )
+ SetLineWidth( doubleMarker );
+ else
+ SetLineWidth( marker );
+
+ if( ( i % gridTick == 0 && gridScreenSizeCoarse > gridDrawThreshold )
+ || gridScreenSizeDense > gridDrawThreshold )
+ {
+ drawGridLine( VECTOR2D( i * gridSize.x + gridOrigin.x, gridStartY * gridSize.y ),
+ VECTOR2D( i * gridSize.x + gridOrigin.x, gridEndY * gridSize.y ) );
+ }
+ }
+ }
+ else // Dotted grid
+ {
+ bool tickX, tickY;
+ SetIsFill( true );
+ SetIsStroke( false );
+ SetFillColor( gridColor );
+
+ for( int j = gridStartY; j < gridEndY; j += 1 )
+ {
+ if( j % gridTick == 0 && gridScreenSizeDense > gridDrawThreshold )
+ tickY = true;
+ else
+ tickY = false;
+
+ for( int i = gridStartX; i < gridEndX; i += 1 )
+ {
+ if( i % gridTick == 0 && gridScreenSizeDense > gridDrawThreshold )
+ tickX = true;
+ else
+ tickX = false;
+
+ if( tickX || tickY || gridScreenSizeDense > gridDrawThreshold )
+ {
+ double radius = ( tickX && tickY ) ? doubleMarker : marker;
+ DrawRectangle( VECTOR2D( i * gridSize.x - radius + gridOrigin.x,
+ j * gridSize.y - radius + gridOrigin.y ),
+ VECTOR2D( i * gridSize.x + radius + gridOrigin.x,
+ j * gridSize.y + radius + gridOrigin.y ) );
+ }
+ }
+ }
+ }
+ }
+}
+
+
+VECTOR2D GAL::GetGridPoint( const VECTOR2D& aPoint ) const
+{
+ return VECTOR2D( KiROUND( ( aPoint.x - gridOffset.x ) / gridSize.x ) * gridSize.x + gridOffset.x,
+ KiROUND( ( aPoint.y - gridOffset.y ) / gridSize.y ) * gridSize.y + gridOffset.y );
+}
+
+const int GAL::MIN_DEPTH = -1024;
+const int GAL::MAX_DEPTH = 1023;
+const int GAL::GRID_DEPTH = MAX_DEPTH - 1;
diff --git a/common/gal/opengl/cached_container.cpp b/common/gal/opengl/cached_container.cpp
new file mode 100644
index 0000000..8cf3513
--- /dev/null
+++ b/common/gal/opengl/cached_container.cpp
@@ -0,0 +1,547 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file cached_container.cpp
+ * @brief Class to store instances of VERTEX with caching. It allows storing VERTEX objects and
+ * associates them with VERTEX_ITEMs. This leads to a possibility of caching vertices data in the
+ * GPU memory and a fast reuse of that data.
+ */
+
+#include <gal/opengl/cached_container.h>
+#include <gal/opengl/vertex_manager.h>
+#include <gal/opengl/vertex_item.h>
+#include <gal/opengl/shader.h>
+#include <confirm.h>
+#include <wx/log.h>
+#include <list>
+#ifdef __WXDEBUG__
+#include <profile.h>
+#endif /* __WXDEBUG__ */
+
+using namespace KIGFX;
+
+CACHED_CONTAINER::CACHED_CONTAINER( unsigned int aSize ) :
+ VERTEX_CONTAINER( aSize ), m_item( NULL )
+{
+ // In the beginning there is only free space
+ m_freeChunks.insert( CHUNK( aSize, 0 ) );
+
+ // Do not have uninitialized members:
+ m_chunkSize = 0;
+ m_chunkOffset = 0;
+ m_itemSize = 0;
+}
+
+
+void CACHED_CONTAINER::SetItem( VERTEX_ITEM* aItem )
+{
+ wxASSERT( aItem != NULL );
+
+ m_item = aItem;
+ m_itemSize = m_item->GetSize();
+ m_chunkSize = m_itemSize;
+
+ if( m_itemSize == 0 )
+ m_items.insert( m_item ); // The item was not stored before
+ else
+ m_chunkOffset = m_item->GetOffset();
+
+#if CACHED_CONTAINER_TEST > 1
+ wxLogDebug( wxT( "Adding/editing item 0x%08lx (size %d)" ), (long) m_item, m_itemSize );
+#endif
+}
+
+
+void CACHED_CONTAINER::FinishItem()
+{
+ wxASSERT( m_item != NULL );
+ wxASSERT( m_item->GetSize() == m_itemSize );
+
+ // Finishing the previously edited item
+ if( m_itemSize < m_chunkSize )
+ {
+ // There is some not used but reserved memory left, so we should return it to the pool
+ int itemOffset = m_item->GetOffset();
+
+ // Add the not used memory back to the pool
+ m_freeChunks.insert( CHUNK( m_chunkSize - m_itemSize, itemOffset + m_itemSize ) );
+ m_freeSpace += ( m_chunkSize - m_itemSize );
+ // mergeFreeChunks(); // veery slow and buggy
+ }
+
+#if CACHED_CONTAINER_TEST > 1
+ wxLogDebug( wxT( "Finishing item 0x%08lx (size %d)" ), (long) m_item, m_itemSize );
+ test();
+ m_item = NULL; // electric fence
+#endif
+}
+
+
+VERTEX* CACHED_CONTAINER::Allocate( unsigned int aSize )
+{
+ wxASSERT( m_item != NULL );
+
+ if( m_failed )
+ return NULL;
+
+ if( m_itemSize + aSize > m_chunkSize )
+ {
+ // There is not enough space in the currently reserved chunk, so we have to resize it
+
+ // Reserve a bigger memory chunk for the current item and
+ // make it multiple of 3 to store triangles
+ m_chunkSize = ( 2 * m_itemSize ) + aSize + ( 3 - aSize % 3 );
+ // Save the current size before reallocating
+ m_chunkOffset = reallocate( m_chunkSize );
+
+ if( m_chunkOffset > m_currentSize )
+ {
+ m_failed = true;
+ return NULL;
+ }
+ }
+
+ VERTEX* reserved = &m_vertices[m_chunkOffset + m_itemSize];
+ m_itemSize += aSize;
+ // Now the item officially possesses the memory chunk
+ m_item->setSize( m_itemSize );
+
+ // The content has to be updated
+ m_dirty = true;
+
+#if CACHED_CONTAINER_TEST > 1
+ test();
+#endif
+#if CACHED_CONTAINER_TEST > 2
+ showFreeChunks();
+ showReservedChunks();
+#endif
+
+ return reserved;
+}
+
+
+void CACHED_CONTAINER::Delete( VERTEX_ITEM* aItem )
+{
+ wxASSERT( aItem != NULL );
+ wxASSERT( m_items.find( aItem ) != m_items.end() );
+
+ int size = aItem->GetSize();
+ int offset = aItem->GetOffset();
+
+#if CACHED_CONTAINER_TEST > 1
+ wxLogDebug( wxT( "Removing 0x%08lx (size %d offset %d)" ), (long) aItem, size, offset );
+#endif
+
+ // Insert a free memory chunk entry in the place where item was stored
+ if( size > 0 )
+ {
+ m_freeChunks.insert( CHUNK( size, offset ) );
+ m_freeSpace += size;
+ // Indicate that the item is not stored in the container anymore
+ aItem->setSize( 0 );
+ }
+
+ m_items.erase( aItem );
+
+#if CACHED_CONTAINER_TEST > 1
+ test();
+#endif
+
+ // Dynamic memory freeing, there is no point in holding
+ // a large amount of memory when there is no use for it
+ if( m_freeSpace > ( 0.75 * m_currentSize ) && m_currentSize > m_initialSize )
+ {
+ resizeContainer( 0.5 * m_currentSize );
+ }
+}
+
+
+void CACHED_CONTAINER::Clear()
+{
+ // Change size to the default one
+ m_vertices = static_cast<VERTEX*>( realloc( m_vertices,
+ m_initialSize * sizeof( VERTEX ) ) );
+
+ // Reset state variables
+ m_freeSpace = m_initialSize;
+ m_currentSize = m_initialSize;
+ m_failed = false;
+
+ // Set the size of all the stored VERTEX_ITEMs to 0, so it is clear that they are not held
+ // in the container anymore
+ ITEMS::iterator it;
+
+ for( it = m_items.begin(); it != m_items.end(); ++it )
+ {
+ ( *it )->setSize( 0 );
+ }
+
+ m_items.clear();
+
+
+ // Now there is only free space left
+ m_freeChunks.clear();
+ m_freeChunks.insert( CHUNK( m_freeSpace, 0 ) );
+}
+
+
+unsigned int CACHED_CONTAINER::reallocate( unsigned int aSize )
+{
+ wxASSERT( aSize > 0 );
+
+#if CACHED_CONTAINER_TEST > 2
+ wxLogDebug( wxT( "Resize 0x%08lx from %d to %d" ), (long) m_item, m_itemSize, aSize );
+#endif
+
+ // Is there enough space to store vertices?
+ if( m_freeSpace < aSize )
+ {
+ bool result;
+
+ // Would it be enough to double the current space?
+ if( aSize < m_freeSpace + m_currentSize )
+ {
+ // Yes: exponential growing
+ result = resizeContainer( m_currentSize * 2 );
+ }
+ else
+ {
+ // No: grow to the nearest greater power of 2
+ result = resizeContainer( pow( 2, ceil( log2( m_currentSize * 2 + aSize ) ) ) );
+ }
+
+ if( !result )
+ return UINT_MAX;
+ }
+
+ // Look for the free space chunk of at least given size
+ FREE_CHUNK_MAP::iterator newChunk = m_freeChunks.lower_bound( aSize );
+
+ if( newChunk == m_freeChunks.end() )
+ {
+ // In the case when there is enough space to store the vertices,
+ // but the free space is not continous we should defragment the container
+ if( !defragment() )
+ return UINT_MAX;
+
+ // Update the current offset
+ m_chunkOffset = m_item->GetOffset();
+
+ // We can take the first free chunk, as there is only one after defragmentation
+ // and we can be sure that it provides enough space to store the object
+ newChunk = m_freeChunks.begin();
+ }
+
+ // Parameters of the allocated cuhnk
+ unsigned int chunkSize = newChunk->first;
+ unsigned int chunkOffset = newChunk->second;
+
+ wxASSERT( chunkSize >= aSize );
+ wxASSERT( chunkOffset < m_currentSize );
+
+ // Check if the item was previously stored in the container
+ if( m_itemSize > 0 )
+ {
+#if CACHED_CONTAINER_TEST > 3
+ wxLogDebug( wxT( "Moving 0x%08x from 0x%08x to 0x%08x" ),
+ (int) m_item, oldChunkOffset, chunkOffset );
+#endif
+ // The item was reallocated, so we have to copy all the old data to the new place
+ memcpy( &m_vertices[chunkOffset], &m_vertices[m_chunkOffset], m_itemSize * VertexSize );
+
+ // Free the space previously used by the chunk
+ wxASSERT( m_itemSize > 0 );
+ m_freeChunks.insert( CHUNK( m_itemSize, m_chunkOffset ) );
+ m_freeSpace += m_itemSize;
+ }
+
+ // Remove the allocated chunk from the free space pool
+ m_freeChunks.erase( newChunk );
+
+ // If there is some space left, return it to the pool - add an entry for it
+ if( chunkSize > aSize )
+ {
+ m_freeChunks.insert( CHUNK( chunkSize - aSize, chunkOffset + aSize ) );
+ }
+
+ m_freeSpace -= aSize;
+ // mergeFreeChunks(); // veery slow and buggy
+
+ m_item->setOffset( chunkOffset );
+
+ return chunkOffset;
+}
+
+
+bool CACHED_CONTAINER::defragment( VERTEX* aTarget )
+{
+#if CACHED_CONTAINER_TEST > 0
+ wxLogDebug( wxT( "Defragmenting" ) );
+
+ prof_counter totalTime;
+ prof_start( &totalTime );
+#endif
+
+ if( aTarget == NULL )
+ {
+ // No target was specified, so we have to reallocate our own space
+ int size = m_currentSize * sizeof( VERTEX );
+ aTarget = static_cast<VERTEX*>( malloc( size ) );
+
+ if( aTarget == NULL )
+ {
+ DisplayError( NULL, wxString::Format(
+ wxT( "CACHED_CONTAINER::defragment: Run out of memory (malloc %d bytes)" ),
+ size ) );
+ return false;
+ }
+ }
+
+ int newOffset = 0;
+ ITEMS::iterator it, it_end;
+
+ for( it = m_items.begin(), it_end = m_items.end(); it != it_end; ++it )
+ {
+ VERTEX_ITEM* item = *it;
+ int itemOffset = item->GetOffset();
+ int itemSize = item->GetSize();
+
+ // Move an item to the new container
+ memcpy( &aTarget[newOffset], &m_vertices[itemOffset], itemSize * VertexSize );
+
+ // Update new offset
+ item->setOffset( newOffset );
+
+ // Move to the next free space
+ newOffset += itemSize;
+ }
+
+ free( m_vertices );
+ m_vertices = aTarget;
+
+ // Now there is only one big chunk of free memory
+ m_freeChunks.clear();
+ wxASSERT( m_freeSpace > 0 );
+ m_freeChunks.insert( CHUNK( m_freeSpace, m_currentSize - m_freeSpace ) );
+
+#if CACHED_CONTAINER_TEST > 0
+ prof_end( &totalTime );
+
+ wxLogDebug( wxT( "Defragmented the container storing %d vertices / %.1f ms" ),
+ m_currentSize - m_freeSpace, totalTime.msecs() );
+#endif
+
+ return true;
+}
+
+
+void CACHED_CONTAINER::mergeFreeChunks()
+{
+ if( m_freeChunks.size() <= 1 ) // There are no chunks that can be merged
+ return;
+
+#if CACHED_CONTAINER_TEST > 0
+ prof_counter totalTime;
+ prof_start( &totalTime );
+#endif
+
+ // Reversed free chunks map - this one stores chunk size with its offset as the key
+ std::list<CHUNK> freeChunks;
+
+ FREE_CHUNK_MAP::const_iterator it, it_end;
+
+ for( it = m_freeChunks.begin(), it_end = m_freeChunks.end(); it != it_end; ++it )
+ {
+ freeChunks.push_back( std::make_pair( it->second, it->first ) );
+ }
+
+ m_freeChunks.clear();
+ freeChunks.sort();
+
+ std::list<CHUNK>::const_iterator itf, itf_end;
+ unsigned int offset = freeChunks.front().first;
+ unsigned int size = freeChunks.front().second;
+ freeChunks.pop_front();
+
+ for( itf = freeChunks.begin(), itf_end = freeChunks.end(); itf != itf_end; ++itf )
+ {
+ if( itf->first == offset + size )
+ {
+ // These chunks can be merged, so just increase the current chunk size and go on
+ size += itf->second;
+ }
+ else
+ {
+ // These chunks cannot be merged
+ // So store the previous one
+ m_freeChunks.insert( std::make_pair( size, offset ) );
+ // and let's check the next chunk
+ offset = itf->first;
+ size = itf->second;
+
+ }
+ }
+
+ // Add the last one
+ m_freeChunks.insert( std::make_pair( size, offset ) );
+
+#if CACHED_CONTAINER_TEST > 0
+ prof_end( &totalTime );
+
+ wxLogDebug( wxT( "Merged free chunks / %.1f ms" ), totalTime.msecs() );
+#endif
+
+ test();
+}
+
+
+bool CACHED_CONTAINER::resizeContainer( unsigned int aNewSize )
+{
+ wxASSERT( aNewSize != m_currentSize );
+
+#if CACHED_CONTAINER_TEST > 0
+ wxLogDebug( wxT( "Resizing container from %d to %d" ), m_currentSize, aNewSize );
+#endif
+
+ VERTEX* newContainer;
+
+ if( aNewSize < m_currentSize )
+ {
+ // Shrinking container
+ // Sanity check, no shrinking if we cannot fit all the data
+ if( reservedSpace() > aNewSize )
+ return false;
+
+ int size = aNewSize * sizeof( VERTEX );
+ newContainer = static_cast<VERTEX*>( malloc( size ) );
+
+ if( newContainer == NULL )
+ {
+ DisplayError( NULL, wxString::Format(
+ wxT( "CACHED_CONTAINER::resizeContainer:\n"
+ "Run out of memory (malloc %d bytes)" ),
+ size ) );
+ return false;
+ }
+
+ // Defragment directly to the new, smaller container
+ defragment( newContainer );
+
+ // We have to correct freeChunks after defragmentation
+ m_freeChunks.clear();
+ wxASSERT( aNewSize - reservedSpace() > 0 );
+ m_freeChunks.insert( CHUNK( aNewSize - reservedSpace(), reservedSpace() ) );
+ }
+ else
+ {
+ // Enlarging container
+ int size = aNewSize * sizeof( VERTEX );
+ newContainer = static_cast<VERTEX*>( realloc( m_vertices, size ) );
+
+ if( newContainer == NULL )
+ {
+ DisplayError( NULL, wxString::Format(
+ wxT( "CACHED_CONTAINER::resizeContainer:\n"
+ "Run out of memory (realloc from %d to %d bytes)" ),
+ m_currentSize * sizeof( VERTEX ), size ) );
+ return false;
+ }
+
+ // Add an entry for the new memory chunk at the end of the container
+ m_freeChunks.insert( CHUNK( aNewSize - m_currentSize, m_currentSize ) );
+ }
+
+ m_vertices = newContainer;
+
+ m_freeSpace += ( aNewSize - m_currentSize );
+ m_currentSize = aNewSize;
+
+ return true;
+}
+
+
+#ifdef CACHED_CONTAINER_TEST
+void CACHED_CONTAINER::showFreeChunks()
+{
+ FREE_CHUNK_MAP::iterator it;
+
+ wxLogDebug( wxT( "Free chunks:" ) );
+
+ for( it = m_freeChunks.begin(); it != m_freeChunks.end(); ++it )
+ {
+ unsigned int offset = getChunkOffset( *it );
+ unsigned int size = getChunkSize( *it );
+ wxASSERT( size > 0 );
+
+ wxLogDebug( wxT( "[0x%08x-0x%08x] (size %d)" ),
+ offset, offset + size - 1, size );
+ }
+}
+
+
+void CACHED_CONTAINER::showReservedChunks()
+{
+ ITEMS::iterator it;
+
+ wxLogDebug( wxT( "Reserved chunks:" ) );
+
+ for( it = m_items.begin(); it != m_items.end(); ++it )
+ {
+ VERTEX_ITEM* item = *it;
+ unsigned int offset = item->GetOffset();
+ unsigned int size = item->GetSize();
+ wxASSERT( size > 0 );
+
+ wxLogDebug( wxT( "[0x%08x-0x%08x] @ 0x%08lx (size %d)" ),
+ offset, offset + size - 1, (long) item, size );
+ }
+}
+
+
+void CACHED_CONTAINER::test()
+{
+ // Free space check
+ unsigned int freeSpace = 0;
+ FREE_CHUNK_MAP::iterator itf;
+
+ for( itf = m_freeChunks.begin(); itf != m_freeChunks.end(); ++itf )
+ freeSpace += getChunkSize( *itf );
+
+ wxASSERT( freeSpace == m_freeSpace );
+
+ // Reserved space check
+ /*unsigned int reservedSpace = 0;
+ ITEMS::iterator itr;
+ for( itr = m_items.begin(); itr != m_items.end(); ++itr )
+ reservedSpace += ( *itr )->GetSize();
+ reservedSpace += m_itemSize; // Add the current chunk size
+
+ wxASSERT( ( freeSpace + reservedSpace ) == m_currentSize );*/
+
+ // Overlapping check TBD
+}
+
+#endif /* CACHED_CONTAINER_TEST */
diff --git a/common/gal/opengl/gpu_manager.cpp b/common/gal/opengl/gpu_manager.cpp
new file mode 100644
index 0000000..be34a56
--- /dev/null
+++ b/common/gal/opengl/gpu_manager.cpp
@@ -0,0 +1,302 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file gpu_manager.cpp
+ * @brief Class to handle uploading vertices and indices to GPU in drawing purposes.
+ */
+
+#include <gal/opengl/gpu_manager.h>
+#include <gal/opengl/cached_container.h>
+#include <gal/opengl/noncached_container.h>
+#include <gal/opengl/shader.h>
+#include <typeinfo>
+#include <wx/msgdlg.h>
+#include <confirm.h>
+#ifdef PROFILE
+#include <profile.h>
+#include <wx/debug.h>
+#include <wx/log.h>
+#endif /* PROFILE */
+
+using namespace KIGFX;
+
+GPU_MANAGER* GPU_MANAGER::MakeManager( VERTEX_CONTAINER* aContainer )
+{
+ if( typeid( *aContainer ) == typeid( CACHED_CONTAINER ) )
+ return new GPU_CACHED_MANAGER( aContainer );
+ else if( typeid( *aContainer ) == typeid( NONCACHED_CONTAINER ) )
+ return new GPU_NONCACHED_MANAGER( aContainer );
+
+ wxASSERT_MSG( false, wxT( "Not handled container type" ) );
+ return NULL;
+}
+
+
+GPU_MANAGER::GPU_MANAGER( VERTEX_CONTAINER* aContainer ) :
+ m_isDrawing( false ), m_container( aContainer ), m_shader( NULL ), m_shaderAttrib( 0 )
+{
+}
+
+
+GPU_MANAGER::~GPU_MANAGER()
+{
+}
+
+
+void GPU_MANAGER::SetShader( SHADER& aShader )
+{
+ m_shader = &aShader;
+
+ m_shaderAttrib = m_shader->GetAttribute( "attrShaderParams" );
+
+ if( m_shaderAttrib == -1 )
+ {
+ DisplayError( NULL, wxT( "Could not get the shader attribute location" ) );
+ }
+}
+
+
+// Cached manager
+GPU_CACHED_MANAGER::GPU_CACHED_MANAGER( VERTEX_CONTAINER* aContainer ) :
+ GPU_MANAGER( aContainer ), m_buffersInitialized( false ), m_indicesPtr( NULL ),
+ m_verticesBuffer( 0 ), m_indicesBuffer( 0 ), m_indicesSize( 0 ), m_indicesCapacity( 0 )
+{
+ // Allocate the biggest possible buffer for indices
+ resizeIndices( aContainer->GetSize() );
+}
+
+
+GPU_CACHED_MANAGER::~GPU_CACHED_MANAGER()
+{
+ if( m_buffersInitialized )
+ {
+ glBindBuffer( GL_ARRAY_BUFFER, 0 );
+ glDeleteBuffers( 1, &m_verticesBuffer );
+ glDeleteBuffers( 1, &m_indicesBuffer );
+ }
+}
+
+
+void GPU_CACHED_MANAGER::Initialize()
+{
+ wxASSERT( !m_buffersInitialized );
+
+ if( !m_buffersInitialized )
+ {
+ glGenBuffers( 1, &m_verticesBuffer );
+ glGenBuffers( 1, &m_indicesBuffer );
+ m_buffersInitialized = true;
+ }
+}
+
+
+void GPU_CACHED_MANAGER::BeginDrawing()
+{
+ wxASSERT( !m_isDrawing );
+
+ if( m_container->IsDirty() )
+ uploadToGpu();
+
+ // Number of vertices to be drawn in the EndDrawing()
+ m_indicesSize = 0;
+ // Set the indices pointer to the beginning of the indices-to-draw buffer
+ m_indicesPtr = m_indices.get();
+
+ m_isDrawing = true;
+}
+
+
+void GPU_CACHED_MANAGER::DrawIndices( unsigned int aOffset, unsigned int aSize )
+{
+ wxASSERT( m_isDrawing );
+
+ // Copy indices of items that should be drawn to GPU memory
+ for( unsigned int i = aOffset; i < aOffset + aSize; *m_indicesPtr++ = i++ );
+
+ m_indicesSize += aSize;
+}
+
+
+void GPU_CACHED_MANAGER::DrawAll()
+{
+ wxASSERT( m_isDrawing );
+
+ m_indicesSize = m_container->GetSize();
+ for( unsigned int i = 0; i < m_indicesSize; *m_indicesPtr++ = i++ );
+}
+
+
+void GPU_CACHED_MANAGER::EndDrawing()
+{
+ wxASSERT( m_isDrawing );
+
+ // Prepare buffers
+ glEnableClientState( GL_VERTEX_ARRAY );
+ glEnableClientState( GL_COLOR_ARRAY );
+
+ // Bind vertices data buffers
+ glBindBuffer( GL_ARRAY_BUFFER, m_verticesBuffer );
+ glVertexPointer( CoordStride, GL_FLOAT, VertexSize, 0 );
+ glColorPointer( ColorStride, GL_UNSIGNED_BYTE, VertexSize, (GLvoid*) ColorOffset );
+
+ if( m_shader != NULL ) // Use shader if applicable
+ {
+ m_shader->Use();
+ glEnableVertexAttribArray( m_shaderAttrib );
+ glVertexAttribPointer( m_shaderAttrib, ShaderStride, GL_FLOAT, GL_FALSE,
+ VertexSize, (GLvoid*) ShaderOffset );
+ }
+
+ glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_indicesBuffer );
+ glBufferData( GL_ELEMENT_ARRAY_BUFFER, m_indicesSize * sizeof(int), (GLvoid*) m_indices.get(), GL_DYNAMIC_DRAW );
+
+ glDrawElements( GL_TRIANGLES, m_indicesSize, GL_UNSIGNED_INT, 0 );
+
+ glBindBuffer( GL_ARRAY_BUFFER, 0 );
+ glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
+
+ // Deactivate vertex array
+ glDisableClientState( GL_COLOR_ARRAY );
+ glDisableClientState( GL_VERTEX_ARRAY );
+
+ if( m_shader != NULL )
+ {
+ glDisableVertexAttribArray( m_shaderAttrib );
+ m_shader->Deactivate();
+ }
+
+ m_isDrawing = false;
+}
+
+
+void GPU_CACHED_MANAGER::uploadToGpu()
+{
+#ifdef PROFILE
+ prof_counter totalTime;
+ prof_start( &totalTime );
+#endif /* PROFILE */
+
+ if( !m_buffersInitialized )
+ Initialize();
+
+ int bufferSize = m_container->GetSize();
+ GLfloat* vertices = (GLfloat*) m_container->GetAllVertices();
+
+ // Upload vertices coordinates and shader types to GPU memory
+ glBindBuffer( GL_ARRAY_BUFFER, m_verticesBuffer );
+ glBufferData( GL_ARRAY_BUFFER, bufferSize * VertexSize, vertices, GL_STATIC_DRAW );
+ glBindBuffer( GL_ARRAY_BUFFER, 0 );
+
+ // Allocate the biggest possible buffer for indices
+ resizeIndices( bufferSize );
+
+ if( glGetError() != GL_NO_ERROR )
+ DisplayError( NULL, wxT( "Error during data upload to the GPU memory" ) );
+
+#ifdef PROFILE
+ prof_end( &totalTime );
+
+ wxLogDebug( wxT( "Uploading %d vertices to GPU / %.1f ms" ), bufferSize, totalTime.msecs() );
+#endif /* PROFILE */
+}
+
+
+void GPU_CACHED_MANAGER::resizeIndices( unsigned int aNewSize )
+{
+ if( aNewSize > m_indicesCapacity )
+ {
+ m_indicesCapacity = aNewSize;
+ m_indices.reset( new GLuint[m_indicesCapacity] );
+ }
+}
+
+
+// Noncached manager
+GPU_NONCACHED_MANAGER::GPU_NONCACHED_MANAGER( VERTEX_CONTAINER* aContainer ) :
+ GPU_MANAGER( aContainer )
+{
+}
+
+
+void GPU_NONCACHED_MANAGER::Initialize()
+{
+ // Nothing has to be intialized
+}
+
+
+void GPU_NONCACHED_MANAGER::BeginDrawing()
+{
+ // Nothing has to be prepared
+}
+
+
+void GPU_NONCACHED_MANAGER::DrawIndices( unsigned int aOffset, unsigned int aSize )
+{
+ wxASSERT_MSG( false, wxT( "Not implemented yet" ) );
+}
+
+
+void GPU_NONCACHED_MANAGER::DrawAll()
+{
+ // This is the default use case, nothing has to be done
+ // The real rendering takes place in the EndDrawing() function
+}
+
+
+void GPU_NONCACHED_MANAGER::EndDrawing()
+{
+ VERTEX* vertices = m_container->GetAllVertices();
+ GLfloat* coordinates = (GLfloat*) ( vertices );
+ GLubyte* colors = (GLubyte*) ( vertices ) + ColorOffset;
+
+ // Prepare buffers
+ glEnableClientState( GL_VERTEX_ARRAY );
+ glEnableClientState( GL_COLOR_ARRAY );
+
+ glVertexPointer( CoordStride, GL_FLOAT, VertexSize, coordinates );
+ glColorPointer( ColorStride, GL_UNSIGNED_BYTE, VertexSize, colors );
+
+ if( m_shader != NULL ) // Use shader if applicable
+ {
+ GLfloat* shaders = (GLfloat*) ( vertices ) + ShaderOffset / sizeof(GLfloat);
+
+ m_shader->Use();
+ glEnableVertexAttribArray( m_shaderAttrib );
+ glVertexAttribPointer( m_shaderAttrib, ShaderStride, GL_FLOAT, GL_FALSE,
+ VertexSize, shaders );
+ }
+
+ glDrawArrays( GL_TRIANGLES, 0, m_container->GetSize() );
+
+ // Deactivate vertex array
+ glDisableClientState( GL_COLOR_ARRAY );
+ glDisableClientState( GL_VERTEX_ARRAY );
+
+ if( m_shader != NULL )
+ {
+ glDisableVertexAttribArray( m_shaderAttrib );
+ m_shader->Deactivate();
+ }
+}
diff --git a/common/gal/opengl/noncached_container.cpp b/common/gal/opengl/noncached_container.cpp
new file mode 100644
index 0000000..c902c47
--- /dev/null
+++ b/common/gal/opengl/noncached_container.cpp
@@ -0,0 +1,89 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file noncached_container.cpp
+ * @brief Class to store instances of VERTEX without caching. It allows a fast one-frame drawing
+ * and then clearing the buffer and starting from scratch.
+ */
+
+#include <gal/opengl/noncached_container.h>
+#include <cstdlib>
+
+using namespace KIGFX;
+
+NONCACHED_CONTAINER::NONCACHED_CONTAINER( unsigned int aSize ) :
+ VERTEX_CONTAINER( aSize ), m_freePtr( 0 )
+{
+}
+
+
+NONCACHED_CONTAINER::~NONCACHED_CONTAINER()
+{
+}
+
+
+void NONCACHED_CONTAINER::SetItem( VERTEX_ITEM* aItem )
+{
+ // Nothing has to be done, as the noncached container
+ // does not care about VERTEX_ITEMs ownership
+}
+
+
+VERTEX* NONCACHED_CONTAINER::Allocate( unsigned int aSize )
+{
+ if( m_freeSpace < aSize )
+ {
+ // Double the space
+ VERTEX* newVertices = static_cast<VERTEX*>( realloc( m_vertices,
+ m_currentSize * 2 *
+ sizeof(VERTEX) ) );
+
+ if( newVertices != NULL )
+ {
+ m_vertices = newVertices;
+ m_freeSpace += m_currentSize;
+ m_currentSize *= 2;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+ VERTEX* freeVertex = &m_vertices[m_freePtr];
+
+ // Move to the next free chunk
+ m_freePtr += aSize;
+ m_freeSpace -= aSize;
+
+ return freeVertex;
+}
+
+
+void NONCACHED_CONTAINER::Clear()
+{
+ m_freePtr = 0;
+ m_freeSpace = m_currentSize;
+}
diff --git a/common/gal/opengl/opengl_compositor.cpp b/common/gal/opengl/opengl_compositor.cpp
new file mode 100644
index 0000000..9f35d9e
--- /dev/null
+++ b/common/gal/opengl/opengl_compositor.cpp
@@ -0,0 +1,291 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2015 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file opengl_compositor.cpp
+ * @brief Class that handles multitarget rendering (i.e. to different textures/surfaces) and
+ * later compositing into a single image (OpenGL flavour).
+ */
+
+#include <gal/opengl/opengl_compositor.h>
+
+#include <stdexcept>
+#include <cassert>
+
+using namespace KIGFX;
+
+OPENGL_COMPOSITOR::OPENGL_COMPOSITOR() :
+ m_initialized( false ), m_current( 0 ), m_currentFbo( DIRECT_RENDERING )
+{
+ // Avoid not initialized members:
+ m_framebuffer = 0;
+ m_depthBuffer = 0;
+}
+
+
+OPENGL_COMPOSITOR::~OPENGL_COMPOSITOR()
+{
+ if( m_initialized )
+ clean();
+}
+
+
+void OPENGL_COMPOSITOR::Initialize()
+{
+ if( m_initialized )
+ return;
+
+ // We need framebuffer objects for drawing the screen contents
+ // Generate framebuffer and a depth buffer
+ glGenFramebuffersEXT( 1, &m_framebuffer );
+ glBindFramebufferEXT( GL_FRAMEBUFFER, m_framebuffer );
+ m_currentFbo = m_framebuffer;
+
+ // Allocate memory for the depth buffer
+ // Attach the depth buffer to the framebuffer
+ glGenRenderbuffersEXT( 1, &m_depthBuffer );
+ glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_depthBuffer );
+
+ // Use here a size of 24 bits for the depth buffer, 8 bits for the stencil buffer
+ // this is required later for anti-aliasing
+ glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, m_width, m_height );
+ glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER_EXT, m_depthBuffer );
+
+ // Unbind the framebuffer, so by default all the rendering goes directly to the display
+ glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, DIRECT_RENDERING );
+ m_currentFbo = DIRECT_RENDERING;
+
+ m_initialized = true;
+}
+
+
+void OPENGL_COMPOSITOR::Resize( unsigned int aWidth, unsigned int aHeight )
+{
+ if( m_initialized )
+ clean();
+
+ m_width = aWidth;
+ m_height = aHeight;
+}
+
+
+unsigned int OPENGL_COMPOSITOR::CreateBuffer()
+{
+ assert( m_initialized );
+
+ unsigned int maxBuffers;
+
+ // Get the maximum number of buffers
+ glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS, (GLint*) &maxBuffers );
+
+ if( usedBuffers() >= maxBuffers )
+ {
+ throw std::runtime_error("Cannot create more framebuffers. OpenGL rendering "
+ "backend requires at least 3 framebuffers. You may try to update/change "
+ "your graphic drivers.");
+ }
+
+ // GL_COLOR_ATTACHMENTn are consecutive integers
+ GLuint attachmentPoint = GL_COLOR_ATTACHMENT0 + usedBuffers();
+ GLuint textureTarget;
+
+ // Generate the texture for the pixel storage
+ glGenTextures( 1, &textureTarget );
+ glBindTexture( GL_TEXTURE_2D, textureTarget );
+
+ // Set texture parameters
+ glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+ glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, NULL );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
+
+ // Bind the texture to the specific attachment point, clear and rebind the screen
+ glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_framebuffer );
+ m_currentFbo = m_framebuffer;
+ glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, attachmentPoint,
+ GL_TEXTURE_2D, textureTarget, 0 );
+
+ // Check the status, exit if the framebuffer can't be created
+ GLenum status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
+
+ if( status != GL_FRAMEBUFFER_COMPLETE_EXT )
+ {
+ switch( status )
+ {
+ case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
+ throw std::runtime_error( "Cannot create the framebuffer." );
+ break;
+
+ case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
+ throw std::runtime_error( "The framebuffer attachment points are incomplete." );
+ break;
+
+ case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
+ throw std::runtime_error( "The framebuffer does not have at least one "
+ "image attached to it." );
+ break;
+
+ case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
+ throw std::runtime_error( "The framebuffer read buffer is incomplete." );
+ break;
+
+ case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
+ throw std::runtime_error( "The combination of internal formats of the attached "
+ "images violates an implementation-dependent set of restrictions." );
+ break;
+
+ case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT:
+ throw std::runtime_error( "GL_RENDERBUFFER_SAMPLES is not the same for "
+ "all attached renderbuffers" );
+ break;
+
+ case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT:
+ throw std::runtime_error( "Framebuffer incomplete layer targets errors." );
+ break;
+
+ default:
+ throw std::runtime_error( "Cannot create the framebuffer." );
+ break;
+ }
+
+ return 0;
+ }
+
+ ClearBuffer();
+
+ // Return to direct rendering (we were asked only to create a buffer, not switch to one)
+ glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, DIRECT_RENDERING );
+ m_currentFbo = DIRECT_RENDERING;
+
+ // Store the new buffer
+ OPENGL_BUFFER buffer = { textureTarget, attachmentPoint };
+ m_buffers.push_back( buffer );
+
+ return usedBuffers();
+}
+
+
+void OPENGL_COMPOSITOR::SetBuffer( unsigned int aBufferHandle )
+{
+ if( aBufferHandle > usedBuffers() )
+ return;
+
+ // Change the rendering destination to the selected attachment point
+ if( aBufferHandle == DIRECT_RENDERING )
+ {
+ m_currentFbo = DIRECT_RENDERING;
+ }
+ else if( m_currentFbo != m_framebuffer )
+ {
+ glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_framebuffer );
+ m_currentFbo = m_framebuffer;
+ }
+
+ if( m_currentFbo != DIRECT_RENDERING )
+ {
+ m_current = aBufferHandle - 1;
+ glDrawBuffer( m_buffers[m_current].attachmentPoint );
+ }
+}
+
+
+void OPENGL_COMPOSITOR::ClearBuffer()
+{
+ assert( m_initialized );
+
+ glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+}
+
+
+void OPENGL_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
+{
+ assert( m_initialized );
+ assert( aBufferHandle != 0 && aBufferHandle <= usedBuffers() );
+
+ // Switch to the main framebuffer and blit the scene
+ glBindFramebufferEXT( GL_FRAMEBUFFER, DIRECT_RENDERING );
+ m_currentFbo = DIRECT_RENDERING;
+
+ // Depth test has to be disabled to make transparency working
+ glDisable( GL_DEPTH_TEST );
+ glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
+
+ // Enable texturing and bind the main texture
+ glEnable( GL_TEXTURE_2D );
+ glBindTexture( GL_TEXTURE_2D, m_buffers[aBufferHandle - 1].textureTarget );
+
+ // Draw a full screen quad with the texture
+ glMatrixMode( GL_MODELVIEW );
+ glPushMatrix();
+ glLoadIdentity();
+ glMatrixMode( GL_PROJECTION );
+ glPushMatrix();
+ glLoadIdentity();
+
+ glBegin( GL_TRIANGLES );
+ glTexCoord2f( 0.0f, 1.0f );
+ glVertex2f( -1.0f, -1.0f );
+ glTexCoord2f( 1.0f, 1.0f );
+ glVertex2f( 1.0f, -1.0f );
+ glTexCoord2f( 1.0f, 0.0f );
+ glVertex2f( 1.0f, 1.0f );
+
+ glTexCoord2f( 0.0f, 1.0f );
+ glVertex2f( -1.0f, -1.0f );
+ glTexCoord2f( 1.0f, 0.0f );
+ glVertex2f( 1.0f, 1.0f );
+ glTexCoord2f( 0.0f, 0.0f );
+ glVertex2f( -1.0f, 1.0f );
+ glEnd();
+
+ glPopMatrix();
+ glMatrixMode( GL_MODELVIEW );
+ glPopMatrix();
+}
+
+
+void OPENGL_COMPOSITOR::clean()
+{
+ assert( m_initialized );
+
+ glBindFramebufferEXT( GL_FRAMEBUFFER, DIRECT_RENDERING );
+ m_currentFbo = DIRECT_RENDERING;
+
+ OPENGL_BUFFERS::const_iterator it;
+
+ for( it = m_buffers.begin(); it != m_buffers.end(); ++it )
+ {
+ glDeleteTextures( 1, &it->textureTarget );
+ }
+
+ m_buffers.clear();
+
+ glDeleteFramebuffersEXT( 1, &m_framebuffer );
+ glDeleteRenderbuffersEXT( 1, &m_depthBuffer );
+
+ m_initialized = false;
+}
diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp
new file mode 100644
index 0000000..945161f
--- /dev/null
+++ b/common/gal/opengl/opengl_gal.cpp
@@ -0,0 +1,1204 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2013-2016 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Graphics Abstraction Layer (GAL) for OpenGL
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <gal/opengl/opengl_gal.h>
+#include <gal/definitions.h>
+
+#include <wx/log.h>
+#include <macros.h>
+#ifdef __WXDEBUG__
+#include <profile.h>
+#endif /* __WXDEBUG__ */
+
+#include <limits>
+#include <boost/bind.hpp>
+
+using namespace KIGFX;
+
+static void InitTesselatorCallbacks( GLUtesselator* aTesselator );
+const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 8, 0 };
+wxGLContext* OPENGL_GAL::glContext = NULL;
+
+OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
+ wxEvtHandler* aPaintListener, const wxString& aName ) :
+ wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
+ wxEXPAND, aName ),
+ mouseListener( aMouseListener ),
+ paintListener( aPaintListener ),
+ cachedManager( true ),
+ nonCachedManager( false ),
+ overlayManager( false )
+{
+ if( glContext == NULL )
+ glContext = new wxGLContext( this );
+
+ // Check if OpenGL requirements are met
+ runTest();
+
+ // Make VBOs use shaders
+ cachedManager.SetShader( shader );
+ nonCachedManager.SetShader( shader );
+ overlayManager.SetShader( shader );
+
+ // Initialize the flags
+ isFramebufferInitialized = false;
+ isGrouping = false;
+ groupCounter = 0;
+
+#ifdef RETINA_OPENGL_PATCH
+ SetViewWantsBestResolution( true );
+#endif
+
+ // Connecting the event handlers
+ Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) );
+
+ // Mouse events are skipped to the parent
+ Connect( wxEVT_MOTION, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_LEFT_UP, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MIDDLE_DCLICK, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_RIGHT_DCLICK, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+ Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+#ifdef USE_OSX_MAGNIFY_EVENT
+ Connect( wxEVT_MAGNIFY, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+#endif
+#if defined _WIN32 || defined _WIN64
+ Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) );
+#endif
+
+ SetSize( aParent->GetSize() );
+ screenSize = VECTOR2I( aParent->GetSize() );
+
+ // Grid color settings are different in Cairo and OpenGL
+ SetGridColor( COLOR4D( 0.8, 0.8, 0.8, 0.1 ) );
+
+ // Tesselator initialization
+ tesselator = gluNewTess();
+ InitTesselatorCallbacks( tesselator );
+
+ if( tesselator == NULL )
+ throw std::runtime_error( "Could not create the tesselator" );
+
+ gluTessProperty( tesselator, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_POSITIVE );
+
+ currentManager = &nonCachedManager;
+}
+
+
+OPENGL_GAL::~OPENGL_GAL()
+{
+ glFlush();
+
+ gluDeleteTess( tesselator );
+ ClearCache();
+}
+
+
+void OPENGL_GAL::BeginDrawing()
+{
+ if( !IsShownOnScreen() )
+ return;
+
+ SetCurrent( *glContext );
+ clientDC = new wxClientDC( this );
+
+#ifdef RETINA_OPENGL_PATCH
+ const float scaleFactor = GetBackingScaleFactor();
+#else
+ const float scaleFactor = 1.0f;
+#endif
+
+ // Set up the view port
+ glMatrixMode( GL_PROJECTION );
+ glLoadIdentity();
+ glViewport( 0, 0, (GLsizei) screenSize.x * scaleFactor, (GLsizei) screenSize.y * scaleFactor );
+
+ // Create the screen transformation
+ glOrtho( 0, (GLint) screenSize.x, 0, (GLsizei) screenSize.y,
+ -depthRange.x, -depthRange.y );
+
+ if( !isFramebufferInitialized )
+ {
+ // Prepare rendering target buffers
+ compositor.Initialize();
+ mainBuffer = compositor.CreateBuffer();
+ overlayBuffer = compositor.CreateBuffer();
+
+ isFramebufferInitialized = true;
+ }
+
+ // Disable 2D Textures
+ glDisable( GL_TEXTURE_2D );
+
+ // Enable the depth buffer
+ glEnable( GL_DEPTH_TEST );
+ glDepthFunc( GL_LESS );
+
+ // Setup blending, required for transparent objects
+ glEnable( GL_BLEND );
+ glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+
+ glMatrixMode( GL_MODELVIEW );
+
+ // Set up the world <-> screen transformation
+ ComputeWorldScreenMatrix();
+ GLdouble matrixData[16] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
+ matrixData[0] = worldScreenMatrix.m_data[0][0];
+ matrixData[1] = worldScreenMatrix.m_data[1][0];
+ matrixData[2] = worldScreenMatrix.m_data[2][0];
+ matrixData[4] = worldScreenMatrix.m_data[0][1];
+ matrixData[5] = worldScreenMatrix.m_data[1][1];
+ matrixData[6] = worldScreenMatrix.m_data[2][1];
+ matrixData[12] = worldScreenMatrix.m_data[0][2];
+ matrixData[13] = worldScreenMatrix.m_data[1][2];
+ matrixData[14] = worldScreenMatrix.m_data[2][2];
+ glLoadMatrixd( matrixData );
+
+ // Set defaults
+ SetFillColor( fillColor );
+ SetStrokeColor( strokeColor );
+
+ // Unbind buffers - set compositor for direct drawing
+ compositor.SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
+
+ // Remove all previously stored items
+ nonCachedManager.Clear();
+ overlayManager.Clear();
+
+ cachedManager.BeginDrawing();
+ nonCachedManager.BeginDrawing();
+ overlayManager.BeginDrawing();
+}
+
+
+void OPENGL_GAL::EndDrawing()
+{
+ // Cached & non-cached containers are rendered to the same buffer
+ compositor.SetBuffer( mainBuffer );
+ nonCachedManager.EndDrawing();
+ cachedManager.EndDrawing();
+
+ // Overlay container is rendered to a different buffer
+ compositor.SetBuffer( overlayBuffer );
+ overlayManager.EndDrawing();
+
+ // Be sure that the framebuffer is not colorized (happens on specific GPU&drivers combinations)
+ glColor4d( 1.0, 1.0, 1.0, 1.0 );
+
+ // Draw the remaining contents, blit the rendering targets to the screen, swap the buffers
+ compositor.DrawBuffer( mainBuffer );
+ compositor.DrawBuffer( overlayBuffer );
+ blitCursor();
+
+ glFlush();
+ SwapBuffers();
+
+ delete clientDC;
+}
+
+
+void OPENGL_GAL::DrawLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ const VECTOR2D startEndVector = aEndPoint - aStartPoint;
+ double lineAngle = startEndVector.Angle();
+
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ drawLineQuad( aStartPoint, aEndPoint );
+
+ // Line caps
+ if( lineWidth > 1.0 )
+ {
+ drawFilledSemiCircle( aStartPoint, lineWidth / 2, lineAngle + M_PI / 2 );
+ drawFilledSemiCircle( aEndPoint, lineWidth / 2, lineAngle - M_PI / 2 );
+ }
+}
+
+
+void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint,
+ double aWidth )
+{
+ VECTOR2D startEndVector = aEndPoint - aStartPoint;
+ double lineAngle = startEndVector.Angle();
+
+ if( isFillEnabled )
+ {
+ // Filled tracks
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+
+ SetLineWidth( aWidth );
+ drawLineQuad( aStartPoint, aEndPoint );
+
+ // Draw line caps
+ drawFilledSemiCircle( aStartPoint, aWidth / 2, lineAngle + M_PI / 2 );
+ drawFilledSemiCircle( aEndPoint, aWidth / 2, lineAngle - M_PI / 2 );
+ }
+ else
+ {
+ // Outlined tracks
+ double lineLength = startEndVector.EuclideanNorm();
+
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ Save();
+
+ currentManager->Translate( aStartPoint.x, aStartPoint.y, 0.0 );
+ currentManager->Rotate( lineAngle, 0.0f, 0.0f, 1.0f );
+
+ drawLineQuad( VECTOR2D( 0.0, aWidth / 2.0 ),
+ VECTOR2D( lineLength, aWidth / 2.0 ) );
+
+ drawLineQuad( VECTOR2D( 0.0, -aWidth / 2.0 ),
+ VECTOR2D( lineLength, -aWidth / 2.0 ) );
+
+ // Draw line caps
+ drawStrokedSemiCircle( VECTOR2D( 0.0, 0.0 ), aWidth / 2, M_PI / 2 );
+ drawStrokedSemiCircle( VECTOR2D( lineLength, 0.0 ), aWidth / 2, -M_PI / 2 );
+
+ Restore();
+ }
+}
+
+
+void OPENGL_GAL::DrawCircle( const VECTOR2D& aCenterPoint, double aRadius )
+{
+ if( isFillEnabled )
+ {
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+
+ /* Draw a triangle that contains the circle, then shade it leaving only the circle.
+ * Parameters given to setShader are indices of the triangle's vertices
+ * (if you want to understand more, check the vertex shader source [shader.vert]).
+ * Shader uses this coordinates to determine if fragments are inside the circle or not.
+ * v2
+ * /\
+ * //\\
+ * v0 /_\/_\ v1
+ */
+ currentManager->Shader( SHADER_FILLED_CIRCLE, 1.0 );
+ currentManager->Vertex( aCenterPoint.x - aRadius * sqrt( 3.0f ), // v0
+ aCenterPoint.y - aRadius, layerDepth );
+
+ currentManager->Shader( SHADER_FILLED_CIRCLE, 2.0 );
+ currentManager->Vertex( aCenterPoint.x + aRadius * sqrt( 3.0f ), // v1
+ aCenterPoint.y - aRadius, layerDepth );
+
+ currentManager->Shader( SHADER_FILLED_CIRCLE, 3.0 );
+ currentManager->Vertex( aCenterPoint.x, aCenterPoint.y + aRadius * 2.0f, // v2
+ layerDepth );
+ }
+
+ if( isStrokeEnabled )
+ {
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ /* Draw a triangle that contains the circle, then shade it leaving only the circle.
+ * Parameters given to setShader are indices of the triangle's vertices
+ * (if you want to understand more, check the vertex shader source [shader.vert]).
+ * and the line width. Shader uses this coordinates to determine if fragments are
+ * inside the circle or not.
+ * v2
+ * /\
+ * //\\
+ * v0 /_\/_\ v1
+ */
+ double outerRadius = aRadius + ( lineWidth / 2 );
+ currentManager->Shader( SHADER_STROKED_CIRCLE, 1.0, aRadius, lineWidth );
+ currentManager->Vertex( aCenterPoint.x - outerRadius * sqrt( 3.0f ), // v0
+ aCenterPoint.y - outerRadius, layerDepth );
+
+ currentManager->Shader( SHADER_STROKED_CIRCLE, 2.0, aRadius, lineWidth );
+ currentManager->Vertex( aCenterPoint.x + outerRadius * sqrt( 3.0f ), // v1
+ aCenterPoint.y - outerRadius, layerDepth );
+
+ currentManager->Shader( SHADER_STROKED_CIRCLE, 3.0, aRadius, lineWidth );
+ currentManager->Vertex( aCenterPoint.x, aCenterPoint.y + outerRadius * 2.0f, // v2
+ layerDepth );
+ }
+}
+
+
+void OPENGL_GAL::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double aStartAngle,
+ double aEndAngle )
+{
+ if( aRadius <= 0 )
+ return;
+
+ // Swap the angles, if start angle is greater than end angle
+ SWAP( aStartAngle, >, aEndAngle );
+
+ Save();
+ currentManager->Translate( aCenterPoint.x, aCenterPoint.y, 0.0 );
+
+ if( isStrokeEnabled )
+ {
+ const double alphaIncrement = 2.0 * M_PI / CIRCLE_POINTS;
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ VECTOR2D p( cos( aStartAngle ) * aRadius, sin( aStartAngle ) * aRadius );
+ double alpha;
+
+ for( alpha = aStartAngle + alphaIncrement; alpha <= aEndAngle; alpha += alphaIncrement )
+ {
+ VECTOR2D p_next( cos( alpha ) * aRadius, sin( alpha ) * aRadius );
+ DrawLine( p, p_next );
+
+ p = p_next;
+ }
+
+ // Draw the last missing part
+ if( alpha != aEndAngle )
+ {
+ VECTOR2D p_last( cos( aEndAngle ) * aRadius, sin( aEndAngle ) * aRadius );
+ DrawLine( p, p_last );
+ }
+ }
+
+ if( isFillEnabled )
+ {
+ const double alphaIncrement = 2 * M_PI / CIRCLE_POINTS;
+ double alpha;
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+ currentManager->Shader( SHADER_NONE );
+
+ // Triangle fan
+ for( alpha = aStartAngle; ( alpha + alphaIncrement ) < aEndAngle; )
+ {
+ currentManager->Vertex( 0.0, 0.0, 0.0 );
+ currentManager->Vertex( cos( alpha ) * aRadius, sin( alpha ) * aRadius, 0.0 );
+ alpha += alphaIncrement;
+ currentManager->Vertex( cos( alpha ) * aRadius, sin( alpha ) * aRadius, 0.0 );
+ }
+
+ // The last missing triangle
+ const VECTOR2D endPoint( cos( aEndAngle ) * aRadius, sin( aEndAngle ) * aRadius );
+ currentManager->Vertex( 0.0, 0.0, 0.0 );
+ currentManager->Vertex( cos( alpha ) * aRadius, sin( alpha ) * aRadius, 0.0 );
+ currentManager->Vertex( endPoint.x, endPoint.y, 0.0 );
+ }
+
+ Restore();
+}
+
+
+void OPENGL_GAL::DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ // Compute the diagonal points of the rectangle
+ VECTOR2D diagonalPointA( aEndPoint.x, aStartPoint.y );
+ VECTOR2D diagonalPointB( aStartPoint.x, aEndPoint.y );
+
+ // Stroke the outline
+ if( isStrokeEnabled )
+ {
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ std::deque<VECTOR2D> pointList;
+ pointList.push_back( aStartPoint );
+ pointList.push_back( diagonalPointA );
+ pointList.push_back( aEndPoint );
+ pointList.push_back( diagonalPointB );
+ pointList.push_back( aStartPoint );
+ DrawPolyline( pointList );
+ }
+
+ // Fill the rectangle
+ if( isFillEnabled )
+ {
+ currentManager->Shader( SHADER_NONE );
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+
+ currentManager->Vertex( aStartPoint.x, aStartPoint.y, layerDepth );
+ currentManager->Vertex( diagonalPointA.x, diagonalPointA.y, layerDepth );
+ currentManager->Vertex( aEndPoint.x, aEndPoint.y, layerDepth );
+
+ currentManager->Vertex( aStartPoint.x, aStartPoint.y, layerDepth );
+ currentManager->Vertex( aEndPoint.x, aEndPoint.y, layerDepth );
+ currentManager->Vertex( diagonalPointB.x, diagonalPointB.y, layerDepth );
+ }
+}
+
+
+void OPENGL_GAL::DrawPolyline( const std::deque<VECTOR2D>& aPointList )
+{
+ if( aPointList.size() < 2 )
+ return;
+
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ std::deque<VECTOR2D>::const_iterator it = aPointList.begin();
+
+ // Start from the second point
+ for( ++it; it != aPointList.end(); ++it )
+ {
+ const VECTOR2D startEndVector = ( *it - *( it - 1 ) );
+ double lineAngle = startEndVector.Angle();
+
+ drawLineQuad( *( it - 1 ), *it );
+
+ // There is no need to draw line caps on both ends of polyline's segments
+ drawFilledSemiCircle( *( it - 1 ), lineWidth / 2, lineAngle + M_PI / 2 );
+ }
+
+ // ..and now - draw the ending cap
+ const VECTOR2D startEndVector = ( *( it - 1 ) - *( it - 2 ) );
+ double lineAngle = startEndVector.Angle();
+ drawFilledSemiCircle( *( it - 1 ), lineWidth / 2, lineAngle - M_PI / 2 );
+}
+
+
+void OPENGL_GAL::DrawPolyline( const VECTOR2D aPointList[], int aListSize )
+{
+ if( aListSize < 2 )
+ return;
+
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+
+ // Start from the second point
+ for( int i = 1; i < aListSize; ++i )
+ {
+ const VECTOR2D startEndVector = ( aPointList[i] - aPointList[i - 1] );
+ double lineAngle = startEndVector.Angle();
+
+ drawLineQuad( aPointList[i - 1], aPointList[i] );
+
+ // There is no need to draw line caps on both ends of polyline's segments
+ drawFilledSemiCircle( aPointList[i - 1], lineWidth / 2, lineAngle + M_PI / 2 );
+ }
+
+ // ..and now - draw the ending cap
+ const VECTOR2D startEndVector = ( aPointList[aListSize - 1] - aPointList[aListSize - 2] );
+ double lineAngle = startEndVector.Angle();
+ drawFilledSemiCircle( aPointList[aListSize - 1], lineWidth / 2, lineAngle - M_PI / 2 );
+}
+
+
+void OPENGL_GAL::DrawPolygon( const std::deque<VECTOR2D>& aPointList )
+{
+ currentManager->Shader( SHADER_NONE );
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+
+ // Any non convex polygon needs to be tesselated
+ // for this purpose the GLU standard functions are used
+ TessParams params = { currentManager, tessIntersects };
+ gluTessBeginPolygon( tesselator, &params );
+ gluTessBeginContour( tesselator );
+
+ boost::shared_array<GLdouble> points( new GLdouble[3 * aPointList.size()] );
+ int v = 0;
+
+ for( std::deque<VECTOR2D>::const_iterator it = aPointList.begin(); it != aPointList.end(); ++it )
+ {
+ points[v] = it->x;
+ points[v + 1] = it->y;
+ points[v + 2] = layerDepth;
+ gluTessVertex( tesselator, &points[v], &points[v] );
+ v += 3;
+ }
+
+ gluTessEndContour( tesselator );
+ gluTessEndPolygon( tesselator );
+
+ // Free allocated intersecting points
+ tessIntersects.clear();
+
+ // vertexList destroyed here
+}
+
+
+void OPENGL_GAL::DrawPolygon( const VECTOR2D aPointList[], int aListSize )
+{
+ currentManager->Shader( SHADER_NONE );
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+
+ // Any non convex polygon needs to be tesselated
+ // for this purpose the GLU standard functions are used
+ TessParams params = { currentManager, tessIntersects };
+ gluTessBeginPolygon( tesselator, &params );
+ gluTessBeginContour( tesselator );
+
+ boost::shared_array<GLdouble> points( new GLdouble[3 * aListSize] );
+ int v = 0;
+ const VECTOR2D* ptr = aPointList;
+
+ for( int i = 0; i < aListSize; ++i )
+ {
+ points[v] = ptr->x;
+ points[v + 1] = ptr->y;
+ points[v + 2] = layerDepth;
+ gluTessVertex( tesselator, &points[v], &points[v] );
+ ++ptr;
+ v += 3;
+ }
+
+ gluTessEndContour( tesselator );
+ gluTessEndPolygon( tesselator );
+
+ // Free allocated intersecting points
+ tessIntersects.clear();
+
+ // vertexList destroyed here
+}
+
+
+void OPENGL_GAL::DrawCurve( const VECTOR2D& aStartPoint, const VECTOR2D& aControlPointA,
+ const VECTOR2D& aControlPointB, const VECTOR2D& aEndPoint )
+{
+ // FIXME The drawing quality needs to be improved
+ // FIXME Perhaps choose a quad/triangle strip instead?
+ // FIXME Brute force method, use a better (recursive?) algorithm
+
+ std::deque<VECTOR2D> pointList;
+
+ double t = 0.0;
+ double dt = 1.0 / (double) CURVE_POINTS;
+
+ for( int i = 0; i <= CURVE_POINTS; i++ )
+ {
+ double omt = 1.0 - t;
+ double omt2 = omt * omt;
+ double omt3 = omt * omt2;
+ double t2 = t * t;
+ double t3 = t * t2;
+
+ VECTOR2D vertex = omt3 * aStartPoint + 3.0 * t * omt2 * aControlPointA
+ + 3.0 * t2 * omt * aControlPointB + t3 * aEndPoint;
+
+ pointList.push_back( vertex );
+
+ t += dt;
+ }
+
+ DrawPolyline( pointList );
+}
+
+
+void OPENGL_GAL::ResizeScreen( int aWidth, int aHeight )
+{
+ screenSize = VECTOR2I( aWidth, aHeight );
+
+#ifdef RETINA_OPENGL_PATCH
+ const float scaleFactor = GetBackingScaleFactor();
+#else
+ const float scaleFactor = 1.0f;
+#endif
+
+ // Resize framebuffers
+ compositor.Resize( aWidth * scaleFactor, aHeight * scaleFactor );
+ isFramebufferInitialized = false;
+
+ wxGLCanvas::SetSize( aWidth, aHeight );
+}
+
+
+bool OPENGL_GAL::Show( bool aShow )
+{
+ bool s = wxGLCanvas::Show( aShow );
+
+ if( aShow )
+ wxGLCanvas::Raise();
+
+ return s;
+}
+
+
+void OPENGL_GAL::Flush()
+{
+ glFlush();
+}
+
+
+void OPENGL_GAL::ClearScreen( const COLOR4D& aColor )
+{
+ // Clear screen
+ glClearColor( aColor.r, aColor.g, aColor.b, aColor.a );
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+}
+
+
+void OPENGL_GAL::Transform( const MATRIX3x3D& aTransformation )
+{
+ GLdouble matrixData[16] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
+
+ matrixData[0] = aTransformation.m_data[0][0];
+ matrixData[1] = aTransformation.m_data[1][0];
+ matrixData[2] = aTransformation.m_data[2][0];
+ matrixData[4] = aTransformation.m_data[0][1];
+ matrixData[5] = aTransformation.m_data[1][1];
+ matrixData[6] = aTransformation.m_data[2][1];
+ matrixData[12] = aTransformation.m_data[0][2];
+ matrixData[13] = aTransformation.m_data[1][2];
+ matrixData[14] = aTransformation.m_data[2][2];
+
+ glMultMatrixd( matrixData );
+}
+
+
+void OPENGL_GAL::Rotate( double aAngle )
+{
+ currentManager->Rotate( aAngle, 0.0f, 0.0f, 1.0f );
+}
+
+
+void OPENGL_GAL::Translate( const VECTOR2D& aVector )
+{
+ currentManager->Translate( aVector.x, aVector.y, 0.0f );
+}
+
+
+void OPENGL_GAL::Scale( const VECTOR2D& aScale )
+{
+ currentManager->Scale( aScale.x, aScale.y, 0.0f );
+}
+
+
+void OPENGL_GAL::Save()
+{
+ currentManager->PushMatrix();
+}
+
+
+void OPENGL_GAL::Restore()
+{
+ currentManager->PopMatrix();
+}
+
+
+int OPENGL_GAL::BeginGroup()
+{
+ isGrouping = true;
+
+ boost::shared_ptr<VERTEX_ITEM> newItem( new VERTEX_ITEM( cachedManager ) );
+ int groupNumber = getNewGroupNumber();
+ groups.insert( std::make_pair( groupNumber, newItem ) );
+
+ return groupNumber;
+}
+
+
+void OPENGL_GAL::EndGroup()
+{
+ cachedManager.FinishItem();
+ isGrouping = false;
+}
+
+
+void OPENGL_GAL::DrawGroup( int aGroupNumber )
+{
+ cachedManager.DrawItem( *groups[aGroupNumber] );
+}
+
+
+void OPENGL_GAL::ChangeGroupColor( int aGroupNumber, const COLOR4D& aNewColor )
+{
+ cachedManager.ChangeItemColor( *groups[aGroupNumber], aNewColor );
+}
+
+
+void OPENGL_GAL::ChangeGroupDepth( int aGroupNumber, int aDepth )
+{
+ cachedManager.ChangeItemDepth( *groups[aGroupNumber], aDepth );
+}
+
+
+void OPENGL_GAL::DeleteGroup( int aGroupNumber )
+{
+ // Frees memory in the container as well
+ groups.erase( aGroupNumber );
+}
+
+
+void OPENGL_GAL::ClearCache()
+{
+ groups.clear();
+ cachedManager.Clear();
+}
+
+
+void OPENGL_GAL::SaveScreen()
+{
+ wxASSERT_MSG( false, wxT( "Not implemented yet" ) );
+}
+
+
+void OPENGL_GAL::RestoreScreen()
+{
+ wxASSERT_MSG( false, wxT( "Not implemented yet" ) );
+}
+
+
+void OPENGL_GAL::SetTarget( RENDER_TARGET aTarget )
+{
+ switch( aTarget )
+ {
+ default:
+ case TARGET_CACHED:
+ currentManager = &cachedManager;
+ break;
+
+ case TARGET_NONCACHED:
+ currentManager = &nonCachedManager;
+ break;
+
+ case TARGET_OVERLAY:
+ currentManager = &overlayManager;
+ break;
+ }
+
+ currentTarget = aTarget;
+}
+
+
+RENDER_TARGET OPENGL_GAL::GetTarget() const
+{
+ return currentTarget;
+}
+
+
+void OPENGL_GAL::ClearTarget( RENDER_TARGET aTarget )
+{
+ // Save the current state
+ unsigned int oldTarget = compositor.GetBuffer();
+
+ switch( aTarget )
+ {
+ // Cached and noncached items are rendered to the same buffer
+ default:
+ case TARGET_CACHED:
+ case TARGET_NONCACHED:
+ compositor.SetBuffer( mainBuffer );
+ break;
+
+ case TARGET_OVERLAY:
+ compositor.SetBuffer( overlayBuffer );
+ break;
+ }
+
+ compositor.ClearBuffer();
+
+ // Restore the previous state
+ compositor.SetBuffer( oldTarget );
+}
+
+
+void OPENGL_GAL::DrawCursor( const VECTOR2D& aCursorPosition )
+{
+ // Now we should only store the position of the mouse cursor
+ // The real drawing routines are in blitCursor()
+ VECTOR2D screenCursor = worldScreenMatrix * aCursorPosition;
+
+ cursorPosition = screenWorldMatrix * VECTOR2D( screenCursor.x, screenSize.y - screenCursor.y );
+}
+
+
+void OPENGL_GAL::drawGridLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ compositor.SetBuffer( mainBuffer );
+
+ // We do not need a very precise comparison here (the lineWidth is set by GAL::DrawGrid())
+ if( fabs( lineWidth - 2.0 * gridLineWidth / worldScale ) < 0.1 )
+ glLineWidth( 1.0 );
+ else
+ glLineWidth( 2.0 );
+
+ glColor4d( gridColor.r, gridColor.g, gridColor.b, gridColor.a );
+
+ glBegin( GL_LINES );
+ glVertex3d( aStartPoint.x, aStartPoint.y, layerDepth );
+ glVertex3d( aEndPoint.x, aEndPoint.y, layerDepth );
+ glEnd();
+
+ // Restore the default color, so textures will be drawn properly
+ glColor4d( 1.0, 1.0, 1.0, 1.0 );
+}
+
+
+void OPENGL_GAL::drawLineQuad( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
+{
+ /* Helper drawing: ____--- v3 ^
+ * ____---- ... \ \
+ * ____---- ... \ end \
+ * v1 ____---- ... ____---- \ width
+ * ---- ...___---- \ \
+ * \ ___...-- \ v
+ * \ ____----... ____---- v2
+ * ---- ... ____----
+ * start \ ... ____----
+ * \... ____----
+ * ----
+ * v0
+ * dots mark triangles' hypotenuses
+ */
+
+ VECTOR2D startEndVector = aEndPoint - aStartPoint;
+ double lineLength = startEndVector.EuclideanNorm();
+
+ if( lineLength <= 0.0 )
+ return;
+
+ double scale = 0.5 * lineWidth / lineLength;
+
+ // The perpendicular vector also needs transformations
+ glm::vec4 vector = currentManager->GetTransformation() *
+ glm::vec4( -startEndVector.y * scale, startEndVector.x * scale, 0.0, 0.0 );
+
+ // Line width is maintained by the vertex shader
+ currentManager->Shader( SHADER_LINE, vector.x, vector.y, lineWidth );
+ currentManager->Vertex( aStartPoint.x, aStartPoint.y, layerDepth ); // v0
+
+ currentManager->Shader( SHADER_LINE, -vector.x, -vector.y, lineWidth );
+ currentManager->Vertex( aStartPoint.x, aStartPoint.y, layerDepth ); // v1
+
+ currentManager->Shader( SHADER_LINE, -vector.x, -vector.y, lineWidth );
+ currentManager->Vertex( aEndPoint.x, aEndPoint.y, layerDepth ); // v3
+
+ currentManager->Shader( SHADER_LINE, vector.x, vector.y, lineWidth );
+ currentManager->Vertex( aStartPoint.x, aStartPoint.y, layerDepth ); // v0
+
+ currentManager->Shader( SHADER_LINE, -vector.x, -vector.y, lineWidth );
+ currentManager->Vertex( aEndPoint.x, aEndPoint.y, layerDepth ); // v3
+
+ currentManager->Shader( SHADER_LINE, vector.x, vector.y, lineWidth );
+ currentManager->Vertex( aEndPoint.x, aEndPoint.y, layerDepth ); // v2
+}
+
+
+void OPENGL_GAL::drawSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle )
+{
+ if( isFillEnabled )
+ {
+ currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
+ drawFilledSemiCircle( aCenterPoint, aRadius, aAngle );
+ }
+
+ if( isStrokeEnabled )
+ {
+ currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
+ drawStrokedSemiCircle( aCenterPoint, aRadius, aAngle );
+ }
+}
+
+
+void OPENGL_GAL::drawFilledSemiCircle( const VECTOR2D& aCenterPoint, double aRadius,
+ double aAngle )
+{
+ Save();
+ currentManager->Translate( aCenterPoint.x, aCenterPoint.y, 0.0f );
+ currentManager->Rotate( aAngle, 0.0f, 0.0f, 1.0f );
+
+ /* Draw a triangle that contains the semicircle, then shade it to leave only
+ * the semicircle. Parameters given to setShader are indices of the triangle's vertices
+ * (if you want to understand more, check the vertex shader source [shader.vert]).
+ * Shader uses these coordinates to determine if fragments are inside the semicircle or not.
+ * v2
+ * /\
+ * /__\
+ * v0 //__\\ v1
+ */
+ currentManager->Shader( SHADER_FILLED_CIRCLE, 4.0f );
+ currentManager->Vertex( -aRadius * 3.0f / sqrt( 3.0f ), 0.0f, layerDepth ); // v0
+
+ currentManager->Shader( SHADER_FILLED_CIRCLE, 5.0f );
+ currentManager->Vertex( aRadius * 3.0f / sqrt( 3.0f ), 0.0f, layerDepth ); // v1
+
+ currentManager->Shader( SHADER_FILLED_CIRCLE, 6.0f );
+ currentManager->Vertex( 0.0f, aRadius * 2.0f, layerDepth ); // v2
+
+ Restore();
+}
+
+
+void OPENGL_GAL::drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRadius,
+ double aAngle )
+{
+ double outerRadius = aRadius + ( lineWidth / 2 );
+
+ Save();
+ currentManager->Translate( aCenterPoint.x, aCenterPoint.y, 0.0f );
+ currentManager->Rotate( aAngle, 0.0f, 0.0f, 1.0f );
+
+ /* Draw a triangle that contains the semicircle, then shade it to leave only
+ * the semicircle. Parameters given to setShader are indices of the triangle's vertices
+ * (if you want to understand more, check the vertex shader source [shader.vert]), the
+ * radius and the line width. Shader uses these coordinates to determine if fragments are
+ * inside the semicircle or not.
+ * v2
+ * /\
+ * /__\
+ * v0 //__\\ v1
+ */
+ currentManager->Shader( SHADER_STROKED_CIRCLE, 4.0f, aRadius, lineWidth );
+ currentManager->Vertex( -outerRadius * 3.0f / sqrt( 3.0f ), 0.0f, layerDepth ); // v0
+
+ currentManager->Shader( SHADER_STROKED_CIRCLE, 5.0f, aRadius, lineWidth );
+ currentManager->Vertex( outerRadius * 3.0f / sqrt( 3.0f ), 0.0f, layerDepth ); // v1
+
+ currentManager->Shader( SHADER_STROKED_CIRCLE, 6.0f, aRadius, lineWidth );
+ currentManager->Vertex( 0.0f, outerRadius * 2.0f, layerDepth ); // v2
+
+ Restore();
+}
+
+
+void OPENGL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
+{
+ PostPaint();
+}
+
+
+void OPENGL_GAL::skipMouseEvent( wxMouseEvent& aEvent )
+{
+ // Post the mouse event to the event listener registered in constructor, if any
+ if( mouseListener )
+ wxPostEvent( mouseListener, aEvent );
+}
+
+
+void OPENGL_GAL::blitCursor()
+{
+ if( !isCursorEnabled )
+ return;
+
+ compositor.SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
+
+ VECTOR2D cursorBegin = cursorPosition - cursorSize / ( 2 * worldScale );
+ VECTOR2D cursorEnd = cursorPosition + cursorSize / ( 2 * worldScale );
+ VECTOR2D cursorCenter = ( cursorBegin + cursorEnd ) / 2;
+
+ glDisable( GL_TEXTURE_2D );
+ glLineWidth( 1.0 );
+ glColor4d( cursorColor.r, cursorColor.g, cursorColor.b, cursorColor.a );
+
+ glBegin( GL_LINES );
+ glVertex2d( cursorCenter.x, cursorBegin.y );
+ glVertex2d( cursorCenter.x, cursorEnd.y );
+
+ glVertex2d( cursorBegin.x, cursorCenter.y );
+ glVertex2d( cursorEnd.x, cursorCenter.y );
+ glEnd();
+}
+
+
+unsigned int OPENGL_GAL::getNewGroupNumber()
+{
+ wxASSERT_MSG( groups.size() < std::numeric_limits<unsigned int>::max(),
+ wxT( "There are no free slots to store a group" ) );
+
+ while( groups.find( groupCounter ) != groups.end() )
+ {
+ groupCounter++;
+ }
+
+ return groupCounter++;
+}
+
+
+bool OPENGL_GAL::runTest()
+{
+ wxDialog dlgtest( GetParent(), -1, wxT( "opengl test" ), wxPoint( 50, 50 ),
+ wxDLG_UNIT( GetParent(), wxSize( 50, 50 ) ) );
+ OPENGL_TEST* test = new OPENGL_TEST( &dlgtest, this );
+
+ dlgtest.Raise(); // on Linux, on some windows managers (Unity for instance) this is needed to actually show the dialog
+ dlgtest.ShowModal();
+ bool result = test->IsOk();
+
+ if( !result )
+ throw std::runtime_error( test->GetError() );
+
+ return result;
+}
+
+
+OPENGL_GAL::OPENGL_TEST::OPENGL_TEST( wxDialog* aParent, OPENGL_GAL* aGal ) :
+ wxGLCanvas( aParent, wxID_ANY, glAttributes, wxDefaultPosition,
+ wxDefaultSize, 0, wxT( "GLCanvas" ) ),
+ m_parent( aParent ), m_gal( aGal ), m_tested( false ), m_result( false )
+{
+ m_timeoutTimer.SetOwner( this );
+ Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::OPENGL_TEST::Render ) );
+ Connect( wxEVT_TIMER, wxTimerEventHandler( OPENGL_GAL::OPENGL_TEST::OnTimeout ) );
+ m_parent->Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::OPENGL_TEST::OnDialogPaint ), NULL, this );
+}
+
+
+void OPENGL_GAL::OPENGL_TEST::Render( wxPaintEvent& WXUNUSED( aEvent ) )
+{
+ if( !m_tested )
+ {
+ if( !IsShownOnScreen() )
+ return;
+
+ m_timeoutTimer.Stop();
+ m_result = true; // Assume everything is fine, until proven otherwise
+
+ // One test is enough - close the testing dialog when the test is finished
+ Disconnect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::OPENGL_TEST::Render ) );
+ CallAfter( boost::bind( &wxDialog::EndModal, m_parent, wxID_NONE ) );
+
+ SetCurrent( *OPENGL_GAL::glContext );
+ GLenum err = glewInit();
+
+ if( GLEW_OK != err )
+ {
+ error( (const char*) glewGetErrorString( err ) );
+ return;
+ }
+ else
+ {
+ wxLogDebug( wxString( wxT( "Status: Using GLEW " ) ) +
+ FROM_UTF8( (char*) glewGetString( GLEW_VERSION ) ) );
+ }
+
+ // Check the OpenGL version (minimum 2.1 is required)
+ if( GLEW_VERSION_2_1 )
+ {
+ wxLogInfo( wxT( "OpenGL 2.1 supported." ) );
+ }
+ else
+ {
+ error( "OpenGL 2.1 or higher is required!" );
+ return;
+ }
+
+ // Framebuffers have to be supported
+ if( !GLEW_EXT_framebuffer_object )
+ {
+ error( "Framebuffer objects are not supported!" );
+ return;
+ }
+
+ // Vertex buffer has to be supported
+ if( !GLEW_ARB_vertex_buffer_object )
+ {
+ error( "Vertex buffer objects are not supported!" );
+ return;
+ }
+
+ // Prepare shaders
+ if( !m_gal->shader.LoadBuiltinShader( 0, SHADER_TYPE_VERTEX ) )
+ {
+ error( "Cannot compile vertex shader!" );
+ return;
+ }
+
+ if( !m_gal->shader.LoadBuiltinShader( 1, SHADER_TYPE_FRAGMENT ) )
+ {
+ error( "Cannot compile fragment shader!" );
+ return;
+ }
+
+ if( !m_gal->shader.Link() )
+ {
+ error( "Cannot link the shaders!" );
+ return;
+ }
+
+ m_tested = true;
+ }
+}
+
+
+void OPENGL_GAL::OPENGL_TEST::OnTimeout( wxTimerEvent& aEvent )
+{
+ error( "Could not create OpenGL canvas" );
+ m_parent->EndModal( wxID_NONE );
+}
+
+
+void OPENGL_GAL::OPENGL_TEST::OnDialogPaint( wxPaintEvent& aEvent )
+{
+ // GL canvas may never appear on the screen (e.g. due to missing GL extensions), and the test
+ // will not be run. Therefore give at most a second to perform the test, otherwise we conclude
+ // it has failed.
+ // Also, wxWidgets OnShow event is triggered before a window is shown, therefore here we use
+ // OnPaint event, which is executed when a window is actually visible.
+ m_timeoutTimer.StartOnce( 1000 );
+}
+
+
+void OPENGL_GAL::OPENGL_TEST::error( const std::string& aError )
+{
+ m_timeoutTimer.Stop();
+ m_result = false;
+ m_tested = true;
+ m_error = aError;
+}
+
+// ------------------------------------- // Callback functions for the tesselator // ------------------------------------- // Compare Redbook Chapter 11
+void CALLBACK VertexCallback( GLvoid* aVertexPtr, void* aData )
+{
+ GLdouble* vertex = static_cast<GLdouble*>( aVertexPtr );
+ OPENGL_GAL::TessParams* param = static_cast<OPENGL_GAL::TessParams*>( aData );
+ VERTEX_MANAGER* vboManager = param->vboManager;
+
+ if( vboManager )
+ vboManager->Vertex( vertex[0], vertex[1], vertex[2] );
+}
+
+
+void CALLBACK CombineCallback( GLdouble coords[3],
+ GLdouble* vertex_data[4],
+ GLfloat weight[4], GLdouble** dataOut, void* aData )
+{
+ GLdouble* vertex = new GLdouble[3];
+ OPENGL_GAL::TessParams* param = static_cast<OPENGL_GAL::TessParams*>( aData );
+
+ // Save the pointer so we can delete it later
+ param->intersectPoints.push_back( boost::shared_array<GLdouble>( vertex ) );
+
+ memcpy( vertex, coords, 3 * sizeof(GLdouble) );
+
+ *dataOut = vertex;
+}
+
+
+void CALLBACK EdgeCallback( GLboolean aEdgeFlag )
+{
+ // This callback is needed to force GLU tesselator to use triangles only
+}
+
+
+void CALLBACK ErrorCallback( GLenum aErrorCode )
+{
+ //throw std::runtime_error( std::string( "Tessellation error: " ) +
+ //std::string( (const char*) gluErrorString( aErrorCode ) );
+}
+
+
+static void InitTesselatorCallbacks( GLUtesselator* aTesselator )
+{
+ gluTessCallback( aTesselator, GLU_TESS_VERTEX_DATA, ( void (CALLBACK*)() )VertexCallback );
+ gluTessCallback( aTesselator, GLU_TESS_COMBINE_DATA, ( void (CALLBACK*)() )CombineCallback );
+ gluTessCallback( aTesselator, GLU_TESS_EDGE_FLAG, ( void (CALLBACK*)() )EdgeCallback );
+ gluTessCallback( aTesselator, GLU_TESS_ERROR, ( void (CALLBACK*)() )ErrorCallback );
+}
diff --git a/common/gal/opengl/shader.cpp b/common/gal/opengl/shader.cpp
new file mode 100644
index 0000000..228d53d
--- /dev/null
+++ b/common/gal/opengl/shader.cpp
@@ -0,0 +1,272 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Graphics Abstraction Layer (GAL) for OpenGL
+ *
+ * Shader class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <iostream>
+#include <fstream>
+#include <stdexcept>
+
+#include <cstring>
+#include <cassert>
+
+#include <gal/opengl/shader.h>
+#include "shader_src.h"
+
+using namespace KIGFX;
+
+SHADER::SHADER() :
+ isProgramCreated( false ),
+ isShaderLinked( false ),
+ active( false ),
+ maximumVertices( 4 ),
+ geomInputType( GL_LINES ),
+ geomOutputType( GL_LINES )
+
+{
+ // Do not have uninitialized members:
+ programNumber = 0;
+}
+
+
+SHADER::~SHADER()
+{
+ if( isProgramCreated )
+ {
+ // Delete the shaders and the program
+ for( std::deque<GLuint>::iterator it = shaderNumbers.begin(); it != shaderNumbers.end();
+ ++it )
+ {
+ glDeleteShader( *it );
+ }
+
+ glDeleteProgram( programNumber );
+ }
+}
+
+
+bool SHADER::LoadBuiltinShader( unsigned int aShaderNumber, SHADER_TYPE aShaderType )
+{
+ if( aShaderNumber >= shaders_number )
+ return false;
+
+ return addSource( std::string( shaders_src[aShaderNumber] ), aShaderType );
+}
+
+
+bool SHADER::LoadShaderFromFile( const std::string& aShaderSourceName, SHADER_TYPE aShaderType )
+{
+ // Load shader sources
+ const std::string shaderSource = readSource( aShaderSourceName );
+
+ return addSource( shaderSource, aShaderType );
+}
+
+
+void SHADER::ConfigureGeometryShader( GLuint maxVertices, GLuint geometryInputType,
+ GLuint geometryOutputType )
+{
+ maximumVertices = maxVertices;
+ geomInputType = geometryInputType;
+ geomOutputType = geometryOutputType;
+}
+
+
+bool SHADER::Link()
+{
+ // Shader linking
+ glLinkProgram( programNumber );
+ programInfo( programNumber );
+
+ // Check the Link state
+ glGetObjectParameterivARB( programNumber, GL_OBJECT_LINK_STATUS_ARB,
+ (GLint*) &isShaderLinked );
+
+#ifdef DEBUG
+ if( !isShaderLinked )
+ {
+ int maxLength;
+ glGetProgramiv( programNumber, GL_INFO_LOG_LENGTH, &maxLength );
+ maxLength = maxLength + 1;
+ char* linkInfoLog = new char[maxLength];
+ glGetProgramInfoLog( programNumber, maxLength, &maxLength, linkInfoLog );
+ std::cerr << "Shader linking error:" << std::endl;
+ std::cerr << linkInfoLog;
+ delete[] linkInfoLog;
+ }
+#endif /* DEBUG */
+
+ return isShaderLinked;
+}
+
+
+int SHADER::AddParameter( const std::string& aParameterName )
+{
+ GLint location = glGetUniformLocation( programNumber, aParameterName.c_str() );
+
+ if( location != -1 )
+ parameterLocation.push_back( location );
+
+ return location;
+}
+
+
+void SHADER::SetParameter( int parameterNumber, float value ) const
+{
+ glUniform1f( parameterLocation[parameterNumber], value );
+}
+
+
+void SHADER::SetParameter( int parameterNumber, int value ) const
+{
+ glUniform1i( parameterLocation[parameterNumber], value );
+}
+
+
+int SHADER::GetAttribute( std::string aAttributeName ) const
+{
+ return glGetAttribLocation( programNumber, aAttributeName.c_str() );
+}
+
+
+void SHADER::programInfo( GLuint aProgram )
+{
+ GLint glInfoLogLength = 0;
+ GLint writtenChars = 0;
+
+ // Get the length of the info string
+ glGetProgramiv( aProgram, GL_INFO_LOG_LENGTH, &glInfoLogLength );
+
+ // Print the information
+ if( glInfoLogLength > 2 )
+ {
+ GLchar* glInfoLog = new GLchar[glInfoLogLength];
+ glGetProgramInfoLog( aProgram, glInfoLogLength, &writtenChars, glInfoLog );
+
+ std::cerr << glInfoLog << std::endl;
+
+ delete[] glInfoLog;
+ }
+}
+
+
+void SHADER::shaderInfo( GLuint aShader )
+{
+ GLint glInfoLogLength = 0;
+ GLint writtenChars = 0;
+
+ // Get the length of the info string
+ glGetShaderiv( aShader, GL_INFO_LOG_LENGTH, &glInfoLogLength );
+
+ // Print the information
+ if( glInfoLogLength > 2 )
+ {
+ GLchar* glInfoLog = new GLchar[glInfoLogLength];
+ glGetShaderInfoLog( aShader, glInfoLogLength, &writtenChars, glInfoLog );
+
+ std::cerr << glInfoLog << std::endl;
+
+ delete[] glInfoLog;
+ }
+}
+
+
+std::string SHADER::readSource( std::string aShaderSourceName )
+{
+ // Open the shader source for reading
+ std::ifstream inputFile( aShaderSourceName.c_str(), std::ifstream::in );
+ std::string shaderSource;
+
+ if( !inputFile )
+ throw std::runtime_error( "Can't read the shader source: " + aShaderSourceName );
+
+ std::string shaderSourceLine;
+
+ // Read all lines from the text file
+ while( getline( inputFile, shaderSourceLine ) )
+ {
+ shaderSource += shaderSourceLine;
+ shaderSource += "\n";
+ }
+
+ return shaderSource;
+}
+
+
+bool SHADER::addSource( const std::string& aShaderSource, SHADER_TYPE aShaderType )
+{
+ assert( !isShaderLinked );
+
+ // Create the program
+ if( !isProgramCreated )
+ {
+ programNumber = glCreateProgram();
+ isProgramCreated = true;
+ }
+
+ // Create a shader
+ GLuint shaderNumber = glCreateShader( aShaderType );
+ shaderNumbers.push_back( shaderNumber );
+
+ // Get the program info
+ programInfo( programNumber );
+
+ // Copy to char array
+ char* source = new char[aShaderSource.size() + 1];
+ strncpy( source, aShaderSource.c_str(), aShaderSource.size() + 1 );
+ const char** source_ = (const char**) ( &source );
+
+ // Attach the source
+ glShaderSource( shaderNumber, 1, source_, NULL );
+ programInfo( programNumber );
+
+ // Delete the allocated char array
+ delete[] source;
+
+ // Compile and attach shader to the program
+ glCompileShader( shaderNumber );
+ GLint status;
+ glGetShaderiv( shaderNumber, GL_COMPILE_STATUS, &status );
+
+ if( status != GL_TRUE )
+ {
+ shaderInfo( shaderNumber );
+ throw std::runtime_error( "Shader compilation error" );
+ }
+
+ glAttachShader( programNumber, shaderNumber );
+ programInfo( programNumber );
+
+ // Special handling for the geometry shader
+ if( aShaderType == SHADER_TYPE_GEOMETRY )
+ {
+ glProgramParameteriEXT( programNumber, GL_GEOMETRY_VERTICES_OUT_EXT, maximumVertices );
+ glProgramParameteriEXT( programNumber, GL_GEOMETRY_INPUT_TYPE_EXT, geomInputType );
+ glProgramParameteriEXT( programNumber, GL_GEOMETRY_OUTPUT_TYPE_EXT, geomOutputType );
+ }
+
+ return true;
+}
diff --git a/common/gal/opengl/shader.frag b/common/gal/opengl/shader.frag
new file mode 100644
index 0000000..7d7d96c
--- /dev/null
+++ b/common/gal/opengl/shader.frag
@@ -0,0 +1,75 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Fragment shader
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#version 120
+
+// Shader types
+const float SHADER_LINE = 1.0;
+const float SHADER_FILLED_CIRCLE = 2.0;
+const float SHADER_STROKED_CIRCLE = 3.0;
+
+varying vec4 shaderParams;
+varying vec2 circleCoords;
+
+void filledCircle( vec2 aCoord )
+{
+ if( dot( aCoord, aCoord ) < 1.0 )
+ gl_FragColor = gl_Color;
+ else
+ discard;
+}
+
+
+void strokedCircle( vec2 aCoord, float aRadius, float aWidth )
+{
+ float outerRadius = aRadius + ( aWidth / 2 );
+ float innerRadius = aRadius - ( aWidth / 2 );
+ float relWidth = innerRadius / outerRadius;
+
+ if( ( dot( aCoord, aCoord ) < 1.0 ) &&
+ ( dot( aCoord, aCoord ) > relWidth * relWidth ) )
+ gl_FragColor = gl_Color;
+ else
+ discard;
+}
+
+
+void main()
+{
+ if( shaderParams[0] == SHADER_FILLED_CIRCLE )
+ {
+ filledCircle( circleCoords );
+ }
+ else if( shaderParams[0] == SHADER_STROKED_CIRCLE )
+ {
+ strokedCircle( circleCoords, shaderParams[2], shaderParams[3] );
+ }
+ else
+ {
+ // Simple pass-through
+ gl_FragColor = gl_Color;
+ }
+}
diff --git a/common/gal/opengl/shader.vert b/common/gal/opengl/shader.vert
new file mode 100644
index 0000000..24521a4
--- /dev/null
+++ b/common/gal/opengl/shader.vert
@@ -0,0 +1,95 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Vertex shader
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#version 120
+
+// Shader types
+const float SHADER_LINE = 1.0;
+const float SHADER_FILLED_CIRCLE = 2.0;
+const float SHADER_STROKED_CIRCLE = 3.0;
+
+// Minimum line width
+const float MIN_WIDTH = 1.0;
+
+attribute vec4 attrShaderParams;
+varying vec4 shaderParams;
+varying vec2 circleCoords;
+
+void main()
+{
+ // Pass attributes to the fragment shader
+ shaderParams = attrShaderParams;
+
+ if( shaderParams[0] == SHADER_LINE )
+ {
+ float lineWidth = shaderParams[3];
+ float worldScale = gl_ModelViewMatrix[0][0];
+
+ // Make lines appear to be at least 1 pixel wide
+ if( worldScale * lineWidth < MIN_WIDTH )
+ gl_Position = gl_ModelViewProjectionMatrix *
+ ( gl_Vertex + vec4( shaderParams.yz * MIN_WIDTH / ( worldScale * lineWidth ), 0.0, 0.0 ) );
+ else
+ gl_Position = gl_ModelViewProjectionMatrix *
+ ( gl_Vertex + vec4( shaderParams.yz, 0.0, 0.0 ) );
+ }
+ else if( ( shaderParams[0] == SHADER_STROKED_CIRCLE ) ||
+ ( shaderParams[0] == SHADER_FILLED_CIRCLE ) )
+ {
+ // Compute relative circle coordinates basing on indices
+ // Circle
+ if( shaderParams[1] == 1.0 )
+ circleCoords = vec2( -sqrt( 3.0 ), -1.0 );
+ else if( shaderParams[1] == 2.0 )
+ circleCoords = vec2( sqrt( 3.0 ), -1.0 );
+ else if( shaderParams[1] == 3.0 )
+ circleCoords = vec2( 0.0, 2.0 );
+
+ // Semicircle
+ else if( shaderParams[1] == 4.0 )
+ circleCoords = vec2( -3.0 / sqrt( 3.0 ), 0.0 );
+ else if( shaderParams[1] == 5.0 )
+ circleCoords = vec2( 3.0 / sqrt( 3.0 ), 0.0 );
+ else if( shaderParams[1] == 6.0 )
+ circleCoords = vec2( 0.0, 2.0 );
+
+ // Make the line appear to be at least 1 pixel wide
+ float lineWidth = shaderParams[3];
+ float worldScale = gl_ModelViewMatrix[0][0];
+
+ if( worldScale * lineWidth < MIN_WIDTH )
+ shaderParams[3] = shaderParams[3] / ( worldScale * lineWidth );
+
+ gl_Position = ftransform();
+ }
+ else
+ {
+ // Pass through the coordinates like in the fixed pipeline
+ gl_Position = ftransform();
+ }
+
+ gl_FrontColor = gl_Color;
+}
diff --git a/common/gal/opengl/vertex_container.cpp b/common/gal/opengl/vertex_container.cpp
new file mode 100644
index 0000000..fa41ecb
--- /dev/null
+++ b/common/gal/opengl/vertex_container.cpp
@@ -0,0 +1,60 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_container.cpp
+ * @brief Class to store vertices and handle transfers between system memory and GPU memory.
+ */
+
+#include <gal/opengl/vertex_container.h>
+#include <gal/opengl/cached_container.h>
+#include <gal/opengl/noncached_container.h>
+#include <gal/opengl/shader.h>
+#include <cstdlib>
+#include <cstring>
+
+using namespace KIGFX;
+
+VERTEX_CONTAINER* VERTEX_CONTAINER::MakeContainer( bool aCached )
+{
+ if( aCached )
+ return new CACHED_CONTAINER;
+ else
+ return new NONCACHED_CONTAINER;
+}
+
+
+VERTEX_CONTAINER::VERTEX_CONTAINER( unsigned int aSize ) :
+ m_freeSpace( aSize ), m_currentSize( aSize ), m_initialSize( aSize ),
+ m_failed( false ), m_dirty( true )
+{
+ m_vertices = static_cast<VERTEX*>( malloc( aSize * sizeof( VERTEX ) ) );
+ memset( m_vertices, 0x00, aSize * sizeof( VERTEX ) );
+}
+
+
+VERTEX_CONTAINER::~VERTEX_CONTAINER()
+{
+ free( m_vertices );
+}
diff --git a/common/gal/opengl/vertex_item.cpp b/common/gal/opengl/vertex_item.cpp
new file mode 100644
index 0000000..a6fd352
--- /dev/null
+++ b/common/gal/opengl/vertex_item.cpp
@@ -0,0 +1,53 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_item.cpp
+ * @brief Class to handle an item held in a container.
+ */
+
+#include <gal/opengl/vertex_item.h>
+#include <gal/opengl/vertex_manager.h>
+#include <cstring>
+
+using namespace KIGFX;
+
+VERTEX_ITEM::VERTEX_ITEM( const VERTEX_MANAGER& aManager ) :
+ m_manager( aManager ), m_offset( 0 ), m_size( 0 )
+{
+ // As the item is created, we are going to modify it, so call to SetItem() is needed
+ m_manager.SetItem( *this );
+}
+
+
+VERTEX_ITEM::~VERTEX_ITEM()
+{
+ m_manager.FreeItem( *this );
+}
+
+
+VERTEX* VERTEX_ITEM::GetVertices() const
+{
+ return m_manager.GetVertices( *this );
+}
diff --git a/common/gal/opengl/vertex_manager.cpp b/common/gal/opengl/vertex_manager.cpp
new file mode 100644
index 0000000..d055b52
--- /dev/null
+++ b/common/gal/opengl/vertex_manager.cpp
@@ -0,0 +1,234 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_manager.cpp
+ * @brief Class to control vertex container and GPU with possibility of emulating old-style OpenGL
+ * 1.0 state machine using modern OpenGL methods.
+ */
+
+#include <gal/opengl/vertex_manager.h>
+#include <gal/opengl/cached_container.h>
+#include <gal/opengl/noncached_container.h>
+#include <gal/opengl/gpu_manager.h>
+#include <gal/opengl/vertex_item.h>
+#include <confirm.h>
+
+using namespace KIGFX;
+
+VERTEX_MANAGER::VERTEX_MANAGER( bool aCached ) :
+ m_noTransform( true ), m_transform( 1.0f )
+{
+ m_container.reset( VERTEX_CONTAINER::MakeContainer( aCached ) );
+ m_gpu.reset( GPU_MANAGER::MakeManager( m_container.get() ) );
+
+ // There is no shader used by default
+ for( unsigned int i = 0; i < ShaderStride; ++i )
+ m_shader[i] = 0.0f;
+}
+
+
+void VERTEX_MANAGER::Vertex( GLfloat aX, GLfloat aY, GLfloat aZ ) const
+{
+ // flag to avoid hanging by calling DisplayError too many times:
+ static bool show_err = true;
+
+ // Obtain the pointer to the vertex in the currently used container
+ VERTEX* newVertex = m_container->Allocate( 1 );
+
+ if( newVertex == NULL )
+ {
+ if( show_err )
+ {
+ DisplayError( NULL, wxT( "VERTEX_MANAGER::Vertex: Vertex allocation error" ) );
+ show_err = false;
+ }
+
+ return;
+ }
+
+ putVertex( *newVertex, aX, aY, aZ );
+}
+
+
+void VERTEX_MANAGER::Vertices( const VERTEX aVertices[], unsigned int aSize ) const
+{
+ // flag to avoid hanging by calling DisplayError too many times:
+ static bool show_err = true;
+
+ // Obtain pointer to the vertex in currently used container
+ VERTEX* newVertex = m_container->Allocate( aSize );
+
+ if( newVertex == NULL )
+ {
+ if( show_err )
+ {
+ DisplayError( NULL, wxT( "VERTEX_MANAGER::Vertices: Vertex allocation error" ) );
+ show_err = false;
+ }
+
+ return;
+ }
+
+ // Put vertices in already allocated memory chunk
+ for( unsigned int i = 0; i < aSize; ++i )
+ {
+ putVertex( newVertex[i], aVertices[i].x, aVertices[i].y, aVertices[i].z );
+ }
+}
+
+
+void VERTEX_MANAGER::SetItem( VERTEX_ITEM& aItem ) const
+{
+ m_container->SetItem( &aItem );
+}
+
+
+void VERTEX_MANAGER::FinishItem() const
+{
+ m_container->FinishItem();
+}
+
+
+void VERTEX_MANAGER::FreeItem( VERTEX_ITEM& aItem ) const
+{
+ m_container->Delete( &aItem );
+}
+
+
+void VERTEX_MANAGER::ChangeItemColor( const VERTEX_ITEM& aItem, const COLOR4D& aColor ) const
+{
+ unsigned int size = aItem.GetSize();
+ unsigned int offset = aItem.GetOffset();
+
+ VERTEX* vertex = m_container->GetVertices( offset );
+
+ for( unsigned int i = 0; i < size; ++i )
+ {
+ vertex->r = aColor.r * 255.0;
+ vertex->g = aColor.g * 255.0;
+ vertex->b = aColor.b * 255.0;
+ vertex->a = aColor.a * 255.0;
+ vertex++;
+ }
+
+ m_container->SetDirty();
+}
+
+
+void VERTEX_MANAGER::ChangeItemDepth( const VERTEX_ITEM& aItem, GLfloat aDepth ) const
+{
+ unsigned int size = aItem.GetSize();
+ unsigned int offset = aItem.GetOffset();
+
+ VERTEX* vertex = m_container->GetVertices( offset );
+
+ for( unsigned int i = 0; i < size; ++i )
+ {
+ vertex->z = aDepth;
+ vertex++;
+ }
+
+ m_container->SetDirty();
+}
+
+
+VERTEX* VERTEX_MANAGER::GetVertices( const VERTEX_ITEM& aItem ) const
+{
+ if( aItem.GetSize() == 0 )
+ return NULL; // The item is not stored in the container
+
+ return m_container->GetVertices( aItem.GetOffset() );
+}
+
+
+void VERTEX_MANAGER::SetShader( SHADER& aShader ) const
+{
+ m_gpu->SetShader( aShader );
+}
+
+
+void VERTEX_MANAGER::Clear() const
+{
+ m_container->Clear();
+}
+
+
+void VERTEX_MANAGER::BeginDrawing() const
+{
+ m_gpu->BeginDrawing();
+}
+
+
+void VERTEX_MANAGER::DrawItem( const VERTEX_ITEM& aItem ) const
+{
+ int size = aItem.GetSize();
+
+ if( size > 0 )
+ {
+ int offset = aItem.GetOffset();
+ m_gpu->DrawIndices( offset, size );
+ }
+}
+
+
+void VERTEX_MANAGER::EndDrawing() const
+{
+ m_gpu->EndDrawing();
+}
+
+
+void VERTEX_MANAGER::putVertex( VERTEX& aTarget, GLfloat aX, GLfloat aY, GLfloat aZ ) const
+{
+ // Modify the vertex according to the currently used transformations
+ if( m_noTransform )
+ {
+ // Simply copy coordinates, when the transform matrix is the identity matrix
+ aTarget.x = aX;
+ aTarget.y = aY;
+ aTarget.z = aZ;
+ }
+ else
+ {
+ // Apply transformations
+ glm::vec4 transVertex( aX, aY, aZ, 1.0f );
+ transVertex = m_transform * transVertex;
+
+ aTarget.x = transVertex.x;
+ aTarget.y = transVertex.y;
+ aTarget.z = transVertex.z;
+ }
+
+ // Apply currently used color
+ aTarget.r = m_color[0];
+ aTarget.g = m_color[1];
+ aTarget.b = m_color[2];
+ aTarget.a = m_color[3];
+
+ // Apply currently used shader
+ for( unsigned int j = 0; j < ShaderStride; ++j )
+ {
+ aTarget.shader[j] = m_shader[j];
+ }
+}
diff --git a/common/gal/stroke_font.cpp b/common/gal/stroke_font.cpp
new file mode 100644
index 0000000..636f75e
--- /dev/null
+++ b/common/gal/stroke_font.cpp
@@ -0,0 +1,403 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Stroke font class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <gal/stroke_font.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <wx/string.h>
+
+using namespace KIGFX;
+
+const double STROKE_FONT::INTERLINE_PITCH_RATIO = 1.5;
+const double STROKE_FONT::OVERBAR_HEIGHT = 1.22;
+const double STROKE_FONT::BOLD_FACTOR = 1.3;
+const double STROKE_FONT::STROKE_FONT_SCALE = 1.0 / 21.0;
+const double STROKE_FONT::ITALIC_TILT = 1.0 / 8;
+
+STROKE_FONT::STROKE_FONT( GAL* aGal ) :
+ m_gal( aGal ),
+ m_bold( false ),
+ m_italic( false ),
+ m_mirrored( false ),
+ m_overbar( false )
+{
+ // Default values
+ m_glyphSize = VECTOR2D( 10.0, 10.0 );
+ m_verticalJustify = GR_TEXT_VJUSTIFY_BOTTOM;
+ m_horizontalJustify = GR_TEXT_HJUSTIFY_LEFT;
+}
+
+
+bool STROKE_FONT::LoadNewStrokeFont( const char* const aNewStrokeFont[], int aNewStrokeFontSize )
+{
+ m_glyphs.clear();
+ m_glyphBoundingBoxes.clear();
+ m_glyphs.resize( aNewStrokeFontSize );
+ m_glyphBoundingBoxes.resize( aNewStrokeFontSize );
+
+ for( int j = 0; j < aNewStrokeFontSize; j++ )
+ {
+ GLYPH glyph;
+ double glyphStartX = 0.0;
+ double glyphEndX = 0.0;
+ VECTOR2D glyphBoundingX;
+
+ std::deque<VECTOR2D> pointList;
+
+ int i = 0;
+
+ while( aNewStrokeFont[j][i] )
+ {
+ VECTOR2D point( 0.0, 0.0 );
+ char coordinate[2] = { 0, };
+
+ for( int k = 0; k < 2; k++ )
+ {
+ coordinate[k] = aNewStrokeFont[j][i + k];
+ }
+
+ if( i < 2 )
+ {
+ // The first two values contain the width of the char
+ glyphStartX = ( coordinate[0] - 'R' ) * STROKE_FONT_SCALE;
+ glyphEndX = ( coordinate[1] - 'R' ) * STROKE_FONT_SCALE;
+ glyphBoundingX = VECTOR2D( 0, glyphEndX - glyphStartX );
+ }
+ else if( ( coordinate[0] == ' ' ) && ( coordinate[1] == 'R' ) )
+ {
+ // Raise pen
+ if( pointList.size() > 0 )
+ glyph.push_back( pointList );
+
+ pointList.clear();
+ }
+ else
+ {
+ // Every coordinate description of the Hershey format has an offset,
+ // it has to be subtracted
+ point.x = (double) ( coordinate[0] - 'R' ) * STROKE_FONT_SCALE - glyphStartX;
+ // -10 is here to keep GAL rendering consistent with the legacy gfx stuff
+ point.y = (double) ( coordinate[1] - 'R' - 10) * STROKE_FONT_SCALE;
+ pointList.push_back( point );
+ }
+
+ i += 2;
+ }
+
+ if( pointList.size() > 0 )
+ glyph.push_back( pointList );
+
+ m_glyphs[j] = glyph;
+
+ // Compute the bounding box of the glyph
+ m_glyphBoundingBoxes[j] = computeBoundingBox( glyph, glyphBoundingX );
+ }
+
+ return true;
+}
+
+
+int STROKE_FONT::getInterline() const
+{
+ return KiROUND( m_glyphSize.y * INTERLINE_PITCH_RATIO ) + m_gal->GetLineWidth();
+}
+
+
+BOX2D STROKE_FONT::computeBoundingBox( const GLYPH& aGLYPH, const VECTOR2D& aGLYPHBoundingX ) const
+{
+ BOX2D boundingBox;
+
+ std::deque<VECTOR2D> boundingPoints;
+
+ boundingPoints.push_back( VECTOR2D( aGLYPHBoundingX.x, 0 ) );
+ boundingPoints.push_back( VECTOR2D( aGLYPHBoundingX.y, 0 ) );
+
+ for( GLYPH::const_iterator pointListIt = aGLYPH.begin(); pointListIt != aGLYPH.end(); ++pointListIt )
+ {
+ for( std::deque<VECTOR2D>::const_iterator pointIt = pointListIt->begin();
+ pointIt != pointListIt->end(); ++pointIt )
+ {
+ boundingPoints.push_back( VECTOR2D( aGLYPHBoundingX.x, pointIt->y ) );
+ }
+ }
+
+ boundingBox.Compute( boundingPoints );
+
+ return boundingBox;
+}
+
+
+void STROKE_FONT::Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRotationAngle )
+{
+ if( aText.empty() )
+ return;
+
+ // Context needs to be saved before any transformations
+ m_gal->Save();
+
+ m_gal->Translate( aPosition );
+ m_gal->Rotate( -aRotationAngle );
+
+ // Single line height
+ int lineHeight = getInterline( );
+ int lineCount = linesCount( aText );
+
+ // align the 1st line of text
+ switch( m_verticalJustify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP:
+ m_gal->Translate( VECTOR2D( 0, m_glyphSize.y ) );
+ break;
+
+ case GR_TEXT_VJUSTIFY_CENTER:
+ m_gal->Translate( VECTOR2D( 0, m_glyphSize.y / 2.0 ) );
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ break;
+
+ default:
+ break;
+ }
+
+ if( lineCount > 1 )
+ {
+ switch( m_verticalJustify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP:
+ break;
+
+ case GR_TEXT_VJUSTIFY_CENTER:
+ m_gal->Translate( VECTOR2D(0, -( lineCount - 1 ) * lineHeight / 2) );
+ break;
+
+ case GR_TEXT_VJUSTIFY_BOTTOM:
+ m_gal->Translate( VECTOR2D(0, -( lineCount - 1 ) * lineHeight ) );
+ break;
+ }
+ }
+
+ m_gal->SetIsStroke( true );
+ m_gal->SetIsFill( false );
+
+ if( m_bold )
+ m_gal->SetLineWidth( m_gal->GetLineWidth() * BOLD_FACTOR );
+
+ // Split multiline strings into separate ones and draw them line by line
+ size_t begin = 0;
+ size_t newlinePos = aText.find( '\n' );
+
+ while( newlinePos != aText.npos )
+ {
+ size_t length = newlinePos - begin;
+
+ drawSingleLineText( aText.substr( begin, length ) );
+ m_gal->Translate( VECTOR2D( 0.0, lineHeight ) );
+
+ begin = newlinePos + 1;
+ newlinePos = aText.find( '\n', begin );
+ }
+
+ // Draw the last (or the only one) line
+ if( !aText.empty() )
+ drawSingleLineText( aText.substr( begin ) );
+
+ m_gal->Restore();
+}
+
+
+void STROKE_FONT::drawSingleLineText( const UTF8& aText )
+{
+ // By default the overbar is turned off
+ m_overbar = false;
+
+ double xOffset;
+ VECTOR2D glyphSize( m_glyphSize );
+ double overbar_italic_comp = 0.0;
+
+ // Compute the text size
+ VECTOR2D textSize = computeTextSize( aText );
+
+ m_gal->Save();
+
+ // Adjust the text position to the given alignment
+ switch( m_horizontalJustify )
+ {
+ case GR_TEXT_HJUSTIFY_CENTER:
+ m_gal->Translate( VECTOR2D( -textSize.x / 2.0, 0 ) );
+ break;
+
+ case GR_TEXT_HJUSTIFY_RIGHT:
+ if( !m_mirrored )
+ m_gal->Translate( VECTOR2D( -textSize.x, 0 ) );
+ break;
+
+ case GR_TEXT_HJUSTIFY_LEFT:
+ if( m_mirrored )
+ m_gal->Translate( VECTOR2D( -textSize.x, 0 ) );
+ break;
+
+ default:
+ break;
+ }
+
+ if( m_mirrored )
+ {
+ // In case of mirrored text invert the X scale of points and their X direction
+ // (m_glyphSize.x) and start drawing from the position where text normally should end
+ // (textSize.x)
+ xOffset = textSize.x;
+ glyphSize.x = -m_glyphSize.x;
+ }
+ else
+ {
+ xOffset = 0.0;
+ }
+
+ // The overbar is indented inward at the beginning of an italicized section, but
+ // must not be indented on subsequent letters to ensure that the bar segments
+ // overlap.
+ bool last_had_overbar = false;
+
+ for( UTF8::uni_iter chIt = aText.ubegin(), end = aText.uend(); chIt < end; ++chIt )
+ {
+ // Toggle overbar
+ if( *chIt == '~' )
+ {
+ if( ++chIt >= end )
+ break;
+
+ if( *chIt != '~' ) // It was a single tilda, it toggles overbar
+ m_overbar = !m_overbar;
+
+ // If it is a double tilda, just process the second one
+ }
+
+ int dd = *chIt - ' ';
+
+ if( dd >= (int) m_glyphBoundingBoxes.size() || dd < 0 )
+ dd = '?' - ' ';
+
+ GLYPH& glyph = m_glyphs[dd];
+ BOX2D& bbox = m_glyphBoundingBoxes[dd];
+
+ if( m_overbar && m_italic )
+ {
+ if( m_mirrored )
+ {
+ overbar_italic_comp = (-m_glyphSize.y * OVERBAR_HEIGHT) / ITALIC_TILT;
+ }
+ else
+ {
+ overbar_italic_comp = (m_glyphSize.y * OVERBAR_HEIGHT) / ITALIC_TILT;
+ }
+ }
+
+ if( m_overbar )
+ {
+ double overbar_start_x = xOffset;
+ double overbar_start_y = -m_glyphSize.y * OVERBAR_HEIGHT;
+ double overbar_end_x = xOffset + glyphSize.x * bbox.GetEnd().x;
+ double overbar_end_y = -m_glyphSize.y * OVERBAR_HEIGHT;
+
+ if( !last_had_overbar )
+ {
+ overbar_start_x += overbar_italic_comp;
+ last_had_overbar = true;
+ }
+
+ VECTOR2D startOverbar( overbar_start_x, overbar_start_y );
+ VECTOR2D endOverbar( overbar_end_x, overbar_end_y );
+
+ m_gal->DrawLine( startOverbar, endOverbar );
+ }
+ else
+ {
+ last_had_overbar = false;
+ }
+
+ for( GLYPH::iterator pointListIt = glyph.begin(); pointListIt != glyph.end();
+ ++pointListIt )
+ {
+ std::deque<VECTOR2D> pointListScaled;
+
+ for( std::deque<VECTOR2D>::iterator pointIt = pointListIt->begin();
+ pointIt != pointListIt->end(); ++pointIt )
+ {
+ VECTOR2D pointPos( pointIt->x * glyphSize.x + xOffset, pointIt->y * glyphSize.y );
+
+ if( m_italic )
+ {
+ // FIXME should be done other way - referring to the lowest Y value of point
+ // because now italic fonts are translated a bit
+ if( m_mirrored )
+ pointPos.x += pointPos.y * 0.1;
+ else
+ pointPos.x -= pointPos.y * 0.1;
+ }
+
+ pointListScaled.push_back( pointPos );
+ }
+
+ m_gal->DrawPolyline( pointListScaled );
+ }
+
+ xOffset += glyphSize.x * bbox.GetEnd().x;
+ }
+
+ m_gal->Restore();
+}
+
+
+VECTOR2D STROKE_FONT::computeTextSize( const UTF8& aText ) const
+{
+ VECTOR2D result = VECTOR2D( 0.0, m_glyphSize.y );
+
+ for( UTF8::uni_iter it = aText.ubegin(), end = aText.uend(); it < end; ++it )
+ {
+ wxASSERT_MSG( *it != '\n',
+ wxT( "This function is intended to work with single line strings" ) );
+
+ // If it is double tilda, then it is displayed as a single tilda
+ // If it is single tilda, then it is toggling overbar, so we need to skip it
+ if( *it == '~' )
+ {
+ if( ++it >= end )
+ break;
+ }
+
+ // Index in the bounding boxes table
+ int dd = *it - ' ';
+
+ if( dd >= (int) m_glyphBoundingBoxes.size() || dd < 0 )
+ dd = '?' - ' ';
+
+ result.x += m_glyphSize.x * m_glyphBoundingBoxes[dd].GetEnd().x;
+ }
+
+ return result;
+}
diff --git a/common/geometry/hetriang.cpp b/common/geometry/hetriang.cpp
new file mode 100644
index 0000000..e5cf26c
--- /dev/null
+++ b/common/geometry/hetriang.cpp
@@ -0,0 +1,739 @@
+/*
+ * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
+ * Applied Mathematics, Norway.
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Contact information: E-mail: tor.dokken@sintef.no
+ * SINTEF ICT, Department of Applied Mathematics,
+ * P.O. Box 124 Blindern,
+ * 0314 Oslo, Norway.
+ *
+ * This file is part of TTL.
+ *
+ * TTL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * TTL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with TTL. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public
+ * License, a covered work must retain the producer line in every data
+ * file that is created or manipulated using TTL.
+ *
+ * Other Usage
+ * You can be released from the requirements of the license by purchasing
+ * a commercial license. Buying such a license is mandatory as soon as you
+ * develop commercial activities involving the TTL library without
+ * disclosing the source code of your own applications.
+ *
+ * This file may be used in accordance with the terms contained in a
+ * written agreement between you and SINTEF ICT.
+ */
+
+#include <ttl/halfedge/hetriang.h>
+#include <ttl/halfedge/hetraits.h>
+#include <ttl/ttl.h>
+#include <algorithm>
+#include <fstream>
+#include <limits>
+#include <boost/foreach.hpp>
+#include <boost/make_shared.hpp>
+#include <class_board_connected_item.h>
+
+using namespace hed;
+
+#ifdef TTL_USE_NODE_ID
+ int NODE::id_count = 0;
+#endif
+
+
+void NODE::updateLayers()
+{
+ assert( m_layers.none() );
+
+ BOOST_FOREACH( const BOARD_CONNECTED_ITEM* item, m_parents )
+ m_layers |= item->GetLayerSet();
+}
+
+
+//#define DEBUG_HE
+#ifdef DEBUG_HE
+#include <iostream>
+static void errorAndExit( char* aMessage )
+{
+ cout << "\n!!! ERROR: "<< aMessage << " !!!\n" << endl;
+ exit( -1 );
+}
+#endif
+
+
+static EDGE_PTR getLeadingEdgeInTriangle( const EDGE_PTR& aEdge )
+{
+ EDGE_PTR edge = aEdge;
+
+ // Code: 3EF (assumes triangle)
+ if( !edge->IsLeadingEdge() )
+ {
+ edge = edge->GetNextEdgeInFace();
+
+ if( !edge->IsLeadingEdge() )
+ edge = edge->GetNextEdgeInFace();
+ }
+
+ if( !edge->IsLeadingEdge() )
+ {
+ return EDGE_PTR();
+ }
+
+ return edge;
+}
+
+
+static void getLimits( NODES_CONTAINER::iterator aFirst, NODES_CONTAINER::iterator aLast,
+ int& aXmin, int& aYmin, int& aXmax, int& aYmax)
+{
+ aXmin = aYmin = std::numeric_limits<int>::min();
+ aXmax = aYmax = std::numeric_limits<int>::max();
+
+ NODES_CONTAINER::iterator it;
+
+ for( it = aFirst; it != aLast; ++it )
+ {
+ aXmin = std::min( aXmin, ( *it )->GetX() );
+ aYmin = std::min( aYmin, ( *it )->GetY() );
+ aXmax = std::max( aXmax, ( *it )->GetX() );
+ aYmax = std::max( aYmax, ( *it )->GetY() );
+ }
+}
+
+
+EDGE_PTR TRIANGULATION::InitTwoEnclosingTriangles( NODES_CONTAINER::iterator aFirst,
+ NODES_CONTAINER::iterator aLast)
+{
+ int xmin, ymin, xmax, ymax;
+ getLimits( aFirst, aLast, xmin, ymin, xmax, ymax );
+
+ // Add 10% of range:
+ double fac = 10.0;
+ double dx = ( xmax - xmin ) / fac;
+ double dy = ( ymax - ymin ) / fac;
+
+ NODE_PTR n1 = boost::make_shared<NODE>( xmin - dx, ymin - dy );
+ NODE_PTR n2 = boost::make_shared<NODE>( xmax + dx, ymin - dy );
+ NODE_PTR n3 = boost::make_shared<NODE>( xmax + dx, ymax + dy );
+ NODE_PTR n4 = boost::make_shared<NODE>( xmin - dx, ymax + dy );
+
+ // diagonal
+ EDGE_PTR e1d = boost::make_shared<EDGE>();
+ EDGE_PTR e2d = boost::make_shared<EDGE>();
+
+ // lower triangle
+ EDGE_PTR e11 = boost::make_shared<EDGE>();
+ EDGE_PTR e12 = boost::make_shared<EDGE>();
+
+ // upper triangle
+ EDGE_PTR e21 = boost::make_shared<EDGE>();
+ EDGE_PTR e22 = boost::make_shared<EDGE>();
+
+ // lower triangle
+ e1d->SetSourceNode( n3 );
+ e1d->SetNextEdgeInFace( e11 );
+ e1d->SetTwinEdge( e2d );
+ addLeadingEdge( e1d );
+
+ e11->SetSourceNode( n1 );
+ e11->SetNextEdgeInFace( e12 );
+
+ e12->SetSourceNode( n2 );
+ e12->SetNextEdgeInFace( e1d );
+
+ // upper triangle
+ e2d->SetSourceNode( n1 );
+ e2d->SetNextEdgeInFace( e21 );
+ e2d->SetTwinEdge( e1d );
+ addLeadingEdge( e2d );
+
+ e21->SetSourceNode( n3 );
+ e21->SetNextEdgeInFace( e22 );
+
+ e22->SetSourceNode( n4 );
+ e22->SetNextEdgeInFace( e2d );
+
+ return e11;
+}
+
+
+TRIANGULATION::TRIANGULATION()
+{
+ m_helper = new ttl::TRIANGULATION_HELPER( *this );
+}
+
+
+TRIANGULATION::TRIANGULATION( const TRIANGULATION& aTriangulation )
+{
+ m_helper = 0; // make coverity and static analysers quiet.
+ // Triangulation: Copy constructor not present
+ assert( false );
+}
+
+
+TRIANGULATION::~TRIANGULATION()
+{
+ cleanAll();
+ delete m_helper;
+}
+
+
+void TRIANGULATION::CreateDelaunay( NODES_CONTAINER::iterator aFirst,
+ NODES_CONTAINER::iterator aLast )
+{
+ cleanAll();
+
+ EDGE_PTR bedge = InitTwoEnclosingTriangles( aFirst, aLast );
+ DART dc( bedge );
+
+ DART d_iter = dc;
+
+ NODES_CONTAINER::iterator it;
+ for( it = aFirst; it != aLast; ++it )
+ {
+ m_helper->InsertNode<TTLtraits>( d_iter, *it );
+ }
+
+ // In general (e.g. for the triangle based data structure), the initial dart
+ // may have been changed.
+ // It is the users responsibility to get a valid boundary dart here.
+ // The half-edge data structure preserves the initial dart.
+ // (A dart at the boundary can also be found by trying to locate a
+ // triangle "outside" the triangulation.)
+
+ // Assumes rectangular domain
+ m_helper->RemoveRectangularBoundary<TTLtraits>( dc );
+}
+
+
+void TRIANGULATION::RemoveTriangle( EDGE_PTR& aEdge )
+{
+ EDGE_PTR e1 = getLeadingEdgeInTriangle( aEdge );
+
+#ifdef DEBUG_HE
+ if( !e1 )
+ errorAndExit( "Triangulation::removeTriangle: could not find leading aEdge" );
+#endif
+
+ removeLeadingEdgeFromList( e1 );
+ // cout << "No leading edges = " << leadingEdges_.size() << endl;
+ // Remove the triangle
+ EDGE_PTR e2( e1->GetNextEdgeInFace() );
+ EDGE_PTR e3( e2->GetNextEdgeInFace() );
+
+ e1->Clear();
+ e2->Clear();
+ e3->Clear();
+}
+
+
+void TRIANGULATION::ReverseSplitTriangle( EDGE_PTR& aEdge )
+{
+ // Reverse operation of splitTriangle
+ EDGE_PTR e1( aEdge->GetNextEdgeInFace() );
+ EDGE_PTR le( getLeadingEdgeInTriangle( e1 ) );
+#ifdef DEBUG_HE
+ if (!le)
+ errorAndExit("Triangulation::removeTriangle: could not find leading edge");
+#endif
+ removeLeadingEdgeFromList( le );
+
+ EDGE_PTR e2( e1->GetNextEdgeInFace()->GetTwinEdge()->GetNextEdgeInFace() );
+ le = getLeadingEdgeInTriangle( e2 );
+#ifdef DEBUG_HE
+ if (!le)
+ errorAndExit("Triangulation::removeTriangle: could not find leading edge");
+#endif
+ removeLeadingEdgeFromList( le );
+
+ EDGE_PTR e3( aEdge->GetTwinEdge()->GetNextEdgeInFace()->GetNextEdgeInFace() );
+ le = getLeadingEdgeInTriangle( e3 );
+#ifdef DEBUG_HE
+ if (!le)
+ errorAndExit("Triangulation::removeTriangle: could not find leading edge");
+#endif
+ removeLeadingEdgeFromList( le );
+
+ // The three triangles at the node have now been removed
+ // from the triangulation, but the arcs have not been deleted.
+ // Next delete the 6 half edges radiating from the node
+ // The node is maintained by handle and need not be deleted explicitly
+ EDGE_PTR estar = aEdge;
+ EDGE_PTR enext = estar->GetTwinEdge()->GetNextEdgeInFace();
+ estar->GetTwinEdge()->Clear();
+ estar->Clear();
+
+ estar = enext;
+ enext = estar->GetTwinEdge()->GetNextEdgeInFace();
+ estar->GetTwinEdge()->Clear();
+ estar->Clear();
+
+ enext->GetTwinEdge()->Clear();
+ enext->Clear();
+
+ // Create the new triangle
+ e1->SetNextEdgeInFace( e2 );
+ e2->SetNextEdgeInFace( e3 );
+ e3->SetNextEdgeInFace( e1 );
+ addLeadingEdge( e1 );
+}
+
+
+DART TRIANGULATION::CreateDart()
+{
+ // Return an arbitrary CCW dart
+ return DART( *m_leadingEdges.begin() );
+}
+
+
+bool TRIANGULATION::removeLeadingEdgeFromList( EDGE_PTR& aLeadingEdge )
+{
+ // Remove the edge from the list of leading edges,
+ // but don't delete it.
+ // Also set flag for leading edge to false.
+ // Must search from start of list. Since edges are added to the
+ // start of the list during triangulation, this operation will
+ // normally be fast (when used in the triangulation algorithm)
+ std::list<EDGE_PTR>::iterator it;
+ for( it = m_leadingEdges.begin(); it != m_leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ if( edge == aLeadingEdge )
+ {
+ edge->SetAsLeadingEdge( false );
+ it = m_leadingEdges.erase( it );
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+void TRIANGULATION::cleanAll()
+{
+ BOOST_FOREACH( EDGE_PTR& edge, m_leadingEdges )
+ edge->SetNextEdgeInFace( EDGE_PTR() );
+}
+
+
+void TRIANGULATION::swapEdge( DART& aDart )
+{
+ SwapEdge( aDart.GetEdge() );
+}
+
+
+void TRIANGULATION::splitTriangle( DART& aDart, const NODE_PTR& aPoint )
+{
+ EDGE_PTR edge = SplitTriangle( aDart.GetEdge(), aPoint );
+ aDart.Init( edge );
+}
+
+
+void TRIANGULATION::reverseSplitTriangle( DART& aDart )
+{
+ ReverseSplitTriangle( aDart.GetEdge() );
+}
+
+
+void TRIANGULATION::removeBoundaryTriangle( DART& aDart )
+{
+ RemoveTriangle( aDart.GetEdge() );
+}
+
+
+#ifdef TTL_USE_NODE_FLAG
+void TRIANGULATION::FlagNodes( bool aFlag ) const
+{
+ std::list<EDGE_PTR>::const_iterator it;
+ for( it = m_leadingEdges.begin(); it != m_leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ for( int i = 0; i < 3; ++i )
+ {
+ edge->GetSourceNode()->SetFlag( aFlag );
+ edge = edge->GetNextEdgeInFace();
+ }
+ }
+}
+
+
+std::list<NODE_PTR>* TRIANGULATION::GetNodes() const
+{
+ FlagNodes( false );
+ std::list<NODE_PTR>* nodeList = new std::list<NODE_PTR>;
+ std::list<EDGE_PTR>::const_iterator it;
+
+ for( it = m_leadingEdges.begin(); it != m_leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ for( int i = 0; i < 3; ++i )
+ {
+ const NODE_PTR& node = edge->GetSourceNode();
+
+ if( node->GetFlag() == false )
+ {
+ nodeList->push_back( node );
+ node->SetFlag( true );
+ }
+ edge = edge->GetNextEdgeInFace();
+ }
+ }
+ return nodeList;
+}
+#endif
+
+
+std::list<EDGE_PTR>* TRIANGULATION::GetEdges( bool aSkipBoundaryEdges ) const
+{
+ // collect all arcs (one half edge for each arc)
+ // (boundary edges are also collected).
+ std::list<EDGE_PTR>::const_iterator it;
+ std::list<EDGE_PTR>* elist = new std::list<EDGE_PTR>;
+
+ for( it = m_leadingEdges.begin(); it != m_leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+ for( int i = 0; i < 3; ++i )
+ {
+ EDGE_PTR twinedge = edge->GetTwinEdge();
+ // only one of the half-edges
+
+ if( ( !twinedge && !aSkipBoundaryEdges )
+ || ( twinedge && ( (size_t) edge.get() > (size_t) twinedge.get() ) ) )
+ elist->push_front( edge );
+
+ edge = edge->GetNextEdgeInFace();
+ }
+ }
+
+ return elist;
+}
+
+
+EDGE_PTR TRIANGULATION::SplitTriangle( EDGE_PTR& aEdge, const NODE_PTR& aPoint )
+{
+ // Add a node by just splitting a triangle into three triangles
+ // Assumes the half aEdge is located in the triangle
+ // Returns a half aEdge with source node as the new node
+
+ // e#_n are new edges
+ // e# are existing edges
+ // e#_n and e##_n are new twin edges
+ // e##_n are edges incident to the new node
+
+ // Add the node to the structure
+ //NODE_PTR new_node(new Node(x,y,z));
+
+ NODE_PTR n1( aEdge->GetSourceNode() );
+ EDGE_PTR e1( aEdge );
+
+ EDGE_PTR e2( aEdge->GetNextEdgeInFace() );
+ NODE_PTR n2( e2->GetSourceNode() );
+
+ EDGE_PTR e3( e2->GetNextEdgeInFace() );
+ NODE_PTR n3( e3->GetSourceNode() );
+
+ EDGE_PTR e1_n = boost::make_shared<EDGE>();
+ EDGE_PTR e11_n = boost::make_shared<EDGE>();
+ EDGE_PTR e2_n = boost::make_shared<EDGE>();
+ EDGE_PTR e22_n = boost::make_shared<EDGE>();
+ EDGE_PTR e3_n = boost::make_shared<EDGE>();
+ EDGE_PTR e33_n = boost::make_shared<EDGE>();
+
+ e1_n->SetSourceNode( n1 );
+ e11_n->SetSourceNode( aPoint );
+ e2_n->SetSourceNode( n2 );
+ e22_n->SetSourceNode( aPoint );
+ e3_n->SetSourceNode( n3 );
+ e33_n->SetSourceNode( aPoint );
+
+ e1_n->SetTwinEdge( e11_n );
+ e11_n->SetTwinEdge( e1_n );
+ e2_n->SetTwinEdge( e22_n );
+ e22_n->SetTwinEdge( e2_n );
+ e3_n->SetTwinEdge( e33_n );
+ e33_n->SetTwinEdge( e3_n );
+
+ e1_n->SetNextEdgeInFace( e33_n );
+ e2_n->SetNextEdgeInFace( e11_n );
+ e3_n->SetNextEdgeInFace( e22_n );
+
+ e11_n->SetNextEdgeInFace( e1 );
+ e22_n->SetNextEdgeInFace( e2 );
+ e33_n->SetNextEdgeInFace( e3 );
+
+ // and update old's next aEdge
+ e1->SetNextEdgeInFace( e2_n );
+ e2->SetNextEdgeInFace( e3_n );
+ e3->SetNextEdgeInFace( e1_n );
+
+ // add the three new leading edges,
+ // Must remove the old leading aEdge from the list.
+ // Use the field telling if an aEdge is a leading aEdge
+ // NOTE: Must search in the list!!!
+
+ if( e1->IsLeadingEdge() )
+ removeLeadingEdgeFromList( e1 );
+ else if( e2->IsLeadingEdge() )
+ removeLeadingEdgeFromList( e2 );
+ else if( e3->IsLeadingEdge() )
+ removeLeadingEdgeFromList( e3 );
+ else
+ assert( false ); // one of the edges should be leading
+
+ addLeadingEdge( e1_n );
+ addLeadingEdge( e2_n );
+ addLeadingEdge( e3_n );
+
+ // Return a half aEdge incident to the new node (with the new node as source node)
+
+ return e11_n;
+}
+
+
+void TRIANGULATION::SwapEdge( EDGE_PTR& aDiagonal )
+{
+ // Note that diagonal is both input and output and it is always
+ // kept in counterclockwise direction (this is not required by all
+ // functions in TriangulationHelper now)
+
+ // Swap by rotating counterclockwise
+ // Use the same objects - no deletion or new objects
+ EDGE_PTR eL( aDiagonal );
+ EDGE_PTR eR( eL->GetTwinEdge() );
+ EDGE_PTR eL_1( eL->GetNextEdgeInFace() );
+ EDGE_PTR eL_2( eL_1->GetNextEdgeInFace() );
+ EDGE_PTR eR_1( eR->GetNextEdgeInFace() );
+ EDGE_PTR eR_2( eR_1->GetNextEdgeInFace() );
+
+ // avoid node to be dereferenced to zero and deleted
+ NODE_PTR nR( eR_2->GetSourceNode() );
+ NODE_PTR nL( eL_2->GetSourceNode() );
+
+ eL->SetSourceNode( nR );
+ eR->SetSourceNode( nL );
+
+ // and now 6 1-sewings
+ eL->SetNextEdgeInFace( eL_2 );
+ eL_2->SetNextEdgeInFace( eR_1 );
+ eR_1->SetNextEdgeInFace( eL );
+
+ eR->SetNextEdgeInFace( eR_2 );
+ eR_2->SetNextEdgeInFace( eL_1 );
+ eL_1->SetNextEdgeInFace( eR );
+
+ if( eL->IsLeadingEdge() )
+ removeLeadingEdgeFromList( eL );
+ else if( eL_1->IsLeadingEdge() )
+ removeLeadingEdgeFromList( eL_1 );
+ else if( eL_2->IsLeadingEdge() )
+ removeLeadingEdgeFromList( eL_2 );
+
+ if( eR->IsLeadingEdge() )
+ removeLeadingEdgeFromList( eR );
+ else if( eR_1->IsLeadingEdge() )
+ removeLeadingEdgeFromList( eR_1 );
+ else if( eR_2->IsLeadingEdge() )
+ removeLeadingEdgeFromList( eR_2 );
+
+ addLeadingEdge( eL );
+ addLeadingEdge( eR );
+}
+
+
+bool TRIANGULATION::CheckDelaunay() const
+{
+ // ???? outputs !!!!
+ // ofstream os("qweND.dat");
+ const std::list<EDGE_PTR>& leadingEdges = GetLeadingEdges();
+
+ std::list<EDGE_PTR>::const_iterator it;
+ bool ok = true;
+ int noNotDelaunay = 0;
+
+ for( it = leadingEdges.begin(); it != leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ for( int i = 0; i < 3; ++i )
+ {
+ EDGE_PTR twinedge = edge->GetTwinEdge();
+
+ // only one of the half-edges
+ if( !twinedge || (size_t) edge.get() > (size_t) twinedge.get() )
+ {
+ DART dart( edge );
+ if( m_helper->SwapTestDelaunay<TTLtraits>( dart ) )
+ {
+ noNotDelaunay++;
+
+ //printEdge(dart,os); os << "\n";
+ ok = false;
+ //cout << "............. not Delaunay .... " << endl;
+ }
+ }
+
+ edge = edge->GetNextEdgeInFace();
+ }
+ }
+
+#ifdef DEBUG_HE
+ cout << "!!! Triangulation is NOT Delaunay: " << noNotDelaunay << " edges\n" << endl;
+#endif
+
+ return ok;
+}
+
+
+void TRIANGULATION::OptimizeDelaunay()
+{
+ // This function is also present in ttl where it is implemented
+ // generically.
+ // The implementation below is tailored for the half-edge data structure,
+ // and is thus more efficient
+
+ // Collect all interior edges (one half edge for each arc)
+ bool skip_boundary_edges = true;
+ std::list<EDGE_PTR>* elist = GetEdges( skip_boundary_edges );
+
+ // Assumes that elist has only one half-edge for each arc.
+ bool cycling_check = true;
+ bool optimal = false;
+ std::list<EDGE_PTR>::const_iterator it;
+
+ while( !optimal )
+ {
+ optimal = true;
+
+ for( it = elist->begin(); it != elist->end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ DART dart( edge );
+ // Constrained edges should not be swapped
+ if( m_helper->SwapTestDelaunay<TTLtraits>( dart, cycling_check ) )
+ {
+ optimal = false;
+ SwapEdge( edge );
+ }
+ }
+ }
+
+ delete elist;
+}
+
+
+EDGE_PTR TRIANGULATION::GetInteriorNode() const
+{
+ const std::list<EDGE_PTR>& leadingEdges = GetLeadingEdges();
+ std::list<EDGE_PTR>::const_iterator it;
+
+ for( it = leadingEdges.begin(); it != leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ // multiple checks, but only until found
+ for( int i = 0; i < 3; ++i )
+ {
+ if( edge->GetTwinEdge() )
+ {
+ if( !m_helper->IsBoundaryNode( DART( edge ) ) )
+ return edge;
+ }
+
+ edge = edge->GetNextEdgeInFace();
+ }
+ }
+
+ return EDGE_PTR(); // no boundary nodes
+}
+
+
+EDGE_PTR TRIANGULATION::GetBoundaryEdgeInTriangle( const EDGE_PTR& aEdge ) const
+{
+ EDGE_PTR edge = aEdge;
+
+ if( m_helper->IsBoundaryEdge( DART( edge ) ) )
+ return edge;
+
+ edge = edge->GetNextEdgeInFace();
+ if( m_helper->IsBoundaryEdge( DART( edge ) ) )
+ return edge;
+
+ edge = edge->GetNextEdgeInFace();
+ if( m_helper->IsBoundaryEdge( DART( edge ) ) )
+ return edge;
+
+ return EDGE_PTR();
+}
+
+
+EDGE_PTR TRIANGULATION::GetBoundaryEdge() const
+{
+ // Get an arbitrary (CCW) boundary edge
+ // If the triangulation is closed, NULL is returned
+ const std::list<EDGE_PTR>& leadingEdges = GetLeadingEdges();
+ std::list<EDGE_PTR>::const_iterator it;
+ EDGE_PTR edge;
+
+ for( it = leadingEdges.begin(); it != leadingEdges.end(); ++it )
+ {
+ edge = GetBoundaryEdgeInTriangle( *it );
+
+ if( edge )
+ return edge;
+ }
+ return EDGE_PTR();
+}
+
+
+void TRIANGULATION::PrintEdges( std::ofstream& aOutput ) const
+{
+ // Print source node and target node for each edge face by face,
+ // but only one of the half-edges.
+ const std::list<EDGE_PTR>& leadingEdges = GetLeadingEdges();
+ std::list<EDGE_PTR>::const_iterator it;
+
+ for( it = leadingEdges.begin(); it != leadingEdges.end(); ++it )
+ {
+ EDGE_PTR edge = *it;
+
+ for( int i = 0; i < 3; ++i )
+ {
+ EDGE_PTR twinedge = edge->GetTwinEdge();
+
+ // Print only one edge (the highest value of the pointer)
+ if( !twinedge || (size_t) edge.get() > (size_t) twinedge.get() )
+ {
+ // Print source node and target node
+ NODE_PTR node = edge->GetSourceNode();
+ aOutput << node->GetX() << " " << node->GetY() << std::endl;
+ node = edge->GetTargetNode();
+ aOutput << node->GetX() << " " << node->GetY() << std::endl;
+ aOutput << '\n'; // blank line
+ }
+
+ edge = edge->GetNextEdgeInFace();
+ }
+ }
+}
diff --git a/common/geometry/seg.cpp b/common/geometry/seg.cpp
new file mode 100644
index 0000000..f1796b6
--- /dev/null
+++ b/common/geometry/seg.cpp
@@ -0,0 +1,158 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <geometry/seg.h>
+
+template <typename T>
+int sgn( T aVal )
+{
+ return ( T( 0 ) < aVal ) - ( aVal < T( 0 ) );
+}
+
+
+bool SEG::PointCloserThan( const VECTOR2I& aP, int aDist ) const
+{
+ VECTOR2I d = B - A;
+ ecoord dist_sq = (ecoord) aDist * aDist;
+
+ SEG::ecoord l_squared = d.Dot( d );
+ SEG::ecoord t = d.Dot( aP - A );
+
+ if( t <= 0 || !l_squared )
+ return ( aP - A ).SquaredEuclideanNorm() < dist_sq;
+ else if( t >= l_squared )
+ return ( aP - B ).SquaredEuclideanNorm() < dist_sq;
+
+ int dxdy = abs( d.x ) - abs( d.y );
+
+ if( ( dxdy >= -1 && dxdy <= 1 ) || abs( d.x ) <= 1 || abs( d.y ) <= 1 )
+ {
+ int ca = -sgn( d.y );
+ int cb = sgn( d.x );
+ int cc = -ca * A.x - cb * A.y;
+
+ ecoord num = (ecoord) ca * aP.x + (ecoord) cb * aP.y + cc;
+ num *= num;
+
+ if( ca && cb )
+ num >>= 1;
+
+ if( num > ( dist_sq + 100 ) )
+ return false;
+
+ else if( num < ( dist_sq - 100 ) )
+ return true;
+ }
+
+ VECTOR2I nearest;
+ nearest.x = A.x + rescale( t, (ecoord) d.x, l_squared );
+ nearest.y = A.y + rescale( t, (ecoord) d.y, l_squared );
+
+ return ( nearest - aP ).SquaredEuclideanNorm() <= dist_sq;
+}
+
+
+SEG::ecoord SEG::SquaredDistance( const SEG& aSeg ) const
+{
+ // fixme: rather inefficient....
+ if( Intersect( aSeg ) )
+ return 0;
+
+ const VECTOR2I pts[4] =
+ {
+ aSeg.NearestPoint( A ) - A,
+ aSeg.NearestPoint( B ) - B,
+ NearestPoint( aSeg.A ) - aSeg.A,
+ NearestPoint( aSeg.B ) - aSeg.B
+ };
+
+ ecoord m = VECTOR2I::ECOORD_MAX;
+
+ for( int i = 0; i < 4; i++ )
+ m = std::min( m, pts[i].SquaredEuclideanNorm() );
+
+ return m;
+}
+
+
+OPT_VECTOR2I SEG::Intersect( const SEG& aSeg, bool aIgnoreEndpoints, bool aLines ) const
+{
+ const VECTOR2I e( B - A );
+ const VECTOR2I f( aSeg.B - aSeg.A );
+ const VECTOR2I ac( aSeg.A - A );
+
+ ecoord d = f.Cross( e );
+ ecoord p = f.Cross( ac );
+ ecoord q = e.Cross( ac );
+
+ if( d == 0 )
+ return OPT_VECTOR2I();
+
+ if( !aLines && d > 0 && ( q < 0 || q > d || p < 0 || p > d ) )
+ return OPT_VECTOR2I();
+
+ if( !aLines && d < 0 && ( q < d || p < d || p > 0 || q > 0 ) )
+ return OPT_VECTOR2I();
+
+ if( !aLines && aIgnoreEndpoints && ( q == 0 || q == d ) && ( p == 0 || p == d ) )
+ return OPT_VECTOR2I();
+
+ VECTOR2I ip( aSeg.A.x + rescale( q, (ecoord) f.x, d ),
+ aSeg.A.y + rescale( q, (ecoord) f.y, d ) );
+
+ return ip;
+}
+
+
+bool SEG::ccw( const VECTOR2I& aA, const VECTOR2I& aB, const VECTOR2I& aC ) const
+{
+ return (ecoord) ( aC.y - aA.y ) * ( aB.x - aA.x ) > (ecoord) ( aB.y - aA.y ) * ( aC.x - aA.x );
+}
+
+
+bool SEG::Collide( const SEG& aSeg, int aClearance ) const
+{
+ // check for intersection
+ // fixme: move to a method
+ if( ccw( A, aSeg.A, aSeg.B ) != ccw( B, aSeg.A, aSeg.B ) &&
+ ccw( A, B, aSeg.A ) != ccw( A, B, aSeg.B ) )
+ return true;
+
+#define CHK( _seg, _pt ) \
+ if( (_seg).PointCloserThan( _pt, aClearance ) ) return true;
+
+ CHK( *this, aSeg.A );
+ CHK( *this, aSeg.B );
+ CHK( aSeg, A );
+ CHK( aSeg, B );
+#undef CHK
+
+ return false;
+}
+
+
+bool SEG::Contains( const VECTOR2I& aP ) const
+{
+ return PointCloserThan( aP, 1 );
+}
diff --git a/common/geometry/shape.cpp b/common/geometry/shape.cpp
new file mode 100644
index 0000000..0e312c5
--- /dev/null
+++ b/common/geometry/shape.cpp
@@ -0,0 +1,38 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <geometry/shape.h>
+
+bool SHAPE::Parse( std::stringstream& aStream )
+{
+ assert ( false );
+ return false;
+};
+
+const std::string SHAPE::Format( ) const
+{
+ assert ( false );
+ return std::string("");
+};
diff --git a/common/geometry/shape_collisions.cpp b/common/geometry/shape_collisions.cpp
new file mode 100644
index 0000000..773dcc9
--- /dev/null
+++ b/common/geometry/shape_collisions.cpp
@@ -0,0 +1,496 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <math/vector2d.h>
+#include <math.h>
+
+#include <geometry/shape.h>
+#include <geometry/shape_line_chain.h>
+#include <geometry/shape_circle.h>
+#include <geometry/shape_rect.h>
+#include <geometry/shape_segment.h>
+#include <geometry/shape_convex.h>
+
+typedef VECTOR2I::extended_type ecoord;
+
+static inline bool Collide( const SHAPE_CIRCLE& aA, const SHAPE_CIRCLE& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ ecoord min_dist = aClearance + aA.GetRadius() + aB.GetRadius();
+ ecoord min_dist_sq = min_dist * min_dist;
+
+ const VECTOR2I delta = aB.GetCenter() - aA.GetCenter();
+
+ ecoord dist_sq = delta.SquaredEuclideanNorm();
+
+ if( dist_sq >= min_dist_sq )
+ return false;
+
+ if( aNeedMTV )
+ aMTV = delta.Resize( min_dist - sqrt( dist_sq ) + 3 ); // fixme: apparent rounding error
+
+ return true;
+}
+
+
+static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_CIRCLE& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ const VECTOR2I c = aB.GetCenter();
+ const VECTOR2I p0 = aA.GetPosition();
+ const VECTOR2I size = aA.GetSize();
+ const int r = aB.GetRadius();
+ const int min_dist = aClearance + r;
+
+ const VECTOR2I vts[] =
+ {
+ VECTOR2I( p0.x, p0.y ),
+ VECTOR2I( p0.x, p0.y + size.y ),
+ VECTOR2I( p0.x + size.x, p0.y + size.y ),
+ VECTOR2I( p0.x + size.x, p0.y ),
+ VECTOR2I( p0.x, p0.y )
+ };
+
+ int nearest_seg_dist = INT_MAX;
+ VECTOR2I nearest;
+
+ bool inside = c.x >= p0.x && c.x <= ( p0.x + size.x )
+ && c.y >= p0.y && c.y <= ( p0.y + size.y );
+
+
+ if( !aNeedMTV && inside )
+ return true;
+
+ for( int i = 0; i < 4; i++ )
+ {
+ const SEG seg( vts[i], vts[i + 1] );
+
+ VECTOR2I pn = seg.NearestPoint( c );
+
+ int d = ( pn - c ).EuclideanNorm();
+
+ if( ( d < min_dist ) && !aNeedMTV )
+ return true;
+
+ if( d < nearest_seg_dist )
+ {
+ nearest = pn;
+ nearest_seg_dist = d;
+ }
+ }
+
+ if( nearest_seg_dist >= min_dist && !inside )
+ return false;
+
+ VECTOR2I delta = c - nearest;
+
+ if( !aNeedMTV )
+ return true;
+
+
+ if( inside )
+ aMTV = -delta.Resize( abs( min_dist + 1 + nearest_seg_dist ) + 1 );
+ else
+ aMTV = delta.Resize( abs( min_dist + 1 - nearest_seg_dist ) + 1 );
+
+
+ return true;
+}
+
+
+static VECTOR2I pushoutForce( const SHAPE_CIRCLE& aA, const SEG& aB, int aClearance )
+{
+ VECTOR2I f( 0, 0 );
+
+ const VECTOR2I c = aA.GetCenter();
+ const VECTOR2I nearest = aB.NearestPoint( c );
+
+ const int r = aA.GetRadius();
+
+ int dist = ( nearest - c ).EuclideanNorm();
+ int min_dist = aClearance + r;
+
+ if( dist < min_dist )
+ {
+ for( int corr = 0; corr < 5; corr++ )
+ {
+ f = ( aA.GetCenter() - nearest ).Resize( min_dist - dist + corr );
+
+ if( aB.Distance( c + f ) >= min_dist )
+ break;
+ }
+ }
+
+ return f;
+}
+
+
+static inline bool Collide( const SHAPE_CIRCLE& aA, const SHAPE_LINE_CHAIN& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ bool found = false;
+
+ for( int s = 0; s < aB.SegmentCount(); s++ )
+ {
+ if( aA.Collide( aB.CSegment( s ), aClearance ) )
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if( !aNeedMTV || !found )
+ return found;
+
+ SHAPE_CIRCLE cmoved( aA );
+ VECTOR2I f_total( 0, 0 );
+
+ for( int s = 0; s < aB.SegmentCount(); s++ )
+ {
+ VECTOR2I f = pushoutForce( cmoved, aB.CSegment( s ), aClearance );
+ cmoved.SetCenter( cmoved.GetCenter() + f );
+ f_total += f;
+ }
+
+ aMTV = f_total;
+ return found;
+}
+
+
+static inline bool Collide( const SHAPE_CIRCLE& aA, const SHAPE_CONVEX& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ bool found;
+ const SHAPE_LINE_CHAIN& lc( aB.Vertices() );
+
+ found = lc.Distance( aA.GetCenter() ) <= aClearance + aA.GetRadius();
+
+ if( !aNeedMTV || !found )
+ return found;
+
+ SHAPE_CIRCLE cmoved( aA );
+ VECTOR2I f_total( 0, 0 );
+
+ for( int s = 0; s < lc.SegmentCount(); s++ )
+ {
+ VECTOR2I f = pushoutForce( cmoved, lc.CSegment( s ), aClearance );
+ cmoved.SetCenter( cmoved.GetCenter() + f );
+ f_total += f;
+ }
+
+ aMTV = f_total;
+ return found;
+}
+
+
+static inline bool Collide( const SHAPE_CIRCLE& aA, const SHAPE_SEGMENT& aSeg, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ bool col = aA.Collide( aSeg.GetSeg(), aClearance + aSeg.GetWidth() / 2);
+
+ if( col && aNeedMTV )
+ {
+ aMTV = -pushoutForce( aA, aSeg.GetSeg(), aClearance + aSeg.GetWidth() / 2);
+ }
+ return col;
+}
+
+
+static inline bool Collide( const SHAPE_LINE_CHAIN& aA, const SHAPE_LINE_CHAIN& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ for( int i = 0; i < aB.SegmentCount(); i++ )
+ if( aA.Collide( aB.CSegment( i ), aClearance ) )
+ return true;
+
+ return false;
+}
+
+
+static inline bool Collide( const SHAPE_LINE_CHAIN& aA, const SHAPE_CONVEX& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return Collide( aA, aB.Vertices(), aClearance, aNeedMTV, aMTV );
+}
+
+
+static inline bool Collide( const SHAPE_CONVEX& aA, const SHAPE_CONVEX& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return Collide( aA.Vertices(), aB.Vertices(), aClearance, aNeedMTV, aMTV );
+}
+
+
+static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_LINE_CHAIN& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ for( int s = 0; s < aB.SegmentCount(); s++ )
+ {
+ SEG seg = aB.CSegment( s );
+
+ if( aA.Collide( seg, aClearance ) )
+ return true;
+ }
+
+ return false;
+}
+
+
+static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_CONVEX& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return Collide( aA, aB.Vertices(), aClearance, aNeedMTV, aMTV );
+}
+
+
+static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_SEGMENT& aSeg, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return aA.Collide( aSeg.GetSeg(), aClearance + aSeg.GetWidth() / 2 );
+}
+
+
+static inline bool Collide( const SHAPE_SEGMENT& aA, const SHAPE_SEGMENT& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return aA.Collide( aB.GetSeg(), aClearance + aB.GetWidth() / 2 );
+}
+
+
+static inline bool Collide( const SHAPE_LINE_CHAIN& aA, const SHAPE_SEGMENT& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ if( aA.Collide( aB.GetSeg(), aClearance + aB.GetWidth() / 2 ) )
+ return true;
+
+ return false;
+}
+
+
+static inline bool Collide( const SHAPE_CONVEX& aA, const SHAPE_SEGMENT& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return Collide( aA.Vertices(), aB, aClearance, aNeedMTV, aMTV );
+}
+
+static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_RECT& aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return Collide( aA.Outline(), aB.Outline(), aClearance, aNeedMTV, aMTV );
+}
+
+
+template<class ShapeAType, class ShapeBType>
+inline bool CollCase( const SHAPE* aA, const SHAPE* aB, int aClearance, bool aNeedMTV, VECTOR2I& aMTV )
+{
+ return Collide (*static_cast<const ShapeAType*>( aA ),
+ *static_cast<const ShapeBType*>( aB ),
+ aClearance, aNeedMTV, aMTV);
+}
+
+template<class ShapeAType, class ShapeBType>
+inline bool CollCaseReversed ( const SHAPE* aA, const SHAPE* aB, int aClearance, bool aNeedMTV, VECTOR2I& aMTV )
+{
+ bool rv = Collide (*static_cast<const ShapeBType*>( aB ),
+ *static_cast<const ShapeAType*>( aA ),
+ aClearance, aNeedMTV, aMTV);
+ if(rv && aNeedMTV)
+ aMTV = -aMTV;
+ return rv;
+}
+
+
+bool CollideShapes( const SHAPE* aA, const SHAPE* aB, int aClearance, bool aNeedMTV, VECTOR2I& aMTV )
+{
+ switch( aA->Type() )
+ {
+ case SH_RECT:
+ switch( aB->Type() )
+ {
+ case SH_RECT:
+ return CollCase<SHAPE_RECT, SHAPE_RECT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CIRCLE:
+ return CollCase<SHAPE_RECT, SHAPE_CIRCLE>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_LINE_CHAIN:
+ return CollCase<SHAPE_RECT, SHAPE_LINE_CHAIN>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_SEGMENT:
+ return CollCase<SHAPE_RECT, SHAPE_SEGMENT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CONVEX:
+ return CollCase<SHAPE_RECT, SHAPE_CONVEX>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ default:
+ break;
+ }
+ break;
+
+ case SH_CIRCLE:
+ switch( aB->Type() )
+ {
+ case SH_RECT:
+ return CollCaseReversed<SHAPE_CIRCLE, SHAPE_RECT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CIRCLE:
+ return CollCase<SHAPE_CIRCLE, SHAPE_CIRCLE>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_LINE_CHAIN:
+ return CollCase<SHAPE_CIRCLE, SHAPE_LINE_CHAIN>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_SEGMENT:
+ return CollCase<SHAPE_CIRCLE, SHAPE_SEGMENT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CONVEX:
+ return CollCase<SHAPE_CIRCLE, SHAPE_CONVEX>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ default:
+ break;
+ }
+ break;
+
+ case SH_LINE_CHAIN:
+ switch( aB->Type() )
+ {
+ case SH_RECT:
+ return CollCase<SHAPE_RECT, SHAPE_LINE_CHAIN>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_CIRCLE:
+ return CollCase<SHAPE_CIRCLE, SHAPE_LINE_CHAIN>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_LINE_CHAIN:
+ return CollCase<SHAPE_LINE_CHAIN, SHAPE_LINE_CHAIN>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_SEGMENT:
+ return CollCase<SHAPE_LINE_CHAIN, SHAPE_SEGMENT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CONVEX:
+ return CollCase<SHAPE_LINE_CHAIN, SHAPE_CONVEX>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ default:
+ break;
+ }
+ break;
+
+ case SH_SEGMENT:
+ switch( aB->Type() )
+ {
+ case SH_RECT:
+ return CollCase<SHAPE_RECT, SHAPE_SEGMENT>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_CIRCLE:
+ return CollCaseReversed<SHAPE_SEGMENT, SHAPE_CIRCLE>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_LINE_CHAIN:
+ return CollCase<SHAPE_LINE_CHAIN, SHAPE_SEGMENT>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_SEGMENT:
+ return CollCase<SHAPE_SEGMENT, SHAPE_SEGMENT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CONVEX:
+ return CollCase<SHAPE_CONVEX, SHAPE_SEGMENT>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ default:
+ break;
+ }
+ break;
+
+ case SH_CONVEX:
+ switch( aB->Type() )
+ {
+ case SH_RECT:
+ return CollCase<SHAPE_RECT, SHAPE_CONVEX>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_CIRCLE:
+ return CollCase<SHAPE_CIRCLE, SHAPE_CONVEX>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_LINE_CHAIN:
+ return CollCase<SHAPE_LINE_CHAIN, SHAPE_CONVEX>( aB, aA, aClearance, aNeedMTV, aMTV );
+
+ case SH_SEGMENT:
+ return CollCase<SHAPE_CONVEX, SHAPE_SEGMENT>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ case SH_CONVEX:
+ return CollCase<SHAPE_CONVEX, SHAPE_CONVEX>( aA, aB, aClearance, aNeedMTV, aMTV );
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ bool unsupported_collision = true;
+ (void) unsupported_collision; // make gcc quiet
+
+ assert( unsupported_collision == false );
+
+ return false;
+}
+
+
+bool SHAPE::Collide( const SHAPE* aShape, int aClerance, VECTOR2I& aMTV ) const
+{
+ return CollideShapes( this, aShape, aClerance, true, aMTV );
+}
+
+
+bool SHAPE::Collide( const SHAPE* aShape, int aClerance ) const
+{
+ VECTOR2I dummy;
+
+ return CollideShapes( this, aShape, aClerance, false, dummy );
+}
+
+bool SHAPE_RECT::Collide( const SEG& aSeg, int aClearance ) const
+ {
+ //VECTOR2I pmin = VECTOR2I( std::min( aSeg.a.x, aSeg.b.x ), std::min( aSeg.a.y, aSeg.b.y ) );
+ //VECTOR2I pmax = VECTOR2I( std::max( aSeg.a.x, aSeg.b.x ), std::max( aSeg.a.y, aSeg.b.y ));
+ //BOX2I r( pmin, VECTOR2I( pmax.x - pmin.x, pmax.y - pmin.y ) );
+
+ //if( BBox( 0 ).SquaredDistance( r ) > aClearance * aClearance )
+ // return false;
+
+ if( BBox( 0 ).Contains( aSeg.A ) || BBox( 0 ).Contains( aSeg.B ) )
+ return true;
+
+ VECTOR2I vts[] = { VECTOR2I( m_p0.x, m_p0.y ),
+ VECTOR2I( m_p0.x, m_p0.y + m_h ),
+ VECTOR2I( m_p0.x + m_w, m_p0.y + m_h ),
+ VECTOR2I( m_p0.x + m_w, m_p0.y ),
+ VECTOR2I( m_p0.x, m_p0.y ) };
+
+ for( int i = 0; i < 4; i++ )
+ {
+ SEG s( vts[i], vts[i + 1], i );
+
+ if( s.Distance( aSeg ) < aClearance )
+ return true;
+ }
+
+ return false;
+ }
diff --git a/common/geometry/shape_file_io.cpp b/common/geometry/shape_file_io.cpp
new file mode 100644
index 0000000..a87fd74
--- /dev/null
+++ b/common/geometry/shape_file_io.cpp
@@ -0,0 +1,146 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <string>
+#include <cassert>
+
+#include <geometry/shape.h>
+#include <geometry/shape_file_io.h>
+
+SHAPE_FILE_IO::SHAPE_FILE_IO( const std::string& aFilename, SHAPE_FILE_IO::IO_MODE aMode )
+{
+ m_groupActive = false;
+
+ if( aFilename.length() )
+ {
+ switch( aMode )
+ {
+ case IOM_READ: m_file = fopen( aFilename.c_str(), "rb" ); break;
+ case IOM_WRITE: m_file = fopen( aFilename.c_str(), "wb" ); break;
+ case IOM_APPEND: m_file = fopen( aFilename.c_str(), "ab" ); break;
+ default:
+ return;
+ }
+ }
+ else
+ {
+ m_file = NULL;
+ }
+
+ m_mode = aMode;
+ // fixme: exceptions
+}
+
+
+SHAPE_FILE_IO::~SHAPE_FILE_IO()
+{
+ if( !m_file )
+ return;
+
+ if( m_groupActive && m_mode != IOM_READ )
+ fprintf( m_file, "endgroup\n" );
+
+ fclose( m_file );
+}
+
+
+SHAPE* SHAPE_FILE_IO::Read()
+{
+ /* char tmp[1024];
+
+ do {
+
+ if (fscanf(m_file, "%s", tmp) != 1)
+ return NULL;
+
+ if( !strcmp( tmp, "shape" )
+ break;
+ }
+
+ int type;
+
+ SHAPE *rv = NULL;
+
+ fscanf(m_file,"%d %s", &type, tmp);
+
+ printf("create shape %d\n", type);
+
+ switch(type)
+ {
+ case SHAPE::LINE_CHAIN:
+ rv = new SHAPE_LINE_CHAIN;
+ break;
+ }
+
+ if(!rv)
+ return NULL;
+
+ rv.Parse ( )
+
+ fprintf(m_file,"shape %d %s %s\n", aShape->Type(), aName.c_str(), sh.c_str() );
+*/
+ assert( false );
+ return NULL;
+}
+
+
+void SHAPE_FILE_IO::BeginGroup( const std::string aName )
+{
+ assert( m_mode != IOM_READ );
+
+ if( !m_file )
+ return;
+
+ fprintf( m_file, "group %s\n", aName.c_str() );
+ m_groupActive = true;
+}
+
+
+void SHAPE_FILE_IO::EndGroup()
+{
+ assert( m_mode != IOM_READ );
+
+ if( !m_file || !m_groupActive )
+ return;
+
+ fprintf( m_file, "endgroup\n" );
+ m_groupActive = false;
+}
+
+
+void SHAPE_FILE_IO::Write( const SHAPE* aShape, const std::string aName )
+{
+ assert( m_mode != IOM_READ );
+
+ if( !m_file )
+ return;
+
+ if( !m_groupActive )
+ fprintf( m_file,"group default\n" );
+
+ std::string sh = aShape->Format();
+
+ fprintf( m_file, "shape %d %s %s\n", aShape->Type(), aName.c_str(), sh.c_str() );
+ fflush( m_file );
+} \ No newline at end of file
diff --git a/common/geometry/shape_line_chain.cpp b/common/geometry/shape_line_chain.cpp
new file mode 100644
index 0000000..a097b0b
--- /dev/null
+++ b/common/geometry/shape_line_chain.cpp
@@ -0,0 +1,580 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <geometry/shape_line_chain.h>
+#include <geometry/shape_circle.h>
+
+using boost::optional;
+
+bool SHAPE_LINE_CHAIN::Collide( const VECTOR2I& aP, int aClearance ) const
+{
+ // fixme: ugly!
+ SEG s( aP, aP );
+ return this->Collide( s, aClearance );
+}
+
+
+bool SHAPE_LINE_CHAIN::Collide( const SEG& aSeg, int aClearance ) const
+{
+ BOX2I box_a( aSeg.A, aSeg.B - aSeg.A );
+ BOX2I::ecoord_type dist_sq = (BOX2I::ecoord_type) aClearance * aClearance;
+
+ for( int i = 0; i < SegmentCount(); i++ )
+ {
+ const SEG& s = CSegment( i );
+ BOX2I box_b( s.A, s.B - s.A );
+
+ BOX2I::ecoord_type d = box_a.SquaredDistance( box_b );
+
+ if( d < dist_sq )
+ {
+ if( s.Collide( aSeg, aClearance ) )
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+const SHAPE_LINE_CHAIN SHAPE_LINE_CHAIN::Reverse() const
+{
+ SHAPE_LINE_CHAIN a( *this );
+
+ reverse( a.m_points.begin(), a.m_points.end() );
+ a.m_closed = m_closed;
+
+ return a;
+}
+
+
+int SHAPE_LINE_CHAIN::Length() const
+{
+ int l = 0;
+
+ for( int i = 0; i < SegmentCount(); i++ )
+ l += CSegment( i ).Length();
+
+ return l;
+}
+
+
+void SHAPE_LINE_CHAIN::Replace( int aStartIndex, int aEndIndex, const VECTOR2I& aP )
+{
+ if( aEndIndex < 0 )
+ aEndIndex += PointCount();
+
+ if( aStartIndex < 0 )
+ aStartIndex += PointCount();
+
+ if( aStartIndex == aEndIndex )
+ m_points[aStartIndex] = aP;
+ else
+ {
+ m_points.erase( m_points.begin() + aStartIndex + 1, m_points.begin() + aEndIndex + 1 );
+ m_points[aStartIndex] = aP;
+ }
+}
+
+
+void SHAPE_LINE_CHAIN::Replace( int aStartIndex, int aEndIndex, const SHAPE_LINE_CHAIN& aLine )
+{
+ if( aEndIndex < 0 )
+ aEndIndex += PointCount();
+
+ if( aStartIndex < 0 )
+ aStartIndex += PointCount();
+
+ m_points.erase( m_points.begin() + aStartIndex, m_points.begin() + aEndIndex + 1 );
+ m_points.insert( m_points.begin() + aStartIndex, aLine.m_points.begin(), aLine.m_points.end() );
+}
+
+
+void SHAPE_LINE_CHAIN::Remove( int aStartIndex, int aEndIndex )
+{
+ if( aEndIndex < 0 )
+ aEndIndex += PointCount();
+
+ if( aStartIndex < 0 )
+ aStartIndex += PointCount();
+
+ m_points.erase( m_points.begin() + aStartIndex, m_points.begin() + aEndIndex + 1 );
+}
+
+
+int SHAPE_LINE_CHAIN::Distance( const VECTOR2I& aP ) const
+{
+ int d = INT_MAX;
+
+ if( IsClosed() && PointInside( aP ) )
+ return 0;
+
+ for( int s = 0; s < SegmentCount(); s++ )
+ d = std::min( d, CSegment( s ).Distance( aP ) );
+
+ return d;
+}
+
+
+int SHAPE_LINE_CHAIN::Split( const VECTOR2I& aP )
+{
+ int ii = -1;
+ int min_dist = 2;
+
+ int found_index = Find( aP );
+
+ for( int s = 0; s < SegmentCount(); s++ )
+ {
+ const SEG seg = CSegment( s );
+ int dist = seg.Distance( aP );
+
+ // make sure we are not producing a 'slightly concave' primitive. This might happen
+ // if aP lies very close to one of already existing points.
+ if( dist < min_dist && seg.A != aP && seg.B != aP )
+ {
+ min_dist = dist;
+ if( found_index < 0 )
+ ii = s;
+ else if( s < found_index )
+ ii = s;
+ }
+ }
+
+ if( ii < 0 )
+ ii = found_index;
+
+ if( ii >= 0 )
+ {
+ m_points.insert( m_points.begin() + ii + 1, aP );
+
+ return ii + 1;
+ }
+
+ return -1;
+}
+
+
+int SHAPE_LINE_CHAIN::Find( const VECTOR2I& aP ) const
+{
+ for( int s = 0; s < PointCount(); s++ )
+ if( CPoint( s ) == aP )
+ return s;
+
+ return -1;
+}
+
+
+int SHAPE_LINE_CHAIN::FindSegment( const VECTOR2I& aP ) const
+{
+ for( int s = 0; s < SegmentCount(); s++ )
+ if( CSegment( s ).Distance( aP ) <= 1 )
+ return s;
+
+ return -1;
+}
+
+
+const SHAPE_LINE_CHAIN SHAPE_LINE_CHAIN::Slice( int aStartIndex, int aEndIndex ) const
+{
+ SHAPE_LINE_CHAIN rv;
+
+ if( aEndIndex < 0 )
+ aEndIndex += PointCount();
+
+ if( aStartIndex < 0 )
+ aStartIndex += PointCount();
+
+ for( int i = aStartIndex; i <= aEndIndex; i++ )
+ rv.Append( m_points[i] );
+
+ return rv;
+}
+
+
+struct compareOriginDistance
+{
+ compareOriginDistance( VECTOR2I& aOrigin ) :
+ m_origin( aOrigin ) {};
+
+ bool operator()( const SHAPE_LINE_CHAIN::INTERSECTION& aA,
+ const SHAPE_LINE_CHAIN::INTERSECTION& aB )
+ {
+ return ( m_origin - aA.p ).EuclideanNorm() < ( m_origin - aB.p ).EuclideanNorm();
+ }
+
+ VECTOR2I m_origin;
+};
+
+
+int SHAPE_LINE_CHAIN::Intersect( const SEG& aSeg, INTERSECTIONS& aIp ) const
+{
+ for( int s = 0; s < SegmentCount(); s++ )
+ {
+ OPT_VECTOR2I p = CSegment( s ).Intersect( aSeg );
+
+ if( p )
+ {
+ INTERSECTION is;
+ is.our = CSegment( s );
+ is.their = aSeg;
+ is.p = *p;
+ aIp.push_back( is );
+ }
+ }
+
+ compareOriginDistance comp( aSeg.A );
+ sort( aIp.begin(), aIp.end(), comp );
+
+ return aIp.size();
+}
+
+
+int SHAPE_LINE_CHAIN::Intersect( const SHAPE_LINE_CHAIN& aChain, INTERSECTIONS& aIp ) const
+{
+ BOX2I bb_other = aChain.BBox();
+
+ for( int s1 = 0; s1 < SegmentCount(); s1++ )
+ {
+ const SEG& a = CSegment( s1 );
+ const BOX2I bb_cur( a.A, a.B - a.A );
+
+ if( !bb_other.Intersects( bb_cur ) )
+ continue;
+
+ for( int s2 = 0; s2 < aChain.SegmentCount(); s2++ )
+ {
+ const SEG& b = aChain.CSegment( s2 );
+ INTERSECTION is;
+
+ if( a.Collinear( b ) )
+ {
+ is.our = a;
+ is.their = b;
+
+ if( a.Contains( b.A ) ) { is.p = b.A; aIp.push_back( is ); }
+ if( a.Contains( b.B ) ) { is.p = b.B; aIp.push_back( is ); }
+ if( b.Contains( a.A ) ) { is.p = a.A; aIp.push_back( is ); }
+ if( b.Contains( a.B ) ) { is.p = a.B; aIp.push_back( is ); }
+ }
+ else
+ {
+ OPT_VECTOR2I p = a.Intersect( b );
+
+ if( p )
+ {
+ is.p = *p;
+ is.our = a;
+ is.their = b;
+ aIp.push_back( is );
+ }
+ }
+ }
+ }
+
+ return aIp.size();
+}
+
+
+int SHAPE_LINE_CHAIN::PathLength( const VECTOR2I& aP ) const
+{
+ int sum = 0;
+
+ for( int i = 0; i < SegmentCount(); i++ )
+ {
+ const SEG seg = CSegment( i );
+ int d = seg.Distance( aP );
+
+ if( d <= 1 )
+ {
+ sum += ( aP - seg.A ).EuclideanNorm();
+ return sum;
+ }
+ else
+ sum += seg.Length();
+ }
+
+ return -1;
+}
+
+
+bool SHAPE_LINE_CHAIN::PointInside( const VECTOR2I& aP ) const
+{
+ if( !m_closed || SegmentCount() < 3 )
+ return false;
+
+ int cur = CSegment( 0 ).Side( aP );
+
+ if( cur == 0 )
+ return false;
+
+ for( int i = 1; i < SegmentCount(); i++ )
+ {
+ const SEG s = CSegment( i );
+
+ if( aP == s.A || aP == s.B ) // edge does not belong to the interior!
+ return false;
+
+ if( s.Side( aP ) != cur )
+ return false;
+ }
+
+ return true;
+}
+
+
+bool SHAPE_LINE_CHAIN::PointOnEdge( const VECTOR2I& aP ) const
+{
+ if( !PointCount() )
+ return false;
+
+ else if( PointCount() == 1 )
+ return m_points[0] == aP;
+
+ for( int i = 0; i < SegmentCount(); i++ )
+ {
+ const SEG s = CSegment( i );
+
+ if( s.A == aP || s.B == aP )
+ return true;
+
+ if( s.Distance( aP ) <= 1 )
+ return true;
+ }
+
+ return false;
+}
+
+
+const optional<SHAPE_LINE_CHAIN::INTERSECTION> SHAPE_LINE_CHAIN::SelfIntersecting() const
+{
+ for( int s1 = 0; s1 < SegmentCount(); s1++ )
+ {
+ for( int s2 = s1 + 1; s2 < SegmentCount(); s2++ )
+ {
+ const VECTOR2I s2a = CSegment( s2 ).A, s2b = CSegment( s2 ).B;
+
+ if( s1 + 1 != s2 && CSegment( s1 ).Contains( s2a ) )
+ {
+ INTERSECTION is;
+ is.our = CSegment( s1 );
+ is.their = CSegment( s2 );
+ is.p = s2a;
+ return is;
+ }
+ else if( CSegment( s1 ).Contains( s2b ) )
+ {
+ INTERSECTION is;
+ is.our = CSegment( s1 );
+ is.their = CSegment( s2 );
+ is.p = s2b;
+ return is;
+ }
+ else
+ {
+ OPT_VECTOR2I p = CSegment( s1 ).Intersect( CSegment( s2 ), true );
+
+ if( p )
+ {
+ INTERSECTION is;
+ is.our = CSegment( s1 );
+ is.their = CSegment( s2 );
+ is.p = *p;
+ return is;
+ }
+ }
+ }
+ }
+
+ return optional<INTERSECTION>();
+}
+
+
+SHAPE_LINE_CHAIN& SHAPE_LINE_CHAIN::Simplify()
+{
+ std::vector<VECTOR2I> pts_unique;
+
+ if( PointCount() < 2 )
+ {
+ return *this;
+ }
+ else if( PointCount() == 2 )
+ {
+ if( m_points[0] == m_points[1] )
+ m_points.pop_back();
+
+ return *this;
+ }
+
+ int i = 0;
+ int np = PointCount();
+
+ // stage 1: eliminate duplicate vertices
+ while( i < np )
+ {
+ int j = i + 1;
+
+ while( j < np && CPoint( i ) == CPoint( j ) )
+ j++;
+
+ pts_unique.push_back( CPoint( i ) );
+ i = j;
+ }
+
+ m_points.clear();
+ np = pts_unique.size();
+
+ i = 0;
+
+ // stage 1: eliminate collinear segments
+ while( i < np - 2 )
+ {
+ const VECTOR2I p0 = pts_unique[i];
+ const VECTOR2I p1 = pts_unique[i + 1];
+ int n = i;
+
+ while( n < np - 2 && SEG( p0, p1 ).LineDistance( pts_unique[n + 2] ) <= 1 )
+ n++;
+
+ m_points.push_back( p0 );
+
+ if( n > i )
+ i = n;
+
+ if( n == np )
+ {
+ m_points.push_back( pts_unique[n - 1] );
+ return *this;
+ }
+
+ i++;
+ }
+
+ if( np > 1 )
+ m_points.push_back( pts_unique[np - 2] );
+
+ m_points.push_back( pts_unique[np - 1] );
+
+ return *this;
+}
+
+
+const VECTOR2I SHAPE_LINE_CHAIN::NearestPoint( const VECTOR2I& aP ) const
+{
+ int min_d = INT_MAX;
+ int nearest = 0;
+
+ for( int i = 0; i < SegmentCount(); i++ )
+ {
+ int d = CSegment( i ).Distance( aP );
+
+ if( d < min_d )
+ {
+ min_d = d;
+ nearest = i;
+ }
+ }
+
+ return CSegment( nearest ).NearestPoint( aP );
+}
+
+
+const VECTOR2I SHAPE_LINE_CHAIN::NearestPoint( const SEG& aSeg, int& dist ) const
+{
+ int nearest = 0;
+
+ dist = INT_MAX;
+ for( int i = 0; i < PointCount(); i++ )
+ {
+ int d = aSeg.LineDistance( CPoint( i ) );
+
+ if( d < dist )
+ {
+ dist = d;
+ nearest = i;
+ }
+ }
+
+ return CPoint( nearest );
+}
+
+
+const std::string SHAPE_LINE_CHAIN::Format() const
+{
+ std::stringstream ss;
+
+ ss << m_points.size() << " " << ( m_closed ? 1 : 0 ) << " ";
+
+ for( int i = 0; i < PointCount(); i++ )
+ ss << m_points[i].x << " " << m_points[i].y << " "; // Format() << " ";
+
+ return ss.str();
+}
+
+
+bool SHAPE_LINE_CHAIN::CompareGeometry ( const SHAPE_LINE_CHAIN & aOther ) const
+{
+ SHAPE_LINE_CHAIN a(*this), b( aOther );
+ a.Simplify();
+ b.Simplify();
+
+ if( a.m_points.size() != b.m_points.size() )
+ return false;
+
+ for( int i = 0; i < a.PointCount(); i++)
+ if( a.CPoint( i ) != b.CPoint( i ) )
+ return false;
+ return true;
+}
+
+
+bool SHAPE_LINE_CHAIN::Intersects( const SHAPE_LINE_CHAIN& aChain ) const
+{
+ INTERSECTIONS dummy;
+ return Intersect( aChain, dummy ) != 0;
+}
+
+
+SHAPE* SHAPE_LINE_CHAIN::Clone() const
+{
+ return new SHAPE_LINE_CHAIN( *this );
+}
+
+bool SHAPE_LINE_CHAIN::Parse( std::stringstream& aStream )
+{
+ int n_pts;
+
+ m_points.clear();
+ aStream >> n_pts;
+ aStream >> m_closed;
+
+ for( int i = 0; i < n_pts; i++ )
+ {
+ int x, y;
+ aStream >> x;
+ aStream >> y;
+ m_points.push_back( VECTOR2I( x, y ) );
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/common/geometry/shape_poly_set.cpp b/common/geometry/shape_poly_set.cpp
new file mode 100644
index 0000000..ce28926
--- /dev/null
+++ b/common/geometry/shape_poly_set.cpp
@@ -0,0 +1,805 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * Point in polygon algorithm adapted from Clipper Library (C) Angus Johnson,
+ * subject to Clipper library license.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <vector>
+#include <cstdio>
+#include <set>
+#include <list>
+#include <algorithm>
+
+#include <boost/foreach.hpp>
+
+#include <geometry/shape.h>
+#include <geometry/shape_line_chain.h>
+#include <geometry/shape_poly_set.h>
+
+using namespace ClipperLib;
+
+SHAPE_POLY_SET::SHAPE_POLY_SET() :
+ SHAPE( SH_POLY_SET )
+{
+
+}
+
+
+SHAPE_POLY_SET::~SHAPE_POLY_SET()
+{
+}
+
+
+int SHAPE_POLY_SET::NewOutline()
+{
+ SHAPE_LINE_CHAIN empty_path;
+ POLYGON poly;
+ poly.push_back( empty_path );
+ m_polys.push_back( poly );
+ return m_polys.size() - 1;
+}
+
+
+int SHAPE_POLY_SET::NewHole( int aOutline )
+{
+ m_polys.back().push_back( SHAPE_LINE_CHAIN() );
+
+ return m_polys.back().size() - 2;
+}
+
+
+int SHAPE_POLY_SET::Append( int x, int y, int aOutline, int aHole )
+{
+ if( aOutline < 0 )
+ aOutline += m_polys.size();
+
+ int idx;
+
+ if( aHole < 0 )
+ idx = 0;
+ else
+ idx = aHole + 1;
+
+ assert( aOutline < (int)m_polys.size() );
+ assert( idx < (int)m_polys[aOutline].size() );
+
+ m_polys[aOutline][idx].Append( x, y );
+
+ return m_polys[aOutline][idx].PointCount();
+}
+
+
+int SHAPE_POLY_SET::VertexCount( int aOutline , int aHole ) const
+{
+ if( aOutline < 0 )
+ aOutline += m_polys.size();
+
+ int idx;
+
+ if( aHole < 0 )
+ idx = 0;
+ else
+ idx = aHole + 1;
+
+ assert ( aOutline < (int)m_polys.size() );
+ assert ( idx < (int)m_polys[aOutline].size() );
+
+ return m_polys[aOutline][idx].PointCount();
+}
+
+
+const VECTOR2I& SHAPE_POLY_SET::CVertex( int index, int aOutline , int aHole ) const
+{
+ if( aOutline < 0 )
+ aOutline += m_polys.size();
+
+ int idx;
+
+ if( aHole < 0 )
+ idx = 0;
+ else
+ idx = aHole + 1;
+
+ assert( aOutline < (int)m_polys.size() );
+ assert( idx < (int)m_polys[aOutline].size() );
+
+ return m_polys[aOutline][idx].CPoint( index );
+}
+
+
+VECTOR2I& SHAPE_POLY_SET::Vertex( int index, int aOutline , int aHole )
+{
+ if( aOutline < 0 )
+ aOutline += m_polys.size();
+
+ int idx;
+
+ if( aHole < 0 )
+ idx = 0;
+ else
+ idx = aHole + 1;
+
+ assert( aOutline < (int)m_polys.size() );
+ assert( idx < (int)m_polys[aOutline].size() );
+
+ return m_polys[aOutline][idx].Point( index );
+}
+
+
+int SHAPE_POLY_SET::AddOutline( const SHAPE_LINE_CHAIN& aOutline )
+{
+ assert( aOutline.IsClosed() );
+
+ POLYGON poly;
+
+ poly.push_back( aOutline );
+
+ m_polys.push_back( poly );
+
+ return m_polys.size() - 1;
+}
+
+
+int SHAPE_POLY_SET::AddHole( const SHAPE_LINE_CHAIN& aHole, int aOutline )
+{
+ assert ( m_polys.size() );
+
+ if( aOutline < 0 )
+ aOutline += m_polys.size();
+
+ POLYGON& poly = m_polys[aOutline];
+
+ assert( poly.size() );
+
+ poly.push_back( aHole );
+
+ return poly.size() - 1;
+}
+
+
+const Path SHAPE_POLY_SET::convertToClipper( const SHAPE_LINE_CHAIN& aPath, bool aRequiredOrientation )
+{
+ Path c_path;
+
+ for( int i = 0; i < aPath.PointCount(); i++ )
+ {
+ const VECTOR2I& vertex = aPath.CPoint( i );
+ c_path.push_back( IntPoint( vertex.x, vertex.y ) );
+ }
+
+ if( Orientation( c_path ) != aRequiredOrientation )
+ ReversePath( c_path );
+
+ return c_path;
+}
+
+
+const SHAPE_LINE_CHAIN SHAPE_POLY_SET::convertFromClipper( const Path& aPath )
+{
+ SHAPE_LINE_CHAIN lc;
+
+ for( unsigned int i = 0; i < aPath.size(); i++ )
+ lc.Append( aPath[i].X, aPath[i].Y );
+
+ return lc;
+}
+
+void SHAPE_POLY_SET::booleanOp( ClipType aType, const SHAPE_POLY_SET& aOtherShape,
+ bool aFastMode )
+{
+ Clipper c;
+
+ if( !aFastMode )
+ c.StrictlySimple( true );
+
+ BOOST_FOREACH( const POLYGON& poly, m_polys )
+ {
+ for( unsigned int i = 0; i < poly.size(); i++ )
+ c.AddPath( convertToClipper( poly[i], i > 0 ? false : true ), ptSubject, true );
+ }
+
+ BOOST_FOREACH( const POLYGON& poly, aOtherShape.m_polys )
+ {
+ for( unsigned int i = 0; i < poly.size(); i++ )
+ c.AddPath( convertToClipper( poly[i], i > 0 ? false : true ), ptClip, true );
+ }
+
+ PolyTree solution;
+
+ c.Execute( aType, solution, pftNonZero, pftNonZero );
+
+ importTree( &solution );
+}
+
+
+void SHAPE_POLY_SET::booleanOp( ClipperLib::ClipType aType,
+ const SHAPE_POLY_SET& aShape,
+ const SHAPE_POLY_SET& aOtherShape,
+ bool aFastMode )
+{
+ Clipper c;
+
+ if( !aFastMode )
+ c.StrictlySimple( true );
+
+ BOOST_FOREACH( const POLYGON& poly, aShape.m_polys )
+ {
+ for( unsigned int i = 0; i < poly.size(); i++ )
+ c.AddPath( convertToClipper( poly[i], i > 0 ? false : true ), ptSubject, true );
+ }
+
+ BOOST_FOREACH( const POLYGON& poly, aOtherShape.m_polys )
+ {
+ for( unsigned int i = 0; i < poly.size(); i++ )
+ c.AddPath( convertToClipper( poly[i], i > 0 ? false : true ), ptClip, true );
+ }
+
+ PolyTree solution;
+
+ c.Execute( aType, solution, pftNonZero, pftNonZero );
+
+ importTree( &solution );
+}
+
+
+void SHAPE_POLY_SET::BooleanAdd( const SHAPE_POLY_SET& b, bool aFastMode )
+{
+ booleanOp( ctUnion, b, aFastMode );
+}
+
+
+void SHAPE_POLY_SET::BooleanSubtract( const SHAPE_POLY_SET& b, bool aFastMode )
+{
+ booleanOp( ctDifference, b, aFastMode );
+}
+
+
+void SHAPE_POLY_SET::BooleanIntersection( const SHAPE_POLY_SET& b, bool aFastMode )
+{
+ booleanOp( ctIntersection, b, aFastMode );
+}
+
+
+void SHAPE_POLY_SET::BooleanAdd( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b, bool aFastMode )
+{
+ booleanOp( ctUnion, a, b, aFastMode );
+}
+
+
+void SHAPE_POLY_SET::BooleanSubtract( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b, bool aFastMode )
+{
+ booleanOp( ctDifference, a, b, aFastMode );
+}
+
+
+void SHAPE_POLY_SET::BooleanIntersection( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b, bool aFastMode )
+{
+ booleanOp( ctIntersection, a, b, aFastMode );
+}
+
+
+void SHAPE_POLY_SET::Inflate( int aFactor, int aCircleSegmentsCount )
+{
+ ClipperOffset c;
+
+ BOOST_FOREACH( const POLYGON& poly, m_polys )
+ {
+ for( unsigned int i = 0; i < poly.size(); i++ )
+ c.AddPath( convertToClipper( poly[i], i > 0 ? false : true ), jtRound, etClosedPolygon );
+ }
+
+ PolyTree solution;
+
+ c.ArcTolerance = fabs( (double) aFactor ) / M_PI / aCircleSegmentsCount;
+
+ c.Execute( solution, aFactor );
+
+ importTree( &solution );
+}
+
+
+void SHAPE_POLY_SET::importTree( PolyTree* tree)
+{
+ m_polys.clear();
+
+ for( PolyNode* n = tree->GetFirst(); n; n = n->GetNext() )
+ {
+ if( !n->IsHole() )
+ {
+ POLYGON paths;
+ paths.push_back( convertFromClipper( n->Contour ) );
+
+ for( unsigned int i = 0; i < n->Childs.size(); i++ )
+ paths.push_back( convertFromClipper( n->Childs[i]->Contour ) );
+
+ m_polys.push_back(paths);
+ }
+ }
+}
+
+// Polygon fracturing code. Work in progress.
+
+struct FractureEdge
+{
+ FractureEdge( bool connected, SHAPE_LINE_CHAIN* owner, int index ) :
+ m_connected( connected ),
+ m_next( NULL )
+ {
+ m_p1 = owner->CPoint( index );
+ m_p2 = owner->CPoint( index + 1 );
+ }
+
+ FractureEdge( int y = 0 ) :
+ m_connected( false ),
+ m_next( NULL )
+ {
+ m_p1.x = m_p2.y = y;
+ }
+
+ FractureEdge( bool connected, const VECTOR2I& p1, const VECTOR2I& p2 ) :
+ m_connected( connected ),
+ m_p1( p1 ),
+ m_p2( p2 ),
+ m_next( NULL )
+ {
+ }
+
+ bool matches( int y ) const
+ {
+ int y_min = std::min( m_p1.y, m_p2.y );
+ int y_max = std::max( m_p1.y, m_p2.y );
+
+ return ( y >= y_min ) && ( y <= y_max );
+ }
+
+ bool m_connected;
+ VECTOR2I m_p1, m_p2;
+ FractureEdge* m_next;
+};
+
+
+typedef std::vector<FractureEdge*> FractureEdgeSet;
+
+static int processEdge( FractureEdgeSet& edges, FractureEdge* edge )
+{
+ int x = edge->m_p1.x;
+ int y = edge->m_p1.y;
+ int min_dist = std::numeric_limits<int>::max();
+ int x_nearest = 0;
+
+ FractureEdge* e_nearest = NULL;
+
+ for( FractureEdgeSet::iterator i = edges.begin(); i != edges.end(); ++i )
+ {
+ if( !(*i)->matches( y ) )
+ continue;
+
+ int x_intersect;
+
+ if( (*i)->m_p1.y == (*i)->m_p2.y ) // horizontal edge
+ x_intersect = std::max ( (*i)->m_p1.x, (*i)->m_p2.x );
+ else
+ x_intersect = (*i)->m_p1.x + rescale((*i)->m_p2.x - (*i)->m_p1.x, y - (*i)->m_p1.y, (*i)->m_p2.y - (*i)->m_p1.y );
+
+ int dist = ( x - x_intersect );
+
+ if( dist >= 0 && dist < min_dist && (*i)->m_connected )
+ {
+ min_dist = dist;
+ x_nearest = x_intersect;
+ e_nearest = (*i);
+ }
+ }
+
+ if( e_nearest && e_nearest->m_connected )
+ {
+ int count = 0;
+
+ FractureEdge* lead1 = new FractureEdge( true, VECTOR2I( x_nearest, y ), VECTOR2I( x, y ) );
+ FractureEdge* lead2 = new FractureEdge( true, VECTOR2I( x, y ), VECTOR2I( x_nearest, y ) );
+ FractureEdge* split_2 = new FractureEdge( true, VECTOR2I( x_nearest, y ), e_nearest->m_p2 );
+
+ edges.push_back( split_2 );
+ edges.push_back( lead1 );
+ edges.push_back( lead2 );
+
+ FractureEdge* link = e_nearest->m_next;
+
+ e_nearest->m_p2 = VECTOR2I( x_nearest, y );
+ e_nearest->m_next = lead1;
+ lead1->m_next = edge;
+
+ FractureEdge*last;
+ for( last = edge; last->m_next != edge; last = last->m_next )
+ {
+ last->m_connected = true;
+ count++;
+ }
+
+ last->m_connected = true;
+ last->m_next = lead2;
+ lead2->m_next = split_2;
+ split_2->m_next = link;
+
+ return count + 1;
+ }
+
+ return 0;
+}
+
+void SHAPE_POLY_SET::fractureSingle( POLYGON& paths )
+{
+ FractureEdgeSet edges;
+ FractureEdgeSet border_edges;
+ FractureEdge* root = NULL;
+
+ bool first = true;
+
+ if( paths.size() == 1 )
+ return;
+
+ int num_unconnected = 0;
+
+ BOOST_FOREACH( SHAPE_LINE_CHAIN& path, paths )
+ {
+ int index = 0;
+
+ FractureEdge *prev = NULL, *first_edge = NULL;
+
+ int x_min = std::numeric_limits<int>::max();
+
+ for( int i = 0; i < path.PointCount(); i++ )
+ {
+ const VECTOR2I& p = path.CPoint( i );
+
+ if( p.x < x_min )
+ x_min = p.x;
+ }
+
+ for( int i = 0; i < path.PointCount(); i++ )
+ {
+ FractureEdge* fe = new FractureEdge( first, &path, index++ );
+
+ if( !root )
+ root = fe;
+
+ if( !first_edge )
+ first_edge = fe;
+
+ if( prev )
+ prev->m_next = fe;
+
+ if( i == path.PointCount() - 1 )
+ fe->m_next = first_edge;
+
+ prev = fe;
+ edges.push_back( fe );
+
+ if( !first )
+ {
+ if( fe->m_p1.x == x_min )
+ border_edges.push_back( fe );
+ }
+
+ if( !fe->m_connected )
+ num_unconnected++;
+ }
+ first = false; // first path is always the outline
+ }
+
+ // keep connecting holes to the main outline, until there's no holes left...
+ while( num_unconnected > 0 )
+ {
+ int x_min = std::numeric_limits<int>::max();
+
+ FractureEdge* smallestX = NULL;
+
+ // find the left-most hole edge and merge with the outline
+ for( FractureEdgeSet::iterator i = border_edges.begin(); i != border_edges.end(); ++i )
+ {
+ int xt = (*i)->m_p1.x;
+
+ if( ( xt < x_min ) && ! (*i)->m_connected )
+ {
+ x_min = xt;
+ smallestX = *i;
+ }
+ }
+
+ num_unconnected -= processEdge( edges, smallestX );
+ }
+
+ paths.clear();
+ SHAPE_LINE_CHAIN newPath;
+
+ newPath.SetClosed( true );
+
+ FractureEdge* e;
+
+ for( e = root; e->m_next != root; e = e->m_next )
+ newPath.Append( e->m_p1 );
+
+ newPath.Append( e->m_p1 );
+
+ for( FractureEdgeSet::iterator i = edges.begin(); i != edges.end(); ++i )
+ delete *i;
+
+ paths.push_back( newPath );
+}
+
+
+void SHAPE_POLY_SET::Fracture( bool aFastMode )
+{
+ Simplify( aFastMode ); // remove overlapping holes/degeneracy
+
+ BOOST_FOREACH( POLYGON& paths, m_polys )
+ {
+ fractureSingle( paths );
+ }
+}
+
+
+void SHAPE_POLY_SET::Simplify( bool aFastMode )
+{
+ SHAPE_POLY_SET empty;
+
+ booleanOp( ctUnion, empty, aFastMode );
+}
+
+
+const std::string SHAPE_POLY_SET::Format() const
+{
+ std::stringstream ss;
+
+ ss << "polyset " << m_polys.size() << "\n";
+
+ for( unsigned i = 0; i < m_polys.size(); i++ )
+ {
+ ss << "poly " << m_polys[i].size() << "\n";
+ for( unsigned j = 0; j < m_polys[i].size(); j++)
+ {
+ ss << m_polys[i][j].PointCount() << "\n";
+ for( int v = 0; v < m_polys[i][j].PointCount(); v++)
+ ss << m_polys[i][j].CPoint( v ).x << " " << m_polys[i][j].CPoint( v ).y << "\n";
+ }
+ ss << "\n";
+ }
+
+ return ss.str();
+}
+
+
+bool SHAPE_POLY_SET::Parse( std::stringstream& aStream )
+{
+ std::string tmp;
+
+ aStream >> tmp;
+
+ if( tmp != "polyset" )
+ return false;
+
+ aStream >> tmp;
+
+ int n_polys = atoi( tmp.c_str() );
+
+ if( n_polys < 0 )
+ return false;
+
+ for( int i = 0; i < n_polys; i++ )
+ {
+ POLYGON paths;
+
+ aStream >> tmp;
+
+ if( tmp != "poly" )
+ return false;
+
+ aStream >> tmp;
+ int n_outlines = atoi( tmp.c_str() );
+
+ if( n_outlines < 0 )
+ return false;
+
+ for( int j = 0; j < n_outlines; j++ )
+ {
+ SHAPE_LINE_CHAIN outline;
+
+ outline.SetClosed( true );
+
+ aStream >> tmp;
+ int n_vertices = atoi( tmp.c_str() );
+ for( int v = 0; v < n_vertices; v++ )
+ {
+ VECTOR2I p;
+
+ aStream >> tmp; p.x = atoi( tmp.c_str() );
+ aStream >> tmp; p.y = atoi( tmp.c_str() );
+ outline.Append( p );
+ }
+
+ paths.push_back( outline );
+ }
+
+ m_polys.push_back( paths );
+ }
+ return true;
+}
+
+
+const BOX2I SHAPE_POLY_SET::BBox( int aClearance ) const
+{
+ BOX2I bb;
+
+ for( unsigned i = 0; i < m_polys.size(); i++ )
+ {
+ if( i == 0 )
+ bb = m_polys[i][0].BBox();
+ else
+ bb.Merge( m_polys[i][0].BBox() );
+ }
+
+ bb.Inflate( aClearance );
+ return bb;
+}
+
+
+void SHAPE_POLY_SET::RemoveAllContours()
+{
+ m_polys.clear();
+}
+
+
+void SHAPE_POLY_SET::DeletePolygon( int aIdx )
+{
+ m_polys.erase( m_polys.begin() + aIdx );
+}
+
+
+void SHAPE_POLY_SET::Append( const SHAPE_POLY_SET& aSet )
+{
+ m_polys.insert( m_polys.end(), aSet.m_polys.begin(), aSet.m_polys.end() );
+}
+
+
+void SHAPE_POLY_SET::Append( const VECTOR2I& aP, int aOutline, int aHole )
+{
+ Append( aP.x, aP.y, aOutline, aHole );
+}
+
+
+bool SHAPE_POLY_SET::Contains( const VECTOR2I& aP, int aSubpolyIndex ) const
+{
+ // fixme: support holes!
+
+ if( m_polys.size() == 0 ) // empty set?
+ return false;
+
+ if( aSubpolyIndex >= 0 )
+ return pointInPolygon( aP, m_polys[aSubpolyIndex][0] );
+
+ BOOST_FOREACH ( const POLYGON& polys, m_polys )
+ {
+ if( polys.size() == 0 )
+ continue;
+
+ if( pointInPolygon( aP, polys[0] ) )
+ return true;
+ }
+
+ return false;
+}
+
+
+bool SHAPE_POLY_SET::pointInPolygon( const VECTOR2I& aP, const SHAPE_LINE_CHAIN& aPath ) const
+{
+ int result = 0;
+ int cnt = aPath.PointCount();
+
+ if ( !aPath.BBox().Contains( aP ) ) // test with bounding box first
+ return false;
+
+ if( cnt < 3 )
+ return false;
+
+ VECTOR2I ip = aPath.CPoint( 0 );
+
+ for( int i = 1; i <= cnt; ++i )
+ {
+ VECTOR2I ipNext = ( i == cnt ? aPath.CPoint( 0 ) : aPath.CPoint( i ) );
+
+ if( ipNext.y == aP.y )
+ {
+ if( ( ipNext.x == aP.x ) || ( ip.y == aP.y &&
+ ( ( ipNext.x > aP.x ) == ( ip.x < aP.x ) ) ) )
+ return true;
+ }
+
+ if( ( ip.y < aP.y ) != ( ipNext.y < aP.y ) )
+ {
+ if( ip.x >= aP.x )
+ {
+ if( ipNext.x > aP.x )
+ result = 1 - result;
+ else
+ {
+ int64_t d = (int64_t)( ip.x - aP.x ) * (int64_t)( ipNext.y - aP.y ) -
+ (int64_t)( ipNext.x - aP.x ) * (int64_t)( ip.y - aP.y );
+
+ if( !d )
+ return true;
+
+ if( ( d > 0 ) == ( ipNext.y > ip.y ) )
+ result = 1 - result;
+ }
+ }
+ else
+ {
+ if( ipNext.x > aP.x )
+ {
+ int64_t d = (int64_t)( ip.x - aP.x ) * (int64_t)( ipNext.y - aP.y ) -
+ (int64_t)( ipNext.x - aP.x ) * (int64_t)( ip.y - aP.y );
+
+ if( !d )
+ return true;
+
+ if( ( d > 0 ) == ( ipNext.y > ip.y ) )
+ result = 1 - result;
+ }
+ }
+ }
+
+ ip = ipNext;
+ }
+
+ return result ? true : false;
+}
+
+
+void SHAPE_POLY_SET::Move( const VECTOR2I& aVector )
+{
+ BOOST_FOREACH( POLYGON &poly, m_polys )
+ {
+ BOOST_FOREACH( SHAPE_LINE_CHAIN &path, poly )
+ {
+ path.Move( aVector );
+ }
+ }
+}
+
+
+int SHAPE_POLY_SET::TotalVertices() const
+{
+ int c = 0;
+
+ BOOST_FOREACH( const POLYGON& poly, m_polys )
+ {
+ BOOST_FOREACH ( const SHAPE_LINE_CHAIN& path, poly )
+ {
+ c += path.PointCount();
+ }
+ }
+
+ return c;
+}
diff --git a/common/gestfich.cpp b/common/gestfich.cpp
new file mode 100644
index 0000000..3a09576
--- /dev/null
+++ b/common/gestfich.cpp
@@ -0,0 +1,420 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file gestfich.cpp
+ * @brief Functions for file management
+ */
+
+#include <wx/mimetype.h>
+#include <wx/filename.h>
+#include <wx/dir.h>
+
+// For compilers that support precompilation, includes "wx.h".
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <confirm.h>
+#include <common.h>
+#include <macros.h>
+
+#include <gestfich.h>
+
+void AddDelimiterString( wxString& string )
+{
+ if( !string.StartsWith( wxT( "\"" ) ) )
+ {
+ string.Prepend ( wxT( "\"" ) );
+ string.Append ( wxT( "\"" ) );
+ }
+}
+
+
+bool EDA_PATH_SELECTOR( const wxString& aTitle,
+ wxString& aPath,
+ int aFlags,
+ wxWindow* aParent,
+ const wxPoint& aPosition )
+{
+ int ii;
+ bool selected = false;
+
+ wxDirDialog* DirFrame = new wxDirDialog( aParent,
+ aTitle,
+ aPath,
+ aFlags,
+ aPosition );
+
+ ii = DirFrame->ShowModal();
+
+ if( ii == wxID_OK )
+ {
+ aPath = DirFrame->GetPath();
+ selected = true;
+ }
+
+ DirFrame->Destroy();
+ return selected;
+}
+
+
+wxString EDA_FILE_SELECTOR( const wxString& aTitle,
+ const wxString& aPath,
+ const wxString& aFileName,
+ const wxString& aExtension,
+ const wxString& aWildcard,
+ wxWindow* aParent,
+ int aStyle,
+ const bool aKeepWorkingDirectory,
+ const wxPoint& aPosition,
+ wxString* aMruPath )
+{
+ wxString fullfilename;
+ wxString curr_cwd = wxGetCwd();
+ wxString defaultname = aFileName;
+ wxString defaultpath = aPath;
+ wxString dotted_Ext = wxT(".") + aExtension;
+
+#ifdef __WINDOWS__
+ defaultname.Replace( wxT( "/" ), wxT( "\\" ) );
+ defaultpath.Replace( wxT( "/" ), wxT( "\\" ) );
+#endif
+
+ if( defaultpath.IsEmpty() )
+ {
+ if( aMruPath == NULL )
+ defaultpath = wxGetCwd();
+ else
+ defaultpath = *aMruPath;
+ }
+
+ wxSetWorkingDirectory( defaultpath );
+
+#if 0 && defined (DEBUG)
+ printf( "defaultpath=\"%s\" defaultname=\"%s\" Ext=\"%s\" Mask=\"%s\" flag=%d keep_working_directory=%d\n",
+ TO_UTF8( defaultpath ),
+ TO_UTF8( defaultname ),
+ TO_UTF8( aExtension ),
+ TO_UTF8( aWildcard ),
+ aStyle,
+ aKeepWorkingDirectory );
+#endif
+
+ fullfilename = wxFileSelector( aTitle,
+ defaultpath,
+ defaultname,
+ dotted_Ext,
+ aWildcard,
+ aStyle, // open mode wxFD_OPEN, wxFD_SAVE ..
+ aParent,
+ aPosition.x, aPosition.y );
+
+ if( aKeepWorkingDirectory )
+ wxSetWorkingDirectory( curr_cwd );
+
+ if( !fullfilename.IsEmpty() && aMruPath )
+ {
+ wxFileName fn = fullfilename;
+ *aMruPath = fn.GetPath();
+ }
+
+ return fullfilename;
+}
+
+
+wxString FindKicadFile( const wxString& shortname )
+{
+ // Test the presence of the file in the directory shortname of
+ // the KiCad binary path.
+#ifndef __WXMAC__
+ wxString fullFileName = Pgm().GetExecutablePath() + shortname;
+#else
+ wxString fullFileName = Pgm().GetExecutablePath() + wxT( "Contents/MacOS/" ) + shortname;
+#endif
+ if( wxFileExists( fullFileName ) )
+ return fullFileName;
+
+ // Test the presence of the file in the directory shortname
+ // defined by the environment variable KiCad.
+ if( Pgm().IsKicadEnvVariableDefined() )
+ {
+ fullFileName = Pgm().GetKicadEnvVariable() + shortname;
+
+ if( wxFileExists( fullFileName ) )
+ return fullFileName;
+ }
+
+ // Path list for KiCad binary files
+ const static wxChar* possibilities[] = {
+#if defined( __WINDOWS__ )
+ wxT( "c:/kicad/bin/" ),
+ wxT( "d:/kicad/bin/" ),
+ wxT( "c:/Program Files/kicad/bin/" ),
+ wxT( "d:/Program Files/kicad/bin/" ),
+#elif defined( __WXMAC__ )
+ // all internal paths are relative to main bundle kicad.app
+ wxT( "Contents/Applications/pcbnew.app/Contents/MacOS/" ),
+ wxT( "Contents/Applications/eeschema.app/Contents/MacOS/" ),
+ wxT( "Contents/Applications/gerbview.app/Contents/MacOS/" ),
+ wxT( "Contents/Applications/bitmap2component.app/Contents/MacOS/" ),
+ wxT( "Contents/Applications/pcb_calculator.app/Contents/MacOS/" ),
+ wxT( "Contents/Applications/pl_editor.app/Contents/MacOS/" ),
+#else
+ wxT( "/usr/bin/" ),
+ wxT( "/usr/local/bin/" ),
+ wxT( "/usr/local/kicad/bin/" ),
+#endif
+ };
+
+ // find binary file from possibilities list:
+ for( unsigned i=0; i<DIM(possibilities); ++i )
+ {
+#ifndef __WXMAC__
+ fullFileName = possibilities[i] + shortname;
+#else
+ // make relative paths absolute
+ fullFileName = Pgm().GetExecutablePath() + possibilities[i] + shortname;
+#endif
+
+ if( wxFileExists( fullFileName ) )
+ return fullFileName;
+ }
+
+ return shortname;
+}
+
+
+int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param,
+ wxProcess *callback )
+{
+ wxString fullFileName = FindKicadFile( ExecFile );
+
+ if( wxFileExists( fullFileName ) )
+ {
+ if( !param.IsEmpty() )
+ fullFileName += wxT( " " ) + param;
+
+ return ProcessExecute( fullFileName, wxEXEC_ASYNC, callback );
+ }
+#ifdef __WXMAC__
+ else
+ {
+ AddDelimiterString( fullFileName );
+
+ if( !param.IsEmpty() )
+ fullFileName += wxT( " " ) + param;
+
+ return ProcessExecute( wxT( "/usr/bin/open -a " ) + fullFileName, wxEXEC_ASYNC, callback );
+ }
+#endif
+
+ wxString msg;
+ msg.Printf( _( "Command <%s> could not found" ), GetChars( fullFileName ) );
+ DisplayError( frame, msg, 20 );
+ return -1;
+}
+
+
+wxString KicadDatasPath()
+{
+ bool found = false;
+ wxString data_path;
+
+ if( Pgm().IsKicadEnvVariableDefined() ) // Path defined by the KICAD environment variable.
+ {
+ data_path = Pgm().GetKicadEnvVariable();
+ found = true;
+ }
+ else // Path of executables.
+ {
+#ifndef __WXMAC__
+ wxString tmp = Pgm().GetExecutablePath();
+#ifdef __WINDOWS__
+ tmp.MakeLower();
+#endif
+ if( tmp.Contains( wxT( "kicad" ) ) )
+ {
+#ifdef __WINDOWS__
+ tmp = Pgm().GetExecutablePath();
+#endif
+ if( tmp.Last() == '/' )
+ tmp.RemoveLast();
+
+ data_path = tmp.BeforeLast( '/' ); // id cd ../
+ data_path += UNIX_STRING_DIR_SEP;
+
+ // Old versions of KiCad use kicad/ as default for data
+ // and last versions kicad/share/
+ // So we search for kicad/share/ first
+ wxString old_path = data_path;
+ data_path += wxT( "share/" );
+
+ if( wxDirExists( data_path ) )
+ {
+ found = true;
+ }
+ else if( wxDirExists( old_path ) )
+ {
+ data_path = old_path;
+ found = true;
+ }
+ }
+ }
+
+ if( !found )
+ {
+ // find KiCad from possibilities list:
+ // /usr/local/kicad/ or c:/kicad/
+
+ const static wxChar* possibilities[] = {
+#ifdef __WINDOWS__
+ wxT( "c:/kicad/share/" ),
+ wxT( "d:/kicad/share/" ),
+ wxT( "c:/kicad/" ),
+ wxT( "d:/kicad/" ),
+ wxT( "c:/Program Files/kicad/share/" ),
+ wxT( "d:/Program Files/kicad/share/" ),
+ wxT( "c:/Program Files/kicad/" ),
+ wxT( "d:/Program Files/kicad/" ),
+#else
+ wxT( "/usr/share/kicad/" ),
+ wxT( "/usr/local/share/kicad/" ),
+ wxT( "/usr/local/kicad/share/" ), // default data path for "universal
+ // tarballs" and build for a server
+ // (new)
+ wxT( "/usr/local/kicad/" ), // default data path for "universal
+ // tarballs" and build for a server
+ // (old)
+#endif
+ };
+
+ for( unsigned i=0; i<DIM(possibilities); ++i )
+ {
+ data_path = possibilities[i];
+
+ if( wxDirExists( data_path ) )
+ {
+ found = true;
+ break;
+ }
+ }
+#else
+ // On OSX point to Contents/SharedSupport folder of main bundle
+ data_path = GetOSXKicadDataDir();
+ found = true;
+#endif
+ }
+
+ if( found )
+ {
+ data_path.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
+
+ if( data_path.Last() != '/' )
+ data_path += UNIX_STRING_DIR_SEP;
+ }
+ else
+ {
+ data_path.Empty();
+ }
+
+ return data_path;
+}
+
+
+bool OpenPDF( const wxString& file )
+{
+ wxString command;
+ wxString filename = file;
+
+ Pgm().ReadPdfBrowserInfos();
+
+ if( !Pgm().UseSystemPdfBrowser() ) // Run the preferred PDF Browser
+ {
+ AddDelimiterString( filename );
+ command = Pgm().GetPdfBrowserName() + wxT( " " ) + filename;
+ }
+ else
+ {
+ wxFileType* filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( wxT( "pdf" ) );
+
+ if( filetype )
+ command = filetype->GetOpenCommand( filename );
+
+ delete filetype;
+ }
+
+ if( !command.IsEmpty() )
+ {
+ if( ProcessExecute( command ) )
+ {
+ return true;
+ }
+ else
+ {
+ wxString msg;
+ msg.Printf( _( "Problem while running the PDF viewer\nCommand is '%s'" ),
+ GetChars( command ) );
+ DisplayError( NULL, msg );
+ }
+ }
+ else
+ {
+ wxString msg;
+ msg.Printf( _( "Unable to find a PDF viewer for <%s>" ), GetChars( filename ) );
+ DisplayError( NULL, msg );
+ }
+
+ return false;
+}
+
+
+void OpenFile( const wxString& file )
+{
+ wxString command;
+ wxString filename = file;
+
+ wxFileName CurrentFileName( filename );
+ wxString ext, type;
+
+ ext = CurrentFileName.GetExt();
+ wxFileType* filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( ext );
+
+ bool success = false;
+
+ wxFileType::MessageParameters params( filename, type );
+
+ if( filetype )
+ success = filetype->GetOpenCommand( &command, params );
+
+ delete filetype;
+
+ if( success && !command.IsEmpty() )
+ ProcessExecute( command );
+}
+
+
+wxString QuoteFullPath( wxFileName& fn, wxPathFormat format )
+{
+ return wxT( "\"" ) + fn.GetFullPath( format ) + wxT( "\"" );
+}
diff --git a/common/getrunningmicrosecs.cpp b/common/getrunningmicrosecs.cpp
new file mode 100644
index 0000000..152a1d1
--- /dev/null
+++ b/common/getrunningmicrosecs.cpp
@@ -0,0 +1,97 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <config.h>
+#include <common.h>
+
+#if defined(_WIN32)
+
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+
+unsigned GetRunningMicroSecs()
+{
+ FILETIME now;
+
+ GetSystemTimeAsFileTime( &now );
+
+ typedef unsigned long long UINT64;
+
+ UINT64 t = (UINT64(now.dwHighDateTime) << 32) + now.dwLowDateTime;
+
+ t /= 10;
+
+ return unsigned( t );
+}
+
+
+#if 0
+// test program
+#include <stdio.h>
+int main( int argc, char** argv )
+{
+ unsigned then = GetRunningMicroSecs();
+
+ Sleep( 2000 ); // Windows Sleep( msecs )
+
+ printf( "delta: %u\n", GetRunningMicroSecs() - then );
+
+ return 0;
+}
+#endif
+
+
+#elif defined(HAVE_CLOCK_GETTIME)
+
+#include <time.h>
+
+unsigned GetRunningMicroSecs()
+{
+ struct timespec now;
+
+ clock_gettime( CLOCK_MONOTONIC, &now );
+
+ unsigned usecs = ((unsigned)now.tv_nsec)/1000 + ((unsigned)now.tv_sec) * 1000000;
+// unsigned msecs = (now.tv_nsec / (1000*1000)) + now.tv_sec * 1000;
+
+ return usecs;
+}
+
+
+#elif defined(HAVE_GETTIMEOFDAY_FUNC)
+
+#include <sys/time.h>
+unsigned GetRunningMicroSecs()
+{
+ timeval tv;
+
+ gettimeofday( &tv, 0 );
+
+ return (tv.tv_sec * 1000000) + tv.tv_usec;
+}
+
+#endif
+
diff --git a/common/gr_basic.cpp b/common/gr_basic.cpp
new file mode 100644
index 0000000..1e913cb
--- /dev/null
+++ b/common/gr_basic.cpp
@@ -0,0 +1,1268 @@
+/********************************/
+/* Low level graphics routines */
+/********************************/
+
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <trigo.h>
+#include <macros.h>
+#include <base_struct.h>
+#include <class_base_screen.h>
+#include <bezier_curves.h>
+#include <math_for_graphics.h>
+#include <wx/graphics.h>
+#if defined(__WXMAC__) && defined(USE_WX_GRAPHICS_CONTEXT)
+#include <wx/dcgraph.h>
+#endif
+
+static const bool FILLED = true;
+static const bool NOT_FILLED = false;
+
+/* Important Note:
+ * These drawing functions clip draw item before send these items to wxDC draw
+ * functions. For guy who asks why i did it, see a sample of problems encountered
+ * when pixels
+ * coordinates overflow 16 bits values:
+ * http://trac.wxwidgets.org/ticket/10446
+ * Problems can be found under Windows **and** Linux (mainly when drawing arcs)
+ * (mainly at low zoom values (2, 1 or 0.5), in Pcbnew)
+ * some of these problems could be now fixed in recent distributions.
+ *
+ * Currently (feb 2009) there are overflow problems when drawing solid (filled)
+ * polygons under linux without clipping
+ *
+ * So before removing clipping functions, be aware these bug (they are not in
+ * KiCad or wxWidgets) are fixed by testing how are drawn complex lines arcs
+ * and solid polygons under Windows and Linux and remember users can have old
+ * versions with bugs
+ */
+
+
+/* Definitions for enabling and disabling debugging features in gr_basic.cpp.
+ * Please remember to set these back to 0 before making LAUNCHPAD commits.
+ */
+#define DEBUG_DUMP_CLIP_ERROR_COORDS 0 // Set to 1 to dump clip algorithm errors.
+#define DEBUG_DUMP_CLIP_COORDS 0 // Set to 1 to dump clipped coordinates.
+
+
+// For draw mode = XOR GR_XOR or GR_NXOR by background color
+GR_DRAWMODE g_XorMode = GR_NXOR;
+
+
+static void ClipAndDrawPoly( EDA_RECT * ClipBox, wxDC * DC, wxPoint Points[],
+ int n );
+
+/* These functions are used by corresponding functions
+ * ( GRSCircle is called by GRCircle for instance) after mapping coordinates
+ * from user units to screen units(pixels coordinates)
+ */
+static void GRSRect( EDA_RECT* aClipBox, wxDC* aDC, int x1, int y1,
+ int x2, int y2, int aWidth, EDA_COLOR_T aColor,
+ wxPenStyle aStyle = wxPENSTYLE_SOLID );
+
+/**/
+
+static int GRLastMoveToX, GRLastMoveToY;
+static bool s_ForceBlackPen; /* if true: draws in black instead of
+ * color for printing. */
+static int xcliplo = 0,
+ ycliplo = 0,
+ xcliphi = 2000,
+ ycliphi = 2000;
+
+static EDA_COLOR_T s_DC_lastcolor = UNSPECIFIED_COLOR;
+static EDA_COLOR_T s_DC_lastbrushcolor = UNSPECIFIED_COLOR;
+static bool s_DC_lastbrushfill = false;
+static wxDC* s_DC_lastDC = NULL;
+
+/***
+ * Utility for the line clipping code, returns the boundary code of
+ * a point. Bit allocation is arbitrary
+ */
+static inline int clipOutCode( const EDA_RECT *aClipBox, int x, int y )
+{
+ int code;
+ if( y < aClipBox->GetY() )
+ code = 2;
+ else if( y > aClipBox->GetBottom() )
+ code = 1;
+ else
+ code = 0;
+ if( x < aClipBox->GetX() )
+ code |= 4;
+ else if( x > aClipBox->GetRight() )
+ code |= 8;
+ return code;
+}
+
+
+/**
+ * Test if any part of a line falls within the bounds of a rectangle.
+ *
+ * Please note that this is only accurate for lines that are one pixel wide.
+ *
+ * @param aClipBox - The rectangle to test.
+ * @param x1 - X coordinate of one end of a line.
+ * @param y1 - Y coordinate of one end of a line.
+ * @param x2 - X coordinate of the other end of a line.
+ * @param y2 - Y coordinate of the other end of a line.
+ *
+ * @return - False if any part of the line lies within the rectangle.
+ */
+static bool clipLine( const EDA_RECT *aClipBox, int &x1, int &y1, int &x2, int &y2 )
+{
+ // Stock Cohen-Sutherland algorithm; check *any* CG book for details
+ int outcode1 = clipOutCode( aClipBox, x1, y1 );
+ int outcode2 = clipOutCode( aClipBox, x2, y2 );
+
+ while( outcode1 || outcode2 )
+ {
+ // Fast reject
+ if( outcode1 & outcode2 )
+ return true;
+
+ // Choose a side to clip
+ int thisoutcode, x, y;
+ if( outcode1 )
+ thisoutcode = outcode1;
+ else
+ thisoutcode = outcode2;
+
+ /* One clip round
+ * Since we use the full range of 32 bit ints, the proportion
+ * computation has to be done in 64 bits to avoid horrible
+ * results */
+ if( thisoutcode & 1 ) // Clip the bottom
+ {
+ y = aClipBox->GetBottom();
+ x = x1 + (x2 - x1) * int64_t(y - y1) / (y2 - y1);
+ }
+ else if( thisoutcode & 2 ) // Clip the top
+ {
+ y = aClipBox->GetY();
+ x = x1 + (x2 - x1) * int64_t(y - y1) / (y2 - y1);
+ }
+ else if( thisoutcode & 8 ) // Clip the right
+ {
+ x = aClipBox->GetRight();
+ y = y1 + (y2 - y1) * int64_t(x - x1) / (x2 - x1);
+ }
+ else // if( thisoutcode & 4), obviously, clip the left
+ {
+ x = aClipBox->GetX();
+ y = y1 + (y2 - y1) * int64_t(x - x1) / (x2 - x1);
+ }
+
+ // Put the result back and update the boundary code
+ // No ambiguity, otherwise it would have been a fast reject
+ if( thisoutcode == outcode1 )
+ {
+ x1 = x;
+ y1 = y;
+ outcode1 = clipOutCode( aClipBox, x1, y1 );
+ }
+ else
+ {
+ x2 = x;
+ y2 = y;
+ outcode2 = clipOutCode( aClipBox, x2, y2 );
+ }
+ }
+ return false;
+}
+
+static void WinClipAndDrawLine( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int width )
+{
+ GRLastMoveToX = x2;
+ GRLastMoveToY = y2;
+
+ if( ClipBox )
+ {
+ EDA_RECT clipbox(*ClipBox);
+ clipbox.Inflate(width/2);
+ if( clipLine( &clipbox, x1, y1, x2, y2 ) )
+ return;
+ }
+
+ DC->DrawLine( x1, y1, x2, y2 );
+}
+
+
+/* Forcing a reset of the current pen.
+ * Must be called after changing the graphical device before any trace.
+ */
+void GRResetPenAndBrush( wxDC* DC )
+{
+ GRSetBrush( DC, BLACK ); // Force no fill
+ s_DC_lastbrushcolor = UNSPECIFIED_COLOR;
+ s_DC_lastcolor = UNSPECIFIED_COLOR;
+ s_DC_lastDC = NULL;
+}
+
+
+/**
+ * Function GRSetColorPen
+ * sets a pen style, width, color, and alpha into the given device context.
+ */
+void GRSetColorPen( wxDC* DC, EDA_COLOR_T Color, int width, wxPenStyle style )
+{
+ // Under OSX and while printing when wxPen is set to 0, renderer follows the request drawing
+ // nothing & in the bitmap world the minimum is enough to light a pixel, in vectorial one not
+ if( width <= 1 )
+ width = DC->DeviceToLogicalXRel( 1 );
+
+ if( s_ForceBlackPen )
+ Color = BLACK;
+
+ wxColour wx_color = MakeColour( Color );
+ const wxPen& curr_pen = DC->GetPen();
+
+ if( !curr_pen.IsOk() || curr_pen.GetColour() != wx_color
+ || curr_pen.GetWidth() != width
+ || curr_pen.GetStyle() != style )
+ {
+ wxPen pen;
+ pen.SetColour( wx_color );
+ pen.SetWidth( width );
+ pen.SetStyle( style );
+ DC->SetPen( pen );
+ }
+ else
+ // Should be not needed, but on Linux, in printing process
+ // the curr pen settings needs to be sometimes re-initialized
+ // Clearly, this is due to a bug, related to SetBrush(),
+ // but we have to live with it, at least on wxWidgets 3.0
+ DC->SetPen( curr_pen );
+}
+
+
+void GRSetBrush( wxDC* DC, EDA_COLOR_T Color, bool fill )
+{
+ if( s_ForceBlackPen )
+ Color = BLACK;
+
+ if( s_DC_lastbrushcolor != Color
+ || s_DC_lastbrushfill != fill
+ || s_DC_lastDC != DC )
+ {
+ wxBrush brush;
+
+ brush.SetColour( MakeColour( Color ) );
+
+ if( fill )
+ brush.SetStyle( wxBRUSHSTYLE_SOLID );
+ else
+ brush.SetStyle( wxBRUSHSTYLE_TRANSPARENT );
+
+ DC->SetBrush( brush );
+
+ s_DC_lastbrushcolor = Color;
+ s_DC_lastbrushfill = fill;
+ s_DC_lastDC = DC;
+ }
+}
+
+
+/**
+ * Function GRForceBlackPen
+ * @param flagforce True to force a black pen whenever the asked color
+ */
+void GRForceBlackPen( bool flagforce )
+{
+ s_ForceBlackPen = flagforce;
+}
+
+
+/**
+ * Function GetGRForceBlackPenState
+ * @return s_ForceBlackPen (True if a black pen was forced)
+ */
+bool GetGRForceBlackPenState( void )
+{
+ return s_ForceBlackPen;
+}
+
+
+/*************************************/
+/* Set the device context draw mode. */
+/*************************************/
+void GRSetDrawMode( wxDC* DC, GR_DRAWMODE draw_mode )
+{
+ if( draw_mode & GR_OR )
+#if defined(__WXMAC__) && (wxMAC_USE_CORE_GRAPHICS || wxCHECK_VERSION( 2, 9, 0 ) )
+
+ DC->SetLogicalFunction( wxCOPY );
+#elif defined( USE_WX_GRAPHICS_CONTEXT )
+
+ DC->SetLogicalFunction( wxCOPY );
+#else
+
+ DC->SetLogicalFunction( wxOR );
+#endif
+ else if( draw_mode & GR_XOR )
+#if defined( USE_WX_GRAPHICS_CONTEXT )
+
+ DC->SetLogicalFunction( wxCOPY );
+#else
+
+ DC->SetLogicalFunction( wxXOR );
+#endif
+ else if( draw_mode & GR_NXOR )
+#if defined(__WXMAC__) && (wxMAC_USE_CORE_GRAPHICS || wxCHECK_VERSION( 2, 9, 0 ) )
+
+ DC->SetLogicalFunction( wxXOR );
+#elif defined( USE_WX_GRAPHICS_CONTEXT )
+
+ DC->SetLogicalFunction( wxCOPY );
+#else
+
+ DC->SetLogicalFunction( wxEQUIV );
+#endif
+ else if( draw_mode & GR_INVERT )
+#if defined( USE_WX_GRAPHICS_CONTEXT )
+
+ DC->SetLogicalFunction( wxCOPY );
+#else
+
+ DC->SetLogicalFunction( wxINVERT );
+#endif
+ else if( draw_mode & GR_COPY )
+ DC->SetLogicalFunction( wxCOPY );
+
+#ifdef USE_WX_OVERLAY
+ DC->SetLogicalFunction( wxCOPY );
+#endif
+}
+
+
+void GRPutPixel( EDA_RECT* ClipBox, wxDC* DC, int x, int y, EDA_COLOR_T Color )
+{
+ if( ClipBox && !ClipBox->Contains( x, y ) )
+ return;
+
+ GRSetColorPen( DC, Color );
+ DC->DrawPoint( x, y );
+}
+
+
+/*
+ * Draw a line, in object space.
+ */
+void GRLine( EDA_RECT* ClipBox,
+ wxDC* DC,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int width,
+ EDA_COLOR_T Color )
+{
+ GRSetColorPen( DC, Color, width );
+ WinClipAndDrawLine( ClipBox, DC, x1, y1, x2, y2, width );
+ GRLastMoveToX = x2;
+ GRLastMoveToY = y2;
+}
+
+
+void GRLine( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd, int aWidth, EDA_COLOR_T aColor )
+{
+ GRLine( aClipBox, aDC, aStart.x, aStart.y, aEnd.x, aEnd.y, aWidth, aColor );
+}
+
+
+void GRDashedLine( EDA_RECT* ClipBox, wxDC* DC,
+ int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color )
+{
+ GRLastMoveToX = x2;
+ GRLastMoveToY = y2;
+ s_DC_lastcolor = UNSPECIFIED_COLOR;
+ GRSetColorPen( DC, Color, width, wxPENSTYLE_SHORT_DASH );
+ WinClipAndDrawLine( ClipBox, DC, x1, y1, x2, y2, width );
+ s_DC_lastcolor = UNSPECIFIED_COLOR;
+ GRSetColorPen( DC, Color, width );
+}
+
+
+/*
+ * Move to a new position, in object space.
+ */
+void GRMoveTo( int x, int y )
+{
+ GRLastMoveToX = x;
+ GRLastMoveToY = y;
+}
+
+
+/*
+ * Draw line to a new position, in object space.
+ */
+void GRLineTo( EDA_RECT* ClipBox, wxDC* DC, int x, int y, int width, EDA_COLOR_T Color )
+{
+ GRLine( ClipBox, DC, GRLastMoveToX, GRLastMoveToY, x, y, width, Color );
+}
+
+
+void GRMixedLine( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color )
+{
+ GRSetColorPen( DC, Color, width, wxPENSTYLE_DOT_DASH );
+ GRLine( ClipBox, DC, x1, y1, x2, y2, width, Color );
+ GRSetColorPen( DC, Color, width );
+}
+
+
+
+/**
+ * Function GRLineArray
+ * draws an array of lines (not a polygon).
+ * @param aClipBox = the clip box
+ * @param aDC = the device context into which drawing should occur.
+ * @param aLines = a list of pair of coordinate in user space: a pair for each line.
+ * @param aWidth = the width of each line.
+ * @param aColor = an index into our color table of RGB colors.
+ * @see EDA_COLOR_T and colors.h
+ */
+void GRLineArray( EDA_RECT* aClipBox, wxDC* aDC, std::vector<wxPoint>& aLines,
+ int aWidth, EDA_COLOR_T aColor )
+{
+ GRSetColorPen( aDC, aColor, aWidth );
+
+ if( aClipBox )
+ aClipBox->Inflate(aWidth/2);
+
+#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
+ wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
+ if( gcdc )
+ {
+ wxGraphicsContext *gc = gcdc->GetGraphicsContext();
+
+ // create path
+ wxGraphicsPath path = gc->CreatePath();
+ for( unsigned i = 0; i < aLines.size(); i += 2 )
+ {
+ int x1 = aLines[i].x;
+ int y1 = aLines[i].y;
+ int x2 = aLines[i+1].x;
+ int y2 = aLines[i+1].y;
+ if( ( aClipBox == NULL ) || !clipLine( aClipBox, x1, y1, x2, y2 ) )
+ {
+ path.MoveToPoint( x1, y1 );
+ path.AddLineToPoint( x2, y2 );
+ }
+ }
+ // draw path
+ gc->StrokePath( path );
+ }
+ else
+#endif
+ {
+ for( unsigned i = 0; i < aLines.size(); i += 2 )
+ {
+ int x1 = aLines[i].x;
+ int y1 = aLines[i].y;
+ int x2 = aLines[i+1].x;
+ int y2 = aLines[i+1].y;
+ if( ( aClipBox == NULL ) || !clipLine( aClipBox, x1, y1, x2, y2 ) )
+ aDC->DrawLine( x1, y1, x2, y2 );
+ }
+ }
+ GRMoveTo( aLines[aLines.size() - 1].x, aLines[aLines.size() - 1].y );
+
+ if( aClipBox )
+ aClipBox->Inflate(-aWidth/2);
+}
+
+// Draw the outline of a thick segment wih rounded ends
+void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, int aPenSize, EDA_COLOR_T Color )
+{
+ GRLastMoveToX = x2;
+ GRLastMoveToY = y2;
+
+ if( ClipBox )
+ {
+ EDA_RECT clipbox(*ClipBox);
+ clipbox.Inflate(width/2);
+
+ if( clipLine( &clipbox, x1, y1, x2, y2 ) )
+ return;
+ }
+
+
+ if( width <= 2 ) /* single line or 2 pixels */
+ {
+ GRSetColorPen( DC, Color, width );
+ DC->DrawLine( x1, y1, x2, y2 );
+ return;
+ }
+
+ GRSetBrush( DC, Color, NOT_FILLED );
+ GRSetColorPen( DC, Color, aPenSize );
+
+ int radius = (width + 1) >> 1;
+ int dx = x2 - x1;
+ int dy = y2 - y1;
+ double angle = -ArcTangente( dy, dx );
+ wxPoint start;
+ wxPoint end;
+ wxPoint org( x1, y1);
+ int len = (int) hypot( dx, dy );
+
+ // We know if the DC is mirrored, to draw arcs
+ int slx = DC->DeviceToLogicalX( 1 ) - DC->DeviceToLogicalX( 0 );
+ int sly = DC->DeviceToLogicalY( 1 ) - DC->DeviceToLogicalY( 0 );
+ bool mirrored = (slx > 0 && sly < 0) || (slx < 0 && sly > 0);
+
+ // first edge
+ start.x = 0;
+ start.y = radius;
+ end.x = len;
+ end.y = radius;
+ RotatePoint( &start, angle);
+ RotatePoint( &end, angle);
+
+ start += org;
+ end += org;
+
+ DC->DrawLine( start, end );
+
+ // first rounded end
+ end.x = 0;
+ end.y = -radius;
+ RotatePoint( &end, angle);
+ end += org;
+
+ if( !mirrored )
+ DC->DrawArc( end, start, org );
+ else
+ DC->DrawArc( start, end, org );
+
+
+ // second edge
+ start.x = len;
+ start.y = -radius;
+ RotatePoint( &start, angle);
+ start += org;
+
+ DC->DrawLine( start, end );
+
+ // second rounded end
+ end.x = len;
+ end.y = radius;
+ RotatePoint( &end, angle);
+ end += org;
+
+ if( !mirrored )
+ DC->DrawArc( end.x, end.y, start.x, start.y, x2, y2 );
+ else
+ DC->DrawArc( start.x, start.y, end.x, end.y, x2, y2 );
+}
+
+
+void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color )
+{
+ GRCSegm( ClipBox, DC, x1, y1, x2, y2, width, 0, Color );
+}
+
+
+void GRCSegm( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
+ int aWidth, EDA_COLOR_T aColor )
+{
+ GRCSegm( aClipBox, aDC, aStart.x, aStart.y, aEnd.x, aEnd.y, aWidth, 0, aColor );
+}
+
+
+/*
+ * Draw segment (full) with rounded ends in object space (real coords.).
+ */
+void GRFillCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color )
+{
+ GRSetColorPen( DC, Color, width );
+ WinClipAndDrawLine( ClipBox, DC, x1, y1, x2, y2, width );
+}
+
+
+void GRFilledSegment( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
+ int aWidth, EDA_COLOR_T aColor )
+{
+ GRSetColorPen( aDC, aColor, aWidth );
+ WinClipAndDrawLine( aClipBox, aDC, aStart.x, aStart.y, aEnd.x, aEnd.y, aWidth );
+}
+
+
+static bool IsGRSPolyDrawable( EDA_RECT* ClipBox, int n, wxPoint Points[] )
+{
+ if( !ClipBox )
+ return true;
+
+ if( n <= 0 )
+ return false;
+
+ int Xmin, Xmax, Ymin, Ymax;
+
+ Xmin = Xmax = Points[0].x;
+ Ymin = Ymax = Points[0].y;
+
+ for( int ii = 1; ii < n; ii++ ) // calculate rectangle
+ {
+ Xmin = std::min( Xmin, Points[ii].x );
+ Xmax = std::max( Xmax, Points[ii].x );
+ Ymin = std::min( Ymin, Points[ii].y );
+ Ymax = std::max( Ymax, Points[ii].y );
+ }
+
+ xcliplo = ClipBox->GetX();
+ ycliplo = ClipBox->GetY();
+ xcliphi = ClipBox->GetRight();
+ ycliphi = ClipBox->GetBottom();
+
+ if( Xmax < xcliplo )
+ return false;
+ if( Xmin > xcliphi )
+ return false;
+ if( Ymax < ycliplo )
+ return false;
+ if( Ymin > ycliphi )
+ return false;
+
+ return true;
+}
+
+
+/*
+ * Draw a new polyline and fill it if Fill, in screen space.
+ */
+static void GRSPoly( EDA_RECT* ClipBox, wxDC* DC, int n, wxPoint Points[],
+ bool Fill, int width,
+ EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ if( !IsGRSPolyDrawable( ClipBox, n, Points ) )
+ return;
+
+ if( Fill && ( n > 2 ) )
+ {
+ GRSetBrush( DC, BgColor, FILLED );
+ GRSetColorPen( DC, Color, width );
+
+ /* clip before send the filled polygon to wxDC, because under linux
+ * (GTK?) polygons having large coordinates are incorrectly drawn
+ * (integer overflow in coordinates, I am guessing)
+ */
+ ClipAndDrawPoly( ClipBox, DC, Points, n );
+ }
+ else
+ {
+#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
+ wxGCDC *gcdc = wxDynamicCast( DC, wxGCDC );
+ if( gcdc )
+ {
+ wxGraphicsContext *gc = gcdc->GetGraphicsContext();
+
+ // set pen
+ GRSetColorPen( DC, Color, width );
+
+ // create path
+ wxGraphicsPath path = gc->CreatePath();
+ path.MoveToPoint( Points[0].x, Points[0].y );
+ for( int i = 1; i < n; ++i )
+ {
+ path.AddLineToPoint( Points[i].x, Points[i].y );
+ }
+ // draw path
+ gc->StrokePath( path );
+
+ // correctly update last position
+ GRMoveTo( Points[n - 1].x, Points[n - 1].y );
+ }
+ else
+#endif
+ {
+ GRMoveTo( Points[0].x, Points[0].y );
+ for( int i = 1; i < n; ++i )
+ {
+ GRLineTo( ClipBox, DC, Points[i].x, Points[i].y, width, Color );
+ }
+ }
+ }
+}
+
+
+/*
+ * Draw a new closed polyline and fill it if Fill, in screen space.
+ */
+static void GRSClosedPoly( EDA_RECT* aClipBox, wxDC* aDC,
+ int aPointCount, wxPoint aPoints[],
+ bool aFill, int aWidth,
+ EDA_COLOR_T aColor,
+ EDA_COLOR_T aBgColor )
+{
+ if( !IsGRSPolyDrawable( aClipBox, aPointCount, aPoints ) )
+ return;
+
+ if( aFill && ( aPointCount > 2 ) )
+ {
+ GRLastMoveToX = aPoints[aPointCount - 1].x;
+ GRLastMoveToY = aPoints[aPointCount - 1].y;
+ GRSetBrush( aDC, aBgColor, FILLED );
+ GRSetColorPen( aDC, aColor, aWidth );
+ ClipAndDrawPoly( aClipBox, aDC, aPoints, aPointCount );
+ }
+ else
+ {
+#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
+ wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
+ if( gcdc )
+ {
+ wxGraphicsContext *gc = gcdc->GetGraphicsContext();
+
+ // set pen
+ GRSetColorPen( aDC, aColor, aWidth );
+
+ // create path
+ wxGraphicsPath path = gc->CreatePath();
+ path.MoveToPoint( aPoints[0].x, aPoints[0].y );
+ for( int i = 1; i < aPointCount; ++i )
+ {
+ path.AddLineToPoint( aPoints[i].x, aPoints[i].y );
+ }
+ if( aPoints[aPointCount - 1] != aPoints[0] )
+ path.AddLineToPoint( aPoints[0].x, aPoints[0].y );
+ // draw path
+ gc->StrokePath( path );
+
+ // correctly update last position
+ GRMoveTo( aPoints[aPointCount - 1].x, aPoints[aPointCount - 1].y );
+ }
+ else
+#endif
+ {
+ GRMoveTo( aPoints[0].x, aPoints[0].y );
+ for( int i = 1; i < aPointCount; ++i )
+ {
+ GRLineTo( aClipBox, aDC, aPoints[i].x, aPoints[i].y, aWidth, aColor );
+ }
+
+ int lastpt = aPointCount - 1;
+
+ // Close the polygon
+ if( aPoints[lastpt] != aPoints[0] )
+ {
+ GRLineTo( aClipBox, aDC, aPoints[0].x, aPoints[0].y, aWidth, aColor );
+ }
+ }
+ }
+}
+
+
+/*
+ * Draw a new polyline and fill it if Fill, in drawing space.
+ */
+void GRPoly( EDA_RECT* ClipBox, wxDC* DC, int n, wxPoint Points[],
+ bool Fill, int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ GRSPoly( ClipBox, DC, n, Points, Fill, width, Color, BgColor );
+}
+
+
+/*
+ * Draw a closed polyline and fill it if Fill, in object space.
+ */
+void GRClosedPoly( EDA_RECT* ClipBox, wxDC* DC, int n, wxPoint Points[],
+ bool Fill, EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ GRClosedPoly( ClipBox, DC, n, Points, Fill, 0, Color, BgColor );
+}
+
+
+void GRClosedPoly( EDA_RECT* ClipBox, wxDC* DC, int n, wxPoint Points[],
+ bool Fill, int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ GRSClosedPoly( ClipBox, DC, n, Points, Fill, width, Color, BgColor );
+}
+
+
+void GRCircle( EDA_RECT* ClipBox, wxDC* DC, int xc, int yc, int r, int width, EDA_COLOR_T Color )
+{
+ /* Clip circles off screen. */
+ if( ClipBox )
+ {
+ int x0, y0, xm, ym;
+ x0 = ClipBox->GetX();
+ y0 = ClipBox->GetY();
+ xm = ClipBox->GetRight();
+ ym = ClipBox->GetBottom();
+
+ if( xc < ( x0 - r - width ) )
+ return;
+
+ if( yc < ( y0 - r - width ) )
+ return;
+
+ if( xc > ( r + xm + width ) )
+ return;
+
+ if( yc > ( r + ym + width ) )
+ return;
+ }
+
+ GRSetBrush( DC, Color, NOT_FILLED );
+ GRSetColorPen( DC, Color, width );
+ DC->DrawEllipse( xc - r, yc - r, r + r, r + r );
+}
+
+
+void GRCircle( EDA_RECT* ClipBox, wxDC* DC, int x, int y, int r, EDA_COLOR_T Color )
+{
+ GRCircle( ClipBox, DC, x, y, r, 0, Color );
+}
+
+
+void GRCircle( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aPos, int aRadius, int aWidth, EDA_COLOR_T aColor )
+{
+ GRCircle( aClipBox, aDC, aPos.x, aPos.y, aRadius, aWidth, aColor );
+}
+
+
+void GRFilledCircle( EDA_RECT* ClipBox, wxDC* DC, int x, int y, int r,
+ int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ /* Clip circles off screen. */
+ if( ClipBox )
+ {
+ int x0, y0, xm, ym;
+ x0 = ClipBox->GetX();
+ y0 = ClipBox->GetY();
+ xm = ClipBox->GetRight();
+ ym = ClipBox->GetBottom();
+
+ if( x < ( x0 - r ) )
+ return;
+
+ if( y < ( y0 - r ) )
+ return;
+
+ if( x > ( r + xm ) )
+ return;
+
+ if( y > ( r + ym ) )
+ return;
+ }
+
+ GRSetBrush( DC, BgColor, FILLED );
+ GRSetColorPen( DC, Color, width );
+ DC->DrawEllipse( x - r, y - r, r + r, r + r );
+}
+
+
+void GRFilledCircle( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aPos, int aRadius, EDA_COLOR_T aColor )
+{
+ GRFilledCircle( aClipBox, aDC, aPos.x, aPos.y, aRadius, 0, aColor, aColor );
+}
+
+
+/*
+ * Draw an arc in user space.
+ */
+void GRArc1( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int xc, int yc, EDA_COLOR_T Color )
+{
+ GRArc1( ClipBox, DC, x1, y1, x2, y2, xc, yc, 0, Color );
+}
+
+
+/*
+ * Draw an arc, width = width in user space.
+ */
+void GRArc1( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int xc, int yc, int width, EDA_COLOR_T Color )
+{
+ /* Clip arcs off screen. */
+ if( ClipBox )
+ {
+ int x0, y0, xm, ym, r;
+ x0 = ClipBox->GetX();
+ y0 = ClipBox->GetY();
+ xm = ClipBox->GetRight();
+ ym = ClipBox->GetBottom();
+ r = KiROUND( Distance( x1, y1, xc, yc ) );
+ if( xc < ( x0 - r ) )
+ return;
+ if( yc < ( y0 - r ) )
+ return;
+ if( xc > ( r + xm ) )
+ return;
+ if( yc > ( r + ym ) )
+ return;
+ }
+
+ GRSetBrush( DC, Color );
+ GRSetColorPen( DC, Color, width );
+ DC->DrawArc( x1, y1, x2, y2, xc, yc );
+}
+
+
+void GRArc1( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
+ wxPoint aCenter, int aWidth, EDA_COLOR_T aColor )
+{
+ GRArc1( aClipBox, aDC, aStart.x, aStart.y, aEnd.x, aEnd.y, aCenter.x, aCenter.y,
+ aWidth, aColor );
+}
+
+
+/*
+ * Draw a filled arc in drawing space.
+ */
+void GRFilledArc( EDA_RECT* ClipBox,
+ wxDC* DC,
+ int x,
+ int y,
+ double StAngle,
+ double EndAngle,
+ int r,
+ int width,
+ EDA_COLOR_T Color,
+ EDA_COLOR_T BgColor )
+{
+ int x1, y1, x2, y2;
+
+ /* Clip arcs off screen */
+ if( ClipBox )
+ {
+ int x0, y0, xm, ym;
+ x0 = ClipBox->GetX();
+ y0 = ClipBox->GetY();
+ xm = ClipBox->GetRight();
+ ym = ClipBox->GetBottom();
+
+ if( x < ( x0 - r - 1 ) )
+ return;
+
+ if( y < ( y0 - r - 1 ) )
+ return;
+
+ if( x > ( r + xm + 1 ) )
+ return;
+
+ if( y > ( r + ym + 1 ) )
+ return;
+ }
+
+ x1 = r;
+ y1 = 0;
+ RotatePoint( &x1, &y1, EndAngle );
+
+ x2 = r;
+ y2 = 0;
+ RotatePoint( &x2, &y2, StAngle );
+
+ GRSetBrush( DC, BgColor, FILLED );
+ GRSetColorPen( DC, Color, width );
+ DC->DrawArc( x + x1, y - y1, x + x2, y - y2, x, y );
+}
+
+
+void GRFilledArc( EDA_RECT* ClipBox, wxDC* DC, int x, int y,
+ double StAngle, double EndAngle, int r,
+ EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ GRFilledArc( ClipBox, DC, x, y, StAngle, EndAngle, r, 0, Color, BgColor );
+}
+
+
+/*
+ * Draw an arc in drawing space.
+ */
+void GRArc( EDA_RECT* ClipBox, wxDC* DC, int xc, int yc, double StAngle,
+ double EndAngle, int r, EDA_COLOR_T Color )
+{
+ int x1, y1, x2, y2;
+
+ /* Clip arcs off screen */
+ if( ClipBox )
+ {
+ int radius = r + 1;
+ int x0, y0, xm, ym, x, y;
+ x0 = ClipBox->GetX();
+ y0 = ClipBox->GetY();
+ xm = ClipBox->GetRight();
+ ym = ClipBox->GetBottom();
+ x = xc;
+ y = yc;
+
+ if( x < ( x0 - radius ) )
+ return;
+ if( y < ( y0 - radius ) )
+ return;
+ if( x > ( xm + radius ) )
+ return;
+ if( y > ( ym + radius ) )
+ return;
+ }
+
+ x1 = r;
+ y1 = 0;
+ RotatePoint( &x1, &y1, EndAngle );
+
+ x2 = r;
+ y2 = 0;
+ RotatePoint( &x2, &y2, StAngle );
+
+ GRSetBrush( DC, Color, NOT_FILLED );
+ GRSetColorPen( DC, Color );
+ DC->DrawArc( xc + x1, yc - y1, xc + x2, yc - y2, xc, yc );
+}
+
+
+/*
+ * Draw an arc with width = width in drawing space.
+ */
+void GRArc( EDA_RECT* ClipBox,
+ wxDC* DC,
+ int x,
+ int y,
+ double StAngle,
+ double EndAngle,
+ int r,
+ int width,
+ EDA_COLOR_T Color )
+{
+ int x1, y1, x2, y2;
+
+ /* Clip arcs off screen. */
+ if( ClipBox )
+ {
+ int x0, y0, xm, ym;
+ x0 = ClipBox->GetX();
+ y0 = ClipBox->GetY();
+ xm = ClipBox->GetRight();
+ ym = ClipBox->GetBottom();
+
+ if( x < ( x0 - r - width ) )
+ return;
+
+ if( y < ( y0 - r - width ) )
+ return;
+
+ if( x > ( r + xm + width ) )
+ return;
+
+ if( y > ( r + ym + width ) )
+ return;
+ }
+
+ x1 = r;
+ y1 = 0;
+ RotatePoint( &x1, &y1, EndAngle );
+
+ x2 = r;
+ y2 = 0;
+ RotatePoint( &x2, &y2, StAngle );
+
+ GRSetBrush( DC, Color );
+ GRSetColorPen( DC, Color, width );
+ DC->DrawArc( x + x1, y - y1, x + x2, y - y2, x, y );
+}
+
+
+/*
+ * Draw a rectangle in drawing space.
+ */
+void GRRect( EDA_RECT* aClipBox, wxDC* aDC, int x1, int y1, int x2, int y2, EDA_COLOR_T aColor )
+{
+ GRSRect( aClipBox, aDC, x1, y1, x2, y2, 0, aColor );
+}
+
+
+void GRRectPs( EDA_RECT* aClipBox, wxDC* aDC, const EDA_RECT& aRect, EDA_COLOR_T aColor, wxPenStyle aStyle )
+{
+ int x1 = aRect.GetX();
+ int y1 = aRect.GetY();
+ int x2 = aRect.GetRight();
+ int y2 = aRect.GetBottom();
+
+ GRSRect( aClipBox, aDC, x1, y1, x2, y2, 0, aColor, aStyle );
+}
+
+
+/*
+ * Draw a rectangle (thick lines) in drawing space.
+ */
+void GRRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int width, EDA_COLOR_T Color )
+{
+ GRSRect( ClipBox, DC, x1, y1, x2, y2, width, Color );
+}
+
+
+void GRRect( EDA_RECT* aClipBox, wxDC* aDC, const EDA_RECT& aRect, int aWidth, EDA_COLOR_T aColor )
+{
+ int x1 = aRect.GetX();
+ int y1 = aRect.GetY();
+ int x2 = aRect.GetRight();
+ int y2 = aRect.GetBottom();
+
+ GRSRect( aClipBox, aDC, x1, y1, x2, y2, aWidth, aColor );
+}
+
+
+/*
+ * Draw a rectangle (filled with AreaColor) in drawing space.
+ */
+void GRFilledRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ GRSFilledRect( ClipBox, DC, x1, y1, x2, y2, 0, Color, BgColor );
+}
+
+
+/*
+ * Draw a rectangle (filled with AreaColor) in drawing space.
+ */
+void GRFilledRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor )
+{
+ GRSFilledRect( ClipBox, DC, x1, y1, x2, y2, width, Color, BgColor );
+}
+
+
+/*
+ * Draw a rectangle in screen space.
+ */
+
+void GRSRect( EDA_RECT* aClipBox, wxDC* aDC, int x1, int y1, int x2, int y2,
+ int aWidth, EDA_COLOR_T aColor, wxPenStyle aStyle )
+{
+ wxPoint points[5];
+ points[0] = wxPoint(x1, y1);
+ points[1] = wxPoint(x1, y2);
+ points[2] = wxPoint(x2, y2);
+ points[3] = wxPoint(x2, y1);
+ points[4] = points[0];
+ GRSClosedPoly( aClipBox, aDC, 5, points, NOT_FILLED, aWidth,
+ aColor, aColor );
+}
+
+
+void GRSFilledRect( EDA_RECT* aClipBox, wxDC* aDC, int x1, int y1, int x2, int y2,
+ int aWidth, EDA_COLOR_T aColor, EDA_COLOR_T aBgColor )
+{
+ wxPoint points[5];
+ points[0] = wxPoint(x1, y1);
+ points[1] = wxPoint(x1, y2);
+ points[2] = wxPoint(x2, y2);
+ points[3] = wxPoint(x2, y1);
+ points[4] = points[0];
+
+ GRSetBrush( aDC, aBgColor, FILLED );
+ GRSetColorPen( aDC, aBgColor, aWidth );
+
+ if( aClipBox && (aWidth > 0) )
+ {
+ EDA_RECT clipbox(*aClipBox);
+ clipbox.Inflate(aWidth);
+ ClipAndDrawPoly(&clipbox, aDC, points, 5); // polygon approach is more accurate
+ }
+ else
+ ClipAndDrawPoly(aClipBox, aDC, points, 5 );
+}
+
+/**
+ * Function ClipAndDrawPoly
+ * Used to clip a polygon and draw it as Filled Polygon
+ * uses the Sutherland and Hodgman algo to clip the given poly against a
+ * rectangle. This rectangle is the drawing area this is useful under
+ * Linux (2009) because filled polygons are incorrectly drawn if they have
+ * too large coordinates (seems due to integer overflows in calculations)
+ * Could be removed in some years, if become unnecessary.
+ */
+
+/* Note: aClipBox == NULL is legal, so if aClipBox == NULL,
+ * the polygon is drawn, but not clipped
+ */
+#include <SutherlandHodgmanClipPoly.h>
+
+void ClipAndDrawPoly( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aPoints[], int n )
+{
+ if( aClipBox == NULL )
+ {
+ aDC->DrawPolygon( n, aPoints );
+ return;
+ }
+
+ // A clip box exists: clip and draw the polygon.
+ static std::vector<wxPoint> clippedPolygon;
+ static pointVector inputPolygon, outputPolygon;
+
+ inputPolygon.clear();
+ outputPolygon.clear();
+ clippedPolygon.clear();
+
+ for( int ii = 0; ii < n; ii++ )
+ inputPolygon.push_back( PointF( (REAL) aPoints[ii].x, (REAL) aPoints[ii].y ) );
+
+ RectF window( (REAL) aClipBox->GetX(), (REAL) aClipBox->GetY(),
+ (REAL) aClipBox->GetWidth(), (REAL) aClipBox->GetHeight() );
+
+ SutherlandHodgman sh( window );
+ sh.Clip( inputPolygon, outputPolygon );
+
+ for( cpointIterator cit = outputPolygon.begin(); cit != outputPolygon.end(); ++cit )
+ {
+ clippedPolygon.push_back( wxPoint( KiROUND( cit->X ), KiROUND( cit->Y ) ) );
+ }
+
+ if( clippedPolygon.size() )
+ aDC->DrawPolygon( clippedPolygon.size(), &clippedPolygon[0] );
+}
+
+
+void GRBezier( EDA_RECT* ClipBox,
+ wxDC* DC,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int x3,
+ int y3,
+ int width,
+ EDA_COLOR_T Color )
+{
+ std::vector<wxPoint> Points = Bezier2Poly( x1, y1, x2, y2, x3, y3 );
+ GRPoly( ClipBox, DC, Points.size(), &Points[0], false, width, Color, Color );
+}
+
+
+void GRBezier( EDA_RECT* ClipBox,
+ wxDC* DC,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int x3,
+ int y3,
+ int x4,
+ int y4,
+ int width,
+ EDA_COLOR_T Color )
+{
+ std::vector<wxPoint> Points = Bezier2Poly( x1, y1, x2, y2, x3, y3, x4, y4 );
+ GRPoly( ClipBox, DC, Points.size(), &Points[0], false, width, Color, Color );
+}
+
+
+void GRDrawAnchor( EDA_RECT *aClipBox, wxDC *aDC, int x, int y,
+ int aSize, EDA_COLOR_T aColor )
+{
+ int anchor_size = aDC->DeviceToLogicalXRel( aSize );
+
+ GRLine( aClipBox, aDC,
+ x - anchor_size, y,
+ x + anchor_size, y, 0, aColor );
+ GRLine( aClipBox, aDC,
+ x, y - anchor_size,
+ x, y + anchor_size, 0, aColor );
+}
diff --git a/common/grid_tricks.cpp b/common/grid_tricks.cpp
new file mode 100644
index 0000000..c854411
--- /dev/null
+++ b/common/grid_tricks.cpp
@@ -0,0 +1,289 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <grid_tricks.h>
+#include <wx/tokenzr.h>
+#include <wx/arrstr.h>
+#include <wx/clipbrd.h>
+
+
+ // It works for table data on clipboard for an Excell spreadsheet,
+// why not us too for now.
+#define COL_SEP wxT( '\t' )
+#define ROW_SEP wxT( '\n' )
+
+
+enum
+{
+ MYID_FIRST = -1,
+ MYID_CUT,
+ MYID_COPY,
+ MYID_PASTE,
+ MYID_SELECT,
+ MYID_LAST,
+};
+
+
+GRID_TRICKS::GRID_TRICKS( wxGrid* aGrid ):
+ m_grid( aGrid )
+{
+ m_sel_row_start = 0;
+ m_sel_col_start = 0;
+ m_sel_row_count = 0;
+ m_sel_col_count = 0;
+
+ aGrid->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( GRID_TRICKS::onGridCellRightClick ), NULL, this );
+ aGrid->Connect( MYID_FIRST, MYID_LAST, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GRID_TRICKS::onPopupSelection ), NULL, this );
+ aGrid->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( GRID_TRICKS::onKeyDown ), NULL, this );
+ aGrid->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( GRID_TRICKS::onRightDown ), NULL, this );
+}
+
+
+void GRID_TRICKS::getSelectedArea()
+{
+ wxGridCellCoordsArray topLeft = m_grid->GetSelectionBlockTopLeft();
+ wxGridCellCoordsArray botRight = m_grid->GetSelectionBlockBottomRight();
+
+ wxArrayInt cols = m_grid->GetSelectedCols();
+ wxArrayInt rows = m_grid->GetSelectedRows();
+
+ DBG(printf("topLeft.Count():%d botRight:Count():%d\n", int( topLeft.Count() ), int( botRight.Count() ) );)
+
+ if( topLeft.Count() && botRight.Count() )
+ {
+ m_sel_row_start = topLeft[0].GetRow();
+ m_sel_col_start = topLeft[0].GetCol();
+
+ m_sel_row_count = botRight[0].GetRow() - m_sel_row_start + 1;
+ m_sel_col_count = botRight[0].GetCol() - m_sel_col_start + 1;
+ }
+ else if( cols.Count() )
+ {
+ m_sel_col_start = cols[0];
+ m_sel_col_count = cols.Count();
+ m_sel_row_start = 0;
+ m_sel_row_count = m_grid->GetNumberRows();
+ }
+ else if( rows.Count() )
+ {
+ m_sel_col_start = 0;
+ m_sel_col_count = m_grid->GetNumberCols();
+ m_sel_row_start = rows[0];
+ m_sel_row_count = rows.Count();
+ }
+ else
+ {
+ m_sel_row_start = -1;
+ m_sel_col_start = -1;
+ m_sel_row_count = 0;
+ m_sel_col_count = 0;
+ }
+
+ //DBG(printf("m_sel_row_start:%d m_sel_col_start:%d m_sel_row_count:%d m_sel_col_count:%d\n", m_sel_row_start, m_sel_col_start, m_sel_row_count, m_sel_col_count );)
+}
+
+
+void GRID_TRICKS::showPopupMenu()
+{
+ wxMenu menu;
+
+ menu.Append( MYID_CUT, _( "Cut\tCTRL+X" ), _( "Clear selected cells pasting original contents to clipboard" ) );
+ menu.Append( MYID_COPY, _( "Copy\tCTRL+C" ), _( "Copy selected cells to clipboard" ) );
+ menu.Append( MYID_PASTE, _( "Paste\tCTRL+V" ), _( "Paste clipboard cells to matrix at current cell" ) );
+ menu.Append( MYID_SELECT, _( "Select All\tCTRL+A" ), _( "Select all cells" ) );
+
+ getSelectedArea();
+
+ // if nothing is selected, disable cut and copy.
+ if( !m_sel_row_count && !m_sel_col_count )
+ {
+ menu.Enable( MYID_CUT, false );
+ menu.Enable( MYID_COPY, false );
+ }
+
+ bool have_cb_text = false;
+ if( wxTheClipboard->Open() )
+ {
+ if( wxTheClipboard->IsSupported( wxDF_TEXT ) )
+ have_cb_text = true;
+
+ wxTheClipboard->Close();
+ }
+
+ if( !have_cb_text )
+ {
+ // if nothing on clipboard, disable paste.
+ menu.Enable( MYID_PASTE, false );
+ }
+
+ m_grid->PopupMenu( &menu );
+}
+
+
+void GRID_TRICKS::onPopupSelection( wxCommandEvent& event )
+{
+ int menu_id = event.GetId();
+
+ // assume getSelectedArea() was called by rightClickPopupMenu() and there's
+ // no way to have gotten here without that having been called.
+
+ switch( menu_id )
+ {
+ case MYID_CUT:
+ case MYID_COPY:
+ cutcopy( menu_id == MYID_CUT );
+ break;
+
+ case MYID_PASTE:
+ paste_clipboard();
+ break;
+
+ case MYID_SELECT:
+ m_grid->SelectAll();
+ break;
+
+ default:
+ ;
+ }
+}
+
+
+void GRID_TRICKS::onKeyDown( wxKeyEvent& ev )
+{
+ if( isCtl( 'A', ev ) )
+ {
+ m_grid->SelectAll();
+ }
+ else if( isCtl( 'C', ev ) )
+ {
+ getSelectedArea();
+ cutcopy( false );
+ }
+ else if( isCtl( 'V', ev ) )
+ {
+ getSelectedArea();
+ paste_clipboard();
+ }
+ else if( isCtl( 'X', ev ) )
+ {
+ getSelectedArea();
+ cutcopy( true );
+ }
+ else
+ {
+ ev.Skip( true );
+ }
+}
+
+
+void GRID_TRICKS::paste_clipboard()
+{
+ if( wxTheClipboard->Open() )
+ {
+ if( wxTheClipboard->IsSupported( wxDF_TEXT ) )
+ {
+ wxTextDataObject data;
+
+ wxTheClipboard->GetData( data );
+
+ wxString cb_text = data.GetText();
+
+ paste_text( cb_text );
+ }
+
+ wxTheClipboard->Close();
+ m_grid->ForceRefresh();
+ }
+}
+
+
+void GRID_TRICKS::paste_text( const wxString& cb_text )
+{
+ wxGridTableBase* tbl = m_grid->GetTable();
+
+ const int cur_row = std::max( getCursorRow(), 0 ); // no -1
+ const int cur_col = std::max( getCursorCol(), 0 );
+
+ wxStringTokenizer rows( cb_text, ROW_SEP, wxTOKEN_RET_EMPTY );
+
+ // if clipboard rows would extend past end of current table size...
+ if( int( rows.CountTokens() ) > tbl->GetNumberRows() - cur_row )
+ {
+ int newRowsNeeded = rows.CountTokens() - ( tbl->GetNumberRows() - cur_row );
+
+ tbl->AppendRows( newRowsNeeded );
+ }
+
+ for( int row = cur_row; rows.HasMoreTokens(); ++row )
+ {
+ wxString rowTxt = rows.GetNextToken();
+
+ wxStringTokenizer cols( rowTxt, COL_SEP, wxTOKEN_RET_EMPTY );
+
+ for( int col = cur_col; cols.HasMoreTokens(); ++col )
+ {
+ wxString cellTxt = cols.GetNextToken();
+ tbl->SetValue( row, col, cellTxt );
+ }
+ }
+ m_grid->AutoSizeColumns( false );
+}
+
+
+void GRID_TRICKS::cutcopy( bool doCut )
+{
+ if( wxTheClipboard->Open() )
+ {
+ wxGridTableBase* tbl = m_grid->GetTable();
+ wxString txt;
+
+ // fill txt with a format that is compatible with most spreadsheets
+ for( int row = m_sel_row_start; row < m_sel_row_start + m_sel_row_count; ++row )
+ {
+ for( int col = m_sel_col_start; col < m_sel_col_start + m_sel_col_count; ++col )
+ {
+ txt += tbl->GetValue( row, col );
+
+ if( col < m_sel_col_start + m_sel_col_count - 1 ) // that was not last column
+ txt += COL_SEP;
+
+ if( doCut )
+ tbl->SetValue( row, col, wxEmptyString );
+ }
+ txt += ROW_SEP;
+ }
+
+ wxTheClipboard->SetData( new wxTextDataObject( txt ) );
+ wxTheClipboard->Close();
+
+ if( doCut )
+ {
+ m_grid->AutoSizeColumns( false );
+ m_grid->ForceRefresh();
+ }
+ }
+}
+
diff --git a/common/hotkeys_basic.cpp b/common/hotkeys_basic.cpp
new file mode 100644
index 0000000..04dfd7f
--- /dev/null
+++ b/common/hotkeys_basic.cpp
@@ -0,0 +1,846 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, j-p.charras at wanadoo.fr
+ * Copyright (C) 2010-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file hotkeys_basic.cpp
+ * @brief Some functions to handle hotkeys in KiCad
+ */
+
+#include <fctsys.h>
+#include <kiface_i.h>
+#include <hotkeys_basic.h>
+#include <id.h>
+#include <confirm.h>
+#include <kicad_string.h>
+#include <gestfich.h>
+#include <wxstruct.h>
+#include <macros.h>
+#include <dialog_hotkeys_editor.h>
+#include <menus_helpers.h>
+#include <tool/tool_manager.h>
+
+#include <wx/apptrait.h>
+#include <wx/stdpaths.h>
+#include <wx/tokenzr.h>
+
+#define HOTKEYS_CONFIG_KEY wxT( "Keys" )
+
+wxString g_CommonSectionTag( wxT( "[common]" ) );
+
+
+/* Class to handle hotkey commands hotkeys have a default value
+ * This class allows the real key code changed by user from a key code list
+ * file.
+ */
+
+EDA_HOTKEY::EDA_HOTKEY( const wxChar* infomsg, int idcommand, int keycode, int idmenuevent )
+{
+ m_KeyCode = keycode; // Key code (ascii value for ascii keys
+
+ // or wxWidgets code for function key
+ m_InfoMsg = infomsg; // info message.
+ m_Idcommand = idcommand; // internal id for the corresponding
+
+ // command (see hotkey_id_commnand list)
+ m_IdMenuEvent = idmenuevent; // id to call the corresponding event
+ // (if any) (see id.h)
+}
+
+
+EDA_HOTKEY::EDA_HOTKEY( const EDA_HOTKEY* base )
+{
+ m_KeyCode = base->m_KeyCode;
+ m_InfoMsg = base->m_InfoMsg;
+ m_Idcommand = base->m_Idcommand;
+ m_IdMenuEvent = base->m_IdMenuEvent;
+}
+
+
+EDA_HOTKEY_CLIENT_DATA::~EDA_HOTKEY_CLIENT_DATA()
+{
+}
+
+
+/* class to handle the printable name and the keycode
+ */
+struct hotkey_name_descr
+{
+ const wxChar* m_Name;
+ int m_KeyCode;
+};
+
+/* table giving the hotkey name from the hotkey code, for special keys
+ * Note : when modifiers (ATL, SHIFT, CTRL) do not modify
+ * the code of the key, do need to enter the modified key code
+ * For instance wxT( "F1" ), WXK_F1 handle F1, AltF1, CtrlF1 ...
+ * Key names are:
+ * "Space","Ctrl+Space","Alt+Space" or
+ * "Alt+A","Ctrl+F1", ...
+ */
+static struct hotkey_name_descr hotkeyNameList[] =
+{
+ { wxT( "F1" ), WXK_F1 },
+ { wxT( "F2" ), WXK_F2 },
+ { wxT( "F3" ), WXK_F3 },
+ { wxT( "F4" ), WXK_F4 },
+ { wxT( "F5" ), WXK_F5 },
+ { wxT( "F6" ), WXK_F6 },
+ { wxT( "F7" ), WXK_F7 },
+ { wxT( "F8" ), WXK_F8 },
+ { wxT( "F9" ), WXK_F9 },
+ { wxT( "F10" ), WXK_F10 },
+ { wxT( "F11" ), WXK_F11 },
+ { wxT( "F12" ), WXK_F12 },
+
+ { wxT( "Esc" ), WXK_ESCAPE },
+ { wxT( "Del" ), WXK_DELETE },
+ { wxT( "Tab" ), WXK_TAB },
+ { wxT( "BkSp" ), WXK_BACK },
+ { wxT( "Ins" ), WXK_INSERT },
+
+ { wxT( "Home" ), WXK_HOME },
+ { wxT( "End" ), WXK_END },
+ { wxT( "PgUp" ), WXK_PAGEUP },
+ { wxT( "PgDn" ), WXK_PAGEDOWN },
+
+ { wxT( "Up" ), WXK_UP },
+ { wxT( "Down" ), WXK_DOWN },
+ { wxT( "Left" ), WXK_LEFT },
+ { wxT( "Right" ), WXK_RIGHT },
+
+ { wxT( "Return" ), WXK_RETURN },
+
+ { wxT( "Space" ), WXK_SPACE },
+
+ // Do not change this line: end of list
+ { wxT( "" ), 0 }
+};
+
+// name of modifier keys.
+// Note: the Ctrl key is Cmd key on Mac OS X.
+// However, in wxWidgets defs, the key WXK_CONTROL is the Cmd key,
+// so the code using WXK_CONTROL should be ok on any system.
+// (on Mac OS X the actual Ctrl key code is WXK_RAW_CONTROL)
+#ifdef __WXMAC__
+#define USING_MAC_CMD
+#endif
+
+#ifdef USING_MAC_CMD
+#define MODIFIER_CTRL wxT( "Cmd+" )
+#else
+#define MODIFIER_CTRL wxT( "Ctrl+" )
+#endif
+#define MODIFIER_CMD_MAC wxT( "Cmd+" )
+#define MODIFIER_CTRL_BASE wxT( "Ctrl+" )
+#define MODIFIER_ALT wxT( "Alt+" )
+#define MODIFIER_SHIFT wxT( "Shift+" )
+
+
+/**
+ * Function KeyNameFromKeyCode
+ * return the key name from the key code
+ * Only some wxWidgets key values are handled for function key ( see
+ * hotkeyNameList[] )
+ * @param aKeycode = key code (ascii value, or wxWidgets value for function keys)
+ * @param aIsFound = a pointer to a bool to return true if found, or false. an be NULL default)
+ * @return the key name in a wxString
+ */
+wxString KeyNameFromKeyCode( int aKeycode, bool* aIsFound )
+{
+ wxString keyname, modifier, fullkeyname;
+ int ii;
+ bool found = false;
+
+ // Assume keycode of 0 is "unassigned"
+ if( aKeycode == 0 )
+ return wxT( "<unassigned>");
+
+ if( (aKeycode & GR_KB_CTRL) != 0 )
+ modifier << MODIFIER_CTRL;
+
+ if( (aKeycode & GR_KB_ALT) != 0 )
+ modifier << MODIFIER_ALT;
+
+ if( (aKeycode & GR_KB_SHIFT) != 0 )
+ modifier << MODIFIER_SHIFT;
+
+ aKeycode &= ~( GR_KB_CTRL | GR_KB_ALT | GR_KB_SHIFT );
+
+ if( (aKeycode > ' ') && (aKeycode < 0x7F ) )
+ {
+ found = true;
+ keyname.Append( (wxChar)aKeycode );
+ }
+ else
+ {
+ for( ii = 0; ; ii++ )
+ {
+ if( hotkeyNameList[ii].m_KeyCode == 0 ) // End of list
+ {
+ keyname = wxT( "<unknown>" );
+ break;
+ }
+
+ if( hotkeyNameList[ii].m_KeyCode == aKeycode )
+ {
+ keyname = hotkeyNameList[ii].m_Name;
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if( aIsFound )
+ *aIsFound = found;
+
+ fullkeyname = modifier + keyname;
+ return fullkeyname;
+}
+
+
+/*
+ * helper function use in AddHotkeyName to calculate an accelerator string
+ * In some menus, accelerators do not perform exactly the same action as
+ * the hotkey that perform a similar action.
+ * this is usually the case when this action uses the current mouse position
+ * for instance zoom action is ran from the F1 key or the Zoom menu.
+ * a zoom uses the mouse position from a hot key and not from the menu
+ * In this case, the accelerator if Shift+<hotkey>
+ * But for many keys, the Shift modifier is not usable, and the accelerator is Alt+<hotkey>
+ */
+static void AddModifierToKey( wxString& aFullKey, const wxString & aKey )
+{
+ if( (aKey.Length() == 1) && (aKey[0] >= 'A') && (aKey[0] <= 'Z'))
+ // We can use Shift+<key> as accelerator and <key> for hot key
+ aFullKey << wxT( "\t" ) << MODIFIER_SHIFT << aKey;
+ else
+ // We must use Alt+<key> as accelerator and <key> for hot key
+ aFullKey << wxT( "\t" ) << MODIFIER_ALT << aKey;
+}
+
+
+/* AddHotkeyName
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * aText = a wxString. returns aText + key name
+ * aList = pointer to a EDA_HOTKEY list of commands
+ * aCommandId = Command Id value
+ * aShortCutType = IS_HOTKEY to add <tab><keyname> (shortcuts in menus, same as hotkeys)
+ * IS_ACCELERATOR to add <tab><Shift+keyname> (accelerators in menus, not hotkeys)
+ * IS_COMMENT to add <spaces><(keyname)> mainly in tool tips
+ * Return a wxString (aTest + key name) if key found or aText without modification
+ */
+wxString AddHotkeyName( const wxString& aText, EDA_HOTKEY** aList,
+ int aCommandId, HOTKEY_ACTION_TYPE aShortCutType )
+{
+ wxString msg = aText;
+ wxString keyname;
+
+ if( aList )
+ keyname = KeyNameFromCommandId( aList, aCommandId );
+
+ if( !keyname.IsEmpty() )
+ {
+ switch( aShortCutType )
+ {
+ case IS_HOTKEY:
+ msg << wxT( "\t" ) << keyname;
+ break;
+
+ case IS_ACCELERATOR:
+ AddModifierToKey( msg, keyname );
+ break;
+
+ case IS_COMMENT:
+ msg << wxT( " (" ) << keyname << wxT( ")" );
+ break;
+ }
+ }
+
+#ifdef USING_MAC_CMD
+ // On OSX, the modifier equivalent to the Ctrl key of PCs
+ // is the Cmd key, but in code we should use Ctrl as prefix in menus
+ msg.Replace( MODIFIER_CMD_MAC, MODIFIER_CTRL_BASE );
+#endif
+
+ return msg;
+}
+
+
+/* AddHotkeyName
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * aText = a wxString. returns aText + key name
+ * aList = pointer to a EDA_HOTKEY_CONFIG DescrList of commands
+ * aCommandId = Command Id value
+ * aShortCutType = IS_HOTKEY to add <tab><keyname> (active shortcuts in menus)
+ * IS_ACCELERATOR to add <tab><Shift+keyname> (active accelerators in menus)
+ * IS_COMMENT to add <spaces><(keyname)>
+ * Return a wxString (aText + key name) if key found or aText without modification
+ */
+wxString AddHotkeyName( const wxString& aText,
+ struct EDA_HOTKEY_CONFIG* aDescList,
+ int aCommandId,
+ HOTKEY_ACTION_TYPE aShortCutType )
+{
+ wxString msg = aText;
+ wxString keyname;
+ EDA_HOTKEY** list;
+
+ if( aDescList )
+ {
+ for( ; aDescList->m_HK_InfoList != NULL; aDescList++ )
+ {
+ list = aDescList->m_HK_InfoList;
+ keyname = KeyNameFromCommandId( list, aCommandId );
+
+ if( !keyname.IsEmpty() )
+ {
+ switch( aShortCutType )
+ {
+ case IS_HOTKEY:
+ msg << wxT( "\t" ) << keyname;
+ break;
+
+ case IS_ACCELERATOR:
+ AddModifierToKey( msg, keyname );
+ break;
+
+ case IS_COMMENT:
+ msg << wxT( " (" ) << keyname << wxT( ")" );
+ break;
+ }
+
+ break;
+ }
+ }
+ }
+
+#ifdef USING_MAC_CMD
+ // On OSX, the modifier equivalent to the Ctrl key of PCs
+ // is the Cmd key, but in code we should use Ctrl as prefix in menus
+ msg.Replace( MODIFIER_CMD_MAC, MODIFIER_CTRL_BASE );
+#endif
+
+ return msg;
+}
+
+
+/**
+ * Function KeyNameFromCommandId
+ * return the key name from the Command id value ( m_Idcommand member value)
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @param aCommandId = Command Id value
+ * @return the key name in a wxString
+ */
+wxString KeyNameFromCommandId( EDA_HOTKEY** aList, int aCommandId )
+{
+ wxString keyname;
+
+ for( ; *aList != NULL; aList++ )
+ {
+ EDA_HOTKEY* hk_decr = *aList;
+
+ if( hk_decr->m_Idcommand == aCommandId )
+ {
+ keyname = KeyNameFromKeyCode( hk_decr->m_KeyCode );
+ break;
+ }
+ }
+
+ return keyname;
+}
+
+
+/**
+ * Function KeyCodeFromKeyName
+ * return the key code from its key name
+ * Only some wxWidgets key values are handled for function key
+ * @param keyname = wxString key name to find in hotkeyNameList[],
+ * like F2 or space or an usual (ascii) char.
+ * @return the key code
+ */
+int KeyCodeFromKeyName( const wxString& keyname )
+{
+ int ii, keycode = 0;
+
+ // Search for modifiers: Ctrl+ Alt+ and Shift+
+ // Note: on Mac OSX, the Cmd key is equiv here to Ctrl
+ wxString key = keyname;
+ wxString prefix;
+ int modifier = 0;
+
+ while( 1 )
+ {
+ prefix.Empty();
+
+ if( key.StartsWith( MODIFIER_CTRL_BASE ) )
+ {
+ modifier |= GR_KB_CTRL;
+ prefix = MODIFIER_CTRL_BASE;
+ }
+ else if( key.StartsWith( MODIFIER_CMD_MAC ) )
+ {
+ modifier |= GR_KB_CTRL;
+ prefix = MODIFIER_CMD_MAC;
+ }
+ else if( key.StartsWith( MODIFIER_ALT ) )
+ {
+ modifier |= GR_KB_ALT;
+ prefix = MODIFIER_ALT;
+ }
+ else if( key.StartsWith( MODIFIER_SHIFT ) )
+ {
+ modifier |= GR_KB_SHIFT;
+ prefix = MODIFIER_SHIFT;
+ }
+ else
+ {
+ break;
+ }
+
+ if( !prefix.IsEmpty() )
+ key.Remove( 0, prefix.Len() );
+ }
+
+ if( (key.length() == 1) && (key[0] > ' ') && (key[0] < 0x7F) )
+ {
+ keycode = key[0];
+ keycode += modifier;
+ return keycode;
+ }
+
+ for( ii = 0; ; ii++ )
+ {
+ if( hotkeyNameList[ii].m_KeyCode == 0 ) // End of list reached
+ break;
+
+ if( key.CmpNoCase( hotkeyNameList[ii].m_Name ) == 0 )
+ {
+ keycode = hotkeyNameList[ii].m_KeyCode + modifier;
+ break;
+ }
+ }
+
+ return keycode;
+}
+
+
+/* DisplayHotkeyList
+ * Displays the current hotkey list
+ * aList = a EDA_HOTKEY_CONFIG list(Null terminated)
+ */
+#include <html_messagebox.h>
+
+void DisplayHotkeyList( EDA_BASE_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aDescList )
+{
+ wxString keyname;
+ wxString keymessage;
+ EDA_HOTKEY** list;
+
+ wxString msg = wxT( "<html><body bgcolor=\"#E2E2E2\">" );
+
+ msg += wxT( "<H3>" );
+ msg += _( "Hotkeys List" );
+ msg += wxT( "</H3> <table cellpadding=\"0\">" );
+
+ for( ; aDescList->m_HK_InfoList != NULL; aDescList++ )
+ {
+ list = aDescList->m_HK_InfoList;
+
+ for( ; *list != NULL; list++ )
+ {
+ EDA_HOTKEY* hk_decr = *list;
+
+ if( !hk_decr->m_InfoMsg.Contains( wxT( "Macros" ) ) )
+ {
+ keyname = KeyNameFromKeyCode( hk_decr->m_KeyCode );
+ keymessage = wxGetTranslation( hk_decr->m_InfoMsg );
+
+ // Some chars are modified, using html encoding, to be
+ // displayed by DisplayHtmlInfoMessage()
+ keyname.Replace( wxT( "<" ), wxT( "&lt;" ) );
+ keyname.Replace( wxT( ">" ), wxT( "&gt;" ) );
+ msg += wxT( "<tr><td>" ) + keymessage + wxT( "</td>" );
+ msg += wxT( "<td><b>&nbsp;&nbsp;" ) + keyname + wxT( "</b></td></tr>" );
+ }
+ }
+ }
+
+ msg += wxT( "</table></html></body>" );
+
+#if 0 // Set to 1 to create a modal dialog (blocking)
+ DisplayHtmlInfoMessage( aFrame, _( "Hotkeys List" ), msg, wxSize( 340, 750 ) );
+#else
+ // Create a non modal dialog, which shows the list of hotkeys until dismissed
+ // but does not block the parent window
+ HTML_MESSAGE_BOX *dlg = new HTML_MESSAGE_BOX( aFrame, _( "Hotkeys List" ),
+ wxDefaultPosition, wxSize( 340, 750 ) );
+ dlg->AddHTML_Text( msg );
+ dlg->Show( true );
+#endif
+}
+
+
+/**
+ * Function GetDescriptorFromHotkey
+ * Return a EDA_HOTKEY * pointer from a key code for OnHotKey() function
+ * @param aKey = key code (ascii value, or wxWidgets value for function keys
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
+ */
+EDA_HOTKEY* GetDescriptorFromHotkey( int aKey, EDA_HOTKEY** aList )
+{
+ for( ; *aList != NULL; aList++ )
+ {
+ EDA_HOTKEY* hk_decr = *aList;
+
+ if( hk_decr->m_KeyCode == aKey )
+ return hk_decr;
+ }
+
+ return NULL;
+}
+
+
+EDA_HOTKEY* GetDescriptorFromCommand( int aCommand, EDA_HOTKEY** aList )
+{
+ for( ; *aList != NULL; aList++ )
+ {
+ EDA_HOTKEY* hk_decr = *aList;
+
+ if( hk_decr->m_Idcommand == aCommand )
+ return hk_decr;
+ }
+
+ return NULL;
+}
+
+
+int EDA_BASE_FRAME::WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList,
+ wxString* aFullFileName )
+{
+ wxString msg;
+ wxString keyname, infokey;
+
+ msg = wxT( "$hotkey list\n" );
+
+ // Print the current hotkey list
+ EDA_HOTKEY** list;
+
+ for( ; aDescList->m_HK_InfoList != NULL; aDescList++ )
+ {
+ if( aDescList->m_Title )
+ {
+ msg += wxT( "# " );
+ msg += *aDescList->m_Title;
+ msg += wxT( "\n" );
+ }
+
+ msg += *aDescList->m_SectionTag;
+ msg += wxT( "\n" );
+
+ list = aDescList->m_HK_InfoList;
+
+ for( ; *list != NULL; list++ )
+ {
+ EDA_HOTKEY* hk_decr = *list;
+ msg += wxT( "shortcut " );
+ keyname = KeyNameFromKeyCode( hk_decr->m_KeyCode );
+ AddDelimiterString( keyname );
+ infokey = hk_decr->m_InfoMsg;
+ AddDelimiterString( infokey );
+ msg += keyname + wxT( ": " ) + infokey + wxT( "\n" );
+ }
+ }
+
+ msg += wxT( "$Endlist\n" );
+
+ if( aFullFileName )
+ {
+ FILE* file = wxFopen( *aFullFileName, wxT( "wt" ) );
+
+ if( file )
+ {
+ fputs( TO_UTF8( msg ), file );
+ fclose( file );
+ }
+ else
+ {
+ msg.Printf( wxT( "Unable to write file %s" ), GetChars( *aFullFileName ) );
+ return 0;
+ }
+ }
+ else
+ {
+ wxFileName fn( GetName() );
+ fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
+ wxConfigBase* config = GetNewConfig( fn.GetFullPath() );
+ config->Write( HOTKEYS_CONFIG_KEY, msg );
+ delete config;
+ }
+
+ return 1;
+}
+
+
+int EDA_BASE_FRAME::ReadHotkeyConfigFile( const wxString& aFilename,
+ struct EDA_HOTKEY_CONFIG* aDescList )
+{
+ wxFileName fn( aFilename );
+ fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
+
+ wxFile cfgfile( fn.GetFullPath() );
+
+ if( !cfgfile.IsOpened() ) // There is a problem to open file
+ return 0;
+
+ // get length
+ cfgfile.SeekEnd();
+ wxFileOffset size = cfgfile.Tell();
+ cfgfile.Seek( 0 );
+
+ // read data
+ char* buffer = new char[size];
+ cfgfile.Read( buffer, size );
+
+ wxString data( buffer, wxConvUTF8 );
+
+ // parse
+ ParseHotkeyConfig( data, aDescList );
+
+ // cleanup
+ delete[] buffer;
+ cfgfile.Close();
+ return 1;
+}
+
+
+void ReadHotkeyConfig( const wxString& Appname, struct EDA_HOTKEY_CONFIG* aDescList )
+{
+ wxFileName fn( Appname );
+ fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
+
+ wxConfigBase* config = GetNewConfig( fn.GetFullPath() );
+
+ if( !config->HasEntry( HOTKEYS_CONFIG_KEY ) )
+ {
+ // assume defaults are ok
+ return;
+ }
+
+ wxString data;
+ config->Read( HOTKEYS_CONFIG_KEY, &data );
+ delete config;
+
+ ParseHotkeyConfig( data, aDescList );
+}
+
+
+/* Function ReadHotkeyConfig
+ * Read configuration data and fill the current hotkey list with hotkeys
+ * aDescList is the current hotkey list descr. to initialize.
+ */
+int EDA_BASE_FRAME::ReadHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList )
+{
+ ::ReadHotkeyConfig( GetName(), aDescList );
+ return 1;
+}
+
+
+/* Function ParseHotkeyConfig
+ * the input format is: shortcut "key" "function"
+ * lines starting by # are ignored (comments)
+ * lines like [xxx] are tags (example: [common] or [libedit] which identify sections
+ */
+void ParseHotkeyConfig( const wxString& data,
+ struct EDA_HOTKEY_CONFIG* aDescList )
+{
+ // Read the config
+ wxStringTokenizer tokenizer( data, L"\r\n", wxTOKEN_STRTOK );
+ EDA_HOTKEY** CurrentHotkeyList = 0;
+
+ while( tokenizer.HasMoreTokens() )
+ {
+ wxString line = tokenizer.GetNextToken();
+ wxStringTokenizer lineTokenizer( line );
+
+ wxString line_type = lineTokenizer.GetNextToken();
+
+ if( line_type[0] == '#' ) //comment
+ continue;
+
+ if( line_type[0] == '[' ) // A tag is found. search infos in list
+ {
+ CurrentHotkeyList = 0;
+ EDA_HOTKEY_CONFIG* DList = aDescList;
+
+ for( ; DList->m_HK_InfoList; DList++ )
+ {
+ if( *DList->m_SectionTag == line_type )
+ {
+ CurrentHotkeyList = DList->m_HK_InfoList;
+ break;
+ }
+ }
+
+ continue;
+ }
+
+ if( line_type == wxT( "$Endlist" ) )
+ break;
+
+ if( line_type != wxT( "shortcut" ) )
+ continue;
+
+ if( CurrentHotkeyList == NULL )
+ continue;
+
+ // Get the key name
+ lineTokenizer.SetString( lineTokenizer.GetString(), L"\"\r\n\t ", wxTOKEN_STRTOK );
+ wxString keyname = lineTokenizer.GetNextToken();
+
+ wxString remainder = lineTokenizer.GetString();
+
+ // Get the command name
+ wxString fctname = remainder.AfterFirst( '\"' ).BeforeFirst( '\"' );
+
+ // search the hotkey in current hotkey list
+ for( EDA_HOTKEY** list = CurrentHotkeyList; *list != NULL; list++ )
+ {
+ EDA_HOTKEY* hk_decr = *list;
+
+ if( hk_decr->m_InfoMsg == fctname )
+ {
+ hk_decr->m_KeyCode = KeyCodeFromKeyName( keyname );
+ break;
+ }
+ }
+ }
+}
+
+
+void EDA_BASE_FRAME::ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList,
+ const wxString& aDefaultShortname )
+{
+ wxString ext = DEFAULT_HOTKEY_FILENAME_EXT;
+ wxString mask = wxT( "*." ) + ext;
+
+#if 0 // pass in the project dir as an argument
+ wxString path = wxPathOnly( Prj().GetProjectFullName() );
+#else
+ wxString path = GetMruPath();
+#endif
+ wxFileName fn( aDefaultShortname );
+ fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
+
+ wxString filename = EDA_FILE_SELECTOR( _( "Read Hotkey Configuration File:" ),
+ path,
+ fn.GetFullPath(),
+ ext,
+ mask,
+ this,
+ wxFD_OPEN,
+ true );
+
+ if( filename.IsEmpty() )
+ return;
+
+ ReadHotkeyConfigFile( filename, aDescList );
+ SetMruPath( wxFileName( filename ).GetPath() );
+}
+
+
+void EDA_BASE_FRAME::ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList,
+ const wxString& aDefaultShortname )
+{
+ wxString ext = DEFAULT_HOTKEY_FILENAME_EXT;
+ wxString mask = wxT( "*." ) + ext;
+
+#if 0
+ wxString path = wxPathOnly( Prj().GetProjectFullName() );
+#else
+ wxString path = GetMruPath();
+#endif
+ wxFileName fn( aDefaultShortname );
+ fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
+
+ wxString filename = EDA_FILE_SELECTOR( _( "Write Hotkey Configuration File:" ),
+ path,
+ fn.GetFullPath(),
+ ext,
+ mask,
+ this,
+ wxFD_SAVE,
+ true );
+
+ if( filename.IsEmpty() )
+ return;
+
+ WriteHotkeyConfig( aDescList, &filename );
+ SetMruPath( wxFileName( filename ).GetPath() );
+}
+
+
+/* add hotkey config options submenu to aMenu
+ */
+void AddHotkeyConfigMenu( wxMenu* aMenu )
+{
+ if( aMenu == NULL )
+ return;
+
+ wxMenu* HotkeySubmenu = new wxMenu();
+
+ // List existing hotkey menu
+ AddMenuItem( HotkeySubmenu,
+ ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST,
+ _( "&List Current Keys" ),
+ _( "Displays the current hotkeys list and corresponding commands" ),
+ KiBitmap( info_xpm ) );
+
+ // Call hotkeys editor
+ AddMenuItem( HotkeySubmenu, ID_PREFERENCES_HOTKEY_SHOW_EDITOR,
+ _( "&Edit Hotkeys" ),
+ _( "Call the hotkeys editor" ),
+ KiBitmap( editor_xpm ) );
+
+ HotkeySubmenu->AppendSeparator();
+
+ // create hotkey file to export current hotkeys config
+ AddMenuItem( HotkeySubmenu, ID_PREFERENCES_HOTKEY_EXPORT_CONFIG,
+ _( "E&xport Hotkeys" ),
+ _( "Create a hotkey configuration file to export the current hotkeys" ),
+ KiBitmap( save_setup_xpm ) );
+
+ // Reload hotkey file
+ AddMenuItem( HotkeySubmenu, ID_PREFERENCES_HOTKEY_IMPORT_CONFIG,
+ _( "&Import Hotkeys" ),
+ _( "Load an existing hotkey configuration file" ),
+ KiBitmap( reload_xpm ) );
+
+ // Append HotkeySubmenu to menu
+ AddMenuItem( aMenu, HotkeySubmenu,
+ wxID_ANY, _( "&Hotkeys" ),
+ _( "Hotkeys configuration and preferences" ),
+ KiBitmap( hotkeys_xpm ) );
+}
diff --git a/common/html_messagebox.cpp b/common/html_messagebox.cpp
new file mode 100644
index 0000000..0abc8ef
--- /dev/null
+++ b/common/html_messagebox.cpp
@@ -0,0 +1,106 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <html_messagebox.h>
+#include <macros.h>
+#include <common.h>
+
+
+HTML_MESSAGE_BOX::HTML_MESSAGE_BOX( wxWindow* parent, const wxString& aTitle,
+ wxPoint aPos, wxSize aSize) :
+ DIALOG_DISPLAY_HTML_TEXT_BASE( parent, wxID_ANY, aTitle, aPos, aSize )
+{
+ m_htmlWindow->SetLayoutDirection( wxLayout_LeftToRight );
+ ListClear();
+ Center();
+}
+
+
+void HTML_MESSAGE_BOX::OnCloseButtonClick( wxCommandEvent& event )
+{
+ // the dialog can be shown modal or not modal.
+ // therefore, use the right way to close it.
+ if( IsModal() )
+ EndModal( 0 );
+ else
+ Destroy();
+}
+
+
+void HTML_MESSAGE_BOX::ListClear()
+{
+ m_htmlWindow->SetPage( wxEmptyString );
+}
+
+
+void HTML_MESSAGE_BOX::ListSet( const wxString& aList )
+{
+ wxArrayString strings_list;
+ wxStringSplit( aList, strings_list, wxChar( '\n' ) );
+
+ wxString msg = wxT( "<ul>" );
+
+ for ( unsigned ii = 0; ii < strings_list.GetCount(); ii++ )
+ {
+ msg += wxT( "<li>" );
+ msg += strings_list.Item( ii ) + wxT( "</li>" );
+ }
+
+ msg += wxT( "</ul>" );
+
+ m_htmlWindow->AppendToPage( msg );
+}
+
+
+void HTML_MESSAGE_BOX::ListSet( const wxArrayString& aList )
+{
+ wxString msg = wxT( "<ul>" );
+
+ for( unsigned ii = 0; ii < aList.GetCount(); ii++ )
+ {
+ msg += wxT( "<li>" );
+ msg += aList.Item( ii ) + wxT( "</li>" );
+ }
+
+ msg += wxT( "</ul>" );
+
+ m_htmlWindow->AppendToPage( msg );
+}
+
+
+void HTML_MESSAGE_BOX::MessageSet( const wxString& message )
+{
+ wxString message_value = wxString::Format(
+ wxT( "<b>%s</b><br>" ), GetChars( message ) );
+
+ m_htmlWindow->AppendToPage( message_value );
+}
+
+
+void HTML_MESSAGE_BOX::AddHTML_Text( const wxString& message )
+{
+ m_htmlWindow->AppendToPage( message );
+}
+
diff --git a/common/kicad_curl/kicad_curl.cpp b/common/kicad_curl/kicad_curl.cpp
new file mode 100644
index 0000000..fb4413c
--- /dev/null
+++ b/common/kicad_curl/kicad_curl.cpp
@@ -0,0 +1,224 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2016 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+// kicad_curl.h must be included before wx headers, to avoid
+// conflicts for some defines, at least on Windows
+#include <kicad_curl/kicad_curl.h>
+
+#include <wx/log.h>
+#include <wx/dynlib.h>
+
+#include <macros.h>
+#include <fctsys.h>
+#include <ki_mutex.h> // MUTEX and MUTLOCK
+#include <richio.h>
+
+
+
+// These are even more private than class members, and since there is only
+// one instance of KICAD_CURL ever, these statics are hidden here to simplify the
+// client (API) header file.
+static volatile bool s_initialized;
+
+static MUTEX s_lock; // for s_initialized
+
+// Assume that on these platforms libcurl uses OpenSSL
+#if defined(__linux__) || defined(__MINGW32__)
+
+#include <openssl/crypto.h>
+
+static MUTEX* s_crypto_locks;
+
+static void lock_callback( int mode, int type, const char* file, int line )
+{
+ (void)file;
+ (void)line;
+
+ wxASSERT( s_crypto_locks && unsigned( type ) < unsigned( CRYPTO_num_locks() ) );
+
+ //DBG( printf( "%s: mode=0x%x type=%d file=%s line=%d\n", __func__, mode, type, file, line );)
+
+ if( mode & CRYPTO_LOCK )
+ {
+ s_crypto_locks[ type ].lock();
+ }
+ else
+ {
+ s_crypto_locks[ type ].unlock();
+ }
+}
+
+
+static void init_locks()
+{
+ s_crypto_locks = new MUTEX[ CRYPTO_num_locks() ];
+
+ // From http://linux.die.net/man/3/crypto_set_id_callback:
+
+ /*
+
+ OpenSSL can safely be used in multi-threaded applications provided that at
+ least two callback functions are set, locking_function and threadid_func.
+
+ locking_function(int mode, int n, const char *file, int line) is needed to
+ perform locking on shared data structures. (Note that OpenSSL uses a number
+ of global data structures that will be implicitly shared whenever multiple
+ threads use OpenSSL.) Multi-threaded applications will crash at random if it
+ is not set.
+
+ threadid_func( CRYPTO_THREADID *id) is needed to record the
+ currently-executing thread's identifier into id. The implementation of this
+ callback should not fill in id directly, but should use
+ CRYPTO_THREADID_set_numeric() if thread IDs are numeric, or
+ CRYPTO_THREADID_set_pointer() if they are pointer-based. If the application
+ does not register such a callback using CRYPTO_THREADID_set_callback(), then
+ a default implementation is used - on Windows and BeOS this uses the
+ system's default thread identifying APIs, and on all other platforms it uses
+ the address of errno. The latter is satisfactory for thread-safety if and
+ only if the platform has a thread-local error number facility.
+
+ Dick: "sounds like CRYPTO_THREADID_set_callback() is not mandatory on our
+ 2 OpenSSL platforms."
+
+ */
+
+ CRYPTO_set_locking_callback( &lock_callback );
+}
+
+
+static void kill_locks()
+{
+ CRYPTO_set_locking_callback( NULL );
+
+ delete[] s_crypto_locks;
+
+ s_crypto_locks = NULL;
+}
+
+#else
+
+inline void init_locks() { /* dummy */ }
+inline void kill_locks() { /* dummy */ }
+
+#endif
+
+/// At process termination, using atexit() keeps the CURL stuff out of the
+/// singletops and PGM_BASE.
+static void at_terminate()
+{
+ KICAD_CURL::Cleanup();
+}
+
+
+void KICAD_CURL::Init()
+{
+ // We test s_initialized twice in an effort to avoid
+ // unnecessarily locking s_lock. This understands that the common case
+ // will not need to lock.
+ if( !s_initialized )
+ {
+ MUTLOCK lock( s_lock );
+
+ if( !s_initialized )
+ {
+ if( curl_global_init( CURL_GLOBAL_ALL ) != CURLE_OK )
+ {
+ THROW_IO_ERROR( "curl_global_init() failed." );
+ }
+
+ init_locks();
+
+ wxLogDebug( "Using %s", GetVersion() );
+
+ s_initialized = true;
+ }
+ }
+}
+
+
+void KICAD_CURL::Cleanup()
+{
+ /*
+
+ Calling MUTLOCK() from a static destructor will typically be bad, since the
+ s_lock may already have been statically destroyed itself leading to a boost
+ exception. (Remember C++ does not provide certain sequencing of static
+ destructor invocation.)
+
+ To prevent this we test s_initialized twice, which ensures that the MUTLOCK
+ is only instantiated on the first call, which should be from
+ PGM_BASE::destroy() which is first called earlier than static destruction.
+ Then when called again from the actual PGM_BASE::~PGM_BASE() function,
+ MUTLOCK will not be instantiated because s_initialized will be false.
+
+ */
+
+ if( s_initialized )
+ {
+ MUTLOCK lock( s_lock );
+
+ if( s_initialized )
+ {
+ curl_global_cleanup();
+
+ kill_locks();
+
+ atexit( &at_terminate );
+
+ s_initialized = false;
+ }
+ }
+}
+
+
+std::string KICAD_CURL::GetSimpleVersion()
+{
+ if( !s_initialized )
+ Init();
+
+ curl_version_info_data* info = curl_version_info( CURLVERSION_NOW );
+
+ std::string res;
+
+ if( info->version )
+ {
+ res += "libcurl version: " + std::string( info->version );
+ }
+
+ res += " (";
+
+ if( info->features & CURL_VERSION_SSL )
+ {
+ res += "with SSL - ";
+ res += std::string( info->ssl_version );
+ }
+ else
+ {
+ res += "without SSL";
+ }
+ res += ")";
+
+ return res;
+}
diff --git a/common/kicad_curl/kicad_curl_easy.cpp b/common/kicad_curl/kicad_curl_easy.cpp
new file mode 100644
index 0000000..1e84afe
--- /dev/null
+++ b/common/kicad_curl/kicad_curl_easy.cpp
@@ -0,0 +1,94 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <kicad_curl/kicad_curl_easy.h>
+
+#include <cstddef>
+#include <exception>
+#include <stdarg.h>
+#include <sstream>
+#include <richio.h>
+
+
+static size_t write_callback( void* contents, size_t size, size_t nmemb, void* userp )
+{
+ size_t realsize = size * nmemb;
+
+ std::string* p = (std::string*) userp;
+
+ p->append( (const char*) contents, realsize );
+
+ return realsize;
+}
+
+
+KICAD_CURL_EASY::KICAD_CURL_EASY() :
+ m_headers( NULL )
+{
+ // Call KICAD_CURL::Init() from in here everytime, but only the first time
+ // will incur any overhead. This strategy ensures that libcurl is never loaded
+ // unless it is needed.
+
+ KICAD_CURL::Init();
+
+ m_CURL = curl_easy_init();
+
+ if( !m_CURL )
+ {
+ THROW_IO_ERROR( "Unable to initialize CURL session" );
+ }
+
+ curl_easy_setopt( m_CURL, CURLOPT_WRITEFUNCTION, write_callback );
+ curl_easy_setopt( m_CURL, CURLOPT_WRITEDATA, (void*) &m_buffer );
+}
+
+
+KICAD_CURL_EASY::~KICAD_CURL_EASY()
+{
+ if( m_headers )
+ curl_slist_free_all( m_headers );
+
+ curl_easy_cleanup( m_CURL );
+}
+
+
+void KICAD_CURL_EASY::Perform()
+{
+ if( m_headers )
+ {
+ curl_easy_setopt( m_CURL, CURLOPT_HTTPHEADER, m_headers );
+ }
+
+ // bonus: retain worst case memory allocation, should re-use occur
+ m_buffer.clear();
+
+ CURLcode res = curl_easy_perform( m_CURL );
+
+ if( res != CURLE_OK )
+ {
+ std::string msg = StrPrintf( "curl_easy_perform()=%d: %s",
+ res, GetErrorText( res ).c_str() );
+ THROW_IO_ERROR( msg );
+ }
+}
diff --git a/common/kiface_i.cpp b/common/kiface_i.cpp
new file mode 100644
index 0000000..fdafa4e
--- /dev/null
+++ b/common/kiface_i.cpp
@@ -0,0 +1,107 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <macros.h> // FROM_UTF8()
+#include <wx/config.h>
+#include <wx/stdpaths.h>
+
+#include <kiface_i.h>
+#include <pgm_base.h>
+
+#include <common.h>
+
+/// Initialize aDst SEARCH_STACK with KIFACE (DSO) specific settings.
+/// A non-member function so it an be moved easily, plus it's nobody's business.
+static void setSearchPaths( SEARCH_STACK* aDst, KIWAY::FACE_T aId )
+{
+ SEARCH_STACK bases;
+
+ SystemDirsAppend( &bases );
+ aDst->Clear();
+
+ for( unsigned i = 0; i < bases.GetCount(); ++i )
+ {
+ wxFileName fn( bases[i], wxEmptyString );
+
+ // Add schematic library file path to search path list.
+ // we must add <kicad path>/library and <kicad path>/library/doc
+ if( aId == KIWAY::FACE_SCH )
+ {
+ // Add schematic doc file path (library/doc) to search path list.
+
+ fn.AppendDir( wxT( "library" ) );
+ aDst->AddPaths( fn.GetPath() );
+
+ fn.AppendDir( wxT( "doc" ) );
+ aDst->AddPaths( fn.GetPath() );
+
+ fn.RemoveLastDir();
+ fn.RemoveLastDir(); // "../../" up twice, removing library/doc/
+ }
+
+ // Add PCB library file path to search path list.
+ if( aId == KIWAY::FACE_PCB || aId == KIWAY::FACE_CVPCB )
+ {
+ fn.AppendDir( wxT( "modules" ) );
+ aDst->AddPaths( fn.GetPath() );
+
+ // Add 3D module library file path to search path list.
+ fn.AppendDir( wxT( "packages3d" ) );
+ aDst->AddPaths( fn.GetPath() );
+
+ fn.RemoveLastDir();
+ fn.RemoveLastDir(); // "../../" up twice, remove modules/packages3d
+ }
+
+ // Add KiCad template file path to search path list.
+ fn.AppendDir( wxT( "template" ) );
+ aDst->AddPaths( fn.GetPath() );
+ }
+
+#ifndef __WXMAC__
+ aDst->AddPaths( wxT( "/usr/local/share" ) );
+#endif
+
+#if 1 && defined(DEBUG)
+ aDst->Show( "kiface" );
+#endif
+}
+
+
+bool KIFACE_I::start_common( int aCtlBits )
+{
+ m_start_flags = aCtlBits;
+ m_bm.Init();
+ setSearchPaths( &m_bm.m_search, m_id );
+
+ return true;
+}
+
+
+void KIFACE_I::end_common()
+{
+ m_bm.End();
+}
+
diff --git a/common/kiway.cpp b/common/kiway.cpp
new file mode 100644
index 0000000..7919b9c
--- /dev/null
+++ b/common/kiway.cpp
@@ -0,0 +1,432 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <string.h>
+
+#include <macros.h>
+#include <kiway.h>
+#include <kiway_player.h>
+#include <kiway_express.h>
+#include <pgm_base.h>
+#include <config.h>
+#include <id.h>
+
+#include <wx/stdpaths.h>
+#include <wx/debug.h>
+
+
+KIFACE* KIWAY::m_kiface[KIWAY_FACE_COUNT];
+int KIWAY::m_kiface_version[KIWAY_FACE_COUNT];
+
+
+
+KIWAY::KIWAY( PGM_BASE* aProgram, int aCtlBits, wxFrame* aTop ):
+ m_program( aProgram ),
+ m_ctl( aCtlBits ),
+ m_top( 0 )
+{
+ SetTop( aTop ); // hook player_destroy_handler() into aTop.
+
+ memset( m_player, 0, sizeof( m_player ) );
+}
+
+
+// Any event types derived from wxCommandEvt, like wxWindowDestroyEvent, are
+// propogated upwards to parent windows if not handled below. Therefore the
+// m_top window should receive all wxWindowDestroyEvents originating from
+// KIWAY_PLAYERs. It does anyways, but now player_destroy_handler eavesdrops
+// on that event stream looking for KIWAY_PLAYERs being closed.
+
+void KIWAY::player_destroy_handler( wxWindowDestroyEvent& event )
+{
+ wxWindow* w = event.GetWindow();
+
+ for( unsigned i=0; i<DIM(m_player); ++i )
+ {
+ // if destroying one of our flock, then mark it as deceased.
+ if( (wxWindow*) m_player[i] == w )
+ {
+ DBG(printf( "%s: m_player[%u] destroyed: %s\n",
+ __func__, i, TO_UTF8( m_player[i]->GetName() ) );)
+
+ m_player[i] = 0;
+ }
+ }
+
+ event.Skip(); // skip to who, the wxApp? I'm the top window.
+}
+
+
+void KIWAY::SetTop( wxFrame* aTop )
+{
+ if( m_top )
+ {
+ m_top->Disconnect( wxEVT_DESTROY, wxWindowDestroyEventHandler( KIWAY::player_destroy_handler ), NULL, this );
+ }
+
+ if( aTop )
+ {
+ aTop->Connect( wxEVT_DESTROY, wxWindowDestroyEventHandler( KIWAY::player_destroy_handler ), NULL, this );
+ }
+
+ m_top = aTop;
+}
+
+
+const wxString KIWAY::dso_full_path( FACE_T aFaceId )
+{
+ const wxChar* name;
+
+ switch( aFaceId )
+ {
+ case FACE_SCH: name = KIFACE_PREFIX wxT( "eeschema" ); break;
+ case FACE_PCB: name = KIFACE_PREFIX wxT( "pcbnew" ); break;
+ case FACE_CVPCB: name = KIFACE_PREFIX wxT( "cvpcb" ); break;
+ case FACE_GERBVIEW: name = KIFACE_PREFIX wxT( "gerbview" ); break;
+ case FACE_PL_EDITOR: name = KIFACE_PREFIX wxT( "pl_editor" ); break;
+ case FACE_PCB_CALCULATOR: name = KIFACE_PREFIX wxT( "pcb_calculator" ); break;
+ case FACE_BMP2CMP: name = KIFACE_PREFIX wxT( "bitmap2component" ); break;
+
+ default:
+ wxASSERT_MSG( 0, wxT( "caller has a bug, passed a bad aFaceId" ) );
+ return wxEmptyString;
+ }
+
+#ifndef __WXMAC__
+ wxFileName fn = wxStandardPaths::Get().GetExecutablePath();
+#else
+ // we have the dso's in main OSX bundle kicad.app/Contents/PlugIns
+ wxFileName fn = Pgm().GetExecutablePath();
+ fn.AppendDir( wxT( "Contents" ) );
+ fn.AppendDir( wxT( "PlugIns" ) );
+#endif
+
+ fn.SetName( name );
+
+ // Here a "suffix" == an extension with a preceding '.',
+ // so skip the preceding '.' to get an extension
+ fn.SetExt( KIFACE_SUFFIX + 1 ); // + 1 => &KIFACE_SUFFIX[1]
+
+ return fn.GetFullPath();
+}
+
+
+PROJECT& KIWAY::Prj() const
+{
+ return *(PROJECT*) &m_project; // strip const-ness, function really is const.
+}
+
+
+KIFACE* KIWAY::KiFACE( FACE_T aFaceId, bool doLoad )
+{
+ // Since this will be called from python, cannot assume that code will
+ // not pass a bad aFaceId.
+ if( unsigned( aFaceId ) >= DIM( m_kiface ) )
+ {
+ // @todo : throw an exception here for python's benefit, at least that
+ // way it gets some explanatory text.
+
+ wxASSERT_MSG( 0, wxT( "caller has a bug, passed a bad aFaceId" ) );
+ return NULL;
+ }
+
+ // return the previously loaded KIFACE, if it was.
+ if( m_kiface[aFaceId] )
+ return m_kiface[aFaceId];
+
+ // DSO with KIFACE has not been loaded yet, does caller want to load it?
+ if( doLoad )
+ {
+ wxString dname = dso_full_path( aFaceId );
+
+ wxDynamicLibrary dso;
+
+ void* addr = NULL;
+
+ if( !dso.Load( dname, wxDL_VERBATIM | wxDL_NOW | wxDL_GLOBAL ) )
+ {
+ // Failure: error reporting UI was done via wxLogSysError().
+ // No further reporting required here.
+ }
+
+ else if( ( addr = dso.GetSymbol( wxT( KIFACE_INSTANCE_NAME_AND_VERSION ) ) ) == NULL )
+ {
+ // Failure: error reporting UI was done via wxLogSysError().
+ // No further reporting required here.
+ }
+
+ else
+ {
+ KIFACE_GETTER_FUNC* getter = (KIFACE_GETTER_FUNC*) addr;
+
+ KIFACE* kiface = getter( &m_kiface_version[aFaceId], KIFACE_VERSION, m_program );
+
+ // KIFACE_GETTER_FUNC function comment (API) says the non-NULL is unconditional.
+ wxASSERT_MSG( kiface,
+ wxT( "attempted DSO has a bug, failed to return a KIFACE*" ) );
+
+ // Give the DSO a single chance to do its "process level" initialization.
+ // "Process level" specifically means stay away from any projects in there.
+ if( kiface->OnKifaceStart( m_program, m_ctl ) )
+ {
+ // Tell dso's wxDynamicLibrary destructor not to Unload() the program image.
+ (void) dso.Detach();
+
+ return m_kiface[aFaceId] = kiface;
+ }
+ }
+
+ // In any of the failure cases above, dso.Unload() should be called here
+ // by dso destructor.
+ // However:
+
+ // There is a file installation bug. We only look for KIFACE_I's which we know
+ // to exist, and we did not find one. If we do not find one, this is an
+ // installation bug.
+
+ wxString msg = wxString::Format( wxT(
+ "Fatal Installation Bug. File:\n"
+ "'%s'\ncould not be loaded\n" ), GetChars( dname ) );
+
+ if( ! wxFileExists( dname ) )
+ msg << wxT( "It is missing.\n" );
+ else
+ msg << wxT( "Perhaps a shared library (.dll or .so) file is missing.\n" );
+
+ msg << wxT( "From command line: argv[0]:\n'" );
+ msg << wxStandardPaths::Get().GetExecutablePath() << wxT( "'\n" );
+
+ // This is a fatal error, one from which we cannot recover, nor do we want
+ // to protect against in client code which would require numerous noisy
+ // tests in numerous places. So we inform the user that the installation
+ // is bad. This exception will likely not get caught until way up in the
+ // wxApp derivative, at which point the process will exit gracefully.
+ THROW_IO_ERROR( msg );
+ }
+
+ return NULL;
+}
+
+
+KIWAY::FACE_T KIWAY::KifaceType( FRAME_T aFrameType )
+{
+ switch( aFrameType )
+ {
+ case FRAME_SCH:
+ case FRAME_SCH_LIB_EDITOR:
+ case FRAME_SCH_VIEWER:
+ case FRAME_SCH_VIEWER_MODAL:
+ return FACE_SCH;
+
+ case FRAME_PCB:
+ case FRAME_PCB_MODULE_EDITOR:
+ case FRAME_PCB_MODULE_VIEWER:
+ case FRAME_PCB_MODULE_VIEWER_MODAL:
+ case FRAME_PCB_FOOTPRINT_WIZARD_MODAL:
+ case FRAME_PCB_DISPLAY3D:
+ return FACE_PCB;
+
+ case FRAME_CVPCB:
+ case FRAME_CVPCB_DISPLAY:
+ return FACE_CVPCB;
+
+ case FRAME_GERBER:
+ return FACE_GERBVIEW;
+
+ case FRAME_PL_EDITOR:
+ return FACE_PL_EDITOR;
+
+ case FRAME_CALC:
+ return FACE_PCB_CALCULATOR;
+
+ case FRAME_BM2CMP:
+ return FACE_BMP2CMP;
+
+ default:
+ return FACE_T( -1 );
+ }
+}
+
+
+KIWAY_PLAYER* KIWAY::Player( FRAME_T aFrameType, bool doCreate )
+{
+ // Since this will be called from python, cannot assume that code will
+ // not pass a bad aFrameType.
+ if( unsigned( aFrameType ) >= DIM( m_player ) )
+ {
+ // @todo : throw an exception here for python's benefit, at least that
+ // way it gets some explanatory text.
+
+ wxASSERT_MSG( 0, wxT( "caller has a bug, passed a bad aFrameType" ) );
+ return NULL;
+ }
+
+ // return the previously opened window
+ if( m_player[aFrameType] )
+ return m_player[aFrameType];
+
+ if( doCreate )
+ {
+ FACE_T face_type = KifaceType( aFrameType );
+ wxASSERT( face_type != FACE_T(-1) );
+
+ KIFACE* kiface = KiFACE( face_type );
+ wxASSERT( kiface );
+
+ if( kiface )
+ {
+ KIWAY_PLAYER* frame = (KIWAY_PLAYER*) kiface->CreateWindow(
+ m_top,
+ aFrameType,
+ this,
+ m_ctl // questionable need, these same flags where passed to the KIFACE::OnKifaceStart()
+ );
+ wxASSERT( frame );
+
+ return m_player[aFrameType] = frame;
+ }
+ }
+
+ return NULL;
+}
+
+
+bool KIWAY::PlayerClose( FRAME_T aFrameType, bool doForce )
+{
+ // Since this will be called from python, cannot assume that code will
+ // not pass a bad aFrameType.
+ if( unsigned( aFrameType ) >= DIM( m_player ) )
+ {
+ // @todo : throw an exception here for python's benefit, at least that
+ // way it gets some explanatory text.
+
+ wxASSERT_MSG( 0, wxT( "caller has a bug, passed a bad aFrameType" ) );
+ return false;
+ }
+
+ if( m_player[aFrameType] )
+ {
+ if( m_player[aFrameType]->Close( doForce ) )
+ {
+ m_player[aFrameType] = 0;
+ return true;
+ }
+
+ return false;
+ }
+
+ return true; // window is closed already.
+}
+
+
+bool KIWAY::PlayersClose( bool doForce )
+{
+ bool ret = true;
+
+ for( unsigned i=0; i < DIM( m_player ); ++i )
+ {
+ ret = ret && PlayerClose( FRAME_T( i ), doForce );
+ }
+
+ return ret;
+}
+
+
+void KIWAY::ExpressMail( FRAME_T aDestination,
+ MAIL_T aCommand, const std::string& aPayload, wxWindow* aSource )
+{
+ KIWAY_EXPRESS mail( aDestination, aCommand, aPayload, aSource );
+
+ ProcessEvent( mail );
+}
+
+
+void KIWAY::SetLanguage( int aLanguage )
+{
+ Pgm().SetLanguageIdentifier( aLanguage );
+ Pgm().SetLanguage();
+
+#if 1
+ // This is a risky hack that goes away if we allow the language to be
+ // set only from the top most frame if !Kiface.IsSingle()
+
+ // Only for the C++ project manager, and not for the python one and not for
+ // single_top do we look for the EDA_BASE_FRAME as the top level window.
+ // For single_top this is not needed because that window is registered in
+ // the array below.
+ if( m_ctl & KFCTL_CPP_PROJECT_SUITE )
+ {
+ EDA_BASE_FRAME* top = (EDA_BASE_FRAME*) m_top;
+ if( top )
+ top->ShowChangedLanguage();
+ }
+#endif
+
+ for( unsigned i=0; i < DIM( m_player ); ++i )
+ {
+ KIWAY_PLAYER* frame = m_player[i];
+
+ if( frame )
+ {
+ frame->ShowChangedLanguage();
+ }
+ }
+}
+
+
+bool KIWAY::ProcessEvent( wxEvent& aEvent )
+{
+ KIWAY_EXPRESS* mail = dynamic_cast<KIWAY_EXPRESS*>( &aEvent );
+
+ if( mail )
+ {
+ FRAME_T dest = mail->Dest();
+
+ // see if recipient is alive
+ KIWAY_PLAYER* alive = Player( dest, false );
+
+ if( alive )
+ {
+#if 1
+ return alive->ProcessEvent( aEvent );
+#else
+ alive->KiwayMailIn( *mail );
+ return true;
+#endif
+ }
+ }
+
+ return false;
+}
+
+
+void KIWAY::OnKiwayEnd()
+{
+ for( unsigned i=0; i < DIM( m_kiface ); ++i )
+ {
+ if( m_kiface[i] )
+ m_kiface[i]->OnKifaceEnd();
+ }
+}
+
diff --git a/common/kiway_express.cpp b/common/kiway_express.cpp
new file mode 100644
index 0000000..8056f4a
--- /dev/null
+++ b/common/kiway_express.cpp
@@ -0,0 +1,60 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <kiway_express.h>
+
+//IMPLEMENT_DYNAMIC_CLASS( KIWAY_EXPRESS, wxEvent )
+
+
+#if 0 // requires that this code reside in only a single link image, rather than
+ // in each of kicad.exe, _pcbnew.kiface, and _eeschema.kiface as now.
+ // In the current case wxEVENT_ID will get a different value in each link
+ // image. We need to put this into a shared library for common utilization,
+ // I think that library should be libki.so. I am reluctant to do that now
+ // because the cost will be finding libki.so at runtime, and we need infrastructure
+ // to set our LIB_ENV_VAR to the proper place so libki.so can be reliably found.
+ // All things in due course.
+const wxEventType KIWAY_EXPRESS::wxEVENT_ID = wxNewEventType();
+#else
+const wxEventType KIWAY_EXPRESS::wxEVENT_ID = 30000; // commmon accross all link images, hopefully unique.
+#endif
+
+
+KIWAY_EXPRESS::KIWAY_EXPRESS( const KIWAY_EXPRESS& anOther ) :
+ wxEvent( anOther )
+{
+ m_destination = anOther.m_destination;
+ m_payload = anOther.m_payload;
+}
+
+
+KIWAY_EXPRESS::KIWAY_EXPRESS( FRAME_T aDestination, MAIL_T aCommand,
+ const std::string& aPayload, wxWindow* aSource ) :
+ wxEvent( aCommand, wxEVENT_ID ),
+ m_destination( aDestination ),
+ m_payload( aPayload )
+{
+ SetEventObject( aSource );
+}
+
diff --git a/common/kiway_holder.cpp b/common/kiway_holder.cpp
new file mode 100644
index 0000000..a0a2dcf
--- /dev/null
+++ b/common/kiway_holder.cpp
@@ -0,0 +1,32 @@
+
+#include <kiway.h>
+#include <kiway_player.h>
+
+#if defined(DEBUG)
+ #include <typeinfo>
+#endif
+
+
+PROJECT& KIWAY_HOLDER::Prj() const
+{
+ return Kiway().Prj();
+}
+
+
+// this is not speed critical, hide it out of line.
+void KIWAY_HOLDER::SetKiway( wxWindow* aDest, KIWAY* aKiway )
+{
+#if defined(DEBUG)
+ // offer a trap point for debugging most any window
+ wxASSERT( aDest );
+ if( !strcmp( typeid(aDest).name(), "DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB" ) )
+ {
+ int breakhere=1;
+ (void) breakhere;
+ }
+#endif
+
+ (void) aDest;
+
+ m_kiway = aKiway;
+}
diff --git a/common/kiway_player.cpp b/common/kiway_player.cpp
new file mode 100644
index 0000000..a33acc1
--- /dev/null
+++ b/common/kiway_player.cpp
@@ -0,0 +1,205 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <kiway_player.h>
+#include <kiway_express.h>
+#include <kiway.h>
+#include <id.h>
+#include <macros.h>
+#include <typeinfo>
+#include <wx/utils.h>
+#include <wx/evtloop.h>
+
+
+BEGIN_EVENT_TABLE( KIWAY_PLAYER, EDA_BASE_FRAME )
+ EVT_KIWAY_EXPRESS( KIWAY_PLAYER::kiway_express )
+ EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, KIWAY_PLAYER::language_change )
+END_EVENT_TABLE()
+
+
+KIWAY_PLAYER::KIWAY_PLAYER( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
+ const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString& aWdoName ) :
+ EDA_BASE_FRAME( aParent, aFrameType, aTitle, aPos, aSize, aStyle, aWdoName ),
+ KIWAY_HOLDER( aKiway ),
+ m_modal( false ),
+ m_modal_loop( 0 ), m_modal_resultant_parent( 0 )
+{
+ // DBG( printf("KIWAY_EXPRESS::wxEVENT_ID:%d\n", KIWAY_EXPRESS::wxEVENT_ID );)
+ m_modal_ret_val = 0;
+}
+
+
+KIWAY_PLAYER::KIWAY_PLAYER( wxWindow* aParent, wxWindowID aId, const wxString& aTitle,
+ const wxPoint& aPos, const wxSize& aSize, long aStyle,
+ const wxString& aWdoName ) :
+ EDA_BASE_FRAME( aParent, (FRAME_T) aId, aTitle, aPos, aSize, aStyle, aWdoName ),
+ KIWAY_HOLDER( 0 ),
+ m_modal( false ),
+ m_modal_loop( 0 ),
+ m_modal_resultant_parent( 0 ),
+ m_modal_ret_val( false )
+{
+ // DBG( printf("KIWAY_EXPRESS::wxEVENT_ID:%d\n", KIWAY_EXPRESS::wxEVENT_ID );)
+}
+
+
+KIWAY_PLAYER::~KIWAY_PLAYER(){}
+
+
+void KIWAY_PLAYER::KiwayMailIn( KIWAY_EXPRESS& aEvent )
+{
+ // override this in derived classes.
+}
+
+
+bool KIWAY_PLAYER::ShowModal( wxString* aResult, wxWindow* aResultantFocusWindow )
+{
+ wxASSERT_MSG( IsModal(), wxT( "ShowModal() shouldn't be called on non-modal frame" ) );
+
+ /*
+ This function has a nice interface but a necessarily unsightly implementation.
+ Now the implementation is encapsulated, localizing future changes.
+
+ It works in tandem with DismissModal(). But only ShowModal() is in the
+ vtable and therefore cross-module capable.
+ */
+
+ // This is an exception safe way to zero a pointer before returning.
+ // Yes, even though DismissModal() clears this first normally, this is
+ // here in case there's an exception before the dialog is dismissed.
+ struct NULLER
+ {
+ void*& m_what;
+ NULLER( void*& aPtr ) : m_what( aPtr ) {}
+ ~NULLER() { m_what = 0; } // indeed, set it to NULL on destruction
+ } clear_this( (void*&) m_modal_loop );
+
+
+ m_modal_resultant_parent = aResultantFocusWindow;
+
+ Show( true );
+ Raise(); // Needed on some Window managers to always display the frame
+
+ SetFocus();
+
+ {
+ // We have to disable all frames but the the modal one.
+ // wxWindowDisabler does that, but it also disables all top level windows
+ // We do not want to disable top level windows which are child of the modal one,
+ // if they are enabled.
+ // An example is an aui toolbar which was moved
+ // or a dialog or an other frame or miniframe opened by the modal one.
+ wxWindowList wlist = GetChildren();
+ std::vector<wxWindow*> enabledTopLevelWindows;
+
+ for( unsigned ii = 0; ii < wlist.size(); ii++ )
+ if( wlist[ii]->IsTopLevel() && wlist[ii]->IsEnabled() )
+ enabledTopLevelWindows.push_back( wlist[ii] );
+
+ // exception safe way to disable all top level windows except the modal one,
+ // re-enables only those that were disabled on exit
+ wxWindowDisabler toggle( this );
+
+ for( unsigned ii = 0; ii < enabledTopLevelWindows.size(); ii++ )
+ enabledTopLevelWindows[ii]->Enable( true );
+
+ WX_EVENT_LOOP event_loop;
+ m_modal_loop = &event_loop;
+ event_loop.Run();
+
+ } // End of scope for some variables.
+ // End nesting before setting focus below.
+
+ if( aResult )
+ *aResult = m_modal_string;
+
+ DBG(printf( "~%s: aResult:'%s' ret:%d\n",
+ __func__, TO_UTF8( m_modal_string ), m_modal_ret_val );)
+
+ if( aResultantFocusWindow )
+ {
+ aResultantFocusWindow->Raise();
+
+ // have the final say, after wxWindowDisabler reenables my parent and
+ // the events settle down, set the focus
+ wxSafeYield();
+ aResultantFocusWindow->SetFocus();
+ }
+
+ return m_modal_ret_val;
+}
+
+bool KIWAY_PLAYER::Destroy()
+{
+ return EDA_BASE_FRAME::Destroy();
+}
+
+bool KIWAY_PLAYER::IsDismissed()
+{
+ bool ret = !m_modal_loop;
+
+ DBG(printf( "%s: ret:%d\n", __func__, ret );)
+
+ return ret;
+}
+
+
+void KIWAY_PLAYER::DismissModal( bool aRetVal, const wxString& aResult )
+{
+ m_modal_ret_val = aRetVal;
+ m_modal_string = aResult;
+
+ if( m_modal_loop )
+ {
+ m_modal_loop->Exit();
+ m_modal_loop = 0; // this marks it as dismissed.
+ }
+
+ Show( false );
+}
+
+
+void KIWAY_PLAYER::kiway_express( KIWAY_EXPRESS& aEvent )
+{
+ // logging support
+#if defined(DEBUG)
+ const char* class_name = typeid( this ).name();
+
+ printf( "%s: received cmd:%d pay:'%s'\n", class_name,
+ aEvent.Command(), aEvent.GetPayload().c_str() );
+#endif
+
+ KiwayMailIn( aEvent ); // call the virtual, override in derived.
+}
+
+
+void KIWAY_PLAYER::language_change( wxCommandEvent& event )
+{
+ int id = event.GetId();
+
+ // tell all the KIWAY_PLAYERs about the language change.
+ Kiway().SetLanguage( id );
+}
diff --git a/common/lockfile.cpp b/common/lockfile.cpp
new file mode 100644
index 0000000..b3c3714
--- /dev/null
+++ b/common/lockfile.cpp
@@ -0,0 +1,56 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/filename.h>
+#include <wx/snglinst.h>
+#include <common.h>
+
+
+wxSingleInstanceChecker* LockFile( const wxString& aFileName )
+{
+ // first make absolute and normalize, to avoid that different lock files
+ // for the same file can be created
+ wxFileName fn( aFileName );
+
+ fn.MakeAbsolute();
+
+ wxString lockFileName = fn.GetFullPath() + wxT( ".lock" );
+
+ lockFileName.Replace( wxT( "/" ), wxT( "_" ) );
+
+ // We can have filenames coming from Windows, so also convert Windows separator
+ lockFileName.Replace( wxT( "\\" ), wxT( "_" ) );
+
+ wxSingleInstanceChecker* p = new wxSingleInstanceChecker( lockFileName,
+ GetKicadLockFilePath() );
+
+ if( p->IsAnotherRunning() )
+ {
+ delete p;
+ p = NULL;
+ }
+
+ return p;
+}
+
diff --git a/common/lset.cpp b/common/lset.cpp
new file mode 100644
index 0000000..4e4248d
--- /dev/null
+++ b/common/lset.cpp
@@ -0,0 +1,747 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <stdarg.h>
+#include <assert.h>
+
+#include <layers_id_colors_and_visibility.h>
+#include <class_board.h>
+
+
+LSET::LSET( const LAYER_ID* aArray, unsigned aCount ) :
+ BASE_SET()
+{
+ for( unsigned i=0; i<aCount; ++i )
+ set( aArray[i] );
+}
+
+
+LSET::LSET( unsigned aIdCount, LAYER_ID aFirst, ... ) :
+ BASE_SET()
+{
+ // The constructor, without the mandatory aFirst argument, could have been confused
+ // by the compiler with the LSET( LAYER_ID ). With aFirst, that ambiguity is not
+ // present. Therefore aIdCount must always be >=1.
+ wxASSERT_MSG( aIdCount > 0, wxT( "aIdCount must be >= 1" ) );
+
+ set( aFirst );
+
+ if( --aIdCount )
+ {
+ va_list ap;
+
+ va_start( ap, aFirst );
+
+ for( unsigned i=0; i<aIdCount; ++i )
+ {
+ LAYER_ID id = (LAYER_ID) va_arg( ap, int );
+
+ // printf( "%s: id:%d LAYER_ID_COUNT:%d\n", __func__, id, LAYER_ID_COUNT );
+
+ assert( unsigned( id ) < LAYER_ID_COUNT );
+
+ set( id );
+ }
+
+ va_end( ap );
+ }
+}
+
+
+const wxChar* LSET::Name( LAYER_ID aLayerId )
+{
+ const wxChar* txt;
+
+ // using a switch to explicitly show the mapping more clearly
+ switch( aLayerId )
+ {
+ case F_Cu: txt = wxT( "F.Cu" ); break;
+ case In1_Cu: txt = wxT( "In1.Cu" ); break;
+ case In2_Cu: txt = wxT( "In2.Cu" ); break;
+ case In3_Cu: txt = wxT( "In3.Cu" ); break;
+ case In4_Cu: txt = wxT( "In4.Cu" ); break;
+ case In5_Cu: txt = wxT( "In5.Cu" ); break;
+ case In6_Cu: txt = wxT( "In6.Cu" ); break;
+ case In7_Cu: txt = wxT( "In7.Cu" ); break;
+ case In8_Cu: txt = wxT( "In8.Cu" ); break;
+ case In9_Cu: txt = wxT( "In9.Cu" ); break;
+ case In10_Cu: txt = wxT( "In10.Cu" ); break;
+ case In11_Cu: txt = wxT( "In11.Cu" ); break;
+ case In12_Cu: txt = wxT( "In12.Cu" ); break;
+ case In13_Cu: txt = wxT( "In13.Cu" ); break;
+ case In14_Cu: txt = wxT( "In14.Cu" ); break;
+ case In15_Cu: txt = wxT( "In15.Cu" ); break;
+ case In16_Cu: txt = wxT( "In16.Cu" ); break;
+ case In17_Cu: txt = wxT( "In17.Cu" ); break;
+ case In18_Cu: txt = wxT( "In18.Cu" ); break;
+ case In19_Cu: txt = wxT( "In19.Cu" ); break;
+ case In20_Cu: txt = wxT( "In20.Cu" ); break;
+ case In21_Cu: txt = wxT( "In21.Cu" ); break;
+ case In22_Cu: txt = wxT( "In22.Cu" ); break;
+ case In23_Cu: txt = wxT( "In23.Cu" ); break;
+ case In24_Cu: txt = wxT( "In24.Cu" ); break;
+ case In25_Cu: txt = wxT( "In25.Cu" ); break;
+ case In26_Cu: txt = wxT( "In26.Cu" ); break;
+ case In27_Cu: txt = wxT( "In27.Cu" ); break;
+ case In28_Cu: txt = wxT( "In28.Cu" ); break;
+ case In29_Cu: txt = wxT( "In29.Cu" ); break;
+ case In30_Cu: txt = wxT( "In30.Cu" ); break;
+ case B_Cu: txt = wxT( "B.Cu" ); break;
+
+ // Technicals
+ case B_Adhes: txt = wxT( "B.Adhes" ); break;
+ case F_Adhes: txt = wxT( "F.Adhes" ); break;
+ case B_Paste: txt = wxT( "B.Paste" ); break;
+ case F_Paste: txt = wxT( "F.Paste" ); break;
+ case B_SilkS: txt = wxT( "B.SilkS" ); break;
+ case F_SilkS: txt = wxT( "F.SilkS" ); break;
+ case B_Mask: txt = wxT( "B.Mask" ); break;
+ case F_Mask: txt = wxT( "F.Mask" ); break;
+
+ // Users
+ case Dwgs_User: txt = wxT( "Dwgs.User" ); break;
+ case Cmts_User: txt = wxT( "Cmts.User" ); break;
+ case Eco1_User: txt = wxT( "Eco1.User" ); break;
+ case Eco2_User: txt = wxT( "Eco2.User" ); break;
+ case Edge_Cuts: txt = wxT( "Edge.Cuts" ); break;
+ case Margin: txt = wxT( "Margin" ); break;
+
+ // Footprint
+ case F_CrtYd: txt = wxT( "F.CrtYd" ); break;
+ case B_CrtYd: txt = wxT( "B.CrtYd" ); break;
+ case F_Fab: txt = wxT( "F.Fab" ); break;
+ case B_Fab: txt = wxT( "B.Fab" ); break;
+
+ default:
+ wxASSERT_MSG( 0, wxT( "aLayerId out of range" ) );
+ txt = wxT( "BAD INDEX!" ); break;
+ }
+
+ return txt;
+}
+
+
+LSEQ LSET::CuStack() const
+{
+ // desired sequence
+ static const LAYER_ID sequence[] = {
+ F_Cu,
+ In1_Cu,
+ In2_Cu,
+ In3_Cu,
+ In4_Cu,
+ In5_Cu,
+ In6_Cu,
+ In7_Cu,
+ In8_Cu,
+ In9_Cu,
+ In10_Cu,
+ In11_Cu,
+ In12_Cu,
+ In13_Cu,
+ In14_Cu,
+ In15_Cu,
+ In16_Cu,
+ In17_Cu,
+ In18_Cu,
+ In19_Cu,
+ In20_Cu,
+ In21_Cu,
+ In22_Cu,
+ In23_Cu,
+ In24_Cu,
+ In25_Cu,
+ In26_Cu,
+ In27_Cu,
+ In28_Cu,
+ In29_Cu,
+ In30_Cu,
+ B_Cu, // 31
+ };
+
+ return Seq( sequence, DIM( sequence ) );
+}
+
+
+LSEQ LSET::Technicals( LSET aSetToOmit ) const
+{
+ // desired sequence
+ static const LAYER_ID sequence[] = {
+ B_Adhes,
+ F_Adhes,
+ B_Paste,
+ F_Paste,
+ B_SilkS,
+ F_SilkS,
+ B_Mask,
+ F_Mask,
+ B_CrtYd,
+ F_CrtYd,
+ B_Fab,
+ F_Fab,
+ };
+
+ LSET subset = ~aSetToOmit & *this;
+
+ return subset.Seq( sequence, DIM( sequence ) );
+}
+
+
+LSEQ LSET::Users() const
+{
+ // desired
+ static const LAYER_ID sequence[] = {
+ Dwgs_User,
+ Cmts_User,
+ Eco1_User,
+ Eco2_User,
+ Edge_Cuts,
+ Margin,
+ };
+
+ return Seq( sequence, DIM( sequence ) );
+}
+
+
+std::string LSET::FmtBin() const
+{
+ std::string ret;
+
+ int bit_count = size();
+
+ for( int bit=0; bit<bit_count; ++bit )
+ {
+ if( bit )
+ {
+ if( !( bit % 8 ) )
+ ret += '|';
+ else if( !( bit % 4 ) )
+ ret += '_';
+ }
+
+ ret += (*this)[bit] ? '1' : '0';
+ }
+
+ // reverse of string
+ return std::string( ret.rbegin(), ret.rend() );
+}
+
+
+std::string LSET::FmtHex() const
+{
+ std::string ret;
+
+ static const char hex[] = "0123456789abcdef";
+
+ int nibble_count = ( size() + 3 ) / 4;
+
+ for( int nibble=0; nibble<nibble_count; ++nibble )
+ {
+ unsigned ndx = 0;
+
+ // test 4 consecutive bits and set ndx to 0-15:
+ for( int nibble_bit=0; nibble_bit<4; ++nibble_bit )
+ {
+ if( (*this)[nibble_bit + nibble*4] )
+ ndx |= (1 << nibble_bit);
+ }
+
+ if( nibble && !( nibble % 8 ) )
+ ret += '_';
+
+ assert( ndx < DIM( hex ) );
+
+ ret += hex[ndx];
+ }
+
+ // reverse of string
+ return std::string( ret.rbegin(), ret.rend() );
+}
+
+
+int LSET::ParseHex( const char* aStart, int aCount )
+{
+ LSET tmp;
+
+ const char* rstart = aStart + aCount - 1;
+ const char* rend = aStart - 1;
+
+ const int bitcount = size();
+
+ int nibble_ndx = 0;
+
+ while( rstart > rend )
+ {
+ int cc = *rstart--;
+
+ if( cc == '_' )
+ continue;
+
+ int nibble;
+
+ if( cc >= '0' && cc <= '9' )
+ nibble = cc - '0';
+ else if( cc >= 'a' && cc <= 'f' )
+ nibble = cc - 'a' + 10;
+ else if( cc >= 'A' && cc <= 'F' )
+ nibble = cc - 'A' + 10;
+ else
+ break;
+
+ int bit = nibble_ndx * 4;
+
+ for( int ndx=0; bit<bitcount && ndx<4; ++bit, ++ndx )
+ if( nibble & (1<<ndx) )
+ tmp.set( bit );
+
+ if( bit >= bitcount )
+ break;
+
+ ++nibble_ndx;
+ }
+
+ int byte_count = aStart + aCount - 1 - rstart;
+
+ assert( byte_count >= 0 );
+
+ if( byte_count > 0 )
+ *this = tmp;
+
+ return byte_count;
+}
+
+
+LSEQ LSET::Seq( const LAYER_ID* aWishListSequence, unsigned aCount ) const
+{
+ LSEQ ret;
+
+#if defined(DEBUG) && 0
+ LSET dup_detector;
+
+ for( unsigned i=0; i<aCount; ++i )
+ {
+ LAYER_ID id = aWishListSequence[i];
+
+ if( test( id ) )
+ {
+ wxASSERT_MSG( !dup_detector[id], wxT( "Duplicate in aWishListSequence" ) );
+ dup_detector[id] = true;
+
+ ret.push_back( id );
+ }
+ }
+#else
+
+ for( unsigned i=0; i<aCount; ++i )
+ {
+ LAYER_ID id = aWishListSequence[i];
+
+ if( test( id ) )
+ ret.push_back( id );
+ }
+#endif
+
+ return ret;
+}
+
+
+LSEQ LSET::Seq() const
+{
+ LSEQ ret;
+
+ for( unsigned i=0; i<size(); ++i )
+ {
+ if( test(i) )
+ ret.push_back( LAYER_ID( i ) );
+ }
+
+ return ret;
+}
+
+
+LSEQ LSET::SeqStackupBottom2Top() const
+{
+ // bottom-to-top stack-up layers
+ static const LAYER_ID sequence[] = {
+ B_Fab,
+ B_CrtYd,
+ B_Adhes,
+ B_SilkS,
+ B_Paste,
+ B_Mask,
+ B_Cu,
+ In30_Cu,
+ In29_Cu,
+ In28_Cu,
+ In27_Cu,
+ In26_Cu,
+ In25_Cu,
+ In24_Cu,
+ In23_Cu,
+ In22_Cu,
+ In21_Cu,
+ In20_Cu,
+ In19_Cu,
+ In18_Cu,
+ In17_Cu,
+ In16_Cu,
+ In15_Cu,
+ In14_Cu,
+ In13_Cu,
+ In12_Cu,
+ In11_Cu,
+ In10_Cu,
+ In9_Cu,
+ In8_Cu,
+ In7_Cu,
+ In6_Cu,
+ In5_Cu,
+ In4_Cu,
+ In3_Cu,
+ In2_Cu,
+ In1_Cu,
+ F_Cu,
+ F_Mask,
+ F_Paste,
+ F_SilkS,
+ F_Adhes,
+ F_CrtYd,
+ F_Fab,
+ Dwgs_User,
+ Cmts_User,
+ Eco1_User,
+ Eco2_User,
+ Margin,
+ Edge_Cuts,
+ };
+
+ return Seq( sequence, DIM( sequence ) );
+}
+
+
+LAYER_ID FlipLayer( LAYER_ID aLayerId, int aCopperLayersCount )
+{
+ switch( aLayerId )
+ {
+ case B_Cu: return F_Cu;
+ case F_Cu: return B_Cu;
+
+ case B_SilkS: return F_SilkS;
+ case F_SilkS: return B_SilkS;
+
+ case B_Adhes: return F_Adhes;
+ case F_Adhes: return B_Adhes;
+
+ case B_Mask: return F_Mask;
+ case F_Mask: return B_Mask;
+
+ case B_Paste: return F_Paste;
+ case F_Paste: return B_Paste;
+
+ case B_CrtYd: return F_CrtYd;
+ case F_CrtYd: return B_CrtYd;
+
+ case B_Fab: return F_Fab;
+ case F_Fab: return B_Fab;
+
+ default: // change internal layer if aCopperLayersCount is >= 4
+ if( IsCopperLayer( aLayerId ) && aCopperLayersCount >= 4 )
+ {
+ // internal copper layers count is aCopperLayersCount-2
+ LAYER_ID fliplayer = LAYER_ID(aCopperLayersCount - 2 - ( aLayerId - In1_Cu ) );
+ // Ensure fliplayer has a value which does not crash pcbnew:
+ if( fliplayer < F_Cu )
+ fliplayer = F_Cu;
+
+ if( fliplayer > B_Cu )
+ fliplayer = B_Cu;
+
+ return fliplayer;
+ }
+
+ // No change for the other layers
+ return aLayerId;
+ }
+}
+
+
+LSET FlipLayerMask( LSET aMask, int aCopperLayersCount )
+{
+ // layers on physical outside of a board:
+ const static LSET and_mask( 16, // !! update count
+ B_Cu, F_Cu,
+ B_SilkS, F_SilkS,
+ B_Adhes, F_Adhes,
+ B_Mask, F_Mask,
+ B_Paste, F_Paste,
+ B_Adhes, F_Adhes,
+ B_CrtYd, F_CrtYd,
+ B_Fab, F_Fab
+ );
+
+ LSET newMask = aMask & ~and_mask;
+
+ if( aMask[B_Cu] )
+ newMask.set( F_Cu );
+
+ if( aMask[F_Cu] )
+ newMask.set( B_Cu );
+
+ if( aMask[B_SilkS] )
+ newMask.set( F_SilkS );
+
+ if( aMask[F_SilkS] )
+ newMask.set( B_SilkS );
+
+ if( aMask[B_Adhes] )
+ newMask.set( F_Adhes );
+
+ if( aMask[F_Adhes] )
+ newMask.set( B_Adhes );
+
+ if( aMask[B_Mask] )
+ newMask.set( F_Mask );
+
+ if( aMask[F_Mask] )
+ newMask.set( B_Mask );
+
+ if( aMask[B_Paste] )
+ newMask.set( F_Paste );
+
+ if( aMask[F_Paste] )
+ newMask.set( B_Paste );
+
+ if( aMask[B_Adhes] )
+ newMask.set( F_Adhes );
+
+ if( aMask[F_Adhes] )
+ newMask.set( B_Adhes );
+
+ if( aMask[B_CrtYd] )
+ newMask.set( F_CrtYd );
+
+ if( aMask[F_CrtYd] )
+ newMask.set( B_CrtYd );
+
+ if( aMask[B_Fab] )
+ newMask.set( F_Fab );
+
+ if( aMask[F_Fab] )
+ newMask.set( B_Fab );
+
+ if( aCopperLayersCount >= 4 ) // Internal layers exist
+ {
+ LSET internalMask = aMask & ~LSET::InternalCuMask();
+
+ if( internalMask != LSET::InternalCuMask() )
+ { // the mask does not include all internal layers. Therefore
+ // the flipped mask for internal copper layers must be built
+ int innerLayerCnt = aCopperLayersCount -2;
+
+ for( int ii = 0; ii < innerLayerCnt; ii++ )
+ {
+ if( internalMask[innerLayerCnt - ii + In1_Cu] )
+ newMask.set( ii + In1_Cu );
+ else
+ newMask.reset( ii + In1_Cu );
+ }
+ }
+ }
+
+ return newMask;
+}
+
+
+LAYER_ID LSET::ExtractLayer() const
+{
+ unsigned set_count = count();
+
+ if( !set_count )
+ return UNSELECTED_LAYER;
+ else if( set_count > 1 )
+ return UNDEFINED_LAYER;
+
+ for( unsigned i=0; i < size(); ++i )
+ {
+ if( test( i ) )
+ return LAYER_ID( i );
+ }
+
+ wxASSERT( 0 ); // set_count was verified as 1 above, what did you break?
+
+ return UNDEFINED_LAYER;
+}
+
+
+LSET LSET::InternalCuMask()
+{
+ static const LAYER_ID cu_internals[] = {
+ In1_Cu,
+ In2_Cu,
+ In3_Cu,
+ In4_Cu,
+ In5_Cu,
+ In6_Cu,
+ In7_Cu,
+ In8_Cu,
+ In9_Cu,
+ In10_Cu,
+ In11_Cu,
+ In12_Cu,
+ In13_Cu,
+ In14_Cu,
+ In15_Cu,
+ In16_Cu,
+ In17_Cu,
+ In18_Cu,
+ In19_Cu,
+ In20_Cu,
+ In21_Cu,
+ In22_Cu,
+ In23_Cu,
+ In24_Cu,
+ In25_Cu,
+ In26_Cu,
+ In27_Cu,
+ In28_Cu,
+ In29_Cu,
+ In30_Cu,
+ };
+
+ static const LSET saved( cu_internals, DIM( cu_internals ) );
+ return saved;
+}
+
+
+LSET LSET::AllCuMask( int aCuLayerCount )
+{
+ // retain all in static as the full set, which is a common case.
+ static const LSET all = InternalCuMask().set( F_Cu ).set( B_Cu );
+
+ if( aCuLayerCount == MAX_CU_LAYERS )
+ return all;
+
+ // subtract out some Cu layers not wanted in the mask.
+ LSET ret = all;
+ int clear_count = MAX_CU_LAYERS - aCuLayerCount;
+
+ clear_count = Clamp( 0, clear_count, MAX_CU_LAYERS - 2 );
+
+ for( LAYER_NUM elem=In30_Cu; clear_count; --elem, --clear_count )
+ {
+ ret.set( elem, false );
+ }
+
+ return ret;
+}
+
+
+LSET LSET::AllNonCuMask()
+{
+ static const LSET saved = LSET().set() & ~AllCuMask();
+ return saved;
+}
+
+
+LSET LSET::AllLayersMask()
+{
+ static const LSET saved = LSET().set();
+ return saved;
+}
+
+
+LSET LSET::BackTechMask()
+{
+ // (SILKSCREEN_LAYER_BACK | SOLDERMASK_LAYER_BACK | ADHESIVE_LAYER_BACK | SOLDERPASTE_LAYER_BACK)
+ static const LSET saved( 6, B_SilkS, B_Mask, B_Adhes, B_Paste, B_CrtYd, B_Fab );
+ return saved;
+}
+
+
+LSET LSET::FrontTechMask()
+{
+ // (SILKSCREEN_LAYER_FRONT | SOLDERMASK_LAYER_FRONT | ADHESIVE_LAYER_FRONT | SOLDERPASTE_LAYER_FRONT)
+ static const LSET saved( 6, F_SilkS, F_Mask, F_Adhes, F_Paste, F_CrtYd, F_Fab );
+ return saved;
+}
+
+
+LSET LSET::AllTechMask()
+{
+ static const LSET saved = BackTechMask() | FrontTechMask();
+ return saved;
+}
+
+
+LSET LSET::UserMask()
+{
+ static const LSET saved( 6,
+ Dwgs_User,
+ Cmts_User,
+ Eco1_User,
+ Eco2_User,
+ Edge_Cuts,
+ Margin
+ );
+
+ return saved;
+}
+
+
+LSET LSET::FrontMask()
+{
+ static const LSET saved = FrontTechMask().set( F_Cu );
+ return saved;
+}
+
+
+LSET LSET::BackMask()
+{
+ static const LSET saved = BackTechMask().set( B_Cu );
+ return saved;
+}
+
+
+LSEQ LSET::UIOrder() const
+{
+ LAYER_ID order[LAYER_ID_COUNT];
+
+ // Assmuming that the LAYER_ID order is according to preferred UI order, as of
+ // today this is true. When that becomes not true, its easy to change the order
+ // in here to compensate.
+
+ for( unsigned i=0; i<DIM(order); ++i )
+ order[i] = LAYER_ID( i );
+
+ return Seq( order, DIM( order ) );
+}
+
+
+LAYER_ID ToLAYER_ID( int aLayer )
+{
+ wxASSERT( unsigned( aLayer ) < LAYER_ID_COUNT );
+ return LAYER_ID( aLayer );
+}
+
diff --git a/common/math/math_util.cpp b/common/math/math_util.cpp
new file mode 100644
index 0000000..604b879
--- /dev/null
+++ b/common/math/math_util.cpp
@@ -0,0 +1,91 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
+ * Copyright (C) CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <cmath>
+#include <cstdlib>
+#include <climits>
+#include <math/math_util.h>
+
+template<>
+int rescale( int aNumerator, int aValue, int aDenominator )
+{
+ return (int) ( (int64_t) aNumerator * (int64_t) aValue / (int64_t) aDenominator );
+}
+
+
+template<>
+int64_t rescale( int64_t aNumerator, int64_t aValue, int64_t aDenominator )
+{
+#ifdef __x86_64__
+ return ( (__int128_t) aNumerator * (__int128_t) aValue ) / aDenominator;
+#else
+ int64_t r = 0;
+ int64_t sign = ( ( aNumerator < 0 ) ? -1 : 1 ) * ( aDenominator < 0 ? -1 : 1 ) *
+ ( aValue < 0 ? -1 : 1 );
+
+ int64_t a = std::abs( aNumerator );
+ int64_t b = std::abs( aValue );
+ int64_t c = std::abs( aDenominator );
+
+ r = c / 2;
+
+ if( b <= INT_MAX && c <= INT_MAX )
+ {
+ if( a <= INT_MAX )
+ return sign * ( ( a * b + r ) / c );
+ else
+ return sign * ( a / c * b + ( a % c * b + r ) / c);
+ }
+ else
+ {
+ uint64_t a0 = a & 0xFFFFFFFF;
+ uint64_t a1 = a >> 32;
+ uint64_t b0 = b & 0xFFFFFFFF;
+ uint64_t b1 = b >> 32;
+ uint64_t t1 = a0 * b1 + a1 * b0;
+ uint64_t t1a = t1 << 32;
+ int i;
+
+ a0 = a0 * b0 + t1a;
+ a1 = a1 * b1 + ( t1 >> 32 ) + ( a0 < t1a );
+ a0 += r;
+ a1 += a0 < (uint64_t)r;
+
+ for( i = 63; i >= 0; i-- )
+ {
+ a1 += a1 + ( ( a0 >> i ) & 1 );
+ t1 += t1;
+
+ if( (uint64_t) c <= a1 )
+ {
+ a1 -= c;
+ t1++;
+ }
+ }
+
+ return t1 * sign;
+ }
+#endif
+}
diff --git a/common/msgpanel.cpp b/common/msgpanel.cpp
new file mode 100644
index 0000000..97e8abe
--- /dev/null
+++ b/common/msgpanel.cpp
@@ -0,0 +1,243 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file msgpanel.cpp
+ * @brief Message panel implementation file.
+ */
+
+#include <msgpanel.h>
+
+
+BEGIN_EVENT_TABLE( EDA_MSG_PANEL, wxPanel )
+ EVT_PAINT( EDA_MSG_PANEL::OnPaint )
+END_EVENT_TABLE()
+
+
+EDA_MSG_PANEL::EDA_MSG_PANEL( wxWindow* aParent, int aId,
+ const wxPoint& aPosition, const wxSize& aSize,
+ long style, const wxString &name ) :
+ wxPanel( aParent, aId, aPosition, aSize, style, name )
+{
+ SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) );
+ SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+ m_last_x = 0;
+
+ m_fontSize = computeFontSize();
+}
+
+
+EDA_MSG_PANEL::~EDA_MSG_PANEL()
+{
+}
+
+
+wxSize EDA_MSG_PANEL::computeFontSize()
+{
+ // Get size of the wxSYS_DEFAULT_GUI_FONT
+ wxSize fontSizeInPixels;
+
+ wxScreenDC dc;
+
+ dc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) );
+ dc.GetTextExtent( wxT( "W" ), &fontSizeInPixels.x, &fontSizeInPixels.y );
+
+ return fontSizeInPixels;
+}
+
+
+int EDA_MSG_PANEL::GetRequiredHeight()
+{
+ // make space for two rows of text plus a number of pixels between them.
+ return 2 * computeFontSize().y + 0;
+}
+
+
+wxSize EDA_MSG_PANEL::computeTextSize( const wxString& aText ) const
+{
+ // Get size of the wxSYS_DEFAULT_GUI_FONT
+ wxSize textSizeInPixels;
+
+ wxScreenDC dc;
+
+ dc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) );
+ dc.GetTextExtent( aText, &textSizeInPixels.x, &textSizeInPixels.y );
+
+ return textSizeInPixels;
+}
+
+
+void EDA_MSG_PANEL::OnPaint( wxPaintEvent& aEvent )
+{
+ wxPaintDC dc( this );
+
+ erase( &dc );
+
+ dc.SetBackground( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+ dc.SetBackgroundMode( wxSOLID );
+ dc.SetTextBackground( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+ dc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) );
+
+ for( unsigned i=0; i<m_Items.size(); ++i )
+ showItem( dc, m_Items[i] );
+
+ aEvent.Skip();
+}
+
+
+void EDA_MSG_PANEL::AppendMessage( const wxString& aUpperText,
+ const wxString& aLowerText,
+ EDA_COLOR_T aColor, int aPad )
+{
+ wxString text;
+ wxSize drawSize = GetClientSize();
+
+ text = ( aUpperText.Len() > aLowerText.Len() ) ? aUpperText : aLowerText;
+ text.Append( ' ', aPad );
+
+ MSG_PANEL_ITEM item;
+
+ /* Don't put the first message a window client position 0. Offset by
+ * one 'W' character width. */
+ if( m_last_x == 0 )
+ m_last_x = m_fontSize.x;
+
+ item.m_X = m_last_x;
+
+ item.m_UpperY = ( drawSize.y / 2 ) - m_fontSize.y;
+ item.m_LowerY = drawSize.y - m_fontSize.y;
+
+ item.m_UpperText = aUpperText;
+ item.m_LowerText = aLowerText;
+ item.m_Color = aColor;
+ m_Items.push_back( item );
+ m_last_x += computeTextSize( text ).x;
+
+ // Add an extra space between texts for a better look:
+ m_last_x += m_fontSize.x;
+
+ Refresh();
+}
+
+
+void EDA_MSG_PANEL::SetMessage( int aXPosition, const wxString& aUpperText,
+ const wxString& aLowerText, EDA_COLOR_T aColor )
+{
+ wxPoint pos;
+ wxSize drawSize = GetClientSize();
+
+ if( aXPosition >= 0 )
+ m_last_x = pos.x = aXPosition * (m_fontSize.x + 2);
+ else
+ pos.x = m_last_x;
+
+ MSG_PANEL_ITEM item;
+
+ item.m_X = pos.x;
+
+ item.m_UpperY = (drawSize.y / 2) - m_fontSize.y;
+ item.m_LowerY = drawSize.y - m_fontSize.y;
+
+ item.m_UpperText = aUpperText;
+ item.m_LowerText = aLowerText;
+ item.m_Color = aColor;
+
+ int ndx;
+
+ // update the vector, which is sorted by m_X
+ int limit = m_Items.size();
+
+ for( ndx=0; ndx<limit; ++ndx )
+ {
+ // replace any item with same X
+ if( m_Items[ndx].m_X == item.m_X )
+ {
+ m_Items[ndx] = item;
+ break;
+ }
+
+ if( m_Items[ndx].m_X > item.m_X )
+ {
+ m_Items.insert( m_Items.begin() + ndx, item );
+ break;
+ }
+ }
+
+ if( ndx == limit ) // mutually exclusive with two above if tests
+ {
+ m_Items.push_back( item );
+ }
+
+ Refresh();
+}
+
+
+void EDA_MSG_PANEL::showItem( wxDC& aDC, const MSG_PANEL_ITEM& aItem )
+{
+ EDA_COLOR_T color = aItem.m_Color;
+
+ if( color >= 0 )
+ {
+ color = ColorGetBase( color );
+ aDC.SetTextForeground( MakeColour( color ) );
+ }
+
+ if( !aItem.m_UpperText.IsEmpty() )
+ {
+ aDC.DrawText( aItem.m_UpperText, aItem.m_X, aItem.m_UpperY );
+ }
+
+ if( !aItem.m_LowerText.IsEmpty() )
+ {
+ aDC.DrawText( aItem.m_LowerText, aItem.m_X, aItem.m_LowerY );
+ }
+}
+
+
+void EDA_MSG_PANEL::EraseMsgBox()
+{
+ m_Items.clear();
+ m_last_x = 0;
+ Refresh();
+}
+
+
+void EDA_MSG_PANEL::erase( wxDC* aDC )
+{
+ wxPen pen;
+ wxBrush brush;
+
+ wxSize size = GetClientSize();
+ wxColor color = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE );
+
+ pen.SetColour( color );
+
+ brush.SetColour( color );
+ brush.SetStyle( wxBRUSHSTYLE_SOLID );
+
+ aDC->SetPen( pen );
+ aDC->SetBrush( brush );
+ aDC->DrawRectangle( 0, 0, size.x, size.y );
+}
diff --git a/common/netlist.keywords b/common/netlist.keywords
new file mode 100644
index 0000000..98e949b
--- /dev/null
+++ b/common/netlist.keywords
@@ -0,0 +1,40 @@
+code
+comp
+components
+datasheet
+date
+description
+design
+docs
+export
+field
+fields
+footprint
+footprints
+fp
+lib
+libpart
+libparts
+libraries
+library
+libsource
+name
+names
+net
+nets
+node
+num
+part
+pin
+pins
+ref
+sheetpath
+source
+tool
+tstamp
+tstamps
+uri
+value
+version
+aliases
+alias
diff --git a/common/newstroke_font.cpp b/common/newstroke_font.cpp
new file mode 100644
index 0000000..3098de6
--- /dev/null
+++ b/common/newstroke_font.cpp
@@ -0,0 +1,11359 @@
+/*
+ * newstroke_font.cpp - definitions for automatically converted font
+ *
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 vladimir uryvaev <vovanius@bk.ru>
+ * Copyright (C) 1992-2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <newstroke_font.h>
+
+const char* const newstroke_font[] =
+{
+ /* // BASIC LATIN (0020-007F) */
+ "JZ", /* U+20 SPACE */
+ "MWRYSZR[QZRYR[ RRSQGRFSGRSRF",
+ "JZNFNJ RVFVJ",
+ "H]LM[M RRDL_ RYVJV RS_YD",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RRCR^",
+ "F^J[ZF RMFOGPIOKMLKKJIKGMF RYZZXYVWUUVTXUZW[YZ",
+ "E_[[Z[XZUWPQNNMKMINGPFQFSGTITJSLRMLQKRJTJWKYLZN[Q[SZTYWUXRXP",
+ "MWSFQJ",
+ "KYVcUbS_R]QZPUPQQLRISGUDVC",
+ "KYNcObQ_R]SZTUTQSLRIQGODNC",
+ "JZRFRK RMIRKWI ROORKUO",
+ "E_JSZS RR[RK",
+ "MWSZS[R]Q^",
+ "E_JSZS",
+ "MWRYSZR[QZRYR[",
+ "G][EI`",
+ "H\\QFSFUGVHWJXNXSWWVYUZS[Q[OZNYMWLSLNMJNHOGQF", /* U+30 DIGIT_0 */
+ "H\\X[L[ RR[RFPINKLL",
+ "H\\LHMGOFTFVGWHXJXLWOK[X[",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY",
+ "H\\VMV[ RQELTYT",
+ "H\\WFMFLPMOONTNVOWPXRXWWYVZT[O[MZLY",
+ "H\\VFRFPGOHMKLOLWMYNZP[T[VZWYXWXRWPVOTNPNNOMPLR",
+ "H\\KFYFP[",
+ "H\\PONNMMLKLJMHNGPFTFVGWHXJXKWMVNTOPONPMQLSLWMYNZP[T[VZWYXWXSWQVPTO",
+ "H\\N[R[TZUYWVXRXJWHVGTFPFNGMHLJLOMQNRPSTSVRWQXO",
+ "MWRYSZR[QZRYR[ RRNSORPQORNRP",
+ "MWSZS[R]Q^ RRNSORPQORNRP",
+ "E_ZMJSZY",
+ "E_JPZP RZVJV",
+ "E_JMZSJY",
+ "I[QYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS",
+ "D_VQUPSOQOOPNQMSMUNWOXQYSYUXVW RVOVWWXXXZW[U[PYMVKRJNKKMIPHTIXK[N]R^V]Y[", /* U+40 AT */
+ "I[MUWU RK[RFY[",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[",
+ "H[MPTP RW[M[MFWF",
+ "HZTPMP RM[MFWF",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR",
+ "G]L[LF RLPXP RX[XF",
+ "MWR[RF",
+ "JZUFUUTXRZO[M[",
+ "G\\L[LF RX[OO RXFLR",
+ "HYW[M[MF",
+ "F^K[KFRUYFY[",
+ "G]L[LFX[XF",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ", /* U+50 P_CAP */
+ "G]Z]X\\VZSWQVOV RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG",
+ "JZLFXF RR[RF",
+ "G]LFLWMYNZP[T[VZWYXWXF",
+ "I[KFR[YF",
+ "F^IFN[RLV[[F",
+ "H\\KFY[ RYFK[",
+ "I[RQR[ RKFRQYF",
+ "H\\KFYFK[Y[",
+ "KYVbQbQDVD",
+ "KYID[_",
+ "KYNbSbSDND",
+ "LXNHREVH",
+ "JZJ]Z]",
+ "NVPESH", /* U+60 GRAVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT",
+ "MYOMWM RR[RISGUFWF",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "H[M[MF RV[VPUNSMPMNNMO",
+ "MWR[RM RRFQGRHSGRFRH",
+ "MWRMR_QaObNb RRFQGRHSGRFRH",
+ "IZN[NF RPSV[ RVMNU",
+ "MXU[SZRXRF",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[",
+ "I\\NMN[ RNOONQMTMVNWPW[",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ", /* U+70 P_SMALL */
+ "I\\WMWb RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "KXP[PM RPQQORNTMVM",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN",
+ "MYOMWM RRFRXSZU[W[",
+ "H[VMV[ RMMMXNZP[S[UZVY",
+ "JZMMR[WM",
+ "G]JMN[RQV[ZM",
+ "IZL[WM RLMW[",
+ "JZMMR[ RWMR[P`OaMb",
+ "IZLMWML[W[",
+ "KYVcUcSbR`RVQTOSQRRPRFSDUCVC",
+ "H\\RbRD",
+ "KYNcOcQbR`RVSTUSSRRPRFQDOCNC",
+ "KZMSNRPQTSVRWQ",
+ "F^K[KFYFY[K[",
+ /* // LATIN-1 SUPPLEMENT (0080-00FF) */
+ "F^K[KFYFY[K[", /* U+80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "JZ", /* U+A0 SPACE */
+ "MWROQNRMSNRORM RRUSaRbQaRURb",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRJR^",
+ "H[LMTM RL[W[ RO[OIPGRFUFWG",
+ "H]LYOV RLLOO RVVYY RVOYL RVVTWQWOVNTNQOOQNTNVOWQWTVV",
+ "F^JTZT RJMZM RRQR[ RKFRQYF",
+ "MWRbRW RRFRQ",
+ "I[N]P^S^U]V[UYOSNQNPONQM RVGTFQFOGNIOKUQVSVTUVSW",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "@dVKTJPJNKLMKOKSLUNWPXTXVW RRCMDHGELDQEVH[M^R_W^\\[_V`Q_L\\GWDRC",
+ "KZOEQDSDUEVGVN RVMTNQNOMNKOIQHVH",
+ "H\\RMLSRY RXWTSXO",
+ "E_JQZQZV",
+ "RR",
+ "@dWXRR RNXNJTJVKWMWOVQTRNR RRCMDHGELDQEVH[M^R_W^\\[_V`Q_L\\GWDRC",
+ "LXMGWG",
+ "JZRFPGOIPKRLTKUITGRF", /* U+B0 DEGREE */
+ "E_JOZO RRWRG RZ[J[",
+ "JZNAP@S@UAVCVEUGNNVN",
+ "JZN@V@RESEUFVHVKUMSNPNNM",
+ "NVTEQH",
+ "H^MMMb RWXXZZ[ RMXNZP[T[VZWXWM",
+ "F]VMV[ ROMOXNZL[ RZMMMKNJP",
+ "JZRRQSRTSSRRRT",
+ "MWR\\T]U_TaRbOb",
+ "JZVNNN RNCPBR@RN",
+ "KYQNOMNKNGOEQDSDUEVGVKUMSNQN",
+ "H\\RMXSRY RLWPSLO",
+ "G]KQYQ RVNNN RNCPBR@RN RUYUa RQSN]W]",
+ "G]KQYQ RVNNN RNCPBR@RN RNTPSSSUTVVVXUZNaVa",
+ "G]KQYQ RN@V@RESEUFVHVKUMSNPNNM RUYUa RQSN]W]",
+ "I[SORNSMTNSOSM RWaUbPbNaM_M]N[OZQYRXSVSU",
+ "I[MUWU RK[RFY[ RP>SA", /* U+C0 A_CAP GRAVE */
+ "I[MUWU RK[RFY[ RT>QA",
+ "I[MUWU RK[RFY[ RNAR>VA",
+ "I[MUWU RK[RFY[ RMAN@P?TAV@W?",
+ "I[MUWU RK[RFY[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[MUWU RK[RFY[ RRFPEOCPAR@TAUCTERF",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR\\T]U_TaRbOb",
+ "H[MPTP RW[M[MFWF RP>SA",
+ "H[MPTP RW[M[MFWF RT>QA",
+ "H[MPTP RW[M[MFWF RNAR>VA",
+ "H[MPTP RW[M[MFWF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "MWR[RF RP>SA",
+ "MWR[RF RT>QA",
+ "MWR[RF RNAR>VA",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RIPQP", /* U+D0 D_CAP STROKE_H */
+ "G]L[LFX[XF RMAN@P?TAV@W?",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RP>SA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RT>QA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W?",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "E_LMXY RXMLY",
+ "G]ZFJ[ RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[",
+ "G]LFLWMYNZP[T[VZWYXWXF RP>SA",
+ "G]LFLWMYNZP[T[VZWYXWXF RT>QA",
+ "G]LFLWMYNZP[T[VZWYXWXF RNAR>VA",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[RQR[ RKFRQYF RT>QA",
+ "G\\LFL[ RLKTKVLWMXOXRWTVUTVLV",
+ "F]K[KJLHMGOFRFTGUHVJVMSMQNPPPQQSSTVTXUYWYXXZV[R[PZ",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RPESH", /* U+E0 A_SMALL GRAVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RTEQH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RMHNGPFTHVGWF",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRHPGOEPCRBTCUETGRH",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RR\\T]U_TaRbOb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RPESH",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RTEQH",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "MWR[RM RPESH",
+ "MWR[RM RTEQH",
+ "LXNHREVH RR[RM",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RR[RM",
+ "I\\SCQI RWNUMQMONNOMQMXNZP[T[VZWXWLVITGRFNE", /* U+F0 ETH_SMALL */
+ "I\\NMN[ RNOONQMTMVNWPW[ RMHNGPFTHVGWF",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RPESH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_ZSJS RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "H[XMK[ RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "H[VMV[ RMMMXNZP[S[UZVY RPESH",
+ "H[VMV[ RMMMXNZP[S[UZVY RTEQH",
+ "H[VMV[ RMMMXNZP[S[UZVY RNHREVH",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "JZMMR[ RWMR[P`OaMb RTEQH",
+ "H[MFMb RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "JZMMR[ RWMR[P`OaMb RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ /* // LATIN EXTENDED-A (0100-017F) */
+ "I[MUWU RK[RFY[ RM@W@", /* U+100 A_CAP MACRON */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RMGWG",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V>",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE",
+ "I[MUWU RK[RFY[ RY[W]V_WaYb[b",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RW[U]T_UaWbYb",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RT>QA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RTEQH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RNAR>VA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RNHREVH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR?Q@RAS@R?RA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRFQGRHSGRFRH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RN>RAV>",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RNERHVE",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RN>RAV>",
+ "IfW[WF RWZU[Q[OZNYMWMQNOONQMUMWN RbF`J",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RIPQP", /* U+110 D_CAP STROKE_H */
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RRHZH",
+ "H[MPTP RW[M[MFWF RM@W@",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMGWG",
+ "H[MPTP RW[M[MFWF RN>O@QASAU@V>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNEOGQHSHUGVE",
+ "H[MPTP RW[M[MFWF RR?Q@RAS@R?RA",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RRFQGRHSGRFRH",
+ "H[MPTP RW[M[MFWF RR[P]O_PaRbTb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RR[P]O_PaRbTb",
+ "H[MPTP RW[M[MFWF RN>RAV>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNERHVE",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RNAR>VA",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RNHREVH",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RN>O@QASAU@V>",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RNEOGQHSHUGVE",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RR?Q@RAS@R?RA", /* U+120 G_CAP DOT */
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RRFQGRHSGRFRH",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RR\\T]U_TaRbOb",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RRGPFODPBRAUA",
+ "G]L[LF RLPXP RX[XF RNAR>VA",
+ "H[M[MF RV[VPUNSMPMNNMO RIAM>QA",
+ "G]IJ[J RL[LF RLPXP RX[XF",
+ "H[M[MF RV[VPUNSMPMNNMO RJHRH",
+ "MWR[RF RMAN@P?TAV@W?",
+ "MWR[RM RMHNGPFTHVGWF",
+ "MWR[RF RM@W@",
+ "MWR[RM RMGWG",
+ "MWR[RF RN>O@QASAU@V>",
+ "MWR[RM RNEOGQHSHUGVE",
+ "MWR[RF RR[P]O_PaRbTb",
+ "MWR[RM RR[P]O_PaRbTb",
+ "MWR[RF RR?Q@RAS@R?RA", /* U+130 I_CAP DOT */
+ "MWR[RM",
+ "MgR[RF RbFbUaX_Z\\[Z[",
+ "MaR[RM RRFQGRHSGRFRH R\\M\\_[aYbXb R\\F[G\\H]G\\F\\H",
+ "JZUFUUTXRZO[M[ RQAU>YA",
+ "MWRMR_QaObNb RNHREVH",
+ "G\\L[LF RX[OO RXFLR RR\\T]U_TaRbOb",
+ "IZN[NF RPSV[ RVMNU RR\\T]U_TaRbOb",
+ "IZNMN[ RPSV[ RVMNU",
+ "HYW[M[MF RO>LA",
+ "MXU[SZRXRF RTEQH",
+ "HYW[M[MF RR\\T]U_TaRbOb",
+ "MXU[SZRXRF RR\\T]U_TaRbOb",
+ "HYW[M[MF RVHSK",
+ "M^U[SZRXRF RZFXJ",
+ "HYW[M[MF RUNTOUPVOUNUP",
+ "M\\U[SZRXRF RYOZPYQXPYOYQ", /* U+140 L_SMALL_MIDDOT */
+ "HYW[M[MF RJQPM",
+ "MXU[SZRXRF ROQUM",
+ "G]L[LFX[XF RT>QA",
+ "I\\NMN[ RNOONQMTMVNWPW[ RTEQH",
+ "G]L[LFX[XF RR\\T]U_TaRbOb",
+ "I\\NMN[ RNOONQMTMVNWPW[ RR\\T]U_TaRbOb",
+ "G]L[LFX[XF RN>RAV>",
+ "I\\NMN[ RNOONQMTMVNWPW[ RNERHVE",
+ "MjSFQJ R\\M\\[ R\\O]N_MbMdNePe[",
+ "G]LFL[ RLINGPFTFVGWHXJX^W`VaTbQb",
+ "I\\NMN[ RNOONQMTMVNWPW_VaTbRb",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN>O@QASAU@V>",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNEOGQHSHUGVE",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RQ>NA RX>UA", /* U+150 O_CAP ACUTE_DBL */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RQENH RXEUH",
+ "E`RPYP RRFR[ R\\FNFLGJIIMITJXLZN[\\[",
+ "C`[ZY[U[SZRXRPSNUMYM[N\\P\\RRT RRQQOPNNMKMINHOGQGWHYIZK[N[PZQYRW",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RT>QA",
+ "KXP[PM RPQQORNTMVM RTEQH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RR\\T]U_TaRbOb",
+ "KXP[PM RPQQORNTMVM RR\\T]U_TaRbOb",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RN>RAV>",
+ "KXP[PM RPQQORNTMVM RNERHVE",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RT>QA",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RTEQH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RNAR>VA",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNHREVH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RR\\T]U_TaRbOb",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RR\\T]U_TaRbOb",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RN>RAV>", /* U+160 S_CAP CARON */
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNERHVE",
+ "JZLFXF RR[RF RR\\T]U_TaRbOb",
+ "MYOMWM RRFRXSZU[W[ RR\\T]U_TaRbOb",
+ "JZLFXF RR[RF RN>RAV>",
+ "M[OMWM RYFXI RRFRXSZU[W[",
+ "JZLFXF RR[RF RNQVQ",
+ "MYOMWM RRFRXSZU[W[ ROSUS",
+ "G]LFLWMYNZP[T[VZWYXWXF RMAN@P?TAV@W?",
+ "H[VMV[ RMMMXNZP[S[UZVY RMHNGPFTHVGWF",
+ "G]LFLWMYNZP[T[VZWYXWXF RM@W@",
+ "H[VMV[ RMMMXNZP[S[UZVY RMGWG",
+ "G]LFLWMYNZP[T[VZWYXWXF RN>O@QASAU@V>",
+ "H[VMV[ RMMMXNZP[S[UZVY RNEOGQHSHUGVE",
+ "G]LFLWMYNZP[T[VZWYXWXF RRAP@O>P<R;T<U>T@RA",
+ "H[VMV[ RMMMXNZP[S[UZVY RRHPGOEPCRBTCUETGRH",
+ "G]LFLWMYNZP[T[VZWYXWXF RQ>NA RX>UA", /* U+170 U_CAP ACUTE_DBL */
+ "H[VMV[ RMMMXNZP[S[UZVY RQENH RXEUH",
+ "G]LFLWMYNZP[T[VZWYXWXF RR[P]O_PaRbTb",
+ "H[VMV[ RMMMXNZP[S[UZVY RV[T]S_TaVbXb",
+ "F^IFN[RLV[[F RNAR>VA",
+ "G]JMN[RQV[ZM RNHREVH",
+ "I[RQR[ RKFRQYF RNAR>VA",
+ "JZMMR[ RWMR[P`OaMb RNHREVH",
+ "JZLFXF RR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H\\KFYFK[Y[ RT>QA",
+ "IZLMWML[W[ RTEQH",
+ "H\\KFYFK[Y[ RR?Q@RAS@R?RA",
+ "IZLMWML[W[ RRFQGRHSGRFRH",
+ "H\\KFYFK[Y[ RN>RAV>",
+ "IZLMWML[W[ RNERHVE",
+ "MYR[RISGUFWF",
+ /* // LATIN EXTENDED-B (0180-024F) */
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RJHRH", /* U+180 B_SMALL STROKE_H */
+ "C\\LFL[T[VZWYXWXTWRVQSPLP RFKFIGGIFSFUGVHWJWLVNUOSP",
+ "G\\VFLFL[R[UZWXXVXSWQUORNLN",
+ "H[WFMFM[ RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "H]MFM[S[VZXXYVYSXQVOSNMN",
+ "IZNMN[S[UZVXVUUSSRNR",
+ "I^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZMY",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RMHKGJEKCLB",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RTMTIUGWFYF",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RIPQP",
+ "C\\FKFIGGIFQFTGVIWKXOXRWVVXTZQ[L[LF",
+ "H]NFXFX[R[OZMXLVLSMQOORNXN",
+ "I\\MFWFW[ RWNUMQMONNOMQMWNYOZQ[U[WZ",
+ "I\\Q[T[VZWYXWXQWOVNTMQMONNOMQMWNYOZQ[T\\V]W_VaTbPbNa",
+ "I\\WPPP RM[W[WFMF",
+ "F^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZLXKVJRZP",
+ "G[PPTP RWGUFPFNGMHLJLLMNNOPPMQLRKTKWLYMZO[U[WZ", /* U+190 EPSILON_LARGE */
+ "HZTPMP RM[MFWF RM[M_LaJbHb",
+ "MYOMWM RR[RISGUFWF RR[R_QaObMb",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RMHKGJEKCLB",
+ "I[KFU[U_TaRbPaO_O[YF",
+ "D`I[IF RIOJNLMOMQNRPRXSZU[X[ZZ[Y\\W\\P[NZM",
+ "MZRFRWSYTZV[X[",
+ "MWR[RF RNPVP",
+ "G_L[LF RX[OO RLRWGYF[G\\I\\K",
+ "IZNMN[ RPSV[ RVMNU RNMNIOGQFSF",
+ "MXU[SZRXRF RNOVO",
+ "JZRMM[ RMFOFPGRMW[ RNLTH",
+ "Ca\\F\\[ R\\XZZX[V[TZSYRWRF RRWQYPZN[L[JZIYHWHF",
+ "G]L[LFX[XF RL[L_KaIbGb",
+ "I\\NMN[ RNOONQMTMVNWPWb",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA", /* U+1A0 O_CAP HORN */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH",
+ "DaSGQFMFKGIIHMHTIXKZM[Q[SZUXVTVMUISGUFYF[G\\I\\b",
+ "E^RNPMMMKNJOIQIWJYKZM[P[RZSYTWTQSORNTMVMXNYPYb",
+ "C\\LFL[ RFKFIGGIFTFVGWHXJXMWOVPTQLQ",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RRMRISGUFWF",
+ "G\\LFL[ RQVXb RLKTKVLWMXOXRWTVUTVLV",
+ "H\\XZU[P[NZMYLWLUMSNRPQTPVOWNXLXJWHVGTFOFLG",
+ "IZVZT[P[NZMXMWNUPTSTUSVQVPUNSMPMNN",
+ "H[W[L[SPLFWF",
+ "JYWbUbSaR_RIQGOFMGLIMKOLQKRI",
+ "MYOMWM RRFRXSZU[W[ RW[W_VaTbRb",
+ "HZR[RF RKKKILGNFXF",
+ "MYOMWM RWFUFSGRIRXSZU[W[",
+ "JZLFXF RR[RF RR[R_SaUbWb",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG", /* U+1B0 U_SMALL HORN */
+ "F^ZFUFUJWKYMZPZUYXWZT[P[MZKXJUJPKMMKOJOFJF",
+ "G]LFLWMYNZP[T[VZXXYVYIXGWF",
+ "I`RQR[ RKFRQXGZF\\G]I]K",
+ "J^MMR[ RMbOaP`R[VNXMZN[P[R",
+ "H\\KFYFK[Y[ RNPVP",
+ "IZLMWML[W[ RNTVT",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY",
+ "H\\YFLFSNPNNOMPLRLWMYNZP[V[XZYY",
+ "JZWMNMUVRVPWOXNZN^O`PaRbUbWa",
+ "JZMMVMOTSTUUVWVXUZS[Q[O\\N^N_OaQbVb",
+ "H\\LHMGOFTFVGWHXJXLWOK[X[ RNSVS",
+ "H\\WFMFLPMOONTNVOWPXRXWWYVZT[O[MZLY",
+ "JZVMOMNSPRSRUSVUVXUZS[P[NZ",
+ "J^MZP[T[WZYXZVZSYQWOTNPNPF RLITI",
+ "H[MMMb RMONNPMTMVNWPWSVUM^",
+ "MWRFRb", /* U+1C0 LINE_V_LETTER */
+ "JZOFOb RUFUb",
+ "MWRFRb ROWUW ROQUQ",
+ "MWRYSZR[QZRYR[ RRSQGRFSGRSRF",
+ "GpL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_FmF_[m[ Rb>fAj>",
+ "GmL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_MjM_[j[ RaEeHiE",
+ "ImW[WF RWZU[Q[OZNYMWMQNOONQMUMWN R_MjM_[j[ RaEeHiE",
+ "HiW[M[MF RdFdUcXaZ^[\\[",
+ "HcW[M[MF R^M^_]a[bZb R^F]G^H_G^F^H",
+ "MbU[SZRXRF R]M]_\\aZbYb R]F\\G]H^G]F]H",
+ "GmL[LFX[XF RhFhUgXeZb[`[",
+ "GgL[LFX[XF RbMb_aa_b^b RbFaGbHcGbFbH",
+ "IfNMN[ RNOONQMTMVNWPW[ RaMa_`a^b]b RaF`GaHbGaFaH",
+ "I[MUWU RK[RFY[ RN>RAV>",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNERHVE",
+ "MWR[RF RN>RAV>",
+ "MWR[RM RNERHVE", /* U+1D0 I_SMALL CARON */
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN>RAV>",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNERHVE",
+ "G]LFLWMYNZP[T[VZWYXWXF RN>RAV>",
+ "H[VMV[ RMMMXNZP[S[UZVY RNERHVE",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RM;W;",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RM@W@",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RT9Q<",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RN9R<V9",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RN>RAV>",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RP9S<",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT",
+ "I[MUWU RK[RFY[ RN?O@NAM@N?NA RV?W@VAU@V?VA RM;W;",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNFOGNHMGNFNH RVFWGVHUGVFVH RM@W@",
+ "I[MUWU RK[RFY[ RR?Q@RAS@R?RA RM;W;", /* U+1E0 A_CAP DOT */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRFQGRHSGRFRH RM@W@",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[ RO@Y@",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX RMGWG",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RSV[V",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RS^[^",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RN>RAV>",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RNERHVE",
+ "G\\L[LF RX[OO RXFLR RN>RAV>",
+ "IZN[NF RPSV[ RVMNU RJANDRA",
+ "G]R[P]O_PaRbTb RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[R[P]O_PaRbTb RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "G]R[P]O_PaRbTb RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@",
+ "H[R[P]O_PaRbTb RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY RN>RAV>",
+ "JZMMVMOVRVTWUXVZV^U`TaRbObMa RNERHVE",
+ "MWRMR_QaObNb RNERHVE", /* U+1F0 J_SMALL CARON */
+ "GpL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_FmF_[m[",
+ "GmL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_MjM_[j[",
+ "ImW[WF RWZU[Q[OZNYMWMQNOONQMUMWN R_MjM_[j[",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RT>QA",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RTEQH",
+ "CaH[HF RHPTP RTFTXUZW[Z[\\Z]X]M",
+ "G\\LFLb RLINGPFTFVGWHXJXOWRUUL^",
+ "G]L[LFX[XF RP>SA",
+ "I\\NMN[ RNOONQMTMVNWPW[ RPESH",
+ "I[MUWU RK[RFY[ RZ9X< RR;P<O>P@RAT@U>T<R;",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RZ@XC RRBPCOEPGRHTGUETCRB",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[ RV>SA",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX RTEQH",
+ "G]ZFJ[ RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[ RT>QA",
+ "H[XMK[ RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "I[MUWU RK[RFY[ ROAL> RVAS>", /* U+200 A_CAP GRAVE_DBL */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR ROHLE RVHSE",
+ "I[MUWU RK[RFY[ RNAO?Q>S>U?VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHOFQESEUFVH",
+ "H[MPTP RW[M[MFWF ROAL> RVAS>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT ROHLE RVHSE",
+ "H[MPTP RW[M[MFWF RNAO?Q>S>U?VA",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHOFQESEUFVH",
+ "MWR[RF ROAL> RVAS>",
+ "MWR[RM ROHLE RVHSE",
+ "MWR[RF RNAO?Q>S>U?VA",
+ "MWR[RM RNHOFQESEUFVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF ROAL> RVAS>",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ ROHLE RVHSE",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAO?Q>S>U?VA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHOFQESEUFVH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ ROAL> RVAS>", /* U+210 R_CAP GRAVE_DBL */
+ "KXP[PM RPQQORNTMVM RPHME RWHTE",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RNAO?Q>S>U?VA",
+ "KXP[PM RPQQORNTMVM ROHPFRETEVFWH",
+ "G]LFLWMYNZP[T[VZWYXWXF ROAL> RVAS>",
+ "H[VMV[ RMMMXNZP[S[UZVY ROHLE RVHSE",
+ "G]LFLWMYNZP[T[VZWYXWXF RNAO?Q>S>U?VA",
+ "H[VMV[ RMMMXNZP[S[UZVY RNHOFQESEUFVH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RS`SaRcQd",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RS`SaRcQd",
+ "JZLFXF RR[RF RS`SaRcQd",
+ "MYOMWM RRFRXSZU[W[ RU`UaTcSd",
+ "I]VRXTYVY[X]V_T`Lb RLHMGOFUFWGXHYJYNXPVRTSNU",
+ "J[UWVXWZW]V_U`SaMb RMNOMSMUNVOWQWTVVUWSXOY",
+ "G]L[LF RLPXP RX[XF RN>RAV>",
+ "H[M[MF RV[VPUNSMPMNNMO RI>MAQ>",
+ "G]L[LFX[XF RX[Xb", /* U+220 N_CAP LEG */
+ "IbWFWXXZZ[\\[^Z_X^V\\UZVV^ RWNUMQMONNOMQMWNYOZQ[T[VZWX",
+ "G]NFLGKIKKLMMNOO RVFXGYIYKXMWNUO ROOUOWPXQYSYWXYWZU[O[MZLYKWKSLQMPOO",
+ "J[MJMMNORQVOWMWJ RPQTQVRWTWXVZT[P[NZMXMTNRPQ",
+ "H\\KFYFK[Y[ RY[Y_XaVbTb",
+ "IZLMWML[W[ RW[W_VaTbRb",
+ "I[MUWU RK[RFY[ RR?Q@RAS@R?RA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRFQGRHSGRFRH",
+ "H[MPTP RW[M[MFWF RR\\T]U_TaRbOb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RR\\T]U_TaRbOb",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA RM;W;",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH RM@W@",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W? RM;W;",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF RM@W@",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RR?Q@RAS@R?RA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRFQGRHSGRFRH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RR?Q@RAS@R?RA RM;W;", /* U+230 O_CAP DOT */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRFQGRHSGRFRH RM@W@",
+ "I[RQR[ RKFRQYF RM@W@",
+ "JZMMR[ RWMR[P`OaMb RMGWG",
+ "M]RFRXSZU[W[YZZXYVWUUVQ^",
+ "IbNMN[ RNOONQMTMVNWPWXXZZ[\\[^Z_X^V\\UZVV^",
+ "M]OMWM RRFRXSZU[W[YZZXYVWUUVQ^",
+ "MWRMR_QaObNb",
+ "D`R[RF RRZP[L[JZIYHWHQIOJNLMPMRN RTMXMZN[O\\Q\\W[YZZX[T[RZ",
+ "D`RMRb RRZP[L[JZIYHWHQIOJNLMPMRN RTMXMZN[O\\Q\\W[YZZX[T[RZ",
+ "I[MUWU RK[RFY[ RXCL`",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RXCL`",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RWHM`",
+ "HYW[M[MF RIOQO",
+ "JZLFXF RR[RF RXCL`",
+ "J[P[R^T_W_ RNZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN",
+ "IZLMWML[N[P\\R^T_W_", /* U+240 Z_SMALL_SWASHTAIL */
+ "J^MGPFTFWGYIZKZNYPWRTSPSP[",
+ "J^NNPMTMVNWOXQXSWUVVTWPWP[",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RIUOU",
+ "G]IM[M RLFLWMYNZP[T[VZWYXWXF",
+ "I[Y[RFK[",
+ "H[MPTP RW[M[MFWF RXCL`",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RWHM`",
+ "JZUFUUTXRZO[M[ RQPYP",
+ "MWRMR_QaObNb ROTUT RRFQGRHSGRFRH",
+ "G]XFX^Y`Za\\b^b RXIVGTFPFNGLIKMKTLXNZP[T[VZXX",
+ "I\\WMW^X`Ya[b]b RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RIQOQ",
+ "KXP[PM RPQQORNTMVM RMTUT",
+ "I[KIYI RRQR[ RKFRQYF",
+ "JZLQXQ RMMR[ RWMR[P`OaMb",
+ /* // IPA EXTENSIONS (0250-02AF) */
+ "H[MMMXNZP[T[VZ RMNOMTMVNWPWRVTTUOUMV", /* U+250 +A_SMALL */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[",
+ "G\\K[NQOOPNRMTMVNWOXRXVWYVZT[R[PZOYNWMPLNJM",
+ "H[RFPFNGMIM[ RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "J\\NNPMTMVNWOXQXWWYVZT[P[NZ",
+ "HZVNTMPMNNMOLQLWMYNZP[S[UZVXUVSUQVM^",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RW[W_XaZb\\b",
+ "I\\\\FZFXGWIW[ RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "I[NZP[T[VZWXWPVNTMPMNNMPMRWT",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT",
+ "IbNNPMTMVNWPWXVZT[P[NZMXMV\\S\\U]W_X`X",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN",
+ "J[TTVSWQWPVNTMPMNN RRTTTVUWWWXVZT[P[NZ",
+ "JaRTTTVUWWWXVZT[P[NZ RNNPMTMVNWPWQVSTT[S[U\\W^X_X",
+ "H[TTVSWQWPVNTMPMNNMOLRLVMYNZP[T[VZWXWWVUTTRT",
+ "MWRMR_QaObNb ROTUT",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RWMWIXGZF\\F", /* U+260 G_SMALL +HOOK */
+ "I\\WYVZT[P[NZMXMQNOONQMWMW^V`UaSbMb",
+ "HZUNSMPMNNMOLQLWMYNZP[T[VZVUSU",
+ "JZMMU[U_TaRbPaO_O[WM",
+ "JZMMTVUXTZR[PZOXPVWM",
+ "I\\WMWb RNMNXOZQ[T[VZWY",
+ "H[RFPFNGMIM[ RV[VPUNSMPMNNMO",
+ "H[RFPFNGMIM[ RV[VPUNSMPMNNMO RV[V_UaSbQb",
+ "MWR[RM ROTUT RRFQGRHSGRFRH",
+ "MXRMRXSZU[",
+ "MWR[RM RU[O[ RUMOM",
+ "MXU[SZRXRF RMONNPMTOVNWM",
+ "IYU[SZRXRF RRQQOONMOLQMSOTWT",
+ "MXRFR_SaUbWb",
+ "GZLFLXMZO[ RLMVMOVRVTWUXVZV^U`TaRbObMa",
+ "D`[M[[ R[YZZX[U[SZRXRM RRXQZO[L[JZIXIM",
+ "D`[M[[ R[YZZX[U[SZRXRM RRXQZO[L[JZIXIM R[[[b", /* U+270 +M_SMALL LEG */
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ R[[[_ZaXbVb",
+ "I\\NMN[ RNOONQMTMVNWPW[ RN[N_MaKbIb",
+ "I\\NMN[ RNOONQMTMVNWPW[ RW[W_XaZb\\b",
+ "H[M[MMV[VM",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "E]RTXT RRMR[ RZMMMKNJOIQIWJYKZM[Z[",
+ "G]RTRXSZU[V[XZYXYQXOWNUMOMMNLOKQKXLZN[O[QZRX",
+ "G]RFRb RPMTMVNXPYRYVXXVZT[P[NZLXKVKRLPNNPM",
+ "LYTMT[ RTWSYRZP[N[",
+ "LYTMT[ RTWSYRZP[N[ RTMTF",
+ "LYTMT[ RTWSYRZP[N[ RT[T_UaWbYb",
+ "KXP[PM RPQQORNTMVM RP[Pb",
+ "KXP[PM RPQQORNTMVM RP[P_QaSbUb",
+ "KXM[S[ RVMTMRNQOPRP[",
+ "LYW[Q[ RNMPMRNSOTRT[",
+ "I[RUW[ RN[NMTMVNWPWRVTTUNU", /* U+280 R_SMALLCAP */
+ "I[RSWM RNMN[T[VZWXWVVTTSNS",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RN[N_OaQbSb",
+ "KYWFUFSGRIR_QaObMb",
+ "MWRMR_QaObNb ROTUT RRMRISGUFWF",
+ "KYMFOFQGRIRXSZU[W[",
+ "KYWFUFSGRIR_QaObMaL_M]O\\V\\",
+ "KWU[M[ RRbRPQNOMMM",
+ "MYOMWM RRFR_SaUbWb",
+ "H[JRYR RVMV[ RMMMXNZP[S[UZVY",
+ "I\\XMUMUPWRXTXWWYVZT[Q[OZNYMWMTNRPPPMMM",
+ "H[MMMXNZP[S[UZVYWWWPVNUM",
+ "JZW[RMM[",
+ "G]Z[VMRWNMJ[",
+ "JZW[RM RM[RMTHUGWF",
+ "KYRTR[ RMMRTWM",
+ "IZLMWML[W[ RW[W_XaZb\\b", /* U+290 Z_SMALL !HOOK */
+ "IZLMWML[T[VZWXVVTURVN^",
+ "JZMMVMOVRVTWUXVZV^U`TaRbObMa",
+ "JZMMVMOVRVTWUXVZV^U`TaRbPbNaM_N]P\\R]Uc",
+ "J^MGPFTFWGYIZKZNYPWRTSPSP[",
+ "FZWGTFPFMGKIJKJNKPMRPSTST[",
+ "J^MZP[T[WZYXZVZSYQWOTNPNPF",
+ "F[WHVGSFQFNGLIKKJOJYK]L_NaQbSbVaW`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RROQPRQSPRORQ",
+ "I[STVUWWWXVZT[N[NMSMUNVPVQUSSTNT",
+ "I\\PTNUMWMXNZP[T[VZWYXVXRWOVNTMPMNNMPMQNSPTRT",
+ "HZUNSMPMNNMOLQLWMYNZP[T[VZVUSU RUMUIVGXFZF",
+ "H[MTVT RMMM[ RVMV[",
+ "LXRMR_QaObMaL_M]O\\V\\ RRFQGRHSGRFRH",
+ "J[VMVb RTUNM RN[VS",
+ "JYOMO[V[",
+ "I\\WMWb RWZU[Q[OZNYMWMQNOONQMUMWN RWMWIXGZF\\F", /* U+2A0 Q_SMALL +HOOK */
+ "J^MGPFTFWGYIZKZNYPWRTSPSP[ RLXTX",
+ "FZWGTFPFMGKIJKJNKPMRPSTST[ RPXXX",
+ "D`R[RF RRM]MR[][ RRZP[L[JZIYHWHQIOJNLMPMRN",
+ "E`RFR[ RRNPMMMKNJOIQIWJYKZM[P[RZ RRM\\MUVXVZW[X\\Z\\^[`ZaXbUbSa",
+ "D`R[RF RRM]MR[Z[\\Z]X\\VZUXVT^ RRZP[L[JZIYHWHQIOJNLMPMRN",
+ "G^IMQM RLFLXMZO[QZS[W[YZZXZWYUWTTTRSQQQPRNTMWMYN",
+ "I[KMTM RNFNXOZQ[T[ RYFWFUGTIT_SaQbOb",
+ "F^HMPM RKFKXLZN[P[RZ RZNXMTMRNQOPQPWQYRZT[W[YZZXYVWUUVQ^",
+ "F]HMPMP[ RK[KILGNFPF RPOQNSMVMXNYPY_XaVbTb",
+ "G^LFLXMZO[QZS[W[YZZXZWYUWTTTRSQQQPRNTMWMYN",
+ "H^MM[MP[ RMFMXNZP[[[",
+ "G]JSN[RUV[ZS RJFNNRHVNZF",
+ "G]XXXSLSLX RXKXFLFLK",
+ "I\\WMWb RNMNXOZQ[T[VZWY RNMNIMGKFIF",
+ "I\\\\bZbXaW_WM RNMNXOZQ[T[VZWY RNMNIMGKFIF",
+ /* // SPACING MODIFIER LETTERS (02B0-02FF) */
+ "F^K[KFYFY[K[", /* U+2B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // COMBINING DIACRITICAL MARKS (0300-036F) */
+ "F^K[KFYFY[K[", /* U+300 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+310 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+320 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+330 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+340 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+350 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+360 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // GREEK AND COPTIC (0370-03FF) */
+ "H[MFM[ RXPMP", /* U+370 HETA_CAP */
+ "IZNTVT RNMN[",
+ "G]R[RF RKOKFYFYO",
+ "I[R[RF RMOMFWFWO",
+ "MWSFQJ",
+ "MWS[Q_",
+ "G]LFL[XFX[",
+ "H\\MMM[WMW[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "NVR`RcSdTd",
+ "J\\NZP[T[VZWYXWXQWOVNTMPMNN",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRSQTRUSTRSRU",
+ "J\\NZP[T[VZWYXWXQWOVNTMPMNN RRSQTRUSTRSRU",
+ "MWSZS[R]Q^ RRNSORPQORNRP",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+380 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "NVTEQH",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "G[MUWU RK[RFY[ RMEJH",
+ "JZRRQSRTSSRRRT",
+ "B[MPTP RW[M[MFWF RHEEH",
+ "A]L[LF RLPXP RX[XF RGEDH",
+ "GWR[RF RMEJH",
+ "RR",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH",
+ "RR",
+ "@[RQR[ RKFRQYF RFECH",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH",
+ "MXRMRXSZU[ RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA", /* U+390 IOTA_SMALL DIAERESIS */
+ "I[MUWU RK[RFY[",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP",
+ "HZM[MFXF",
+ "I[K[RFY[K[",
+ "H[MPTP RW[M[MFWF",
+ "H\\KFYFK[Y[",
+ "G]L[LF RLPXP RX[XF",
+ "F^OPUP RPFTFVGXIYKZNZSYVXXVZT[P[NZLXKVJSJNKKLINGPF",
+ "MWR[RF",
+ "G\\L[LF RX[OO RXFLR",
+ "I[K[RFY[",
+ "F^K[KFRUYFY[",
+ "G]L[LFX[XF",
+ "H[L[W[ RLFWF RUPNP",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G]L[LFXFX[", /* U+3A0 PI_CAP */
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ",
+ "RR",
+ "H[W[L[SPLFWF",
+ "JZLFXF RR[RF",
+ "I[RQR[ RKFRQYF",
+ "G]R[RF RPITIWJYLZNZRYTWVTWPWMVKTJRJNKLMJPI",
+ "H\\KFY[ RYFK[",
+ "G]R[RF RHFJGKIKNLQMROSUSWRXQYNYIZG\\F",
+ "F^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[RQR[ RKFRQYF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEQH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH",
+ "MXRMRXSZU[ RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA", /* U+3B0 UPSILON_SMALL DIAERESIS */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[",
+ "H[SOUPVQWSWWVYUZS[P[NZMY RKbLaM_MINGPFSFUGVIVLUNSOQO",
+ "JZRYRb RLMMMNNRYWM",
+ "H[SMPMNNMOLQLWMYNZP[S[UZVYWWWQVOUNSMPLNKMINGPFTFVG",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN",
+ "HZMFWFPMNPMSMWNYOZQ[S[U\\V^V_UaSbRb",
+ "I\\NMN[ RNOONQMTMVNWPWb",
+ "H[LPWP RPFSFUGVHWKWVVYUZS[P[NZMYLVLKMHNGPF",
+ "MXRMRXSZU[",
+ "IZNMN[ RPSV[ RVMNU",
+ "JZRMM[ RMFOFPGRMW[",
+ "H^MMMb RWXXZZ[ RMXNZP[T[VZWXWM",
+ "J[MMR[WPWOVM",
+ "HZMFWF RQFOGNINLONQOUO RQOOPNQMSMWNYOZQ[S[U\\V^V_UaSbRb",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "F]VMV[ ROMOXNZL[ RZMMMKNJP", /* U+3C0 PI_SMALL */
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "HZVNTMPMNNMOLQLWMYNZP[S[U\\V^V_UaSb",
+ "H\\YMPMNNMOLQLWMYNZP[S[UZVYWWWQVOUNSM",
+ "H\\LPMNOMXM RRMRXSZU[",
+ "H[MMMXNZP[S[UZVYWWWPVNUM",
+ "G]MMLNKPKVLXNZP[T[VZXXYVYPXNVMUMSNRPRb",
+ "IZWMLb RLMNNOPT_UaWb",
+ "G]RMRb RKMKVLXNZP[T[VZXXYVYM",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RRMRXSZU[",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEQH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH",
+ "G\\L[LF RXFLR ROOX[Qb",
+ "H[SOUPVQWSWWVYUZS[P[NZMXMINGPFSFUGVIVLUNSOQO", /* U+3D0 BETA_SMALL_CURLED */
+ "H[JPKQLSLVMYNZP[S[UZVYWVWKVHUGSFPFNGMHLJLLMNNOPPWP",
+ "I\\KFMFOGQIRKR[ RRKSHTGVFWFYGZI",
+ "NiTEQH RXFZF\\G^I_K_[ R_K`HaGcFdFfGgI",
+ "I\\KFMFOGQIRKR[ RRKSHTGVFWFYGZI RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]RFRb RPMTMVNXPYRYVXXVZT[P[NZLXKVKRLPNNPM",
+ "F^RTRX R[MIM RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "IZLMNNOPOXNZM[LZLXMVVRWPWNVMUNTPTXUZW[V^U`TaRb",
+ "G]R[Rb RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[R[Rb RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "FZWFQFNGLIKKJOJRKVLXNZQ[R[T\\U^U_TaSbQb",
+ "HZVMPMNNMOLQLWMYNZP[R[T\\U^U_TaRbPb",
+ "HZTPMP RM[MFWF",
+ "MZVPRP RWFUFSGRIR_QaOb",
+ "H\\MFOGPILSXNTXUZW[",
+ "I[RFMPWPR[",
+ "H\\NGNL RXIULTNTW RKIMGPFTFVGXIYKZOZUYYX[", /* U+3E0 SAMPI_CAP */
+ "H\\L[UR RR[WV RLMPNSPURWVXZXb",
+ "CaRWRR R\\XY]V`SaMa RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF",
+ "G]RTRX RXZW\\S`PaOa RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "G]XFXb RPFNGLIKMKTLXNZP[T[VZXX",
+ "I\\WMWb RQMONNOMQMWNYOZQ[T[VZWY",
+ "F]KFK[ RKQMOPNTNVOXQYTYWXZW\\U^R`Nb",
+ "I[WLWMVPTRRSPSNRMPMONMPLRLTMVPWSWWVYUZS[M[",
+ "F]KHLGOFTFWGXHYJYLXOVQJ[N^Q_V_Y^",
+ "J[NNPMTMVNWPWRVTTVN[P]R^U^W]",
+ "G]I[[[ RIFJFLGXZZ[ R[FZFXGLZJ[",
+ "H[KMMNVZX[K[MZVNXM",
+ "G\\XEVFOFMGLHKJKWLYMZO[T[VZWYXWXPWNVMTLNLLMKN",
+ "H[WEVFTGPGNHMILKLWMYNZP[S[UZVYWWWQVOUNSMOMMNLO",
+ "G]RFRb RKQKMYMYQ",
+ "I[MMWM RRFRb",
+ "IZLMNNOPOXNZM[LZLXMVVRWPWNVMUNTPTXUZW[", /* U+3F0 KAPPA_SMALL_SCRIPT */
+ "H\\WbQbOaN`M^MQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "MWRMR_QaObNb RRFQGRHSGRFRH",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "HZLTST RVZT[P[NZMYLWLQMONNPMTMVN",
+ "J\\XTQT RNZP[T[VZWYXWXQWOVNTMPMNN",
+ "G\\LFL[ RLKTKVLWMXOXRWTVUTVLV",
+ "H[MFMb RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "F^K[KFRMYFY[",
+ "G]LbLMRSXMX[",
+ "G\\J`S` RMbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "I^MYNZQ[S[VZXXYVZRZOYKXIVGSFQFNGMH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RROQPRQSPRORQ",
+ "I^MYNZQ[S[VZXXYVZRZOYKXIVGSFQFNGMH RROQPRQSPRORQ",
+ /* // Cyrillic (0400-04FF) */
+ "H[MPTP RW[M[MFWF RP>SA", /* U+400 E_CAP GRAVE */
+ "H[MPTP RW[M[MFWF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "JbLFXF RR[RF RRMXM[N]P^S^\\]_[aXbVb",
+ "HZM[MFXF RT>QA",
+ "F[JPTP RWYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG",
+ "MWR[RF",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "JZUFUUTXRZO[M[",
+ "AbC[D[FZGXILJILGOFRFR[X[[Z]X^V^S]Q[OXNRN",
+ "AbF[FF RRFR[X[[Z]X^V^S]Q[OXNFN",
+ "JbLFXF RR[RF RRMXM[N]P^S^[",
+ "G\\L[LF RX[OO RXFLR RT>QA",
+ "G]LFL[XFX[ RP>SA",
+ "G[KFRT RYFPXNZL[K[ RN>O@QASAU@V>",
+ "G]R[R` RLFL[X[XF",
+ "I[MUWU RK[RFY[", /* U+410 A_CAP */
+ "G\\VFLFL[R[UZWXXVXSWQUORNLN",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP",
+ "HZM[MFXF",
+ "F^[`[[I[I` RW[WFRFPGOHNJL[",
+ "H[MPTP RW[M[MFWF",
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR",
+ "I]PPTP RMGOFTFVGWHXJXLWNVOTPWQXRYTYWXYWZU[O[MZ",
+ "G]LFL[XFX[",
+ "G]LFL[XFX[ RN>O@QASAU@V>",
+ "G\\L[LF RX[OO RXFLR",
+ "F\\W[WFTFQGOINLLXKZI[H[",
+ "F^K[KFRUYFY[",
+ "G]L[LF RLPXP RX[XF",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G]L[LFXFX[",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ", /* U+420 P_CAP */
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "JZLFXF RR[RF",
+ "G[KFRT RYFPXNZL[K[",
+ "G]R[RF RPITIWJYLZNZRYTWVTWPWMVKTJRJNKLMJPI",
+ "H\\KFY[ RYFK[",
+ "G]XFX[ RLFL[Z[Z`",
+ "H\\WFW[ RLFLNMPNQPRWR",
+ "CaRFR[ RHFH[\\[\\F",
+ "CaRFR[ RHFH[\\[\\F R\\[^[^`",
+ "F]HFMFM[S[VZXXYVYSXQVOSNMN",
+ "Da\\F\\[ RIFI[O[RZTXUVUSTQROONIN",
+ "H]MFM[S[VZXXYVYSXQVOSNMN",
+ "I^ZQPQ RMHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZMY",
+ "CaHFH[ ROPHP RTFXFZG\\I]M]T\\XZZX[T[RZPXOTOMPIRGTF",
+ "G\\RQK[ RW[WFOFMGLHKJKMLOMPOQWQ",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR", /* U+430 A_SMALL */
+ "H[WEVFTGPGNHMILKLWMYNZP[S[UZVYWWWQVOUNSMOMMNLO",
+ "I[STVUWWWXVZT[N[NMSMUNVPVQUSSTNT",
+ "JYO[OMWM",
+ "H[WOVNTMPMNNMOLQLWMYNZP[S[UZVYWWWJVHUGSFOFMG",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWWXVZT[P[NZ",
+ "H\\MMM[WMW[",
+ "H\\MMM[WMW[ RNEOGQHSHUGVE",
+ "IZNMN[ RPSV[ RVMNU",
+ "I[V[VMSMQNPPOXNZL[",
+ "G]L[LMRXXMX[",
+ "H[MTVT RMMM[ RVMV[",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "H[M[MMVMV[",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ", /* U+440 P_SMALL */
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "KYMMWM RRMR[",
+ "JZMMR[ RWMR[P`OaMb",
+ "G]RFRb RPMTMVNXPYRYVXXVZT[P[NZLXKVKRLPNNPM",
+ "IZL[WM RLMW[",
+ "I\\WMW[ RNMN[Y[Y`",
+ "J\\VMV[ RNMNROTQUVU",
+ "F^RMR[ RKMK[Y[YM",
+ "F^RMR[ RKMK[Y[YM RY[[[[`",
+ "HZJMNMN[S[UZVXVUUSSRNR",
+ "F^YMY[ RKMK[P[RZSXSURSPRKR",
+ "IZNMN[S[UZVXVUUSSRNR",
+ "J\\XTQT RNNPMTMVNWOXQXWWYVZT[P[NZ",
+ "E_JTPT RJMJ[ RT[RZQYPWPQQORNTMWMYNZO[Q[WZYYZW[T[",
+ "I[RUM[ RV[VMPMNNMPMRNTPUVU",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RPESH", /* U+450 E_SMALL GRAVE */
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "M^OKXK RRFR[ RRSSRUQWQYRZTZ[Y^WaVb",
+ "JYO[OMWM RTEQH",
+ "HZLTST RVZT[P[NZMYLWLQMONNPMTMVN",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN",
+ "MWR[RM RRFQGRHSGRFRH",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RR[RM",
+ "MWRMR_QaObNb RRFQGRHSGRFRH",
+ "E^H[JZKXLPMNOMRMR[W[YZZXZUYSWRRR",
+ "D^IMI[ RRMR[W[YZZXZVYTWSIS",
+ "M^OKXK RRFR[ RRSSRUQWQYRZTZ[",
+ "IZNMN[ RPSV[ RVMNU RTEQH",
+ "H\\MMM[WMW[ RPESH",
+ "JZMMR[ RWMR[P`OaMb RNEOGQHSHUGVE",
+ "H]R[R` RMMM[W[WM",
+ "CaRWRR RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF", /* U+460 OMEGA_LARGE */
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "F]IIVI RMFM[S[VZXXYVYSXQVOSNMN",
+ "HZJMTM RNFN[S[UZVXVUUSSRNR",
+ "D`IFI[ RYPIP R\\Y[ZX[V[SZQXPVOROOPKQISGVFXF[G\\H",
+ "F^KMK[ RWTKT RZZX[T[RZQYPWPQQORNTMXMZN",
+ "F^LSXS RRSR[ RH[RF\\[",
+ "I[NUVU RRUR[ RK[RMY[",
+ "AbF[FF RFS\\S RVSV[ RL[VF`[",
+ "E_J[JM RVUV[ RZUJU RO[VM][",
+ "E_R[RPJFZFRP RI[IVJSLQOPUPXQZS[V[[",
+ "G]R[RTLMXMRT RK[KXLVMUOTUTWUXVYXY[",
+ "AcF[FF RFPSP RV[VPNF^FVP RM[MVNSPQSPYP\\Q^S_V_[",
+ "DaI[IM RITST RV[VTPM\\MVT RO[OXPVQUSTYT[U\\V]X][",
+ "H\\OPSP RNAQFSBTAUA RLGNFSFUGVHWJWLVNUOSPVQWRXTXWWYVZT[O[M\\L^L_MaObWb",
+ "J[RTTT ROHRMTIUHVH RNNPMTMVNWPWQVSTTVUWWWXVZT[Q[O\\N^N_OaQbVb",
+ "G]R[RF RHFJGKIKNLQMROSUSWRXQYNYIZG\\F", /* U+470 PSI_CAP */
+ "G]RMRb RKMKVLXNZP[T[VZXXYVYM",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "I[KFR[YF",
+ "JZMMR[WM",
+ "I[KFR[YF ROAL> RVAS>",
+ "JZMMR[WM ROHLE RVHSE",
+ "GmPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF R`Me[ RjMe[c`ba`b",
+ "HkP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ R^Mc[ RhMc[a``a^b",
+ "CaRXR^ RRCRI RMFJGHIGLGUHXJZM[W[ZZ\\X]U]L\\IZGWFMF",
+ "G]RYR] RRKRO ROMMNLOKQKWLYMZO[U[WZXYYWYQXOWNUMOM",
+ "CaRWRR RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF RLBM@O?R?U@X@",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RLIMGOFRFUGXG",
+ "CaRWRR RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF RM<W< RR<R?",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RMEWE RRERH",
+ "FZWGTFPFMGKIJKJNKPMRPSTST[", /* U+480 KOPPA_CYR_CAP */
+ "FZVNTMPMNNMOLQLSMUNVPWTWT[",
+ "H[N]UO ROQWU RT[LW",
+ "JZMHMFWGWE",
+ "JZMHUEVH",
+ "NVPESH",
+ "NVTEQH",
+ "KZLIMGOFRFUGXG",
+ ":j>R?PAOCPDR RC^D\\F[H\\I^ RCFDDFCHDIF ROcPaR`TaUc ROAP?R>T?UA R[^\\\\^[`\\a^ R[F\\D^C`DaF R`RaPcOePfR",
+ ":jDQ>Q RH[D_ RHGDC RR_Re RRCR= R\\[`_ R\\G`C R`QfQ",
+ "G]LFL[XFX[ RX[[[Ub RN>O@QASAU@V>",
+ "H\\MMM[WMW[ RW[Z[Tb RNEOGQHSHUGVE",
+ "H]MFM[S[VZXXYVYSXQVOSNMN RJIPI",
+ "IZKMQM RNFN[S[UZVXVUUSSRNR",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RTMXS",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RSWW]",
+ "HZM[MFXFXA", /* U+490 GAMMA_CAP_UPTURN */
+ "JYO[OMWMWH",
+ "HZM[MFXF RJQRQ",
+ "JYO[OMWM RLTTT",
+ "H]M[MFXF RMMSMVNXPYSY\\X_VaSbQb",
+ "J\\O[OMWM ROTTTVUWVXXX[W^UaTb",
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR R^[`[``",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU RZ[\\[\\`",
+ "I]PPTP RMGOFTFVGWHXJXLWNVOTPWQXRYTYWXYWZU[O[MZ RR\\T]U_TaRbOb",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWWXVZT[P[NZ RR\\T]U_TaRbOb",
+ "G\\L[LF RX[OO RXFLR RX[Z[Z`",
+ "IZNMN[ RPSV[ RVMNU RV[X[X`",
+ "G\\L[LF RX[OO RXFLR RPKPS",
+ "IZNMN[ RPSV[ RVMNU RRORW",
+ "G\\L[LF RX[OO RXFLR RIJOJ",
+ "IZN[NF RPSV[ RVMNU RKJQJ",
+ "E\\X[OO RXFLR RGFLFL[", /* U+4A0 K_CAP_BASHKIR */
+ "HZPSV[ RVMNU RJMNMN[",
+ "G]L[LF RLPXP RX[XF RX[Z[Z`",
+ "H[MTVT RMMM[ RVMV[ RV[X[X`",
+ "GeL[LF RLPXP RX[XFcF",
+ "H`MTVT RMMM[ RV[VM^M",
+ "GhL[LFXFX[ RXM^MaNcPdSd\\c_aa^b\\b",
+ "HcM[MMVMV[ RVT[T]U^V_X_[^^\\a[b",
+ "F^QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZMYJWIVITJSMSRTVUXWZY[[[",
+ "H\\QMPMNNMOLQLWMYNZP[T[VZWYXWXRWPUOSPRRRWSYTZV[Y[",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR\\T]U_TaRbOb",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RR\\T]U_TaRbOb",
+ "JZLFXF RR[RF RR[T[T`",
+ "KYMMWM RRMR[ RR[T[T`",
+ "I[RQR[ RKFRQYF",
+ "JZR[Rb RMMR[WM",
+ "I[RQR[ RKFRQYF RNUVU", /* U+4B0 Y_CAP STROKE_H */
+ "JZR[Rb RMMR[WM RN]V]",
+ "H\\KFY[ RYFK[ RX[Z[Z`",
+ "IZL[WM RLMW[ RV[X[X`",
+ "D]FFRF RXFX[ RLFL[Z[Z`",
+ "G\\RMIM RWMW[ RNMN[Y[Y`",
+ "H\\WFW[ RLFLNMPNQPRWR RW[Y[Y`",
+ "J\\VMV[ RNMNROTQUVU RV[X[X`",
+ "H\\WFW[ RLFLNMPNQPRWR RRNRV",
+ "J\\VMV[ RNMNROTQUVU RRQRY",
+ "G]L[LF RL[ RLPRPUQWSXVX[",
+ "H[M[MF RV[VPUNSMPMNNMO",
+ "@^WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGXIYKZOJQGQEPDOCMCK",
+ "E[VZT[P[NZMXMPNNPMTMVNWPWRMTKTISHQHO",
+ "@^WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGXIYKZOJQGQEPDOCMCK RR[P]O_PaRbTb",
+ "E[VZT[P[NZMXMPNNPMTMVNWPWRMTKTISHQHO RR[P]O_PaRbTb",
+ "MWR[RF", /* U+4C0 I_CAP */
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR RN>O@QASAU@V>",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU RNEOGQHSHUGVE",
+ "G\\L[LF RX[OO RXFLR RX[X_WaUbSb",
+ "IZNMN[ RPSV[ RVMNU RV[V_UaSbQb",
+ "F\\W[WFTFQGOINLLXKZI[H[ RW[Z[Tb",
+ "I[V[VMSMQNPPOXNZL[ RV[Y[Sb",
+ "G]L[LF RLPXP RX[XF RX[X_WaUbSb",
+ "H[MTVT RMMM[ RVMV[ RV[V_UaSbQb",
+ "G]L[LF RLPXP RX[XF RX[[[Ub",
+ "H[MTVT RMMM[ RVMV[ RV[Y[Sb",
+ "H\\WFW[ RLFLNMPNQPRWR RW[U[U`",
+ "J\\VMV[ RNMNROTQUVU RV[T[T`",
+ "F^K[KFRUYFY[ RY[\\[Vb",
+ "G]L[LMRXXMX[ RX[[[Ub",
+ "MWR[RF",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V>", /* U+4D0 A_CAP BREVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE",
+ "I[MUWU RK[RFY[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX",
+ "H[MPTP RW[M[MFWF RN>O@QASAU@V>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNEOGQHSHUGVE",
+ "F^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZLXKVJRZP",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT",
+ "F^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZLXKVJRZP RNBOCNDMCNBND RVBWCVDUCVBVD",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I]PPTP RMGOFTFVGWHXJXLWNVOTPWQXRYTYWXYWZU[O[MZ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWWXVZT[P[NZ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY", /* U+4E0 DIGIT_3 */
+ "JZMMVMOVRVTWUXVZV^U`TaRbObMa",
+ "G]LFL[XFX[ RM@W@",
+ "H\\MMM[WMW[ RMGWG",
+ "G]LFL[XFX[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H\\MMM[WMW[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I^ZPPP RMYNZQ[S[VZXXYVZRZOYKXIVGSFQFNGMH RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "J\\XTQT RNZP[T[VZWYXWXQWOVNTMPMNN RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G[KFRT RYFPXNZL[K[ RM@W@",
+ "JZMMR[ RWMR[P`OaMb RMGWG",
+ "G[KFRT RYFPXNZL[K[ RN?O@NAM@N?NA RV?W@VAU@V?VA", /* U+4F0 Y_LARGE DIAERESIS */
+ "JZMMR[ RWMR[P`OaMb RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G[KFRT RYFPXNZL[K[ RQ>NA RX>UA",
+ "JZMMR[ RWMR[P`OaMb RQENH RXEUH",
+ "H\\WFW[ RLFLNMPNQPRWR RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "J\\VMV[ RNMNROTQUVU RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "HZM[MFXF RM[O[O`",
+ "JYO[OMWM RO[Q[Q`",
+ "Da\\F\\[ RIFI[O[RZTXUVUSTQROONIN RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "F^YMY[ RKMK[P[RZSXSURSPRKR RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "HZWFMFM[Q[Q_PaNbLb RJQRQ",
+ "JYWMOMO[S[S_RaPbNb RLTTT",
+ "H\\KFY[ RYFK[ RX[X_WaUbSb",
+ "IZL[WM RLMW[ RV[V_UaSbQb",
+ "H\\KFY[ RYFK[ RNPVP",
+ "IZL[WM RLMW[ RNTVT",
+ /* // Cyrillic Supplement (500-52F) */
+ "G\\WFW[Q[NZLXKVKSLQNOQNWN", /* U+500 !SOFT_CAP */
+ "J[VMV[Q[OZNXNUOSQRVR",
+ "B_RXSZU[X[ZZ[X[M RRFRXQZO[L[IZGXFVFSGQIOLNRN",
+ "E]RXSZU[V[XZYXYQ RRMRXQZO[M[KZJXJUKSMRRR",
+ "IePPTP RMGOFTFVGWHXJXLWNVOTPVQWRXTXXYZ[[^[`ZaXaM",
+ "KbRTTT RNNPMTMVNWPWQVSTTVUWWWXXZZ[[[]Z^X^Q",
+ "I\\PPTP RMGOFTFVGWHXJXLWNVOTPVQWRXTX[Z[Z`",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWW[Y[Y`",
+ "FdH[I[KZLXNLOIQGTFWFWXXZZ[][_Z`X`M",
+ "IaL[NZOXPPQNSMVMVXWZY[Z[\\Z]X]Q",
+ "CaH[HF RHPTP RTFTXUZW[Z[\\Z]X]M",
+ "F^KTTT RKMK[ RTMTXUZW[X[ZZ[X[R",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR",
+ "HZUNSMPMNNMOLQLWMYNZP[T[VZVUSU",
+ "J_LFXF RRFRXSZU[X[ZZ[X[M",
+ "K]MMWM RRMRXSZU[V[XZYXYS",
+ "G[PPTP RWGUFPFNGMHLJLLMNNOPPMQLRKTKWLYMZO[U[WZ", /* U+510 EPSILON_LARGE */
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN",
+ "F\\W[WFTFQGOINLLXKZI[H[ RW[W_VaTbRb",
+ "I[V[VMSMQNPPOXNZL[ RV[V_UaSbQb",
+ "BaP[^F RD[E[GZHXJLKIMGPF^[",
+ "E^[MO[ RH[JZKXLPMNOM[[",
+ "E_\\FUO\\[ RJ[JFRFTGUHVJVMUOTPRQJQ",
+ "F^KMKb R[MUT[[ RKNMMQMSNTOUQUWTYSZQ[M[KZ",
+ "DaOQH[ RTFT[^[ R[QLQJPIOHMHJIHJGLF^F",
+ "D`H[MU RRPRMKMINHPHRITKURU R[ZY[U[SZRXRPSNUMYM[N\\P\\RRT",
+ "G]Z]X\\VZSWQVOV RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[",
+ "I\\WMWb RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "F^IFN[RLV[[F",
+ "G]JMN[RQV[ZM",
+ "G\\L[LF RX[OO RXFLR RXKRG",
+ "IZNMN[ RPSV[ RVMNU RWQQM",
+ "FgW[WFTFQGOINLLXKZI[H[ RWM]M`NbPcSc\\b_`a]b[b", /* U+520 LYUDI_CAP MIDDLE_HOOK_CAP */
+ "IcV[VMSMQNPPOXNZL[ RVT[T]U^V_X_[^^\\a[b",
+ "GhL[LF RLPXP RX[XF RXM^MaNcPdSd\\c_aa^b\\b",
+ "HcMTVT RMMM[ RVMV[ RVT[T]U^V_X_[^^\\a[b",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Armenian (530-58F) */
+ "F^K[KFYFY[K[", /* U+530 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+540 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+550 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+560 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+570 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+580 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Hebrew (590-5FF) */
+ "F^K[KFYFY[K[", /* U+590 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Arabic (600-6FF) */
+ "F^K[KFYFY[K[", /* U+600 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+610 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+620 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+630 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+640 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+650 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+660 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+670 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+680 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+690 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Syriac (700-74F) */
+ "F^K[KFYFY[K[", /* U+700 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+710 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+720 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+730 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+740 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Arabic Supplement (750-77F) */
+ "F^K[KFYFY[K[", /* U+750 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+760 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+770 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Taana (780-7BF) */
+ "F^K[KFYFY[K[", /* U+780 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+790 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // N'Ko (7C0-7FF) */
+ "F^K[KFYFY[K[", /* U+7C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (800-8FF) */
+ "F^K[KFYFY[K[", /* U+800 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+810 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+820 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+830 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+840 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+850 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+860 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+870 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+880 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+890 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Devanagari (900-97F) */
+ "F^K[KFYFY[K[", /* U+900 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+910 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+920 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+930 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+940 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+950 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+960 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+970 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Bengali (980-9FF) */
+ "F^K[KFYFY[K[", /* U+980 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+990 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Gurmukhi (A00-A7F) */
+ "F^K[KFYFY[K[", /* U+A00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Gujarati (A80-AFF) */
+ "F^K[KFYFY[K[", /* U+A80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Oriya (B00-B7F) */
+ "F^K[KFYFY[K[", /* U+B00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tamil (B80-BFF) */
+ "F^K[KFYFY[K[", /* U+B80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Telugu (C00-C7F) */
+ "F^K[KFYFY[K[", /* U+C00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Kannada (C80-CFF) */
+ "F^K[KFYFY[K[", /* U+C80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Malayalam (D00-D7F) */
+ "F^K[KFYFY[K[", /* U+D00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Simhala (D80-DFF) */
+ "F^K[KFYFY[K[", /* U+D80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Thai (E00-E7F) */
+ "F^K[KFYFY[K[", /* U+E00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Lao (E80-EFF) */
+ "F^K[KFYFY[K[", /* U+E80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+ED0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tibetan (F00-FFF) */
+ "F^K[KFYFY[K[", /* U+F00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Myanmar (1000-109F) */
+ "F^K[KFYFY[K[", /* U+1000 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1010 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1020 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1030 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1040 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1050 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1060 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1070 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1080 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1090 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Geogian (10A0-10FF) */
+ "F^K[KFYFY[K[", /* U+10A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Hangul Jamo (1100-11FF) */
+ "F^K[KFYFY[K[", /* U+1100 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1110 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1120 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1130 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1140 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1150 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1160 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1170 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1180 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1190 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ethiopic (1200-137F) */
+ "F^K[KFYFY[K[", /* U+1200 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1210 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1220 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1230 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1240 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1250 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1260 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1270 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1280 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1290 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1300 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1310 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1320 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1330 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1340 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1350 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1360 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1370 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ethiopic Supplement (1380-139F) */
+ "F^K[KFYFY[K[", /* U+1380 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1390 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Cherokee (13A0-13FF) */
+ "F^K[KFYFY[K[", /* U+13A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Unified Canadian Aboriginal Syllabics (1400-167F) */
+ "F^K[KFYFY[K[", /* U+1400 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1410 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1420 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1430 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1440 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1450 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1460 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1470 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1480 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1490 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1500 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1510 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1520 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1530 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1540 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1550 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1560 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1570 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1580 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1590 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1600 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1610 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1620 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1630 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1640 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1650 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1660 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1670 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ogham (1680-169F) */
+ "F^K[KFYFY[K[", /* U+1680 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1690 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Runic (16A0-16FF) */
+ "F^K[KFYFY[K[", /* U+16A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tagalog (1700-171F) */
+ "F^K[KFYFY[K[", /* U+1700 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1710 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Hanunoo (1720-173F) */
+ "F^K[KFYFY[K[", /* U+1720 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1730 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Buhid (1740-175F) */
+ "F^K[KFYFY[K[", /* U+1740 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1750 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tagbanwa (1760-177F) */
+ "F^K[KFYFY[K[", /* U+1760 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1770 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Khmer (1780-17FF) */
+ "F^K[KFYFY[K[", /* U+1780 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1790 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Mongolian (1800-18AF) */
+ "F^K[KFYFY[K[", /* U+1800 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1810 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1820 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1830 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1840 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1850 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1860 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1870 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1880 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1890 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (18B0-18FF) */
+ "F^K[KFYFY[K[", /* U+18B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Limbu (1900-194F) */
+ "F^K[KFYFY[K[", /* U+1900 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1910 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1920 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1930 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1940 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tai Le (1950-197F) */
+ "F^K[KFYFY[K[", /* U+1950 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1960 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1970 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // New Tai Lue (1980-19DF) */
+ "F^K[KFYFY[K[", /* U+1980 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1990 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Khmer Symbols (19E0-19FF) */
+ "F^K[KFYFY[K[", /* U+19E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Buginese (1A00-1A1F) */
+ "F^K[KFYFY[K[", /* U+1A00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (1A20-1AFF) */
+ "F^K[KFYFY[K[", /* U+1A20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Balinese (1B00-1B7F) */
+ "F^K[KFYFY[K[", /* U+1B00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Sudanese (1B80-1BBF) */
+ "F^K[KFYFY[K[", /* U+1B80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (1BC0-1BFF) */
+ "F^K[KFYFY[K[", /* U+1BC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Lepcha (1C00-1C4F) */
+ "F^K[KFYFY[K[", /* U+1C00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ol Chiki (1C50-1C7F) */
+ "F^K[KFYFY[K[", /* U+1C50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (1C80-1CFF) */
+ "F^K[KFYFY[K[", /* U+1C80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Phonetic Extensions (1D00-1D7F) */
+ "JZNXVX RM[RMW[", /* U+1D00 A_SMALLCAP */
+ "H\\LXRX RRTWT RRMR[Y[ RYMPMK[",
+ "D`[ZY[U[SZRX RINKMOMQNRPRXQZO[K[IZHXHVRUYU[T\\R\\P[NYMUMSNRP",
+ "I[STVUWWWXVZT[N[NMSMUNVPVQUSSTNT RKWQW",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "J[SMOMO[S[UZVYWVWRVOUNSM",
+ "J[SMOMO[S[UZVYWVWRVOUNSM RLTRT",
+ "JYOTTT RVMOMO[V[",
+ "J[TTVSWQWPVNTMPMNN RRTTTVUWWWXVZT[P[NZ",
+ "MWRMR[ RRbSaR`QaRbR`",
+ "LYTMTWSYRZP[O[",
+ "IZNMN[ RPSV[ RVMNU",
+ "JYOMO[V[ RLVRR",
+ "G]L[LMRXXMX[",
+ "I\\W[WMN[NM",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "J\\NNPMTMVNWOXQXWWYVZT[P[NZ", /* U+1D10 +C_SMALL */
+ "G]YSYVXXWYUZOZMYLXKVKSLQMPOOUOWPXQYS",
+ "G]XYYWYSXQWPUOOOMPLQKSKWLY",
+ "G]YNK[ RYSYVXXWYUZOZMYLXKVKSLQMPOOUOWPXQYS",
+ "DaINKMOMQNRPRXQZO[K[IZHXHVRT RRWSYTZV[Y[[Z\\Y]W]Q\\O[NYMVMTNSORQ",
+ "G]OMNNMPNRPS RTSVRWPVNUM RPSTSVTWVWXVZT[P[NZMXMVNTPS",
+ "I\\XTXQWOVNTMQMONNOMQMT",
+ "H[LTLWMYNZP[S[UZVYWWWT",
+ "I[N[NMTMVNWPWRVTTUNU",
+ "I[RUM[ RV[VMPMNNMPMRNTPUVU",
+ "I[RSMM RVMV[P[NZMXMVNTPSVS",
+ "KYMMWM RRMR[",
+ "H[MMMXNZP[S[UZVXVM",
+ "G]KPYP RKYVYXXYVYSXQWP",
+ "@]KPYP RKYVYXXYVYSXQWP REWFXEYDXEWEY REOFPEQDPEOEQ",
+ "G]KKYK RWKXLYNYQXSVTKT RVTXUYWYZX\\V]K]",
+ "JZMMR[WM", /* U+1D20 V_SMALL */
+ "G]JMN[RQV[ZM",
+ "IZLMWML[W[",
+ "JZNMVMRRSRUSVUVXUZS[P[NZ",
+ "H\\XNUMPMNNMOLQLSMUNVPWTXVYWZX\\X^W`VaTbObLa RRTR\\",
+ "JZW[PROPPNRMTNUPTRM[",
+ "JYO[OMWM",
+ "JZM[RMW[",
+ "H[M[MMVMV[",
+ "I[N[NMTMVNWPWRVTTUNU",
+ "I[RMR[ RLMMNMRNTPUTUVTWRWNXM",
+ "I[V[VMSMQNPPOXNZL[",
+ "JZNKVK RMNR@WN",
+ "H\\LKRK RRGWG RR@RNYN RY@P@KN",
+ "I[SGVHWJWKVMTNNNN@S@UAVCVDUFSGNG",
+ "I[SGVHWJWKVMTNNNN@S@UAVCVDUFSGNG RKGQG",
+ "J[S@O@ONSNUMVLWIWEVBUAS@", /* U+1D30 ^D_SMALLCAP */
+ "JYOGTG RV@O@ONVN",
+ "KZUGPG RN@U@UNNN",
+ "HZUAS@P@NAMBLDLJMLNMPNTNVMVHSH",
+ "H[MGVG RM@MN RV@VN",
+ "MWRNR@ RUNON RU@O@",
+ "LYT@TJSLRMPNON",
+ "IZN@NN RPFVN RV@NH",
+ "JYO@ONVN",
+ "G]LNL@RKX@XN",
+ "H[MNM@VNV@",
+ "I\\WNW@NNN@",
+ "H[PNNMMLLJLDMBNAP@S@UAVBWDWJVLUMSNPN",
+ "G]O@NAMCNEPF RTFVEWCVAU@ RPFTFVGWIWKVMTNPNNMMKMINGPF",
+ "I[NNN@T@VAWCWEVGTHNH",
+ "I[RHWN RNNN@T@VAWCWEVGTHNH",
+ "KYM@W@ RR@RN", /* U+1D40 ^T_SMALLCAP */
+ "H[M@MKNMPNSNUMVKV@",
+ "G]J@NNRDVNZ@",
+ "KZOEQDSDUEVGVN RVMTNQNOMNKOIQHVH",
+ "JYNDNKOMQNSNUM RNEPDSDUEVGUISJNJ",
+ "H]WDUKTMRNPNNMMKMGNEPDRDTEVMWN",
+ "H\\XMVNUNSMRK RLDODQERHRKQMONNNLMKKKJVJXIYGXEVDUDSERH",
+ "KYO@ON ROMQNSNUMVKVGUESDQDOE",
+ "KYU@UN RUESDQDOENGNKOMQNSNUM",
+ "LYVMTNRNPMOKOGPERDSDUEVGVHOI",
+ "LYOEQDSDUEVGVKUMSNRNPMOKOJVI",
+ "LXPIRI RUETDPDOEOHPIOJOMPNTNUM",
+ "LXRITI ROEPDTDUEUHTIUJUMTNPNOM",
+ "KYUDUPTRRSOS RUESDQDOENGNKOMQNSNUM",
+ "NVRDRN RRUSTRSQTRURS",
+ "IZO@ON RUNQH RUDOJ",
+ "G]KNKD RKEMDODQERGRN RRGSEUDVDXEYGYN", /* U+1D50 ^M_TINY */
+ "KZODON ROEQDSDUEVGVPURSSRS",
+ "KYQNOMNKNGOEQDSDUEVGVKUMSNQN",
+ "LYOEQDSDUEVGVKUMSNQNOM",
+ "KYNINGOEQDSDUEVGVI",
+ "KYNINKOMQNSNUMVKVI",
+ "KYOSOD ROEQDSDUEVGVKUMSNQNOM",
+ "NXPDVD RR@RKSMUNVN",
+ "KYUDUN RNDNKOMQNSNUM",
+ "I[MFWF RMMTMVLWJWHVF",
+ "G]YDYN RYMWNUNSMRKRD RRKQMONNNLMKKKD",
+ "LXNDRNVD",
+ "LXVNPGPEQDSDTETGNN",
+ "KYSFRF RNSOQOCPAR@S@UAVCUESFUGVIVKUMSNQNOM",
+ "KXRMRS RMDOERMVD",
+ "KYSDQDOENGNKOMQNSNUMVKVGUESDPCOBOAP@U@",
+ "I[MDLFLJMLNMPNTNVMWLXJXGWEUDSERGRS", /* U+1D60 ^PHI_TINY */
+ "LXVDNS RNDPETRVS",
+ "NVRWRa RRPQQRRSQRPRR",
+ "LWPWPa RPZQXSWUW",
+ "KYUWUa RNWN^O`QaSaU`",
+ "LXNWRaVW",
+ "KYSYRY RNfOdOVPTRSSSUTVVUXSYUZV\\V^U`SaQaO`",
+ "KXR`Rf RMWOXR`VW",
+ "KYOfOZPXRWSWUXVZV^U`SaQaO`",
+ "I[MWLYL]M_N`PaTaV`W_X]XZWXUWSXRZRf",
+ "LXVWNf RNWPXTeVf",
+ "D`IMIXJZL[O[QZRX R[ZY[U[SZRXRPSNUMYM[N\\P\\RRT",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RIHJGLFPHRGSF",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RQHRGTFXHZG[F",
+ "MYOMWM RR[RISGUFWF RMTNSPRTTVSWR",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RMTNSPRTTVSWR",
+ "I\\NMN[ RNOONQMTMVNWPW[ RMTNSPRTTVSWR", /* U+1D70 N_SMALL TILDE */
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RI`J_L^P`R_S^",
+ "KXP[PM RPQQORNTMVM RLTMSORSTUSVR",
+ "KXM[S[ RVMTMRNQOPRP[ RLTMSORSTUSVR",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNTOSQRUTWSXR",
+ "MYOMWM RRFRXSZU[W[ RMSNRPQTSVRWQ",
+ "IZLMWML[W[ RMTNSPRTTVSWR",
+ "H[M[MJNHOGQFTFVG RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "H[MGVG RM@MN RV@VN",
+ "JZMMVMOURUTVUWVYV^U`TaRbPbNaM_M^N\\P[V[",
+ "MlOMWM RRFRXSZU[W[ R^[^F Rg[gPfNdMaM_N^O RiC]`",
+ "MWR[RM RU[O[ RUMOM ROTUT",
+ "MXRMRXSZU[ ROTUT",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RHT\\T",
+ "H[MMMXNZP[S[UZVXVM RHT\\T",
+ "I\\XMUMUPWRXTXWWYVZT[Q[OZNYMWMTNRPPPMMM RHU\\U",
+ /* // Phonetic Extensions Supplement (1D80-1DBF) */
+ "F^K[KFYFY[K[", /* U+1D80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1D90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Combining Diacritical Marks Supplement (1DC0-1DFF) */
+ "F^K[KFYFY[K[", /* U+1DC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Latin Extended Additional (1E00-1EFF) */
+ "I[MUWU RK[RFY[ RR`TaUcTeRfPeOcPaR`", /* U+1E00 A_CAP +RING */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RR`TaUcTeRfPeOcPaR`",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RR?Q@RAS@R?RA",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RN?M@NAO@N?NA",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RRbSaR`QaRbR`",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RRbSaR`QaRbR`",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RWaMa",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RWaMa",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR\\T]U_TaRbOb RT>QA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RR\\T]U_TaRbOb RTEQH",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RR?Q@RAS@R?RA",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RV?U@VAW@V?VA",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RRbSaR`QaRbR`",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RSbTaS`RaSbS`",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RWaMa",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RXaNa",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RQ\\S]T_SaQbNb", /* U+1E10 D_CAP CEDILLA */
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RS\\U]V_UaSbPb",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RVcR`Nc",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RWcS`Oc",
+ "H[MPTP RW[M[MFWF RM@W@ RP9S<",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMGWG RP>SA",
+ "H[MPTP RW[M[MFWF RM@W@ RT9Q<",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMGWG RT>QA",
+ "H[MPTP RW[M[MFWF RVcR`Nc",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RVcR`Nc",
+ "H[MPTP RW[M[MFWF RW`VaTbP`NaMb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RW`VaTbP`NaMb",
+ "H[MPTP RW[M[MFWF RR\\T]U_TaRbOb RN>O@QASAU@V>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RR\\T]U_TaRbOb RNEOGQHSHUGVE",
+ "HZTPMP RM[MFWF RR?Q@RAS@R?RA",
+ "MYOMWM RR[RISGUFWF RT?S@TAU@T?TA",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RM@W@", /* U+1E20 G_CAP MACRON */
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RMGWG",
+ "G]L[LF RLPXP RX[XF RR?Q@RAS@R?RA",
+ "H[M[MF RV[VPUNSMPMNNMO RM?L@MAN@M?MA",
+ "G]L[LF RLPXP RX[XF RRbSaR`QaRbR`",
+ "H[M[MF RV[VPUNSMPMNNMO RRbSaR`QaRbR`",
+ "G]L[LF RLPXP RX[XF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H[M[MF RV[VPUNSMPMNNMO RI?J@IAH@I?IA RQ?R@QAP@Q?QA",
+ "G]L[LF RLPXP RX[XF RL\\N]O_NaLbIb",
+ "H[M[MF RV[VPUNSMPMNNMO RM\\O]P_OaMbJb",
+ "G]L[LF RLPXP RX[XF RV`UbScQcObN`",
+ "H[M[MF RV[VPUNSMPMNNMO RV`UbScQcObN`",
+ "MWR[RF RW`VaTbP`NaMb",
+ "MWR[RM RRFQGRHSGRFRH RW`VaTbP`NaMb",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA RT9Q<",
+ "MWR[RM RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "G\\L[LF RX[OO RXFLR RT>QA", /* U+1E30 K_CAP ACUTE */
+ "IZN[NF RPSV[ RVMNU RPAMD",
+ "G\\L[LF RX[OO RXFLR RRbSaR`QaRbR`",
+ "IZN[NF RPSV[ RVMNU RRbSaR`QaRbR`",
+ "G\\L[LF RX[OO RXFLR RWaMa",
+ "IZN[NF RPSV[ RVMNU RWaMa",
+ "HYW[M[MF RRbSaR`QaRbR`",
+ "MXU[SZRXRF RSbTaS`RaSbS`",
+ "HYW[M[MF RH@R@ RRbSaR`QaRbR`",
+ "MXU[SZRXRF RM@W@ RSbTaS`RaSbS`",
+ "HYW[M[MF RWaMa",
+ "MXU[SZRXRF RXaNa",
+ "HYW[M[MF RVcR`Nc",
+ "MXU[SZRXRF RWcS`Oc",
+ "F^K[KFRUYFY[ RT>QA",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RTEQH",
+ "F^K[KFRUYFY[ RR?Q@RAS@R?RA", /* U+1E40 M_CAP DOT */
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RRFQGRHSGRFRH",
+ "F^K[KFRUYFY[ RRbSaR`QaRbR`",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RRbSaR`QaRbR`",
+ "G]L[LFX[XF RR?Q@RAS@R?RA",
+ "I\\NMN[ RNOONQMTMVNWPW[ RRFQGRHSGRFRH",
+ "G]L[LFX[XF RRbSaR`QaRbR`",
+ "I\\NMN[ RNOONQMTMVNWPW[ RRbSaR`QaRbR`",
+ "G]L[LFX[XF RWaMa",
+ "I\\NMN[ RNOONQMTMVNWPW[ RWaMa",
+ "G]L[LFX[XF RVcR`Nc",
+ "I\\NMN[ RNOONQMTMVNWPW[ RVcR`Nc",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W? RT9Q<",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF RT>QA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W? RN:O;N<M;N:N< RV:W;V<U;V:V<",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@ RP9S<", /* U+1E50 O_CAP MACRON */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG RP>SA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@ RT9Q<",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG RT>QA",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RT>QA",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RTEQH",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RR?Q@RAS@R?RA",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RRFQGRHSGRFRH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RR?Q@RAS@R?RA",
+ "KXP[PM RPQQORNTMVM RSFRGSHTGSFSH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RRbSaR`QaRbR`",
+ "KXP[PM RPQQORNTMVM RPbQaP`OaPbP`",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RM@W@ RRbSaR`QaRbR`",
+ "KXP[PM RPQQORNTMVM RNGXG RPbQaP`OaPbP`",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RWaMa",
+ "KXP[PM RPQQORNTMVM RUaKa",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RR?Q@RAS@R?RA", /* U+1E60 S_CAP DOT */
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RRFQGRHSGRFRH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RRbSaR`QaRbR`",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RRbSaR`QaRbR`",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RU>RA RM>N?M@L?M>M@",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RUERH RMENFMGLFMEMG",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RN>RAV> RR:Q;R<S;R:R<",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNERHVE RR?Q@RAS@R?RA",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RR?Q@RAS@R?RA RRbSaR`QaRbR`",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RRFQGRHSGRFRH RRbSaR`QaRbR`",
+ "JZLFXF RR[RF RR?Q@RAS@R?RA",
+ "MYOMWM RRFRXSZU[W[ RR?Q@RAS@R?RA",
+ "JZLFXF RR[RF RRbSaR`QaRbR`",
+ "MYOMWM RRFRXSZU[W[ RTbUaT`SaTbT`",
+ "JZLFXF RR[RF RWaMa",
+ "MYOMWM RRFRXSZU[W[ RYaOa",
+ "JZLFXF RR[RF RVcR`Nc", /* U+1E70 T_CAP +CARON */
+ "MYOMWM RRFRXSZU[W[ RXcT`Pc",
+ "G]LFLWMYNZP[T[VZWYXWXF RVbUaV`WaVbV` RNbMaN`OaNbN`",
+ "H[VMV[ RMMMXNZP[S[UZVY RVbUaV`WaVbV` RNbMaN`OaNbN`",
+ "G]LFLWMYNZP[T[VZWYXWXF RW`VaTbP`NaMb",
+ "H[VMV[ RMMMXNZP[S[UZVY RW`VaTbP`NaMb",
+ "G]LFLWMYNZP[T[VZWYXWXF RVcR`Nc",
+ "H[VMV[ RMMMXNZP[S[UZVY RVcR`Nc",
+ "G]LFLWMYNZP[T[VZWYXWXF RMAN@P?TAV@W? RT9Q<",
+ "H[VMV[ RMMMXNZP[S[UZVY RMHNGPFTHVGWF RT>QA",
+ "G]LFLWMYNZP[T[VZWYXWXF RM@W@ RN:O;N<M;N:N< RV:W;V<U;V:V<",
+ "H[VMV[ RMMMXNZP[S[UZVY RMGWG RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[KFR[YF RMAN@P?TAV@W?",
+ "JZMMR[WM RMHNGPFTHVGWF",
+ "I[KFR[YF RRbSaR`QaRbR`",
+ "JZMMR[WM RRbSaR`QaRbR`",
+ "F^IFN[RLV[[F RP>SA", /* U+1E80 W_CAP GRAVE */
+ "G]JMN[RQV[ZM RPESH",
+ "F^IFN[RLV[[F RT>QA",
+ "G]JMN[RQV[ZM RTEQH",
+ "F^IFN[RLV[[F RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]JMN[RQV[ZM RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "F^IFN[RLV[[F RR?Q@RAS@R?RA",
+ "G]JMN[RQV[ZM RRFQGRHSGRFRH",
+ "F^IFN[RLV[[F RRbSaR`QaRbR`",
+ "G]JMN[RQV[ZM RRbSaR`QaRbR`",
+ "H\\KFY[ RYFK[ RR?Q@RAS@R?RA",
+ "IZL[WM RLMW[ RRFQGRHSGRFRH",
+ "H\\KFY[ RYFK[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "IZL[WM RLMW[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I[RQR[ RKFRQYF RR?Q@RAS@R?RA",
+ "JZMMR[ RWMR[P`OaMb RRFQGRHSGRFRH",
+ "H\\KFYFK[Y[ RNAR>VA", /* U+1E90 Z_CAP CIRCUMFLEX */
+ "IZLMWML[W[ RNHREVH",
+ "H\\KFYFK[Y[ RRbSaR`QaRbR`",
+ "IZLMWML[W[ RRbSaR`QaRbR`",
+ "H\\KFYFK[Y[ RWaMa",
+ "IZLMWML[W[ RWaMa",
+ "H[M[MF RV[VPUNSMPMNNMO RWaMa",
+ "MYOMWM RRFRXSZU[W[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]JMN[RQV[ZM RRHPGOEPCRBTCUETGRH",
+ "JZMMR[ RWMR[P`OaMb RRHPGOEPCRBTCUETGRH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RWJYIZGYEWD",
+ "MYR[RISGUFWF RT?S@TAU@T?TA",
+ "MYR[RISGUFWF ROSUO",
+ "MYR[RISGUFWF ROLUL",
+ "E^J[JLKIMGPFZFSNVNXOYPZRZWYYXZV[R[PZOY",
+ "H[SMPMNNMOLQLWMYNZP[S[UZVYWWWQVOUNSMPLNKMINGPFTFVG",
+ "I[MUWU RK[RFY[ RRbSaR`QaRbR`", /* U+1EA0 A_CAP +DOT */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRbSaR`QaRbR`",
+ "I[MUWU RK[RFY[ RRAT?U=T;R:P:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRHTFUDTBRAPA",
+ "I[MUWU RK[RFY[ RU>X; RNAR>VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RUEXB RNHREVH",
+ "I[MUWU RK[RFY[ RO>L; RNAR>VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR ROELB RNHREVH",
+ "I[MUWU RK[RFY[ RNAR>VA RXAZ?[=Z;X:V:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH RXHZF[DZBXAVA",
+ "I[MUWU RK[RFY[ RNAR>VA RM<N;P:T<V;W:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH RMAN@P?TAV@W?",
+ "I[MUWU RK[RFY[ RNAR>VA RRbSaR`QaRbR`",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH RRbSaR`QaRbR`",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RT9Q<",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RT>QA",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RP9S<", /* U+1EB0 A_CAP BREVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RP>SA",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RP>R<S:R8P7N7",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RPERCSAR?P>N>",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RM<N;P:T<V;W:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RMAN@P?TAV@W?",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RRbSaR`QaRbR`",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RRbSaR`QaRbR`",
+ "H[MPTP RW[M[MFWF RRbSaR`QaRbR`",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RRbSaR`QaRbR`",
+ "H[MPTP RW[M[MFWF RRAT?U=T;R:P:",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RRHTFUDTBRAPA",
+ "H[MPTP RW[M[MFWF RMAN@P?TAV@W?",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMHNGPFTHVGWF",
+ "H[MPTP RW[M[MFWF RU>X; RNAR>VA",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RUEXB RNHREVH",
+ "H[MPTP RW[M[MFWF RO>L; RNAR>VA", /* U+1EC0 E_CAP CIRCUMFLEX_GRAVE */
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT ROELB RNHREVH",
+ "H[MPTP RW[M[MFWF RNAR>VA RXAZ?[=Z;X:V:",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH RXHZF[DZBXAVA",
+ "H[MPTP RW[M[MFWF RNAR>VA RM<N;P:T<V;W:",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH RMAN@P?TAV@W?",
+ "H[MPTP RW[M[MFWF RNAR>VA RRbSaR`QaRbR`",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH RRbSaR`QaRbR`",
+ "MWR[RF RRAT?U=T;R:P:",
+ "MWR[RM RRHTFUDTBRAPA",
+ "MWR[RF RRbSaR`QaRbR`",
+ "MWR[RM RRFQGRHSGRFRH RRbSaR`QaRbR`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RRbSaR`QaRbR`",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRbSaR`QaRbR`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RRAT?U=T;R:P:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRHTFUDTBRAPA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RU>X; RNAR>VA", /* U+1ED0 O_CAP CIRCUMFLEX_ACUTE */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUEXB RNHREVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RO>L; RNAR>VA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ ROELB RNHREVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA RXAZ?[=Z;X:V:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH RXHZF[DZBXAVA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA RM<N;P:T<V;W:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH RMAN@P?TAV@W?",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA RRbSaR`QaRbR`",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH RRbSaR`QaRbR`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RT>QA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RTEQH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RP>SA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RPESH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RRAT?U=T;R:P:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RRHTFUDTBRAPA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RWAVBTCPANBMC", /* U+1EE0 O_CAP HORN */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RWHVITJPHNIMJ",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RRbSaR`QaRbR`",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RRbSaR`QaRbR`",
+ "G]LFLWMYNZP[T[VZWYXWXF RRbSaR`QaRbR`",
+ "H[VMV[ RMMMXNZP[S[UZVY RRbSaR`QaRbR`",
+ "G]LFLWMYNZP[T[VZWYXWXF RRAT?U=T;R:P:",
+ "H[VMV[ RMMMXNZP[S[UZVY RRHTFUDTBRAPA",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RT>QA",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RTEQH",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RP>SA",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RPESH",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RRAT?U=T;R:P:",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RRHTFUDTBRAPA",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RWAVBTCPANBMC",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RWHVITJPHNIMJ",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RRbSaR`QaRbR`", /* U+1EF0 U_CAP HORN */
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RRbSaR`QaRbR`",
+ "I[RQR[ RKFRQYF RP>SA",
+ "JZMMR[ RWMR[P`OaMb RPESH",
+ "I[RQR[ RKFRQYF RRbSaR`QaRbR`",
+ "JZMMR[ RWMR[P`OaMb RVbWaV`UaVbV`",
+ "I[RQR[ RKFRQYF RRAT?U=T;R:P:",
+ "JZMMR[ RWMR[P`OaMb RRHTFUDTBRAPA",
+ "I[RQR[ RKFRQYF RMAN@P?TAV@W?",
+ "JZMMR[ RWMR[P`OaMb RMHNGPFTHVGWF",
+ "E\\PFP[ RJFJ[Z[",
+ "J[MMWM ROFOXPZR[ RX[VZUXUF",
+ "G]QFOGMJLMLWMYNZP[T[VZXXYVYTXPVMUL",
+ "H[QMONNOMQMWNYOZQ[S[UZVYWWWUVSURSQ",
+ "G[KFRT RYFRTPXOZM[KZJXKVMUOVPX",
+ "JZMMR[ RWMR[Q_PaNbLaK_L]N\\P]Q_",
+ /* // Greek Extended (1F00-1FFF) */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE", /* U+1F00 ALPHA_SMALL PSILI */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMHNHOGOE",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMEMGNHOH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMHNHOGOE",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMEMGNHOH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE RMAN@P?TAV@W?",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH RMAN@P?TAV@W?",
+ "G[MUWU RK[RFY[ RJHKHLGLE",
+ "G[MUWU RK[RFY[ RJEJGKHLH",
+ "?[MUWU RK[RFY[ RIELH RBHCHDGDE",
+ "?[MUWU RK[RFY[ RIELH RBEBGCHDH",
+ "?[MUWU RK[RFY[ RMEJH RBHCHDGDE",
+ "?[MUWU RK[RFY[ RMEJH RBEBGCHDH",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJHKHLGLE",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJEJGKHLH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RQHRHSGSE", /* U+1F10 EPSILON_SMALL PSILI */
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RQEQGRHSH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEWH RMHNHOGOE",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEWH RMEMGNHOH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RXEUH RMHNHOGOE",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RXEUH RMEMGNHOH",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "B[MPTP RW[M[MFWF REHFHGGGE",
+ "B[MPTP RW[M[MFWF REEEGFHGH",
+ ":[MPTP RW[M[MFWF RDEGH R=H>H?G?E",
+ ":[MPTP RW[M[MFWF RDEGH R=E=G>H?H",
+ ":[MPTP RW[M[MFWF RHEEH R=H>H?G?E",
+ ":[MPTP RW[M[MFWF RHEEH R=E=G>H?H",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE", /* U+1F20 ETA_SMALL PSILI */
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMHNHOGOE",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMEMGNHOH",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMHNHOGOE",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMEMGNHOH",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE RMAN@P?TAV@W?",
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH RMAN@P?TAV@W?",
+ "A]L[LF RLPXP RX[XF RDHEHFGFE",
+ "A]L[LF RLPXP RX[XF RDEDGEHFH",
+ "9]L[LF RLPXP RX[XF RCEFH R<H=H>G>E",
+ "9]L[LF RLPXP RX[XF RCEFH R<E<G=H>H",
+ "9]L[LF RLPXP RX[XF RGEDH R<H=H>G>E",
+ "9]L[LF RLPXP RX[XF RGEDH R<E<G=H>H",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDHEHFGFE",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDEDGEHFH",
+ "MXRMRXSZU[ RQHRHSGSE", /* U+1F30 IOTA_SMALL PSILI */
+ "MXRMRXSZU[ RQEQGRHSH",
+ "MXRMRXSZU[ RTEWH RMHNHOGOE",
+ "MXRMRXSZU[ RTEWH RMEMGNHOH",
+ "MXRMRXSZU[ RXEUH RMHNHOGOE",
+ "MXRMRXSZU[ RXEUH RMEMGNHOH",
+ "MXRMRXSZU[ RQHRHSGSE RMAN@P?TAV@W?",
+ "MXRMRXSZU[ RQEQGRHSH RMAN@P?TAV@W?",
+ "GWR[RF RJHKHLGLE",
+ "GWR[RF RJEJGKHLH",
+ "?WR[RF RIELH RBHCHDGDE",
+ "?WR[RF RIELH RBEBGCHDH",
+ "?WR[RF RMEJH RBHCHDGDE",
+ "?WR[RF RMEJH RBEBGCHDH",
+ "DWR[RF RFAG@I?MAO@P? RJHKHLGLE",
+ "DWR[RF RFAG@I?MAO@P? RJEJGKHLH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RQHRHSGSE", /* U+1F40 O_SMALL PSILI */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RQEQGRHSH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEWH RMHNHOGOE",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEWH RMEMGNHOH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RXEUH RMHNHOGOE",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RXEUH RMEMGNHOH",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF REHFHGGGE",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF REEEGFHGH",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RDEGH R=H>H?G?E",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RDEGH R=E=G>H?H",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH R=H>H?G?E",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH R=E=G>H?H",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQHRHSGSE", /* U+1F50 UPSILON_SMALL PSILI */
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQEQGRHSH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEWH RMHNHOGOE",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEWH RMEMGNHOH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RXEUH RMHNHOGOE",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RXEUH RMEMGNHOH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQHRHSGSE RMAN@P?TAV@W?",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQEQGRHSH RMAN@P?TAV@W?",
+ "F^K[KFYFY[K[",
+ "@[RQR[ RKFRQYF RCECGDHEH",
+ "F^K[KFYFY[K[",
+ "8[RQR[ RKFRQYF RBEEH R;E;G<H=H",
+ "F^K[KFYFY[K[",
+ "8[RQR[ RKFRQYF RFECH R;E;G<H=H",
+ "F^K[KFYFY[K[",
+ "=[RQR[ RKFRQYF R?A@@B?FAH@I? RCECGDHEH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE", /* U+1F60 OMEGA_SMALL PSILI */
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMHNHOGOE",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMEMGNHOH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMHNHOGOE",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMEMGNHOH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE RMAN@P?TAV@W?",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH RMAN@P?TAV@W?",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCHDHEGEE",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCECGDHEH",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;H<H=G=E",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;E;G<H=H",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;H<H=G=E",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;E;G<H=H",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCHDHEGEE",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCECGDHEH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH", /* U+1F70 ALPHA_SMALL ACUTE */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEQH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEQH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH",
+ "MXRMRXSZU[ RTEQH",
+ "MXRMRXSZU[ RTEQH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEQH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE RR`RcSdTd", /* U+1F80 ALPHA_SMALL PSILI */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMHNHOGOE RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMEMGNHOH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMHNHOGOE RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMEMGNHOH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE RMAN@P?TAV@W? RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH RMAN@P?TAV@W? RR`RcSdTd",
+ "G[MUWU RK[RFY[ RJHKHLGLE RR`RcSdTd",
+ "G[MUWU RK[RFY[ RJEJGKHLH RR`RcSdTd",
+ "?[MUWU RK[RFY[ RIELH RBHCHDGDE RR`RcSdTd",
+ "?[MUWU RK[RFY[ RIELH RBEBGCHDH RR`RcSdTd",
+ "?[MUWU RK[RFY[ RMEJH RBHCHDGDE RR`RcSdTd",
+ "?[MUWU RK[RFY[ RMEJH RBEBGCHDH RR`RcSdTd",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJHKHLGLE RR`RcSdTd",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJEJGKHLH RR`RcSdTd",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE RN`NcOdPd", /* U+1F90 ETA_SMALL PSILI */
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMHNHOGOE RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMEMGNHOH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMHNHOGOE RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMEMGNHOH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE RMAN@P?TAV@W? RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH RMAN@P?TAV@W? RN`NcOdPd",
+ "N]L[LF RLPXP RX[XF RR`RcSdTd",
+ "A]L[LF RLPXP RX[XF RDEDGEHFH RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RCEFH R<H=H>G>E RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RCEFH R<E<G=H>H RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RGEDH R<H=H>G>E RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RGEDH R<E<G=H>H RR`RcSdTd",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDHEHFGFE RR`RcSdTd",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDEDGEHFH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE RR`RcSdTd", /* U+1FA0 OMEGA_SMALL PSILI */
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMHNHOGOE RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMEMGNHOH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMHNHOGOE RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMEMGNHOH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE RMAN@P?TAV@W? RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH RMAN@P?TAV@W? RR`RcSdTd",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCHDHEGEE RR`RcSdTd",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCECGDHEH RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;H<H=G=E RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;E;G<H=H RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;H<H=G=E RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;E;G<H=H RR`RcSdTd",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCHDHEGEE RR`RcSdTd",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCECGDHEH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RNEOGQHSHUGVE", /* U+1FB0 ALPHA_SMALL BREVE */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RMGWG",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RPESH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH RR`RcSdTd",
+ "F^K[KFYFY[K[",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RMHNGPFTHVGWF",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RMHNGPFTHVGWF RR`RcSdTd",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V>",
+ "I[MUWU RK[RFY[ RM@W@",
+ "G[MUWU RK[RFY[ RIELH",
+ "G[MUWU RK[RFY[ RMEJH",
+ "I[MUWU RK[RFY[ RR`RcSdTd",
+ "NVQHRHSGSE",
+ "NVR`RcSdTd",
+ "NVQHRHSGSE",
+ "KZMHNGPFTHVGWF", /* U+1FC0 TILDE */
+ "LXMCNBPATCVBWA RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I\\NMN[ RNOONQMTMVNWPWb RPESH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH RN`NcOdPd",
+ "F^K[KFYFY[K[",
+ "I\\NMN[ RNOONQMTMVNWPWb RMHNGPFTHVGWF",
+ "I\\NMN[ RNOONQMTMVNWPWb RMHNGPFTHVGWF RN`NcOdPd",
+ "B[MPTP RW[M[MFWF RDEGH",
+ "B[MPTP RW[M[MFWF RHEEH",
+ "A]L[LF RLPXP RX[XF RCEFH",
+ "A]L[LF RLPXP RX[XF RGEDH",
+ "G]L[LF RLPXP RX[XF RR`RcSdTd",
+ "JZTEWH RMHNHOGOE",
+ "JZXEUH RMHNHOGOE",
+ "NVQHRHSGSE RMAN@P?TAV@W?",
+ "MXRMRXSZU[ RNEOGQHSHUGVE", /* U+1FD0 IOTA_SMALL BREVE */
+ "MXRMRXSZU[ RMGWG",
+ "MXRMRXSZU[ RNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "MXRMRXSZU[ RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "MXRMRXSZU[ RMHNGPFTHVGWF",
+ "MXRMRXSZU[ RMCNBPATCVBWA RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "MWR[RF RN>O@QASAU@V>",
+ "MWR[RF RM@W@",
+ "GWR[RF RIELH",
+ "GWR[RF RMEJH",
+ "F^K[KFYFY[K[",
+ "JZTEWH RMEMGNHOH",
+ "JZXEUH RMEMGNHOH",
+ "NVQEQGRHSH RMAN@P?TAV@W?",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNEOGQHSHUGVE", /* U+1FE0 UPSILON_SMALL BREVE */
+ "H[MMMXNZP[S[UZVYWWWPVNUM RMGWG",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX RQHRHSGSE",
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX RQEQGRHSH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RMHNGPFTHVGWF",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RMCNBPATCVBWA RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I[RQR[ RKFRQYF RN>O@QASAU@V>",
+ "I[RQR[ RKFRQYF RM@W@",
+ "@[RQR[ RKFRQYF RBEEH",
+ "@[RQR[ RKFRQYF RFECH",
+ "A\\L[LFTFVGWHXJXMWOVPTQLQ RDEDGEHFH",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "NVPESH",
+ "F^K[KFYFY[K[", /* U+1FF0 */
+ "F^K[KFYFY[K[",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RPESH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH RR`RcSdTd",
+ "F^K[KFYFY[K[",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RMHNGPFTHVGWF",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RMHNGPFTHVGWF RR`RcSdTd",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RDEGH",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH",
+ "F^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RR`RcSdTd",
+ "NVTEQH",
+ "NVQEQGRHSH",
+ "F^K[KFYFY[K[",
+ /* // General Punctuation (2000-206F) */
+ "F^", /* U+2000 SPACE_EM */
+ "LX",
+ "F^",
+ "LX",
+ "NV",
+ "OU",
+ "PT",
+ "H\\",
+ "MW",
+ "PT",
+ "QS",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "LXOTUT", /* U+2010 HYPHEN */
+ "LXOTUT",
+ "H\\JRZR",
+ "LXVTNT",
+ "F^IT[T",
+ "F^IT[T",
+ "H\\ODOb RUDUb",
+ "JZJbZb RJ]Z]",
+ "MWQGQFRDSC",
+ "MWSFSGRIQJ",
+ "MWSZS[R]Q^",
+ "MWQFQGRISJ",
+ "JZUGUFVDWC RMGMFNDOC",
+ "JZOFOGNIMJ RWFWGVIUJ",
+ "JZOZO[N]M^ RWZW[V]U^",
+ "JZUFUGVIWJ RMFMGNIOJ",
+ "I[MMWM RRFRb", /* U+2020 DEI_SMALL */
+ "I[M[W[ RMMWM RRFRb",
+ "E_PQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ",
+ "E_PPPV RQQQU RRQRU RSSUS RSRST ROPUSOV RVSOWOOVS",
+ "MWRYSZR[QZRYR[",
+ "MaRYSZR[QZRYR[ R\\Y]Z\\[[Z\\Y\\[",
+ "MkRYSZR[QZRYR[ R\\Y]Z\\[[Z\\Y\\[ RfYgZf[eZfYf[",
+ "JZRRQSRTSSRRRT",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "FjJ[ZF RMFOGPIOKMLKKJIKGMF RcUeVfXeZc[aZ`XaVcU RYZZXYVWUUVTXUZW[YZ", /* U+2030 PERMILLE */
+ "FvJ[ZF RMFOGPIOKMLKKJIKGMF RcUeVfXeZc[aZ`XaVcU RoUqVrXqZo[mZlXmVoU RYZZXYVWUUVTXUZW[YZ",
+ "MWTFQL",
+ "JZQFNL RWFTL",
+ "G]NFKL RTFQL RZFWL",
+ "MWPFSL",
+ "JZSFVL RMFPL",
+ "G]VFYL RPFSL RJFML",
+ "LXVcR`Nc",
+ "KYUMOSUY",
+ "KYOMUSOY",
+ "E_LMXY RXMLY RKRLSKTJSKRKT RRYSZR[QZRYR[ RRKSLRMQLRKRM RYRZSYTXSYRYT",
+ "MaRYSZR[QZRYR[ RRSQGRFSGRSRF R\\Y]Z\\[[Z\\Y\\[ R\\S[G\\F]G\\S\\F",
+ "I[QFQS RQYRZQ[PZQYQ[ RQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS RMGOFTFVGWIWKVMUNSORPQRQS",
+ "E_JGZG",
+ "OUb`aa^c\\dYeTfPfKeHdFcCaB`",
+ "OUBFCEFCHBKAP@T@YA\\B^CaEbF", /* U+2040 TIE */
+ "E_N_VW RV_R[",
+ "CaKRKW RRFRK RYRYW RFUKWPU RH[KWN[ RMIRKWI ROORKUO RTUYW^U RV[YW\\[",
+ "LXOTUT",
+ "G][EI`",
+ "KYQSVS RVbQbQDVD",
+ "KYSSNS RNbSbSDND",
+ "ImQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS RcYdZc[bZcYc[ R_GaFfFhGiIiKhMgNeOdPcRcS",
+ "IeQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS R`YaZ`[_Z`Y`[ R`S_G`FaG`S`F",
+ "MiRYSZR[QZRYR[ RRSQGRFSGRSRF R_Y`Z_[^Z_Y_[ R[G]FbFdGeIeKdMcNaO`P_R_S",
+ "KYNMVMPb",
+ "G^NMN[ RUMUXVZX[ RJMWMYNZP",
+ "H\\NQNU RWPWV RPVPPOQOUPV RQPPPNQMSNUPVQVQP",
+ "H\\VQVU RMPMV RTVTPUQUUTV RSPTPVQWSVUTVSVSP",
+ "JZR[RV RWXRVMX RURRVOR",
+ "MWQZQ[R]S^ RRNQORPSORNRP",
+ "OUBFCEFCHBKAP@T@YA\\B^CaEbF Rb`aa^c\\dYeTfPfKeHdFcCaB`", /* U+2050 TIE *TIE */
+ "JZRFRK RMIRKWI ROORKUO RRFRK RWIRKMI RUORKOO",
+ "JZM^WB RNFOGNHMGNFNH RVYWZV[UZVYV[",
+ "E_JSKRNQQRSTVUYTZS",
+ ">fB^B]C[EZOZQYRWSYUZ_Za[b]b^",
+ "E_JSZS RR[RK RLMXY RXMLY",
+ "E_LRMSLTKSLRLT RXYYZX[WZXYX[ RXKYLXMWLXKXM",
+ "D`KFHL RQFNL RWFTL R]FZL",
+ "E_KRLSKTJSKRKT RRYSZR[QZRYR[ RRKSLRMQLRKRM RYRZSYTXSYRYT",
+ "E_LXMYLZKYLXLZ RLLMMLNKMLLLN RRRSSRTQSRRRT RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "MWRYSZR[QZRYR[ RRNSORPQORNRP",
+ "E_KRLSKTJSKRKT RRYSZR[QZRYR[ RRKSLRMQLRKRM RYRZSYTXSYRYT",
+ "E_JSZS RR[RK RLXMYLZKYLXLZ RLLMMLNKMLLLN RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "CaR\\S]R^Q]R\\R^ RRRSSRTQSRRRT RRHSIRJQIRHRJ",
+ "CaR^S_R`Q_R^R` RRVSWRXQWRVRX RRNSORPQORNRP RRFSGRHQGRFRH",
+ "OU",
+ "RR", /* U+2060 0 */
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ /* // Subscripts and Superscripts (2070-209F) */
+ "JZQ@S@UAVDVJUMSNQNOMNJNDOAQ@", /* U+2070 ^DIGIT_0_SMALL */
+ "NVRDRN RR=Q>R?S>R=R?",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "JZUFUN RQ@NJWJ",
+ "JZV@O@NFPESEUFVHVKUMSNPNNM",
+ "JZNHOFQESEUFVHVKUMSNQNOMNKNFOCPAR@U@",
+ "JZM@W@PN",
+ "JZQFOENCOAQ@S@UAVCUESFQFOGNINKOMQNSNUMVKVIUGSF",
+ "JZVFUHSIQIOHNFNCOAQ@S@UAVCVHUKTMRNON",
+ "I[LHXH RRBRN",
+ "I[LHXH",
+ "I[LJXJ RLFXF",
+ "MWT=S>RAQFQJROSRTS",
+ "MWP=Q>RASFSJROQRPS",
+ "KZODON ROEQDSDUEVGVN",
+ "JZQSSSUTVWV]U`SaQaO`N]NWOTQS", /* U+2080 .DIGIT_0_SMALL */
+ "JZVaNa RNVPURSRa",
+ "JZNTPSSSUTVVVXUZNaVa",
+ "JZNSVSRXSXUYV[V^U`SaPaN`",
+ "JZUYUa RQSN]W]",
+ "JZVSOSNYPXSXUYV[V^U`SaPaN`",
+ "JZN[OYQXSXUYV[V^U`SaQaO`N^NYOVPTRSUS",
+ "JZMSWSPa",
+ "JZQYOXNVOTQSSSUTVVUXSYQYOZN\\N^O`QaSaU`V^V\\UZSY",
+ "JZVYU[S\\Q\\O[NYNVOTQSSSUTVVV[U^T`RaOa",
+ "I[L[X[ RRURa",
+ "I[L[X[",
+ "I[L]X] RLYXY",
+ "MWTPSQRTQYQ]RbSeTf",
+ "MWPPQQRTSYS]RbQePf",
+ "RR",
+ "KZOXQWSWUXVZVa RV`TaQaO`N^O\\Q[V[", /* U+2090 .A_TINY */
+ "LYV`TaRaP`O^OZPXRWSWUXVZV[O\\",
+ "KYQaO`N^NZOXQWSWUXVZV^U`SaQa",
+ "KYNWVa RVWNa",
+ "LYOXQWSWUXVZV^U`SaRaP`O^O]V\\",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Currency Symbols (20A0-20CF) */
+ "F[XMPMP[X[ RTGRFNFLGKHJJJPKRLSNTUT", /* U+20A0 ECU */
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RSBG_ RZBN_",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR[RM RRQSOTNVMXM",
+ "HZTPMP RM[MFWF RJVRV",
+ "H[LMTM RL[W[ RO[OIPGRFUFWG RLSTS",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RWHM`",
+ "G]L[LFX[XF RHV\\V RHP\\P",
+ "GyL[LFTFVGWHXJXMWOVPTQLQ R^MfM RaFaXbZd[f[ RlZn[r[tZuXuWtUrToTmSlQlPmNoMrMtN",
+ "GmX[QQ RL[LFTFVGWHXJXMWOVPTQLQ R`Zb[f[hZiXiWhUfTcTaS`Q`PaNcMfMhN",
+ "F^IFN[RLV[[F RHV\\V RHP\\P",
+ "D`I[IFOFRGTIULUR RONOUPXRZU[[[[F",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RRHZH RXaNa",
+ "F[HSQS RHNTN RWYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "G\\L[LF RX[OO RXFLR RLOTO",
+ "JZLFXF RR[RF ROVUR ROPUL",
+ "IoK[RFY[K[ R`b`QaObNdMgMiNjOkQkWjYiZg[d[bZ`X",
+ "G]ITJSLRNSOTQUSTXOYLYIXGVFUFSGRIRLSOXTYVYWXYWZT[", /* U+20B0 PENNY_GERMAN */
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RHL\\L",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RRCR^",
+ "I[K[RFY[ RHV\\V RHP\\P",
+ "H\\XZU[P[NZMYLWLUMSNRPQTPVOWNXLXJWHVGTFOFLG RRCR^",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRJR^",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+20C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Combining Diacritical Marks For Symbols (20D0-20FF) */
+ "F^K[KFYFY[K[", /* U+20D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+20E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+20F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Letterlike Symbols (2100-214F) */
+ "F^K[KFYFY[K[", /* U+2100 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2110 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2120 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2130 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2140 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Number Forms (2150-218F) */
+ "F^K[KFYFY[K[", /* U+2150 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2160 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2170 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2180 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Arrows (2190-21FF) */
+ "E_ZSJS RNWJSNO", /* U+2190 !ARROW_E */
+ "E_R[RK RNORKVO",
+ "E_JSZS RVWZSVO",
+ "E_RKR[ RVWR[NW",
+ "E_JSZS RVWZSVO RNOJSNW",
+ "E_R[RK RNORKVO RVWR[NW",
+ "E_KLYZ RRLKLKS",
+ "E_YLKZ RRLYLYS",
+ "E_YZKL RRZYZYS",
+ "E_KZYL RRZKZKS",
+ "E_ZSJS RRWVO RNOJSNW",
+ "E_JSZS RRONW RVWZSVO",
+ "E_JWJQPQ RJQMTOUQTSRUQWRZU",
+ "E_ZWZQTQ RZQWTUUSTQROQMRJU",
+ "E_ZSJS RTOPSTW RNWJSNO",
+ "E_R[RK RNURQVU RNORKVO",
+ "E_JSZS RPOTSPW RVWZSVO", /* U+21A0 ARROW_DBL_E */
+ "E_RKR[ RVQRUNQ RVWR[NW",
+ "E_JSVS RZOVSZW RNWJSNO",
+ "E_ZSNS RJONSJW RVWZSVO",
+ "E_ZOZW RJSZS RNWJSNO",
+ "E_R[RK RV[N[ RNORKVO",
+ "E_JOJW RZSJS RVWZSVO",
+ "E_RKR[ RNKVK RVWR[NW",
+ "E_N[V[ RR[RK RNWR[VW RNORKVO",
+ "E_NWJSNO RJSWSYRZPYNWM",
+ "E_VWZSVO RZSMSKRJPKNMM",
+ "E_NWJSNO RJSWSYRZPYNWMUNTPTW",
+ "E_VWZSVO RZSMSKRJPKNMMONPPPW",
+ "E_PUJUJO RZWZQTQ RZQWTUUSTQROQMRJU",
+ "E_JSZS RTOPW RNOJSNW RVWZSVO",
+ "E_PWR[VY ROKLTVOR[",
+ "E_V[VOJO RNSJONK", /* U+21B0 !ARROW_E_N */
+ "E_N[NOZO RVSZOVK",
+ "E_VKVWJW RNSJWN[",
+ "E_NKNWZW RVSZWV[",
+ "E_JOVOV[ RZWV[RW",
+ "E_VKVWJW RNSJWN[",
+ "E_OQKUGQ RYRYQXNVLSKQKNLLNKQKU",
+ "E_UQYU]Q RKRKQLNNLQKSKVLXNYQYU",
+ "E_KLYZ RKHYH RRLKLKS",
+ "E_JWZW RJKJS RZSZ[ RZOJO RNSJONK RV[ZWVS",
+ "E_[KUKUQ RMMLNKQKSLVNXQYSYVXXVYSYQXNUK",
+ "E_IKOKOQ RWMXNYQYSXVVXSYQYNXLVKSKQLNOK",
+ "E_ZSJSNO",
+ "E_ZSJSNW",
+ "E_R[RKVO",
+ "E_R[RKNO",
+ "E_JSZSVO", /* U+21C0 HARPOON_UP_E */
+ "E_JSZSVW",
+ "E_RKR[VW",
+ "E_RKR[NW",
+ "E_ZWJW RJOZO RVSZOVK RN[JWNS",
+ "E_N[NK RVKV[ RJONKRO RRWV[ZW",
+ "E_JWZW RZOJO RNSJONK RV[ZWVS",
+ "E_ZWJW RJOZO RN[JWNSJONK",
+ "E_N[NK RVKV[ RJONKROVKZO",
+ "E_JWZW RZOJO RV[ZWVSZOVK",
+ "E_VKV[ RN[NK RZWV[RWN[JW",
+ "E_JVZVVZ RZPJPNL",
+ "E_ZVJVNZ RJPZPVL",
+ "E_ZPMP RZVMV RRXVN ROXJSON",
+ "E_MVWV RMPWP RSNQX ROXJSON RUNZSUX",
+ "E_JVWV RJPWP RRNNX RUNZSUX",
+ "E_ZPMP RZVMV ROXJSON", /* U+21D0 *ARROW_E_DBL */
+ "E_ONO[ RUNU[ RWPRKMP",
+ "E_JVWV RJPWP RUNZSUX",
+ "E_UXUK ROXOK RMVR[WV",
+ "E_MVWV RMPWP ROXJSON RUNZSUX",
+ "E_OXON RUXUN RMVR[WV RWPRKMP",
+ "E_[XOL RW\\KP RSLKLKT",
+ "E_IXUL RM\\YP RQLYLYT",
+ "E_INUZ RMJYV RQZYZYR",
+ "E_[NOZ RWJKV RSZKZKR",
+ "E_ZXOX RZSJS RZNON RQLJSQZ",
+ "E_JXUX RJSZS RJNUN RSLZSSZ",
+ "E_NWJSNO RZUWQTUQQNULSJS",
+ "E_VWZSVO RJUMQPUSQVUXSZS",
+ "E_NXVX RNSVS RR[RK RNORKVO",
+ "E_VNNN RVSNS RRKR[ RVWR[NW",
+ "E_ZSWS RSSQS RMSJS RNOJSNW", /* U+21E0 *ARROW_E_DASHED */
+ "E_R[RX RRTRR RRNRK RNORKVO",
+ "E_JSMS RQSSS RWSZS RVWZSVO",
+ "E_RKRN RRRRT RRXR[ RVWR[NW",
+ "E_ZSJS RJWJO RNOJSNW",
+ "E_JSZS RZOZW RVWZSVO",
+ "E_ZPZVOVOXJSONOPZP",
+ "E_U[O[OPMPRKWPUPU[",
+ "E_JVJPUPUNZSUXUVJV",
+ "E_OKUKUVWVR[MVOVOK",
+ "E_U[O[OWUWU[ RUSOSOPMPRKWPUPUS",
+ "E_W[M[MWOWOPMPRKWPUPUWWWW[",
+ "E_ONUN RW[M[MWOWOPMPRKWPUPUWWWW[",
+ "E_RKR[ RW[M[MWOWOPMPRKWPUPUWWWW[",
+ "E_PPMPRKWPTP RU[O[OSMSRNWSUSU[",
+ "E_PPMPRKWPTP RW[M[MWOWOSMSRNWSUSUWWWW[",
+ "E_JNNNNPUPUNZSUXUVNVNXJXJN", /* U+21F0 ARROW_E_WALL_WHITE */
+ "E_Z[NO RZKJKJ[ RUONONV",
+ "E_JKVW RJ[Z[ZK ROWVWVP",
+ "E_MPRKWPUPUVWVR[MVOVOPMP",
+ "E_JSZS RVWZSVO RTRTTSVQWOWMVLTLRMPOOQOSPTR",
+ "E_V[VK RNKN[ RZOVKRO RRWN[JW",
+ "E_J[Z[ RJKZK RZSJS RVGZKVOZSVWZ[V_",
+ "E_ZSJS RTWTO RNOJSNW",
+ "E_JSZS RPOPW RVWZSVO",
+ "E_JSZS RRORW RNOJSNW RVWZSVO",
+ "E_ZSJS RWWWO RRWRO RNOJSNW",
+ "E_JSZS RMOMW RRORW RVWZSVO",
+ "E_JSZS RPOPW RTOTW RNWJSNO RVWZSVO",
+ "E_NSZS RNWNOJSNW",
+ "E_VSJS RVWVOZSVW",
+ "E_NSVS RNWJSNONW RVWVOZSVW",
+ /* // Mathematical Operators (2200-22FF) */
+ "I[MLWL RKFR[YF", /* U+2200 =A_CAP */
+ "HZVHUGSFPFNGMHLKLVMYNZP[S[UZVY",
+ "H[WOVNTMPMNNMOLQLWMYNZP[S[UZVYWWWJVHUGSFOFMG",
+ "I\\WPPP RM[W[WFMF",
+ "I\\WQPQ RMFWFW[M[ RXCL`",
+ "C`G[\\F ROFTFXHZJ\\N\\SZWXYT[O[KYIWGSGNIJKHOF",
+ "I[K[RFY[K[",
+ "I[YFR[KFYF",
+ "C`\\QGQ R\\GOGKIIKGOGSIWKYO[\\[",
+ "C`[CH^ R\\QGQ R\\GOGKIIKGOGSIWKYO[\\[",
+ "E_JSZS RZZPZMYKWJTJRKOMMPLZL",
+ "DaHP]P RHZUZYX[V]R]N[JYHUFHF",
+ "DaI^\\C RHP]P RHZUZYX[V]R]N[JYHUFHF",
+ "E_ZSJS RJZTZWYYWZTZRYOWMTLJL",
+ "E_M[WQ RMZWP RMYWO RMXWN RMWWM RMVWL RMUWK RMTVK RMSUK RMRTK RMQSK RMPRK RMOQK RMNPK RMMOK RMLNK RN[WR RO[WS RP[WT RQ[WU RR[WV RS[WW RT[WX RU[WY RV[WZ RM[MKWKW[M[",
+ "E_Z`ZFJFJ`",
+ "E_ZFZ`J`JF", /* U+2210 ~PI_CAP_HUGE */
+ "E_Z`I`TSIF[F",
+ "E_JSZS",
+ "E_ZWJW RROR_ RJKZK",
+ "E_JSZS RR[RK RRDQERFSERDRF",
+ "G][EI`",
+ "KYID[_",
+ "E_KOYW RR[RK RYOKW",
+ "E_PQRPTQUSTURVPUOSPQ",
+ "E_PQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ",
+ "IbMTQSS[bB",
+ "IbMTQSS[bB RN@V@RESEUFVHVKUMSNPNNM",
+ "IbMTQSS[bB RUFUN RQ@NJWJ",
+ "E_XPWPUQQUOVMULSMQOPQQUUWVXV",
+ "E_TQVPXQYSXUVVTUPQNPLQKSLUNVPUTQ",
+ "E_JKJ[Z[",
+ "E_ZKJ[Z[", /* U+2220 ANGLE */
+ "E_ZKJ[Z[ RPSRUTZT]",
+ "E_Z[JSZK RSYTWUSTOSM",
+ "H\\RbRD",
+ "H\\NUVQ RRDRb",
+ "H\\ODOb RUDUb",
+ "H\\LVXP RODOb RUDUb",
+ "E_[[RKI[",
+ "E_IKR[[K",
+ "E_Z[ZQXMTKPKLMJQJ[",
+ "E_JKJULYP[T[XYZUZK",
+ "H\\L]M_O`Q_R]RISGUFWGXI",
+ "D`H]I_K`M_N]NIOGQFSGTI RP]Q_S`U_V]VIWGYF[G\\I",
+ "@dD]E_G`I_J]JIKGMFOGPI RL]M_O`Q_R]RISGUFWGXI RT]U_W`Y_Z]ZI[G]F_G`I",
+ "H\\L]M_O`Q_R]RISGUFWGXI RRMUNWPXSWVUXRYOXMVLSMPONRM",
+ "D`H]I_K`M_N]NIOGQFSGTI RP]Q_S`U_V]VIWGYF[G\\I RVMYN[P\\S[VYXVYNYKXIVHSIPKNNMVM",
+ "@dD]E_G`I_J]JIKGMFOGPI RL]M_O`Q_R]RISGUFWGXI RT]U_W`Y_Z]ZI[G]F_G`I RZM]N_P`S_V]XZYJYGXEVDSEPGNJMZM", /* U+2230 INTEGRAL_TPL_CONTOUR */
+ "H\\URXU[R RLSMPONRMUNWPXSXU RL]M_O`Q_R]RISGUFWGXI",
+ "H\\UQXT[Q RL]M_O`Q_R]RISGUFWGXI RLSMPONRMUNWPXSWVUXRYOXMVLS",
+ "H\\UUXR[U RL]M_O`Q_R]RISGUFWGXI RLSMPONRMUNWPXSWVUXRYOXMVLS",
+ "E_KXLYKZJYKXKZ RRLSMRNQMRLRN RYXZYYZXYYXYZ",
+ "E_YNXMYLZMYNYL RRZQYRXSYRZRX RKNJMKLLMKNKL",
+ "JZRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "E_LXMYLZKYLXLZ RLLMMLNKMLLLN RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "E_JSZS RRFQGRHSGRFRH",
+ "E_JSTS RYXZYYZXYYXYZ RYLZMYNXMYLYN",
+ "E_JSZS RLXMYLZKYLXLZ RLLMMLNKMLLLN RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "E_JSKRNQQRSTVUYTZS RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "E_JSKRNQQRSTVUYTZS",
+ "E_ZSYRVQSRQTNUKTJS",
+ "E_WPYQZSYUWVTUPQMPKQJSKUMV",
+ "E_JSKNLLNKPLQNSXTZV[XZYXZS",
+ "E_RKSLTOSRQTPWQZR[", /* U+2240 WREATH_PRODUCT */
+ "E_JSKRNQQRSTVUYTZS RVKN[",
+ "E_ZPJP RZVYWVXSWQUNTKUJV",
+ "E_JVZV RJPKONNQOSQVRYQZP",
+ "E_JVZV RJPKONNQOSQVRYQZP RVKN[",
+ "E_JYZY RJSZS RJMKLNKQLSNVOYNZM",
+ "E_JYZY RJSZS RUPO\\ RJMKLNKQLSNVOYNZM",
+ "E_JYZY RJSZS RJMKLNKQLSNVOYNZM RXGL_",
+ "E_JVKUNTQUSWVXYWZV RJPKONNQOSQVRYQZP",
+ "E_JVKUNTQUSWVXYWZV RJPKONNQOSQVRYQZP RVKN[",
+ "E_JYZY RJSKRNQQRSTVUYTZS RJMKLNKQLSNVOYNZM",
+ "E_JYKXNWQXSZV[YZZY RJSKRNQQRSTVUYTZS RJMKLNKQLSNVOYNZM",
+ "E_ZYJY RZSJS RZMYLVKSLQNNOKNJM",
+ "E_JXLWPVTVXWZX RJNLOPPTPXOZN",
+ "E_JVNVNWOYQZSZUYVWVVZV RJPNPNOOMQLSLUMVOVPZP",
+ "E_ZVJV RJPNPNOOMQLSLUMVOVPZP",
+ "E_JPZP RZVJV RRHQIRJSIRHRJ", /* U+2250 EQUAL DOT */
+ "E_JPZP RZVJV RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "E_JPZP RZVJV RKJLKKLJKKJKL RYZZ[Y\\X[YZY\\",
+ "E_ZPJP RJVZV RYJXKYLZKYJYL RKZJ[K\\L[KZK\\",
+ "AcNP^P R^VNV RGVHWGXFWGVGX RGNHOGPFOGNGP",
+ "AcVPFP RFVVV R]V\\W]X^W]V]X R]N\\O]P^O]N]P",
+ "E_JPZP RZVJV RPQRPTQUSTURVPUOSPQ",
+ "E_JPZP RZVJV RRJPIOGPERDTEUGTIRJ",
+ "E_JPZP RZVJV RNJOHQGSGUHVJ",
+ "E_JPZP RZVJV RNJRGVJ",
+ "E_JPZP RZVJV RNGRJVG",
+ "E_JPZP RZVJV RRATGOCUCPGRA",
+ "E_JPZP RZVJV RR?NJVJR?",
+ "E_JPZP RYC]C RZVJV R]?[@ZBZJ RM?MJKJIIHGHEICKBMB RQFVFVCUBRBQCQIRJUJ",
+ "E_JPZP RZVJV RMBMJ RMCNBQBRCRJ RRCSBVBWCWJ",
+ "E_JPZP RZVJV RRHSIRJQIRHRJ RN@P?S?U@VBUDSE",
+ "E_JPZP RTMPY RZVJV", /* U+2260 EQUAL_SLASH */
+ "E_JYZY RJSZS RJMZM",
+ "E_JYZY RJSZS RJMZM RXGL_",
+ "E_J\\Z\\ RJPZP RJJZJ RZVJV",
+ "E_ZZJZ RZVJPZJ",
+ "E_JZZZ RJVZPJJ",
+ "E_J]Z] RZWJW RZSJMZG",
+ "E_Z]J] RJWZW RJSZMJG",
+ "E_J]Z] RTTP` RZWJW RZSJMZG",
+ "E_JWZW RTTP` RZ]J] RJSZMJG",
+ "=gRMBSRY RbMRSbY",
+ "=gRMbSRY RBMRSBY",
+ "I[OCPDRGSITLUQUUTZS]R_PbOc RUcTbR_Q]PZOUOQPLQIRGTDUC",
+ "E_JXLWPVTVXWZX RJNLOPPTPXOZN RVKN[",
+ "E_ZMJSZY RVKN[",
+ "E_JMZSJY RVKN[",
+ "E_ZZJZ RZVJPZJ RXGL_", /* U+2270 LESS_MINUS SLASH_OP */
+ "E_JZZZ RJVZPJJ RXGL_",
+ "E_ZVJPZJ RJZKYNXQYS[V\\Y[ZZ",
+ "E_JVZPJJ RJZKYNXQYS[V\\Y[ZZ",
+ "E_ZVJPZJ RJZKYNXQYS[V\\Y[ZZ RXGL_",
+ "E_JVZPJJ RJZKYNXQYS[V\\Y[ZZ RXGL_",
+ "E_JSZYJ_ RZSJMZG",
+ "E_ZSJYZ_ RJSZMJG",
+ "E_JSZYJ_ RZSJMZG RXGL_",
+ "E_ZSJYZ_ RJSZMJG RXGL_",
+ "E_ZKXNVPRRJSRTVVXXZ[",
+ "E_JKLNNPRRZSRTNVLXJ[",
+ "E_JVRWVYX[Z^ RZHXKVMROJPRQVSXUZX",
+ "E_ZVRWNYL[J^ RJHLKNMROZPRQNSLUJX",
+ "E_J[KZNYQZS\\V]Y\\Z[ RZHXKVMROJPRQVSXUZX",
+ "E_J[KZNYQZS\\V]Y\\Z[ RJXLUNSRQZPRONMLKJH",
+ "E_ZKXNVPRRJSRTVVXXZ[ RVKN[", /* U+2280 PRECEDES SLASH_REL */
+ "E_JKLNNPRRZSRTNVLXJ[ RVKN[",
+ "E_ZMNMLNKOJQJUKWLXNYZY",
+ "E_JMVMXNYOZQZUYWXXVYJY",
+ "E_ZMNMLNKOJQJUKWLXNYZY RVKN[",
+ "E_JMVMXNYOZQZUYWXXVYJY RVKN[",
+ "E_J\\Z\\ RZJNJLKKLJNJRKTLUNVZV",
+ "E_Z\\J\\ RJJVJXKYLZNZRYTXUVVJV",
+ "E_J\\Z\\ RZJNJLKKLJNJRKTLUNVZV RXGL_",
+ "E_Z\\J\\ RJJVJXKYLZNZRYTXUVVJV RXGL_",
+ "E_J\\Z\\ RZJNJLKKLJNJRKTLUNVZV RSYQ_",
+ "E_Z\\J\\ RJJVJXKYLZNZRYTXUVVJV RSYQ_",
+ "E_JKJULYP[T[XYZUZK ROSUS RSUUSSQ",
+ "E_JKJULYP[T[XYZUZK RRRQSRTSSRRRT",
+ "E_JKJULYP[T[XYZUZK RLSXS RRMRY",
+ "E_ZYJYJMZM",
+ "E_JYZYZMJM", /* U+2290 !SQIMAGE */
+ "E_Z\\J\\ RZVJVJJZJ",
+ "E_J\\Z\\ RJVZVZJJJ",
+ "E_Z[ZKJKJ[",
+ "E_JKJ[Z[ZK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLSXS RRMRY",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLSXS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RMNWX RWNMX",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RWFM^",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRRQSRTSSRRRT",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQRPTQUSTURVPUOSPQ",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRNRS RMQRSWQ ROWRSUW",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLUXU RLQXQ",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RNSVS",
+ "E_JKZKZ[J[JK RLSXS RRMRY",
+ "E_JKZKZ[J[JK RLSXS",
+ "E_JKZKZ[J[JK RMNWX RWNMX", /* U+22A0 SQUARE MULTIPLY_SMALL */
+ "E_JKZKZ[J[JK RRRQSRTSSRRRT",
+ "E_J[JK RJSZS",
+ "E_Z[ZK RZSJS",
+ "E_ZKJK RRKR[",
+ "E_J[Z[ RR[RK",
+ "I[NSVS RNKN[",
+ "I[NVVV RNPVP RNKN[",
+ "E_JVZV RJPZP RJKJ[",
+ "E_JKJ[ RPSZS RPKP[",
+ "E_JKJ[ ROKO[ RTKT[ RYSTS",
+ "E_JKJ[ RPVYV RPPYP RPKP[",
+ "E_J[JK RJSZS RXGL_",
+ "E_JVZV RJPZP RJKJ[ RXGL_",
+ "E_JKJ[ RPSZS RPKP[ RXGL_",
+ "E_JKJ[ RPVYV RPPYP RPKP[ RXGL_",
+ "E_VKXLYNXPVQRRJSRTVUXVYXXZV[", /* U+22B0 PRECEDESREL */
+ "E_NKLLKNLPNQRRZSRTNULVKXLZN[",
+ "E_JSZYZMJS",
+ "E_ZSJYJMZS",
+ "E_Z[J[ RJQZWZKJQ",
+ "E_J[Z[ RZQJWJKZQ",
+ "BbXQXU RYQYU RZPZV R[Q[U R\\Q\\U RMSLQJPHQGSHUJVLUMSWSXUZV\\U]S\\QZPXQWS",
+ "BbLQLU RKQKU RJPJV RIQIU RHQHU RWSXQZP\\Q]S\\UZVXUWSMSLUJVHUGSHQJPLQMS",
+ "E_JSTSUUWVYUZSYQWPUQTS",
+ "E_JSNS RR[RW RRKRO RZSVS",
+ "I[NFVF RRFR[",
+ "E_J[Z[ RZKRVJK",
+ "E_ZKJK RJ[RPZ[",
+ "E_JKZK RZPR[JP",
+ "E_JKJ[Z[ RJOLOQQTTVYV[",
+ "E_Z[ZKJ[Z[",
+ "Bb_`REE`", /* U+22C0 *OR_HUGE */
+ "BbEFRa_F",
+ "Bb]`]O\\KZHWFSEQEMFJHHKGOG`",
+ "BbGFGWH[J^M`QaSaW`Z^\\[]W]F",
+ "E_RaJSRFZSRa",
+ "JZRRQSRTSSRRRT",
+ "I[RRTXOTUTPXRR",
+ "E_ZSJS RRXSYRZQYRXRZ RRLSMRNQMRLRN RLMXY RXMLY",
+ "E_JKZ[ZKJ[JK",
+ "E_ZKJ[JKZ[",
+ "E_JKZ[ZKJ[",
+ "E_JKZ[ RRSJ[",
+ "E_ZKJ[ RRSZ[",
+ "E_ZVJV RZPYOVNSOQQNRKQJP",
+ "E_JKMMOOQSR[SSUOWMZK",
+ "E_Z[WYUWSSRKQSOWMYJ[",
+ "E_ZPSPQQPSQUSVZV RZ\\Q\\N[KXJUJQKNNKQJZJ", /* U+22D0 SUBSET_DBL */
+ "E_JPQPSQTSSUQVJV RJ\\S\\V[YXZUZQYNVKSJJJ",
+ "E_U[UTTRRQPROTO[ R[[[RZOWLTKPKMLJOIRI[",
+ "E_OKORPTRUTTURUK RIKITJWMZP[T[WZZW[T[K",
+ "E_RKR[ RL[LSMPNOQNSNVOWPXSX[",
+ "E_JPZP RZVJV RODOb RUDUb",
+ "E_ZMJSZY RYRXSYTZSYRYT",
+ "E_JMZSJY RKRJSKTLSKRKT",
+ "5oJM:SJY RZMJSZY RjMZSjY",
+ "5oZMjSZY RJMZSJY R:MJS:Y",
+ "E_ZSJS RJWZ[J_ RZOJKZG",
+ "E_JSZS RZWJ[Z_ RJOZKJG",
+ "E_ZLJL RZPJVZ\\",
+ "E_JLZL RJPZVJ\\",
+ "E_JPROVMXKZH RZ^X[VYRWJVRUVSXQZN",
+ "E_ZPRONMLKJH RJ^L[NYRWZVRUNSLQJN",
+ "E_JPROVMXKZH RZ^X[VYRWJVRUVSXQZN RXGL_", /* U+22E0 ~PRECEDESEQ SLASH_OP */
+ "E_ZPRONMLKJH RJ^L[NYRWZVRUNSLQJN RXGL_",
+ "E_Z\\J\\ RZVJVJJZJ RXGL_",
+ "E_J\\Z\\ RJVZVZJJJ RXGL_",
+ "E_Z\\J\\ RZVJVJJZJ RSYQ_",
+ "E_J\\Z\\ RJVZVZJJJ RSYQ_",
+ "E_ZVJPZJ RJZKYNXQYS[V\\Y[ZZ RSWQ]",
+ "E_JVZPJJ RJZKYNXQYS[V\\Y[ZZ RSWQ]",
+ "E_J[KZNYQZS\\V]Y\\Z[ RZHXKVMROJPRQVSXUZX RSXQ^",
+ "E_J[KZNYQZS\\V]Y\\Z[ RJXLUNSRQZPRONMLKJH RSXQ^",
+ "E_JSZYZMJS RXGL_",
+ "E_ZSJYJMZS RXGL_",
+ "E_Z[J[ RJQZWZKJQ RXGL_",
+ "E_J[Z[ RZQJWJKZQ RXGL_",
+ "CaR\\S]R^Q]R\\R^ RRRSSRTQSRRRT RRHSIRJQIRHRJ",
+ "CaHRISHTGSHRHT RRRSSRTQSRRRT R\\R]S\\T[S\\R\\T",
+ "Ca\\H[I\\J]I\\H\\J RRRQSRTSSRRRT RH\\G]H^I]H\\H^", /* U+22F0 !ELLIPSIS_DIAG */
+ "CaHHIIHJGIHHHJ RRRSSRTQSRRRT R\\\\]]\\^[]\\\\\\^",
+ ">`BQ\\Q R\\GOGKIIKGOGSIWKYO[\\[",
+ ">`GQ\\Q R\\M\\U R\\GOGKIIKGOGSIWKYO[\\[",
+ "E_JSZS RZPZV RZZPZMYKWJTJRKOMMPLZL",
+ "C`\\QGQ R\\GOGKIIKGOGSIWKYO[\\[ RR@QARBSAR@RB",
+ "C`GA\\A R\\QGQ R\\[O[KYIWGSGOIKKIOG\\G",
+ "E_JSZS RZGJG RZLPLMMKOJRJTKWMYPZZZ",
+ "C`G`\\` R\\PGP R\\FOFKHIJGNGRIVKXOZ\\Z",
+ "C`HT\\T RHN\\N R\\GOGKIIKGOGSIWKYO[\\[",
+ "DfbQHQ RHGUGYI[K]O]S[WYYU[H[",
+ "Df]QHQ RHMHU RHGUGYI[K]O]S[WYYU[H[",
+ "E_ZSJS RJPJV RJZTZWYYWZTZRYOWMTLJL",
+ "Da]AHA RHQ]Q RH[U[YY[W]S]O[KYIUGHG",
+ "E_ZSJS RJGZG RJLTLWMYOZRZTYWWYTZJZ",
+ "C`GQ\\Q R\\GGGG[\\[",
+ /* // Miscellaneous Technical (2300-23FF) */
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RZKJ[", /* U+2300 CIRCLE SLASH_SYM */
+ "E_JQRWROZU",
+ "E_J[JORGZOZ[J[",
+ "E_NORKVO",
+ "E_VWR[NW",
+ "E_ZKJK RJ[RPZ[",
+ "E_JNZN RJHZH RJ[RSZ[",
+ "H\\RDSETGSIRJQLRNSOTQSSRTQVRXSYT[S]R^Q`Rb",
+ "KYQbQDVD",
+ "KYSbSDND",
+ "KYQDQbVb",
+ "KYSDSbNb",
+ "E_RWR[ RVSZS",
+ "E_RWR[ RNSJS",
+ "E_RORK RVSZS",
+ "E_RORK RNSJS",
+ "E_ZQJQJV", /* U+2310 !NOT */
+ "D`[JZLYPYVZZ[\\Y[UZOZK[I\\JZKVKPJLIJKKOLULYK[J",
+ "E_JSJQLMPKTKXMZQZS",
+ "E_JSJQLMPKTKXMZQZS RJSZS",
+ "E_JMLLPKTKXLZMR[JM",
+ "E_PUJ[ RTKWLYNZQYTWVTWQVOTNQONQLTK",
+ "E_JSZS RR[RK RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_JWZW RJOZO RNKN[ RVKV[",
+ "E_LPXPZO[MZKXJVKUMUYV[X\\Z[[YZWXVLVJWIYJ[L\\N[OYOMNKLJJKIMJOLP",
+ "E_ZUJUJP",
+ "E_RORSUS RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_M[RVW[ RN[RWV[ RP[RYT[ RS[RZQ[ RU[RXO[ RYMRPKMROYM RJFZFZKYMKTJVJ[Z[ZVYTKMJJJF",
+ "JZVFNFNM",
+ "JZNFVFVM",
+ "JZV[N[NT",
+ "JZN[V[VT",
+ "H\\RbRMSITGVFXGYI", /* U+2320 INTEGRAL_TOP */
+ "H\\RDRYQ]P_N`L_K]",
+ "E_JUKTMSRRWSYTZU",
+ "E_ZQYRWSRTMSKRJQ",
+ "E_LKHK RXK\\K RNORKVO",
+ "@dXK^K RFKLKX[^[",
+ "AfJKZ[ RZKJ[ RFKZKbSZ[F[FK",
+ "AcJKZ[ RZKJ[ RFK^K^[F[FK",
+ "9k>VfV R>LfL RCQCL RD[DV REVEQ RFLFG RHQHL RJVJQ RK[KV RKLKG RMQML ROVOQ RPLPG RRQRL RTVTQ RULUG RWQWL RYVYQ RZ[ZV RZLZG R\\Q\\L R^V^Q R_L_G R`[`V R>QaQaL R>[>GfGf[>[",
+ "KYUcOSUC",
+ "KYOcUSOC",
+ ">cZKJ[ RJKZ[ R^KJKBSJ[^[^K",
+ "AcKOKW RR[YW RRKYO RRE^L^ZRaFZFLRE",
+ "H\\PNKX RYNTX RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_N[J[JW RZSRSJ[ RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_JSZS RNYVY RVMNM",
+ "E_RPRKNN RZPZKVN RRKJ[R[ZK", /* U+2330 TOTAL_RUNOUT */
+ "H\\LS[S RRMRY RXP[SXV RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_ZSJ\\JJZS RJSZS",
+ "E_J[JRZ[J[",
+ "E_JWJ[Z[ZW",
+ "E_VWR[NW",
+ "D`JaZa RJFZF RRFRa",
+ "D`MFWFWaMaMF",
+ "D`IF[F[aIaIF RJPZP RZVJV",
+ "D`IF[F[aIaIF RZSJS RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "D`IF[F[aIaIF RRJ[SR\\ISRJ",
+ "D`IF[F[aIaIF RPQRPTQUSTURVPUOSPQ",
+ "D`IF[F[aIaIF RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRbRD",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQRPTQUSTURVPUOSPQ",
+ "E_JSZS RZKJ[",
+ "E_JSZS RJKZ[", /* U+2340 MINUS !SLASH_SYM */
+ "D`IaIF[F[aIa[F",
+ "D`[a[FIFIa[aIF",
+ "D`IF[F[aIaIF RZMJSZY",
+ "D`IF[F[aIaIF RJMZSJY",
+ "E_ZSJS RNWJSNO RR[RK",
+ "E_JSZS RVWZSVO RR[RK",
+ "D`IF[F[aIaIF RZSJS RNWJSNO",
+ "D`IF[F[aIaIF RJSZS RVWZSVO",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLGX_",
+ "E_J[Z[ RR[RK RZaJa",
+ "E_RKX[L[RK RRbRD",
+ "D`IF[F[aIaIF RIKR[[K",
+ "D`IF[F[aIaIF RRKX[L[RK",
+ "E_ZKJK RRKR[ RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_R[RK RNORKVO RJSZS",
+ "D`IF[F[aIaIF RR[RK RNORKVO", /* U+2350 RECTANGLE_V_HUGE ARROW_N */
+ "E_ZKJK RRKR[ RMEWE",
+ "E_R[LKXKR[ RRbRD",
+ "D`IF[F[aIaIF R[[RKI[",
+ "D`IF[F[aIaIF RR[LKXKR[",
+ "E_J[Z[ RR[RK RPQRPTQUSTURVPUOSPQ",
+ "E_RKR[ RVWR[NW RJSZS",
+ "D`IF[F[aIaIF RRKR[ RVWR[NW",
+ "JZJ]Z] RSFQJ",
+ "E_RKX[L[RK RJ]Z]",
+ "E_RJ[SR\\ISRJ RJ]Z]",
+ "E_PQRPTQUSTURVPUOSPQ RJ]Z]",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RJ]Z]",
+ "E_Z[ZQXMTKPKLMJQJ[ RPQRPTQUSTURVPUOSPQ",
+ "D`IF[F[aIaIF RSFQJ",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRPTVORURPVRP",
+ "D`IF[F[aIaIF RRYSZR[QZRYR[ RRNSORPQORNRP", /* U+2360 RECTANGLE_V_HUGE COLON */
+ "E_ZKJK RRKR[ RNDOENFMENDNF RVDWEVFUEVDVF",
+ "E_R[LKXKR[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_RKWZJQZQMZRK RNDOENFMENDNF RVDWEVFUEVDVF",
+ "E_PQRPTQUSTURVPUOSPQ RNIOJNKMJNINK RVIWJVKUJVIVK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RNDOENFMENDNF RVDWEVFUEVDVF",
+ "E_JKJULYP[T[XYZUZK RRbRD",
+ "E_ZMNMLNKOJQJUKWLXNYZY RRbRD",
+ "E_JSKRNQQRSTVUYTZS RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_JMZSJY RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_JSZS RSZS[R]Q^",
+ "E_R[LKXKR[ RJSKRNQQRSTVUYTZS",
+ "H\\QFSFUGVHWJXNXSWWVYUZS[Q[OZNYMWLSLNMJNHOGQF RJPKONNQOSQVRYQZP",
+ "E_JSKRNQQRSTVUYTZS RRbRD",
+ "MWSZS[R]Q^ RRNSORPQORNRP RJ]Z]",
+ "D`IF[F[aIaIF RJPZP RTMPY RZVJV",
+ "D`IF[F[aIaIF RQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS", /* U+2370 RECTANGLE_V_HUGE QUESTION */
+ "E_IKR[[K RJSKRNQQRSTVUYTZS",
+ "E_[[RKI[ RJSKRNQQRSTVUYTZS",
+ "MXRMRXSZU[",
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RJ]Z]",
+ "HZLTST RVZT[P[NZMYLWLQMONNPMTMVN RJ]Z]",
+ "MXRMRXSZU[ RJ]Z]",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RJ]Z]",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[",
+ "IbMTQSS[bB RXL`L",
+ "A_J_F_F[ RJKJ[Z[ RF_OVEQOG",
+ "E_JWNWN[V[VWZW",
+ "E_NSN[J[ RVSV[Z[ RJSJQLMPKTKXMZQZSJS",
+ "E_PQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ RRbRD",
+ "E_VWR[NW ROEQDSDUEVGVN RVMTNQNOMNKOIQHVH", /* U+2380 *ARROWHEAD_N ^A_TINY */
+ "BbF[^[ RGLIKKKMLNNNU RUSVTUUTTUSUU R]S^T]U\\T]S]U RNTLUIUGTFRGPIONO",
+ "BbF[N[ RV[^[ RGLIKKKMLNNNU RWLYK[K]L^N^U RNTLUIUGTFRGPIONO R^T\\UYUWTVRWPYO^O",
+ "BbHPDP RJUFX RJKFH R^XZU R^HZK R`P\\P RTTRUPUNTMRMQNNPLRKVKTU",
+ "=_RKR[B[BKRK RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_JKZKZ[J[JK RRbRD",
+ "C_ESUS RQWUSQO RJWJ[Z[ZKJKJO",
+ "@dX[^[ RZO^KZG RF[L[XK^K",
+ "E_KOYW RR[RK RYOKW RRMONMPLSMVOXRYUXWVXSWPUNRM",
+ "E_JSOSR[USZS RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_R[KOYOR[ RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_STJK RJOJKNK RSKTKXMZQZUXYT[P[LYJUJT",
+ "D`KNKROR RYRWPTOPOMPKR RNXMVKUIVHXIZK[MZNX RVXWZY[[Z\\X[VYUWVVX",
+ "E_I[N[NKVKV[[[",
+ "E_I[V[VK RN[NK[K",
+ "E_JKZK RJSRKZSR[JS",
+ "E_Z[J[ RZSR[JSRKZS", /* U+2390 *OPEN_H */
+ "E_JKZK RJSRKZSR[JS RJSZS",
+ "E_Z[J[ RZSR[JSRKZS RJSZS",
+ "E_JVLV RJPZP RQVSV RXVZV",
+ "BbL[FQLGXG^QX[L[",
+ "D`IF[F[aIaIF",
+ "MWTFQL",
+ "AcZSJS RRORK RR[RW RNOJSNW R^[F[FK^K^[",
+ "AcJSZS RRWR[ RRKRO RVWZSVO RFK^K^[F[FK",
+ "BbLHQHQC RLSLHQCXCXSLS RLKJKHLGNGXHZJ[Z[\\Z]X]N\\LZKXK",
+ "BbROJW RZORW RGXGNHLJKZK\\L]N]X\\ZZ[J[HZGX",
+ "H\\XDVGUITLSQR[Rb",
+ "H\\RbRD",
+ "H\\XbV_U]TZSURKRD",
+ "H\\LDNGOIPLQQR[Rb",
+ "H\\RbRD",
+ "H\\LbN_O]PZQURKRD", /* U+23A0 *PAREN_TOP */
+ "H\\XGRGRb",
+ "H\\RbRD",
+ "H\\X_R_RD",
+ "H\\LGRGRb",
+ "H\\RbRD",
+ "H\\L_R_RD",
+ "H\\XDTHSJRNRb",
+ "H\\RDRIQMPOLSPWQYR]Rb",
+ "H\\XbT^S\\RXRD",
+ "H\\RbRD",
+ "H\\LDPHQJRNRb",
+ "H\\RDRISMTOXSTWSYR]Rb",
+ "H\\LbP^Q\\RXRD",
+ "H\\RbRD",
+ "H\\HS\\S",
+ "H\\WDSHRKR[Q^Mb", /* U+23B0 MOUSTACHE */
+ "H\\MDQHRKR[S^Wb",
+ "E_VbIF\\F",
+ "E_VDI`\\`",
+ ">fC^CYaYa^",
+ ">fCHCMaMaH",
+ ">fC^CYaYa^ RaHaMCMCH",
+ "IbMTQSS[bB",
+ "H\\RbRD",
+ "H\\RbRD",
+ "H\\HG\\G",
+ "H\\HM\\M",
+ "H\\\\YHY",
+ "H\\\\_H_",
+ "E_UFOFO[",
+ "E_U[O[OF",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRbRD", /* U+23C0 CIRCLE LINE_V */
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RZEJE RRERa",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RJaZa RRaRE",
+ "E_RK[[I[RK RRbRD",
+ "E_RK[[I[RK RZEJE RRERa",
+ "E_RK[[I[RK RJaZa RRaRE",
+ "E_JSKRNQQRSTVUYTZS RRbRD",
+ "E_JSKRNQQRSTVUYTZS RZEJE RRERa",
+ "E_JSKRNQQRSTVUYTZS RJaZa RRaRE",
+ "E_JaZa RRaRE",
+ "E_ZEJE RRERa",
+ "E_OFUFU[",
+ "E_O[U[UF",
+ "D`TFQL RMKJKJ[Z[ZKWK",
+ "E_IWN\\NZZZZKTKTTNTNRIW",
+ "E_Z[J[ RJVRKZV",
+ "H\\RbRD", /* U+23D0 LINE_V */
+ "H\\NQNROTQUSUUTVRVQ",
+ "H\\NQNROTQUSUUTVRVQ RMKWK",
+ "H\\NQNROTQUSUUTVRVQ RW[M[",
+ "CaGQGRHTJULUNTOROQ RUQURVTXUZU\\T]R]Q RGK]K",
+ "CaGQGRHTJULUNTOROQ RUQURVTXUZU\\T]R]Q R][G[",
+ "E_JQJRKTMUOUQTRRRQ RRRSTUUWUYTZRZQ",
+ "E_JUZUZP",
+ "E_JPJUZUZP",
+ "E_RPRU RJPJUZUZP",
+ "E_HO\\O RLUXU RRFRO RT[P[",
+ "E_HS\\S RJMZMZYJYJM",
+ ">fB]C\\FZHYKXPWTWYX\\Y^Za\\b]",
+ ">fbIaJ^L\\MYNTOPOKNHMFLCJBI",
+ ">fB^B]C[EZOZQYRWSYUZ_Za[b]b^",
+ ">fbHbIaK_LULSMROQMOLELCKBIBH",
+ ">fB^FY^Yb^", /* U+23E0 TOR_BRACKET_OVER */
+ ">fbH^MFMBH",
+ "E_I[NKVK[[I[",
+ "AcRE^L^ZRaFZFLRE RQLSLVMXOYRYTXWVYSZQZNYLWKTKRLONMQL",
+ "E_JSZS",
+ "E_HXMN\\NWXHX",
+ "E_JSZS RJSKNLLNKPLQNSXTZV[XZYXZS",
+ "E_LMXY RXMLY RPQRPTQUSTURVPUOSPQ",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+23F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Control Pictures (2400-243F) */
+ "F^K[KFYFY[K[", /* U+2400 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2410 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2420 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2430 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Optical Character Recognition (2440-245F) */
+ "F^K[KFYFY[K[", /* U+2440 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2450 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Enclosed Alphanumerics (2460-24FF) */
+ "F^K[KFYFY[K[", /* U+2460 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2470 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2480 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2490 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Box Drawing (2500-257F) */
+ "F^K[KFYFY[K[", /* U+2500 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2510 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2520 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2530 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2540 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2550 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2560 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2570 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Block Elements (2580-259F) */
+ "F^K[KFYFY[K[", /* U+2580 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2590 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Geometric Shapes (25A0-25FF) */
+ "E_KKK[ RL[LK RMKM[ RN[NK ROKO[ RP[PK RQKQ[ RR[RK RSKS[ RT[TK RUKU[ RV[VK RWKW[ RX[XK RYKY[ RJKZKZ[J[JK", /* U+25A0 SQUARE_BLACK */
+ "E_JKZKZ[J[JK",
+ "E_KLMKWKYLZNZXYZW[M[KZJXJNKL",
+ "E_JKZKZ[J[JK RPPPV RQVQP RRPRV RSVSP RTPTV ROVOPUPUVOV",
+ "E_JWZW RJSZS RJOZO RJKZKZ[J[JK",
+ "E_NKN[ RRKR[ RVKV[ RJKZKZ[J[JK",
+ "E_JWZW RJSZS RJOZO RNKN[ RRKR[ RVKV[ RJKZKZ[J[JK",
+ "E_JKZ[ RN[JW RT[JQ RZUPK RZOVK RJKZKZ[J[JK",
+ "E_J[ZK RJUTK RJONK RP[ZQ RV[ZW RJKZKZ[J[JK",
+ "E_J[ZK RJUTK RJONK RJKZ[ RN[JW RP[ZQ RT[JQ RV[ZW RZUPK RZOVK RJKZKZ[J[JK",
+ "E_PPPV RQVQP RRPRV RSVSP RTPTV ROVOPUPUVOV",
+ "E_OVOPUPUVOV",
+ "E_JXTN RJWSN RJVRN RJUQN RJTPN RJSON RJRNN RJQMN RJPLN RJOKN RKXUN RLXVN RMXWN RNXXN ROXYN RPXZN RQXZO RRXZP RSXZQ RTXZR RUXZS RVXZT RWXZU RXXZV RYXZW RJNZNZXJXJN",
+ "E_JNZNZXJXJN",
+ "E_M[WQ RMZWP RMYWO RMXWN RMWWM RMVWL RMUWK RMTVK RMSUK RMRTK RMQSK RMPRK RMOQK RMNPK RMMOK RMLNK RN[WR RO[WS RP[WT RQ[WU RR[WV RS[WW RT[WX RU[WY RV[WZ RM[MKWKW[M[",
+ "E_M[MKWKW[M[",
+ "E_NNLP RONKR RPNJT RQNIV RRNHX RSNIX RTNJX RUNKX RVNLX RWNMX RXVVX RXNNX RYTUX RYNOX RZRTX RZNPX R[PSX R[NQX R\\NRX RHXMN\\NWXHX", /* U+25B0 PARALLELOGRAM_BLACK */
+ "E_HXMN\\NWXHX",
+ "E_JZJ[ RKXK[ RLVL[ RMTM[ RNSN[ ROQO[ RPOP[ RQMQ[ RRKR[ RSMS[ RTOT[ RUQU[ RVSV[ RWTW[ RXVX[ RYXY[ RZ[RLJ[ RZZZ[ RRK[[I[RK",
+ "E_RK[[I[RK",
+ "E_OUOV RPSPV RQQQV RRORV RSQSV RTSTV RUUUV ROVRPUV RROVVNVRO",
+ "E_ROVVNVRO",
+ "E_KKK[ RLLLZ RMLMZ RNMNY ROMOY RPNPX RQNQX RRORW RSPSV RTPTV RUQUU RVQVU RWSXS RWRWT RJKYSJ[ RZSJ\\JJZS",
+ "E_ZSJ\\JJZS",
+ "E_PPPV RQQQU RRQRU RSSUS RSRST ROPUSOV RVSOWOOVS",
+ "E_VSOWOOVS",
+ "E_KNKX RLNLX RMOMW RNONW ROOOW RPPPV RQPQV RRPRV RSQSU RTQTU RURUT RVRVT RWRWT RXSWS RJNYSJX RZSJYJMZS",
+ "E_ZSJYJMZS",
+ "E_ZLZK RYNYK RXPXK RWRWK RVSVK RUUUK RTWTK RSYSK RR[RK RQYQK RPWPK ROUOK RNSNK RMRMK RLPLK RKNKK RJKRZZK RJLJK RR[IK[KR[",
+ "E_R[IK[KR[",
+ "E_UQUP RTSTP RSUSP RRWRP RQUQP RPSPP ROQOP RUPRVOP RRWNPVPRW",
+ "E_RWNPVPRW",
+ "E_Y[YK RXZXL RWZWL RVYVM RUYUM RTXTN RSXSN RRWRO RQVQP RPVPP ROUOQ RNUNQ RMSLS RMTMR RZ[KSZK RJSZJZ\\JS", /* U+25C0 *TRIANGLE_E_BLACK */
+ "E_JSZJZ\\JS",
+ "E_TVTP RSUSQ RRURQ RQSOS RQTQR RUVOSUP RNSUOUWNS",
+ "E_NSUOUWNS",
+ "E_YXYN RXXXN RWWWO RVWVO RUWUO RTVTP RSVSP RRVRP RQUQQ RPUPQ ROTOR RNTNR RMTMR RLSMS RZXKSZN RJSZMZYJS",
+ "E_JSZMZYJS",
+ "E_JRJT RKUKQ RLPLV RMWMO RNNNX ROYOM RPLPZ RQ[QK RRJR\\ RS[SK RTLTZ RUYUM RVNVX RWWWO RXPXV RYUYQ RZRZT RRJ[SR\\ISRJ",
+ "E_RJ[SR\\ISRJ",
+ "E_RJ[SR\\ISRJ RPRPT RQUQQ RRPRV RSUSQ RTRTT RRPUSRVOSRP",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ",
+ "E_RaJSRFZSRa",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_JQKO RKWJU RNLPK RP[NZ RTKVL RVZT[ RYOZQ RZUYW",
+ "E_NLNZ RRKR[ RVLVZ RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQRPTQUSTURVPUOSPQ",
+ "E_KOKW RLXP[ RLNPK RLMLY RMYMM RNLNZ ROZOL RPKP[ RQ[QK RRKR[ RS[SK RT[XX RTKT[ RTKXN RUZUL RVLVZ RWYWM RXMXY RYWYO RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RKOKW RLYLM RMMMY RNZNL ROLOZ RP[LX RP[PK RLN RQKQ[ RR[P[LYJUJQLMPKRKR[", /* U+25D0 CIRCLE CIRCLE_LEFTHALF_BLACK */
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RYWYO RXMXY RWYWM RVLVZ RUZUL RTKXN RTKT[ RXX RS[SK RRKTKXMZQZUXYT[R[RK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RKOKS RLMLS RMSMM RNLNS ROSOL RPKLN RPKPS RQKQS RRKRS RSKSS RTSTK RXN RULUS RVSVL RWMWS RXMXS RYOYS RJSJQLMPKTKXMZQZSJS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RYWYS RXYXS RWSWY RVZVS RUSUZ RT[XX RT[TS RS[SS RR[RS RQ[QS RPSP[ RLX ROZOS RNSNZ RMYMS RLYLS RKWKS RZSZUXYT[P[LYJUJSZS",
+ "E_SSSK RTKTS RTKXN RUSUL RVLVS RWSWM RXMXS RYSYO RZSRSRK RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_QSQ[ RP[PS RP[LX ROSOZ RNZNS RMSMY RLYLS RKSKW RJSRSR[ RT[P[LYJUJQLMPKTKXMZQZUXYT[ RYWYO RXMXY RWYWM RVLVZ RUZUL RTKXN RTKT[ RXX RS[SK RRKTKXMZQZUXYT[R[RK",
+ "E_KOKW RLYLM RMMMY RNZNL ROLOZ RP[LX RP[PK RLN RQKQ[ RR[P[LYJUJQLMPKRKR[",
+ "E_YWYO RXMXY RWYWM RVLVZ RUZUL RTKXN RTKT[ RXX RS[SK RRKTKXMZQZUXYT[R[RK",
+ "E_FDFb RGbGD RHDHb RIbID RJDJb RKbKD RLbLW RLDLO RMXMb RMNMD RNbNY RNDNM ROZOb ROLOD RPbPZ RPDPL RQZQb RQLQD RRbRZ RRDRL RSZSb RSLSD RTbTZ RTDTL RUZUb RULUD RVbVY RVDVM RWXWb RWNWD RXbXW RXDXO RYbYD RZDZb R[b[D R\\D\\b R]b]D R^D^b R_bEbED_D_b RKTKRLONMQLSLVMXOYRYTXWVYSZQZNYLWKT",
+ "E_FRFD RGNIJ RGDGN RHLHD RIDIK RJJJD RJJMG RKDKI RLHLD RMHQF RMDMH RNGND ROPOS RODOG RPSPP RPGPD RQPQS RQDQG RRSRO RRGRD RSPSS RSFWH RSDSG RTSTP RTGTD RUPUS RUDUG RVGVD RWGZJ RWDWH RXHXD RYDYI RZJZD R[J]N R[D[K R\\L\\D R]D]N R^R^D ROQROUQ RNSOPROUPVSNS RFSFRGNIKJJMHQGSGWHZJ[K]N^R^S_S_DEDESFS R^T^b R]X[\\ R]b]X R\\Z\\b R[b[[ RZ\\Zb RZ\\W_ RYbY] RX^Xb RW^S` RWbW^ RV_Vb RUVUS RUbU_ RTSTV RT_Tb RSVSS RSbS_ RRSRW RR_Rb RQVQS RQ`M^ RQbQ_ RPSPV RP_Pb ROVOS RObO_ RN_Nb RM_J\\ RMbM^ RL^Lb RKbK] RJ\\Jb RI\\GX RIbI[ RHZHb RGbGX RFTFb RUURWOU RVSUVRWOVNSVS R^S^T]X[[Z\\W^S_Q_M^J\\I[GXFTFSESEb_b_S^S",
+ "E_FRFD RGNIJ RGDGN RHLHD RIDIK RJJJD RJJMG RKDKI RLHLD RMHQF RMDMH RNGND ROPOS RODOG RPSPP RPGPD RQPQS RQDQG RRSRO RRGRD RSPSS RSFWH RSDSG RTSTP RTGTD RUPUS RUDUG RVGVD RWGZJ RWDWH RXHXD RYDYI RZJZD R[J]N R[D[K R\\L\\D R]D]N R^R^D ROQROUQ RNSOPROUPVSNS RFSFRGNIKJJMHQGSGWHZJ[K]N^R^S_S_DEDESFS",
+ "E_^T^b R]X[\\ R]b]X R\\Z\\b R[b[[ RZ\\Zb RZ\\W_ RYbY] RX^Xb RW^S` RWbW^ RV_Vb RUVUS RUbU_ RTSTV RT_Tb RSVSS RSbS_ RRSRW RR_Rb RQVQS RQ`M^ RQbQ_ RPSPV RP_Pb ROVOS RObO_ RN_Nb RM_J\\ RMbM^ RL^Lb RKbK] RJ\\Jb RI\\GX RIbI[ RHZHb RGbGX RFTFb RUURWOU RVSUVRWOVNSVS R^S^T]X[[Z\\W^S_Q_M^J\\I[GXFTFSESEb_b_S^S",
+ "E_JSJQLMPKRK",
+ "E_ZSZQXMTKRK",
+ "E_ZSZUXYT[R[",
+ "E_JSJULYP[R[",
+ "E_JSJQLMPKTKXMZQZS", /* U+25E0 CIRCLE_TOPHALF */
+ "E_ZSZUXYT[P[LYJUJS",
+ "E_KZK[ RLYL[ RMXM[ RNWN[ ROVO[ RPUP[ RQTQ[ RRSR[ RSRS[ RTQT[ RUPU[ RVOV[ RWNW[ RXMX[ RYLY[ RZ[ZKJ[Z[",
+ "E_YZY[ RXYX[ RWXW[ RVWV[ RUVU[ RTUT[ RSTS[ RRSR[ RQRQ[ RPQP[ ROPO[ RNON[ RMNM[ RLML[ RKLK[ RJ[JKZ[J[",
+ "E_YLYK RXMXK RWNWK RVOVK RUPUK RTQTK RSRSK RRSRK RQTQK RPUPK ROVOK RNWNK RMXMK RLYLK RKZKK RJKJ[ZKJK",
+ "E_KLKK RLMLK RMNMK RNONK ROPOK RPQPK RQRQK RRSRK RSTSK RTUTK RUVUK RVWVK RWXWK RXYXK RYZYK RZKZ[JKZK",
+ "E_PQRPTQUSTURVPUOSPQ",
+ "E_JKZKZ[J[JK RK[KK RLKL[ RM[MK RNKN[ RO[OK RPKP[ RQ[QK RJ[JKRKR[J[",
+ "E_JKZKZ[J[JK RYKY[ RX[XK RWKW[ RV[VK RUKU[ RT[TK RSKS[ RZKZ[R[RKZK",
+ "E_JKZKZ[J[JK RYLYK RXMXK RWNWK RVOVK RUPUK RTQTK RSRSK RRSRK RQTQK RPUPK ROVOK RNWNK RMXMK RLYLK RKZKK RJKJ[ZKJK",
+ "E_JKZKZ[J[JK RKZK[ RLYL[ RMXM[ RNWN[ ROVO[ RPUP[ RQTQ[ RRSR[ RSRS[ RTQT[ RUPU[ RVOV[ RWNW[ RXMX[ RYLY[ RZ[ZKJ[Z[",
+ "E_JKZKZ[J[JK RR[RK",
+ "E_RK[[I[RK RRUQVRWSVRURW",
+ "E_J[RL RJZJ[ RKXK[ RLVL[ RMTM[ RNSN[ ROQO[ RPOP[ RQMQ[ RRKR[ RRK[[I[RK",
+ "E_Z[RL RZZZ[ RYXY[ RXVX[ RWTW[ RVSV[ RUQU[ RTOT[ RSMS[ RRKR[ RRKI[[[RK",
+ "C`OFTFXHZJ\\N\\SZWXYT[O[KYIWGSGNIJKHOF",
+ "E_JKZKZ[J[JK RRKRSJS", /* U+25F0 SQUARE !QUADRANT */
+ "E_JKZKZ[J[JK RR[RSJS",
+ "E_JKZKZ[J[JK RR[RSZS",
+ "E_JKZKZ[J[JK RRKRSZS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRKRSJS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RR[RSJS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RR[RSZS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRKRSZS",
+ "E_JKJ[ZKJK",
+ "E_ZKZ[JKZK",
+ "E_J[JKZ[J[",
+ "E_JKZKZ[J[JK",
+ "E_KKK[ RL[LK RMKM[ RN[NK ROKO[ RP[PK RQKQ[ RR[RK RSKS[ RT[TK RUKU[ RV[VK RWKW[ RX[XK RYKY[ RJKZKZ[J[JK",
+ "E_OVOPUPUVOV",
+ "E_PPPV RQVQP RRPRV RSVSP RTPTV ROVOPUPUVOV",
+ "E_Z[ZKJ[Z[",
+ /* // Miscellaneous Symbols (2600-26FF) */
+ "F^K[KFYFY[K[", /* U+2600 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2610 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2620 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2630 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2640 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2650 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2660 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2670 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2680 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2690 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Dingbats (2700-27BF) */
+ "F^K[KFYFY[K[", /* U+2700 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2710 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2720 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2730 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2740 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2750 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2760 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2770 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2780 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2790 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Miscellaneous Mathematical Symbols A (27C0-27EF) */
+ "F^K[KFYFY[K[", /* U+27C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Supplemental Arrows A (27F0-27FF) */
+ "F^K[KFYFY[K[", /* U+27F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Braille Patterns (2800-28FF) */
+ "F^K[KFYFY[K[", /* U+2800 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2810 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2820 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2830 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2840 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2850 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2860 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2870 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2880 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2890 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Supplemental Arrows B (2900-297F) */
+ "F^K[KFYFY[K[", /* U+2900 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2910 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2920 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2930 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2940 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2950 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2960 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2970 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Miscellaneous Mathematical Symbols B (2980-29FF) */
+ "F^K[KFYFY[K[", /* U+2980 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2990 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Supplemental Mathematical Operators (2A00-2AFF) */
+ "F^K[KFYFY[K[", /* U+2A00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Miscellaneous Symbols and Arrows (2B00-2BFF) */
+ "F^K[KFYFY[K[", /* U+2B00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+};
+
+const int newstroke_font_bufsize = sizeof(newstroke_font)/sizeof(newstroke_font[0]);
+
+/* --- unused glyphs --- */
+/* RECTANGLE_V_BLACK_SMALL */
+/* TRIANGLE_TALL_BLACK */
+/* COMBINING */
+/* DIAMOND_SMALL */
diff --git a/common/origin_viewitem.cpp b/common/origin_viewitem.cpp
new file mode 100644
index 0000000..6454816
--- /dev/null
+++ b/common/origin_viewitem.cpp
@@ -0,0 +1,88 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <origin_viewitem.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <class_track.h>
+
+using namespace KIGFX;
+
+ORIGIN_VIEWITEM::ORIGIN_VIEWITEM( const COLOR4D& aColor, MARKER_STYLE aStyle, int aSize, const VECTOR2D& aPosition ) :
+ EDA_ITEM( NOT_USED ), // this item is never added to a BOARD so it needs no type
+ m_position( aPosition ), m_size( aSize ), m_color( aColor ), m_style( aStyle ), m_drawAtZero( false )
+{
+}
+
+
+const BOX2I ORIGIN_VIEWITEM::ViewBBox() const
+{
+ BOX2I bbox;
+ bbox.SetMaximum();
+ return bbox;
+}
+
+
+void ORIGIN_VIEWITEM::ViewDraw( int, GAL* aGal ) const
+{
+ // Nothing to do if the target shouldn't be drawn at 0,0 and that's where the target is. This
+ // mimics the Legacy canvas that doesn't display most targets at 0,0
+ if( !m_drawAtZero && ( m_position.x == 0 ) && ( m_position.y == 0 ) )
+ return;
+
+ aGal->SetIsStroke( true );
+ aGal->SetIsFill( false );
+ aGal->SetLineWidth( 1 );
+ aGal->SetStrokeColor( m_color );
+ VECTOR2D scaledSize = m_view->ToWorld( VECTOR2D( m_size, m_size ), false );
+
+ // Draw a circle around the marker's centre point if the style demands it
+ if( ( m_style == CIRCLE_CROSS ) || ( m_style == CIRCLE_DOT ) || ( m_style == CIRCLE_X ) )
+ aGal->DrawCircle( m_position, scaledSize.x );
+
+ switch( m_style )
+ {
+ case NONE:
+ break;
+
+ case CROSS:
+ case CIRCLE_CROSS:
+ aGal->DrawLine( m_position - VECTOR2D( scaledSize.x, 0 ),
+ m_position + VECTOR2D( scaledSize.x, 0 ) );
+ aGal->DrawLine( m_position - VECTOR2D( 0, scaledSize.y ),
+ m_position + VECTOR2D( 0, scaledSize.y ) );
+ break;
+
+ case X:
+ case CIRCLE_X:
+ aGal->DrawLine( m_position - scaledSize, m_position + scaledSize );
+ scaledSize.y = -scaledSize.y;
+ aGal->DrawLine( m_position - scaledSize, m_position + scaledSize );
+ break;
+
+ case DOT:
+ case CIRCLE_DOT:
+ aGal->DrawCircle( m_position, scaledSize.x / 4 );
+ break;
+ }
+}
diff --git a/common/page_layout/class_worksheet_dataitem.cpp b/common/page_layout/class_worksheet_dataitem.cpp
new file mode 100644
index 0000000..b5e673f
--- /dev/null
+++ b/common/page_layout/class_worksheet_dataitem.cpp
@@ -0,0 +1,577 @@
+/**
+ * @file class_worksheet_dataitem.cpp
+ * @brief description of graphic items and texts to build a title block
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+ * the class WORKSHEET_DATAITEM (and derived) defines
+ * a basic shape of a page layout ( frame references and title block )
+ * Basic shapes are line, rect and texts
+ * the WORKSHEET_DATAITEM coordinates units is the mm, and are relative to
+ * one of 4 page corners.
+ *
+ * These items cannot be drawn or plot "as this". they should be converted
+ * to a "draw list" (WS_DRAW_ITEM_BASE and derived items)
+
+ * The list of these items is stored in a WORKSHEET_LAYOUT instance.
+ *
+ * When building the draw list:
+ * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST
+ * coordinates are converted to draw/plot coordinates.
+ * texts are expanded if they contain format symbols.
+ * Items with m_RepeatCount > 1 are created m_RepeatCount times
+ *
+ * the WORKSHEET_LAYOUT is created only once.
+ * the WS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn
+ *
+ * the WORKSHEET_LAYOUT instance is created from a S expression which
+ * describes the page layout (can be the default page layout or a custom file).
+ */
+
+#include <fctsys.h>
+#include <drawtxt.h>
+#include <worksheet.h>
+#include <class_title_block.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+
+
+// Static members of class WORKSHEET_DATAITEM:
+double WORKSHEET_DATAITEM::m_WSunits2Iu = 1.0;
+DPOINT WORKSHEET_DATAITEM::m_RB_Corner;
+DPOINT WORKSHEET_DATAITEM::m_LT_Corner;
+double WORKSHEET_DATAITEM::m_DefaultLineWidth = 0.0;
+DSIZE WORKSHEET_DATAITEM::m_DefaultTextSize( TB_DEFAULT_TEXTSIZE, TB_DEFAULT_TEXTSIZE );
+double WORKSHEET_DATAITEM::m_DefaultTextThickness = 0.0;
+bool WORKSHEET_DATAITEM::m_SpecialMode = false;
+EDA_COLOR_T WORKSHEET_DATAITEM::m_Color = RED; // the default color to draw items
+EDA_COLOR_T WORKSHEET_DATAITEM::m_AltColor = RED; // an alternate color to draw items
+EDA_COLOR_T WORKSHEET_DATAITEM::m_SelectedColor = BROWN; // the color to draw selected items
+
+// The constructor:
+WORKSHEET_DATAITEM::WORKSHEET_DATAITEM( WS_ItemType aType )
+{
+ m_type = aType;
+ m_flags = 0;
+ m_RepeatCount = 1;
+ m_IncrementLabel = 1;
+ m_LineWidth = 0;
+}
+
+// move item to aPosition
+// starting point is moved to aPosition
+// the Ending point is moved to a position which keeps the item size
+// (if both coordinates have the same corner reference)
+// MoveToUi and MoveTo takes the graphic position (i.e relative to the left top
+// paper corner
+void WORKSHEET_DATAITEM::MoveToUi( wxPoint aPosition )
+{
+ DPOINT pos_mm;
+ pos_mm.x = aPosition.x / m_WSunits2Iu;
+ pos_mm.y = aPosition.y / m_WSunits2Iu;
+
+ MoveTo( pos_mm );
+}
+
+void WORKSHEET_DATAITEM::MoveTo( DPOINT aPosition )
+{
+ DPOINT vector = aPosition - GetStartPos();
+ DPOINT endpos = vector + GetEndPos();
+
+ MoveStartPointTo( aPosition );
+ MoveEndPointTo( endpos );
+}
+
+/* move the starting point of the item to a new position
+ * aPosition = the new position of the starting point, in mm
+ */
+void WORKSHEET_DATAITEM::MoveStartPointTo( DPOINT aPosition )
+{
+ DPOINT position;
+
+ // Calculate the position of the starting point
+ // relative to the reference corner
+ // aPosition is the position relative to the right top paper corner
+ switch( m_Pos.m_Anchor )
+ {
+ case RB_CORNER:
+ position = m_RB_Corner - aPosition;
+ break;
+
+ case RT_CORNER:
+ position.x = m_RB_Corner.x - aPosition.x;
+ position.y = aPosition.y - m_LT_Corner.y;
+ break;
+
+ case LB_CORNER:
+ position.x = aPosition.x - m_LT_Corner.x;
+ position.y = m_RB_Corner.y - aPosition.y;
+ break;
+
+ case LT_CORNER:
+ position = aPosition - m_LT_Corner;
+ break;
+ }
+
+ m_Pos.m_Pos = position;
+}
+
+/* move the starting point of the item to a new position
+ * aPosition = the new position of the starting point in graphic units
+ */
+void WORKSHEET_DATAITEM::MoveStartPointToUi( wxPoint aPosition )
+{
+ DPOINT pos_mm;
+ pos_mm.x = aPosition.x / m_WSunits2Iu;
+ pos_mm.y = aPosition.y / m_WSunits2Iu;
+
+ MoveStartPointTo( pos_mm );
+}
+
+/**
+ * move the ending point of the item to a new position
+ * has meaning only for items defined by 2 points
+ * (segments and rectangles)
+ * aPosition = the new position of the ending point, in mm
+ */
+void WORKSHEET_DATAITEM::MoveEndPointTo( DPOINT aPosition )
+{
+ DPOINT position;
+
+ // Calculate the position of the starting point
+ // relative to the reference corner
+ // aPosition is the position relative to the right top paper corner
+ switch( m_End.m_Anchor )
+ {
+ case RB_CORNER:
+ position = m_RB_Corner - aPosition;
+ break;
+
+ case RT_CORNER:
+ position.x = m_RB_Corner.x - aPosition.x;
+ position.y = aPosition.y - m_LT_Corner.y;
+ break;
+
+ case LB_CORNER:
+ position.x = aPosition.x - m_LT_Corner.x;
+ position.y = m_RB_Corner.y - aPosition.y;
+ break;
+
+ case LT_CORNER:
+ position = aPosition - m_LT_Corner;
+ break;
+ }
+
+ // Modify m_End only for items having 2 coordinates
+ switch( GetType() )
+ {
+ case WS_SEGMENT:
+ case WS_RECT:
+ m_End.m_Pos = position;
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* move the ending point of the item to a new position
+ * has meaning only for items defined by 2 points
+ * (segments and rectangles)
+ * aPosition = the new position of the ending point in graphic units
+ */
+void WORKSHEET_DATAITEM::MoveEndPointToUi( wxPoint aPosition )
+{
+ DPOINT pos_mm;
+ pos_mm.x = aPosition.x / m_WSunits2Iu;
+ pos_mm.y = aPosition.y / m_WSunits2Iu;
+
+ MoveEndPointTo( pos_mm );
+}
+
+const DPOINT WORKSHEET_DATAITEM::GetStartPos( int ii ) const
+{
+ DPOINT pos;
+ pos.x = m_Pos.m_Pos.x + ( m_IncrementVector.x * ii );
+ pos.y = m_Pos.m_Pos.y + ( m_IncrementVector.y * ii );
+
+ switch( m_Pos.m_Anchor )
+ {
+ case RB_CORNER: // right bottom corner
+ pos = m_RB_Corner - pos;
+ break;
+
+ case RT_CORNER: // right top corner
+ pos.x = m_RB_Corner.x - pos.x;
+ pos.y = m_LT_Corner.y + pos.y;
+ break;
+
+ case LB_CORNER: // left bottom corner
+ pos.x = m_LT_Corner.x + pos.x;
+ pos.y = m_RB_Corner.y - pos.y;
+ break;
+
+ case LT_CORNER: // left top corner
+ pos = m_LT_Corner + pos;
+ break;
+ }
+
+ return pos;
+}
+
+const wxPoint WORKSHEET_DATAITEM::GetStartPosUi( int ii ) const
+{
+ DPOINT pos = GetStartPos( ii );
+ pos = pos * m_WSunits2Iu;
+ return wxPoint( KiROUND(pos.x), KiROUND(pos.y) );
+}
+
+const DPOINT WORKSHEET_DATAITEM::GetEndPos( int ii ) const
+{
+ DPOINT pos;
+ pos.x = m_End.m_Pos.x + ( m_IncrementVector.x * ii );
+ pos.y = m_End.m_Pos.y + ( m_IncrementVector.y * ii );
+ switch( m_End.m_Anchor )
+ {
+ case RB_CORNER: // right bottom corner
+ pos = m_RB_Corner - pos;
+ break;
+
+ case RT_CORNER: // right top corner
+ pos.x = m_RB_Corner.x - pos.x;
+ pos.y = m_LT_Corner.y + pos.y;
+ break;
+
+ case LB_CORNER: // left bottom corner
+ pos.x = m_LT_Corner.x + pos.x;
+ pos.y = m_RB_Corner.y - pos.y;
+ break;
+
+ case LT_CORNER: // left top corner
+ pos = m_LT_Corner + pos;
+ break;
+ }
+
+ return pos;
+}
+
+const wxPoint WORKSHEET_DATAITEM::GetEndPosUi( int ii ) const
+{
+ DPOINT pos = GetEndPos( ii );
+ pos = pos * m_WSunits2Iu;
+ return wxPoint( KiROUND(pos.x), KiROUND(pos.y) );
+}
+
+
+bool WORKSHEET_DATAITEM::IsInsidePage( int ii ) const
+{
+ DPOINT pos = GetStartPos( ii );
+
+ for( int kk = 0; kk < 1; kk++ )
+ {
+ if( m_RB_Corner.x < pos.x || m_LT_Corner.x > pos.x )
+ return false;
+
+ if( m_RB_Corner.y < pos.y || m_LT_Corner.y > pos.y )
+ return false;
+
+ pos = GetEndPos( ii );
+ }
+
+ return true;
+}
+
+const wxString WORKSHEET_DATAITEM::GetClassName() const
+{
+ wxString name;
+ switch( GetType() )
+ {
+ case WS_TEXT: name = wxT("Text"); break;
+ case WS_SEGMENT: name = wxT("Line"); break;
+ case WS_RECT: name = wxT("Rect"); break;
+ case WS_POLYPOLYGON: name = wxT("Poly"); break;
+ case WS_BITMAP: name = wxT("Bitmap"); break;
+ }
+
+ return name;
+}
+
+/* return 0 if the item has no specific option for page 1
+ * 1 if the item is only on page 1
+ * -1 if the item is not on page 1
+ */
+int WORKSHEET_DATAITEM::GetPage1Option()
+{
+ if(( m_flags & PAGE1OPTION) == PAGE1OPTION_NOTONPAGE1 )
+ return -1;
+
+ if(( m_flags & PAGE1OPTION) == PAGE1OPTION_PAGE1ONLY )
+ return 1;
+
+ return 0;
+}
+
+/* Set the option for page 1
+ * aChoice = 0 if the item has no specific option for page 1
+ * > 0 if the item is only on page 1
+ * < 0 if the item is not on page 1
+ */
+void WORKSHEET_DATAITEM::SetPage1Option( int aChoice )
+{
+ ClearFlags( PAGE1OPTION );
+
+ if( aChoice > 0)
+ SetFlags( PAGE1OPTION_PAGE1ONLY );
+
+ else if( aChoice < 0)
+ SetFlags( PAGE1OPTION_NOTONPAGE1 );
+
+}
+
+
+WORKSHEET_DATAITEM_POLYPOLYGON::WORKSHEET_DATAITEM_POLYPOLYGON() :
+ WORKSHEET_DATAITEM( WS_POLYPOLYGON )
+{
+ m_Orient = 0.0;
+}
+
+const DPOINT WORKSHEET_DATAITEM_POLYPOLYGON::GetCornerPosition( unsigned aIdx,
+ int aRepeat ) const
+{
+ DPOINT pos = m_Corners[aIdx];
+
+ // Rotation:
+ RotatePoint( &pos.x, &pos.y, m_Orient * 10 );
+ pos += GetStartPos( aRepeat );
+ return pos;
+}
+
+void WORKSHEET_DATAITEM_POLYPOLYGON::SetBoundingBox()
+{
+ if( m_Corners.size() == 0 )
+ {
+ m_minCoord.x = m_maxCoord.x = 0.0;
+ m_minCoord.y = m_maxCoord.y = 0.0;
+ return;
+ }
+
+ DPOINT pos;
+ pos = m_Corners[0];
+ RotatePoint( &pos.x, &pos.y, m_Orient * 10 );
+ m_minCoord = m_maxCoord = pos;
+
+ for( unsigned ii = 1; ii < m_Corners.size(); ii++ )
+ {
+ pos = m_Corners[ii];
+ RotatePoint( &pos.x, &pos.y, m_Orient * 10 );
+
+ if( m_minCoord.x > pos.x )
+ m_minCoord.x = pos.x;
+
+ if( m_minCoord.y > pos.y )
+ m_minCoord.y = pos.y;
+
+ if( m_maxCoord.x < pos.x )
+ m_maxCoord.x = pos.x;
+
+ if( m_maxCoord.y < pos.y )
+ m_maxCoord.y = pos.y;
+ }
+}
+
+bool WORKSHEET_DATAITEM_POLYPOLYGON::IsInsidePage( int ii ) const
+{
+ DPOINT pos = GetStartPos( ii );
+ pos += m_minCoord; // left top pos of bounding box
+
+ if( m_LT_Corner.x > pos.x || m_LT_Corner.y > pos.y )
+ return false;
+
+ pos = GetStartPos( ii );
+ pos += m_maxCoord; // rignt bottom pos of bounding box
+
+ if( m_RB_Corner.x < pos.x || m_RB_Corner.y < pos.y )
+ return false;
+
+ return true;
+}
+
+const wxPoint WORKSHEET_DATAITEM_POLYPOLYGON::GetCornerPositionUi( unsigned aIdx,
+ int aRepeat ) const
+{
+ DPOINT pos = GetCornerPosition( aIdx, aRepeat );
+ pos = pos * m_WSunits2Iu;
+ return wxPoint( int(pos.x), int(pos.y) );
+}
+
+WORKSHEET_DATAITEM_TEXT::WORKSHEET_DATAITEM_TEXT( const wxString& aTextBase ) :
+ WORKSHEET_DATAITEM( WS_TEXT )
+{
+ m_TextBase = aTextBase;
+ m_IncrementLabel = 1;
+ m_Hjustify = GR_TEXT_HJUSTIFY_LEFT;
+ m_Vjustify = GR_TEXT_VJUSTIFY_CENTER;
+ m_Orient = 0.0;
+ m_LineWidth = 0.0; // 0.0 means use default value
+}
+
+void WORKSHEET_DATAITEM_TEXT::TransfertSetupToGraphicText( WS_DRAW_ITEM_TEXT* aGText )
+{
+ aGText->SetHorizJustify( m_Hjustify ) ;
+ aGText->SetVertJustify( m_Vjustify );
+ aGText->SetOrientation( m_Orient * 10 ); // graphic text orient unit = 0.1 degree
+}
+
+void WORKSHEET_DATAITEM_TEXT::IncrementLabel( int aIncr )
+{
+ int last = m_TextBase.Len() -1;
+
+ wxChar lbchar = m_TextBase[last];
+ m_FullText = m_TextBase;
+ m_FullText.RemoveLast();
+
+ if( lbchar >= '0' && lbchar <= '9' )
+ // A number is expected:
+ m_FullText << (int)( aIncr + lbchar - '0' );
+ else
+ m_FullText << (wxChar) ( aIncr + lbchar );
+}
+
+// Replace the '\''n' sequence by EOL
+// and the sequence '\''\' by only one '\' in m_FullText
+// if m_FullText is a multiline text (i.e.contains '\n') return true
+bool WORKSHEET_DATAITEM_TEXT::ReplaceAntiSlashSequence()
+{
+ bool multiline = false;
+
+ for( unsigned ii = 0; ii < m_FullText.Len(); ii++ )
+ {
+ if( m_FullText[ii] == '\n' )
+ multiline = true;
+
+ else if( m_FullText[ii] == '\\' )
+ {
+ if( ++ii >= m_FullText.Len() )
+ break;
+
+ if( m_FullText[ii] == '\\' )
+ {
+ // a double \\ sequence is replaced by a single \ char
+ m_FullText.Remove(ii, 1);
+ ii--;
+ }
+ else if( m_FullText[ii] == 'n' )
+ {
+ // Replace the "\n" sequence by a EOL char
+ multiline = true;
+ m_FullText[ii] = '\n';
+ m_FullText.Remove(ii-1, 1);
+ ii--;
+ }
+ }
+ }
+
+ return multiline;
+}
+
+void WORKSHEET_DATAITEM_TEXT::SetConstrainedTextSize()
+{
+ m_ConstrainedTextSize = m_TextSize;
+
+ if( m_ConstrainedTextSize.x == 0 )
+ m_ConstrainedTextSize.x = m_DefaultTextSize.x;
+
+ if( m_ConstrainedTextSize.y == 0 )
+ m_ConstrainedTextSize.y = m_DefaultTextSize.y;
+
+ if( m_BoundingBoxSize.x || m_BoundingBoxSize.y )
+ {
+ int linewidth = 0;
+ // to know the X and Y size of the line, we should use
+ // EDA_TEXT::GetTextBox()
+ // but this function uses integers
+ // So, to avoid truncations with our unit in mm, use microns.
+ wxSize size_micron;
+ size_micron.x = KiROUND( m_ConstrainedTextSize.x * 1000.0 );
+ size_micron.y = KiROUND( m_ConstrainedTextSize.y * 1000.0 );
+ WS_DRAW_ITEM_TEXT dummy( WS_DRAW_ITEM_TEXT( this, this->m_FullText,
+ wxPoint(0,0),
+ size_micron,
+ linewidth, BLACK,
+ IsItalic(), IsBold() ) );
+ dummy.SetMultilineAllowed( true );
+ TransfertSetupToGraphicText( &dummy );
+ EDA_RECT rect = dummy.GetTextBox();
+ DSIZE size;
+ size.x = rect.GetWidth() / 1000.0;
+ size.y = rect.GetHeight() / 1000.0;
+
+ if( m_BoundingBoxSize.x && size.x > m_BoundingBoxSize.x )
+ m_ConstrainedTextSize.x *= m_BoundingBoxSize.x / size.x;
+
+ if( m_BoundingBoxSize.y && size.y > m_BoundingBoxSize.y )
+ m_ConstrainedTextSize.y *= m_BoundingBoxSize.y / size.y;
+ }
+}
+
+/* set the pixel scale factor of the bitmap
+ * this factor depend on the application internal unit
+ * and the PPI bitmap factor
+ * the pixel scale factor should be initialized before drawing the bitmap
+ */
+void WORKSHEET_DATAITEM_BITMAP::SetPixelScaleFactor()
+{
+ if( m_ImageBitmap )
+ {
+ // m_WSunits2Iu is the page layout unit to application internal unit
+ // i.e. the mm to to application internal unit
+ // however the bitmap definition is always known in pixels per inches
+ double scale = m_WSunits2Iu * 25.4 / m_ImageBitmap->GetPPI();
+ m_ImageBitmap->SetPixelScaleFactor( scale );
+ }
+}
+
+/* return the PPI of the bitmap
+ */
+int WORKSHEET_DATAITEM_BITMAP::GetPPI() const
+{
+ if( m_ImageBitmap )
+ return m_ImageBitmap->GetPPI() / m_ImageBitmap->m_Scale;
+
+ return 300;
+}
+
+/*adjust the PPI of the bitmap
+ */
+void WORKSHEET_DATAITEM_BITMAP::SetPPI( int aBitmapPPI )
+{
+ if( m_ImageBitmap )
+ m_ImageBitmap->m_Scale = (double) m_ImageBitmap->GetPPI() / aBitmapPPI;
+}
+
diff --git a/common/page_layout/class_worksheet_layout.cpp b/common/page_layout/class_worksheet_layout.cpp
new file mode 100644
index 0000000..94c11a1
--- /dev/null
+++ b/common/page_layout/class_worksheet_layout.cpp
@@ -0,0 +1,248 @@
+/**
+ * @file class_worksheet_layout.cpp
+ * @brief description of graphic items and texts to build a title block
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+ * the class WORKSHEET_DATAITEM (and derived ) defines
+ * a basic shape of a page layout ( frame references and title block )
+ * The list of these items is stored in a WORKSHEET_LAYOUT instance.
+ *
+ *
+ * These items cannot be drawn or plot "as this". they should be converted
+ * to a "draw list". When building the draw list:
+ * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST
+ * coordinates are converted to draw/plot coordinates.
+ * texts are expanded if they contain format symbols.
+ * Items with m_RepeatCount > 1 are created m_RepeatCount times
+ *
+ * the WORKSHEET_LAYOUT is created only once.
+ * the WS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn
+ *
+ * the WORKSHEET_LAYOUT instance is created from a S expression which
+ * describes the page layout (can be the default page layout or a custom file).
+ */
+
+#include <fctsys.h>
+#include <kiface_i.h>
+#include <drawtxt.h>
+#include <worksheet.h>
+#include <class_title_block.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+
+
+// The layout shape used in the application
+// It is accessible by WORKSHEET_LAYOUT::GetTheInstance()
+static WORKSHEET_LAYOUT wksTheInstance;
+static WORKSHEET_LAYOUT* wksAltInstance;
+
+WORKSHEET_LAYOUT::WORKSHEET_LAYOUT()
+{
+ m_allowVoidList = false;
+ m_leftMargin = 10.0; // the left page margin in mm
+ m_rightMargin = 10.0; // the right page margin in mm
+ m_topMargin = 10.0; // the top page margin in mm
+ m_bottomMargin = 10.0; // the bottom page margin in mm
+}
+
+/* static function: returns the instance of WORKSHEET_LAYOUT
+ * used in the application
+ */
+WORKSHEET_LAYOUT& WORKSHEET_LAYOUT::GetTheInstance()
+{
+ if( wksAltInstance )
+ return *wksAltInstance;
+ else
+ return wksTheInstance;
+}
+
+/**
+ * static function: Set an alternate instance of WORKSHEET_LAYOUT
+ * mainly used in page setting dialog
+ * @param aLayout = the alternate page layout.
+ * if null, restore the basic page layout
+ */
+void WORKSHEET_LAYOUT::SetAltInstance( WORKSHEET_LAYOUT* aLayout )
+{
+ wksAltInstance = aLayout;
+}
+
+
+void WORKSHEET_LAYOUT::SetLeftMargin( double aMargin )
+{
+ m_leftMargin = aMargin; // the left page margin in mm
+}
+
+
+void WORKSHEET_LAYOUT::SetRightMargin( double aMargin )
+{
+ m_rightMargin = aMargin; // the right page margin in mm
+}
+
+
+void WORKSHEET_LAYOUT::SetTopMargin( double aMargin )
+{
+ m_topMargin = aMargin; // the top page margin in mm
+}
+
+
+void WORKSHEET_LAYOUT::SetBottomMargin( double aMargin )
+{
+ m_bottomMargin = aMargin; // the bottom page margin in mm
+}
+
+
+void WORKSHEET_LAYOUT::ClearList()
+{
+ for( unsigned ii = 0; ii < m_list.size(); ii++ )
+ delete m_list[ii];
+ m_list.clear();
+}
+
+
+void WORKSHEET_LAYOUT::Insert( WORKSHEET_DATAITEM* aItem, unsigned aIdx )
+{
+ if ( aIdx >= GetCount() )
+ Append( aItem );
+ else
+ m_list.insert( m_list.begin() + aIdx, aItem );
+}
+
+
+bool WORKSHEET_LAYOUT::Remove( unsigned aIdx )
+{
+ if ( aIdx >= GetCount() )
+ return false;
+ m_list.erase( m_list.begin() + aIdx );
+ return true;
+}
+
+
+bool WORKSHEET_LAYOUT::Remove( WORKSHEET_DATAITEM* aItem )
+{
+ unsigned idx = 0;
+
+ while( idx < m_list.size() )
+ {
+ if( m_list[idx] == aItem )
+ break;
+
+ idx++;
+ }
+
+ return Remove( idx );
+}
+
+
+int WORKSHEET_LAYOUT::GetItemIndex( WORKSHEET_DATAITEM* aItem ) const
+{
+ unsigned idx = 0;
+ while( idx < m_list.size() )
+ {
+ if( m_list[idx] == aItem )
+ return (int) idx;
+
+ idx++;
+ }
+
+ return -1;
+}
+
+/* return the item from its index aIdx, or NULL if does not exist
+ */
+WORKSHEET_DATAITEM* WORKSHEET_LAYOUT::GetItem( unsigned aIdx ) const
+{
+ if( aIdx < m_list.size() )
+ return m_list[aIdx];
+ else
+ return NULL;
+}
+
+
+const wxString WORKSHEET_LAYOUT::MakeShortFileName( const wxString& aFullFileName,
+ const wxString& aProjectPath )
+{
+ wxString shortFileName = aFullFileName;
+ wxFileName fn = aFullFileName;
+
+ if( fn.IsRelative() )
+ return shortFileName;
+
+ if( ! aProjectPath.IsEmpty() && aFullFileName.StartsWith( aProjectPath ) )
+ {
+ fn.MakeRelativeTo( aProjectPath );
+ shortFileName = fn.GetFullPath();
+ return shortFileName;
+ }
+
+ wxString fileName = Kiface().KifaceSearch().FindValidPath( fn.GetFullName() );
+
+ if( !fileName.IsEmpty() )
+ {
+ fn = fileName;
+ shortFileName = fn.GetFullName();
+ return shortFileName;
+ }
+
+ return shortFileName;
+}
+
+
+const wxString WORKSHEET_LAYOUT::MakeFullFileName( const wxString& aShortFileName,
+ const wxString& aProjectPath )
+{
+ wxString fullFileName = ExpandEnvVarSubstitutions( aShortFileName );
+
+ if( fullFileName.IsEmpty() )
+ return fullFileName;
+
+ wxFileName fn = fullFileName;
+
+ if( fn.IsAbsolute() )
+ return fullFileName;
+
+ // the path is not absolute: search it in project path, and then in
+ // kicad valid paths
+ if( !aProjectPath.IsEmpty() )
+ {
+ fn.MakeAbsolute( aProjectPath );
+
+ if( wxFileExists( fn.GetFullPath() ) )
+ return fn.GetFullPath();
+ }
+
+ fn = fullFileName;
+ wxString name = Kiface().KifaceSearch().FindValidPath( fn.GetFullName() );
+
+ if( !name.IsEmpty() )
+ fullFileName = name;
+
+ return fullFileName;
+}
diff --git a/common/page_layout/page_layout_default_description.cpp b/common/page_layout/page_layout_default_description.cpp
new file mode 100644
index 0000000..fd8ba46
--- /dev/null
+++ b/common/page_layout/page_layout_default_description.cpp
@@ -0,0 +1,164 @@
+/**
+ * @file common/page_layout/page_layout_default_description.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* keyword used in page layout description are listed
+ * in page_layout_reader.keywords file
+ */
+
+/*
+ * Items use coordinates.
+ * A coordinate is defined relative to a page corner
+ * A coordinate is the X pos, the Y pos, and the corner which is the coordinate origin
+ * the default is the bottom right corner
+ * example: (start 10 0 ltcorner) or (start 20 10)
+ * The direction depends on the corner: a positive coordinate define a point
+ * from the corner origin, to the opposite corner.
+ *
+ * Items are defined by a name, coordinates in mm and some attributes,
+ * and can be repeated.
+ * for instance (repeat 2) (incrx 2) (incry 2) repeat the item 2 times,
+ * and coordinates are incremented by 2 on X direction, and 2 on Y direction
+ * Comments are allowed. they are inside (), and start by the keyword comment
+ * example:
+ * (comment rect around the title block)
+ *
+ * Lines and rect are defined by 2 coordinates start and end, and attributes.
+ * Attributes are linewidth and repeat parameters.
+ * example:
+ * (line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )
+ * (rect (comment rect around the title block) (linewidth 0.15) (start 110 34) (end 2 2) )
+ *
+ * Texts are defined by the text (between quotes), the position, and attributes
+ * example
+ * "(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )"
+ * the text can be rotated by (rotation <value>) with value = rot angle in degrees
+ * (font (size 1.3 1.3) bold italic) defines a specific size,
+ * with bold and italic options
+ * (justify <justif keyword>) controls the text justification (the default is left)
+ * justif keyword is center, left, right, top and bottom
+ * (justify center top) is a text centered on X axis and top aligned on vertical axis
+ * The text size can be constrained:
+ * (maxlen <value>) and (maxheight <value>) force the actual text x and/or y size to be
+ * reduced to limit the text height to the maxheight value,
+ * and the full text x size to the maxlen value.
+ * If the actual text size is smaller than limits, its size is not modified.
+ *
+ * Texts can include a format symbol, a la printf.
+ * At run time these format symbols will be replaced by their actual value.
+ *
+ * format symbols are:
+ *
+ * %% = replaced by %
+ * %K = Kicad version
+ * %Z = paper format name (A4, USLetter ...)
+ * %Y = company name
+ * %D = date
+ * %R = revision
+ * %S = sheet number
+ * %N = number of sheets
+ * %Cx = comment (x = 0 to 9 to identify the comment)
+ * %F = filename
+ * %P = sheet path (sheet full name)
+ * %T = title
+ *
+ * example:
+ * (tbtext \"Size: %Z\" ...) displays "Size A4" or Size USLetter"
+ *
+ * Poly Polygons
+ * Set of filled polygons are supported.
+ *
+ * The main purpose is to allow logos, or complex shapes
+ * They support the repeat and rotation options
+ * They are defined by
+ * (polygon (position ..) <rotation> <linewidth>
+ * the parameter linewidth defines the pen size used to draw/plot
+ * the polygon outlines (default = 0)
+ * example:
+ * (polygon (pos 134 18 rbcorner) (rotate 20) (linewidth 0.00254)
+ *
+ * and a list of corners like
+ * (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932)
+ * .... )
+ *
+ * each sequence like
+ * (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932)
+ * .... )
+ * defines a polygon.
+ * Each coordinate is relative to the polygon position.
+ * Therefore a "polygon" is in fact a set of polygons, of a poly polygon
+ *
+ */
+
+#include <worksheet.h> // defaultPageLayout
+
+
+// height of the band reference grid 2.0 mm
+// worksheet frame reference text size 1.3 mm
+// default text size 1.5 mm
+// default line width 0.15 mm
+// frame ref pitch 50 mm
+
+// export defaultPageLayout:
+extern const char defaultPageLayout[];
+
+// Default page layout (sizes are in mm)
+const char defaultPageLayout[] = "( page_layout\n"
+ "(setup (textsize 1.5 1.5) (linewidth 0.15) (textlinewidth 0.15)\n"
+ "(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))\n"
+ "(rect (comment \"rect around the title block\") (linewidth 0.15) (start 110 34) (end 2 2) )\n"
+ "(rect (start 0 0 ltcorner) (end 0 0 rbcorner) (repeat 2) (incrx 2) (incry 2) )\n"
+ "(line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )\n"
+ "(tbtext \"1\" (pos 25 1 ltcorner) (font (size 1.3 1.3))(repeat 100) (incrx 50) )\n"
+ "(line (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50) )\n"
+ "(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )\n"
+ "(line (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50) )\n"
+ "(tbtext \"A\" (pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center)(repeat 100) (incry 50) )\n"
+ "(line (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50) )\n"
+ "(tbtext \"A\" (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) )\n"
+ "(tbtext \"Date: %D\" (pos 87 6.9) )\n"
+ "(line (start 110 5.5) (end 2 5.5) )\n"
+ "(tbtext \"%K\" (pos 109 4.1) (comment \"Kicad version\" ) )\n"
+ "(line (start 110 8.5) (end 2 8.5) )\n"
+ "(tbtext \"Rev: %R\" (pos 24 6.9)(font bold)(justify left) )\n"
+ "(tbtext \"Size: %Z\" (comment \"Paper format name\")(pos 109 6.9) )\n"
+ "(tbtext \"Id: %S/%N\" (comment \"Sheet id\")(pos 24 4.1) )\n"
+ "(line (start 110 12.5) (end 2 12.5) )\n"
+ "(tbtext \"Title: %T\" (pos 109 10.7)(font bold italic (size 2 2)) )\n"
+ "(tbtext \"File: %F\" (pos 109 14.3) )\n"
+ "(line (start 110 18.5) (end 2 18.5) )\n"
+ "(tbtext \"Sheet: %P\" (pos 109 17) )\n"
+ "(tbtext \"%Y\" (comment \"Company name\") (pos 109 20)(font bold) )\n"
+ "(tbtext \"%C0\" (comment \"Comment 0\") (pos 109 23) )\n"
+ "(tbtext \"%C1\" (comment \"Comment 1\") (pos 109 26) )\n"
+ "(tbtext \"%C2\" (comment \"Comment 2\") (pos 109 29) )\n"
+ "(tbtext \"%C3\" (comment \"Comment 3\") (pos 109 32) )\n"
+ "(line (start 90 8.5) (end 90 5.5) )\n"
+ "(line (start 26 8.5) (end 26 2) )\n"
+ ")\n"
+;
diff --git a/common/page_layout/page_layout_graphic_items.cpp b/common/page_layout/page_layout_graphic_items.cpp
new file mode 100644
index 0000000..c927e93
--- /dev/null
+++ b/common/page_layout/page_layout_graphic_items.cpp
@@ -0,0 +1,423 @@
+/**
+ * @file page_layout_graphic_items.cpp
+ * @brief description of graphic items and texts to build a title block
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+ * the class WORKSHEET_DATAITEM (and WORKSHEET_DATAITEM_TEXT) defines
+ * a basic shape of a page layout ( frame references and title block )
+ * Basic shapes are line, rect and texts
+ * the WORKSHEET_DATAITEM coordinates units is the mm, and are relative to
+ * one of 4 page corners.
+ *
+ * These items cannot be drawn or plot "as this". they should be converted
+ * to a "draw list" (WS_DRAW_ITEM_BASE and derived items)
+
+ * The list of these items is stored in a WORKSHEET_LAYOUT instance.
+ *
+ * When building the draw list:
+ * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST
+ * coordinates are converted to draw/plot coordinates.
+ * texts are expanded if they contain format symbols.
+ * Items with m_RepeatCount > 1 are created m_RepeatCount times
+ *
+ * the WORKSHEET_LAYOUT is created only once.
+ * the WS_DRAW_ITEM_LIST is created each time the page layout is plotted/drawn
+ *
+ * the WORKSHEET_LAYOUT instance is created from a S expression which
+ * describes the page layout (can be the default page layout or a custom file).
+ */
+
+#include <fctsys.h>
+#include <drawtxt.h>
+#include <worksheet.h>
+#include <class_title_block.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+
+/* a helper function to draw graphic symbols at start point or end point of
+ * an item.
+ * The start point symbol is a filled rectangle
+ * The start point symbol is a filled circle
+ */
+inline void drawMarker( EDA_RECT* aClipBox, wxDC* aDC,
+ const wxPoint& aPos, int aSize, bool aEndPointShape = false )
+{
+ int markerHalfSize = aSize/2;
+
+ if( aEndPointShape )
+ GRFilledCircle( aClipBox, aDC, aPos.x, aPos.y, markerHalfSize,
+ 0, GREEN, GREEN );
+ else
+ GRFilledRect( aClipBox, aDC,
+ aPos.x - markerHalfSize, aPos.y - markerHalfSize,
+ aPos.x + markerHalfSize, aPos.y + markerHalfSize,
+ 0, GREEN, GREEN );
+}
+
+/* Draws the item list created by BuildWorkSheetGraphicList
+ * aClipBox = the clipping rect, or NULL if no clipping
+ * aDC = the current Device Context
+ * The not selected items are drawn first (most of items)
+ * The selected items are drawn after (usually 0 or 1)
+ * to be sure they are seen, even for overlapping items
+ */
+void WS_DRAW_ITEM_LIST::Draw( EDA_RECT* aClipBox, wxDC* aDC )
+{
+ // The not selected items are drawn first (most of items)
+ for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() )
+ {
+ if( item->GetParent() && item->GetParent()->IsSelected() )
+ continue;
+
+ item->DrawWsItem( aClipBox, aDC );
+ }
+
+ // The selected items are drawn after (usually 0 or 1)
+ int markerSize = WORKSHEET_DATAITEM::GetMarkerSizeUi();
+
+ for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() )
+ {
+ if( !item->GetParent() || !item->GetParent()->IsSelected() )
+ continue;
+
+ item->DrawWsItem( aClipBox, aDC );
+
+ switch( item->GetType() )
+ {
+ case WS_DRAW_ITEM_BASE::wsg_line:
+ {
+ WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item;
+
+ if( markerSize )
+ {
+ drawMarker( aClipBox, aDC, line->GetStart(), markerSize );
+ drawMarker( aClipBox, aDC, line->GetEnd(), markerSize, true );
+ }
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_rect:
+ {
+ WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item;
+
+ if( markerSize )
+ {
+ drawMarker( aClipBox, aDC, rect->GetStart(), markerSize );
+ drawMarker( aClipBox, aDC, rect->GetEnd(), markerSize, true );
+ }
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_text:
+ {
+ WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item;
+
+ if( markerSize )
+ drawMarker( aClipBox, aDC, text->GetTextPosition(),
+ markerSize );
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_poly:
+ {
+ WS_DRAW_ITEM_POLYGON* poly = (WS_DRAW_ITEM_POLYGON*) item;
+
+ if( markerSize )
+ {
+ drawMarker( aClipBox, aDC, poly->GetPosition(),
+ markerSize );
+ }
+ }
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_bitmap:
+ {
+ WS_DRAW_ITEM_BITMAP* bitmap = (WS_DRAW_ITEM_BITMAP*) item;
+
+ if( markerSize )
+ {
+ drawMarker( aClipBox, aDC, bitmap->GetPosition(),
+ markerSize );
+ }
+ }
+ break;
+ }
+ }
+}
+
+WS_DRAW_ITEM_TEXT::WS_DRAW_ITEM_TEXT( WORKSHEET_DATAITEM* aParent,
+ wxString& aText, wxPoint aPos, wxSize aSize,
+ int aPenWidth, EDA_COLOR_T aColor,
+ bool aItalic, bool aBold ) :
+ WS_DRAW_ITEM_BASE( aParent, wsg_text, aColor ), EDA_TEXT( aText )
+{
+ SetTextPosition( aPos );
+ SetSize( aSize );
+ SetThickness( aPenWidth );
+ SetItalic( aItalic );
+ SetBold( aBold );
+}
+
+void WS_DRAW_ITEM_TEXT::DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC )
+{
+ Draw( aClipBox, aDC, wxPoint(0,0),
+ GetColor(), UNSPECIFIED_DRAWMODE, FILLED, UNSPECIFIED_COLOR );
+}
+
+// return true if the point aPosition is on the text
+bool WS_DRAW_ITEM_TEXT::HitTest( const wxPoint& aPosition) const
+{
+ return EDA_TEXT::TextHitTest( aPosition, 0 );
+}
+
+/* return true if the point aPosition is on the starting point of this item
+ */
+bool WS_DRAW_ITEM_TEXT::HitTestStartPoint( const wxPoint& aPosition)
+{
+ wxPoint pos = GetTextPosition();
+
+ if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 &&
+ std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
+void WS_DRAW_ITEM_POLYGON::DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC )
+{
+ GRPoly( aClipBox, aDC,
+ m_Corners.size(), &m_Corners[0],
+ IsFilled() ? FILLED_SHAPE : NO_FILL,
+ GetPenWidth(),
+ GetColor(), GetColor() );
+}
+
+// return true if the point aPosition is inside one of polygons
+#include <polygon_test_point_inside.h>
+bool WS_DRAW_ITEM_POLYGON::HitTest( const wxPoint& aPosition) const
+{
+ return TestPointInsidePolygon( &m_Corners[0],
+ m_Corners.size(), aPosition );
+}
+
+/* return true if the point aPosition is on the starting point of this item
+ */
+bool WS_DRAW_ITEM_POLYGON::HitTestStartPoint( const wxPoint& aPosition)
+{
+ wxPoint pos = GetPosition();
+
+ if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 &&
+ std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
+void WS_DRAW_ITEM_RECT::DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC )
+{
+ GRRect( aClipBox, aDC,
+ GetStart().x, GetStart().y,
+ GetEnd().x, GetEnd().y,
+ GetPenWidth(), GetColor() );
+}
+
+// return true if the point aPosition is on the rect outline
+bool WS_DRAW_ITEM_RECT::HitTest( const wxPoint& aPosition) const
+{
+ int dist = GetPenWidth()/2;
+ wxPoint start = GetStart();
+ wxPoint end;
+ end.x = GetEnd().x;
+ end.y = start.y;
+
+ // Upper line
+ if( TestSegmentHit( aPosition, start, end, dist ) )
+ return true;
+
+ // Right line
+ start = end;
+ end.y = GetEnd().y;
+ if( TestSegmentHit( aPosition, start, end, dist ) )
+ return true;
+
+ // lower line
+ start = end;
+ end.x = GetStart().x;
+ if( TestSegmentHit( aPosition, start, end, dist ) )
+ return true;
+
+ // left line
+ start = end;
+ end = GetStart();
+ if( TestSegmentHit( aPosition, start, end, dist ) )
+ return true;
+
+ return false;
+}
+
+/* return true if the point aPosition is on the starting point of this item
+ */
+bool WS_DRAW_ITEM_RECT::HitTestStartPoint( const wxPoint& aPosition)
+{
+ wxPoint dist = GetStart() - aPosition;
+
+ if( std::abs( dist.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 &&
+ std::abs( dist.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
+/* return true if the point aPosition is on the ending point of this item
+ */
+bool WS_DRAW_ITEM_RECT::HitTestEndPoint( const wxPoint& aPosition)
+{
+ wxPoint pos = GetEnd();
+
+ int dist = (int) hypot( pos.x - aPosition.x, pos.y - aPosition.y );
+
+ if( dist <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
+void WS_DRAW_ITEM_LINE::DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC )
+{
+ GRLine( aClipBox, aDC, GetStart(), GetEnd(),
+ GetPenWidth(), GetColor() );
+}
+
+// return true if the point aPosition is on the text
+bool WS_DRAW_ITEM_LINE::HitTest( const wxPoint& aPosition) const
+{
+ return TestSegmentHit( aPosition, GetStart(), GetEnd(), GetPenWidth()/2 );
+}
+
+/* return true if the point aPosition is on the starting point of this item
+ */
+bool WS_DRAW_ITEM_LINE::HitTestStartPoint( const wxPoint& aPosition)
+{
+ wxPoint dist = GetStart() - aPosition;
+
+ if( std::abs( dist.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 &&
+ std::abs( dist.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
+/* return true if the point aPosition is on the ending point of this item
+ */
+bool WS_DRAW_ITEM_LINE::HitTestEndPoint( const wxPoint& aPosition)
+{
+ wxPoint dist = GetEnd() - aPosition;
+
+ if( std::abs( dist.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 &&
+ std::abs( dist.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
+/* Locate graphic items in m_graphicList at location aPosition
+ * aList = the list of items found
+ * aPosition is the position (in user units) to locate items
+ */
+void WS_DRAW_ITEM_LIST::Locate( std::vector <WS_DRAW_ITEM_BASE*>& aList,
+ const wxPoint& aPosition)
+{
+ for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() )
+ {
+ item->m_Flags &= ~(LOCATE_STARTPOINT|LOCATE_ENDPOINT);
+ bool found = false;
+
+ if( item->HitTestStartPoint ( aPosition ) )
+ {
+ item->m_Flags |= LOCATE_STARTPOINT;
+ found = true;
+ }
+
+ if( item->HitTestEndPoint ( aPosition ) )
+ {
+ item->m_Flags |= LOCATE_ENDPOINT;
+ found = true;
+ }
+
+ if( found || item->HitTest( aPosition ) )
+ {
+ aList.push_back( item );
+ }
+ }
+}
+
+/** The function to draw a WS_DRAW_ITEM_BITMAP
+ */
+void WS_DRAW_ITEM_BITMAP::DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC )
+{
+ WORKSHEET_DATAITEM_BITMAP* parent = (WORKSHEET_DATAITEM_BITMAP*)GetParent();
+
+ if( parent->m_ImageBitmap )
+ {
+ parent->m_ImageBitmap->DrawBitmap( NULL, aDC, m_pos );
+ }
+}
+
+/**
+ * Virtual function
+ * return true if the point aPosition is on bitmap
+ */
+bool WS_DRAW_ITEM_BITMAP::HitTest( const wxPoint& aPosition) const
+{
+ const WORKSHEET_DATAITEM_BITMAP* parent = static_cast<const WORKSHEET_DATAITEM_BITMAP*>( GetParent() );
+
+ if( parent->m_ImageBitmap == NULL )
+ return false;
+
+ EDA_RECT rect = parent->m_ImageBitmap->GetBoundingBox();
+ rect.Move( m_pos );
+ return rect.Contains( aPosition );
+}
+
+
+/**
+ * return true if the point aPosition is on the reference point of this item.
+ */
+bool WS_DRAW_ITEM_BITMAP::HitTestStartPoint( const wxPoint& aPosition)
+{
+ wxPoint dist = m_pos - aPosition;
+
+ if( std::abs( dist.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 &&
+ std::abs( dist.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 )
+ return true;
+
+ return false;
+}
+
diff --git a/common/page_layout/page_layout_reader.cpp b/common/page_layout/page_layout_reader.cpp
new file mode 100644
index 0000000..a282989
--- /dev/null
+++ b/common/page_layout/page_layout_reader.cpp
@@ -0,0 +1,875 @@
+/**
+ * @file common/page_layout/page_layout_reader.cpp
+ * @brief read an S expression of description of graphic items and texts
+ * to build a title block and page layout
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <base_struct.h>
+#include <worksheet.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <page_layout_reader_lexer.h>
+
+
+using namespace TB_READER_T;
+
+/**
+ * Class PAGE_LAYOUT_READER_PARSER
+ * holds data and functions pertinent to parsing a S-expression file
+ * for a WORKSHEET_LAYOUT.
+ */
+class PAGE_LAYOUT_READER_PARSER : public PAGE_LAYOUT_READER_LEXER
+{
+public:
+ PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource );
+ void Parse( WORKSHEET_LAYOUT* aLayout )
+ throw( PARSE_ERROR, IO_ERROR );
+
+private:
+
+ /**
+ * Function parseInt
+ * parses an integer and constrains it between two values.
+ * @param aMin is the smallest return value.
+ * @param aMax is the largest return value.
+ * @return int - the parsed integer.
+ */
+ int parseInt( int aMin, int aMax );
+
+ /**
+ * Function parseDouble
+ * parses a double
+ * @return double - the parsed double.
+ */
+ double parseDouble();
+
+ void parseSetup( WORKSHEET_LAYOUT* aLayout ) throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * parse a graphic item starting by "(line" or "(rect" and read parameters.
+ */
+ void parseGraphic( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * parse a text item starting by "(tbtext" and read parameters.
+ */
+ void parseText( WORKSHEET_DATAITEM_TEXT * aItem ) throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * parse a polygon item starting by "( polygon" and read parameters.
+ * the list of corners included in this description is read by parsePolyOutline
+ */
+ void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
+ throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * parse a list of corners starting by "( pts" and read coordinates.
+ */
+ void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
+ throw( IO_ERROR, PARSE_ERROR );
+
+
+ /**
+ * parse a bitmap item starting by "( bitmap" and read parameters.
+ */
+ void parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
+ throw( IO_ERROR, PARSE_ERROR );
+
+ void parseCoordinate( POINT_COORD& aCoord) throw( IO_ERROR, PARSE_ERROR );
+ void readOption( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
+ void readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem ) throw( IO_ERROR, PARSE_ERROR );
+};
+
+// PCB_PLOT_PARAMS_PARSER
+
+PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource ) :
+ PAGE_LAYOUT_READER_LEXER( aLine, aSource )
+{
+}
+
+
+void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout )
+ throw( PARSE_ERROR, IO_ERROR )
+{
+ T token;
+ WORKSHEET_DATAITEM * item;
+
+ LOCALE_IO toggle;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ if( token == T_page_layout )
+ continue;
+
+ switch( token )
+ {
+ case T_setup: // Defines default values for graphic items
+ parseSetup( aLayout );
+ break;
+
+ case T_line:
+ item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_SEGMENT );
+ parseGraphic( item );
+ aLayout->Append( item );
+ break;
+
+ case T_rect:
+ item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_RECT );
+ parseGraphic( item );
+ aLayout->Append( item );
+ break;
+
+ case T_polygon:
+ item = new WORKSHEET_DATAITEM_POLYPOLYGON();
+ parsePolygon( (WORKSHEET_DATAITEM_POLYPOLYGON*) item );
+ aLayout->Append( item );
+ break;
+
+ case T_bitmap:
+ item = new WORKSHEET_DATAITEM_BITMAP( NULL );
+ parseBitmap( (WORKSHEET_DATAITEM_BITMAP*) item );
+ aLayout->Append( item );
+ break;
+
+ case T_tbtext:
+ NeedSYMBOLorNUMBER();
+ item = new WORKSHEET_DATAITEM_TEXT( FromUTF8() );
+ parseText( (WORKSHEET_DATAITEM_TEXT*) item );
+ aLayout->Append( item );
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+void PAGE_LAYOUT_READER_PARSER::parseSetup( WORKSHEET_LAYOUT* aLayout )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ switch( token )
+ {
+ case T_LEFT:
+ break;
+
+ case T_linewidth:
+ WORKSHEET_DATAITEM::m_DefaultLineWidth = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_textsize:
+ WORKSHEET_DATAITEM::m_DefaultTextSize.x = parseDouble();
+ WORKSHEET_DATAITEM::m_DefaultTextSize.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_textlinewidth:
+ WORKSHEET_DATAITEM::m_DefaultTextThickness = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_left_margin:
+ aLayout->SetLeftMargin( parseDouble() );
+ NeedRIGHT();
+ break;
+
+ case T_right_margin:
+ aLayout->SetRightMargin( parseDouble() );
+ NeedRIGHT();
+ break;
+
+ case T_top_margin:
+ aLayout->SetTopMargin( parseDouble() );
+ NeedRIGHT();
+ break;
+
+ case T_bottom_margin:
+ aLayout->SetBottomMargin( parseDouble() );
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ switch( token )
+ {
+ case T_comment:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Info = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_pos:
+ parseCoordinate( aItem->m_Pos );
+ break;
+
+ case T_name:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Name = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_option:
+ readOption( aItem );
+ break;
+
+ case T_pts:
+ parsePolyOutline( aItem );
+ aItem->CloseContour();
+ break;
+
+ case T_rotate:
+ aItem->m_Orient = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_repeat:
+ aItem->m_RepeatCount = parseInt( -1, 100 );
+ NeedRIGHT();
+ break;
+
+ case T_incrx:
+ aItem->m_IncrementVector.x = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_incry:
+ aItem->m_IncrementVector.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_linewidth:
+ aItem->m_LineWidth = parseDouble();
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+
+ aItem->SetBoundingBox();
+}
+
+void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ DPOINT corner;
+ T token;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ switch( token )
+ {
+ case T_xy:
+ corner.x = parseDouble();
+ corner.y = parseDouble();
+ aItem->AppendCorner( corner );
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+#include <wx/mstream.h>
+void PAGE_LAYOUT_READER_PARSER::parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+ BITMAP_BASE* image = new BITMAP_BASE;
+ aItem->m_ImageBitmap = image;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ switch( token )
+ {
+ case T_name:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Name = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_pos:
+ parseCoordinate( aItem->m_Pos );
+ break;
+
+ case T_repeat:
+ aItem->m_RepeatCount = parseInt( -1, 100 );
+ NeedRIGHT();
+ break;
+
+ case T_incrx:
+ aItem->m_IncrementVector.x = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_incry:
+ aItem->m_IncrementVector.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_linewidth:
+ aItem->m_LineWidth = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_scale:
+ aItem->m_ImageBitmap->m_Scale = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_pngdata:
+ readPngdata( aItem );
+ break;
+
+ case T_option:
+ readOption( aItem );
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+void PAGE_LAYOUT_READER_PARSER::readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ std::string tmp;
+ T token;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ switch( token )
+ {
+ case T_data:
+ NeedSYMBOLorNUMBER();
+ tmp += CurStr();
+ tmp += "\n";
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+
+ tmp += "EndData";
+
+ wxString msg;
+ STRING_LINE_READER reader( tmp, wxT("Png kicad_wks data") );
+ if( ! aItem->m_ImageBitmap->LoadData( reader, msg ) )
+ {
+ wxLogMessage(msg);
+ }
+}
+
+
+void PAGE_LAYOUT_READER_PARSER::readOption( WORKSHEET_DATAITEM * aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ switch( token )
+ {
+ case T_page1only:
+ aItem->SetPage1Option( 1 );
+ break;
+
+ case T_notonpage1:
+ aItem->SetPage1Option( -1 );
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+
+void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+ else
+ {
+ // If an other token than T_LEFT is read here, this is an error
+ // however, due to a old bug in kicad, the token T_end can be found
+ // without T_LEFT in a very few .wks files (perhaps only one in a demo).
+ // So this ugly hack disables the error detection.
+ if( token != T_end )
+ Unexpected( CurText() );
+ }
+
+ switch( token )
+ {
+ case T_comment:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Info = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_option:
+ readOption( aItem );
+ break;
+
+ case T_name:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Name = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_start:
+ parseCoordinate( aItem->m_Pos );
+ break;
+
+ case T_end:
+ parseCoordinate( aItem->m_End );
+ break;
+
+ case T_repeat:
+ aItem->m_RepeatCount = parseInt( -1, 100 );
+ NeedRIGHT();
+ break;
+
+ case T_incrx:
+ aItem->m_IncrementVector.x = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_incry:
+ aItem->m_IncrementVector.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_linewidth:
+ aItem->m_LineWidth = parseDouble();
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+
+void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem )
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ switch( token )
+ {
+ case T_comment:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Info = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_option:
+ readOption( aItem );
+ break;
+
+ case T_name:
+ NeedSYMBOLorNUMBER();
+ aItem->m_Name = FromUTF8();
+ NeedRIGHT();
+ break;
+
+ case T_pos:
+ parseCoordinate( aItem->m_Pos );
+ break;
+
+ case T_repeat:
+ aItem->m_RepeatCount = parseInt( -1, 100 );
+ NeedRIGHT();
+ break;
+
+ case T_incrx:
+ aItem->m_IncrementVector.x = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_incry:
+ aItem->m_IncrementVector.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_incrlabel:
+ aItem->m_IncrementLabel = parseInt(INT_MIN, INT_MAX);
+ NeedRIGHT();
+ break;
+
+ case T_maxlen:
+ aItem->m_BoundingBoxSize.x = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_maxheight:
+ aItem->m_BoundingBoxSize.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_font:
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ switch( token )
+ {
+ case T_LEFT:
+ break;
+
+ case T_bold:
+ aItem->SetBold( true );
+ break;
+
+ case T_italic:
+ aItem->SetItalic( true );
+ break;
+
+ case T_size:
+ aItem->m_TextSize.x = parseDouble();
+ aItem->m_TextSize.y = parseDouble();
+ NeedRIGHT();
+ break;
+
+ case T_linewidth:
+ aItem->m_LineWidth = parseDouble();
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+ break;
+
+ case T_justify:
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ break;
+
+ switch( token )
+ {
+ case T_center:
+ aItem->m_Hjustify = GR_TEXT_HJUSTIFY_CENTER;
+ aItem->m_Vjustify = GR_TEXT_VJUSTIFY_CENTER;
+ break;
+
+ case T_left:
+ aItem->m_Hjustify = GR_TEXT_HJUSTIFY_LEFT;
+ break;
+
+ case T_right:
+ aItem->m_Hjustify = GR_TEXT_HJUSTIFY_RIGHT;
+ break;
+
+ case T_top:
+ aItem->m_Vjustify = GR_TEXT_VJUSTIFY_TOP;
+ break;
+
+ case T_bottom:
+ aItem->m_Vjustify = GR_TEXT_VJUSTIFY_BOTTOM;
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+ break;
+
+ case T_rotate:
+ aItem->m_Orient = parseDouble();
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+// parse an expression like " 25 1 ltcorner)"
+void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord)
+ throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+
+ aCoord.m_Pos.x = parseDouble();
+ aCoord.m_Pos.y = parseDouble();
+
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ switch( token )
+ {
+ case T_ltcorner:
+ aCoord.m_Anchor = LT_CORNER; // left top corner
+ break;
+
+ case T_lbcorner:
+ aCoord.m_Anchor = LB_CORNER; // left bottom corner
+ break;
+
+ case T_rbcorner:
+ aCoord.m_Anchor = RB_CORNER; // right bottom corner
+ break;
+
+ case T_rtcorner:
+ aCoord.m_Anchor = RT_CORNER; // right top corner
+ break;
+
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ }
+}
+
+int PAGE_LAYOUT_READER_PARSER::parseInt( int aMin, int aMax )
+{
+ T token = NextTok();
+
+ if( token != T_NUMBER )
+ Expecting( T_NUMBER );
+
+ int val = atoi( CurText() );
+
+ if( val < aMin )
+ val = aMin;
+ else if( val > aMax )
+ val = aMax;
+
+ return val;
+}
+
+
+double PAGE_LAYOUT_READER_PARSER::parseDouble()
+{
+ T token = NextTok();
+
+ if( token != T_NUMBER )
+ Expecting( T_NUMBER );
+
+ double val = strtod( CurText(), NULL );
+
+ return val;
+}
+
+// defaultPageLayout is the default page layout description
+// using the S expr.
+// see page_layout_default_shape.cpp
+extern const char defaultPageLayout[];
+
+void WORKSHEET_LAYOUT::SetDefaultLayout()
+{
+ ClearList();
+ PAGE_LAYOUT_READER_PARSER lp_parser( defaultPageLayout, wxT( "default page" ) );
+
+ try
+ {
+ lp_parser.Parse( this );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxLogMessage( ioe.errorText );
+ }
+}
+
+/**
+ * Populates the list from a S expr description stored in a string
+ * @param aPageLayout = the S expr string
+ */
+void WORKSHEET_LAYOUT::SetPageLayout( const char* aPageLayout, bool Append )
+{
+ if( ! Append )
+ ClearList();
+
+ PAGE_LAYOUT_READER_PARSER lp_parser( aPageLayout, wxT( "Sexpr_string" ) );
+
+ try
+ {
+ lp_parser.Parse( this );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxLogMessage( ioe.errorText );
+ }
+}
+
+#include <wx/file.h>
+
+// SetLayout() try to load the aFullFileName custom layout file,
+// if aFullFileName is empty, try the filename defined by the
+// environment variable KICAD_WKSFILE (a *.kicad_wks filename).
+// if does not exists, loads the default page layout.
+void WORKSHEET_LAYOUT::SetPageLayout( const wxString& aFullFileName, bool Append )
+{
+ wxString fullFileName = aFullFileName;
+
+ if( !Append )
+ {
+ if( fullFileName.IsEmpty() )
+ wxGetEnv( wxT( "KICAD_WKSFILE" ), &fullFileName );
+
+ if( fullFileName.IsEmpty() || !wxFileExists( fullFileName ) )
+ {
+ #if 0
+ if( !fullFileName.IsEmpty() )
+ {
+ wxLogMessage( wxT("Page layout file <%s> not found"),
+ fullFileName.GetData() );
+ }
+ #endif
+ SetDefaultLayout();
+ return;
+ }
+ }
+
+ wxFile wksFile( fullFileName );
+
+ if( ! wksFile.IsOpened() )
+ {
+ if( !Append )
+ SetDefaultLayout();
+ return;
+ }
+
+ int filelen = wksFile.Length();
+ char * buffer = new char[filelen+10];
+
+ if( wksFile.Read( buffer, filelen ) != filelen )
+ wxLogMessage( _("The file <%s> was not fully read"),
+ fullFileName.GetData() );
+ else
+ {
+ buffer[filelen]=0;
+
+ if( ! Append )
+ ClearList();
+
+ PAGE_LAYOUT_READER_PARSER pl_parser( buffer, fullFileName );
+
+ try
+ {
+ pl_parser.Parse( this );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxLogMessage( ioe.errorText );
+ }
+ }
+
+ delete[] buffer;
+}
+
diff --git a/common/page_layout/page_layout_reader.keywords b/common/page_layout/page_layout_reader.keywords
new file mode 100644
index 0000000..625dd59
--- /dev/null
+++ b/common/page_layout/page_layout_reader.keywords
@@ -0,0 +1,48 @@
+page_layout
+setup
+left_margin
+right_margin
+top_margin
+bottom_margin
+linewidth
+textlinewidth
+textsize
+comment
+option
+page1only
+notonpage1
+line
+rect
+polygon
+bitmap
+tbtext
+ltcorner
+lbcorner
+rbcorner
+rtcorner
+name
+pos
+start
+end
+scale
+pngdata
+data
+pts
+xy
+maxlen
+maxheight
+font
+bold
+italic
+size
+justify
+left
+center
+right
+top
+bottom
+rotate
+repeat
+incrx
+incry
+incrlabel
diff --git a/common/page_layout/title_block_shapes.cpp b/common/page_layout/title_block_shapes.cpp
new file mode 100644
index 0000000..c7a8385
--- /dev/null
+++ b/common/page_layout/title_block_shapes.cpp
@@ -0,0 +1,258 @@
+/**
+ * @file title_block_shapes.cpp
+ * @brief description of graphic items and texts to build a title block
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+ * the class WORKSHEET_DATAITEM (and WORKSHEET_DATAITEM_TEXT) defines
+ * a basic shape of a page layout ( frame references and title block )
+ * Basic shapes are line, rect and texts
+ * the WORKSHEET_DATAITEM coordinates units is the mm, and are relative to
+ * one of 4 page corners.
+ *
+ * These items cannot be drawn or plot "as this". they should be converted
+ * to a "draw list" (WS_DRAW_ITEM_BASE and derived items)
+
+ * The list of these items is stored in a WORKSHEET_LAYOUT instance.
+ *
+ * When building the draw list:
+ * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST
+ * coordinates are converted to draw/plot coordinates.
+ * texts are expanded if they contain format symbols.
+ * Items with m_RepeatCount > 1 are created m_RepeatCount times
+ *
+ * the WORKSHEET_LAYOUT is created only once.
+ * the WS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn
+ *
+ * the WORKSHEET_LAYOUT instance is created from a S expression which
+ * describes the page layout (can be the default page layout or a custom file).
+ */
+
+#include <fctsys.h>
+#include <drawtxt.h>
+#include <class_page_info.h>
+#include <worksheet.h>
+#include <class_title_block.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+
+
+void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(
+ const PAGE_INFO& aPageInfo,
+ const TITLE_BLOCK& aTitleBlock,
+ EDA_COLOR_T aColor, EDA_COLOR_T aAltColor )
+{
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+
+ #define milsTomm (25.4/1000)
+
+ m_titleBlock = &aTitleBlock;
+ m_paperFormat = &aPageInfo.GetType();
+
+ wxPoint LTmargin( Mm2mils( pglayout.GetLeftMargin() ),
+ Mm2mils( pglayout.GetTopMargin() ) );
+ wxPoint RBmargin( Mm2mils( pglayout.GetRightMargin() ),
+ Mm2mils( pglayout.GetBottomMargin() ) );
+
+ SetMargins( LTmargin, RBmargin );
+ SetPageSize( aPageInfo.GetSizeMils() );
+
+ // Build the basic layout shape, if the layout list is empty
+ if( pglayout.GetCount() == 0 && !pglayout.VoidListAllowed() )
+ pglayout.SetPageLayout();
+
+ WORKSHEET_DATAITEM::m_WSunits2Iu = m_milsToIu / milsTomm;
+ WORKSHEET_DATAITEM::m_Color = aColor; // the default color to draw items
+ WORKSHEET_DATAITEM::m_AltColor = aAltColor; // an alternate color to draw items
+
+ // Left top corner position
+ DPOINT lt_corner;
+ lt_corner.x = pglayout.GetLeftMargin();
+ lt_corner.y = pglayout.GetTopMargin();
+ WORKSHEET_DATAITEM::m_LT_Corner = lt_corner;
+
+ // Right bottom corner position
+ DPOINT rb_corner;
+ rb_corner.x = (m_pageSize.x*milsTomm) - pglayout.GetRightMargin();
+ rb_corner.y = (m_pageSize.y*milsTomm) - pglayout.GetBottomMargin();
+ WORKSHEET_DATAITEM::m_RB_Corner = rb_corner;
+
+ WS_DRAW_ITEM_TEXT* gtext;
+ int pensize;
+
+ for( unsigned ii = 0; ; ii++ )
+ {
+ WORKSHEET_DATAITEM* wsItem = pglayout.GetItem( ii );
+
+ if( wsItem == NULL )
+ break;
+
+ // Generate it only if the page option allows this
+ if( wsItem->GetPage1Option() < 0 // Not on page 1
+ && m_sheetNumber <= 1 )
+ continue;
+
+ if( wsItem->GetPage1Option() > 0 // Only on page 1
+ && m_sheetNumber > 1 )
+ continue;
+
+ EDA_COLOR_T color = wsItem->GetItemColor();
+
+ pensize = wsItem->GetPenSizeUi();
+
+ switch( wsItem->GetType() )
+ {
+ case WORKSHEET_DATAITEM::WS_TEXT:
+ {
+ WORKSHEET_DATAITEM_TEXT * wsText = (WORKSHEET_DATAITEM_TEXT*)wsItem;
+ bool multilines = false;
+
+ if( wsText->m_SpecialMode )
+ wsText->m_FullText = wsText->m_TextBase;
+ else
+ {
+ wsText->m_FullText = BuildFullText( wsText->m_TextBase );
+ multilines = wsText->ReplaceAntiSlashSequence();
+ }
+
+ if( wsText->m_FullText.IsEmpty() )
+ break;
+
+ if( pensize == 0 )
+ pensize = m_penSize;
+
+ wsText->SetConstrainedTextSize();
+ wxSize textsize;
+
+ textsize.x = KiROUND( wsText->m_ConstrainedTextSize.x
+ * WORKSHEET_DATAITEM::m_WSunits2Iu );
+ textsize.y = KiROUND( wsText->m_ConstrainedTextSize.y
+ * WORKSHEET_DATAITEM::m_WSunits2Iu );
+
+ if( wsText->IsBold())
+ pensize = GetPenSizeForBold( std::min( textsize.x, textsize.y ) );
+
+ for( int jj = 0; jj < wsText->m_RepeatCount; jj++)
+ {
+ if( jj && ! wsText->IsInsidePage( jj ) )
+ continue;
+
+ Append( gtext = new WS_DRAW_ITEM_TEXT( wsText, wsText->m_FullText,
+ wsText->GetStartPosUi( jj ),
+ textsize,
+ pensize, color,
+ wsText->IsItalic(),
+ wsText->IsBold() ) );
+ gtext->SetMultilineAllowed( multilines );
+ wsText->TransfertSetupToGraphicText( gtext );
+
+ // Increment label for the next text
+ // (has no meaning for multiline texts)
+ if( wsText->m_RepeatCount > 1 && !multilines )
+ wsText->IncrementLabel( (jj+1)*wsText->m_IncrementLabel);
+ }
+ }
+ break;
+
+ case WORKSHEET_DATAITEM::WS_SEGMENT:
+ if( pensize == 0 )
+ pensize = m_penSize;
+
+ for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ )
+ {
+ if( jj && ! wsItem->IsInsidePage( jj ) )
+ continue;
+ Append( new WS_DRAW_ITEM_LINE( wsItem, wsItem->GetStartPosUi( jj ),
+ wsItem->GetEndPosUi( jj ),
+ pensize, color ) );
+ }
+ break;
+
+ case WORKSHEET_DATAITEM::WS_RECT:
+ if( pensize == 0 )
+ pensize = m_penSize;
+
+ for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ )
+ {
+ if( jj && ! wsItem->IsInsidePage( jj ) )
+ break;
+
+ Append( new WS_DRAW_ITEM_RECT( wsItem, wsItem->GetStartPosUi( jj ),
+ wsItem->GetEndPosUi( jj ),
+ pensize, color ) );
+ }
+ break;
+
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
+ {
+ WORKSHEET_DATAITEM_POLYPOLYGON * wspoly =
+ (WORKSHEET_DATAITEM_POLYPOLYGON*) wsItem;
+ for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ )
+ {
+ if( jj && ! wsItem->IsInsidePage( jj ) )
+ continue;
+
+ for( int kk = 0; kk < wspoly->GetPolyCount(); kk++ )
+ {
+ const bool fill = true;
+ WS_DRAW_ITEM_POLYGON* poly = new WS_DRAW_ITEM_POLYGON( wspoly,
+ wspoly->GetStartPosUi( jj ),
+ fill, pensize, color );
+ Append( poly );
+
+ // Create polygon outline
+ unsigned ist = wspoly->GetPolyIndexStart( kk );
+ unsigned iend = wspoly->GetPolyIndexEnd( kk );
+ while( ist <= iend )
+ poly->m_Corners.push_back(
+ wspoly->GetCornerPositionUi( ist++, jj ) );
+
+ }
+ }
+ }
+ break;
+
+ case WORKSHEET_DATAITEM::WS_BITMAP:
+
+ ((WORKSHEET_DATAITEM_BITMAP*)wsItem)->SetPixelScaleFactor();
+
+ for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ )
+ {
+ if( jj && ! wsItem->IsInsidePage( jj ) )
+ continue;
+
+ Append( new WS_DRAW_ITEM_BITMAP( wsItem,
+ wsItem->GetStartPosUi( jj ) ) );
+ }
+ break;
+
+ }
+ }
+}
+
diff --git a/common/painter.cpp b/common/painter.cpp
new file mode 100644
index 0000000..0d6b1f0
--- /dev/null
+++ b/common/painter.cpp
@@ -0,0 +1,76 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <painter.h>
+#include <gal/graphics_abstraction_layer.h>
+
+using namespace KIGFX;
+
+RENDER_SETTINGS::RENDER_SETTINGS()
+{
+ // Set the default initial values
+ m_highlightFactor = 0.5;
+ m_selectFactor = 0.5;
+ m_layerOpacity = 0.8;
+ m_highlightEnabled = false;
+ m_hiContrastEnabled = false;
+ m_hiContrastFactor = 0.2;
+ m_highlightNetcode = -1;
+ m_outlineWidth = 1;
+ m_worksheetLineWidth = 100000;
+
+ // Store the predefined colors used in KiCad in format used by GAL
+ for( int i = 0; i < NBCOLORS; i++ )
+ {
+ m_legacyColorMap[g_ColorRefs[i].m_Numcolor] = COLOR4D( (double) g_ColorRefs[i].m_Red / 255.0,
+ (double) g_ColorRefs[i].m_Green / 255.0,
+ (double) g_ColorRefs[i].m_Blue / 255.0,
+ m_layerOpacity );
+ }
+}
+
+
+RENDER_SETTINGS::~RENDER_SETTINGS()
+{
+}
+
+
+void RENDER_SETTINGS::update()
+{
+ m_hiContrastColor = COLOR4D( m_hiContrastFactor, m_hiContrastFactor, m_hiContrastFactor,
+ m_layerOpacity );
+}
+
+
+PAINTER::PAINTER( GAL* aGal ) :
+ m_gal( aGal ), m_brightenedColor( 0.0, 1.0, 0.0, 0.9 )
+{
+}
+
+
+PAINTER::~PAINTER()
+{
+}
diff --git a/common/pcb.keywords b/common/pcb.keywords
new file mode 100644
index 0000000..0126f56
--- /dev/null
+++ b/common/pcb.keywords
@@ -0,0 +1,207 @@
+#
+# This program source code file is part of KiCad, a free EDA CAD application.
+#
+# Copyright (C) 2012 CERN.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+# These are the keywords for the Pcbnew s-expression file format.
+
+add_net
+allowed
+angle
+arc
+arc_segments
+area
+arrow1a
+arrow1b
+arrow2a
+arrow2b
+at
+attr
+autoplace_cost90
+autoplace_cost180
+aux_axis_origin
+blind
+blind_buried_vias_allowed
+bold
+bottom
+center
+chamfer
+circle
+clearance
+comment
+company
+connect
+connect_pads
+copperpour
+crossbar
+date
+descr
+die_length
+dimension
+drawings
+drill
+edge
+edge_width
+effects
+end
+feature1
+feature2
+fill
+fill_segments
+filled_polygon
+fillet
+font
+fp_arc
+fp_circle
+fp_curve
+fp_line
+fp_poly
+fp_text
+full
+general
+grid_origin
+gr_arc
+gr_circle
+gr_curve
+gr_line
+gr_poly
+gr_text
+hatch
+hide
+italic
+justify
+keepout
+kicad_pcb
+last_trace_width
+layer
+layers
+left
+links
+locked
+micro
+min_thickness
+mirror
+mod_edge_width
+mod_text_size
+mod_text_width
+mode
+model
+module
+net
+net_class
+net_name
+nets
+no
+no_connects
+none
+not_allowed
+np_thru_hole
+offset
+oval
+pad
+pads
+pad_drill
+pad_size
+pad_to_mask_clearance
+solder_mask_min_width
+pad_to_paste_clearance
+pad_to_paste_clearance_ratio
+page
+path
+pcb_text_size
+pcb_text_width
+pcbplotparams
+placed
+plus
+polygon
+portrait
+priority
+pts
+radius
+rev
+rect
+rect_delta
+reference
+right
+rotate
+scale
+segment
+segment_width
+setup
+size
+smd
+smoothing
+solder_mask_margin
+solder_paste_margin
+solder_paste_margin_ratio
+solder_paste_ratio
+start
+status
+tags
+target
+title
+title_block
+tedit
+thermal_width
+thermal_gap
+thermal_bridge_width
+thickness
+top
+trace_width
+tracks
+trace_min
+trace_clearance
+trapezoid
+thru
+thru_hole
+thru_hole_only
+tstamp
+user
+user_trace_width
+user_via
+uvia_dia
+uvia_drill
+uvia_min_drill
+uvia_min_size
+uvia_size
+uvias_allowed
+value
+version
+via
+vias
+via_dia
+via_drill
+via_min_drill
+via_min_size
+via_size
+virtual
+visible_elements
+width
+x
+xy
+xyz
+yes
+zone
+zone_45_only
+zone_clearance
+zone_connect
+zone_type
+zones
diff --git a/common/pcb_plot_params.keywords b/common/pcb_plot_params.keywords
new file mode 100644
index 0000000..c64f70b
--- /dev/null
+++ b/common/pcb_plot_params.keywords
@@ -0,0 +1,30 @@
+drillshape
+excludeedgelayer
+false
+gerberprecision
+hpglpendiameter
+hpglpennumber
+hpglpenoverlay
+hpglpenspeed
+layerselection
+linewidth
+mirror
+mode
+outputdirectory
+outputformat
+padsonsilk
+pcbplotparams
+plotframeref
+plotinvisibletext
+plotreference
+plotvalue
+psa4output
+pscolor
+psnegative
+scaleselection
+subtractmaskfromsilk
+true
+useauxorigin
+usegerberextensions
+viasonmask
+usegerberattributes
diff --git a/common/pcbcommon.cpp b/common/pcbcommon.cpp
new file mode 100644
index 0000000..6147641
--- /dev/null
+++ b/common/pcbcommon.cpp
@@ -0,0 +1,74 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2008 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2008 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * This file contains some functions used in the PCB
+ * applications Pcbnew and CvPcb.
+ */
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <kiface_i.h>
+
+#include <pcbcommon.h>
+#include <class_board.h>
+#include <3d_viewer.h>
+
+
+wxString LayerMaskDescribe( const BOARD *aBoard, LSET aMask )
+{
+ // Try the single or no- layer case (easy)
+ LAYER_ID layer = aMask.ExtractLayer();
+
+ switch( (int) layer )
+ {
+ case UNSELECTED_LAYER:
+ return _( "No layers" );
+
+ case UNDEFINED_LAYER:
+ break;
+
+ default:
+ return aBoard->GetLayerName( layer );
+ }
+
+ // Try to be smart and useful, starting with outer copper
+ // (which are more important than internal ones)
+ wxString layerInfo;
+
+ if( aMask[F_Cu] )
+ AccumulateDescription( layerInfo, aBoard->GetLayerName( F_Cu ) );
+
+ if( aMask[B_Cu] )
+ AccumulateDescription( layerInfo, aBoard->GetLayerName( B_Cu ) );
+
+ if( ( aMask & LSET::InternalCuMask() ).any() )
+ AccumulateDescription( layerInfo, _("Internal" ) );
+
+ if( ( aMask & LSET::AllNonCuMask() ).any() )
+ AccumulateDescription( layerInfo, _("Non-copper" ) );
+
+ return layerInfo;
+}
+
diff --git a/common/pgm_base.cpp b/common/pgm_base.cpp
new file mode 100644
index 0000000..0728633
--- /dev/null
+++ b/common/pgm_base.cpp
@@ -0,0 +1,883 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file pgm_base.cpp
+ *
+ * @brief For the main application: init functions, and language selection
+ * (locale handling)
+ */
+
+#include <fctsys.h>
+#include <wx/html/htmlwin.h>
+#include <wx/fs_zip.h>
+#include <wx/dir.h>
+#include <wx/filename.h>
+#include <wx/snglinst.h>
+#include <wx/stdpaths.h>
+#include <wx/sysopt.h>
+#include <wx/richmsgdlg.h>
+
+#include <pgm_base.h>
+#include <wxstruct.h>
+#include <macros.h>
+#include <config_params.h>
+#include <id.h>
+#include <build_version.h>
+#include <hotkeys_basic.h>
+#include <online_help.h>
+#include <gestfich.h>
+#include <menus_helpers.h>
+#include <confirm.h>
+#include <dialog_env_var_config.h>
+
+
+#define KICAD_COMMON wxT( "kicad_common" )
+
+// some key strings used to store parameters in KICAD_COMMON
+
+const wxChar PGM_BASE::workingDirKey[] = wxT( "WorkingDir" ); // public
+
+static const wxChar languageCfgKey[] = wxT( "LanguageID" );
+static const wxChar pathEnvVariables[] = wxT( "EnvironmentVariables" );
+static const wxChar showEnvVarWarningDialog[] = wxT( "ShowEnvVarWarningDialog" );
+static const wxChar traceEnvVars[] = wxT( "KIENVVARS" );
+
+
+/**
+ * A small class to handle the list of existing translations.
+ * The locale translation is automatic.
+ * The selection of languages is mainly for maintainer's convenience
+ * To add a support to a new translation:
+ * create a new icon (flag of the country) (see Lang_Fr.xpm as an example)
+ * add a new item to s_Languages[].
+ */
+struct LANGUAGE_DESCR
+{
+ /// wxWidgets locale identifier (See wxWidgets doc)
+ int m_WX_Lang_Identifier;
+
+ /// KiCad identifier used in menu selection (See id.h)
+ int m_KI_Lang_Identifier;
+
+ /// The menu language icons
+ BITMAP_DEF m_Lang_Icon;
+
+ /// Labels used in menus
+ wxString m_Lang_Label;
+
+ /// Set to true if the m_Lang_Label must not be translated
+ bool m_DoNotTranslate;
+};
+
+
+/**
+ * Variable s_Languages
+ * Note: because this list is not created on the fly, wxTranslation
+ * must be called when a language name must be displayed after translation.
+ * Do not change this behavior, because m_Lang_Label is also used as key in config
+ */
+static LANGUAGE_DESCR s_Languages[] =
+{
+ // Default language
+ {
+ wxLANGUAGE_DEFAULT,
+ ID_LANGUAGE_DEFAULT,
+ lang_def_xpm,
+ _( "Default" )
+ },
+
+ // English language
+ {
+ wxLANGUAGE_ENGLISH,
+ ID_LANGUAGE_ENGLISH,
+ lang_en_xpm,
+ wxT( "English" ),
+ true
+ },
+
+ // French language
+ {
+ wxLANGUAGE_FRENCH,
+ ID_LANGUAGE_FRENCH,
+ lang_fr_xpm,
+ _( "French" )
+ },
+
+ // Finnish language
+ {
+ wxLANGUAGE_FINNISH,
+ ID_LANGUAGE_FINNISH,
+ lang_fi_xpm,
+ _( "Finnish" )
+ },
+
+ // Spanish language
+ {
+ wxLANGUAGE_SPANISH,
+ ID_LANGUAGE_SPANISH,
+ lang_es_xpm,
+ _( "Spanish" )
+ },
+
+ // Portuguese language
+ {
+ wxLANGUAGE_PORTUGUESE,
+ ID_LANGUAGE_PORTUGUESE,
+ lang_pt_xpm,
+ _( "Portuguese" )
+ },
+
+ // Italian language
+ {
+ wxLANGUAGE_ITALIAN,
+ ID_LANGUAGE_ITALIAN,
+ lang_it_xpm,
+ _( "Italian" )
+ },
+
+ // German language
+ {
+ wxLANGUAGE_GERMAN,
+ ID_LANGUAGE_GERMAN,
+ lang_de_xpm,
+ _( "German" )
+ },
+
+ // Greek language
+ {
+ wxLANGUAGE_GREEK,
+ ID_LANGUAGE_GREEK,
+ lang_gr_xpm,
+ _( "Greek" )
+ },
+
+ // Slovenian language
+ {
+ wxLANGUAGE_SLOVENIAN,
+ ID_LANGUAGE_SLOVENIAN,
+ lang_sl_xpm,
+ _( "Slovenian" )
+ },
+
+ // Hungarian language
+ {
+ wxLANGUAGE_HUNGARIAN,
+ ID_LANGUAGE_HUNGARIAN,
+ lang_hu_xpm,
+ _( "Hungarian" )
+ },
+
+ // Polish language
+ {
+ wxLANGUAGE_POLISH,
+ ID_LANGUAGE_POLISH,
+ lang_pl_xpm,
+ _( "Polish" )
+ },
+
+ // Czech language
+ {
+ wxLANGUAGE_CZECH,
+ ID_LANGUAGE_CZECH,
+ lang_cs_xpm,
+ _( "Czech" )
+ },
+
+ // Russian language
+ {
+ wxLANGUAGE_RUSSIAN,
+ ID_LANGUAGE_RUSSIAN,
+ lang_ru_xpm,
+ _( "Russian" )
+ },
+
+ // Korean language
+ {
+ wxLANGUAGE_KOREAN,
+ ID_LANGUAGE_KOREAN,
+ lang_ko_xpm,
+ _( "Korean" )
+ },
+
+ // Chinese simplified
+ {
+ wxLANGUAGE_CHINESE_SIMPLIFIED,
+ ID_LANGUAGE_CHINESE_SIMPLIFIED,
+ lang_chinese_xpm,
+ _( "Chinese simplified" )
+ },
+
+ // Catalan language
+ {
+ wxLANGUAGE_CATALAN,
+ ID_LANGUAGE_CATALAN,
+ lang_catalan_xpm,
+ _( "Catalan" )
+ },
+
+ // Dutch language
+ {
+ wxLANGUAGE_DUTCH,
+ ID_LANGUAGE_DUTCH,
+ lang_nl_xpm,
+ _( "Dutch" )
+ },
+
+ // Japanese language
+ {
+ wxLANGUAGE_JAPANESE,
+ ID_LANGUAGE_JAPANESE,
+ lang_jp_xpm,
+ _( "Japanese" )
+ },
+
+ // Bulgarian language
+ {
+ wxLANGUAGE_BULGARIAN,
+ ID_LANGUAGE_BULGARIAN,
+ lang_bg_xpm,
+ _( "Bulgarian" )
+ }
+};
+
+
+PGM_BASE::PGM_BASE()
+{
+ m_pgm_checker = NULL;
+ m_locale = NULL;
+ m_common_settings = NULL;
+
+ m_wx_app = NULL;
+ m_show_env_var_dialog = true;
+
+ setLanguageId( wxLANGUAGE_DEFAULT );
+
+ ForceSystemPdfBrowser( false );
+}
+
+
+PGM_BASE::~PGM_BASE()
+{
+ destroy();
+}
+
+
+void PGM_BASE::destroy()
+{
+ // unlike a normal destructor, this is designed to be called more than once safely:
+
+ delete m_common_settings;
+ m_common_settings = 0;
+
+ delete m_pgm_checker;
+ m_pgm_checker = 0;
+
+ delete m_locale;
+ m_locale = 0;
+}
+
+
+void PGM_BASE::SetEditorName( const wxString& aFileName )
+{
+ m_editor_name = aFileName;
+ wxASSERT( m_common_settings );
+ m_common_settings->Write( wxT( "Editor" ), aFileName );
+}
+
+
+const wxString& PGM_BASE::GetEditorName( bool aCanShowFileChooser )
+{
+ wxString editorname = m_editor_name;
+
+ if( !editorname )
+ {
+ if( !wxGetEnv( wxT( "EDITOR" ), &editorname ) )
+ {
+ // If there is no EDITOR variable set, try the desktop default
+#ifdef __WXMAC__
+ editorname = "/usr/bin/open";
+#elif __WXX11__
+ editorname = "/usr/bin/xdg-open";
+#endif
+ }
+ }
+
+ // If we still don't have an editor name show a dialog asking the user to select one
+ if( !editorname && aCanShowFileChooser )
+ {
+ DisplayInfoMessage( NULL,
+ _( "No default editor found, you must choose it" ) );
+
+ editorname = AskUserForPreferredEditor();
+ }
+
+ // If we finally have a new editor name request it to be copied to m_editor_name and
+ // saved to the preferences file.
+ if( !editorname.IsEmpty() )
+ SetEditorName( editorname );
+
+ // m_editor_name already has the same value that editorname, or empty if no editor was
+ // found/chosen.
+ return m_editor_name;
+}
+
+
+const wxString PGM_BASE::AskUserForPreferredEditor( const wxString& aDefaultEditor )
+{
+ // Create a mask representing the executable files in the current platform
+#ifdef __WINDOWS__
+ wxString mask( _( "Executable file (*.exe)|*.exe" ) );
+#else
+ wxString mask( _( "Executable file (*)|*" ) );
+#endif
+
+ // Extract the path, name and extension from the default editor (even if the editor's
+ // name was empty, this method will succeed and return empty strings).
+ wxString path, name, ext;
+ wxFileName::SplitPath( aDefaultEditor, &path, &name, &ext );
+
+ // Show the modal editor and return the file chosen (may be empty if the user cancels
+ // the dialog).
+ return EDA_FILE_SELECTOR( _( "Select Preferred Editor" ), path,
+ name, ext, mask,
+ NULL, wxFD_OPEN | wxFD_FILE_MUST_EXIST,
+ true );
+}
+
+
+bool PGM_BASE::initPgm()
+{
+ wxFileName pgm_name( App().argv[0] );
+
+ wxConfigBase::DontCreateOnDemand();
+
+ wxInitAllImageHandlers();
+
+ m_pgm_checker = new wxSingleInstanceChecker( pgm_name.GetName().Lower() + wxT( "-" ) +
+ wxGetUserId(), GetKicadLockFilePath() );
+
+ if( m_pgm_checker->IsAnotherRunning() )
+ {
+ wxString quiz = wxString::Format(
+ _( "%s is already running, Continue?" ),
+ GetChars( pgm_name.GetName() )
+ );
+
+ if( !IsOK( NULL, quiz ) )
+ return false;
+ }
+
+ // Init KiCad environment
+ // the environment variable KICAD (if exists) gives the kicad path:
+ // something like set KICAD=d:\kicad
+ bool isDefined = wxGetEnv( wxT( "KICAD" ), &m_kicad_env );
+
+ if( isDefined ) // ensure m_kicad_env ends by "/"
+ {
+ m_kicad_env.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
+
+ if( !m_kicad_env.IsEmpty() && m_kicad_env.Last() != '/' )
+ m_kicad_env += UNIX_STRING_DIR_SEP;
+ }
+
+ // Init parameters for configuration
+ App().SetVendorName( wxT( "KiCad" ) );
+ App().SetAppName( pgm_name.GetName().Lower() );
+
+ // Install some image handlers, mainly for help
+ if( wxImage::FindHandler( wxBITMAP_TYPE_PNG ) == NULL )
+ wxImage::AddHandler( new wxPNGHandler );
+
+ if( wxImage::FindHandler( wxBITMAP_TYPE_GIF ) == NULL )
+ wxImage::AddHandler( new wxGIFHandler );
+
+ if( wxImage::FindHandler( wxBITMAP_TYPE_JPEG ) == NULL )
+ wxImage::AddHandler( new wxJPEGHandler );
+
+ wxFileSystem::AddHandler( new wxZipFSHandler );
+
+ // Analyze the command line & initialize the binary path
+ setExecutablePath();
+
+ SetLanguagePath();
+
+ // OS specific instantiation of wxConfigBase derivative:
+ m_common_settings = GetNewConfig( KICAD_COMMON );
+
+ // Only define the default environment variable if they haven't been set in the
+ // .kicad_common configuration file.
+ if( m_common_settings && !m_common_settings->HasGroup( pathEnvVariables ) )
+ {
+ wxString envVarName = wxT( "KIGITHUB" );
+ ENV_VAR_ITEM envVarItem;
+ wxString envValue;
+ wxFileName tmpFileName;
+
+ envVarItem.SetValue( wxString( wxT( "https://github.com/KiCad" ) ) );
+ envVarItem.SetDefinedExternally( wxGetEnv( envVarName, NULL ) );
+ m_local_env_vars[ envVarName ] = envVarItem;
+
+ wxFileName baseSharePath;
+ baseSharePath.AssignDir( wxString( wxT( DEFAULT_INSTALL_PATH ) ) );
+
+#if !defined( __WXMAC__ )
+ baseSharePath.AppendDir( wxT( "share" ) );
+ baseSharePath.AppendDir( wxT( "kicad" ) );
+#endif
+
+ // KISYSMOD
+ envVarName = wxT( "KISYSMOD" );
+ if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
+ {
+ tmpFileName.AssignDir( envValue );
+ envVarItem.SetDefinedExternally( true );
+ }
+ else
+ {
+ tmpFileName = baseSharePath;
+ tmpFileName.AppendDir( wxT( "modules" ) );
+ envVarItem.SetDefinedExternally( false );
+ }
+ envVarItem.SetValue( tmpFileName.GetFullPath() );
+ m_local_env_vars[ envVarName ] = envVarItem;
+
+ // KISYS3DMOD
+ envVarName = wxT( "KISYS3DMOD" );
+ if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
+ {
+ tmpFileName.AssignDir( envValue );
+ envVarItem.SetDefinedExternally( true );
+ }
+ else
+ {
+ tmpFileName.AppendDir( wxT( "packages3d" ) );
+ envVarItem.SetDefinedExternally( false );
+ }
+ envVarItem.SetValue( tmpFileName.GetFullPath() );
+ m_local_env_vars[ envVarName ] = envVarItem;
+
+ // KICAD_PTEMPLATES
+ envVarName = wxT( "KICAD_PTEMPLATES" );
+ if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
+ {
+ tmpFileName.AssignDir( envValue );
+ envVarItem.SetDefinedExternally( true );
+ }
+ else
+ {
+ tmpFileName = baseSharePath;
+ tmpFileName.AppendDir( wxT( "template" ) );
+ envVarItem.SetDefinedExternally( false );
+ }
+ envVarItem.SetValue( tmpFileName.GetFullPath() );
+ m_local_env_vars[ envVarName ] = envVarItem;
+ }
+
+ ReadPdfBrowserInfos(); // needs m_common_settings
+
+ // Init user language *before* calling loadCommonSettings, because
+ // env vars could be incorrectly initialized on Linux
+ // (if the value contains some non ASCII7 chars, the env var is not initialized)
+ SetLanguage( true );
+
+ loadCommonSettings();
+
+#ifdef __WXMAC__
+ // Always show filters on Open dialog to be able to choose plugin
+ wxSystemOptions::SetOption( wxOSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1 );
+#endif
+
+ return true;
+}
+
+
+bool PGM_BASE::setExecutablePath()
+{
+ m_bin_dir = wxStandardPaths::Get().GetExecutablePath();
+
+#ifdef __WXMAC__
+ // On OSX Pgm().GetExecutablePath() will always point to main
+ // bundle directory, e.g., /Applications/kicad.app/
+
+ wxFileName fn( m_bin_dir );
+
+ if( fn.GetName() == wxT( "kicad" ) )
+ {
+ // kicad launcher, so just remove the Contents/MacOS part
+ fn.RemoveLastDir();
+ fn.RemoveLastDir();
+ }
+ else
+ {
+ // standalone binaries live in Contents/Applications/<standalone>.app/Contents/MacOS
+ fn.RemoveLastDir();
+ fn.RemoveLastDir();
+ fn.RemoveLastDir();
+ fn.RemoveLastDir();
+ fn.RemoveLastDir();
+ }
+
+ m_bin_dir = fn.GetPath() + wxT( "/" );
+#else
+ // Use unix notation for paths. I am not sure this is a good idea,
+ // but it simplifies compatibility between Windows and Unices.
+ // However it is a potential problem in path handling under Windows.
+ m_bin_dir.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
+
+ // Remove file name form command line:
+ while( m_bin_dir.Last() != '/' && !m_bin_dir.IsEmpty() )
+ m_bin_dir.RemoveLast();
+#endif
+
+ return true;
+}
+
+
+void PGM_BASE::loadCommonSettings()
+{
+ wxASSERT( m_common_settings );
+
+ m_help_size.x = 500;
+ m_help_size.y = 400;
+
+ m_common_settings->Read( showEnvVarWarningDialog, &m_show_env_var_dialog );
+
+ m_editor_name = m_common_settings->Read( wxT( "Editor" ) );
+
+ wxString entry, oldPath;
+ wxArrayString entries;
+ long index = 0L;
+
+ oldPath = m_common_settings->GetPath();
+ m_common_settings->SetPath( pathEnvVariables );
+
+ while( m_common_settings->GetNextEntry( entry, index ) )
+ {
+ wxLogTrace( traceEnvVars,
+ wxT( "Enumerating over entry %s, %ld." ), GetChars( entry ), index );
+ entries.Add( entry );
+ }
+
+ for( unsigned i = 0; i < entries.GetCount(); i++ )
+ {
+ wxString val = m_common_settings->Read( entries[i], wxEmptyString );
+ m_local_env_vars[ entries[i] ] = ENV_VAR_ITEM( val, wxGetEnv( entries[i], NULL ) );
+ }
+
+ for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
+ SetLocalEnvVariable( it->first, it->second.GetValue() );
+
+ m_common_settings->SetPath( oldPath );
+}
+
+
+void PGM_BASE::saveCommonSettings()
+{
+ // m_common_settings is not initialized until fairly late in the
+ // process startup: initPgm(), so test before using:
+ if( m_common_settings )
+ {
+ wxString cur_dir = wxGetCwd();
+
+ m_common_settings->Write( workingDirKey, cur_dir );
+ m_common_settings->Write( showEnvVarWarningDialog, m_show_env_var_dialog );
+
+ // Save the local environment variables.
+ m_common_settings->SetPath( pathEnvVariables );
+
+ for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
+ {
+ wxLogTrace( traceEnvVars, wxT( "Saving environment variable config entry %s as %s" ),
+ GetChars( it->first ), GetChars( it->second.GetValue() ) );
+ m_common_settings->Write( it->first, it->second.GetValue() );
+ }
+
+ m_common_settings->SetPath( wxT( ".." ) );
+ }
+}
+
+
+bool PGM_BASE::SetLanguage( bool first_time )
+{
+ bool retv = true;
+
+ if( first_time )
+ {
+ setLanguageId( wxLANGUAGE_DEFAULT );
+ // First time SetLanguage is called, the user selected language id is set
+ // from commun user config settings
+ wxString languageSel;
+
+ m_common_settings->Read( languageCfgKey, &languageSel );
+
+ // Search for the current selection
+ for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
+ {
+ if( s_Languages[ii].m_Lang_Label == languageSel )
+ {
+ setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
+ break;
+ }
+ }
+ }
+
+ // dictionary file name without extend (full name is kicad.mo)
+ wxString dictionaryName( wxT( "kicad" ) );
+
+ delete m_locale;
+ m_locale = new wxLocale;
+
+ if( !m_locale->Init( m_language_id ) )
+ {
+ wxLogDebug( wxT( "This language is not supported by the system." ) );
+
+ setLanguageId( wxLANGUAGE_DEFAULT );
+ delete m_locale;
+
+ m_locale = new wxLocale;
+ m_locale->Init();
+ retv = false;
+ }
+ else if( !first_time )
+ {
+ wxLogDebug( wxT( "Search for dictionary %s.mo in %s" ),
+ GetChars( dictionaryName ), GetChars( m_locale->GetName() ) );
+ }
+
+ if( !first_time )
+ {
+ // If we are here, the user has selected an other language.
+ // Therefore the new prefered language name is stored in common config.
+ // Do NOT store the wxWidgets language Id, it can change between wxWidgets
+ // versions, for a given language
+ wxString languageSel;
+
+ // Search for the current selection
+ for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
+ {
+ if( s_Languages[ii].m_WX_Lang_Identifier == m_language_id )
+ {
+ languageSel = s_Languages[ii].m_Lang_Label;
+ break;
+ }
+ }
+
+ m_common_settings->Write( languageCfgKey, languageSel );
+ }
+
+ // Test if floating point notation is working (bug in cross compilation, using wine)
+ // Make a conversion double <=> string
+ double dtst = 0.5;
+ wxString msg;
+
+ msg << dtst;
+ double result;
+ msg.ToDouble( &result );
+
+ if( result != dtst )
+ // string to double encode/decode does not work! Bug detected:
+ // Disable floating point localization:
+ setlocale( LC_ALL, "C" );
+
+ if( !m_locale->IsLoaded( dictionaryName ) )
+ m_locale->AddCatalog( dictionaryName );
+
+ if( !retv )
+ return retv;
+
+ return m_locale->IsOk();
+}
+
+
+void PGM_BASE::SetLanguageIdentifier( int menu_id )
+{
+ wxLogDebug( wxT( "Select language ID %d from %d possible languages." ),
+ menu_id, DIM( s_Languages ) );
+
+ for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
+ {
+ if( menu_id == s_Languages[ii].m_KI_Lang_Identifier )
+ {
+ setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
+ break;
+ }
+ }
+}
+
+
+void PGM_BASE::SetLanguagePath()
+{
+ SEARCH_STACK guesses;
+
+ SystemDirsAppend( &guesses );
+
+ // Add our internat dir to the wxLocale catalog of paths
+ for( unsigned i = 0; i < guesses.GetCount(); i++ )
+ {
+ wxFileName fn( guesses[i], wxEmptyString );
+
+ // Append path for Windows and unix KiCad package install
+ fn.AppendDir( wxT( "share" ) );
+ fn.AppendDir( wxT( "internat" ) );
+
+ if( fn.IsDirReadable() )
+ {
+ wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
+ wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
+ }
+
+ // Append path for unix standard install
+ fn.RemoveLastDir();
+ fn.AppendDir( wxT( "kicad" ) );
+ fn.AppendDir( wxT( "internat" ) );
+
+ if( fn.IsDirReadable() )
+ {
+ wxLogDebug( wxT( "Adding locale lookup path: " ) + fn.GetPath() );
+ wxLocale::AddCatalogLookupPathPrefix( fn.GetPath() );
+ }
+ }
+}
+
+
+void PGM_BASE::AddMenuLanguageList( wxMenu* MasterMenu )
+{
+ wxMenu* menu = NULL;
+ wxMenuItem* item = MasterMenu->FindItem( ID_LANGUAGE_CHOICE );
+
+ if( item ) // This menu exists, do nothing
+ return;
+
+ menu = new wxMenu;
+
+ for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
+ {
+ wxString label;
+
+ if( s_Languages[ii].m_DoNotTranslate )
+ label = s_Languages[ii].m_Lang_Label;
+ else
+ label = wxGetTranslation( s_Languages[ii].m_Lang_Label );
+
+ AddMenuItem( menu, s_Languages[ii].m_KI_Lang_Identifier,
+ label, KiBitmap(s_Languages[ii].m_Lang_Icon ),
+ wxITEM_CHECK );
+ }
+
+ AddMenuItem( MasterMenu, menu,
+ ID_LANGUAGE_CHOICE,
+ _( "Language" ),
+ _( "Select application language (only for testing!)" ),
+ KiBitmap( language_xpm ) );
+
+ // Set Check mark on current selected language
+ for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
+ {
+ if( m_language_id == s_Languages[ii].m_WX_Lang_Identifier )
+ menu->Check( s_Languages[ii].m_KI_Lang_Identifier, true );
+ else
+ menu->Check( s_Languages[ii].m_KI_Lang_Identifier, false );
+ }
+}
+
+
+bool PGM_BASE::SetLocalEnvVariable( const wxString& aName, const wxString& aValue )
+{
+ wxString env;
+
+ // Check to see if the environment variable is already set.
+ if( wxGetEnv( aName, &env ) )
+ {
+ wxLogTrace( traceEnvVars, wxT( "Environment variable %s already set to %s." ),
+ GetChars( aName ), GetChars( env ) );
+ return env == aValue;
+ }
+
+ wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
+ GetChars( aName ), GetChars( aValue ) );
+
+ return wxSetEnv( aName, aValue );
+}
+
+
+void PGM_BASE::SetLocalEnvVariables( const ENV_VAR_MAP& aEnvVarMap )
+{
+ m_local_env_vars.clear();
+ m_local_env_vars = aEnvVarMap;
+
+ if( m_common_settings )
+ m_common_settings->DeleteGroup( pathEnvVariables );
+
+ saveCommonSettings();
+
+ // Overwrites externally defined environment variable until the next time the application
+ // is run.
+ for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
+ {
+ wxLogTrace( traceEnvVars, wxT( "Setting local environment variable %s to %s." ),
+ GetChars( it->first ), GetChars( it->second.GetValue() ) );
+ wxSetEnv( it->first, it->second.GetValue() );
+ }
+}
+
+
+void PGM_BASE::ConfigurePaths( wxWindow* aParent )
+{
+ DIALOG_ENV_VAR_CONFIG dlg( aParent, GetLocalEnvVariables() );
+
+ if( dlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ ENV_VAR_MAP envVarMap = dlg.GetEnvVarMap();
+
+ for( ENV_VAR_MAP_ITER it = envVarMap.begin(); it != envVarMap.end(); ++it )
+ {
+ wxLogTrace( traceEnvVars, wxT( "Environment variable %s=%s defined externally = %d" ),
+ GetChars( it->first ), GetChars( it->second.GetValue() ),
+ it->second.GetDefinedExternally() );
+ }
+
+ // If any of the environment variables are defined externally, warn the user that the
+ // next time kicad is run that the externally defined variables will be used instead of
+ // the user's settings. This is by design.
+ if( dlg.ExternalDefsChanged() && m_show_env_var_dialog )
+ {
+ wxString msg1 = _( "Warning! Some of paths you have configured have been defined \n"
+ "externally to the running process and will be temporarily overwritten." );
+ wxString msg2 = _( "The next time KiCad is launched, any paths that have already\n"
+ "been defined are honored and any settings defined in the path\n"
+ "configuration dialog are ignored. If you did not intend for this\n"
+ "behavior, either rename any conflicting entries or remove the\n"
+ "external environment variable definition(s) from your system." );
+ wxRichMessageDialog dlg( aParent, msg1, _( "Warning" ), wxOK | wxCENTRE );
+ dlg.ShowDetailedText( msg2 );
+ dlg.ShowCheckBox( _( "Do not show this message again." ) );
+ dlg.ShowModal();
+ m_show_env_var_dialog = !dlg.IsCheckBoxChecked();
+ }
+
+ SetLocalEnvVariables( dlg.GetEnvVarMap() );
+}
diff --git a/common/prependpath.cpp b/common/prependpath.cpp
new file mode 100644
index 0000000..e0522dc
--- /dev/null
+++ b/common/prependpath.cpp
@@ -0,0 +1,40 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <macros.h>
+#include <fctsys.h>
+#include <wx/filename.h>
+
+
+/// Put aPriorityPath in front of all paths in the value of aEnvVar.
+const wxString PrePendPath( const wxString& aEnvVar, const wxString& aPriorityPath )
+{
+ wxPathList paths;
+
+ paths.AddEnvList( aEnvVar );
+ paths.Insert( aPriorityPath, 0 );
+
+ return wxJoin( paths, wxPATH_SEP[0] );
+}
diff --git a/common/project.cpp b/common/project.cpp
new file mode 100644
index 0000000..a6b7546
--- /dev/null
+++ b/common/project.cpp
@@ -0,0 +1,381 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <wx/stdpaths.h>
+
+#include <fctsys.h>
+#include <macros.h>
+#include <pgm_base.h>
+#include <project.h>
+#include <common.h> // NAMELESS_PROJECT
+#include <confirm.h>
+#include <kicad_string.h>
+#include <config_params.h>
+#include <wildcards_and_files_ext.h>
+
+
+PROJECT::PROJECT()
+{
+ memset( m_elems, 0, sizeof(m_elems) );
+}
+
+
+void PROJECT::ElemsClear()
+{
+ DBG( printf( "%s: clearing all _ELEMS for project %s\n", __func__, TO_UTF8( GetProjectFullName() ) );)
+
+ // careful here, this should work, but the virtual destructor may not
+ // be in the same link image as PROJECT.
+ for( unsigned i = 0; i < DIM( m_elems ); ++i )
+ {
+ SetElem( ELEM_T( i ), NULL );
+ }
+}
+
+
+PROJECT::~PROJECT()
+{
+ ElemsClear();
+}
+
+
+void PROJECT::SetProjectFullName( const wxString& aFullPathAndName )
+{
+ // Compare paths, rather than inodes, to be less surprising to the user.
+ // Create a temporary wxFileName to normalize the path
+ wxFileName candidate_path( aFullPathAndName );
+
+ // Edge transitions only. This is what clears the project
+ // data using the Clear() function.
+ if( m_project_name.GetFullPath() != candidate_path.GetFullPath() )
+ {
+ Clear(); // clear the data when the project changes.
+
+ DBG(printf( "%s: old:'%s' new:'%s'\n", __func__, TO_UTF8( GetProjectFullName() ), TO_UTF8( aFullPathAndName ) );)
+
+ m_project_name = aFullPathAndName;
+
+ wxASSERT( m_project_name.IsAbsolute() );
+
+ wxASSERT( m_project_name.GetExt() == ProjectFileExtension );
+
+ // until multiple projects are in play, set an environment variable for the
+ // the project pointer.
+ {
+ wxString path = m_project_name.GetPath();
+
+ wxSetEnv( PROJECT_VAR_NAME, path );
+ }
+ }
+}
+
+
+const wxString PROJECT::GetProjectFullName() const
+{
+ return m_project_name.GetFullPath();
+}
+
+
+const wxString PROJECT::GetProjectPath() const
+{
+ return m_project_name.GetPathWithSep();
+}
+
+
+const wxString PROJECT::GetProjectName() const
+{
+ return m_project_name.GetName();
+}
+
+
+const wxString PROJECT::FootprintLibTblName() const
+{
+ wxFileName fn = GetProjectFullName();
+ wxString path = fn.GetPath();
+
+ // DBG(printf( "path:'%s' fn:'%s'\n", TO_UTF8(path), TO_UTF8(fn.GetFullPath()) );)
+
+ // if there's no path to the project name, or the name as a whole is bogus or its not
+ // write-able then use a template file.
+ if( !fn.GetDirCount() || !fn.IsOk() || !wxFileName::IsDirWritable( path ) )
+ {
+ // return a template filename now.
+
+ // this next line is likely a problem now, since it relies on an
+ // application title which is no longer constant or known. This next line needs
+ // to be re-thought out.
+
+#ifndef __WXMAC__
+ fn.AssignDir( wxStandardPaths::Get().GetUserConfigDir() );
+#else
+ // don't pollute home folder, temp folder seems to be more appropriate
+ fn.AssignDir( wxStandardPaths::Get().GetTempDir() );
+#endif
+
+#if defined( __WINDOWS__ )
+ fn.AppendDir( wxT( "kicad" ) );
+#endif
+
+ /*
+ The footprint library table name used when no project file is passed
+ to Pcbnew or CvPcb. This is used temporarily to store the project
+ specific library table until the project file being edited is saved.
+ It is then moved to the file fp-lib-table in the folder where the
+ project file is saved.
+ */
+ fn.SetName( wxT( "prj-fp-lib-table" ) );
+ }
+ else // normal path.
+ {
+ fn.SetName( wxT( "fp-lib-table" ) );
+ }
+
+ fn.ClearExt();
+
+ return fn.GetFullPath();
+}
+
+
+void PROJECT::SetRString( RSTRING_T aIndex, const wxString& aString )
+{
+ unsigned ndx = unsigned( aIndex );
+
+ if( ndx < DIM( m_rstrings ) )
+ {
+ m_rstrings[ndx] = aString;
+ }
+ else
+ {
+ wxASSERT( 0 ); // bad index
+ }
+}
+
+
+const wxString& PROJECT::GetRString( RSTRING_T aIndex )
+{
+ unsigned ndx = unsigned( aIndex );
+
+ if( ndx < DIM( m_rstrings ) )
+ {
+ return m_rstrings[ndx];
+ }
+ else
+ {
+ static wxString no_cookie_for_you;
+
+ wxASSERT( 0 ); // bad index
+
+ return no_cookie_for_you;
+ }
+}
+
+
+PROJECT::_ELEM* PROJECT::GetElem( ELEM_T aIndex )
+{
+ // This is virtual, so implement it out of line
+
+ if( unsigned( aIndex ) < DIM( m_elems ) )
+ {
+ return m_elems[aIndex];
+ }
+ return NULL;
+}
+
+
+void PROJECT::SetElem( ELEM_T aIndex, _ELEM* aElem )
+{
+ // This is virtual, so implement it out of line
+
+ if( unsigned( aIndex ) < DIM( m_elems ) )
+ {
+#if defined(DEBUG) && 0
+ if( aIndex == ELEM_SCH_PART_LIBS )
+ {
+ printf( "%s: &m_elems[%i]:%p aElem:%p\n", __func__, aIndex, &m_elems[aIndex], aElem );
+ }
+#endif
+ delete m_elems[aIndex];
+ m_elems[aIndex] = aElem;
+ }
+}
+
+
+static bool copy_pro_file_template( const SEARCH_STACK& aSearchS, const wxString& aDestination )
+{
+ if( aDestination.IsEmpty() )
+ {
+ DBG( printf( "%s: destination is empty.\n", __func__ );)
+ return false;
+ }
+
+ wxString templateFile = wxT( "kicad." ) + ProjectFileExtension;
+
+ wxString kicad_pro_template = aSearchS.FindValidPath( templateFile );
+
+ if( !kicad_pro_template )
+ {
+ DBG( printf( "%s: template file '%s' not found using search paths.\n", __func__, TO_UTF8( templateFile ) );)
+
+ wxFileName templ( wxStandardPaths::Get().GetDocumentsDir(),
+ wxT( "kicad" ), ProjectFileExtension );
+
+ if( !templ.IsFileReadable() )
+ {
+ wxString msg = wxString::Format( _(
+ "Unable to find '%s' template config file." ),
+ GetChars( templateFile ) );
+
+ DisplayError( NULL, msg );
+
+ return false;
+ }
+
+ kicad_pro_template = templ.GetFullPath();
+ }
+
+ DBG( printf( "%s: using template file '%s' as project file.\n", __func__, TO_UTF8( kicad_pro_template ) );)
+
+ // Verify aDestination can be created. if this is not the case, wxCopyFile
+ // will generate a crappy log error message, and we *do not want* this kind
+ // of stupid message
+ wxFileName fn( aDestination );
+ bool success = true;
+
+ if( fn.IsOk() && fn.IsDirWritable() )
+ success = wxCopyFile( kicad_pro_template, aDestination );
+ else
+ {
+ wxLogMessage( _( "Cannot create prj file '%s' (Directory not writable)" ),
+ GetChars( aDestination) );
+ success = false;
+ }
+
+ return success;
+}
+
+
+wxConfigBase* PROJECT::configCreate( const SEARCH_STACK& aSList,
+ const wxString& aGroupName, const wxString& aProjectFileName )
+{
+ wxConfigBase* cfg = 0;
+ wxString cur_pro_fn = !aProjectFileName ? GetProjectFullName() : aProjectFileName;
+
+ if( wxFileName( cur_pro_fn ).IsFileReadable() )
+ {
+ // Note: currently, aGroupName is not used.
+ // Previoulsy, the version of aGroupName was tested, but it
+ // was useless, and if the version is important,
+ // this is not the right place here, because configCreate does know anything
+ // about info stored in this config file.
+ cfg = new wxFileConfig( wxEmptyString, wxEmptyString, cur_pro_fn, wxEmptyString );
+ return cfg;
+ }
+
+ // No suitable pro file was found, either does not exist, or not readable.
+ // Use the template kicad.pro file. Find it by using caller's SEARCH_STACK.
+ copy_pro_file_template( aSList, cur_pro_fn );
+
+ cfg = new wxFileConfig( wxEmptyString, wxEmptyString, cur_pro_fn, wxEmptyString );
+
+ return cfg;
+}
+
+
+void PROJECT::ConfigSave( const SEARCH_STACK& aSList, const wxString& aGroupName,
+ const PARAM_CFG_ARRAY& aParams, const wxString& aFileName )
+{
+ std::auto_ptr<wxConfigBase> cfg( configCreate( aSList, aGroupName, aFileName ) );
+
+ if( !cfg.get() )
+ {
+ // could not find template
+ return;
+ }
+
+ cfg->SetPath( wxT( "/" ) );
+
+ cfg->Write( wxT( "update" ), DateAndTime() );
+
+ // @todo: pass in aLastClient wxString:
+ cfg->Write( wxT( "last_client" ), Pgm().App().GetAppName() );
+
+ // Save parameters
+ cfg->DeleteGroup( aGroupName ); // Erase all data
+ cfg->Flush();
+
+ cfg->SetPath( aGroupName );
+ cfg->Write( wxT( "version" ), CONFIG_VERSION );
+
+ cfg->SetPath( wxT( "/" ) );
+
+ wxConfigSaveParams( cfg.get(), aParams, aGroupName );
+
+ cfg->SetPath( wxT( "/" ) );
+
+ // cfg is deleted here by std::auto_ptr, that saves the *.pro file to disk
+}
+
+
+bool PROJECT::ConfigLoad( const SEARCH_STACK& aSList, const wxString& aGroupName,
+ const PARAM_CFG_ARRAY& aParams, const wxString& aForeignProjectFileName )
+{
+ std::auto_ptr<wxConfigBase> cfg( configCreate( aSList, aGroupName, aForeignProjectFileName ) );
+
+ if( !cfg.get() )
+ {
+ // could not find template
+ return false;
+ }
+
+ cfg->SetPath( wxCONFIG_PATH_SEPARATOR );
+
+ wxString timestamp = cfg->Read( wxT( "update" ) );
+
+ m_pro_date_and_time = timestamp;
+
+ // We do not want expansion of env var values when reading our project config file
+ bool state = cfg.get()->IsExpandingEnvVars();
+ cfg.get()->SetExpandEnvVars( false );
+
+ wxConfigLoadParams( cfg.get(), aParams, aGroupName );
+
+ cfg.get()->SetExpandEnvVars( state );
+
+ return true;
+}
+
+
+const wxString PROJECT::AbsolutePath( const wxString& aFileName ) const
+{
+ wxFileName fn = aFileName;
+
+ if( !fn.IsAbsolute() )
+ {
+ wxString pro_dir = wxPathOnly( GetProjectFullName() );
+ fn.Normalize( wxPATH_NORM_ALL, pro_dir );
+ }
+
+ return fn.GetFullPath();
+}
diff --git a/common/ptree.cpp b/common/ptree.cpp
new file mode 100644
index 0000000..bac47ee
--- /dev/null
+++ b/common/ptree.cpp
@@ -0,0 +1,220 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+// Something in either <boost/property_tree/ptree.hpp> causes a bunch of compiler
+// errors in <wx/msw/winundef.h> version 2.9 on MinGW.
+#include <macros.h>
+
+#include <boost/property_tree/ptree.hpp>
+
+#include <assert.h>
+#include <ptree.h>
+
+typedef PTREE::const_iterator CITER;
+typedef PTREE::iterator ITER;
+
+#if defined(DEBUG)
+ #define D(x) x
+#else
+ #define D(x)
+#endif
+
+#define CTL_OMIT_NL (1<<0)
+#define CTL_IN_ATTRS (1<<1)
+
+
+//-----<Scan>------------------------------------------------------------------
+
+/**
+ * Function scanList
+ * reads a sexpr list from the input stream into a new node with key
+ * aLexer->CurText().
+ */
+inline void scanList( PTREE* aTree, DSNLEXER* aLexer )
+{
+ assert( aLexer->CurTok() == DSN_LEFT );
+
+ int tok = aLexer->NextTok();
+
+ const char* key = aLexer->CurText();
+
+ //D(printf( "%s: '%s'\n", __func__, key );)
+
+ PTREE* list = &aTree->push_back( PTREE::value_type( key, PTREE() ) )->second;
+
+ if( tok != DSN_RIGHT )
+ {
+ while( ( tok = aLexer->NextTok() ) != DSN_RIGHT )
+ {
+ if( tok == DSN_EOF )
+ aLexer->Unexpected( DSN_EOF );
+
+ Scan( list, aLexer );
+ }
+ }
+}
+
+
+inline void scanAtom( PTREE* aTree, DSNLEXER* aLexer )
+{
+ const char* key = aLexer->CurText();
+
+ //D(printf( "%s: '%s'\n", __func__, key );)
+
+ aTree->push_back( PTREE::value_type( key, PTREE() ) );
+}
+
+
+void Scan( PTREE* aTree, DSNLEXER* aLexer ) throw( IO_ERROR )
+{
+ int tok = aLexer->CurTok();
+
+ // conditionally read first token.
+ if( tok == DSN_NONE )
+ tok = aLexer->NextTok();
+
+ if( tok == DSN_EOF )
+ {
+ aLexer->Unexpected( DSN_EOF );
+ }
+
+ if( tok == DSN_LEFT )
+ {
+ scanList( aTree, aLexer );
+ }
+ else
+ {
+ scanAtom( aTree, aLexer );
+ }
+}
+
+
+//-----<Format>------------------------------------------------------------------
+
+inline bool isAtom( CPTREE& aTree )
+{
+ return aTree.size()==0 && aTree.data().size()==0;
+}
+
+
+inline bool isLast( CPTREE& aTree, CITER it )
+{
+ CITER next = it;
+ ++next;
+ return next == aTree.end();
+}
+
+
+inline CITER next( CITER it )
+{
+ CITER n = it;
+ return ++n;
+}
+
+
+static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
+ const std::string& aKey, CPTREE& aTree ) throw( IO_ERROR );
+
+
+static void formatList( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree )
+ throw( IO_ERROR )
+{
+ for( CITER it = aTree.begin(); it != aTree.end(); ++it )
+ {
+ // Processing a tree which was read in with xml_parser?
+ if( it->first == "<xmlattr>" )
+ {
+ formatList( out, aNestLevel, aCtl | CTL_IN_ATTRS, it->second );
+ continue;
+ }
+
+ int ctl = 0;
+
+ if( isLast( aTree, it ) ) // is "it" the last one?
+ {
+ //if( !( aCtl & CTL_IN_ATTRS ) )
+ ctl = CTL_OMIT_NL;
+ }
+ else if( isAtom( next( it )->second ) )
+ {
+ /* if( !( aCtl & CTL_IN_ATTRS ) ) */
+ ctl = CTL_OMIT_NL;
+ }
+
+ formatNode( out, aNestLevel+1, ctl, it->first, it->second );
+ }
+}
+
+
+static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
+ const std::string& aKey, CPTREE& aTree )
+ throw( IO_ERROR )
+{
+ if( !isAtom( aTree ) ) // is a list, not an atom
+ {
+ int ctl = CTL_OMIT_NL;
+
+ // aTree is list and its first child is a list
+ if( aTree.size() && !isAtom( aTree.begin()->second ) && !aTree.data().size() )
+ ctl = 0;
+
+ out->Print( aNestLevel, "(%s%s", out->Quotes( aKey ).c_str(), ctl & CTL_OMIT_NL ? "" : "\n" );
+
+ if( aTree.data().size() ) // sexpr format does not use data()
+ {
+ out->Print( 0, " %s%s",
+ out->Quotes( aTree.data() ).c_str(),
+ aTree.size() ? "\n" : ""
+ );
+ }
+
+ formatList( out, aNestLevel, aCtl, aTree );
+
+ out->Print( 0, ")%s", aCtl & CTL_OMIT_NL ? "" : "\n" );
+ }
+
+ else // is an atom, not a list
+ {
+ out->Print( 0, " %s", out->Quotes( aKey ).c_str() );
+ }
+}
+
+
+void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree ) throw( IO_ERROR )
+{
+ if( aTree.size() == 1 && !aTree.data().size() )
+ {
+ // The topmost node is basically only a container for the document root.
+ // It anchors the paths which traverse the tree deeper.
+ CITER it = aTree.begin();
+ formatNode( out, aNestLevel, aCtl, it->first, it->second );
+ }
+ else
+ {
+ // This is not expected, neither for sexpr nor xml.
+ formatNode( out, aNestLevel, aCtl, "", aTree );
+ }
+}
+
diff --git a/common/reporter.cpp b/common/reporter.cpp
new file mode 100644
index 0000000..2efc475
--- /dev/null
+++ b/common/reporter.cpp
@@ -0,0 +1,81 @@
+/**
+ * @file reporter.cpp
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <macros.h>
+#include <reporter.h>
+#include <wx_html_report_panel.h>
+
+REPORTER& REPORTER::Report( const char* aText, REPORTER::SEVERITY aSeverity )
+{
+ Report( FROM_UTF8( aText ) );
+ return *this;
+}
+
+
+REPORTER& WX_TEXT_CTRL_REPORTER::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
+{
+ wxCHECK_MSG( m_textCtrl != NULL, *this,
+ wxT( "No wxTextCtrl object defined in WX_TEXT_CTRL_REPORTER." ) );
+
+ m_textCtrl->AppendText( aText );
+ return *this;
+}
+
+REPORTER& WX_STRING_REPORTER::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
+{
+ wxCHECK_MSG( m_string != NULL, *this,
+ wxT( "No wxString object defined in WX_STRING_REPORTER." ) );
+
+ *m_string << aText;
+ return *this;
+}
+
+REPORTER& WX_HTML_PANEL_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
+{
+ wxCHECK_MSG( m_panel != NULL, *this,
+ wxT( "No WX_HTML_REPORT_PANEL object defined in WX_HTML_PANEL_REPORTER." ) );
+
+ m_panel->Report( aText, aSeverity );
+ return *this;
+}
+
+REPORTER& NULL_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
+{
+ return *this;
+}
+
+REPORTER& NULL_REPORTER::GetInstance()
+{
+ static REPORTER* s_nullReporter = NULL;
+
+ if( !s_nullReporter )
+ {
+ s_nullReporter = new NULL_REPORTER();
+ }
+
+ return *s_nullReporter;
+}
diff --git a/common/richio.cpp b/common/richio.cpp
new file mode 100644
index 0000000..e0684d7
--- /dev/null
+++ b/common/richio.cpp
@@ -0,0 +1,607 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <cstdarg>
+
+#include <richio.h>
+
+
+// Fall back to getc() when getc_unlocked() is not available on the target platform.
+#if !defined( HAVE_FGETC_NOLOCK )
+#define getc_unlocked getc
+#endif
+
+
+static int vprint( std::string* result, const char* format, va_list ap )
+{
+ char msg[512];
+ // This function can call vsnprintf twice.
+ // But internally, vsnprintf retrieves arguments from the va_list identified by arg as if
+ // va_arg was used on it, and thus the state of the va_list is likely to be altered by the call.
+ // see: www.cplusplus.com/reference/cstdio/vsnprintf
+ // we make a copy of va_list ap for the second call, if happens
+ va_list tmp;
+ va_copy( tmp, ap );
+
+ size_t len = vsnprintf( msg, sizeof(msg), format, ap );
+
+ if( len < sizeof(msg) ) // the output fit into msg
+ {
+ result->append( msg, msg + len );
+ }
+ else
+ {
+ // output was too big, so now incur the expense of allocating
+ // a buf for holding suffient characters.
+
+ std::vector<char> buf;
+
+ buf.reserve( len+1 ); // reserve(), not resize() which writes. +1 for trailing nul.
+
+ len = vsnprintf( &buf[0], len+1, format, tmp );
+
+ result->append( &buf[0], &buf[0] + len );
+ }
+
+ va_end( tmp ); // Release the temporary va_list, initialised from ap
+
+ return len;
+}
+
+
+int StrPrintf( std::string* result, const char* format, ... )
+{
+ va_list args;
+
+ va_start( args, format );
+ int ret = vprint( result, format, args );
+ va_end( args );
+
+ return ret;
+}
+
+
+std::string StrPrintf( const char* format, ... )
+{
+ std::string ret;
+ va_list args;
+
+ va_start( args, format );
+ int ignore = vprint( &ret, format, args );
+ (void) ignore;
+ va_end( args );
+
+ return ret;
+}
+
+
+void IO_ERROR::init( const char* aThrowersFile, const char* aThrowersLoc, const wxString& aMsg )
+{
+ errorText.Printf( IO_FORMAT, aMsg.GetData(),
+ wxString::FromUTF8( aThrowersFile ).AfterLast( '/' ).GetData(),
+ wxString::FromUTF8( aThrowersLoc ).GetData() );
+}
+
+
+void PARSE_ERROR::init( const char* aThrowersFile, const char* aThrowersLoc,
+ const wxString& aMsg, const wxString& aSource,
+ const char* aInputLine,
+ int aLineNumber, int aByteIndex )
+{
+ // save inpuLine, lineNumber, and offset for UI (.e.g. Sweet text editor)
+ inputLine = aInputLine;
+ lineNumber = aLineNumber;
+ byteIndex = aByteIndex;
+
+ errorText.Printf( PARSE_FORMAT, aMsg.GetData(), aSource.GetData(),
+ aLineNumber, aByteIndex,
+ wxString::FromUTF8( aThrowersFile ).AfterLast( '/' ).GetData(),
+ wxString::FromUTF8( aThrowersLoc ).GetData() );
+}
+
+
+//-----<LINE_READER>------------------------------------------------------
+
+LINE_READER::LINE_READER( unsigned aMaxLineLength ) :
+ length( 0 ),
+ lineNum( 0 ),
+ line( NULL ),
+ capacity( 0 ),
+ maxLineLength( aMaxLineLength )
+{
+ if( aMaxLineLength != 0 )
+ {
+ // start at the INITIAL size, expand as needed up to the MAX size in maxLineLength
+ capacity = LINE_READER_LINE_INITIAL_SIZE;
+
+ // but never go above user's aMaxLineLength, and leave space for trailing nul
+ if( capacity > aMaxLineLength+1 )
+ capacity = aMaxLineLength+1;
+
+ line = new char[capacity];
+
+ line[0] = '\0';
+ }
+}
+
+
+LINE_READER::~LINE_READER()
+{
+ delete[] line;
+}
+
+
+void LINE_READER::expandCapacity( unsigned newsize )
+{
+ // length can equal maxLineLength and nothing breaks, there's room for
+ // the terminating nul. cannot go over this.
+ if( newsize > maxLineLength+1 )
+ newsize = maxLineLength+1;
+
+ if( newsize > capacity )
+ {
+ capacity = newsize;
+
+ // resize the buffer, and copy the original data
+ char* bigger = new char[capacity];
+
+ wxASSERT( capacity >= length+1 );
+
+ memcpy( bigger, line, length );
+ bigger[length] = 0;
+
+ delete[] line;
+ line = bigger;
+ }
+}
+
+
+FILE_LINE_READER::FILE_LINE_READER( const wxString& aFileName,
+ unsigned aStartingLineNumber,
+ unsigned aMaxLineLength ) throw( IO_ERROR ) :
+ LINE_READER( aMaxLineLength ),
+ iOwn( true )
+{
+ fp = wxFopen( aFileName, wxT( "rt" ) );
+ if( !fp )
+ {
+ wxString msg = wxString::Format(
+ _( "Unable to open filename '%s' for reading" ), aFileName.GetData() );
+ THROW_IO_ERROR( msg );
+ }
+
+ setvbuf( fp, NULL, _IOFBF, BUFSIZ * 8 );
+
+ source = aFileName;
+ lineNum = aStartingLineNumber;
+}
+
+
+FILE_LINE_READER::FILE_LINE_READER( FILE* aFile, const wxString& aFileName,
+ bool doOwn,
+ unsigned aStartingLineNumber,
+ unsigned aMaxLineLength ) :
+ LINE_READER( aMaxLineLength ),
+ iOwn( doOwn ),
+ fp( aFile )
+{
+ if( doOwn && ftell( aFile ) == 0L )
+ {
+#ifndef __WXMAC__
+ setvbuf( fp, NULL, _IOFBF, BUFSIZ * 8 );
+#endif
+ }
+ source = aFileName;
+ lineNum = aStartingLineNumber;
+}
+
+
+FILE_LINE_READER::~FILE_LINE_READER()
+{
+ if( iOwn && fp )
+ fclose( fp );
+}
+
+
+char* FILE_LINE_READER::ReadLine() throw( IO_ERROR )
+{
+ length = 0;
+
+ for(;;)
+ {
+ if( length >= maxLineLength )
+ THROW_IO_ERROR( _( "Maximum line length exceeded" ) );
+
+ if( length >= capacity )
+ expandCapacity( capacity * 2 );
+
+ // faster, POSIX compatible fgetc(), no locking.
+ int cc = getc_unlocked( fp );
+ if( cc == EOF )
+ break;
+
+ line[ length++ ] = (char) cc;
+
+ if( cc == '\n' )
+ break;
+ }
+
+ line[ length ] = 0;
+
+ // lineNum is incremented even if there was no line read, because this
+ // leads to better error reporting when we hit an end of file.
+ ++lineNum;
+
+ return length ? line : NULL;
+}
+
+
+STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxString& aSource ) :
+ LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
+ lines( aString ),
+ ndx( 0 )
+{
+ // Clipboard text should be nice and _use multiple lines_ so that
+ // we can report _line number_ oriented error messages when parsing.
+ source = aSource;
+}
+
+
+STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint ) :
+ LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
+ lines( aStartingPoint.lines ),
+ ndx( aStartingPoint.ndx )
+{
+ // since we are keeping the same "source" name, for error reporting purposes
+ // we need to have the same notion of line number and offset.
+
+ source = aStartingPoint.source;
+ lineNum = aStartingPoint.lineNum;
+}
+
+
+char* STRING_LINE_READER::ReadLine() throw( IO_ERROR )
+{
+ size_t nlOffset = lines.find( '\n', ndx );
+
+ if( nlOffset == std::string::npos )
+ length = lines.length() - ndx;
+ else
+ length = nlOffset - ndx + 1; // include the newline, so +1
+
+ if( length )
+ {
+ if( length >= maxLineLength )
+ THROW_IO_ERROR( _("Line length exceeded") );
+
+ if( length+1 > capacity ) // +1 for terminating nul
+ expandCapacity( length+1 );
+
+ wxASSERT( ndx + length <= lines.length() );
+
+ memcpy( line, &lines[ndx], length );
+
+ ndx += length;
+ }
+
+ ++lineNum; // this gets incremented even if no bytes were read
+
+ line[length] = 0;
+
+ return length ? line : NULL;
+}
+
+
+INPUTSTREAM_LINE_READER::INPUTSTREAM_LINE_READER( wxInputStream* aStream, const wxString& aSource ) :
+ LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
+ m_stream( aStream )
+{
+ source = aSource;
+}
+
+
+char* INPUTSTREAM_LINE_READER::ReadLine() throw( IO_ERROR )
+{
+ length = 0;
+
+ for(;;)
+ {
+ if( length >= maxLineLength )
+ THROW_IO_ERROR( _( "Maximum line length exceeded" ) );
+
+ if( length + 1 > capacity )
+ expandCapacity( capacity * 2 );
+
+ // this read may fail, docs say to test LastRead() before trusting cc.
+ char cc = m_stream->GetC();
+
+ if( !m_stream->LastRead() )
+ break;
+
+ line[ length++ ] = cc;
+
+ if( cc == '\n' )
+ break;
+ }
+
+ line[ length ] = 0;
+
+ // lineNum is incremented even if there was no line read, because this
+ // leads to better error reporting when we hit an end of file.
+ ++lineNum;
+
+ return length ? line : NULL;
+}
+
+
+//-----<OUTPUTFORMATTER>----------------------------------------------------
+
+// factor out a common GetQuoteChar
+
+const char* OUTPUTFORMATTER::GetQuoteChar( const char* wrapee, const char* quote_char )
+{
+ // Include '#' so a symbol is not confused with a comment. We intend
+ // to wrap any symbol starting with a '#'.
+ // Our LEXER class handles comments, and comments appear to be an extension
+ // to the SPECCTRA DSN specification.
+ if( *wrapee == '#' )
+ return quote_char;
+
+ if( strlen( wrapee ) == 0 )
+ return quote_char;
+
+ bool isFirst = true;
+
+ for( ; *wrapee; ++wrapee, isFirst = false )
+ {
+ static const char quoteThese[] = "\t ()"
+ "%" // per Alfons of freerouting.net, he does not like this unquoted as of 1-Feb-2008
+ "{}" // guessing that these are problems too
+ ;
+
+ // if the string to be wrapped (wrapee) has a delimiter in it,
+ // return the quote_char so caller wraps the wrapee.
+ if( strchr( quoteThese, *wrapee ) )
+ return quote_char;
+
+ if( !isFirst && '-' == *wrapee )
+ return quote_char;
+ }
+
+ return ""; // caller does not need to wrap, can use an unwrapped string.
+}
+
+
+const char* OUTPUTFORMATTER::GetQuoteChar( const char* wrapee )
+{
+ return GetQuoteChar( wrapee, quoteChar );
+}
+
+int OUTPUTFORMATTER::vprint( const char* fmt, va_list ap ) throw( IO_ERROR )
+{
+ // This function can call vsnprintf twice.
+ // But internally, vsnprintf retrieves arguments from the va_list identified by arg as if
+ // va_arg was used on it, and thus the state of the va_list is likely to be altered by the call.
+ // see: www.cplusplus.com/reference/cstdio/vsnprintf
+ // we make a copy of va_list ap for the second call, if happens
+ va_list tmp;
+ va_copy( tmp, ap );
+ int ret = vsnprintf( &buffer[0], buffer.size(), fmt, ap );
+
+ if( ret >= (int) buffer.size() )
+ {
+ buffer.resize( ret + 1000 );
+ ret = vsnprintf( &buffer[0], buffer.size(), fmt, tmp );
+ }
+
+ va_end( tmp ); // Release the temporary va_list, initialised from ap
+
+ if( ret > 0 )
+ write( &buffer[0], ret );
+
+ return ret;
+}
+
+
+int OUTPUTFORMATTER::sprint( const char* fmt, ... ) throw( IO_ERROR )
+{
+ va_list args;
+
+ va_start( args, fmt );
+ int ret = vprint( fmt, args);
+ va_end( args );
+
+ return ret;
+}
+
+
+int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IO_ERROR )
+{
+#define NESTWIDTH 2 ///< how many spaces per nestLevel
+
+ va_list args;
+
+ va_start( args, fmt );
+
+ int result = 0;
+ int total = 0;
+
+ for( int i=0; i<nestLevel; ++i )
+ {
+ // no error checking needed, an exception indicates an error.
+ result = sprint( "%*c", NESTWIDTH, ' ' );
+
+ total += result;
+ }
+
+ // no error checking needed, an exception indicates an error.
+ result = vprint( fmt, args );
+
+ va_end( args );
+
+ total += result;
+ return total;
+}
+
+
+std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee ) throw( IO_ERROR )
+{
+ static const char quoteThese[] = "\t ()\n\r";
+
+ if( !aWrapee.size() || // quote null string as ""
+ aWrapee[0]=='#' || // quote a potential s-expression comment, so it is not a comment
+ aWrapee[0]=='"' || // NextTok() will travel through DSN_STRING path anyway, then must apply escapes
+ aWrapee.find_first_of( quoteThese ) != std::string::npos )
+ {
+ std::string ret;
+
+ ret.reserve( aWrapee.size()*2 + 2 );
+
+ ret += '"';
+
+ for( std::string::const_iterator it = aWrapee.begin(); it!=aWrapee.end(); ++it )
+ {
+ switch( *it )
+ {
+ case '\n':
+ ret += '\\';
+ ret += 'n';
+ break;
+ case '\r':
+ ret += '\\';
+ ret += 'r';
+ break;
+ case '\\':
+ ret += '\\';
+ ret += '\\';
+ break;
+ case '"':
+ ret += '\\';
+ ret += '"';
+ break;
+ default:
+ ret += *it;
+ }
+ }
+
+ ret += '"';
+
+ return ret;
+ }
+
+ return aWrapee;
+}
+
+
+std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee ) throw( IO_ERROR )
+{
+ // wxStrings are always encoded as UTF-8 as we convert to a byte sequence.
+ // The non-virutal function calls the virtual workhorse function, and if
+ // a different quoting or escaping strategy is desired from the standard,
+ // a derived class can overload Quotes() above, but
+ // should never be a reason to overload this Quotew() here.
+ return Quotes( (const char*) aWrapee.utf8_str() );
+}
+
+
+//-----<STRING_FORMATTER>----------------------------------------------------
+
+void STRING_FORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+{
+ mystring.append( aOutBuf, aCount );
+}
+
+void STRING_FORMATTER::StripUseless()
+{
+ std::string copy = mystring;
+
+ mystring.clear();
+
+ for( std::string::iterator i=copy.begin(); i!=copy.end(); ++i )
+ {
+ if( !isspace( *i ) && *i!=')' && *i!='(' && *i!='"' )
+ {
+ mystring += *i;
+ }
+ }
+}
+
+//-----<FILE_OUTPUTFORMATTER>----------------------------------------
+
+FILE_OUTPUTFORMATTER::FILE_OUTPUTFORMATTER( const wxString& aFileName,
+ const wxChar* aMode, char aQuoteChar ) throw( IO_ERROR ) :
+ OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar ),
+ m_filename( aFileName )
+{
+ m_fp = wxFopen( aFileName, aMode );
+
+ if( !m_fp )
+ {
+ wxString msg = wxString::Format(
+ _( "cannot open or save file '%s'" ),
+ m_filename.GetData() );
+ THROW_IO_ERROR( msg );
+ }
+}
+
+
+FILE_OUTPUTFORMATTER::~FILE_OUTPUTFORMATTER()
+{
+ if( m_fp )
+ fclose( m_fp );
+}
+
+
+void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+{
+ if( 1 != fwrite( aOutBuf, aCount, 1, m_fp ) )
+ {
+ wxString msg = wxString::Format(
+ _( "error writing to file '%s'" ),
+ m_filename.GetData() );
+ THROW_IO_ERROR( msg );
+ }
+}
+
+
+//-----<STREAM_OUTPUTFORMATTER>--------------------------------------
+
+void STREAM_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+{
+ int lastWrite;
+
+ // This might delay awhile if you were writing to say a socket, but for
+ // a file it should only go through the loop once.
+ for( int total = 0; total<aCount; total += lastWrite )
+ {
+ lastWrite = os.Write( aOutBuf, aCount ).LastWrite();
+
+ if( !os.IsOk() )
+ {
+ THROW_IO_ERROR( _( "OUTPUTSTREAM_OUTPUTFORMATTER write error" ) );
+ }
+ }
+}
+
diff --git a/common/search_stack.cpp b/common/search_stack.cpp
new file mode 100644
index 0000000..9982f41
--- /dev/null
+++ b/common/search_stack.cpp
@@ -0,0 +1,210 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <macros.h>
+#include <search_stack.h>
+#include <wx/tokenzr.h>
+
+
+#if defined(__MINGW32__)
+ #define PATH_SEPS wxT( ";\r\n" )
+#else
+ #define PATH_SEPS wxT( ":;\r\n" ) // unix == linux | mac
+#endif
+
+
+int SEARCH_STACK::Split( wxArrayString* aResult, const wxString aPathString )
+{
+ wxStringTokenizer tokenizer( aPathString, PATH_SEPS, wxTOKEN_STRTOK );
+
+ while( tokenizer.HasMoreTokens() )
+ {
+ wxString path = tokenizer.GetNextToken();
+
+ aResult->Add( path );
+ }
+
+ return aResult->GetCount();
+}
+
+
+// Convert aRelativePath to an absolute path based on aBaseDir
+static wxString base_dir( const wxString& aRelativePath, const wxString& aBaseDir )
+{
+ wxFileName fn = aRelativePath;
+
+ if( !fn.IsAbsolute() && !!aBaseDir )
+ {
+ wxASSERT_MSG( wxFileName( aBaseDir ).IsAbsolute(), wxT( "Must pass absolute path in aBaseDir" ) );
+ fn.MakeRelativeTo( aBaseDir );
+ }
+
+ return fn.GetFullPath();
+}
+
+
+wxString SEARCH_STACK::FilenameWithRelativePathInSearchList(
+ const wxString& aFullFilename, const wxString& aBaseDir )
+{
+ wxFileName fn = aFullFilename;
+ wxString filename = aFullFilename;
+
+ unsigned pathlen = fn.GetPath().Len(); // path len, used to find the better (shortest)
+ // subpath within defaults paths
+
+ for( unsigned kk = 0; kk < GetCount(); kk++ )
+ {
+ fn = aFullFilename;
+
+ // Search for the shortest subpath within 'this':
+ if( fn.MakeRelativeTo( base_dir( (*this)[kk], aBaseDir ) ) )
+ {
+ if( fn.GetPathWithSep().StartsWith( wxT("..") ) ) // Path outside kicad libs paths
+ continue;
+
+ if( pathlen > fn.GetPath().Len() ) // A better (shortest) subpath is found
+ {
+ filename = fn.GetPathWithSep() + fn.GetFullName();
+ pathlen = fn.GetPath().Len();
+ }
+ }
+ }
+
+ return filename;
+}
+
+
+void SEARCH_STACK::RemovePaths( const wxString& aPaths )
+{
+ bool isCS = wxFileName::IsCaseSensitive();
+ wxArrayString paths;
+
+ Split( &paths, aPaths );
+
+ for( unsigned i=0; i<paths.GetCount(); ++i )
+ {
+ wxString path = paths[i];
+
+ if( Index( path, isCS ) != wxNOT_FOUND )
+ {
+ Remove( path );
+ }
+ }
+}
+
+
+void SEARCH_STACK::AddPaths( const wxString& aPaths, int aIndex )
+{
+ bool isCS = wxFileName::IsCaseSensitive();
+ wxArrayString paths;
+
+ Split( &paths, aPaths );
+
+ // appending all of them, on large or negative aIndex
+ if( unsigned( aIndex ) >= GetCount() )
+ {
+ for( unsigned i=0; i<paths.GetCount(); ++i )
+ {
+ wxString path = paths[i];
+
+ if( wxFileName::IsDirReadable( path )
+ && Index( path, isCS ) == wxNOT_FOUND )
+ {
+ Add( path );
+ }
+ }
+ }
+
+ // inserting all of them:
+ else
+ {
+ for( unsigned i=0; i<paths.GetCount(); ++i )
+ {
+ wxString path = paths[i];
+
+ if( wxFileName::IsDirReadable( path )
+ && Index( path, isCS ) == wxNOT_FOUND )
+ {
+ Insert( path, aIndex );
+ aIndex++;
+ }
+ }
+ }
+}
+
+
+#if 1 // this function is too convoluted for words.
+
+const wxString SEARCH_STACK::LastVisitedPath( const wxString& aSubPathToSearch )
+{
+ wxString path;
+
+ // Initialize default path to the main default lib path
+ // this is the second path in list (the first is the project path).
+ unsigned pcount = GetCount();
+
+ if( pcount )
+ {
+ unsigned ipath = 0;
+
+ if( (*this)[0] == wxGetCwd() )
+ ipath = 1;
+
+ // First choice of path:
+ if( ipath < pcount )
+ path = (*this)[ipath];
+
+ // Search a sub path matching this SEARCH_PATH
+ if( !IsEmpty() )
+ {
+ for( ; ipath < pcount; ipath++ )
+ {
+ if( (*this)[ipath].Contains( aSubPathToSearch ) )
+ {
+ path = (*this)[ipath];
+ break;
+ }
+ }
+ }
+ }
+
+ if( path.IsEmpty() )
+ path = wxGetCwd();
+
+ return path;
+}
+#endif
+
+
+#if defined(DEBUG)
+void SEARCH_STACK::Show( const wxString& aPrefix ) const
+{
+ wxLogDebug( wxT( "%s SEARCH_STACK:" ), GetChars( aPrefix ) );
+
+ for( unsigned i=0; i<GetCount(); ++i )
+ {
+ wxLogDebug( wxT( " [%2u]:%s" ), i, TO_UTF8( (*this)[i] ) );
+ }
+}
+#endif
diff --git a/common/searchhelpfilefullpath.cpp b/common/searchhelpfilefullpath.cpp
new file mode 100644
index 0000000..3d16255
--- /dev/null
+++ b/common/searchhelpfilefullpath.cpp
@@ -0,0 +1,187 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 CERN
+ * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <pgm_base.h>
+#include <common.h>
+#include <config.h> // to define DEFAULT_INSTALL_PATH
+#include <macros.h>
+
+
+/**
+ * Function FindFileInSearchPaths
+ * looks in "this" for \a aFilename, but first modifies every search
+ * path by appending a list of path fragments from aSubdirs. That modification
+ * is not relative.
+ */
+wxString FindFileInSearchPaths( const SEARCH_STACK& aStack,
+ const wxString& aFilename, const wxArrayString* aSubdirs )
+{
+ wxPathList paths;
+
+ for( unsigned i = 0; i < aStack.GetCount(); ++i )
+ {
+ wxFileName fn( aStack[i], wxEmptyString );
+
+ if( aSubdirs )
+ {
+ for( unsigned j = 0; j < aSubdirs->GetCount(); j++ )
+ fn.AppendDir( (*aSubdirs)[j] );
+ }
+
+ wxLogDebug( wxT( " %s" ), GetChars( fn.GetFullPath() ) );
+
+ if( fn.DirExists() )
+ {
+ paths.Add( fn.GetPath() );
+ }
+ }
+
+ return paths.FindValidPath( aFilename );
+}
+
+
+// See also FindKicadHelpPath.cpp.notused.
+wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aBaseName )
+{
+ wxArrayString subdirs;
+ wxArrayString altsubdirs;
+ SEARCH_STACK ss = aSStack;
+
+ // It might already be in aSStack, but why depend on other code
+ // far away when it's so easy to add it again (to our copy) as the first place to look.
+
+ // This is CMAKE_INSTALL_PREFIX unless DEFAULT_INSTALL_PATH was defined during
+ // build configuration:
+ ss.AddPaths( wxT( DEFAULT_INSTALL_PATH ), 0 );
+
+#if defined(__WXMAC__)
+ ss.AddPaths( GetOSXKicadMachineDataDir() );
+ ss.AddPaths( Pgm().GetExecutablePath(), 0 );
+
+ // OS X packages can have the help files in
+ // /Library/Application\ Support/kicad/help,
+ // and in Contents/SharedSupport/help inside the
+ // bundle.
+ // Below we account for an international subdirectory.
+ subdirs.Add( wxT( "help" ) );
+ altsubdirs.Add( wxT( "Contents" ) );
+ altsubdirs.Add( wxT( "SharedSupport" ) );
+ altsubdirs.Add( wxT( "help" ) );
+#endif
+
+#if ! defined(__WXMAC__) // && defined(__linux__)
+ // This is the executable path minus the trailing bin directory used on Windows and Linux.
+ wxFileName tmp( Pgm().GetExecutablePath(), wxEmptyString );
+ wxArrayString binDirs = tmp.GetDirs();
+
+ if( !binDirs.IsEmpty() && binDirs[ binDirs.GetCount() - 1 ].CmpNoCase( wxT( "bin" ) ) == 0 )
+ tmp.RemoveLastDir();
+
+ ss.AddPaths( tmp.GetPath(), 0 );
+
+ // Based on kicad-doc.bzr/CMakeLists.txt, line 20, the help files are
+ // installed into "<CMAKE_INSTALL_PREFIX>/share/doc/kicad/help" for linux.
+ // This is ${KICAD_HELP} var in that CMakeLists.txt file.
+ // Below we account for an international subdirectory.
+ subdirs.Add( wxT( "share" ) );
+ subdirs.Add( wxT( "doc" ) );
+ subdirs.Add( wxT( "kicad" ) );
+ subdirs.Add( wxT( "help" ) );
+
+ // Based on kicad-doc.bzr/CMakeLists.txt, line 35, the help files are
+ // installed into "<CMAKE_INSTALL_PREFIX>/doc/help" for Windows.
+ // This is ${KICAD_HELP} var in that CMakeLists.txt file.
+ // Below we account for an international subdirectory.
+ altsubdirs.Add( wxT( "doc" ) );
+ altsubdirs.Add( wxT( "help" ) );
+#endif
+
+ // If there's a KICAD environment variable set, always use that guy's path first.
+ if( !Pgm().GetKicadEnvVariable().IsEmpty() )
+ ss.AddPaths( Pgm().GetKicadEnvVariable(), 0 );
+
+ /* Search for a help file.
+ * we *must* find a help file.
+ * so help is searched in directories in this order:
+ * help/<canonical name> like help/en_GB
+ * help/<short name> like help/en
+ * help/en
+ */
+
+ wxLocale* i18n = Pgm().GetLocale();
+
+ // We try to find help file in help/<canonical name>
+ // If fails, try to find help file in help/<short canonical name>
+ // If fails, try to find help file in help/en
+ wxArrayString locale_name_dirs;
+ locale_name_dirs.Add( i18n->GetCanonicalName() ); // canonical name like fr_FR
+
+ // wxLocale::GetName() does not return always the short name
+ locale_name_dirs.Add( i18n->GetName().BeforeLast( '_' ) ); // short canonical name like fr
+ locale_name_dirs.Add( wxT( "en" ) ); // default (en)
+
+#if defined(DEBUG) && 1
+ ss.Show( wxString( __func__ ) );
+ wxLogDebug( wxT( "%s: m_help_file:'%s'" ), __func__, GetChars( aBaseName ) );
+#endif
+
+ wxLogDebug( wxT( "Checking SEARCH_STACK for file %s" ), GetChars( aBaseName ) );
+
+ // Help files can be html (.html ext) or pdf (.pdf ext) files.
+ // Therefore, <BaseName>.html file is searched and if not found,
+ // <BaseName>.pdf file is searched in the same paths
+ wxString fn;
+
+ for( unsigned ii = 0; ii < locale_name_dirs.GetCount(); ii++ )
+ {
+ subdirs.Add( locale_name_dirs[ii] );
+ altsubdirs.Add( locale_name_dirs[ii] );
+
+ fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".html" ), &altsubdirs );
+
+ if( !fn.IsEmpty() )
+ break;
+
+ fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".pdf" ), &altsubdirs );
+
+ if( !fn.IsEmpty() )
+ break;
+
+ fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".html" ), &subdirs );
+
+ if( !fn.IsEmpty() )
+ break;
+
+ fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".pdf" ), &subdirs );
+
+ if( !fn.IsEmpty() )
+ break;
+
+ subdirs.RemoveAt( subdirs.GetCount() - 1 );
+ altsubdirs.RemoveAt( altsubdirs.GetCount() - 1 );
+ }
+
+ return fn;
+}
diff --git a/common/selcolor.cpp b/common/selcolor.cpp
new file mode 100644
index 0000000..f3eb039
--- /dev/null
+++ b/common/selcolor.cpp
@@ -0,0 +1,264 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/* Dialog for selecting color from the palette of available colors.
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <colors.h>
+
+#include <wx/statline.h>
+
+
+enum colors_id {
+ ID_COLOR_BLACK = 2000 // ID_COLOR_ = ID_COLOR_BLACK a ID_COLOR_BLACK + 31
+};
+
+
+class WinEDA_SelColorFrame : public wxDialog
+{
+public:
+ WinEDA_SelColorFrame( wxWindow* parent,
+ const wxPoint& framepos, int OldColor );
+ ~WinEDA_SelColorFrame() {};
+
+private:
+ void Init_Dialog( int aOldColor );
+ void OnCancel( wxCommandEvent& event );
+ void SelColor( wxCommandEvent& event );
+
+ DECLARE_EVENT_TABLE()
+};
+
+
+BEGIN_EVENT_TABLE( WinEDA_SelColorFrame, wxDialog )
+ EVT_BUTTON( wxID_CANCEL, WinEDA_SelColorFrame::OnCancel )
+ EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + 31,
+ wxEVT_COMMAND_BUTTON_CLICKED,
+ WinEDA_SelColorFrame::SelColor )
+END_EVENT_TABLE()
+
+
+EDA_COLOR_T DisplayColorFrame( wxWindow* parent, int OldColor )
+{
+ wxPoint framepos;
+ EDA_COLOR_T color;
+
+ wxGetMousePosition( &framepos.x, &framepos.y );
+
+ WinEDA_SelColorFrame* frame = new WinEDA_SelColorFrame( parent,
+ framepos, OldColor );
+ color = static_cast<EDA_COLOR_T>( frame->ShowModal() );
+ frame->Destroy();
+ if( color > NBCOLORS )
+ color = UNSPECIFIED_COLOR;
+ return color;
+}
+
+
+WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow* parent,
+ const wxPoint& framepos,
+ int OldColor ) :
+ wxDialog( parent, -1, _( "Colors" ), framepos, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER )
+{
+
+ Init_Dialog( OldColor );
+ // Resize the dialog
+ GetSizer()->SetSizeHints( this );
+
+ // Ensure the whole frame is visible, whenever the asked position.
+ // Moreover with a work station having dual monitors, the asked position can be relative to a monitor
+ // and this frame can be displayed on the other monitor, with an "out of screen" position.
+ // Give also a small margin.
+ int margin = 10;
+ wxPoint windowPosition = GetPosition();
+ if( framepos != wxDefaultPosition )
+ {
+ if( windowPosition.x < margin )
+ windowPosition.x = margin;
+ // Under MACOS, a vertical margin >= 20 is needed by the system menubar
+ int v_margin = std::max(20, margin);
+ if( windowPosition.y < v_margin )
+ windowPosition.y = v_margin;
+ if( windowPosition != framepos )
+ SetPosition(windowPosition);
+ }
+ wxPoint endCornerPosition = GetPosition();
+ endCornerPosition.x += GetSize().x + margin;
+ endCornerPosition.y += GetSize().y + margin;
+
+ windowPosition = GetPosition();
+ wxRect freeScreenArea( wxGetClientDisplayRect( ) );
+
+ if( freeScreenArea.GetRight() < endCornerPosition.x )
+ {
+ windowPosition.x += freeScreenArea.GetRight() - endCornerPosition.x;
+
+ if( windowPosition.x < freeScreenArea.x )
+ windowPosition.x = freeScreenArea.x;
+
+ // Sligly modify the vertical position to avoid the mouse to be
+ // exactly on the upper side of the window
+ windowPosition.y +=5;
+ endCornerPosition.y += 5;
+ }
+
+ if( freeScreenArea.GetBottom() < endCornerPosition.y )
+ {
+ windowPosition.y += freeScreenArea.GetBottom() - endCornerPosition.y;
+
+ if( windowPosition.y < freeScreenArea.y )
+ windowPosition.y = freeScreenArea.y;
+ }
+
+ SetPosition(windowPosition);
+}
+
+void WinEDA_SelColorFrame::Init_Dialog( int aOldColor )
+{
+ wxBoxSizer* OuterBoxSizer = NULL;
+ wxBoxSizer* MainBoxSizer = NULL;
+ wxFlexGridSizer* FlexColumnBoxSizer = NULL;
+ wxBitmapButton* BitmapButton = NULL;
+ wxStaticLine* Line = NULL;
+ wxStdDialogButtonSizer* StdDialogButtonSizer = NULL;
+ wxButton* Button = NULL;
+
+ int ii, butt_ID;
+ int w = 20, h = 20;
+ bool ColorFound = false;
+
+ SetReturnCode( -1 );
+
+ OuterBoxSizer = new wxBoxSizer( wxVERTICAL );
+ SetSizer( OuterBoxSizer );
+
+ MainBoxSizer = new wxBoxSizer( wxHORIZONTAL );
+ OuterBoxSizer->Add( MainBoxSizer, 1, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ for( ii = 0; ii < NBCOLORS; ++ii )
+ {
+ // Provide a separate column for every six buttons (and their
+ // associated text strings), so provide a FlexGrid Sizer with
+ // eight rows and two columns.
+ if( ii % 6 == 0 )
+ {
+ FlexColumnBoxSizer = new wxFlexGridSizer( 6, 2, 0, 0 );
+
+ // Specify that all of the rows can be expanded.
+ for( int ii = 0; ii < 6; ii++ )
+ {
+ FlexColumnBoxSizer->AddGrowableRow( ii );
+ }
+
+ // Specify that the second column can also be expanded.
+ FlexColumnBoxSizer->AddGrowableCol( 1 );
+
+ MainBoxSizer->Add( FlexColumnBoxSizer, 1, wxGROW | wxTOP, 5 );
+ }
+
+ butt_ID = ID_COLOR_BLACK + ii;
+ wxMemoryDC iconDC;
+ wxBitmap ButtBitmap( w, h );
+ wxBrush brush;
+
+ iconDC.SelectObject( ButtBitmap );
+
+ EDA_COLOR_T buttcolor = g_ColorRefs[ii].m_Numcolor;
+
+ iconDC.SetPen( *wxBLACK_PEN );
+ ColorSetBrush( &brush, buttcolor );
+ brush.SetStyle( wxBRUSHSTYLE_SOLID );
+
+ iconDC.SetBrush( brush );
+ iconDC.SetBackground( *wxGREY_BRUSH );
+ iconDC.Clear();
+ iconDC.DrawRoundedRectangle( 0, 0, w, h, (double) h / 3 );
+
+ BitmapButton = new wxBitmapButton( this, butt_ID, ButtBitmap,
+ wxDefaultPosition, wxSize( w+8, h+6 ) );
+ FlexColumnBoxSizer->Add( BitmapButton, 0,
+ wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
+ wxLEFT | wxBOTTOM, 5 );
+
+ // Set focus to this button if its color matches the
+ // color which had been selected previously (for
+ // whichever layer's color is currently being edited).
+ if( aOldColor == buttcolor )
+ {
+ ColorFound = true;
+ BitmapButton->SetFocus();
+ }
+
+ wxStaticText* label = new wxStaticText( this, -1,
+ wxGetTranslation( ColorGetName( buttcolor ) ),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ FlexColumnBoxSizer->Add( label, 1,
+ wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
+ wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+ }
+
+ // Provide a Cancel button as well, so that this dialog
+ // box can also be canceled by pressing the Esc key
+ // (and also provide a horizontal static line to separate
+ // that button from all of the other buttons).
+
+ Line = new wxStaticLine( this, -1, wxDefaultPosition,
+ wxDefaultSize, wxLI_HORIZONTAL );
+ OuterBoxSizer->Add( Line, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ StdDialogButtonSizer = new wxStdDialogButtonSizer;
+ OuterBoxSizer->Add( StdDialogButtonSizer, 0, wxGROW | wxALL, 10 );
+
+ Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ), wxDefaultPosition,
+ wxDefaultSize, 0 );
+ StdDialogButtonSizer->AddButton( Button );
+
+ StdDialogButtonSizer->Realize();
+
+ // Set focus to the Cancel button if the currently selected color
+ // does not match any of the colors provided by this dialog box.
+ // (That shouldn't ever happen in practice though.)
+ if( !ColorFound )
+ Button->SetFocus();
+}
+
+void WinEDA_SelColorFrame::OnCancel( wxCommandEvent& WXUNUSED( event ) )
+{
+ // Setting the return value to -1 indicates that the
+ // dialog box has been canceled (and thus that the
+ // previously selected color is to be retained).
+ EndModal( -1 );
+}
+
+
+void WinEDA_SelColorFrame::SelColor( wxCommandEvent& event )
+{
+ int id = event.GetId();
+
+ EndModal( id - ID_COLOR_BLACK );
+}
diff --git a/common/single_top.cpp b/common/single_top.cpp
new file mode 100644
index 0000000..7016501
--- /dev/null
+++ b/common/single_top.cpp
@@ -0,0 +1,308 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+
+ This is a program launcher for a single KIFACE DSO. It only mimics a KIWAY,
+ not actually implements one, since only a single DSO is supported by it.
+
+ It is compiled multiple times, once for each standalone program and as such
+ gets different compiler command line supplied #defines from CMake.
+
+*/
+
+
+#include <typeinfo>
+#include <macros.h>
+#include <fctsys.h>
+#include <wx/filename.h>
+#include <wx/stdpaths.h>
+#include <wx/snglinst.h>
+
+#include <kiway.h>
+#include <pgm_base.h>
+#include <kiway_player.h>
+#include <confirm.h>
+
+
+// Only a single KIWAY is supported in this single_top top level component,
+// which is dedicated to loading only a single DSO.
+KIWAY Kiway( &Pgm(), KFCTL_STANDALONE );
+
+
+// implement a PGM_BASE and a wxApp side by side:
+
+/**
+ * Struct PGM_SINGLE_TOP
+ * implements PGM_BASE with its own OnPgmInit() and OnPgmExit().
+ */
+static struct PGM_SINGLE_TOP : public PGM_BASE
+{
+ bool OnPgmInit( wxApp* aWxApp ); // overload PGM_BASE virtual
+ void OnPgmExit(); // overload PGM_BASE virtual
+ void MacOpenFile( const wxString& aFileName ); // overload PGM_BASE virtual
+} program;
+
+
+PGM_BASE& Pgm()
+{
+ return program;
+}
+
+
+/**
+ * Struct APP_SINGLE_TOP
+ * implements a bare naked wxApp (so that we don't become dependent on
+ * functionality in a wxApp derivative that we cannot deliver under wxPython).
+ */
+struct APP_SINGLE_TOP : public wxApp
+{
+#if defined (__LINUX__)
+ APP_SINGLE_TOP(): wxApp()
+ {
+ // Disable proxy menu in Unity window manager. Only usual menubar works with wxWidgets (at least <= 3.1)
+ // When the proxy menu menubar is enable, some important things for us do not work: menuitems UI events and shortcuts.
+ wxString wm;
+
+ if( wxGetEnv( wxT( "XDG_CURRENT_DESKTOP" ), &wm ) && wm.CmpNoCase( wxT( "Unity" ) ) == 0 )
+ {
+ wxSetEnv ( wxT("UBUNTU_MENUPROXY" ), wxT( "0" ) );
+ }
+ }
+#endif
+
+ bool OnInit() // overload wxApp virtual
+ {
+ try
+ {
+ return Pgm().OnPgmInit( this );
+ }
+ catch( const std::exception& e )
+ {
+ wxLogError( wxT( "Unhandled exception class: %s what: %s" ),
+ GetChars( FROM_UTF8( typeid(e).name() )),
+ GetChars( FROM_UTF8( e.what() ) ) );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxLogError( GetChars( ioe.errorText ) );
+ }
+ catch(...)
+ {
+ wxLogError( wxT( "Unhandled exception of unknown type" ) );
+ }
+
+ Pgm().OnPgmExit();
+
+ return false;
+ }
+
+ int OnExit() // overload wxApp virtual
+ {
+ // Fixes segfault when wxPython scripting is enabled.
+#if defined( KICAD_SCRIPTING_WXPYTHON )
+ Pgm().OnPgmExit();
+#endif
+ return wxApp::OnExit();
+ }
+
+ int OnRun() // overload wxApp virtual
+ {
+ int ret = -1;
+
+ try
+ {
+ ret = wxApp::OnRun();
+ }
+ catch( const std::exception& e )
+ {
+ wxLogError( wxT( "Unhandled exception class: %s what: %s" ),
+ GetChars( FROM_UTF8( typeid(e).name() )),
+ GetChars( FROM_UTF8( e.what() ) ) );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxLogError( GetChars( ioe.errorText ) );
+ }
+ catch(...)
+ {
+ wxLogError( wxT( "Unhandled exception of unknown type" ) );
+ }
+
+ // Works properly when wxPython scripting is disabled.
+#if !defined( KICAD_SCRIPTING_WXPYTHON )
+ Pgm().OnPgmExit();
+#endif
+
+ return ret;
+ }
+
+ /**
+ * Function MacOpenFile
+ * is specific to MacOSX (not used under Linux or Windows).
+ * MacOSX requires it for file association.
+ * @see http://wiki.wxwidgets.org/WxMac-specific_topics
+ */
+ void MacOpenFile( const wxString& aFileName ) // overload wxApp virtual
+ {
+ Pgm().MacOpenFile( aFileName );
+ }
+};
+
+IMPLEMENT_APP( APP_SINGLE_TOP );
+
+
+bool PGM_SINGLE_TOP::OnPgmInit( wxApp* aWxApp )
+{
+ // first thing: set m_wx_app
+ m_wx_app = aWxApp;
+
+ wxString absoluteArgv0 = wxStandardPaths::Get().GetExecutablePath();
+
+ if( !wxIsAbsolutePath( absoluteArgv0 ) )
+ {
+ wxLogError( wxT( "No meaningful argv[0]" ) );
+ return false;
+ }
+
+ if( !initPgm() )
+ return false;
+
+#if !defined(BUILD_KIWAY_DLL)
+ // Get the getter, it is statically linked into this binary image.
+ KIFACE_GETTER_FUNC* getter = &KIFACE_GETTER;
+
+ int kiface_version;
+
+ // Get the KIFACE.
+ KIFACE* kiface = getter( &kiface_version, KIFACE_VERSION, this );
+
+ // Trick the KIWAY into thinking it loaded a KIFACE, by recording the KIFACE
+ // in the KIWAY. It needs to be there for KIWAY::OnKiwayEnd() anyways.
+ Kiway.set_kiface( KIWAY::KifaceType( TOP_FRAME ), kiface );
+#endif
+
+ // Use KIWAY to create a top window, which registers its existence also.
+ // "TOP_FRAME" is a macro that is passed on compiler command line from CMake,
+ // and is one of the types in FRAME_T.
+ KIWAY_PLAYER* frame = Kiway.Player( TOP_FRAME, true );
+
+ Kiway.SetTop( frame );
+
+ App().SetTopWindow( frame ); // wxApp gets a face.
+
+ // Open project or file specified on the command line:
+ int argc = App().argc;
+
+ if( argc > 1 )
+ {
+ /*
+ gerbview handles multiple project data files, i.e. gerber files on
+ cmd line. Others currently do not, they handle only one. For common
+ code simplicity we simply pass all the arguments in however, each
+ program module can do with them what they want, ignore, complain
+ whatever. We don't establish policy here, as this is a multi-purpose
+ launcher.
+ */
+
+ std::vector<wxString> argSet;
+
+ for( int i=1; i<argc; ++i )
+ {
+ argSet.push_back( App().argv[i] );
+ }
+
+ // special attention to the first argument: argv[1] (==argSet[0])
+ wxFileName argv1( argSet[0] );
+
+ if( argc == 2 )
+ {
+#if defined(PGM_DATA_FILE_EXT)
+ // PGM_DATA_FILE_EXT, if present, may be different for each compile,
+ // it may come from CMake on the compiler command line, but often does not.
+ // This facillity is mostly useful for those program modules
+ // supporting a single argv[1].
+ if( !argv1.GetExt() )
+ argv1.SetExt( wxT( PGM_DATA_FILE_EXT ) );
+
+#endif
+ argv1.MakeAbsolute();
+
+ argSet[0] = argv1.GetFullPath();
+ }
+
+ // Use the KIWAY_PLAYER::OpenProjectFiles() API function:
+ if( !frame->OpenProjectFiles( argSet ) )
+ {
+ // OpenProjectFiles() API asks that it report failure to the UI.
+ // Nothing further to say here.
+
+ // We've already initialized things at this point, but wx won't call OnExit if
+ // we fail out. Call our own cleanup routine here to ensure the relevant resources
+ // are freed at the right time (if they aren't, segfaults will occur).
+ OnPgmExit();
+
+ // Fail the process startup if the file could not be opened,
+ // although this is an optional choice, one that can be reversed
+ // also in the KIFACE specific OpenProjectFiles() return value.
+ return false;
+ }
+ }
+
+ frame->Show();
+
+ return true;
+}
+
+
+void PGM_SINGLE_TOP::OnPgmExit()
+{
+ Kiway.OnKiwayEnd();
+
+ saveCommonSettings();
+
+ // Destroy everything in PGM_BASE, especially wxSingleInstanceCheckerImpl
+ // earlier than wxApp and earlier than static destruction would.
+ PGM_BASE::destroy();
+}
+
+
+void PGM_SINGLE_TOP::MacOpenFile( const wxString& aFileName )
+{
+ wxFileName filename( aFileName );
+
+ if( filename.FileExists() )
+ {
+#if 0
+ // this pulls in EDA_DRAW_FRAME type info, which we don't want in
+ // the single_top link image.
+ KIWAY_PLAYER* frame = dynamic_cast<KIWAY_PLAYER*>( App().GetTopWindow() );
+#else
+ KIWAY_PLAYER* frame = (KIWAY_PLAYER*) App().GetTopWindow();
+#endif
+ if( frame )
+ frame->OpenProjectFiles( std::vector<wxString>( 1, aFileName ) );
+ }
+}
diff --git a/common/string.cpp b/common/string.cpp
new file mode 100644
index 0000000..d0bfe33
--- /dev/null
+++ b/common/string.cpp
@@ -0,0 +1,485 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file string.cpp
+ * @brief Some useful functions to handle strings.
+ */
+
+#include <fctsys.h>
+#include <macros.h>
+#include <richio.h> // StrPrintf
+#include <kicad_string.h>
+
+
+/**
+ * Illegal file name characters used to insure file names will be valid on all supported
+ * platforms. This is the list of illegal file name characters for Windows which includes
+ * the illegal file name characters for Linux and OSX.
+ */
+static const char illegalFileNameChars[] = "\\/:\"<>|";
+
+
+int ReadDelimitedText( wxString* aDest, const char* aSource )
+{
+ std::string utf8; // utf8 but without escapes and quotes.
+ bool inside = false;
+ const char* start = aSource;
+ char cc;
+
+ while( (cc = *aSource++) != 0 )
+ {
+ if( cc == '"' )
+ {
+ if( inside )
+ break; // 2nd double quote is end of delimited text
+
+ inside = true; // first delimiter found, make note, do not copy
+ }
+
+ else if( inside )
+ {
+ if( cc == '\\' )
+ {
+ cc = *aSource++;
+
+ if( !cc )
+ break;
+
+ // do no copy the escape byte if it is followed by \ or "
+ if( cc != '"' && cc != '\\' )
+ utf8 += '\\';
+
+ utf8 += cc;
+ }
+ else
+ {
+ utf8 += cc;
+ }
+ }
+ }
+
+ *aDest = FROM_UTF8( utf8.c_str() );
+
+ return aSource - start;
+}
+
+
+int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize )
+{
+ if( aDestSize <= 0 )
+ return 0;
+
+ bool inside = false;
+ const char* start = aSource;
+ char* limit = aDest + aDestSize - 1;
+ char cc;
+
+ while( (cc = *aSource++) != 0 && aDest < limit )
+ {
+ if( cc == '"' )
+ {
+ if( inside )
+ break; // 2nd double quote is end of delimited text
+
+ inside = true; // first delimiter found, make note, do not copy
+ }
+
+ else if( inside )
+ {
+ if( cc == '\\' )
+ {
+ cc = *aSource++;
+
+ if( !cc )
+ break;
+
+ // do no copy the escape byte if it is followed by \ or "
+ if( cc != '"' && cc != '\\' )
+ *aDest++ = '\\';
+
+ if( aDest < limit )
+ *aDest++ = cc;
+ }
+ else
+ {
+ *aDest++ = cc;
+ }
+ }
+ }
+
+ *aDest = 0;
+
+ return aSource - start;
+}
+
+
+std::string EscapedUTF8( const wxString& aString )
+{
+ std::string utf8 = TO_UTF8( aString );
+
+ std::string ret;
+
+ ret += '"';
+
+ for( std::string::const_iterator it = utf8.begin(); it!=utf8.end(); ++it )
+ {
+ // this escaping strategy is designed to be compatible with ReadDelimitedText():
+ if( *it == '"' )
+ {
+ ret += '\\';
+ ret += '"';
+ }
+ else if( *it == '\\' )
+ {
+ ret += '\\'; // double it up
+ ret += '\\';
+ }
+ else
+ {
+ ret += *it;
+ }
+ }
+
+ ret += '"';
+
+ return ret;
+}
+
+
+char* StrPurge( char* text )
+{
+ static const char whitespace[] = " \t\n\r\f\v";
+
+ if( text )
+ {
+ while( *text && strchr( whitespace, *text ) )
+ ++text;
+
+ char* cp = text + strlen( text ) - 1;
+
+ while( cp >= text && strchr( whitespace, *cp ) )
+ *cp-- = '\0';
+ }
+
+ return text;
+}
+
+
+char* GetLine( FILE* File, char* Line, int* LineNum, int SizeLine )
+{
+ do {
+ if( fgets( Line, SizeLine, File ) == NULL )
+ return NULL;
+
+ if( LineNum )
+ *LineNum += 1;
+
+ } while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0 );
+
+ strtok( Line, "\n\r" );
+ return Line;
+}
+
+
+wxString DateAndTime()
+{
+ wxDateTime datetime = wxDateTime::Now();
+
+ datetime.SetCountry( wxDateTime::Country_Default );
+ return datetime.Format( wxDefaultDateTimeFormat, wxDateTime::Local );
+}
+
+
+int StrNumCmp( const wxString& aString1, const wxString& aString2, int aLength, bool aIgnoreCase )
+{
+ int i;
+ int nb1 = 0, nb2 = 0;
+
+ wxString::const_iterator str1 = aString1.begin(), str2 = aString2.begin();
+
+ if( ( str1 == aString1.end() ) || ( str2 == aString2.end() ) )
+ return 0;
+
+ for( i = 0; i < aLength; i++ )
+ {
+ if( isdigit( *str1 ) && isdigit( *str2 ) ) /* digit found */
+ {
+ nb1 = 0;
+ nb2 = 0;
+
+ while( isdigit( *str1 ) )
+ {
+ nb1 = nb1 * 10 + (int) *str1 - '0';
+ ++str1;
+ }
+
+ while( isdigit( *str2 ) )
+ {
+ nb2 = nb2 * 10 + (int) *str2 - '0';
+ ++str2;
+ }
+
+ if( nb1 < nb2 )
+ return -1;
+
+ if( nb1 > nb2 )
+ return 1;
+ }
+
+ if( aIgnoreCase )
+ {
+ if( toupper( *str1 ) < toupper( *str2 ) )
+ return -1;
+
+ if( toupper( *str1 ) > toupper( *str2 ) )
+ return 1;
+
+ if( ( *str1 == 0 ) && ( *str2 == 0 ) )
+ return 0;
+ }
+ else
+ {
+ if( *str1 < *str2 )
+ return -1;
+
+ if( *str1 > *str2 )
+ return 1;
+
+ if( ( str1 == aString1.end() ) && ( str2 == aString2.end() ) )
+ return 0;
+ }
+
+ ++str1;
+ ++str2;
+ }
+
+ return 0;
+}
+
+
+bool WildCompareString( const wxString& pattern, const wxString& string_to_tst,
+ bool case_sensitive )
+{
+ const wxChar* cp = NULL, * mp = NULL;
+ const wxChar* wild, * string;
+ wxString _pattern, _string_to_tst;
+
+ if( case_sensitive )
+ {
+ wild = pattern.GetData();
+ string = string_to_tst.GetData();
+ }
+ else
+ {
+ _pattern = pattern;
+ _pattern.MakeUpper();
+ _string_to_tst = string_to_tst;
+ _string_to_tst.MakeUpper();
+ wild = _pattern.GetData();
+ string = _string_to_tst.GetData();
+ }
+
+ while( ( *string ) && ( *wild != '*' ) )
+ {
+ if( ( *wild != *string ) && ( *wild != '?' ) )
+ return false;
+
+ wild++; string++;
+ }
+
+ while( *string )
+ {
+ if( *wild == '*' )
+ {
+ if( !*++wild )
+ return 1;
+ mp = wild;
+ cp = string + 1;
+ }
+ else if( ( *wild == *string ) || ( *wild == '?' ) )
+ {
+ wild++;
+ string++;
+ }
+ else
+ {
+ wild = mp;
+ string = cp++;
+ }
+ }
+
+ while( *wild == '*' )
+ {
+ wild++;
+ }
+
+ return !*wild;
+}
+
+
+int RefDesStringCompare( const wxString& strFWord, const wxString& strSWord )
+{
+ // The different sections of the first string
+ wxString strFWordBeg, strFWordMid, strFWordEnd;
+
+ // The different sections of the second string
+ wxString strSWordBeg, strSWordMid, strSWordEnd;
+
+ int isEqual = 0; // The numerical results of a string compare
+ int iReturn = 0; // The variable that is being returned
+
+ long lFirstDigit = 0; // The converted middle section of the first string
+ long lSecondDigit = 0; // The converted middle section of the second string
+
+ // Split the two strings into separate parts
+ SplitString( strFWord, &strFWordBeg, &strFWordMid, &strFWordEnd );
+ SplitString( strSWord, &strSWordBeg, &strSWordMid, &strSWordEnd );
+
+ // Compare the Beginning section of the strings
+ isEqual = strFWordBeg.CmpNoCase( strSWordBeg );
+
+ if( isEqual > 0 )
+ iReturn = 1;
+ else if( isEqual < 0 )
+ iReturn = -1;
+ else
+ {
+ // If the first sections are equal compare their digits
+ strFWordMid.ToLong( &lFirstDigit );
+ strSWordMid.ToLong( &lSecondDigit );
+
+ if( lFirstDigit > lSecondDigit )
+ iReturn = 1;
+ else if( lFirstDigit < lSecondDigit )
+ iReturn = -1;
+ else
+ {
+ // If the first two sections are equal compare the endings
+ isEqual = strFWordEnd.CmpNoCase( strSWordEnd );
+
+ if( isEqual > 0 )
+ iReturn = 1;
+ else if( isEqual < 0 )
+ iReturn = -1;
+ else
+ iReturn = 0;
+ }
+ }
+
+ return iReturn;
+}
+
+
+int SplitString( wxString strToSplit,
+ wxString* strBeginning,
+ wxString* strDigits,
+ wxString* strEnd )
+{
+ // Clear all the return strings
+ strBeginning->Empty();
+ strDigits->Empty();
+ strEnd->Empty();
+
+ // There no need to do anything if the string is empty
+ if( strToSplit.length() == 0 )
+ return 0;
+
+ // Starting at the end of the string look for the first digit
+ int ii;
+
+ for( ii = (strToSplit.length() - 1); ii >= 0; ii-- )
+ {
+ if( isdigit( strToSplit[ii] ) )
+ break;
+ }
+
+ // If there were no digits then just set the single string
+ if( ii < 0 )
+ {
+ *strBeginning = strToSplit;
+ }
+ else
+ {
+ // Since there is at least one digit this is the trailing string
+ *strEnd = strToSplit.substr( ii + 1 );
+
+ // Go to the end of the digits
+ int position = ii + 1;
+
+ for( ; ii >= 0; ii-- )
+ {
+ if( !isdigit( strToSplit[ii] ) )
+ break;
+ }
+
+ // If all that was left was digits, then just set the digits string
+ if( ii < 0 )
+ *strDigits = strToSplit.substr( 0, position );
+
+ /* We were only looking for the last set of digits everything else is
+ * part of the preamble */
+ else
+ {
+ *strDigits = strToSplit.substr( ii + 1, position - ii - 1 );
+ *strBeginning = strToSplit.substr( 0, ii + 1 );
+ }
+ }
+
+ return 0;
+}
+
+
+wxString GetIllegalFileNameWxChars()
+{
+ return FROM_UTF8( illegalFileNameChars );
+}
+
+
+bool ReplaceIllegalFileNameChars( std::string* aName, int aReplaceChar )
+{
+ bool changed = false;
+ std::string result;
+
+ for( std::string::iterator it = aName->begin(); it != aName->end(); ++it )
+ {
+ if( strchr( illegalFileNameChars, *it ) )
+ {
+ if( aReplaceChar )
+ StrPrintf( &result, "%c", aReplaceChar );
+ else
+ StrPrintf( &result, "%%%02x", *it );
+
+ changed = true;
+ }
+ else
+ {
+ result += *it;
+ }
+ }
+
+ if( changed )
+ *aName = result;
+
+ return changed;
+}
diff --git a/common/strtok_r.c b/common/strtok_r.c
new file mode 100644
index 0000000..a0b0997
--- /dev/null
+++ b/common/strtok_r.c
@@ -0,0 +1,35 @@
+/*
+ * public domain strtok_r()
+ */
+
+#include <string.h>
+
+char* strtok_r( char* str, const char* delim, char** nextp )
+{
+ char* ret;
+
+ if( str == NULL )
+ {
+ str = *nextp;
+ }
+
+ str += strspn( str, delim );
+
+ if( *str == '\0' )
+ {
+ return NULL;
+ }
+
+ ret = str;
+
+ str += strcspn( str, delim );
+
+ if( *str )
+ {
+ *str++ = '\0';
+ }
+
+ *nextp = str;
+
+ return ret;
+}
diff --git a/common/systemdirsappend.cpp b/common/systemdirsappend.cpp
new file mode 100644
index 0000000..3ce86dc
--- /dev/null
+++ b/common/systemdirsappend.cpp
@@ -0,0 +1,166 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/stdpaths.h>
+
+#include <common.h>
+#include <search_stack.h>
+#include <pgm_base.h>
+#include <config.h> // to define DEFAULT_INSTALL_PATH
+
+
+// put your best guesses in here, send the computer on a wild goose chase, its
+// got nothing else to do.
+
+void SystemDirsAppend( SEARCH_STACK* aSearchStack )
+{
+ // No clearing is done here, the most general approach is NOT to assume that
+ // our appends will be the only thing in the stack. This function has no
+ // knowledge of caller's intentions.
+
+ // wxPathList::AddEnvList() is broken, use SEARCH_STACK::AddPaths().
+ // SEARCH_STACK::AddPaths() will verify readability and existence of
+ // each directory before adding.
+ SEARCH_STACK maybe;
+
+ // User environment variable path is the first search path. Chances are
+ // if the user is savvy enough to set an environment variable they know
+ // what they are doing. It should take precedence over anything else.
+ // Otherwise don't set it.
+ maybe.AddPaths( wxGetenv( wxT( "KICAD" ) ) );
+
+#ifdef __WXMAC__
+ // Add the directory for the user-dependent, program specific data files.
+ maybe.AddPaths( GetOSXKicadUserDataDir() );
+
+ // Global machine specific application data
+ maybe.AddPaths( GetOSXKicadMachineDataDir() );
+
+ // Global application specific data files inside bundle
+ maybe.AddPaths( GetOSXKicadDataDir() );
+#else
+ // This is from CMAKE_INSTALL_PREFIX.
+ // Useful when KiCad is installed by `make install`.
+ // Use as second ranked place.
+ maybe.AddPaths( wxT( DEFAULT_INSTALL_PATH ) );
+
+ // Add the directory for the user-dependent, program specific data files.
+ // According to wxWidgets documentation:
+ // Unix: ~/.appname
+ // Windows: C:\Documents and Settings\username\Application Data\appname
+ maybe.AddPaths( wxStandardPaths::Get().GetUserDataDir() );
+
+ {
+ // Should be full path to this program executable.
+ wxString bin_dir = Pgm().GetExecutablePath();
+
+#if defined(__MINGW32__)
+ // bin_dir uses unix path separator. So to parse with wxFileName
+ // use windows separator, especially important for server inclusion:
+ // like: \\myserver\local_path .
+ bin_dir.Replace( wxFileName::GetPathSeparator( wxPATH_UNIX ),
+ wxFileName::GetPathSeparator( wxPATH_WIN ) );
+#endif
+
+ wxFileName bin_fn( bin_dir, wxEmptyString );
+
+ // Dir of the global (not user-specific), application specific, data files.
+ // From wx docs:
+ // Unix: prefix/share/appname
+ // Windows: the directory where the executable file is located
+ // Mac: appname.app/Contents/SharedSupport bundle subdirectory
+ wxString data_dir = wxStandardPaths::Get().GetDataDir();
+
+ if( bin_fn.GetPath() != data_dir )
+ {
+ // add data_dir if it is different from the bin_dir
+ maybe.AddPaths( data_dir );
+ }
+
+ // Up one level relative to binary path with "share" appended below.
+ bin_fn.RemoveLastDir();
+ maybe.AddPaths( bin_fn.GetPath() );
+ }
+
+ /* The normal OS program file install paths allow for a binary to be
+ * installed in a different path from the library files. This is
+ * useful for development purposes so the library and documentation
+ * files do not need to be installed separately. If someone can
+ * figure out a way to implement this without #ifdef, please do.
+ */
+#if defined(__MINGW32__)
+ maybe.AddPaths( wxGetenv( wxT( "PROGRAMFILES" ) ) );
+#else
+ maybe.AddPaths( wxGetenv( wxT( "PATH" ) ) );
+#endif
+#endif
+
+#if defined(DEBUG) && 0
+ maybe.Show( "maybe wish list" );
+#endif
+
+ // Append 1) kicad, 2) kicad/share, 3) share, and 4) share/kicad to each
+ // possible base path in 'maybe'. Since SEARCH_STACK::AddPaths() will verify
+ // readability and existence of each directory, not all of these will be
+ // actually appended.
+ for( unsigned i = 0; i < maybe.GetCount(); ++i )
+ {
+ wxFileName fn( maybe[i], wxEmptyString );
+
+#ifndef __WXMAC__
+ if( fn.GetPath().AfterLast( fn.GetPathSeparator() ) == wxT( "bin" ) )
+ {
+ fn.RemoveLastDir();
+
+ if( !fn.GetDirCount() )
+ continue; // at least on linux
+ }
+#endif
+
+ aSearchStack->AddPaths( fn.GetPath() );
+
+#ifndef __WXMAC__
+ fn.AppendDir( wxT( "kicad" ) );
+ aSearchStack->AddPaths( fn.GetPath() ); // add maybe[i]/kicad
+
+ fn.AppendDir( wxT( "share" ) );
+ aSearchStack->AddPaths( fn.GetPath() ); // add maybe[i]/kicad/share
+
+ fn.RemoveLastDir(); // ../ clear share
+ fn.RemoveLastDir(); // ../ clear kicad
+
+ fn.AppendDir( wxT( "share" ) );
+ aSearchStack->AddPaths( fn.GetPath() ); // add maybe[i]/share
+
+ fn.AppendDir( wxT( "kicad" ) );
+ aSearchStack->AddPaths( fn.GetPath() ); // add maybe[i]/share/kicad
+#endif
+ }
+
+#if defined(DEBUG) && 0
+ // final results:
+ aSearchStack->Show( __func__ );
+#endif
+}
diff --git a/common/tool/action_manager.cpp b/common/tool/action_manager.cpp
new file mode 100644
index 0000000..ddc3cea
--- /dev/null
+++ b/common/tool/action_manager.cpp
@@ -0,0 +1,269 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <tool/action_manager.h>
+#include <tool/tool_manager.h>
+#include <tool/tool_action.h>
+#include <draw_frame.h>
+
+#include <hotkeys_basic.h>
+#include <boost/foreach.hpp>
+#include <boost/range/adaptor/map.hpp>
+#include <cassert>
+
+ACTION_MANAGER::ACTION_MANAGER( TOOL_MANAGER* aToolManager ) :
+ m_toolMgr( aToolManager )
+{
+ // Register known actions
+ std::list<TOOL_ACTION*>& actionList = GetActionList();
+
+ BOOST_FOREACH( TOOL_ACTION* action, actionList )
+ {
+ if( action->m_id == -1 )
+ action->m_id = MakeActionId( action->m_name );
+
+ RegisterAction( new TOOL_ACTION( *action ) );
+ }
+}
+
+
+ACTION_MANAGER::~ACTION_MANAGER()
+{
+ while( !m_actionNameIndex.empty() )
+ {
+ TOOL_ACTION* action = m_actionNameIndex.begin()->second;
+ UnregisterAction( action );
+ delete action;
+ }
+}
+
+
+void ACTION_MANAGER::RegisterAction( TOOL_ACTION* aAction )
+{
+ // TOOL_ACTIONs are supposed to be named [appName.]toolName.actionName (with dots between)
+ // action name without specifying at least toolName is not valid
+ assert( aAction->GetName().find( '.', 0 ) != std::string::npos );
+
+ // TOOL_ACTIONs must have unique names & ids
+ assert( m_actionNameIndex.find( aAction->m_name ) == m_actionNameIndex.end() );
+
+ m_actionNameIndex[aAction->m_name] = aAction;
+}
+
+
+void ACTION_MANAGER::UnregisterAction( TOOL_ACTION* aAction )
+{
+ m_actionNameIndex.erase( aAction->m_name );
+ int hotkey = GetHotKey( *aAction );
+
+ if( hotkey )
+ {
+ std::list<TOOL_ACTION*>& actions = m_actionHotKeys[hotkey];
+ std::list<TOOL_ACTION*>::iterator action = std::find( actions.begin(), actions.end(), aAction );
+
+ if( action != actions.end() )
+ actions.erase( action );
+ else
+ assert( false );
+ }
+}
+
+
+int ACTION_MANAGER::MakeActionId( const std::string& aActionName )
+{
+ static int currentActionId = 1;
+
+ return currentActionId++;
+}
+
+
+TOOL_ACTION* ACTION_MANAGER::FindAction( const std::string& aActionName ) const
+{
+ std::map<std::string, TOOL_ACTION*>::const_iterator it = m_actionNameIndex.find( aActionName );
+
+ if( it != m_actionNameIndex.end() )
+ return it->second;
+
+ return NULL;
+}
+
+
+bool ACTION_MANAGER::RunHotKey( int aHotKey ) const
+{
+ int key = aHotKey & ~MD_MODIFIER_MASK;
+ int mod = aHotKey & MD_MODIFIER_MASK;
+
+ if( key >= 'a' && key <= 'z' )
+ key = std::toupper( key );
+
+ HOTKEY_LIST::const_iterator it = m_actionHotKeys.find( key | mod );
+
+ // If no luck, try without Shift, to handle keys that require it
+ // e.g. to get ? you need to press Shift+/ without US keyboard layout
+ // Hardcoding ? as Shift+/ is a bad idea, as on another layout you may need to press a
+ // different combination
+ if( it == m_actionHotKeys.end() )
+ {
+ it = m_actionHotKeys.find( key | ( mod & ~MD_SHIFT ) );
+
+ if( it == m_actionHotKeys.end() )
+ return false; // no appropriate action found for the hotkey
+ }
+
+ const std::list<TOOL_ACTION*>& actions = it->second;
+
+ // Choose the action that has the highest priority on the active tools stack
+ // If there is none, run the global action associated with the hot key
+ int highestPriority = -1, priority = -1;
+ const TOOL_ACTION* context = NULL; // pointer to context action of the highest priority tool
+ const TOOL_ACTION* global = NULL; // pointer to global action, if there is no context action
+
+ BOOST_FOREACH( const TOOL_ACTION* action, actions )
+ {
+ if( action->GetScope() == AS_GLOBAL )
+ {
+ // Store the global action for the hot key in case there was no possible
+ // context actions to run
+ assert( global == NULL ); // there should be only one global action per hot key
+ global = action;
+ continue;
+ }
+
+ TOOL_BASE* tool = m_toolMgr->FindTool( action->GetToolName() );
+
+ if( tool )
+ {
+ // Choose the action that goes to the tool with highest priority
+ // (i.e. is on the top of active tools stack)
+ priority = m_toolMgr->GetPriority( tool->GetId() );
+
+ if( priority >= 0 && priority > highestPriority )
+ {
+ highestPriority = priority;
+ context = action;
+ }
+ }
+ }
+
+ if( context )
+ {
+ m_toolMgr->RunAction( *context, true );
+ return true;
+ }
+ else if( global )
+ {
+ m_toolMgr->RunAction( *global, true );
+ return true;
+ }
+
+ return false;
+}
+
+
+int ACTION_MANAGER::GetHotKey( const TOOL_ACTION& aAction ) const
+{
+ std::map<int, int>::const_iterator it = m_hotkeys.find( aAction.GetId() );
+
+ if( it == m_hotkeys.end() )
+ return 0;
+
+ return it->second;
+}
+
+
+void ACTION_MANAGER::UpdateHotKeys()
+{
+ m_actionHotKeys.clear();
+ m_hotkeys.clear();
+
+ BOOST_FOREACH( TOOL_ACTION* action, m_actionNameIndex | boost::adaptors::map_values )
+ {
+ int hotkey = processHotKey( action );
+
+ if( hotkey > 0 )
+ {
+ m_actionHotKeys[hotkey].push_back( action );
+ m_hotkeys[action->GetId()] = hotkey;
+ }
+ }
+
+#ifndef NDEBUG
+ // Check if there are two global actions assigned to the same hotkey
+ BOOST_FOREACH( std::list<TOOL_ACTION*>& action_list, m_actionHotKeys | boost::adaptors::map_values )
+ {
+ int global_actions_cnt = 0;
+
+ BOOST_FOREACH( TOOL_ACTION* action, action_list )
+ {
+ if( action->GetScope() == AS_GLOBAL )
+ ++global_actions_cnt;
+ }
+
+ assert( global_actions_cnt <= 1 );
+ }
+#endif /* not NDEBUG */
+}
+
+
+int ACTION_MANAGER::processHotKey( TOOL_ACTION* aAction )
+{
+ int hotkey = aAction->getDefaultHotKey();
+
+ if( ( hotkey & TOOL_ACTION::LEGACY_HK ) )
+ {
+ hotkey = hotkey & ~TOOL_ACTION::LEGACY_HK; // it leaves only HK_xxx identifier
+ EDA_DRAW_FRAME* frame = static_cast<EDA_DRAW_FRAME*>( m_toolMgr->GetEditFrame() );
+ EDA_HOTKEY* hk_desc = frame->GetHotKeyDescription( hotkey );
+
+ if( hk_desc )
+ {
+ hotkey = hk_desc->m_KeyCode;
+
+ // Convert modifiers to the ones used by the Tool Framework
+ if( hotkey & GR_KB_CTRL )
+ {
+ hotkey &= ~GR_KB_CTRL;
+ hotkey |= MD_CTRL;
+ }
+
+ if( hotkey & GR_KB_ALT )
+ {
+ hotkey &= ~GR_KB_ALT;
+ hotkey |= MD_ALT;
+ }
+
+ if( hotkey & GR_KB_SHIFT )
+ {
+ hotkey &= ~GR_KB_SHIFT;
+ hotkey |= MD_SHIFT;
+ }
+ }
+ else
+ {
+ hotkey = 0;
+ }
+ }
+
+ return hotkey;
+}
diff --git a/common/tool/context_menu.cpp b/common/tool/context_menu.cpp
new file mode 100644
index 0000000..bd316cb
--- /dev/null
+++ b/common/tool/context_menu.cpp
@@ -0,0 +1,391 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <tool/tool_event.h>
+#include <tool/tool_manager.h>
+#include <tool/tool_interactive.h>
+#include <tool/context_menu.h>
+
+#include <boost/bind.hpp>
+#include <cassert>
+
+CONTEXT_MENU::CONTEXT_MENU() :
+ m_titleSet( false ), m_selected( -1 ), m_tool( NULL ), m_parent( NULL ), m_icon( NULL ),
+ m_menu_handler( CONTEXT_MENU::menuHandlerStub ),
+ m_update_handler( CONTEXT_MENU::updateHandlerStub )
+{
+ setupEvents();
+}
+
+
+CONTEXT_MENU::CONTEXT_MENU( const CONTEXT_MENU& aMenu )
+{
+ copyFrom( aMenu );
+ setupEvents();
+}
+
+
+CONTEXT_MENU::~CONTEXT_MENU()
+{
+ // Set parent to NULL to prevent submenus from unregistering from a notexisting object
+ for( std::list<CONTEXT_MENU*>::iterator it = m_submenus.begin(); it != m_submenus.end(); ++it )
+ (*it)->m_parent = NULL;
+
+ if( m_parent )
+ m_parent->m_submenus.remove( this );
+}
+
+
+CONTEXT_MENU& CONTEXT_MENU::operator=( const CONTEXT_MENU& aMenu )
+{
+ Clear();
+ copyFrom( aMenu );
+
+ return *this;
+}
+
+
+void CONTEXT_MENU::setupEvents()
+{
+ Connect( wxEVT_MENU_HIGHLIGHT, wxMenuEventHandler( CONTEXT_MENU::onMenuEvent ), NULL, this );
+ Connect( wxEVT_COMMAND_MENU_SELECTED, wxMenuEventHandler( CONTEXT_MENU::onMenuEvent ), NULL, this );
+}
+
+
+void CONTEXT_MENU::SetTitle( const wxString& aTitle )
+{
+ // TODO handle an empty string (remove title and separator)
+
+ // Unfortunately wxMenu::SetTitle() does nothing.. (at least wxGTK)
+
+ if( m_titleSet )
+ {
+ FindItemByPosition( 0 )->SetItemLabel( aTitle );
+ }
+ else
+ {
+ InsertSeparator( 0 );
+ Insert( 0, new wxMenuItem( this, wxID_NONE, aTitle, wxEmptyString, wxITEM_NORMAL ) );
+ m_titleSet = true;
+ }
+}
+
+
+wxMenuItem* CONTEXT_MENU::Add( const wxString& aLabel, int aId, const BITMAP_OPAQUE* aIcon )
+{
+#ifdef DEBUG
+ if( FindItem( aId ) != NULL )
+ wxLogWarning( wxT( "Adding more than one menu entry with the same ID may result in"
+ "undefined behaviour" ) );
+#endif
+
+ wxMenuItem* item = new wxMenuItem( this, aId, aLabel, wxEmptyString, wxITEM_NORMAL );
+
+ if( aIcon )
+ item->SetBitmap( KiBitmap( aIcon ) );
+
+ return Append( item );
+}
+
+
+wxMenuItem* CONTEXT_MENU::Add( const TOOL_ACTION& aAction )
+{
+ /// ID numbers for tool actions need to have a value higher than ACTION_ID
+ const BITMAP_OPAQUE* icon = aAction.GetIcon();
+
+ wxMenuItem* item = new wxMenuItem( this, getMenuId( aAction ), aAction.GetMenuItem(),
+ aAction.GetDescription(), wxITEM_NORMAL );
+
+ if( icon )
+ item->SetBitmap( KiBitmap( icon ) );
+
+ m_toolActions[getMenuId( aAction )] = &aAction;
+
+ return Append( item );
+}
+
+
+std::list<wxMenuItem*> CONTEXT_MENU::Add( CONTEXT_MENU* aMenu, const wxString& aLabel, bool aExpand )
+{
+ std::list<wxMenuItem*> items;
+ CONTEXT_MENU* menuCopy = new CONTEXT_MENU( *aMenu );
+ m_submenus.push_back( menuCopy );
+ menuCopy->m_parent = this;
+
+ if( aExpand )
+ {
+ for( int i = 0; i < (int) aMenu->GetMenuItemCount(); ++i )
+ {
+ wxMenuItem* item = aMenu->FindItemByPosition( i );
+ items.push_back( appendCopy( item ) );
+ }
+ }
+ else
+ {
+ if( aMenu->m_icon )
+ {
+ wxMenuItem* newItem = new wxMenuItem( this, -1, aLabel, wxEmptyString, wxITEM_NORMAL );
+ newItem->SetBitmap( KiBitmap( aMenu->m_icon ) );
+ newItem->SetSubMenu( menuCopy );
+ items.push_back( Append( newItem ) );
+ }
+ else
+ {
+ items.push_back( AppendSubMenu( menuCopy, aLabel ) );
+ }
+ }
+
+ return items;
+}
+
+
+void CONTEXT_MENU::Clear()
+{
+ m_titleSet = false;
+
+ for( int i = GetMenuItemCount() - 1; i >= 0; --i )
+ Destroy( FindItemByPosition( i ) );
+
+ m_toolActions.clear();
+ m_submenus.clear();
+ m_parent = NULL;
+
+ assert( GetMenuItemCount() == 0 );
+}
+
+
+void CONTEXT_MENU::UpdateAll()
+{
+ try
+ {
+ m_update_handler();
+ }
+ catch( std::exception& e )
+ {
+ std::cerr << "CONTEXT_MENU error running update handler: " << e.what() << std::endl;
+ }
+
+ if( m_tool )
+ updateHotKeys();
+
+ runOnSubmenus( boost::bind( &CONTEXT_MENU::UpdateAll, _1 ) );
+}
+
+
+void CONTEXT_MENU::SetTool( TOOL_INTERACTIVE* aTool )
+{
+ m_tool = aTool;
+
+ runOnSubmenus( boost::bind( &CONTEXT_MENU::SetTool, _1, aTool ) );
+}
+
+
+TOOL_MANAGER* CONTEXT_MENU::getToolManager()
+{
+ assert( m_tool );
+ return m_tool->GetManager();
+}
+
+
+void CONTEXT_MENU::updateHotKeys()
+{
+ TOOL_MANAGER* toolMgr = getToolManager();
+
+ for( std::map<int, const TOOL_ACTION*>::const_iterator it = m_toolActions.begin();
+ it != m_toolActions.end(); ++it )
+ {
+ int id = it->first;
+ const TOOL_ACTION& action = *it->second;
+ int key = toolMgr->GetHotKey( action ) & ~MD_MODIFIER_MASK;
+
+ if( key )
+ {
+ int mod = toolMgr->GetHotKey( action ) & MD_MODIFIER_MASK;
+ int flags = 0;
+ wxMenuItem* item = FindChildItem( id );
+
+ if( item )
+ {
+ flags |= ( mod & MD_ALT ) ? wxACCEL_ALT : 0;
+ flags |= ( mod & MD_CTRL ) ? wxACCEL_CTRL : 0;
+ flags |= ( mod & MD_SHIFT ) ? wxACCEL_SHIFT : 0;
+
+ if( !flags )
+ flags = wxACCEL_NORMAL;
+
+ wxAcceleratorEntry accel( flags, key, id, item );
+ item->SetAccel( &accel );
+ }
+ }
+ }
+}
+
+
+void CONTEXT_MENU::onMenuEvent( wxMenuEvent& aEvent )
+{
+ OPT_TOOL_EVENT evt;
+
+ wxEventType type = aEvent.GetEventType();
+
+ // When the currently chosen item in the menu is changed, an update event is issued.
+ // For example, the selection tool can use this to dynamically highlight the current item
+ // from selection clarification popup.
+ if( type == wxEVT_MENU_HIGHLIGHT )
+ evt = TOOL_EVENT( TC_COMMAND, TA_CONTEXT_MENU_UPDATE, aEvent.GetId() );
+
+ // One of menu entries was selected..
+ else if( type == wxEVT_COMMAND_MENU_SELECTED )
+ {
+ // Store the selected position
+ m_selected = aEvent.GetId();
+
+ // Check if there is a TOOL_ACTION for the given ID
+ if( m_toolActions.count( aEvent.GetId() ) == 1 )
+ {
+ evt = m_toolActions[aEvent.GetId()]->MakeEvent();
+ }
+ else
+ {
+ runEventHandlers( aEvent, evt );
+
+ // Under Linux, every submenu can have a separate event handler, under
+ // Windows all submenus are handled by the main menu.
+#ifdef __WINDOWS__
+ if( !evt )
+ {
+ // Try to find the submenu which holds the selected item
+ wxMenu* menu = NULL;
+ FindItem( m_selected, &menu );
+
+ if( menu && menu != this )
+ {
+ menu->ProcessEvent( aEvent );
+ return;
+ }
+ }
+#endif
+
+ // Handling non-action menu entries (e.g. items in clarification list)
+ if( !evt )
+ evt = TOOL_EVENT( TC_COMMAND, TA_CONTEXT_MENU_CHOICE, aEvent.GetId() );
+ }
+ }
+
+ assert( m_tool ); // without tool & tool manager we cannot handle events
+
+ // forward the action/update event to the TOOL_MANAGER
+ if( evt && m_tool )
+ m_tool->GetManager()->ProcessEvent( *evt );
+}
+
+
+void CONTEXT_MENU::runEventHandlers( const wxMenuEvent& aMenuEvent, OPT_TOOL_EVENT& aToolEvent )
+{
+ aToolEvent = m_menu_handler( aMenuEvent );
+
+ if( !aToolEvent )
+ runOnSubmenus( boost::bind( &CONTEXT_MENU::runEventHandlers, _1, aMenuEvent, aToolEvent ) );
+}
+
+
+void CONTEXT_MENU::runOnSubmenus( boost::function<void(CONTEXT_MENU*)> aFunction )
+{
+ try
+ {
+ std::for_each( m_submenus.begin(), m_submenus.end(), aFunction );
+ }
+ catch( std::exception& e )
+ {
+ std::cerr << "CONTEXT_MENU runOnSubmenus error: " << e.what() << std::endl;
+ }
+}
+
+
+wxMenuItem* CONTEXT_MENU::appendCopy( const wxMenuItem* aSource )
+{
+ wxMenuItem* newItem = new wxMenuItem( this, aSource->GetId(), aSource->GetItemLabel(),
+ aSource->GetHelp(), aSource->GetKind() );
+
+ if( aSource->GetKind() == wxITEM_NORMAL )
+ newItem->SetBitmap( aSource->GetBitmap() );
+
+ if( aSource->IsSubMenu() )
+ {
+#ifdef DEBUG
+ // Submenus of a CONTEXT_MENU are supposed to be CONTEXT_MENUs as well
+ assert( dynamic_cast<CONTEXT_MENU*>( aSource->GetSubMenu() ) );
+#endif
+
+ CONTEXT_MENU* menu = new CONTEXT_MENU( static_cast<const CONTEXT_MENU&>( *aSource->GetSubMenu() ) );
+ newItem->SetSubMenu( menu );
+ Append( newItem );
+
+ m_submenus.push_back( menu );
+ menu->m_parent = this;
+ }
+ else
+ {
+ Append( newItem );
+ newItem->SetKind( aSource->GetKind() );
+ newItem->SetHelp( aSource->GetHelp() );
+ newItem->Enable( aSource->IsEnabled() );
+
+ if( aSource->IsCheckable() )
+ newItem->Check( aSource->IsChecked() );
+ }
+
+ return newItem;
+}
+
+
+void CONTEXT_MENU::copyFrom( const CONTEXT_MENU& aMenu )
+{
+ m_icon = aMenu.m_icon;
+ m_titleSet = aMenu.m_titleSet;
+ m_selected = -1; // aMenu.m_selected;
+ m_tool = aMenu.m_tool;
+ m_toolActions = aMenu.m_toolActions;
+ m_parent = NULL; // aMenu.m_parent;
+ m_menu_handler = aMenu.m_menu_handler;
+ m_update_handler = aMenu.m_update_handler;
+
+ // Copy all the menu entries
+ for( int i = 0; i < (int) aMenu.GetMenuItemCount(); ++i )
+ {
+ wxMenuItem* item = aMenu.FindItemByPosition( i );
+ appendCopy( item );
+ }
+}
+
+
+OPT_TOOL_EVENT CONTEXT_MENU::menuHandlerStub( const wxMenuEvent& )
+{
+ return boost::none;
+}
+
+
+void CONTEXT_MENU::updateHandlerStub()
+{
+}
diff --git a/common/tool/tool_action.cpp b/common/tool/tool_action.cpp
new file mode 100644
index 0000000..c73445f
--- /dev/null
+++ b/common/tool/tool_action.cpp
@@ -0,0 +1,65 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <tool/tool_action.h>
+#include <tool/action_manager.h>
+
+TOOL_ACTION::TOOL_ACTION( const std::string& aName, TOOL_ACTION_SCOPE aScope,
+ int aDefaultHotKey, const wxString aMenuItem, const wxString& aMenuDesc,
+ const BITMAP_OPAQUE* aIcon, TOOL_ACTION_FLAGS aFlags, void* aParam ) :
+ m_name( aName ), m_scope( aScope ), m_defaultHotKey( aDefaultHotKey ),
+ m_menuItem( aMenuItem ), m_menuDescription( aMenuDesc ),
+ m_icon( aIcon ), m_id( -1 ), m_flags( aFlags ), m_param( aParam )
+{
+ ACTION_MANAGER::GetActionList().push_back( this );
+}
+
+
+TOOL_ACTION::~TOOL_ACTION()
+{
+ ACTION_MANAGER::GetActionList().remove( this );
+}
+
+
+std::string TOOL_ACTION::GetToolName() const
+{
+ int dotCount = std::count( m_name.begin(), m_name.end(), '.' );
+
+ switch( dotCount )
+ {
+ case 0:
+ assert( false ); // Invalid action name format
+ return "";
+
+ case 1:
+ return m_name;
+
+ case 2:
+ return m_name.substr( 0, m_name.rfind( '.' ) );
+
+ default:
+ assert( false ); // TODO not implemented
+ return "";
+ }
+}
diff --git a/common/tool/tool_base.cpp b/common/tool/tool_base.cpp
new file mode 100644
index 0000000..f9191d5
--- /dev/null
+++ b/common/tool/tool_base.cpp
@@ -0,0 +1,97 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <tool/tool_event.h>
+#include <tool/tool_manager.h>
+
+#include <wxPcbStruct.h> // LAME!
+
+KIGFX::VIEW* TOOL_BASE::getView() const
+{
+ return m_toolMgr->GetView();
+}
+
+
+KIGFX::VIEW_CONTROLS* TOOL_BASE::getViewControls() const
+{
+ return m_toolMgr->GetViewControls();
+}
+
+
+wxWindow* TOOL_BASE::getEditFrameInt() const
+{
+ return m_toolMgr->GetEditFrame();
+}
+
+
+EDA_ITEM* TOOL_BASE::getModelInt() const
+{
+ return m_toolMgr->GetModel();
+}
+
+
+void TOOL_BASE::attachManager( TOOL_MANAGER* aManager )
+{
+ m_toolMgr = aManager;
+ m_toolSettings = TOOL_SETTINGS( this );
+}
+
+
+TOOL_SETTINGS::TOOL_SETTINGS( TOOL_BASE* aTool ) :
+ m_tool( aTool )
+{
+}
+
+
+TOOL_SETTINGS::~TOOL_SETTINGS()
+{
+}
+
+
+TOOL_SETTINGS& TOOL_BASE::GetSettings()
+{
+ return m_toolSettings;
+}
+
+
+wxString TOOL_SETTINGS::getKeyName( const wxString& aEntryName ) const
+{
+ wxString key( m_tool->GetName() );
+ key += wxT( "." );
+ key += aEntryName;
+ return key;
+}
+
+
+wxConfigBase* TOOL_SETTINGS::getConfigBase() const
+{
+ if( !m_tool )
+ return NULL;
+
+ // fixme: make independent of pcbnew (post-stable)
+ if( PCB_EDIT_FRAME* frame = m_tool->getEditFrame<PCB_EDIT_FRAME>() )
+ return frame->GetSettings();
+
+ return NULL;
+}
diff --git a/common/tool/tool_dispatcher.cpp b/common/tool/tool_dispatcher.cpp
new file mode 100644
index 0000000..1f2f6ce
--- /dev/null
+++ b/common/tool/tool_dispatcher.cpp
@@ -0,0 +1,363 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wxPcbStruct.h>
+#include <wxBasePcbFrame.h>
+
+#include <tool/tool_manager.h>
+#include <tool/tool_dispatcher.h>
+#include <tools/common_actions.h>
+#include <view/view.h>
+#include <view/wx_view_controls.h>
+
+#include <class_draw_panel_gal.h>
+#include <pcbnew_id.h>
+
+#include <boost/optional.hpp>
+#include <boost/foreach.hpp>
+
+///> Stores information about a mouse button state
+struct TOOL_DISPATCHER::BUTTON_STATE
+{
+ BUTTON_STATE( TOOL_MOUSE_BUTTONS aButton, const wxEventType& aDownEvent,
+ const wxEventType& aUpEvent, const wxEventType& aDblClickEvent ) :
+ dragging( false ),
+ pressed( false ),
+ dragMaxDelta( 0.0f ),
+ button( aButton ),
+ downEvent( aDownEvent ),
+ upEvent( aUpEvent ),
+ dblClickEvent( aDblClickEvent )
+ {};
+
+ ///> Flag indicating that dragging is active for the given button.
+ bool dragging;
+
+ ///> Flag indicating that the given button is pressed.
+ bool pressed;
+
+ ///> Point where dragging has started (in world coordinates).
+ VECTOR2D dragOrigin;
+
+ ///> Point where click event has occurred.
+ VECTOR2D downPosition;
+
+ ///> Difference between drag origin point and current mouse position (expressed as distance in
+ ///> pixels).
+ double dragMaxDelta;
+
+ ///> Determines the mouse button for which information are stored.
+ TOOL_MOUSE_BUTTONS button;
+
+ ///> The type of wxEvent that determines mouse button press.
+ wxEventType downEvent;
+
+ ///> The type of wxEvent that determines mouse button release.
+ wxEventType upEvent;
+
+ ///> The type of wxEvent that determines mouse button double click.
+ wxEventType dblClickEvent;
+
+ ///> Time stamp for the last mouse button press event.
+ wxLongLong downTimestamp;
+
+ ///> Restores initial state.
+ void Reset()
+ {
+ dragging = false;
+ pressed = false;
+ }
+
+ ///> Checks the current state of the button.
+ bool GetState() const
+ {
+ wxMouseState mouseState = wxGetMouseState();
+
+ switch( button )
+ {
+ case BUT_LEFT:
+ return mouseState.LeftIsDown();
+
+ case BUT_MIDDLE:
+ return mouseState.MiddleIsDown();
+
+ case BUT_RIGHT:
+ return mouseState.RightIsDown();
+
+ default:
+ assert( false );
+ break;
+ }
+
+ return false;
+ }
+};
+
+
+TOOL_DISPATCHER::TOOL_DISPATCHER( TOOL_MANAGER* aToolMgr ) :
+ m_toolMgr( aToolMgr )
+{
+ m_buttons.push_back( new BUTTON_STATE( BUT_LEFT, wxEVT_LEFT_DOWN,
+ wxEVT_LEFT_UP, wxEVT_LEFT_DCLICK ) );
+ m_buttons.push_back( new BUTTON_STATE( BUT_RIGHT, wxEVT_RIGHT_DOWN,
+ wxEVT_RIGHT_UP, wxEVT_RIGHT_DCLICK ) );
+ m_buttons.push_back( new BUTTON_STATE( BUT_MIDDLE, wxEVT_MIDDLE_DOWN,
+ wxEVT_MIDDLE_UP, wxEVT_MIDDLE_DCLICK ) );
+
+ ResetState();
+}
+
+
+TOOL_DISPATCHER::~TOOL_DISPATCHER()
+{
+ BOOST_FOREACH( BUTTON_STATE* st, m_buttons )
+ delete st;
+}
+
+
+void TOOL_DISPATCHER::ResetState()
+{
+ BOOST_FOREACH( BUTTON_STATE* st, m_buttons )
+ st->Reset();
+}
+
+
+KIGFX::VIEW* TOOL_DISPATCHER::getView()
+{
+ return static_cast<EDA_DRAW_FRAME*>( m_toolMgr->GetEditFrame() )->GetGalCanvas()->GetView();
+}
+
+
+bool TOOL_DISPATCHER::handleMouseButton( wxEvent& aEvent, int aIndex, bool aMotion )
+{
+ BUTTON_STATE* st = m_buttons[aIndex];
+ wxEventType type = aEvent.GetEventType();
+ boost::optional<TOOL_EVENT> evt;
+ bool isClick = false;
+
+// bool up = type == st->upEvent;
+// bool down = type == st->downEvent;
+ bool up = false, down = false;
+ bool dblClick = type == st->dblClickEvent;
+ bool state = st->GetState();
+
+ if( !dblClick )
+ {
+ // Sometimes the dispatcher does not receive mouse button up event, so it stays
+ // in the dragging mode even if the mouse button is not held anymore
+ if( st->pressed && !state )
+ up = true;
+ else if( !st->pressed && state )
+ down = true;
+ }
+
+ int mods = decodeModifiers( static_cast<wxMouseEvent*>( &aEvent ) );
+ int args = st->button | mods;
+
+ if( down ) // Handle mouse button press
+ {
+ st->downTimestamp = wxGetLocalTimeMillis();
+ st->dragOrigin = m_lastMousePos;
+ st->downPosition = m_lastMousePos;
+ st->dragMaxDelta = 0;
+ st->pressed = true;
+ evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_DOWN, args );
+ }
+ else if( up ) // Handle mouse button release
+ {
+ st->pressed = false;
+
+ if( st->dragging )
+ {
+ wxLongLong t = wxGetLocalTimeMillis();
+
+ // Determine if it was just a single click or beginning of dragging
+ if( t - st->downTimestamp < DragTimeThreshold &&
+ st->dragMaxDelta < DragDistanceThreshold )
+ isClick = true;
+ else
+ evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_UP, args );
+ }
+ else
+ isClick = true;
+
+ if( isClick )
+ evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_CLICK, args );
+
+ st->dragging = false;
+ }
+ else if( dblClick )
+ {
+ evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_DBLCLICK, args );
+ }
+
+ if( st->pressed && aMotion )
+ {
+ st->dragging = true;
+ double dragPixelDistance =
+ getView()->ToScreen( m_lastMousePos - st->dragOrigin, false ).EuclideanNorm();
+ st->dragMaxDelta = std::max( st->dragMaxDelta, dragPixelDistance );
+
+ wxLongLong t = wxGetLocalTimeMillis();
+
+ if( t - st->downTimestamp > DragTimeThreshold || st->dragMaxDelta > DragDistanceThreshold )
+ {
+ evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_DRAG, args );
+ evt->setMouseDragOrigin( st->dragOrigin );
+ evt->setMouseDelta( m_lastMousePos - st->dragOrigin );
+ }
+ }
+
+ if( evt )
+ {
+ evt->SetMousePosition( isClick ? st->downPosition : m_lastMousePos );
+ m_toolMgr->ProcessEvent( *evt );
+
+ return true;
+ }
+
+ return false;
+}
+
+
+void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent )
+{
+ bool motion = false, buttonEvents = false;
+ boost::optional<TOOL_EVENT> evt;
+
+ int type = aEvent.GetEventType();
+
+ // Mouse handling
+ if( type == wxEVT_MOTION || type == wxEVT_MOUSEWHEEL ||
+#ifdef USE_OSX_MAGNIFY_EVENT
+ type == wxEVT_MAGNIFY ||
+#endif
+ type == wxEVT_LEFT_DOWN || type == wxEVT_LEFT_UP ||
+ type == wxEVT_MIDDLE_DOWN || type == wxEVT_MIDDLE_UP ||
+ type == wxEVT_RIGHT_DOWN || type == wxEVT_RIGHT_UP ||
+ type == wxEVT_LEFT_DCLICK || type == wxEVT_MIDDLE_DCLICK || type == wxEVT_RIGHT_DCLICK ||
+ // Event issued whem mouse retains position in screen coordinates,
+ // but changes in world coordinates (e.g. autopanning)
+ type == KIGFX::WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE )
+ {
+ wxMouseEvent* me = static_cast<wxMouseEvent*>( &aEvent );
+ int mods = decodeModifiers( me );
+
+ VECTOR2D screenPos = m_toolMgr->GetViewControls()->GetMousePosition();
+ VECTOR2D pos = getView()->ToWorld( screenPos );
+
+ if( pos != m_lastMousePos )
+ {
+ motion = true;
+ m_lastMousePos = pos;
+ }
+
+ for( unsigned int i = 0; i < m_buttons.size(); i++ )
+ buttonEvents |= handleMouseButton( aEvent, i, motion );
+
+ if( !buttonEvents && motion )
+ {
+ evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_MOTION, mods );
+ evt->SetMousePosition( pos );
+ }
+
+#ifdef __APPLE__
+ // TODO That's a big ugly workaround, somehow DRAWPANEL_GAL loses focus
+ // after second LMB click and currently I have no means to do better debugging
+ if( type == wxEVT_LEFT_UP )
+ static_cast<PCB_BASE_FRAME*>( m_toolMgr->GetEditFrame() )->GetGalCanvas()->SetFocus();
+#endif /* __APPLE__ */
+ }
+
+ // Keyboard handling
+ else if( type == wxEVT_CHAR )
+ {
+ wxKeyEvent* ke = static_cast<wxKeyEvent*>( &aEvent );
+ int key = ke->GetKeyCode();
+ int mods = decodeModifiers( ke );
+
+ if( mods & MD_CTRL )
+ {
+#if !wxCHECK_VERSION( 2, 9, 0 )
+ // I really look forward to the day when we will use only one version of wxWidgets..
+ const int WXK_CONTROL_A = 1;
+ const int WXK_CONTROL_Z = 26;
+#endif
+
+ // wxWidgets have a quirk related to Ctrl+letter hot keys handled by CHAR_EVT
+ // http://docs.wxwidgets.org/trunk/classwx_key_event.html:
+ // "char events for ASCII letters in this case carry codes corresponding to the ASCII
+ // value of Ctrl-Latter, i.e. 1 for Ctrl-A, 2 for Ctrl-B and so on until 26 for Ctrl-Z."
+ if( key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z )
+ key += 'A' - 1;
+ }
+
+ if( key == WXK_ESCAPE ) // ESC is the special key for cancelling tools
+ evt = TOOL_EVENT( TC_COMMAND, TA_CANCEL_TOOL );
+ else
+ evt = TOOL_EVENT( TC_KEYBOARD, TA_KEY_PRESSED, key | mods );
+ }
+
+ if( evt )
+ m_toolMgr->ProcessEvent( *evt );
+
+ // pass the event to the GUI, it might still be interested in it
+#ifdef __APPLE__
+ // On OS X, key events are always meant to be caught. An uncaught key event is assumed
+ // to be a user input error by OS X (as they are pressing keys in a context where nothing
+ // is there to catch the event). This annoyingly makes OS X beep and/or flash the screen
+ // in pcbnew and the footprint editor any time a hotkey is used. The correct procedure is
+ // to NOT pass key events to the GUI under OS X.
+
+ if( type != wxEVT_CHAR )
+ aEvent.Skip();
+#else
+ aEvent.Skip();
+#endif
+
+ updateUI();
+}
+
+
+void TOOL_DISPATCHER::DispatchWxCommand( wxCommandEvent& aEvent )
+{
+ boost::optional<TOOL_EVENT> evt = COMMON_ACTIONS::TranslateLegacyId( aEvent.GetId() );
+
+ if( evt )
+ m_toolMgr->ProcessEvent( *evt );
+ else
+ aEvent.Skip();
+
+ updateUI();
+}
+
+
+void TOOL_DISPATCHER::updateUI()
+{
+ // TODO I don't feel it is the right place for updating UI,
+ // but at the moment I cannot think of a better one..
+ EDA_DRAW_FRAME* frame = static_cast<EDA_DRAW_FRAME*>( m_toolMgr->GetEditFrame() );
+ frame->UpdateStatusBar();
+ frame->UpdateMsgPanel();
+}
diff --git a/common/tool/tool_event.cpp b/common/tool/tool_event.cpp
new file mode 100644
index 0000000..68518a2
--- /dev/null
+++ b/common/tool/tool_event.cpp
@@ -0,0 +1,162 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <cstring>
+#include <string>
+
+#include <tool/tool_event.h>
+#include <tool/tool_action.h>
+#include <tool/tool_manager.h>
+
+#include <boost/foreach.hpp>
+
+struct FlagString
+{
+ int flag;
+ std::string str;
+};
+
+
+static const std::string flag2string( int aFlag, const FlagString* aExps )
+{
+ std::string rv;
+
+ for( int i = 0; aExps[i].str.length(); i++ )
+ {
+ if( aExps[i].flag & aFlag )
+ rv += aExps[i].str + " ";
+ }
+
+ return rv;
+}
+
+
+bool TOOL_EVENT::IsAction( const TOOL_ACTION* aAction ) const
+{
+ return Matches( aAction->MakeEvent() );
+}
+
+
+const std::string TOOL_EVENT::Format() const
+{
+ std::string ev;
+
+ const FlagString categories[] =
+ {
+ { TC_MOUSE, "mouse" },
+ { TC_KEYBOARD, "keyboard" },
+ { TC_COMMAND, "command" },
+ { TC_MESSAGE, "message" },
+ { TC_VIEW, "view" },
+ { 0, "" }
+ };
+
+ const FlagString actions[] =
+ {
+ { TA_MOUSE_CLICK, "click" },
+ { TA_MOUSE_DBLCLICK, "double click" },
+ { TA_MOUSE_UP, "button-up" },
+ { TA_MOUSE_DOWN, "button-down" },
+ { TA_MOUSE_DRAG, "drag" },
+ { TA_MOUSE_MOTION, "motion" },
+ { TA_MOUSE_WHEEL, "wheel" },
+ { TA_KEY_PRESSED, "key-pressed" },
+ { TA_VIEW_REFRESH, "view-refresh" },
+ { TA_VIEW_ZOOM, "view-zoom" },
+ { TA_VIEW_PAN, "view-pan" },
+ { TA_VIEW_DIRTY, "view-dirty" },
+ { TA_CHANGE_LAYER, "change-layer" },
+ { TA_CANCEL_TOOL, "cancel-tool" },
+ { TA_CONTEXT_MENU_UPDATE, "context-menu-update" },
+ { TA_CONTEXT_MENU_CHOICE, "context-menu-choice" },
+ { TA_UNDO_REDO, "undo-redo" },
+ { TA_ACTION, "action" },
+ { TA_ACTIVATE, "activate" },
+ { 0, "" }
+ };
+
+ const FlagString buttons[] =
+ {
+ { BUT_NONE, "none" },
+ { BUT_LEFT, "left" },
+ { BUT_RIGHT, "right" },
+ { BUT_MIDDLE, "middle" },
+ { 0, "" }
+ };
+
+ const FlagString modifiers[] =
+ {
+ { MD_SHIFT, "shift" },
+ { MD_CTRL, "ctrl" },
+ { MD_ALT, "alt" },
+ { 0, "" }
+ };
+
+ ev = "category: ";
+ ev += flag2string( m_category, categories );
+ ev += " action: ";
+ ev += flag2string( m_actions, actions );
+
+ if( m_actions & TA_MOUSE )
+ {
+ ev += " btns: ";
+ ev += flag2string( m_mouseButtons, buttons );
+ }
+
+ if( m_actions & TA_KEYBOARD )
+ {
+ char tmp[128];
+ sprintf( tmp, "key: %d", m_keyCode );
+ ev += tmp;
+ }
+
+ if( m_actions & ( TA_MOUSE | TA_KEYBOARD ) )
+ {
+ ev += " mods: ";
+ ev += flag2string( m_modifiers, modifiers );
+ }
+
+ if( m_commandId )
+ {
+ char tmp[128];
+ sprintf( tmp, "cmd-id: %d", *m_commandId );
+ ev += tmp;
+ }
+
+ if( m_commandStr )
+ ev += "cmd-str: " + ( *m_commandStr );
+
+ return ev;
+}
+
+
+const std::string TOOL_EVENT_LIST::Format() const
+{
+ std::string s;
+
+ BOOST_FOREACH( TOOL_EVENT e, m_events )
+ s += e.Format() + " ";
+
+ return s;
+}
diff --git a/common/tool/tool_interactive.cpp b/common/tool/tool_interactive.cpp
new file mode 100644
index 0000000..5f05de8
--- /dev/null
+++ b/common/tool/tool_interactive.cpp
@@ -0,0 +1,73 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <string>
+
+#include <tool/tool_event.h>
+#include <tool/tool_manager.h>
+#include <tool/tool_interactive.h>
+#include <tool/context_menu.h>
+
+TOOL_INTERACTIVE::TOOL_INTERACTIVE( TOOL_ID aId, const std::string& aName ) :
+ TOOL_BASE( INTERACTIVE, aId, aName )
+{
+}
+
+
+TOOL_INTERACTIVE::TOOL_INTERACTIVE( const std::string& aName ) :
+ TOOL_BASE( INTERACTIVE, TOOL_MANAGER::MakeToolId( aName ), aName )
+{
+}
+
+
+TOOL_INTERACTIVE::~TOOL_INTERACTIVE()
+{
+}
+
+
+void TOOL_INTERACTIVE::Activate()
+{
+ m_toolMgr->InvokeTool( m_toolId );
+}
+
+
+OPT_TOOL_EVENT TOOL_INTERACTIVE::Wait( const TOOL_EVENT_LIST& aEventList )
+{
+ return m_toolMgr->ScheduleWait( this, aEventList );
+}
+
+
+void TOOL_INTERACTIVE::goInternal( TOOL_STATE_FUNC& aState, const TOOL_EVENT_LIST& aConditions )
+{
+ m_toolMgr->ScheduleNextState( this, aState, aConditions );
+}
+
+
+void TOOL_INTERACTIVE::SetContextMenu( CONTEXT_MENU* aMenu, CONTEXT_MENU_TRIGGER aTrigger )
+{
+ if( aMenu )
+ aMenu->SetTool( this );
+
+ m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
+}
diff --git a/common/tool/tool_manager.cpp b/common/tool/tool_manager.cpp
new file mode 100644
index 0000000..447ab99
--- /dev/null
+++ b/common/tool/tool_manager.cpp
@@ -0,0 +1,777 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <map>
+#include <list>
+#include <stack>
+#include <algorithm>
+
+#include <boost/foreach.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/optional.hpp>
+#include <boost/range/adaptor/map.hpp>
+
+#include <wx/event.h>
+#include <wx/clipbrd.h>
+
+#include <view/view.h>
+#include <view/view_controls.h>
+
+#include <tool/tool_base.h>
+#include <tool/tool_interactive.h>
+#include <tool/tool_manager.h>
+#include <tool/context_menu.h>
+#include <tool/coroutine.h>
+#include <tool/action_manager.h>
+
+#include <wxPcbStruct.h>
+#include <confirm.h>
+#include <class_draw_panel_gal.h>
+
+using boost::optional;
+
+/// Struct describing the current execution state of a TOOL
+struct TOOL_MANAGER::TOOL_STATE
+{
+ TOOL_STATE( TOOL_BASE* aTool ) :
+ theTool( aTool )
+ {
+ clear();
+ }
+
+ TOOL_STATE( const TOOL_STATE& aState )
+ {
+ theTool = aState.theTool;
+ idle = aState.idle;
+ pendingWait = aState.pendingWait;
+ pendingContextMenu = aState.pendingContextMenu;
+ contextMenu = aState.contextMenu;
+ contextMenuTrigger = aState.contextMenuTrigger;
+ cofunc = aState.cofunc;
+ wakeupEvent = aState.wakeupEvent;
+ waitEvents = aState.waitEvents;
+ transitions = aState.transitions;
+ // do not copy stateStack
+ }
+
+ ~TOOL_STATE()
+ {
+ assert( stateStack.empty() );
+ }
+
+ /// The tool itself
+ TOOL_BASE* theTool;
+
+ /// Is the tool active (pending execution) or disabled at the moment
+ bool idle;
+
+ /// Flag defining if the tool is waiting for any event (i.e. if it
+ /// issued a Wait() call).
+ bool pendingWait;
+
+ /// Is there a context menu being displayed
+ bool pendingContextMenu;
+
+ /// Context menu currently used by the tool
+ CONTEXT_MENU* contextMenu;
+
+ /// Defines when the context menu is opened
+ CONTEXT_MENU_TRIGGER contextMenuTrigger;
+
+ /// Tool execution context
+ COROUTINE<int, const TOOL_EVENT&>* cofunc;
+
+ /// The event that triggered the execution/wakeup of the tool after Wait() call
+ TOOL_EVENT wakeupEvent;
+
+ /// List of events the tool is currently waiting for
+ TOOL_EVENT_LIST waitEvents;
+
+ /// List of possible transitions (ie. association of events and state handlers that are executed
+ /// upon the event reception
+ std::vector<TRANSITION> transitions;
+
+ void operator=( const TOOL_STATE& aState )
+ {
+ theTool = aState.theTool;
+ idle = aState.idle;
+ pendingWait = aState.pendingWait;
+ pendingContextMenu = aState.pendingContextMenu;
+ contextMenu = aState.contextMenu;
+ contextMenuTrigger = aState.contextMenuTrigger;
+ cofunc = aState.cofunc;
+ wakeupEvent = aState.wakeupEvent;
+ waitEvents = aState.waitEvents;
+ transitions = aState.transitions;
+ // do not copy stateStack
+ }
+
+ bool operator==( const TOOL_MANAGER::TOOL_STATE& aRhs ) const
+ {
+ return aRhs.theTool == this->theTool;
+ }
+
+ bool operator!=( const TOOL_MANAGER::TOOL_STATE& aRhs ) const
+ {
+ return aRhs.theTool != this->theTool;
+ }
+
+ /**
+ * Function Push()
+ * Stores the current state of the tool on stack. Stacks are stored internally and are not
+ * shared between different TOOL_STATE objects.
+ */
+ void Push()
+ {
+ stateStack.push( new TOOL_STATE( *this ) );
+
+ clear();
+ }
+
+ /**
+ * Function Pop()
+ * Restores state of the tool from stack. Stacks are stored internally and are not
+ * shared between different TOOL_STATE objects.
+ * @return True if state was restored, false if the stack was empty.
+ */
+ bool Pop()
+ {
+ delete cofunc;
+
+ if( !stateStack.empty() )
+ {
+ *this = *stateStack.top();
+ delete stateStack.top();
+ stateStack.pop();
+
+ return true;
+ }
+ else
+ {
+ cofunc = NULL;
+
+ return false;
+ }
+ }
+
+private:
+ ///> Stack preserving previous states of a TOOL.
+ std::stack<TOOL_STATE*> stateStack;
+
+ ///> Restores the initial state.
+ void clear()
+ {
+ idle = true;
+ pendingWait = false;
+ pendingContextMenu = false;
+ cofunc = NULL;
+ contextMenu = NULL;
+ contextMenuTrigger = CMENU_OFF;
+ transitions.clear();
+ }
+};
+
+
+TOOL_MANAGER::TOOL_MANAGER() :
+ m_model( NULL ),
+ m_view( NULL ),
+ m_viewControls( NULL ),
+ m_editFrame( NULL ),
+ m_passEvent( false )
+{
+ m_actionMgr = new ACTION_MANAGER( this );
+}
+
+
+TOOL_MANAGER::~TOOL_MANAGER()
+{
+ std::map<TOOL_BASE*, TOOL_STATE*>::iterator it, it_end;
+
+ for( it = m_toolState.begin(), it_end = m_toolState.end(); it != it_end; ++it )
+ {
+ delete it->second->cofunc; // delete cofunction
+ delete it->second; // delete TOOL_STATE
+ delete it->first; // delete the tool itself
+ }
+
+ delete m_actionMgr;
+}
+
+
+void TOOL_MANAGER::RegisterTool( TOOL_BASE* aTool )
+{
+ wxASSERT_MSG( m_toolNameIndex.find( aTool->GetName() ) == m_toolNameIndex.end(),
+ wxT( "Adding two tools with the same name may result in unexpected behaviour.") );
+ wxASSERT_MSG( m_toolIdIndex.find( aTool->GetId() ) == m_toolIdIndex.end(),
+ wxT( "Adding two tools with the same ID may result in unexpected behaviour.") );
+ wxASSERT_MSG( m_toolTypes.find( typeid( *aTool ).name() ) == m_toolTypes.end(),
+ wxT( "Adding two tools of the same type may result in unexpected behaviour.") );
+
+ TOOL_STATE* st = new TOOL_STATE( aTool );
+
+ m_toolState[aTool] = st;
+ m_toolNameIndex[aTool->GetName()] = st;
+ m_toolIdIndex[aTool->GetId()] = st;
+ m_toolTypes[typeid( *aTool ).name()] = st->theTool;
+
+ aTool->attachManager( this );
+
+ if( !aTool->Init() )
+ {
+ std::string msg = StrPrintf( "Initialization of the %s tool failed",
+ aTool->GetName().c_str() );
+
+ DisplayError( NULL, wxString::FromUTF8( msg.c_str() ) );
+
+ // Unregister the tool
+ m_toolState.erase( aTool );
+ m_toolNameIndex.erase( aTool->GetName() );
+ m_toolIdIndex.erase( aTool->GetId() );
+ m_toolTypes.erase( typeid( *aTool ).name() );
+
+ delete st;
+ delete aTool;
+ }
+}
+
+
+bool TOOL_MANAGER::InvokeTool( TOOL_ID aToolId )
+{
+ TOOL_BASE* tool = FindTool( aToolId );
+
+ if( tool && tool->GetType() == INTERACTIVE )
+ return invokeTool( tool );
+
+ return false; // there is no tool with the given id
+}
+
+
+bool TOOL_MANAGER::InvokeTool( const std::string& aToolName )
+{
+ TOOL_BASE* tool = FindTool( aToolName );
+
+ if( tool && tool->GetType() == INTERACTIVE )
+ return invokeTool( tool );
+
+ return false; // there is no tool with the given name
+}
+
+
+void TOOL_MANAGER::RegisterAction( TOOL_ACTION* aAction )
+{
+ m_actionMgr->RegisterAction( aAction );
+}
+
+
+void TOOL_MANAGER::UnregisterAction( TOOL_ACTION* aAction )
+{
+ m_actionMgr->UnregisterAction( aAction );
+}
+
+
+bool TOOL_MANAGER::RunAction( const std::string& aActionName, bool aNow, void* aParam )
+{
+ TOOL_ACTION* action = m_actionMgr->FindAction( aActionName );
+
+ if( action )
+ {
+ TOOL_EVENT event = action->MakeEvent();
+
+ // Allow to override the action parameter
+ if( aParam )
+ event.SetParameter( aParam );
+
+ if( aNow )
+ ProcessEvent( event );
+ else
+ PostEvent( event );
+
+ return true;
+ }
+
+ wxASSERT_MSG( action != NULL, wxString::Format( wxT( "Could not find action %s." ), aActionName ) );
+
+ return false;
+}
+
+
+void TOOL_MANAGER::RunAction( const TOOL_ACTION& aAction, bool aNow, void* aParam )
+{
+ TOOL_EVENT event = aAction.MakeEvent();
+
+ // Allow to override the action parameter
+ if( aParam )
+ event.SetParameter( aParam );
+
+ if( aNow )
+ ProcessEvent( event );
+ else
+ PostEvent( event );
+}
+
+
+int TOOL_MANAGER::GetHotKey( const TOOL_ACTION& aAction )
+{
+ return m_actionMgr->GetHotKey( aAction );
+}
+
+
+void TOOL_MANAGER::UpdateHotKeys()
+{
+ m_actionMgr->UpdateHotKeys();
+}
+
+
+bool TOOL_MANAGER::invokeTool( TOOL_BASE* aTool )
+{
+ wxASSERT( aTool != NULL );
+
+ TOOL_EVENT evt( TC_COMMAND, TA_ACTIVATE, aTool->GetName() );
+ ProcessEvent( evt );
+
+ return true;
+}
+
+
+bool TOOL_MANAGER::runTool( TOOL_ID aToolId )
+{
+ TOOL_BASE* tool = FindTool( aToolId );
+
+ if( tool && tool->GetType() == INTERACTIVE )
+ return runTool( tool );
+
+ return false; // there is no tool with the given id
+}
+
+
+bool TOOL_MANAGER::runTool( const std::string& aToolName )
+{
+ TOOL_BASE* tool = FindTool( aToolName );
+
+ if( tool && tool->GetType() == INTERACTIVE )
+ return runTool( tool );
+
+ return false; // there is no tool with the given name
+}
+
+
+bool TOOL_MANAGER::runTool( TOOL_BASE* aTool )
+{
+ wxASSERT( aTool != NULL );
+
+ if( !isRegistered( aTool ) )
+ {
+ wxASSERT_MSG( false, wxT( "You cannot run unregistered tools" ) );
+ return false;
+ }
+
+ // If the tool is already active, bring it to the top of the active tools stack
+ if( isActive( aTool ) )
+ {
+ m_activeTools.erase( std::find( m_activeTools.begin(), m_activeTools.end(),
+ aTool->GetId() ) );
+ m_activeTools.push_front( aTool->GetId() );
+
+ return false;
+ }
+
+ aTool->Reset( TOOL_INTERACTIVE::RUN );
+ aTool->SetTransitions();
+
+ // Add the tool on the front of the processing queue (it gets events first)
+ m_activeTools.push_front( aTool->GetId() );
+
+ return true;
+}
+
+
+TOOL_BASE* TOOL_MANAGER::FindTool( int aId ) const
+{
+ std::map<TOOL_ID, TOOL_STATE*>::const_iterator it = m_toolIdIndex.find( aId );
+
+ if( it != m_toolIdIndex.end() )
+ return it->second->theTool;
+
+ return NULL;
+}
+
+
+TOOL_BASE* TOOL_MANAGER::FindTool( const std::string& aName ) const
+{
+ std::map<std::string, TOOL_STATE*>::const_iterator it = m_toolNameIndex.find( aName );
+
+ if( it != m_toolNameIndex.end() )
+ return it->second->theTool;
+
+ return NULL;
+}
+
+void TOOL_MANAGER::DeactivateTool()
+{
+ TOOL_EVENT evt( TC_COMMAND, TA_ACTIVATE, "" ); // deactivate the active tool
+ ProcessEvent( evt );
+}
+
+void TOOL_MANAGER::ResetTools( TOOL_BASE::RESET_REASON aReason )
+{
+ DeactivateTool();
+
+ BOOST_FOREACH( TOOL_BASE* tool, m_toolState | boost::adaptors::map_keys )
+ {
+ tool->Reset( aReason );
+ tool->SetTransitions();
+ }
+}
+
+
+int TOOL_MANAGER::GetPriority( int aToolId ) const
+{
+ int priority = 0;
+
+ for( std::list<TOOL_ID>::const_iterator it = m_activeTools.begin(),
+ itEnd = m_activeTools.end(); it != itEnd; ++it )
+ {
+ if( *it == aToolId )
+ return priority;
+
+ ++priority;
+ }
+
+ return -1;
+}
+
+
+void TOOL_MANAGER::ScheduleNextState( TOOL_BASE* aTool, TOOL_STATE_FUNC& aHandler,
+ const TOOL_EVENT_LIST& aConditions )
+{
+ TOOL_STATE* st = m_toolState[aTool];
+
+ st->transitions.push_back( TRANSITION( aConditions, aHandler ) );
+}
+
+
+optional<TOOL_EVENT> TOOL_MANAGER::ScheduleWait( TOOL_BASE* aTool,
+ const TOOL_EVENT_LIST& aConditions )
+{
+ TOOL_STATE* st = m_toolState[aTool];
+
+ assert( !st->pendingWait ); // everything collapses on two Yield() in a row
+
+ // indicate to the manager that we are going to sleep and we shall be
+ // woken up when an event matching aConditions arrive
+ st->pendingWait = true;
+ st->waitEvents = aConditions;
+
+ // switch context back to event dispatcher loop
+ st->cofunc->Yield();
+
+ return st->wakeupEvent;
+}
+
+
+void TOOL_MANAGER::dispatchInternal( const TOOL_EVENT& aEvent )
+{
+ // iterate over all registered tools
+ for( std::list<TOOL_ID>::iterator it = m_activeTools.begin();
+ it != m_activeTools.end(); /* iteration is done inside */)
+ {
+ std::list<TOOL_ID>::iterator curIt = it;
+ TOOL_STATE* st = m_toolIdIndex[*it];
+ ++it; // it might be overwritten, if the tool is removed the m_activeTools list
+
+ // the tool state handler is waiting for events (i.e. called Wait() method)
+ if( st->pendingWait )
+ {
+ if( st->waitEvents.Matches( aEvent ) )
+ {
+ // By default, only messages are passed further
+ m_passEvent = ( aEvent.Category() == TC_MESSAGE );
+
+ // got matching event? clear wait list and wake up the coroutine
+ st->wakeupEvent = aEvent;
+ st->pendingWait = false;
+ st->waitEvents.clear();
+
+ if( st->cofunc && !st->cofunc->Resume() )
+ {
+ if( finishTool( st, false ) ) // The couroutine has finished
+ it = m_activeTools.erase( curIt );
+ }
+
+ // If the tool did not request to propagate
+ // the event to other tools, we should stop it now
+ if( !m_passEvent )
+ break;
+ }
+ }
+ }
+
+ BOOST_FOREACH( TOOL_STATE* st, m_toolState | boost::adaptors::map_values )
+ {
+ // no state handler in progress - check if there are any transitions (defined by
+ // Go() method that match the event.
+ if( !st->pendingWait && !st->transitions.empty() )
+ {
+ BOOST_FOREACH( TRANSITION& tr, st->transitions )
+ {
+ if( tr.first.Matches( aEvent ) )
+ {
+ // if there is already a context, then store it
+ if( st->cofunc )
+ st->Push();
+
+ // as the state changes, the transition table has to be set up again
+ st->transitions.clear();
+
+ st->cofunc = new COROUTINE<int, const TOOL_EVENT&>( tr.second );
+
+ // got match? Run the handler.
+ st->cofunc->Call( aEvent );
+
+ if( !st->cofunc->Running() )
+ finishTool( st ); // The couroutine has finished immediately?
+
+ // there is no point in further checking, as transitions got cleared
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+bool TOOL_MANAGER::dispatchStandardEvents( const TOOL_EVENT& aEvent )
+{
+ if( aEvent.Action() == TA_KEY_PRESSED )
+ {
+ // Check if there is a hotkey associated
+ if( m_actionMgr->RunHotKey( aEvent.Modifier() | aEvent.KeyCode() ) )
+ return false; // hotkey event was handled so it does not go any further
+ }
+
+ return true;
+}
+
+
+bool TOOL_MANAGER::dispatchActivation( const TOOL_EVENT& aEvent )
+{
+ if( aEvent.IsActivate() )
+ {
+ std::map<std::string, TOOL_STATE*>::iterator tool = m_toolNameIndex.find( *aEvent.GetCommandStr() );
+
+ if( tool != m_toolNameIndex.end() )
+ {
+ runTool( tool->second->theTool );
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+void TOOL_MANAGER::dispatchContextMenu( const TOOL_EVENT& aEvent )
+{
+ BOOST_FOREACH( TOOL_ID toolId, m_activeTools )
+ {
+ TOOL_STATE* st = m_toolIdIndex[toolId];
+
+ // the tool requested a context menu. The menu is activated on RMB click (CMENU_BUTTON mode)
+ // or immediately (CMENU_NOW) mode. The latter is used for clarification lists.
+ if( st->contextMenuTrigger != CMENU_OFF )
+ {
+ if( st->contextMenuTrigger == CMENU_BUTTON && !aEvent.IsClick( BUT_RIGHT ) )
+ break;
+
+ st->pendingWait = true;
+ st->waitEvents = TOOL_EVENT( TC_ANY, TA_ANY );
+
+ // Store the menu pointer in case it is changed by the TOOL when handling menu events
+ CONTEXT_MENU* m = st->contextMenu;
+
+ if( st->contextMenuTrigger == CMENU_NOW )
+ st->contextMenuTrigger = CMENU_OFF;
+
+ // Temporarily store the cursor position, so the tools could execute actions
+ // using the point where the user has invoked a context menu
+ bool forcedCursor = m_viewControls->IsCursorPositionForced();
+ VECTOR2D cursorPos = m_viewControls->GetCursorPosition();
+ m_viewControls->ForceCursorPosition( true, m_viewControls->GetCursorPosition() );
+
+ // Run update handlers
+ m->UpdateAll();
+
+ boost::scoped_ptr<CONTEXT_MENU> menu( new CONTEXT_MENU( *m ) );
+ GetEditFrame()->PopupMenu( menu.get() );
+
+ // If nothing was chosen from the context menu, we must notify the tool as well
+ if( menu->GetSelected() < 0 )
+ {
+ TOOL_EVENT evt( TC_COMMAND, TA_CONTEXT_MENU_CHOICE, -1 );
+ evt.SetParameter( m );
+ dispatchInternal( evt );
+ }
+
+ TOOL_EVENT evt( TC_COMMAND, TA_CONTEXT_MENU_CLOSED );
+ evt.SetParameter( m );
+ dispatchInternal( evt );
+
+ m_viewControls->ForceCursorPosition( forcedCursor, cursorPos );
+
+ break;
+ }
+ }
+}
+
+
+bool TOOL_MANAGER::finishTool( TOOL_STATE* aState, bool aDeactivate )
+{
+ bool shouldDeactivate = false;
+
+ // Reset VIEW_CONTROLS only if the most recent tool is finished
+ if( m_activeTools.empty() || m_activeTools.front() == aState->theTool->GetId() )
+ m_viewControls->Reset();
+
+ if( !aState->Pop() ) // if there are no other contexts saved on the stack
+ {
+ // find the tool and deactivate it
+ std::list<TOOL_ID>::iterator tool = std::find( m_activeTools.begin(), m_activeTools.end(),
+ aState->theTool->GetId() );
+
+ if( tool != m_activeTools.end() )
+ {
+ shouldDeactivate = true;
+
+ if( aDeactivate )
+ m_activeTools.erase( tool );
+ }
+ }
+
+ aState->theTool->SetTransitions();
+
+ return shouldDeactivate;
+}
+
+
+bool TOOL_MANAGER::ProcessEvent( const TOOL_EVENT& aEvent )
+{
+ // Early dispatch of events destined for the TOOL_MANAGER
+ if( !dispatchStandardEvents( aEvent ) )
+ return false;
+
+ dispatchInternal( aEvent );
+ dispatchActivation( aEvent );
+ dispatchContextMenu( aEvent );
+
+ // Dispatch queue
+ while( !m_eventQueue.empty() )
+ {
+ TOOL_EVENT event = m_eventQueue.front();
+ m_eventQueue.pop_front();
+ ProcessEvent( event );
+ }
+
+ if( m_view->IsDirty() )
+ {
+ EDA_DRAW_FRAME* f = static_cast<EDA_DRAW_FRAME*>( GetEditFrame() );
+ f->GetGalCanvas()->Refresh(); // fixme: ugly hack, provide a method in TOOL_DISPATCHER.
+ }
+
+ return false;
+}
+
+
+void TOOL_MANAGER::ScheduleContextMenu( TOOL_BASE* aTool, CONTEXT_MENU* aMenu,
+ CONTEXT_MENU_TRIGGER aTrigger )
+{
+ TOOL_STATE* st = m_toolState[aTool];
+
+ st->contextMenu = aMenu;
+ st->contextMenuTrigger = aTrigger;
+}
+
+
+bool TOOL_MANAGER::SaveClipboard( const std::string& aText )
+{
+ if( wxTheClipboard->Open() )
+ {
+ wxTheClipboard->SetData( new wxTextDataObject( wxString( aText.c_str(), wxConvUTF8 ) ) );
+ wxTheClipboard->Close();
+
+ return true;
+ }
+
+ return false;
+}
+
+
+std::string TOOL_MANAGER::GetClipboard() const
+{
+ std::string result;
+
+ if( wxTheClipboard->Open() )
+ {
+ if( wxTheClipboard->IsSupported( wxDF_TEXT ) )
+ {
+ wxTextDataObject data;
+ wxTheClipboard->GetData( data );
+
+ result = data.GetText().mb_str();
+ }
+
+ wxTheClipboard->Close();
+ }
+
+ return result;
+}
+
+
+TOOL_ID TOOL_MANAGER::MakeToolId( const std::string& aToolName )
+{
+ static int currentId;
+
+ return currentId++;
+}
+
+
+void TOOL_MANAGER::SetEnvironment( EDA_ITEM* aModel, KIGFX::VIEW* aView,
+ KIGFX::VIEW_CONTROLS* aViewControls, wxWindow* aFrame )
+{
+ m_model = aModel;
+ m_view = aView;
+ m_viewControls = aViewControls;
+ m_editFrame = aFrame;
+ m_actionMgr->UpdateHotKeys();
+}
+
+
+bool TOOL_MANAGER::isActive( TOOL_BASE* aTool )
+{
+ if( !isRegistered( aTool ) )
+ return false;
+
+ // Just check if the tool is on the active tools stack
+ return std::find( m_activeTools.begin(), m_activeTools.end(), aTool->GetId() ) != m_activeTools.end();
+}
diff --git a/common/trigo.cpp b/common/trigo.cpp
new file mode 100644
index 0000000..4f29125
--- /dev/null
+++ b/common/trigo.cpp
@@ -0,0 +1,436 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file trigo.cpp
+ * @brief Trigonometric and geometric basic functions.
+ */
+
+#include <fctsys.h>
+#include <macros.h>
+#include <trigo.h>
+#include <common.h>
+#include <math_for_graphics.h>
+
+// Returns true if the point P is on the segment S.
+// faster than TestSegmentHit() because P should be exactly on S
+// therefore works fine only for H, V and 45 deg segm (suitable for wires in eeschema)
+bool IsPointOnSegment( const wxPoint& aSegStart, const wxPoint& aSegEnd,
+ const wxPoint& aTestPoint )
+{
+ wxPoint vectSeg = aSegEnd - aSegStart; // Vector from S1 to S2
+ wxPoint vectPoint = aTestPoint - aSegStart; // Vector from S1 to P
+
+ // Use long long here to avoid overflow in calculations
+ if( (long long) vectSeg.x * vectPoint.y - (long long) vectSeg.y * vectPoint.x )
+ return false; /* Cross product non-zero, vectors not parallel */
+
+ if( ( (long long) vectSeg.x * vectPoint.x + (long long) vectSeg.y * vectPoint.y ) <
+ ( (long long) vectPoint.x * vectPoint.x + (long long) vectPoint.y * vectPoint.y ) )
+ return false; /* Point not on segment */
+
+ return true;
+}
+
+
+// Returns true if the segment 1 intersectd the segment 2.
+bool SegmentIntersectsSegment( const wxPoint &a_p1_l1, const wxPoint &a_p2_l1,
+ const wxPoint &a_p1_l2, const wxPoint &a_p2_l2 )
+{
+
+ //We are forced to use 64bit ints because the internal units can oveflow 32bit ints when
+ // multiplied with each other, the alternative would be to scale the units down (i.e. divide
+ // by a fixed number).
+ long long dX_a, dY_a, dX_b, dY_b, dX_ab, dY_ab;
+ long long num_a, num_b, den;
+
+ //Test for intersection within the bounds of both line segments using line equations of the
+ // form:
+ // x_k(u_k) = u_k * dX_k + x_k(0)
+ // y_k(u_k) = u_k * dY_k + y_k(0)
+ // with 0 <= u_k <= 1 and k = [ a, b ]
+
+ dX_a = a_p2_l1.x - a_p1_l1.x;
+ dY_a = a_p2_l1.y - a_p1_l1.y;
+ dX_b = a_p2_l2.x - a_p1_l2.x;
+ dY_b = a_p2_l2.y - a_p1_l2.y;
+ dX_ab = a_p1_l2.x - a_p1_l1.x;
+ dY_ab = a_p1_l2.y - a_p1_l1.y;
+
+ den = dY_a * dX_b - dY_b * dX_a ;
+
+ //Check if lines are parallel
+ if( den == 0 )
+ return false;
+
+ num_a = dY_ab * dX_b - dY_b * dX_ab;
+ num_b = dY_ab * dX_a - dY_a * dX_ab;
+
+ //We wont calculate directly the u_k of the intersection point to avoid floating point
+ // division but they could be calculated with:
+ // u_a = (float) num_a / (float) den;
+ // u_b = (float) num_b / (float) den;
+
+ if( den < 0 )
+ {
+ den = -den;
+ num_a = -num_a;
+ num_b = -num_b;
+ }
+
+ //Test sign( u_a ) and return false if negative
+ if( num_a < 0 )
+ return false;
+
+ //Test sign( u_b ) and return false if negative
+ if( num_b < 0 )
+ return false;
+
+ //Test to ensure (u_a <= 1)
+ if( num_a > den )
+ return false;
+
+ //Test to ensure (u_b <= 1)
+ if( num_b > den )
+ return false;
+
+ return true;
+}
+
+
+/* Function TestSegmentHit
+ * test for hit on line segment
+ * i.e. a reference point is within a given distance from segment
+ * aRefPoint = reference point to test
+ * aStart, aEnd are coordinates of end points segment
+ * aDist = maximum distance for hit
+ * Note: for calculation time reasons, the distance between the ref point
+ * and the segment is not always exactly calculated
+ * (we only know if the actual dist is < aDist, not exactly know this dist.
+ * Because many times we have horizontal or vertical segments,
+ * a special calcultaion is made for them
+ * Note: sometimes we need to calculate the distande between 2 points
+ * A square root should be calculated.
+ * However, because we just compare 2 distnaces, to avoid calculating square root,
+ * the square of distances are compared.
+*/
+static inline double square( int x ) // helper function to calculate x*x
+{
+ return (double) x * x;
+}
+bool TestSegmentHit( const wxPoint &aRefPoint, wxPoint aStart,
+ wxPoint aEnd, int aDist )
+{
+ // test for vertical or horizontal segment
+ if( aEnd.x == aStart.x )
+ {
+ // vertical segment
+ int ll = abs( aRefPoint.x - aStart.x );
+
+ if( ll > aDist )
+ return false;
+
+ // To have only one case to examine, ensure aEnd.y > aStart.y
+ if( aEnd.y < aStart.y )
+ std::swap( aStart.y, aEnd.y );
+
+ if( aRefPoint.y <= aEnd.y && aRefPoint.y >= aStart.y )
+ return true;
+
+ // there is a special case: x,y near an end point (distance < dist )
+ // the distance should be carefully calculated
+ if( (aStart.y - aRefPoint.y) < aDist )
+ {
+ double dd = square( aRefPoint.x - aStart.x) +
+ square( aRefPoint.y - aStart.y );
+ if( dd <= square( aDist ) )
+ return true;
+ }
+
+ if( (aRefPoint.y - aEnd.y) < aDist )
+ {
+ double dd = square( aRefPoint.x - aEnd.x ) +
+ square( aRefPoint.y - aEnd.y );
+ if( dd <= square( aDist ) )
+ return true;
+ }
+ }
+ else if( aEnd.y == aStart.y )
+ {
+ // horizontal segment
+ int ll = abs( aRefPoint.y - aStart.y );
+
+ if( ll > aDist )
+ return false;
+
+ // To have only one case to examine, ensure xf > xi
+ if( aEnd.x < aStart.x )
+ std::swap( aStart.x, aEnd.x );
+
+ if( aRefPoint.x <= aEnd.x && aRefPoint.x >= aStart.x )
+ return true;
+
+ // there is a special case: x,y near an end point (distance < dist )
+ // the distance should be carefully calculated
+ if( (aStart.x - aRefPoint.x) <= aDist )
+ {
+ double dd = square( aRefPoint.x - aStart.x ) +
+ square( aRefPoint.y - aStart.y );
+ if( dd <= square( aDist ) )
+ return true;
+ }
+
+ if( (aRefPoint.x - aEnd.x) <= aDist )
+ {
+ double dd = square( aRefPoint.x - aEnd.x ) +
+ square( aRefPoint.y - aEnd.y );
+ if( dd <= square( aDist ) )
+ return true;
+ }
+ }
+ else
+ {
+ // oblique segment:
+ // First, we need to calculate the distance between the point
+ // and the line defined by aStart and aEnd
+ // this dist should be < dist
+ //
+ // find a,slope such that aStart and aEnd lie on y = a + slope*x
+ double slope = (double) (aEnd.y - aStart.y) / (aEnd.x - aStart.x);
+ double a = (double) aStart.y - slope * aStart.x;
+ // find c,orthoslope such that (x,y) lies on y = c + orthoslope*x,
+ // where orthoslope=(-1/slope)
+ // to calculate xp, yp = near point from aRefPoint
+ // which is on the line defined by aStart, aEnd
+ double orthoslope = -1.0 / slope;
+ double c = (double) aRefPoint.y - orthoslope * aRefPoint.x;
+ // find nearest point to (x,y) on line defined by aStart, aEnd
+ double xp = (a - c) / (orthoslope - slope);
+ double yp = a + slope * xp;
+ // find distance to line, in fact the square of dist,
+ // because we just know if it is > or < aDist
+ double dd = square( aRefPoint.x - xp ) + square( aRefPoint.y - yp );
+ double dist = square( aDist );
+
+ if( dd > dist ) // this reference point is not a good candiadte.
+ return false;
+
+ // dd is < dist, therefore we should make a fine test
+ if( fabs( slope ) > 0.7 )
+ {
+ // line segment more vertical than horizontal
+ if( (aEnd.y > aStart.y && yp <= aEnd.y && yp >= aStart.y) ||
+ (aEnd.y < aStart.y && yp >= aEnd.y && yp <= aStart.y) )
+ return true;
+ }
+ else
+ {
+ // line segment more horizontal than vertical
+ if( (aEnd.x > aStart.x && xp <= aEnd.x && xp >= aStart.x) ||
+ (aEnd.x < aStart.x && xp >= aEnd.x && xp <= aStart.x) )
+ return true;
+ }
+
+ // Here, the test point is still a good candidate,
+ // however it is not "between" the end points of the segment.
+ // It is "outside" the segment, but it could be near a segment end point
+ // Therefore, we test the dist from the test point to each segment end point
+ dd = square( aRefPoint.x - aEnd.x ) + square( aRefPoint.y - aEnd.y );
+ if( dd <= dist )
+ return true;
+ dd = square( aRefPoint.x - aStart.x ) + square( aRefPoint.y - aStart.y );
+ if( dd <= dist )
+ return true;
+ }
+
+ return false; // no hit
+}
+
+
+double ArcTangente( int dy, int dx )
+{
+
+ /* gcc is surprisingly smart in optimizing these conditions in
+ a tree! */
+
+ if( dx == 0 && dy == 0 )
+ return 0;
+
+ if( dy == 0 )
+ {
+ if( dx >= 0 )
+ return 0;
+ else
+ return -1800;
+ }
+
+ if( dx == 0 )
+ {
+ if( dy >= 0 )
+ return 900;
+ else
+ return -900;
+ }
+
+ if( dx == dy )
+ {
+ if( dx >= 0 )
+ return 450;
+ else
+ return -1800 + 450;
+ }
+
+ if( dx == -dy )
+ {
+ if( dx >= 0 )
+ return -450;
+ else
+ return 1800 - 450;
+ }
+
+ // Of course dy and dx are treated as double
+ return RAD2DECIDEG( atan2( dy, dx ) );
+}
+
+
+void RotatePoint( int* pX, int* pY, double angle )
+{
+ int tmp;
+
+ NORMALIZE_ANGLE_POS( angle );
+
+ // Cheap and dirty optimizations for 0, 90, 180, and 270 degrees.
+ if( angle == 0 )
+ return;
+
+ if( angle == 900 ) /* sin = 1, cos = 0 */
+ {
+ tmp = *pX;
+ *pX = *pY;
+ *pY = -tmp;
+ }
+ else if( angle == 1800 ) /* sin = 0, cos = -1 */
+ {
+ *pX = -*pX;
+ *pY = -*pY;
+ }
+ else if( angle == 2700 ) /* sin = -1, cos = 0 */
+ {
+ tmp = *pX;
+ *pX = -*pY;
+ *pY = tmp;
+ }
+ else
+ {
+ double fangle = DECIDEG2RAD( angle );
+ double sinus = sin( fangle );
+ double cosinus = cos( fangle );
+ double fpx = (*pY * sinus ) + (*pX * cosinus );
+ double fpy = (*pY * cosinus ) - (*pX * sinus );
+ *pX = KiROUND( fpx );
+ *pY = KiROUND( fpy );
+ }
+}
+
+
+void RotatePoint( int* pX, int* pY, int cx, int cy, double angle )
+{
+ int ox, oy;
+
+ ox = *pX - cx;
+ oy = *pY - cy;
+
+ RotatePoint( &ox, &oy, angle );
+
+ *pX = ox + cx;
+ *pY = oy + cy;
+}
+
+
+void RotatePoint( wxPoint* point, const wxPoint& centre, double angle )
+{
+ int ox, oy;
+
+ ox = point->x - centre.x;
+ oy = point->y - centre.y;
+
+ RotatePoint( &ox, &oy, angle );
+ point->x = ox + centre.x;
+ point->y = oy + centre.y;
+}
+
+
+void RotatePoint( double* pX, double* pY, double cx, double cy, double angle )
+{
+ double ox, oy;
+
+ ox = *pX - cx;
+ oy = *pY - cy;
+
+ RotatePoint( &ox, &oy, angle );
+
+ *pX = ox + cx;
+ *pY = oy + cy;
+}
+
+
+void RotatePoint( double* pX, double* pY, double angle )
+{
+ double tmp;
+
+ NORMALIZE_ANGLE_POS( angle );
+
+ // Cheap and dirty optimizations for 0, 90, 180, and 270 degrees.
+ if( angle == 0 )
+ return;
+
+ if( angle == 900 ) /* sin = 1, cos = 0 */
+ {
+ tmp = *pX;
+ *pX = *pY;
+ *pY = -tmp;
+ }
+ else if( angle == 1800 ) /* sin = 0, cos = -1 */
+ {
+ *pX = -*pX;
+ *pY = -*pY;
+ }
+ else if( angle == 2700 ) /* sin = -1, cos = 0 */
+ {
+ tmp = *pX;
+ *pX = -*pY;
+ *pY = tmp;
+ }
+ else
+ {
+ double fangle = DECIDEG2RAD( angle );
+ double sinus = sin( fangle );
+ double cosinus = cos( fangle );
+
+ double fpx = (*pY * sinus ) + (*pX * cosinus );
+ double fpy = (*pY * cosinus ) - (*pX * sinus );
+ *pX = fpx;
+ *pY = fpy;
+ }
+}
diff --git a/common/utf8.cpp b/common/utf8.cpp
new file mode 100644
index 0000000..b90e4a7
--- /dev/null
+++ b/common/utf8.cpp
@@ -0,0 +1,255 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <utf8.h>
+
+/* THROW_IO_ERROR needs this, but it includes this file, so until some
+ factoring of THROW_IO_ERROR into a separate header, defer and use the asserts.
+#include <richio.h>
+*/
+
+#include <assert.h>
+
+/*
+ These are not inlined so that code space is saved by encapsulating the
+ creation of intermediate objects and the referencing of wxConvUTF8.
+*/
+
+
+UTF8::UTF8( const wxString& o ) :
+ std::string( (const char*) o.utf8_str() )
+{
+}
+
+
+UTF8::operator wxString () const
+{
+ return wxString( c_str(), wxConvUTF8 );
+}
+
+
+UTF8& UTF8::operator=( const wxString& o )
+{
+ std::string::operator=( (const char*) o.utf8_str() );
+ return *this;
+}
+
+
+#ifndef THROW_IO_ERROR
+ #define THROW_IO_ERROR(x) // nothing
+#endif
+
+// There is no wxWidgets function that does this, because wchar_t is 16 bits
+// on windows and wx wants to encode the output in UTF16 for such.
+
+int UTF8::uni_forward( const unsigned char* aSequence, unsigned* aResult )
+{
+ unsigned ch = *aSequence;
+
+ if( ch < 0x80 )
+ {
+ if( aResult )
+ *aResult = ch;
+ return 1;
+ }
+
+ const unsigned char* s = aSequence;
+
+ static const unsigned char utf8_len[] = {
+ // Map encoded prefix byte to sequence length. Zero means
+ // illegal prefix. See RFC 3629 for details
+ /*
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 00-0F
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 70-7F
+ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80-8F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B0-BF
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0-C1 + C2-CF
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // D0-DF
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // E0-EF
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // F0-F4 + F5-FF
+ };
+
+ int len = utf8_len[ *s - 0x80 /* top half of table is missing */ ];
+
+ switch( len )
+ {
+ default:
+ case 0:
+ THROW_IO_ERROR( "invalid start byte" );
+ break;
+
+ case 2:
+ if( ( s[1] & 0xc0 ) != 0x80 )
+ {
+ THROW_IO_ERROR( "invalid continuation byte" );
+ }
+
+ ch = ((s[0] & 0x1f) << 6) +
+ ((s[1] & 0x3f) << 0);
+
+ assert( ch > 0x007F && ch <= 0x07FF );
+ break;
+
+ case 3:
+ if( (s[1] & 0xc0) != 0x80 ||
+ (s[2] & 0xc0) != 0x80 ||
+ (s[0] == 0xE0 && s[1] < 0xA0)
+ // || (s[0] == 0xED && s[1] > 0x9F)
+ )
+ {
+ THROW_IO_ERROR( "invalid continuation byte" );
+ }
+
+ ch = ((s[0] & 0x0f) << 12) +
+ ((s[1] & 0x3f) << 6 ) +
+ ((s[2] & 0x3f) << 0 );
+
+ assert( ch > 0x07FF && ch <= 0xFFFF );
+ break;
+
+ case 4:
+ if( (s[1] & 0xc0) != 0x80 ||
+ (s[2] & 0xc0) != 0x80 ||
+ (s[3] & 0xc0) != 0x80 ||
+ (s[0] == 0xF0 && s[1] < 0x90) ||
+ (s[0] == 0xF4 && s[1] > 0x8F) )
+ {
+ THROW_IO_ERROR( "invalid continuation byte" );
+ }
+
+ ch = ((s[0] & 0x7) << 18) +
+ ((s[1] & 0x3f) << 12) +
+ ((s[2] & 0x3f) << 6 ) +
+ ((s[3] & 0x3f) << 0 );
+
+ assert( ch > 0xFFFF && ch <= 0x10ffff );
+ break;
+ }
+
+ if( aResult )
+ *aResult = ch;
+
+ return len;
+}
+
+
+UTF8::UTF8( const wchar_t* txt ) :
+ // size initial string safely large enough, then shrink to known size later.
+ std::string( wcslen( txt ) * 4, 0 )
+{
+ /*
+
+ "this" string was sized to hold the worst case UTF8 encoded byte
+ sequence, and was initialized with all nul bytes. Overwrite some of
+ those nuls, then resize, shrinking down to actual size.
+
+ Use the wx 2.8 function, not new FromWChar(). It knows about wchar_t
+ possibly being 16 bits wide on Windows and holding UTF16 input.
+
+ */
+
+ int sz = wxConvUTF8.WC2MB( (char*) data(), txt, size() );
+
+ resize( sz );
+}
+
+
+#if 0 // some unit tests:
+
+#include <stdio.h>
+
+wxString wxFunctionTaking_wxString( const wxString& wx )
+{
+ printf( "%s:'%s'\n", __func__, (char*) UTF8( wx ) );
+ printf( "%s:'%s'\n", __func__, (const char*) UTF8( wx ) );
+ printf( "%s:'%s'\n", __func__, UTF8( wx ).c_str() );
+
+ return wx;
+}
+
+int main()
+{
+ std::string str = "input";
+
+ UTF8 u0 = L"wide string";
+ UTF8 u1 = "initial";
+ wxString wx = wxT( "input2" );
+
+ printf( "u0:'%s'\n", u0.c_str() );
+ printf( "u1:'%s'\n", u1.c_str() );
+
+ u1 = str;
+
+ wxString wx2 = u1;
+
+ // force a std::string into a UTF8, then into a wxString, then copy construct:
+ wxString wx3 = (UTF8&) u1;
+
+ UTF8 u2 = wx2;
+
+ u2 += 'X';
+
+ printf( "u2:'%s'\n", u2.c_str() );
+
+ // key accomplishments here:
+ // 1) passing a UTF8 to a function which normally takes a wxString.
+ // 2) return a wxString back into a UTF8.
+ UTF8 result = wxFunctionTaking_wxString( u2 );
+
+ printf( "result:'%s'\n", result.c_str() );
+
+ // test the unicode iterator:
+ for( UTF8::uni_iter it = u2.ubegin(); it < u2.uend(); )
+ {
+ // test post-increment:
+ printf( " _%02x_", *it++ );
+ }
+
+ printf( "\n" );
+
+ UTF8::uni_iter it = u2.ubegin();
+
+ UTF8::uni_iter it2 = it++;
+
+ printf( "post_inc:'%c' should be 'i'\n", *it2 );
+
+ it2 = ++it;
+
+ printf( "pre_inc:'%c' should be 'p'\n", *it2 );
+
+ printf( "u[1]:'%c' should be 'n'\n", u2[1] );
+
+ return 0;
+}
+
+#endif
diff --git a/common/validators.cpp b/common/validators.cpp
new file mode 100644
index 0000000..bb67a7e
--- /dev/null
+++ b/common/validators.cpp
@@ -0,0 +1,85 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file validators.cpp
+ * @brief Custom text control validator implementations.
+ */
+
+#include <kicad_string.h>
+#include <validators.h>
+
+#include <wx/textentry.h>
+#include <wx/log.h>
+
+
+FILE_NAME_CHAR_VALIDATOR::FILE_NAME_CHAR_VALIDATOR( wxString* aValue ) :
+ wxTextValidator( wxFILTER_EXCLUDE_CHAR_LIST, aValue )
+{
+ // The Windows (DOS) file system forbidden characters already include the forbidden
+ // file name characters for both Posix and OSX systems. The characters \/:*?|"<> are
+ // illegal and filtered by the validator.
+ wxString illegalChars = wxFileName::GetForbiddenChars( wxPATH_DOS );
+ wxTextValidator nameValidator( wxFILTER_EXCLUDE_CHAR_LIST );
+ wxArrayString illegalCharList;
+
+ for( unsigned i = 0; i < illegalChars.size(); i++ )
+ illegalCharList.Add( wxString( illegalChars[i] ) );
+
+ SetExcludes( illegalCharList );
+ }
+
+
+FILE_NAME_WITH_PATH_CHAR_VALIDATOR::FILE_NAME_WITH_PATH_CHAR_VALIDATOR( wxString* aValue ) :
+ wxTextValidator( wxFILTER_EXCLUDE_CHAR_LIST | wxFILTER_EMPTY, aValue )
+{
+ // The Windows (DOS) file system forbidden characters already include the forbidden
+ // file name characters for both Posix and OSX systems. The characters *?|"<> are
+ // illegal and filtered by the validator, but /\: are valid (\ and : only on Windows.
+ wxString illegalChars = wxFileName::GetForbiddenChars( wxPATH_DOS );
+ wxTextValidator nameValidator( wxFILTER_EXCLUDE_CHAR_LIST );
+ wxArrayString illegalCharList;
+
+ for( unsigned i = 0; i < illegalChars.size(); i++ )
+ {
+ if( illegalChars[i] == '/' )
+ continue;
+
+#if defined (__WINDOWS__)
+ if( illegalChars[i] == '\\' || illegalChars[i] == ':' )
+ continue;
+#endif
+ illegalCharList.Add( wxString( illegalChars[i] ) );
+ }
+
+ SetExcludes( illegalCharList );
+}
+
+
+ENVIRONMENT_VARIABLE_CHAR_VALIDATOR::ENVIRONMENT_VARIABLE_CHAR_VALIDATOR( wxString* aValue ) :
+ wxTextValidator( wxFILTER_INCLUDE_CHAR_LIST | wxFILTER_EMPTY, aValue )
+{
+ wxString includeChars( wxT( "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" ) );
+ SetCharIncludes( includeChars );
+}
diff --git a/common/view/view.cpp b/common/view/view.cpp
new file mode 100644
index 0000000..8f1933c
--- /dev/null
+++ b/common/view/view.cpp
@@ -0,0 +1,1086 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <boost/foreach.hpp>
+
+#include <base_struct.h>
+#include <layers_id_colors_and_visibility.h>
+
+#include <view/view.h>
+#include <view/view_group.h>
+#include <view/view_rtree.h>
+#include <gal/definitions.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <painter.h>
+
+#ifdef PROFILE
+#include <profile.h>
+#endif /* PROFILE */
+
+using namespace KIGFX;
+
+VIEW::VIEW( bool aIsDynamic ) :
+ m_enableOrderModifier( true ),
+ m_scale( 4.0 ),
+ m_minScale( 4.0 ), m_maxScale( 15000 ),
+ m_painter( NULL ),
+ m_gal( NULL ),
+ m_dynamic( aIsDynamic )
+{
+ m_boundary.SetMaximum();
+ m_needsUpdate.reserve( 32768 );
+
+ // Redraw everything at the beginning
+ MarkDirty();
+
+ // View uses layers to display EDA_ITEMs (item may be displayed on several layers, for example
+ // pad may be shown on pad, pad hole and solder paste layers). There are usual copper layers
+ // (eg. F.Cu, B.Cu, internal and so on) and layers for displaying objects such as texts,
+ // silkscreen, pads, vias, etc.
+ for( int i = 0; i < VIEW_MAX_LAYERS; i++ )
+ AddLayer( i );
+}
+
+
+VIEW::~VIEW()
+{
+ BOOST_FOREACH( LAYER_MAP::value_type& l, m_layers )
+ delete l.second.items;
+}
+
+
+void VIEW::AddLayer( int aLayer, bool aDisplayOnly )
+{
+ if( m_layers.find( aLayer ) == m_layers.end() )
+ {
+ m_layers[aLayer] = VIEW_LAYER();
+ m_layers[aLayer].id = aLayer;
+ m_layers[aLayer].items = new VIEW_RTREE();
+ m_layers[aLayer].renderingOrder = aLayer;
+ m_layers[aLayer].visible = true;
+ m_layers[aLayer].displayOnly = aDisplayOnly;
+ m_layers[aLayer].target = TARGET_CACHED;
+ }
+
+ sortLayers();
+}
+
+
+void VIEW::Add( VIEW_ITEM* aItem )
+{
+ int layers[VIEW_MAX_LAYERS], layers_count;
+
+ aItem->ViewGetLayers( layers, layers_count );
+ aItem->saveLayers( layers, layers_count );
+
+ if( m_dynamic )
+ aItem->viewAssign( this );
+
+ for( int i = 0; i < layers_count; ++i )
+ {
+ VIEW_LAYER& l = m_layers[layers[i]];
+ l.items->Insert( aItem );
+ MarkTargetDirty( l.target );
+ }
+
+ aItem->ViewUpdate( VIEW_ITEM::ALL );
+}
+
+
+void VIEW::Remove( VIEW_ITEM* aItem )
+{
+ if( m_dynamic )
+ aItem->m_view = NULL;
+
+ if( aItem->viewRequiredUpdate() != VIEW_ITEM::NONE ) // prevent from updating a removed item
+ {
+ std::vector<VIEW_ITEM*>::iterator item = std::find( m_needsUpdate.begin(),
+ m_needsUpdate.end(), aItem );
+
+ if( item != m_needsUpdate.end() )
+ {
+ m_needsUpdate.erase( item );
+ aItem->clearUpdateFlags();
+ }
+ }
+
+ int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
+ aItem->getLayers( layers, layers_count );
+
+ for( int i = 0; i < layers_count; ++i )
+ {
+ VIEW_LAYER& l = m_layers[layers[i]];
+ l.items->Remove( aItem );
+ MarkTargetDirty( l.target );
+
+ // Clear the GAL cache
+ int prevGroup = aItem->getGroup( layers[i] );
+
+ if( prevGroup >= 0 )
+ m_gal->DeleteGroup( prevGroup );
+ }
+
+ aItem->deleteGroups();
+}
+
+
+void VIEW::SetRequired( int aLayerId, int aRequiredId, bool aRequired )
+{
+ wxASSERT( (unsigned) aLayerId < m_layers.size() );
+ wxASSERT( (unsigned) aRequiredId < m_layers.size() );
+
+ if( aRequired )
+ m_layers[aLayerId].requiredLayers.insert( aRequiredId );
+ else
+ m_layers[aLayerId].requiredLayers.erase( aRequired );
+}
+
+
+// stupid C++... python lambda would do this in one line
+template <class Container>
+struct queryVisitor
+{
+ typedef typename Container::value_type item_type;
+
+ queryVisitor( Container& aCont, int aLayer ) :
+ m_cont( aCont ), m_layer( aLayer )
+ {
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ if( aItem->ViewIsVisible() )
+ m_cont.push_back( VIEW::LAYER_ITEM_PAIR( aItem, m_layer ) );
+
+ return true;
+ }
+
+ Container& m_cont;
+ int m_layer;
+};
+
+
+int VIEW::Query( const BOX2I& aRect, std::vector<LAYER_ITEM_PAIR>& aResult ) const
+{
+ if( m_orderedLayers.empty() )
+ return 0;
+
+ std::vector<VIEW_LAYER*>::const_reverse_iterator i;
+
+ // execute queries in reverse direction, so that items that are on the top of
+ // the rendering stack are returned first.
+ for( i = m_orderedLayers.rbegin(); i != m_orderedLayers.rend(); ++i )
+ {
+ // ignore layers that do not contain actual items (i.e. the selection box, menus, floats)
+ if( ( *i )->displayOnly )
+ continue;
+
+ queryVisitor<std::vector<LAYER_ITEM_PAIR> > visitor( aResult, ( *i )->id );
+ ( *i )->items->Query( aRect, visitor );
+ }
+
+ return aResult.size();
+}
+
+
+VECTOR2D VIEW::ToWorld( const VECTOR2D& aCoord, bool aAbsolute ) const
+{
+ const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
+
+ if( aAbsolute )
+ return VECTOR2D( matrix * aCoord );
+ else
+ return VECTOR2D( matrix.GetScale().x * aCoord.x, matrix.GetScale().y * aCoord.y );
+}
+
+
+double VIEW::ToWorld( double aSize ) const
+{
+ const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
+
+ return matrix.GetScale().x * aSize;
+}
+
+
+VECTOR2D VIEW::ToScreen( const VECTOR2D& aCoord, bool aAbsolute ) const
+{
+ const MATRIX3x3D& matrix = m_gal->GetWorldScreenMatrix();
+
+ if( aAbsolute )
+ return VECTOR2D( matrix * aCoord );
+ else
+ return VECTOR2D( matrix.GetScale().x * aCoord.x, matrix.GetScale().y * aCoord.y );
+}
+
+
+double VIEW::ToScreen( double aSize ) const
+{
+ const MATRIX3x3D& matrix = m_gal->GetWorldScreenMatrix();
+
+ return matrix.GetScale().x * aSize;
+}
+
+
+void VIEW::CopySettings( const VIEW* aOtherView )
+{
+ wxASSERT_MSG( false, wxT( "This is not implemented" ) );
+}
+
+
+void VIEW::SetGAL( GAL* aGal )
+{
+ m_gal = aGal;
+
+ // clear group numbers, so everything is going to be recached
+ clearGroupCache();
+
+ // every target has to be refreshed
+ MarkDirty();
+
+ // force the new GAL to display the current viewport.
+ SetCenter( m_center );
+ SetScale( m_scale );
+}
+
+
+BOX2D VIEW::GetViewport() const
+{
+ BOX2D rect;
+ VECTOR2D screenSize = m_gal->GetScreenPixelSize();
+
+ rect.SetOrigin( ToWorld( VECTOR2D( 0, 0 ) ) );
+ rect.SetEnd( ToWorld( screenSize ) );
+
+ return rect.Normalize();
+}
+
+
+void VIEW::SetViewport( const BOX2D& aViewport )
+{
+ VECTOR2D ssize = ToWorld( m_gal->GetScreenPixelSize(), false );
+
+ wxASSERT( ssize.x > 0 && ssize.y > 0 );
+
+ VECTOR2D centre = aViewport.Centre();
+ VECTOR2D vsize = aViewport.GetSize();
+ double zoom = 1.0 / std::max( fabs( vsize.x / ssize.x ), fabs( vsize.y / ssize.y ) );
+
+ SetCenter( centre );
+ SetScale( GetScale() * zoom );
+}
+
+
+void VIEW::SetMirror( bool aMirrorX, bool aMirrorY )
+{
+ m_gal->SetFlip( aMirrorX, aMirrorY );
+}
+
+
+void VIEW::SetScale( double aScale, const VECTOR2D& aAnchor )
+{
+ VECTOR2D a = ToScreen( aAnchor );
+
+ if( aScale < m_minScale )
+ m_scale = m_minScale;
+ else if( aScale > m_maxScale )
+ m_scale = m_maxScale;
+ else
+ m_scale = aScale;
+
+ m_gal->SetZoomFactor( m_scale );
+ m_gal->ComputeWorldScreenMatrix();
+
+ VECTOR2D delta = ToWorld( a ) - aAnchor;
+
+ SetCenter( m_center - delta );
+
+ // Redraw everything after the viewport has changed
+ MarkDirty();
+}
+
+
+void VIEW::SetCenter( const VECTOR2D& aCenter )
+{
+ m_center = aCenter;
+
+ if( !m_boundary.Contains( aCenter ) )
+ {
+ if( m_center.x < m_boundary.GetLeft() )
+ m_center.x = m_boundary.GetLeft();
+ else if( aCenter.x > m_boundary.GetRight() )
+ m_center.x = m_boundary.GetRight();
+
+ if( m_center.y < m_boundary.GetTop() )
+ m_center.y = m_boundary.GetTop();
+ else if( m_center.y > m_boundary.GetBottom() )
+ m_center.y = m_boundary.GetBottom();
+ }
+
+ m_gal->SetLookAtPoint( m_center );
+ m_gal->ComputeWorldScreenMatrix();
+
+ // Redraw everything after the viewport has changed
+ MarkDirty();
+}
+
+
+void VIEW::SetLayerOrder( int aLayer, int aRenderingOrder )
+{
+ m_layers[aLayer].renderingOrder = aRenderingOrder;
+
+ sortLayers();
+}
+
+
+int VIEW::GetLayerOrder( int aLayer ) const
+{
+ return m_layers.at( aLayer ).renderingOrder;
+}
+
+
+void VIEW::SortLayers( int aLayers[], int& aCount ) const
+{
+ int maxLay, maxOrd, maxIdx;
+
+ for( int i = 0; i < aCount; ++i )
+ {
+ maxLay = aLayers[i];
+ maxOrd = GetLayerOrder( maxLay );
+ maxIdx = i;
+
+ // Look for the max element in the range (j..aCount)
+ for( int j = i; j < aCount; ++j )
+ {
+ if( maxOrd < GetLayerOrder( aLayers[j] ) )
+ {
+ maxLay = aLayers[j];
+ maxOrd = GetLayerOrder( maxLay );
+ maxIdx = j;
+ }
+ }
+
+ // Swap elements
+ aLayers[maxIdx] = aLayers[i];
+ aLayers[i] = maxLay;
+ }
+}
+
+
+struct VIEW::updateItemsColor
+{
+ updateItemsColor( int aLayer, PAINTER* aPainter, GAL* aGal ) :
+ layer( aLayer ), painter( aPainter ), gal( aGal )
+ {
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ // Obtain the color that should be used for coloring the item
+ const COLOR4D color = painter->GetSettings()->GetColor( aItem, layer );
+ int group = aItem->getGroup( layer );
+
+ if( group >= 0 )
+ gal->ChangeGroupColor( group, color );
+
+ return true;
+ }
+
+ int layer;
+ PAINTER* painter;
+ GAL* gal;
+};
+
+
+void VIEW::UpdateLayerColor( int aLayer )
+{
+ // There is no point in updating non-cached layers
+ if( !IsCached( aLayer ) )
+ return;
+
+ BOX2I r;
+
+ r.SetMaximum();
+
+ updateItemsColor visitor( aLayer, m_painter, m_gal );
+ m_layers[aLayer].items->Query( r, visitor );
+ MarkTargetDirty( m_layers[aLayer].target );
+}
+
+
+void VIEW::UpdateAllLayersColor()
+{
+ BOX2I r;
+
+ r.SetMaximum();
+
+ for( LAYER_MAP_ITER i = m_layers.begin(); i != m_layers.end(); ++i )
+ {
+ VIEW_LAYER* l = &( ( *i ).second );
+
+ // There is no point in updating non-cached layers
+ if( !IsCached( l->id ) )
+ continue;
+
+ updateItemsColor visitor( l->id, m_painter, m_gal );
+ l->items->Query( r, visitor );
+ }
+
+ MarkDirty();
+}
+
+
+struct VIEW::changeItemsDepth
+{
+ changeItemsDepth( int aLayer, int aDepth, GAL* aGal ) :
+ layer( aLayer ), depth( aDepth ), gal( aGal )
+ {
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ int group = aItem->getGroup( layer );
+
+ if( group >= 0 )
+ gal->ChangeGroupDepth( group, depth );
+
+ return true;
+ }
+
+ int layer, depth;
+ GAL* gal;
+};
+
+
+void VIEW::ChangeLayerDepth( int aLayer, int aDepth )
+{
+ // There is no point in updating non-cached layers
+ if( !IsCached( aLayer ) )
+ return;
+
+ BOX2I r;
+
+ r.SetMaximum();
+
+ changeItemsDepth visitor( aLayer, aDepth, m_gal );
+ m_layers[aLayer].items->Query( r, visitor );
+ MarkTargetDirty( m_layers[aLayer].target );
+}
+
+
+int VIEW::GetTopLayer() const
+{
+ if( m_topLayers.size() == 0 )
+ return 0;
+
+ return *m_topLayers.begin();
+}
+
+
+void VIEW::SetTopLayer( int aLayer, bool aEnabled )
+{
+ if( aEnabled )
+ {
+ if( m_topLayers.count( aLayer ) == 1 )
+ return;
+
+ m_topLayers.insert( aLayer );
+
+ // Move the layer closer to front
+ if( m_enableOrderModifier )
+ m_layers[aLayer].renderingOrder += TOP_LAYER_MODIFIER;
+ }
+ else
+ {
+ if( m_topLayers.count( aLayer ) == 0 )
+ return;
+
+ m_topLayers.erase( aLayer );
+
+ // Restore the previous rendering order
+ if( m_enableOrderModifier )
+ m_layers[aLayer].renderingOrder -= TOP_LAYER_MODIFIER;
+ }
+}
+
+
+void VIEW::EnableTopLayer( bool aEnable )
+{
+ if( aEnable == m_enableOrderModifier )
+ return;
+
+ m_enableOrderModifier = aEnable;
+
+ std::set<unsigned int>::iterator it;
+
+ if( aEnable )
+ {
+ for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
+ m_layers[*it].renderingOrder += TOP_LAYER_MODIFIER;
+ }
+ else
+ {
+ for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
+ m_layers[*it].renderingOrder -= TOP_LAYER_MODIFIER;
+ }
+
+ UpdateAllLayersOrder();
+ UpdateAllLayersColor();
+}
+
+
+void VIEW::ClearTopLayers()
+{
+ std::set<unsigned int>::iterator it;
+
+ if( m_enableOrderModifier )
+ {
+ // Restore the previous rendering order for layers that were marked as top
+ for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
+ m_layers[*it].renderingOrder -= TOP_LAYER_MODIFIER;
+ }
+
+ m_topLayers.clear();
+}
+
+
+void VIEW::UpdateAllLayersOrder()
+{
+ sortLayers();
+
+ BOOST_FOREACH( LAYER_MAP::value_type& l, m_layers )
+ {
+ ChangeLayerDepth( l.first, l.second.renderingOrder );
+ }
+
+ MarkDirty();
+}
+
+
+struct VIEW::drawItem
+{
+ drawItem( VIEW* aView, int aLayer ) :
+ view( aView ), layer( aLayer )
+ {
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ // Conditions that have te be fulfilled for an item to be drawn
+ bool drawCondition = aItem->isRenderable() &&
+ aItem->ViewGetLOD( layer ) < view->m_scale;
+ if( !drawCondition )
+ return true;
+
+ view->draw( aItem, layer );
+
+ return true;
+ }
+
+ VIEW* view;
+ int layer, layers[VIEW_MAX_LAYERS];
+};
+
+
+void VIEW::redrawRect( const BOX2I& aRect )
+{
+ BOOST_FOREACH( VIEW_LAYER* l, m_orderedLayers )
+ {
+ if( l->visible && IsTargetDirty( l->target ) && areRequiredLayersEnabled( l->id ) )
+ {
+ drawItem drawFunc( this, l->id );
+
+ m_gal->SetTarget( l->target );
+ m_gal->SetLayerDepth( l->renderingOrder );
+ l->items->Query( aRect, drawFunc );
+ }
+ }
+}
+
+
+void VIEW::draw( VIEW_ITEM* aItem, int aLayer, bool aImmediate )
+{
+ if( IsCached( aLayer ) && !aImmediate )
+ {
+ // Draw using cached information or create one
+ int group = aItem->getGroup( aLayer );
+
+ if( group >= 0 )
+ {
+ m_gal->DrawGroup( group );
+ }
+ else
+ {
+ group = m_gal->BeginGroup();
+ aItem->setGroup( aLayer, group );
+
+ if( !m_painter->Draw( aItem, aLayer ) )
+ aItem->ViewDraw( aLayer, m_gal ); // Alternative drawing method
+
+ m_gal->EndGroup();
+ }
+ }
+ else
+ {
+ // Immediate mode
+ if( !m_painter->Draw( aItem, aLayer ) )
+ aItem->ViewDraw( aLayer, m_gal ); // Alternative drawing method
+ }
+}
+
+
+void VIEW::draw( VIEW_ITEM* aItem, bool aImmediate )
+{
+ int layers[VIEW_MAX_LAYERS], layers_count;
+
+ aItem->ViewGetLayers( layers, layers_count );
+
+ // Sorting is needed for drawing order dependent GALs (like Cairo)
+ SortLayers( layers, layers_count );
+
+ for( int i = 0; i < layers_count; ++i )
+ {
+ m_gal->SetLayerDepth( m_layers.at( layers[i] ).renderingOrder );
+ draw( aItem, layers[i], aImmediate );
+ }
+}
+
+
+void VIEW::draw( VIEW_GROUP* aGroup, bool aImmediate )
+{
+ std::set<VIEW_ITEM*>::const_iterator it;
+
+ for( it = aGroup->Begin(); it != aGroup->End(); ++it )
+ draw( *it, aImmediate );
+}
+
+
+struct VIEW::unlinkItem
+{
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ aItem->m_view = NULL;
+
+ return true;
+ }
+};
+
+
+struct VIEW::recacheItem
+{
+ recacheItem( VIEW* aView, GAL* aGal, int aLayer, bool aImmediately ) :
+ view( aView ), gal( aGal ), layer( aLayer ), immediately( aImmediately )
+ {
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ // Remove previously cached group
+ int group = aItem->getGroup( layer );
+
+ if( group >= 0 )
+ gal->DeleteGroup( group );
+
+ if( immediately )
+ {
+ group = gal->BeginGroup();
+ aItem->setGroup( layer, group );
+
+ if( !view->m_painter->Draw( aItem, layer ) )
+ aItem->ViewDraw( layer, gal ); // Alternative drawing method
+
+ gal->EndGroup();
+ }
+ else
+ {
+ aItem->ViewUpdate( VIEW_ITEM::ALL );
+ aItem->setGroup( layer, -1 );
+ }
+
+ return true;
+ }
+
+ VIEW* view;
+ GAL* gal;
+ int layer;
+ bool immediately;
+};
+
+
+void VIEW::Clear()
+{
+ BOX2I r;
+
+ r.SetMaximum();
+
+ BOOST_FOREACH( VIEW_ITEM* item, m_needsUpdate )
+ item->clearUpdateFlags();
+
+ m_needsUpdate.clear();
+
+ for( LAYER_MAP_ITER i = m_layers.begin(); i != m_layers.end(); ++i )
+ {
+ VIEW_LAYER* l = &( ( *i ).second );
+ unlinkItem v;
+
+ if( m_dynamic )
+ l->items->Query( r, v );
+
+ l->items->RemoveAll();
+ }
+
+ m_gal->ClearCache();
+}
+
+
+void VIEW::ClearTargets()
+{
+ if( IsTargetDirty( TARGET_CACHED ) || IsTargetDirty( TARGET_NONCACHED ) )
+ {
+ // TARGET_CACHED and TARGET_NONCACHED have to be redrawn together, as they contain
+ // layers that rely on each other (eg. netnames are noncached, but tracks - are cached)
+ m_gal->ClearTarget( TARGET_NONCACHED );
+ m_gal->ClearTarget( TARGET_CACHED );
+
+ MarkDirty();
+ }
+
+ if( IsTargetDirty( TARGET_OVERLAY ) )
+ {
+ m_gal->ClearTarget( TARGET_OVERLAY );
+ }
+}
+
+
+void VIEW::Redraw()
+{
+#ifdef PROFILE
+ prof_counter totalRealTime;
+ prof_start( &totalRealTime );
+#endif /* PROFILE */
+
+ VECTOR2D screenSize = m_gal->GetScreenPixelSize();
+ BOX2I rect( ToWorld( VECTOR2D( 0, 0 ) ),
+ ToWorld( screenSize ) - ToWorld( VECTOR2D( 0, 0 ) ) );
+ rect.Normalize();
+
+ redrawRect( rect );
+
+ // All targets were redrawn, so nothing is dirty
+ markTargetClean( TARGET_CACHED );
+ markTargetClean( TARGET_NONCACHED );
+ markTargetClean( TARGET_OVERLAY );
+
+#ifdef PROFILE
+ prof_end( &totalRealTime );
+
+ wxLogDebug( wxT( "Redraw: %.1f ms" ), totalRealTime.msecs() );
+#endif /* PROFILE */
+}
+
+
+const VECTOR2I& VIEW::GetScreenPixelSize() const
+{
+ return m_gal->GetScreenPixelSize();
+}
+
+
+struct VIEW::clearLayerCache
+{
+ clearLayerCache( VIEW* aView ) :
+ view( aView )
+ {
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ aItem->deleteGroups();
+
+ return true;
+ }
+
+ VIEW* view;
+};
+
+
+void VIEW::clearGroupCache()
+{
+ BOX2I r;
+
+ r.SetMaximum();
+ clearLayerCache visitor( this );
+
+ for( LAYER_MAP_ITER i = m_layers.begin(); i != m_layers.end(); ++i )
+ {
+ VIEW_LAYER* l = &( ( *i ).second );
+ l->items->Query( r, visitor );
+ }
+}
+
+
+void VIEW::invalidateItem( VIEW_ITEM* aItem, int aUpdateFlags )
+{
+ // updateLayers updates geometry too, so we do not have to update both of them at the same time
+ if( aUpdateFlags & VIEW_ITEM::LAYERS )
+ updateLayers( aItem );
+ else if( aUpdateFlags & VIEW_ITEM::GEOMETRY )
+ updateBbox( aItem );
+
+ int layers[VIEW_MAX_LAYERS], layers_count;
+ aItem->ViewGetLayers( layers, layers_count );
+
+ // Iterate through layers used by the item and recache it immediately
+ for( int i = 0; i < layers_count; ++i )
+ {
+ int layerId = layers[i];
+
+ if( IsCached( layerId ) )
+ {
+ if( aUpdateFlags & ( VIEW_ITEM::GEOMETRY | VIEW_ITEM::LAYERS ) )
+ updateItemGeometry( aItem, layerId );
+ else if( aUpdateFlags & VIEW_ITEM::COLOR )
+ updateItemColor( aItem, layerId );
+ }
+
+ // Mark those layers as dirty, so the VIEW will be refreshed
+ MarkTargetDirty( m_layers[layerId].target );
+ }
+
+ aItem->clearUpdateFlags();
+}
+
+
+void VIEW::sortLayers()
+{
+ int n = 0;
+
+ m_orderedLayers.resize( m_layers.size() );
+
+ for( LAYER_MAP_ITER i = m_layers.begin(); i != m_layers.end(); ++i )
+ m_orderedLayers[n++] = &i->second;
+
+ sort( m_orderedLayers.begin(), m_orderedLayers.end(), compareRenderingOrder );
+
+ MarkDirty();
+}
+
+
+void VIEW::updateItemColor( VIEW_ITEM* aItem, int aLayer )
+{
+ wxASSERT( (unsigned) aLayer < m_layers.size() );
+ wxASSERT( IsCached( aLayer ) );
+
+ // Obtain the color that should be used for coloring the item on the specific layerId
+ const COLOR4D color = m_painter->GetSettings()->GetColor( aItem, aLayer );
+ int group = aItem->getGroup( aLayer );
+
+ // Change the color, only if it has group assigned
+ if( group >= 0 )
+ m_gal->ChangeGroupColor( group, color );
+}
+
+
+void VIEW::updateItemGeometry( VIEW_ITEM* aItem, int aLayer )
+{
+ wxASSERT( (unsigned) aLayer < m_layers.size() );
+ wxASSERT( IsCached( aLayer ) );
+
+ VIEW_LAYER& l = m_layers.at( aLayer );
+
+ m_gal->SetTarget( l.target );
+ m_gal->SetLayerDepth( l.renderingOrder );
+
+ // Redraw the item from scratch
+ int group = aItem->getGroup( aLayer );
+
+ if( group >= 0 )
+ m_gal->DeleteGroup( group );
+
+ group = m_gal->BeginGroup();
+ aItem->setGroup( aLayer, group );
+
+ if( !m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), aLayer ) )
+ aItem->ViewDraw( aLayer, m_gal ); // Alternative drawing method
+
+ m_gal->EndGroup();
+}
+
+
+void VIEW::updateBbox( VIEW_ITEM* aItem )
+{
+ int layers[VIEW_MAX_LAYERS], layers_count;
+
+ aItem->ViewGetLayers( layers, layers_count );
+
+ for( int i = 0; i < layers_count; ++i )
+ {
+ VIEW_LAYER& l = m_layers[layers[i]];
+ l.items->Remove( aItem );
+ l.items->Insert( aItem );
+ MarkTargetDirty( l.target );
+ }
+}
+
+
+void VIEW::updateLayers( VIEW_ITEM* aItem )
+{
+ int layers[VIEW_MAX_LAYERS], layers_count;
+
+ // Remove the item from previous layer set
+ aItem->getLayers( layers, layers_count );
+
+ for( int i = 0; i < layers_count; ++i )
+ {
+ VIEW_LAYER& l = m_layers[layers[i]];
+ l.items->Remove( aItem );
+ MarkTargetDirty( l.target );
+
+ if( IsCached( l.id ) )
+ {
+ // Redraw the item from scratch
+ int prevGroup = aItem->getGroup( layers[i] );
+
+ if( prevGroup >= 0 )
+ {
+ m_gal->DeleteGroup( prevGroup );
+ aItem->setGroup( l.id, -1 );
+ }
+ }
+ }
+
+ // Add the item to new layer set
+ aItem->ViewGetLayers( layers, layers_count );
+ aItem->saveLayers( layers, layers_count );
+
+ for( int i = 0; i < layers_count; i++ )
+ {
+ VIEW_LAYER& l = m_layers[layers[i]];
+ l.items->Insert( aItem );
+ MarkTargetDirty( l.target );
+ }
+}
+
+
+bool VIEW::areRequiredLayersEnabled( int aLayerId ) const
+{
+ wxASSERT( (unsigned) aLayerId < m_layers.size() );
+
+ std::set<int>::iterator it, it_end;
+
+ for( it = m_layers.at( aLayerId ).requiredLayers.begin(),
+ it_end = m_layers.at( aLayerId ).requiredLayers.end(); it != it_end; ++it )
+ {
+ // That is enough if just one layer is not enabled
+ if( !m_layers.at( *it ).visible || !areRequiredLayersEnabled( *it ) )
+ return false;
+ }
+
+ return true;
+}
+
+
+void VIEW::RecacheAllItems( bool aImmediately )
+{
+ BOX2I r;
+
+ r.SetMaximum();
+
+#ifdef PROFILE
+ prof_counter totalRealTime;
+ prof_start( &totalRealTime );
+#endif /* PROFILE */
+
+ for( LAYER_MAP_ITER i = m_layers.begin(); i != m_layers.end(); ++i )
+ {
+ VIEW_LAYER* l = &( ( *i ).second );
+
+ if( IsCached( l->id ) )
+ {
+ m_gal->SetTarget( l->target );
+ m_gal->SetLayerDepth( l->renderingOrder );
+ recacheItem visitor( this, m_gal, l->id, aImmediately );
+ l->items->Query( r, visitor );
+ MarkTargetDirty( l->target );
+ }
+ }
+
+#ifdef PROFILE
+ prof_end( &totalRealTime );
+
+ wxLogDebug( wxT( "RecacheAllItems::immediately: %u %.1f ms" ),
+ aImmediately, totalRealTime.msecs() );
+#endif /* PROFILE */
+}
+
+
+void VIEW::UpdateItems()
+{
+ // Update items that need this
+ BOOST_FOREACH( VIEW_ITEM* item, m_needsUpdate )
+ {
+ assert( item->viewRequiredUpdate() != VIEW_ITEM::NONE );
+
+ invalidateItem( item, item->viewRequiredUpdate() );
+ }
+
+ m_needsUpdate.clear();
+}
+
+
+struct VIEW::extentsVisitor
+{
+ BOX2I extents;
+ bool first;
+
+ extentsVisitor()
+ {
+ first = true;
+ }
+
+ bool operator()( VIEW_ITEM* aItem )
+ {
+ if( first )
+ extents = aItem->ViewBBox();
+ else
+ extents.Merge ( aItem->ViewBBox() );
+ return false;
+ }
+};
+
+
+const BOX2I VIEW::CalculateExtents()
+{
+ extentsVisitor v;
+ BOX2I fullScene;
+ fullScene.SetMaximum();
+
+ BOOST_FOREACH( VIEW_LAYER* l, m_orderedLayers )
+ {
+ l->items->Query( fullScene, v );
+ }
+
+ return v.extents;
+}
+
+
+const int VIEW::TOP_LAYER_MODIFIER = -VIEW_MAX_LAYERS;
diff --git a/common/view/view_controls.cpp b/common/view/view_controls.cpp
new file mode 100644
index 0000000..850cf0b
--- /dev/null
+++ b/common/view/view_controls.cpp
@@ -0,0 +1,47 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2013-2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <view/view.h>
+#include <view/view_controls.h>
+#include <gal/graphics_abstraction_layer.h>
+
+using namespace KIGFX;
+
+void VIEW_CONTROLS::ShowCursor( bool aEnabled )
+{
+ m_view->GetGAL()->SetCursorEnabled( aEnabled );
+}
+
+
+void VIEW_CONTROLS::Reset()
+{
+ SetSnapping( false );
+ SetAutoPan( false );
+ ForceCursorPosition( false );
+ ShowCursor( false );
+ CaptureCursor( false );
+ SetGrabMouse( false );
+}
diff --git a/common/view/view_group.cpp b/common/view/view_group.cpp
new file mode 100644
index 0000000..1459954
--- /dev/null
+++ b/common/view/view_group.cpp
@@ -0,0 +1,162 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/**
+ * @file view_group.cpp
+ * @brief VIEW_GROUP extends VIEW_ITEM by possibility of grouping items into a single object.
+ * VIEW_GROUP does not take over ownership of the held items. The main purpose of this class is
+ * to group items and draw them on a single layer (in particular the overlay).
+ */
+
+#include <set>
+#include <algorithm>
+#include <view/view_group.h>
+#include <view/view.h>
+#include <painter.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <boost/foreach.hpp>
+#include <layers_id_colors_and_visibility.h>
+
+using namespace KIGFX;
+
+VIEW_GROUP::VIEW_GROUP( VIEW* aView ) :
+ m_layer( ITEM_GAL_LAYER( GP_OVERLAY ) )
+{
+ m_view = aView;
+}
+
+
+VIEW_GROUP::~VIEW_GROUP()
+{
+}
+
+
+void VIEW_GROUP::Add( VIEW_ITEM* aItem )
+{
+ m_items.insert( aItem );
+}
+
+
+void VIEW_GROUP::Remove( VIEW_ITEM* aItem )
+{
+ m_items.erase( aItem );
+}
+
+
+void VIEW_GROUP::Clear()
+{
+ m_items.clear();
+}
+
+
+unsigned int VIEW_GROUP::GetSize() const
+{
+ return m_items.size();
+}
+
+
+const BOX2I VIEW_GROUP::ViewBBox() const
+{
+ BOX2I maxBox;
+
+ maxBox.SetMaximum();
+ return maxBox;
+}
+
+
+void VIEW_GROUP::ViewDraw( int aLayer, GAL* aGal ) const
+{
+ PAINTER* painter = m_view->GetPainter();
+
+ // Draw all items immediately (without caching)
+ BOOST_FOREACH( VIEW_ITEM* item, m_items )
+ {
+ aGal->PushDepth();
+
+ int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
+ item->ViewGetLayers( layers, layers_count );
+ m_view->SortLayers( layers, layers_count );
+
+ for( int i = 0; i < layers_count; i++ )
+ {
+ if( m_view->IsCached( layers[i] ) && m_view->IsLayerVisible( layers[i] ) )
+ {
+ aGal->AdvanceDepth();
+
+ if( !painter->Draw( item, layers[i] ) )
+ item->ViewDraw( layers[i], aGal ); // Alternative drawing method
+ }
+ }
+
+ aGal->PopDepth();
+ }
+}
+
+
+void VIEW_GROUP::ViewGetLayers( int aLayers[], int& aCount ) const
+{
+ // Everything is displayed on a single layer
+ aLayers[0] = m_layer;
+ aCount = 1;
+}
+
+
+void VIEW_GROUP::FreeItems()
+{
+ BOOST_FOREACH( VIEW_ITEM* item, m_items )
+ {
+ delete item;
+ }
+ m_items.clear();
+}
+
+
+void VIEW_GROUP::ItemsSetVisibility( bool aVisible )
+{
+ std::set<VIEW_ITEM*>::const_iterator it, it_end;
+
+ for( it = m_items.begin(), it_end = m_items.end(); it != it_end; ++it )
+ (*it)->ViewSetVisible( aVisible );
+}
+
+
+void VIEW_GROUP::ItemsViewUpdate( VIEW_ITEM::VIEW_UPDATE_FLAGS aFlags )
+{
+ std::set<VIEW_ITEM*>::const_iterator it, it_end;
+
+ for( it = m_items.begin(), it_end = m_items.end(); it != it_end; ++it )
+ (*it)->ViewUpdate( aFlags );
+}
+
+
+void VIEW_GROUP::updateBbox()
+{
+ // Save the used VIEW, as it used nulled during Remove()
+ VIEW* view = m_view;
+
+ // Reinsert the group, so the bounding box can be updated
+ view->Remove( this );
+ view->Add( this );
+}
diff --git a/common/view/view_item.cpp b/common/view/view_item.cpp
new file mode 100644
index 0000000..f1713f3
--- /dev/null
+++ b/common/view/view_item.cpp
@@ -0,0 +1,109 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <gal/definitions.h>
+
+#include <view/view_item.h>
+#include <view/view.h>
+
+using namespace KIGFX;
+
+void VIEW_ITEM::ViewRelease()
+{
+ if( m_view && m_view->IsDynamic() )
+ m_view->Remove( this );
+}
+
+
+void VIEW_ITEM::getLayers( int* aLayers, int& aCount ) const
+{
+ int* layersPtr = aLayers;
+
+ for( unsigned int i = 0; i < m_layers.size(); ++i )
+ {
+ if( m_layers[i] )
+ *layersPtr++ = i;
+ }
+
+ aCount = m_layers.count();
+}
+
+
+int VIEW_ITEM::getGroup( int aLayer ) const
+{
+ for( int i = 0; i < m_groupsSize; ++i )
+ {
+ if( m_groups[i].first == aLayer )
+ return m_groups[i].second;
+ }
+
+ return -1;
+}
+
+
+std::vector<int> VIEW_ITEM::getAllGroups() const
+{
+ std::vector<int> groups( m_groupsSize );
+
+ for( int i = 0; i < m_groupsSize; ++i )
+ {
+ groups[i] = m_groups[i].second;
+ }
+
+ return groups;
+}
+
+
+void VIEW_ITEM::setGroup( int aLayer, int aId )
+{
+ // Look if there is already an entry for the layer
+ for( int i = 0; i < m_groupsSize; ++i )
+ {
+ if( m_groups[i].first == aLayer )
+ {
+ m_groups[i].second = aId;
+ return;
+ }
+ }
+
+ // If there was no entry for the given layer - create one
+ GroupPair* newGroups = new GroupPair[m_groupsSize + 1];
+
+ if( m_groupsSize > 0 )
+ {
+ std::copy( m_groups, m_groups + m_groupsSize, newGroups );
+ delete[] m_groups;
+ }
+
+ m_groups = newGroups;
+ newGroups[m_groupsSize++] = GroupPair( aLayer, aId );
+}
+
+
+void VIEW_ITEM::deleteGroups()
+{
+ delete[] m_groups;
+ m_groups = NULL;
+ m_groupsSize = 0;
+}
diff --git a/common/view/wx_view_controls.cpp b/common/view/wx_view_controls.cpp
new file mode 100644
index 0000000..ac6c778
--- /dev/null
+++ b/common/view/wx_view_controls.cpp
@@ -0,0 +1,491 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2013-2015 CERN
+ * Copyright (C) 2012-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/wx.h>
+
+#include <view/view.h>
+#include <view/wx_view_controls.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <tool/tool_dispatcher.h>
+
+using namespace KIGFX;
+
+const wxEventType WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE = wxNewEventType();
+
+WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxScrolledCanvas* aParentPanel ) :
+ VIEW_CONTROLS( aView ), m_state( IDLE ), m_parentPanel( aParentPanel ), m_scrollScale( 1.0, 1.0 )
+{
+ m_parentPanel->Connect( wxEVT_MOTION,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onMotion ), NULL, this );
+#ifdef USE_OSX_MAGNIFY_EVENT
+ m_parentPanel->Connect( wxEVT_MAGNIFY,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onMagnify ), NULL, this );
+#endif
+ m_parentPanel->Connect( wxEVT_MOUSEWHEEL,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onWheel ), NULL, this );
+ m_parentPanel->Connect( wxEVT_MIDDLE_UP,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
+ m_parentPanel->Connect( wxEVT_MIDDLE_DOWN,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
+ m_parentPanel->Connect( wxEVT_LEFT_UP,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
+ m_parentPanel->Connect( wxEVT_LEFT_DOWN,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this );
+#if defined _WIN32 || defined _WIN64
+ m_parentPanel->Connect( wxEVT_ENTER_WINDOW,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onEnter ), NULL, this );
+#endif
+ m_parentPanel->Connect( wxEVT_LEAVE_WINDOW,
+ wxMouseEventHandler( WX_VIEW_CONTROLS::onLeave ), NULL, this );
+ m_parentPanel->Connect( wxEVT_SCROLLWIN_THUMBTRACK,
+ wxScrollWinEventHandler( WX_VIEW_CONTROLS::onScroll ), NULL, this );
+
+ m_panTimer.SetOwner( this );
+ this->Connect( wxEVT_TIMER,
+ wxTimerEventHandler( WX_VIEW_CONTROLS::onTimer ), NULL, this );
+}
+
+
+void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& aEvent )
+{
+ bool isAutoPanning = false;
+
+ if( m_autoPanEnabled )
+ isAutoPanning = handleAutoPanning( aEvent );
+
+ if( !isAutoPanning && aEvent.Dragging() )
+ {
+ if( m_state == DRAG_PANNING )
+ {
+ VECTOR2D d = m_dragStartPoint - VECTOR2D( aEvent.GetX(), aEvent.GetY() );
+ VECTOR2D delta = m_view->ToWorld( d, false );
+
+ m_view->SetCenter( m_lookStartPoint + delta );
+ aEvent.StopPropagation();
+ }
+ }
+
+ aEvent.Skip();
+}
+
+
+void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& aEvent )
+{
+ const double wheelPanSpeed = 0.001;
+
+ if( aEvent.ControlDown() || aEvent.ShiftDown() || m_enableMousewheelPan )
+ {
+ // Scrolling
+ VECTOR2D scrollVec = m_view->ToWorld( m_view->GetScreenPixelSize(), false ) *
+ ( (double) aEvent.GetWheelRotation() * wheelPanSpeed );
+ int axis = aEvent.GetWheelAxis();
+ double scrollX = 0.0;
+ double scrollY = 0.0;
+
+ if ( m_enableMousewheelPan )
+ {
+ if ( axis == wxMOUSE_WHEEL_HORIZONTAL )
+ scrollX = scrollVec.x;
+ else
+ scrollY = -scrollVec.y;
+ }
+ else
+ {
+ if ( aEvent.ControlDown() )
+ scrollX = -scrollVec.x;
+ else
+ scrollY = -scrollVec.y;
+ }
+
+ VECTOR2D delta( scrollX, scrollY );
+
+ m_view->SetCenter( m_view->GetCenter() + delta );
+ }
+ else
+ {
+ // Zooming
+ wxLongLong timeStamp = wxGetLocalTimeMillis();
+ double timeDiff = timeStamp.ToDouble() - m_timeStamp.ToDouble();
+ int rotation = aEvent.GetWheelRotation();
+ double zoomScale;
+
+#ifdef __WXMAC__
+ // The following is to support Apple pointer devices (MagicMouse &
+ // Macbook touchpad), which send events more frequently, but with smaller
+ // wheel rotation.
+ //
+ // It should not break other platforms, but I prefer to be safe than
+ // sorry. If you find a device that behaves in the same way on another
+ // platform, feel free to remove #ifdef directives.
+ if( timeDiff > 0 && timeDiff < 100 && std::abs( rotation ) < 20 )
+ {
+ aEvent.Skip();
+ return;
+ }
+#endif
+
+ m_timeStamp = timeStamp;
+
+ // Set scaling speed depending on scroll wheel event interval
+ if( timeDiff < 500 && timeDiff > 0 )
+ {
+ zoomScale = 2.05 - timeDiff / 500;
+
+ if( rotation < 0 )
+ zoomScale = 1.0 / zoomScale;
+ }
+ else
+ {
+ zoomScale = ( rotation > 0 ) ? 1.05 : 0.95;
+ }
+
+ if( IsCursorWarpingEnabled() )
+ {
+ CenterOnCursor();
+ m_view->SetScale( m_view->GetScale() * zoomScale );
+ }
+ else
+ {
+ VECTOR2D anchor = m_view->ToWorld( VECTOR2D( aEvent.GetX(), aEvent.GetY() ) );
+ m_view->SetScale( m_view->GetScale() * zoomScale, anchor );
+ }
+ }
+
+ aEvent.Skip();
+}
+
+
+#ifdef USE_OSX_MAGNIFY_EVENT
+void WX_VIEW_CONTROLS::onMagnify( wxMouseEvent& aEvent )
+{
+ // Scale based on the magnification from our underlying magnification event.
+ VECTOR2D anchor = m_view->ToWorld( VECTOR2D( aEvent.GetX(), aEvent.GetY() ) );
+ m_view->SetScale( m_view->GetScale() * ( aEvent.GetMagnification() + 1.0f ), anchor );
+
+ aEvent.Skip();
+}
+#endif
+
+
+void WX_VIEW_CONTROLS::onButton( wxMouseEvent& aEvent )
+{
+ switch( m_state )
+ {
+ case IDLE:
+ case AUTO_PANNING:
+ if( aEvent.MiddleDown() )
+ {
+ m_dragStartPoint = VECTOR2D( aEvent.GetX(), aEvent.GetY() );
+ m_lookStartPoint = m_view->GetCenter();
+ m_state = DRAG_PANNING;
+ }
+
+ if( aEvent.LeftUp() )
+ m_state = IDLE; // Stop autopanning when user release left mouse button
+
+ break;
+
+ case DRAG_PANNING:
+ if( aEvent.MiddleUp() )
+ m_state = IDLE;
+
+ break;
+ }
+
+ aEvent.Skip();
+}
+
+
+void WX_VIEW_CONTROLS::onEnter( wxMouseEvent& aEvent )
+{
+ m_parentPanel->SetFocus();
+}
+
+
+void WX_VIEW_CONTROLS::onLeave( wxMouseEvent& aEvent )
+{
+ if( m_cursorCaptured )
+ {
+ bool warp = false;
+ int x = aEvent.GetX();
+ int y = aEvent.GetY();
+ wxSize parentSize = m_parentPanel->GetClientSize();
+
+ if( x < 0 )
+ {
+ x = 0;
+ warp = true;
+ }
+ else if( x >= parentSize.x )
+ {
+ x = parentSize.x - 1;
+ warp = true;
+ }
+
+ if( y < 0 )
+ {
+ y = 0;
+ warp = true;
+ }
+ else if( y >= parentSize.y )
+ {
+ y = parentSize.y - 1;
+ warp = true;
+ }
+
+ if( warp )
+ m_parentPanel->WarpPointer( x, y );
+ }
+}
+
+
+void WX_VIEW_CONTROLS::onTimer( wxTimerEvent& aEvent )
+{
+ switch( m_state )
+ {
+ case AUTO_PANNING:
+ {
+#if wxCHECK_VERSION( 3, 0, 0 )
+ if( !m_parentPanel->HasFocus() )
+ break;
+#endif
+
+ double borderSize = std::min( m_autoPanMargin * m_view->GetScreenPixelSize().x,
+ m_autoPanMargin * m_view->GetScreenPixelSize().y );
+
+ VECTOR2D dir( m_panDirection );
+
+ if( dir.EuclideanNorm() > borderSize )
+ dir = dir.Resize( borderSize );
+
+ dir = m_view->ToWorld( dir, false );
+ m_view->SetCenter( m_view->GetCenter() + dir * m_autoPanSpeed );
+
+ // Notify tools that the cursor position has changed in the world coordinates
+ wxMouseEvent moveEvent( EVT_REFRESH_MOUSE );
+
+ // Set the modifiers state
+#if wxCHECK_VERSION( 3, 0, 0 )
+ moveEvent.SetControlDown( wxGetKeyState( WXK_CONTROL ) );
+ moveEvent.SetShiftDown( wxGetKeyState( WXK_SHIFT ) );
+ moveEvent.SetAltDown( wxGetKeyState( WXK_ALT ) );
+#else
+ // wx <3.0 do not have accessors, but the fields are exposed
+ moveEvent.m_controlDown = wxGetKeyState( WXK_CONTROL );
+ moveEvent.m_shiftDown = wxGetKeyState( WXK_SHIFT );
+ moveEvent.m_altDown = wxGetKeyState( WXK_ALT );
+#endif
+
+ wxPostEvent( m_parentPanel, moveEvent );
+ }
+ break;
+
+ case IDLE: // Just remove unnecessary warnings
+ case DRAG_PANNING:
+ break;
+ }
+}
+
+
+void WX_VIEW_CONTROLS::onScroll( wxScrollWinEvent& aEvent )
+{
+ VECTOR2D center = m_view->GetCenter();
+ const BOX2I& boundary = m_view->GetBoundary();
+
+ if( aEvent.GetOrientation() == wxHORIZONTAL )
+ center.x = (double) aEvent.GetPosition() * boundary.GetWidth() / m_scrollScale.x + boundary.GetLeft();
+ else if( aEvent.GetOrientation() == wxVERTICAL )
+ center.y = (double) aEvent.GetPosition() * boundary.GetHeight() / m_scrollScale.y + boundary.GetTop();
+
+ m_view->SetCenter( center );
+ m_parentPanel->Refresh();
+}
+
+
+void WX_VIEW_CONTROLS::SetGrabMouse( bool aEnabled )
+{
+ if( aEnabled && !m_grabMouse )
+ m_parentPanel->CaptureMouse();
+ else if( !aEnabled && m_grabMouse )
+ m_parentPanel->ReleaseMouse();
+
+ VIEW_CONTROLS::SetGrabMouse( aEnabled );
+}
+
+
+VECTOR2I WX_VIEW_CONTROLS::GetMousePosition() const
+{
+ wxPoint msp = wxGetMousePosition();
+ wxPoint winp = m_parentPanel->GetScreenPosition();
+
+ return VECTOR2I( msp.x - winp.x, msp.y - winp.y );
+}
+
+
+VECTOR2D WX_VIEW_CONTROLS::GetCursorPosition() const
+{
+ if( m_forceCursorPosition )
+ {
+ return m_forcedPosition;
+ }
+ else
+ {
+ VECTOR2D mousePosition = GetMousePosition();
+
+ if( m_snappingEnabled )
+ return m_view->GetGAL()->GetGridPoint( m_view->ToWorld( mousePosition ) );
+ else
+ return m_view->ToWorld( mousePosition );
+ }
+}
+
+
+void WX_VIEW_CONTROLS::WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates,
+ bool aWarpView ) const
+{
+ if( aWorldCoordinates )
+ {
+ const VECTOR2I& screenSize = m_view->GetGAL()->GetScreenPixelSize();
+ BOX2I screen( VECTOR2I( 0, 0 ), screenSize );
+ VECTOR2D screenPos = m_view->ToScreen( aPosition );
+
+ if( !screen.Contains( screenPos ) )
+ {
+ if( aWarpView )
+ {
+ m_view->SetCenter( aPosition );
+ m_parentPanel->WarpPointer( screenSize.x / 2, screenSize.y / 2 );
+ }
+ }
+ else
+ {
+ m_parentPanel->WarpPointer( screenPos.x, screenPos.y );
+ }
+ }
+ else
+ {
+ m_parentPanel->WarpPointer( aPosition.x, aPosition.y );
+ }
+}
+
+
+void WX_VIEW_CONTROLS::CenterOnCursor() const
+{
+ const VECTOR2I& screenSize = m_view->GetGAL()->GetScreenPixelSize();
+ VECTOR2I screenCenter( screenSize / 2 );
+
+ if( GetMousePosition() != screenCenter )
+ {
+ m_view->SetCenter( GetCursorPosition() );
+ m_parentPanel->WarpPointer( KiROUND( screenSize.x / 2 ), KiROUND( screenSize.y / 2 ) );
+ }
+}
+
+
+bool WX_VIEW_CONTROLS::handleAutoPanning( const wxMouseEvent& aEvent )
+{
+ VECTOR2D p( aEvent.GetX(), aEvent.GetY() );
+
+ // Compute areas where autopanning is active
+ double borderStart = std::min( m_autoPanMargin * m_view->GetScreenPixelSize().x,
+ m_autoPanMargin * m_view->GetScreenPixelSize().y );
+ double borderEndX = m_view->GetScreenPixelSize().x - borderStart;
+ double borderEndY = m_view->GetScreenPixelSize().y - borderStart;
+
+ if( p.x < borderStart )
+ m_panDirection.x = -( borderStart - p.x );
+ else if( p.x > borderEndX )
+ m_panDirection.x = ( p.x - borderEndX );
+ else
+ m_panDirection.x = 0;
+
+ if( p.y < borderStart )
+ m_panDirection.y = -( borderStart - p.y );
+ else if( p.y > borderEndY )
+ m_panDirection.y = ( p.y - borderEndY );
+ else
+ m_panDirection.y = 0;
+
+ bool borderHit = ( m_panDirection.x != 0 || m_panDirection.y != 0 );
+
+ switch( m_state )
+ {
+ case AUTO_PANNING:
+ if( !borderHit )
+ {
+ m_panTimer.Stop();
+ m_state = IDLE;
+
+ return false;
+ }
+
+ return true;
+ break;
+
+ case IDLE:
+ if( borderHit )
+ {
+ m_state = AUTO_PANNING;
+ m_panTimer.Start( (int) ( 1000.0 / 60.0 ) );
+
+ return true;
+ }
+
+ return false;
+ break;
+
+ case DRAG_PANNING:
+ return false;
+ }
+
+ wxASSERT_MSG( false, wxT( "This line should never be reached" ) );
+ return false; // Should not be reached, just avoid the compiler warnings..
+}
+
+
+void WX_VIEW_CONTROLS::UpdateScrollbars()
+{
+ const BOX2D viewport = m_view->GetViewport();
+ const BOX2I& boundary = m_view->GetBoundary();
+
+ m_scrollScale.x = 2e3 * boundary.GetWidth() / viewport.GetWidth();
+ m_scrollScale.y = 2e3 * boundary.GetHeight() / viewport.GetHeight();
+
+ // Another example of wxWidgets being broken by design: scroll position is determined by the
+ // left (or top, if vertical) edge of the slider. Fortunately, slider size seems to be constant
+ // (at least for wxGTK 3.0), so we have to add its size to allow user to scroll the workspace
+ // till the end.
+ m_parentPanel->SetScrollbars( 1, 1,
+#ifdef __LINUX__
+ m_scrollScale.x + 1623, m_scrollScale.y + 1623,
+#else
+ m_scrollScale.x, m_scrollScale.y,
+#endif
+ ( viewport.Centre().x - boundary.GetLeft() ) / boundary.GetWidth() * m_scrollScale.x,
+ ( viewport.Centre().y - boundary.GetTop() ) / boundary.GetHeight() * m_scrollScale.y );
+}
diff --git a/common/wildcards_and_files_ext.cpp b/common/wildcards_and_files_ext.cpp
new file mode 100644
index 0000000..80326d3
--- /dev/null
+++ b/common/wildcards_and_files_ext.cpp
@@ -0,0 +1,104 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2008-2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file wildcards_and_files_ext.cpp
+ */
+#include <wildcards_and_files_ext.h>
+
+/**
+ * file extensions and wildcards used in kicad.
+ */
+
+const wxString SchematicSymbolFileExtension( wxT( "sym" ) );
+const wxString SchematicLibraryFileExtension( wxT( "lib" ) );
+const wxString SchematicBackupFileExtension( wxT( "bak" ) );
+
+const wxString VrmlFileExtension( wxT( "wrl" ) );
+
+const wxString ProjectFileExtension( wxT( "pro" ) );
+const wxString SchematicFileExtension( wxT( "sch" ) );
+const wxString NetlistFileExtension( wxT( "net" ) );
+const wxString ComponentFileExtension( wxT( "cmp" ) );
+const wxString GerberFileExtension( wxT( ".((gbr|(gb|gt)[alops])|pho)" ) );
+const wxString HtmlFileExtension( wxT( "html" ) );
+
+const wxString LegacyPcbFileExtension( wxT( "brd" ) );
+const wxString KiCadPcbFileExtension( wxT( "kicad_pcb" ) );
+const wxString PageLayoutDescrFileExtension( wxT( "kicad_wks" ) );
+
+const wxString PdfFileExtension( wxT( "pdf" ) );
+const wxString MacrosFileExtension( wxT( "mcr" ) );
+const wxString DrillFileExtension( wxT( "drl" ) );
+const wxString SVGFileExtension( wxT( "svg" ) );
+const wxString ReportFileExtension( wxT( "rpt" ) );
+const wxString FootprintPlaceFileExtension( wxT( "pos" ) );
+const wxString KiCadLib3DShapesPathExtension( wxT( "3dshapes" ) ); ///< 3D shapes default libpath
+
+const wxString KiCadFootprintLibPathExtension( wxT( "pretty" ) ); ///< KICAD PLUGIN libpath
+const wxString LegacyFootprintLibPathExtension( wxT( "mod" ) );
+const wxString EagleFootprintLibPathExtension( wxT( "lbr" ) );
+
+const wxString KiCadFootprintFileExtension( wxT( "kicad_mod" ) );
+const wxString GedaPcbFootprintLibFileExtension( wxT( "fp" ) );
+
+// These strings are wildcards for file selection dialogs.
+// Because these are static, one should explicitly call wxGetTranslation
+// to display them as translated.
+const wxString SchematicSymbolFileWildcard( _( "KiCad drawing symbol file (*.sym)|*.sym" ) );
+const wxString SchematicLibraryFileWildcard( _( "KiCad component library file (*.lib)|*.lib" ) );
+const wxString ProjectFileWildcard( _( "KiCad project files (*.pro)|*.pro" ) );
+const wxString SchematicFileWildcard( _( "KiCad schematic files (*.sch)|*.sch" ) );
+const wxString NetlistFileWildcard( _( "KiCad netlist files (*.net)|*.net" ) );
+const wxString GerberFileWildcard( _( "Gerber files (*.pho)|*.pho" ) );
+const wxString LegacyPcbFileWildcard( _( "KiCad printed circuit board files (*.brd)|*.brd" ) );
+const wxString EaglePcbFileWildcard( _( "Eagle ver. 6.x XML PCB files (*.brd)|*.brd" ) );
+const wxString PCadPcbFileWildcard( _( "P-Cad 200x ASCII PCB files (*.pcb)|*.pcb" ) );
+const wxString PcbFileWildcard( _( "KiCad s-expr printed circuit board files (*.kicad_pcb)|*.kicad_pcb" ) );
+const wxString KiCadFootprintLibFileWildcard( _( "KiCad footprint s-expre file (*.kicad_mod)|*.kicad_mod" ) );
+const wxString KiCadFootprintLibPathWildcard( _( "KiCad footprint s-expre library path (*.pretty)|*.pretty" ) );
+const wxString LegacyFootprintLibPathWildcard( _( "Legacy footprint library file (*.mod)|*.mod" ) );
+const wxString EagleFootprintLibPathWildcard( _( "Eagle ver. 6.x XML library files (*.lbr)|*.lbr" ) );
+const wxString GedaPcbFootprintLibFileWildcard( _( "Geda PCB footprint library file (*.fp)|*.fp" ) );
+const wxString MacrosFileWildcard( _( "KiCad recorded macros (*.mcr)|*.mcr" ) );
+const wxString ComponentFileExtensionWildcard( _( "Component-footprint link file (*.cmp)|*cmp" ) );
+const wxString PageLayoutDescrFileWildcard( _( "Page layout descr file (*.kicad_wks)|*kicad_wks" ) );
+// generic:
+const wxString AllFilesWildcard( _( "All files (*)|*" ) );
+
+// Wildcard for cvpcb component to footprint link file
+const wxString ComponentFileWildcard( _( "KiCad cmp/footprint link files (*.cmp)|*.cmp" ) );
+
+// Wildcard for reports and fabrication documents
+const wxString DrillFileWildcard( _( "Drill files (*.drl)|*.drl;*.DRL" ) );
+const wxString SVGFileWildcard( _( "SVG files (*.svg)|*.svg;*.SVG" ) );
+const wxString HtmlFileWildcard( _( "HTML files (*.html)|*.htm;*.html" ) );
+const wxString PdfFileWildcard( _( "Portable document format files (*.pdf)|*.pdf" ) );
+const wxString PSFileWildcard( _( "PostScript files (.ps)|*.ps" ) );
+const wxString ReportFileWildcard = _( "Report files (*.rpt)|*.rpt" );
+const wxString FootprintPlaceFileWildcard = _( "Footprint place files (*.pos)|*.pos" );
+const wxString Shapes3DFileWildcard( _( "Vrml and x3d files (*.wrl *.x3d)|*.wrl;*.x3d" ) );
+const wxString IDF3DFileWildcard( _( "IDFv3 component files (*.idf)|*.idf" ) );
+const wxString TextWildcard( _( "Text files (*.txt)|*.txt" ) );
diff --git a/common/worksheet.cpp b/common/worksheet.cpp
new file mode 100644
index 0000000..36cc119
--- /dev/null
+++ b/common/worksheet.cpp
@@ -0,0 +1,280 @@
+/**
+ * @file worksheet.cpp
+ * @brief Common code to draw the title block and frame references
+ * @note it should include title_block_shape_gost.h or title_block_shape.h
+ * which defines most of draw shapes, and contains a part of the draw code
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <pgm_base.h>
+#include <gr_basic.h>
+#include <common.h>
+#include <class_drawpanel.h>
+#include <class_base_screen.h>
+#include <drawtxt.h>
+#include <draw_frame.h>
+#include <worksheet.h>
+#include <class_title_block.h>
+#include <build_version.h>
+
+#include <worksheet_shape_builder.h>
+
+static const wxString productName = wxT( "KiCad E.D.A. " );
+
+void DrawPageLayout( wxDC* aDC, EDA_RECT* aClipBox,
+ const PAGE_INFO& aPageInfo,
+ const wxString &aFullSheetName,
+ const wxString& aFileName,
+ TITLE_BLOCK& aTitleBlock,
+ int aSheetCount, int aSheetNumber,
+ int aPenWidth, double aScalar,
+ EDA_COLOR_T aColor, EDA_COLOR_T aAltColor )
+{
+ WS_DRAW_ITEM_LIST drawList;
+
+ drawList.SetPenSize( aPenWidth );
+ drawList.SetMilsToIUfactor( aScalar );
+ drawList.SetSheetNumber( aSheetNumber );
+ drawList.SetSheetCount( aSheetCount );
+ drawList.SetFileName( aFileName );
+ drawList.SetSheetName( aFullSheetName );
+
+ drawList.BuildWorkSheetGraphicList( aPageInfo,
+ aTitleBlock, aColor, aAltColor );
+
+ // Draw item list
+ drawList.Draw( aClipBox, aDC );
+}
+
+
+void EDA_DRAW_FRAME::DrawWorkSheet( wxDC* aDC, BASE_SCREEN* aScreen, int aLineWidth,
+ double aScalar, const wxString &aFilename )
+{
+ if( !m_showBorderAndTitleBlock )
+ return;
+
+ const PAGE_INFO& pageInfo = GetPageSettings();
+ wxSize pageSize = pageInfo.GetSizeMils();
+
+ // if not printing, draw the page limits:
+ if( !aScreen->m_IsPrinting && m_showPageLimits )
+ {
+ GRSetDrawMode( aDC, GR_COPY );
+ GRRect( m_canvas->GetClipBox(), aDC, 0, 0,
+ pageSize.x * aScalar, pageSize.y * aScalar, aLineWidth,
+ m_drawBgColor == WHITE ? LIGHTGRAY : DARKDARKGRAY );
+ }
+
+ TITLE_BLOCK t_block = GetTitleBlock();
+ EDA_COLOR_T color = RED;
+
+ wxPoint origin = aDC->GetDeviceOrigin();
+
+ if( aScreen->m_IsPrinting && origin.y > 0 )
+ {
+ aDC->SetDeviceOrigin( 0, 0 );
+ aDC->SetAxisOrientation( true, false );
+ }
+
+ DrawPageLayout( aDC, m_canvas->GetClipBox(), pageInfo,
+ GetScreenDesc(), aFilename, t_block,
+ aScreen->m_NumberOfScreens, aScreen->m_ScreenNumber,
+ aLineWidth, aScalar, color, color );
+
+ if( aScreen->m_IsPrinting && origin.y > 0 )
+ {
+ aDC->SetDeviceOrigin( origin.x, origin.y );
+ aDC->SetAxisOrientation( true, true );
+ }
+}
+
+
+wxString EDA_DRAW_FRAME::GetScreenDesc() const
+{
+ // Virtual function. In basic class, returns
+ // an empty string.
+ return wxEmptyString;
+}
+
+// returns the full text corresponding to the aTextbase,
+// after replacing format symbols by the corresponding value
+wxString WS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase )
+{
+ wxString msg;
+
+ /* Known formats
+ * %% = replaced by %
+ * %K = Kicad version
+ * %Z = paper format name (A4, USLetter)
+ * %Y = company name
+ * %D = date
+ * %R = revision
+ * %S = sheet number
+ * %N = number of sheets
+ * %Cx = comment (x = 0 to 9 to identify the comment)
+ * %F = filename
+ * %P = sheet path (sheet full name)
+ * %T = title
+ */
+
+ for( unsigned ii = 0; ii < aTextbase.Len(); ii++ )
+ {
+ if( aTextbase[ii] != '%' )
+ {
+ msg << aTextbase[ii];
+ continue;
+ }
+
+ if( ++ii >= aTextbase.Len() )
+ break;
+
+ wxChar format = aTextbase[ii];
+ switch( format )
+ {
+ case '%':
+ msg += '%';
+ break;
+
+ case 'D':
+ msg += m_titleBlock->GetDate();
+ break;
+
+ case 'R':
+ msg += m_titleBlock->GetRevision();
+ break;
+
+ case 'K':
+ msg += productName + Pgm().App().GetAppName();
+ msg += wxT( " " ) + GetBuildVersion();
+ break;
+
+ case 'Z':
+ msg += *m_paperFormat;
+ break;
+
+ case 'S':
+ msg << m_sheetNumber;
+ break;
+
+ case 'N':
+ msg << m_sheetCount;
+ break;
+
+ case 'F':
+ {
+ wxFileName fn( m_fileName );
+ msg += fn.GetFullName();
+ }
+ break;
+
+ case 'P':
+ msg += *m_sheetFullName;
+ break;
+
+ case 'Y':
+ msg = m_titleBlock->GetCompany();
+ break;
+
+ case 'T':
+ msg += m_titleBlock->GetTitle();
+ break;
+
+ case 'C':
+ format = aTextbase[++ii];
+ switch( format )
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ msg += m_titleBlock->GetComment( format - '0');
+ break;
+
+ default:
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ return msg;
+}
+
+
+void TITLE_BLOCK::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR )
+{
+ // Don't write the title block information if there is nothing to write.
+ bool isempty = true;
+ for( unsigned idx = 0; idx < m_tbTexts.GetCount(); idx++ )
+ {
+ if( ! m_tbTexts[idx].IsEmpty() )
+ {
+ isempty = false;
+ break;
+ }
+ }
+
+ if( !isempty )
+ {
+ aFormatter->Print( aNestLevel, "(title_block\n" );
+
+ if( !GetTitle().IsEmpty() )
+ aFormatter->Print( aNestLevel+1, "(title %s)\n",
+ aFormatter->Quotew( GetTitle() ).c_str() );
+
+ if( !GetDate().IsEmpty() )
+ aFormatter->Print( aNestLevel+1, "(date %s)\n",
+ aFormatter->Quotew( GetDate() ).c_str() );
+
+ if( !GetRevision().IsEmpty() )
+ aFormatter->Print( aNestLevel+1, "(rev %s)\n",
+ aFormatter->Quotew( GetRevision() ).c_str() );
+
+ if( !GetCompany().IsEmpty() )
+ aFormatter->Print( aNestLevel+1, "(company %s)\n",
+ aFormatter->Quotew( GetCompany() ).c_str() );
+
+ for( int ii = 0; ii < 4; ii++ )
+ {
+ if( !GetComment(ii).IsEmpty() )
+ aFormatter->Print( aNestLevel+1, "(comment %d %s)\n", ii+1,
+ aFormatter->Quotew( GetComment(ii) ).c_str() );
+ }
+
+ aFormatter->Print( aNestLevel, ")\n\n" );
+ }
+}
diff --git a/common/worksheet_viewitem.cpp b/common/worksheet_viewitem.cpp
new file mode 100644
index 0000000..cf02991
--- /dev/null
+++ b/common/worksheet_viewitem.cpp
@@ -0,0 +1,210 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file worksheet_viewitem.cpp
+ * @brief Class that handles properties and drawing of worksheet layout.
+ */
+
+#include <worksheet_viewitem.h>
+#include <worksheet_shape_builder.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <painter.h>
+#include <layers_id_colors_and_visibility.h>
+#include <boost/foreach.hpp>
+#include <class_page_info.h>
+
+using namespace KIGFX;
+
+WORKSHEET_VIEWITEM::WORKSHEET_VIEWITEM( const PAGE_INFO* aPageInfo, const TITLE_BLOCK* aTitleBlock ) :
+ EDA_ITEM( NOT_USED ), // this item is never added to a BOARD so it needs no type
+ m_titleBlock( aTitleBlock ), m_pageInfo( aPageInfo ), m_sheetNumber( 1 ), m_sheetCount( 1 ) {}
+
+
+void WORKSHEET_VIEWITEM::SetPageInfo( const PAGE_INFO* aPageInfo )
+{
+ m_pageInfo = aPageInfo;
+ ViewUpdate( GEOMETRY );
+}
+
+
+void WORKSHEET_VIEWITEM::SetTitleBlock( const TITLE_BLOCK* aTitleBlock )
+{
+ m_titleBlock = aTitleBlock;
+ ViewUpdate( GEOMETRY );
+}
+
+
+const BOX2I WORKSHEET_VIEWITEM::ViewBBox() const
+{
+ BOX2I bbox;
+
+ if( m_pageInfo != NULL )
+ {
+ bbox.SetOrigin( VECTOR2I( 0, 0 ) );
+ bbox.SetEnd( VECTOR2I( m_pageInfo->GetWidthMils() * 25400,
+ m_pageInfo->GetHeightMils() * 25400 ) );
+ }
+ else
+ {
+ bbox.SetMaximum();
+ }
+
+ return bbox;
+}
+
+
+void WORKSHEET_VIEWITEM::ViewDraw( int aLayer, GAL* aGal ) const
+{
+ RENDER_SETTINGS* settings = m_view->GetPainter()->GetSettings();
+ wxString fileName( m_fileName.c_str(), wxConvUTF8 );
+ wxString sheetName( m_sheetName.c_str(), wxConvUTF8 );
+ WS_DRAW_ITEM_LIST drawList;
+
+ drawList.SetPenSize( settings->GetWorksheetLineWidth() );
+ // Sorry, but I don't get this multi #ifdef from include/convert_to_biu.h, so here goes a magic
+ // number. IU_PER_MILS should be 25400 (as in a different compilation unit), but somehow
+ // it equals 1 in this case..
+ drawList.SetMilsToIUfactor( 25400 /* IU_PER_MILS */ );
+ drawList.SetSheetNumber( m_sheetNumber );
+ drawList.SetSheetCount( m_sheetCount );
+ drawList.SetFileName( fileName );
+ drawList.SetSheetName( sheetName );
+
+ COLOR4D color = settings->GetColor( this, aLayer );
+ EDA_COLOR_T edaColor = ColorFindNearest( color.r * 255, color.g * 255, color.b * 255 );
+ drawList.BuildWorkSheetGraphicList( *m_pageInfo, *m_titleBlock, edaColor, edaColor );
+
+ // Draw all the components that make the page layout
+ WS_DRAW_ITEM_BASE* item = drawList.GetFirst();
+ while( item )
+ {
+ switch( item->GetType() )
+ {
+ case WS_DRAW_ITEM_BASE::wsg_line:
+ draw( static_cast<const WS_DRAW_ITEM_LINE*>( item ), aGal );
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_rect:
+ draw( static_cast<const WS_DRAW_ITEM_RECT*>( item ), aGal );
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_poly:
+ draw( static_cast<const WS_DRAW_ITEM_POLYGON*>( item ), aGal );
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_text:
+ draw( static_cast<const WS_DRAW_ITEM_TEXT*>( item ), aGal );
+ break;
+
+ case WS_DRAW_ITEM_BASE::wsg_bitmap:
+ break;
+ }
+
+ item = drawList.GetNext();
+ }
+
+ // Draw gray line that outlines the sheet size
+ drawBorder( aGal );
+}
+
+
+void WORKSHEET_VIEWITEM::ViewGetLayers( int aLayers[], int& aCount ) const
+{
+ aCount = 1;
+ aLayers[0] = ITEM_GAL_LAYER( WORKSHEET );
+}
+
+
+void WORKSHEET_VIEWITEM::draw( const WS_DRAW_ITEM_LINE* aItem, GAL* aGal ) const
+{
+ aGal->SetIsStroke( true );
+ aGal->SetIsFill( false );
+ aGal->SetStrokeColor( COLOR4D( aItem->GetColor() ) );
+ aGal->SetLineWidth( aItem->GetPenWidth() );
+ aGal->DrawLine( VECTOR2D( aItem->GetStart() ), VECTOR2D( aItem->GetEnd() ) );
+}
+
+
+void WORKSHEET_VIEWITEM::draw( const WS_DRAW_ITEM_RECT* aItem, GAL* aGal ) const
+{
+ aGal->SetIsStroke( true );
+ aGal->SetIsFill( false );
+ aGal->SetStrokeColor( COLOR4D( aItem->GetColor() ) );
+ aGal->SetLineWidth( aItem->GetPenWidth() );
+ aGal->DrawRectangle( VECTOR2D( aItem->GetStart() ), VECTOR2D( aItem->GetEnd() ) );
+}
+
+
+void WORKSHEET_VIEWITEM::draw( const WS_DRAW_ITEM_POLYGON* aItem, GAL* aGal ) const
+{
+ std::deque<VECTOR2D> corners;
+ BOOST_FOREACH( wxPoint point, aItem->m_Corners )
+ {
+ corners.push_back( VECTOR2D( point ) );
+ }
+
+ if( aItem->IsFilled() )
+ {
+ aGal->SetFillColor( COLOR4D( aItem->GetColor() ) );
+ aGal->SetIsFill( true );
+ aGal->SetIsStroke( false );
+ aGal->DrawPolygon( corners );
+ }
+ else
+ {
+ aGal->SetStrokeColor( COLOR4D( aItem->GetColor() ) );
+ aGal->SetIsFill( false );
+ aGal->SetIsStroke( true );
+ aGal->SetLineWidth( aItem->GetPenWidth() );
+ aGal->DrawPolyline( corners );
+ }
+}
+
+
+void WORKSHEET_VIEWITEM::draw( const WS_DRAW_ITEM_TEXT* aItem, GAL* aGal ) const
+{
+ VECTOR2D position( aItem->GetTextPosition().x, aItem->GetTextPosition().y );
+
+ aGal->Save();
+ aGal->Translate( position );
+ aGal->Rotate( -aItem->GetOrientation() * M_PI / 1800.0 );
+ aGal->SetStrokeColor( COLOR4D( aItem->GetColor() ) );
+ aGal->SetLineWidth( aItem->GetThickness() );
+ aGal->SetTextAttributes( aItem );
+ aGal->StrokeText( aItem->GetShownText(), VECTOR2D( 0, 0 ), 0.0 );
+ aGal->Restore();
+}
+
+
+void WORKSHEET_VIEWITEM::drawBorder( GAL* aGal ) const
+{
+ VECTOR2D origin = VECTOR2D( 0.0, 0.0 );
+ VECTOR2D end = VECTOR2D( m_pageInfo->GetWidthMils() * 25400,
+ m_pageInfo->GetHeightMils() * 25400 );
+
+ aGal->SetIsStroke( true );
+ aGal->SetIsFill( false );
+ aGal->DrawRectangle( origin, end );
+}
diff --git a/common/wx_status_popup.cpp b/common/wx_status_popup.cpp
new file mode 100644
index 0000000..9679b3e
--- /dev/null
+++ b/common/wx_status_popup.cpp
@@ -0,0 +1,65 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 CERN
+ * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * Transient mouse following popup window implementation.
+ */
+
+#include <wx_status_popup.h>
+#include <wxPcbStruct.h>
+
+WX_STATUS_POPUP::WX_STATUS_POPUP( PCB_EDIT_FRAME* aParent ) :
+ wxPopupWindow( aParent )
+{
+ m_panel = new wxPanel( this, wxID_ANY );
+ m_panel->SetBackgroundColour( *wxLIGHT_GREY );
+
+ m_topSizer = new wxBoxSizer( wxVERTICAL );
+ m_panel->SetSizer( m_topSizer );
+}
+
+
+void WX_STATUS_POPUP::updateSize()
+{
+ m_topSizer->Fit( m_panel );
+ SetClientSize( m_panel->GetSize() );
+}
+
+
+WX_STATUS_POPUP::~WX_STATUS_POPUP()
+{
+}
+
+
+void WX_STATUS_POPUP::Popup( wxWindow* )
+{
+ Show( true );
+ Raise();
+}
+
+
+void WX_STATUS_POPUP::Move( const wxPoint& aWhere )
+{
+ SetPosition ( aWhere );
+}
diff --git a/common/wx_unit_binder.cpp b/common/wx_unit_binder.cpp
new file mode 100644
index 0000000..6a9236b
--- /dev/null
+++ b/common/wx_unit_binder.cpp
@@ -0,0 +1,86 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 CERN
+ * Author: Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/stattext.h>
+#include <wx/sizer.h>
+#include <wx/textctrl.h>
+#include <limits>
+#include <base_units.h>
+#include <wx/valnum.h>
+
+#include <boost/optional.hpp>
+
+#include "wx_unit_binder.h"
+
+WX_UNIT_BINDER::WX_UNIT_BINDER( wxWindow* aParent, wxTextCtrl* aTextInput,
+ wxStaticText* aUnitLabel, wxSpinButton* aSpinButton ) :
+ m_textCtrl( aTextInput ),
+ m_unitLabel( aUnitLabel ),
+ m_units( g_UserUnit ),
+ m_step( 1 ),
+ m_min( 0 ),
+ m_max( 1 )
+{
+ // Use the currently selected units
+ m_textCtrl->SetValue( wxT( "0" ) );
+ m_unitLabel->SetLabel( GetAbbreviatedUnitsLabel( m_units ) );
+}
+
+
+WX_UNIT_BINDER::~WX_UNIT_BINDER()
+{
+}
+
+
+void WX_UNIT_BINDER::SetValue( int aValue )
+{
+ wxString s = StringFromValue( m_units, aValue, false );
+
+ m_textCtrl->SetValue( s );
+
+ m_unitLabel->SetLabel( GetAbbreviatedUnitsLabel( m_units ) );
+}
+
+
+int WX_UNIT_BINDER::GetValue() const
+{
+ wxString s = m_textCtrl->GetValue();
+
+ return ValueFromString( m_units, s );
+}
+
+
+bool WX_UNIT_BINDER::Valid() const
+{
+ double dummy;
+
+ return m_textCtrl->GetValue().ToDouble( &dummy );
+}
+
+
+void WX_UNIT_BINDER::Enable( bool aEnable )
+{
+ m_textCtrl->Enable( aEnable );
+ m_unitLabel->Enable( aEnable );
+}
diff --git a/common/wxunittext.cpp b/common/wxunittext.cpp
new file mode 100644
index 0000000..16f649a
--- /dev/null
+++ b/common/wxunittext.cpp
@@ -0,0 +1,195 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Author: Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wxunittext.h"
+#include <wx/stattext.h>
+#include <wx/sizer.h>
+#include <wx/textctrl.h>
+#include <limits>
+#include <base_units.h>
+#include <wx/valnum.h>
+#include <boost/optional.hpp>
+
+WX_UNIT_TEXT::WX_UNIT_TEXT( wxWindow* aParent, const wxString& aLabel, double aValue, double aStep ) :
+ wxPanel( aParent, wxID_ANY ),
+ m_step( aStep )
+{
+ // Use the currently selected units
+ m_units = g_UserUnit;
+
+ wxBoxSizer* sizer;
+ sizer = new wxBoxSizer( wxHORIZONTAL );
+
+ // Helper label
+ m_inputLabel = new wxStaticText( this, wxID_ANY, aLabel,
+ wxDefaultPosition, wxDefaultSize, 0 );
+ wxSize size = m_inputLabel->GetMinSize();
+ size.SetWidth( 150 );
+ m_inputLabel->SetMinSize( size );
+ sizer->Add( m_inputLabel, 1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );
+
+ // Main input control
+ m_inputValue = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize,
+ wxTE_PROCESS_ENTER );
+
+ SetValue( aValue );
+ sizer->Add( m_inputValue, 0, wxALIGN_CENTER_VERTICAL | wxALL );
+
+ wxFloatingPointValidator<double> validator( 4, NULL, wxNUM_VAL_NO_TRAILING_ZEROES );
+ validator.SetRange( 0.0, std::numeric_limits<double>::max() );
+ m_inputValue->SetValidator( validator );
+
+ // Spin buttons for modifying values using the mouse
+ m_spinButton = new wxSpinButton( this, wxID_ANY );
+ m_spinButton->SetRange( std::numeric_limits<int>::min(), std::numeric_limits<int>::max() );
+
+ m_spinButton->SetCanFocus( false );
+ sizer->Add( m_spinButton, 0, wxALIGN_CENTER_VERTICAL | wxALL );
+
+ Connect( wxEVT_SPIN_UP, wxSpinEventHandler( WX_UNIT_TEXT::onSpinUpEvent ), NULL, this );
+ Connect( wxEVT_SPIN_DOWN, wxSpinEventHandler( WX_UNIT_TEXT::onSpinDownEvent ), NULL, this );
+
+ sizer->AddSpacer( 5 );
+
+ // Create units label
+ m_unitLabel = new wxStaticText( this, wxID_ANY, GetUnitsLabel( g_UserUnit ),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ sizer->Add( m_unitLabel, 0, wxALIGN_CENTER_VERTICAL | wxALL );
+
+ SetSizer( sizer );
+ Layout();
+}
+
+
+WX_UNIT_TEXT::~WX_UNIT_TEXT()
+{
+}
+
+
+void WX_UNIT_TEXT::SetUnits( EDA_UNITS_T aUnits, bool aConvert )
+{
+ assert( !aConvert ); // TODO conversion does not work yet
+
+ m_unitLabel->SetLabel( GetUnitsLabel( g_UserUnit ) );
+}
+
+
+void WX_UNIT_TEXT::SetValue( double aValue )
+{
+ if( aValue >= 0.0 )
+ {
+ m_inputValue->SetValue( wxString( Double2Str( aValue ).c_str(), wxConvUTF8 ) );
+ m_inputValue->MarkDirty();
+ }
+ else
+ {
+ m_inputValue->SetValue( DEFAULT_VALUE );
+ }
+}
+
+
+/*boost::optional<double> WX_UNIT_TEXT::GetValue( EDA_UNITS_T aUnit ) const
+{
+ if( aUnit == m_units )
+ return GetValue(); // no conversion needed
+
+ switch( m_units )
+ {
+ case MILLIMETRES:
+ switch( aUnit )
+ {
+ case INCHES:
+ iu = Mils2iu( GetValue() * 1000.0 );
+ break;
+
+ case UNSCALED_UNITS:
+ iu = GetValue();
+ break;
+ }
+ break;
+
+ case INCHES:
+ switch( aUnit )
+ {
+ case MILLIMETRES:
+ return Mils2mm( GetValue() * 1000.0 );
+ break;
+
+ case UNSCALED_UNITS:
+ return Mils2iu( GetValue() * 1000.0 );
+ break;
+ }
+ break;
+
+ case UNSCALED_UNITS:
+ switch( aUnit )
+ {
+ case MILLIMETRES:
+ return Iu2Mils( GetValue() ) / 1000.0;
+ break;
+
+// case INCHES:
+// return
+// break;
+ }
+ break;
+ }
+
+ assert( false ); // seems that there are some conversions missing
+
+ return 0.0;
+}*/
+
+
+boost::optional<double> WX_UNIT_TEXT::GetValue() const
+{
+ wxString text = m_inputValue->GetValue();
+ double value;
+
+ if( text == DEFAULT_VALUE )
+ return boost::optional<double>( -1.0 );
+
+ if( !text.ToDouble( &value ) )
+ return boost::optional<double>();
+
+ return boost::optional<double>( value );
+}
+
+
+void WX_UNIT_TEXT::onSpinUpEvent( wxSpinEvent& aEvent )
+{
+ SetValue( *GetValue() + m_step );
+}
+
+
+void WX_UNIT_TEXT::onSpinDownEvent( wxSpinEvent& aEvent )
+{
+ double newValue = *GetValue() - m_step;
+
+ if( newValue >= 0.0 )
+ SetValue( newValue );
+}
+
+
+const wxString WX_UNIT_TEXT::DEFAULT_VALUE = _( "default ");
diff --git a/common/wxwineda.cpp b/common/wxwineda.cpp
new file mode 100644
index 0000000..8ff4c2c
--- /dev/null
+++ b/common/wxwineda.cpp
@@ -0,0 +1,324 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file wxwineda.cpp
+ */
+
+#include <fctsys.h>
+#include <wxstruct.h>
+#include <dialog_helpers.h>
+#include <base_units.h>
+#include <macros.h>
+
+
+/*******************************************************/
+/* Class to edit a graphic + text size in INCHES or MM */
+/*******************************************************/
+EDA_GRAPHIC_TEXT_CTRL::EDA_GRAPHIC_TEXT_CTRL( wxWindow* parent,
+ const wxString& Title,
+ const wxString& TextToEdit,
+ int textsize,
+ EDA_UNITS_T user_unit,
+ wxBoxSizer* BoxSizer,
+ int framelen )
+{
+ m_UserUnit = user_unit;
+ m_Title = NULL;
+
+ m_Title = new wxStaticText( parent, -1, Title );
+
+ BoxSizer->Add( m_Title, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ m_FrameText = new wxTextCtrl( parent, -1, TextToEdit );
+
+ BoxSizer->Add( m_FrameText, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+
+ if( !Title.IsEmpty() )
+ {
+ wxString msg;
+ msg.Printf( _( "Size%s" ), GetChars( ReturnUnitSymbol( m_UserUnit ) ) );
+ wxStaticText* text = new wxStaticText( parent, -1, msg );
+
+ BoxSizer->Add( text, 0, wxGROW | wxLEFT | wxRIGHT, 5 );
+ }
+
+ wxString value = FormatSize( m_UserUnit, textsize );
+
+ m_FrameSize = new wxTextCtrl( parent, -1, value, wxDefaultPosition, wxSize( 70, -1 ) );
+
+ BoxSizer->Add( m_FrameSize, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+}
+
+
+EDA_GRAPHIC_TEXT_CTRL::~EDA_GRAPHIC_TEXT_CTRL()
+{
+ /* no, these are deleted by the BoxSizer
+ delete m_FrameText;
+ delete m_Title;
+ */
+}
+
+
+wxString EDA_GRAPHIC_TEXT_CTRL::FormatSize( EDA_UNITS_T aUnit, int textSize )
+{
+ // Limiting the size of the text of reasonable values.
+ if( textSize < 10 )
+ textSize = 10;
+
+ if( textSize > 3000 )
+ textSize = 3000;
+
+ return StringFromValue( aUnit, textSize );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::SetTitle( const wxString& title )
+{
+ m_Title->SetLabel( title );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::SetValue( const wxString& value )
+{
+ m_FrameText->SetValue( value );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::SetValue( int textSize )
+{
+ wxString value = FormatSize( m_UserUnit, textSize );
+ m_FrameSize->SetValue( value );
+}
+
+
+const wxString EDA_GRAPHIC_TEXT_CTRL::GetText() const
+{
+ wxString text = m_FrameText->GetValue();
+ return text;
+}
+
+
+int EDA_GRAPHIC_TEXT_CTRL::ParseSize( const wxString& sizeText, EDA_UNITS_T aUnit )
+{
+ int textsize;
+
+ textsize = ValueFromString( aUnit, sizeText );
+
+ // Limit to reasonable size
+ if( textsize < 10 )
+ textsize = 10;
+
+ if( textsize > 3000 )
+ textsize = 3000;
+
+ return textsize;
+}
+
+
+int EDA_GRAPHIC_TEXT_CTRL::GetTextSize()
+{
+ return ParseSize( m_FrameSize->GetValue(), m_UserUnit );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::Enable( bool state )
+{
+ m_FrameText->Enable( state );
+}
+
+
+/********************************************************/
+/* Class to display and edit a coordinated INCHES or MM */
+/********************************************************/
+EDA_POSITION_CTRL::EDA_POSITION_CTRL( wxWindow* parent,
+ const wxString& title,
+ const wxPoint& pos_to_edit,
+ EDA_UNITS_T user_unit,
+ wxBoxSizer* BoxSizer )
+{
+ wxString text;
+
+ m_UserUnit = user_unit;
+
+ if( title.IsEmpty() )
+ text = _( "Pos " );
+ else
+ text = title;
+
+ text += _( "X" ) + ReturnUnitSymbol( m_UserUnit );
+ m_TextX = new wxStaticText( parent, -1, text );
+
+ BoxSizer->Add( m_TextX, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+ m_FramePosX = new wxTextCtrl( parent, -1, wxEmptyString, wxDefaultPosition );
+
+ BoxSizer->Add( m_FramePosX, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+
+
+ if( title.IsEmpty() )
+ text = _( "Pos " );
+ else
+ text = title;
+ text += _( "Y" ) + ReturnUnitSymbol( m_UserUnit );
+
+ m_TextY = new wxStaticText( parent, -1, text );
+
+ BoxSizer->Add( m_TextY, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ m_FramePosY = new wxTextCtrl( parent, -1, wxEmptyString );
+
+ BoxSizer->Add( m_FramePosY, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+
+ SetValue( pos_to_edit.x, pos_to_edit.y );
+}
+
+
+EDA_POSITION_CTRL::~EDA_POSITION_CTRL()
+{
+ delete m_TextX;
+ delete m_TextY;
+ delete m_FramePosX;
+ delete m_FramePosY;
+}
+
+
+/* Returns (in internal units) to coordinate between (in user units)
+ */
+wxPoint EDA_POSITION_CTRL::GetValue()
+{
+ wxPoint coord;
+
+ coord.x = ValueFromString( m_UserUnit, m_FramePosX->GetValue() );
+ coord.y = ValueFromString( m_UserUnit, m_FramePosY->GetValue() );
+
+ return coord;
+}
+
+
+void EDA_POSITION_CTRL::Enable( bool x_win_on, bool y_win_on )
+{
+ m_FramePosX->Enable( x_win_on );
+ m_FramePosY->Enable( y_win_on );
+}
+
+
+void EDA_POSITION_CTRL::SetValue( int x_value, int y_value )
+{
+ wxString msg;
+
+ m_Pos_To_Edit.x = x_value;
+ m_Pos_To_Edit.y = y_value;
+
+ msg = StringFromValue( m_UserUnit, m_Pos_To_Edit.x );
+ m_FramePosX->Clear();
+ m_FramePosX->SetValue( msg );
+
+ msg = StringFromValue( m_UserUnit, m_Pos_To_Edit.y );
+ m_FramePosY->Clear();
+ m_FramePosY->SetValue( msg );
+}
+
+
+/*******************/
+/* EDA_SIZE_CTRL */
+/*******************/
+EDA_SIZE_CTRL::EDA_SIZE_CTRL( wxWindow* parent, const wxString& title,
+ const wxSize& size_to_edit, EDA_UNITS_T aUnit,
+ wxBoxSizer* aBoxSizer ) :
+ EDA_POSITION_CTRL( parent, title, wxPoint( size_to_edit.x, size_to_edit.y ),
+ aUnit, aBoxSizer )
+{
+}
+
+
+wxSize EDA_SIZE_CTRL::GetValue()
+{
+ wxPoint pos = EDA_POSITION_CTRL::GetValue();
+ wxSize size;
+
+ size.x = pos.x;
+ size.y = pos.y;
+ return size;
+}
+
+
+/**************************************************************/
+/* Class to display and edit a dimension INCHES, MM, or other */
+/**************************************************************/
+EDA_VALUE_CTRL::EDA_VALUE_CTRL( wxWindow* parent, const wxString& title,
+ int value, EDA_UNITS_T user_unit, wxBoxSizer* BoxSizer )
+{
+ wxString label = title;
+
+ m_UserUnit = user_unit;
+ m_Value = value;
+ label += ReturnUnitSymbol( m_UserUnit );
+
+ m_Text = new wxStaticText( parent, -1, label );
+
+ BoxSizer->Add( m_Text, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ wxString stringvalue = StringFromValue( m_UserUnit, m_Value );
+ m_ValueCtrl = new wxTextCtrl( parent, -1, stringvalue );
+
+ BoxSizer->Add( m_ValueCtrl,
+ 0,
+ wxGROW | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM,
+ 5 );
+}
+
+
+EDA_VALUE_CTRL::~EDA_VALUE_CTRL()
+{
+ delete m_ValueCtrl;
+ delete m_Text;
+}
+
+
+int EDA_VALUE_CTRL::GetValue()
+{
+ int coord;
+ wxString txtvalue = m_ValueCtrl->GetValue();
+
+ coord = ValueFromString( m_UserUnit, txtvalue );
+ return coord;
+}
+
+
+void EDA_VALUE_CTRL::SetValue( int new_value )
+{
+ wxString buffer;
+
+ m_Value = new_value;
+
+ buffer = StringFromValue( m_UserUnit, m_Value );
+ m_ValueCtrl->SetValue( buffer );
+}
+
+
+void EDA_VALUE_CTRL::Enable( bool enbl )
+{
+ m_ValueCtrl->Enable( enbl );
+ m_Text->Enable( enbl );
+}
diff --git a/common/xnode.cpp b/common/xnode.cpp
new file mode 100644
index 0000000..7419f23
--- /dev/null
+++ b/common/xnode.cpp
@@ -0,0 +1,93 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <xnode.h>
+#include <macros.h>
+
+typedef wxXmlAttribute XATTR;
+
+
+void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+{
+ switch( GetType() )
+ {
+ case wxXML_ELEMENT_NODE:
+ out->Print( nestLevel, "(%s", out->Quotew( GetName() ).c_str() );
+ FormatContents( out, nestLevel );
+ if( GetNext() )
+ out->Print( 0, ")\n" );
+ else
+ out->Print( 0, ")" );
+ break;
+
+ default:
+ FormatContents( out, nestLevel );
+ }
+}
+
+
+void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+{
+ // output attributes first if they exist
+ for( XATTR* attr = (XATTR*) GetAttributes(); attr; attr = (XATTR*) attr->GetNext() )
+ {
+ out->Print( 0, " (%s %s)",
+ // attr names should never need quoting, no spaces, we designed the file.
+ out->Quotew( attr->GetName() ).c_str(),
+ out->Quotew( attr->GetValue() ).c_str()
+ );
+ }
+
+ // we only expect to have used one of two types here:
+ switch( GetType() )
+ {
+ case wxXML_ELEMENT_NODE:
+
+ // output children if they exist.
+ for( XNODE* kid = (XNODE*) GetChildren(); kid; kid = (XNODE*) kid->GetNext() )
+ {
+ if( kid->GetType() != wxXML_TEXT_NODE )
+ {
+ if( kid == GetChildren() )
+ out->Print( 0, "\n" );
+ kid->Format( out, nestLevel+1 );
+ }
+ else
+ {
+ kid->Format( out, 0 );
+ }
+ }
+ break;
+
+ case wxXML_TEXT_NODE:
+ out->Print( 0, " %s", out->Quotew( GetContent() ).c_str() );
+ break;
+
+ default:
+ ; // not supported
+ }
+}
+
+// EOF
diff --git a/common/zoom.cpp b/common/zoom.cpp
new file mode 100644
index 0000000..5107ab8
--- /dev/null
+++ b/common/zoom.cpp
@@ -0,0 +1,301 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file zoom.cpp
+ */
+
+/*
+ * Manage zoom, grid step, and auto crop.
+ */
+
+#include <fctsys.h>
+#include <id.h>
+#include <class_drawpanel.h>
+#include <view/view.h>
+#include <class_base_screen.h>
+#include <draw_frame.h>
+#include <kicad_device_context.h>
+#include <hotkeys_basic.h>
+#include <menus_helpers.h>
+#include <base_units.h>
+#include <tool/tool_manager.h>
+
+
+void EDA_DRAW_FRAME::RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointer )
+{
+ if( IsGalCanvasActive() )
+ return;
+
+ AdjustScrollBars( aCenterPoint );
+
+ // Move the mouse cursor to the on grid graphic cursor position
+ if( aWarpPointer )
+ m_canvas->MoveCursorToCrossHair();
+
+ m_canvas->Refresh();
+ m_canvas->Update();
+}
+
+void EDA_DRAW_FRAME::RedrawScreen2( const wxPoint& posBefore )
+{
+ if( IsGalCanvasActive() )
+ return;
+
+ wxPoint dPos = posBefore - m_canvas->GetClientSize() / 2; // relative screen position to center before zoom
+ wxPoint newScreenPos = m_canvas->ToDeviceXY( GetCrossHairPosition() ); // screen position of crosshair after zoom
+ wxPoint newCenter = m_canvas->ToLogicalXY( newScreenPos - dPos );
+
+ AdjustScrollBars( newCenter );
+
+ m_canvas->Refresh();
+ m_canvas->Update();
+}
+
+
+void EDA_DRAW_FRAME::Zoom_Automatique( bool aWarpPointer )
+{
+ BASE_SCREEN* screen = GetScreen();
+
+ // Set the best zoom and get center point.
+
+ // BestZoom() can compute an illegal zoom if the client window size
+ // is small, say because frame is not maximized. So use the clamping form
+ // of SetZoom():
+ double bestzoom = BestZoom();
+ screen->SetScalingFactor( bestzoom );
+
+ if( screen->m_FirstRedraw )
+ SetCrossHairPosition( GetScrollCenterPosition() );
+
+ if( !IsGalCanvasActive() )
+ RedrawScreen( GetScrollCenterPosition(), aWarpPointer );
+ else
+ m_toolManager->RunAction( "common.Control.zoomFitScreen", true );
+}
+
+
+/** Compute the zoom factor and the new draw offset to draw the
+ * selected area (Rect) in full window screen
+ * @param Rect = selected area to show after zooming
+ */
+void EDA_DRAW_FRAME::Window_Zoom( EDA_RECT& Rect )
+{
+ // Compute the best zoom
+ Rect.Normalize();
+
+ wxSize size = m_canvas->GetClientSize();
+
+ // Use ceil to at least show the full rect
+ double scalex = (double) Rect.GetSize().x / size.x;
+ double bestscale = (double) Rect.GetSize().y / size.y;
+
+ bestscale = std::max( bestscale, scalex );
+
+ GetScreen()->SetScalingFactor( bestscale );
+ RedrawScreen( Rect.Centre(), true );
+}
+
+
+/**
+ * Function OnZoom
+ * Called from any zoom event (toolbar , hotkey or popup )
+ */
+void EDA_DRAW_FRAME::OnZoom( wxCommandEvent& event )
+{
+ if( m_canvas == NULL )
+ return;
+
+ int id = event.GetId();
+ bool zoom_at_cursor = false;
+ BASE_SCREEN* screen = GetScreen();
+ wxPoint center = GetScrollCenterPosition();
+
+ switch( id )
+ {
+ case ID_OFFCENTER_ZOOM_IN:
+ center = m_canvas->ToDeviceXY( GetCrossHairPosition() );
+ if( screen->SetPreviousZoom() )
+ RedrawScreen2( center );
+ break;
+
+ case ID_POPUP_ZOOM_IN:
+ zoom_at_cursor = true;
+ center = GetCrossHairPosition();
+
+ // fall thru
+ case ID_VIEWER_ZOOM_IN:
+ case ID_ZOOM_IN:
+ if( screen->SetPreviousZoom() )
+ RedrawScreen( center, zoom_at_cursor );
+ break;
+
+ case ID_OFFCENTER_ZOOM_OUT:
+ center = m_canvas->ToDeviceXY( GetCrossHairPosition() );
+ if( screen->SetNextZoom() )
+ RedrawScreen2( center );
+ break;
+
+ case ID_POPUP_ZOOM_OUT:
+ zoom_at_cursor = true;
+ center = GetCrossHairPosition();
+
+ // fall thru
+ case ID_VIEWER_ZOOM_OUT:
+ case ID_ZOOM_OUT:
+ if( screen->SetNextZoom() )
+ RedrawScreen( center, zoom_at_cursor );
+ break;
+
+ case ID_VIEWER_ZOOM_REDRAW:
+ case ID_POPUP_ZOOM_REDRAW:
+ case ID_ZOOM_REDRAW:
+ m_canvas->Refresh();
+ break;
+
+ case ID_POPUP_ZOOM_CENTER:
+ center = GetCrossHairPosition();
+ RedrawScreen( center, true );
+ break;
+
+ case ID_POPUP_ZOOM_PAGE:
+ case ID_VIEWER_ZOOM_PAGE:
+ case ID_ZOOM_PAGE:
+ Zoom_Automatique( false );
+ break;
+
+ case ID_POPUP_ZOOM_SELECT:
+ break;
+
+ case ID_POPUP_CANCEL:
+ m_canvas->MoveCursorToCrossHair();
+ break;
+
+ default:
+ SetPresetZoom( id - ID_POPUP_ZOOM_LEVEL_START );
+ }
+
+ UpdateStatusBar();
+}
+
+
+void EDA_DRAW_FRAME::SetNextZoom()
+{
+ GetScreen()->SetNextZoom();
+}
+
+
+void EDA_DRAW_FRAME::SetPrevZoom()
+{
+ GetScreen()->SetPreviousZoom();
+}
+
+
+void EDA_DRAW_FRAME::SetPresetZoom( int aIndex )
+{
+ BASE_SCREEN* screen = GetScreen();
+
+ if( aIndex >= (int) screen->m_ZoomList.size() )
+ {
+ wxLogDebug( wxT( "%s %d: index %d is outside the bounds of the zoom list." ),
+ __TFILE__, __LINE__, aIndex );
+ return;
+ }
+
+ if( m_zoomSelectBox )
+ m_zoomSelectBox->SetSelection( aIndex );
+
+ if( screen->SetZoom( screen->m_ZoomList[aIndex] ) )
+ RedrawScreen( GetScrollCenterPosition(), true );
+
+ UpdateStatusBar();
+}
+
+
+/* add the zoom list menu the the MasterMenu.
+ * used in OnRightClick(wxMouseEvent& event)
+ */
+void EDA_DRAW_FRAME::AddMenuZoomAndGrid( wxMenu* MasterMenu )
+{
+ int maxZoomIds;
+ double zoom;
+ wxString msg;
+ BASE_SCREEN* screen = m_canvas->GetScreen();
+
+ msg = AddHotkeyName( _( "Center" ), m_hotkeysDescrList, HK_ZOOM_CENTER );
+ AddMenuItem( MasterMenu, ID_POPUP_ZOOM_CENTER, msg, KiBitmap( zoom_center_on_screen_xpm ) );
+ msg = AddHotkeyName( _( "Zoom in" ), m_hotkeysDescrList, HK_ZOOM_IN );
+ AddMenuItem( MasterMenu, ID_POPUP_ZOOM_IN, msg, KiBitmap( zoom_in_xpm ) );
+ msg = AddHotkeyName( _( "Zoom out" ), m_hotkeysDescrList, HK_ZOOM_OUT );
+ AddMenuItem( MasterMenu, ID_POPUP_ZOOM_OUT, msg, KiBitmap( zoom_out_xpm ) );
+ msg = AddHotkeyName( _( "Redraw view" ), m_hotkeysDescrList, HK_ZOOM_REDRAW );
+ AddMenuItem( MasterMenu, ID_POPUP_ZOOM_REDRAW, msg, KiBitmap( zoom_redraw_xpm ) );
+ msg = AddHotkeyName( _( "Zoom auto" ), m_hotkeysDescrList, HK_ZOOM_AUTO );
+ AddMenuItem( MasterMenu, ID_POPUP_ZOOM_PAGE, msg, KiBitmap( zoom_fit_in_page_xpm ) );
+
+
+ wxMenu* zoom_choice = new wxMenu;
+ AddMenuItem( MasterMenu, zoom_choice,
+ ID_POPUP_ZOOM_SELECT, _( "Zoom select" ),
+ KiBitmap( zoom_selection_xpm ) );
+
+ zoom = screen->GetZoom();
+ maxZoomIds = ID_POPUP_ZOOM_LEVEL_END - ID_POPUP_ZOOM_LEVEL_START;
+ maxZoomIds = ( (size_t) maxZoomIds < screen->m_ZoomList.size() ) ?
+ maxZoomIds : screen->m_ZoomList.size();
+
+ // Populate zoom submenu.
+ for( int i = 0; i < maxZoomIds; i++ )
+ {
+ msg.Printf( wxT( "%.2f" ), m_zoomLevelCoeff / screen->m_ZoomList[i] );
+
+ zoom_choice->Append( ID_POPUP_ZOOM_LEVEL_START + i, _( "Zoom: " ) + msg,
+ wxEmptyString, wxITEM_CHECK );
+ if( zoom == screen->m_ZoomList[i] )
+ zoom_choice->Check( ID_POPUP_ZOOM_LEVEL_START + i, true );
+ }
+
+ // Create grid submenu as required.
+ if( screen->GetGridCount() )
+ {
+ wxMenu* gridMenu = new wxMenu;
+ AddMenuItem( MasterMenu, gridMenu, ID_POPUP_GRID_SELECT,
+ _( "Grid Select" ), KiBitmap( grid_select_xpm ) );
+
+ wxArrayString gridsList;
+ int icurr = screen->BuildGridsChoiceList( gridsList, g_UserUnit != INCHES );
+
+ for( unsigned i = 0; i < gridsList.GetCount(); i++ )
+ {
+ GRID_TYPE& grid = screen->GetGrid( i );
+ gridMenu->Append( grid.m_CmdId, gridsList[i], wxEmptyString, true );
+
+ if( (int)i == icurr )
+ gridMenu->Check( grid.m_CmdId, true );
+ }
+ }
+
+ MasterMenu->AppendSeparator();
+ AddMenuItem( MasterMenu, ID_POPUP_CANCEL, _( "Close" ), KiBitmap( cancel_xpm ) );
+}
diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt
new file mode 100644
index 0000000..c912d08
--- /dev/null
+++ b/demos/CMakeLists.txt
@@ -0,0 +1,15 @@
+install( DIRECTORY
+ complex_hierarchy
+ ecc83 electric
+ flat_hierarchy
+ interf_u
+ kit-dev-coldfire-xilinx_5213
+ microwave
+ pic_programmer pspice
+ python_scripts_examples
+ "sonde xilinx"
+ test_pads_inside_pads
+ test_xil_95108 video
+ DESTINATION ${KICAD_DEMOS}
+ COMPONENT resources
+ )
diff --git a/demos/complex_hierarchy/ampli_ht.sch b/demos/complex_hierarchy/ampli_ht.sch
new file mode 100644
index 0000000..b61b1a8
--- /dev/null
+++ b/demos/complex_hierarchy/ampli_ht.sch
@@ -0,0 +1,776 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:complex_hierarchy_schlib
+LIBS:complex_hierarchy-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 2 3
+Title ""
+Date "21 mar 2015"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 8900 6400 6100 6400
+Wire Wire Line
+ 8900 5400 9100 5400
+Wire Wire Line
+ 9100 5400 9100 5250
+Connection ~ 9100 4150
+Wire Wire Line
+ 9100 4950 9100 4150
+Wire Wire Line
+ 9800 4450 9600 4450
+Wire Wire Line
+ 9800 4150 9800 4450
+Wire Wire Line
+ 9800 4150 9600 4150
+Wire Wire Line
+ 8100 5400 8100 5600
+Wire Wire Line
+ 5850 6250 5850 5500
+Wire Wire Line
+ 6900 5400 7250 5400
+Wire Wire Line
+ 2600 2000 3100 2000
+Connection ~ 7300 3300
+Wire Wire Line
+ 7300 3200 7300 3450
+Wire Wire Line
+ 5400 6400 5600 6400
+Wire Wire Line
+ 4350 2500 4350 3000
+Connection ~ 5450 2400
+Wire Wire Line
+ 5450 3000 5450 1600
+Wire Wire Line
+ 5450 1600 4500 1600
+Wire Wire Line
+ 3400 2000 3800 2000
+Wire Wire Line
+ 7000 5100 7000 5200
+Wire Wire Line
+ 7600 3300 7300 3300
+Wire Wire Line
+ 7900 2900 7900 3100
+Connection ~ 7900 3700
+Wire Wire Line
+ 8600 5000 8600 5300
+Wire Wire Line
+ 8300 3700 7900 3700
+Wire Wire Line
+ 8600 3300 8600 3500
+Wire Wire Line
+ 7300 3750 7300 3850
+Wire Wire Line
+ 7400 5100 7600 5100
+Wire Wire Line
+ 1700 2200 1800 2200
+Wire Wire Line
+ 1800 2200 1800 2250
+Wire Wire Line
+ 10400 4500 10250 4500
+Wire Wire Line
+ 10250 4500 10250 4550
+Wire Wire Line
+ 5850 5500 5900 5500
+Wire Wire Line
+ 4350 3000 5450 3000
+Wire Wire Line
+ 4350 2000 4100 2000
+Wire Wire Line
+ 4200 1600 3600 1600
+Wire Wire Line
+ 3600 1600 3600 2000
+Connection ~ 3600 2000
+Wire Wire Line
+ 2300 2000 1700 2000
+Wire Wire Line
+ 5350 2400 5450 2400
+Wire Wire Line
+ 5900 5300 5150 5300
+Wire Wire Line
+ 2850 2100 2850 2000
+Connection ~ 2850 2000
+Wire Wire Line
+ 5150 5300 5150 3000
+Connection ~ 5150 3000
+Wire Wire Line
+ 7900 5300 7900 5400
+Wire Wire Line
+ 7900 5400 7550 5400
+Wire Wire Line
+ 8100 4800 8100 5100
+Connection ~ 8100 4800
+Wire Wire Line
+ 7900 3500 7900 3900
+Wire Wire Line
+ 7900 4600 7900 4900
+Wire Wire Line
+ 9800 4300 10400 4300
+Connection ~ 9800 4300
+Wire Wire Line
+ 8900 4450 8900 4950
+Connection ~ 8900 4450
+Wire Wire Line
+ 8900 5250 8900 6400
+Connection ~ 8900 5400
+$Comp
+L R R26
+U 1 1 4B617B88
+P 9100 5100
+AR Path="/4B3A1333/4B617B88" Ref="R26" Part="1"
+AR Path="/4B3A13A4/4B617B88" Ref="R28" Part="1"
+F 0 "R28" H 9200 4850 50 0000 C CNN
+F 1 "220K" V 9100 5100 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 9100 5100 60 0001 C CNN
+F 3 "" H 9100 5100 60 0001 C CNN
+ 1 9100 5100
+ -1 0 0 1
+$EndComp
+$Comp
+L R R25
+U 1 1 4B616B96
+P 9450 4450
+AR Path="/4B3A1333/4B616B96" Ref="R25" Part="1"
+AR Path="/4B3A13A4/4B616B96" Ref="R27" Part="1"
+F 0 "R27" V 9530 4450 50 0000 C CNN
+F 1 "47" V 9450 4450 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 9450 4450 60 0001 C CNN
+F 3 "" H 9450 4450 60 0001 C CNN
+ 1 9450 4450
+ 0 1 1 0
+$EndComp
+$Comp
+L D_Small D8
+U 1 1 4B616AFA
+P 7900 4000
+AR Path="/4B3A1333/4B616AFA" Ref="D8" Part="1"
+AR Path="/4B3A13A4/4B616AFA" Ref="D9" Part="1"
+F 0 "D9" V 7850 4200 50 0000 C CNN
+F 1 "1N4148" V 7950 4200 50 0000 C CNN
+F 2 "Discret:D3" H 7900 4000 60 0001 C CNN
+F 3 "" H 7900 4000 60 0001 C CNN
+ 1 7900 4000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR019
+U 1 1 4B6168A3
+P 8100 5950
+AR Path="/4B3A13A4/4B6168A3" Ref="#PWR019" Part="1"
+AR Path="/4B3A1333/4B6168A3" Ref="#PWR035" Part="1"
+F 0 "#PWR019" H 8100 5950 30 0001 C CNN
+F 1 "GND" H 8100 5880 30 0001 C CNN
+F 2 "" H 8100 5950 60 0001 C CNN
+F 3 "" H 8100 5950 60 0001 C CNN
+ 1 8100 5950
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R10
+U 1 1 4B61688C
+P 8100 5250
+AR Path="/4B3A1333/4B61688C" Ref="R10" Part="1"
+AR Path="/4B3A13A4/4B61688C" Ref="R20" Part="1"
+F 0 "R20" V 8180 5250 50 0000 C CNN
+F 1 "5,6K" V 8100 5250 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 8100 5250 60 0001 C CNN
+F 3 "" H 8100 5250 60 0001 C CNN
+ 1 8100 5250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR036
+U 1 1 4B4F364A
+P 2850 2450
+AR Path="/4B3A1333/4B4F364A" Ref="#PWR036" Part="1"
+AR Path="/4B3A13A4/4B4F364A" Ref="#PWR020" Part="1"
+F 0 "#PWR020" H 2850 2450 30 0001 C CNN
+F 1 "GND" H 2850 2380 30 0001 C CNN
+F 2 "" H 2850 2450 60 0001 C CNN
+F 3 "" H 2850 2450 60 0001 C CNN
+ 1 2850 2450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C12
+U 1 1 4B4F3641
+P 2850 2250
+AR Path="/4B3A1333/4B4F3641" Ref="C12" Part="1"
+AR Path="/4B3A13A4/4B4F3641" Ref="C14" Part="1"
+F 0 "C14" H 3000 2300 50 0000 L CNN
+F 1 "150nF" H 3000 2200 50 0000 L CNN
+F 2 "Discret:C2" H 2850 2250 60 0001 C CNN
+F 3 "" H 2850 2250 60 0001 C CNN
+ 1 2850 2250
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R23
+U 1 1 4B4F363E
+P 2450 2000
+AR Path="/4B3A1333/4B4F363E" Ref="R23" Part="1"
+AR Path="/4B3A13A4/4B4F363E" Ref="R24" Part="1"
+F 0 "R24" V 2350 2000 50 0000 C CNN
+F 1 "1K" V 2450 2000 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 2450 2000 60 0001 C CNN
+F 3 "" H 2450 2000 60 0001 C CNN
+ 1 2450 2000
+ 0 1 1 0
+$EndComp
+$Comp
+L -VAA #PWR021
+U 1 1 4B4B1086
+P 6300 5850
+AR Path="/4B3A13A4/4B4B1086" Ref="#PWR021" Part="1"
+AR Path="/4B3A1333/4B4B1086" Ref="#PWR037" Part="1"
+F 0 "#PWR021" H 6300 5950 20 0001 C CNN
+F 1 "-VAA" H 6300 5950 40 0000 C CNN
+F 2 "" H 6300 5850 60 0001 C CNN
+F 3 "" H 6300 5850 60 0001 C CNN
+ 1 6300 5850
+ -1 0 0 1
+$EndComp
+$Comp
+L -VAA #PWR022
+U 1 1 4B4B1080
+P 4750 2850
+AR Path="/4B3A13A4/4B4B1080" Ref="#PWR022" Part="1"
+AR Path="/4B3A1333/4B4B1080" Ref="#PWR038" Part="1"
+F 0 "#PWR022" H 4750 2950 20 0001 C CNN
+F 1 "-VAA" H 4750 2950 40 0000 C CNN
+F 2 "" H 4750 2850 60 0001 C CNN
+F 3 "" H 4750 2850 60 0001 C CNN
+ 1 4750 2850
+ -1 0 0 1
+$EndComp
+Text Label 1750 2000 0 60 ~ 0
+PIEZO_IN
+Text Label 10000 4300 0 60 ~ 0
+PIEZO_OUT
+Text Label 5200 5300 0 60 ~ 0
+Vpil_0_3,3V
+$Comp
+L MPSA42 Q6
+U 1 1 4B3A137D
+P 8500 3700
+AR Path="/4B3A13A4/4B3A137D" Ref="Q6" Part="1"
+AR Path="/4B3A1333/4B3A137D" Ref="Q2" Part="1"
+F 0 "Q6" H 8500 3950 50 0000 R CNN
+F 1 "MPAS42" H 8500 3850 50 0000 R CNN
+F 2 "Discret:TO92-CBE" H 8500 3700 60 0001 C CNN
+F 3 "" H 8500 3700 60 0001 C CNN
+ 1 8500 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L MPSA92 Q7
+U 1 1 4B3A137C
+P 8500 4800
+AR Path="/4B3A13A4/4B3A137C" Ref="Q7" Part="1"
+AR Path="/4B3A1333/4B3A137C" Ref="Q3" Part="1"
+F 0 "Q7" H 8500 4650 60 0000 R CNN
+F 1 "MPAS92" H 8500 4950 60 0000 R CNN
+F 2 "Discret:TO92-CBE" H 8500 4800 60 0001 C CNN
+F 3 "" H 8500 4800 60 0001 C CNN
+ 1 8500 4800
+ 1 0 0 1
+$EndComp
+$Comp
+L D_Small D7
+U 1 1 4B3A137B
+P 7900 4500
+AR Path="/4B3A13A4/4B3A137B" Ref="D7" Part="1"
+AR Path="/4B3A1333/4B3A137B" Ref="D4" Part="1"
+F 0 "D7" V 7850 4700 50 0000 C CNN
+F 1 "1N4148" V 7950 4700 50 0000 C CNN
+F 2 "Discret:D3" H 7900 4500 60 0001 C CNN
+F 3 "" H 7900 4500 60 0001 C CNN
+ 1 7900 4500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR023
+U 1 1 4B3A137A
+P 8600 5300
+AR Path="/4B3A13A4/4B3A137A" Ref="#PWR023" Part="1"
+AR Path="/4B3A1333/4B3A137A" Ref="#PWR039" Part="1"
+F 0 "#PWR023" H 8600 5300 30 0001 C CNN
+F 1 "GND" H 8600 5230 30 0001 C CNN
+F 2 "" H 8600 5300 60 0001 C CNN
+F 3 "" H 8600 5300 60 0001 C CNN
+ 1 8600 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L MPSA42 Q8
+U 1 1 4B3A1379
+P 7800 5100
+AR Path="/4B3A13A4/4B3A1379" Ref="Q8" Part="1"
+AR Path="/4B3A1333/4B3A1379" Ref="Q4" Part="1"
+F 0 "Q8" H 7800 4950 50 0000 R CNN
+F 1 "MPAS42" H 7800 5250 50 0000 R CNN
+F 2 "Discret:TO92-CBE" H 7800 5100 60 0001 C CNN
+F 3 "" H 7800 5100 60 0001 C CNN
+ 1 7800 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR024
+U 1 1 4B3A1378
+P 7000 5200
+AR Path="/4B3A13A4/4B3A1378" Ref="#PWR024" Part="1"
+AR Path="/4B3A1333/4B3A1378" Ref="#PWR040" Part="1"
+F 0 "#PWR024" H 7000 5200 30 0001 C CNN
+F 1 "GND" H 7000 5130 30 0001 C CNN
+F 2 "" H 7000 5200 60 0001 C CNN
+F 3 "" H 7000 5200 60 0001 C CNN
+ 1 7000 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_Small D6
+U 1 1 4B3A1377
+P 7300 3100
+AR Path="/4B3A13A4/4B3A1377" Ref="D6" Part="1"
+AR Path="/4B3A1333/4B3A1377" Ref="D3" Part="1"
+F 0 "D6" V 7250 3300 50 0000 C CNN
+F 1 "1N4148" V 7350 3300 50 0000 C CNN
+F 2 "Discret:D3" H 7300 3100 60 0001 C CNN
+F 3 "" H 7300 3100 60 0001 C CNN
+ 1 7300 3100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R13
+U 1 1 4B3A1376
+P 7900 2750
+AR Path="/4B3A13A4/4B3A1376" Ref="R13" Part="1"
+AR Path="/4B3A1333/4B3A1376" Ref="R3" Part="1"
+F 0 "R13" V 7980 2750 50 0000 C CNN
+F 1 "470" V 7900 2750 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 7900 2750 60 0001 C CNN
+F 3 "" H 7900 2750 60 0001 C CNN
+ 1 7900 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_Small D5
+U 1 1 4B3A1375
+P 7300 2800
+AR Path="/4B3A13A4/4B3A1375" Ref="D5" Part="1"
+AR Path="/4B3A1333/4B3A1375" Ref="D2" Part="1"
+F 0 "D5" V 7250 3000 50 0000 C CNN
+F 1 "1N4148" V 7350 3000 50 0000 C CNN
+F 2 "Discret:D3" H 7300 2800 60 0001 C CNN
+F 3 "" H 7300 2800 60 0001 C CNN
+ 1 7300 2800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R14
+U 1 1 4B3A1374
+P 7300 3600
+AR Path="/4B3A13A4/4B3A1374" Ref="R14" Part="1"
+AR Path="/4B3A1333/4B3A1374" Ref="R4" Part="1"
+F 0 "R14" V 7380 3600 50 0000 C CNN
+F 1 "220K" V 7300 3600 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 7300 3600 60 0001 C CNN
+F 3 "" H 7300 3600 60 0001 C CNN
+ 1 7300 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR025
+U 1 1 4B3A1373
+P 7300 3850
+AR Path="/4B3A13A4/4B3A1373" Ref="#PWR025" Part="1"
+AR Path="/4B3A1333/4B3A1373" Ref="#PWR041" Part="1"
+F 0 "#PWR025" H 7300 3850 30 0001 C CNN
+F 1 "GND" H 7300 3780 30 0001 C CNN
+F 2 "" H 7300 3850 60 0001 C CNN
+F 3 "" H 7300 3850 60 0001 C CNN
+ 1 7300 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R18
+U 1 1 4B3A1371
+P 7250 5100
+AR Path="/4B3A13A4/4B3A1371" Ref="R18" Part="1"
+AR Path="/4B3A1333/4B3A1371" Ref="R8" Part="1"
+F 0 "R18" V 7150 5100 50 0000 C CNN
+F 1 "1K" V 7250 5100 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 7250 5100 60 0001 C CNN
+F 3 "" H 7250 5100 60 0001 C CNN
+ 1 7250 5100
+ 0 1 1 0
+$EndComp
+$Comp
+L R R22
+U 1 1 4B3A1370
+P 8900 5100
+AR Path="/4B3A13A4/4B3A1370" Ref="R22" Part="1"
+AR Path="/4B3A1333/4B3A1370" Ref="R12" Part="1"
+F 0 "R22" H 9000 4850 50 0000 C CNN
+F 1 "220K" V 8900 5100 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 8900 5100 60 0001 C CNN
+F 3 "" H 8900 5100 60 0001 C CNN
+ 1 8900 5100
+ -1 0 0 1
+$EndComp
+$Comp
+L +12V #U026
+U 1 1 4B3A136F
+P 6300 4950
+AR Path="/4B3A13A4/4B3A136F" Ref="#U026" Part="1"
+AR Path="/4B3A1333/4B3A136F" Ref="#U042" Part="1"
+F 0 "#U026" H 6300 4900 20 0001 C CNN
+F 1 "+12V" H 6300 5050 40 0000 C CNN
+F 2 "" H 6300 4950 60 0001 C CNN
+F 3 "" H 6300 4950 60 0001 C CNN
+ 1 6300 4950
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R19
+U 1 1 4B3A136D
+P 7400 5400
+AR Path="/4B3A13A4/4B3A136D" Ref="R19" Part="1"
+AR Path="/4B3A1333/4B3A136D" Ref="R9" Part="1"
+F 0 "R19" V 7300 5400 50 0000 C CNN
+F 1 "1K" V 7400 5400 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 7400 5400 60 0001 C CNN
+F 3 "" H 7400 5400 60 0001 C CNN
+ 1 7400 5400
+ 0 1 1 0
+$EndComp
+$Comp
+L CONN_2 P5
+U 1 1 4B3A136C
+P 10750 4400
+AR Path="/4B3A13A4/4B3A136C" Ref="P5" Part="1"
+AR Path="/4B3A1333/4B3A136C" Ref="P3" Part="1"
+F 0 "P5" V 10700 4400 40 0000 C CNN
+F 1 "CONN_2" V 10800 4400 40 0000 C CNN
+F 2 "Connect:bornier2" H 10750 4400 60 0001 C CNN
+F 3 "" H 10750 4400 60 0001 C CNN
+ 1 10750 4400
+ 1 0 0 -1
+$EndComp
+Text Label 7100 6400 0 60 ~ 0
+S_OUT+
+$Comp
+L R R16
+U 1 1 4B3A136B
+P 3250 2000
+AR Path="/4B3A13A4/4B3A136B" Ref="R16" Part="1"
+AR Path="/4B3A1333/4B3A136B" Ref="R6" Part="1"
+F 0 "R16" V 3150 2000 50 0000 C CNN
+F 1 "22K" V 3250 2000 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 3250 2000 60 0001 C CNN
+F 3 "" H 3250 2000 60 0001 C CNN
+ 1 3250 2000
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR027
+U 1 1 4B3A136A
+P 1800 2250
+AR Path="/4B3A13A4/4B3A136A" Ref="#PWR027" Part="1"
+AR Path="/4B3A1333/4B3A136A" Ref="#PWR043" Part="1"
+F 0 "#PWR027" H 1800 2250 30 0001 C CNN
+F 1 "GND" H 1800 2180 30 0001 C CNN
+F 2 "" H 1800 2250 60 0001 C CNN
+F 3 "" H 1800 2250 60 0001 C CNN
+ 1 1800 2250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR028
+U 1 1 4B3A1369
+P 4000 2750
+AR Path="/4B3A13A4/4B3A1369" Ref="#PWR028" Part="1"
+AR Path="/4B3A1333/4B3A1369" Ref="#PWR044" Part="1"
+F 0 "#PWR028" H 4000 2750 30 0001 C CNN
+F 1 "GND" H 4000 2680 30 0001 C CNN
+F 2 "" H 4000 2750 60 0001 C CNN
+F 3 "" H 4000 2750 60 0001 C CNN
+ 1 4000 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L LM358N U4
+U 1 1 4B3A1368
+P 6400 5400
+AR Path="/4B3A13A4/4B3A1368" Ref="U4" Part="1"
+AR Path="/4B3A1333/4B3A1368" Ref="U3" Part="1"
+F 0 "U4" H 6450 5600 60 0000 C CNN
+F 1 "LM358N" H 6550 5200 50 0000 C CNN
+F 2 "dip_sockets:DIP-8__300_ELL" H 6400 5400 60 0001 C CNN
+F 3 "" H 6400 5400 60 0001 C CNN
+ 1 6400 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P6
+U 1 1 4B3A1367
+P 1350 2100
+AR Path="/4B3A13A4/4B3A1367" Ref="P6" Part="1"
+AR Path="/4B3A1333/4B3A1367" Ref="P4" Part="1"
+F 0 "P6" V 1300 2100 40 0000 C CNN
+F 1 "CONN_2" V 1400 2100 40 0000 C CNN
+F 2 "Connect:bornier2" H 1350 2100 60 0001 C CNN
+F 3 "" H 1350 2100 60 0001 C CNN
+ 1 1350 2100
+ -1 0 0 -1
+$EndComp
+$Comp
+L C C7
+U 1 1 4B3A1366
+P 4000 2550
+AR Path="/4B3A13A4/4B3A1366" Ref="C7" Part="1"
+AR Path="/4B3A1333/4B3A1366" Ref="C4" Part="1"
+F 0 "C7" H 4100 2650 50 0000 L CNN
+F 1 "4.7nF" H 4100 2450 50 0000 L CNN
+F 2 "Discret:C2" H 4000 2550 60 0001 C CNN
+F 3 "" H 4000 2550 60 0001 C CNN
+ 1 4000 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C8
+U 1 1 4B3A1365
+P 8100 5750
+AR Path="/4B3A13A4/4B3A1365" Ref="C8" Part="1"
+AR Path="/4B3A1333/4B3A1365" Ref="C5" Part="1"
+F 0 "C8" H 8150 5850 50 0000 L CNN
+F 1 "820pF" H 8150 5650 50 0000 L CNN
+F 2 "Discret:C2" H 8100 5750 60 0001 C CNN
+F 3 "" H 8100 5750 60 0001 C CNN
+ 1 8100 5750
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R15
+U 1 1 4B3A1364
+P 9450 4150
+AR Path="/4B3A13A4/4B3A1364" Ref="R15" Part="1"
+AR Path="/4B3A1333/4B3A1364" Ref="R5" Part="1"
+F 0 "R15" V 9530 4150 50 0000 C CNN
+F 1 "47" V 9450 4150 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 9450 4150 60 0001 C CNN
+F 3 "" H 9450 4150 60 0001 C CNN
+ 1 9450 4150
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR029
+U 1 1 4B3A1363
+P 10250 4550
+AR Path="/4B3A13A4/4B3A1363" Ref="#PWR029" Part="1"
+AR Path="/4B3A1333/4B3A1363" Ref="#PWR045" Part="1"
+F 0 "#PWR029" H 10250 4550 30 0001 C CNN
+F 1 "GND" H 10250 4480 30 0001 C CNN
+F 2 "" H 10250 4550 60 0001 C CNN
+F 3 "" H 10250 4550 60 0001 C CNN
+ 1 10250 4550
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R21
+U 1 1 4B3A1362
+P 5250 6400
+AR Path="/4B3A13A4/4B3A1362" Ref="R21" Part="1"
+AR Path="/4B3A1333/4B3A1362" Ref="R11" Part="1"
+F 0 "R21" V 5150 6400 50 0000 C CNN
+F 1 "4,7K" V 5250 6400 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 5250 6400 60 0001 C CNN
+F 3 "" H 5250 6400 60 0001 C CNN
+ 1 5250 6400
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR030
+U 1 1 4B3A1361
+P 5050 6400
+AR Path="/4B3A13A4/4B3A1361" Ref="#PWR030" Part="1"
+AR Path="/4B3A1333/4B3A1361" Ref="#PWR046" Part="1"
+F 0 "#PWR030" H 5050 6400 30 0001 C CNN
+F 1 "GND" H 5050 6330 30 0001 C CNN
+F 2 "" H 5050 6400 60 0001 C CNN
+F 3 "" H 5050 6400 60 0001 C CNN
+ 1 5050 6400
+ 0 1 1 0
+$EndComp
+$Comp
+L MPSA92 Q5
+U 1 1 4B3A1360
+P 7800 3300
+AR Path="/4B3A13A4/4B3A1360" Ref="Q5" Part="1"
+AR Path="/4B3A1333/4B3A1360" Ref="Q1" Part="1"
+F 0 "Q5" H 7800 3150 60 0000 R CNN
+F 1 "MPAS92" H 7800 3450 60 0000 R CNN
+F 2 "Discret:TO92-CBE" H 7800 3300 60 0001 C CNN
+F 3 "" H 7800 3300 60 0001 C CNN
+ 1 7800 3300
+ 1 0 0 1
+$EndComp
+$Comp
+L HT #PWR031
+U 1 1 4B3A135F
+P 7300 2650
+AR Path="/4B3A13A4/4B3A135F" Ref="#PWR031" Part="1"
+AR Path="/4B3A1333/4B3A135F" Ref="#PWR047" Part="1"
+F 0 "#PWR031" H 7300 2770 20 0001 C CNN
+F 1 "HT" H 7300 2740 40 0000 C CNN
+F 2 "" H 7300 2650 60 0001 C CNN
+F 3 "" H 7300 2650 60 0001 C CNN
+ 1 7300 2650
+ 1 0 0 -1
+$EndComp
+$Comp
+L HT #PWR032
+U 1 1 4B3A135E
+P 7900 2550
+AR Path="/4B3A13A4/4B3A135E" Ref="#PWR032" Part="1"
+AR Path="/4B3A1333/4B3A135E" Ref="#PWR048" Part="1"
+F 0 "#PWR032" H 7900 2670 20 0001 C CNN
+F 1 "HT" H 7900 2640 40 0000 C CNN
+F 2 "" H 7900 2550 60 0001 C CNN
+F 3 "" H 7900 2550 60 0001 C CNN
+ 1 7900 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L HT #PWR033
+U 1 1 4B3A135D
+P 8600 3300
+AR Path="/4B3A13A4/4B3A135D" Ref="#PWR033" Part="1"
+AR Path="/4B3A1333/4B3A135D" Ref="#PWR049" Part="1"
+F 0 "#PWR033" H 8600 3420 20 0001 C CNN
+F 1 "HT" H 8600 3390 40 0000 C CNN
+F 2 "" H 8600 3300 60 0001 C CNN
+F 3 "" H 8600 3300 60 0001 C CNN
+ 1 8600 3300
+ 1 0 0 -1
+$EndComp
+$Comp
+L LM358N U4
+U 2 1 4B3A135C
+P 4850 2400
+AR Path="/4B3A13A4/4B3A135C" Ref="U4" Part="2"
+AR Path="/4B3A1333/4B3A135C" Ref="U3" Part="2"
+F 0 "U4" H 4900 2600 60 0000 C CNN
+F 1 "LM358N" H 5000 2200 50 0000 C CNN
+F 2 "dip_sockets:DIP-8__300_ELL" H 4850 2400 60 0001 C CNN
+F 3 "" H 4850 2400 60 0001 C CNN
+ 2 4850 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #U034
+U 1 1 4B3A135B
+P 4750 1950
+AR Path="/4B3A13A4/4B3A135B" Ref="#U034" Part="1"
+AR Path="/4B3A1333/4B3A135B" Ref="#U050" Part="1"
+F 0 "#U034" H 4750 1900 20 0001 C CNN
+F 1 "+12V" H 4750 2050 40 0000 C CNN
+F 2 "" H 4750 1950 60 0001 C CNN
+F 3 "" H 4750 1950 60 0001 C CNN
+ 1 4750 1950
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R17
+U 1 1 4B3A1359
+P 3950 2000
+AR Path="/4B3A13A4/4B3A1359" Ref="R17" Part="1"
+AR Path="/4B3A1333/4B3A1359" Ref="R7" Part="1"
+F 0 "R17" V 3850 2000 50 0000 C CNN
+F 1 "22K" V 3950 2000 50 0000 C CNN
+F 2 "Discret:R3-LARGE_PADS" H 3950 2000 60 0001 C CNN
+F 3 "" H 3950 2000 60 0001 C CNN
+ 1 3950 2000
+ 0 1 1 0
+$EndComp
+$Comp
+L C C6
+U 1 1 4B3A1358
+P 4350 1600
+AR Path="/4B3A13A4/4B3A1358" Ref="C6" Part="1"
+AR Path="/4B3A1333/4B3A1358" Ref="C3" Part="1"
+F 0 "C6" V 4200 1600 50 0000 C CNN
+F 1 "15nF" V 4500 1600 50 0000 C CNN
+F 2 "Discret:C2" H 4350 1600 60 0001 C CNN
+F 3 "" H 4350 1600 60 0001 C CNN
+ 1 4350 1600
+ 0 1 1 0
+$EndComp
+Text Notes 3100 2900 0 60 ~ 0
+Filter:\nFc =1000Hz
+$Comp
+L POT RV2
+U 1 1 4B3A1357
+P 5850 6400
+AR Path="/4B3A13A4/4B3A1357" Ref="RV2" Part="1"
+AR Path="/4B3A1333/4B3A1357" Ref="RV1" Part="1"
+F 0 "RV2" H 5850 6300 50 0000 C CNN
+F 1 "4,7K" H 5850 6400 50 0000 C CNN
+F 2 "Discret:RV2" H 5850 6400 60 0001 C CNN
+F 3 "" H 5850 6400 60 0001 C CNN
+ 1 5850 6400
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7900 4100 7900 4400
+Wire Wire Line
+ 8600 4450 9300 4450
+Wire Wire Line
+ 8600 4450 8600 4600
+Wire Wire Line
+ 8600 4150 9300 4150
+Wire Wire Line
+ 8600 4150 8600 3900
+Wire Wire Line
+ 2850 2450 2850 2400
+Wire Wire Line
+ 4350 2000 4350 2300
+Wire Wire Line
+ 4350 2200 4000 2200
+Wire Wire Line
+ 4000 2200 4000 2400
+Connection ~ 4350 2200
+Wire Wire Line
+ 4000 2750 4000 2700
+Wire Wire Line
+ 4750 2850 4750 2800
+Wire Wire Line
+ 4750 1950 4750 2000
+Wire Wire Line
+ 7300 2700 7300 2650
+Wire Wire Line
+ 7900 2550 7900 2600
+Wire Wire Line
+ 7900 4800 8300 4800
+Connection ~ 7900 4800
+Wire Wire Line
+ 8100 5900 8100 5950
+Wire Wire Line
+ 6300 4950 6300 5000
+Wire Wire Line
+ 6300 5850 6300 5800
+Wire Wire Line
+ 5050 6400 5100 6400
+Wire Wire Line
+ 7100 5100 7000 5100
+Wire Wire Line
+ 7300 3000 7300 2900
+$EndSCHEMATC
diff --git a/demos/complex_hierarchy/complex_hierarchy-cache.lib b/demos/complex_hierarchy/complex_hierarchy-cache.lib
new file mode 100644
index 0000000..7e82bbd
--- /dev/null
+++ b/demos/complex_hierarchy/complex_hierarchy-cache.lib
@@ -0,0 +1,324 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +12C
+#
+DEF +12C #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "+12C" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -30 50 0 100 N
+P 2 0 1 0 0 0 0 100 N
+P 2 0 1 0 0 100 30 50 N
+X +12C 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# +12V
+#
+DEF +12V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "+12V" 0 140 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -30 50 0 100 N
+P 2 0 1 0 0 0 0 100 N
+P 2 0 1 0 0 100 30 50 N
+X +12V 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# -VAA
+#
+DEF -VAA #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 20 H I C CNN
+F1 "-VAA" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X -VAA 1 0 0 0 U 20 20 0 0 W N
+P 3 0 1 0 0 0 0 50 0 50 N
+P 7 0 1 0 0 80 30 50 -20 50 -30 50 0 80 0 80 0 80 F
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "C" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ C?
+ C_????_*
+ C_????
+ SMD*_c
+ Capacitor*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "CP" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ CP*
+ Elko*
+ TantalC*
+ C*elec
+ c_elec*
+ SMD*_Pol
+$ENDFPLIST
+DRAW
+S -90 20 -90 40 0 1 0 N
+S -90 20 90 20 0 1 0 N
+S -70 90 -30 90 0 1 0 N
+S -50 70 -50 110 0 1 0 N
+S 90 -20 -90 -40 0 1 0 F
+S 90 40 -90 40 0 1 0 N
+S 90 40 90 20 0 1 0 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# D_Small
+#
+DEF D_Small D 0 10 N N 1 F N
+F0 "D" -50 80 50 H V L CNN
+F1 "D_Small" -150 -80 50 H V L CNN
+F2 "" 0 0 60 V V C CNN
+F3 "" 0 0 60 V V C CNN
+$FPLIST
+ Diode_*
+ D-Pak_TO252AA
+ *SingleDiode
+ *SingleDiode*
+ *_Diode_*
+$ENDFPLIST
+DRAW
+P 2 0 1 0 -30 -40 -30 40 N
+P 4 0 1 0 30 -40 -30 0 30 40 30 -40 F
+X K 1 -100 0 70 R 50 50 1 1 P
+X A 2 100 0 70 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "GND" 0 -123 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 20 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# HT
+#
+DEF HT #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 120 50 H I C CNN
+F1 "HT" 0 90 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X HT 1 0 0 0 U 20 20 0 0 W N
+P 3 0 1 0 0 0 0 40 0 40 N
+P 6 0 1 0 0 40 20 20 0 70 -20 20 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# ICL7660
+#
+DEF ICL7660 U 0 40 Y Y 1 F N
+F0 "U" 200 400 70 H V L CNN
+F1 "ICL7660" 50 -450 70 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -550 -350 550 350 0 1 0 N
+X CAP+ 2 -850 250 300 R 60 60 1 1 I
+X GND 3 -50 -650 300 U 60 60 1 1 W
+X CAP- 4 -850 50 300 R 60 60 1 1 I
+X VOUT 5 850 150 300 L 60 60 1 1 w
+X LV 6 850 -150 300 L 60 60 1 1 I
+X OSC 7 -850 -150 300 R 60 60 1 1 I
+X V+ 8 -50 650 300 D 60 60 1 1 W
+ENDDRAW
+ENDDEF
+#
+# LM358
+#
+DEF LM358 U 0 20 Y Y 2 F N
+F0 "U" -50 200 60 H V L CNN
+F1 "LM358" -50 -250 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LMC6062 LMC6082 LM358N TL072 TL082
+DRAW
+P 4 0 1 6 -200 200 200 0 -200 -200 -200 200 f
+X V- 4 -100 -400 250 U 40 40 0 1 W
+X V+ 8 -100 400 250 D 40 40 0 1 W
+X ~ 1 500 0 300 L 40 40 1 1 O
+X - 2 -500 -100 300 R 40 40 1 1 I
+X + 3 -500 100 300 R 40 40 1 1 I
+X + 5 -500 100 300 R 40 40 2 1 I
+X - 6 -500 -100 300 R 40 40 2 1 I
+X ~ 7 500 0 300 L 40 40 2 1 O
+ENDDRAW
+ENDDEF
+#
+# MPSA42
+#
+DEF MPSA42 Q 0 40 Y N 1 F N
+F0 "Q" 150 -150 60 H V L CNN
+F1 "MPSA42" 150 150 60 H V L CNN
+F2 "TO92-CBE" 150 0 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ TO92-CBE
+$ENDFPLIST
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X B B -200 0 200 R 40 40 1 1 I
+X C C 100 200 100 D 40 40 1 1 P
+X E E 100 -200 100 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# MPSA92
+#
+DEF MPSA92 Q 0 40 Y N 1 F N
+F0 "Q" 150 -150 60 H V L CNN
+F1 "MPSA92" 150 150 60 H V L CNN
+F2 "TO92-CBE" 150 0 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ TO92-CBE
+$ENDFPLIST
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X B B -200 0 200 R 40 40 1 1 I
+X C C 100 200 100 D 40 40 1 1 P
+X E E 100 -200 100 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R_*
+ Resistor_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 60 60 1 1 P
+X ~ 2 0 -150 50 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "VCC" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 75 25 0 1 0 N
+P 2 0 1 0 0 0 0 50 N
+X VCC 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/complex_hierarchy/complex_hierarchy.kicad_pcb b/demos/complex_hierarchy/complex_hierarchy.kicad_pcb
new file mode 100644
index 0000000..1819634
--- /dev/null
+++ b/demos/complex_hierarchy/complex_hierarchy.kicad_pcb
@@ -0,0 +1,3981 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-06-24 BZR 5819)-product")
+
+ (general
+ (links 112)
+ (no_connects 0)
+ (area 88.163399 51.714399 188.696601 131.927601)
+ (thickness 1.6002)
+ (drawings 6)
+ (tracks 360)
+ (zones 0)
+ (modules 68)
+ (nets 53)
+ )
+
+ (page A4)
+ (title_block
+ (title Actionneur_piezo)
+ (company "Kicad devs")
+ (comment 1 Demo)
+ )
+
+ (layers
+ (0 Composant power)
+ (31 Cuivre signal)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.4)
+ (trace_clearance 0.3)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2032)
+ (segment_width 0.3)
+ (edge_width 0.1)
+ (via_size 1.651)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.2032)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.2032)
+ (pcb_text_width 0.3)
+ (pcb_text_size 2 2)
+ (mod_edge_width 0.2)
+ (mod_text_size 1 1)
+ (mod_text_width 0.2)
+ (pad_size 2.286 2.286)
+ (pad_drill 0.8128)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 83.5 138)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x000fc_80000001)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (excludeedgelayer false)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin true)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 -VAA)
+ (net 2 /12Vext)
+ (net 3 /ampli_ht_horizontal/PIEZO_IN)
+ (net 4 /ampli_ht_horizontal/PIEZO_OUT)
+ (net 5 /ampli_ht_horizontal/S_OUT+)
+ (net 6 /ampli_ht_horizontal/Vpil_0_3,3V)
+ (net 7 /ampli_ht_vertical/PIEZO_IN)
+ (net 8 /ampli_ht_vertical/PIEZO_OUT)
+ (net 9 /ampli_ht_vertical/S_OUT+)
+ (net 10 /ampli_ht_vertical/Vpil_0_3,3V)
+ (net 11 GND)
+ (net 12 HT)
+ (net 13 "Net-(C10-Pad1)")
+ (net 14 "Net-(C10-Pad2)")
+ (net 15 "Net-(C12-Pad1)")
+ (net 16 "Net-(C14-Pad1)")
+ (net 17 "Net-(C3-Pad2)")
+ (net 18 "Net-(C4-Pad1)")
+ (net 19 "Net-(C5-Pad1)")
+ (net 20 "Net-(C6-Pad2)")
+ (net 21 "Net-(C7-Pad1)")
+ (net 22 "Net-(C8-Pad1)")
+ (net 23 "Net-(D4-Pad1)")
+ (net 24 "Net-(D4-Pad2)")
+ (net 25 "Net-(D7-Pad1)")
+ (net 26 "Net-(D7-Pad2)")
+ (net 27 "Net-(Q1-PadE)")
+ (net 28 "Net-(Q2-PadE)")
+ (net 29 "Net-(Q3-PadE)")
+ (net 30 "Net-(Q4-PadB)")
+ (net 31 "Net-(Q4-PadE)")
+ (net 32 "Net-(Q5-PadE)")
+ (net 33 "Net-(Q6-PadE)")
+ (net 34 "Net-(Q7-PadE)")
+ (net 35 "Net-(Q8-PadB)")
+ (net 36 "Net-(Q8-PadE)")
+ (net 37 "Net-(R11-Pad1)")
+ (net 38 "Net-(R19-Pad2)")
+ (net 39 "Net-(R21-Pad1)")
+ (net 40 "Net-(R9-Pad2)")
+ (net 41 "Net-(RV1-Pad2)")
+ (net 42 "Net-(RV2-Pad2)")
+ (net 43 VCC)
+ (net 44 "Net-(U1-Pad6)")
+ (net 45 "Net-(U1-Pad7)")
+ (net 46 +12V)
+ (net 47 "Net-(D2-Pad1)")
+ (net 48 "Net-(D3-Pad1)")
+ (net 49 "Net-(D5-Pad1)")
+ (net 50 "Net-(D6-Pad1)")
+ (net 51 "Net-(D8-Pad2)")
+ (net 52 "Net-(D9-Pad2)")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.3)
+ (trace_width 0.4)
+ (via_dia 1.651)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.2032)
+ (add_net +12V)
+ (add_net /ampli_ht_horizontal/PIEZO_IN)
+ (add_net /ampli_ht_horizontal/PIEZO_OUT)
+ (add_net /ampli_ht_horizontal/S_OUT+)
+ (add_net /ampli_ht_horizontal/Vpil_0_3,3V)
+ (add_net /ampli_ht_vertical/PIEZO_IN)
+ (add_net /ampli_ht_vertical/PIEZO_OUT)
+ (add_net /ampli_ht_vertical/S_OUT+)
+ (add_net /ampli_ht_vertical/Vpil_0_3,3V)
+ (add_net "Net-(C10-Pad1)")
+ (add_net "Net-(C10-Pad2)")
+ (add_net "Net-(C12-Pad1)")
+ (add_net "Net-(C14-Pad1)")
+ (add_net "Net-(C3-Pad2)")
+ (add_net "Net-(C4-Pad1)")
+ (add_net "Net-(C5-Pad1)")
+ (add_net "Net-(C6-Pad2)")
+ (add_net "Net-(C7-Pad1)")
+ (add_net "Net-(C8-Pad1)")
+ (add_net "Net-(D2-Pad1)")
+ (add_net "Net-(D3-Pad1)")
+ (add_net "Net-(D4-Pad1)")
+ (add_net "Net-(D4-Pad2)")
+ (add_net "Net-(D5-Pad1)")
+ (add_net "Net-(D6-Pad1)")
+ (add_net "Net-(D7-Pad1)")
+ (add_net "Net-(D7-Pad2)")
+ (add_net "Net-(D8-Pad2)")
+ (add_net "Net-(D9-Pad2)")
+ (add_net "Net-(Q1-PadE)")
+ (add_net "Net-(Q2-PadE)")
+ (add_net "Net-(Q3-PadE)")
+ (add_net "Net-(Q4-PadB)")
+ (add_net "Net-(Q4-PadE)")
+ (add_net "Net-(Q5-PadE)")
+ (add_net "Net-(Q6-PadE)")
+ (add_net "Net-(Q7-PadE)")
+ (add_net "Net-(Q8-PadB)")
+ (add_net "Net-(Q8-PadE)")
+ (add_net "Net-(R11-Pad1)")
+ (add_net "Net-(R19-Pad2)")
+ (add_net "Net-(R21-Pad1)")
+ (add_net "Net-(R9-Pad2)")
+ (add_net "Net-(RV1-Pad2)")
+ (add_net "Net-(RV2-Pad2)")
+ (add_net "Net-(U1-Pad6)")
+ (add_net "Net-(U1-Pad7)")
+ )
+
+ (net_class power ""
+ (clearance 0.3)
+ (trace_width 0.6)
+ (via_dia 1.651)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.2032)
+ (add_net -VAA)
+ (add_net /12Vext)
+ (add_net GND)
+ (add_net HT)
+ (add_net VCC)
+ )
+
+ (module discret:CP6 (layer Composant) (tedit 0) (tstamp 5592CF06)
+ (at 109.855 74.676 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4B03CEC2)
+ (fp_text reference C1 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF (at 0.635 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 43 VCC))
+ (pad 2 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP6 (layer Composant) (tedit 0) (tstamp 5592CF15)
+ (at 133.985 60.706 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4AE173CF)
+ (fp_text reference C2 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF/20V (at 0.635 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 46 +12V))
+ (pad 2 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF24)
+ (at 116.205 110.236 180)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A1333/4B3A1358)
+ (fp_text reference C3 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 15nF (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ampli_ht_vertical/Vpil_0_3,3V))
+ (pad 2 thru_hole circle (at 2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(C3-Pad2)"))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF2E)
+ (at 116.205 112.776)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A1333/4B3A1366)
+ (fp_text reference C4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 4.7nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF38)
+ (at 140.716 130.048)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A1333/4B3A1365)
+ (fp_text reference C5 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 820pF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(C5-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF42)
+ (at 116.205 81.026 180)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A13A4/4B3A1358)
+ (fp_text reference C6 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 15nF (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ampli_ht_horizontal/Vpil_0_3,3V))
+ (pad 2 thru_hole circle (at 2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(C6-Pad2)"))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF4C)
+ (at 116.205 84.836)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A13A4/4B3A1366)
+ (fp_text reference C7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 4.7nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(C7-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF56)
+ (at 140.589 104.14)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A13A4/4B3A1365)
+ (fp_text reference C8 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 820pF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(C8-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP8 (layer Composant) (tedit 0) (tstamp 5592CF60)
+ (at 112.395 60.706 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4B3A1558)
+ (fp_text reference C9 (at 1.27 1.27 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF/63V (at 1.27 -1.27 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -10.16 0) (end -8.89 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -7.62 1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -8.89 1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -8.89 -1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -7.62 -2.54) (end 8.89 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 8.89 -2.54) (end 8.89 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 8.89 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 8.89 0) (end 10.16 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 -2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.35 2.54) (end -6.35 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -10.16 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (pad 2 thru_hole circle (at 10.16 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/CP8.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.8 0.8 0.8))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP6 (layer Composant) (tedit 0) (tstamp 5592CF70)
+ (at 147.32 77.216)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4B4B15E7)
+ (fp_text reference C10 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10uF (at 0.635 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(C10-Pad1)"))
+ (pad 2 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 "Net-(C10-Pad2)"))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP6 (layer Composant) (tedit 0) (tstamp 5592CF7F)
+ (at 160.02 70.866 90)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4B4B15D9)
+ (fp_text reference C11 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10uF (at 0.635 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (pad 2 thru_hole circle (at 7.62 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 -VAA))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF8E)
+ (at 116.205 107.061)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A1333/4B4F3641)
+ (fp_text reference C12 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 150nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C12-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54F2ADF4) (tstamp 5592CF98)
+ (at 116.205 78.486)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4B3A13A4/4B4F3641)
+ (fp_text reference C14 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (fp_text value 150nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(C14-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D5 (layer Composant) (tedit 0) (tstamp 5592CFA2)
+ (at 109.855 68.326)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /4AE172F4)
+ (fp_text reference D1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4007 (at -0.254 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.15))
+ (pad 2 thru_hole circle (at -6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /12Vext))
+ (pad 1 thru_hole rect (at 6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 46 +12V))
+ (model Discret.3dshapes/D5.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592CFB1)
+ (at 131.445 106.426 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A1333/4B3A1375)
+ (fp_text reference D2 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 47 "Net-(D2-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592CFC0)
+ (at 131.445 108.966 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A1333/4B3A1377)
+ (fp_text reference D3 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 48 "Net-(D3-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 47 "Net-(D2-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592CFCF)
+ (at 140.97 119.761 270)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A1333/4B3A137B)
+ (fp_text reference D4 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D4-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 "Net-(D4-Pad2)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592CFDE)
+ (at 128.905 79.756 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A13A4/4B3A1375)
+ (fp_text reference D5 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 49 "Net-(D5-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592CFED)
+ (at 128.905 82.296)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A13A4/4B3A1377)
+ (fp_text reference D6 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 50 "Net-(D6-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 49 "Net-(D5-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592CFFC)
+ (at 141.605 93.726 270)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A13A4/4B3A137B)
+ (fp_text reference D7 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(D7-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 "Net-(D7-Pad2)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592D00B)
+ (at 144.78 119.761 270)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A1333/4B616AFA)
+ (fp_text reference D8 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 "Net-(D4-Pad2)"))
+ (pad 2 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 51 "Net-(D8-Pad2)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 0) (tstamp 5592D01A)
+ (at 145.415 93.726 270)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4B3A13A4/4B616AFA)
+ (fp_text reference D9 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4148 (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 "Net-(D7-Pad2)"))
+ (pad 2 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 52 "Net-(D9-Pad2)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 0) (tstamp 5592D029)
+ (at 95.885 59.436 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4B3A12F4)
+ (fp_text reference P1 (at 0 -5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 0) (tstamp 5592D033)
+ (at 95.885 72.136 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4AD71B06)
+ (fp_text reference P2 (at 0 -5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /12Vext))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 0) (tstamp 5592D03D)
+ (at 182.245 120.396 90)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4B3A1333/4B3A136C)
+ (fp_text reference P3 (at 0 -5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /ampli_ht_vertical/PIEZO_OUT))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 0) (tstamp 5592D047)
+ (at 94.615 114.046 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4B3A1333/4B3A1367)
+ (fp_text reference P4 (at 0 -5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /ampli_ht_vertical/PIEZO_IN))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 0) (tstamp 5592D051)
+ (at 182.245 97.536 90)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4B3A13A4/4B3A136C)
+ (fp_text reference P5 (at 0 -5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /ampli_ht_horizontal/PIEZO_OUT))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 0) (tstamp 5592D05B)
+ (at 95.885 87.376 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4B3A13A4/4B3A1367)
+ (fp_text reference P6 (at 0 -5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /ampli_ht_horizontal/PIEZO_IN))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D065)
+ (at 131.445 115.316)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A1333/4B3A1360)
+ (fp_text reference Q1 (at 0.762 0.635) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS92 (at 0.254 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(Q1-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 48 "Net-(D3-Pad1)"))
+ (pad C thru_hole circle (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 51 "Net-(D8-Pad2)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D073)
+ (at 150.495 116.586)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A1333/4B3A137D)
+ (fp_text reference Q2 (at 0.762 0.635) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS42 (at 0.254 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(Q2-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 51 "Net-(D8-Pad2)"))
+ (pad C thru_hole circle (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D081)
+ (at 149.225 124.206 180)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A1333/4B3A137C)
+ (fp_text reference Q3 (at 0.762 0.635 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS92 (at 0.254 -3.048 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 "Net-(Q3-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D4-Pad1)"))
+ (pad C thru_hole circle (at 1.27 -1.27 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D08F)
+ (at 132.715 125.476)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A1333/4B3A1379)
+ (fp_text reference Q4 (at 0.762 0.635) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS42 (at 0.254 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 "Net-(Q4-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 "Net-(Q4-PadB)"))
+ (pad C thru_hole circle (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D4-Pad1)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D09D)
+ (at 131.445 88.646)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A13A4/4B3A1360)
+ (fp_text reference Q5 (at 0.762 0.635) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS92 (at 0.254 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 "Net-(Q5-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 50 "Net-(D6-Pad1)"))
+ (pad C thru_hole circle (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 52 "Net-(D9-Pad2)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D0AB)
+ (at 150.495 89.916)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A13A4/4B3A137D)
+ (fp_text reference Q6 (at 0.762 0.635) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS42 (at 0.254 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 "Net-(Q6-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 52 "Net-(D9-Pad2)"))
+ (pad C thru_hole circle (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D0B9)
+ (at 149.225 99.441 180)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A13A4/4B3A137C)
+ (fp_text reference Q7 (at 0.762 0.635 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS92 (at 0.254 -3.048 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 "Net-(Q7-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(D7-Pad1)"))
+ (pad C thru_hole circle (at 1.27 -1.27 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-CBE (layer Composant) (tedit 0) (tstamp 5592D0C7)
+ (at 131.445 98.806)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4B3A13A4/4B3A1379)
+ (fp_text reference Q8 (at 0.762 0.635) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value MPAS42 (at 0.254 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad E thru_hole rect (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 36 "Net-(Q8-PadE)"))
+ (pad B thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 35 "Net-(Q8-PadB)"))
+ (pad C thru_hole circle (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(D7-Pad1)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D0D5)
+ (at 142.875 108.966 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1376)
+ (fp_text reference R3 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 470 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(Q1-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D0E2)
+ (at 122.555 119.126 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1374)
+ (fp_text reference R4 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 220K (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 48 "Net-(D3-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D0EF)
+ (at 169.545 119.126 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1364)
+ (fp_text reference R5 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /ampli_ht_vertical/PIEZO_OUT))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(Q2-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D0FC)
+ (at 106.045 110.236 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A136B)
+ (fp_text reference R6 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 22K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(C3-Pad2)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C12-Pad1)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D109)
+ (at 106.045 112.776 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1359)
+ (fp_text reference R7 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 22K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(C3-Pad2)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D116)
+ (at 122.555 128.016 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1371)
+ (fp_text reference R8 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 "Net-(Q4-PadB)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D123)
+ (at 130.683 120.142 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A136D)
+ (fp_text reference R9 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 "Net-(Q4-PadE)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 40 "Net-(R9-Pad2)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D130)
+ (at 140.589 127.381 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B61688C)
+ (fp_text reference R10 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 5,6K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D4-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(C5-Pad1)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D13D)
+ (at 102.87 122.936 90)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1362)
+ (fp_text reference R11 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4,7K (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 90) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 37 "Net-(R11-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 90) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D14A)
+ (at 156.21 120.396 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B3A1370)
+ (fp_text reference R12 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 220K (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /ampli_ht_vertical/S_OUT+))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 "Net-(Q3-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D157)
+ (at 141.605 86.106 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1376)
+ (fp_text reference R13 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 470 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 HT))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 "Net-(Q5-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D164)
+ (at 141.605 81.026)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1374)
+ (fp_text reference R14 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 220K (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 50 "Net-(D6-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D171)
+ (at 169.545 91.186 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1364)
+ (fp_text reference R15 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /ampli_ht_horizontal/PIEZO_OUT))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 "Net-(Q6-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D17E)
+ (at 106.045 82.296 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A136B)
+ (fp_text reference R16 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 22K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(C6-Pad2)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(C14-Pad1)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D18B)
+ (at 106.045 84.836)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1359)
+ (fp_text reference R17 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 22K (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(C7-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(C6-Pad2)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D198)
+ (at 121.793 101.346 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1371)
+ (fp_text reference R18 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 35 "Net-(Q8-PadB)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1A5)
+ (at 122.301 94.996 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A136D)
+ (fp_text reference R19 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 36 "Net-(Q8-PadE)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 38 "Net-(R19-Pad2)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1B2)
+ (at 137.795 101.346 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B61688C)
+ (fp_text reference R20 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 5,6K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(D7-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(C8-Pad1)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1BF)
+ (at 102.235 98.806 90)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1362)
+ (fp_text reference R21 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4,7K (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 90) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 39 "Net-(R21-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 90) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1CC)
+ (at 156.845 93.726 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B3A1370)
+ (fp_text reference R22 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 220K (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /ampli_ht_horizontal/S_OUT+))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 "Net-(Q7-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1D9)
+ (at 106.045 107.061 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B4F363E)
+ (fp_text reference R23 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C12-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /ampli_ht_vertical/PIEZO_IN))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1E6)
+ (at 106.553 78.74 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B4F363E)
+ (fp_text reference R24 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(C14-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /ampli_ht_horizontal/PIEZO_IN))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D1F3)
+ (at 169.545 122.936 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B616B96)
+ (fp_text reference R25 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /ampli_ht_vertical/PIEZO_OUT))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 "Net-(Q3-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D200)
+ (at 160.02 120.396 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A1333/4B617B88)
+ (fp_text reference R26 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 220K (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /ampli_ht_vertical/S_OUT+))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(Q2-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D20D)
+ (at 169.545 97.536 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B616B96)
+ (fp_text reference R27 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47 (at 0 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /ampli_ht_horizontal/PIEZO_OUT))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 "Net-(Q7-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3-LARGE_PADS (layer Composant) (tedit 0) (tstamp 5592D21A)
+ (at 161.29 93.726 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4B3A13A4/4B617B88)
+ (fp_text reference R28 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 220K (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /ampli_ht_horizontal/S_OUT+))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.651 1.651) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 "Net-(Q6-PadE)"))
+ (model Discret.3dshapes/R3-LARGE_PADS.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:RV2 (layer Composant) (tedit 0) (tstamp 5592D227)
+ (at 95.885 124.206)
+ (descr "Resistance variable / potentiometre")
+ (tags R)
+ (path /4B3A1333/4B3A1357)
+ (fp_text reference RV1 (at 0 -5.08) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4,7K (at -0.254 5.207) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0.381) (end 0 -3.175) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 37 "Net-(R11-Pad1)"))
+ (pad 2 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 41 "Net-(RV1-Pad2)"))
+ (pad 3 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /ampli_ht_vertical/S_OUT+))
+ (model Discret.3dshapes/RV2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:RV2 (layer Composant) (tedit 0) (tstamp 5592D22E)
+ (at 95.885 98.806)
+ (descr "Resistance variable / potentiometre")
+ (tags R)
+ (path /4B3A13A4/4B3A1357)
+ (fp_text reference RV2 (at 0 -5.08) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4,7K (at -0.254 5.207) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0.381) (end 0 -3.175) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 39 "Net-(R21-Pad1)"))
+ (pad 2 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 42 "Net-(RV2-Pad2)"))
+ (pad 3 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /ampli_ht_horizontal/S_OUT+))
+ (model Discret.3dshapes/RV2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 0) (tstamp 5592D235)
+ (at 149.225 68.326)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /4B4B1230)
+ (fp_text reference U1 (at -6.35 0 90) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value ICL7660 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole oval (at -1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(C10-Pad1)"))
+ (pad 3 thru_hole oval (at 1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (pad 4 thru_hole oval (at 3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 "Net-(C10-Pad2)"))
+ (pad 5 thru_hole oval (at 3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 -VAA))
+ (pad 6 thru_hole oval (at 1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 44 "Net-(U1-Pad6)"))
+ (pad 7 thru_hole oval (at -1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 45 "Net-(U1-Pad7)"))
+ (pad 8 thru_hole oval (at -3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 43 VCC))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LM78LXX (layer Composant) (tedit 0) (tstamp 5592D247)
+ (at 125.095 69.596 90)
+ (descr "Regulateur TO92 serie LM78Lxx")
+ (tags "TR TO92")
+ (path /4B4B1532)
+ (fp_text reference U2 (at -1.905 3.81 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 78L05 (at -1.27 -5.08 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad VI thru_hole circle (at 1.27 -1.27 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 46 +12V))
+ (pad GND thru_hole rect (at -1.27 -1.27 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 GND))
+ (pad VO thru_hole circle (at -1.27 1.27 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 43 VCC))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 0) (tstamp 5592D255)
+ (at 111.125 120.396)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /4B3A1333/4B3A1368)
+ (fp_text reference U3 (at -6.35 0 90) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value LM358N (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 40 "Net-(R9-Pad2)"))
+ (pad 2 thru_hole oval (at -1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 41 "Net-(RV1-Pad2)"))
+ (pad 3 thru_hole oval (at 1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ampli_ht_vertical/Vpil_0_3,3V))
+ (pad 4 thru_hole oval (at 3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 -VAA))
+ (pad 5 thru_hole oval (at 3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(C4-Pad1)"))
+ (pad 6 thru_hole oval (at 1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ampli_ht_vertical/Vpil_0_3,3V))
+ (pad 7 thru_hole oval (at -1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ampli_ht_vertical/Vpil_0_3,3V))
+ (pad 8 thru_hole oval (at -3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 46 +12V))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 0) (tstamp 5592D267)
+ (at 111.125 92.456)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /4B3A13A4/4B3A1368)
+ (fp_text reference U4 (at -6.35 0 90) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value LM358N (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 38 "Net-(R19-Pad2)"))
+ (pad 2 thru_hole oval (at -1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 42 "Net-(RV2-Pad2)"))
+ (pad 3 thru_hole oval (at 1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ampli_ht_horizontal/Vpil_0_3,3V))
+ (pad 4 thru_hole oval (at 3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 -VAA))
+ (pad 5 thru_hole oval (at 3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(C7-Pad1)"))
+ (pad 6 thru_hole oval (at 1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ampli_ht_horizontal/Vpil_0_3,3V))
+ (pad 7 thru_hole oval (at -1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ampli_ht_horizontal/Vpil_0_3,3V))
+ (pad 8 thru_hole oval (at -3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 46 +12V))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_text "Actionneur\nPiezo New Amp\nV02" (at 175.641 68.326) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "Actionneur\nPiezo New Amp\nV02" (at 176.149 67.183) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_line (start 88.265 131.826) (end 88.265 51.816) (angle 90) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 188.595 131.826) (end 88.265 131.826) (angle 90) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 188.595 51.816) (end 188.595 131.826) (angle 90) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 88.265 51.816) (end 188.595 51.816) (angle 90) (layer Edge.Cuts) (width 0.2032))
+
+ (segment (start 158.75 64.516) (end 160.02 63.246) (width 0.6096) (layer Cuivre) (net 1) (status 400))
+ (segment (start 153.035 64.516) (end 158.75 64.516) (width 0.6096) (layer Cuivre) (net 1) (status 800))
+ (segment (start 128.905 76.581) (end 131.445 76.581) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 131.445 76.581) (end 140.97 67.056) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 140.97 67.056) (end 152.4 67.056) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 152.4 67.056) (end 153.035 66.421) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 153.035 66.421) (end 153.035 64.516) (width 0.6096) (layer Cuivre) (net 1) (status 400))
+ (segment (start 122.555 89.916) (end 122.555 78.486) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 120.015 92.456) (end 122.555 89.916) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 117.602 92.456) (end 120.015 92.456) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 114.935 95.123) (end 117.602 92.456) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 114.935 96.266) (end 114.935 95.123) (width 0.6096) (layer Cuivre) (net 1) (status 800))
+ (segment (start 104.775 106.807) (end 104.775 109.601) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 107.061 104.521) (end 104.775 106.807) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 112.776 104.521) (end 107.061 104.521) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 114.935 102.362) (end 112.776 104.521) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 114.935 96.266) (end 114.935 102.108) (width 0.6096) (layer Composant) (net 1) (status 800))
+ (segment (start 104.775 109.601) (end 104.775 125.857) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 114.935 102.108) (end 114.935 102.362) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 128.143 76.581) (end 127 77.724) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 127 77.724) (end 123.317 77.724) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 123.317 77.724) (end 122.555 78.486) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 128.905 76.581) (end 128.143 76.581) (width 0.6096) (layer Cuivre) (net 1))
+ (segment (start 113.411 126.492) (end 105.41 126.492) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 105.41 126.492) (end 104.775 125.857) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 114.681 126.492) (end 114.935 126.238) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 114.935 126.238) (end 114.935 124.206) (width 0.6096) (layer Composant) (net 1) (status 400))
+ (segment (start 113.411 126.492) (end 114.681 126.492) (width 0.6096) (layer Composant) (net 1))
+ (segment (start 95.885 69.596) (end 97.65792 69.596) (width 0.6096) (layer Cuivre) (net 2) (status 800))
+ (segment (start 98.92792 68.326) (end 97.65792 69.596) (width 0.6096) (layer Cuivre) (net 2))
+ (segment (start 103.505 68.326) (end 98.92792 68.326) (width 0.6096) (layer Cuivre) (net 2) (status 800))
+ (segment (start 95.885 84.836) (end 95.885 83.185) (width 0.4318) (layer Cuivre) (net 3) (status 800))
+ (segment (start 98.552 80.518) (end 100.965 80.518) (width 0.4318) (layer Cuivre) (net 3))
+ (segment (start 95.885 83.185) (end 98.552 80.518) (width 0.4318) (layer Cuivre) (net 3))
+ (segment (start 100.965 80.518) (end 102.743 78.74) (width 0.4318) (layer Cuivre) (net 3) (status 400))
+ (segment (start 173.355 97.536) (end 173.355 91.186) (width 0.4318) (layer Cuivre) (net 4) (status C00))
+ (segment (start 173.355 100.076) (end 182.245 100.076) (width 0.4318) (layer Cuivre) (net 4) (status 400))
+ (segment (start 173.355 97.536) (end 173.355 100.076) (width 0.4318) (layer Cuivre) (net 4) (status 800))
+ (segment (start 156.845 89.916) (end 156.845 92.456) (width 0.4318) (layer Cuivre) (net 5) (status 800))
+ (segment (start 135.89 91.186) (end 139.065 88.011) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 139.065 88.011) (end 142.24 88.011) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 142.24 88.011) (end 143.51 89.281) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 143.51 89.281) (end 143.51 91.821) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 143.51 91.821) (end 146.685 94.996) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 135.89 92.71) (end 135.89 91.186) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 98.425 100.076) (end 98.48596 100.01504) (width 0.4318) (layer Cuivre) (net 5) (status 800))
+ (segment (start 113.7285 102.0445) (end 116.078 99.695) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 116.586 99.187) (end 116.078 99.695) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 98.48596 100.01504) (end 103.69804 100.01504) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 105.7275 102.0445) (end 103.69804 100.01504) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 105.7275 102.0445) (end 113.7285 102.0445) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 118.618 99.187) (end 119.888 99.187) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 119.888 99.187) (end 120.523 98.552) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 123.698 92.71) (end 120.523 95.885) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 120.523 95.885) (end 120.523 98.552) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 135.89 92.71) (end 123.698 92.71) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 118.618 99.187) (end 116.586 99.187) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 156.845 89.916) (end 161.29 89.916) (width 0.4318) (layer Cuivre) (net 5) (status C00))
+ (segment (start 154.305 94.996) (end 146.685 94.996) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 156.845 92.456) (end 154.305 94.996) (width 0.4318) (layer Cuivre) (net 5))
+ (segment (start 116.84 89.916) (end 116.078 90.678) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 116.84 83.566) (end 116.84 89.916) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 114.427 90.678) (end 112.395 88.646) (width 0.4318) (layer Cuivre) (net 6) (status 400))
+ (segment (start 112.395 88.646) (end 112.395 96.266) (width 0.4318) (layer Cuivre) (net 6) (status C00))
+ (segment (start 116.078 90.678) (end 114.427 90.678) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 118.745 81.661) (end 116.84 83.566) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 118.745 81.026) (end 118.745 81.661) (width 0.4318) (layer Cuivre) (net 6) (status 800))
+ (segment (start 109.855 88.646) (end 112.395 88.646) (width 0.4318) (layer Cuivre) (net 6) (status C00))
+ (segment (start 94.615 111.506) (end 94.615 108.204) (width 0.4318) (layer Cuivre) (net 7) (status 800))
+ (segment (start 94.615 108.204) (end 95.758 107.061) (width 0.4318) (layer Cuivre) (net 7))
+ (segment (start 95.758 107.061) (end 102.235 107.061) (width 0.4318) (layer Cuivre) (net 7) (status 400))
+ (segment (start 173.355 122.936) (end 182.245 122.936) (width 0.4318) (layer Cuivre) (net 8) (status C00))
+ (segment (start 173.355 122.936) (end 173.355 119.126) (width 0.4318) (layer Cuivre) (net 8) (status C00))
+ (segment (start 117.221 126.746) (end 115.189 128.778) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 124.0155 125.9205) (end 131.572 118.364) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 131.572 118.364) (end 133.35 118.364) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 118.0465 125.9205) (end 117.221 126.746) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 106.553 128.778) (end 105.029 127.254) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 115.189 128.778) (end 106.553 128.778) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 124.0155 125.9205) (end 118.0465 125.9205) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 99.695 125.476) (end 101.092 124.079) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 103.886 124.079) (end 105.029 125.222) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 101.092 124.079) (end 103.886 124.079) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 105.029 125.222) (end 105.029 127.254) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 98.425 125.476) (end 99.695 125.476) (width 0.4318) (layer Cuivre) (net 9) (status 800))
+ (segment (start 160.02 116.586) (end 156.21 116.586) (width 0.4318) (layer Cuivre) (net 9) (status C00))
+ (segment (start 152.4 120.396) (end 156.21 116.586) (width 0.4318) (layer Cuivre) (net 9) (status 400))
+ (segment (start 152.4 120.396) (end 146.05 120.396) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 134.112 118.364) (end 138.43 114.046) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 138.43 114.046) (end 141.605 114.046) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 141.605 114.046) (end 142.875 115.316) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 142.875 115.316) (end 142.875 117.221) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 142.875 117.221) (end 146.05 120.396) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 133.35 118.364) (end 134.112 118.364) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 112.395 124.206) (end 112.395 121.158) (width 0.4318) (layer Cuivre) (net 10) (status 800))
+ (segment (start 118.745 110.236) (end 117.983 110.236) (width 0.4318) (layer Cuivre) (net 10) (status 800))
+ (segment (start 116.713 111.506) (end 116.713 112.522) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 112.395 116.586) (end 109.855 116.586) (width 0.4318) (layer Cuivre) (net 10) (status C00))
+ (segment (start 117.983 110.236) (end 116.713 111.506) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 112.395 121.158) (end 112.395 116.586) (width 0.4318) (layer Cuivre) (net 10) (status 400))
+ (segment (start 116.713 113.792) (end 118.618 115.697) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 118.618 115.697) (end 118.618 119.253) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 118.618 119.253) (end 116.713 121.158) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 116.713 121.158) (end 112.395 121.158) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 116.713 112.522) (end 116.713 113.792) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 160.02 72.771) (end 160.02 78.486) (width 0.6096) (layer Cuivre) (net 11) (status 400))
+ (segment (start 156.21 68.961) (end 160.02 72.771) (width 0.6096) (layer Cuivre) (net 11))
+ (segment (start 123.825 70.866) (end 125.73 68.961) (width 0.6096) (layer Cuivre) (net 11))
+ (segment (start 123.698 70.866) (end 123.825 70.866) (width 0.6096) (layer Cuivre) (net 11) (status 800))
+ (segment (start 151.765 68.961) (end 156.21 68.961) (width 0.6096) (layer Cuivre) (net 11))
+ (segment (start 150.495 72.136) (end 150.495 70.231) (width 0.6096) (layer Cuivre) (net 11) (status 800))
+ (segment (start 150.495 70.231) (end 151.765 68.961) (width 0.6096) (layer Cuivre) (net 11))
+ (segment (start 152.4 82.931) (end 149.225 86.106) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 154.305 106.426) (end 151.765 108.966) (width 0.6096) (layer Composant) (net 12))
+ (segment (start 121.76506 60.706) (end 120.97258 60.706) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 154.305 86.106) (end 154.305 106.426) (width 0.6096) (layer Composant) (net 12))
+ (segment (start 151.765 83.566) (end 154.305 86.106) (width 0.6096) (layer Composant) (net 12))
+ (segment (start 147.955 83.566) (end 151.765 83.566) (width 0.6096) (layer Composant) (net 12))
+ (segment (start 151.765 108.966) (end 146.685 108.966) (width 0.6096) (layer Composant) (net 12) (status 400))
+ (segment (start 142.11046 82.80146) (end 145.415 86.106) (width 0.6096) (layer Cuivre) (net 12) (status 400))
+ (segment (start 151.765 88.646) (end 149.225 86.106) (width 0.6096) (layer Cuivre) (net 12) (status 800))
+ (segment (start 164.465 61.341) (end 164.465 77.851) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 149.225 86.106) (end 145.415 86.106) (width 0.6096) (layer Cuivre) (net 12) (status 400))
+ (segment (start 159.385 82.931) (end 152.4 82.931) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 120.97258 60.706) (end 117.16258 56.896) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 117.16258 56.896) (end 95.885 56.896) (width 0.6096) (layer Cuivre) (net 12) (status 400))
+ (segment (start 151.765 114.04854) (end 150.93696 113.21542) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 151.765 115.316) (end 151.765 114.04854) (width 0.6096) (layer Cuivre) (net 12) (status 800))
+ (segment (start 146.685 108.966) (end 150.93696 113.21542) (width 0.6096) (layer Cuivre) (net 12) (status 800))
+ (segment (start 121.76506 60.706) (end 124.8537 57.61736) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 135.76046 82.80146) (end 142.11046 82.80146) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 160.74136 57.61736) (end 164.465 61.341) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 145.415 86.106) (end 147.955 83.566) (width 0.6096) (layer Composant) (net 12) (status 800))
+ (segment (start 143.383 108.966) (end 146.685 108.966) (width 0.6096) (layer Cuivre) (net 12) (status 400))
+ (segment (start 164.465 77.851) (end 159.385 82.931) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 124.8537 57.61736) (end 160.74136 57.61736) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 122.555 60.706) (end 121.76506 60.706) (width 0.6096) (layer Cuivre) (net 12) (status 800))
+ (segment (start 140.716 106.426) (end 140.843 106.426) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 140.843 106.426) (end 143.383 108.966) (width 0.6096) (layer Cuivre) (net 12))
+ (segment (start 135.255 106.426) (end 140.716 106.426) (width 0.6096) (layer Cuivre) (net 12) (status 800))
+ (segment (start 132.715 79.756) (end 135.76046 82.80146) (width 0.6096) (layer Cuivre) (net 12) (status 800))
+ (segment (start 139.7 71.501) (end 142.24 68.961) (width 0.4318) (layer Cuivre) (net 13))
+ (segment (start 139.7 77.216) (end 139.7 71.501) (width 0.4318) (layer Cuivre) (net 13) (status 800))
+ (segment (start 146.685 68.961) (end 147.955 70.231) (width 0.4318) (layer Cuivre) (net 13))
+ (segment (start 142.24 68.961) (end 146.685 68.961) (width 0.4318) (layer Cuivre) (net 13))
+ (segment (start 147.955 70.231) (end 147.955 72.136) (width 0.4318) (layer Cuivre) (net 13) (status 400))
+ (segment (start 153.035 75.311) (end 154.94 77.216) (width 0.4318) (layer Cuivre) (net 14) (status 400))
+ (segment (start 153.035 72.136) (end 153.035 75.311) (width 0.4318) (layer Cuivre) (net 14) (status 800))
+ (segment (start 102.997 110.236) (end 106.172 107.061) (width 0.4318) (layer Cuivre) (net 15))
+ (segment (start 109.855 107.061) (end 113.665 107.061) (width 0.4318) (layer Cuivre) (net 15) (status C00))
+ (segment (start 102.235 110.236) (end 102.997 110.236) (width 0.4318) (layer Cuivre) (net 15) (status 800))
+ (segment (start 106.172 107.061) (end 109.855 107.061) (width 0.4318) (layer Cuivre) (net 15) (status 400))
+ (segment (start 106.807 82.296) (end 110.363 78.74) (width 0.4318) (layer Cuivre) (net 16) (status 400))
+ (segment (start 113.411 78.74) (end 113.665 78.486) (width 0.4318) (layer Cuivre) (net 16) (status 400))
+ (segment (start 110.363 78.74) (end 113.411 78.74) (width 0.4318) (layer Cuivre) (net 16) (status 800))
+ (segment (start 102.235 82.296) (end 106.807 82.296) (width 0.4318) (layer Cuivre) (net 16) (status 800))
+ (segment (start 102.235 112.776) (end 104.775 110.236) (width 0.4318) (layer Cuivre) (net 17) (status 800))
+ (segment (start 104.775 110.236) (end 109.855 110.236) (width 0.4318) (layer Cuivre) (net 17) (status 400))
+ (segment (start 113.665 110.236) (end 109.855 110.236) (width 0.4318) (layer Cuivre) (net 17) (status C00))
+ (segment (start 113.665 112.776) (end 114.935 114.046) (width 0.4318) (layer Cuivre) (net 18) (status 800))
+ (segment (start 114.935 114.046) (end 114.935 116.586) (width 0.4318) (layer Cuivre) (net 18) (status 400))
+ (segment (start 109.855 112.776) (end 113.665 112.776) (width 0.4318) (layer Cuivre) (net 18) (status C00))
+ (segment (start 136.779 128.651) (end 138.176 130.048) (width 0.4318) (layer Cuivre) (net 19) (status 400))
+ (segment (start 136.779 127.381) (end 136.779 128.651) (width 0.4318) (layer Cuivre) (net 19) (status 800))
+ (segment (start 109.855 81.661) (end 110.49 81.026) (width 0.4318) (layer Cuivre) (net 20))
+ (segment (start 110.49 81.026) (end 113.665 81.026) (width 0.4318) (layer Cuivre) (net 20) (status 400))
+ (segment (start 109.855 84.836) (end 109.855 82.296) (width 0.4318) (layer Cuivre) (net 20) (status C00))
+ (segment (start 109.855 82.296) (end 109.855 81.661) (width 0.4318) (layer Cuivre) (net 20) (status 800))
+ (segment (start 104.013 86.614) (end 102.235 84.836) (width 0.4318) (layer Cuivre) (net 21) (status 400))
+ (segment (start 113.665 84.836) (end 113.03 84.836) (width 0.4318) (layer Cuivre) (net 21) (status 800))
+ (segment (start 111.252 86.614) (end 104.013 86.614) (width 0.4318) (layer Cuivre) (net 21))
+ (segment (start 113.665 84.836) (end 113.665 85.471) (width 0.4318) (layer Cuivre) (net 21) (status 800))
+ (segment (start 113.03 84.836) (end 111.252 86.614) (width 0.4318) (layer Cuivre) (net 21))
+ (segment (start 114.935 86.741) (end 114.935 88.646) (width 0.4318) (layer Cuivre) (net 21) (status 400))
+ (segment (start 113.665 85.471) (end 114.935 86.741) (width 0.4318) (layer Cuivre) (net 21))
+ (segment (start 133.985 101.346) (end 135.255 101.346) (width 0.4318) (layer Cuivre) (net 22) (status 800))
+ (segment (start 135.255 101.346) (end 138.049 104.14) (width 0.4318) (layer Cuivre) (net 22) (status 400))
+ (segment (start 138.43 123.571) (end 140.97 123.571) (width 0.4318) (layer Cuivre) (net 23) (status 400))
+ (segment (start 140.97 123.952) (end 144.399 127.381) (width 0.4318) (layer Cuivre) (net 23) (status 400))
+ (segment (start 140.97 123.571) (end 140.97 123.952) (width 0.4318) (layer Cuivre) (net 23) (status 800))
+ (segment (start 137.795 124.206) (end 138.43 123.571) (width 0.4318) (layer Cuivre) (net 23))
+ (segment (start 150.495 126.746) (end 150.495 125.476) (width 0.4318) (layer Cuivre) (net 23) (status 400))
+ (segment (start 149.225 128.016) (end 150.495 126.746) (width 0.4318) (layer Cuivre) (net 23))
+ (segment (start 145.415 128.016) (end 149.225 128.016) (width 0.4318) (layer Cuivre) (net 23))
+ (segment (start 144.78 127.381) (end 145.415 128.016) (width 0.4318) (layer Cuivre) (net 23))
+ (segment (start 144.399 127.381) (end 144.78 127.381) (width 0.4318) (layer Cuivre) (net 23) (status 800))
+ (segment (start 133.985 124.206) (end 137.795 124.206) (width 0.4318) (layer Cuivre) (net 23) (status 800))
+ (segment (start 140.97 115.951) (end 140.97 118.491) (width 0.4318) (layer Cuivre) (net 24) (status 800))
+ (segment (start 140.97 118.491) (end 144.78 122.301) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 144.78 122.301) (end 144.78 123.571) (width 0.4318) (layer Cuivre) (net 24) (status 400))
+ (segment (start 141.605 97.536) (end 141.67358 97.536) (width 0.4318) (layer Cuivre) (net 25) (status 800))
+ (segment (start 141.67358 97.536) (end 139.85494 99.35464) (width 0.4318) (layer Cuivre) (net 25))
+ (segment (start 141.605 97.536) (end 141.605 101.346) (width 0.4318) (layer Cuivre) (net 25) (status C00))
+ (segment (start 139.85494 99.35464) (end 134.53364 99.35464) (width 0.4318) (layer Cuivre) (net 25))
+ (segment (start 150.495 101.346) (end 149.225 102.616) (width 0.4318) (layer Cuivre) (net 25))
+ (segment (start 149.225 102.616) (end 145.415 102.616) (width 0.4318) (layer Cuivre) (net 25))
+ (segment (start 145.415 102.616) (end 144.145 101.346) (width 0.4318) (layer Cuivre) (net 25))
+ (segment (start 144.145 101.346) (end 141.605 101.346) (width 0.4318) (layer Cuivre) (net 25) (status 400))
+ (segment (start 150.495 100.711) (end 150.495 101.346) (width 0.4318) (layer Cuivre) (net 25) (status 800))
+ (segment (start 134.53364 99.35464) (end 132.715 97.536) (width 0.4318) (layer Cuivre) (net 25) (status 400))
+ (segment (start 141.605 89.916) (end 141.605 91.821) (width 0.4318) (layer Cuivre) (net 26) (status 800))
+ (segment (start 141.605 91.821) (end 145.415 95.631) (width 0.4318) (layer Cuivre) (net 26))
+ (segment (start 145.415 95.631) (end 145.415 97.536) (width 0.4318) (layer Cuivre) (net 26) (status 400))
+ (segment (start 130.514 116.586) (end 131.44787 115.65213) (width 0.4) (layer Cuivre) (net 27) (tstamp 52E3697F))
+ (segment (start 131.44787 115.65213) (end 131.44787 113.25213) (width 0.4) (layer Cuivre) (net 27) (tstamp 52E36982))
+ (segment (start 131.44787 113.25213) (end 132.7 112) (width 0.4) (layer Cuivre) (net 27) (tstamp 52E36985))
+ (segment (start 132.7 112) (end 136.031 112) (width 0.4) (layer Cuivre) (net 27) (tstamp 52E36987))
+ (segment (start 136.031 112) (end 139.065 108.966) (width 0.4) (layer Cuivre) (net 27) (tstamp 52E36988))
+ (segment (start 130.175 116.586) (end 130.514 116.586) (width 0.4) (layer Cuivre) (net 27))
+ (segment (start 163.83 114.046) (end 161.925 114.046) (width 0.4318) (layer Cuivre) (net 28))
+ (segment (start 165.735 115.951) (end 163.83 114.046) (width 0.4318) (layer Cuivre) (net 28))
+ (segment (start 152.4 117.856) (end 149.225 117.856) (width 0.4318) (layer Cuivre) (net 28) (status 400))
+ (segment (start 156.21 114.046) (end 152.4 117.856) (width 0.4318) (layer Cuivre) (net 28))
+ (segment (start 161.925 114.046) (end 156.21 114.046) (width 0.4318) (layer Cuivre) (net 28))
+ (segment (start 165.735 119.126) (end 165.735 115.951) (width 0.4318) (layer Cuivre) (net 28) (status 800))
+ (segment (start 160.02 121.031) (end 161.925 119.126) (width 0.4318) (layer Cuivre) (net 28))
+ (segment (start 161.925 119.126) (end 165.735 119.126) (width 0.4318) (layer Cuivre) (net 28) (status 400))
+ (segment (start 160.02 124.206) (end 160.02 121.031) (width 0.4318) (layer Cuivre) (net 28) (status 800))
+ (segment (start 154.94 122.936) (end 156.21 124.206) (width 0.4318) (layer Cuivre) (net 29) (status 400))
+ (segment (start 150.495 122.936) (end 154.94 122.936) (width 0.4318) (layer Cuivre) (net 29) (status 800))
+ (segment (start 156.21 126.111) (end 156.845 126.746) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 156.845 126.746) (end 162.56 126.746) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 162.56 126.746) (end 163.195 126.111) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 163.195 126.111) (end 165.735 122.936) (width 0.4318) (layer Cuivre) (net 29) (status 400))
+ (segment (start 156.21 124.206) (end 156.21 126.111) (width 0.4318) (layer Cuivre) (net 29) (status 800))
+ (segment (start 126.365 128.016) (end 130.175 124.206) (width 0.4318) (layer Cuivre) (net 30) (status 800))
+ (segment (start 130.175 124.206) (end 131.445 124.206) (width 0.4318) (layer Cuivre) (net 30) (status 400))
+ (segment (start 132.715 125.476) (end 131.445 126.746) (width 0.4318) (layer Cuivre) (net 31) (status 400))
+ (segment (start 134.493 120.142) (end 134.112 120.142) (width 0.4318) (layer Cuivre) (net 31) (status 800))
+ (segment (start 132.715 121.539) (end 132.715 125.476) (width 0.4318) (layer Cuivre) (net 31))
+ (segment (start 134.112 120.142) (end 132.715 121.539) (width 0.4318) (layer Cuivre) (net 31))
+ (segment (start 130.175 89.916) (end 135.001 89.916) (width 0.4318) (layer Cuivre) (net 32) (status 800))
+ (segment (start 135.001 89.916) (end 137.795 87.122) (width 0.4318) (layer Cuivre) (net 32))
+ (segment (start 137.795 87.122) (end 137.795 86.106) (width 0.4318) (layer Cuivre) (net 32) (status 400))
+ (segment (start 163.83 86.106) (end 160.655 86.106) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 165.735 88.011) (end 163.83 86.106) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 154.305 89.916) (end 153.035 91.186) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 149.225 91.186) (end 153.035 91.186) (width 0.4318) (layer Cuivre) (net 33) (status 800))
+ (segment (start 155.575 86.106) (end 160.655 86.106) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 154.305 87.376) (end 155.575 86.106) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 154.305 89.916) (end 154.305 87.376) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 165.735 91.186) (end 165.735 88.011) (width 0.4318) (layer Cuivre) (net 33) (status 800))
+ (segment (start 161.29 95.631) (end 165.735 91.186) (width 0.4318) (layer Cuivre) (net 33) (status 400))
+ (segment (start 161.29 97.536) (end 161.29 95.631) (width 0.4318) (layer Cuivre) (net 33) (status 800))
+ (segment (start 156.845 97.536) (end 156.845 98.806) (width 0.4318) (layer Cuivre) (net 34) (status 800))
+ (segment (start 158.115 100.076) (end 161.925 100.076) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 156.845 98.806) (end 158.115 100.076) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 156.21 98.171) (end 156.845 97.536) (width 0.4318) (layer Cuivre) (net 34) (status 400))
+ (segment (start 150.495 98.171) (end 156.21 98.171) (width 0.4318) (layer Cuivre) (net 34) (status 800))
+ (segment (start 165.735 98.806) (end 164.465 100.076) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 164.465 100.076) (end 161.925 100.076) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 165.735 97.536) (end 165.735 98.806) (width 0.4318) (layer Cuivre) (net 34) (status 800))
+ (segment (start 130.175 97.536) (end 126.365 97.536) (width 0.4318) (layer Cuivre) (net 35) (status 800))
+ (segment (start 125.603 98.298) (end 125.603 101.346) (width 0.4318) (layer Cuivre) (net 35) (status 400))
+ (segment (start 126.365 97.536) (end 125.603 98.298) (width 0.4318) (layer Cuivre) (net 35))
+ (segment (start 124.46 103.632) (end 126.619 103.632) (width 0.4318) (layer Cuivre) (net 36))
+ (segment (start 126.111 94.996) (end 124.841 94.996) (width 0.4318) (layer Cuivre) (net 36) (status 800))
+ (segment (start 124.841 94.996) (end 123.19 96.647) (width 0.4318) (layer Cuivre) (net 36))
+ (segment (start 123.19 102.362) (end 124.46 103.632) (width 0.4318) (layer Cuivre) (net 36))
+ (segment (start 123.19 96.647) (end 123.19 102.362) (width 0.4318) (layer Cuivre) (net 36))
+ (segment (start 126.619 103.632) (end 130.175 100.076) (width 0.4318) (layer Cuivre) (net 36) (status 400))
+ (segment (start 95.885 128.016) (end 101.6 128.016) (width 0.4318) (layer Cuivre) (net 37))
+ (segment (start 93.345 125.476) (end 95.885 128.016) (width 0.4318) (layer Cuivre) (net 37) (status 800))
+ (segment (start 102.87 126.746) (end 101.6 128.016) (width 0.4318) (layer Cuivre) (net 37) (status 800))
+ (segment (start 115.824 98.171) (end 114.935 99.06) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 107.315 96.266) (end 107.315 97.536) (width 0.4318) (layer Cuivre) (net 38) (status 800))
+ (segment (start 114.935 99.06) (end 115.824 98.171) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 107.315 97.536) (end 108.839 99.06) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 117.348 98.171) (end 118.491 97.028) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 116.967 98.171) (end 117.348 98.171) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 116.967 98.171) (end 115.824 98.171) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 108.839 99.06) (end 114.046 99.06) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 114.046 99.06) (end 114.935 99.06) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 118.491 97.028) (end 118.491 94.996) (width 0.4318) (layer Cuivre) (net 38) (status 400))
+ (segment (start 93.345 100.076) (end 95.885 102.616) (width 0.4318) (layer Cuivre) (net 39) (status 800))
+ (segment (start 95.885 102.616) (end 102.235 102.616) (width 0.4318) (layer Cuivre) (net 39) (status 400))
+ (segment (start 116.5225 125.9205) (end 115.57 126.873) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 116.5225 125.9205) (end 117.348 125.095) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 108.712 126.873) (end 107.315 125.476) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 117.348 125.095) (end 123.444 125.095) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 115.57 126.873) (end 108.712 126.873) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 107.315 125.476) (end 107.315 124.206) (width 0.4318) (layer Cuivre) (net 40) (status 400))
+ (segment (start 123.444 125.095) (end 126.873 121.666) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 126.873 121.666) (end 126.873 120.142) (width 0.4318) (layer Cuivre) (net 40) (status 400))
+ (segment (start 103.505 121.539) (end 109.093 121.539) (width 0.4318) (layer Cuivre) (net 41))
+ (segment (start 109.855 122.301) (end 109.855 124.206) (width 0.4318) (layer Cuivre) (net 41) (status 400))
+ (segment (start 95.885 122.936) (end 102.108 122.936) (width 0.4318) (layer Cuivre) (net 41) (status 800))
+ (segment (start 102.108 122.936) (end 103.505 121.539) (width 0.4318) (layer Cuivre) (net 41))
+ (segment (start 109.093 121.539) (end 109.855 122.301) (width 0.4318) (layer Cuivre) (net 41))
+ (segment (start 104.394 97.536) (end 105.283 96.647) (width 0.4318) (layer Cuivre) (net 42))
+ (segment (start 109.093 92.837) (end 109.855 93.599) (width 0.4318) (layer Cuivre) (net 42))
+ (segment (start 109.855 93.599) (end 109.855 96.266) (width 0.4318) (layer Cuivre) (net 42) (status 400))
+ (segment (start 95.885 97.536) (end 104.394 97.536) (width 0.4318) (layer Cuivre) (net 42) (status 800))
+ (segment (start 105.283 96.647) (end 105.283 93.726) (width 0.4318) (layer Cuivre) (net 42))
+ (segment (start 106.172 92.837) (end 109.093 92.837) (width 0.4318) (layer Cuivre) (net 42))
+ (segment (start 105.283 93.726) (end 106.172 92.837) (width 0.4318) (layer Cuivre) (net 42))
+ (segment (start 126.365 70.866) (end 133.35 70.866) (width 0.6096) (layer Cuivre) (net 43) (status 800))
+ (segment (start 125.73 74.676) (end 126.365 74.041) (width 0.6096) (layer Cuivre) (net 43))
+ (segment (start 126.365 74.041) (end 126.365 70.866) (width 0.6096) (layer Cuivre) (net 43) (status 400))
+ (segment (start 117.475 74.676) (end 125.73 74.676) (width 0.6096) (layer Cuivre) (net 43) (status 800))
+ (segment (start 133.35 70.866) (end 139.7 64.516) (width 0.6096) (layer Cuivre) (net 43))
+ (segment (start 139.7 64.516) (end 145.415 64.516) (width 0.6096) (layer Cuivre) (net 43) (status 400))
+ (segment (start 116.205 70.03542) (end 109.27842 76.962) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 116.205 68.326) (end 116.205 70.03542) (width 0.6096) (layer Cuivre) (net 46) (status 800))
+ (segment (start 116.205 68.326) (end 117.91442 68.326) (width 0.6096) (layer Cuivre) (net 46) (status 800))
+ (segment (start 117.91442 68.326) (end 122.4915 63.74892) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 122.4915 63.74892) (end 123.825 63.74892) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 100.838 76.962) (end 109.27842 76.962) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 123.825 63.74892) (end 136.78916 63.74892) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 99.568 78.232) (end 100.838 76.962) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 136.78916 63.74892) (end 139.83208 60.706) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 95.25 78.232) (end 99.568 78.232) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 107.315 116.586) (end 97.54108 116.586) (width 0.6096) (layer Cuivre) (net 46) (status 800))
+ (segment (start 97.54108 116.586) (end 94.68866 113.73358) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 94.68866 113.73358) (end 92.64904 113.73358) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 92.64904 113.73358) (end 91.6686 112.75314) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 91.6686 87.249) (end 91.6686 85.4837) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 91.6686 112.75314) (end 91.6686 87.249) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 141.605 60.706) (end 139.83208 60.706) (width 0.6096) (layer Cuivre) (net 46) (status 800))
+ (segment (start 123.825 68.326) (end 123.825 63.74892) (width 0.6096) (layer Cuivre) (net 46) (status 800))
+ (segment (start 91.6686 81.8134) (end 95.25 78.232) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 91.6686 85.4837) (end 91.6686 81.8134) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 98.298 87.249) (end 99.695 88.646) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 99.695 88.646) (end 107.315 88.646) (width 0.6096) (layer Cuivre) (net 46) (status 400))
+ (segment (start 91.6686 87.249) (end 98.298 87.249) (width 0.6096) (layer Cuivre) (net 46))
+ (segment (start 127.635 106.426) (end 128.83642 106.426) (width 0.4318) (layer Cuivre) (net 47) (status 800))
+ (segment (start 131.37642 108.966) (end 128.83642 106.426) (width 0.4318) (layer Cuivre) (net 47))
+ (segment (start 135.255 108.966) (end 131.37642 108.966) (width 0.4318) (layer Cuivre) (net 47) (status 800))
+ (segment (start 127.635 108.966) (end 127.635 110.16742) (width 0.4318) (layer Cuivre) (net 48) (status 800))
+ (segment (start 127.635 110.16742) (end 130.175 112.70742) (width 0.4318) (layer Cuivre) (net 48))
+ (segment (start 122.555 115.24742) (end 127.635 110.16742) (width 0.4318) (layer Cuivre) (net 48))
+ (segment (start 130.175 112.70742) (end 130.175 114.046) (width 0.4318) (layer Cuivre) (net 48) (status 400))
+ (segment (start 122.555 115.316) (end 122.555 115.24742) (width 0.4318) (layer Cuivre) (net 48) (status 800))
+ (segment (start 125.095 79.756) (end 125.095 82.296) (width 0.4318) (layer Cuivre) (net 49) (status C00))
+ (segment (start 130.175 79.756) (end 132.715 82.296) (width 0.4318) (layer Cuivre) (net 50) (status 400))
+ (segment (start 130.175 79.121) (end 130.175 79.756) (width 0.4318) (layer Cuivre) (net 50))
+ (segment (start 132.08 82.296) (end 130.175 84.201) (width 0.4318) (layer Cuivre) (net 50))
+ (segment (start 132.715 82.296) (end 132.08 82.296) (width 0.4318) (layer Cuivre) (net 50) (status 800))
+ (segment (start 131.445 77.851) (end 130.175 79.121) (width 0.4318) (layer Cuivre) (net 50))
+ (segment (start 135.89 77.851) (end 131.445 77.851) (width 0.4318) (layer Cuivre) (net 50))
+ (segment (start 137.795 79.756) (end 135.89 77.851) (width 0.4318) (layer Cuivre) (net 50))
+ (segment (start 130.175 84.201) (end 130.175 87.376) (width 0.4318) (layer Cuivre) (net 50) (status 400))
+ (segment (start 137.795 81.026) (end 137.795 79.756) (width 0.4318) (layer Cuivre) (net 50) (status 800))
+ (segment (start 144.78 113.411) (end 144.78 112.776) (width 0.4318) (layer Cuivre) (net 51))
+ (segment (start 144.78 115.951) (end 144.78 113.411) (width 0.4318) (layer Cuivre) (net 51) (status 800))
+ (segment (start 147.32 113.411) (end 144.78 113.411) (width 0.4318) (layer Cuivre) (net 51))
+ (segment (start 144.78 112.776) (end 144.145 112.141) (width 0.4318) (layer Cuivre) (net 51))
+ (segment (start 144.145 112.141) (end 138.43 112.141) (width 0.4318) (layer Cuivre) (net 51))
+ (segment (start 138.43 112.141) (end 136.525 114.046) (width 0.4318) (layer Cuivre) (net 51))
+ (segment (start 136.525 114.046) (end 132.715 114.046) (width 0.4318) (layer Cuivre) (net 51) (status 400))
+ (segment (start 149.225 115.316) (end 147.32 113.411) (width 0.4318) (layer Cuivre) (net 51) (status 800))
+ (segment (start 145.415 89.916) (end 145.415 88.646) (width 0.4318) (layer Cuivre) (net 52) (status 800))
+ (segment (start 145.415 88.646) (end 144.78 88.011) (width 0.4318) (layer Cuivre) (net 52))
+ (segment (start 144.78 88.011) (end 143.51 88.011) (width 0.4318) (layer Cuivre) (net 52))
+ (segment (start 143.51 88.011) (end 139.7 84.201) (width 0.4318) (layer Cuivre) (net 52))
+ (segment (start 145.415 88.646) (end 149.225 88.646) (width 0.4318) (layer Cuivre) (net 52) (status 400))
+ (segment (start 135.94334 84.14766) (end 132.715 87.376) (width 0.4318) (layer Cuivre) (net 52) (status 400))
+ (segment (start 138.37666 84.14766) (end 135.94334 84.14766) (width 0.4318) (layer Cuivre) (net 52))
+ (segment (start 139.7 84.201) (end 138.43 84.201) (width 0.4318) (layer Cuivre) (net 52))
+ (segment (start 138.43 84.201) (end 138.37666 84.14766) (width 0.4318) (layer Cuivre) (net 52))
+
+ (zone (net 11) (net_name GND) (layer Cuivre) (tstamp 4AE6D930) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill (arc_segments 32) (thermal_gap 0.762) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 187.325 131.572) (xy 187.325 53.086) (xy 88.392 53.086) (xy 88.392 131.572)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 144.724605 66.1162) (xy 140.97 66.1162) (xy 140.88359 66.124672) (xy 140.797122 66.132237) (xy 140.792375 66.133615)
+ (xy 140.787459 66.134098) (xy 140.704372 66.159183) (xy 140.620989 66.183409) (xy 140.6166 66.185683) (xy 140.61187 66.187112)
+ (xy 140.535226 66.227863) (xy 140.458148 66.267818) (xy 140.454285 66.270901) (xy 140.449923 66.273221) (xy 140.382615 66.328115)
+ (xy 140.314805 66.382248) (xy 140.307929 66.389027) (xy 140.307785 66.389145) (xy 140.307674 66.389278) (xy 140.305461 66.391461)
+ (xy 131.055722 75.6412) (xy 128.905 75.6412) (xy 128.143 75.6412) (xy 128.05659 75.649672) (xy 127.970122 75.657237)
+ (xy 127.965375 75.658615) (xy 127.960459 75.659098) (xy 127.877372 75.684183) (xy 127.793989 75.708409) (xy 127.7896 75.710683)
+ (xy 127.78487 75.712112) (xy 127.708226 75.752863) (xy 127.631148 75.792818) (xy 127.627285 75.795901) (xy 127.622923 75.798221)
+ (xy 127.555615 75.853115) (xy 127.487805 75.907248) (xy 127.480929 75.914027) (xy 127.480785 75.914145) (xy 127.480674 75.914278)
+ (xy 127.478461 75.916461) (xy 126.610722 76.7842) (xy 123.317 76.7842) (xy 123.230635 76.792668) (xy 123.144122 76.800237)
+ (xy 123.139375 76.801615) (xy 123.134459 76.802098) (xy 123.051372 76.827183) (xy 122.967989 76.851409) (xy 122.9636 76.853683)
+ (xy 122.95887 76.855112) (xy 122.882226 76.895863) (xy 122.805148 76.935818) (xy 122.801285 76.938901) (xy 122.796923 76.941221)
+ (xy 122.729646 76.99609) (xy 122.661805 77.050247) (xy 122.654927 77.057028) (xy 122.654785 77.057145) (xy 122.654675 77.057277)
+ (xy 122.652461 77.059461) (xy 121.890461 77.821461) (xy 121.835364 77.888537) (xy 121.779558 77.955044) (xy 121.777176 77.959375)
+ (xy 121.774041 77.963193) (xy 121.733027 78.039682) (xy 121.691197 78.115773) (xy 121.689702 78.120484) (xy 121.687367 78.12484)
+ (xy 121.661994 78.20783) (xy 121.635737 78.290605) (xy 121.635185 78.295519) (xy 121.633742 78.300242) (xy 121.624971 78.386578)
+ (xy 121.615292 78.472878) (xy 121.615224 78.482539) (xy 121.615206 78.482719) (xy 121.615221 78.482886) (xy 121.6152 78.486)
+ (xy 121.6152 89.526722) (xy 120.338877 90.803045) (xy 120.338877 84.771526) (xy 120.338877 78.421526) (xy 120.295672 78.111815)
+ (xy 120.192877 77.816484) (xy 120.106081 77.654098) (xy 119.801449 77.609156) (xy 119.621844 77.788761) (xy 119.621844 77.429551)
+ (xy 119.576902 77.124919) (xy 119.295384 76.988776) (xy 118.992714 76.910171) (xy 118.680526 76.892123) (xy 118.370815 76.935328)
+ (xy 118.075484 77.038123) (xy 117.913098 77.124919) (xy 117.868156 77.429551) (xy 118.745 78.306395) (xy 119.621844 77.429551)
+ (xy 119.621844 77.788761) (xy 118.924605 78.486) (xy 119.801449 79.362844) (xy 120.106081 79.317902) (xy 120.242224 79.036384)
+ (xy 120.320829 78.733714) (xy 120.338877 78.421526) (xy 120.338877 84.771526) (xy 120.295672 84.461815) (xy 120.192877 84.166484)
+ (xy 120.106081 84.004098) (xy 119.801449 83.959156) (xy 118.924605 84.836) (xy 119.801449 85.712844) (xy 120.106081 85.667902)
+ (xy 120.242224 85.386384) (xy 120.320829 85.083714) (xy 120.338877 84.771526) (xy 120.338877 90.803045) (xy 119.625722 91.5162)
+ (xy 119.621844 91.5162) (xy 117.602 91.5162) (xy 117.51563 91.524668) (xy 117.429123 91.532237) (xy 117.424377 91.533615)
+ (xy 117.419459 91.534098) (xy 117.33636 91.559187) (xy 117.252989 91.583409) (xy 117.2486 91.585683) (xy 117.24387 91.587112)
+ (xy 117.167266 91.627843) (xy 117.090148 91.667817) (xy 117.086281 91.670903) (xy 117.081923 91.673221) (xy 117.014673 91.728067)
+ (xy 116.946805 91.782247) (xy 116.939927 91.789028) (xy 116.939785 91.789145) (xy 116.939675 91.789277) (xy 116.937461 91.791461)
+ (xy 114.270461 94.458461) (xy 114.215364 94.525537) (xy 114.159558 94.592044) (xy 114.157176 94.596375) (xy 114.154041 94.600193)
+ (xy 114.113027 94.676682) (xy 114.071197 94.752773) (xy 114.069702 94.757484) (xy 114.067367 94.76184) (xy 114.058804 94.789848)
+ (xy 113.939799 94.885531) (xy 113.761359 95.098188) (xy 113.664587 95.274214) (xy 113.579747 95.114653) (xy 113.404293 94.899525)
+ (xy 113.2459 94.76849) (xy 113.2459 90.700254) (xy 113.825323 91.279677) (xy 113.886056 91.329564) (xy 113.94627 91.380089)
+ (xy 113.950188 91.382243) (xy 113.953648 91.385085) (xy 114.022972 91.422256) (xy 114.091795 91.460092) (xy 114.096056 91.461443)
+ (xy 114.100003 91.46356) (xy 114.175208 91.486552) (xy 114.250088 91.510306) (xy 114.254533 91.510804) (xy 114.258813 91.512113)
+ (xy 114.337033 91.520058) (xy 114.41512 91.528817) (xy 114.423862 91.528878) (xy 114.424029 91.528895) (xy 114.424184 91.52888)
+ (xy 114.427 91.5289) (xy 116.078 91.5289) (xy 116.156239 91.521228) (xy 116.234524 91.514379) (xy 116.238815 91.513132)
+ (xy 116.243274 91.512695) (xy 116.31858 91.489958) (xy 116.393997 91.468048) (xy 116.397967 91.465989) (xy 116.402253 91.464696)
+ (xy 116.471658 91.427792) (xy 116.541434 91.391625) (xy 116.544931 91.388832) (xy 116.548881 91.386733) (xy 116.609787 91.337058)
+ (xy 116.671218 91.288019) (xy 116.677443 91.281879) (xy 116.677573 91.281774) (xy 116.677672 91.281653) (xy 116.679677 91.279677)
+ (xy 117.441677 90.517677) (xy 117.491564 90.456943) (xy 117.542089 90.39673) (xy 117.544243 90.392811) (xy 117.547085 90.389352)
+ (xy 117.584246 90.320045) (xy 117.622092 90.251205) (xy 117.623444 90.246941) (xy 117.62556 90.242996) (xy 117.648548 90.167805)
+ (xy 117.672306 90.092912) (xy 117.672804 90.088466) (xy 117.674113 90.084187) (xy 117.682057 90.005971) (xy 117.690817 89.92788)
+ (xy 117.690878 89.919136) (xy 117.690895 89.91897) (xy 117.69088 89.918814) (xy 117.6909 89.916) (xy 117.6909 86.036958)
+ (xy 117.707275 86.053333) (xy 117.868156 85.892451) (xy 117.913098 86.197081) (xy 118.194616 86.333224) (xy 118.497286 86.411829)
+ (xy 118.809474 86.429877) (xy 119.119185 86.386672) (xy 119.414516 86.283877) (xy 119.576902 86.197081) (xy 119.621844 85.892449)
+ (xy 118.745 85.015605) (xy 118.730857 85.029747) (xy 118.551252 84.850142) (xy 118.565395 84.836) (xy 118.551252 84.821857)
+ (xy 118.730857 84.642252) (xy 118.745 84.656395) (xy 119.621844 83.779551) (xy 119.576902 83.474919) (xy 119.295384 83.338776)
+ (xy 118.992714 83.260171) (xy 118.680526 83.242123) (xy 118.370815 83.285328) (xy 118.299045 83.310308) (xy 119.346677 82.262677)
+ (xy 119.396564 82.201943) (xy 119.414528 82.180534) (xy 119.569957 82.081897) (xy 119.759337 81.901552) (xy 119.910081 81.687858)
+ (xy 120.016448 81.448955) (xy 120.074386 81.193941) (xy 120.078557 80.895244) (xy 120.027762 80.638711) (xy 119.928107 80.396931)
+ (xy 119.783388 80.179111) (xy 119.599118 79.993549) (xy 119.468149 79.905209) (xy 119.576902 79.847081) (xy 119.621844 79.542449)
+ (xy 118.745 78.665605) (xy 118.565395 78.84521) (xy 118.565395 78.486) (xy 117.688551 77.609156) (xy 117.383919 77.654098)
+ (xy 117.247776 77.935616) (xy 117.169171 78.238286) (xy 117.151123 78.550474) (xy 117.194328 78.860185) (xy 117.297123 79.155516)
+ (xy 117.383919 79.317902) (xy 117.688551 79.362844) (xy 118.565395 78.486) (xy 118.565395 78.84521) (xy 117.868156 79.542449)
+ (xy 117.913098 79.847081) (xy 118.026978 79.902153) (xy 117.905381 79.981725) (xy 117.718537 80.164695) (xy 117.570791 80.380473)
+ (xy 117.46777 80.620839) (xy 117.413399 80.876637) (xy 117.409747 81.138124) (xy 117.456955 81.395341) (xy 117.553225 81.638489)
+ (xy 117.557509 81.645136) (xy 116.238323 82.964323) (xy 116.188435 83.025056) (xy 116.137911 83.08527) (xy 116.135756 83.089188)
+ (xy 116.132915 83.092648) (xy 116.095743 83.161972) (xy 116.057908 83.230795) (xy 116.056556 83.235056) (xy 116.05444 83.239003)
+ (xy 116.031447 83.314208) (xy 116.007694 83.389088) (xy 116.007195 83.393533) (xy 116.005887 83.397813) (xy 115.997941 83.476033)
+ (xy 115.989183 83.55412) (xy 115.989121 83.562862) (xy 115.989105 83.563029) (xy 115.989119 83.563184) (xy 115.9891 83.566)
+ (xy 115.9891 87.334463) (xy 115.944293 87.279525) (xy 115.7859 87.14849) (xy 115.7859 86.741) (xy 115.778229 86.662764)
+ (xy 115.771379 86.584475) (xy 115.770131 86.580182) (xy 115.769695 86.575726) (xy 115.746961 86.500431) (xy 115.725048 86.425003)
+ (xy 115.722989 86.421032) (xy 115.721696 86.416747) (xy 115.684792 86.347341) (xy 115.648625 86.277566) (xy 115.645832 86.274068)
+ (xy 115.643733 86.270119) (xy 115.594058 86.209212) (xy 115.545019 86.147782) (xy 115.538879 86.141556) (xy 115.538774 86.141427)
+ (xy 115.538653 86.141327) (xy 115.536677 86.139323) (xy 114.850145 85.452791) (xy 114.936448 85.258955) (xy 114.994386 85.003941)
+ (xy 114.998557 84.705244) (xy 114.947762 84.448711) (xy 114.848107 84.206931) (xy 114.703388 83.989111) (xy 114.519118 83.803549)
+ (xy 114.302314 83.657313) (xy 114.061235 83.555973) (xy 113.805063 83.503388) (xy 113.543557 83.501563) (xy 113.286676 83.550565)
+ (xy 113.044206 83.64853) (xy 112.825381 83.791725) (xy 112.638537 83.974695) (xy 112.502388 84.173535) (xy 112.49819 84.176959)
+ (xy 112.436782 84.225981) (xy 112.430556 84.23212) (xy 112.430427 84.232226) (xy 112.430327 84.232346) (xy 112.428323 84.234323)
+ (xy 111.154547 85.508098) (xy 111.247539 85.299236) (xy 111.310995 85.019935) (xy 111.315563 84.692791) (xy 111.259931 84.411826)
+ (xy 111.150785 84.147019) (xy 110.992283 83.908455) (xy 110.790462 83.70522) (xy 110.7059 83.648182) (xy 110.7059 83.485855)
+ (xy 110.758524 83.452459) (xy 110.965941 83.254939) (xy 111.131042 83.020893) (xy 111.247539 82.759236) (xy 111.310995 82.479935)
+ (xy 111.315563 82.152791) (xy 111.260935 81.8769) (xy 112.632842 81.8769) (xy 112.79655 82.046425) (xy 113.011291 82.195674)
+ (xy 113.250932 82.30037) (xy 113.506344 82.356526) (xy 113.7678 82.362003) (xy 114.02534 82.316592) (xy 114.269154 82.222022)
+ (xy 114.489957 82.081897) (xy 114.679337 81.901552) (xy 114.830081 81.687858) (xy 114.936448 81.448955) (xy 114.994386 81.193941)
+ (xy 114.998557 80.895244) (xy 114.947762 80.638711) (xy 114.848107 80.396931) (xy 114.703388 80.179111) (xy 114.519118 79.993549)
+ (xy 114.302314 79.847313) (xy 114.081892 79.754656) (xy 114.269154 79.682022) (xy 114.489957 79.541897) (xy 114.679337 79.361552)
+ (xy 114.830081 79.147858) (xy 114.936448 78.908955) (xy 114.994386 78.653941) (xy 114.998557 78.355244) (xy 114.947762 78.098711)
+ (xy 114.848107 77.856931) (xy 114.703388 77.639111) (xy 114.519118 77.453549) (xy 114.302314 77.307313) (xy 114.061235 77.205973)
+ (xy 113.805063 77.153388) (xy 113.543557 77.151563) (xy 113.286676 77.200565) (xy 113.044206 77.29853) (xy 112.825381 77.441725)
+ (xy 112.638537 77.624695) (xy 112.490791 77.840473) (xy 112.469949 77.8891) (xy 111.551205 77.8891) (xy 111.500283 77.812455)
+ (xy 111.298462 77.60922) (xy 111.06101 77.449057) (xy 110.796971 77.338065) (xy 110.516403 77.280472) (xy 110.290601 77.278896)
+ (xy 116.869539 70.699959) (xy 116.924635 70.632882) (xy 116.980442 70.566376) (xy 116.982823 70.562044) (xy 116.985959 70.558227)
+ (xy 117.026963 70.481753) (xy 117.068803 70.405647) (xy 117.070298 70.400933) (xy 117.072632 70.396581) (xy 117.097999 70.313608)
+ (xy 117.124263 70.230815) (xy 117.124814 70.225901) (xy 117.126258 70.221179) (xy 117.135028 70.134836) (xy 117.144708 70.048542)
+ (xy 117.144775 70.03888) (xy 117.144794 70.038701) (xy 117.144778 70.038533) (xy 117.1448 70.03542) (xy 117.1448 69.977)
+ (xy 117.283542 69.977) (xy 117.406223 69.952597) (xy 117.521785 69.90473) (xy 117.625789 69.835237) (xy 117.714237 69.746789)
+ (xy 117.78373 69.642785) (xy 117.831597 69.527223) (xy 117.856 69.404542) (xy 117.856 69.279458) (xy 117.856 69.2658)
+ (xy 117.91442 69.2658) (xy 118.000829 69.257327) (xy 118.087298 69.249763) (xy 118.092044 69.248384) (xy 118.096961 69.247902)
+ (xy 118.180047 69.222816) (xy 118.263431 69.198591) (xy 118.267819 69.196316) (xy 118.27255 69.194888) (xy 118.349193 69.154136)
+ (xy 118.426272 69.114182) (xy 118.430134 69.111098) (xy 118.434497 69.108779) (xy 118.501773 69.053909) (xy 118.569615 68.999753)
+ (xy 118.576492 68.992971) (xy 118.576635 68.992855) (xy 118.576744 68.992722) (xy 118.578959 68.990539) (xy 122.880778 64.68872)
+ (xy 122.8852 64.68872) (xy 122.8852 67.379828) (xy 122.798537 67.464695) (xy 122.650791 67.680473) (xy 122.54777 67.920839)
+ (xy 122.493399 68.176637) (xy 122.489747 68.438124) (xy 122.536955 68.695341) (xy 122.633225 68.938489) (xy 122.774888 69.158308)
+ (xy 122.894337 69.282001) (xy 122.740188 69.312664) (xy 122.578401 69.379678) (xy 122.432796 69.476969) (xy 122.308969 69.600795)
+ (xy 122.211678 69.7464) (xy 122.144664 69.908188) (xy 122.1105 70.079941) (xy 122.1105 70.51675) (xy 122.33275 70.739)
+ (xy 123.571 70.739) (xy 123.571 70.719) (xy 123.825 70.719) (xy 123.825 70.739) (xy 123.845 70.739)
+ (xy 123.845 70.993) (xy 123.825 70.993) (xy 123.825 72.23125) (xy 124.04725 72.4535) (xy 124.308941 72.4535)
+ (xy 124.484059 72.4535) (xy 124.655812 72.419336) (xy 124.817599 72.352322) (xy 124.963204 72.255031) (xy 125.087031 72.131205)
+ (xy 125.184322 71.9856) (xy 125.251336 71.823812) (xy 125.285401 71.652553) (xy 125.314888 71.698308) (xy 125.4252 71.812539)
+ (xy 125.4252 73.651722) (xy 125.340722 73.7362) (xy 123.571 73.7362) (xy 123.571 72.23125) (xy 123.571 70.993)
+ (xy 122.33275 70.993) (xy 122.1105 71.21525) (xy 122.1105 71.652059) (xy 122.144664 71.823812) (xy 122.211678 71.9856)
+ (xy 122.308969 72.131205) (xy 122.432796 72.255031) (xy 122.578401 72.352322) (xy 122.740188 72.419336) (xy 122.911941 72.4535)
+ (xy 123.087059 72.4535) (xy 123.34875 72.4535) (xy 123.571 72.23125) (xy 123.571 73.7362) (xy 119.1895 73.7362)
+ (xy 119.1895 73.533958) (xy 119.165097 73.411277) (xy 119.11723 73.295715) (xy 119.047737 73.191711) (xy 118.959289 73.103263)
+ (xy 118.855285 73.03377) (xy 118.739723 72.985903) (xy 118.617042 72.9615) (xy 118.491958 72.9615) (xy 116.332958 72.9615)
+ (xy 116.210277 72.985903) (xy 116.094715 73.03377) (xy 115.990711 73.103263) (xy 115.902263 73.191711) (xy 115.83277 73.295715)
+ (xy 115.784903 73.411277) (xy 115.7605 73.533958) (xy 115.7605 73.659042) (xy 115.7605 75.818042) (xy 115.784903 75.940723)
+ (xy 115.83277 76.056285) (xy 115.902263 76.160289) (xy 115.990711 76.248737) (xy 116.094715 76.31823) (xy 116.210277 76.366097)
+ (xy 116.332958 76.3905) (xy 116.458042 76.3905) (xy 118.617042 76.3905) (xy 118.739723 76.366097) (xy 118.855285 76.31823)
+ (xy 118.959289 76.248737) (xy 119.047737 76.160289) (xy 119.11723 76.056285) (xy 119.165097 75.940723) (xy 119.1895 75.818042)
+ (xy 119.1895 75.692958) (xy 119.1895 75.6158) (xy 125.73 75.6158) (xy 125.816409 75.607327) (xy 125.902878 75.599763)
+ (xy 125.907624 75.598384) (xy 125.912541 75.597902) (xy 125.995627 75.572816) (xy 126.079011 75.548591) (xy 126.083399 75.546316)
+ (xy 126.08813 75.544888) (xy 126.164773 75.504136) (xy 126.241852 75.464182) (xy 126.245714 75.461098) (xy 126.250077 75.458779)
+ (xy 126.317353 75.403909) (xy 126.385195 75.349753) (xy 126.392072 75.342971) (xy 126.392215 75.342855) (xy 126.392324 75.342722)
+ (xy 126.394539 75.340539) (xy 127.029539 74.705539) (xy 127.084635 74.638462) (xy 127.140442 74.571956) (xy 127.142823 74.567624)
+ (xy 127.145959 74.563807) (xy 127.186972 74.487317) (xy 127.228803 74.411227) (xy 127.230297 74.406515) (xy 127.232633 74.40216)
+ (xy 127.258018 74.319127) (xy 127.284263 74.236395) (xy 127.284813 74.231485) (xy 127.286259 74.226758) (xy 127.295038 74.140326)
+ (xy 127.304708 74.054122) (xy 127.304775 74.044471) (xy 127.304795 74.044281) (xy 127.304778 74.044103) (xy 127.3048 74.041)
+ (xy 127.3048 71.812532) (xy 127.31187 71.8058) (xy 133.35 71.8058) (xy 133.436409 71.797327) (xy 133.522878 71.789763)
+ (xy 133.527624 71.788384) (xy 133.532541 71.787902) (xy 133.615627 71.762816) (xy 133.699011 71.738591) (xy 133.703399 71.736316)
+ (xy 133.70813 71.734888) (xy 133.784773 71.694136) (xy 133.861852 71.654182) (xy 133.865714 71.651098) (xy 133.870077 71.648779)
+ (xy 133.937353 71.593909) (xy 134.005195 71.539753) (xy 134.012072 71.532971) (xy 134.012215 71.532855) (xy 134.012324 71.532722)
+ (xy 134.014539 71.530539) (xy 140.089278 65.4558) (xy 144.117771 65.4558) (xy 144.230253 65.667347) (xy 144.405707 65.882475)
+ (xy 144.619604 66.059426) (xy 144.724605 66.1162)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 187.198 131.0894) (xy 185.790114 131.0894) (xy 185.790114 72.5424) (xy 185.790114 61.5188) (xy 166.507886 61.5188)
+ (xy 166.507886 72.5424) (xy 185.790114 72.5424) (xy 185.790114 131.0894) (xy 184.414042 131.0894) (xy 184.414042 117.814124)
+ (xy 184.414042 94.954124) (xy 184.364194 94.53177) (xy 184.232908 94.127256) (xy 184.071758 93.825764) (xy 183.708746 93.711859)
+ (xy 183.529141 93.891464) (xy 183.529141 93.532254) (xy 183.415236 93.169242) (xy 183.036368 92.976041) (xy 182.627087 92.860466)
+ (xy 182.203124 92.826958) (xy 181.78077 92.876806) (xy 181.376256 93.008092) (xy 181.074764 93.169242) (xy 180.960859 93.532254)
+ (xy 182.245 94.816395) (xy 183.529141 93.532254) (xy 183.529141 93.891464) (xy 182.424605 94.996) (xy 183.708746 96.280141)
+ (xy 184.071758 96.166236) (xy 184.264959 95.787368) (xy 184.380534 95.378087) (xy 184.414042 94.954124) (xy 184.414042 117.814124)
+ (xy 184.364194 117.39177) (xy 184.232908 116.987256) (xy 184.15 116.832145) (xy 184.15 101.408542) (xy 184.15 101.283458)
+ (xy 184.15 98.743458) (xy 184.125597 98.620777) (xy 184.07773 98.505215) (xy 184.008237 98.401211) (xy 183.919789 98.312763)
+ (xy 183.815785 98.24327) (xy 183.700223 98.195403) (xy 183.577542 98.171) (xy 183.529141 98.171) (xy 183.529141 96.459746)
+ (xy 182.245 95.175605) (xy 182.065395 95.35521) (xy 182.065395 94.996) (xy 180.781254 93.711859) (xy 180.418242 93.825764)
+ (xy 180.225041 94.204632) (xy 180.109466 94.613913) (xy 180.075958 95.037876) (xy 180.125806 95.46023) (xy 180.257092 95.864744)
+ (xy 180.418242 96.166236) (xy 180.781254 96.280141) (xy 182.065395 94.996) (xy 182.065395 95.35521) (xy 180.960859 96.459746)
+ (xy 181.074764 96.822758) (xy 181.453632 97.015959) (xy 181.862913 97.131534) (xy 182.286876 97.165042) (xy 182.70923 97.115194)
+ (xy 183.113744 96.983908) (xy 183.415236 96.822758) (xy 183.529141 96.459746) (xy 183.529141 98.171) (xy 183.452458 98.171)
+ (xy 180.912458 98.171) (xy 180.789777 98.195403) (xy 180.674215 98.24327) (xy 180.570211 98.312763) (xy 180.481763 98.401211)
+ (xy 180.41227 98.505215) (xy 180.364403 98.620777) (xy 180.34 98.743458) (xy 180.34 98.868542) (xy 180.34 99.2251)
+ (xy 174.2059 99.2251) (xy 174.2059 98.725855) (xy 174.258524 98.692459) (xy 174.465941 98.494939) (xy 174.631042 98.260893)
+ (xy 174.747539 97.999236) (xy 174.810995 97.719935) (xy 174.815563 97.392791) (xy 174.759931 97.111826) (xy 174.650785 96.847019)
+ (xy 174.492283 96.608455) (xy 174.290462 96.40522) (xy 174.2059 96.348182) (xy 174.2059 92.375855) (xy 174.258524 92.342459)
+ (xy 174.465941 92.144939) (xy 174.631042 91.910893) (xy 174.747539 91.649236) (xy 174.810995 91.369935) (xy 174.815563 91.042791)
+ (xy 174.759931 90.761826) (xy 174.650785 90.497019) (xy 174.492283 90.258455) (xy 174.290462 90.05522) (xy 174.05301 89.895057)
+ (xy 173.788971 89.784065) (xy 173.508403 89.726472) (xy 173.221991 89.724473) (xy 172.940645 89.778142) (xy 172.675082 89.885437)
+ (xy 172.435417 90.042269) (xy 172.230778 90.242666) (xy 172.068961 90.478994) (xy 171.956129 90.742252) (xy 171.896579 91.022412)
+ (xy 171.89258 91.308803) (xy 171.944284 91.590516) (xy 172.049722 91.856822) (xy 172.204877 92.097576) (xy 172.403841 92.303608)
+ (xy 172.5041 92.37329) (xy 172.5041 96.347324) (xy 172.435417 96.392269) (xy 172.230778 96.592666) (xy 172.068961 96.828994)
+ (xy 171.956129 97.092252) (xy 171.896579 97.372412) (xy 171.89258 97.658803) (xy 171.944284 97.940516) (xy 172.049722 98.206822)
+ (xy 172.204877 98.447576) (xy 172.403841 98.653608) (xy 172.5041 98.72329) (xy 172.5041 100.076) (xy 172.511918 100.155743)
+ (xy 172.519172 100.235443) (xy 172.520013 100.238302) (xy 172.520305 100.241274) (xy 172.543448 100.317928) (xy 172.566059 100.394753)
+ (xy 172.567442 100.397399) (xy 172.568304 100.400253) (xy 172.605879 100.470922) (xy 172.642997 100.541922) (xy 172.644866 100.544247)
+ (xy 172.646267 100.546881) (xy 172.696854 100.608906) (xy 172.747055 100.671344) (xy 172.749342 100.673263) (xy 172.751226 100.675573)
+ (xy 172.812907 100.7266) (xy 172.87427 100.778089) (xy 172.876883 100.779525) (xy 172.879183 100.781428) (xy 172.949628 100.819517)
+ (xy 173.019795 100.858092) (xy 173.022638 100.858994) (xy 173.025263 100.860413) (xy 173.101764 100.884094) (xy 173.178088 100.908306)
+ (xy 173.181052 100.908638) (xy 173.183903 100.909521) (xy 173.263544 100.917891) (xy 173.34312 100.926817) (xy 173.348851 100.926857)
+ (xy 173.34906 100.926879) (xy 173.349269 100.926859) (xy 173.355 100.9269) (xy 180.34 100.9269) (xy 180.34 101.408542)
+ (xy 180.364403 101.531223) (xy 180.41227 101.646785) (xy 180.481763 101.750789) (xy 180.570211 101.839237) (xy 180.674215 101.90873)
+ (xy 180.789777 101.956597) (xy 180.912458 101.981) (xy 181.037542 101.981) (xy 183.577542 101.981) (xy 183.700223 101.956597)
+ (xy 183.815785 101.90873) (xy 183.919789 101.839237) (xy 184.008237 101.750789) (xy 184.07773 101.646785) (xy 184.125597 101.531223)
+ (xy 184.15 101.408542) (xy 184.15 116.832145) (xy 184.071758 116.685764) (xy 183.708746 116.571859) (xy 183.529141 116.751464)
+ (xy 183.529141 116.392254) (xy 183.415236 116.029242) (xy 183.036368 115.836041) (xy 182.627087 115.720466) (xy 182.203124 115.686958)
+ (xy 181.78077 115.736806) (xy 181.376256 115.868092) (xy 181.074764 116.029242) (xy 180.960859 116.392254) (xy 182.245 117.676395)
+ (xy 183.529141 116.392254) (xy 183.529141 116.751464) (xy 182.424605 117.856) (xy 183.708746 119.140141) (xy 184.071758 119.026236)
+ (xy 184.264959 118.647368) (xy 184.380534 118.238087) (xy 184.414042 117.814124) (xy 184.414042 131.0894) (xy 184.15 131.0894)
+ (xy 184.15 124.268542) (xy 184.15 124.143458) (xy 184.15 121.603458) (xy 184.125597 121.480777) (xy 184.07773 121.365215)
+ (xy 184.008237 121.261211) (xy 183.919789 121.172763) (xy 183.815785 121.10327) (xy 183.700223 121.055403) (xy 183.577542 121.031)
+ (xy 183.529141 121.031) (xy 183.529141 119.319746) (xy 182.245 118.035605) (xy 182.065395 118.21521) (xy 182.065395 117.856)
+ (xy 180.781254 116.571859) (xy 180.418242 116.685764) (xy 180.225041 117.064632) (xy 180.109466 117.473913) (xy 180.075958 117.897876)
+ (xy 180.125806 118.32023) (xy 180.257092 118.724744) (xy 180.418242 119.026236) (xy 180.781254 119.140141) (xy 182.065395 117.856)
+ (xy 182.065395 118.21521) (xy 180.960859 119.319746) (xy 181.074764 119.682758) (xy 181.453632 119.875959) (xy 181.862913 119.991534)
+ (xy 182.286876 120.025042) (xy 182.70923 119.975194) (xy 183.113744 119.843908) (xy 183.415236 119.682758) (xy 183.529141 119.319746)
+ (xy 183.529141 121.031) (xy 183.452458 121.031) (xy 180.912458 121.031) (xy 180.789777 121.055403) (xy 180.674215 121.10327)
+ (xy 180.570211 121.172763) (xy 180.481763 121.261211) (xy 180.41227 121.365215) (xy 180.364403 121.480777) (xy 180.34 121.603458)
+ (xy 180.34 121.728542) (xy 180.34 122.0851) (xy 174.543205 122.0851) (xy 174.492283 122.008455) (xy 174.290462 121.80522)
+ (xy 174.2059 121.748182) (xy 174.2059 120.315855) (xy 174.258524 120.282459) (xy 174.465941 120.084939) (xy 174.631042 119.850893)
+ (xy 174.747539 119.589236) (xy 174.810995 119.309935) (xy 174.815563 118.982791) (xy 174.759931 118.701826) (xy 174.650785 118.437019)
+ (xy 174.492283 118.198455) (xy 174.290462 117.99522) (xy 174.05301 117.835057) (xy 173.788971 117.724065) (xy 173.508403 117.666472)
+ (xy 173.221991 117.664473) (xy 172.940645 117.718142) (xy 172.675082 117.825437) (xy 172.435417 117.982269) (xy 172.230778 118.182666)
+ (xy 172.068961 118.418994) (xy 171.956129 118.682252) (xy 171.896579 118.962412) (xy 171.89258 119.248803) (xy 171.944284 119.530516)
+ (xy 172.049722 119.796822) (xy 172.204877 120.037576) (xy 172.403841 120.243608) (xy 172.5041 120.31329) (xy 172.5041 121.747324)
+ (xy 172.435417 121.792269) (xy 172.230778 121.992666) (xy 172.068961 122.228994) (xy 171.956129 122.492252) (xy 171.896579 122.772412)
+ (xy 171.89258 123.058803) (xy 171.944284 123.340516) (xy 172.049722 123.606822) (xy 172.204877 123.847576) (xy 172.403841 124.053608)
+ (xy 172.639033 124.217072) (xy 172.901497 124.331739) (xy 173.181234 124.393243) (xy 173.46759 124.399242) (xy 173.749658 124.349506)
+ (xy 174.016693 124.245929) (xy 174.258524 124.092459) (xy 174.465941 123.894939) (xy 174.542153 123.7869) (xy 180.34 123.7869)
+ (xy 180.34 124.268542) (xy 180.364403 124.391223) (xy 180.41227 124.506785) (xy 180.481763 124.610789) (xy 180.570211 124.699237)
+ (xy 180.674215 124.76873) (xy 180.789777 124.816597) (xy 180.912458 124.841) (xy 181.037542 124.841) (xy 183.577542 124.841)
+ (xy 183.700223 124.816597) (xy 183.815785 124.76873) (xy 183.919789 124.699237) (xy 184.008237 124.610789) (xy 184.07773 124.506785)
+ (xy 184.125597 124.391223) (xy 184.15 124.268542) (xy 184.15 131.0894) (xy 167.195563 131.0894) (xy 167.195563 122.792791)
+ (xy 167.139931 122.511826) (xy 167.030785 122.247019) (xy 166.872283 122.008455) (xy 166.670462 121.80522) (xy 166.43301 121.645057)
+ (xy 166.168971 121.534065) (xy 165.888403 121.476472) (xy 165.601991 121.474473) (xy 165.320645 121.528142) (xy 165.055082 121.635437)
+ (xy 164.815417 121.792269) (xy 164.610778 121.992666) (xy 164.448961 122.228994) (xy 164.336129 122.492252) (xy 164.276579 122.772412)
+ (xy 164.27258 123.058803) (xy 164.323802 123.337892) (xy 162.559999 125.542647) (xy 162.207546 125.8951) (xy 157.197454 125.8951)
+ (xy 157.0609 125.758546) (xy 157.0609 125.395855) (xy 157.113524 125.362459) (xy 157.320941 125.164939) (xy 157.486042 124.930893)
+ (xy 157.602539 124.669236) (xy 157.665995 124.389935) (xy 157.670563 124.062791) (xy 157.614931 123.781826) (xy 157.505785 123.517019)
+ (xy 157.347283 123.278455) (xy 157.145462 123.07522) (xy 156.90801 122.915057) (xy 156.643971 122.804065) (xy 156.363403 122.746472)
+ (xy 156.076991 122.744473) (xy 155.971878 122.764524) (xy 155.541677 122.334323) (xy 155.480943 122.284435) (xy 155.42073 122.233911)
+ (xy 155.416811 122.231756) (xy 155.413352 122.228915) (xy 155.344027 122.191743) (xy 155.275205 122.153908) (xy 155.270943 122.152556)
+ (xy 155.266997 122.15044) (xy 155.191791 122.127447) (xy 155.116912 122.103694) (xy 155.112466 122.103195) (xy 155.108187 122.101887)
+ (xy 155.029966 122.093941) (xy 154.95188 122.085183) (xy 154.943137 122.085121) (xy 154.942971 122.085105) (xy 154.942815 122.085119)
+ (xy 154.94 122.0851) (xy 151.810625 122.0851) (xy 151.804097 122.052277) (xy 151.75623 121.936715) (xy 151.686737 121.832711)
+ (xy 151.598289 121.744263) (xy 151.494285 121.67477) (xy 151.378723 121.626903) (xy 151.256042 121.6025) (xy 151.130958 121.6025)
+ (xy 149.733958 121.6025) (xy 149.611277 121.626903) (xy 149.495715 121.67477) (xy 149.391711 121.744263) (xy 149.303263 121.832711)
+ (xy 149.23377 121.936715) (xy 149.185903 122.052277) (xy 149.1615 122.174958) (xy 149.1615 122.300042) (xy 149.1615 123.697042)
+ (xy 149.185903 123.819723) (xy 149.23377 123.935285) (xy 149.303263 124.039289) (xy 149.391711 124.127737) (xy 149.495715 124.19723)
+ (xy 149.611277 124.245097) (xy 149.733958 124.2695) (xy 149.859042 124.2695) (xy 149.921306 124.2695) (xy 149.874206 124.28853)
+ (xy 149.655381 124.431725) (xy 149.468537 124.614695) (xy 149.374091 124.752629) (xy 149.316081 124.644098) (xy 149.011449 124.599156)
+ (xy 148.831844 124.778761) (xy 148.831844 124.419551) (xy 148.786902 124.114919) (xy 148.505384 123.978776) (xy 148.202714 123.900171)
+ (xy 147.890526 123.882123) (xy 147.580815 123.925328) (xy 147.285484 124.028123) (xy 147.123098 124.114919) (xy 147.078156 124.419551)
+ (xy 147.955 125.296395) (xy 148.831844 124.419551) (xy 148.831844 124.778761) (xy 148.134605 125.476) (xy 149.011449 126.352844)
+ (xy 149.316081 126.307902) (xy 149.371189 126.193949) (xy 149.444888 126.308308) (xy 149.58463 126.453015) (xy 148.872546 127.1651)
+ (xy 148.831844 127.1651) (xy 148.831844 126.532449) (xy 147.955 125.655605) (xy 147.775395 125.83521) (xy 147.775395 125.476)
+ (xy 146.898551 124.599156) (xy 146.593919 124.644098) (xy 146.457776 124.925616) (xy 146.379171 125.228286) (xy 146.361123 125.540474)
+ (xy 146.404328 125.850185) (xy 146.507123 126.145516) (xy 146.593919 126.307902) (xy 146.898551 126.352844) (xy 147.775395 125.476)
+ (xy 147.775395 125.83521) (xy 147.078156 126.532449) (xy 147.123098 126.837081) (xy 147.404616 126.973224) (xy 147.707286 127.051829)
+ (xy 148.019474 127.069877) (xy 148.329185 127.026672) (xy 148.624516 126.923877) (xy 148.786902 126.837081) (xy 148.831844 126.532449)
+ (xy 148.831844 127.1651) (xy 145.845169 127.1651) (xy 145.803931 126.956826) (xy 145.694785 126.692019) (xy 145.536283 126.453455)
+ (xy 145.334462 126.25022) (xy 145.09701 126.090057) (xy 144.832971 125.979065) (xy 144.552403 125.921472) (xy 144.265991 125.919473)
+ (xy 144.160878 125.939524) (xy 142.3035 124.082146) (xy 142.3035 122.809958) (xy 142.279097 122.687277) (xy 142.23123 122.571715)
+ (xy 142.161737 122.467711) (xy 142.073289 122.379263) (xy 141.969285 122.30977) (xy 141.853723 122.261903) (xy 141.731042 122.2375)
+ (xy 141.605958 122.2375) (xy 140.208958 122.2375) (xy 140.086277 122.261903) (xy 139.970715 122.30977) (xy 139.866711 122.379263)
+ (xy 139.778263 122.467711) (xy 139.70877 122.571715) (xy 139.660903 122.687277) (xy 139.654374 122.7201) (xy 138.43 122.7201)
+ (xy 138.351806 122.727766) (xy 138.273476 122.73462) (xy 138.269179 122.735868) (xy 138.264726 122.736305) (xy 138.189506 122.759015)
+ (xy 138.114003 122.780951) (xy 138.110027 122.783011) (xy 138.105747 122.784304) (xy 138.036356 122.821199) (xy 137.966567 122.857375)
+ (xy 137.963071 122.860165) (xy 137.959119 122.862267) (xy 137.89819 122.911959) (xy 137.836782 122.960981) (xy 137.830556 122.96712)
+ (xy 137.830427 122.967226) (xy 137.830327 122.967346) (xy 137.828323 122.969323) (xy 137.442546 123.3551) (xy 135.019404 123.3551)
+ (xy 134.839118 123.173549) (xy 134.622314 123.027313) (xy 134.381235 122.925973) (xy 134.125063 122.873388) (xy 133.863557 122.871563)
+ (xy 133.606676 122.920565) (xy 133.5659 122.937039) (xy 133.5659 121.891454) (xy 133.956065 121.501288) (xy 134.039497 121.537739)
+ (xy 134.319234 121.599243) (xy 134.60559 121.605242) (xy 134.887658 121.555506) (xy 135.154693 121.451929) (xy 135.396524 121.298459)
+ (xy 135.603941 121.100939) (xy 135.769042 120.866893) (xy 135.885539 120.605236) (xy 135.948995 120.325935) (xy 135.953563 119.998791)
+ (xy 135.897931 119.717826) (xy 135.788785 119.453019) (xy 135.630283 119.214455) (xy 135.428462 119.01122) (xy 135.19101 118.851057)
+ (xy 134.935643 118.74371) (xy 138.782454 114.8969) (xy 140.145395 114.8969) (xy 140.130381 114.906725) (xy 139.943537 115.089695)
+ (xy 139.795791 115.305473) (xy 139.69277 115.545839) (xy 139.638399 115.801637) (xy 139.634747 116.063124) (xy 139.681955 116.320341)
+ (xy 139.778225 116.563489) (xy 139.919888 116.783308) (xy 140.10155 116.971425) (xy 140.1191 116.983622) (xy 140.1191 118.491)
+ (xy 140.126771 118.569239) (xy 140.133621 118.647524) (xy 140.134867 118.651815) (xy 140.135305 118.656274) (xy 140.158041 118.73158)
+ (xy 140.179952 118.806997) (xy 140.18201 118.810967) (xy 140.183304 118.815253) (xy 140.220207 118.884658) (xy 140.256375 118.954434)
+ (xy 140.259167 118.957931) (xy 140.261267 118.961881) (xy 140.310941 119.022787) (xy 140.359981 119.084218) (xy 140.36612 119.090443)
+ (xy 140.366226 119.090573) (xy 140.366346 119.090672) (xy 140.368323 119.092677) (xy 143.66581 122.390164) (xy 143.588263 122.467711)
+ (xy 143.51877 122.571715) (xy 143.470903 122.687277) (xy 143.4465 122.809958) (xy 143.4465 122.935042) (xy 143.4465 124.332042)
+ (xy 143.470903 124.454723) (xy 143.51877 124.570285) (xy 143.588263 124.674289) (xy 143.676711 124.762737) (xy 143.780715 124.83223)
+ (xy 143.896277 124.880097) (xy 144.018958 124.9045) (xy 144.144042 124.9045) (xy 145.541042 124.9045) (xy 145.663723 124.880097)
+ (xy 145.779285 124.83223) (xy 145.883289 124.762737) (xy 145.971737 124.674289) (xy 146.04123 124.570285) (xy 146.089097 124.454723)
+ (xy 146.1135 124.332042) (xy 146.1135 124.206958) (xy 146.1135 122.809958) (xy 146.089097 122.687277) (xy 146.04123 122.571715)
+ (xy 145.971737 122.467711) (xy 145.883289 122.379263) (xy 145.779285 122.30977) (xy 145.663723 122.261903) (xy 145.626337 122.254466)
+ (xy 145.623233 122.22281) (xy 145.61638 122.144476) (xy 145.615131 122.140179) (xy 145.614695 122.135726) (xy 145.591984 122.060506)
+ (xy 145.570049 121.985003) (xy 145.567988 121.981027) (xy 145.566696 121.976747) (xy 145.5298 121.907356) (xy 145.493625 121.837567)
+ (xy 145.490834 121.834071) (xy 145.488733 121.830119) (xy 145.43904 121.76919) (xy 145.390019 121.707782) (xy 145.383879 121.701556)
+ (xy 145.383774 121.701427) (xy 145.383653 121.701327) (xy 145.381677 121.699323) (xy 141.8209 118.138546) (xy 141.8209 116.982191)
+ (xy 141.984337 116.826552) (xy 142.0241 116.770184) (xy 142.0241 117.221) (xy 142.031771 117.299239) (xy 142.038621 117.377524)
+ (xy 142.039867 117.381815) (xy 142.040305 117.386274) (xy 142.063041 117.46158) (xy 142.084952 117.536997) (xy 142.08701 117.540967)
+ (xy 142.088304 117.545253) (xy 142.125207 117.614658) (xy 142.161375 117.684434) (xy 142.164167 117.687931) (xy 142.166267 117.691881)
+ (xy 142.215941 117.752787) (xy 142.264981 117.814218) (xy 142.27112 117.820443) (xy 142.271226 117.820573) (xy 142.271346 117.820672)
+ (xy 142.273323 117.822677) (xy 145.448323 120.997677) (xy 145.509056 121.047564) (xy 145.56927 121.098089) (xy 145.573188 121.100243)
+ (xy 145.576648 121.103085) (xy 145.645972 121.140256) (xy 145.714795 121.178092) (xy 145.719056 121.179443) (xy 145.723003 121.18156)
+ (xy 145.798208 121.204552) (xy 145.873088 121.228306) (xy 145.877533 121.228804) (xy 145.881813 121.230113) (xy 145.960033 121.238058)
+ (xy 146.03812 121.246817) (xy 146.046862 121.246878) (xy 146.047029 121.246895) (xy 146.047184 121.24688) (xy 146.05 121.2469)
+ (xy 152.4 121.2469) (xy 152.478239 121.239228) (xy 152.556524 121.232379) (xy 152.560815 121.231132) (xy 152.565274 121.230695)
+ (xy 152.64058 121.207958) (xy 152.715997 121.186048) (xy 152.719967 121.183989) (xy 152.724253 121.182696) (xy 152.793658 121.145792)
+ (xy 152.863434 121.109625) (xy 152.866931 121.106832) (xy 152.870881 121.104733) (xy 152.931787 121.055058) (xy 152.993218 121.006019)
+ (xy 152.999443 120.999879) (xy 152.999573 120.999774) (xy 152.999672 120.999653) (xy 153.001677 120.997677) (xy 155.970552 118.028801)
+ (xy 156.036234 118.043243) (xy 156.32259 118.049242) (xy 156.604658 117.999506) (xy 156.871693 117.895929) (xy 157.113524 117.742459)
+ (xy 157.320941 117.544939) (xy 157.397153 117.4369) (xy 158.830774 117.4369) (xy 158.869877 117.497576) (xy 159.068841 117.703608)
+ (xy 159.304033 117.867072) (xy 159.566497 117.981739) (xy 159.846234 118.043243) (xy 160.13259 118.049242) (xy 160.414658 117.999506)
+ (xy 160.681693 117.895929) (xy 160.923524 117.742459) (xy 161.130941 117.544939) (xy 161.296042 117.310893) (xy 161.412539 117.049236)
+ (xy 161.475995 116.769935) (xy 161.480563 116.442791) (xy 161.424931 116.161826) (xy 161.315785 115.897019) (xy 161.157283 115.658455)
+ (xy 160.955462 115.45522) (xy 160.71801 115.295057) (xy 160.453971 115.184065) (xy 160.173403 115.126472) (xy 159.886991 115.124473)
+ (xy 159.605645 115.178142) (xy 159.340082 115.285437) (xy 159.100417 115.442269) (xy 158.895778 115.642666) (xy 158.832487 115.7351)
+ (xy 157.398205 115.7351) (xy 157.347283 115.658455) (xy 157.145462 115.45522) (xy 156.90801 115.295057) (xy 156.643971 115.184065)
+ (xy 156.363403 115.126472) (xy 156.333093 115.12626) (xy 156.562454 114.8969) (xy 161.925 114.8969) (xy 163.477546 114.8969)
+ (xy 164.8841 116.303454) (xy 164.8841 117.937324) (xy 164.815417 117.982269) (xy 164.610778 118.182666) (xy 164.547487 118.2751)
+ (xy 161.925 118.2751) (xy 161.84676 118.282771) (xy 161.768476 118.289621) (xy 161.764184 118.290867) (xy 161.759726 118.291305)
+ (xy 161.684419 118.314041) (xy 161.609003 118.335952) (xy 161.605032 118.33801) (xy 161.600747 118.339304) (xy 161.53132 118.376218)
+ (xy 161.461567 118.412375) (xy 161.458071 118.415165) (xy 161.454119 118.417267) (xy 161.39319 118.466959) (xy 161.331782 118.515981)
+ (xy 161.325556 118.52212) (xy 161.325427 118.522226) (xy 161.325327 118.522346) (xy 161.323323 118.524323) (xy 159.418323 120.429323)
+ (xy 159.368435 120.490056) (xy 159.317911 120.55027) (xy 159.315756 120.554188) (xy 159.312915 120.557648) (xy 159.275743 120.626972)
+ (xy 159.237908 120.695795) (xy 159.236556 120.700056) (xy 159.23444 120.704003) (xy 159.211447 120.779208) (xy 159.187694 120.854088)
+ (xy 159.187195 120.858533) (xy 159.185887 120.862813) (xy 159.177941 120.941033) (xy 159.169183 121.01912) (xy 159.169121 121.027862)
+ (xy 159.169105 121.028029) (xy 159.169119 121.028184) (xy 159.1691 121.031) (xy 159.1691 123.017324) (xy 159.100417 123.062269)
+ (xy 158.895778 123.262666) (xy 158.733961 123.498994) (xy 158.621129 123.762252) (xy 158.561579 124.042412) (xy 158.55758 124.328803)
+ (xy 158.609284 124.610516) (xy 158.714722 124.876822) (xy 158.869877 125.117576) (xy 159.068841 125.323608) (xy 159.304033 125.487072)
+ (xy 159.566497 125.601739) (xy 159.846234 125.663243) (xy 160.13259 125.669242) (xy 160.414658 125.619506) (xy 160.681693 125.515929)
+ (xy 160.923524 125.362459) (xy 161.130941 125.164939) (xy 161.296042 124.930893) (xy 161.412539 124.669236) (xy 161.475995 124.389935)
+ (xy 161.480563 124.062791) (xy 161.424931 123.781826) (xy 161.315785 123.517019) (xy 161.157283 123.278455) (xy 160.955462 123.07522)
+ (xy 160.8709 123.018182) (xy 160.8709 121.383454) (xy 162.277454 119.9769) (xy 164.545774 119.9769) (xy 164.584877 120.037576)
+ (xy 164.783841 120.243608) (xy 165.019033 120.407072) (xy 165.281497 120.521739) (xy 165.561234 120.583243) (xy 165.84759 120.589242)
+ (xy 166.129658 120.539506) (xy 166.396693 120.435929) (xy 166.638524 120.282459) (xy 166.845941 120.084939) (xy 167.011042 119.850893)
+ (xy 167.127539 119.589236) (xy 167.190995 119.309935) (xy 167.195563 118.982791) (xy 167.139931 118.701826) (xy 167.030785 118.437019)
+ (xy 166.872283 118.198455) (xy 166.670462 117.99522) (xy 166.5859 117.938182) (xy 166.5859 115.951) (xy 166.578228 115.87276)
+ (xy 166.571379 115.794476) (xy 166.570132 115.790184) (xy 166.569695 115.785726) (xy 166.546958 115.710419) (xy 166.525048 115.635003)
+ (xy 166.522989 115.631032) (xy 166.521696 115.626747) (xy 166.484781 115.55732) (xy 166.448625 115.487567) (xy 166.445834 115.484071)
+ (xy 166.443733 115.480119) (xy 166.39404 115.41919) (xy 166.345019 115.357782) (xy 166.338879 115.351556) (xy 166.338774 115.351427)
+ (xy 166.338653 115.351327) (xy 166.336677 115.349323) (xy 164.431677 113.444323) (xy 164.370943 113.394435) (xy 164.31073 113.343911)
+ (xy 164.306811 113.341756) (xy 164.303352 113.338915) (xy 164.234027 113.301743) (xy 164.165205 113.263908) (xy 164.160943 113.262556)
+ (xy 164.156997 113.26044) (xy 164.081791 113.237447) (xy 164.006912 113.213694) (xy 164.002466 113.213195) (xy 163.998187 113.211887)
+ (xy 163.919966 113.203941) (xy 163.84188 113.195183) (xy 163.833137 113.195121) (xy 163.832971 113.195105) (xy 163.832815 113.195119)
+ (xy 163.83 113.1951) (xy 161.925 113.1951) (xy 156.21 113.1951) (xy 156.13181 113.202766) (xy 156.053476 113.20962)
+ (xy 156.049179 113.210868) (xy 156.044726 113.211305) (xy 155.969506 113.234015) (xy 155.894003 113.255951) (xy 155.890027 113.258011)
+ (xy 155.885747 113.259304) (xy 155.816356 113.296199) (xy 155.746567 113.332375) (xy 155.743071 113.335165) (xy 155.739119 113.337267)
+ (xy 155.67819 113.386959) (xy 155.616782 113.435981) (xy 155.610556 113.44212) (xy 155.610427 113.442226) (xy 155.610327 113.442346)
+ (xy 155.608323 113.444323) (xy 152.047546 117.0051) (xy 150.540625 117.0051) (xy 150.534097 116.972277) (xy 150.48623 116.856715)
+ (xy 150.416737 116.752711) (xy 150.328289 116.664263) (xy 150.224285 116.59477) (xy 150.108723 116.546903) (xy 149.986042 116.5225)
+ (xy 149.860958 116.5225) (xy 149.80214 116.5225) (xy 149.829154 116.512022) (xy 150.049957 116.371897) (xy 150.239337 116.191552)
+ (xy 150.390081 115.977858) (xy 150.496448 115.738955) (xy 150.49708 115.736171) (xy 150.573225 115.928489) (xy 150.714888 116.148308)
+ (xy 150.89655 116.336425) (xy 151.111291 116.485674) (xy 151.350932 116.59037) (xy 151.606344 116.646526) (xy 151.8678 116.652003)
+ (xy 152.12534 116.606592) (xy 152.369154 116.512022) (xy 152.589957 116.371897) (xy 152.779337 116.191552) (xy 152.930081 115.977858)
+ (xy 153.036448 115.738955) (xy 153.094386 115.483941) (xy 153.098557 115.185244) (xy 153.047762 114.928711) (xy 152.948107 114.686931)
+ (xy 152.803388 114.469111) (xy 152.7048 114.369831) (xy 152.7048 114.04854) (xy 152.696467 113.963558) (xy 152.689287 113.878488)
+ (xy 152.687525 113.872353) (xy 152.686902 113.865999) (xy 152.662222 113.784255) (xy 152.638654 113.702199) (xy 152.635733 113.696522)
+ (xy 152.633888 113.69041) (xy 152.593808 113.615031) (xy 152.554744 113.539101) (xy 152.550775 113.534098) (xy 152.547779 113.528463)
+ (xy 152.493815 113.462296) (xy 152.440753 113.395408) (xy 152.431873 113.386347) (xy 152.431855 113.386325) (xy 152.431835 113.386308)
+ (xy 152.431568 113.386036) (xy 151.603528 112.552916) (xy 151.603398 112.552809) (xy 151.601301 112.550683) (xy 148.141786 109.093236)
+ (xy 148.145563 108.822791) (xy 148.089931 108.541826) (xy 147.980785 108.277019) (xy 147.822283 108.038455) (xy 147.620462 107.83522)
+ (xy 147.38301 107.675057) (xy 147.118971 107.564065) (xy 146.838403 107.506472) (xy 146.551991 107.504473) (xy 146.270645 107.558142)
+ (xy 146.005082 107.665437) (xy 145.765417 107.822269) (xy 145.560778 108.022666) (xy 145.558358 108.0262) (xy 144.722877 108.0262)
+ (xy 144.722877 104.075526) (xy 144.679672 103.765815) (xy 144.576877 103.470484) (xy 144.490081 103.308098) (xy 144.185449 103.263156)
+ (xy 144.005844 103.442761) (xy 144.005844 103.083551) (xy 143.960902 102.778919) (xy 143.679384 102.642776) (xy 143.376714 102.564171)
+ (xy 143.064526 102.546123) (xy 142.754815 102.589328) (xy 142.459484 102.692123) (xy 142.297098 102.778919) (xy 142.252156 103.083551)
+ (xy 143.129 103.960395) (xy 144.005844 103.083551) (xy 144.005844 103.442761) (xy 143.308605 104.14) (xy 144.185449 105.016844)
+ (xy 144.490081 104.971902) (xy 144.626224 104.690384) (xy 144.704829 104.387714) (xy 144.722877 104.075526) (xy 144.722877 108.0262)
+ (xy 144.005844 108.0262) (xy 144.005844 105.196449) (xy 143.129 104.319605) (xy 142.949395 104.49921) (xy 142.949395 104.14)
+ (xy 142.072551 103.263156) (xy 141.767919 103.308098) (xy 141.631776 103.589616) (xy 141.553171 103.892286) (xy 141.535123 104.204474)
+ (xy 141.578328 104.514185) (xy 141.681123 104.809516) (xy 141.767919 104.971902) (xy 142.072551 105.016844) (xy 142.949395 104.14)
+ (xy 142.949395 104.49921) (xy 142.252156 105.196449) (xy 142.297098 105.501081) (xy 142.578616 105.637224) (xy 142.881286 105.715829)
+ (xy 143.193474 105.733877) (xy 143.503185 105.690672) (xy 143.798516 105.587877) (xy 143.960902 105.501081) (xy 144.005844 105.196449)
+ (xy 144.005844 108.0262) (xy 143.772278 108.0262) (xy 141.507539 105.761461) (xy 141.440462 105.706364) (xy 141.373956 105.650558)
+ (xy 141.369624 105.648176) (xy 141.365807 105.645041) (xy 141.289317 105.604027) (xy 141.213227 105.562197) (xy 141.208515 105.560702)
+ (xy 141.20416 105.558367) (xy 141.121169 105.532994) (xy 141.038395 105.506737) (xy 141.03348 105.506185) (xy 141.028758 105.504742)
+ (xy 140.942421 105.495971) (xy 140.856122 105.486292) (xy 140.84646 105.486224) (xy 140.846281 105.486206) (xy 140.846113 105.486221)
+ (xy 140.843 105.4862) (xy 140.716 105.4862) (xy 136.201123 105.4862) (xy 136.109118 105.393549) (xy 135.892314 105.247313)
+ (xy 135.651235 105.145973) (xy 135.395063 105.093388) (xy 135.133557 105.091563) (xy 134.876676 105.140565) (xy 134.634206 105.23853)
+ (xy 134.415381 105.381725) (xy 134.228537 105.564695) (xy 134.080791 105.780473) (xy 133.97777 106.020839) (xy 133.923399 106.276637)
+ (xy 133.919747 106.538124) (xy 133.966955 106.795341) (xy 134.063225 107.038489) (xy 134.204888 107.258308) (xy 134.38655 107.446425)
+ (xy 134.601291 107.595674) (xy 134.834553 107.697583) (xy 134.634206 107.77853) (xy 134.415381 107.921725) (xy 134.228537 108.104695)
+ (xy 134.221412 108.1151) (xy 131.728874 108.1151) (xy 129.438097 105.824323) (xy 129.377363 105.774435) (xy 129.31715 105.723911)
+ (xy 129.313231 105.721756) (xy 129.309772 105.718915) (xy 129.240447 105.681743) (xy 129.171625 105.643908) (xy 129.167363 105.642556)
+ (xy 129.163417 105.64044) (xy 129.088211 105.617447) (xy 129.013332 105.593694) (xy 129.008886 105.593195) (xy 129.004607 105.591887)
+ (xy 128.95292 105.586636) (xy 128.944097 105.542277) (xy 128.89623 105.426715) (xy 128.826737 105.322711) (xy 128.738289 105.234263)
+ (xy 128.634285 105.16477) (xy 128.518723 105.116903) (xy 128.396042 105.0925) (xy 128.270958 105.0925) (xy 126.873958 105.0925)
+ (xy 126.751277 105.116903) (xy 126.635715 105.16477) (xy 126.531711 105.234263) (xy 126.443263 105.322711) (xy 126.37377 105.426715)
+ (xy 126.325903 105.542277) (xy 126.3015 105.664958) (xy 126.3015 105.790042) (xy 126.3015 107.187042) (xy 126.325903 107.309723)
+ (xy 126.37377 107.425285) (xy 126.443263 107.529289) (xy 126.531711 107.617737) (xy 126.635715 107.68723) (xy 126.656887 107.696)
+ (xy 126.635715 107.70477) (xy 126.531711 107.774263) (xy 126.443263 107.862711) (xy 126.37377 107.966715) (xy 126.325903 108.082277)
+ (xy 126.3015 108.204958) (xy 126.3015 108.330042) (xy 126.3015 109.727042) (xy 126.325903 109.849723) (xy 126.37377 109.965285)
+ (xy 126.443263 110.069289) (xy 126.48652 110.112546) (xy 122.73677 113.862295) (xy 122.708403 113.856472) (xy 122.421991 113.854473)
+ (xy 122.140645 113.908142) (xy 121.875082 114.015437) (xy 121.635417 114.172269) (xy 121.430778 114.372666) (xy 121.268961 114.608994)
+ (xy 121.156129 114.872252) (xy 121.096579 115.152412) (xy 121.09258 115.438803) (xy 121.144284 115.720516) (xy 121.249722 115.986822)
+ (xy 121.404877 116.227576) (xy 121.603841 116.433608) (xy 121.839033 116.597072) (xy 122.101497 116.711739) (xy 122.381234 116.773243)
+ (xy 122.66759 116.779242) (xy 122.949658 116.729506) (xy 123.216693 116.625929) (xy 123.458524 116.472459) (xy 123.665941 116.274939)
+ (xy 123.831042 116.040893) (xy 123.947539 115.779236) (xy 124.010995 115.499935) (xy 124.015563 115.172791) (xy 123.985386 115.020387)
+ (xy 127.635 111.370774) (xy 129.300302 113.036076) (xy 129.148537 113.184695) (xy 129.000791 113.400473) (xy 128.89777 113.640839)
+ (xy 128.843399 113.896637) (xy 128.839747 114.158124) (xy 128.886955 114.415341) (xy 128.983225 114.658489) (xy 129.124888 114.878308)
+ (xy 129.30655 115.066425) (xy 129.521291 115.215674) (xy 129.605582 115.2525) (xy 129.413958 115.2525) (xy 129.291277 115.276903)
+ (xy 129.175715 115.32477) (xy 129.071711 115.394263) (xy 128.983263 115.482711) (xy 128.91377 115.586715) (xy 128.865903 115.702277)
+ (xy 128.8415 115.824958) (xy 128.8415 115.950042) (xy 128.8415 117.347042) (xy 128.865903 117.469723) (xy 128.91377 117.585285)
+ (xy 128.983263 117.689289) (xy 129.071711 117.777737) (xy 129.175715 117.84723) (xy 129.291277 117.895097) (xy 129.413958 117.9195)
+ (xy 129.539042 117.9195) (xy 130.813146 117.9195) (xy 128.306147 120.426498) (xy 128.328995 120.325935) (xy 128.333563 119.998791)
+ (xy 128.277931 119.717826) (xy 128.168785 119.453019) (xy 128.010283 119.214455) (xy 127.808462 119.01122) (xy 127.57101 118.851057)
+ (xy 127.306971 118.740065) (xy 127.026403 118.682472) (xy 126.739991 118.680473) (xy 126.458645 118.734142) (xy 126.193082 118.841437)
+ (xy 125.953417 118.998269) (xy 125.748778 119.198666) (xy 125.586961 119.434994) (xy 125.474129 119.698252) (xy 125.414579 119.978412)
+ (xy 125.41058 120.264803) (xy 125.462284 120.546516) (xy 125.567722 120.812822) (xy 125.722877 121.053576) (xy 125.921841 121.259608)
+ (xy 126.012811 121.322834) (xy 124.264356 123.071289) (xy 124.27677 122.87655) (xy 124.232088 122.541792) (xy 124.122957 122.222183)
+ (xy 124.019628 122.028866) (xy 123.702042 121.968563) (xy 123.522437 122.148168) (xy 123.522437 121.788958) (xy 123.462134 121.471372)
+ (xy 123.158969 121.322541) (xy 122.832593 121.235715) (xy 122.49555 121.21423) (xy 122.160792 121.258912) (xy 121.841183 121.368043)
+ (xy 121.647866 121.471372) (xy 121.587563 121.788958) (xy 122.555 122.756395) (xy 123.522437 121.788958) (xy 123.522437 122.148168)
+ (xy 122.734605 122.936) (xy 122.748747 122.950142) (xy 122.569142 123.129747) (xy 122.555 123.115605) (xy 122.375395 123.29521)
+ (xy 122.375395 122.936) (xy 121.407958 121.968563) (xy 121.090372 122.028866) (xy 120.941541 122.332031) (xy 120.854715 122.658407)
+ (xy 120.83323 122.99545) (xy 120.877912 123.330208) (xy 120.987043 123.649817) (xy 121.090372 123.843134) (xy 121.407958 123.903437)
+ (xy 122.375395 122.936) (xy 122.375395 123.29521) (xy 121.587563 124.083042) (xy 121.618144 124.2441) (xy 120.338877 124.2441)
+ (xy 120.338877 112.711526) (xy 120.338877 106.996526) (xy 120.295672 106.686815) (xy 120.192877 106.391484) (xy 120.106081 106.229098)
+ (xy 119.801449 106.184156) (xy 119.70477 106.280835) (xy 119.70477 101.28655) (xy 119.660088 100.951792) (xy 119.550957 100.632183)
+ (xy 119.447628 100.438866) (xy 119.130042 100.378563) (xy 118.162605 101.346) (xy 119.130042 102.313437) (xy 119.447628 102.253134)
+ (xy 119.596459 101.949969) (xy 119.683285 101.623593) (xy 119.70477 101.28655) (xy 119.70477 106.280835) (xy 119.621844 106.363761)
+ (xy 119.621844 106.004551) (xy 119.576902 105.699919) (xy 119.295384 105.563776) (xy 118.992714 105.485171) (xy 118.950437 105.482726)
+ (xy 118.950437 102.493042) (xy 117.983 101.525605) (xy 117.015563 102.493042) (xy 117.075866 102.810628) (xy 117.379031 102.959459)
+ (xy 117.705407 103.046285) (xy 118.04245 103.06777) (xy 118.377208 103.023088) (xy 118.696817 102.913957) (xy 118.890134 102.810628)
+ (xy 118.950437 102.493042) (xy 118.950437 105.482726) (xy 118.680526 105.467123) (xy 118.370815 105.510328) (xy 118.075484 105.613123)
+ (xy 117.913098 105.699919) (xy 117.868156 106.004551) (xy 118.745 106.881395) (xy 119.621844 106.004551) (xy 119.621844 106.363761)
+ (xy 118.924605 107.061) (xy 119.801449 107.937844) (xy 120.106081 107.892902) (xy 120.242224 107.611384) (xy 120.320829 107.308714)
+ (xy 120.338877 106.996526) (xy 120.338877 112.711526) (xy 120.295672 112.401815) (xy 120.192877 112.106484) (xy 120.106081 111.944098)
+ (xy 119.801449 111.899156) (xy 118.924605 112.776) (xy 119.801449 113.652844) (xy 120.106081 113.607902) (xy 120.242224 113.326384)
+ (xy 120.320829 113.023714) (xy 120.338877 112.711526) (xy 120.338877 124.2441) (xy 117.348 124.2441) (xy 117.269764 124.25177)
+ (xy 117.191475 124.258621) (xy 117.187182 124.259868) (xy 117.182726 124.260305) (xy 117.107431 124.283038) (xy 117.032003 124.304952)
+ (xy 117.028032 124.30701) (xy 117.023747 124.308304) (xy 116.954341 124.345207) (xy 116.884566 124.381375) (xy 116.881068 124.384167)
+ (xy 116.877119 124.386267) (xy 116.816212 124.435941) (xy 116.754782 124.484981) (xy 116.748556 124.49112) (xy 116.748427 124.491226)
+ (xy 116.748327 124.491346) (xy 116.746323 124.493323) (xy 116.304298 124.935347) (xy 116.326317 124.865937) (xy 116.357261 124.590063)
+ (xy 116.3574 124.570203) (xy 116.3574 123.841797) (xy 116.330311 123.565518) (xy 116.250074 123.299762) (xy 116.119747 123.054653)
+ (xy 115.944293 122.839525) (xy 115.730396 122.662574) (xy 115.486202 122.530539) (xy 115.221013 122.448449) (xy 114.94493 122.419432)
+ (xy 114.668469 122.444592) (xy 114.40216 122.522971) (xy 114.156146 122.651583) (xy 113.939799 122.825531) (xy 113.761359 123.038188)
+ (xy 113.664587 123.214214) (xy 113.579747 123.054653) (xy 113.404293 122.839525) (xy 113.2459 122.70849) (xy 113.2459 122.0089)
+ (xy 116.713 122.0089) (xy 116.791239 122.001228) (xy 116.869524 121.994379) (xy 116.873815 121.993132) (xy 116.878274 121.992695)
+ (xy 116.95358 121.969958) (xy 117.028997 121.948048) (xy 117.032967 121.945989) (xy 117.037253 121.944696) (xy 117.106658 121.907792)
+ (xy 117.176434 121.871625) (xy 117.179931 121.868832) (xy 117.183881 121.866733) (xy 117.244787 121.817058) (xy 117.306218 121.768019)
+ (xy 117.312443 121.761879) (xy 117.312573 121.761774) (xy 117.312672 121.761653) (xy 117.314677 121.759677) (xy 119.219677 119.854677)
+ (xy 119.269564 119.793943) (xy 119.320089 119.73373) (xy 119.322243 119.729811) (xy 119.325085 119.726352) (xy 119.362246 119.657045)
+ (xy 119.400092 119.588205) (xy 119.401444 119.583941) (xy 119.40356 119.579996) (xy 119.426548 119.504805) (xy 119.450306 119.429912)
+ (xy 119.450804 119.425466) (xy 119.452113 119.421187) (xy 119.460057 119.342971) (xy 119.468817 119.26488) (xy 119.468878 119.256136)
+ (xy 119.468895 119.25597) (xy 119.46888 119.255814) (xy 119.4689 119.253) (xy 119.4689 115.697) (xy 119.461228 115.61876)
+ (xy 119.454379 115.540476) (xy 119.453132 115.536184) (xy 119.452695 115.531726) (xy 119.429958 115.456419) (xy 119.408048 115.381003)
+ (xy 119.405989 115.377032) (xy 119.404696 115.372747) (xy 119.367781 115.30332) (xy 119.331625 115.233567) (xy 119.328834 115.230071)
+ (xy 119.326733 115.226119) (xy 119.27704 115.16519) (xy 119.228019 115.103782) (xy 119.221879 115.097556) (xy 119.221774 115.097427)
+ (xy 119.221653 115.097327) (xy 119.219677 115.095323) (xy 118.468779 114.344425) (xy 118.497286 114.351829) (xy 118.809474 114.369877)
+ (xy 119.119185 114.326672) (xy 119.414516 114.223877) (xy 119.576902 114.137081) (xy 119.621844 113.832449) (xy 118.745 112.955605)
+ (xy 118.730857 112.969747) (xy 118.551252 112.790142) (xy 118.565395 112.776) (xy 118.551252 112.761857) (xy 118.730857 112.582252)
+ (xy 118.745 112.596395) (xy 119.621844 111.719551) (xy 119.576902 111.414919) (xy 119.462944 111.359808) (xy 119.569957 111.291897)
+ (xy 119.759337 111.111552) (xy 119.910081 110.897858) (xy 120.016448 110.658955) (xy 120.074386 110.403941) (xy 120.078557 110.105244)
+ (xy 120.027762 109.848711) (xy 119.928107 109.606931) (xy 119.783388 109.389111) (xy 119.621844 109.226434) (xy 119.621844 108.117449)
+ (xy 118.745 107.240605) (xy 118.565395 107.42021) (xy 118.565395 107.061) (xy 117.688551 106.184156) (xy 117.383919 106.229098)
+ (xy 117.247776 106.510616) (xy 117.169171 106.813286) (xy 117.151123 107.125474) (xy 117.194328 107.435185) (xy 117.297123 107.730516)
+ (xy 117.383919 107.892902) (xy 117.688551 107.937844) (xy 118.565395 107.061) (xy 118.565395 107.42021) (xy 117.868156 108.117449)
+ (xy 117.913098 108.422081) (xy 118.194616 108.558224) (xy 118.497286 108.636829) (xy 118.809474 108.654877) (xy 119.119185 108.611672)
+ (xy 119.414516 108.508877) (xy 119.576902 108.422081) (xy 119.621844 108.117449) (xy 119.621844 109.226434) (xy 119.599118 109.203549)
+ (xy 119.382314 109.057313) (xy 119.141235 108.955973) (xy 118.885063 108.903388) (xy 118.623557 108.901563) (xy 118.366676 108.950565)
+ (xy 118.124206 109.04853) (xy 117.905381 109.191725) (xy 117.718537 109.374695) (xy 117.670427 109.444957) (xy 117.667003 109.445952)
+ (xy 117.663032 109.44801) (xy 117.658747 109.449304) (xy 117.589341 109.486207) (xy 117.519566 109.522375) (xy 117.516068 109.525167)
+ (xy 117.512119 109.527267) (xy 117.451212 109.576941) (xy 117.389782 109.625981) (xy 117.383556 109.63212) (xy 117.383427 109.632226)
+ (xy 117.383327 109.632346) (xy 117.381323 109.634323) (xy 116.111323 110.904323) (xy 116.061435 110.965056) (xy 116.010911 111.02527)
+ (xy 116.008756 111.029188) (xy 116.005915 111.032648) (xy 115.968743 111.101972) (xy 115.930908 111.170795) (xy 115.929556 111.175056)
+ (xy 115.92744 111.179003) (xy 115.904447 111.254208) (xy 115.880694 111.329088) (xy 115.880195 111.333533) (xy 115.878887 111.337813)
+ (xy 115.870941 111.416033) (xy 115.862183 111.49412) (xy 115.862121 111.502862) (xy 115.862105 111.503029) (xy 115.862119 111.503184)
+ (xy 115.8621 111.506) (xy 115.8621 112.522) (xy 115.8621 113.792) (xy 115.869771 113.870239) (xy 115.876621 113.948524)
+ (xy 115.877867 113.952815) (xy 115.878305 113.957274) (xy 115.901041 114.03258) (xy 115.922952 114.107997) (xy 115.92501 114.111967)
+ (xy 115.926304 114.116253) (xy 115.963207 114.185658) (xy 115.999375 114.255434) (xy 116.002167 114.258931) (xy 116.004267 114.262881)
+ (xy 116.053941 114.323787) (xy 116.102981 114.385218) (xy 116.10912 114.391443) (xy 116.109226 114.391573) (xy 116.109346 114.391672)
+ (xy 116.111323 114.393677) (xy 117.7671 116.049454) (xy 117.7671 118.900546) (xy 116.360546 120.3071) (xy 113.2459 120.3071)
+ (xy 113.2459 118.08249) (xy 113.390201 117.966469) (xy 113.568641 117.753812) (xy 113.665412 117.577785) (xy 113.750253 117.737347)
+ (xy 113.925707 117.952475) (xy 114.139604 118.129426) (xy 114.383798 118.261461) (xy 114.648987 118.343551) (xy 114.92507 118.372568)
+ (xy 115.201531 118.347408) (xy 115.46784 118.269029) (xy 115.713854 118.140417) (xy 115.930201 117.966469) (xy 116.108641 117.753812)
+ (xy 116.242378 117.510546) (xy 116.326317 117.245937) (xy 116.357261 116.970063) (xy 116.3574 116.950203) (xy 116.3574 116.221797)
+ (xy 116.330311 115.945518) (xy 116.250074 115.679762) (xy 116.119747 115.434653) (xy 115.944293 115.219525) (xy 115.7859 115.08849)
+ (xy 115.7859 114.046) (xy 115.778229 113.967764) (xy 115.771379 113.889475) (xy 115.770131 113.885182) (xy 115.769695 113.880726)
+ (xy 115.746961 113.805431) (xy 115.725048 113.730003) (xy 115.722989 113.726032) (xy 115.721696 113.721747) (xy 115.684792 113.652341)
+ (xy 115.648625 113.582566) (xy 115.645832 113.579068) (xy 115.643733 113.575119) (xy 115.594058 113.514212) (xy 115.545019 113.452782)
+ (xy 115.538879 113.446556) (xy 115.538774 113.446427) (xy 115.538653 113.446327) (xy 115.536677 113.444323) (xy 114.994963 112.902609)
+ (xy 114.998557 112.645244) (xy 114.947762 112.388711) (xy 114.848107 112.146931) (xy 114.703388 111.929111) (xy 114.519118 111.743549)
+ (xy 114.302314 111.597313) (xy 114.081892 111.504656) (xy 114.269154 111.432022) (xy 114.489957 111.291897) (xy 114.679337 111.111552)
+ (xy 114.830081 110.897858) (xy 114.936448 110.658955) (xy 114.994386 110.403941) (xy 114.998557 110.105244) (xy 114.947762 109.848711)
+ (xy 114.848107 109.606931) (xy 114.703388 109.389111) (xy 114.519118 109.203549) (xy 114.302314 109.057313) (xy 114.061235 108.955973)
+ (xy 113.805063 108.903388) (xy 113.543557 108.901563) (xy 113.286676 108.950565) (xy 113.044206 109.04853) (xy 112.825381 109.191725)
+ (xy 112.638537 109.374695) (xy 112.631412 109.3851) (xy 111.043205 109.3851) (xy 110.992283 109.308455) (xy 110.790462 109.10522)
+ (xy 110.55301 108.945057) (xy 110.288971 108.834065) (xy 110.008403 108.776472) (xy 109.721991 108.774473) (xy 109.440645 108.828142)
+ (xy 109.175082 108.935437) (xy 108.935417 109.092269) (xy 108.730778 109.292666) (xy 108.667487 109.3851) (xy 105.051254 109.3851)
+ (xy 106.524453 107.9119) (xy 108.665774 107.9119) (xy 108.704877 107.972576) (xy 108.903841 108.178608) (xy 109.139033 108.342072)
+ (xy 109.401497 108.456739) (xy 109.681234 108.518243) (xy 109.96759 108.524242) (xy 110.249658 108.474506) (xy 110.516693 108.370929)
+ (xy 110.758524 108.217459) (xy 110.965941 108.019939) (xy 111.042153 107.9119) (xy 112.632842 107.9119) (xy 112.79655 108.081425)
+ (xy 113.011291 108.230674) (xy 113.250932 108.33537) (xy 113.506344 108.391526) (xy 113.7678 108.397003) (xy 114.02534 108.351592)
+ (xy 114.269154 108.257022) (xy 114.489957 108.116897) (xy 114.679337 107.936552) (xy 114.830081 107.722858) (xy 114.936448 107.483955)
+ (xy 114.994386 107.228941) (xy 114.998557 106.930244) (xy 114.947762 106.673711) (xy 114.848107 106.431931) (xy 114.703388 106.214111)
+ (xy 114.519118 106.028549) (xy 114.302314 105.882313) (xy 114.061235 105.780973) (xy 113.805063 105.728388) (xy 113.543557 105.726563)
+ (xy 113.286676 105.775565) (xy 113.044206 105.87353) (xy 112.825381 106.016725) (xy 112.638537 106.199695) (xy 112.631412 106.2101)
+ (xy 111.043205 106.2101) (xy 110.992283 106.133455) (xy 110.790462 105.93022) (xy 110.55301 105.770057) (xy 110.288971 105.659065)
+ (xy 110.008403 105.601472) (xy 109.721991 105.599473) (xy 109.440645 105.653142) (xy 109.175082 105.760437) (xy 108.935417 105.917269)
+ (xy 108.730778 106.117666) (xy 108.667487 106.2101) (xy 106.172 106.2101) (xy 106.09376 106.217771) (xy 106.015476 106.224621)
+ (xy 106.011184 106.225867) (xy 106.006726 106.226305) (xy 105.931419 106.249041) (xy 105.856003 106.270952) (xy 105.852032 106.27301)
+ (xy 105.847747 106.274304) (xy 105.778341 106.311207) (xy 105.708566 106.347375) (xy 105.705068 106.350167) (xy 105.701119 106.352267)
+ (xy 105.640212 106.401941) (xy 105.578782 106.450981) (xy 105.572556 106.45712) (xy 105.572427 106.457226) (xy 105.572327 106.457346)
+ (xy 105.570323 106.459323) (xy 103.023531 109.006114) (xy 102.93301 108.945057) (xy 102.668971 108.834065) (xy 102.388403 108.776472)
+ (xy 102.101991 108.774473) (xy 101.820645 108.828142) (xy 101.555082 108.935437) (xy 101.315417 109.092269) (xy 101.110778 109.292666)
+ (xy 100.948961 109.528994) (xy 100.836129 109.792252) (xy 100.776579 110.072412) (xy 100.77258 110.358803) (xy 100.824284 110.640516)
+ (xy 100.929722 110.906822) (xy 101.084877 111.147576) (xy 101.283841 111.353608) (xy 101.50566 111.507777) (xy 101.315417 111.632269)
+ (xy 101.110778 111.832666) (xy 100.948961 112.068994) (xy 100.836129 112.332252) (xy 100.776579 112.612412) (xy 100.77258 112.898803)
+ (xy 100.824284 113.180516) (xy 100.929722 113.446822) (xy 101.084877 113.687576) (xy 101.283841 113.893608) (xy 101.519033 114.057072)
+ (xy 101.781497 114.171739) (xy 102.061234 114.233243) (xy 102.34759 114.239242) (xy 102.629658 114.189506) (xy 102.896693 114.085929)
+ (xy 103.138524 113.932459) (xy 103.345941 113.734939) (xy 103.511042 113.500893) (xy 103.627539 113.239236) (xy 103.690995 112.959935)
+ (xy 103.695563 112.632791) (xy 103.676721 112.537632) (xy 105.127454 111.0869) (xy 108.665774 111.0869) (xy 108.704877 111.147576)
+ (xy 108.903841 111.353608) (xy 109.12566 111.507777) (xy 108.935417 111.632269) (xy 108.730778 111.832666) (xy 108.568961 112.068994)
+ (xy 108.456129 112.332252) (xy 108.396579 112.612412) (xy 108.39258 112.898803) (xy 108.444284 113.180516) (xy 108.549722 113.446822)
+ (xy 108.704877 113.687576) (xy 108.903841 113.893608) (xy 109.139033 114.057072) (xy 109.401497 114.171739) (xy 109.681234 114.233243)
+ (xy 109.96759 114.239242) (xy 110.249658 114.189506) (xy 110.516693 114.085929) (xy 110.758524 113.932459) (xy 110.965941 113.734939)
+ (xy 111.042153 113.6269) (xy 112.632842 113.6269) (xy 112.79655 113.796425) (xy 113.011291 113.945674) (xy 113.250932 114.05037)
+ (xy 113.506344 114.106526) (xy 113.7678 114.112003) (xy 113.793174 114.107528) (xy 114.0841 114.398454) (xy 114.0841 115.089509)
+ (xy 113.939799 115.205531) (xy 113.761359 115.418188) (xy 113.664587 115.594214) (xy 113.579747 115.434653) (xy 113.404293 115.219525)
+ (xy 113.190396 115.042574) (xy 112.946202 114.910539) (xy 112.681013 114.828449) (xy 112.40493 114.799432) (xy 112.128469 114.824592)
+ (xy 111.86216 114.902971) (xy 111.616146 115.031583) (xy 111.399799 115.205531) (xy 111.221359 115.418188) (xy 111.124587 115.594214)
+ (xy 111.039747 115.434653) (xy 110.864293 115.219525) (xy 110.650396 115.042574) (xy 110.406202 114.910539) (xy 110.141013 114.828449)
+ (xy 109.86493 114.799432) (xy 109.588469 114.824592) (xy 109.32216 114.902971) (xy 109.076146 115.031583) (xy 108.859799 115.205531)
+ (xy 108.681359 115.418188) (xy 108.584587 115.594214) (xy 108.499747 115.434653) (xy 108.324293 115.219525) (xy 108.110396 115.042574)
+ (xy 107.866202 114.910539) (xy 107.601013 114.828449) (xy 107.32493 114.799432) (xy 107.048469 114.824592) (xy 106.78216 114.902971)
+ (xy 106.536146 115.031583) (xy 106.319799 115.205531) (xy 106.141359 115.418188) (xy 106.016007 115.6462) (xy 97.930357 115.6462)
+ (xy 95.695158 113.411) (xy 95.947542 113.411) (xy 96.070223 113.386597) (xy 96.185785 113.33873) (xy 96.289789 113.269237)
+ (xy 96.378237 113.180789) (xy 96.44773 113.076785) (xy 96.495597 112.961223) (xy 96.52 112.838542) (xy 96.52 112.713458)
+ (xy 96.52 110.173458) (xy 96.495597 110.050777) (xy 96.44773 109.935215) (xy 96.378237 109.831211) (xy 96.289789 109.742763)
+ (xy 96.185785 109.67327) (xy 96.070223 109.625403) (xy 95.947542 109.601) (xy 95.822458 109.601) (xy 95.4659 109.601)
+ (xy 95.4659 108.556454) (xy 96.110454 107.9119) (xy 101.045774 107.9119) (xy 101.084877 107.972576) (xy 101.283841 108.178608)
+ (xy 101.519033 108.342072) (xy 101.781497 108.456739) (xy 102.061234 108.518243) (xy 102.34759 108.524242) (xy 102.629658 108.474506)
+ (xy 102.896693 108.370929) (xy 103.138524 108.217459) (xy 103.345941 108.019939) (xy 103.511042 107.785893) (xy 103.627539 107.524236)
+ (xy 103.690995 107.244935) (xy 103.695563 106.917791) (xy 103.639931 106.636826) (xy 103.530785 106.372019) (xy 103.372283 106.133455)
+ (xy 103.170462 105.93022) (xy 102.93301 105.770057) (xy 102.668971 105.659065) (xy 102.388403 105.601472) (xy 102.101991 105.599473)
+ (xy 101.820645 105.653142) (xy 101.555082 105.760437) (xy 101.315417 105.917269) (xy 101.110778 106.117666) (xy 101.047487 106.2101)
+ (xy 95.758 106.2101) (xy 95.679764 106.21777) (xy 95.601475 106.224621) (xy 95.597182 106.225868) (xy 95.592726 106.226305)
+ (xy 95.517431 106.249038) (xy 95.442003 106.270952) (xy 95.438032 106.27301) (xy 95.433747 106.274304) (xy 95.364341 106.311207)
+ (xy 95.294566 106.347375) (xy 95.291068 106.350167) (xy 95.287119 106.352267) (xy 95.226212 106.401941) (xy 95.164782 106.450981)
+ (xy 95.158556 106.45712) (xy 95.158427 106.457226) (xy 95.158327 106.457346) (xy 95.156323 106.459323) (xy 94.013323 107.602323)
+ (xy 93.963435 107.663056) (xy 93.912911 107.72327) (xy 93.910756 107.727188) (xy 93.907915 107.730648) (xy 93.870743 107.799972)
+ (xy 93.832908 107.868795) (xy 93.831556 107.873056) (xy 93.82944 107.877003) (xy 93.806447 107.952208) (xy 93.782694 108.027088)
+ (xy 93.782195 108.031533) (xy 93.780887 108.035813) (xy 93.772941 108.114033) (xy 93.764183 108.19212) (xy 93.764121 108.200862)
+ (xy 93.764105 108.201029) (xy 93.764119 108.201184) (xy 93.7641 108.204) (xy 93.7641 109.601) (xy 93.282458 109.601)
+ (xy 93.159777 109.625403) (xy 93.044215 109.67327) (xy 92.940211 109.742763) (xy 92.851763 109.831211) (xy 92.78227 109.935215)
+ (xy 92.734403 110.050777) (xy 92.71 110.173458) (xy 92.71 110.298542) (xy 92.71 112.465462) (xy 92.6084 112.363862)
+ (xy 92.6084 101.265395) (xy 92.660163 101.301372) (xy 92.911215 101.411054) (xy 93.178789 101.469884) (xy 93.452695 101.475622)
+ (xy 93.527991 101.462345) (xy 95.283323 103.217677) (xy 95.344056 103.267564) (xy 95.40427 103.318089) (xy 95.408188 103.320243)
+ (xy 95.411648 103.323085) (xy 95.480937 103.360237) (xy 95.549795 103.398092) (xy 95.55406 103.399445) (xy 95.558003 103.401559)
+ (xy 95.633162 103.424538) (xy 95.708088 103.448306) (xy 95.712533 103.448804) (xy 95.716813 103.450113) (xy 95.795033 103.458058)
+ (xy 95.87312 103.466817) (xy 95.881862 103.466878) (xy 95.882029 103.466895) (xy 95.882184 103.46688) (xy 95.885 103.4669)
+ (xy 101.045774 103.4669) (xy 101.084877 103.527576) (xy 101.283841 103.733608) (xy 101.519033 103.897072) (xy 101.781497 104.011739)
+ (xy 102.061234 104.073243) (xy 102.34759 104.079242) (xy 102.629658 104.029506) (xy 102.896693 103.925929) (xy 103.138524 103.772459)
+ (xy 103.345941 103.574939) (xy 103.511042 103.340893) (xy 103.627539 103.079236) (xy 103.690995 102.799935) (xy 103.695563 102.472791)
+ (xy 103.639931 102.191826) (xy 103.530785 101.927019) (xy 103.372283 101.688455) (xy 103.170462 101.48522) (xy 102.93301 101.325057)
+ (xy 102.668971 101.214065) (xy 102.388403 101.156472) (xy 102.101991 101.154473) (xy 101.820645 101.208142) (xy 101.555082 101.315437)
+ (xy 101.315417 101.472269) (xy 101.110778 101.672666) (xy 101.047487 101.7651) (xy 96.237454 101.7651) (xy 94.735209 100.262855)
+ (xy 94.73769 100.251938) (xy 94.742059 99.939017) (xy 94.688846 99.670269) (xy 94.584446 99.416975) (xy 94.432835 99.188783)
+ (xy 94.23979 98.994385) (xy 94.012662 98.841185) (xy 93.760103 98.735019) (xy 93.491733 98.679931) (xy 93.217774 98.678018)
+ (xy 92.948661 98.729354) (xy 92.694644 98.831984) (xy 92.6084 98.88842) (xy 92.6084 88.1888) (xy 94.683524 88.1888)
+ (xy 94.600859 88.452254) (xy 95.885 89.736395) (xy 97.169141 88.452254) (xy 97.086475 88.1888) (xy 97.908722 88.1888)
+ (xy 99.030461 89.310539) (xy 99.097537 89.365635) (xy 99.164044 89.421442) (xy 99.168375 89.423823) (xy 99.172193 89.426959)
+ (xy 99.248701 89.467982) (xy 99.324773 89.509803) (xy 99.329481 89.511296) (xy 99.333839 89.513633) (xy 99.416857 89.539013)
+ (xy 99.499605 89.565263) (xy 99.504518 89.565814) (xy 99.509241 89.567258) (xy 99.595583 89.576028) (xy 99.681878 89.585708)
+ (xy 99.691539 89.585775) (xy 99.691719 89.585794) (xy 99.691886 89.585778) (xy 99.695 89.5858) (xy 106.017771 89.5858)
+ (xy 106.130253 89.797347) (xy 106.305707 90.012475) (xy 106.519604 90.189426) (xy 106.763798 90.321461) (xy 107.028987 90.403551)
+ (xy 107.30507 90.432568) (xy 107.581531 90.407408) (xy 107.84784 90.329029) (xy 108.093854 90.200417) (xy 108.310201 90.026469)
+ (xy 108.488641 89.813812) (xy 108.585412 89.637785) (xy 108.670253 89.797347) (xy 108.845707 90.012475) (xy 109.059604 90.189426)
+ (xy 109.303798 90.321461) (xy 109.568987 90.403551) (xy 109.84507 90.432568) (xy 110.121531 90.407408) (xy 110.38784 90.329029)
+ (xy 110.633854 90.200417) (xy 110.850201 90.026469) (xy 111.028641 89.813812) (xy 111.125412 89.637785) (xy 111.210253 89.797347)
+ (xy 111.385707 90.012475) (xy 111.5441 90.143509) (xy 111.5441 94.769509) (xy 111.399799 94.885531) (xy 111.221359 95.098188)
+ (xy 111.124587 95.274214) (xy 111.039747 95.114653) (xy 110.864293 94.899525) (xy 110.7059 94.76849) (xy 110.7059 93.599)
+ (xy 110.698233 93.52081) (xy 110.69138 93.442476) (xy 110.690131 93.438179) (xy 110.689695 93.433726) (xy 110.66697 93.35846)
+ (xy 110.645048 93.283003) (xy 110.642989 93.279032) (xy 110.641696 93.274747) (xy 110.604781 93.20532) (xy 110.568625 93.135567)
+ (xy 110.565834 93.132071) (xy 110.563733 93.128119) (xy 110.51404 93.06719) (xy 110.465019 93.005782) (xy 110.458879 92.999556)
+ (xy 110.458774 92.999427) (xy 110.458653 92.999327) (xy 110.456677 92.997323) (xy 109.694677 92.235323) (xy 109.633943 92.185435)
+ (xy 109.57373 92.134911) (xy 109.569811 92.132756) (xy 109.566352 92.129915) (xy 109.497027 92.092743) (xy 109.428205 92.054908)
+ (xy 109.423943 92.053556) (xy 109.419997 92.05144) (xy 109.344791 92.028447) (xy 109.269912 92.004694) (xy 109.265466 92.004195)
+ (xy 109.261187 92.002887) (xy 109.182966 91.994941) (xy 109.10488 91.986183) (xy 109.096137 91.986121) (xy 109.095971 91.986105)
+ (xy 109.095815 91.986119) (xy 109.093 91.9861) (xy 106.172 91.9861) (xy 106.09376 91.993771) (xy 106.015476 92.000621)
+ (xy 106.011184 92.001867) (xy 106.006726 92.002305) (xy 105.931419 92.025041) (xy 105.856003 92.046952) (xy 105.852032 92.04901)
+ (xy 105.847747 92.050304) (xy 105.77832 92.087218) (xy 105.708567 92.123375) (xy 105.705071 92.126165) (xy 105.701119 92.128267)
+ (xy 105.64019 92.177959) (xy 105.578782 92.226981) (xy 105.572556 92.23312) (xy 105.572427 92.233226) (xy 105.572327 92.233346)
+ (xy 105.570323 92.235323) (xy 104.681323 93.124323) (xy 104.631435 93.185056) (xy 104.580911 93.24527) (xy 104.578756 93.249188)
+ (xy 104.575915 93.252648) (xy 104.538743 93.321972) (xy 104.500908 93.390795) (xy 104.499556 93.395056) (xy 104.49744 93.399003)
+ (xy 104.474447 93.474208) (xy 104.450694 93.549088) (xy 104.450195 93.553533) (xy 104.448887 93.557813) (xy 104.440941 93.636033)
+ (xy 104.432183 93.71412) (xy 104.432121 93.722862) (xy 104.432105 93.723029) (xy 104.432119 93.723184) (xy 104.4321 93.726)
+ (xy 104.4321 96.294546) (xy 104.041546 96.6851) (xy 103.95677 96.6851) (xy 103.95677 94.93655) (xy 103.912088 94.601792)
+ (xy 103.802957 94.282183) (xy 103.699628 94.088866) (xy 103.382042 94.028563) (xy 103.202437 94.208168) (xy 103.202437 93.848958)
+ (xy 103.142134 93.531372) (xy 102.838969 93.382541) (xy 102.512593 93.295715) (xy 102.17555 93.27423) (xy 101.840792 93.318912)
+ (xy 101.521183 93.428043) (xy 101.327866 93.531372) (xy 101.267563 93.848958) (xy 102.235 94.816395) (xy 103.202437 93.848958)
+ (xy 103.202437 94.208168) (xy 102.414605 94.996) (xy 103.382042 95.963437) (xy 103.699628 95.903134) (xy 103.848459 95.599969)
+ (xy 103.935285 95.273593) (xy 103.95677 94.93655) (xy 103.95677 96.6851) (xy 102.539213 96.6851) (xy 102.629208 96.673088)
+ (xy 102.948817 96.563957) (xy 103.142134 96.460628) (xy 103.202437 96.143042) (xy 102.235 95.175605) (xy 102.055395 95.35521)
+ (xy 102.055395 94.996) (xy 101.087958 94.028563) (xy 100.770372 94.088866) (xy 100.621541 94.392031) (xy 100.534715 94.718407)
+ (xy 100.51323 95.05545) (xy 100.557912 95.390208) (xy 100.667043 95.709817) (xy 100.770372 95.903134) (xy 101.087958 95.963437)
+ (xy 102.055395 94.996) (xy 102.055395 95.35521) (xy 101.267563 96.143042) (xy 101.327866 96.460628) (xy 101.631031 96.609459)
+ (xy 101.915362 96.6851) (xy 98.054042 96.6851) (xy 98.054042 89.874124) (xy 98.004194 89.45177) (xy 97.872908 89.047256)
+ (xy 97.711758 88.745764) (xy 97.348746 88.631859) (xy 96.064605 89.916) (xy 97.348746 91.200141) (xy 97.711758 91.086236)
+ (xy 97.904959 90.707368) (xy 98.020534 90.298087) (xy 98.054042 89.874124) (xy 98.054042 96.6851) (xy 97.169141 96.6851)
+ (xy 97.169141 91.379746) (xy 95.885 90.095605) (xy 95.705395 90.27521) (xy 95.705395 89.916) (xy 94.421254 88.631859)
+ (xy 94.058242 88.745764) (xy 93.865041 89.124632) (xy 93.749466 89.533913) (xy 93.715958 89.957876) (xy 93.765806 90.38023)
+ (xy 93.897092 90.784744) (xy 94.058242 91.086236) (xy 94.421254 91.200141) (xy 95.705395 89.916) (xy 95.705395 90.27521)
+ (xy 94.600859 91.379746) (xy 94.714764 91.742758) (xy 95.093632 91.935959) (xy 95.502913 92.051534) (xy 95.926876 92.085042)
+ (xy 96.34923 92.035194) (xy 96.753744 91.903908) (xy 97.055236 91.742758) (xy 97.169141 91.379746) (xy 97.169141 96.6851)
+ (xy 96.996964 96.6851) (xy 96.972835 96.648783) (xy 96.77979 96.454385) (xy 96.552662 96.301185) (xy 96.300103 96.195019)
+ (xy 96.031733 96.139931) (xy 95.757774 96.138018) (xy 95.488661 96.189354) (xy 95.234644 96.291984) (xy 95.005399 96.441997)
+ (xy 94.809658 96.633681) (xy 94.654877 96.859734) (xy 94.54695 97.111546) (xy 94.489989 97.379524) (xy 94.486164 97.653464)
+ (xy 94.53562 97.922928) (xy 94.636474 98.177655) (xy 94.784883 98.407942) (xy 94.975196 98.605016) (xy 95.200163 98.761372)
+ (xy 95.451215 98.871054) (xy 95.718789 98.929884) (xy 95.992695 98.935622) (xy 96.262499 98.888048) (xy 96.517923 98.788975)
+ (xy 96.74924 98.642177) (xy 96.947639 98.453245) (xy 96.994439 98.3869) (xy 104.394 98.3869) (xy 104.472239 98.379228)
+ (xy 104.550524 98.372379) (xy 104.554815 98.371132) (xy 104.559274 98.370695) (xy 104.63458 98.347958) (xy 104.709997 98.326048)
+ (xy 104.713967 98.323989) (xy 104.718253 98.322696) (xy 104.787658 98.285792) (xy 104.857434 98.249625) (xy 104.860931 98.246832)
+ (xy 104.864881 98.244733) (xy 104.925787 98.195058) (xy 104.987218 98.146019) (xy 104.993443 98.139879) (xy 104.993573 98.139774)
+ (xy 104.993672 98.139653) (xy 104.995677 98.137677) (xy 105.884677 97.248677) (xy 105.8926 97.239031) (xy 105.8926 97.471542)
+ (xy 105.917003 97.594223) (xy 105.96487 97.709785) (xy 106.034363 97.813789) (xy 106.122811 97.902237) (xy 106.226815 97.97173)
+ (xy 106.342377 98.019597) (xy 106.465058 98.044) (xy 106.590142 98.044) (xy 106.63654 98.044) (xy 106.655941 98.067787)
+ (xy 106.704981 98.129218) (xy 106.71112 98.135443) (xy 106.711226 98.135573) (xy 106.711346 98.135672) (xy 106.713323 98.137677)
+ (xy 108.237323 99.661677) (xy 108.298056 99.711564) (xy 108.35827 99.762089) (xy 108.362188 99.764243) (xy 108.365648 99.767085)
+ (xy 108.434937 99.804237) (xy 108.503795 99.842092) (xy 108.50806 99.843445) (xy 108.512003 99.845559) (xy 108.587162 99.868538)
+ (xy 108.662088 99.892306) (xy 108.666533 99.892804) (xy 108.670813 99.894113) (xy 108.748988 99.902053) (xy 108.82712 99.910817)
+ (xy 108.835872 99.910878) (xy 108.836029 99.910894) (xy 108.836174 99.91088) (xy 108.839 99.9109) (xy 114.046 99.9109)
+ (xy 114.658746 99.9109) (xy 113.376046 101.1936) (xy 106.079953 101.1936) (xy 104.299717 99.413363) (xy 104.238983 99.363475)
+ (xy 104.17877 99.312951) (xy 104.174851 99.310796) (xy 104.171392 99.307955) (xy 104.102067 99.270783) (xy 104.033245 99.232948)
+ (xy 104.028983 99.231596) (xy 104.025037 99.22948) (xy 103.949831 99.206487) (xy 103.874952 99.182734) (xy 103.870506 99.182235)
+ (xy 103.866227 99.180927) (xy 103.788006 99.172981) (xy 103.70992 99.164223) (xy 103.701177 99.164161) (xy 103.701011 99.164145)
+ (xy 103.700855 99.164159) (xy 103.69804 99.16414) (xy 99.488363 99.16414) (xy 99.31979 98.994385) (xy 99.092662 98.841185)
+ (xy 98.840103 98.735019) (xy 98.571733 98.679931) (xy 98.297774 98.678018) (xy 98.028661 98.729354) (xy 97.774644 98.831984)
+ (xy 97.545399 98.981997) (xy 97.349658 99.173681) (xy 97.194877 99.399734) (xy 97.08695 99.651546) (xy 97.029989 99.919524)
+ (xy 97.026164 100.193464) (xy 97.07562 100.462928) (xy 97.176474 100.717655) (xy 97.324883 100.947942) (xy 97.515196 101.145016)
+ (xy 97.740163 101.301372) (xy 97.991215 101.411054) (xy 98.258789 101.469884) (xy 98.532695 101.475622) (xy 98.802499 101.428048)
+ (xy 99.057923 101.328975) (xy 99.28924 101.182177) (xy 99.487639 100.993245) (xy 99.577442 100.86594) (xy 103.345586 100.86594)
+ (xy 105.125823 102.646177) (xy 105.186556 102.696064) (xy 105.24677 102.746589) (xy 105.250688 102.748743) (xy 105.254148 102.751585)
+ (xy 105.323454 102.788746) (xy 105.392295 102.826592) (xy 105.396558 102.827944) (xy 105.400504 102.83006) (xy 105.475694 102.853048)
+ (xy 105.550588 102.876806) (xy 105.555033 102.877304) (xy 105.559313 102.878613) (xy 105.637528 102.886557) (xy 105.71562 102.895317)
+ (xy 105.724363 102.895378) (xy 105.72453 102.895395) (xy 105.724685 102.89538) (xy 105.7275 102.8954) (xy 113.7285 102.8954)
+ (xy 113.806739 102.887728) (xy 113.885024 102.880879) (xy 113.889315 102.879632) (xy 113.893774 102.879195) (xy 113.96908 102.856458)
+ (xy 114.044497 102.834548) (xy 114.048467 102.832489) (xy 114.052753 102.831196) (xy 114.122158 102.794292) (xy 114.191934 102.758125)
+ (xy 114.195431 102.755332) (xy 114.199381 102.753233) (xy 114.260287 102.703558) (xy 114.321718 102.654519) (xy 114.327943 102.648379)
+ (xy 114.328073 102.648274) (xy 114.328172 102.648153) (xy 114.330177 102.646177) (xy 116.499937 100.476416) (xy 116.369541 100.742031)
+ (xy 116.282715 101.068407) (xy 116.26123 101.40545) (xy 116.305912 101.740208) (xy 116.415043 102.059817) (xy 116.518372 102.253134)
+ (xy 116.835958 102.313437) (xy 117.803395 101.346) (xy 117.789252 101.331857) (xy 117.968857 101.152252) (xy 117.983 101.166395)
+ (xy 118.950437 100.198958) (xy 118.919855 100.0379) (xy 119.888 100.0379) (xy 119.966239 100.030228) (xy 120.044524 100.023379)
+ (xy 120.048815 100.022132) (xy 120.053274 100.021695) (xy 120.12858 99.998958) (xy 120.203997 99.977048) (xy 120.207967 99.974989)
+ (xy 120.212253 99.973696) (xy 120.281658 99.936792) (xy 120.351434 99.900625) (xy 120.354931 99.897832) (xy 120.358881 99.895733)
+ (xy 120.419787 99.846058) (xy 120.481218 99.797019) (xy 120.487443 99.790879) (xy 120.487573 99.790774) (xy 120.487672 99.790653)
+ (xy 120.489677 99.788677) (xy 121.124677 99.153677) (xy 121.174564 99.092943) (xy 121.225089 99.03273) (xy 121.227243 99.028811)
+ (xy 121.230085 99.025352) (xy 121.267246 98.956045) (xy 121.305092 98.887205) (xy 121.306444 98.882941) (xy 121.30856 98.878996)
+ (xy 121.331544 98.803818) (xy 121.355306 98.728912) (xy 121.355804 98.724464) (xy 121.357113 98.720186) (xy 121.365057 98.641976)
+ (xy 121.373817 98.56388) (xy 121.373878 98.555136) (xy 121.373895 98.55497) (xy 121.37388 98.554814) (xy 121.3739 98.552)
+ (xy 121.3739 96.237454) (xy 124.050454 93.5609) (xy 125.839454 93.5609) (xy 125.696645 93.588142) (xy 125.431082 93.695437)
+ (xy 125.191417 93.852269) (xy 124.986778 94.052666) (xy 124.923487 94.1451) (xy 124.841 94.1451) (xy 124.762806 94.152766)
+ (xy 124.684476 94.15962) (xy 124.680179 94.160868) (xy 124.675726 94.161305) (xy 124.600506 94.184015) (xy 124.525003 94.205951)
+ (xy 124.521027 94.208011) (xy 124.516747 94.209304) (xy 124.447356 94.246199) (xy 124.377567 94.282375) (xy 124.374071 94.285165)
+ (xy 124.370119 94.287267) (xy 124.30919 94.336959) (xy 124.247782 94.385981) (xy 124.241556 94.39212) (xy 124.241427 94.392226)
+ (xy 124.241327 94.392346) (xy 124.239323 94.394323) (xy 122.588323 96.045323) (xy 122.538435 96.106056) (xy 122.487911 96.16627)
+ (xy 122.485756 96.170188) (xy 122.482915 96.173648) (xy 122.445743 96.242972) (xy 122.407908 96.311795) (xy 122.406556 96.316056)
+ (xy 122.40444 96.320003) (xy 122.381447 96.395208) (xy 122.357694 96.470088) (xy 122.357195 96.474533) (xy 122.355887 96.478813)
+ (xy 122.347941 96.557033) (xy 122.339183 96.63512) (xy 122.339121 96.643862) (xy 122.339105 96.644029) (xy 122.339119 96.644184)
+ (xy 122.3391 96.647) (xy 122.3391 102.362) (xy 122.346771 102.440239) (xy 122.353621 102.518524) (xy 122.354867 102.522815)
+ (xy 122.355305 102.527274) (xy 122.378041 102.60258) (xy 122.399952 102.677997) (xy 122.40201 102.681967) (xy 122.403304 102.686253)
+ (xy 122.440207 102.755658) (xy 122.476375 102.825434) (xy 122.479167 102.828931) (xy 122.481267 102.832881) (xy 122.530941 102.893787)
+ (xy 122.579981 102.955218) (xy 122.58612 102.961443) (xy 122.586226 102.961573) (xy 122.586346 102.961672) (xy 122.588323 102.963677)
+ (xy 123.858323 104.233677) (xy 123.919056 104.283564) (xy 123.97927 104.334089) (xy 123.983188 104.336243) (xy 123.986648 104.339085)
+ (xy 124.055937 104.376237) (xy 124.124795 104.414092) (xy 124.12906 104.415445) (xy 124.133003 104.417559) (xy 124.208162 104.440538)
+ (xy 124.283088 104.464306) (xy 124.287533 104.464804) (xy 124.291813 104.466113) (xy 124.370033 104.474058) (xy 124.44812 104.482817)
+ (xy 124.456862 104.482878) (xy 124.457029 104.482895) (xy 124.457184 104.48288) (xy 124.46 104.4829) (xy 126.619 104.4829)
+ (xy 126.697239 104.475228) (xy 126.775524 104.468379) (xy 126.779815 104.467132) (xy 126.784274 104.466695) (xy 126.85958 104.443958)
+ (xy 126.934997 104.422048) (xy 126.938967 104.419989) (xy 126.943253 104.418696) (xy 127.012658 104.381792) (xy 127.082434 104.345625)
+ (xy 127.085931 104.342832) (xy 127.089881 104.340733) (xy 127.150787 104.291058) (xy 127.212218 104.242019) (xy 127.218443 104.235879)
+ (xy 127.218573 104.235774) (xy 127.218672 104.235653) (xy 127.220677 104.233677) (xy 130.044854 101.4095) (xy 130.936042 101.4095)
+ (xy 131.058723 101.385097) (xy 131.174285 101.33723) (xy 131.278289 101.267737) (xy 131.366737 101.179289) (xy 131.43623 101.075285)
+ (xy 131.484097 100.959723) (xy 131.5085 100.837042) (xy 131.5085 100.711958) (xy 131.5085 99.314958) (xy 131.484097 99.192277)
+ (xy 131.43623 99.076715) (xy 131.366737 98.972711) (xy 131.278289 98.884263) (xy 131.174285 98.81477) (xy 131.058723 98.766903)
+ (xy 130.936042 98.7425) (xy 130.810958 98.7425) (xy 130.75214 98.7425) (xy 130.779154 98.732022) (xy 130.999957 98.591897)
+ (xy 131.189337 98.411552) (xy 131.340081 98.197858) (xy 131.446448 97.958955) (xy 131.44708 97.956171) (xy 131.523225 98.148489)
+ (xy 131.664888 98.368308) (xy 131.84655 98.556425) (xy 132.061291 98.705674) (xy 132.300932 98.81037) (xy 132.556344 98.866526)
+ (xy 132.8178 98.872003) (xy 132.843174 98.867528) (xy 133.860176 99.88453) (xy 133.851991 99.884473) (xy 133.570645 99.938142)
+ (xy 133.305082 100.045437) (xy 133.065417 100.202269) (xy 132.860778 100.402666) (xy 132.698961 100.638994) (xy 132.586129 100.902252)
+ (xy 132.526579 101.182412) (xy 132.52258 101.468803) (xy 132.574284 101.750516) (xy 132.679722 102.016822) (xy 132.834877 102.257576)
+ (xy 133.033841 102.463608) (xy 133.269033 102.627072) (xy 133.531497 102.741739) (xy 133.811234 102.803243) (xy 134.09759 102.809242)
+ (xy 134.379658 102.759506) (xy 134.646693 102.655929) (xy 134.888524 102.502459) (xy 135.052219 102.346573) (xy 136.717108 104.011462)
+ (xy 136.713747 104.252124) (xy 136.760955 104.509341) (xy 136.857225 104.752489) (xy 136.998888 104.972308) (xy 137.18055 105.160425)
+ (xy 137.395291 105.309674) (xy 137.634932 105.41437) (xy 137.890344 105.470526) (xy 138.1518 105.476003) (xy 138.40934 105.430592)
+ (xy 138.653154 105.336022) (xy 138.873957 105.195897) (xy 139.063337 105.015552) (xy 139.214081 104.801858) (xy 139.320448 104.562955)
+ (xy 139.378386 104.307941) (xy 139.382557 104.009244) (xy 139.331762 103.752711) (xy 139.232107 103.510931) (xy 139.087388 103.293111)
+ (xy 138.903118 103.107549) (xy 138.686314 102.961313) (xy 138.445235 102.859973) (xy 138.189063 102.807388) (xy 137.927557 102.805563)
+ (xy 137.919461 102.807107) (xy 135.856677 100.744323) (xy 135.795943 100.694435) (xy 135.73573 100.643911) (xy 135.731811 100.641756)
+ (xy 135.728352 100.638915) (xy 135.659027 100.601743) (xy 135.590205 100.563908) (xy 135.585943 100.562556) (xy 135.581997 100.56044)
+ (xy 135.506791 100.537447) (xy 135.431912 100.513694) (xy 135.427466 100.513195) (xy 135.423187 100.511887) (xy 135.344966 100.503941)
+ (xy 135.26688 100.495183) (xy 135.258137 100.495121) (xy 135.257971 100.495105) (xy 135.257815 100.495119) (xy 135.255 100.4951)
+ (xy 135.173205 100.4951) (xy 135.122283 100.418455) (xy 134.920462 100.21522) (xy 134.90611 100.20554) (xy 139.85494 100.20554)
+ (xy 139.933179 100.197868) (xy 140.011464 100.191019) (xy 140.015755 100.189772) (xy 140.020214 100.189335) (xy 140.09552 100.166598)
+ (xy 140.170937 100.144688) (xy 140.174907 100.142629) (xy 140.179193 100.141336) (xy 140.248598 100.104432) (xy 140.318374 100.068265)
+ (xy 140.321871 100.065472) (xy 140.325821 100.063373) (xy 140.386727 100.013698) (xy 140.448158 99.964659) (xy 140.454383 99.958519)
+ (xy 140.454513 99.958414) (xy 140.454612 99.958293) (xy 140.456617 99.956317) (xy 140.7541 99.658834) (xy 140.7541 100.157324)
+ (xy 140.685417 100.202269) (xy 140.480778 100.402666) (xy 140.318961 100.638994) (xy 140.206129 100.902252) (xy 140.146579 101.182412)
+ (xy 140.14258 101.468803) (xy 140.194284 101.750516) (xy 140.299722 102.016822) (xy 140.454877 102.257576) (xy 140.653841 102.463608)
+ (xy 140.889033 102.627072) (xy 141.151497 102.741739) (xy 141.431234 102.803243) (xy 141.71759 102.809242) (xy 141.999658 102.759506)
+ (xy 142.266693 102.655929) (xy 142.508524 102.502459) (xy 142.715941 102.304939) (xy 142.792153 102.1969) (xy 143.792546 102.1969)
+ (xy 144.813323 103.217677) (xy 144.874056 103.267564) (xy 144.93427 103.318089) (xy 144.938188 103.320243) (xy 144.941648 103.323085)
+ (xy 145.010937 103.360237) (xy 145.079795 103.398092) (xy 145.08406 103.399445) (xy 145.088003 103.401559) (xy 145.163162 103.424538)
+ (xy 145.238088 103.448306) (xy 145.242533 103.448804) (xy 145.246813 103.450113) (xy 145.325033 103.458058) (xy 145.40312 103.466817)
+ (xy 145.411862 103.466878) (xy 145.412029 103.466895) (xy 145.412184 103.46688) (xy 145.415 103.4669) (xy 149.225 103.4669)
+ (xy 149.303239 103.459228) (xy 149.381524 103.452379) (xy 149.385815 103.451132) (xy 149.390274 103.450695) (xy 149.46558 103.427958)
+ (xy 149.540997 103.406048) (xy 149.544967 103.403989) (xy 149.549253 103.402696) (xy 149.618658 103.365792) (xy 149.688434 103.329625)
+ (xy 149.691931 103.326832) (xy 149.695881 103.324733) (xy 149.756787 103.275058) (xy 149.818218 103.226019) (xy 149.824443 103.219879)
+ (xy 149.824573 103.219774) (xy 149.824672 103.219653) (xy 149.826677 103.217677) (xy 151.096677 101.947677) (xy 151.146564 101.886943)
+ (xy 151.164528 101.865534) (xy 151.319957 101.766897) (xy 151.509337 101.586552) (xy 151.660081 101.372858) (xy 151.766448 101.133955)
+ (xy 151.824386 100.878941) (xy 151.828557 100.580244) (xy 151.777762 100.323711) (xy 151.678107 100.081931) (xy 151.533388 99.864111)
+ (xy 151.349118 99.678549) (xy 151.132314 99.532313) (xy 151.066149 99.5045) (xy 151.256042 99.5045) (xy 151.378723 99.480097)
+ (xy 151.494285 99.43223) (xy 151.598289 99.362737) (xy 151.686737 99.274289) (xy 151.75623 99.170285) (xy 151.804097 99.054723)
+ (xy 151.810625 99.0219) (xy 156.02559 99.0219) (xy 156.033041 99.04658) (xy 156.054952 99.121997) (xy 156.05701 99.125967)
+ (xy 156.058304 99.130253) (xy 156.095207 99.199658) (xy 156.131375 99.269434) (xy 156.134167 99.272931) (xy 156.136267 99.276881)
+ (xy 156.185941 99.337787) (xy 156.234981 99.399218) (xy 156.24112 99.405443) (xy 156.241226 99.405573) (xy 156.241346 99.405672)
+ (xy 156.243323 99.407677) (xy 157.513323 100.677677) (xy 157.574056 100.727564) (xy 157.63427 100.778089) (xy 157.638188 100.780243)
+ (xy 157.641648 100.783085) (xy 157.710937 100.820237) (xy 157.779795 100.858092) (xy 157.78406 100.859445) (xy 157.788003 100.861559)
+ (xy 157.863162 100.884538) (xy 157.938088 100.908306) (xy 157.942533 100.908804) (xy 157.946813 100.910113) (xy 158.025033 100.918058)
+ (xy 158.10312 100.926817) (xy 158.111862 100.926878) (xy 158.112029 100.926895) (xy 158.112184 100.92688) (xy 158.115 100.9269)
+ (xy 161.925 100.9269) (xy 164.465 100.9269) (xy 164.543239 100.919228) (xy 164.621524 100.912379) (xy 164.625815 100.911132)
+ (xy 164.630274 100.910695) (xy 164.70558 100.887958) (xy 164.780997 100.866048) (xy 164.784967 100.863989) (xy 164.789253 100.862696)
+ (xy 164.858658 100.825792) (xy 164.928434 100.789625) (xy 164.931931 100.786832) (xy 164.935881 100.784733) (xy 164.996787 100.735058)
+ (xy 165.058218 100.686019) (xy 165.064443 100.679879) (xy 165.064573 100.679774) (xy 165.064672 100.679653) (xy 165.066677 100.677677)
+ (xy 166.336677 99.407677) (xy 166.386564 99.346943) (xy 166.437089 99.28673) (xy 166.439243 99.282811) (xy 166.442085 99.279352)
+ (xy 166.479237 99.210062) (xy 166.517092 99.141205) (xy 166.518445 99.136939) (xy 166.520559 99.132997) (xy 166.543538 99.057837)
+ (xy 166.567306 98.982912) (xy 166.567804 98.978466) (xy 166.569113 98.974187) (xy 166.577058 98.895966) (xy 166.585817 98.81788)
+ (xy 166.585878 98.809137) (xy 166.585895 98.808971) (xy 166.58588 98.808815) (xy 166.5859 98.806) (xy 166.5859 98.725855)
+ (xy 166.638524 98.692459) (xy 166.845941 98.494939) (xy 167.011042 98.260893) (xy 167.127539 97.999236) (xy 167.190995 97.719935)
+ (xy 167.195563 97.392791) (xy 167.139931 97.111826) (xy 167.030785 96.847019) (xy 166.872283 96.608455) (xy 166.670462 96.40522)
+ (xy 166.43301 96.245057) (xy 166.168971 96.134065) (xy 165.888403 96.076472) (xy 165.601991 96.074473) (xy 165.320645 96.128142)
+ (xy 165.055082 96.235437) (xy 164.815417 96.392269) (xy 164.610778 96.592666) (xy 164.448961 96.828994) (xy 164.336129 97.092252)
+ (xy 164.276579 97.372412) (xy 164.27258 97.658803) (xy 164.324284 97.940516) (xy 164.429722 98.206822) (xy 164.584877 98.447576)
+ (xy 164.73481 98.602835) (xy 164.112546 99.2251) (xy 161.925 99.2251) (xy 158.467454 99.2251) (xy 157.843945 98.601591)
+ (xy 157.955941 98.494939) (xy 158.121042 98.260893) (xy 158.237539 97.999236) (xy 158.300995 97.719935) (xy 158.305563 97.392791)
+ (xy 158.249931 97.111826) (xy 158.140785 96.847019) (xy 157.982283 96.608455) (xy 157.780462 96.40522) (xy 157.54301 96.245057)
+ (xy 157.278971 96.134065) (xy 156.998403 96.076472) (xy 156.711991 96.074473) (xy 156.430645 96.128142) (xy 156.165082 96.235437)
+ (xy 155.925417 96.392269) (xy 155.720778 96.592666) (xy 155.558961 96.828994) (xy 155.446129 97.092252) (xy 155.397698 97.3201)
+ (xy 151.810625 97.3201) (xy 151.804097 97.287277) (xy 151.75623 97.171715) (xy 151.686737 97.067711) (xy 151.598289 96.979263)
+ (xy 151.494285 96.90977) (xy 151.378723 96.861903) (xy 151.256042 96.8375) (xy 151.130958 96.8375) (xy 149.733958 96.8375)
+ (xy 149.611277 96.861903) (xy 149.495715 96.90977) (xy 149.391711 96.979263) (xy 149.303263 97.067711) (xy 149.23377 97.171715)
+ (xy 149.185903 97.287277) (xy 149.1615 97.409958) (xy 149.1615 97.535042) (xy 149.1615 98.932042) (xy 149.185903 99.054723)
+ (xy 149.23377 99.170285) (xy 149.303263 99.274289) (xy 149.391711 99.362737) (xy 149.495715 99.43223) (xy 149.611277 99.480097)
+ (xy 149.733958 99.5045) (xy 149.859042 99.5045) (xy 149.921306 99.5045) (xy 149.874206 99.52353) (xy 149.655381 99.666725)
+ (xy 149.468537 99.849695) (xy 149.374091 99.987629) (xy 149.316081 99.879098) (xy 149.011449 99.834156) (xy 148.831844 100.013761)
+ (xy 148.831844 99.654551) (xy 148.786902 99.349919) (xy 148.505384 99.213776) (xy 148.202714 99.135171) (xy 147.890526 99.117123)
+ (xy 147.580815 99.160328) (xy 147.285484 99.263123) (xy 147.123098 99.349919) (xy 147.078156 99.654551) (xy 147.955 100.531395)
+ (xy 148.831844 99.654551) (xy 148.831844 100.013761) (xy 148.134605 100.711) (xy 148.148747 100.725142) (xy 147.969142 100.904747)
+ (xy 147.955 100.890605) (xy 147.940857 100.904747) (xy 147.775395 100.739285) (xy 147.761252 100.725142) (xy 147.775395 100.711)
+ (xy 146.898551 99.834156) (xy 146.593919 99.879098) (xy 146.457776 100.160616) (xy 146.379171 100.463286) (xy 146.361123 100.775474)
+ (xy 146.404328 101.085185) (xy 146.507123 101.380516) (xy 146.593919 101.542902) (xy 146.898548 101.587843) (xy 146.737667 101.748725)
+ (xy 146.754042 101.7651) (xy 145.767454 101.7651) (xy 144.746677 100.744323) (xy 144.685943 100.694435) (xy 144.62573 100.643911)
+ (xy 144.621811 100.641756) (xy 144.618352 100.638915) (xy 144.549027 100.601743) (xy 144.480205 100.563908) (xy 144.475943 100.562556)
+ (xy 144.471997 100.56044) (xy 144.396791 100.537447) (xy 144.321912 100.513694) (xy 144.317466 100.513195) (xy 144.313187 100.511887)
+ (xy 144.234966 100.503941) (xy 144.15688 100.495183) (xy 144.148137 100.495121) (xy 144.147971 100.495105) (xy 144.147815 100.495119)
+ (xy 144.145 100.4951) (xy 142.793205 100.4951) (xy 142.742283 100.418455) (xy 142.540462 100.21522) (xy 142.4559 100.158182)
+ (xy 142.4559 98.851625) (xy 142.488723 98.845097) (xy 142.604285 98.79723) (xy 142.708289 98.727737) (xy 142.796737 98.639289)
+ (xy 142.86623 98.535285) (xy 142.914097 98.419723) (xy 142.9385 98.297042) (xy 142.9385 98.171958) (xy 142.9385 96.774958)
+ (xy 142.914097 96.652277) (xy 142.86623 96.536715) (xy 142.796737 96.432711) (xy 142.708289 96.344263) (xy 142.604285 96.27477)
+ (xy 142.488723 96.226903) (xy 142.366042 96.2025) (xy 142.240958 96.2025) (xy 140.843958 96.2025) (xy 140.721277 96.226903)
+ (xy 140.605715 96.27477) (xy 140.501711 96.344263) (xy 140.413263 96.432711) (xy 140.34377 96.536715) (xy 140.295903 96.652277)
+ (xy 140.2715 96.774958) (xy 140.2715 96.900042) (xy 140.2715 97.734726) (xy 139.502486 98.50374) (xy 134.886093 98.50374)
+ (xy 134.044963 97.662609) (xy 134.048557 97.405244) (xy 133.997762 97.148711) (xy 133.898107 96.906931) (xy 133.753388 96.689111)
+ (xy 133.569118 96.503549) (xy 133.352314 96.357313) (xy 133.111235 96.255973) (xy 132.855063 96.203388) (xy 132.593557 96.201563)
+ (xy 132.336676 96.250565) (xy 132.094206 96.34853) (xy 131.875381 96.491725) (xy 131.688537 96.674695) (xy 131.540791 96.890473)
+ (xy 131.444206 97.115822) (xy 131.358107 96.906931) (xy 131.213388 96.689111) (xy 131.029118 96.503549) (xy 130.812314 96.357313)
+ (xy 130.571235 96.255973) (xy 130.315063 96.203388) (xy 130.053557 96.201563) (xy 129.796676 96.250565) (xy 129.554206 96.34853)
+ (xy 129.335381 96.491725) (xy 129.148537 96.674695) (xy 129.141412 96.6851) (xy 126.365 96.6851) (xy 126.28681 96.692766)
+ (xy 126.208476 96.69962) (xy 126.204179 96.700868) (xy 126.199726 96.701305) (xy 126.12446 96.724029) (xy 126.049003 96.745952)
+ (xy 126.045032 96.74801) (xy 126.040747 96.749304) (xy 125.97132 96.786218) (xy 125.901567 96.822375) (xy 125.898071 96.825165)
+ (xy 125.894119 96.827267) (xy 125.83319 96.876959) (xy 125.771782 96.925981) (xy 125.765556 96.93212) (xy 125.765427 96.932226)
+ (xy 125.765327 96.932346) (xy 125.763323 96.934323) (xy 125.001323 97.696323) (xy 124.951435 97.757056) (xy 124.900911 97.81727)
+ (xy 124.898756 97.821188) (xy 124.895915 97.824648) (xy 124.858743 97.893972) (xy 124.820908 97.962795) (xy 124.819556 97.967056)
+ (xy 124.81744 97.971003) (xy 124.794447 98.046208) (xy 124.770694 98.121088) (xy 124.770195 98.125533) (xy 124.768887 98.129813)
+ (xy 124.760941 98.208033) (xy 124.752183 98.28612) (xy 124.752121 98.294862) (xy 124.752105 98.295029) (xy 124.752119 98.295184)
+ (xy 124.7521 98.298) (xy 124.7521 100.157324) (xy 124.683417 100.202269) (xy 124.478778 100.402666) (xy 124.316961 100.638994)
+ (xy 124.204129 100.902252) (xy 124.144579 101.182412) (xy 124.14058 101.468803) (xy 124.192284 101.750516) (xy 124.297722 102.016822)
+ (xy 124.452877 102.257576) (xy 124.651841 102.463608) (xy 124.887033 102.627072) (xy 125.149497 102.741739) (xy 125.328521 102.7811)
+ (xy 124.812454 102.7811) (xy 124.0409 102.009546) (xy 124.0409 96.999454) (xy 125.045327 95.995026) (xy 125.159841 96.113608)
+ (xy 125.395033 96.277072) (xy 125.657497 96.391739) (xy 125.937234 96.453243) (xy 126.22359 96.459242) (xy 126.505658 96.409506)
+ (xy 126.772693 96.305929) (xy 127.014524 96.152459) (xy 127.221941 95.954939) (xy 127.387042 95.720893) (xy 127.503539 95.459236)
+ (xy 127.566995 95.179935) (xy 127.571563 94.852791) (xy 127.515931 94.571826) (xy 127.406785 94.307019) (xy 127.248283 94.068455)
+ (xy 127.046462 93.86522) (xy 126.80901 93.705057) (xy 126.544971 93.594065) (xy 126.383405 93.5609) (xy 135.89 93.5609)
+ (xy 135.969743 93.553081) (xy 136.049443 93.545828) (xy 136.052302 93.544986) (xy 136.055274 93.544695) (xy 136.131928 93.521551)
+ (xy 136.208753 93.498941) (xy 136.211399 93.497557) (xy 136.214253 93.496696) (xy 136.284922 93.45912) (xy 136.355922 93.422003)
+ (xy 136.358247 93.420133) (xy 136.360881 93.418733) (xy 136.422906 93.368145) (xy 136.485344 93.317945) (xy 136.487263 93.315657)
+ (xy 136.489573 93.313774) (xy 136.5406 93.252092) (xy 136.592089 93.19073) (xy 136.593525 93.188116) (xy 136.595428 93.185817)
+ (xy 136.633517 93.115371) (xy 136.672092 93.045205) (xy 136.672994 93.042361) (xy 136.674413 93.039737) (xy 136.698094 92.963235)
+ (xy 136.722306 92.886912) (xy 136.722638 92.883947) (xy 136.723521 92.881097) (xy 136.731891 92.801455) (xy 136.740817 92.72188)
+ (xy 136.740857 92.716148) (xy 136.740879 92.71594) (xy 136.740859 92.71573) (xy 136.7409 92.71) (xy 136.7409 91.538454)
+ (xy 139.417453 88.8619) (xy 140.780395 88.8619) (xy 140.765381 88.871725) (xy 140.578537 89.054695) (xy 140.430791 89.270473)
+ (xy 140.32777 89.510839) (xy 140.273399 89.766637) (xy 140.269747 90.028124) (xy 140.316955 90.285341) (xy 140.413225 90.528489)
+ (xy 140.554888 90.748308) (xy 140.73655 90.936425) (xy 140.7541 90.948622) (xy 140.7541 91.821) (xy 140.761771 91.899239)
+ (xy 140.768621 91.977524) (xy 140.769867 91.981815) (xy 140.770305 91.986274) (xy 140.793041 92.06158) (xy 140.814952 92.136997)
+ (xy 140.81701 92.140967) (xy 140.818304 92.145253) (xy 140.855207 92.214658) (xy 140.891375 92.284434) (xy 140.894167 92.287931)
+ (xy 140.896267 92.291881) (xy 140.945941 92.352787) (xy 140.994981 92.414218) (xy 141.00112 92.420443) (xy 141.001226 92.420573)
+ (xy 141.001346 92.420672) (xy 141.003323 92.422677) (xy 144.5641 95.983454) (xy 144.5641 96.220374) (xy 144.531277 96.226903)
+ (xy 144.415715 96.27477) (xy 144.311711 96.344263) (xy 144.223263 96.432711) (xy 144.15377 96.536715) (xy 144.105903 96.652277)
+ (xy 144.0815 96.774958) (xy 144.0815 96.900042) (xy 144.0815 98.297042) (xy 144.105903 98.419723) (xy 144.15377 98.535285)
+ (xy 144.223263 98.639289) (xy 144.311711 98.727737) (xy 144.415715 98.79723) (xy 144.531277 98.845097) (xy 144.653958 98.8695)
+ (xy 144.779042 98.8695) (xy 146.176042 98.8695) (xy 146.298723 98.845097) (xy 146.414285 98.79723) (xy 146.518289 98.727737)
+ (xy 146.606737 98.639289) (xy 146.67623 98.535285) (xy 146.724097 98.419723) (xy 146.7485 98.297042) (xy 146.7485 98.171958)
+ (xy 146.7485 96.774958) (xy 146.724097 96.652277) (xy 146.67623 96.536715) (xy 146.606737 96.432711) (xy 146.518289 96.344263)
+ (xy 146.414285 96.27477) (xy 146.298723 96.226903) (xy 146.2659 96.220374) (xy 146.2659 95.732174) (xy 146.280972 95.740256)
+ (xy 146.349795 95.778092) (xy 146.354056 95.779443) (xy 146.358003 95.78156) (xy 146.433208 95.804552) (xy 146.508088 95.828306)
+ (xy 146.512533 95.828804) (xy 146.516813 95.830113) (xy 146.595033 95.838058) (xy 146.67312 95.846817) (xy 146.681862 95.846878)
+ (xy 146.682029 95.846895) (xy 146.682184 95.84688) (xy 146.685 95.8469) (xy 154.305 95.8469) (xy 154.383239 95.839228)
+ (xy 154.461524 95.832379) (xy 154.465815 95.831132) (xy 154.470274 95.830695) (xy 154.54558 95.807958) (xy 154.620997 95.786048)
+ (xy 154.624967 95.783989) (xy 154.629253 95.782696) (xy 154.698658 95.745792) (xy 154.768434 95.709625) (xy 154.771931 95.706832)
+ (xy 154.775881 95.704733) (xy 154.836787 95.655058) (xy 154.898218 95.606019) (xy 154.904443 95.599879) (xy 154.904573 95.599774)
+ (xy 154.904672 95.599653) (xy 154.906677 95.597677) (xy 157.446677 93.057677) (xy 157.496564 92.996943) (xy 157.547089 92.93673)
+ (xy 157.549243 92.932811) (xy 157.552085 92.929352) (xy 157.589237 92.860062) (xy 157.627092 92.791205) (xy 157.628445 92.786939)
+ (xy 157.630559 92.782997) (xy 157.653538 92.707837) (xy 157.677306 92.632912) (xy 157.677804 92.628466) (xy 157.679113 92.624187)
+ (xy 157.687058 92.545966) (xy 157.695817 92.46788) (xy 157.695878 92.459137) (xy 157.695895 92.458971) (xy 157.69588 92.458815)
+ (xy 157.6959 92.456) (xy 157.6959 91.105855) (xy 157.748524 91.072459) (xy 157.955941 90.874939) (xy 158.032153 90.7669)
+ (xy 160.100774 90.7669) (xy 160.139877 90.827576) (xy 160.338841 91.033608) (xy 160.574033 91.197072) (xy 160.836497 91.311739)
+ (xy 161.116234 91.373243) (xy 161.40259 91.379242) (xy 161.684658 91.329506) (xy 161.951693 91.225929) (xy 162.193524 91.072459)
+ (xy 162.400941 90.874939) (xy 162.566042 90.640893) (xy 162.682539 90.379236) (xy 162.745995 90.099935) (xy 162.750563 89.772791)
+ (xy 162.694931 89.491826) (xy 162.585785 89.227019) (xy 162.427283 88.988455) (xy 162.225462 88.78522) (xy 161.98801 88.625057)
+ (xy 161.723971 88.514065) (xy 161.443403 88.456472) (xy 161.156991 88.454473) (xy 160.875645 88.508142) (xy 160.610082 88.615437)
+ (xy 160.370417 88.772269) (xy 160.165778 88.972666) (xy 160.102487 89.0651) (xy 158.033205 89.0651) (xy 157.982283 88.988455)
+ (xy 157.780462 88.78522) (xy 157.54301 88.625057) (xy 157.278971 88.514065) (xy 156.998403 88.456472) (xy 156.711991 88.454473)
+ (xy 156.430645 88.508142) (xy 156.165082 88.615437) (xy 155.925417 88.772269) (xy 155.720778 88.972666) (xy 155.558961 89.208994)
+ (xy 155.446129 89.472252) (xy 155.386579 89.752412) (xy 155.38258 90.038803) (xy 155.434284 90.320516) (xy 155.539722 90.586822)
+ (xy 155.694877 90.827576) (xy 155.893841 91.033608) (xy 155.9941 91.10329) (xy 155.9941 92.103546) (xy 153.952546 94.1451)
+ (xy 147.037454 94.1451) (xy 144.3609 91.468546) (xy 144.3609 90.742119) (xy 144.364888 90.748308) (xy 144.54655 90.936425)
+ (xy 144.761291 91.085674) (xy 145.000932 91.19037) (xy 145.256344 91.246526) (xy 145.5178 91.252003) (xy 145.77534 91.206592)
+ (xy 146.019154 91.112022) (xy 146.239957 90.971897) (xy 146.429337 90.791552) (xy 146.580081 90.577858) (xy 146.686448 90.338955)
+ (xy 146.744386 90.083941) (xy 146.748557 89.785244) (xy 146.697762 89.528711) (xy 146.68465 89.4969) (xy 148.192842 89.4969)
+ (xy 148.35655 89.666425) (xy 148.571291 89.815674) (xy 148.655582 89.8525) (xy 148.463958 89.8525) (xy 148.341277 89.876903)
+ (xy 148.225715 89.92477) (xy 148.121711 89.994263) (xy 148.033263 90.082711) (xy 147.96377 90.186715) (xy 147.915903 90.302277)
+ (xy 147.8915 90.424958) (xy 147.8915 90.550042) (xy 147.8915 91.947042) (xy 147.915903 92.069723) (xy 147.96377 92.185285)
+ (xy 148.033263 92.289289) (xy 148.121711 92.377737) (xy 148.225715 92.44723) (xy 148.341277 92.495097) (xy 148.463958 92.5195)
+ (xy 148.589042 92.5195) (xy 149.986042 92.5195) (xy 150.108723 92.495097) (xy 150.224285 92.44723) (xy 150.328289 92.377737)
+ (xy 150.416737 92.289289) (xy 150.48623 92.185285) (xy 150.534097 92.069723) (xy 150.540625 92.0369) (xy 153.035 92.0369)
+ (xy 153.113239 92.029228) (xy 153.191524 92.022379) (xy 153.195815 92.021132) (xy 153.200274 92.020695) (xy 153.27558 91.997958)
+ (xy 153.350997 91.976048) (xy 153.354967 91.973989) (xy 153.359253 91.972696) (xy 153.428658 91.935792) (xy 153.498434 91.899625)
+ (xy 153.501931 91.896832) (xy 153.505881 91.894733) (xy 153.566787 91.845058) (xy 153.628218 91.796019) (xy 153.634443 91.789879)
+ (xy 153.634573 91.789774) (xy 153.634672 91.789653) (xy 153.636677 91.787677) (xy 154.906677 90.517677) (xy 154.956564 90.456943)
+ (xy 155.007089 90.39673) (xy 155.009243 90.392811) (xy 155.012085 90.389352) (xy 155.049237 90.320062) (xy 155.087092 90.251205)
+ (xy 155.088445 90.246939) (xy 155.090559 90.242997) (xy 155.113538 90.167837) (xy 155.137306 90.092912) (xy 155.137804 90.088466)
+ (xy 155.139113 90.084187) (xy 155.147058 90.005966) (xy 155.155817 89.92788) (xy 155.155878 89.919137) (xy 155.155895 89.918971)
+ (xy 155.15588 89.918815) (xy 155.1559 89.916) (xy 155.1559 87.728454) (xy 155.927454 86.9569) (xy 160.655 86.9569)
+ (xy 163.477546 86.9569) (xy 164.8841 88.363454) (xy 164.8841 89.997324) (xy 164.815417 90.042269) (xy 164.610778 90.242666)
+ (xy 164.448961 90.478994) (xy 164.336129 90.742252) (xy 164.276579 91.022412) (xy 164.27258 91.308803) (xy 164.29371 91.423935)
+ (xy 160.688323 95.029323) (xy 160.638435 95.090056) (xy 160.587911 95.15027) (xy 160.585756 95.154188) (xy 160.582915 95.157648)
+ (xy 160.545743 95.226972) (xy 160.507908 95.295795) (xy 160.506556 95.300056) (xy 160.50444 95.304003) (xy 160.481447 95.379208)
+ (xy 160.457694 95.454088) (xy 160.457195 95.458533) (xy 160.455887 95.462813) (xy 160.447941 95.541033) (xy 160.439183 95.61912)
+ (xy 160.439121 95.627862) (xy 160.439105 95.628029) (xy 160.439119 95.628184) (xy 160.4391 95.631) (xy 160.4391 96.347324)
+ (xy 160.370417 96.392269) (xy 160.165778 96.592666) (xy 160.003961 96.828994) (xy 159.891129 97.092252) (xy 159.831579 97.372412)
+ (xy 159.82758 97.658803) (xy 159.879284 97.940516) (xy 159.984722 98.206822) (xy 160.139877 98.447576) (xy 160.338841 98.653608)
+ (xy 160.574033 98.817072) (xy 160.836497 98.931739) (xy 161.116234 98.993243) (xy 161.40259 98.999242) (xy 161.684658 98.949506)
+ (xy 161.951693 98.845929) (xy 162.193524 98.692459) (xy 162.400941 98.494939) (xy 162.566042 98.260893) (xy 162.682539 97.999236)
+ (xy 162.745995 97.719935) (xy 162.750563 97.392791) (xy 162.694931 97.111826) (xy 162.585785 96.847019) (xy 162.427283 96.608455)
+ (xy 162.225462 96.40522) (xy 162.1409 96.348182) (xy 162.1409 95.983454) (xy 165.495552 92.628801) (xy 165.561234 92.643243)
+ (xy 165.84759 92.649242) (xy 166.129658 92.599506) (xy 166.396693 92.495929) (xy 166.638524 92.342459) (xy 166.845941 92.144939)
+ (xy 167.011042 91.910893) (xy 167.127539 91.649236) (xy 167.190995 91.369935) (xy 167.195563 91.042791) (xy 167.139931 90.761826)
+ (xy 167.030785 90.497019) (xy 166.872283 90.258455) (xy 166.670462 90.05522) (xy 166.5859 89.998182) (xy 166.5859 88.011)
+ (xy 166.578228 87.93276) (xy 166.571379 87.854476) (xy 166.570132 87.850184) (xy 166.569695 87.845726) (xy 166.546958 87.770419)
+ (xy 166.525048 87.695003) (xy 166.522989 87.691032) (xy 166.521696 87.686747) (xy 166.484781 87.61732) (xy 166.448625 87.547567)
+ (xy 166.445834 87.544071) (xy 166.443733 87.540119) (xy 166.39404 87.47919) (xy 166.345019 87.417782) (xy 166.338879 87.411556)
+ (xy 166.338774 87.411427) (xy 166.338653 87.411327) (xy 166.336677 87.409323) (xy 164.431677 85.504323) (xy 164.370943 85.454435)
+ (xy 164.31073 85.403911) (xy 164.306811 85.401756) (xy 164.303352 85.398915) (xy 164.234027 85.361743) (xy 164.165205 85.323908)
+ (xy 164.160943 85.322556) (xy 164.156997 85.32044) (xy 164.081791 85.297447) (xy 164.006912 85.273694) (xy 164.002466 85.273195)
+ (xy 163.998187 85.271887) (xy 163.919966 85.263941) (xy 163.84188 85.255183) (xy 163.833137 85.255121) (xy 163.832971 85.255105)
+ (xy 163.832815 85.255119) (xy 163.83 85.2551) (xy 160.655 85.2551) (xy 155.575 85.2551) (xy 155.496764 85.26277)
+ (xy 155.418475 85.269621) (xy 155.414182 85.270868) (xy 155.409726 85.271305) (xy 155.334431 85.294038) (xy 155.259003 85.315952)
+ (xy 155.255032 85.31801) (xy 155.250747 85.319304) (xy 155.181341 85.356207) (xy 155.111566 85.392375) (xy 155.108068 85.395167)
+ (xy 155.104119 85.397267) (xy 155.043212 85.446941) (xy 154.981782 85.495981) (xy 154.975556 85.50212) (xy 154.975427 85.502226)
+ (xy 154.975327 85.502346) (xy 154.973323 85.504323) (xy 153.703323 86.774323) (xy 153.653435 86.835056) (xy 153.602911 86.89527)
+ (xy 153.600756 86.899188) (xy 153.597915 86.902648) (xy 153.560743 86.971972) (xy 153.522908 87.040795) (xy 153.521556 87.045056)
+ (xy 153.51944 87.049003) (xy 153.496447 87.124208) (xy 153.472694 87.199088) (xy 153.472195 87.203533) (xy 153.470887 87.207813)
+ (xy 153.462941 87.286033) (xy 153.454183 87.36412) (xy 153.454121 87.372862) (xy 153.454105 87.373029) (xy 153.454119 87.373184)
+ (xy 153.4541 87.376) (xy 153.4541 89.563546) (xy 152.682546 90.3351) (xy 150.540625 90.3351) (xy 150.534097 90.302277)
+ (xy 150.48623 90.186715) (xy 150.416737 90.082711) (xy 150.328289 89.994263) (xy 150.224285 89.92477) (xy 150.108723 89.876903)
+ (xy 149.986042 89.8525) (xy 149.860958 89.8525) (xy 149.80214 89.8525) (xy 149.829154 89.842022) (xy 150.049957 89.701897)
+ (xy 150.239337 89.521552) (xy 150.390081 89.307858) (xy 150.496448 89.068955) (xy 150.49708 89.066171) (xy 150.573225 89.258489)
+ (xy 150.714888 89.478308) (xy 150.89655 89.666425) (xy 151.111291 89.815674) (xy 151.350932 89.92037) (xy 151.606344 89.976526)
+ (xy 151.8678 89.982003) (xy 152.12534 89.936592) (xy 152.369154 89.842022) (xy 152.589957 89.701897) (xy 152.779337 89.521552)
+ (xy 152.930081 89.307858) (xy 153.036448 89.068955) (xy 153.094386 88.813941) (xy 153.098557 88.515244) (xy 153.047762 88.258711)
+ (xy 152.948107 88.016931) (xy 152.803388 87.799111) (xy 152.619118 87.613549) (xy 152.402314 87.467313) (xy 152.161235 87.365973)
+ (xy 151.905063 87.313388) (xy 151.760456 87.312378) (xy 150.554078 86.106) (xy 152.789278 83.8708) (xy 159.385 83.8708)
+ (xy 159.471409 83.862327) (xy 159.557878 83.854763) (xy 159.562624 83.853384) (xy 159.567541 83.852902) (xy 159.650627 83.827816)
+ (xy 159.734011 83.803591) (xy 159.738399 83.801316) (xy 159.74313 83.799888) (xy 159.819773 83.759136) (xy 159.896852 83.719182)
+ (xy 159.900714 83.716098) (xy 159.905077 83.713779) (xy 159.972353 83.658909) (xy 160.040195 83.604753) (xy 160.047072 83.597971)
+ (xy 160.047215 83.597855) (xy 160.047324 83.597722) (xy 160.049539 83.595539) (xy 165.129539 78.515539) (xy 165.184635 78.448462)
+ (xy 165.240442 78.381956) (xy 165.242823 78.377624) (xy 165.245959 78.373807) (xy 165.286972 78.297317) (xy 165.328803 78.221227)
+ (xy 165.330297 78.216515) (xy 165.332633 78.21216) (xy 165.358005 78.129169) (xy 165.384263 78.046395) (xy 165.384814 78.04148)
+ (xy 165.386258 78.036758) (xy 165.395028 77.950421) (xy 165.404708 77.864122) (xy 165.404775 77.85446) (xy 165.404794 77.854281)
+ (xy 165.404778 77.854113) (xy 165.4048 77.851) (xy 165.4048 61.341) (xy 165.396327 61.25459) (xy 165.388763 61.168122)
+ (xy 165.387384 61.163375) (xy 165.386902 61.158459) (xy 165.361816 61.075372) (xy 165.337591 60.991989) (xy 165.335316 60.9876)
+ (xy 165.333888 60.98287) (xy 165.293136 60.906226) (xy 165.253182 60.829148) (xy 165.250098 60.825285) (xy 165.247779 60.820923)
+ (xy 165.192884 60.753615) (xy 165.138752 60.685805) (xy 165.131972 60.678929) (xy 165.131855 60.678785) (xy 165.131721 60.678674)
+ (xy 165.129539 60.676461) (xy 161.405899 56.952821) (xy 161.338822 56.897724) (xy 161.272316 56.841918) (xy 161.267984 56.839536)
+ (xy 161.264167 56.836401) (xy 161.187677 56.795387) (xy 161.111587 56.753557) (xy 161.106875 56.752062) (xy 161.10252 56.749727)
+ (xy 161.019529 56.724354) (xy 160.936755 56.698097) (xy 160.93184 56.697545) (xy 160.927118 56.696102) (xy 160.840781 56.687331)
+ (xy 160.754482 56.677652) (xy 160.74482 56.677584) (xy 160.744641 56.677566) (xy 160.744473 56.677581) (xy 160.74136 56.67756)
+ (xy 124.8537 56.67756) (xy 124.76733 56.686028) (xy 124.680823 56.693597) (xy 124.676077 56.694975) (xy 124.671159 56.695458)
+ (xy 124.58806 56.720547) (xy 124.504689 56.744769) (xy 124.5003 56.747043) (xy 124.49557 56.748472) (xy 124.418966 56.789203)
+ (xy 124.341848 56.829177) (xy 124.337981 56.832263) (xy 124.333623 56.834581) (xy 124.266373 56.889427) (xy 124.198505 56.943607)
+ (xy 124.191627 56.950388) (xy 124.191485 56.950505) (xy 124.191375 56.950637) (xy 124.189161 56.952821) (xy 121.959982 59.182)
+ (xy 121.603458 59.182) (xy 121.480777 59.206403) (xy 121.365215 59.25427) (xy 121.261211 59.323763) (xy 121.172763 59.412211)
+ (xy 121.106715 59.511057) (xy 117.827119 56.231461) (xy 117.760042 56.176364) (xy 117.693536 56.120558) (xy 117.689204 56.118176)
+ (xy 117.685387 56.115041) (xy 117.608897 56.074027) (xy 117.532807 56.032197) (xy 117.528095 56.030702) (xy 117.52374 56.028367)
+ (xy 117.440749 56.002994) (xy 117.357975 55.976737) (xy 117.35306 55.976185) (xy 117.348338 55.974742) (xy 117.262001 55.965971)
+ (xy 117.175702 55.956292) (xy 117.16604 55.956224) (xy 117.165861 55.956206) (xy 117.165693 55.956221) (xy 117.16258 55.9562)
+ (xy 97.79 55.9562) (xy 97.79 55.563458) (xy 97.765597 55.440777) (xy 97.71773 55.325215) (xy 97.648237 55.221211)
+ (xy 97.559789 55.132763) (xy 97.455785 55.06327) (xy 97.340223 55.015403) (xy 97.217542 54.991) (xy 97.092458 54.991)
+ (xy 94.552458 54.991) (xy 94.429777 55.015403) (xy 94.314215 55.06327) (xy 94.210211 55.132763) (xy 94.121763 55.221211)
+ (xy 94.05227 55.325215) (xy 94.004403 55.440777) (xy 93.98 55.563458) (xy 93.98 55.688542) (xy 93.98 58.228542)
+ (xy 94.004403 58.351223) (xy 94.05227 58.466785) (xy 94.121763 58.570789) (xy 94.210211 58.659237) (xy 94.314215 58.72873)
+ (xy 94.429777 58.776597) (xy 94.552458 58.801) (xy 94.677542 58.801) (xy 97.217542 58.801) (xy 97.340223 58.776597)
+ (xy 97.455785 58.72873) (xy 97.559789 58.659237) (xy 97.648237 58.570789) (xy 97.71773 58.466785) (xy 97.765597 58.351223)
+ (xy 97.79 58.228542) (xy 97.79 58.103458) (xy 97.79 57.8358) (xy 116.773302 57.8358) (xy 120.308041 61.370539)
+ (xy 120.375117 61.425635) (xy 120.441624 61.481442) (xy 120.445955 61.483823) (xy 120.449773 61.486959) (xy 120.526262 61.527972)
+ (xy 120.602353 61.569803) (xy 120.607064 61.571297) (xy 120.61142 61.573633) (xy 120.694452 61.599018) (xy 120.777185 61.625263)
+ (xy 120.782094 61.625813) (xy 120.786822 61.627259) (xy 120.873253 61.636038) (xy 120.959458 61.645708) (xy 120.969108 61.645775)
+ (xy 120.969299 61.645795) (xy 120.969476 61.645778) (xy 120.97258 61.6458) (xy 121.031 61.6458) (xy 121.031 61.657542)
+ (xy 121.055403 61.780223) (xy 121.10327 61.895785) (xy 121.172763 61.999789) (xy 121.261211 62.088237) (xy 121.365215 62.15773)
+ (xy 121.480777 62.205597) (xy 121.603458 62.23) (xy 121.728542 62.23) (xy 123.506542 62.23) (xy 123.629223 62.205597)
+ (xy 123.744785 62.15773) (xy 123.848789 62.088237) (xy 123.937237 61.999789) (xy 124.00673 61.895785) (xy 124.054597 61.780223)
+ (xy 124.079 61.657542) (xy 124.079 61.532458) (xy 124.079 59.754458) (xy 124.073471 59.726666) (xy 125.242978 58.55716)
+ (xy 160.352082 58.55716) (xy 163.5252 61.730278) (xy 163.5252 77.461722) (xy 161.580841 79.40608) (xy 161.6075 79.272059)
+ (xy 161.6075 78.83525) (xy 161.6075 78.13675) (xy 161.6075 77.699941) (xy 161.573336 77.528188) (xy 161.506322 77.3664)
+ (xy 161.409031 77.220795) (xy 161.285204 77.096969) (xy 161.139599 76.999678) (xy 160.977812 76.932664) (xy 160.806059 76.8985)
+ (xy 160.630941 76.8985) (xy 160.36925 76.8985) (xy 160.147 77.12075) (xy 160.147 78.359) (xy 161.38525 78.359)
+ (xy 161.6075 78.13675) (xy 161.6075 78.83525) (xy 161.38525 78.613) (xy 160.147 78.613) (xy 160.147 79.85125)
+ (xy 160.36925 80.0735) (xy 160.630941 80.0735) (xy 160.806059 80.0735) (xy 160.94008 80.046841) (xy 159.893 81.093921)
+ (xy 159.893 79.85125) (xy 159.893 78.613) (xy 159.893 78.359) (xy 159.893 77.12075) (xy 159.67075 76.8985)
+ (xy 159.409059 76.8985) (xy 159.233941 76.8985) (xy 159.062188 76.932664) (xy 158.900401 76.999678) (xy 158.754796 77.096969)
+ (xy 158.630969 77.220795) (xy 158.533678 77.3664) (xy 158.466664 77.528188) (xy 158.4325 77.699941) (xy 158.4325 78.13675)
+ (xy 158.65475 78.359) (xy 159.893 78.359) (xy 159.893 78.613) (xy 158.65475 78.613) (xy 158.4325 78.83525)
+ (xy 158.4325 79.272059) (xy 158.466664 79.443812) (xy 158.533678 79.6056) (xy 158.630969 79.751205) (xy 158.754796 79.875031)
+ (xy 158.900401 79.972322) (xy 159.062188 80.039336) (xy 159.233941 80.0735) (xy 159.409059 80.0735) (xy 159.67075 80.0735)
+ (xy 159.893 79.85125) (xy 159.893 81.093921) (xy 158.995722 81.9912) (xy 156.273557 81.9912) (xy 156.273557 77.085244)
+ (xy 156.222762 76.828711) (xy 156.123107 76.586931) (xy 155.978388 76.369111) (xy 155.794118 76.183549) (xy 155.577314 76.037313)
+ (xy 155.336235 75.935973) (xy 155.080063 75.883388) (xy 154.818557 75.881563) (xy 154.810461 75.883107) (xy 153.8859 74.958546)
+ (xy 153.8859 73.63249) (xy 154.030201 73.516469) (xy 154.208641 73.303812) (xy 154.342378 73.060546) (xy 154.426317 72.795937)
+ (xy 154.457261 72.520063) (xy 154.4574 72.500203) (xy 154.4574 71.771797) (xy 154.430311 71.495518) (xy 154.350074 71.229762)
+ (xy 154.219747 70.984653) (xy 154.044293 70.769525) (xy 153.830396 70.592574) (xy 153.586202 70.460539) (xy 153.321013 70.378449)
+ (xy 153.04493 70.349432) (xy 152.768469 70.374592) (xy 152.50216 70.452971) (xy 152.256146 70.581583) (xy 152.039799 70.755531)
+ (xy 151.918185 70.900464) (xy 151.818318 70.743446) (xy 151.590591 70.505204) (xy 151.320761 70.315967) (xy 151.019198 70.183008)
+ (xy 150.881929 70.149265) (xy 150.622 70.331806) (xy 150.622 72.009) (xy 150.642 72.009) (xy 150.642 72.263)
+ (xy 150.622 72.263) (xy 150.622 73.940194) (xy 150.881929 74.122735) (xy 151.019198 74.088992) (xy 151.320761 73.956033)
+ (xy 151.590591 73.766796) (xy 151.818318 73.528554) (xy 151.918505 73.371032) (xy 152.025707 73.502475) (xy 152.1841 73.633509)
+ (xy 152.1841 75.311) (xy 152.191771 75.389239) (xy 152.198621 75.467524) (xy 152.199867 75.471815) (xy 152.200305 75.476274)
+ (xy 152.223041 75.55158) (xy 152.244952 75.626997) (xy 152.24701 75.630967) (xy 152.248304 75.635253) (xy 152.285207 75.704658)
+ (xy 152.321375 75.774434) (xy 152.324167 75.777931) (xy 152.326267 75.781881) (xy 152.375941 75.842787) (xy 152.424981 75.904218)
+ (xy 152.43112 75.910443) (xy 152.431226 75.910573) (xy 152.431346 75.910672) (xy 152.433323 75.912677) (xy 153.608108 77.087462)
+ (xy 153.604747 77.328124) (xy 153.651955 77.585341) (xy 153.748225 77.828489) (xy 153.889888 78.048308) (xy 154.07155 78.236425)
+ (xy 154.286291 78.385674) (xy 154.525932 78.49037) (xy 154.781344 78.546526) (xy 155.0428 78.552003) (xy 155.30034 78.506592)
+ (xy 155.544154 78.412022) (xy 155.764957 78.271897) (xy 155.954337 78.091552) (xy 156.105081 77.877858) (xy 156.211448 77.638955)
+ (xy 156.269386 77.383941) (xy 156.273557 77.085244) (xy 156.273557 81.9912) (xy 152.4 81.9912) (xy 152.31359 81.999672)
+ (xy 152.227122 82.007237) (xy 152.222375 82.008615) (xy 152.217459 82.009098) (xy 152.134372 82.034183) (xy 152.050989 82.058409)
+ (xy 152.0466 82.060683) (xy 152.04187 82.062112) (xy 151.965226 82.102863) (xy 151.888148 82.142818) (xy 151.884285 82.145901)
+ (xy 151.879923 82.148221) (xy 151.812646 82.20309) (xy 151.744805 82.257247) (xy 151.737927 82.264028) (xy 151.737785 82.264145)
+ (xy 151.737675 82.264277) (xy 151.735461 82.266461) (xy 150.368 83.633922) (xy 150.368 73.940194) (xy 150.368 72.263)
+ (xy 150.348 72.263) (xy 150.348 72.009) (xy 150.368 72.009) (xy 150.368 70.331806) (xy 150.108071 70.149265)
+ (xy 149.970802 70.183008) (xy 149.669239 70.315967) (xy 149.399409 70.505204) (xy 149.171682 70.743446) (xy 149.071494 70.900967)
+ (xy 148.964293 70.769525) (xy 148.8059 70.63849) (xy 148.8059 70.231) (xy 148.798229 70.152764) (xy 148.791379 70.074475)
+ (xy 148.790131 70.070182) (xy 148.789695 70.065726) (xy 148.766961 69.990431) (xy 148.745048 69.915003) (xy 148.742989 69.911032)
+ (xy 148.741696 69.906747) (xy 148.704792 69.837341) (xy 148.668625 69.767566) (xy 148.665832 69.764068) (xy 148.663733 69.760119)
+ (xy 148.614058 69.699212) (xy 148.565019 69.637782) (xy 148.558879 69.631556) (xy 148.558774 69.631427) (xy 148.558653 69.631327)
+ (xy 148.556677 69.629323) (xy 147.286677 68.359323) (xy 147.225943 68.309435) (xy 147.16573 68.258911) (xy 147.161811 68.256756)
+ (xy 147.158352 68.253915) (xy 147.089027 68.216743) (xy 147.020205 68.178908) (xy 147.015943 68.177556) (xy 147.011997 68.17544)
+ (xy 146.936791 68.152447) (xy 146.861912 68.128694) (xy 146.857466 68.128195) (xy 146.853187 68.126887) (xy 146.774966 68.118941)
+ (xy 146.69688 68.110183) (xy 146.688137 68.110121) (xy 146.687971 68.110105) (xy 146.687815 68.110119) (xy 146.685 68.1101)
+ (xy 142.24 68.1101) (xy 142.161719 68.117775) (xy 142.083475 68.124621) (xy 142.079182 68.125868) (xy 142.074726 68.126305)
+ (xy 141.999431 68.149038) (xy 141.924003 68.170952) (xy 141.920032 68.17301) (xy 141.915747 68.174304) (xy 141.846341 68.211207)
+ (xy 141.776566 68.247375) (xy 141.773068 68.250167) (xy 141.769119 68.252267) (xy 141.708212 68.301941) (xy 141.646782 68.350981)
+ (xy 141.640556 68.35712) (xy 141.640427 68.357226) (xy 141.640327 68.357346) (xy 141.638323 68.359323) (xy 139.098323 70.899323)
+ (xy 139.048435 70.960056) (xy 138.997911 71.02027) (xy 138.995756 71.024188) (xy 138.992915 71.027648) (xy 138.955743 71.096972)
+ (xy 138.917908 71.165795) (xy 138.916556 71.170056) (xy 138.91444 71.174003) (xy 138.891447 71.249208) (xy 138.867694 71.324088)
+ (xy 138.867195 71.328533) (xy 138.865887 71.332813) (xy 138.857941 71.411033) (xy 138.849183 71.48912) (xy 138.849121 71.497862)
+ (xy 138.849105 71.498029) (xy 138.849119 71.498184) (xy 138.8491 71.501) (xy 138.8491 75.900374) (xy 138.816277 75.906903)
+ (xy 138.700715 75.95477) (xy 138.596711 76.024263) (xy 138.508263 76.112711) (xy 138.43877 76.216715) (xy 138.390903 76.332277)
+ (xy 138.3665 76.454958) (xy 138.3665 76.580042) (xy 138.3665 77.977042) (xy 138.390903 78.099723) (xy 138.43877 78.215285)
+ (xy 138.508263 78.319289) (xy 138.596711 78.407737) (xy 138.700715 78.47723) (xy 138.816277 78.525097) (xy 138.938958 78.5495)
+ (xy 139.064042 78.5495) (xy 140.461042 78.5495) (xy 140.583723 78.525097) (xy 140.699285 78.47723) (xy 140.803289 78.407737)
+ (xy 140.891737 78.319289) (xy 140.96123 78.215285) (xy 141.009097 78.099723) (xy 141.0335 77.977042) (xy 141.0335 77.851958)
+ (xy 141.0335 76.454958) (xy 141.009097 76.332277) (xy 140.96123 76.216715) (xy 140.891737 76.112711) (xy 140.803289 76.024263)
+ (xy 140.699285 75.95477) (xy 140.583723 75.906903) (xy 140.5509 75.900374) (xy 140.5509 71.853454) (xy 142.592454 69.8119)
+ (xy 146.332546 69.8119) (xy 147.1041 70.583454) (xy 147.1041 70.639509) (xy 146.959799 70.755531) (xy 146.832727 70.906969)
+ (xy 146.812997 70.807777) (xy 146.76513 70.692215) (xy 146.695637 70.588211) (xy 146.607189 70.499763) (xy 146.503185 70.43027)
+ (xy 146.387623 70.382403) (xy 146.264942 70.358) (xy 146.139858 70.358) (xy 144.565058 70.358) (xy 144.442377 70.382403)
+ (xy 144.326815 70.43027) (xy 144.222811 70.499763) (xy 144.134363 70.588211) (xy 144.06487 70.692215) (xy 144.017003 70.807777)
+ (xy 143.9926 70.930458) (xy 143.9926 71.055542) (xy 143.9926 73.341542) (xy 144.017003 73.464223) (xy 144.06487 73.579785)
+ (xy 144.134363 73.683789) (xy 144.222811 73.772237) (xy 144.326815 73.84173) (xy 144.442377 73.889597) (xy 144.565058 73.914)
+ (xy 144.690142 73.914) (xy 146.264942 73.914) (xy 146.387623 73.889597) (xy 146.503185 73.84173) (xy 146.607189 73.772237)
+ (xy 146.695637 73.683789) (xy 146.76513 73.579785) (xy 146.812997 73.464223) (xy 146.8329 73.36416) (xy 146.945707 73.502475)
+ (xy 147.159604 73.679426) (xy 147.403798 73.811461) (xy 147.668987 73.893551) (xy 147.94507 73.922568) (xy 148.221531 73.897408)
+ (xy 148.48784 73.819029) (xy 148.733854 73.690417) (xy 148.950201 73.516469) (xy 149.071814 73.371535) (xy 149.171682 73.528554)
+ (xy 149.399409 73.766796) (xy 149.669239 73.956033) (xy 149.970802 74.088992) (xy 150.108071 74.122735) (xy 150.368 73.940194)
+ (xy 150.368 83.633922) (xy 148.835722 85.1662) (xy 147.13677 85.1662) (xy 147.13677 80.96655) (xy 147.092088 80.631792)
+ (xy 146.982957 80.312183) (xy 146.879628 80.118866) (xy 146.562042 80.058563) (xy 146.382437 80.238168) (xy 146.382437 79.878958)
+ (xy 146.322134 79.561372) (xy 146.018969 79.412541) (xy 145.692593 79.325715) (xy 145.35555 79.30423) (xy 145.020792 79.348912)
+ (xy 144.701183 79.458043) (xy 144.507866 79.561372) (xy 144.447563 79.878958) (xy 145.415 80.846395) (xy 146.382437 79.878958)
+ (xy 146.382437 80.238168) (xy 145.594605 81.026) (xy 146.562042 81.993437) (xy 146.879628 81.933134) (xy 147.028459 81.629969)
+ (xy 147.115285 81.303593) (xy 147.13677 80.96655) (xy 147.13677 85.1662) (xy 146.540113 85.1662) (xy 146.382437 85.007419)
+ (xy 146.382437 82.173042) (xy 145.415 81.205605) (xy 145.235395 81.38521) (xy 145.235395 81.026) (xy 144.267958 80.058563)
+ (xy 143.950372 80.118866) (xy 143.801541 80.422031) (xy 143.714715 80.748407) (xy 143.69323 81.08545) (xy 143.737912 81.420208)
+ (xy 143.847043 81.739817) (xy 143.950372 81.933134) (xy 144.267958 81.993437) (xy 145.235395 81.026) (xy 145.235395 81.38521)
+ (xy 144.447563 82.173042) (xy 144.507866 82.490628) (xy 144.811031 82.639459) (xy 145.137407 82.726285) (xy 145.47445 82.74777)
+ (xy 145.809208 82.703088) (xy 146.128817 82.593957) (xy 146.322134 82.490628) (xy 146.382437 82.173042) (xy 146.382437 85.007419)
+ (xy 146.350462 84.97522) (xy 146.11301 84.815057) (xy 145.848971 84.704065) (xy 145.568403 84.646472) (xy 145.282554 84.644476)
+ (xy 142.774999 82.136921) (xy 142.707922 82.081824) (xy 142.641416 82.026018) (xy 142.637084 82.023636) (xy 142.633267 82.020501)
+ (xy 142.556777 81.979487) (xy 142.480687 81.937657) (xy 142.475975 81.936162) (xy 142.47162 81.933827) (xy 142.388629 81.908454)
+ (xy 142.305855 81.882197) (xy 142.30094 81.881645) (xy 142.296218 81.880202) (xy 142.209881 81.871431) (xy 142.123582 81.861752)
+ (xy 142.11392 81.861684) (xy 142.113741 81.861666) (xy 142.113573 81.861681) (xy 142.11046 81.86166) (xy 138.992904 81.86166)
+ (xy 139.071042 81.750893) (xy 139.187539 81.489236) (xy 139.250995 81.209935) (xy 139.255563 80.882791) (xy 139.199931 80.601826)
+ (xy 139.090785 80.337019) (xy 138.932283 80.098455) (xy 138.730462 79.89522) (xy 138.6459 79.838182) (xy 138.6459 79.756)
+ (xy 138.638228 79.67776) (xy 138.631379 79.599476) (xy 138.630132 79.595184) (xy 138.629695 79.590726) (xy 138.606958 79.515419)
+ (xy 138.585048 79.440003) (xy 138.582989 79.436032) (xy 138.581696 79.431747) (xy 138.544781 79.36232) (xy 138.508625 79.292567)
+ (xy 138.505834 79.289071) (xy 138.503733 79.285119) (xy 138.45404 79.22419) (xy 138.405019 79.162782) (xy 138.398879 79.156556)
+ (xy 138.398774 79.156427) (xy 138.398653 79.156327) (xy 138.396677 79.154323) (xy 136.491677 77.249323) (xy 136.430943 77.199435)
+ (xy 136.37073 77.148911) (xy 136.366811 77.146756) (xy 136.363352 77.143915) (xy 136.294027 77.106743) (xy 136.225205 77.068908)
+ (xy 136.220943 77.067556) (xy 136.216997 77.06544) (xy 136.141791 77.042447) (xy 136.066912 77.018694) (xy 136.062466 77.018195)
+ (xy 136.058187 77.016887) (xy 135.979966 77.008941) (xy 135.90188 77.000183) (xy 135.893137 77.000121) (xy 135.892971 77.000105)
+ (xy 135.892815 77.000119) (xy 135.89 77.0001) (xy 132.354978 77.0001) (xy 141.359278 67.9958) (xy 152.4 67.9958)
+ (xy 152.486409 67.987327) (xy 152.572878 67.979763) (xy 152.577624 67.978384) (xy 152.582541 67.977902) (xy 152.665627 67.952816)
+ (xy 152.749011 67.928591) (xy 152.753399 67.926316) (xy 152.75813 67.924888) (xy 152.834773 67.884136) (xy 152.911852 67.844182)
+ (xy 152.915714 67.841098) (xy 152.920077 67.838779) (xy 152.987353 67.783909) (xy 153.055195 67.729753) (xy 153.062072 67.722971)
+ (xy 153.062215 67.722855) (xy 153.062324 67.722722) (xy 153.064539 67.720539) (xy 153.699539 67.085539) (xy 153.754635 67.018462)
+ (xy 153.810442 66.951956) (xy 153.812823 66.947624) (xy 153.815959 66.943807) (xy 153.856972 66.867317) (xy 153.898803 66.791227)
+ (xy 153.900297 66.786515) (xy 153.902633 66.78216) (xy 153.928018 66.699127) (xy 153.954263 66.616395) (xy 153.954813 66.611485)
+ (xy 153.956259 66.606758) (xy 153.965038 66.520326) (xy 153.974708 66.434122) (xy 153.974775 66.424471) (xy 153.974795 66.424281)
+ (xy 153.974778 66.424103) (xy 153.9748 66.421) (xy 153.9748 65.941012) (xy 154.030201 65.896469) (xy 154.208641 65.683812)
+ (xy 154.333992 65.4558) (xy 158.75 65.4558) (xy 158.836409 65.447327) (xy 158.922878 65.439763) (xy 158.927624 65.438384)
+ (xy 158.932541 65.437902) (xy 159.015627 65.412816) (xy 159.099011 65.388591) (xy 159.103399 65.386316) (xy 159.10813 65.384888)
+ (xy 159.184773 65.344136) (xy 159.261852 65.304182) (xy 159.265714 65.301098) (xy 159.270077 65.298779) (xy 159.337353 65.243909)
+ (xy 159.405195 65.189753) (xy 159.412072 65.182971) (xy 159.412215 65.182855) (xy 159.412324 65.182722) (xy 159.414539 65.180539)
+ (xy 160.015326 64.579751) (xy 160.1228 64.582003) (xy 160.38034 64.536592) (xy 160.624154 64.442022) (xy 160.844957 64.301897)
+ (xy 161.034337 64.121552) (xy 161.185081 63.907858) (xy 161.291448 63.668955) (xy 161.349386 63.413941) (xy 161.353557 63.115244)
+ (xy 161.302762 62.858711) (xy 161.203107 62.616931) (xy 161.058388 62.399111) (xy 160.874118 62.213549) (xy 160.657314 62.067313)
+ (xy 160.416235 61.965973) (xy 160.160063 61.913388) (xy 159.898557 61.911563) (xy 159.641676 61.960565) (xy 159.399206 62.05853)
+ (xy 159.180381 62.201725) (xy 158.993537 62.384695) (xy 158.845791 62.600473) (xy 158.74277 62.840839) (xy 158.688399 63.096637)
+ (xy 158.686247 63.250674) (xy 158.360722 63.5762) (xy 154.332228 63.5762) (xy 154.219747 63.364653) (xy 154.044293 63.149525)
+ (xy 153.830396 62.972574) (xy 153.586202 62.840539) (xy 153.321013 62.758449) (xy 153.04493 62.729432) (xy 152.768469 62.754592)
+ (xy 152.50216 62.832971) (xy 152.256146 62.961583) (xy 152.039799 63.135531) (xy 151.861359 63.348188) (xy 151.764587 63.524214)
+ (xy 151.679747 63.364653) (xy 151.504293 63.149525) (xy 151.290396 62.972574) (xy 151.046202 62.840539) (xy 150.781013 62.758449)
+ (xy 150.50493 62.729432) (xy 150.228469 62.754592) (xy 149.96216 62.832971) (xy 149.716146 62.961583) (xy 149.499799 63.135531)
+ (xy 149.321359 63.348188) (xy 149.224587 63.524214) (xy 149.139747 63.364653) (xy 148.964293 63.149525) (xy 148.750396 62.972574)
+ (xy 148.506202 62.840539) (xy 148.241013 62.758449) (xy 147.96493 62.729432) (xy 147.688469 62.754592) (xy 147.42216 62.832971)
+ (xy 147.176146 62.961583) (xy 146.959799 63.135531) (xy 146.781359 63.348188) (xy 146.684587 63.524214) (xy 146.599747 63.364653)
+ (xy 146.424293 63.149525) (xy 146.210396 62.972574) (xy 145.966202 62.840539) (xy 145.701013 62.758449) (xy 145.42493 62.729432)
+ (xy 145.148469 62.754592) (xy 144.88216 62.832971) (xy 144.636146 62.961583) (xy 144.419799 63.135531) (xy 144.241359 63.348188)
+ (xy 144.116007 63.5762) (xy 139.7 63.5762) (xy 139.61359 63.584672) (xy 139.527122 63.592237) (xy 139.522375 63.593615)
+ (xy 139.517459 63.594098) (xy 139.434372 63.619183) (xy 139.350989 63.643409) (xy 139.3466 63.645683) (xy 139.34187 63.647112)
+ (xy 139.265226 63.687863) (xy 139.188148 63.727818) (xy 139.184285 63.730901) (xy 139.179923 63.733221) (xy 139.112615 63.788115)
+ (xy 139.044805 63.842248) (xy 139.037929 63.849027) (xy 139.037785 63.849145) (xy 139.037674 63.849278) (xy 139.035461 63.851461)
+ (xy 132.960722 69.9262) (xy 127.311123 69.9262) (xy 127.219118 69.833549) (xy 127.002314 69.687313) (xy 126.761235 69.585973)
+ (xy 126.505063 69.533388) (xy 126.243557 69.531563) (xy 125.986676 69.580565) (xy 125.744206 69.67853) (xy 125.525381 69.821725)
+ (xy 125.338537 70.004695) (xy 125.2855 70.082153) (xy 125.2855 70.079941) (xy 125.251336 69.908188) (xy 125.184322 69.7464)
+ (xy 125.087031 69.600795) (xy 124.963204 69.476969) (xy 124.817599 69.379678) (xy 124.702396 69.331959) (xy 124.839337 69.201552)
+ (xy 124.990081 68.987858) (xy 125.096448 68.748955) (xy 125.154386 68.493941) (xy 125.158557 68.195244) (xy 125.107762 67.938711)
+ (xy 125.008107 67.696931) (xy 124.863388 67.479111) (xy 124.7648 67.379831) (xy 124.7648 64.68872) (xy 136.78916 64.68872)
+ (xy 136.875569 64.680247) (xy 136.962038 64.672683) (xy 136.966784 64.671304) (xy 136.971701 64.670822) (xy 137.054787 64.645736)
+ (xy 137.138171 64.621511) (xy 137.142559 64.619236) (xy 137.14729 64.617808) (xy 137.223933 64.577056) (xy 137.301012 64.537102)
+ (xy 137.304874 64.534018) (xy 137.309237 64.531699) (xy 137.376513 64.476829) (xy 137.444355 64.422673) (xy 137.451232 64.415891)
+ (xy 137.451375 64.415775) (xy 137.451484 64.415642) (xy 137.453699 64.413459) (xy 139.911838 61.955319) (xy 139.914903 61.970723)
+ (xy 139.96277 62.086285) (xy 140.032263 62.190289) (xy 140.120711 62.278737) (xy 140.224715 62.34823) (xy 140.340277 62.396097)
+ (xy 140.462958 62.4205) (xy 140.588042 62.4205) (xy 142.747042 62.4205) (xy 142.869723 62.396097) (xy 142.985285 62.34823)
+ (xy 143.089289 62.278737) (xy 143.177737 62.190289) (xy 143.24723 62.086285) (xy 143.295097 61.970723) (xy 143.3195 61.848042)
+ (xy 143.3195 61.722958) (xy 143.3195 59.563958) (xy 143.295097 59.441277) (xy 143.24723 59.325715) (xy 143.177737 59.221711)
+ (xy 143.089289 59.133263) (xy 142.985285 59.06377) (xy 142.869723 59.015903) (xy 142.747042 58.9915) (xy 142.621958 58.9915)
+ (xy 140.462958 58.9915) (xy 140.340277 59.015903) (xy 140.224715 59.06377) (xy 140.120711 59.133263) (xy 140.032263 59.221711)
+ (xy 139.96277 59.325715) (xy 139.914903 59.441277) (xy 139.8905 59.563958) (xy 139.8905 59.689042) (xy 139.8905 59.7662)
+ (xy 139.83208 59.7662) (xy 139.745715 59.774668) (xy 139.659202 59.782237) (xy 139.654455 59.783615) (xy 139.649539 59.784098)
+ (xy 139.566452 59.809183) (xy 139.483069 59.833409) (xy 139.47868 59.835683) (xy 139.47395 59.837112) (xy 139.397306 59.877863)
+ (xy 139.320228 59.917818) (xy 139.316365 59.920901) (xy 139.312003 59.923221) (xy 139.244726 59.97809) (xy 139.176885 60.032247)
+ (xy 139.170007 60.039028) (xy 139.169865 60.039145) (xy 139.169755 60.039277) (xy 139.167541 60.041461) (xy 136.399882 62.80912)
+ (xy 128.342407 62.80912) (xy 128.342407 60.656594) (xy 128.294773 60.271771) (xy 128.172979 59.903635) (xy 128.036603 59.64849)
+ (xy 127.693071 59.557534) (xy 127.513466 59.737139) (xy 127.513466 59.377929) (xy 127.42251 59.034397) (xy 127.076076 58.860207)
+ (xy 126.702317 58.756949) (xy 126.315594 58.728593) (xy 125.930771 58.776227) (xy 125.562635 58.898021) (xy 125.30749 59.034397)
+ (xy 125.216534 59.377929) (xy 126.365 60.526395) (xy 127.513466 59.377929) (xy 127.513466 59.737139) (xy 126.544605 60.706)
+ (xy 127.693071 61.854466) (xy 128.036603 61.76351) (xy 128.210793 61.417076) (xy 128.314051 61.043317) (xy 128.342407 60.656594)
+ (xy 128.342407 62.80912) (xy 127.513466 62.80912) (xy 127.513466 62.034071) (xy 126.365 60.885605) (xy 126.185395 61.06521)
+ (xy 126.185395 60.706) (xy 125.036929 59.557534) (xy 124.693397 59.64849) (xy 124.519207 59.994924) (xy 124.415949 60.368683)
+ (xy 124.387593 60.755406) (xy 124.435227 61.140229) (xy 124.557021 61.508365) (xy 124.693397 61.76351) (xy 125.036929 61.854466)
+ (xy 126.185395 60.706) (xy 126.185395 61.06521) (xy 125.216534 62.034071) (xy 125.30749 62.377603) (xy 125.653924 62.551793)
+ (xy 126.027683 62.655051) (xy 126.414406 62.683407) (xy 126.799229 62.635773) (xy 127.167365 62.513979) (xy 127.42251 62.377603)
+ (xy 127.513466 62.034071) (xy 127.513466 62.80912) (xy 123.825 62.80912) (xy 122.4915 62.80912) (xy 122.40513 62.817588)
+ (xy 122.318623 62.825157) (xy 122.313877 62.826535) (xy 122.308959 62.827018) (xy 122.22586 62.852107) (xy 122.142489 62.876329)
+ (xy 122.1381 62.878603) (xy 122.13337 62.880032) (xy 122.056766 62.920763) (xy 121.979648 62.960737) (xy 121.975781 62.963823)
+ (xy 121.971423 62.966141) (xy 121.904173 63.020987) (xy 121.836305 63.075167) (xy 121.829427 63.081948) (xy 121.829285 63.082065)
+ (xy 121.829175 63.082197) (xy 121.826961 63.084381) (xy 117.818407 67.092934) (xy 117.78373 67.009215) (xy 117.714237 66.905211)
+ (xy 117.625789 66.816763) (xy 117.521785 66.74727) (xy 117.406223 66.699403) (xy 117.283542 66.675) (xy 117.158458 66.675)
+ (xy 115.126458 66.675) (xy 115.003777 66.699403) (xy 114.888215 66.74727) (xy 114.784211 66.816763) (xy 114.695763 66.905211)
+ (xy 114.62627 67.009215) (xy 114.578403 67.124777) (xy 114.554 67.247458) (xy 114.554 67.372542) (xy 114.554 69.404542)
+ (xy 114.578403 69.527223) (xy 114.62627 69.642785) (xy 114.695763 69.746789) (xy 114.784211 69.835237) (xy 114.888215 69.90473)
+ (xy 114.971934 69.939407) (xy 108.889141 76.0222) (xy 105.15607 76.0222) (xy 105.15607 68.164111) (xy 105.093182 67.8465)
+ (xy 104.969799 67.547152) (xy 104.790624 67.277471) (xy 104.562479 67.047728) (xy 104.294055 66.866674) (xy 104.020694 66.751763)
+ (xy 104.020694 60.649062) (xy 103.975275 60.301784) (xy 103.862977 59.97004) (xy 103.751384 59.761264) (xy 103.427316 59.693289)
+ (xy 103.247711 59.872894) (xy 103.247711 59.513684) (xy 103.179736 59.189616) (xy 102.865751 59.034444) (xy 102.527527 58.943509)
+ (xy 102.178062 58.920306) (xy 101.830784 58.965725) (xy 101.49904 59.078023) (xy 101.290264 59.189616) (xy 101.222289 59.513684)
+ (xy 102.235 60.526395) (xy 103.247711 59.513684) (xy 103.247711 59.872894) (xy 102.414605 60.706) (xy 103.427316 61.718711)
+ (xy 103.751384 61.650736) (xy 103.906556 61.336751) (xy 103.997491 60.998527) (xy 104.020694 60.649062) (xy 104.020694 66.751763)
+ (xy 103.995576 66.741205) (xy 103.678411 66.6761) (xy 103.354642 66.67384) (xy 103.247711 66.694238) (xy 103.247711 61.898316)
+ (xy 102.235 60.885605) (xy 102.055395 61.06521) (xy 102.055395 60.706) (xy 101.042684 59.693289) (xy 100.718616 59.761264)
+ (xy 100.563444 60.075249) (xy 100.472509 60.413473) (xy 100.449306 60.762938) (xy 100.494725 61.110216) (xy 100.607023 61.44196)
+ (xy 100.718616 61.650736) (xy 101.042684 61.718711) (xy 102.055395 60.706) (xy 102.055395 61.06521) (xy 101.222289 61.898316)
+ (xy 101.290264 62.222384) (xy 101.604249 62.377556) (xy 101.942473 62.468491) (xy 102.291938 62.491694) (xy 102.639216 62.446275)
+ (xy 102.97096 62.333977) (xy 103.179736 62.222384) (xy 103.247711 61.898316) (xy 103.247711 66.694238) (xy 103.036599 66.73451)
+ (xy 102.736397 66.855799) (xy 102.465472 67.033088) (xy 102.234141 67.259623) (xy 102.147472 67.3862) (xy 98.92792 67.3862)
+ (xy 98.84151 67.394672) (xy 98.755042 67.402237) (xy 98.750295 67.403615) (xy 98.745379 67.404098) (xy 98.662292 67.429183)
+ (xy 98.578909 67.453409) (xy 98.57452 67.455683) (xy 98.56979 67.457112) (xy 98.493146 67.497863) (xy 98.416068 67.537818)
+ (xy 98.412205 67.540901) (xy 98.407843 67.543221) (xy 98.340535 67.598115) (xy 98.272725 67.652248) (xy 98.265849 67.659027)
+ (xy 98.265705 67.659145) (xy 98.265594 67.659278) (xy 98.263381 67.661461) (xy 98.054042 67.870799) (xy 98.054042 61.934124)
+ (xy 98.004194 61.51177) (xy 97.872908 61.107256) (xy 97.711758 60.805764) (xy 97.348746 60.691859) (xy 97.169141 60.871464)
+ (xy 97.169141 60.512254) (xy 97.055236 60.149242) (xy 96.676368 59.956041) (xy 96.267087 59.840466) (xy 95.843124 59.806958)
+ (xy 95.42077 59.856806) (xy 95.016256 59.988092) (xy 94.714764 60.149242) (xy 94.600859 60.512254) (xy 95.885 61.796395)
+ (xy 97.169141 60.512254) (xy 97.169141 60.871464) (xy 96.064605 61.976) (xy 97.348746 63.260141) (xy 97.711758 63.146236)
+ (xy 97.904959 62.767368) (xy 98.020534 62.358087) (xy 98.054042 61.934124) (xy 98.054042 67.870799) (xy 97.768661 68.15618)
+ (xy 97.765597 68.140777) (xy 97.71773 68.025215) (xy 97.648237 67.921211) (xy 97.559789 67.832763) (xy 97.455785 67.76327)
+ (xy 97.340223 67.715403) (xy 97.217542 67.691) (xy 97.169141 67.691) (xy 97.169141 63.439746) (xy 95.885 62.155605)
+ (xy 95.705395 62.33521) (xy 95.705395 61.976) (xy 94.421254 60.691859) (xy 94.058242 60.805764) (xy 93.865041 61.184632)
+ (xy 93.749466 61.593913) (xy 93.715958 62.017876) (xy 93.765806 62.44023) (xy 93.897092 62.844744) (xy 94.058242 63.146236)
+ (xy 94.421254 63.260141) (xy 95.705395 61.976) (xy 95.705395 62.33521) (xy 94.600859 63.439746) (xy 94.714764 63.802758)
+ (xy 95.093632 63.995959) (xy 95.502913 64.111534) (xy 95.926876 64.145042) (xy 96.34923 64.095194) (xy 96.753744 63.963908)
+ (xy 97.055236 63.802758) (xy 97.169141 63.439746) (xy 97.169141 67.691) (xy 97.092458 67.691) (xy 94.552458 67.691)
+ (xy 94.429777 67.715403) (xy 94.314215 67.76327) (xy 94.210211 67.832763) (xy 94.121763 67.921211) (xy 94.05227 68.025215)
+ (xy 94.004403 68.140777) (xy 93.98 68.263458) (xy 93.98 68.388542) (xy 93.98 70.928542) (xy 94.004403 71.051223)
+ (xy 94.05227 71.166785) (xy 94.121763 71.270789) (xy 94.210211 71.359237) (xy 94.314215 71.42873) (xy 94.429777 71.476597)
+ (xy 94.552458 71.501) (xy 94.677542 71.501) (xy 97.217542 71.501) (xy 97.340223 71.476597) (xy 97.455785 71.42873)
+ (xy 97.559789 71.359237) (xy 97.648237 71.270789) (xy 97.71773 71.166785) (xy 97.765597 71.051223) (xy 97.79 70.928542)
+ (xy 97.79 70.803458) (xy 97.79 70.523332) (xy 97.830798 70.519763) (xy 97.835544 70.518384) (xy 97.840461 70.517902)
+ (xy 97.923547 70.492816) (xy 98.006931 70.468591) (xy 98.011319 70.466316) (xy 98.01605 70.464888) (xy 98.092693 70.424136)
+ (xy 98.169772 70.384182) (xy 98.173634 70.381098) (xy 98.177997 70.378779) (xy 98.245273 70.323909) (xy 98.313115 70.269753)
+ (xy 98.319992 70.262971) (xy 98.320135 70.262855) (xy 98.320244 70.262722) (xy 98.322459 70.260539) (xy 99.317198 69.2658)
+ (xy 102.146424 69.2658) (xy 102.204862 69.356477) (xy 102.429777 69.589383) (xy 102.695647 69.774167) (xy 102.992345 69.903791)
+ (xy 103.308569 69.973318) (xy 103.632276 69.980099) (xy 103.951135 69.923875) (xy 104.253 69.806789) (xy 104.526375 69.6333)
+ (xy 104.760846 69.410017) (xy 104.947482 69.145444) (xy 105.079174 68.849658) (xy 105.150906 68.533926) (xy 105.15607 68.164111)
+ (xy 105.15607 76.0222) (xy 104.212407 76.0222) (xy 103.68528 76.0222) (xy 103.723044 75.984436) (xy 103.563073 75.824465)
+ (xy 103.906603 75.73351) (xy 104.080793 75.387076) (xy 104.184051 75.013317) (xy 104.212407 74.626594) (xy 104.164773 74.241771)
+ (xy 104.042979 73.873635) (xy 103.906603 73.61849) (xy 103.563071 73.527534) (xy 103.383466 73.707139) (xy 103.383466 73.347929)
+ (xy 103.29251 73.004397) (xy 102.946076 72.830207) (xy 102.572317 72.726949) (xy 102.185594 72.698593) (xy 101.800771 72.746227)
+ (xy 101.432635 72.868021) (xy 101.17749 73.004397) (xy 101.086534 73.347929) (xy 102.235 74.496395) (xy 103.383466 73.347929)
+ (xy 103.383466 73.707139) (xy 102.414605 74.676) (xy 102.428747 74.690142) (xy 102.249142 74.869747) (xy 102.235 74.855605)
+ (xy 102.220857 74.869747) (xy 102.055395 74.704285) (xy 102.041252 74.690142) (xy 102.055395 74.676) (xy 100.906929 73.527534)
+ (xy 100.563397 73.61849) (xy 100.389207 73.964924) (xy 100.285949 74.338683) (xy 100.257593 74.725406) (xy 100.305227 75.110229)
+ (xy 100.427021 75.478365) (xy 100.563397 75.73351) (xy 100.906926 75.824465) (xy 100.746956 75.984436) (xy 100.789477 76.026957)
+ (xy 100.75159 76.030672) (xy 100.665122 76.038237) (xy 100.660375 76.039615) (xy 100.655459 76.040098) (xy 100.572372 76.065183)
+ (xy 100.488989 76.089409) (xy 100.4846 76.091683) (xy 100.47987 76.093112) (xy 100.403226 76.133863) (xy 100.326148 76.173818)
+ (xy 100.322285 76.176901) (xy 100.317923 76.179221) (xy 100.250615 76.234115) (xy 100.182805 76.288248) (xy 100.175929 76.295027)
+ (xy 100.175785 76.295145) (xy 100.175674 76.295278) (xy 100.173461 76.297461) (xy 99.178722 77.2922) (xy 98.054042 77.2922)
+ (xy 98.054042 74.634124) (xy 98.004194 74.21177) (xy 97.872908 73.807256) (xy 97.711758 73.505764) (xy 97.348746 73.391859)
+ (xy 97.169141 73.571464) (xy 97.169141 73.212254) (xy 97.055236 72.849242) (xy 96.676368 72.656041) (xy 96.267087 72.540466)
+ (xy 95.843124 72.506958) (xy 95.42077 72.556806) (xy 95.016256 72.688092) (xy 94.714764 72.849242) (xy 94.600859 73.212254)
+ (xy 95.885 74.496395) (xy 97.169141 73.212254) (xy 97.169141 73.571464) (xy 96.064605 74.676) (xy 97.348746 75.960141)
+ (xy 97.711758 75.846236) (xy 97.904959 75.467368) (xy 98.020534 75.058087) (xy 98.054042 74.634124) (xy 98.054042 77.2922)
+ (xy 97.169141 77.2922) (xy 97.169141 76.139746) (xy 95.885 74.855605) (xy 95.705395 75.03521) (xy 95.705395 74.676)
+ (xy 94.421254 73.391859) (xy 94.058242 73.505764) (xy 93.865041 73.884632) (xy 93.749466 74.293913) (xy 93.715958 74.717876)
+ (xy 93.765806 75.14023) (xy 93.897092 75.544744) (xy 94.058242 75.846236) (xy 94.421254 75.960141) (xy 95.705395 74.676)
+ (xy 95.705395 75.03521) (xy 94.600859 76.139746) (xy 94.714764 76.502758) (xy 95.093632 76.695959) (xy 95.502913 76.811534)
+ (xy 95.926876 76.845042) (xy 96.34923 76.795194) (xy 96.753744 76.663908) (xy 97.055236 76.502758) (xy 97.169141 76.139746)
+ (xy 97.169141 77.2922) (xy 95.25 77.2922) (xy 95.163594 77.300672) (xy 95.077122 77.308237) (xy 95.072375 77.309615)
+ (xy 95.067459 77.310098) (xy 94.984372 77.335183) (xy 94.900989 77.359409) (xy 94.8966 77.361683) (xy 94.89187 77.363112)
+ (xy 94.815226 77.403863) (xy 94.738148 77.443818) (xy 94.734285 77.446901) (xy 94.729923 77.449221) (xy 94.66264 77.504095)
+ (xy 94.594804 77.558248) (xy 94.587927 77.565028) (xy 94.587785 77.565145) (xy 94.587675 77.565277) (xy 94.585461 77.567461)
+ (xy 91.004061 81.148861) (xy 90.948964 81.215937) (xy 90.893158 81.282444) (xy 90.890776 81.286775) (xy 90.887641 81.290593)
+ (xy 90.846627 81.367082) (xy 90.804797 81.443173) (xy 90.803302 81.447884) (xy 90.800967 81.45224) (xy 90.775594 81.53523)
+ (xy 90.749337 81.618005) (xy 90.748785 81.622919) (xy 90.747342 81.627642) (xy 90.738571 81.713978) (xy 90.728892 81.800278)
+ (xy 90.728824 81.809939) (xy 90.728806 81.810119) (xy 90.728821 81.810286) (xy 90.7288 81.8134) (xy 90.7288 85.4837)
+ (xy 90.7288 87.249) (xy 90.7288 112.75314) (xy 90.737272 112.839549) (xy 90.744837 112.926018) (xy 90.746215 112.930764)
+ (xy 90.746698 112.935681) (xy 90.771783 113.018767) (xy 90.796009 113.102151) (xy 90.798283 113.106539) (xy 90.799712 113.11127)
+ (xy 90.840463 113.187913) (xy 90.880418 113.264992) (xy 90.883501 113.268854) (xy 90.885821 113.273217) (xy 90.94069 113.340493)
+ (xy 90.994847 113.408335) (xy 91.001628 113.415212) (xy 91.001745 113.415355) (xy 91.001877 113.415464) (xy 91.004061 113.417679)
+ (xy 91.984501 114.398119) (xy 92.051577 114.453215) (xy 92.118084 114.509022) (xy 92.122415 114.511403) (xy 92.126233 114.514539)
+ (xy 92.202722 114.555552) (xy 92.278813 114.597383) (xy 92.283524 114.598877) (xy 92.28788 114.601213) (xy 92.370912 114.626598)
+ (xy 92.453645 114.652843) (xy 92.458554 114.653393) (xy 92.463282 114.654839) (xy 92.549713 114.663618) (xy 92.635918 114.673288)
+ (xy 92.645568 114.673355) (xy 92.645759 114.673375) (xy 92.645936 114.673358) (xy 92.64904 114.67338) (xy 93.605401 114.67338)
+ (xy 93.444764 114.759242) (xy 93.330859 115.122254) (xy 94.615 116.406395) (xy 94.629142 116.392252) (xy 94.808747 116.571857)
+ (xy 94.794605 116.586) (xy 96.078746 117.870141) (xy 96.441758 117.756236) (xy 96.634959 117.377368) (xy 96.716084 117.090082)
+ (xy 96.876541 117.250539) (xy 96.943617 117.305635) (xy 97.010124 117.361442) (xy 97.014455 117.363823) (xy 97.018273 117.366959)
+ (xy 97.094762 117.407972) (xy 97.170853 117.449803) (xy 97.175564 117.451297) (xy 97.17992 117.453633) (xy 97.26291 117.479005)
+ (xy 97.345685 117.505263) (xy 97.350599 117.505814) (xy 97.355322 117.507258) (xy 97.441658 117.516028) (xy 97.527958 117.525708)
+ (xy 97.537619 117.525775) (xy 97.537799 117.525794) (xy 97.537966 117.525778) (xy 97.54108 117.5258) (xy 102.250612 117.5258)
+ (xy 102.156183 117.558043) (xy 101.962866 117.661372) (xy 101.902563 117.978958) (xy 102.87 118.946395) (xy 103.837437 117.978958)
+ (xy 103.777134 117.661372) (xy 103.500977 117.5258) (xy 106.017771 117.5258) (xy 106.130253 117.737347) (xy 106.305707 117.952475)
+ (xy 106.519604 118.129426) (xy 106.763798 118.261461) (xy 107.028987 118.343551) (xy 107.30507 118.372568) (xy 107.581531 118.347408)
+ (xy 107.84784 118.269029) (xy 108.093854 118.140417) (xy 108.310201 117.966469) (xy 108.488641 117.753812) (xy 108.585412 117.577785)
+ (xy 108.670253 117.737347) (xy 108.845707 117.952475) (xy 109.059604 118.129426) (xy 109.303798 118.261461) (xy 109.568987 118.343551)
+ (xy 109.84507 118.372568) (xy 110.121531 118.347408) (xy 110.38784 118.269029) (xy 110.633854 118.140417) (xy 110.850201 117.966469)
+ (xy 111.028641 117.753812) (xy 111.125412 117.577785) (xy 111.210253 117.737347) (xy 111.385707 117.952475) (xy 111.5441 118.083509)
+ (xy 111.5441 121.158) (xy 111.5441 122.709509) (xy 111.399799 122.825531) (xy 111.221359 123.038188) (xy 111.124587 123.214214)
+ (xy 111.039747 123.054653) (xy 110.864293 122.839525) (xy 110.7059 122.70849) (xy 110.7059 122.301) (xy 110.698233 122.22281)
+ (xy 110.69138 122.144476) (xy 110.690131 122.140179) (xy 110.689695 122.135726) (xy 110.66697 122.06046) (xy 110.645048 121.985003)
+ (xy 110.642989 121.981032) (xy 110.641696 121.976747) (xy 110.604781 121.90732) (xy 110.568625 121.837567) (xy 110.565834 121.834071)
+ (xy 110.563733 121.830119) (xy 110.51404 121.76919) (xy 110.465019 121.707782) (xy 110.458879 121.701556) (xy 110.458774 121.701427)
+ (xy 110.458653 121.701327) (xy 110.456677 121.699323) (xy 109.694677 120.937323) (xy 109.633943 120.887435) (xy 109.57373 120.836911)
+ (xy 109.569811 120.834756) (xy 109.566352 120.831915) (xy 109.497027 120.794743) (xy 109.428205 120.756908) (xy 109.423943 120.755556)
+ (xy 109.419997 120.75344) (xy 109.344791 120.730447) (xy 109.269912 120.706694) (xy 109.265466 120.706195) (xy 109.261187 120.704887)
+ (xy 109.182966 120.696941) (xy 109.10488 120.688183) (xy 109.096137 120.688121) (xy 109.095971 120.688105) (xy 109.095815 120.688119)
+ (xy 109.093 120.6881) (xy 104.59177 120.6881) (xy 104.59177 119.06655) (xy 104.547088 118.731792) (xy 104.437957 118.412183)
+ (xy 104.334628 118.218866) (xy 104.017042 118.158563) (xy 103.049605 119.126) (xy 104.017042 120.093437) (xy 104.334628 120.033134)
+ (xy 104.483459 119.729969) (xy 104.570285 119.403593) (xy 104.59177 119.06655) (xy 104.59177 120.6881) (xy 103.594774 120.6881)
+ (xy 103.777134 120.590628) (xy 103.837437 120.273042) (xy 102.87 119.305605) (xy 102.690395 119.48521) (xy 102.690395 119.126)
+ (xy 101.722958 118.158563) (xy 101.405372 118.218866) (xy 101.256541 118.522031) (xy 101.169715 118.848407) (xy 101.14823 119.18545)
+ (xy 101.192912 119.520208) (xy 101.302043 119.839817) (xy 101.405372 120.033134) (xy 101.722958 120.093437) (xy 102.690395 119.126)
+ (xy 102.690395 119.48521) (xy 101.902563 120.273042) (xy 101.962866 120.590628) (xy 102.266031 120.739459) (xy 102.592407 120.826285)
+ (xy 102.92945 120.84777) (xy 103.02894 120.83449) (xy 102.973212 120.879941) (xy 102.911782 120.928981) (xy 102.905556 120.93512)
+ (xy 102.905427 120.935226) (xy 102.905327 120.935346) (xy 102.903323 120.937323) (xy 101.755546 122.0851) (xy 96.996964 122.0851)
+ (xy 96.972835 122.048783) (xy 96.77979 121.854385) (xy 96.552662 121.701185) (xy 96.300103 121.595019) (xy 96.031733 121.539931)
+ (xy 95.899141 121.539005) (xy 95.899141 118.049746) (xy 94.615 116.765605) (xy 94.435395 116.94521) (xy 94.435395 116.586)
+ (xy 93.151254 115.301859) (xy 92.788242 115.415764) (xy 92.595041 115.794632) (xy 92.479466 116.203913) (xy 92.445958 116.627876)
+ (xy 92.495806 117.05023) (xy 92.627092 117.454744) (xy 92.788242 117.756236) (xy 93.151254 117.870141) (xy 94.435395 116.586)
+ (xy 94.435395 116.94521) (xy 93.330859 118.049746) (xy 93.444764 118.412758) (xy 93.823632 118.605959) (xy 94.232913 118.721534)
+ (xy 94.656876 118.755042) (xy 95.07923 118.705194) (xy 95.483744 118.573908) (xy 95.785236 118.412758) (xy 95.899141 118.049746)
+ (xy 95.899141 121.539005) (xy 95.757774 121.538018) (xy 95.488661 121.589354) (xy 95.234644 121.691984) (xy 95.005399 121.841997)
+ (xy 94.809658 122.033681) (xy 94.654877 122.259734) (xy 94.54695 122.511546) (xy 94.489989 122.779524) (xy 94.486164 123.053464)
+ (xy 94.53562 123.322928) (xy 94.636474 123.577655) (xy 94.784883 123.807942) (xy 94.975196 124.005016) (xy 95.200163 124.161372)
+ (xy 95.451215 124.271054) (xy 95.718789 124.329884) (xy 95.992695 124.335622) (xy 96.262499 124.288048) (xy 96.517923 124.188975)
+ (xy 96.74924 124.042177) (xy 96.947639 123.853245) (xy 96.994439 123.7869) (xy 100.180746 123.7869) (xy 99.446082 124.521563)
+ (xy 99.31979 124.394385) (xy 99.092662 124.241185) (xy 98.840103 124.135019) (xy 98.571733 124.079931) (xy 98.297774 124.078018)
+ (xy 98.028661 124.129354) (xy 97.774644 124.231984) (xy 97.545399 124.381997) (xy 97.349658 124.573681) (xy 97.194877 124.799734)
+ (xy 97.08695 125.051546) (xy 97.029989 125.319524) (xy 97.026164 125.593464) (xy 97.07562 125.862928) (xy 97.176474 126.117655)
+ (xy 97.324883 126.347942) (xy 97.515196 126.545016) (xy 97.740163 126.701372) (xy 97.991215 126.811054) (xy 98.258789 126.869884)
+ (xy 98.532695 126.875622) (xy 98.802499 126.828048) (xy 99.057923 126.728975) (xy 99.28924 126.582177) (xy 99.487639 126.393245)
+ (xy 99.534439 126.3269) (xy 99.695 126.3269) (xy 99.773239 126.319228) (xy 99.851524 126.312379) (xy 99.855815 126.311132)
+ (xy 99.860274 126.310695) (xy 99.93558 126.287958) (xy 100.010997 126.266048) (xy 100.014967 126.263989) (xy 100.019253 126.262696)
+ (xy 100.088658 126.225792) (xy 100.158434 126.189625) (xy 100.161931 126.186832) (xy 100.165881 126.184733) (xy 100.226787 126.135058)
+ (xy 100.288218 126.086019) (xy 100.294443 126.079879) (xy 100.294573 126.079774) (xy 100.294672 126.079653) (xy 100.296677 126.077677)
+ (xy 101.444454 124.9299) (xy 103.533546 124.9299) (xy 104.1781 125.574454) (xy 104.1781 126.086897) (xy 104.165785 126.057019)
+ (xy 104.007283 125.818455) (xy 103.805462 125.61522) (xy 103.56801 125.455057) (xy 103.303971 125.344065) (xy 103.023403 125.286472)
+ (xy 102.736991 125.284473) (xy 102.455645 125.338142) (xy 102.190082 125.445437) (xy 101.950417 125.602269) (xy 101.745778 125.802666)
+ (xy 101.583961 126.038994) (xy 101.471129 126.302252) (xy 101.411579 126.582412) (xy 101.40758 126.868803) (xy 101.42871 126.983935)
+ (xy 101.247546 127.1651) (xy 96.237454 127.1651) (xy 94.735209 125.662855) (xy 94.73769 125.651938) (xy 94.742059 125.339017)
+ (xy 94.688846 125.070269) (xy 94.584446 124.816975) (xy 94.432835 124.588783) (xy 94.23979 124.394385) (xy 94.012662 124.241185)
+ (xy 93.760103 124.135019) (xy 93.491733 124.079931) (xy 93.217774 124.078018) (xy 92.948661 124.129354) (xy 92.694644 124.231984)
+ (xy 92.465399 124.381997) (xy 92.269658 124.573681) (xy 92.114877 124.799734) (xy 92.00695 125.051546) (xy 91.949989 125.319524)
+ (xy 91.946164 125.593464) (xy 91.99562 125.862928) (xy 92.096474 126.117655) (xy 92.244883 126.347942) (xy 92.435196 126.545016)
+ (xy 92.660163 126.701372) (xy 92.911215 126.811054) (xy 93.178789 126.869884) (xy 93.452695 126.875622) (xy 93.527991 126.862345)
+ (xy 95.283323 128.617677) (xy 95.344056 128.667564) (xy 95.40427 128.718089) (xy 95.408188 128.720243) (xy 95.411648 128.723085)
+ (xy 95.480937 128.760237) (xy 95.549795 128.798092) (xy 95.55406 128.799445) (xy 95.558003 128.801559) (xy 95.633162 128.824538)
+ (xy 95.708088 128.848306) (xy 95.712533 128.848804) (xy 95.716813 128.850113) (xy 95.795033 128.858058) (xy 95.87312 128.866817)
+ (xy 95.881862 128.866878) (xy 95.882029 128.866895) (xy 95.882184 128.86688) (xy 95.885 128.8669) (xy 101.6 128.8669)
+ (xy 101.678239 128.859228) (xy 101.756524 128.852379) (xy 101.760815 128.851132) (xy 101.765274 128.850695) (xy 101.84058 128.827958)
+ (xy 101.915997 128.806048) (xy 101.919967 128.803989) (xy 101.924253 128.802696) (xy 101.993658 128.765792) (xy 102.063434 128.729625)
+ (xy 102.066931 128.726832) (xy 102.070881 128.724733) (xy 102.131787 128.675058) (xy 102.193218 128.626019) (xy 102.199443 128.619879)
+ (xy 102.199573 128.619774) (xy 102.199672 128.619653) (xy 102.201677 128.617677) (xy 102.630552 128.188801) (xy 102.696234 128.203243)
+ (xy 102.98259 128.209242) (xy 103.264658 128.159506) (xy 103.531693 128.055929) (xy 103.773524 127.902459) (xy 103.980941 127.704939)
+ (xy 104.146042 127.470893) (xy 104.189385 127.373542) (xy 104.192621 127.410524) (xy 104.193867 127.414815) (xy 104.194305 127.419274)
+ (xy 104.217041 127.49458) (xy 104.238952 127.569997) (xy 104.24101 127.573967) (xy 104.242304 127.578253) (xy 104.279207 127.647658)
+ (xy 104.315375 127.717434) (xy 104.318167 127.720931) (xy 104.320267 127.724881) (xy 104.369941 127.785787) (xy 104.418981 127.847218)
+ (xy 104.42512 127.853443) (xy 104.425226 127.853573) (xy 104.425346 127.853672) (xy 104.427323 127.855677) (xy 105.951323 129.379677)
+ (xy 106.012056 129.429564) (xy 106.07227 129.480089) (xy 106.076188 129.482243) (xy 106.079648 129.485085) (xy 106.148937 129.522237)
+ (xy 106.217795 129.560092) (xy 106.22206 129.561445) (xy 106.226003 129.563559) (xy 106.301162 129.586538) (xy 106.376088 129.610306)
+ (xy 106.380533 129.610804) (xy 106.384813 129.612113) (xy 106.462988 129.620053) (xy 106.54112 129.628817) (xy 106.549872 129.628878)
+ (xy 106.550029 129.628894) (xy 106.550174 129.62888) (xy 106.553 129.6289) (xy 115.189 129.6289) (xy 115.267239 129.621228)
+ (xy 115.345524 129.614379) (xy 115.349815 129.613132) (xy 115.354274 129.612695) (xy 115.42958 129.589958) (xy 115.504997 129.568048)
+ (xy 115.508967 129.565989) (xy 115.513253 129.564696) (xy 115.582658 129.527792) (xy 115.652434 129.491625) (xy 115.655931 129.488832)
+ (xy 115.659881 129.486733) (xy 115.720787 129.437058) (xy 115.782218 129.388019) (xy 115.788443 129.381879) (xy 115.788573 129.381774)
+ (xy 115.788672 129.381653) (xy 115.790677 129.379677) (xy 117.03167 128.138683) (xy 117.067912 128.410208) (xy 117.177043 128.729817)
+ (xy 117.280372 128.923134) (xy 117.597958 128.983437) (xy 118.565395 128.016) (xy 118.551252 128.001857) (xy 118.730857 127.822252)
+ (xy 118.745 127.836395) (xy 119.712437 126.868958) (xy 119.693912 126.7714) (xy 124.0155 126.7714) (xy 124.093739 126.763728)
+ (xy 124.172024 126.756879) (xy 124.176315 126.755632) (xy 124.180774 126.755195) (xy 124.25608 126.732458) (xy 124.331497 126.710548)
+ (xy 124.335467 126.708489) (xy 124.339753 126.707196) (xy 124.409158 126.670292) (xy 124.478934 126.634125) (xy 124.482431 126.631332)
+ (xy 124.486381 126.629233) (xy 124.547287 126.579558) (xy 124.608718 126.530519) (xy 124.614943 126.524379) (xy 124.615073 126.524274)
+ (xy 124.615172 126.524153) (xy 124.617177 126.522177) (xy 131.924453 119.2149) (xy 133.35 119.2149) (xy 133.357662 119.2149)
+ (xy 133.206961 119.434994) (xy 133.094129 119.698252) (xy 133.034579 119.978412) (xy 133.034045 120.0166) (xy 132.113323 120.937323)
+ (xy 132.063435 120.998056) (xy 132.012911 121.05827) (xy 132.010756 121.062188) (xy 132.007915 121.065648) (xy 131.970743 121.134972)
+ (xy 131.932908 121.203795) (xy 131.931556 121.208056) (xy 131.92944 121.212003) (xy 131.906447 121.287208) (xy 131.882694 121.362088)
+ (xy 131.882195 121.366533) (xy 131.880887 121.370813) (xy 131.872941 121.449033) (xy 131.864183 121.52712) (xy 131.864121 121.535862)
+ (xy 131.864105 121.536029) (xy 131.864119 121.536184) (xy 131.8641 121.539) (xy 131.8641 122.935584) (xy 131.841235 122.925973)
+ (xy 131.585063 122.873388) (xy 131.323557 122.871563) (xy 131.066676 122.920565) (xy 130.824206 123.01853) (xy 130.605381 123.161725)
+ (xy 130.418537 123.344695) (xy 130.411412 123.3551) (xy 130.175 123.3551) (xy 130.09681 123.362766) (xy 130.018476 123.36962)
+ (xy 130.014179 123.370868) (xy 130.009726 123.371305) (xy 129.934506 123.394015) (xy 129.859003 123.415951) (xy 129.855027 123.418011)
+ (xy 129.850747 123.419304) (xy 129.781356 123.456199) (xy 129.711567 123.492375) (xy 129.708071 123.495165) (xy 129.704119 123.497267)
+ (xy 129.64319 123.546959) (xy 129.581782 123.595981) (xy 129.575556 123.60212) (xy 129.575427 123.602226) (xy 129.575327 123.602346)
+ (xy 129.573323 123.604323) (xy 126.60367 126.573975) (xy 126.518403 126.556472) (xy 126.231991 126.554473) (xy 125.950645 126.608142)
+ (xy 125.685082 126.715437) (xy 125.445417 126.872269) (xy 125.240778 127.072666) (xy 125.078961 127.308994) (xy 124.966129 127.572252)
+ (xy 124.906579 127.852412) (xy 124.90258 128.138803) (xy 124.954284 128.420516) (xy 125.059722 128.686822) (xy 125.214877 128.927576)
+ (xy 125.413841 129.133608) (xy 125.649033 129.297072) (xy 125.911497 129.411739) (xy 126.191234 129.473243) (xy 126.47759 129.479242)
+ (xy 126.759658 129.429506) (xy 127.026693 129.325929) (xy 127.268524 129.172459) (xy 127.475941 128.974939) (xy 127.641042 128.740893)
+ (xy 127.757539 128.479236) (xy 127.820995 128.199935) (xy 127.825563 127.872791) (xy 127.806721 127.777632) (xy 130.469147 125.115206)
+ (xy 130.57655 125.226425) (xy 130.791291 125.375674) (xy 130.875582 125.4125) (xy 130.683958 125.4125) (xy 130.561277 125.436903)
+ (xy 130.445715 125.48477) (xy 130.341711 125.554263) (xy 130.253263 125.642711) (xy 130.18377 125.746715) (xy 130.135903 125.862277)
+ (xy 130.1115 125.984958) (xy 130.1115 126.110042) (xy 130.1115 127.507042) (xy 130.135903 127.629723) (xy 130.18377 127.745285)
+ (xy 130.253263 127.849289) (xy 130.341711 127.937737) (xy 130.445715 128.00723) (xy 130.561277 128.055097) (xy 130.683958 128.0795)
+ (xy 130.809042 128.0795) (xy 132.206042 128.0795) (xy 132.328723 128.055097) (xy 132.444285 128.00723) (xy 132.548289 127.937737)
+ (xy 132.636737 127.849289) (xy 132.70623 127.745285) (xy 132.754097 127.629723) (xy 132.7785 127.507042) (xy 132.7785 127.381958)
+ (xy 132.7785 126.615854) (xy 133.316677 126.077677) (xy 133.366564 126.016943) (xy 133.417089 125.95673) (xy 133.419243 125.952811)
+ (xy 133.422085 125.949352) (xy 133.459237 125.880062) (xy 133.497092 125.811205) (xy 133.498445 125.806939) (xy 133.500559 125.802997)
+ (xy 133.523538 125.727837) (xy 133.547306 125.652912) (xy 133.547804 125.648466) (xy 133.549113 125.644187) (xy 133.557058 125.565966)
+ (xy 133.565817 125.48788) (xy 133.565878 125.479137) (xy 133.565895 125.478971) (xy 133.56588 125.478815) (xy 133.565884 125.478164)
+ (xy 133.570932 125.48037) (xy 133.826344 125.536526) (xy 134.0878 125.542003) (xy 134.34534 125.496592) (xy 134.589154 125.402022)
+ (xy 134.809957 125.261897) (xy 134.999337 125.081552) (xy 135.016727 125.0569) (xy 137.795 125.0569) (xy 137.873239 125.049228)
+ (xy 137.951524 125.042379) (xy 137.955815 125.041132) (xy 137.960274 125.040695) (xy 138.03558 125.017958) (xy 138.110997 124.996048)
+ (xy 138.114967 124.993989) (xy 138.119253 124.992696) (xy 138.188658 124.955792) (xy 138.258434 124.919625) (xy 138.261931 124.916832)
+ (xy 138.265881 124.914733) (xy 138.326787 124.865058) (xy 138.388218 124.816019) (xy 138.394443 124.809879) (xy 138.394573 124.809774)
+ (xy 138.394672 124.809653) (xy 138.396677 124.807677) (xy 138.782454 124.4219) (xy 139.654374 124.4219) (xy 139.660903 124.454723)
+ (xy 139.70877 124.570285) (xy 139.778263 124.674289) (xy 139.866711 124.762737) (xy 139.970715 124.83223) (xy 140.086277 124.880097)
+ (xy 140.208958 124.9045) (xy 140.334042 124.9045) (xy 140.719146 124.9045) (xy 142.956614 127.141968) (xy 142.940579 127.217412)
+ (xy 142.93658 127.503803) (xy 142.988284 127.785516) (xy 143.093722 128.051822) (xy 143.248877 128.292576) (xy 143.417497 128.467186)
+ (xy 143.191526 128.454123) (xy 142.881815 128.497328) (xy 142.586484 128.600123) (xy 142.424098 128.686919) (xy 142.379156 128.991551)
+ (xy 143.256 129.868395) (xy 144.132844 128.991551) (xy 144.106371 128.812109) (xy 144.225234 128.838243) (xy 144.51159 128.844242)
+ (xy 144.793658 128.794506) (xy 144.956818 128.731219) (xy 145.010954 128.760246) (xy 145.079795 128.798092) (xy 145.084058 128.799444)
+ (xy 145.088004 128.80156) (xy 145.163181 128.824544) (xy 145.238088 128.848306) (xy 145.242535 128.848804) (xy 145.246814 128.850113)
+ (xy 145.325023 128.858057) (xy 145.40312 128.866817) (xy 145.411863 128.866878) (xy 145.41203 128.866895) (xy 145.412185 128.86688)
+ (xy 145.415 128.8669) (xy 149.225 128.8669) (xy 149.303239 128.859228) (xy 149.381524 128.852379) (xy 149.385815 128.851132)
+ (xy 149.390274 128.850695) (xy 149.46558 128.827958) (xy 149.540997 128.806048) (xy 149.544967 128.803989) (xy 149.549253 128.802696)
+ (xy 149.618658 128.765792) (xy 149.688434 128.729625) (xy 149.691931 128.726832) (xy 149.695881 128.724733) (xy 149.756787 128.675058)
+ (xy 149.818218 128.626019) (xy 149.824443 128.619879) (xy 149.824573 128.619774) (xy 149.824672 128.619653) (xy 149.826677 128.617677)
+ (xy 151.096677 127.347677) (xy 151.146564 127.286943) (xy 151.197089 127.22673) (xy 151.199243 127.222811) (xy 151.202085 127.219352)
+ (xy 151.239237 127.150062) (xy 151.277092 127.081205) (xy 151.278445 127.076939) (xy 151.280559 127.072997) (xy 151.303538 126.997837)
+ (xy 151.327306 126.922912) (xy 151.327804 126.918466) (xy 151.329113 126.914187) (xy 151.337058 126.835966) (xy 151.345817 126.75788)
+ (xy 151.345878 126.749137) (xy 151.345895 126.748971) (xy 151.34588 126.748815) (xy 151.3459 126.746) (xy 151.3459 126.507191)
+ (xy 151.509337 126.351552) (xy 151.660081 126.137858) (xy 151.766448 125.898955) (xy 151.824386 125.643941) (xy 151.828557 125.345244)
+ (xy 151.777762 125.088711) (xy 151.678107 124.846931) (xy 151.533388 124.629111) (xy 151.349118 124.443549) (xy 151.132314 124.297313)
+ (xy 151.066149 124.2695) (xy 151.256042 124.2695) (xy 151.378723 124.245097) (xy 151.494285 124.19723) (xy 151.598289 124.127737)
+ (xy 151.686737 124.039289) (xy 151.75623 123.935285) (xy 151.804097 123.819723) (xy 151.810625 123.7869) (xy 154.587546 123.7869)
+ (xy 154.767614 123.966968) (xy 154.751579 124.042412) (xy 154.74758 124.328803) (xy 154.799284 124.610516) (xy 154.904722 124.876822)
+ (xy 155.059877 125.117576) (xy 155.258841 125.323608) (xy 155.3591 125.39329) (xy 155.3591 126.111) (xy 155.366771 126.189239)
+ (xy 155.373621 126.267524) (xy 155.374867 126.271815) (xy 155.375305 126.276274) (xy 155.398041 126.35158) (xy 155.419952 126.426997)
+ (xy 155.42201 126.430967) (xy 155.423304 126.435253) (xy 155.460207 126.504658) (xy 155.496375 126.574434) (xy 155.499167 126.577931)
+ (xy 155.501267 126.581881) (xy 155.550941 126.642787) (xy 155.599981 126.704218) (xy 155.60612 126.710443) (xy 155.606226 126.710573)
+ (xy 155.606346 126.710672) (xy 155.608323 126.712677) (xy 156.243323 127.347677) (xy 156.304056 127.397564) (xy 156.36427 127.448089)
+ (xy 156.368188 127.450243) (xy 156.371648 127.453085) (xy 156.440954 127.490246) (xy 156.509795 127.528092) (xy 156.514058 127.529444)
+ (xy 156.518004 127.53156) (xy 156.593181 127.554544) (xy 156.668088 127.578306) (xy 156.672535 127.578804) (xy 156.676814 127.580113)
+ (xy 156.755023 127.588057) (xy 156.83312 127.596817) (xy 156.841863 127.596878) (xy 156.84203 127.596895) (xy 156.842185 127.59688)
+ (xy 156.845 127.5969) (xy 162.56 127.5969) (xy 162.638239 127.589228) (xy 162.716524 127.582379) (xy 162.720815 127.581132)
+ (xy 162.725274 127.580695) (xy 162.80058 127.557958) (xy 162.875997 127.536048) (xy 162.879967 127.533989) (xy 162.884253 127.532696)
+ (xy 162.953658 127.495792) (xy 163.023434 127.459625) (xy 163.026931 127.456832) (xy 163.030881 127.454733) (xy 163.091787 127.405058)
+ (xy 163.153218 127.356019) (xy 163.159443 127.349879) (xy 163.159573 127.349774) (xy 163.159672 127.349653) (xy 163.161677 127.347677)
+ (xy 163.796677 126.712677) (xy 163.82281 126.680861) (xy 163.851955 126.651778) (xy 163.859441 126.642553) (xy 165.657279 124.395255)
+ (xy 165.84759 124.399242) (xy 166.129658 124.349506) (xy 166.396693 124.245929) (xy 166.638524 124.092459) (xy 166.845941 123.894939)
+ (xy 167.011042 123.660893) (xy 167.127539 123.399236) (xy 167.190995 123.119935) (xy 167.195563 122.792791) (xy 167.195563 131.0894)
+ (xy 144.849877 131.0894) (xy 144.469658 131.0894) (xy 144.473333 131.085725) (xy 144.312451 130.924843) (xy 144.617081 130.879902)
+ (xy 144.753224 130.598384) (xy 144.831829 130.295714) (xy 144.849877 129.983526) (xy 144.806672 129.673815) (xy 144.703877 129.378484)
+ (xy 144.617081 129.216098) (xy 144.312449 129.171156) (xy 143.435605 130.048) (xy 143.449747 130.062142) (xy 143.270142 130.241747)
+ (xy 143.256 130.227605) (xy 143.241857 130.241747) (xy 143.076395 130.076285) (xy 143.062252 130.062142) (xy 143.076395 130.048)
+ (xy 142.199551 129.171156) (xy 141.894919 129.216098) (xy 141.758776 129.497616) (xy 141.680171 129.800286) (xy 141.662123 130.112474)
+ (xy 141.705328 130.422185) (xy 141.808123 130.717516) (xy 141.894919 130.879902) (xy 142.199548 130.924843) (xy 142.038667 131.085725)
+ (xy 142.042342 131.0894) (xy 139.01618 131.0894) (xy 139.190337 130.923552) (xy 139.341081 130.709858) (xy 139.447448 130.470955)
+ (xy 139.505386 130.215941) (xy 139.509557 129.917244) (xy 139.458762 129.660711) (xy 139.359107 129.418931) (xy 139.214388 129.201111)
+ (xy 139.030118 129.015549) (xy 138.813314 128.869313) (xy 138.572235 128.767973) (xy 138.316063 128.715388) (xy 138.054557 128.713563)
+ (xy 138.046461 128.715107) (xy 137.777945 128.446591) (xy 137.889941 128.339939) (xy 138.055042 128.105893) (xy 138.171539 127.844236)
+ (xy 138.234995 127.564935) (xy 138.239563 127.237791) (xy 138.183931 126.956826) (xy 138.074785 126.692019) (xy 137.916283 126.453455)
+ (xy 137.714462 126.25022) (xy 137.47701 126.090057) (xy 137.212971 125.979065) (xy 136.932403 125.921472) (xy 136.645991 125.919473)
+ (xy 136.364645 125.973142) (xy 136.099082 126.080437) (xy 135.859417 126.237269) (xy 135.654778 126.437666) (xy 135.492961 126.673994)
+ (xy 135.380129 126.937252) (xy 135.320579 127.217412) (xy 135.31658 127.503803) (xy 135.368284 127.785516) (xy 135.473722 128.051822)
+ (xy 135.628877 128.292576) (xy 135.827841 128.498608) (xy 135.9281 128.56829) (xy 135.9281 128.651) (xy 135.935771 128.729239)
+ (xy 135.942621 128.807524) (xy 135.943867 128.811815) (xy 135.944305 128.816274) (xy 135.967041 128.89158) (xy 135.988952 128.966997)
+ (xy 135.99101 128.970967) (xy 135.992304 128.975253) (xy 136.029207 129.044658) (xy 136.065375 129.114434) (xy 136.068167 129.117931)
+ (xy 136.070267 129.121881) (xy 136.119941 129.182787) (xy 136.168981 129.244218) (xy 136.17512 129.250443) (xy 136.175226 129.250573)
+ (xy 136.175346 129.250672) (xy 136.177323 129.252677) (xy 136.844108 129.919462) (xy 136.840747 130.160124) (xy 136.887955 130.417341)
+ (xy 136.984225 130.660489) (xy 137.125888 130.880308) (xy 137.30755 131.068425) (xy 137.337729 131.0894) (xy 120.46677 131.0894)
+ (xy 120.46677 127.95655) (xy 120.422088 127.621792) (xy 120.312957 127.302183) (xy 120.209628 127.108866) (xy 119.892042 127.048563)
+ (xy 118.924605 128.016) (xy 119.892042 128.983437) (xy 120.209628 128.923134) (xy 120.358459 128.619969) (xy 120.445285 128.293593)
+ (xy 120.46677 127.95655) (xy 120.46677 131.0894) (xy 119.712437 131.0894) (xy 119.712437 129.163042) (xy 118.745 128.195605)
+ (xy 117.777563 129.163042) (xy 117.837866 129.480628) (xy 118.141031 129.629459) (xy 118.467407 129.716285) (xy 118.80445 129.73777)
+ (xy 119.139208 129.693088) (xy 119.458817 129.583957) (xy 119.652134 129.480628) (xy 119.712437 129.163042) (xy 119.712437 131.0894)
+ (xy 89.0016 131.0894) (xy 89.0016 53.213) (xy 187.198 53.213) (xy 187.198 131.0894)
+ )
+ )
+ )
+)
diff --git a/demos/complex_hierarchy/complex_hierarchy.net b/demos/complex_hierarchy/complex_hierarchy.net
new file mode 100644
index 0000000..b1278ad
--- /dev/null
+++ b/demos/complex_hierarchy/complex_hierarchy.net
@@ -0,0 +1,805 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/complex_hierarchy/complex_hierarchy.sch)
+ (date "01/07/2015 12:05:52")
+ (tool "Eeschema (2015-06-24 BZR 5819)-product")
+ (sheet (number 1) (name /) (tstamps /)
+ (title_block
+ (title)
+ (company)
+ (rev)
+ (date "21 mar 2015")
+ (source complex_hierarchy.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value ""))))
+ (sheet (number 2) (name /ampli_ht_horizontal/) (tstamps /4B3A13A4/)
+ (title_block
+ (title)
+ (company)
+ (rev)
+ (date "21 mar 2015")
+ (source ampli_ht.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value ""))))
+ (sheet (number 3) (name /ampli_ht_vertical/) (tstamps /4B3A1333/)
+ (title_block
+ (title)
+ (company)
+ (rev)
+ (date "21 mar 2015")
+ (source ampli_ht.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value "")))))
+ (components
+ (comp (ref C10)
+ (value 10uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B4B15E7))
+ (comp (ref C11)
+ (value 10uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B4B15D9))
+ (comp (ref U2)
+ (value 78L05)
+ (footprint discret:LM78LXX)
+ (libsource (lib complex_hierarchy-cache) (part 7805))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B4B1532))
+ (comp (ref U1)
+ (value ICL7660)
+ (footprint dip_sockets:DIP-8__300_ELL)
+ (libsource (lib complex_hierarchy-cache) (part ICL7660))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B4B1230))
+ (comp (ref C9)
+ (value 47uF/63V)
+ (footprint discret:CP8)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B3A1558))
+ (comp (ref P1)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib complex_hierarchy-cache) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B3A12F4))
+ (comp (ref C1)
+ (value 47uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4B03CEC2))
+ (comp (ref C2)
+ (value 47uF/20V)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4AE173CF))
+ (comp (ref D1)
+ (value 1N4007)
+ (footprint discret:D5)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4AE172F4))
+ (comp (ref P2)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib complex_hierarchy-cache) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4AD71B06))
+ (comp (ref R28)
+ (value 220K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B617B88))
+ (comp (ref R27)
+ (value 47)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B616B96))
+ (comp (ref D9)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B616AFA))
+ (comp (ref R20)
+ (value 5,6K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B61688C))
+ (comp (ref C14)
+ (value 150nF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B4F3641))
+ (comp (ref R24)
+ (value 1K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B4F363E))
+ (comp (ref Q6)
+ (value MPAS42)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA42))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A137D))
+ (comp (ref Q7)
+ (value MPAS92)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA92))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A137C))
+ (comp (ref D7)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A137B))
+ (comp (ref Q8)
+ (value MPAS42)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA42))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1379))
+ (comp (ref D6)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1377))
+ (comp (ref R13)
+ (value 470)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1376))
+ (comp (ref D5)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1375))
+ (comp (ref R14)
+ (value 220K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1374))
+ (comp (ref R18)
+ (value 1K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1371))
+ (comp (ref R22)
+ (value 220K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1370))
+ (comp (ref R19)
+ (value 1K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A136D))
+ (comp (ref P5)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib complex_hierarchy-cache) (part CONN_2))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A136C))
+ (comp (ref R16)
+ (value 22K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A136B))
+ (comp (ref U4)
+ (value LM358N)
+ (footprint dip_sockets:DIP-8__300_ELL)
+ (libsource (lib complex_hierarchy-cache) (part LM358N))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1368))
+ (comp (ref P6)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib complex_hierarchy-cache) (part CONN_2))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1367))
+ (comp (ref C7)
+ (value 4.7nF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1366))
+ (comp (ref C8)
+ (value 820pF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1365))
+ (comp (ref R15)
+ (value 47)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1364))
+ (comp (ref R21)
+ (value 4,7K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1362))
+ (comp (ref Q5)
+ (value MPAS92)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA92))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1360))
+ (comp (ref R17)
+ (value 22K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1359))
+ (comp (ref C6)
+ (value 15nF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1358))
+ (comp (ref RV2)
+ (value 4,7K)
+ (footprint discret:RV2)
+ (libsource (lib device) (part POT))
+ (sheetpath (names /ampli_ht_horizontal/) (tstamps /4B3A13A4/))
+ (tstamp 4B3A1357))
+ (comp (ref R26)
+ (value 220K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B617B88))
+ (comp (ref R25)
+ (value 47)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B616B96))
+ (comp (ref D8)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B616AFA))
+ (comp (ref R10)
+ (value 5,6K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B61688C))
+ (comp (ref C12)
+ (value 150nF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B4F3641))
+ (comp (ref R23)
+ (value 1K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B4F363E))
+ (comp (ref Q2)
+ (value MPAS42)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA42))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A137D))
+ (comp (ref Q3)
+ (value MPAS92)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA92))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A137C))
+ (comp (ref D4)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A137B))
+ (comp (ref Q4)
+ (value MPAS42)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA42))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1379))
+ (comp (ref D3)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1377))
+ (comp (ref R3)
+ (value 470)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1376))
+ (comp (ref D2)
+ (value 1N4148)
+ (footprint discret:D3)
+ (libsource (lib device) (part D_Small))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1375))
+ (comp (ref R4)
+ (value 220K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1374))
+ (comp (ref R8)
+ (value 1K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1371))
+ (comp (ref R12)
+ (value 220K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1370))
+ (comp (ref R9)
+ (value 1K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A136D))
+ (comp (ref P3)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib complex_hierarchy-cache) (part CONN_2))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A136C))
+ (comp (ref R6)
+ (value 22K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A136B))
+ (comp (ref U3)
+ (value LM358N)
+ (footprint dip_sockets:DIP-8__300_ELL)
+ (libsource (lib complex_hierarchy-cache) (part LM358N))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1368))
+ (comp (ref P4)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib complex_hierarchy-cache) (part CONN_2))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1367))
+ (comp (ref C4)
+ (value 4.7nF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1366))
+ (comp (ref C5)
+ (value 820pF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1365))
+ (comp (ref R5)
+ (value 47)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1364))
+ (comp (ref R11)
+ (value 4,7K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1362))
+ (comp (ref Q1)
+ (value MPAS92)
+ (footprint discret:TO92-CBE)
+ (libsource (lib complex_hierarchy-cache) (part MPSA92))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1360))
+ (comp (ref R7)
+ (value 22K)
+ (footprint discret:R3-LARGE_PADS)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1359))
+ (comp (ref C3)
+ (value 15nF)
+ (footprint discret:C2)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1358))
+ (comp (ref RV1)
+ (value 4,7K)
+ (footprint discret:RV2)
+ (libsource (lib device) (part POT))
+ (sheetpath (names /ampli_ht_vertical/) (tstamps /4B3A1333/))
+ (tstamp 4B3A1357)))
+ (libparts
+ (libpart (lib device) (part POT)
+ (description Potentionmetre)
+ (fields
+ (field (name Reference) RV)
+ (field (name Value) POT))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))))
+ (libpart (lib device) (part D_Small)
+ (description Diode)
+ (footprints
+ (fp Diode_*)
+ (fp D-Pak_TO252AA)
+ (fp *SingleDiode)
+ (fp *SingleDiode*)
+ (fp *_Diode_*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) D_Small))
+ (pins
+ (pin (num 1) (name K) (type passive))
+ (pin (num 2) (name A) (type passive))))
+ (libpart (lib device) (part CP)
+ (description "Polarised capacitor")
+ (footprints
+ (fp CP*)
+ (fp Elko*)
+ (fp TantalC*)
+ (fp C*elec)
+ (fp c_elec*)
+ (fp SMD*_Pol))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part C)
+ (description "Unpolarized capacitor")
+ (footprints
+ (fp C?)
+ (fp C_????_*)
+ (fp C_????)
+ (fp SMD*_c)
+ (fp Capacitor*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib complex_hierarchy-cache) (part 7805)
+ (aliases
+ (alias LM7805)
+ (alias LM7812)
+ (alias 78L05))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 7805))
+ (pins
+ (pin (num GND) (name GND) (type input))
+ (pin (num VI) (name VI) (type input))
+ (pin (num VO) (name VO) (type power_out))))
+ (libpart (lib complex_hierarchy-cache) (part CONN_2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib complex_hierarchy-cache) (part ICL7660)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) ICL7660))
+ (pins
+ (pin (num 2) (name CAP+) (type input))
+ (pin (num 3) (name GND) (type power_in))
+ (pin (num 4) (name CAP-) (type input))
+ (pin (num 5) (name VOUT) (type power_out))
+ (pin (num 6) (name LV) (type input))
+ (pin (num 7) (name OSC) (type input))
+ (pin (num 8) (name V+) (type power_in))))
+ (libpart (lib complex_hierarchy-cache) (part LM358)
+ (aliases
+ (alias LMC6062)
+ (alias LMC6082)
+ (alias LM358N)
+ (alias TL072)
+ (alias TL082))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) LM358))
+ (pins
+ (pin (num 1) (name ~) (type output))
+ (pin (num 2) (name -) (type input))
+ (pin (num 3) (name +) (type input))
+ (pin (num 4) (name V-) (type power_in))
+ (pin (num 5) (name +) (type input))
+ (pin (num 6) (name -) (type input))
+ (pin (num 7) (name ~) (type output))
+ (pin (num 8) (name V+) (type power_in))))
+ (libpart (lib complex_hierarchy-cache) (part MPSA42)
+ (footprints
+ (fp TO92-CBE))
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) MPSA42)
+ (field (name Footprint) TO92-CBE))
+ (pins
+ (pin (num B) (name B) (type input))
+ (pin (num C) (name C) (type passive))
+ (pin (num E) (name E) (type passive))))
+ (libpart (lib complex_hierarchy-cache) (part MPSA92)
+ (footprints
+ (fp TO92-CBE))
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) MPSA92)
+ (field (name Footprint) TO92-CBE))
+ (pins
+ (pin (num B) (name B) (type input))
+ (pin (num C) (name C) (type passive))
+ (pin (num E) (name E) (type passive))))
+ (libpart (lib device) (part R)
+ (description Resistor)
+ (footprints
+ (fp R_*)
+ (fp Resistor_*))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive)))))
+ (libraries
+ (library (logical device)
+ (uri f:\kicad\share\kicad\library\device.lib))
+ (library (logical complex_hierarchy-cache)
+ (uri F:\kicad-launchpad\testing\demos\complex_hierarchy\complex_hierarchy-cache.lib)))
+ (nets
+ (net (code 1) (name GND)
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C14) (pin 2))
+ (node (ref R11) (pin 2))
+ (node (ref Q3) (pin C))
+ (node (ref R4) (pin 2))
+ (node (ref U2) (pin GND))
+ (node (ref C11) (pin 1))
+ (node (ref P4) (pin 2))
+ (node (ref P6) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref C8) (pin 2))
+ (node (ref P1) (pin 2))
+ (node (ref R8) (pin 2))
+ (node (ref C12) (pin 2))
+ (node (ref P5) (pin 2))
+ (node (ref P3) (pin 2))
+ (node (ref Q7) (pin C))
+ (node (ref R18) (pin 2))
+ (node (ref R21) (pin 2))
+ (node (ref C2) (pin 2))
+ (node (ref C1) (pin 2))
+ (node (ref R14) (pin 2))
+ (node (ref P2) (pin 2))
+ (node (ref C9) (pin 2))
+ (node (ref U1) (pin 3)))
+ (net (code 2) (name "Net-(U1-Pad7)")
+ (node (ref U1) (pin 7)))
+ (net (code 3) (name "Net-(U1-Pad6)")
+ (node (ref U1) (pin 6)))
+ (net (code 4) (name "Net-(C10-Pad2)")
+ (node (ref C10) (pin 2))
+ (node (ref U1) (pin 4)))
+ (net (code 5) (name HT)
+ (node (ref R13) (pin 1))
+ (node (ref C9) (pin 1))
+ (node (ref Q6) (pin C))
+ (node (ref D5) (pin 2))
+ (node (ref P1) (pin 1))
+ (node (ref R3) (pin 1))
+ (node (ref Q2) (pin C))
+ (node (ref D2) (pin 2)))
+ (net (code 6) (name /12Vext)
+ (node (ref D1) (pin 2))
+ (node (ref P2) (pin 1)))
+ (net (code 7) (name +12V)
+ (node (ref U4) (pin 8))
+ (node (ref U2) (pin VI))
+ (node (ref U3) (pin 8))
+ (node (ref C2) (pin 1))
+ (node (ref D1) (pin 1)))
+ (net (code 8) (name VCC)
+ (node (ref U2) (pin VO))
+ (node (ref U1) (pin 8))
+ (node (ref C1) (pin 1)))
+ (net (code 9) (name "Net-(C10-Pad1)")
+ (node (ref C10) (pin 1))
+ (node (ref U1) (pin 2)))
+ (net (code 10) (name -VAA)
+ (node (ref U3) (pin 4))
+ (node (ref C11) (pin 2))
+ (node (ref U4) (pin 4))
+ (node (ref U1) (pin 5)))
+ (net (code 11) (name "Net-(C5-Pad1)")
+ (node (ref R10) (pin 2))
+ (node (ref C5) (pin 1)))
+ (net (code 12) (name "Net-(Q4-PadE)")
+ (node (ref Q4) (pin E))
+ (node (ref R9) (pin 1)))
+ (net (code 13) (name "Net-(Q4-PadB)")
+ (node (ref R8) (pin 1))
+ (node (ref Q4) (pin B)))
+ (net (code 14) (name "Net-(D4-Pad2)")
+ (node (ref D4) (pin 2))
+ (node (ref D8) (pin 1)))
+ (net (code 15) (name "Net-(Q3-PadE)")
+ (node (ref Q3) (pin E))
+ (node (ref R12) (pin 2))
+ (node (ref R25) (pin 2)))
+ (net (code 16) (name "Net-(Q2-PadE)")
+ (node (ref R26) (pin 2))
+ (node (ref R5) (pin 2))
+ (node (ref Q2) (pin E)))
+ (net (code 17) (name /ampli_ht_vertical/PIEZO_IN)
+ (node (ref P4) (pin 1))
+ (node (ref R23) (pin 2)))
+ (net (code 18) (name "Net-(Q1-PadE)")
+ (node (ref R3) (pin 2))
+ (node (ref Q1) (pin E)))
+ (net (code 19) (name "Net-(D3-Pad1)")
+ (node (ref D3) (pin 1))
+ (node (ref R4) (pin 1))
+ (node (ref Q1) (pin B)))
+ (net (code 20) (name "Net-(R11-Pad1)")
+ (node (ref R11) (pin 1))
+ (node (ref RV1) (pin 1)))
+ (net (code 21) (name "Net-(D8-Pad2)")
+ (node (ref D8) (pin 2))
+ (node (ref Q1) (pin C))
+ (node (ref Q2) (pin B)))
+ (net (code 22) (name "Net-(R9-Pad2)")
+ (node (ref U3) (pin 1))
+ (node (ref R9) (pin 2)))
+ (net (code 23) (name "Net-(RV1-Pad2)")
+ (node (ref U3) (pin 2))
+ (node (ref RV1) (pin 2)))
+ (net (code 24) (name /ampli_ht_vertical/PIEZO_OUT)
+ (node (ref R25) (pin 1))
+ (node (ref R5) (pin 1))
+ (node (ref P3) (pin 1)))
+ (net (code 25) (name /ampli_ht_vertical/Vpil_0_3,3V)
+ (node (ref U3) (pin 3))
+ (node (ref U3) (pin 6))
+ (node (ref U3) (pin 7))
+ (node (ref C3) (pin 1)))
+ (net (code 26) (name "Net-(C12-Pad1)")
+ (node (ref C12) (pin 1))
+ (node (ref R23) (pin 1))
+ (node (ref R6) (pin 2)))
+ (net (code 27) (name "Net-(C3-Pad2)")
+ (node (ref R6) (pin 1))
+ (node (ref C3) (pin 2))
+ (node (ref R7) (pin 2)))
+ (net (code 28) (name "Net-(D2-Pad1)")
+ (node (ref D2) (pin 1))
+ (node (ref D3) (pin 2)))
+ (net (code 29) (name "Net-(D4-Pad1)")
+ (node (ref Q3) (pin B))
+ (node (ref D4) (pin 1))
+ (node (ref Q4) (pin C))
+ (node (ref R10) (pin 1)))
+ (net (code 30) (name "Net-(C4-Pad1)")
+ (node (ref C4) (pin 1))
+ (node (ref R7) (pin 1))
+ (node (ref U3) (pin 5)))
+ (net (code 31) (name /ampli_ht_vertical/S_OUT+)
+ (node (ref R12) (pin 1))
+ (node (ref RV1) (pin 3))
+ (node (ref R26) (pin 1)))
+ (net (code 32) (name "Net-(C8-Pad1)")
+ (node (ref C8) (pin 1))
+ (node (ref R20) (pin 2)))
+ (net (code 33) (name "Net-(Q8-PadE)")
+ (node (ref Q8) (pin E))
+ (node (ref R19) (pin 1)))
+ (net (code 34) (name "Net-(Q8-PadB)")
+ (node (ref Q8) (pin B))
+ (node (ref R18) (pin 1)))
+ (net (code 35) (name "Net-(D7-Pad2)")
+ (node (ref D7) (pin 2))
+ (node (ref D9) (pin 1)))
+ (net (code 36) (name "Net-(Q7-PadE)")
+ (node (ref Q7) (pin E))
+ (node (ref R27) (pin 2))
+ (node (ref R22) (pin 2)))
+ (net (code 37) (name "Net-(Q6-PadE)")
+ (node (ref R15) (pin 2))
+ (node (ref Q6) (pin E))
+ (node (ref R28) (pin 2)))
+ (net (code 38) (name /ampli_ht_horizontal/PIEZO_IN)
+ (node (ref P6) (pin 1))
+ (node (ref R24) (pin 2)))
+ (net (code 39) (name "Net-(Q5-PadE)")
+ (node (ref Q5) (pin E))
+ (node (ref R13) (pin 2)))
+ (net (code 40) (name "Net-(D6-Pad1)")
+ (node (ref D6) (pin 1))
+ (node (ref Q5) (pin B))
+ (node (ref R14) (pin 1)))
+ (net (code 41) (name "Net-(R21-Pad1)")
+ (node (ref RV2) (pin 1))
+ (node (ref R21) (pin 1)))
+ (net (code 42) (name "Net-(D9-Pad2)")
+ (node (ref Q5) (pin C))
+ (node (ref Q6) (pin B))
+ (node (ref D9) (pin 2)))
+ (net (code 43) (name "Net-(R19-Pad2)")
+ (node (ref R19) (pin 2))
+ (node (ref U4) (pin 1)))
+ (net (code 44) (name "Net-(RV2-Pad2)")
+ (node (ref U4) (pin 2))
+ (node (ref RV2) (pin 2)))
+ (net (code 45) (name /ampli_ht_horizontal/PIEZO_OUT)
+ (node (ref R27) (pin 1))
+ (node (ref P5) (pin 1))
+ (node (ref R15) (pin 1)))
+ (net (code 46) (name /ampli_ht_horizontal/Vpil_0_3,3V)
+ (node (ref C6) (pin 1))
+ (node (ref U4) (pin 3))
+ (node (ref U4) (pin 7))
+ (node (ref U4) (pin 6)))
+ (net (code 47) (name "Net-(C14-Pad1)")
+ (node (ref R24) (pin 1))
+ (node (ref R16) (pin 2))
+ (node (ref C14) (pin 1)))
+ (net (code 48) (name "Net-(C6-Pad2)")
+ (node (ref C6) (pin 2))
+ (node (ref R17) (pin 2))
+ (node (ref R16) (pin 1)))
+ (net (code 49) (name "Net-(D7-Pad1)")
+ (node (ref Q7) (pin B))
+ (node (ref D7) (pin 1))
+ (node (ref Q8) (pin C))
+ (node (ref R20) (pin 1)))
+ (net (code 50) (name "Net-(C7-Pad1)")
+ (node (ref C7) (pin 1))
+ (node (ref U4) (pin 5))
+ (node (ref R17) (pin 1)))
+ (net (code 51) (name /ampli_ht_horizontal/S_OUT+)
+ (node (ref R28) (pin 1))
+ (node (ref R22) (pin 1))
+ (node (ref RV2) (pin 3)))
+ (net (code 52) (name "Net-(D5-Pad1)")
+ (node (ref D5) (pin 1))
+ (node (ref D6) (pin 2))))) \ No newline at end of file
diff --git a/demos/complex_hierarchy/complex_hierarchy.pro b/demos/complex_hierarchy/complex_hierarchy.pro
new file mode 100644
index 0000000..93a05b4
--- /dev/null
+++ b/demos/complex_hierarchy/complex_hierarchy.pro
@@ -0,0 +1,38 @@
+update=01/07/2015 12:40:16
+version=1
+last_client=kicad
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=
+UseCmpFile=1
+PadDrill=0.8128
+PadDrillOvalY=0.8128
+PadSizeH=2.286
+PadSizeV=2.286
+PcbTextSizeV=2
+PcbTextSizeH=2
+PcbTextThickness=0.3
+ModuleTextSizeV=1
+ModuleTextSizeH=1
+ModuleTextSizeThickness=0.2
+SolderMaskClearance=0.254
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.3
+BoardOutlineThickness=0.09999999999999999
+ModuleOutlineThickness=0.2
+[pcbnew/libraries]
+LibDir=
+[general]
+version=1
+[eeschema]
+version=1
+LibDir=F:/kicad/share/library
+[eeschema/libraries]
+LibName1=power
+LibName2=complex_hierarchy_schlib
diff --git a/demos/complex_hierarchy/complex_hierarchy.sch b/demos/complex_hierarchy/complex_hierarchy.sch
new file mode 100644
index 0000000..acc9c58
--- /dev/null
+++ b/demos/complex_hierarchy/complex_hierarchy.sch
@@ -0,0 +1,427 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:complex_hierarchy_schlib
+LIBS:complex_hierarchy-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 3
+Title ""
+Date "21 mar 2015"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+NoConn ~ 8800 3050
+Connection ~ 9200 2750
+Wire Wire Line
+ 9200 2650 9200 2750
+Wire Wire Line
+ 6650 2900 6650 3000
+Wire Wire Line
+ 6650 3000 7050 3000
+Wire Wire Line
+ 7050 3000 7050 2850
+Wire Wire Line
+ 7050 2850 7100 2850
+Wire Wire Line
+ 9200 2350 9200 2250
+Connection ~ 2500 1300
+Wire Wire Line
+ 8300 1300 9200 1300
+Wire Wire Line
+ 2800 2500 3800 2500
+Wire Wire Line
+ 2500 1250 2500 1350
+Wire Wire Line
+ 3800 2500 3800 2450
+Wire Wire Line
+ 2100 2800 2100 2700
+Wire Wire Line
+ 2100 2700 2000 2700
+Wire Wire Line
+ 2000 2500 2600 2500
+Wire Wire Line
+ 3200 2900 3200 3000
+Wire Wire Line
+ 3200 2500 3200 2600
+Connection ~ 3200 2500
+Wire Wire Line
+ 3550 2450 3550 2500
+Connection ~ 3550 2500
+Wire Wire Line
+ 3000 2500 3000 2450
+Connection ~ 3000 2500
+Wire Wire Line
+ 7400 1250 7400 1300
+Wire Wire Line
+ 7400 1300 7500 1300
+Wire Wire Line
+ 9200 1750 9200 1800
+Wire Wire Line
+ 9200 1250 9200 1450
+Connection ~ 9200 1300
+Wire Wire Line
+ 2200 1650 2200 1750
+Wire Wire Line
+ 2500 1650 2500 1700
+Wire Wire Line
+ 6650 2600 6650 2500
+Wire Wire Line
+ 6650 2500 7050 2500
+Wire Wire Line
+ 7050 2500 7050 2650
+Wire Wire Line
+ 7050 2650 7100 2650
+Wire Wire Line
+ 8800 2750 9350 2750
+$Comp
+L CP C10
+U 1 1 4B4B15E7
+P 6650 2750
+F 0 "C10" H 6800 2800 50 0000 L CNN
+F 1 "10uF" H 6800 2750 50 0000 L TNN
+F 2 "Discret:CP6" H 6650 2750 60 0001 C CNN
+F 3 "" H 6650 2750 60 0001 C CNN
+ 1 6650 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR01
+U 1 1 4B4B15DA
+P 9050 2300
+F 0 "#PWR01" H 9050 2300 30 0001 C CNN
+F 1 "GND" H 9050 2230 30 0001 C CNN
+F 2 "" H 9050 2300 60 0001 C CNN
+F 3 "" H 9050 2300 60 0001 C CNN
+ 1 9050 2300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C11
+U 1 1 4B4B15D9
+P 9200 2500
+F 0 "C11" H 9350 2550 50 0000 L CNN
+F 1 "10uF" H 9350 2500 50 0000 L TNN
+F 2 "Discret:CP6" H 9200 2500 60 0001 C CNN
+F 3 "" H 9200 2500 60 0001 C CNN
+ 1 9200 2500
+ 1 0 0 -1
+$EndComp
+NoConn ~ 7100 3050
+$Comp
+L -VAA #PWR02
+U 1 1 4B4B1578
+P 9350 2750
+F 0 "#PWR02" H 9350 2850 20 0001 C CNN
+F 1 "-VAA" V 9350 2950 40 0000 C CNN
+F 2 "" H 9350 2750 60 0001 C CNN
+F 3 "" H 9350 2750 60 0001 C CNN
+ 1 9350 2750
+ 0 1 1 0
+$EndComp
+$Comp
+L 7805 U2
+U 1 1 4B4B1532
+P 7900 1350
+F 0 "U2" H 7900 1650 60 0000 C CNN
+F 1 "78L05" H 7900 1550 60 0000 C CNN
+F 2 "Discret:LM78LXX" H 7900 1350 60 0001 C CNN
+F 3 "" H 7900 1350 60 0001 C CNN
+ 1 7900 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR03
+U 1 1 4B4B1253
+P 7900 2200
+F 0 "#PWR03" H 7900 2300 30 0001 C CNN
+F 1 "VCC" H 7900 2300 40 0000 C CNN
+F 2 "" H 7900 2200 60 0001 C CNN
+F 3 "" H 7900 2200 60 0001 C CNN
+ 1 7900 2200
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR04
+U 1 1 4B4B124E
+P 9200 1250
+F 0 "#PWR04" H 9200 1350 30 0001 C CNN
+F 1 "VCC" H 9200 1350 40 0000 C CNN
+F 2 "" H 9200 1250 60 0001 C CNN
+F 3 "" H 9200 1250 60 0001 C CNN
+ 1 9200 1250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR05
+U 1 1 4B4B1237
+P 7900 3600
+F 0 "#PWR05" H 7900 3600 30 0001 C CNN
+F 1 "GND" H 7900 3530 30 0001 C CNN
+F 2 "" H 7900 3600 60 0001 C CNN
+F 3 "" H 7900 3600 60 0001 C CNN
+ 1 7900 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L ICL7660 U1
+U 1 1 4B4B1230
+P 7950 2900
+F 0 "U1" H 7400 3300 70 0000 L CNN
+F 1 "ICL7660" H 8500 2450 70 0000 R CNN
+F 2 "dip_sockets:DIP-8__300_ELL" H 7950 2900 60 0001 C CNN
+F 3 "" H 7950 2900 60 0001 C CNN
+ 1 7950 2900
+ 1 0 0 -1
+$EndComp
+Text Label 2150 2500 0 60 ~ 0
+12Vext
+$Comp
+L CP C9
+U 1 1 4B3A1558
+P 2500 1500
+F 0 "C9" H 2650 1550 50 0000 L CNN
+F 1 "47uF/63V" H 2650 1500 50 0000 L TNN
+F 2 "Discret:CP8" H 2500 1500 60 0001 C CNN
+F 3 "" H 2500 1500 60 0001 C CNN
+ 1 2500 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR06
+U 1 1 4B3A1557
+P 2500 1700
+F 0 "#PWR06" H 2500 1700 30 0001 C CNN
+F 1 "GND" H 2500 1630 30 0001 C CNN
+F 2 "" H 2500 1700 60 0001 C CNN
+F 3 "" H 2500 1700 60 0001 C CNN
+ 1 2500 1700
+ 1 0 0 -1
+$EndComp
+$Sheet
+S 6100 4400 2000 1450
+U 4B3A13A4
+F0 "ampli_ht_horizontal" 60
+F1 "ampli_ht.sch" 60
+$EndSheet
+$Sheet
+S 2800 4400 2000 1450
+U 4B3A1333
+F0 "ampli_ht_vertical" 60
+F1 "ampli_ht.sch" 60
+$EndSheet
+$Comp
+L GND #PWR07
+U 1 1 4B3A1302
+P 2200 1750
+F 0 "#PWR07" H 2200 1750 30 0001 C CNN
+F 1 "GND" H 2200 1680 30 0001 C CNN
+F 2 "" H 2200 1750 60 0001 C CNN
+F 3 "" H 2200 1750 60 0001 C CNN
+ 1 2200 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P1
+U 1 1 4B3A12F4
+P 1650 1400
+F 0 "P1" V 1600 1400 40 0000 C CNN
+F 1 "CONN_2" V 1700 1400 40 0000 C CNN
+F 2 "Connect:bornier2" H 1650 1400 60 0001 C CNN
+F 3 "" H 1650 1400 60 0001 C CNN
+ 1 1650 1400
+ -1 0 0 -1
+$EndComp
+$Comp
+L HT #PWR08
+U 1 1 4B0FA68B
+P 2500 1250
+F 0 "#PWR08" H 2500 1370 20 0001 C CNN
+F 1 "HT" H 2500 1340 30 0000 C CNN
+F 2 "" H 2500 1250 60 0001 C CNN
+F 3 "" H 2500 1250 60 0001 C CNN
+ 1 2500 1250
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C1
+U 1 1 4B03CEC2
+P 9200 1600
+F 0 "C1" H 9350 1650 50 0000 L CNN
+F 1 "47uF" H 9350 1600 50 0000 L TNN
+F 2 "Discret:CP6" H 9200 1600 60 0001 C CNN
+F 3 "" H 9200 1600 60 0001 C CNN
+ 1 9200 1600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR09
+U 1 1 4B03CEC1
+P 9200 1800
+F 0 "#PWR09" H 9200 1800 30 0001 C CNN
+F 1 "GND" H 9200 1730 30 0001 C CNN
+F 2 "" H 9200 1800 60 0001 C CNN
+F 3 "" H 9200 1800 60 0001 C CNN
+ 1 9200 1800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR010
+U 1 1 4B03CE88
+P 7900 1650
+F 0 "#PWR010" H 7900 1650 30 0001 C CNN
+F 1 "GND" H 7900 1580 30 0001 C CNN
+F 2 "" H 7900 1650 60 0001 C CNN
+F 3 "" H 7900 1650 60 0001 C CNN
+ 1 7900 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12C #PWR011
+U 1 1 4B03CE6C
+P 7400 1250
+F 0 "#PWR011" H 7400 1220 30 0001 C CNN
+F 1 "+12C" H 7400 1360 40 0000 C CNN
+F 2 "" H 7400 1250 60 0001 C CNN
+F 3 "" H 7400 1250 60 0001 C CNN
+ 1 7400 1250
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #U012
+U 1 1 4B03CAA3
+P 2200 1250
+F 0 "#U012" H 2200 1520 30 0001 C CNN
+F 1 "PWR_FLAG" H 2200 1480 30 0000 C CNN
+F 2 "" H 2200 1250 60 0001 C CNN
+F 3 "" H 2200 1250 60 0001 C CNN
+ 1 2200 1250
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #U013
+U 1 1 4B03C9F9
+P 3000 2450
+F 0 "#U013" H 3000 2720 30 0001 C CNN
+F 1 "PWR_FLAG" H 3000 2680 30 0000 C CNN
+F 2 "" H 3000 2450 60 0001 C CNN
+F 3 "" H 3000 2450 60 0001 C CNN
+ 1 3000 2450
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12C #PWR014
+U 1 1 4B03C68D
+P 3800 2450
+F 0 "#PWR014" H 3800 2420 30 0001 C CNN
+F 1 "+12C" H 3800 2560 40 0000 C CNN
+F 2 "" H 3800 2450 60 0001 C CNN
+F 3 "" H 3800 2450 60 0001 C CNN
+ 1 3800 2450
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #U015
+U 1 1 4AE17C31
+P 2200 1650
+F 0 "#U015" H 2200 1920 30 0001 C CNN
+F 1 "PWR_FLAG" H 2200 1880 30 0000 C CNN
+F 2 "" H 2200 1650 60 0001 C CNN
+F 3 "" H 2200 1650 60 0001 C CNN
+ 1 2200 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #U016
+U 1 1 4AE173EF
+P 3550 2450
+F 0 "#U016" H 3550 2400 20 0001 C CNN
+F 1 "+12V" H 3550 2550 40 0000 C CNN
+F 2 "" H 3550 2450 60 0001 C CNN
+F 3 "" H 3550 2450 60 0001 C CNN
+ 1 3550 2450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR017
+U 1 1 4AE173D0
+P 3200 3000
+F 0 "#PWR017" H 3200 3000 30 0001 C CNN
+F 1 "GND" H 3200 2930 30 0001 C CNN
+F 2 "" H 3200 3000 60 0001 C CNN
+F 3 "" H 3200 3000 60 0001 C CNN
+ 1 3200 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C2
+U 1 1 4AE173CF
+P 3200 2750
+F 0 "C2" H 3350 2800 50 0000 L CNN
+F 1 "47uF/20V" H 3350 2700 50 0000 L TNN
+F 2 "Discret:CP6" H 3200 2750 60 0001 C CNN
+F 3 "" H 3200 2750 60 0001 C CNN
+ 1 3200 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_Small D1
+U 1 1 4AE172F4
+P 2700 2500
+F 0 "D1" H 2700 2400 40 0000 C CNN
+F 1 "1N4007" H 2700 2600 40 0000 C CNN
+F 2 "Discret:D5" H 2700 2500 60 0001 C CNN
+F 3 "" H 2700 2500 60 0001 C CNN
+ 1 2700 2500
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR018
+U 1 1 4AD71B8E
+P 2100 2800
+F 0 "#PWR018" H 2100 2800 30 0001 C CNN
+F 1 "GND" H 2100 2730 30 0001 C CNN
+F 2 "" H 2100 2800 60 0001 C CNN
+F 3 "" H 2100 2800 60 0001 C CNN
+ 1 2100 2800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P2
+U 1 1 4AD71B06
+P 1650 2600
+F 0 "P2" V 1600 2600 40 0000 C CNN
+F 1 "CONN_2" V 1700 2600 40 0000 C CNN
+F 2 "Connect:bornier2" H 1650 2600 60 0001 C CNN
+F 3 "" H 1650 2600 60 0001 C CNN
+ 1 1650 2600
+ -1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2200 1250 2200 1300
+Connection ~ 2200 1300
+Wire Wire Line
+ 2000 1300 2500 1300
+Wire Wire Line
+ 2000 1500 2100 1500
+Wire Wire Line
+ 2100 1500 2100 1700
+Wire Wire Line
+ 2100 1700 2200 1700
+Connection ~ 2200 1700
+Wire Wire Line
+ 9050 2300 9050 2250
+Wire Wire Line
+ 9050 2250 9200 2250
+Wire Wire Line
+ 7900 2200 7900 2250
+Wire Wire Line
+ 7900 1650 7900 1600
+Wire Wire Line
+ 7900 3600 7900 3550
+$EndSCHEMATC
diff --git a/demos/complex_hierarchy/complex_hierarchy_schlib.lib b/demos/complex_hierarchy/complex_hierarchy_schlib.lib
new file mode 100644
index 0000000..7e82bbd
--- /dev/null
+++ b/demos/complex_hierarchy/complex_hierarchy_schlib.lib
@@ -0,0 +1,324 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +12C
+#
+DEF +12C #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "+12C" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -30 50 0 100 N
+P 2 0 1 0 0 0 0 100 N
+P 2 0 1 0 0 100 30 50 N
+X +12C 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# +12V
+#
+DEF +12V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "+12V" 0 140 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -30 50 0 100 N
+P 2 0 1 0 0 0 0 100 N
+P 2 0 1 0 0 100 30 50 N
+X +12V 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# -VAA
+#
+DEF -VAA #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 20 H I C CNN
+F1 "-VAA" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X -VAA 1 0 0 0 U 20 20 0 0 W N
+P 3 0 1 0 0 0 0 50 0 50 N
+P 7 0 1 0 0 80 30 50 -20 50 -30 50 0 80 0 80 0 80 F
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "C" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ C?
+ C_????_*
+ C_????
+ SMD*_c
+ Capacitor*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "CP" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ CP*
+ Elko*
+ TantalC*
+ C*elec
+ c_elec*
+ SMD*_Pol
+$ENDFPLIST
+DRAW
+S -90 20 -90 40 0 1 0 N
+S -90 20 90 20 0 1 0 N
+S -70 90 -30 90 0 1 0 N
+S -50 70 -50 110 0 1 0 N
+S 90 -20 -90 -40 0 1 0 F
+S 90 40 -90 40 0 1 0 N
+S 90 40 90 20 0 1 0 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# D_Small
+#
+DEF D_Small D 0 10 N N 1 F N
+F0 "D" -50 80 50 H V L CNN
+F1 "D_Small" -150 -80 50 H V L CNN
+F2 "" 0 0 60 V V C CNN
+F3 "" 0 0 60 V V C CNN
+$FPLIST
+ Diode_*
+ D-Pak_TO252AA
+ *SingleDiode
+ *SingleDiode*
+ *_Diode_*
+$ENDFPLIST
+DRAW
+P 2 0 1 0 -30 -40 -30 40 N
+P 4 0 1 0 30 -40 -30 0 30 40 30 -40 F
+X K 1 -100 0 70 R 50 50 1 1 P
+X A 2 100 0 70 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "GND" 0 -123 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 20 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# HT
+#
+DEF HT #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 120 50 H I C CNN
+F1 "HT" 0 90 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X HT 1 0 0 0 U 20 20 0 0 W N
+P 3 0 1 0 0 0 0 40 0 40 N
+P 6 0 1 0 0 40 20 20 0 70 -20 20 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# ICL7660
+#
+DEF ICL7660 U 0 40 Y Y 1 F N
+F0 "U" 200 400 70 H V L CNN
+F1 "ICL7660" 50 -450 70 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -550 -350 550 350 0 1 0 N
+X CAP+ 2 -850 250 300 R 60 60 1 1 I
+X GND 3 -50 -650 300 U 60 60 1 1 W
+X CAP- 4 -850 50 300 R 60 60 1 1 I
+X VOUT 5 850 150 300 L 60 60 1 1 w
+X LV 6 850 -150 300 L 60 60 1 1 I
+X OSC 7 -850 -150 300 R 60 60 1 1 I
+X V+ 8 -50 650 300 D 60 60 1 1 W
+ENDDRAW
+ENDDEF
+#
+# LM358
+#
+DEF LM358 U 0 20 Y Y 2 F N
+F0 "U" -50 200 60 H V L CNN
+F1 "LM358" -50 -250 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LMC6062 LMC6082 LM358N TL072 TL082
+DRAW
+P 4 0 1 6 -200 200 200 0 -200 -200 -200 200 f
+X V- 4 -100 -400 250 U 40 40 0 1 W
+X V+ 8 -100 400 250 D 40 40 0 1 W
+X ~ 1 500 0 300 L 40 40 1 1 O
+X - 2 -500 -100 300 R 40 40 1 1 I
+X + 3 -500 100 300 R 40 40 1 1 I
+X + 5 -500 100 300 R 40 40 2 1 I
+X - 6 -500 -100 300 R 40 40 2 1 I
+X ~ 7 500 0 300 L 40 40 2 1 O
+ENDDRAW
+ENDDEF
+#
+# MPSA42
+#
+DEF MPSA42 Q 0 40 Y N 1 F N
+F0 "Q" 150 -150 60 H V L CNN
+F1 "MPSA42" 150 150 60 H V L CNN
+F2 "TO92-CBE" 150 0 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ TO92-CBE
+$ENDFPLIST
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X B B -200 0 200 R 40 40 1 1 I
+X C C 100 200 100 D 40 40 1 1 P
+X E E 100 -200 100 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# MPSA92
+#
+DEF MPSA92 Q 0 40 Y N 1 F N
+F0 "Q" 150 -150 60 H V L CNN
+F1 "MPSA92" 150 150 60 H V L CNN
+F2 "TO92-CBE" 150 0 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ TO92-CBE
+$ENDFPLIST
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X B B -200 0 200 R 40 40 1 1 I
+X C C 100 200 100 D 40 40 1 1 P
+X E E 100 -200 100 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R_*
+ Resistor_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 60 60 1 1 P
+X ~ 2 0 -150 50 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "VCC" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 75 25 0 1 0 N
+P 2 0 1 0 0 0 0 50 N
+X VCC 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/ecc83/ecc83-pp-cache.lib b/demos/ecc83/ecc83-pp-cache.lib
new file mode 100644
index 0000000..f862be2
--- /dev/null
+++ b/demos/ecc83/ecc83-pp-cache.lib
@@ -0,0 +1,141 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "C" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ C?
+ C_????_*
+ C_????
+ SMD*_c
+ Capacitor*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# ECC81
+#
+DEF ECC81 U 0 0 Y Y 3 L N
+F0 "U" 130 310 50 H V C CNN
+F1 "ECC81" 350 -300 50 H V C CNN
+F2 "VALVE-NOVAL_P" 400 -350 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS ECC83
+DRAW
+P 2 1 0 0 -100 -200 -100 -300 N
+P 2 1 0 0 0 200 0 300 N
+P 2 2 0 0 -100 -200 -100 -300 N
+P 2 2 0 0 0 200 0 300 N
+A 0 -100 200 -1799 -1 0 1 0 N -200 -100 200 -100
+A 0 100 200 1 1799 0 1 0 N 200 100 -200 100
+P 2 0 1 0 200 100 200 -100 N
+P 3 0 1 0 -200 100 -200 -100 -200 -100 N
+A 0 -225 103 142 1659 1 1 10 N 100 -200 -100 -200
+P 2 1 1 0 -200 0 -125 0 N
+P 2 1 1 6 -75 0 -125 0 N
+P 2 1 1 6 -25 0 25 0 N
+P 2 1 1 6 75 0 125 0 N
+P 3 1 1 10 -100 200 110 200 110 200 N
+X A 6 0 400 100 D 40 40 1 1 P
+X G 7 -300 0 100 R 40 40 1 1 I
+X K 8 -100 -400 100 U 40 40 1 1 P
+A 0 -225 103 142 1659 2 1 10 N 100 -200 -100 -200
+P 2 2 1 0 -200 0 -125 0 N
+P 2 2 1 6 -75 0 -125 0 N
+P 2 2 1 6 -25 0 25 0 N
+P 2 2 1 6 75 0 125 0 N
+P 3 2 1 10 -100 200 110 200 110 200 N
+X A 1 0 400 100 D 40 40 2 1 P
+X G 2 -300 0 100 R 40 40 2 1 I
+X K 3 -100 -400 100 U 40 40 2 1 P
+A -50 -275 55 265 1534 3 1 0 N 0 -250 -100 -250
+A 50 -275 55 265 1534 3 1 0 N 100 -250 0 -250
+X F1 4 -100 -450 200 U 40 40 3 1 I
+X F1 5 100 -450 200 U 40 40 3 1 I
+X F2 9 0 -450 200 U 40 40 3 1 I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -250 50 H I C CNN
+F1 "GND" 0 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R_*
+ Resistor_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 60 60 1 1 P
+X ~ 2 0 -150 50 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/ecc83/ecc83-pp.kicad_pcb b/demos/ecc83/ecc83-pp.kicad_pcb
new file mode 100644
index 0000000..c885095
--- /dev/null
+++ b/demos/ecc83/ecc83-pp.kicad_pcb
@@ -0,0 +1,792 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-05-13 BZR 5653)-product")
+
+ (general
+ (links 20)
+ (no_connects 0)
+ (area 123.761499 90.741499 168.338501 132.778501)
+ (thickness 1.6002)
+ (drawings 4)
+ (tracks 57)
+ (zones 0)
+ (modules 15)
+ (nets 14)
+ )
+
+ (page A4)
+ (layers
+ (0 Composant signal)
+ (31 Cuivre signal)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.8636)
+ (trace_clearance 0.381)
+ (zone_clearance 0.635)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 2.794 1.397)
+ (pad_drill 1.9304)
+ (pad_to_mask_clearance 0.1)
+ (aux_axis_origin 0 0)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x000f0_80000001)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (excludeedgelayer true)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 GND)
+ (net 2 "Net-(C1-Pad1)")
+ (net 3 "Net-(C2-Pad1)")
+ (net 4 "Net-(C2-Pad2)")
+ (net 5 "Net-(P1-Pad2)")
+ (net 6 "Net-(P4-Pad1)")
+ (net 7 "Net-(P4-Pad2)")
+ (net 8 "Net-(R1-Pad1)")
+ (net 9 "Net-(R2-Pad1)")
+ (net 10 "Net-(P5-Pad1)")
+ (net 11 "Net-(P6-Pad1)")
+ (net 12 "Net-(P7-Pad1)")
+ (net 13 "Net-(P8-Pad1)")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.381)
+ (trace_width 0.8636)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ (add_net "Net-(C1-Pad1)")
+ (add_net "Net-(C2-Pad1)")
+ (add_net "Net-(C2-Pad2)")
+ (add_net "Net-(P1-Pad2)")
+ (add_net "Net-(P4-Pad1)")
+ (add_net "Net-(P4-Pad2)")
+ (add_net "Net-(P5-Pad1)")
+ (add_net "Net-(P6-Pad1)")
+ (add_net "Net-(P7-Pad1)")
+ (add_net "Net-(P8-Pad1)")
+ (add_net "Net-(R1-Pad1)")
+ (add_net "Net-(R2-Pad1)")
+ )
+
+ (module discret:C2V10 (layer Composant) (tedit 54A57B4C) (tstamp 54A581E5)
+ (at 138.43 98.425 90)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4549F4BE)
+ (fp_text reference C1 (at 0 2.54 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_text value 10uF (at 0 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 4.826 -2.794) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 "Net-(C1-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/C2V10.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2 (layer Composant) (tedit 54A57B4C) (tstamp 54A581EA)
+ (at 137.16 122.555 90)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4549F3BE)
+ (fp_text reference C2 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 680nF (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 "Net-(C2-Pad2)"))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 54A588D7) (tstamp 54A581EF)
+ (at 164.465 110.49 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4549F464)
+ (fp_text reference P1 (at -6.05 -0.775 360) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_text value IN (at 0 5 270) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_line (start 5 2) (end -5 2) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 3) (end 5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 -3) (end -5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 -3) (end -5 3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 3) (end 5 3) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -2 0 270) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 2 thru_hole circle (at 2 0 270) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 5 "Net-(P1-Pad2)"))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 54A588C9) (tstamp 54A581F4)
+ (at 128.27 116.84 90)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4549F46C)
+ (fp_text reference P2 (at 5.81 0.14 180) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_text value OUT (at 0 5 90) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_line (start 5 2) (end -5 2) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 3) (end 5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 -3) (end -5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 -3) (end -5 3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 3) (end 5 3) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -2 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 3 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 2 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 54A588D1) (tstamp 54A581F9)
+ (at 128.27 102.87 90)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /4549F4A5)
+ (fp_text reference P3 (at -6.1 0.09 180) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_text value POWER (at 0 5 90) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_line (start 5 2) (end -5 2) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 3) (end 5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 -3) (end -5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 -3) (end -5 3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 3) (end 5 3) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -2 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 2 "Net-(C1-Pad1)"))
+ (pad 2 thru_hole circle (at 2 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 54A58902) (tstamp 54A581FE)
+ (at 147.955 129.54 180)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /456A8ACC)
+ (fp_text reference P4 (at 6.605 0.46 180) (layer F.SilkS)
+ (effects (font (thickness 0.15)))
+ )
+ (fp_text value CONN_2 (at -9.735 3.03 180) (layer F.SilkS) hide
+ (effects (font (thickness 0.15)))
+ )
+ (fp_line (start 5 2) (end -5 2) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 3) (end 5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5 -3) (end -5 -3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 -3) (end -5 3) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5 3) (end 5 3) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -2 0 180) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(P4-Pad1)"))
+ (pad 2 thru_hole circle (at 2 0 180) (size 2 2) (drill 1) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(P4-Pad2)"))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:1pin (layer Composant) (tedit 54A588DF) (tstamp 54A58203)
+ (at 127 93.98)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A5890A)
+ (fp_text reference P5 (at 0 -3) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_1 (at 0 2) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4 4) (drill 3) (layers *.Cu *.Mask F.SilkS)
+ (net 10 "Net-(P5-Pad1)"))
+ )
+
+ (module connect:1pin (layer Composant) (tedit 54A588E7) (tstamp 54A58207)
+ (at 165.1 93.98)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A58C65)
+ (fp_text reference P6 (at 0 -3) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_1 (at 0 2) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4 4) (drill 3) (layers *.Cu *.Mask F.SilkS)
+ (net 11 "Net-(P6-Pad1)"))
+ )
+
+ (module connect:1pin (layer Composant) (tedit 54A588EE) (tstamp 54A5820B)
+ (at 165.1 129.54)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A58C8A)
+ (fp_text reference P7 (at 0 -3) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_1 (at 0 2) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4 4) (drill 3) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(P7-Pad1)"))
+ )
+
+ (module connect:1pin (layer Composant) (tedit 54A588F3) (tstamp 54A5820F)
+ (at 127 129.54)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A58CA3)
+ (fp_text reference P8 (at 0 -3) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_1 (at 0 2) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4 4) (drill 3) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(P8-Pad1)"))
+ )
+
+ (module discret:R3 (layer Composant) (tedit 54A57B4C) (tstamp 54A58213)
+ (at 135.89 111.76 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F38A)
+ (autoplace_cost180 10)
+ (fp_text reference R1 (at 0 0.127 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1.5K (at 0 0.127 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(R1-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 "Net-(C2-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Composant) (tedit 54A57B4C) (tstamp 54A58218)
+ (at 149.86 97.79 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F39D)
+ (autoplace_cost180 10)
+ (fp_text reference R2 (at 0 0.127 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1.5K (at 0 0.127 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(R2-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Composant) (tedit 54A57B4C) (tstamp 54A5821D)
+ (at 133.985 122.555 90)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F3AD)
+ (autoplace_cost180 10)
+ (fp_text reference R3 (at 0 0.127 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100K (at 0 0.127 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Composant) (tedit 54A57B4C) (tstamp 54A58222)
+ (at 164.465 121.285 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F3A2)
+ (autoplace_cost180 10)
+ (fp_text reference R4 (at 0 0.127 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 47K (at 0 0.127 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 "Net-(P1-Pad2)"))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Valves:VALVE-ECC-83-1 (layer Composant) (tedit 54A57B25) (tstamp 54A58227)
+ (at 149.225 113.665)
+ (path /48B4F266)
+ (fp_text reference U1 (at 1.27 -11.43) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value ECC83 (at 0 11.43) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 10.16 1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 3.4544 4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(R1-Pad1)"))
+ (pad 2 thru_hole circle (at 5.60832 1.8288) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 "Net-(P1-Pad2)"))
+ (pad 3 thru_hole circle (at 5.60832 -1.8288) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(R2-Pad1)"))
+ (pad 4 thru_hole circle (at 3.4544 -4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(P4-Pad1)"))
+ (pad 5 thru_hole circle (at 0 -5.8928) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(P4-Pad1)"))
+ (pad 6 thru_hole circle (at -3.4544 -4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 "Net-(C1-Pad1)"))
+ (pad 7 thru_hole circle (at -5.60832 -1.8288) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(R1-Pad1)"))
+ (pad 8 thru_hole circle (at -5.60832 1.78816) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 "Net-(C2-Pad2)"))
+ (pad 9 thru_hole circle (at -3.4544 4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(P4-Pad2)"))
+ (model Valves.3dshapes/VALVE-ECC-83-1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_line (start 123.825 132.715) (end 168.275 132.715) (angle 90) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 168.275 90.805) (end 123.825 90.805) (angle 90) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 168.275 90.805) (end 168.275 132.715) (angle 90) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 123.825 90.805) (end 123.825 132.715) (angle 90) (layer Edge.Cuts) (width 0.127))
+
+ (segment (start 142.24 95.25) (end 146.05 95.25) (width 0.8636) (layer Cuivre) (net 1))
+ (segment (start 164.465 125.095) (end 164.465 124.46) (width 0.8636) (layer Cuivre) (net 1) (status 800))
+ (segment (start 146.05 97.79) (end 146.05 95.25) (width 0.8636) (layer Cuivre) (net 1))
+ (segment (start 139.065 95.25) (end 142.24 95.25) (width 0.8636) (layer Cuivre) (net 1))
+ (segment (start 138.43 95.885) (end 139.065 95.25) (width 0.8636) (layer Cuivre) (net 1) (status 800))
+ (segment (start 164.465 107.95) (end 165.735 107.95) (width 0.8636) (layer Cuivre) (net 1) (status 800))
+ (segment (start 136.525 100.965) (end 135.255 102.235) (width 0.8636) (layer Cuivre) (net 2))
+ (segment (start 138.43 100.965) (end 136.525 100.965) (width 0.8636) (layer Cuivre) (net 2) (status 800))
+ (segment (start 145.7706 103.8606) (end 142.875 100.965) (width 0.8636) (layer Cuivre) (net 2))
+ (segment (start 142.875 100.965) (end 138.43 100.965) (width 0.8636) (layer Cuivre) (net 2) (status 400))
+ (segment (start 145.7706 108.91012) (end 145.7706 103.8606) (width 0.8636) (layer Cuivre) (net 2) (status 800))
+ (segment (start 132.08 105.41) (end 135.255 102.235) (width 0.8636) (layer Cuivre) (net 2))
+ (segment (start 128.27 105.41) (end 132.08 105.41) (width 0.8636) (layer Cuivre) (net 2) (status 800))
+ (segment (start 137.16 125.095) (end 133.985 125.095) (width 0.8636) (layer Cuivre) (net 3))
+ (segment (start 133.985 126.365) (end 133.985 125.095) (width 0.8636) (layer Cuivre) (net 3))
+ (segment (start 133.985 125.095) (end 128.27 119.38) (width 0.8636) (layer Cuivre) (net 3))
+ (segment (start 137.16 120.015) (end 137.16 115.57) (width 0.8636) (layer Cuivre) (net 4))
+ (segment (start 135.89 115.57) (end 137.16 115.57) (width 0.8636) (layer Cuivre) (net 4))
+ (segment (start 137.16 115.57) (end 143.49984 115.57) (width 0.8636) (layer Cuivre) (net 4))
+ (segment (start 143.49984 115.57) (end 143.61668 115.45316) (width 0.8636) (layer Cuivre) (net 4))
+ (segment (start 159.385 117.475) (end 164.465 117.475) (width 0.8636) (layer Cuivre) (net 5) (status 400))
+ (segment (start 154.83332 115.4938) (end 157.4038 115.4938) (width 0.8636) (layer Cuivre) (net 5) (status 800))
+ (segment (start 164.465 117.475) (end 164.465 113.03) (width 0.8636) (layer Cuivre) (net 5) (status C00))
+ (segment (start 157.4038 115.4938) (end 159.385 117.475) (width 0.8636) (layer Cuivre) (net 5))
+ (segment (start 149.86 128.905) (end 150.495 129.54) (width 0.8636) (layer Cuivre) (net 6) (status 400))
+ (segment (start 149.86 111.125) (end 149.86 128.905) (width 0.8636) (layer Cuivre) (net 6))
+ (segment (start 149.225 110.49) (end 149.86 111.125) (width 0.8636) (layer Cuivre) (net 6))
+ (segment (start 149.225 107.7722) (end 151.54148 107.7722) (width 0.8636) (layer Cuivre) (net 6) (status 800))
+ (segment (start 151.54148 107.7722) (end 152.6794 108.91012) (width 0.8636) (layer Cuivre) (net 6) (status 400))
+ (segment (start 149.225 107.7722) (end 149.225 110.49) (width 0.8636) (layer Cuivre) (net 6) (status 800))
+ (segment (start 145.7706 129.1844) (end 145.415 129.54) (width 0.8636) (layer Cuivre) (net 7) (status 400))
+ (segment (start 145.7706 118.41988) (end 145.7706 129.1844) (width 0.8636) (layer Cuivre) (net 7) (status 800))
+ (segment (start 153.289 131.826) (end 154.94 130.175) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 140.716 131.826) (end 153.289 131.826) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 143.61668 111.8362) (end 141.6812 111.8362) (width 0.8636) (layer Cuivre) (net 8) (status 800))
+ (segment (start 141.6812 111.8362) (end 137.795 107.95) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 154.94 121.31548) (end 154.94 120.68048) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 154.94 120.68048) (end 152.6794 118.41988) (width 0.8636) (layer Cuivre) (net 8) (status 400))
+ (segment (start 136.398 121.92) (end 135.509 121.031) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 135.509 121.031) (end 135.509 117.729) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 135.509 117.729) (end 133.985 116.205) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 136.525 121.92) (end 136.398 121.92) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 136.525 121.92) (end 139.065 124.46) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 139.065 124.46) (end 139.065 130.175) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 139.065 130.175) (end 140.335 131.445) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 135.89 107.95) (end 135.255 107.95) (width 0.8636) (layer Cuivre) (net 8) (status 800))
+ (segment (start 133.985 109.22) (end 133.985 116.205) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 135.255 107.95) (end 133.985 109.22) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 135.89 107.95) (end 137.795 107.95) (width 0.8636) (layer Cuivre) (net 8) (status 800))
+ (segment (start 140.335 131.445) (end 140.716 131.826) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 154.94 121.31548) (end 154.94 121.31548) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 154.94 130.175) (end 154.94 121.31548) (width 0.8636) (layer Cuivre) (net 8))
+ (segment (start 154.83332 111.8362) (end 154.83332 111.23168) (width 0.8636) (layer Cuivre) (net 9) (status 800))
+ (segment (start 159.385 106.68) (end 159.385 99.695) (width 0.8636) (layer Cuivre) (net 9))
+ (segment (start 154.83332 111.23168) (end 159.385 106.68) (width 0.8636) (layer Cuivre) (net 9))
+ (segment (start 157.48 97.79) (end 159.385 99.695) (width 0.8636) (layer Cuivre) (net 9))
+ (segment (start 153.67 97.79) (end 157.48 97.79) (width 0.8636) (layer Cuivre) (net 9) (status 800))
+
+ (zone (net 1) (net_name GND) (layer Cuivre) (tstamp 4EED97A2) (hatch edge 0.508)
+ (connect_pads (clearance 0.635))
+ (min_thickness 0.381)
+ (fill yes (arc_segments 32) (thermal_gap 0.254) (thermal_bridge_width 0.50038))
+ (polygon
+ (pts
+ (xy 167.64 132.08) (xy 167.64 91.44) (xy 124.46 91.44) (xy 124.46 132.08)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 167.386 127.8747) (xy 167.3002 127.745561) (xy 166.909756 127.352381) (xy 166.450378 127.042527) (xy 165.939566 126.827801)
+ (xy 165.613438 126.760856) (xy 165.613438 125.080387) (xy 165.58852 124.856618) (xy 165.520426 124.64201) (xy 165.428009 124.469114)
+ (xy 165.239548 124.404867) (xy 165.155133 124.489281) (xy 165.155133 124.320452) (xy 165.090886 124.131991) (xy 164.890987 124.02839)
+ (xy 164.674717 123.965779) (xy 164.450387 123.946562) (xy 164.226618 123.97148) (xy 164.01201 124.039574) (xy 163.839114 124.131991)
+ (xy 163.774867 124.320452) (xy 164.465 125.010586) (xy 165.155133 124.320452) (xy 165.155133 124.489281) (xy 164.549414 125.095)
+ (xy 165.239548 125.785133) (xy 165.428009 125.720886) (xy 165.53161 125.520987) (xy 165.594221 125.304717) (xy 165.613438 125.080387)
+ (xy 165.613438 126.760856) (xy 165.396774 126.716382) (xy 165.155133 126.714695) (xy 165.155133 125.869548) (xy 164.465 125.179414)
+ (xy 164.380586 125.263828) (xy 164.380586 125.095) (xy 163.690452 124.404867) (xy 163.501991 124.469114) (xy 163.39839 124.669013)
+ (xy 163.335779 124.885283) (xy 163.316562 125.109613) (xy 163.34148 125.333382) (xy 163.409574 125.54799) (xy 163.501991 125.720886)
+ (xy 163.690452 125.785133) (xy 164.380586 125.095) (xy 164.380586 125.263828) (xy 163.774867 125.869548) (xy 163.839114 126.058009)
+ (xy 164.039013 126.16161) (xy 164.255283 126.224221) (xy 164.479613 126.243438) (xy 164.703382 126.21852) (xy 164.91799 126.150426)
+ (xy 165.090886 126.058009) (xy 165.155133 125.869548) (xy 165.155133 126.714695) (xy 164.842679 126.712514) (xy 164.298384 126.816344)
+ (xy 163.784623 127.023916) (xy 163.320965 127.327326) (xy 162.925069 127.715016) (xy 162.612015 128.172219) (xy 162.393729 128.68152)
+ (xy 162.278523 129.223521) (xy 162.270786 129.777576) (xy 162.370814 130.322582) (xy 162.574795 130.837779) (xy 162.87496 131.303545)
+ (xy 163.259877 131.702137) (xy 163.438092 131.826) (xy 155.06709 131.826) (xy 155.829046 131.064045) (xy 155.902757 130.974307)
+ (xy 155.977415 130.885333) (xy 155.980599 130.879539) (xy 155.984797 130.87443) (xy 156.03969 130.772054) (xy 156.095629 130.670303)
+ (xy 156.097627 130.664003) (xy 156.100753 130.658174) (xy 156.134719 130.547072) (xy 156.169825 130.436407) (xy 156.170561 130.429838)
+ (xy 156.172495 130.423515) (xy 156.184237 130.307918) (xy 156.197177 130.192555) (xy 156.197267 130.179639) (xy 156.197293 130.179388)
+ (xy 156.19727 130.179154) (xy 156.1973 130.175) (xy 156.1973 121.31548) (xy 156.1973 120.68048) (xy 156.185963 120.564857)
+ (xy 156.175844 120.449198) (xy 156.174 120.442852) (xy 156.173355 120.436269) (xy 156.139771 120.325033) (xy 156.107385 120.213559)
+ (xy 156.104343 120.207691) (xy 156.102432 120.20136) (xy 156.04789 120.098782) (xy 155.99446 119.995705) (xy 155.990336 119.990539)
+ (xy 155.987232 119.984701) (xy 155.913816 119.894685) (xy 155.841372 119.803935) (xy 155.8323 119.794736) (xy 155.832143 119.794543)
+ (xy 155.831963 119.794394) (xy 155.829045 119.791435) (xy 154.517617 118.480007) (xy 154.520979 118.239312) (xy 154.450834 117.885053)
+ (xy 154.313215 117.551165) (xy 154.113365 117.250367) (xy 154.005586 117.141833) (xy 154.261512 117.253644) (xy 154.614224 117.331193)
+ (xy 154.975282 117.338756) (xy 155.330932 117.276046) (xy 155.667628 117.14545) (xy 155.972546 116.951943) (xy 156.183451 116.7511)
+ (xy 156.88301 116.7511) (xy 158.495955 118.364045) (xy 158.585663 118.437732) (xy 158.674667 118.512415) (xy 158.68046 118.5156)
+ (xy 158.68557 118.519797) (xy 158.787945 118.57469) (xy 158.889697 118.630629) (xy 158.895996 118.632627) (xy 158.901826 118.635753)
+ (xy 159.012927 118.669719) (xy 159.123593 118.704825) (xy 159.130161 118.705561) (xy 159.136485 118.707495) (xy 159.252036 118.719232)
+ (xy 159.367445 118.732177) (xy 159.380371 118.732267) (xy 159.380612 118.732292) (xy 159.380836 118.73227) (xy 159.385 118.7323)
+ (xy 163.603561 118.7323) (xy 163.717904 118.81177) (xy 163.991779 118.931423) (xy 164.283679 118.995602) (xy 164.582486 119.001861)
+ (xy 164.876817 118.949962) (xy 165.155462 118.841883) (xy 165.407808 118.681739) (xy 165.624243 118.475631) (xy 165.796522 118.23141)
+ (xy 165.918084 117.958377) (xy 165.984299 117.666932) (xy 165.989065 117.325564) (xy 165.931014 117.032384) (xy 165.817123 116.756063)
+ (xy 165.7223 116.613343) (xy 165.7223 113.813608) (xy 165.853581 113.688591) (xy 166.059943 113.396054) (xy 166.205555 113.069005)
+ (xy 166.284869 112.719903) (xy 166.290578 112.311) (xy 166.221043 111.959819) (xy 166.08462 111.628833) (xy 165.9095 111.365256)
+ (xy 165.9095 109.533779) (xy 165.9095 108.660815) (xy 165.9095 108.319185) (xy 165.9095 107.446221) (xy 165.892418 107.360345)
+ (xy 165.858911 107.279451) (xy 165.810266 107.206648) (xy 165.748353 107.144735) (xy 165.67555 107.096089) (xy 165.594656 107.062582)
+ (xy 165.50878 107.0455) (xy 165.421221 107.0455) (xy 164.635815 107.0455) (xy 164.52469 107.156625) (xy 164.52469 108.43031)
+ (xy 165.798375 108.43031) (xy 165.9095 108.319185) (xy 165.9095 108.660815) (xy 165.798375 108.54969) (xy 164.52469 108.54969)
+ (xy 164.52469 109.823375) (xy 164.635815 109.9345) (xy 165.421221 109.9345) (xy 165.50878 109.9345) (xy 165.594656 109.917418)
+ (xy 165.67555 109.883911) (xy 165.748353 109.835265) (xy 165.810266 109.773352) (xy 165.858911 109.700549) (xy 165.892418 109.619655)
+ (xy 165.9095 109.533779) (xy 165.9095 111.365256) (xy 165.886506 111.330648) (xy 165.634248 111.076622) (xy 165.337453 110.876432)
+ (xy 165.007427 110.737701) (xy 164.65674 110.665716) (xy 164.40531 110.66396) (xy 164.40531 109.823375) (xy 164.40531 108.54969)
+ (xy 164.40531 108.43031) (xy 164.40531 107.156625) (xy 164.294185 107.0455) (xy 163.508779 107.0455) (xy 163.42122 107.0455)
+ (xy 163.335344 107.062582) (xy 163.25445 107.096089) (xy 163.181647 107.144735) (xy 163.119734 107.206648) (xy 163.071089 107.279451)
+ (xy 163.037582 107.360345) (xy 163.0205 107.446221) (xy 163.0205 108.319185) (xy 163.131625 108.43031) (xy 164.40531 108.43031)
+ (xy 164.40531 108.54969) (xy 163.131625 108.54969) (xy 163.0205 108.660815) (xy 163.0205 109.533779) (xy 163.037582 109.619655)
+ (xy 163.071089 109.700549) (xy 163.119734 109.773352) (xy 163.181647 109.835265) (xy 163.25445 109.883911) (xy 163.335344 109.917418)
+ (xy 163.42122 109.9345) (xy 163.508779 109.9345) (xy 164.294185 109.9345) (xy 164.40531 109.823375) (xy 164.40531 110.66396)
+ (xy 164.29875 110.663216) (xy 163.947092 110.730299) (xy 163.615161 110.864408) (xy 163.3156 111.060435) (xy 163.059819 111.310913)
+ (xy 162.857562 111.606303) (xy 162.716531 111.935353) (xy 162.642099 112.285529) (xy 162.6371 112.643493) (xy 162.701726 112.995611)
+ (xy 162.833514 113.32847) (xy 163.027445 113.629392) (xy 163.2077 113.816051) (xy 163.2077 116.2177) (xy 159.90579 116.2177)
+ (xy 158.292845 114.604755) (xy 158.203136 114.531067) (xy 158.114133 114.456385) (xy 158.108339 114.453199) (xy 158.10323 114.449003)
+ (xy 158.000835 114.394099) (xy 157.899103 114.338171) (xy 157.892805 114.336173) (xy 157.886975 114.333047) (xy 157.775858 114.299075)
+ (xy 157.665207 114.263975) (xy 157.658638 114.263238) (xy 157.652315 114.261305) (xy 157.536763 114.249567) (xy 157.421355 114.236623)
+ (xy 157.408428 114.236532) (xy 157.408188 114.236508) (xy 157.407963 114.236529) (xy 157.4038 114.2365) (xy 156.180108 114.2365)
+ (xy 156.012816 114.068035) (xy 155.71342 113.866089) (xy 155.380501 113.726143) (xy 155.075367 113.663508) (xy 155.330932 113.618446)
+ (xy 155.667628 113.48785) (xy 155.972546 113.294343) (xy 156.234071 113.045296) (xy 156.442242 112.750195) (xy 156.58913 112.42028)
+ (xy 156.669139 112.068118) (xy 156.674899 111.655632) (xy 156.604754 111.301373) (xy 156.586355 111.256734) (xy 160.274046 107.569045)
+ (xy 160.347757 107.479307) (xy 160.422415 107.390333) (xy 160.425599 107.384539) (xy 160.429797 107.37943) (xy 160.48469 107.277054)
+ (xy 160.540629 107.175303) (xy 160.542627 107.169003) (xy 160.545753 107.163174) (xy 160.579719 107.052072) (xy 160.614825 106.941407)
+ (xy 160.615561 106.934838) (xy 160.617495 106.928515) (xy 160.629237 106.812918) (xy 160.642177 106.697555) (xy 160.642267 106.684639)
+ (xy 160.642293 106.684388) (xy 160.64227 106.684154) (xy 160.6423 106.68) (xy 160.6423 99.695) (xy 160.630972 99.579472)
+ (xy 160.620845 99.463718) (xy 160.619 99.457367) (xy 160.618355 99.450789) (xy 160.584783 99.339594) (xy 160.552385 99.228079)
+ (xy 160.549343 99.222211) (xy 160.547432 99.21588) (xy 160.49289 99.113302) (xy 160.43946 99.010225) (xy 160.435336 99.005059)
+ (xy 160.432232 98.999221) (xy 160.358816 98.909205) (xy 160.286372 98.818455) (xy 160.2773 98.809256) (xy 160.277143 98.809063)
+ (xy 160.276963 98.808914) (xy 160.274045 98.805955) (xy 158.369045 96.900955) (xy 158.279336 96.827267) (xy 158.190333 96.752585)
+ (xy 158.184539 96.749399) (xy 158.17943 96.745203) (xy 158.077035 96.690299) (xy 157.975303 96.634371) (xy 157.969005 96.632373)
+ (xy 157.963175 96.629247) (xy 157.852058 96.595275) (xy 157.741407 96.560175) (xy 157.734838 96.559438) (xy 157.728515 96.557505)
+ (xy 157.612963 96.545767) (xy 157.497555 96.532823) (xy 157.484628 96.532732) (xy 157.484388 96.532708) (xy 157.484163 96.532729)
+ (xy 157.48 96.5327) (xy 154.531449 96.5327) (xy 154.398359 96.442929) (xy 154.12284 96.327112) (xy 153.830072 96.267015)
+ (xy 153.531208 96.264929) (xy 153.23763 96.320932) (xy 152.96052 96.432891) (xy 152.710435 96.596542) (xy 152.496899 96.805652)
+ (xy 152.328047 97.052255) (xy 152.210309 97.326959) (xy 152.14817 97.619299) (xy 152.143997 97.918142) (xy 152.197949 98.212104)
+ (xy 152.307971 98.489988) (xy 152.469872 98.74121) (xy 152.677486 98.9562) (xy 152.922904 99.12677) (xy 153.196779 99.246423)
+ (xy 153.488679 99.310602) (xy 153.787486 99.316861) (xy 154.081817 99.264962) (xy 154.360462 99.156883) (xy 154.533136 99.0473)
+ (xy 156.95921 99.0473) (xy 158.1277 100.21579) (xy 158.1277 106.159209) (xy 154.168184 110.118725) (xy 154.016171 110.180142)
+ (xy 154.080151 110.119216) (xy 154.288322 109.824115) (xy 154.43521 109.4942) (xy 154.515219 109.142038) (xy 154.520979 108.729552)
+ (xy 154.450834 108.375293) (xy 154.313215 108.041405) (xy 154.113365 107.740607) (xy 153.858896 107.484355) (xy 153.5595 107.282409)
+ (xy 153.226581 107.142463) (xy 152.872821 107.069847) (xy 152.61542 107.06805) (xy 152.430525 106.883155) (xy 152.340816 106.809467)
+ (xy 152.251813 106.734785) (xy 152.246019 106.731599) (xy 152.24091 106.727403) (xy 152.138515 106.672499) (xy 152.036783 106.616571)
+ (xy 152.030485 106.614573) (xy 152.024655 106.611447) (xy 151.913538 106.577475) (xy 151.802887 106.542375) (xy 151.796318 106.541638)
+ (xy 151.789995 106.539705) (xy 151.674443 106.527967) (xy 151.559035 106.515023) (xy 151.546108 106.514932) (xy 151.545868 106.514908)
+ (xy 151.545643 106.514929) (xy 151.54148 106.5149) (xy 150.571788 106.5149) (xy 150.404496 106.346435) (xy 150.1051 106.144489)
+ (xy 149.772181 106.004543) (xy 149.418421 105.931927) (xy 149.057293 105.929406) (xy 148.702553 105.997076) (xy 148.367712 106.13236)
+ (xy 148.065526 106.330105) (xy 147.807504 106.582779) (xy 147.603473 106.880758) (xy 147.461206 107.212692) (xy 147.386122 107.565937)
+ (xy 147.38108 107.927038) (xy 147.401175 108.036528) (xy 147.204565 107.740607) (xy 147.198438 107.734437) (xy 147.198438 97.775387)
+ (xy 147.17352 97.551618) (xy 147.105426 97.33701) (xy 147.013009 97.164114) (xy 146.824548 97.099867) (xy 146.740133 97.184281)
+ (xy 146.740133 97.015452) (xy 146.675886 96.826991) (xy 146.475987 96.72339) (xy 146.259717 96.660779) (xy 146.035387 96.641562)
+ (xy 145.811618 96.66648) (xy 145.59701 96.734574) (xy 145.424114 96.826991) (xy 145.359867 97.015452) (xy 146.05 97.705586)
+ (xy 146.740133 97.015452) (xy 146.740133 97.184281) (xy 146.134414 97.79) (xy 146.824548 98.480133) (xy 147.013009 98.415886)
+ (xy 147.11661 98.215987) (xy 147.179221 97.999717) (xy 147.198438 97.775387) (xy 147.198438 107.734437) (xy 147.0279 107.562704)
+ (xy 147.0279 103.8606) (xy 147.016572 103.745072) (xy 147.006445 103.629318) (xy 147.0046 103.622967) (xy 147.003955 103.616389)
+ (xy 146.970383 103.505194) (xy 146.937985 103.393679) (xy 146.934943 103.387811) (xy 146.933032 103.38148) (xy 146.87849 103.278902)
+ (xy 146.82506 103.175825) (xy 146.820936 103.170659) (xy 146.817832 103.164821) (xy 146.744416 103.074805) (xy 146.740133 103.069439)
+ (xy 146.740133 98.564548) (xy 146.05 97.874414) (xy 145.965586 97.958828) (xy 145.965586 97.79) (xy 145.275452 97.099867)
+ (xy 145.086991 97.164114) (xy 144.98339 97.364013) (xy 144.920779 97.580283) (xy 144.901562 97.804613) (xy 144.92648 98.028382)
+ (xy 144.994574 98.24299) (xy 145.086991 98.415886) (xy 145.275452 98.480133) (xy 145.965586 97.79) (xy 145.965586 97.958828)
+ (xy 145.359867 98.564548) (xy 145.424114 98.753009) (xy 145.624013 98.85661) (xy 145.840283 98.919221) (xy 146.064613 98.938438)
+ (xy 146.288382 98.91352) (xy 146.50299 98.845426) (xy 146.675886 98.753009) (xy 146.740133 98.564548) (xy 146.740133 103.069439)
+ (xy 146.671972 102.984055) (xy 146.662897 102.974852) (xy 146.662743 102.974663) (xy 146.662567 102.974518) (xy 146.659646 102.971555)
+ (xy 143.764045 100.075955) (xy 143.674336 100.002267) (xy 143.585333 99.927585) (xy 143.579539 99.924399) (xy 143.57443 99.920203)
+ (xy 143.472035 99.865299) (xy 143.370303 99.809371) (xy 143.364005 99.807373) (xy 143.358175 99.804247) (xy 143.247058 99.770275)
+ (xy 143.136407 99.735175) (xy 143.129838 99.734438) (xy 143.123515 99.732505) (xy 143.007963 99.720767) (xy 142.892555 99.707823)
+ (xy 142.879628 99.707732) (xy 142.879388 99.707708) (xy 142.879163 99.707729) (xy 142.875 99.7077) (xy 140.06012 99.7077)
+ (xy 139.939524 99.525536) (xy 139.769934 99.381442) (xy 139.769934 95.87791) (xy 139.742805 95.616637) (xy 139.665224 95.365679)
+ (xy 139.548053 95.146468) (xy 139.340093 95.059321) (xy 139.255679 95.143735) (xy 139.255679 94.974907) (xy 139.168532 94.766947)
+ (xy 138.93622 94.644349) (xy 138.684454 94.569429) (xy 138.42291 94.545066) (xy 138.161637 94.572195) (xy 137.910679 94.649776)
+ (xy 137.691468 94.766947) (xy 137.604321 94.974907) (xy 138.43 95.800586) (xy 139.255679 94.974907) (xy 139.255679 95.143735)
+ (xy 138.514414 95.885) (xy 139.340093 96.710679) (xy 139.548053 96.623532) (xy 139.670651 96.39122) (xy 139.745571 96.139454)
+ (xy 139.769934 95.87791) (xy 139.769934 99.381442) (xy 139.762029 99.374726) (xy 139.549605 99.279205) (xy 139.319 99.246506)
+ (xy 139.255679 99.246506) (xy 139.255679 96.795093) (xy 138.43 95.969414) (xy 138.345586 96.053828) (xy 138.345586 95.885)
+ (xy 137.519907 95.059321) (xy 137.311947 95.146468) (xy 137.189349 95.37878) (xy 137.114429 95.630546) (xy 137.090066 95.89209)
+ (xy 137.117195 96.153363) (xy 137.194776 96.404321) (xy 137.311947 96.623532) (xy 137.519907 96.710679) (xy 138.345586 95.885)
+ (xy 138.345586 96.053828) (xy 137.604321 96.795093) (xy 137.691468 97.003053) (xy 137.92378 97.125651) (xy 138.175546 97.200571)
+ (xy 138.43709 97.224934) (xy 138.698363 97.197805) (xy 138.949321 97.120224) (xy 139.168532 97.003053) (xy 139.255679 96.795093)
+ (xy 139.255679 99.246506) (xy 137.541 99.246506) (xy 137.407044 99.257394) (xy 137.184746 99.326905) (xy 136.990536 99.455476)
+ (xy 136.839726 99.632971) (xy 136.806122 99.7077) (xy 136.525 99.7077) (xy 136.409377 99.719036) (xy 136.293718 99.729156)
+ (xy 136.287372 99.730999) (xy 136.280789 99.731645) (xy 136.169553 99.765228) (xy 136.058079 99.797615) (xy 136.052211 99.800656)
+ (xy 136.04588 99.802568) (xy 135.943302 99.857109) (xy 135.840225 99.91054) (xy 135.835059 99.914663) (xy 135.829221 99.917768)
+ (xy 135.739174 99.991207) (xy 135.648455 100.063629) (xy 135.639253 100.072701) (xy 135.639063 100.072857) (xy 135.638917 100.073033)
+ (xy 135.635954 100.075955) (xy 134.365955 101.345955) (xy 131.55921 104.1527) (xy 130.099494 104.1527) (xy 130.099494 103.87)
+ (xy 130.088606 103.736044) (xy 130.019095 103.513746) (xy 129.890524 103.319536) (xy 129.721486 103.175911) (xy 129.721486 100.867292)
+ (xy 129.693068 100.584173) (xy 129.609962 100.312038) (xy 129.478371 100.065848) (xy 129.259047 99.965367) (xy 129.174633 100.049781)
+ (xy 129.174633 99.880953) (xy 129.074152 99.661629) (xy 128.822958 99.527966) (xy 128.550515 99.445876) (xy 128.267292 99.418514)
+ (xy 127.984173 99.446932) (xy 127.712038 99.530038) (xy 127.465848 99.661629) (xy 127.365367 99.880953) (xy 128.27 100.785586)
+ (xy 129.174633 99.880953) (xy 129.174633 100.049781) (xy 128.354414 100.87) (xy 129.259047 101.774633) (xy 129.478371 101.674152)
+ (xy 129.612034 101.422958) (xy 129.694124 101.150515) (xy 129.721486 100.867292) (xy 129.721486 103.175911) (xy 129.713029 103.168726)
+ (xy 129.500605 103.073205) (xy 129.27 103.040506) (xy 129.174633 103.040506) (xy 129.174633 101.859047) (xy 128.27 100.954414)
+ (xy 128.185586 101.038828) (xy 128.185586 100.87) (xy 127.280953 99.965367) (xy 127.061629 100.065848) (xy 126.927966 100.317042)
+ (xy 126.845876 100.589485) (xy 126.818514 100.872708) (xy 126.846932 101.155827) (xy 126.930038 101.427962) (xy 127.061629 101.674152)
+ (xy 127.280953 101.774633) (xy 128.185586 100.87) (xy 128.185586 101.038828) (xy 127.365367 101.859047) (xy 127.465848 102.078371)
+ (xy 127.717042 102.212034) (xy 127.989485 102.294124) (xy 128.272708 102.321486) (xy 128.555827 102.293068) (xy 128.827962 102.209962)
+ (xy 129.074152 102.078371) (xy 129.174633 101.859047) (xy 129.174633 103.040506) (xy 127.27 103.040506) (xy 127.136044 103.051394)
+ (xy 126.913746 103.120905) (xy 126.719536 103.249476) (xy 126.568726 103.426971) (xy 126.473205 103.639395) (xy 126.440506 103.87)
+ (xy 126.440506 105.87) (xy 126.451394 106.003956) (xy 126.520905 106.226254) (xy 126.649476 106.420464) (xy 126.826971 106.571274)
+ (xy 127.039395 106.666795) (xy 127.27 106.699494) (xy 129.27 106.699494) (xy 129.403956 106.688606) (xy 129.472093 106.6673)
+ (xy 132.08 106.6673) (xy 132.195577 106.655967) (xy 132.311282 106.645844) (xy 132.317627 106.644) (xy 132.324211 106.643355)
+ (xy 132.435446 106.609771) (xy 132.546921 106.577385) (xy 132.552788 106.574343) (xy 132.55912 106.572432) (xy 132.661697 106.51789)
+ (xy 132.764775 106.46446) (xy 132.76994 106.460336) (xy 132.775779 106.457232) (xy 132.865794 106.383816) (xy 132.956545 106.311372)
+ (xy 132.965743 106.3023) (xy 132.965937 106.302143) (xy 132.966085 106.301963) (xy 132.969045 106.299045) (xy 136.144045 103.124045)
+ (xy 136.897831 102.370259) (xy 136.920476 102.404464) (xy 137.097971 102.555274) (xy 137.310395 102.650795) (xy 137.541 102.683494)
+ (xy 139.319 102.683494) (xy 139.452956 102.672606) (xy 139.675254 102.603095) (xy 139.869464 102.474524) (xy 140.020274 102.297029)
+ (xy 140.053877 102.2223) (xy 142.354209 102.2223) (xy 144.5133 104.38139) (xy 144.5133 107.563823) (xy 144.353104 107.720699)
+ (xy 144.149073 108.018678) (xy 144.006806 108.350612) (xy 143.931722 108.703857) (xy 143.92668 109.064958) (xy 143.991872 109.420162)
+ (xy 144.124815 109.755939) (xy 144.320446 110.059498) (xy 144.442147 110.185523) (xy 144.163861 110.068543) (xy 143.810101 109.995927)
+ (xy 143.448973 109.993406) (xy 143.094233 110.061076) (xy 142.759392 110.19636) (xy 142.457206 110.394105) (xy 142.268499 110.5789)
+ (xy 142.20199 110.5789) (xy 138.684045 107.060955) (xy 138.594336 106.987267) (xy 138.505333 106.912585) (xy 138.499539 106.909399)
+ (xy 138.49443 106.905203) (xy 138.392035 106.850299) (xy 138.290303 106.794371) (xy 138.284005 106.792373) (xy 138.278175 106.789247)
+ (xy 138.167058 106.755275) (xy 138.056407 106.720175) (xy 138.049838 106.719438) (xy 138.043515 106.717505) (xy 137.927963 106.705767)
+ (xy 137.812555 106.692823) (xy 137.799628 106.692732) (xy 137.799388 106.692708) (xy 137.799163 106.692729) (xy 137.795 106.6927)
+ (xy 136.751449 106.6927) (xy 136.618359 106.602929) (xy 136.34284 106.487112) (xy 136.050072 106.427015) (xy 135.751208 106.424929)
+ (xy 135.45763 106.480932) (xy 135.18052 106.592891) (xy 134.974799 106.72751) (xy 134.899553 106.750228) (xy 134.788079 106.782615)
+ (xy 134.782211 106.785656) (xy 134.77588 106.787568) (xy 134.673302 106.842109) (xy 134.570225 106.89554) (xy 134.565059 106.899663)
+ (xy 134.559221 106.902768) (xy 134.469174 106.976207) (xy 134.378455 107.048629) (xy 134.369253 107.057701) (xy 134.369063 107.057857)
+ (xy 134.368917 107.058033) (xy 134.365954 107.060955) (xy 133.095955 108.330955) (xy 133.022267 108.420663) (xy 132.947585 108.509667)
+ (xy 132.944399 108.51546) (xy 132.940203 108.52057) (xy 132.885299 108.622964) (xy 132.829371 108.724697) (xy 132.827373 108.730994)
+ (xy 132.824247 108.736825) (xy 132.790275 108.847941) (xy 132.755175 108.958593) (xy 132.754438 108.965161) (xy 132.752505 108.971485)
+ (xy 132.740767 109.087036) (xy 132.727823 109.202445) (xy 132.727732 109.215371) (xy 132.727708 109.215612) (xy 132.727729 109.215836)
+ (xy 132.7277 109.22) (xy 132.7277 116.205) (xy 132.739032 116.320577) (xy 132.749156 116.436282) (xy 132.750999 116.442627)
+ (xy 132.751645 116.449211) (xy 132.785228 116.560446) (xy 132.817615 116.671921) (xy 132.820656 116.677788) (xy 132.822568 116.68412)
+ (xy 132.877109 116.786697) (xy 132.93054 116.889775) (xy 132.934663 116.89494) (xy 132.937768 116.900779) (xy 133.011183 116.990794)
+ (xy 133.083628 117.081545) (xy 133.092699 117.090743) (xy 133.092857 117.090937) (xy 133.093036 117.091085) (xy 133.095955 117.094045)
+ (xy 133.653071 117.651161) (xy 133.53201 117.689574) (xy 133.359114 117.781991) (xy 133.294867 117.970452) (xy 133.985 118.660586)
+ (xy 133.999142 118.646443) (xy 134.083556 118.730857) (xy 134.069414 118.745) (xy 134.083556 118.759142) (xy 133.999142 118.843556)
+ (xy 133.985 118.829414) (xy 133.900586 118.913828) (xy 133.900586 118.745) (xy 133.210452 118.054867) (xy 133.021991 118.119114)
+ (xy 132.91839 118.319013) (xy 132.855779 118.535283) (xy 132.836562 118.759613) (xy 132.86148 118.983382) (xy 132.929574 119.19799)
+ (xy 133.021991 119.370886) (xy 133.210452 119.435133) (xy 133.900586 118.745) (xy 133.900586 118.913828) (xy 133.294867 119.519548)
+ (xy 133.359114 119.708009) (xy 133.559013 119.81161) (xy 133.775283 119.874221) (xy 133.999613 119.893438) (xy 134.223382 119.86852)
+ (xy 134.2517 119.859534) (xy 134.2517 121.031) (xy 134.263032 121.146577) (xy 134.273156 121.262282) (xy 134.274999 121.268627)
+ (xy 134.275645 121.275211) (xy 134.309228 121.386446) (xy 134.341615 121.497921) (xy 134.344656 121.503788) (xy 134.346568 121.51012)
+ (xy 134.401109 121.612697) (xy 134.45454 121.715775) (xy 134.458663 121.72094) (xy 134.461768 121.726779) (xy 134.535183 121.816794)
+ (xy 134.607628 121.907545) (xy 134.616699 121.916743) (xy 134.616857 121.916937) (xy 134.617036 121.917085) (xy 134.619955 121.920045)
+ (xy 135.508955 122.809045) (xy 135.598663 122.882732) (xy 135.687667 122.957415) (xy 135.69346 122.9606) (xy 135.69857 122.964797)
+ (xy 135.800945 123.01969) (xy 135.902345 123.075435) (xy 136.531915 123.705005) (xy 136.45052 123.737891) (xy 136.297995 123.8377)
+ (xy 134.50579 123.8377) (xy 130.099494 119.431403) (xy 130.099494 117.84) (xy 130.088606 117.706044) (xy 130.019095 117.483746)
+ (xy 129.890524 117.289536) (xy 129.721486 117.145911) (xy 129.721486 114.837292) (xy 129.693068 114.554173) (xy 129.609962 114.282038)
+ (xy 129.478371 114.035848) (xy 129.259047 113.935367) (xy 129.174633 114.019781) (xy 129.174633 113.850953) (xy 129.074152 113.631629)
+ (xy 128.822958 113.497966) (xy 128.550515 113.415876) (xy 128.267292 113.388514) (xy 127.984173 113.416932) (xy 127.712038 113.500038)
+ (xy 127.465848 113.631629) (xy 127.365367 113.850953) (xy 128.27 114.755586) (xy 129.174633 113.850953) (xy 129.174633 114.019781)
+ (xy 128.354414 114.84) (xy 129.259047 115.744633) (xy 129.478371 115.644152) (xy 129.612034 115.392958) (xy 129.694124 115.120515)
+ (xy 129.721486 114.837292) (xy 129.721486 117.145911) (xy 129.713029 117.138726) (xy 129.500605 117.043205) (xy 129.27 117.010506)
+ (xy 129.174633 117.010506) (xy 129.174633 115.829047) (xy 128.27 114.924414) (xy 128.185586 115.008828) (xy 128.185586 114.84)
+ (xy 127.280953 113.935367) (xy 127.061629 114.035848) (xy 126.927966 114.287042) (xy 126.845876 114.559485) (xy 126.818514 114.842708)
+ (xy 126.846932 115.125827) (xy 126.930038 115.397962) (xy 127.061629 115.644152) (xy 127.280953 115.744633) (xy 128.185586 114.84)
+ (xy 128.185586 115.008828) (xy 127.365367 115.829047) (xy 127.465848 116.048371) (xy 127.717042 116.182034) (xy 127.989485 116.264124)
+ (xy 128.272708 116.291486) (xy 128.555827 116.263068) (xy 128.827962 116.179962) (xy 129.074152 116.048371) (xy 129.174633 115.829047)
+ (xy 129.174633 117.010506) (xy 127.27 117.010506) (xy 127.136044 117.021394) (xy 126.913746 117.090905) (xy 126.719536 117.219476)
+ (xy 126.568726 117.396971) (xy 126.473205 117.609395) (xy 126.440506 117.84) (xy 126.440506 119.84) (xy 126.451394 119.973956)
+ (xy 126.520905 120.196254) (xy 126.649476 120.390464) (xy 126.826971 120.541274) (xy 127.039395 120.636795) (xy 127.27 120.669494)
+ (xy 127.781403 120.669494) (xy 132.682111 125.570202) (xy 132.643047 125.627255) (xy 132.525309 125.901959) (xy 132.46317 126.194299)
+ (xy 132.458997 126.493142) (xy 132.512949 126.787104) (xy 132.622971 127.064988) (xy 132.784872 127.31621) (xy 132.992486 127.5312)
+ (xy 133.237904 127.70177) (xy 133.511779 127.821423) (xy 133.803679 127.885602) (xy 134.102486 127.891861) (xy 134.396817 127.839962)
+ (xy 134.675462 127.731883) (xy 134.927808 127.571739) (xy 135.144243 127.365631) (xy 135.316522 127.12141) (xy 135.438084 126.848377)
+ (xy 135.504299 126.556932) (xy 135.507155 126.3523) (xy 136.298561 126.3523) (xy 136.412904 126.43177) (xy 136.686779 126.551423)
+ (xy 136.978679 126.615602) (xy 137.277486 126.621861) (xy 137.571817 126.569962) (xy 137.8077 126.478469) (xy 137.8077 130.175)
+ (xy 137.819032 130.290577) (xy 137.829156 130.406282) (xy 137.830999 130.412627) (xy 137.831645 130.419211) (xy 137.865228 130.530446)
+ (xy 137.897615 130.641921) (xy 137.900656 130.647788) (xy 137.902568 130.65412) (xy 137.957109 130.756697) (xy 138.01054 130.859775)
+ (xy 138.014663 130.86494) (xy 138.017768 130.870779) (xy 138.091183 130.960794) (xy 138.163628 131.051545) (xy 138.172699 131.060743)
+ (xy 138.172857 131.060937) (xy 138.173036 131.061085) (xy 138.175955 131.064045) (xy 138.937909 131.826) (xy 128.671224 131.826)
+ (xy 128.747968 131.777297) (xy 129.149238 131.395173) (xy 129.468645 130.942385) (xy 129.694021 130.436182) (xy 129.816783 129.895842)
+ (xy 129.825621 129.262945) (xy 129.717994 128.719389) (xy 129.506839 128.20709) (xy 129.2002 127.745561) (xy 128.809756 127.352381)
+ (xy 128.350378 127.042527) (xy 127.839566 126.827801) (xy 127.296774 126.716382) (xy 126.742679 126.712514) (xy 126.198384 126.816344)
+ (xy 125.684623 127.023916) (xy 125.220965 127.327326) (xy 124.825069 127.715016) (xy 124.714 127.877227) (xy 124.714 95.648953)
+ (xy 124.77496 95.743545) (xy 125.159877 96.142137) (xy 125.614883 96.458375) (xy 126.122648 96.680212) (xy 126.663831 96.799199)
+ (xy 127.217818 96.810803) (xy 127.763509 96.714583) (xy 128.280118 96.514204) (xy 128.747968 96.217297) (xy 129.149238 95.835173)
+ (xy 129.468645 95.382385) (xy 129.694021 94.876182) (xy 129.816783 94.335842) (xy 129.825621 93.702945) (xy 129.717994 93.159389)
+ (xy 129.506839 92.64709) (xy 129.2002 92.185561) (xy 128.809756 91.792381) (xy 128.663899 91.694) (xy 163.433018 91.694)
+ (xy 163.320965 91.767326) (xy 162.925069 92.155016) (xy 162.612015 92.612219) (xy 162.393729 93.12152) (xy 162.278523 93.663521)
+ (xy 162.270786 94.217576) (xy 162.370814 94.762582) (xy 162.574795 95.277779) (xy 162.87496 95.743545) (xy 163.259877 96.142137)
+ (xy 163.714883 96.458375) (xy 164.222648 96.680212) (xy 164.763831 96.799199) (xy 165.317818 96.810803) (xy 165.863509 96.714583)
+ (xy 166.380118 96.514204) (xy 166.847968 96.217297) (xy 167.249238 95.835173) (xy 167.386 95.6413) (xy 167.386 127.8747)
+ )
+ )
+ )
+)
diff --git a/demos/ecc83/ecc83-pp.net b/demos/ecc83/ecc83-pp.net
new file mode 100644
index 0000000..06bed3a
--- /dev/null
+++ b/demos/ecc83/ecc83-pp.net
@@ -0,0 +1,211 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/ecc83/ecc83-pp.sch)
+ (date "17/05/2015 17:07:31")
+ (tool "Eeschema (2015-05-13 BZR 5653)-product")
+ (sheet (number 1) (name /) (tstamps /)
+ (title_block
+ (title "ECC Push-Pull")
+ (company)
+ (rev 0.1)
+ (date "Sat 21 Mar 2015")
+ (source ecc83-pp.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value "")))))
+ (components
+ (comp (ref U1)
+ (value ECC83)
+ (footprint Valves:VALVE-ECC-83-1)
+ (libsource (lib ecc83_schlib) (part ECC83))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 48B4F266))
+ (comp (ref P4)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 456A8ACC))
+ (comp (ref C1)
+ (value 10uF)
+ (footprint discret:C2V10)
+ (libsource (lib ecc83_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F4BE))
+ (comp (ref P3)
+ (value POWER)
+ (footprint connect:bornier2)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F4A5))
+ (comp (ref P2)
+ (value OUT)
+ (footprint connect:bornier2)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F46C))
+ (comp (ref P1)
+ (value IN)
+ (footprint connect:bornier2)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F464))
+ (comp (ref C2)
+ (value 680nF)
+ (footprint discret:C2)
+ (libsource (lib ecc83_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F3BE))
+ (comp (ref R3)
+ (value 100K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F3AD))
+ (comp (ref R4)
+ (value 47K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F3A2))
+ (comp (ref R2)
+ (value 1.5K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F39D))
+ (comp (ref R1)
+ (value 1.5K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F38A))
+ (comp (ref P5)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A5890A))
+ (comp (ref P6)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A58C65))
+ (comp (ref P7)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A58C8A))
+ (comp (ref P8)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A58CA3)))
+ (libparts
+ (libpart (lib ecc83_schlib) (part C)
+ (footprints
+ (fp C?)
+ (fp C_????_*)
+ (fp C_????)
+ (fp SMD*_c)
+ (fp Capacitor*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib ecc83_schlib) (part CONN_1)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_1))
+ (pins
+ (pin (num 1) (name 1) (type passive))))
+ (libpart (lib ecc83_schlib) (part CONN_2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib ecc83_schlib) (part ECC81)
+ (aliases
+ (alias ECC83))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) ECC81)
+ (field (name Footprint) VALVE-NOVAL_P))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name G) (type input))
+ (pin (num 3) (name K) (type passive))
+ (pin (num 4) (name F1) (type input))
+ (pin (num 5) (name F1) (type input))
+ (pin (num 6) (name A) (type passive))
+ (pin (num 7) (name G) (type input))
+ (pin (num 8) (name K) (type passive))
+ (pin (num 9) (name F2) (type input))))
+ (libpart (lib ecc83_schlib) (part R)
+ (footprints
+ (fp R_*)
+ (fp Resistor_*))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive)))))
+ (libraries
+ (library (logical ecc83_schlib)
+ (uri ecc83_schlib.lib)))
+ (nets
+ (net (code 1) (name "Net-(P1-Pad2)")
+ (node (ref U1) (pin 2))
+ (node (ref P1) (pin 2))
+ (node (ref R4) (pin 1)))
+ (net (code 2) (name GND)
+ (node (ref P2) (pin 2))
+ (node (ref R2) (pin 2))
+ (node (ref R4) (pin 2))
+ (node (ref R3) (pin 2))
+ (node (ref P1) (pin 1))
+ (node (ref P3) (pin 2))
+ (node (ref C1) (pin 2)))
+ (net (code 3) (name "Net-(C1-Pad1)")
+ (node (ref C1) (pin 1))
+ (node (ref P3) (pin 1))
+ (node (ref U1) (pin 6)))
+ (net (code 4) (name "Net-(C2-Pad2)")
+ (node (ref C2) (pin 2))
+ (node (ref U1) (pin 8))
+ (node (ref R1) (pin 2)))
+ (net (code 5) (name "Net-(C2-Pad1)")
+ (node (ref R3) (pin 1))
+ (node (ref C2) (pin 1))
+ (node (ref P2) (pin 1)))
+ (net (code 6) (name "Net-(P8-Pad1)")
+ (node (ref P8) (pin 1)))
+ (net (code 7) (name "Net-(P7-Pad1)")
+ (node (ref P7) (pin 1)))
+ (net (code 8) (name "Net-(P6-Pad1)")
+ (node (ref P6) (pin 1)))
+ (net (code 9) (name "Net-(P5-Pad1)")
+ (node (ref P5) (pin 1)))
+ (net (code 10) (name "Net-(P4-Pad2)")
+ (node (ref P4) (pin 2))
+ (node (ref U1) (pin 9)))
+ (net (code 11) (name "Net-(R2-Pad1)")
+ (node (ref U1) (pin 3))
+ (node (ref R2) (pin 1)))
+ (net (code 12) (name "Net-(R1-Pad1)")
+ (node (ref R1) (pin 1))
+ (node (ref U1) (pin 1))
+ (node (ref U1) (pin 7)))
+ (net (code 13) (name "Net-(P4-Pad1)")
+ (node (ref U1) (pin 5))
+ (node (ref P4) (pin 1))
+ (node (ref U1) (pin 4))))) \ No newline at end of file
diff --git a/demos/ecc83/ecc83-pp.pro b/demos/ecc83/ecc83-pp.pro
new file mode 100644
index 0000000..3ea4647
--- /dev/null
+++ b/demos/ecc83/ecc83-pp.pro
@@ -0,0 +1,39 @@
+update=17/05/2015 17:04:51
+last_client=kicad
+[general]
+version=1
+RootSch=ecc83-pp.sch
+BoardNm=ecc83-pp.brd
+[common]
+NetDir=
+[cvpcb]
+version=1
+NetIExt=.net
+[cvpcb/libraries]
+EquName1=devcms
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=
+UseCmpFile=1
+PadDrill=1.9304
+PadDrillOvalY=1.9304
+PadSizeH=2.794
+PadSizeV=1.397
+PcbTextSizeV=2.032
+PcbTextSizeH=1.524
+PcbTextThickness=0.3048
+ModuleTextSizeV=1.524
+ModuleTextSizeH=1.524
+ModuleTextSizeThickness=0.3048
+SolderMaskClearance=0.09999999999999999
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.381
+BoardOutlineThickness=0.381
+ModuleOutlineThickness=0.381
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=ecc83_schlib
+LibName2=power
diff --git a/demos/ecc83/ecc83-pp.sch b/demos/ecc83/ecc83-pp.sch
new file mode 100644
index 0000000..41cf370
--- /dev/null
+++ b/demos/ecc83/ecc83-pp.sch
@@ -0,0 +1,379 @@
+EESchema Schematic File Version 2
+LIBS:ecc83_schlib
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title "ECC Push-Pull"
+Date "Sat 21 Mar 2015"
+Rev "0.1"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 2500 3400 2500 3700
+Wire Wire Line
+ 6100 4650 6100 4850
+Wire Wire Line
+ 2000 2000 6300 2000
+Connection ~ 3400 2000
+Wire Wire Line
+ 7050 3000 7800 3000
+Wire Wire Line
+ 7300 3000 7300 3200
+Wire Wire Line
+ 2000 3500 2600 3500
+Wire Wire Line
+ 2400 3500 2400 3400
+Wire Wire Line
+ 6200 3500 6200 3850
+$Comp
+L ECC83 U1
+U 3 1 48B4F266
+P 2500 2950
+F 0 "U1" H 2500 3400 50 0000 C CNN
+F 1 "ECC83" H 2500 3300 50 0000 C CNN
+F 2 "Valves:VALVE-ECC-83-1" V 2250 2950 30 0000 C CNN
+F 3 "" H 2500 2950 60 0001 C CNN
+ 3 2500 2950
+ 1 0 0 -1
+$EndComp
+$Comp
+L ECC83 U1
+U 2 1 48B4F263
+P 6200 4250
+F 0 "U1" H 6350 4600 50 0000 C CNN
+F 1 "ECC83" H 6400 3900 50 0000 C CNN
+F 2 "Valves:VALVE-ECC-83-1" H 6400 3850 30 0000 C CNN
+F 3 "" H 6200 4250 60 0001 C CNN
+ 2 6200 4250
+ 1 0 0 -1
+$EndComp
+$Comp
+L ECC83 U1
+U 1 1 48B4F256
+P 6300 2550
+F 0 "U1" H 6450 2900 50 0000 C CNN
+F 1 "ECC83" H 6050 2250 50 0000 C CNN
+F 2 "Valves:VALVE-ECC-83-1" H 6570 2150 50 0001 C CNN
+F 3 "" H 6300 2550 60 0001 C CNN
+ 1 6300 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR01
+U 1 1 457DBAF8
+P 7700 3300
+F 0 "#PWR01" H 7700 3300 30 0001 C CNN
+F 1 "GND" H 7700 3230 30 0001 C CNN
+F 2 "" H 7700 3300 60 0001 C CNN
+F 3 "" H 7700 3300 60 0001 C CNN
+ 1 7700 3300
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR02
+U 1 1 457DBAF5
+P 7300 3550
+F 0 "#PWR02" H 7300 3550 30 0001 C CNN
+F 1 "GND" H 7300 3480 30 0001 C CNN
+F 2 "" H 7300 3550 60 0001 C CNN
+F 3 "" H 7300 3550 60 0001 C CNN
+ 1 7300 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR03
+U 1 1 457DBAF1
+P 6100 5200
+F 0 "#PWR03" H 6100 5200 30 0001 C CNN
+F 1 "GND" H 6100 5130 30 0001 C CNN
+F 2 "" H 6100 5200 60 0001 C CNN
+F 3 "" H 6100 5200 60 0001 C CNN
+ 1 6100 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR04
+U 1 1 457DBAEF
+P 5700 5200
+F 0 "#PWR04" H 5700 5200 30 0001 C CNN
+F 1 "GND" H 5700 5130 30 0001 C CNN
+F 2 "" H 5700 5200 60 0001 C CNN
+F 3 "" H 5700 5200 60 0001 C CNN
+ 1 5700 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG05
+U 1 1 457DBAC0
+P 3000 2350
+F 0 "#FLG05" H 3000 2620 30 0001 C CNN
+F 1 "PWR_FLAG" H 3000 2580 30 0000 C CNN
+F 2 "" H 3000 2350 60 0001 C CNN
+F 3 "" H 3000 2350 60 0001 C CNN
+ 1 3000 2350
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P4
+U 1 1 456A8ACC
+P 1650 3600
+F 0 "P4" V 1600 3600 40 0000 C CNN
+F 1 "CONN_2" V 1700 3600 40 0000 C CNN
+F 2 "connect:bornier2" H 1650 3600 60 0001 C CNN
+F 3 "" H 1650 3600 60 0001 C CNN
+ 1 1650 3600
+ -1 0 0 -1
+$EndComp
+$Comp
+L C C1
+U 1 1 4549F4BE
+P 3400 2250
+F 0 "C1" H 3450 2350 50 0000 L CNN
+F 1 "10uF" H 3150 2350 50 0000 L CNN
+F 2 "discret:C2V10" H 3400 2250 60 0001 C CNN
+F 3 "" H 3400 2250 60 0001 C CNN
+ 1 3400 2250
+ -1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P3
+U 1 1 4549F4A5
+P 1650 2100
+F 0 "P3" V 1600 2100 40 0000 C CNN
+F 1 "POWER" V 1700 2100 40 0000 C CNN
+F 2 "connect:bornier2" H 1650 2100 60 0001 C CNN
+F 3 "" H 1650 2100 60 0001 C CNN
+ 1 1650 2100
+ -1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P2
+U 1 1 4549F46C
+P 8150 3100
+F 0 "P2" V 8100 3100 40 0000 C CNN
+F 1 "OUT" V 8200 3100 40 0000 C CNN
+F 2 "connect:bornier2" H 8150 3100 60 0001 C CNN
+F 3 "" H 8150 3100 60 0001 C CNN
+ 1 8150 3100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P1
+U 1 1 4549F464
+P 5000 4350
+F 0 "P1" V 4950 4350 40 0000 C CNN
+F 1 "IN" V 5050 4350 40 0000 C CNN
+F 2 "connect:bornier2" H 5000 4600 50 0000 C CNN
+F 3 "" H 5000 4350 60 0001 C CNN
+ 1 5000 4350
+ -1 0 0 1
+$EndComp
+$Comp
+L C C2
+U 1 1 4549F3BE
+P 6900 3000
+F 0 "C2" V 6750 3000 50 0000 C CNN
+F 1 "680nF" V 7050 3000 50 0000 C CNN
+F 2 "discret:C2" H 6900 3000 60 0001 C CNN
+F 3 "" H 6900 3000 60 0001 C CNN
+ 1 6900 3000
+ 0 1 1 0
+$EndComp
+$Comp
+L R R3
+U 1 1 4549F3AD
+P 7300 3350
+F 0 "R3" H 7200 3550 50 0000 C CNN
+F 1 "100K" V 7300 3350 50 0000 C CNN
+F 2 "discret:R3" H 7300 3350 60 0001 C CNN
+F 3 "" H 7300 3350 60 0001 C CNN
+ 1 7300 3350
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R4
+U 1 1 4549F3A2
+P 5700 5000
+F 0 "R4" H 5600 5200 50 0000 C CNN
+F 1 "47K" V 5700 5000 50 0000 C CNN
+F 2 "discret:R3" H 5700 5000 60 0001 C CNN
+F 3 "" H 5700 5000 60 0001 C CNN
+ 1 5700 5000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R2
+U 1 1 4549F39D
+P 6100 5000
+F 0 "R2" H 6000 5200 50 0000 C CNN
+F 1 "1.5K" V 6100 5000 50 0000 C CNN
+F 2 "discret:R3" H 6100 5000 60 0001 C CNN
+F 3 "" H 6100 5000 60 0001 C CNN
+ 1 6100 5000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 4549F38A
+P 6200 3350
+F 0 "R1" H 6300 3150 50 0000 C CNN
+F 1 "1.5K" V 6200 3350 50 0000 C CNN
+F 2 "discret:R3" H 6200 3350 60 0001 C CNN
+F 3 "" H 6200 3350 60 0001 C CNN
+ 1 6200 3350
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #PWR06
+U 1 1 53B6F370
+P 3400 2450
+F 0 "#PWR06" H 3400 2450 30 0001 C CNN
+F 1 "GND" H 3400 2380 30 0001 C CNN
+F 2 "" H 3400 2450 60 0001 C CNN
+F 3 "" H 3400 2450 60 0001 C CNN
+ 1 3400 2450
+ -1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P5
+U 1 1 54A5890A
+P 6250 7000
+F 0 "P5" H 6330 7000 40 0000 L CNN
+F 1 "CONN_1" H 6250 7055 30 0001 C CNN
+F 2 "connect:1pin" H 6250 7000 60 0001 C CNN
+F 3 "" H 6250 7000 60 0000 C CNN
+ 1 6250 7000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P6
+U 1 1 54A58C65
+P 6250 7100
+F 0 "P6" H 6330 7100 40 0000 L CNN
+F 1 "CONN_1" H 6250 7155 30 0001 C CNN
+F 2 "connect:1pin" H 6250 7100 60 0001 C CNN
+F 3 "" H 6250 7100 60 0000 C CNN
+ 1 6250 7100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P7
+U 1 1 54A58C8A
+P 6250 7200
+F 0 "P7" H 6330 7200 40 0000 L CNN
+F 1 "CONN_1" H 6250 7255 30 0001 C CNN
+F 2 "connect:1pin" H 6250 7200 60 0001 C CNN
+F 3 "" H 6250 7200 60 0000 C CNN
+ 1 6250 7200
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P8
+U 1 1 54A58CA3
+P 6250 7300
+F 0 "P8" H 6330 7300 40 0000 L CNN
+F 1 "CONN_1" H 6250 7355 30 0001 C CNN
+F 2 "connect:1pin" H 6250 7300 60 0001 C CNN
+F 3 "" H 6250 7300 60 0000 C CNN
+ 1 6250 7300
+ 1 0 0 -1
+$EndComp
+Connection ~ 2400 3500
+Wire Wire Line
+ 2500 3700 2000 3700
+Wire Wire Line
+ 2600 3500 2600 3400
+Wire Wire Line
+ 5350 4250 5900 4250
+Wire Wire Line
+ 5700 4250 5700 4850
+Connection ~ 5700 4250
+Wire Wire Line
+ 6200 2950 6200 3200
+Connection ~ 6200 3700
+Wire Wire Line
+ 6000 2550 5900 2550
+Wire Wire Line
+ 5900 2550 5900 3700
+Wire Wire Line
+ 5900 3700 6200 3700
+Connection ~ 7300 3000
+Wire Wire Line
+ 6750 3000 6200 3000
+Connection ~ 6200 3000
+Wire Wire Line
+ 6300 2000 6300 2150
+Wire Wire Line
+ 3400 2100 3400 2000
+Wire Wire Line
+ 3400 2450 3400 2400
+$Comp
+L PWR_FLAG #FLG07
+U 1 1 550EA992
+P 3000 1950
+F 0 "#FLG07" H 3000 2220 30 0001 C CNN
+F 1 "PWR_FLAG" H 3000 2180 30 0000 C CNN
+F 2 "" H 3000 1950 60 0001 C CNN
+F 3 "" H 3000 1950 60 0001 C CNN
+ 1 3000 1950
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3000 1950 3000 2000
+Connection ~ 3000 2000
+$Comp
+L GND #PWR08
+U 1 1 550EAB37
+P 3000 2550
+F 0 "#PWR08" H 3000 2550 30 0001 C CNN
+F 1 "GND" H 3000 2480 30 0001 C CNN
+F 2 "" H 3000 2550 60 0001 C CNN
+F 3 "" H 3000 2550 60 0001 C CNN
+ 1 3000 2550
+ -1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3000 2350 3000 2550
+Wire Wire Line
+ 2000 2200 2800 2200
+Wire Wire Line
+ 2800 2200 2800 2450
+Wire Wire Line
+ 2800 2450 3000 2450
+Connection ~ 3000 2450
+$Comp
+L GND #PWR09
+U 1 1 550EAF5A
+P 5450 4600
+F 0 "#PWR09" H 5450 4600 30 0001 C CNN
+F 1 "GND" H 5450 4530 30 0001 C CNN
+F 2 "" H 5450 4600 60 0000 C CNN
+F 3 "" H 5450 4600 60 0000 C CNN
+ 1 5450 4600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5450 4600 5450 4450
+Wire Wire Line
+ 5450 4450 5350 4450
+Wire Wire Line
+ 6100 5150 6100 5200
+Wire Wire Line
+ 5700 5150 5700 5200
+Wire Wire Line
+ 7800 3200 7700 3200
+Wire Wire Line
+ 7700 3200 7700 3300
+Wire Wire Line
+ 7300 3550 7300 3500
+NoConn ~ 6100 7000
+NoConn ~ 6100 7100
+NoConn ~ 6100 7200
+NoConn ~ 6100 7300
+$EndSCHEMATC
diff --git a/demos/ecc83/ecc83-pp_v2-cache.lib b/demos/ecc83/ecc83-pp_v2-cache.lib
new file mode 100644
index 0000000..f862be2
--- /dev/null
+++ b/demos/ecc83/ecc83-pp_v2-cache.lib
@@ -0,0 +1,141 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "C" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ C?
+ C_????_*
+ C_????
+ SMD*_c
+ Capacitor*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# ECC81
+#
+DEF ECC81 U 0 0 Y Y 3 L N
+F0 "U" 130 310 50 H V C CNN
+F1 "ECC81" 350 -300 50 H V C CNN
+F2 "VALVE-NOVAL_P" 400 -350 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS ECC83
+DRAW
+P 2 1 0 0 -100 -200 -100 -300 N
+P 2 1 0 0 0 200 0 300 N
+P 2 2 0 0 -100 -200 -100 -300 N
+P 2 2 0 0 0 200 0 300 N
+A 0 -100 200 -1799 -1 0 1 0 N -200 -100 200 -100
+A 0 100 200 1 1799 0 1 0 N 200 100 -200 100
+P 2 0 1 0 200 100 200 -100 N
+P 3 0 1 0 -200 100 -200 -100 -200 -100 N
+A 0 -225 103 142 1659 1 1 10 N 100 -200 -100 -200
+P 2 1 1 0 -200 0 -125 0 N
+P 2 1 1 6 -75 0 -125 0 N
+P 2 1 1 6 -25 0 25 0 N
+P 2 1 1 6 75 0 125 0 N
+P 3 1 1 10 -100 200 110 200 110 200 N
+X A 6 0 400 100 D 40 40 1 1 P
+X G 7 -300 0 100 R 40 40 1 1 I
+X K 8 -100 -400 100 U 40 40 1 1 P
+A 0 -225 103 142 1659 2 1 10 N 100 -200 -100 -200
+P 2 2 1 0 -200 0 -125 0 N
+P 2 2 1 6 -75 0 -125 0 N
+P 2 2 1 6 -25 0 25 0 N
+P 2 2 1 6 75 0 125 0 N
+P 3 2 1 10 -100 200 110 200 110 200 N
+X A 1 0 400 100 D 40 40 2 1 P
+X G 2 -300 0 100 R 40 40 2 1 I
+X K 3 -100 -400 100 U 40 40 2 1 P
+A -50 -275 55 265 1534 3 1 0 N 0 -250 -100 -250
+A 50 -275 55 265 1534 3 1 0 N 100 -250 0 -250
+X F1 4 -100 -450 200 U 40 40 3 1 I
+X F1 5 100 -450 200 U 40 40 3 1 I
+X F2 9 0 -450 200 U 40 40 3 1 I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -250 50 H I C CNN
+F1 "GND" 0 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R_*
+ Resistor_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 60 60 1 1 P
+X ~ 2 0 -150 50 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/ecc83/ecc83-pp_v2.kicad_pcb b/demos/ecc83/ecc83-pp_v2.kicad_pcb
new file mode 100644
index 0000000..890c85f
--- /dev/null
+++ b/demos/ecc83/ecc83-pp_v2.kicad_pcb
@@ -0,0 +1,690 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-03-04 BZR 5478)-product")
+
+ (general
+ (links 21)
+ (no_connects 1)
+ (area 119.824499 90.614499 168.465501 132.905501)
+ (thickness 1.6002)
+ (drawings 4)
+ (tracks 49)
+ (zones 0)
+ (modules 15)
+ (nets 14)
+ )
+
+ (page A4)
+ (layers
+ (0 Dessus signal)
+ (31 Dessous signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.8636)
+ (user_trace_width 1)
+ (user_trace_width 2)
+ (user_trace_width 3)
+ (trace_clearance 0.508)
+ (zone_clearance 0.635)
+ (zone_45_only no)
+ (trace_min 0.154)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 1.905)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (user_via 2 1)
+ (user_via 3 2)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 4.50088 4.50088)
+ (pad_drill 3.0988)
+ (pad_to_mask_clearance 0.1)
+ (aux_axis_origin 0 0)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions true)
+ (excludeedgelayer true)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 GND)
+ (net 2 "Net-(C1-Pad1)")
+ (net 3 "Net-(C2-Pad1)")
+ (net 4 "Net-(C2-Pad2)")
+ (net 5 "Net-(P1-Pad2)")
+ (net 6 "Net-(P4-Pad1)")
+ (net 7 "Net-(P4-Pad2)")
+ (net 8 "Net-(R1-Pad1)")
+ (net 9 "Net-(R2-Pad1)")
+ (net 10 "Net-(P5-Pad1)")
+ (net 11 "Net-(P6-Pad1)")
+ (net 12 "Net-(P7-Pad1)")
+ (net 13 "Net-(P8-Pad1)")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.508)
+ (trace_width 0.8636)
+ (via_dia 1.905)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ (add_net "Net-(C1-Pad1)")
+ (add_net "Net-(C2-Pad1)")
+ (add_net "Net-(C2-Pad2)")
+ (add_net "Net-(P1-Pad2)")
+ (add_net "Net-(P4-Pad1)")
+ (add_net "Net-(P4-Pad2)")
+ (add_net "Net-(P5-Pad1)")
+ (add_net "Net-(P6-Pad1)")
+ (add_net "Net-(P7-Pad1)")
+ (add_net "Net-(P8-Pad1)")
+ (add_net "Net-(R1-Pad1)")
+ (add_net "Net-(R2-Pad1)")
+ )
+
+ (module discret:C2V10 (layer Dessus) (tedit 54A58223) (tstamp 54A58357)
+ (at 131.445 99.06 90)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4549F4BE)
+ (fp_text reference C1 (at 0 2.54 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_text value 10uF (at 0 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 4.826 -2.794) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 "Net-(C1-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/C2V10.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP8 (layer Dessus) (tedit 54A58223) (tstamp 54A5835C)
+ (at 131.445 118.745 270)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /4549F3BE)
+ (fp_text reference C2 (at 1.27 1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 680nF (at 1.27 -1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 0) (end -8.89 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 8.89 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 -2.54) (end 8.89 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 2.54) (end -6.35 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 10.16 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 "Net-(C2-Pad2)"))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.8 0.8 0.8))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_1x02 (layer Dessus) (tedit 541A9B89) (tstamp 54A58361)
+ (at 165.1 111.76 270)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4549F464)
+ (fp_text reference P1 (at 0 -1.905 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value IN (at 0 -1.905 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 2 thru_hole circle (at 1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 "Net-(P1-Pad2)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_1x02 (layer Dessus) (tedit 541A9B89) (tstamp 54A58366)
+ (at 123.19 109.855 90)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4549F46C)
+ (fp_text reference P2 (at 0 -1.905 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value OUT (at 0 -1.905 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_1x02 (layer Dessus) (tedit 541A9B89) (tstamp 54A5836B)
+ (at 123.19 101.6 90)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4549F4A5)
+ (fp_text reference P3 (at 0 -1.905 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value POWER (at 0 -1.905 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 "Net-(C1-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_1x02 (layer Dessus) (tedit 541A9B89) (tstamp 54A58370)
+ (at 149.225 128.905 180)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /456A8ACC)
+ (fp_text reference P4 (at 0 -1.905 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value CONN_2 (at 0 -1.905 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(P4-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(P4-Pad2)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Dessus) (tedit 54A58223) (tstamp 54A58389)
+ (at 140.97 125.095 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F38A)
+ (autoplace_cost180 10)
+ (fp_text reference R1 (at 0 0.127 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1.5K (at 0 0.127 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(R1-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 "Net-(C2-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Dessus) (tedit 54A58223) (tstamp 54A5838E)
+ (at 165.1 103.505 90)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F39D)
+ (autoplace_cost180 10)
+ (fp_text reference R2 (at 0 0.127 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1.5K (at 0 0.127 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(R2-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Dessus) (tedit 54A58223) (tstamp 54A58393)
+ (at 124.46 118.745 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F3AD)
+ (autoplace_cost180 10)
+ (fp_text reference R3 (at 0 0.127 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100K (at 0 0.127 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R3 (layer Dessus) (tedit 54A58223) (tstamp 54A58398)
+ (at 165.1 120.015 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /4549F3A2)
+ (autoplace_cost180 10)
+ (fp_text reference R4 (at 0 0.127 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 47K (at 0 0.127 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 "Net-(P1-Pad2)"))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:1pin (layer Dessus) (tedit 54A58223) (tstamp 54A583D2)
+ (at 123.19 93.98)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A5830A)
+ (fp_text reference P5 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 10 "Net-(P5-Pad1)"))
+ )
+
+ (module connect:1pin (layer Dessus) (tedit 54A58223) (tstamp 54A583D6)
+ (at 165.1 93.98)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A58363)
+ (fp_text reference P6 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 11 "Net-(P6-Pad1)"))
+ )
+
+ (module connect:1pin (layer Dessus) (tedit 54A58223) (tstamp 54A583DA)
+ (at 165.1 129.54)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A5837A)
+ (fp_text reference P7 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(P7-Pad1)"))
+ )
+
+ (module connect:1pin (layer Dessus) (tedit 54A58223) (tstamp 54A583DE)
+ (at 123.19 129.54)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54A58391)
+ (fp_text reference P8 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(P8-Pad1)"))
+ )
+
+ (module Valves:VALVE-ECC-83-2 (layer Dessus) (tedit 54FC7E9D) (tstamp 54A5A6B2)
+ (at 149.3 109.2)
+ (path /48B4F266)
+ (fp_text reference U1 (at 0 -11.43) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value ECC83 (at 0 11.43) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 10.16 1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole oval (at 3.4544 4.75488 306) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(R1-Pad1)"))
+ (pad 2 thru_hole oval (at 5.60832 1.8288 342) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 5 "Net-(P1-Pad2)"))
+ (pad 3 thru_hole oval (at 5.60832 -1.8288 18) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(R2-Pad1)"))
+ (pad 4 thru_hole oval (at 3.4544 -4.75488 54) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(P4-Pad1)"))
+ (pad 5 thru_hole oval (at 0 -5.8928 90) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(P4-Pad1)"))
+ (pad 6 thru_hole oval (at -3.4544 -4.75488 306) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 2 "Net-(C1-Pad1)"))
+ (pad 7 thru_hole oval (at -5.60832 -1.8288 342) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(R1-Pad1)"))
+ (pad 8 thru_hole oval (at -5.60832 1.78816 18) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 4 "Net-(C2-Pad2)"))
+ (pad 9 thru_hole oval (at -3.4544 4.75488 54) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(P4-Pad2)"))
+ (pad 0 thru_hole circle (at 0 0) (size 4.50088 4.50088) (drill 3.0988) (layers *.Cu *.Mask F.SilkS))
+ (model Valves.3dshapes/VALVE-ECC-83-2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_line (start 168.275 132.715) (end 120.015 132.715) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 168.275 90.805) (end 120.015 90.805) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 168.275 90.805) (end 168.275 132.715) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 120.015 90.805) (end 120.015 132.715) (angle 90) (layer Edge.Cuts) (width 0.381))
+
+ (segment (start 165.1 123.825) (end 165.354 123.825) (width 0.8636) (layer Dessous) (net 1) (status 30))
+ (segment (start 125.73 101.6) (end 131.445 101.6) (width 0.8636) (layer Dessous) (net 2) (status 420))
+ (segment (start 123.19 102.87) (end 124.46 102.87) (width 0.8636) (layer Dessous) (net 2) (status 810))
+ (segment (start 142.90548 101.6) (end 145.7706 104.46512) (width 0.8636) (layer Dessous) (net 2) (status 420))
+ (segment (start 131.445 101.6) (end 142.90548 101.6) (width 0.8636) (layer Dessous) (net 2) (status 810))
+ (segment (start 124.46 102.87) (end 125.73 101.6) (width 0.8636) (layer Dessous) (net 2))
+ (segment (start 124.46 114.935) (end 123.825 114.935) (width 0.8636) (layer Dessous) (net 3) (status 30))
+ (segment (start 123.19 114.3) (end 123.19 111.125) (width 0.8636) (layer Dessous) (net 3) (status 20))
+ (segment (start 123.825 114.935) (end 123.19 114.3) (width 0.8636) (layer Dessous) (net 3) (status 10))
+ (segment (start 131.445 108.585) (end 128.905 111.125) (width 0.8636) (layer Dessous) (net 3) (status 810))
+ (segment (start 128.905 111.125) (end 123.19 111.125) (width 0.8636) (layer Dessous) (net 3) (status 420))
+ (segment (start 142.875 116.205) (end 143.51 116.84) (width 0.8636) (layer Dessous) (net 4))
+ (segment (start 142.875 112.395) (end 142.875 116.205) (width 0.8636) (layer Dessous) (net 4))
+ (segment (start 143.61668 111.65332) (end 142.875 112.395) (width 0.8636) (layer Dessous) (net 4) (status 10))
+ (segment (start 140.97 128.905) (end 142.24 128.905) (width 0.8636) (layer Dessous) (net 4) (status 810))
+ (segment (start 142.24 128.905) (end 143.51 127.635) (width 0.8636) (layer Dessous) (net 4))
+ (segment (start 143.51 127.635) (end 143.51 116.84) (width 0.8636) (layer Dessous) (net 4))
+ (segment (start 143.61668 111.00816) (end 143.61668 111.65332) (width 0.8636) (layer Dessous) (net 4) (status 830))
+ (segment (start 131.445 128.905) (end 140.97 128.905) (width 0.8636) (layer Dessous) (net 4) (status C30))
+ (segment (start 161.925 113.03) (end 165.1 113.03) (width 0.8636) (layer Dessous) (net 5) (status 420))
+ (segment (start 159.9438 111.0488) (end 161.925 113.03) (width 0.8636) (layer Dessous) (net 5))
+ (segment (start 165.1 113.03) (end 165.1 116.205) (width 0.8636) (layer Dessous) (net 5) (status C30))
+ (segment (start 154.83332 111.0488) (end 159.9438 111.0488) (width 0.8636) (layer Dessous) (net 5) (status 810))
+ (segment (start 149.86 115.697) (end 150.495 116.332) (width 0.8636) (layer Dessous) (net 6))
+ (segment (start 149.225 103.3272) (end 151.54148 103.3272) (width 0.8636) (layer Dessous) (net 6) (status 10))
+ (segment (start 151.54148 103.3272) (end 152.6794 104.46512) (width 0.8636) (layer Dessous) (net 6) (status 420))
+ (segment (start 150.495 128.905) (end 150.495 116.332) (width 0.8636) (layer Dessous) (net 6) (status 810))
+ (segment (start 149.86 113.34) (end 149.86 115.697) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A709))
+ (segment (start 152.5 110.7) (end 149.86 113.34) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A707))
+ (segment (start 152.5 105.8) (end 152.5 110.7) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A705))
+ (segment (start 152.7544 105.5456) (end 152.5 105.8) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A703))
+ (segment (start 152.7544 104.44512) (end 152.7544 105.5456) (width 0.8636) (layer Dessous) (net 6))
+ (segment (start 147.955 128.905) (end 147.955 116.15928) (width 0.8636) (layer Dessous) (net 7) (status 810))
+ (segment (start 147.955 116.15928) (end 145.7706 113.97488) (width 0.8636) (layer Dessous) (net 7) (status 420))
+ (segment (start 153.67 131.445) (end 154.94 130.175) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 130.175 131.445) (end 153.67 131.445) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 128.905 130.175) (end 130.175 131.445) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 128.905 127) (end 128.905 130.175) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 154.94 130.175) (end 154.94 116.23548) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 154.94 116.23548) (end 152.6794 113.97488) (width 0.8636) (layer Dessous) (net 8) (status 420))
+ (segment (start 140.97 121.285) (end 140.97 123.825) (width 0.8636) (layer Dessous) (net 8) (status 810))
+ (segment (start 142.1638 107.3912) (end 140.97 108.585) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 140.97 108.585) (end 140.97 121.285) (width 0.8636) (layer Dessous) (net 8) (status 420))
+ (segment (start 143.61668 107.3912) (end 142.1638 107.3912) (width 0.8636) (layer Dessous) (net 8) (status 810))
+ (segment (start 130.175 125.73) (end 128.905 127) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 139.065 125.73) (end 130.175 125.73) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 140.97 123.825) (end 139.065 125.73) (width 0.8636) (layer Dessous) (net 8))
+ (segment (start 154.83332 107.3912) (end 165.0238 107.3912) (width 0.8636) (layer Dessous) (net 9) (status 830))
+ (segment (start 165.0238 107.3912) (end 165.1 107.315) (width 0.8636) (layer Dessous) (net 9) (status 430))
+
+ (zone (net 1) (net_name GND) (layer Dessous) (tstamp 4EED96A1) (hatch edge 0.508)
+ (connect_pads (clearance 0.635))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.254) (thermal_bridge_width 0.50038))
+ (polygon
+ (pts
+ (xy 167.64 132.08) (xy 167.64 91.44) (xy 120.65 91.44) (xy 120.65 132.08)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 167.3225 127.811617) (xy 166.68474 127.172743) (xy 166.192271 126.968252) (xy 166.192271 123.96054) (xy 166.160996 123.532229)
+ (xy 166.057258 123.281783) (xy 165.892676 123.206541) (xy 165.718459 123.380758) (xy 165.718459 123.032324) (xy 165.643217 122.867742)
+ (xy 165.23554 122.732729) (xy 164.807229 122.764004) (xy 164.556783 122.867742) (xy 164.481541 123.032324) (xy 165.1 123.650783)
+ (xy 165.718459 123.032324) (xy 165.718459 123.380758) (xy 165.274217 123.825) (xy 165.892676 124.443459) (xy 166.057258 124.368217)
+ (xy 166.192271 123.96054) (xy 166.192271 126.968252) (xy 165.718459 126.771508) (xy 165.718459 124.617676) (xy 165.1 123.999217)
+ (xy 164.925783 124.173434) (xy 164.925783 123.825) (xy 164.307324 123.206541) (xy 164.142742 123.281783) (xy 164.007729 123.68946)
+ (xy 164.039004 124.117771) (xy 164.142742 124.368217) (xy 164.307324 124.443459) (xy 164.925783 123.825) (xy 164.925783 124.173434)
+ (xy 164.481541 124.617676) (xy 164.556783 124.782258) (xy 164.96446 124.917271) (xy 165.392771 124.885996) (xy 165.643217 124.782258)
+ (xy 165.718459 124.617676) (xy 165.718459 126.771508) (xy 165.658199 126.746486) (xy 164.546677 126.745516) (xy 163.519394 127.169981)
+ (xy 162.732743 127.95526) (xy 162.306486 128.981801) (xy 162.305516 130.093323) (xy 162.729981 131.120606) (xy 163.370755 131.7625)
+ (xy 155.040788 131.7625) (xy 155.784144 131.019144) (xy 156.042927 130.631848) (xy 156.042927 130.631847) (xy 156.1338 130.175)
+ (xy 156.1338 116.23548) (xy 156.042927 115.778633) (xy 156.042927 115.778632) (xy 155.784144 115.391336) (xy 154.780713 114.387905)
+ (xy 154.957722 113.908101) (xy 154.934257 113.3109) (xy 155.544695 113.13874) (xy 156.089502 112.709248) (xy 156.350837 112.2426)
+ (xy 159.449312 112.2426) (xy 161.080856 113.874144) (xy 161.468153 114.132927) (xy 161.925 114.2238) (xy 163.9062 114.2238)
+ (xy 163.9062 115.333059) (xy 163.86257 115.376613) (xy 163.639754 115.913214) (xy 163.639247 116.494237) (xy 163.861126 117.031226)
+ (xy 164.271613 117.44243) (xy 164.808214 117.665246) (xy 165.389237 117.665753) (xy 165.926226 117.443874) (xy 166.33743 117.033387)
+ (xy 166.560246 116.496786) (xy 166.560753 115.915763) (xy 166.338874 115.378774) (xy 166.2938 115.333621) (xy 166.2938 113.991665)
+ (xy 166.391231 113.894404) (xy 166.623735 113.334472) (xy 166.624264 112.728188) (xy 166.392738 112.167851) (xy 165.964404 111.738769)
+ (xy 165.709683 111.633) (xy 165.786214 111.633) (xy 165.937785 111.633) (xy 166.077819 111.574996) (xy 166.184996 111.46782)
+ (xy 166.243 111.327786) (xy 166.243 110.70844) (xy 166.243 110.27156) (xy 166.243 109.652214) (xy 166.184996 109.51218)
+ (xy 166.077819 109.405004) (xy 165.937785 109.347) (xy 165.786214 109.347) (xy 165.31844 109.347) (xy 165.22319 109.44225)
+ (xy 165.22319 110.36681) (xy 166.14775 110.36681) (xy 166.243 110.27156) (xy 166.243 110.70844) (xy 166.14775 110.61319)
+ (xy 165.22319 110.61319) (xy 165.22319 110.63319) (xy 164.97681 110.63319) (xy 164.97681 110.61319) (xy 164.97681 110.36681)
+ (xy 164.97681 109.44225) (xy 164.88156 109.347) (xy 164.413786 109.347) (xy 164.262215 109.347) (xy 164.122181 109.405004)
+ (xy 164.015004 109.51218) (xy 163.957 109.652214) (xy 163.957 110.27156) (xy 164.05225 110.36681) (xy 164.97681 110.36681)
+ (xy 164.97681 110.61319) (xy 164.05225 110.61319) (xy 163.957 110.70844) (xy 163.957 111.327786) (xy 164.015004 111.46782)
+ (xy 164.122181 111.574996) (xy 164.262215 111.633) (xy 164.413786 111.633) (xy 164.490184 111.633) (xy 164.237851 111.737262)
+ (xy 164.13874 111.8362) (xy 162.419488 111.8362) (xy 160.787944 110.204656) (xy 160.400648 109.945873) (xy 159.9438 109.855)
+ (xy 156.708227 109.855) (xy 156.66335 109.695875) (xy 156.272432 109.2) (xy 156.66335 108.704125) (xy 156.696946 108.585)
+ (xy 164.35005 108.585) (xy 164.808214 108.775246) (xy 165.389237 108.775753) (xy 165.926226 108.553874) (xy 166.33743 108.143387)
+ (xy 166.560246 107.606786) (xy 166.560753 107.025763) (xy 166.338874 106.488774) (xy 166.192271 106.341914) (xy 166.192271 99.83054)
+ (xy 166.160996 99.402229) (xy 166.057258 99.151783) (xy 165.892676 99.076541) (xy 165.718459 99.250758) (xy 165.718459 98.902324)
+ (xy 165.643217 98.737742) (xy 165.23554 98.602729) (xy 164.807229 98.634004) (xy 164.556783 98.737742) (xy 164.481541 98.902324)
+ (xy 165.1 99.520783) (xy 165.718459 98.902324) (xy 165.718459 99.250758) (xy 165.274217 99.695) (xy 165.892676 100.313459)
+ (xy 166.057258 100.238217) (xy 166.192271 99.83054) (xy 166.192271 106.341914) (xy 165.928387 106.07757) (xy 165.718459 105.9904)
+ (xy 165.718459 100.487676) (xy 165.1 99.869217) (xy 164.925783 100.043434) (xy 164.925783 99.695) (xy 164.307324 99.076541)
+ (xy 164.142742 99.151783) (xy 164.007729 99.55946) (xy 164.039004 99.987771) (xy 164.142742 100.238217) (xy 164.307324 100.313459)
+ (xy 164.925783 99.695) (xy 164.925783 100.043434) (xy 164.481541 100.487676) (xy 164.556783 100.652258) (xy 164.96446 100.787271)
+ (xy 165.392771 100.755996) (xy 165.643217 100.652258) (xy 165.718459 100.487676) (xy 165.718459 105.9904) (xy 165.391786 105.854754)
+ (xy 164.810763 105.854247) (xy 164.273774 106.076126) (xy 164.152288 106.1974) (xy 156.373238 106.1974) (xy 156.089502 105.690752)
+ (xy 155.544695 105.26126) (xy 154.934257 105.089099) (xy 154.957722 104.491899) (xy 154.717607 103.841037) (xy 154.246695 103.331607)
+ (xy 153.352271 102.681769) (xy 152.722255 102.391327) (xy 152.218734 102.371543) (xy 152.218733 102.371543) (xy 151.998328 102.224273)
+ (xy 151.54148 102.1334) (xy 151.165771 102.1334) (xy 151.110021 102.049964) (xy 150.533196 101.664542) (xy 149.852785 101.5292)
+ (xy 148.747215 101.5292) (xy 148.066804 101.664542) (xy 147.489979 102.049964) (xy 147.13985 102.573968) (xy 146.570951 102.364091)
+ (xy 145.877744 102.391328) (xy 145.540546 102.546778) (xy 143.749624 100.755856) (xy 143.362328 100.497073) (xy 142.90548 100.4062)
+ (xy 133.045192 100.4062) (xy 132.886808 100.165087) (xy 132.727151 100.057317) (xy 132.727151 96.701126) (xy 132.698867 96.196681)
+ (xy 132.560239 95.862003) (xy 132.375891 95.763326) (xy 132.201674 95.937543) (xy 132.201674 95.589109) (xy 132.102997 95.404761)
+ (xy 131.626126 95.237849) (xy 131.121681 95.266133) (xy 130.787003 95.404761) (xy 130.688326 95.589109) (xy 131.445 96.345783)
+ (xy 132.201674 95.589109) (xy 132.201674 95.937543) (xy 131.619217 96.52) (xy 132.375891 97.276674) (xy 132.560239 97.177997)
+ (xy 132.727151 96.701126) (xy 132.727151 100.057317) (xy 132.633568 99.994148) (xy 132.334 99.934072) (xy 132.201674 99.934072)
+ (xy 132.201674 97.450891) (xy 131.445 96.694217) (xy 131.270783 96.868434) (xy 131.270783 96.52) (xy 130.514109 95.763326)
+ (xy 130.329761 95.862003) (xy 130.162849 96.338874) (xy 130.191133 96.843319) (xy 130.329761 97.177997) (xy 130.514109 97.276674)
+ (xy 131.270783 96.52) (xy 131.270783 96.868434) (xy 130.688326 97.450891) (xy 130.787003 97.635239) (xy 131.263874 97.802151)
+ (xy 131.768319 97.773867) (xy 132.102997 97.635239) (xy 132.201674 97.450891) (xy 132.201674 99.934072) (xy 130.556 99.934072)
+ (xy 130.265452 99.990445) (xy 130.010087 100.158192) (xy 129.842679 100.4062) (xy 125.73 100.4062) (xy 125.273152 100.497073)
+ (xy 124.885856 100.755856) (xy 124.345603 101.296108) (xy 124.345603 100.480745) (xy 124.315325 100.02704) (xy 124.19995 99.7485)
+ (xy 124.028783 99.665433) (xy 123.854567 99.839649) (xy 123.854567 99.491217) (xy 123.7715 99.32005) (xy 123.340745 99.174397)
+ (xy 122.88704 99.204675) (xy 122.6085 99.32005) (xy 122.525433 99.491217) (xy 123.19 100.155783) (xy 123.854567 99.491217)
+ (xy 123.854567 99.839649) (xy 123.364217 100.33) (xy 124.028783 100.994567) (xy 124.19995 100.9115) (xy 124.345603 100.480745)
+ (xy 124.345603 101.296108) (xy 124.250731 101.39098) (xy 123.952 101.331072) (xy 123.775808 101.331072) (xy 123.854567 101.168783)
+ (xy 123.19 100.504217) (xy 123.015783 100.678433) (xy 123.015783 100.33) (xy 122.351217 99.665433) (xy 122.18005 99.7485)
+ (xy 122.034397 100.179255) (xy 122.064675 100.63296) (xy 122.18005 100.9115) (xy 122.351217 100.994567) (xy 123.015783 100.33)
+ (xy 123.015783 100.678433) (xy 122.525433 101.168783) (xy 122.604191 101.331072) (xy 122.428 101.331072) (xy 122.137452 101.387445)
+ (xy 121.882087 101.555192) (xy 121.711148 101.808432) (xy 121.651072 102.108) (xy 121.651072 103.632) (xy 121.707445 103.922548)
+ (xy 121.875192 104.177913) (xy 122.128432 104.348852) (xy 122.428 104.408928) (xy 123.952 104.408928) (xy 124.242548 104.352555)
+ (xy 124.497913 104.184808) (xy 124.598142 104.036321) (xy 124.916847 103.972927) (xy 124.916848 103.972927) (xy 125.304144 103.714144)
+ (xy 126.224488 102.7938) (xy 129.844807 102.7938) (xy 130.003192 103.034913) (xy 130.256432 103.205852) (xy 130.556 103.265928)
+ (xy 132.334 103.265928) (xy 132.624548 103.209555) (xy 132.879913 103.041808) (xy 133.04732 102.7938) (xy 142.410992 102.7938)
+ (xy 143.768082 104.15089) (xy 143.642278 104.4919) (xy 143.665741 105.089099) (xy 143.055305 105.261261) (xy 142.510498 105.690752)
+ (xy 142.226761 106.1974) (xy 142.1638 106.1974) (xy 141.706952 106.288273) (xy 141.319656 106.547056) (xy 140.125856 107.740856)
+ (xy 139.867073 108.128152) (xy 139.7762 108.585) (xy 139.7762 120.413059) (xy 139.73257 120.456613) (xy 139.509754 120.993214)
+ (xy 139.509247 121.574237) (xy 139.731126 122.111226) (xy 139.7762 122.156378) (xy 139.7762 123.330512) (xy 138.570512 124.5362)
+ (xy 133.110928 124.5362) (xy 133.110928 109.474) (xy 133.110928 107.696) (xy 133.054555 107.405452) (xy 132.886808 107.150087)
+ (xy 132.633568 106.979148) (xy 132.334 106.919072) (xy 130.556 106.919072) (xy 130.265452 106.975445) (xy 130.010087 107.143192)
+ (xy 129.839148 107.396432) (xy 129.779072 107.696) (xy 129.779072 108.56264) (xy 128.410512 109.9312) (xy 124.579767 109.9312)
+ (xy 124.504808 109.817087) (xy 124.345603 109.709622) (xy 124.345603 108.735745) (xy 124.315325 108.28204) (xy 124.19995 108.0035)
+ (xy 124.028783 107.920433) (xy 123.854567 108.094649) (xy 123.854567 107.746217) (xy 123.7715 107.57505) (xy 123.340745 107.429397)
+ (xy 122.88704 107.459675) (xy 122.6085 107.57505) (xy 122.525433 107.746217) (xy 123.19 108.410783) (xy 123.854567 107.746217)
+ (xy 123.854567 108.094649) (xy 123.364217 108.585) (xy 124.028783 109.249567) (xy 124.19995 109.1665) (xy 124.345603 108.735745)
+ (xy 124.345603 109.709622) (xy 124.251568 109.646148) (xy 123.952 109.586072) (xy 123.775808 109.586072) (xy 123.854567 109.423783)
+ (xy 123.19 108.759217) (xy 123.015783 108.933433) (xy 123.015783 108.585) (xy 122.351217 107.920433) (xy 122.18005 108.0035)
+ (xy 122.034397 108.434255) (xy 122.064675 108.88796) (xy 122.18005 109.1665) (xy 122.351217 109.249567) (xy 123.015783 108.585)
+ (xy 123.015783 108.933433) (xy 122.525433 109.423783) (xy 122.604191 109.586072) (xy 122.428 109.586072) (xy 122.137452 109.642445)
+ (xy 121.882087 109.810192) (xy 121.711148 110.063432) (xy 121.651072 110.363) (xy 121.651072 111.887) (xy 121.707445 112.177548)
+ (xy 121.875192 112.432913) (xy 121.9962 112.514594) (xy 121.9962 114.3) (xy 122.087073 114.756848) (xy 122.345856 115.144144)
+ (xy 122.980856 115.779144) (xy 123.368153 116.037927) (xy 123.529353 116.069991) (xy 123.631613 116.17243) (xy 124.168214 116.395246)
+ (xy 124.749237 116.395753) (xy 125.286226 116.173874) (xy 125.69743 115.763387) (xy 125.920246 115.226786) (xy 125.920753 114.645763)
+ (xy 125.698874 114.108774) (xy 125.288387 113.69757) (xy 124.751786 113.474754) (xy 124.3838 113.474432) (xy 124.3838 112.514767)
+ (xy 124.497913 112.439808) (xy 124.579594 112.3188) (xy 128.905 112.3188) (xy 129.361847 112.227927) (xy 129.361848 112.227927)
+ (xy 129.749144 111.969144) (xy 131.46736 110.250928) (xy 132.334 110.250928) (xy 132.624548 110.194555) (xy 132.879913 110.026808)
+ (xy 133.050852 109.773568) (xy 133.110928 109.474) (xy 133.110928 124.5362) (xy 130.175 124.5362) (xy 129.718152 124.627073)
+ (xy 129.330856 124.885856) (xy 128.060856 126.155856) (xy 127.802073 126.543152) (xy 127.7112 127) (xy 127.7112 130.175)
+ (xy 127.802073 130.631848) (xy 128.060856 131.019144) (xy 128.804212 131.7625) (xy 124.918382 131.7625) (xy 125.557257 131.12474)
+ (xy 125.983514 130.098199) (xy 125.984484 128.986677) (xy 125.560019 127.959394) (xy 125.552271 127.951632) (xy 125.552271 122.69054)
+ (xy 125.520996 122.262229) (xy 125.417258 122.011783) (xy 125.252676 121.936541) (xy 125.078459 122.110758) (xy 125.078459 121.762324)
+ (xy 125.003217 121.597742) (xy 124.59554 121.462729) (xy 124.167229 121.494004) (xy 123.916783 121.597742) (xy 123.841541 121.762324)
+ (xy 124.46 122.380783) (xy 125.078459 121.762324) (xy 125.078459 122.110758) (xy 124.634217 122.555) (xy 125.252676 123.173459)
+ (xy 125.417258 123.098217) (xy 125.552271 122.69054) (xy 125.552271 127.951632) (xy 125.078459 127.476992) (xy 125.078459 123.347676)
+ (xy 124.46 122.729217) (xy 124.285783 122.903434) (xy 124.285783 122.555) (xy 123.667324 121.936541) (xy 123.502742 122.011783)
+ (xy 123.367729 122.41946) (xy 123.399004 122.847771) (xy 123.502742 123.098217) (xy 123.667324 123.173459) (xy 124.285783 122.555)
+ (xy 124.285783 122.903434) (xy 123.841541 123.347676) (xy 123.916783 123.512258) (xy 124.32446 123.647271) (xy 124.752771 123.615996)
+ (xy 125.003217 123.512258) (xy 125.078459 123.347676) (xy 125.078459 127.476992) (xy 124.77474 127.172743) (xy 123.748199 126.746486)
+ (xy 122.636677 126.745516) (xy 121.609394 127.169981) (xy 120.9675 127.810755) (xy 120.9675 95.708382) (xy 121.60526 96.347257)
+ (xy 122.631801 96.773514) (xy 123.743323 96.774484) (xy 124.770606 96.350019) (xy 125.557257 95.56474) (xy 125.983514 94.538199)
+ (xy 125.984484 93.426677) (xy 125.560019 92.399394) (xy 124.919244 91.7575) (xy 163.371617 91.7575) (xy 162.732743 92.39526)
+ (xy 162.306486 93.421801) (xy 162.305516 94.533323) (xy 162.729981 95.560606) (xy 163.51526 96.347257) (xy 164.541801 96.773514)
+ (xy 165.653323 96.774484) (xy 166.680606 96.350019) (xy 167.3225 95.709244) (xy 167.3225 127.811617)
+ )
+ )
+ )
+)
diff --git a/demos/ecc83/ecc83-pp_v2.net b/demos/ecc83/ecc83-pp_v2.net
new file mode 100644
index 0000000..ddd48a8
--- /dev/null
+++ b/demos/ecc83/ecc83-pp_v2.net
@@ -0,0 +1,211 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/ecc83/ecc83-pp_v2.sch)
+ (date "17/05/2015 17:06:56")
+ (tool "Eeschema (2015-05-13 BZR 5653)-product")
+ (sheet (number 1) (name /) (tstamps /)
+ (title_block
+ (title "ECC Push-Pull")
+ (company)
+ (rev 0.1)
+ (date "Sat 21 Mar 2015")
+ (source ecc83-pp_v2.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value "")))))
+ (components
+ (comp (ref U1)
+ (value ECC83)
+ (footprint Valves:VALVE-ECC-83-2)
+ (libsource (lib ecc83_schlib) (part ECC83))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 48B4F266))
+ (comp (ref P4)
+ (value CONN_2)
+ (footprint pin_array:pin_array_1x02)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 456A8ACC))
+ (comp (ref C1)
+ (value 10uF)
+ (footprint discret:C2V10)
+ (libsource (lib ecc83_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F4BE))
+ (comp (ref P3)
+ (value POWER)
+ (footprint pin_array:pin_array_1x02)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F4A5))
+ (comp (ref P2)
+ (value OUT)
+ (footprint pin_array:pin_array_1x02)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F46C))
+ (comp (ref P1)
+ (value IN)
+ (footprint pin_array:pin_array_1x02)
+ (libsource (lib ecc83_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F464))
+ (comp (ref C2)
+ (value 680nF)
+ (footprint discret:CP8)
+ (libsource (lib ecc83_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F3BE))
+ (comp (ref R3)
+ (value 100K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F3AD))
+ (comp (ref R4)
+ (value 47K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F3A2))
+ (comp (ref R2)
+ (value 1.5K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F39D))
+ (comp (ref R1)
+ (value 1.5K)
+ (footprint discret:R3)
+ (libsource (lib ecc83_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4549F38A))
+ (comp (ref P5)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A5830A))
+ (comp (ref P6)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A58363))
+ (comp (ref P7)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A5837A))
+ (comp (ref P8)
+ (value CONN_1)
+ (footprint connect:1pin)
+ (libsource (lib ecc83_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54A58391)))
+ (libparts
+ (libpart (lib ecc83_schlib) (part R)
+ (footprints
+ (fp R_*)
+ (fp Resistor_*))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib ecc83_schlib) (part ECC81)
+ (aliases
+ (alias ECC83))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) ECC81)
+ (field (name Footprint) VALVE-NOVAL_P))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name G) (type input))
+ (pin (num 3) (name K) (type passive))
+ (pin (num 4) (name F1) (type input))
+ (pin (num 5) (name F1) (type input))
+ (pin (num 6) (name A) (type passive))
+ (pin (num 7) (name G) (type input))
+ (pin (num 8) (name K) (type passive))
+ (pin (num 9) (name F2) (type input))))
+ (libpart (lib ecc83_schlib) (part CONN_2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib ecc83_schlib) (part CONN_1)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_1))
+ (pins
+ (pin (num 1) (name 1) (type passive))))
+ (libpart (lib ecc83_schlib) (part C)
+ (footprints
+ (fp C?)
+ (fp C_????_*)
+ (fp C_????)
+ (fp SMD*_c)
+ (fp Capacitor*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive)))))
+ (libraries
+ (library (logical ecc83_schlib)
+ (uri ecc83_schlib.lib)))
+ (nets
+ (net (code 1) (name "Net-(C2-Pad2)")
+ (node (ref C2) (pin 2))
+ (node (ref U1) (pin 8))
+ (node (ref R1) (pin 2)))
+ (net (code 2) (name "Net-(R1-Pad1)")
+ (node (ref R1) (pin 1))
+ (node (ref U1) (pin 1))
+ (node (ref U1) (pin 7)))
+ (net (code 3) (name "Net-(P4-Pad1)")
+ (node (ref U1) (pin 4))
+ (node (ref P4) (pin 1))
+ (node (ref U1) (pin 5)))
+ (net (code 4) (name "Net-(R2-Pad1)")
+ (node (ref R2) (pin 1))
+ (node (ref U1) (pin 3)))
+ (net (code 5) (name "Net-(P4-Pad2)")
+ (node (ref P4) (pin 2))
+ (node (ref U1) (pin 9)))
+ (net (code 6) (name "Net-(C2-Pad1)")
+ (node (ref P2) (pin 1))
+ (node (ref R3) (pin 1))
+ (node (ref C2) (pin 1)))
+ (net (code 7) (name "Net-(P1-Pad2)")
+ (node (ref U1) (pin 2))
+ (node (ref P1) (pin 2))
+ (node (ref R4) (pin 1)))
+ (net (code 8) (name "Net-(C1-Pad1)")
+ (node (ref C1) (pin 1))
+ (node (ref P3) (pin 1))
+ (node (ref U1) (pin 6)))
+ (net (code 9) (name GND)
+ (node (ref R2) (pin 2))
+ (node (ref R4) (pin 2))
+ (node (ref R3) (pin 2))
+ (node (ref P1) (pin 1))
+ (node (ref P2) (pin 2))
+ (node (ref C1) (pin 2))
+ (node (ref P3) (pin 2)))
+ (net (code 10) (name "Net-(P8-Pad1)")
+ (node (ref P8) (pin 1)))
+ (net (code 11) (name "Net-(P7-Pad1)")
+ (node (ref P7) (pin 1)))
+ (net (code 12) (name "Net-(P6-Pad1)")
+ (node (ref P6) (pin 1)))
+ (net (code 13) (name "Net-(P5-Pad1)")
+ (node (ref P5) (pin 1))))) \ No newline at end of file
diff --git a/demos/ecc83/ecc83-pp_v2.pro b/demos/ecc83/ecc83-pp_v2.pro
new file mode 100644
index 0000000..cec6d57
--- /dev/null
+++ b/demos/ecc83/ecc83-pp_v2.pro
@@ -0,0 +1,32 @@
+update=17/05/2015 17:05:45
+last_client=kicad
+[general]
+version=1
+RootSch=ecc83-pp.sch
+BoardNm=ecc83-pp.brd
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=ecc83-pp_v2.net
+UseCmpFile=0
+PadDrill=1.9304
+PadDrillOvalY=1.9304
+PadSizeH=2.794
+PadSizeV=1.397
+PcbTextSizeV=2.032
+PcbTextSizeH=1.524
+PcbTextThickness=0.3048
+ModuleTextSizeV=1.524
+ModuleTextSizeH=1.524
+ModuleTextSizeThickness=0.3048
+SolderMaskClearance=0.254
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.381
+BoardOutlineThickness=0.381
+ModuleOutlineThickness=0.381
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=ecc83_schlib
+LibName2=power
diff --git a/demos/ecc83/ecc83-pp_v2.sch b/demos/ecc83/ecc83-pp_v2.sch
new file mode 100644
index 0000000..abc3352
--- /dev/null
+++ b/demos/ecc83/ecc83-pp_v2.sch
@@ -0,0 +1,371 @@
+EESchema Schematic File Version 2
+LIBS:ecc83_schlib
+LIBS:power
+LIBS:ecc83-pp_v2-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title "ECC Push-Pull"
+Date "Sat 21 Mar 2015"
+Rev "0.1"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L ECC83 U1
+U 3 1 48B4F266
+P 3900 3050
+F 0 "U1" H 4400 3150 50 0000 C CNN
+F 1 "ECC83" H 4400 3050 50 0000 C CNN
+F 2 "Valves:VALVE-ECC-83-2" H 4400 2950 30 0000 C CNN
+F 3 "" H 3900 3050 60 0001 C CNN
+ 3 3900 3050
+ 1 0 0 -1
+$EndComp
+$Comp
+L ECC83 U1
+U 2 1 48B4F263
+P 6500 4200
+F 0 "U1" H 7000 4300 50 0000 C CNN
+F 1 "ECC83" H 7000 4200 50 0000 C CNN
+F 2 "Valves:VALVE-ECC-83-2" H 7000 4100 30 0000 C CNN
+F 3 "" H 6500 4200 60 0001 C CNN
+ 2 6500 4200
+ 1 0 0 -1
+$EndComp
+$Comp
+L ECC83 U1
+U 1 1 48B4F256
+P 6600 2300
+F 0 "U1" H 7100 2400 50 0000 C CNN
+F 1 "ECC83" H 7100 2300 50 0000 C CNN
+F 2 "Valves:VALVE-ECC-83-2" H 7100 2200 30 0000 C CNN
+F 3 "" H 6600 2300 60 0001 C CNN
+ 1 6600 2300
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR01
+U 1 1 457DBAF8
+P 7850 3250
+F 0 "#PWR01" H 7850 3250 30 0001 C CNN
+F 1 "GND" H 7850 3180 30 0001 C CNN
+F 2 "" H 7850 3250 60 0001 C CNN
+F 3 "" H 7850 3250 60 0001 C CNN
+ 1 7850 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR02
+U 1 1 457DBAF5
+P 7600 3800
+F 0 "#PWR02" H 7600 3800 30 0001 C CNN
+F 1 "GND" H 7600 3730 30 0001 C CNN
+F 2 "" H 7600 3800 60 0001 C CNN
+F 3 "" H 7600 3800 60 0001 C CNN
+ 1 7600 3800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR03
+U 1 1 457DBAF1
+P 6400 5500
+F 0 "#PWR03" H 6400 5500 30 0001 C CNN
+F 1 "GND" H 6400 5430 30 0001 C CNN
+F 2 "" H 6400 5500 60 0001 C CNN
+F 3 "" H 6400 5500 60 0001 C CNN
+ 1 6400 5500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR04
+U 1 1 457DBAEF
+P 6000 5500
+F 0 "#PWR04" H 6000 5500 30 0001 C CNN
+F 1 "GND" H 6000 5430 30 0001 C CNN
+F 2 "" H 6000 5500 60 0001 C CNN
+F 3 "" H 6000 5500 60 0001 C CNN
+ 1 6000 5500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG05
+U 1 1 457DBAC0
+P 3700 2200
+F 0 "#FLG05" H 3700 2470 30 0001 C CNN
+F 1 "PWR_FLAG" H 3700 2430 30 0000 C CNN
+F 2 "" H 3700 2200 60 0001 C CNN
+F 3 "" H 3700 2200 60 0001 C CNN
+ 1 3700 2200
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P4
+U 1 1 456A8ACC
+P 3050 3700
+F 0 "P4" V 3000 3700 40 0000 C CNN
+F 1 "CONN_2" V 3100 3700 40 0000 C CNN
+F 2 "pin_array:pin_array_1x02" H 3050 3500 30 0000 C CNN
+F 3 "" H 3050 3700 60 0001 C CNN
+ 1 3050 3700
+ -1 0 0 -1
+$EndComp
+$Comp
+L C C1
+U 1 1 4549F4BE
+P 4100 2100
+F 0 "C1" H 4250 2150 50 0000 L CNN
+F 1 "10uF" H 4250 2050 50 0000 L CNN
+F 2 "discret:C2V10" H 4300 1900 30 0000 C CNN
+F 3 "" H 4100 2100 60 0001 C CNN
+ 1 4100 2100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P3
+U 1 1 4549F4A5
+P 3050 1900
+F 0 "P3" V 3000 1900 40 0000 C CNN
+F 1 "POWER" V 3100 1900 40 0000 C CNN
+F 2 "pin_array:pin_array_1x02" H 3050 1700 30 0000 C CNN
+F 3 "" H 3050 1900 60 0001 C CNN
+ 1 3050 1900
+ -1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P2
+U 1 1 4549F46C
+P 8350 3000
+F 0 "P2" V 8300 3000 40 0000 C CNN
+F 1 "OUT" V 8400 3000 40 0000 C CNN
+F 2 "pin_array:pin_array_1x02" H 8350 2800 30 0000 C CNN
+F 3 "" H 8350 3000 60 0001 C CNN
+ 1 8350 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P1
+U 1 1 4549F464
+P 5350 4300
+F 0 "P1" V 5300 4300 40 0000 C CNN
+F 1 "IN" V 5400 4300 40 0000 C CNN
+F 2 "pin_array:pin_array_1x02" H 5350 4500 30 0000 C CNN
+F 3 "" H 5350 4300 60 0001 C CNN
+ 1 5350 4300
+ -1 0 0 1
+$EndComp
+$Comp
+L C C2
+U 1 1 4549F3BE
+P 7300 2900
+F 0 "C2" V 7150 2900 50 0000 C CNN
+F 1 "680nF" V 7500 2900 50 0000 C CNN
+F 2 "discret:CP8" V 7600 2900 30 0000 C CNN
+F 3 "" H 7300 2900 60 0001 C CNN
+ 1 7300 2900
+ 0 1 1 0
+$EndComp
+$Comp
+L R R3
+U 1 1 4549F3AD
+P 7600 3550
+F 0 "R3" H 7500 3750 50 0000 C CNN
+F 1 "100K" V 7600 3550 50 0000 C CNN
+F 2 "discret:R3" V 7700 3550 30 0000 C CNN
+F 3 "" H 7600 3550 60 0001 C CNN
+ 1 7600 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R4
+U 1 1 4549F3A2
+P 6000 5300
+F 0 "R4" H 5900 5500 50 0000 C CNN
+F 1 "47K" V 6000 5300 50 0000 C CNN
+F 2 "discret:R3" V 6100 5300 30 0000 C CNN
+F 3 "" H 6000 5300 60 0001 C CNN
+ 1 6000 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R2
+U 1 1 4549F39D
+P 6400 5300
+F 0 "R2" H 6300 5500 50 0000 C CNN
+F 1 "1.5K" V 6400 5300 50 0000 C CNN
+F 2 "discret:R3" V 6500 5300 30 0000 C CNN
+F 3 "" H 6400 5300 60 0001 C CNN
+ 1 6400 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 4549F38A
+P 6500 3250
+F 0 "R1" H 6600 3050 50 0000 C CNN
+F 1 "1.5K" V 6500 3250 50 0000 C CNN
+F 2 "discret:R3" V 6400 3250 30 0000 C CNN
+F 3 "" H 6500 3250 60 0001 C CNN
+ 1 6500 3250
+ -1 0 0 1
+$EndComp
+$Comp
+L CONN_1 P5
+U 1 1 54A5830A
+P 6300 6600
+F 0 "P5" H 6380 6600 40 0000 L CNN
+F 1 "CONN_1" H 6300 6655 30 0001 C CNN
+F 2 "connect:1pin" H 6300 6600 60 0001 C CNN
+F 3 "" H 6300 6600 60 0000 C CNN
+ 1 6300 6600
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P6
+U 1 1 54A58363
+P 6300 6700
+F 0 "P6" H 6380 6700 40 0000 L CNN
+F 1 "CONN_1" H 6300 6755 30 0001 C CNN
+F 2 "connect:1pin" H 6300 6700 60 0001 C CNN
+F 3 "" H 6300 6700 60 0000 C CNN
+ 1 6300 6700
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P7
+U 1 1 54A5837A
+P 6300 6800
+F 0 "P7" H 6380 6800 40 0000 L CNN
+F 1 "CONN_1" H 6300 6855 30 0001 C CNN
+F 2 "connect:1pin" H 6300 6800 60 0001 C CNN
+F 3 "" H 6300 6800 60 0000 C CNN
+ 1 6300 6800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P8
+U 1 1 54A58391
+P 6300 6900
+F 0 "P8" H 6380 6900 40 0000 L CNN
+F 1 "CONN_1" H 6300 6955 30 0001 C CNN
+F 2 "connect:1pin" H 6300 6900 60 0001 C CNN
+F 3 "" H 6300 6900 60 0000 C CNN
+ 1 6300 6900
+ 1 0 0 -1
+$EndComp
+NoConn ~ 6150 6600
+NoConn ~ 6150 6700
+NoConn ~ 6150 6800
+NoConn ~ 6150 6900
+$Comp
+L PWR_FLAG #FLG06
+U 1 1 550E41D9
+P 3700 1700
+F 0 "#FLG06" H 3700 1970 30 0001 C CNN
+F 1 "PWR_FLAG" H 3700 1930 30 0000 C CNN
+F 2 "" H 3700 1700 60 0001 C CNN
+F 3 "" H 3700 1700 60 0001 C CNN
+ 1 3700 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR07
+U 1 1 550E42C4
+P 4100 2500
+F 0 "#PWR07" H 4100 2500 30 0001 C CNN
+F 1 "GND" H 4100 2430 30 0001 C CNN
+F 2 "" H 4100 2500 60 0000 C CNN
+F 3 "" H 4100 2500 60 0000 C CNN
+ 1 4100 2500
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3400 3800 3900 3800
+Wire Wire Line
+ 3900 3800 3900 3500
+Wire Wire Line
+ 6400 4600 6400 5150
+Wire Wire Line
+ 7450 2900 8000 2900
+Wire Wire Line
+ 3400 3600 4000 3600
+Wire Wire Line
+ 3800 3600 3800 3500
+Wire Wire Line
+ 6500 3400 6500 3800
+Connection ~ 3800 3600
+Wire Wire Line
+ 4000 3600 4000 3500
+Connection ~ 6500 3600
+Wire Wire Line
+ 6500 2700 6500 3100
+Wire Wire Line
+ 6500 3600 6100 3600
+Wire Wire Line
+ 6100 3600 6100 2300
+Wire Wire Line
+ 6100 2300 6300 2300
+Connection ~ 6500 2900
+Wire Wire Line
+ 3400 1800 6600 1800
+Wire Wire Line
+ 6600 1800 6600 1900
+Wire Wire Line
+ 3700 1700 3700 1800
+Connection ~ 3700 1800
+Wire Wire Line
+ 3400 2000 3500 2000
+Wire Wire Line
+ 3500 2000 3500 2400
+Wire Wire Line
+ 3500 2400 4100 2400
+Connection ~ 3700 2400
+Wire Wire Line
+ 3700 2400 3700 2200
+Wire Wire Line
+ 4100 2250 4100 2500
+Connection ~ 4100 2400
+Wire Wire Line
+ 4100 1950 4100 1800
+Connection ~ 4100 1800
+Wire Wire Line
+ 6500 2900 7150 2900
+Connection ~ 7600 2900
+Wire Wire Line
+ 7600 3700 7600 3800
+Wire Wire Line
+ 7600 3400 7600 2900
+Wire Wire Line
+ 8000 3100 7850 3100
+Wire Wire Line
+ 7850 3100 7850 3250
+Wire Wire Line
+ 5700 4200 6200 4200
+Wire Wire Line
+ 6000 5150 6000 4200
+Connection ~ 6000 4200
+$Comp
+L GND #PWR08
+U 1 1 550E4C85
+P 5800 4550
+F 0 "#PWR08" H 5800 4550 30 0001 C CNN
+F 1 "GND" H 5800 4480 30 0001 C CNN
+F 2 "" H 5800 4550 60 0000 C CNN
+F 3 "" H 5800 4550 60 0000 C CNN
+ 1 5800 4550
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5800 4550 5800 4400
+Wire Wire Line
+ 5800 4400 5700 4400
+Wire Wire Line
+ 6400 5450 6400 5500
+Wire Wire Line
+ 6000 5450 6000 5500
+$EndSCHEMATC
diff --git a/demos/ecc83/ecc83_schlib.dcm b/demos/ecc83/ecc83_schlib.dcm
new file mode 100644
index 0000000..5f3ed79
--- /dev/null
+++ b/demos/ecc83/ecc83_schlib.dcm
@@ -0,0 +1,3 @@
+EESchema-DOCLIB Version 2.0
+#
+#End Doc Library
diff --git a/demos/ecc83/ecc83_schlib.lib b/demos/ecc83/ecc83_schlib.lib
new file mode 100644
index 0000000..f862be2
--- /dev/null
+++ b/demos/ecc83/ecc83_schlib.lib
@@ -0,0 +1,141 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "C" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ C?
+ C_????_*
+ C_????
+ SMD*_c
+ Capacitor*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# ECC81
+#
+DEF ECC81 U 0 0 Y Y 3 L N
+F0 "U" 130 310 50 H V C CNN
+F1 "ECC81" 350 -300 50 H V C CNN
+F2 "VALVE-NOVAL_P" 400 -350 30 H I C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS ECC83
+DRAW
+P 2 1 0 0 -100 -200 -100 -300 N
+P 2 1 0 0 0 200 0 300 N
+P 2 2 0 0 -100 -200 -100 -300 N
+P 2 2 0 0 0 200 0 300 N
+A 0 -100 200 -1799 -1 0 1 0 N -200 -100 200 -100
+A 0 100 200 1 1799 0 1 0 N 200 100 -200 100
+P 2 0 1 0 200 100 200 -100 N
+P 3 0 1 0 -200 100 -200 -100 -200 -100 N
+A 0 -225 103 142 1659 1 1 10 N 100 -200 -100 -200
+P 2 1 1 0 -200 0 -125 0 N
+P 2 1 1 6 -75 0 -125 0 N
+P 2 1 1 6 -25 0 25 0 N
+P 2 1 1 6 75 0 125 0 N
+P 3 1 1 10 -100 200 110 200 110 200 N
+X A 6 0 400 100 D 40 40 1 1 P
+X G 7 -300 0 100 R 40 40 1 1 I
+X K 8 -100 -400 100 U 40 40 1 1 P
+A 0 -225 103 142 1659 2 1 10 N 100 -200 -100 -200
+P 2 2 1 0 -200 0 -125 0 N
+P 2 2 1 6 -75 0 -125 0 N
+P 2 2 1 6 -25 0 25 0 N
+P 2 2 1 6 75 0 125 0 N
+P 3 2 1 10 -100 200 110 200 110 200 N
+X A 1 0 400 100 D 40 40 2 1 P
+X G 2 -300 0 100 R 40 40 2 1 I
+X K 3 -100 -400 100 U 40 40 2 1 P
+A -50 -275 55 265 1534 3 1 0 N 0 -250 -100 -250
+A 50 -275 55 265 1534 3 1 0 N 100 -250 0 -250
+X F1 4 -100 -450 200 U 40 40 3 1 I
+X F1 5 100 -450 200 U 40 40 3 1 I
+X F2 9 0 -450 200 U 40 40 3 1 I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -250 50 H I C CNN
+F1 "GND" 0 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R_*
+ Resistor_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 60 60 1 1 P
+X ~ 2 0 -150 50 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/ecc83/fp-lib-table b/demos/ecc83/fp-lib-table
new file mode 100644
index 0000000..e28e8a1
--- /dev/null
+++ b/demos/ecc83/fp-lib-table
@@ -0,0 +1,3 @@
+(fp_lib_table
+ (lib (name Valves)(type KiCad)(uri ${KISYSMOD}/Valves.pretty)(options "")(descr ""))
+)
diff --git a/demos/electric/electric-cache.lib b/demos/electric/electric-cache.lib
new file mode 100644
index 0000000..8db5798
--- /dev/null
+++ b/demos/electric/electric-cache.lib
@@ -0,0 +1,530 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# A_1KVA
+#
+DEF A_1KVA EA 0 10 N Y 1 F N
+F0 "EA" -90 200 40 H V C CNN
+F1 "A_1KVA" 0 130 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C -20 10 31 0 1 0 N
+C 20 10 31 0 1 0 N
+S -120 60 120 -60 0 1 0 N
+P 4 0 1 0 -100 0 -80 10 -50 10 -50 10 N
+P 4 0 1 0 50 10 80 10 100 0 100 0 N
+P 5 0 1 0 0 -30 -20 -50 20 -50 0 -30 0 -30 F
+X ~ 1 200 0 100 L 10 40 1 1 w
+X ~ 2 -200 0 100 R 10 40 1 1 w
+X ~ 3 0 -100 50 U 10 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_3x1.5mm2
+#
+DEF C_3x1.5mm2 EC 0 10 N Y 1 F N
+F0 "EC" -170 130 40 H V C CNN
+F1 "C_3x1.5mm2" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C -30 50 10 0 1 0 F
+P 3 0 1 0 -130 50 -90 50 -90 50 N
+P 3 0 1 0 -110 50 -30 -50 -30 -50 N
+P 3 0 1 0 -30 50 50 -50 50 -50 N
+P 3 0 1 0 10 50 90 -50 90 -50 N
+P 4 0 1 0 -100 0 100 0 100 0 100 0 N
+X ~ 1 200 0 100 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# C_3x2.5mm2
+#
+DEF C_3x2.5mm2 EC 0 10 N Y 1 F N
+F0 "EC" -170 130 40 H V C CNN
+F1 "C_3x2.5mm2" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C -30 50 10 0 1 0 F
+P 3 0 1 0 -130 50 -90 50 -90 50 N
+P 3 0 1 0 -110 50 -30 -50 -30 -50 N
+P 3 0 1 0 -30 50 50 -50 50 -50 N
+P 3 0 1 0 10 50 90 -50 90 -50 N
+P 4 0 1 0 -100 0 100 0 100 0 100 0 N
+X ~ 1 200 0 100 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# C_3x6mm2
+#
+DEF C_3x6mm2 EC 0 10 N Y 1 F N
+F0 "EC" -170 130 40 H V C CNN
+F1 "C_3x6mm2" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C -30 50 10 0 1 0 F
+P 3 0 1 0 -130 50 -90 50 -90 50 N
+P 3 0 1 0 -110 50 -30 -50 -30 -50 N
+P 3 0 1 0 -30 50 50 -50 50 -50 N
+P 3 0 1 0 10 50 90 -50 90 -50 N
+P 4 0 1 0 -100 0 100 0 100 0 100 0 N
+X ~ 1 200 0 100 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# D_06A
+#
+DEF D_06A ED 0 10 N Y 1 F N
+F0 "ED" -160 120 40 H V C CNN
+F1 "D_06A" -100 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+P 3 0 1 0 -100 0 60 100 60 100 N
+P 3 0 1 0 60 20 100 -20 100 -20 N
+P 3 0 1 0 100 20 60 -20 60 -20 N
+X ~ 1 200 0 120 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# D_10A
+#
+DEF D_10A ED 0 10 N Y 1 F N
+F0 "ED" -160 120 40 H V C CNN
+F1 "D_10A" -100 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+P 3 0 1 0 -100 0 60 100 60 100 N
+P 3 0 1 0 60 20 100 -20 100 -20 N
+P 3 0 1 0 100 20 60 -20 60 -20 N
+X ~ 1 200 0 120 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# D_16A
+#
+DEF D_16A ED 0 10 N Y 1 F N
+F0 "ED" -160 120 40 H V C CNN
+F1 "D_16A" -100 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+P 3 0 1 0 -100 0 60 100 60 100 N
+P 3 0 1 0 60 20 100 -20 100 -20 N
+P 3 0 1 0 100 20 60 -20 60 -20 N
+X ~ 1 200 0 120 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# D_32A
+#
+DEF D_32A ED 0 10 N Y 1 F N
+F0 "ED" -160 120 40 H V C CNN
+F1 "D_32A" -100 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+P 3 0 1 0 -100 0 60 100 60 100 N
+P 3 0 1 0 60 20 100 -20 100 -20 N
+P 3 0 1 0 100 20 60 -20 60 -20 N
+X ~ 1 200 0 120 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# G_Th_3KVA
+#
+DEF G_Th_3KVA EG 0 10 N Y 1 F N
+F0 "EG" -160 120 40 H V C CNN
+F1 "G_Th_3KVA" 0 -120 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 0 0 70 0 0 0 G Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+C 0 0 84 0 1 0 N
+X ~ 1 200 0 118 L 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# I_25A_LUM
+#
+DEF I_25A_LUM EI 0 10 N Y 1 F N
+F0 "EI" -160 120 40 H V C CNN
+F1 "I_25A_LUM" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C 0 0 36 0 1 0 N
+P 3 0 1 0 -100 0 60 100 60 100 N
+P 3 0 1 0 30 20 -30 -20 -30 -20 N
+P 4 0 1 0 -20 30 20 -30 20 -30 20 -30 N
+X ~ 1 200 0 120 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# J_40A_30mA
+#
+DEF J_40A_30mA EJ 0 10 N Y 1 F N
+F0 "EJ" -210 180 40 H V C CNN
+F1 "J_40A_30mA" -20 -120 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 120 200 20 0 0 0 OFS Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+P 5 0 0 0 120 20 120 -20 120 -20 120 -20 120 -20 N
+A -120 60 20 1799 1 0 1 0 N -140 60 -100 60
+P 3 0 1 0 -140 0 -60 0 -60 0 N
+P 3 0 1 0 -140 60 -140 -60 -140 -60 N
+P 3 0 1 0 -60 0 100 100 100 100 N
+P 5 0 1 0 -140 -60 -100 -60 -100 -60 -100 -60 -100 -60 N
+P 5 0 1 0 -100 60 -100 -60 -100 -40 -100 -40 -100 -40 N
+P 6 0 1 0 -120 80 -120 120 40 120 40 60 40 60 40 60 N
+P 10 0 1 0 60 80 60 200 80 200 80 220 160 220 180 200 160 180 80 180 80 200 80 200 N
+X ~ 1 250 0 130 L 10 40 1 1 W
+X ~ 2 -250 0 110 R 10 40 1 1 w
+X ~ 3 250 200 70 L 10 10 1 1 O
+ENDDRAW
+ENDDEF
+#
+# O_600VA
+#
+DEF O_600VA EO 0 10 N Y 1 F N
+F0 "EO" -70 120 40 H V C CNN
+F1 "O_600VA" -40 -150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C -20 0 31 0 1 0 N
+C 20 0 31 0 1 0 N
+S -110 40 120 -90 0 1 0 N
+P 3 0 1 0 -100 0 -50 0 -50 0 N
+P 3 0 1 0 -90 -50 -90 -70 -90 -70 N
+P 3 0 1 0 -80 -40 -80 -80 -80 -80 N
+P 3 0 1 0 -70 -50 -70 -70 -70 -70 N
+P 3 0 1 0 -60 -40 -60 -80 -60 -80 N
+P 3 0 1 0 -50 -50 -50 -70 -50 -70 N
+P 3 0 1 0 -40 -40 -40 -80 -40 -80 N
+P 3 0 1 0 -30 -50 -30 -70 -30 -70 N
+P 3 0 1 0 -20 -40 -20 -80 -20 -80 N
+P 3 0 1 0 -10 -50 -10 -70 -10 -70 N
+P 3 0 1 0 0 -40 0 -80 0 -80 N
+P 3 0 1 0 10 -50 10 -70 10 -70 N
+P 3 0 1 0 20 -40 20 -80 20 -80 N
+P 3 0 1 0 30 -50 30 -70 30 -70 N
+P 3 0 1 0 40 -40 40 -80 40 -80 N
+P 3 0 1 0 50 -50 50 -70 50 -70 N
+P 3 0 1 0 50 0 100 0 100 0 N
+P 3 0 1 0 60 -40 60 -80 60 -80 N
+P 3 0 1 0 70 -50 70 -70 70 -70 N
+P 3 0 1 0 80 -40 80 -80 80 -80 N
+P 3 0 1 0 100 -40 100 -80 100 -80 N
+P 4 0 1 0 90 -50 90 -70 90 -70 90 -70 N
+P 5 0 1 0 -100 -60 100 -60 100 -60 100 -60 100 -60 N
+X ~ 1 200 0 100 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# O_900VA
+#
+DEF O_900VA EO 0 10 N Y 1 F N
+F0 "EO" -70 120 40 H V C CNN
+F1 "O_900VA" -40 -150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+C -20 0 31 0 1 0 N
+C 20 0 31 0 1 0 N
+S -110 40 120 -90 0 1 0 N
+P 3 0 1 0 -100 0 -50 0 -50 0 N
+P 3 0 1 0 -90 -50 -90 -70 -90 -70 N
+P 3 0 1 0 -80 -40 -80 -80 -80 -80 N
+P 3 0 1 0 -70 -50 -70 -70 -70 -70 N
+P 3 0 1 0 -60 -40 -60 -80 -60 -80 N
+P 3 0 1 0 -50 -50 -50 -70 -50 -70 N
+P 3 0 1 0 -40 -40 -40 -80 -40 -80 N
+P 3 0 1 0 -30 -50 -30 -70 -30 -70 N
+P 3 0 1 0 -20 -40 -20 -80 -20 -80 N
+P 3 0 1 0 -10 -50 -10 -70 -10 -70 N
+P 3 0 1 0 0 -40 0 -80 0 -80 N
+P 3 0 1 0 10 -50 10 -70 10 -70 N
+P 3 0 1 0 20 -40 20 -80 20 -80 N
+P 3 0 1 0 30 -50 30 -70 30 -70 N
+P 3 0 1 0 40 -40 40 -80 40 -80 N
+P 3 0 1 0 50 -50 50 -70 50 -70 N
+P 3 0 1 0 50 0 100 0 100 0 N
+P 3 0 1 0 60 -40 60 -80 60 -80 N
+P 3 0 1 0 70 -50 70 -70 70 -70 N
+P 3 0 1 0 80 -40 80 -80 80 -80 N
+P 3 0 1 0 100 -40 100 -80 100 -80 N
+P 4 0 1 0 90 -50 90 -70 90 -70 90 -70 N
+P 5 0 1 0 -100 -60 100 -60 100 -60 100 -60 100 -60 N
+X ~ 1 200 0 100 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# P_10A
+#
+DEF P_10A EP 0 10 N Y 1 F N
+F0 "EP" -160 120 40 H V C CNN
+F1 "P_10A" -80 -140 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 0 80 891 -891 0 0 0 N 1 80 1 -80
+P 2 0 0 0 200 -200 200 -200 N
+X ~ 1 200 0 120 L 10 40 1 1 W
+ENDDRAW
+ENDDEF
+#
+# Q_25A_2F2O
+#
+DEF Q_25A_2F2O EQ 0 10 N Y 1 F N
+F0 "EQ" -160 120 40 H V C CNN
+F1 "Q_25A_2F2O" 0 -140 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 90 150 20 0 0 0 O+F Normal 0 C C
+S -100 -30 100 -70 0 0 0 N
+P 2 0 0 0 200 -200 200 -200 N
+P 3 0 0 0 0 60 0 -60 0 -60 N
+P 3 0 0 0 20 100 20 60 20 60 N
+P 3 0 0 0 40 100 40 90 40 90 N
+P 4 0 0 0 -100 -30 -100 -30 100 -70 100 -70 N
+P 3 0 1 0 -100 0 60 100 60 100 N
+P 5 0 1 0 20 60 20 50 100 50 100 50 100 50 N
+P 12 0 1 0 40 100 40 150 50 150 50 160 50 170 120 170 140 150 120 130 60 130 50 130 50 150 50 150 N
+X ~ 1 -200 0 100 R 10 40 1 1 U
+X ~ 2 200 50 100 L 10 40 1 1 U
+X ~ 3 200 0 120 L 10 40 1 1 U
+X ~ 4 200 -50 100 L 10 40 1 1 I
+X ~ 5 200 150 60 L 10 40 1 1 U
+ENDDRAW
+ENDDEF
+#
+# Q_2A_12O_40KV
+#
+DEF Q_2A_12O_40KV EQ 0 10 N Y 1 F N
+F0 "EQ" -160 120 40 H V C CNN
+F1 "Q_2A_12O_40KV" 0 -730 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 -580 100 -620 0 0 0 N
+P 2 0 0 0 200 -200 200 -200 N
+P 4 0 0 0 -100 -580 -100 -580 100 -620 100 -620 N
+P 3 0 1 0 -100 -550 80 -520 80 -520 N
+P 3 0 1 0 -100 -500 80 -470 80 -470 N
+P 3 0 1 0 -100 -450 80 -420 80 -420 N
+P 3 0 1 0 -100 -400 80 -370 80 -370 N
+P 3 0 1 0 -100 -350 80 -320 80 -320 N
+P 3 0 1 0 -100 -300 80 -270 80 -270 N
+P 3 0 1 0 -100 -250 80 -220 80 -220 N
+P 3 0 1 0 -100 -200 80 -170 80 -170 N
+P 3 0 1 0 -100 -150 80 -120 80 -120 N
+P 3 0 1 0 -100 -100 80 -70 80 -70 N
+P 3 0 1 0 0 -580 0 20 0 20 N
+P 5 0 1 0 -100 0 80 30 80 30 80 30 80 30 N
+P 6 0 1 0 -100 -50 80 -20 80 -20 80 -20 80 -20 80 -20 N
+X ~ 1 -200 0 100 R 10 40 1 1 U
+X ~ 2 200 0 120 L 10 40 1 1 U
+X ~ 3 -200 -50 100 R 10 50 1 1 U
+X ~ 3 -200 -50 100 R 10 50 1 1 U
+X ~ 4 200 -50 120 L 10 50 1 1 U
+X ~ 5 -200 -100 100 R 10 50 1 1 U
+X ~ 6 200 -100 120 L 10 40 1 1 U
+X ~ 7 -200 -150 100 R 10 50 1 1 U
+X ~ 8 200 -150 120 L 10 40 1 1 U
+X ~ 9 -200 -200 100 R 10 50 1 1 U
+X ~ 10 200 -200 120 L 10 40 1 1 U
+X ~ 20 200 -450 120 L 10 40 1 1 U
+X ~ 11 -200 -250 100 R 10 50 1 1 U
+X ~ 21 -200 -500 100 R 10 50 1 1 U
+X ~ 12 200 -250 120 L 10 40 1 1 U
+X ~ 22 200 -500 120 L 10 40 1 1 U
+X ~ 13 -200 -300 100 R 10 50 1 1 U
+X ~ 23 -200 -550 100 R 10 50 1 1 U
+X ~ 14 200 -300 120 L 10 40 1 1 U
+X ~ 24 200 -550 120 L 10 40 1 1 U
+X ~ 15 -200 -350 100 R 10 50 1 1 U
+X ~ 25 200 -600 100 L 10 40 1 1 I
+X ~ 16 200 -350 120 L 10 40 1 1 U
+X ~ 17 -200 -400 100 R 10 50 1 1 U
+X ~ 18 200 -400 120 L 10 40 1 1 U
+X ~ 19 -200 -450 100 R 10 50 1 1 U
+ENDDRAW
+ENDDEF
+#
+# R_16A_30mA
+#
+DEF R_16A_30mA ER 0 10 N Y 1 F N
+F0 "ER" -210 180 40 H V C CNN
+F1 "R_16A_30mA" 0 -200 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 20 -100 50 0 0 0 M Normal 0 C C
+T 0 120 200 20 0 0 0 OF Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+P 2 0 0 0 400 -200 400 -200 N
+P 3 0 0 0 20 -50 20 50 20 50 N
+A -120 60 20 1799 1 0 1 0 N -140 60 -100 60
+C 20 -100 50 0 1 0 N
+P 3 0 1 0 -140 0 -60 0 -60 0 N
+P 3 0 1 0 -140 60 -140 -60 -140 -60 N
+P 3 0 1 0 -60 0 100 100 100 100 N
+P 3 0 1 0 140 20 100 -20 100 -20 N
+P 4 0 1 0 100 20 140 -20 140 -20 140 -20 N
+P 5 0 1 0 -140 -60 -100 -60 -100 -60 -100 -60 -100 -60 N
+P 5 0 1 0 -100 60 -100 -60 -100 -40 -100 -40 -100 -40 N
+P 6 0 1 0 -120 80 -120 120 40 120 40 60 40 60 40 60 N
+P 10 0 1 0 60 80 60 200 80 200 80 220 160 220 180 200 160 180 80 180 80 200 80 200 N
+X ~ 1 250 0 130 L 10 40 1 1 W
+X ~ 2 -250 0 110 R 10 40 1 1 w
+X ~ 3 250 200 70 L 10 10 1 1 O
+X ~ 4 250 -100 180 L 10 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_63A
+#
+DEF S_63A ES 0 10 N Y 1 F N
+F0 "ES" -210 180 40 H V C CNN
+F1 "S_63A" 0 -110 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 120 200 20 0 0 0 OFS Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+P 2 0 0 0 400 -200 400 -200 N
+P 3 0 0 0 -150 0 -100 0 -100 0 N
+P 3 0 0 0 120 20 120 -20 120 -20 N
+P 3 0 1 0 -140 0 -60 0 -60 0 N
+P 3 0 1 0 -140 60 -140 -60 -140 -60 N
+P 3 0 1 0 -140 60 -100 60 -100 60 N
+P 3 0 1 0 -120 60 -120 80 -120 80 N
+P 3 0 1 0 -60 0 100 100 100 100 N
+P 5 0 1 0 -140 -60 -100 -60 -100 -60 -100 -60 -100 -60 N
+P 5 0 1 0 -100 60 -100 -60 -100 -40 -100 -40 -100 -40 N
+P 6 0 1 0 -120 80 -120 120 40 120 40 60 40 60 40 60 N
+P 10 0 1 0 60 80 60 200 80 200 80 220 160 220 180 200 160 180 80 180 80 200 80 200 N
+X ~ 1 250 0 130 L 10 40 1 1 W
+X ~ 2 -250 0 100 R 10 40 1 1 w
+X ~ 3 250 200 70 L 10 10 1 1 O
+ENDDRAW
+ENDDEF
+#
+# V_A10A
+#
+DEF V_A10A EV 0 10 N Y 1 F N
+F0 "EV" -160 120 40 H V C CNN
+F1 "V_A10A" -60 -140 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 0 0 70 0 0 0 A Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+C 0 0 84 0 1 0 N
+P 3 0 1 0 -100 0 -80 0 -80 0 N
+X ~ 1 -200 0 100 R 10 40 1 1 W
+X ~ 2 200 0 118 L 10 40 1 1 w
+ENDDRAW
+ENDDEF
+#
+# V_F50Hz
+#
+DEF V_F50Hz EV 0 10 N Y 1 F N
+F0 "EV" -160 120 40 H V C CNN
+F1 "V_F50Hz" -40 -140 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 0 0 50 0 0 0 Hz Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+C 0 0 84 0 1 0 N
+X ~ 1 200 0 118 L 10 40 1 1 W
+ENDDRAW
+ENDDEF
+#
+# V_U400V
+#
+DEF V_U400V EV 0 10 N Y 1 F N
+F0 "EV" -160 120 40 H V C CNN
+F1 "V_U400V" -60 -140 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 0 0 70 0 0 0 V Normal 0 C C
+P 2 0 0 0 200 -200 200 -200 N
+C 0 0 84 0 1 0 N
+X ~ 1 200 0 118 L 10 40 1 1 W
+ENDDRAW
+ENDDEF
+#
+# W_15KA
+#
+DEF W_15KA EW 0 10 N Y 1 F N
+F0 "EW" -160 120 40 H V C CNN
+F1 "W_15KA" -50 -210 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+S -120 60 120 -60 0 1 0 N
+S -10 -40 10 -60 0 1 0 N
+P 3 0 1 0 -100 0 -80 0 -80 0 N
+P 7 0 1 0 -80 0 -40 0 -80 40 -80 0 -80 -40 -40 0 -40 0 F
+P 8 0 1 0 80 0 40 0 80 40 80 -40 80 0 80 -40 40 0 40 0 F
+X ~ 1 200 0 100 L 10 40 1 1 W
+X ~ 2 -200 0 100 R 10 40 1 1 w
+X ~ 3 0 -100 50 U 10 50 1 1 O
+ENDDRAW
+ENDDEF
+#
+# Y_ELC
+#
+DEF Y_ELC EY 0 10 N Y 1 F N
+F0 "EY" -10 120 40 H V C CNN
+F1 "Y_ELC" 60 -120 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 200 -200 200 -200 N
+P 3 0 0 0 -50 10 -50 -10 -50 -10 N
+P 3 0 0 0 -40 20 -40 -20 -40 -20 N
+P 3 0 0 0 -30 30 -30 -30 -30 -30 N
+P 3 0 0 0 -10 50 -10 -50 -10 -50 N
+P 4 0 0 0 -60 0 70 0 80 0 70 0 N
+P 4 0 0 0 -20 40 -20 -40 -20 -40 -20 -40 N
+P 4 0 0 0 0 60 0 60 0 -60 0 -60 N
+X ~ 1 200 0 118 L 10 40 1 1 W
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/electric/electric.pro b/demos/electric/electric.pro
new file mode 100644
index 0000000..52b1ed8
--- /dev/null
+++ b/demos/electric/electric.pro
@@ -0,0 +1,14 @@
+update=02/08/2015 19:59:42
+last_client=kicad
+[general]
+version=1
+RootSch=electric.sch
+BoardNm=electric.brd
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=power
+LibName2=elec-unifil
+LibName3=device
+LibName4=conn
diff --git a/demos/electric/electric.sch b/demos/electric/electric.sch
new file mode 100644
index 0000000..2c4acfe
--- /dev/null
+++ b/demos/electric/electric.sch
@@ -0,0 +1,1463 @@
+EESchema Schematic File Version 2
+LIBS:electric-rescue
+LIBS:power
+LIBS:elec-unifil
+LIBS:device
+LIBS:conn
+LIBS:regul
+LIBS:electric-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title "Exemple librairie elec-unifil"
+Date "4 jan 2006"
+Rev "0.3"
+Comp ""
+Comment1 "Applications pour Electricite"
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Notes Line
+ 3250 3100 5400 3100
+Wire Notes Line
+ 3850 2850 4700 2850
+Connection ~ 8250 2900
+Wire Wire Line
+ 5250 2400 8350 2400
+Wire Wire Line
+ 5250 2900 8350 2900
+Wire Wire Line
+ 4450 2400 4850 2400
+Wire Wire Line
+ 4450 1900 4850 1900
+Wire Wire Line
+ 5250 1900 5700 1900
+Wire Notes Line
+ 5500 550 5600 550
+Wire Notes Line
+ 5500 1650 5500 550
+Wire Notes Line
+ 5500 1650 8100 1650
+Wire Notes Line
+ 5500 2200 8100 2200
+Wire Notes Line
+ 5500 1700 5500 2200
+Wire Notes Line
+ 5500 1700 8100 1700
+Connection ~ 3950 1900
+Connection ~ 3150 2450
+Connection ~ 4550 1900
+Wire Wire Line
+ 2600 800 2600 1900
+Wire Wire Line
+ 2600 800 5700 800
+Wire Wire Line
+ 4550 800 4550 1900
+Wire Wire Line
+ 4850 2400 4850 2900
+Wire Wire Line
+ 3750 2450 4050 2450
+Wire Wire Line
+ 3950 2400 4050 2400
+Wire Wire Line
+ 3950 1900 3950 2400
+Wire Wire Line
+ 3150 1950 4050 1950
+Wire Wire Line
+ 3100 1900 4050 1900
+Wire Wire Line
+ 3000 2450 3350 2450
+Wire Wire Line
+ 3150 2450 3150 1950
+Wire Wire Line
+ 3100 2400 3100 1900
+Wire Wire Line
+ 3000 2400 3100 2400
+Wire Notes Line
+ 3850 2050 3850 2850
+Wire Notes Line
+ 3250 2050 3850 2050
+Wire Notes Line
+ 3250 2050 3250 3100
+Wire Notes Line
+ 4700 2850 4700 1150
+Wire Notes Line
+ 4700 1150 5400 1150
+Wire Notes Line
+ 5400 1150 5400 3100
+Wire Notes Line
+ 8100 6000 8100 3150
+Wire Notes Line
+ 5500 6000 5500 3150
+Wire Notes Line
+ 5500 3150 8100 3150
+Text Notes 4150 3000 0 60 ~ 0
+AGBT
+Wire Wire Line
+ 1550 950 1800 950
+Wire Wire Line
+ 1550 1500 1550 950
+Wire Wire Line
+ 1350 1500 1550 1500
+Wire Wire Line
+ 1100 950 1350 950
+Wire Wire Line
+ 1100 1500 1100 950
+Wire Wire Line
+ 850 1500 1100 1500
+Wire Wire Line
+ 1750 2450 1800 2450
+Wire Wire Line
+ 1750 2750 1750 2450
+Wire Wire Line
+ 1700 2750 1750 2750
+Wire Wire Line
+ 1750 2400 1800 2400
+Wire Wire Line
+ 1750 2150 1750 2400
+Wire Wire Line
+ 1700 2150 1750 2150
+Wire Wire Line
+ 1700 3350 5700 3350
+Wire Wire Line
+ 1700 3850 5400 3850
+Wire Wire Line
+ 1700 4350 2350 4350
+Wire Wire Line
+ 1700 4850 2050 4850
+Wire Wire Line
+ 850 4850 1200 4850
+Wire Wire Line
+ 850 4350 1200 4350
+Wire Wire Line
+ 850 3850 1200 3850
+Wire Wire Line
+ 850 3350 1200 3350
+$Comp
+L R_16A_30mA ER01
+U 1 1 416242BF
+P 1450 2150
+F 0 "ER01" H 1400 2380 40 0000 C CNN
+F 1 "R_16A_30mA" H 1450 1950 40 0000 C CNN
+F 2 "Courbe D" H 1450 1900 30 0000 C CNN
+F 3 "" H 1450 2150 60 0001 C CNN
+ 1 1450 2150
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 850 2750 1200 2750
+$Comp
+L C_3x2.5mm2 EC?
+U 1 1 41652EC2
+P 2950 6950
+F 0 "EC?" H 2780 7080 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 6850 40 0000 C CNN
+F 2 "" H 2950 6950 60 0001 C CNN
+F 3 "" H 2950 6950 60 0001 C CNN
+ 1 2950 6950
+ 1 0 0 -1
+$EndComp
+Text Notes 4400 7650 0 60 ~ 0
+Extérieur
+Text Notes 3800 6260 0 60 ~ 0
+Prises pièces à vivre
+Text Notes 6860 5960 0 60 ~ 0
+Cuisine & Lingerie
+Wire Notes Line
+ 2150 6300 5250 6300
+Wire Notes Line
+ 5250 4100 2150 4100
+Wire Notes Line
+ 5250 6300 5250 4100
+Connection ~ 2050 7300
+Connection ~ 2050 6950
+Connection ~ 2050 6600
+Wire Wire Line
+ 2050 4850 2050 7550
+Wire Wire Line
+ 2050 7550 2350 7550
+Wire Wire Line
+ 2350 7300 2050 7300
+Wire Wire Line
+ 2350 6950 2050 6950
+Wire Wire Line
+ 2350 6600 2050 6600
+Wire Notes Line
+ 2150 7750 2150 6350
+Wire Notes Line
+ 5250 7750 2150 7750
+Wire Notes Line
+ 5250 6350 5250 7750
+Wire Notes Line
+ 2150 6350 5250 6350
+Wire Notes Line
+ 2150 4100 2150 6300
+Wire Wire Line
+ 5400 6100 8350 6100
+Wire Wire Line
+ 5400 3850 5400 6100
+Wire Notes Line
+ 5500 6000 8100 6000
+Text Notes 10150 6250 0 60 ~ 0
+Prises Grange
+Wire Notes Line
+ 8150 6300 8150 4200
+Wire Notes Line
+ 11100 6300 8150 6300
+Wire Notes Line
+ 11100 4200 11100 6300
+Wire Notes Line
+ 8150 4200 11100 4200
+Wire Wire Line
+ 8250 4450 8250 6100
+Wire Wire Line
+ 8750 5100 8750 5400
+Wire Wire Line
+ 9250 5100 8750 5100
+$Comp
+L P_10A EP4
+U 1 1 41652537
+P 9450 5100
+F 0 "EP4" H 9600 5220 40 0000 C CNN
+F 1 "P_10A" H 9640 5000 40 0000 C CNN
+F 2 "TGBT" H 9280 5100 40 0000 C CNN
+F 3 "" H 9450 5100 60 0001 C CNN
+ 1 9450 5100
+ -1 0 0 -1
+$EndComp
+Text Notes 10450 4050 0 60 ~ 0
+Servitudes\npermanentes\nprimaires
+Text Notes 10350 2500 0 60 ~ 0
+Servitudes\npermanentes\nsecondaires
+Text Notes 6050 2150 0 60 ~ 0
+Servitudes secourues protégées
+Text Notes 6700 700 0 60 ~ 0
+Servitudes secourues
+Wire Notes Line
+ 8150 4150 8150 2650
+Wire Notes Line
+ 11100 4150 8150 4150
+Wire Notes Line
+ 11100 2650 11100 4150
+Wire Notes Line
+ 8150 2650 11100 2650
+Wire Notes Line
+ 11100 500 11100 2600
+Wire Notes Line
+ 8150 2600 11100 2600
+Wire Notes Line
+ 8150 500 8150 2600
+Wire Notes Line
+ 8100 1700 8100 2200
+Wire Notes Line
+ 8100 1650 8100 550
+Wire Notes Line
+ 8100 550 5550 550
+Wire Notes Line
+ 11100 500 8150 500
+Wire Notes Line
+ 11050 500 11050 500
+$Comp
+L D_06A ED30
+U 1 1 41642C2F
+P 8550 2900
+F 0 "ED30" H 8390 3020 40 0000 C CNN
+F 1 "D_06A" H 8450 2820 40 0000 C CNN
+F 2 "Supervision" H 9780 2900 40 0000 C CNN
+F 3 "" H 8550 2900 60 0001 C CNN
+ 1 8550 2900
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x6mm2 EC27
+U 1 1 4164215E
+P 6300 3350
+F 0 "EC27" H 6130 3480 40 0000 C CNN
+F 1 "C_3x6mm2" H 6300 3250 40 0000 C CNN
+F 2 "" H 6300 3350 60 0001 C CNN
+F 3 "" H 6300 3350 60 0001 C CNN
+ 1 6300 3350
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC?
+U 1 1 41642129
+P 2950 6600
+F 0 "EC?" H 2780 6730 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 6500 40 0000 C CNN
+F 2 "" H 2950 6600 60 0001 C CNN
+F 3 "" H 2950 6600 60 0001 C CNN
+ 1 2950 6600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC28
+U 1 1 4164211E
+P 2950 6100
+F 0 "EC28" H 2780 6230 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 6000 40 0000 C CNN
+F 2 "" H 2950 6100 60 0001 C CNN
+F 3 "" H 2950 6100 60 0001 C CNN
+ 1 2950 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC22
+U 1 1 4164211C
+P 2950 5750
+F 0 "EC22" H 2780 5880 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 5650 40 0000 C CNN
+F 2 "" H 2950 5750 60 0001 C CNN
+F 3 "" H 2950 5750 60 0001 C CNN
+ 1 2950 5750
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC37
+U 1 1 41642119
+P 2950 5400
+F 0 "EC37" H 2780 5530 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 5300 40 0000 C CNN
+F 2 "" H 2950 5400 60 0001 C CNN
+F 3 "" H 2950 5400 60 0001 C CNN
+ 1 2950 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC33
+U 1 1 41642116
+P 2950 5050
+F 0 "EC33" H 2780 5180 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 4950 40 0000 C CNN
+F 2 "" H 2950 5050 60 0001 C CNN
+F 3 "" H 2950 5050 60 0001 C CNN
+ 1 2950 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC21
+U 1 1 41642114
+P 2950 4700
+F 0 "EC21" H 2780 4830 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 4600 40 0000 C CNN
+F 2 "" H 2950 4700 60 0001 C CNN
+F 3 "" H 2950 4700 60 0001 C CNN
+ 1 2950 4700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC20
+U 1 1 41642111
+P 2950 4350
+F 0 "EC20" H 2780 4480 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 2950 4250 40 0000 C CNN
+F 2 "" H 2950 4350 60 0001 C CNN
+F 3 "" H 2950 4350 60 0001 C CNN
+ 1 2950 4350
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC32
+U 1 1 41642105
+P 6300 5800
+F 0 "EC32" H 6130 5930 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 5700 40 0000 C CNN
+F 2 "" H 6300 5800 60 0001 C CNN
+F 3 "" H 6300 5800 60 0001 C CNN
+ 1 6300 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC29
+U 1 1 41642102
+P 6300 5450
+F 0 "EC29" H 6130 5580 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 5350 40 0000 C CNN
+F 2 "" H 6300 5450 60 0001 C CNN
+F 3 "" H 6300 5450 60 0001 C CNN
+ 1 6300 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC30
+U 1 1 416420FE
+P 6300 5100
+F 0 "EC30" H 6130 5230 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 5000 40 0000 C CNN
+F 2 "" H 6300 5100 60 0001 C CNN
+F 3 "" H 6300 5100 60 0001 C CNN
+ 1 6300 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC23
+U 1 1 416420FB
+P 6300 4750
+F 0 "EC23" H 6130 4880 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 4650 40 0000 C CNN
+F 2 "" H 6300 4750 60 0001 C CNN
+F 3 "" H 6300 4750 60 0001 C CNN
+ 1 6300 4750
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC26
+U 1 1 416420F8
+P 6300 4400
+F 0 "EC26" H 6130 4530 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 4300 40 0000 C CNN
+F 2 "" H 6300 4400 60 0001 C CNN
+F 3 "" H 6300 4400 60 0001 C CNN
+ 1 6300 4400
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC25
+U 1 1 416420F5
+P 6300 4050
+F 0 "EC25" H 6130 4180 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 3950 40 0000 C CNN
+F 2 "" H 6300 4050 60 0001 C CNN
+F 3 "" H 6300 4050 60 0001 C CNN
+ 1 6300 4050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC24
+U 1 1 416420F1
+P 6300 3700
+F 0 "EC24" H 6130 3830 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 6300 3600 40 0000 C CNN
+F 2 "" H 6300 3700 60 0001 C CNN
+F 3 "" H 6300 3700 60 0001 C CNN
+ 1 6300 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC39
+U 1 1 416420E1
+P 8950 6100
+F 0 "EC39" H 8780 6230 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 8950 6000 40 0000 C CNN
+F 2 "" H 8950 6100 60 0001 C CNN
+F 3 "" H 8950 6100 60 0001 C CNN
+ 1 8950 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC38
+U 1 1 416420DF
+P 8950 5750
+F 0 "EC38" H 8780 5880 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 8950 5650 40 0000 C CNN
+F 2 "" H 8950 5750 60 0001 C CNN
+F 3 "" H 8950 5750 60 0001 C CNN
+ 1 8950 5750
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC35
+U 1 1 416420DC
+P 8950 5400
+F 0 "EC35" H 8900 5560 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 8950 5300 40 0000 C CNN
+F 2 "" H 8950 5400 60 0001 C CNN
+F 3 "" H 8950 5400 60 0001 C CNN
+ 1 8950 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC36
+U 1 1 416420D9
+P 8950 4800
+F 0 "EC36" H 8780 4930 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 8950 4700 40 0000 C CNN
+F 2 "" H 8950 4800 60 0001 C CNN
+F 3 "" H 8950 4800 60 0001 C CNN
+ 1 8950 4800
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x2.5mm2 EC34
+U 1 1 416420D1
+P 8950 4450
+F 0 "EC34" H 8780 4580 40 0000 C CNN
+F 1 "C_3x2.5mm2" H 8950 4350 40 0000 C CNN
+F 2 "" H 8950 4450 60 0001 C CNN
+F 3 "" H 8950 4450 60 0001 C CNN
+ 1 8950 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC44
+U 1 1 416420B8
+P 8950 3950
+F 0 "EC44" H 8780 4080 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 3850 40 0000 C CNN
+F 2 "" H 8950 3950 60 0001 C CNN
+F 3 "" H 8950 3950 60 0001 C CNN
+ 1 8950 3950
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC19
+U 1 1 416420B5
+P 8950 2900
+F 0 "EC19" H 8780 3030 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 2800 40 0000 C CNN
+F 2 "" H 8950 2900 60 0001 C CNN
+F 3 "" H 8950 2900 60 0001 C CNN
+ 1 8950 2900
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC43
+U 1 1 416420B2
+P 8950 3600
+F 0 "EC43" H 8780 3730 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 3500 40 0000 C CNN
+F 2 "" H 8950 3600 60 0001 C CNN
+F 3 "" H 8950 3600 60 0001 C CNN
+ 1 8950 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC42
+U 1 1 416420A7
+P 8950 2400
+F 0 "EC42" H 8780 2530 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 2300 40 0000 C CNN
+F 2 "" H 8950 2400 60 0001 C CNN
+F 3 "" H 8950 2400 60 0001 C CNN
+ 1 8950 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC16
+U 1 1 416420A1
+P 8950 2050
+F 0 "EC16" H 8780 2180 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 1950 40 0000 C CNN
+F 2 "" H 8950 2050 60 0001 C CNN
+F 3 "" H 8950 2050 60 0001 C CNN
+ 1 8950 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC15
+U 1 1 41642099
+P 8950 1700
+F 0 "EC15" H 8780 1830 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 1600 40 0000 C CNN
+F 2 "" H 8950 1700 60 0001 C CNN
+F 3 "" H 8950 1700 60 0001 C CNN
+ 1 8950 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC14
+U 1 1 41642094
+P 8950 1350
+F 0 "EC14" H 8780 1480 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 1250 40 0000 C CNN
+F 2 "" H 8950 1350 60 0001 C CNN
+F 3 "" H 8950 1350 60 0001 C CNN
+ 1 8950 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC13
+U 1 1 41642090
+P 8950 1000
+F 0 "EC13" H 8780 1130 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 900 40 0000 C CNN
+F 2 "" H 8950 1000 60 0001 C CNN
+F 3 "" H 8950 1000 60 0001 C CNN
+ 1 8950 1000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC18
+U 1 1 41642083
+P 6300 1900
+F 0 "EC18" H 6130 2030 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 6300 1800 40 0000 C CNN
+F 2 "" H 6300 1900 60 0001 C CNN
+F 3 "" H 6300 1900 60 0001 C CNN
+ 1 6300 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC31
+U 1 1 41642074
+P 6300 1500
+F 0 "EC31" H 6130 1630 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 6300 1400 40 0000 C CNN
+F 2 "" H 6300 1500 60 0001 C CNN
+F 3 "" H 6300 1500 60 0001 C CNN
+ 1 6300 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC17
+U 1 1 4164206D
+P 6300 1150
+F 0 "EC17" H 6130 1280 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 6300 1050 40 0000 C CNN
+F 2 "" H 6300 1150 60 0001 C CNN
+F 3 "" H 6300 1150 60 0001 C CNN
+ 1 6300 1150
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_25A_LUM EI11
+U 1 1 4163DF39
+P 9350 650
+F 0 "EI11" H 9190 770 40 0000 C CNN
+F 1 "I_25A_LUM" H 9500 550 40 0000 C CNN
+F 2 "" H 9350 650 60 0001 C CNN
+F 3 "" H 9350 650 60 0001 C CNN
+ 1 9350 650
+ 1 0 0 -1
+$EndComp
+Text HLabel 9150 6100 2 60 Output ~ 0
+EC39
+Text HLabel 9150 5750 2 60 Output ~ 0
+EC38
+Text HLabel 9150 5400 2 60 Output ~ 0
+EC35
+Text HLabel 9150 4800 2 60 Output ~ 0
+EC36
+Text HLabel 9150 4450 2 60 Output ~ 0
+EC34
+Text HLabel 3150 6100 2 60 Output ~ 0
+EC28
+Text HLabel 3150 5750 2 60 Output ~ 0
+EC22
+Text HLabel 3150 5400 2 60 Output ~ 0
+EC37
+Text HLabel 3150 5050 2 60 Output ~ 0
+EC33
+Text HLabel 3150 4700 2 60 Output ~ 0
+EC21
+Text HLabel 3150 4350 2 60 Output ~ 0
+EC20
+Text HLabel 6500 5800 2 60 Output ~ 0
+EC32
+Text HLabel 6500 5450 2 60 Output ~ 0
+EC29
+Text HLabel 6500 5100 2 60 Output ~ 0
+EC30
+Text HLabel 6500 4750 2 60 Output ~ 0
+EC23
+Text HLabel 6500 4400 2 60 Output ~ 0
+EC26
+Text HLabel 6500 4050 2 60 Output ~ 0
+EC25
+Text HLabel 6500 3700 2 60 Output ~ 0
+EC24
+Text HLabel 6500 3350 2 60 Output ~ 0
+EC27
+Text HLabel 9150 3950 2 60 Output ~ 0
+EC44
+Text HLabel 9150 3600 2 60 Output ~ 0
+EC43
+Text HLabel 9150 3250 2 60 Output ~ 0
+EC41
+Text HLabel 9150 2900 2 60 Output ~ 0
+EC19
+Text HLabel 9150 2400 2 60 Output ~ 0
+EC42
+Text HLabel 9150 2050 2 60 Output ~ 0
+EC16
+Text HLabel 9150 1700 2 60 Output ~ 0
+EC15
+Text HLabel 9150 1350 2 60 Output ~ 0
+EC14
+Text HLabel 9150 1000 2 60 Output ~ 0
+EC13
+Text HLabel 9550 650 2 60 Output ~ 0
+EC11
+Text HLabel 6500 1900 2 60 Output ~ 0
+EC18
+Text HLabel 6500 1500 2 60 Output ~ 0
+EC31
+Text HLabel 6500 1150 2 60 Output ~ 0
+EC17
+$Comp
+L C_3x1.5mm2 EC41
+U 1 1 4163D7A2
+P 8950 3250
+F 0 "EC41" H 8780 3380 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 3150 40 0000 C CNN
+F 2 "" H 8950 3250 60 0001 C CNN
+F 3 "" H 8950 3250 60 0001 C CNN
+ 1 8950 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_3x1.5mm2 EC11
+U 1 1 4163D79F
+P 8950 650
+F 0 "EC11" H 8780 780 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 8950 550 40 0000 C CNN
+F 2 "" H 8950 650 60 0001 C CNN
+F 3 "" H 8950 650 60 0001 C CNN
+ 1 8950 650
+ 1 0 0 -1
+$EndComp
+Connection ~ 8250 3600
+Connection ~ 8250 3250
+Wire Wire Line
+ 8350 3600 8250 3600
+Wire Wire Line
+ 8250 3950 8350 3950
+Wire Wire Line
+ 8250 2900 8250 3950
+Wire Wire Line
+ 8350 3250 8250 3250
+Wire Wire Line
+ 8250 650 8250 2400
+Text HLabel 6500 800 2 60 Output ~ 0
+EC12
+$Comp
+L C_3x1.5mm2 EC12
+U 1 1 4163D458
+P 6300 800
+F 0 "EC12" H 6150 900 40 0000 C CNN
+F 1 "C_3x1.5mm2" H 6300 700 40 0000 C CNN
+F 2 "" H 6300 800 60 0001 C CNN
+F 3 "" H 6300 800 60 0001 C CNN
+ 1 6300 800
+ 1 0 0 -1
+$EndComp
+Connection ~ 850 2750
+Connection ~ 8250 6100
+Connection ~ 8250 4800
+Connection ~ 8250 5400
+Connection ~ 8250 5750
+Wire Wire Line
+ 8350 5750 8250 5750
+Wire Wire Line
+ 8350 5400 8250 5400
+Wire Wire Line
+ 8350 4800 8250 4800
+Wire Wire Line
+ 8350 4450 8250 4450
+Connection ~ 2250 4350
+Connection ~ 2250 5750
+Connection ~ 2250 5400
+Connection ~ 2250 5050
+Connection ~ 2250 4700
+Wire Wire Line
+ 2350 4700 2250 4700
+Wire Wire Line
+ 2250 5050 2350 5050
+Wire Wire Line
+ 2250 5400 2350 5400
+Wire Wire Line
+ 2250 5750 2350 5750
+Wire Wire Line
+ 2250 6100 2350 6100
+Wire Wire Line
+ 2250 4350 2250 6100
+$Comp
+L D_10A ED73
+U 1 1 4162F22A
+P 2550 7550
+F 0 "ED73" H 2390 7670 40 0000 C CNN
+F 1 "D_10A" H 2450 7470 40 0000 C CNN
+F 2 "" H 2550 7550 60 0001 C CNN
+F 3 "" H 2550 7550 60 0001 C CNN
+ 1 2550 7550
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED72
+U 1 1 4162F1F7
+P 2550 7300
+F 0 "ED72" H 2390 7420 40 0000 C CNN
+F 1 "D_10A" H 2450 7220 40 0000 C CNN
+F 2 "" H 2550 7300 60 0001 C CNN
+F 3 "" H 2550 7300 60 0001 C CNN
+ 1 2550 7300
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED71
+U 1 1 4162F1F0
+P 2550 6950
+F 0 "ED71" H 2390 7070 40 0000 C CNN
+F 1 "D_10A" H 2450 6870 40 0000 C CNN
+F 2 "Abri pré Mouillière proche" H 4160 6980 40 0000 C CNN
+F 3 "" H 2550 6950 60 0001 C CNN
+ 1 2550 6950
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED70
+U 1 1 4162F1CA
+P 2550 6600
+F 0 "ED70" H 2390 6720 40 0000 C CNN
+F 1 "D_10A" H 2450 6520 40 0000 C CNN
+F 2 "Abri coté route" H 3920 6600 40 0000 C CNN
+F 3 "" H 2550 6600 60 0001 C CNN
+ 1 2550 6600
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED55
+U 1 1 4162F8B1
+P 2550 6100
+F 0 "ED55" H 2390 6220 40 0000 C CNN
+F 1 "D_16A" H 2450 6020 40 0000 C CNN
+F 2 "Entrée et salle de bain" H 4080 6100 40 0000 C CNN
+F 3 "" H 2550 6100 60 0001 C CNN
+ 1 2550 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED54
+U 1 1 4162F875
+P 2550 5750
+F 0 "ED54" H 2390 5870 40 0000 C CNN
+F 1 "D_16A" H 2450 5670 40 0000 C CNN
+F 2 "Séjour et sam" H 3860 5740 40 0000 C CNN
+F 3 "" H 2550 5750 60 0001 C CNN
+ 1 2550 5750
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED53
+U 1 1 4162F862
+P 2550 5400
+F 0 "ED53" H 2390 5520 40 0000 C CNN
+F 1 "D_16A" H 2450 5320 40 0000 C CNN
+F 2 "Bureau" H 3700 5400 40 0000 C CNN
+F 3 "" H 2550 5400 60 0001 C CNN
+ 1 2550 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED52
+U 1 1 4162F856
+P 2550 5050
+F 0 "ED52" H 2390 5170 40 0000 C CNN
+F 1 "D_16A" H 2450 4970 40 0000 C CNN
+F 2 "Chambre 3" H 3760 5040 40 0000 C CNN
+F 3 "" H 2550 5050 60 0001 C CNN
+ 1 2550 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED51
+U 1 1 4162F84D
+P 2550 4700
+F 0 "ED51" H 2390 4820 40 0000 C CNN
+F 1 "D_16A" H 2450 4620 40 0000 C CNN
+F 2 "Chambre 2" H 3760 4700 40 0000 C CNN
+F 3 "" H 2550 4700 60 0001 C CNN
+ 1 2550 4700
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED50
+U 1 1 4162F848
+P 2550 4350
+F 0 "ED50" H 2390 4470 40 0000 C CNN
+F 1 "D_16A" H 2450 4270 40 0000 C CNN
+F 2 "Chambre 1" H 3760 4340 40 0000 C CNN
+F 3 "" H 2550 4350 60 0001 C CNN
+ 1 2550 4350
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED64
+U 1 1 4162F875
+P 8550 6100
+F 0 "ED64" H 8390 6220 40 0000 C CNN
+F 1 "D_16A" H 8450 6020 40 0000 C CNN
+F 2 "Etage coté atelier" H 9940 6100 40 0000 C CNN
+F 3 "" H 8550 6100 60 0001 C CNN
+ 1 8550 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED63
+U 1 1 4162F862
+P 8550 5750
+F 0 "ED63" H 8390 5870 40 0000 C CNN
+F 1 "D_16A" H 8450 5670 40 0000 C CNN
+F 2 "Etage coté sellerie" H 9960 5740 40 0000 C CNN
+F 3 "" H 8550 5750 60 0001 C CNN
+ 1 8550 5750
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED62
+U 1 1 4162F856
+P 8550 5400
+F 0 "ED62" H 8390 5520 40 0000 C CNN
+F 1 "D_16A" H 8450 5320 40 0000 C CNN
+F 2 "Local technique" H 9880 5400 40 0000 C CNN
+F 3 "" H 8550 5400 60 0001 C CNN
+ 1 8550 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED61
+U 1 1 4162F84D
+P 8550 4800
+F 0 "ED61" H 8390 4920 40 0000 C CNN
+F 1 "D_16A" H 8450 4720 40 0000 C CNN
+F 2 "Sellerie" H 9720 4800 40 0000 C CNN
+F 3 "" H 8550 4800 60 0001 C CNN
+ 1 8550 4800
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED60
+U 1 1 4162F848
+P 8550 4450
+F 0 "ED60" H 8390 4570 40 0000 C CNN
+F 1 "D_16A" H 8450 4370 40 0000 C CNN
+F 2 "Atelier" H 9700 4450 40 0000 C CNN
+F 3 "" H 8550 4450 60 0001 C CNN
+ 1 8550 4450
+ 1 0 0 -1
+$EndComp
+Connection ~ 5600 5450
+Connection ~ 5600 5100
+Connection ~ 5600 4750
+Connection ~ 5600 4400
+Connection ~ 5600 4050
+Connection ~ 5600 3700
+Connection ~ 5600 3350
+Wire Wire Line
+ 5600 5450 5700 5450
+Wire Wire Line
+ 5600 5100 5700 5100
+Wire Wire Line
+ 5600 4750 5700 4750
+Wire Wire Line
+ 5600 4400 5700 4400
+Wire Wire Line
+ 5600 4050 5700 4050
+Wire Wire Line
+ 5700 3700 5600 3700
+Wire Wire Line
+ 5600 5800 5700 5800
+Wire Wire Line
+ 5600 3350 5600 5800
+$Comp
+L D_10A ED47
+U 1 1 4162F76B
+P 5900 5800
+F 0 "ED47" H 5740 5920 40 0000 C CNN
+F 1 "D_10A" H 5800 5720 40 0000 C CNN
+F 2 "Prises lingerie" H 7240 5800 40 0000 C CNN
+F 3 "" H 5900 5800 60 0001 C CNN
+ 1 5900 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED46
+U 1 1 4162F75D
+P 5900 5450
+F 0 "ED46" H 5740 5570 40 0000 C CNN
+F 1 "D_16A" H 5800 5370 40 0000 C CNN
+F 2 "Séchoir" H 7060 5440 40 0000 C CNN
+F 3 "" H 5900 5450 60 0001 C CNN
+ 1 5900 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED45
+U 1 1 4162F74E
+P 5900 5100
+F 0 "ED45" H 5740 5220 40 0000 C CNN
+F 1 "D_16A" H 5800 5020 40 0000 C CNN
+F 2 "Lave linge" H 7120 5100 40 0000 C CNN
+F 3 "" H 5900 5100 60 0001 C CNN
+ 1 5900 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED44
+U 1 1 4162F745
+P 5900 4750
+F 0 "ED44" H 5740 4870 40 0000 C CNN
+F 1 "D_10A" H 5800 4670 40 0000 C CNN
+F 2 "Prises cuisine" H 7200 4740 40 0000 C CNN
+F 3 "" H 5900 4750 60 0001 C CNN
+ 1 5900 4750
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED43
+U 1 1 4162F739
+P 5900 4400
+F 0 "ED43" H 5740 4520 40 0000 C CNN
+F 1 "D_10A" H 5800 4320 40 0000 C CNN
+F 2 "Micro-ondes et hotte" H 7340 4400 40 0000 C CNN
+F 3 "" H 5900 4400 60 0001 C CNN
+ 1 5900 4400
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED42
+U 1 1 4162F729
+P 5900 4050
+F 0 "ED42" H 5740 4170 40 0000 C CNN
+F 1 "D_16A" H 5800 3970 40 0000 C CNN
+F 2 "Four" H 6980 4040 40 0000 C CNN
+F 3 "" H 5900 4050 60 0001 C CNN
+ 1 5900 4050
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_16A ED41
+U 1 1 4162F71F
+P 5900 3700
+F 0 "ED41" H 5740 3820 40 0000 C CNN
+F 1 "D_16A" H 5800 3620 40 0000 C CNN
+F 2 "Lave vaisselle" H 7200 3700 40 0000 C CNN
+F 3 "" H 5900 3700 60 0001 C CNN
+ 1 5900 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_32A ED40
+U 1 1 4162F6F8
+P 5900 3350
+F 0 "ED40" H 5740 3470 40 0000 C CNN
+F 1 "D_32A" H 5800 3270 40 0000 C CNN
+F 2 "Plaque électrique" H 7260 3340 40 0000 C CNN
+F 3 "" H 5900 3350 60 0001 C CNN
+ 1 5900 3350
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED32
+U 1 1 4162F2EE
+P 8550 3600
+F 0 "ED32" H 8390 3720 40 0000 C CNN
+F 1 "D_06A" H 8450 3520 40 0000 C CNN
+F 2 "Traitement de l'eau" H 9960 3600 40 0000 C CNN
+F 3 "" H 8550 3600 60 0001 C CNN
+ 1 8550 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED33
+U 1 1 4162F2D8
+P 8550 3950
+F 0 "ED33" H 8390 4070 40 0000 C CNN
+F 1 "D_06A" H 8450 3870 40 0000 C CNN
+F 2 "Silveloxs, volets" H 9920 3940 40 0000 C CNN
+F 3 "" H 8550 3950 60 0001 C CNN
+ 1 8550 3950
+ 1 0 0 -1
+$EndComp
+Connection ~ 5600 800
+Connection ~ 5600 1150
+Connection ~ 8250 2400
+Connection ~ 8250 2050
+Connection ~ 8250 1700
+Connection ~ 8250 1350
+Connection ~ 8250 1000
+Wire Wire Line
+ 8250 1000 8350 1000
+Wire Wire Line
+ 8250 1350 8350 1350
+Wire Wire Line
+ 8250 1700 8350 1700
+Wire Wire Line
+ 8250 2050 8350 2050
+Wire Wire Line
+ 8350 650 8250 650
+Wire Wire Line
+ 5600 1150 5700 1150
+Wire Wire Line
+ 5600 800 5600 1500
+Wire Wire Line
+ 5600 1500 5700 1500
+$Comp
+L D_06A ED15
+U 1 1 4162F301
+P 8550 2050
+F 0 "ED15" H 8390 2170 40 0000 C CNN
+F 1 "D_06A" H 8450 1970 40 0000 C CNN
+F 2 "Eclairage grange" H 9900 2040 40 0000 C CNN
+F 3 "" H 8550 2050 60 0001 C CNN
+ 1 8550 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED16
+U 1 1 4162F2F6
+P 8550 2400
+F 0 "ED16" H 8390 2520 40 0000 C CNN
+F 1 "D_06A" H 8450 2320 40 0000 C CNN
+F 2 "Informatique" H 9820 2400 40 0000 C CNN
+F 3 "" H 8550 2400 60 0001 C CNN
+ 1 8550 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED31
+U 1 1 4162F2D8
+P 8550 3250
+F 0 "ED31" H 8390 3370 40 0000 C CNN
+F 1 "D_06A" H 8450 3170 40 0000 C CNN
+F 2 "Chauffage" H 9740 3240 40 0000 C CNN
+F 3 "" H 8550 3250 60 0001 C CNN
+ 1 8550 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED11
+U 1 1 4162F301
+P 8550 650
+F 0 "ED11" H 8390 770 40 0000 C CNN
+F 1 "D_06A" H 8450 570 40 0000 C CNN
+F 2 "Eclairage vide sanitaire" H 10480 640 40 0000 C CNN
+F 3 "" H 8550 650 60 0001 C CNN
+ 1 8550 650
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED12
+U 1 1 4162F2F6
+P 8550 1000
+F 0 "ED12" H 8390 1120 40 0000 C CNN
+F 1 "D_06A" H 8450 920 40 0000 C CNN
+F 2 "Eclairage chambre 1, chambre 2" H 10200 1040 40 0000 C CNN
+F 3 "couloir1, wc1, sdb, entrée" H 10180 980 40 0000 C CNN
+ 1 8550 1000
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED13
+U 1 1 4162F2EE
+P 8550 1350
+F 0 "ED13" H 8390 1470 40 0000 C CNN
+F 1 "D_06A" H 8450 1270 40 0000 C CNN
+F 2 "Eclairage séjour, cuisine" H 10100 1380 40 0000 C CNN
+F 3 "sam, escalier, bureau" H 10100 1320 40 0000 C CNN
+ 1 8550 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_06A ED14
+U 1 1 4162F2D8
+P 8550 1700
+F 0 "ED14" H 8390 1820 40 0000 C CNN
+F 1 "D_06A" H 8450 1620 40 0000 C CNN
+F 2 "Eclairage chambre 3, couloir 2" H 10220 1740 40 0000 C CNN
+F 3 "wc2, douche, lingerie" H 10180 1680 40 0000 C CNN
+ 1 8550 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED25
+U 1 1 4162F22A
+P 5900 1900
+F 0 "ED25" H 5740 2020 40 0000 C CNN
+F 1 "D_10A" H 5800 1820 40 0000 C CNN
+F 2 "Matériel sensible" H 7260 1900 40 0000 C CNN
+F 3 "" H 5900 1900 60 0001 C CNN
+ 1 5900 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED22
+U 1 1 4162F1F7
+P 5900 1500
+F 0 "ED22" H 5740 1620 40 0000 C CNN
+F 1 "D_10A" H 5800 1420 40 0000 C CNN
+F 2 "Réfrigérateur & congélateur" H 7480 1500 40 0000 C CNN
+F 3 "" H 5900 1500 60 0001 C CNN
+ 1 5900 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED21
+U 1 1 4162F1F0
+P 5900 1150
+F 0 "ED21" H 5750 1250 40 0000 C CNN
+F 1 "D_10A" H 5800 1070 40 0000 C CNN
+F 2 "Pompe surpresseur" H 7260 1140 40 0000 C CNN
+F 3 "" H 5900 1150 60 0001 C CNN
+ 1 5900 1150
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_10A ED20
+U 1 1 4162F1CA
+P 5900 800
+F 0 "ED20" H 5740 920 40 0000 C CNN
+F 1 "D_10A" H 5800 720 40 0000 C CNN
+F 2 "Vide sanitaire, portail" H 7400 800 40 0000 C CNN
+F 3 "" H 5900 800 60 0001 C CNN
+ 1 5900 800
+ 1 0 0 -1
+$EndComp
+Connection ~ 850 1500
+Connection ~ 850 4350
+Connection ~ 850 3850
+Connection ~ 850 3350
+Wire Wire Line
+ 850 1350 850 4850
+$Comp
+L O_600VA EO2
+U 1 1 4162E0E4
+P 5050 2900
+F 0 "EO2" H 5300 3000 40 0000 C CNN
+F 1 "O_600VA" H 5050 2750 40 0000 C CNN
+F 2 "" H 5050 2900 60 0001 C CNN
+F 3 "" H 5050 2900 60 0001 C CNN
+ 1 5050 2900
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_900VA EO1
+U 1 1 4162E0D5
+P 5050 2400
+F 0 "EO1" H 5300 2300 40 0000 C CNN
+F 1 "O_900VA" H 5050 2500 40 0000 C CNN
+F 2 "Onduleurs" H 5050 2200 30 0000 C CNN
+F 3 "autonomie" H 5050 2150 30 0000 C CNN
+F 4 "rallongée" H 5050 2100 30 0000 C CNN "Champ4"
+ 1 5050 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_2A_12O_40KV EQ4
+U 1 1 4162DE98
+P 5050 1350
+F 0 "EQ4" H 4850 700 40 0000 C CNN
+F 1 "Q_2A_12O_40KV" H 5050 1450 40 0000 C CNN
+F 2 "Contacteur" H 5150 650 30 0000 C CNN
+F 3 "isolation HT " H 5150 600 30 0000 C CNN
+ 1 5050 1350
+ 1 0 0 -1
+$EndComp
+Connection ~ 4350 1900
+$Comp
+L V_F50Hz EV2
+U 1 1 4162DD75
+P 2400 1400
+F 0 "EV2" H 2400 1550 40 0000 C CNN
+F 1 "V_F50HZ" H 2400 1250 40 0000 C CNN
+F 2 "" H 2400 1400 60 0001 C CNN
+F 3 "" H 2400 1400 60 0001 C CNN
+ 1 2400 1400
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_U400V EV3
+U 1 1 4162DD5E
+P 2400 1900
+F 0 "EV3" H 2400 2050 40 0000 C CNN
+F 1 "V_U400V" H 2400 1750 40 0000 C CNN
+F 2 "" H 2400 1900 60 0001 C CNN
+F 3 "" H 2400 1900 60 0001 C CNN
+ 1 2400 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_ELC EY2
+U 1 1 4162DC78
+P 3550 2750
+F 0 "EY2" H 3650 2800 40 0000 C CNN
+F 1 "Y_ELC" V 3400 2750 40 0000 C CNN
+F 2 "" H 3550 2750 60 0001 C CNN
+F 3 "" H 3550 2750 60 0001 C CNN
+ 1 3550 2750
+ 0 -1 -1 0
+$EndComp
+$Comp
+L A_1KVA EA1
+U 1 1 4162DC5B
+P 3550 2450
+F 0 "EA1" H 3550 2650 40 0000 C CNN
+F 1 "A_1KVA" H 3550 2580 40 0000 C CNN
+F 2 "Absorbeur" H 3550 2800 30 0000 C CNN
+F 3 "d'ondes" H 3550 2750 30 0000 C CNN
+ 1 3550 2450
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_25A_2F2O EQ2
+U 1 1 4162DB86
+P 4250 1900
+F 0 "EQ2" H 4090 2020 40 0000 C CNN
+F 1 "Q_25A_2F2O" H 4250 1760 40 0000 C CNN
+F 2 "" H 4250 1900 60 0001 C CNN
+F 3 "" H 4250 1900 60 0001 C CNN
+ 1 4250 1900
+ -1 0 0 1
+$EndComp
+$Comp
+L Q_25A_2F2O EQ3
+U 1 1 4162DB5E
+P 4250 2400
+F 0 "EQ3" H 4090 2520 40 0000 C CNN
+F 1 "Q_25A_2F2O" H 4250 2260 40 0000 C CNN
+F 2 "" H 4250 2400 60 0001 C CNN
+F 3 "" H 4250 2400 60 0001 C CNN
+ 1 4250 2400
+ -1 0 0 1
+$EndComp
+$Comp
+L Q_25A_2F2O EQ1b
+U 1 1 416245A7
+P 2800 2400
+F 0 "EQ1b" H 2700 2550 40 0000 C CNN
+F 1 "Q_25A_2F2O" H 2800 2260 40 0000 C CNN
+F 2 "" H 2800 2400 60 0001 C CNN
+F 3 "" H 2800 2400 60 0001 C CNN
+ 1 2800 2400
+ 1 0 0 1
+$EndComp
+$Comp
+L V_A10A EV1
+U 1 1 4162458B
+P 2400 2400
+F 0 "EV1" H 2400 2550 40 0000 C CNN
+F 1 "V_A10A" H 2400 2250 40 0000 C CNN
+F 2 "" H 2400 2400 60 0001 C CNN
+F 3 "" H 2400 2400 60 0001 C CNN
+ 1 2400 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_25A_2F2O EQ1a
+U 1 1 41624555
+P 2000 2400
+F 0 "EQ1a" H 1900 2550 40 0000 C CNN
+F 1 "Q_25A_2F2O" H 2000 2260 40 0000 C CNN
+F 2 "" H 2000 2400 60 0001 C CNN
+F 3 "" H 2000 2400 60 0001 C CNN
+ 1 2000 2400
+ -1 0 0 1
+$EndComp
+$Comp
+L J_40A_30mA EJ4
+U 1 1 4162432C
+P 1450 4850
+F 0 "EJ4" H 1240 5030 40 0000 C CNN
+F 1 "J_40A_30mA" H 1430 4730 40 0000 C CNN
+F 2 "" H 1450 4850 60 0001 C CNN
+F 3 "" H 1450 4850 60 0001 C CNN
+ 1 1450 4850
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_40A_30mA EJ3
+U 1 1 41624321
+P 1450 4350
+F 0 "EJ3" H 1240 4530 40 0000 C CNN
+F 1 "J_40A_30mA" H 1430 4230 40 0000 C CNN
+F 2 "" H 1450 4350 60 0001 C CNN
+F 3 "" H 1450 4350 60 0001 C CNN
+ 1 1450 4350
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_40A_30mA EJ2
+U 1 1 41624310
+P 1450 3850
+F 0 "EJ2" H 1240 4030 40 0000 C CNN
+F 1 "J_40A_30mA" H 1430 3730 40 0000 C CNN
+F 2 "" H 1450 3850 60 0001 C CNN
+F 3 "" H 1450 3850 60 0001 C CNN
+ 1 1450 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_40A_30mA EJ1
+U 1 1 41624306
+P 1450 3350
+F 0 "EJ1" H 1240 3530 40 0000 C CNN
+F 1 "J_40A_30mA" H 1430 3230 40 0000 C CNN
+F 2 "" H 1450 3350 60 0001 C CNN
+F 3 "" H 1450 3350 60 0001 C CNN
+ 1 1450 3350
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_16A_30mA ER02
+U 1 1 416242F0
+P 1450 2750
+F 0 "ER02" H 1240 2930 40 0000 C CNN
+F 1 "R_16A_30mA" H 1450 2550 40 0000 C CNN
+F 2 "Courbe B" H 1450 2500 30 0000 C CNN
+F 3 "" H 1450 2750 60 0001 C CNN
+ 1 1450 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_Th_3KVA EG1
+U 1 1 4162428A
+P 1000 2150
+F 0 "EG1" H 1050 2300 40 0000 C CNN
+F 1 "G_Th_3KVA" H 1080 2380 40 0000 C CNN
+F 2 "Groupe" H 640 2260 30 0000 C CNN
+F 3 "électrogène" H 640 2200 30 0000 C CNN
+F 4 "automatique" H 640 2140 30 0000 C CNN "Champ4"
+F 5 "diesel" H 640 2080 30 0000 C CNN "Champ5"
+ 1 1000 2150
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_63A ES1
+U 1 1 416241E5
+P 850 1100
+F 0 "ES1" V 800 1350 40 0000 C CNN
+F 1 "S_63A" H 850 990 40 0000 C CNN
+F 2 "Sectionneur" V 650 1350 30 0000 C CNN
+F 3 "TGBT" V 600 1350 30 0000 C CNN
+ 1 850 1100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L Y_ELC EY1
+U 1 1 41623FE0
+P 1800 1550
+F 0 "EY1" H 1900 1600 40 0000 C CNN
+F 1 "Y_ELC" V 1650 1550 40 0000 C CNN
+F 2 "" H 1800 1550 60 0001 C CNN
+F 3 "" H 1800 1550 60 0001 C CNN
+ 1 1800 1550
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 1350 1350 1350 1500
+$Comp
+L W_15KA EW01
+U 1 1 41618802
+P 1800 1150
+F 0 "EW01" H 1800 1300 40 0000 C CNN
+F 1 "W_15KA" H 1800 950 40 0000 C CNN
+F 2 "" H 1800 1150 60 0001 C CNN
+F 3 "" H 1800 1150 60 0001 C CNN
+ 1 1800 1150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L D_10A ED10
+U 1 1 41618699
+P 1350 1150
+F 0 "ED10" H 1190 1270 40 0000 C CNN
+F 1 "D_10A" H 1250 1070 40 0000 C CNN
+F 2 "" H 1350 1150 60 0001 C CNN
+F 3 "" H 1350 1150 60 0001 C CNN
+ 1 1350 1150
+ 0 -1 -1 0
+$EndComp
+$EndSCHEMATC
diff --git a/demos/flat_hierarchy/flat_hierarchy-cache.lib b/demos/flat_hierarchy/flat_hierarchy-cache.lib
new file mode 100644
index 0000000..fdac208
--- /dev/null
+++ b/demos/flat_hierarchy/flat_hierarchy-cache.lib
@@ -0,0 +1,592 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 24C16
+#
+DEF 24C16 U 0 30 Y Y 1 F N
+F0 "U" 150 350 60 H V C CNN
+F1 "24C16" 200 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 24C512
+DRAW
+X GND 4 0 -500 200 U 60 60 0 0 W
+X VCC 8 0 500 200 D 60 60 0 0 W
+S -400 -300 400 300 1 1 0 N
+X A0 1 -700 200 300 R 60 60 1 1 I
+X A1 2 -700 100 300 R 60 60 1 1 I
+X A2 3 -700 0 300 R 60 60 1 1 I
+X SDA 5 700 -200 300 L 60 60 1 1 B
+X SCL 6 700 -100 300 L 60 60 1 1 I
+X WP 7 700 100 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JUMPER
+#
+DEF JUMPER JP 0 30 Y N 1 F N
+F0 "JP" 0 150 60 H V C CNN
+F1 "JUMPER" 0 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
+C -100 0 35 0 1 0 N
+C 100 0 35 0 1 0 N
+X 1 1 -300 0 165 R 60 60 0 1 P
+X 2 2 300 0 165 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LT1372
+#
+DEF LT1372 U 0 30 Y Y 1 F N
+F0 "U" 600 500 60 H V C CNN
+F1 "LT1372" -500 500 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LT1373
+DRAW
+S -700 -400 700 400 0 1 0 N
+X Vc 1 250 -700 300 U 60 60 1 1 I
+X FB+ 2 1000 -250 300 L 60 60 1 1 I
+X FB- 3 -1000 250 300 R 60 60 1 1 P
+X S/S 4 -1000 -250 300 R 60 60 1 1 P
+X Vin 5 0 700 300 D 60 60 1 1 W
+X GND_S 6 -150 -700 300 U 60 60 1 1 I
+X GND 7 -300 -700 300 U 60 60 1 1 I
+X Vsw 8 1000 250 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NPN
+#
+DEF NPN Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 50 H V R CNN
+F1 "NPN" 0 150 50 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PIC12C508A
+#
+DEF PIC12C508A U 0 40 Y Y 1 F N
+F0 "U" 0 700 60 H V C CNN
+F1 "PIC12C508A" 0 -650 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS PIC12C509A
+DRAW
+S 400 -600 -450 650 0 1 0 N
+X VDD 1 -750 500 300 R 50 50 1 1 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 1 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 1 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 1 I
+X GP2 5 700 -500 300 L 50 50 1 1 I
+X GP1 6 700 -200 300 L 50 50 1 1 I
+X GP0 7 700 200 300 L 50 50 1 1 I
+X VSS 8 700 500 300 L 50 50 1 1 W
+X VDD 1 -750 500 300 R 50 50 1 2 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 2 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 2 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 2 I
+X GP2 5 700 -500 300 L 50 50 1 2 I
+X GP1 6 700 -200 300 L 50 50 1 2 I
+X GP0 7 700 200 300 L 50 50 1 2 I
+X VSS 8 700 500 300 L 50 50 1 2 W
+ENDDRAW
+ENDDEF
+#
+# PIC16F54
+#
+DEF PIC16F54 U? 0 40 Y Y 1 F N
+F0 "U?" 0 -750 60 H V C CNN
+F1 "PIC16F54" 0 800 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 700 450 -700 0 1 0 N
+X RA2 1 -800 600 300 R 50 50 1 1 B
+X RA3 2 -800 450 300 R 50 50 1 1 B
+X T0ckl 3 -800 300 300 R 50 50 1 1 O
+X MCLR 4 -800 150 300 R 50 50 1 1 I
+X VSS 5 -800 0 300 R 50 50 1 1 W
+X RB0 6 -800 -150 300 R 50 50 1 1 B
+X RB1 7 -800 -300 300 R 50 50 1 1 B
+X RB2 8 -800 -450 300 R 50 50 1 1 B
+X RB3 9 -800 -600 300 R 50 50 1 1 B
+X RB4 10 750 -600 300 L 50 50 1 1 B
+X RB5 11 750 -450 300 L 50 50 1 1 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 1 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 1 B
+X VDD 14 750 0 300 L 50 50 1 1 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 1 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 1 I
+X RA0 17 750 450 300 L 50 50 1 1 B
+X RA1 18 750 600 300 L 50 50 1 1 B
+X RA2 1 -800 600 300 R 50 50 1 2 B
+X RA3 2 -800 450 300 R 50 50 1 2 B
+X T0ckl 3 -800 300 300 R 50 50 1 2 O
+X MCLR 4 -800 150 300 R 50 50 1 2 I
+X VSS 5 -800 0 300 R 50 50 1 2 W
+X RB0 6 -800 -150 300 R 50 50 1 2 B
+X RB1 7 -800 -300 300 R 50 50 1 2 B
+X RB2 8 -800 -450 300 R 50 50 1 2 B
+X RB3 9 -800 -600 300 R 50 50 1 2 B
+X RB4 10 750 -600 300 L 50 50 1 2 B
+X RB5 11 750 -450 300 L 50 50 1 2 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 2 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 2 B
+X VDD 14 750 0 300 L 50 50 1 2 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 2 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 2 I
+X RA0 17 750 450 300 L 50 50 1 2 B
+X RA1 18 750 600 300 L 50 50 1 2 B
+ENDDRAW
+ENDDEF
+#
+# PNP
+#
+DEF PNP Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 60 H V R CNN
+F1 "PNP" 0 150 60 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP28
+#
+DEF SUPP28 J 0 40 Y Y 1 F N
+F0 "J" 0 100 70 H V C CNN
+F1 "SUPP28" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -750 300 750 0 1 0 N
+X 1 1 -600 650 300 R 60 60 1 1 P
+X 2 2 -600 550 300 R 60 60 1 1 P
+X 3 3 -600 450 300 R 60 60 1 1 P
+X 4 4 -600 350 300 R 60 60 1 1 P
+X 5 5 -600 250 300 R 60 60 1 1 P
+X 6 6 -600 150 300 R 60 60 1 1 P
+X 7 7 -600 50 300 R 60 60 1 1 P
+X 8 8 -600 -50 300 R 60 60 1 1 P
+X 9 9 -600 -150 300 R 60 60 1 1 P
+X 10 10 -600 -250 300 R 60 60 1 1 P
+X 20 20 600 -150 300 L 60 60 1 1 P
+X 11 11 -600 -350 300 R 60 60 1 1 P
+X 21 21 600 -50 300 L 60 60 1 1 P
+X 12 12 -600 -450 300 R 60 60 1 1 P
+X 22 22 600 50 300 L 60 60 1 1 P
+X 13 13 -600 -550 300 R 60 60 1 1 P
+X 23 23 600 150 300 L 60 60 1 1 P
+X 14 14 -600 -650 300 R 60 60 1 1 P
+X 24 24 600 250 300 L 60 60 1 1 P
+X 15 15 600 -650 300 L 60 60 1 1 P
+X 25 25 600 350 300 L 60 60 1 1 P
+X 16 16 600 -550 300 L 60 60 1 1 P
+X 26 26 600 450 300 L 60 60 1 1 P
+X 17 17 600 -450 300 L 60 60 1 1 P
+X 27 27 600 550 300 L 60 60 1 1 P
+X 18 18 600 -350 300 L 60 60 1 1 P
+X 28 28 600 650 300 L 60 60 1 1 P
+X 19 19 600 -250 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP40
+#
+DEF SUPP40 P 0 40 Y Y 1 F N
+F0 "P" 0 1100 70 H V C CNN
+F1 "SUPP40" 0 -1100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -1050 300 1050 0 1 0 N
+X 1 1 -600 950 300 R 60 60 1 1 P
+X 2 2 -600 850 300 R 60 60 1 1 P
+X 3 3 -600 750 300 R 60 60 1 1 P
+X 4 4 -600 650 300 R 60 60 1 1 P
+X 5 5 -600 550 300 R 60 60 1 1 P
+X 6 6 -600 450 300 R 60 60 1 1 P
+X 7 7 -600 350 300 R 60 60 1 1 P
+X 8 8 -600 250 300 R 60 60 1 1 P
+X 9 9 -600 150 300 R 60 60 1 1 P
+X 10 10 -600 50 300 R 60 60 1 1 P
+X 20 20 -600 -950 300 R 60 60 1 1 P
+X 30 30 600 -50 300 L 60 60 1 1 P
+X 40 40 600 950 300 L 60 60 1 1 P
+X 11 11 -600 -50 300 R 60 60 1 1 P
+X 21 21 600 -950 300 L 60 60 1 1 P
+X 31 31 600 50 300 L 60 60 1 1 P
+X 12 12 -600 -150 300 R 60 60 1 1 P
+X 22 22 600 -850 300 L 60 60 1 1 P
+X 32 32 600 150 300 L 60 60 1 1 P
+X 13 13 -600 -250 300 R 60 60 1 1 P
+X 23 23 600 -750 300 L 60 60 1 1 P
+X 33 33 600 250 300 L 60 60 1 1 P
+X 14 14 -600 -350 300 R 60 60 1 1 P
+X 24 24 600 -650 300 L 60 60 1 1 P
+X 34 34 600 350 300 L 60 60 1 1 P
+X 15 15 -600 -450 300 R 60 60 1 1 P
+X 25 25 600 -550 300 L 60 60 1 1 P
+X 35 35 600 450 300 L 60 60 1 1 P
+X 16 16 -600 -550 300 R 60 60 1 1 P
+X 26 26 600 -450 300 L 60 60 1 1 P
+X 36 36 600 550 300 L 60 60 1 1 P
+X 17 17 -600 -650 300 R 60 60 1 1 P
+X 27 27 600 -350 300 L 60 60 1 1 P
+X 37 37 600 650 300 L 60 60 1 1 P
+X 18 18 -600 -750 300 R 60 60 1 1 P
+X 28 28 600 -250 300 L 60 60 1 1 P
+X 38 38 600 750 300 L 60 60 1 1 P
+X 19 19 -600 -850 300 R 60 60 1 1 P
+X 29 29 600 -150 300 L 60 60 1 1 P
+X 39 39 600 850 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VPP
+#
+DEF VPP #PWR 0 0 Y Y 1 F N
+F0 "#PWR" 0 200 40 H I C CNN
+F1 "VPP" 0 150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VPP 1 0 0 0 U 40 40 0 0 W N
+C 0 80 20 0 1 0 N
+P 2 0 1 0 0 60 0 0 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/flat_hierarchy/flat_hierarchy.kicad_pcb b/demos/flat_hierarchy/flat_hierarchy.kicad_pcb
new file mode 100644
index 0000000..703096d
--- /dev/null
+++ b/demos/flat_hierarchy/flat_hierarchy.kicad_pcb
@@ -0,0 +1,4161 @@
+(kicad_pcb (version 4) (host pcbnew "(2014-07-04 BZR 4974)-product")
+
+ (general
+ (links 133)
+ (no_connects 0)
+ (area 73.469499 40.449499 233.870501 139.890501)
+ (thickness 1.6)
+ (drawings 24)
+ (tracks 355)
+ (zones 0)
+ (modules 64)
+ (nets 35)
+ )
+
+ (page A4)
+ (title_block
+ (title "SERIAL PIC PROGRAMMER")
+ )
+
+ (layers
+ (0 Composant signal)
+ (31 Cuivre signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.254)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 1.5748 2.794)
+ (pad_drill 0.8128)
+ (pad_to_mask_clearance 0.2)
+ (aux_axis_origin 62.23 153.67)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions false)
+ (excludeedgelayer false)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin true)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 /pic_programmer/CTS)
+ (net 2 /pic_programmer/TXD)
+ (net 3 GND)
+ (net 4 VCC)
+ (net 5 VPP)
+ (net 6 VCC_PIC)
+ (net 7 /pic_programmer/DTR)
+ (net 8 /pic_programmer/PC-CLOCK-OUT)
+ (net 9 VPP-MCLR)
+ (net 10 CLOCK-RB6)
+ (net 11 DATA-RB7)
+ (net 12 "Net-(C2-Pad1)")
+ (net 13 "Net-(C4-Pad1)")
+ (net 14 "Net-(C5-Pad1)")
+ (net 15 "Net-(C9-Pad2)")
+ (net 16 "Net-(D1-Pad1)")
+ (net 17 "Net-(D2-Pad1)")
+ (net 18 "Net-(D4-Pad1)")
+ (net 19 "Net-(D6-Pad1)")
+ (net 20 "Net-(D8-Pad1)")
+ (net 21 "Net-(D9-Pad1)")
+ (net 22 "Net-(D10-Pad1)")
+ (net 23 "Net-(D11-Pad2)")
+ (net 24 "Net-(D11-Pad1)")
+ (net 25 "Net-(D12-Pad1)")
+ (net 26 "Net-(Q1-Pad2)")
+ (net 27 "Net-(Q2-Pad3)")
+ (net 28 "Net-(Q3-Pad2)")
+ (net 29 "Net-(R8-Pad1)")
+ (net 30 "Net-(R12-Pad1)")
+ (net 31 "Net-(R13-Pad1)")
+ (net 32 "Net-(R15-Pad1)")
+ (net 33 "Net-(R16-Pad1)")
+ (net 34 "Net-(RV1-Pad2)")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net /pic_programmer/CTS)
+ (add_net /pic_programmer/DTR)
+ (add_net /pic_programmer/PC-CLOCK-OUT)
+ (add_net /pic_programmer/TXD)
+ (add_net CLOCK-RB6)
+ (add_net DATA-RB7)
+ (add_net GND)
+ (add_net N-0000092)
+ (add_net "Net-(C2-Pad1)")
+ (add_net "Net-(C4-Pad1)")
+ (add_net "Net-(C5-Pad1)")
+ (add_net "Net-(C9-Pad2)")
+ (add_net "Net-(D1-Pad1)")
+ (add_net "Net-(D10-Pad1)")
+ (add_net "Net-(D11-Pad1)")
+ (add_net "Net-(D11-Pad2)")
+ (add_net "Net-(D12-Pad1)")
+ (add_net "Net-(D2-Pad1)")
+ (add_net "Net-(D4-Pad1)")
+ (add_net "Net-(D6-Pad1)")
+ (add_net "Net-(D8-Pad1)")
+ (add_net "Net-(D9-Pad1)")
+ (add_net "Net-(P3-Pad17)")
+ (add_net "Net-(Q1-Pad2)")
+ (add_net "Net-(Q2-Pad3)")
+ (add_net "Net-(Q3-Pad2)")
+ (add_net "Net-(R12-Pad1)")
+ (add_net "Net-(R13-Pad1)")
+ (add_net "Net-(R15-Pad1)")
+ (add_net "Net-(R16-Pad1)")
+ (add_net "Net-(R8-Pad1)")
+ (add_net "Net-(RV1-Pad2)")
+ (add_net "Net-(U5-Pad15)")
+ (add_net VCC)
+ (add_net VCC_PIC)
+ (add_net VPP)
+ (add_net VPP-MCLR)
+ )
+
+ (module 28DIP-ELL300 (layer Composant) (tedit 49684DDC) (tstamp 4436967E)
+ (at 211.455 67.31 270)
+ (descr "Module Dil 28 pins, pads elliptiques, e=300 mils")
+ (tags DIL)
+ (path /48553E7C/4436967E)
+ (fp_text reference P2 (at -11.43 0 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_text value SUPP28 (at 6.985 0 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_line (start -19.05 -2.54) (end 19.05 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 19.05 -2.54) (end 19.05 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 19.05 2.54) (end -19.05 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -19.05 2.54) (end -19.05 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -19.05 -1.27) (end -17.78 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -17.78 -1.27) (end -17.78 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -17.78 1.27) (end -19.05 1.27) (layer F.SilkS) (width 0.381))
+ (pad 2 thru_hole oval (at -13.97 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at -11.43 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at -8.89 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at -6.35 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at -3.81 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 9 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at 6.35 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 8.89 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole oval (at 11.43 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 13 thru_hole oval (at 13.97 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 14 thru_hole oval (at 16.51 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -16.51 3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 9 VPP-MCLR))
+ (pad 15 thru_hole oval (at 16.51 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole oval (at 13.97 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole oval (at 11.43 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at 8.89 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 19 thru_hole oval (at 6.35 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 20 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 21 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 24 thru_hole oval (at -6.35 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 25 thru_hole oval (at -8.89 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 26 thru_hole oval (at -11.43 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 27 thru_hole oval (at -13.97 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 10 CLOCK-RB6))
+ (pad 28 thru_hole oval (at -16.51 -3.81 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (model Sockets_DIP.3dshapes/DIP-28__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module 40DIP-ELL600 (layer Composant) (tedit 49684DF1) (tstamp 442A88ED)
+ (at 182.88 74.93 270)
+ (descr "Module Dil 40 pins, pads elliptiques, e=600 mils")
+ (tags DIL)
+ (path /48553E7C/442A88ED)
+ (fp_text reference P3 (at -19.05 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value SUPP40 (at 0 2.54 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.778) (thickness 0.3048)))
+ )
+ (fp_line (start -26.67 -1.27) (end -25.4 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -25.4 -1.27) (end -25.4 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -25.4 1.27) (end -26.67 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -26.67 -6.35) (end 26.67 -6.35) (layer F.SilkS) (width 0.381))
+ (fp_line (start 26.67 -6.35) (end 26.67 6.35) (layer F.SilkS) (width 0.381))
+ (fp_line (start 26.67 6.35) (end -26.67 6.35) (layer F.SilkS) (width 0.381))
+ (fp_line (start -26.67 6.35) (end -26.67 -6.35) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -24.13 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 9 VPP-MCLR))
+ (pad 2 thru_hole oval (at -21.59 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at -19.05 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at -16.51 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at -13.97 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at -11.43 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at -8.89 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at -6.35 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 9 thru_hole oval (at -3.81 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at -1.27 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 1.27 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 12 thru_hole oval (at 3.81 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 13 thru_hole oval (at 6.35 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 14 thru_hole oval (at 8.89 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 15 thru_hole oval (at 11.43 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole oval (at 13.97 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole oval (at 16.51 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at 19.05 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 19 thru_hole oval (at 21.59 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 20 thru_hole oval (at 24.13 7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 21 thru_hole oval (at 24.13 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole oval (at 21.59 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole oval (at 19.05 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 24 thru_hole oval (at 16.51 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 25 thru_hole oval (at 13.97 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 26 thru_hole oval (at 11.43 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 27 thru_hole oval (at 8.89 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 28 thru_hole oval (at 6.35 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 29 thru_hole oval (at 3.81 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 30 thru_hole oval (at 1.27 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 31 thru_hole oval (at -1.27 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 32 thru_hole oval (at -3.81 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 33 thru_hole oval (at -6.35 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 34 thru_hole oval (at -8.89 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 35 thru_hole oval (at -11.43 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 36 thru_hole oval (at -13.97 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 37 thru_hole oval (at -16.51 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 38 thru_hole oval (at -19.05 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS))
+ (pad 39 thru_hole oval (at -21.59 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 10 CLOCK-RB6))
+ (pad 40 thru_hole oval (at -24.13 -7.62 270) (size 1.5748 2.794) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (model Sockets_DIP.3dshapes/DIP-40__600.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module 1pin (layer Composant) (tedit 200000) (tstamp 442A9359)
+ (at 158.75 44.45)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module 1pin (layer Composant) (tedit 200000) (tstamp 442A9352)
+ (at 158.75 135.89)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module 1pin (layer Composant) (tedit 200000) (tstamp 442A9347)
+ (at 77.47 135.89)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module 1pin (layer Composant) (tedit 200000) (tstamp 442A9340)
+ (at 77.47 44.45)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module 1pin (layer Composant) (tedit 200000) (tstamp 442A9339)
+ (at 229.87 135.89)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module 1pin (layer Composant) (tedit 200000) (tstamp 442A932C)
+ (at 229.87 44.45)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module discret:CP10 (layer Composant) (tedit 53B840ED) (tstamp 53B84427)
+ (at 97.79 78.74 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /48553E53/442A5056)
+ (fp_text reference C1 (at 2.54 1.27 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 100uF (at -1.905 -1.27 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 12.7 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 0) (end 10.16 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 -2.54) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -1.27) (end -10.16 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 -1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 1.27) (end -7.62 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -12.7 0) (end -10.16 0) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole circle (at 12.7 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 1 thru_hole rect (at -12.7 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP10 (layer Composant) (tedit 53B840ED) (tstamp 53B84436)
+ (at 97.155 90.17)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /48553E53/442A501D)
+ (fp_text reference C2 (at 2.54 1.27) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 220uF (at -1.905 -1.27) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 12.7 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 0) (end 10.16 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 -2.54) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -1.27) (end -10.16 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 -1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 1.27) (end -7.62 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -12.7 0) (end -10.16 0) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole circle (at 12.7 0) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 1 thru_hole rect (at -12.7 0) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(C2-Pad1)"))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP8 (layer Composant) (tedit 53B840ED) (tstamp 53B84445)
+ (at 133.985 72.39 270)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /48553E53/442A584C)
+ (fp_text reference C3 (at 1.27 1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 22uF/25V (at 1.27 -1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 0) (end -8.89 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 8.89 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 -2.54) (end 8.89 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 2.54) (end -6.35 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 VPP))
+ (pad 2 thru_hole circle (at 10.16 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.8 0.8 0.8))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 53B840ED) (tstamp 53B84455)
+ (at 116.84 52.07)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /48553E53/442A5F61)
+ (fp_text reference C4 (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 0 (at 0 2.032) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 53B840ED) (tstamp 53B84460)
+ (at 132.08 49.53)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /48553E53/442A58B1)
+ (fp_text reference C5 (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 10nF (at 0 2.032) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 "Net-(C5-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 53B840ED) (tstamp 53B8446B)
+ (at 196.85 114.935 270)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /48553E7C/442AA12B)
+ (fp_text reference C6 (at 0 2.032 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100nF (at 0 2.032 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at 0 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 53B840ED) (tstamp 53B84476)
+ (at 198.755 73.66 270)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /48553E7C/442AA145)
+ (fp_text reference C7 (at 0 2.032 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100nF (at 0 2.032 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at 0 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 53B840ED) (tstamp 53B84481)
+ (at 200.66 114.935 270)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /48553E7C/4639BE2C)
+ (fp_text reference C8 (at 0 2.032 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100nF (at 0 2.032 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at 0 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 53B840ED) (tstamp 53B8448C)
+ (at 145.542 49.784)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /48553E53/464AD280)
+ (fp_text reference C9 (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 22OnF (at 0 2.032) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 VPP))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C9-Pad2)"))
+ (pad 2 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C9-Pad2)"))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D5 (layer Composant) (tedit 53B840ED) (tstamp 53B84497)
+ (at 87.63 64.77 270)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A500B)
+ (fp_text reference D1 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value 1N4004 (at -0.254 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -6.35 0 270) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(D1-Pad1)"))
+ (pad 2 thru_hole rect (at 6.35 0 270) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(C2-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B844A6)
+ (at 104.14 118.11)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A4D1B)
+ (fp_text reference D2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D2-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B844B5)
+ (at 104.14 121.92)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A4D25)
+ (fp_text reference D3 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D2-Pad1)"))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B844C4)
+ (at 104.14 111.76)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A4D5C)
+ (fp_text reference D4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(D4-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B844D3)
+ (at 104.14 109.22)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A4D5D)
+ (fp_text reference D5 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(D4-Pad1)"))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B844E2)
+ (at 104.14 124.46)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A4D64)
+ (fp_text reference D6 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(D6-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B844F1)
+ (at 104.14 115.57)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A4D65)
+ (fp_text reference D7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(D6-Pad1)"))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 53B840ED) (tstamp 53B84500)
+ (at 154.94 77.47)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /48553E53/442A4F5D)
+ (fp_text reference D8 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value RED-LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(D8-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 53B840ED) (tstamp 53B84509)
+ (at 154.94 87.63)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /48553E53/442A5084)
+ (fp_text reference D9 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value GREEN-LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(D9-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D5 (layer Composant) (tedit 53B840ED) (tstamp 53B84512)
+ (at 130.81 57.15)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/442A6026)
+ (fp_text reference D10 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value SCHOTTKY (at -0.254 0) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(D10-Pad1)"))
+ (pad 2 thru_hole rect (at 6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 5 VPP))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 53B84521)
+ (at 142.875 80.645 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /48553E53/4639BA28)
+ (fp_text reference D11 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D11-Pad2)"))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 "Net-(D11-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 53B840ED) (tstamp 53B84530)
+ (at 154.94 97.155)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /48553E53/4639B9EA)
+ (fp_text reference D12 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value YELLOW-LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(D12-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:DB9FC (layer Composant) (tedit 53B840ED) (tstamp 53B84539)
+ (at 81.28 115.57 90)
+ (descr "Connecteur DB9 femelle couche")
+ (tags "CONN DB9")
+ (path /48553E53/442A4C93)
+ (fp_text reference J1 (at 1.27 -10.16 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9-FEMAL (at 1.27 -3.81 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 12.827 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -12.573 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -5.461 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at -2.667 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole circle (at 0 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /pic_programmer/TXD))
+ (pad 4 thru_hole circle (at 2.794 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /pic_programmer/DTR))
+ (pad 5 thru_hole circle (at 5.588 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 6 thru_hole circle (at -4.064 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole circle (at -1.27 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /pic_programmer/PC-CLOCK-OUT))
+ (pad 8 thru_hole circle (at 1.397 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /pic_programmer/CTS))
+ (pad 9 thru_hole circle (at 4.191 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (model Connect.3dshapes/DB9FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53B84551)
+ (at 147.32 97.79 270)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /48553E53/4639BAF8)
+ (fp_text reference JP1 (at 0 -1.905 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 2 thru_hole circle (at 1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module inductors:INDUCTOR_V (layer Composant) (tedit 53B840ED) (tstamp 53B8455A)
+ (at 125.73 64.77 270)
+ (descr "Inductor (vertical)")
+ (tags INDUCTOR)
+ (path /48553E53/442A57BE)
+ (fp_text reference L1 (at 0 1.99898 270) (layer F.SilkS)
+ (effects (font (size 1.00076 1.00076) (thickness 0.2032)))
+ )
+ (fp_text value 22uH (at 0.09906 -1.99898 270) (layer F.SilkS)
+ (effects (font (size 1.00076 1.00076) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 3.81 0) (layer F.SilkS) (width 0.20066))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(D10-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (model Inductors.3dshapes/INDUCTOR_V.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 2 2 2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 53B840ED) (tstamp 53B84560)
+ (at 78.74 64.77 90)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /48553E53/442A4FE7)
+ (fp_text reference P1 (at 0 -5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(D1-Pad1)"))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92 (layer Composant) (tedit 53B840ED) (tstamp 53B8456A)
+ (at 146.05 69.85)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /48553E53/442A4EB9)
+ (fp_text reference Q1 (at -1.27 3.81) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BC237 (at -1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 "Net-(Q1-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D11-Pad2)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92 (layer Composant) (tedit 53B840ED) (tstamp 53B84578)
+ (at 146.05 62.23)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /48553E53/442A4F30)
+ (fp_text reference Q2 (at -1.27 3.81) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BC307 (at -1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 VPP))
+ (pad 2 thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C9-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(Q2-Pad3)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92 (layer Composant) (tedit 53B840ED) (tstamp 53B84586)
+ (at 142.24 97.79)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /48553E53/4639B996)
+ (fp_text reference Q3 (at -1.27 3.81) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BC307 (at -1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 2 thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(Q3-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84594)
+ (at 92.71 118.11)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4CF4)
+ (autoplace_cost180 10)
+ (fp_text reference R1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /pic_programmer/TXD))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D2-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845A1)
+ (at 92.71 115.57)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4CFB)
+ (autoplace_cost180 10)
+ (fp_text reference R2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /pic_programmer/TXD))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845AE)
+ (at 92.71 111.76)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D5A)
+ (autoplace_cost180 10)
+ (fp_text reference R3 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /pic_programmer/DTR))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(D4-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845BB)
+ (at 92.71 109.22)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D5B)
+ (autoplace_cost180 10)
+ (fp_text reference R4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /pic_programmer/DTR))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845C8)
+ (at 92.71 124.46)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D62)
+ (autoplace_cost180 10)
+ (fp_text reference R5 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /pic_programmer/PC-CLOCK-OUT))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(D6-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845D5)
+ (at 92.71 121.92)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D63)
+ (autoplace_cost180 10)
+ (fp_text reference R6 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /pic_programmer/PC-CLOCK-OUT))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845E2)
+ (at 144.145 54.61)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4F2A)
+ (autoplace_cost180 10)
+ (fp_text reference R7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 VPP))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C9-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845EF)
+ (at 144.145 90.17)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D92)
+ (autoplace_cost180 10)
+ (fp_text reference R8 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 "Net-(R8-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 "Net-(Q1-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B845FC)
+ (at 144.145 77.47)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4F52)
+ (autoplace_cost180 10)
+ (fp_text reference R9 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 2.2K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(Q2-Pad3)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(D8-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84609)
+ (at 119.38 48.26)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A5F83)
+ (autoplace_cost180 10)
+ (fp_text reference R10 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 5,1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 "Net-(C5-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84616)
+ (at 139.065 66.04 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4F23)
+ (autoplace_cost180 10)
+ (fp_text reference R11 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 22K (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(D11-Pad2)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(C9-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84623)
+ (at 135.255 116.84 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D85)
+ (autoplace_cost180 10)
+ (fp_text reference R12 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 "Net-(R12-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84630)
+ (at 140.335 116.84 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A4D8D)
+ (autoplace_cost180 10)
+ (fp_text reference R13 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 "Net-(R13-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 CLOCK-RB6))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B8463D)
+ (at 144.145 87.63)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A5083)
+ (autoplace_cost180 10)
+ (fp_text reference R14 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(D9-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B8464A)
+ (at 123.19 78.74)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A58D7)
+ (autoplace_cost180 10)
+ (fp_text reference R15 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 6.2K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 "Net-(R15-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84657)
+ (at 123.19 75.565)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A58DC)
+ (autoplace_cost180 10)
+ (fp_text reference R16 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 62K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 "Net-(R16-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 VPP))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84664)
+ (at 156.21 63.5 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/442A50BF)
+ (autoplace_cost180 10)
+ (fp_text reference R17 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 22K (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(Q2-Pad3)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84671)
+ (at 152.4 63.5 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/44369638)
+ (autoplace_cost180 10)
+ (fp_text reference R18 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 220 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(Q2-Pad3)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 VPP-MCLR))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B8467E)
+ (at 144.145 83.82 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/4639B9B0)
+ (autoplace_cost180 10)
+ (fp_text reference R19 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 2.2K (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 "Net-(D11-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(Q3-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B8468B)
+ (at 139.7 102.235 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/4639B9B3)
+ (autoplace_cost180 10)
+ (fp_text reference R20 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 2.2K (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(Q3-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53B840ED) (tstamp 53B84698)
+ (at 153.035 102.235 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /48553E53/4639B9E9)
+ (autoplace_cost180 10)
+ (fp_text reference R21 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(D12-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:RV2X4 (layer Composant) (tedit 53B840ED) (tstamp 53B846A5)
+ (at 122.555 88.265 180)
+ (descr "Resistance variable / Potentiometre")
+ (tags R)
+ (path /48553E53/443D0101)
+ (fp_text reference RV1 (at -2.54 -5.08 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1K (at -1.651 5.461 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -7.62 -3.81) (end 3.81 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -3.81) (end 6.35 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 -1.27) (end 6.35 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 3.81) (end -7.62 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 3.81) (end -7.62 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0.762 -3.81) (end 1.905 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.651 3.81) (end 0.762 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 -0.508) (end 4.953 -0.508) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 0.508) (end 4.953 0.508) (layer F.SilkS) (width 0.3048))
+ (fp_circle (center 1.27 0) (end -2.54 -0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 -2.54 180) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask F.SilkS)
+ (net 32 "Net-(R15-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask F.SilkS)
+ (net 34 "Net-(RV1-Pad2)"))
+ (pad 3 thru_hole circle (at -5.08 2.54 180) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask F.SilkS)
+ (net 33 "Net-(R16-Pad1)"))
+ (model Discret.3dshapes/RV2X4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 53B840ED) (tstamp 53B846B6)
+ (at 182.88 113.03 270)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /48553E7C/442A87F7)
+ (fp_text reference U1 (at -6.35 0 360) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value 24Cxx (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 3 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 4 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 5 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (pad 6 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 CLOCK-RB6))
+ (pad 7 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-14__300_ELL (layer Composant) (tedit 53B840ED) (tstamp 53B846C8)
+ (at 123.19 115.57)
+ (descr "14 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /48553E53/442A4D6B)
+ (fp_text reference U2 (at -5.08 -1.27) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_text value 74HC125 (at 1.27 1.27) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 2.54) (end -10.16 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 2.54) (end -10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 -1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 -2.54) (end 10.16 2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -7.62 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 2 thru_hole oval (at -5.08 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D2-Pad1)"))
+ (pad 3 thru_hole oval (at -2.54 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 "Net-(R8-Pad1)"))
+ (pad 4 thru_hole oval (at 0 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 5 thru_hole oval (at 2.54 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(D4-Pad1)"))
+ (pad 6 thru_hole oval (at 5.08 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 "Net-(R12-Pad1)"))
+ (pad 7 thru_hole oval (at 7.62 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 8 thru_hole oval (at 7.62 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 "Net-(R13-Pad1)"))
+ (pad 9 thru_hole oval (at 5.08 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(D6-Pad1)"))
+ (pad 10 thru_hole oval (at 2.54 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 11 thru_hole oval (at 0 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /pic_programmer/CTS))
+ (pad 12 thru_hole oval (at -2.54 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (pad 13 thru_hole oval (at -5.08 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 14 thru_hole oval (at -7.62 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (model Sockets_DIP.3dshapes/DIP-14__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LM78XX (layer Composant) (tedit 53B840ED) (tstamp 53B846E0)
+ (at 99.06 71.12 90)
+ (descr "Regulateur TO220 serie LM78xx")
+ (tags "TR TO220")
+ (path /48553E53/442A504A)
+ (fp_text reference U3 (at 7.62 0 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 7805 (at 10.668 0.127 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 0 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0 2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 5.08) (end 20.32 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 5.08) (end 20.32 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 3.81) (end 12.7 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 3.81) (end 12.7 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -5.08) (end 20.32 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 4 thru_hole rect (at 16.51 0 90) (size 8.89 8.89) (drill 3.048) (layers *.Cu *.SilkS *.Mask))
+ (pad VI thru_hole circle (at 0 -2.54 90) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(C2-Pad1)"))
+ (pad GND thru_hole rect (at 0 0 90) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad VO thru_hole circle (at 0 2.54 90) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (model Discret.3dshapes/TO220.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 53B840ED) (tstamp 53B846F1)
+ (at 114.3 60.96 270)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /48553E53/442A5E20)
+ (fp_text reference U4 (at -6.35 0 360) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value LT1373 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 "Net-(RV1-Pad2)"))
+ (pad 3 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 VCC))
+ (pad 6 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 7 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 8 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(D10-Pad1)"))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-18__300_ELL (layer Composant) (tedit 53B840ED) (tstamp 53B84703)
+ (at 211.455 118.11 270)
+ (descr "18 pins DIL package, elliptical pads")
+ (path /48553E7C/442A81A7)
+ (fp_text reference U5 (at -7.62 -1.27 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value PIC_18_PINS (at 1.524 1.016 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_line (start -12.7 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -11.43 -1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -11.43 1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -12.7 -2.54) (end 12.7 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 12.7 -2.54) (end 12.7 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 12.7 2.54) (end -12.7 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -12.7 2.54) (end -12.7 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -10.16 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole oval (at -7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at -5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at -2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 VPP-MCLR))
+ (pad 5 thru_hole oval (at 0 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (pad 6 thru_hole oval (at 2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at 5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at 7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole oval (at 10.16 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at 10.16 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole oval (at 5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 CLOCK-RB6))
+ (pad 13 thru_hole oval (at 2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (pad 14 thru_hole oval (at 0 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 15 thru_hole oval (at -2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole oval (at -5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole oval (at -7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at -10.16 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (model Sockets_DIP.3dshapes/DIP-18__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 53B840ED) (tstamp 53B8471F)
+ (at 182.88 124.46 270)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /48553E7C/442A81A5)
+ (fp_text reference U6 (at -6.35 0 360) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value PIC_8_PINS (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 VCC_PIC))
+ (pad 2 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 VPP-MCLR))
+ (pad 5 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 CLOCK-RB6))
+ (pad 7 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 DATA-RB7))
+ (pad 8 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 GND))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_text "VCC ON" (at 163.83 98.425) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 200.66 107.95) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 171.45 120.65) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 171.45 109.22) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 201.295 48.895) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 167.64 48.895) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text JP-CHARRAS (at 94.615 137.16) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "J-P CHARRAS" (at 94.615 137.16) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text "13V ADJUST" (at 123.19 95.25) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 40 PINS" (at 182.245 45.085) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 28 PINS" (at 212.725 45.085) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 18 PINS" (at 211.455 132.715) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "I2C PROM" (at 166.37 114.3) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 8 PINS" (at 183.515 132.08) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PWR ON" (at 163.83 88.9) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "VPP ON" (at 163.195 80.645) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text +8/12V (at 80.01 57.15) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC PROGRAMMER V03" (at 125.095 132.08) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC PROGRAMMER V03" (at 124.46 134.62) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_line (start 73.66 139.7) (end 73.66 40.64) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 233.68 139.7) (end 73.66 139.7) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 233.68 40.64) (end 233.68 139.7) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 173.99 40.64) (end 233.68 40.64) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 73.66 40.64) (end 173.99 40.64) (angle 90) (layer Edge.Cuts) (width 0.381))
+
+ (segment (start 112.395 113.665) (end 113.03 114.3) (width 0.635) (layer Cuivre) (net 1))
+ (segment (start 80.01 114.173) (end 83.947 114.173) (width 0.635) (layer Cuivre) (net 1) (status 800))
+ (segment (start 123.19 113.03) (end 123.19 111.76) (width 0.635) (layer Cuivre) (net 1) (status 400))
+ (segment (start 121.92 114.3) (end 123.19 113.03) (width 0.635) (layer Cuivre) (net 1))
+ (segment (start 113.03 114.3) (end 121.92 114.3) (width 0.635) (layer Cuivre) (net 1) (status 2))
+ (segment (start 83.947 114.173) (end 84.455 113.665) (width 0.635) (layer Cuivre) (net 1))
+ (segment (start 84.455 113.665) (end 112.395 113.665) (width 0.635) (layer Cuivre) (net 1))
+ (segment (start 87.63 118.11) (end 87.63 115.57) (width 0.635) (layer Cuivre) (net 2) (status C00))
+ (segment (start 87.63 115.57) (end 82.55 115.57) (width 0.635) (layer Cuivre) (net 2) (status C02))
+ (segment (start 133.985 87.63) (end 126.365 80.01) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 114.3 93.345) (end 130.81 93.345) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 134.62 89.535) (end 134.62 87.63) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 118.11 64.77) (end 120.65 64.77) (width 1.016) (layer Cuivre) (net 4) (status 802))
+ (segment (start 123.19 67.31) (end 120.65 64.77) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 123.825 67.31) (end 123.19 67.31) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 107.95 111.76) (end 115.57 111.76) (width 1.016) (layer Cuivre) (net 4) (status C02))
+ (segment (start 134.62 87.63) (end 133.985 87.63) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 143.51 96.52) (end 144.78 96.52) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 144.78 96.52) (end 147.32 96.52) (width 1.016) (layer Cuivre) (net 4) (status 400))
+ (segment (start 144.78 102.235) (end 144.78 96.52) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 110.49 123.825) (end 109.855 124.46) (width 1.016) (layer Composant) (net 4))
+ (segment (start 126.365 80.01) (end 124.46 80.01) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 124.46 80.01) (end 123.825 79.375) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 139.065 87.63) (end 134.62 87.63) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 101.6 71.12) (end 107.95 71.12) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 115.57 98.425) (end 115.57 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 114.3 93.345) (end 114.3 97.155) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 114.3 97.155) (end 115.57 98.425) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 115.57 111.76) (end 115.57 104.775) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 123.825 79.375) (end 123.825 67.31) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 130.81 93.345) (end 134.62 89.535) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 186.69 106.045) (end 187.96 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 196.85 106.68) (end 194.945 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 196.85 112.395) (end 196.85 106.68) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 186.69 109.22) (end 186.69 106.045) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 187.96 104.775) (end 194.945 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 110.49 119.38) (end 110.49 123.825) (width 1.016) (layer Composant) (net 4))
+ (segment (start 110.49 84.455) (end 114.3 88.265) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 114.3 88.265) (end 114.3 93.345) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 110.49 78.74) (end 110.49 84.455) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 110.49 73.66) (end 107.95 71.12) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 110.49 78.74) (end 110.49 73.66) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 125.73 67.31) (end 123.825 67.31) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 107.95 111.76) (end 109.855 111.76) (width 1.016) (layer Composant) (net 4) (status 800))
+ (segment (start 109.22 118.11) (end 107.95 118.11) (width 1.016) (layer Composant) (net 4) (status 400))
+ (segment (start 110.49 116.84) (end 109.22 118.11) (width 1.016) (layer Composant) (net 4))
+ (segment (start 110.49 112.395) (end 110.49 116.84) (width 1.016) (layer Composant) (net 4))
+ (segment (start 109.855 111.76) (end 110.49 112.395) (width 1.016) (layer Composant) (net 4))
+ (segment (start 109.22 118.11) (end 110.49 119.38) (width 1.016) (layer Composant) (net 4))
+ (segment (start 109.855 124.46) (end 107.95 124.46) (width 1.016) (layer Composant) (net 4) (status 400))
+ (segment (start 143.51 96.52) (end 142.24 97.79) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 137.16 99.06) (end 137.16 103.505) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 138.43 97.79) (end 137.16 99.06) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 142.24 97.79) (end 138.43 97.79) (width 0.4826) (layer Cuivre) (net 4))
+ (segment (start 147.32 96.52) (end 148.59 96.52) (width 1.016) (layer Cuivre) (net 4) (status 800))
+ (segment (start 186.69 106.045) (end 186.69 109.22) (width 1.016) (layer Composant) (net 4) (status 400))
+ (segment (start 185.42 104.775) (end 186.69 106.045) (width 1.016) (layer Composant) (net 4))
+ (segment (start 170.18 104.775) (end 185.42 104.775) (width 1.016) (layer Composant) (net 4))
+ (via (at 170.18 104.775) (size 1.651) (layers Composant Cuivre) (net 4))
+ (segment (start 167.64 104.775) (end 170.18 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 165.735 106.68) (end 167.64 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 158.75 106.68) (end 165.735 106.68) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 148.59 96.52) (end 158.75 106.68) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 135.89 104.775) (end 115.57 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 137.16 103.505) (end 135.89 104.775) (width 1.016) (layer Cuivre) (net 4))
+ (segment (start 136.525 57.15) (end 133.985 59.69) (width 0.635) (layer Cuivre) (net 5))
+ (segment (start 133.985 68.58) (end 128.27 74.295) (width 0.635) (layer Cuivre) (net 5))
+ (segment (start 133.985 62.23) (end 133.985 68.58) (width 0.635) (layer Cuivre) (net 5) (status 800))
+ (segment (start 137.16 56.515) (end 139.065 54.61) (width 0.635) (layer Cuivre) (net 5) (status 400))
+ (segment (start 137.16 57.15) (end 137.16 56.515) (width 0.635) (layer Cuivre) (net 5) (status 800))
+ (segment (start 136.525 57.15) (end 137.16 57.15) (width 0.635) (layer Cuivre) (net 5) (status 400))
+ (segment (start 143.51 57.15) (end 147.32 60.96) (width 0.635) (layer Cuivre) (net 5) (status 400))
+ (segment (start 137.16 57.15) (end 143.51 57.15) (width 0.635) (layer Cuivre) (net 5) (status 800))
+ (segment (start 133.985 62.23) (end 133.985 59.69) (width 0.635) (layer Cuivre) (net 5) (status 800))
+ (segment (start 128.27 74.295) (end 128.27 75.565) (width 0.635) (layer Cuivre) (net 5) (status 400))
+ (segment (start 139.065 54.61) (end 139.065 51.181) (width 0.635) (layer Cuivre) (net 5) (status 800))
+ (segment (start 140.462 49.784) (end 143.002 49.784) (width 0.635) (layer Cuivre) (net 5) (status 400))
+ (segment (start 139.065 51.181) (end 140.462 49.784) (width 0.635) (layer Cuivre) (net 5))
+ (segment (start 201.93 64.77) (end 205.74 64.77) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 198.755 67.945) (end 201.93 64.77) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 205.74 64.77) (end 210.185 64.77) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 198.755 71.12) (end 198.755 67.945) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 210.185 64.77) (end 210.82 64.77) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 190.5 71.12) (end 198.755 71.12) (width 1.016) (layer Cuivre) (net 6) (status C00))
+ (segment (start 213.36 71.12) (end 215.265 71.12) (width 1.016) (layer Cuivre) (net 6) (status 400))
+ (segment (start 212.725 70.485) (end 213.36 71.12) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 166.37 120.65) (end 147.955 102.235) (width 1.016) (layer Cuivre) (net 6) (status 400))
+ (segment (start 210.82 64.77) (end 212.725 66.675) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 206.375 102.235) (end 219.075 102.235) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 203.2 105.41) (end 206.375 102.235) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 212.725 66.675) (end 212.725 70.485) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 204.47 116.84) (end 210.185 116.84) (width 0.4318) (layer Cuivre) (net 6) (status 2))
+ (segment (start 219.71 71.12) (end 215.265 71.12) (width 1.016) (layer Cuivre) (net 6) (status 400))
+ (segment (start 220.345 71.755) (end 219.71 71.12) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 220.345 100.965) (end 220.345 71.755) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 219.075 102.235) (end 220.345 100.965) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 198.12 119.38) (end 210.185 119.38) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 210.185 119.38) (end 210.185 118.11) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 193.04 119.38) (end 198.12 119.38) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 182.245 121.92) (end 189.23 121.92) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 189.23 121.92) (end 190.5 121.92) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 185.42 71.12) (end 190.5 71.12) (width 1.016) (layer Cuivre) (net 6) (status 400))
+ (segment (start 190.5 121.92) (end 193.04 119.38) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 180.975 120.65) (end 182.245 121.92) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 179.07 120.65) (end 180.975 120.65) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 175.26 76.2) (end 180.34 76.2) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 210.185 118.11) (end 215.265 118.11) (width 1.016) (layer Cuivre) (net 6) (status 402))
+ (segment (start 180.34 76.2) (end 185.42 71.12) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 203.2 105.41) (end 203.2 112.395) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 203.2 112.395) (end 203.2 115.57) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 203.2 115.57) (end 204.47 116.84) (width 0.635) (layer Cuivre) (net 6))
+ (segment (start 147.32 99.06) (end 147.32 101.6) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 147.32 101.6) (end 147.955 102.235) (width 1.016) (layer Cuivre) (net 6) (status 400))
+ (segment (start 140.97 99.06) (end 140.97 104.14) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 140.97 104.14) (end 142.24 105.41) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 142.24 105.41) (end 144.78 105.41) (width 1.016) (layer Cuivre) (net 6))
+ (segment (start 144.78 105.41) (end 147.955 102.235) (width 1.016) (layer Cuivre) (net 6) (status 400))
+ (segment (start 179.07 120.65) (end 166.37 120.65) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 210.185 118.11) (end 210.185 116.84) (width 1.016) (layer Cuivre) (net 6) (status 2))
+ (segment (start 200.66 112.395) (end 203.2 112.395) (width 1.016) (layer Cuivre) (net 6) (status 800))
+ (segment (start 83.185 111.76) (end 87.63 111.76) (width 0.635) (layer Cuivre) (net 7) (status 400))
+ (segment (start 82.55 112.395) (end 83.185 111.76) (width 0.635) (layer Cuivre) (net 7))
+ (segment (start 82.55 112.776) (end 82.55 112.395) (width 0.635) (layer Cuivre) (net 7) (status 800))
+ (segment (start 87.63 111.76) (end 87.63 109.22) (width 0.635) (layer Cuivre) (net 7) (status C00))
+ (segment (start 77.47 117.475) (end 77.47 120.65) (width 0.635) (layer Cuivre) (net 8))
+ (segment (start 80.01 116.84) (end 78.105 116.84) (width 0.635) (layer Cuivre) (net 8) (status 800))
+ (segment (start 86.36 124.46) (end 87.63 124.46) (width 0.635) (layer Cuivre) (net 8) (status 400))
+ (segment (start 80.01 123.19) (end 85.09 123.19) (width 0.635) (layer Cuivre) (net 8))
+ (segment (start 78.105 116.84) (end 77.47 117.475) (width 0.635) (layer Cuivre) (net 8))
+ (segment (start 85.09 123.19) (end 86.36 124.46) (width 0.635) (layer Cuivre) (net 8))
+ (segment (start 87.63 124.46) (end 87.63 121.92) (width 0.635) (layer Cuivre) (net 8) (status C00))
+ (segment (start 77.47 120.65) (end 80.01 123.19) (width 0.635) (layer Cuivre) (net 8))
+ (segment (start 207.645 50.8) (end 207.645 46.355) (width 0.635) (layer Cuivre) (net 9) (status 800))
+ (segment (start 179.07 130.81) (end 180.975 132.715) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 207.645 115.57) (end 205.105 115.57) (width 0.635) (layer Cuivre) (net 9) (status 800))
+ (segment (start 221.615 104.14) (end 220.98 104.14) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 221.615 104.14) (end 222.25 103.505) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 220.98 130.81) (end 220.98 104.14) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 218.44 133.35) (end 220.98 130.81) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 222.25 48.895) (end 222.25 103.505) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 205.105 115.57) (end 204.47 114.935) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 204.47 114.935) (end 204.47 106.68) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 204.47 106.68) (end 207.01 104.14) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 207.01 104.14) (end 220.98 104.14) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 219.71 46.355) (end 207.645 46.355) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 156.845 50.8) (end 175.26 50.8) (width 0.635) (layer Cuivre) (net 9) (status 400))
+ (segment (start 195.58 132.715) (end 196.215 133.35) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 175.26 50.8) (end 175.26 47.625) (width 0.635) (layer Cuivre) (net 9) (status 800))
+ (segment (start 179.07 130.81) (end 179.07 128.27) (width 0.635) (layer Cuivre) (net 9) (status 400))
+ (segment (start 207.645 46.355) (end 176.53 46.355) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 175.26 47.625) (end 176.53 46.355) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 222.25 48.895) (end 219.71 46.355) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 196.215 133.35) (end 218.44 133.35) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 195.58 132.715) (end 180.975 132.715) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 156.845 50.8) (end 152.4 55.245) (width 0.635) (layer Cuivre) (net 9))
+ (segment (start 152.4 55.245) (end 152.4 58.42) (width 0.635) (layer Cuivre) (net 9) (status 400))
+ (segment (start 189.865 110.49) (end 189.865 113.665) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 140.335 122.555) (end 144.78 127) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 217.805 123.825) (end 217.17 123.19) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 217.805 130.175) (end 217.805 123.825) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 205.74 54.61) (end 208.915 54.61) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 196.85 54.61) (end 205.74 54.61) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 211.455 53.34) (end 210.185 54.61) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 210.185 54.61) (end 208.915 54.61) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 211.455 53.34) (end 215.265 53.34) (width 0.635) (layer Cuivre) (net 10) (status 400))
+ (segment (start 192.405 125.73) (end 198.12 131.445) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 144.78 127) (end 177.165 127) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 193.04 107.315) (end 193.04 75.565) (width 0.635) (layer Composant) (net 10))
+ (segment (start 196.85 67.31) (end 196.85 54.61) (width 0.635) (layer Composant) (net 10))
+ (segment (start 189.865 123.19) (end 192.405 125.73) (width 0.635) (layer Composant) (net 10))
+ (segment (start 189.23 114.3) (end 186.69 114.3) (width 0.635) (layer Cuivre) (net 10) (status 400))
+ (via (at 192.405 125.73) (size 1.651) (layers Composant Cuivre) (net 10))
+ (via (at 196.85 54.61) (size 1.651) (layers Composant Cuivre) (net 10))
+ (segment (start 193.04 75.565) (end 196.215 72.39) (width 0.635) (layer Composant) (net 10))
+ (segment (start 193.04 107.315) (end 189.865 110.49) (width 0.635) (layer Composant) (net 10))
+ (segment (start 186.69 125.73) (end 192.405 125.73) (width 0.635) (layer Cuivre) (net 10) (status 802))
+ (segment (start 198.12 131.445) (end 216.535 131.445) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 140.335 121.92) (end 140.335 122.555) (width 0.635) (layer Cuivre) (net 10) (status 800))
+ (segment (start 217.17 123.19) (end 215.265 123.19) (width 0.635) (layer Cuivre) (net 10) (status 400))
+ (segment (start 195.58 53.34) (end 196.85 54.61) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 190.5 53.34) (end 195.58 53.34) (width 0.635) (layer Cuivre) (net 10) (status 800))
+ (segment (start 196.215 67.945) (end 196.85 67.31) (width 0.635) (layer Composant) (net 10))
+ (segment (start 189.865 110.49) (end 189.865 123.19) (width 0.635) (layer Composant) (net 10))
+ (segment (start 196.215 72.39) (end 196.215 67.945) (width 0.635) (layer Composant) (net 10))
+ (segment (start 182.245 125.73) (end 186.69 125.73) (width 0.635) (layer Cuivre) (net 10) (status 400))
+ (via (at 189.865 110.49) (size 1.651) (layers Composant Cuivre) (net 10))
+ (segment (start 182.245 125.73) (end 180.975 127) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 177.165 127) (end 180.975 127) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 216.535 131.445) (end 217.805 130.175) (width 0.635) (layer Cuivre) (net 10))
+ (segment (start 189.865 113.665) (end 189.23 114.3) (width 0.635) (layer Cuivre) (net 10))
+ (via (at 192.405 123.19) (size 1.651) (layers Composant Cuivre) (net 11))
+ (segment (start 132.715 109.22) (end 135.255 111.76) (width 0.635) (layer Composant) (net 11) (status 400))
+ (segment (start 192.405 114.3) (end 192.405 123.19) (width 0.635) (layer Composant) (net 11))
+ (segment (start 200.025 52.07) (end 205.74 52.07) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 203.2 121.92) (end 213.995 121.92) (width 0.4318) (layer Cuivre) (net 11) (status 2))
+ (segment (start 173.99 125.095) (end 174.625 124.46) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 209.55 52.07) (end 210.82 50.8) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 201.93 123.19) (end 203.2 121.92) (width 0.635) (layer Cuivre) (net 11) (status 2))
+ (segment (start 213.995 121.92) (end 215.265 120.65) (width 0.635) (layer Cuivre) (net 11) (status 402))
+ (segment (start 186.69 123.19) (end 192.405 123.19) (width 0.635) (layer Cuivre) (net 11) (status 802))
+ (segment (start 174.625 124.46) (end 181.61 124.46) (width 0.4318) (layer Cuivre) (net 11))
+ (segment (start 149.86 125.095) (end 173.99 125.095) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 181.61 124.46) (end 182.88 123.19) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 120.65 109.855) (end 121.285 109.22) (width 0.635) (layer Composant) (net 11))
+ (segment (start 120.65 111.76) (end 120.65 109.855) (width 0.635) (layer Composant) (net 11) (status 800))
+ (segment (start 192.405 123.19) (end 201.93 123.19) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 121.285 109.22) (end 132.715 109.22) (width 0.635) (layer Composant) (net 11))
+ (segment (start 205.74 52.07) (end 209.55 52.07) (width 0.4318) (layer Cuivre) (net 11))
+ (segment (start 182.88 123.19) (end 186.69 123.19) (width 0.635) (layer Cuivre) (net 11) (status 400))
+ (segment (start 194.945 91.44) (end 194.945 113.665) (width 0.635) (layer Composant) (net 11))
+ (segment (start 194.945 113.665) (end 194.31 114.3) (width 0.635) (layer Composant) (net 11))
+ (segment (start 200.025 57.15) (end 200.025 52.07) (width 0.635) (layer Composant) (net 11))
+ (via (at 200.025 52.07) (size 1.651) (layers Composant Cuivre) (net 11))
+ (segment (start 194.31 114.3) (end 192.405 114.3) (width 0.635) (layer Composant) (net 11))
+ (segment (start 190.5 50.8) (end 198.755 50.8) (width 0.635) (layer Cuivre) (net 11) (status 800))
+ (segment (start 198.755 50.8) (end 200.025 52.07) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 135.255 111.76) (end 137.795 114.3) (width 0.635) (layer Cuivre) (net 11) (status 800))
+ (segment (start 215.265 50.8) (end 210.82 50.8) (width 0.635) (layer Cuivre) (net 11) (status 800))
+ (segment (start 200.025 57.15) (end 201.295 58.42) (width 0.635) (layer Composant) (net 11))
+ (via (at 192.405 114.3) (size 1.651) (layers Composant Cuivre) (net 11))
+ (segment (start 201.295 58.42) (end 201.295 85.09) (width 0.635) (layer Composant) (net 11))
+ (segment (start 201.295 85.09) (end 194.945 91.44) (width 0.635) (layer Composant) (net 11))
+ (segment (start 137.795 114.3) (end 139.065 114.3) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 139.065 114.3) (end 149.86 125.095) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 192.405 114.3) (end 191.77 114.3) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 189.23 116.84) (end 186.69 116.84) (width 0.635) (layer Cuivre) (net 11) (status 400))
+ (segment (start 191.77 114.3) (end 189.23 116.84) (width 0.635) (layer Cuivre) (net 11))
+ (segment (start 87.63 71.12) (end 96.52 71.12) (width 1.016) (layer Cuivre) (net 12) (status C02))
+ (segment (start 84.455 90.17) (end 84.455 89.535) (width 1.016) (layer Cuivre) (net 12) (status 800))
+ (segment (start 82.55 76.2) (end 87.63 71.12) (width 1.016) (layer Cuivre) (net 12) (status 400))
+ (segment (start 82.55 87.63) (end 82.55 76.2) (width 1.016) (layer Cuivre) (net 12))
+ (segment (start 84.455 89.535) (end 82.55 87.63) (width 1.016) (layer Cuivre) (net 12))
+ (segment (start 114.3 48.26) (end 114.3 52.07) (width 0.635) (layer Cuivre) (net 13) (status C00))
+ (segment (start 110.49 57.15) (end 110.49 53.34) (width 0.4318) (layer Cuivre) (net 13) (status 800))
+ (segment (start 110.49 53.34) (end 111.76 52.07) (width 0.4318) (layer Cuivre) (net 13))
+ (segment (start 111.76 52.07) (end 114.3 52.07) (width 0.4318) (layer Cuivre) (net 13) (status 400))
+ (segment (start 128.27 48.26) (end 129.54 49.53) (width 0.635) (layer Cuivre) (net 14) (status 402))
+ (segment (start 124.46 48.26) (end 128.27 48.26) (width 0.635) (layer Cuivre) (net 14) (status 802))
+ (segment (start 144.78 60.96) (end 139.065 60.96) (width 0.635) (layer Cuivre) (net 15) (status C02))
+ (segment (start 149.225 54.61) (end 149.225 59.055) (width 0.635) (layer Cuivre) (net 15) (status 800))
+ (segment (start 148.59 63.5) (end 147.32 63.5) (width 0.635) (layer Cuivre) (net 15))
+ (segment (start 149.225 59.055) (end 149.86 59.69) (width 0.635) (layer Cuivre) (net 15))
+ (segment (start 149.86 62.23) (end 148.59 63.5) (width 0.635) (layer Cuivre) (net 15))
+ (segment (start 149.86 59.69) (end 149.86 62.23) (width 0.635) (layer Cuivre) (net 15))
+ (segment (start 144.78 60.96) (end 147.32 63.5) (width 0.4318) (layer Cuivre) (net 15) (status 800))
+ (segment (start 145.542 49.784) (end 148.082 49.784) (width 0.635) (layer Cuivre) (net 15) (status C00))
+ (segment (start 148.082 49.784) (end 148.844 49.784) (width 0.635) (layer Cuivre) (net 15) (status 800))
+ (segment (start 149.225 50.165) (end 149.225 54.61) (width 0.635) (layer Cuivre) (net 15) (status 400))
+ (segment (start 148.844 49.784) (end 149.225 50.165) (width 0.635) (layer Cuivre) (net 15))
+ (segment (start 78.74 62.23) (end 83.82 62.23) (width 1.016) (layer Cuivre) (net 16) (status 802))
+ (segment (start 83.82 62.23) (end 87.63 58.42) (width 1.016) (layer Cuivre) (net 16) (status 402))
+ (segment (start 106.045 121.92) (end 107.95 121.92) (width 0.635) (layer Cuivre) (net 17) (status 400))
+ (segment (start 94.615 124.46) (end 97.155 127) (width 0.635) (layer Cuivre) (net 17))
+ (segment (start 97.79 118.11) (end 95.885 118.11) (width 0.635) (layer Cuivre) (net 17) (status 800))
+ (segment (start 100.33 118.11) (end 97.79 118.11) (width 0.635) (layer Cuivre) (net 17) (status C02))
+ (segment (start 116.205 121.92) (end 118.11 120.015) (width 0.635) (layer Cuivre) (net 17))
+ (segment (start 118.11 120.015) (end 118.11 119.38) (width 0.635) (layer Cuivre) (net 17) (status 400))
+ (segment (start 107.95 121.92) (end 116.205 121.92) (width 0.635) (layer Cuivre) (net 17) (status 800))
+ (segment (start 95.885 118.11) (end 94.615 119.38) (width 0.635) (layer Cuivre) (net 17))
+ (segment (start 94.615 119.38) (end 94.615 124.46) (width 0.635) (layer Cuivre) (net 17))
+ (segment (start 100.965 127) (end 106.045 121.92) (width 0.635) (layer Cuivre) (net 17))
+ (segment (start 97.155 127) (end 100.965 127) (width 0.635) (layer Cuivre) (net 17))
+ (segment (start 100.33 111.76) (end 104.267 111.76) (width 0.635) (layer Cuivre) (net 18) (status 802))
+ (segment (start 100.33 111.76) (end 97.79 111.76) (width 0.635) (layer Cuivre) (net 18) (status C02))
+ (segment (start 111.76 109.855) (end 111.76 119.38) (width 0.635) (layer Composant) (net 18))
+ (segment (start 125.73 120.65) (end 125.73 119.38) (width 0.635) (layer Composant) (net 18) (status 402))
+ (segment (start 115.57 123.19) (end 123.19 123.19) (width 0.635) (layer Composant) (net 18))
+ (segment (start 111.125 109.22) (end 111.76 109.855) (width 0.635) (layer Composant) (net 18))
+ (segment (start 111.76 119.38) (end 115.57 123.19) (width 0.635) (layer Composant) (net 18))
+ (segment (start 123.19 123.19) (end 125.73 120.65) (width 0.635) (layer Composant) (net 18) (status 2))
+ (segment (start 107.95 109.22) (end 111.125 109.22) (width 0.635) (layer Composant) (net 18) (status 800))
+ (segment (start 107.95 109.22) (end 106.807 109.22) (width 0.635) (layer Cuivre) (net 18) (status 800))
+ (segment (start 106.807 109.22) (end 104.267 111.76) (width 0.635) (layer Cuivre) (net 18))
+ (segment (start 128.27 113.03) (end 125.73 115.57) (width 0.635) (layer Cuivre) (net 19))
+ (segment (start 101.6 120.015) (end 106.045 115.57) (width 0.635) (layer Cuivre) (net 19))
+ (segment (start 100.33 124.46) (end 97.79 124.46) (width 0.635) (layer Cuivre) (net 19) (status C02))
+ (segment (start 106.045 115.57) (end 107.95 115.57) (width 0.635) (layer Cuivre) (net 19) (status 402))
+ (segment (start 95.885 122.555) (end 97.79 124.46) (width 0.635) (layer Cuivre) (net 19) (status 400))
+ (segment (start 128.27 111.76) (end 128.27 113.03) (width 0.635) (layer Cuivre) (net 19) (status 800))
+ (segment (start 107.95 115.57) (end 125.73 115.57) (width 0.635) (layer Cuivre) (net 19) (status 802))
+ (segment (start 96.52 120.015) (end 101.6 120.015) (width 0.635) (layer Cuivre) (net 19))
+ (segment (start 95.885 120.65) (end 95.885 122.555) (width 0.635) (layer Cuivre) (net 19))
+ (segment (start 96.52 120.015) (end 95.885 120.65) (width 0.635) (layer Cuivre) (net 19))
+ (segment (start 153.67 77.47) (end 149.225 77.47) (width 0.635) (layer Cuivre) (net 20) (status C00))
+ (segment (start 153.67 87.63) (end 149.225 87.63) (width 0.635) (layer Cuivre) (net 21) (status C00))
+ (segment (start 118.11 57.15) (end 124.46 57.15) (width 0.635) (layer Cuivre) (net 22) (status C02))
+ (segment (start 124.46 57.15) (end 124.46 60.96) (width 0.635) (layer Cuivre) (net 22) (status 800))
+ (segment (start 124.46 60.96) (end 125.73 62.23) (width 0.635) (layer Cuivre) (net 22) (status 400))
+ (segment (start 141.605 73.66) (end 141.605 78.105) (width 0.635) (layer Cuivre) (net 23))
+ (segment (start 141.605 78.105) (end 139.065 80.645) (width 0.635) (layer Cuivre) (net 23) (status 400))
+ (segment (start 139.065 71.12) (end 141.605 73.66) (width 0.635) (layer Cuivre) (net 23) (status 800))
+ (segment (start 144.78 71.12) (end 139.065 71.12) (width 0.635) (layer Cuivre) (net 23) (status C02))
+ (segment (start 148.59 80.645) (end 149.225 81.28) (width 0.635) (layer Cuivre) (net 24))
+ (segment (start 146.685 80.645) (end 148.59 80.645) (width 0.635) (layer Cuivre) (net 24) (status 800))
+ (segment (start 149.225 81.28) (end 149.225 83.82) (width 0.635) (layer Cuivre) (net 24) (status 400))
+ (segment (start 153.67 97.155) (end 153.67 97.79) (width 0.635) (layer Cuivre) (net 25) (status 800))
+ (segment (start 153.67 97.79) (end 158.115 102.235) (width 0.635) (layer Cuivre) (net 25) (status 400))
+ (segment (start 146.685 90.17) (end 144.78 88.265) (width 0.635) (layer Cuivre) (net 26))
+ (segment (start 147.32 73.025) (end 144.78 75.565) (width 0.635) (layer Cuivre) (net 26))
+ (segment (start 144.78 75.565) (end 144.78 88.265) (width 0.635) (layer Cuivre) (net 26))
+ (segment (start 147.32 71.12) (end 147.32 73.025) (width 0.635) (layer Cuivre) (net 26))
+ (segment (start 144.78 68.58) (end 147.32 71.12) (width 0.635) (layer Cuivre) (net 26) (status 800))
+ (segment (start 149.225 90.17) (end 146.685 90.17) (width 0.635) (layer Cuivre) (net 26) (status 800))
+ (segment (start 144.78 63.5) (end 145.415 63.5) (width 0.635) (layer Cuivre) (net 27) (status 800))
+ (segment (start 152.4 68.58) (end 152.4 69.85) (width 0.635) (layer Composant) (net 27) (status 800))
+ (segment (start 146.05 73.66) (end 147.955 71.755) (width 0.635) (layer Composant) (net 27))
+ (segment (start 137.795 74.93) (end 137.795 76.2) (width 0.635) (layer Composant) (net 27))
+ (segment (start 137.795 74.93) (end 139.065 73.66) (width 0.635) (layer Composant) (net 27))
+ (segment (start 145.415 63.5) (end 147.32 65.405) (width 0.635) (layer Cuivre) (net 27))
+ (segment (start 147.955 71.755) (end 150.495 71.755) (width 0.635) (layer Composant) (net 27))
+ (segment (start 156.21 58.42) (end 156.21 61.595) (width 0.635) (layer Cuivre) (net 27) (status 800))
+ (segment (start 152.4 65.405) (end 152.4 68.58) (width 0.635) (layer Cuivre) (net 27) (status 400))
+ (segment (start 156.21 61.595) (end 152.4 65.405) (width 0.635) (layer Cuivre) (net 27))
+ (segment (start 149.225 65.405) (end 152.4 68.58) (width 0.635) (layer Cuivre) (net 27) (status 400))
+ (segment (start 147.32 65.405) (end 149.225 65.405) (width 0.635) (layer Cuivre) (net 27))
+ (segment (start 139.065 73.66) (end 146.05 73.66) (width 0.635) (layer Composant) (net 27))
+ (segment (start 137.795 76.2) (end 139.065 77.47) (width 0.635) (layer Composant) (net 27) (status 400))
+ (segment (start 150.495 71.755) (end 152.4 69.85) (width 0.635) (layer Composant) (net 27))
+ (segment (start 140.97 85.09) (end 139.7 83.82) (width 0.635) (layer Cuivre) (net 28))
+ (segment (start 139.7 83.82) (end 139.065 83.82) (width 0.635) (layer Cuivre) (net 28) (status 400))
+ (segment (start 140.97 96.52) (end 135.255 96.52) (width 0.635) (layer Cuivre) (net 28) (status 800))
+ (segment (start 134.62 97.155) (end 134.62 102.235) (width 0.635) (layer Cuivre) (net 28) (status 400))
+ (segment (start 135.255 96.52) (end 134.62 97.155) (width 0.635) (layer Cuivre) (net 28))
+ (segment (start 140.97 85.09) (end 140.97 96.52) (width 0.635) (layer Cuivre) (net 28) (status 400))
+ (segment (start 114.935 116.205) (end 120.015 116.205) (width 0.635) (layer Composant) (net 29))
+ (segment (start 114.935 102.235) (end 113.03 104.14) (width 0.635) (layer Composant) (net 29))
+ (segment (start 120.65 116.84) (end 120.65 119.38) (width 0.635) (layer Composant) (net 29) (status 400))
+ (segment (start 114.935 102.235) (end 127 102.235) (width 0.635) (layer Composant) (net 29))
+ (segment (start 127 102.235) (end 139.065 90.17) (width 0.635) (layer Composant) (net 29) (status 400))
+ (segment (start 120.015 116.205) (end 120.65 116.84) (width 0.635) (layer Composant) (net 29))
+ (segment (start 113.03 104.14) (end 113.03 114.3) (width 0.635) (layer Composant) (net 29))
+ (segment (start 113.03 114.3) (end 114.935 116.205) (width 0.635) (layer Composant) (net 29))
+ (segment (start 128.27 119.38) (end 128.27 120.65) (width 0.635) (layer Cuivre) (net 30) (status 800))
+ (segment (start 129.54 121.92) (end 135.255 121.92) (width 0.635) (layer Cuivre) (net 30) (status 400))
+ (segment (start 128.27 120.65) (end 129.54 121.92) (width 0.635) (layer Cuivre) (net 30))
+ (segment (start 130.81 109.6264) (end 132.6896 107.7468) (width 0.635) (layer Cuivre) (net 31))
+ (segment (start 130.81 111.76) (end 130.81 109.6264) (width 0.635) (layer Cuivre) (net 31) (status 800))
+ (segment (start 140.335 109.6772) (end 140.335 111.76) (width 0.635) (layer Cuivre) (net 31) (status 400))
+ (segment (start 138.4046 107.7468) (end 140.335 109.6772) (width 0.635) (layer Cuivre) (net 31))
+ (segment (start 132.6896 107.7468) (end 138.4046 107.7468) (width 0.635) (layer Cuivre) (net 31))
+ (segment (start 125.73 90.805) (end 127.635 90.805) (width 0.635) (layer Cuivre) (net 32) (status 400))
+ (segment (start 124.46 86.36) (end 124.46 89.535) (width 0.635) (layer Cuivre) (net 32))
+ (segment (start 118.11 78.74) (end 118.11 80.01) (width 0.635) (layer Cuivre) (net 32) (status 800))
+ (segment (start 118.11 80.01) (end 124.46 86.36) (width 0.635) (layer Cuivre) (net 32))
+ (segment (start 124.46 89.535) (end 125.73 90.805) (width 0.635) (layer Cuivre) (net 32))
+ (segment (start 120.65 76.2) (end 120.65 79.375) (width 0.635) (layer Cuivre) (net 33))
+ (segment (start 118.11 75.565) (end 120.015 75.565) (width 0.635) (layer Cuivre) (net 33) (status 800))
+ (segment (start 120.015 75.565) (end 120.65 76.2) (width 0.635) (layer Cuivre) (net 33))
+ (segment (start 127 85.725) (end 127.635 85.725) (width 0.635) (layer Cuivre) (net 33) (status 400))
+ (segment (start 120.65 79.375) (end 127 85.725) (width 0.635) (layer Cuivre) (net 33))
+ (segment (start 117.475 84.455) (end 117.475 88.265) (width 0.635) (layer Cuivre) (net 34) (status 400))
+ (segment (start 113.665 60.96) (end 113.665 80.645) (width 0.635) (layer Cuivre) (net 34))
+ (segment (start 112.395 59.69) (end 113.665 60.96) (width 0.635) (layer Cuivre) (net 34))
+ (segment (start 110.49 59.69) (end 112.395 59.69) (width 0.635) (layer Cuivre) (net 34) (status 800))
+ (segment (start 113.665 80.645) (end 117.475 84.455) (width 0.635) (layer Cuivre) (net 34))
+
+ (zone (net 3) (net_name GND) (layer Cuivre) (tstamp 48F6319A) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.3)
+ (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.635))
+ (polygon
+ (pts
+ (xy 223.52 138.43) (xy 232.41 128.905) (xy 232.41 53.975) (xy 219.71 41.91) (xy 81.28 41.91)
+ (xy 74.295 48.895) (xy 74.295 127.635) (xy 86.36 138.43)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 232.26 128.845876) (xy 223.454817 138.28) (xy 223.2255 138.28) (xy 223.2255 103.505) (xy 223.2255 48.895)
+ (xy 223.216701 48.805266) (xy 223.208853 48.715555) (xy 223.207422 48.710632) (xy 223.206922 48.705524) (xy 223.180869 48.619232)
+ (xy 223.155738 48.53273) (xy 223.153377 48.528175) (xy 223.151895 48.523266) (xy 223.109596 48.443713) (xy 223.068123 48.363704)
+ (xy 223.064922 48.359694) (xy 223.062515 48.355167) (xy 223.005573 48.285349) (xy 222.949346 48.214915) (xy 222.942307 48.207777)
+ (xy 222.942186 48.207629) (xy 222.942048 48.207515) (xy 222.939782 48.205217) (xy 220.399783 45.665217) (xy 220.330119 45.607995)
+ (xy 220.261125 45.550102) (xy 220.256632 45.547632) (xy 220.252666 45.544374) (xy 220.17322 45.501775) (xy 220.09429 45.458383)
+ (xy 220.0894 45.456832) (xy 220.08488 45.454408) (xy 219.998726 45.428068) (xy 219.912818 45.400817) (xy 219.907717 45.400244)
+ (xy 219.902815 45.398746) (xy 219.8132 45.389643) (xy 219.72362 45.379595) (xy 219.713592 45.379525) (xy 219.713405 45.379506)
+ (xy 219.71323 45.379522) (xy 219.71 45.3795) (xy 207.645 45.3795) (xy 176.53 45.3795) (xy 176.440311 45.388293)
+ (xy 176.350555 45.396147) (xy 176.345632 45.397577) (xy 176.340524 45.398078) (xy 176.254232 45.42413) (xy 176.16773 45.449262)
+ (xy 176.163176 45.451622) (xy 176.158266 45.453105) (xy 176.078692 45.495414) (xy 175.998705 45.536877) (xy 175.994697 45.540075)
+ (xy 175.990167 45.542485) (xy 175.920327 45.599444) (xy 175.849915 45.655654) (xy 175.842773 45.662696) (xy 175.842629 45.662814)
+ (xy 175.842518 45.662947) (xy 175.840217 45.665217) (xy 174.570217 46.935217) (xy 174.512995 47.00488) (xy 174.455102 47.073875)
+ (xy 174.452632 47.078367) (xy 174.449374 47.082334) (xy 174.406775 47.161779) (xy 174.363383 47.24071) (xy 174.361832 47.245599)
+ (xy 174.359408 47.25012) (xy 174.333068 47.336273) (xy 174.305817 47.422182) (xy 174.305244 47.427282) (xy 174.303746 47.432185)
+ (xy 174.294643 47.521799) (xy 174.284595 47.61138) (xy 174.284525 47.621407) (xy 174.284506 47.621595) (xy 174.284522 47.621769)
+ (xy 174.2845 47.625) (xy 174.2845 49.3546) (xy 173.798193 49.3546) (xy 173.671069 49.379887) (xy 173.55132 49.429488)
+ (xy 173.44355 49.501498) (xy 173.351898 49.593149) (xy 173.279888 49.70092) (xy 173.230287 49.820668) (xy 173.229524 49.8245)
+ (xy 156.845 49.8245) (xy 156.755311 49.833293) (xy 156.665555 49.841147) (xy 156.660632 49.842577) (xy 156.655524 49.843078)
+ (xy 156.569232 49.86913) (xy 156.48273 49.894262) (xy 156.478176 49.896622) (xy 156.473266 49.898105) (xy 156.393692 49.940414)
+ (xy 156.313705 49.981877) (xy 156.309697 49.985075) (xy 156.305167 49.987485) (xy 156.235327 50.044444) (xy 156.164915 50.100654)
+ (xy 156.157777 50.107692) (xy 156.157629 50.107814) (xy 156.157515 50.107951) (xy 156.155217 50.110218) (xy 151.710217 54.555217)
+ (xy 151.652995 54.62488) (xy 151.595102 54.693875) (xy 151.592632 54.698367) (xy 151.589374 54.702334) (xy 151.546775 54.781779)
+ (xy 151.503383 54.86071) (xy 151.501832 54.865599) (xy 151.499408 54.87012) (xy 151.473068 54.956273) (xy 151.445817 55.042182)
+ (xy 151.445244 55.047282) (xy 151.443746 55.052185) (xy 151.434643 55.141799) (xy 151.424595 55.23138) (xy 151.424525 55.241407)
+ (xy 151.424506 55.241595) (xy 151.424522 55.241769) (xy 151.4245 55.245) (xy 151.4245 57.387714) (xy 151.306953 57.502825)
+ (xy 151.149623 57.7326) (xy 151.03992 57.988557) (xy 150.982021 58.260948) (xy 150.978133 58.539397) (xy 151.028404 58.813299)
+ (xy 151.130918 59.07222) (xy 151.281771 59.306298) (xy 151.475217 59.506617) (xy 151.703887 59.665547) (xy 151.959073 59.777035)
+ (xy 152.231053 59.836834) (xy 152.509468 59.842666) (xy 152.783714 59.794309) (xy 153.043344 59.693605) (xy 153.27847 59.54439)
+ (xy 153.480134 59.352347) (xy 153.640657 59.124791) (xy 153.753924 58.87039) (xy 153.81562 58.598834) (xy 153.820061 58.280762)
+ (xy 153.765971 58.007589) (xy 153.659852 57.750125) (xy 153.505746 57.518176) (xy 153.3755 57.387017) (xy 153.3755 55.649065)
+ (xy 157.249065 51.7755) (xy 173.229524 51.7755) (xy 173.230287 51.779331) (xy 173.279888 51.89908) (xy 173.351898 52.00685)
+ (xy 173.443549 52.098502) (xy 173.55132 52.170512) (xy 173.671068 52.220113) (xy 173.72453 52.230747) (xy 173.621979 52.314386)
+ (xy 173.442166 52.531743) (xy 173.307996 52.779885) (xy 173.224579 53.049362) (xy 173.195092 53.329909) (xy 173.220659 53.610841)
+ (xy 173.300305 53.881456) (xy 173.430998 54.131448) (xy 173.607758 54.351293) (xy 173.823854 54.532619) (xy 173.964748 54.610076)
+ (xy 173.840585 54.676096) (xy 173.621979 54.854386) (xy 173.442166 55.071743) (xy 173.307996 55.319885) (xy 173.224579 55.589362)
+ (xy 173.195092 55.869909) (xy 173.220659 56.150841) (xy 173.300305 56.421456) (xy 173.430998 56.671448) (xy 173.607758 56.891293)
+ (xy 173.823854 57.072619) (xy 173.964748 57.150076) (xy 173.840585 57.216096) (xy 173.621979 57.394386) (xy 173.442166 57.611743)
+ (xy 173.307996 57.859885) (xy 173.224579 58.129362) (xy 173.195092 58.409909) (xy 173.220659 58.690841) (xy 173.300305 58.961456)
+ (xy 173.430998 59.211448) (xy 173.607758 59.431293) (xy 173.823854 59.612619) (xy 173.964748 59.690076) (xy 173.840585 59.756096)
+ (xy 173.621979 59.934386) (xy 173.442166 60.151743) (xy 173.307996 60.399885) (xy 173.224579 60.669362) (xy 173.195092 60.949909)
+ (xy 173.220659 61.230841) (xy 173.300305 61.501456) (xy 173.430998 61.751448) (xy 173.607758 61.971293) (xy 173.823854 62.152619)
+ (xy 173.964748 62.230076) (xy 173.840585 62.296096) (xy 173.621979 62.474386) (xy 173.442166 62.691743) (xy 173.307996 62.939885)
+ (xy 173.224579 63.209362) (xy 173.195092 63.489909) (xy 173.220659 63.770841) (xy 173.300305 64.041456) (xy 173.430998 64.291448)
+ (xy 173.607758 64.511293) (xy 173.823854 64.692619) (xy 173.964748 64.770076) (xy 173.840585 64.836096) (xy 173.621979 65.014386)
+ (xy 173.442166 65.231743) (xy 173.307996 65.479885) (xy 173.224579 65.749362) (xy 173.195092 66.029909) (xy 173.220659 66.310841)
+ (xy 173.300305 66.581456) (xy 173.430998 66.831448) (xy 173.607758 67.051293) (xy 173.823854 67.232619) (xy 173.953561 67.303926)
+ (xy 173.94252 67.308724) (xy 173.708108 67.471252) (xy 173.509908 67.676388) (xy 173.355536 67.91625) (xy 173.258616 68.189975)
+ (xy 173.380499 68.4125) (xy 175.0925 68.4125) (xy 175.0925 68.3925) (xy 175.4275 68.3925) (xy 175.4275 68.4125)
+ (xy 177.139501 68.4125) (xy 177.261384 68.189975) (xy 177.164464 67.91625) (xy 177.010092 67.676388) (xy 176.811892 67.471252)
+ (xy 176.57748 67.308724) (xy 176.566488 67.303948) (xy 176.679415 67.243904) (xy 176.898021 67.065614) (xy 177.077834 66.848257)
+ (xy 177.212004 66.600115) (xy 177.295421 66.330638) (xy 177.324908 66.050091) (xy 177.299341 65.769159) (xy 177.219695 65.498544)
+ (xy 177.089002 65.248552) (xy 176.912242 65.028707) (xy 176.696146 64.847381) (xy 176.555251 64.769923) (xy 176.679415 64.703904)
+ (xy 176.898021 64.525614) (xy 177.077834 64.308257) (xy 177.212004 64.060115) (xy 177.295421 63.790638) (xy 177.324908 63.510091)
+ (xy 177.299341 63.229159) (xy 177.219695 62.958544) (xy 177.089002 62.708552) (xy 176.912242 62.488707) (xy 176.696146 62.307381)
+ (xy 176.555251 62.229923) (xy 176.679415 62.163904) (xy 176.898021 61.985614) (xy 177.077834 61.768257) (xy 177.212004 61.520115)
+ (xy 177.295421 61.250638) (xy 177.324908 60.970091) (xy 177.299341 60.689159) (xy 177.219695 60.418544) (xy 177.089002 60.168552)
+ (xy 176.912242 59.948707) (xy 176.696146 59.767381) (xy 176.555251 59.689923) (xy 176.679415 59.623904) (xy 176.898021 59.445614)
+ (xy 177.077834 59.228257) (xy 177.212004 58.980115) (xy 177.295421 58.710638) (xy 177.324908 58.430091) (xy 177.299341 58.149159)
+ (xy 177.219695 57.878544) (xy 177.089002 57.628552) (xy 176.912242 57.408707) (xy 176.696146 57.227381) (xy 176.555251 57.149923)
+ (xy 176.679415 57.083904) (xy 176.898021 56.905614) (xy 177.077834 56.688257) (xy 177.212004 56.440115) (xy 177.295421 56.170638)
+ (xy 177.324908 55.890091) (xy 177.299341 55.609159) (xy 177.219695 55.338544) (xy 177.089002 55.088552) (xy 176.912242 54.868707)
+ (xy 176.696146 54.687381) (xy 176.555251 54.609923) (xy 176.679415 54.543904) (xy 176.898021 54.365614) (xy 177.077834 54.148257)
+ (xy 177.212004 53.900115) (xy 177.295421 53.630638) (xy 177.324908 53.350091) (xy 177.299341 53.069159) (xy 177.219695 52.798544)
+ (xy 177.089002 52.548552) (xy 176.912242 52.328707) (xy 176.795492 52.230742) (xy 176.848931 52.220113) (xy 176.96868 52.170512)
+ (xy 177.07645 52.098502) (xy 177.168102 52.006851) (xy 177.240112 51.89908) (xy 177.289713 51.779332) (xy 177.315 51.652208)
+ (xy 177.315 51.522593) (xy 177.315 49.947793) (xy 177.289713 49.820669) (xy 177.240112 49.70092) (xy 177.168102 49.59315)
+ (xy 177.076451 49.501498) (xy 176.96868 49.429488) (xy 176.848932 49.379887) (xy 176.721808 49.3546) (xy 176.592193 49.3546)
+ (xy 176.2355 49.3546) (xy 176.2355 48.029066) (xy 176.934066 47.3305) (xy 206.6695 47.3305) (xy 206.6695 49.3546)
+ (xy 206.183193 49.3546) (xy 206.056069 49.379887) (xy 205.93632 49.429488) (xy 205.82855 49.501498) (xy 205.736898 49.593149)
+ (xy 205.664888 49.70092) (xy 205.615287 49.820668) (xy 205.59 49.947792) (xy 205.59 50.077407) (xy 205.59 51.0945)
+ (xy 201.147076 51.0945) (xy 200.975194 50.921413) (xy 200.734003 50.758727) (xy 200.465805 50.645988) (xy 200.180818 50.587488)
+ (xy 199.920234 50.585668) (xy 199.444783 50.110217) (xy 199.375119 50.052995) (xy 199.306125 49.995102) (xy 199.301632 49.992632)
+ (xy 199.297666 49.989374) (xy 199.21822 49.946775) (xy 199.13929 49.903383) (xy 199.1344 49.901832) (xy 199.12988 49.899408)
+ (xy 199.043726 49.873068) (xy 198.957818 49.845817) (xy 198.952717 49.845244) (xy 198.947815 49.843746) (xy 198.8582 49.834643)
+ (xy 198.76862 49.824595) (xy 198.758592 49.824525) (xy 198.758405 49.824506) (xy 198.75823 49.824522) (xy 198.755 49.8245)
+ (xy 192.18102 49.8245) (xy 192.152242 49.788707) (xy 191.936146 49.607381) (xy 191.688947 49.471482) (xy 191.420059 49.386185)
+ (xy 191.139724 49.354741) (xy 191.119543 49.3546) (xy 189.880457 49.3546) (xy 189.599711 49.382127) (xy 189.329658 49.463661)
+ (xy 189.080585 49.596096) (xy 188.861979 49.774386) (xy 188.682166 49.991743) (xy 188.547996 50.239885) (xy 188.464579 50.509362)
+ (xy 188.435092 50.789909) (xy 188.460659 51.070841) (xy 188.540305 51.341456) (xy 188.670998 51.591448) (xy 188.847758 51.811293)
+ (xy 189.063854 51.992619) (xy 189.204748 52.070076) (xy 189.080585 52.136096) (xy 188.861979 52.314386) (xy 188.682166 52.531743)
+ (xy 188.547996 52.779885) (xy 188.464579 53.049362) (xy 188.435092 53.329909) (xy 188.460659 53.610841) (xy 188.540305 53.881456)
+ (xy 188.670998 54.131448) (xy 188.847758 54.351293) (xy 189.063854 54.532619) (xy 189.204748 54.610076) (xy 189.080585 54.676096)
+ (xy 188.861979 54.854386) (xy 188.682166 55.071743) (xy 188.547996 55.319885) (xy 188.464579 55.589362) (xy 188.435092 55.869909)
+ (xy 188.460659 56.150841) (xy 188.540305 56.421456) (xy 188.670998 56.671448) (xy 188.847758 56.891293) (xy 189.063854 57.072619)
+ (xy 189.204748 57.150076) (xy 189.080585 57.216096) (xy 188.861979 57.394386) (xy 188.682166 57.611743) (xy 188.547996 57.859885)
+ (xy 188.464579 58.129362) (xy 188.435092 58.409909) (xy 188.460659 58.690841) (xy 188.540305 58.961456) (xy 188.670998 59.211448)
+ (xy 188.847758 59.431293) (xy 189.063854 59.612619) (xy 189.204748 59.690076) (xy 189.080585 59.756096) (xy 188.861979 59.934386)
+ (xy 188.682166 60.151743) (xy 188.547996 60.399885) (xy 188.464579 60.669362) (xy 188.435092 60.949909) (xy 188.460659 61.230841)
+ (xy 188.540305 61.501456) (xy 188.670998 61.751448) (xy 188.847758 61.971293) (xy 189.063854 62.152619) (xy 189.204748 62.230076)
+ (xy 189.080585 62.296096) (xy 188.861979 62.474386) (xy 188.682166 62.691743) (xy 188.547996 62.939885) (xy 188.464579 63.209362)
+ (xy 188.435092 63.489909) (xy 188.460659 63.770841) (xy 188.540305 64.041456) (xy 188.670998 64.291448) (xy 188.847758 64.511293)
+ (xy 189.063854 64.692619) (xy 189.204748 64.770076) (xy 189.080585 64.836096) (xy 188.861979 65.014386) (xy 188.682166 65.231743)
+ (xy 188.547996 65.479885) (xy 188.464579 65.749362) (xy 188.435092 66.029909) (xy 188.460659 66.310841) (xy 188.540305 66.581456)
+ (xy 188.670998 66.831448) (xy 188.847758 67.051293) (xy 189.063854 67.232619) (xy 189.204748 67.310076) (xy 189.080585 67.376096)
+ (xy 188.861979 67.554386) (xy 188.682166 67.771743) (xy 188.547996 68.019885) (xy 188.464579 68.289362) (xy 188.435092 68.569909)
+ (xy 188.460659 68.850841) (xy 188.540305 69.121456) (xy 188.670998 69.371448) (xy 188.847758 69.591293) (xy 189.063854 69.772619)
+ (xy 189.204748 69.850076) (xy 189.080585 69.916096) (xy 189.034109 69.954) (xy 185.42 69.954) (xy 185.312811 69.964509)
+ (xy 185.205513 69.973897) (xy 185.199624 69.975607) (xy 185.193523 69.976206) (xy 185.090383 70.007345) (xy 184.986985 70.037386)
+ (xy 184.981544 70.040205) (xy 184.975672 70.041979) (xy 184.880546 70.092558) (xy 184.784951 70.14211) (xy 184.780159 70.145935)
+ (xy 184.774745 70.148814) (xy 184.691292 70.216876) (xy 184.607106 70.284082) (xy 184.598567 70.292502) (xy 184.598397 70.292641)
+ (xy 184.598266 70.292798) (xy 184.595514 70.295513) (xy 179.857026 75.034) (xy 176.727869 75.034) (xy 176.696146 75.007381)
+ (xy 176.555251 74.929923) (xy 176.679415 74.863904) (xy 176.898021 74.685614) (xy 177.077834 74.468257) (xy 177.212004 74.220115)
+ (xy 177.295421 73.950638) (xy 177.324908 73.670091) (xy 177.299341 73.389159) (xy 177.219695 73.118544) (xy 177.089002 72.868552)
+ (xy 176.912242 72.648707) (xy 176.696146 72.467381) (xy 176.555251 72.389923) (xy 176.679415 72.323904) (xy 176.898021 72.145614)
+ (xy 177.077834 71.928257) (xy 177.212004 71.680115) (xy 177.295421 71.410638) (xy 177.324908 71.130091) (xy 177.299341 70.849159)
+ (xy 177.219695 70.578544) (xy 177.089002 70.328552) (xy 176.912242 70.108707) (xy 176.696146 69.927381) (xy 176.566438 69.856073)
+ (xy 176.57748 69.851276) (xy 176.811892 69.688748) (xy 177.010092 69.483612) (xy 177.164464 69.24375) (xy 177.261384 68.970025)
+ (xy 177.139501 68.7475) (xy 175.4275 68.7475) (xy 175.4275 68.7675) (xy 175.0925 68.7675) (xy 175.0925 68.7475)
+ (xy 173.380499 68.7475) (xy 173.258616 68.970025) (xy 173.355536 69.24375) (xy 173.509908 69.483612) (xy 173.708108 69.688748)
+ (xy 173.94252 69.851276) (xy 173.953511 69.856051) (xy 173.840585 69.916096) (xy 173.621979 70.094386) (xy 173.442166 70.311743)
+ (xy 173.307996 70.559885) (xy 173.224579 70.829362) (xy 173.195092 71.109909) (xy 173.220659 71.390841) (xy 173.300305 71.661456)
+ (xy 173.430998 71.911448) (xy 173.607758 72.131293) (xy 173.823854 72.312619) (xy 173.964748 72.390076) (xy 173.840585 72.456096)
+ (xy 173.621979 72.634386) (xy 173.442166 72.851743) (xy 173.307996 73.099885) (xy 173.224579 73.369362) (xy 173.195092 73.649909)
+ (xy 173.220659 73.930841) (xy 173.300305 74.201456) (xy 173.430998 74.451448) (xy 173.607758 74.671293) (xy 173.823854 74.852619)
+ (xy 173.964748 74.930076) (xy 173.840585 74.996096) (xy 173.621979 75.174386) (xy 173.442166 75.391743) (xy 173.307996 75.639885)
+ (xy 173.224579 75.909362) (xy 173.195092 76.189909) (xy 173.220659 76.470841) (xy 173.300305 76.741456) (xy 173.430998 76.991448)
+ (xy 173.607758 77.211293) (xy 173.823854 77.392619) (xy 173.953561 77.463926) (xy 173.94252 77.468724) (xy 173.708108 77.631252)
+ (xy 173.509908 77.836388) (xy 173.355536 78.07625) (xy 173.258616 78.349975) (xy 173.380499 78.5725) (xy 175.0925 78.5725)
+ (xy 175.0925 78.5525) (xy 175.4275 78.5525) (xy 175.4275 78.5725) (xy 177.139501 78.5725) (xy 177.261384 78.349975)
+ (xy 177.164464 78.07625) (xy 177.010092 77.836388) (xy 176.811892 77.631252) (xy 176.57748 77.468724) (xy 176.566488 77.463948)
+ (xy 176.679415 77.403904) (xy 176.72589 77.366) (xy 180.34 77.366) (xy 180.447188 77.35549) (xy 180.554487 77.346103)
+ (xy 180.560375 77.344392) (xy 180.566477 77.343794) (xy 180.669616 77.312654) (xy 180.773015 77.282614) (xy 180.778455 77.279794)
+ (xy 180.784328 77.278021) (xy 180.879453 77.227441) (xy 180.975049 77.17789) (xy 180.97984 77.174064) (xy 180.985255 77.171186)
+ (xy 181.068707 77.103123) (xy 181.152894 77.035918) (xy 181.161436 77.027494) (xy 181.161603 77.027359) (xy 181.16173 77.027205)
+ (xy 181.164487 77.024487) (xy 185.902973 72.286) (xy 189.03213 72.286) (xy 189.063854 72.312619) (xy 189.193561 72.383926)
+ (xy 189.18252 72.388724) (xy 188.948108 72.551252) (xy 188.749908 72.756388) (xy 188.595536 72.99625) (xy 188.498616 73.269975)
+ (xy 188.620499 73.4925) (xy 190.3325 73.4925) (xy 190.3325 73.4725) (xy 190.6675 73.4725) (xy 190.6675 73.4925)
+ (xy 192.379501 73.4925) (xy 192.501384 73.269975) (xy 192.404464 72.99625) (xy 192.250092 72.756388) (xy 192.051892 72.551252)
+ (xy 191.81748 72.388724) (xy 191.806488 72.383948) (xy 191.919415 72.323904) (xy 191.96589 72.286) (xy 198.055701 72.286)
+ (xy 198.090016 72.309849) (xy 198.275469 72.390871) (xy 198.129649 72.448852) (xy 198.095394 72.467162) (xy 198.034245 72.702364)
+ (xy 198.755 73.423119) (xy 199.475755 72.702364) (xy 199.414606 72.467162) (xy 199.2339 72.389276) (xy 199.369575 72.336652)
+ (xy 199.594186 72.194109) (xy 199.786833 72.010654) (xy 199.940177 71.793274) (xy 200.048379 71.55025) (xy 200.107316 71.290837)
+ (xy 200.111559 70.986988) (xy 200.059888 70.726031) (xy 199.958514 70.48008) (xy 199.921 70.423616) (xy 199.921 68.427973)
+ (xy 202.412973 65.936) (xy 205.589962 65.936) (xy 205.580092 66.029909) (xy 205.605659 66.310841) (xy 205.685305 66.581456)
+ (xy 205.815998 66.831448) (xy 205.992758 67.051293) (xy 206.208854 67.232619) (xy 206.338561 67.303926) (xy 206.32752 67.308724)
+ (xy 206.093108 67.471252) (xy 205.894908 67.676388) (xy 205.740536 67.91625) (xy 205.643616 68.189975) (xy 205.765499 68.4125)
+ (xy 207.4775 68.4125) (xy 207.4775 68.3925) (xy 207.8125 68.3925) (xy 207.8125 68.4125) (xy 209.524501 68.4125)
+ (xy 209.646384 68.189975) (xy 209.549464 67.91625) (xy 209.395092 67.676388) (xy 209.196892 67.471252) (xy 208.96248 67.308724)
+ (xy 208.951488 67.303948) (xy 209.064415 67.243904) (xy 209.283021 67.065614) (xy 209.462834 66.848257) (xy 209.597004 66.600115)
+ (xy 209.680421 66.330638) (xy 209.709908 66.050091) (xy 209.689115 65.821619) (xy 209.725664 65.841712) (xy 209.942575 65.91052)
+ (xy 210.16872 65.935886) (xy 210.185 65.936) (xy 210.337026 65.936) (xy 211.559 67.157973) (xy 211.559 70.485)
+ (xy 211.569509 70.592188) (xy 211.578897 70.699487) (xy 211.580607 70.705375) (xy 211.581206 70.711477) (xy 211.612345 70.814616)
+ (xy 211.642386 70.918015) (xy 211.645205 70.923455) (xy 211.646979 70.929328) (xy 211.697558 71.024453) (xy 211.74711 71.120049)
+ (xy 211.750935 71.12484) (xy 211.753814 71.130255) (xy 211.821876 71.213707) (xy 211.889082 71.297894) (xy 211.897505 71.306436)
+ (xy 211.897641 71.306603) (xy 211.897794 71.30673) (xy 211.900513 71.309487) (xy 212.535514 71.944487) (xy 212.618766 72.012871)
+ (xy 212.701248 72.082082) (xy 212.706619 72.085035) (xy 212.711359 72.088928) (xy 212.806316 72.139844) (xy 212.900664 72.191712)
+ (xy 212.906505 72.193564) (xy 212.911912 72.196464) (xy 213.014975 72.227973) (xy 213.117575 72.26052) (xy 213.123664 72.261202)
+ (xy 213.129532 72.262997) (xy 213.236704 72.273882) (xy 213.34372 72.285886) (xy 213.355713 72.285969) (xy 213.35593 72.285992)
+ (xy 213.356131 72.285972) (xy 213.36 72.286) (xy 213.79713 72.286) (xy 213.828854 72.312619) (xy 213.958561 72.383926)
+ (xy 213.94752 72.388724) (xy 213.713108 72.551252) (xy 213.514908 72.756388) (xy 213.360536 72.99625) (xy 213.263616 73.269975)
+ (xy 213.385499 73.4925) (xy 215.0975 73.4925) (xy 215.0975 73.4725) (xy 215.4325 73.4725) (xy 215.4325 73.4925)
+ (xy 217.144501 73.4925) (xy 217.266384 73.269975) (xy 217.169464 72.99625) (xy 217.015092 72.756388) (xy 216.816892 72.551252)
+ (xy 216.58248 72.388724) (xy 216.571488 72.383948) (xy 216.684415 72.323904) (xy 216.73089 72.286) (xy 219.179 72.286)
+ (xy 219.179 100.482026) (xy 218.592026 101.069) (xy 217.329908 101.069) (xy 217.329908 83.830091) (xy 217.304341 83.549159)
+ (xy 217.224695 83.278544) (xy 217.094002 83.028552) (xy 216.917242 82.808707) (xy 216.701146 82.627381) (xy 216.560251 82.549923)
+ (xy 216.684415 82.483904) (xy 216.903021 82.305614) (xy 217.082834 82.088257) (xy 217.217004 81.840115) (xy 217.300421 81.570638)
+ (xy 217.329908 81.290091) (xy 217.304341 81.009159) (xy 217.224695 80.738544) (xy 217.094002 80.488552) (xy 216.917242 80.268707)
+ (xy 216.701146 80.087381) (xy 216.560251 80.009923) (xy 216.684415 79.943904) (xy 216.903021 79.765614) (xy 217.082834 79.548257)
+ (xy 217.217004 79.300115) (xy 217.300421 79.030638) (xy 217.329908 78.750091) (xy 217.304341 78.469159) (xy 217.224695 78.198544)
+ (xy 217.094002 77.948552) (xy 216.917242 77.728707) (xy 216.701146 77.547381) (xy 216.560251 77.469923) (xy 216.684415 77.403904)
+ (xy 216.903021 77.225614) (xy 217.082834 77.008257) (xy 217.217004 76.760115) (xy 217.300421 76.490638) (xy 217.329908 76.210091)
+ (xy 217.304341 75.929159) (xy 217.224695 75.658544) (xy 217.094002 75.408552) (xy 216.917242 75.188707) (xy 216.701146 75.007381)
+ (xy 216.571438 74.936073) (xy 216.58248 74.931276) (xy 216.816892 74.768748) (xy 217.015092 74.563612) (xy 217.169464 74.32375)
+ (xy 217.266384 74.050025) (xy 217.144501 73.8275) (xy 215.4325 73.8275) (xy 215.4325 73.8475) (xy 215.0975 73.8475)
+ (xy 215.0975 73.8275) (xy 213.385499 73.8275) (xy 213.263616 74.050025) (xy 213.360536 74.32375) (xy 213.514908 74.563612)
+ (xy 213.713108 74.768748) (xy 213.94752 74.931276) (xy 213.958511 74.936051) (xy 213.845585 74.996096) (xy 213.626979 75.174386)
+ (xy 213.447166 75.391743) (xy 213.312996 75.639885) (xy 213.229579 75.909362) (xy 213.200092 76.189909) (xy 213.225659 76.470841)
+ (xy 213.305305 76.741456) (xy 213.435998 76.991448) (xy 213.612758 77.211293) (xy 213.828854 77.392619) (xy 213.969748 77.470076)
+ (xy 213.845585 77.536096) (xy 213.626979 77.714386) (xy 213.447166 77.931743) (xy 213.312996 78.179885) (xy 213.229579 78.449362)
+ (xy 213.200092 78.729909) (xy 213.225659 79.010841) (xy 213.305305 79.281456) (xy 213.435998 79.531448) (xy 213.612758 79.751293)
+ (xy 213.828854 79.932619) (xy 213.969748 80.010076) (xy 213.845585 80.076096) (xy 213.626979 80.254386) (xy 213.447166 80.471743)
+ (xy 213.312996 80.719885) (xy 213.229579 80.989362) (xy 213.200092 81.269909) (xy 213.225659 81.550841) (xy 213.305305 81.821456)
+ (xy 213.435998 82.071448) (xy 213.612758 82.291293) (xy 213.828854 82.472619) (xy 213.969748 82.550076) (xy 213.845585 82.616096)
+ (xy 213.626979 82.794386) (xy 213.447166 83.011743) (xy 213.312996 83.259885) (xy 213.229579 83.529362) (xy 213.200092 83.809909)
+ (xy 213.225659 84.090841) (xy 213.305305 84.361456) (xy 213.435998 84.611448) (xy 213.612758 84.831293) (xy 213.828854 85.012619)
+ (xy 214.076053 85.148518) (xy 214.344941 85.233815) (xy 214.625276 85.265259) (xy 214.645457 85.2654) (xy 215.884543 85.2654)
+ (xy 216.165289 85.237873) (xy 216.435342 85.156339) (xy 216.684415 85.023904) (xy 216.903021 84.845614) (xy 217.082834 84.628257)
+ (xy 217.217004 84.380115) (xy 217.300421 84.110638) (xy 217.329908 83.830091) (xy 217.329908 101.069) (xy 209.709908 101.069)
+ (xy 209.709908 83.830091) (xy 209.684341 83.549159) (xy 209.604695 83.278544) (xy 209.474002 83.028552) (xy 209.297242 82.808707)
+ (xy 209.081146 82.627381) (xy 208.940251 82.549923) (xy 209.064415 82.483904) (xy 209.283021 82.305614) (xy 209.462834 82.088257)
+ (xy 209.597004 81.840115) (xy 209.680421 81.570638) (xy 209.709908 81.290091) (xy 209.684341 81.009159) (xy 209.604695 80.738544)
+ (xy 209.474002 80.488552) (xy 209.297242 80.268707) (xy 209.081146 80.087381) (xy 208.940251 80.009923) (xy 209.064415 79.943904)
+ (xy 209.283021 79.765614) (xy 209.462834 79.548257) (xy 209.597004 79.300115) (xy 209.680421 79.030638) (xy 209.709908 78.750091)
+ (xy 209.684341 78.469159) (xy 209.604695 78.198544) (xy 209.474002 77.948552) (xy 209.297242 77.728707) (xy 209.081146 77.547381)
+ (xy 208.940251 77.469923) (xy 209.064415 77.403904) (xy 209.283021 77.225614) (xy 209.462834 77.008257) (xy 209.597004 76.760115)
+ (xy 209.680421 76.490638) (xy 209.709908 76.210091) (xy 209.684341 75.929159) (xy 209.604695 75.658544) (xy 209.474002 75.408552)
+ (xy 209.297242 75.188707) (xy 209.081146 75.007381) (xy 208.940251 74.929923) (xy 209.064415 74.863904) (xy 209.283021 74.685614)
+ (xy 209.462834 74.468257) (xy 209.597004 74.220115) (xy 209.680421 73.950638) (xy 209.709908 73.670091) (xy 209.684341 73.389159)
+ (xy 209.604695 73.118544) (xy 209.474002 72.868552) (xy 209.297242 72.648707) (xy 209.081146 72.467381) (xy 208.940251 72.389923)
+ (xy 209.064415 72.323904) (xy 209.283021 72.145614) (xy 209.462834 71.928257) (xy 209.597004 71.680115) (xy 209.680421 71.410638)
+ (xy 209.709908 71.130091) (xy 209.684341 70.849159) (xy 209.604695 70.578544) (xy 209.474002 70.328552) (xy 209.297242 70.108707)
+ (xy 209.081146 69.927381) (xy 208.951438 69.856073) (xy 208.96248 69.851276) (xy 209.196892 69.688748) (xy 209.395092 69.483612)
+ (xy 209.549464 69.24375) (xy 209.646384 68.970025) (xy 209.524501 68.7475) (xy 207.8125 68.7475) (xy 207.8125 68.7675)
+ (xy 207.4775 68.7675) (xy 207.4775 68.7475) (xy 205.765499 68.7475) (xy 205.643616 68.970025) (xy 205.740536 69.24375)
+ (xy 205.894908 69.483612) (xy 206.093108 69.688748) (xy 206.32752 69.851276) (xy 206.338511 69.856051) (xy 206.225585 69.916096)
+ (xy 206.006979 70.094386) (xy 205.827166 70.311743) (xy 205.692996 70.559885) (xy 205.609579 70.829362) (xy 205.580092 71.109909)
+ (xy 205.605659 71.390841) (xy 205.685305 71.661456) (xy 205.815998 71.911448) (xy 205.992758 72.131293) (xy 206.208854 72.312619)
+ (xy 206.349748 72.390076) (xy 206.225585 72.456096) (xy 206.006979 72.634386) (xy 205.827166 72.851743) (xy 205.692996 73.099885)
+ (xy 205.609579 73.369362) (xy 205.580092 73.649909) (xy 205.605659 73.930841) (xy 205.685305 74.201456) (xy 205.815998 74.451448)
+ (xy 205.992758 74.671293) (xy 206.208854 74.852619) (xy 206.349748 74.930076) (xy 206.225585 74.996096) (xy 206.006979 75.174386)
+ (xy 205.827166 75.391743) (xy 205.692996 75.639885) (xy 205.609579 75.909362) (xy 205.580092 76.189909) (xy 205.605659 76.470841)
+ (xy 205.685305 76.741456) (xy 205.815998 76.991448) (xy 205.992758 77.211293) (xy 206.208854 77.392619) (xy 206.349748 77.470076)
+ (xy 206.225585 77.536096) (xy 206.006979 77.714386) (xy 205.827166 77.931743) (xy 205.692996 78.179885) (xy 205.609579 78.449362)
+ (xy 205.580092 78.729909) (xy 205.605659 79.010841) (xy 205.685305 79.281456) (xy 205.815998 79.531448) (xy 205.992758 79.751293)
+ (xy 206.208854 79.932619) (xy 206.349748 80.010076) (xy 206.225585 80.076096) (xy 206.006979 80.254386) (xy 205.827166 80.471743)
+ (xy 205.692996 80.719885) (xy 205.609579 80.989362) (xy 205.580092 81.269909) (xy 205.605659 81.550841) (xy 205.685305 81.821456)
+ (xy 205.815998 82.071448) (xy 205.992758 82.291293) (xy 206.208854 82.472619) (xy 206.349748 82.550076) (xy 206.225585 82.616096)
+ (xy 206.006979 82.794386) (xy 205.827166 83.011743) (xy 205.692996 83.259885) (xy 205.609579 83.529362) (xy 205.580092 83.809909)
+ (xy 205.605659 84.090841) (xy 205.685305 84.361456) (xy 205.815998 84.611448) (xy 205.992758 84.831293) (xy 206.208854 85.012619)
+ (xy 206.456053 85.148518) (xy 206.724941 85.233815) (xy 207.005276 85.265259) (xy 207.025457 85.2654) (xy 208.264543 85.2654)
+ (xy 208.545289 85.237873) (xy 208.815342 85.156339) (xy 209.064415 85.023904) (xy 209.283021 84.845614) (xy 209.462834 84.628257)
+ (xy 209.597004 84.380115) (xy 209.680421 84.110638) (xy 209.709908 83.830091) (xy 209.709908 101.069) (xy 206.375 101.069)
+ (xy 206.267811 101.079509) (xy 206.160513 101.088897) (xy 206.154624 101.090607) (xy 206.148523 101.091206) (xy 206.045383 101.122345)
+ (xy 205.941985 101.152386) (xy 205.936544 101.155205) (xy 205.930672 101.156979) (xy 205.835546 101.207558) (xy 205.739951 101.25711)
+ (xy 205.735159 101.260935) (xy 205.729745 101.263814) (xy 205.646292 101.331876) (xy 205.562106 101.399082) (xy 205.553567 101.407502)
+ (xy 205.553397 101.407641) (xy 205.553266 101.407798) (xy 205.550513 101.410514) (xy 202.375513 104.585513) (xy 202.307107 104.668791)
+ (xy 202.237918 104.751248) (xy 202.234964 104.756619) (xy 202.231072 104.761359) (xy 202.180164 104.8563) (xy 202.128288 104.950664)
+ (xy 202.126434 104.956507) (xy 202.123537 104.961911) (xy 202.092049 105.064902) (xy 202.05948 105.167575) (xy 202.058796 105.173669)
+ (xy 202.057004 105.179532) (xy 202.046123 105.286654) (xy 202.034114 105.39372) (xy 202.03403 105.405713) (xy 202.034008 105.40593)
+ (xy 202.034027 105.406131) (xy 202.034 105.41) (xy 202.034 111.229) (xy 201.357255 111.229) (xy 201.308306 111.195983)
+ (xy 201.063069 111.092894) (xy 200.802479 111.039403) (xy 200.536462 111.037546) (xy 200.275151 111.087394) (xy 200.113266 111.152799)
+ (xy 200.113266 76.085737) (xy 200.113266 73.545737) (xy 200.064876 73.282948) (xy 199.966148 73.034649) (xy 199.947838 73.000394)
+ (xy 199.712636 72.939245) (xy 198.991881 73.66) (xy 199.712636 74.380755) (xy 199.947838 74.319606) (xy 200.053601 74.074221)
+ (xy 200.109459 73.812917) (xy 200.113266 73.545737) (xy 200.113266 76.085737) (xy 200.064876 75.822948) (xy 199.966148 75.574649)
+ (xy 199.947838 75.540394) (xy 199.712636 75.479245) (xy 199.475755 75.716126) (xy 199.475755 75.242364) (xy 199.414606 75.007162)
+ (xy 199.234024 74.929329) (xy 199.380351 74.871148) (xy 199.414606 74.852838) (xy 199.475755 74.617636) (xy 198.755 73.896881)
+ (xy 198.518119 74.133762) (xy 198.518119 73.66) (xy 197.797364 72.939245) (xy 197.562162 73.000394) (xy 197.456399 73.245779)
+ (xy 197.400541 73.507083) (xy 197.396734 73.774263) (xy 197.445124 74.037052) (xy 197.543852 74.285351) (xy 197.562162 74.319606)
+ (xy 197.797364 74.380755) (xy 198.518119 73.66) (xy 198.518119 74.133762) (xy 198.034245 74.617636) (xy 198.095394 74.852838)
+ (xy 198.275975 74.93067) (xy 198.129649 74.988852) (xy 198.095394 75.007162) (xy 198.034245 75.242364) (xy 198.755 75.963119)
+ (xy 199.475755 75.242364) (xy 199.475755 75.716126) (xy 198.991881 76.2) (xy 199.712636 76.920755) (xy 199.947838 76.859606)
+ (xy 200.053601 76.614221) (xy 200.109459 76.352917) (xy 200.113266 76.085737) (xy 200.113266 111.152799) (xy 200.028498 111.187048)
+ (xy 199.805899 111.332712) (xy 199.615832 111.518839) (xy 199.475755 111.723417) (xy 199.475755 77.157636) (xy 198.755 76.436881)
+ (xy 198.518119 76.673762) (xy 198.518119 76.2) (xy 197.797364 75.479245) (xy 197.562162 75.540394) (xy 197.456399 75.785779)
+ (xy 197.400541 76.047083) (xy 197.396734 76.314263) (xy 197.445124 76.577052) (xy 197.543852 76.825351) (xy 197.562162 76.859606)
+ (xy 197.797364 76.920755) (xy 198.518119 76.2) (xy 198.518119 76.673762) (xy 198.034245 77.157636) (xy 198.095394 77.392838)
+ (xy 198.340779 77.498601) (xy 198.602083 77.554459) (xy 198.869263 77.558266) (xy 199.132052 77.509876) (xy 199.380351 77.411148)
+ (xy 199.414606 77.392838) (xy 199.475755 77.157636) (xy 199.475755 111.723417) (xy 199.465538 111.738339) (xy 199.36074 111.98285)
+ (xy 199.305431 112.243061) (xy 199.301716 112.509058) (xy 199.349739 112.770711) (xy 199.447669 113.018054) (xy 199.591776 113.241664)
+ (xy 199.776571 113.433025) (xy 199.995016 113.584849) (xy 200.180469 113.665871) (xy 200.034649 113.723852) (xy 200.000394 113.742162)
+ (xy 199.939245 113.977364) (xy 200.66 114.698119) (xy 201.380755 113.977364) (xy 201.319606 113.742162) (xy 201.1389 113.664276)
+ (xy 201.274575 113.611652) (xy 201.354389 113.561) (xy 202.034 113.561) (xy 202.034 115.57) (xy 202.056206 115.796477)
+ (xy 202.121979 116.014328) (xy 202.228814 116.215255) (xy 202.372641 116.391603) (xy 202.547981 116.536658) (xy 202.748157 116.644892)
+ (xy 202.961308 116.710874) (xy 203.780217 117.529783) (xy 203.927334 117.650626) (xy 204.095119 117.740592) (xy 204.277185 117.796254)
+ (xy 204.466595 117.815494) (xy 204.656134 117.797577) (xy 204.838584 117.743187) (xy 204.894132 117.7139) (xy 205.899767 117.7139)
+ (xy 205.897616 117.719975) (xy 206.019499 117.9425) (xy 207.4775 117.9425) (xy 207.4775 117.9225) (xy 207.8125 117.9225)
+ (xy 207.8125 117.9425) (xy 207.8325 117.9425) (xy 207.8325 118.2775) (xy 207.8125 118.2775) (xy 207.8125 118.2975)
+ (xy 207.4775 118.2975) (xy 207.4775 118.2775) (xy 206.019499 118.2775) (xy 205.897616 118.500025) (xy 205.899767 118.5061)
+ (xy 202.018266 118.5061) (xy 202.018266 117.360737) (xy 202.018266 114.820737) (xy 201.969876 114.557948) (xy 201.871148 114.309649)
+ (xy 201.852838 114.275394) (xy 201.617636 114.214245) (xy 200.896881 114.935) (xy 201.617636 115.655755) (xy 201.852838 115.594606)
+ (xy 201.958601 115.349221) (xy 202.014459 115.087917) (xy 202.018266 114.820737) (xy 202.018266 117.360737) (xy 201.969876 117.097948)
+ (xy 201.871148 116.849649) (xy 201.852838 116.815394) (xy 201.617636 116.754245) (xy 201.380755 116.991126) (xy 201.380755 116.517364)
+ (xy 201.319606 116.282162) (xy 201.139024 116.204329) (xy 201.285351 116.146148) (xy 201.319606 116.127838) (xy 201.380755 115.892636)
+ (xy 200.66 115.171881) (xy 200.423119 115.408762) (xy 200.423119 114.935) (xy 199.702364 114.214245) (xy 199.467162 114.275394)
+ (xy 199.361399 114.520779) (xy 199.305541 114.782083) (xy 199.301734 115.049263) (xy 199.350124 115.312052) (xy 199.448852 115.560351)
+ (xy 199.467162 115.594606) (xy 199.702364 115.655755) (xy 200.423119 114.935) (xy 200.423119 115.408762) (xy 199.939245 115.892636)
+ (xy 200.000394 116.127838) (xy 200.180975 116.20567) (xy 200.034649 116.263852) (xy 200.000394 116.282162) (xy 199.939245 116.517364)
+ (xy 200.66 117.238119) (xy 201.380755 116.517364) (xy 201.380755 116.991126) (xy 200.896881 117.475) (xy 201.617636 118.195755)
+ (xy 201.852838 118.134606) (xy 201.958601 117.889221) (xy 202.014459 117.627917) (xy 202.018266 117.360737) (xy 202.018266 118.5061)
+ (xy 201.361655 118.5061) (xy 201.380755 118.432636) (xy 200.66 117.711881) (xy 200.423119 117.948762) (xy 200.423119 117.475)
+ (xy 199.702364 116.754245) (xy 199.467162 116.815394) (xy 199.361399 117.060779) (xy 199.305541 117.322083) (xy 199.301734 117.589263)
+ (xy 199.350124 117.852052) (xy 199.448852 118.100351) (xy 199.467162 118.134606) (xy 199.702364 118.195755) (xy 200.423119 117.475)
+ (xy 200.423119 117.948762) (xy 199.939245 118.432636) (xy 199.958344 118.5061) (xy 198.883842 118.5061) (xy 198.778752 118.417918)
+ (xy 198.579336 118.308288) (xy 198.362425 118.23948) (xy 198.208266 118.222188) (xy 198.13628 118.214114) (xy 198.12 118.214)
+ (xy 197.825883 118.214) (xy 197.807637 118.195754) (xy 198.042838 118.134606) (xy 198.148601 117.889221) (xy 198.204459 117.627917)
+ (xy 198.208266 117.360737) (xy 198.208266 114.820737) (xy 198.206559 114.811466) (xy 198.206559 112.261988) (xy 198.154888 112.001031)
+ (xy 198.053514 111.75508) (xy 198.016 111.698616) (xy 198.016 106.68) (xy 198.00549 106.572811) (xy 197.996103 106.465513)
+ (xy 197.994392 106.459624) (xy 197.993794 106.453523) (xy 197.962668 106.350429) (xy 197.932615 106.246985) (xy 197.929792 106.24154)
+ (xy 197.928021 106.235672) (xy 197.87746 106.140582) (xy 197.82789 106.044951) (xy 197.824064 106.040159) (xy 197.821186 106.034745)
+ (xy 197.753123 105.951292) (xy 197.685918 105.867106) (xy 197.677497 105.858567) (xy 197.677359 105.858397) (xy 197.677201 105.858266)
+ (xy 197.674487 105.855514) (xy 195.769487 103.950513) (xy 195.686208 103.882107) (xy 195.603752 103.812918) (xy 195.59838 103.809964)
+ (xy 195.593641 103.806072) (xy 195.498699 103.755164) (xy 195.404336 103.703288) (xy 195.398492 103.701434) (xy 195.393089 103.698537)
+ (xy 195.290097 103.667049) (xy 195.187425 103.63448) (xy 195.18133 103.633796) (xy 195.175468 103.632004) (xy 195.068345 103.621123)
+ (xy 194.96128 103.609114) (xy 194.949286 103.60903) (xy 194.94907 103.609008) (xy 194.948868 103.609027) (xy 194.945 103.609)
+ (xy 192.564908 103.609) (xy 192.564908 99.070091) (xy 192.539341 98.789159) (xy 192.459695 98.518544) (xy 192.329002 98.268552)
+ (xy 192.152242 98.048707) (xy 191.936146 97.867381) (xy 191.795251 97.789923) (xy 191.919415 97.723904) (xy 192.138021 97.545614)
+ (xy 192.317834 97.328257) (xy 192.452004 97.080115) (xy 192.535421 96.810638) (xy 192.564908 96.530091) (xy 192.539341 96.249159)
+ (xy 192.459695 95.978544) (xy 192.329002 95.728552) (xy 192.152242 95.508707) (xy 191.936146 95.327381) (xy 191.795251 95.249923)
+ (xy 191.919415 95.183904) (xy 192.138021 95.005614) (xy 192.317834 94.788257) (xy 192.452004 94.540115) (xy 192.535421 94.270638)
+ (xy 192.564908 93.990091) (xy 192.539341 93.709159) (xy 192.459695 93.438544) (xy 192.329002 93.188552) (xy 192.152242 92.968707)
+ (xy 191.936146 92.787381) (xy 191.795251 92.709923) (xy 191.919415 92.643904) (xy 192.138021 92.465614) (xy 192.317834 92.248257)
+ (xy 192.452004 92.000115) (xy 192.535421 91.730638) (xy 192.564908 91.450091) (xy 192.539341 91.169159) (xy 192.459695 90.898544)
+ (xy 192.329002 90.648552) (xy 192.152242 90.428707) (xy 191.936146 90.247381) (xy 191.795251 90.169923) (xy 191.919415 90.103904)
+ (xy 192.138021 89.925614) (xy 192.317834 89.708257) (xy 192.452004 89.460115) (xy 192.535421 89.190638) (xy 192.564908 88.910091)
+ (xy 192.539341 88.629159) (xy 192.459695 88.358544) (xy 192.329002 88.108552) (xy 192.152242 87.888707) (xy 191.936146 87.707381)
+ (xy 191.795251 87.629923) (xy 191.919415 87.563904) (xy 192.138021 87.385614) (xy 192.317834 87.168257) (xy 192.452004 86.920115)
+ (xy 192.535421 86.650638) (xy 192.564908 86.370091) (xy 192.539341 86.089159) (xy 192.459695 85.818544) (xy 192.329002 85.568552)
+ (xy 192.152242 85.348707) (xy 191.936146 85.167381) (xy 191.795251 85.089923) (xy 191.919415 85.023904) (xy 192.138021 84.845614)
+ (xy 192.317834 84.628257) (xy 192.452004 84.380115) (xy 192.535421 84.110638) (xy 192.564908 83.830091) (xy 192.539341 83.549159)
+ (xy 192.459695 83.278544) (xy 192.329002 83.028552) (xy 192.152242 82.808707) (xy 191.936146 82.627381) (xy 191.795251 82.549923)
+ (xy 191.919415 82.483904) (xy 192.138021 82.305614) (xy 192.317834 82.088257) (xy 192.452004 81.840115) (xy 192.535421 81.570638)
+ (xy 192.564908 81.290091) (xy 192.539341 81.009159) (xy 192.459695 80.738544) (xy 192.329002 80.488552) (xy 192.152242 80.268707)
+ (xy 191.936146 80.087381) (xy 191.795251 80.009923) (xy 191.919415 79.943904) (xy 192.138021 79.765614) (xy 192.317834 79.548257)
+ (xy 192.452004 79.300115) (xy 192.535421 79.030638) (xy 192.564908 78.750091) (xy 192.539341 78.469159) (xy 192.459695 78.198544)
+ (xy 192.329002 77.948552) (xy 192.152242 77.728707) (xy 191.936146 77.547381) (xy 191.795251 77.469923) (xy 191.919415 77.403904)
+ (xy 192.138021 77.225614) (xy 192.317834 77.008257) (xy 192.452004 76.760115) (xy 192.535421 76.490638) (xy 192.564908 76.210091)
+ (xy 192.539341 75.929159) (xy 192.459695 75.658544) (xy 192.329002 75.408552) (xy 192.152242 75.188707) (xy 191.936146 75.007381)
+ (xy 191.806438 74.936073) (xy 191.81748 74.931276) (xy 192.051892 74.768748) (xy 192.250092 74.563612) (xy 192.404464 74.32375)
+ (xy 192.501384 74.050025) (xy 192.379501 73.8275) (xy 190.6675 73.8275) (xy 190.6675 73.8475) (xy 190.3325 73.8475)
+ (xy 190.3325 73.8275) (xy 188.620499 73.8275) (xy 188.498616 74.050025) (xy 188.595536 74.32375) (xy 188.749908 74.563612)
+ (xy 188.948108 74.768748) (xy 189.18252 74.931276) (xy 189.193511 74.936051) (xy 189.080585 74.996096) (xy 188.861979 75.174386)
+ (xy 188.682166 75.391743) (xy 188.547996 75.639885) (xy 188.464579 75.909362) (xy 188.435092 76.189909) (xy 188.460659 76.470841)
+ (xy 188.540305 76.741456) (xy 188.670998 76.991448) (xy 188.847758 77.211293) (xy 189.063854 77.392619) (xy 189.204748 77.470076)
+ (xy 189.080585 77.536096) (xy 188.861979 77.714386) (xy 188.682166 77.931743) (xy 188.547996 78.179885) (xy 188.464579 78.449362)
+ (xy 188.435092 78.729909) (xy 188.460659 79.010841) (xy 188.540305 79.281456) (xy 188.670998 79.531448) (xy 188.847758 79.751293)
+ (xy 189.063854 79.932619) (xy 189.204748 80.010076) (xy 189.080585 80.076096) (xy 188.861979 80.254386) (xy 188.682166 80.471743)
+ (xy 188.547996 80.719885) (xy 188.464579 80.989362) (xy 188.435092 81.269909) (xy 188.460659 81.550841) (xy 188.540305 81.821456)
+ (xy 188.670998 82.071448) (xy 188.847758 82.291293) (xy 189.063854 82.472619) (xy 189.204748 82.550076) (xy 189.080585 82.616096)
+ (xy 188.861979 82.794386) (xy 188.682166 83.011743) (xy 188.547996 83.259885) (xy 188.464579 83.529362) (xy 188.435092 83.809909)
+ (xy 188.460659 84.090841) (xy 188.540305 84.361456) (xy 188.670998 84.611448) (xy 188.847758 84.831293) (xy 189.063854 85.012619)
+ (xy 189.204748 85.090076) (xy 189.080585 85.156096) (xy 188.861979 85.334386) (xy 188.682166 85.551743) (xy 188.547996 85.799885)
+ (xy 188.464579 86.069362) (xy 188.435092 86.349909) (xy 188.460659 86.630841) (xy 188.540305 86.901456) (xy 188.670998 87.151448)
+ (xy 188.847758 87.371293) (xy 189.063854 87.552619) (xy 189.204748 87.630076) (xy 189.080585 87.696096) (xy 188.861979 87.874386)
+ (xy 188.682166 88.091743) (xy 188.547996 88.339885) (xy 188.464579 88.609362) (xy 188.435092 88.889909) (xy 188.460659 89.170841)
+ (xy 188.540305 89.441456) (xy 188.670998 89.691448) (xy 188.847758 89.911293) (xy 189.063854 90.092619) (xy 189.204748 90.170076)
+ (xy 189.080585 90.236096) (xy 188.861979 90.414386) (xy 188.682166 90.631743) (xy 188.547996 90.879885) (xy 188.464579 91.149362)
+ (xy 188.435092 91.429909) (xy 188.460659 91.710841) (xy 188.540305 91.981456) (xy 188.670998 92.231448) (xy 188.847758 92.451293)
+ (xy 189.063854 92.632619) (xy 189.204748 92.710076) (xy 189.080585 92.776096) (xy 188.861979 92.954386) (xy 188.682166 93.171743)
+ (xy 188.547996 93.419885) (xy 188.464579 93.689362) (xy 188.435092 93.969909) (xy 188.460659 94.250841) (xy 188.540305 94.521456)
+ (xy 188.670998 94.771448) (xy 188.847758 94.991293) (xy 189.063854 95.172619) (xy 189.204748 95.250076) (xy 189.080585 95.316096)
+ (xy 188.861979 95.494386) (xy 188.682166 95.711743) (xy 188.547996 95.959885) (xy 188.464579 96.229362) (xy 188.435092 96.509909)
+ (xy 188.460659 96.790841) (xy 188.540305 97.061456) (xy 188.670998 97.311448) (xy 188.847758 97.531293) (xy 189.063854 97.712619)
+ (xy 189.204748 97.790076) (xy 189.080585 97.856096) (xy 188.861979 98.034386) (xy 188.682166 98.251743) (xy 188.547996 98.499885)
+ (xy 188.464579 98.769362) (xy 188.435092 99.049909) (xy 188.460659 99.330841) (xy 188.540305 99.601456) (xy 188.670998 99.851448)
+ (xy 188.847758 100.071293) (xy 189.063854 100.252619) (xy 189.311053 100.388518) (xy 189.579941 100.473815) (xy 189.860276 100.505259)
+ (xy 189.880457 100.5054) (xy 191.119543 100.5054) (xy 191.400289 100.477873) (xy 191.670342 100.396339) (xy 191.919415 100.263904)
+ (xy 192.138021 100.085614) (xy 192.317834 99.868257) (xy 192.452004 99.620115) (xy 192.535421 99.350638) (xy 192.564908 99.070091)
+ (xy 192.564908 103.609) (xy 187.96 103.609) (xy 187.852767 103.619514) (xy 187.745513 103.628897) (xy 187.739624 103.630607)
+ (xy 187.733523 103.631206) (xy 187.630383 103.662345) (xy 187.526985 103.692386) (xy 187.521544 103.695205) (xy 187.515672 103.696979)
+ (xy 187.420546 103.747558) (xy 187.324951 103.79711) (xy 187.320159 103.800935) (xy 187.314745 103.803814) (xy 187.231262 103.871901)
+ (xy 187.147106 103.939083) (xy 187.138568 103.9475) (xy 187.138397 103.947641) (xy 187.138265 103.9478) (xy 187.135513 103.950514)
+ (xy 185.865513 105.220513) (xy 185.797107 105.303791) (xy 185.727918 105.386248) (xy 185.724964 105.391619) (xy 185.721072 105.396359)
+ (xy 185.670164 105.4913) (xy 185.618288 105.585664) (xy 185.616434 105.591507) (xy 185.613537 105.596911) (xy 185.582049 105.699902)
+ (xy 185.54948 105.802575) (xy 185.548796 105.808669) (xy 185.547004 105.814532) (xy 185.536123 105.921654) (xy 185.524114 106.02872)
+ (xy 185.52403 106.040713) (xy 185.524008 106.04093) (xy 185.524027 106.041131) (xy 185.524 106.045) (xy 185.524 108.017575)
+ (xy 185.307208 108.194386) (xy 185.127395 108.411743) (xy 184.993225 108.659885) (xy 184.909808 108.929362) (xy 184.880321 109.209909)
+ (xy 184.905888 109.490841) (xy 184.985534 109.761456) (xy 185.116227 110.011448) (xy 185.292987 110.231293) (xy 185.509083 110.412619)
+ (xy 185.649977 110.490076) (xy 185.525814 110.556096) (xy 185.307208 110.734386) (xy 185.127395 110.951743) (xy 184.993225 111.199885)
+ (xy 184.909808 111.469362) (xy 184.880321 111.749909) (xy 184.905888 112.030841) (xy 184.985534 112.301456) (xy 185.116227 112.551448)
+ (xy 185.292987 112.771293) (xy 185.509083 112.952619) (xy 185.649977 113.030076) (xy 185.525814 113.096096) (xy 185.307208 113.274386)
+ (xy 185.127395 113.491743) (xy 184.993225 113.739885) (xy 184.909808 114.009362) (xy 184.880321 114.289909) (xy 184.905888 114.570841)
+ (xy 184.985534 114.841456) (xy 185.116227 115.091448) (xy 185.292987 115.311293) (xy 185.509083 115.492619) (xy 185.649977 115.570076)
+ (xy 185.525814 115.636096) (xy 185.307208 115.814386) (xy 185.127395 116.031743) (xy 184.993225 116.279885) (xy 184.909808 116.549362)
+ (xy 184.880321 116.829909) (xy 184.905888 117.110841) (xy 184.985534 117.381456) (xy 185.116227 117.631448) (xy 185.292987 117.851293)
+ (xy 185.509083 118.032619) (xy 185.756282 118.168518) (xy 186.02517 118.253815) (xy 186.305505 118.285259) (xy 186.325686 118.2854)
+ (xy 187.054314 118.2854) (xy 187.33506 118.257873) (xy 187.605113 118.176339) (xy 187.854186 118.043904) (xy 188.072792 117.865614)
+ (xy 188.114249 117.8155) (xy 189.23 117.8155) (xy 189.319688 117.806706) (xy 189.409445 117.798853) (xy 189.414367 117.797422)
+ (xy 189.419476 117.796922) (xy 189.505767 117.770869) (xy 189.59227 117.745738) (xy 189.596823 117.743377) (xy 189.601734 117.741895)
+ (xy 189.681307 117.699585) (xy 189.761295 117.658123) (xy 189.765302 117.654924) (xy 189.769833 117.652515) (xy 189.839672 117.595555)
+ (xy 189.910085 117.539346) (xy 189.917226 117.532303) (xy 189.917371 117.532186) (xy 189.917481 117.532052) (xy 189.919783 117.529783)
+ (xy 191.796459 115.653105) (xy 191.944355 115.717719) (xy 192.228498 115.780192) (xy 192.519363 115.786285) (xy 192.805873 115.735765)
+ (xy 193.077113 115.630558) (xy 193.322753 115.47467) (xy 193.533436 115.27404) (xy 193.701137 115.036308) (xy 193.819469 114.770531)
+ (xy 193.883924 114.486831) (xy 193.888564 114.154535) (xy 193.832055 113.869147) (xy 193.721191 113.600169) (xy 193.560193 113.357848)
+ (xy 193.355194 113.151413) (xy 193.114003 112.988727) (xy 192.845805 112.875988) (xy 192.560818 112.817488) (xy 192.269896 112.815457)
+ (xy 191.98412 112.869972) (xy 191.714375 112.978956) (xy 191.470935 113.138258) (xy 191.263074 113.341811) (xy 191.098709 113.58186)
+ (xy 191.091038 113.599757) (xy 191.089915 113.600654) (xy 191.082777 113.607692) (xy 191.082629 113.607814) (xy 191.082515 113.607951)
+ (xy 191.080217 113.610218) (xy 190.817587 113.872847) (xy 190.819183 113.867818) (xy 190.819754 113.862722) (xy 190.821255 113.857815)
+ (xy 190.830361 113.768155) (xy 190.840405 113.67862) (xy 190.840474 113.668591) (xy 190.840494 113.668404) (xy 190.840477 113.668229)
+ (xy 190.8405 113.665) (xy 190.8405 111.609678) (xy 190.993436 111.46404) (xy 191.161137 111.226308) (xy 191.279469 110.960531)
+ (xy 191.343924 110.676831) (xy 191.348564 110.344535) (xy 191.292055 110.059147) (xy 191.181191 109.790169) (xy 191.020193 109.547848)
+ (xy 190.815194 109.341413) (xy 190.574003 109.178727) (xy 190.305805 109.065988) (xy 190.020818 109.007488) (xy 189.729896 109.005457)
+ (xy 189.44412 109.059972) (xy 189.174375 109.168956) (xy 188.930935 109.328258) (xy 188.723074 109.531811) (xy 188.558709 109.77186)
+ (xy 188.4441 110.039264) (xy 188.383612 110.323836) (xy 188.37955 110.614737) (xy 188.432068 110.900887) (xy 188.539167 111.171386)
+ (xy 188.696765 111.415931) (xy 188.8895 111.615513) (xy 188.8895 113.260934) (xy 188.825934 113.3245) (xy 188.115791 113.3245)
+ (xy 188.087013 113.288707) (xy 187.870917 113.107381) (xy 187.730022 113.029923) (xy 187.854186 112.963904) (xy 188.072792 112.785614)
+ (xy 188.252605 112.568257) (xy 188.386775 112.320115) (xy 188.470192 112.050638) (xy 188.499679 111.770091) (xy 188.474112 111.489159)
+ (xy 188.394466 111.218544) (xy 188.263773 110.968552) (xy 188.087013 110.748707) (xy 187.870917 110.567381) (xy 187.730022 110.489923)
+ (xy 187.854186 110.423904) (xy 188.072792 110.245614) (xy 188.252605 110.028257) (xy 188.386775 109.780115) (xy 188.470192 109.510638)
+ (xy 188.499679 109.230091) (xy 188.474112 108.949159) (xy 188.394466 108.678544) (xy 188.263773 108.428552) (xy 188.087013 108.208707)
+ (xy 187.870917 108.027381) (xy 187.856 108.01918) (xy 187.856 106.527973) (xy 188.442973 105.941) (xy 194.462026 105.941)
+ (xy 195.684 107.162973) (xy 195.684 111.696771) (xy 195.655538 111.738339) (xy 195.55074 111.98285) (xy 195.495431 112.243061)
+ (xy 195.491716 112.509058) (xy 195.539739 112.770711) (xy 195.637669 113.018054) (xy 195.781776 113.241664) (xy 195.966571 113.433025)
+ (xy 196.185016 113.584849) (xy 196.370469 113.665871) (xy 196.224649 113.723852) (xy 196.190394 113.742162) (xy 196.129245 113.977364)
+ (xy 196.85 114.698119) (xy 197.570755 113.977364) (xy 197.509606 113.742162) (xy 197.3289 113.664276) (xy 197.464575 113.611652)
+ (xy 197.689186 113.469109) (xy 197.881833 113.285654) (xy 198.035177 113.068274) (xy 198.143379 112.82525) (xy 198.202316 112.565837)
+ (xy 198.206559 112.261988) (xy 198.206559 114.811466) (xy 198.159876 114.557948) (xy 198.061148 114.309649) (xy 198.042838 114.275394)
+ (xy 197.807636 114.214245) (xy 197.086881 114.935) (xy 197.807636 115.655755) (xy 198.042838 115.594606) (xy 198.148601 115.349221)
+ (xy 198.204459 115.087917) (xy 198.208266 114.820737) (xy 198.208266 117.360737) (xy 198.159876 117.097948) (xy 198.061148 116.849649)
+ (xy 198.042838 116.815394) (xy 197.807636 116.754245) (xy 197.570755 116.991126) (xy 197.570755 116.517364) (xy 197.509606 116.282162)
+ (xy 197.329024 116.204329) (xy 197.475351 116.146148) (xy 197.509606 116.127838) (xy 197.570755 115.892636) (xy 196.85 115.171881)
+ (xy 196.613119 115.408762) (xy 196.613119 114.935) (xy 195.892364 114.214245) (xy 195.657162 114.275394) (xy 195.551399 114.520779)
+ (xy 195.495541 114.782083) (xy 195.491734 115.049263) (xy 195.540124 115.312052) (xy 195.638852 115.560351) (xy 195.657162 115.594606)
+ (xy 195.892364 115.655755) (xy 196.613119 114.935) (xy 196.613119 115.408762) (xy 196.129245 115.892636) (xy 196.190394 116.127838)
+ (xy 196.370975 116.20567) (xy 196.224649 116.263852) (xy 196.190394 116.282162) (xy 196.129245 116.517364) (xy 196.85 117.238119)
+ (xy 197.570755 116.517364) (xy 197.570755 116.991126) (xy 197.086881 117.475) (xy 197.101023 117.489142) (xy 196.864142 117.726022)
+ (xy 196.85 117.711881) (xy 196.835858 117.726023) (xy 196.613119 117.503284) (xy 196.598977 117.489142) (xy 196.613119 117.475)
+ (xy 195.892364 116.754245) (xy 195.657162 116.815394) (xy 195.551399 117.060779) (xy 195.495541 117.322083) (xy 195.491734 117.589263)
+ (xy 195.540124 117.852052) (xy 195.638852 118.100351) (xy 195.657162 118.134606) (xy 195.892362 118.195754) (xy 195.874117 118.214)
+ (xy 193.04 118.214) (xy 192.932717 118.224519) (xy 192.825513 118.233898) (xy 192.819629 118.235607) (xy 192.813523 118.236206)
+ (xy 192.710355 118.267354) (xy 192.606984 118.297386) (xy 192.601542 118.300206) (xy 192.595672 118.301979) (xy 192.500525 118.352569)
+ (xy 192.404951 118.402111) (xy 192.400163 118.405933) (xy 192.394745 118.408814) (xy 192.311259 118.476903) (xy 192.227105 118.544083)
+ (xy 192.218567 118.552502) (xy 192.218397 118.552641) (xy 192.218266 118.552798) (xy 192.215513 118.555514) (xy 190.017026 120.754)
+ (xy 189.23 120.754) (xy 189.003523 120.776206) (xy 188.785672 120.841979) (xy 188.584745 120.948814) (xy 188.465461 121.0461)
+ (xy 188.435232 121.0461) (xy 188.437384 121.040025) (xy 188.437384 120.259975) (xy 188.340464 119.98625) (xy 188.186092 119.746388)
+ (xy 187.987892 119.541252) (xy 187.75348 119.378724) (xy 187.491865 119.265051) (xy 187.2131 119.2046) (xy 186.8575 119.2046)
+ (xy 186.8575 120.4825) (xy 188.315501 120.4825) (xy 188.437384 120.259975) (xy 188.437384 121.040025) (xy 188.315501 120.8175)
+ (xy 186.8575 120.8175) (xy 186.8575 120.8375) (xy 186.5225 120.8375) (xy 186.5225 120.8175) (xy 186.5225 120.4825)
+ (xy 186.5225 119.2046) (xy 186.1669 119.2046) (xy 185.888135 119.265051) (xy 185.62652 119.378724) (xy 185.392108 119.541252)
+ (xy 185.193908 119.746388) (xy 185.039536 119.98625) (xy 184.942616 120.259975) (xy 185.064499 120.4825) (xy 186.5225 120.4825)
+ (xy 186.5225 120.8175) (xy 185.064499 120.8175) (xy 184.942616 121.040025) (xy 184.944767 121.0461) (xy 183.020073 121.0461)
+ (xy 181.799487 119.825513) (xy 181.716208 119.757107) (xy 181.633752 119.687918) (xy 181.62838 119.684964) (xy 181.623641 119.681072)
+ (xy 181.528699 119.630164) (xy 181.434336 119.578288) (xy 181.428492 119.576434) (xy 181.423089 119.573537) (xy 181.320097 119.542049)
+ (xy 181.217425 119.50948) (xy 181.21133 119.508796) (xy 181.205468 119.507004) (xy 181.098345 119.496123) (xy 180.99128 119.484114)
+ (xy 180.979286 119.48403) (xy 180.97907 119.484008) (xy 180.978868 119.484027) (xy 180.975 119.484) (xy 180.871 119.484)
+ (xy 180.871 110.072207) (xy 180.871 109.552) (xy 180.871 108.888) (xy 180.871 108.367793) (xy 180.845713 108.240669)
+ (xy 180.796112 108.12092) (xy 180.724102 108.01315) (xy 180.632451 107.921498) (xy 180.52468 107.849488) (xy 180.404932 107.799887)
+ (xy 180.277808 107.7746) (xy 180.148193 107.7746) (xy 179.402 107.7746) (xy 179.2375 107.9391) (xy 179.2375 109.0525)
+ (xy 180.7065 109.0525) (xy 180.871 108.888) (xy 180.871 109.552) (xy 180.7065 109.3875) (xy 179.2375 109.3875)
+ (xy 179.2375 110.3146) (xy 179.2375 110.5009) (xy 179.2375 111.5925) (xy 180.695501 111.5925) (xy 180.817384 111.369975)
+ (xy 180.720464 111.09625) (xy 180.566092 110.856388) (xy 180.367892 110.651252) (xy 180.363665 110.648321) (xy 180.404932 110.640113)
+ (xy 180.52468 110.590512) (xy 180.632451 110.518502) (xy 180.724102 110.42685) (xy 180.796112 110.31908) (xy 180.845713 110.199331)
+ (xy 180.871 110.072207) (xy 180.871 119.484) (xy 180.817384 119.484) (xy 180.817384 117.230025) (xy 180.817384 116.449975)
+ (xy 180.720464 116.17625) (xy 180.566092 115.936388) (xy 180.367892 115.731252) (xy 180.13532 115.57) (xy 180.367892 115.408748)
+ (xy 180.566092 115.203612) (xy 180.720464 114.96375) (xy 180.817384 114.690025) (xy 180.817384 113.909975) (xy 180.720464 113.63625)
+ (xy 180.566092 113.396388) (xy 180.367892 113.191252) (xy 180.13532 113.03) (xy 180.367892 112.868748) (xy 180.566092 112.663612)
+ (xy 180.720464 112.42375) (xy 180.817384 112.150025) (xy 180.695501 111.9275) (xy 179.2375 111.9275) (xy 179.2375 112.8546)
+ (xy 179.2375 113.2054) (xy 179.2375 114.1325) (xy 180.695501 114.1325) (xy 180.817384 113.909975) (xy 180.817384 114.690025)
+ (xy 180.695501 114.4675) (xy 179.2375 114.4675) (xy 179.2375 115.3946) (xy 179.2375 115.7454) (xy 179.2375 116.6725)
+ (xy 180.695501 116.6725) (xy 180.817384 116.449975) (xy 180.817384 117.230025) (xy 180.695501 117.0075) (xy 179.2375 117.0075)
+ (xy 179.2375 118.2854) (xy 179.5931 118.2854) (xy 179.871865 118.224949) (xy 180.13348 118.111276) (xy 180.367892 117.948748)
+ (xy 180.566092 117.743612) (xy 180.720464 117.50375) (xy 180.817384 117.230025) (xy 180.817384 119.484) (xy 180.751397 119.484)
+ (xy 180.724102 119.44315) (xy 180.632451 119.351498) (xy 180.52468 119.279488) (xy 180.404932 119.229887) (xy 180.277808 119.2046)
+ (xy 180.148193 119.2046) (xy 178.9025 119.2046) (xy 178.9025 118.2854) (xy 178.9025 117.0075) (xy 178.9025 116.6725)
+ (xy 178.9025 115.7454) (xy 178.9025 115.3946) (xy 178.9025 114.4675) (xy 178.9025 114.1325) (xy 178.9025 113.2054)
+ (xy 178.9025 112.8546) (xy 178.9025 111.9275) (xy 178.9025 111.5925) (xy 178.9025 110.5009) (xy 178.9025 110.3146)
+ (xy 178.9025 109.3875) (xy 178.9025 109.0525) (xy 178.9025 107.9391) (xy 178.738 107.7746) (xy 177.991807 107.7746)
+ (xy 177.862192 107.7746) (xy 177.735068 107.799887) (xy 177.61532 107.849488) (xy 177.507549 107.921498) (xy 177.415898 108.01315)
+ (xy 177.343888 108.12092) (xy 177.324908 108.166742) (xy 177.324908 99.070091) (xy 177.299341 98.789159) (xy 177.219695 98.518544)
+ (xy 177.089002 98.268552) (xy 176.912242 98.048707) (xy 176.696146 97.867381) (xy 176.555251 97.789923) (xy 176.679415 97.723904)
+ (xy 176.898021 97.545614) (xy 177.077834 97.328257) (xy 177.212004 97.080115) (xy 177.295421 96.810638) (xy 177.324908 96.530091)
+ (xy 177.299341 96.249159) (xy 177.219695 95.978544) (xy 177.089002 95.728552) (xy 176.912242 95.508707) (xy 176.696146 95.327381)
+ (xy 176.555251 95.249923) (xy 176.679415 95.183904) (xy 176.898021 95.005614) (xy 177.077834 94.788257) (xy 177.212004 94.540115)
+ (xy 177.295421 94.270638) (xy 177.324908 93.990091) (xy 177.299341 93.709159) (xy 177.219695 93.438544) (xy 177.089002 93.188552)
+ (xy 176.912242 92.968707) (xy 176.696146 92.787381) (xy 176.555251 92.709923) (xy 176.679415 92.643904) (xy 176.898021 92.465614)
+ (xy 177.077834 92.248257) (xy 177.212004 92.000115) (xy 177.295421 91.730638) (xy 177.324908 91.450091) (xy 177.299341 91.169159)
+ (xy 177.219695 90.898544) (xy 177.089002 90.648552) (xy 176.912242 90.428707) (xy 176.696146 90.247381) (xy 176.555251 90.169923)
+ (xy 176.679415 90.103904) (xy 176.898021 89.925614) (xy 177.077834 89.708257) (xy 177.212004 89.460115) (xy 177.295421 89.190638)
+ (xy 177.324908 88.910091) (xy 177.299341 88.629159) (xy 177.219695 88.358544) (xy 177.089002 88.108552) (xy 176.912242 87.888707)
+ (xy 176.696146 87.707381) (xy 176.555251 87.629923) (xy 176.679415 87.563904) (xy 176.898021 87.385614) (xy 177.077834 87.168257)
+ (xy 177.212004 86.920115) (xy 177.295421 86.650638) (xy 177.324908 86.370091) (xy 177.299341 86.089159) (xy 177.219695 85.818544)
+ (xy 177.089002 85.568552) (xy 176.912242 85.348707) (xy 176.696146 85.167381) (xy 176.555251 85.089923) (xy 176.679415 85.023904)
+ (xy 176.898021 84.845614) (xy 177.077834 84.628257) (xy 177.212004 84.380115) (xy 177.295421 84.110638) (xy 177.324908 83.830091)
+ (xy 177.299341 83.549159) (xy 177.219695 83.278544) (xy 177.089002 83.028552) (xy 176.912242 82.808707) (xy 176.696146 82.627381)
+ (xy 176.555251 82.549923) (xy 176.679415 82.483904) (xy 176.898021 82.305614) (xy 177.077834 82.088257) (xy 177.212004 81.840115)
+ (xy 177.295421 81.570638) (xy 177.324908 81.290091) (xy 177.299341 81.009159) (xy 177.219695 80.738544) (xy 177.089002 80.488552)
+ (xy 176.912242 80.268707) (xy 176.696146 80.087381) (xy 176.566438 80.016073) (xy 176.57748 80.011276) (xy 176.811892 79.848748)
+ (xy 177.010092 79.643612) (xy 177.164464 79.40375) (xy 177.261384 79.130025) (xy 177.139501 78.9075) (xy 175.4275 78.9075)
+ (xy 175.4275 78.9275) (xy 175.0925 78.9275) (xy 175.0925 78.9075) (xy 173.380499 78.9075) (xy 173.258616 79.130025)
+ (xy 173.355536 79.40375) (xy 173.509908 79.643612) (xy 173.708108 79.848748) (xy 173.94252 80.011276) (xy 173.953511 80.016051)
+ (xy 173.840585 80.076096) (xy 173.621979 80.254386) (xy 173.442166 80.471743) (xy 173.307996 80.719885) (xy 173.224579 80.989362)
+ (xy 173.195092 81.269909) (xy 173.220659 81.550841) (xy 173.300305 81.821456) (xy 173.430998 82.071448) (xy 173.607758 82.291293)
+ (xy 173.823854 82.472619) (xy 173.964748 82.550076) (xy 173.840585 82.616096) (xy 173.621979 82.794386) (xy 173.442166 83.011743)
+ (xy 173.307996 83.259885) (xy 173.224579 83.529362) (xy 173.195092 83.809909) (xy 173.220659 84.090841) (xy 173.300305 84.361456)
+ (xy 173.430998 84.611448) (xy 173.607758 84.831293) (xy 173.823854 85.012619) (xy 173.964748 85.090076) (xy 173.840585 85.156096)
+ (xy 173.621979 85.334386) (xy 173.442166 85.551743) (xy 173.307996 85.799885) (xy 173.224579 86.069362) (xy 173.195092 86.349909)
+ (xy 173.220659 86.630841) (xy 173.300305 86.901456) (xy 173.430998 87.151448) (xy 173.607758 87.371293) (xy 173.823854 87.552619)
+ (xy 173.964748 87.630076) (xy 173.840585 87.696096) (xy 173.621979 87.874386) (xy 173.442166 88.091743) (xy 173.307996 88.339885)
+ (xy 173.224579 88.609362) (xy 173.195092 88.889909) (xy 173.220659 89.170841) (xy 173.300305 89.441456) (xy 173.430998 89.691448)
+ (xy 173.607758 89.911293) (xy 173.823854 90.092619) (xy 173.964748 90.170076) (xy 173.840585 90.236096) (xy 173.621979 90.414386)
+ (xy 173.442166 90.631743) (xy 173.307996 90.879885) (xy 173.224579 91.149362) (xy 173.195092 91.429909) (xy 173.220659 91.710841)
+ (xy 173.300305 91.981456) (xy 173.430998 92.231448) (xy 173.607758 92.451293) (xy 173.823854 92.632619) (xy 173.964748 92.710076)
+ (xy 173.840585 92.776096) (xy 173.621979 92.954386) (xy 173.442166 93.171743) (xy 173.307996 93.419885) (xy 173.224579 93.689362)
+ (xy 173.195092 93.969909) (xy 173.220659 94.250841) (xy 173.300305 94.521456) (xy 173.430998 94.771448) (xy 173.607758 94.991293)
+ (xy 173.823854 95.172619) (xy 173.964748 95.250076) (xy 173.840585 95.316096) (xy 173.621979 95.494386) (xy 173.442166 95.711743)
+ (xy 173.307996 95.959885) (xy 173.224579 96.229362) (xy 173.195092 96.509909) (xy 173.220659 96.790841) (xy 173.300305 97.061456)
+ (xy 173.430998 97.311448) (xy 173.607758 97.531293) (xy 173.823854 97.712619) (xy 173.964748 97.790076) (xy 173.840585 97.856096)
+ (xy 173.621979 98.034386) (xy 173.442166 98.251743) (xy 173.307996 98.499885) (xy 173.224579 98.769362) (xy 173.195092 99.049909)
+ (xy 173.220659 99.330841) (xy 173.300305 99.601456) (xy 173.430998 99.851448) (xy 173.607758 100.071293) (xy 173.823854 100.252619)
+ (xy 174.071053 100.388518) (xy 174.339941 100.473815) (xy 174.620276 100.505259) (xy 174.640457 100.5054) (xy 175.879543 100.5054)
+ (xy 176.160289 100.477873) (xy 176.430342 100.396339) (xy 176.679415 100.263904) (xy 176.898021 100.085614) (xy 177.077834 99.868257)
+ (xy 177.212004 99.620115) (xy 177.295421 99.350638) (xy 177.324908 99.070091) (xy 177.324908 108.166742) (xy 177.294287 108.240669)
+ (xy 177.269 108.367793) (xy 177.269 108.888) (xy 177.4335 109.0525) (xy 178.9025 109.0525) (xy 178.9025 109.3875)
+ (xy 177.4335 109.3875) (xy 177.269 109.552) (xy 177.269 110.072207) (xy 177.294287 110.199331) (xy 177.343888 110.31908)
+ (xy 177.415898 110.42685) (xy 177.507549 110.518502) (xy 177.61532 110.590512) (xy 177.735068 110.640113) (xy 177.776334 110.648321)
+ (xy 177.772108 110.651252) (xy 177.573908 110.856388) (xy 177.419536 111.09625) (xy 177.322616 111.369975) (xy 177.444499 111.5925)
+ (xy 178.9025 111.5925) (xy 178.9025 111.9275) (xy 177.444499 111.9275) (xy 177.322616 112.150025) (xy 177.419536 112.42375)
+ (xy 177.573908 112.663612) (xy 177.772108 112.868748) (xy 178.004679 113.03) (xy 177.772108 113.191252) (xy 177.573908 113.396388)
+ (xy 177.419536 113.63625) (xy 177.322616 113.909975) (xy 177.444499 114.1325) (xy 178.9025 114.1325) (xy 178.9025 114.4675)
+ (xy 177.444499 114.4675) (xy 177.322616 114.690025) (xy 177.419536 114.96375) (xy 177.573908 115.203612) (xy 177.772108 115.408748)
+ (xy 178.004679 115.57) (xy 177.772108 115.731252) (xy 177.573908 115.936388) (xy 177.419536 116.17625) (xy 177.322616 116.449975)
+ (xy 177.444499 116.6725) (xy 178.9025 116.6725) (xy 178.9025 117.0075) (xy 177.444499 117.0075) (xy 177.322616 117.230025)
+ (xy 177.419536 117.50375) (xy 177.573908 117.743612) (xy 177.772108 117.948748) (xy 178.00652 118.111276) (xy 178.268135 118.224949)
+ (xy 178.5469 118.2854) (xy 178.9025 118.2854) (xy 178.9025 119.2046) (xy 177.862193 119.2046) (xy 177.735069 119.229887)
+ (xy 177.61532 119.279488) (xy 177.50755 119.351498) (xy 177.415898 119.443149) (xy 177.388602 119.484) (xy 166.852973 119.484)
+ (xy 149.35292 101.983946) (xy 149.320971 101.822589) (xy 149.214852 101.565125) (xy 149.060746 101.333176) (xy 148.864522 101.135577)
+ (xy 148.633654 100.979855) (xy 148.486 100.917786) (xy 148.486 99.870624) (xy 148.560657 99.764791) (xy 148.673924 99.51039)
+ (xy 148.73562 99.238834) (xy 148.740061 98.920762) (xy 148.685971 98.647589) (xy 148.579852 98.390125) (xy 148.425746 98.158176)
+ (xy 148.229522 97.960577) (xy 148.187125 97.93198) (xy 148.273931 97.914713) (xy 148.317636 97.89661) (xy 157.925514 107.504487)
+ (xy 158.008766 107.572871) (xy 158.091248 107.642082) (xy 158.096619 107.645035) (xy 158.101359 107.648928) (xy 158.196281 107.699824)
+ (xy 158.290664 107.751712) (xy 158.296509 107.753566) (xy 158.301912 107.756463) (xy 158.404929 107.787958) (xy 158.507575 107.82052)
+ (xy 158.513664 107.821203) (xy 158.519532 107.822997) (xy 158.626704 107.833882) (xy 158.73372 107.845886) (xy 158.745713 107.845969)
+ (xy 158.74593 107.845992) (xy 158.746131 107.845972) (xy 158.75 107.846) (xy 165.735 107.846) (xy 165.842188 107.83549)
+ (xy 165.949487 107.826103) (xy 165.955375 107.824392) (xy 165.961477 107.823794) (xy 166.064616 107.792654) (xy 166.168015 107.762614)
+ (xy 166.173455 107.759794) (xy 166.179328 107.758021) (xy 166.274453 107.707441) (xy 166.370049 107.65789) (xy 166.37484 107.654064)
+ (xy 166.380255 107.651186) (xy 166.463707 107.583123) (xy 166.547894 107.515918) (xy 166.556436 107.507494) (xy 166.556603 107.507359)
+ (xy 166.55673 107.507205) (xy 166.559487 107.504487) (xy 168.122973 105.941) (xy 169.258165 105.941) (xy 169.452758 106.076246)
+ (xy 169.719355 106.192719) (xy 170.003498 106.255192) (xy 170.294363 106.261285) (xy 170.580873 106.210765) (xy 170.852113 106.105558)
+ (xy 171.097753 105.94967) (xy 171.308436 105.74904) (xy 171.476137 105.511308) (xy 171.594469 105.245531) (xy 171.658924 104.961831)
+ (xy 171.663564 104.629535) (xy 171.607055 104.344147) (xy 171.496191 104.075169) (xy 171.335193 103.832848) (xy 171.130194 103.626413)
+ (xy 170.889003 103.463727) (xy 170.620805 103.350988) (xy 170.335818 103.292488) (xy 170.044896 103.290457) (xy 169.75912 103.344972)
+ (xy 169.489375 103.453956) (xy 169.252441 103.609) (xy 167.64 103.609) (xy 167.532811 103.619509) (xy 167.425513 103.628897)
+ (xy 167.419624 103.630607) (xy 167.413523 103.631206) (xy 167.310429 103.662331) (xy 167.206985 103.692385) (xy 167.20154 103.695207)
+ (xy 167.195672 103.696979) (xy 167.100582 103.747539) (xy 167.004951 103.79711) (xy 167.000159 103.800935) (xy 166.994745 103.803814)
+ (xy 166.911292 103.871876) (xy 166.827106 103.939082) (xy 166.818567 103.947502) (xy 166.818397 103.947641) (xy 166.818266 103.947798)
+ (xy 166.815514 103.950513) (xy 165.252026 105.514) (xy 159.535061 105.514) (xy 159.535061 102.095762) (xy 159.480971 101.822589)
+ (xy 159.374852 101.565125) (xy 159.220746 101.333176) (xy 159.024522 101.135577) (xy 158.793654 100.979855) (xy 158.536937 100.871941)
+ (xy 158.264149 100.815946) (xy 158.074184 100.814619) (xy 157.63249 100.372924) (xy 157.63249 68.468261) (xy 157.630061 68.454647)
+ (xy 157.630061 58.280762) (xy 157.575971 58.007589) (xy 157.469852 57.750125) (xy 157.315746 57.518176) (xy 157.119522 57.320577)
+ (xy 156.888654 57.164855) (xy 156.631937 57.056941) (xy 156.359149 57.000946) (xy 156.080679 56.999001) (xy 155.807135 57.051183)
+ (xy 155.548936 57.155502) (xy 155.315917 57.307985) (xy 155.116953 57.502825) (xy 154.959623 57.7326) (xy 154.84992 57.988557)
+ (xy 154.792021 58.260948) (xy 154.788133 58.539397) (xy 154.838404 58.813299) (xy 154.940918 59.07222) (xy 155.091771 59.306298)
+ (xy 155.2345 59.454098) (xy 155.2345 61.190934) (xy 151.710217 64.715217) (xy 151.652995 64.78488) (xy 151.595102 64.853875)
+ (xy 151.592632 64.858367) (xy 151.589374 64.862334) (xy 151.546775 64.941779) (xy 151.503383 65.02071) (xy 151.501832 65.025599)
+ (xy 151.499408 65.03012) (xy 151.473068 65.116273) (xy 151.445817 65.202182) (xy 151.445244 65.207282) (xy 151.443746 65.212185)
+ (xy 151.434643 65.301799) (xy 151.424595 65.39138) (xy 151.424525 65.401407) (xy 151.424506 65.401595) (xy 151.424522 65.401769)
+ (xy 151.4245 65.405) (xy 151.4245 66.224934) (xy 149.914783 64.715217) (xy 149.845119 64.657995) (xy 149.776125 64.600102)
+ (xy 149.771632 64.597632) (xy 149.767666 64.594374) (xy 149.68822 64.551775) (xy 149.60929 64.508383) (xy 149.6044 64.506832)
+ (xy 149.59988 64.504408) (xy 149.513726 64.478068) (xy 149.427818 64.450817) (xy 149.422717 64.450244) (xy 149.417815 64.448746)
+ (xy 149.3282 64.439643) (xy 149.23862 64.429595) (xy 149.228592 64.429525) (xy 149.228405 64.429506) (xy 149.22823 64.429522)
+ (xy 149.225 64.4295) (xy 148.870479 64.4295) (xy 148.95227 64.405738) (xy 148.956823 64.403377) (xy 148.961734 64.401895)
+ (xy 149.041307 64.359585) (xy 149.121295 64.318123) (xy 149.125302 64.314924) (xy 149.129833 64.312515) (xy 149.199672 64.255555)
+ (xy 149.270085 64.199346) (xy 149.277226 64.192303) (xy 149.277371 64.192186) (xy 149.277481 64.192052) (xy 149.279783 64.189783)
+ (xy 150.549783 62.919783) (xy 150.607004 62.850119) (xy 150.664898 62.781125) (xy 150.667367 62.776632) (xy 150.670626 62.772666)
+ (xy 150.713234 62.693201) (xy 150.756617 62.61429) (xy 150.758167 62.609403) (xy 150.760592 62.604881) (xy 150.786935 62.518712)
+ (xy 150.814183 62.432818) (xy 150.814755 62.427717) (xy 150.816254 62.422815) (xy 150.825356 62.3332) (xy 150.835405 62.24362)
+ (xy 150.835474 62.233592) (xy 150.835494 62.233405) (xy 150.835477 62.23323) (xy 150.8355 62.23) (xy 150.8355 59.69)
+ (xy 150.826705 59.600307) (xy 150.818853 59.510556) (xy 150.817423 59.505633) (xy 150.816922 59.500524) (xy 150.790865 59.41422)
+ (xy 150.765738 59.32773) (xy 150.763377 59.323175) (xy 150.761895 59.318266) (xy 150.719606 59.238732) (xy 150.678124 59.158705)
+ (xy 150.674922 59.154694) (xy 150.672515 59.150167) (xy 150.615582 59.080361) (xy 150.559347 59.009916) (xy 150.552307 59.002777)
+ (xy 150.552186 59.002629) (xy 150.552048 59.002515) (xy 150.549783 59.000218) (xy 150.2005 58.650934) (xy 150.2005 55.641989)
+ (xy 150.305134 55.542347) (xy 150.465657 55.314791) (xy 150.578924 55.06039) (xy 150.64062 54.788834) (xy 150.645061 54.470762)
+ (xy 150.590971 54.197589) (xy 150.484852 53.940125) (xy 150.330746 53.708176) (xy 150.2005 53.577017) (xy 150.2005 50.165)
+ (xy 150.191701 50.075266) (xy 150.183853 49.985555) (xy 150.182422 49.980632) (xy 150.181922 49.975524) (xy 150.155869 49.889232)
+ (xy 150.130738 49.80273) (xy 150.128377 49.798175) (xy 150.126895 49.793266) (xy 150.084596 49.713713) (xy 150.043123 49.633704)
+ (xy 150.039922 49.629694) (xy 150.037515 49.625167) (xy 149.980573 49.555349) (xy 149.924346 49.484915) (xy 149.917307 49.477777)
+ (xy 149.917186 49.477629) (xy 149.917048 49.477515) (xy 149.914782 49.475217) (xy 149.533783 49.094217) (xy 149.464119 49.036995)
+ (xy 149.395125 48.979102) (xy 149.390632 48.976632) (xy 149.386666 48.973374) (xy 149.30722 48.930775) (xy 149.22829 48.887383)
+ (xy 149.2234 48.885832) (xy 149.21888 48.883408) (xy 149.132726 48.857068) (xy 149.046818 48.829817) (xy 149.046186 48.829746)
+ (xy 148.95085 48.733741) (xy 148.730306 48.584983) (xy 148.485069 48.481894) (xy 148.224479 48.428403) (xy 147.958462 48.426546)
+ (xy 147.697151 48.476394) (xy 147.450498 48.576048) (xy 147.227899 48.721712) (xy 147.139273 48.8085) (xy 146.485088 48.8085)
+ (xy 146.41085 48.733741) (xy 146.190306 48.584983) (xy 145.945069 48.481894) (xy 145.684479 48.428403) (xy 145.418462 48.426546)
+ (xy 145.157151 48.476394) (xy 144.910498 48.576048) (xy 144.687899 48.721712) (xy 144.497832 48.907839) (xy 144.347538 49.127339)
+ (xy 144.27162 49.304466) (xy 144.205514 49.14408) (xy 144.058299 48.922504) (xy 143.87085 48.733741) (xy 143.650306 48.584983)
+ (xy 143.405069 48.481894) (xy 143.144479 48.428403) (xy 142.878462 48.426546) (xy 142.617151 48.476394) (xy 142.370498 48.576048)
+ (xy 142.147899 48.721712) (xy 142.059273 48.8085) (xy 140.462 48.8085) (xy 140.372266 48.817298) (xy 140.282555 48.825147)
+ (xy 140.277632 48.826577) (xy 140.272524 48.827078) (xy 140.186232 48.85313) (xy 140.09973 48.878262) (xy 140.095175 48.880622)
+ (xy 140.090266 48.882105) (xy 140.010713 48.924403) (xy 139.930704 48.965877) (xy 139.926694 48.969077) (xy 139.922167 48.971485)
+ (xy 139.852349 49.028426) (xy 139.781915 49.084654) (xy 139.774777 49.091692) (xy 139.774629 49.091814) (xy 139.774515 49.091951)
+ (xy 139.772217 49.094218) (xy 138.375217 50.491217) (xy 138.317995 50.56088) (xy 138.260102 50.629875) (xy 138.257632 50.634367)
+ (xy 138.254374 50.638334) (xy 138.211775 50.717779) (xy 138.168383 50.79671) (xy 138.166832 50.801599) (xy 138.164408 50.80612)
+ (xy 138.138068 50.892273) (xy 138.110817 50.978182) (xy 138.110244 50.983282) (xy 138.108746 50.988185) (xy 138.099643 51.077799)
+ (xy 138.089595 51.16738) (xy 138.089525 51.177407) (xy 138.089506 51.177595) (xy 138.089522 51.177769) (xy 138.0895 51.181)
+ (xy 138.0895 53.577714) (xy 137.971953 53.692825) (xy 137.814623 53.9226) (xy 137.70492 54.178557) (xy 137.647021 54.450948)
+ (xy 137.644224 54.651209) (xy 136.692434 55.603) (xy 136.206193 55.603) (xy 136.079069 55.628287) (xy 135.978266 55.67004)
+ (xy 135.978266 49.415737) (xy 135.929876 49.152948) (xy 135.831148 48.904649) (xy 135.812838 48.870394) (xy 135.577636 48.809245)
+ (xy 135.340755 49.046126) (xy 135.340755 48.572364) (xy 135.279606 48.337162) (xy 135.034221 48.231399) (xy 134.772917 48.175541)
+ (xy 134.505737 48.171734) (xy 134.242948 48.220124) (xy 133.994649 48.318852) (xy 133.960394 48.337162) (xy 133.899245 48.572364)
+ (xy 134.62 49.293119) (xy 135.340755 48.572364) (xy 135.340755 49.046126) (xy 134.856881 49.53) (xy 135.577636 50.250755)
+ (xy 135.812838 50.189606) (xy 135.918601 49.944221) (xy 135.974459 49.682917) (xy 135.978266 49.415737) (xy 135.978266 55.67004)
+ (xy 135.95932 55.677888) (xy 135.85155 55.749898) (xy 135.759898 55.841549) (xy 135.687888 55.94932) (xy 135.638287 56.069068)
+ (xy 135.613 56.196192) (xy 135.613 56.325807) (xy 135.613 56.682434) (xy 135.340755 56.954679) (xy 135.340755 50.487636)
+ (xy 134.62 49.766881) (xy 134.383119 50.003762) (xy 134.383119 49.53) (xy 133.662364 48.809245) (xy 133.427162 48.870394)
+ (xy 133.349329 49.050975) (xy 133.291148 48.904649) (xy 133.272838 48.870394) (xy 133.037636 48.809245) (xy 132.800755 49.046126)
+ (xy 132.800755 48.572364) (xy 132.739606 48.337162) (xy 132.494221 48.231399) (xy 132.232917 48.175541) (xy 131.965737 48.171734)
+ (xy 131.702948 48.220124) (xy 131.454649 48.318852) (xy 131.420394 48.337162) (xy 131.359245 48.572364) (xy 132.08 49.293119)
+ (xy 132.800755 48.572364) (xy 132.800755 49.046126) (xy 132.316881 49.53) (xy 133.037636 50.250755) (xy 133.272838 50.189606)
+ (xy 133.35067 50.009024) (xy 133.408852 50.155351) (xy 133.427162 50.189606) (xy 133.662364 50.250755) (xy 134.383119 49.53)
+ (xy 134.383119 50.003762) (xy 133.899245 50.487636) (xy 133.960394 50.722838) (xy 134.205779 50.828601) (xy 134.467083 50.884459)
+ (xy 134.734263 50.888266) (xy 134.997052 50.839876) (xy 135.245351 50.741148) (xy 135.279606 50.722838) (xy 135.340755 50.487636)
+ (xy 135.340755 56.954679) (xy 133.295217 59.000217) (xy 133.237995 59.06988) (xy 133.180102 59.138875) (xy 133.177632 59.143367)
+ (xy 133.174374 59.147334) (xy 133.131775 59.226779) (xy 133.088383 59.30571) (xy 133.086832 59.310599) (xy 133.084408 59.31512)
+ (xy 133.058068 59.401273) (xy 133.030817 59.487182) (xy 133.030244 59.492282) (xy 133.028746 59.497185) (xy 133.019643 59.586799)
+ (xy 133.009595 59.67638) (xy 133.009525 59.686407) (xy 133.009506 59.686595) (xy 133.009522 59.686769) (xy 133.0095 59.69)
+ (xy 133.0095 60.687315) (xy 132.904069 60.708287) (xy 132.800755 60.75108) (xy 132.800755 50.487636) (xy 132.08 49.766881)
+ (xy 131.843119 50.003762) (xy 131.843119 49.53) (xy 131.122364 48.809245) (xy 130.887162 48.870394) (xy 130.809585 49.050381)
+ (xy 130.743514 48.89008) (xy 130.596299 48.668504) (xy 130.40885 48.479741) (xy 130.188306 48.330983) (xy 129.943069 48.227894)
+ (xy 129.682479 48.174403) (xy 129.563135 48.173569) (xy 128.959783 47.570217) (xy 128.890119 47.512995) (xy 128.821125 47.455102)
+ (xy 128.816632 47.452632) (xy 128.812666 47.449374) (xy 128.73322 47.406775) (xy 128.65429 47.363383) (xy 128.6494 47.361832)
+ (xy 128.64488 47.359408) (xy 128.558726 47.333068) (xy 128.472818 47.305817) (xy 128.467717 47.305244) (xy 128.462815 47.303746)
+ (xy 128.3732 47.294643) (xy 128.28362 47.284595) (xy 128.273592 47.284525) (xy 128.273405 47.284506) (xy 128.27323 47.284522)
+ (xy 128.27 47.2845) (xy 125.492582 47.2845) (xy 125.369522 47.160577) (xy 125.138654 47.004855) (xy 124.881937 46.896941)
+ (xy 124.609149 46.840946) (xy 124.330679 46.839001) (xy 124.057135 46.891183) (xy 123.798936 46.995502) (xy 123.565917 47.147985)
+ (xy 123.366953 47.342825) (xy 123.209623 47.5726) (xy 123.09992 47.828557) (xy 123.042021 48.100948) (xy 123.038133 48.379397)
+ (xy 123.088404 48.653299) (xy 123.190918 48.91222) (xy 123.341771 49.146298) (xy 123.535217 49.346617) (xy 123.763887 49.505547)
+ (xy 124.019073 49.617035) (xy 124.291053 49.676834) (xy 124.569468 49.682666) (xy 124.843714 49.634309) (xy 125.103344 49.533605)
+ (xy 125.33847 49.38439) (xy 125.494819 49.2355) (xy 127.865934 49.2355) (xy 128.182993 49.552559) (xy 128.181716 49.644058)
+ (xy 128.229739 49.905711) (xy 128.327669 50.153054) (xy 128.471776 50.376664) (xy 128.656571 50.568025) (xy 128.875016 50.719849)
+ (xy 129.11879 50.826351) (xy 129.378608 50.883476) (xy 129.644573 50.889047) (xy 129.906555 50.842852) (xy 130.154575 50.746652)
+ (xy 130.379186 50.604109) (xy 130.571833 50.420654) (xy 130.725177 50.203274) (xy 130.811138 50.010202) (xy 130.868852 50.155351)
+ (xy 130.887162 50.189606) (xy 131.122364 50.250755) (xy 131.843119 49.53) (xy 131.843119 50.003762) (xy 131.359245 50.487636)
+ (xy 131.420394 50.722838) (xy 131.665779 50.828601) (xy 131.927083 50.884459) (xy 132.194263 50.888266) (xy 132.457052 50.839876)
+ (xy 132.705351 50.741148) (xy 132.739606 50.722838) (xy 132.800755 50.487636) (xy 132.800755 60.75108) (xy 132.78432 60.757888)
+ (xy 132.67655 60.829898) (xy 132.584898 60.921549) (xy 132.512888 61.02932) (xy 132.463287 61.149068) (xy 132.438 61.276192)
+ (xy 132.438 61.405807) (xy 132.438 63.183807) (xy 132.463287 63.310931) (xy 132.512888 63.43068) (xy 132.584898 63.53845)
+ (xy 132.676549 63.630102) (xy 132.78432 63.702112) (xy 132.904068 63.751713) (xy 133.0095 63.772685) (xy 133.0095 68.175934)
+ (xy 127.580217 73.605217) (xy 127.522995 73.67488) (xy 127.465102 73.743875) (xy 127.462632 73.748367) (xy 127.459374 73.752334)
+ (xy 127.416775 73.831779) (xy 127.373383 73.91071) (xy 127.371832 73.915599) (xy 127.369408 73.92012) (xy 127.343068 74.006273)
+ (xy 127.315817 74.092182) (xy 127.315244 74.097282) (xy 127.313746 74.102185) (xy 127.304643 74.191799) (xy 127.294595 74.28138)
+ (xy 127.294525 74.291407) (xy 127.294506 74.291595) (xy 127.294522 74.291769) (xy 127.2945 74.295) (xy 127.2945 74.532714)
+ (xy 127.176953 74.647825) (xy 127.019623 74.8776) (xy 126.90992 75.133557) (xy 126.852021 75.405948) (xy 126.848133 75.684397)
+ (xy 126.898404 75.958299) (xy 127.000918 76.21722) (xy 127.151771 76.451298) (xy 127.345217 76.651617) (xy 127.573887 76.810547)
+ (xy 127.829073 76.922035) (xy 128.101053 76.981834) (xy 128.379468 76.987666) (xy 128.653714 76.939309) (xy 128.913344 76.838605)
+ (xy 129.14847 76.68939) (xy 129.350134 76.497347) (xy 129.510657 76.269791) (xy 129.623924 76.01539) (xy 129.68562 75.743834)
+ (xy 129.690061 75.425762) (xy 129.635971 75.152589) (xy 129.529852 74.895125) (xy 129.375746 74.663176) (xy 129.328732 74.615833)
+ (xy 134.674783 69.269782) (xy 134.731984 69.200144) (xy 134.789898 69.131125) (xy 134.792367 69.126632) (xy 134.795626 69.122666)
+ (xy 134.838224 69.04322) (xy 134.881617 68.96429) (xy 134.883167 68.9594) (xy 134.885592 68.95488) (xy 134.911944 68.868685)
+ (xy 134.939183 68.782818) (xy 134.939754 68.777722) (xy 134.941255 68.772815) (xy 134.950361 68.683155) (xy 134.960405 68.59362)
+ (xy 134.960474 68.583591) (xy 134.960494 68.583404) (xy 134.960477 68.583229) (xy 134.9605 68.58) (xy 134.9605 63.772684)
+ (xy 135.065931 63.751713) (xy 135.18568 63.702112) (xy 135.29345 63.630102) (xy 135.385102 63.538451) (xy 135.457112 63.43068)
+ (xy 135.506713 63.310932) (xy 135.532 63.183808) (xy 135.532 63.054193) (xy 135.532 61.276193) (xy 135.506713 61.149069)
+ (xy 135.457112 61.02932) (xy 135.385102 60.92155) (xy 135.293451 60.829898) (xy 135.18568 60.757888) (xy 135.065932 60.708287)
+ (xy 134.9605 60.687314) (xy 134.9605 60.094065) (xy 136.357565 58.697) (xy 138.113807 58.697) (xy 138.240931 58.671713)
+ (xy 138.36068 58.622112) (xy 138.46845 58.550102) (xy 138.560102 58.458451) (xy 138.632112 58.35068) (xy 138.681713 58.230932)
+ (xy 138.702685 58.1255) (xy 143.105934 58.1255) (xy 144.594752 59.614317) (xy 144.395151 59.652394) (xy 144.148498 59.752048)
+ (xy 143.925899 59.897712) (xy 143.837273 59.9845) (xy 140.097582 59.9845) (xy 139.974522 59.860577) (xy 139.743654 59.704855)
+ (xy 139.486937 59.596941) (xy 139.214149 59.540946) (xy 138.935679 59.539001) (xy 138.662135 59.591183) (xy 138.403936 59.695502)
+ (xy 138.170917 59.847985) (xy 137.971953 60.042825) (xy 137.814623 60.2726) (xy 137.70492 60.528557) (xy 137.647021 60.800948)
+ (xy 137.643133 61.079397) (xy 137.693404 61.353299) (xy 137.795918 61.61222) (xy 137.946771 61.846298) (xy 138.140217 62.046617)
+ (xy 138.368887 62.205547) (xy 138.624073 62.317035) (xy 138.896053 62.376834) (xy 139.174468 62.382666) (xy 139.448714 62.334309)
+ (xy 139.708344 62.233605) (xy 139.94347 62.08439) (xy 140.099819 61.9355) (xy 143.836191 61.9355) (xy 143.896571 61.998025)
+ (xy 144.115016 62.149849) (xy 144.300203 62.230755) (xy 144.148498 62.292048) (xy 143.925899 62.437712) (xy 143.735832 62.623839)
+ (xy 143.585538 62.843339) (xy 143.48074 63.08785) (xy 143.425431 63.348061) (xy 143.421716 63.614058) (xy 143.469739 63.875711)
+ (xy 143.567669 64.123054) (xy 143.711776 64.346664) (xy 143.896571 64.538025) (xy 144.115016 64.689849) (xy 144.35879 64.796351)
+ (xy 144.618608 64.853476) (xy 144.884573 64.859047) (xy 145.146555 64.812852) (xy 145.291907 64.756473) (xy 146.630217 66.094783)
+ (xy 146.69988 66.152004) (xy 146.768875 66.209898) (xy 146.773367 66.212367) (xy 146.777334 66.215626) (xy 146.856779 66.258224)
+ (xy 146.93571 66.301617) (xy 146.940599 66.303167) (xy 146.94512 66.305592) (xy 147.031314 66.331944) (xy 147.117182 66.359183)
+ (xy 147.122277 66.359754) (xy 147.127185 66.361255) (xy 147.216849 66.370362) (xy 147.30638 66.380405) (xy 147.316407 66.380474)
+ (xy 147.316595 66.380494) (xy 147.316769 66.380477) (xy 147.32 66.3805) (xy 148.820934 66.3805) (xy 150.980359 68.539925)
+ (xy 150.978133 68.699397) (xy 151.028404 68.973299) (xy 151.130918 69.23222) (xy 151.281771 69.466298) (xy 151.475217 69.666617)
+ (xy 151.703887 69.825547) (xy 151.959073 69.937035) (xy 152.231053 69.996834) (xy 152.509468 70.002666) (xy 152.783714 69.954309)
+ (xy 153.043344 69.853605) (xy 153.27847 69.70439) (xy 153.480134 69.512347) (xy 153.640657 69.284791) (xy 153.753924 69.03039)
+ (xy 153.81562 68.758834) (xy 153.820061 68.440762) (xy 153.765971 68.167589) (xy 153.659852 67.910125) (xy 153.505746 67.678176)
+ (xy 153.3755 67.547017) (xy 153.3755 65.809065) (xy 156.899783 62.284782) (xy 156.956984 62.215144) (xy 157.014898 62.146125)
+ (xy 157.017367 62.141632) (xy 157.020626 62.137666) (xy 157.063224 62.05822) (xy 157.106617 61.97929) (xy 157.108167 61.9744)
+ (xy 157.110592 61.96988) (xy 157.136944 61.883685) (xy 157.164183 61.797818) (xy 157.164754 61.792722) (xy 157.166255 61.787815)
+ (xy 157.175361 61.698155) (xy 157.185405 61.60862) (xy 157.185474 61.598591) (xy 157.185494 61.598404) (xy 157.185477 61.598229)
+ (xy 157.1855 61.595) (xy 157.1855 59.451989) (xy 157.290134 59.352347) (xy 157.450657 59.124791) (xy 157.563924 58.87039)
+ (xy 157.62562 58.598834) (xy 157.630061 58.280762) (xy 157.630061 68.454647) (xy 157.583358 68.192894) (xy 157.481449 67.932403)
+ (xy 157.454836 67.882615) (xy 157.213179 67.813702) (xy 156.976298 68.050583) (xy 156.976298 67.576821) (xy 156.907385 67.335164)
+ (xy 156.65113 67.22303) (xy 156.377922 67.163043) (xy 156.098261 67.15751) (xy 155.822894 67.206642) (xy 155.562403 67.308551)
+ (xy 155.512615 67.335164) (xy 155.443702 67.576821) (xy 156.21 68.343119) (xy 156.976298 67.576821) (xy 156.976298 68.050583)
+ (xy 156.446881 68.58) (xy 157.213179 69.346298) (xy 157.454836 69.277385) (xy 157.56697 69.02113) (xy 157.626957 68.747922)
+ (xy 157.63249 68.468261) (xy 157.63249 100.372924) (xy 157.568266 100.3087) (xy 157.568266 97.040737) (xy 157.568266 87.515737)
+ (xy 157.568266 77.355737) (xy 157.519876 77.092948) (xy 157.421148 76.844649) (xy 157.402838 76.810394) (xy 157.167636 76.749245)
+ (xy 156.976298 76.940583) (xy 156.976298 69.583179) (xy 156.21 68.816881) (xy 155.973119 69.053762) (xy 155.973119 68.58)
+ (xy 155.206821 67.813702) (xy 154.965164 67.882615) (xy 154.85303 68.13887) (xy 154.793043 68.412078) (xy 154.78751 68.691739)
+ (xy 154.836642 68.967106) (xy 154.938551 69.227597) (xy 154.965164 69.277385) (xy 155.206821 69.346298) (xy 155.973119 68.58)
+ (xy 155.973119 69.053762) (xy 155.443702 69.583179) (xy 155.512615 69.824836) (xy 155.76887 69.93697) (xy 156.042078 69.996957)
+ (xy 156.321739 70.00249) (xy 156.597106 69.953358) (xy 156.857597 69.851449) (xy 156.907385 69.824836) (xy 156.976298 69.583179)
+ (xy 156.976298 76.940583) (xy 156.930755 76.986126) (xy 156.930755 76.512364) (xy 156.869606 76.277162) (xy 156.624221 76.171399)
+ (xy 156.362917 76.115541) (xy 156.095737 76.111734) (xy 155.832948 76.160124) (xy 155.584649 76.258852) (xy 155.550394 76.277162)
+ (xy 155.489245 76.512364) (xy 156.21 77.233119) (xy 156.930755 76.512364) (xy 156.930755 76.986126) (xy 156.446881 77.47)
+ (xy 157.167636 78.190755) (xy 157.402838 78.129606) (xy 157.508601 77.884221) (xy 157.564459 77.622917) (xy 157.568266 77.355737)
+ (xy 157.568266 87.515737) (xy 157.519876 87.252948) (xy 157.421148 87.004649) (xy 157.402838 86.970394) (xy 157.167636 86.909245)
+ (xy 156.930755 87.146126) (xy 156.930755 86.672364) (xy 156.930755 78.427636) (xy 156.21 77.706881) (xy 155.973119 77.943762)
+ (xy 155.973119 77.47) (xy 155.252364 76.749245) (xy 155.0265 76.807966) (xy 155.0265 76.706693) (xy 155.001213 76.579569)
+ (xy 154.951612 76.45982) (xy 154.879602 76.35205) (xy 154.787951 76.260398) (xy 154.68018 76.188388) (xy 154.560432 76.138787)
+ (xy 154.433308 76.1135) (xy 154.303693 76.1135) (xy 152.906693 76.1135) (xy 152.779569 76.138787) (xy 152.65982 76.188388)
+ (xy 152.55205 76.260398) (xy 152.460398 76.352049) (xy 152.388388 76.45982) (xy 152.374023 76.4945) (xy 150.257582 76.4945)
+ (xy 150.134522 76.370577) (xy 149.903654 76.214855) (xy 149.646937 76.106941) (xy 149.374149 76.050946) (xy 149.095679 76.049001)
+ (xy 148.822135 76.101183) (xy 148.6765 76.160023) (xy 148.563936 76.205502) (xy 148.330917 76.357985) (xy 148.131953 76.552825)
+ (xy 147.974623 76.7826) (xy 147.86492 77.038557) (xy 147.807021 77.310948) (xy 147.803133 77.589397) (xy 147.853404 77.863299)
+ (xy 147.955918 78.12222) (xy 148.106771 78.356298) (xy 148.300217 78.556617) (xy 148.528887 78.715547) (xy 148.784073 78.827035)
+ (xy 149.056053 78.886834) (xy 149.334468 78.892666) (xy 149.608714 78.844309) (xy 149.868344 78.743605) (xy 150.10347 78.59439)
+ (xy 150.259819 78.4455) (xy 152.374023 78.4455) (xy 152.388388 78.48018) (xy 152.460398 78.58795) (xy 152.552049 78.679602)
+ (xy 152.65982 78.751612) (xy 152.779568 78.801213) (xy 152.906692 78.8265) (xy 153.036307 78.8265) (xy 154.433307 78.8265)
+ (xy 154.560431 78.801213) (xy 154.68018 78.751612) (xy 154.78795 78.679602) (xy 154.879602 78.587951) (xy 154.951612 78.48018)
+ (xy 155.001213 78.360432) (xy 155.0265 78.233308) (xy 155.0265 78.132033) (xy 155.252364 78.190755) (xy 155.973119 77.47)
+ (xy 155.973119 77.943762) (xy 155.489245 78.427636) (xy 155.550394 78.662838) (xy 155.795779 78.768601) (xy 156.057083 78.824459)
+ (xy 156.324263 78.828266) (xy 156.587052 78.779876) (xy 156.835351 78.681148) (xy 156.869606 78.662838) (xy 156.930755 78.427636)
+ (xy 156.930755 86.672364) (xy 156.869606 86.437162) (xy 156.624221 86.331399) (xy 156.362917 86.275541) (xy 156.095737 86.271734)
+ (xy 155.832948 86.320124) (xy 155.584649 86.418852) (xy 155.550394 86.437162) (xy 155.489245 86.672364) (xy 156.21 87.393119)
+ (xy 156.930755 86.672364) (xy 156.930755 87.146126) (xy 156.446881 87.63) (xy 157.167636 88.350755) (xy 157.402838 88.289606)
+ (xy 157.508601 88.044221) (xy 157.564459 87.782917) (xy 157.568266 87.515737) (xy 157.568266 97.040737) (xy 157.519876 96.777948)
+ (xy 157.421148 96.529649) (xy 157.402838 96.495394) (xy 157.167636 96.434245) (xy 156.930755 96.671126) (xy 156.930755 96.197364)
+ (xy 156.930755 88.587636) (xy 156.21 87.866881) (xy 155.973119 88.103762) (xy 155.973119 87.63) (xy 155.252364 86.909245)
+ (xy 155.0265 86.967966) (xy 155.0265 86.866693) (xy 155.001213 86.739569) (xy 154.951612 86.61982) (xy 154.879602 86.51205)
+ (xy 154.787951 86.420398) (xy 154.68018 86.348388) (xy 154.560432 86.298787) (xy 154.433308 86.2735) (xy 154.303693 86.2735)
+ (xy 152.906693 86.2735) (xy 152.779569 86.298787) (xy 152.65982 86.348388) (xy 152.55205 86.420398) (xy 152.460398 86.512049)
+ (xy 152.388388 86.61982) (xy 152.374023 86.6545) (xy 150.257582 86.6545) (xy 150.134522 86.530577) (xy 149.903654 86.374855)
+ (xy 149.646937 86.266941) (xy 149.374149 86.210946) (xy 149.095679 86.209001) (xy 148.822135 86.261183) (xy 148.563936 86.365502)
+ (xy 148.330917 86.517985) (xy 148.131953 86.712825) (xy 147.974623 86.9426) (xy 147.86492 87.198557) (xy 147.807021 87.470948)
+ (xy 147.803133 87.749397) (xy 147.853404 88.023299) (xy 147.955918 88.28222) (xy 148.106771 88.516298) (xy 148.300217 88.716617)
+ (xy 148.528887 88.875547) (xy 148.581348 88.898466) (xy 148.563936 88.905502) (xy 148.330917 89.057985) (xy 148.191512 89.1945)
+ (xy 147.089066 89.1945) (xy 145.7555 87.860934) (xy 145.7555 81.635317) (xy 145.801571 81.683025) (xy 146.020016 81.834849)
+ (xy 146.26379 81.941351) (xy 146.523608 81.998476) (xy 146.789573 82.004047) (xy 147.051555 81.957852) (xy 147.299575 81.861652)
+ (xy 147.524186 81.719109) (xy 147.627735 81.6205) (xy 148.185934 81.6205) (xy 148.2495 81.684065) (xy 148.2495 82.787714)
+ (xy 148.131953 82.902825) (xy 147.974623 83.1326) (xy 147.86492 83.388557) (xy 147.807021 83.660948) (xy 147.803133 83.939397)
+ (xy 147.853404 84.213299) (xy 147.955918 84.47222) (xy 148.106771 84.706298) (xy 148.300217 84.906617) (xy 148.528887 85.065547)
+ (xy 148.784073 85.177035) (xy 149.056053 85.236834) (xy 149.334468 85.242666) (xy 149.608714 85.194309) (xy 149.868344 85.093605)
+ (xy 150.10347 84.94439) (xy 150.305134 84.752347) (xy 150.465657 84.524791) (xy 150.578924 84.27039) (xy 150.64062 83.998834)
+ (xy 150.645061 83.680762) (xy 150.590971 83.407589) (xy 150.484852 83.150125) (xy 150.330746 82.918176) (xy 150.2005 82.787017)
+ (xy 150.2005 81.28) (xy 150.191705 81.190307) (xy 150.183853 81.100556) (xy 150.182423 81.095633) (xy 150.181922 81.090524)
+ (xy 150.155865 81.00422) (xy 150.130738 80.91773) (xy 150.128377 80.913175) (xy 150.126895 80.908266) (xy 150.084606 80.828732)
+ (xy 150.043124 80.748705) (xy 150.039922 80.744694) (xy 150.037515 80.740167) (xy 149.980582 80.670361) (xy 149.924347 80.599916)
+ (xy 149.917307 80.592777) (xy 149.917186 80.592629) (xy 149.917048 80.592515) (xy 149.914783 80.590218) (xy 149.279783 79.955217)
+ (xy 149.210119 79.897995) (xy 149.141125 79.840102) (xy 149.136632 79.837632) (xy 149.132666 79.834374) (xy 149.05322 79.791775)
+ (xy 148.97429 79.748383) (xy 148.9694 79.746832) (xy 148.96488 79.744408) (xy 148.878726 79.718068) (xy 148.792818 79.690817)
+ (xy 148.787717 79.690244) (xy 148.782815 79.688746) (xy 148.6932 79.679643) (xy 148.60362 79.669595) (xy 148.593592 79.669525)
+ (xy 148.593405 79.669506) (xy 148.59323 79.669522) (xy 148.59 79.6695) (xy 147.628088 79.6695) (xy 147.55385 79.594741)
+ (xy 147.333306 79.445983) (xy 147.088069 79.342894) (xy 146.827479 79.289403) (xy 146.561462 79.287546) (xy 146.300151 79.337394)
+ (xy 146.053498 79.437048) (xy 145.830899 79.582712) (xy 145.7555 79.656548) (xy 145.7555 75.969065) (xy 148.009782 73.714783)
+ (xy 148.066975 73.645154) (xy 148.124898 73.576125) (xy 148.127368 73.571632) (xy 148.130625 73.567667) (xy 148.173205 73.488254)
+ (xy 148.216617 73.40929) (xy 148.218168 73.404398) (xy 148.220591 73.399881) (xy 148.246925 73.313745) (xy 148.274183 73.227818)
+ (xy 148.274754 73.222719) (xy 148.276254 73.217816) (xy 148.285357 73.128195) (xy 148.295405 73.03862) (xy 148.295474 73.028592)
+ (xy 148.295494 73.028405) (xy 148.295477 73.02823) (xy 148.2955 73.025) (xy 148.2955 71.12) (xy 148.286701 71.030266)
+ (xy 148.278853 70.940555) (xy 148.277422 70.935632) (xy 148.276922 70.930524) (xy 148.250869 70.844232) (xy 148.225738 70.75773)
+ (xy 148.223377 70.753175) (xy 148.221895 70.748266) (xy 148.179596 70.668713) (xy 148.138123 70.588704) (xy 148.134922 70.584694)
+ (xy 148.132515 70.580167) (xy 148.075573 70.510349) (xy 148.019346 70.439915) (xy 148.012307 70.432777) (xy 148.012186 70.432629)
+ (xy 148.012048 70.432515) (xy 148.009782 70.430217) (xy 147.487502 69.907936) (xy 147.487502 69.772002) (xy 147.652 69.9365)
+ (xy 148.083307 69.9365) (xy 148.210431 69.911213) (xy 148.33018 69.861612) (xy 148.43795 69.789602) (xy 148.529602 69.697951)
+ (xy 148.601612 69.59018) (xy 148.651213 69.470432) (xy 148.6765 69.343308) (xy 148.6765 69.213693) (xy 148.6765 68.912)
+ (xy 148.6765 68.248) (xy 148.6765 67.946307) (xy 148.6765 67.816692) (xy 148.651213 67.689568) (xy 148.601612 67.56982)
+ (xy 148.529602 67.462049) (xy 148.43795 67.370398) (xy 148.33018 67.298388) (xy 148.210431 67.248787) (xy 148.083307 67.2235)
+ (xy 147.652 67.2235) (xy 147.4875 67.388) (xy 147.4875 68.4125) (xy 148.512 68.4125) (xy 148.6765 68.248)
+ (xy 148.6765 68.912) (xy 148.512 68.7475) (xy 147.4875 68.7475) (xy 147.4875 68.7675) (xy 147.1525 68.7675)
+ (xy 147.1525 68.7475) (xy 147.1325 68.7475) (xy 147.1325 68.4125) (xy 147.1525 68.4125) (xy 147.1525 67.388)
+ (xy 146.988 67.2235) (xy 146.556693 67.2235) (xy 146.429569 67.248787) (xy 146.30982 67.298388) (xy 146.20205 67.370398)
+ (xy 146.110398 67.462049) (xy 146.038388 67.56982) (xy 145.988787 67.689568) (xy 145.9635 67.816692) (xy 145.9635 67.909956)
+ (xy 145.836299 67.718504) (xy 145.64885 67.529741) (xy 145.428306 67.380983) (xy 145.183069 67.277894) (xy 144.922479 67.224403)
+ (xy 144.656462 67.222546) (xy 144.395151 67.272394) (xy 144.148498 67.372048) (xy 143.925899 67.517712) (xy 143.735832 67.703839)
+ (xy 143.585538 67.923339) (xy 143.48074 68.16785) (xy 143.425431 68.428061) (xy 143.421716 68.694058) (xy 143.469739 68.955711)
+ (xy 143.567669 69.203054) (xy 143.711776 69.426664) (xy 143.896571 69.618025) (xy 144.115016 69.769849) (xy 144.300203 69.850755)
+ (xy 144.148498 69.912048) (xy 143.925899 70.057712) (xy 143.837273 70.1445) (xy 140.097582 70.1445) (xy 139.974522 70.020577)
+ (xy 139.743654 69.864855) (xy 139.486937 69.756941) (xy 139.214149 69.700946) (xy 138.935679 69.699001) (xy 138.662135 69.751183)
+ (xy 138.403936 69.855502) (xy 138.170917 70.007985) (xy 137.971953 70.202825) (xy 137.814623 70.4326) (xy 137.70492 70.688557)
+ (xy 137.647021 70.960948) (xy 137.643133 71.239397) (xy 137.693404 71.513299) (xy 137.795918 71.77222) (xy 137.946771 72.006298)
+ (xy 138.140217 72.206617) (xy 138.368887 72.365547) (xy 138.624073 72.477035) (xy 138.896053 72.536834) (xy 139.10668 72.541246)
+ (xy 140.6295 74.064065) (xy 140.6295 77.700934) (xy 140.421534 77.9089) (xy 140.48062 77.648834) (xy 140.485061 77.330762)
+ (xy 140.430971 77.057589) (xy 140.324852 76.800125) (xy 140.170746 76.568176) (xy 139.974522 76.370577) (xy 139.743654 76.214855)
+ (xy 139.486937 76.106941) (xy 139.214149 76.050946) (xy 138.935679 76.049001) (xy 138.662135 76.101183) (xy 138.403936 76.205502)
+ (xy 138.170917 76.357985) (xy 137.971953 76.552825) (xy 137.814623 76.7826) (xy 137.70492 77.038557) (xy 137.647021 77.310948)
+ (xy 137.643133 77.589397) (xy 137.693404 77.863299) (xy 137.795918 78.12222) (xy 137.946771 78.356298) (xy 138.140217 78.556617)
+ (xy 138.368887 78.715547) (xy 138.624073 78.827035) (xy 138.896053 78.886834) (xy 139.174468 78.892666) (xy 139.448714 78.844309)
+ (xy 139.509831 78.820603) (xy 139.041934 79.2885) (xy 138.301693 79.2885) (xy 138.174569 79.313787) (xy 138.05482 79.363388)
+ (xy 137.94705 79.435398) (xy 137.855398 79.527049) (xy 137.783388 79.63482) (xy 137.733787 79.754568) (xy 137.7085 79.881692)
+ (xy 137.7085 80.011307) (xy 137.7085 81.408307) (xy 137.733787 81.535431) (xy 137.783388 81.65518) (xy 137.855398 81.76295)
+ (xy 137.947049 81.854602) (xy 138.05482 81.926612) (xy 138.174568 81.976213) (xy 138.301692 82.0015) (xy 138.431307 82.0015)
+ (xy 139.828307 82.0015) (xy 139.955431 81.976213) (xy 140.07518 81.926612) (xy 140.18295 81.854602) (xy 140.274602 81.762951)
+ (xy 140.346612 81.65518) (xy 140.396213 81.535432) (xy 140.4215 81.408308) (xy 140.4215 81.278693) (xy 140.4215 80.668065)
+ (xy 142.294782 78.794783) (xy 142.351975 78.725154) (xy 142.409898 78.656125) (xy 142.412368 78.651632) (xy 142.415625 78.647667)
+ (xy 142.458205 78.568254) (xy 142.501617 78.48929) (xy 142.503168 78.484398) (xy 142.505591 78.479881) (xy 142.531925 78.393745)
+ (xy 142.559183 78.307818) (xy 142.559754 78.302719) (xy 142.561254 78.297816) (xy 142.570357 78.208195) (xy 142.580405 78.11862)
+ (xy 142.580474 78.108592) (xy 142.580494 78.108405) (xy 142.580477 78.10823) (xy 142.5805 78.105) (xy 142.5805 73.66)
+ (xy 142.571701 73.570266) (xy 142.563853 73.480555) (xy 142.562422 73.475632) (xy 142.561922 73.470524) (xy 142.535869 73.384232)
+ (xy 142.510738 73.29773) (xy 142.508377 73.293175) (xy 142.506895 73.288266) (xy 142.464596 73.208713) (xy 142.423123 73.128704)
+ (xy 142.419922 73.124694) (xy 142.417515 73.120167) (xy 142.360573 73.050349) (xy 142.304346 72.979915) (xy 142.297307 72.972777)
+ (xy 142.297186 72.972629) (xy 142.297048 72.972515) (xy 142.294782 72.970217) (xy 141.420065 72.0955) (xy 143.836191 72.0955)
+ (xy 143.896571 72.158025) (xy 144.115016 72.309849) (xy 144.35879 72.416351) (xy 144.618608 72.473476) (xy 144.884573 72.479047)
+ (xy 145.146555 72.432852) (xy 145.394575 72.336652) (xy 145.619186 72.194109) (xy 145.811833 72.010654) (xy 145.965177 71.793274)
+ (xy 146.073379 71.55025) (xy 146.12842 71.307985) (xy 146.3445 71.524065) (xy 146.3445 72.620934) (xy 144.090217 74.875217)
+ (xy 144.032995 74.94488) (xy 143.975102 75.013875) (xy 143.972632 75.018367) (xy 143.969374 75.022334) (xy 143.926775 75.101779)
+ (xy 143.883383 75.18071) (xy 143.881832 75.185599) (xy 143.879408 75.19012) (xy 143.853068 75.276273) (xy 143.825817 75.362182)
+ (xy 143.825244 75.367282) (xy 143.823746 75.372185) (xy 143.814643 75.461799) (xy 143.804595 75.55138) (xy 143.804525 75.561407)
+ (xy 143.804506 75.561595) (xy 143.804522 75.561769) (xy 143.8045 75.565) (xy 143.8045 88.265) (xy 143.813293 88.354688)
+ (xy 143.821147 88.444445) (xy 143.822577 88.449367) (xy 143.823078 88.454476) (xy 143.84913 88.540767) (xy 143.874262 88.62727)
+ (xy 143.876622 88.631823) (xy 143.878105 88.636734) (xy 143.920414 88.716307) (xy 143.961877 88.796295) (xy 143.965075 88.800302)
+ (xy 143.967485 88.804833) (xy 144.024444 88.874672) (xy 144.080654 88.945085) (xy 144.087696 88.952226) (xy 144.087814 88.952371)
+ (xy 144.087947 88.952481) (xy 144.090217 88.954783) (xy 145.995217 90.859783) (xy 146.06488 90.917004) (xy 146.133875 90.974898)
+ (xy 146.138367 90.977367) (xy 146.142334 90.980626) (xy 146.221779 91.023224) (xy 146.30071 91.066617) (xy 146.305599 91.068167)
+ (xy 146.31012 91.070592) (xy 146.396314 91.096944) (xy 146.482182 91.124183) (xy 146.487277 91.124754) (xy 146.492185 91.126255)
+ (xy 146.581849 91.135362) (xy 146.67138 91.145405) (xy 146.681407 91.145474) (xy 146.681595 91.145494) (xy 146.681769 91.145477)
+ (xy 146.685 91.1455) (xy 148.192912 91.1455) (xy 148.300217 91.256617) (xy 148.528887 91.415547) (xy 148.784073 91.527035)
+ (xy 149.056053 91.586834) (xy 149.334468 91.592666) (xy 149.608714 91.544309) (xy 149.868344 91.443605) (xy 150.10347 91.29439)
+ (xy 150.305134 91.102347) (xy 150.465657 90.874791) (xy 150.578924 90.62039) (xy 150.64062 90.348834) (xy 150.645061 90.030762)
+ (xy 150.590971 89.757589) (xy 150.484852 89.500125) (xy 150.330746 89.268176) (xy 150.134522 89.070577) (xy 149.903654 88.914855)
+ (xy 149.871749 88.901443) (xy 150.10347 88.75439) (xy 150.259819 88.6055) (xy 152.374023 88.6055) (xy 152.388388 88.64018)
+ (xy 152.460398 88.74795) (xy 152.552049 88.839602) (xy 152.65982 88.911612) (xy 152.779568 88.961213) (xy 152.906692 88.9865)
+ (xy 153.036307 88.9865) (xy 154.433307 88.9865) (xy 154.560431 88.961213) (xy 154.68018 88.911612) (xy 154.78795 88.839602)
+ (xy 154.879602 88.747951) (xy 154.951612 88.64018) (xy 155.001213 88.520432) (xy 155.0265 88.393308) (xy 155.0265 88.292033)
+ (xy 155.252364 88.350755) (xy 155.973119 87.63) (xy 155.973119 88.103762) (xy 155.489245 88.587636) (xy 155.550394 88.822838)
+ (xy 155.795779 88.928601) (xy 156.057083 88.984459) (xy 156.324263 88.988266) (xy 156.587052 88.939876) (xy 156.835351 88.841148)
+ (xy 156.869606 88.822838) (xy 156.930755 88.587636) (xy 156.930755 96.197364) (xy 156.869606 95.962162) (xy 156.624221 95.856399)
+ (xy 156.362917 95.800541) (xy 156.095737 95.796734) (xy 155.832948 95.845124) (xy 155.584649 95.943852) (xy 155.550394 95.962162)
+ (xy 155.489245 96.197364) (xy 156.21 96.918119) (xy 156.930755 96.197364) (xy 156.930755 96.671126) (xy 156.446881 97.155)
+ (xy 157.167636 97.875755) (xy 157.402838 97.814606) (xy 157.508601 97.569221) (xy 157.564459 97.307917) (xy 157.568266 97.040737)
+ (xy 157.568266 100.3087) (xy 155.650588 98.391022) (xy 155.795779 98.453601) (xy 156.057083 98.509459) (xy 156.324263 98.513266)
+ (xy 156.587052 98.464876) (xy 156.835351 98.366148) (xy 156.869606 98.347838) (xy 156.930755 98.112636) (xy 156.21 97.391881)
+ (xy 156.195858 97.406022) (xy 155.958977 97.169142) (xy 155.973119 97.155) (xy 155.252364 96.434245) (xy 155.0265 96.492966)
+ (xy 155.0265 96.391693) (xy 155.001213 96.264569) (xy 154.951612 96.14482) (xy 154.879602 96.03705) (xy 154.787951 95.945398)
+ (xy 154.68018 95.873388) (xy 154.560432 95.823787) (xy 154.433308 95.7985) (xy 154.303693 95.7985) (xy 152.906693 95.7985)
+ (xy 152.779569 95.823787) (xy 152.65982 95.873388) (xy 152.55205 95.945398) (xy 152.460398 96.037049) (xy 152.388388 96.14482)
+ (xy 152.338787 96.264568) (xy 152.3135 96.391692) (xy 152.3135 96.521307) (xy 152.3135 97.918307) (xy 152.338787 98.045431)
+ (xy 152.388388 98.16518) (xy 152.460398 98.27295) (xy 152.552049 98.364602) (xy 152.65982 98.436612) (xy 152.779568 98.486213)
+ (xy 152.906692 98.5115) (xy 153.011934 98.5115) (xy 156.695359 102.194924) (xy 156.693133 102.354397) (xy 156.743404 102.628299)
+ (xy 156.845918 102.88722) (xy 156.996771 103.121298) (xy 157.190217 103.321617) (xy 157.418887 103.480547) (xy 157.674073 103.592035)
+ (xy 157.946053 103.651834) (xy 158.224468 103.657666) (xy 158.498714 103.609309) (xy 158.758344 103.508605) (xy 158.99347 103.35939)
+ (xy 159.195134 103.167347) (xy 159.355657 102.939791) (xy 159.468924 102.68539) (xy 159.53062 102.413834) (xy 159.535061 102.095762)
+ (xy 159.535061 105.514) (xy 159.232973 105.514) (xy 149.414487 95.695513) (xy 149.331208 95.627107) (xy 149.248752 95.557918)
+ (xy 149.24338 95.554964) (xy 149.238641 95.551072) (xy 149.143699 95.500164) (xy 149.049336 95.448288) (xy 149.043492 95.446434)
+ (xy 149.038089 95.443537) (xy 148.935097 95.412049) (xy 148.832425 95.37948) (xy 148.82633 95.378796) (xy 148.820468 95.377004)
+ (xy 148.713345 95.366123) (xy 148.60628 95.354114) (xy 148.603488 95.354094) (xy 148.593102 95.33855) (xy 148.501451 95.246898)
+ (xy 148.39368 95.174888) (xy 148.273932 95.125287) (xy 148.146808 95.1) (xy 148.017193 95.1) (xy 146.493193 95.1)
+ (xy 146.366069 95.125287) (xy 146.24632 95.174888) (xy 146.13855 95.246898) (xy 146.046898 95.338549) (xy 146.036574 95.354)
+ (xy 144.78 95.354) (xy 144.671552 95.354) (xy 144.627951 95.310398) (xy 144.52018 95.238388) (xy 144.400432 95.188787)
+ (xy 144.273308 95.1635) (xy 144.143693 95.1635) (xy 142.746693 95.1635) (xy 142.619569 95.188787) (xy 142.49982 95.238388)
+ (xy 142.39205 95.310398) (xy 142.300398 95.402049) (xy 142.228388 95.50982) (xy 142.178787 95.629568) (xy 142.1535 95.756692)
+ (xy 142.1535 95.849956) (xy 142.026299 95.658504) (xy 141.9455 95.577138) (xy 141.9455 85.09) (xy 141.936706 85.000311)
+ (xy 141.928853 84.910555) (xy 141.927422 84.905632) (xy 141.926922 84.900524) (xy 141.900869 84.814232) (xy 141.875738 84.72773)
+ (xy 141.873377 84.723176) (xy 141.871895 84.718266) (xy 141.829585 84.638692) (xy 141.788123 84.558705) (xy 141.784924 84.554697)
+ (xy 141.782515 84.550167) (xy 141.725555 84.480327) (xy 141.669346 84.409915) (xy 141.662303 84.402773) (xy 141.662186 84.402629)
+ (xy 141.662052 84.402518) (xy 141.659783 84.400217) (xy 140.389783 83.130217) (xy 140.320119 83.072995) (xy 140.251125 83.015102)
+ (xy 140.246632 83.012632) (xy 140.242666 83.009374) (xy 140.225068 82.999938) (xy 140.170746 82.918176) (xy 139.974522 82.720577)
+ (xy 139.743654 82.564855) (xy 139.486937 82.456941) (xy 139.214149 82.400946) (xy 138.935679 82.399001) (xy 138.662135 82.451183)
+ (xy 138.403936 82.555502) (xy 138.170917 82.707985) (xy 137.971953 82.902825) (xy 137.814623 83.1326) (xy 137.70492 83.388557)
+ (xy 137.647021 83.660948) (xy 137.643133 83.939397) (xy 137.693404 84.213299) (xy 137.795918 84.47222) (xy 137.946771 84.706298)
+ (xy 138.140217 84.906617) (xy 138.368887 85.065547) (xy 138.624073 85.177035) (xy 138.896053 85.236834) (xy 139.174468 85.242666)
+ (xy 139.448714 85.194309) (xy 139.625984 85.12555) (xy 139.9945 85.494066) (xy 139.9945 86.550694) (xy 139.974522 86.530577)
+ (xy 139.743654 86.374855) (xy 139.486937 86.266941) (xy 139.214149 86.210946) (xy 138.935679 86.209001) (xy 138.662135 86.261183)
+ (xy 138.403936 86.365502) (xy 138.253414 86.464) (xy 135.535817 86.464) (xy 135.535817 82.443303) (xy 135.485203 82.142803)
+ (xy 135.376936 81.857952) (xy 135.333736 81.777127) (xy 135.079146 81.692735) (xy 134.842265 81.929616) (xy 134.842265 81.455854)
+ (xy 134.757873 81.201264) (xy 134.479897 81.076399) (xy 134.182902 81.008165) (xy 133.878303 80.999183) (xy 133.577803 81.049797)
+ (xy 133.292952 81.158064) (xy 133.212127 81.201264) (xy 133.127735 81.455854) (xy 133.985 82.313119) (xy 134.842265 81.455854)
+ (xy 134.842265 81.929616) (xy 134.221881 82.55) (xy 135.079146 83.407265) (xy 135.333736 83.322873) (xy 135.458601 83.044897)
+ (xy 135.526835 82.747902) (xy 135.535817 82.443303) (xy 135.535817 86.464) (xy 134.842265 86.464) (xy 134.842265 83.644146)
+ (xy 133.985 82.786881) (xy 133.748119 83.023762) (xy 133.748119 82.55) (xy 132.890854 81.692735) (xy 132.636264 81.777127)
+ (xy 132.511399 82.055103) (xy 132.443165 82.352098) (xy 132.434183 82.656697) (xy 132.484797 82.957197) (xy 132.593064 83.242048)
+ (xy 132.636264 83.322873) (xy 132.890854 83.407265) (xy 133.748119 82.55) (xy 133.748119 83.023762) (xy 133.127735 83.644146)
+ (xy 133.212127 83.898736) (xy 133.490103 84.023601) (xy 133.787098 84.091835) (xy 134.091697 84.100817) (xy 134.392197 84.050203)
+ (xy 134.677048 83.941936) (xy 134.757873 83.898736) (xy 134.842265 83.644146) (xy 134.842265 86.464) (xy 134.62 86.464)
+ (xy 134.467973 86.464) (xy 129.69249 81.688516) (xy 129.69249 78.628261) (xy 129.643358 78.352894) (xy 129.541449 78.092403)
+ (xy 129.514836 78.042615) (xy 129.273179 77.973702) (xy 129.036298 78.210583) (xy 129.036298 77.736821) (xy 128.967385 77.495164)
+ (xy 128.71113 77.38303) (xy 128.437922 77.323043) (xy 128.158261 77.31751) (xy 127.882894 77.366642) (xy 127.622403 77.468551)
+ (xy 127.572615 77.495164) (xy 127.503702 77.736821) (xy 128.27 78.503119) (xy 129.036298 77.736821) (xy 129.036298 78.210583)
+ (xy 128.506881 78.74) (xy 129.273179 79.506298) (xy 129.514836 79.437385) (xy 129.62697 79.18113) (xy 129.686957 78.907922)
+ (xy 129.69249 78.628261) (xy 129.69249 81.688516) (xy 128.162118 80.158144) (xy 128.381739 80.16249) (xy 128.657106 80.113358)
+ (xy 128.917597 80.011449) (xy 128.967385 79.984836) (xy 129.036298 79.743179) (xy 128.27 78.976881) (xy 128.255857 78.991022)
+ (xy 128.018976 78.754141) (xy 128.033119 78.74) (xy 127.266821 77.973702) (xy 127.025164 78.042615) (xy 126.91303 78.29887)
+ (xy 126.853043 78.572078) (xy 126.84751 78.851739) (xy 126.867152 78.961826) (xy 126.824336 78.938288) (xy 126.818492 78.936434)
+ (xy 126.813089 78.933537) (xy 126.710097 78.902049) (xy 126.607425 78.86948) (xy 126.60133 78.868796) (xy 126.595468 78.867004)
+ (xy 126.488345 78.856123) (xy 126.38128 78.844114) (xy 126.369286 78.84403) (xy 126.36907 78.844008) (xy 126.368868 78.844027)
+ (xy 126.365 78.844) (xy 124.991 78.844) (xy 124.991 68.744706) (xy 125.22992 68.849088) (xy 125.538388 68.916909)
+ (xy 125.854154 68.923523) (xy 126.165191 68.868679) (xy 126.459652 68.754465) (xy 126.726321 68.585232) (xy 126.95504 68.367426)
+ (xy 127.137098 68.109343) (xy 127.265559 67.820813) (xy 127.335532 67.512826) (xy 127.34057 67.152082) (xy 127.3405 67.151728)
+ (xy 127.3405 63.247308) (xy 127.3405 63.117693) (xy 127.3405 61.212693) (xy 127.315213 61.085569) (xy 127.265612 60.96582)
+ (xy 127.193602 60.85805) (xy 127.101951 60.766398) (xy 126.99418 60.694388) (xy 126.874432 60.644787) (xy 126.747308 60.6195)
+ (xy 126.617693 60.6195) (xy 125.499066 60.6195) (xy 125.4355 60.555934) (xy 125.4355 58.357368) (xy 125.636737 58.165733)
+ (xy 125.811617 57.917825) (xy 125.935014 57.640672) (xy 126.002227 57.344829) (xy 126.007066 56.998309) (xy 125.948139 56.700704)
+ (xy 125.832529 56.420213) (xy 125.66464 56.16752) (xy 125.450866 55.952249) (xy 125.199351 55.782599) (xy 124.919674 55.665034)
+ (xy 124.622488 55.604031) (xy 124.319113 55.601913) (xy 124.021104 55.658761) (xy 123.739813 55.77241) (xy 123.485954 55.938531)
+ (xy 123.269195 56.150796) (xy 123.252964 56.1745) (xy 120.738266 56.1745) (xy 120.738266 51.955737) (xy 120.689876 51.692948)
+ (xy 120.591148 51.444649) (xy 120.572838 51.410394) (xy 120.337636 51.349245) (xy 120.100755 51.586126) (xy 120.100755 51.112364)
+ (xy 120.039606 50.877162) (xy 119.794221 50.771399) (xy 119.532917 50.715541) (xy 119.265737 50.711734) (xy 119.002948 50.760124)
+ (xy 118.754649 50.858852) (xy 118.720394 50.877162) (xy 118.659245 51.112364) (xy 119.38 51.833119) (xy 120.100755 51.112364)
+ (xy 120.100755 51.586126) (xy 119.616881 52.07) (xy 120.337636 52.790755) (xy 120.572838 52.729606) (xy 120.678601 52.484221)
+ (xy 120.734459 52.222917) (xy 120.738266 51.955737) (xy 120.738266 56.1745) (xy 120.100755 56.1745) (xy 120.100755 53.027636)
+ (xy 119.38 52.306881) (xy 119.143119 52.543762) (xy 119.143119 52.07) (xy 118.422364 51.349245) (xy 118.187162 51.410394)
+ (xy 118.109329 51.590975) (xy 118.051148 51.444649) (xy 118.032838 51.410394) (xy 117.797636 51.349245) (xy 117.560755 51.586126)
+ (xy 117.560755 51.112364) (xy 117.499606 50.877162) (xy 117.254221 50.771399) (xy 116.992917 50.715541) (xy 116.725737 50.711734)
+ (xy 116.462948 50.760124) (xy 116.214649 50.858852) (xy 116.180394 50.877162) (xy 116.119245 51.112364) (xy 116.84 51.833119)
+ (xy 117.560755 51.112364) (xy 117.560755 51.586126) (xy 117.076881 52.07) (xy 117.797636 52.790755) (xy 118.032838 52.729606)
+ (xy 118.11067 52.549024) (xy 118.168852 52.695351) (xy 118.187162 52.729606) (xy 118.422364 52.790755) (xy 119.143119 52.07)
+ (xy 119.143119 52.543762) (xy 118.659245 53.027636) (xy 118.720394 53.262838) (xy 118.965779 53.368601) (xy 119.227083 53.424459)
+ (xy 119.494263 53.428266) (xy 119.757052 53.379876) (xy 120.005351 53.281148) (xy 120.039606 53.262838) (xy 120.100755 53.027636)
+ (xy 120.100755 56.1745) (xy 119.535791 56.1745) (xy 119.507013 56.138707) (xy 119.290917 55.957381) (xy 119.043718 55.821482)
+ (xy 118.77483 55.736185) (xy 118.494495 55.704741) (xy 118.474314 55.7046) (xy 117.745686 55.7046) (xy 117.560755 55.722732)
+ (xy 117.560755 53.027636) (xy 116.84 52.306881) (xy 116.119245 53.027636) (xy 116.180394 53.262838) (xy 116.425779 53.368601)
+ (xy 116.687083 53.424459) (xy 116.954263 53.428266) (xy 117.217052 53.379876) (xy 117.465351 53.281148) (xy 117.499606 53.262838)
+ (xy 117.560755 53.027636) (xy 117.560755 55.722732) (xy 117.46494 55.732127) (xy 117.194887 55.813661) (xy 116.945814 55.946096)
+ (xy 116.727208 56.124386) (xy 116.547395 56.341743) (xy 116.413225 56.589885) (xy 116.329808 56.859362) (xy 116.300321 57.139909)
+ (xy 116.325888 57.420841) (xy 116.405534 57.691456) (xy 116.536227 57.941448) (xy 116.712987 58.161293) (xy 116.929083 58.342619)
+ (xy 117.058247 58.413628) (xy 117.04652 58.418724) (xy 116.812108 58.581252) (xy 116.613908 58.786388) (xy 116.459536 59.02625)
+ (xy 116.362616 59.299975) (xy 116.484499 59.5225) (xy 117.9425 59.5225) (xy 117.9425 59.5025) (xy 118.2775 59.5025)
+ (xy 118.2775 59.5225) (xy 119.735501 59.5225) (xy 119.857384 59.299975) (xy 119.760464 59.02625) (xy 119.606092 58.786388)
+ (xy 119.407892 58.581252) (xy 119.17348 58.418724) (xy 119.161812 58.413654) (xy 119.274186 58.353904) (xy 119.492792 58.175614)
+ (xy 119.534249 58.1255) (xy 123.251354 58.1255) (xy 123.452507 58.3338) (xy 123.4845 58.356035) (xy 123.4845 60.96)
+ (xy 123.493293 61.049688) (xy 123.501147 61.139445) (xy 123.502577 61.144367) (xy 123.503078 61.149476) (xy 123.52913 61.235767)
+ (xy 123.554262 61.32227) (xy 123.556622 61.326823) (xy 123.558105 61.331734) (xy 123.600414 61.411307) (xy 123.641877 61.491295)
+ (xy 123.645075 61.495302) (xy 123.647485 61.499833) (xy 123.704444 61.569672) (xy 123.760654 61.640085) (xy 123.767696 61.647226)
+ (xy 123.767814 61.647371) (xy 123.767947 61.647481) (xy 123.770217 61.649783) (xy 124.1195 61.999066) (xy 124.1195 63.247307)
+ (xy 124.144787 63.374431) (xy 124.194388 63.49418) (xy 124.266398 63.60195) (xy 124.358049 63.693602) (xy 124.46582 63.765612)
+ (xy 124.585568 63.815213) (xy 124.712692 63.8405) (xy 124.842307 63.8405) (xy 126.747307 63.8405) (xy 126.874431 63.815213)
+ (xy 126.99418 63.765612) (xy 127.10195 63.693602) (xy 127.193602 63.601951) (xy 127.265612 63.49418) (xy 127.315213 63.374432)
+ (xy 127.3405 63.247308) (xy 127.3405 67.151728) (xy 127.279223 66.842262) (xy 127.158868 66.550257) (xy 126.984087 66.287191)
+ (xy 126.761539 66.063084) (xy 126.499699 65.886471) (xy 126.208542 65.76408) (xy 125.899158 65.700572) (xy 125.58333 65.698367)
+ (xy 125.273089 65.757549) (xy 124.980251 65.875863) (xy 124.715971 66.048803) (xy 124.618759 66.144) (xy 123.825 66.144)
+ (xy 123.672973 66.144) (xy 121.474487 63.945513) (xy 121.391208 63.877107) (xy 121.308752 63.807918) (xy 121.30338 63.804964)
+ (xy 121.298641 63.801072) (xy 121.203699 63.750164) (xy 121.109336 63.698288) (xy 121.103492 63.696434) (xy 121.098089 63.693537)
+ (xy 120.995097 63.662049) (xy 120.892425 63.62948) (xy 120.88633 63.628796) (xy 120.880468 63.627004) (xy 120.773345 63.616123)
+ (xy 120.66628 63.604114) (xy 120.654286 63.60403) (xy 120.65407 63.604008) (xy 120.653868 63.604027) (xy 120.65 63.604)
+ (xy 119.32264 63.604) (xy 119.290917 63.577381) (xy 119.161752 63.506371) (xy 119.17348 63.501276) (xy 119.407892 63.338748)
+ (xy 119.606092 63.133612) (xy 119.760464 62.89375) (xy 119.857384 62.620025) (xy 119.857384 61.839975) (xy 119.760464 61.56625)
+ (xy 119.606092 61.326388) (xy 119.407892 61.121252) (xy 119.17532 60.96) (xy 119.407892 60.798748) (xy 119.606092 60.593612)
+ (xy 119.760464 60.35375) (xy 119.857384 60.080025) (xy 119.735501 59.8575) (xy 118.2775 59.8575) (xy 118.2775 60.7846)
+ (xy 118.2775 61.1354) (xy 118.2775 62.0625) (xy 119.735501 62.0625) (xy 119.857384 61.839975) (xy 119.857384 62.620025)
+ (xy 119.735501 62.3975) (xy 118.2775 62.3975) (xy 118.2775 62.4175) (xy 117.9425 62.4175) (xy 117.9425 62.3975)
+ (xy 117.9425 62.0625) (xy 117.9425 61.1354) (xy 117.9425 60.7846) (xy 117.9425 59.8575) (xy 116.484499 59.8575)
+ (xy 116.362616 60.080025) (xy 116.459536 60.35375) (xy 116.613908 60.593612) (xy 116.812108 60.798748) (xy 117.044679 60.96)
+ (xy 116.812108 61.121252) (xy 116.613908 61.326388) (xy 116.459536 61.56625) (xy 116.362616 61.839975) (xy 116.484499 62.0625)
+ (xy 117.9425 62.0625) (xy 117.9425 62.3975) (xy 116.484499 62.3975) (xy 116.362616 62.620025) (xy 116.459536 62.89375)
+ (xy 116.613908 63.133612) (xy 116.812108 63.338748) (xy 117.04652 63.501276) (xy 117.058187 63.506345) (xy 116.945814 63.566096)
+ (xy 116.727208 63.744386) (xy 116.547395 63.961743) (xy 116.413225 64.209885) (xy 116.329808 64.479362) (xy 116.300321 64.759909)
+ (xy 116.325888 65.040841) (xy 116.405534 65.311456) (xy 116.536227 65.561448) (xy 116.712987 65.781293) (xy 116.929083 65.962619)
+ (xy 117.176282 66.098518) (xy 117.44517 66.183815) (xy 117.725505 66.215259) (xy 117.745686 66.2154) (xy 118.474314 66.2154)
+ (xy 118.75506 66.187873) (xy 119.025113 66.106339) (xy 119.274186 65.973904) (xy 119.320661 65.936) (xy 120.167026 65.936)
+ (xy 122.365513 68.134486) (xy 122.448761 68.202867) (xy 122.531248 68.272082) (xy 122.536619 68.275035) (xy 122.541359 68.278928)
+ (xy 122.6363 68.329835) (xy 122.659 68.342314) (xy 122.659 79.375) (xy 122.669509 79.482188) (xy 122.678897 79.589487)
+ (xy 122.680607 79.595375) (xy 122.681206 79.601477) (xy 122.712345 79.704616) (xy 122.742386 79.808015) (xy 122.745205 79.813455)
+ (xy 122.746979 79.819328) (xy 122.797558 79.914453) (xy 122.84711 80.010049) (xy 122.850935 80.01484) (xy 122.853814 80.020255)
+ (xy 122.921876 80.103707) (xy 122.989082 80.187894) (xy 122.997505 80.196436) (xy 122.997641 80.196603) (xy 122.997794 80.19673)
+ (xy 123.000513 80.199487) (xy 123.635514 80.834487) (xy 123.718766 80.902871) (xy 123.801248 80.972082) (xy 123.806619 80.975035)
+ (xy 123.811359 80.978928) (xy 123.906316 81.029844) (xy 124.000664 81.081712) (xy 124.006505 81.083564) (xy 124.011912 81.086464)
+ (xy 124.114975 81.117973) (xy 124.217575 81.15052) (xy 124.223664 81.151202) (xy 124.229532 81.152997) (xy 124.336704 81.163882)
+ (xy 124.44372 81.175886) (xy 124.455713 81.175969) (xy 124.45593 81.175992) (xy 124.456131 81.175972) (xy 124.46 81.176)
+ (xy 125.882026 81.176) (xy 133.160513 88.454486) (xy 133.243761 88.522867) (xy 133.326248 88.592082) (xy 133.331619 88.595035)
+ (xy 133.336359 88.598928) (xy 133.4313 88.649835) (xy 133.454 88.662314) (xy 133.454 89.052026) (xy 130.327026 92.179)
+ (xy 128.5942 92.179) (xy 128.670604 92.130513) (xy 128.908341 91.904119) (xy 129.097577 91.63586) (xy 129.231104 91.335953)
+ (xy 129.303836 91.015823) (xy 129.309072 90.640856) (xy 129.309072 85.560856) (xy 129.245307 85.23882) (xy 129.120206 84.935302)
+ (xy 128.938534 84.661864) (xy 128.707211 84.42892) (xy 128.435047 84.245343) (xy 128.132411 84.118126) (xy 127.810827 84.052115)
+ (xy 127.482547 84.049823) (xy 127.160073 84.111338) (xy 126.879331 84.224765) (xy 121.6255 78.970934) (xy 121.6255 76.2)
+ (xy 121.616705 76.110307) (xy 121.608853 76.020556) (xy 121.607423 76.015633) (xy 121.606922 76.010524) (xy 121.580865 75.92422)
+ (xy 121.555738 75.83773) (xy 121.553377 75.833175) (xy 121.551895 75.828266) (xy 121.509606 75.748732) (xy 121.468124 75.668705)
+ (xy 121.464922 75.664694) (xy 121.462515 75.660167) (xy 121.405582 75.590361) (xy 121.349347 75.519916) (xy 121.342307 75.512777)
+ (xy 121.342186 75.512629) (xy 121.342048 75.512515) (xy 121.339783 75.510218) (xy 120.704783 74.875217) (xy 120.635119 74.817995)
+ (xy 120.566125 74.760102) (xy 120.561632 74.757632) (xy 120.557666 74.754374) (xy 120.47822 74.711775) (xy 120.39929 74.668383)
+ (xy 120.3944 74.666832) (xy 120.38988 74.664408) (xy 120.303726 74.638068) (xy 120.217818 74.610817) (xy 120.212717 74.610244)
+ (xy 120.207815 74.608746) (xy 120.1182 74.599643) (xy 120.02862 74.589595) (xy 120.018592 74.589525) (xy 120.018405 74.589506)
+ (xy 120.01823 74.589522) (xy 120.015 74.5895) (xy 119.142582 74.5895) (xy 119.019522 74.465577) (xy 118.788654 74.309855)
+ (xy 118.531937 74.201941) (xy 118.259149 74.145946) (xy 117.980679 74.144001) (xy 117.707135 74.196183) (xy 117.448936 74.300502)
+ (xy 117.215917 74.452985) (xy 117.016953 74.647825) (xy 116.859623 74.8776) (xy 116.74992 75.133557) (xy 116.692021 75.405948)
+ (xy 116.688133 75.684397) (xy 116.738404 75.958299) (xy 116.840918 76.21722) (xy 116.991771 76.451298) (xy 117.185217 76.651617)
+ (xy 117.413887 76.810547) (xy 117.669073 76.922035) (xy 117.941053 76.981834) (xy 118.219468 76.987666) (xy 118.493714 76.939309)
+ (xy 118.753344 76.838605) (xy 118.98847 76.68939) (xy 119.144819 76.5405) (xy 119.610934 76.5405) (xy 119.6745 76.604065)
+ (xy 119.6745 79.375) (xy 119.683293 79.464688) (xy 119.691147 79.554445) (xy 119.692577 79.559367) (xy 119.693078 79.564476)
+ (xy 119.71913 79.650767) (xy 119.744262 79.73727) (xy 119.746622 79.741823) (xy 119.748105 79.746734) (xy 119.790414 79.826307)
+ (xy 119.831877 79.906295) (xy 119.835075 79.910302) (xy 119.837485 79.914833) (xy 119.894444 79.984672) (xy 119.950654 80.055085)
+ (xy 119.957696 80.062226) (xy 119.957814 80.062371) (xy 119.957947 80.062481) (xy 119.960217 80.064783) (xy 126.00322 86.107786)
+ (xy 126.018062 86.18865) (xy 126.138913 86.493884) (xy 126.316749 86.769833) (xy 126.544798 87.005984) (xy 126.814371 87.193342)
+ (xy 127.115203 87.324772) (xy 127.435833 87.395267) (xy 127.764049 87.402142) (xy 128.08735 87.345136) (xy 128.393421 87.226419)
+ (xy 128.670604 87.050513) (xy 128.908341 86.824119) (xy 129.097577 86.55586) (xy 129.231104 86.255953) (xy 129.303836 85.935823)
+ (xy 129.309072 85.560856) (xy 129.309072 90.640856) (xy 129.245307 90.31882) (xy 129.120206 90.015302) (xy 128.938534 89.741864)
+ (xy 128.707211 89.50892) (xy 128.435047 89.325343) (xy 128.132411 89.198126) (xy 127.810827 89.132115) (xy 127.482547 89.129823)
+ (xy 127.160073 89.191338) (xy 126.85569 89.314317) (xy 126.58099 89.494076) (xy 126.346437 89.723767) (xy 126.27404 89.8295)
+ (xy 126.134066 89.8295) (xy 125.4355 89.130934) (xy 125.4355 86.36) (xy 125.426706 86.270311) (xy 125.418853 86.180555)
+ (xy 125.417422 86.175632) (xy 125.416922 86.170524) (xy 125.390869 86.084232) (xy 125.365738 85.99773) (xy 125.363377 85.993176)
+ (xy 125.361895 85.988266) (xy 125.319585 85.908692) (xy 125.278123 85.828705) (xy 125.274924 85.824697) (xy 125.272515 85.820167)
+ (xy 125.215555 85.750327) (xy 125.159346 85.679915) (xy 125.152303 85.672773) (xy 125.152186 85.672629) (xy 125.152052 85.672518)
+ (xy 125.149783 85.670217) (xy 119.170556 79.69099) (xy 119.190134 79.672347) (xy 119.350657 79.444791) (xy 119.463924 79.19039)
+ (xy 119.52562 78.918834) (xy 119.530061 78.600762) (xy 119.475971 78.327589) (xy 119.369852 78.070125) (xy 119.215746 77.838176)
+ (xy 119.019522 77.640577) (xy 118.788654 77.484855) (xy 118.531937 77.376941) (xy 118.259149 77.320946) (xy 117.980679 77.319001)
+ (xy 117.707135 77.371183) (xy 117.448936 77.475502) (xy 117.215917 77.627985) (xy 117.016953 77.822825) (xy 116.859623 78.0526)
+ (xy 116.74992 78.308557) (xy 116.692021 78.580948) (xy 116.688133 78.859397) (xy 116.738404 79.133299) (xy 116.840918 79.39222)
+ (xy 116.991771 79.626298) (xy 117.1345 79.774098) (xy 117.1345 80.01) (xy 117.143293 80.099688) (xy 117.151147 80.189445)
+ (xy 117.152577 80.194367) (xy 117.153078 80.199476) (xy 117.17913 80.285767) (xy 117.204262 80.37227) (xy 117.206622 80.376823)
+ (xy 117.208105 80.381734) (xy 117.250414 80.461307) (xy 117.291877 80.541295) (xy 117.295075 80.545302) (xy 117.297485 80.549833)
+ (xy 117.354444 80.619672) (xy 117.410654 80.690085) (xy 117.417696 80.697226) (xy 117.417814 80.697371) (xy 117.417947 80.697481)
+ (xy 117.420217 80.699783) (xy 123.4845 86.764066) (xy 123.4845 89.535) (xy 123.493293 89.624688) (xy 123.501147 89.714445)
+ (xy 123.502577 89.719367) (xy 123.503078 89.724476) (xy 123.52913 89.810767) (xy 123.554262 89.89727) (xy 123.556622 89.901823)
+ (xy 123.558105 89.906734) (xy 123.600414 89.986307) (xy 123.641877 90.066295) (xy 123.645075 90.070302) (xy 123.647485 90.074833)
+ (xy 123.704444 90.144672) (xy 123.760654 90.215085) (xy 123.767696 90.222226) (xy 123.767814 90.222371) (xy 123.767947 90.222481)
+ (xy 123.770217 90.224783) (xy 125.040217 91.494783) (xy 125.10988 91.552004) (xy 125.178875 91.609898) (xy 125.183367 91.612367)
+ (xy 125.187334 91.615626) (xy 125.266798 91.658234) (xy 125.34571 91.701617) (xy 125.350596 91.703167) (xy 125.355119 91.705592)
+ (xy 125.441287 91.731935) (xy 125.527182 91.759183) (xy 125.532282 91.759755) (xy 125.537185 91.761254) (xy 125.626799 91.770356)
+ (xy 125.71638 91.780405) (xy 125.726407 91.780474) (xy 125.726595 91.780494) (xy 125.726769 91.780477) (xy 125.73 91.7805)
+ (xy 126.272067 91.7805) (xy 126.316749 91.849833) (xy 126.544798 92.085984) (xy 126.67863 92.179) (xy 119.149072 92.179)
+ (xy 119.149072 88.100856) (xy 119.085307 87.77882) (xy 118.960206 87.475302) (xy 118.778534 87.201864) (xy 118.547211 86.96892)
+ (xy 118.4505 86.903687) (xy 118.4505 84.455) (xy 118.441705 84.365307) (xy 118.433853 84.275556) (xy 118.432423 84.270633)
+ (xy 118.431922 84.265524) (xy 118.405865 84.17922) (xy 118.380738 84.09273) (xy 118.378377 84.088176) (xy 118.376895 84.083266)
+ (xy 118.334585 84.003692) (xy 118.293123 83.923705) (xy 118.289923 83.919697) (xy 118.287515 83.915167) (xy 118.23056 83.845333)
+ (xy 118.174347 83.774916) (xy 118.167307 83.767777) (xy 118.167186 83.767629) (xy 118.167048 83.767515) (xy 118.164783 83.765218)
+ (xy 114.6405 80.240934) (xy 114.6405 60.96) (xy 114.631706 60.870311) (xy 114.623853 60.780555) (xy 114.622422 60.775632)
+ (xy 114.621922 60.770524) (xy 114.595869 60.684232) (xy 114.570738 60.59773) (xy 114.568377 60.593176) (xy 114.566895 60.588266)
+ (xy 114.524585 60.508692) (xy 114.483123 60.428705) (xy 114.479924 60.424697) (xy 114.477515 60.420167) (xy 114.420555 60.350327)
+ (xy 114.364346 60.279915) (xy 114.357303 60.272773) (xy 114.357186 60.272629) (xy 114.357052 60.272518) (xy 114.354783 60.270217)
+ (xy 113.084783 59.000217) (xy 113.015119 58.942995) (xy 112.946125 58.885102) (xy 112.941632 58.882632) (xy 112.937666 58.879374)
+ (xy 112.85822 58.836775) (xy 112.77929 58.793383) (xy 112.7744 58.791832) (xy 112.76988 58.789408) (xy 112.683726 58.763068)
+ (xy 112.597818 58.735817) (xy 112.592717 58.735244) (xy 112.587815 58.733746) (xy 112.4982 58.724643) (xy 112.40862 58.714595)
+ (xy 112.398592 58.714525) (xy 112.398405 58.714506) (xy 112.39823 58.714522) (xy 112.395 58.7145) (xy 111.915791 58.7145)
+ (xy 111.887013 58.678707) (xy 111.770499 58.58094) (xy 111.824931 58.570113) (xy 111.94468 58.520512) (xy 112.05245 58.448502)
+ (xy 112.144102 58.356851) (xy 112.216112 58.24908) (xy 112.265713 58.129332) (xy 112.291 58.002208) (xy 112.291 57.872593)
+ (xy 112.291 56.297793) (xy 112.265713 56.170669) (xy 112.216112 56.05092) (xy 112.144102 55.94315) (xy 112.052451 55.851498)
+ (xy 111.94468 55.779488) (xy 111.824932 55.729887) (xy 111.697808 55.7046) (xy 111.568193 55.7046) (xy 111.3639 55.7046)
+ (xy 111.3639 53.701981) (xy 112.121981 52.9439) (xy 113.258077 52.9439) (xy 113.416571 53.108025) (xy 113.635016 53.259849)
+ (xy 113.87879 53.366351) (xy 114.138608 53.423476) (xy 114.404573 53.429047) (xy 114.666555 53.382852) (xy 114.914575 53.286652)
+ (xy 115.139186 53.144109) (xy 115.331833 52.960654) (xy 115.485177 52.743274) (xy 115.571138 52.550202) (xy 115.628852 52.695351)
+ (xy 115.647162 52.729606) (xy 115.882364 52.790755) (xy 116.603119 52.07) (xy 115.882364 51.349245) (xy 115.647162 51.410394)
+ (xy 115.569585 51.590381) (xy 115.503514 51.43008) (xy 115.356299 51.208504) (xy 115.2755 51.127138) (xy 115.2755 49.291989)
+ (xy 115.380134 49.192347) (xy 115.540657 48.964791) (xy 115.653924 48.71039) (xy 115.71562 48.438834) (xy 115.720061 48.120762)
+ (xy 115.665971 47.847589) (xy 115.559852 47.590125) (xy 115.405746 47.358176) (xy 115.209522 47.160577) (xy 114.978654 47.004855)
+ (xy 114.721937 46.896941) (xy 114.449149 46.840946) (xy 114.170679 46.839001) (xy 113.897135 46.891183) (xy 113.638936 46.995502)
+ (xy 113.405917 47.147985) (xy 113.206953 47.342825) (xy 113.049623 47.5726) (xy 112.93992 47.828557) (xy 112.882021 48.100948)
+ (xy 112.878133 48.379397) (xy 112.928404 48.653299) (xy 113.030918 48.91222) (xy 113.181771 49.146298) (xy 113.3245 49.294098)
+ (xy 113.3245 51.126594) (xy 113.255832 51.193839) (xy 113.254283 51.1961) (xy 111.76 51.1961) (xy 111.679687 51.203974)
+ (xy 111.599245 51.211012) (xy 111.594829 51.212294) (xy 111.590259 51.212743) (xy 111.51296 51.23608) (xy 111.435462 51.258597)
+ (xy 111.431386 51.260709) (xy 111.426983 51.262039) (xy 111.355657 51.299963) (xy 111.28404 51.337086) (xy 111.28045 51.339951)
+ (xy 111.276391 51.34211) (xy 111.213818 51.393143) (xy 111.150747 51.443492) (xy 111.144353 51.449796) (xy 111.14422 51.449906)
+ (xy 111.144117 51.45003) (xy 111.142059 51.45206) (xy 109.872059 52.722059) (xy 109.820831 52.784424) (xy 109.768933 52.846275)
+ (xy 109.766717 52.850304) (xy 109.763803 52.853853) (xy 109.725668 52.924973) (xy 109.686768 52.995734) (xy 109.685378 53.000114)
+ (xy 109.683207 53.004164) (xy 109.659601 53.081372) (xy 109.635197 53.158306) (xy 109.634684 53.162871) (xy 109.633341 53.167267)
+ (xy 109.625182 53.247589) (xy 109.616185 53.327798) (xy 109.616122 53.336778) (xy 109.616105 53.33695) (xy 109.61612 53.33711)
+ (xy 109.6161 53.34) (xy 109.6161 55.7046) (xy 109.282193 55.7046) (xy 109.155069 55.729887) (xy 109.03532 55.779488)
+ (xy 108.92755 55.851498) (xy 108.835898 55.943149) (xy 108.763888 56.05092) (xy 108.714287 56.170668) (xy 108.689 56.297792)
+ (xy 108.689 56.427407) (xy 108.689 58.002207) (xy 108.714287 58.129331) (xy 108.763888 58.24908) (xy 108.835898 58.35685)
+ (xy 108.927549 58.448502) (xy 109.03532 58.520512) (xy 109.155068 58.570113) (xy 109.209518 58.580944) (xy 109.107208 58.664386)
+ (xy 108.927395 58.881743) (xy 108.793225 59.129885) (xy 108.709808 59.399362) (xy 108.680321 59.679909) (xy 108.705888 59.960841)
+ (xy 108.785534 60.231456) (xy 108.916227 60.481448) (xy 109.092987 60.701293) (xy 109.309083 60.882619) (xy 109.449977 60.960076)
+ (xy 109.325814 61.026096) (xy 109.107208 61.204386) (xy 108.927395 61.421743) (xy 108.793225 61.669885) (xy 108.709808 61.939362)
+ (xy 108.680321 62.219909) (xy 108.705888 62.500841) (xy 108.785534 62.771456) (xy 108.916227 63.021448) (xy 109.092987 63.241293)
+ (xy 109.309083 63.422619) (xy 109.449977 63.500076) (xy 109.325814 63.566096) (xy 109.107208 63.744386) (xy 108.927395 63.961743)
+ (xy 108.793225 64.209885) (xy 108.709808 64.479362) (xy 108.680321 64.759909) (xy 108.705888 65.040841) (xy 108.785534 65.311456)
+ (xy 108.916227 65.561448) (xy 109.092987 65.781293) (xy 109.309083 65.962619) (xy 109.556282 66.098518) (xy 109.82517 66.183815)
+ (xy 110.105505 66.215259) (xy 110.125686 66.2154) (xy 110.854314 66.2154) (xy 111.13506 66.187873) (xy 111.405113 66.106339)
+ (xy 111.654186 65.973904) (xy 111.872792 65.795614) (xy 112.052605 65.578257) (xy 112.186775 65.330115) (xy 112.270192 65.060638)
+ (xy 112.299679 64.780091) (xy 112.274112 64.499159) (xy 112.194466 64.228544) (xy 112.063773 63.978552) (xy 111.887013 63.758707)
+ (xy 111.670917 63.577381) (xy 111.530022 63.499923) (xy 111.654186 63.433904) (xy 111.872792 63.255614) (xy 112.052605 63.038257)
+ (xy 112.186775 62.790115) (xy 112.270192 62.520638) (xy 112.299679 62.240091) (xy 112.274112 61.959159) (xy 112.194466 61.688544)
+ (xy 112.063773 61.438552) (xy 111.887013 61.218707) (xy 111.670917 61.037381) (xy 111.530022 60.959923) (xy 111.654186 60.893904)
+ (xy 111.872792 60.715614) (xy 111.914249 60.6655) (xy 111.990934 60.6655) (xy 112.6895 61.364066) (xy 112.6895 80.645)
+ (xy 112.698293 80.734688) (xy 112.706147 80.824445) (xy 112.707577 80.829367) (xy 112.708078 80.834476) (xy 112.73413 80.920767)
+ (xy 112.759262 81.00727) (xy 112.761622 81.011823) (xy 112.763105 81.016734) (xy 112.805414 81.096307) (xy 112.846877 81.176295)
+ (xy 112.850075 81.180302) (xy 112.852485 81.184833) (xy 112.909444 81.254672) (xy 112.965654 81.325085) (xy 112.972696 81.332226)
+ (xy 112.972814 81.332371) (xy 112.972947 81.332481) (xy 112.975217 81.334783) (xy 116.4995 84.859065) (xy 116.4995 86.9027)
+ (xy 116.42099 86.954076) (xy 116.186437 87.183767) (xy 116.000965 87.454642) (xy 115.871638 87.756384) (xy 115.803383 88.077498)
+ (xy 115.798799 88.405755) (xy 115.858062 88.72865) (xy 115.978913 89.033884) (xy 116.156749 89.309833) (xy 116.384798 89.545984)
+ (xy 116.654371 89.733342) (xy 116.955203 89.864772) (xy 117.275833 89.935267) (xy 117.604049 89.942142) (xy 117.92735 89.885136)
+ (xy 118.233421 89.766419) (xy 118.510604 89.590513) (xy 118.748341 89.364119) (xy 118.937577 89.09586) (xy 119.071104 88.795953)
+ (xy 119.143836 88.475823) (xy 119.149072 88.100856) (xy 119.149072 92.179) (xy 115.466 92.179) (xy 115.466 88.265)
+ (xy 115.455489 88.157803) (xy 115.446103 88.050514) (xy 115.444392 88.044626) (xy 115.443794 88.038523) (xy 115.412664 87.935417)
+ (xy 115.382615 87.831985) (xy 115.379792 87.82654) (xy 115.378021 87.820672) (xy 115.32746 87.725582) (xy 115.27789 87.629951)
+ (xy 115.274064 87.625159) (xy 115.271186 87.619745) (xy 115.203123 87.536292) (xy 115.135918 87.452106) (xy 115.127497 87.443567)
+ (xy 115.127359 87.443397) (xy 115.127201 87.443266) (xy 115.124487 87.440514) (xy 111.656 83.972026) (xy 111.656 80.226476)
+ (xy 111.69068 80.212112) (xy 111.79845 80.140102) (xy 111.890102 80.048451) (xy 111.962112 79.94068) (xy 112.011713 79.820932)
+ (xy 112.037 79.693808) (xy 112.037 79.564193) (xy 112.037 77.786193) (xy 112.011713 77.659069) (xy 111.962112 77.53932)
+ (xy 111.890102 77.43155) (xy 111.798451 77.339898) (xy 111.69068 77.267888) (xy 111.656 77.253523) (xy 111.656 73.66)
+ (xy 111.64548 73.552717) (xy 111.636102 73.445513) (xy 111.634392 73.439629) (xy 111.633794 73.433523) (xy 111.602645 73.330355)
+ (xy 111.572614 73.226984) (xy 111.569793 73.221542) (xy 111.568021 73.215672) (xy 111.51743 73.120525) (xy 111.467889 73.024951)
+ (xy 111.464066 73.020163) (xy 111.461186 73.014745) (xy 111.393096 72.931259) (xy 111.325917 72.847105) (xy 111.317497 72.838567)
+ (xy 111.317359 72.838397) (xy 111.317201 72.838266) (xy 111.314486 72.835513) (xy 108.774487 70.295513) (xy 108.691208 70.227107)
+ (xy 108.608752 70.157918) (xy 108.60338 70.154964) (xy 108.598641 70.151072) (xy 108.503699 70.100164) (xy 108.409336 70.048288)
+ (xy 108.403492 70.046434) (xy 108.398089 70.043537) (xy 108.295097 70.012049) (xy 108.192425 69.97948) (xy 108.18633 69.978796)
+ (xy 108.180468 69.977004) (xy 108.073345 69.966123) (xy 107.96628 69.954114) (xy 107.954286 69.95403) (xy 107.95407 69.954008)
+ (xy 107.953868 69.954027) (xy 107.95 69.954) (xy 104.163 69.954) (xy 104.163 59.119808) (xy 104.163 58.990193)
+ (xy 104.163 50.100193) (xy 104.137713 49.973069) (xy 104.088112 49.85332) (xy 104.016102 49.74555) (xy 103.924451 49.653898)
+ (xy 103.81668 49.581888) (xy 103.696932 49.532287) (xy 103.569808 49.507) (xy 103.440193 49.507) (xy 94.550193 49.507)
+ (xy 94.423069 49.532287) (xy 94.30332 49.581888) (xy 94.19555 49.653898) (xy 94.103898 49.745549) (xy 94.031888 49.85332)
+ (xy 93.982287 49.973068) (xy 93.957 50.100192) (xy 93.957 50.229807) (xy 93.957 59.119807) (xy 93.982287 59.246931)
+ (xy 94.031888 59.36668) (xy 94.103898 59.47445) (xy 94.195549 59.566102) (xy 94.30332 59.638112) (xy 94.423068 59.687713)
+ (xy 94.550192 59.713) (xy 94.679807 59.713) (xy 103.569807 59.713) (xy 103.696931 59.687713) (xy 103.81668 59.638112)
+ (xy 103.92445 59.566102) (xy 104.016102 59.474451) (xy 104.088112 59.36668) (xy 104.137713 59.246932) (xy 104.163 59.119808)
+ (xy 104.163 69.954) (xy 102.622396 69.954) (xy 102.590866 69.922249) (xy 102.339351 69.752599) (xy 102.059674 69.635034)
+ (xy 101.762488 69.574031) (xy 101.459113 69.571913) (xy 101.161104 69.628761) (xy 100.879813 69.74241) (xy 100.625954 69.908531)
+ (xy 100.556012 69.977022) (xy 100.532112 69.91932) (xy 100.460102 69.81155) (xy 100.368451 69.719898) (xy 100.26068 69.647888)
+ (xy 100.140932 69.598287) (xy 100.013808 69.573) (xy 99.884193 69.573) (xy 99.392 69.573) (xy 99.2275 69.7375)
+ (xy 99.2275 70.9525) (xy 99.2475 70.9525) (xy 99.2475 71.2875) (xy 99.2275 71.2875) (xy 99.2275 72.5025)
+ (xy 99.392 72.667) (xy 99.884193 72.667) (xy 100.013808 72.667) (xy 100.140932 72.641713) (xy 100.26068 72.592112)
+ (xy 100.368451 72.520102) (xy 100.460102 72.42845) (xy 100.532112 72.32068) (xy 100.555134 72.265099) (xy 100.592507 72.3038)
+ (xy 100.841629 72.476944) (xy 101.119638 72.598403) (xy 101.415943 72.66355) (xy 101.719259 72.669904) (xy 102.018032 72.617222)
+ (xy 102.300882 72.507511) (xy 102.557037 72.344951) (xy 102.618941 72.286) (xy 107.467026 72.286) (xy 109.324 74.142973)
+ (xy 109.324 77.253523) (xy 109.28932 77.267888) (xy 109.18155 77.339898) (xy 109.089898 77.431549) (xy 109.017888 77.53932)
+ (xy 108.968287 77.659068) (xy 108.943 77.786192) (xy 108.943 77.915807) (xy 108.943 79.693807) (xy 108.968287 79.820931)
+ (xy 109.017888 79.94068) (xy 109.089898 80.04845) (xy 109.181549 80.140102) (xy 109.28932 80.212112) (xy 109.324 80.226476)
+ (xy 109.324 84.455) (xy 109.334509 84.562188) (xy 109.343897 84.669487) (xy 109.345607 84.675375) (xy 109.346206 84.681477)
+ (xy 109.377345 84.784616) (xy 109.407386 84.888015) (xy 109.410205 84.893455) (xy 109.411979 84.899328) (xy 109.462558 84.994453)
+ (xy 109.51211 85.090049) (xy 109.515935 85.09484) (xy 109.518814 85.100255) (xy 109.586876 85.183707) (xy 109.654082 85.267894)
+ (xy 109.662505 85.276436) (xy 109.662641 85.276603) (xy 109.662794 85.27673) (xy 109.665513 85.279487) (xy 113.134 88.747973)
+ (xy 113.134 93.345) (xy 113.134 97.155) (xy 113.144509 97.262188) (xy 113.153897 97.369487) (xy 113.155607 97.375375)
+ (xy 113.156206 97.381477) (xy 113.187345 97.484616) (xy 113.217386 97.588015) (xy 113.220205 97.593455) (xy 113.221979 97.599328)
+ (xy 113.272558 97.694453) (xy 113.32211 97.790049) (xy 113.325935 97.79484) (xy 113.328814 97.800255) (xy 113.396876 97.883707)
+ (xy 113.464082 97.967894) (xy 113.472505 97.976436) (xy 113.472641 97.976603) (xy 113.472794 97.97673) (xy 113.475513 97.979487)
+ (xy 114.404 98.907973) (xy 114.404 104.775) (xy 114.404 110.547359) (xy 114.377381 110.579083) (xy 114.36918 110.594)
+ (xy 111.405817 110.594) (xy 111.405817 90.063303) (xy 111.355203 89.762803) (xy 111.246936 89.477952) (xy 111.203736 89.397127)
+ (xy 110.949146 89.312735) (xy 110.712265 89.549616) (xy 110.712265 89.075854) (xy 110.627873 88.821264) (xy 110.349897 88.696399)
+ (xy 110.052902 88.628165) (xy 109.748303 88.619183) (xy 109.447803 88.669797) (xy 109.162952 88.778064) (xy 109.082127 88.821264)
+ (xy 108.997735 89.075854) (xy 109.855 89.933119) (xy 110.712265 89.075854) (xy 110.712265 89.549616) (xy 110.091881 90.17)
+ (xy 110.949146 91.027265) (xy 111.203736 90.942873) (xy 111.328601 90.664897) (xy 111.396835 90.367902) (xy 111.405817 90.063303)
+ (xy 111.405817 110.594) (xy 110.712265 110.594) (xy 110.712265 91.264146) (xy 109.855 90.406881) (xy 109.618119 90.643762)
+ (xy 109.618119 90.17) (xy 108.760854 89.312735) (xy 108.506264 89.397127) (xy 108.381399 89.675103) (xy 108.313165 89.972098)
+ (xy 108.304183 90.276697) (xy 108.354797 90.577197) (xy 108.463064 90.862048) (xy 108.506264 90.942873) (xy 108.760854 91.027265)
+ (xy 109.618119 90.17) (xy 109.618119 90.643762) (xy 108.997735 91.264146) (xy 109.082127 91.518736) (xy 109.360103 91.643601)
+ (xy 109.657098 91.711835) (xy 109.961697 91.720817) (xy 110.262197 91.670203) (xy 110.547048 91.561936) (xy 110.627873 91.518736)
+ (xy 110.712265 91.264146) (xy 110.712265 110.594) (xy 109.111552 110.594) (xy 109.067951 110.550398) (xy 108.977558 110.489999)
+ (xy 109.06795 110.429602) (xy 109.159602 110.337951) (xy 109.231612 110.23018) (xy 109.281213 110.110432) (xy 109.3065 109.983308)
+ (xy 109.3065 109.853693) (xy 109.3065 108.456693) (xy 109.281213 108.329569) (xy 109.231612 108.20982) (xy 109.159602 108.10205)
+ (xy 109.067951 108.010398) (xy 108.96018 107.938388) (xy 108.840432 107.888787) (xy 108.713308 107.8635) (xy 108.583693 107.8635)
+ (xy 107.186693 107.8635) (xy 107.059569 107.888787) (xy 106.93982 107.938388) (xy 106.83205 108.010398) (xy 106.740398 108.102049)
+ (xy 106.668388 108.20982) (xy 106.647863 108.25937) (xy 106.627555 108.261147) (xy 106.622632 108.262577) (xy 106.617524 108.263078)
+ (xy 106.531232 108.28913) (xy 106.44473 108.314262) (xy 106.440175 108.316622) (xy 106.435266 108.318105) (xy 106.355713 108.360403)
+ (xy 106.275704 108.401877) (xy 106.271694 108.405077) (xy 106.267167 108.407485) (xy 106.197349 108.464426) (xy 106.126915 108.520654)
+ (xy 106.119777 108.527692) (xy 106.119629 108.527814) (xy 106.119515 108.527951) (xy 106.117217 108.530218) (xy 103.862934 110.7845)
+ (xy 101.688266 110.7845) (xy 101.688266 109.105737) (xy 101.639876 108.842948) (xy 101.541148 108.594649) (xy 101.522838 108.560394)
+ (xy 101.287636 108.499245) (xy 101.050755 108.736126) (xy 101.050755 108.262364) (xy 100.989606 108.027162) (xy 100.744221 107.921399)
+ (xy 100.482917 107.865541) (xy 100.215737 107.861734) (xy 99.952948 107.910124) (xy 99.704649 108.008852) (xy 99.670394 108.027162)
+ (xy 99.609245 108.262364) (xy 100.33 108.983119) (xy 101.050755 108.262364) (xy 101.050755 108.736126) (xy 100.566881 109.22)
+ (xy 101.287636 109.940755) (xy 101.522838 109.879606) (xy 101.628601 109.634221) (xy 101.684459 109.372917) (xy 101.688266 109.105737)
+ (xy 101.688266 110.7845) (xy 101.273088 110.7845) (xy 101.19885 110.709741) (xy 100.978306 110.560983) (xy 100.808421 110.489569)
+ (xy 100.955351 110.431148) (xy 100.989606 110.412838) (xy 101.050755 110.177636) (xy 100.33 109.456881) (xy 100.093119 109.693762)
+ (xy 100.093119 109.22) (xy 99.372364 108.499245) (xy 99.137162 108.560394) (xy 99.09501 108.65819) (xy 99.061449 108.572403)
+ (xy 99.034836 108.522615) (xy 98.8925 108.482025) (xy 98.8925 72.5025) (xy 98.8925 71.2875) (xy 98.8725 71.2875)
+ (xy 98.8725 70.9525) (xy 98.8925 70.9525) (xy 98.8925 69.7375) (xy 98.728 69.573) (xy 98.235807 69.573)
+ (xy 98.106192 69.573) (xy 97.979068 69.598287) (xy 97.85932 69.647888) (xy 97.751549 69.719898) (xy 97.659898 69.81155)
+ (xy 97.587888 69.91932) (xy 97.564361 69.976119) (xy 97.510866 69.922249) (xy 97.259351 69.752599) (xy 96.979674 69.635034)
+ (xy 96.682488 69.574031) (xy 96.379113 69.571913) (xy 96.081104 69.628761) (xy 95.799813 69.74241) (xy 95.545954 69.908531)
+ (xy 95.499522 69.954) (xy 89.177066 69.954) (xy 89.177066 58.268309) (xy 89.118139 57.970704) (xy 89.002529 57.690213)
+ (xy 88.83464 57.43752) (xy 88.620866 57.222249) (xy 88.369351 57.052599) (xy 88.089674 56.935034) (xy 87.792488 56.874031)
+ (xy 87.489113 56.871913) (xy 87.191104 56.928761) (xy 86.909813 57.04241) (xy 86.655954 57.208531) (xy 86.439195 57.420796)
+ (xy 86.267794 57.671121) (xy 86.148279 57.949971) (xy 86.085203 58.246723) (xy 86.084224 58.316802) (xy 83.337026 61.064)
+ (xy 80.280155 61.064) (xy 80.241322 61.005551) (xy 79.9749 60.737262) (xy 79.661441 60.525831) (xy 79.312884 60.379312)
+ (xy 78.942506 60.303284) (xy 78.564415 60.300644) (xy 78.193012 60.371493) (xy 77.842443 60.513132) (xy 77.526062 60.720166)
+ (xy 77.25592 60.984709) (xy 77.042306 61.296685) (xy 76.893356 61.64421) (xy 76.814745 62.014048) (xy 76.809465 62.392112)
+ (xy 76.87772 62.764) (xy 77.016908 63.115549) (xy 77.221728 63.433368) (xy 77.484379 63.70535) (xy 77.794855 63.921137)
+ (xy 78.141332 64.072509) (xy 78.510613 64.153701) (xy 78.88863 64.161619) (xy 79.260986 64.095963) (xy 79.613498 63.959232)
+ (xy 79.932739 63.756636) (xy 80.206548 63.495891) (xy 80.277013 63.396) (xy 83.82 63.396) (xy 83.927188 63.38549)
+ (xy 84.034487 63.376103) (xy 84.040375 63.374392) (xy 84.046477 63.373794) (xy 84.149616 63.342654) (xy 84.253015 63.312614)
+ (xy 84.258455 63.309794) (xy 84.264328 63.308021) (xy 84.359453 63.257441) (xy 84.455049 63.20789) (xy 84.45984 63.204064)
+ (xy 84.465255 63.201186) (xy 84.548707 63.133123) (xy 84.632894 63.065918) (xy 84.641436 63.057494) (xy 84.641603 63.057359)
+ (xy 84.64173 63.057205) (xy 84.644487 63.054487) (xy 87.729483 59.969489) (xy 87.749259 59.969904) (xy 88.048032 59.917222)
+ (xy 88.330882 59.807511) (xy 88.587037 59.644951) (xy 88.806737 59.435733) (xy 88.981617 59.187825) (xy 89.105014 58.910672)
+ (xy 89.172227 58.614829) (xy 89.177066 58.268309) (xy 89.177066 69.954) (xy 89.116476 69.954) (xy 89.102112 69.91932)
+ (xy 89.030102 69.81155) (xy 88.938451 69.719898) (xy 88.83068 69.647888) (xy 88.710932 69.598287) (xy 88.583808 69.573)
+ (xy 88.454193 69.573) (xy 86.676193 69.573) (xy 86.549069 69.598287) (xy 86.42932 69.647888) (xy 86.32155 69.719898)
+ (xy 86.229898 69.811549) (xy 86.157888 69.91932) (xy 86.108287 70.039068) (xy 86.083 70.166192) (xy 86.083 70.295807)
+ (xy 86.083 71.018026) (xy 81.725513 75.375513) (xy 81.657107 75.458791) (xy 81.587918 75.541248) (xy 81.584964 75.546619)
+ (xy 81.581072 75.551359) (xy 81.530164 75.6463) (xy 81.478288 75.740664) (xy 81.476434 75.746507) (xy 81.473537 75.751911)
+ (xy 81.442049 75.854902) (xy 81.40948 75.957575) (xy 81.408796 75.963669) (xy 81.407004 75.969532) (xy 81.396123 76.076654)
+ (xy 81.384114 76.18372) (xy 81.38403 76.195713) (xy 81.384008 76.19593) (xy 81.384027 76.196131) (xy 81.384 76.2)
+ (xy 81.384 87.63) (xy 81.394509 87.737188) (xy 81.403897 87.844487) (xy 81.405607 87.850375) (xy 81.406206 87.856477)
+ (xy 81.437345 87.959616) (xy 81.467386 88.063015) (xy 81.470205 88.068455) (xy 81.471979 88.074328) (xy 81.522558 88.169453)
+ (xy 81.57211 88.265049) (xy 81.575935 88.26984) (xy 81.578814 88.275255) (xy 81.646876 88.358707) (xy 81.714082 88.442894)
+ (xy 81.722505 88.451436) (xy 81.722641 88.451603) (xy 81.722794 88.45173) (xy 81.725513 88.454487) (xy 82.908 89.636973)
+ (xy 82.908 91.123807) (xy 82.933287 91.250931) (xy 82.982888 91.37068) (xy 83.054898 91.47845) (xy 83.146549 91.570102)
+ (xy 83.25432 91.642112) (xy 83.374068 91.691713) (xy 83.501192 91.717) (xy 83.630807 91.717) (xy 85.408807 91.717)
+ (xy 85.535931 91.691713) (xy 85.65568 91.642112) (xy 85.76345 91.570102) (xy 85.855102 91.478451) (xy 85.927112 91.37068)
+ (xy 85.976713 91.250932) (xy 86.002 91.123808) (xy 86.002 90.994193) (xy 86.002 89.216193) (xy 85.976713 89.089069)
+ (xy 85.947265 89.017974) (xy 85.947265 79.834146) (xy 85.09 78.976881) (xy 84.232735 79.834146) (xy 84.317127 80.088736)
+ (xy 84.595103 80.213601) (xy 84.892098 80.281835) (xy 85.196697 80.290817) (xy 85.497197 80.240203) (xy 85.782048 80.131936)
+ (xy 85.862873 80.088736) (xy 85.947265 79.834146) (xy 85.947265 89.017974) (xy 85.927112 88.96932) (xy 85.855102 88.86155)
+ (xy 85.763451 88.769898) (xy 85.65568 88.697888) (xy 85.535932 88.648287) (xy 85.408808 88.623) (xy 85.279193 88.623)
+ (xy 85.191973 88.623) (xy 83.716 87.147026) (xy 83.716 79.465605) (xy 83.741264 79.512873) (xy 83.995854 79.597265)
+ (xy 84.853119 78.74) (xy 83.995854 77.882735) (xy 83.741264 77.967127) (xy 83.716 78.02337) (xy 83.716 76.682973)
+ (xy 87.731973 72.667) (xy 88.583807 72.667) (xy 88.710931 72.641713) (xy 88.83068 72.592112) (xy 88.93845 72.520102)
+ (xy 89.030102 72.428451) (xy 89.102112 72.32068) (xy 89.116476 72.286) (xy 95.495317 72.286) (xy 95.512507 72.3038)
+ (xy 95.761629 72.476944) (xy 96.039638 72.598403) (xy 96.335943 72.66355) (xy 96.639259 72.669904) (xy 96.938032 72.617222)
+ (xy 97.220882 72.507511) (xy 97.477037 72.344951) (xy 97.563741 72.262383) (xy 97.587888 72.32068) (xy 97.659898 72.42845)
+ (xy 97.751549 72.520102) (xy 97.85932 72.592112) (xy 97.979068 72.641713) (xy 98.106192 72.667) (xy 98.235807 72.667)
+ (xy 98.728 72.667) (xy 98.8925 72.5025) (xy 98.8925 108.482025) (xy 98.793179 108.453702) (xy 98.556298 108.690583)
+ (xy 98.556298 108.216821) (xy 98.487385 107.975164) (xy 98.23113 107.86303) (xy 97.957922 107.803043) (xy 97.678261 107.79751)
+ (xy 97.402894 107.846642) (xy 97.142403 107.948551) (xy 97.092615 107.975164) (xy 97.023702 108.216821) (xy 97.79 108.983119)
+ (xy 98.556298 108.216821) (xy 98.556298 108.690583) (xy 98.026881 109.22) (xy 98.793179 109.986298) (xy 99.034836 109.917385)
+ (xy 99.09386 109.782498) (xy 99.118852 109.845351) (xy 99.137162 109.879606) (xy 99.372364 109.940755) (xy 100.093119 109.22)
+ (xy 100.093119 109.693762) (xy 99.609245 110.177636) (xy 99.670394 110.412838) (xy 99.850703 110.490553) (xy 99.698498 110.552048)
+ (xy 99.475899 110.697712) (xy 99.387273 110.7845) (xy 98.822582 110.7845) (xy 98.699522 110.660577) (xy 98.468654 110.504855)
+ (xy 98.437164 110.491618) (xy 98.437597 110.491449) (xy 98.487385 110.464836) (xy 98.556298 110.223179) (xy 97.79 109.456881)
+ (xy 97.553119 109.693762) (xy 97.553119 109.22) (xy 96.786821 108.453702) (xy 96.545164 108.522615) (xy 96.43303 108.77887)
+ (xy 96.373043 109.052078) (xy 96.36751 109.331739) (xy 96.416642 109.607106) (xy 96.518551 109.867597) (xy 96.545164 109.917385)
+ (xy 96.786821 109.986298) (xy 97.553119 109.22) (xy 97.553119 109.693762) (xy 97.023702 110.223179) (xy 97.092615 110.464836)
+ (xy 97.146488 110.48841) (xy 97.128936 110.495502) (xy 96.895917 110.647985) (xy 96.696953 110.842825) (xy 96.539623 111.0726)
+ (xy 96.42992 111.328557) (xy 96.372021 111.600948) (xy 96.368133 111.879397) (xy 96.418404 112.153299) (xy 96.520918 112.41222)
+ (xy 96.671771 112.646298) (xy 96.71349 112.6895) (xy 88.712142 112.6895) (xy 88.870657 112.464791) (xy 88.983924 112.21039)
+ (xy 89.04562 111.938834) (xy 89.050061 111.620762) (xy 88.995971 111.347589) (xy 88.889852 111.090125) (xy 88.735746 110.858176)
+ (xy 88.6055 110.727017) (xy 88.6055 110.251989) (xy 88.710134 110.152347) (xy 88.870657 109.924791) (xy 88.983924 109.67039)
+ (xy 89.04562 109.398834) (xy 89.050061 109.080762) (xy 88.995971 108.807589) (xy 88.889852 108.550125) (xy 88.735746 108.318176)
+ (xy 88.539522 108.120577) (xy 88.308654 107.964855) (xy 88.051937 107.856941) (xy 87.779149 107.800946) (xy 87.500679 107.799001)
+ (xy 87.227135 107.851183) (xy 86.968936 107.955502) (xy 86.735917 108.107985) (xy 86.640817 108.201113) (xy 86.640817 78.633303)
+ (xy 86.590203 78.332803) (xy 86.481936 78.047952) (xy 86.438736 77.967127) (xy 86.184146 77.882735) (xy 85.947265 78.119616)
+ (xy 85.947265 77.645854) (xy 85.862873 77.391264) (xy 85.584897 77.266399) (xy 85.287902 77.198165) (xy 84.983303 77.189183)
+ (xy 84.682803 77.239797) (xy 84.397952 77.348064) (xy 84.317127 77.391264) (xy 84.232735 77.645854) (xy 85.09 78.503119)
+ (xy 85.947265 77.645854) (xy 85.947265 78.119616) (xy 85.326881 78.74) (xy 86.184146 79.597265) (xy 86.438736 79.512873)
+ (xy 86.563601 79.234897) (xy 86.631835 78.937902) (xy 86.640817 78.633303) (xy 86.640817 108.201113) (xy 86.536953 108.302825)
+ (xy 86.379623 108.5326) (xy 86.26992 108.788557) (xy 86.212021 109.060948) (xy 86.208133 109.339397) (xy 86.258404 109.613299)
+ (xy 86.360918 109.87222) (xy 86.511771 110.106298) (xy 86.6545 110.254098) (xy 86.6545 110.727714) (xy 86.596512 110.7845)
+ (xy 83.97249 110.7845) (xy 83.589383 110.7845) (xy 83.553181 110.748297) (xy 83.794836 110.679385) (xy 83.90697 110.42313)
+ (xy 83.966957 110.149922) (xy 83.97249 109.870261) (xy 83.923358 109.594894) (xy 83.821449 109.334403) (xy 83.794836 109.284615)
+ (xy 83.553179 109.215702) (xy 83.316298 109.452583) (xy 83.316298 108.978821) (xy 83.247385 108.737164) (xy 82.99113 108.62503)
+ (xy 82.717922 108.565043) (xy 82.57311 108.562177) (xy 82.57311 102.491685) (xy 82.475482 101.998627) (xy 82.283944 101.533922)
+ (xy 82.005793 101.115271) (xy 81.651622 100.758619) (xy 81.234923 100.477552) (xy 80.771567 100.282775) (xy 80.668 100.261515)
+ (xy 80.668 68.644807) (xy 80.668 67.642) (xy 80.668 66.978) (xy 80.668 65.975193) (xy 80.642713 65.848069)
+ (xy 80.593112 65.72832) (xy 80.521102 65.62055) (xy 80.429451 65.528898) (xy 80.32168 65.456888) (xy 80.201932 65.407287)
+ (xy 80.074808 65.382) (xy 79.945193 65.382) (xy 79.072 65.382) (xy 78.9075 65.5465) (xy 78.9075 67.1425)
+ (xy 80.5035 67.1425) (xy 80.668 66.978) (xy 80.668 67.642) (xy 80.5035 67.4775) (xy 78.9075 67.4775)
+ (xy 78.9075 69.0735) (xy 79.072 69.238) (xy 79.945193 69.238) (xy 80.074808 69.238) (xy 80.201932 69.212713)
+ (xy 80.32168 69.163112) (xy 80.429451 69.091102) (xy 80.521102 68.99945) (xy 80.593112 68.89168) (xy 80.642713 68.771931)
+ (xy 80.668 68.644807) (xy 80.668 100.261515) (xy 80.279203 100.181707) (xy 79.776585 100.178198) (xy 79.282858 100.272382)
+ (xy 78.816827 100.46067) (xy 78.5725 100.620553) (xy 78.5725 69.0735) (xy 78.5725 67.4775) (xy 78.5725 67.1425)
+ (xy 78.5725 65.5465) (xy 78.408 65.382) (xy 77.534807 65.382) (xy 77.405192 65.382) (xy 77.278068 65.407287)
+ (xy 77.15832 65.456888) (xy 77.050549 65.528898) (xy 76.958898 65.62055) (xy 76.886888 65.72832) (xy 76.837287 65.848069)
+ (xy 76.812 65.975193) (xy 76.812 66.978) (xy 76.9765 67.1425) (xy 78.5725 67.1425) (xy 78.5725 67.4775)
+ (xy 76.9765 67.4775) (xy 76.812 67.642) (xy 76.812 68.644807) (xy 76.837287 68.771931) (xy 76.886888 68.89168)
+ (xy 76.958898 68.99945) (xy 77.050549 69.091102) (xy 77.15832 69.163112) (xy 77.278068 69.212713) (xy 77.405192 69.238)
+ (xy 77.534807 69.238) (xy 78.408 69.238) (xy 78.5725 69.0735) (xy 78.5725 100.620553) (xy 78.396244 100.735892)
+ (xy 78.037128 101.087564) (xy 77.753159 101.502291) (xy 77.555152 101.964276) (xy 77.450649 102.455923) (xy 77.443631 102.958504)
+ (xy 77.534366 103.452877) (xy 77.719396 103.92021) (xy 77.991675 104.342705) (xy 78.340831 104.704267) (xy 78.753566 104.991124)
+ (xy 79.214157 105.192352) (xy 79.705062 105.300284) (xy 80.207582 105.310811) (xy 80.702576 105.22353) (xy 81.17119 105.041766)
+ (xy 81.595575 104.772444) (xy 81.959566 104.42582) (xy 82.249298 104.015098) (xy 82.453736 103.555923) (xy 82.565093 103.065783)
+ (xy 82.57311 102.491685) (xy 82.57311 108.562177) (xy 82.438261 108.55951) (xy 82.162894 108.608642) (xy 81.902403 108.710551)
+ (xy 81.852615 108.737164) (xy 81.783702 108.978821) (xy 82.55 109.745119) (xy 83.316298 108.978821) (xy 83.316298 109.452583)
+ (xy 82.786881 109.982) (xy 82.801023 109.996142) (xy 82.564141 110.233023) (xy 82.55 110.218881) (xy 82.313119 110.455762)
+ (xy 82.313119 109.982) (xy 81.546821 109.215702) (xy 81.305164 109.284615) (xy 81.19303 109.54087) (xy 81.133043 109.814078)
+ (xy 81.12751 110.093739) (xy 81.176642 110.369106) (xy 81.278551 110.629597) (xy 81.305164 110.679385) (xy 81.546821 110.748298)
+ (xy 82.313119 109.982) (xy 82.313119 110.455762) (xy 81.783702 110.985179) (xy 81.852615 111.226836) (xy 82.10887 111.33897)
+ (xy 82.205293 111.360141) (xy 82.160871 111.404562) (xy 82.147135 111.407183) (xy 81.888936 111.511502) (xy 81.655917 111.663985)
+ (xy 81.456953 111.858825) (xy 81.299623 112.0886) (xy 81.18992 112.344557) (xy 81.132021 112.616948) (xy 81.128133 112.895397)
+ (xy 81.178404 113.169299) (xy 81.189569 113.1975) (xy 81.042582 113.1975) (xy 80.919522 113.073577) (xy 80.688654 112.917855)
+ (xy 80.431937 112.809941) (xy 80.265866 112.775851) (xy 80.393714 112.753309) (xy 80.653344 112.652605) (xy 80.88847 112.50339)
+ (xy 81.090134 112.311347) (xy 81.250657 112.083791) (xy 81.363924 111.82939) (xy 81.42562 111.557834) (xy 81.430061 111.239762)
+ (xy 81.375971 110.966589) (xy 81.269852 110.709125) (xy 81.115746 110.477176) (xy 80.919522 110.279577) (xy 80.688654 110.123855)
+ (xy 80.431937 110.015941) (xy 80.159149 109.959946) (xy 79.880679 109.958001) (xy 79.607135 110.010183) (xy 79.348936 110.114502)
+ (xy 79.115917 110.266985) (xy 78.916953 110.461825) (xy 78.759623 110.6916) (xy 78.64992 110.947557) (xy 78.592021 111.219948)
+ (xy 78.588133 111.498397) (xy 78.638404 111.772299) (xy 78.740918 112.03122) (xy 78.891771 112.265298) (xy 79.085217 112.465617)
+ (xy 79.313887 112.624547) (xy 79.569073 112.736035) (xy 79.752715 112.776411) (xy 79.607135 112.804183) (xy 79.348936 112.908502)
+ (xy 79.115917 113.060985) (xy 78.916953 113.255825) (xy 78.759623 113.4856) (xy 78.64992 113.741557) (xy 78.592021 114.013948)
+ (xy 78.588133 114.292397) (xy 78.638404 114.566299) (xy 78.740918 114.82522) (xy 78.891771 115.059298) (xy 79.085217 115.259617)
+ (xy 79.313887 115.418547) (xy 79.517374 115.507448) (xy 79.348936 115.575502) (xy 79.115917 115.727985) (xy 78.976512 115.8645)
+ (xy 78.105 115.8645) (xy 78.015307 115.873294) (xy 77.925556 115.881147) (xy 77.920633 115.882576) (xy 77.915524 115.883078)
+ (xy 77.82922 115.909134) (xy 77.74273 115.934262) (xy 77.738175 115.936622) (xy 77.733266 115.938105) (xy 77.653732 115.980393)
+ (xy 77.573705 116.021876) (xy 77.569694 116.025077) (xy 77.565167 116.027485) (xy 77.495361 116.084417) (xy 77.424916 116.140653)
+ (xy 77.417777 116.147692) (xy 77.417629 116.147814) (xy 77.417515 116.147951) (xy 77.415218 116.150217) (xy 76.780217 116.785217)
+ (xy 76.722995 116.85488) (xy 76.665102 116.923875) (xy 76.662632 116.928367) (xy 76.659374 116.932334) (xy 76.616775 117.011779)
+ (xy 76.573383 117.09071) (xy 76.571832 117.095599) (xy 76.569408 117.10012) (xy 76.543068 117.186273) (xy 76.515817 117.272182)
+ (xy 76.515244 117.277282) (xy 76.513746 117.282185) (xy 76.504643 117.371799) (xy 76.494595 117.46138) (xy 76.494525 117.471407)
+ (xy 76.494506 117.471595) (xy 76.494522 117.471769) (xy 76.4945 117.475) (xy 76.4945 120.65) (xy 76.503293 120.739688)
+ (xy 76.511147 120.829445) (xy 76.512577 120.834367) (xy 76.513078 120.839476) (xy 76.53913 120.925767) (xy 76.564262 121.01227)
+ (xy 76.566622 121.016823) (xy 76.568105 121.021734) (xy 76.610414 121.101307) (xy 76.651877 121.181295) (xy 76.655075 121.185302)
+ (xy 76.657485 121.189833) (xy 76.714444 121.259672) (xy 76.770654 121.330085) (xy 76.777696 121.337226) (xy 76.777814 121.337371)
+ (xy 76.777947 121.337481) (xy 76.780217 121.339783) (xy 79.320217 123.879782) (xy 79.389845 123.936975) (xy 79.458875 123.994898)
+ (xy 79.463367 123.997368) (xy 79.467333 124.000625) (xy 79.546745 124.043205) (xy 79.62571 124.086617) (xy 79.630601 124.088168)
+ (xy 79.635119 124.090591) (xy 79.721254 124.116925) (xy 79.807182 124.144183) (xy 79.81228 124.144754) (xy 79.817184 124.146254)
+ (xy 79.906804 124.155357) (xy 79.99638 124.165405) (xy 80.006407 124.165474) (xy 80.006595 124.165494) (xy 80.006769 124.165477)
+ (xy 80.01 124.1655) (xy 84.685934 124.1655) (xy 85.670217 125.149783) (xy 85.73988 125.207004) (xy 85.808875 125.264898)
+ (xy 85.813367 125.267367) (xy 85.817334 125.270626) (xy 85.896798 125.313234) (xy 85.97571 125.356617) (xy 85.980596 125.358167)
+ (xy 85.985119 125.360592) (xy 86.071287 125.386935) (xy 86.157182 125.414183) (xy 86.162282 125.414755) (xy 86.167185 125.416254)
+ (xy 86.256799 125.425356) (xy 86.34638 125.435405) (xy 86.356407 125.435474) (xy 86.356595 125.435494) (xy 86.356769 125.435477)
+ (xy 86.36 125.4355) (xy 86.597912 125.4355) (xy 86.705217 125.546617) (xy 86.933887 125.705547) (xy 87.189073 125.817035)
+ (xy 87.461053 125.876834) (xy 87.739468 125.882666) (xy 88.013714 125.834309) (xy 88.273344 125.733605) (xy 88.50847 125.58439)
+ (xy 88.710134 125.392347) (xy 88.870657 125.164791) (xy 88.983924 124.91039) (xy 89.04562 124.638834) (xy 89.050061 124.320762)
+ (xy 88.995971 124.047589) (xy 88.889852 123.790125) (xy 88.735746 123.558176) (xy 88.6055 123.427017) (xy 88.6055 122.951989)
+ (xy 88.710134 122.852347) (xy 88.870657 122.624791) (xy 88.983924 122.37039) (xy 89.04562 122.098834) (xy 89.050061 121.780762)
+ (xy 88.995971 121.507589) (xy 88.889852 121.250125) (xy 88.735746 121.018176) (xy 88.539522 120.820577) (xy 88.308654 120.664855)
+ (xy 88.051937 120.556941) (xy 87.779149 120.500946) (xy 87.500679 120.499001) (xy 87.227135 120.551183) (xy 86.968936 120.655502)
+ (xy 86.735917 120.807985) (xy 86.536953 121.002825) (xy 86.379623 121.2326) (xy 86.26992 121.488557) (xy 86.212021 121.760948)
+ (xy 86.208133 122.039397) (xy 86.258404 122.313299) (xy 86.360918 122.57222) (xy 86.511771 122.806298) (xy 86.6545 122.954098)
+ (xy 86.6545 123.374934) (xy 85.779783 122.500217) (xy 85.710119 122.442995) (xy 85.641125 122.385102) (xy 85.636632 122.382632)
+ (xy 85.632666 122.379374) (xy 85.55322 122.336775) (xy 85.47429 122.293383) (xy 85.4694 122.291832) (xy 85.46488 122.289408)
+ (xy 85.378726 122.263068) (xy 85.292818 122.235817) (xy 85.287717 122.235244) (xy 85.282815 122.233746) (xy 85.1932 122.224643)
+ (xy 85.10362 122.214595) (xy 85.093592 122.214525) (xy 85.093405 122.214506) (xy 85.09323 122.214522) (xy 85.09 122.2145)
+ (xy 83.821052 122.2145) (xy 83.823102 122.212451) (xy 83.895112 122.10468) (xy 83.944713 121.984932) (xy 83.97 121.857808)
+ (xy 83.97 121.728193) (xy 83.97 120.204193) (xy 83.944713 120.077069) (xy 83.895112 119.95732) (xy 83.823102 119.84955)
+ (xy 83.731451 119.757898) (xy 83.62368 119.685888) (xy 83.503932 119.636287) (xy 83.376808 119.611) (xy 83.247193 119.611)
+ (xy 82.93451 119.611) (xy 83.193344 119.510605) (xy 83.42847 119.36139) (xy 83.630134 119.169347) (xy 83.790657 118.941791)
+ (xy 83.903924 118.68739) (xy 83.96562 118.415834) (xy 83.970061 118.097762) (xy 83.915971 117.824589) (xy 83.809852 117.567125)
+ (xy 83.655746 117.335176) (xy 83.459522 117.137577) (xy 83.228654 116.981855) (xy 83.040657 116.902828) (xy 83.193344 116.843605)
+ (xy 83.42847 116.69439) (xy 83.584819 116.5455) (xy 86.597912 116.5455) (xy 86.6545 116.604098) (xy 86.6545 117.077714)
+ (xy 86.536953 117.192825) (xy 86.379623 117.4226) (xy 86.26992 117.678557) (xy 86.212021 117.950948) (xy 86.208133 118.229397)
+ (xy 86.258404 118.503299) (xy 86.360918 118.76222) (xy 86.511771 118.996298) (xy 86.705217 119.196617) (xy 86.933887 119.355547)
+ (xy 87.189073 119.467035) (xy 87.461053 119.526834) (xy 87.739468 119.532666) (xy 88.013714 119.484309) (xy 88.273344 119.383605)
+ (xy 88.50847 119.23439) (xy 88.710134 119.042347) (xy 88.870657 118.814791) (xy 88.983924 118.56039) (xy 89.04562 118.288834)
+ (xy 89.050061 117.970762) (xy 88.995971 117.697589) (xy 88.889852 117.440125) (xy 88.735746 117.208176) (xy 88.6055 117.077017)
+ (xy 88.6055 116.601989) (xy 88.710134 116.502347) (xy 88.870657 116.274791) (xy 88.983924 116.02039) (xy 89.04562 115.748834)
+ (xy 89.050061 115.430762) (xy 88.995971 115.157589) (xy 88.889852 114.900125) (xy 88.735746 114.668176) (xy 88.708262 114.6405)
+ (xy 96.702625 114.6405) (xy 96.663121 114.680005) (xy 96.786818 114.803702) (xy 96.545164 114.872615) (xy 96.43303 115.12887)
+ (xy 96.373043 115.402078) (xy 96.36751 115.681739) (xy 96.416642 115.957106) (xy 96.518551 116.217597) (xy 96.545164 116.267385)
+ (xy 96.786821 116.336298) (xy 97.553119 115.57) (xy 97.538977 115.555858) (xy 97.775858 115.318977) (xy 97.79 115.333119)
+ (xy 97.804142 115.318977) (xy 98.041023 115.555858) (xy 98.026881 115.57) (xy 98.793179 116.336298) (xy 99.034836 116.267385)
+ (xy 99.09386 116.132498) (xy 99.118852 116.195351) (xy 99.137162 116.229606) (xy 99.372364 116.290755) (xy 100.093119 115.57)
+ (xy 100.078977 115.555858) (xy 100.315858 115.318977) (xy 100.33 115.333119) (xy 100.344142 115.318977) (xy 100.581023 115.555858)
+ (xy 100.566881 115.57) (xy 101.287636 116.290755) (xy 101.522838 116.229606) (xy 101.628601 115.984221) (xy 101.684459 115.722917)
+ (xy 101.688266 115.455737) (xy 101.639876 115.192948) (xy 101.541148 114.944649) (xy 101.522838 114.910394) (xy 101.287637 114.849245)
+ (xy 101.41176 114.725123) (xy 101.327137 114.6405) (xy 105.76452 114.6405) (xy 105.68273 114.664262) (xy 105.678176 114.666622)
+ (xy 105.673266 114.668105) (xy 105.593692 114.710414) (xy 105.513705 114.751877) (xy 105.509697 114.755075) (xy 105.505167 114.757485)
+ (xy 105.435327 114.814444) (xy 105.364915 114.870654) (xy 105.357777 114.877692) (xy 105.357629 114.877814) (xy 105.357515 114.877951)
+ (xy 105.355217 114.880218) (xy 101.688266 118.547167) (xy 101.565751 118.669682) (xy 101.623379 118.54025) (xy 101.682316 118.280837)
+ (xy 101.686559 117.976988) (xy 101.634888 117.716031) (xy 101.533514 117.47008) (xy 101.386299 117.248504) (xy 101.19885 117.059741)
+ (xy 100.978306 116.910983) (xy 100.808421 116.839569) (xy 100.955351 116.781148) (xy 100.989606 116.762838) (xy 101.050755 116.527636)
+ (xy 100.33 115.806881) (xy 100.093119 116.043762) (xy 99.609245 116.527636) (xy 99.670394 116.762838) (xy 99.850703 116.840553)
+ (xy 99.698498 116.902048) (xy 99.475899 117.047712) (xy 99.387273 117.1345) (xy 98.822582 117.1345) (xy 98.699522 117.010577)
+ (xy 98.468654 116.854855) (xy 98.437164 116.841618) (xy 98.437597 116.841449) (xy 98.487385 116.814836) (xy 98.556298 116.573179)
+ (xy 97.79 115.806881) (xy 97.553119 116.043762) (xy 97.023702 116.573179) (xy 97.092615 116.814836) (xy 97.146488 116.83841)
+ (xy 97.128936 116.845502) (xy 96.895917 116.997985) (xy 96.756512 117.1345) (xy 95.885 117.1345) (xy 95.795311 117.143293)
+ (xy 95.705555 117.151147) (xy 95.700632 117.152577) (xy 95.695524 117.153078) (xy 95.609232 117.17913) (xy 95.52273 117.204262)
+ (xy 95.518176 117.206622) (xy 95.513266 117.208105) (xy 95.433692 117.250414) (xy 95.353705 117.291877) (xy 95.349697 117.295075)
+ (xy 95.345167 117.297485) (xy 95.275327 117.354444) (xy 95.204915 117.410654) (xy 95.197773 117.417696) (xy 95.197629 117.417814)
+ (xy 95.197518 117.417947) (xy 95.195217 117.420217) (xy 93.925217 118.690217) (xy 93.867995 118.75988) (xy 93.810102 118.828875)
+ (xy 93.807632 118.833367) (xy 93.804374 118.837334) (xy 93.761775 118.916779) (xy 93.718383 118.99571) (xy 93.716832 119.000599)
+ (xy 93.714408 119.00512) (xy 93.688068 119.091273) (xy 93.660817 119.177182) (xy 93.660244 119.182282) (xy 93.658746 119.187185)
+ (xy 93.649643 119.276799) (xy 93.639595 119.36638) (xy 93.639525 119.376407) (xy 93.639506 119.376595) (xy 93.639522 119.376769)
+ (xy 93.6395 119.38) (xy 93.6395 124.46) (xy 93.648293 124.549688) (xy 93.656147 124.639445) (xy 93.657577 124.644367)
+ (xy 93.658078 124.649476) (xy 93.68413 124.735767) (xy 93.709262 124.82227) (xy 93.711622 124.826823) (xy 93.713105 124.831734)
+ (xy 93.755414 124.911307) (xy 93.796877 124.991295) (xy 93.800075 124.995302) (xy 93.802485 124.999833) (xy 93.859444 125.069672)
+ (xy 93.915654 125.140085) (xy 93.922696 125.147226) (xy 93.922814 125.147371) (xy 93.922947 125.147481) (xy 93.925217 125.149783)
+ (xy 96.465217 127.689782) (xy 96.534845 127.746975) (xy 96.603875 127.804898) (xy 96.608367 127.807368) (xy 96.612333 127.810625)
+ (xy 96.691745 127.853205) (xy 96.77071 127.896617) (xy 96.775601 127.898168) (xy 96.780119 127.900591) (xy 96.866254 127.926925)
+ (xy 96.952182 127.954183) (xy 96.95728 127.954754) (xy 96.962184 127.956254) (xy 97.051804 127.965357) (xy 97.14138 127.975405)
+ (xy 97.151407 127.975474) (xy 97.151595 127.975494) (xy 97.151769 127.975477) (xy 97.155 127.9755) (xy 100.965 127.9755)
+ (xy 101.054688 127.966706) (xy 101.144445 127.958853) (xy 101.149367 127.957422) (xy 101.154476 127.956922) (xy 101.240767 127.930869)
+ (xy 101.32727 127.905738) (xy 101.331823 127.903377) (xy 101.336734 127.901895) (xy 101.416307 127.859585) (xy 101.496295 127.818123)
+ (xy 101.500302 127.814924) (xy 101.504833 127.812515) (xy 101.574672 127.755555) (xy 101.645085 127.699346) (xy 101.652226 127.692303)
+ (xy 101.652371 127.692186) (xy 101.652481 127.692052) (xy 101.654783 127.689783) (xy 106.449066 122.8955) (xy 106.654023 122.8955)
+ (xy 106.668388 122.93018) (xy 106.740398 123.03795) (xy 106.832049 123.129602) (xy 106.922441 123.19) (xy 106.83205 123.250398)
+ (xy 106.740398 123.342049) (xy 106.668388 123.44982) (xy 106.618787 123.569568) (xy 106.5935 123.696692) (xy 106.5935 123.826307)
+ (xy 106.5935 125.223307) (xy 106.618787 125.350431) (xy 106.668388 125.47018) (xy 106.740398 125.57795) (xy 106.832049 125.669602)
+ (xy 106.93982 125.741612) (xy 107.059568 125.791213) (xy 107.186692 125.8165) (xy 107.316307 125.8165) (xy 108.713307 125.8165)
+ (xy 108.840431 125.791213) (xy 108.96018 125.741612) (xy 109.06795 125.669602) (xy 109.159602 125.577951) (xy 109.231612 125.47018)
+ (xy 109.281213 125.350432) (xy 109.3065 125.223308) (xy 109.3065 125.093693) (xy 109.3065 123.696693) (xy 109.281213 123.569569)
+ (xy 109.231612 123.44982) (xy 109.159602 123.34205) (xy 109.067951 123.250398) (xy 108.977558 123.189999) (xy 109.06795 123.129602)
+ (xy 109.159602 123.037951) (xy 109.231612 122.93018) (xy 109.245976 122.8955) (xy 116.205 122.8955) (xy 116.294688 122.886706)
+ (xy 116.384445 122.878853) (xy 116.389367 122.877422) (xy 116.394476 122.876922) (xy 116.480767 122.850869) (xy 116.56727 122.825738)
+ (xy 116.571823 122.823377) (xy 116.576734 122.821895) (xy 116.656307 122.779585) (xy 116.736295 122.738123) (xy 116.740302 122.734924)
+ (xy 116.744833 122.732515) (xy 116.814672 122.675555) (xy 116.885085 122.619346) (xy 116.892226 122.612303) (xy 116.892371 122.612186)
+ (xy 116.892481 122.612052) (xy 116.894783 122.609783) (xy 118.33641 121.168155) (xy 118.380841 121.164112) (xy 118.651456 121.084466)
+ (xy 118.901448 120.953773) (xy 119.121293 120.777013) (xy 119.302619 120.560917) (xy 119.380076 120.420022) (xy 119.446096 120.544186)
+ (xy 119.624386 120.762792) (xy 119.841743 120.942605) (xy 120.089885 121.076775) (xy 120.359362 121.160192) (xy 120.639909 121.189679)
+ (xy 120.920841 121.164112) (xy 121.191456 121.084466) (xy 121.441448 120.953773) (xy 121.661293 120.777013) (xy 121.842619 120.560917)
+ (xy 121.913628 120.431752) (xy 121.918724 120.44348) (xy 122.081252 120.677892) (xy 122.286388 120.876092) (xy 122.52625 121.030464)
+ (xy 122.799975 121.127384) (xy 123.0225 121.005501) (xy 123.0225 119.5475) (xy 123.0025 119.5475) (xy 123.0025 119.2125)
+ (xy 123.0225 119.2125) (xy 123.0225 117.754499) (xy 122.799975 117.632616) (xy 122.52625 117.729536) (xy 122.286388 117.883908)
+ (xy 122.081252 118.082108) (xy 121.918724 118.31652) (xy 121.913654 118.328187) (xy 121.853904 118.215814) (xy 121.675614 117.997208)
+ (xy 121.458257 117.817395) (xy 121.210115 117.683225) (xy 120.940638 117.599808) (xy 120.660091 117.570321) (xy 120.379159 117.595888)
+ (xy 120.108544 117.675534) (xy 119.858552 117.806227) (xy 119.638707 117.982987) (xy 119.457381 118.199083) (xy 119.379923 118.339977)
+ (xy 119.313904 118.215814) (xy 119.135614 117.997208) (xy 118.918257 117.817395) (xy 118.670115 117.683225) (xy 118.400638 117.599808)
+ (xy 118.120091 117.570321) (xy 117.839159 117.595888) (xy 117.568544 117.675534) (xy 117.318552 117.806227) (xy 117.098707 117.982987)
+ (xy 117.00094 118.0995) (xy 116.990113 118.045068) (xy 116.940512 117.92532) (xy 116.868502 117.817549) (xy 116.77685 117.725898)
+ (xy 116.66908 117.653888) (xy 116.549331 117.604287) (xy 116.422207 117.579) (xy 115.902 117.579) (xy 115.7375 117.7435)
+ (xy 115.7375 119.2125) (xy 115.7575 119.2125) (xy 115.7575 119.5475) (xy 115.7375 119.5475) (xy 115.7375 119.5675)
+ (xy 115.4025 119.5675) (xy 115.4025 119.5475) (xy 115.4025 119.2125) (xy 115.4025 117.7435) (xy 115.238 117.579)
+ (xy 114.717793 117.579) (xy 114.590669 117.604287) (xy 114.47092 117.653888) (xy 114.36315 117.725898) (xy 114.271498 117.817549)
+ (xy 114.199488 117.92532) (xy 114.149887 118.045068) (xy 114.1246 118.172192) (xy 114.1246 118.301807) (xy 114.1246 119.048)
+ (xy 114.2891 119.2125) (xy 115.4025 119.2125) (xy 115.4025 119.5475) (xy 114.2891 119.5475) (xy 114.1246 119.712)
+ (xy 114.1246 120.458193) (xy 114.1246 120.587808) (xy 114.149887 120.714932) (xy 114.199488 120.83468) (xy 114.271498 120.942451)
+ (xy 114.273547 120.9445) (xy 109.245976 120.9445) (xy 109.231612 120.90982) (xy 109.159602 120.80205) (xy 109.067951 120.710398)
+ (xy 108.96018 120.638388) (xy 108.840432 120.588787) (xy 108.713308 120.5635) (xy 108.583693 120.5635) (xy 107.186693 120.5635)
+ (xy 107.059569 120.588787) (xy 106.93982 120.638388) (xy 106.83205 120.710398) (xy 106.740398 120.802049) (xy 106.668388 120.90982)
+ (xy 106.654023 120.9445) (xy 106.045 120.9445) (xy 105.955311 120.953293) (xy 105.865555 120.961147) (xy 105.860632 120.962577)
+ (xy 105.855524 120.963078) (xy 105.769232 120.98913) (xy 105.68273 121.014262) (xy 105.678176 121.016622) (xy 105.673266 121.018105)
+ (xy 105.593692 121.060414) (xy 105.513705 121.101877) (xy 105.509697 121.105075) (xy 105.505167 121.107485) (xy 105.435327 121.164444)
+ (xy 105.364915 121.220654) (xy 105.357773 121.227696) (xy 105.357629 121.227814) (xy 105.357518 121.227947) (xy 105.355217 121.230217)
+ (xy 101.688266 124.897167) (xy 101.565751 125.019682) (xy 101.623379 124.89025) (xy 101.682316 124.630837) (xy 101.686559 124.326988)
+ (xy 101.634888 124.066031) (xy 101.533514 123.82008) (xy 101.386299 123.598504) (xy 101.19885 123.409741) (xy 100.978306 123.260983)
+ (xy 100.808421 123.189569) (xy 100.955351 123.131148) (xy 100.989606 123.112838) (xy 101.050755 122.877636) (xy 100.33 122.156881)
+ (xy 100.093119 122.393762) (xy 99.609245 122.877636) (xy 99.670394 123.112838) (xy 99.850703 123.190553) (xy 99.698498 123.252048)
+ (xy 99.475899 123.397712) (xy 99.387273 123.4845) (xy 98.822582 123.4845) (xy 98.699522 123.360577) (xy 98.468654 123.204855)
+ (xy 98.437164 123.191618) (xy 98.437597 123.191449) (xy 98.487385 123.164836) (xy 98.556298 122.923179) (xy 97.79 122.156881)
+ (xy 97.775857 122.171022) (xy 97.538976 121.934141) (xy 97.553119 121.92) (xy 97.538977 121.905858) (xy 97.775858 121.668977)
+ (xy 97.79 121.683119) (xy 97.804142 121.668977) (xy 98.041023 121.905858) (xy 98.026881 121.92) (xy 98.793179 122.686298)
+ (xy 99.034836 122.617385) (xy 99.09386 122.482498) (xy 99.118852 122.545351) (xy 99.137162 122.579606) (xy 99.372364 122.640755)
+ (xy 100.093119 121.92) (xy 100.078977 121.905858) (xy 100.315858 121.668977) (xy 100.33 121.683119) (xy 100.344142 121.668977)
+ (xy 100.581023 121.905858) (xy 100.566881 121.92) (xy 101.287636 122.640755) (xy 101.522838 122.579606) (xy 101.628601 122.334221)
+ (xy 101.684459 122.072917) (xy 101.688266 121.805737) (xy 101.639876 121.542948) (xy 101.541148 121.294649) (xy 101.522838 121.260394)
+ (xy 101.287637 121.199245) (xy 101.41176 121.075123) (xy 101.327137 120.9905) (xy 101.6 120.9905) (xy 101.689688 120.981706)
+ (xy 101.779445 120.973853) (xy 101.784367 120.972422) (xy 101.789476 120.971922) (xy 101.875767 120.945869) (xy 101.96227 120.920738)
+ (xy 101.966823 120.918377) (xy 101.971734 120.916895) (xy 102.051307 120.874585) (xy 102.131295 120.833123) (xy 102.135302 120.829924)
+ (xy 102.139833 120.827515) (xy 102.209672 120.770555) (xy 102.280085 120.714346) (xy 102.287226 120.707303) (xy 102.287371 120.707186)
+ (xy 102.287481 120.707052) (xy 102.289783 120.704783) (xy 106.449065 116.5455) (xy 106.654023 116.5455) (xy 106.668388 116.58018)
+ (xy 106.740398 116.68795) (xy 106.832049 116.779602) (xy 106.922441 116.84) (xy 106.83205 116.900398) (xy 106.740398 116.992049)
+ (xy 106.668388 117.09982) (xy 106.618787 117.219568) (xy 106.5935 117.346692) (xy 106.5935 117.476307) (xy 106.5935 118.873307)
+ (xy 106.618787 119.000431) (xy 106.668388 119.12018) (xy 106.740398 119.22795) (xy 106.832049 119.319602) (xy 106.93982 119.391612)
+ (xy 107.059568 119.441213) (xy 107.186692 119.4665) (xy 107.316307 119.4665) (xy 108.713307 119.4665) (xy 108.840431 119.441213)
+ (xy 108.96018 119.391612) (xy 109.06795 119.319602) (xy 109.159602 119.227951) (xy 109.231612 119.12018) (xy 109.281213 119.000432)
+ (xy 109.3065 118.873308) (xy 109.3065 118.743693) (xy 109.3065 117.346693) (xy 109.281213 117.219569) (xy 109.231612 117.09982)
+ (xy 109.159602 116.99205) (xy 109.067951 116.900398) (xy 108.977558 116.839999) (xy 109.06795 116.779602) (xy 109.159602 116.687951)
+ (xy 109.231612 116.58018) (xy 109.245976 116.5455) (xy 125.73 116.5455) (xy 125.819688 116.536706) (xy 125.909445 116.528853)
+ (xy 125.914367 116.527422) (xy 125.919476 116.526922) (xy 126.005767 116.500869) (xy 126.09227 116.475738) (xy 126.096823 116.473377)
+ (xy 126.101734 116.471895) (xy 126.181307 116.429585) (xy 126.261295 116.388123) (xy 126.265302 116.384924) (xy 126.269833 116.382515)
+ (xy 126.339672 116.325555) (xy 126.410085 116.269346) (xy 126.417226 116.262303) (xy 126.417371 116.262186) (xy 126.417481 116.262052)
+ (xy 126.419783 116.259783) (xy 128.959782 113.719783) (xy 129.016975 113.650154) (xy 129.074898 113.581125) (xy 129.077368 113.576632)
+ (xy 129.080625 113.572667) (xy 129.123205 113.493254) (xy 129.166617 113.41429) (xy 129.168168 113.409398) (xy 129.170591 113.404881)
+ (xy 129.196925 113.318745) (xy 129.224183 113.232818) (xy 129.224754 113.227719) (xy 129.226254 113.222816) (xy 129.228637 113.199348)
+ (xy 129.281293 113.157013) (xy 129.462619 112.940917) (xy 129.540076 112.800022) (xy 129.606096 112.924186) (xy 129.784386 113.142792)
+ (xy 130.001743 113.322605) (xy 130.249885 113.456775) (xy 130.519362 113.540192) (xy 130.799909 113.569679) (xy 131.080841 113.544112)
+ (xy 131.351456 113.464466) (xy 131.601448 113.333773) (xy 131.821293 113.157013) (xy 132.002619 112.940917) (xy 132.138518 112.693718)
+ (xy 132.223815 112.42483) (xy 132.255259 112.144495) (xy 132.2554 112.124314) (xy 132.2554 111.395686) (xy 132.227873 111.11494)
+ (xy 132.146339 110.844887) (xy 132.013904 110.595814) (xy 131.835614 110.377208) (xy 131.7855 110.33575) (xy 131.7855 110.030466)
+ (xy 133.093666 108.7223) (xy 138.000534 108.7223) (xy 139.3595 110.081266) (xy 139.3595 110.727714) (xy 139.241953 110.842825)
+ (xy 139.084623 111.0726) (xy 138.97492 111.328557) (xy 138.917021 111.600948) (xy 138.913133 111.879397) (xy 138.963404 112.153299)
+ (xy 139.065918 112.41222) (xy 139.216771 112.646298) (xy 139.410217 112.846617) (xy 139.638887 113.005547) (xy 139.894073 113.117035)
+ (xy 140.166053 113.176834) (xy 140.444468 113.182666) (xy 140.718714 113.134309) (xy 140.978344 113.033605) (xy 141.21347 112.88439)
+ (xy 141.415134 112.692347) (xy 141.575657 112.464791) (xy 141.688924 112.21039) (xy 141.75062 111.938834) (xy 141.755061 111.620762)
+ (xy 141.700971 111.347589) (xy 141.594852 111.090125) (xy 141.440746 110.858176) (xy 141.3105 110.727017) (xy 141.3105 109.6772)
+ (xy 141.301706 109.587511) (xy 141.293853 109.497755) (xy 141.292422 109.492832) (xy 141.291922 109.487724) (xy 141.265869 109.401432)
+ (xy 141.240738 109.31493) (xy 141.238377 109.310376) (xy 141.236895 109.305466) (xy 141.194585 109.225892) (xy 141.153123 109.145905)
+ (xy 141.149924 109.141897) (xy 141.147515 109.137367) (xy 141.090555 109.067527) (xy 141.034346 108.997115) (xy 141.027303 108.989973)
+ (xy 141.027186 108.989829) (xy 141.027052 108.989718) (xy 141.024783 108.987417) (xy 139.094383 107.057017) (xy 139.024719 106.999795)
+ (xy 138.955725 106.941902) (xy 138.951232 106.939432) (xy 138.947266 106.936174) (xy 138.86782 106.893575) (xy 138.78889 106.850183)
+ (xy 138.784 106.848632) (xy 138.77948 106.846208) (xy 138.693326 106.819868) (xy 138.607418 106.792617) (xy 138.602317 106.792044)
+ (xy 138.597415 106.790546) (xy 138.5078 106.781443) (xy 138.41822 106.771395) (xy 138.408192 106.771325) (xy 138.408005 106.771306)
+ (xy 138.40783 106.771322) (xy 138.4046 106.7713) (xy 132.6896 106.7713) (xy 132.599907 106.780094) (xy 132.510156 106.787947)
+ (xy 132.505233 106.789376) (xy 132.500124 106.789878) (xy 132.41382 106.815934) (xy 132.32733 106.841062) (xy 132.322776 106.843422)
+ (xy 132.317866 106.844905) (xy 132.238292 106.887214) (xy 132.158305 106.928677) (xy 132.154297 106.931875) (xy 132.149767 106.934285)
+ (xy 132.079927 106.991244) (xy 132.009515 107.047454) (xy 132.002373 107.054496) (xy 132.002229 107.054614) (xy 132.002118 107.054747)
+ (xy 131.999817 107.057017) (xy 130.120217 108.936617) (xy 130.062995 109.00628) (xy 130.005102 109.075275) (xy 130.002632 109.079767)
+ (xy 129.999374 109.083734) (xy 129.956775 109.163179) (xy 129.913383 109.24211) (xy 129.911832 109.246999) (xy 129.909408 109.25152)
+ (xy 129.883068 109.337673) (xy 129.855817 109.423582) (xy 129.855244 109.428682) (xy 129.853746 109.433585) (xy 129.844643 109.523199)
+ (xy 129.834595 109.61278) (xy 129.834525 109.622807) (xy 129.834506 109.622995) (xy 129.834522 109.623169) (xy 129.8345 109.6264)
+ (xy 129.8345 110.334208) (xy 129.798707 110.362987) (xy 129.617381 110.579083) (xy 129.539923 110.719977) (xy 129.473904 110.595814)
+ (xy 129.295614 110.377208) (xy 129.078257 110.197395) (xy 128.830115 110.063225) (xy 128.560638 109.979808) (xy 128.280091 109.950321)
+ (xy 127.999159 109.975888) (xy 127.728544 110.055534) (xy 127.478552 110.186227) (xy 127.258707 110.362987) (xy 127.077381 110.579083)
+ (xy 127.006371 110.708247) (xy 127.001276 110.69652) (xy 126.838748 110.462108) (xy 126.633612 110.263908) (xy 126.39375 110.109536)
+ (xy 126.120025 110.012616) (xy 125.8975 110.134499) (xy 125.8975 111.5925) (xy 125.9175 111.5925) (xy 125.9175 111.9275)
+ (xy 125.8975 111.9275) (xy 125.8975 113.385501) (xy 126.120025 113.507384) (xy 126.39375 113.410464) (xy 126.633612 113.256092)
+ (xy 126.838748 113.057892) (xy 127.001276 112.82348) (xy 127.006345 112.811812) (xy 127.041849 112.878585) (xy 125.325934 114.5945)
+ (xy 123.005066 114.5945) (xy 123.879783 113.719783) (xy 123.937004 113.650119) (xy 123.994898 113.581125) (xy 123.997367 113.576632)
+ (xy 124.000626 113.572666) (xy 124.043234 113.493201) (xy 124.086617 113.41429) (xy 124.088167 113.409403) (xy 124.090592 113.404881)
+ (xy 124.116935 113.318712) (xy 124.144183 113.232818) (xy 124.144755 113.227717) (xy 124.146254 113.222815) (xy 124.148637 113.199349)
+ (xy 124.201293 113.157013) (xy 124.382619 112.940917) (xy 124.453628 112.811752) (xy 124.458724 112.82348) (xy 124.621252 113.057892)
+ (xy 124.826388 113.256092) (xy 125.06625 113.410464) (xy 125.339975 113.507384) (xy 125.5625 113.385501) (xy 125.5625 111.9275)
+ (xy 125.5425 111.9275) (xy 125.5425 111.5925) (xy 125.5625 111.5925) (xy 125.5625 110.134499) (xy 125.339975 110.012616)
+ (xy 125.06625 110.109536) (xy 124.826388 110.263908) (xy 124.621252 110.462108) (xy 124.458724 110.69652) (xy 124.453654 110.708187)
+ (xy 124.393904 110.595814) (xy 124.215614 110.377208) (xy 123.998257 110.197395) (xy 123.750115 110.063225) (xy 123.480638 109.979808)
+ (xy 123.200091 109.950321) (xy 122.919159 109.975888) (xy 122.648544 110.055534) (xy 122.398552 110.186227) (xy 122.178707 110.362987)
+ (xy 121.997381 110.579083) (xy 121.919923 110.719977) (xy 121.853904 110.595814) (xy 121.675614 110.377208) (xy 121.458257 110.197395)
+ (xy 121.210115 110.063225) (xy 120.940638 109.979808) (xy 120.660091 109.950321) (xy 120.379159 109.975888) (xy 120.108544 110.055534)
+ (xy 119.858552 110.186227) (xy 119.638707 110.362987) (xy 119.457381 110.579083) (xy 119.386371 110.708247) (xy 119.381276 110.69652)
+ (xy 119.218748 110.462108) (xy 119.013612 110.263908) (xy 118.77375 110.109536) (xy 118.500025 110.012616) (xy 118.2775 110.134499)
+ (xy 118.2775 111.5925) (xy 118.2975 111.5925) (xy 118.2975 111.9275) (xy 118.2775 111.9275) (xy 118.2775 111.9475)
+ (xy 117.9425 111.9475) (xy 117.9425 111.9275) (xy 117.9225 111.9275) (xy 117.9225 111.5925) (xy 117.9425 111.5925)
+ (xy 117.9425 110.134499) (xy 117.719975 110.012616) (xy 117.44625 110.109536) (xy 117.206388 110.263908) (xy 117.001252 110.462108)
+ (xy 116.838724 110.69652) (xy 116.833654 110.708187) (xy 116.773904 110.595814) (xy 116.736 110.549338) (xy 116.736 105.941)
+ (xy 135.89 105.941) (xy 135.997188 105.93049) (xy 136.104487 105.921103) (xy 136.110375 105.919392) (xy 136.116477 105.918794)
+ (xy 136.219616 105.887654) (xy 136.323015 105.857614) (xy 136.328455 105.854794) (xy 136.334328 105.853021) (xy 136.429453 105.802441)
+ (xy 136.525049 105.75289) (xy 136.52984 105.749064) (xy 136.535255 105.746186) (xy 136.618707 105.678123) (xy 136.702894 105.610918)
+ (xy 136.711436 105.602494) (xy 136.711603 105.602359) (xy 136.71173 105.602205) (xy 136.714487 105.599487) (xy 137.984486 104.329487)
+ (xy 138.052867 104.246238) (xy 138.122082 104.163752) (xy 138.125035 104.15838) (xy 138.128928 104.153641) (xy 138.179835 104.058699)
+ (xy 138.231712 103.964336) (xy 138.233565 103.958492) (xy 138.236463 103.953089) (xy 138.26795 103.850097) (xy 138.30052 103.747425)
+ (xy 138.301203 103.74133) (xy 138.302996 103.735468) (xy 138.313876 103.628345) (xy 138.325886 103.52128) (xy 138.325969 103.509286)
+ (xy 138.325992 103.50907) (xy 138.325972 103.508868) (xy 138.326 103.505) (xy 138.326 99.542973) (xy 139.179673 98.6893)
+ (xy 139.661929 98.6893) (xy 139.615431 98.908061) (xy 139.611716 99.174058) (xy 139.659739 99.435711) (xy 139.757669 99.683054)
+ (xy 139.804 99.754945) (xy 139.804 104.14) (xy 139.814509 104.247188) (xy 139.823897 104.354487) (xy 139.825607 104.360375)
+ (xy 139.826206 104.366477) (xy 139.857345 104.469616) (xy 139.887386 104.573015) (xy 139.890205 104.578455) (xy 139.891979 104.584328)
+ (xy 139.942558 104.679453) (xy 139.99211 104.775049) (xy 139.995935 104.77984) (xy 139.998814 104.785255) (xy 140.066876 104.868707)
+ (xy 140.134082 104.952894) (xy 140.142505 104.961436) (xy 140.142641 104.961603) (xy 140.142794 104.96173) (xy 140.145513 104.964487)
+ (xy 141.415513 106.234486) (xy 141.498761 106.302867) (xy 141.581248 106.372082) (xy 141.586619 106.375035) (xy 141.591359 106.378928)
+ (xy 141.6863 106.429835) (xy 141.780664 106.481712) (xy 141.786507 106.483565) (xy 141.791911 106.486463) (xy 141.894902 106.51795)
+ (xy 141.997575 106.55052) (xy 142.003669 106.551203) (xy 142.009532 106.552996) (xy 142.116654 106.563876) (xy 142.22372 106.575886)
+ (xy 142.235713 106.575969) (xy 142.23593 106.575992) (xy 142.236131 106.575972) (xy 142.24 106.576) (xy 144.78 106.576)
+ (xy 144.887188 106.56549) (xy 144.994487 106.556103) (xy 145.000375 106.554392) (xy 145.006477 106.553794) (xy 145.109616 106.522654)
+ (xy 145.213015 106.492614) (xy 145.218455 106.489794) (xy 145.224328 106.488021) (xy 145.319453 106.437441) (xy 145.415049 106.38789)
+ (xy 145.41984 106.384064) (xy 145.425255 106.381186) (xy 145.508707 106.313123) (xy 145.592894 106.245918) (xy 145.601436 106.237494)
+ (xy 145.601603 106.237359) (xy 145.60173 106.237205) (xy 145.604487 106.234487) (xy 147.954999 103.883973) (xy 165.545514 121.474487)
+ (xy 165.628766 121.542871) (xy 165.711248 121.612082) (xy 165.716619 121.615035) (xy 165.721359 121.618928) (xy 165.816281 121.669824)
+ (xy 165.910664 121.721712) (xy 165.916509 121.723566) (xy 165.921912 121.726463) (xy 166.024929 121.757958) (xy 166.127575 121.79052)
+ (xy 166.133664 121.791203) (xy 166.139532 121.792997) (xy 166.246704 121.803882) (xy 166.35372 121.815886) (xy 166.365713 121.815969)
+ (xy 166.36593 121.815992) (xy 166.366131 121.815972) (xy 166.37 121.816) (xy 177.388602 121.816) (xy 177.415898 121.85685)
+ (xy 177.507549 121.948502) (xy 177.61532 122.020512) (xy 177.735068 122.070113) (xy 177.789518 122.080944) (xy 177.687208 122.164386)
+ (xy 177.507395 122.381743) (xy 177.373225 122.629885) (xy 177.289808 122.899362) (xy 177.260321 123.179909) (xy 177.285888 123.460841)
+ (xy 177.322753 123.5861) (xy 175.050274 123.5861) (xy 175.006158 123.562047) (xy 174.824486 123.505114) (xy 174.635215 123.484553)
+ (xy 174.445556 123.501147) (xy 174.26273 123.554262) (xy 174.093705 123.641876) (xy 173.944916 123.760653) (xy 173.935218 123.770217)
+ (xy 173.585934 124.1195) (xy 150.264065 124.1195) (xy 139.754783 113.610217) (xy 139.685119 113.552995) (xy 139.616125 113.495102)
+ (xy 139.611632 113.492632) (xy 139.607666 113.489374) (xy 139.52822 113.446775) (xy 139.44929 113.403383) (xy 139.4444 113.401832)
+ (xy 139.43988 113.399408) (xy 139.353726 113.373068) (xy 139.267818 113.345817) (xy 139.262717 113.345244) (xy 139.257815 113.343746)
+ (xy 139.1682 113.334643) (xy 139.07862 113.324595) (xy 139.068592 113.324525) (xy 139.068405 113.324506) (xy 139.06823 113.324522)
+ (xy 139.065 113.3245) (xy 138.199065 113.3245) (xy 136.672586 111.79802) (xy 136.675061 111.620762) (xy 136.620971 111.347589)
+ (xy 136.514852 111.090125) (xy 136.360746 110.858176) (xy 136.164522 110.660577) (xy 135.933654 110.504855) (xy 135.676937 110.396941)
+ (xy 135.404149 110.340946) (xy 135.125679 110.339001) (xy 134.852135 110.391183) (xy 134.593936 110.495502) (xy 134.360917 110.647985)
+ (xy 134.161953 110.842825) (xy 134.004623 111.0726) (xy 133.89492 111.328557) (xy 133.837021 111.600948) (xy 133.833133 111.879397)
+ (xy 133.883404 112.153299) (xy 133.985918 112.41222) (xy 134.136771 112.646298) (xy 134.330217 112.846617) (xy 134.558887 113.005547)
+ (xy 134.814073 113.117035) (xy 135.086053 113.176834) (xy 135.29668 113.181246) (xy 137.105217 114.989782) (xy 137.174845 115.046975)
+ (xy 137.243875 115.104898) (xy 137.248367 115.107368) (xy 137.252333 115.110625) (xy 137.331745 115.153205) (xy 137.41071 115.196617)
+ (xy 137.415601 115.198168) (xy 137.420119 115.200591) (xy 137.506254 115.226925) (xy 137.592182 115.254183) (xy 137.59728 115.254754)
+ (xy 137.602184 115.256254) (xy 137.691804 115.265357) (xy 137.78138 115.275405) (xy 137.791407 115.275474) (xy 137.791595 115.275494)
+ (xy 137.791769 115.275477) (xy 137.795 115.2755) (xy 138.660934 115.2755) (xy 149.170217 125.784782) (xy 149.239872 125.841998)
+ (xy 149.308875 125.899898) (xy 149.313364 125.902366) (xy 149.317333 125.905626) (xy 149.396784 125.948227) (xy 149.47571 125.991617)
+ (xy 149.480601 125.993168) (xy 149.485119 125.995591) (xy 149.571254 126.021925) (xy 149.57937 126.0245) (xy 145.184065 126.0245)
+ (xy 141.63995 122.480385) (xy 141.688924 122.37039) (xy 141.75062 122.098834) (xy 141.755061 121.780762) (xy 141.700971 121.507589)
+ (xy 141.594852 121.250125) (xy 141.440746 121.018176) (xy 141.244522 120.820577) (xy 141.013654 120.664855) (xy 140.756937 120.556941)
+ (xy 140.484149 120.500946) (xy 140.205679 120.499001) (xy 139.932135 120.551183) (xy 139.673936 120.655502) (xy 139.440917 120.807985)
+ (xy 139.241953 121.002825) (xy 139.084623 121.2326) (xy 138.97492 121.488557) (xy 138.917021 121.760948) (xy 138.913133 122.039397)
+ (xy 138.963404 122.313299) (xy 139.065918 122.57222) (xy 139.216771 122.806298) (xy 139.410217 123.006617) (xy 139.512382 123.077623)
+ (xy 139.516877 123.086295) (xy 139.520075 123.090302) (xy 139.522485 123.094833) (xy 139.579444 123.164672) (xy 139.635654 123.235085)
+ (xy 139.642696 123.242226) (xy 139.642814 123.242371) (xy 139.642947 123.242481) (xy 139.645217 123.244783) (xy 144.090217 127.689782)
+ (xy 144.15985 127.746979) (xy 144.228875 127.804898) (xy 144.233367 127.807367) (xy 144.237334 127.810626) (xy 144.316798 127.853234)
+ (xy 144.39571 127.896617) (xy 144.400596 127.898167) (xy 144.405119 127.900592) (xy 144.491287 127.926935) (xy 144.577182 127.954183)
+ (xy 144.582282 127.954755) (xy 144.587185 127.956254) (xy 144.676799 127.965356) (xy 144.76638 127.975405) (xy 144.776407 127.975474)
+ (xy 144.776595 127.975494) (xy 144.776769 127.975477) (xy 144.78 127.9755) (xy 177.165 127.9755) (xy 177.294947 127.962758)
+ (xy 177.289808 127.979362) (xy 177.260321 128.259909) (xy 177.285888 128.540841) (xy 177.365534 128.811456) (xy 177.496227 129.061448)
+ (xy 177.672987 129.281293) (xy 177.889083 129.462619) (xy 178.0945 129.575548) (xy 178.0945 130.81) (xy 178.103293 130.899688)
+ (xy 178.111147 130.989445) (xy 178.112577 130.994367) (xy 178.113078 130.999476) (xy 178.13913 131.085767) (xy 178.164262 131.17227)
+ (xy 178.166622 131.176823) (xy 178.168105 131.181734) (xy 178.210414 131.261307) (xy 178.251877 131.341295) (xy 178.255075 131.345302)
+ (xy 178.257485 131.349833) (xy 178.314444 131.419672) (xy 178.370654 131.490085) (xy 178.377696 131.497226) (xy 178.377814 131.497371)
+ (xy 178.377947 131.497481) (xy 178.380217 131.499783) (xy 180.285217 133.404783) (xy 180.35488 133.462004) (xy 180.423875 133.519898)
+ (xy 180.428367 133.522367) (xy 180.432334 133.525626) (xy 180.511779 133.568224) (xy 180.59071 133.611617) (xy 180.595599 133.613167)
+ (xy 180.60012 133.615592) (xy 180.686314 133.641944) (xy 180.772182 133.669183) (xy 180.777277 133.669754) (xy 180.782185 133.671255)
+ (xy 180.871849 133.680362) (xy 180.96138 133.690405) (xy 180.971407 133.690474) (xy 180.971595 133.690494) (xy 180.971769 133.690477)
+ (xy 180.975 133.6905) (xy 195.175934 133.6905) (xy 195.525218 134.039783) (xy 195.594855 134.096984) (xy 195.663875 134.154898)
+ (xy 195.668367 134.157367) (xy 195.672334 134.160626) (xy 195.751779 134.203224) (xy 195.83071 134.246617) (xy 195.835599 134.248167)
+ (xy 195.84012 134.250592) (xy 195.926314 134.276944) (xy 196.012182 134.304183) (xy 196.017277 134.304754) (xy 196.022185 134.306255)
+ (xy 196.111844 134.315361) (xy 196.20138 134.325405) (xy 196.211408 134.325474) (xy 196.211596 134.325494) (xy 196.21177 134.325477)
+ (xy 196.215 134.3255) (xy 218.44 134.3255) (xy 218.529688 134.316706) (xy 218.619445 134.308853) (xy 218.624367 134.307422)
+ (xy 218.629476 134.306922) (xy 218.715767 134.280869) (xy 218.80227 134.255738) (xy 218.806823 134.253377) (xy 218.811734 134.251895)
+ (xy 218.891307 134.209585) (xy 218.971295 134.168123) (xy 218.975302 134.164924) (xy 218.979833 134.162515) (xy 219.049672 134.105555)
+ (xy 219.120085 134.049346) (xy 219.127226 134.042303) (xy 219.127371 134.042186) (xy 219.127481 134.042052) (xy 219.129783 134.039783)
+ (xy 221.669782 131.499783) (xy 221.726975 131.430154) (xy 221.784898 131.361125) (xy 221.787368 131.356632) (xy 221.790625 131.352667)
+ (xy 221.833205 131.273254) (xy 221.876617 131.19429) (xy 221.878168 131.189398) (xy 221.880591 131.184881) (xy 221.906925 131.098745)
+ (xy 221.934183 131.012818) (xy 221.934754 131.007719) (xy 221.936254 131.002816) (xy 221.945357 130.913195) (xy 221.955405 130.82362)
+ (xy 221.955474 130.813592) (xy 221.955494 130.813405) (xy 221.955477 130.81323) (xy 221.9555 130.81) (xy 221.9555 105.052062)
+ (xy 221.97727 105.045738) (xy 221.981823 105.043377) (xy 221.986734 105.041895) (xy 222.066307 104.999585) (xy 222.146295 104.958123)
+ (xy 222.150302 104.954924) (xy 222.154833 104.952515) (xy 222.224672 104.895555) (xy 222.295085 104.839346) (xy 222.302226 104.832303)
+ (xy 222.302371 104.832186) (xy 222.302481 104.832052) (xy 222.304783 104.829783) (xy 222.939783 104.194782) (xy 222.996984 104.125144)
+ (xy 223.054898 104.056125) (xy 223.057367 104.051632) (xy 223.060626 104.047666) (xy 223.103224 103.96822) (xy 223.146617 103.88929)
+ (xy 223.148167 103.8844) (xy 223.150592 103.87988) (xy 223.176944 103.793685) (xy 223.204183 103.707818) (xy 223.204754 103.702722)
+ (xy 223.206255 103.697815) (xy 223.215361 103.608155) (xy 223.225405 103.51862) (xy 223.225474 103.508591) (xy 223.225494 103.508404)
+ (xy 223.225477 103.508229) (xy 223.2255 103.505) (xy 223.2255 138.28) (xy 160.004457 138.28) (xy 160.414143 138.020006)
+ (xy 160.79617 137.656206) (xy 161.100259 137.225133) (xy 161.314827 136.743204) (xy 161.431702 136.228778) (xy 161.440116 135.626232)
+ (xy 161.33765 135.108742) (xy 161.136621 134.621011) (xy 160.844687 134.181615) (xy 160.472967 133.80729) (xy 160.03562 133.512296)
+ (xy 159.549304 133.307867) (xy 159.032542 133.201791) (xy 158.505019 133.198109) (xy 157.986827 133.296959) (xy 157.497703 133.494578)
+ (xy 157.05628 133.783437) (xy 156.67937 134.152535) (xy 156.381329 134.587812) (xy 156.17351 135.072689) (xy 156.063829 135.588698)
+ (xy 156.056464 136.116183) (xy 156.151694 136.635052) (xy 156.345893 137.125543) (xy 156.631664 137.568972) (xy 156.998122 137.94845)
+ (xy 157.431308 138.249522) (xy 157.501069 138.28) (xy 138.115543 138.28) (xy 138.115543 136.8528) (xy 138.115543 132.0824)
+ (xy 136.675061 132.0824) (xy 136.675061 121.780762) (xy 136.620971 121.507589) (xy 136.514852 121.250125) (xy 136.360746 121.018176)
+ (xy 136.164522 120.820577) (xy 135.933654 120.664855) (xy 135.676937 120.556941) (xy 135.404149 120.500946) (xy 135.125679 120.499001)
+ (xy 134.852135 120.551183) (xy 134.593936 120.655502) (xy 134.360917 120.807985) (xy 134.221512 120.9445) (xy 131.60732 120.9445)
+ (xy 131.713612 120.876092) (xy 131.918748 120.677892) (xy 132.081276 120.44348) (xy 132.194949 120.181865) (xy 132.2554 119.9031)
+ (xy 132.2554 119.5475) (xy 132.2554 119.2125) (xy 132.2554 118.8569) (xy 132.194949 118.578135) (xy 132.081276 118.31652)
+ (xy 131.918748 118.082108) (xy 131.713612 117.883908) (xy 131.47375 117.729536) (xy 131.200025 117.632616) (xy 130.9775 117.754499)
+ (xy 130.9775 119.2125) (xy 132.2554 119.2125) (xy 132.2554 119.5475) (xy 130.9775 119.5475) (xy 130.9775 119.5675)
+ (xy 130.6425 119.5675) (xy 130.6425 119.5475) (xy 130.6225 119.5475) (xy 130.6225 119.2125) (xy 130.6425 119.2125)
+ (xy 130.6425 117.754499) (xy 130.419975 117.632616) (xy 130.14625 117.729536) (xy 129.906388 117.883908) (xy 129.701252 118.082108)
+ (xy 129.538724 118.31652) (xy 129.533654 118.328187) (xy 129.473904 118.215814) (xy 129.295614 117.997208) (xy 129.078257 117.817395)
+ (xy 128.830115 117.683225) (xy 128.560638 117.599808) (xy 128.280091 117.570321) (xy 127.999159 117.595888) (xy 127.728544 117.675534)
+ (xy 127.478552 117.806227) (xy 127.258707 117.982987) (xy 127.077381 118.199083) (xy 126.999923 118.339977) (xy 126.933904 118.215814)
+ (xy 126.755614 117.997208) (xy 126.538257 117.817395) (xy 126.290115 117.683225) (xy 126.020638 117.599808) (xy 125.740091 117.570321)
+ (xy 125.459159 117.595888) (xy 125.188544 117.675534) (xy 124.938552 117.806227) (xy 124.718707 117.982987) (xy 124.537381 118.199083)
+ (xy 124.466371 118.328247) (xy 124.461276 118.31652) (xy 124.298748 118.082108) (xy 124.093612 117.883908) (xy 123.85375 117.729536)
+ (xy 123.580025 117.632616) (xy 123.3575 117.754499) (xy 123.3575 119.2125) (xy 123.3775 119.2125) (xy 123.3775 119.5475)
+ (xy 123.3575 119.5475) (xy 123.3575 121.005501) (xy 123.580025 121.127384) (xy 123.85375 121.030464) (xy 124.093612 120.876092)
+ (xy 124.298748 120.677892) (xy 124.461276 120.44348) (xy 124.466345 120.431812) (xy 124.526096 120.544186) (xy 124.704386 120.762792)
+ (xy 124.921743 120.942605) (xy 125.169885 121.076775) (xy 125.439362 121.160192) (xy 125.719909 121.189679) (xy 126.000841 121.164112)
+ (xy 126.271456 121.084466) (xy 126.521448 120.953773) (xy 126.741293 120.777013) (xy 126.922619 120.560917) (xy 127.000076 120.420022)
+ (xy 127.066096 120.544186) (xy 127.244386 120.762792) (xy 127.310069 120.81713) (xy 127.311147 120.829445) (xy 127.312577 120.834367)
+ (xy 127.313078 120.839476) (xy 127.33913 120.925767) (xy 127.364262 121.01227) (xy 127.366622 121.016823) (xy 127.368105 121.021734)
+ (xy 127.410414 121.101307) (xy 127.451877 121.181295) (xy 127.455075 121.185302) (xy 127.457485 121.189833) (xy 127.514444 121.259672)
+ (xy 127.570654 121.330085) (xy 127.577696 121.337226) (xy 127.577814 121.337371) (xy 127.577947 121.337481) (xy 127.580217 121.339783)
+ (xy 128.850217 122.609783) (xy 128.91988 122.667004) (xy 128.988875 122.724898) (xy 128.993367 122.727367) (xy 128.997334 122.730626)
+ (xy 129.076798 122.773234) (xy 129.15571 122.816617) (xy 129.160596 122.818167) (xy 129.165119 122.820592) (xy 129.251287 122.846935)
+ (xy 129.337182 122.874183) (xy 129.342282 122.874755) (xy 129.347185 122.876254) (xy 129.436799 122.885356) (xy 129.52638 122.895405)
+ (xy 129.536407 122.895474) (xy 129.536595 122.895494) (xy 129.536769 122.895477) (xy 129.54 122.8955) (xy 134.222912 122.8955)
+ (xy 134.330217 123.006617) (xy 134.558887 123.165547) (xy 134.814073 123.277035) (xy 135.086053 123.336834) (xy 135.364468 123.342666)
+ (xy 135.638714 123.294309) (xy 135.898344 123.193605) (xy 136.13347 123.04439) (xy 136.335134 122.852347) (xy 136.495657 122.624791)
+ (xy 136.608924 122.37039) (xy 136.67062 122.098834) (xy 136.675061 121.780762) (xy 136.675061 132.0824) (xy 110.804457 132.0824)
+ (xy 110.804457 136.8528) (xy 138.115543 136.8528) (xy 138.115543 138.28) (xy 103.408258 138.28) (xy 103.408258 134.6224)
+ (xy 85.821743 134.6224) (xy 85.821743 137.747124) (xy 82.57311 134.840452) (xy 82.57311 127.891685) (xy 82.475482 127.398627)
+ (xy 82.283944 126.933922) (xy 82.005793 126.515271) (xy 81.651622 126.158619) (xy 81.234923 125.877552) (xy 80.771567 125.682775)
+ (xy 80.279203 125.581707) (xy 79.776585 125.578198) (xy 79.282858 125.672382) (xy 78.816827 125.86067) (xy 78.396244 126.135892)
+ (xy 78.037128 126.487564) (xy 77.753159 126.902291) (xy 77.555152 127.364276) (xy 77.450649 127.855923) (xy 77.443631 128.358504)
+ (xy 77.534366 128.852877) (xy 77.719396 129.32021) (xy 77.991675 129.742705) (xy 78.340831 130.104267) (xy 78.753566 130.391124)
+ (xy 79.214157 130.592352) (xy 79.705062 130.700284) (xy 80.207582 130.710811) (xy 80.702576 130.62353) (xy 81.17119 130.441766)
+ (xy 81.595575 130.172444) (xy 81.959566 129.82582) (xy 82.249298 129.415098) (xy 82.453736 128.955923) (xy 82.565093 128.465783)
+ (xy 82.57311 127.891685) (xy 82.57311 134.840452) (xy 74.5085 127.624748) (xy 74.5085 48.893632) (xy 76.45843 46.943701)
+ (xy 76.634722 47.020721) (xy 77.149952 47.134002) (xy 77.677373 47.14505) (xy 78.196895 47.053444) (xy 78.688729 46.862674)
+ (xy 79.134143 46.580006) (xy 79.51617 46.216206) (xy 79.820259 45.785133) (xy 80.034827 45.303204) (xy 80.151702 44.788778)
+ (xy 80.160116 44.186232) (xy 80.05765 43.668742) (xy 79.963007 43.439124) (xy 81.342132 42.06) (xy 157.489417 42.06)
+ (xy 157.05628 42.343437) (xy 156.67937 42.712535) (xy 156.381329 43.147812) (xy 156.17351 43.632689) (xy 156.063829 44.148698)
+ (xy 156.056464 44.676183) (xy 156.151694 45.195052) (xy 156.345893 45.685543) (xy 156.631664 46.128972) (xy 156.998122 46.50845)
+ (xy 157.431308 46.809522) (xy 157.914722 47.020721) (xy 158.429952 47.134002) (xy 158.957373 47.14505) (xy 159.476895 47.053444)
+ (xy 159.968729 46.862674) (xy 160.414143 46.580006) (xy 160.79617 46.216206) (xy 161.100259 45.785133) (xy 161.314827 45.303204)
+ (xy 161.431702 44.788778) (xy 161.440116 44.186232) (xy 161.33765 43.668742) (xy 161.136621 43.181011) (xy 160.844687 42.741615)
+ (xy 160.472967 42.36729) (xy 160.03562 42.072296) (xy 160.006369 42.06) (xy 219.650109 42.06) (xy 232.26 54.039397)
+ (xy 232.26 128.845876)
+ )
+ )
+ )
+)
diff --git a/demos/flat_hierarchy/flat_hierarchy.net b/demos/flat_hierarchy/flat_hierarchy.net
new file mode 100644
index 0000000..41fe85b
--- /dev/null
+++ b/demos/flat_hierarchy/flat_hierarchy.net
@@ -0,0 +1,993 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/flat_hierarchy/flat_hierarchy.sch)
+ (date "05/07/2014 20:23:42")
+ (tool "Eeschema (2014-07-04 BZR 4974)-product"))
+ (components
+ (comp (ref C8)
+ (value 100nF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 4639BE2C))
+ (comp (ref P2)
+ (value SUPP28)
+ (libsource (lib conn) (part SUPP28))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 4436967E))
+ (comp (ref C7)
+ (value 100nF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 442AA145))
+ (comp (ref C6)
+ (value 100nF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 442AA12B))
+ (comp (ref P3)
+ (value SUPP40)
+ (libsource (lib conn) (part SUPP40))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 442A88ED))
+ (comp (ref U1)
+ (value 24Cxx)
+ (libsource (lib memory) (part 24C16))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 442A87F7))
+ (comp (ref U5)
+ (value PIC_18_PINS)
+ (libsource (lib microcontrollers) (part PIC16F54))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 442A81A7))
+ (comp (ref U6)
+ (value PIC_8_PINS)
+ (libsource (lib microcontrollers) (part PIC12C508A))
+ (sheetpath (names /sockets/) (tstamps /48553E7C/))
+ (tstamp 442A81A5))
+ (comp (ref C9)
+ (value 22OnF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 464AD280))
+ (comp (ref JP1)
+ (value JUMPER)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639BAF8))
+ (comp (ref D11)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639BA28))
+ (comp (ref D12)
+ (value YELLOW-LED)
+ (fields
+ (field (name Champ4) YELLOW-LED))
+ (libsource (lib device) (part LED))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639B9EA))
+ (comp (ref R21)
+ (value 470)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639B9E9))
+ (comp (ref R20)
+ (value 2.2K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639B9B3))
+ (comp (ref R19)
+ (value 2.2K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639B9B0))
+ (comp (ref Q3)
+ (value BC307)
+ (libsource (lib device) (part PNP))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 4639B996))
+ (comp (ref RV1)
+ (value 1K)
+ (libsource (lib device) (part POT))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 443D0101))
+ (comp (ref R18)
+ (value 220)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 44369638))
+ (comp (ref D10)
+ (value SCHOTTKY)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A6026))
+ (comp (ref R10)
+ (value 5,1K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A5F83))
+ (comp (ref C4)
+ (value 0)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A5F61))
+ (comp (ref U4)
+ (value LT1373)
+ (libsource (lib regul) (part LT1373))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A5E20))
+ (comp (ref R16)
+ (value 62K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A58DC))
+ (comp (ref R15)
+ (value 6.2K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A58D7))
+ (comp (ref C5)
+ (value 10nF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A58B1))
+ (comp (ref C3)
+ (value 22uF/25V)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A584C))
+ (comp (ref L1)
+ (value 22uH)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A57BE))
+ (comp (ref R17)
+ (value 22K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A50BF))
+ (comp (ref D9)
+ (value GREEN-LED)
+ (fields
+ (field (name Champ4) "GREEN LED"))
+ (libsource (lib device) (part LED))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A5084))
+ (comp (ref R14)
+ (value 470)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A5083))
+ (comp (ref C1)
+ (value 100uF)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A5056))
+ (comp (ref U3)
+ (value 7805)
+ (libsource (lib regul) (part 7805))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A504A))
+ (comp (ref C2)
+ (value 220uF)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A501D))
+ (comp (ref D1)
+ (value 1N4004)
+ (libsource (lib device) (part DIODE))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A500B))
+ (comp (ref P1)
+ (value CONN_2)
+ (libsource (lib conn) (part CONN_2))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4FE7))
+ (comp (ref D8)
+ (value RED-LED)
+ (fields
+ (field (name Champ4) "Low Current Led")
+ (field (name Champ5) "RED LED"))
+ (libsource (lib device) (part LED))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4F5D))
+ (comp (ref R9)
+ (value 2.2K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4F52))
+ (comp (ref Q2)
+ (value BC307)
+ (libsource (lib device) (part PNP))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4F30))
+ (comp (ref R7)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4F2A))
+ (comp (ref R11)
+ (value 22K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4F23))
+ (comp (ref Q1)
+ (value BC237)
+ (libsource (lib device) (part NPN))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4EB9))
+ (comp (ref R8)
+ (value 1K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D92))
+ (comp (ref R13)
+ (value 470)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D8D))
+ (comp (ref R12)
+ (value 470)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D85))
+ (comp (ref U2)
+ (value 74HC125)
+ (libsource (lib 74xx) (part 74LS125))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D6B))
+ (comp (ref D7)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D65))
+ (comp (ref D6)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D64))
+ (comp (ref R6)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D63))
+ (comp (ref R5)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D62))
+ (comp (ref D5)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D5D))
+ (comp (ref D4)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D5C))
+ (comp (ref R4)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D5B))
+ (comp (ref R3)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D5A))
+ (comp (ref D3)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D25))
+ (comp (ref D2)
+ (value BAT43)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4D1B))
+ (comp (ref R2)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4CFB))
+ (comp (ref R1)
+ (value 10K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4CF4))
+ (comp (ref J1)
+ (value DB9-FEMAL)
+ (libsource (lib conn) (part DB9))
+ (sheetpath (names /pic_programmer/) (tstamps /48553E53/))
+ (tstamp 442A4C93)))
+ (libparts
+ (libpart (lib conn) (part CONN_2)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib conn) (part DB9)
+ (footprints
+ (fp DB9*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB9))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))))
+ (libpart (lib conn) (part SUPP28)
+ (fields
+ (field (name Reference) J)
+ (field (name Value) SUPP28))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name 14) (type passive))
+ (pin (num 15) (name 15) (type passive))
+ (pin (num 16) (name 16) (type passive))
+ (pin (num 17) (name 17) (type passive))
+ (pin (num 18) (name 18) (type passive))
+ (pin (num 19) (name 19) (type passive))
+ (pin (num 20) (name 20) (type passive))
+ (pin (num 21) (name 21) (type passive))
+ (pin (num 22) (name 22) (type passive))
+ (pin (num 23) (name 23) (type passive))
+ (pin (num 24) (name 24) (type passive))
+ (pin (num 25) (name 25) (type passive))
+ (pin (num 26) (name 26) (type passive))
+ (pin (num 27) (name 27) (type passive))
+ (pin (num 28) (name 28) (type passive))))
+ (libpart (lib conn) (part SUPP40)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) SUPP40))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name 14) (type passive))
+ (pin (num 15) (name 15) (type passive))
+ (pin (num 16) (name 16) (type passive))
+ (pin (num 17) (name 17) (type passive))
+ (pin (num 18) (name 18) (type passive))
+ (pin (num 19) (name 19) (type passive))
+ (pin (num 20) (name 20) (type passive))
+ (pin (num 21) (name 21) (type passive))
+ (pin (num 22) (name 22) (type passive))
+ (pin (num 23) (name 23) (type passive))
+ (pin (num 24) (name 24) (type passive))
+ (pin (num 25) (name 25) (type passive))
+ (pin (num 26) (name 26) (type passive))
+ (pin (num 27) (name 27) (type passive))
+ (pin (num 28) (name 28) (type passive))
+ (pin (num 29) (name 29) (type passive))
+ (pin (num 30) (name 30) (type passive))
+ (pin (num 31) (name 31) (type passive))
+ (pin (num 32) (name 32) (type passive))
+ (pin (num 33) (name 33) (type passive))
+ (pin (num 34) (name 34) (type passive))
+ (pin (num 35) (name 35) (type passive))
+ (pin (num 36) (name 36) (type passive))
+ (pin (num 37) (name 37) (type passive))
+ (pin (num 38) (name 38) (type passive))
+ (pin (num 39) (name 39) (type passive))
+ (pin (num 40) (name 40) (type passive))))
+ (libpart (lib memory) (part 24C16)
+ (aliases
+ (alias 24C512))
+ (description "I2C Serial EEPROM")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 24C16))
+ (pins
+ (pin (num 1) (name A0) (type input))
+ (pin (num 2) (name A1) (type input))
+ (pin (num 3) (name A2) (type input))
+ (pin (num 4) (name GND) (type power_in))
+ (pin (num 5) (name SDA) (type BiDi))
+ (pin (num 6) (name SCL) (type input))
+ (pin (num 7) (name WP) (type input))
+ (pin (num 8) (name VCC) (type power_in))))
+ (libpart (lib regul) (part 7805)
+ (aliases
+ (alias LM7805)
+ (alias LM7812)
+ (alias 78L05))
+ (description "Linear Regulator +5V")
+ (docs regulator\lm78xx.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 7805))
+ (pins
+ (pin (num GND) (name GND) (type input))
+ (pin (num VI) (name VI) (type input))
+ (pin (num VO) (name VO) (type power_out))))
+ (libpart (lib regul) (part LT1372)
+ (aliases
+ (alias LT1373))
+ (description "Set up/step down switching regulator")
+ (docs regulator/lt1372-1377.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) LT1372))
+ (pins
+ (pin (num 1) (name Vc) (type input))
+ (pin (num 2) (name FB+) (type input))
+ (pin (num 3) (name FB-) (type passive))
+ (pin (num 4) (name S/S) (type passive))
+ (pin (num 5) (name Vin) (type power_in))
+ (pin (num 6) (name GND_S) (type input))
+ (pin (num 7) (name GND) (type input))
+ (pin (num 8) (name Vsw) (type input))))
+ (libpart (lib 74xx) (part 74LS125)
+ (description "Quad buffer 3 State out")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS125))
+ (pins
+ (pin (num 1) (name E) (type input))
+ (pin (num 2) (name D) (type input))
+ (pin (num 3) (name O) (type 3state))
+ (pin (num 4) (name E) (type input))
+ (pin (num 5) (name D) (type input))
+ (pin (num 6) (name O) (type 3state))
+ (pin (num 7) (name GND) (type power_in))
+ (pin (num 8) (name O) (type 3state))
+ (pin (num 9) (name D) (type input))
+ (pin (num 10) (name E) (type input))
+ (pin (num 11) (name O) (type 3state))
+ (pin (num 12) (name D) (type input))
+ (pin (num 13) (name E) (type input))
+ (pin (num 14) (name VCC) (type power_in))))
+ (libpart (lib microcontrollers) (part PIC12C508A)
+ (aliases
+ (alias PIC12C509A))
+ (description "8-Bit CMOS Microcontroller")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) PIC12C508A))
+ (pins
+ (pin (num 1) (name VDD) (type power_in))
+ (pin (num 2) (name GP5/OSC1) (type input))
+ (pin (num 3) (name GP4/OSC2) (type input))
+ (pin (num 4) (name GP3/MCLR) (type input))
+ (pin (num 5) (name GP2) (type input))
+ (pin (num 6) (name GP1) (type input))
+ (pin (num 7) (name GP0) (type input))
+ (pin (num 8) (name VSS) (type power_in))))
+ (libpart (lib microcontrollers) (part PIC16F54)
+ (description "18 pins - FLASH-Based 8-Bit CMOS Microcontroller")
+ (fields
+ (field (name Reference) U?)
+ (field (name Value) PIC16F54))
+ (pins
+ (pin (num 1) (name RA2) (type BiDi))
+ (pin (num 2) (name RA3) (type BiDi))
+ (pin (num 3) (name T0ckl) (type output))
+ (pin (num 4) (name MCLR) (type input))
+ (pin (num 5) (name VSS) (type power_in))
+ (pin (num 6) (name RB0) (type BiDi))
+ (pin (num 7) (name RB1) (type BiDi))
+ (pin (num 8) (name RB2) (type BiDi))
+ (pin (num 9) (name RB3) (type BiDi))
+ (pin (num 10) (name RB4) (type BiDi))
+ (pin (num 11) (name RB5) (type BiDi))
+ (pin (num 12) (name ICSPC/RB6) (type BiDi))
+ (pin (num 13) (name ICSPD/RB7) (type BiDi))
+ (pin (num 14) (name VDD) (type power_in))
+ (pin (num 15) (name OSC2/CLKO) (type output))
+ (pin (num 16) (name OSC1/CLKI) (type input))
+ (pin (num 17) (name RA0) (type BiDi))
+ (pin (num 18) (name RA1) (type BiDi))))
+ (libpart (lib device) (part NPN)
+ (docs transistors/bipolar/*.*)
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) NPN))
+ (pins
+ (pin (num 1) (name E) (type passive))
+ (pin (num 2) (name B) (type input))
+ (pin (num 3) (name C) (type passive))))
+ (libpart (lib device) (part DIODESCH)
+ (description "Diode schottky")
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODESCH))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part JUMPER)
+ (fields
+ (field (name Reference) JP)
+ (field (name Value) JUMPER))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part DIODE)
+ (description "Diode simple")
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODE))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part INDUCTOR)
+ (fields
+ (field (name Reference) L)
+ (field (name Value) INDUCTOR))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part LED)
+ (footprints
+ (fp LED-3MM)
+ (fp LED-5MM)
+ (fp LED-10MM)
+ (fp LED-0603)
+ (fp LED-0805)
+ (fp LED-1206)
+ (fp LEDV))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) LED))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part R)
+ (description Resistance)
+ (footprints
+ (fp R?)
+ (fp SM0603)
+ (fp SM0805)
+ (fp R?-*)
+ (fp SM1206))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CP)
+ (aliases
+ (alias CAPAPOL))
+ (description "Condensateur polarise")
+ (footprints
+ (fp CP*)
+ (fp SM*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part POT)
+ (description Potentionmetre)
+ (fields
+ (field (name Reference) RV)
+ (field (name Value) POT))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))))
+ (libpart (lib device) (part PNP)
+ (docs transistors/bipolar/*.*)
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) PNP))
+ (pins
+ (pin (num 1) (name E) (type passive))
+ (pin (num 2) (name B) (type input))
+ (pin (num 3) (name C) (type passive))))
+ (libpart (lib device) (part C)
+ (description "Condensateur non polarise")
+ (footprints
+ (fp SM*)
+ (fp C?)
+ (fp C1-1))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive)))))
+ (libraries
+ (library (logical device)
+ (uri f:\kicad\share\library\device.lib))
+ (library (logical memory)
+ (uri f:\kicad\share\library\memory.lib))
+ (library (logical regul)
+ (uri f:\kicad\share\library\regul.lib))
+ (library (logical 74xx)
+ (uri f:\kicad\share\library\74xx.lib))
+ (library (logical microcontrollers)
+ (uri f:\kicad\share\library\microcontrollers.lib))
+ (library (logical conn)
+ (uri f:\kicad\share\library\conn.lib)))
+ (nets
+ (net (code 1) (name GND)
+ (node (ref U3) (pin GND))
+ (node (ref C2) (pin 2))
+ (node (ref P1) (pin 1))
+ (node (ref D8) (pin 2))
+ (node (ref R17) (pin 2))
+ (node (ref D9) (pin 2))
+ (node (ref C1) (pin 2))
+ (node (ref D7) (pin 1))
+ (node (ref U2) (pin 10))
+ (node (ref D5) (pin 1))
+ (node (ref R4) (pin 2))
+ (node (ref U2) (pin 13))
+ (node (ref R6) (pin 2))
+ (node (ref U2) (pin 1))
+ (node (ref R2) (pin 2))
+ (node (ref J1) (pin 5))
+ (node (ref U2) (pin 7))
+ (node (ref U2) (pin 4))
+ (node (ref D3) (pin 1))
+ (node (ref C8) (pin 2))
+ (node (ref U5) (pin 5))
+ (node (ref U1) (pin 3))
+ (node (ref U1) (pin 2))
+ (node (ref U1) (pin 1))
+ (node (ref U6) (pin 8))
+ (node (ref P3) (pin 8))
+ (node (ref U1) (pin 4))
+ (node (ref P3) (pin 12))
+ (node (ref P3) (pin 31))
+ (node (ref Q1) (pin 1))
+ (node (ref P2) (pin 8))
+ (node (ref C6) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref P2) (pin 19))
+ (node (ref U4) (pin 6))
+ (node (ref U4) (pin 7))
+ (node (ref C3) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref R15) (pin 2))
+ (node (ref D12) (pin 2)))
+ (net (code 2) (name VCC)
+ (node (ref D2) (pin 2))
+ (node (ref U3) (pin VO))
+ (node (ref U2) (pin 14))
+ (node (ref D6) (pin 2))
+ (node (ref Q3) (pin 1))
+ (node (ref R20) (pin 1))
+ (node (ref C6) (pin 1))
+ (node (ref JP1) (pin 1))
+ (node (ref L1) (pin 2))
+ (node (ref U4) (pin 5))
+ (node (ref C1) (pin 1))
+ (node (ref R14) (pin 1))
+ (node (ref U1) (pin 8))
+ (node (ref D4) (pin 2)))
+ (net (code 3) (name "Net-(U4-Pad3)")
+ (node (ref U4) (pin 3)))
+ (net (code 4) (name "Net-(D10-Pad1)")
+ (node (ref L1) (pin 1))
+ (node (ref U4) (pin 8))
+ (node (ref D10) (pin 1)))
+ (net (code 5) (name "Net-(C5-Pad1)")
+ (node (ref R10) (pin 2))
+ (node (ref C5) (pin 1)))
+ (net (code 6) (name "Net-(D12-Pad1)")
+ (node (ref D12) (pin 1))
+ (node (ref R21) (pin 1)))
+ (net (code 7) (name "Net-(D11-Pad1)")
+ (node (ref D11) (pin 1))
+ (node (ref R19) (pin 1)))
+ (net (code 8) (name "Net-(Q3-Pad2)")
+ (node (ref R19) (pin 2))
+ (node (ref Q3) (pin 2))
+ (node (ref R20) (pin 2)))
+ (net (code 9) (name VPP)
+ (node (ref R16) (pin 2))
+ (node (ref D10) (pin 2))
+ (node (ref Q2) (pin 1))
+ (node (ref R7) (pin 1))
+ (node (ref C9) (pin 1))
+ (node (ref C3) (pin 1)))
+ (net (code 10) (name "Net-(J1-Pad9)")
+ (node (ref J1) (pin 9)))
+ (net (code 11) (name "Net-(C4-Pad1)")
+ (node (ref U4) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref R10) (pin 1)))
+ (net (code 12) (name "Net-(RV1-Pad2)")
+ (node (ref U4) (pin 2))
+ (node (ref RV1) (pin 2)))
+ (net (code 13) (name "Net-(U4-Pad4)")
+ (node (ref U4) (pin 4)))
+ (net (code 14) (name "Net-(R16-Pad1)")
+ (node (ref R16) (pin 1))
+ (node (ref RV1) (pin 3)))
+ (net (code 15) (name "Net-(R15-Pad1)")
+ (node (ref R15) (pin 1))
+ (node (ref RV1) (pin 1)))
+ (net (code 16) (name "Net-(D8-Pad1)")
+ (node (ref D8) (pin 1))
+ (node (ref R9) (pin 2)))
+ (net (code 17) (name "Net-(D9-Pad1)")
+ (node (ref D9) (pin 1))
+ (node (ref R14) (pin 2)))
+ (net (code 18) (name "Net-(C2-Pad1)")
+ (node (ref C2) (pin 1))
+ (node (ref U3) (pin VI))
+ (node (ref D1) (pin 2)))
+ (net (code 19) (name "Net-(R8-Pad1)")
+ (node (ref R8) (pin 1))
+ (node (ref U2) (pin 3)))
+ (net (code 20) (name "Net-(D1-Pad1)")
+ (node (ref P1) (pin 2))
+ (node (ref D1) (pin 1)))
+ (net (code 21) (name "Net-(Q1-Pad2)")
+ (node (ref Q1) (pin 2))
+ (node (ref R8) (pin 2)))
+ (net (code 22) (name "Net-(D11-Pad2)")
+ (node (ref D11) (pin 2))
+ (node (ref R11) (pin 1))
+ (node (ref Q1) (pin 3)))
+ (net (code 23) (name "Net-(Q2-Pad3)")
+ (node (ref R17) (pin 1))
+ (node (ref R18) (pin 1))
+ (node (ref R9) (pin 1))
+ (node (ref Q2) (pin 3)))
+ (net (code 24) (name "Net-(C9-Pad2)")
+ (node (ref C9) (pin 2))
+ (node (ref R7) (pin 2))
+ (node (ref R11) (pin 2))
+ (node (ref Q2) (pin 2)))
+ (net (code 25) (name "Net-(D4-Pad1)")
+ (node (ref D5) (pin 2))
+ (node (ref R3) (pin 2))
+ (node (ref D4) (pin 1))
+ (node (ref U2) (pin 5)))
+ (net (code 26) (name "Net-(R12-Pad1)")
+ (node (ref R12) (pin 1))
+ (node (ref U2) (pin 6)))
+ (net (code 27) (name "Net-(D6-Pad1)")
+ (node (ref R5) (pin 2))
+ (node (ref D6) (pin 1))
+ (node (ref D7) (pin 2))
+ (node (ref U2) (pin 9)))
+ (net (code 28) (name "Net-(J1-Pad2)")
+ (node (ref J1) (pin 2)))
+ (net (code 29) (name "Net-(D2-Pad1)")
+ (node (ref D2) (pin 1))
+ (node (ref D3) (pin 2))
+ (node (ref U2) (pin 2))
+ (node (ref R1) (pin 2)))
+ (net (code 30) (name "Net-(J1-Pad1)")
+ (node (ref J1) (pin 1)))
+ (net (code 31) (name "Net-(J1-Pad6)")
+ (node (ref J1) (pin 6)))
+ (net (code 32) (name /pic_programmer/DTR)
+ (node (ref R3) (pin 1))
+ (node (ref J1) (pin 4))
+ (node (ref R4) (pin 1)))
+ (net (code 33) (name "Net-(R13-Pad1)")
+ (node (ref R13) (pin 1))
+ (node (ref U2) (pin 8)))
+ (net (code 34) (name /pic_programmer/CTS)
+ (node (ref U2) (pin 11))
+ (node (ref J1) (pin 8)))
+ (net (code 35) (name /pic_programmer/TXD)
+ (node (ref R1) (pin 1))
+ (node (ref J1) (pin 3))
+ (node (ref R2) (pin 1)))
+ (net (code 36) (name /pic_programmer/PC-CLOCK-OUT)
+ (node (ref J1) (pin 7))
+ (node (ref R5) (pin 1))
+ (node (ref R6) (pin 1)))
+ (net (code 37) (name "Net-(P2-Pad9)")
+ (node (ref P2) (pin 9)))
+ (net (code 38) (name "Net-(P2-Pad10)")
+ (node (ref P2) (pin 10)))
+ (net (code 39) (name "Net-(P2-Pad11)")
+ (node (ref P2) (pin 11)))
+ (net (code 40) (name "Net-(P2-Pad5)")
+ (node (ref P2) (pin 5)))
+ (net (code 41) (name "Net-(P2-Pad7)")
+ (node (ref P2) (pin 7)))
+ (net (code 42) (name "Net-(P2-Pad6)")
+ (node (ref P2) (pin 6)))
+ (net (code 43) (name "Net-(P2-Pad15)")
+ (node (ref P2) (pin 15)))
+ (net (code 44) (name "Net-(P2-Pad21)")
+ (node (ref P2) (pin 21)))
+ (net (code 45) (name "Net-(P2-Pad12)")
+ (node (ref P2) (pin 12)))
+ (net (code 46) (name "Net-(P2-Pad22)")
+ (node (ref P2) (pin 22)))
+ (net (code 47) (name "Net-(P2-Pad13)")
+ (node (ref P2) (pin 13)))
+ (net (code 48) (name "Net-(P2-Pad23)")
+ (node (ref P2) (pin 23)))
+ (net (code 49) (name "Net-(P2-Pad14)")
+ (node (ref P2) (pin 14)))
+ (net (code 50) (name "Net-(P2-Pad24)")
+ (node (ref P2) (pin 24)))
+ (net (code 51) (name "Net-(P3-Pad26)")
+ (node (ref P3) (pin 26)))
+ (net (code 52) (name "Net-(P2-Pad4)")
+ (node (ref P2) (pin 4)))
+ (net (code 53) (name "Net-(P2-Pad3)")
+ (node (ref P2) (pin 3)))
+ (net (code 54) (name "Net-(P2-Pad2)")
+ (node (ref P2) (pin 2)))
+ (net (code 55) (name VPP-MCLR)
+ (node (ref P3) (pin 1))
+ (node (ref R18) (pin 2))
+ (node (ref U5) (pin 4))
+ (node (ref P2) (pin 1))
+ (node (ref U6) (pin 4)))
+ (net (code 56) (name "Net-(P3-Pad28)")
+ (node (ref P3) (pin 28)))
+ (net (code 57) (name "Net-(P3-Pad21)")
+ (node (ref P3) (pin 21)))
+ (net (code 58) (name "Net-(P3-Pad22)")
+ (node (ref P3) (pin 22)))
+ (net (code 59) (name "Net-(P3-Pad23)")
+ (node (ref P3) (pin 23)))
+ (net (code 60) (name "Net-(P3-Pad24)")
+ (node (ref P3) (pin 24)))
+ (net (code 61) (name "Net-(P3-Pad25)")
+ (node (ref P3) (pin 25)))
+ (net (code 62) (name VCC_PIC)
+ (node (ref U6) (pin 1))
+ (node (ref P2) (pin 20))
+ (node (ref C8) (pin 1))
+ (node (ref U5) (pin 14))
+ (node (ref JP1) (pin 2))
+ (node (ref P3) (pin 11))
+ (node (ref C7) (pin 1))
+ (node (ref Q3) (pin 3))
+ (node (ref R21) (pin 2))
+ (node (ref P3) (pin 32)))
+ (net (code 63) (name "Net-(P3-Pad27)")
+ (node (ref P3) (pin 27)))
+ (net (code 64) (name "Net-(P3-Pad29)")
+ (node (ref P3) (pin 29)))
+ (net (code 65) (name "Net-(P3-Pad30)")
+ (node (ref P3) (pin 30)))
+ (net (code 66) (name "Net-(P3-Pad33)")
+ (node (ref P3) (pin 33)))
+ (net (code 67) (name "Net-(P3-Pad34)")
+ (node (ref P3) (pin 34)))
+ (net (code 68) (name "Net-(P3-Pad35)")
+ (node (ref P3) (pin 35)))
+ (net (code 69) (name "Net-(P3-Pad36)")
+ (node (ref P3) (pin 36)))
+ (net (code 70) (name "Net-(P3-Pad37)")
+ (node (ref P3) (pin 37)))
+ (net (code 71) (name "Net-(P2-Pad25)")
+ (node (ref P2) (pin 25)))
+ (net (code 72) (name DATA-RB7)
+ (node (ref U6) (pin 7))
+ (node (ref U2) (pin 12))
+ (node (ref R12) (pin 2))
+ (node (ref U1) (pin 5))
+ (node (ref P2) (pin 28))
+ (node (ref U5) (pin 13))
+ (node (ref P3) (pin 40)))
+ (net (code 73) (name "Net-(P2-Pad18)")
+ (node (ref P2) (pin 18)))
+ (net (code 74) (name CLOCK-RB6)
+ (node (ref U5) (pin 12))
+ (node (ref P3) (pin 39))
+ (node (ref P2) (pin 27))
+ (node (ref U1) (pin 6))
+ (node (ref R13) (pin 2))
+ (node (ref U6) (pin 6)))
+ (net (code 75) (name "Net-(P2-Pad17)")
+ (node (ref P2) (pin 17)))
+ (net (code 76) (name "Net-(P2-Pad26)")
+ (node (ref P2) (pin 26)))
+ (net (code 77) (name "Net-(P2-Pad16)")
+ (node (ref P2) (pin 16)))
+ (net (code 78) (name "Net-(P3-Pad4)")
+ (node (ref P3) (pin 4)))
+ (net (code 79) (name "Net-(U5-Pad3)")
+ (node (ref U5) (pin 3)))
+ (net (code 80) (name "Net-(U5-Pad9)")
+ (node (ref U5) (pin 9)))
+ (net (code 81) (name "Net-(U5-Pad8)")
+ (node (ref U5) (pin 8)))
+ (net (code 82) (name "Net-(U5-Pad7)")
+ (node (ref U5) (pin 7)))
+ (net (code 83) (name "Net-(U5-Pad6)")
+ (node (ref U5) (pin 6)))
+ (net (code 84) (name "Net-(U5-Pad1)")
+ (node (ref U5) (pin 1)))
+ (net (code 85) (name "Net-(U5-Pad2)")
+ (node (ref U5) (pin 2)))
+ (net (code 86) (name "Net-(U5-Pad18)")
+ (node (ref U5) (pin 18)))
+ (net (code 87) (name "Net-(U5-Pad10)")
+ (node (ref U5) (pin 10)))
+ (net (code 88) (name "Net-(U5-Pad11)")
+ (node (ref U5) (pin 11)))
+ (net (code 89) (name "Net-(U5-Pad17)")
+ (node (ref U5) (pin 17)))
+ (net (code 90) (name "Net-(U5-Pad15)")
+ (node (ref U5) (pin 15)))
+ (net (code 91) (name "Net-(U5-Pad16)")
+ (node (ref U5) (pin 16)))
+ (net (code 92) (name "Net-(U1-Pad7)")
+ (node (ref U1) (pin 7)))
+ (net (code 93) (name "Net-(U6-Pad5)")
+ (node (ref U6) (pin 5)))
+ (net (code 94) (name "Net-(U6-Pad3)")
+ (node (ref U6) (pin 3)))
+ (net (code 95) (name "Net-(U6-Pad2)")
+ (node (ref U6) (pin 2)))
+ (net (code 96) (name "Net-(P3-Pad7)")
+ (node (ref P3) (pin 7)))
+ (net (code 97) (name "Net-(P3-Pad2)")
+ (node (ref P3) (pin 2)))
+ (net (code 98) (name "Net-(P3-Pad3)")
+ (node (ref P3) (pin 3)))
+ (net (code 99) (name "Net-(P3-Pad5)")
+ (node (ref P3) (pin 5)))
+ (net (code 100) (name "Net-(P3-Pad6)")
+ (node (ref P3) (pin 6)))
+ (net (code 101) (name "Net-(P3-Pad9)")
+ (node (ref P3) (pin 9)))
+ (net (code 102) (name "Net-(P3-Pad10)")
+ (node (ref P3) (pin 10)))
+ (net (code 103) (name "Net-(P3-Pad20)")
+ (node (ref P3) (pin 20)))
+ (net (code 104) (name "Net-(P3-Pad13)")
+ (node (ref P3) (pin 13)))
+ (net (code 105) (name "Net-(P3-Pad14)")
+ (node (ref P3) (pin 14)))
+ (net (code 106) (name "Net-(P3-Pad15)")
+ (node (ref P3) (pin 15)))
+ (net (code 107) (name "Net-(P3-Pad16)")
+ (node (ref P3) (pin 16)))
+ (net (code 108) (name "Net-(P3-Pad17)")
+ (node (ref P3) (pin 17)))
+ (net (code 109) (name "Net-(P3-Pad18)")
+ (node (ref P3) (pin 18)))
+ (net (code 110) (name "Net-(P3-Pad19)")
+ (node (ref P3) (pin 19)))
+ (net (code 111) (name "Net-(P3-Pad38)")
+ (node (ref P3) (pin 38))))) \ No newline at end of file
diff --git a/demos/flat_hierarchy/flat_hierarchy.pro b/demos/flat_hierarchy/flat_hierarchy.pro
new file mode 100644
index 0000000..74cd3fd
--- /dev/null
+++ b/demos/flat_hierarchy/flat_hierarchy.pro
@@ -0,0 +1,81 @@
+update=18/05/2015 09:02:06
+last_client=kicad
+[general]
+version=1
+RootSch=pic_programmer.sch
+BoardNm=pic_programmer.brd
+[common]
+NetDir=
+[pcbnew]
+version=1
+PadDril=400
+PadDimH=700
+PadDimV=700
+PadForm=1
+PadMask=14745599
+ViaDiam=650
+ViaDril=250
+Isol=100
+Countlayer=2
+Lpiste=250
+RouteTo=15
+RouteBo=0
+TypeVia=3
+Segm45=1
+Racc45=1
+Unite=0
+SegFill=1
+SegAffG=0
+NewAffG=1
+PadFill=1
+PadAffG=1
+PadSNum=1
+ModAffC=1
+ModAffT=1
+PcbAffT=1
+SgPcb45=1
+TxtPcbV=800
+TxtPcbH=600
+TxtModV=600
+TxtModH=600
+TxtModW=120
+HPGLnum=1
+HPGdiam=15
+HPGLSpd=20
+HPGLrec=2
+HPGLorg=0
+GERBmin=15
+VEgarde=100
+DrawLar=150
+EdgeLar=150
+TxtLar=120
+MSegLar=150
+ForPlot=1
+WpenSer=10
+UserGrX=0,01
+UserGrY=0,01
+UserGrU=1
+DivGrPc=1
+TimeOut=600
+MaxLnkS=3
+ShowRat=0
+ShowMRa=1
+[pcbnew/libraries]
+LibName1=connect
+LibName2=discret
+LibName3=pin_array
+LibName4=divers
+LibName5=libcms
+LibName6=display
+LibName7=dip_sockets
+LibDir=
+[cvpcb]
+version=1
+NetIExt=.net
+[cvpcb/libraries]
+EquName1=devcms
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=flat_hierarchy_schlib
diff --git a/demos/flat_hierarchy/flat_hierarchy.sch b/demos/flat_hierarchy/flat_hierarchy.sch
new file mode 100644
index 0000000..dcb831f
--- /dev/null
+++ b/demos/flat_hierarchy/flat_hierarchy.sch
@@ -0,0 +1,30 @@
+EESchema Schematic File Version 2
+LIBS:flat_hierarchy_schlib
+LIBS:flat_hierarchy-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 3
+Title ""
+Date "Sun 22 Mar 2015"
+Rev "1"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Sheet
+S 5600 2600 2100 1700
+U 48553E7C
+F0 "sockets" 60
+F1 "pic_sockets.sch" 60
+$EndSheet
+$Sheet
+S 3200 2600 1650 1700
+U 48553E53
+F0 "pic_programmer" 60
+F1 "pic_programmer.sch" 60
+$EndSheet
+$EndSCHEMATC
diff --git a/demos/flat_hierarchy/flat_hierarchy_schlib.lib b/demos/flat_hierarchy/flat_hierarchy_schlib.lib
new file mode 100644
index 0000000..fdac208
--- /dev/null
+++ b/demos/flat_hierarchy/flat_hierarchy_schlib.lib
@@ -0,0 +1,592 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 24C16
+#
+DEF 24C16 U 0 30 Y Y 1 F N
+F0 "U" 150 350 60 H V C CNN
+F1 "24C16" 200 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 24C512
+DRAW
+X GND 4 0 -500 200 U 60 60 0 0 W
+X VCC 8 0 500 200 D 60 60 0 0 W
+S -400 -300 400 300 1 1 0 N
+X A0 1 -700 200 300 R 60 60 1 1 I
+X A1 2 -700 100 300 R 60 60 1 1 I
+X A2 3 -700 0 300 R 60 60 1 1 I
+X SDA 5 700 -200 300 L 60 60 1 1 B
+X SCL 6 700 -100 300 L 60 60 1 1 I
+X WP 7 700 100 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JUMPER
+#
+DEF JUMPER JP 0 30 Y N 1 F N
+F0 "JP" 0 150 60 H V C CNN
+F1 "JUMPER" 0 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
+C -100 0 35 0 1 0 N
+C 100 0 35 0 1 0 N
+X 1 1 -300 0 165 R 60 60 0 1 P
+X 2 2 300 0 165 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LT1372
+#
+DEF LT1372 U 0 30 Y Y 1 F N
+F0 "U" 600 500 60 H V C CNN
+F1 "LT1372" -500 500 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LT1373
+DRAW
+S -700 -400 700 400 0 1 0 N
+X Vc 1 250 -700 300 U 60 60 1 1 I
+X FB+ 2 1000 -250 300 L 60 60 1 1 I
+X FB- 3 -1000 250 300 R 60 60 1 1 P
+X S/S 4 -1000 -250 300 R 60 60 1 1 P
+X Vin 5 0 700 300 D 60 60 1 1 W
+X GND_S 6 -150 -700 300 U 60 60 1 1 I
+X GND 7 -300 -700 300 U 60 60 1 1 I
+X Vsw 8 1000 250 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NPN
+#
+DEF NPN Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 50 H V R CNN
+F1 "NPN" 0 150 50 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PIC12C508A
+#
+DEF PIC12C508A U 0 40 Y Y 1 F N
+F0 "U" 0 700 60 H V C CNN
+F1 "PIC12C508A" 0 -650 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS PIC12C509A
+DRAW
+S 400 -600 -450 650 0 1 0 N
+X VDD 1 -750 500 300 R 50 50 1 1 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 1 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 1 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 1 I
+X GP2 5 700 -500 300 L 50 50 1 1 I
+X GP1 6 700 -200 300 L 50 50 1 1 I
+X GP0 7 700 200 300 L 50 50 1 1 I
+X VSS 8 700 500 300 L 50 50 1 1 W
+X VDD 1 -750 500 300 R 50 50 1 2 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 2 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 2 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 2 I
+X GP2 5 700 -500 300 L 50 50 1 2 I
+X GP1 6 700 -200 300 L 50 50 1 2 I
+X GP0 7 700 200 300 L 50 50 1 2 I
+X VSS 8 700 500 300 L 50 50 1 2 W
+ENDDRAW
+ENDDEF
+#
+# PIC16F54
+#
+DEF PIC16F54 U? 0 40 Y Y 1 F N
+F0 "U?" 0 -750 60 H V C CNN
+F1 "PIC16F54" 0 800 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 700 450 -700 0 1 0 N
+X RA2 1 -800 600 300 R 50 50 1 1 B
+X RA3 2 -800 450 300 R 50 50 1 1 B
+X T0ckl 3 -800 300 300 R 50 50 1 1 O
+X MCLR 4 -800 150 300 R 50 50 1 1 I
+X VSS 5 -800 0 300 R 50 50 1 1 W
+X RB0 6 -800 -150 300 R 50 50 1 1 B
+X RB1 7 -800 -300 300 R 50 50 1 1 B
+X RB2 8 -800 -450 300 R 50 50 1 1 B
+X RB3 9 -800 -600 300 R 50 50 1 1 B
+X RB4 10 750 -600 300 L 50 50 1 1 B
+X RB5 11 750 -450 300 L 50 50 1 1 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 1 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 1 B
+X VDD 14 750 0 300 L 50 50 1 1 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 1 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 1 I
+X RA0 17 750 450 300 L 50 50 1 1 B
+X RA1 18 750 600 300 L 50 50 1 1 B
+X RA2 1 -800 600 300 R 50 50 1 2 B
+X RA3 2 -800 450 300 R 50 50 1 2 B
+X T0ckl 3 -800 300 300 R 50 50 1 2 O
+X MCLR 4 -800 150 300 R 50 50 1 2 I
+X VSS 5 -800 0 300 R 50 50 1 2 W
+X RB0 6 -800 -150 300 R 50 50 1 2 B
+X RB1 7 -800 -300 300 R 50 50 1 2 B
+X RB2 8 -800 -450 300 R 50 50 1 2 B
+X RB3 9 -800 -600 300 R 50 50 1 2 B
+X RB4 10 750 -600 300 L 50 50 1 2 B
+X RB5 11 750 -450 300 L 50 50 1 2 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 2 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 2 B
+X VDD 14 750 0 300 L 50 50 1 2 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 2 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 2 I
+X RA0 17 750 450 300 L 50 50 1 2 B
+X RA1 18 750 600 300 L 50 50 1 2 B
+ENDDRAW
+ENDDEF
+#
+# PNP
+#
+DEF PNP Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 60 H V R CNN
+F1 "PNP" 0 150 60 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP28
+#
+DEF SUPP28 J 0 40 Y Y 1 F N
+F0 "J" 0 100 70 H V C CNN
+F1 "SUPP28" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -750 300 750 0 1 0 N
+X 1 1 -600 650 300 R 60 60 1 1 P
+X 2 2 -600 550 300 R 60 60 1 1 P
+X 3 3 -600 450 300 R 60 60 1 1 P
+X 4 4 -600 350 300 R 60 60 1 1 P
+X 5 5 -600 250 300 R 60 60 1 1 P
+X 6 6 -600 150 300 R 60 60 1 1 P
+X 7 7 -600 50 300 R 60 60 1 1 P
+X 8 8 -600 -50 300 R 60 60 1 1 P
+X 9 9 -600 -150 300 R 60 60 1 1 P
+X 10 10 -600 -250 300 R 60 60 1 1 P
+X 20 20 600 -150 300 L 60 60 1 1 P
+X 11 11 -600 -350 300 R 60 60 1 1 P
+X 21 21 600 -50 300 L 60 60 1 1 P
+X 12 12 -600 -450 300 R 60 60 1 1 P
+X 22 22 600 50 300 L 60 60 1 1 P
+X 13 13 -600 -550 300 R 60 60 1 1 P
+X 23 23 600 150 300 L 60 60 1 1 P
+X 14 14 -600 -650 300 R 60 60 1 1 P
+X 24 24 600 250 300 L 60 60 1 1 P
+X 15 15 600 -650 300 L 60 60 1 1 P
+X 25 25 600 350 300 L 60 60 1 1 P
+X 16 16 600 -550 300 L 60 60 1 1 P
+X 26 26 600 450 300 L 60 60 1 1 P
+X 17 17 600 -450 300 L 60 60 1 1 P
+X 27 27 600 550 300 L 60 60 1 1 P
+X 18 18 600 -350 300 L 60 60 1 1 P
+X 28 28 600 650 300 L 60 60 1 1 P
+X 19 19 600 -250 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP40
+#
+DEF SUPP40 P 0 40 Y Y 1 F N
+F0 "P" 0 1100 70 H V C CNN
+F1 "SUPP40" 0 -1100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -1050 300 1050 0 1 0 N
+X 1 1 -600 950 300 R 60 60 1 1 P
+X 2 2 -600 850 300 R 60 60 1 1 P
+X 3 3 -600 750 300 R 60 60 1 1 P
+X 4 4 -600 650 300 R 60 60 1 1 P
+X 5 5 -600 550 300 R 60 60 1 1 P
+X 6 6 -600 450 300 R 60 60 1 1 P
+X 7 7 -600 350 300 R 60 60 1 1 P
+X 8 8 -600 250 300 R 60 60 1 1 P
+X 9 9 -600 150 300 R 60 60 1 1 P
+X 10 10 -600 50 300 R 60 60 1 1 P
+X 20 20 -600 -950 300 R 60 60 1 1 P
+X 30 30 600 -50 300 L 60 60 1 1 P
+X 40 40 600 950 300 L 60 60 1 1 P
+X 11 11 -600 -50 300 R 60 60 1 1 P
+X 21 21 600 -950 300 L 60 60 1 1 P
+X 31 31 600 50 300 L 60 60 1 1 P
+X 12 12 -600 -150 300 R 60 60 1 1 P
+X 22 22 600 -850 300 L 60 60 1 1 P
+X 32 32 600 150 300 L 60 60 1 1 P
+X 13 13 -600 -250 300 R 60 60 1 1 P
+X 23 23 600 -750 300 L 60 60 1 1 P
+X 33 33 600 250 300 L 60 60 1 1 P
+X 14 14 -600 -350 300 R 60 60 1 1 P
+X 24 24 600 -650 300 L 60 60 1 1 P
+X 34 34 600 350 300 L 60 60 1 1 P
+X 15 15 -600 -450 300 R 60 60 1 1 P
+X 25 25 600 -550 300 L 60 60 1 1 P
+X 35 35 600 450 300 L 60 60 1 1 P
+X 16 16 -600 -550 300 R 60 60 1 1 P
+X 26 26 600 -450 300 L 60 60 1 1 P
+X 36 36 600 550 300 L 60 60 1 1 P
+X 17 17 -600 -650 300 R 60 60 1 1 P
+X 27 27 600 -350 300 L 60 60 1 1 P
+X 37 37 600 650 300 L 60 60 1 1 P
+X 18 18 -600 -750 300 R 60 60 1 1 P
+X 28 28 600 -250 300 L 60 60 1 1 P
+X 38 38 600 750 300 L 60 60 1 1 P
+X 19 19 -600 -850 300 R 60 60 1 1 P
+X 29 29 600 -150 300 L 60 60 1 1 P
+X 39 39 600 850 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VPP
+#
+DEF VPP #PWR 0 0 Y Y 1 F N
+F0 "#PWR" 0 200 40 H I C CNN
+F1 "VPP" 0 150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VPP 1 0 0 0 U 40 40 0 0 W N
+C 0 80 20 0 1 0 N
+P 2 0 1 0 0 60 0 0 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/flat_hierarchy/pic_programmer.sch b/demos/flat_hierarchy/pic_programmer.sch
new file mode 100644
index 0000000..5b79138
--- /dev/null
+++ b/demos/flat_hierarchy/pic_programmer.sch
@@ -0,0 +1,1349 @@
+EESchema Schematic File Version 2
+LIBS:flat_hierarchy_schlib
+LIBS:flat_hierarchy-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 3 3
+Title "JDM - COM84 PIC Programmer with 13V DC/DC converter"
+Date "Sun 22 Mar 2015"
+Rev "2"
+Comp "KiCad"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Connection ~ 8700 3800
+Wire Wire Line
+ 8700 3800 8700 3600
+Wire Wire Line
+ 6200 1350 6200 1500
+Connection ~ 8300 3800
+Wire Wire Line
+ 8300 3800 8300 3700
+Wire Wire Line
+ 7400 4050 7400 4100
+Wire Wire Line
+ 7900 4500 7900 4400
+Wire Wire Line
+ 7600 3400 7400 3400
+Wire Wire Line
+ 7900 3600 7900 3900
+Connection ~ 7900 5500
+Wire Wire Line
+ 8100 5500 8100 5550
+Wire Wire Line
+ 7800 5500 8100 5500
+Wire Wire Line
+ 2900 5850 3100 5850
+Wire Notes Line
+ 4600 5150 4600 7700
+Wire Notes Line
+ 4600 5150 600 5150
+Wire Notes Line
+ 600 5150 600 7700
+Wire Notes Line
+ 600 7700 4600 7700
+Connection ~ 3600 5850
+Wire Wire Line
+ 1900 5300 1900 5400
+Connection ~ 10200 5300
+Wire Wire Line
+ 10200 5250 10200 5350
+Connection ~ 9650 5300
+Wire Wire Line
+ 9550 5300 10200 5300
+Wire Wire Line
+ 10200 5950 10200 5850
+Wire Wire Line
+ 9650 5300 9650 5350
+Connection ~ 8400 5300
+Wire Wire Line
+ 8400 5350 8400 5300
+Wire Wire Line
+ 8300 5300 8750 5300
+Wire Wire Line
+ 7900 5600 7900 5500
+Wire Wire Line
+ 7900 5300 7800 5300
+Wire Wire Line
+ 8900 1500 9100 1500
+Wire Wire Line
+ 5800 4500 5600 4500
+Wire Wire Line
+ 5400 3150 5800 3150
+Connection ~ 6700 1400
+Wire Wire Line
+ 6700 1300 6700 1700
+Wire Wire Line
+ 7900 1000 7900 900
+Wire Wire Line
+ 7900 1400 7900 1600
+Wire Wire Line
+ 7900 2550 7900 2600
+Wire Wire Line
+ 7900 2100 7900 2150
+Wire Wire Line
+ 2100 4400 3300 4400
+Wire Wire Line
+ 2100 4400 2100 3500
+Wire Wire Line
+ 2100 3500 1700 3500
+Wire Wire Line
+ 2400 3250 3100 3250
+Wire Wire Line
+ 2200 1300 3150 1300
+Wire Wire Line
+ 2200 1300 2200 3600
+Wire Wire Line
+ 2200 3600 1700 3600
+Connection ~ 5500 3150
+Wire Wire Line
+ 4600 2200 5500 2200
+Wire Wire Line
+ 5500 2200 5500 3150
+Wire Wire Line
+ 5000 4500 5100 4500
+Wire Wire Line
+ 4850 1200 4750 1200
+Wire Wire Line
+ 4900 3150 4800 3150
+Connection ~ 3200 4400
+Wire Wire Line
+ 3200 4500 3200 4400
+Wire Wire Line
+ 3900 4300 3900 4600
+Connection ~ 3900 4500
+Connection ~ 3000 3250
+Wire Wire Line
+ 3000 3250 3000 3350
+Wire Wire Line
+ 3700 3050 3700 3350
+Connection ~ 3700 3250
+Wire Wire Line
+ 3600 3250 3700 3250
+Connection ~ 2900 1300
+Wire Wire Line
+ 2900 1400 2900 1300
+Wire Wire Line
+ 3750 1100 3750 1400
+Connection ~ 3750 1300
+Wire Wire Line
+ 7400 3300 7400 3550
+Connection ~ 7900 3800
+Wire Wire Line
+ 8300 1700 8300 1500
+Connection ~ 8300 1500
+Wire Wire Line
+ 6200 950 6200 750
+Wire Wire Line
+ 6700 700 6700 800
+Wire Wire Line
+ 9000 1400 9000 1500
+Connection ~ 9000 1500
+$Comp
+L PWR_FLAG #FLG015
+U 1 1 48553F47
+P 8700 3600
+F 0 "#FLG015" H 8700 3870 30 0001 C CNN
+F 1 "PWR_FLAG" H 8700 3830 30 0000 C CNN
+F 2 "" H 8700 3600 60 0001 C CNN
+F 3 "" H 8700 3600 60 0001 C CNN
+ 1 8700 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG016
+U 1 1 48553F27
+P 9000 1400
+F 0 "#FLG016" H 9000 1670 30 0001 C CNN
+F 1 "PWR_FLAG" H 9000 1630 30 0000 C CNN
+F 2 "" H 9000 1400 60 0001 C CNN
+F 3 "" H 9000 1400 60 0001 C CNN
+ 1 9000 1400
+ 1 0 0 -1
+$EndComp
+Text GLabel 5800 4500 2 60 Output ~ 0
+CLOCK-RB6
+Text GLabel 5800 3150 2 60 Output ~ 0
+DATA-RB7
+Text GLabel 9100 1500 2 60 Output ~ 0
+VPP-MCLR
+Text GLabel 8900 3800 2 60 Output ~ 0
+VCC_PIC
+$Comp
+L C C9
+U 1 1 464AD280
+P 6200 1150
+F 0 "C9" H 6250 1250 50 0000 L CNN
+F 1 "22OnF" H 6250 1050 50 0000 L CNN
+F 2 "Discret:C1-1" H 6200 1150 60 0001 C CNN
+F 3 "" H 6200 1150 60 0001 C CNN
+ 1 6200 1150
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR017
+U 1 1 4639BB04
+P 8300 3100
+F 0 "#PWR017" H 8300 3200 30 0001 C CNN
+F 1 "VCC" H 8300 3200 40 0000 C CNN
+F 2 "" H 8300 3100 60 0001 C CNN
+F 3 "" H 8300 3100 60 0001 C CNN
+ 1 8300 3100
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER JP1
+U 1 1 4639BAF8
+P 8300 3400
+F 0 "JP1" V 8100 3500 60 0000 C CNN
+F 1 "JUMPER" H 8300 3320 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 8300 3400 60 0001 C CNN
+F 3 "" H 8300 3400 60 0001 C CNN
+ 1 8300 3400
+ 0 1 1 0
+$EndComp
+$Comp
+L DIODESCH D11
+U 1 1 4639BA28
+P 7400 4300
+F 0 "D11" V 7350 4500 50 0000 C CNN
+F 1 "BAT43" V 7450 4500 50 0000 C CNN
+F 2 "Discret:D3" H 7400 4300 60 0001 C CNN
+F 3 "" H 7400 4300 60 0001 C CNN
+ 1 7400 4300
+ 0 1 1 0
+$EndComp
+$Comp
+L VCC #PWR018
+U 1 1 4639BA17
+P 7900 3200
+F 0 "#PWR018" H 7900 3300 30 0001 C CNN
+F 1 "VCC" H 7900 3300 40 0000 C CNN
+F 2 "" H 7900 3200 60 0001 C CNN
+F 3 "" H 7900 3200 60 0001 C CNN
+ 1 7900 3200
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR019
+U 1 1 4639B9EB
+P 7900 4950
+F 0 "#PWR019" H 7900 4950 30 0001 C CNN
+F 1 "GND" H 7900 4880 30 0001 C CNN
+F 2 "" H 7900 4950 60 0001 C CNN
+F 3 "" H 7900 4950 60 0001 C CNN
+ 1 7900 4950
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED D12
+U 1 1 4639B9EA
+P 7900 4700
+F 0 "D12" V 7800 4550 50 0000 C CNN
+F 1 "YELLOW-LED" H 7900 4800 50 0000 C CNN
+F 2 "Discret:LEDV" H 7900 4700 60 0001 C CNN
+F 3 "" H 7900 4700 60 0001 C CNN
+F 4 "YELLOW-LED" H 7900 4900 40 0000 C CNN "Champ4"
+ 1 7900 4700
+ 0 1 1 0
+$EndComp
+$Comp
+L R R21
+U 1 1 4639B9E9
+P 7900 4150
+F 0 "R21" H 7800 4350 50 0000 C CNN
+F 1 "470" V 7900 4150 50 0000 C CNN
+F 2 "Discret:R4" H 7900 4150 60 0001 C CNN
+F 3 "" H 7900 4150 60 0001 C CNN
+ 1 7900 4150
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R20
+U 1 1 4639B9B3
+P 7400 3050
+F 0 "R20" H 7300 3250 50 0000 C CNN
+F 1 "2.2K" V 7400 3050 50 0000 C CNN
+F 2 "Discret:R4" H 7400 3050 60 0001 C CNN
+F 3 "" H 7400 3050 60 0001 C CNN
+ 1 7400 3050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R19
+U 1 1 4639B9B0
+P 7400 3800
+F 0 "R19" H 7500 3600 50 0000 C CNN
+F 1 "2.2K" V 7400 3800 50 0000 C CNN
+F 2 "Discret:R4" H 7400 3800 60 0001 C CNN
+F 3 "" H 7400 3800 60 0001 C CNN
+ 1 7400 3800
+ -1 0 0 1
+$EndComp
+$Comp
+L PNP Q3
+U 1 1 4639B996
+P 7800 3400
+F 0 "Q3" H 7700 3150 50 0000 C CNN
+F 1 "BC307" H 7700 3250 50 0000 C CNN
+F 2 "Discret:TO92" H 7800 3400 60 0001 C CNN
+F 3 "" H 7800 3400 60 0001 C CNN
+ 1 7800 3400
+ 1 0 0 1
+$EndComp
+$Comp
+L VCC #PWR020
+U 1 1 4638AB33
+P 7400 2750
+F 0 "#PWR020" H 7400 2850 30 0001 C CNN
+F 1 "VCC" H 7400 2850 40 0000 C CNN
+F 2 "" H 7400 2750 60 0001 C CNN
+F 3 "" H 7400 2750 60 0001 C CNN
+ 1 7400 2750
+ 1 0 0 -1
+$EndComp
+Text Notes 2600 6900 0 50 ~ 0
+ADJUST for VPP = 13V
+$Comp
+L POT RV1
+U 1 1 443D0101
+P 3600 6750
+F 0 "RV1" V 3750 6900 50 0000 C CNN
+F 1 "1K" H 3600 6750 50 0000 C CNN
+F 2 "Discret:RV2X4" H 3600 6750 60 0001 C CNN
+F 3 "" H 3600 6750 60 0001 C CNN
+ 1 3600 6750
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R18
+U 1 1 44369638
+P 8650 1500
+F 0 "R18" V 8730 1500 50 0000 C CNN
+F 1 "220" V 8650 1500 50 0000 C CNN
+F 2 "Discret:R4" H 8650 1500 60 0001 C CNN
+F 3 "" H 8650 1500 60 0001 C CNN
+ 1 8650 1500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR021
+U 1 1 442AABC2
+P 7900 2600
+F 0 "#PWR021" H 7900 2600 30 0001 C CNN
+F 1 "GND" H 7900 2530 30 0001 C CNN
+F 2 "" H 7900 2600 60 0001 C CNN
+F 3 "" H 7900 2600 60 0001 C CNN
+ 1 7900 2600
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG022
+U 1 1 442A8330
+P 8100 5550
+F 0 "#FLG022" H 8100 5820 30 0001 C CNN
+F 1 "PWR_FLAG" H 8100 5780 30 0000 C CNN
+F 2 "" H 8100 5550 60 0001 C CNN
+F 3 "" H 8100 5550 60 0001 C CNN
+ 1 8100 5550
+ -1 0 0 1
+$EndComp
+Text Label 1850 3800 0 60 ~ 0
+DTR
+Text Label 1850 3700 0 60 ~ 0
+CTS
+Text Label 1850 3600 0 60 ~ 0
+TXD
+Text Label 1850 3500 0 60 ~ 0
+RTS
+Text Notes 7300 5150 0 60 ~ 0
+8 to 15V
+NoConn ~ 900 5850
+$Comp
+L DIODESCH D10
+U 1 1 442A6026
+P 3300 5850
+F 0 "D10" H 3300 5950 40 0000 C CNN
+F 1 "SCHOTTKY" H 3300 5750 40 0000 C CNN
+F 2 "Discret:D5" H 3300 5850 60 0001 C CNN
+F 3 "" H 3300 5850 60 0001 C CNN
+ 1 3300 5850
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R10
+U 1 1 442A5F83
+P 2150 7200
+F 0 "R10" V 2230 7200 50 0000 C CNN
+F 1 "5.1K" V 2150 7200 50 0000 C CNN
+F 2 "Discret:R4" H 2150 7200 60 0001 C CNN
+F 3 "" H 2150 7200 60 0001 C CNN
+ 1 2150 7200
+ 0 1 -1 0
+$EndComp
+$Comp
+L C C4
+U 1 1 442A5F61
+P 1900 7450
+F 0 "C4" V 2050 7450 50 0000 C CNN
+F 1 "0" V 1750 7450 50 0000 C CNN
+F 2 "Discret:C1-1" H 1900 7450 60 0001 C CNN
+F 3 "" H 1900 7450 60 0001 C CNN
+ 1 1900 7450
+ 0 1 -1 0
+$EndComp
+$Comp
+L LT1373 U4
+U 1 1 442A5E20
+P 1900 6100
+F 0 "U4" H 2500 6600 60 0000 C CNN
+F 1 "LT1373" H 1400 6600 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-8__300_ELL" H 1900 6100 60 0001 C CNN
+F 3 "" H 1900 6100 60 0001 C CNN
+ 1 1900 6100
+ 1 0 0 -1
+$EndComp
+Text Notes 900 5350 0 60 ~ 0
+VPP (13V) power
+$Comp
+L R R16
+U 1 1 442A58DC
+P 3600 6200
+F 0 "R16" H 3750 6050 50 0000 C CNN
+F 1 "62K" V 3600 6200 50 0000 C CNN
+F 2 "Discret:R4" H 3600 6200 60 0001 C CNN
+F 3 "" H 3600 6200 60 0001 C CNN
+ 1 3600 6200
+ -1 0 0 1
+$EndComp
+$Comp
+L R R15
+U 1 1 442A58D7
+P 3600 7300
+F 0 "R15" H 3450 7450 50 0000 C CNN
+F 1 "6.2K" V 3600 7300 50 0000 C CNN
+F 2 "Discret:R4" H 3600 7300 60 0001 C CNN
+F 3 "" H 3600 7300 60 0001 C CNN
+ 1 3600 7300
+ 1 0 0 -1
+$EndComp
+NoConn ~ 900 6350
+$Comp
+L C C5
+U 1 1 442A58B1
+P 1650 7200
+F 0 "C5" V 1800 7200 50 0000 C CNN
+F 1 "10nF" V 1500 7200 50 0000 C CNN
+F 2 "Discret:C1-1" H 1650 7200 60 0001 C CNN
+F 3 "" H 1650 7200 60 0001 C CNN
+ 1 1650 7200
+ 0 1 -1 0
+$EndComp
+$Comp
+L PWR_FLAG #FLG023
+U 1 1 442A5893
+P 3700 5800
+F 0 "#FLG023" H 3700 6070 30 0001 C CNN
+F 1 "PWR_FLAG" H 3700 6030 30 0000 C CNN
+F 2 "" H 3700 5800 60 0001 C CNN
+F 3 "" H 3700 5800 60 0001 C CNN
+ 1 3700 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C3
+U 1 1 442A584C
+P 3950 6200
+F 0 "C3" H 4100 6250 50 0000 L CNN
+F 1 "22uF/25V" H 4100 6150 50 0000 L CNN
+F 2 "Discret:CP8" H 3950 6200 60 0001 C CNN
+F 3 "" H 3950 6200 60 0001 C CNN
+ 1 3950 6200
+ 1 0 0 -1
+$EndComp
+$Comp
+L VPP #PWR34
+U 1 1 442A5846
+P 3950 5800
+F 0 "#PWR34" H 3950 6000 40 0001 C CNN
+F 1 "VPP" H 3950 5950 40 0000 C CNN
+F 2 "" H 3950 5800 60 0001 C CNN
+F 3 "" H 3950 5800 60 0001 C CNN
+ 1 3950 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR024
+U 1 1 442A57CB
+P 1900 5300
+F 0 "#PWR024" H 1900 5400 30 0001 C CNN
+F 1 "VCC" H 1900 5400 30 0000 C CNN
+F 2 "" H 1900 5300 60 0001 C CNN
+F 3 "" H 1900 5300 60 0001 C CNN
+ 1 1900 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L1
+U 1 1 442A57BE
+P 2550 5350
+F 0 "L1" V 2500 5350 40 0000 C CNN
+F 1 "22uH" V 2650 5350 40 0000 C CNN
+F 2 "inductors:INDUCTOR_V" H 2550 5350 60 0001 C CNN
+F 3 "" H 2550 5350 60 0001 C CNN
+ 1 2550 5350
+ 0 1 -1 0
+$EndComp
+NoConn ~ 1700 3900
+NoConn ~ 1700 3400
+NoConn ~ 1700 3300
+NoConn ~ 1700 3200
+$Comp
+L GND #PWR025
+U 1 1 442A50C2
+P 8300 2300
+F 0 "#PWR025" H 8300 2300 30 0001 C CNN
+F 1 "GND" H 8300 2230 30 0001 C CNN
+F 2 "" H 8300 2300 60 0001 C CNN
+F 3 "" H 8300 2300 60 0001 C CNN
+ 1 8300 2300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R17
+U 1 1 442A50BF
+P 8300 1950
+F 0 "R17" H 8200 2150 50 0000 C CNN
+F 1 "22K" V 8300 1950 50 0000 C CNN
+F 2 "Discret:R4" H 8300 1950 60 0001 C CNN
+F 3 "" H 8300 1950 60 0001 C CNN
+ 1 8300 1950
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR026
+U 1 1 442A50B3
+P 10200 5250
+F 0 "#PWR026" H 10200 5350 30 0001 C CNN
+F 1 "VCC" H 10200 5350 40 0000 C CNN
+F 2 "" H 10200 5250 60 0001 C CNN
+F 3 "" H 10200 5250 60 0001 C CNN
+ 1 10200 5250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR027
+U 1 1 442A5095
+P 10200 6350
+F 0 "#PWR027" H 10200 6350 30 0001 C CNN
+F 1 "GND" H 10200 6280 30 0001 C CNN
+F 2 "" H 10200 6350 60 0001 C CNN
+F 3 "" H 10200 6350 60 0001 C CNN
+ 1 10200 6350
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED D9
+U 1 1 442A5084
+P 10200 6150
+F 0 "D9" V 10100 6000 50 0000 C CNN
+F 1 "GREEN-LED" H 10200 6250 50 0000 C CNN
+F 2 "Discret:LEDV" H 10200 6150 60 0001 C CNN
+F 3 "" H 10200 6150 60 0001 C CNN
+F 4 "GREEN LED" H 10200 6350 40 0000 C CNN "Champ4"
+ 1 10200 6150
+ 0 1 1 0
+$EndComp
+$Comp
+L R R14
+U 1 1 442A5083
+P 10200 5600
+F 0 "R14" H 10100 5800 50 0000 C CNN
+F 1 "470" V 10200 5600 50 0000 C CNN
+F 2 "Discret:R4" H 10200 5600 60 0001 C CNN
+F 3 "" H 10200 5600 60 0001 C CNN
+ 1 10200 5600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR028
+U 1 1 442A5057
+P 9650 5800
+F 0 "#PWR028" H 9650 5800 30 0001 C CNN
+F 1 "GND" H 9650 5730 30 0001 C CNN
+F 2 "" H 9650 5800 60 0001 C CNN
+F 3 "" H 9650 5800 60 0001 C CNN
+ 1 9650 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C1
+U 1 1 442A5056
+P 9650 5550
+F 0 "C1" H 9800 5600 50 0000 L CNN
+F 1 "100uF" H 9800 5500 50 0000 L CNN
+F 2 "Discret:CP10" H 9650 5550 60 0001 C CNN
+F 3 "" H 9650 5550 60 0001 C CNN
+ 1 9650 5550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR029
+U 1 1 442A5050
+P 9150 5650
+F 0 "#PWR029" H 9150 5650 30 0001 C CNN
+F 1 "GND" H 9150 5580 30 0001 C CNN
+F 2 "" H 9150 5650 60 0001 C CNN
+F 3 "" H 9150 5650 60 0001 C CNN
+ 1 9150 5650
+ 1 0 0 -1
+$EndComp
+$Comp
+L 7805 U3
+U 1 1 442A504A
+P 9150 5350
+F 0 "U3" H 9150 5650 60 0000 C CNN
+F 1 "7805" H 9150 5550 60 0000 C CNN
+F 2 "Discret:LM78XX" H 9150 5350 60 0001 C CNN
+F 3 "" H 9150 5350 60 0001 C CNN
+ 1 9150 5350
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR030
+U 1 1 442A5023
+P 8400 5800
+F 0 "#PWR030" H 8400 5800 30 0001 C CNN
+F 1 "GND" H 8400 5730 30 0001 C CNN
+F 2 "" H 8400 5800 60 0001 C CNN
+F 3 "" H 8400 5800 60 0001 C CNN
+ 1 8400 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C2
+U 1 1 442A501D
+P 8400 5550
+F 0 "C2" H 8550 5600 50 0000 L CNN
+F 1 "220uF" H 8550 5500 50 0000 L CNN
+F 2 "Discret:CP10" H 8400 5550 60 0001 C CNN
+F 3 "" H 8400 5550 60 0001 C CNN
+ 1 8400 5550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR031
+U 1 1 442A500F
+P 7900 5600
+F 0 "#PWR031" H 7900 5600 30 0001 C CNN
+F 1 "GND" H 7900 5530 30 0001 C CNN
+F 2 "" H 7900 5600 60 0001 C CNN
+F 3 "" H 7900 5600 60 0001 C CNN
+ 1 7900 5600
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODE D1
+U 1 1 442A500B
+P 8100 5300
+F 0 "D1" H 8100 5400 50 0000 C CNN
+F 1 "1N4004" H 8100 5200 50 0000 C CNN
+F 2 "Discret:D5" H 8100 5300 60 0001 C CNN
+F 3 "" H 8100 5300 60 0001 C CNN
+ 1 8100 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P1
+U 1 1 442A4FE7
+P 7450 5400
+F 0 "P1" V 7400 5400 40 0000 C CNN
+F 1 "CONN_2" V 7500 5400 40 0000 C CNN
+F 2 "Connect:bornier2" H 7450 5400 60 0001 C CNN
+F 3 "" H 7450 5400 60 0001 C CNN
+ 1 7450 5400
+ -1 0 0 1
+$EndComp
+$Comp
+L LED D8
+U 1 1 442A4F5D
+P 7900 2350
+F 0 "D8" V 7800 2200 50 0000 C CNN
+F 1 "RED-LED" H 7900 2450 50 0000 C CNN
+F 2 "Discret:LEDV" H 7900 2350 60 0001 C CNN
+F 3 "" H 7900 2350 60 0001 C CNN
+F 4 "Low Current Led" V 8250 2350 40 0000 C CNN "Champ4"
+F 5 "RED LED" H 7900 2550 40 0000 C CNN "Champ5"
+ 1 7900 2350
+ 0 1 1 0
+$EndComp
+$Comp
+L R R9
+U 1 1 442A4F52
+P 7900 1850
+F 0 "R9" H 7800 2050 50 0000 C CNN
+F 1 "2.2K" V 7900 1850 50 0000 C CNN
+F 2 "Discret:R4" H 7900 1850 60 0001 C CNN
+F 3 "" H 7900 1850 60 0001 C CNN
+ 1 7900 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L VPP #PWR23
+U 1 1 442A4F48
+P 7900 900
+F 0 "#PWR23" H 7900 1100 40 0001 C CNN
+F 1 "VPP" H 7900 1050 40 0000 C CNN
+F 2 "" H 7900 900 60 0001 C CNN
+F 3 "" H 7900 900 60 0001 C CNN
+ 1 7900 900
+ 1 0 0 -1
+$EndComp
+$Comp
+L VPP #PWR22
+U 1 1 442A4F44
+P 6700 700
+F 0 "#PWR22" H 6700 900 40 0001 C CNN
+F 1 "VPP" H 6700 850 40 0000 C CNN
+F 2 "" H 6700 700 60 0001 C CNN
+F 3 "" H 6700 700 60 0001 C CNN
+ 1 6700 700
+ 1 0 0 -1
+$EndComp
+$Comp
+L PNP Q2
+U 1 1 442A4F30
+P 7800 1200
+F 0 "Q2" H 7700 900 50 0000 C CNN
+F 1 "BC307" H 7700 1000 50 0000 C CNN
+F 2 "Discret:TO92" H 7800 1200 60 0001 C CNN
+F 3 "" H 7800 1200 60 0001 C CNN
+ 1 7800 1200
+ 1 0 0 1
+$EndComp
+$Comp
+L R R7
+U 1 1 442A4F2A
+P 6700 1050
+F 0 "R7" H 6600 1200 50 0000 C CNN
+F 1 "10K" V 6700 1050 50 0000 C CNN
+F 2 "Discret:R4" H 6700 1050 60 0001 C CNN
+F 3 "" H 6700 1050 60 0001 C CNN
+ 1 6700 1050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R11
+U 1 1 442A4F23
+P 6700 1950
+F 0 "R11" H 6800 1750 50 0000 C CNN
+F 1 "22K" V 6700 1950 50 0000 C CNN
+F 2 "Discret:R4" H 6700 1950 60 0001 C CNN
+F 3 "" H 6700 1950 60 0001 C CNN
+ 1 6700 1950
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #PWR032
+U 1 1 442A4F1C
+P 6700 2850
+F 0 "#PWR032" H 6700 2850 30 0001 C CNN
+F 1 "GND" H 6700 2780 30 0001 C CNN
+F 2 "" H 6700 2850 60 0001 C CNN
+F 3 "" H 6700 2850 60 0001 C CNN
+ 1 6700 2850
+ 1 0 0 -1
+$EndComp
+Text Label 2500 1300 0 60 ~ 0
+VPP_ON
+$Comp
+L NPN Q1
+U 1 1 442A4EB9
+P 6600 2600
+F 0 "Q1" H 6500 2850 50 0000 C CNN
+F 1 "BC237" H 6502 2750 50 0000 C CNN
+F 2 "Discret:TO92" H 6600 2600 60 0001 C CNN
+F 3 "" H 6600 2600 60 0001 C CNN
+ 1 6600 2600
+ 1 0 0 -1
+$EndComp
+Text Label 2350 4400 0 60 ~ 0
+PC-CLOCK-OUT
+$Comp
+L GND #PWR033
+U 1 1 442A4E06
+P 1700 4050
+F 0 "#PWR033" H 1700 4050 30 0001 C CNN
+F 1 "GND" H 1700 3980 30 0001 C CNN
+F 2 "" H 1700 4050 60 0001 C CNN
+F 3 "" H 1700 4050 60 0001 C CNN
+ 1 1700 4050
+ 1 0 0 -1
+$EndComp
+Text Label 2500 2200 0 60 ~ 0
+PC-DATA-IN
+Text Label 2400 3250 0 60 ~ 0
+PC-DATA-OUT
+$Comp
+L GND #PWR034
+U 1 1 442A4DB3
+P 2900 2000
+F 0 "#PWR034" H 2900 2000 30 0001 C CNN
+F 1 "GND" H 2900 1930 30 0001 C CNN
+F 2 "" H 2900 2000 60 0001 C CNN
+F 3 "" H 2900 2000 60 0001 C CNN
+ 1 2900 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR035
+U 1 1 442A4DAE
+P 3200 5050
+F 0 "#PWR035" H 3200 5050 30 0001 C CNN
+F 1 "GND" H 3200 4980 30 0001 C CNN
+F 2 "" H 3200 5050 60 0001 C CNN
+F 3 "" H 3200 5050 60 0001 C CNN
+ 1 3200 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR036
+U 1 1 442A4DAB
+P 3000 3900
+F 0 "#PWR036" H 3000 3900 30 0001 C CNN
+F 1 "GND" H 3000 3830 30 0001 C CNN
+F 2 "" H 3000 3900 60 0001 C CNN
+F 3 "" H 3000 3900 60 0001 C CNN
+ 1 3000 3900
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R8
+U 1 1 442A4D92
+P 5100 1200
+F 0 "R8" V 5180 1200 50 0000 C CNN
+F 1 "1K" V 5100 1200 50 0000 C CNN
+F 2 "Discret:R4" H 5100 1200 60 0001 C CNN
+F 3 "" H 5100 1200 60 0001 C CNN
+ 1 5100 1200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R13
+U 1 1 442A4D8D
+P 5350 4500
+F 0 "R13" V 5450 4500 50 0000 C CNN
+F 1 "470" V 5350 4500 50 0000 C CNN
+F 2 "Discret:R4" H 5350 4500 60 0001 C CNN
+F 3 "" H 5350 4500 60 0001 C CNN
+ 1 5350 4500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R12
+U 1 1 442A4D85
+P 5150 3150
+F 0 "R12" V 5230 3150 50 0000 C CNN
+F 1 "470" V 5150 3150 50 0000 C CNN
+F 2 "Discret:R4" H 5150 3150 60 0001 C CNN
+F 3 "" H 5150 3150 60 0001 C CNN
+ 1 5150 3150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR037
+U 1 1 442A4D75
+P 4150 2550
+F 0 "#PWR037" H 4150 2550 30 0001 C CNN
+F 1 "GND" H 4150 2480 30 0001 C CNN
+F 2 "" H 4150 2550 60 0001 C CNN
+F 3 "" H 4150 2550 60 0001 C CNN
+ 1 4150 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U2
+U 4 1 442A4D6B
+P 4150 2200
+F 0 "U2" H 4150 2500 50 0000 C BNN
+F 1 "74HC125" H 4150 2450 50 0000 C TNN
+F 2 "Sockets_DIP:DIP-10__300_ELL" H 4150 2200 60 0001 C CNN
+F 3 "" H 4150 2200 60 0001 C CNN
+ 4 4150 2200
+ -1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR038
+U 1 1 442A4D68
+P 3900 3900
+F 0 "#PWR038" H 3900 4000 30 0001 C CNN
+F 1 "VCC" H 3900 4000 40 0000 C CNN
+F 2 "" H 3900 3900 60 0001 C CNN
+F 3 "" H 3900 3900 60 0001 C CNN
+ 1 3900 3900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR039
+U 1 1 442A4D67
+P 3900 5050
+F 0 "#PWR039" H 3900 5050 30 0001 C CNN
+F 1 "GND" H 3900 4980 30 0001 C CNN
+F 2 "" H 3900 5050 60 0001 C CNN
+F 3 "" H 3900 5050 60 0001 C CNN
+ 1 3900 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR040
+U 1 1 442A4D66
+P 4550 4850
+F 0 "#PWR040" H 4550 4850 30 0001 C CNN
+F 1 "GND" H 4550 4780 30 0001 C CNN
+F 2 "" H 4550 4850 60 0001 C CNN
+F 3 "" H 4550 4850 60 0001 C CNN
+ 1 4550 4850
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D7
+U 1 1 442A4D65
+P 3900 4800
+F 0 "D7" V 3950 4600 50 0000 C CNN
+F 1 "BAT43" V 3850 4600 50 0000 C CNN
+F 2 "Discret:D3" H 3900 4800 60 0001 C CNN
+F 3 "" H 3900 4800 60 0001 C CNN
+ 1 3900 4800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DIODESCH D6
+U 1 1 442A4D64
+P 3900 4100
+F 0 "D6" V 3950 3900 50 0000 C CNN
+F 1 "BAT43" V 3850 3900 50 0000 C CNN
+F 2 "Discret:D3" H 3900 4100 60 0001 C CNN
+F 3 "" H 3900 4100 60 0001 C CNN
+ 1 3900 4100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R6
+U 1 1 442A4D63
+P 3200 4750
+F 0 "R6" H 3100 4950 50 0000 C CNN
+F 1 "10K" V 3200 4750 50 0000 C CNN
+F 2 "Discret:R4" H 3200 4750 60 0001 C CNN
+F 3 "" H 3200 4750 60 0001 C CNN
+ 1 3200 4750
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R5
+U 1 1 442A4D62
+P 3550 4400
+F 0 "R5" V 3630 4400 50 0000 C CNN
+F 1 "10K" V 3550 4400 50 0000 C CNN
+F 2 "Discret:R4" H 3550 4400 60 0001 C CNN
+F 3 "" H 3550 4400 60 0001 C CNN
+ 1 3550 4400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L 74LS125 U2
+U 3 1 442A4D61
+P 4550 4500
+F 0 "U2" H 4550 4750 50 0000 C BNN
+F 1 "74HC125" H 4550 4700 50 0000 C TNN
+F 2 "Sockets_DIP:DIP-10__300_ELL" H 4550 4500 60 0001 C CNN
+F 3 "" H 4550 4500 60 0001 C CNN
+ 3 4550 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR041
+U 1 1 442A4D60
+P 3700 2600
+F 0 "#PWR041" H 3700 2700 30 0001 C CNN
+F 1 "VCC" H 3700 2700 40 0000 C CNN
+F 2 "" H 3700 2600 60 0001 C CNN
+F 3 "" H 3700 2600 60 0001 C CNN
+ 1 3700 2600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR042
+U 1 1 442A4D5F
+P 3700 3800
+F 0 "#PWR042" H 3700 3800 30 0001 C CNN
+F 1 "GND" H 3700 3730 30 0001 C CNN
+F 2 "" H 3700 3800 60 0001 C CNN
+F 3 "" H 3700 3800 60 0001 C CNN
+ 1 3700 3800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR043
+U 1 1 442A4D5E
+P 4350 3500
+F 0 "#PWR043" H 4350 3500 30 0001 C CNN
+F 1 "GND" H 4350 3430 30 0001 C CNN
+F 2 "" H 4350 3500 60 0001 C CNN
+F 3 "" H 4350 3500 60 0001 C CNN
+ 1 4350 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D5
+U 1 1 442A4D5D
+P 3700 3550
+F 0 "D5" V 3750 3350 50 0000 C CNN
+F 1 "BAT43" V 3650 3350 50 0000 C CNN
+F 2 "Discret:D3" H 3700 3550 60 0001 C CNN
+F 3 "" H 3700 3550 60 0001 C CNN
+ 1 3700 3550
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DIODESCH D4
+U 1 1 442A4D5C
+P 3700 2850
+F 0 "D4" V 3750 2650 50 0000 C CNN
+F 1 "BAT43" V 3650 2650 50 0000 C CNN
+F 2 "Discret:D3" H 3700 2850 60 0001 C CNN
+F 3 "" H 3700 2850 60 0001 C CNN
+ 1 3700 2850
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R4
+U 1 1 442A4D5B
+P 3000 3600
+F 0 "R4" V 3080 3600 50 0000 C CNN
+F 1 "10K" V 3000 3600 50 0000 C CNN
+F 2 "Discret:R4" H 3000 3600 60 0001 C CNN
+F 3 "" H 3000 3600 60 0001 C CNN
+ 1 3000 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R3
+U 1 1 442A4D5A
+P 3350 3250
+F 0 "R3" V 3430 3250 50 0000 C CNN
+F 1 "10K" V 3350 3250 50 0000 C CNN
+F 2 "Discret:R4" H 3350 3250 60 0001 C CNN
+F 3 "" H 3350 3250 60 0001 C CNN
+ 1 3350 3250
+ 0 -1 -1 0
+$EndComp
+$Comp
+L 74LS125 U2
+U 2 1 442A4D59
+P 4350 3150
+F 0 "U2" H 4350 3400 50 0000 C BNN
+F 1 "74HC125" H 4350 3350 50 0000 C TNN
+F 2 "Sockets_DIP:DIP-10__300_ELL" H 4350 3150 60 0001 C CNN
+F 3 "" H 4350 3150 60 0001 C CNN
+ 2 4350 3150
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR044
+U 1 1 442A4D41
+P 3750 700
+F 0 "#PWR044" H 3750 800 30 0001 C CNN
+F 1 "VCC" H 3750 800 40 0000 C CNN
+F 2 "" H 3750 700 60 0001 C CNN
+F 3 "" H 3750 700 60 0001 C CNN
+ 1 3750 700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR045
+U 1 1 442A4D3B
+P 3750 1800
+F 0 "#PWR045" H 3750 1800 30 0001 C CNN
+F 1 "GND" H 3750 1730 30 0001 C CNN
+F 2 "" H 3750 1800 60 0001 C CNN
+F 3 "" H 3750 1800 60 0001 C CNN
+ 1 3750 1800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR046
+U 1 1 442A4D38
+P 4300 1550
+F 0 "#PWR046" H 4300 1550 30 0001 C CNN
+F 1 "GND" H 4300 1480 30 0001 C CNN
+F 2 "" H 4300 1550 60 0001 C CNN
+F 3 "" H 4300 1550 60 0001 C CNN
+ 1 4300 1550
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D3
+U 1 1 442A4D25
+P 3750 1600
+F 0 "D3" V 3800 1400 50 0000 C CNN
+F 1 "BAT43" V 3700 1400 50 0000 C CNN
+F 2 "Discret:D3" H 3750 1600 60 0001 C CNN
+F 3 "" H 3750 1600 60 0001 C CNN
+ 1 3750 1600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DIODESCH D2
+U 1 1 442A4D1B
+P 3750 900
+F 0 "D2" V 3800 700 50 0000 C CNN
+F 1 "BAT43" V 3700 700 50 0000 C CNN
+F 2 "Discret:D3" H 3750 900 60 0001 C CNN
+F 3 "" H 3750 900 60 0001 C CNN
+ 1 3750 900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R2
+U 1 1 442A4CFB
+P 2900 1650
+F 0 "R2" H 2800 1850 50 0000 C CNN
+F 1 "10K" V 2900 1650 50 0000 C CNN
+F 2 "Discret:R4" H 2900 1650 60 0001 C CNN
+F 3 "" H 2900 1650 60 0001 C CNN
+ 1 2900 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 442A4CF4
+P 3400 1300
+F 0 "R1" V 3480 1300 50 0000 C CNN
+F 1 "10K" V 3400 1300 50 0000 C CNN
+F 2 "Discret:R4" H 3400 1300 60 0001 C CNN
+F 3 "" H 3400 1300 60 0001 C CNN
+ 1 3400 1300
+ 0 -1 -1 0
+$EndComp
+$Comp
+L 74LS125 U2
+U 1 1 442A4CC8
+P 4300 1200
+F 0 "U2" H 4300 1500 50 0000 C BNN
+F 1 "74HC125" H 4300 1450 50 0000 C TNN
+F 2 "Sockets_DIP:DIP-10__300_ELL" H 4300 1200 60 0001 C CNN
+F 3 "" H 4300 1200 60 0001 C CNN
+ 1 4300 1200
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB9 J1
+U 1 1 442A4C93
+P 1250 3600
+F 0 "J1" H 1250 3000 70 0000 C CNN
+F 1 "DB9-FEMAL" H 1250 4200 70 0000 C CNN
+F 2 "Connect:DB9FC" H 1250 3600 60 0001 C CNN
+F 3 "" H 1250 3600 60 0001 C CNN
+ 1 1250 3600
+ -1 0 0 1
+$EndComp
+Wire Wire Line
+ 1700 4050 1700 4000
+Wire Wire Line
+ 2900 2000 2900 1900
+Wire Wire Line
+ 3200 5050 3200 5000
+Connection ~ 3900 4400
+Wire Wire Line
+ 3900 5050 3900 5000
+Wire Wire Line
+ 4550 4850 4550 4800
+Wire Wire Line
+ 3000 3850 3000 3900
+Wire Wire Line
+ 3900 3150 3700 3150
+Connection ~ 3700 3150
+Wire Wire Line
+ 3700 2600 3700 2650
+Wire Wire Line
+ 3700 3800 3700 3750
+Wire Wire Line
+ 4350 3450 4350 3500
+Wire Wire Line
+ 4150 2550 4150 2500
+Wire Wire Line
+ 6700 2200 6700 2400
+Wire Wire Line
+ 6700 2300 7100 2300
+Connection ~ 6700 2300
+Wire Wire Line
+ 4300 1550 4300 1500
+Wire Wire Line
+ 3750 1200 3850 1200
+Connection ~ 3750 1200
+Wire Wire Line
+ 3750 1300 3650 1300
+Wire Wire Line
+ 7900 1500 8400 1500
+Connection ~ 7900 1500
+Wire Wire Line
+ 7400 2750 7400 2800
+Wire Wire Line
+ 7900 3800 8900 3800
+Connection ~ 7400 3400
+Wire Wire Line
+ 7400 4500 7400 4600
+Wire Wire Line
+ 7400 4600 7100 4600
+Wire Wire Line
+ 7100 4600 7100 2300
+Wire Wire Line
+ 8300 2300 8300 2200
+Wire Wire Line
+ 6200 750 6700 750
+Connection ~ 6700 750
+Wire Wire Line
+ 6200 1500 6700 1500
+Connection ~ 6700 1500
+Wire Wire Line
+ 6700 2850 6700 2800
+Wire Wire Line
+ 7900 4900 7900 4950
+Wire Wire Line
+ 8400 5800 8400 5750
+Wire Wire Line
+ 9650 5750 9650 5800
+Wire Wire Line
+ 9150 5650 9150 5600
+Wire Wire Line
+ 1850 7200 1900 7200
+Wire Wire Line
+ 2450 7450 2100 7450
+Wire Wire Line
+ 2450 6800 2450 7450
+Wire Wire Line
+ 2450 7200 2400 7200
+Wire Wire Line
+ 1400 7450 1700 7450
+Wire Wire Line
+ 1400 6950 1400 7500
+Wire Wire Line
+ 1400 7200 1450 7200
+Wire Wire Line
+ 2150 6800 2450 6800
+Connection ~ 2450 7200
+Wire Wire Line
+ 1750 6800 1750 6950
+Wire Wire Line
+ 1750 6950 1400 6950
+Connection ~ 1400 7200
+$Comp
+L GND #PWR047
+U 1 1 5510C3A9
+P 1600 6850
+F 0 "#PWR047" H 1600 6850 30 0001 C CNN
+F 1 "GND" H 1600 6780 30 0001 C CNN
+F 2 "" H 1600 6850 60 0000 C CNN
+F 3 "" H 1600 6850 60 0000 C CNN
+ 1 1600 6850
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1600 6850 1600 6800
+$Comp
+L GND #PWR048
+U 1 1 5510C540
+P 1400 7500
+F 0 "#PWR048" H 1400 7500 30 0001 C CNN
+F 1 "GND" H 1400 7430 30 0001 C CNN
+F 2 "" H 1400 7500 60 0000 C CNN
+F 3 "" H 1400 7500 60 0000 C CNN
+ 1 1400 7500
+ 1 0 0 -1
+$EndComp
+Connection ~ 1400 7450
+Wire Wire Line
+ 1900 5350 2250 5350
+Connection ~ 1900 5350
+Wire Wire Line
+ 2850 5350 3000 5350
+Connection ~ 3000 5850
+Wire Wire Line
+ 3000 5350 3000 5850
+Wire Wire Line
+ 3600 6450 3600 6500
+Wire Wire Line
+ 3600 7000 3600 7050
+Wire Wire Line
+ 3600 5850 3600 5950
+Wire Wire Line
+ 2900 6350 3000 6350
+Wire Wire Line
+ 3000 6350 3000 6750
+Wire Wire Line
+ 3000 6750 3450 6750
+$Comp
+L GND #PWR049
+U 1 1 5510EE04
+P 3600 7600
+F 0 "#PWR049" H 3600 7600 30 0001 C CNN
+F 1 "GND" H 3600 7530 30 0001 C CNN
+F 2 "" H 3600 7600 60 0001 C CNN
+F 3 "" H 3600 7600 60 0001 C CNN
+ 1 3600 7600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3600 7600 3600 7550
+Wire Wire Line
+ 3950 5800 3950 6000
+Connection ~ 3950 5850
+Wire Wire Line
+ 3500 5850 3950 5850
+Wire Wire Line
+ 3700 5800 3700 5850
+Connection ~ 3700 5850
+$Comp
+L GND #PWR050
+U 1 1 5510F50D
+P 3950 6450
+F 0 "#PWR050" H 3950 6450 30 0001 C CNN
+F 1 "GND" H 3950 6380 30 0001 C CNN
+F 2 "" H 3950 6450 60 0000 C CNN
+F 3 "" H 3950 6450 60 0000 C CNN
+ 1 3950 6450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3950 6450 3950 6400
+Wire Wire Line
+ 5350 1200 5800 1200
+Wire Wire Line
+ 5800 1200 5800 2600
+Wire Wire Line
+ 5800 2600 6400 2600
+Wire Wire Line
+ 1700 3700 2300 3700
+Wire Wire Line
+ 2300 3700 2300 2200
+Wire Wire Line
+ 2300 2200 3700 2200
+Wire Wire Line
+ 2400 3250 2400 3800
+Wire Wire Line
+ 2400 3800 1700 3800
+Wire Wire Line
+ 3800 4400 3900 4400
+Wire Wire Line
+ 4100 4500 3900 4500
+Wire Wire Line
+ 7600 1200 7300 1200
+Wire Wire Line
+ 7300 1200 7300 1400
+Wire Wire Line
+ 7300 1400 6700 1400
+$EndSCHEMATC
diff --git a/demos/flat_hierarchy/pic_sockets.sch b/demos/flat_hierarchy/pic_sockets.sch
new file mode 100644
index 0000000..d64692f
--- /dev/null
+++ b/demos/flat_hierarchy/pic_sockets.sch
@@ -0,0 +1,485 @@
+EESchema Schematic File Version 2
+LIBS:flat_hierarchy_schlib
+LIBS:flat_hierarchy-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 2 3
+Title "JDM - COM84 PIC Programmer with 13V DC/DC converter"
+Date "Sun 22 Mar 2015"
+Rev "3"
+Comp "KiCad"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Text GLabel 1500 3500 0 60 Input ~ 0
+VPP-MCLR
+Text GLabel 10150 1500 2 55 Input ~ 0
+CLOCK-RB6
+Text GLabel 10150 1600 2 55 Input ~ 0
+DATA-RB7
+Text GLabel 1500 2500 0 60 Input ~ 0
+VCC_PIC
+Text Label 2000 2500 0 60 ~ 0
+VCC_PIC
+Text Label 1900 3500 0 60 ~ 0
+VPP-MCLR
+Wire Wire Line
+ 1650 2500 1650 6600
+Wire Wire Line
+ 1500 2500 2550 2500
+Wire Wire Line
+ 8900 2250 9800 2250
+Wire Wire Line
+ 8900 2150 9700 2150
+Wire Wire Line
+ 6700 2150 7700 2150
+Connection ~ 2350 1300
+Wire Wire Line
+ 2350 1300 2550 1300
+Connection ~ 2350 1400
+Wire Wire Line
+ 2350 1200 2350 1450
+Wire Wire Line
+ 2350 1200 2550 1200
+Wire Wire Line
+ 2550 1400 2350 1400
+Wire Wire Line
+ 3950 1600 10150 1600
+Wire Wire Line
+ 3950 1500 10150 1500
+Wire Wire Line
+ 9800 4100 8900 4100
+Wire Wire Line
+ 9700 4000 8900 4000
+Wire Wire Line
+ 6700 4000 7700 4000
+Wire Wire Line
+ 2500 4850 2300 4850
+Wire Wire Line
+ 4900 5150 4050 5150
+Wire Wire Line
+ 2500 4700 1750 4700
+Wire Wire Line
+ 4000 3200 4900 3200
+Wire Wire Line
+ 4000 2800 4800 2800
+Wire Wire Line
+ 1500 3500 2550 3500
+Wire Wire Line
+ 2300 4850 2300 4900
+Wire Wire Line
+ 4050 4850 5000 4850
+Wire Wire Line
+ 8900 2950 9900 2950
+Wire Wire Line
+ 8900 4800 9900 4800
+Wire Wire Line
+ 7700 5000 6900 5000
+Wire Wire Line
+ 1650 6500 2200 6500
+Wire Wire Line
+ 2200 6500 2200 6600
+$Comp
+L GND #PWR01
+U 1 1 4639BE2E
+P 2200 7050
+F 0 "#PWR01" H 2200 7050 30 0001 C CNN
+F 1 "GND" H 2200 6980 30 0001 C CNN
+F 2 "" H 2200 7050 60 0001 C CNN
+F 3 "" H 2200 7050 60 0001 C CNN
+ 1 2200 7050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C8
+U 1 1 4639BE2C
+P 2200 6800
+F 0 "C8" H 2250 6900 50 0000 L CNN
+F 1 "100nF" H 2250 6700 50 0000 L CNN
+F 2 "Discret:C1-1" H 2200 6800 60 0001 C CNN
+F 3 "" H 2200 6800 60 0001 C CNN
+ 1 2200 6800
+ 1 0 0 -1
+$EndComp
+Text Label 6900 5000 0 60 ~ 0
+VCC_PIC
+Text Label 9150 4800 0 60 ~ 0
+VCC_PIC
+Text Label 9150 2950 0 60 ~ 0
+VCC_PIC
+$Comp
+L GND #PWR02
+U 1 1 442A8794
+P 7700 5100
+F 0 "#PWR02" H 7700 5100 30 0001 C CNN
+F 1 "GND" H 7700 5030 30 0001 C CNN
+F 2 "" H 7700 5100 60 0001 C CNN
+F 3 "" H 7700 5100 60 0001 C CNN
+ 1 7700 5100
+ 0 1 1 0
+$EndComp
+Text Label 4300 4850 0 60 ~ 0
+VCC_PIC
+$Comp
+L GND #PWR03
+U 1 1 443CCA5D
+P 7700 4700
+F 0 "#PWR03" H 7700 4700 30 0001 C CNN
+F 1 "GND" H 7700 4630 30 0001 C CNN
+F 2 "" H 7700 4700 60 0001 C CNN
+F 3 "" H 7700 4700 60 0001 C CNN
+ 1 7700 4700
+ 0 1 1 0
+$EndComp
+NoConn ~ 7700 3150
+NoConn ~ 8900 3450
+NoConn ~ 8900 3350
+NoConn ~ 8900 3250
+NoConn ~ 8900 3150
+NoConn ~ 8900 2850
+NoConn ~ 8900 2750
+NoConn ~ 8900 2650
+NoConn ~ 8900 2550
+NoConn ~ 8900 2450
+NoConn ~ 8900 2350
+NoConn ~ 7700 3450
+NoConn ~ 7700 3350
+NoConn ~ 7700 3250
+NoConn ~ 7700 3050
+NoConn ~ 7700 2950
+NoConn ~ 7700 2750
+NoConn ~ 7700 2650
+NoConn ~ 7700 2550
+NoConn ~ 7700 2450
+NoConn ~ 7700 2350
+NoConn ~ 7700 2250
+$Comp
+L GND #PWR04
+U 1 1 443697C7
+P 8900 3050
+F 0 "#PWR04" H 8900 3050 30 0001 C CNN
+F 1 "GND" H 8900 2980 30 0001 C CNN
+F 2 "" H 8900 3050 60 0001 C CNN
+F 3 "" H 8900 3050 60 0001 C CNN
+ 1 8900 3050
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR05
+U 1 1 443697C3
+P 7700 2850
+F 0 "#PWR05" H 7700 2850 30 0001 C CNN
+F 1 "GND" H 7700 2780 30 0001 C CNN
+F 2 "" H 7700 2850 60 0001 C CNN
+F 3 "" H 7700 2850 60 0001 C CNN
+ 1 7700 2850
+ 0 1 1 0
+$EndComp
+Text Label 9050 2250 0 60 ~ 0
+CLOCK-RB6
+Text Label 9050 2150 0 60 ~ 0
+DATA-RB7
+Text Label 7050 2150 0 60 ~ 0
+VPP-MCLR
+$Comp
+L SUPP28 P2
+U 1 1 4436967E
+P 8300 2800
+F 0 "P2" H 8300 3600 70 0000 C CNN
+F 1 "SUPP28" H 8300 1950 70 0000 C CNN
+F 2 "Sockets_DIP:DIP-28__300_ELL" H 8300 2800 60 0001 C CNN
+F 3 "" H 8300 2800 60 0001 C CNN
+ 1 8300 2800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR06
+U 1 1 442AA147
+P 1650 7050
+F 0 "#PWR06" H 1650 7050 30 0001 C CNN
+F 1 "GND" H 1650 6980 30 0001 C CNN
+F 2 "" H 1650 7050 60 0001 C CNN
+F 3 "" H 1650 7050 60 0001 C CNN
+ 1 1650 7050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C7
+U 1 1 442AA145
+P 1650 6800
+F 0 "C7" H 1700 6900 50 0000 L CNN
+F 1 "100nF" H 1700 6700 50 0000 L CNN
+F 2 "Discret:C1-1" H 1650 6800 60 0001 C CNN
+F 3 "" H 1650 6800 60 0001 C CNN
+ 1 1650 6800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR07
+U 1 1 442AA138
+P 2750 7050
+F 0 "#PWR07" H 2750 7050 30 0001 C CNN
+F 1 "GND" H 2750 6980 30 0001 C CNN
+F 2 "" H 2750 7050 60 0001 C CNN
+F 3 "" H 2750 7050 60 0001 C CNN
+ 1 2750 7050
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR08
+U 1 1 442AA134
+P 2750 6600
+F 0 "#PWR08" H 2750 6700 30 0001 C CNN
+F 1 "VCC" H 2750 6700 40 0000 C CNN
+F 2 "" H 2750 6600 60 0001 C CNN
+F 3 "" H 2750 6600 60 0001 C CNN
+ 1 2750 6600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C6
+U 1 1 442AA12B
+P 2750 6800
+F 0 "C6" H 2800 6900 50 0000 L CNN
+F 1 "100nF" H 2800 6700 50 0000 L CNN
+F 2 "Discret:C1-1" H 2750 6800 60 0001 C CNN
+F 3 "" H 2750 6800 60 0001 C CNN
+ 1 2750 6800
+ 1 0 0 -1
+$EndComp
+NoConn ~ 8900 5900
+NoConn ~ 8900 5800
+NoConn ~ 8900 5700
+NoConn ~ 8900 5600
+NoConn ~ 8900 5500
+NoConn ~ 8900 5400
+NoConn ~ 8900 5300
+NoConn ~ 8900 5200
+NoConn ~ 8900 5100
+NoConn ~ 8900 5000
+NoConn ~ 8900 4700
+NoConn ~ 8900 4600
+NoConn ~ 8900 4500
+NoConn ~ 8900 4400
+NoConn ~ 8900 4300
+NoConn ~ 8900 4200
+NoConn ~ 7700 5900
+NoConn ~ 7700 5800
+NoConn ~ 7700 5700
+NoConn ~ 7700 5600
+NoConn ~ 7700 5500
+NoConn ~ 7700 5400
+NoConn ~ 7700 5300
+NoConn ~ 7700 5200
+NoConn ~ 7700 4900
+NoConn ~ 7700 4800
+NoConn ~ 7700 4600
+NoConn ~ 7700 4500
+NoConn ~ 7700 4400
+NoConn ~ 7700 4300
+NoConn ~ 7700 4200
+NoConn ~ 7700 4100
+$Comp
+L GND #PWR09
+U 1 1 442A896A
+P 8900 4900
+F 0 "#PWR09" H 8900 4900 30 0001 C CNN
+F 1 "GND" H 8900 4830 30 0001 C CNN
+F 2 "" H 8900 4900 60 0001 C CNN
+F 3 "" H 8900 4900 60 0001 C CNN
+ 1 8900 4900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L SUPP40 P3
+U 1 1 442A88ED
+P 8300 4950
+F 0 "P3" H 8300 6050 70 0000 C CNN
+F 1 "SUPP40" H 8300 3800 70 0000 C CNN
+F 2 "Sockets_DIP:DIP-40__600_ELL" H 8300 4950 60 0001 C CNN
+F 3 "" H 8300 4950 60 0001 C CNN
+ 1 8300 4950
+ 1 0 0 -1
+$EndComp
+NoConn ~ 3950 1300
+$Comp
+L GND #PWR010
+U 1 1 442A8838
+P 2350 1450
+F 0 "#PWR010" H 2350 1450 30 0001 C CNN
+F 1 "GND" H 2350 1380 30 0001 C CNN
+F 2 "" H 2350 1450 60 0001 C CNN
+F 3 "" H 2350 1450 60 0001 C CNN
+ 1 2350 1450
+ 1 0 0 -1
+$EndComp
+Text Label 4100 1600 0 60 ~ 0
+DATA-RB7
+Text Label 4100 1500 0 60 ~ 0
+CLOCK-RB6
+$Comp
+L 24C16 U1
+U 1 1 442A87F7
+P 3250 1400
+F 0 "U1" H 3400 1750 60 0000 C CNN
+F 1 "24Cxx" H 3450 1050 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-8__300_ELL" H 3250 1400 60 0001 C CNN
+F 3 "" H 3250 1400 60 0001 C CNN
+ 1 3250 1400
+ 1 0 0 -1
+$EndComp
+Text Label 9050 4100 0 60 ~ 0
+CLOCK-RB6
+Text Label 9050 4000 0 60 ~ 0
+DATA-RB7
+Text Label 7050 4000 0 60 ~ 0
+VPP-MCLR
+NoConn ~ 2500 4400
+NoConn ~ 4050 5450
+NoConn ~ 4050 5300
+NoConn ~ 4050 4550
+NoConn ~ 4050 4700
+NoConn ~ 4050 4400
+NoConn ~ 4050 4250
+NoConn ~ 2500 5450
+NoConn ~ 2500 5300
+NoConn ~ 2500 5150
+NoConn ~ 2500 5000
+NoConn ~ 2500 4550
+NoConn ~ 2500 4250
+$Comp
+L PIC16F54 U5
+U 1 1 442A81A7
+P 3300 4850
+F 0 "U5" H 3300 5600 60 0000 C CNN
+F 1 "PIC_18_PINS" H 3300 4050 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-18__300_ELL" H 3300 4850 60 0001 C CNN
+F 3 "" H 3300 4850 60 0001 C CNN
+ 1 3300 4850
+ 1 0 0 -1
+$EndComp
+NoConn ~ 4000 3500
+NoConn ~ 2550 3200
+NoConn ~ 2550 2800
+Text Label 4200 5150 0 60 ~ 0
+CLOCK-RB6
+Text Label 4200 5000 0 60 ~ 0
+DATA-RB7
+Text Label 1850 4700 0 60 ~ 0
+VPP-MCLR
+Text Label 4150 3200 0 60 ~ 0
+CLOCK-RB6
+Text Label 4150 2800 0 60 ~ 0
+DATA-RB7
+$Comp
+L GND #PWR011
+U 1 1 442A820F
+P 2300 4900
+F 0 "#PWR011" H 2300 4900 30 0001 C CNN
+F 1 "GND" H 2300 4830 30 0001 C CNN
+F 2 "" H 2300 4900 60 0001 C CNN
+F 3 "" H 2300 4900 60 0001 C CNN
+ 1 2300 4900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR012
+U 1 1 442A8205
+P 4000 2500
+F 0 "#PWR012" H 4000 2500 30 0001 C CNN
+F 1 "GND" H 4000 2430 30 0001 C CNN
+F 2 "" H 4000 2500 60 0001 C CNN
+F 3 "" H 4000 2500 60 0001 C CNN
+ 1 4000 2500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L PIC12C508A U6
+U 1 1 442A81A5
+P 3300 3000
+F 0 "U6" H 3250 3700 60 0000 C CNN
+F 1 "PIC_8_PINS" H 3300 2300 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-8__300_ELL" H 3300 3000 60 0001 C CNN
+F 3 "" H 3300 3000 60 0001 C CNN
+ 1 3300 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR013
+U 1 1 53B84749
+P 3250 900
+F 0 "#PWR013" H 3250 1000 30 0001 C CNN
+F 1 "VCC" H 3250 1000 40 0000 C CNN
+F 2 "" H 3250 900 60 0001 C CNN
+F 3 "" H 3250 900 60 0001 C CNN
+ 1 3250 900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR014
+U 1 1 53B847AC
+P 3250 1900
+F 0 "#PWR014" H 3250 1900 30 0001 C CNN
+F 1 "GND" H 3250 1830 30 0001 C CNN
+F 2 "" H 3250 1900 60 0001 C CNN
+F 3 "" H 3250 1900 60 0001 C CNN
+ 1 3250 1900
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4800 1600 4800 5000
+Connection ~ 4800 5000
+Connection ~ 4800 2800
+Wire Wire Line
+ 4800 5000 4050 5000
+Wire Wire Line
+ 4900 1500 4900 5150
+Connection ~ 4900 3200
+Wire Wire Line
+ 9800 1500 9800 4100
+Connection ~ 4900 1500
+Connection ~ 9800 2250
+Wire Wire Line
+ 9700 1600 9700 4000
+Connection ~ 4800 1600
+Connection ~ 9700 2150
+Wire Wire Line
+ 9900 2950 9900 6200
+Wire Wire Line
+ 5000 4850 5000 6200
+Wire Wire Line
+ 9900 6200 1650 6200
+Connection ~ 9900 4800
+Wire Wire Line
+ 1750 3500 1750 6100
+Connection ~ 5000 6200
+Connection ~ 1650 2500
+Wire Wire Line
+ 1750 6100 6700 6100
+Wire Wire Line
+ 6700 6100 6700 2150
+Connection ~ 1750 4700
+Connection ~ 6700 4000
+Wire Wire Line
+ 6900 5000 6900 6200
+Connection ~ 6900 6200
+Text Label 3000 6200 0 60 ~ 0
+VCC_PIC
+Text Label 2950 6100 0 60 ~ 0
+VPP-MCLR
+Connection ~ 1650 6200
+Connection ~ 1650 6500
+Connection ~ 9700 1600
+Connection ~ 9800 1500
+Connection ~ 1750 3500
+Wire Wire Line
+ 2750 7000 2750 7050
+Wire Wire Line
+ 2200 7000 2200 7050
+Wire Wire Line
+ 1650 7000 1650 7050
+$EndSCHEMATC
diff --git a/demos/interf_u/image.lib b/demos/interf_u/image.lib
new file mode 100644
index 0000000..78b8ff8
--- /dev/null
+++ b/demos/interf_u/image.lib
@@ -0,0 +1,19 @@
+EESchema-LIBRARY Version 2.3
+#
+# LOGO
+# pixmap size w = 229, h = 270
+#
+DEF LOGO G 0 40 Y Y 1 F N
+F0 "#G" 0 -420 60 H I C CNN
+F1 "LOGO" 0 420 60 H I C CNN
+DRAW
+P 5 0 0 1 -378 -451 -376 446 385 448 -380 450 -378 -451 F
+P 390 0 0 1 163 -413 163 -413 178 -412 189 -410 200 -404 214 -393 236 -374 260 -355 292 -336 295 -335 320 -319 337 -304 343 -292 342 -288 340 -289 335 -298 327 -303 326 -303 319 -308 312 -313 296 -322 276 -332 256 -340 240 -346 232 -349 225 -353 219 -357 204 -364 187 -370 173 -373 166 -372 158 -369 148 -357 147 -357 140 -345 137 -333 136 -315 136 -288 137 -268 136 -251 131 -235 128 -221 126 -201 125 -189 123 -181 123 -181 120 -187 120 -204 119 -211 119 -236 115 -253 109 -266 97 -279 92 -284 51 -312 7 -328 -40 -332 -63 -329 -85 -320 -101 -303 -112 -288 -99 -282 -98 -282 -84 -271 -82 -256 -82 -256 -85 -247 -93 -237 -108 -223 -131 -204 -149 -190 -166 -175 -176 -165 -181 -157 -183 -149 -183 -137 -181 -115 -178 -92 -178 -91 -172 -71 -161 -46 -149 -20 -137 1 -127 14 -123 17 -119 24 -122 33 -124 39 -124 48 -118 62 -109 80 -97 100 -97 101 -88 118 -87 129 -88 139 -86 141 -86 200 -93 210 -95 221 -96 239 -96 242 -94 257 -86 270 -78 278 -73 283 -69 280 -59 272 -54 267 -45 249 -47 231 -52 222 -54 234 -55 241 -63 255 -74 259 -84 252 -89 237 -83 217 -79 210 -78 203 -79 201 -86 200 -86 141 -83 142 -73 134 -63 126 -47 115 -41 113 -41 133 -48 136 -48 136 -45 139 -41 138 -41 147 -61 149 -73 157 -74 159 -71 172 -64 189 -62 193 -60 201 -58 204 -49 213 -47 215 -36 221 -22 222 -12 222 -12 220 -13 220 -19 216 -13 211 -12 211 -3 211 -1 216 -2 219 4 218 23 209 24 209 39 202 47 199 49 199 49 203 42 206 46 215 52 227 51 244 43 257 30 263 23 260 13 249 9 232 9 218 3 226 -5 242 -4 258 7 270 14 274 31 281 41 284 47 282 48 282 53 273 53 271 59 262 64 256 68 238 65 218 61 208 53 204 49 203 49 199 50 199 60 193 65 188 64 182 61 180 56 182 56 183 51 185 41 180 23 169 8 160 -10 152 -15 151 -41 147 -41 138 -38 136 -38 136 -41 133 -41 113 -39 113 -22 111 -2 117 23 131 32 137 51 147 62 149 68 142 69 138 76 124 85 106 88 99 98 75 105 54 111 35 120 19 138 -9 151 -45 153 -56 157 -89 158 -122 156 -149 155 -156 154 -168 156 -173 157 -174 158 -181 153 -196 153 -197 148 -211 148 -221 151 -232 152 -233 165 -250 185 -258 207 -255 207 -255 220 -247 233 -234 245 -221 249 -212 252 -203 259 -188 261 -184 273 -151 276 -112 269 -68 252 -16 241 9 228 32 210 54 208 57 178 97 151 146 141 170 134 196 133 226 133 241 128 292 117 332 98 363 71 386 34 403 17 408 -19 410 -54 400 -63 395 -88 377 -105 350 -114 331 -114 128 -126 109 -131 101 -145 82 -161 62 -162 61 -177 42 -188 23 -198 1 -208 -28 -210 -34 -220 -59 -229 -79 -231 -81 -240 -97 -246 -108 -248 -114 -251 -130 -252 -147 -250 -157 -248 -164 -253 -176 -263 -190 -276 -197 -297 -200 -299 -201 -315 -203 -324 -206 -329 -212 -333 -230 -332 -260 -332 -262 -330 -281 -331 -294 -336 -309 -340 -325 -342 -345 -336 -356 -321 -361 -308 -364 -289 -370 -271 -375 -249 -381 -219 -389 -171 -406 -161 -409 -161 -372 -187 -366 -204 -362 -219 -358 -222 -358 -240 -355 -263 -351 -285 -347 -303 -343 -313 -341 -317 -338 -321 -326 -317 -313 -316 -312 -314 -296 -314 -271 -318 -239 -318 -236 -317 -222 -308 -215 -289 -213 -269 -211 -250 -200 -242 -180 -239 -171 -229 -160 -217 -158 -209 -162 -193 -179 -173 -206 -148 -246 -112 -304 -115 -324 -116 -335 -124 -357 -136 -370 -141 -371 -161 -372 -161 -409 -154 -411 -132 -413 -115 -409 -109 -405 -97 -396 -90 -390 -82 -386 -82 -386 -74 -381 -72 -380 -58 -376 -33 -374 0 -373 38 -374 65 -375 86 -377 99 -379 106 -383 110 -388 114 -394 125 -404 133 -409 145 -412 163 -413 F
+P 5 0 0 1 338 -280 338 -276 334 -273 335 -276 338 -280 F
+P 5 0 0 1 328 -273 330 -271 328 -270 326 -271 328 -273 F
+P 5 0 0 1 321 -270 323 -268 321 -266 320 -268 321 -270 F
+P 9 0 0 1 312 -263 311 -261 305 -253 299 -247 293 -243 294 -245 301 -253 307 -259 312 -263 F
+P 5 0 0 1 292 -240 291 -236 287 -233 288 -236 292 -240 F
+P 7 0 0 1 281 -217 282 -217 282 -216 282 -202 281 -201 280 -210 281 -217 F
+ENDDRAW
+ENDDEF
diff --git a/demos/interf_u/image.mod b/demos/interf_u/image.mod
new file mode 100644
index 0000000..8ed21c5
--- /dev/null
+++ b/demos/interf_u/image.mod
@@ -0,0 +1,432 @@
+PCBNEW-LibModule-V1
+$INDEX
+LOGO
+$EndINDEX
+#
+# LOGO
+# pixmap w = 229, h = 270
+#
+$MODULE LOGO
+Po 0 0 0 15 00000000 00000000 ~~
+T0 0 4800 600 600 0 120 N I 21 "G***"
+T1 0 -4800 600 600 0 120 N I 21 "LOGO"
+DP 0 0 0 0 5 1 21
+Dl -3783 4516
+Dl -3766 -4466
+Dl 3850 -4483
+Dl -3800 -4500
+Dl -3783 4516
+DP 0 0 0 0 374 1 21
+Dl 1586 4128
+Dl 1741 4127
+Dl 1914 4087
+Dl 2086 3984
+Dl 2299 3797
+Dl 2405 3706
+Dl 2593 3565
+Dl 2790 3434
+Dl 2958 3337
+Dl 3061 3300
+Dl 3100 3266
+Dl 3141 3233
+Dl 3183 3218
+Dl 3268 3162
+Dl 3338 3098
+Dl 3343 3067
+Dl 3281 3102
+Dl 3276 3107
+Dl 3189 3159
+Dl 3027 3244
+Dl 2829 3342
+Dl 2634 3436
+Dl 2479 3505
+Dl 2402 3533
+Dl 2382 3539
+Dl 2296 3595
+Dl 2249 3627
+Dl 2059 3716
+Dl 1845 3777
+Dl 1678 3788
+Dl 1640 3780
+Dl 1454 3667
+Dl 1338 3469
+Dl 1319 3353
+Dl 1305 3143
+Dl 1299 2894
+Dl 1299 2844
+Dl 1294 2599
+Dl 1279 2454
+Dl 1251 2381
+Dl 1236 2362
+Dl 1207 2349
+Dl 1201 2444
+Dl 1189 2532
+Dl 1134 2627
+Dl 1008 2763
+Dl 936 2831
+Dl 528 3122
+Dl 80 3288
+Dl -401 3325
+Dl -608 3301
+Dl -844 3210
+Dl -1024 3038
+Dl -1134 2893
+Dl -992 2821
+Dl -954 2801
+Dl -865 2731
+Dl -839 2625
+Dl -837 2569
+Dl -862 2466
+Dl -947 2359
+Dl -1116 2214
+Dl -1179 2163
+Dl -1377 2002
+Dl -1579 1835
+Dl -1841 1616
+Dl -1824 1266
+Dl -1819 1172
+Dl -1786 912
+Dl -1724 699
+Dl -1692 618
+Dl -1583 370
+Dl -1465 134
+Dl -1367 -33
+Dl -1364 -38
+Dl -1314 -165
+Dl -1273 -345
+Dl -1257 -430
+Dl -1191 -626
+Dl -1068 -856
+Dl -980 -1011
+Dl -917 -1160
+Dl -900 -1283
+Dl -888 -1401
+Dl -868 -1420
+Dl -868 -1985
+Dl -915 -2076
+Dl -948 -2201
+Dl -966 -2388
+Dl -966 -2389
+Dl -948 -2566
+Dl -878 -2706
+Dl -813 -2784
+Dl -737 -2832
+Dl -721 -2830
+Dl -620 -2763
+Dl -512 -2643
+Dl -448 -2523
+Dl -443 -2483
+Dl -468 -2328
+Dl -511 -2224
+Dl -552 -2363
+Dl -560 -2387
+Dl -644 -2554
+Dl -745 -2602
+Dl -848 -2525
+Dl -897 -2371
+Dl -830 -2170
+Dl -817 -2147
+Dl -781 -2061
+Dl -813 -2005
+Dl -825 -1993
+Dl -868 -1985
+Dl -868 -1420
+Dl -836 -1450
+Dl -745 -1373
+Dl -541 -1197
+Dl -400 -1160
+Dl -400 -1304
+Dl -476 -1320
+Dl -477 -1322
+Dl -491 -1381
+Dl -476 -1382
+Dl -476 -1470
+Dl -650 -1498
+Dl -674 -1510
+Dl -778 -1593
+Dl -786 -1603
+Dl -817 -1655
+Dl -801 -1727
+Dl -730 -1867
+Dl -632 -2020
+Dl -543 -2102
+Dl -518 -2114
+Dl -466 -2178
+Dl -459 -2204
+Dl -368 -2255
+Dl -216 -2267
+Dl -52 -2234
+Dl 2 -2214
+Dl 26 -2228
+Dl -18 -2327
+Dl -40 -2384
+Dl -60 -2540
+Dl -51 -2589
+Dl 0 -2668
+Dl 133 -2759
+Dl 241 -2816
+Dl 411 -2854
+Dl 513 -2783
+Dl 528 -2757
+Dl 606 -2639
+Dl 638 -2586
+Dl 684 -2413
+Dl 677 -2232
+Dl 622 -2090
+Dl 526 -2032
+Dl 520 -2031
+Dl 483 -2021
+Dl 558 -1983
+Dl 616 -1953
+Dl 662 -1883
+Dl 647 -1744
+Dl 641 -1722
+Dl 532 -1594
+Dl 324 -1498
+Dl 305 -1493
+Dl 235 -1496
+Dl 269 -1559
+Dl 399 -1666
+Dl 517 -1756
+Dl 565 -1808
+Dl 552 -1831
+Dl 457 -1806
+Dl 266 -1699
+Dl 248 -1688
+Dl 55 -1585
+Dl -114 -1516
+Dl -250 -1485
+Dl -476 -1470
+Dl -476 -1382
+Dl -391 -1393
+Dl -338 -1384
+Dl -283 -1349
+Dl -309 -1323
+Dl -400 -1304
+Dl -400 -1160
+Dl -275 -1128
+Dl -171 -1130
+Dl -63 -1156
+Dl 68 -1224
+Dl 266 -1351
+Dl 418 -1450
+Dl 539 -1507
+Dl 623 -1484
+Dl 704 -1367
+Dl 815 -1145
+Dl 903 -954
+Dl 1000 -716
+Dl 1059 -536
+Dl 1100 -405
+Dl 1224 -170
+Dl 1308 -54
+Dl 1383 67
+Dl 1438 197
+Dl 1522 510
+Dl 1576 870
+Dl 1593 1222
+Dl 1567 1512
+Dl 1544 1668
+Dl 1563 1731
+Dl 1584 1788
+Dl 1572 1958
+Dl 1560 2157
+Dl 1608 2331
+Dl 1733 2423
+Dl 1883 2459
+Dl 2126 2431
+Dl 2335 2277
+Dl 2391 2209
+Dl 2531 1991
+Dl 2657 1745
+Dl 2733 1537
+Dl 2762 1168
+Dl 2694 707
+Dl 2526 166
+Dl 2414 -95
+Dl 2261 -352
+Dl 2042 -630
+Dl 2039 -634
+Dl 1815 -939
+Dl 1598 -1302
+Dl 1431 -1655
+Dl 1399 -1737
+Dl 1356 -1884
+Dl 1337 -2043
+Dl 1332 -2275
+Dl 1326 -2501
+Dl 1263 -3000
+Dl 1132 -3390
+Dl 1008 -3600
+Dl 817 -3793
+Dl 541 -3955
+Dl 354 -4037
+Dl 194 -4077
+Dl -19 -4093
+Dl -97 -4097
+Dl -266 -4095
+Dl -392 -4069
+Dl -541 -4006
+Dl -702 -3920
+Dl -910 -3735
+Dl -1069 -3466
+Dl -1169 -3249
+Dl -1150 -1249
+Dl -1325 -996
+Dl -1358 -949
+Dl -1522 -731
+Dl -1678 -538
+Dl -1734 -472
+Dl -1828 -347
+Dl -1902 -210
+Dl -1976 -24
+Dl -2068 250
+Dl -2214 634
+Dl -2433 1050
+Dl -2487 1173
+Dl -2523 1386
+Dl -2501 1563
+Dl -2490 1592
+Dl -2485 1678
+Dl -2546 1795
+Dl -2570 1831
+Dl -2659 1933
+Dl -2776 1984
+Dl -2975 2008
+Dl -2990 2009
+Dl -3154 2033
+Dl -3249 2066
+Dl -3281 2100
+Dl -3337 2285
+Dl -3323 2581
+Dl -3306 2722
+Dl -3308 2881
+Dl -3348 3059
+Dl -3393 3229
+Dl -3424 3383
+Dl -3419 3473
+Dl -3382 3534
+Dl -3358 3556
+Dl -3265 3600
+Dl -3252 3601
+Dl -3135 3627
+Dl -2962 3678
+Dl -2944 3684
+Dl -2724 3749
+Dl -2533 3800
+Dl -2391 3837
+Dl -2145 3908
+Dl -1912 3984
+Dl -1750 4046
+Dl -1700 4068
+Dl -1600 4109
+Dl -1550 4119
+Dl -1550 3783
+Dl -1727 3764
+Dl -1907 3729
+Dl -2022 3690
+Dl -2031 3686
+Dl -2142 3655
+Dl -2332 3617
+Dl -2555 3579
+Dl -2766 3550
+Dl -2913 3526
+Dl -3105 3479
+Dl -3206 3434
+Dl -3287 3323
+Dl -3247 3161
+Dl -3225 3111
+Dl -3209 3031
+Dl -3208 2908
+Dl -3222 2711
+Dl -3252 2413
+Dl -3262 2297
+Dl -3249 2202
+Dl -3195 2135
+Dl -3168 2112
+Dl -3081 2074
+Dl -2933 2076
+Dl -2752 2073
+Dl -2597 1997
+Dl -2485 1818
+Dl -2462 1769
+Dl -2348 1613
+Dl -2206 1566
+Dl -2169 1579
+Dl -2053 1669
+Dl -1908 1817
+Dl -1763 1989
+Dl -1651 2152
+Dl -1584 2266
+Dl -1463 2467
+Dl -1327 2690
+Dl -1219 2874
+Dl -1100 3138
+Dl -1071 3345
+Dl -1130 3521
+Dl -1276 3693
+Dl -1322 3727
+Dl -1470 3782
+Dl -1550 3783
+Dl -1550 4119
+Dl -1512 4126
+Dl -1332 4126
+Dl -1180 4098
+Dl -1108 4061
+Dl -976 3965
+Dl -901 3905
+Dl -829 3866
+Dl -823 3866
+Dl -748 3819
+Dl -729 3806
+Dl -585 3769
+Dl -337 3745
+Dl -7 3736
+Dl 382 3744
+Dl 646 3756
+Dl 865 3773
+Dl 997 3797
+Dl 1066 3832
+Dl 1100 3883
+Dl 1140 3955
+Dl 1313 4075
+Dl 1586 4128
+DP 0 0 0 0 5 1 21
+Dl 3050 2566
+Dl 3066 2550
+Dl 3050 2533
+Dl 3033 2550
+Dl 3050 2566
+DP 0 0 0 0 7 1 21
+Dl 2811 2149
+Dl 2823 2141
+Dl 2826 2124
+Dl 2822 2007
+Dl 2813 2000
+Dl 2808 2083
+Dl 2811 2149
+DP 0 0 0 0 14 1 21
+Dl 347 -2071
+Dl 464 -2154
+Dl 497 -2207
+Dl 530 -2389
+Dl 451 -2551
+Dl 403 -2590
+Dl 303 -2633
+Dl 232 -2607
+Dl 139 -2493
+Dl 100 -2337
+Dl 100 -2318
+Dl 125 -2186
+Dl 216 -2106
+Dl 347 -2071
+DP 0 0 0 0 7 1 21
+Dl -81 -2117
+Dl -33 -2168
+Dl -35 -2175
+Dl -100 -2199
+Dl -164 -2171
+Dl -125 -2123
+Dl -81 -2117
+$EndMODULE LOGO
+$EndLIBRARY
diff --git a/demos/interf_u/interf_u-cache.lib b/demos/interf_u/interf_u-cache.lib
new file mode 100644
index 0000000..acfd150
--- /dev/null
+++ b/demos/interf_u/interf_u-cache.lib
@@ -0,0 +1,681 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 4003APG120
+#
+DEF 4003APG120 U 0 40 Y Y 1 F N
+F0 "U" 400 2800 70 H V C CNN
+F1 "4003APG120" 0 -2850 70 H V C CNN
+F2 "PGA120" 0 -2950 40 H V C CNN
+F3 "" 400 2800 60 H V C CNN
+ALIAS 4003PG120
+DRAW
+S -800 -2700 800 2700 0 1 0 N
+X NC A1 -1100 -300 300 R 60 60 1 1 P
+X NC B1 -1100 200 300 R 60 60 1 1 P
+X P/A12 C1 -1100 500 300 R 60 60 1 1 P
+X P/A11 D1 -1100 700 300 R 60 60 1 1 P
+X P E1 -1100 1000 300 R 60 60 1 1 P
+X P/A9 F1 -1100 1100 300 R 60 60 1 1 P
+X P/A8 G1 -1100 1200 300 R 60 60 1 1 P
+X P/A7 H1 1100 2600 300 L 60 60 1 1 P
+X P J1 1100 2400 300 L 60 60 1 1 P
+X P/A5 K1 1100 2200 300 L 60 60 1 1 P
+X P/A3 L1 1100 2000 300 L 60 60 1 1 P
+X NC M1 1100 1700 300 L 60 60 1 1 P
+X PGCK4/A1 N1 1100 1600 300 L 60 60 1 1 P
+X NC A2 -1100 -400 300 R 60 60 1 1 P
+X PGCK1/A16 B2 -1100 -100 300 R 60 60 1 1 P
+X P/A14 C2 -1100 100 300 R 60 60 1 1 P
+X P/A13 D2 -1100 400 300 R 60 60 1 1 P
+X NC E2 -1100 600 300 R 60 60 1 1 P
+X P F2 -1100 900 300 R 60 60 1 1 P
+X GND G2 300 -2700 0 U 60 60 1 1 W N
+X P/A6 H2 1100 2500 300 L 60 60 1 1 P
+X P/A4 J2 1100 2100 300 L 60 60 1 1 P
+X P/CS1/A2 K2 1100 1900 300 L 60 60 1 1 P
+X P/A0/WS L2 1100 1500 300 L 60 60 1 1 P
+X TDO M2 1100 1400 300 L 60 60 1 1 P
+X DIN N2 -1100 2000 300 R 60 60 1 1 B
+X NC A3 -1100 -700 300 R 60 60 1 1 P
+X P/A17 B3 -1100 -200 300 R 60 60 1 1 P
+X VCC C3 -300 2700 0 D 60 60 1 1 W N
+X SGCK1 D3 -1100 0 300 R 60 60 1 1 P
+X NC E3 -1100 300 300 R 60 60 1 1 P
+X P/A10 F3 -1100 800 300 R 60 60 1 1 P
+X P H3 1100 2300 300 L 60 60 1 1 P
+X NC J3 1100 1800 300 L 60 60 1 1 P
+X GND K3 200 -2700 0 U 60 60 1 1 W N
+X VCC L3 100 2700 0 D 60 60 1 1 W N
+X DOUT-SGKC4 M3 -1100 1900 300 R 60 60 1 1 O
+X P/RCLK/BSY/RDY N3 1100 1100 300 L 60 60 1 1 P
+X P A4 -1100 -900 300 R 60 60 1 1 P
+X TCK B4 -1100 -600 300 R 60 60 1 1 P
+X GND C4 -400 -2700 0 U 60 60 1 1 W N
+X CCLK L4 -1100 1800 300 R 60 60 1 1 I C
+X NC M4 1100 1200 300 L 60 60 1 1 P
+X P N4 1100 900 300 L 60 60 1 1 P
+X P A5 -1100 -1100 300 R 60 60 1 1 P
+X TMS B5 -1100 -800 300 R 60 60 1 1 P
+X TDI C5 -1100 -500 300 R 60 60 1 1 P
+X NC L5 1100 1300 300 L 60 60 1 1 P
+X P/D1 M5 1100 1000 300 L 60 60 1 1 P
+X P N5 1100 600 300 L 60 60 1 1 P
+X P A6 -1100 -1300 300 R 60 60 1 1 P
+X P B6 -1100 -1200 300 R 60 60 1 1 P
+X P C6 -1100 -1000 300 R 60 60 1 1 P
+X P/D2 L6 1100 800 300 L 60 60 1 1 P
+X P M6 1100 700 300 L 60 60 1 1 P
+X P/RS N6 1100 500 300 L 60 60 1 1 P
+X P A7 -1100 -1400 300 R 60 60 1 1 P
+X GND B7 -300 -2700 0 U 60 60 1 1 W N
+X GND L7 100 -2700 0 U 60 60 1 1 W N
+X VCC M7 0 2700 0 D 60 60 1 1 W N
+X P/D3 N7 1100 400 300 L 60 60 1 1 P
+X P A8 -1100 -1500 300 R 60 60 1 1 P
+X P B8 -1100 -1700 300 R 60 60 1 1 P
+X P C8 -1100 -1800 300 R 60 60 1 1 P
+X P L8 1100 0 300 L 60 60 1 1 P
+X P/D4 M8 1100 200 300 L 60 60 1 1 P
+X P N8 1100 300 300 L 60 60 1 1 P
+X P A9 -1100 -1600 300 R 60 60 1 1 P
+X P B9 -1100 -2000 300 R 60 60 1 1 P
+X P C9 -1100 -2300 300 R 60 60 1 1 P
+X NC L9 1100 -500 300 L 60 60 1 1 P
+X P/D5 M9 1100 -200 300 L 60 60 1 1 P
+X P N9 1100 100 300 L 60 60 1 1 P
+X P A10 -1100 -1900 300 R 60 60 1 1 P
+X NC B10 -1100 -2200 300 R 60 60 1 1 P
+X GND C10 -200 -2700 0 U 60 60 1 1 W N
+X VCC L10 -100 2700 0 D 60 60 1 1 W N
+X P/D6 M10 1100 -400 300 L 60 60 1 1 P
+X P/CS0 N10 1100 -100 300 L 60 60 1 1 P
+X P A11 -1100 -2100 300 R 60 60 1 1 P
+X M1 B11 -1100 2500 300 R 60 60 1 1 I
+X M0 C11 -1100 2600 300 R 60 60 1 1 I
+X VCC D11 -400 2700 0 D 60 60 1 1 W N
+X NC E11 1100 -2600 300 L 60 60 1 1 P
+X P F11 1100 -2200 300 L 60 60 1 1 P
+X GND G11 -100 -2700 0 U 60 60 1 1 W N
+X P H11 1100 -1500 300 L 60 60 1 1 P
+X NC J11 1100 -1000 300 L 60 60 1 1 P
+X GND K11 0 -2700 0 U 60 60 1 1 W N
+X DONE L11 -1100 2100 300 R 60 60 1 1 O
+X P/D7 M11 1100 -800 300 L 60 60 1 1 P
+X P N11 1100 -300 300 L 60 60 1 1 P
+X SGCK2 A12 -1100 -2400 300 R 60 60 1 1 P
+X M2 B12 -1100 2400 300 R 60 60 1 1 B
+X PGCK2 C12 -1100 -2500 300 R 60 60 1 1 P
+X P D12 1100 -2500 300 L 60 60 1 1 P
+X P E12 1100 -2400 300 L 60 60 1 1 P
+X P F12 1100 -2000 300 L 60 60 1 1 B
+X VCC G12 -200 2700 0 D 60 60 1 1 W N
+X P H12 1100 -1600 300 L 60 60 1 1 P
+X P J12 1100 -1300 300 L 60 60 1 1 P
+X NC K12 1100 -1100 300 L 60 60 1 1 P
+X SGCK3 L12 1100 -900 300 L 60 60 1 1 P
+X PROG M12 -1100 2200 300 R 60 60 1 1 I I
+X NC N12 1100 -600 300 L 60 60 1 1 P
+X HDC A13 -1100 1600 300 R 60 60 1 1 O
+X NC B13 -1100 -2600 300 R 60 60 1 1 P
+X LDC C13 -1100 1500 300 R 60 60 1 1 O
+X P D13 1100 -2300 300 L 60 60 1 1 P
+X P E13 1100 -2100 300 L 60 60 1 1 P
+X INIT F13 -1100 1700 300 R 60 60 1 1 B
+X P G13 1100 -1900 300 L 60 60 1 1 P
+X P H13 1100 -1800 300 L 60 60 1 1 P
+X P J13 1100 -1700 300 L 60 60 1 1 P
+X P K13 1100 -1400 300 L 60 60 1 1 P
+X P L13 1100 -1200 300 L 60 60 1 1 P
+X PGCK3 N13 1100 -700 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# 628128
+#
+DEF 628128 U 0 40 Y Y 1 F N
+F0 "U" 50 0 70 H V C CNN
+F1 "628128" 300 -1200 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 32 0 1100 0 D 60 60 0 0 W N
+X GND 16 0 -1100 0 U 60 60 0 0 W N
+S -400 1100 400 -1100 0 1 0 N
+X A16 2 -700 -550 300 R 60 60 1 1 I
+X A14 3 -700 -350 300 R 60 60 1 1 I
+X A12 4 -700 -150 300 R 60 60 1 1 I
+X A7 5 -700 350 300 R 60 60 1 1 I
+X A6 6 -700 450 300 R 60 60 1 1 I
+X A5 7 -700 550 300 R 60 60 1 1 I
+X A4 8 -700 650 300 R 60 60 1 1 I
+X A3 9 -700 750 300 R 60 60 1 1 I
+X A2 10 -700 850 300 R 60 60 1 1 I
+X Q6 20 700 450 300 L 60 60 1 1 T
+X CS2 30 -700 -850 300 R 60 60 1 1 I
+X A1 11 -700 950 300 R 60 60 1 1 I
+X Q7 21 700 350 300 L 60 60 1 1 T
+X A15 31 -700 -450 300 R 60 60 1 1 I
+X A0 12 -700 1050 300 R 60 60 1 1 I
+X CS1 22 -700 -750 300 R 60 60 1 1 I I
+X Q0 13 700 1050 300 L 60 60 1 1 T
+X A10 23 -700 50 300 R 60 60 1 1 I
+X Q1 14 700 950 300 L 60 60 1 1 T
+X OE 24 -700 -950 300 R 60 60 1 1 I I
+X Q2 15 700 850 300 L 60 60 1 1 T
+X A11 25 -700 -50 300 R 60 60 1 1 I
+X A9 26 -700 150 300 R 60 60 1 1 I
+X Q3 17 700 750 300 L 60 60 1 1 T
+X A8 27 -700 250 300 R 60 60 1 1 I
+X Q4 18 700 650 300 L 60 60 1 1 T
+X A13 28 -700 -250 300 R 60 60 1 1 I
+X Q5 19 700 550 300 L 60 60 1 1 T
+X WR 29 -700 -1050 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# 74LS245
+#
+DEF 74LS245 U 0 10 Y Y 1 F N
+F0 "U" 100 575 50 H V L BNN
+F1 "74LS245" 50 -575 50 H V L TNN
+F2 "" 50 -650 30 H V L CNN
+F3 "" 100 575 30 H V C CNN
+ALIAS 74HC245
+DRAW
+X GND 10 0 -550 0 U 60 60 0 0 W N
+X VCC 20 0 550 0 D 60 60 0 0 W N
+S -400 550 400 -550 0 1 0 N
+P 3 0 1 0 50 100 0 -100 -100 -100 N
+P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
+X A->B 1 -700 -400 300 R 60 60 1 1 I
+X A0 2 -700 500 300 R 60 60 1 1 T
+X A1 3 -700 400 300 R 60 60 1 1 T
+X A2 4 -700 300 300 R 60 60 1 1 T
+X A3 5 -700 200 300 R 60 60 1 1 T
+X A4 6 -700 100 300 R 60 60 1 1 T
+X A5 7 -700 0 300 R 60 60 1 1 T
+X A6 8 -700 -100 300 R 60 60 1 1 T
+X A7 9 -700 -200 300 R 60 60 1 1 T
+X B7 11 700 -200 300 L 60 60 1 1 T
+X B6 12 700 -100 300 L 60 60 1 1 T
+X B5 13 700 0 300 L 60 60 1 1 T
+X B4 14 700 100 300 L 60 60 1 1 T
+X B3 15 700 200 300 L 60 60 1 1 T
+X B2 16 700 300 300 L 60 60 1 1 T
+X B1 17 700 400 300 L 60 60 1 1 T
+X B0 18 700 500 300 L 60 60 1 1 T
+X CE 19 -700 -500 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# 74LS541
+#
+DEF 74LS541 U 0 30 Y Y 1 F N
+F0 "U" 0 575 60 H V C BNN
+F1 "74LS541" 0 -575 60 H V C TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 10 -200 -550 0 U 60 60 0 0 W N
+X VCC 20 -200 550 0 D 60 60 0 0 W N
+S -400 550 400 -550 0 1 0 N
+P 2 0 1 0 -100 300 -150 300 N
+P 2 0 1 0 100 300 150 300 N
+P 3 0 1 0 50 100 0 -100 -100 -100 N
+P 4 0 1 0 -100 400 -100 200 100 300 -100 400 N
+P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
+X G1 1 -700 -400 300 R 60 60 1 1 I I
+X A0 2 -700 500 300 R 60 60 1 1 I
+X A1 3 -700 400 300 R 60 60 1 1 I
+X A2 4 -700 300 300 R 60 60 1 1 I
+X A3 5 -700 200 300 R 60 60 1 1 I
+X A4 6 -700 100 300 R 60 60 1 1 I
+X A5 7 -700 0 300 R 60 60 1 1 I
+X A6 8 -700 -100 300 R 60 60 1 1 I
+X A7 9 -700 -200 300 R 60 60 1 1 I
+X Y7 11 700 -200 300 L 60 60 1 1 T
+X Y6 12 700 -100 300 L 60 60 1 1 T
+X Y5 13 700 0 300 L 60 60 1 1 T
+X Y4 14 700 100 300 L 60 60 1 1 T
+X Y3 15 700 200 300 L 60 60 1 1 T
+X Y2 16 700 300 300 L 60 60 1 1 T
+X Y1 17 700 400 300 L 60 60 1 1 T
+X Y0 18 700 500 300 L 60 60 1 1 T
+X G2 19 -700 -500 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# 74LS688
+#
+DEF 74LS688 U 0 40 Y Y 1 F N
+F0 "U" 0 950 60 H V C CNN
+F1 "74LS688" 0 -950 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 10 -300 -900 0 R 60 60 0 0 W N
+X VCC 20 -300 900 0 R 60 60 0 0 W N
+S -400 900 400 -900 0 1 0 N
+X G 1 -700 -850 300 R 60 60 1 1 I I
+X P0 2 -700 850 300 R 60 60 1 1 I
+X R0 3 -700 0 300 R 60 60 1 1 I
+X P1 4 -700 750 300 R 60 60 1 1 I
+X R1 5 -700 -100 300 R 60 60 1 1 I
+X P2 6 -700 650 300 R 60 60 1 1 I
+X R2 7 -700 -200 300 R 60 60 1 1 I
+X P3 8 -700 550 300 R 60 60 1 1 I
+X R3 9 -700 -300 300 R 60 60 1 1 I
+X P4 11 -700 450 300 R 60 60 1 1 I
+X R4 12 -700 -400 300 R 60 60 1 1 I
+X P5 13 -700 350 300 R 60 60 1 1 I
+X R5 14 -700 -500 300 R 60 60 1 1 I
+X P6 15 -700 250 300 R 60 60 1 1 I
+X R6 16 -700 -600 300 R 60 60 1 1 I
+X P7 17 -700 150 300 R 60 60 1 1 I
+X R7 18 -700 -700 300 R 60 60 1 1 I
+X P=R 19 700 850 300 L 60 60 1 1 O I
+ENDDRAW
+ENDDEF
+#
+# BUSPC
+#
+DEF BUSPC BUS 0 40 Y Y 1 F N
+F0 "BUS" 0 100 70 H V C CNN
+F1 "BUSPC" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -600 -1600 600 1600 0 1 0 N
+X GND 1 -900 1500 300 R 60 60 1 1 P
+X RESET 2 -900 1400 300 R 60 60 1 1 O
+X VCC 3 -900 1300 300 R 60 60 1 1 P
+X INQ2 4 -900 1200 300 R 60 60 1 1 P
+X -5V 5 -900 1100 300 R 60 60 1 1 P
+X DRQ2 6 -900 1000 300 R 60 60 1 1 P
+X -12V 7 -900 900 300 R 60 60 1 1 P
+X UNUSED 8 -900 800 300 R 60 60 1 1 P
+X +12V 9 -900 700 300 R 60 60 1 1 P
+X GND 10 -900 600 300 R 60 60 1 1 P
+X CLK 20 -900 -400 300 R 60 60 1 1 O
+X OSC 30 -900 -1400 300 R 60 60 1 1 O
+X DB0 40 900 700 300 L 60 60 1 1 T
+X BA12 50 900 -300 300 L 60 60 1 1 T
+X BA02 60 900 -1300 300 L 60 60 1 1 T
+X MEM 11 -900 500 300 R 60 60 1 1 O I
+X IRQ7 21 -900 -500 300 R 60 60 1 1 P
+X GND 31 -900 -1500 300 R 60 60 1 1 P
+X IO_READY 41 900 600 300 L 60 60 1 1 P
+X BA11 51 900 -400 300 L 60 60 1 1 T
+X BA01 61 900 -1400 300 L 60 60 1 1 T
+X MEM 12 -900 400 300 R 60 60 1 1 O I
+X IRQ6 22 -900 -600 300 R 60 60 1 1 P
+X IO 32 900 1500 300 L 60 60 1 1 P
+X AEN 42 900 500 300 L 60 60 1 1 O
+X BA10 52 900 -500 300 L 60 60 1 1 T
+X BA00 62 900 -1500 300 L 60 60 1 1 T
+X IOW 13 -900 300 300 R 60 60 1 1 O I
+X IRQ5 23 -900 -700 300 R 60 60 1 1 P
+X DB7 33 900 1400 300 L 60 60 1 1 T
+X BA19 43 900 400 300 L 60 60 1 1 T
+X BA09 53 900 -600 300 L 60 60 1 1 T
+X IOR 14 -900 200 300 R 60 60 1 1 O I
+X IRQ4 24 -900 -800 300 R 60 60 1 1 P
+X DB6 34 900 1300 300 L 60 60 1 1 T
+X BA18 44 900 300 300 L 60 60 1 1 T
+X BA08 54 900 -700 300 L 60 60 1 1 T
+X DACK3 15 -900 100 300 R 60 60 1 1 P I
+X IRQ3 25 -900 -900 300 R 60 60 1 1 P
+X DB5 35 900 1200 300 L 60 60 1 1 T
+X BA17 45 900 200 300 L 60 60 1 1 T
+X BA07 55 900 -800 300 L 60 60 1 1 T
+X DRQ3 16 -900 0 300 R 60 60 1 1 P
+X DACK2 26 -900 -1000 300 R 60 60 1 1 P I
+X DB4 36 900 1100 300 L 60 60 1 1 T
+X BA16 46 900 100 300 L 60 60 1 1 T
+X BA06 56 900 -900 300 L 60 60 1 1 T
+X DACK1 17 -900 -100 300 R 60 60 1 1 P I
+X TC 27 -900 -1100 300 R 60 60 1 1 P
+X DB3 37 900 1000 300 L 60 60 1 1 T
+X BA15 47 900 0 300 L 60 60 1 1 T
+X BA05 57 900 -1000 300 L 60 60 1 1 T
+X DRQ1 18 -900 -200 300 R 60 60 1 1 P
+X ALE 28 -900 -1200 300 R 60 60 1 1 O
+X DB2 38 900 900 300 L 60 60 1 1 T
+X BA14 48 900 -100 300 L 60 60 1 1 T
+X BA04 58 900 -1100 300 L 60 60 1 1 T
+X DACK0 19 -900 -300 300 R 60 60 1 1 P I
+X VCC 29 -900 -1300 300 R 60 60 1 1 P
+X DB1 39 900 800 300 L 60 60 1 1 T
+X BA13 49 900 -200 300 L 60 60 1 1 T
+X BA03 59 900 -1200 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_8X2
+#
+DEF CONN_8X2 P 0 40 Y Y 1 F N
+F0 "P" 0 450 60 H V C CNN
+F1 "CONN_8X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 400 100 -400 0 1 0 N
+X ~ 1 -400 350 300 R 60 60 1 1 P I
+X ~ 2 400 350 300 L 60 60 1 1 P I
+X ~ 3 -400 250 300 R 60 60 1 1 P I
+X ~ 4 400 250 300 L 60 60 1 1 P I
+X ~ 5 -400 150 300 R 60 60 1 1 P I
+X ~ 6 400 150 300 L 60 60 1 1 P I
+X ~ 7 -400 50 300 R 60 60 1 1 P I
+X ~ 8 400 50 300 L 60 60 1 1 P I
+X ~ 9 -400 -50 300 R 60 60 1 1 P I
+X ~ 10 400 -50 300 L 60 60 1 1 P I
+X ~ 11 -400 -150 300 R 60 60 1 1 P I
+X ~ 12 400 -150 300 L 60 60 1 1 P I
+X ~ 13 -400 -250 300 R 60 60 1 1 P I
+X ~ 14 400 -250 300 L 60 60 1 1 P I
+X ~ 15 -400 -350 300 R 60 60 1 1 P I
+X ~ 16 400 -350 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB25
+#
+DEF DB25 J 0 40 Y N 1 F N
+F0 "J" 50 1350 70 H V C CNN
+F1 "DB25" -50 -1350 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB25*
+$ENDFPLIST
+DRAW
+A -109 1270 41 1799 774 0 1 8 N -150 1270 -100 1310
+A -108 -1259 42 -1787 -788 0 1 8 N -150 -1260 -100 -1300
+A 116 -1169 34 -657 -15 0 1 8 N 130 -1200 150 -1170
+A 117 1170 32 664 1 0 1 8 N 130 1199 149 1170
+C -70 -1200 30 0 1 0 N
+C -70 -1000 30 0 1 0 N
+C -70 -800 30 0 1 0 N
+C -70 -600 30 0 1 0 N
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C -70 600 30 0 1 0 N
+C -70 800 30 0 1 0 N
+C -70 1000 30 0 1 0 N
+C -70 1200 30 0 1 0 N
+C 50 -1100 30 0 1 0 N
+C 50 -900 30 0 1 0 N
+C 50 -700 30 0 1 0 N
+C 50 -500 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+C 50 500 30 0 1 0 N
+C 50 700 30 0 1 0 N
+C 50 900 30 0 1 0 N
+C 50 1100 30 0 1 0 N
+P 2 0 1 8 -150 -1260 -150 1270 N
+P 2 0 1 0 -150 -1200 -100 -1200 N
+P 2 0 1 0 -150 -1100 20 -1100 N
+P 2 0 1 0 -150 -1000 -100 -1000 N
+P 2 0 1 0 -150 -900 20 -900 N
+P 2 0 1 0 -150 -800 -100 -800 N
+P 2 0 1 0 -150 -700 20 -700 N
+P 2 0 1 0 -150 -600 -100 -600 N
+P 2 0 1 0 -150 -500 20 -500 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -150 500 20 500 N
+P 2 0 1 0 -150 600 -100 600 N
+P 2 0 1 0 -150 700 20 700 N
+P 2 0 1 0 -150 800 -100 800 N
+P 2 0 1 0 -150 900 20 900 N
+P 2 0 1 0 -150 1000 -100 1000 N
+P 2 0 1 0 -150 1100 20 1100 N
+P 2 0 1 0 -150 1200 -100 1200 N
+P 2 0 1 8 -100 -1300 130 -1200 N
+P 2 0 1 8 130 1200 -100 1310 N
+P 2 0 1 8 150 -1170 150 1170 N
+X 1 1 -450 -1200 300 R 60 60 1 1 P
+X 2 2 -450 -1000 300 R 60 60 1 1 P
+X 3 3 -450 -800 300 R 60 60 1 1 P
+X 4 4 -450 -600 300 R 60 60 1 1 P
+X 5 5 -450 -400 300 R 60 60 1 1 P
+X 6 6 -450 -200 300 R 60 60 1 1 P
+X 7 7 -450 0 300 R 60 60 1 1 P
+X 8 8 -450 200 300 R 60 60 1 1 P
+X 9 9 -450 400 300 R 60 60 1 1 P
+X 10 10 -450 600 300 R 60 60 1 1 P
+X P20 20 -450 100 300 R 60 60 1 1 P
+X 11 11 -450 800 300 R 60 60 1 1 P
+X P21 21 -450 300 300 R 60 60 1 1 P
+X 12 12 -450 1000 300 R 60 60 1 1 P
+X P22 22 -450 500 300 R 60 60 1 1 P
+X 13 13 -450 1200 300 R 60 60 1 1 P
+X P23 23 -450 700 300 R 60 60 1 1 P
+X P14 14 -450 -1100 300 R 60 60 1 1 P
+X P24 24 -450 900 300 R 60 60 1 1 P
+X P15 15 -450 -900 300 R 60 60 1 1 P
+X P25 25 -450 1100 300 R 60 60 1 1 P
+X P16 16 -450 -700 300 R 60 60 1 1 P
+X P17 17 -450 -500 300 R 60 60 1 1 P
+X P18 18 -450 -300 300 R 60 60 1 1 P
+X P19 19 -450 -100 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# EP600
+#
+DEF EP600 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "EP600" 0 -500 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 -850 500 850 0 1 0 N
+X CLK1 1 -800 750 300 R 60 60 1 1 I C
+X IN2 2 -800 550 300 R 60 60 1 1 I
+X I/O3 3 -800 350 300 R 60 60 1 1 P
+X I/O4 4 -800 250 300 R 60 60 1 1 P
+X I/O5 5 -800 150 300 R 60 60 1 1 P
+X I/O6 6 -800 50 300 R 60 60 1 1 P
+X I/O7 7 -800 -50 300 R 60 60 1 1 P
+X I/O8 8 -800 -150 300 R 60 60 1 1 P
+X I/O9 9 -800 -250 300 R 60 60 1 1 P
+X I/O10 10 -800 -350 300 R 60 60 1 1 P
+X I/O20 20 800 350 300 L 60 60 1 1 P
+X IN11 11 -800 -550 300 R 60 60 1 1 I
+X I/O21 21 800 450 300 L 60 60 1 1 P
+X GND 12 -800 -750 300 R 60 60 1 1 I
+X I/O22 22 800 550 300 L 60 60 1 1 P
+X CLK2 13 800 -550 300 L 60 60 1 1 I C
+X IN23 23 800 750 300 L 60 60 1 1 I
+X IN14 14 800 -350 300 L 60 60 1 1 I
+X VCC 24 800 -750 300 L 60 60 1 1 I
+X I/O15 15 800 -150 300 L 60 60 1 1 P
+X I/O16 16 800 -50 300 L 60 60 1 1 P
+X I/O17 17 800 50 300 L 60 60 1 1 P
+X I/O18 18 800 150 300 L 60 60 1 1 P
+X I/O19 19 800 250 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# RR9
+#
+DEF RR9 RR 0 40 Y N 1 F N
+F0 "RR" 50 600 70 H V C CNN
+F1 "RR9" 30 0 70 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 -450 -50 550 50 550 100 500 100 -450 -50 -450 N
+X COM 1 -350 500 300 R 60 60 1 1 P I
+X 2 2 -350 400 300 R 60 60 1 1 P I
+X 3 3 -350 300 300 R 60 60 1 1 P I
+X 4 4 -350 200 300 R 60 60 1 1 P I
+X 5 5 -350 100 300 R 60 60 1 1 P I
+X 6 6 -350 0 300 R 60 60 1 1 P I
+X 7 7 -350 -100 300 R 60 60 1 1 P I
+X 8 8 -350 -200 300 R 60 60 1 1 P I
+X 9 9 -350 -300 300 R 60 60 1 1 P I
+X 10 10 -350 -400 300 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/interf_u/interf_u.cmp b/demos/interf_u/interf_u.cmp
new file mode 100644
index 0000000..1bbc583
--- /dev/null
+++ b/demos/interf_u/interf_u.cmp
@@ -0,0 +1,171 @@
+Cmp-Mod V01 Created by Cvpcb (2014-09-16 BZR 5138)-product date = 20/09/2014 09:12:59
+
+BeginCmp
+TimeStamp = /322D3011;
+Reference = BUS1;
+ValeurCmp = BUSPC;
+IdModule = BUS_PC;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307DE2;
+Reference = C1;
+ValeurCmp = 47uF;
+IdModule = discret:CP6;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307ECF;
+Reference = C2;
+ValeurCmp = 47pF;
+IdModule = discret:C1;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307ED4;
+Reference = C3;
+ValeurCmp = 47pF;
+IdModule = discret:C1;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307DCF;
+Reference = C4;
+ValeurCmp = 47uF;
+IdModule = discret:CP6;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307DCA;
+Reference = C5;
+ValeurCmp = 47uF;
+IdModule = discret:CP6;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307DC0;
+Reference = C6;
+ValeurCmp = 47uF;
+IdModule = discret:CP6;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D32AC;
+Reference = D1;
+ValeurCmp = LED;
+IdModule = discret:LEDV;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D32BE;
+Reference = D2;
+ValeurCmp = LED;
+IdModule = discret:LEDV;
+EndCmp
+
+BeginCmp
+TimeStamp = /32568D1E;
+Reference = JP1;
+ValeurCmp = CONN_8X2;
+IdModule = pin_array_8x2;
+EndCmp
+
+BeginCmp
+TimeStamp = /3256759C;
+Reference = P1;
+ValeurCmp = DB25FEMELLE;
+IdModule = connect:DB25FC;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307EA1;
+Reference = R1;
+ValeurCmp = 100K;
+IdModule = discret:R3;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307EAA;
+Reference = R2;
+ValeurCmp = 1K;
+IdModule = discret:R3;
+EndCmp
+
+BeginCmp
+TimeStamp = /324002E6;
+Reference = R3;
+ValeurCmp = 10K;
+IdModule = discret:R3;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D3295;
+Reference = R4;
+ValeurCmp = 330;
+IdModule = discret:R3;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D32A0;
+Reference = R5;
+ValeurCmp = 330;
+IdModule = discret:R3;
+EndCmp
+
+BeginCmp
+TimeStamp = /325679C1;
+Reference = RR1;
+ValeurCmp = 9x1K;
+IdModule = discret:r_pack9;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D31F4;
+Reference = U1;
+ValeurCmp = 74LS245;
+IdModule = dip_sockets:DIP-20__300;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D35B4;
+Reference = U2;
+ValeurCmp = 74LS688;
+IdModule = dip_sockets:DIP-20__300;
+EndCmp
+
+BeginCmp
+TimeStamp = /4A087146;
+Reference = U3;
+ValeurCmp = 74LS541;
+IdModule = dip_sockets:DIP-20__300;
+EndCmp
+
+BeginCmp
+TimeStamp = /3240023F;
+Reference = U5;
+ValeurCmp = 628128;
+IdModule = dip_sockets:DIP-32__600;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D321C;
+Reference = U8;
+ValeurCmp = EP600;
+IdModule = dip_sockets:DIP-24__300;
+EndCmp
+
+BeginCmp
+TimeStamp = /322D32FA;
+Reference = U9;
+ValeurCmp = 4003APG120;
+IdModule = PGA120;
+EndCmp
+
+BeginCmp
+TimeStamp = /32307EC0;
+Reference = X1;
+ValeurCmp = 8MHz;
+IdModule = discret:HC-18UH;
+EndCmp
+
+EndListe
diff --git a/demos/interf_u/interf_u.kicad_pcb b/demos/interf_u/interf_u.kicad_pcb
new file mode 100644
index 0000000..0ea9228
--- /dev/null
+++ b/demos/interf_u/interf_u.kicad_pcb
@@ -0,0 +1,3373 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-10-31 BZR 6288)-product")
+
+ (general
+ (links 200)
+ (no_connects 0)
+ (area 15.992729 24.89454 202.259001 195.5652)
+ (thickness 1.6002)
+ (drawings 19)
+ (tracks 782)
+ (zones 0)
+ (modules 25)
+ (nets 111)
+ )
+
+ (page A4)
+ (title_block
+ (title Demo)
+ (rev 2.C)
+ (company Kicad)
+ )
+
+ (layers
+ (0 Composant signal)
+ (31 Cuivre signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.4318)
+ (user_trace_width 0.381)
+ (user_trace_width 0.762)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2032)
+ (segment_width 0.381)
+ (edge_width 0.127)
+ (via_size 1.397)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (user_via 1.524 0.762)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.4318)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 1.397 1.397)
+ (pad_drill 0.89916)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 74.93 140.97)
+ (visible_elements 7FFFFF7F)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions false)
+ (excludeedgelayer false)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 0)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory plot_files/))
+ )
+
+ (net 0 "")
+ (net 1 /8MH-OUT)
+ (net 2 /ACK)
+ (net 3 /AUTOFD-)
+ (net 4 /BIT0)
+ (net 5 /BIT1)
+ (net 6 /BIT2)
+ (net 7 /BIT3)
+ (net 8 /BIT4)
+ (net 9 /BIT5)
+ (net 10 /BIT6)
+ (net 11 /BIT7)
+ (net 12 /BUST+)
+ (net 13 /CLKLCA)
+ (net 14 /CS1-)
+ (net 15 /D0)
+ (net 16 /D1)
+ (net 17 /D2)
+ (net 18 /D3)
+ (net 19 /D4)
+ (net 20 /D5)
+ (net 21 /D6)
+ (net 22 /D7)
+ (net 23 /DIR)
+ (net 24 /DONE)
+ (net 25 /ENBBUF)
+ (net 26 /ERROR-)
+ (net 27 /INIT-)
+ (net 28 /LED1)
+ (net 29 /LED2)
+ (net 30 /MA0)
+ (net 31 /MA1)
+ (net 32 /MA10)
+ (net 33 /MA11)
+ (net 34 /MA12)
+ (net 35 /MA13)
+ (net 36 /MA14)
+ (net 37 /MA15)
+ (net 38 /MA16)
+ (net 39 /MA2)
+ (net 40 /MA3)
+ (net 41 /MA4)
+ (net 42 /MA5)
+ (net 43 /MA6)
+ (net 44 /MA7)
+ (net 45 /MA8)
+ (net 46 /MA9)
+ (net 47 /MATCHL)
+ (net 48 /MD0)
+ (net 49 /MD1)
+ (net 50 /MD2)
+ (net 51 /MD3)
+ (net 52 /MD4)
+ (net 53 /MD5)
+ (net 54 /MD6)
+ (net 55 /MD7)
+ (net 56 /OE-)
+ (net 57 /PC-A0)
+ (net 58 /PC-A1)
+ (net 59 /PC-A10)
+ (net 60 /PC-A11)
+ (net 61 /PC-A2)
+ (net 62 /PC-A3)
+ (net 63 /PC-A4)
+ (net 64 /PC-A5)
+ (net 65 /PC-A6)
+ (net 66 /PC-A7)
+ (net 67 /PC-A8)
+ (net 68 /PC-A9)
+ (net 69 /PC-AEN)
+ (net 70 /PC-DB0)
+ (net 71 /PC-DB1)
+ (net 72 /PC-DB2)
+ (net 73 /PC-DB3)
+ (net 74 /PC-DB4)
+ (net 75 /PC-DB5)
+ (net 76 /PC-DB6)
+ (net 77 /PC-DB7)
+ (net 78 /PC-IOR)
+ (net 79 /PC-IOW)
+ (net 80 /PC-RD)
+ (net 81 /PC-RST)
+ (net 82 /PC-WR)
+ (net 83 /PE+)
+ (net 84 /PROG-)
+ (net 85 /REF10)
+ (net 86 /REF11)
+ (net 87 /REF4)
+ (net 88 /REF5)
+ (net 89 /REF6)
+ (net 90 /REF7)
+ (net 91 /REF8)
+ (net 92 /REF9)
+ (net 93 /RSTL)
+ (net 94 /SEL_LPT)
+ (net 95 /SLCT+)
+ (net 96 /SLCTIN-)
+ (net 97 /STROBE)
+ (net 98 /WR-)
+ (net 99 /WR_REG)
+ (net 100 GND)
+ (net 101 VCC)
+ (net 102 "Net-(C2-Pad1)")
+ (net 103 "Net-(C3-Pad1)")
+ (net 104 "Net-(D1-Pad1)")
+ (net 105 "Net-(D2-Pad1)")
+ (net 106 "Net-(R3-Pad1)")
+ (net 107 "Net-(U3-Pad15)")
+ (net 108 "Net-(U3-Pad16)")
+ (net 109 "Net-(U3-Pad17)")
+ (net 110 "Net-(U3-Pad18)")
+
+ (net_class Default ""
+ (clearance 0.254)
+ (trace_width 0.4318)
+ (via_dia 1.397)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net /8MH-OUT)
+ (add_net /ACK)
+ (add_net /AUTOFD-)
+ (add_net /BIT0)
+ (add_net /BIT1)
+ (add_net /BIT2)
+ (add_net /BIT3)
+ (add_net /BIT4)
+ (add_net /BIT5)
+ (add_net /BIT6)
+ (add_net /BIT7)
+ (add_net /BUST+)
+ (add_net /CLKLCA)
+ (add_net /CS1-)
+ (add_net /D0)
+ (add_net /D1)
+ (add_net /D2)
+ (add_net /D3)
+ (add_net /D4)
+ (add_net /D5)
+ (add_net /D6)
+ (add_net /D7)
+ (add_net /DIR)
+ (add_net /DONE)
+ (add_net /ENBBUF)
+ (add_net /ERROR-)
+ (add_net /INIT-)
+ (add_net /LED1)
+ (add_net /LED2)
+ (add_net /MA0)
+ (add_net /MA1)
+ (add_net /MA10)
+ (add_net /MA11)
+ (add_net /MA12)
+ (add_net /MA13)
+ (add_net /MA14)
+ (add_net /MA15)
+ (add_net /MA16)
+ (add_net /MA2)
+ (add_net /MA3)
+ (add_net /MA4)
+ (add_net /MA5)
+ (add_net /MA6)
+ (add_net /MA7)
+ (add_net /MA8)
+ (add_net /MA9)
+ (add_net /MATCHL)
+ (add_net /MD0)
+ (add_net /MD1)
+ (add_net /MD2)
+ (add_net /MD3)
+ (add_net /MD4)
+ (add_net /MD5)
+ (add_net /MD6)
+ (add_net /MD7)
+ (add_net /OE-)
+ (add_net /PC-A0)
+ (add_net /PC-A1)
+ (add_net /PC-A10)
+ (add_net /PC-A11)
+ (add_net /PC-A2)
+ (add_net /PC-A3)
+ (add_net /PC-A4)
+ (add_net /PC-A5)
+ (add_net /PC-A6)
+ (add_net /PC-A7)
+ (add_net /PC-A8)
+ (add_net /PC-A9)
+ (add_net /PC-AEN)
+ (add_net /PC-DB0)
+ (add_net /PC-DB1)
+ (add_net /PC-DB2)
+ (add_net /PC-DB3)
+ (add_net /PC-DB4)
+ (add_net /PC-DB5)
+ (add_net /PC-DB6)
+ (add_net /PC-DB7)
+ (add_net /PC-IOR)
+ (add_net /PC-IOW)
+ (add_net /PC-RD)
+ (add_net /PC-RST)
+ (add_net /PC-WR)
+ (add_net /PE+)
+ (add_net /PROG-)
+ (add_net /REF10)
+ (add_net /REF11)
+ (add_net /REF4)
+ (add_net /REF5)
+ (add_net /REF6)
+ (add_net /REF7)
+ (add_net /REF8)
+ (add_net /REF9)
+ (add_net /RSTL)
+ (add_net /SEL_LPT)
+ (add_net /SLCT+)
+ (add_net /SLCTIN-)
+ (add_net /STROBE)
+ (add_net /WR-)
+ (add_net /WR_REG)
+ (add_net "Net-(C2-Pad1)")
+ (add_net "Net-(C3-Pad1)")
+ (add_net "Net-(D1-Pad1)")
+ (add_net "Net-(D2-Pad1)")
+ (add_net "Net-(R3-Pad1)")
+ (add_net "Net-(U3-Pad15)")
+ (add_net "Net-(U3-Pad16)")
+ (add_net "Net-(U3-Pad17)")
+ (add_net "Net-(U3-Pad18)")
+ )
+
+ (net_class Power ""
+ (clearance 0.254)
+ (trace_width 0.5588)
+ (via_dia 1.524)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ (add_net VCC)
+ )
+
+ (module LOGO (layer Composant) (tedit 0) (tstamp 56372FFF)
+ (at 89.027 98.552)
+ (fp_text reference G*** (at 0 0) (layer F.SilkS) hide
+ (effects (font (thickness 0.3)))
+ )
+ (fp_text value LOGO (at 0.75 0) (layer F.SilkS) hide
+ (effects (font (thickness 0.3)))
+ )
+ (fp_poly (pts (xy 0.519278 -10.339833) (xy 1.157328 -10.155714) (xy 1.745126 -9.87217) (xy 2.246924 -9.499206)
+ (xy 2.59633 -9.094067) (xy 2.812739 -8.749225) (xy 2.977082 -8.425215) (xy 3.098214 -8.087398)
+ (xy 3.184985 -7.701133) (xy 3.246249 -7.231783) (xy 3.290859 -6.644708) (xy 3.309278 -6.30442)
+ (xy 3.34037 -5.740001) (xy 3.37324 -5.309547) (xy 3.412895 -4.977717) (xy 3.464343 -4.709174)
+ (xy 3.532592 -4.468578) (xy 3.593972 -4.295399) (xy 3.898734 -3.603436) (xy 4.296975 -2.872617)
+ (xy 4.749215 -2.168944) (xy 5.215973 -1.558417) (xy 5.265805 -1.500584) (xy 5.668554 -0.999211)
+ (xy 6.000933 -0.486857) (xy 6.280595 0.073315) (xy 6.525195 0.718145) (xy 6.75239 1.484471)
+ (xy 6.818925 1.740145) (xy 6.979833 2.566258) (xy 7.0144 3.297388) (xy 6.920356 3.953797)
+ (xy 6.695429 4.555744) (xy 6.458347 4.956343) (xy 6.258208 5.238534) (xy 6.068927 5.488459)
+ (xy 5.934744 5.648329) (xy 5.643621 5.845324) (xy 5.263884 5.955496) (xy 4.853992 5.974956)
+ (xy 4.472407 5.899812) (xy 4.218713 5.762519) (xy 4.117425 5.654252) (xy 4.05996 5.50396)
+ (xy 4.033955 5.264115) (xy 4.027973 5.029087) (xy 4.016814 4.722617) (xy 3.993623 4.48071)
+ (xy 3.963434 4.355775) (xy 3.946239 4.225092) (xy 3.970803 3.999546) (xy 3.993178 3.890108)
+ (xy 4.033013 3.583607) (xy 4.04615 3.158221) (xy 4.035052 2.661867) (xy 4.002182 2.142465)
+ (xy 3.950004 1.647932) (xy 3.880981 1.226186) (xy 3.849156 1.088407) (xy 3.621181 0.406604)
+ (xy 3.30768 -0.174826) (xy 3.094498 -0.465667) (xy 2.84284 -0.898935) (xy 2.710111 -1.343052)
+ (xy 2.619598 -1.658423) (xy 2.470412 -2.056723) (xy 2.287699 -2.473748) (xy 2.187737 -2.676785)
+ (xy 2.018292 -3.014468) (xy 1.882985 -3.301076) (xy 1.798327 -3.50058) (xy 1.778 -3.570733)
+ (xy 1.725626 -3.705212) (xy 1.636067 -3.826501) (xy 1.545732 -3.969617) (xy 1.590781 -4.079946)
+ (xy 1.593733 -4.082934) (xy 1.664843 -4.244125) (xy 1.690598 -4.490206) (xy 1.672404 -4.747706)
+ (xy 1.611664 -4.943152) (xy 1.57646 -4.986929) (xy 1.513657 -5.074006) (xy 1.531961 -5.202127)
+ (xy 1.624681 -5.399463) (xy 1.725343 -5.710453) (xy 1.750811 -6.068087) (xy 1.703895 -6.407483)
+ (xy 1.587406 -6.663759) (xy 1.568947 -6.685779) (xy 1.465265 -6.837711) (xy 1.439333 -6.922022)
+ (xy 1.37839 -7.032964) (xy 1.229707 -7.179597) (xy 1.210164 -7.195308) (xy 0.990263 -7.314289)
+ (xy 0.758675 -7.314387) (xy 0.485547 -7.188946) (xy 0.183306 -6.966292) (xy -0.027285 -6.782791)
+ (xy -0.131791 -6.641709) (xy -0.160131 -6.484584) (xy -0.148982 -6.316954) (xy -0.112735 -6.064264)
+ (xy -0.067124 -5.871654) (xy -0.05579 -5.842) (xy -0.050804 -5.775988) (xy -0.129737 -5.737234)
+ (xy -0.32191 -5.719122) (xy -0.618588 -5.715) (xy -1.239067 -5.715) (xy -1.151308 -5.947825)
+ (xy -1.113759 -6.233807) (xy -1.182983 -6.537615) (xy -1.333162 -6.820316) (xy -1.538475 -7.042972)
+ (xy -1.773101 -7.166646) (xy -1.96113 -7.169033) (xy -2.172212 -7.035122) (xy -2.335803 -6.776881)
+ (xy -2.443983 -6.434629) (xy -2.488834 -6.048679) (xy -2.462438 -5.659348) (xy -2.356875 -5.306953)
+ (xy -2.335475 -5.263143) (xy -2.227673 -5.086342) (xy -2.14054 -5.044306) (xy -2.067015 -5.086074)
+ (xy -1.941651 -5.161381) (xy -1.913689 -5.098745) (xy -1.983113 -4.898728) (xy -2.077285 -4.701568)
+ (xy -2.193904 -4.460195) (xy -2.236316 -4.31561) (xy -2.210071 -4.215229) (xy -2.138083 -4.125553)
+ (xy -1.873621 -3.900265) (xy -1.558088 -3.77455) (xy -1.149932 -3.735695) (xy -0.894753 -3.745092)
+ (xy -0.450334 -3.804555) (xy -0.024099 -3.93206) (xy 0.430912 -4.145472) (xy 0.918165 -4.434865)
+ (xy 1.171178 -4.584994) (xy 1.293992 -4.635894) (xy 1.287201 -4.595888) (xy 1.151398 -4.473296)
+ (xy 0.907912 -4.291096) (xy 0.401899 -3.964094) (xy -0.050512 -3.748891) (xy -0.500526 -3.624289)
+ (xy -0.802109 -3.583113) (xy -1.122259 -3.546531) (xy -1.294506 -3.503388) (xy -1.340175 -3.441192)
+ (xy -1.280592 -3.347448) (xy -1.253067 -3.318934) (xy -1.051824 -3.22714) (xy -0.729712 -3.212376)
+ (xy -0.314928 -3.271338) (xy 0.164332 -3.40072) (xy 0.508 -3.525368) (xy 0.804333 -3.643755)
+ (xy 0.550333 -3.429486) (xy 0.098494 -3.120982) (xy -0.363486 -2.93724) (xy -0.805845 -2.885369)
+ (xy -1.198822 -2.972479) (xy -1.253038 -2.998689) (xy -1.442924 -3.128726) (xy -1.67865 -3.330125)
+ (xy -1.81573 -3.46372) (xy -2.032774 -3.663245) (xy -2.173024 -3.719324) (xy -2.251258 -3.624911)
+ (xy -2.282255 -3.372961) (xy -2.284704 -3.240145) (xy -2.329157 -2.927747) (xy -2.474613 -2.595319)
+ (xy -2.570561 -2.435811) (xy -2.866796 -1.94524) (xy -3.068992 -1.541663) (xy -3.19493 -1.184914)
+ (xy -3.255225 -0.889) (xy -3.32625 -0.614048) (xy -3.473167 -0.221302) (xy -3.684914 0.261729)
+ (xy -3.885575 0.678674) (xy -4.186371 1.311071) (xy -4.402353 1.842939) (xy -4.544031 2.313704)
+ (xy -4.621914 2.762789) (xy -4.646512 3.229622) (xy -4.640976 3.512334) (xy -4.614334 4.188335)
+ (xy -3.640667 4.971993) (xy -3.139717 5.379869) (xy -2.759198 5.703449) (xy -2.483929 5.959844)
+ (xy -2.298733 6.166166) (xy -2.188429 6.339526) (xy -2.137836 6.497035) (xy -2.131777 6.655806)
+ (xy -2.132965 6.671568) (xy -2.168666 6.875182) (xy -2.263276 7.009117) (xy -2.46218 7.129996)
+ (xy -2.525058 7.160757) (xy -2.891116 7.336515) (xy -2.608484 7.707069) (xy -2.330589 8.024098)
+ (xy -2.041285 8.235449) (xy -1.69361 8.363692) (xy -1.240601 8.431397) (xy -1.07648 8.443317)
+ (xy -0.310719 8.441182) (xy 0.375356 8.327381) (xy 1.03823 8.0909) (xy 1.250483 7.989631)
+ (xy 1.547379 7.816732) (xy 1.879444 7.586195) (xy 2.21756 7.323087) (xy 2.532613 7.052476)
+ (xy 2.795485 6.799431) (xy 2.97706 6.589019) (xy 3.048222 6.446308) (xy 3.048361 6.441722)
+ (xy 3.078282 6.36673) (xy 3.105976 6.379753) (xy 3.129816 6.481945) (xy 3.15323 6.719376)
+ (xy 3.173698 7.057965) (xy 3.188696 7.463629) (xy 3.190021 7.515698) (xy 3.205102 8.048893)
+ (xy 3.224139 8.444169) (xy 3.252268 8.732936) (xy 3.294625 8.946606) (xy 3.356347 9.116588)
+ (xy 3.442571 9.274293) (xy 3.489649 9.34797) (xy 3.757338 9.60845) (xy 4.128467 9.755721)
+ (xy 4.571579 9.778925) (xy 4.693572 9.763479) (xy 4.89288 9.705181) (xy 5.200394 9.584518)
+ (xy 5.574922 9.418834) (xy 5.975269 9.225472) (xy 5.994203 9.215905) (xy 6.45744 8.984033)
+ (xy 6.783191 8.826909) (xy 6.969013 8.745466) (xy 7.01246 8.740634) (xy 6.911088 8.813347)
+ (xy 6.678682 8.954943) (xy 6.426932 9.128271) (xy 6.118128 9.375384) (xy 5.812321 9.647757)
+ (xy 5.763662 9.694333) (xy 5.423007 10.013968) (xy 5.152548 10.229277) (xy 4.907919 10.360635)
+ (xy 4.644759 10.428414) (xy 4.318702 10.45299) (xy 4.106333 10.455464) (xy 3.741955 10.448375)
+ (xy 3.493917 10.41868) (xy 3.309629 10.355425) (xy 3.147954 10.255881) (xy 2.946694 10.077634)
+ (xy 2.807569 9.892708) (xy 2.792434 9.859549) (xy 2.732286 9.763135) (xy 2.62167 9.686565)
+ (xy 2.443239 9.627717) (xy 2.179641 9.58447) (xy 1.813529 9.554703) (xy 1.327553 9.536293)
+ (xy 0.704364 9.52712) (xy 0.056674 9.525) (xy -0.55435 9.526136) (xy -1.017954 9.53065)
+ (xy -1.356041 9.540202) (xy -1.590515 9.55645) (xy -1.74328 9.581051) (xy -1.836241 9.615666)
+ (xy -1.891301 9.661952) (xy -1.899993 9.673166) (xy -2.026542 9.793141) (xy -2.101888 9.821333)
+ (xy -2.217205 9.873323) (xy -2.400208 10.004683) (xy -2.489883 10.079855) (xy -2.903041 10.354442)
+ (xy -3.355504 10.476577) (xy -3.871389 10.451506) (xy -4.038959 10.416819) (xy -4.306186 10.333909)
+ (xy -4.590357 10.21924) (xy -4.611237 10.209477) (xy -4.811486 10.130759) (xy -5.129846 10.0232)
+ (xy -5.520505 9.900431) (xy -5.937654 9.776084) (xy -6.335483 9.663789) (xy -6.66818 9.577177)
+ (xy -6.889936 9.529878) (xy -6.900334 9.528362) (xy -7.085216 9.486768) (xy -7.366375 9.405716)
+ (xy -7.698286 9.300472) (xy -8.035424 9.1863) (xy -8.332264 9.078465) (xy -8.543279 8.992233)
+ (xy -8.614834 8.953473) (xy -8.686427 8.815342) (xy -8.709137 8.604466) (xy -8.69574 8.454651)
+ (xy -8.674057 8.469396) (xy -8.661721 8.524018) (xy -8.583626 8.716006) (xy -8.513764 8.80138)
+ (xy -8.355508 8.87148) (xy -8.036447 8.955788) (xy -7.564368 9.052685) (xy -6.947057 9.160556)
+ (xy -6.288483 9.263483) (xy -5.879992 9.332229) (xy -5.490189 9.411057) (xy -5.17892 9.487333)
+ (xy -5.072405 9.520226) (xy -4.780975 9.599458) (xy -4.412908 9.669316) (xy -4.134889 9.70529)
+ (xy -3.807798 9.727865) (xy -3.58472 9.712258) (xy -3.402794 9.649036) (xy -3.273805 9.576071)
+ (xy -2.929034 9.269874) (xy -2.708413 8.874504) (xy -2.624774 8.42839) (xy -2.690949 7.969961)
+ (xy -2.714792 7.901975) (xy -2.802226 7.723035) (xy -2.969461 7.426714) (xy -3.202169 7.036392)
+ (xy -3.486023 6.575448) (xy -3.806693 6.067261) (xy -4.149852 5.535211) (xy -4.379926 5.185015)
+ (xy -4.765168 4.65126) (xy -5.111827 4.276065) (xy -5.426947 4.05492) (xy -5.717572 3.983314)
+ (xy -5.990747 4.056737) (xy -6.067658 4.104477) (xy -6.196284 4.176593) (xy -6.275047 4.135744)
+ (xy -6.350286 3.978644) (xy -6.409651 3.670125) (xy -6.387713 3.289862) (xy -6.293651 2.909244)
+ (xy -6.181603 2.667) (xy -5.769243 1.919213) (xy -5.439734 1.161363) (xy -5.254707 0.635)
+ (xy -5.078431 0.104558) (xy -4.936727 -0.291709) (xy -4.816883 -0.582224) (xy -4.706185 -0.79541)
+ (xy -4.591922 -0.959689) (xy -4.490291 -1.074079) (xy -4.340295 -1.24672) (xy -4.12465 -1.516591)
+ (xy -3.870235 -1.847593) (xy -3.603929 -2.203624) (xy -3.352609 -2.548582) (xy -3.143156 -2.846366)
+ (xy -3.002448 -3.060876) (xy -2.973544 -3.111241) (xy -2.94244 -3.227379) (xy -2.918991 -3.451064)
+ (xy -2.902869 -3.794076) (xy -2.893745 -4.268195) (xy -2.891294 -4.885202) (xy -2.895185 -5.656877)
+ (xy -2.896994 -5.862907) (xy -2.921 -8.424334) (xy -2.653499 -8.932334) (xy -2.323672 -9.451615)
+ (xy -1.934898 -9.842568) (xy -1.445416 -10.145322) (xy -1.338926 -10.195577) (xy -0.764596 -10.36977)
+ (xy -0.133279 -10.41452) (xy 0.519278 -10.339833)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy 7.253111 8.579555) (xy 7.241488 8.629889) (xy 7.196666 8.636) (xy 7.126976 8.605021)
+ (xy 7.140222 8.579555) (xy 7.240701 8.569422) (xy 7.253111 8.579555)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy 7.450666 8.509) (xy 7.408333 8.551333) (xy 7.366 8.509) (xy 7.408333 8.466666)
+ (xy 7.450666 8.509)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy 7.789333 8.339666) (xy 7.747 8.382) (xy 7.704666 8.339666) (xy 7.747 8.297333)
+ (xy 7.789333 8.339666)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -8.504191 8.099893) (xy -8.519029 8.165935) (xy -8.587351 8.285109) (xy -8.63153 8.265145)
+ (xy -8.636 8.217663) (xy -8.574509 8.102853) (xy -8.552304 8.086266) (xy -8.504191 8.099893)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -8.410223 7.817555) (xy -8.40009 7.918035) (xy -8.410223 7.930444) (xy -8.460557 7.918822)
+ (xy -8.466667 7.874) (xy -8.435689 7.804309) (xy -8.410223 7.817555)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -8.325927 6.836833) (xy -8.314745 7.010175) (xy -8.325927 7.0485) (xy -8.35683 7.059136)
+ (xy -8.368632 6.942666) (xy -8.355327 6.822471) (xy -8.325927 6.836833)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -8.410223 5.954888) (xy -8.40009 6.055368) (xy -8.410223 6.067777) (xy -8.460557 6.056155)
+ (xy -8.466667 6.011333) (xy -8.435689 5.941643) (xy -8.410223 5.954888)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -8.247311 5.295723) (xy -8.304132 5.418666) (xy -8.405169 5.616403) (xy -8.455269 5.671456)
+ (xy -8.466667 5.618293) (xy -8.418266 5.494019) (xy -8.334996 5.371348) (xy -8.247462 5.267263)
+ (xy -8.247311 5.295723)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -7.704667 5.122333) (xy -7.747 5.164666) (xy -7.789334 5.122333) (xy -7.747 5.08)
+ (xy -7.704667 5.122333)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -6.823671 5.088202) (xy -6.826603 5.097694) (xy -6.919384 5.137975) (xy -7.089595 5.161859)
+ (xy -7.262004 5.164616) (xy -7.361377 5.141519) (xy -7.366 5.131596) (xy -7.291823 5.100919)
+ (xy -7.109841 5.068851) (xy -7.075606 5.064624) (xy -6.895538 5.058892) (xy -6.823671 5.088202)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy 0.931333 -3.683) (xy 0.889 -3.640667) (xy 0.846666 -3.683) (xy 0.889 -3.725334)
+ (xy 0.931333 -3.683)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy 1.439333 -3.937) (xy 1.397 -3.894667) (xy 1.354666 -3.937) (xy 1.397 -3.979334)
+ (xy 1.439333 -3.937)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -1.760869 -6.560016) (xy -1.586353 -6.399017) (xy -1.436849 -6.105421) (xy -1.325929 -5.693834)
+ (xy -1.309601 -5.493818) (xy -1.367474 -5.420596) (xy -1.38875 -5.418667) (xy -1.535213 -5.359025)
+ (xy -1.608667 -5.291667) (xy -1.739518 -5.178699) (xy -1.86197 -5.2098) (xy -1.965665 -5.312834)
+ (xy -2.198787 -5.666805) (xy -2.280608 -6.009645) (xy -2.208143 -6.321266) (xy -2.132578 -6.436043)
+ (xy -1.947308 -6.576373) (xy -1.760869 -6.560016)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy 1.015915 -6.603784) (xy 1.19215 -6.447166) (xy 1.308729 -6.219262) (xy 1.347988 -5.952711)
+ (xy 1.292259 -5.680151) (xy 1.154457 -5.465363) (xy 1.000818 -5.315703) (xy 0.871334 -5.267266)
+ (xy 0.692409 -5.30502) (xy 0.57418 -5.346847) (xy 0.379178 -5.498082) (xy 0.274144 -5.742977)
+ (xy 0.25986 -6.031249) (xy 0.337107 -6.312616) (xy 0.397401 -6.392334) (xy 0.931333 -6.392334)
+ (xy 0.973666 -6.35) (xy 1.016 -6.392334) (xy 0.973666 -6.434667) (xy 0.931333 -6.392334)
+ (xy 0.397401 -6.392334) (xy 0.506664 -6.536795) (xy 0.555145 -6.572606) (xy 0.797691 -6.656477)
+ (xy 1.015915 -6.603784)) (layer F.SilkS) (width 0.01))
+ (fp_poly (pts (xy -0.160045 -5.538322) (xy -0.127 -5.503334) (xy -0.145245 -5.430079) (xy -0.201674 -5.418667)
+ (xy -0.347956 -5.468345) (xy -0.381 -5.503334) (xy -0.362756 -5.576588) (xy -0.306327 -5.588)
+ (xy -0.160045 -5.538322)) (layer F.SilkS) (width 0.01))
+ )
+
+ (module Capacitors_ThroughHole:C_Disc_D3_P2.5 (layer Composant) (tedit 560D307C) (tstamp 32307ECF)
+ (at 121.305 91.44)
+ (descr "Capacitor 3mm Disc, Pitch 2.5mm")
+ (tags Capacitor)
+ (path /32307ECF)
+ (fp_text reference C2 (at 1.25 -2.5) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47pF (at 1.25 2.5) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -0.9 -1.5) (end 3.4 -1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.4 -1.5) (end 3.4 1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.4 1.5) (end -0.9 1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.9 1.5) (end -0.9 -1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.25 -1.25) (end 2.75 -1.25) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.75 1.25) (end -0.25 1.25) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS)
+ (net 102 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8001) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Capacitors_ThroughHole.3dshapes/C_Disc_D3_P2.5.wrl
+ (at (xyz 0.049213 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module HC-18UH (layer Composant) (tedit 200000) (tstamp 32307EC0)
+ (at 113.665 95.25 270)
+ (descr "Quartz boitier HC-18 horizontal")
+ (tags "QUARTZ DEV")
+ (path /32307EC0)
+ (fp_text reference X1 (at 0 6.35 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 8MHz (at 0 11.43 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 2.794) (end -6.35 2.794) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.842 2.794) (end 5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 2.794) (end -6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 2.794) (end 6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 2.032) (end -6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 0) (end -2.54 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 0) (end 2.54 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.842 2.794) (end -5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.842 15.24) (end 5.334 15.748) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.334 15.748) (end -5.334 15.748) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.334 15.748) (end -5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.778 1.778) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 102 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.778 1.778) (drill 0.812799) (layers *.Cu *.Mask F.SilkS)
+ (net 103 "Net-(C3-Pad1)"))
+ (model Crystals.3dshapes/HC-18UH.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module BUS_PC (layer Composant) (tedit 200000) (tstamp 322D3011)
+ (at 131.445 138.43)
+ (descr "Connecteur Bus PC 8 bits")
+ (tags "CONN PC ISA")
+ (path /322D3011)
+ (fp_text reference BUS1 (at 1.27 -6.985) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value BUSPC (at -16.51 -6.985) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 40.64 3.81) (end -40.64 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -40.64 3.81) (end -40.64 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -40.64 -5.08) (end 40.64 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 40.64 -5.08) (end 40.64 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 connect rect (at 38.1 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 100 GND))
+ (pad 2 connect rect (at 35.56 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 81 /PC-RST))
+ (pad 3 connect rect (at 33.02 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 101 VCC))
+ (pad 4 connect rect (at 30.48 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 5 connect rect (at 27.94 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 6 connect rect (at 25.4 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 7 connect rect (at 22.86 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 8 connect rect (at 20.32 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 9 connect rect (at 17.78 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 10 connect rect (at 15.24 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 11 connect rect (at 12.7 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 12 connect rect (at 10.16 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 13 connect rect (at 7.62 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 79 /PC-IOW))
+ (pad 14 connect rect (at 5.08 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 78 /PC-IOR))
+ (pad 15 connect rect (at 2.54 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 16 connect rect (at 0 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 17 connect rect (at -2.54 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 18 connect rect (at -5.08 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 19 connect rect (at -7.62 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 20 connect rect (at -10.16 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 21 connect rect (at -12.7 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 22 connect rect (at -15.24 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 23 connect rect (at -17.78 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 24 connect rect (at -20.32 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 25 connect rect (at -22.86 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 26 connect rect (at -25.4 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 27 connect rect (at -27.94 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 28 connect rect (at -30.48 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 29 connect rect (at -33.02 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 101 VCC))
+ (pad 30 connect rect (at -35.56 0) (size 1.778 7.62) (layers Cuivre B.Mask))
+ (pad 31 connect rect (at -38.1 0) (size 1.778 7.62) (layers Cuivre B.Mask)
+ (net 100 GND))
+ (pad 32 connect rect (at 38.1 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 33 connect rect (at 35.56 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 77 /PC-DB7))
+ (pad 34 connect rect (at 33.02 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 76 /PC-DB6))
+ (pad 35 connect rect (at 30.48 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 75 /PC-DB5))
+ (pad 36 connect rect (at 27.94 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 74 /PC-DB4))
+ (pad 37 connect rect (at 25.4 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 73 /PC-DB3))
+ (pad 38 connect rect (at 22.86 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 72 /PC-DB2))
+ (pad 39 connect rect (at 20.32 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 71 /PC-DB1))
+ (pad 40 connect rect (at 17.78 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 70 /PC-DB0))
+ (pad 41 connect rect (at 15.24 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 42 connect rect (at 12.7 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 69 /PC-AEN))
+ (pad 43 connect rect (at 10.16 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 44 connect rect (at 7.62 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 45 connect rect (at 5.08 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 46 connect rect (at 2.54 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 47 connect rect (at 0 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 48 connect rect (at -2.54 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 49 connect rect (at -5.08 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 50 connect rect (at -7.62 0) (size 1.778 7.62) (layers Composant F.Mask))
+ (pad 51 connect rect (at -10.16 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 60 /PC-A11))
+ (pad 52 connect rect (at -12.7 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 59 /PC-A10))
+ (pad 53 connect rect (at -15.24 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 68 /PC-A9))
+ (pad 54 connect rect (at -17.78 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 67 /PC-A8))
+ (pad 55 connect rect (at -20.32 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 66 /PC-A7))
+ (pad 56 connect rect (at -22.86 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 65 /PC-A6))
+ (pad 57 connect rect (at -25.4 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 64 /PC-A5))
+ (pad 58 connect rect (at -27.94 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 63 /PC-A4))
+ (pad 59 connect rect (at -30.48 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 62 /PC-A3))
+ (pad 60 connect rect (at -33.02 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 61 /PC-A2))
+ (pad 61 connect rect (at -35.56 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 58 /PC-A1))
+ (pad 62 connect rect (at -38.1 0) (size 1.778 7.62) (layers Composant F.Mask)
+ (net 57 /PC-A0))
+ )
+
+ (module Sockets_DIP:DIP-32__600 (layer Composant) (tedit 560D303A) (tstamp 3240023F)
+ (at 106.045 68.58)
+ (descr "32 pins DIL package, round pads")
+ (tags DIL)
+ (path /3240023F)
+ (fp_text reference U5 (at -13.97 -3.81) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 628128 (at 8.89 3.81) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -21.59 -6.35) (end 21.59 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start 21.59 -6.35) (end 21.59 6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start 21.59 6.35) (end -21.59 6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -21.59 6.35) (end -21.59 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -21.59 1.27) (end -20.32 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.32 1.27) (end -20.32 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.32 -1.27) (end -21.59 -1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -19.05 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at -16.51 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 38 /MA16))
+ (pad 3 thru_hole circle (at -13.97 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /MA14))
+ (pad 4 thru_hole circle (at -11.43 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /MA12))
+ (pad 5 thru_hole circle (at -8.89 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 44 /MA7))
+ (pad 6 thru_hole circle (at -6.35 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 43 /MA6))
+ (pad 7 thru_hole circle (at -3.81 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 42 /MA5))
+ (pad 8 thru_hole circle (at -1.27 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 41 /MA4))
+ (pad 9 thru_hole circle (at 1.27 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 40 /MA3))
+ (pad 10 thru_hole circle (at 3.81 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 39 /MA2))
+ (pad 11 thru_hole circle (at 6.35 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /MA1))
+ (pad 12 thru_hole circle (at 8.89 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 /MA0))
+ (pad 13 thru_hole circle (at 11.43 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 48 /MD0))
+ (pad 14 thru_hole circle (at 13.97 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 49 /MD1))
+ (pad 15 thru_hole circle (at 16.51 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 50 /MD2))
+ (pad 16 thru_hole circle (at 19.05 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 17 thru_hole circle (at 19.05 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 51 /MD3))
+ (pad 18 thru_hole circle (at 16.51 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 52 /MD4))
+ (pad 19 thru_hole circle (at 13.97 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 53 /MD5))
+ (pad 20 thru_hole circle (at 11.43 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 54 /MD6))
+ (pad 21 thru_hole circle (at 8.89 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 55 /MD7))
+ (pad 22 thru_hole circle (at 6.35 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /CS1-))
+ (pad 23 thru_hole circle (at 3.81 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /MA10))
+ (pad 24 thru_hole circle (at 1.27 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 56 /OE-))
+ (pad 25 thru_hole circle (at -1.27 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /MA11))
+ (pad 26 thru_hole circle (at -3.81 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 46 /MA9))
+ (pad 27 thru_hole circle (at -6.35 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 45 /MA8))
+ (pad 28 thru_hole circle (at -8.89 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 35 /MA13))
+ (pad 29 thru_hole circle (at -11.43 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 98 /WR-))
+ (pad 30 thru_hole circle (at -13.97 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 106 "Net-(R3-Pad1)"))
+ (pad 31 thru_hole circle (at -16.51 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 37 /MA15))
+ (pad 32 thru_hole circle (at -19.05 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (model Sockets_DIP.3dshapes/DIP-32__600.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Connect:DB25FC (layer Composant) (tedit 560D305B) (tstamp 3256759C)
+ (at 183.515 88.9 270)
+ (descr "Connecteur DB25 femelle couche")
+ (tags "CONN DB25")
+ (path /3256759C)
+ (fp_text reference P1 (at 18.61 3.745 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value DB25FEMELLE (at 0 -6.35 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 26.67 -11.43) (end 26.67 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 19.05 -6.35) (end 19.05 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 20.955 -11.43) (end 20.955 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.955 -11.43) (end -20.955 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -19.05 -6.35) (end -19.05 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -26.67 2.54) (end -26.67 -11.43) (layer F.SilkS) (width 0.15))
+ (fp_line (start 26.67 -6.35) (end 19.05 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -26.67 -6.35) (end -19.05 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start 20.32 -8.255) (end 20.32 -11.43) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.32 -8.255) (end -20.32 -11.43) (layer F.SilkS) (width 0.15))
+ (fp_line (start 20.32 -18.415) (end 20.32 -12.7) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.32 -18.415) (end -20.32 -12.7) (layer F.SilkS) (width 0.15))
+ (fp_line (start 26.67 -11.43) (end 26.67 -12.7) (layer F.SilkS) (width 0.15))
+ (fp_line (start 26.67 -12.7) (end -26.67 -12.7) (layer F.SilkS) (width 0.15))
+ (fp_line (start -26.67 -12.7) (end -26.67 -11.43) (layer F.SilkS) (width 0.15))
+ (fp_line (start -26.67 -11.43) (end 26.67 -11.43) (layer F.SilkS) (width 0.15))
+ (fp_line (start 19.05 2.54) (end 26.67 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.32 -8.255) (end 20.32 -8.255) (layer F.SilkS) (width 0.15))
+ (fp_line (start -20.32 -18.415) (end 20.32 -18.415) (layer F.SilkS) (width 0.15))
+ (fp_line (start -26.67 2.54) (end -19.05 2.54) (layer F.SilkS) (width 0.15))
+ (pad "" thru_hole circle (at 23.495 -1.27 270) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -23.495 -1.27 270) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -16.51 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 97 /STROBE))
+ (pad 2 thru_hole circle (at -13.716 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /BIT0))
+ (pad 3 thru_hole circle (at -11.049 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /BIT1))
+ (pad 4 thru_hole circle (at -8.255 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /BIT2))
+ (pad 5 thru_hole circle (at -5.461 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /BIT3))
+ (pad 6 thru_hole circle (at -2.667 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /BIT4))
+ (pad 7 thru_hole circle (at 0 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /BIT5))
+ (pad 8 thru_hole circle (at 2.794 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /BIT6))
+ (pad 9 thru_hole circle (at 5.588 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /BIT7))
+ (pad 10 thru_hole circle (at 8.382 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /ACK))
+ (pad 11 thru_hole circle (at 11.049 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /BUST+))
+ (pad 12 thru_hole circle (at 13.843 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 83 /PE+))
+ (pad 13 thru_hole circle (at 16.637 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 95 /SLCT+))
+ (pad 14 thru_hole circle (at -14.9352 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /AUTOFD-))
+ (pad 15 thru_hole circle (at -12.3952 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /ERROR-))
+ (pad 16 thru_hole circle (at -9.6012 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /INIT-))
+ (pad 17 thru_hole circle (at -6.858 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 96 /SLCTIN-))
+ (pad 18 thru_hole circle (at -4.1148 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 19 thru_hole circle (at -1.3208 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 20 thru_hole circle (at 1.4224 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 21 thru_hole circle (at 4.1656 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 22 thru_hole circle (at 7.0104 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 23 thru_hole circle (at 9.7028 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 24 thru_hole circle (at 12.446 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 25 thru_hole circle (at 15.24 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Connect.3dshapes/DB25FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets:PGA120 (layer Composant) (tedit 560D303F) (tstamp 322D32FA)
+ (at 158.115 82.55 180)
+ (descr "Support PGA 120 pins")
+ (tags PGA)
+ (path /322D32FA)
+ (fp_text reference U9 (at 0 -3.81 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4003APG120 (at 0 3.81 180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 16.51 15.24) (end 15.24 16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start 16.51 15.24) (end 16.51 -16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start 16.51 -16.51) (end -16.51 -16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 -16.51) (end -16.51 16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 16.51) (end 15.24 16.51) (layer F.SilkS) (width 0.15))
+ (pad N1 thru_hole circle (at 15.24 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad N2 thru_hole circle (at 12.7 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /D0))
+ (pad N3 thru_hole circle (at 10.16 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad M1 thru_hole circle (at 15.24 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad M2 thru_hole circle (at 12.7 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad M3 thru_hole circle (at 10.16 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /LED1))
+ (pad L1 thru_hole circle (at 15.24 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 102 "Net-(C2-Pad1)"))
+ (pad L2 thru_hole circle (at 12.7 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 94 /SEL_LPT))
+ (pad L3 thru_hole circle (at 10.16 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad K1 thru_hole circle (at 15.24 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /8MH-OUT))
+ (pad K2 thru_hole circle (at 12.7 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 62 /PC-A3))
+ (pad K3 thru_hole circle (at 10.16 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad J1 thru_hole circle (at 15.24 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 65 /PC-A6))
+ (pad J2 thru_hole circle (at 12.7 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 64 /PC-A5))
+ (pad J3 thru_hole circle (at 10.16 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad H1 thru_hole circle (at 15.24 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 67 /PC-A8))
+ (pad H2 thru_hole circle (at 12.7 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 66 /PC-A7))
+ (pad H3 thru_hole circle (at 10.16 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 63 /PC-A4))
+ (pad G1 thru_hole circle (at 15.24 0 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 45 /MA8))
+ (pad G2 thru_hole circle (at 12.7 0 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad G3 thru_hole circle (at 10.16 0 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad F1 thru_hole circle (at 15.24 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 37 /MA15))
+ (pad F2 thru_hole circle (at 12.7 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 43 /MA6))
+ (pad F3 thru_hole circle (at 10.16 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /MA12))
+ (pad E1 thru_hole circle (at 15.24 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 41 /MA4))
+ (pad E2 thru_hole circle (at 12.7 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad E3 thru_hole circle (at 10.16 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad D1 thru_hole circle (at 15.24 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /MA14))
+ (pad D2 thru_hole circle (at 12.7 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /MA11))
+ (pad D3 thru_hole circle (at 10.16 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 39 /MA2))
+ (pad C1 thru_hole circle (at 15.24 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 35 /MA13))
+ (pad C2 thru_hole circle (at 12.7 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 40 /MA3))
+ (pad C3 thru_hole circle (at 10.16 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad C4 thru_hole circle (at 7.62 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad C5 thru_hole circle (at 5.08 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad C6 thru_hole circle (at 2.54 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 48 /MD0))
+ (pad C7 thru_hole circle (at 0 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad C8 thru_hole circle (at -2.54 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 38 /MA16))
+ (pad C9 thru_hole circle (at -5.08 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /MA10))
+ (pad C10 thru_hole circle (at -7.62 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad C11 thru_hole circle (at -10.16 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad C12 thru_hole circle (at -12.7 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /AUTOFD-))
+ (pad C13 thru_hole circle (at -15.24 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 42 /MA5))
+ (pad B1 thru_hole circle (at 15.24 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad B2 thru_hole circle (at 12.7 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /MA1))
+ (pad B3 thru_hole circle (at 10.16 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 44 /MA7))
+ (pad B4 thru_hole circle (at 7.62 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad B5 thru_hole circle (at 5.08 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad B6 thru_hole circle (at 2.54 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 50 /MD2))
+ (pad B7 thru_hole circle (at 0 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad B8 thru_hole circle (at -2.54 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 55 /MD7))
+ (pad B9 thru_hole circle (at -5.08 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 56 /OE-))
+ (pad B10 thru_hole circle (at -7.62 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad B11 thru_hole circle (at -10.16 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad B12 thru_hole circle (at -12.7 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad B13 thru_hole circle (at -15.24 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad A1 thru_hole rect (at 15.24 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad A2 thru_hole circle (at 12.7 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad A3 thru_hole circle (at 10.16 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad A4 thru_hole circle (at 7.62 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 46 /MA9))
+ (pad A5 thru_hole circle (at 5.08 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 49 /MD1))
+ (pad A6 thru_hole circle (at 2.54 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 51 /MD3))
+ (pad A7 thru_hole circle (at 0 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 52 /MD4))
+ (pad A8 thru_hole circle (at -2.54 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 53 /MD5))
+ (pad A9 thru_hole circle (at -5.08 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 54 /MD6))
+ (pad A10 thru_hole circle (at -7.62 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /CS1-))
+ (pad A11 thru_hole circle (at -10.16 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 30 /MA0))
+ (pad A12 thru_hole circle (at -12.7 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 97 /STROBE))
+ (pad A13 thru_hole circle (at -15.24 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 98 /WR-))
+ (pad N4 thru_hole circle (at 7.62 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 58 /PC-A1))
+ (pad N5 thru_hole circle (at 5.08 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad N6 thru_hole circle (at 2.54 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 82 /PC-WR))
+ (pad N7 thru_hole circle (at 0 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 68 /PC-A9))
+ (pad N8 thru_hole circle (at -2.54 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /D1))
+ (pad N9 thru_hole circle (at -5.08 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 17 /D2))
+ (pad N10 thru_hole circle (at -7.62 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 69 /PC-AEN))
+ (pad N11 thru_hole circle (at -10.16 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /D5))
+ (pad N12 thru_hole circle (at -12.7 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad N13 thru_hole circle (at -15.24 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 95 /SLCT+))
+ (pad M4 thru_hole circle (at 7.62 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /CLKLCA))
+ (pad M5 thru_hole circle (at 5.08 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 61 /PC-A2))
+ (pad M6 thru_hole circle (at 2.54 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 57 /PC-A0))
+ (pad M7 thru_hole circle (at 0 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad M8 thru_hole circle (at -2.54 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 80 /PC-RD))
+ (pad M9 thru_hole circle (at -5.08 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /D3))
+ (pad M10 thru_hole circle (at -7.62 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /D4))
+ (pad M11 thru_hole circle (at -10.16 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /D6))
+ (pad M12 thru_hole circle (at -12.7 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 84 /PROG-))
+ (pad M13 thru_hole circle (at -15.24 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad L4 thru_hole circle (at 7.62 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /CLKLCA))
+ (pad L5 thru_hole circle (at 5.08 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad L6 thru_hole circle (at 2.54 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad L7 thru_hole circle (at 0 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad L8 thru_hole circle (at -2.54 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 59 /PC-A10))
+ (pad L9 thru_hole circle (at -5.08 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad L10 thru_hole circle (at -7.62 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad L11 thru_hole circle (at -10.16 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /DONE))
+ (pad L12 thru_hole circle (at -12.7 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /D7))
+ (pad L13 thru_hole circle (at -15.24 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 83 /PE+))
+ (pad K11 thru_hole circle (at -10.16 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad K12 thru_hole circle (at -12.7 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad K13 thru_hole circle (at -15.24 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /ACK))
+ (pad J11 thru_hole circle (at -10.16 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad J12 thru_hole circle (at -12.7 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /BUST+))
+ (pad J13 thru_hole circle (at -15.24 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /BIT6))
+ (pad H11 thru_hole circle (at -10.16 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /BIT7))
+ (pad H12 thru_hole circle (at -12.7 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /BIT5))
+ (pad H13 thru_hole circle (at -15.24 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /BIT4))
+ (pad G11 thru_hole circle (at -10.16 0 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad G12 thru_hole circle (at -12.7 0 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad G13 thru_hole circle (at -15.24 0 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /BIT3))
+ (pad F11 thru_hole circle (at -10.16 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 96 /SLCTIN-))
+ (pad F12 thru_hole circle (at -12.7 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /BIT2))
+ (pad F13 thru_hole circle (at -15.24 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /LED2))
+ (pad E11 thru_hole circle (at -10.16 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
+ (pad E12 thru_hole circle (at -12.7 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /INIT-))
+ (pad E13 thru_hole circle (at -15.24 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /BIT1))
+ (pad D11 thru_hole circle (at -10.16 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad D12 thru_hole circle (at -12.7 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /BIT0))
+ (pad D13 thru_hole circle (at -15.24 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /ERROR-))
+ (model Sockets.3dshapes/PGA120.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-24__300 (layer Composant) (tedit 560D3132) (tstamp 5214E92B)
+ (at 137.795 109.22)
+ (descr "24 pins DIL package, round pads")
+ (tags DIL)
+ (path /322D321C)
+ (fp_text reference U8 (at -8.89 -1.27) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value EP600 (at 6.35 1.27) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -16.51 -1.27) (end -15.24 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -15.24 -1.27) (end -15.24 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -15.24 1.27) (end -16.51 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 1.27) (end -16.51 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 -2.54) (end 16.51 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 16.51 -2.54) (end 16.51 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 16.51 2.54) (end -16.51 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 2.54) (end -16.51 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -13.97 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 2 thru_hole circle (at -11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 47 /MATCHL))
+ (pad 3 thru_hole circle (at -8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 110 "Net-(U3-Pad18)"))
+ (pad 4 thru_hole circle (at -6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 109 "Net-(U3-Pad17)"))
+ (pad 5 thru_hole circle (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 108 "Net-(U3-Pad16)"))
+ (pad 6 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 107 "Net-(U3-Pad15)"))
+ (pad 7 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 82 /PC-WR))
+ (pad 8 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole circle (at 6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole circle (at 8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole circle (at 11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 93 /RSTL))
+ (pad 12 thru_hole circle (at 13.97 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 13 thru_hole circle (at 13.97 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 99 /WR_REG))
+ (pad 14 thru_hole circle (at 11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 80 /PC-RD))
+ (pad 15 thru_hole circle (at 8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 99 /WR_REG))
+ (pad 16 thru_hole circle (at 6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /CLKLCA))
+ (pad 17 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /DIR))
+ (pad 18 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 94 /SEL_LPT))
+ (pad 19 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 84 /PROG-))
+ (pad 20 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /DONE))
+ (pad 21 thru_hole circle (at -6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /D0))
+ (pad 22 thru_hole circle (at -8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /ENBBUF))
+ (pad 23 thru_hole circle (at -11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad 24 thru_hole circle (at -13.97 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (model Sockets_DIP.3dshapes/DIP-24__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-20__300 (layer Composant) (tedit 560D312D) (tstamp 5214E90D)
+ (at 135.255 120.65)
+ (descr "20 pins DIL package, round pads")
+ (tags DIL)
+ (path /4A087146)
+ (fp_text reference U3 (at -8.89 -1.27) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74LS541 (at 6.35 1.27) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -13.97 -1.27) (end -12.7 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 -1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 1.27) (end -13.97 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -13.97 -2.54) (end 13.97 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 13.97 -2.54) (end 13.97 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 13.97 2.54) (end -13.97 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -13.97 2.54) (end -13.97 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 2 thru_hole circle (at -8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 58 /PC-A1))
+ (pad 3 thru_hole circle (at -6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 57 /PC-A0))
+ (pad 4 thru_hole circle (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 61 /PC-A2))
+ (pad 5 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 62 /PC-A3))
+ (pad 6 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 /PC-IOW))
+ (pad 7 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 78 /PC-IOR))
+ (pad 8 thru_hole circle (at 6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 81 /PC-RST))
+ (pad 9 thru_hole circle (at 8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 81 /PC-RST))
+ (pad 10 thru_hole circle (at 11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 11 thru_hole circle (at 11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole circle (at 8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 93 /RSTL))
+ (pad 13 thru_hole circle (at 6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 80 /PC-RD))
+ (pad 14 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 82 /PC-WR))
+ (pad 15 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 107 "Net-(U3-Pad15)"))
+ (pad 16 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 108 "Net-(U3-Pad16)"))
+ (pad 17 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 109 "Net-(U3-Pad17)"))
+ (pad 18 thru_hole circle (at -6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 110 "Net-(U3-Pad18)"))
+ (pad 19 thru_hole circle (at -8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 20 thru_hole circle (at -11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (model Sockets_DIP.3dshapes/DIP-20__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-20__300 (layer Composant) (tedit 560D3127) (tstamp 5214E8EF)
+ (at 107.315 120.65)
+ (descr "20 pins DIL package, round pads")
+ (tags DIL)
+ (path /322D35B4)
+ (fp_text reference U2 (at -8.89 -1.27) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74LS688 (at 6.35 1.27) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -13.97 -1.27) (end -12.7 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 -1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 1.27) (end -13.97 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -13.97 -2.54) (end 13.97 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 13.97 -2.54) (end 13.97 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 13.97 2.54) (end -13.97 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -13.97 2.54) (end -13.97 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 69 /PC-AEN))
+ (pad 2 thru_hole circle (at -8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 64 /PC-A5))
+ (pad 3 thru_hole circle (at -6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 88 /REF5))
+ (pad 4 thru_hole circle (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 67 /PC-A8))
+ (pad 5 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 91 /REF8))
+ (pad 6 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 68 /PC-A9))
+ (pad 7 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 92 /REF9))
+ (pad 8 thru_hole circle (at 6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 60 /PC-A11))
+ (pad 9 thru_hole circle (at 8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 86 /REF11))
+ (pad 10 thru_hole circle (at 11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 11 thru_hole circle (at 11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 59 /PC-A10))
+ (pad 12 thru_hole circle (at 8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 85 /REF10))
+ (pad 13 thru_hole circle (at 6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 /PC-A7))
+ (pad 14 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 90 /REF7))
+ (pad 15 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 65 /PC-A6))
+ (pad 16 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 89 /REF6))
+ (pad 17 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 63 /PC-A4))
+ (pad 18 thru_hole circle (at -6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 87 /REF4))
+ (pad 19 thru_hole circle (at -8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 47 /MATCHL))
+ (pad 20 thru_hole circle (at -11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (model Sockets_DIP.3dshapes/DIP-20__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-20__300 (layer Composant) (tedit 560D313D) (tstamp 5214E8D1)
+ (at 163.195 120.65)
+ (descr "20 pins DIL package, round pads")
+ (tags DIL)
+ (path /322D31F4)
+ (fp_text reference U1 (at -8.89 -1.27) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74LS245 (at 6.35 1.27) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -13.97 -1.27) (end -12.7 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 -1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 1.27) (end -13.97 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -13.97 -2.54) (end 13.97 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 13.97 -2.54) (end 13.97 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 13.97 2.54) (end -13.97 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -13.97 2.54) (end -13.97 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /DIR))
+ (pad 2 thru_hole circle (at -8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 70 /PC-DB0))
+ (pad 3 thru_hole circle (at -6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 71 /PC-DB1))
+ (pad 4 thru_hole circle (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 72 /PC-DB2))
+ (pad 5 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 73 /PC-DB3))
+ (pad 6 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 74 /PC-DB4))
+ (pad 7 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 75 /PC-DB5))
+ (pad 8 thru_hole circle (at 6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 76 /PC-DB6))
+ (pad 9 thru_hole circle (at 8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 77 /PC-DB7))
+ (pad 10 thru_hole circle (at 11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 11 thru_hole circle (at 11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /D7))
+ (pad 12 thru_hole circle (at 8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /D6))
+ (pad 13 thru_hole circle (at 6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /D5))
+ (pad 14 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /D4))
+ (pad 15 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /D3))
+ (pad 16 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 /D2))
+ (pad 17 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /D1))
+ (pad 18 thru_hole circle (at -6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /D0))
+ (pad 19 thru_hole circle (at -8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /ENBBUF))
+ (pad 20 thru_hole circle (at -11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (model Sockets_DIP.3dshapes/DIP-20__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Composant) (tedit 560D3138) (tstamp 32307DC0)
+ (at 167.005 111.76)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /32307DC0)
+ (fp_text reference C6 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF (at 0.635 0) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad 2 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Composant) (tedit 560D3069) (tstamp 32307DCA)
+ (at 86.995 120.65 270)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /32307DCA)
+ (fp_text reference C5 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF (at 0.635 0 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad 2 thru_hole circle (at 7.62 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Composant) (tedit 560D3031) (tstamp 32307DCF)
+ (at 163.195 52.07 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /32307DCF)
+ (fp_text reference C4 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF (at 0.635 0 180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad 2 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Composant) (tedit 560D3096) (tstamp 32307DE2)
+ (at 90.805 83.82)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /32307DE2)
+ (fp_text reference C1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF (at 0.635 0) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad 2 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R3 (layer Composant) (tedit 560D301C) (tstamp 322D32A0)
+ (at 172.085 41.91)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /322D32A0)
+ (fp_text reference R5 (at 0 0.127) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 330 (at 0 0.127) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 105 "Net-(D2-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /LED2))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R3 (layer Composant) (tedit 560D302C) (tstamp 322D3295)
+ (at 151.765 41.91 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /322D3295)
+ (fp_text reference R4 (at 0 0.127 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 330 (at 0 0.127 180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 104 "Net-(D1-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /LED1))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R3 (layer Composant) (tedit 0) (tstamp 324002E6)
+ (at 88.265 57.15 180)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /324002E6)
+ (fp_text reference R3 (at 0 0.127 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10K (at 0 0.127 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 106 "Net-(R3-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R3 (layer Composant) (tedit 560D3085) (tstamp 32307EAA)
+ (at 127.635 95.25 270)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /32307EAA)
+ (fp_text reference R2 (at 0 0.127 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1K (at 0 0.127 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /8MH-OUT))
+ (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 103 "Net-(C3-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R3 (layer Composant) (tedit 560D3081) (tstamp 32307EA1)
+ (at 117.475 95.25 90)
+ (descr "Resitance 3 pas")
+ (tags R)
+ (path /32307EA1)
+ (fp_text reference R1 (at 0 0.127 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 100K (at 0 0.127 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 103 "Net-(C3-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 "Net-(C2-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:r_pack9 (layer Composant) (tedit 560D3076) (tstamp 325679C1)
+ (at 107.315 113.03)
+ (descr "Connecteur 10 pins")
+ (tags "CONN DEV")
+ (path /325679C1)
+ (fp_text reference RR1 (at -1.016 -2.54) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 9x1K (at -0.762 2.286) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -12.7 1.27) (end -12.7 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 -1.27) (end 12.7 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 12.7 -1.27) (end 12.7 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 12.7 1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -10.16 1.27) (end -10.16 -1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -11.43 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 VCC))
+ (pad 2 thru_hole circle (at -8.89 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 88 /REF5))
+ (pad 3 thru_hole circle (at -6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 87 /REF4))
+ (pad 4 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 91 /REF8))
+ (pad 5 thru_hole circle (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 89 /REF6))
+ (pad 6 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 92 /REF9))
+ (pad 7 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 90 /REF7))
+ (pad 8 thru_hole circle (at 6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 86 /REF11))
+ (pad 9 thru_hole circle (at 8.89 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 85 /REF10))
+ (pad 10 thru_hole circle (at 11.43 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (model Discret.3dshapes/r_pack9.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_ThroughHole:C_Disc_D3_P2.5 (layer Composant) (tedit 560D3079) (tstamp 32307ED4)
+ (at 121.305 99.06)
+ (descr "Capacitor 3mm Disc, Pitch 2.5mm")
+ (tags Capacitor)
+ (path /32307ED4)
+ (fp_text reference C3 (at 1.25 -2.5) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47pF (at 1.25 2.5) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -0.9 -1.5) (end 3.4 -1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.4 -1.5) (end 3.4 1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.4 1.5) (end -0.9 1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.9 1.5) (end -0.9 -1.5) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.25 -1.25) (end 2.75 -1.25) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.75 1.25) (end -0.25 1.25) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS)
+ (net 103 "Net-(C3-Pad1)"))
+ (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8001) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model Capacitors_ThroughHole.3dshapes/C_Disc_D3_P2.5.wrl
+ (at (xyz 0.049213 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module LEDs:LED-5MM (layer Composant) (tedit 560D3011) (tstamp 322D32AC)
+ (at 158.115 38.1 180)
+ (descr "LED 5mm round vertical")
+ (tags "LED 5mm round vertical")
+ (path /322D32AC)
+ (fp_text reference D1 (at -2.355 -0.18 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value LED (at 1.524 -3.937 180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.5 -1.55) (end -1.5 1.55) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.3 0) (end -1.5 1.55) (angle -302) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.27 0) (end -1.23 -1.5) (angle 297.5) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.23 1.5) (end -1.23 -1.5) (layer F.SilkS) (width 0.15))
+ (fp_circle (center 1.27 0) (end 0.97 -2.5) (layer F.SilkS) (width 0.15))
+ (fp_text user K (at -1.905 1.905 180) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 1 thru_hole rect (at 0 0 270) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 104 "Net-(D1-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 180) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0.05 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module LEDs:LED-5MM (layer Composant) (tedit 560D3020) (tstamp 322D32BE)
+ (at 168.275 38.1 180)
+ (descr "LED 5mm round vertical")
+ (tags "LED 5mm round vertical")
+ (path /322D32BE)
+ (fp_text reference D2 (at -2.415 -0.02 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value LED (at 1.524 -3.937 180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.5 -1.55) (end -1.5 1.55) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.3 0) (end -1.5 1.55) (angle -302) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.27 0) (end -1.23 -1.5) (angle 297.5) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.23 1.5) (end -1.23 -1.5) (layer F.SilkS) (width 0.15))
+ (fp_circle (center 1.27 0) (end 0.97 -2.5) (layer F.SilkS) (width 0.15))
+ (fp_text user K (at -1.905 1.905 180) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 1 thru_hole rect (at 0 0 270) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 105 "Net-(D2-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 180) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0.05 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x08 (layer Composant) (tedit 560D32B9) (tstamp 32568D1E)
+ (at 116.205 105.41 270)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /32568D1E)
+ (fp_text reference JP1 (at 0 -5.1 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_8X2 (at 0 -3.1 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 19.55) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 19.05) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 19.05) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 2 thru_hole oval (at 2.54 0 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 85 /REF10))
+ (pad 3 thru_hole oval (at 0 2.54 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 4 thru_hole oval (at 2.54 2.54 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 86 /REF11))
+ (pad 5 thru_hole oval (at 0 5.08 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 6 thru_hole oval (at 2.54 5.08 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 90 /REF7))
+ (pad 7 thru_hole oval (at 0 7.62 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 8 thru_hole oval (at 2.54 7.62 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 92 /REF9))
+ (pad 9 thru_hole oval (at 0 10.16 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 10 thru_hole oval (at 2.54 10.16 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 89 /REF6))
+ (pad 11 thru_hole oval (at 0 12.7 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 12 thru_hole oval (at 2.54 12.7 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 91 /REF8))
+ (pad 13 thru_hole oval (at 0 15.24 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 14 thru_hole oval (at 2.54 15.24 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 87 /REF4))
+ (pad 15 thru_hole oval (at 0 17.78 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 GND))
+ (pad 16 thru_hole oval (at 2.54 17.78 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 88 /REF5))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x08.wrl
+ (at (xyz 0.05 -0.35 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (dimension 99.06 (width 0.20066) (layer Cmts.User)
+ (gr_text "99,060 mm" (at 75.946 83.947 270) (layer Cmts.User)
+ (effects (font (size 2.032 1.524) (thickness 0.20066)))
+ )
+ (feature1 (pts (xy 79.375 133.35) (xy 70.485 133.35)))
+ (feature2 (pts (xy 79.375 34.29) (xy 70.485 34.29)))
+ (crossbar (pts (xy 74.041 34.29) (xy 74.041 133.35)))
+ (arrow1a (pts (xy 74.041 133.35) (xy 73.4568 132.22478)))
+ (arrow1b (pts (xy 74.041 133.35) (xy 74.6252 132.22478)))
+ (arrow2a (pts (xy 74.041 34.29) (xy 73.4568 35.41522)))
+ (arrow2b (pts (xy 74.041 34.29) (xy 74.6252 35.41522)))
+ )
+ (dimension 115.57 (width 0.21082) (layer Cmts.User)
+ (gr_text "115,570 mm" (at 137.16 26.67254) (layer Cmts.User)
+ (effects (font (size 2.032 1.524) (thickness 0.21082)))
+ )
+ (feature1 (pts (xy 194.945 34.29) (xy 194.945 24.89454)))
+ (feature2 (pts (xy 79.375 34.29) (xy 79.375 24.89454)))
+ (crossbar (pts (xy 79.375 28.45054) (xy 194.945 28.45054)))
+ (arrow1a (pts (xy 194.945 28.45054) (xy 193.81978 29.03474)))
+ (arrow1b (pts (xy 194.945 28.45054) (xy 193.81978 27.86634)))
+ (arrow2a (pts (xy 79.375 28.45054) (xy 80.50022 29.03474)))
+ (arrow2b (pts (xy 79.375 28.45054) (xy 80.50022 27.86634)))
+ )
+ (gr_text 1 (at 84.455 36.83) (layer Cuivre) (tstamp B98C)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text 2 (at 81.915 39.37) (layer Composant) (tstamp B98C)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text INTERF_U (at 188.595 45.72 90) (layer Cuivre) (tstamp 47)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text INTERF_U (at 183.515 45.72 90) (layer Composant) (tstamp 47)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text V02 (at 175.895 38.1) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.381)) (justify mirror))
+ )
+ (gr_text V02 (at 175.895 38.1) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.381)))
+ )
+ (gr_text INTERF_U (at 184.785 127) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.381)))
+ )
+ (gr_text V02 (at 183.515 130.81) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.381)))
+ )
+ (gr_line (start 90.805 133.35) (end 90.805 140.97) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 90.805 140.97) (end 90.805 142.24) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 90.805 142.24) (end 172.085 142.24) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 172.085 142.24) (end 172.085 133.35) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 172.085 133.35) (end 194.945 133.35) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 194.945 133.35) (end 194.945 34.29) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 90.805 133.35) (end 79.375 133.35) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 79.375 133.35) (end 79.375 34.29) (layer Edge.Cuts) (width 0.127))
+ (gr_line (start 79.375 34.29) (end 194.945 34.29) (layer Edge.Cuts) (width 0.127))
+
+ (segment (start 128.905 90.17) (end 142.875 90.17) (width 0.4318) (layer Cuivre) (net 1) (status 400))
+ (segment (start 127.635 91.44) (end 128.905 90.17) (width 0.4318) (layer Cuivre) (net 1) (status 800))
+ (segment (start 173.355 90.17) (end 175.26 90.17) (width 0.4318) (layer Cuivre) (net 2) (status 800))
+ (segment (start 180.34 95.25) (end 175.26 90.17) (width 0.4318) (layer Cuivre) (net 2))
+ (segment (start 182.245 97.282) (end 180.34 95.377) (width 0.4318) (layer Cuivre) (net 2) (status 800))
+ (segment (start 180.34 95.25) (end 180.34 95.377) (width 0.4318) (layer Cuivre) (net 2))
+ (segment (start 170.815 72.39) (end 172.085 71.12) (width 0.4318) (layer Cuivre) (net 3) (status 800))
+ (segment (start 178.435 71.12) (end 181.102 73.787) (width 0.4318) (layer Cuivre) (net 3))
+ (segment (start 184.785 73.787) (end 184.785 73.9648) (width 0.4318) (layer Cuivre) (net 3) (status 400))
+ (segment (start 181.102 73.787) (end 184.785 73.787) (width 0.4318) (layer Cuivre) (net 3))
+ (segment (start 172.085 71.12) (end 178.435 71.12) (width 0.4318) (layer Cuivre) (net 3))
+ (segment (start 170.815 74.93) (end 172.085 73.66) (width 0.4318) (layer Cuivre) (net 4) (status 800))
+ (segment (start 172.085 73.66) (end 179.705 73.66) (width 0.4318) (layer Cuivre) (net 4))
+ (segment (start 180.975 74.93) (end 182.245 74.93) (width 0.4318) (layer Cuivre) (net 4))
+ (segment (start 182.245 74.93) (end 182.245 75.184) (width 0.4318) (layer Cuivre) (net 4) (status 400))
+ (segment (start 179.705 73.66) (end 180.975 74.93) (width 0.4318) (layer Cuivre) (net 4))
+ (segment (start 173.355 77.47) (end 182.245 77.47) (width 0.4318) (layer Cuivre) (net 5) (status 800))
+ (segment (start 182.245 77.47) (end 182.245 77.851) (width 0.4318) (layer Cuivre) (net 5) (status 400))
+ (segment (start 176.657 80.772) (end 182.245 80.772) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 182.245 80.772) (end 182.245 80.645) (width 0.4318) (layer Cuivre) (net 6) (status 400))
+ (segment (start 176.149 81.28) (end 176.657 80.772) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 172.085 81.28) (end 176.149 81.28) (width 0.4318) (layer Cuivre) (net 6))
+ (segment (start 170.815 80.01) (end 172.085 81.28) (width 0.4318) (layer Cuivre) (net 6) (status 800))
+ (segment (start 173.355 82.55) (end 179.578 82.55) (width 0.4318) (layer Cuivre) (net 7) (status 800))
+ (segment (start 180.34 83.312) (end 182.245 83.439) (width 0.4318) (layer Cuivre) (net 7) (status 400))
+ (segment (start 179.578 82.55) (end 180.34 83.312) (width 0.4318) (layer Cuivre) (net 7))
+ (segment (start 179.578 85.09) (end 180.594 86.106) (width 0.4318) (layer Cuivre) (net 8))
+ (segment (start 173.355 85.09) (end 179.578 85.09) (width 0.4318) (layer Cuivre) (net 8) (status 800))
+ (segment (start 182.245 86.106) (end 182.245 86.233) (width 0.4318) (layer Cuivre) (net 8) (status 400))
+ (segment (start 180.594 86.106) (end 182.245 86.106) (width 0.4318) (layer Cuivre) (net 8))
+ (segment (start 172.085 86.36) (end 178.435 86.36) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 178.435 86.36) (end 180.975 88.9) (width 0.4318) (layer Cuivre) (net 9))
+ (segment (start 180.975 88.9) (end 182.245 88.9) (width 0.4318) (layer Cuivre) (net 9) (status 400))
+ (segment (start 170.815 85.09) (end 172.085 86.36) (width 0.4318) (layer Cuivre) (net 9) (status 800))
+ (segment (start 178.435 87.63) (end 182.245 91.44) (width 0.4318) (layer Cuivre) (net 10))
+ (segment (start 182.245 91.44) (end 182.245 91.694) (width 0.4318) (layer Cuivre) (net 10) (status 400))
+ (segment (start 173.355 87.63) (end 178.435 87.63) (width 0.4318) (layer Cuivre) (net 10) (status 800))
+ (segment (start 178.435 83.82) (end 179.705 83.82) (width 0.4318) (layer Composant) (net 11))
+ (segment (start 180.975 85.09) (end 180.975 92.71) (width 0.4318) (layer Composant) (net 11))
+ (segment (start 182.245 93.98) (end 182.245 94.488) (width 0.4318) (layer Composant) (net 11) (status 400))
+ (segment (start 180.975 92.71) (end 182.245 93.98) (width 0.4318) (layer Composant) (net 11))
+ (segment (start 179.705 83.82) (end 180.975 85.09) (width 0.4318) (layer Composant) (net 11))
+ (via (at 178.435 83.82) (size 1.397) (layers Composant Cuivre) (net 11))
+ (segment (start 168.275 85.09) (end 169.545 83.82) (width 0.4318) (layer Cuivre) (net 11) (status 800))
+ (segment (start 169.545 83.82) (end 178.435 83.82) (width 0.4318) (layer Cuivre) (net 11))
+ (segment (start 172.085 90.805) (end 172.72 91.44) (width 0.4318) (layer Cuivre) (net 12))
+ (segment (start 182.245 99.695) (end 182.245 99.949) (width 0.4318) (layer Cuivre) (net 12) (status 400))
+ (segment (start 172.72 91.44) (end 173.99 91.44) (width 0.4318) (layer Cuivre) (net 12))
+ (segment (start 173.99 91.44) (end 182.245 99.695) (width 0.4318) (layer Cuivre) (net 12))
+ (segment (start 172.085 88.9) (end 172.085 90.805) (width 0.4318) (layer Cuivre) (net 12))
+ (segment (start 170.815 87.63) (end 172.085 88.9) (width 0.4318) (layer Cuivre) (net 12) (status 800))
+ (segment (start 149.225 96.52) (end 149.225 102.87) (width 0.4318) (layer Composant) (net 13))
+ (segment (start 144.4625 104.14) (end 144.145 104.4575) (width 0.4318) (layer Composant) (net 13))
+ (segment (start 144.145 104.4575) (end 144.145 105.41) (width 0.4318) (layer Composant) (net 13) (status 400))
+ (segment (start 150.495 92.71) (end 150.495 95.25) (width 0.4318) (layer Composant) (net 13) (status C00))
+ (segment (start 149.225 102.87) (end 147.955 104.14) (width 0.4318) (layer Composant) (net 13))
+ (segment (start 150.495 95.25) (end 149.225 96.52) (width 0.4318) (layer Composant) (net 13) (status 800))
+ (segment (start 147.955 104.14) (end 144.4625 104.14) (width 0.4318) (layer Composant) (net 13))
+ (segment (start 165.735 58.42) (end 113.665 58.42) (width 0.4318) (layer Cuivre) (net 14))
+ (segment (start 165.735 67.31) (end 165.735 58.42) (width 0.4318) (layer Composant) (net 14) (status 800))
+ (via (at 165.735 58.42) (size 1.397) (layers Composant Cuivre) (net 14))
+ (segment (start 112.395 59.69) (end 112.395 60.96) (width 0.4318) (layer Cuivre) (net 14) (status 400))
+ (segment (start 113.665 58.42) (end 112.395 59.69) (width 0.4318) (layer Cuivre) (net 14))
+ (segment (start 131.445 105.41) (end 131.445 102.235) (width 0.4318) (layer Cuivre) (net 15) (status 800))
+ (segment (start 145.415 100.965) (end 145.415 97.79) (width 0.4318) (layer Composant) (net 15) (status 400))
+ (segment (start 156.845 100.965) (end 156.845 116.84) (width 0.4318) (layer Composant) (net 15) (status 400))
+ (segment (start 148.59 100.33) (end 156.21 100.33) (width 0.4318) (layer Cuivre) (net 15))
+ (segment (start 131.445 102.235) (end 132.715 100.965) (width 0.4318) (layer Cuivre) (net 15))
+ (segment (start 145.415 100.965) (end 147.955 100.965) (width 0.4318) (layer Cuivre) (net 15))
+ (segment (start 132.715 100.965) (end 145.415 100.965) (width 0.4318) (layer Cuivre) (net 15))
+ (segment (start 156.21 100.33) (end 156.845 100.965) (width 0.4318) (layer Cuivre) (net 15))
+ (via (at 156.845 100.965) (size 1.397) (layers Composant Cuivre) (net 15))
+ (via (at 145.415 100.965) (size 1.397) (layers Composant Cuivre) (net 15))
+ (segment (start 147.955 100.965) (end 148.59 100.33) (width 0.4318) (layer Cuivre) (net 15))
+ (segment (start 160.655 106.68) (end 160.655 97.79) (width 0.4318) (layer Composant) (net 16) (status 400))
+ (segment (start 161.29 107.315) (end 160.655 106.68) (width 0.4318) (layer Composant) (net 16))
+ (segment (start 161.29 113.665) (end 161.29 107.315) (width 0.4318) (layer Composant) (net 16))
+ (segment (start 159.385 116.84) (end 159.385 115.57) (width 0.4318) (layer Composant) (net 16) (status 800))
+ (segment (start 159.385 115.57) (end 161.29 113.665) (width 0.4318) (layer Composant) (net 16))
+ (segment (start 163.195 114.3) (end 161.925 115.57) (width 0.4318) (layer Composant) (net 17))
+ (segment (start 161.925 115.57) (end 161.925 116.84) (width 0.4318) (layer Composant) (net 17) (status 400))
+ (segment (start 163.195 97.79) (end 163.195 114.3) (width 0.4318) (layer Composant) (net 17) (status 800))
+ (segment (start 164.465 96.52) (end 164.465 116.84) (width 0.4318) (layer Composant) (net 18) (status 400))
+ (segment (start 163.195 95.25) (end 164.465 96.52) (width 0.4318) (layer Composant) (net 18) (status 800))
+ (segment (start 165.735 95.25) (end 167.005 96.52) (width 0.4318) (layer Composant) (net 19) (status 800))
+ (segment (start 167.005 96.52) (end 167.005 116.84) (width 0.4318) (layer Composant) (net 19) (status 400))
+ (segment (start 168.275 112.395) (end 169.545 113.665) (width 0.4318) (layer Composant) (net 20))
+ (segment (start 169.545 113.665) (end 169.545 116.84) (width 0.4318) (layer Composant) (net 20) (status 400))
+ (segment (start 168.275 97.79) (end 168.275 112.395) (width 0.4318) (layer Composant) (net 20) (status 800))
+ (segment (start 168.275 95.25) (end 169.545 96.52) (width 0.4318) (layer Composant) (net 21) (status 800))
+ (segment (start 169.545 96.52) (end 169.545 111.76) (width 0.4318) (layer Composant) (net 21))
+ (segment (start 172.085 114.3) (end 172.085 116.84) (width 0.4318) (layer Composant) (net 21) (status 400))
+ (segment (start 169.545 111.76) (end 172.085 114.3) (width 0.4318) (layer Composant) (net 21))
+ (segment (start 170.815 92.71) (end 172.085 93.98) (width 0.4318) (layer Composant) (net 22) (status 800))
+ (segment (start 172.085 112.395) (end 174.625 114.935) (width 0.4318) (layer Composant) (net 22))
+ (segment (start 174.625 114.935) (end 174.625 116.84) (width 0.4318) (layer Composant) (net 22) (status 400))
+ (segment (start 172.085 93.98) (end 172.085 112.395) (width 0.4318) (layer Composant) (net 22))
+ (segment (start 150.495 121.92) (end 150.495 123.19) (width 0.4318) (layer Composant) (net 23))
+ (segment (start 140.335 120.65) (end 149.225 120.65) (width 0.4318) (layer Cuivre) (net 23))
+ (segment (start 150.495 123.19) (end 151.765 124.46) (width 0.4318) (layer Composant) (net 23) (status 400))
+ (via (at 149.225 120.65) (size 1.397) (layers Composant Cuivre) (net 23))
+ (via (at 140.335 120.65) (size 1.397) (layers Composant Cuivre) (net 23))
+ (segment (start 149.225 120.65) (end 150.495 121.92) (width 0.4318) (layer Composant) (net 23))
+ (segment (start 141.605 109.22) (end 140.335 110.49) (width 0.4318) (layer Composant) (net 23))
+ (segment (start 141.605 105.41) (end 141.605 109.22) (width 0.4318) (layer Composant) (net 23) (status 800))
+ (segment (start 140.335 110.49) (end 140.335 120.65) (width 0.4318) (layer Composant) (net 23))
+ (segment (start 167.005 101.6) (end 167.005 93.98) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 154.305 101.6) (end 154.94 102.235) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 166.37 102.235) (end 167.005 101.6) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 134.3025 102.235) (end 149.225 102.235) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 133.985 102.5525) (end 134.3025 102.235) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 133.985 105.41) (end 133.985 102.5525) (width 0.4318) (layer Cuivre) (net 24) (status 800))
+ (segment (start 167.005 93.98) (end 168.275 92.71) (width 0.4318) (layer Cuivre) (net 24) (status 400))
+ (segment (start 149.86 101.6) (end 154.305 101.6) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 149.225 102.235) (end 149.86 101.6) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 154.94 102.235) (end 166.37 102.235) (width 0.4318) (layer Cuivre) (net 24))
+ (segment (start 128.905 107.95) (end 154.305 107.95) (width 0.4318) (layer Cuivre) (net 25))
+ (segment (start 154.305 107.95) (end 154.305 116.84) (width 0.4318) (layer Composant) (net 25) (status 400))
+ (via (at 154.305 107.95) (size 1.397) (layers Composant Cuivre) (net 25))
+ (segment (start 128.905 105.41) (end 128.905 107.95) (width 0.4318) (layer Composant) (net 25) (status 800))
+ (via (at 128.905 107.95) (size 1.397) (layers Composant Cuivre) (net 25))
+ (segment (start 173.355 74.93) (end 179.451 74.93) (width 0.4318) (layer Cuivre) (net 26) (status 800))
+ (segment (start 181.102 76.581) (end 184.785 76.581) (width 0.4318) (layer Cuivre) (net 26))
+ (segment (start 184.785 76.5048) (end 184.785 76.581) (width 0.4318) (layer Cuivre) (net 26) (status 800))
+ (segment (start 179.451 74.93) (end 181.102 76.581) (width 0.4318) (layer Cuivre) (net 26))
+ (segment (start 170.815 77.47) (end 172.085 78.74) (width 0.4318) (layer Cuivre) (net 27) (status 800))
+ (segment (start 180.721 78.74) (end 181.229 79.248) (width 0.4318) (layer Cuivre) (net 27))
+ (segment (start 184.785 79.248) (end 184.785 79.2988) (width 0.4318) (layer Cuivre) (net 27) (status 400))
+ (segment (start 172.085 78.74) (end 180.721 78.74) (width 0.4318) (layer Cuivre) (net 27))
+ (segment (start 181.229 79.248) (end 184.785 79.248) (width 0.4318) (layer Cuivre) (net 27))
+ (segment (start 147.955 95.25) (end 146.685 93.98) (width 0.4318) (layer Composant) (net 28) (status 800))
+ (segment (start 149.225 81.28) (end 149.225 66.04) (width 0.4318) (layer Composant) (net 28))
+ (segment (start 149.225 66.04) (end 147.955 64.77) (width 0.4318) (layer Composant) (net 28))
+ (segment (start 146.685 93.98) (end 146.685 91.44) (width 0.4318) (layer Composant) (net 28))
+ (segment (start 147.955 64.77) (end 147.955 41.91) (width 0.4318) (layer Composant) (net 28) (status 400))
+ (segment (start 146.685 91.44) (end 144.145 91.44) (width 0.4318) (layer Composant) (net 28))
+ (segment (start 144.145 91.44) (end 144.145 81.28) (width 0.4318) (layer Composant) (net 28))
+ (segment (start 144.145 81.28) (end 149.225 81.28) (width 0.4318) (layer Composant) (net 28))
+ (segment (start 173.355 80.01) (end 175.895 77.47) (width 0.4318) (layer Composant) (net 29) (status 800))
+ (segment (start 175.895 77.47) (end 175.895 41.91) (width 0.4318) (layer Composant) (net 29) (status 400))
+ (via (at 113.665 57.15) (size 1.397) (layers Composant Cuivre) (net 30))
+ (segment (start 114.935 74.93) (end 113.665 73.66) (width 0.4318) (layer Composant) (net 30))
+ (segment (start 168.275 67.31) (end 168.275 57.15) (width 0.4318) (layer Composant) (net 30) (status 800))
+ (segment (start 113.665 57.15) (end 113.665 73.66) (width 0.4318) (layer Composant) (net 30))
+ (via (at 168.275 57.15) (size 1.397) (layers Composant Cuivre) (net 30))
+ (segment (start 114.935 76.2) (end 114.935 74.93) (width 0.4318) (layer Composant) (net 30) (status 800))
+ (segment (start 168.275 57.15) (end 113.665 57.15) (width 0.4318) (layer Cuivre) (net 30))
+ (segment (start 145.415 69.85) (end 144.145 68.58) (width 0.4318) (layer Cuivre) (net 31) (status 800))
+ (segment (start 111.125 73.66) (end 111.125 68.58) (width 0.4318) (layer Composant) (net 31))
+ (segment (start 144.145 68.58) (end 111.125 68.58) (width 0.4318) (layer Cuivre) (net 31))
+ (segment (start 112.395 76.2) (end 112.395 74.93) (width 0.4318) (layer Composant) (net 31) (status 800))
+ (segment (start 112.395 74.93) (end 111.125 73.66) (width 0.4318) (layer Composant) (net 31))
+ (via (at 111.125 68.58) (size 1.397) (layers Composant Cuivre) (net 31))
+ (segment (start 109.855 64.77) (end 109.855 60.96) (width 0.4318) (layer Composant) (net 32) (status 400))
+ (via (at 167.005 64.77) (size 1.397) (layers Composant Cuivre) (net 32))
+ (segment (start 167.005 64.77) (end 109.855 64.77) (width 0.4318) (layer Cuivre) (net 32))
+ (segment (start 164.465 71.12) (end 167.005 71.12) (width 0.4318) (layer Composant) (net 32))
+ (segment (start 163.195 72.39) (end 164.465 71.12) (width 0.4318) (layer Composant) (net 32) (status 800))
+ (via (at 109.855 64.77) (size 1.397) (layers Composant Cuivre) (net 32))
+ (segment (start 167.005 71.12) (end 167.005 64.77) (width 0.4318) (layer Composant) (net 32))
+ (segment (start 145.415 74.93) (end 144.145 73.66) (width 0.4318) (layer Composant) (net 33) (status 800))
+ (segment (start 144.145 73.66) (end 141.605 73.66) (width 0.4318) (layer Composant) (net 33))
+ (segment (start 104.775 68.58) (end 104.775 60.96) (width 0.4318) (layer Composant) (net 33) (status 400))
+ (segment (start 139.065 69.85) (end 106.045 69.85) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 106.045 69.85) (end 104.775 68.58) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 139.065 71.12) (end 139.065 69.85) (width 0.4318) (layer Composant) (net 33))
+ (via (at 104.775 68.58) (size 1.397) (layers Composant Cuivre) (net 33))
+ (via (at 139.065 69.85) (size 1.397) (layers Composant Cuivre) (net 33))
+ (segment (start 141.605 73.66) (end 139.065 71.12) (width 0.4318) (layer Composant) (net 33))
+ (segment (start 94.615 76.2) (end 94.615 76.2) (width 0.4318) (layer Cuivre) (net 34) (status C00))
+ (segment (start 146.685 81.28) (end 99.695 81.28) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 99.695 81.28) (end 94.615 76.2) (width 0.4318) (layer Cuivre) (net 34) (status 400))
+ (segment (start 147.955 80.01) (end 146.685 81.28) (width 0.4318) (layer Cuivre) (net 34) (status 800))
+ (segment (start 142.875 72.39) (end 99.695 72.39) (width 0.4318) (layer Cuivre) (net 35) (status 800))
+ (segment (start 97.155 69.85) (end 97.155 68.58) (width 0.4318) (layer Cuivre) (net 35))
+ (segment (start 97.155 68.58) (end 97.155 60.96) (width 0.4318) (layer Composant) (net 35) (status 400))
+ (via (at 97.155 68.58) (size 1.397) (layers Composant Cuivre) (net 35))
+ (segment (start 99.695 72.39) (end 97.155 69.85) (width 0.4318) (layer Cuivre) (net 35))
+ (segment (start 93.345 74.93) (end 92.075 76.2) (width 0.4318) (layer Cuivre) (net 36) (status 400))
+ (segment (start 142.875 74.93) (end 93.345 74.93) (width 0.4318) (layer Cuivre) (net 36) (status 800))
+ (segment (start 137.795 66.04) (end 137.795 77.47) (width 0.4318) (layer Composant) (net 37))
+ (segment (start 90.17 66.04) (end 89.535 65.405) (width 0.4318) (layer Cuivre) (net 37))
+ (segment (start 137.795 77.47) (end 140.335 80.01) (width 0.4318) (layer Composant) (net 37))
+ (segment (start 140.335 80.01) (end 142.875 80.01) (width 0.4318) (layer Composant) (net 37) (status 400))
+ (segment (start 89.535 60.96) (end 89.535 65.405) (width 0.4318) (layer Cuivre) (net 37) (status 800))
+ (via (at 137.795 66.04) (size 1.397) (layers Composant Cuivre) (net 37))
+ (segment (start 137.795 66.04) (end 90.17 66.04) (width 0.4318) (layer Cuivre) (net 37))
+ (segment (start 161.925 48.26) (end 88.265 48.26) (width 0.4318) (layer Cuivre) (net 38))
+ (segment (start 161.925 48.26) (end 161.925 71.12) (width 0.4318) (layer Composant) (net 38))
+ (via (at 88.265 48.26) (size 1.397) (layers Composant Cuivre) (net 38))
+ (segment (start 88.265 73.66) (end 89.535 74.93) (width 0.4318) (layer Composant) (net 38))
+ (segment (start 88.265 48.26) (end 88.265 73.66) (width 0.4318) (layer Composant) (net 38))
+ (via (at 161.925 48.26) (size 1.397) (layers Composant Cuivre) (net 38))
+ (segment (start 89.535 74.93) (end 89.535 76.2) (width 0.4318) (layer Composant) (net 38) (status 400))
+ (segment (start 161.925 71.12) (end 160.655 72.39) (width 0.4318) (layer Composant) (net 38) (status 400))
+ (segment (start 146.685 76.2) (end 133.985 76.2) (width 0.4318) (layer Cuivre) (net 39))
+ (segment (start 147.955 74.93) (end 146.685 76.2) (width 0.4318) (layer Cuivre) (net 39) (status 800))
+ (segment (start 133.985 76.2) (end 132.715 77.47) (width 0.4318) (layer Cuivre) (net 39))
+ (segment (start 132.715 77.47) (end 111.125 77.47) (width 0.4318) (layer Cuivre) (net 39))
+ (segment (start 111.125 77.47) (end 109.855 76.2) (width 0.4318) (layer Cuivre) (net 39) (status 400))
+ (segment (start 145.415 72.39) (end 144.145 73.66) (width 0.4318) (layer Cuivre) (net 40) (status 800))
+ (segment (start 107.315 74.93) (end 106.045 73.66) (width 0.4318) (layer Composant) (net 40))
+ (via (at 106.045 73.66) (size 1.397) (layers Composant Cuivre) (net 40))
+ (segment (start 107.315 76.2) (end 107.315 74.93) (width 0.4318) (layer Composant) (net 40) (status 800))
+ (segment (start 144.145 73.66) (end 106.045 73.66) (width 0.4318) (layer Cuivre) (net 40))
+ (segment (start 135.255 77.47) (end 133.985 78.74) (width 0.4318) (layer Cuivre) (net 41))
+ (segment (start 142.875 77.47) (end 135.255 77.47) (width 0.4318) (layer Cuivre) (net 41) (status 800))
+ (segment (start 107.315 78.74) (end 104.775 76.2) (width 0.4318) (layer Cuivre) (net 41) (status 400))
+ (segment (start 133.985 78.74) (end 107.315 78.74) (width 0.4318) (layer Cuivre) (net 41))
+ (segment (start 174.625 71.12) (end 173.355 72.39) (width 0.4318) (layer Composant) (net 42) (status 400))
+ (segment (start 102.235 76.2) (end 102.235 74.93) (width 0.4318) (layer Composant) (net 42) (status 800))
+ (via (at 100.965 63.5) (size 1.397) (layers Composant Cuivre) (net 42))
+ (segment (start 100.965 63.5) (end 174.625 63.5) (width 0.4318) (layer Cuivre) (net 42))
+ (segment (start 174.625 63.5) (end 174.625 71.12) (width 0.4318) (layer Composant) (net 42))
+ (segment (start 102.235 74.93) (end 100.965 73.66) (width 0.4318) (layer Composant) (net 42))
+ (via (at 174.625 63.5) (size 1.397) (layers Composant Cuivre) (net 42))
+ (segment (start 100.965 73.66) (end 100.965 63.5) (width 0.4318) (layer Composant) (net 42))
+ (segment (start 99.695 77.47) (end 99.695 76.2) (width 0.4318) (layer Cuivre) (net 43) (status 400))
+ (segment (start 135.255 80.01) (end 102.235 80.01) (width 0.4318) (layer Cuivre) (net 43))
+ (segment (start 102.235 80.01) (end 99.695 77.47) (width 0.4318) (layer Cuivre) (net 43))
+ (segment (start 145.415 80.01) (end 144.145 78.74) (width 0.4318) (layer Cuivre) (net 43) (status 800))
+ (segment (start 136.525 78.74) (end 135.255 80.01) (width 0.4318) (layer Cuivre) (net 43))
+ (segment (start 144.145 78.74) (end 136.525 78.74) (width 0.4318) (layer Cuivre) (net 43))
+ (segment (start 95.885 53.34) (end 95.885 73.66) (width 0.4318) (layer Composant) (net 44))
+ (segment (start 146.685 53.34) (end 95.885 53.34) (width 0.4318) (layer Cuivre) (net 44))
+ (via (at 146.685 53.34) (size 1.397) (layers Composant Cuivre) (net 44))
+ (segment (start 97.155 74.93) (end 95.885 73.66) (width 0.4318) (layer Composant) (net 44))
+ (via (at 95.885 53.34) (size 1.397) (layers Composant Cuivre) (net 44))
+ (segment (start 147.955 69.85) (end 146.685 68.58) (width 0.4318) (layer Composant) (net 44) (status 800))
+ (segment (start 97.155 76.2) (end 97.155 74.93) (width 0.4318) (layer Composant) (net 44) (status 800))
+ (segment (start 146.685 68.58) (end 146.685 53.34) (width 0.4318) (layer Composant) (net 44))
+ (via (at 100.965 82.55) (size 1.397) (layers Composant Cuivre) (net 45))
+ (segment (start 100.965 82.55) (end 100.965 74.93) (width 0.4318) (layer Composant) (net 45))
+ (segment (start 100.965 74.93) (end 99.695 73.66) (width 0.4318) (layer Composant) (net 45))
+ (segment (start 142.875 82.55) (end 100.965 82.55) (width 0.4318) (layer Cuivre) (net 45) (status 800))
+ (segment (start 99.695 73.66) (end 99.695 60.96) (width 0.4318) (layer Composant) (net 45) (status 400))
+ (via (at 150.495 62.23) (size 1.397) (layers Composant Cuivre) (net 46))
+ (segment (start 150.495 67.31) (end 150.495 62.23) (width 0.4318) (layer Composant) (net 46) (status 800))
+ (segment (start 103.505 62.23) (end 102.235 60.96) (width 0.4318) (layer Cuivre) (net 46) (status 400))
+ (segment (start 150.495 62.23) (end 103.505 62.23) (width 0.4318) (layer Cuivre) (net 46))
+ (segment (start 126.365 114.935) (end 126.365 113.03) (width 0.4318) (layer Cuivre) (net 47) (status 400))
+ (segment (start 99.695 115.57) (end 125.73 115.57) (width 0.4318) (layer Cuivre) (net 47))
+ (segment (start 125.73 115.57) (end 126.365 114.935) (width 0.4318) (layer Cuivre) (net 47))
+ (segment (start 98.425 116.84) (end 99.695 115.57) (width 0.4318) (layer Cuivre) (net 47) (status 800))
+ (segment (start 154.305 71.12) (end 116.205 71.12) (width 0.4318) (layer Cuivre) (net 48))
+ (segment (start 117.475 74.93) (end 116.205 73.66) (width 0.4318) (layer Composant) (net 48))
+ (via (at 116.205 71.12) (size 1.397) (layers Composant Cuivre) (net 48))
+ (segment (start 117.475 76.2) (end 117.475 74.93) (width 0.4318) (layer Composant) (net 48) (status 800))
+ (segment (start 155.575 72.39) (end 154.305 71.12) (width 0.4318) (layer Cuivre) (net 48) (status 800))
+ (segment (start 116.205 73.66) (end 116.205 71.12) (width 0.4318) (layer Composant) (net 48))
+ (segment (start 120.015 76.2) (end 120.015 74.93) (width 0.4318) (layer Composant) (net 49) (status 800))
+ (segment (start 151.765 66.04) (end 140.335 66.04) (width 0.4318) (layer Cuivre) (net 49))
+ (via (at 118.745 67.31) (size 1.397) (layers Composant Cuivre) (net 49))
+ (segment (start 153.035 67.31) (end 151.765 66.04) (width 0.4318) (layer Cuivre) (net 49) (status 800))
+ (segment (start 118.745 67.31) (end 118.745 73.66) (width 0.4318) (layer Composant) (net 49))
+ (segment (start 120.015 74.93) (end 118.745 73.66) (width 0.4318) (layer Composant) (net 49))
+ (segment (start 139.065 67.31) (end 118.745 67.31) (width 0.4318) (layer Cuivre) (net 49))
+ (segment (start 140.335 66.04) (end 139.065 67.31) (width 0.4318) (layer Cuivre) (net 49))
+ (segment (start 121.285 54.61) (end 151.765 54.61) (width 0.4318) (layer Cuivre) (net 50))
+ (segment (start 155.575 69.85) (end 154.305 68.58) (width 0.4318) (layer Composant) (net 50) (status 800))
+ (via (at 121.285 54.61) (size 1.397) (layers Composant Cuivre) (net 50))
+ (segment (start 122.555 74.93) (end 121.285 73.66) (width 0.4318) (layer Composant) (net 50))
+ (segment (start 154.305 57.15) (end 151.765 54.61) (width 0.4318) (layer Composant) (net 50))
+ (segment (start 122.555 76.2) (end 122.555 74.93) (width 0.4318) (layer Composant) (net 50) (status 800))
+ (via (at 151.765 54.61) (size 1.397) (layers Composant Cuivre) (net 50))
+ (segment (start 154.305 68.58) (end 154.305 57.15) (width 0.4318) (layer Composant) (net 50))
+ (segment (start 121.285 73.66) (end 121.285 54.61) (width 0.4318) (layer Composant) (net 50))
+ (via (at 155.575 60.96) (size 1.397) (layers Composant Cuivre) (net 51))
+ (segment (start 155.575 60.96) (end 125.095 60.96) (width 0.4318) (layer Cuivre) (net 51) (status 400))
+ (segment (start 155.575 67.31) (end 155.575 60.96) (width 0.4318) (layer Composant) (net 51) (status 800))
+ (via (at 122.555 45.72) (size 1.397) (layers Composant Cuivre) (net 52))
+ (segment (start 122.555 60.96) (end 122.555 45.72) (width 0.4318) (layer Composant) (net 52) (status 800))
+ (segment (start 158.115 45.72) (end 122.555 45.72) (width 0.4318) (layer Cuivre) (net 52))
+ (via (at 158.115 45.72) (size 1.397) (layers Composant Cuivre) (net 52))
+ (segment (start 158.115 67.31) (end 158.115 45.72) (width 0.4318) (layer Composant) (net 52) (status 800))
+ (segment (start 120.015 60.96) (end 120.015 49.53) (width 0.4318) (layer Composant) (net 53) (status 800))
+ (segment (start 160.655 67.31) (end 160.655 49.53) (width 0.4318) (layer Composant) (net 53) (status 800))
+ (via (at 160.655 49.53) (size 1.397) (layers Composant Cuivre) (net 53))
+ (via (at 120.015 49.53) (size 1.397) (layers Composant Cuivre) (net 53))
+ (segment (start 120.015 49.53) (end 160.655 49.53) (width 0.4318) (layer Cuivre) (net 53))
+ (segment (start 117.475 55.88) (end 163.195 55.88) (width 0.4318) (layer Cuivre) (net 54))
+ (segment (start 163.195 67.31) (end 163.195 55.88) (width 0.4318) (layer Composant) (net 54) (status 800))
+ (via (at 117.475 55.88) (size 1.397) (layers Composant Cuivre) (net 54))
+ (segment (start 117.475 60.96) (end 117.475 55.88) (width 0.4318) (layer Composant) (net 54) (status 800))
+ (via (at 163.195 55.88) (size 1.397) (layers Composant Cuivre) (net 54))
+ (segment (start 159.385 59.69) (end 116.205 59.69) (width 0.4318) (layer Cuivre) (net 55))
+ (via (at 159.385 59.69) (size 1.397) (layers Composant Cuivre) (net 55))
+ (segment (start 160.655 69.85) (end 159.385 68.58) (width 0.4318) (layer Composant) (net 55) (status 800))
+ (segment (start 116.205 59.69) (end 114.935 60.96) (width 0.4318) (layer Cuivre) (net 55) (status 400))
+ (segment (start 159.385 68.58) (end 159.385 59.69) (width 0.4318) (layer Composant) (net 55))
+ (via (at 107.315 46.99) (size 1.397) (layers Composant Cuivre) (net 56))
+ (segment (start 164.465 46.99) (end 107.315 46.99) (width 0.4318) (layer Cuivre) (net 56))
+ (via (at 164.465 46.99) (size 1.397) (layers Composant Cuivre) (net 56))
+ (segment (start 163.195 69.85) (end 164.465 68.58) (width 0.4318) (layer Composant) (net 56) (status 800))
+ (segment (start 164.465 68.58) (end 164.465 46.99) (width 0.4318) (layer Composant) (net 56))
+ (segment (start 107.315 46.99) (end 107.315 60.96) (width 0.4318) (layer Composant) (net 56) (status 400))
+ (segment (start 154.305 105.41) (end 153.035 106.68) (width 0.4318) (layer Composant) (net 57))
+ (via (at 93.345 120.65) (size 1.397) (layers Composant Cuivre) (net 57))
+ (segment (start 128.905 120.65) (end 93.345 120.65) (width 0.4318) (layer Cuivre) (net 57))
+ (segment (start 153.035 125.73) (end 149.225 125.73) (width 0.4318) (layer Composant) (net 57))
+ (segment (start 153.035 106.68) (end 153.035 125.73) (width 0.4318) (layer Composant) (net 57))
+ (segment (start 145.415 125.73) (end 145.415 123.19) (width 0.4318) (layer Cuivre) (net 57))
+ (segment (start 145.415 123.19) (end 130.175 123.19) (width 0.4318) (layer Cuivre) (net 57))
+ (segment (start 130.175 123.19) (end 128.905 124.46) (width 0.4318) (layer Cuivre) (net 57) (status 400))
+ (segment (start 154.305 96.52) (end 154.305 105.41) (width 0.4318) (layer Composant) (net 57))
+ (via (at 128.905 120.65) (size 1.397) (layers Composant Cuivre) (net 57))
+ (segment (start 93.345 120.65) (end 93.345 138.43) (width 0.4318) (layer Composant) (net 57) (status 400))
+ (via (at 149.225 125.73) (size 1.397) (layers Composant Cuivre) (net 57))
+ (segment (start 128.905 124.46) (end 128.905 120.65) (width 0.4318) (layer Composant) (net 57) (status 800))
+ (segment (start 155.575 95.25) (end 154.305 96.52) (width 0.4318) (layer Composant) (net 57) (status 800))
+ (segment (start 149.225 125.73) (end 145.415 125.73) (width 0.4318) (layer Cuivre) (net 57))
+ (segment (start 126.365 124.46) (end 126.365 129.54) (width 0.4318) (layer Composant) (net 58) (status 800))
+ (segment (start 95.885 129.54) (end 95.885 138.43) (width 0.4318) (layer Composant) (net 58) (status 400))
+ (via (at 132.715 99.06) (size 1.397) (layers Composant Cuivre) (net 58))
+ (segment (start 126.365 129.54) (end 95.885 129.54) (width 0.4318) (layer Cuivre) (net 58))
+ (via (at 95.885 129.54) (size 1.397) (layers Composant Cuivre) (net 58))
+ (segment (start 150.495 97.79) (end 149.225 99.06) (width 0.4318) (layer Cuivre) (net 58) (status 800))
+ (segment (start 127.635 125.73) (end 126.365 124.46) (width 0.4318) (layer Composant) (net 58) (status 400))
+ (segment (start 149.225 99.06) (end 132.715 99.06) (width 0.4318) (layer Cuivre) (net 58))
+ (segment (start 132.715 125.73) (end 127.635 125.73) (width 0.4318) (layer Composant) (net 58))
+ (via (at 126.365 129.54) (size 1.397) (layers Composant Cuivre) (net 58))
+ (segment (start 132.715 99.06) (end 132.715 125.73) (width 0.4318) (layer Composant) (net 58))
+ (segment (start 118.745 121.92) (end 118.745 116.84) (width 0.4318) (layer Composant) (net 59) (status 400))
+ (via (at 118.745 95.25) (size 1.397) (layers Composant Cuivre) (net 59))
+ (segment (start 146.05 93.98) (end 135.255 93.98) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 135.255 93.98) (end 133.985 95.25) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 117.475 133.35) (end 117.475 123.19) (width 0.4318) (layer Composant) (net 59))
+ (segment (start 133.985 95.25) (end 118.745 95.25) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 146.685 93.345) (end 146.05 93.98) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 118.745 109.22) (end 117.475 110.49) (width 0.4318) (layer Composant) (net 59))
+ (segment (start 118.745 95.25) (end 118.745 109.22) (width 0.4318) (layer Composant) (net 59))
+ (segment (start 117.475 110.49) (end 117.475 115.57) (width 0.4318) (layer Composant) (net 59))
+ (segment (start 147.32 91.44) (end 146.685 92.075) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 117.475 115.57) (end 118.745 116.84) (width 0.4318) (layer Composant) (net 59) (status 400))
+ (segment (start 146.685 92.075) (end 146.685 93.345) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 118.745 138.43) (end 118.745 134.62) (width 0.4318) (layer Composant) (net 59) (status 800))
+ (segment (start 160.655 92.71) (end 159.385 91.44) (width 0.4318) (layer Cuivre) (net 59) (status 800))
+ (segment (start 159.385 91.44) (end 147.32 91.44) (width 0.4318) (layer Cuivre) (net 59))
+ (segment (start 117.475 123.19) (end 118.745 121.92) (width 0.4318) (layer Composant) (net 59))
+ (segment (start 118.745 134.62) (end 117.475 133.35) (width 0.4318) (layer Composant) (net 59))
+ (segment (start 121.285 138.43) (end 121.285 125.73) (width 0.4318) (layer Composant) (net 60) (status 800))
+ (segment (start 114.935 125.73) (end 113.665 124.46) (width 0.4318) (layer Cuivre) (net 60) (status 400))
+ (segment (start 121.285 125.73) (end 114.935 125.73) (width 0.4318) (layer Cuivre) (net 60))
+ (via (at 121.285 125.73) (size 1.397) (layers Composant Cuivre) (net 60))
+ (segment (start 151.765 96.52) (end 130.175 96.52) (width 0.4318) (layer Cuivre) (net 61))
+ (segment (start 98.425 134.62) (end 98.425 138.43) (width 0.4318) (layer Composant) (net 61) (status 400))
+ (segment (start 131.445 124.46) (end 131.445 125.73) (width 0.4318) (layer Cuivre) (net 61) (status 800))
+ (segment (start 99.695 133.35) (end 98.425 134.62) (width 0.4318) (layer Composant) (net 61))
+ (segment (start 99.695 121.92) (end 99.695 133.35) (width 0.4318) (layer Composant) (net 61))
+ (segment (start 153.035 95.25) (end 151.765 96.52) (width 0.4318) (layer Cuivre) (net 61) (status 800))
+ (segment (start 130.175 96.52) (end 130.175 121.285) (width 0.4318) (layer Composant) (net 61))
+ (segment (start 111.125 121.92) (end 99.695 121.92) (width 0.4318) (layer Cuivre) (net 61))
+ (segment (start 113.665 127) (end 112.395 125.73) (width 0.4318) (layer Cuivre) (net 61))
+ (segment (start 112.395 123.19) (end 111.125 121.92) (width 0.4318) (layer Cuivre) (net 61))
+ (via (at 130.175 96.52) (size 1.397) (layers Composant Cuivre) (net 61))
+ (segment (start 130.175 121.285) (end 131.445 122.555) (width 0.4318) (layer Composant) (net 61))
+ (segment (start 112.395 125.73) (end 112.395 123.19) (width 0.4318) (layer Cuivre) (net 61))
+ (segment (start 130.175 127) (end 113.665 127) (width 0.4318) (layer Cuivre) (net 61))
+ (via (at 99.695 121.92) (size 1.397) (layers Composant Cuivre) (net 61))
+ (segment (start 131.445 122.555) (end 131.445 124.46) (width 0.4318) (layer Composant) (net 61) (status 400))
+ (segment (start 131.445 125.73) (end 130.175 127) (width 0.4318) (layer Cuivre) (net 61))
+ (segment (start 107.315 133.35) (end 106.045 132.08) (width 0.4318) (layer Cuivre) (net 62))
+ (segment (start 106.045 132.08) (end 100.965 132.08) (width 0.4318) (layer Cuivre) (net 62))
+ (segment (start 144.145 91.44) (end 145.415 90.17) (width 0.4318) (layer Cuivre) (net 62) (status 400))
+ (segment (start 135.255 120.015) (end 135.255 91.44) (width 0.4318) (layer Composant) (net 62))
+ (segment (start 133.985 127) (end 132.715 128.27) (width 0.4318) (layer Composant) (net 62))
+ (segment (start 133.985 124.46) (end 133.985 121.285) (width 0.4318) (layer Composant) (net 62) (status 800))
+ (segment (start 132.715 133.35) (end 107.315 133.35) (width 0.4318) (layer Cuivre) (net 62))
+ (via (at 132.715 133.35) (size 1.397) (layers Composant Cuivre) (net 62))
+ (segment (start 135.255 91.44) (end 144.145 91.44) (width 0.4318) (layer Cuivre) (net 62))
+ (segment (start 132.715 128.27) (end 132.715 133.35) (width 0.4318) (layer Composant) (net 62))
+ (segment (start 133.985 121.285) (end 135.255 120.015) (width 0.4318) (layer Composant) (net 62))
+ (segment (start 133.985 124.46) (end 133.985 127) (width 0.4318) (layer Composant) (net 62) (status 800))
+ (segment (start 100.965 132.08) (end 100.965 138.43) (width 0.4318) (layer Composant) (net 62) (status 400))
+ (via (at 100.965 132.08) (size 1.397) (layers Composant Cuivre) (net 62))
+ (via (at 135.255 91.44) (size 1.397) (layers Composant Cuivre) (net 62))
+ (segment (start 103.505 119.38) (end 103.505 116.84) (width 0.4318) (layer Composant) (net 63) (status 400))
+ (segment (start 103.505 133.35) (end 104.775 132.08) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 104.775 132.08) (end 104.775 122.555) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 151.765 85.4075) (end 151.4475 85.09) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 151.765 101.6) (end 151.765 85.4075) (width 0.4318) (layer Composant) (net 63))
+ (via (at 151.765 119.38) (size 1.397) (layers Composant Cuivre) (net 63))
+ (segment (start 103.505 119.38) (end 151.765 119.38) (width 0.4318) (layer Cuivre) (net 63))
+ (segment (start 150.495 118.11) (end 150.495 102.87) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 151.4475 85.09) (end 147.955 85.09) (width 0.4318) (layer Composant) (net 63) (status 400))
+ (segment (start 151.765 119.38) (end 150.495 118.11) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 103.505 121.285) (end 103.505 119.38) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 150.495 102.87) (end 151.765 101.6) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 104.775 122.555) (end 103.505 121.285) (width 0.4318) (layer Composant) (net 63))
+ (segment (start 103.505 138.43) (end 103.505 133.35) (width 0.4318) (layer Composant) (net 63) (status 800))
+ (via (at 103.505 119.38) (size 1.397) (layers Composant Cuivre) (net 63))
+ (segment (start 102.235 89.535) (end 96.52 89.535) (width 0.4318) (layer Cuivre) (net 64))
+ (segment (start 106.045 138.43) (end 106.045 126.365) (width 0.4318) (layer Composant) (net 64) (status 800))
+ (segment (start 106.045 86.36) (end 105.41 86.36) (width 0.4318) (layer Cuivre) (net 64))
+ (segment (start 96.52 89.535) (end 97.155 90.17) (width 0.4318) (layer Composant) (net 64))
+ (via (at 96.52 89.535) (size 1.397) (layers Composant Cuivre) (net 64))
+ (segment (start 97.155 118.11) (end 97.155 90.17) (width 0.4318) (layer Composant) (net 64))
+ (segment (start 100.33 126.365) (end 98.425 124.46) (width 0.4318) (layer Cuivre) (net 64) (status 400))
+ (segment (start 144.145 86.36) (end 145.415 87.63) (width 0.4318) (layer Cuivre) (net 64) (status 400))
+ (segment (start 132.969 86.36) (end 144.145 86.36) (width 0.4318) (layer Cuivre) (net 64))
+ (segment (start 106.045 86.36) (end 132.969 86.36) (width 0.4318) (layer Cuivre) (net 64))
+ (via (at 106.045 126.365) (size 1.397) (layers Composant Cuivre) (net 64))
+ (segment (start 98.425 124.46) (end 98.425 119.38) (width 0.4318) (layer Composant) (net 64) (status 800))
+ (segment (start 98.425 119.38) (end 97.155 118.11) (width 0.4318) (layer Composant) (net 64))
+ (segment (start 105.41 86.36) (end 102.235 89.535) (width 0.4318) (layer Cuivre) (net 64))
+ (segment (start 106.045 126.365) (end 100.33 126.365) (width 0.4318) (layer Cuivre) (net 64))
+ (segment (start 107.315 87.63) (end 107.315 114.3) (width 0.4318) (layer Composant) (net 65))
+ (segment (start 108.585 115.57) (end 108.585 116.84) (width 0.4318) (layer Composant) (net 65) (status 400))
+ (via (at 107.315 87.63) (size 1.397) (layers Composant Cuivre) (net 65))
+ (segment (start 107.315 123.19) (end 108.585 121.92) (width 0.4318) (layer Composant) (net 65))
+ (segment (start 108.585 121.92) (end 108.585 116.84) (width 0.4318) (layer Composant) (net 65) (status 400))
+ (segment (start 107.315 133.35) (end 107.315 123.19) (width 0.4318) (layer Composant) (net 65))
+ (segment (start 107.315 114.3) (end 108.585 115.57) (width 0.4318) (layer Composant) (net 65))
+ (segment (start 142.875 87.63) (end 107.315 87.63) (width 0.4318) (layer Cuivre) (net 65) (status 800))
+ (segment (start 108.585 138.43) (end 108.585 134.62) (width 0.4318) (layer Composant) (net 65) (status 800))
+ (segment (start 108.585 134.62) (end 107.315 133.35) (width 0.4318) (layer Composant) (net 65))
+ (segment (start 112.395 101.6) (end 112.395 115.57) (width 0.4318) (layer Composant) (net 66))
+ (segment (start 111.125 138.43) (end 111.125 134.62) (width 0.4318) (layer Composant) (net 66) (status 800))
+ (segment (start 144.145 83.82) (end 112.395 83.82) (width 0.4318) (layer Cuivre) (net 66))
+ (segment (start 111.125 85.09) (end 111.125 100.33) (width 0.4318) (layer Composant) (net 66))
+ (segment (start 111.125 100.33) (end 112.395 101.6) (width 0.4318) (layer Composant) (net 66))
+ (segment (start 112.395 83.82) (end 111.125 85.09) (width 0.4318) (layer Composant) (net 66))
+ (segment (start 113.665 121.92) (end 113.665 116.84) (width 0.4318) (layer Composant) (net 66) (status 400))
+ (segment (start 145.415 85.09) (end 144.145 83.82) (width 0.4318) (layer Cuivre) (net 66) (status 800))
+ (segment (start 112.395 133.35) (end 112.395 123.19) (width 0.4318) (layer Composant) (net 66))
+ (segment (start 112.395 115.57) (end 113.665 116.84) (width 0.4318) (layer Composant) (net 66) (status 400))
+ (segment (start 111.125 134.62) (end 112.395 133.35) (width 0.4318) (layer Composant) (net 66))
+ (via (at 112.395 83.82) (size 1.397) (layers Composant Cuivre) (net 66))
+ (segment (start 112.395 123.19) (end 113.665 121.92) (width 0.4318) (layer Composant) (net 66))
+ (segment (start 103.505 130.81) (end 103.505 124.46) (width 0.4318) (layer Composant) (net 67) (status 400))
+ (segment (start 142.875 85.09) (end 132.969 85.09) (width 0.4318) (layer Cuivre) (net 67) (status 800))
+ (segment (start 113.665 130.81) (end 103.505 130.81) (width 0.4318) (layer Cuivre) (net 67))
+ (segment (start 102.235 85.09) (end 102.235 123.19) (width 0.4318) (layer Composant) (net 67))
+ (via (at 113.665 130.81) (size 1.397) (layers Composant Cuivre) (net 67))
+ (segment (start 102.235 123.19) (end 103.505 124.46) (width 0.4318) (layer Composant) (net 67) (status 400))
+ (segment (start 132.969 85.09) (end 102.235 85.09) (width 0.4318) (layer Cuivre) (net 67))
+ (segment (start 113.665 138.43) (end 113.665 130.81) (width 0.4318) (layer Composant) (net 67) (status 800))
+ (via (at 102.235 85.09) (size 1.397) (layers Composant Cuivre) (net 67))
+ (via (at 103.505 130.81) (size 1.397) (layers Composant Cuivre) (net 67))
+ (via (at 154.305 132.08) (size 1.397) (layers Composant Cuivre) (net 68))
+ (segment (start 158.115 128.27) (end 158.115 97.79) (width 0.4318) (layer Composant) (net 68) (status 400))
+ (segment (start 108.585 132.08) (end 108.585 124.46) (width 0.4318) (layer Composant) (net 68) (status 400))
+ (segment (start 154.305 132.08) (end 158.115 128.27) (width 0.4318) (layer Composant) (net 68))
+ (segment (start 116.205 132.08) (end 108.585 132.08) (width 0.4318) (layer Cuivre) (net 68))
+ (via (at 108.585 132.08) (size 1.397) (layers Composant Cuivre) (net 68))
+ (segment (start 116.205 138.43) (end 116.205 132.08) (width 0.4318) (layer Composant) (net 68) (status 800))
+ (via (at 116.205 132.08) (size 1.397) (layers Composant Cuivre) (net 68))
+ (segment (start 116.205 132.08) (end 154.305 132.08) (width 0.4318) (layer Cuivre) (net 68))
+ (segment (start 113.665 128.27) (end 144.145 128.27) (width 0.4318) (layer Cuivre) (net 69))
+ (segment (start 95.885 124.46) (end 99.06 127.635) (width 0.4318) (layer Cuivre) (net 69) (status 800))
+ (segment (start 163.195 128.27) (end 163.195 121.92) (width 0.4318) (layer Composant) (net 69))
+ (segment (start 163.195 121.92) (end 165.735 119.38) (width 0.4318) (layer Composant) (net 69))
+ (segment (start 144.145 128.27) (end 163.195 128.27) (width 0.4318) (layer Cuivre) (net 69))
+ (segment (start 99.06 127.635) (end 113.03 127.635) (width 0.4318) (layer Cuivre) (net 69))
+ (via (at 144.145 128.27) (size 1.397) (layers Composant Cuivre) (net 69))
+ (segment (start 165.735 119.38) (end 165.735 97.79) (width 0.4318) (layer Composant) (net 69) (status 400))
+ (segment (start 144.145 128.27) (end 144.145 138.43) (width 0.4318) (layer Composant) (net 69) (status 400))
+ (via (at 163.195 128.27) (size 1.397) (layers Composant Cuivre) (net 69))
+ (segment (start 113.03 127.635) (end 113.665 128.27) (width 0.4318) (layer Cuivre) (net 69))
+ (segment (start 149.225 132.08) (end 154.305 127) (width 0.4318) (layer Composant) (net 70))
+ (segment (start 149.225 138.43) (end 149.225 132.08) (width 0.4318) (layer Composant) (net 70) (status 800))
+ (segment (start 154.305 127) (end 154.305 124.46) (width 0.4318) (layer Composant) (net 70) (status 400))
+ (segment (start 151.765 138.43) (end 151.765 132.08) (width 0.4318) (layer Composant) (net 71) (status 800))
+ (segment (start 151.765 132.08) (end 156.845 127) (width 0.4318) (layer Composant) (net 71))
+ (segment (start 156.845 127) (end 156.845 124.46) (width 0.4318) (layer Composant) (net 71) (status 400))
+ (segment (start 154.305 134.62) (end 159.385 129.54) (width 0.4318) (layer Composant) (net 72))
+ (segment (start 159.385 129.54) (end 159.385 124.46) (width 0.4318) (layer Composant) (net 72) (status 400))
+ (segment (start 154.305 138.43) (end 154.305 134.62) (width 0.4318) (layer Composant) (net 72) (status 800))
+ (segment (start 156.845 138.43) (end 156.845 134.62) (width 0.4318) (layer Composant) (net 73) (status 800))
+ (segment (start 161.925 129.54) (end 161.925 124.46) (width 0.4318) (layer Composant) (net 73) (status 400))
+ (segment (start 156.845 134.62) (end 161.925 129.54) (width 0.4318) (layer Composant) (net 73))
+ (segment (start 164.465 128.905) (end 164.465 124.46) (width 0.4318) (layer Composant) (net 74) (status 400))
+ (segment (start 159.385 133.985) (end 164.465 128.905) (width 0.4318) (layer Composant) (net 74))
+ (segment (start 159.385 138.43) (end 159.385 133.985) (width 0.4318) (layer Composant) (net 74) (status 800))
+ (segment (start 167.005 128.27) (end 167.005 124.46) (width 0.4318) (layer Composant) (net 75) (status 400))
+ (segment (start 161.925 133.35) (end 167.005 128.27) (width 0.4318) (layer Composant) (net 75))
+ (segment (start 161.925 138.43) (end 161.925 133.35) (width 0.4318) (layer Composant) (net 75) (status 800))
+ (segment (start 169.545 124.46) (end 169.545 127) (width 0.4318) (layer Composant) (net 76) (status 800))
+ (segment (start 169.545 127) (end 164.465 132.08) (width 0.4318) (layer Composant) (net 76))
+ (segment (start 164.465 132.08) (end 164.465 138.43) (width 0.4318) (layer Composant) (net 76) (status 400))
+ (segment (start 168.275 133.35) (end 170.815 133.35) (width 0.4318) (layer Composant) (net 77))
+ (segment (start 167.005 138.43) (end 167.005 134.62) (width 0.4318) (layer Composant) (net 77) (status 800))
+ (segment (start 167.005 134.62) (end 168.275 133.35) (width 0.4318) (layer Composant) (net 77))
+ (segment (start 170.815 133.35) (end 172.085 132.08) (width 0.4318) (layer Composant) (net 77))
+ (segment (start 172.085 132.08) (end 172.085 124.46) (width 0.4318) (layer Composant) (net 77) (status 400))
+ (via (at 136.525 133.35) (size 1.397) (layers Composant Cuivre) (net 78))
+ (segment (start 139.065 130.81) (end 139.065 124.46) (width 0.4318) (layer Composant) (net 78) (status 400))
+ (segment (start 136.525 133.35) (end 139.065 130.81) (width 0.4318) (layer Composant) (net 78))
+ (segment (start 136.525 138.43) (end 136.525 133.35) (width 0.4318) (layer Cuivre) (net 78) (status 800))
+ (segment (start 139.065 138.43) (end 139.065 133.35) (width 0.4318) (layer Cuivre) (net 79) (status 800))
+ (segment (start 140.335 132.08) (end 140.335 123.19) (width 0.4318) (layer Composant) (net 79))
+ (segment (start 137.795 123.19) (end 136.525 124.46) (width 0.4318) (layer Composant) (net 79) (status 400))
+ (via (at 139.065 133.35) (size 1.397) (layers Composant Cuivre) (net 79))
+ (segment (start 139.065 133.35) (end 140.335 132.08) (width 0.4318) (layer Composant) (net 79))
+ (segment (start 140.335 123.19) (end 137.795 123.19) (width 0.4318) (layer Composant) (net 79))
+ (segment (start 149.225 105.41) (end 150.495 104.14) (width 0.4318) (layer Cuivre) (net 80) (status 800))
+ (segment (start 153.035 104.14) (end 154.305 105.41) (width 0.4318) (layer Cuivre) (net 80))
+ (segment (start 154.305 105.41) (end 161.925 105.41) (width 0.4318) (layer Cuivre) (net 80))
+ (segment (start 142.875 110.49) (end 142.875 115.57) (width 0.4318) (layer Composant) (net 80))
+ (via (at 142.875 110.49) (size 1.397) (layers Composant Cuivre) (net 80))
+ (segment (start 161.925 105.41) (end 161.925 96.52) (width 0.4318) (layer Composant) (net 80))
+ (via (at 149.225 110.49) (size 1.397) (layers Composant Cuivre) (net 80))
+ (segment (start 142.875 115.57) (end 141.605 116.84) (width 0.4318) (layer Composant) (net 80) (status 400))
+ (segment (start 149.225 105.41) (end 149.225 110.49) (width 0.4318) (layer Composant) (net 80) (status 800))
+ (segment (start 149.225 110.49) (end 142.875 110.49) (width 0.4318) (layer Cuivre) (net 80))
+ (via (at 161.925 105.41) (size 1.397) (layers Composant Cuivre) (net 80))
+ (segment (start 161.925 96.52) (end 160.655 95.25) (width 0.4318) (layer Composant) (net 80) (status 400))
+ (segment (start 150.495 104.14) (end 153.035 104.14) (width 0.4318) (layer Cuivre) (net 80))
+ (segment (start 165.735 127) (end 145.415 127) (width 0.4318) (layer Cuivre) (net 81))
+ (segment (start 167.005 128.27) (end 165.735 127) (width 0.4318) (layer Cuivre) (net 81))
+ (segment (start 144.145 124.46) (end 141.605 124.46) (width 0.4318) (layer Cuivre) (net 81) (status C00))
+ (segment (start 144.145 125.73) (end 144.145 124.46) (width 0.4318) (layer Cuivre) (net 81) (status 400))
+ (segment (start 167.005 138.43) (end 167.005 128.27) (width 0.4318) (layer Cuivre) (net 81) (status 800))
+ (segment (start 145.415 127) (end 144.145 125.73) (width 0.4318) (layer Cuivre) (net 81))
+ (segment (start 139.3825 114.3) (end 155.575 114.3) (width 0.4318) (layer Cuivre) (net 82))
+ (segment (start 139.065 116.84) (end 139.065 113.03) (width 0.4318) (layer Composant) (net 82) (status C00))
+ (segment (start 139.3825 114.3) (end 139.065 113.9825) (width 0.4318) (layer Cuivre) (net 82))
+ (segment (start 155.575 114.3) (end 155.575 97.79) (width 0.4318) (layer Composant) (net 82) (status 400))
+ (via (at 155.575 114.3) (size 1.397) (layers Composant Cuivre) (net 82))
+ (segment (start 139.065 113.9825) (end 139.065 113.03) (width 0.4318) (layer Cuivre) (net 82) (status 400))
+ (segment (start 179.705 100.33) (end 182.245 102.743) (width 0.4318) (layer Cuivre) (net 83) (status 400))
+ (segment (start 179.705 99.06) (end 179.705 100.33) (width 0.4318) (layer Cuivre) (net 83))
+ (segment (start 173.355 92.71) (end 179.705 99.06) (width 0.4318) (layer Cuivre) (net 83) (status 800))
+ (segment (start 149.86 103.505) (end 150.495 102.87) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 150.495 102.87) (end 153.67 102.87) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 136.525 105.41) (end 136.525 104.14) (width 0.4318) (layer Cuivre) (net 84) (status 800))
+ (segment (start 172.085 103.1875) (end 172.085 95.5675) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 154.305 103.505) (end 171.7675 103.505) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 136.525 104.14) (end 137.16 103.505) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 137.16 103.505) (end 149.86 103.505) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 171.7675 95.25) (end 170.815 95.25) (width 0.4318) (layer Cuivre) (net 84) (status 400))
+ (segment (start 172.085 95.5675) (end 171.7675 95.25) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 171.7675 103.505) (end 172.085 103.1875) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 153.67 102.87) (end 154.305 103.505) (width 0.4318) (layer Cuivre) (net 84))
+ (segment (start 116.205 113.03) (end 116.205 107.95) (width 0.4318) (layer Composant) (net 85) (status C00))
+ (segment (start 116.205 116.84) (end 116.205 113.03) (width 0.4318) (layer Composant) (net 85) (status C00))
+ (segment (start 114.935 114.3) (end 114.935 119.38) (width 0.4318) (layer Composant) (net 86))
+ (segment (start 113.665 113.03) (end 114.935 114.3) (width 0.4318) (layer Composant) (net 86) (status 800))
+ (segment (start 113.665 113.03) (end 113.665 107.95) (width 0.4318) (layer Composant) (net 86) (status C00))
+ (segment (start 116.205 120.65) (end 116.205 124.46) (width 0.4318) (layer Composant) (net 86) (status 400))
+ (segment (start 114.935 119.38) (end 116.205 120.65) (width 0.4318) (layer Composant) (net 86))
+ (segment (start 100.965 113.03) (end 100.965 116.84) (width 0.4318) (layer Composant) (net 87) (status C00))
+ (segment (start 100.965 107.95) (end 100.965 113.03) (width 0.4318) (layer Composant) (net 87) (status C00))
+ (segment (start 99.695 119.38) (end 100.965 120.65) (width 0.4318) (layer Composant) (net 88))
+ (segment (start 98.425 113.03) (end 98.425 107.95) (width 0.4318) (layer Composant) (net 88) (status C00))
+ (segment (start 100.965 120.65) (end 100.965 124.46) (width 0.4318) (layer Composant) (net 88) (status 400))
+ (segment (start 98.425 113.03) (end 99.695 114.3) (width 0.4318) (layer Composant) (net 88) (status 800))
+ (segment (start 99.695 114.3) (end 99.695 119.38) (width 0.4318) (layer Composant) (net 88))
+ (segment (start 106.045 113.03) (end 106.045 107.95) (width 0.4318) (layer Composant) (net 89) (status C00))
+ (segment (start 106.045 116.84) (end 106.045 113.03) (width 0.4318) (layer Composant) (net 89) (status C00))
+ (segment (start 111.125 113.03) (end 111.125 107.95) (width 0.4318) (layer Composant) (net 90) (status C00))
+ (segment (start 111.125 116.84) (end 111.125 113.03) (width 0.4318) (layer Composant) (net 90) (status C00))
+ (segment (start 106.045 120.65) (end 106.045 124.46) (width 0.4318) (layer Composant) (net 91) (status 400))
+ (segment (start 103.505 113.03) (end 104.775 114.3) (width 0.4318) (layer Composant) (net 91) (status 800))
+ (segment (start 104.775 119.38) (end 106.045 120.65) (width 0.4318) (layer Composant) (net 91))
+ (segment (start 103.505 113.03) (end 103.505 107.95) (width 0.4318) (layer Composant) (net 91) (status C00))
+ (segment (start 104.775 114.3) (end 104.775 119.38) (width 0.4318) (layer Composant) (net 91))
+ (segment (start 109.855 119.38) (end 111.125 120.65) (width 0.4318) (layer Composant) (net 92))
+ (segment (start 108.585 113.03) (end 108.585 107.95) (width 0.4318) (layer Composant) (net 92) (status C00))
+ (segment (start 109.855 114.3) (end 109.855 119.38) (width 0.4318) (layer Composant) (net 92))
+ (segment (start 111.125 120.65) (end 111.125 124.46) (width 0.4318) (layer Composant) (net 92) (status 400))
+ (segment (start 108.585 113.03) (end 109.855 114.3) (width 0.4318) (layer Composant) (net 92) (status 800))
+ (segment (start 147.955 115.57) (end 145.415 115.57) (width 0.4318) (layer Composant) (net 93))
+ (segment (start 149.225 114.3) (end 147.955 115.57) (width 0.4318) (layer Composant) (net 93))
+ (segment (start 149.225 113.03) (end 149.225 114.3) (width 0.4318) (layer Composant) (net 93) (status 800))
+ (segment (start 145.415 115.57) (end 144.145 116.84) (width 0.4318) (layer Composant) (net 93) (status 400))
+ (segment (start 139.3825 93.98) (end 145.0975 93.98) (width 0.4318) (layer Composant) (net 94))
+ (segment (start 139.065 94.2975) (end 139.3825 93.98) (width 0.4318) (layer Composant) (net 94))
+ (segment (start 145.0975 93.98) (end 145.415 93.6625) (width 0.4318) (layer Composant) (net 94))
+ (segment (start 139.065 105.41) (end 139.065 94.2975) (width 0.4318) (layer Composant) (net 94) (status 800))
+ (segment (start 145.415 93.6625) (end 145.415 92.71) (width 0.4318) (layer Composant) (net 94) (status 400))
+ (segment (start 173.355 97.79) (end 174.625 97.79) (width 0.4318) (layer Cuivre) (net 95) (status 800))
+ (segment (start 182.245 105.41) (end 182.245 105.537) (width 0.4318) (layer Cuivre) (net 95) (status 400))
+ (segment (start 174.625 97.79) (end 182.245 105.41) (width 0.4318) (layer Cuivre) (net 95))
+ (segment (start 169.545 76.835) (end 170.18 76.2) (width 0.4318) (layer Cuivre) (net 96))
+ (segment (start 169.545 78.74) (end 169.545 76.835) (width 0.4318) (layer Cuivre) (net 96))
+ (segment (start 170.18 76.2) (end 178.435 76.2) (width 0.4318) (layer Cuivre) (net 96))
+ (segment (start 168.275 80.01) (end 169.545 78.74) (width 0.4318) (layer Cuivre) (net 96) (status 800))
+ (segment (start 184.785 81.915) (end 184.785 82.042) (width 0.4318) (layer Composant) (net 96) (status 400))
+ (segment (start 179.07 81.915) (end 184.785 81.915) (width 0.4318) (layer Composant) (net 96))
+ (segment (start 178.435 76.2) (end 178.435 81.28) (width 0.4318) (layer Composant) (net 96))
+ (segment (start 178.435 81.28) (end 179.07 81.915) (width 0.4318) (layer Composant) (net 96))
+ (via (at 178.435 76.2) (size 1.397) (layers Composant Cuivre) (net 96))
+ (segment (start 178.435 68.58) (end 182.245 72.39) (width 0.4318) (layer Cuivre) (net 97) (status 400))
+ (segment (start 170.815 67.31) (end 172.085 68.58) (width 0.4318) (layer Cuivre) (net 97) (status 800))
+ (segment (start 172.085 68.58) (end 178.435 68.58) (width 0.4318) (layer Cuivre) (net 97))
+ (segment (start 160.655 44.45) (end 94.615 44.45) (width 0.4318) (layer Cuivre) (net 98))
+ (segment (start 161.925 45.72) (end 160.655 44.45) (width 0.4318) (layer Cuivre) (net 98))
+ (segment (start 94.615 60.96) (end 94.615 44.45) (width 0.4318) (layer Composant) (net 98) (status 800))
+ (segment (start 173.355 67.31) (end 173.355 45.72) (width 0.4318) (layer Composant) (net 98) (status 800))
+ (via (at 173.355 45.72) (size 1.397) (layers Composant Cuivre) (net 98))
+ (segment (start 173.355 45.72) (end 161.925 45.72) (width 0.4318) (layer Cuivre) (net 98))
+ (via (at 94.615 44.45) (size 1.397) (layers Composant Cuivre) (net 98))
+ (segment (start 151.765 106.3625) (end 151.765 105.41) (width 0.4318) (layer Cuivre) (net 99) (status 400))
+ (segment (start 146.685 105.41) (end 146.685 106.3625) (width 0.4318) (layer Cuivre) (net 99) (status 800))
+ (segment (start 146.685 106.3625) (end 147.0025 106.68) (width 0.4318) (layer Cuivre) (net 99))
+ (segment (start 151.4475 106.68) (end 151.765 106.3625) (width 0.4318) (layer Cuivre) (net 99))
+ (segment (start 147.0025 106.68) (end 151.4475 106.68) (width 0.4318) (layer Cuivre) (net 99))
+ (segment (start 155.575 38.1) (end 155.575 36.635) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 160.655 38.1) (end 165.735 38.1) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 160.08 37.525) (end 160.655 38.1) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FBD))
+ (segment (start 160.08 36.54) (end 160.08 37.525) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FBA))
+ (segment (start 159.55 36.01) (end 160.08 36.54) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAE))
+ (segment (start 156.2 36.01) (end 159.55 36.01) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAC))
+ (segment (start 155.575 36.635) (end 156.2 36.01) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAA))
+ (segment (start 184.785 104.14) (end 184.785 101.346) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 184.785 101.346) (end 184.785 98.6028) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 184.785 98.6028) (end 184.785 95.9104) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 156.845 71.12) (end 158.115 69.85) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 121.285 105.41) (end 121.285 110.49) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 145.415 121.92) (end 126.365 121.92) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 123.825 99.06) (end 123.825 91.44) (width 0.5588) (layer Composant) (net 100) (status C00))
+ (segment (start 112.395 88.9) (end 111.125 88.9) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 125.095 74.93) (end 123.825 73.66) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 159.385 71.12) (end 164.465 71.12) (width 0.5588) (layer Cuivre) (net 100))
+ (via (at 121.285 105.41) (size 1.524) (layers Composant Cuivre) (net 100))
+ (segment (start 146.685 124.46) (end 146.685 123.19) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 88.265 132.08) (end 86.995 130.81) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 93.345 138.43) (end 92.075 137.16) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 92.075 137.16) (end 92.075 133.35) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 92.075 133.35) (end 90.805 132.08) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 86.995 130.81) (end 86.995 128.27) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 90.805 132.08) (end 88.265 132.08) (width 0.5588) (layer Cuivre) (net 100))
+ (via (at 158.115 90.17) (size 1.524) (layers Composant Cuivre) (net 100))
+ (segment (start 164.465 71.12) (end 165.735 72.39) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 146.685 123.19) (end 145.415 121.92) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 150.495 72.39) (end 151.765 71.12) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 98.425 83.82) (end 98.425 88.9) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 121.285 88.9) (end 123.825 91.44) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 112.395 88.9) (end 121.285 88.9) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 167.005 81.28) (end 168.275 82.55) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 106.045 105.41) (end 108.585 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 184.785 87.5792) (end 184.785 84.7852) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 184.785 95.9104) (end 184.785 93.0656) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 184.785 93.0656) (end 184.785 90.3224) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 184.785 90.3224) (end 184.785 87.5792) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 145.415 82.55) (end 146.685 83.82) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 123.825 113.03) (end 123.825 114.3) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 125.095 76.2) (end 125.095 78.74) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 85.09 108.585) (end 85.09 126.365) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 98.425 92.71) (end 98.425 88.9) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 125.095 76.2) (end 125.095 74.93) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 121.285 110.49) (end 123.825 113.03) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 123.825 123.19) (end 126.365 120.65) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 126.365 120.65) (end 126.365 116.84) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 165.735 72.39) (end 167.005 73.66) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 123.825 114.3) (end 126.365 116.84) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 174.625 130.81) (end 173.355 132.08) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 170.815 132.08) (end 169.545 133.35) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 169.545 133.35) (end 169.545 138.43) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 173.355 132.08) (end 170.815 132.08) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 174.625 124.46) (end 174.625 130.81) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 168.275 90.17) (end 167.005 88.9) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 123.825 73.66) (end 123.825 52.07) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 106.045 105.41) (end 103.505 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 100.965 105.41) (end 98.425 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 113.665 105.41) (end 116.205 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 147.955 90.17) (end 158.115 90.17) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 158.115 69.85) (end 159.385 71.12) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 158.115 69.85) (end 156.845 68.58) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 123.825 102.87) (end 121.285 105.41) (width 0.5588) (layer Composant) (net 100))
+ (via (at 123.825 52.07) (size 1.524) (layers Composant Cuivre) (net 100))
+ (segment (start 123.825 52.07) (end 155.575 52.07) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 174.625 123.825) (end 174.625 124.46) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 172.72 121.92) (end 174.625 123.825) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 146.685 124.46) (end 149.225 121.92) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 123.825 124.46) (end 123.825 123.19) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 126.365 121.92) (end 123.825 124.46) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (via (at 98.425 92.71) (size 1.524) (layers Composant Cuivre) (net 100))
+ (segment (start 149.225 121.92) (end 172.72 121.92) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 154.305 43.18) (end 155.575 44.45) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 154.305 39.37) (end 154.305 43.18) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 155.575 38.1) (end 154.305 39.37) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 155.575 44.45) (end 155.575 52.07) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 98.425 105.41) (end 88.265 105.41) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 88.265 105.41) (end 85.09 108.585) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 167.005 83.82) (end 168.275 82.55) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 123.825 99.06) (end 123.825 102.87) (width 0.5588) (layer Composant) (net 100) (status 800))
+ (segment (start 158.115 90.17) (end 168.275 90.17) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 125.095 78.74) (end 123.825 80.01) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 111.125 105.41) (end 108.585 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 146.685 83.82) (end 146.685 88.9) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 85.09 126.365) (end 86.995 128.27) (width 0.5588) (layer Cuivre) (net 100) (status 400))
+ (segment (start 167.005 73.66) (end 167.005 81.28) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 151.765 71.12) (end 156.845 71.12) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 156.845 68.58) (end 156.845 53.34) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 116.205 105.41) (end 121.285 105.41) (width 0.5588) (layer Cuivre) (net 100) (status 800))
+ (segment (start 111.125 88.9) (end 107.315 92.71) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 123.825 80.01) (end 123.825 91.44) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 158.115 90.17) (end 158.115 92.71) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 107.315 92.71) (end 98.425 92.71) (width 0.5588) (layer Cuivre) (net 100))
+ (segment (start 146.685 88.9) (end 147.955 90.17) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 156.845 53.34) (end 155.575 52.07) (width 0.5588) (layer Composant) (net 100) (status 400))
+ (segment (start 111.125 105.41) (end 113.665 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 118.745 124.46) (end 123.825 124.46) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 100.965 105.41) (end 103.505 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
+ (segment (start 167.005 88.9) (end 167.005 83.82) (width 0.5588) (layer Composant) (net 100))
+ (segment (start 84.455 57.15) (end 86.995 59.69) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 170.815 119.38) (end 170.815 128.27) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 86.995 113.03) (end 86.995 91.44) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 159.385 115.2525) (end 159.385 111.76) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 165.735 74.93) (end 168.275 74.93) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 154.305 119.38) (end 170.815 119.38) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 95.885 119.38) (end 97.155 120.65) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 169.545 76.2) (end 169.545 81.28) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 172.085 53.975) (end 170.815 52.705) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 151.765 116.84) (end 151.765 115.8875) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 126.365 105.41) (end 123.825 105.41) (width 0.5588) (layer Cuivre) (net 101) (status C00))
+ (segment (start 164.465 134.62) (end 164.465 138.43) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 151.765 116.84) (end 154.305 119.38) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 151.765 116.84) (end 150.495 118.11) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 159.385 93.98) (end 158.115 95.25) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (via (at 165.735 74.93) (size 1.143) (layers Composant Cuivre) (net 101))
+ (segment (start 168.275 74.93) (end 169.545 76.2) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 127.635 109.22) (end 126.365 107.95) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 95.885 113.03) (end 86.995 113.03) (width 0.5588) (layer Cuivre) (net 101) (status C00))
+ (segment (start 159.385 111.76) (end 159.385 96.52) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 169.545 81.28) (end 170.815 82.55) (width 0.5588) (layer Composant) (net 101) (status 400))
+ (segment (start 127.635 118.11) (end 125.095 118.11) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 126.365 107.95) (end 126.365 105.41) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 150.495 118.11) (end 127.635 118.11) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 95.885 116.84) (end 95.885 113.03) (width 0.5588) (layer Composant) (net 101) (status C00))
+ (segment (start 83.185 87.63) (end 86.995 91.44) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 170.815 69.85) (end 172.085 68.58) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 159.385 96.52) (end 158.115 95.25) (width 0.5588) (layer Composant) (net 101) (status 400))
+ (segment (start 98.425 127) (end 98.425 132.08) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 83.185 83.82) (end 83.185 87.63) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 125.095 118.11) (end 123.825 116.84) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 151.765 115.8875) (end 152.0825 115.57) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 168.275 69.85) (end 170.815 69.85) (width 0.5588) (layer Cuivre) (net 101) (status C00))
+ (segment (start 165.735 92.71) (end 165.735 74.93) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 167.005 73.66) (end 168.275 72.39) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 156.845 93.98) (end 158.115 95.25) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 159.0675 115.57) (end 159.385 115.2525) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 170.815 52.705) (end 170.815 52.07) (width 0.5588) (layer Composant) (net 101) (status 400))
+ (via (at 165.735 133.35) (size 1.524) (layers Composant Cuivre) (net 101))
+ (segment (start 164.465 93.98) (end 159.385 93.98) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 165.735 133.35) (end 164.465 134.62) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 168.275 72.39) (end 168.275 69.85) (width 0.5588) (layer Composant) (net 101) (status C00))
+ (segment (start 165.735 92.71) (end 164.465 93.98) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 83.185 64.77) (end 83.185 83.82) (width 0.5588) (layer Composant) (net 101) (status 400))
+ (segment (start 95.885 116.84) (end 95.885 119.38) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 172.085 68.58) (end 172.085 53.975) (width 0.5588) (layer Composant) (net 101))
+ (via (at 98.425 132.08) (size 1.524) (layers Composant Cuivre) (net 101))
+ (segment (start 170.815 128.27) (end 165.735 133.35) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 97.155 125.73) (end 98.425 127) (width 0.5588) (layer Composant) (net 101))
+ (segment (start 168.275 74.93) (end 168.275 72.39) (width 0.5588) (layer Composant) (net 101) (status C00))
+ (segment (start 123.825 116.84) (end 122.555 118.11) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 98.425 132.08) (end 98.425 138.43) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 147.955 72.39) (end 149.225 73.66) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 97.155 120.65) (end 97.155 125.73) (width 0.5588) (layer Composant) (net 101))
+ (via (at 170.815 119.38) (size 1.524) (layers Composant Cuivre) (net 101))
+ (segment (start 149.225 73.66) (end 167.005 73.66) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 122.555 118.11) (end 97.155 118.11) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 152.0825 115.57) (end 159.0675 115.57) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 149.225 93.98) (end 156.845 93.98) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 147.955 92.71) (end 149.225 93.98) (width 0.5588) (layer Cuivre) (net 101) (status 800))
+ (segment (start 127.635 118.11) (end 127.635 109.22) (width 0.5588) (layer Cuivre) (net 101))
+ (segment (start 97.155 118.11) (end 95.885 116.84) (width 0.5588) (layer Cuivre) (net 101) (status 400))
+ (segment (start 86.995 59.69) (end 86.995 60.96) (width 0.5588) (layer Composant) (net 101) (status 400))
+ (segment (start 86.995 60.96) (end 83.185 64.77) (width 0.5588) (layer Composant) (net 101) (status 800))
+ (segment (start 123.19 93.345) (end 133.35 93.345) (width 0.4318) (layer Cuivre) (net 102))
+ (segment (start 121.285 91.44) (end 117.475 91.44) (width 0.4318) (layer Cuivre) (net 102) (status C00))
+ (segment (start 121.285 91.44) (end 123.19 93.345) (width 0.4318) (layer Cuivre) (net 102) (status 800))
+ (segment (start 114.935 91.44) (end 113.665 92.71) (width 0.4318) (layer Cuivre) (net 102) (status 400))
+ (segment (start 133.35 93.345) (end 133.985 92.71) (width 0.4318) (layer Cuivre) (net 102))
+ (segment (start 133.985 92.71) (end 142.875 92.71) (width 0.4318) (layer Cuivre) (net 102) (status 400))
+ (segment (start 117.475 91.44) (end 114.935 91.44) (width 0.4318) (layer Cuivre) (net 102) (status 800))
+ (segment (start 121.285 99.06) (end 122.555 97.79) (width 0.4318) (layer Cuivre) (net 103) (status 800))
+ (segment (start 117.475 99.06) (end 114.935 99.06) (width 0.4318) (layer Cuivre) (net 103) (status 800))
+ (segment (start 121.285 99.06) (end 117.475 99.06) (width 0.4318) (layer Cuivre) (net 103) (status C00))
+ (segment (start 126.365 97.79) (end 127.635 99.06) (width 0.4318) (layer Cuivre) (net 103) (status 400))
+ (segment (start 114.935 99.06) (end 113.665 97.79) (width 0.4318) (layer Cuivre) (net 103) (status 400))
+ (segment (start 122.555 97.79) (end 126.365 97.79) (width 0.4318) (layer Cuivre) (net 103))
+ (segment (start 155.575 41.91) (end 158.115 39.37) (width 0.4318) (layer Composant) (net 104) (status 800))
+ (segment (start 158.115 39.37) (end 158.115 38.1) (width 0.4318) (layer Composant) (net 104) (status 400))
+ (segment (start 168.275 41.91) (end 168.275 38.1) (width 0.4318) (layer Composant) (net 105) (status C00))
+ (segment (start 92.075 57.15) (end 92.075 60.96) (width 0.4318) (layer Cuivre) (net 106) (status C00))
+ (segment (start 136.525 116.84) (end 136.525 113.03) (width 0.4318) (layer Composant) (net 107) (status C00))
+ (segment (start 133.985 116.84) (end 133.985 113.03) (width 0.4318) (layer Composant) (net 108) (status C00))
+ (segment (start 131.445 116.84) (end 131.445 113.03) (width 0.4318) (layer Composant) (net 109) (status C00))
+ (segment (start 128.905 116.84) (end 128.905 113.03) (width 0.4318) (layer Composant) (net 110) (status C00))
+
+ (zone (net 100) (net_name GND) (layer Cuivre) (tstamp 4CDEC22B) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 193.675 133.35) (xy 193.675 35.56) (xy 80.645 35.56) (xy 80.645 133.35)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 82.941886 39.0398) (xy 85.968115 39.0398) (xy 85.968115 37.847398) (xy 153.978812 37.847398) (xy 154.003648 38.477461)
+ (xy 154.196981 38.944208) (xy 154.45865 39.036745) (xy 155.395395 38.1) (xy 154.45865 37.163255) (xy 154.196981 37.255792)
+ (xy 153.978812 37.847398) (xy 85.968115 37.847398) (xy 85.968115 36.98365) (xy 154.638255 36.98365) (xy 155.575 37.920395)
+ (xy 155.589143 37.906253) (xy 155.768748 38.085858) (xy 155.754605 38.1) (xy 155.768748 38.114143) (xy 155.589143 38.293748)
+ (xy 155.575 38.279605) (xy 154.638255 39.21635) (xy 154.730792 39.478019) (xy 155.322398 39.696188) (xy 155.952461 39.671352)
+ (xy 156.419208 39.478019) (xy 156.511744 39.216352) (xy 156.545875 39.250483) (xy 156.561838 39.335317) (xy 156.70091 39.551441)
+ (xy 156.91311 39.696431) (xy 157.165 39.74744) (xy 159.065 39.74744) (xy 159.300317 39.703162) (xy 159.516441 39.56409)
+ (xy 159.661431 39.35189) (xy 159.71244 39.1) (xy 159.71244 37.847398) (xy 164.138812 37.847398) (xy 164.163648 38.477461)
+ (xy 164.356981 38.944208) (xy 164.61865 39.036745) (xy 165.555395 38.1) (xy 164.61865 37.163255) (xy 164.356981 37.255792)
+ (xy 164.138812 37.847398) (xy 159.71244 37.847398) (xy 159.71244 37.1) (xy 159.690548 36.98365) (xy 164.798255 36.98365)
+ (xy 165.735 37.920395) (xy 165.749143 37.906253) (xy 165.928748 38.085858) (xy 165.914605 38.1) (xy 165.928748 38.114143)
+ (xy 165.749143 38.293748) (xy 165.735 38.279605) (xy 164.798255 39.21635) (xy 164.890792 39.478019) (xy 165.482398 39.696188)
+ (xy 166.112461 39.671352) (xy 166.579208 39.478019) (xy 166.671744 39.216352) (xy 166.705875 39.250483) (xy 166.721838 39.335317)
+ (xy 166.86091 39.551441) (xy 167.07311 39.696431) (xy 167.325 39.74744) (xy 169.225 39.74744) (xy 169.460317 39.703162)
+ (xy 169.676441 39.56409) (xy 169.821431 39.35189) (xy 169.87244 39.1) (xy 169.87244 37.1) (xy 169.828162 36.864683)
+ (xy 169.68909 36.648559) (xy 169.47689 36.503569) (xy 169.225 36.45256) (xy 167.325 36.45256) (xy 167.089683 36.496838)
+ (xy 166.873559 36.63591) (xy 166.728569 36.84811) (xy 166.708582 36.94681) (xy 166.671744 36.983648) (xy 166.579208 36.721981)
+ (xy 165.987602 36.503812) (xy 165.357539 36.528648) (xy 164.890792 36.721981) (xy 164.798255 36.98365) (xy 159.690548 36.98365)
+ (xy 159.668162 36.864683) (xy 159.52909 36.648559) (xy 159.31689 36.503569) (xy 159.065 36.45256) (xy 157.165 36.45256)
+ (xy 156.929683 36.496838) (xy 156.713559 36.63591) (xy 156.568569 36.84811) (xy 156.548582 36.94681) (xy 156.511744 36.983648)
+ (xy 156.419208 36.721981) (xy 155.827602 36.503812) (xy 155.197539 36.528648) (xy 154.730792 36.721981) (xy 154.638255 36.98365)
+ (xy 85.968115 36.98365) (xy 85.968115 35.687) (xy 172.964928 35.687) (xy 172.964928 40.3479) (xy 178.825072 40.3479)
+ (xy 178.825072 39.707457) (xy 186.0804 39.707457) (xy 186.0804 51.732542) (xy 190.8048 51.732542) (xy 190.8048 39.707457)
+ (xy 186.0804 39.707457) (xy 178.825072 39.707457) (xy 178.825072 35.687) (xy 193.548 35.687) (xy 193.548 132.6515)
+ (xy 172.085 132.6515) (xy 171.817696 132.70467) (xy 171.591086 132.856086) (xy 171.43967 133.082696) (xy 171.411762 133.223)
+ (xy 167.8559 133.223) (xy 167.8559 128.27) (xy 167.794362 127.960626) (xy 167.791129 127.944374) (xy 167.606677 127.668323)
+ (xy 166.336677 126.398323) (xy 166.060626 126.213871) (xy 165.735 126.1491) (xy 150.494867 126.1491) (xy 150.558268 125.996413)
+ (xy 150.558665 125.541959) (xy 150.60241 125.609941) (xy 150.81461 125.754931) (xy 151.0665 125.80594) (xy 152.4635 125.80594)
+ (xy 152.698817 125.761662) (xy 152.914941 125.62259) (xy 153.059931 125.41039) (xy 153.11094 125.1585) (xy 153.11094 125.062116)
+ (xy 153.173854 125.21438) (xy 153.548647 125.589827) (xy 154.038587 125.793268) (xy 154.569086 125.793731) (xy 155.05938 125.591146)
+ (xy 155.434827 125.216353) (xy 155.575094 124.878554) (xy 155.713854 125.21438) (xy 156.088647 125.589827) (xy 156.578587 125.793268)
+ (xy 157.109086 125.793731) (xy 157.59938 125.591146) (xy 157.974827 125.216353) (xy 158.115094 124.878554) (xy 158.253854 125.21438)
+ (xy 158.628647 125.589827) (xy 159.118587 125.793268) (xy 159.649086 125.793731) (xy 160.13938 125.591146) (xy 160.514827 125.216353)
+ (xy 160.655094 124.878554) (xy 160.793854 125.21438) (xy 161.168647 125.589827) (xy 161.658587 125.793268) (xy 162.189086 125.793731)
+ (xy 162.67938 125.591146) (xy 163.054827 125.216353) (xy 163.195094 124.878554) (xy 163.333854 125.21438) (xy 163.708647 125.589827)
+ (xy 164.198587 125.793268) (xy 164.729086 125.793731) (xy 165.21938 125.591146) (xy 165.594827 125.216353) (xy 165.735094 124.878554)
+ (xy 165.873854 125.21438) (xy 166.248647 125.589827) (xy 166.738587 125.793268) (xy 167.269086 125.793731) (xy 167.75938 125.591146)
+ (xy 168.134827 125.216353) (xy 168.275094 124.878554) (xy 168.413854 125.21438) (xy 168.788647 125.589827) (xy 169.278587 125.793268)
+ (xy 169.809086 125.793731) (xy 170.29938 125.591146) (xy 170.674827 125.216353) (xy 170.815094 124.878554) (xy 170.953854 125.21438)
+ (xy 171.328647 125.589827) (xy 171.818587 125.793268) (xy 172.349086 125.793731) (xy 172.83938 125.591146) (xy 173.036681 125.394188)
+ (xy 173.870417 125.394188) (xy 173.932071 125.6298) (xy 174.43248 125.805927) (xy 174.962199 125.777148) (xy 175.317929 125.6298)
+ (xy 175.379583 125.394188) (xy 174.625 124.639605) (xy 173.870417 125.394188) (xy 173.036681 125.394188) (xy 173.214827 125.216353)
+ (xy 173.348314 124.894882) (xy 173.4552 125.152929) (xy 173.690812 125.214583) (xy 174.445395 124.46) (xy 174.804605 124.46)
+ (xy 175.559188 125.214583) (xy 175.7948 125.152929) (xy 175.970927 124.65252) (xy 175.942148 124.122801) (xy 175.7948 123.767071)
+ (xy 175.559188 123.705417) (xy 174.804605 124.46) (xy 174.445395 124.46) (xy 173.690812 123.705417) (xy 173.4552 123.767071)
+ (xy 173.356917 124.046312) (xy 173.216146 123.70562) (xy 173.036652 123.525812) (xy 173.870417 123.525812) (xy 174.625 124.280395)
+ (xy 175.379583 123.525812) (xy 175.317929 123.2902) (xy 174.81752 123.114073) (xy 174.287801 123.142852) (xy 173.932071 123.2902)
+ (xy 173.870417 123.525812) (xy 173.036652 123.525812) (xy 172.841353 123.330173) (xy 172.351413 123.126732) (xy 171.820914 123.126269)
+ (xy 171.33062 123.328854) (xy 170.955173 123.703647) (xy 170.814906 124.041446) (xy 170.676146 123.70562) (xy 170.301353 123.330173)
+ (xy 169.811413 123.126732) (xy 169.280914 123.126269) (xy 168.79062 123.328854) (xy 168.415173 123.703647) (xy 168.274906 124.041446)
+ (xy 168.136146 123.70562) (xy 167.761353 123.330173) (xy 167.271413 123.126732) (xy 166.740914 123.126269) (xy 166.25062 123.328854)
+ (xy 165.875173 123.703647) (xy 165.734906 124.041446) (xy 165.596146 123.70562) (xy 165.221353 123.330173) (xy 164.731413 123.126732)
+ (xy 164.200914 123.126269) (xy 163.71062 123.328854) (xy 163.335173 123.703647) (xy 163.194906 124.041446) (xy 163.056146 123.70562)
+ (xy 162.681353 123.330173) (xy 162.191413 123.126732) (xy 161.660914 123.126269) (xy 161.17062 123.328854) (xy 160.795173 123.703647)
+ (xy 160.654906 124.041446) (xy 160.516146 123.70562) (xy 160.141353 123.330173) (xy 159.651413 123.126732) (xy 159.120914 123.126269)
+ (xy 158.63062 123.328854) (xy 158.255173 123.703647) (xy 158.114906 124.041446) (xy 157.976146 123.70562) (xy 157.601353 123.330173)
+ (xy 157.111413 123.126732) (xy 156.580914 123.126269) (xy 156.09062 123.328854) (xy 155.715173 123.703647) (xy 155.574906 124.041446)
+ (xy 155.436146 123.70562) (xy 155.061353 123.330173) (xy 154.571413 123.126732) (xy 154.040914 123.126269) (xy 153.55062 123.328854)
+ (xy 153.175173 123.703647) (xy 153.11094 123.858337) (xy 153.11094 123.7615) (xy 153.066662 123.526183) (xy 152.92759 123.310059)
+ (xy 152.71539 123.165069) (xy 152.4635 123.11406) (xy 151.0665 123.11406) (xy 150.831183 123.158338) (xy 150.615059 123.29741)
+ (xy 150.470069 123.50961) (xy 150.41906 123.7615) (xy 150.41906 125.127884) (xy 150.356146 124.97562) (xy 149.981353 124.600173)
+ (xy 149.491413 124.396732) (xy 148.960914 124.396269) (xy 148.47062 124.598854) (xy 148.189885 124.8791) (xy 147.951179 124.8791)
+ (xy 148.030927 124.65252) (xy 148.002148 124.122801) (xy 147.8548 123.767071) (xy 147.619188 123.705417) (xy 146.864605 124.46)
+ (xy 146.878748 124.474143) (xy 146.699143 124.653748) (xy 146.685 124.639605) (xy 146.670858 124.653748) (xy 146.491253 124.474143)
+ (xy 146.505395 124.46) (xy 146.491253 124.445858) (xy 146.670858 124.266253) (xy 146.685 124.280395) (xy 147.439583 123.525812)
+ (xy 147.377929 123.2902) (xy 146.87752 123.114073) (xy 146.347801 123.142852) (xy 146.26347 123.177783) (xy 146.201129 122.864375)
+ (xy 146.016677 122.588323) (xy 145.740625 122.403871) (xy 145.415 122.3391) (xy 130.175 122.3391) (xy 129.849374 122.403871)
+ (xy 129.573323 122.588323) (xy 129.035033 123.126613) (xy 128.640914 123.126269) (xy 128.15062 123.328854) (xy 127.775173 123.703647)
+ (xy 127.634906 124.041446) (xy 127.496146 123.70562) (xy 127.121353 123.330173) (xy 126.631413 123.126732) (xy 126.100914 123.126269)
+ (xy 125.61062 123.328854) (xy 125.235173 123.703647) (xy 125.1585 123.888296) (xy 125.1585 123.63519) (xy 125.061827 123.401801)
+ (xy 124.883198 123.223173) (xy 124.649809 123.1265) (xy 124.11075 123.1265) (xy 123.952 123.28525) (xy 123.952 124.333)
+ (xy 123.972 124.333) (xy 123.972 124.587) (xy 123.952 124.587) (xy 123.952 125.63475) (xy 124.11075 125.7935)
+ (xy 124.649809 125.7935) (xy 124.883198 125.696827) (xy 125.061827 125.518199) (xy 125.1585 125.28481) (xy 125.1585 125.032009)
+ (xy 125.233854 125.21438) (xy 125.608647 125.589827) (xy 126.098587 125.793268) (xy 126.629086 125.793731) (xy 127.11938 125.591146)
+ (xy 127.494827 125.216353) (xy 127.635094 124.878554) (xy 127.773854 125.21438) (xy 128.148647 125.589827) (xy 128.638587 125.793268)
+ (xy 129.169086 125.793731) (xy 129.65938 125.591146) (xy 130.034827 125.216353) (xy 130.175094 124.878554) (xy 130.313854 125.21438)
+ (xy 130.535367 125.436279) (xy 129.822546 126.1491) (xy 122.554867 126.1491) (xy 122.618268 125.996413) (xy 122.618659 125.548685)
+ (xy 122.766802 125.696827) (xy 123.000191 125.7935) (xy 123.53925 125.7935) (xy 123.698 125.63475) (xy 123.698 124.587)
+ (xy 122.65025 124.587) (xy 122.4915 124.74575) (xy 122.4915 125.157991) (xy 122.416146 124.97562) (xy 122.041353 124.600173)
+ (xy 121.551413 124.396732) (xy 121.020914 124.396269) (xy 120.53062 124.598854) (xy 120.249885 124.8791) (xy 120.011179 124.8791)
+ (xy 120.090927 124.65252) (xy 120.062148 124.122801) (xy 119.9148 123.767071) (xy 119.679188 123.705417) (xy 118.924605 124.46)
+ (xy 118.938748 124.474143) (xy 118.759143 124.653748) (xy 118.745 124.639605) (xy 118.730858 124.653748) (xy 118.551253 124.474143)
+ (xy 118.565395 124.46) (xy 117.810812 123.705417) (xy 117.5752 123.767071) (xy 117.476917 124.046312) (xy 117.336146 123.70562)
+ (xy 117.156652 123.525812) (xy 117.990417 123.525812) (xy 118.745 124.280395) (xy 119.390205 123.63519) (xy 122.4915 123.63519)
+ (xy 122.4915 124.17425) (xy 122.65025 124.333) (xy 123.698 124.333) (xy 123.698 123.28525) (xy 123.53925 123.1265)
+ (xy 123.000191 123.1265) (xy 122.766802 123.223173) (xy 122.588173 123.401801) (xy 122.4915 123.63519) (xy 119.390205 123.63519)
+ (xy 119.499583 123.525812) (xy 119.437929 123.2902) (xy 118.93752 123.114073) (xy 118.407801 123.142852) (xy 118.052071 123.2902)
+ (xy 117.990417 123.525812) (xy 117.156652 123.525812) (xy 116.961353 123.330173) (xy 116.471413 123.126732) (xy 115.940914 123.126269)
+ (xy 115.45062 123.328854) (xy 115.075173 123.703647) (xy 114.934906 124.041446) (xy 114.796146 123.70562) (xy 114.421353 123.330173)
+ (xy 113.931413 123.126732) (xy 113.400914 123.126269) (xy 113.2459 123.190319) (xy 113.2459 123.19) (xy 113.181129 122.864375)
+ (xy 113.181129 122.864374) (xy 112.996677 122.588323) (xy 111.909254 121.5009) (xy 127.870206 121.5009) (xy 128.148647 121.779827)
+ (xy 128.638587 121.983268) (xy 129.169086 121.983731) (xy 129.65938 121.781146) (xy 130.034827 121.406353) (xy 130.238268 120.916413)
+ (xy 130.238731 120.385914) (xy 130.174681 120.2309) (xy 139.065133 120.2309) (xy 139.001732 120.383587) (xy 139.001269 120.914086)
+ (xy 139.203854 121.40438) (xy 139.578647 121.779827) (xy 140.068587 121.983268) (xy 140.599086 121.983731) (xy 141.08938 121.781146)
+ (xy 141.370115 121.5009) (xy 148.190206 121.5009) (xy 148.468647 121.779827) (xy 148.958587 121.983268) (xy 149.489086 121.983731)
+ (xy 149.97938 121.781146) (xy 150.354827 121.406353) (xy 150.558268 120.916413) (xy 150.558731 120.385914) (xy 150.494681 120.2309)
+ (xy 150.730206 120.2309) (xy 151.008647 120.509827) (xy 151.498587 120.713268) (xy 152.029086 120.713731) (xy 152.51938 120.511146)
+ (xy 152.894827 120.136353) (xy 153.098268 119.646413) (xy 153.098425 119.466582) (xy 153.658421 120.026578) (xy 153.955074 120.224795)
+ (xy 154.305 120.2944) (xy 169.753871 120.2944) (xy 170.02263 120.563629) (xy 170.5359 120.776757) (xy 171.091661 120.777242)
+ (xy 171.605303 120.56501) (xy 171.998629 120.17237) (xy 172.211757 119.6591) (xy 172.212242 119.103339) (xy 172.00001 118.589697)
+ (xy 171.60737 118.196371) (xy 171.0941 117.983243) (xy 170.538339 117.982758) (xy 170.024697 118.19499) (xy 169.753614 118.4656)
+ (xy 154.683757 118.4656) (xy 154.391733 118.173576) (xy 154.569086 118.173731) (xy 155.05938 117.971146) (xy 155.434827 117.596353)
+ (xy 155.575094 117.258554) (xy 155.713854 117.59438) (xy 156.088647 117.969827) (xy 156.578587 118.173268) (xy 157.109086 118.173731)
+ (xy 157.59938 117.971146) (xy 157.974827 117.596353) (xy 158.115094 117.258554) (xy 158.253854 117.59438) (xy 158.628647 117.969827)
+ (xy 159.118587 118.173268) (xy 159.649086 118.173731) (xy 160.13938 117.971146) (xy 160.514827 117.596353) (xy 160.655094 117.258554)
+ (xy 160.793854 117.59438) (xy 161.168647 117.969827) (xy 161.658587 118.173268) (xy 162.189086 118.173731) (xy 162.67938 117.971146)
+ (xy 163.054827 117.596353) (xy 163.195094 117.258554) (xy 163.333854 117.59438) (xy 163.708647 117.969827) (xy 164.198587 118.173268)
+ (xy 164.729086 118.173731) (xy 165.21938 117.971146) (xy 165.594827 117.596353) (xy 165.735094 117.258554) (xy 165.873854 117.59438)
+ (xy 166.248647 117.969827) (xy 166.738587 118.173268) (xy 167.269086 118.173731) (xy 167.75938 117.971146) (xy 168.134827 117.596353)
+ (xy 168.275094 117.258554) (xy 168.413854 117.59438) (xy 168.788647 117.969827) (xy 169.278587 118.173268) (xy 169.809086 118.173731)
+ (xy 170.29938 117.971146) (xy 170.674827 117.596353) (xy 170.815094 117.258554) (xy 170.953854 117.59438) (xy 171.328647 117.969827)
+ (xy 171.818587 118.173268) (xy 172.349086 118.173731) (xy 172.83938 117.971146) (xy 173.214827 117.596353) (xy 173.355094 117.258554)
+ (xy 173.493854 117.59438) (xy 173.868647 117.969827) (xy 174.358587 118.173268) (xy 174.889086 118.173731) (xy 175.37938 117.971146)
+ (xy 175.754827 117.596353) (xy 175.958268 117.106413) (xy 175.958731 116.575914) (xy 175.756146 116.08562) (xy 175.381353 115.710173)
+ (xy 174.891413 115.506732) (xy 174.360914 115.506269) (xy 173.87062 115.708854) (xy 173.495173 116.083647) (xy 173.354906 116.421446)
+ (xy 173.216146 116.08562) (xy 172.841353 115.710173) (xy 172.351413 115.506732) (xy 171.820914 115.506269) (xy 171.33062 115.708854)
+ (xy 170.955173 116.083647) (xy 170.814906 116.421446) (xy 170.676146 116.08562) (xy 170.301353 115.710173) (xy 169.811413 115.506732)
+ (xy 169.280914 115.506269) (xy 168.79062 115.708854) (xy 168.415173 116.083647) (xy 168.274906 116.421446) (xy 168.136146 116.08562)
+ (xy 167.761353 115.710173) (xy 167.271413 115.506732) (xy 166.740914 115.506269) (xy 166.25062 115.708854) (xy 165.875173 116.083647)
+ (xy 165.734906 116.421446) (xy 165.596146 116.08562) (xy 165.221353 115.710173) (xy 164.731413 115.506732) (xy 164.200914 115.506269)
+ (xy 163.71062 115.708854) (xy 163.335173 116.083647) (xy 163.194906 116.421446) (xy 163.056146 116.08562) (xy 162.681353 115.710173)
+ (xy 162.191413 115.506732) (xy 161.660914 115.506269) (xy 161.17062 115.708854) (xy 160.795173 116.083647) (xy 160.654906 116.421446)
+ (xy 160.516146 116.08562) (xy 160.151206 115.720043) (xy 160.158682 115.708854) (xy 160.229795 115.602426) (xy 160.2994 115.2525)
+ (xy 160.2994 113.065316) (xy 160.318817 113.061662) (xy 160.534941 112.92259) (xy 160.679931 112.71039) (xy 160.683211 112.694188)
+ (xy 173.870417 112.694188) (xy 173.932071 112.9298) (xy 174.43248 113.105927) (xy 174.962199 113.077148) (xy 175.317929 112.9298)
+ (xy 175.326244 112.898021) (xy 182.24456 112.898021) (xy 182.630437 113.831915) (xy 183.344327 114.547052) (xy 184.277546 114.934559)
+ (xy 185.288021 114.93544) (xy 186.221915 114.549563) (xy 186.937052 113.835673) (xy 187.324559 112.902454) (xy 187.32544 111.891979)
+ (xy 186.939563 110.958085) (xy 186.225673 110.242948) (xy 185.292454 109.855441) (xy 184.281979 109.85456) (xy 183.348085 110.240437)
+ (xy 182.632948 110.954327) (xy 182.245441 111.887546) (xy 182.24456 112.898021) (xy 175.326244 112.898021) (xy 175.379583 112.694188)
+ (xy 174.625 111.939605) (xy 173.870417 112.694188) (xy 160.683211 112.694188) (xy 160.73094 112.4585) (xy 160.73094 111.56748)
+ (xy 173.279073 111.56748) (xy 173.307852 112.097199) (xy 173.4552 112.452929) (xy 173.690812 112.514583) (xy 174.445395 111.76)
+ (xy 174.804605 111.76) (xy 175.559188 112.514583) (xy 175.7948 112.452929) (xy 175.970927 111.95252) (xy 175.942148 111.422801)
+ (xy 175.7948 111.067071) (xy 175.559188 111.005417) (xy 174.804605 111.76) (xy 174.445395 111.76) (xy 173.690812 111.005417)
+ (xy 173.4552 111.067071) (xy 173.279073 111.56748) (xy 160.73094 111.56748) (xy 160.73094 111.0615) (xy 160.686662 110.826183)
+ (xy 160.686424 110.825812) (xy 173.870417 110.825812) (xy 174.625 111.580395) (xy 175.379583 110.825812) (xy 175.317929 110.5902)
+ (xy 174.81752 110.414073) (xy 174.287801 110.442852) (xy 173.932071 110.5902) (xy 173.870417 110.825812) (xy 160.686424 110.825812)
+ (xy 160.54759 110.610059) (xy 160.33539 110.465069) (xy 160.0835 110.41406) (xy 158.6865 110.41406) (xy 158.451183 110.458338)
+ (xy 158.235059 110.59741) (xy 158.090069 110.80961) (xy 158.03906 111.0615) (xy 158.03906 112.4585) (xy 158.083338 112.693817)
+ (xy 158.22241 112.909941) (xy 158.43461 113.054931) (xy 158.4706 113.062219) (xy 158.4706 114.6556) (xy 156.871234 114.6556)
+ (xy 156.908268 114.566413) (xy 156.908731 114.035914) (xy 156.706146 113.54562) (xy 156.331353 113.170173) (xy 155.841413 112.966732)
+ (xy 155.310914 112.966269) (xy 154.82062 113.168854) (xy 154.539885 113.4491) (xy 153.031179 113.4491) (xy 153.110927 113.22252)
+ (xy 153.082148 112.692801) (xy 152.9348 112.337071) (xy 152.699188 112.275417) (xy 151.944605 113.03) (xy 151.958748 113.044143)
+ (xy 151.779143 113.223748) (xy 151.765 113.209605) (xy 151.750858 113.223748) (xy 151.571253 113.044143) (xy 151.585395 113.03)
+ (xy 150.830812 112.275417) (xy 150.5952 112.337071) (xy 150.496917 112.616312) (xy 150.356146 112.27562) (xy 150.176652 112.095812)
+ (xy 151.010417 112.095812) (xy 151.765 112.850395) (xy 152.519583 112.095812) (xy 152.457929 111.8602) (xy 151.95752 111.684073)
+ (xy 151.427801 111.712852) (xy 151.072071 111.8602) (xy 151.010417 112.095812) (xy 150.176652 112.095812) (xy 149.981353 111.900173)
+ (xy 149.643554 111.759906) (xy 149.97938 111.621146) (xy 150.354827 111.246353) (xy 150.558268 110.756413) (xy 150.558731 110.225914)
+ (xy 150.356146 109.73562) (xy 149.981353 109.360173) (xy 149.491413 109.156732) (xy 148.960914 109.156269) (xy 148.47062 109.358854)
+ (xy 148.189885 109.6391) (xy 143.909794 109.6391) (xy 143.631353 109.360173) (xy 143.141413 109.156732) (xy 142.610914 109.156269)
+ (xy 142.12062 109.358854) (xy 141.745173 109.733647) (xy 141.541732 110.223587) (xy 141.541269 110.754086) (xy 141.743854 111.24438)
+ (xy 142.118647 111.619827) (xy 142.608587 111.823268) (xy 143.139086 111.823731) (xy 143.62938 111.621146) (xy 143.910115 111.3409)
+ (xy 148.190206 111.3409) (xy 148.468647 111.619827) (xy 148.806446 111.760094) (xy 148.47062 111.898854) (xy 148.095173 112.273647)
+ (xy 147.954906 112.611446) (xy 147.816146 112.27562) (xy 147.441353 111.900173) (xy 146.951413 111.696732) (xy 146.420914 111.696269)
+ (xy 145.93062 111.898854) (xy 145.555173 112.273647) (xy 145.414906 112.611446) (xy 145.276146 112.27562) (xy 144.901353 111.900173)
+ (xy 144.411413 111.696732) (xy 143.880914 111.696269) (xy 143.39062 111.898854) (xy 143.015173 112.273647) (xy 142.874906 112.611446)
+ (xy 142.736146 112.27562) (xy 142.361353 111.900173) (xy 141.871413 111.696732) (xy 141.340914 111.696269) (xy 140.85062 111.898854)
+ (xy 140.475173 112.273647) (xy 140.334906 112.611446) (xy 140.196146 112.27562) (xy 139.821353 111.900173) (xy 139.331413 111.696732)
+ (xy 138.800914 111.696269) (xy 138.31062 111.898854) (xy 137.935173 112.273647) (xy 137.794906 112.611446) (xy 137.656146 112.27562)
+ (xy 137.281353 111.900173) (xy 136.791413 111.696732) (xy 136.260914 111.696269) (xy 135.77062 111.898854) (xy 135.395173 112.273647)
+ (xy 135.254906 112.611446) (xy 135.116146 112.27562) (xy 134.741353 111.900173) (xy 134.251413 111.696732) (xy 133.720914 111.696269)
+ (xy 133.23062 111.898854) (xy 132.855173 112.273647) (xy 132.714906 112.611446) (xy 132.576146 112.27562) (xy 132.201353 111.900173)
+ (xy 131.711413 111.696732) (xy 131.180914 111.696269) (xy 130.69062 111.898854) (xy 130.315173 112.273647) (xy 130.174906 112.611446)
+ (xy 130.036146 112.27562) (xy 129.661353 111.900173) (xy 129.171413 111.696732) (xy 128.640914 111.696269) (xy 128.5494 111.734082)
+ (xy 128.5494 109.246234) (xy 128.638587 109.283268) (xy 129.169086 109.283731) (xy 129.65938 109.081146) (xy 129.940115 108.8009)
+ (xy 153.270206 108.8009) (xy 153.548647 109.079827) (xy 154.038587 109.283268) (xy 154.569086 109.283731) (xy 155.05938 109.081146)
+ (xy 155.434827 108.706353) (xy 155.638268 108.216413) (xy 155.638731 107.685914) (xy 155.436146 107.19562) (xy 155.061353 106.820173)
+ (xy 154.571413 106.616732) (xy 154.040914 106.616269) (xy 153.55062 106.818854) (xy 153.269885 107.0991) (xy 152.231754 107.0991)
+ (xy 152.366677 106.964177) (xy 152.551129 106.688125) (xy 152.595475 106.465184) (xy 152.894827 106.166353) (xy 153.098268 105.676413)
+ (xy 153.098503 105.406857) (xy 153.703323 106.011677) (xy 153.979374 106.196129) (xy 154.305 106.2609) (xy 160.890206 106.2609)
+ (xy 161.168647 106.539827) (xy 161.658587 106.743268) (xy 162.189086 106.743731) (xy 162.67938 106.541146) (xy 163.054827 106.166353)
+ (xy 163.258268 105.676413) (xy 163.258731 105.145914) (xy 163.056146 104.65562) (xy 162.756948 104.3559) (xy 171.7675 104.3559)
+ (xy 172.093126 104.291129) (xy 172.369177 104.106677) (xy 172.686677 103.789177) (xy 172.871129 103.513125) (xy 172.9359 103.1875)
+ (xy 172.9359 99.059867) (xy 173.088587 99.123268) (xy 173.619086 99.123731) (xy 174.10938 98.921146) (xy 174.331279 98.699633)
+ (xy 180.860361 105.228715) (xy 180.848243 105.2579) (xy 180.847758 105.813661) (xy 181.05999 106.327303) (xy 181.45263 106.720629)
+ (xy 181.9659 106.933757) (xy 182.521661 106.934242) (xy 183.035303 106.72201) (xy 183.428629 106.32937) (xy 183.641757 105.8161)
+ (xy 183.642242 105.260339) (xy 183.584344 105.120213) (xy 183.984392 105.120213) (xy 184.053857 105.362397) (xy 184.577302 105.549144)
+ (xy 185.132368 105.521362) (xy 185.516143 105.362397) (xy 185.585608 105.120213) (xy 184.785 104.319605) (xy 183.984392 105.120213)
+ (xy 183.584344 105.120213) (xy 183.43001 104.746697) (xy 183.03737 104.353371) (xy 182.5241 104.140243) (xy 182.521664 104.140241)
+ (xy 183.024915 103.932302) (xy 183.375856 103.932302) (xy 183.403638 104.487368) (xy 183.562603 104.871143) (xy 183.804787 104.940608)
+ (xy 184.605395 104.14) (xy 184.964605 104.14) (xy 185.765213 104.940608) (xy 186.007397 104.871143) (xy 186.194144 104.347698)
+ (xy 186.166362 103.792632) (xy 186.007397 103.408857) (xy 185.765213 103.339392) (xy 184.964605 104.14) (xy 184.605395 104.14)
+ (xy 183.804787 103.339392) (xy 183.562603 103.408857) (xy 183.375856 103.932302) (xy 183.024915 103.932302) (xy 183.035303 103.92801)
+ (xy 183.428629 103.53537) (xy 183.641757 103.0221) (xy 183.642242 102.466339) (xy 183.584344 102.326213) (xy 183.984392 102.326213)
+ (xy 184.053857 102.568397) (xy 184.568707 102.752077) (xy 184.437632 102.758638) (xy 184.053857 102.917603) (xy 183.984392 103.159787)
+ (xy 184.785 103.960395) (xy 185.585608 103.159787) (xy 185.516143 102.917603) (xy 185.001293 102.733923) (xy 185.132368 102.727362)
+ (xy 185.516143 102.568397) (xy 185.585608 102.326213) (xy 184.785 101.525605) (xy 183.984392 102.326213) (xy 183.584344 102.326213)
+ (xy 183.43001 101.952697) (xy 183.03737 101.559371) (xy 182.5241 101.346243) (xy 182.521664 101.346241) (xy 183.024915 101.138302)
+ (xy 183.375856 101.138302) (xy 183.403638 101.693368) (xy 183.562603 102.077143) (xy 183.804787 102.146608) (xy 184.605395 101.346)
+ (xy 184.964605 101.346) (xy 185.765213 102.146608) (xy 186.007397 102.077143) (xy 186.194144 101.553698) (xy 186.166362 100.998632)
+ (xy 186.007397 100.614857) (xy 185.765213 100.545392) (xy 184.964605 101.346) (xy 184.605395 101.346) (xy 183.804787 100.545392)
+ (xy 183.562603 100.614857) (xy 183.375856 101.138302) (xy 183.024915 101.138302) (xy 183.035303 101.13401) (xy 183.428629 100.74137)
+ (xy 183.641757 100.2281) (xy 183.642242 99.672339) (xy 183.605334 99.583013) (xy 183.984392 99.583013) (xy 184.053857 99.825197)
+ (xy 184.443835 99.964328) (xy 184.437632 99.964638) (xy 184.053857 100.123603) (xy 183.984392 100.365787) (xy 184.785 101.166395)
+ (xy 185.585608 100.365787) (xy 185.516143 100.123603) (xy 185.126165 99.984472) (xy 185.132368 99.984162) (xy 185.516143 99.825197)
+ (xy 185.585608 99.583013) (xy 184.785 98.782405) (xy 183.984392 99.583013) (xy 183.605334 99.583013) (xy 183.43001 99.158697)
+ (xy 183.03737 98.765371) (xy 182.676185 98.615394) (xy 183.035303 98.46701) (xy 183.107336 98.395102) (xy 183.375856 98.395102)
+ (xy 183.403638 98.950168) (xy 183.562603 99.333943) (xy 183.804787 99.403408) (xy 184.605395 98.6028) (xy 184.964605 98.6028)
+ (xy 185.765213 99.403408) (xy 186.007397 99.333943) (xy 186.194144 98.810498) (xy 186.166362 98.255432) (xy 186.007397 97.871657)
+ (xy 185.765213 97.802192) (xy 184.964605 98.6028) (xy 184.605395 98.6028) (xy 183.804787 97.802192) (xy 183.562603 97.871657)
+ (xy 183.375856 98.395102) (xy 183.107336 98.395102) (xy 183.428629 98.07437) (xy 183.641757 97.5611) (xy 183.642242 97.005339)
+ (xy 183.594839 96.890613) (xy 183.984392 96.890613) (xy 184.053857 97.132797) (xy 184.375015 97.247375) (xy 184.053857 97.380403)
+ (xy 183.984392 97.622587) (xy 184.785 98.423195) (xy 185.585608 97.622587) (xy 185.516143 97.380403) (xy 185.194985 97.265825)
+ (xy 185.516143 97.132797) (xy 185.585608 96.890613) (xy 184.785 96.090005) (xy 183.984392 96.890613) (xy 183.594839 96.890613)
+ (xy 183.43001 96.491697) (xy 183.03737 96.098371) (xy 182.5241 95.885243) (xy 182.521664 95.885241) (xy 182.963442 95.702702)
+ (xy 183.375856 95.702702) (xy 183.403638 96.257768) (xy 183.562603 96.641543) (xy 183.804787 96.711008) (xy 184.605395 95.9104)
+ (xy 184.964605 95.9104) (xy 185.765213 96.711008) (xy 186.007397 96.641543) (xy 186.194144 96.118098) (xy 186.166362 95.563032)
+ (xy 186.007397 95.179257) (xy 185.765213 95.109792) (xy 184.964605 95.9104) (xy 184.605395 95.9104) (xy 183.804787 95.109792)
+ (xy 183.562603 95.179257) (xy 183.375856 95.702702) (xy 182.963442 95.702702) (xy 183.035303 95.67301) (xy 183.428629 95.28037)
+ (xy 183.574037 94.930187) (xy 183.984392 94.930187) (xy 184.785 95.730795) (xy 185.585608 94.930187) (xy 185.516143 94.688003)
+ (xy 184.992698 94.501256) (xy 184.437632 94.529038) (xy 184.053857 94.688003) (xy 183.984392 94.930187) (xy 183.574037 94.930187)
+ (xy 183.641757 94.7671) (xy 183.642242 94.211339) (xy 183.573849 94.045813) (xy 183.984392 94.045813) (xy 184.053857 94.287997)
+ (xy 184.577302 94.474744) (xy 185.132368 94.446962) (xy 185.516143 94.287997) (xy 185.585608 94.045813) (xy 184.785 93.245205)
+ (xy 183.984392 94.045813) (xy 183.573849 94.045813) (xy 183.43001 93.697697) (xy 183.03737 93.304371) (xy 182.5241 93.091243)
+ (xy 182.521664 93.091241) (xy 183.035303 92.87901) (xy 183.056447 92.857902) (xy 183.375856 92.857902) (xy 183.403638 93.412968)
+ (xy 183.562603 93.796743) (xy 183.804787 93.866208) (xy 184.605395 93.0656) (xy 184.964605 93.0656) (xy 185.765213 93.866208)
+ (xy 186.007397 93.796743) (xy 186.194144 93.273298) (xy 186.166362 92.718232) (xy 186.007397 92.334457) (xy 185.765213 92.264992)
+ (xy 184.964605 93.0656) (xy 184.605395 93.0656) (xy 183.804787 92.264992) (xy 183.562603 92.334457) (xy 183.375856 92.857902)
+ (xy 183.056447 92.857902) (xy 183.428629 92.48637) (xy 183.641757 91.9731) (xy 183.642242 91.417339) (xy 183.594839 91.302613)
+ (xy 183.984392 91.302613) (xy 184.053857 91.544797) (xy 184.443835 91.683928) (xy 184.437632 91.684238) (xy 184.053857 91.843203)
+ (xy 183.984392 92.085387) (xy 184.785 92.885995) (xy 185.585608 92.085387) (xy 185.516143 91.843203) (xy 185.126165 91.704072)
+ (xy 185.132368 91.703762) (xy 185.516143 91.544797) (xy 185.585608 91.302613) (xy 184.785 90.502005) (xy 183.984392 91.302613)
+ (xy 183.594839 91.302613) (xy 183.43001 90.903697) (xy 183.03737 90.510371) (xy 182.5241 90.297243) (xy 182.521664 90.297241)
+ (xy 182.963442 90.114702) (xy 183.375856 90.114702) (xy 183.403638 90.669768) (xy 183.562603 91.053543) (xy 183.804787 91.123008)
+ (xy 184.605395 90.3224) (xy 184.964605 90.3224) (xy 185.765213 91.123008) (xy 186.007397 91.053543) (xy 186.194144 90.530098)
+ (xy 186.166362 89.975032) (xy 186.007397 89.591257) (xy 185.765213 89.521792) (xy 184.964605 90.3224) (xy 184.605395 90.3224)
+ (xy 183.804787 89.521792) (xy 183.562603 89.591257) (xy 183.375856 90.114702) (xy 182.963442 90.114702) (xy 183.035303 90.08501)
+ (xy 183.428629 89.69237) (xy 183.641757 89.1791) (xy 183.642242 88.623339) (xy 183.615829 88.559413) (xy 183.984392 88.559413)
+ (xy 184.053857 88.801597) (xy 184.443835 88.940728) (xy 184.437632 88.941038) (xy 184.053857 89.100003) (xy 183.984392 89.342187)
+ (xy 184.785 90.142795) (xy 185.585608 89.342187) (xy 185.516143 89.100003) (xy 185.126165 88.960872) (xy 185.132368 88.960562)
+ (xy 185.516143 88.801597) (xy 185.585608 88.559413) (xy 184.785 87.758805) (xy 183.984392 88.559413) (xy 183.615829 88.559413)
+ (xy 183.43001 88.109697) (xy 183.03737 87.716371) (xy 182.676185 87.566394) (xy 183.035303 87.41801) (xy 183.081892 87.371502)
+ (xy 183.375856 87.371502) (xy 183.403638 87.926568) (xy 183.562603 88.310343) (xy 183.804787 88.379808) (xy 184.605395 87.5792)
+ (xy 184.964605 87.5792) (xy 185.765213 88.379808) (xy 186.007397 88.310343) (xy 186.194144 87.786898) (xy 186.166362 87.231832)
+ (xy 186.007397 86.848057) (xy 185.765213 86.778592) (xy 184.964605 87.5792) (xy 184.605395 87.5792) (xy 183.804787 86.778592)
+ (xy 183.562603 86.848057) (xy 183.375856 87.371502) (xy 183.081892 87.371502) (xy 183.428629 87.02537) (xy 183.641757 86.5121)
+ (xy 183.642242 85.956339) (xy 183.563354 85.765413) (xy 183.984392 85.765413) (xy 184.053857 86.007597) (xy 184.568707 86.191277)
+ (xy 184.437632 86.197838) (xy 184.053857 86.356803) (xy 183.984392 86.598987) (xy 184.785 87.399595) (xy 185.585608 86.598987)
+ (xy 185.516143 86.356803) (xy 185.001293 86.173123) (xy 185.132368 86.166562) (xy 185.516143 86.007597) (xy 185.585608 85.765413)
+ (xy 184.785 84.964805) (xy 183.984392 85.765413) (xy 183.563354 85.765413) (xy 183.43001 85.442697) (xy 183.03737 85.049371)
+ (xy 182.5241 84.836243) (xy 182.521664 84.836241) (xy 183.035303 84.62401) (xy 183.081892 84.577502) (xy 183.375856 84.577502)
+ (xy 183.403638 85.132568) (xy 183.562603 85.516343) (xy 183.804787 85.585808) (xy 184.605395 84.7852) (xy 184.964605 84.7852)
+ (xy 185.765213 85.585808) (xy 186.007397 85.516343) (xy 186.194144 84.992898) (xy 186.166362 84.437832) (xy 186.007397 84.054057)
+ (xy 185.765213 83.984592) (xy 184.964605 84.7852) (xy 184.605395 84.7852) (xy 183.804787 83.984592) (xy 183.562603 84.054057)
+ (xy 183.375856 84.577502) (xy 183.081892 84.577502) (xy 183.428629 84.23137) (xy 183.641757 83.7181) (xy 183.642242 83.162339)
+ (xy 183.43001 82.648697) (xy 183.03737 82.255371) (xy 182.5241 82.042243) (xy 182.521664 82.042241) (xy 183.035303 81.83001)
+ (xy 183.428629 81.43737) (xy 183.641757 80.9241) (xy 183.642242 80.368339) (xy 183.530912 80.0989) (xy 183.60977 80.0989)
+ (xy 183.99263 80.482429) (xy 184.445797 80.6706) (xy 183.994697 80.85699) (xy 183.601371 81.24963) (xy 183.388243 81.7629)
+ (xy 183.387758 82.318661) (xy 183.59999 82.832303) (xy 183.99263 83.225629) (xy 184.429709 83.40712) (xy 184.053857 83.562803)
+ (xy 183.984392 83.804987) (xy 184.785 84.605595) (xy 185.585608 83.804987) (xy 185.516143 83.562803) (xy 185.111771 83.418537)
+ (xy 185.575303 83.22701) (xy 185.968629 82.83437) (xy 186.181757 82.3211) (xy 186.182242 81.765339) (xy 185.97001 81.251697)
+ (xy 185.57737 80.858371) (xy 185.124203 80.6702) (xy 185.575303 80.48381) (xy 185.968629 80.09117) (xy 186.181757 79.5779)
+ (xy 186.182242 79.022139) (xy 185.97001 78.508497) (xy 185.57737 78.115171) (xy 185.0641 77.902043) (xy 185.061664 77.902041)
+ (xy 185.575303 77.68981) (xy 185.968629 77.29717) (xy 186.181757 76.7839) (xy 186.182242 76.228139) (xy 185.97001 75.714497)
+ (xy 185.57737 75.321171) (xy 185.369488 75.234851) (xy 185.575303 75.14981) (xy 185.968629 74.75717) (xy 186.181757 74.2439)
+ (xy 186.182242 73.688139) (xy 185.97001 73.174497) (xy 185.57737 72.781171) (xy 185.0641 72.568043) (xy 184.508339 72.567558)
+ (xy 183.994697 72.77979) (xy 183.838114 72.9361) (xy 183.65444 72.9361) (xy 183.65444 71.628) (xy 183.610162 71.392683)
+ (xy 183.47109 71.176559) (xy 183.25889 71.031569) (xy 183.007 70.98056) (xy 182.038914 70.98056) (xy 179.036677 67.978323)
+ (xy 178.760626 67.793871) (xy 178.435 67.7291) (xy 174.624867 67.7291) (xy 174.688268 67.576413) (xy 174.688731 67.045914)
+ (xy 174.486146 66.55562) (xy 174.111353 66.180173) (xy 173.621413 65.976732) (xy 173.090914 65.976269) (xy 172.60062 66.178854)
+ (xy 172.225173 66.553647) (xy 172.084906 66.891446) (xy 171.946146 66.55562) (xy 171.571353 66.180173) (xy 171.081413 65.976732)
+ (xy 170.550914 65.976269) (xy 170.06062 66.178854) (xy 169.685173 66.553647) (xy 169.544906 66.891446) (xy 169.406146 66.55562)
+ (xy 169.031353 66.180173) (xy 168.541413 65.976732) (xy 168.010914 65.976269) (xy 167.52062 66.178854) (xy 167.145173 66.553647)
+ (xy 167.004906 66.891446) (xy 166.866146 66.55562) (xy 166.491353 66.180173) (xy 166.001413 65.976732) (xy 165.470914 65.976269)
+ (xy 164.98062 66.178854) (xy 164.605173 66.553647) (xy 164.464906 66.891446) (xy 164.326146 66.55562) (xy 163.951353 66.180173)
+ (xy 163.461413 65.976732) (xy 162.930914 65.976269) (xy 162.44062 66.178854) (xy 162.065173 66.553647) (xy 161.924906 66.891446)
+ (xy 161.786146 66.55562) (xy 161.411353 66.180173) (xy 160.921413 65.976732) (xy 160.390914 65.976269) (xy 159.90062 66.178854)
+ (xy 159.525173 66.553647) (xy 159.384906 66.891446) (xy 159.246146 66.55562) (xy 158.871353 66.180173) (xy 158.381413 65.976732)
+ (xy 157.850914 65.976269) (xy 157.36062 66.178854) (xy 156.985173 66.553647) (xy 156.844906 66.891446) (xy 156.706146 66.55562)
+ (xy 156.331353 66.180173) (xy 155.841413 65.976732) (xy 155.310914 65.976269) (xy 154.82062 66.178854) (xy 154.445173 66.553647)
+ (xy 154.304906 66.891446) (xy 154.166146 66.55562) (xy 153.791353 66.180173) (xy 153.301413 65.976732) (xy 152.90474 65.976386)
+ (xy 152.549254 65.6209) (xy 165.970206 65.6209) (xy 166.248647 65.899827) (xy 166.738587 66.103268) (xy 167.269086 66.103731)
+ (xy 167.742741 65.908021) (xy 182.24456 65.908021) (xy 182.630437 66.841915) (xy 183.344327 67.557052) (xy 184.277546 67.944559)
+ (xy 185.288021 67.94544) (xy 186.221915 67.559563) (xy 186.937052 66.845673) (xy 187.324559 65.912454) (xy 187.32544 64.901979)
+ (xy 186.939563 63.968085) (xy 186.225673 63.252948) (xy 185.292454 62.865441) (xy 184.281979 62.86456) (xy 183.348085 63.250437)
+ (xy 182.632948 63.964327) (xy 182.245441 64.897546) (xy 182.24456 65.908021) (xy 167.742741 65.908021) (xy 167.75938 65.901146)
+ (xy 168.134827 65.526353) (xy 168.338268 65.036413) (xy 168.338731 64.505914) (xy 168.274681 64.3509) (xy 173.590206 64.3509)
+ (xy 173.868647 64.629827) (xy 174.358587 64.833268) (xy 174.889086 64.833731) (xy 175.37938 64.631146) (xy 175.754827 64.256353)
+ (xy 175.958268 63.766413) (xy 175.958731 63.235914) (xy 175.756146 62.74562) (xy 175.381353 62.370173) (xy 174.891413 62.166732)
+ (xy 174.360914 62.166269) (xy 173.87062 62.368854) (xy 173.589885 62.6491) (xy 151.764867 62.6491) (xy 151.828268 62.496413)
+ (xy 151.828731 61.965914) (xy 151.764681 61.8109) (xy 154.540206 61.8109) (xy 154.818647 62.089827) (xy 155.308587 62.293268)
+ (xy 155.839086 62.293731) (xy 156.32938 62.091146) (xy 156.704827 61.716353) (xy 156.908268 61.226413) (xy 156.908731 60.695914)
+ (xy 156.844681 60.5409) (xy 158.350206 60.5409) (xy 158.628647 60.819827) (xy 159.118587 61.023268) (xy 159.649086 61.023731)
+ (xy 160.13938 60.821146) (xy 160.514827 60.446353) (xy 160.718268 59.956413) (xy 160.718731 59.425914) (xy 160.654681 59.2709)
+ (xy 164.700206 59.2709) (xy 164.978647 59.549827) (xy 165.468587 59.753268) (xy 165.999086 59.753731) (xy 166.48938 59.551146)
+ (xy 166.864827 59.176353) (xy 167.068268 58.686413) (xy 167.068731 58.155914) (xy 167.004681 58.0009) (xy 167.240206 58.0009)
+ (xy 167.518647 58.279827) (xy 168.008587 58.483268) (xy 168.539086 58.483731) (xy 169.02938 58.281146) (xy 169.404827 57.906353)
+ (xy 169.608268 57.416413) (xy 169.608731 56.885914) (xy 169.406146 56.39562) (xy 169.031353 56.020173) (xy 168.541413 55.816732)
+ (xy 168.010914 55.816269) (xy 167.52062 56.018854) (xy 167.239885 56.2991) (xy 164.464867 56.2991) (xy 164.528268 56.146413)
+ (xy 164.528731 55.615914) (xy 164.326146 55.12562) (xy 163.951353 54.750173) (xy 163.461413 54.546732) (xy 162.930914 54.546269)
+ (xy 162.44062 54.748854) (xy 162.159885 55.0291) (xy 153.034867 55.0291) (xy 153.098268 54.876413) (xy 153.098731 54.345914)
+ (xy 152.896146 53.85562) (xy 152.521353 53.480173) (xy 152.031413 53.276732) (xy 151.500914 53.276269) (xy 151.01062 53.478854)
+ (xy 150.729885 53.7591) (xy 147.954867 53.7591) (xy 148.018268 53.606413) (xy 148.018731 53.075914) (xy 147.989095 53.004188)
+ (xy 154.820417 53.004188) (xy 154.882071 53.2398) (xy 155.38248 53.415927) (xy 155.912199 53.387148) (xy 156.267929 53.2398)
+ (xy 156.329583 53.004188) (xy 155.575 52.249605) (xy 154.820417 53.004188) (xy 147.989095 53.004188) (xy 147.816146 52.58562)
+ (xy 147.441353 52.210173) (xy 146.951413 52.006732) (xy 146.420914 52.006269) (xy 145.93062 52.208854) (xy 145.649885 52.4891)
+ (xy 96.919794 52.4891) (xy 96.641353 52.210173) (xy 96.151413 52.006732) (xy 95.620914 52.006269) (xy 95.13062 52.208854)
+ (xy 94.755173 52.583647) (xy 94.551732 53.073587) (xy 94.551269 53.604086) (xy 94.753854 54.09438) (xy 95.128647 54.469827)
+ (xy 95.618587 54.673268) (xy 96.149086 54.673731) (xy 96.63938 54.471146) (xy 96.920115 54.1909) (xy 120.015133 54.1909)
+ (xy 119.951732 54.343587) (xy 119.951269 54.874086) (xy 120.015319 55.0291) (xy 118.509794 55.0291) (xy 118.231353 54.750173)
+ (xy 117.741413 54.546732) (xy 117.210914 54.546269) (xy 116.72062 54.748854) (xy 116.345173 55.123647) (xy 116.141732 55.613587)
+ (xy 116.141269 56.144086) (xy 116.205319 56.2991) (xy 114.699794 56.2991) (xy 114.421353 56.020173) (xy 113.931413 55.816732)
+ (xy 113.400914 55.816269) (xy 112.91062 56.018854) (xy 112.535173 56.393647) (xy 112.331732 56.883587) (xy 112.331269 57.414086)
+ (xy 112.533854 57.90438) (xy 112.755367 58.126279) (xy 111.793323 59.088323) (xy 111.608871 59.364374) (xy 111.608871 59.364375)
+ (xy 111.5441 59.69) (xy 111.5441 59.925206) (xy 111.265173 60.203647) (xy 111.124906 60.541446) (xy 110.986146 60.20562)
+ (xy 110.611353 59.830173) (xy 110.121413 59.626732) (xy 109.590914 59.626269) (xy 109.10062 59.828854) (xy 108.725173 60.203647)
+ (xy 108.584906 60.541446) (xy 108.446146 60.20562) (xy 108.071353 59.830173) (xy 107.581413 59.626732) (xy 107.050914 59.626269)
+ (xy 106.56062 59.828854) (xy 106.185173 60.203647) (xy 106.044906 60.541446) (xy 105.906146 60.20562) (xy 105.531353 59.830173)
+ (xy 105.041413 59.626732) (xy 104.510914 59.626269) (xy 104.02062 59.828854) (xy 103.645173 60.203647) (xy 103.504906 60.541446)
+ (xy 103.366146 60.20562) (xy 102.991353 59.830173) (xy 102.501413 59.626732) (xy 101.970914 59.626269) (xy 101.48062 59.828854)
+ (xy 101.105173 60.203647) (xy 100.964906 60.541446) (xy 100.826146 60.20562) (xy 100.451353 59.830173) (xy 99.961413 59.626732)
+ (xy 99.430914 59.626269) (xy 98.94062 59.828854) (xy 98.565173 60.203647) (xy 98.424906 60.541446) (xy 98.286146 60.20562)
+ (xy 97.911353 59.830173) (xy 97.421413 59.626732) (xy 96.890914 59.626269) (xy 96.40062 59.828854) (xy 96.025173 60.203647)
+ (xy 95.884906 60.541446) (xy 95.746146 60.20562) (xy 95.371353 59.830173) (xy 94.881413 59.626732) (xy 94.350914 59.626269)
+ (xy 93.86062 59.828854) (xy 93.485173 60.203647) (xy 93.344906 60.541446) (xy 93.206146 60.20562) (xy 92.9259 59.924885)
+ (xy 92.9259 58.184794) (xy 93.204827 57.906353) (xy 93.408268 57.416413) (xy 93.408731 56.885914) (xy 93.206146 56.39562)
+ (xy 92.831353 56.020173) (xy 92.341413 55.816732) (xy 91.810914 55.816269) (xy 91.32062 56.018854) (xy 90.945173 56.393647)
+ (xy 90.741732 56.883587) (xy 90.741269 57.414086) (xy 90.943854 57.90438) (xy 91.2241 58.185115) (xy 91.2241 59.925206)
+ (xy 90.945173 60.203647) (xy 90.804906 60.541446) (xy 90.666146 60.20562) (xy 90.291353 59.830173) (xy 89.801413 59.626732)
+ (xy 89.270914 59.626269) (xy 88.78062 59.828854) (xy 88.405173 60.203647) (xy 88.264906 60.541446) (xy 88.126146 60.20562)
+ (xy 87.751353 59.830173) (xy 87.261413 59.626732) (xy 86.730914 59.626269) (xy 86.24062 59.828854) (xy 85.865173 60.203647)
+ (xy 85.661732 60.693587) (xy 85.661269 61.224086) (xy 85.863854 61.71438) (xy 86.238647 62.089827) (xy 86.728587 62.293268)
+ (xy 87.259086 62.293731) (xy 87.74938 62.091146) (xy 88.124827 61.716353) (xy 88.265094 61.378554) (xy 88.403854 61.71438)
+ (xy 88.6841 61.995115) (xy 88.6841 65.405) (xy 88.748871 65.730626) (xy 88.933323 66.006677) (xy 89.568323 66.641677)
+ (xy 89.844375 66.826129) (xy 90.17 66.8909) (xy 117.475133 66.8909) (xy 117.411732 67.043587) (xy 117.411269 67.574086)
+ (xy 117.475319 67.7291) (xy 112.159794 67.7291) (xy 111.881353 67.450173) (xy 111.391413 67.246732) (xy 110.860914 67.246269)
+ (xy 110.37062 67.448854) (xy 109.995173 67.823647) (xy 109.791732 68.313587) (xy 109.791269 68.844086) (xy 109.855319 68.9991)
+ (xy 106.397454 68.9991) (xy 106.108387 68.710033) (xy 106.108731 68.315914) (xy 105.906146 67.82562) (xy 105.531353 67.450173)
+ (xy 105.041413 67.246732) (xy 104.510914 67.246269) (xy 104.02062 67.448854) (xy 103.645173 67.823647) (xy 103.441732 68.313587)
+ (xy 103.441269 68.844086) (xy 103.643854 69.33438) (xy 104.018647 69.709827) (xy 104.508587 69.913268) (xy 104.90526 69.913614)
+ (xy 105.443323 70.451677) (xy 105.719374 70.636129) (xy 106.045 70.7009) (xy 114.935133 70.7009) (xy 114.871732 70.853587)
+ (xy 114.871269 71.384086) (xy 114.935319 71.5391) (xy 100.047454 71.5391) (xy 98.064575 69.556221) (xy 98.284827 69.336353)
+ (xy 98.488268 68.846413) (xy 98.488731 68.315914) (xy 98.286146 67.82562) (xy 97.911353 67.450173) (xy 97.421413 67.246732)
+ (xy 96.890914 67.246269) (xy 96.40062 67.448854) (xy 96.025173 67.823647) (xy 95.821732 68.313587) (xy 95.821269 68.844086)
+ (xy 96.023854 69.33438) (xy 96.3041 69.615115) (xy 96.3041 69.85) (xy 96.368871 70.175626) (xy 96.553323 70.451677)
+ (xy 99.093323 72.991677) (xy 99.369375 73.176129) (xy 99.695 73.2409) (xy 104.775133 73.2409) (xy 104.711732 73.393587)
+ (xy 104.711269 73.924086) (xy 104.775319 74.0791) (xy 93.345 74.0791) (xy 93.019374 74.143871) (xy 92.743323 74.328323)
+ (xy 92.205033 74.866613) (xy 91.810914 74.866269) (xy 91.32062 75.068854) (xy 90.945173 75.443647) (xy 90.804906 75.781446)
+ (xy 90.666146 75.44562) (xy 90.291353 75.070173) (xy 89.801413 74.866732) (xy 89.270914 74.866269) (xy 88.78062 75.068854)
+ (xy 88.405173 75.443647) (xy 88.34094 75.598337) (xy 88.34094 75.5015) (xy 88.296662 75.266183) (xy 88.15759 75.050059)
+ (xy 87.94539 74.905069) (xy 87.6935 74.85406) (xy 86.2965 74.85406) (xy 86.061183 74.898338) (xy 85.845059 75.03741)
+ (xy 85.700069 75.24961) (xy 85.64906 75.5015) (xy 85.64906 76.8985) (xy 85.693338 77.133817) (xy 85.83241 77.349941)
+ (xy 86.04461 77.494931) (xy 86.2965 77.54594) (xy 87.6935 77.54594) (xy 87.928817 77.501662) (xy 88.144941 77.36259)
+ (xy 88.289931 77.15039) (xy 88.34094 76.8985) (xy 88.34094 76.802116) (xy 88.403854 76.95438) (xy 88.778647 77.329827)
+ (xy 89.268587 77.533268) (xy 89.799086 77.533731) (xy 90.28938 77.331146) (xy 90.664827 76.956353) (xy 90.805094 76.618554)
+ (xy 90.943854 76.95438) (xy 91.318647 77.329827) (xy 91.808587 77.533268) (xy 92.339086 77.533731) (xy 92.82938 77.331146)
+ (xy 93.204827 76.956353) (xy 93.345094 76.618554) (xy 93.483854 76.95438) (xy 93.858647 77.329827) (xy 94.348587 77.533268)
+ (xy 94.74526 77.533614) (xy 99.093323 81.881677) (xy 99.369375 82.066129) (xy 99.695 82.1309) (xy 99.695133 82.1309)
+ (xy 99.631732 82.283587) (xy 99.631269 82.814086) (xy 99.833854 83.30438) (xy 100.208647 83.679827) (xy 100.698587 83.883268)
+ (xy 101.229086 83.883731) (xy 101.71938 83.681146) (xy 102.000115 83.4009) (xy 111.125133 83.4009) (xy 111.061732 83.553587)
+ (xy 111.061269 84.084086) (xy 111.125319 84.2391) (xy 103.269794 84.2391) (xy 102.991353 83.960173) (xy 102.501413 83.756732)
+ (xy 101.970914 83.756269) (xy 101.48062 83.958854) (xy 101.105173 84.333647) (xy 100.901732 84.823587) (xy 100.901269 85.354086)
+ (xy 101.103854 85.84438) (xy 101.478647 86.219827) (xy 101.968587 86.423268) (xy 102.499086 86.423731) (xy 102.98938 86.221146)
+ (xy 103.270115 85.9409) (xy 104.625746 85.9409) (xy 101.882546 88.6841) (xy 97.554794 88.6841) (xy 97.276353 88.405173)
+ (xy 96.786413 88.201732) (xy 96.255914 88.201269) (xy 95.76562 88.403854) (xy 95.390173 88.778647) (xy 95.186732 89.268587)
+ (xy 95.186269 89.799086) (xy 95.388854 90.28938) (xy 95.763647 90.664827) (xy 96.253587 90.868268) (xy 96.784086 90.868731)
+ (xy 97.27438 90.666146) (xy 97.555115 90.3859) (xy 102.235 90.3859) (xy 102.560626 90.321129) (xy 102.836677 90.136677)
+ (xy 105.762454 87.2109) (xy 106.045133 87.2109) (xy 105.981732 87.363587) (xy 105.981269 87.894086) (xy 106.183854 88.38438)
+ (xy 106.558647 88.759827) (xy 107.048587 88.963268) (xy 107.579086 88.963731) (xy 108.06938 88.761146) (xy 108.350115 88.4809)
+ (xy 141.840206 88.4809) (xy 142.118647 88.759827) (xy 142.456446 88.900094) (xy 142.12062 89.038854) (xy 141.839885 89.3191)
+ (xy 128.905 89.3191) (xy 128.579374 89.383871) (xy 128.303323 89.568323) (xy 127.765033 90.106613) (xy 127.370914 90.106269)
+ (xy 126.88062 90.308854) (xy 126.505173 90.683647) (xy 126.301732 91.173587) (xy 126.301269 91.704086) (xy 126.503854 92.19438)
+ (xy 126.803052 92.4941) (xy 124.486962 92.4941) (xy 124.52441 92.339016) (xy 123.805 91.619605) (xy 123.790858 91.633748)
+ (xy 123.611252 91.454142) (xy 123.625395 91.44) (xy 123.984605 91.44) (xy 124.704016 92.15941) (xy 124.934611 92.103729)
+ (xy 125.102622 91.620922) (xy 125.073083 91.110572) (xy 124.934611 90.776271) (xy 124.704016 90.72059) (xy 123.984605 91.44)
+ (xy 123.625395 91.44) (xy 122.905984 90.72059) (xy 122.675389 90.776271) (xy 122.60244 90.985902) (xy 122.60244 90.79)
+ (xy 122.558162 90.554683) (xy 122.549347 90.540984) (xy 123.08559 90.540984) (xy 123.805 91.260395) (xy 124.52441 90.540984)
+ (xy 124.468729 90.310389) (xy 123.985922 90.142378) (xy 123.475572 90.171917) (xy 123.141271 90.310389) (xy 123.08559 90.540984)
+ (xy 122.549347 90.540984) (xy 122.41909 90.338559) (xy 122.20689 90.193569) (xy 121.955 90.14256) (xy 120.655 90.14256)
+ (xy 120.419683 90.186838) (xy 120.203559 90.32591) (xy 120.058569 90.53811) (xy 120.048243 90.5891) (xy 118.509794 90.5891)
+ (xy 118.231353 90.310173) (xy 117.741413 90.106732) (xy 117.210914 90.106269) (xy 116.72062 90.308854) (xy 116.439885 90.5891)
+ (xy 114.935 90.5891) (xy 114.609374 90.653871) (xy 114.333323 90.838323) (xy 113.980713 91.190933) (xy 113.969472 91.186265)
+ (xy 113.363188 91.185736) (xy 112.802851 91.417262) (xy 112.373769 91.845596) (xy 112.141265 92.405528) (xy 112.140736 93.011812)
+ (xy 112.372262 93.572149) (xy 112.800596 94.001231) (xy 113.360528 94.233735) (xy 113.966812 94.234264) (xy 114.527149 94.002738)
+ (xy 114.956231 93.574404) (xy 115.188735 93.014472) (xy 115.189264 92.408188) (xy 115.18368 92.394674) (xy 115.287454 92.2909)
+ (xy 116.440206 92.2909) (xy 116.718647 92.569827) (xy 117.208587 92.773268) (xy 117.739086 92.773731) (xy 118.22938 92.571146)
+ (xy 118.510115 92.2909) (xy 120.045362 92.2909) (xy 120.051838 92.325317) (xy 120.19091 92.541441) (xy 120.40311 92.686431)
+ (xy 120.655 92.73744) (xy 121.379086 92.73744) (xy 122.588323 93.946677) (xy 122.864375 94.131129) (xy 123.19 94.1959)
+ (xy 133.35 94.1959) (xy 133.675626 94.131129) (xy 133.951677 93.946677) (xy 134.337454 93.5609) (xy 134.470746 93.5609)
+ (xy 133.632546 94.3991) (xy 119.779794 94.3991) (xy 119.501353 94.120173) (xy 119.011413 93.916732) (xy 118.480914 93.916269)
+ (xy 117.99062 94.118854) (xy 117.615173 94.493647) (xy 117.411732 94.983587) (xy 117.411269 95.514086) (xy 117.613854 96.00438)
+ (xy 117.988647 96.379827) (xy 118.478587 96.583268) (xy 119.009086 96.583731) (xy 119.49938 96.381146) (xy 119.780115 96.1009)
+ (xy 128.905133 96.1009) (xy 128.841732 96.253587) (xy 128.841269 96.784086) (xy 129.043854 97.27438) (xy 129.418647 97.649827)
+ (xy 129.908587 97.853268) (xy 130.439086 97.853731) (xy 130.92938 97.651146) (xy 131.210115 97.3709) (xy 141.605133 97.3709)
+ (xy 141.541732 97.523587) (xy 141.541269 98.054086) (xy 141.605319 98.2091) (xy 133.749794 98.2091) (xy 133.471353 97.930173)
+ (xy 132.981413 97.726732) (xy 132.450914 97.726269) (xy 131.96062 97.928854) (xy 131.585173 98.303647) (xy 131.381732 98.793587)
+ (xy 131.381269 99.324086) (xy 131.583854 99.81438) (xy 131.958647 100.189827) (xy 132.214179 100.295933) (xy 132.113323 100.363323)
+ (xy 130.843323 101.633323) (xy 130.658871 101.909374) (xy 130.621982 102.094827) (xy 130.5941 102.235) (xy 130.5941 104.375206)
+ (xy 130.315173 104.653647) (xy 130.174906 104.991446) (xy 130.036146 104.65562) (xy 129.661353 104.280173) (xy 129.171413 104.076732)
+ (xy 128.640914 104.076269) (xy 128.15062 104.278854) (xy 127.775173 104.653647) (xy 127.634906 104.991446) (xy 127.496146 104.65562)
+ (xy 127.121353 104.280173) (xy 126.631413 104.076732) (xy 126.100914 104.076269) (xy 125.61062 104.278854) (xy 125.393496 104.4956)
+ (xy 124.796405 104.4956) (xy 124.581353 104.280173) (xy 124.091413 104.076732) (xy 123.560914 104.076269) (xy 123.07062 104.278854)
+ (xy 122.695173 104.653647) (xy 122.491732 105.143587) (xy 122.491269 105.674086) (xy 122.693854 106.16438) (xy 123.068647 106.539827)
+ (xy 123.558587 106.743268) (xy 124.089086 106.743731) (xy 124.57938 106.541146) (xy 124.796504 106.3244) (xy 125.393595 106.3244)
+ (xy 125.4506 106.381504) (xy 125.4506 107.95) (xy 125.520205 108.299926) (xy 125.702949 108.573421) (xy 125.718422 108.596578)
+ (xy 126.7206 109.598757) (xy 126.7206 111.733766) (xy 126.631413 111.696732) (xy 126.100914 111.696269) (xy 125.61062 111.898854)
+ (xy 125.235173 112.273647) (xy 125.1585 112.458296) (xy 125.1585 112.20519) (xy 125.061827 111.971801) (xy 124.883198 111.793173)
+ (xy 124.649809 111.6965) (xy 124.11075 111.6965) (xy 123.952 111.85525) (xy 123.952 112.903) (xy 123.972 112.903)
+ (xy 123.972 113.157) (xy 123.952 113.157) (xy 123.952 114.20475) (xy 124.11075 114.3635) (xy 124.649809 114.3635)
+ (xy 124.883198 114.266827) (xy 125.061827 114.088199) (xy 125.1585 113.85481) (xy 125.1585 113.602009) (xy 125.233854 113.78438)
+ (xy 125.5141 114.065115) (xy 125.5141 114.582546) (xy 125.377546 114.7191) (xy 99.695 114.7191) (xy 99.369374 114.783871)
+ (xy 99.093323 114.968323) (xy 98.555033 115.506613) (xy 98.160914 115.506269) (xy 97.67062 115.708854) (xy 97.295173 116.083647)
+ (xy 97.154906 116.421446) (xy 97.016146 116.08562) (xy 96.641353 115.710173) (xy 96.151413 115.506732) (xy 95.620914 115.506269)
+ (xy 95.13062 115.708854) (xy 94.755173 116.083647) (xy 94.551732 116.573587) (xy 94.551269 117.104086) (xy 94.753854 117.59438)
+ (xy 95.128647 117.969827) (xy 95.618587 118.173268) (xy 95.925379 118.173536) (xy 96.508421 118.756578) (xy 96.656748 118.855686)
+ (xy 96.805074 118.954795) (xy 97.155 119.0244) (xy 102.208766 119.0244) (xy 102.171732 119.113587) (xy 102.171269 119.644086)
+ (xy 102.235319 119.7991) (xy 94.379794 119.7991) (xy 94.101353 119.520173) (xy 93.611413 119.316732) (xy 93.080914 119.316269)
+ (xy 92.59062 119.518854) (xy 92.215173 119.893647) (xy 92.011732 120.383587) (xy 92.011269 120.914086) (xy 92.213854 121.40438)
+ (xy 92.588647 121.779827) (xy 93.078587 121.983268) (xy 93.609086 121.983731) (xy 94.09938 121.781146) (xy 94.380115 121.5009)
+ (xy 98.425133 121.5009) (xy 98.361732 121.653587) (xy 98.361269 122.184086) (xy 98.563854 122.67438) (xy 98.938647 123.049827)
+ (xy 99.428587 123.253268) (xy 99.959086 123.253731) (xy 100.44938 123.051146) (xy 100.730115 122.7709) (xy 110.772546 122.7709)
+ (xy 111.128148 123.126502) (xy 110.860914 123.126269) (xy 110.37062 123.328854) (xy 109.995173 123.703647) (xy 109.854906 124.041446)
+ (xy 109.716146 123.70562) (xy 109.341353 123.330173) (xy 108.851413 123.126732) (xy 108.320914 123.126269) (xy 107.83062 123.328854)
+ (xy 107.455173 123.703647) (xy 107.314906 124.041446) (xy 107.176146 123.70562) (xy 106.801353 123.330173) (xy 106.311413 123.126732)
+ (xy 105.780914 123.126269) (xy 105.29062 123.328854) (xy 104.915173 123.703647) (xy 104.774906 124.041446) (xy 104.636146 123.70562)
+ (xy 104.261353 123.330173) (xy 103.771413 123.126732) (xy 103.240914 123.126269) (xy 102.75062 123.328854) (xy 102.375173 123.703647)
+ (xy 102.234906 124.041446) (xy 102.096146 123.70562) (xy 101.721353 123.330173) (xy 101.231413 123.126732) (xy 100.700914 123.126269)
+ (xy 100.21062 123.328854) (xy 99.835173 123.703647) (xy 99.694906 124.041446) (xy 99.556146 123.70562) (xy 99.181353 123.330173)
+ (xy 98.691413 123.126732) (xy 98.160914 123.126269) (xy 97.67062 123.328854) (xy 97.295173 123.703647) (xy 97.23094 123.858337)
+ (xy 97.23094 123.7615) (xy 97.186662 123.526183) (xy 97.04759 123.310059) (xy 96.83539 123.165069) (xy 96.5835 123.11406)
+ (xy 95.1865 123.11406) (xy 94.951183 123.158338) (xy 94.735059 123.29741) (xy 94.590069 123.50961) (xy 94.53906 123.7615)
+ (xy 94.53906 125.1585) (xy 94.583338 125.393817) (xy 94.72241 125.609941) (xy 94.93461 125.754931) (xy 95.1865 125.80594)
+ (xy 96.027586 125.80594) (xy 98.458323 128.236677) (xy 98.734374 128.421129) (xy 99.06 128.4859) (xy 112.677546 128.4859)
+ (xy 112.880746 128.6891) (xy 96.919794 128.6891) (xy 96.641353 128.410173) (xy 96.151413 128.206732) (xy 95.620914 128.206269)
+ (xy 95.13062 128.408854) (xy 94.755173 128.783647) (xy 94.551732 129.273587) (xy 94.551269 129.804086) (xy 94.753854 130.29438)
+ (xy 95.128647 130.669827) (xy 95.618587 130.873268) (xy 96.149086 130.873731) (xy 96.63938 130.671146) (xy 96.920115 130.3909)
+ (xy 102.235133 130.3909) (xy 102.171732 130.543587) (xy 102.171269 131.074086) (xy 102.235319 131.2291) (xy 101.999794 131.2291)
+ (xy 101.721353 130.950173) (xy 101.231413 130.746732) (xy 100.700914 130.746269) (xy 100.21062 130.948854) (xy 99.835173 131.323647)
+ (xy 99.729345 131.57851) (xy 99.61001 131.289697) (xy 99.21737 130.896371) (xy 98.7041 130.683243) (xy 98.148339 130.682758)
+ (xy 97.634697 130.89499) (xy 97.241371 131.28763) (xy 97.028243 131.8009) (xy 97.027758 132.356661) (xy 97.23999 132.870303)
+ (xy 97.5106 133.141386) (xy 97.5106 133.223) (xy 91.478238 133.223) (xy 91.45033 133.082696) (xy 91.298914 132.856086)
+ (xy 91.072304 132.70467) (xy 90.805 132.6515) (xy 80.772 132.6515) (xy 80.772 129.204188) (xy 86.240417 129.204188)
+ (xy 86.302071 129.4398) (xy 86.80248 129.615927) (xy 87.332199 129.587148) (xy 87.687929 129.4398) (xy 87.749583 129.204188)
+ (xy 86.995 128.449605) (xy 86.240417 129.204188) (xy 80.772 129.204188) (xy 80.772 128.07748) (xy 85.649073 128.07748)
+ (xy 85.677852 128.607199) (xy 85.8252 128.962929) (xy 86.060812 129.024583) (xy 86.815395 128.27) (xy 87.174605 128.27)
+ (xy 87.929188 129.024583) (xy 88.1648 128.962929) (xy 88.340927 128.46252) (xy 88.312148 127.932801) (xy 88.1648 127.577071)
+ (xy 87.929188 127.515417) (xy 87.174605 128.27) (xy 86.815395 128.27) (xy 86.060812 127.515417) (xy 85.8252 127.577071)
+ (xy 85.649073 128.07748) (xy 80.772 128.07748) (xy 80.772 127.335812) (xy 86.240417 127.335812) (xy 86.995 128.090395)
+ (xy 87.749583 127.335812) (xy 87.687929 127.1002) (xy 87.18752 126.924073) (xy 86.657801 126.952852) (xy 86.302071 127.1002)
+ (xy 86.240417 127.335812) (xy 80.772 127.335812) (xy 80.772 112.3315) (xy 85.64906 112.3315) (xy 85.64906 113.7285)
+ (xy 85.693338 113.963817) (xy 85.83241 114.179941) (xy 86.04461 114.324931) (xy 86.2965 114.37594) (xy 87.6935 114.37594)
+ (xy 87.928817 114.331662) (xy 88.144941 114.19259) (xy 88.289931 113.98039) (xy 88.297219 113.9444) (xy 94.579684 113.9444)
+ (xy 94.583338 113.963817) (xy 94.72241 114.179941) (xy 94.93461 114.324931) (xy 95.1865 114.37594) (xy 96.5835 114.37594)
+ (xy 96.818817 114.331662) (xy 97.034941 114.19259) (xy 97.179931 113.98039) (xy 97.23094 113.7285) (xy 97.23094 113.632116)
+ (xy 97.293854 113.78438) (xy 97.668647 114.159827) (xy 98.158587 114.363268) (xy 98.689086 114.363731) (xy 99.17938 114.161146)
+ (xy 99.554827 113.786353) (xy 99.695094 113.448554) (xy 99.833854 113.78438) (xy 100.208647 114.159827) (xy 100.698587 114.363268)
+ (xy 101.229086 114.363731) (xy 101.71938 114.161146) (xy 102.094827 113.786353) (xy 102.235094 113.448554) (xy 102.373854 113.78438)
+ (xy 102.748647 114.159827) (xy 103.238587 114.363268) (xy 103.769086 114.363731) (xy 104.25938 114.161146) (xy 104.634827 113.786353)
+ (xy 104.775094 113.448554) (xy 104.913854 113.78438) (xy 105.288647 114.159827) (xy 105.778587 114.363268) (xy 106.309086 114.363731)
+ (xy 106.79938 114.161146) (xy 107.174827 113.786353) (xy 107.315094 113.448554) (xy 107.453854 113.78438) (xy 107.828647 114.159827)
+ (xy 108.318587 114.363268) (xy 108.849086 114.363731) (xy 109.33938 114.161146) (xy 109.714827 113.786353) (xy 109.855094 113.448554)
+ (xy 109.993854 113.78438) (xy 110.368647 114.159827) (xy 110.858587 114.363268) (xy 111.389086 114.363731) (xy 111.87938 114.161146)
+ (xy 112.254827 113.786353) (xy 112.395094 113.448554) (xy 112.533854 113.78438) (xy 112.908647 114.159827) (xy 113.398587 114.363268)
+ (xy 113.929086 114.363731) (xy 114.41938 114.161146) (xy 114.794827 113.786353) (xy 114.935094 113.448554) (xy 115.073854 113.78438)
+ (xy 115.448647 114.159827) (xy 115.938587 114.363268) (xy 116.469086 114.363731) (xy 116.95938 114.161146) (xy 117.334827 113.786353)
+ (xy 117.475094 113.448554) (xy 117.613854 113.78438) (xy 117.988647 114.159827) (xy 118.478587 114.363268) (xy 119.009086 114.363731)
+ (xy 119.49938 114.161146) (xy 119.874827 113.786353) (xy 120.070238 113.31575) (xy 122.4915 113.31575) (xy 122.4915 113.85481)
+ (xy 122.588173 114.088199) (xy 122.766802 114.266827) (xy 123.000191 114.3635) (xy 123.53925 114.3635) (xy 123.698 114.20475)
+ (xy 123.698 113.157) (xy 122.65025 113.157) (xy 122.4915 113.31575) (xy 120.070238 113.31575) (xy 120.078268 113.296413)
+ (xy 120.078731 112.765914) (xy 119.876146 112.27562) (xy 119.805839 112.20519) (xy 122.4915 112.20519) (xy 122.4915 112.74425)
+ (xy 122.65025 112.903) (xy 123.698 112.903) (xy 123.698 111.85525) (xy 123.53925 111.6965) (xy 123.000191 111.6965)
+ (xy 122.766802 111.793173) (xy 122.588173 111.971801) (xy 122.4915 112.20519) (xy 119.805839 112.20519) (xy 119.501353 111.900173)
+ (xy 119.011413 111.696732) (xy 118.480914 111.696269) (xy 117.99062 111.898854) (xy 117.615173 112.273647) (xy 117.474906 112.611446)
+ (xy 117.336146 112.27562) (xy 116.961353 111.900173) (xy 116.471413 111.696732) (xy 115.940914 111.696269) (xy 115.45062 111.898854)
+ (xy 115.075173 112.273647) (xy 114.934906 112.611446) (xy 114.796146 112.27562) (xy 114.421353 111.900173) (xy 113.931413 111.696732)
+ (xy 113.400914 111.696269) (xy 112.91062 111.898854) (xy 112.535173 112.273647) (xy 112.394906 112.611446) (xy 112.256146 112.27562)
+ (xy 111.881353 111.900173) (xy 111.391413 111.696732) (xy 110.860914 111.696269) (xy 110.37062 111.898854) (xy 109.995173 112.273647)
+ (xy 109.854906 112.611446) (xy 109.716146 112.27562) (xy 109.341353 111.900173) (xy 108.851413 111.696732) (xy 108.320914 111.696269)
+ (xy 107.83062 111.898854) (xy 107.455173 112.273647) (xy 107.314906 112.611446) (xy 107.176146 112.27562) (xy 106.801353 111.900173)
+ (xy 106.311413 111.696732) (xy 105.780914 111.696269) (xy 105.29062 111.898854) (xy 104.915173 112.273647) (xy 104.774906 112.611446)
+ (xy 104.636146 112.27562) (xy 104.261353 111.900173) (xy 103.771413 111.696732) (xy 103.240914 111.696269) (xy 102.75062 111.898854)
+ (xy 102.375173 112.273647) (xy 102.234906 112.611446) (xy 102.096146 112.27562) (xy 101.721353 111.900173) (xy 101.231413 111.696732)
+ (xy 100.700914 111.696269) (xy 100.21062 111.898854) (xy 99.835173 112.273647) (xy 99.694906 112.611446) (xy 99.556146 112.27562)
+ (xy 99.181353 111.900173) (xy 98.691413 111.696732) (xy 98.160914 111.696269) (xy 97.67062 111.898854) (xy 97.295173 112.273647)
+ (xy 97.23094 112.428337) (xy 97.23094 112.3315) (xy 97.186662 112.096183) (xy 97.04759 111.880059) (xy 96.83539 111.735069)
+ (xy 96.5835 111.68406) (xy 95.1865 111.68406) (xy 94.951183 111.728338) (xy 94.735059 111.86741) (xy 94.590069 112.07961)
+ (xy 94.582781 112.1156) (xy 88.300316 112.1156) (xy 88.296662 112.096183) (xy 88.15759 111.880059) (xy 87.94539 111.735069)
+ (xy 87.6935 111.68406) (xy 86.2965 111.68406) (xy 86.061183 111.728338) (xy 85.845059 111.86741) (xy 85.700069 112.07961)
+ (xy 85.64906 112.3315) (xy 80.772 112.3315) (xy 80.772 107.920641) (xy 96.9264 107.920641) (xy 96.9264 107.979359)
+ (xy 97.040474 108.552848) (xy 97.36533 109.039029) (xy 97.851511 109.363885) (xy 98.425 109.477959) (xy 98.998489 109.363885)
+ (xy 99.48467 109.039029) (xy 99.695 108.724248) (xy 99.90533 109.039029) (xy 100.391511 109.363885) (xy 100.965 109.477959)
+ (xy 101.538489 109.363885) (xy 102.02467 109.039029) (xy 102.235 108.724248) (xy 102.44533 109.039029) (xy 102.931511 109.363885)
+ (xy 103.505 109.477959) (xy 104.078489 109.363885) (xy 104.56467 109.039029) (xy 104.775 108.724248) (xy 104.98533 109.039029)
+ (xy 105.471511 109.363885) (xy 106.045 109.477959) (xy 106.618489 109.363885) (xy 107.10467 109.039029) (xy 107.315 108.724248)
+ (xy 107.52533 109.039029) (xy 108.011511 109.363885) (xy 108.585 109.477959) (xy 109.158489 109.363885) (xy 109.64467 109.039029)
+ (xy 109.855 108.724248) (xy 110.06533 109.039029) (xy 110.551511 109.363885) (xy 111.125 109.477959) (xy 111.698489 109.363885)
+ (xy 112.18467 109.039029) (xy 112.395 108.724248) (xy 112.60533 109.039029) (xy 113.091511 109.363885) (xy 113.665 109.477959)
+ (xy 114.238489 109.363885) (xy 114.72467 109.039029) (xy 114.935 108.724248) (xy 115.14533 109.039029) (xy 115.631511 109.363885)
+ (xy 116.205 109.477959) (xy 116.778489 109.363885) (xy 117.26467 109.039029) (xy 117.589526 108.552848) (xy 117.7036 107.979359)
+ (xy 117.7036 107.920641) (xy 117.589526 107.347152) (xy 117.274474 106.875644) (xy 117.428299 106.811927) (xy 117.606927 106.633298)
+ (xy 117.7036 106.399909) (xy 117.7036 105.69575) (xy 117.54485 105.537) (xy 116.332 105.537) (xy 116.332 105.557)
+ (xy 116.078 105.557) (xy 116.078 105.537) (xy 113.792 105.537) (xy 113.792 105.557) (xy 113.538 105.557)
+ (xy 113.538 105.537) (xy 111.252 105.537) (xy 111.252 105.557) (xy 110.998 105.557) (xy 110.998 105.537)
+ (xy 108.712 105.537) (xy 108.712 105.557) (xy 108.458 105.557) (xy 108.458 105.537) (xy 106.172 105.537)
+ (xy 106.172 105.557) (xy 105.918 105.557) (xy 105.918 105.537) (xy 103.632 105.537) (xy 103.632 105.557)
+ (xy 103.378 105.557) (xy 103.378 105.537) (xy 101.092 105.537) (xy 101.092 105.557) (xy 100.838 105.557)
+ (xy 100.838 105.537) (xy 98.552 105.537) (xy 98.552 105.557) (xy 98.298 105.557) (xy 98.298 105.537)
+ (xy 97.090531 105.537) (xy 96.970032 105.769027) (xy 97.218179 106.29849) (xy 97.636161 106.680008) (xy 97.36533 106.860971)
+ (xy 97.040474 107.347152) (xy 96.9264 107.920641) (xy 80.772 107.920641) (xy 80.772 105.050973) (xy 96.970032 105.050973)
+ (xy 97.090531 105.283) (xy 98.298 105.283) (xy 98.298 104.076183) (xy 98.552 104.076183) (xy 98.552 105.283)
+ (xy 100.838 105.283) (xy 100.838 104.076183) (xy 101.092 104.076183) (xy 101.092 105.283) (xy 103.378 105.283)
+ (xy 103.378 104.076183) (xy 103.632 104.076183) (xy 103.632 105.283) (xy 105.918 105.283) (xy 105.918 104.076183)
+ (xy 106.172 104.076183) (xy 106.172 105.283) (xy 108.458 105.283) (xy 108.458 104.076183) (xy 108.712 104.076183)
+ (xy 108.712 105.283) (xy 110.998 105.283) (xy 110.998 104.076183) (xy 111.252 104.076183) (xy 111.252 105.283)
+ (xy 113.538 105.283) (xy 113.538 104.076183) (xy 113.792 104.076183) (xy 113.792 105.283) (xy 116.078 105.283)
+ (xy 116.078 104.07015) (xy 116.332 104.07015) (xy 116.332 105.283) (xy 117.54485 105.283) (xy 117.7036 105.12425)
+ (xy 117.7036 104.420091) (xy 117.606927 104.186702) (xy 117.428299 104.008073) (xy 117.19491 103.9114) (xy 116.49075 103.9114)
+ (xy 116.332 104.07015) (xy 116.078 104.07015) (xy 115.91925 103.9114) (xy 115.21509 103.9114) (xy 114.981701 104.008073)
+ (xy 114.803073 104.186702) (xy 114.7213 104.38412) (xy 114.439947 104.127312) (xy 114.024026 103.955042) (xy 113.792 104.076183)
+ (xy 113.538 104.076183) (xy 113.305974 103.955042) (xy 112.890053 104.127312) (xy 112.458179 104.52151) (xy 112.395 104.656313)
+ (xy 112.331821 104.52151) (xy 111.899947 104.127312) (xy 111.484026 103.955042) (xy 111.252 104.076183) (xy 110.998 104.076183)
+ (xy 110.765974 103.955042) (xy 110.350053 104.127312) (xy 109.918179 104.52151) (xy 109.855 104.656313) (xy 109.791821 104.52151)
+ (xy 109.359947 104.127312) (xy 108.944026 103.955042) (xy 108.712 104.076183) (xy 108.458 104.076183) (xy 108.225974 103.955042)
+ (xy 107.810053 104.127312) (xy 107.378179 104.52151) (xy 107.315 104.656313) (xy 107.251821 104.52151) (xy 106.819947 104.127312)
+ (xy 106.404026 103.955042) (xy 106.172 104.076183) (xy 105.918 104.076183) (xy 105.685974 103.955042) (xy 105.270053 104.127312)
+ (xy 104.838179 104.52151) (xy 104.775 104.656313) (xy 104.711821 104.52151) (xy 104.279947 104.127312) (xy 103.864026 103.955042)
+ (xy 103.632 104.076183) (xy 103.378 104.076183) (xy 103.145974 103.955042) (xy 102.730053 104.127312) (xy 102.298179 104.52151)
+ (xy 102.235 104.656313) (xy 102.171821 104.52151) (xy 101.739947 104.127312) (xy 101.324026 103.955042) (xy 101.092 104.076183)
+ (xy 100.838 104.076183) (xy 100.605974 103.955042) (xy 100.190053 104.127312) (xy 99.758179 104.52151) (xy 99.695 104.656313)
+ (xy 99.631821 104.52151) (xy 99.199947 104.127312) (xy 98.784026 103.955042) (xy 98.552 104.076183) (xy 98.298 104.076183)
+ (xy 98.065974 103.955042) (xy 97.650053 104.127312) (xy 97.218179 104.52151) (xy 96.970032 105.050973) (xy 80.772 105.050973)
+ (xy 80.772 98.091812) (xy 112.140736 98.091812) (xy 112.372262 98.652149) (xy 112.800596 99.081231) (xy 113.360528 99.313735)
+ (xy 113.966812 99.314264) (xy 113.980326 99.30868) (xy 114.333323 99.661677) (xy 114.609374 99.846129) (xy 114.935 99.9109)
+ (xy 116.440206 99.9109) (xy 116.718647 100.189827) (xy 117.208587 100.393268) (xy 117.739086 100.393731) (xy 118.22938 100.191146)
+ (xy 118.510115 99.9109) (xy 120.045362 99.9109) (xy 120.051838 99.945317) (xy 120.19091 100.161441) (xy 120.40311 100.306431)
+ (xy 120.655 100.35744) (xy 121.955 100.35744) (xy 122.190317 100.313162) (xy 122.406441 100.17409) (xy 122.551431 99.96189)
+ (xy 122.552012 99.959016) (xy 123.08559 99.959016) (xy 123.141271 100.189611) (xy 123.624078 100.357622) (xy 124.134428 100.328083)
+ (xy 124.468729 100.189611) (xy 124.52441 99.959016) (xy 123.805 99.239605) (xy 123.08559 99.959016) (xy 122.552012 99.959016)
+ (xy 122.60244 99.71) (xy 122.60244 99.547615) (xy 122.675389 99.723729) (xy 122.905984 99.77941) (xy 123.625395 99.06)
+ (xy 123.611252 99.045858) (xy 123.790858 98.866253) (xy 123.805 98.880395) (xy 123.819143 98.866253) (xy 123.998748 99.045858)
+ (xy 123.984605 99.06) (xy 124.704016 99.77941) (xy 124.934611 99.723729) (xy 125.102622 99.240922) (xy 125.073083 98.730572)
+ (xy 125.03594 98.6409) (xy 126.012546 98.6409) (xy 126.301613 98.929967) (xy 126.301269 99.324086) (xy 126.503854 99.81438)
+ (xy 126.878647 100.189827) (xy 127.368587 100.393268) (xy 127.899086 100.393731) (xy 128.38938 100.191146) (xy 128.764827 99.816353)
+ (xy 128.968268 99.326413) (xy 128.968731 98.795914) (xy 128.766146 98.30562) (xy 128.391353 97.930173) (xy 127.901413 97.726732)
+ (xy 127.50474 97.726386) (xy 126.966677 97.188323) (xy 126.690626 97.003871) (xy 126.365 96.9391) (xy 122.555 96.9391)
+ (xy 122.229374 97.003871) (xy 121.953323 97.188323) (xy 121.379086 97.76256) (xy 120.655 97.76256) (xy 120.419683 97.806838)
+ (xy 120.203559 97.94591) (xy 120.058569 98.15811) (xy 120.048243 98.2091) (xy 118.509794 98.2091) (xy 118.231353 97.930173)
+ (xy 117.741413 97.726732) (xy 117.210914 97.726269) (xy 116.72062 97.928854) (xy 116.439885 98.2091) (xy 115.287454 98.2091)
+ (xy 115.184067 98.105713) (xy 115.188735 98.094472) (xy 115.189264 97.488188) (xy 114.957738 96.927851) (xy 114.529404 96.498769)
+ (xy 113.969472 96.266265) (xy 113.363188 96.265736) (xy 112.802851 96.497262) (xy 112.373769 96.925596) (xy 112.141265 97.485528)
+ (xy 112.140736 98.091812) (xy 80.772 98.091812) (xy 80.772 83.1215) (xy 81.83906 83.1215) (xy 81.83906 84.5185)
+ (xy 81.883338 84.753817) (xy 82.02241 84.969941) (xy 82.23461 85.114931) (xy 82.4865 85.16594) (xy 83.8835 85.16594)
+ (xy 84.118817 85.121662) (xy 84.334941 84.98259) (xy 84.479931 84.77039) (xy 84.483211 84.754188) (xy 97.670417 84.754188)
+ (xy 97.732071 84.9898) (xy 98.23248 85.165927) (xy 98.762199 85.137148) (xy 99.117929 84.9898) (xy 99.179583 84.754188)
+ (xy 98.425 83.999605) (xy 97.670417 84.754188) (xy 84.483211 84.754188) (xy 84.53094 84.5185) (xy 84.53094 83.62748)
+ (xy 97.079073 83.62748) (xy 97.107852 84.157199) (xy 97.2552 84.512929) (xy 97.490812 84.574583) (xy 98.245395 83.82)
+ (xy 98.604605 83.82) (xy 99.359188 84.574583) (xy 99.5948 84.512929) (xy 99.770927 84.01252) (xy 99.742148 83.482801)
+ (xy 99.5948 83.127071) (xy 99.359188 83.065417) (xy 98.604605 83.82) (xy 98.245395 83.82) (xy 97.490812 83.065417)
+ (xy 97.2552 83.127071) (xy 97.079073 83.62748) (xy 84.53094 83.62748) (xy 84.53094 83.1215) (xy 84.486662 82.886183)
+ (xy 84.486424 82.885812) (xy 97.670417 82.885812) (xy 98.425 83.640395) (xy 99.179583 82.885812) (xy 99.117929 82.6502)
+ (xy 98.61752 82.474073) (xy 98.087801 82.502852) (xy 97.732071 82.6502) (xy 97.670417 82.885812) (xy 84.486424 82.885812)
+ (xy 84.34759 82.670059) (xy 84.13539 82.525069) (xy 83.8835 82.47406) (xy 82.4865 82.47406) (xy 82.251183 82.518338)
+ (xy 82.035059 82.65741) (xy 81.890069 82.86961) (xy 81.83906 83.1215) (xy 80.772 83.1215) (xy 80.772 57.414086)
+ (xy 83.121269 57.414086) (xy 83.323854 57.90438) (xy 83.698647 58.279827) (xy 84.188587 58.483268) (xy 84.719086 58.483731)
+ (xy 85.20938 58.281146) (xy 85.584827 57.906353) (xy 85.788268 57.416413) (xy 85.788731 56.885914) (xy 85.586146 56.39562)
+ (xy 85.211353 56.020173) (xy 84.721413 55.816732) (xy 84.190914 55.816269) (xy 83.70062 56.018854) (xy 83.325173 56.393647)
+ (xy 83.121732 56.883587) (xy 83.121269 57.414086) (xy 80.772 57.414086) (xy 80.772 51.87748) (xy 154.229073 51.87748)
+ (xy 154.257852 52.407199) (xy 154.4052 52.762929) (xy 154.640812 52.824583) (xy 155.395395 52.07) (xy 155.754605 52.07)
+ (xy 156.509188 52.824583) (xy 156.7448 52.762929) (xy 156.920927 52.26252) (xy 156.892148 51.732801) (xy 156.7448 51.377071)
+ (xy 156.723511 51.3715) (xy 169.46906 51.3715) (xy 169.46906 52.7685) (xy 169.513338 53.003817) (xy 169.65241 53.219941)
+ (xy 169.86461 53.364931) (xy 170.1165 53.41594) (xy 171.5135 53.41594) (xy 171.748817 53.371662) (xy 171.964941 53.23259)
+ (xy 172.109931 53.02039) (xy 172.16094 52.7685) (xy 172.16094 51.3715) (xy 172.116662 51.136183) (xy 171.97759 50.920059)
+ (xy 171.76539 50.775069) (xy 171.5135 50.72406) (xy 170.1165 50.72406) (xy 169.881183 50.768338) (xy 169.665059 50.90741)
+ (xy 169.520069 51.11961) (xy 169.46906 51.3715) (xy 156.723511 51.3715) (xy 156.509188 51.315417) (xy 155.754605 52.07)
+ (xy 155.395395 52.07) (xy 154.640812 51.315417) (xy 154.4052 51.377071) (xy 154.229073 51.87748) (xy 80.772 51.87748)
+ (xy 80.772 51.135812) (xy 154.820417 51.135812) (xy 155.575 51.890395) (xy 156.329583 51.135812) (xy 156.267929 50.9002)
+ (xy 155.76752 50.724073) (xy 155.237801 50.752852) (xy 154.882071 50.9002) (xy 154.820417 51.135812) (xy 80.772 51.135812)
+ (xy 80.772 48.524086) (xy 86.931269 48.524086) (xy 87.133854 49.01438) (xy 87.508647 49.389827) (xy 87.998587 49.593268)
+ (xy 88.529086 49.593731) (xy 89.01938 49.391146) (xy 89.300115 49.1109) (xy 118.745133 49.1109) (xy 118.681732 49.263587)
+ (xy 118.681269 49.794086) (xy 118.883854 50.28438) (xy 119.258647 50.659827) (xy 119.748587 50.863268) (xy 120.279086 50.863731)
+ (xy 120.76938 50.661146) (xy 121.050115 50.3809) (xy 159.620206 50.3809) (xy 159.898647 50.659827) (xy 160.388587 50.863268)
+ (xy 160.919086 50.863731) (xy 161.40938 50.661146) (xy 161.784827 50.286353) (xy 161.988268 49.796413) (xy 161.988445 49.593556)
+ (xy 162.189086 49.593731) (xy 162.67938 49.391146) (xy 163.054827 49.016353) (xy 163.258268 48.526413) (xy 163.258731 47.995914)
+ (xy 163.194681 47.8409) (xy 163.430206 47.8409) (xy 163.708647 48.119827) (xy 164.198587 48.323268) (xy 164.729086 48.323731)
+ (xy 165.21938 48.121146) (xy 165.594827 47.746353) (xy 165.798268 47.256413) (xy 165.798731 46.725914) (xy 165.734681 46.5709)
+ (xy 172.320206 46.5709) (xy 172.598647 46.849827) (xy 173.088587 47.053268) (xy 173.619086 47.053731) (xy 174.10938 46.851146)
+ (xy 174.484827 46.476353) (xy 174.688268 45.986413) (xy 174.688731 45.455914) (xy 174.486146 44.96562) (xy 174.111353 44.590173)
+ (xy 173.621413 44.386732) (xy 173.090914 44.386269) (xy 172.60062 44.588854) (xy 172.319885 44.8691) (xy 162.277454 44.8691)
+ (xy 161.256677 43.848323) (xy 160.980626 43.663871) (xy 160.655 43.5991) (xy 95.649794 43.5991) (xy 95.371353 43.320173)
+ (xy 94.881413 43.116732) (xy 94.350914 43.116269) (xy 93.86062 43.318854) (xy 93.485173 43.693647) (xy 93.281732 44.183587)
+ (xy 93.281269 44.714086) (xy 93.483854 45.20438) (xy 93.858647 45.579827) (xy 94.348587 45.783268) (xy 94.879086 45.783731)
+ (xy 95.36938 45.581146) (xy 95.650115 45.3009) (xy 121.285133 45.3009) (xy 121.221732 45.453587) (xy 121.221269 45.984086)
+ (xy 121.285319 46.1391) (xy 108.349794 46.1391) (xy 108.071353 45.860173) (xy 107.581413 45.656732) (xy 107.050914 45.656269)
+ (xy 106.56062 45.858854) (xy 106.185173 46.233647) (xy 105.981732 46.723587) (xy 105.981269 47.254086) (xy 106.045319 47.4091)
+ (xy 89.299794 47.4091) (xy 89.021353 47.130173) (xy 88.531413 46.926732) (xy 88.000914 46.926269) (xy 87.51062 47.128854)
+ (xy 87.135173 47.503647) (xy 86.931732 47.993587) (xy 86.931269 48.524086) (xy 80.772 48.524086) (xy 80.772 42.174086)
+ (xy 146.621269 42.174086) (xy 146.823854 42.66438) (xy 147.198647 43.039827) (xy 147.688587 43.243268) (xy 148.219086 43.243731)
+ (xy 148.70938 43.041146) (xy 149.084827 42.666353) (xy 149.288268 42.176413) (xy 149.28827 42.174086) (xy 154.241269 42.174086)
+ (xy 154.443854 42.66438) (xy 154.818647 43.039827) (xy 155.308587 43.243268) (xy 155.839086 43.243731) (xy 156.32938 43.041146)
+ (xy 156.704827 42.666353) (xy 156.908268 42.176413) (xy 156.90827 42.174086) (xy 166.941269 42.174086) (xy 167.143854 42.66438)
+ (xy 167.518647 43.039827) (xy 168.008587 43.243268) (xy 168.539086 43.243731) (xy 169.02938 43.041146) (xy 169.404827 42.666353)
+ (xy 169.608268 42.176413) (xy 169.60827 42.174086) (xy 174.561269 42.174086) (xy 174.763854 42.66438) (xy 175.138647 43.039827)
+ (xy 175.628587 43.243268) (xy 176.159086 43.243731) (xy 176.64938 43.041146) (xy 177.024827 42.666353) (xy 177.228268 42.176413)
+ (xy 177.228731 41.645914) (xy 177.026146 41.15562) (xy 176.651353 40.780173) (xy 176.161413 40.576732) (xy 175.630914 40.576269)
+ (xy 175.14062 40.778854) (xy 174.765173 41.153647) (xy 174.561732 41.643587) (xy 174.561269 42.174086) (xy 169.60827 42.174086)
+ (xy 169.608731 41.645914) (xy 169.406146 41.15562) (xy 169.031353 40.780173) (xy 168.541413 40.576732) (xy 168.010914 40.576269)
+ (xy 167.52062 40.778854) (xy 167.145173 41.153647) (xy 166.941732 41.643587) (xy 166.941269 42.174086) (xy 156.90827 42.174086)
+ (xy 156.908731 41.645914) (xy 156.706146 41.15562) (xy 156.331353 40.780173) (xy 155.841413 40.576732) (xy 155.310914 40.576269)
+ (xy 154.82062 40.778854) (xy 154.445173 41.153647) (xy 154.241732 41.643587) (xy 154.241269 42.174086) (xy 149.28827 42.174086)
+ (xy 149.288731 41.645914) (xy 149.086146 41.15562) (xy 148.711353 40.780173) (xy 148.221413 40.576732) (xy 147.690914 40.576269)
+ (xy 147.20062 40.778854) (xy 146.825173 41.153647) (xy 146.621732 41.643587) (xy 146.621269 42.174086) (xy 80.772 42.174086)
+ (xy 80.772 35.687) (xy 82.941886 35.687)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 126.558748 116.825858) (xy 126.544605 116.84) (xy 126.558748 116.854143) (xy 126.379143 117.033748) (xy 126.365 117.019605)
+ (xy 126.350858 117.033748) (xy 126.171253 116.854143) (xy 126.185395 116.84) (xy 126.171253 116.825858) (xy 126.350858 116.646253)
+ (xy 126.365 116.660395) (xy 126.379143 116.646253)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 158.308748 92.695858) (xy 158.294605 92.71) (xy 158.308748 92.724143) (xy 158.129143 92.903748) (xy 158.115 92.889605)
+ (xy 158.100858 92.903748) (xy 157.921253 92.724143) (xy 157.935395 92.71) (xy 157.921253 92.695858) (xy 158.100858 92.516253)
+ (xy 158.115 92.530395) (xy 158.129143 92.516253)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 164.52871 74.688959) (xy 164.528291 75.168935) (xy 164.711582 75.612535) (xy 165.05068 75.952225) (xy 165.493959 76.13629)
+ (xy 165.973935 76.136709) (xy 166.417535 75.953418) (xy 166.526743 75.8444) (xy 167.303595 75.8444) (xy 167.518647 76.059827)
+ (xy 167.856446 76.200094) (xy 167.52062 76.338854) (xy 167.145173 76.713647) (xy 166.941732 77.203587) (xy 166.941269 77.734086)
+ (xy 167.143854 78.22438) (xy 167.518647 78.599827) (xy 167.856446 78.740094) (xy 167.52062 78.878854) (xy 167.145173 79.253647)
+ (xy 166.941732 79.743587) (xy 166.941269 80.274086) (xy 167.143854 80.76438) (xy 167.518647 81.139827) (xy 167.840118 81.273314)
+ (xy 167.582071 81.3802) (xy 167.520417 81.615812) (xy 168.275 82.370395) (xy 169.029583 81.615812) (xy 168.967929 81.3802)
+ (xy 168.688688 81.281917) (xy 169.02938 81.141146) (xy 169.404827 80.766353) (xy 169.545094 80.428554) (xy 169.683854 80.76438)
+ (xy 170.058647 81.139827) (xy 170.396446 81.280094) (xy 170.06062 81.418854) (xy 169.685173 81.793647) (xy 169.551686 82.115118)
+ (xy 169.4448 81.857071) (xy 169.209188 81.795417) (xy 168.454605 82.55) (xy 168.468748 82.564143) (xy 168.289143 82.743748)
+ (xy 168.275 82.729605) (xy 167.520417 83.484188) (xy 167.582071 83.7198) (xy 167.861312 83.818083) (xy 167.52062 83.958854)
+ (xy 167.145173 84.333647) (xy 166.941732 84.823587) (xy 166.941269 85.354086) (xy 167.143854 85.84438) (xy 167.518647 86.219827)
+ (xy 167.856446 86.360094) (xy 167.52062 86.498854) (xy 167.145173 86.873647) (xy 166.941732 87.363587) (xy 166.941269 87.894086)
+ (xy 167.143854 88.38438) (xy 167.518647 88.759827) (xy 167.840118 88.893314) (xy 167.582071 89.0002) (xy 167.520417 89.235812)
+ (xy 168.275 89.990395) (xy 169.029583 89.235812) (xy 168.967929 89.0002) (xy 168.688688 88.901917) (xy 169.02938 88.761146)
+ (xy 169.404827 88.386353) (xy 169.545094 88.048554) (xy 169.683854 88.38438) (xy 170.058647 88.759827) (xy 170.396446 88.900094)
+ (xy 170.06062 89.038854) (xy 169.685173 89.413647) (xy 169.551686 89.735118) (xy 169.4448 89.477071) (xy 169.209188 89.415417)
+ (xy 168.454605 90.17) (xy 169.209188 90.924583) (xy 169.4448 90.862929) (xy 169.543083 90.583688) (xy 169.683854 90.92438)
+ (xy 170.058647 91.299827) (xy 170.396446 91.440094) (xy 170.06062 91.578854) (xy 169.685173 91.953647) (xy 169.544906 92.291446)
+ (xy 169.406146 91.95562) (xy 169.031353 91.580173) (xy 168.709882 91.446686) (xy 168.967929 91.3398) (xy 169.029583 91.104188)
+ (xy 168.275 90.349605) (xy 167.520417 91.104188) (xy 167.582071 91.3398) (xy 167.861312 91.438083) (xy 167.52062 91.578854)
+ (xy 167.145173 91.953647) (xy 167.004906 92.291446) (xy 166.866146 91.95562) (xy 166.491353 91.580173) (xy 166.001413 91.376732)
+ (xy 165.470914 91.376269) (xy 164.98062 91.578854) (xy 164.605173 91.953647) (xy 164.464906 92.291446) (xy 164.326146 91.95562)
+ (xy 163.951353 91.580173) (xy 163.461413 91.376732) (xy 162.930914 91.376269) (xy 162.44062 91.578854) (xy 162.065173 91.953647)
+ (xy 161.924906 92.291446) (xy 161.786146 91.95562) (xy 161.411353 91.580173) (xy 160.921413 91.376732) (xy 160.52474 91.376386)
+ (xy 159.986677 90.838323) (xy 159.710626 90.653871) (xy 159.385 90.5891) (xy 149.221179 90.5891) (xy 149.300927 90.36252)
+ (xy 149.280009 89.97748) (xy 166.929073 89.97748) (xy 166.957852 90.507199) (xy 167.1052 90.862929) (xy 167.340812 90.924583)
+ (xy 168.095395 90.17) (xy 167.340812 89.415417) (xy 167.1052 89.477071) (xy 166.929073 89.97748) (xy 149.280009 89.97748)
+ (xy 149.272148 89.832801) (xy 149.1248 89.477071) (xy 148.889188 89.415417) (xy 148.134605 90.17) (xy 148.148748 90.184143)
+ (xy 147.969143 90.363748) (xy 147.955 90.349605) (xy 147.940858 90.363748) (xy 147.761253 90.184143) (xy 147.775395 90.17)
+ (xy 147.020812 89.415417) (xy 146.7852 89.477071) (xy 146.686917 89.756312) (xy 146.546146 89.41562) (xy 146.171353 89.040173)
+ (xy 145.833554 88.899906) (xy 146.16938 88.761146) (xy 146.544827 88.386353) (xy 146.685094 88.048554) (xy 146.823854 88.38438)
+ (xy 147.198647 88.759827) (xy 147.520118 88.893314) (xy 147.262071 89.0002) (xy 147.200417 89.235812) (xy 147.955 89.990395)
+ (xy 148.709583 89.235812) (xy 148.647929 89.0002) (xy 148.368688 88.901917) (xy 148.70938 88.761146) (xy 149.084827 88.386353)
+ (xy 149.288268 87.896413) (xy 149.288731 87.365914) (xy 149.086146 86.87562) (xy 148.711353 86.500173) (xy 148.373554 86.359906)
+ (xy 148.70938 86.221146) (xy 149.084827 85.846353) (xy 149.288268 85.356413) (xy 149.288731 84.825914) (xy 149.086146 84.33562)
+ (xy 148.711353 83.960173) (xy 148.373554 83.819906) (xy 148.70938 83.681146) (xy 149.084827 83.306353) (xy 149.288268 82.816413)
+ (xy 149.288668 82.35748) (xy 166.929073 82.35748) (xy 166.957852 82.887199) (xy 167.1052 83.242929) (xy 167.340812 83.304583)
+ (xy 168.095395 82.55) (xy 167.340812 81.795417) (xy 167.1052 81.857071) (xy 166.929073 82.35748) (xy 149.288668 82.35748)
+ (xy 149.288731 82.285914) (xy 149.086146 81.79562) (xy 148.711353 81.420173) (xy 148.373554 81.279906) (xy 148.70938 81.141146)
+ (xy 149.084827 80.766353) (xy 149.288268 80.276413) (xy 149.288731 79.745914) (xy 149.086146 79.25562) (xy 148.711353 78.880173)
+ (xy 148.373554 78.739906) (xy 148.70938 78.601146) (xy 149.084827 78.226353) (xy 149.288268 77.736413) (xy 149.288731 77.205914)
+ (xy 149.086146 76.71562) (xy 148.711353 76.340173) (xy 148.373554 76.199906) (xy 148.70938 76.061146) (xy 149.084827 75.686353)
+ (xy 149.288268 75.196413) (xy 149.288731 74.665914) (xy 149.250918 74.5744) (xy 164.576279 74.5744)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 145.608748 82.535858) (xy 145.594605 82.55) (xy 146.349188 83.304583) (xy 146.5848 83.242929) (xy 146.683083 82.963688)
+ (xy 146.823854 83.30438) (xy 147.198647 83.679827) (xy 147.536446 83.820094) (xy 147.20062 83.958854) (xy 146.825173 84.333647)
+ (xy 146.684906 84.671446) (xy 146.546146 84.33562) (xy 146.171353 83.960173) (xy 145.849882 83.826686) (xy 146.107929 83.7198)
+ (xy 146.169583 83.484188) (xy 145.415 82.729605) (xy 145.400858 82.743748) (xy 145.221253 82.564143) (xy 145.235395 82.55)
+ (xy 145.221253 82.535858) (xy 145.400858 82.356253) (xy 145.415 82.370395) (xy 145.429143 82.356253)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 125.288748 76.185858) (xy 125.274605 76.2) (xy 125.288748 76.214143) (xy 125.109143 76.393748) (xy 125.095 76.379605)
+ (xy 125.080858 76.393748) (xy 124.901253 76.214143) (xy 124.915395 76.2) (xy 124.901253 76.185858) (xy 125.080858 76.006253)
+ (xy 125.095 76.020395) (xy 125.109143 76.006253)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 150.688748 72.375858) (xy 150.674605 72.39) (xy 150.688748 72.404143) (xy 150.509143 72.583748) (xy 150.495 72.569605)
+ (xy 150.480858 72.583748) (xy 150.301253 72.404143) (xy 150.315395 72.39) (xy 150.301253 72.375858) (xy 150.480858 72.196253)
+ (xy 150.495 72.210395) (xy 150.509143 72.196253)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 167.143854 70.60438) (xy 167.518647 70.979827) (xy 167.856446 71.120094) (xy 167.52062 71.258854) (xy 167.145173 71.633647)
+ (xy 167.011686 71.955118) (xy 166.9048 71.697071) (xy 166.669188 71.635417) (xy 165.914605 72.39) (xy 165.928748 72.404143)
+ (xy 165.749143 72.583748) (xy 165.735 72.569605) (xy 165.720858 72.583748) (xy 165.541253 72.404143) (xy 165.555395 72.39)
+ (xy 164.800812 71.635417) (xy 164.5652 71.697071) (xy 164.466917 71.976312) (xy 164.326146 71.63562) (xy 163.951353 71.260173)
+ (xy 163.613554 71.119906) (xy 163.94938 70.981146) (xy 164.324827 70.606353) (xy 164.465094 70.268554) (xy 164.603854 70.60438)
+ (xy 164.978647 70.979827) (xy 165.300118 71.113314) (xy 165.042071 71.2202) (xy 164.980417 71.455812) (xy 165.735 72.210395)
+ (xy 166.489583 71.455812) (xy 166.427929 71.2202) (xy 166.148688 71.121917) (xy 166.48938 70.981146) (xy 166.864827 70.606353)
+ (xy 167.005094 70.268554)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 159.523854 68.06438) (xy 159.898647 68.439827) (xy 160.236446 68.580094) (xy 159.90062 68.718854) (xy 159.525173 69.093647)
+ (xy 159.391686 69.415118) (xy 159.2848 69.157071) (xy 159.049188 69.095417) (xy 158.294605 69.85) (xy 159.049188 70.604583)
+ (xy 159.2848 70.542929) (xy 159.383083 70.263688) (xy 159.523854 70.60438) (xy 159.898647 70.979827) (xy 160.236446 71.120094)
+ (xy 159.90062 71.258854) (xy 159.525173 71.633647) (xy 159.384906 71.971446) (xy 159.246146 71.63562) (xy 158.871353 71.260173)
+ (xy 158.549882 71.126686) (xy 158.807929 71.0198) (xy 158.869583 70.784188) (xy 158.115 70.029605) (xy 157.360417 70.784188)
+ (xy 157.422071 71.0198) (xy 157.701312 71.118083) (xy 157.36062 71.258854) (xy 156.985173 71.633647) (xy 156.844906 71.971446)
+ (xy 156.706146 71.63562) (xy 156.331353 71.260173) (xy 155.993554 71.119906) (xy 156.32938 70.981146) (xy 156.704827 70.606353)
+ (xy 156.838314 70.284882) (xy 156.9452 70.542929) (xy 157.180812 70.604583) (xy 157.935395 69.85) (xy 157.180812 69.095417)
+ (xy 156.9452 69.157071) (xy 156.846917 69.436312) (xy 156.706146 69.09562) (xy 156.331353 68.720173) (xy 155.993554 68.579906)
+ (xy 156.32938 68.441146) (xy 156.704827 68.066353) (xy 156.845094 67.728554) (xy 156.983854 68.06438) (xy 157.358647 68.439827)
+ (xy 157.680118 68.573314) (xy 157.422071 68.6802) (xy 157.360417 68.915812) (xy 158.115 69.670395) (xy 158.869583 68.915812)
+ (xy 158.807929 68.6802) (xy 158.528688 68.581917) (xy 158.86938 68.441146) (xy 159.244827 68.066353) (xy 159.385094 67.728554)
+ )
+ )
+ )
+)
diff --git a/demos/interf_u/interf_u.net b/demos/interf_u/interf_u.net
new file mode 100644
index 0000000..05ff041
--- /dev/null
+++ b/demos/interf_u/interf_u.net
@@ -0,0 +1,1183 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/interf_u/interf_u.sch)
+ (date "20/09/2014 09:13:50")
+ (tool "Eeschema (2014-09-16 BZR 5138)-product"))
+ (components
+ (comp (ref U3)
+ (value 74LS541)
+ (footprint dip_sockets:DIP-20__300)
+ (libsource (lib 74xx) (part 74LS541))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4A087146))
+ (comp (ref JP1)
+ (value CONN_8X2)
+ (footprint pin_array_8x2)
+ (libsource (lib conn) (part CONN_8X2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32568D1E))
+ (comp (ref RR1)
+ (value 9x1K)
+ (footprint discret:r_pack9)
+ (libsource (lib device) (part RR9))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 325679C1))
+ (comp (ref P1)
+ (value DB25FEMELLE)
+ (footprint connect:DB25FC)
+ (libsource (lib conn) (part DB25))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3256759C))
+ (comp (ref R3)
+ (value 10K)
+ (footprint discret:R3)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 324002E6))
+ (comp (ref U5)
+ (value 628128)
+ (footprint dip_sockets:DIP-32__600)
+ (libsource (lib memory) (part 628128))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3240023F))
+ (comp (ref C3)
+ (value 47pF)
+ (footprint discret:C1)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307ED4))
+ (comp (ref C2)
+ (value 47pF)
+ (footprint discret:C1)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307ECF))
+ (comp (ref X1)
+ (value 8MHz)
+ (footprint discret:HC-18UH)
+ (libsource (lib device) (part CRYSTAL))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307EC0))
+ (comp (ref R2)
+ (value 1K)
+ (footprint discret:R3)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307EAA))
+ (comp (ref R1)
+ (value 100K)
+ (footprint discret:R3)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307EA1))
+ (comp (ref C1)
+ (value 47uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307DE2))
+ (comp (ref C4)
+ (value 47uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307DCF))
+ (comp (ref C5)
+ (value 47uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307DCA))
+ (comp (ref C6)
+ (value 47uF)
+ (footprint discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32307DC0))
+ (comp (ref U2)
+ (value 74LS688)
+ (footprint dip_sockets:DIP-20__300)
+ (libsource (lib 74xx) (part 74LS688))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D35B4))
+ (comp (ref U9)
+ (value 4003APG120)
+ (footprint PGA120)
+ (fields
+ (field (name price) 50$)
+ (field (name Field5) test))
+ (libsource (lib xilinx) (part 4003APG120))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D32FA))
+ (comp (ref D2)
+ (value LED)
+ (footprint discret:LEDV)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D32BE))
+ (comp (ref D1)
+ (value LED)
+ (footprint discret:LEDV)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D32AC))
+ (comp (ref R5)
+ (value 330)
+ (footprint discret:R3)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D32A0))
+ (comp (ref R4)
+ (value 330)
+ (footprint discret:R3)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D3295))
+ (comp (ref U8)
+ (value EP600)
+ (footprint dip_sockets:DIP-24__300)
+ (libsource (lib special) (part EP600))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D321C))
+ (comp (ref U1)
+ (value 74LS245)
+ (footprint dip_sockets:DIP-20__300)
+ (libsource (lib 74xx) (part 74LS245))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D31F4))
+ (comp (ref BUS1)
+ (value BUSPC)
+ (footprint BUS_PC)
+ (libsource (lib conn) (part BUSPC))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 322D3011)))
+ (libparts
+ (libpart (lib device) (part C)
+ (description "Condensateur non polarise")
+ (footprints
+ (fp SM*)
+ (fp C?)
+ (fp C1-1))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CP)
+ (aliases
+ (alias CAPAPOL))
+ (description "Condensateur polarise")
+ (footprints
+ (fp CP*)
+ (fp SM*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CRYSTAL)
+ (fields
+ (field (name Reference) X)
+ (field (name Value) CRYSTAL))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part LED)
+ (footprints
+ (fp LED-3MM)
+ (fp LED-5MM)
+ (fp LED-10MM)
+ (fp LED-0603)
+ (fp LED-0805)
+ (fp LED-1206)
+ (fp LEDV))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) LED))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part R)
+ (description Resistance)
+ (footprints
+ (fp R?)
+ (fp SM0603)
+ (fp SM0805)
+ (fp R?-*)
+ (fp SM1206))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part RR9)
+ (fields
+ (field (name Reference) RR)
+ (field (name Value) RR9))
+ (pins
+ (pin (num 1) (name COM) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))))
+ (libpart (lib conn) (part BUSPC)
+ (description "Connecteur BUS ISA 8 Bits")
+ (fields
+ (field (name Reference) BUS)
+ (field (name Value) BUSPC))
+ (pins
+ (pin (num 1) (name GND) (type passive))
+ (pin (num 2) (name RESET) (type output))
+ (pin (num 3) (name VCC) (type passive))
+ (pin (num 4) (name INQ2) (type passive))
+ (pin (num 5) (name -5V) (type passive))
+ (pin (num 6) (name DRQ2) (type passive))
+ (pin (num 7) (name -12V) (type passive))
+ (pin (num 8) (name UNUSED) (type passive))
+ (pin (num 9) (name +12V) (type passive))
+ (pin (num 10) (name GND) (type passive))
+ (pin (num 11) (name MEM) (type output))
+ (pin (num 12) (name MEM) (type output))
+ (pin (num 13) (name IOW) (type output))
+ (pin (num 14) (name IOR) (type output))
+ (pin (num 15) (name DACK3) (type passive))
+ (pin (num 16) (name DRQ3) (type passive))
+ (pin (num 17) (name DACK1) (type passive))
+ (pin (num 18) (name DRQ1) (type passive))
+ (pin (num 19) (name DACK0) (type passive))
+ (pin (num 20) (name CLK) (type output))
+ (pin (num 21) (name IRQ7) (type passive))
+ (pin (num 22) (name IRQ6) (type passive))
+ (pin (num 23) (name IRQ5) (type passive))
+ (pin (num 24) (name IRQ4) (type passive))
+ (pin (num 25) (name IRQ3) (type passive))
+ (pin (num 26) (name DACK2) (type passive))
+ (pin (num 27) (name TC) (type passive))
+ (pin (num 28) (name ALE) (type output))
+ (pin (num 29) (name VCC) (type passive))
+ (pin (num 30) (name OSC) (type output))
+ (pin (num 31) (name GND) (type passive))
+ (pin (num 32) (name IO) (type passive))
+ (pin (num 33) (name DB7) (type 3state))
+ (pin (num 34) (name DB6) (type 3state))
+ (pin (num 35) (name DB5) (type 3state))
+ (pin (num 36) (name DB4) (type 3state))
+ (pin (num 37) (name DB3) (type 3state))
+ (pin (num 38) (name DB2) (type 3state))
+ (pin (num 39) (name DB1) (type 3state))
+ (pin (num 40) (name DB0) (type 3state))
+ (pin (num 41) (name IO_READY) (type passive))
+ (pin (num 42) (name AEN) (type output))
+ (pin (num 43) (name BA19) (type 3state))
+ (pin (num 44) (name BA18) (type 3state))
+ (pin (num 45) (name BA17) (type 3state))
+ (pin (num 46) (name BA16) (type 3state))
+ (pin (num 47) (name BA15) (type 3state))
+ (pin (num 48) (name BA14) (type 3state))
+ (pin (num 49) (name BA13) (type 3state))
+ (pin (num 50) (name BA12) (type 3state))
+ (pin (num 51) (name BA11) (type 3state))
+ (pin (num 52) (name BA10) (type 3state))
+ (pin (num 53) (name BA09) (type 3state))
+ (pin (num 54) (name BA08) (type 3state))
+ (pin (num 55) (name BA07) (type 3state))
+ (pin (num 56) (name BA06) (type 3state))
+ (pin (num 57) (name BA05) (type 3state))
+ (pin (num 58) (name BA04) (type 3state))
+ (pin (num 59) (name BA03) (type 3state))
+ (pin (num 60) (name BA02) (type 3state))
+ (pin (num 61) (name BA01) (type 3state))
+ (pin (num 62) (name BA00) (type 3state))))
+ (libpart (lib conn) (part CONN_8X2)
+ (description "ymbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_8X2))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))
+ (pin (num 3) (name ~) (type passive))
+ (pin (num 4) (name ~) (type passive))
+ (pin (num 5) (name ~) (type passive))
+ (pin (num 6) (name ~) (type passive))
+ (pin (num 7) (name ~) (type passive))
+ (pin (num 8) (name ~) (type passive))
+ (pin (num 9) (name ~) (type passive))
+ (pin (num 10) (name ~) (type passive))
+ (pin (num 11) (name ~) (type passive))
+ (pin (num 12) (name ~) (type passive))
+ (pin (num 13) (name ~) (type passive))
+ (pin (num 14) (name ~) (type passive))
+ (pin (num 15) (name ~) (type passive))
+ (pin (num 16) (name ~) (type passive))))
+ (libpart (lib conn) (part DB25)
+ (footprints
+ (fp DB25*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB25))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P24) (type passive))
+ (pin (num 25) (name P25) (type passive))))
+ (libpart (lib 74xx) (part 74LS245)
+ (aliases
+ (alias 74HC245))
+ (description "Octal BUS Transceivers, 3 State out")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS245))
+ (pins
+ (pin (num 1) (name A->B) (type input))
+ (pin (num 2) (name A0) (type 3state))
+ (pin (num 3) (name A1) (type 3state))
+ (pin (num 4) (name A2) (type 3state))
+ (pin (num 5) (name A3) (type 3state))
+ (pin (num 6) (name A4) (type 3state))
+ (pin (num 7) (name A5) (type 3state))
+ (pin (num 8) (name A6) (type 3state))
+ (pin (num 9) (name A7) (type 3state))
+ (pin (num 10) (name GND) (type power_in))
+ (pin (num 11) (name B7) (type 3state))
+ (pin (num 12) (name B6) (type 3state))
+ (pin (num 13) (name B5) (type 3state))
+ (pin (num 14) (name B4) (type 3state))
+ (pin (num 15) (name B3) (type 3state))
+ (pin (num 16) (name B2) (type 3state))
+ (pin (num 17) (name B1) (type 3state))
+ (pin (num 18) (name B0) (type 3state))
+ (pin (num 19) (name CE) (type input))
+ (pin (num 20) (name VCC) (type power_in))))
+ (libpart (lib 74xx) (part 74LS541)
+ (description "8bits Buffer/Line Driver 3 state Out")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS541))
+ (pins
+ (pin (num 1) (name G1) (type input))
+ (pin (num 2) (name A0) (type input))
+ (pin (num 3) (name A1) (type input))
+ (pin (num 4) (name A2) (type input))
+ (pin (num 5) (name A3) (type input))
+ (pin (num 6) (name A4) (type input))
+ (pin (num 7) (name A5) (type input))
+ (pin (num 8) (name A6) (type input))
+ (pin (num 9) (name A7) (type input))
+ (pin (num 10) (name GND) (type power_in))
+ (pin (num 11) (name Y7) (type 3state))
+ (pin (num 12) (name Y6) (type 3state))
+ (pin (num 13) (name Y5) (type 3state))
+ (pin (num 14) (name Y4) (type 3state))
+ (pin (num 15) (name Y3) (type 3state))
+ (pin (num 16) (name Y2) (type 3state))
+ (pin (num 17) (name Y1) (type 3state))
+ (pin (num 18) (name Y0) (type 3state))
+ (pin (num 19) (name G2) (type input))
+ (pin (num 20) (name VCC) (type power_in))))
+ (libpart (lib 74xx) (part 74LS688)
+ (description "8 bits Comparator")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS688))
+ (pins
+ (pin (num 1) (name G) (type input))
+ (pin (num 2) (name P0) (type input))
+ (pin (num 3) (name R0) (type input))
+ (pin (num 4) (name P1) (type input))
+ (pin (num 5) (name R1) (type input))
+ (pin (num 6) (name P2) (type input))
+ (pin (num 7) (name R2) (type input))
+ (pin (num 8) (name P3) (type input))
+ (pin (num 9) (name R3) (type input))
+ (pin (num 10) (name GND) (type power_in))
+ (pin (num 11) (name P4) (type input))
+ (pin (num 12) (name R4) (type input))
+ (pin (num 13) (name P5) (type input))
+ (pin (num 14) (name R5) (type input))
+ (pin (num 15) (name P6) (type input))
+ (pin (num 16) (name R6) (type input))
+ (pin (num 17) (name P7) (type input))
+ (pin (num 18) (name R7) (type input))
+ (pin (num 19) (name P=R) (type output))
+ (pin (num 20) (name VCC) (type power_in))))
+ (libpart (lib memory) (part 628128)
+ (description "RAM 128 Ko")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 628128))
+ (pins
+ (pin (num 2) (name A16) (type input))
+ (pin (num 3) (name A14) (type input))
+ (pin (num 4) (name A12) (type input))
+ (pin (num 5) (name A7) (type input))
+ (pin (num 6) (name A6) (type input))
+ (pin (num 7) (name A5) (type input))
+ (pin (num 8) (name A4) (type input))
+ (pin (num 9) (name A3) (type input))
+ (pin (num 10) (name A2) (type input))
+ (pin (num 11) (name A1) (type input))
+ (pin (num 12) (name A0) (type input))
+ (pin (num 13) (name Q0) (type 3state))
+ (pin (num 14) (name Q1) (type 3state))
+ (pin (num 15) (name Q2) (type 3state))
+ (pin (num 16) (name GND) (type power_in))
+ (pin (num 17) (name Q3) (type 3state))
+ (pin (num 18) (name Q4) (type 3state))
+ (pin (num 19) (name Q5) (type 3state))
+ (pin (num 20) (name Q6) (type 3state))
+ (pin (num 21) (name Q7) (type 3state))
+ (pin (num 22) (name CS1) (type input))
+ (pin (num 23) (name A10) (type input))
+ (pin (num 24) (name OE) (type input))
+ (pin (num 25) (name A11) (type input))
+ (pin (num 26) (name A9) (type input))
+ (pin (num 27) (name A8) (type input))
+ (pin (num 28) (name A13) (type input))
+ (pin (num 29) (name WR) (type input))
+ (pin (num 30) (name CS2) (type input))
+ (pin (num 31) (name A15) (type input))
+ (pin (num 32) (name VCC) (type power_in))))
+ (libpart (lib xilinx) (part 4003APG120)
+ (aliases
+ (alias 4003PG120))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 4003APG120)
+ (field (name Footprint) PGA120))
+ (pins
+ (pin (num A1) (name NC) (type passive))
+ (pin (num A2) (name NC) (type passive))
+ (pin (num A3) (name NC) (type passive))
+ (pin (num A4) (name P) (type passive))
+ (pin (num A5) (name P) (type passive))
+ (pin (num A6) (name P) (type passive))
+ (pin (num A7) (name P) (type passive))
+ (pin (num A8) (name P) (type passive))
+ (pin (num A9) (name P) (type passive))
+ (pin (num A10) (name P) (type passive))
+ (pin (num A11) (name P) (type passive))
+ (pin (num A12) (name SGCK2) (type passive))
+ (pin (num A13) (name HDC) (type output))
+ (pin (num B1) (name NC) (type passive))
+ (pin (num B2) (name PGCK1/A16) (type passive))
+ (pin (num B3) (name P/A17) (type passive))
+ (pin (num B4) (name TCK) (type passive))
+ (pin (num B5) (name TMS) (type passive))
+ (pin (num B6) (name P) (type passive))
+ (pin (num B7) (name GND) (type power_in))
+ (pin (num B8) (name P) (type passive))
+ (pin (num B9) (name P) (type passive))
+ (pin (num B10) (name NC) (type passive))
+ (pin (num B11) (name M1) (type input))
+ (pin (num B12) (name M2) (type BiDi))
+ (pin (num B13) (name NC) (type passive))
+ (pin (num C1) (name P/A12) (type passive))
+ (pin (num C2) (name P/A14) (type passive))
+ (pin (num C3) (name VCC) (type power_in))
+ (pin (num C4) (name GND) (type power_in))
+ (pin (num C5) (name TDI) (type passive))
+ (pin (num C6) (name P) (type passive))
+ (pin (num C8) (name P) (type passive))
+ (pin (num C9) (name P) (type passive))
+ (pin (num C10) (name GND) (type power_in))
+ (pin (num C11) (name M0) (type input))
+ (pin (num C12) (name PGCK2) (type passive))
+ (pin (num C13) (name LDC) (type output))
+ (pin (num D1) (name P/A11) (type passive))
+ (pin (num D2) (name P/A13) (type passive))
+ (pin (num D3) (name SGCK1) (type passive))
+ (pin (num D11) (name VCC) (type power_in))
+ (pin (num D12) (name P) (type passive))
+ (pin (num D13) (name P) (type passive))
+ (pin (num E1) (name P) (type passive))
+ (pin (num E2) (name NC) (type passive))
+ (pin (num E3) (name NC) (type passive))
+ (pin (num E11) (name NC) (type passive))
+ (pin (num E12) (name P) (type passive))
+ (pin (num E13) (name P) (type passive))
+ (pin (num F1) (name P/A9) (type passive))
+ (pin (num F2) (name P) (type passive))
+ (pin (num F3) (name P/A10) (type passive))
+ (pin (num F11) (name P) (type passive))
+ (pin (num F12) (name P) (type BiDi))
+ (pin (num F13) (name INIT) (type BiDi))
+ (pin (num G1) (name P/A8) (type passive))
+ (pin (num G2) (name GND) (type power_in))
+ (pin (num G11) (name GND) (type power_in))
+ (pin (num G12) (name VCC) (type power_in))
+ (pin (num G13) (name P) (type passive))
+ (pin (num H1) (name P/A7) (type passive))
+ (pin (num H2) (name P/A6) (type passive))
+ (pin (num H3) (name P) (type passive))
+ (pin (num H11) (name P) (type passive))
+ (pin (num H12) (name P) (type passive))
+ (pin (num H13) (name P) (type passive))
+ (pin (num J1) (name P) (type passive))
+ (pin (num J2) (name P/A4) (type passive))
+ (pin (num J3) (name NC) (type passive))
+ (pin (num J11) (name NC) (type passive))
+ (pin (num J12) (name P) (type passive))
+ (pin (num J13) (name P) (type passive))
+ (pin (num K1) (name P/A5) (type passive))
+ (pin (num K2) (name P/CS1/A2) (type passive))
+ (pin (num K3) (name GND) (type power_in))
+ (pin (num K11) (name GND) (type power_in))
+ (pin (num K12) (name NC) (type passive))
+ (pin (num K13) (name P) (type passive))
+ (pin (num L1) (name P/A3) (type passive))
+ (pin (num L2) (name P/A0/WS) (type passive))
+ (pin (num L3) (name VCC) (type power_in))
+ (pin (num L4) (name CCLK) (type input))
+ (pin (num L5) (name NC) (type passive))
+ (pin (num L6) (name P/D2) (type passive))
+ (pin (num L7) (name GND) (type power_in))
+ (pin (num L8) (name P) (type passive))
+ (pin (num L9) (name NC) (type passive))
+ (pin (num L10) (name VCC) (type power_in))
+ (pin (num L11) (name DONE) (type output))
+ (pin (num L12) (name SGCK3) (type passive))
+ (pin (num L13) (name P) (type passive))
+ (pin (num M1) (name NC) (type passive))
+ (pin (num M2) (name TDO) (type passive))
+ (pin (num M3) (name DOUT-SGKC4) (type output))
+ (pin (num M4) (name NC) (type passive))
+ (pin (num M5) (name P/D1) (type passive))
+ (pin (num M6) (name P) (type passive))
+ (pin (num M7) (name VCC) (type power_in))
+ (pin (num M8) (name P/D4) (type passive))
+ (pin (num M9) (name P/D5) (type passive))
+ (pin (num M10) (name P/D6) (type passive))
+ (pin (num M11) (name P/D7) (type passive))
+ (pin (num M12) (name PROG) (type input))
+ (pin (num N1) (name PGCK4/A1) (type passive))
+ (pin (num N2) (name DIN) (type BiDi))
+ (pin (num N3) (name P/RCLK/BSY/RDY) (type passive))
+ (pin (num N4) (name P) (type passive))
+ (pin (num N5) (name P) (type passive))
+ (pin (num N6) (name P/RS) (type passive))
+ (pin (num N7) (name P/D3) (type passive))
+ (pin (num N8) (name P) (type passive))
+ (pin (num N9) (name P) (type passive))
+ (pin (num N10) (name P/CS0) (type passive))
+ (pin (num N11) (name P) (type passive))
+ (pin (num N12) (name NC) (type passive))
+ (pin (num N13) (name PGCK3) (type passive))))
+ (libpart (lib special) (part EP600)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) EP600))
+ (pins
+ (pin (num 1) (name CLK1) (type input))
+ (pin (num 2) (name IN2) (type input))
+ (pin (num 3) (name I/O3) (type passive))
+ (pin (num 4) (name I/O4) (type passive))
+ (pin (num 5) (name I/O5) (type passive))
+ (pin (num 6) (name I/O6) (type passive))
+ (pin (num 7) (name I/O7) (type passive))
+ (pin (num 8) (name I/O8) (type passive))
+ (pin (num 9) (name I/O9) (type passive))
+ (pin (num 10) (name I/O10) (type passive))
+ (pin (num 11) (name IN11) (type input))
+ (pin (num 12) (name GND) (type input))
+ (pin (num 13) (name CLK2) (type input))
+ (pin (num 14) (name IN14) (type input))
+ (pin (num 15) (name I/O15) (type passive))
+ (pin (num 16) (name I/O16) (type passive))
+ (pin (num 17) (name I/O17) (type passive))
+ (pin (num 18) (name I/O18) (type passive))
+ (pin (num 19) (name I/O19) (type passive))
+ (pin (num 20) (name I/O20) (type passive))
+ (pin (num 21) (name I/O21) (type passive))
+ (pin (num 22) (name I/O22) (type passive))
+ (pin (num 23) (name IN23) (type input))
+ (pin (num 24) (name VCC) (type input)))))
+ (libraries
+ (library (logical device)
+ (uri f:\kicad\share\library\device.lib))
+ (library (logical conn)
+ (uri f:\kicad\share\library\conn.lib))
+ (library (logical 74xx)
+ (uri f:\kicad\share\library\74xx.lib))
+ (library (logical memory)
+ (uri f:\kicad\share\library\memory.lib))
+ (library (logical xilinx)
+ (uri f:\kicad\share\library\xilinx.lib))
+ (library (logical special)
+ (uri f:\kicad\share\library\special.lib)))
+ (nets
+ (net (code 1) (name "Net-(BUS1-Pad28)")
+ (node (ref BUS1) (pin 28)))
+ (net (code 2) (name "Net-(BUS1-Pad27)")
+ (node (ref BUS1) (pin 27)))
+ (net (code 3) (name "Net-(BUS1-Pad26)")
+ (node (ref BUS1) (pin 26)))
+ (net (code 4) (name "Net-(BUS1-Pad25)")
+ (node (ref BUS1) (pin 25)))
+ (net (code 5) (name "Net-(BUS1-Pad24)")
+ (node (ref BUS1) (pin 24)))
+ (net (code 6) (name "Net-(BUS1-Pad23)")
+ (node (ref BUS1) (pin 23)))
+ (net (code 7) (name "Net-(BUS1-Pad22)")
+ (node (ref BUS1) (pin 22)))
+ (net (code 8) (name "Net-(BUS1-Pad21)")
+ (node (ref BUS1) (pin 21)))
+ (net (code 9) (name "Net-(BUS1-Pad20)")
+ (node (ref BUS1) (pin 20)))
+ (net (code 10) (name "Net-(BUS1-Pad19)")
+ (node (ref BUS1) (pin 19)))
+ (net (code 11) (name "Net-(BUS1-Pad18)")
+ (node (ref BUS1) (pin 18)))
+ (net (code 12) (name "Net-(BUS1-Pad17)")
+ (node (ref BUS1) (pin 17)))
+ (net (code 13) (name "Net-(BUS1-Pad16)")
+ (node (ref BUS1) (pin 16)))
+ (net (code 14) (name "Net-(BUS1-Pad15)")
+ (node (ref BUS1) (pin 15)))
+ (net (code 15) (name /PC-RST)
+ (node (ref BUS1) (pin 2))
+ (node (ref U3) (pin 8))
+ (node (ref U3) (pin 9)))
+ (net (code 16) (name /PC-IOR)
+ (node (ref BUS1) (pin 14))
+ (node (ref U3) (pin 7)))
+ (net (code 17) (name /PC-IOW)
+ (node (ref U3) (pin 6))
+ (node (ref BUS1) (pin 13)))
+ (net (code 18) (name "Net-(BUS1-Pad12)")
+ (node (ref BUS1) (pin 12)))
+ (net (code 19) (name /PC-A1)
+ (node (ref BUS1) (pin 61))
+ (node (ref U9) (pin N4))
+ (node (ref U3) (pin 2)))
+ (net (code 20) (name /PC-A0)
+ (node (ref U9) (pin M6))
+ (node (ref BUS1) (pin 62))
+ (node (ref U3) (pin 3)))
+ (net (code 21) (name GND)
+ (node (ref P1) (pin 18))
+ (node (ref U9) (pin G11))
+ (node (ref U9) (pin K11))
+ (node (ref U9) (pin C10))
+ (node (ref U9) (pin G2))
+ (node (ref BUS1) (pin 1))
+ (node (ref D2) (pin 2))
+ (node (ref U1) (pin 10))
+ (node (ref U9) (pin C4))
+ (node (ref P1) (pin 20))
+ (node (ref D1) (pin 2))
+ (node (ref U9) (pin K3))
+ (node (ref U8) (pin 1))
+ (node (ref U9) (pin L7))
+ (node (ref U9) (pin B7))
+ (node (ref JP1) (pin 13))
+ (node (ref JP1) (pin 11))
+ (node (ref P1) (pin 25))
+ (node (ref U5) (pin 16))
+ (node (ref P1) (pin 24))
+ (node (ref P1) (pin 23))
+ (node (ref JP1) (pin 15))
+ (node (ref U8) (pin 12))
+ (node (ref P1) (pin 22))
+ (node (ref P1) (pin 21))
+ (node (ref C1) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C6) (pin 2))
+ (node (ref U2) (pin 10))
+ (node (ref C3) (pin 2))
+ (node (ref U3) (pin 10))
+ (node (ref U3) (pin 19))
+ (node (ref U3) (pin 1))
+ (node (ref JP1) (pin 7))
+ (node (ref JP1) (pin 5))
+ (node (ref JP1) (pin 3))
+ (node (ref JP1) (pin 1))
+ (node (ref C2) (pin 2))
+ (node (ref BUS1) (pin 31))
+ (node (ref P1) (pin 19))
+ (node (ref JP1) (pin 9)))
+ (net (code 22) (name VCC)
+ (node (ref C1) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref U8) (pin 24))
+ (node (ref C5) (pin 1))
+ (node (ref U8) (pin 23))
+ (node (ref C6) (pin 1))
+ (node (ref U2) (pin 20))
+ (node (ref U9) (pin B12))
+ (node (ref U9) (pin L3))
+ (node (ref U9) (pin M7))
+ (node (ref U3) (pin 20))
+ (node (ref U9) (pin D11))
+ (node (ref U1) (pin 20))
+ (node (ref U9) (pin C11))
+ (node (ref U9) (pin B11))
+ (node (ref R3) (pin 2))
+ (node (ref BUS1) (pin 3))
+ (node (ref BUS1) (pin 29))
+ (node (ref U9) (pin G12))
+ (node (ref U5) (pin 32))
+ (node (ref U9) (pin C3))
+ (node (ref U9) (pin L10))
+ (node (ref RR1) (pin 1)))
+ (net (code 23) (name /PC-AEN)
+ (node (ref U9) (pin N10))
+ (node (ref BUS1) (pin 42))
+ (node (ref U2) (pin 1)))
+ (net (code 24) (name "Net-(BUS1-Pad43)")
+ (node (ref BUS1) (pin 43)))
+ (net (code 25) (name "Net-(BUS1-Pad11)")
+ (node (ref BUS1) (pin 11)))
+ (net (code 26) (name "Net-(BUS1-Pad10)")
+ (node (ref BUS1) (pin 10)))
+ (net (code 27) (name "Net-(BUS1-Pad9)")
+ (node (ref BUS1) (pin 9)))
+ (net (code 28) (name "Net-(BUS1-Pad8)")
+ (node (ref BUS1) (pin 8)))
+ (net (code 29) (name "Net-(BUS1-Pad7)")
+ (node (ref BUS1) (pin 7)))
+ (net (code 30) (name "Net-(BUS1-Pad6)")
+ (node (ref BUS1) (pin 6)))
+ (net (code 31) (name "Net-(BUS1-Pad5)")
+ (node (ref BUS1) (pin 5)))
+ (net (code 32) (name "Net-(BUS1-Pad4)")
+ (node (ref BUS1) (pin 4)))
+ (net (code 33) (name "Net-(BUS1-Pad50)")
+ (node (ref BUS1) (pin 50)))
+ (net (code 34) (name "Net-(BUS1-Pad49)")
+ (node (ref BUS1) (pin 49)))
+ (net (code 35) (name "Net-(BUS1-Pad48)")
+ (node (ref BUS1) (pin 48)))
+ (net (code 36) (name "Net-(BUS1-Pad47)")
+ (node (ref BUS1) (pin 47)))
+ (net (code 37) (name "Net-(BUS1-Pad46)")
+ (node (ref BUS1) (pin 46)))
+ (net (code 38) (name "Net-(BUS1-Pad45)")
+ (node (ref BUS1) (pin 45)))
+ (net (code 39) (name "Net-(BUS1-Pad44)")
+ (node (ref BUS1) (pin 44)))
+ (net (code 40) (name "Net-(BUS1-Pad41)")
+ (node (ref BUS1) (pin 41)))
+ (net (code 41) (name "Net-(BUS1-Pad32)")
+ (node (ref BUS1) (pin 32)))
+ (net (code 42) (name "Net-(BUS1-Pad30)")
+ (node (ref BUS1) (pin 30)))
+ (net (code 43) (name "Net-(U9-PadB5)")
+ (node (ref U9) (pin B5)))
+ (net (code 44) (name "Net-(U9-PadA3)")
+ (node (ref U9) (pin A3)))
+ (net (code 45) (name "Net-(U9-PadB4)")
+ (node (ref U9) (pin B4)))
+ (net (code 46) (name "Net-(U9-PadC5)")
+ (node (ref U9) (pin C5)))
+ (net (code 47) (name "Net-(U9-PadA2)")
+ (node (ref U9) (pin A2)))
+ (net (code 48) (name "Net-(U9-PadA1)")
+ (node (ref U9) (pin A1)))
+ (net (code 49) (name "Net-(U9-PadB1)")
+ (node (ref U9) (pin B1)))
+ (net (code 50) (name "Net-(U9-PadE3)")
+ (node (ref U9) (pin E3)))
+ (net (code 51) (name "Net-(U9-PadE2)")
+ (node (ref U9) (pin E2)))
+ (net (code 52) (name /MA8)
+ (node (ref U9) (pin G1))
+ (node (ref U5) (pin 27)))
+ (net (code 53) (name /MD4)
+ (node (ref U9) (pin A7))
+ (node (ref U5) (pin 18)))
+ (net (code 54) (name /MA13)
+ (node (ref U5) (pin 28))
+ (node (ref U9) (pin C1)))
+ (net (code 55) (name /MD5)
+ (node (ref U9) (pin A8))
+ (node (ref U5) (pin 19)))
+ (net (code 56) (name /WR-)
+ (node (ref U5) (pin 29))
+ (node (ref U9) (pin A13)))
+ (net (code 57) (name /MD3)
+ (node (ref U5) (pin 17))
+ (node (ref U9) (pin A6)))
+ (net (code 58) (name "Net-(U8-Pad10)")
+ (node (ref U8) (pin 10)))
+ (net (code 59) (name "Net-(U8-Pad9)")
+ (node (ref U8) (pin 9)))
+ (net (code 60) (name "Net-(U8-Pad8)")
+ (node (ref U8) (pin 8)))
+ (net (code 61) (name /RSTL)
+ (node (ref U3) (pin 12))
+ (node (ref U8) (pin 11)))
+ (net (code 62) (name "Net-(U3-Pad11)")
+ (node (ref U3) (pin 11)))
+ (net (code 63) (name /MA16)
+ (node (ref U9) (pin C8))
+ (node (ref U5) (pin 2)))
+ (net (code 64) (name /MA14)
+ (node (ref U5) (pin 3))
+ (node (ref U9) (pin D1)))
+ (net (code 65) (name /MA12)
+ (node (ref U9) (pin F3))
+ (node (ref U5) (pin 4)))
+ (net (code 66) (name /MA7)
+ (node (ref U5) (pin 5))
+ (node (ref U9) (pin B3)))
+ (net (code 67) (name /MA6)
+ (node (ref U9) (pin F2))
+ (node (ref U5) (pin 6)))
+ (net (code 68) (name /MA5)
+ (node (ref U9) (pin C13))
+ (node (ref U5) (pin 7)))
+ (net (code 69) (name /MA4)
+ (node (ref U9) (pin E1))
+ (node (ref U5) (pin 8)))
+ (net (code 70) (name /MA3)
+ (node (ref U5) (pin 9))
+ (node (ref U9) (pin C2)))
+ (net (code 71) (name /MD6)
+ (node (ref U9) (pin A9))
+ (node (ref U5) (pin 20)))
+ (net (code 72) (name "Net-(R3-Pad1)")
+ (node (ref R3) (pin 1))
+ (node (ref U5) (pin 30)))
+ (net (code 73) (name /MD7)
+ (node (ref U5) (pin 21))
+ (node (ref U9) (pin B8)))
+ (net (code 74) (name /MA15)
+ (node (ref U5) (pin 31))
+ (node (ref U9) (pin F1)))
+ (net (code 75) (name /MA0)
+ (node (ref U5) (pin 12))
+ (node (ref U9) (pin A11)))
+ (net (code 76) (name /CS1-)
+ (node (ref U9) (pin A10))
+ (node (ref U5) (pin 22)))
+ (net (code 77) (name /MD0)
+ (node (ref U9) (pin C6))
+ (node (ref U5) (pin 13)))
+ (net (code 78) (name /MA10)
+ (node (ref U5) (pin 23))
+ (node (ref U9) (pin C9)))
+ (net (code 79) (name /MD1)
+ (node (ref U5) (pin 14))
+ (node (ref U9) (pin A5)))
+ (net (code 80) (name /OE-)
+ (node (ref U5) (pin 24))
+ (node (ref U9) (pin B9)))
+ (net (code 81) (name /MD2)
+ (node (ref U5) (pin 15))
+ (node (ref U9) (pin B6)))
+ (net (code 82) (name /MA11)
+ (node (ref U5) (pin 25))
+ (node (ref U9) (pin D2)))
+ (net (code 83) (name /MA9)
+ (node (ref U5) (pin 26))
+ (node (ref U9) (pin A4)))
+ (net (code 84) (name /DIR)
+ (node (ref U8) (pin 17))
+ (node (ref U1) (pin 1)))
+ (net (code 85) (name /ENBBUF)
+ (node (ref U8) (pin 22))
+ (node (ref U1) (pin 19)))
+ (net (code 86) (name /PC-RD)
+ (node (ref U8) (pin 14))
+ (node (ref U3) (pin 13))
+ (node (ref U9) (pin M8)))
+ (net (code 87) (name /SEL_LPT)
+ (node (ref U8) (pin 18))
+ (node (ref U9) (pin L2)))
+ (net (code 88) (name /PC-DB0)
+ (node (ref U1) (pin 2))
+ (node (ref BUS1) (pin 40)))
+ (net (code 89) (name /PC-DB1)
+ (node (ref U1) (pin 3))
+ (node (ref BUS1) (pin 39)))
+ (net (code 90) (name /PC-DB2)
+ (node (ref U1) (pin 4))
+ (node (ref BUS1) (pin 38)))
+ (net (code 91) (name /PC-DB3)
+ (node (ref U1) (pin 5))
+ (node (ref BUS1) (pin 37)))
+ (net (code 92) (name /PC-DB4)
+ (node (ref BUS1) (pin 36))
+ (node (ref U1) (pin 6)))
+ (net (code 93) (name /PC-DB5)
+ (node (ref U1) (pin 7))
+ (node (ref BUS1) (pin 35)))
+ (net (code 94) (name /PC-DB6)
+ (node (ref U1) (pin 8))
+ (node (ref BUS1) (pin 34)))
+ (net (code 95) (name /PC-DB7)
+ (node (ref BUS1) (pin 33))
+ (node (ref U1) (pin 9)))
+ (net (code 96) (name /D7)
+ (node (ref U9) (pin L12))
+ (node (ref U1) (pin 11)))
+ (net (code 97) (name /D6)
+ (node (ref U9) (pin M11))
+ (node (ref U1) (pin 12)))
+ (net (code 98) (name /D5)
+ (node (ref U9) (pin N11))
+ (node (ref U1) (pin 13)))
+ (net (code 99) (name /D4)
+ (node (ref U9) (pin M10))
+ (node (ref U1) (pin 14)))
+ (net (code 100) (name /D3)
+ (node (ref U9) (pin M9))
+ (node (ref U1) (pin 15)))
+ (net (code 101) (name /D2)
+ (node (ref U1) (pin 16))
+ (node (ref U9) (pin N9)))
+ (net (code 102) (name /D1)
+ (node (ref U1) (pin 17))
+ (node (ref U9) (pin N8)))
+ (net (code 103) (name "Net-(D2-Pad1)")
+ (node (ref D2) (pin 1))
+ (node (ref R5) (pin 1)))
+ (net (code 104) (name "Net-(U9-PadB13)")
+ (node (ref U9) (pin B13)))
+ (net (code 105) (name /LED2)
+ (node (ref R5) (pin 2))
+ (node (ref U9) (pin F13)))
+ (net (code 106) (name /D0)
+ (node (ref U8) (pin 21))
+ (node (ref U9) (pin N2))
+ (node (ref U1) (pin 18)))
+ (net (code 107) (name "Net-(D1-Pad1)")
+ (node (ref D1) (pin 1))
+ (node (ref R4) (pin 1)))
+ (net (code 108) (name "Net-(U3-Pad18)")
+ (node (ref U3) (pin 18))
+ (node (ref U8) (pin 3)))
+ (net (code 109) (name "Net-(U3-Pad17)")
+ (node (ref U3) (pin 17))
+ (node (ref U8) (pin 4)))
+ (net (code 110) (name "Net-(U3-Pad16)")
+ (node (ref U3) (pin 16))
+ (node (ref U8) (pin 5)))
+ (net (code 111) (name "Net-(U3-Pad15)")
+ (node (ref U3) (pin 15))
+ (node (ref U8) (pin 6)))
+ (net (code 112) (name /PC-WR)
+ (node (ref U8) (pin 7))
+ (node (ref U9) (pin N6))
+ (node (ref U3) (pin 14)))
+ (net (code 113) (name /PC-A6)
+ (node (ref U9) (pin J1))
+ (node (ref BUS1) (pin 56))
+ (node (ref U2) (pin 15)))
+ (net (code 114) (name /PC-A9)
+ (node (ref U9) (pin N7))
+ (node (ref BUS1) (pin 53))
+ (node (ref U2) (pin 6)))
+ (net (code 115) (name /PC-A8)
+ (node (ref U2) (pin 4))
+ (node (ref U9) (pin H1))
+ (node (ref BUS1) (pin 54)))
+ (net (code 116) (name /PC-A7)
+ (node (ref BUS1) (pin 55))
+ (node (ref U9) (pin H2))
+ (node (ref U2) (pin 13)))
+ (net (code 117) (name /PC-A5)
+ (node (ref BUS1) (pin 57))
+ (node (ref U2) (pin 2))
+ (node (ref U9) (pin J2)))
+ (net (code 118) (name /PC-A4)
+ (node (ref BUS1) (pin 58))
+ (node (ref U9) (pin H3))
+ (node (ref U2) (pin 17)))
+ (net (code 119) (name /PC-A3)
+ (node (ref U3) (pin 5))
+ (node (ref U9) (pin K2))
+ (node (ref BUS1) (pin 59)))
+ (net (code 120) (name /PC-A2)
+ (node (ref U3) (pin 4))
+ (node (ref U9) (pin M5))
+ (node (ref BUS1) (pin 60)))
+ (net (code 121) (name /PC-A11)
+ (node (ref U2) (pin 8))
+ (node (ref BUS1) (pin 51)))
+ (net (code 122) (name /PC-A10)
+ (node (ref U9) (pin L8))
+ (node (ref BUS1) (pin 52))
+ (node (ref U2) (pin 11)))
+ (net (code 123) (name /LED1)
+ (node (ref U9) (pin M3))
+ (node (ref R4) (pin 2)))
+ (net (code 124) (name "Net-(U9-PadM2)")
+ (node (ref U9) (pin M2)))
+ (net (code 125) (name /MA2)
+ (node (ref U9) (pin D3))
+ (node (ref U5) (pin 10)))
+ (net (code 126) (name "Net-(U9-PadJ3)")
+ (node (ref U9) (pin J3)))
+ (net (code 127) (name "Net-(U9-PadN3)")
+ (node (ref U9) (pin N3)))
+ (net (code 128) (name /CLKLCA)
+ (node (ref U8) (pin 16))
+ (node (ref U9) (pin L4))
+ (node (ref U9) (pin M4)))
+ (net (code 129) (name "Net-(U9-PadL5)")
+ (node (ref U9) (pin L5)))
+ (net (code 130) (name "Net-(U9-PadN5)")
+ (node (ref U9) (pin N5)))
+ (net (code 131) (name /MATCHL)
+ (node (ref U2) (pin 19))
+ (node (ref U8) (pin 2)))
+ (net (code 132) (name "Net-(U9-PadM1)")
+ (node (ref U9) (pin M1)))
+ (net (code 133) (name "Net-(U9-PadN1)")
+ (node (ref U9) (pin N1)))
+ (net (code 134) (name /MA1)
+ (node (ref U5) (pin 11))
+ (node (ref U9) (pin B2)))
+ (net (code 135) (name "Net-(U9-PadE11)")
+ (node (ref U9) (pin E11)))
+ (net (code 136) (name "Net-(U9-PadJ11)")
+ (node (ref U9) (pin J11)))
+ (net (code 137) (name /DONE)
+ (node (ref U8) (pin 20))
+ (node (ref U9) (pin L11)))
+ (net (code 138) (name "Net-(U9-PadK12)")
+ (node (ref U9) (pin K12)))
+ (net (code 139) (name /PROG-)
+ (node (ref U8) (pin 19))
+ (node (ref U9) (pin M12)))
+ (net (code 140) (name "Net-(U9-PadN12)")
+ (node (ref U9) (pin N12)))
+ (net (code 141) (name "Net-(U9-PadL6)")
+ (node (ref U9) (pin L6)))
+ (net (code 142) (name "Net-(U9-PadL9)")
+ (node (ref U9) (pin L9)))
+ (net (code 143) (name "Net-(U9-PadB10)")
+ (node (ref U9) (pin B10)))
+ (net (code 144) (name /WR_REG)
+ (node (ref U8) (pin 13))
+ (node (ref U8) (pin 15)))
+ (net (code 145) (name "Net-(C2-Pad1)")
+ (node (ref X1) (pin 1))
+ (node (ref C2) (pin 1))
+ (node (ref R1) (pin 2))
+ (node (ref U9) (pin L1)))
+ (net (code 146) (name "Net-(C3-Pad1)")
+ (node (ref X1) (pin 2))
+ (node (ref R1) (pin 1))
+ (node (ref C3) (pin 1))
+ (node (ref R2) (pin 2)))
+ (net (code 147) (name /BIT6)
+ (node (ref U9) (pin J13))
+ (node (ref P1) (pin 8)))
+ (net (code 148) (name /BIT7)
+ (node (ref P1) (pin 9))
+ (node (ref U9) (pin H11)))
+ (net (code 149) (name /ACK)
+ (node (ref P1) (pin 10))
+ (node (ref U9) (pin K13)))
+ (net (code 150) (name /BUST+)
+ (node (ref U9) (pin J12))
+ (node (ref P1) (pin 11)))
+ (net (code 151) (name /PE+)
+ (node (ref P1) (pin 12))
+ (node (ref U9) (pin L13)))
+ (net (code 152) (name /SLCT+)
+ (node (ref P1) (pin 13))
+ (node (ref U9) (pin N13)))
+ (net (code 153) (name /BIT5)
+ (node (ref U9) (pin H12))
+ (node (ref P1) (pin 7)))
+ (net (code 154) (name /8MH-OUT)
+ (node (ref R2) (pin 1))
+ (node (ref U9) (pin K1)))
+ (net (code 155) (name "Net-(RR1-Pad10)")
+ (node (ref RR1) (pin 10)))
+ (net (code 156) (name /STROBE)
+ (node (ref P1) (pin 1))
+ (node (ref U9) (pin A12)))
+ (net (code 157) (name /AUTOFD-)
+ (node (ref P1) (pin 14))
+ (node (ref U9) (pin C12)))
+ (net (code 158) (name /ERROR-)
+ (node (ref P1) (pin 15))
+ (node (ref U9) (pin D13)))
+ (net (code 159) (name /BIT2)
+ (node (ref U9) (pin F12))
+ (node (ref P1) (pin 4)))
+ (net (code 160) (name /INIT-)
+ (node (ref P1) (pin 16))
+ (node (ref U9) (pin E12)))
+ (net (code 161) (name /SLCTIN-)
+ (node (ref P1) (pin 17))
+ (node (ref U9) (pin F11)))
+ (net (code 162) (name /BIT0)
+ (node (ref U9) (pin D12))
+ (node (ref P1) (pin 2)))
+ (net (code 163) (name /BIT1)
+ (node (ref P1) (pin 3))
+ (node (ref U9) (pin E13)))
+ (net (code 164) (name /BIT3)
+ (node (ref U9) (pin G13))
+ (node (ref P1) (pin 5)))
+ (net (code 165) (name /BIT4)
+ (node (ref P1) (pin 6))
+ (node (ref U9) (pin H13)))
+ (net (code 166) (name /REF10)
+ (node (ref U2) (pin 12))
+ (node (ref JP1) (pin 2))
+ (node (ref RR1) (pin 9)))
+ (net (code 167) (name /REF11)
+ (node (ref JP1) (pin 4))
+ (node (ref RR1) (pin 8))
+ (node (ref U2) (pin 9)))
+ (net (code 168) (name /REF7)
+ (node (ref JP1) (pin 6))
+ (node (ref RR1) (pin 7))
+ (node (ref U2) (pin 14)))
+ (net (code 169) (name /REF9)
+ (node (ref JP1) (pin 8))
+ (node (ref U2) (pin 7))
+ (node (ref RR1) (pin 6)))
+ (net (code 170) (name /REF6)
+ (node (ref U2) (pin 16))
+ (node (ref RR1) (pin 5))
+ (node (ref JP1) (pin 10)))
+ (net (code 171) (name /REF8)
+ (node (ref RR1) (pin 4))
+ (node (ref U2) (pin 5))
+ (node (ref JP1) (pin 12)))
+ (net (code 172) (name /REF4)
+ (node (ref RR1) (pin 3))
+ (node (ref U2) (pin 18))
+ (node (ref JP1) (pin 14)))
+ (net (code 173) (name /REF5)
+ (node (ref JP1) (pin 16))
+ (node (ref RR1) (pin 2))
+ (node (ref U2) (pin 3))))) \ No newline at end of file
diff --git a/demos/interf_u/interf_u.pro b/demos/interf_u/interf_u.pro
new file mode 100644
index 0000000..973db3f
--- /dev/null
+++ b/demos/interf_u/interf_u.pro
@@ -0,0 +1,40 @@
+update=18/05/2015 09:03:59
+version=1
+last_client=kicad
+[common]
+NetDir=
+[general]
+version=1
+RootSch=interf_u.sch
+BoardNm=interf_u.brd
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[pcbnew]
+version=1
+PageLayoutDescrFile=pagelayout_logo.kicad_wks
+LastNetListRead=interf_u.net
+UseCmpFile=0
+PadDrill=0.89916
+PadDrillOvalY=0.89916
+PadSizeH=1.397
+PadSizeV=1.397
+PcbTextSizeV=2.032
+PcbTextSizeH=1.524
+PcbTextThickness=0.4318
+ModuleTextSizeV=1.524
+ModuleTextSizeH=1.524
+ModuleTextSizeThickness=0.3048
+SolderMaskClearance=0.254
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.381
+BoardOutlineThickness=0.127
+ModuleOutlineThickness=0.381
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=interf_u_schlib
+LibName2=power
diff --git a/demos/interf_u/interf_u.sch b/demos/interf_u/interf_u.sch
new file mode 100644
index 0000000..4e30ece
--- /dev/null
+++ b/demos/interf_u/interf_u.sch
@@ -0,0 +1,2876 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:image
+LIBS:interf_u-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 1 1
+Title "UNIVERSAL INTERFACE"
+Date "Sun 22 Mar 2015"
+Rev "2B"
+Comp "KICAD"
+Comment1 "Comment 1"
+Comment2 "Comment 2"
+Comment3 "Comment 3"
+Comment4 "Comment 4"
+$EndDescr
+$Bitmap
+Pos 11050 10550
+Scale 1.000000
+Data
+89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 E5 00 00 01 0E 08 02 00 00 00 F9 5F 47
+B4 00 00 00 03 73 42 49 54 08 08 08 DB E1 4F E0 00 00 20 00 49 44 41 54 78 9C EC BD 77 94 5D 47
+95 2E BE 77 55 9D 7C 73 DF CE 92 5A DD 8A B6 25 27 D9 20 CB 11 4C 70 C2 66 86 E1 0D 03 CC 10 DF
+03 33 F3 18 0C 4C 78 C3 0C B3 CC 90 7F 0C F0 06 93 6D 78 6B F0 44 C6 30 38 DB 60 92 2D 63 6C 2C
+5B B6 92 15 5A B9 83 BA FB 76 F7 8D 27 55 ED DF 1F D5 7D 75 D5 2D CB CA A9 FB 5B 5A 5A F7 9C 5B
+A7 AA EE E9 EF EC B3 53 ED C2 DF FD EE 77 30 8B 59 9C 21 C0 20 08 4E F5 1C 66 31 8B C3 C2 8B 2F
+BE C8 4E F5 1C 66 31 8B 23 C0 2C 5F 67 71 26 41 D4 3F BD F8 E2 8B A7 70 1E B3 98 C5 CB 61 F9 F2
+E5 F5 CF E2 E5 BE 98 C5 2C 4E 07 4C 11 A3 B3 FA C0 2C CE 24 CC F2 75 16 67 12 66 F9 3A 8B 33 09
+B3 7C 9D C5 99 84 59 BE CE E2 4C 82 78 E5 26 B3 38 3C 48 29 1F 7A E8 E1 F1 F1 F1 25 4B 16 5F 72
+C9 25 A7 7A 3A 67 27 66 F9 7A C4 D8 B3 67 CF 5D 77 7D 8F 88 A6 9C 8F E3 F8 AE BB BE 37 36 36 76
+D1 45 17 5D 7F FD 75 52 CA C6 6F DF F3 9E 77 77 75 75 9D C4 69 9E 9D 98 E5 EB 61 41 29 45 44 5F
+FA D2 3F 3E F3 CC 33 C5 62 E9 F1 C7 1F 3F 44 E3 E7 9E 7B EE B9 E7 9E 9B 72 72 F5 EA 27 9B 9A 72
+44 14 C7 F1 87 3E F4 A1 6B AF 7D ED 89 9C EF 59 8B 59 BE BE 02 46 46 46 10 F1 91 47 1E FD FC E7
+BF D0 D7 D7 57 2E 97 8F AE 9F 27 9E 78 A2 FE F9 B9 E7 9E 9F 3B 77 EE B7 BE F5 8D A6 A6 26 D7 75
+13 89 C4 71 9A EC D9 8F 59 BE BE 2C F6 EE DD BB 73 E7 CE 8F 7E F4 E3 BD BD BD 71 1C D7 6A B5 E3
+D5 73 7F 7F 7F 7F 7F FF D5 57 BF 46 4A F9 F6 B7 FF D1 FB DF FF BE 85 0B 17 7A 9E 77 BC FA 3F 8B
+31 EB 1F 38 38 FA FA FA 3E F2 91 DB AE BD F6 F5 6B D7 AE 2D 95 4A C7 91 AC 75 94 4A A5 6A B5 7A
+E7 9D 77 AD 5A 75 C5 57 BE F2 D5 87 1F 7E 44 29 75 DC 47 39 CB 30 2B 5F A7 A2 52 A9 DC 71 C7 D7
+9F 79 E6 99 07 1E 78 F0 E4 8C A8 94 FA CC 67 3E 9B CF E7 FF E8 8F DE F6 C6 37 BE 71 56 B5 3D 04
+66 F9 7A 00 C2 30 FC 9B BF F9 C4 5D 77 7D 6F 8A 75 7F 12 30 56 18 FE DA D7 EE 78 E8 A1 87 97 2D
+3B EF 53 9F BA 7D D1 A2 45 27 79 02 67 04 66 F9 3A 01 DF F7 4B A5 D2 A7 3F FD 99 3B EF BC EB 94
+BC 97 15 81 60 B0 75 EB D6 AD 5B B7 F6 F6 6E FF E7 7F FE 7F AD AD AD 99 4C E6 E4 CF E4 74 C6 AC
+FE 0A 00 10 86 E1 B7 BE F5 ED 73 CE 39 EF 7B DF FB FE 49 23 2B 02 21 10 E2 C4 A1 22 90 93 23 BF
+F0 C2 0B 2B 57 AE 7A EF 7B DF 37 38 38 78 72 26 73 A6 60 96 AF 10 45 D1 D7 BF FE 8D 4F 7C E2 6F
+2B 95 4A 1C C7 27 61 44 C6 98 65 19 C9 84 93 F0 6C D3 10 9C 73 00 04 80 C6 08 84 EF FB 0F 3D F4
+F0 FF FE DF 1F EE EF EF 3F 09 53 3A 53 30 AB 0F 40 B9 5C FE F2 97 BF 72 D2 C4 2A 63 CC 71 2C CF
+73 1D C7 E1 5C 04 41 10 04 7E AD E6 87 61 A4 E2 58 1E 18 35 BB EF BE FB 95 A2 15 2B 5E F7 91 8F
+FC 89 E3 D8 27 67 86 A7 33 66 3A 5F C3 30 BC FD F6 4F 8D 8E 8E 9E 9C E1 18 82 29 D0 B6 2D C7 71
+35 38 E7 41 10 54 AB D5 6A A5 52 2C 15 03 3F 88 63 A9 1A 58 FB C0 03 0F 3C FC F0 EA C1 C1 91 2F
+7E F1 E3 A6 69 9C 9C 79 9E B6 98 D1 7C AD D5 6A FF E7 FF FC CD 77 BF 7B E7 C9 D3 59 19 33 4C CB
+B6 1D D7 75 33 99 8C E7 79 96 65 4B 29 83 C0 1F 1B 1B 73 5C B7 50 28 D4 2A A5 20 3C 80 B2 52 8E
+7D E7 3B FF E4 38 D6 E7 3E F7 D1 93 33 CF D3 16 33 9A AF DF FD EE 9D DF FE F6 77 4E DA 70 88 68
+1A 02 D9 04 1C C7 4E A5 52 C9 64 12 80 6A B5 9A 69 9A A6 69 01 40 51 70 56 2A D6 02 D9 F8 14 11
+95 D6 AE FD E5 E0 E0 3B 5A 5B 5B 4F DA 84 4F 43 CC 5C 7B AB BF BF 7F F5 EA D5 27 75 48 22 19 C7
+8C 21 E7 DC 30 0C CE 0D DB B6 3C CF CB 66 73 D9 6C 36 9F CF 27 93 49 CF 4B 78 9E E7 26 52 96 65
+30 3C E0 E2 5F FC E2 B1 0F 7F F8 CF 67 B8 F9 35 73 E5 EB B3 CF AE B9 F7 DE FB 4E E6 88 04 20 09
+A4 54 44 4A 08 61 59 13 5A AC 69 9A 88 10 04 A1 6D 9B AE EB C4 71 14 45 91 92 36 03 55 F3 A3 46
+C5 E0 DE 7B EF 43 C4 3B EE F8 5A 3E 9F 3F 99 33 3F 7D 30 43 E5 EB DE BD 7B BF F0 85 2F 9E FC 71
+89 80 73 0E 00 8C 31 CE 19 E7 9C 31 A6 0F 19 63 86 61 1A 86 61 DB B6 65 59 96 6D 1B 96 AD 1B 37
+E2 C1 07 1F EA EB EB 3B F9 33 3F 4D 30 43 F9 BA 6D DB B6 E7 9F 7F FE 94 0C 8D 08 86 61 68 9A 02
+80 94 71 A5 52 AE 56 AB BE EF 87 61 48 44 88 68 59 B6 69 5A 96 65 D9 8E C5 F9 01 7F A3 28 8A FE
+E7 FF FC C0 8E 1D 3B 4E C1 D4 4F 03 CC 44 BE 16 8B C5 0F 7C E0 D6 93 13 1A 98 02 C6 10 91 01 A0
+10 02 11 95 52 41 10 94 4A A5 B1 B1 F1 F1 F1 F1 72 B9 EC FB 7E 1C 4B 3C 00 53 3B 79 E1 85 17 3E
+F8 C1 5B A7 2F 70 98 09 98 89 7C 7D F8 E1 47 46 46 46 4E FE B8 08 60 0A D4 F2 32 8E E3 30 0C 4B
+A5 D2 F0 F0 48 A1 50 28 14 46 C6 C6 C6 CA E5 72 A5 52 2E 97 8B 51 14 49 29 A5 94 4A 4A 06 34 8D
+B1 D0 DB BB FD F1 C7 9F 98 3E C4 59 8F 19 67 6F 11 D1 37 BE F1 CD 52 A9 74 0A C6 46 24 60 4A 29
+29 65 18 46 B5 5A 4D 2B 00 B5 5A AD 56 AB F9 BE AF 03 07 52 C6 9C F3 38 8E 7D 3F 08 A3 38 8A 0F
+22 48 77 EF DE 7D F7 DD 77 5F 75 D5 95 A7 E0 57 9C 52 CC 38 BE 86 61 78 0A D3 A2 19 E7 88 A8 94
+0C 82 5A A9 84 51 14 69 41 AB A3 B2 51 14 57 AB 55 29 95 60 80 9C 07 41 A4 D4 CB BE F5 1F 7A E8
+E1 1F FF F8 BF 7F EF F7 DE 7C 52 7F C0 A9 C6 8C E3 EB ED B7 7F EA 54 95 14 27 A2 20 08 39 E7 9C
+FB 88 58 AB F9 44 10 04 35 BF 56 0B A3 58 4A 19 04 91 7E 96 62 00 40 79 68 0D 75 78 78 F8 F9 E7
+5F BC E5 96 5B 18 9B AE 2F 9C B5 98 71 7C 1D 1E 1E 3E 55 96 0A 02 70 A0 28 8A 00 20 8E 63 20 D2
+8A 41 E0 87 F2 C0 29 11 00 BC F2 24 E9 4B 5F FA EE 95 57 5E FB BA D7 AD 3A 51 33 3E FD 30 B3 EC
+AD F5 EB D7 6F D8 B0 F1 54 8D 4E 00 B1 22 24 15 45 A1 EF FB 61 14 95 4B E5 6A 2D 90 47 F9 FC A0
+52 23 0F 3E 78 CF A9 D1 C5 4F 11 66 16 5F 7F FA D3 9F 3D FB EC B3 A7 70 02 8A 20 8C 29 0C A3 6A
+D5 AF 56 FD F8 98 15 E9 EF 7D EF FB 03 03 03 C7 63 6A 67 06 66 9C 3E 70 6A A1 EB 65 E8 CF 52 1E
+07 B3 8F 88 7C DF 3F F6 7E CE 14 CC 2C F9 7A F6 21 0C C3 0F 7E F0 43 95 4A E5 54 4F E4 24 61 96
+AF 67 3C 06 06 06 66 4E E1 82 19 C4 D7 BE BE BE 93 9D 40 78 52 50 2A 95 4E 5A A9 84 53 8E 19 C4
+D7 17 5E 78 F1 FE FB 1F 38 D5 B3 00 00 E0 08 D3 B3 02 8E 1A A5 52 E9 CE 3B EF 3A 6E DD 9D DE 98
+B5 B7 A6 01 C1 E4 88 DC 00 92 24 55 A4 8E 8F BB 56 30 50 04 0C 41 11 38 8E A5 00 39 E7 8C A1 94
+DA 0B 1B 1E 17 F3 EB AC C7 2C 5F 01 00 10 91 21 18 06 47 C6 81 08 19 33 0C C3 10 5C 47 A4 42 BF
+16 49 38 46 D2 4A 02 22 20 00 22 A8 FA A1 EB 3A 86 21 92 C9 94 E7 B9 AE 9B 28 95 8A 7D 7D FD 95
+4A 45 A9 99 98 75 75 F8 98 E5 2B 30 44 CB 36 11 80 14 29 45 24 23 6E 58 8E E3 24 12 9E EB 7A BE
+EF 0F 0F ED AB 56 2A C1 61 4B 5A FD AA 9F D2 54 5F AA 14 00 90 52 50 A9 D4 AA 55 3F 08 42 A5 72
+4D 4D F9 F6 F6 B6 7C 3E BF 65 CB 96 E1 E1 91 59 CA 1E 02 33 48 7F 3D 28 38 E7 A6 C9 A5 94 51 1C
+07 61 18 04 61 18 93 EF FB E3 E3 C5 6A B5 A6 94 CA E5 72 5D F3 BB D3 D9 9C 69 70 7C 25 21 8B 93
+BA E9 14 F5 94 88 94 52 88 64 DB 86 96 AC 3A 4B AB 52 A9 F5 F7 0F 6C DD BA 75 68 68 68 CE 9C 39
+E7 9E 7B 6E 3A 95 38 8C 48 EC 54 EC DA B5 EB E7 3F FF C5 91 5E 75 26 62 56 BE 52 2C 21 8E 0F A8
+EE 46 04 BE 1F 0C 0E EE 1B 19 29 A4 D3 A9 8E 8E 8E 39 73 3A 0D C1 47 86 86 6B E1 A1 B2 BC 09 80
+00 A6 C8 47 C6 58 32 99 68 6F 6B 6F CA 65 D2 D9 8C 10 46 10 F8 85 C2 E8 8E 1D 3B 46 47 46 A2 48
+0E 0E EE AB 55 CA 41 E0 B7 B6 B6 B5 B5 B5 95 2B D5 28 3A B2 6A 73 BB 77 EF BE E7 9E 7B 5E FB DA
+D7 1C D1 55 67 22 66 3A 5F 1B AD 1C 53 B0 54 2A E5 26 12 51 14 95 CB 95 72 B9 E2 FB 41 18 8E 28
+A5 7A 7A 7A 3A E7 CC 95 52 86 43 C3 52 1E 5C FE 21 02 D1 01 64 75 2C A3 A5 AD BD A3 A3 A3 B3 B3
+23 9F 6F 4E A6 92 A9 64 D2 71 1C 00 0A C3 68 EF DE BD 1B D6 AF DF B8 69 D3 D0 D0 F0 58 B1 BC 69
+D3 E6 28 8A 33 D9 5C 3E 3F 3E 38 38 3C 73 5C AA 47 84 99 CE 57 00 20 02 CB 32 DA DA 5A 17 2E E8
+59 B4 78 51 3E DF AA 94 EC EB EB DB B4 69 D3 C6 8D 9B 8A C5 D2 D8 58 71 70 70 B0 AD AD 2D 93 CD
+15 4B 95 4A A5 7A D0 7E 84 10 71 3C 91 04 88 88 89 84 DB D3 D3 B3 78 F1 E2 7C 3E 9F C9 64 52 A9
+A4 69 9A 96 65 DB B6 0D 00 96 69 2E 58 D0 73 E9 A5 97 AE 59 B3 E6 81 07 1E D8 BE 7D 47 AD E6 F7
+F5 F5 CF 9D C3 52 A9 74 B9 5C 29 95 66 4A C8 EA 88 30 CB 57 B0 6D 73 E9 D2 25 2B 56 AC E8 E9 E9
+6E 6E 6E CE E5 9A 38 E7 E3 E3 E3 0B 16 2C 68 6F 6F 5F B3 E6 B9 BE BE BE DD BB F7 16 8B A5 44 C2
+15 82 69 39 3A 05 88 10 47 F1 E4 69 6C 6A CA 9D 73 CE D2 C5 8B 17 E7 72 B9 44 22 61 DB B6 EB 3A
+B6 ED 18 86 61 59 96 10 DC 75 1C DB B6 19 63 2D CD 79 C7 71 7E F4 A3 1F 6F DF BE 7D 7C 6C D4 AF
+55 1C C7 35 84 10 82 4F D1 52 66 01 B3 7C E5 9C F5 F4 74 5F 76 D9 65 F3 E7 CF 6F 6A 6A CA E5 B2
+99 74 C6 30 8C 5C 36 93 C9 A4 4C D3 48 A7 33 4F 3E F9 E4 F6 ED 3B 0A 85 31 3F F0 C5 44 2D C1 A9
+84 15 08 12 80 08 10 B1 A9 29 7B FE F9 E7 2F 5C B8 A0 B9 B9 D9 75 DD 4C 3A 6D DA B6 21 84 69 9A
+AE E3 18 86 00 80 54 3A 63 18 06 11 09 21 2E BE F8 A2 52 A9 FC D0 43 0F F4 F7 F5 57 6B 61 10 84
+89 64 C2 B6 CD 72 F9 F8 17 A1 3F D3 31 A3 F9 4A 44 A9 54 72 F9 F2 F3 DB DA DA 13 09 2F 9D 4E 65
+32 19 C7 71 01 20 0C 94 E7 26 5A 5A 5A 95 52 88 40 24 77 EF DA 15 85 21 08 C1 11 E2 69 F2 55 4E
+F8 56 C9 B2 CC 85 0B 17 2C 58 D0 D3 D6 D6 DA D2 D2 9A 4A 26 1D D7 B1 2D 9B 73 CE 85 30 84 60 9C
+71 2E 2C CB B4 2C BB 5A AD D6 6A 3E 10 74 77 CF 3F FF 82 0B C6 C7 C7 C3 70 5C 2A 88 82 00 D9 8C
+FE D3 BC 1C 66 F4 4D E1 9C 77 75 CD 9F 33 A7 33 99 F4 92 89 A4 6D D9 42 18 7A AD 1F 01 71 C1 93
+C9 44 AD 96 59 B2 64 71 A5 52 1E 2D 8C 8E 8E 8D FB 41 74 50 AF 96 36 B3 18 63 AD AD 2D DD DD F3
+9B 9A 9A 5A 5A 5A E7 74 76 34 E5 9B 93 C9 84 61 18 86 61 0A 21 84 10 52 4A C6 18 11 49 29 95 92
+D5 0A 23 20 21 44 4F 77 CF EE 5D BB 5E 2C AE 53 B1 F4 83 08 F0 C8 96 9B 87 61 78 3C 6E C9 E9 8E
+99 CB 57 22 F2 3C A7 B3 B3 3D 99 4C A5 D2 69 D7 F3 92 A9 64 36 9B 4D 24 3C C3 30 88 40 29 39 77
+EE DC D1 D1 D1 C2 C8 88 10 62 F3 4B 9B 0A 85 02 01 3B 84 77 D4 34 C4 D2 A5 4B 17 2D 5A D2 D3 D3
+D3 DD DD DD D9 D9 91 4E 67 4C D3 34 0C 21 04 07 40 C6 B4 FA 4B 4A A9 30 8C 5B 5A 9A 47 9B F2 8E
+E3 04 41 58 28 14 BA BA E6 EF D8 B1 73 64 64 54 C1 C1 74 E4 43 E2 DF FE ED DF 57 AD 5A F5 9E F7
+BC FB D8 EE CA E9 8E 99 CB 57 06 94 CF 65 3B 3B E7 74 74 B4 2D E8 EE 69 6D 6B 6B 6E CE 27 12 09
+D3 34 74 91 15 00 88 A2 B8 AB AB 2B 08 82 EE 9E 9E 1D 3B 76 BC B4 79 5B AD E6 1F A4 82 C5 24 52
+49 F7 DC 73 CF B9 F0 82 F3 17 2D 5E 3C 77 EE 5C CF 73 75 63 44 04 C0 28 8A 0A 85 91 30 8C 52 A9
+64 22 91 70 1C 4B 4A D9 DC 9C 4F A7 53 E9 4C 16 11 C3 30 DC DE BB 6D 6C 74 EC 28 22 5C 52 CA 99
+90 05 3B 73 F9 4A 00 E9 74 BA BB BB 6B F9 B2 E5 3D 0B 7A D2 E9 34 22 16 8B C5 30 0C 39 17 D9 6C
+86 73 A6 6D 23 D7 75 BA BB BB AF B9 E6 35 0F 3E F0 E0 B6 DE ED 88 53 6B 5A 69 20 42 BE A5 7D E9
+D2 73 E6 77 77 77 76 76 7A 9E 57 27 76 14 C5 DB B6 6D FB D9 CF 1E 5B FB DC 9A F1 62 A9 6B FE FC
+95 2B 57 5E 73 CD D5 4D 4D 39 00 70 1C 7B C9 92 45 A9 54 32 95 4A F5 F6 F6 BE B4 65 5B B5 52 3D
+C4 53 31 93 31 73 F9 CA 85 C8 E5 5B 7A 7A 16 CD EF EE CE E5 72 61 18 FE FA D7 4F 3C F8 E0 03 7D
+7D 7D 9E E7 5D 7C F1 C5 37 DC 70 7D 77 F7 7C 5D E8 4A 08 7E E1 85 17 2C 59 B2 78 FB 8E 9D 8D 9D
+20 00 67 A0 97 61 21 62 73 73 73 26 93 B1 6D 87 73 0E 40 3A 95 40 4A F9 E4 93 4F FE D3 3F FD D3
+2F 7E F1 AB 72 A9 64 59 66 2A 9D 79 EC B1 C7 D6 AC 59 F3 9E F7 BC 6B E1 C2 85 DA 65 DB D6 D6 B6
+62 C5 C5 1B 37 6E 5C BD FA C9 EA CB B8 78 67 31 43 F9 AA 1D 49 ED ED 6D 8B 16 2D CA E5 32 88 F0
+F8 E3 4F 7C E2 13 9F 58 B7 6E 9D 61 88 E6 E6 E6 A7 9F 7E FA B9 E7 D6 DC 76 DB 6D CB 96 9D A7 45
+5D 6B 6B EB B9 CB CE FF E5 AF 1E F7 FD 00 11 35 C9 4C CB 40 00 19 44 04 00 80 9E E7 69 A3 CA 34
+4D 7D 15 11 AC 5D FB E2 17 BF F8 FF FD EC 67 8F 85 61 94 48 24 56 AE 7C 55 77 77 F7 EE DD 7B EF
+BB EF BE E1 E1 E1 3F FF F3 3F 5F B2 64 31 63 88 08 2D 2D 2D 97 5E 7A 49 67 67 7B 5F DF 8C 2E F2
+7A 08 CC A8 7C 17 D6 F8 7C 5A 96 D5 D5 D5 D5 D2 D2 4C 04 7B F6 EC BD EB AE BB D6 AC 79 4E C5 F1
+92 C5 8B 6F BC F1 C6 E5 CB 97 AF 5D FB C2 77 BF 7B E7 9E 3D 7D 00 40 44 B6 6D 9D 7B CE D2 54 C2
+B5 6D D3 32 05 67 40 00 8C 71 C6 26 6A 0D 32 04 CB 32 85 10 8D E5 07 F7 ED 1B BA FB 07 3F 78 EC
+B1 C7 A2 28 66 0C 39 2A CE 79 57 57 D7 6B 5E 73 D5 45 17 5D F4 C4 EA D5 77 DF 7D F7 F0 F0 88 36
+AE 84 10 F3 E7 77 B5 B5 B5 71 3E AB 0C 1C 1C 33 8A AF 1E 40 7E B2 18 05 19 86 99 4E A7 39 E7 9C
+B3 2D 5B B6 3C F9 E4 6F 00 40 12 04 61 90 4A 25 17 2D 5A 34 67 CE 9C FB EE BB EF D1 47 1F 0D C3
+08 00 18 63 CD CD CD A6 ED 00 91 30 0C C3 B4 6C CB 4C 26 13 8E EB 01 20 90 62 0C 6C 7B 7F F9 4B
+1D 06 5B B3 E6 B9 FF FE C9 7D 41 10 69 93 AB 5C 0D D6 AE 5D FB F4 D3 CF 04 41 B8 78 F1 E2 96 7C
+D3 4F FE FB BF 5F 78 E1 85 C9 1A 2D D4 D4 94 EF EA 9A 9F 48 24 66 D5 D7 83 62 46 F1 35 04 38 60
+37 78 C6 38 11 55 AB B5 DF FC E6 37 C3 C3 C3 FA 0D BE 67 4F FF BA 75 EB 89 28 9F CF C7 71 7C FF
+FD F7 EB DD 63 E2 58 9A A6 E9 79 AE 69 08 D7 75 52 A9 44 67 67 47 77 77 CF E2 C5 8B 96 2E 5D D2
+D2 D2 8C C8 94 94 08 75 A2 61 B1 58 FC F9 CF 1F DB BD 7B 77 5D DC 12 D1 E0 E0 D0 EF 7E F7 CC B6
+6D BD D5 6A 35 D7 94 EB EF EF 5B BB 76 AD EF FB 5A C7 48 24 12 0B 17 2E 74 5D 77 46 56 CB 7C 65
+CC 28 FD D5 07 28 4D A6 53 83 10 DC 34 0D C6 98 94 72 ED DA 17 A3 68 C2 3F 5F 2A 95 B6 6D DB 96
+C9 64 6C DB 6E 6E CE F7 F6 6E DB BD 7B 57 6B 6B 0B 00 E8 72 D8 DC 30 88 48 7F 56 4A 79 5E C2 B6
+9D 64 2A 3D 32 BC 4F 2A 15 37 6C 3C 3B 3C 5C F8 ED 6F 9F 56 4A 35 1A FB A6 69 04 41 B0 61 C3 FA
+4A A5 4C 84 86 69 6D DC B8 71 74 74 BC BD DD 06 00 A5 54 47 47 87 69 9A 75 9F DA 2C 1A 31 83 F8
+6A 9A 96 69 5A F5 38 10 11 11 29 C6 58 1C CB B1 B1 B1 FD 8B 02 88 06 07 06 B6 6D DB B6 68 D1 C2
+44 22 B9 79 F3 96 0D 1B 36 5C 72 C9 25 52 CA 6A B5 E6 FB 41 10 84 61 18 81 52 95 72 65 68 68 C8
+30 0C C7 71 3C CF 2B 57 AA DB B6 F5 F6 F7 F7 2D 5D BA 34 8E 63 21 78 A5 52 1E 18 18 A8 D3 4E EF
+14 87 88 52 C6 5B B6 6C E9 EB EB 6B 6F 6F B7 2C 6B 70 70 B0 EE 3A 25 22 6D B4 9D FC FB 73 46 60
+06 DD 97 D7 BE F6 35 7F F1 17 1F FF CC 67 3E AB 0F 95 A2 30 8C 82 20 30 0C C3 71 6C C7 31 03 3F
+8C 15 11 80 5F 2D 17 0A 23 43 43 99 E1 E1 91 6A B5 BA 67 CF 5E A5 48 4A B9 75 EB 96 D2 F8 78 B5
+E2 C3 A4 7F 40 43 08 9E 4A 25 A3 28 2C 97 CB 3F FB D9 63 8B 17 2F C9 E5 72 A6 69 48 19 2B B5 5F
+DC 2A A5 74 4D 42 00 20 A2 4A A5 EA FB B5 5A 4D 6F 6E 18 02 00 22 48 29 EB 9B 1A CC 62 3A 66 10
+5F 01 20 91 48 D4 3F EB D2 40 44 64 9A 46 47 47 07 E7 9C 70 22 F1 2A 92 AA 50 18 CD 64 0A 51 14
+10 51 14 45 51 24 B7 F5 6E FF E9 CF 1E AB D4 AA A6 01 96 41 A6 00 02 24 05 31 A1 54 52 46 25 19
+51 10 51 EF F6 ED 3B 77 EE 58 B2 64 09 91 16 E1 07 E8 A1 8D 6B B3 A4 54 A3 A3 45 A5 14 E7 CC 30
+F4 C6 85 DA 05 36 AB 09 BC 2C 66 16 5F EB 40 C4 28 0A 4B A5 62 18 86 4A B9 F3 BB BA C2 30 AA AF
+35 88 62 2A 14 46 65 FC 52 18 46 4A 11 00 8D 8D 0E FD EC A1 7B CA 03 BF BB FA BC 68 4E 0B 4B 27
+30 61 83 04 0C 62 C5 41 54 82 B8 1A A9 F1 71 E8 DD CB 54 30 B4 F6 85 75 2B 56 5C 92 CD 66 12 89
+A4 6D 3B AF 34 17 6A 6A CA 7B 9E AB 0F 94 52 D5 6A 65 76 71 C1 CB 61 86 F2 15 00 7C DF 1F 1A 1A
+F2 7D 5F 08 B1 FC FC E5 AE E7 F9 C1 58 FD 5B 29 D5 68 61 9C 10 2C DB A9 55 8B 2F AE FE 21 1B F8
+E1 FB 5E 5B E8 9A CF F2 4D 9C 33 E2 0A 09 A9 A6 98 67 00 49 21 15 55 03 D8 3D 44 2F ED DE 37 32
+FA D3 A7 1E 6F CD E5 DE 91 48 24 96 2E 5D BA 69 D3 4B 87 90 97 8C B1 45 8B 16 26 12 09 2D 56 95
+52 E3 E3 C5 20 08 4E CA 3D 38 F3 30 43 F9 AA 93 4B FA FB 07 2A 95 0A 63 6C F9 F2 E5 AB 2E BB EC
+A1 87 1E 52 B4 5F 31 55 80 1C A1 33 13 5A 43 3F F4 B7 B3 15 5D A3 1D 79 91 CA 33 8B 63 A8 20 50
+24 24 BA 40 80 40 0A 05 C3 04 51 26 87 CB 16 50 58 DE B6 6B FC CB 1B 56 6F 5F 70 E1 FB AF B9 6A
+D5 A3 0F DD 5F 0D D4 41 19 AB 94 3A E7 9C A5 AF 7B DD 6B 53 A9 24 11 49 A9 AA D5 EA F6 ED DB 4B
+A5 F2 41 5A CF 62 C6 F2 15 00 94 52 BB 76 ED DE B3 67 CF A2 45 8B 9A 9A F2 EF 7A F7 BB B6 F5 F6
+6E DD BA 2D 8A 62 1D F8 CF B8 70 61 37 BB 61 25 3B AF 73 04 02 94 8C 49 00 43 41 2C 08 10 4C 82
+88 11 11 48 89 FB 86 69 60 80 FC 1A 54 22 EC 99 C3 E6 CF C7 8B DA C6 6B E1 BF 14 5F F8 65 4F 76
+E5 AB 2E 6C 5F FD EC 9E 30 C2 29 EB BC 89 54 36 9B F9 C3 3F FC 1F 17 5D 74 91 3E 23 65 5C 28 8C
+6E DC B8 31 8E 23 9D 23 7B 6A 6E CD 69 8C 99 6C 87 E2 C0 C0 60 6F 6F 6F B9 5C E6 9C 5F 7B ED 6B
+DF F6 B6 3F 74 5D 57 29 C5 10 16 B6 E3 1F 5D C9 DE F7 7A 7E FE 3C AC 49 3E 5A 44 C7 26 37 81 88
+48 00 8A 81 34 01 4D 86 1C 11 C9 74 C8 70 21 24 18 19 55 BB F7 C9 52 19 81 B3 84 1B B7 A7 77 9D
+97 F9 E1 9F DD 3C F8 9E 1B F9 F9 DD E8 5A A0 14 28 A5 F3 5F 65 2E 97 7D EF 7B DF FD BE F7 BE 27
+99 4C 6A 6A 06 41 B8 69 D3 A6 4D 9B 5E 2A 16 CB 47 41 D6 B5 6B D7 16 0A 85 13 70 A3 4E 23 CC 5C
+F9 8A C8 8A E3 A3 1B D6 AF 1F 1E 1E 4E A5 92 E9 74 E6 7D EF 7B FF D8 D8 F8 DD 3F F8 41 BB 3B FA
+96 CB F8 B9 5D 2C 95 04 D7 52 4E 16 5C 0B DA 9A 99 67 22 23 00 09 8C 83 04 64 40 28 10 01 D3 69
+C8 A4 54 6D 1E 1B 1D 89 2D 1B 12 29 12 2E 08 99 8C 65 2D 99 92 57 5D C2 2F 3C 57 AC 7B 49 3E BD
+56 FE 66 03 6C EF 57 C5 30 31 AF 7B D1 DB FE F0 0F DE F1 F6 B7 B7 B5 B7 6B 6A 56 AB 7E A1 30 FA
+F4 D3 4F 6F DF BE FD E8 FC 03 77 DF FD 2F 6F 7B DB DB AE BD F6 B5 C7 FB 56 9D 46 98 C9 7C 05 DF
+0F D7 AD 5B BF 7B F7 EE B6 B6 36 CB B2 DA DA 5B 3F FC 67 EF 6B 31 F6 8A 7D F7 2F 6C 8D BC 04 25
+92 90 4D 82 9B 00 C3 41 0B 11 88 22 D1 B0 7D 9B 40 13 81 4C DD 9D EB 81 CC 35 A7 39 37 0C 43 30
+A3 24 64 1A 64 28 15 61 48 19 87 AE 78 35 5E 72 AE B8 A1 9F 7A 77 B3 6D 7D 98 99 B7 F8 B5 D7 BD
+3E D7 94 D3 CC D4 DB 71 6D DA B4 E9 17 BF F8 65 A9 54 9E F5 BF BE 1C 66 2E 5F 01 00 90 6D D9 BA
+75 ED DA B5 6D 6D ED 8C 09 DB 12 63 BB 9F 3D 37 F5 22 33 95 69 32 CF 81 64 02 DC 04 3A 36 E3 88
+92 13 10 10 00 2A 20 06 80 10 2B 30 2D 10 26 03 20 42 07 C0 E6 9C 0B C1 18 73 18 66 94 F2 19 35
+73 40 70 7D 45 63 4C 2A 53 A8 65 1E 76 CF A3 15 C5 A0 52 7A AC B4 66 68 CD D6 57 19 4D 2B 72 6D
+8B 18 E7 A3 63 C5 47 1F 7D 64 ED DA 17 66 9D AF 87 C0 4C E3 AB 01 20 F4 FE 56 00 80 08 E3 E3 C5
+07 1F 7C F0 DC 73 CF 4D A5 92 C5 1D 8F EE FD ED 57 8C A8 DF B6 C1 74 D0 F6 C8 70 00 6C 04 04 C9
+88 21 12 12 28 20 01 0A 80 71 E0 1C 98 C1 00 01 99 E0 02 11 05 1A 9C 94 02 11 23 64 99 B2 48 09
+84 71 60 01 27 00 09 92 90 99 2C 19 A2 6D C5 81 55 2C 45 AB E3 D2 53 C5 A1 D4 D6 B5 9D E3 BE D8
+35 1C AE 7D 7C 2B C3 18 90 4D 5F 2F 3E 0B 8D 99 C6 57 1B C0 02 88 EA 59 2F 44 B4 71 E3 A6 E7 9E
+F9 25 8E 3E 11 EE BC CF 93 7B 4D 0B 3D 0B 6C 9B 6C 13 6D 06 96 02 E0 80 04 44 A4 18 80 01 80 00
+08 08 A0 14 70 00 40 20 30 88 08 B9 04 E0 8C 31 24 17 D1 23 94 C8 7D 52 35 84 31 BD D4 00 05 20
+33 80 84 10 15 C3 E0 16 03 15 AB 5C 75 B4 B3 5A A8 14 59 87 A3 D2 97 2B 46 F0 E4 06 5E F3 E5 2C
+65 0F 8A 99 C6 D7 12 40 05 F6 A7 FC 01 11 D8 AC 3A BA EE EE 91 6A 39 9F E0 96 C5 1C 4B 09 13 B8
+40 D3 04 C6 20 24 B2 00 51 01 20 A0 02 42 90 0C 51 00 30 34 18 21 02 22 72 23 04 74 91 9B 00 8C
+93 07 C0 00 01 88 80 C6 80 57 81 98 96 E8 4C 20 60 04 66 C4 40 20 A0 A5 24 72 54 7E AC FC 54 B2
+C9 4D 8F 0F 75 34 81 6B 46 32 C4 A7 B6 70 3F 38 05 DB 87 9F FE 98 69 7C 3D 00 44 D0 9A C5 37 2E
+97 17 CD AD E4 6C 26 18 98 82 6C 81 82 93 61 00 17 40 06 0A 81 08 40 0C 48 9B 40 08 C4 80 08 0C
+A6 6B 67 32 02 0F A0 0A 40 A0 3C 44 0B B8 0B 24 01 08 A1 02 10 23 D4 00 19 70 63 62 7D 36 22 20
+30 25 81 14 00 00 43 E6 9A CC 24 52 4D DC 32 1D B7 F6 EA 65 85 BE 42 BC 7B 84 7A 07 8E A2 AE E6
+D9 8F 99 6B 87 12 41 C2 86 6B 97 C3 55 CB 44 36 C5 0C 01 A6 20 C1 81 19 64 59 28 04 32 00 93 81
+81 40 02 18 01 43 00 0E 80 C0 19 70 06 80 80 1C 01 89 F1 10 C0 46 EE 01 03 24 13 80 01 5A 00 03
+80 DB 80 0D 03 11 10 01 02 80 02 44 50 31 28 05 28 80 71 00 02 29 49 CA 48 F9 32 AE A2 93 37 92
+56 22 2F 97 CC 87 79 79 3A BA 4D 61 C7 C6 C6 5E B9 D1 99 8C 99 C5 D7 B6 B6 B6 64 32 A9 3F 73 06
+F3 5B 70 F9 3C CC 24 C8 60 64 1A 68 0A 12 06 71 03 84 89 A6 01 5C BF 7B 68 42 0D 50 08 00 40 02
+25 00 63 13 3A 05 22 12 D9 00 82 91 C9 E4 72 64 09 00 04 88 40 11 00 01 46 20 E3 89 7F 80 20 23
+60 7C 82 A9 4A 12 61 B5 8A BB 7B 55 EF 26 B9 6B C7 9E 6A 69 2F 51 28 62 60 04 C2 E0 E2 A8 FE 32
+1F F9 C8 6D 3B 77 EE 7C E5 76 67 2C 66 16 5F DF F6 B6 3F 7C F3 9B 6F 01 00 00 4C BA 6C 45 0F B4
+E7 91 23 31 06 9C 83 E0 60 70 B4 0C 34 04 70 01 C8 51 32 40 44 64 C0 00 81 00 98 7E B7 23 70 44
+86 00 80 CC E6 1C 91 65 91 E5 98 D1 0F 50 05 55 06 DA 01 6C 37 40 08 80 20 0C E0 02 90 4D EC 5E
+A0 14 C8 08 64 A8 22 55 1A 55 2F 6D 8C 7E FB 3B F9 E2 F3 6A 70 47 18 0C 16 FC D2 50 A5 02 43 63
+54 28 63 24 8F 46 C0 96 CB 65 29 CF E6 AA 86 33 55 7F 45 48 79 C6 9C A6 28 21 00 09 10 41 70 65
+08 B0 CC FD CE 4F 02 B0 90 91 76 BB 32 BD BA 16 09 41 86 C4 4C 04 06 C8 19 A0 20 70 41 59 C0 0C
+92 11 80 22 E8 47 D5 0F DC 00 00 90 F1 44 C6 80 8C 41 18 40 0A 88 94 54 32 82 9D 3B E2 BE 7E 35
+56 24 43 19 4D 69 CA 39 E4 57 43 19 E1 58 09 0B E3 38 52 9C 5A A4 7B 16 1A 33 4B BE D6 41 04 AE
+49 69 17 81 B1 89 6A 41 00 8C 23 70 42 03 98 00 C6 C0 E0 08 40 48 C0 11 15 27 00 D0 3B BF 9A 0E
+EA C7 9C 31 64 DC 64 98 43 70 48 C5 00 0A 70 17 C0 E8 C4 2E 30 44 30 91 00 4E 80 0C 64 0C 44 24
+55 61 04 9E 7D 46 BD B8 5E C6 A3 D4 6E E1 A2 56 35 2F AF 6C 13 54 4C 61 4C 11 51 D1 27 19 45 47
+E7 CF 0A 82 E0 F6 DB 3F 75 16 A7 23 CE 54 F9 0A 80 8C 84 20 04 40 04 C6 D1 34 C1 32 18 07 40 46
+0C 01 10 39 43 12 C4 14 A2 4E 9E B6 90 03 21 A1 92 C4 0C 06 00 04 29 04 0F 51 72 23 45 2A 04 DA
+8E 34 02 93 2B B3 01 19 28 39 41 5C 00 00 08 02 B6 67 57 B4 6E BD 94 35 D6 91 C2 B4 0D 9C A3 61
+02 E3 88 08 2A 22 00 32 00 88 30 22 01 10 1D C5 8F 22 A2 27 9E 58 AD 77 EF 38 3E B7 E9 34 C3 0C
+95 AF 40 E4 FB D1 B8 CF 02 89 CC 44 66 82 30 88 99 8A 09 25 26 15 02 62 C4 09 89 91 34 09 04 20
+11 72 04 36 51 67 88 1B 4C 29 8E 90 44 F0 94 2C 21 6D 45 2C 00 17 A0 08 18 07 29 41 46 04 9C 08
+08 50 29 18 19 A1 B5 4F C7 6B 7E 0B 66 0D 17 67 A9 C9 03 43 A0 C5 B9 10 04 40 2A 22 00 20 89 5C
+12 67 71 3D 02 37 6D D6 AF 2C 74 FB FA FA 3E FC E1 3F 3F 7E 77 EA F4 C2 CC 95 AF C3 25 F6 E4 16
+1C AB 50 7B 06 E6 74 52 3A 8D DC 44 61 00 E3 20 04 72 0E 9C 26 4A 0B 22 80 62 04 06 12 02 33 18
+29 42 40 40 40 06 C4 CA 44 21 60 81 A8 86 44 40 0A 10 48 29 50 A8 88 14 2A 20 16 D5 68 EF 6E DA
+B4 39 AA 0C 53 67 86 67 D3 60 9B 60 08 9D 26 20 75 49 6E 40 82 98 11 61 C5 57 7D 43 38 5E 56 13
+DA 44 03 0C 83 0B 61 48 29 75 FD 8E 43 E0 2C 2E 54 38 43 F9 8A 08 65 9F 9E DA 04 A5 71 D5 95 57
+23 25 16 4A 5C B6 00 1D 1B 84 20 C3 40 C1 10 88 88 21 72 20 06 0A 10 24 80 00 40 E0 B6 AE E5 06
+9C D7 18 C4 04 B1 60 3E C8 18 98 00 15 13 B2 58 82 8A 88 08 49 A9 7D FD D4 BB 4D 0D ED 55 36 C7
+45 CD CC 73 C9 34 10 50 C7 0E 00 39 82 02 8A 09 24 8F 63 53 4A 7F C3 2E B5 A6 97 05 31 21 1E 20
+4A 85 E0 DD DD F3 17 2F 5E 5C 2E 57 36 6C D8 50 18 1E 8E 5F 7E 89 D7 E6 CD 5B EE BD F7 BE 9B 6F
+7E D3 09 BD 87 A7 04 33 94 AF 00 00 44 E5 4A 3C 38 8E F3 9B 20 28 AB 0D 1B 60 74 9C 5E B5 8C B5
+B5 82 05 A0 10 A4 00 13 41 01 01 81 E0 18 9B 08 46 8A 98 40 56 93 D2 63 54 E3 DC 07 F2 19 03 D0
+0B 15 55 2C 15 CA 48 49 85 32 A4 D1 7D B0 6E 9D DC BE 53 A5 0D 68 CD 42 73 0A 1C 87 0C 2E 18 D7
+99 06 93 5B 75 11 44 01 54 6A 8A 61 54 28 C3 CF 5E 30 36 ED 95 D3 B7 38 24 22 C7 71 17 2E 5C 64
+9A 66 4B 4B F3 F3 CF 3D DF 3F 30 F8 72 CB 66 06 06 06 7E FE F3 9F CF F2 F5 EC 03 0D 96 78 7F 11
+5A 53 11 29 E8 DF 43 BF 89 D4 F9 CB CD C5 F3 21 C5 88 01 10 03 86 18 19 00 48 C0 93 DC 4C 91 62
+80 36 17 06 42 4C 32 20 6D 56 11 92 42 15 53 14 AA 5A 89 86 0B B0 A3 57 6D DA AC 40 41 67 52 75
+36 F3 4C 9A 0C 01 26 E7 4C 48 00 00 04 C6 11 00 64 04 71 2C 8B 15 5E AE 31 21 AC DE B1 B9 3B C7
+2B C8 06 11 E3 29 AA 2A 11 94 4A C5 B1 B1 B1 39 73 E6 F4 F4 2C 68 6A CA 6F DB B6 6D FD FA F5 95
+4A C5 AF 1E 64 AF D0 72 B9 1C 45 D1 E4 32 F1 B3 07 33 9C AF A0 08 B7 8F A7 DA 3B A0 27 A7 44 54
+1A 2B C4 BF 79 46 8E 15 61 D1 7C 6C 49 31 D7 26 E5 A2 21 88 59 18 03 49 49 86 48 28 55 60 3C 40
+92 40 84 04 32 04 DF 57 A5 82 2A 97 D4 9E 01 39 BC 97 ED 1E 00 08 55 7B 0E 3A 72 90 49 A2 ED 28
+CE 41 20 47 21 75 90 8C 31 8C 63 92 01 F7 23 A3 12 32 5F F5 50 B6 BD 6C CD CF CF 59 78 A5 D9 37
+54 FC D1 CE 9D BB A6 6C 66 84 08 B5 5A AD AF AF 2F 9F CF 5B 96 D5 DC DC 92 4C 26 BA BA BA 0A 85
+D1 8D 1B D7 EF D8 B1 AB 5A 3D 60 33 99 7F F9 97 7F 5D B5 6A D5 7B DF FB 9E 93 79 33 4F 02 66 34
+5F 11 01 48 D5 42 E5 7B AF 9E B3 7C 5E D0 F7 78 69 60 73 14 CA 35 CF E3 F6 1D AC B3 35 EE C8 63
+A6 8D 79 29 10 36 71 56 32 04 04 BC 1C C4 E3 32 94 51 04 24 B1 5A C6 42 41 ED 1B 52 71 19 FC AA
+0A 24 4F 70 75 4E 2B BA 0E F3 1C F0 2C 12 1C 90 13 00 44 24 41 A2 44 20 82 D8 27 19 A9 30 4A 90
+D7 4A F9 95 56 F2 55 68 E5 2D E1 A5 29 5A 99 9A BB 67 CF EE 42 A1 30 3A 3A DE 38 55 22 A8 56 6B
+7B F6 EC 99 33 67 4E 47 47 07 00 B9 6E C2 B6 DD B6 B6 B6 64 32 51 2A 95 2B 95 3D 53 12 BD 1F 7F
+FC F1 9B 6F 7E 53 3E 9F 3F A9 F7 F4 04 63 46 F3 95 23 28 29 A5 94 73 E6 76 77 2C 7E 4D DC 3A 6F
+EF 73 DF 8D C6 76 31 80 51 9F D6 BD 44 DB 77 52 2E 47 4E 8A 6C 0B 91 31 01 05 E4 50 AA 51 24 19
+C4 92 14 17 92 07 55 02 80 AC 07 99 0C 9A 26 38 26 9A 06 98 86 12 88 C8 89 11 02 31 09 0A 11 C2
+88 E2 08 C2 18 6A A1 83 56 1B 66 AF E2 AD CB 79 A2 9B 44 5A C5 11 90 52 68 A4 53 EA AA 2B AF DA
+B0 61 D3 D8 D8 8B 8D AF 78 A5 54 B1 58 96 72 57 73 73 73 73 73 8B 65 59 00 A0 94 E4 9C 37 35 E5
+DB DB 3B 0A 85 42 AD 16 34 16 DA F8 F7 7F FF 8F 77 BF FB DD 57 5F 7D D5 C9 BF B1 27 0E 33 9A AF
+52 01 67 90 C9 64 97 2F 5F 9E 48 24 21 71 11 D2 BB FA 9E FB 96 E9 0F 25 13 8C 21 E3 48 31 A2 A1
+C8 31 81 0C 19 57 51 2A E5 58 CC 8E D1 32 B9 81 CC E2 C0 9B D1 16 24 04 20 21 29 E2 0C 18 03 04
+14 8C 49 A9 14 20 12 48 05 A1 84 50 A2 8C 31 62 19 C8 BE CA 68 7F 9D 91 59 C4 CC 94 61 88 38 8E
+24 F1 38 26 00 62 5C CC 9D 37 B7 B3 B3 63 DD BA F5 53 32 01 88 C8 F7 83 DD BB 77 2F 5A B4 A8 A3
+A3 53 D7 D7 40 64 A6 69 2E 5B B6 8C 31 DC B0 7E 5D A9 54 A1 86 EC DE 7F F8 87 4F 9F 77 DE BF 9E
+4D 22 76 46 F3 95 31 B0 2C 33 97 CD B6 B6 34 33 C4 58 82 D7 B6 22 B7 E8 96 B1 8D FF 69 44 45 14
+8C 31 B2 19 A4 6D D1 D4 0C B9 56 CE 14 01 71 52 14 86 A0 22 2E CB 8A 4B 94 24 11 01 94 5E 68 40
+24 11 91 94 C4 58 12 30 52 12 62 45 51 C4 6B A1 8A A4 01 89 05 A2 F3 46 FF EB 12 33 00 00 20 00
+49 44 41 54 91 7F 35 0A 8F B8 30 4D C1 18 63 CC 24 C3 08 82 20 8E 42 52 CA 34 8C 7C 53 13 E7 5C
+A9 A9 56 14 22 94 8A C5 4D 9B 36 A5 D3 69 CF 4B 28 A5 18 53 88 90 CF 37 CD 9B 37 6F EB 96 AD 8A
+2A 8D 4A C1 9A 35 6B 76 EC D8 71 36 F1 75 A6 C6 B7 00 00 00 19 77 13 49 C7 75 C3 28 22 00 CE 39
+22 6F 5E 70 7D 66 C1 CD 11 4F 87 BE F4 03 AA 05 50 F2 A9 5A A4 A8 84 04 0C 81 09 8E 06 80 19 4B
+47 00 32 65 72 6E A2 10 4C 08 E4 20 91 24 C4 11 46 31 F8 21 55 6B E8 87 50 F4 A1 14 66 7D D5 04
+CD 57 1A 0B DE 23 DA AE 41 91 20 52 00 10 45 91 7E 83 73 CE 11 91 71 AE 8B C5 76 F7 74 27 13 AE
+31 2D A7 50 49 59 1C 1B DD B2 65 73 A1 50 20 52 A6 69 2A A5 AA D5 EA 8E 1D 3B 76 EC D8 19 85 C1
+94 AC D9 5A AD F6 C7 7F FC AE 67 9F 7D F6 64 DD D1 13 8E 99 25 5F 37 6E DC B8 69 D3 4B FB 8F 89
+84 E0 44 54 8F 18 21 22 33 9C 96 C5 6F E0 20 8B DB 1E 50 C1 B8 52 18 96 65 51 70 8B 51 3A A1 4C
+4E B1 60 14 82 8C 11 24 82 C4 98 24 12 8B A5 52 04 4A 81 24 F0 43 8A 25 00 81 24 C6 18 0B 50 60
+32 C7 B2 D7 18 F9 57 0B A7 19 64 0D 98 29 25 02 84 A4 24 63 CC 34 4D C3 30 10 21 0C 23 04 88 A2
+68 E9 92 25 8B 16 2D 7C 6E CD 9A 29 7B 2B 4B 05 52 51 B5 52 1D 1C 1C 4C A7 D3 A6 69 4A 29 4B A5
+D2 9E 3D 7B B6 6D DB 56 AA D4 1A 95 01 8D 1D 3B 76 7C F2 93 7F FF C0 03 F7 9F F0 9B 7B 52 30 B3
+F8 FA C8 23 8F 3E F3 CC 33 0D 27 26 F6 32 90 F1 FE 78 7D 2C A5 E1 34 E7 16 5F CF 19 8D 6C 79 30
+F0 CB 14 02 2B 2A A6 30 AC 92 6D 92 C5 75 95 4C 44 26 51 61 AC 40 91 52 8A 82 08 C3 88 94 02 A9
+20 8E 81 71 34 04 00 33 58 6A 85 E8 78 A3 C8 5E 80 68 00 45 48 44 04 42 70 2E 84 65 5A B6 E3 B8
+AE 6B 59 96 DE 54 B1 5C 2E 16 8B 45 61 18 AF 7F C3 1B 37 6F DE 12 8D 8D 4F CF 18 F0 FD 60 D3 A6
+4D C3 C3 43 D9 6C 2E 91 48 8E 8E 16 76 EE DC 39 3E 5E 7C B9 AA 86 1B 36 6C FC C9 4F EE BD E5 96
+9B 8F F3 DD 3C 15 98 59 7C 8D A2 03 23 EF 44 32 8A A4 94 38 59 9F 82 73 8E 4A 29 45 60 64 B2 4B
+7E 8F 8C F4 BE 97 7E 58 2B 8D 53 AC C2 48 06 21 78 16 18 06 E8 D5 05 88 8C 31 60 A0 FC 10 E2 98
+6A 01 49 A9 C5 21 59 26 1A A6 40 73 0E E5 96 DA 6D AF 83 F4 39 08 00 71 51 31 87 D0 E6 4C 08 21
+1C D7 4D 24 12 89 44 C2 34 4D DB B6 75 7D FA A6 A6 4C A9 54 DE BB B7 7F D9 B2 65 F3 BB 7B 9E 7F
+7E ED C4 4A AF C6 5F 11 CB 5D BB 76 EF DA B5 3B 95 4A 66 B3 D9 F1 F1 F1 D1 D1 F1 38 96 2F 57 B7
+60 60 60 E0 17 BF F8 C5 2C 5F CF 24 10 D1 8F 7F FC DF 5F FE F2 57 0E 3C 09 52 4A A5 94 94 31 00
+20 63 40 34 51 5B 85 14 72 23 B7 F0 7A 91 68 1F 58 FF 13 7F 64 73 54 AB F9 81 2C 99 68 9B 34 AD
+6F 08 43 8A 95 A6 16 5A 96 E1 7A 1C 53 8B B1 ED F5 BC 79 25 0A 97 08 08 28 56 86 E0 8C 31 34 4C
+C3 75 BD 7C 3E 9F 48 24 2C CB 34 4D 83 73 AE EB 13 5A 96 05 80 2D 2D 91 94 F1 55 57 5D B9 E5 A5
+8D 95 4A 4D 4D 7B CB C7 B1 24 82 42 61 7C 6C AC 48 74 90 E4 98 46 20 E2 DD 3F B8 FB CA 2B AE 78
+CB 1F BC E5 78 DC CB 53 89 99 C2 D7 DE DE DE 5B 6F FD 50 B1 58 6C 3C A9 00 C3 58 C6 71 CC 19 37
+4D CB B2 2C A9 94 EF D7 94 94 C0 2D 90 35 40 48 75 BE CA 4C F7 94 77 3D 39 B2 FD 89 6A B1 37 F2
+2B BE AF 00 70 32 9F 1A 01 88 31 C1 98 89 C0 0C 53 5A 5E AB 95 5D 66 B6 B6 59 CD 17 A3 37 1F 80
+01 28 29 25 00 09 C3 14 86 61 DB 8E EB BA 99 4C C6 F3 3C D7 75 4D 73 E2 4F A0 9D 53 BA DE 77 26
+93 91 52 5E 7D F5 D5 4F 3D B9 FA E9 A7 9F 81 69 7C 05 1D EC 00 9A 9E 69 30 1D 9C 73 44 F5 EC B3
+BF BB FE 86 EB 5D D7 3D D6 5B 79 4A 31 23 F8 1A C7 F1 BD F7 DE 37 3D CB 4E 08 CE 18 0A 21 72 4D
+B9 E6 96 16 22 E5 FB 01 11 05 81 AF A4 24 EE 28 29 19 80 93 6C 76 CF BD 31 D9 7E 5E A9 EF F9 F1
+D1 9D F1 F8 76 0A 8A A0 18 80 41 58 43 20 C3 CE B8 5E 8A DB F3 EC 64 4A E4 7A AC 6C 0F 73 DA 01
+14 AA 80 80 91 8C 18 77 00 81 0B 61 DB 8E EB 3A E9 74 CA F3 3C CB B2 EA 64 D5 A8 CB 48 DB B6 F2
+F9 FC 05 17 5C 70 CD 6B AF DD BC 65 4B 61 74 FC A0 94 3D 4C 28 25 E3 18 EF B8 E3 8E 1B 6E BC F1
+8A 2B AE 38 EA 7E 4E 07 CC 08 BE D6 6A B5 3B EE F8 FA F4 85 78 24 A5 63 3B D7 5D 77 FD C2 85 8B
+93 C9 44 14 45 4A 51 1C C7 71 1C 2B 29 01 80 F3 89 AD 8D 09 85 D3 B4 D8 C9 CE 4F FA 51 54 DE 1D
+55 46 20 F6 51 49 C0 1A 00 A1 99 B4 13 39 EE B4 19 76 06 B8 03 00 18 57 09 79 14 45 C2 4A 10 08
+00 B2 2C DB B4 6C CF 75 3D CF 73 1C D7 75 DD FA CE 72 07 85 69 9A 1D 1D ED 6F BA E9 A6 C7 1F 7F
+7C F5 EA DF 1C CB CF 57 8A 82 30 32 0D 7E D7 5D 77 2D 5F BE 3C 9D 4E 1F 4B 6F A7 16 67 3F 5F C3
+30 FC BB BF FB E4 E0 E0 E0 F4 AF 08 E0 F2 2B AE F8 E3 3F 79 67 7B 5B 5B 14 C5 B5 5A 4D CA D8 F7
+FD E9 2D 19 63 00 A8 D0 70 5C C3 76 97 2A 45 48 11 50 AC B7 8A 57 C0 B8 E1 01 48 92 13 3A 2C 31
+01 C0 98 E1 21 32 CB 12 42 08 DB B6 4D CB 4A 24 12 8E E3 68 EB 8A 1D B2 C4 00 22 18 86 58 B6 7C
+D9 35 D7 5C B3 61 C3 86 72 B9 52 DF 21 EC 28 40 04 5C 18 0F 3D F4 A0 52 74 E7 9D DF 3D 73 F3 B6
+CE FE 78 C1 A7 3F FD 99 EF 7C E7 BB 6A 9A 70 55 4A CD EB EA 7A EB 5B FF A0 6B DE 5C CB B2 F4 2E
+42 A6 69 D9 B6 CD 18 36 E6 8E E8 6D 05 94 92 7A D3 2E 20 C5 90 90 19 C8 1D 26 1C 61 26 18 33 41
+45 24 25 00 81 8A 30 AE 00 0A 64 DC B2 2C CB B6 13 C9 64 32 95 4A 24 93 E9 74 DA 75 5D D3 34 6D
+DB 3C 34 59 35 88 28 91 F0 DE 7C CB CD CB 96 9D 27 04 67 08 C7 B2 AD 6C 1C 4B C6 D8 0B 2F AC 1D
+18 18 38 FA 5E 4E 35 CE 72 BE 0E 0E 0E 6E 5A FF A2 E0 CC 32 79 23 43 88 C8 75 AC EB AE 7B C3 CA
+95 97 31 C6 19 43 DB B6 3C 2F E1 79 9E E7 79 AE EB 09 31 29 81 10 D9 A4 56 70 20 08 80 88 54 1C
+47 13 3C D6 60 06 09 17 11 0D D3 32 4C D3 75 5D C7 71 12 89 84 E7 79 8E E3 58 96 E5 BA 0E 3F 78
+87 07 1B 83 E8 9C 73 CF BD F1 C6 1B 33 99 34 01 CA 63 58 E4 1D 86 51 14 46 FD FD 7D 7F F1 17 7F
+79 F4 BD 9C 6A 9C CD 7C 1D 1C 1C FC 8B 8F 7F EC 57 8F 3F 9E 4C 25 1C CF B3 2D A3 4E 59 CE D8 25
+2B 56 FC FE EF BF A5 A9 A9 69 E2 0C 67 86 C1 2D CB 4A A7 D3 99 4C DA F5 DC 09 11 7B 60 34 81 B1
+57 A6 1A 63 C2 71 3D CF F3 D2 E9 54 32 99 4C 26 93 89 44 22 99 4C 78 9E EB 38 96 10 87 4B 56 0D
+DB B6 AE BB EE 8D 17 5F BC C2 75 ED 23 BA 70 3A FC 5A 4D 46 D1 E6 CD 9B 9F 7A EA A9 63 EC EA 54
+E1 AC E5 6B A1 50 B8 ED B6 DB 1E 7A F8 11 D3 B2 74 F4 88 F3 FD 22 B6 A5 B5 E5 7F BC ED 6D CB 97
+9F AF BD 42 FA 24 E7 CC 34 0D D7 75 52 A9 74 3A 9D 36 2D EB 60 25 D7 0E 2D E2 90 73 61 3B 8E E7
+79 AE EB B8 AE 97 4C 26 5D D7 F5 3C 1D C1 12 47 67 E6 2F 5C B8 E8 A6 9B 6E 6A 6E 6E 31 F8 31 15
+DE 8E 15 D4 6A E1 E6 CD 9B 3F F4 A1 3F 3B 30 CE 77 C6 E0 AC E5 EB C0 C0 C0 23 0F 3F 02 4A EA 97
+AF 94 52 2A 42 C6 01 C0 36 F8 E5 97 AF 7A CD 6B 5E E3 79 8E 69 1A 75 0E 31 C6 18 43 CE B9 65 59
+AE EB B9 AE 87 D3 A4 E9 21 76 72 43 44 C3 34 BD 44 22 99 4C 7A 9E A7 49 EF 79 6E 32 E9 E9 8D 95
+11 F1 D0 3E 81 83 22 8A 62 C6 F8 EB 5F FF BA 57 BD EA 12 C3 60 C7 E0 D7 02 00 90 44 52 AA 8D 1B
+37 3E F7 DC F3 C7 D4 D1 29 C2 D9 C9 D7 ED DB B7 BF F7 BD EF AF D6 FC 4A 2D 1C 1B 2B 96 4A E5 4A
+A5 16 84 51 14 2B 44 5C B0 78 F1 5B DF FA D6 F6 F6 76 21 04 63 6C 4A 64 08 11 6C DB 74 1C 3B 91
+48 38 AE 8B 87 08 1C 35 80 21 3A AE 97 CD 66 B3 D9 6C 3A 9D D6 0A AB E7 39 3A 9F 46 29 75 38 06
+D6 41 21 04 37 4D 31 77 EE 9C 37 BC E1 0D A9 74 F6 50 81 AC 23 C1 A7 3E F5 0F CF 3F 7F E6 51 F6
+2C E4 EB 4B 2F BD F4 CE 77 FE C9 DA B5 6B 01 80 88 82 20 D4 3B 6A 33 86 40 2A 93 49 5D 77 DD 75
+57 5C 71 45 3A 9D 32 8C 83 BB F3 10 D1 30 4C CF F3 12 89 84 10 C6 2B 56 A9 10 86 91 4C 67 D2 E9
+74 26 93 49 24 12 C9 64 32 9B CD 58 96 C9 18 D3 7A C8 E1 1B 58 07 9D 0C 00 08 61 AC B8 E4 D2 73
+96 2E 01 15 1F 17 C2 8E 8C 8C 3C F5 D4 6F E3 F8 0C AB 8A 7C 16 F2 F5 9B DF FC D6 9A 35 6B 1A CF
+44 51 AC 94 8A 22 69 18 7C D9 79 E7 DD 74 D3 4D B9 5C EE D0 01 77 CB 32 1D C7 C9 66 B3 F9 E6 66
+D7 F5 0C D3 14 C2 68 74 14 E8 BD 8C 19 E3 B6 ED 64 32 99 74 3A 9D CD 66 35 C5 5D D7 01 00 21 F8
+71 DD 39 83 16 2D 5C B0 EA 8A 2B 6D C7 3D 5E FB C8 FD D5 5F FD F5 9D 77 DE 75 66 ED 55 7B B6 F1
+F5 89 27 9E 78 EC B1 9F 1F F4 2B A5 54 26 DB 74 FD 0D 37 9E 7B EE B9 53 02 A1 D3 C1 18 26 12 6E
+3A 9D 6E 69 69 E9 9C 33 A7 B5 B5 35 93 CD BA AE 67 3B AE FE 97 48 A6 52 E9 4C AE A9 A9 B9 A5 B9
+B5 B5 35 9B CD 66 32 29 CF 73 4D D3 E0 7C AA 8E 71 EC 20 22 C7 71 DE F8 86 37 2C 5C B8 40 1D 27
+BE 86 61 F8 ED 6F 7F E7 CC 12 B1 67 55 7C EB A9 A7 9E FA 5F FF EB 83 DB B7 6F 9F FE 15 11 39 8E
+7D E5 95 97 5F 77 DD 1B B2 D9 57 0E 48 22 22 E7 DC 71 98 6D 5B 9E E7 55 AB D5 5A AD 56 AD 56 89
+14 22 0A 61 E8 77 BD 6D DB 42 08 D3 34 10 B1 51 BB 38 31 1B 68 D1 F9 17 9C 7F C1 85 17 AD 5B BF
+F1 70 D2 5C 0E 07 DB B6 6D FB E4 27 FF FE D3 9F FE 07 21 CE 0C 26 9C 19 B3 3C 1C FC F6 B7 BF 7D
+E7 3B FF 64 EF DE BD 07 FD 96 88 9A 9A F2 37 DC 70 C3 E2 C5 4B 74 F2 DE E1 F4 89 88 88 60 9A 82
+31 4F AB A1 52 C6 8C 71 CB B2 0D 43 30 C6 4C D3 90 52 BD A2 B4 3E 2E 20 A2 64 32 F9 EA 57 BF EA
+DE 7B EF 1B 1F 2F BE F2 05 87 81 28 8A BE F6 B5 3B 18 63 9F FC E4 DF D9 F6 B1 FA 77 4F 02 CE 12
+BE D6 6A B5 0F 7C E0 D6 97 23 2B 00 08 21 2E BF FC B2 D7 5D 7B AD E3 D8 34 2D 03 FA 15 21 04 B7
+2C 8B 31 16 C7 B1 61 08 CE B9 10 13 56 D4 51 B8 A8 8E 01 74 CE 39 E7 34 35 E5 6A B5 DA 2B 56 7D
+3B 4C 28 A5 BE F2 95 AF 72 CE FF FA AF FF CA F3 BC E3 D2 E7 89 C3 59 A2 BF DE 77 DF FD 07 CD 68
+A9 A3 A3 A3 E3 E6 9B DF A4 93 06 8F 6E 08 CE 99 61 18 A6 69 1A 86 69 59 E6 B1 98 FC 47 0D 29 E5
+FC F9 DD 6D 6D 6D C7 DD 48 FA D2 97 FE F1 73 9F FB FC 41 73 7D 4E 2B 9C 0D 7C FD 8F FF F8 CF 8F
+7D EC E3 87 D8 1A C5 B2 CC AB AF BE E2 D5 AF 5E A9 5D A1 47 31 84 52 4A 4A A9 DD B5 E2 E8 B6 C2
+38 4E 68 69 69 3E FF FC E5 E2 D8 72 5F 0E 8A BB EE FA DE 94 7C F6 D3 10 67 3C 5F EF B9 E7 47 1F
+FB D8 C7 87 87 87 0F D1 A6 B5 B5 F5 86 1B 6E F0 3C 8F 48 49 A9 8E C2 58 D1 A1 29 44 D4 A6 D5 31
+CC F7 E8 A1 67 CE 39 BB E8 A2 8B 85 69 F1 E3 6D 21 8D 8F 8F DF 76 DB 47 4B A5 D2 F1 ED F6 F8 E2
+CC E6 EB 33 CF 3C F3 A7 7F FA 67 23 23 23 87 68 C3 39 3B FF FC F3 16 2E 5C C8 39 9F B4 B2 8E 86
+AF 44 87 55 DE FA C4 41 7B 7C 95 82 45 8B 16 79 9E 4B EA 65 17 18 1E 75 FF 3F FA D1 8F 6F BD F5
+43 A3 A3 A3 C7 B3 DF E3 8A 33 98 AF 51 14 AD 5E FD E4 F8 F8 F8 21 DA 18 1C 3B 3B DA 2E 5F 75 85
+6D D9 7A 69 A1 2E E3 73 14 C3 09 C1 19 63 71 2C A5 3C D9 0E 76 A5 54 14 C5 52 4A A5 48 29 D5 D6
+D6 36 AF 6B BE 02 3C 11 5E B3 7B EE F9 D1 6D B7 7D F4 D0 EF AB 53 88 33 95 AF 52 CA 3B EE F8 FA
+27 3F F9 F7 87 68 C3 10 5D CF 9D 3B AF AB B3 B3 A3 1E 9A 3A 46 11 C9 18 2A A5 4E 1A 65 95 52 71
+1C 4B A9 A2 28 8E A2 58 AF 47 4F A7 D3 2B 56 5C CC 10 E9 C4 84 A6 FE E3 3F FE F3 2F FF F2 AF 0E
+FD D6 3A 55 38 53 FD 59 5F FD EA FF FD EC 67 3F 37 B5 9E C0 14 20 22 E3 ED ED ED 8E E3 46 51 28
+A5 2E 02 7C 4C 84 8D 22 09 00 44 74 A2 DD 58 44 A4 39 1A C7 B1 65 99 7A F1 59 1C C7 3A 4E B1 64
+C9 12 2E 38 29 09 70 42 76 EA FA B7 7F FB F7 38 8E BF FE F5 3B EA DB 41 9E 26 38 F3 F8 4A 44 5F
+FD EA FF FD CC 67 3E 5B AB D5 0E A3 B1 F2 3C 17 19 D6 6A 35 9D 45 C0 18 8B A2 D8 98 DC EF E2 95
+2E 07 5D 11 08 11 E2 58 C6 F1 84 46 41 C4 7C 3F D4 21 83 63 57 22 E3 38 D6 6B 1C 26 6D 41 92 52
+01 68 BE 46 51 14 F9 BE AF 63 1C 9C 73 4D D9 AE AE 79 C9 64 AA 56 AD 04 61 A4 8E 61 5D D7 21 F0
+5F FF 75 8F 52 EA 9B DF FC C6 69 45 D9 33 8F AF FF F5 5F F7 7C F2 93 7F 7F 38 51 6F 22 F2 BC 44
+53 53 3E 08 C2 4A A5 52 2A 95 6C DB E6 9C DB B6 15 45 B1 10 42 EF 06 FF 32 D7 02 00 44 51 C4 39
+0B C3 58 67 03 4A 29 C3 30 0C C3 50 57 BC D2 EC 37 CD 89 95 33 3A 18 A6 F5 E3 89 82 45 A8 4D 34
+5D 0C 66 FF AC 60 C2 80 9B 10 8C 8C B1 28 8A 0C 43 48 A9 F4 1B 43 AB 01 71 1C 47 51 18 45 91 94
+52 A7 CF 1A 86 89 88 96 65 65 32 D9 64 32 59 2E 97 0D 0E 71 74 6C AF 8C 97 BF 7B F7 DC F3 A3 6C
+36 FB B5 AF FD D3 09 E8 FE 28 71 86 F1 B5 54 2A 3D F5 D4 53 87 99 A2 81 40 E9 74 3A 9D 4E C7 51
+54 AB D6 CA A5 92 5E 68 00 00 96 65 FA 7E C0 39 B7 2C A1 14 D4 93 53 75 79 40 22 52 8A A4 54 44
+14 86 81 A6 8E 6E 40 44 52 CA 6A B5 CA 18 B3 6D 5B 47 BC B4 DD A3 E3 5E 61 18 59 96 88 22 A9 5D
+60 51 24 39 47 A5 68 32 6D 7C A2 96 0C 63 4C 07 A8 EA AC F5 FD A0 5E AE 30 8E A3 28 8A 89 94 DE
+BD 48 4A 29 04 57 8A 4C 33 32 4D 8B 31 96 4E A7 BB BB BB 06 F7 0D A8 F0 C4 BA 2C D6 AD 5B DF DB
+DB DB D3 D3 73 42 47 39 7C 9C 49 7C AD 56 AB B7 DF FE A9 6F 7C E3 9B 87 D3 18 11 0C 83 67 B3 99
+64 32 29 95 AA D6 6A 46 A9 08 08 4A 29 BD A0 0A 00 34 11 75 C9 8C 29 97 2B 45 52 4A 29 A5 EF FB
+61 18 4A 39 E1 3C D2 4E 31 A5 64 14 85 61 18 EA 88 97 65 59 3A 91 80 31 06 40 71 AC 94 22 C6 40
+4A C5 18 EA 1D B6 C2 30 52 8A F4 55 4A 29 22 15 C7 92 88 E2 38 46 44 29 A5 F6 56 E9 41 B5 23 02
+26 3C 03 51 9D D3 42 08 CF 93 8C 61 2E 97 5B B9 72 E5 FA F5 EB 8B E3 E3 80 F2 84 08 58 00 00 78
+EA A9 A7 3E F4 A1 3F FD C6 37 BE 7E 9A 50 F6 4C E2 EB D8 D8 D8 0F 7E 70 F7 E1 B4 44 04 C7 B1 11
+21 9B CD B8 AE 4B 44 51 14 55 AB 35 C1 19 10 84 61 10 04 81 E3 38 3A 09 CB 30 0C 2D FF 10 81 73
+2E A5 34 0C 83 28 D6 12 51 27 5C FB BE 1F 45 A1 52 4A 0B 60 C6 B8 6D 1B 00 A8 5F D3 BA 1F 2D A4
+11 99 2E E6 CA 39 D3 81 89 28 8A 4C D3 D0 D7 86 61 58 AB D5 A2 28 94 52 46 51 1C 86 A1 E6 62 A3
+E1 A8 87 40 6D FE 23 C6 51 34 51 4A 9B B1 28 8A F4 66 B7 B9 A6 A6 5B 6E 79 F3 E6 97 36 3F F8 D0
+C3 44 E1 09 B9 DD 93 F8 D5 AF 7E 7D EB AD 1F FA FE F7 BF D7 D1 D1 71 42 07 3A 1C 9C 31 7C 8D A2
+E8 B6 DB 3E 7A D8 01 43 34 4D 43 08 C3 F3 92 8C 31 2D BD 84 10 D5 1A 07 60 04 C0 18 97 32 16 42
+68 8D 90 31 B4 2C 83 08 38 67 8C A1 94 B1 4E 0E 8C 22 B0 AC 04 00 30 C6 8A C5 18 40 11 91 10 86
+69 9A 9A EE 3A E2 A5 AD 2E AD 0A 9B A6 A6 96 4E 85 41 5D 0F 4B 4A A5 EB 65 0B C1 2D CB D4 39 0C
+5A 82 6A 81 AA 63 01 71 1C 71 CE 81 48 4E 50 96 29 29 19 E7 5A DF D0 8A 8A EF FB DA F0 EA EA EA
+FA C8 6D 1F A9 54 AA BF F8 E5 AF 0E 6A 7A 32 C6 F4 C3 70 EC 61 8E D5 AB 9F DC B9 73 E7 2C 5F 8F
+00 BB 76 ED 5A BB F6 85 C3 6C CC 18 5A 96 6D DB 56 22 91 D0 85 30 88 C8 30 0C CB 34 2D DB 36 4D
+93 31 C6 B9 E0 5C 08 21 4C D3 14 42 BB 0B F4 8E 00 13 00 00 ED 46 D0 5C B7 2C CB F7 09 11 1D C7
+71 1C C7 30 84 76 69 4D B1 D8 A6 1F D6 C1 D8 44 57 9C 0B 29 A5 E3 48 DF F7 6B B5 5A 1C C7 5A 49
+A8 33 0C D9 64 20 8E 14 A9 03 AA 0E 28 19 03 51 99 31 CB B2 CE 39 E7 DC BF FE EB BF 2A 57 CA 4F
+3C F1 E4 94 BC 88 54 2A D1 D1 D1 11 C7 D1 D8 D8 F8 D8 58 51 3F 12 47 78 CB F7 43 4A F9 81 0F DC
+FA EB 5F FF 32 93 C9 1C 75 27 C7 05 67 0C 5F 3F F1 89 BF DD B9 73 E7 61 36 36 38 17 9C EB D7 A8
+61 18 44 94 48 24 2C D3 4C 24 92 A9 74 DA B2 2C CB B2 1C C7 31 4D C3 71 1C FD 77 6C CC B7 AA 73
+4E 7F 40 44 D3 14 95 0A E8 04 6D D3 34 1C C7 3A A2 C9 EB 7E 18 63 8E 63 13 91 EB 3A DA 8A 32 4D
+D3 75 DD 38 8E 82 20 D4 29 35 D1 24 00 40 49 C9 90 31 C1 95 52 13 0E 0B 04 20 20 A2 5A AD 56 2E
+97 6D DB BE E4 D2 15 1F FE F0 87 FB FB FB B7 6E ED AD 33 12 11 2C CB CA E7 F3 B9 5C B6 50 18 DD
+B7 6F 70 CF 9E 3E BF 56 3B 16 4F ED C0 C0 C0 EA D5 4F DE 70 C3 F5 A7 2A 7D 42 E3 CC E0 EB AF 7F
+FD F8 8B 2F AE 3B FC F6 8C 61 14 47 A6 65 65 B3 39 CE 79 C2 F3 92 C9 A4 E3 38 E9 4C 26 91 48 D8
+B6 6D 18 86 6D 5B 8C 31 2D 23 B5 D5 AF 29 1B C7 72 4A 49 0B 22 8A 63 A5 B5 52 D3 34 6D FB 50 64
+D5 BE 85 E9 D1 84 38 96 DA 56 23 02 21 04 00 72 CE 6C DB D6 7A AD F6 03 44 51 14 04 41 1C C7 41
+E0 EB 00 AC 76 66 D1 E4 A6 F4 4A 2A 44 24 20 8E 18 04 41 B5 5A B5 6D EB F5 AF 7F DD 4B 2F 6D FA
+C7 7F FC EA C8 C8 88 26 13 11 0C 0F 8F 20 6E 5E BC 78 91 6D DB 1D 1D 9D 88 6C 78 68 5F B9 5C 89
+E3 F8 E8 62 73 A5 52 E9 73 9F FB FC F5 D7 5F 37 CB D7 57 C6 A3 8F 3E DA DB DB 7B F8 ED D3 D9 AC
+52 B2 BD BD BD BB 7B 7E 3A 9D 4A A7 D2 9E E7 25 92 89 44 22 A9 4B 57 C4 B1 9C B2 38 16 11 A5 54
+5A 0D D5 61 7A 21 78 1C 4B 9D 96 A5 3D A9 8C 31 C6 D8 94 CC D7 7A 63 00 88 E3 58 DB 6D 52 4A 44
+D6 B8 86 7B 52 C4 A2 76 C7 EA F6 7A 0E 88 10 45 D2 71 1C 22 0A C3 30 8A 62 A5 64 AD E6 07 81 1F
+45 51 18 86 41 10 4A A5 E2 28 02 ED 4C 50 92 28 0E 82 C0 F7 FD 72 B9 92 CB 65 DF F1 8E B7 6F DE
+BC E5 5F FF F5 DF C2 30 9E AC 4A 03 43 43 23 A1 EF 73 C3 CC E7 9B 72 B9 9C EB 3A C3 C3 23 C5 F1
+B1 6A 2D 38 BA D2 71 9B 37 6F FE F6 B7 BF 73 EB AD 1F 3C 8A 6B 8F 17 CE 00 BE 3E FA E8 4F BF FF
+FD FF 77 88 06 53 36 A5 D0 16 BD 65 99 2B 57 BE 7A 4E 67 67 26 93 49 26 53 BA D6 9A E7 B9 9A 73
+96 35 21 56 B5 7A 3A 61 8F 13 C1 04 A5 00 91 01 80 26 AB FE A0 5D 01 00 A0 93 12 85 10 51 14 EB
+32 83 DA F9 A5 17 CC 34 76 45 44 F5 07 83 73 56 8F 1D 68 4C E6 5B 91 10 BC 3E 90 10 8E 0E 71 D9
+B6 1D 45 51 18 46 DA A5 10 04 81 0E 74 49 29 91 21 29 0A 83 A0 54 2A 71 CE 2C CB 6A 69 6E 7D FF
+FB DE F7 D2 C6 0D BF 79 EA 69 C0 7A A6 04 8D 15 4B 44 50 2C 96 AA D5 EA DC B9 F3 BA BB 53 43 43
+43 E3 E3 E3 85 42 C1 F7 8F D8 AB 50 2A 95 9E 79 E6 99 59 BE BE 02 86 87 87 0B 85 C2 41 BF E2 0C
+1D DB 64 C2 A8 54 6A 3A C2 4E 44 AE 6B 13 A9 73 CE 59 7E E9 A5 AF CA E6 72 D9 6C 36 95 4A 39 8E
+AB 8B 10 0A A1 F7 0C 62 4A 29 CD 15 AD 00 D4 6D 2C 98 E4 71 E3 40 8C 31 2D FF 34 9B B5 88 AD AF
+D8 AE BB 6F 27 09 4D F5 CF 86 C1 E5 64 29 59 CD 5D 29 A5 56 06 F4 B8 9C 1F C0 60 98 94 C1 B6 6D
+D9 B6 AD 3D C4 8E E3 F8 BE 5F AB 55 4D D3 D4 62 55 82 24 29 A3 28 1A 1F 2F 5A 96 ED 38 CE 25 97
+5E F2 F6 77 FE F1 E6 2D BD C3 23 23 0D 79 5B 88 08 51 14 F5 F7 0F 56 AB B5 AE AE 79 ED ED 1D 8E
+63 2B 25 47 46 46 8F 42 CA 8E 8C 8C 14 0A 85 5C 2E 77 A4 17 1E 2F 9C A9 F9 59 DA 4F D4 D2 DA D2
+39 77 5E 2E 97 AB EB 8B 9A 4F A9 54 EA 9A 6B AE 99 37 6F 5E 26 93 71 5D 2F 95 4A BB EE FE 5A 6B
+3A 70 C5 18 6B 7C 29 D7 53 AE 88 20 8E 75 E6 DE 44 88 4B 29 02 40 ED 55 30 0C 43 EB 93 4A 1D C0
+E9 FA DE 6E 3A 07 60 F2 5A 00 C0 7A BD 8C 49 41 CB F5 6C B5 F3 41 77 A2 F7 23 D0 5B 18 E8 0E F5
+37 86 21 1C C7 F6 3C 2F 93 49 67 32 B9 4C 26 A3 83 1D 8E E3 08 C3 50 52 C6 71 3C 36 36 56 2E 97
+88 E8 4D 37 DD B4 72 E5 AB 0F BA 50 27 8E E3 91 91 C2 86 0D 1B 06 07 07 F2 F9 E6 05 0B 16 E6 F3
+4D E2 C8 53 76 5E F1 5D 77 A2 71 BA F3 75 DF BE 7D F7 DD 77 DF F4 F3 AE EB F6 F4 CC EF EA EA 62
+8C 15 8B 45 1D 2F 25 02 1D 6D 5A B5 EA F2 CB 2E 5B D9 D4 D4 94 CB 65 B3 D9 8C 69 8A C6 25 AC 93
+04 3D A0 22 6C 3D 4B 50 B3 04 00 88 48 08 0E 80 44 8A 31 64 4C 2F 94 45 C3 E0 00 34 E9 34 9D 70
+A3 6A 85 44 73 8E 73 36 F9 F6 DF 4F 41 CD 48 CD 63 3D A2 36 F2 EA 53 42 04 FD 08 D5 DD B1 F5 6F
+4D 53 D8 B6 95 4C 7A E9 09 A4 12 09 CF B6 6D 44 8C E3 B8 5C A9 8C 8E 8E D5 6A B5 8E CE 8E B7 BF
+E3 8F 72 B9 EC CB B9 AE 7C 3F DC BA 65 EB F6 DE AD 8E E3 74 74 74 24 13 EE 51 D8 4E 3F FD E9 4F
+8F C8 96 38 BE 38 DD F9 BA 6B D7 AE 9F FC E4 DE 29 27 39 D2 9C CE F6 EE EE EE 52 A9 B4 63 C7 CE
+D1 D1 E2 E4 12 17 E2 9C CD 9D 3B E7 9A 6B AE 6E 6B 6B CB 66 B3 9E 97 70 1C 9B 73 AE 14 E9 54 C0
+3A B4 81 35 C9 51 14 82 37 FE F1 18 C3 49 F7 2A 00 68 23 09 B5 7A 0A 00 75 C7 42 3D 4C 50 37 CB
+EA BE 85 7A 87 93 FF 23 A2 6E 3F 21 BF 27 BB 9D 8E FD DE 34 9D 11 56 3F 74 1C CB F3 DC 64 32 A5
+2B CA 3B AE CB 18 23 A5 8A C5 62 B1 58 0A 82 F0 9A 6B 5E 73 C5 15 97 1F 62 2D 64 10 86 3B 76 EC
+DE B9 73 67 32 99 6C 6D EF B0 2C F3 95 FF 06 07 E2 57 BF FA F5 11 F9 6A 8E 2F 4E 77 BE 1E 04 44
+A9 74 A6 A3 B3 B3 50 18 DD B5 6B 57 B5 5A 6B 5C F2 4A 44 97 5C 72 C9 05 17 5C 98 CF 37 7B 9E 9B
+48 B8 8C 71 5D 78 50 08 26 75 99 42 22 44 D4 27 EB 26 BC 3E 13 45 B1 4E 18 84 86 B0 90 16 96 53
+16 D6 B2 FD 5B 76 4D 0D 23 35 1E EA 6E 61 72 D9 B7 3E D4 51 34 00 9A CC 6E D1 E5 92 E2 BA 78 6E
+6C 59 F7 01 EB CF 96 65 D9 B6 9D C9 64 52 A9 94 EB BA 5A CA 46 51 54 2C 8E 97 4A C5 5C 2E FB AE
+77 BD 2B 95 3A 48 06 E0 E4 C3 81 7A FB AE 3D 7B F6 E4 72 B9 A6 5C D6 38 F2 85 8B 7F FB B7 7F B7
+63 C7 8E 23 BD EA B8 E0 B4 E6 2B 11 6D DB 36 F5 D5 C3 18 E6 F3 B9 74 3A 3D 30 30 50 2E 57 1B 95
+48 04 9A DB D9 71 DD 75 37 2C 58 B0 40 07 05 74 37 13 DF A2 56 25 59 A3 D0 6A 1C 0B 00 74 92 E1
+64 A4 54 E9 0F 00 C0 39 E3 9C 47 51 DC C8 45 9D B0 A2 BD A7 07 3D D4 A3 E8 97 3B 34 10 BA 4E 41
+2D 8C 75 04 4E 1B 82 8D CA C3 94 CC C3 BA 47 CC B2 0C CF 73 53 A9 64 2A 95 F4 3C 4F D7 B9 28 97
+2B C5 62 89 48 5D 7A E9 A5 AB 56 5D 36 7D 97 39 C1 D1 36 B9 E0 9C 31 16 04 E1 BE 7D FB A2 28 EA
+9C 33 D7 3B F2 F4 D6 9D 3B 77 1E 4E F2 F1 89 C0 69 CD D7 E1 E1 E1 8F 7E F4 63 8D DA 18 11 09 C3
+CC 64 73 A5 52 69 74 74 74 DA 57 C6 65 97 5F 71 C9 25 17 DB B6 65 59 06 22 1C 68 FA 4C C0 30 84
+66 92 16 A5 DA 42 D2 44 D1 E7 B5 FE AA C9 D4 A8 71 6A 0B A9 7E 46 1F 32 C6 B4 7F 60 FA 61 7D 14
+AD AE 68 C5 B4 F1 51 A9 13 17 26 25 68 DD 04 D4 1E 5F DD 58 5F D8 68 8A 31 86 8E 63 27 93 A9 4C
+26 E3 79 13 52 B6 52 A9 8C 8E 8E E7 F3 B9 B7 FE C1 5B 32 99 74 E3 CD 41 44 61 9A 96 EB 66 B2 A9
+6C 36 E5 79 4E E8 FB 7B 76 EF 36 4D AB BD BD DD 75 9D 23 8A 02 28 A5 7E F5 AB 5F 9F 92 C2 5B A7
+35 5F 61 5A 7D 60 C6 30 97 CB 38 8E B3 67 CF 9E 4A E5 80 47 5C 08 BE 60 41 CF 2D B7 DC DC DC DC
+1C C7 13 82 B0 C1 F4 A1 46 03 4B 53 4A 7B 55 B5 7A 30 A9 77 D2 94 3E EB E2 AD BE 10 9C B1 7A E3
+09 0F 6B BD FD 94 C3 FA 28 FA 15 2F 84 98 0C 54 C1 64 BA E0 01 D6 58 1D FA DB 7A 6C 62 D2 5F B6
+9F F4 30 19 DD 75 5D 37 99 4C 7A 9E 6B 18 46 10 04 A3 A3 05 A5 E8 CA AB AF BE FC F2 CB 89 26 66
+A2 E3 C9 B6 6D BB AE AB BD 25 99 4C DA B4 ED F1 62 71 70 70 A0 B5 B5 AD B5 AD C5 10 47 50 9F 56
+4A F9 F9 CF 7F 61 FA 7E 66 27 01 A7 2F 5F A5 94 9F F9 CC 67 0F 5C 0E 4F AE 6D 76 76 76 C6 71 DC
+DF 3F D8 C8 0C 00 48 B8 F6 2D 37 DF BC 6A D5 E5 93 64 DA 7F FF A7 9F 21 DA 6F 7E 69 C3 48 29 A5
+43 A6 D3 12 56 26 2E D7 A6 D2 E4 DC EA 4B 0E B1 D1 6E D3 87 D3 47 99 34 B0 1A CD 38 6C EC 53 3F
+15 F5 29 D5 3B A9 2B 15 5A 99 D1 5F 12 81 76 9D 72 CE 5C D7 D6 D1 10 1D 70 56 8A 46 47 C7 3A DA
+DB AE B8 F2 0A DB 76 EA 0E 5D 9D F9 90 4C 26 33 99 4C 2E 97 4B A7 33 C9 64 C2 34 8D E1 E1 E1 20
+F0 3B DA DB 13 9E 77 A4 95 BB 67 E5 EB 01 50 4A 3D F1 C4 EA 46 A1 88 C8 9A 9A 9B 5B 5A 5A 86 86
+86 AA D5 6A 23 AF 10 61 EE BC AE DF 7F CB 5B 9A 9A 72 30 61 DC D0 14 7F 78 83 71 A3 05 EA FE DF
+AE 45 AC 66 92 BE AA 51 79 D5 D0 F1 2D FD AD 36 D4 88 08 71 22 05 71 D2 6E 3B C0 84 AA 8F A2 2B
+6C 36 BE A0 B5 D4 6F B4 C6 EA 95 63 A8 61 31 63 DD DE 82 49 F5 77 B2 25 AF CF CA 75 9D 6C 36 9B
+CB 65 5B 5A 5A D2 E9 B4 CE FF BA EC B2 CB 7A 7A 7A B4 8D 48 34 F1 4E B0 2C 47 EF B0 AC 77 01 71
+5D 37 8A A2 BE BE 3E 21 8C 6C D3 7E 1F F6 E1 60 70 70 70 8A AA 76 72 70 FA F2 B5 B7 B7 B7 5A AD
+36 9E 49 38 E6 FC AE F9 8C B1 A1 A1 E1 29 DE 53 CF 73 DE FC 7B 6F 5E B2 64 71 9D C4 88 A8 83 49
+BA E5 81 C6 CD 84 BE A8 DD 05 00 10 C7 B2 EE BA 9F 6C C6 84 98 6A 60 E9 6F EB D6 8F 36 B0 EA C3
+4D 1B 85 D1 FE B5 5C 13 ED A1 C1 FC 6A C8 7F 9D 30 CB EA B1 83 7A 05 9A FA 28 3A E4 AB 4F EA 96
+52 2A 2D E1 18 43 D3 34 52 A9 54 3A 9D 6E 6A 6A CA E5 32 8C E1 82 05 0B CE 3F 7F B9 16 C6 3A 0F
+DD 34 2D C3 10 7A 45 90 65 59 B6 ED 58 96 4D 44 03 03 83 A3 A3 A3 ED ED 1D D9 6C F6 88 DC B1 EB
+D6 AD 3F F9 5E 82 D3 97 AF B7 DF FE A9 C6 4A AE 1C B1 B9 AD AD 29 9F EF EB DB 5B 2E 97 0F 70 0B
+20 76 77 77 DF 70 C3 0D DA 52 9E 5C C2 0A 3A 4B BA EE 8C AC 53 AA 6E B8 34 86 9A 1A 7B AB 7F AE
+E7 BF 4A A9 EA B5 36 74 CF 70 A0 F9 55 8F 6F 35 9A 50 9A 61 75 7B 4B 8F 52 F7 97 4D 09 77 35 C6
+0E 1A E5 D6 A4 19 B7 7F D1 CE 64 80 97 21 EE 2F 86 20 04 77 1C CB 71 2C FD 1E 68 6D 6D B9 F0 C2
+0B 93 C9 24 E7 28 84 30 0C 43 FF AF CD C1 C9 89 49 C3 10 32 8E 06 07 07 4D D3 EC EC EC 74 8F 24
+4F 72 C3 86 0D 5F F8 C2 17 0F BF FD 71 C1 E9 CB D7 29 EF 1A CB 36 5B 5B DB CA E5 72 6F EF 8E C6
+17 3D 63 98 4C 7A 37 DD F4 A6 A5 4B 97 EA 77 6B 43 D1 A1 89 4F 53 62 4B 93 02 6E 2A EA 16 55 DD
+9F 35 69 D7 2B 21 78 DD 54 6A 7C 1D D7 0F 75 A0 6B 4A 4C B5 D1 DE AA 0B 63 6D E4 4D B1 B7 00 26
+96 E2 4C FF ED D3 C3 5D 75 E2 D6 A5 F8 F4 DF C2 B9 B1 62 C5 C5 6D 6D AD 86 21 1C 67 62 3B 27 00
+88 A2 A8 52 A9 84 61 58 AD 56 F5 36 B9 4A D1 D8 D8 F8 D8 D8 58 53 53 53 3A 93 3D A2 18 ED C9 AF
+25 7F 9A F2 F5 3F FF F3 87 8F 3F FE 44 E3 99 44 32 95 C9 64 B6 6F DF 51 2C 96 1A 45 20 63 6C D9
+B2 65 37 DC 70 43 32 99 9C 5C 12 B8 7F 4D D5 64 9B FD B1 25 98 78 E3 1F 60 09 69 5B 67 32 01 6B
+22 09 81 B1 89 F0 52 5D 9E 31 86 75 ED 56 F3 AC FE E4 68 52 36 06 B4 A6 40 2F 3C AC 5B 54 93 3A
+09 1C A8 85 E3 64 6F BC DE 73 C3 8F 3D F8 DB FA 65 36 A0 53 0B 17 2E 9C 37 6F 8E CE 47 03 80 30
+0C 7D DF AF 56 AB A3 A3 A3 85 42 A1 58 1C AF 54 2A 51 2C 15 41 18 86 7D 7D 7D B6 6D B7 B6 B4 88
+23 D9 5A F6 D1 47 7F 7A FF FD 0F 1C 7E FB 63 C7 69 CA D7 4D 9B 36 35 D6 C3 11 82 B7 B7 B7 87 41
+38 D0 B7 B7 51 9C 30 C6 3C CF BD F6 DA 6B 97 2F 5F C6 18 EA A5 5A F5 44 AD FA 9F BC AE 4A EA E5
+D7 8D F6 96 66 A1 3E AC 33 A3 DE 9E 73 16 45 31 E7 3C 08 42 DD AD 26 47 DD C0 3A 50 D0 4E 19 45
+4D 99 43 63 2D CE FA 92 AC C6 29 D5 EB 73 69 8D B3 DE 12 27 AA CD 4D 3C 21 5A 9D 9D 4C 99 A0 C9
+47 68 E2 87 EB 43 22 6A 6B 6B 5B B8 70 91 5E 62 1E 86 61 AD 56 1D 1E 1E 1E 18 18 18 19 19 1E 1D
+1D AD 54 AA 7A E7 1C 00 20 82 B1 B1 B1 6A B5 DA DD D3 93 C9 64 0E BF 66 D3 E0 E0 E0 D6 AD 5B 0F
+F7 8F 7A 3C 70 3A E6 13 96 4A A5 29 95 B2 13 09 2F 9F CF 0D 0E 0E 56 1B B2 36 11 D1 34 8D 85 0B
+17 5C 7D F5 55 C9 64 52 FF 39 EB 61 52 44 9C 9E CB A7 3F E3 64 CE 2B 4C 5B FA 52 5F 5C 20 A5 44
+C4 6A D5 8F A2 C8 B2 4C C7 B1 1B 17 FD C1 81 6A 6E A3 45 D5 38 0A 1C 98 4F 38 C5 FC AA CF A1 71
+4A FA E5 A0 DF FE 88 BC 3E 90 DE 6D 0E 1A 52 BC 19 13 71 2C EB CA 49 9D DF F5 15 13 96 65 2E 5B
+76 9E 6D DB A5 52 39 8E 2B 86 E1 93 52 52 11 90 8A B4 5C 6D A8 26 E6 FB E1 B6 DE DE CB 57 AD 6A
+CA 65 87 87 86 0E 7F 0D C2 AE 5D BB AA D5 AA EB BA 87 7B C1 B1 E1 74 94 AF 8F 3C F2 E8 3F FF F3
+0F EA 87 42 F0 B6 B6 56 21 C4 E0 E0 E0 81 0A 13 09 C1 2F BC F0 C2 F3 CE 3B 0F 26 13 02 EB C6 0D
+00 4C C9 E5 D3 E1 A2 BA 25 A4 D7 05 D4 2F D4 DF D6 73 FC 84 10 88 8C 73 16 86 61 B9 5C D1 EF F1
+7A 9C AC 6E 60 4D B7 A8 EA A3 4C CF 27 AC 37 9E 0C 40 4C CC A1 D1 38 AB 3F 45 F5 AE F4 2F 91 F2
+FF 67 EF 4D 83 25 39 8E 33 C1 CF 3D 22 32 EB 78 AF DF D1 07 BA 1B 67 03 20 6E 80 38 48 82 14 0F
+48 BC 75 AC 2E 52 A4 44 89 5A CD 9A 64 D4 48 A3 B5 9D 5D B3 35 AD A4 19 93 CD CE D8 CE 92 5A 91
+18 51 D2 0C 89 E6 E9 0B 00 00 20 00 49 44 41 54 47 87 0D B5 82 0E 52 22 D7 44 90 22 45 F1 04 20
+82 20 01 42 04 41 12 04 D0 00 1A 8D BE 8F 77 D4 AB AA CC 08 F7 FD 11 99 51 59 F5 FA 75 BF D7 8D
+3E D6 6C DD 1A B0 97 95 99 91 99 95 5E 11 FE B9 7F EE 9E 0E 93 A6 B3 22 36 BA 6F D6 9F 6B 04 D5
+E4 96 5B 6E E9 74 3A 83 C1 70 30 18 AE F4 56 86 83 C1 A0 3F EC 0F 4A 3F 4A B1 19 C9 D1 C3 87 0F
+1F 3E 94 65 AD D5 5D 1D 4F 22 7F F8 87 FF 79 C2 72 3B AB 72 C1 E9 EB C1 83 07 FF FA AF FF 3A 6D
+AA 6A BB DD DE B9 F3 E2 98 E7 D9 3C 92 81 AD 5B B6 BC EE 75 77 6D D9 B2 59 55 9A 01 AD A6 A7 09
+A3 70 FC E8 0D 45 C8 52 93 00 AB 99 26 71 02 93 A7 69 30 18 AA 6A 83 EE A4 31 87 36 C1 AF 13 22
+AA C6 B0 13 D1 B2 51 50 6D E2 1E D2 66 B3 9C 72 33 F7 26 86 33 B0 2A 84 D6 D8 3B 09 F2 98 F9 8A
+2B AE D8 BC 79 4B A5 E8 82 F2 A4 85 35 8A 61 71 E4 F0 91 4D 33 53 CE D9 0D F9 55 CF A5 17 F6 82
+D3 D7 17 5E 78 E1 93 9F FC 54 DA 24 A2 4D 9B A6 AD B5 FB 5F D8 EB CB B1 14 8E EE 54 F7 A5 B7 BE
+F4 95 AF 7C 65 4C F6 9F C0 EC 13 E0 86 A8 8A 2D AD 0E 35 25 93 34 51 04 53 D1 CC 88 CD 63 4A 16
+1A AB 3C 6A C3 B7 79 3F 75 E9 8C B1 61 9B 24 C6 66 04 2B 9D 92 6E A9 89 F9 52 04 2B 8E A0 AA 31
+F1 26 0E 1B 2B 71 44 AD 2D CB 10 D7 99 94 52 D0 34 9A 37 6F DE 7C E3 8D 37 AC B3 4C 6C 19 64 69
+79 B9 D5 6A 77 3A 1D B3 11 D2 D6 7B DF FB BE FD FB F7 AF FF F8 33 91 0B 4E 5F 8F 1E 1D 63 B1 64
+CE ED DC B9 B3 2C CB 23 C7 8E 37 D3 91 BB DD CE 96 AD 5B BE FF FB 7F E0 E2 8B 77 26 A6 5F D3 7B
+3F 01 6E D2 AE A8 67 E9 A5 46 AC 83 C6 04 86 1A E2 44 CF 40 08 B1 84 65 65 E8 47 B8 93 82 08 AB
+51 5D 63 D8 51 7C AB B9 99 02 04 4D DF 42 13 F3 C5 C0 45 24 37 02 48 1F 26 B5 E3 46 EB E4 E6 DE
+E8 CD 68 70 21 90 65 EE 96 9B 6F 5E 67 6B 10 55 5D 5E 5E 32 C6 CC CC CC D8 8D 74 13 79 F8 E1 87
+CF 59 15 F9 0B 4B 5F 8F 1C 39 F2 9E F7 FC 72 1D 31 07 A0 D3 53 ED 99 99 99 03 07 0E F4 7A 63 D4
+C1 2C 73 BB 76 ED 7A ED 6B 5F D3 6A E5 A9 CC 65 64 AF A2 A6 F6 45 E0 D2 0C 26 61 55 20 2A 15 C4
+AC 19 7D D1 B0 8B B3 57 34 30 AC 6B B8 78 62 7C 2B 31 06 D3 27 09 45 35 E3 5B 29 67 C6 34 6A B4
+A4 00 41 DD 0A 79 22 AF 66 F4 BB AA 79 0B 94 3E 4F B6 6F E2 89 37 CF 8D E6 6C 1C 30 BA 0B 44 F4
+AA AB AF 5A 6F 2B 1B D5 61 7F 60 8C 9B 9B 9B CB 33 43 67 AF 28 D7 19 C8 05 A4 AF AA FA 99 CF FC
+43 4A 2D 64 80 99 E7 B7 6E 6B B5 5A C7 8E 1D 6F 42 8A B8 38 DE 76 DB 6D BB 76 ED AA 37 39 82 A4
+06 21 90 52 2A 15 1A 48 08 35 C0 6A EA 41 12 11 89 16 6A 72 E9 A7 BA 82 F1 00 5A 45 20 A4 2A FF
+7B 32 30 0B 40 24 AC 82 5F D5 55 1A 3F A7 51 6C 2C 6E A6 9B 49 BA A8 AA 22 D1 78 95 66 3C A2 DE
+9B B0 A6 A4 23 23 C8 CB 32 B7 73 E7 C5 27 2F 98 30 1A 07 28 83 12 C1 39 A7 CA EB D7 56 EF FD A7
+3F FD 99 73 43 7F B9 80 F4 35 84 70 F7 DD FF 29 72 06 98 20 40 9E 67 3B 77 6C 1F 0C 06 C7 8E 1D
+6B BC 3C 64 99 DB B6 6D DB EB 5F FF 86 E9 E9 A9 E6 08 E3 91 27 8D E9 31 35 12 6A 22 2A 6D A0 1C
+93 22 FB 69 33 FE 1D 5F 7F 9C 77 A3 C2 AD D5 58 A6 89 B7 44 B4 09 7D 1A 20 4F 13 54 4A 57 8F 88
+2A DD 4D DC 8C E3 34 71 55 FC 29 A2 11 D0 4A FE 0A 91 11 BD A1 09 01 D3 89 F3 F3 73 9B 36 6D DA
+C8 5B D0 10 42 19 C2 FA 41 54 08 E1 FD EF FF C0 B9 61 70 5F 40 FA FA BB BF FB FE EF 7E F7 BB F1
+6F 26 30 90 65 59 A7 D3 3D 74 E8 70 BF 3F 68 38 4A 51 96 FE 86 1B 6E 8C 7C 8E 09 B0 DC 4C C9 9A
+88 6F 8D 03 AC 31 E8 C3 CC 89 90 95 CC CA 58 CB D2 FB 52 44 53 78 EC 84 F1 AD B8 59 E3 2D 30 9F
+80 40 18 41 5B 9D 0E 3E E6 C1 48 3A 9A EE 36 FD 71 C2 54 88 94 05 9E EE 2A 71 74 9A A6 79 94 2C
+CB B7 6F DF B1 21 08 1F 82 17 91 B5 C2 69 E7 57 2E 14 7D ED F7 FB 0F 3E F8 60 EA AF 17 14 02 4C
+4D 75 99 E9 F0 E1 43 CD 23 63 98 E0 95 77 DE 39 3F 3F D7 F4 5C D6 4C 3F 6E A2 2B AD A9 CD 13 6F
+91 C6 F9 84 11 DF 24 6D 16 D1 C1 60 E8 BD 57 15 D5 E8 28 95 DA E4 30 E9 2A 18 F9 16 38 5D 97 1A
+79 57 AB 2F 9A EE 6D C2 A6 6C 12 C3 9B A1 2F 63 4C CA 29 6F 2E B8 71 9C 44 71 6C 42 C0 78 93 A9
+EC 61 A7 D3 BE FC F2 CB D6 F9 16 88 60 2D C7 52 48 A7 91 3A 7B 0E E4 42 D1 D7 3F F8 83 3F 6C BA
+B1 54 41 44 33 B3 73 0B C7 17 0E 1D 38 D0 B4 E4 F2 3C BB EA AA 2B 6F BA F9 E6 2C CB A2 2B 27 91
+F0 E3 6B 8B 09 58 D1 30 4C F3 16 8D E8 85 23 4B 74 9C 4F 38 32 3D E3 A4 15 F1 0A 1A 39 83 31 A9
+35 02 B2 98 6C 03 8C E6 39 8C A3 BA 38 60 E2 34 26 2F 44 BC 62 A4 22 24 DF 3E 50 29 77 42 87 09
+57 C5 DA 89 F1 17 85 06 F0 6A D2 5F 9A 10 B0 8E 93 99 38 6D 1B 63 E6 E6 E6 D6 FF 22 12 5F 62 43
+32 1C 0E 1F 7F FC F1 8D 9E 75 1A 72 41 E8 EB DE BD 7B 1F 78 E0 81 89 0F 3B 9D F6 FC DC DC 91 A3
+47 0B 3F B6 20 8A C8 D5 57 5F BD 6B D7 15 B1 64 10 46 F0 05 AA A3 04 2C AA 32 60 B9 99 BF 15 B1
+F9 5A 7C C2 26 27 B0 F2 30 D5 3F 93 A4 6D D1 2C AE F5 6C 84 7E E2 DF 13 41 A9 C6 55 4C C4 5E 5C
+17 E9 40 95 E0 35 1A 36 CE 8B CD FB 8F 87 A5 79 2E 1D AC AA 4D 7A 21 55 85 0B EC C4 89 A8 5C 10
+98 99 99 59 E7 8B 50 C5 CA 4A FF 34 BA C8 1E 39 72 E4 37 7F F3 DF 6C F4 AC D3 90 0B 42 5F BF FA
+D5 87 9A 93 2B 00 86 CE CF CD 76 3A ED 89 C6 65 91 E0 72 ED B5 D7 6D DB B6 0D 48 9C 8F 31 A6 5F
+93 EF DC 2C 5D 91 66 8E 89 4D D4 A9 1D 69 9C E8 8D AF D5 57 E3 EC 8B 7A D5 4E 56 41 4C A4 99 08
+8F A1 86 53 29 87 2C 4A 9C 26 9B 17 1D 1F 27 95 35 30 F5 B9 40 15 B3 95 89 83 D3 0D A7 BD 4D 51
+1D B3 1C F2 CC 4D 75 3B EB 71 FF D7 86 84 1F 0E 87 A7 D1 B2 F4 DC C8 F9 D7 D7 EF 7D EF 7B EF 7B
+DF EF 4C 7C 48 84 56 AB E5 7D 58 59 5E 9E F8 BC D3 69 EF DA B5 6B 6A AA AB AA 75 19 EB 11 D3 0F
+35 BA 6A 4A 54 AC E8 56 47 FD CA A9 41 A4 6A 8E 33 71 27 D6 BA D5 49 5D 8D FB A1 26 D6 41 9D E6
+0A 80 D9 34 C3 54 E9 F8 B4 2C 4C C8 78 E8 C1 44 B5 E3 C6 C3 C4 78 5B 7D E7 F1 11 46 29 3A CD 4C
+8A 66 40 CB 65 D9 CC A6 E9 75 1A A3 91 D6 33 1C 16 E7 32 C4 BA 21 39 CF FA BA B0 B0 F0 73 3F F7
+F3 8F 3C F2 C8 C4 E7 6C 2C 88 45 94 C6 63 89 22 32 3B 3B 77 E5 95 57 18 E3 50 C5 5D 47 E4 8F 74
+CC 44 E4 09 35 10 61 A6 A8 A0 A8 54 27 F6 1D A8 54 2D F5 DA 9C 20 F3 47 B7 40 13 D5 25 D5 69 5A
+9C AB 08 84 94 FC 6B CD 8B C6 F2 86 8D A1 42 B3 C6 4C F3 DC 54 ED 30 96 D2 60 66 E6 D1 01 D1 2A
+68 40 40 13 F7 4E 38 68 8D E1 E9 99 59 36 A7 26 E2 C5 EF 67 65 65 E5 42 EE 2A 7F 9E F5 F5 D1 47
+FF F9 84 55 B3 8D 35 D6 9A 2C 73 90 31 DB DF 5A 7B F5 D5 57 5F 76 D9 E5 D1 AF 3E B1 BC 56 E7 9A
+D8 C6 6D 2C 7F AB 51 F9 C2 46 A3 B6 79 56 D4 B3 34 47 AA 6A EC AE 81 CA 78 A0 9A 09 95 92 58 B8
+09 F2 BC F7 29 66 D1 BC 68 23 BE 65 93 7B A8 11 DF 6A F2 1B AB 9B 49 11 AC E6 13 C5 72 04 F1 DF
+04 DE 8A 97 48 40 13 AB 12 D7 98 B9 DD 6E AF A7 99 37 11 4D 4F 6F 22 A2 C1 60 E4 3D 5C BF 1C 3B
+76 EC 89 27 9E D8 E8 59 1B 95 F3 A9 AF 22 F2 1B BF F1 9B AB 1B 16 13 20 21 00 D4 6A E5 4D 6E 1B
+11 A6 A6 BA 57 5C 71 C5 96 2D 5B A2 B3 26 E2 8C 66 6D 40 8C D3 FB 4F C4 27 8C 97 1E E3 13 C6 77
+9C F0 53 5C C7 CB 06 BD A6 99 1B 83 06 81 B0 89 75 C6 51 5D AC B5 91 E2 5B D5 DF 13 E7 A6 EF 21
+46 13 D2 CA D0 A4 38 4E 5C 74 02 6F A5 64 B5 58 A7 BB E9 D3 8D BE B0 F8 35 AE 95 36 33 F6 B5 13
+B5 DB 6D EF 4B 5D 55 1B 66 3D F2 F8 E3 8F DF 7D F7 59 EF 2C 77 3E F5 F5 CF FF FC 9E 66 46 61 53
+8C 61 11 71 2E E3 F1 89 A1 DB ED 6C DF BE 3D CB B2 26 EC 68 48 4A D8 AA 48 F8 6B B9 66 62 DD A1
+89 B3 EA 28 FF C4 7B 8D F0 85 9A 07 13 45 A7 FA E4 91 D1 93 D0 88 96 8D 6E 3E 65 F9 A5 C4 B2 D5
+01 4C 55 AD D9 86 AB 47 AE 4E 9C 78 F0 88 D5 9A 86 47 ED AC AD AE 45 84 2C CB 53 13 C6 93 48 D4
+D7 95 95 BE 9C F3 06 E4 EB 97 F3 A6 AF 1F F9 C8 47 7F FD D7 FF B7 13 16 22 16 05 C8 C4 EC 4D 8C
+15 B9 40 96 65 D3 D3 D3 0D AF 53 E2 AC 54 B4 92 B8 0E 32 9B DA 03 CA 4D DB 31 01 2C 34 70 C9 84
+EB 3E B1 07 6B 89 7E 7B 6A 56 2A 26 22 63 6C 23 DC 15 42 08 B5 B9 89 26 DC A1 31 5E D5 58 AC A1
+61 8C 72 34 A7 1B 39 02 06 AB EE 30 9D 18 1F 3C D9 D0 49 98 D9 98 31 67 AD 31 26 8E CC EB A0 60
+67 96 3B ED D6 A0 DF BF 30 23 05 51 CE 8F BE 86 20 8F 3C F2 CF 6B 55 CD 06 D4 18 13 3B 07 4E 18
+52 CE 65 CD F6 BB CC 54 1B 6A 63 EB 60 5D CC A2 42 2D E3 7C C2 35 73 4A D7 58 31 35 7A FB 53 24
+29 5D BA E1 1C 18 CB 1A 4F A8 6E 62 40 AE 9B D0 4E D8 2D B1 56 61 F3 1E E2 1C 19 7F 0C 27 2C 99
+18 C3 BC 75 CA EB 58 B6 70 7A F0 F4 A1 31 66 75 03 C7 D5 E2 F2 BC DD E9 0E 06 FF BF BE AE 92 CF
+7C E6 BE 0F 7C E0 4F 56 AD 7A 95 50 D5 AA 4A 9A C4 53 54 CE AC CE DC DC 5C B4 16 9A C6 62 24 35
+37 07 49 6C FC B5 36 55 53 14 60 C4 7F 3D 91 CA 92 73 AE E6 00 54 F9 E2 13 70 0D 0D A6 5F DC 65
+AD 4D 0C AF 66 7C 0B 0D BC D5 BC 87 3A E3 5C 9A F1 B6 F8 EC 11 6C AD 2E 99 98 24 25 6C 25 4F 05
+1A EE 2D 80 5A AD 56 96 9D BA CE EB A6 4D 9B FA FD FE D2 72 2F C8 85 AB B0 E7 41 5F 17 17 17 FF
+FE EF FF 56 F5 D8 5A 8C 0A 63 38 CB B2 B2 F4 C3 E1 70 9C 1B 4F 79 9E 77 BB 5D 22 8E 51 F5 66 8D
+09 8C 12 A4 AA 50 13 4E 5A AB 42 55 6B 27 43 05 DD E2 E4 54 A7 55 4D 54 DF 1E E9 62 8C 6F 35 40
+5E 62 FA 8D 02 6C CD 7B 68 C6 B7 26 EE 30 DD 43 B3 BE 36 1A 75 3A 92 E9 B2 AA 64 62 68 DC DB 18
+04 6C 5E 34 1E 30 C1 02 3B A1 10 D1 FC FC E6 43 87 0E 0F 06 C3 93 BD BC F3 2D E7 41 5F F7 EE DD
+7B 92 1A F8 44 94 E7 59 BB DD 9E 9E 9E 76 CE 76 BB DD E6 AE 6E A7 D3 ED 74 6B 8E 5F F5 79 5A AF
+57 8F 56 33 FD 46 E5 0A 9B 2C FD E4 93 4A E6 6F 6D 20 02 20 40 57 93 B5 9B F1 AD F1 0B 99 7A 59
+3F B1 5A 9C 70 45 5E 8B 40 38 21 4D 64 16 B9 BF CD 83 27 AA 20 36 CE 0A AB 10 E1 9A 62 AD 99 9A
+EA 1E 3E 7C 48 C2 79 A8 E2 B6 7E 39 FF F1 AD A6 10 A1 D5 CA A6 A6 BA ED 76 DB 39 47 44 9B 37 6F
+6E EA A1 CB B2 2C 77 F5 C1 54 E3 92 58 4D 6D 84 4B 68 9C 1B C5 1C DB 10 00 B5 EB 3E 45 3B 9B 6D
+36 E2 FF 4D D5 81 5B 22 D2 8A A3 25 2D 6F 52 57 93 96 A7 0F 27 20 A0 AE E2 67 8D DF E1 68 28 80
+E2 E5 52 CC A2 2C 7D BA 2E AF 4A C0 4A 3F AD E6 5D 4D C4 2C 62 EA 84 F7 25 11 9D DC 7E 55 D5 F9
+F9 F9 2C CB 96 97 97 2F D4 40 6C 25 17 96 BE 66 96 3B 9D F6 F4 F4 A6 A9 A9 A9 6E B7 DB ED 4E ED
+D8 B1 23 99 0D D6 9A D9 D9 D9 3C 6F C5 39 6C 02 FA A4 49 A8 91 2C 55 65 B1 C6 99 2F 1E 10 51 7C
+FA BB 5E D8 AB BD 71 26 4E B6 60 94 48 12 A8 E3 0E A3 F8 56 83 87 E0 13 7F 20 2A 62 BA 87 58 7F
+20 84 AA 54 51 2A 66 D1 8C F2 C7 DB 4B 0C DD 66 BA 62 94 A8 C1 4D 87 40 8D EA 2A 05 AD 1F 87 C7
+49 8F 71 29 B0 CD B2 F7 6B C9 E6 CD 9B 97 96 96 86 FD FE 85 1A 88 AD E4 5C EB AB 88 3C FC F0 23
+6B D5 5D D2 AA 24 84 8B 25 1F 63 A1 FE 34 BF 6E DA 34 7D E9 A5 97 66 59 9E A6 93 84 57 50 C3 0E
+D4 58 07 55 B8 28 44 4B 34 99 80 71 41 4F 30 CE 39 1B DF 6B 02 37 00 8A 62 B2 97 5A 02 E3 CD F8
+56 BC 01 AE 2B A8 25 43 36 76 FE AE E7 BF 44 ED F3 68 D8 D9 3A 22 73 4D 10 08 47 69 14 49 E2 59
+B1 80 0D 1A 39 3C CD A0 DA 84 79 DA B4 04 88 98 E8 64 FE AC 2C 73 53 53 DD A3 47 8F 16 6B 18 24
+17 8E 9C 6B 7D 5D 5A 5A FA CD DF FC AD B5 DC F8 45 51 AE AC F4 97 96 96 96 97 97 CA B2 18 0E 87
+9B A6 A7 F3 2C 11 E7 AA 84 A7 44 02 4C F8 06 E3 B5 C7 1A C5 D5 4C AD 58 63 C5 D5 D6 29 09 75 45
+80 85 46 5C 17 E3 E4 BD 38 A5 25 F5 6D DE 43 F3 E0 78 0F 49 9B 9B 78 0B 8D 12 85 AA 31 02 27 CD
+1B 6E 38 34 42 7A 96 C6 34 5F C5 47 26 3C 5F A8 16 9C 93 29 E2 EC EC 8C 2A 96 96 96 56 1B 1E 17
+9A 5C 70 F5 88 FA FD E2 E0 81 83 C3 41 5F 55 3A 9D EE B6 6D DB 3A DD E9 95 7E D5 C9 37 AA 87 2A
+EA A4 D6 91 27 DC 5A 2B 75 2B 57 22 6A 3A 1F A2 0B 3D 89 F7 DE 18 1B 73 F7 E2 CC 97 82 BA D1 5A
+68 58 7B 27 A8 B5 56 96 3E 4D CF F1 DC FA 06 C6 E6 30 AA 2A 6F 8E 75 4F 9E C0 84 13 DE 0F 11 05
+62 DC A1 62 26 34 D1 5B 3A B8 DE 35 76 63 75 51 4E 89 D4 EF 74 80 AA C6 2E 9E 93 5F 74 2D CE D9
+AD 5B B7 2C 2F 2F 2D 2D 2D 9D 5E 5F D9 73 29 17 E0 EF 49 4B 1F 16 97 96 F7 EF DF FF F4 D3 4F 1F
+3E 7C 78 76 76 36 EE 20 42 9E E7 59 96 C5 A9 6E 82 47 87 3A 9A AF 3A 56 5F BB DE 44 04 34 00 98
+C7 E8 85 35 37 6F A4 D4 4D 1B C3 39 57 87 88 52 B9 8A 51 6C 69 62 42 1A 0F 77 F1 44 09 BA 26 84
+AA CB B6 35 93 C6 D4 5A 43 C4 E3 E8 2D B5 58 02 1A E5 E1 E3 B3 A4 47 6B 96 32 88 B4 98 06 40 94
+A5 A5 C5 89 8A B9 4D 99 9D 9D D9 B4 69 66 69 69 69 38 2C 4F E3 6D 9D 63 B9 E0 E6 D7 28 22 58 58
+58 24 E2 6D DB B6 CD CD CD C6 98 8D 73 59 D4 1B E7 8C 6A 4A B2 AB 16 62 AA 04 91 36 9A 7C 99 B1
+E0 05 11 79 1F E2 5C 98 88 AA 40 42 63 D5 6A 1B 5F 76 F2 C0 1B 13 13 C4 35 9A A4 F1 DE 98 47 93
+77 08 12 35 12 55 18 69 AC F4 5A 7D F0 A8 83 1C 6A C3 34 B9 C6 88 34 6D A2 CE A6 8C 53 6C FC 24
+11 03 9C B3 29 2D 2C B5 A2 8D 3F 89 88 2C 51 CF DF D1 70 0F A1 22 2D 1C 3F 7E BC DF 1F AB 54 8E
+DA 60 30 C6 4C 4F 4F 97 A5 EF F7 FB D1 C7 42 69 09 83 AE E1 24 3C 9F 72 81 EA 6B EC F3 0B 2C EC
+D9 B3 67 66 66 66 6A AA BB B2 D2 27 4A 76 64 04 D4 D4 38 5E AC E5 68 CE 26 E2 52 9D 12 38 82 56
+D1 E6 8B E1 31 E6 D8 F2 58 6A CA 08 C7 BC 56 66 0E 63 FC 51 13 A7 BD 38 66 73 1A 46 C3 39 1F 37
+9B BB D2 0D 24 A1 AA 28 41 75 0F 71 D5 4E D0 B0 39 66 F4 30 24 80 98 2E 54 EB F4 58 F8 00 55 2E
+5A 35 6C BA 6D D4 0C AF 85 85 C5 E1 B0 68 5E 42 55 B3 2C 6B B7 F3 D8 C8 A0 D7 5B 62 26 CB 0C CB
+AD 56 CB 18 D6 E0 45 64 58 F8 D2 AF A6 F5 9C 58 BA DD EE 0D 37 DC B0 9E 23 CF 44 2E 50 7D 8D 52
+14 C5 33 CF 3C 7B E5 95 57 BE E4 25 2F 79 EA A9 A7 44 64 30 18 A6 78 63 02 CB C6 B0 73 55 0B 97
+64 CE 36 D5 C5 FB 10 67 A6 F4 3A E3 DE 94 2A 93 A4 0E 2F 55 16 42 74 4B 89 28 73 85 69 22 63 61
+75 BC 20 E6 73 03 A3 BD 22 1A 15 26 DA 0F 71 16 17 91 E6 EC 2B A2 40 55 06 34 EA 56 A4 EC C4 40
+74 74 B4 A5 C9 7E E2 DC FA BA 81 1B E5 89 D2 66 7D 4B 5C 96 E5 C1 83 07 9A F6 6B 9E 67 9D 4E E7
+A2 8B B6 CD CC CC 10 51 BF DF 5F 59 E9 FB B2 24 D2 A9 E9 6E B7 DB 8D A4 99 38 37 F7 7A BD C1 60
+D0 EB F5 A3 B9 1F 1B 3D 9C F0 65 DD 7A EB AD BF FA AB BF B2 AE F7 7A 06 72 1E F4 F5 24 6B 8C 73
+56 1B 11 72 EF 83 F7 2B BB 77 EF BE EE BA 6B 6F BF FD B6 63 C7 8E 2E 2C 2C A4 B0 78 3D CB 9E 78
+A8 09 08 45 44 69 13 8D 49 37 AD B6 09 D4 4F 44 89 B4 D1 9D AB 5E D0 2B DA 4A 1C 36 84 90 D8 89
+69 11 47 9D EB 17 0F 4E B9 83 00 C5 72 C4 C9 51 1A 41 7D 7D 56 F3 FF 55 98 AD 71 4B D4 BC C3 58
+A5 3E 8E 99 80 66 3A A6 4E 01 C2 CA 4A FF B9 E7 F6 A4 72 9C AD 56 B6 63 C7 8E AD 5B B7 F6 FB FD
+FD FB F7 17 45 51 16 45 AF B7 5C 0C BD 40 7B BD 7E 8A 14 C6 46 E0 D6 DA B9 B9 39 EF FD 70 38 2C
+8A 62 A5 DF 2F 06 FD 61 E1 CF 97 9B F6 5C EB EB F4 F4 F4 EF FC CE FB 7E E1 17 FE 45 F4 47 5A 83
+99 29 77 F5 45 E1 BA 4B 68 66 93 B0 91 43 C7 CC 37 9F E3 E7 0E D9 A5 E5 61 5C E3 FA 2B BD DD 4F
+3D 79 DD 0D 37 EE DA 75 E5 60 30 58 5C 5C 40 83 7A 12 63 42 A9 36 60 F4 CC 37 2A 4F 51 3A 38 6E
+26 EB 16 B5 2E A2 01 9B 12 18 4A 37 1C 83 4F 4D 9F 40 3D 5A 44 36 A3 80 56 73 6F 6D 4F 57 EB 7E
+73 6F 9C D1 CB D2 27 EA 6A 32 70 13 AB 26 46 16 22 A9 20 61 E2 3A 2D 2C 06 C3 E2 1F A3 CE 47 35
+81 70 14 0F 8B 3F 89 E5 E5 DE B3 CF 3E 17 8F 69 B5 B2 AD 5B B7 B6 5A AD C3 87 0F 1F 39 7C 70 79
+B9 1F AB C3 40 55 41 00 06 83 61 F2 3D 0F 56 7A 0B 0B ED 98 0E 3E 3B 3B 9B 08 09 BD DE F2 9E 3D
+CF 1F 3F BE B8 96 13 FD AC CA B9 D6 57 66 BE FD F6 DB 76 EC D8 B9 F7 F9 67 77 CE F3 6B AF A7 EF
+BF 1D 57 5D 6A 37 6F A3 F9 AE E6 86 FA 8A 23 87 F4 BE 87 FD 9F 7D CE 7C E3 69 F5 5E 83 E0 E8 B1
+C5 C7 1E 7B EC D6 5B 6F BF F1 C6 1B 97 96 96 87 C3 32 CE 1F 11 76 24 BA 93 73 D6 18 13 F3 FA 93
+A1 99 9C 5F F1 03 22 E3 BD A7 8A 4D A2 71 16 8C 4B 27 6A 28 36 BE 64 8B B5 1C 13 6F A2 63 01 95
+9F 35 95 B7 A0 DA 57 60 62 32 6D 8D 84 38 5D A5 8E 1B 57 B7 81 F1 C2 47 B1 FA 67 3D C7 57 C0 B1
+99 CB 15 17 E2 04 16 13 B8 8C 3F D4 64 00 34 9F 34 1E 23 22 7B F6 3C B7 6F DF 3E 22 CA F3 6C F3
+E6 CD 44 B4 EF 85 BD BD DE 8A F7 4D B3 B4 69 76 57 1F F7 07 65 7F 58 02 58 5E EE 1D 3C 78 B0 DB
+ED 6E DF BE FD 92 4B 2E BD FE FA EB AE BA EA EA 47 1F FD C6 F3 7B 9E 0F 3E A4 61 2E BE 78 E7 8B
+A6 25 6B CB 79 B0 07 76 ED DA 75 F7 EF BE F7 FF FA B7 FF FD DB 5E 2B B7 5C 81 1D 5B 75 EB 36 CE
+5B 95 C3 A8 0B CC 4F D3 CE 8B F4 EA CB E4 43 F7 E2 33 0F A1 5F 00 84 85 85 A5 7F 7E F4 91 6E B7
+7D E3 8D 37 2D 2D 2D C6 BE 70 AB 11 49 FA 23 CE 4F 09 DC 24 73 96 88 12 85 25 CE 7A 91 B9 D7 44
+3F 51 7D 13 5C 4B 86 63 59 86 06 AA 33 11 E4 51 CD 0A 88 7B 6B 24 34 BA 87 04 E3 A2 02 35 A7 F6
+74 D1 78 0F D1 56 4E 8B 43 63 2F 35 C1 62 AA 3A 5F 1B CA 15 76 C4 88 8A 59 99 07 45 51 3E FC F0
+23 FB F7 EF 77 CE CC CD CD 18 C3 B1 B8 D3 7A 5E 93 56 FF 21 B6 39 58 5A EA F5 7A 3D 66 9E 9E 9E
+DA B5 6B 57 96 39 6B DD 9E E7 9E 0B FD A1 02 3B 76 EC 78 FF FB 7F F7 4C 35 63 1D 72 7E F0 D6 B5
+97 B6 7E F1 8D EE CA 4B 87 17 6D C5 EC 6C D6 EE 8C 37 89 05 A6 DB F4 8A 9B 78 66 DE 6E EA 86 8F
+7F 59 96 FA 20 C2 CA F2 D2 83 5F F9 0A 11 65 99 BB EB AE D7 6D DE 3C 5F CF 5E 27 F0 22 A7 C0 69
+DC 14 D1 89 D8 8D 8E 17 44 8F 9B 75 19 AC CA 11 11 E7 D9 10 2A 37 FE 04 AA 73 CE D4 33 DF 08 A5
+35 6F 29 FD 84 52 F4 2B 01 AC E8 3B 9B B8 87 F8 1B 69 CC CD F1 96 C6 10 15 46 B9 68 D5 55 22 0A
+24 B6 54 FD 42 38 06 81 55 B1 B0 B8 FC D0 D7 1E 1E F4 07 9D 6E BB D3 E9 1E 3B 76 EC B4 73 5F 55
+75 79 B9 B7 6F DF BE 6E B7 4B 44 79 9E 6F DF BE BD B7 BC 7C E0 C0 81 D2 4B 73 16 38 AB 72 1E F4
+75 B8 7C E0 F0 37 FF E0 B2 ED 61 7E D6 B4 36 89 B3 A4 01 93 F1 6D 46 DE A2 EB 2E E3 7F F5 93 20
+A2 8F 7D 29 2C F5 51 06 5D 5C 5A 7E E4 91 47 DA ED B6 88 DC 75 D7 5D 9B 37 CF C7 15 30 A2 90 C6
+CC E7 E3 0B 8B F0 1C 00 AA 66 C1 92 7C E9 11 CE 27 D7 41 8D EE 47 A5 36 93 44 BD 8C A8 28 59 A2
+69 73 35 7C 5C 0B 02 26 80 05 20 56 EF AA 4D EA D5 10 0A E9 0E 53 EE 61 DC 9B 0E 4E 57 51 95 62
+F1 99 E2 D0 43 7E 70 54 95 98 29 88 46 AB 77 65 69 79 A6 78 70 C7 3C 69 36 15 82 5F 5E 5E 11 59
+F3 F6 4E 29 F1 C7 B3 B2 B2 B2 67 CF 1E 6B CD 60 30 68 B5 DB 6C AC 96 93 74 8B B3 27 E7 43 5F 97
+5E 08 87 EF 9F D9 24 DD 29 58 28 23 A8 AC D2 57 80 19 2D 47 D7 5C CE EF F9 51 10 F1 C7 BE 2C 0B
+BD 20 A5 3F 76 EC F8 FD F7 DF B7 B0 B0 B0 B8 B8 F8 D6 B7 BE 65 C7 8E ED 18 F5 59 D5 46 31 C0 C8
+46 4D E1 CA 8A B2 84 06 D6 01 46 F1 A1 E6 7C BC 1A 49 A4 14 9A 74 64 13 42 A5 78 41 0D 92 C8 7B
+1F DB 75 A4 25 BE 81 ED 12 A3 25 65 7B 73 F3 66 9A 88 0D 63 2E 55 6E 1E 5C DB AC 52 1C BC 7F E1
+F1 0F E9 F2 83 D6 0C 6D 46 41 33 20 44 7D ED 04 FE 1F 5E 7F E8 A5 97 D8 2F 3D E6 BF F4 8D 7E 51
+96 A7 AD AC 44 D4 6A 65 F1 41 CA B2 5C 5E 5E 3E 7E FC F8 CA CA B2 B1 56 31 8C 93 EE 69 0E BD 11
+39 D7 FA BA 7C E8 3B DF BE F7 5F 77 AC E4 99 63 1E B6 AC 15 58 C6 1A 91 40 82 73 74 C3 2E FE E5
+1F 53 43 F6 6F BF 24 C7 7B 3A 18 0C 0E 1F F6 5F F9 CA 57 16 17 17 07 83 FE 8F FC C8 8F 5C 7C F1
+C5 13 5E F7 FA 5D 6A 32 03 9A EF 38 15 03 4C 5E A4 3A 3E 54 D9 94 31 64 95 CA 4F 94 A5 CF 32 D7
+8C 36 A1 B6 2F E3 DF 09 9F A5 BD 91 64 53 83 A1 8A 81 D5 34 4C 57 7F 92 20 54 5C FA 6B 80 A5 13
+0F 95 EC 5A 11 31 C6 16 8B CF AD 7C F7 F7 B1 F0 B9 EE 74 E1 BA 84 76 2C 3D A7 00 69 A9 34 A0 EB
+AF A1 4B B6 63 B1 18 FE E3 D7 8B 04 C8 4E 4F BA DD CE DC DC 3C 11 F5 7A BD E5 E5 E5 A5 C5 85 41
+7F 65 6E CA EC 9C EB FC D9 87 FF 78 6A 6A EA D4 43 9C B1 9C 53 7D 55 D5 27 3E FD 3F CB C2 37 B2
+29 9B 99 92 80 A0 26 B7 02 85 0A D6 A8 D3 03 97 D1 0D 57 D2 7B 7E 54 18 E6 AF BE E8 97 56 2A 7F
+D3 13 4F 3C 71 CF 3D 7F D1 EF 0F DE FE F6 B7 EF DC B9 A3 E9 FF 4F 5E 2A E6 51 50 AA 09 B9 54 D5
+7B 71 CE D4 D0 8A D2 44 98 D8 FE 22 21 3A 71 22 12 8A 98 A6 09 83 12 DE 6A 3E E0 44 08 2A 5D 34
+1A 9D CD 8B 36 01 56 ED 31 1D B9 05 22 C0 52 D5 58 04 2E 4D F0 54 77 F9 62 E6 B2 0C 83 BD FF E0
+17 FF A9 D5 42 36 65 68 86 28 B3 A8 59 32 EA A1 2D 81 72 E6 4D 11 D0 2F 33 42 B1 56 0E D2 7A DE
+5D 74 CD 2E 2E 2E 0E 87 C3 E1 70 D0 5B 19 6C 6A F9 77 7C BF BC E6 A5 ED CB E7 9E 80 DE B6 E6 2B
+7C F1 E4 9C EA EB 91 A7 3E 53 2C 3E ED 0C AC 63 70 C9 EC 40 A1 2C B3 3C 3B 05 ED D2 38 5C 71 05
+FD EC 9B B1 B8 6C 3F F6 20 7C E9 CB D2 2F 2F F7 9E 7C F2 C9 BF FA AB BF 5C 59 59 F9 E9 9F 7E E7
+A5 97 5E 6A 4C 9E 38 D4 13 5E 9E 34 27 A1 76 4C 46 78 D4 70 1B 55 2B BC B5 A6 DF 2F 9D 73 65 59
+A2 B1 3A A3 A1 8E 71 62 75 AE D2 B3 34 EC 04 AA 5B FF 45 9B 69 95 AB 01 56 1C 36 E9 6B E3 60 2A
+16 9E 18 F6 96 4D 37 C0 1B 0C 54 CB 12 B9 A5 68 1C 3B 90 D1 10 EC 62 30 FB 0E 1E 95 12 A7 AD AC
+86 90 B5 F2 EE 54 77 79 79 79 38 1C 78 5F 0E 56 FA 65 51 5C 79 99 DC 75 A3 79 D9 8D 62 8E FD 56
+E1 9E D1 D6 2B F2 F9 37 9C DE 25 D6 29 E7 54 5F 8F 3E F1 71 1E EC 6B E5 64 39 58 47 44 0A 75 CC
+41 03 F8 A4 E0 52 81 6E 46 D7 5E 66 7E F6 07 E9 C8 4A F8 E2 37 10 04 65 E9 17 8E 2F EC 2E CB 8F
+7C E4 23 0B 0B 8B EF FA 99 77 5E 77 FD F5 9D 4E 1B 75 1E E9 84 8B C0 18 93 9C 8B AB 03 5A 35 D6
+89 A8 C8 D6 97 45 BF 3F E0 3A 4D B7 AE DA 32 62 EB 8D C7 A5 D0 28 D8 11 E2 B4 DD BC E8 E4 43 D5
+10 6A D5 26 4D EC 4D 55 91 57 0F 22 81 CB A1 29 5C 28 96 34 0B 04 03 6D 95 D4 6E 30 2B 42 79 EC
+58 FF C8 62 47 C8 03 A7 09 8C 94 D0 6A E5 D6 D8 E5 E5 A5 E1 70 A8 AA FD FE 70 BA 4B 2F BF C5 5C
+BD 8B DB B3 65 D6 59 D2 E5 0F 0C 8E EE 24 FA 40 36 77 D7 E9 5D 65 3D 72 EE F4 75 EF 23 7F 76 F4
+7B 9F C8 0C 19 D7 62 37 30 06 AA 02 78 26 05 55 8B D8 5A EB 09 09 D4 68 77 86 6E BB 56 7E E1 4D
+7A E4 18 3D BA 5B 01 94 3E 1C 5F 5C 2A FC 73 F7 DE FB 89 85 85 63 EF 78 C7 3B BF EF FB 5E 39 35
+35 15 B9 7C 69 B5 4D 00 2B C5 4B 53 26 4C 62 3C 35 33 46 EA B2 40 EA 2B 09 CC AC 5A 31 69 62 D4
+2A 9A A7 75 3C 69 84 EA D2 B0 A3 9B 27 10 51 BC 87 14 A4 88 9B 35 56 A3 26 BD A1 09 B0 EA D0 1D
+47 FA 4B 8A E4 55 BF 46 02 31 20 A4 CA 1E D6 06 6F 88 68 40 22 0A 03 B5 04 A0 EC CB E1 C3 B4 B4
+54 12 4E 3F 1C 25 82 41 AF 77 D8 87 B2 2C 8B A2 24 22 06 AE D8 9E BF EE 96 72 76 BB BA 2E 09 60
+8C B6 B2 E7 B5 7C 14 F8 FF B8 BE AA 84 83 8F FF 3F CF 7E E1 3F 64 58 C8 3A 26 6B 0D 89 15 44 C6
+E6 CE 06 26 65 7B 8A 95 4A 8D 92 12 5B CD A7 E9 A5 37 D0 8F BF C6 BC 70 2C 1C 3C 56 B9 30 7B BD
+95 FD FB F6 7D EA 53 9F 3A 70 E0 C0 C1 83 07 DE F4 A6 37 6E DD BA 95 99 A2 4B 1E 35 C0 9A F0 C6
+13 11 D1 08 CD A4 08 3B D5 4D 5C 89 18 55 93 8C 32 CF 5D 74 96 25 33 23 E1 F4 06 6E 1B 1B 76 42
+41 D7 22 10 4E F0 21 23 DE 4A E1 E5 74 95 54 B5 B3 B9 69 8D 31 0C 32 21 32 69 15 0C 28 04 3C 24
+CD D4 07 04 60 65 51 8F 1F D5 5E 91 29 05 C0 9F B6 49 30 28 02 CA 5E 24 83 67 99 DD 3E 13 DE F6
+5A 7F E3 8D B6 3D A5 2A 10 21 40 89 B1 B8 FB 77 02 DF DE D9 F2 9A D3 BB CA 29 E5 AC EB EB F2 0B
+0F 2C EE FF D6 9E 2F FD 96 D1 7E 9E 5B 67 33 6B 07 59 4E D6 82 89 98 31 9E 0A 70 62 A1 40 00 48
+A9 95 E9 FC 16 7E C3 2B B0 E7 80 DE F3 05 ED 17 55 69 87 FE CA 4A 59 96 0F 3E F8 D5 23 47 8E EE
+DE BD FB 6D 3F F9 B6 AB 5F 72 75 CC B1 96 BA 41 EB 04 FC C2 B8 3F 21 CE 5E 44 64 0C A9 EA D4 D4
+14 33 47 3F AE 31 56 44 27 68 8A C9 24 88 53 DD EA 61 53 EC 2D 5D B4 79 7A D2 F5 1A BA 8D E1 AD
+B2 AC 62 B3 29 AC 3A E1 00 A9 3E 57 29 B5 AD 6A 81 52 85 01 06 AA FE 33 A1 24 CF F0 A2 C3 15 14
+03 2D CA 12 2A 67 E2 72 AA C3 5D 4A 80 31 FC BA 97 EA 1B EF C4 DC 16 95 00 5F 2A 42 00 AB 71 C8
+5D AF 77 E0 6B F9 CC 2B 8C 3B 75 85 8E D3 90 33 D5 D7 23 4F 7F EE F8 0B FF CC 10 34 96 9B 12 C6
+A1 03 5D 04 70 E4 DB 1F 5E 3A 7A B8 65 7D BB E5 AC E3 CC 15 79 1B 4C B0 86 8C 81 62 23 29 0E 0A
+23 D4 ED EA CE 9D F2 A3 AF 35 4F EF D7 2F 7E B3 CA CC F6 02 3F 2C 15 BD C7 1F FF D6 BE 7D FB 0E
+1D 3A FC F3 3F FF F3 37 DC 70 7D A7 D3 4E A9 DB 4D BA 74 DC 4C 48 A8 FA 2E 1A 6D 01 A3 B6 45 52
+0E D1 C8 0D 54 B3 04 47 A9 B9 F1 C8 26 5D FA 04 37 7E 22 CC 57 9B 19 C0 38 DE 4A 9B 22 A3 7A DF
+89 9A 88 2A 14 17 6B 76 C0 B6 66 C8 12 00 A6 40 A2 C9 E3 1C 82 86 80 72 A8 C5 82 B0 60 AE 15 5A
+46 86 6B 15 47 D8 88 30 E1 C6 8B E5 87 5F C5 3B B7 81 55 59 A1 81 8C 8A 2A 05 81 09 FA F4 57 EF
+6E EF F8 89 A9 F9 CB CF F8 52 27 90 0D EB AB 8A 48 28 BE F7 8F BF ED 07 87 D8 F2 CA BE 87 FB C7
+9F 23 8E 15 AC 54 C2 4C 90 41 40 C9 D2 52 F2 00 32 57 76 3B 59 27 77 CE 15 59 56 3A 07 63 C0 CC
+C4 39 93 18 B3 C1 2F 50 E0 40 73 33 7C CD 2E 7D F7 1B F4 B9 43 F6 E9 7D 23 2E 55 51 94 12 C2 C1
+E2 C0 C7 3F FE F1 85 85 85 77 BF FB E7 5E F5 AA 57 45 04 16 79 7D 18 E1 FD 11 4E 9A C8 DF 8A 87
+45 F7 B8 6A 82 81 4D 96 60 A4 B9 30 1A B8 AD E6 DC 78 6B 9B 81 FE B1 BD 18 C7 7C 54 07 D5 56 63
+BE 28 29 91 C1 56 4D 15 15 90 98 F1 12 C7 89 9E 56 55 F8 52 B5 5D DD A3 02 A5 AA 02 26 D8 50 7A
+00 2D 87 F9 AE 66 16 CC 38 C3 D2 83 A2 B8 74 1E 6F 7B 65 B8 F1 6A 93 4F 31 40 12 D4 78 08 C1 29
+44 01 05 FB C1 99 D8 CA 27 97 8D E9 AB AA 3E 73 FF 07 0E 3C FE D1 FE D2 81 16 8E E4 2D 6D B5 30
+3D C7 64 E0 43 6E 51 FA B0 32 F4 A5 88 16 A1 0F 62 4B D2 CA 32 6B 8B 2C 03 51 B0 8E B3 16 98 39
+CB B2 CC 79 B6 1A 8D B9 8D 89 20 73 98 D9 C6 B7 5E 87 B7 BD 8A 7E EF 5E F4 87 9E EA DB F3 3E 04
+91 23 47 8E 7C F2 93 9F 3C 74 F0 E0 DB DE FE F6 B7 BC E5 2D 3B 76 5C 64 2D C7 1A AE C9 10 C4 28
+31 66 64 D1 26 B6 61 F2 7D A6 CB 36 C9 50 69 61 6D 5A 9F 69 73 35 FC 3A 61 7C AB 89 AB 92 4D 9C
+E2 05 89 10 93 6C 8C 64 2A C4 E2 F7 21 84 C1 A0 E8 F7 07 C6 91 FA 68 5E 54 11 3D AB 34 F0 3A 1C
+7A F4 D5 28 A6 BA BC 63 33 3A 79 58 5C D1 33 D1 57 55 CC 74 F0 C3 2F 37 DF 77 33 CD 4C 71 29 E4
+0A 85 C0 04 04 06 48 33 4F 0C B2 B2 15 38 5B 5C 82 0D E8 AB 84 F2 D9 07 FF 60 F7 97 FF 43 AB 25
+B3 6D 6E E7 9A 65 60 03 32 4A 0C D5 21 44 5D F0 2D 45 29 26 94 CE 72 41 50 E3 86 26 03 B3 5A C3
+CE 11 11 BB CC 19 2E 2B CB F5 B4 44 15 F9 34 36 5F 4C AF BB 43 1E 7D 46 FE E1 11 88 56 13 60 4C
+3B 1A 0E CB E1 F0 F8 17 3F FF F9 DD CF 3C BB 77 EF DE 9F F8 89 9F B8 F6 DA 6B 9C B3 D1 D9 3F 81
+93 9A 6A 11 D3 65 13 54 6F 1E 9C 38 2B 54 07 A8 52 18 22 11 B8 D2 50 71 E9 6F 02 AC D5 D1 AC 34
+1A 35 E2 5B AB 32 B4 24 95 1D A0 BA 40 E2 F1 E3 4B BD 5E 6F 30 E8 F7 FB C3 D6 CA 8A F1 EA 1C 05
+61 2F A0 00 AF CA 42 22 0A AF A4 80 C2 41 AE D8 82 CB B7 E8 D1 65 14 75 4B F9 0D 11 AE 23 AE 6D
+E7 78 FD 4D FC 43 2F C7 8E 8B A0 56 05 A4 02 F6 F0 50 17 88 0C 94 80 00 55 07 3D DD 57 7B 2A D9
+80 BE 1E DF F7 8D 27 BF F4 EF A6 5B 3A DD 81 CB 8C 73 81 9D 1A 43 C9 81 28 02 6F 88 54 2D 84 5A
+43 25 58 06 33 88 C8 65 0E 10 B6 CE 32 3B 5B 30 9F 80 30 B0 01 51 58 42 7B 86 AF BE 5C DF FE 1A
+F3 FC 61 7C EB B9 B1 79 83 A0 A2 18 94 E1 C9 27 9F FA F0 87 3F BC B8 B8 F8 CE 77 BE E3 E6 9B 6F
+CA B2 BC F6 C6 C3 7B 49 B3 6C 72 D6 D2 38 CF 68 50 6E 18 3D 00 00 20 00 49 44 41 54 3C 2D 2C 66
+22 44 74 A5 21 88 73 29 F1 AB 32 46 1B FC D7 E8 49 00 1A F0 6B 22 BE 45 54 51 10 6B BC 35 02 58
+54 07 05 E2 6C 5E 3D 14 41 55 8F 1F 5F 38 7C F8 70 AF D7 2B CB 12 20 EB 03 09 82 87 75 19 21 04
+04 08 49 00 3C 82 87 F7 10 01 13 2E 9A A3 97 5F 6D 8E 2E 87 DD 07 21 CA 22 32 F4 EB B2 65 E3 B5
+19 98 9F C2 EB 6E A4 9F 7A 1D 5F BC 55 39 23 10 38 40 40 2C 1A 29 67 0A 65 05 79 0C CA 9E E0 6C
+D5 DD 58 AF BE FA A2 77 E0 D1 BF CC 11 DA B9 69 B5 C1 66 68 2D 5C 6E 99 61 6C 8C D2 88 8A 7A AF
+44 21 C2 0B 11 30 C3 58 47 C4 D6 90 61 52 15 C3 DE 58 3D 3D A7 4A A2 71 51 20 2D C9 E6 E8 6E A5
+5B AE C7 0F EF A5 17 8E E0 E8 32 92 0B 35 DA 7D 0A 88 C8 B3 CF EE F9 8B 7B FE FC E8 91 C3 3F F3
+AE 9F BD E3 8E 3B E6 E6 AA 66 54 CE 99 94 1B 3D 01 77 26 28 82 CD B4 B0 66 0C A2 59 5E A0 19 47
+4D 9B 13 D1 2F 5A 15 DF 4A D6 70 13 60 A5 D6 9E A8 66 C1 C4 CC 92 5E AF 77 F0 E0 C1 5E 6F 25 D4
+55 D9 54 23 E3 4C 25 14 6A 38 F2 13 CB DA 3C 57 D5 D2 AB 0A D8 D0 B5 97 60 69 40 BD 02 FB 8E 91
+A2 FE 82 4E 2A 04 18 46 EE 70 E9 3C EE BA 91 DE 74 3B 5F B6 43 5B 6D 52 80 7C 9D 79 46 0C A3 10
+75 44 08 28 84 0D 2D F2 F9 D7 D7 C1 C2 FE 6F FE 55 2B B3 B9 23 42 61 1D 59 0B 97 71 EE 18 15 2E
+05 00 63 AD AA F3 7E 08 55 63 60 0C E5 8E 88 95 4D 89 40 64 41 7C DA 1E 40 80 20 80 A8 5A 22 0E
+22 C2 2E A7 99 2D F8 BE 97 9A 07 BE 2D 0F 7C 3B A1 76 84 C6 9B 10 91 03 07 0F DF FB C9 4F 1D 38
+78 E8 6D 6F 7B DB 1B DF F8 C6 8B 2F DE 19 8D C8 46 42 62 C4 49 63 14 C1 B4 39 11 88 AA 9E B4 81
+DB 26 72 53 D3 66 3D 35 52 F3 2A CD 41 D6 E2 34 4E 04 E7 62 AE 5F BF 3F 38 7A F4 D8 70 38 6C 16
+6B E1 D0 83 06 09 28 4B 65 23 36 FA 07 94 42 50 00 A4 70 96 5C 86 BC A4 B9 69 7E D5 35 EA 0C 3E
+FB A8 7C 6F FF A9 ED 01 22 B4 1D AE D8 4A 77 5C 89 1B 77 F1 35 17 D3 D6 59 E4 99 B2 25 C7 20 22
+83 E8 E1 51 2B 44 D1 37 62 E0 80 4E AE B4 81 EE DE 1B 93 75 E9 AB 84 F0 CD BF FF 93 20 7D 36 C6
+64 9C E5 C8 5B E4 B2 B6 31 C2 5C 12 81 00 55 08 D4 59 28 28 33 26 A8 B5 54 10 11 71 60 0B 62 52
+73 46 E4 20 C4 05 D1 C3 98 F8 FB 26 2D 35 CB 31 3D 4B 57 5E 22 3F 76 27 7F EF F9 70 70 F1 C4 27
+AA E2 E8 91 63 F7 7D E9 4B CF 3F FF FC 9E 3D CF BF EB 5D EF BA F2 CA CB 13 C0 E7 BA B0 66 72 AC
+36 B3 A0 52 20 2A D6 10 6E 02 AC C6 91 63 34 C5 54 D0 20 11 55 93 71 5C 67 90 5B A0 89 D2 26 39
+8D 69 84 74 80 8A 0E 07 FD C5 C5 C5 A2 18 6B 8E E5 D5 59 10 47 97 0B A8 F4 9E 99 18 1A 24 76 0C
+85 61 38 83 CC 89 0A A8 6B 5E 75 4D B8 74 9E 1E 7A 1A 0F EF C6 52 5F 23 25 DC AB 89 7D 0F BC 20
+37 C8 2C E6 A6 70 D5 0E BA E9 12 BA 74 87 D9 32 AD 33 6D EA 4E 51 A7 25 2E 23 63 41 00 07 B5 86
+94 60 2C 89 A8 25 82 00 04 66 99 9F D7 55 E9 C3 2F 9A AC 4B 5F D9 98 EB DF F0 73 0F EF F9 90 33
+03 66 21 43 C4 30 B6 40 ED 3F 25 02 18 AC C4 AC DE 08 7B 82 29 8D 27 32 20 86 06 E0 0C D0 D5 48
+08 CC D0 80 60 94 41 59 81 A1 25 93 69 77 2B DD 71 03 BF EA 71 DC FB 50 F0 6B E0 5F 51 5D 19 14
+4F 3E F9 E4 1F FF F1 1F 3D F9 E4 F7 DE F3 9E F7 DC 7A EB 4B BB DD 4E CD 94 1D 29 47 54 3B AC 4A
+B4 8A 41 D4 48 93 12 09 D6 DA E4 E4 9F 38 B2 39 8E 36 12 01 6A 7C A6 21 48 33 AD A5 19 B2 AA 1E
+94 62 CA 6B 68 C0 38 AF D2 8F F0 6E CC ED CF 0E CA 7E 60 8C F5 CC DC CA B8 F0 12 C3 DA 86 61 32
+0A 41 AD D3 76 80 2A 11 93 65 BE EA 62 6C 9F 97 3B AF A5 85 9E 1E 59 A4 C5 BE 0E 0B 25 A3 2A 4C
+44 F3 33 B4 63 5A B6 CD 60 D3 94 71 8E 32 A3 CE 20 6F 69 3B D3 56 6E 5A 6D 31 16 C6 22 73 6C 0C
+05 52 D3 28 6D 1F AF 9B 4D C3 2F 3F E7 A6 77 9D 49 78 62 2D 59 97 BE AA C8 F2 FE C7 19 A5 A3 40
+00 B1 02 A4 6A 88 CA F8 B2 C8 01 0A 66 A8 C0 0A C5 4D B5 D5 03 D0 1A 17 51 59 57 70 6B 4C E2 80
+51 B5 04 EC D5 B5 A8 25 BC 6D 87 FC E0 9D FC CD 67 F5 A9 7D B2 D6 B7 24 22 83 41 71 E8 D0 E1 4F
+7F FA EF 8F 1C 39 F2 8B BF F8 8B 6F 78 C3 EB 37 6D DA 14 51 4E 5A F1 23 30 6A D2 5F D2 08 B5 7A
+81 D9 D6 47 22 2A 5F 52 A3 B8 89 F1 F8 56 9D BF 05 8C 5B BA 29 BE 85 AA 90 02 A5 38 19 33 31 DB
+94 35 AE E0 C2 DB 46 E6 77 7A A8 A0 75 58 21 04 19 7A B2 96 2A 17 2F 81 18 64 C0 06 D6 22 0B 04
+88 21 B2 0A 67 CD 54 17 AA 28 3D EA 9F 38 81 19 50 76 64 60 2C 41 0C 39 42 EE 90 67 68 B5 B9 DD
+41 D6 0E 59 4E D6 B1 35 20 26 22 98 D8 15 8C A1 02 B2 88 7D 90 A6 6D 79 E0 6B FF EB 25 3F F8 79
+E3 BA 78 B1 65 9D FA EA BF F7 A5 BB 45 A1 B6 0A EA 11 A9 E5 12 20 B6 15 38 8C 16 2C 31 24 40 C3
+D9 65 42 2A 34 72 63 B8 50 64 30 96 3A B3 74 D3 95 78 E3 6D BC F7 88 9C BC 0C 54 08 61 D0 EF 3F
+F4 D0 57 17 8E 1F 5F 38 7E FC C7 7E FC C7 E7 E7 67 01 58 6B 22 85 20 35 D2 48 9B 09 7E 9D F0 5E
+6A AA 61 E5 F4 01 74 22 6C 86 55 A5 E0 1A 27 57 00 2B F9 C8 9A 00 0B 0D 26 F8 5A A5 B7 43 10 EF
+33 C7 FD B2 50 63 47 7D E7 98 21 A2 4C 70 8E C4 43 44 09 62 19 A5 D7 A0 E4 2C BC 87 28 5A 19 BC
+98 58 78 88 58 A1 6C 58 62 06 2E 9C 76 32 38 D6 AC 4D 9D 16 32 A7 AD 36 19 4B D6 90 21 C0 2A 07
+62 43 D5 AF A5 99 6B 4B 68 B7 0E 2D ED FE C8 EC 35 BF 70 B2 37 71 5A B2 5E BC C5 58 08 21 B0 88
+1B 15 BF 25 43 A0 80 B8 E8 8F 8E 34 75 62 71 3D 11 A8 5F 63 8A D5 0D 4E AE F1 AA 04 0E 14 A0 60
+22 21 EA 23 6F 13 66 78 6E 5B 78 F5 8D F4 D5 EF D0 C3 4F 4D A6 16 36 25 04 E9 F7 87 FD 41 F1 F5
+87 1F E9 7F F0 83 CB BD DE 4F FD D4 DB 2F BA 68 1B C6 E3 AE CD 4D 6A 54 FB 89 56 66 13 51 35 03
+10 18 8F 60 25 93 34 CD AF D1 9F 95 D8 86 09 60 11 A1 39 4E EA D8 96 82 14 00 52 CB A4 64 BF 8A
+48 19 C4 A8 83 E6 06 03 05 8C 81 F7 6A 2D B1 81 08 8C 81 06 30 C3 DA CA 1D 10 CD 33 01 32 87 20
+10 85 0B C2 D0 00 06 C1 92 44 D6 17 18 99 55 EB 40 96 5C 46 59 AE 79 86 76 CE CC C4 06 6C A0 52
+97 94 A5 58 E2 A1 FA C6 24 00 8A 2E 7A 47 1E FF ED 42 B1 ED DA 5F D8 F0 0B 3E A9 AC 5B 5F B3 19
+91 A2 44 CC 65 03 40 5E 1C B8 34 27 0A 9A 4F 7E B2 D6 DC 74 7A BE 02 02 19 70 20 10 84 D5 02 10
+B5 19 3A 9B F9 BA 2B C2 5B 6E E7 DD 07 E5 F8 F2 9A 75 5F 10 FB 7B A9 8A 94 4F 3C F1 C4 1F FD D1
+1F 65 59 F6 D3 EF 7C E7 A6 99 E9 26 C0 A2 46 6A 61 B3 6C 51 4D 45 9D B0 50 C5 5A 3B 81 B7 E2 C1
+4D 7A 21 11 C5 34 C3 13 26 8D 61 1C C6 35 ED 57 54 65 07 44 C6 7B 24 55 86 F2 70 85 AD 51 6B 54
+C4 97 6A 2D 07 AF 20 18 4B 5A C2 58 25 86 33 04 21 72 EA 2C 42 89 52 60 09 A2 10 81 3A 10 48 A0
+44 4A 20 36 B1 0E 1C 8C 05 33 32 87 2C 47 AB 85 2C 63 E7 68 C4 A4 1B FD 98 C7 5F 0D C3 07 67 B3
+D0 F5 FD 85 47 FF 5D EE B6 CE 5C F9 C3 1B 7F C7 6B CA BA 96 6D B6 D9 CD 3F F6 FB 92 6F 15 B1 02
+E7 03 44 D4 97 A5 C2 92 85 06 9C DC 93 B7 96 EA 9C B6 39 4E 04 36 60 C0 0A 51 49 A6 2F 4E 74 66
+DE 6C BE 84 BF EF 16 F3 B2 97 D8 B5 7A 60 4F 0C D3 EF 0F 9F D9 FD F4 5F FC C5 3D 5F FC E2 17 56
+56 FA D1 9A 4C 71 AC F4 7F 34 E8 54 CD 58 54 52 EB BA C6 91 69 2C EB 95 E7 3F 66 E9 34 8D CE E6
+E9 F1 30 D4 D9 26 71 D1 8F 7D 32 B8 EE 77 8C 3A CE 6C 8C 6D 94 ED 8E 43 49 E9 E1 41 3E AC 78 AF
+A1 EE 0E C6 86 A0 E0 F8 2D 19 B8 8C 4C 06 97 6B CB 99 DC 1A 97 A3 D5 56 EB E0 72 E4 39 DA 2D 75
+0E AD 96 3A 07 EB D4 65 C8 72 38 07 E3 B8 DD E5 56 3B 3A 2E C9 18 50 83 F6 79 C2 77 17 82 F1 A5
+71 B6 84 48 E6 CA BC 73 BC 58 FC 9A F8 17 B3 E1 CC 7A CD 4C D7 9A 31 68 43 83 86 10 DD 7F 04 25
+48 08 2F 0A F2 DF B8 08 14 15 27 4C 3D E0 95 54 A6 BA B8 FA 32 7D F3 ED 7A F1 BC 9E D2 BF 18 A5
+DF 1F 3C FE AD C7 FE EF 3F FF F3 27 9E 78 22 66 6E 25 D8 84 BA 6D 6C DD BE B5 EA D4 9A 7A 12 A5
+41 22 6C 47 95 14 50 35 CA 6A 96 71 45 5D 08 3B F1 B3 92 CD 5A 6F 8E 35 DC 6A 56 FC 8C 57 8F 69
+B7 13 76 30 11 AB A0 1F 5A A5 87 97 E0 4B 92 00 EF 05 91 A7 C5 15 5D D3 18 58 07 63 41 36 B0 0B
+99 35 99 E5 2C 27 67 89 AC 92 81 CB D5 18 B2 19 D9 8C AC A5 2C E7 3C A7 96 53 1B 4F 34 71 65 38
+35 DC 37 26 B0 0D 4A 10 35 19 D3 6C C6 FD A7 EE 3E F0 CD F7 07 FF A2 35 FC 5E AF BE 2A 10 54 24
+10 83 01 95 50 59 3F AA 56 84 4F 3F 04 70 BA 42 06 44 55 B8 CB 10 11 C1 07 F0 14 E7 73 FC 7D B7
+D0 5B EE A0 4E BE AE 71 82 E0 F8 F1 A5 C7 1E FB D6 7D F7 DD BF B2 B2 12 F3 5A A9 51 E0 2D 4D 99
+B1 25 0B 11 6A EF 29 54 47 30 28 6E 52 9D 4B 63 AD 89 40 0D 75 2D F9 D8 35 29 4D C6 51 F5 79 55
+4F A5 28 F5 89 15 F0 4A 11 DA 89 C3 14 1A 82 27 BF EC 83 42 28 78 F5 1E AA 10 55 C3 04 85 B5 64
+2D 19 0B C3 C8 72 72 39 19 47 E4 82 CD D4 58 75 96 46 FF 1C 65 19 65 19 E5 19 32 07 9B 51 DE A6
+48 A6 CB 73 36 BC DE 39 49 23 6E 61 0A 6A 8D A1 A9 A9 6C E1 C9 DF 7D E1 EB BF 2B F2 E2 54 EE 5E
+AF BE 12 D4 A1 14 30 40 E2 11 02 A2 27 91 E0 99 CF 67 7B DC 00 04 80 86 64 4B B1 84 7C 9A B6 6C
+A6 B7 BE 92 AF BF 74 BD 5F 71 10 3D B0 EF 85 2F 7F F9 CB CF 3C F3 6C 2A 5F 9C 24 22 A1 10 24 B5
+19 8A 9F D7 E5 B3 A9 B9 59 D7 D7 AE 0E 4E D3 64 5A D6 CB 32 35 CD 32 AB EF 4F EA 72 DB F5 89 A3
+A5 8B 88 AC 75 B1 1F D8 48 65 15 50 0C 7D B7 F4 10 21 D3 68 BA 24 AA 95 17 D6 92 73 64 2C 6C FD
+CF 65 64 33 72 19 B9 96 66 6D 72 2D 32 39 B9 1C CE A1 95 21 1E EC 1C AC 8D 13 33 19 43 96 D6 BB
+88 1A 02 02 0C 05 E3 94 8D E4 26 6C 9B E6 A5 6F FF C1 63 5F FC AF A7 D7 F6 7B 42 D6 AF AF C2 66
+25 88 F7 C1 47 17 86 08 42 30 AA 04 51 39 7F 95 C4 59 C1 80 0F 6A 4A 32 41 3A 1D 64 B3 B8 EA 32
+FA E9 BB DC E6 B9 D6 3A C3 82 C7 17 97 9E 7C F2 C9 23 47 8E A0 4E 73 4D 8D 87 AA AB D4 AA 39 61
+DD 4E E4 1A 24 34 D6 8C F7 26 7D 4D 78 2B 4A A3 78 FC A8 E1 56 33 B4 96 30 5F 3C D2 5A DB 6A B5
+9A 74 1C 66 06 51 49 03 01 BC 68 E9 AB 1E 8B AA 30 4C 86 88 09 04 64 8E 9D 23 66 58 07 9B C1 18
+18 46 74 FB B3 81 89 7A 69 E1 2C B2 1C C6 21 CB 60 6D F5 6B A9 82 D3 B4 5E 4D A9 16 3D 86 04 86
+C2 90 74 AC DF 32 B7 E2 9F FA 3F 9F 79 E0 03 7A C6 B3 EC 06 EC 01 09 44 64 48 5C 0C 9A 4B 80 31
+31 9E 0F 32 1B E3 A7 BD 58 92 A8 41 16 A4 0A 0D 04 A6 F6 2C CF CE D0 1D 37 E0 8D 37 97 76 BD 86
+0A 2D 2D 2D A5 FE CB 3C 6A CF 3E 6A 33 94 74 2E D6 2A 4C 7B E3 66 02 58 68 80 B3 38 DA 78 87 05
+4A 0A 9A 3C AC A6 6E B8 D5 3C B1 89 DB 62 D2 AC 61 32 06 69 7E 25 C2 D2 D2 E2 B1 C5 9E 51 0F 80
+C0 04 4E B5 07 A2 33 BF AE 81 A8 99 E3 76 CB 38 4B D1 96 B5 0E 2E 83 CB 90 67 B0 06 99 03 33 5C
+06 36 91 4D 0F 66 38 C7 CE 31 01 C2 AA B4 01 8B 2F F2 6F AC F3 B0 60 8B 00 74 BB 74 F9 45 0B FE
+D9 FF B0 FF D1 DF 91 33 B3 65 D7 AB AF 6C 3B 73 57 DC A5 12 9B 3F B0 04 88 C0 7B 1E 79 C4 CE 87
+51 50 FD 9A EB A4 11 2A C0 41 F3 16 E7 F3 BC 6D 8B BE F5 0E BC E4 62 5A 5F 95 52 2A 8A A2 DF 5F
+C1 A8 CC 56 45 02 4C CE D7 E4 4B E2 BA 63 51 DC 1B 37 65 D4 33 B1 82 53 C9 B4 8D 45 37 12 02 8B
+0A 3A 81 B7 50 6B 79 BA 4A B3 D3 6C E5 4F 30 21 33 92 98 62 65 59 7E E9 CB 5F FE EE 37 BF 3A 2C
+3D 13 C0 AA A4 00 44 41 44 12 10 54 01 58 8E A1 28 35 04 E3 C8 65 6C 2D B1 A9 D4 8F B9 5A F7 9D
+AB 5C E6 CE 92 31 64 1D 13 83 08 8E 29 03 9D 46 9B 23 82 8A 68 00 B3 B1 B0 68 4F F1 D6 AD 5A 3E
+FD 1F 0F 7D EB EE 33 81 5F EB F7 0F 6C BA EC 95 BF A6 8A A0 56 C1 C1 47 4A 9A D0 59 63 8E AD 5F
+88 01 81 8D 85 78 4A 68 A9 AE 43 ED 79 BE FE 72 FA C1 57 F0 74 67 9D 73 7F 35 93 A2 F2 2E 49 5D
+68 2D 4D 75 23 80 15 21 14 1A 61 A7 98 DB 98 FC 53 4D A0 D6 18 7D D4 A7 B8 39 66 CC 65 88 BE 85
+D4 68 B3 4E A4 19 F5 DD 14 35 A2 75 19 04 D5 67 9F 7D F6 F3 9F FF C2 BE 83 7B 74 28 50 68 A8 A6
+0C 66 A8 28 1B 30 91 31 60 03 26 18 13 9D FA 64 98 9C A3 CC 51 84 62 AB FF B9 8C 5C E5 0E 23 C3
+44 A6 0A 9B 6F D8 F8 24 58 13 E3 C1 DE 0A 98 D1 69 D1 FC 0C 97 CF FE DE 91 47 FE CD A1 EF 7C 7C
+83 C3 55 B2 91 7C 18 85 06 52 5F A8 27 CA C9 58 28 C8 AB 73 54 12 C9 59 63 94 AF 4F 18 20 90 82
+0B A8 4A D6 A6 EE 34 C9 45 F4 FA 97 E2 3B CF F1 3F 3C 2C A5 9C 6C 45 53 D5 E9 E9 4D 3B 76 6C 8F
+4A 56 D3 52 A3 25 80 F1 08 D6 68 C5 07 56 83 B3 91 CB A9 2E 8D 16 12 E7 35 19 0C 18 8B 3B D0 C4
+14 8B 3A 3F 76 1C E2 28 20 41 4A 55 01 F4 D8 B1 63 F7 7E E2 DE FD CF 7D CB 6E 0D AA 2C 8D BA F8
+C1 57 DA 59 11 FE 6B 6B 8D 1D 18 90 12 0A 02 83 F8 04 3F 63 02 0C 11 0C 62 AE 2D DB 2A B4 4E 74
+9A 19 03 C6 04 65 C4 34 07 F1 70 8E B6 CD 0E 57 0E FD E9 D1 E7 FF 0E BC B4 E5 EA 9F 05 36 36 7B
+6F 64 A2 57 52 65 A8 A8 90 7A 48 00 20 8C 92 48 C5 9F 7B 8F D6 64 CC 3A 0A 03 24 E4 4B B8 36 B5
+B7 F0 95 97 F3 4F 7F BF B9 EE A4 BE 02 55 ED B6 B3 3B EF BC F3 96 5B 6E 49 83 52 DD FB AA F6 E4
+57 F0 AB 09 A1 E2 A6 88 C4 BD B1 AE 77 73 E4 08 B0 9A F6 2B 57 ED B8 2A 67 6D FA B0 E6 B8 54 FD
+8E 6B 5D AF 86 8D 8A 6E 6C 46 EC 8A A2 38 FC C2 D3 1F FD E8 47 BE F8 C5 CF 4F DB FE 54 0B 96 C4
+31 C8 56 2C E4 68 2F 28 20 21 2E 16 F1 56 AA E8 77 70 1A F5 CF 12 39 9E FC 67 0C A9 D3 08 BF C0
+28 59 C9 55 9A 7D 26 C1 1D 08 C8 80 6D A4 F2 C9 D4 B4 EE 9C 3D 98 ED F9 ED EF 7E FC CD 0B 7B FF
+69 D8 3B BE 5E 6F F9 C6 F4 95 4D A0 3C C0 06 CA 55 49 15 2A EA 03 83 89 ED C6 D7 8B 33 16 0D 00
+A0 82 44 50 42 5C 12 03 2C C3 18 74 A6 A8 3D 4F 37 EF D2 1F 79 85 D9 D4 39 F1 F7 2D 22 79 9E 7D
+FF EB DF F0 4B BF F4 4B 5B B6 6C 29 CB 32 36 B6 8C 7B 53 7C 35 7A 49 63 E4 A9 51 D4 A8 EA 1F 9B
+E2 5B 75 B0 20 C4 16 F7 40 AC BE 61 D2 E9 68 00 AC D4 E8 26 46 25 E2 98 C6 70 E2 6E 37 7D C0 22
+5A 16 03 48 B9 6F DF 0B 7F FD F1 4F 7D EA 93 F7 2E 2F AF 80 33 0D EA 95 4A 21 02 4C 1D C4 AF BE
+1F 40 02 D4 54 E4 A0 E8 B1 76 4C 26 83 C9 60 73 D8 1C C6 C0 E6 30 0E C6 C1 E6 B0 0E 46 89 2C C8
+C0 38 B8 48 BE 33 67 CA 5E 8A EC 91 6A 28 82 06 58 4B B9 3B B6 73 D3 63 2B 8F FC F4 B7 3E F6 AE
+A5 7D 5F 5F 3E 7E 6C 3D 43 6D E0 46 08 A5 A1 15 D2 92 A5 87 AA 30 B4 35 C6 68 A4 B2 9F 35 8A EE
+9A 12 B9 85 5C D9 AF 71 22 31 00 A9 CA 00 3A 04 19 EA CC 72 3E C3 77 5E 47 AF BE 16 CD A5 3B 72
+58 89 F4 D2 4B 2F 7D C7 3B DE F1 EB BF FE EB B7 DF 7E 9B 31 1C 1D F2 91 C0 9F 26 CB 71 F8 35 6A
+2A EB 9C AD D9 2A 95 91 10 9D 4D 51 41 45 C6 02 5A 58 A3 C8 40 54 DF 78 30 C6 E9 8B 4D 6F 03 11
+86 85 7E ED E1 6F FE F1 1F FD F1 67 3E F3 D9 E3 C7 17 7D 10 4B 41 6B 6A 18 6A 4F 56 7C 3E 43 20
+56 65 88 6A 82 A4 58 C5 D7 A8 34 89 6B E6 27 81 1B EF F1 2C AD 99 64 A1 80 01 75 5A E5 EC 4C EF
+8A AD FF B4 FF 0B EF 3A F0 D8 BA 2C DA 0D D8 AF 8A 8C 79 13 D3 82 D7 CC 6A 50 55 09 15 3B 47 01
+AC AE 91 7D 0E 85 C6 BF 65 F2 AA 41 D5 72 6B 8A 66 76 98 4B 17 FD 0F DF C1 DF 79 5E 9E 39 24 C6
+30 88 F3 3C BB F2 CA 2B 5F F6 B2 3B DE FA D6 B7 DE 79 E7 9D DB B7 6F 8F 39 DC 31 BB 3F 45 B0 80
+2A CB 6F 34 F8 58 77 59 24 3E 61 DA 68 14 69 8B 29 59 A3 FD 3A AA 91 2D 3C DE E3 3D B6 84 8D C4
+C5 13 96 A0 F3 3E 7C FD EB 5F FF E0 7F FA BD 2F DF 77 7F 51 96 41 E0 8C 82 60 59 45 88 A0 60 4C
+D4 95 63 21 76 80 12 4E 54 0E FA FC 4A A2 EF 39 22 64 66 DB DC A2 2F FE 74 78 EC 65 F9 DC CD 27
+3F 71 03 FA CA 08 06 43 20 46 3B 54 82 82 82 EA B0 AA 21 70 D6 4B 7F 4E CA EA 45 2A BA 63 C9 44
+86 2E 4A AF 62 D1 EA 60 D3 0E 73 F3 B5 F8 F1 57 E3 73 8F 6F B9 FC BA 3B 2F BF FC F2 AB AE DA 75
+DB 6D 77 5C 77 DD 35 73 73 F3 C6 98 98 20 15 07 49 58 27 D1 A6 62 7C 0B 27 E2 13 A2 36 43 C7 29
+82 13 9B 34 B1 37 86 F5 B5 4E 97 4D 6C C3 7A 6F 35 AD C6 03 AC E5 E5 E5 DE E7 3E F7 B9 0F 7C E0
+EE 07 EE 7F A0 2C 3D 88 54 91 19 9D ED C0 31 3C 20 0A 09 40 5E 13 06 2C 01 08 AC 2A 64 CD 8B 50
+D3 E5 EC 09 31 B8 04 1B 1B 96 BE 5D 2E 7C EB C5 D4 57 45 10 0C 01 10 05 54 94 0A 81 82 0D 45 14
+59 95 75 3F 2D 56 EB 8B 22 44 F5 4D 91 32 48 87 EA 89 C8 D2 F4 BC FA 6D 78 C3 AD B4 F5 A2 D9 1B
+DF F2 33 AF B9 EB 4D 9D 4E 3B 3A DE 55 B5 28 8A 55 69 2D 63 54 2C AC AA 59 94 36 C7 F9 AF A3 23
+E3 A6 8E 65 68 51 82 6B 8D D1 AA 83 D3 D2 AF 8D 66 5D 71 D2 3D 72 E4 E8 27 3E 71 EF DD 77 DF FD
+D8 63 8F A7 FC 02 26 E4 46 32 CB 64 98 EA B6 B7 04 8D AA 2C 01 C2 30 4A CC 90 E6 AB B9 70 44 01
+82 86 4A 55 54 02 D4 9F 9A 50 B3 21 7D 25 20 A6 FA 05 15 4B 6A 1C 41 2D 1B D6 10 22 AB 30 1A 43
+B1 52 B6 8E 53 CE CE 04 60 6E 48 A2 EF C6 82 0A 55 04 E8 40 D0 62 66 B4 E6 68 FB 0A 16 57 76 3F
+F7 D8 BD BD 97 BF 66 76 76 36 04 1F 2B AF D4 05 B0 22 01 85 A8 4A B1 0A B1 02 5C 2A D9 92 F0 53
+24 FB A5 CD 46 DC 6B B2 76 7B 59 86 58 69 BE E6 CB 56 AD B9 E2 79 75 87 CE 6A B4 B8 19 AD E1 A8
+C1 DE 87 27 9E 78 E2 23 1F F9 C8 3D F7 DC B3 7B F7 33 32 DE 7E D8 1A E4 16 39 0B AC 11 05 98 4C
+44 E2 04 36 A8 E0 97 E0 94 B5 1F CF B1 A8 82 A2 EF C2 20 D6 53 54 65 55 11 59 17 BF 60 BD AB 78
+F0 C3 63 4F FF 63 B4 B8 18 04 25 8D C5 12 20 69 4E 8D 44 D8 EA 77 DC BC B6 D6 C4 3F C1 D9 5D 9C
+74 74 89 8C C8 00 12 10 0A 85 C2 75 B8 33 43 97 6F D3 95 3D 9F F9 EA 17 3F 3E 18 F4 79 D4 C0 7B
+44 05 AC 23 58 94 A8 7D 09 60 45 9B 21 02 B5 B8 19 01 7E 42 54 35 E1 70 0C 60 C5 0F D2 26 C6 00
+16 D2 DE 84 B7 9A 16 C5 A3 DF 78 E4 7D EF 7D EF EF 7F F0 83 4F 3D B5 7B B2 E8 31 21 B3 94 59 12
+54 D4 CA 00 D2 48 17 50 A8 C4 3A 37 95 C9 74 EE 5D 37 27 13 01 50 79 09 34 C0 97 66 58 C2 FB A1
+78 E8 3A 1A 2B AF BF FE C0 B1 3D 0F FD E7 9C 00 A0 94 60 41 00 59 43 04 A7 F0 08 02 53 B5 5F AB
+3C CC CD D5 87 C6 37 F5 9C 2C 4F 01 99 21 55 44 86 85 75 70 5D 9E 99 D5 1B B6 1F FB E6 03 FF E5
+25 37 DE 79 E3 CD B7 C6 44 94 68 82 C6 52 81 51 6B 27 7A CF A6 50 53 1C B8 B1 19 52 98 0A 0D 2A
+4C E4 C8 C6 4A 06 75 D6 78 65 BF A6 BB AB 4B 1F 73 73 33 0D 55 96 C5 3F FC C3 67 7F EF F7 3E 78
+DF 97 EF 1B 0C 86 AB D7 26 26 E4 0E 9D 5C 2C 13 04 0C 18 11 02 9B 58 9D 9B C0 04 48 74 97 9C E5
+39 62 23 A2 12 A9 30 80 40 60 44 4D 10 1E 0E 57 54 50 96 36 46 EF 4E 2E EB B6 07 14 12 54 0C 00
+38 B6 44 C2 26 56 8B 50 0D CA B6 0A 60 54 93 FC 1A 0B D0 08 21 9D 25 70 46 55 D2 1F 01 CA F1 35
+A9 7A 12 06 13 3A D3 08 9E B7 0F F3 43 8B 4F FF E3 C7 FE 60 DB F6 7F BF 65 CB 56 8C 77 26 AA 46
+A9 16 F4 B8 88 8F 85 9A C6 1B C9 A6 6E 30 63 AD 31 8D A1 BA 1D 9C A6 DE 18 D4 A8 8A D5 EC 61 8B
+AA 06 82 E1 AA 15 28 1F 3C 78 E8 9E 7B FE E2 4F FE E4 4F BF F3 9D EF 24 67 D9 84 44 7D 25 A0 10
+A8 92 04 15 89 AE 0A 22 C0 32 45 1A 3D 03 29 15 F4 82 10 82 06 10 A1 0C 5A 78 52 D5 B2 1C 06 AF
+E2 A9 73 C9 DB 3B 17 BF FE 94 03 AC 57 5F 8B 95 43 20 55 41 E1 B5 95 27 85 14 82 07 54 03 B8 CE
+DE 4E A1 94 93 DD F6 59 B3 A8 AA B5 8F 01 0F 62 38 25 18 1D 14 14 C9 47 36 47 BB 53 5E BC 45 9E
+FD CE 27 BE F0 E9 5B 7F F2 67 7E 79 75 EE 54 9A 05 13 81 30 4D BA 18 6F 2D 8B 55 39 58 8D EE 5C
+AB E3 AE 00 12 38 33 E3 E7 9A C8 DB 2A 0A FF F0 C3 0F 7F E8 43 1F FA E4 27 3F 79 F4 E8 F1 68 E6
+9E E0 19 01 66 E4 99 3A 03 11 12 1F 54 B8 26 D3 20 26 7E 70 AA F9 B4 6E 2A E0 59 95 CA 75 C3 10
+A1 42 72 1F 7C 31 2C 42 40 31 D0 10 0C CF BF 69 C7 2B FF A3 C9 67 4F 39 CE FA EA BB F8 E2 DB 9F
+F8 35 F1 CB 9C C1 18 AA 12 DB 99 0C 73 AC E6 4E 54 4F AE B5 69 B2 56 CD 81 B3 2D 95 C5 A6 A3 1B
+D0 FA CD 11 D0 CE 51 B6 D1 9E E1 CB B6 2C 7C ED B3 FF 75 C7 65 D7 DC F9 AA 1F 88 20 BD 9E F9 42
+B3 AE 1B 2A 44 05 AA 87 0B 21 30 47 7F 96 1A 63 22 84 4F 88 2A EA 74 6A 1F 17 4F 69 22 AA 66 08
+20 9E 0B 80 D9 14 45 F1 CC 33 BB FF E6 6F 3E F6 DF FE DB 87 77 EF DE 1D B9 B0 27 79 4C 55 40 C9
+72 B4 D7 25 04 D2 58 A0 2C EE 15 55 43 CA F5 E4 2A 6B A7 7C 9E 13 A9 56 3C C0 97 E4 43 5E 96 52
+14 85 1F AA 2F 51 0E 69 50 76 BA 57 BC 7A 3D CA 8A F5 CF AF A1 EC 67 46 34 56 0D 71 21 6F 53 AB
+C5 CE 19 32 3E CE A6 29 46 02 9C 37 65 1D 15 26 10 80 A1 0A 43 70 8A A0 1A 02 29 20 0A 07 C9 19
+17 CD F2 BE 83 DF FE D4 5F BE 6F 7E 7E FB 0D 37 DD 0C 68 02 58 71 A4 66 89 F7 54 02 03 E3 F5 DE
+62 99 41 AD FA 1A 98 D4 E4 3B 6A 6A 3C 4B 35 26 67 1B 91 10 33 A0 B5 EA 47 17 C7 A4 A2 28 9E 7B
+EE A9 CF 7E F6 73 1F FD E8 47 1F 7A E8 6B BD DE 0A C6 A3 5C 27 14 66 B4 33 B0 89 4B 3E B1 21 52
+88 12 A0 CC 44 4A 46 C8 10 2A DE EA F9 F3 0F 24 6E 97 2A 54 D8 4B 56 94 32 E8 0F 7C 21 61 60 82
+A7 C5 FE D4 A6 9B FE C5 15 AF F9 95 75 0E B8 2E CD DA FB C8 87 43 EF 79 43 B0 4C 2E 03 67 31 BF
+42 99 2A BA B8 48 ED E4 BB 00 96 1E A4 70 97 D6 DF 54 80 17 CD 73 14 01 81 E1 48 2D D3 8E CD 76
+F7 77 BE F2 C7 FF E5 03 FF F2 7F FA CD AB AF DA B5 7A 90 14 DF 02 A2 BB 65 14 41 48 87 44 FD A8
+39 A9 DA B4 84 A2 AF 80 99 E2 E4 B6 2A DC A5 65 E9 0F 1D 3A F4 E9 4F 7F E6 6F 3E FA 91 07 1F 7C
+E8 E8 B1 63 6B 19 00 93 4F 07 38 46 66 11 59 AC 31 1C 1E 54 05 90 30 2A 15 AC 02 3E DF 78 AB A2
+76 10 24 70 E1 4D 51 94 83 95 32 14 F0 3E 1B 0E 69 61 B9 D8 7A FB AF ED 7A ED FF 48 BC DE F9 FF
+D4 FA AA 22 87 9E F8 7B 3F 5C 76 79 CC FE 41 AB 85 76 8B 6D A4 B9 D4 B5 B1 08 67 AF 48 ED FA 44
+2B 3B A4 BA 25 20 36 48 E2 40 56 B5 F4 5A 80 3C 88 94 8C D5 56 AE 59 8B B7 4D 97 5F FC C2 C7 16
+56 F4 57 FF D5 AF 5D 7B ED 75 79 9E C5 08 56 0C 1F 34 4B 60 A8 56 84 BD 84 99 B0 CA 96 8D 87 25
+AB 34 71 AC 9A 00 2B 36 27 0A 21 2C 2C 2C DE 7F FF 03 F7 DC 73 CF 7D F7 DD BF 6F DF 3E 55 5D 5F
+0E 3A 00 10 A1 95 11 33 85 F8 C8 F1 EA 04 26 10 21 04 35 06 4C 54 91 4B D6 2A 56 72 D6 24 7E FF
+EA 81 48 F0 15 94 E2 CA A2 28 8A 50 16 E2 0B 0C 07 AD C1 D0 B4 76 BD EB 9A 9B 7E 74 FA A2 5B 36
+D4 99 E3 D4 8F B2 FB 2B BF 7F F4 D9 CF 77 32 B4 33 CA 32 CA 72 58 03 E7 28 CE 26 55 A4 C0 5C 00
+11 94 DA 6B 56 95 EC 8C 2E 61 01 01 14 6D B8 81 04 22 04 25 66 67 42 46 B2 79 86 2E 9F EB 7D E1
+B3 9F 78 6E CF DE 77 BF FB DD 6F 7E F3 9B B6 6E DD 92 65 2E 12 08 9B 25 30 6A FF BF 37 C6 34 93
+AA 9B EE 02 D4 E1 AE 64 BF 12 51 9D 87 ED 00 14 45 59 96 C5 FE FD FB 1F 79 E4 91 8F 7F EC E3 F7
+DD FF C0 BE 7D FB BD 2F 89 4E D0 E4 FB E4 8F 9A E5 AD CC 14 46 84 0D 19 67 00 04 8D C9 51 31 E8
+C0 9E 9D A5 12 67 58 17 7A A3 52 73 17 B5 84 28 41 35 88 1D 96 BE 18 0E 7D 09 5F 48 51 E6 83 7E
+18 F2 26 B7 E3 B5 57 BD E1 DF BA F6 F4 46 AF 70 6A 7D 0D 83 A3 B9 F5 B9 05 88 F2 8C 8D 09 20 0A
+41 35 83 05 A1 04 47 8E 8F A9 B1 F9 BA 73 29 5F 7C 69 AC 7D A3 78 9B 07 08 EC 35 30 A1 50 28 C8
+11 3B 6E E7 DA 31 B2 7D 96 77 1E 5E 7C E4 A1 FB BF FD F8 B7 EE BD F7 93 6F 7F FB DB 5E F1 8A 97
+6F DB B6 AD D5 CA 89 38 CB 1C 2A 3B B5 E2 67 C5 C1 13 DE 8A 9F A4 2E F4 D1 A5 15 33 16 01 8E 2E
+AD E1 B0 E8 F5 7A 7B F7 EE 7D FA E9 DD 5F 7B E8 A1 FB EE BB EF 5B 8F 3F BE BC B8 38 2C 7D 3C 69
+C3 4F 49 9A F3 C0 54 F9 0B 04 26 8E 0E 57 4B F1 15 18 23 0A 01 1B 09 81 CF C2 E4 BA 3A 5A 19 D9
+ED 1A A0 E0 E0 45 81 61 C9 BE 2C 42 19 44 50 0E 10 0A 1E 94 39 BA 57 D1 96 4B 6F 7A CB EF 64 53
+17 19 BB BE 8C FB 71 39 C5 D3 F4 8E EC 5E 7C E1 EB 36 3A F3 08 6C 60 1C A9 A0 28 E1 C8 88 09 96
+A9 8A 2A 51 85 BA 34 40 CF 09 BD F0 84 E6 72 32 3A 63 B9 BC 88 02 D9 22 F3 D4 2F 34 08 E0 81 22
+04 10 11 F2 9C E7 BB F2 92 ED 38 BA 5C 3E 7F E4 D0 DF FE ED DF DE 77 DF 7D 77 DE F9 F2 D7 BC E6
+B5 D7 5D 77 FD E5 97 5F B6 79 F3 FC D4 D4 54 96 E5 44 55 C7 B9 58 F4 BD EE DC 42 AA C2 6C 8C A1
+18 FD 12 41 08 5E 24 AC AC 0C 16 17 8F 1F 3C 78 78 DF BE 7D 4F 3E F9 BD A7 9F 7E FA D1 47 1E 7D
+E2 C9 27 17 17 16 42 A8 4B 3A 9D 2E 0E 32 04 CB 4A 20 66 38 86 61 21 43 AA 14 5D 9B F1 4B 60 52
+E8 8B EC C9 6A 82 A7 EA 5D 6B 85 5B 54 00 90 0F 36 04 0C 86 C1 17 C1 07 2F 81 7C 61 55 C2 60 A0
+8B CB E0 99 DB AF 7B FD FB 66 2F 39 05 A3 E5 E4 72 0A 7D 3D BE E7 C1 C5 67 BF 30 DD 25 CB 30 04
+11 F8 52 AD 23 EF D5 58 B2 20 D8 BA 96 62 A8 EC 45 32 55 A8 2D BE 8E E4 60 C2 DA ED 36 CF 5C AA
+8A 88 75 6D C7 34 01 C4 AF D2 08 A9 01 AB 5A 41 29 0A 45 0E 31 CC D6 A2 ED 30 D3 C6 D6 4D 66 EF
+82 91 61 71 F0 E0 C1 BF FB BB 7B 3F FF F9 2F 6E DB B6 ED 25 2F B9 FA B2 CB 2E DB B1 63 FB E5 97
+5F 31 37 37 B7 65 CB 96 4D D3 D3 ED 4E BB D5 6A 45 66 60 59 96 BD DE 72 08 61 38 1C F6 7A 3D 55
+59 59 19 EE DB F7 C2 DE BD 7B 0F 1C D8 BF 6F DF 81 C3 87 0F 1F DC BF EF C0 A1 C3 FD FE 0A B4 AA
+02 78 E6 0F DB CE D0 CE 88 19 C6 50 66 E0 A2 CF 8A 09 90 E0 C9 DA 6A 91 89 78 EB C5 B5 D3 54 20
+1E EC AA F7 2B BE CA 99 51 50 59 DA 61 29 C5 C0 97 45 F0 43 E3 83 11 5F F6 06 B4 52 64 97 BF FA
+7F E9 F2 E6 EE B6 5B CF 50 59 71 4A 7D 8D D3 2A 00 51 94 50 13 C4 4A B4 5C D5 97 C1 64 56 3C 08
+B1 35 09 88 90 0A 11 44 BD 61 33 4A 00 AA AA 18 BD 78 2A 5B 65 20 C9 AA A0 5A 9D 7C 4C 0C 28 3C
+69 B4 60 5D 46 65 A1 30 A4 04 85 12 D4 B1 5A 83 16 EB 7C 57 A7 F3 B0 B2 82 38 F5 2D 2C 2C 1E 3F
+BE F0 F4 D3 4F 67 59 D6 E9 74 BA DD 4E A7 D3 99 9A EA 76 3B DD 4D 33 33 79 9E 1B 63 06 83 C1 CA
+CA 4A 6F 79 79 30 1C AA AA F7 3E 04 5F 96 BE D7 EB 1D 3B B6 30 18 0C 2A 77 58 55 F6 85 D6 E1 A4
+5A AF 38 83 4E 8E 56 0E 66 B2 AC 91 3F C9 A2 48 F6 18 83 10 D8 D0 09 93 B4 4E 43 2A 08 15 80 98
+70 EA 95 10 20 44 AC 52 C2 AB 2B 86 65 51 94 65 19 8A 3E 95 65 7B D0 2F 8B A0 4B 03 B7 E3 B6 F7
+EC BA FE 47 67 76 DC 62 5C EB 45 B8 8F F5 D6 7F 55 04 01 04 1A E0 87 44 A4 6C 40 22 A2 DE 28 29
+69 2C 78 1A DD 8B 35 C1 99 34 A8 52 35 C3 B1 AD F3 8A 62 58 E1 45 7A 73 54 07 6F 9A AA 30 A6 16
+04 63 48 05 5E 21 B1 07 A3 57 28 C5 DC 67 CB 6A 1D 19 87 6E A6 F3 5D 3D B6 84 95 12 54 B3 AE 42
+90 7E 7F 30 18 0C 8F 1E 3D 5A 9B 19 A3 D6 42 89 DD 02 8C 35 99 4F 1A 5A 87 5B 5F 64 63 9E 80 3C
+43 6E D9 B2 E6 4E 99 61 49 A0 1C 9B 86 87 2A E1 16 CC 20 01 BF 58 B4 38 82 94 A4 4A A2 C6 8B B5
+28 45 5B F0 81 58 8A 42 BD 1F 96 85 16 7D 94 45 D6 EB EB 62 6F B8 1C 5E 32 BD FD 9A 57 FE C2 FF
+E1 5A B3 AE B5 61 50 75 12 39 85 BE B2 A1 00 53 7A B1 46 E1 29 18 68 A6 65 11 77 A9 6A 88 5F 87
+B5 0C 58 94 60 F6 44 36 3A 51 0C 85 58 CE 83 0D C4 57 7E 17 36 E3 91 B0 89 F0 ED 69 7C B9 27 3D
+45 05 5E 94 34 56 E0 8D F3 04 31 69 08 1A C3 EE 10 02 60 0D CD 76 D4 39 A0 18 0D D8 98 0F 47 7F
+AE CE 28 1C DD FB E8 C4 8D 3F C5 46 84 08 86 B5 45 EA 00 AA 48 89 D0 F8 44 12 BB E2 28 62 DA E9
+19 DF 89 0A 34 20 08 FB 90 A9 2A 08 22 45 29 24 22 DE 0F 25 A8 2F 51 14 1A 4A F8 82 8F 2C 0D 86
+EE 9A 72 D3 95 AF 7E FB FB A6 E6 76 1A FB E2 77 8D 3B 85 BE AA 40 04 A2 04 82 A8 16 01 54 C0 32
+F9 A0 CE 42 02 59 07 66 04 2F 44 FD AA 60 93 81 88 37 56 BC DA B8 16 19 03 06 C5 1A EA 16 1E AA
+1A A0 5A 55 36 06 55 FF AF 84 5E 64 9B C1 0A 79 41 10 F8 A0 00 B4 D4 D2 43 02 BC D7 C2 23 04 25
+68 E6 68 53 9B 66 3B BA B4 72 01 91 43 D6 92 18 2F 88 A2 A2 69 49 F3 01 36 A8 06 02 43 84 55 28
+B6 33 DC 98 FD AA 23 14 05 41 08 AC 8A 32 50 08 A5 48 09 20 32 1F 4B 0F F1 14 4A 2A 0A 19 14 BA
+D2 A7 83 47 D1 B7 37 BD FA 67 DE 77 C9 B5 AF 7E D1 1F 39 C9 29 F4 55 14 21 C8 B0 A0 98 AD A1 85
+16 25 9C 55 63 48 5A 5A 16 E4 1C D8 28 59 22 D5 58 35 84 4D 09 A0 2C 03 73 E0 9A 7F 88 14 77 63
+00 00 0F 7E 49 44 41 54 19 9B 3D 00 70 62 55 4B 63 33 46 10 4F CC 41 EB 4E 26 D1 60 10 5F 87 76
+F5 CC 9A 1F D5 20 0F 40 B5 56 06 88 47 10 92 20 BE 44 28 46 7C CB 9C A5 ED 68 F3 34 1D 58 D0 41
+79 41 F1 9B 4F 2D 3E 68 10 F6 55 86 3D 8A EA 0B 54 63 90 99 2A AB 7B 3D F1 A3 0A 60 50 8D A8 3C
+44 A9 F4 A6 0C A5 4A F0 1E 2A F1 3B 54 55 04 CF 45 29 C3 01 F5 87 BA B0 84 E3 C3 99 6B 5F FF 1B
+D3 3B EE B8 E4 DA 97 9F D5 87 3D 85 BE 6E BD E6 CD 3B 5F FA AE 7D 8F DE D3 1F 80 2D 19 03 43 2A
+01 20 1D 16 70 56 9D 01 C7 1A A2 30 B1 34 33 94 C9 7A 50 B4 02 15 20 EB 40 A4 40 09 40 5C 00 29
+95 05 41 8D 65 66 47 80 E5 22 A8 65 55 C3 42 46 21 84 98 CC 18 B9 BD DC 88 AF 8E 33 69 12 DE AA
+12 72 80 94 5B 17 0D E5 18 5F 09 5E 83 D7 50 A2 F0 3A 2C 50 F4 69 E0 51 2A 79 1F CA 00 36 04 42
+6E D1 C9 60 CD 98 49 70 21 0A 21 B3 95 C9 21 A2 A1 A4 10 34 78 F5 96 A4 54 19 70 20 F5 04 A2 20
+36 97 20 6C 05 0A 29 4F 90 96 AD 1E 30 55 20 0A 18 B9 CF A1 28 0B 17 84 55 B4 2C 87 DE 4B 55 7E
+AA 80 2A C4 B3 F7 EA 4B 19 94 58 EA 85 BD 87 CD 2D 3F F4 BF BF F4 CA 57 6F BD EC A5 6C CE BA 17
+F3 14 FA 9A B5 E7 AE FF C1 F7 86 20 FB FE F9 2F C9 C7 1A 91 A3 26 91 C6 C2 1A 31 04 32 C4 08 CE
+C2 1A 90 2A 3B 65 22 4B 86 8C 40 C9 97 92 FA 1A 87 4C 98 09 14 00 10 89 75 42 04 26 51 88 31 19
+B3 23 2A 09 C6 65 01 44 60 41 80 84 8A C7 49 66 14 95 20 AE A1 5B 7C 07 75 7D 17 4D E6 30 43 7C
+45 21 08 01 A2 28 02 8A 02 E5 10 CB 03 1A 0E C4 97 1A 84 18 42 20 C3 1A EB 09 5D C8 8A 9A 84 50
+A5 6E 8B C4 2A 66 90 A0 DE A3 10 18 11 23 50 A5 10 E0 83 1A 26 5F E4 59 3E 84 42 3D 84 60 62 0C
+25 AE 3C 5C 11 85 AB 5E 29 36 9A AA C6 4B AC BC 54 84 20 BE 14 55 94 7D 23 25 89 68 10 2D 7D 50
+C5 A0 C0 42 3F 3F DA 9F BF E2 AE 7F 79 C3 0F FC 0A AF 9B 00 70 86 B2 0E 46 77 3E 7D D3 7F F7 FE
+20 6E E5 F8 F3 BD E3 FB 8E EE 7B DC 5A 61 22 26 38 4B 44 CA 04 E6 60 32 66 85 B3 0A 68 2C 10 CD
+C6 1B 06 1B 65 10 8C 1A 62 05 8A 3E 19 26 B2 02 82 B1 08 5E 88 61 2D 88 B5 2C 87 CC 44 AC 04 5F
+94 CE 58 6B B9 34 96 63 55 B4 11 17 3B E9 54 5D C8 84 EA A9 22 D2 81 45 C1 16 12 00 66 88 0E 0A
+19 0E 35 78 84 21 CA A1 0E 86 54 14 28 4B 1D 16 1A 3C CA 40 A5 57 1F A8 28 D7 93 8E 71 A1 C8 30
+D0 8A C7 4A 40 E1 B5 F4 54 7A CD 72 8E A6 9A 0F A0 42 41 54 0C 0A 66 66 B6 A1 00 01 64 40 5A B1
+7F D8 42 B5 72 3E 26 A3 2B 62 53 88 97 80 58 AA C6 97 F0 25 42 49 52 6A F0 28 BD 0F 82 61 89 41
+A1 87 17 78 EB 2D EF FE 89 B7 FD 7B 32 EE 9C 29 2B D6 E9 CF B2 59 E7 8E 9F FA 20 80 03 BB BF F6
+C4 83 7F 95 3B 2B BE F7 DD 07 FE 9C A5 30 46 AD 81 31 64 86 C2 50 67 89 99 40 6A 2D AC 51 00 D6
+46 37 21 AA 2A 4A 0A 1B 63 4E 06 0A 64 16 D6 20 E6 D2 38 CB C4 5A 97 6C 28 D8 94 31 1C 6F AC 3A
+C3 86 41 10 6D 50 39 C7 B0 1A 55 D1 17 4A A4 4F 25 EF A9 2C 34 28 49 40 59 A8 2F A8 2C 50 0C A9
+18 4A AF AF C3 21 4A 0F EF A3 33 0E 21 FA EC 2E 78 31 B5 43 42 14 12 D4 07 14 1E 22 3A 1C 0A 33
+0F 0D 39 AB 96 D9 97 0A 81 F7 CA 5C 2A 89 B5 96 03 08 12 BF 31 09 55 B5 15 0D 31 D9 8B 45 11 24
+0C 45 29 C0 97 4A 40 51 A8 04 94 7D F6 25 0D 8A 50 7A 88 A2 2C B1 D4 93 99 2B 7F 70 E7 75 B7 DD
+FE 43 FF DA 66 2F 8E 57 75 FD B2 B1 E8 F2 45 BB 5E 76 D1 AE 97 01 28 87 BD B9 CB 5E 89 50 10 D3
+3F FF E3 07 17 F6 7F 47 81 9C F1 FF B6 77 FE B1 76 D7 E5 1D 7F 3F CF E7 F3 FD 9C 73 7F B4 B7 B7
+05 2F A5 3F 2E A5 2D 2D 37 A3 2D 0D 65 16 17 37 0C 53 43 C4 88 71 8C 18 67 E2 86 AC 12 97 10 59
+88 74 1A 63 64 03 67 A4 B3 4C E6 36 C3 4C E6 D0 2C CB E6 8F 99 E9 64 06 27 43 05 1C 98 9B 50 3A
+6C D0 8A 5D 69 0B 6D EF BD E7 7C 3F 3F 9F 67 7F 7C CF 6D 2B 86 51 69 CB E9 C5 FB FA E3 E6 93 93
+93 9C EF F3 BD CF 39 DF CF E7 79 3F 3F 8C D1 76 0B 80 B8 D9 CE AB AD 16 81 D4 70 33 E1 A9 29 D8
+EF 15 E0 1B 52 CF 4D 93 7C 6A FC D0 5A 35 55 D3 BB D4 58 AB EC 34 7A 5F 39 0A 64 9C 83 AB 2A 10
+B1 8A A1 DC 34 30 6B B6 AD CD 11 AD 91 5B 44 4D 13 2D 2F 62 14 29 46 11 41 CE 1A A3 FA A4 39 23
+A6 52 07 4D 19 A5 20 26 0D 19 21 51 27 91 00 A5 CC 81 9F D8 E6 02 45 91 32 52 46 48 28 19 3E C2
+18 8D 51 8D 45 4A B0 56 2B 52 21 4A 41 8D 4D 6A 8C 80 99 B3 21 0B 61 62 B1 9A A5 00 DC C4 6B 6D
+D3 FC 53 8A 94 0C 55 44 AF 2A 2C 99 45 50 D7 D2 0D 25 24 6A BE D8 47 67 74 74 ED 35 1B AF FD E4
+E0 C8 D2 BE 98 FF 32 B3 21 AA D6 D0 BA AD EF 6C D6 4B C6 B7 C4 CE 61 B6 6E CF E3 FF 3A F9 AD BF
+0A 64 90 66 AC 51 6B D0 AA 10 B3 1A D3 48 4E 52 59 6E 04 A4 AA 62 90 F6 1E 44 BD 5C 0D 36 AC 95
+81 12 39 A3 AE 12 43 30 4E 5D 45 A5 A8 31 25 06 B5 95 12 93 61 B5 56 8D 75 AC 6C 39 4A B6 44 6A
+20 8D 2C 4C 59 72 B1 AA 92 52 92 22 31 22 27 8D 5E 7D 40 4E 14 A2 86 08 1F 10 22 7C D4 4E 84 CF
+48 05 29 69 2A 14 0B C9 B1 6A 84 B3 15 51 A8 22 65 29 D2 2B 27 08 51 9D A3 CA AA 61 89 81 6B D2
+E6 31 45 44 B3 85 F5 A2 9A 4A 33 43 9B 04 59 93 8A 31 0E 52 44 25 A5 D4 8C B8 6B E6 CF A7 A8 9A
+39 65 94 24 29 C3 47 9D A9 29 46 F1 41 BB 81 86 57 BD F9 D7 7F 67 C7 E0 C8 58 BF CC 3F 0D D9 3B
+4B 96 4D 34 8B D1 65 13 1B AE BC B1 A4 F0 EF F7 BE 2F 76 0F E6 CE 91 E9 23 87 2C 0B 19 54 16 CC
+60 92 9E 52 EA 0B 33 9A FC D2 CA 36 09 FC 4D D6 26 D8 1A 6F D4 59 31 44 D4 C5 60 1B 95 23 67 09
+E0 14 A5 69 68 0A A8 B1 D1 58 34 E3 7D 88 32 B3 53 65 62 91 12 4A 2E 0A A4 A0 A5 A0 F6 EA BD E6
+84 92 A9 0E 98 E9 AA 8F 1A 02 BC D7 5C 10 12 52 22 9F 50 37 7F 23 66 65 8D 17 65 7C 7C DC B9 5F
+22 5F F3 97 85 88 F6 ED DB 37 33 13 80 D2 2B 43 3B 4E 2F 4C AD B3 AD B2 92 50 16 6D D4 C7 90 D0
+AA 20 42 3E 13 7B 61 40 0B CD AA B1 6A AD 02 48 31 13 81 4D 33 99 23 36 F5 C0 8D FA 53 12 72 56
+CD 36 17 C9 52 62 24 1F 90 B3 CE 74 E1 83 D6 41 0F 4C B9 45 6B DF 70 D5 7B 3E 33 B8 70 C9 99 33
+FF 25 39 9D D9 66 AE 35 E4 5A 43 00 DE FE C7 5F 65 63 9F 78 F8 FE 1F DE FF D9 56 95 6D 65 FC F4
+B3 CF FE F8 31 67 B4 49 89 67 46 E3 9D 00 88 B5 32 00 09 01 D6 C2 54 6C 18 9E 60 58 2B 47 3E C1
+1A 75 4E 5B 95 B2 A1 16 19 66 25 AB CC 4A 04 90 B8 76 00 60 8C 17 6D 94 0B 00 90 82 18 B4 14 F8
+A0 29 51 5D AB 8F 94 92 D4 5E 3B 35 42 D0 6E 80 2F 88 05 DD 0C 9F 90 05 1D AF CF 4D 6B CA 20 C2
+82 05 0B AE B8 62 EB 2F EA FD D6 DA 8F 7F FC CE 15 2B 56 C8 C9 35 ED 7E 19 18 63 EE BA EB 2F BE
+F3 9D 5D D6 06 60 00 78 0E 00 11 1D 39 32 F3 DD EF 3E 0A 78 28 7C 84 12 85 42 A1 A0 9B B0 B0 68
+29 28 05 3E 2A 91 80 38 31 75 13 89 0A 08 45 60 0C 97 AA 39 3F 34 35 F7 CA 06 44 DA 84 54 73 46
+49 2A 99 63 D2 2C 29 65 4A 09 21 22 65 E4 A4 5D 8F 43 D3 64 46 37 8E 9C FF 1B EF D8 76 DB D0 82
+91 33 64 F8 49 42 21 F4 C6 79 4D 4E 4E 5E 72 C9 A9 A6 CF BC 18 07 9E D9 FD 83 FB FF AE E5 E8 BF
+BF FD 4F 9D A9 FF 1D 60 AD 0C 9C 45 53 61 64 18 CC 60 43 96 95 99 AC 05 1B 32 D0 96 EB 35 D2 77
+16 D6 82 7A 6F 80 61 38 43 EC 60 00 32 C2 04 67 4D A3 8D A6 2C 02 85 C0 07 4D 19 29 51 4C EA 3D
+62 D4 99 AE D6 11 D3 1D 2D 05 33 01 3E C3 27 EA 04 74 03 0E 75 E8 99 C3 BA F7 A0 86 4C D7 5F FF
+BB 9B 37 6F BE E9 A6 F7 9D 38 99 AD EF 3C F3 CC 81 7B EE F9 9C EA 61 80 8C 74 1F F9 D6 DF 57 48
+8B 07 65 E9 22 5D 32 84 D1 61 AA 1C 06 5A 18 70 68 39 AE 1C BB 16 AC D1 E6 38 DB B2 CC 46 C1 0A
+34 31 19 60 36 5B A8 14 88 20 45 8D 99 4A A1 54 90 0B 52 D2 92 34 44 09 09 07 67 D8 8D 5D 7E CD
+7B EF 5E BA E2 E2 BE 18 7E A2 5B 4E 4E 4E BE 42 FE 7A FC E3 1F FE 46 67 EA D9 01 E7 7E F8 BD AF
+4D 3E F8 A5 8A 95 09 ED 4A 89 61 2B 1A A8 60 0C 59 15 B6 6C 0D 0C 29 31 5A 2D B6 AC AE 22 C3 A8
+2A 42 AF 09 0A 88 C9 56 62 0D AC 25 26 AA 58 49 21 82 54 44 0A B2 C0 47 2A 49 63 D2 AE 47 4C DA
+E9 C2 47 AD 23 EA 88 90 E1 33 D5 19 75 A0 69 8F 03 D3 F8 D1 7E 79 7E 06 D6 9A 07 1F FC CF 4D 9B
+36 9D E9 FB 70 2A 3C 77 68 FF 1F BC FD B2 D8 9D 5A D4 96 B1 85 58 32 AC 8B 87 E0 1C DA 2D 1A 6A
+C3 B9 66 80 11 1B 86 A9 50 B1 30 C3 1A 58 03 05 1D 0B 84 03 50 A1 98 7A 42 AE 0F D4 DB 19 47 8D
+19 21 A1 0E 3A D5 D1 D6 D8 A5 D7 6C FB EB F3 C7 27 FA 65 EC 0B FC F5 95 AE 64 BD E4 F2 37 35 8B
+95 13 AF DF 7A F5 4D 95 B5 07 F6 3D FD F9 4F DD 52 71 69 2B 66 EA E9 CA 6A C5 64 21 CC 30 96 5A
+8E EA A8 2D AB D6 28 9B 26 B0 0F B6 D6 A0 18 CB 55 EF 60 01 9E ED 2E 33 DB 8F 09 25 8B 8F 92 B3
+76 3D 42 44 08 5A 47 94 82 3A C1 67 C4 42 59 90 32 EA 88 99 48 53 5E 6D 6B E1 90 E6 DB 6E FB E0
+C4 44 DF FE 37 27 C9 A2 D1 73 B7 7D E0 CF 76 DE FE FE AC D4 89 3A 10 31 50 01 D4 3C 8B 20 51 55
+D5 29 84 28 25 4D 86 99 C1 46 89 C9 42 7A C2 18 A8 28 41 21 8A 92 20 45 45 54 04 75 90 94 E1 03
+66 3C 8E D4 3C F0 9A 0D D7 DE F4 D9 D7 AC 58 D7 6F 8B 8F D3 AF CA 6B 8C 9E 73 FE E8 39 E7 03 58
+B1 E6 D2 B5 1B 5F 4F 80 6A F9 87 1D 37 1F 7A F6 47 5A D9 E7 0F 3F 1F A7 0E 54 46 DA 4E 07 1D 5A
+15 2A 4B D6 28 A3 19 62 56 88 94 48 5A 56 D8 30 41 99 04 04 62 D6 2C AA C8 82 52 34 44 C4 08 51
+E4 AC DD 00 9F E0 33 52 A6 24 E8 26 88 C0 47 84 6C 16 2C 5E 7A CE 9A 8B EF FC E4 4E 6B ED C8 C8
+C8 19 3D 4E 9D 16 8C 31 2B 57 AD CF 62 EA 94 5B 16 DD 48 CE 2A 5B 32 19 3E A0 ED 00 80 A0 C6 34
+B5 87 D2 44 0F 41 60 63 68 36 9F 47 14 5A 54 7B A3 6C 34 65 2A 8A 52 50 07 4C D7 74 E8 A8 B6 C7
+7E F3 5D B7 7E FA DC A5 2B FB 69 EA 2F D0 37 7F 3D 86 B1 76 74 C9 79 CD 7A DB 47 EF 83 AA B1 D5
+03 FF F6 A5 EF FD C7 17 2B F6 BB 1F FF F6 80 C9 6D A7 0B 5A 6A 0D 9C 23 C7 B0 95 5A 52 85 46 0B
+90 B0 E1 A6 15 65 C9 A5 29 D8 28 05 AA F0 51 15 08 A9 D9 24 C0 27 F8 82 54 10 12 62 46 9D 30 13
+69 E5 9A AD B7 DE FE E9 E5 E3 E3 E6 CC 6B DF A7 91 85 8B C6 56 5D 74 F9 4F F7 3C 54 27 3A 5A 6B
+65 C0 A4 5A D0 28 CA 4E 51 8A 82 60 8D 72 51 22 38 4B B9 88 90 3A D3 F4 90 42 CA CA 4C 05 5C 9A
+50 74 46 16 F2 5E 3B 91 0E 4D 69 FB BC CB 7E 7F FB A7 CE 36 67 C5 D9 E0 AF 27 62 67 33 26 AF BC
+FA DA 2B AF BE B6 EE CE 7C F9 BE 9D 2C 69 D7 63 0F FC F4 A9 47 16 0C A0 9D 30 60 94 0D 9C 55 C2
+AC 1A 4C A2 20 4B AA DA 0B F8 37 25 31 B1 00 40 9D D0 6C D1 92 20 66 AA 13 52 46 2E 38 EA AB 0B
+D7 6F B9 E5 23 9F 18 BF F0 C2 FE 59 FC 32 59 3E 3E 7E EB 47 3F B1 E3 63 EF 7F 7A F7 E3 CD 2B A2
+5A 04 50 2D 4A 31 A2 D5 82 31 C8 85 2C AB 82 72 56 00 A2 D2 74 40 6B 26 C9 03 AA 5A EA 44 39 51
+CE DA CD E8 D4 7A A4 A3 A3 17 5C FE EE 0F DC 73 DE F2 B3 F1 B6 9C 5D FE FA 02 06 06 87 AF BF 61
+3B 80 3D BB DF F6 F4 EE C7 FE E5 73 77 1C 3E BC 6F A8 85 B6 43 CB F4 AA 41 99 60 B8 49 F2 47 CB
+A0 CE A8 18 B9 1C 17 57 8B 20 64 F2 19 59 10 33 3A 91 62 46 37 F2 F2 D5 AF BD F9 C3 3B 56 AD 5D
+DF 4F 0B 4F 81 D5 EB 36 DC FC A1 BB EF FC D0 8D FB 7E BC 0B 00 40 21 69 48 18 CE DA 76 34 90 D1
+76 6A 0C C4 40 09 99 C1 44 2A 1A 53 53 C0 4C 4D 5A A0 02 75 C2 4C AD B5 D7 6E 42 37 F2 E2 E5 9B
+7E EF E6 BF 5C B1 AA 3F D1 80 97 E4 AC F6 D7 63 AC 5E B7 F1 C2 8B 36 AC 99 D8 A2 92 1F 7B E8 EB
+5F FB C2 0E CD C1 20 55 06 C4 68 59 34 05 CD CE A8 00 B1 F9 FD 50 E4 D2 0B A0 8A 22 64 A4 DC DB
+0C A4 42 63 2B D7 FD C9 1D 77 5F B0 7A 4D 7F ED 3A 45 D6 AC DF B8 FD 8E 7B EF DC FE 9E 83 FB F7
+3E D7 E9 D6 09 DD A8 D3 91 86 DB 18 6E EB 40 26 CB BD 4E DC 95 25 50 6F A6 58 CA 0A 86 12 85 A4
+3E C1 07 9D F2 F0 C9 C0 0C 0E 9F BB E9 86 ED 3B 97 8D 5F D4 6F CB 5E 94 57 3A 9E 75 EA 04 5F 07
+DF B9 77 E7 47 F6 3C F1 7D 12 7F 68 FF 4F 1C 2B 13 86 5A 10 85 E1 A6 20 A4 57 C9 D4 24 DD 15 81
+28 7C A6 6E C2 E0 C8 D2 73 C6 2E FE E0 ED 77 AD B8 60 75 BF 4D 39 0D A8 6A 67 FA E8 53 4F 3E FE
+E7 1F FE C3 A9 E7 F7 55 8C 81 0A ED 4A 07 1D DA 15 9C 51 66 72 16 2D A3 6C A8 00 28 1A B5 B7 3D
+A8 85 EB C0 21 11 B5 17 0D 8F AC BD E1 96 8F 8D AF 9E 18 5E B8 B0 DF 36 FD 1C 7D 8E BF 9E 2E 9A
+0E 3F 3F D9 B3 EB BE BF F9 53 CB F4 E4 E4 43 71 FA 60 23 25 C8 EC 38 2E 51 64 21 05 42 86 6B 0F
+6D DC F2 5B 31 CB DB AE DF B6 F9 B5 2F DD 67 74 CE F1 FD 07 BF F9 95 7F FC 5B 6B 68 F2 D1 07 24
+76 2B 03 67 D5 19 18 C3 86 B5 62 05 60 09 59 11 85 45 50 44 53 01 55 23 AB 7F ED 0D AF BB EA CD
+BF FD 96 77 9E 38 7E F1 EC E1 55 E2 AF 2F E0 1B 5F F9 FC FE BD 4F B9 56 EB C9 C9 47 1F FE AF 6F
+12 51 99 9D 42 B1 79 EB 1B 2F 9A B8 74 E1 C8 E2 B7 5E 77 A3 B1 73 63 FF F3 B2 C9 29 FD F3 17 3E
+13 BA 53 FF F3 C4 0F 1E 7D E8 7E 26 00 DA D4 CF 1D 7B 8F A8 AE 9D D8 72 D9 15 57 F9 90 46 97 8C
+5D 73 DD 7B CF E6 D8 48 9F F5 82 33 C4 9B DE FA AE 66 F1 B3 BD 7B 5E F7 C6 47 0C B3 A8 12 48 55
+2E DE B0 65 F9 CA 57 C3 A3 FF 64 B0 55 75 DD BB FF 08 C0 CF F6 EE D9 35 F9 C8 31 49 F9 C4 34 49
+29 65 D5 9A 89 35 EB 37 F6 E3 02 4F 95 57 89 BF 1E 63 D9 CA D5 CB 7E 65 BC F3 FF E1 D5 7A 1F CE
+A2 94 8E 79 E6 79 49 E6 FD 75 9E B9 C4 BC BF CE 33 97 98 F7 D7 79 E6 12 F3 FE 3A CF 5C E2 E7 E2
+03 93 93 93 FD BA 8E 79 E6 39 19 8E FB EB DC 15 0B E6 F9 D5 61 7E 3F 30 CF 5C 62 DE 5F E7 99 4B
+FC 1F 94 BD 62 D3 EE A5 8B 6B 00 00 00 00 49 45 4E 44 AE 42 60 82 F9
+EndData
+$EndBitmap
+Wire Bus Line
+ 3900 2450 3850 2450
+Wire Wire Line
+ 3150 1550 3650 1550
+Wire Wire Line
+ 3150 1650 3650 1650
+Wire Wire Line
+ 3150 1750 3650 1750
+Wire Wire Line
+ 3150 1850 3650 1850
+Wire Wire Line
+ 3150 1950 3650 1950
+Wire Wire Line
+ 3150 2050 3650 2050
+Wire Wire Line
+ 3150 2150 3650 2150
+Wire Wire Line
+ 3150 2250 3650 2250
+Wire Wire Line
+ 1000 9850 1000 9950
+Wire Wire Line
+ 4500 3100 4000 3100
+Wire Wire Line
+ 4500 3200 4000 3200
+Wire Wire Line
+ 4500 3300 4000 3300
+Wire Wire Line
+ 4500 3400 4000 3400
+Wire Wire Line
+ 4500 3500 4000 3500
+Wire Wire Line
+ 4500 3600 4000 3600
+Wire Wire Line
+ 4500 3700 4000 3700
+Wire Wire Line
+ 4500 3800 4000 3800
+Wire Wire Line
+ 3150 3350 3650 3350
+Wire Wire Line
+ 3150 3450 3650 3450
+Wire Wire Line
+ 3150 3550 3650 3550
+Wire Wire Line
+ 3150 3650 3650 3650
+Wire Wire Line
+ 3150 3750 3650 3750
+Wire Wire Line
+ 3150 3850 3650 3850
+Wire Wire Line
+ 3150 3950 3650 3950
+Wire Wire Line
+ 3150 4050 3650 4050
+Wire Wire Line
+ 3150 4150 3650 4150
+Wire Wire Line
+ 3150 4250 3650 4250
+Wire Wire Line
+ 3150 4350 3650 4350
+Wire Wire Line
+ 3150 4450 3650 4450
+Wire Wire Line
+ 13950 1050 14650 1050
+Wire Wire Line
+ 13950 1500 14250 1500
+Wire Wire Line
+ 4050 1550 4550 1550
+Wire Wire Line
+ 4050 1450 4550 1450
+Wire Wire Line
+ 4050 1650 4550 1650
+Wire Wire Line
+ 4050 1750 4550 1750
+Wire Wire Line
+ 3400 6350 3900 6350
+Wire Wire Line
+ 3400 6450 3900 6450
+Wire Wire Line
+ 3400 6250 3900 6250
+Wire Wire Line
+ 3400 6150 3900 6150
+Wire Wire Line
+ 3400 6550 3900 6550
+Wire Wire Line
+ 3400 6650 3900 6650
+Wire Wire Line
+ 3400 6050 3900 6050
+Wire Wire Line
+ 3400 6750 3900 6750
+Wire Wire Line
+ 3150 2450 3600 2450
+Wire Wire Line
+ 1350 2650 850 2650
+Wire Wire Line
+ 1350 2750 850 2750
+Wire Wire Line
+ 4550 1850 4050 1850
+Wire Wire Line
+ 4550 1950 4050 1950
+Wire Wire Line
+ 800 1550 1350 1550
+Wire Wire Line
+ 4050 2050 4550 2050
+Wire Wire Line
+ 4550 2050 4550 2150
+Wire Wire Line
+ 5900 3100 6250 3100
+Wire Wire Line
+ 5900 3200 6250 3200
+Wire Wire Line
+ 5900 3300 6250 3300
+Wire Wire Line
+ 5900 3400 6250 3400
+Wire Wire Line
+ 5900 3500 6250 3500
+Wire Wire Line
+ 5900 3600 6250 3600
+Wire Wire Line
+ 5900 3700 6250 3700
+Wire Wire Line
+ 5900 3800 6250 3800
+Wire Wire Line
+ 5300 6050 5800 6050
+Wire Wire Line
+ 5950 1450 6850 1450
+Wire Wire Line
+ 5950 1550 6850 1550
+Wire Wire Line
+ 5950 1650 6850 1650
+Wire Wire Line
+ 5950 1750 6850 1750
+Wire Wire Line
+ 5950 1850 6850 1850
+Wire Wire Line
+ 5950 1950 6400 1950
+Wire Wire Line
+ 5950 2050 6400 2050
+Wire Wire Line
+ 6400 2050 6400 2350
+Wire Wire Line
+ 6400 2350 6850 2350
+Wire Wire Line
+ 6350 1250 6850 1250
+Wire Wire Line
+ 10050 3300 10100 3300
+Wire Wire Line
+ 10050 3000 10050 3300
+Wire Wire Line
+ 10100 3100 10050 3100
+Wire Wire Line
+ 10100 3200 10050 3200
+Connection ~ 10050 3100
+Connection ~ 10050 3200
+Wire Wire Line
+ 13500 3700 13500 4400
+Wire Wire Line
+ 14400 3700 14400 4400
+Connection ~ 13500 4150
+Connection ~ 14400 4150
+Connection ~ 14400 3700
+Wire Wire Line
+ 8450 1250 9000 1250
+Wire Wire Line
+ 8450 1350 9000 1350
+Wire Wire Line
+ 8450 1450 9000 1450
+Wire Wire Line
+ 8450 1550 9000 1550
+Wire Wire Line
+ 8450 1650 9000 1650
+Wire Wire Line
+ 8450 1750 9000 1750
+Wire Wire Line
+ 8450 1850 9000 1850
+Wire Wire Line
+ 8450 1950 9000 1950
+Wire Wire Line
+ 8450 2150 9000 2150
+Wire Wire Line
+ 8500 1950 8500 2350
+Wire Wire Line
+ 8500 2350 8450 2350
+Connection ~ 8500 1950
+Wire Wire Line
+ 3950 4000 4500 4000
+Wire Wire Line
+ 4550 2350 4550 2550
+Connection ~ 4550 2450
+Wire Wire Line
+ 3950 4100 4500 4100
+Wire Wire Line
+ 7000 8000 6600 8000
+Wire Wire Line
+ 7000 8100 6600 8100
+Wire Wire Line
+ 7000 8200 6600 8200
+Wire Wire Line
+ 7000 8300 6600 8300
+Wire Wire Line
+ 7000 8400 6600 8400
+Wire Wire Line
+ 7000 8500 6600 8500
+Wire Wire Line
+ 7000 8600 6600 8600
+Wire Wire Line
+ 7000 8700 6600 8700
+Wire Wire Line
+ 7000 8800 6600 8800
+Wire Wire Line
+ 7000 8900 6600 8900
+Wire Wire Line
+ 7000 9000 6600 9000
+Wire Wire Line
+ 7000 9100 6600 9100
+Wire Wire Line
+ 7000 9200 6600 9200
+Wire Wire Line
+ 7000 9300 6600 9300
+Wire Wire Line
+ 7000 9400 6600 9400
+Wire Wire Line
+ 7000 9500 6600 9500
+Wire Wire Line
+ 7000 9600 6600 9600
+Wire Wire Line
+ 7000 9800 6600 9800
+Wire Wire Line
+ 7000 9900 6600 9900
+Wire Wire Line
+ 7000 10000 6600 10000
+Wire Wire Line
+ 7000 10100 6600 10100
+Wire Wire Line
+ 8400 8000 8700 8000
+Wire Wire Line
+ 8400 8100 8700 8100
+Wire Wire Line
+ 8400 8200 8700 8200
+Wire Wire Line
+ 8400 8300 8700 8300
+Wire Wire Line
+ 8400 8400 8700 8400
+Wire Wire Line
+ 8400 8500 8700 8500
+Wire Wire Line
+ 8400 8600 8700 8600
+Wire Wire Line
+ 8400 8700 8700 8700
+Wire Wire Line
+ 10100 3500 9650 3500
+Wire Wire Line
+ 10100 3600 9650 3600
+Wire Wire Line
+ 10100 3700 9650 3700
+Wire Wire Line
+ 10100 3800 9650 3800
+Wire Wire Line
+ 10100 3900 9650 3900
+Wire Wire Line
+ 10100 4000 9650 4000
+Wire Wire Line
+ 10100 4100 9650 4100
+Wire Wire Line
+ 10100 4200 9650 4200
+Wire Wire Line
+ 13450 1500 13000 1500
+Wire Wire Line
+ 13450 1050 13000 1050
+Wire Wire Line
+ 10100 4600 9650 4600
+Wire Wire Line
+ 10100 4700 9650 4700
+Wire Wire Line
+ 10100 4800 9650 4800
+Wire Wire Line
+ 10100 4900 9650 4900
+Wire Wire Line
+ 10100 5000 9650 5000
+Wire Wire Line
+ 10100 5200 9650 5200
+Wire Wire Line
+ 10100 5300 9650 5300
+Wire Wire Line
+ 10100 5600 9650 5600
+Wire Wire Line
+ 10100 5700 9650 5700
+Wire Wire Line
+ 10100 5800 9650 5800
+Wire Wire Line
+ 10100 5900 9650 5900
+Wire Wire Line
+ 10100 4500 9650 4500
+Wire Wire Line
+ 10100 6600 9650 6600
+Wire Wire Line
+ 10100 6700 9650 6700
+Wire Wire Line
+ 10100 6800 9650 6800
+Wire Wire Line
+ 10100 6900 9650 6900
+Wire Wire Line
+ 10100 7000 9650 7000
+Wire Wire Line
+ 10100 7100 9650 7100
+Wire Wire Line
+ 10100 7200 9650 7200
+Wire Wire Line
+ 10100 7300 9650 7300
+Wire Wire Line
+ 10100 7400 9650 7400
+Wire Wire Line
+ 10100 7500 9650 7500
+Wire Wire Line
+ 10100 7600 9650 7600
+Wire Wire Line
+ 10100 7700 9650 7700
+Wire Wire Line
+ 10100 7800 9650 7800
+Wire Wire Line
+ 10100 8000 9650 8000
+Wire Wire Line
+ 10100 8100 9650 8100
+Wire Wire Line
+ 10100 8200 9650 8200
+Connection ~ 13500 3700
+Wire Wire Line
+ 12300 3600 12700 3600
+Wire Wire Line
+ 12300 3100 12700 3100
+Wire Wire Line
+ 12300 3200 12700 3200
+Wire Wire Line
+ 12300 3300 12700 3300
+Wire Wire Line
+ 12300 3800 12700 3800
+Wire Wire Line
+ 12300 3400 12700 3400
+Wire Wire Line
+ 15200 3700 15200 3500
+Wire Wire Line
+ 12300 4200 12850 4200
+Wire Wire Line
+ 12300 4500 12850 4500
+Wire Wire Line
+ 12300 4700 12750 4700
+Wire Wire Line
+ 12300 4800 12750 4800
+Wire Wire Line
+ 12300 5000 12750 5000
+Wire Wire Line
+ 12300 5200 12750 5200
+Wire Wire Line
+ 12300 5300 12750 5300
+Wire Wire Line
+ 12300 5400 12750 5400
+Wire Wire Line
+ 12300 5500 12750 5500
+Wire Wire Line
+ 12300 5600 12750 5600
+Wire Wire Line
+ 12300 5700 12750 5700
+Wire Wire Line
+ 12300 5800 12750 5800
+Wire Wire Line
+ 12300 5900 12750 5900
+Wire Wire Line
+ 12300 6000 12750 6000
+Wire Wire Line
+ 12300 6100 12750 6100
+Wire Wire Line
+ 12300 6900 12700 6900
+Wire Wire Line
+ 12300 7000 12700 7000
+Wire Wire Line
+ 12300 7100 12700 7100
+Wire Wire Line
+ 12300 7200 12700 7200
+Wire Wire Line
+ 12300 7300 12700 7300
+Wire Wire Line
+ 12300 7400 12700 7400
+Wire Wire Line
+ 12300 7500 12700 7500
+Wire Wire Line
+ 12300 7600 12700 7600
+Wire Wire Line
+ 12300 7700 12700 7700
+Wire Wire Line
+ 12300 7800 12700 7800
+Wire Wire Line
+ 12300 7900 12700 7900
+Wire Wire Line
+ 12300 8000 12700 8000
+Wire Wire Line
+ 12300 8100 12700 8100
+Wire Wire Line
+ 12300 8200 12700 8200
+Wire Wire Line
+ 12300 6400 12700 6400
+Wire Wire Line
+ 12300 6500 12700 6500
+Wire Wire Line
+ 12300 6600 12700 6600
+Wire Wire Line
+ 14700 7500 14750 7500
+Wire Wire Line
+ 14700 6100 14700 7500
+Wire Wire Line
+ 14650 6100 14750 6100
+Wire Wire Line
+ 14750 6300 14700 6300
+Wire Wire Line
+ 14750 6500 14700 6500
+Wire Wire Line
+ 14750 6700 14700 6700
+Wire Wire Line
+ 14750 6900 14700 6900
+Wire Wire Line
+ 14750 7100 14700 7100
+Wire Wire Line
+ 14750 7300 14700 7300
+Connection ~ 14700 7300
+Connection ~ 14700 7100
+Connection ~ 14700 6900
+Connection ~ 14700 6700
+Connection ~ 14700 6500
+Connection ~ 14700 6300
+Connection ~ 14700 6100
+Wire Wire Line
+ 14750 6000 14200 6000
+Wire Wire Line
+ 14750 6200 14200 6200
+Wire Wire Line
+ 14750 6400 14200 6400
+Wire Wire Line
+ 14750 6600 14200 6600
+Wire Wire Line
+ 14750 6800 14200 6800
+Wire Wire Line
+ 14750 7000 14200 7000
+Wire Wire Line
+ 14750 7200 14200 7200
+Wire Wire Line
+ 14750 7400 14200 7400
+Wire Wire Line
+ 14750 7600 14200 7600
+Wire Wire Line
+ 14750 7700 14200 7700
+Wire Wire Line
+ 14750 7800 14200 7800
+Wire Wire Line
+ 14750 7900 14200 7900
+Wire Wire Line
+ 14750 8000 14200 8000
+Wire Wire Line
+ 14750 8100 14200 8100
+Wire Wire Line
+ 14750 8200 14200 8200
+Wire Wire Line
+ 14750 8300 14200 8300
+Wire Wire Line
+ 14750 8400 14200 8400
+Wire Wire Line
+ 1200 6900 1300 6900
+Wire Wire Line
+ 1200 6900 1200 7700
+Wire Wire Line
+ 1300 7000 1200 7000
+Wire Wire Line
+ 1300 7100 1200 7100
+Wire Wire Line
+ 1300 7200 1200 7200
+Wire Wire Line
+ 1300 7300 1200 7300
+Wire Wire Line
+ 1300 7400 1200 7400
+Wire Wire Line
+ 1300 7500 1200 7500
+Wire Wire Line
+ 1300 7600 1200 7600
+Connection ~ 1200 7000
+Connection ~ 1200 7100
+Connection ~ 1200 7200
+Connection ~ 1200 7300
+Connection ~ 1200 7400
+Connection ~ 1200 7500
+Connection ~ 1200 7600
+Wire Wire Line
+ 3900 6900 3350 6900
+Wire Wire Line
+ 3350 6900 3350 6800
+Wire Wire Line
+ 3350 6800 2450 6800
+Wire Wire Line
+ 2450 6800 2450 6900
+Wire Wire Line
+ 2450 6900 2100 6900
+Wire Wire Line
+ 3150 7950 3150 6800
+Wire Wire Line
+ 2600 7000 3900 7000
+Wire Wire Line
+ 2600 7000 2600 7100
+Wire Wire Line
+ 2600 7100 2100 7100
+Wire Wire Line
+ 2100 7000 2500 7000
+Wire Wire Line
+ 2500 7000 2500 6900
+Wire Wire Line
+ 2500 6900 3050 6900
+Wire Wire Line
+ 3050 6900 3050 7950
+Wire Wire Line
+ 3900 7600 3400 7600
+Wire Wire Line
+ 3400 7600 3400 7700
+Wire Wire Line
+ 3400 7700 3050 7700
+Wire Wire Line
+ 2100 7300 3250 7300
+Wire Wire Line
+ 3250 7300 3250 7100
+Wire Wire Line
+ 3250 7100 3900 7100
+Wire Wire Line
+ 2100 7600 3300 7600
+Wire Wire Line
+ 3300 7600 3300 7300
+Wire Wire Line
+ 3300 7300 3900 7300
+Connection ~ 3150 6800
+Connection ~ 3050 7700
+Wire Wire Line
+ 3500 7750 3900 7750
+Wire Wire Line
+ 2450 7950 2450 7600
+Wire Wire Line
+ 2100 7500 2550 7500
+Wire Wire Line
+ 2650 7950 2650 7400
+Wire Wire Line
+ 2750 7950 2750 7300
+Wire Wire Line
+ 3900 7500 2850 7500
+Wire Wire Line
+ 2100 7400 3900 7400
+Connection ~ 2450 7600
+Connection ~ 2550 7500
+Connection ~ 2650 7400
+Connection ~ 2750 7300
+Connection ~ 2850 7500
+Connection ~ 2950 7000
+Wire Wire Line
+ 2950 7950 2950 7000
+Wire Wire Line
+ 2850 7200 2100 7200
+Wire Wire Line
+ 2850 7200 2850 7950
+Wire Wire Line
+ 2550 7150 2550 7950
+Wire Wire Line
+ 2550 7150 2900 7150
+Wire Wire Line
+ 2900 7150 2900 7200
+Wire Wire Line
+ 2900 7200 3900 7200
+Wire Wire Line
+ 14250 1500 14250 1800
+Wire Wire Line
+ 14650 1050 14650 1350
+Wire Wire Line
+ 13500 4150 13650 4150
+Wire Wire Line
+ 14250 4150 14400 4150
+Wire Bus Line
+ 3750 1650 3750 2350
+Wire Bus Line
+ 3750 3450 3750 5350
+Wire Bus Line
+ 3750 5350 3300 5350
+Wire Bus Line
+ 3300 5350 3300 6650
+Wire Bus Line
+ 3900 2450 3900 3700
+Wire Wire Line
+ 12300 3700 13700 3700
+Wire Wire Line
+ 14200 3700 14650 3700
+Wire Wire Line
+ 15200 3700 15150 3700
+Wire Wire Line
+ 15200 3500 12300 3500
+Entry Bus Bus
+ 3750 2350 3850 2450
+$Comp
+L 74LS541 U3
+U 1 1 4A087146
+P 5250 1950
+F 0 "U3" H 5250 2525 60 0000 C BNN
+F 1 "74LS541" H 5250 1375 60 0000 C TNN
+F 2 "dip_sockets:DIP-20__300" H 5250 1250 60 0000 C CNN
+F 3 "" H 5250 1950 60 0001 C CNN
+ 1 5250 1950
+ 1 0 0 -1
+$EndComp
+Text Notes 1250 6750 0 80 Italic 16
+Selection
+$Comp
+L GND #PWR01
+U 1 1 43020357
+P 14400 4800
+F 0 "#PWR01" H 14400 4800 30 0001 C CNN
+F 1 "GND" H 14400 4730 30 0001 C CNN
+F 2 "" H 14400 4800 60 0001 C CNN
+F 3 "" H 14400 4800 60 0001 C CNN
+ 1 14400 4800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR02
+U 1 1 43020354
+P 13500 4800
+F 0 "#PWR02" H 13500 4800 30 0001 C CNN
+F 1 "GND" H 13500 4730 30 0001 C CNN
+F 2 "" H 13500 4800 60 0001 C CNN
+F 3 "" H 13500 4800 60 0001 C CNN
+ 1 13500 4800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR03
+U 1 1 43020343
+P 4550 2550
+F 0 "#PWR03" H 4550 2550 30 0001 C CNN
+F 1 "GND" H 4550 2480 30 0001 C CNN
+F 2 "" H 4550 2550 60 0001 C CNN
+F 3 "" H 4550 2550 60 0001 C CNN
+ 1 4550 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR04
+U 1 1 4302032E
+P 1200 7700
+F 0 "#PWR04" H 1200 7700 30 0001 C CNN
+F 1 "GND" H 1200 7630 30 0001 C CNN
+F 2 "" H 1200 7700 60 0001 C CNN
+F 3 "" H 1200 7700 60 0001 C CNN
+ 1 1200 7700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR05
+U 1 1 43020328
+P 1000 9950
+F 0 "#PWR05" H 1000 9950 30 0001 C CNN
+F 1 "GND" H 1000 9880 30 0001 C CNN
+F 2 "" H 1000 9950 60 0001 C CNN
+F 3 "" H 1000 9950 60 0001 C CNN
+ 1 1000 9950
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG06
+U 1 1 38CEA284
+P 2850 9950
+F 0 "#FLG06" H 2850 10220 30 0001 C CNN
+F 1 "PWR_FLAG" H 2850 10180 30 0000 C CNN
+F 2 "" H 2850 9950 60 0001 C CNN
+F 3 "" H 2850 9950 60 0001 C CNN
+ 1 2850 9950
+ -1 0 0 1
+$EndComp
+$Comp
+L PWR_FLAG #PWR07
+U 1 1 38C8E81F
+P 2850 9350
+F 0 "#PWR07" H 2850 9620 30 0001 C CNN
+F 1 "PWR_FLAG" H 2850 9580 30 0000 C CNN
+F 2 "" H 2850 9350 60 0001 C CNN
+F 3 "" H 2850 9350 60 0001 C CNN
+ 1 2850 9350
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR08
+U 1 1 38C8E014
+P 8500 2550
+F 0 "#PWR08" H 8500 2650 30 0001 C CNN
+F 1 "VCC" V 8500 2700 40 0000 C CNN
+F 2 "" H 8500 2550 60 0001 C CNN
+F 3 "" H 8500 2550 60 0001 C CNN
+ 1 8500 2550
+ 0 1 1 0
+$EndComp
+$Comp
+L VCC #PWR09
+U 1 1 4A33B1CF
+P 1300 4250
+F 0 "#PWR09" H 1300 4450 40 0001 C CNN
+F 1 "VCC" V 1300 4400 40 0000 C CNN
+F 2 "" H 1300 4250 60 0001 C CNN
+F 3 "" H 1300 4250 60 0001 C CNN
+ 1 1300 4250
+ 0 -1 -1 0
+$EndComp
+$Comp
+L VCC #PWR010
+U 1 1 4A33B1D0
+P 1300 1650
+F 0 "#PWR010" H 1300 1850 40 0001 C CNN
+F 1 "VCC" V 1300 1800 40 0000 C CNN
+F 2 "" H 1300 1650 60 0001 C CNN
+F 3 "" H 1300 1650 60 0001 C CNN
+ 1 1300 1650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L VCC #PWR011
+U 1 1 4A33B1D1
+P 10050 3000
+F 0 "#PWR011" H 10050 3100 30 0001 C CNN
+F 1 "VCC" H 10050 3100 40 0000 C CNN
+F 2 "" H 10050 3000 60 0001 C CNN
+F 3 "" H 10050 3000 60 0001 C CNN
+ 1 10050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR012
+U 1 1 4A33B1D2
+P 6050 9900
+F 0 "#PWR012" H 6050 10000 30 0001 C CNN
+F 1 "VCC" H 6050 10000 40 0000 C CNN
+F 2 "" H 6050 9900 60 0001 C CNN
+F 3 "" H 6050 9900 60 0001 C CNN
+ 1 6050 9900
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR013
+U 1 1 38C8DFD2
+P 1000 9350
+F 0 "#PWR013" H 1000 9450 30 0001 C CNN
+F 1 "VCC" H 1000 9450 30 0000 C CNN
+F 2 "" H 1000 9350 60 0001 C CNN
+F 3 "" H 1000 9350 60 0001 C CNN
+ 1 1000 9350
+ 1 0 0 -1
+$EndComp
+Entry Wire Line
+ 3900 3700 4000 3800
+Entry Wire Line
+ 3900 3600 4000 3700
+Entry Wire Line
+ 3900 3500 4000 3600
+Entry Wire Line
+ 3900 3400 4000 3500
+Entry Wire Line
+ 3900 3300 4000 3400
+Entry Wire Line
+ 3900 3200 4000 3300
+Entry Wire Line
+ 3900 3100 4000 3200
+Entry Wire Line
+ 3900 3000 4000 3100
+Entry Wire Line
+ 3300 6650 3400 6750
+Entry Wire Line
+ 3300 6550 3400 6650
+Entry Wire Line
+ 3300 6450 3400 6550
+Entry Wire Line
+ 3300 6350 3400 6450
+Entry Wire Line
+ 3300 6250 3400 6350
+Entry Wire Line
+ 3300 6150 3400 6250
+Entry Wire Line
+ 3300 6050 3400 6150
+Entry Wire Line
+ 3300 5950 3400 6050
+Entry Wire Line
+ 3650 4450 3750 4550
+Entry Wire Line
+ 3650 4350 3750 4450
+Entry Wire Line
+ 3650 4250 3750 4350
+Entry Wire Line
+ 3650 4150 3750 4250
+Entry Wire Line
+ 3650 4050 3750 4150
+Entry Wire Line
+ 3650 3950 3750 4050
+Entry Wire Line
+ 3650 3850 3750 3950
+Entry Wire Line
+ 3650 3750 3750 3850
+Entry Wire Line
+ 3650 3650 3750 3750
+Entry Wire Line
+ 3650 3550 3750 3650
+Entry Wire Line
+ 3650 3450 3750 3550
+Entry Wire Line
+ 3650 3350 3750 3450
+Entry Wire Line
+ 3650 2250 3750 2350
+Entry Wire Line
+ 3650 2150 3750 2250
+Entry Wire Line
+ 3650 2050 3750 2150
+Entry Wire Line
+ 3650 1950 3750 2050
+Entry Wire Line
+ 3650 1850 3750 1950
+Entry Wire Line
+ 3650 1750 3750 1850
+Entry Wire Line
+ 3650 1650 3750 1750
+Entry Wire Line
+ 3650 1550 3750 1650
+$Comp
+L GND #GND014
+U 1 1 3268ED7F
+P 6800 2550
+F 0 "#GND014" H 6800 2550 30 0001 C CNN
+F 1 "GND" H 6800 2480 30 0001 C CNN
+F 2 "" H 6800 2550 60 0001 C CNN
+F 3 "" H 6800 2550 60 0001 C CNN
+ 1 6800 2550
+ 0 1 1 0
+$EndComp
+Text Label 2150 7600 0 60 ~ 0
+REF10
+Text Label 2150 7500 0 60 ~ 0
+REF11
+Text Label 2150 7400 0 60 ~ 0
+REF7
+Text Label 2150 7300 0 60 ~ 0
+REF9
+Text Label 2150 7200 0 60 ~ 0
+REF6
+Text Label 2150 7100 0 60 ~ 0
+REF8
+Text Label 2150 7000 0 60 ~ 0
+REF4
+Text Label 2150 6900 0 60 ~ 0
+REF5
+$Comp
+L CONN_8X2 JP1
+U 1 1 32568D1E
+P 1700 7250
+F 0 "JP1" H 1700 7750 70 0000 C CNN
+F 1 "CONN_8X2" V 1700 7250 70 0000 C CNN
+F 2 "pin_array_8x2" H 1700 7850 60 0000 C CNN
+F 3 "" H 1700 7250 60 0001 C CNN
+ 1 1700 7250
+ 1 0 0 1
+$EndComp
+Text Label 13600 3500 0 60 ~ 0
+8MH-OUT
+NoConn ~ 2350 7950
+$Comp
+L VCC #015
+U 1 1 32567A22
+P 3300 7950
+F 0 "#015" H 3300 8150 40 0001 C CNN
+F 1 "VCC" V 3300 8100 40 0000 C CNN
+F 2 "" H 3300 7950 60 0001 C CNN
+F 3 "" H 3300 7950 60 0001 C CNN
+ 1 3300 7950
+ 0 1 1 0
+$EndComp
+$Comp
+L RR9 RR1
+U 1 1 325679C1
+P 2750 8300
+F 0 "RR1" V 2800 8300 70 0000 C CNN
+F 1 "9x1K" V 2770 8630 70 0000 C CNN
+F 2 "discret:r_pack9" V 2900 8350 60 0000 C CNN
+F 3 "" H 2750 8300 60 0001 C CNN
+ 1 2750 8300
+ 0 1 1 0
+$EndComp
+Text Label 14250 8400 0 60 ~ 0
+STROBE
+Text Label 14250 8300 0 60 ~ 0
+AUTOFD-
+Text Label 14250 8100 0 60 ~ 0
+ERROR-
+Text Label 14250 7800 0 60 ~ 0
+BIT2
+Text Label 14250 7900 0 60 ~ 0
+INIT-
+Text Label 14250 7700 0 60 ~ 0
+SLCTIN-
+Text Label 14250 8200 0 60 ~ 0
+BIT0
+Text Label 14250 8000 0 60 ~ 0
+BIT1
+Text Label 14250 7600 0 60 ~ 0
+BIT3
+Text Label 14250 7400 0 60 ~ 0
+BIT4
+Text Label 14250 7200 0 60 ~ 0
+BIT5
+Text Label 14250 7000 0 60 ~ 0
+BIT6
+Text Label 14250 6800 0 60 ~ 0
+BIT7
+Text Label 14250 6600 0 60 ~ 0
+ACK
+Text Label 14250 6400 0 60 ~ 0
+BUST+
+Text Label 14250 6200 0 60 ~ 0
+PE+
+$Comp
+L GND #016
+U 1 1 325676D0
+P 14650 6100
+F 0 "#016" H 14650 6100 30 0001 C CNN
+F 1 "GND" H 14650 6030 30 0001 C CNN
+F 2 "" H 14650 6100 60 0001 C CNN
+F 3 "" H 14650 6100 60 0001 C CNN
+ 1 14650 6100
+ 0 1 1 0
+$EndComp
+Text Label 14250 6000 0 60 ~ 0
+SLCT+
+$Comp
+L DB25 P1
+U 1 1 3256759C
+P 15200 7200
+F 0 "P1" H 15250 8550 70 0000 C CNN
+F 1 "DB25FEMELLE" H 15150 5850 70 0000 C CNN
+F 2 "connect:DB25FC" H 15150 5750 50 0000 C CNN
+F 3 "" H 15200 7200 60 0001 C CNN
+ 1 15200 7200
+ 1 0 0 -1
+$EndComp
+Text Label 12350 8200 0 60 ~ 0
+BIT0
+Text Label 12350 8100 0 60 ~ 0
+INIT-
+Text Label 12350 8000 0 60 ~ 0
+ERROR-
+Text Label 12350 7900 0 60 ~ 0
+SLCTIN-
+Text Label 12350 7800 0 60 ~ 0
+BIT1
+Text Label 12350 7700 0 60 ~ 0
+BIT2
+Text Label 12350 7600 0 60 ~ 0
+BIT3
+Text Label 12350 7500 0 60 ~ 0
+BIT4
+Text Label 12350 7400 0 60 ~ 0
+BIT6
+Text Label 12350 7300 0 60 ~ 0
+BIT5
+Text Label 12350 7200 0 60 ~ 0
+BIT7
+Text Label 12350 7100 0 60 ~ 0
+ACK
+Text Label 12350 7000 0 60 ~ 0
+BUST+
+Text Label 12350 6900 0 60 ~ 0
+PE+
+Text Label 12350 6600 0 60 ~ 0
+D7
+Text Label 12350 6500 0 60 ~ 0
+D6
+Text Label 12350 6400 0 60 ~ 0
+SLCT+
+NoConn ~ 12300 8300
+NoConn ~ 12300 6800
+NoConn ~ 12300 6700
+NoConn ~ 12300 6300
+NoConn ~ 12300 6200
+Text Label 12350 6100 0 60 ~ 0
+D4
+Text Label 12350 6000 0 60 ~ 0
+D5
+Text Label 12350 5900 0 60 ~ 0
+D3
+Text Label 12350 5800 0 60 ~ 0
+PC-AEN
+Text Label 12350 5700 0 60 ~ 0
+PC-A10
+Text Label 12350 5600 0 60 ~ 0
+D2
+Text Label 12350 5500 0 60 ~ 0
+PC-RD
+Text Label 12350 5400 0 60 ~ 0
+D1
+Text Label 12350 5300 0 60 ~ 0
+PC-A9
+Text Label 12350 5200 0 60 ~ 0
+PC-WR
+Text Label 12350 5000 0 60 ~ 0
+PC-A0
+NoConn ~ 12300 5100
+NoConn ~ 12300 4900
+Text Label 12350 4800 0 60 ~ 0
+PC-A1
+Text Label 12350 4700 0 60 ~ 0
+PC-A2
+NoConn ~ 12300 4600
+Text Label 12350 4500 0 60 ~ 0
+CLKLCA
+NoConn ~ 12300 4400
+NoConn ~ 12300 4300
+Text Label 12350 4200 0 60 Italic 0
+SEL_LPT
+NoConn ~ 12300 4100
+NoConn ~ 12300 4000
+Text Label 12350 3800 0 60 ~ 0
+PC-A3
+NoConn ~ 12300 3900
+Text Label 12350 3600 0 60 ~ 0
+PC-A5
+Text Label 12350 3400 0 60 ~ 0
+PC-A4
+Text Label 12350 3300 0 60 ~ 0
+PC-A6
+Text Label 12350 3200 0 60 ~ 0
+PC-A7
+Text Label 12350 3100 0 60 ~ 0
+PC-A8
+NoConn ~ 10100 8300
+NoConn ~ 10100 7900
+Text Label 9650 8200 0 60 ~ 0
+AUTOFD-
+Text Label 9650 8100 0 60 ~ 0
+STROBE
+Text Label 9700 8000 0 60 ~ 0
+MA10
+Text Label 9700 7800 0 60 ~ 0
+MA0
+Text Label 9700 7700 0 60 ~ 0
+OE-
+Text Label 9700 7600 0 60 ~ 0
+CS1-
+Text Label 9700 7500 0 60 ~ 0
+MA16
+Text Label 9700 7400 0 60 ~ 0
+MD7
+Text Label 9700 7300 0 60 ~ 0
+MD6
+Text Label 9700 7200 0 60 ~ 0
+MD5
+Text Label 9700 7100 0 60 ~ 0
+MD4
+Text Label 9700 7000 0 60 ~ 0
+MD3
+Text Label 9700 6900 0 60 ~ 0
+MD2
+Text Label 9700 6800 0 60 ~ 0
+MD1
+Text Label 9700 6700 0 60 ~ 0
+MD0
+Text Label 9700 6600 0 60 ~ 0
+MA9
+Text Label 9700 4500 0 60 ~ 0
+MA8
+NoConn ~ 10100 6500
+NoConn ~ 10100 6400
+NoConn ~ 10100 6300
+NoConn ~ 10100 6200
+NoConn ~ 10100 6100
+NoConn ~ 10100 6000
+Text Label 9700 5900 0 60 ~ 0
+MA7
+Text Label 9700 5800 0 60 ~ 0
+MA1
+Text Label 9700 5700 0 60 ~ 0
+MA2
+Text Label 9700 5600 0 60 ~ 0
+MA3
+NoConn ~ 10100 5500
+NoConn ~ 10100 5400
+NoConn ~ 10100 5100
+Text Label 9700 5300 0 60 ~ 0
+MA11
+Text Label 9700 5200 0 60 ~ 0
+MA13
+Text Label 9700 5000 0 60 ~ 0
+MA14
+Text Label 9700 4900 0 60 ~ 0
+MA12
+Text Label 9700 4800 0 60 ~ 0
+MA6
+Text Label 9700 4700 0 60 ~ 0
+MA4
+Text Label 9700 4600 0 60 ~ 0
+MA15
+Text Label 13000 1050 0 60 ~ 0
+LED1
+Text Label 13000 1500 0 60 ~ 0
+LED2
+Text Label 9700 4200 0 60 ~ 0
+MA5
+Text Label 9700 4100 0 60 ~ 0
+WR-
+Text Label 9700 4000 0 60 ~ 0
+LED2
+Text Label 9700 3900 0 60 ~ 0
+CLKLCA
+Text Label 9700 3800 0 60 ~ 0
+LED1
+Text Label 9700 3700 0 60 ~ 0
+D0
+Text Label 9700 3600 0 60 ~ 0
+DONE
+Text Label 9700 3500 0 60 ~ 0
+PROG-
+Text Label 8450 8700 0 60 ~ 0
+MD7
+Text Label 8450 8600 0 60 ~ 0
+MD6
+Text Label 8450 8500 0 60 ~ 0
+MD5
+Text Label 8450 8400 0 60 ~ 0
+MD4
+Text Label 8450 8300 0 60 ~ 0
+MD3
+Text Label 8450 8200 0 60 ~ 0
+MD2
+Text Label 8450 8100 0 60 ~ 0
+MD1
+Text Label 8450 8000 0 60 ~ 0
+MD0
+$Comp
+L R R3
+U 1 1 324002E6
+P 6350 9900
+F 0 "R3" V 6430 9900 50 0000 C CNN
+F 1 "10K" V 6350 9900 50 0000 C CNN
+F 2 "discret:R3" V 6500 9900 50 0000 C CNN
+F 3 "" H 6350 9900 60 0001 C CNN
+ 1 6350 9900
+ 0 1 1 0
+$EndComp
+Text Label 6700 10100 0 60 ~ 0
+WR-
+Text Label 6700 10000 0 60 ~ 0
+OE-
+Text Label 6700 9800 0 60 ~ 0
+CS1-
+Text Label 6700 9600 0 60 ~ 0
+MA16
+Text Label 6700 9500 0 60 ~ 0
+MA15
+Text Label 6700 9400 0 60 ~ 0
+MA14
+Text Label 6700 9300 0 60 ~ 0
+MA13
+Text Label 6700 9200 0 60 ~ 0
+MA12
+Text Label 6700 9100 0 60 ~ 0
+MA11
+Text Label 6700 9000 0 60 ~ 0
+MA10
+Text Label 6700 8900 0 60 ~ 0
+MA9
+Text Label 6700 8800 0 60 ~ 0
+MA8
+Text Label 6700 8700 0 60 ~ 0
+MA7
+Text Label 6700 8600 0 60 ~ 0
+MA6
+Text Label 6700 8500 0 60 ~ 0
+MA5
+Text Label 6700 8400 0 60 ~ 0
+MA4
+Text Label 6700 8300 0 60 ~ 0
+MA3
+Text Label 6700 8200 0 60 ~ 0
+MA2
+Text Label 6700 8100 0 60 ~ 0
+MA1
+Text Label 6700 8000 0 60 ~ 0
+MA0
+$Comp
+L 628128 U5
+U 1 1 3240023F
+P 7700 9050
+F 0 "U5" H 7700 10200 70 0000 C CNN
+F 1 "628128" H 7700 7850 70 0000 C CNN
+F 2 "dip_sockets:DIP-32__600" H 7700 7750 50 0000 C CNN
+F 3 "" H 7700 9050 60 0001 C CNN
+ 1 7700 9050
+ 1 0 0 -1
+$EndComp
+Text Label 4050 4000 0 60 ~ 0
+DIR
+Text Label 4050 4100 0 60 ~ 0
+ENBBUF
+Text Label 8550 2150 0 60 ~ 0
+PC-RD
+Text Label 8550 1950 0 60 ~ 0
+WR_REG
+Text Label 8550 1850 0 60 ~ 0
+CLKLCA
+Text Label 8550 1750 0 60 ~ 0
+DIR
+Text Label 8550 1650 0 60 ~ 0
+SEL_LPT
+Text Label 8550 1550 0 60 ~ 0
+PROG-
+Text Label 8550 1450 0 60 ~ 0
+DONE
+Text Label 8550 1350 0 60 ~ 0
+D0
+Text Label 8550 1250 0 60 ~ 0
+ENBBUF
+$Comp
+L VCC #017
+U 1 1 32332C72
+P 8500 1050
+F 0 "#017" H 8500 1150 30 0001 C CNN
+F 1 "VCC" V 8500 1200 40 0000 C CNN
+F 2 "" H 8500 1050 60 0001 C CNN
+F 3 "" H 8500 1050 60 0001 C CNN
+ 1 8500 1050
+ 0 1 1 0
+$EndComp
+Text Label 6350 1250 0 60 ~ 0
+MATCHL
+$Comp
+L GND #018
+U 1 1 32331877
+P 6800 1050
+F 0 "#018" H 6800 1050 30 0001 C CNN
+F 1 "GND" H 6800 980 30 0001 C CNN
+F 2 "" H 6800 1050 60 0001 C CNN
+F 3 "" H 6800 1050 60 0001 C CNN
+ 1 6800 1050
+ 0 1 1 0
+$EndComp
+NoConn ~ 6850 2150
+NoConn ~ 6850 2050
+NoConn ~ 6850 1950
+Text Label 6100 2050 0 60 ~ 0
+RSTL
+Text Label 6400 1950 2 60 ~ 0
+PC-RD
+Text Label 6400 1850 2 60 ~ 0
+PC-WR
+NoConn ~ 5950 2150
+Text Label 6000 3800 0 60 ~ 0
+D7
+Text Label 6000 3700 0 60 ~ 0
+D6
+Text Label 6000 3600 0 60 ~ 0
+D5
+Text Label 6000 3500 0 60 ~ 0
+D4
+Text Label 6000 3400 0 60 ~ 0
+D3
+Text Label 6000 3300 0 60 ~ 0
+D2
+Text Label 6000 3200 0 60 ~ 0
+D1
+Text Label 6000 3100 0 60 ~ 0
+D0
+Text Label 5350 6050 0 60 Italic 12
+MATCHL
+Text Label 4050 2050 0 60 ~ 0
+PC-RST
+Text Label 800 1550 0 60 ~ 0
+PC-RST
+Text Label 4050 1950 0 60 ~ 0
+PC-IOR
+Text Label 4050 1850 0 60 ~ 0
+PC-IOW
+Text Label 850 2750 0 60 ~ 0
+PC-IOR
+Text Label 850 2650 0 60 ~ 0
+PC-IOW
+Text Label 3500 7750 0 60 ~ 0
+PC-AEN
+Text Label 3600 2450 2 60 ~ 0
+PC-AEN
+Text Label 3500 6750 0 60 ~ 0
+PC-A4
+Text Label 3500 6050 0 60 ~ 0
+PC-A5
+Text Label 3500 6650 0 60 ~ 0
+PC-A6
+Text Label 3500 6550 0 60 ~ 0
+PC-A7
+Text Label 3500 6150 0 60 ~ 0
+PC-A8
+Text Label 3500 6250 0 60 ~ 0
+PC-A9
+Text Label 3500 6450 0 60 ~ 0
+PC-A10
+Text Label 3500 6350 0 60 ~ 0
+PC-A11
+Text Label 4050 1750 0 60 ~ 0
+PC-A3
+Text Label 4050 1650 0 60 ~ 0
+PC-A2
+Text Label 4050 1450 0 60 ~ 0
+PC-A1
+Text Label 4050 1550 0 60 ~ 0
+PC-A0
+$Comp
+L GND #019
+U 1 1 32308380
+P 14650 1750
+F 0 "#019" H 14650 1750 30 0001 C CNN
+F 1 "GND" H 14650 1680 30 0001 C CNN
+F 2 "" H 14650 1750 60 0001 C CNN
+F 3 "" H 14650 1750 60 0001 C CNN
+ 1 14650 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #020
+U 1 1 3230837A
+P 14250 2200
+F 0 "#020" H 14250 2200 30 0001 C CNN
+F 1 "GND" H 14250 2130 30 0001 C CNN
+F 2 "" H 14250 2200 60 0001 C CNN
+F 3 "" H 14250 2200 60 0001 C CNN
+ 1 14250 2200
+ 1 0 0 -1
+$EndComp
+Text Label 3250 4450 0 60 ~ 0
+PC-A0
+Text Label 3250 4350 0 60 ~ 0
+PC-A1
+Text Label 3250 4250 0 60 ~ 0
+PC-A2
+Text Label 3250 4150 0 60 ~ 0
+PC-A3
+Text Label 3250 4050 0 60 ~ 0
+PC-A4
+Text Label 3250 3950 0 60 ~ 0
+PC-A5
+Text Label 3250 3850 0 60 ~ 0
+PC-A6
+Text Label 3250 3750 0 60 ~ 0
+PC-A7
+Text Label 3250 3650 0 60 ~ 0
+PC-A8
+Text Label 3250 3550 0 60 ~ 0
+PC-A9
+Text Label 3250 3450 0 60 ~ 0
+PC-A10
+Text Label 3250 3350 0 60 ~ 0
+PC-A11
+Text Label 4050 3800 0 60 ~ 0
+PC-DB7
+Text Label 4050 3700 0 60 ~ 0
+PC-DB6
+Text Label 4050 3600 0 60 ~ 0
+PC-DB5
+Text Label 4050 3500 0 60 ~ 0
+PC-DB4
+Text Label 4050 3400 0 60 ~ 0
+PC-DB3
+Text Label 4050 3300 0 60 ~ 0
+PC-DB2
+Text Label 4050 3200 0 60 ~ 0
+PC-DB1
+Text Label 4050 3100 0 60 ~ 0
+PC-DB0
+NoConn ~ 1350 4150
+NoConn ~ 1350 4050
+NoConn ~ 1350 3950
+NoConn ~ 1350 3850
+NoConn ~ 1350 3750
+NoConn ~ 1350 3650
+NoConn ~ 1350 3550
+NoConn ~ 1350 3450
+NoConn ~ 1350 3350
+NoConn ~ 1350 3250
+NoConn ~ 1350 3150
+NoConn ~ 1350 3050
+NoConn ~ 1350 2950
+NoConn ~ 1350 2850
+NoConn ~ 1350 2550
+NoConn ~ 1350 2450
+NoConn ~ 1350 2350
+NoConn ~ 1350 2250
+NoConn ~ 1350 2150
+NoConn ~ 1350 2050
+NoConn ~ 1350 1950
+NoConn ~ 1350 1850
+NoConn ~ 1350 1750
+NoConn ~ 3150 3250
+NoConn ~ 3150 3150
+NoConn ~ 3150 3050
+NoConn ~ 3150 2950
+NoConn ~ 3150 2850
+NoConn ~ 3150 2750
+NoConn ~ 3150 2650
+NoConn ~ 3150 2550
+NoConn ~ 3150 2350
+NoConn ~ 3150 1450
+NoConn ~ 1350 4350
+$Comp
+L GND #021
+U 1 1 32307FB9
+P 1300 4450
+F 0 "#021" H 1300 4450 40 0001 C CNN
+F 1 "GND" H 1300 4380 40 0001 C CNN
+F 2 "" H 1300 4450 60 0001 C CNN
+F 3 "" H 1300 4450 60 0001 C CNN
+ 1 1300 4450
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #022
+U 1 1 32307FA7
+P 1300 1450
+F 0 "#022" H 1300 1450 40 0001 C CNN
+F 1 "GND" H 1300 1380 40 0001 C CNN
+F 2 "" H 1300 1450 60 0001 C CNN
+F 3 "" H 1300 1450 60 0001 C CNN
+ 1 1300 1450
+ 0 1 1 0
+$EndComp
+$Comp
+L C C3
+U 1 1 32307ED4
+P 14400 4600
+F 0 "C3" H 14650 4650 50 0000 C CNN
+F 1 "47pF" H 14650 4550 50 0000 C CNN
+F 2 "discret:C1" H 14650 4450 50 0000 C CNN
+F 3 "" H 14400 4600 60 0001 C CNN
+ 1 14400 4600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C2
+U 1 1 32307ECF
+P 13500 4600
+F 0 "C2" H 13750 4650 50 0000 C CNN
+F 1 "47pF" H 13750 4550 50 0000 C CNN
+F 2 "discret:C1" H 13750 4450 50 0000 C CNN
+F 3 "" H 13500 4600 60 0001 C CNN
+ 1 13500 4600
+ 1 0 0 -1
+$EndComp
+$Comp
+L CRYSTAL X1
+U 1 1 32307EC0
+P 13950 4150
+F 0 "X1" H 13950 4350 70 0000 C CNN
+F 1 "8MHz" H 13950 3950 70 0000 C CNN
+F 2 "discret:HC-18UH" H 13950 3850 50 0000 C CNN
+F 3 "" H 13950 4150 60 0001 C CNN
+ 1 13950 4150
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R2
+U 1 1 32307EAA
+P 14900 3700
+F 0 "R2" V 14800 3700 50 0000 C CNN
+F 1 "1K" V 14900 3700 50 0000 C CNN
+F 2 "discret:R3" V 15000 3700 50 0000 C CNN
+F 3 "" H 14900 3700 60 0001 C CNN
+ 1 14900 3700
+ 0 1 1 0
+$EndComp
+$Comp
+L R R1
+U 1 1 32307EA1
+P 13950 3700
+F 0 "R1" V 13850 3700 50 0000 C CNN
+F 1 "100K" V 13950 3700 50 0000 C CNN
+F 2 "discret:R3" V 14050 3700 50 0000 C CNN
+F 3 "" H 13950 3700 60 0001 C CNN
+ 1 13950 3700
+ 0 1 1 0
+$EndComp
+$Comp
+L CP C1
+U 1 1 32307DE2
+P 2850 9650
+F 0 "C1" H 2950 9700 50 0000 L CNN
+F 1 "47uF" H 2950 9600 50 0000 L CNN
+F 2 "discret:CP6" H 3100 9500 50 0000 C CNN
+F 3 "" H 2850 9650 60 0001 C CNN
+ 1 2850 9650
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C4
+U 1 1 32307DCF
+P 2200 9650
+F 0 "C4" H 2300 9700 50 0000 L CNN
+F 1 "47uF" H 2300 9600 50 0000 L CNN
+F 2 "discret:CP6" H 2450 9500 50 0000 C CNN
+F 3 "" H 2200 9650 60 0001 C CNN
+ 1 2200 9650
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C5
+U 1 1 32307DCA
+P 1650 9650
+F 0 "C5" H 1750 9700 50 0000 L CNN
+F 1 "47uF" H 1750 9600 50 0000 L CNN
+F 2 "discret:CP6" H 1900 9500 50 0000 C CNN
+F 3 "" H 1650 9650 60 0001 C CNN
+ 1 1650 9650
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C6
+U 1 1 32307DC0
+P 1000 9650
+F 0 "C6" H 1100 9700 50 0000 L CNN
+F 1 "47uF" H 1100 9600 50 0000 L CNN
+F 2 "discret:CP6" H 1250 9500 50 0000 C CNN
+F 3 "" H 1000 9650 60 0001 C CNN
+ 1 1000 9650
+ 1 0 0 -1
+$EndComp
+Text Label 3250 2250 0 60 ~ 0
+PC-DB0
+Text Label 3250 2150 0 60 ~ 0
+PC-DB1
+Text Label 3250 2050 0 60 ~ 0
+PC-DB2
+Text Label 3250 1950 0 60 ~ 0
+PC-DB3
+Text Label 3250 1850 0 60 ~ 0
+PC-DB4
+Text Label 3250 1750 0 60 ~ 0
+PC-DB5
+Text Label 3250 1650 0 60 ~ 0
+PC-DB6
+Text Label 3250 1550 0 60 ~ 0
+PC-DB7
+$Comp
+L 74LS688 U2
+U 1 1 322D35B4
+P 4600 6900
+F 0 "U2" H 4600 7850 60 0000 C CNN
+F 1 "74LS688" H 4600 5950 60 0000 C CIB
+F 2 "dip_sockets:DIP-20__300" H 4600 5850 50 0000 C CNN
+F 3 "" H 4600 6900 60 0001 C CNN
+ 1 4600 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L 4003APG120 U9
+U 1 1 322D32FA
+P 11200 5700
+F 0 "U9" H 11200 8450 70 0000 C CNN
+F 1 "4003APG120" H 11200 2950 70 0000 C CNN
+F 2 "PGA120" H 11200 2850 50 0000 C CNN
+F 3 "" H 11200 5700 60 0001 C CNN
+F 4 "50$" H 11200 5700 60 0001 C CNN "price"
+F 5 "test" H 11200 5700 60 0001 C CNN "Field5"
+ 1 11200 5700
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED D2
+U 1 1 322D32BE
+P 14250 2000
+F 0 "D2" V 14150 1850 50 0000 C CNN
+F 1 "LED" V 14250 2250 50 0000 C CNN
+F 2 "discret:LEDV" V 14350 2250 50 0000 C CNN
+F 3 "" H 14250 2000 60 0001 C CNN
+ 1 14250 2000
+ 0 1 1 0
+$EndComp
+$Comp
+L LED D1
+U 1 1 322D32AC
+P 14650 1550
+F 0 "D1" V 14550 1400 50 0000 C CNN
+F 1 "LED" V 14650 1800 50 0000 C CNN
+F 2 "discret:LEDV" V 14750 1800 50 0000 C CNN
+F 3 "" H 14650 1550 60 0001 C CNN
+ 1 14650 1550
+ 0 1 1 0
+$EndComp
+$Comp
+L R R5
+U 1 1 322D32A0
+P 13700 1500
+F 0 "R5" V 13600 1500 50 0000 C CNN
+F 1 "330" V 13700 1500 50 0000 C CNN
+F 2 "discret:R3" V 13800 1500 50 0000 C CNN
+F 3 "" H 13700 1500 60 0001 C CNN
+ 1 13700 1500
+ 0 1 1 0
+$EndComp
+$Comp
+L R R4
+U 1 1 322D3295
+P 13700 1050
+F 0 "R4" V 13600 1050 50 0000 C CNN
+F 1 "330" V 13700 1050 50 0000 C CNN
+F 2 "discret:R3" V 13800 1050 50 0000 C CNN
+F 3 "" H 13700 1050 60 0001 C CNN
+ 1 13700 1050
+ 0 1 1 0
+$EndComp
+$Comp
+L EP600 U8
+U 1 1 322D321C
+P 7650 1800
+F 0 "U8" H 7650 2700 70 0000 C CNN
+F 1 "EP600" H 7650 850 70 0000 C CNN
+F 2 "dip_sockets:DIP-24__300" H 7700 750 60 0000 C CNN
+F 3 "" H 7650 1800 60 0001 C CNN
+ 1 7650 1800
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS245 U1
+U 1 1 322D31F4
+P 5200 3600
+F 0 "U1" H 5200 4200 60 0000 C CNN
+F 1 "74LS245" H 5200 2950 60 0000 C CNN
+F 2 "dip_sockets:DIP-20__300" H 5200 2850 50 0000 C CNN
+F 3 "" H 5200 3600 60 0001 C CNN
+ 1 5200 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L BUSPC BUS1
+U 1 1 322D3011
+P 2250 2950
+F 0 "BUS1" H 2200 4600 70 0000 C CNN
+F 1 "BUSPC" H 2200 1250 70 0000 C CNN
+F 2 "BUS_PC" H 2202 1160 60 0000 C CNN
+F 3 "" H 2250 2950 60 0001 C CNN
+ 1 2250 2950
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1000 9900 2850 9900
+Wire Wire Line
+ 2850 9850 2850 9950
+Connection ~ 1000 9900
+Connection ~ 2850 9900
+Wire Wire Line
+ 2200 9850 2200 9900
+Connection ~ 2200 9900
+Wire Wire Line
+ 1650 9850 1650 9900
+Connection ~ 1650 9900
+Wire Wire Line
+ 1000 9350 1000 9450
+Wire Wire Line
+ 1000 9400 2850 9400
+Wire Wire Line
+ 2850 9350 2850 9450
+Connection ~ 1000 9400
+Connection ~ 2850 9400
+Wire Wire Line
+ 2200 9400 2200 9450
+Connection ~ 2200 9400
+Wire Wire Line
+ 1650 9400 1650 9450
+Connection ~ 1650 9400
+Wire Wire Line
+ 1300 1450 1350 1450
+Wire Wire Line
+ 1300 1650 1350 1650
+Wire Wire Line
+ 1300 4250 1350 4250
+Wire Wire Line
+ 1300 4450 1350 4450
+Wire Wire Line
+ 8500 2550 8450 2550
+Wire Wire Line
+ 8500 1050 8450 1050
+Wire Wire Line
+ 6800 2550 6850 2550
+Wire Wire Line
+ 6800 1050 6850 1050
+Wire Wire Line
+ 6050 9900 6100 9900
+Wire Wire Line
+ 3300 7950 3250 7950
+$EndSCHEMATC
diff --git a/demos/interf_u/interf_u_schlib.lib b/demos/interf_u/interf_u_schlib.lib
new file mode 100644
index 0000000..acfd150
--- /dev/null
+++ b/demos/interf_u/interf_u_schlib.lib
@@ -0,0 +1,681 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 4003APG120
+#
+DEF 4003APG120 U 0 40 Y Y 1 F N
+F0 "U" 400 2800 70 H V C CNN
+F1 "4003APG120" 0 -2850 70 H V C CNN
+F2 "PGA120" 0 -2950 40 H V C CNN
+F3 "" 400 2800 60 H V C CNN
+ALIAS 4003PG120
+DRAW
+S -800 -2700 800 2700 0 1 0 N
+X NC A1 -1100 -300 300 R 60 60 1 1 P
+X NC B1 -1100 200 300 R 60 60 1 1 P
+X P/A12 C1 -1100 500 300 R 60 60 1 1 P
+X P/A11 D1 -1100 700 300 R 60 60 1 1 P
+X P E1 -1100 1000 300 R 60 60 1 1 P
+X P/A9 F1 -1100 1100 300 R 60 60 1 1 P
+X P/A8 G1 -1100 1200 300 R 60 60 1 1 P
+X P/A7 H1 1100 2600 300 L 60 60 1 1 P
+X P J1 1100 2400 300 L 60 60 1 1 P
+X P/A5 K1 1100 2200 300 L 60 60 1 1 P
+X P/A3 L1 1100 2000 300 L 60 60 1 1 P
+X NC M1 1100 1700 300 L 60 60 1 1 P
+X PGCK4/A1 N1 1100 1600 300 L 60 60 1 1 P
+X NC A2 -1100 -400 300 R 60 60 1 1 P
+X PGCK1/A16 B2 -1100 -100 300 R 60 60 1 1 P
+X P/A14 C2 -1100 100 300 R 60 60 1 1 P
+X P/A13 D2 -1100 400 300 R 60 60 1 1 P
+X NC E2 -1100 600 300 R 60 60 1 1 P
+X P F2 -1100 900 300 R 60 60 1 1 P
+X GND G2 300 -2700 0 U 60 60 1 1 W N
+X P/A6 H2 1100 2500 300 L 60 60 1 1 P
+X P/A4 J2 1100 2100 300 L 60 60 1 1 P
+X P/CS1/A2 K2 1100 1900 300 L 60 60 1 1 P
+X P/A0/WS L2 1100 1500 300 L 60 60 1 1 P
+X TDO M2 1100 1400 300 L 60 60 1 1 P
+X DIN N2 -1100 2000 300 R 60 60 1 1 B
+X NC A3 -1100 -700 300 R 60 60 1 1 P
+X P/A17 B3 -1100 -200 300 R 60 60 1 1 P
+X VCC C3 -300 2700 0 D 60 60 1 1 W N
+X SGCK1 D3 -1100 0 300 R 60 60 1 1 P
+X NC E3 -1100 300 300 R 60 60 1 1 P
+X P/A10 F3 -1100 800 300 R 60 60 1 1 P
+X P H3 1100 2300 300 L 60 60 1 1 P
+X NC J3 1100 1800 300 L 60 60 1 1 P
+X GND K3 200 -2700 0 U 60 60 1 1 W N
+X VCC L3 100 2700 0 D 60 60 1 1 W N
+X DOUT-SGKC4 M3 -1100 1900 300 R 60 60 1 1 O
+X P/RCLK/BSY/RDY N3 1100 1100 300 L 60 60 1 1 P
+X P A4 -1100 -900 300 R 60 60 1 1 P
+X TCK B4 -1100 -600 300 R 60 60 1 1 P
+X GND C4 -400 -2700 0 U 60 60 1 1 W N
+X CCLK L4 -1100 1800 300 R 60 60 1 1 I C
+X NC M4 1100 1200 300 L 60 60 1 1 P
+X P N4 1100 900 300 L 60 60 1 1 P
+X P A5 -1100 -1100 300 R 60 60 1 1 P
+X TMS B5 -1100 -800 300 R 60 60 1 1 P
+X TDI C5 -1100 -500 300 R 60 60 1 1 P
+X NC L5 1100 1300 300 L 60 60 1 1 P
+X P/D1 M5 1100 1000 300 L 60 60 1 1 P
+X P N5 1100 600 300 L 60 60 1 1 P
+X P A6 -1100 -1300 300 R 60 60 1 1 P
+X P B6 -1100 -1200 300 R 60 60 1 1 P
+X P C6 -1100 -1000 300 R 60 60 1 1 P
+X P/D2 L6 1100 800 300 L 60 60 1 1 P
+X P M6 1100 700 300 L 60 60 1 1 P
+X P/RS N6 1100 500 300 L 60 60 1 1 P
+X P A7 -1100 -1400 300 R 60 60 1 1 P
+X GND B7 -300 -2700 0 U 60 60 1 1 W N
+X GND L7 100 -2700 0 U 60 60 1 1 W N
+X VCC M7 0 2700 0 D 60 60 1 1 W N
+X P/D3 N7 1100 400 300 L 60 60 1 1 P
+X P A8 -1100 -1500 300 R 60 60 1 1 P
+X P B8 -1100 -1700 300 R 60 60 1 1 P
+X P C8 -1100 -1800 300 R 60 60 1 1 P
+X P L8 1100 0 300 L 60 60 1 1 P
+X P/D4 M8 1100 200 300 L 60 60 1 1 P
+X P N8 1100 300 300 L 60 60 1 1 P
+X P A9 -1100 -1600 300 R 60 60 1 1 P
+X P B9 -1100 -2000 300 R 60 60 1 1 P
+X P C9 -1100 -2300 300 R 60 60 1 1 P
+X NC L9 1100 -500 300 L 60 60 1 1 P
+X P/D5 M9 1100 -200 300 L 60 60 1 1 P
+X P N9 1100 100 300 L 60 60 1 1 P
+X P A10 -1100 -1900 300 R 60 60 1 1 P
+X NC B10 -1100 -2200 300 R 60 60 1 1 P
+X GND C10 -200 -2700 0 U 60 60 1 1 W N
+X VCC L10 -100 2700 0 D 60 60 1 1 W N
+X P/D6 M10 1100 -400 300 L 60 60 1 1 P
+X P/CS0 N10 1100 -100 300 L 60 60 1 1 P
+X P A11 -1100 -2100 300 R 60 60 1 1 P
+X M1 B11 -1100 2500 300 R 60 60 1 1 I
+X M0 C11 -1100 2600 300 R 60 60 1 1 I
+X VCC D11 -400 2700 0 D 60 60 1 1 W N
+X NC E11 1100 -2600 300 L 60 60 1 1 P
+X P F11 1100 -2200 300 L 60 60 1 1 P
+X GND G11 -100 -2700 0 U 60 60 1 1 W N
+X P H11 1100 -1500 300 L 60 60 1 1 P
+X NC J11 1100 -1000 300 L 60 60 1 1 P
+X GND K11 0 -2700 0 U 60 60 1 1 W N
+X DONE L11 -1100 2100 300 R 60 60 1 1 O
+X P/D7 M11 1100 -800 300 L 60 60 1 1 P
+X P N11 1100 -300 300 L 60 60 1 1 P
+X SGCK2 A12 -1100 -2400 300 R 60 60 1 1 P
+X M2 B12 -1100 2400 300 R 60 60 1 1 B
+X PGCK2 C12 -1100 -2500 300 R 60 60 1 1 P
+X P D12 1100 -2500 300 L 60 60 1 1 P
+X P E12 1100 -2400 300 L 60 60 1 1 P
+X P F12 1100 -2000 300 L 60 60 1 1 B
+X VCC G12 -200 2700 0 D 60 60 1 1 W N
+X P H12 1100 -1600 300 L 60 60 1 1 P
+X P J12 1100 -1300 300 L 60 60 1 1 P
+X NC K12 1100 -1100 300 L 60 60 1 1 P
+X SGCK3 L12 1100 -900 300 L 60 60 1 1 P
+X PROG M12 -1100 2200 300 R 60 60 1 1 I I
+X NC N12 1100 -600 300 L 60 60 1 1 P
+X HDC A13 -1100 1600 300 R 60 60 1 1 O
+X NC B13 -1100 -2600 300 R 60 60 1 1 P
+X LDC C13 -1100 1500 300 R 60 60 1 1 O
+X P D13 1100 -2300 300 L 60 60 1 1 P
+X P E13 1100 -2100 300 L 60 60 1 1 P
+X INIT F13 -1100 1700 300 R 60 60 1 1 B
+X P G13 1100 -1900 300 L 60 60 1 1 P
+X P H13 1100 -1800 300 L 60 60 1 1 P
+X P J13 1100 -1700 300 L 60 60 1 1 P
+X P K13 1100 -1400 300 L 60 60 1 1 P
+X P L13 1100 -1200 300 L 60 60 1 1 P
+X PGCK3 N13 1100 -700 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# 628128
+#
+DEF 628128 U 0 40 Y Y 1 F N
+F0 "U" 50 0 70 H V C CNN
+F1 "628128" 300 -1200 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 32 0 1100 0 D 60 60 0 0 W N
+X GND 16 0 -1100 0 U 60 60 0 0 W N
+S -400 1100 400 -1100 0 1 0 N
+X A16 2 -700 -550 300 R 60 60 1 1 I
+X A14 3 -700 -350 300 R 60 60 1 1 I
+X A12 4 -700 -150 300 R 60 60 1 1 I
+X A7 5 -700 350 300 R 60 60 1 1 I
+X A6 6 -700 450 300 R 60 60 1 1 I
+X A5 7 -700 550 300 R 60 60 1 1 I
+X A4 8 -700 650 300 R 60 60 1 1 I
+X A3 9 -700 750 300 R 60 60 1 1 I
+X A2 10 -700 850 300 R 60 60 1 1 I
+X Q6 20 700 450 300 L 60 60 1 1 T
+X CS2 30 -700 -850 300 R 60 60 1 1 I
+X A1 11 -700 950 300 R 60 60 1 1 I
+X Q7 21 700 350 300 L 60 60 1 1 T
+X A15 31 -700 -450 300 R 60 60 1 1 I
+X A0 12 -700 1050 300 R 60 60 1 1 I
+X CS1 22 -700 -750 300 R 60 60 1 1 I I
+X Q0 13 700 1050 300 L 60 60 1 1 T
+X A10 23 -700 50 300 R 60 60 1 1 I
+X Q1 14 700 950 300 L 60 60 1 1 T
+X OE 24 -700 -950 300 R 60 60 1 1 I I
+X Q2 15 700 850 300 L 60 60 1 1 T
+X A11 25 -700 -50 300 R 60 60 1 1 I
+X A9 26 -700 150 300 R 60 60 1 1 I
+X Q3 17 700 750 300 L 60 60 1 1 T
+X A8 27 -700 250 300 R 60 60 1 1 I
+X Q4 18 700 650 300 L 60 60 1 1 T
+X A13 28 -700 -250 300 R 60 60 1 1 I
+X Q5 19 700 550 300 L 60 60 1 1 T
+X WR 29 -700 -1050 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# 74LS245
+#
+DEF 74LS245 U 0 10 Y Y 1 F N
+F0 "U" 100 575 50 H V L BNN
+F1 "74LS245" 50 -575 50 H V L TNN
+F2 "" 50 -650 30 H V L CNN
+F3 "" 100 575 30 H V C CNN
+ALIAS 74HC245
+DRAW
+X GND 10 0 -550 0 U 60 60 0 0 W N
+X VCC 20 0 550 0 D 60 60 0 0 W N
+S -400 550 400 -550 0 1 0 N
+P 3 0 1 0 50 100 0 -100 -100 -100 N
+P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
+X A->B 1 -700 -400 300 R 60 60 1 1 I
+X A0 2 -700 500 300 R 60 60 1 1 T
+X A1 3 -700 400 300 R 60 60 1 1 T
+X A2 4 -700 300 300 R 60 60 1 1 T
+X A3 5 -700 200 300 R 60 60 1 1 T
+X A4 6 -700 100 300 R 60 60 1 1 T
+X A5 7 -700 0 300 R 60 60 1 1 T
+X A6 8 -700 -100 300 R 60 60 1 1 T
+X A7 9 -700 -200 300 R 60 60 1 1 T
+X B7 11 700 -200 300 L 60 60 1 1 T
+X B6 12 700 -100 300 L 60 60 1 1 T
+X B5 13 700 0 300 L 60 60 1 1 T
+X B4 14 700 100 300 L 60 60 1 1 T
+X B3 15 700 200 300 L 60 60 1 1 T
+X B2 16 700 300 300 L 60 60 1 1 T
+X B1 17 700 400 300 L 60 60 1 1 T
+X B0 18 700 500 300 L 60 60 1 1 T
+X CE 19 -700 -500 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# 74LS541
+#
+DEF 74LS541 U 0 30 Y Y 1 F N
+F0 "U" 0 575 60 H V C BNN
+F1 "74LS541" 0 -575 60 H V C TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 10 -200 -550 0 U 60 60 0 0 W N
+X VCC 20 -200 550 0 D 60 60 0 0 W N
+S -400 550 400 -550 0 1 0 N
+P 2 0 1 0 -100 300 -150 300 N
+P 2 0 1 0 100 300 150 300 N
+P 3 0 1 0 50 100 0 -100 -100 -100 N
+P 4 0 1 0 -100 400 -100 200 100 300 -100 400 N
+P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
+X G1 1 -700 -400 300 R 60 60 1 1 I I
+X A0 2 -700 500 300 R 60 60 1 1 I
+X A1 3 -700 400 300 R 60 60 1 1 I
+X A2 4 -700 300 300 R 60 60 1 1 I
+X A3 5 -700 200 300 R 60 60 1 1 I
+X A4 6 -700 100 300 R 60 60 1 1 I
+X A5 7 -700 0 300 R 60 60 1 1 I
+X A6 8 -700 -100 300 R 60 60 1 1 I
+X A7 9 -700 -200 300 R 60 60 1 1 I
+X Y7 11 700 -200 300 L 60 60 1 1 T
+X Y6 12 700 -100 300 L 60 60 1 1 T
+X Y5 13 700 0 300 L 60 60 1 1 T
+X Y4 14 700 100 300 L 60 60 1 1 T
+X Y3 15 700 200 300 L 60 60 1 1 T
+X Y2 16 700 300 300 L 60 60 1 1 T
+X Y1 17 700 400 300 L 60 60 1 1 T
+X Y0 18 700 500 300 L 60 60 1 1 T
+X G2 19 -700 -500 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# 74LS688
+#
+DEF 74LS688 U 0 40 Y Y 1 F N
+F0 "U" 0 950 60 H V C CNN
+F1 "74LS688" 0 -950 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 10 -300 -900 0 R 60 60 0 0 W N
+X VCC 20 -300 900 0 R 60 60 0 0 W N
+S -400 900 400 -900 0 1 0 N
+X G 1 -700 -850 300 R 60 60 1 1 I I
+X P0 2 -700 850 300 R 60 60 1 1 I
+X R0 3 -700 0 300 R 60 60 1 1 I
+X P1 4 -700 750 300 R 60 60 1 1 I
+X R1 5 -700 -100 300 R 60 60 1 1 I
+X P2 6 -700 650 300 R 60 60 1 1 I
+X R2 7 -700 -200 300 R 60 60 1 1 I
+X P3 8 -700 550 300 R 60 60 1 1 I
+X R3 9 -700 -300 300 R 60 60 1 1 I
+X P4 11 -700 450 300 R 60 60 1 1 I
+X R4 12 -700 -400 300 R 60 60 1 1 I
+X P5 13 -700 350 300 R 60 60 1 1 I
+X R5 14 -700 -500 300 R 60 60 1 1 I
+X P6 15 -700 250 300 R 60 60 1 1 I
+X R6 16 -700 -600 300 R 60 60 1 1 I
+X P7 17 -700 150 300 R 60 60 1 1 I
+X R7 18 -700 -700 300 R 60 60 1 1 I
+X P=R 19 700 850 300 L 60 60 1 1 O I
+ENDDRAW
+ENDDEF
+#
+# BUSPC
+#
+DEF BUSPC BUS 0 40 Y Y 1 F N
+F0 "BUS" 0 100 70 H V C CNN
+F1 "BUSPC" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -600 -1600 600 1600 0 1 0 N
+X GND 1 -900 1500 300 R 60 60 1 1 P
+X RESET 2 -900 1400 300 R 60 60 1 1 O
+X VCC 3 -900 1300 300 R 60 60 1 1 P
+X INQ2 4 -900 1200 300 R 60 60 1 1 P
+X -5V 5 -900 1100 300 R 60 60 1 1 P
+X DRQ2 6 -900 1000 300 R 60 60 1 1 P
+X -12V 7 -900 900 300 R 60 60 1 1 P
+X UNUSED 8 -900 800 300 R 60 60 1 1 P
+X +12V 9 -900 700 300 R 60 60 1 1 P
+X GND 10 -900 600 300 R 60 60 1 1 P
+X CLK 20 -900 -400 300 R 60 60 1 1 O
+X OSC 30 -900 -1400 300 R 60 60 1 1 O
+X DB0 40 900 700 300 L 60 60 1 1 T
+X BA12 50 900 -300 300 L 60 60 1 1 T
+X BA02 60 900 -1300 300 L 60 60 1 1 T
+X MEM 11 -900 500 300 R 60 60 1 1 O I
+X IRQ7 21 -900 -500 300 R 60 60 1 1 P
+X GND 31 -900 -1500 300 R 60 60 1 1 P
+X IO_READY 41 900 600 300 L 60 60 1 1 P
+X BA11 51 900 -400 300 L 60 60 1 1 T
+X BA01 61 900 -1400 300 L 60 60 1 1 T
+X MEM 12 -900 400 300 R 60 60 1 1 O I
+X IRQ6 22 -900 -600 300 R 60 60 1 1 P
+X IO 32 900 1500 300 L 60 60 1 1 P
+X AEN 42 900 500 300 L 60 60 1 1 O
+X BA10 52 900 -500 300 L 60 60 1 1 T
+X BA00 62 900 -1500 300 L 60 60 1 1 T
+X IOW 13 -900 300 300 R 60 60 1 1 O I
+X IRQ5 23 -900 -700 300 R 60 60 1 1 P
+X DB7 33 900 1400 300 L 60 60 1 1 T
+X BA19 43 900 400 300 L 60 60 1 1 T
+X BA09 53 900 -600 300 L 60 60 1 1 T
+X IOR 14 -900 200 300 R 60 60 1 1 O I
+X IRQ4 24 -900 -800 300 R 60 60 1 1 P
+X DB6 34 900 1300 300 L 60 60 1 1 T
+X BA18 44 900 300 300 L 60 60 1 1 T
+X BA08 54 900 -700 300 L 60 60 1 1 T
+X DACK3 15 -900 100 300 R 60 60 1 1 P I
+X IRQ3 25 -900 -900 300 R 60 60 1 1 P
+X DB5 35 900 1200 300 L 60 60 1 1 T
+X BA17 45 900 200 300 L 60 60 1 1 T
+X BA07 55 900 -800 300 L 60 60 1 1 T
+X DRQ3 16 -900 0 300 R 60 60 1 1 P
+X DACK2 26 -900 -1000 300 R 60 60 1 1 P I
+X DB4 36 900 1100 300 L 60 60 1 1 T
+X BA16 46 900 100 300 L 60 60 1 1 T
+X BA06 56 900 -900 300 L 60 60 1 1 T
+X DACK1 17 -900 -100 300 R 60 60 1 1 P I
+X TC 27 -900 -1100 300 R 60 60 1 1 P
+X DB3 37 900 1000 300 L 60 60 1 1 T
+X BA15 47 900 0 300 L 60 60 1 1 T
+X BA05 57 900 -1000 300 L 60 60 1 1 T
+X DRQ1 18 -900 -200 300 R 60 60 1 1 P
+X ALE 28 -900 -1200 300 R 60 60 1 1 O
+X DB2 38 900 900 300 L 60 60 1 1 T
+X BA14 48 900 -100 300 L 60 60 1 1 T
+X BA04 58 900 -1100 300 L 60 60 1 1 T
+X DACK0 19 -900 -300 300 R 60 60 1 1 P I
+X VCC 29 -900 -1300 300 R 60 60 1 1 P
+X DB1 39 900 800 300 L 60 60 1 1 T
+X BA13 49 900 -200 300 L 60 60 1 1 T
+X BA03 59 900 -1200 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_8X2
+#
+DEF CONN_8X2 P 0 40 Y Y 1 F N
+F0 "P" 0 450 60 H V C CNN
+F1 "CONN_8X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 400 100 -400 0 1 0 N
+X ~ 1 -400 350 300 R 60 60 1 1 P I
+X ~ 2 400 350 300 L 60 60 1 1 P I
+X ~ 3 -400 250 300 R 60 60 1 1 P I
+X ~ 4 400 250 300 L 60 60 1 1 P I
+X ~ 5 -400 150 300 R 60 60 1 1 P I
+X ~ 6 400 150 300 L 60 60 1 1 P I
+X ~ 7 -400 50 300 R 60 60 1 1 P I
+X ~ 8 400 50 300 L 60 60 1 1 P I
+X ~ 9 -400 -50 300 R 60 60 1 1 P I
+X ~ 10 400 -50 300 L 60 60 1 1 P I
+X ~ 11 -400 -150 300 R 60 60 1 1 P I
+X ~ 12 400 -150 300 L 60 60 1 1 P I
+X ~ 13 -400 -250 300 R 60 60 1 1 P I
+X ~ 14 400 -250 300 L 60 60 1 1 P I
+X ~ 15 -400 -350 300 R 60 60 1 1 P I
+X ~ 16 400 -350 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB25
+#
+DEF DB25 J 0 40 Y N 1 F N
+F0 "J" 50 1350 70 H V C CNN
+F1 "DB25" -50 -1350 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB25*
+$ENDFPLIST
+DRAW
+A -109 1270 41 1799 774 0 1 8 N -150 1270 -100 1310
+A -108 -1259 42 -1787 -788 0 1 8 N -150 -1260 -100 -1300
+A 116 -1169 34 -657 -15 0 1 8 N 130 -1200 150 -1170
+A 117 1170 32 664 1 0 1 8 N 130 1199 149 1170
+C -70 -1200 30 0 1 0 N
+C -70 -1000 30 0 1 0 N
+C -70 -800 30 0 1 0 N
+C -70 -600 30 0 1 0 N
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C -70 600 30 0 1 0 N
+C -70 800 30 0 1 0 N
+C -70 1000 30 0 1 0 N
+C -70 1200 30 0 1 0 N
+C 50 -1100 30 0 1 0 N
+C 50 -900 30 0 1 0 N
+C 50 -700 30 0 1 0 N
+C 50 -500 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+C 50 500 30 0 1 0 N
+C 50 700 30 0 1 0 N
+C 50 900 30 0 1 0 N
+C 50 1100 30 0 1 0 N
+P 2 0 1 8 -150 -1260 -150 1270 N
+P 2 0 1 0 -150 -1200 -100 -1200 N
+P 2 0 1 0 -150 -1100 20 -1100 N
+P 2 0 1 0 -150 -1000 -100 -1000 N
+P 2 0 1 0 -150 -900 20 -900 N
+P 2 0 1 0 -150 -800 -100 -800 N
+P 2 0 1 0 -150 -700 20 -700 N
+P 2 0 1 0 -150 -600 -100 -600 N
+P 2 0 1 0 -150 -500 20 -500 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -150 500 20 500 N
+P 2 0 1 0 -150 600 -100 600 N
+P 2 0 1 0 -150 700 20 700 N
+P 2 0 1 0 -150 800 -100 800 N
+P 2 0 1 0 -150 900 20 900 N
+P 2 0 1 0 -150 1000 -100 1000 N
+P 2 0 1 0 -150 1100 20 1100 N
+P 2 0 1 0 -150 1200 -100 1200 N
+P 2 0 1 8 -100 -1300 130 -1200 N
+P 2 0 1 8 130 1200 -100 1310 N
+P 2 0 1 8 150 -1170 150 1170 N
+X 1 1 -450 -1200 300 R 60 60 1 1 P
+X 2 2 -450 -1000 300 R 60 60 1 1 P
+X 3 3 -450 -800 300 R 60 60 1 1 P
+X 4 4 -450 -600 300 R 60 60 1 1 P
+X 5 5 -450 -400 300 R 60 60 1 1 P
+X 6 6 -450 -200 300 R 60 60 1 1 P
+X 7 7 -450 0 300 R 60 60 1 1 P
+X 8 8 -450 200 300 R 60 60 1 1 P
+X 9 9 -450 400 300 R 60 60 1 1 P
+X 10 10 -450 600 300 R 60 60 1 1 P
+X P20 20 -450 100 300 R 60 60 1 1 P
+X 11 11 -450 800 300 R 60 60 1 1 P
+X P21 21 -450 300 300 R 60 60 1 1 P
+X 12 12 -450 1000 300 R 60 60 1 1 P
+X P22 22 -450 500 300 R 60 60 1 1 P
+X 13 13 -450 1200 300 R 60 60 1 1 P
+X P23 23 -450 700 300 R 60 60 1 1 P
+X P14 14 -450 -1100 300 R 60 60 1 1 P
+X P24 24 -450 900 300 R 60 60 1 1 P
+X P15 15 -450 -900 300 R 60 60 1 1 P
+X P25 25 -450 1100 300 R 60 60 1 1 P
+X P16 16 -450 -700 300 R 60 60 1 1 P
+X P17 17 -450 -500 300 R 60 60 1 1 P
+X P18 18 -450 -300 300 R 60 60 1 1 P
+X P19 19 -450 -100 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# EP600
+#
+DEF EP600 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "EP600" 0 -500 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 -850 500 850 0 1 0 N
+X CLK1 1 -800 750 300 R 60 60 1 1 I C
+X IN2 2 -800 550 300 R 60 60 1 1 I
+X I/O3 3 -800 350 300 R 60 60 1 1 P
+X I/O4 4 -800 250 300 R 60 60 1 1 P
+X I/O5 5 -800 150 300 R 60 60 1 1 P
+X I/O6 6 -800 50 300 R 60 60 1 1 P
+X I/O7 7 -800 -50 300 R 60 60 1 1 P
+X I/O8 8 -800 -150 300 R 60 60 1 1 P
+X I/O9 9 -800 -250 300 R 60 60 1 1 P
+X I/O10 10 -800 -350 300 R 60 60 1 1 P
+X I/O20 20 800 350 300 L 60 60 1 1 P
+X IN11 11 -800 -550 300 R 60 60 1 1 I
+X I/O21 21 800 450 300 L 60 60 1 1 P
+X GND 12 -800 -750 300 R 60 60 1 1 I
+X I/O22 22 800 550 300 L 60 60 1 1 P
+X CLK2 13 800 -550 300 L 60 60 1 1 I C
+X IN23 23 800 750 300 L 60 60 1 1 I
+X IN14 14 800 -350 300 L 60 60 1 1 I
+X VCC 24 800 -750 300 L 60 60 1 1 I
+X I/O15 15 800 -150 300 L 60 60 1 1 P
+X I/O16 16 800 -50 300 L 60 60 1 1 P
+X I/O17 17 800 50 300 L 60 60 1 1 P
+X I/O18 18 800 150 300 L 60 60 1 1 P
+X I/O19 19 800 250 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# RR9
+#
+DEF RR9 RR 0 40 Y N 1 F N
+F0 "RR" 50 600 70 H V C CNN
+F1 "RR9" 30 0 70 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 -450 -50 550 50 550 100 500 100 -450 -50 -450 N
+X COM 1 -350 500 300 R 60 60 1 1 P I
+X 2 2 -350 400 300 R 60 60 1 1 P I
+X 3 3 -350 300 300 R 60 60 1 1 P I
+X 4 4 -350 200 300 R 60 60 1 1 P I
+X 5 5 -350 100 300 R 60 60 1 1 P I
+X 6 6 -350 0 300 R 60 60 1 1 P I
+X 7 7 -350 -100 300 R 60 60 1 1 P I
+X 8 8 -350 -200 300 R 60 60 1 1 P I
+X 9 9 -350 -300 300 R 60 60 1 1 P I
+X 10 10 -350 -400 300 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/interf_u/pagelayout_logo.kicad_wks b/demos/interf_u/pagelayout_logo.kicad_wks
new file mode 100644
index 0000000..709b39d
--- /dev/null
+++ b/demos/interf_u/pagelayout_logo.kicad_wks
@@ -0,0 +1,141 @@
+(page_layout
+ (setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)
+ (left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))
+ (rect (name rect1:Rect) (start 110 34) (end 2 2))
+ (rect (name rect2:Rect) (start 0 0 ltcorner) (end 0 0) (repeat 2) (incrx 2) (incry 2))
+ (line (name segm1:Line) (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50))
+ (tbtext 1 (name text1:Text) (pos 25 1 ltcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50))
+ (line (name segm2:Line) (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50))
+ (tbtext 1 (name text2:Text) (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50))
+ (line (name segm3:Line) (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50))
+ (tbtext A (name text3:Text) (pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50))
+ (line (name segm4:Line) (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50))
+ (tbtext A (name text4:Text) (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50))
+ (tbtext "Date: %D" (name text5:Text) (pos 87 6.9))
+ (line (name segm5:Line) (start 110 5.5) (end 2 5.5))
+ (tbtext %K (name text6:Text) (pos 109 4.1))
+ (line (name segm6:Line) (start 110 8.5) (end 2 8.5))
+ (tbtext "Rev: %R" (name text7:Text) (pos 24 6.9) (font bold))
+ (tbtext "Size: %Z" (name text8:Text) (pos 109 6.9))
+ (tbtext "Id: %S/%N" (name text9:Text) (pos 24 4.1))
+ (line (name segm7:Line) (start 110 12.5) (end 2 12.5))
+ (tbtext "Title: %T" (name text10:Text) (pos 109 10.7) (font (size 2 2) bold))
+ (tbtext "File: %F" (name text11:Text) (pos 109 14.3))
+ (line (name segm8:Line) (start 110 18.5) (end 2 18.5))
+ (tbtext "Sheet: %P" (name text12:Text) (pos 109 17))
+ (tbtext %Y (name text13:Text) (pos 109 20) (font bold))
+ (tbtext %C0 (name text14:Text) (pos 109 23))
+ (tbtext %C1 (name text15:Text) (pos 109 26))
+ (tbtext %C2 (name text16:Text) (pos 109 29))
+ (tbtext %C3 (name text17:Text) (pos 109 32))
+ (line (name segm9:Line) (start 90 8.5) (end 90 5.5))
+ (line (name segm10:Line) (start 26 8.5) (end 26 2))
+ (rect (name rect3:Rect) (start 157 34) (end 110 2))
+ (polygon (name poly1:Poly) (pos 134 18) (rotate 20) (linewidth 0.00254)
+ (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) (xy 19.71802 5.92328)
+ (xy 19.69262 5.83946) (xy 19.66976 5.72262) (xy 19.65198 5.56006) (xy 19.63674 5.33908) (xy 19.6215 5.04952) (xy 19.61134 4.67614)
+ (xy 19.60372 4.20624) (xy 19.5961 3.62712) (xy 19.58848 2.92862) (xy 19.5834 2.09296) (xy 19.57832 1.11252) (xy 19.57578 0.27432)
+ (xy 19.55038 -5.16636) (xy 18.15592 -5.16636) (xy 17.69364 -5.16382) (xy 17.29232 -5.15874) (xy 16.98752 -5.15112) (xy 16.80464 -5.14096)
+ (xy 16.764 -5.13334) (xy 16.79194 -5.0419) (xy 16.8656 -4.85648) (xy 16.891 -4.79806) (xy 16.93672 -4.64312) (xy 16.97228 -4.42468)
+ (xy 16.99514 -4.11734) (xy 17.01038 -3.69824) (xy 17.01546 -3.14198) (xy 17.018 -2.82702) (xy 17.01546 -2.25806) (xy 17.01292 -1.83896)
+ (xy 17.0053 -1.5494) (xy 16.99006 -1.36652) (xy 16.9672 -1.27508) (xy 16.93164 -1.25222) (xy 16.88592 -1.28016) (xy 16.8656 -1.29794)
+ (xy 16.47444 -1.5494) (xy 15.96644 -1.71704) (xy 15.3797 -1.7907) (xy 15.2527 -1.79324) (xy 14.53134 -1.71958) (xy 13.89634 -1.50622)
+ (xy 13.35278 -1.14808) (xy 12.9032 -0.65024) (xy 12.5476 -0.0127) (xy 12.28598 0.762) (xy 12.22756 1.016) (xy 12.1539 1.50368)
+ (xy 12.11326 2.07264) (xy 12.10564 2.667) (xy 12.13104 3.23342) (xy 12.18692 3.71348) (xy 12.2301 3.91668) (xy 12.49934 4.66344)
+ (xy 12.88288 5.2959) (xy 13.36802 5.8039) (xy 13.94968 6.17982) (xy 14.39164 6.35508) (xy 14.76248 6.41858) (xy 15.21968 6.4262)
+ (xy 15.69466 6.38302) (xy 16.11376 6.29158) (xy 16.20266 6.2611) (xy 16.49984 6.1341) (xy 16.76146 5.99694) (xy 16.87576 5.92074)
+ (xy 17.06118 5.7912) (xy 17.15262 5.78104) (xy 17.1831 5.9055) (xy 17.18564 6.00964) (xy 17.18564 6.26364) (xy 18.542 6.26364)
+ (xy 19.9009 6.26364) (xy 19.9009 8.382) (xy 11.51636 8.382) (xy 11.51636 6.26364) (xy 11.3665 6.03504) (xy 11.32586 5.9563)
+ (xy 11.2903 5.84962) (xy 11.26236 5.69468) (xy 11.24204 5.4737) (xy 11.22172 5.17144) (xy 11.20648 4.76504) (xy 11.19124 4.2418)
+ (xy 11.17854 3.57886) (xy 11.16838 3.00736) (xy 11.1506 2.16408) (xy 11.13282 1.47066) (xy 11.10996 0.90932) (xy 11.07694 0.45974)
+ (xy 11.03122 0.10414) (xy 10.97026 -0.1778) (xy 10.89152 -0.40386) (xy 10.78738 -0.59436) (xy 10.6553 -0.76962) (xy 10.49274 -0.94234)
+ (xy 10.40892 -1.0287) (xy 9.93394 -1.38684) (xy 9.34212 -1.63576) (xy 8.64616 -1.77546) (xy 7.85622 -1.80086) (xy 6.99262 -1.7145)
+ (xy 6.31952 -1.57988) (xy 5.92836 -1.48844) (xy 5.58038 -1.41478) (xy 5.31622 -1.36906) (xy 5.19938 -1.35636) (xy 5.0419 -1.32588)
+ (xy 4.99364 -1.27254) (xy 5.02666 -1.1557) (xy 5.10794 -0.92964) (xy 5.22224 -0.635) (xy 5.35432 -0.31496) (xy 5.48132 -0.01524)
+ (xy 5.588 0.22098) (xy 5.65658 0.35052) (xy 5.6642 0.36068) (xy 5.76834 0.36322) (xy 5.98424 0.31496) (xy 6.26872 0.22098)
+ (xy 6.3119 0.2032) (xy 6.83768 0.04572) (xy 7.3406 -0.03048) (xy 7.79018 -0.0254) (xy 8.14324 0.0635) (xy 8.2677 0.13462)
+ (xy 8.49376 0.40132) (xy 8.600440000000001 0.68326) (xy 8.691879999999999 1.05664) (xy 7.66826 1.10744) (xy 6.97738 1.16078) (xy 6.41096 1.24968)
+ (xy 5.92836 1.3843) (xy 5.49148 1.5748) (xy 5.24764 1.70942) (xy 4.77012 2.08534) (xy 4.4196 2.54762) (xy 4.19608 3.0734)
+ (xy 4.09448 3.63474) (xy 4.11988 4.20878) (xy 4.26974 4.76758) (xy 4.54406 5.28828) (xy 4.9403 5.74294) (xy 5.31876 6.02742)
+ (xy 5.85978 6.2738) (xy 6.47954 6.40588) (xy 7.12724 6.42112) (xy 7.74954 6.30936) (xy 7.75208 6.30936) (xy 8.06958 6.18744)
+ (xy 8.37438 6.02742) (xy 8.465820000000001 5.96646) (xy 8.763 5.74802) (xy 8.788399999999999 6.00456) (xy 8.813800000000001 6.26364) (xy 10.16508 6.26364)
+ (xy 11.51636 6.26364) (xy 11.51636 8.382) (xy 4.13766 8.382) (xy 4.13766 5.44068) (xy 4.10972 5.36702) (xy 4.0132 5.1816)
+ (xy 3.86334 4.91744) (xy 3.68046 4.6101) (xy 3.48742 4.29006) (xy 3.29946 3.99034) (xy 3.1369 3.74142) (xy 3.10896 3.70078)
+ (xy 2.9464 3.46456) (xy 2.65684 3.7211) (xy 2.20726 4.05892) (xy 1.76276 4.26212) (xy 1.27254 4.34848) (xy 1.05664 4.3561)
+ (xy 0.70104 4.34594) (xy 0.43942 4.29768) (xy 0.19558 4.19862) (xy 0.05842 4.11988) (xy -0.38862 3.76682) (xy -0.75946 3.28168)
+ (xy -1.03378 2.7051) (xy -1.07188 2.58572) (xy -1.143 2.30378) (xy -1.19126 1.98374) (xy -1.21666 1.58496) (xy -1.22936 1.0668)
+ (xy -1.22936 0.889) (xy -1.22428 0.381) (xy -1.21158 0) (xy -1.17856 -0.30226) (xy -1.12776 -0.56896) (xy -1.04902 -0.84328)
+ (xy -1.02108 -0.92964) (xy -0.7543800000000001 -1.53416) (xy -0.3937 -2.01676) (xy 0.04318 -2.36474) (xy 0.54864 -2.57048) (xy 0.99822 -2.62636)
+ (xy 1.54686 -2.55524) (xy 2.05486 -2.35712) (xy 2.35712 -2.15138) (xy 2.5527 -1.98882) (xy 2.68986 -1.88468) (xy 2.7305 -1.86436)
+ (xy 2.794 -1.9304) (xy 2.92608 -2.10312) (xy 3.10388 -2.35458) (xy 3.30962 -2.65176) (xy 3.51536 -2.96164) (xy 3.70586 -3.25374)
+ (xy 3.85318 -3.4925) (xy 3.94208 -3.64998) (xy 3.95732 -3.69316) (xy 3.86588 -3.74396) (xy 3.66268 -3.85064) (xy 3.3782 -3.99288)
+ (xy 3.22326 -4.06654) (xy 2.54508 -4.36118) (xy 1.92532 -4.5466) (xy 1.31318 -4.64058) (xy 0.87122 -4.65836) (xy 0.02286 -4.59232)
+ (xy -0.7493 -4.38912) (xy -1.46558 -4.0386) (xy -2.15392 -3.5306) (xy -2.38252 -3.32232) (xy -2.9464 -2.70764) (xy -3.37312 -2.04978)
+ (xy -3.6957 -1.30302) (xy -3.82524 -0.87376) (xy -3.94208 -0.26924) (xy -4.00304 0.43434) (xy -4.00812 1.17348) (xy -3.95986 1.88976)
+ (xy -3.85572 2.52222) (xy -3.82524 2.64922) (xy -3.51028 3.53314) (xy -3.07848 4.32562) (xy -2.53746 5.0165) (xy -1.905 5.588)
+ (xy -1.19126 6.02488) (xy -0.44958 6.30682) (xy 0.01016 6.39064) (xy 0.57404 6.4262) (xy 1.17856 6.41604) (xy 1.76276 6.3627)
+ (xy 2.26822 6.26364) (xy 2.286 6.25856) (xy 2.72288 6.11124) (xy 3.23088 5.90296) (xy 3.73888 5.66166) (xy 4.13766 5.44068)
+ (xy 4.13766 8.382) (xy 0 8.382) (xy -4.74218 8.382) (xy -4.74218 1.7653) (xy -4.74218 0.71882) (xy -4.74218 -0.55118)
+ (xy -4.74218 -1.66116) (xy -4.74218 -2.62382) (xy -4.74472 -3.44678) (xy -4.7498 -4.14528) (xy -4.75742 -4.7244) (xy -4.77012 -5.19938)
+ (xy -4.79044 -5.57784) (xy -4.81584 -5.87248) (xy -4.84886 -6.09346) (xy -4.8895 -6.2484) (xy -4.94284 -6.35254) (xy -5.0038 -6.4135)
+ (xy -5.07746 -6.44144) (xy -5.16382 -6.44906) (xy -5.26542 -6.44398) (xy -5.37972 -6.4389) (xy -5.40512 -6.4389) (xy -5.6515 -6.4516)
+ (xy -5.79374 -6.51002) (xy -5.90042 -6.65734) (xy -5.969 -6.79958) (xy -6.23062 -7.1755) (xy -6.57606 -7.4295) (xy -6.97738 -7.56158)
+ (xy -7.40156 -7.57682) (xy -7.81558 -7.47014) (xy -8.1915 -7.24662) (xy -8.49376 -6.90626) (xy -8.58774 -6.73354) (xy -8.729979999999999 -6.43636)
+ (xy -14.05382 -6.43636) (xy -15.14602 -6.43636) (xy -16.08074 -6.43382) (xy -16.87068 -6.43128) (xy -17.52854 -6.42874) (xy -18.06702 -6.42112)
+ (xy -18.49628 -6.4135) (xy -18.83156 -6.40334) (xy -19.08302 -6.39064) (xy -19.2659 -6.3754) (xy -19.38782 -6.35508) (xy -19.46402 -6.33222)
+ (xy -19.50974 -6.30428) (xy -19.50974 -6.30174) (xy -19.53514 -6.26618) (xy -19.55546 -6.1976) (xy -19.57324 -6.08838) (xy -19.59102 -5.92582)
+ (xy -19.60372 -5.69976) (xy -19.61388 -5.40004) (xy -19.6215 -5.0165) (xy -19.62912 -4.53644) (xy -19.6342 -3.95224) (xy -19.63928 -3.24866)
+ (xy -19.64182 -2.41808) (xy -19.64182 -1.4478) (xy -19.64436 -0.32766) (xy -19.64436 0.71882) (xy -19.64436 1.9685) (xy -19.64182 3.06324)
+ (xy -19.64182 4.00812) (xy -19.63928 4.81584) (xy -19.6342 5.49656) (xy -19.62912 6.06552) (xy -19.6215 6.52526) (xy -19.61134 6.8961)
+ (xy -19.60118 7.18058) (xy -19.58848 7.39394) (xy -19.5707 7.54634) (xy -19.55292 7.64794) (xy -19.53006 7.71144) (xy -19.50974 7.73938)
+ (xy -19.47418 7.76224) (xy -19.4056 7.7851) (xy -19.29892 7.80288) (xy -19.1389 7.81812) (xy -18.91538 7.83082) (xy -18.62074 7.84098)
+ (xy -18.24228 7.85114) (xy -17.76984 7.85622) (xy -17.1958 7.86384) (xy -16.50238 7.86638) (xy -15.68704 7.86892) (xy -14.732 7.87146)
+ (xy -13.63218 7.87146) (xy -12.37488 7.87146) (xy -12.192 7.874) (xy -10.91438 7.87146) (xy -9.79424 7.87146) (xy -8.82142 7.86892)
+ (xy -7.98576 7.86638) (xy -7.2771 7.86384) (xy -6.68782 7.85876) (xy -6.20014 7.85114) (xy -5.81152 7.84352) (xy -5.50672 7.83336)
+ (xy -5.27304 7.81812) (xy -5.1054 7.80542) (xy -4.9911 7.78764) (xy -4.91998 7.76732) (xy -4.87934 7.74192) (xy -4.8768 7.73938)
+ (xy -4.8514 7.70128) (xy -4.83108 7.6327) (xy -4.8133 7.52348) (xy -4.79552 7.36092) (xy -4.78282 7.1374) (xy -4.77266 6.83768)
+ (xy -4.76504 6.45414) (xy -4.75742 5.97408) (xy -4.75234 5.38734) (xy -4.74726 4.6863) (xy -4.74472 3.85318) (xy -4.74472 2.88544)
+ (xy -4.74218 1.7653) (xy -4.74218 8.382) (xy -20.574 8.382) (xy -20.574 0) (xy -20.574 -8.382) (xy 0 -8.382)
+ (xy 20.574 -8.382) (xy 20.574 0) (xy 20.574 8.382) (xy 20.574 8.382))
+ (pts (xy -9.4742 6.26364) (xy -11.25728 6.26364) (xy -13.04036 6.26364) (xy -13.04036 6.0071) (xy -13.07846 5.76072)
+ (xy -13.17752 5.48386) (xy -13.20038 5.4356) (xy -13.28674 5.29336) (xy -13.45692 5.0419) (xy -13.68806 4.70662) (xy -13.96746 4.31292)
+ (xy -14.27226 3.88112) (xy -14.58976 3.4417) (xy -14.8971 3.02006) (xy -15.1765 2.63652) (xy -15.41526 2.31902) (xy -15.58798 2.09296)
+ (xy -15.67942 1.98882) (xy -15.7099 2.03454) (xy -15.73022 2.24282) (xy -15.74038 2.61874) (xy -15.74292 3.15976) (xy -15.7353 3.76682)
+ (xy -15.72514 4.37896) (xy -15.71244 4.84886) (xy -15.69974 5.19684) (xy -15.67688 5.45084) (xy -15.64894 5.63372) (xy -15.6083 5.76834)
+ (xy -15.55496 5.88518) (xy -15.5194 5.94614) (xy -15.33144 6.26364) (xy -16.96974 6.26364) (xy -18.61058 6.26364) (xy -18.45056 5.94868)
+ (xy -18.415 5.87502) (xy -18.38706 5.78612) (xy -18.36166 5.67182) (xy -18.34134 5.51688) (xy -18.3261 5.30606) (xy -18.3134 5.02666)
+ (xy -18.30324 4.66598) (xy -18.29816 4.20624) (xy -18.29308 3.63728) (xy -18.29054 2.94386) (xy -18.29054 2.11328) (xy -18.29054 1.12776)
+ (xy -18.288 0.889) (xy -18.29054 -0.13208) (xy -18.29054 -0.99568) (xy -18.29308 -1.71958) (xy -18.29562 -2.31394) (xy -18.30324 -2.79654)
+ (xy -18.31086 -3.18008) (xy -18.32356 -3.47472) (xy -18.3388 -3.70078) (xy -18.35658 -3.86588) (xy -18.37944 -3.9878) (xy -18.40738 -4.08178)
+ (xy -18.4404 -4.15798) (xy -18.45056 -4.17322) (xy -18.61058 -4.48818) (xy -17.01038 -4.48818) (xy -16.51 -4.48564) (xy -16.07566 -4.48056)
+ (xy -15.73022 -4.4704) (xy -15.49908 -4.4577) (xy -15.41018 -4.44246) (xy -15.44574 -4.3434) (xy -15.53464 -4.16052) (xy -15.55496 -4.12496)
+ (xy -15.61084 -3.9878) (xy -15.65402 -3.7973) (xy -15.6845 -3.52806) (xy -15.70736 -3.15468) (xy -15.72514 -2.64922) (xy -15.73276 -2.37236)
+ (xy -15.75054 -1.70434) (xy -15.75816 -1.20396) (xy -15.748 -0.86106) (xy -15.70228 -0.6731) (xy -15.61084 -0.63754) (xy -15.46098 -0.74422)
+ (xy -15.24 -0.99314) (xy -14.93266 -1.37668) (xy -14.5288 -1.8923) (xy -14.51102 -1.91516) (xy -14.04112 -2.51714) (xy -13.67028 -3.00482)
+ (xy -13.39088 -3.39344) (xy -13.18768 -3.70078) (xy -13.0556 -3.94208) (xy -12.9794 -4.13004) (xy -12.95654 -4.28244) (xy -12.954 -4.29768)
+ (xy -12.954 -4.48818) (xy -11.23696 -4.48818) (xy -9.519920000000001 -4.48818) (xy -10.07364 -3.91668) (xy -10.25398 -3.7211) (xy -10.50544 -3.43154)
+ (xy -10.81278 -3.06832) (xy -11.1633 -2.64922) (xy -11.54176 -2.19202) (xy -11.93038 -1.71704) (xy -12.319 -1.23952) (xy -12.68476 -0.78232)
+ (xy -13.02004 -0.36068) (xy -13.30452 0.00254) (xy -13.5255 0.2921) (xy -13.66774 0.49022) (xy -13.716 0.57404) (xy -13.66774 0.66294)
+ (xy -13.53058 0.86868) (xy -13.31976 1.17348) (xy -13.04798 1.55702) (xy -12.7254 2.00406) (xy -12.3698 2.49428) (xy -11.99388 3.00736)
+ (xy -11.61034 3.5306) (xy -11.23442 4.0386) (xy -10.87628 4.51866) (xy -10.55116 4.95046) (xy -10.27176 5.31622) (xy -10.05332 5.59562)
+ (xy -9.91108 5.76834) (xy -9.4742 6.26364) (xy -9.4742 6.26364))
+ (pts (xy -5.75818 6.23316) (xy -5.83946 6.24332) (xy -6.06044 6.25094) (xy -6.39826 6.25856) (xy -6.82498 6.26364)
+ (xy -7.239 6.26364) (xy -7.71906 6.2611) (xy -8.135619999999999 6.25856) (xy -8.4582 6.25094) (xy -8.6614 6.24078) (xy -8.72236 6.23316)
+ (xy -8.691879999999999 6.14172) (xy -8.618220000000001 5.95376) (xy -8.595359999999999 5.89534) (xy -8.559799999999999 5.72262) (xy -8.52932 5.40512) (xy -8.503920000000001 4.9657)
+ (xy -8.483599999999999 4.42468) (xy -8.468360000000001 3.81) (xy -8.4582 3.14198) (xy -8.45566 2.44602) (xy -8.45566 1.74498) (xy -8.460739999999999 1.06172)
+ (xy -8.47344 0.42164) (xy -8.49122 -0.15494) (xy -8.51408 -0.64262) (xy -8.542020000000001 -1.01854) (xy -8.57504 -1.25984) (xy -8.59028 -1.31572)
+ (xy -8.712199999999999 -1.61036) (xy -7.36346 -1.61036) (xy -6.01218 -1.61036) (xy -6.01218 1.99136) (xy -6.01218 2.8956) (xy -6.00964 3.6449)
+ (xy -6.00456 4.2545) (xy -5.9944 4.74472) (xy -5.98424 5.12572) (xy -5.96646 5.41274) (xy -5.94614 5.6261) (xy -5.92074 5.77596)
+ (xy -5.89026 5.88264) (xy -5.88518 5.89534) (xy -5.8039 6.09854) (xy -5.76072 6.22046) (xy -5.75818 6.23316) (xy -5.75818 6.23316))
+ (pts (xy 8.635999999999999 3.4544) (xy 8.62838 3.80238) (xy 8.602980000000001 4.0259) (xy 8.54964 4.17322) (xy 8.45312 4.28752)
+ (xy 8.445499999999999 4.29514) (xy 8.08736 4.52628) (xy 7.66826 4.64058) (xy 7.24408 4.62788) (xy 7.05866 4.572) (xy 6.77672 4.37388)
+ (xy 6.5913 4.07924) (xy 6.5405 3.74142) (xy 6.54558 3.70078) (xy 6.60146 3.45186) (xy 6.68782 3.25882) (xy 6.70052 3.24104)
+ (xy 6.96468 3.03784) (xy 7.35076 2.88798) (xy 7.81812 2.8067) (xy 8.064500000000001 2.794) (xy 8.635999999999999 2.794) (xy 8.635999999999999 3.4544)
+ (xy 8.635999999999999 3.4544))
+ (pts (xy 17.018 4.04876) (xy 16.7259 4.2291) (xy 16.34744 4.3942) (xy 15.94358 4.46024) (xy 15.56766 4.4196)
+ (xy 15.35938 4.3307) (xy 15.13332 4.15544) (xy 14.9733 3.93192) (xy 14.86408 3.6322) (xy 14.80058 3.23342) (xy 14.77518 2.70764)
+ (xy 14.77264 2.45364) (xy 14.79296 1.77546) (xy 14.859 1.23952) (xy 14.97076 0.82296) (xy 15.1384 0.508) (xy 15.33652 0.29718)
+ (xy 15.66418 0.127) (xy 16.06042 0.08382000000000001) (xy 16.48714 0.17018) (xy 16.68018 0.254) (xy 17.018 0.42672) (xy 17.018 2.23774)
+ (xy 17.018 4.04876) (xy 17.018 4.04876))
+ )
+)
diff --git a/demos/interf_u/tux.bmp b/demos/interf_u/tux.bmp
new file mode 100644
index 0000000..ec1dbf9
--- /dev/null
+++ b/demos/interf_u/tux.bmp
Binary files differ
diff --git a/demos/kit-dev-coldfire-xilinx_5213/in_out_conn.sch b/demos/kit-dev-coldfire-xilinx_5213/in_out_conn.sch
new file mode 100644
index 0000000..d1565bb
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/in_out_conn.sch
@@ -0,0 +1,2285 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:motorola
+LIBS:kit-dev-coldfire-xilinx_5213-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 2 3
+Title "Dev kit coldfire 5213"
+Date "Sun 22 Mar 2015"
+Rev "0"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L GND #PWR051
+U 1 1 48D5174C
+P 13550 4450
+F 0 "#PWR051" H 13550 4450 30 0001 C CNN
+F 1 "GND" H 13550 4380 30 0001 C CNN
+F 2 "" H 13550 4450 60 0001 C CNN
+F 3 "" H 13550 4450 60 0001 C CNN
+ 1 13550 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GNDA #PWR052
+U 1 1 4652A71A
+P 13550 4200
+F 0 "#PWR052" H 13550 4200 40 0001 C CNN
+F 1 "GNDA" V 13550 4050 40 0000 C CNN
+F 2 "" H 13550 4200 60 0001 C CNN
+F 3 "" H 13550 4200 60 0001 C CNN
+ 1 13550 4200
+ 0 -1 -1 0
+$EndComp
+Text HLabel 13900 4300 2 60 Input ~ 0
+VRL
+$Comp
+L GND #PWR053
+U 1 1 4652A67A
+P 13550 4100
+F 0 "#PWR053" H 13550 4100 30 0001 C CNN
+F 1 "GND" H 13550 4030 30 0001 C CNN
+F 2 "" H 13550 4100 60 0001 C CNN
+F 3 "" H 13550 4100 60 0001 C CNN
+ 1 13550 4100
+ 0 -1 -1 0
+$EndComp
+Text HLabel 12250 4200 0 60 Input ~ 0
+VCCA
+Text HLabel 12250 4300 0 60 Input ~ 0
+VRH
+NoConn ~ 11300 6000
+$Comp
+L LT1129_QPACK VR1
+U 1 1 46603376
+P 12100 6100
+F 0 "VR1" H 12100 6650 60 0000 C CNN
+F 1 "LT1129_QPACK" H 12100 6550 60 0000 C CNN
+F 2 "lib_smd:DPAK5" H 12100 6100 60 0001 C CNN
+F 3 "" H 12100 6100 60 0001 C CNN
+ 1 12100 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR054
+U 1 1 46546CAD
+P 6900 1350
+F 0 "#PWR054" H 6900 1310 30 0001 C CNN
+F 1 "+3.3V" H 6900 1460 40 0000 C CNN
+F 2 "" H 6900 1350 60 0001 C CNN
+F 3 "" H 6900 1350 60 0001 C CNN
+ 1 6900 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C26
+U 1 1 46546CA6
+P 6900 1600
+F 0 "C26" H 6950 1700 50 0000 L CNN
+F 1 "100nF" H 6950 1500 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 6900 1600 60 0001 C CNN
+F 3 "" H 6900 1600 60 0001 C CNN
+ 1 6900 1600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR055
+U 1 1 46546CA5
+P 6900 1850
+F 0 "#PWR055" H 6900 1850 30 0001 C CNN
+F 1 "GND" H 6900 1780 30 0001 C CNN
+F 2 "" H 6900 1850 60 0001 C CNN
+F 3 "" H 6900 1850 60 0001 C CNN
+ 1 6900 1850
+ 1 0 0 -1
+$EndComp
+Text Label 14700 7900 2 60 ~ 0
+CAN_L
+Text Label 12800 7900 0 60 ~ 0
+CAN_H
+$Comp
+L +3.3V #PWR056
+U 1 1 465401BF
+P 14850 8200
+F 0 "#PWR056" H 14850 8160 30 0001 C CNN
+F 1 "+3.3V" H 14850 8310 40 0000 C CNN
+F 2 "" H 14850 8200 60 0001 C CNN
+F 3 "" H 14850 8200 60 0001 C CNN
+ 1 14850 8200
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR057
+U 1 1 465401B2
+P 13700 8300
+F 0 "#PWR057" H 13700 8300 30 0001 C CNN
+F 1 "GND" H 13700 8230 30 0001 C CNN
+F 2 "" H 13700 8300 60 0001 C CNN
+F 3 "" H 13700 8300 60 0001 C CNN
+ 1 13700 8300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R RCAN1
+U 1 1 4654018B
+P 14550 8200
+F 0 "RCAN1" V 14630 8200 50 0000 C CNN
+F 1 "R" V 14550 8200 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14550 8200 60 0001 C CNN
+F 3 "" H 14550 8200 60 0001 C CNN
+ 1 14550 8200
+ 0 1 1 0
+$EndComp
+$Comp
+L R RCAN2
+U 1 1 46540184
+P 13450 8200
+F 0 "RCAN2" V 13530 8200 50 0000 C CNN
+F 1 "R" V 13450 8200 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 13450 8200 60 0001 C CNN
+F 3 "" H 13450 8200 60 0001 C CNN
+ 1 13450 8200
+ 0 1 1 0
+$EndComp
+$Comp
+L R R38
+U 1 1 46540164
+P 14050 7900
+F 0 "R38" V 14130 7900 50 0000 C CNN
+F 1 "62" V 14050 7900 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14050 7900 60 0001 C CNN
+F 3 "" H 14050 7900 60 0001 C CNN
+ 1 14050 7900
+ 0 1 1 0
+$EndComp
+$Comp
+L JUMPER CAN_TERM1
+U 1 1 46540159
+P 13500 7900
+F 0 "CAN_TERM1" H 13500 8050 60 0000 C CNN
+F 1 "JUMPER" H 13500 7820 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 13500 7900 60 0001 C CNN
+F 3 "" H 13500 7900 60 0001 C CNN
+ 1 13500 7900
+ 1 0 0 -1
+$EndComp
+Text Label 10800 8100 0 60 ~ 0
+RxD_CAN
+Text Label 10850 8800 0 60 ~ 0
+RxD_CAN
+Text Label 12100 8900 0 60 ~ 0
+TxD_CAN
+Text Label 10800 7800 0 60 ~ 0
+TxD_CAN
+$Comp
+L CONN_1 RS1
+U 1 1 4654007F
+P 10500 7950
+F 0 "RS1" H 10580 7950 40 0000 C CNN
+F 1 "CONN_1" H 10450 7990 30 0001 C CNN
+F 2 "connect:PINTST" H 10500 7950 60 0001 C CNN
+F 3 "" H 10500 7950 60 0001 C CNN
+ 1 10500 7950
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #PWR058
+U 1 1 4654006D
+P 10700 8650
+F 0 "#PWR058" H 10700 8650 30 0001 C CNN
+F 1 "GND" H 10700 8580 30 0001 C CNN
+F 2 "" H 10700 8650 60 0001 C CNN
+F 3 "" H 10700 8650 60 0001 C CNN
+ 1 10700 8650
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R36
+U 1 1 46540063
+P 10700 8350
+F 0 "R36" H 10600 8550 50 0000 C CNN
+F 1 "1K" V 10700 8350 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 10700 8350 60 0001 C CNN
+F 3 "" H 10700 8350 60 0001 C CNN
+ 1 10700 8350
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 VREF1
+U 1 1 4654003D
+P 12450 7650
+F 0 "VREF1" H 12450 7750 40 0000 C CNN
+F 1 "CONN_1" H 12400 7690 30 0001 C CNN
+F 2 "connect:PINTST" H 12450 7650 60 0001 C CNN
+F 3 "" H 12450 7650 60 0001 C CNN
+ 1 12450 7650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR059
+U 1 1 46540007
+P 10750 7550
+F 0 "#PWR059" H 10750 7550 30 0001 C CNN
+F 1 "GND" H 10750 7480 30 0001 C CNN
+F 2 "" H 10750 7550 60 0001 C CNN
+F 3 "" H 10750 7550 60 0001 C CNN
+ 1 10750 7550
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C34
+U 1 1 4653FFFE
+P 10950 7500
+F 0 "C34" V 10800 7500 50 0000 C CNN
+F 1 "100nF" V 11100 7500 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 10950 7500 60 0001 C CNN
+F 3 "" H 10950 7500 60 0001 C CNN
+ 1 10950 7500
+ 0 1 1 0
+$EndComp
+$Comp
+L +3.3V #PWR060
+U 1 1 4653FFF7
+P 11250 7450
+F 0 "#PWR060" H 11250 7410 30 0001 C CNN
+F 1 "+3.3V" H 11250 7560 30 0000 C CNN
+F 2 "" H 11250 7450 60 0001 C CNN
+F 3 "" H 11250 7450 60 0001 C CNN
+ 1 11250 7450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR061
+U 1 1 4653FFF3
+P 12300 8200
+F 0 "#PWR061" H 12300 8200 30 0001 C CNN
+F 1 "GND" H 12300 8130 30 0001 C CNN
+F 2 "" H 12300 8200 60 0001 C CNN
+F 3 "" H 12300 8200 60 0001 C CNN
+ 1 12300 8200
+ 1 0 0 -1
+$EndComp
+Text Label 12250 8000 0 60 ~ 0
+CAN_L
+Text Label 12250 7900 0 60 ~ 0
+CAN_H
+$Comp
+L PCA82C251 U7
+U 1 1 4653FF97
+P 11700 7950
+F 0 "U7" H 11700 8500 60 0000 C CNN
+F 1 "PCA82C251" H 11700 8400 60 0000 C CNN
+F 2 "lib_smd:SO8E" H 11700 7950 60 0001 C CNN
+F 3 "" H 11700 7950 60 0001 C CNN
+ 1 11700 7950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR062
+U 1 1 4653080F
+P 9300 6650
+F 0 "#PWR062" H 9300 6650 30 0001 C CNN
+F 1 "GND" H 9300 6580 30 0001 C CNN
+F 2 "" H 9300 6650 60 0001 C CNN
+F 3 "" H 9300 6650 60 0001 C CNN
+ 1 9300 6650
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 TB1
+U 1 1 46530806
+P 8850 6500
+F 0 "TB1" V 8800 6500 40 0000 C CNN
+F 1 "CONN_2" V 8900 6500 40 0000 C CNN
+F 2 "connect:bornier2" H 8850 6500 60 0001 C CNN
+F 3 "" H 8850 6500 60 0001 C CNN
+ 1 8850 6500
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR063
+U 1 1 465307DA
+P 9300 5750
+F 0 "#PWR063" H 9300 5750 30 0001 C CNN
+F 1 "GND" H 9300 5680 30 0001 C CNN
+F 2 "" H 9300 5750 60 0001 C CNN
+F 3 "" H 9300 5750 60 0001 C CNN
+ 1 9300 5750
+ 1 0 0 -1
+$EndComp
+$Comp
+L JACK_2P J1
+U 1 1 465307C6
+P 8750 5550
+F 0 "J1" H 8400 5350 60 0000 C CNN
+F 1 "JACK_2P" H 8600 5800 60 0000 C CNN
+F 2 "connect:JACK_ALIM" H 8750 5550 60 0001 C CNN
+F 3 "" H 8750 5550 60 0001 C CNN
+ 1 8750 5550
+ 1 0 0 -1
+$EndComp
+NoConn ~ 9500 5600
+$Comp
+L SWITCH_INV SW_ONOFF1
+U 1 1 46530763
+P 10000 5500
+F 0 "SW_ONOFF1" H 9800 5650 50 0000 C CNN
+F 1 "SWITCH_INV" H 9850 5350 50 0000 C CNN
+F 2 "discret:SW_SPDT" H 10000 5500 60 0001 C CNN
+F 3 "" H 10000 5500 60 0001 C CNN
+ 1 10000 5500
+ -1 0 0 1
+$EndComp
+$Comp
+L FUSE F1
+U 1 1 46530747
+P 10850 5500
+F 0 "F1" H 10950 5550 40 0000 C CNN
+F 1 "FUSE" H 10750 5450 40 0000 C CNN
+F 2 "lib_smd:FSUPCMS" H 10850 5500 60 0001 C CNN
+F 3 "" H 10850 5500 60 0001 C CNN
+ 1 10850 5500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR064
+U 1 1 46530706
+P 10650 6300
+F 0 "#PWR064" H 10650 6300 30 0001 C CNN
+F 1 "GND" H 10650 6230 30 0001 C CNN
+F 2 "" H 10650 6300 60 0001 C CNN
+F 3 "" H 10650 6300 60 0001 C CNN
+ 1 10650 6300
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C41
+U 1 1 465306F6
+P 10650 6050
+F 0 "C41" H 10700 6150 50 0000 L CNN
+F 1 "100nF" H 10700 5950 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 10650 6050 60 0001 C CNN
+F 3 "" H 10650 6050 60 0001 C CNN
+ 1 10650 6050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR065
+U 1 1 465306EA
+P 9700 6300
+F 0 "#PWR065" H 9700 6300 30 0001 C CNN
+F 1 "GND" H 9700 6230 30 0001 C CNN
+F 2 "" H 9700 6300 60 0001 C CNN
+F 3 "" H 9700 6300 60 0001 C CNN
+ 1 9700 6300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODE D7
+U 1 1 465306C8
+P 9700 6050
+F 0 "D7" V 9750 5800 50 0000 C CNN
+F 1 "1N4004" V 9650 5800 50 0000 C CNN
+F 2 "discret:D5" H 9700 6050 60 0001 C CNN
+F 3 "" H 9700 6050 60 0001 C CNN
+ 1 9700 6050
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR066
+U 1 1 465306B2
+P 10250 6300
+F 0 "#PWR066" H 10250 6300 30 0001 C CNN
+F 1 "GND" H 10250 6230 30 0001 C CNN
+F 2 "" H 10250 6300 60 0001 C CNN
+F 3 "" H 10250 6300 60 0001 C CNN
+ 1 10250 6300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C38
+U 1 1 465306B1
+P 10250 6050
+F 0 "C38" H 10300 6150 50 0000 L CNN
+F 1 "10uF" H 10300 5950 50 0000 L CNN
+F 2 "discret:C2V8" H 10250 6050 60 0001 C CNN
+F 3 "" H 10250 6050 60 0001 C CNN
+ 1 10250 6050
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR067
+U 1 1 4653065B
+P 13050 5650
+F 0 "#PWR067" H 13050 5610 30 0001 C CNN
+F 1 "+3.3V" H 13050 5760 40 0000 C CNN
+F 2 "" H 13050 5650 60 0001 C CNN
+F 3 "" H 13050 5650 60 0001 C CNN
+ 1 13050 5650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR068
+U 1 1 4653063A
+P 14100 5800
+F 0 "#PWR068" H 14100 5800 30 0001 C CNN
+F 1 "GND" H 14100 5730 30 0001 C CNN
+F 2 "" H 14100 5800 60 0001 C CNN
+F 3 "" H 14100 5800 60 0001 C CNN
+ 1 14100 5800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L LED LED5
+U 1 1 46530639
+P 13900 5800
+F 0 "LED5" H 13900 5900 50 0000 C CNN
+F 1 "LED" H 13900 5700 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 13900 5800 60 0001 C CNN
+F 3 "" H 13900 5800 60 0001 C CNN
+ 1 13900 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R53
+U 1 1 46530638
+P 13450 5800
+F 0 "R53" V 13530 5800 50 0000 C CNN
+F 1 "270" V 13450 5800 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 13450 5800 60 0001 C CNN
+F 3 "" H 13450 5800 60 0001 C CNN
+ 1 13450 5800
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR069
+U 1 1 46530616
+P 13050 6300
+F 0 "#PWR069" H 13050 6300 30 0001 C CNN
+F 1 "GND" H 13050 6230 30 0001 C CNN
+F 2 "" H 13050 6300 60 0001 C CNN
+F 3 "" H 13050 6300 60 0001 C CNN
+ 1 13050 6300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C40
+U 1 1 465305FE
+P 13050 6100
+F 0 "C40" H 13100 6200 50 0000 L CNN
+F 1 "220uF" H 13100 6000 50 0000 L CNN
+F 2 "discret:C2V8" H 13050 6100 60 0001 C CNN
+F 3 "" H 13050 6100 60 0001 C CNN
+ 1 13050 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR070
+U 1 1 46530574
+P 12100 6850
+F 0 "#PWR070" H 12100 6850 30 0001 C CNN
+F 1 "GND" H 12100 6780 30 0001 C CNN
+F 2 "" H 12100 6850 60 0001 C CNN
+F 3 "" H 12100 6850 60 0001 C CNN
+ 1 12100 6850
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR071
+U 1 1 4652DE09
+P 4800 10350
+F 0 "#PWR071" H 4800 10350 30 0001 C CNN
+F 1 "GND" H 4800 10280 30 0001 C CNN
+F 2 "" H 4800 10350 60 0001 C CNN
+F 3 "" H 4800 10350 60 0001 C CNN
+ 1 4800 10350
+ 1 0 0 -1
+$EndComp
+Text Label 3700 10300 0 60 ~ 0
+IRQ-5
+Text Label 3700 9900 0 60 ~ 0
+IRQ-4
+$Comp
+L SW_PUSH SW2
+U 1 1 4652DDE7
+P 4400 10300
+F 0 "SW2" H 4550 10410 50 0000 C CNN
+F 1 "SW_PUSH" H 4400 10220 50 0000 C CNN
+F 2 "discret:SW_PUSH_SMALL" H 4400 10300 60 0001 C CNN
+F 3 "" H 4400 10300 60 0001 C CNN
+ 1 4400 10300
+ 1 0 0 -1
+$EndComp
+$Comp
+L SW_PUSH SW1
+U 1 1 4652DDDF
+P 4400 9900
+F 0 "SW1" H 4550 10010 50 0000 C CNN
+F 1 "SW_PUSH" H 4400 9820 50 0000 C CNN
+F 2 "discret:SW_PUSH_SMALL" H 4400 9900 60 0001 C CNN
+F 3 "" H 4400 9900 60 0001 C CNN
+ 1 4400 9900
+ 1 0 0 -1
+$EndComp
+Text Label 10900 8900 0 60 ~ 0
+CANRX
+Text Label 12150 8800 0 60 ~ 0
+CANTX
+$Comp
+L CONN_2X2 CAN_EN1
+U 1 1 4652BFF1
+P 11700 8850
+F 0 "CAN_EN1" H 11700 9000 50 0000 C CNN
+F 1 "CONN_2X2" H 11710 8720 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X2" H 11700 8850 60 0001 C CNN
+F 3 "" H 11700 8850 60 0001 C CNN
+ 1 11700 8850
+ -1 0 0 -1
+$EndComp
+Text Label 7650 9050 0 60 ~ 0
+CANRX
+Text Label 7650 8950 0 60 ~ 0
+CANTX
+Text Label 7650 8850 0 60 ~ 0
+QSPI_CS0
+Text Label 7650 8750 0 60 ~ 0
+QSPI_SCLK
+$Comp
+L +3.3V #PWR072
+U 1 1 4652BF8D
+P 9800 8200
+F 0 "#PWR072" H 9800 8160 30 0001 C CNN
+F 1 "+3.3V" H 9800 8310 40 0000 C CNN
+F 2 "" H 9800 8200 60 0001 C CNN
+F 3 "" H 9800 8200 60 0001 C CNN
+ 1 9800 8200
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR073
+U 1 1 4652BF8C
+P 9600 8200
+F 0 "#PWR073" H 9600 8160 30 0001 C CNN
+F 1 "+3.3V" H 9600 8310 40 0000 C CNN
+F 2 "" H 9600 8200 60 0001 C CNN
+F 3 "" H 9600 8200 60 0001 C CNN
+ 1 9600 8200
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR074
+U 1 1 4652BF8B
+P 9400 8200
+F 0 "#PWR074" H 9400 8160 30 0001 C CNN
+F 1 "+3.3V" H 9400 8310 40 0000 C CNN
+F 2 "" H 9400 8200 60 0001 C CNN
+F 3 "" H 9400 8200 60 0001 C CNN
+ 1 9400 8200
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR075
+U 1 1 4652BF88
+P 9200 8200
+F 0 "#PWR075" H 9200 8160 30 0001 C CNN
+F 1 "+3.3V" H 9200 8310 40 0000 C CNN
+F 2 "" H 9200 8200 60 0001 C CNN
+F 3 "" H 9200 8200 60 0001 C CNN
+ 1 9200 8200
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R47
+U 1 1 4652BF65
+P 9800 8450
+F 0 "R47" V 9880 8450 50 0000 C CNN
+F 1 "4,7K" V 9800 8450 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 9800 8450 60 0001 C CNN
+F 3 "" H 9800 8450 60 0001 C CNN
+ 1 9800 8450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R48
+U 1 1 4652BF62
+P 9600 8450
+F 0 "R48" V 9680 8450 50 0000 C CNN
+F 1 "4,7K" V 9600 8450 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 9600 8450 60 0001 C CNN
+F 3 "" H 9600 8450 60 0001 C CNN
+ 1 9600 8450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R49
+U 1 1 4652BF5C
+P 9400 8450
+F 0 "R49" V 9480 8450 50 0000 C CNN
+F 1 "4,7K" V 9400 8450 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 9400 8450 60 0001 C CNN
+F 3 "" H 9400 8450 60 0001 C CNN
+ 1 9400 8450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R50
+U 1 1 4652BF48
+P 9200 8450
+F 0 "R50" V 9280 8450 50 0000 C CNN
+F 1 "4,7K" V 9200 8450 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 9200 8450 60 0001 C CNN
+F 3 "" H 9200 8450 60 0001 C CNN
+ 1 9200 8450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_4X2 PULUPEN1
+U 1 1 4652BF26
+P 8600 8900
+F 0 "PULUPEN1" H 8600 9150 50 0000 C CNN
+F 1 "CONN_4X2" V 8600 8900 40 0000 C CNN
+F 2 "pin_array:pin_array_4x2" H 8600 8900 60 0001 C CNN
+F 3 "" H 8600 8900 60 0001 C CNN
+ 1 8600 8900
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR076
+U 1 1 4652BC04
+P 3400 6950
+F 0 "#PWR076" H 3400 6910 30 0001 C CNN
+F 1 "+3.3V" H 3400 7060 40 0000 C CNN
+F 2 "" H 3400 6950 60 0001 C CNN
+F 3 "" H 3400 6950 60 0001 C CNN
+ 1 3400 6950
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR077
+U 1 1 4652BBFE
+P 2450 4300
+F 0 "#PWR077" H 2450 4260 30 0001 C CNN
+F 1 "+3.3V" H 2450 4410 40 0000 C CNN
+F 2 "" H 2450 4300 60 0001 C CNN
+F 3 "" H 2450 4300 60 0001 C CNN
+ 1 2450 4300
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR078
+U 1 1 4652BBF3
+P 2450 1600
+F 0 "#PWR078" H 2450 1560 30 0001 C CNN
+F 1 "+3.3V" H 2450 1710 40 0000 C CNN
+F 2 "" H 2450 1600 60 0001 C CNN
+F 3 "" H 2450 1600 60 0001 C CNN
+ 1 2450 1600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR079
+U 1 1 4652BB1A
+P 2250 8400
+F 0 "#PWR079" H 2250 8400 30 0001 C CNN
+F 1 "GND" H 2250 8330 30 0001 C CNN
+F 2 "" H 2250 8400 60 0001 C CNN
+F 3 "" H 2250 8400 60 0001 C CNN
+ 1 2250 8400
+ 1 0 0 -1
+$EndComp
+Text Label 1900 9200 0 60 ~ 0
+CAN_H
+$Comp
+L CONN_3 COM_SEL1
+U 1 1 4652BADD
+P 2350 8850
+F 0 "COM_SEL1" V 2500 8850 50 0000 C CNN
+F 1 "CONN_3" V 2400 8850 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_3X1" H 2350 8850 60 0001 C CNN
+F 3 "" H 2350 8850 60 0001 C CNN
+ 1 2350 8850
+ 0 -1 -1 0
+$EndComp
+$Comp
+L CONN_3 COM_SEL2
+U 1 1 4652BAD4
+P 2350 8000
+F 0 "COM_SEL2" V 2500 8000 50 0000 C CNN
+F 1 "CONN_3" V 2400 8000 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_3X1" H 2350 8000 60 0001 C CNN
+F 3 "" H 2350 8000 60 0001 C CNN
+ 1 2350 8000
+ 0 -1 -1 0
+$EndComp
+Text Label 1850 7250 0 60 ~ 0
+CAN_L
+$Comp
+L CONN_3 COM_SEL3
+U 1 1 4652BA65
+P 2350 6900
+F 0 "COM_SEL3" V 2500 6900 50 0000 C CNN
+F 1 "CONN_3" V 2400 6900 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_3X1" H 2350 6900 60 0001 C CNN
+F 3 "" H 2350 6900 60 0001 C CNN
+ 1 2350 6900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR080
+U 1 1 4652B9D6
+P 4800 3500
+F 0 "#PWR080" H 4800 3500 30 0001 C CNN
+F 1 "GND" H 4800 3430 30 0001 C CNN
+F 2 "" H 4800 3500 60 0001 C CNN
+F 3 "" H 4800 3500 60 0001 C CNN
+ 1 4800 3500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R30
+U 1 1 4652B9D5
+P 4500 3500
+F 0 "R30" V 4580 3500 50 0000 C CNN
+F 1 "10K" V 4500 3500 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 4500 3500 60 0001 C CNN
+F 3 "" H 4500 3500 60 0001 C CNN
+ 1 4500 3500
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR081
+U 1 1 4652B9CD
+P 4850 6100
+F 0 "#PWR081" H 4850 6100 30 0001 C CNN
+F 1 "GND" H 4850 6030 30 0001 C CNN
+F 2 "" H 4850 6100 60 0001 C CNN
+F 3 "" H 4850 6100 60 0001 C CNN
+ 1 4850 6100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R35
+U 1 1 4652B9CC
+P 4550 6100
+F 0 "R35" V 4630 6100 50 0000 C CNN
+F 1 "10K" V 4550 6100 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 4550 6100 60 0001 C CNN
+F 3 "" H 4550 6100 60 0001 C CNN
+ 1 4550 6100
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR082
+U 1 1 4652B9BF
+P 5800 8800
+F 0 "#PWR082" H 5800 8800 30 0001 C CNN
+F 1 "GND" H 5800 8730 30 0001 C CNN
+F 2 "" H 5800 8800 60 0001 C CNN
+F 3 "" H 5800 8800 60 0001 C CNN
+ 1 5800 8800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R23
+U 1 1 4652B5F4
+P 5500 8800
+F 0 "R23" V 5580 8800 50 0000 C CNN
+F 1 "10K" V 5500 8800 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5500 8800 60 0001 C CNN
+F 3 "" H 5500 8800 60 0001 C CNN
+ 1 5500 8800
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR083
+U 1 1 4652B4DE
+P 2650 7000
+F 0 "#PWR083" H 2650 7000 30 0001 C CNN
+F 1 "GND" H 2650 6930 30 0001 C CNN
+F 2 "" H 2650 7000 60 0001 C CNN
+F 3 "" H 2650 7000 60 0001 C CNN
+ 1 2650 7000
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR084
+U 1 1 4652B4DD
+P 3350 7700
+F 0 "#PWR084" H 3350 7700 30 0001 C CNN
+F 1 "GND" H 3350 7630 30 0001 C CNN
+F 2 "" H 3350 7700 60 0001 C CNN
+F 3 "" H 3350 7700 60 0001 C CNN
+ 1 3350 7700
+ 0 1 1 0
+$EndComp
+$Comp
+L C C45
+U 1 1 4652B4DC
+P 3300 8750
+F 0 "C45" H 3350 8850 50 0000 L CNN
+F 1 "100nF" H 3350 8650 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 3300 8750 60 0001 C CNN
+F 3 "" H 3300 8750 60 0001 C CNN
+ 1 3300 8750
+ 1 0 0 -1
+$EndComp
+Text Label 1600 7500 0 60 ~ 0
+CTS2/CANH
+Text Label 1600 7700 0 60 ~ 0
+RTS2
+Text Label 1600 7600 0 60 ~ 0
+RXD2
+Text Label 1600 7400 0 60 ~ 0
+TXD2/CANL
+NoConn ~ 1500 7900
+$Comp
+L GND #PWR085
+U 1 1 4652B4DB
+P 1550 8000
+F 0 "#PWR085" H 1550 8000 30 0001 C CNN
+F 1 "GND" H 1550 7930 30 0001 C CNN
+F 2 "" H 1550 8000 60 0001 C CNN
+F 3 "" H 1550 8000 60 0001 C CNN
+ 1 1550 8000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR086
+U 1 1 4652B4DA
+P 3300 9000
+F 0 "#PWR086" H 3300 9000 30 0001 C CNN
+F 1 "GND" H 3300 8930 30 0001 C CNN
+F 2 "" H 3300 9000 60 0001 C CNN
+F 3 "" H 3300 9000 60 0001 C CNN
+ 1 3300 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C46
+U 1 1 4652B4D9
+P 2900 7000
+F 0 "C46" V 2750 7000 50 0000 C CNN
+F 1 "100nF" V 3050 7000 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 2900 7000 60 0001 C CNN
+F 3 "" H 2900 7000 60 0001 C CNN
+ 1 2900 7000
+ 0 1 1 0
+$EndComp
+$Comp
+L C C36
+U 1 1 4652B4D8
+P 5200 7800
+F 0 "C36" H 5250 7900 50 0000 L CNN
+F 1 "100nF" H 5250 7700 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 5200 7800 60 0001 C CNN
+F 3 "" H 5200 7800 60 0001 C CNN
+ 1 5200 7800
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C44
+U 1 1 4652B4D7
+P 5200 7300
+F 0 "C44" H 5250 7400 50 0000 L CNN
+F 1 "100nF" H 5250 7200 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 5200 7300 60 0001 C CNN
+F 3 "" H 5200 7300 60 0001 C CNN
+ 1 5200 7300
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C35
+U 1 1 4652B4D6
+P 3200 7300
+F 0 "C35" H 3250 7400 50 0000 L CNN
+F 1 "100nF" H 3250 7200 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 3200 7300 60 0001 C CNN
+F 3 "" H 3200 7300 60 0001 C CNN
+ 1 3200 7300
+ 1 0 0 -1
+$EndComp
+Text Label 6300 8500 0 60 ~ 0
+UCTS2
+Text Label 6300 8400 0 60 ~ 0
+URTS2
+Text Label 6300 8300 0 60 ~ 0
+URXD2
+Text Label 6300 8200 0 60 ~ 0
+UTXD2
+$Comp
+L CONN_4X2 UART_EN2
+U 1 1 4652B4D5
+P 5850 8350
+F 0 "UART_EN2" H 5850 8600 50 0000 C CNN
+F 1 "CONN_4X2" V 5850 8350 40 0000 C CNN
+F 2 "pin_array:pin_array_4x2" H 5850 8350 60 0001 C CNN
+F 3 "" H 5850 8350 60 0001 C CNN
+ 1 5850 8350
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB9 UARTCAN2
+U 1 1 4652B4D4
+P 1050 7600
+F 0 "UARTCAN2" H 1050 8150 70 0000 C CNN
+F 1 "DB9" H 1050 7050 70 0000 C CNN
+F 2 "connect:DB9FC" H 1050 7600 60 0001 C CNN
+F 3 "" H 1050 7600 60 0001 C CNN
+ 1 1050 7600
+ -1 0 0 1
+$EndComp
+$Comp
+L MAX202 U8
+U 1 1 4652B4D3
+P 4200 7800
+F 0 "U8" H 4200 8650 70 0000 C CNN
+F 1 "MAX202" H 4200 6950 70 0000 C CNN
+F 2 "lib_smd:SO16E" H 4200 7800 60 0001 C CNN
+F 3 "" H 4200 7800 60 0001 C CNN
+ 1 4200 7800
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR087
+U 1 1 4652B4CC
+P 1750 4350
+F 0 "#PWR087" H 1750 4350 30 0001 C CNN
+F 1 "GND" H 1750 4280 30 0001 C CNN
+F 2 "" H 1750 4350 60 0001 C CNN
+F 3 "" H 1750 4350 60 0001 C CNN
+ 1 1750 4350
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR088
+U 1 1 4652B4CB
+P 2400 5050
+F 0 "#PWR088" H 2400 5050 30 0001 C CNN
+F 1 "GND" H 2400 4980 30 0001 C CNN
+F 2 "" H 2400 5050 60 0001 C CNN
+F 3 "" H 2400 5050 60 0001 C CNN
+ 1 2400 5050
+ 0 1 1 0
+$EndComp
+$Comp
+L C C33
+U 1 1 4652B4CA
+P 2350 6100
+F 0 "C33" H 2400 6200 50 0000 L CNN
+F 1 "100nF" H 2400 6000 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 2350 6100 60 0001 C CNN
+F 3 "" H 2350 6100 60 0001 C CNN
+ 1 2350 6100
+ 1 0 0 -1
+$EndComp
+Text Label 1650 4850 0 60 ~ 0
+CTS1
+Text Label 1650 5050 0 60 ~ 0
+RTS1
+Text Label 1650 4950 0 60 ~ 0
+RXD1
+Text Label 1650 4750 0 60 ~ 0
+TXD1
+NoConn ~ 1500 5250
+$Comp
+L GND #PWR089
+U 1 1 4652B4C9
+P 1550 5350
+F 0 "#PWR089" H 1550 5350 30 0001 C CNN
+F 1 "GND" H 1550 5280 30 0001 C CNN
+F 2 "" H 1550 5350 60 0001 C CNN
+F 3 "" H 1550 5350 60 0001 C CNN
+ 1 1550 5350
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR090
+U 1 1 4652B4C8
+P 2350 6350
+F 0 "#PWR090" H 2350 6350 30 0001 C CNN
+F 1 "GND" H 2350 6280 30 0001 C CNN
+F 2 "" H 2350 6350 60 0001 C CNN
+F 3 "" H 2350 6350 60 0001 C CNN
+ 1 2350 6350
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C28
+U 1 1 4652B4C7
+P 2000 4350
+F 0 "C28" V 1850 4350 50 0000 C CNN
+F 1 "100nF" V 2150 4350 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 2000 4350 60 0001 C CNN
+F 3 "" H 2000 4350 60 0001 C CNN
+ 1 2000 4350
+ 0 1 1 0
+$EndComp
+$Comp
+L C C32
+U 1 1 4652B4C6
+P 4200 5150
+F 0 "C32" H 4250 5250 50 0000 L CNN
+F 1 "100nF" H 4250 5050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 4200 5150 60 0001 C CNN
+F 3 "" H 4200 5150 60 0001 C CNN
+ 1 4200 5150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C31
+U 1 1 4652B4C5
+P 4200 4650
+F 0 "C31" H 4250 4750 50 0000 L CNN
+F 1 "100nF" H 4250 4550 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 4200 4650 60 0001 C CNN
+F 3 "" H 4200 4650 60 0001 C CNN
+ 1 4200 4650
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C30
+U 1 1 4652B4C4
+P 2300 4650
+F 0 "C30" H 2350 4750 50 0000 L CNN
+F 1 "100nF" H 2350 4550 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 2300 4650 60 0001 C CNN
+F 3 "" H 2300 4650 60 0001 C CNN
+ 1 2300 4650
+ 1 0 0 -1
+$EndComp
+Text Label 5350 5850 0 60 ~ 0
+UCTS1
+Text Label 5350 5750 0 60 ~ 0
+URTS1
+Text Label 5350 5650 0 60 ~ 0
+URXD1
+Text Label 5350 5550 0 60 ~ 0
+UTXD1
+$Comp
+L CONN_4X2 UART_EN1
+U 1 1 4652B4C3
+P 4900 5700
+F 0 "UART_EN1" H 4900 5950 50 0000 C CNN
+F 1 "CONN_4X2" V 4900 5700 40 0000 C CNN
+F 2 "pin_array:pin_array_4x2" H 4900 5700 60 0001 C CNN
+F 3 "" H 4900 5700 60 0001 C CNN
+ 1 4900 5700
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB9 UARTCAN1
+U 1 1 4652B4C2
+P 1050 4950
+F 0 "UARTCAN1" H 1050 5500 70 0000 C CNN
+F 1 "DB9" H 1050 4400 70 0000 C CNN
+F 2 "connect:DB9FC" H 1050 4950 60 0001 C CNN
+F 3 "" H 1050 4950 60 0001 C CNN
+ 1 1050 4950
+ -1 0 0 1
+$EndComp
+$Comp
+L MAX202 U5
+U 1 1 4652B4C1
+P 3250 5150
+F 0 "U5" H 3250 6000 70 0000 C CNN
+F 1 "MAX202" H 3250 4300 70 0000 C CNN
+F 2 "lib_smd:SO16E" H 3250 5150 60 0001 C CNN
+F 3 "" H 3250 5150 60 0001 C CNN
+ 1 3250 5150
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR091
+U 1 1 4652B4AA
+P 1750 1700
+F 0 "#PWR091" H 1750 1700 30 0001 C CNN
+F 1 "GND" H 1750 1630 30 0001 C CNN
+F 2 "" H 1750 1700 60 0001 C CNN
+F 3 "" H 1750 1700 60 0001 C CNN
+ 1 1750 1700
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR092
+U 1 1 4652B49A
+P 2400 2400
+F 0 "#PWR092" H 2400 2400 30 0001 C CNN
+F 1 "GND" H 2400 2330 30 0001 C CNN
+F 2 "" H 2400 2400 60 0001 C CNN
+F 3 "" H 2400 2400 60 0001 C CNN
+ 1 2400 2400
+ 0 1 1 0
+$EndComp
+$Comp
+L C C27
+U 1 1 4652B486
+P 2350 3450
+F 0 "C27" H 2400 3550 50 0000 L CNN
+F 1 "100nF" H 2400 3350 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 2350 3450 60 0001 C CNN
+F 3 "" H 2350 3450 60 0001 C CNN
+ 1 2350 3450
+ 1 0 0 -1
+$EndComp
+Text Label 1650 2200 0 60 ~ 0
+CTS0
+Text Label 1650 2400 0 60 ~ 0
+RTS0
+Text Label 1650 2300 0 60 ~ 0
+RXD0
+Text Label 1650 2100 0 60 ~ 0
+TXD0
+NoConn ~ 1500 2600
+$Comp
+L GND #PWR093
+U 1 1 4652B392
+P 1550 2700
+F 0 "#PWR093" H 1550 2700 30 0001 C CNN
+F 1 "GND" H 1550 2630 30 0001 C CNN
+F 2 "" H 1550 2700 60 0001 C CNN
+F 3 "" H 1550 2700 60 0001 C CNN
+ 1 1550 2700
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR094
+U 1 1 4652B389
+P 2350 3700
+F 0 "#PWR094" H 2350 3700 30 0001 C CNN
+F 1 "GND" H 2350 3630 30 0001 C CNN
+F 2 "" H 2350 3700 60 0001 C CNN
+F 3 "" H 2350 3700 60 0001 C CNN
+ 1 2350 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C22
+U 1 1 4652B365
+P 2000 1700
+F 0 "C22" V 1850 1700 50 0000 C CNN
+F 1 "100nF" V 2150 1700 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 2000 1700 60 0001 C CNN
+F 3 "" H 2000 1700 60 0001 C CNN
+ 1 2000 1700
+ 0 1 1 0
+$EndComp
+$Comp
+L C C25
+U 1 1 4652B35B
+P 4200 2500
+F 0 "C25" H 4250 2600 50 0000 L CNN
+F 1 "100nF" H 4250 2400 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 4200 2500 60 0001 C CNN
+F 3 "" H 4200 2500 60 0001 C CNN
+ 1 4200 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C24
+U 1 1 4652B354
+P 4200 2000
+F 0 "C24" H 4250 2100 50 0000 L CNN
+F 1 "100nF" H 4250 1900 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 4200 2000 60 0001 C CNN
+F 3 "" H 4200 2000 60 0001 C CNN
+ 1 4200 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C23
+U 1 1 4652B33B
+P 2300 2000
+F 0 "C23" H 2350 2100 50 0000 L CNN
+F 1 "100nF" H 2350 1900 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 2300 2000 60 0001 C CNN
+F 3 "" H 2300 2000 60 0001 C CNN
+ 1 2300 2000
+ 1 0 0 -1
+$EndComp
+Text Label 5300 3200 0 60 ~ 0
+UCTS0
+Text Label 5300 3100 0 60 ~ 0
+URTS0
+Text Label 5300 3000 0 60 ~ 0
+URXD0
+Text Label 5300 2900 0 60 ~ 0
+UTXD0
+$Comp
+L CONN_4X2 UART_EN0
+U 1 1 4652B289
+P 4850 3050
+F 0 "UART_EN0" H 4850 3300 50 0000 C CNN
+F 1 "CONN_4X2" V 4850 3050 40 0000 C CNN
+F 2 "pin_array:pin_array_4x2" H 4850 3050 60 0001 C CNN
+F 3 "" H 4850 3050 60 0001 C CNN
+ 1 4850 3050
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB9 UARTCAN0
+U 1 1 4652B26D
+P 1050 2300
+F 0 "UARTCAN0" H 1050 2850 70 0000 C CNN
+F 1 "DB9" H 1050 1750 70 0000 C CNN
+F 2 "connect:DB9FC" H 1050 2300 60 0001 C CNN
+F 3 "" H 1050 2300 60 0001 C CNN
+ 1 1050 2300
+ -1 0 0 1
+$EndComp
+$Comp
+L MAX202 U3
+U 1 1 4652B22B
+P 3250 2500
+F 0 "U3" H 3250 3350 70 0000 C CNN
+F 1 "MAX202" H 3250 1650 70 0000 C CNN
+F 2 "lib_smd:SO16E" H 3250 2500 60 0001 C CNN
+F 3 "" H 3250 2500 60 0001 C CNN
+ 1 3250 2500
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR095
+U 1 1 4652B1F0
+P 9250 3650
+F 0 "#PWR095" H 9250 3650 30 0001 C CNN
+F 1 "GND" H 9250 3580 30 0001 C CNN
+F 2 "" H 9250 3650 60 0001 C CNN
+F 3 "" H 9250 3650 60 0001 C CNN
+ 1 9250 3650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR096
+U 1 1 4652B1EE
+P 9250 3100
+F 0 "#PWR096" H 9250 3100 30 0001 C CNN
+F 1 "GND" H 9250 3030 30 0001 C CNN
+F 2 "" H 9250 3100 60 0001 C CNN
+F 3 "" H 9250 3100 60 0001 C CNN
+ 1 9250 3100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR097
+U 1 1 4652B1ED
+P 9250 2550
+F 0 "#PWR097" H 9250 2550 30 0001 C CNN
+F 1 "GND" H 9250 2480 30 0001 C CNN
+F 2 "" H 9250 2550 60 0001 C CNN
+F 3 "" H 9250 2550 60 0001 C CNN
+ 1 9250 2550
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR098
+U 1 1 4652B1E8
+P 9250 2000
+F 0 "#PWR098" H 9250 2000 30 0001 C CNN
+F 1 "GND" H 9250 1930 30 0001 C CNN
+F 2 "" H 9250 2000 60 0001 C CNN
+F 3 "" H 9250 2000 60 0001 C CNN
+ 1 9250 2000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR099
+U 1 1 4652B136
+P 6800 3950
+F 0 "#PWR099" H 6800 3950 30 0001 C CNN
+F 1 "GND" H 6800 3880 30 0001 C CNN
+F 2 "" H 6800 3950 60 0001 C CNN
+F 3 "" H 6800 3950 60 0001 C CNN
+ 1 6800 3950
+ 0 1 1 0
+$EndComp
+$Comp
+L +3.3V #PWR0100
+U 1 1 4652B12E
+P 7500 1350
+F 0 "#PWR0100" H 7500 1310 30 0001 C CNN
+F 1 "+3.3V" H 7500 1460 40 0000 C CNN
+F 2 "" H 7500 1350 60 0001 C CNN
+F 3 "" H 7500 1350 60 0001 C CNN
+ 1 7500 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R34
+U 1 1 4652B111
+P 7500 1650
+F 0 "R34" H 7350 1850 50 0000 C CNN
+F 1 "10K" V 7500 1650 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 7500 1650 60 0001 C CNN
+F 3 "" H 7500 1650 60 0001 C CNN
+ 1 7500 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER LED_EN1
+U 1 1 4652B108
+P 7100 3950
+F 0 "LED_EN1" H 7100 4100 60 0000 C CNN
+F 1 "JUMPER" H 7100 3870 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 7100 3950 60 0001 C CNN
+F 3 "" H 7100 3950 60 0001 C CNN
+ 1 7100 3950
+ 1 0 0 -1
+$EndComp
+Text Label 7050 3650 0 60 ~ 0
+DTIN3
+Text Label 7050 3100 0 60 ~ 0
+DTIN2
+Text Label 7050 2550 0 60 ~ 0
+DTIN1
+Text Label 7050 2000 0 60 ~ 0
+DTIN0
+$Comp
+L LED LED4
+U 1 1 4652B0BC
+P 9000 3650
+F 0 "LED4" H 9000 3750 50 0000 C CNN
+F 1 "LED" H 9000 3550 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 9000 3650 60 0001 C CNN
+F 3 "" H 9000 3650 60 0001 C CNN
+ 1 9000 3650
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED LED3
+U 1 1 4652B0BB
+P 9000 3100
+F 0 "LED3" H 9000 3200 50 0000 C CNN
+F 1 "LED" H 9000 3000 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 9000 3100 60 0001 C CNN
+F 3 "" H 9000 3100 60 0001 C CNN
+ 1 9000 3100
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED LED2
+U 1 1 4652B0B7
+P 9000 2550
+F 0 "LED2" H 9000 2650 50 0000 C CNN
+F 1 "LED" H 9000 2450 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 9000 2550 60 0001 C CNN
+F 3 "" H 9000 2550 60 0001 C CNN
+ 1 9000 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED LED1
+U 1 1 4652B0AE
+P 9000 2000
+F 0 "LED1" H 9000 2100 50 0000 C CNN
+F 1 "LED" H 9000 1900 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 9000 2000 60 0001 C CNN
+F 3 "" H 9000 2000 60 0001 C CNN
+ 1 9000 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R33
+U 1 1 4652B06A
+P 8550 3650
+F 0 "R33" V 8630 3650 50 0000 C CNN
+F 1 "270" V 8550 3650 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 8550 3650 60 0001 C CNN
+F 3 "" H 8550 3650 60 0001 C CNN
+ 1 8550 3650
+ 0 1 1 0
+$EndComp
+$Comp
+L R R32
+U 1 1 4652B069
+P 8550 3100
+F 0 "R32" V 8630 3100 50 0000 C CNN
+F 1 "270" V 8550 3100 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 8550 3100 60 0001 C CNN
+F 3 "" H 8550 3100 60 0001 C CNN
+ 1 8550 3100
+ 0 1 1 0
+$EndComp
+$Comp
+L R R31
+U 1 1 4652B067
+P 8550 2550
+F 0 "R31" V 8630 2550 50 0000 C CNN
+F 1 "270" V 8550 2550 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 8550 2550 60 0001 C CNN
+F 3 "" H 8550 2550 60 0001 C CNN
+ 1 8550 2550
+ 0 1 1 0
+$EndComp
+$Comp
+L R R28
+U 1 1 4652B061
+P 8550 2000
+F 0 "R28" V 8630 2000 50 0000 C CNN
+F 1 "270" V 8550 2000 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 8550 2000 60 0001 C CNN
+F 3 "" H 8550 2000 60 0001 C CNN
+ 1 8550 2000
+ 0 1 1 0
+$EndComp
+$Comp
+L 74LS125 U4
+U 3 1 4652B03E
+P 7850 3650
+F 0 "U4" H 7850 3750 50 0000 L BNN
+F 1 "74HC125" H 7900 3500 40 0000 L TNN
+F 2 "lib_smd:SO14E" H 7850 3650 60 0001 C CNN
+F 3 "" H 7850 3650 60 0001 C CNN
+ 3 7850 3650
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U4
+U 4 1 4652B035
+P 7850 3100
+F 0 "U4" H 7850 3200 50 0000 L BNN
+F 1 "74HC125" H 7900 2950 40 0000 L TNN
+F 2 "lib_smd:SO14E" H 7850 3100 60 0001 C CNN
+F 3 "" H 7850 3100 60 0001 C CNN
+ 4 7850 3100
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U4
+U 2 1 4652B02E
+P 7850 2550
+F 0 "U4" H 7850 2650 50 0000 L BNN
+F 1 "74HC125" H 7900 2400 40 0000 L TNN
+F 2 "lib_smd:SO14E" H 7850 2550 60 0001 C CNN
+F 3 "" H 7850 2550 60 0001 C CNN
+ 2 7850 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U4
+U 1 1 4652B019
+P 7850 2000
+F 0 "U4" H 7850 2100 50 0000 L BNN
+F 1 "74HC125" H 7900 1850 40 0000 L TNN
+F 2 "lib_smd:SO14E" H 7850 2000 60 0001 C CNN
+F 3 "" H 7850 2000 60 0001 C CNN
+ 1 7850 2000
+ 1 0 0 -1
+$EndComp
+Text HLabel 11450 1100 0 60 Input ~ 0
+QSPI_CS[0..3]
+Text HLabel 11450 1500 0 60 Input ~ 0
+AN[0..7]
+Text HLabel 11450 1400 0 60 Input ~ 0
+DTIN[0..3]
+Text HLabel 11450 1300 0 60 Input ~ 0
+IRQ-[0..7]
+Text HLabel 11450 1200 0 60 Input ~ 0
+GPT[0..3]
+Text HLabel 12250 4100 0 60 Input ~ 0
+RCON-
+Text HLabel 13900 3800 2 60 Input ~ 0
+UCTS2
+Text HLabel 13900 3700 2 60 Input ~ 0
+URTS2
+Text HLabel 13900 3600 2 60 Input ~ 0
+UCTS0
+Text HLabel 13900 3500 2 60 Input ~ 0
+URTS0
+Text Label 13550 3400 0 60 ~ 0
+DTIN3
+Text Label 13550 3300 0 60 ~ 0
+DTIN2
+Text Label 13550 3200 0 60 ~ 0
+DTIN1
+Text Label 13550 3100 0 60 ~ 0
+DTIN0
+$Comp
+L +3.3V #PWR0101
+U 1 1 4652A9F1
+P 11900 1150
+F 0 "#PWR0101" H 11900 1110 30 0001 C CNN
+F 1 "+3.3V" H 11900 1260 40 0000 C CNN
+F 2 "" H 11900 1150 60 0001 C CNN
+F 3 "" H 11900 1150 60 0001 C CNN
+ 1 11900 1150
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR0102
+U 1 1 4652A9EB
+P 13300 1200
+F 0 "#PWR0102" H 13300 1200 30 0001 C CNN
+F 1 "GND" H 13300 1130 30 0001 C CNN
+F 2 "" H 13300 1200 60 0001 C CNN
+F 3 "" H 13300 1200 60 0001 C CNN
+ 1 13300 1200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C43
+U 1 1 4652A9D3
+P 13050 1200
+F 0 "C43" V 12800 1200 50 0000 C CNN
+F 1 "100nF" V 12900 1200 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 13050 1200 60 0001 C CNN
+F 3 "" H 13050 1200 60 0001 C CNN
+ 1 13050 1200
+ 0 1 1 0
+$EndComp
+$Comp
+L JUMPER VX_EN1
+U 1 1 4652A9C4
+P 12300 1200
+F 0 "VX_EN1" H 12300 1350 60 0000 C CNN
+F 1 "JUMPER" H 12300 1120 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 12300 1200 60 0001 C CNN
+F 3 "" H 12300 1200 60 0001 C CNN
+ 1 12300 1200
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR0103
+U 1 1 4652A9B5
+P 12700 1600
+F 0 "#PWR0103" H 12700 1600 30 0001 C CNN
+F 1 "GND" H 12700 1530 30 0001 C CNN
+F 2 "" H 12700 1600 60 0001 C CNN
+F 3 "" H 12700 1600 60 0001 C CNN
+ 1 12700 1600
+ 0 1 1 0
+$EndComp
+Text Label 13600 4000 0 60 ~ 0
+GPT3
+Text Label 12300 4000 0 60 ~ 0
+GPT2
+Text Label 13600 3900 0 60 ~ 0
+GPT1
+Text Label 12300 3900 0 60 ~ 0
+GPT0
+Text HLabel 12250 3800 0 60 Input ~ 0
+URXD2
+Text HLabel 12250 3700 0 60 Input ~ 0
+UTXD2
+Text HLabel 12250 3600 0 60 Input ~ 0
+URXD0
+Text HLabel 12250 3500 0 60 Input ~ 0
+UTXD0
+Text Label 12300 3400 0 60 ~ 0
+IRQ-7
+Text Label 12300 3300 0 60 ~ 0
+IRQ-6
+Text Label 12300 3200 0 60 ~ 0
+IRQ-5
+Text Label 12300 3100 0 60 ~ 0
+IRQ-4
+Text Label 12300 3000 0 60 ~ 0
+IRQ-3
+Text Label 12150 2900 0 60 ~ 0
+QSPI_CS3
+Text Label 12150 2800 0 60 ~ 0
+QSPI_CS2
+Text Label 12150 2700 0 60 ~ 0
+QSPI_CS1
+Text Label 12150 2600 0 60 ~ 0
+QSPI_CS0
+Text HLabel 12250 2500 0 60 Input ~ 0
+QSPI_SCLK
+Text HLabel 12250 2400 0 60 Input ~ 0
+QSPI_DIN
+Text HLabel 12250 2300 0 60 Input ~ 0
+QSPI_DOUT
+Text HLabel 12250 2200 0 60 Input ~ 0
+PWM3
+Text HLabel 12250 2100 0 60 Input ~ 0
+PWM1
+Text HLabel 12250 2000 0 60 Input ~ 0
+UCTS1
+Text HLabel 12250 1900 0 60 Input ~ 0
+URTS1
+Text HLabel 12250 1800 0 60 Input ~ 0
+URXD1
+Text HLabel 12250 1700 0 60 Input ~ 0
+UTXD1
+Text HLabel 13900 3000 2 60 Input ~ 0
+PWM7
+Text HLabel 13900 2900 2 60 Input ~ 0
+PWM5
+$Comp
+L +3.3V #PWR0104
+U 1 1 4652A6B1
+P 12650 4400
+F 0 "#PWR0104" H 12650 4360 30 0001 C CNN
+F 1 "+3.3V" V 12650 4600 40 0000 C CNN
+F 2 "" H 12650 4400 60 0001 C CNN
+F 3 "" H 12650 4400 60 0001 C CNN
+ 1 12650 4400
+ 0 -1 -1 0
+$EndComp
+Text HLabel 13900 2800 2 60 Input ~ 0
+CANRX
+Text HLabel 13900 2700 2 60 Input ~ 0
+CANTX
+Text Label 13550 2600 0 60 ~ 0
+AN7
+Text Label 13550 2500 0 60 ~ 0
+AN6
+Text Label 13550 2400 0 60 ~ 0
+AN5
+Text Label 13550 2300 0 60 ~ 0
+AN4
+Text Label 13550 2200 0 60 ~ 0
+AN3
+Text Label 13550 2100 0 60 ~ 0
+AN2
+Text Label 13550 2000 0 60 ~ 0
+AN1
+Text Label 13550 1900 0 60 ~ 0
+AN0
+Text Label 13500 1800 0 60 ~ 0
+IRQ-2
+Text HLabel 13900 1700 2 60 Input ~ 0
+RSTI-
+Text HLabel 13900 1600 2 60 Input ~ 0
+RTS0-
+Text Label 13500 1500 0 60 ~ 0
+IRQ-1
+$Comp
+L CONN_30X2 MCU_PORT1
+U 1 1 4652A4FB
+P 13100 2950
+F 0 "MCU_PORT1" H 13100 1350 60 0000 C CNN
+F 1 "CONN_30X2" V 13100 2950 50 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_30X2" H 13100 2950 60 0001 C CNN
+F 3 "" H 13100 2950 60 0001 C CNN
+ 1 13100 2950
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 13550 4450 13550 4400
+Wire Wire Line
+ 13550 4400 13500 4400
+Wire Wire Line
+ 12800 7900 13200 7900
+Wire Wire Line
+ 13700 8200 13700 8300
+Wire Wire Line
+ 14800 8200 14850 8200
+Wire Wire Line
+ 10850 8800 11300 8800
+Wire Wire Line
+ 12100 8900 12600 8900
+Wire Wire Line
+ 10800 7800 11250 7800
+Wire Wire Line
+ 10700 8100 10700 7950
+Wire Wire Line
+ 10650 7950 11250 7950
+Wire Wire Line
+ 12300 8200 12300 8150
+Wire Wire Line
+ 12300 8150 12200 8150
+Wire Wire Line
+ 11150 7500 11250 7500
+Wire Wire Line
+ 12600 8000 12200 8000
+Wire Wire Line
+ 12600 7900 12200 7900
+Wire Wire Line
+ 9300 6650 9300 6600
+Wire Wire Line
+ 9300 6600 9200 6600
+Wire Wire Line
+ 9300 5550 9300 5750
+Wire Wire Line
+ 9300 5550 9200 5550
+Connection ~ 10250 5800
+Wire Wire Line
+ 10250 5800 10250 5850
+Wire Wire Line
+ 9700 5800 11300 5800
+Wire Wire Line
+ 12900 5800 13200 5800
+Wire Wire Line
+ 4800 9900 4800 10350
+Wire Wire Line
+ 4800 9900 4700 9900
+Wire Wire Line
+ 9000 9050 9800 9050
+Wire Wire Line
+ 9800 9050 9800 8700
+Wire Wire Line
+ 9000 8850 9400 8850
+Wire Wire Line
+ 9400 8850 9400 8700
+Wire Wire Line
+ 2450 9200 2800 9200
+Wire Wire Line
+ 2800 9200 2800 8400
+Wire Wire Line
+ 2350 8350 2350 8400
+Wire Wire Line
+ 2350 8400 2600 8400
+Wire Wire Line
+ 2600 8400 2600 7600
+Wire Wire Line
+ 2600 7600 1500 7600
+Wire Wire Line
+ 2250 9200 1850 9200
+Wire Wire Line
+ 2250 7250 1850 7250
+Wire Wire Line
+ 2350 7250 2350 7400
+Wire Wire Line
+ 2350 7400 1500 7400
+Connection ~ 4250 5650
+Wire Wire Line
+ 4300 6100 4250 6100
+Wire Wire Line
+ 4250 6100 4250 5650
+Wire Wire Line
+ 5450 8500 5400 8500
+Wire Wire Line
+ 5400 8500 5150 8400
+Wire Wire Line
+ 5150 8400 5000 8400
+Connection ~ 5250 8400
+Wire Wire Line
+ 5450 8400 5250 8400
+Wire Wire Line
+ 5250 8200 5250 8800
+Wire Wire Line
+ 5250 8200 5000 8200
+Wire Wire Line
+ 3300 8550 3300 8000
+Wire Wire Line
+ 3300 8000 3400 8000
+Connection ~ 1550 7300
+Wire Wire Line
+ 1500 7300 1550 7300
+Wire Wire Line
+ 5200 8000 5000 8000
+Wire Wire Line
+ 5200 7500 5000 7500
+Wire Wire Line
+ 3400 7500 3200 7500
+Wire Wire Line
+ 6600 8200 6250 8200
+Wire Wire Line
+ 6600 8300 6250 8300
+Wire Wire Line
+ 6600 8400 6250 8400
+Wire Wire Line
+ 6600 8500 6250 8500
+Wire Wire Line
+ 5200 7100 5000 7100
+Wire Wire Line
+ 5200 7600 5000 7600
+Wire Wire Line
+ 1500 7200 1550 7200
+Wire Wire Line
+ 1550 7200 1550 7800
+Wire Wire Line
+ 1550 7800 1500 7800
+Wire Wire Line
+ 3400 8300 2800 8300
+Wire Wire Line
+ 2900 8200 2900 7700
+Wire Wire Line
+ 2900 8200 3400 8200
+Wire Wire Line
+ 2800 8400 3400 8400
+Wire Wire Line
+ 2350 5900 2350 5350
+Wire Wire Line
+ 2350 5350 2450 5350
+Wire Wire Line
+ 2450 5850 2100 5850
+Wire Wire Line
+ 2100 5850 2100 4850
+Wire Wire Line
+ 2100 4850 1500 4850
+Connection ~ 1550 4650
+Wire Wire Line
+ 1500 4650 1550 4650
+Wire Wire Line
+ 4200 5350 4050 5350
+Wire Wire Line
+ 4200 4850 4050 4850
+Wire Wire Line
+ 2450 4850 2300 4850
+Wire Wire Line
+ 4500 5650 4400 5650
+Wire Wire Line
+ 4400 5650 4300 5750
+Wire Wire Line
+ 4300 5750 4050 5750
+Wire Wire Line
+ 4050 5850 4500 5850
+Wire Wire Line
+ 4050 5550 4500 5550
+Wire Wire Line
+ 4050 5650 4300 5650
+Wire Wire Line
+ 4500 5750 4400 5750
+Wire Wire Line
+ 4400 5750 4300 5650
+Wire Wire Line
+ 5650 5550 5300 5550
+Wire Wire Line
+ 5650 5650 5300 5650
+Wire Wire Line
+ 5650 5750 5300 5750
+Wire Wire Line
+ 5650 5850 5300 5850
+Wire Wire Line
+ 4200 4450 4050 4450
+Wire Wire Line
+ 4200 4950 4050 4950
+Wire Wire Line
+ 1500 4550 1550 4550
+Wire Wire Line
+ 1550 4550 1550 5150
+Wire Wire Line
+ 1550 5150 1500 5150
+Wire Wire Line
+ 1500 5050 2000 5050
+Wire Wire Line
+ 2000 5050 2000 5650
+Wire Wire Line
+ 2000 5650 2450 5650
+Wire Wire Line
+ 1500 4750 2200 4750
+Wire Wire Line
+ 2200 4750 2200 5550
+Wire Wire Line
+ 2200 5550 2450 5550
+Wire Wire Line
+ 1500 4950 1900 4950
+Wire Wire Line
+ 1900 4950 1900 5750
+Wire Wire Line
+ 1900 5750 2450 5750
+Wire Wire Line
+ 2350 3250 2350 2700
+Wire Wire Line
+ 2350 2700 2450 2700
+Wire Wire Line
+ 2450 3200 2100 3200
+Wire Wire Line
+ 2100 3200 2100 2200
+Wire Wire Line
+ 2100 2200 1500 2200
+Connection ~ 1550 2000
+Wire Wire Line
+ 1500 2000 1550 2000
+Wire Wire Line
+ 4200 2700 4050 2700
+Wire Wire Line
+ 4200 2200 4050 2200
+Wire Wire Line
+ 2450 2200 2300 2200
+Wire Wire Line
+ 4450 3000 4350 3000
+Wire Wire Line
+ 4350 3000 4250 3100
+Wire Wire Line
+ 4250 3100 4050 3100
+Wire Wire Line
+ 4050 3200 4450 3200
+Wire Wire Line
+ 4050 2900 4450 2900
+Connection ~ 7500 3400
+Wire Wire Line
+ 7500 3400 7850 3400
+Wire Wire Line
+ 7850 2300 7500 2300
+Connection ~ 12700 1200
+Wire Wire Line
+ 12700 1500 12700 1200
+Wire Wire Line
+ 12100 2900 12700 2900
+Wire Wire Line
+ 12100 2700 12700 2700
+Wire Wire Line
+ 12250 4100 12700 4100
+Wire Wire Line
+ 12250 4000 12700 4000
+Wire Wire Line
+ 12250 3900 12700 3900
+Wire Wire Line
+ 12250 3800 12700 3800
+Wire Wire Line
+ 12250 3700 12700 3700
+Wire Wire Line
+ 12250 3600 12700 3600
+Wire Wire Line
+ 12250 3500 12700 3500
+Wire Wire Line
+ 12250 3400 12700 3400
+Wire Wire Line
+ 12250 3300 12700 3300
+Wire Wire Line
+ 12250 3200 12700 3200
+Wire Wire Line
+ 12250 3100 12700 3100
+Wire Wire Line
+ 12250 3000 12700 3000
+Wire Wire Line
+ 12250 2500 12700 2500
+Wire Wire Line
+ 12250 2400 12700 2400
+Wire Wire Line
+ 12250 2300 12700 2300
+Wire Wire Line
+ 12250 2200 12700 2200
+Wire Wire Line
+ 12250 2100 12700 2100
+Wire Wire Line
+ 12250 2000 12700 2000
+Wire Wire Line
+ 12250 1900 12700 1900
+Wire Wire Line
+ 12250 1800 12700 1800
+Wire Wire Line
+ 12250 1700 12700 1700
+Wire Wire Line
+ 13900 2600 13500 2600
+Wire Wire Line
+ 13900 2500 13500 2500
+Wire Wire Line
+ 13900 2400 13500 2400
+Wire Wire Line
+ 13900 2300 13500 2300
+Wire Wire Line
+ 13900 2200 13500 2200
+Wire Wire Line
+ 13900 2100 13500 2100
+Wire Wire Line
+ 13900 2000 13500 2000
+Wire Wire Line
+ 13900 1900 13500 1900
+Wire Wire Line
+ 13900 1500 13500 1500
+Wire Wire Line
+ 13500 1600 13900 1600
+Wire Wire Line
+ 13500 1700 13900 1700
+Wire Wire Line
+ 13900 1800 13500 1800
+Wire Wire Line
+ 13500 2700 13900 2700
+Wire Wire Line
+ 13500 2800 13900 2800
+Wire Wire Line
+ 13900 2900 13500 2900
+Wire Wire Line
+ 13900 3000 13500 3000
+Wire Wire Line
+ 13900 3100 13500 3100
+Wire Wire Line
+ 13900 3200 13500 3200
+Wire Wire Line
+ 13900 3300 13500 3300
+Wire Wire Line
+ 13900 3400 13500 3400
+Wire Wire Line
+ 13900 3500 13500 3500
+Wire Wire Line
+ 13900 3600 13500 3600
+Wire Wire Line
+ 13900 3700 13500 3700
+Wire Wire Line
+ 13900 3800 13500 3800
+Wire Wire Line
+ 13900 3900 13500 3900
+Wire Wire Line
+ 13900 4000 13500 4000
+Wire Wire Line
+ 12100 2600 12700 2600
+Wire Wire Line
+ 12100 2800 12700 2800
+Wire Wire Line
+ 12600 1200 12850 1200
+Wire Wire Line
+ 7400 3950 7850 3950
+Connection ~ 7500 3950
+Wire Wire Line
+ 7500 2850 7850 2850
+Connection ~ 7500 2850
+Wire Wire Line
+ 7400 2000 7000 2000
+Wire Wire Line
+ 7400 2550 7000 2550
+Wire Wire Line
+ 7400 3100 7000 3100
+Wire Wire Line
+ 7400 3650 7000 3650
+Wire Wire Line
+ 7500 1900 7500 3950
+Wire Wire Line
+ 4050 3000 4250 3000
+Wire Wire Line
+ 4450 3100 4350 3100
+Wire Wire Line
+ 4350 3100 4250 3000
+Wire Wire Line
+ 5600 2900 5250 2900
+Wire Wire Line
+ 5600 3000 5250 3000
+Wire Wire Line
+ 5600 3100 5250 3100
+Wire Wire Line
+ 5600 3200 5250 3200
+Wire Wire Line
+ 4200 1800 4050 1800
+Wire Wire Line
+ 4200 2300 4050 2300
+Wire Wire Line
+ 1500 1900 1550 1900
+Wire Wire Line
+ 1550 1900 1550 2500
+Wire Wire Line
+ 1550 2500 1500 2500
+Wire Wire Line
+ 1500 2400 2000 2400
+Wire Wire Line
+ 2000 2400 2000 3000
+Wire Wire Line
+ 2000 3000 2450 3000
+Wire Wire Line
+ 1500 2100 2200 2100
+Wire Wire Line
+ 2200 2100 2200 2900
+Wire Wire Line
+ 2200 2900 2450 2900
+Wire Wire Line
+ 1500 2300 1900 2300
+Wire Wire Line
+ 1900 2300 1900 3100
+Wire Wire Line
+ 1900 3100 2450 3100
+Wire Wire Line
+ 5000 8300 5150 8300
+Wire Wire Line
+ 5450 8200 5350 8200
+Wire Wire Line
+ 5000 8500 5300 8500
+Wire Wire Line
+ 5300 8500 5300 8300
+Wire Wire Line
+ 5300 8300 5450 8300
+Wire Wire Line
+ 5350 8200 5150 8300
+Wire Wire Line
+ 4200 3000 4200 3500
+Wire Wire Line
+ 4200 3500 4250 3500
+Connection ~ 4200 3000
+Wire Wire Line
+ 2800 7350 2450 7350
+Wire Wire Line
+ 2800 8300 2800 7350
+Wire Wire Line
+ 2450 7350 2450 7250
+Wire Wire Line
+ 2450 8350 2450 8500
+Wire Wire Line
+ 2450 8500 3400 8500
+Wire Wire Line
+ 2900 7700 1500 7700
+Wire Wire Line
+ 2350 9200 2350 9350
+Wire Wire Line
+ 2350 9350 2700 9350
+Wire Wire Line
+ 2700 9350 2700 7500
+Wire Wire Line
+ 2700 7500 1500 7500
+Wire Wire Line
+ 9200 8700 9200 8750
+Wire Wire Line
+ 9200 8750 9000 8750
+Wire Wire Line
+ 9600 8700 9600 8950
+Wire Wire Line
+ 9600 8950 9000 8950
+Wire Wire Line
+ 8200 8750 7600 8750
+Wire Wire Line
+ 8200 8850 7600 8850
+Wire Wire Line
+ 8200 8950 7600 8950
+Wire Wire Line
+ 8200 9050 7600 9050
+Wire Wire Line
+ 12550 8800 12100 8800
+Wire Wire Line
+ 11300 8900 10850 8900
+Wire Wire Line
+ 3650 10300 4100 10300
+Wire Wire Line
+ 3650 9900 4100 9900
+Wire Wire Line
+ 4700 10300 4800 10300
+Connection ~ 4800 10300
+Wire Wire Line
+ 13050 5650 13050 5900
+Connection ~ 13050 5800
+Wire Wire Line
+ 9700 5800 9700 5850
+Wire Wire Line
+ 10650 5800 10650 5850
+Connection ~ 10650 5800
+Wire Wire Line
+ 9200 5650 9300 5650
+Connection ~ 9300 5650
+Wire Wire Line
+ 9400 6400 9200 6400
+Wire Wire Line
+ 10750 7500 10750 7550
+Wire Wire Line
+ 11250 7450 11250 7650
+Wire Wire Line
+ 12300 7650 12200 7650
+Wire Wire Line
+ 11250 8100 10800 8100
+Wire Wire Line
+ 14300 8200 14300 7900
+Wire Wire Line
+ 13200 7900 13200 8200
+Wire Wire Line
+ 14300 7900 14700 7900
+Wire Wire Line
+ 12900 5800 12900 6000
+Wire Wire Line
+ 12250 4200 12700 4200
+Wire Wire Line
+ 12250 4300 12700 4300
+Wire Wire Line
+ 13900 4300 13500 4300
+Wire Wire Line
+ 1750 1700 1800 1700
+Wire Wire Line
+ 2200 1700 2450 1700
+Wire Wire Line
+ 2450 1600 2450 1800
+Wire Wire Line
+ 2300 1800 2300 1700
+Connection ~ 2300 1700
+Connection ~ 2450 1700
+Wire Wire Line
+ 1750 4350 1800 4350
+Wire Wire Line
+ 2300 4450 2300 4350
+Wire Wire Line
+ 2200 4350 2450 4350
+Wire Wire Line
+ 2450 4300 2450 4450
+Connection ~ 2300 4350
+Connection ~ 2450 4350
+Wire Wire Line
+ 4750 3500 4800 3500
+Wire Wire Line
+ 4850 6100 4800 6100
+Wire Wire Line
+ 2400 5050 2450 5050
+Wire Wire Line
+ 2400 2400 2450 2400
+Wire Wire Line
+ 3400 6950 3400 7100
+Wire Wire Line
+ 3100 7000 3400 7000
+Wire Wire Line
+ 3200 7000 3200 7100
+Connection ~ 3400 7000
+Connection ~ 3200 7000
+Wire Wire Line
+ 2650 7000 2700 7000
+Wire Wire Line
+ 3350 7700 3400 7700
+Wire Wire Line
+ 2250 8400 2250 8350
+Wire Wire Line
+ 1550 8000 1500 8000
+Wire Wire Line
+ 1550 5350 1500 5350
+Wire Wire Line
+ 1550 2700 1500 2700
+Wire Wire Line
+ 6900 1350 6900 1400
+Wire Wire Line
+ 6900 1800 6900 1850
+Wire Wire Line
+ 7500 1350 7500 1400
+Connection ~ 7500 2300
+Wire Wire Line
+ 9250 2000 9200 2000
+Wire Wire Line
+ 9250 2550 9200 2550
+Wire Wire Line
+ 9250 3100 9200 3100
+Wire Wire Line
+ 9250 3650 9200 3650
+Wire Wire Line
+ 9200 5400 9500 5400
+Wire Wire Line
+ 9400 6400 9400 5400
+Connection ~ 9400 5400
+Wire Wire Line
+ 10600 5500 10500 5500
+Wire Wire Line
+ 11100 5500 11200 5500
+Wire Wire Line
+ 11200 5500 11200 5800
+Connection ~ 11200 5800
+Wire Wire Line
+ 10650 6300 10650 6250
+Wire Wire Line
+ 10250 6300 10250 6250
+Wire Wire Line
+ 9700 6300 9700 6250
+Connection ~ 11250 7500
+Connection ~ 10700 7950
+Wire Wire Line
+ 10700 8650 10700 8600
+Wire Wire Line
+ 12100 6800 12100 6850
+Wire Wire Line
+ 11900 1150 11900 1200
+Wire Wire Line
+ 11900 1200 12000 1200
+Wire Wire Line
+ 13300 1200 13250 1200
+Wire Wire Line
+ 13550 4200 13500 4200
+Wire Wire Line
+ 13550 4100 13500 4100
+Wire Wire Line
+ 12650 4400 12700 4400
+Wire Wire Line
+ 5800 8800 5750 8800
+Wire Wire Line
+ 2350 3650 2350 3700
+Wire Wire Line
+ 2350 6300 2350 6350
+Wire Wire Line
+ 3300 9000 3300 8950
+$EndSCHEMATC
diff --git a/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213-cache.lib b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213-cache.lib
new file mode 100644
index 0000000..1dcd3f6
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213-cache.lib
@@ -0,0 +1,1055 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +3.3V
+#
+DEF +3.3V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -40 30 H I C CNN
+F1 "+3.3V" 0 110 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS +3,3V
+DRAW
+X +3.3V 1 0 0 0 U 30 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# 74AHC1G14
+#
+DEF 74AHC1G14 U 0 30 Y Y 1 F N
+F0 "U" 145 115 40 H V C CNN
+F1 "74AHC1G14" 200 -100 40 H V C CNN
+F2 "" 95 -135 30 H V C CNN
+F3 "" 145 115 60 H V C CNN
+DRAW
+P 4 0 0 0 -150 150 -150 -150 150 0 -150 150 N
+X GND 3 -50 -200 100 U 40 20 0 0 W
+X VCC 5 -50 200 100 D 40 20 0 0 W
+X ~ 2 -450 0 300 R 60 60 1 1 I
+X ~ 4 450 0 300 L 60 60 1 1 O I
+X ~ 2 -450 0 300 R 60 60 1 2 I I
+X ~ 4 450 0 300 L 60 60 1 2 O
+ENDDRAW
+ENDDEF
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_13X2
+#
+DEF CONN_13X2 P 0 10 Y N 1 F N
+F0 "P" 0 700 60 H V C CNN
+F1 "CONN_13X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 650 100 -650 0 1 0 N
+X P1 1 -400 600 300 R 40 30 1 1 P I
+X P2 2 400 600 300 L 40 30 1 1 P I
+X P3 3 -400 500 300 R 40 30 1 1 P I
+X P4 4 400 500 300 L 40 30 1 1 P I
+X P5 5 -400 400 300 R 40 30 1 1 P I
+X P6 6 400 400 300 L 40 30 1 1 P I
+X P7 7 -400 300 300 R 40 30 1 1 P I
+X P8 8 400 300 300 L 40 30 1 1 P I
+X P9 9 -400 200 300 R 40 30 1 1 P I
+X P10 10 400 200 300 L 40 30 1 1 P I
+X P20 20 400 -300 300 L 40 30 1 1 P I
+X P11 11 -400 100 300 R 40 30 1 1 P I
+X P21 21 -400 -400 300 R 40 30 1 1 P I
+X P12 12 400 100 300 L 40 30 1 1 P I
+X P22 22 400 -400 300 L 40 30 1 1 P I
+X P13 13 -400 0 300 R 40 30 1 1 P I
+X P23 23 -400 -500 300 R 40 30 1 1 P I
+X P14 14 400 0 300 L 40 30 1 1 P I
+X P20 24 400 -500 300 L 40 30 1 1 P I
+X P15 15 -400 -100 300 R 40 30 1 1 P I
+X P24 25 -400 -600 300 R 40 30 1 1 P I
+X P16 16 400 -100 300 L 40 30 1 1 P I
+X P22 26 400 -600 300 L 40 30 1 1 P I
+X P17 17 -400 -200 300 R 40 30 1 1 P I
+X P18 18 400 -200 300 L 40 30 1 1 P I
+X P19 19 -400 -300 300 R 40 30 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_20X2
+#
+DEF CONN_20X2 P 0 10 Y N 1 F N
+F0 "P" 0 1050 60 H V C CNN
+F1 "CONN_20X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 1000 100 -1000 0 1 0 N
+X P1 1 -400 950 300 R 60 30 1 1 P I
+X P2 2 400 950 300 L 60 30 1 1 P I
+X P3 3 -400 850 300 R 60 30 1 1 P I
+X P4 4 400 850 300 L 60 30 1 1 P I
+X P5 5 -400 750 300 R 60 30 1 1 P I
+X P6 6 400 750 300 L 60 30 1 1 P I
+X P7 7 -400 650 300 R 60 30 1 1 P I
+X P8 8 400 650 300 L 60 30 1 1 P I
+X P9 9 -400 550 300 R 60 30 1 1 P I
+X P10 10 400 550 300 L 60 30 1 1 P I
+X P20 20 400 50 300 L 60 30 1 1 P I
+X P30 30 400 -450 300 L 60 30 1 1 P I
+X P40 40 400 -950 300 L 60 30 1 1 P I
+X P11 11 -400 450 300 R 60 30 1 1 P I
+X P21 21 -400 -50 300 R 60 30 1 1 P I
+X P31 31 -400 -550 300 R 60 30 1 1 P I
+X P12 12 400 450 300 L 60 30 1 1 P I
+X P22 22 400 -50 300 L 60 30 1 1 P I
+X P32 32 400 -550 300 L 60 30 1 1 P I
+X P13 13 -400 350 300 R 60 30 1 1 P I
+X P23 23 -400 -150 300 R 60 30 1 1 P I
+X P33 33 -400 -650 300 R 60 30 1 1 P I
+X P14 14 400 350 300 L 60 30 1 1 P I
+X P24 24 400 -150 300 L 60 30 1 1 P I
+X P34 34 400 -650 300 L 60 30 1 1 P I
+X P15 15 -400 250 300 R 60 30 1 1 P I
+X ~ 25 -400 -250 300 R 60 30 1 1 P I
+X P35 35 -400 -750 300 R 60 30 1 1 P I
+X P16 16 400 250 300 L 60 30 1 1 P I
+X P26 26 400 -250 300 L 60 30 1 1 P I
+X P36 36 400 -750 300 L 60 30 1 1 P I
+X P17 17 -400 150 300 R 60 30 1 1 P I
+X P27 27 -400 -350 300 R 60 30 1 1 P I
+X P37 37 -400 -850 300 R 60 30 1 1 P I
+X P18 18 400 150 300 L 60 30 1 1 P I
+X P28 28 400 -350 300 L 60 30 1 1 P I
+X P38 38 400 -850 300 L 60 30 1 1 P I
+X P19 19 -400 50 300 R 60 30 1 1 P I
+X P29 29 -400 -450 300 R 60 30 1 1 P I
+X P39 39 -400 -950 300 R 60 30 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_2X2
+#
+DEF CONN_2X2 P 0 40 Y N 1 F N
+F0 "P" 0 150 50 H V C CNN
+F1 "CONN_2X2" 10 -130 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 100 100 -100 0 1 0 N
+X 1 1 -400 50 300 R 60 60 1 1 P I
+X 2 2 400 50 300 L 60 60 1 1 P I
+X 3 3 -400 -50 300 R 60 60 1 1 P I
+X 4 4 400 -50 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_3
+#
+DEF CONN_3 K 0 40 Y N 1 F N
+F0 "K" -50 0 50 V V C CNN
+F1 "CONN_3" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 0 250 R 60 60 1 1 P I
+X P3 3 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_30X2
+#
+DEF CONN_30X2 P 0 10 Y N 1 F N
+F0 "P" 0 1550 60 H V C CNN
+F1 "CONN_30X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 1500 100 -1500 0 1 0 N
+X P1 1 -400 1450 300 R 60 30 1 1 P I
+X P2 2 400 1450 300 L 60 30 1 1 P I
+X P3 3 -400 1350 300 R 60 30 1 1 P I
+X P4 4 400 1350 300 L 60 30 1 1 P I
+X P5 5 -400 1250 300 R 60 30 1 1 P I
+X P6 6 400 1250 300 L 60 30 1 1 P I
+X P7 7 -400 1150 300 R 60 30 1 1 P I
+X P8 8 400 1150 300 L 60 30 1 1 P I
+X P9 9 -400 1050 300 R 60 30 1 1 P I
+X P10 10 400 1050 300 L 60 30 1 1 P I
+X P20 20 400 550 300 L 60 30 1 1 P I
+X P30 30 400 50 300 L 60 30 1 1 P I
+X P40 40 400 -450 300 L 60 30 1 1 P I
+X P50 50 400 -950 300 L 60 30 1 1 P I
+X P60 60 400 -1450 300 L 50 50 1 1 P I
+X P11 11 -400 950 300 R 60 30 1 1 P I
+X P21 21 -400 450 300 R 60 30 1 1 P I
+X P31 31 -400 -50 300 R 60 30 1 1 P I
+X P41 41 -400 -550 300 R 60 30 1 1 P I
+X P51 51 -400 -1050 300 R 50 50 1 1 P I
+X P12 12 400 950 300 L 60 30 1 1 P I
+X P22 22 400 450 300 L 60 30 1 1 P I
+X P32 32 400 -50 300 L 60 30 1 1 P I
+X P42 42 400 -550 300 L 60 30 1 1 P I
+X P52 52 400 -1050 300 L 50 50 1 1 P I
+X P13 13 -400 850 300 R 60 30 1 1 P I
+X P23 23 -400 350 300 R 60 30 1 1 P I
+X P23 23 -400 350 300 R 60 30 1 1 P I
+X P33 33 -400 -150 300 R 60 30 1 1 P I
+X P43 43 -400 -650 300 R 60 30 1 1 P I
+X P53 53 -400 -1150 300 R 50 50 1 1 P I
+X P14 14 400 850 300 L 60 30 1 1 P I
+X P24 24 400 350 300 L 60 30 1 1 P I
+X P34 34 400 -150 300 L 60 30 1 1 P I
+X P44 44 400 -650 300 L 60 30 1 1 P I
+X P54 54 400 -1150 300 L 50 50 1 1 P I
+X P15 15 -400 750 300 R 60 30 1 1 P I
+X ~ 25 -400 250 300 R 60 30 1 1 P I
+X P35 35 -400 -250 300 R 60 30 1 1 P I
+X P45 45 -400 -750 300 R 60 30 1 1 P I
+X P55 55 -400 -1250 300 R 50 50 1 1 P I
+X P16 16 400 750 300 L 60 30 1 1 P I
+X P26 26 400 250 300 L 60 30 1 1 P I
+X P36 36 400 -250 300 L 60 30 1 1 P I
+X P46 46 400 -750 300 L 60 30 1 1 P I
+X P56 56 400 -1250 300 L 50 50 1 1 P I
+X P17 17 -400 650 300 R 60 30 1 1 P I
+X P27 27 -400 150 300 R 60 30 1 1 P I
+X P37 37 -400 -350 300 R 60 30 1 1 P I
+X P47 47 -400 -850 300 R 60 30 1 1 P I
+X P57 57 -400 -1350 300 R 50 50 1 1 P I
+X P18 18 400 650 300 L 60 30 1 1 P I
+X P28 28 400 150 300 L 60 30 1 1 P I
+X P38 38 400 -350 300 L 60 30 1 1 P I
+X P48 48 400 -850 300 L 60 30 1 1 P I
+X P58 58 400 -1350 300 L 50 50 1 1 P I
+X P19 19 -400 550 300 R 60 30 1 1 P I
+X P29 29 -400 50 300 R 60 30 1 1 P I
+X P39 39 -400 -450 300 R 60 30 1 1 P I
+X P49 49 -400 -950 300 R 60 30 1 1 P I
+X P59 59 -400 -1450 300 R 50 50 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_4X2
+#
+DEF CONN_4X2 P 0 40 Y N 1 F N
+F0 "P" 0 250 50 H V C CNN
+F1 "CONN_4X2" 0 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 200 100 -200 0 1 0 N
+X 1 1 -400 150 300 R 60 60 1 1 P I
+X 2 2 400 150 300 L 60 60 1 1 P I
+X 3 3 -400 50 300 R 60 60 1 1 P I
+X 4 4 400 50 300 L 60 60 1 1 P I
+X 5 5 -400 -50 300 R 60 60 1 1 P I
+X 6 6 400 -50 300 L 60 60 1 1 P I
+X 7 7 -400 -150 300 R 60 60 1 1 P I
+X 8 8 400 -150 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_6
+#
+DEF CONN_6 P 0 30 Y N 1 F N
+F0 "P" -50 0 60 V V C CNN
+F1 "CONN_6" 50 0 60 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 300 100 -300 0 1 0 N
+X 1 1 -350 250 250 R 60 60 1 1 P I
+X 2 2 -350 150 250 R 60 60 1 1 P I
+X 3 3 -350 50 250 R 60 60 1 1 P I
+X 4 4 -350 -50 250 R 60 60 1 1 P I
+X 5 5 -350 -150 250 R 60 60 1 1 P I
+X 6 6 -350 -250 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# FUSE
+#
+DEF FUSE F 0 10 Y Y 1 F N
+F0 "F" 100 50 40 H V C CNN
+F1 "FUSE" -100 -50 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A -75 0 75 1 1799 0 1 0 N 0 0 -150 0
+A 75 0 75 -1799 -1 0 1 0 N 0 0 150 0
+X ~ 1 -250 0 100 R 40 40 1 1 I
+X ~ 2 250 0 100 L 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# GNDA
+#
+DEF GNDA #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 40 H I C CNN
+F1 "GNDA" 0 -70 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GNDA 1 0 0 0 U 40 40 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JACK_2P
+#
+DEF JACK_2P J 0 40 Y Y 1 F N
+F0 "J" -350 -200 60 H V C CNN
+F1 "JACK_2P" -150 250 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -450 150 -400 -100 0 1 0 F
+S 300 -150 -400 200 0 1 0 N
+P 3 0 1 0 150 0 300 0 300 0 N
+P 4 0 1 0 0 -100 -50 -50 -100 -100 -100 -100 N
+P 4 0 1 0 0 -100 300 -100 300 -100 300 -100 N
+P 4 0 1 0 50 -50 100 -100 150 -50 150 -50 N
+P 4 0 1 0 150 0 100 0 100 -100 100 -100 N
+P 5 0 1 0 300 150 -250 150 -300 100 -350 150 -350 150 N
+X ~ 1 450 -100 150 L 50 50 1 1 P
+X ~ 2 450 0 150 L 50 50 1 1 P
+X ~ 3 450 150 150 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JUMPER
+#
+DEF JUMPER JP 0 30 Y N 1 F N
+F0 "JP" 0 150 60 H V C CNN
+F1 "JUMPER" 0 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
+C -100 0 35 0 1 0 N
+C 100 0 35 0 1 0 N
+X 1 1 -300 0 165 R 60 60 0 1 P
+X 2 2 300 0 165 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LT1129_QPACK
+#
+DEF LT1129_QPACK U 0 30 Y Y 1 F N
+F0 "U" 250 450 60 H V C CNN
+F1 "LT1129_QPACK" 500 -495 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LT_1129_QP
+DRAW
+S -500 -400 500 400 0 1 0 N
+X OUT 1 800 300 300 L 60 60 1 1 w
+X SENSE 2 800 100 300 L 60 60 1 1 I
+X GND 3 0 -700 300 U 60 60 1 1 W
+X SHDN 4 -800 100 300 R 60 60 1 1 I I
+X IN 5 -800 300 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MAX232
+#
+DEF MAX232 U 0 40 Y Y 1 F N
+F0 "U" 0 850 70 H V C CNN
+F1 "MAX232" 0 -850 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS MAX202
+DRAW
+T 900 80 -530 40 0 0 0 RS232 Normal 0 C C
+T 900 -100 -530 40 0 0 0 TTL Normal 0 C C
+S -500 -800 500 800 0 1 0 N
+P 3 0 1 0 -500 -300 500 -300 500 -300 N
+P 3 0 1 0 0 -300 0 -800 0 -800 N
+X C1+ 1 -800 700 300 R 60 50 1 1 I
+X V+ 2 800 300 300 L 60 50 1 1 w
+X C1- 3 -800 300 300 R 60 50 1 1 I
+X C2+ 4 -800 200 300 R 60 50 1 1 I
+X C2- 5 -800 -200 300 R 60 50 1 1 I
+X V- 6 800 -200 300 L 60 50 1 1 w
+X T2OUT 7 800 -500 300 L 60 50 1 1 O
+X R2IN 8 800 -700 300 L 60 50 1 1 I
+X R2OUT 9 -800 -700 300 R 60 50 1 1 O
+X T2IN 10 -800 -500 300 R 60 50 1 1 I
+X T1IN 11 -800 -400 300 R 60 50 1 1 I
+X R1OUT 12 -800 -600 300 R 60 50 1 1 O
+X R1IN 13 800 -600 300 L 60 50 1 1 I
+X T1OUT 14 800 -400 300 L 60 50 1 1 O
+X GND 15 800 100 300 L 60 50 1 1 W
+X VCC 16 800 700 300 L 60 50 1 1 W
+ENDDRAW
+ENDDEF
+#
+# MC34064P
+#
+DEF MC34064P U 0 20 Y Y 1 F N
+F0 "U" 50 200 60 H V C CNN
+F1 "MC34064P" 300 -190 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS MC33064P
+DRAW
+S -200 -150 200 150 0 1 0 N
+X Rst 1 350 50 150 L 60 40 1 1 C
+X In 2 -350 50 150 R 60 40 1 1 I
+X Gbd 3 0 -300 150 U 60 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MCF5213-LQFP100
+#
+DEF MCF5213-LQFP100 U 0 40 Y Y 1 F N
+F0 "U" 1150 2700 60 H V L CNN
+F1 "MCF5213-LQFP100" 600 -2650 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -1700 2600 1700 -2600 0 1 0 N
+X VCC 1 -250 2850 250 D 30 30 1 1 W
+X VCC 2 -200 2850 250 D 30 30 1 1 W
+X GND 3 -250 -2850 250 U 30 30 1 1 W
+X ~URTS1~/SYNCB/UTXD2/PUB2 4 2000 -400 300 L 50 50 1 1 B
+X TEST 5 -2000 1450 300 R 50 50 1 1 I
+X ~UCTS0~/CANRX/PUA3 6 2000 -300 300 L 50 50 1 1 B
+X URXD0/PUA1 7 2000 400 300 L 50 50 1 1 B
+X UTXD0/PUA0 8 2000 500 300 L 50 50 1 1 B
+X ~URTS0~/CANTX/PUA2 9 2000 -200 300 L 50 50 1 1 B
+X SCL/CANTX/PAS0/UTXD2 10 2000 950 300 L 50 50 1 1 B
+X QSPI_CS0/SDA/CTS1/PQS3 20 2000 -1400 300 L 50 50 1 1 B
+X ~URTS2~/PUC2 30 2000 -600 300 L 50 50 1 1 B
+X CLKMOD0 40 -2000 1750 300 R 50 50 1 1 I
+X VCCA 50 -2000 -2350 300 R 50 50 1 1 I
+X PWM5/PTD2 60 2000 2300 300 L 50 60 1 1 B
+X PST3/PDD3 70 -2000 200 300 R 50 50 1 1 B
+X DSO/TDO 80 -2000 950 300 R 50 50 1 1 O
+X ~IRQ4~/PNQ4 90 -2000 -750 300 R 50 50 1 1 B
+X SDA/CANRX/PAS1/URXD2 11 2000 850 300 L 50 50 1 1 B
+X RCON/EZPCS 21 -2000 1550 300 R 50 50 1 1 I L
+X DTIN2/DTOUT2/PWM4/PTC2 31 2000 1400 300 L 50 50 1 1 B
+X VCC 41 50 2850 250 D 30 30 1 1 W
+X AN7/PAN7 51 -2000 -1950 300 R 50 50 1 1 B
+X GPT2PWM5//PTA2 61 2000 1850 300 L 50 50 1 1 B
+X GNDPLL 71 -2000 2400 300 R 50 50 1 1 P
+X VCC 81 200 2850 250 D 30 30 1 1 W
+X ~IRQ5~/PNQ5 91 -2000 -850 300 R 50 50 1 1 B
+X QSPI_CS3/SYNCA/SYNCB/PQS6 12 2000 -1700 300 L 50 50 1 1 B
+X VCC 22 -100 2850 250 D 30 30 1 1 W
+X DTIN3/DTOUT3/PWM6/PTC3 32 2000 1300 300 L 50 50 1 1 B
+X GND 42 0 -2850 250 U 30 30 1 1 W
+X AN6/PAN6 52 -2000 -1850 300 R 50 50 1 1 B
+X GPT3/PWM7/PTA3 62 2000 1750 300 L 50 50 1 1 B
+X XTAL 72 -2000 2150 300 R 50 50 1 1 O
+X GND 82 200 -2850 250 U 30 30 1 1 W
+X GND 92 250 -2850 250 U 30 30 1 1 W
+X QSPI_CS2/PQS5 13 2000 -1600 300 L 50 50 1 1 B
+X VCC 23 -50 2850 250 D 30 30 1 1 W
+X PWM3/PTD1 33 2000 2400 300 L 50 60 1 1 B
+X AN0/PAN0 43 -2000 -1250 300 R 50 50 1 1 B
+X AN5/PAN5 53 -2000 -1750 300 R 50 50 1 1 B
+X PWM7/PTD3 63 2000 2200 300 L 50 60 1 1 B
+X CLKIN/EXTAL 73 -2000 2250 300 R 50 50 1 1 I
+X DDATA2/PDD6 83 -2000 -100 300 R 50 50 1 1 B
+X VCC 93 250 2850 250 D 30 30 1 1 W
+X VCC 14 -150 2850 250 D 30 30 1 1 W
+X GND 24 -150 -2850 250 U 30 30 1 1 W
+X VCC 34 0 2850 250 D 30 30 1 1 W
+X AN1/PAN1 44 -2000 -1350 300 R 50 50 1 1 B
+X AN4/PAN4 54 -2000 -1650 300 R 50 50 1 1 B
+X TCLK/PSTCLK/CLKOUT 64 -2000 850 300 R 50 50 1 1 I
+X VCCPLL 74 -2000 2500 300 R 50 50 1 1 P
+X DDATA3/PDD7 84 -2000 -200 300 R 50 50 1 1 B
+X ~IRQ6~/PNQ6 94 -2000 -950 300 R 50 50 1 1 B
+X GND 15 -200 -2850 250 U 30 30 1 1 W
+X GND 25 -100 -2850 250 U 30 30 1 1 W
+X GND 35 -50 -2850 250 U 30 30 1 1 W
+X AN2/PAN2 45 -2000 -1450 300 R 50 50 1 1 B
+X VSTBY 55 350 2850 250 D 30 30 1 1 W
+X PST0/PDD0 65 -2000 500 300 R 50 50 1 1 B
+X GND 75 150 -2850 250 U 30 30 1 1 W
+X DSCLK/~TRST~ 85 -2000 1150 300 R 50 50 1 1 I
+X ~IRQ7~/PNQ7 95 -2000 -1050 300 R 50 50 1 1 B
+X QSPI_DIN/EZPD/CANRX/RXD1/PQS1 16 2000 -1200 300 L 50 50 1 1 B
+X JTAG_EN 26 -2000 1250 300 R 50 50 1 1 I
+X DTIN0/DTOUT0/PWM0/PTC0 36 2000 1600 300 L 50 50 1 1 B
+X AN3/PAN3 46 -2000 -1550 300 R 50 50 1 1 B
+X GND 56 50 -2850 250 U 30 30 1 1 W
+X PST1/PDD1 66 -2000 400 300 R 50 50 1 1 B
+X ~BKPT~/TMS 76 -2000 750 300 R 50 50 1 1 I
+X ALLPST 86 -2000 600 300 R 50 50 1 1 O
+X RSTI 96 -2000 1950 300 R 50 50 1 1 I L
+X QSPI_DOUT/EZPQ/CANTX/RXD0/PQS0 17 2000 -1100 300 L 50 50 1 1 B
+X ~UCTS2~/PUC3 27 2000 -700 300 L 50 50 1 1 B
+X DTIN1/DTOUT1/PWM2/PTC1 37 2000 1500 300 L 50 50 1 1 B
+X VSSA 47 -2000 -2450 300 R 50 50 1 1 I
+X VCC 57 100 2850 250 D 30 30 1 1 W
+X GND 67 100 -2850 250 U 30 30 1 1 W
+X DDATA0/PDD4 77 -2000 100 300 R 50 50 1 1 B
+X ~IRQ1~/PNQ1/SYNCA/PWM1 87 -2000 -450 300 R 50 50 1 1 B
+X RSTO 97 -2000 1850 300 R 50 50 1 1 O V
+X QSPI_CLK/EZPCK/SCL/RTS1/PQS2 18 2000 -1300 300 L 50 50 1 1 B
+X URXD2/PUC1 28 2000 0 300 L 50 50 1 1 B
+X PWM1/PTD0 38 2000 2500 300 L 50 60 1 1 B
+X VRL 48 -2000 -2200 300 R 50 50 1 1 I
+X GPT0/PWM1/PTA0 58 2000 2050 300 L 50 50 1 1 B
+X VCC 68 150 2850 250 D 30 30 1 1 W
+X DDATA1/PDD5 78 -2000 0 300 R 50 50 1 1 B
+X ~IRQ2~/PNQ2 88 -2000 -550 300 R 50 50 1 1 B
+X ~UCTS1~/SYNCA/URXD2/PUB3 98 2000 -500 300 L 50 50 1 1 B
+X QSPI_CS1/PQS4 19 2000 -1500 300 L 50 50 1 1 B
+X UTXD2/PUC0 29 2000 100 300 L 50 50 1 1 B
+X CLKMOD1 39 -2000 1650 300 R 50 50 1 1 I
+X VRH 49 -2000 -2100 300 R 50 50 1 1 I
+X GPT1/PWM3/PTA1 59 2000 1950 300 L 50 50 1 1 B
+X PST2/PDD2 69 -2000 300 300 R 50 50 1 1 B
+X DSI/TDI 79 -2000 1050 300 R 50 50 1 1 I
+X ~IRQ3~/PNQ3 89 -2000 -650 300 R 50 50 1 1 B
+X UTXD1/PUB0 99 2000 300 300 L 50 50 1 1 B
+X URXD1/PUB1 100 2000 200 300 L 50 50 1 1 B
+ENDDRAW
+ENDDEF
+#
+# PCA82C251
+#
+DEF PCA82C251 U 0 0 Y Y 1 F N
+F0 "U" 150 450 60 H V C CNN
+F1 "PCA82C251" 300 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 50 300 20 0 0 1 Volt Normal 1 C C
+S -200 400 200 -300 0 1 0 N
+P 2 0 1 0 -150 -150 -200 -150 N
+P 2 0 1 0 -150 150 -200 150 N
+P 2 0 1 0 100 -50 200 -50 N
+P 2 0 1 0 150 50 200 50 N
+P 2 0 1 0 150 300 200 300 N
+P 3 0 1 0 -200 0 -100 0 -70 90 N
+P 4 0 1 0 -150 -150 50 -50 50 -250 -150 -150 N
+P 4 0 1 0 -50 100 100 100 100 -100 50 -100 N
+P 4 0 1 0 -50 200 150 200 150 -200 50 -200 N
+P 5 0 1 0 -150 200 -150 50 50 150 -150 250 -150 200 N
+P 5 0 1 0 -50 350 -50 250 150 250 150 350 -50 350 N
+X TxD 1 -450 150 300 R 50 40 1 1 I
+X GND 2 500 -200 300 L 50 40 1 1 W
+X VCC 3 -450 300 250 R 50 40 1 1 W
+X RxD 4 -450 -150 300 R 50 40 1 1 O
+X Vref 5 500 300 300 L 50 40 1 1 O
+X CAN- 6 500 -50 300 L 50 40 1 1 B
+X CAN+ 7 500 50 300 L 50 40 1 1 B
+X Rsl 8 -450 0 300 R 50 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PNP
+#
+DEF PNP Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 60 H V R CNN
+F1 "PNP" 0 150 60 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SWITCH_INV
+#
+DEF SWITCH_INV SW 0 0 N Y 1 F N
+F0 "SW" -200 150 50 H V C CNN
+F1 "SWITCH_INV" -150 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C -150 0 50 0 0 0 N
+C 150 -100 50 0 0 0 N
+C 150 100 50 0 1 0 N
+P 2 0 1 0 -100 0 150 50 N
+X 1 1 500 100 300 L 60 60 1 1 P
+X 2 2 -500 0 300 R 60 60 1 1 P
+X 3 3 500 -100 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SW_PUSH
+#
+DEF SW_PUSH SW 0 40 N N 1 F N
+F0 "SW" 150 110 50 H V C CNN
+F1 "SW_PUSH" 0 -80 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -170 50 170 60 0 1 0 N
+P 4 0 1 0 -40 60 -30 90 30 90 40 60 N
+X 1 1 -300 0 200 R 60 60 0 1 P I
+X 2 2 300 0 200 L 60 60 0 1 P I
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VDD
+#
+DEF VDD #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VDD" 0 110 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VDD 1 0 0 0 U 40 40 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# XCR3256-TQ144
+#
+DEF XCR3256-TQ144 U 0 20 Y Y 1 F N
+F0 "U" 0 3500 70 H V C CNN
+F1 "XCR3256-TQ144" 0 -3600 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -650 3400 650 -3500 0 1 0 N
+X I1 1 950 -2900 300 L 50 50 1 1 P
+X I0 2 950 -3000 300 L 50 50 1 1 P
+X GND 3 -50 -3500 0 U 30 30 1 1 W N
+X J0/TDI 4 -950 3100 300 R 50 50 1 1 P
+X J2 5 950 -2200 300 L 50 50 1 1 P
+X J3 6 950 -2100 300 L 50 50 1 1 P
+X J4 7 950 -2000 300 L 50 50 1 1 P
+X J11 8 950 -1900 300 L 50 50 1 1 P
+X J13 9 950 -1800 300 L 50 50 1 1 P
+X J14 10 950 -1700 300 L 50 50 1 1 P
+X N0/TMS 20 -950 3000 300 R 50 50 1 1 P
+X P3 30 950 2700 300 L 50 50 1 1 P
+X O4 40 950 2100 300 L 50 50 1 1 P
+X VCC 50 50 3400 0 D 30 30 1 1 W N
+X F4 60 -950 -1900 300 R 50 50 1 1 P
+X H11 70 950 -3400 300 L 50 50 1 1 P
+X G2 80 -950 -2500 300 R 50 50 1 1 P
+X C14 90 -950 500 300 R 50 50 1 1 P
+X J15 11 950 -1600 300 L 50 50 1 1 P
+X N2 21 950 900 300 L 50 50 1 1 P
+X P4 31 950 2800 300 L 50 50 1 1 P
+X O3 41 950 2000 300 L 50 50 1 1 P
+X VCC 51 -450 3400 0 D 30 30 1 1 W N
+X F11 61 -950 -2000 300 R 50 50 1 1 P
+X H13 71 950 -3300 300 L 50 50 1 1 P
+X G0 81 -950 -2400 300 R 50 50 1 1 I
+X C13 91 -950 600 300 R 50 50 1 1 P
+X L2 12 950 -600 300 L 50 50 1 1 P
+X N3 22 950 1000 300 L 50 50 1 1 P
+X P11 32 950 2900 300 L 50 50 1 1 P
+X O2 42 950 1900 300 L 50 50 1 1 P
+X GND 52 -350 -3500 0 U 30 30 1 1 W N
+X F12 62 -950 -2100 300 R 50 50 1 1 P
+X H15 72 950 -3200 300 L 50 50 1 1 P
+X E14 82 -950 -1500 300 R 50 50 1 1 P
+X C11 92 -950 700 300 R 50 50 1 1 P
+X PORT_EN 13 -950 2900 300 R 50 50 1 1 P
+X N4 23 950 1100 300 L 50 50 1 1 P
+X GND 33 150 -3500 0 U 30 30 1 1 W N
+X O1 43 950 1800 300 L 50 50 1 1 P
+X M2 53 950 200 300 L 50 50 1 1 P
+X F13 63 -950 -2200 300 R 50 50 1 1 P
+X VCC 73 150 3400 0 D 30 30 1 1 W N
+X E13 83 -950 -1400 300 R 50 50 1 1 P
+X C4 93 -950 800 300 R 50 50 1 1 P
+X L3 14 950 -500 300 L 50 50 1 1 P
+X VCC 24 -50 3400 0 D 30 30 1 1 W N
+X P13 34 950 3000 300 L 50 50 1 1 P
+X O0 44 950 1700 300 L 50 50 1 1 P
+X M1 54 950 100 300 L 50 50 1 1 P
+X GND 64 350 -3500 0 U 30 30 1 1 W N
+X G14 74 -950 -3000 300 R 50 50 1 1 P
+X E11 84 -950 -1600 300 R 50 50 1 1 P
+X C3 94 -950 900 300 R 50 50 1 1 P
+X L4 15 950 -400 300 L 50 50 1 1 P
+X N11 25 950 1200 300 L 50 50 1 1 P
+X P14 35 950 3100 300 L 50 50 1 1 P
+X M15 45 950 700 300 L 50 50 1 1 P
+X F1 55 -950 -1700 300 R 50 50 1 1 P
+X F15 65 -950 -2300 300 R 50 50 1 1 P
+X G13 75 -950 -2900 300 R 50 50 1 1 P
+X GND 85 450 -3500 0 U 30 30 1 1 W N
+X VCC 95 350 3400 0 D 30 30 1 1 W N
+X L11 16 950 -300 300 L 50 50 1 1 P
+X N13 26 950 1300 300 L 50 50 1 1 P
+X P15 36 950 3200 300 L 50 50 1 1 P
+X M13 46 950 600 300 L 50 50 1 1 P
+X F2 56 -950 -1800 300 R 50 50 1 1 P
+X H0 66 -950 -3100 300 R 50 50 1 1 P
+X VCC 76 250 3400 0 D 30 30 1 1 W N
+X E4 86 -950 -1300 300 R 50 50 1 1 P
+X C2 96 -950 1000 300 R 50 50 1 1 P
+X GND 17 50 -3500 0 U 30 30 1 1 W N
+X N14 27 950 1400 300 L 50 50 1 1 P
+X O15 37 950 2400 300 L 50 50 1 1 P
+X M12 47 950 500 300 L 50 50 1 1 P
+X GND 57 -450 -3500 0 U 30 30 1 1 W N
+X H1 67 -950 -3200 300 R 50 50 1 1 P
+X G11 77 -950 -2800 300 R 50 50 1 1 P
+X E3 87 -950 -1200 300 R 50 50 1 1 P
+X C1 97 -950 1100 300 R 50 50 1 1 P
+X L13 18 950 -200 300 L 50 50 1 1 P
+X N15 28 950 1500 300 L 50 50 1 1 P
+X O13 38 950 2300 300 L 50 50 1 1 P
+X M11 48 950 400 300 L 50 50 1 1 P
+X VCC 58 -350 3400 0 D 30 30 1 1 W N
+X H2 68 -950 -3300 300 R 50 50 1 1 P
+X G4 78 -950 -2700 300 R 50 50 1 1 P
+X E2 88 -950 -1100 300 R 50 50 1 1 P
+X C0 98 -950 1200 300 R 50 50 1 1 P
+X L14 19 950 -100 300 L 50 50 1 1 P
+X P2 29 950 2600 300 L 50 50 1 1 P
+X O12 39 950 2200 300 L 50 50 1 1 P
+X M4 49 950 300 300 L 50 50 1 1 P
+X GND 59 250 -3500 0 U 30 30 1 1 W N
+X H3 69 -950 -3400 300 R 50 50 1 1 P
+X G3 79 -950 -2600 300 R 50 50 1 1 P
+X E0/TCK 89 -950 3200 300 R 50 50 1 1 P
+X A13 99 -950 2200 300 R 50 50 1 1 P
+X A12 100 -950 2300 300 R 50 50 1 1 P
+X B11 110 -950 1700 300 R 50 50 1 1 P
+X D12 120 -950 -700 300 R 50 50 1 1 P
+X VCC 130 -150 3400 0 D 30 30 1 1 W N
+X I14 140 950 -2500 300 L 50 50 1 1 P
+X A11 101 -950 2400 300 R 50 50 1 1 P
+X B12 111 -950 1600 300 R 50 50 1 1 P
+X D13 121 -950 -800 300 R 50 50 1 1 P
+X K15 131 950 -800 300 L 50 50 1 1 P
+X I13 141 950 -2600 300 L 50 50 1 1 P
+X A4 102 -950 2500 300 R 50 50 1 1 P
+X B14 112 -950 1500 300 R 50 50 1 1 P
+X D15 122 -950 -900 300 R 50 50 1 1 P
+X K14 132 950 -900 300 L 50 50 1 1 P
+X I12 142 950 -2700 300 L 50 50 1 1 P
+X A3 103 -950 2600 300 R 50 50 1 1 P
+X B15 113 -950 1400 300 R 50 50 1 1 P
+X VCC 123 -250 3400 0 D 30 30 1 1 W N
+X K13 133 950 -1000 300 L 50 50 1 1 P
+X I4 143 950 -2800 300 L 50 50 1 1 P
+X A2/TDO 104 -950 3300 300 R 50 50 1 1 P
+X D0 114 -950 -200 300 R 50 50 1 1 P
+X GND 124 -250 -3500 0 U 30 30 1 1 W N
+X K12 134 950 -1100 300 L 50 50 1 1 P
+X VCC 144 550 3400 0 D 30 30 1 1 W N
+X GND 105 550 -3500 0 U 30 30 1 1 W N
+X VCC 115 450 3400 0 D 30 30 1 1 W N
+X CLK3/IN3 125 -950 0 300 R 50 50 1 1 I
+X GND 135 -550 -3500 0 U 30 30 1 1 W N
+X A0 106 -950 2700 300 R 50 50 1 1 P
+X D1 116 -950 -300 300 R 50 50 1 1 P
+X CLK2/IN2 126 -950 100 300 R 50 50 1 1 I
+X K11 136 950 -1200 300 L 50 50 1 1 P
+X B0 107 -950 2000 300 R 50 50 1 1 P
+X D2 117 -950 -400 300 R 50 50 1 1 P
+X CLK1/IN1 127 -950 200 300 R 50 50 1 1 I
+X K4 137 950 -1300 300 L 50 50 1 1 P
+X B1 108 -950 1900 300 R 50 50 1 1 P
+X D4 118 -950 -500 300 R 50 50 1 1 P
+X CLK0/IN0 128 -950 300 300 R 50 50 1 1 I
+X K2 138 950 -1400 300 L 50 50 1 1 P
+X B4 109 -950 1800 300 R 50 50 1 1 P
+X D11 119 -950 -600 300 R 50 50 1 1 P
+X GND 129 -150 -3500 0 U 30 30 1 1 W N
+X I15 139 950 -2400 300 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb
new file mode 100644
index 0000000..4afc49b
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb
@@ -0,0 +1,15552 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-11-08 BZR 6303)-product")
+
+ (general
+ (links 534)
+ (no_connects 0)
+ (area 70.929499 55.689499 228.790501 147.510501)
+ (thickness 1.6)
+ (drawings 8)
+ (tracks 3535)
+ (zones 0)
+ (modules 162)
+ (nets 210)
+ )
+
+ (page A4)
+ (title_block
+ (title "Demo Kicad")
+ (date 2015-10-09)
+ (rev 2)
+ )
+
+ (layers
+ (0 Composant signal)
+ (1 GND_layer power)
+ (2 VDD_layer power)
+ (31 Cuivre signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ )
+
+ (setup
+ (last_trace_width 0.2)
+ (user_trace_width 0.4)
+ (trace_clearance 0.15)
+ (zone_clearance 0.5)
+ (zone_45_only yes)
+ (trace_min 0.19812)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 0.6)
+ (via_drill 0.4)
+ (via_min_size 0.5)
+ (via_min_drill 0.4)
+ (uvia_size 0.3)
+ (uvia_drill 0.1)
+ (uvias_allowed no)
+ (uvia_min_size 0.2)
+ (uvia_min_drill 0.1)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.1524)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 3.81 2.54)
+ (pad_drill 1.6)
+ (pad_to_mask_clearance 0.2)
+ (aux_axis_origin 65.151 148.4122)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x010fc_80000007)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (excludeedgelayer false)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin true)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory plots/))
+ )
+
+ (net 0 "")
+ (net 1 /ALLPST)
+ (net 2 /AN2)
+ (net 3 /AN3)
+ (net 4 /AN4)
+ (net 5 /AN6)
+ (net 6 /BKPT-)
+ (net 7 /CLKIN/EXTAL)
+ (net 8 /CLKMOD0)
+ (net 9 /CLKMOD1)
+ (net 10 /DDAT0)
+ (net 11 /DDAT1)
+ (net 12 /DDAT2)
+ (net 13 /DDAT3)
+ (net 14 /DSCLK)
+ (net 15 /DSI)
+ (net 16 /DSO)
+ (net 17 /DTIN1)
+ (net 18 /GPT1)
+ (net 19 /GPT3)
+ (net 20 /IRQ-5)
+ (net 21 /IRQ-6)
+ (net 22 /IRQ-7)
+ (net 23 /JTAG_EN)
+ (net 24 /PST0)
+ (net 25 /PST1)
+ (net 26 /PST2)
+ (net 27 /PST3)
+ (net 28 /QSPI_CS3)
+ (net 29 /TCLK)
+ (net 30 /VDDPLL)
+ (net 31 /inout_user/CANRX)
+ (net 32 /inout_user/CAN_H)
+ (net 33 /inout_user/CAN_L)
+ (net 34 /inout_user/CTS0)
+ (net 35 /inout_user/CTS1)
+ (net 36 /inout_user/CTS2/CANH)
+ (net 37 /inout_user/PWM5)
+ (net 38 /inout_user/PWM7)
+ (net 39 /inout_user/RTS0)
+ (net 40 /inout_user/RTS1)
+ (net 41 /inout_user/RTS2)
+ (net 42 /inout_user/RXD0)
+ (net 43 /inout_user/RXD1)
+ (net 44 /inout_user/RXD2)
+ (net 45 /inout_user/RxD_CAN)
+ (net 46 /inout_user/TXD0)
+ (net 47 /inout_user/TXD1)
+ (net 48 /inout_user/TXD2/CANL)
+ (net 49 /inout_user/TxD_CAN)
+ (net 50 /inout_user/UCTS2)
+ (net 51 /inout_user/URTS0)
+ (net 52 /inout_user/URTS2)
+ (net 53 /inout_user/URXD1)
+ (net 54 /inout_user/URXD2)
+ (net 55 /inout_user/UTXD0)
+ (net 56 /xilinx/+3,3V_OUT)
+ (net 57 /xilinx/GLCK2)
+ (net 58 /xilinx/LED_TEST1)
+ (net 59 /xilinx/LED_TEST2)
+ (net 60 /xilinx/QSPI_CS2)
+ (net 61 /xilinx/TCK)
+ (net 62 /xilinx/TDI)
+ (net 63 /xilinx/TDO)
+ (net 64 /xilinx/TMS)
+ (net 65 /xilinx/XIL_D0)
+ (net 66 /xilinx/XIL_D1)
+ (net 67 /xilinx/XIL_D10)
+ (net 68 /xilinx/XIL_D11)
+ (net 69 /xilinx/XIL_D12)
+ (net 70 /xilinx/XIL_D13)
+ (net 71 /xilinx/XIL_D14)
+ (net 72 /xilinx/XIL_D15)
+ (net 73 /xilinx/XIL_D16)
+ (net 74 /xilinx/XIL_D17)
+ (net 75 /xilinx/XIL_D18)
+ (net 76 /xilinx/XIL_D19)
+ (net 77 /xilinx/XIL_D2)
+ (net 78 /xilinx/XIL_D20)
+ (net 79 /xilinx/XIL_D21)
+ (net 80 /xilinx/XIL_D22)
+ (net 81 /xilinx/XIL_D23)
+ (net 82 /xilinx/XIL_D24)
+ (net 83 /xilinx/XIL_D25)
+ (net 84 /xilinx/XIL_D26)
+ (net 85 /xilinx/XIL_D27)
+ (net 86 /xilinx/XIL_D28)
+ (net 87 /xilinx/XIL_D29)
+ (net 88 /xilinx/XIL_D3)
+ (net 89 /xilinx/XIL_D30)
+ (net 90 /xilinx/XIL_D31)
+ (net 91 /xilinx/XIL_D32)
+ (net 92 /xilinx/XIL_D33)
+ (net 93 /xilinx/XIL_D34)
+ (net 94 /xilinx/XIL_D35)
+ (net 95 /xilinx/XIL_D36)
+ (net 96 /xilinx/XIL_D4)
+ (net 97 /xilinx/XIL_D5)
+ (net 98 /xilinx/XIL_D6)
+ (net 99 /xilinx/XIL_D7)
+ (net 100 /xilinx/XIL_D8)
+ (net 101 /xilinx/XIL_D9)
+ (net 102 GND)
+ (net 103 "Net-(ABRT_SW1-Pad1)")
+ (net 104 VDD)
+ (net 105 "Net-(BDM_PORT1-Pad6)")
+ (net 106 /inout_user/RSTI-)
+ (net 107 "Net-(BDM_PORT1-Pad26)")
+ (net 108 "Net-(C3-Pad1)")
+ (net 109 "Net-(C15-Pad1)")
+ (net 110 /inout_user/VCCA)
+ (net 111 GNDA)
+ (net 112 "Net-(C23-Pad2)")
+ (net 113 "Net-(C24-Pad1)")
+ (net 114 "Net-(C24-Pad2)")
+ (net 115 "Net-(C25-Pad1)")
+ (net 116 "Net-(C25-Pad2)")
+ (net 117 "Net-(C27-Pad1)")
+ (net 118 "Net-(C30-Pad2)")
+ (net 119 "Net-(C31-Pad1)")
+ (net 120 "Net-(C31-Pad2)")
+ (net 121 "Net-(C32-Pad1)")
+ (net 122 "Net-(C32-Pad2)")
+ (net 123 "Net-(C33-Pad1)")
+ (net 124 "Net-(C35-Pad2)")
+ (net 125 "Net-(C36-Pad1)")
+ (net 126 "Net-(C36-Pad2)")
+ (net 127 "Net-(C38-Pad1)")
+ (net 128 "Net-(C43-Pad2)")
+ (net 129 "Net-(C44-Pad1)")
+ (net 130 "Net-(C44-Pad2)")
+ (net 131 "Net-(C45-Pad1)")
+ (net 132 /inout_user/CANTX)
+ (net 133 "Net-(CAN_TERM1-Pad2)")
+ (net 134 "Net-(COM_SEL1-Pad3)")
+ (net 135 "Net-(COM_SEL2-Pad3)")
+ (net 136 "Net-(COM_SEL3-Pad3)")
+ (net 137 "Net-(D1-Pad2)")
+ (net 138 "Net-(D8-Pad1)")
+ (net 139 "Net-(D9-Pad1)")
+ (net 140 "Net-(F1-Pad1)")
+ (net 141 "Net-(J1-Pad3)")
+ (net 142 "Net-(L1-Pad1)")
+ (net 143 "Net-(LED1-Pad1)")
+ (net 144 "Net-(LED2-Pad1)")
+ (net 145 "Net-(LED3-Pad1)")
+ (net 146 "Net-(LED4-Pad1)")
+ (net 147 "Net-(LED5-Pad1)")
+ (net 148 "Net-(LEDABRT1-Pad2)")
+ (net 149 "Net-(LED_EN1-Pad2)")
+ (net 150 /xilinx/IRQ-1)
+ (net 151 /inout_user/UCTS1)
+ (net 152 /inout_user/RTS0-)
+ (net 153 /inout_user/PWM1)
+ (net 154 /inout_user/PWM3)
+ (net 155 /xilinx/IRQ-2)
+ (net 156 /inout_user/QSPI_DOUT)
+ (net 157 /AN0)
+ (net 158 /inout_user/QSPI_DIN)
+ (net 159 /AN1)
+ (net 160 /inout_user/QSPI_SCLK)
+ (net 161 /QSPI_CS0)
+ (net 162 /xilinx/QSPI_CS1)
+ (net 163 /AN5)
+ (net 164 /xilinx/IRQ-3)
+ (net 165 /AN7)
+ (net 166 /IRQ-4)
+ (net 167 /DTIN0)
+ (net 168 /DTIN2)
+ (net 169 /inout_user/UTXD1)
+ (net 170 /inout_user/URTS1)
+ (net 171 /DTIN3)
+ (net 172 /inout_user/URXD0)
+ (net 173 /inout_user/UCTS0)
+ (net 174 /inout_user/UTXD2)
+ (net 175 /GPT0)
+ (net 176 /GPT2)
+ (net 177 /inout_user/RCON-)
+ (net 178 "Net-(P3-Pad2)")
+ (net 179 "Net-(P3-Pad4)")
+ (net 180 "Net-(PULUPEN1-Pad2)")
+ (net 181 "Net-(PULUPEN1-Pad4)")
+ (net 182 "Net-(PULUPEN1-Pad6)")
+ (net 183 "Net-(PULUPEN1-Pad8)")
+ (net 184 "Net-(Q1-Pad2)")
+ (net 185 "Net-(Q1-Pad3)")
+ (net 186 "Net-(R9-Pad1)")
+ (net 187 "Net-(R22-Pad2)")
+ (net 188 "Net-(R23-Pad2)")
+ (net 189 "Net-(R28-Pad2)")
+ (net 190 "Net-(R30-Pad2)")
+ (net 191 "Net-(R31-Pad2)")
+ (net 192 "Net-(R32-Pad2)")
+ (net 193 "Net-(R33-Pad2)")
+ (net 194 "Net-(R35-Pad2)")
+ (net 195 "Net-(R36-Pad1)")
+ (net 196 "Net-(R46-Pad1)")
+ (net 197 "Net-(U3-Pad9)")
+ (net 198 "Net-(U3-Pad11)")
+ (net 199 "Net-(U3-Pad12)")
+ (net 200 "Net-(U5-Pad9)")
+ (net 201 "Net-(U5-Pad11)")
+ (net 202 "Net-(U5-Pad12)")
+ (net 203 "Net-(U7-Pad5)")
+ (net 204 "Net-(U8-Pad9)")
+ (net 205 "Net-(U8-Pad10)")
+ (net 206 "Net-(U8-Pad12)")
+ (net 207 "Net-(UARTCAN0-Pad1)")
+ (net 208 "Net-(UARTCAN1-Pad1)")
+ (net 209 "Net-(UARTCAN2-Pad1)")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.15)
+ (trace_width 0.2)
+ (via_dia 0.6)
+ (via_drill 0.4)
+ (uvia_dia 0.3)
+ (uvia_drill 0.1)
+ (add_net /ALLPST)
+ (add_net /AN0)
+ (add_net /AN1)
+ (add_net /AN2)
+ (add_net /AN3)
+ (add_net /AN4)
+ (add_net /AN5)
+ (add_net /AN6)
+ (add_net /AN7)
+ (add_net /BKPT-)
+ (add_net /CLKIN/EXTAL)
+ (add_net /CLKMOD0)
+ (add_net /CLKMOD1)
+ (add_net /DDAT0)
+ (add_net /DDAT1)
+ (add_net /DDAT2)
+ (add_net /DDAT3)
+ (add_net /DSCLK)
+ (add_net /DSI)
+ (add_net /DSO)
+ (add_net /DTIN0)
+ (add_net /DTIN1)
+ (add_net /DTIN2)
+ (add_net /DTIN3)
+ (add_net /GPT0)
+ (add_net /GPT1)
+ (add_net /GPT2)
+ (add_net /GPT3)
+ (add_net /IRQ-4)
+ (add_net /IRQ-5)
+ (add_net /IRQ-6)
+ (add_net /IRQ-7)
+ (add_net /JTAG_EN)
+ (add_net /PST0)
+ (add_net /PST1)
+ (add_net /PST2)
+ (add_net /PST3)
+ (add_net /QSPI_CS0)
+ (add_net /QSPI_CS3)
+ (add_net /TCLK)
+ (add_net /VDDPLL)
+ (add_net /inout_user/CANRX)
+ (add_net /inout_user/CANTX)
+ (add_net /inout_user/CAN_H)
+ (add_net /inout_user/CAN_L)
+ (add_net /inout_user/CTS0)
+ (add_net /inout_user/CTS1)
+ (add_net /inout_user/CTS2/CANH)
+ (add_net /inout_user/PWM1)
+ (add_net /inout_user/PWM3)
+ (add_net /inout_user/PWM5)
+ (add_net /inout_user/PWM7)
+ (add_net /inout_user/QSPI_DIN)
+ (add_net /inout_user/QSPI_DOUT)
+ (add_net /inout_user/QSPI_SCLK)
+ (add_net /inout_user/RCON-)
+ (add_net /inout_user/RSTI-)
+ (add_net /inout_user/RTS0)
+ (add_net /inout_user/RTS0-)
+ (add_net /inout_user/RTS1)
+ (add_net /inout_user/RTS2)
+ (add_net /inout_user/RXD0)
+ (add_net /inout_user/RXD1)
+ (add_net /inout_user/RXD2)
+ (add_net /inout_user/RxD_CAN)
+ (add_net /inout_user/TXD0)
+ (add_net /inout_user/TXD1)
+ (add_net /inout_user/TXD2/CANL)
+ (add_net /inout_user/TxD_CAN)
+ (add_net /inout_user/UCTS0)
+ (add_net /inout_user/UCTS1)
+ (add_net /inout_user/UCTS2)
+ (add_net /inout_user/URTS0)
+ (add_net /inout_user/URTS1)
+ (add_net /inout_user/URTS2)
+ (add_net /inout_user/URXD0)
+ (add_net /inout_user/URXD1)
+ (add_net /inout_user/URXD2)
+ (add_net /inout_user/UTXD0)
+ (add_net /inout_user/UTXD1)
+ (add_net /inout_user/UTXD2)
+ (add_net /inout_user/VCCA)
+ (add_net /xilinx/+3,3V_OUT)
+ (add_net /xilinx/GLCK2)
+ (add_net /xilinx/IRQ-1)
+ (add_net /xilinx/IRQ-2)
+ (add_net /xilinx/IRQ-3)
+ (add_net /xilinx/LED_TEST1)
+ (add_net /xilinx/LED_TEST2)
+ (add_net /xilinx/QSPI_CS1)
+ (add_net /xilinx/QSPI_CS2)
+ (add_net /xilinx/TCK)
+ (add_net /xilinx/TDI)
+ (add_net /xilinx/TDO)
+ (add_net /xilinx/TMS)
+ (add_net /xilinx/XIL_D0)
+ (add_net /xilinx/XIL_D1)
+ (add_net /xilinx/XIL_D10)
+ (add_net /xilinx/XIL_D11)
+ (add_net /xilinx/XIL_D12)
+ (add_net /xilinx/XIL_D13)
+ (add_net /xilinx/XIL_D14)
+ (add_net /xilinx/XIL_D15)
+ (add_net /xilinx/XIL_D16)
+ (add_net /xilinx/XIL_D17)
+ (add_net /xilinx/XIL_D18)
+ (add_net /xilinx/XIL_D19)
+ (add_net /xilinx/XIL_D2)
+ (add_net /xilinx/XIL_D20)
+ (add_net /xilinx/XIL_D21)
+ (add_net /xilinx/XIL_D22)
+ (add_net /xilinx/XIL_D23)
+ (add_net /xilinx/XIL_D24)
+ (add_net /xilinx/XIL_D25)
+ (add_net /xilinx/XIL_D26)
+ (add_net /xilinx/XIL_D27)
+ (add_net /xilinx/XIL_D28)
+ (add_net /xilinx/XIL_D29)
+ (add_net /xilinx/XIL_D3)
+ (add_net /xilinx/XIL_D30)
+ (add_net /xilinx/XIL_D31)
+ (add_net /xilinx/XIL_D32)
+ (add_net /xilinx/XIL_D33)
+ (add_net /xilinx/XIL_D34)
+ (add_net /xilinx/XIL_D35)
+ (add_net /xilinx/XIL_D36)
+ (add_net /xilinx/XIL_D4)
+ (add_net /xilinx/XIL_D5)
+ (add_net /xilinx/XIL_D6)
+ (add_net /xilinx/XIL_D7)
+ (add_net /xilinx/XIL_D8)
+ (add_net /xilinx/XIL_D9)
+ (add_net "Net-(ABRT_SW1-Pad1)")
+ (add_net "Net-(BDM_PORT1-Pad26)")
+ (add_net "Net-(BDM_PORT1-Pad6)")
+ (add_net "Net-(C15-Pad1)")
+ (add_net "Net-(C23-Pad2)")
+ (add_net "Net-(C24-Pad1)")
+ (add_net "Net-(C24-Pad2)")
+ (add_net "Net-(C25-Pad1)")
+ (add_net "Net-(C25-Pad2)")
+ (add_net "Net-(C27-Pad1)")
+ (add_net "Net-(C3-Pad1)")
+ (add_net "Net-(C30-Pad2)")
+ (add_net "Net-(C31-Pad1)")
+ (add_net "Net-(C31-Pad2)")
+ (add_net "Net-(C32-Pad1)")
+ (add_net "Net-(C32-Pad2)")
+ (add_net "Net-(C33-Pad1)")
+ (add_net "Net-(C35-Pad2)")
+ (add_net "Net-(C36-Pad1)")
+ (add_net "Net-(C36-Pad2)")
+ (add_net "Net-(C38-Pad1)")
+ (add_net "Net-(C43-Pad2)")
+ (add_net "Net-(C44-Pad1)")
+ (add_net "Net-(C44-Pad2)")
+ (add_net "Net-(C45-Pad1)")
+ (add_net "Net-(CAN_TERM1-Pad2)")
+ (add_net "Net-(COM_SEL1-Pad3)")
+ (add_net "Net-(COM_SEL2-Pad3)")
+ (add_net "Net-(COM_SEL3-Pad3)")
+ (add_net "Net-(D1-Pad2)")
+ (add_net "Net-(D8-Pad1)")
+ (add_net "Net-(D9-Pad1)")
+ (add_net "Net-(F1-Pad1)")
+ (add_net "Net-(J1-Pad3)")
+ (add_net "Net-(L1-Pad1)")
+ (add_net "Net-(LED1-Pad1)")
+ (add_net "Net-(LED2-Pad1)")
+ (add_net "Net-(LED3-Pad1)")
+ (add_net "Net-(LED4-Pad1)")
+ (add_net "Net-(LED5-Pad1)")
+ (add_net "Net-(LEDABRT1-Pad2)")
+ (add_net "Net-(LED_EN1-Pad2)")
+ (add_net "Net-(P3-Pad2)")
+ (add_net "Net-(P3-Pad4)")
+ (add_net "Net-(PULUPEN1-Pad2)")
+ (add_net "Net-(PULUPEN1-Pad4)")
+ (add_net "Net-(PULUPEN1-Pad6)")
+ (add_net "Net-(PULUPEN1-Pad8)")
+ (add_net "Net-(Q1-Pad2)")
+ (add_net "Net-(Q1-Pad3)")
+ (add_net "Net-(R22-Pad2)")
+ (add_net "Net-(R23-Pad2)")
+ (add_net "Net-(R28-Pad2)")
+ (add_net "Net-(R30-Pad2)")
+ (add_net "Net-(R31-Pad2)")
+ (add_net "Net-(R32-Pad2)")
+ (add_net "Net-(R33-Pad2)")
+ (add_net "Net-(R35-Pad2)")
+ (add_net "Net-(R36-Pad1)")
+ (add_net "Net-(R46-Pad1)")
+ (add_net "Net-(R9-Pad1)")
+ (add_net "Net-(U3-Pad11)")
+ (add_net "Net-(U3-Pad12)")
+ (add_net "Net-(U3-Pad9)")
+ (add_net "Net-(U5-Pad11)")
+ (add_net "Net-(U5-Pad12)")
+ (add_net "Net-(U5-Pad9)")
+ (add_net "Net-(U7-Pad5)")
+ (add_net "Net-(U8-Pad10)")
+ (add_net "Net-(U8-Pad12)")
+ (add_net "Net-(U8-Pad9)")
+ (add_net "Net-(UARTCAN0-Pad1)")
+ (add_net "Net-(UARTCAN1-Pad1)")
+ (add_net "Net-(UARTCAN2-Pad1)")
+ )
+
+ (net_class POWER ""
+ (clearance 0.15)
+ (trace_width 0.4)
+ (via_dia 0.8)
+ (via_drill 0.4)
+ (uvia_dia 0.3)
+ (uvia_drill 0.1)
+ (add_net GND)
+ (add_net GNDA)
+ (add_net VDD)
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC1F)
+ (at 152.019 102.489 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /46238965)
+ (fp_text reference ALLPST1 (at 0 -1.26746 270) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27 270) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0 270) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /ALLPST))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8DC24)
+ (at 113.792 93.345)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /461BAF4F)
+ (fp_text reference BDM_EN1 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /JTAG_EN))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_13x2 (layer Composant) (tedit 5031D825) (tstamp 53D8DC2D)
+ (at 77.597 121.539 270)
+ (descr "2 x 13 pins connector")
+ (tags CONN)
+ (path /461BAEE7)
+ (fp_text reference BDM_PORT1 (at -7.62 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_13X2 (at 7.62 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -16.51 2.54) (end 16.51 2.54) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 16.51 -2.54) (end -16.51 -2.54) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -16.51 -2.54) (end -16.51 2.54) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 16.51 2.54) (end 16.51 -2.54) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole rect (at -15.24 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at -15.24 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /BKPT-))
+ (pad 3 thru_hole circle (at -12.7 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 4 thru_hole circle (at -12.7 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /DSCLK))
+ (pad 5 thru_hole circle (at -10.16 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 6 thru_hole circle (at -10.16 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 105 "Net-(BDM_PORT1-Pad6)"))
+ (pad 7 thru_hole circle (at -7.62 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 106 /inout_user/RSTI-))
+ (pad 8 thru_hole circle (at -7.62 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /DSI))
+ (pad 9 thru_hole circle (at -5.08 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 10 thru_hole circle (at -5.08 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /DSO))
+ (pad 11 thru_hole circle (at -2.54 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 12 thru_hole circle (at -2.54 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /PST3))
+ (pad 13 thru_hole circle (at 0 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /PST2))
+ (pad 14 thru_hole circle (at 0 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /PST1))
+ (pad 15 thru_hole circle (at 2.54 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /PST0))
+ (pad 16 thru_hole circle (at 2.54 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /DDAT3))
+ (pad 17 thru_hole circle (at 5.08 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /DDAT2))
+ (pad 18 thru_hole circle (at 5.08 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /DDAT1))
+ (pad 19 thru_hole circle (at 7.62 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /DDAT0))
+ (pad 20 thru_hole circle (at 7.62 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 21 thru_hole circle (at 10.16 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole circle (at 10.16 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole circle (at 12.7 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 24 thru_hole circle (at 12.7 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /TCLK))
+ (pad 25 thru_hole circle (at 15.24 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 26 thru_hole circle (at 15.24 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 107 "Net-(BDM_PORT1-Pad26)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x13.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC4E)
+ (at 136.652 117.729 270)
+ (path /462389BC)
+ (attr smd)
+ (fp_text reference C1 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10pF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 7 /CLKIN/EXTAL))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC5A)
+ (at 136.652 123.063 90)
+ (path /462389C0)
+ (attr smd)
+ (fp_text reference C2 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10pF (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 57 /xilinx/GLCK2))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC66)
+ (at 164.846 94.361 90)
+ (path /46238468)
+ (attr smd)
+ (fp_text reference C3 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1nF (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 108 "Net-(C3-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC72)
+ (at 141.605 91.059 180)
+ (path /46161CB5)
+ (attr smd)
+ (fp_text reference C4 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC7E)
+ (at 134.493 91.44 180)
+ (path /46161CB8)
+ (attr smd)
+ (fp_text reference C5 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DC8A)
+ (at 129.921 91.44 180)
+ (path /461BB5E5)
+ (attr smd)
+ (fp_text reference C6 (at 0 0.3175 180) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 180) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DC96)
+ (at 125.349 99.822 270)
+ (path /46161CD3)
+ (attr smd)
+ (fp_text reference C7 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DCA2)
+ (at 124.587 103.505 180)
+ (path /46161CD4)
+ (attr smd)
+ (fp_text reference C8 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DCAE)
+ (at 131.953 112.268 180)
+ (path /46161CD7)
+ (attr smd)
+ (fp_text reference C9 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DCBA)
+ (at 137.541 111.633 180)
+ (path /46161CD8)
+ (attr smd)
+ (fp_text reference C10 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DCC6)
+ (at 145.288 104.775 90)
+ (path /46161CD9)
+ (attr smd)
+ (fp_text reference C11 (at 0 0.3175 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DCD2)
+ (at 145.415 99.314 270)
+ (path /46161CDA)
+ (attr smd)
+ (fp_text reference C12 (at 0 0.3175 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DCDE)
+ (at 160.401 105.537)
+ (path /46237DF9)
+ (attr smd)
+ (fp_text reference C14 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DCEA)
+ (at 160.401 111.252 180)
+ (path /46237E36)
+ (attr smd)
+ (fp_text reference C15 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 109 "Net-(C15-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DCF6)
+ (at 120.777 106.045 90)
+ (path /462382CE)
+ (attr smd)
+ (fp_text reference C16 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 10uF (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 110 /inout_user/VCCA))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 111 GNDA))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD04)
+ (at 150.241 120.015)
+ (path /46161D3C)
+ (attr smd)
+ (fp_text reference C17 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 100uF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD12)
+ (at 123.825 108.712)
+ (path /46238286)
+ (attr smd)
+ (fp_text reference C18 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 110 /inout_user/VCCA))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 111 GNDA))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD1E)
+ (at 141.732 112.395 270)
+ (path /461BE364)
+ (attr smd)
+ (fp_text reference C20 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 30 /VDDPLL))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD2A)
+ (at 143.51 112.649 270)
+ (path /461BE35C)
+ (attr smd)
+ (fp_text reference C21 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 30 /VDDPLL))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD36)
+ (at 192.532 74.168 270)
+ (path /47D80202/4652B365)
+ (attr smd)
+ (fp_text reference C22 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD42)
+ (at 189.23 71.247 180)
+ (path /47D80202/4652B33B)
+ (attr smd)
+ (fp_text reference C23 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 112 "Net-(C23-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD4E)
+ (at 181.102 73.914 270)
+ (path /47D80202/4652B354)
+ (attr smd)
+ (fp_text reference C24 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 113 "Net-(C24-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 114 "Net-(C24-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD5A)
+ (at 181.102 78.232 270)
+ (path /47D80202/4652B35B)
+ (attr smd)
+ (fp_text reference C25 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 115 "Net-(C25-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 116 "Net-(C25-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD66)
+ (at 102.616 111.252)
+ (path /47D80202/46546CA6)
+ (attr smd)
+ (fp_text reference C26 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD72)
+ (at 178.562 78.105 90)
+ (path /47D80202/4652B486)
+ (attr smd)
+ (fp_text reference C27 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 117 "Net-(C27-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD7E)
+ (at 164.592 74.168 270)
+ (path /47D80202/4652B4C7)
+ (attr smd)
+ (fp_text reference C28 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD8A)
+ (at 161.29 71.247 180)
+ (path /47D80202/4652B4C4)
+ (attr smd)
+ (fp_text reference C30 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 118 "Net-(C30-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DD96)
+ (at 153.162 73.787 270)
+ (path /47D80202/4652B4C5)
+ (attr smd)
+ (fp_text reference C31 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 119 "Net-(C31-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 120 "Net-(C31-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDA2)
+ (at 153.035 78.105 270)
+ (path /47D80202/4652B4C6)
+ (attr smd)
+ (fp_text reference C32 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 121 "Net-(C32-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 122 "Net-(C32-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDAE)
+ (at 150.876 78.105 90)
+ (path /47D80202/4652B4CA)
+ (attr smd)
+ (fp_text reference C33 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 123 "Net-(C33-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDBA)
+ (at 108.458 84.328)
+ (path /47D80202/4653FFFE)
+ (attr smd)
+ (fp_text reference C34 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDC6)
+ (at 128.27 71.247 180)
+ (path /47D80202/4652B4D6)
+ (attr smd)
+ (fp_text reference C35 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 124 "Net-(C35-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDD2)
+ (at 120.142 78.105 270)
+ (path /47D80202/4652B4D8)
+ (attr smd)
+ (fp_text reference C36 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 125 "Net-(C36-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 126 "Net-(C36-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2V8 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDDE)
+ (at 88.9 85.09 90)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /47D80202/465306B1)
+ (fp_text reference C38 (at 0 2.54 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 10uF (at 0 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end -4.445 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 127 "Net-(C38-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model Discret.3dshapes/C2V10.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C2V8 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDE4)
+ (at 88.9 97.79 90)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /47D80202/465305FE)
+ (fp_text reference C40 (at 0 2.54 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 220uF (at 0 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end -4.445 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model Discret.3dshapes/C2V10.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDEA)
+ (at 104.267 73.152 90)
+ (path /47D80202/465306F6)
+ (attr smd)
+ (fp_text reference C41 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 127 "Net-(C38-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DDF6)
+ (at 183.769 125.73)
+ (path /47D80202/4652A9D3)
+ (attr smd)
+ (fp_text reference C43 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 128 "Net-(C43-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DE02)
+ (at 120.142 73.787 270)
+ (path /47D80202/4652B4D7)
+ (attr smd)
+ (fp_text reference C44 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 129 "Net-(C44-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 130 "Net-(C44-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DE0E)
+ (at 117.602 78.105 90)
+ (path /47D80202/4652B4DC)
+ (attr smd)
+ (fp_text reference C45 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 131 "Net-(C45-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DE1A)
+ (at 130.937 74.549 270)
+ (path /47D80202/4652B4D9)
+ (attr smd)
+ (fp_text reference C46 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 100nF (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE26)
+ (at 209.296 100.838 90)
+ (path /47D80204/46A76BB2)
+ (attr smd)
+ (fp_text reference C51 (at 0 0.3175 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE32)
+ (at 191.008 107.315 180)
+ (path /47D80204/46A76BB3)
+ (attr smd)
+ (fp_text reference C52 (at 0 0.3175 180) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 180) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE3E)
+ (at 203.454 100.838 90)
+ (path /47D80204/46A76BB4)
+ (attr smd)
+ (fp_text reference C53 (at 0 0.3175 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE4A)
+ (at 208.28 110.49 270)
+ (path /47D80204/46A76BB5)
+ (attr smd)
+ (fp_text reference C54 (at 0 0.3175 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE56)
+ (at 201.422 123.444 270)
+ (path /47D80204/46A76BAE)
+ (attr smd)
+ (fp_text reference C55 (at 0 0.3175 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE62)
+ (at 208.28 119.38 270)
+ (path /47D80204/46A76BAF)
+ (attr smd)
+ (fp_text reference C56 (at 0 0.3175 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE6E)
+ (at 190.5 99.06 90)
+ (path /47D80204/46A76BB0)
+ (attr smd)
+ (fp_text reference C57 (at 0 0.3175 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE7A)
+ (at 199.009 100.838 90)
+ (path /47D80204/46A76BB1)
+ (attr smd)
+ (fp_text reference C58 (at 0 0.3175 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 90) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE86)
+ (at 205.359 123.444 270)
+ (path /47D80204/46A76BBA)
+ (attr smd)
+ (fp_text reference C59 (at 0 0.3175 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE92)
+ (at 197.485 123.444 270)
+ (path /47D80204/46A76BBB)
+ (attr smd)
+ (fp_text reference C60 (at 0 0.3175 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 270) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Cuivre) (tedit 53D8D2B1) (tstamp 53D8DE9E)
+ (at 191.008 115.189 180)
+ (path /47D80204/46A76BBC)
+ (attr smd)
+ (fp_text reference C61 (at 0 0.3175 180) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -0.381 180) (layer B.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)) (justify mirror))
+ )
+ (fp_circle (center -1.651 -0.762) (end -1.651 -0.635) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -0.508 -0.762) (end -1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -0.508 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 0.508 0.762) (end 1.524 0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 1.524 -0.762) (layer B.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 0.508 -0.762) (layer B.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Cuivre B.Paste B.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X2 (layer Composant) (tedit 3FAB87D4) (tstamp 53D8DEAA)
+ (at 113.03 87.757 270)
+ (descr "Double rangee de contacts 2 x 2 pins")
+ (tags CONN)
+ (path /47D80202/4652BFF1)
+ (fp_text reference CAN_EN1 (at -0.381 -3.429 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_2X2 (at 0 3.048 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -2.54 -2.54) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 2.54) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 132 /inout_user/CANTX))
+ (pad 2 thru_hole circle (at -1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 45 /inout_user/RxD_CAN))
+ (pad 3 thru_hole circle (at 1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 49 /inout_user/TxD_CAN))
+ (pad 4 thru_hole circle (at 1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /inout_user/CANRX))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8DEB5)
+ (at 97.79 94.488 90)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /47D80202/46540159)
+ (fp_text reference CAN_TERM1 (at 0 -1.905 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /inout_user/CAN_H))
+ (pad 2 thru_hole circle (at 1.27 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 133 "Net-(CAN_TERM1-Pad2)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8DEBE)
+ (at 113.792 98.425)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /461BB62E)
+ (fp_text reference CLK0 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /CLKMOD0))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8DEC7)
+ (at 113.792 95.885)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /461BB648)
+ (fp_text reference CLK1 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /CLKMOD1))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DED0)
+ (at 83.439 134.239 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /461BB894)
+ (fp_text reference CLKOUT1 (at 0 -1.26746 270) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27 270) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0 270) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /TCLK))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_3X1 (layer Composant) (tedit 4C1130E0) (tstamp 53D8DED5)
+ (at 113.284 76.073 90)
+ (descr "Connecteur 3 pins")
+ (tags "CONN DEV")
+ (path /47D80202/4652BADD)
+ (fp_text reference COM_SEL1 (at 0.254 -2.159 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.1524)))
+ )
+ (fp_text value CONN_3 (at 0 -2.159 90) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.1524)))
+ )
+ (fp_line (start -3.81 1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -3.81 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 3.81 1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -1.27 -1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /inout_user/CAN_H))
+ (pad 2 thru_hole circle (at 0 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /inout_user/CTS2/CANH))
+ (pad 3 thru_hole circle (at 2.54 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 134 "Net-(COM_SEL1-Pad3)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_3X1 (layer Composant) (tedit 4C1130E0) (tstamp 53D8DEE0)
+ (at 110.744 76.073 90)
+ (descr "Connecteur 3 pins")
+ (tags "CONN DEV")
+ (path /47D80202/4652BAD4)
+ (fp_text reference COM_SEL2 (at 0.254 -2.159 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.1524)))
+ )
+ (fp_text value CONN_3 (at 0 -2.159 90) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.1524)))
+ )
+ (fp_line (start -3.81 1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -3.81 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 3.81 1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -1.27 -1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 2 thru_hole circle (at 0 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 44 /inout_user/RXD2))
+ (pad 3 thru_hole circle (at 2.54 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 135 "Net-(COM_SEL2-Pad3)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_3X1 (layer Composant) (tedit 4C1130E0) (tstamp 53D8DEEB)
+ (at 108.204 76.073 90)
+ (descr "Connecteur 3 pins")
+ (tags "CONN DEV")
+ (path /47D80202/4652BA65)
+ (fp_text reference COM_SEL3 (at 0.254 -2.159 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.1524)))
+ )
+ (fp_text value CONN_3 (at 0 -2.159 90) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.1524)))
+ )
+ (fp_line (start -3.81 1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -3.81 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 3.81 1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -1.27 -1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /inout_user/CAN_L))
+ (pad 2 thru_hole circle (at 0 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 48 /inout_user/TXD2/CANL))
+ (pad 3 thru_hole circle (at 2.54 0 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 136 "Net-(COM_SEL3-Pad3)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8DEF6)
+ (at 90.17 134.62 180)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /46545507)
+ (fp_text reference CT1 (at 0 -1.905 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 105 "Net-(BDM_PORT1-Pad6)"))
+ (pad 2 thru_hole circle (at 1.27 0 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /TCLK))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:ST23AK#1 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DEFF)
+ (at 160.401 102.489 90)
+ (path /46237F86)
+ (attr smd)
+ (fp_text reference D1 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.635) (thickness 0.127)))
+ )
+ (fp_text value BAT54 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.635) (thickness 0.127)))
+ )
+ (fp_line (start -1.524 -0.508) (end -1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.508) (end -1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.508) (end 1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 -0.508) (end 1.524 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.508) (end 1.524 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.508) (end -1.524 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 0.508) (end -1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (pad 2 smd rect (at 0 0.9525 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 137 "Net-(D1-Pad2)"))
+ (pad 1 smd rect (at 0.9525 -0.9525 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 22 /IRQ-7))
+ (pad 3 smd rect (at -0.9525 -0.9525 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask))
+ (model SMD_Packages.3dshapes/ST23AK#1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1299999952316284 0.1500000059604645 0.1500000059604645))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:ST23AK#1 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF0C)
+ (at 161.798 95.631 90)
+ (path /4623846D)
+ (attr smd)
+ (fp_text reference D3 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.635) (thickness 0.127)))
+ )
+ (fp_text value BAT54 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.635) (thickness 0.127)))
+ )
+ (fp_line (start -1.524 -0.508) (end -1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.508) (end -1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.508) (end 1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 -0.508) (end 1.524 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.508) (end 1.524 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.508) (end -1.524 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 0.508) (end -1.524 -0.508) (layer F.SilkS) (width 0.127))
+ (pad 2 smd rect (at 0 0.9525 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 108 "Net-(C3-Pad1)"))
+ (pad 1 smd rect (at 0.9525 -0.9525 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 106 /inout_user/RSTI-))
+ (pad 3 smd rect (at -0.9525 -0.9525 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask))
+ (model SMD_Packages.3dshapes/ST23AK#1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1299999952316284 0.1500000059604645 0.1500000059604645))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D5 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF19)
+ (at 87.122 77.089)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /47D80202/465306C8)
+ (fp_text reference D7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value 1N4004 (at -0.254 0) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 2 thru_hole rect (at 6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 127 "Net-(C38-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF28)
+ (at 212.09 76.835)
+ (path /47D80204/46A76BC4)
+ (attr smd)
+ (fp_text reference D8 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 138 "Net-(D8-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF36)
+ (at 212.09 80.645)
+ (path /47D80204/46A76BA8)
+ (attr smd)
+ (fp_text reference D9 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 139 "Net-(D9-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:FSUPCMS (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF44)
+ (at 99.949 76.454)
+ (path /47D80202/46530747)
+ (attr smd)
+ (fp_text reference F1 (at 0 -0.508) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.1524)))
+ )
+ (fp_text value FUSE (at 0 0.762) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.032 5.588) (end -2.032 1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.032 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.032 5.588) (end 2.032 1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.032 1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.032 -5.461) (end 2.032 -1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.032 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.032 -5.461) (end -2.032 -1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.032 -1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.54 -5.461) (end -2.54 5.588) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.54 5.588) (end 2.54 -5.461) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.54 5.588) (end -2.54 5.588) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.54 -5.461) (end 2.54 -5.461) (layer F.SilkS) (width 0.2032))
+ (pad 1 smd rect (at 0 -3.175) (size 3.556 4.191) (layers Composant F.Paste F.Mask)
+ (net 140 "Net-(F1-Pad1)"))
+ (pad 2 smd rect (at 0 3.175) (size 3.556 4.191) (layers Composant F.Paste F.Mask)
+ (net 127 "Net-(C38-Pad1)"))
+ (model Fuse_Holders_and_Fuses.3dshapes/BladeFuse-Mini.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4000000059604645 0.4000000059604645 0.4000000059604645))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF55)
+ (at 119.634 101.346 180)
+ (path /462380B8)
+ (attr smd)
+ (fp_text reference FB1 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value BEAD (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 111 GNDA))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF60)
+ (at 89.535 140.97 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /465FE6C5)
+ (fp_text reference GND1 (at 0 -1.26746 270) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27 270) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0 270) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:JACK_ALIM (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF65)
+ (at 100.965 60.833 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags "CONN JACK")
+ (path /47D80202/465307C6)
+ (fp_text reference J1 (at 0.254 -5.588 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value JACK_2P (at -5.08 5.588 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_line (start -7.112 -4.318) (end -7.874 -4.318) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.874 -4.318) (end -7.874 4.318) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.874 4.318) (end -7.112 4.318) (layer F.SilkS) (width 0.381))
+ (fp_line (start -4.064 -4.318) (end -4.064 4.318) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.588 -4.318) (end 5.588 4.318) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.112 4.318) (end 5.588 4.318) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.112 -4.318) (end 5.588 -4.318) (layer F.SilkS) (width 0.381))
+ (pad 2 thru_hole circle (at 0 0 270) (size 4.8006 4.8006) (drill oval 1.016 2.54) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 1 thru_hole rect (at 6.096 0 270) (size 4.8006 4.8006) (drill oval 1.016 2.54) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 3 thru_hole circle (at 2.286 5.08 270) (size 4.8006 4.8006) (drill oval 2.54 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 141 "Net-(J1-Pad3)"))
+ (model Connect.3dshapes/JACK_ALIM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.800000011920929 0.800000011920929 0.800000011920929))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF72)
+ (at 118.999 110.236)
+ (path /46238092)
+ (attr smd)
+ (fp_text reference L1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 10uH (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 142 "Net-(L1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 110 /inout_user/VCCA))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF7D)
+ (at 151.892 109.22 180)
+ (path /461BE327)
+ (attr smd)
+ (fp_text reference L2 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 10uH (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 30 /VDDPLL))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF88)
+ (at 88.392 117.094 180)
+ (path /47D80202/4652B0AE)
+ (attr smd)
+ (fp_text reference LED1 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 143 "Net-(LED1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DF96)
+ (at 88.392 121.158 180)
+ (path /47D80202/4652B0B7)
+ (attr smd)
+ (fp_text reference LED2 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 144 "Net-(LED2-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DFA4)
+ (at 88.392 125.349 180)
+ (path /47D80202/4652B0BB)
+ (attr smd)
+ (fp_text reference LED3 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 145 "Net-(LED3-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DFB2)
+ (at 88.392 129.54 180)
+ (path /47D80202/4652B0BC)
+ (attr smd)
+ (fp_text reference LED4 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 146 "Net-(LED4-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DFC0)
+ (at 104.14 138.176 270)
+ (path /47D80202/46530639)
+ (attr smd)
+ (fp_text reference LED5 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 147 "Net-(LED5-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DFCE)
+ (at 164.846 100.457 270)
+ (path /46237E52)
+ (attr smd)
+ (fp_text reference LEDABRT1 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value RED (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 148 "Net-(LEDABRT1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8DFDC)
+ (at 92.964 112.903)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /47D80202/4652B108)
+ (fp_text reference LED_EN1 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 149 "Net-(LED_EN1-Pad2)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92-INVERT (layer Composant) (tedit 53D8D2B1) (tstamp 53D8DFE5)
+ (at 187.96 89.535 270)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /462383E5)
+ (fp_text reference LV1 (at -1.27 3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value DS1818 (at -1.27 -5.08 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 1.27 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 108 "Net-(C3-Pad1)"))
+ (pad 2 thru_hole circle (at -1.27 -1.27 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 3 thru_hole circle (at 1.27 -1.27 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_30X2 (layer Composant) (tedit 5031D875) (tstamp 53D8DFF3)
+ (at 147.574 138.176 180)
+ (descr "Double rangee de contacts 2 x 12 pins")
+ (tags CONN)
+ (path /47D80202/4652A4FB)
+ (fp_text reference MCU_PORT1 (at 0 -3.81 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.27432)))
+ )
+ (fp_text value CONN_30X2 (at 0 3.81 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 12.7 2.54) (end 38.1 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 -2.54) (end 38.1 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 2.54) (end -38.1 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 -2.54) (end -38.1 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 38.1 -2.54) (end 38.1 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -38.1 -2.54) (end -38.1 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -36.83 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 128 "Net-(C43-Pad2)"))
+ (pad 2 thru_hole circle (at -36.83 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 150 /xilinx/IRQ-1))
+ (pad 11 thru_hole circle (at -24.13 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 151 /inout_user/UCTS1))
+ (pad 4 thru_hole circle (at -34.29 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 152 /inout_user/RTS0-))
+ (pad 13 thru_hole circle (at -21.59 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 153 /inout_user/PWM1))
+ (pad 6 thru_hole circle (at -31.75 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 106 /inout_user/RSTI-))
+ (pad 15 thru_hole circle (at -19.05 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 154 /inout_user/PWM3))
+ (pad 8 thru_hole circle (at -29.21 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 155 /xilinx/IRQ-2))
+ (pad 17 thru_hole circle (at -16.51 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 156 /inout_user/QSPI_DOUT))
+ (pad 10 thru_hole circle (at -26.67 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 157 /AN0))
+ (pad 19 thru_hole circle (at -13.97 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 158 /inout_user/QSPI_DIN))
+ (pad 12 thru_hole circle (at -24.13 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 159 /AN1))
+ (pad 21 thru_hole circle (at -11.43 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 160 /inout_user/QSPI_SCLK))
+ (pad 14 thru_hole circle (at -21.59 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /AN2))
+ (pad 23 thru_hole circle (at -8.89 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 161 /QSPI_CS0))
+ (pad 16 thru_hole circle (at -19.05 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /AN3))
+ (pad 25 thru_hole circle (at -6.35 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 162 /xilinx/QSPI_CS1))
+ (pad 18 thru_hole circle (at -16.51 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /AN4))
+ (pad 27 thru_hole circle (at -3.81 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 60 /xilinx/QSPI_CS2))
+ (pad 20 thru_hole circle (at -13.97 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 163 /AN5))
+ (pad 29 thru_hole circle (at -1.27 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /QSPI_CS3))
+ (pad 22 thru_hole circle (at -11.43 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /AN6))
+ (pad 31 thru_hole circle (at 1.27 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 164 /xilinx/IRQ-3))
+ (pad 24 thru_hole circle (at -8.89 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 165 /AN7))
+ (pad 26 thru_hole circle (at -6.35 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 132 /inout_user/CANTX))
+ (pad 33 thru_hole circle (at 3.81 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 166 /IRQ-4))
+ (pad 28 thru_hole circle (at -3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /inout_user/CANRX))
+ (pad 32 thru_hole circle (at 1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 38 /inout_user/PWM7))
+ (pad 34 thru_hole circle (at 3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 167 /DTIN0))
+ (pad 36 thru_hole circle (at 6.35 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 17 /DTIN1))
+ (pad 38 thru_hole circle (at 8.89 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 168 /DTIN2))
+ (pad 35 thru_hole circle (at 6.35 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /IRQ-5))
+ (pad 37 thru_hole circle (at 8.89 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /IRQ-6))
+ (pad 3 thru_hole circle (at -34.29 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 5 thru_hole circle (at -31.75 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 169 /inout_user/UTXD1))
+ (pad 7 thru_hole circle (at -29.21 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 53 /inout_user/URXD1))
+ (pad 9 thru_hole circle (at -26.67 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 170 /inout_user/URTS1))
+ (pad 39 thru_hole circle (at 11.43 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /IRQ-7))
+ (pad 40 thru_hole circle (at 11.43 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 171 /DTIN3))
+ (pad 30 thru_hole circle (at -1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 37 /inout_user/PWM5))
+ (pad 41 thru_hole circle (at 13.97 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 55 /inout_user/UTXD0))
+ (pad 42 thru_hole circle (at 13.97 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 51 /inout_user/URTS0))
+ (pad 43 thru_hole circle (at 16.51 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 172 /inout_user/URXD0))
+ (pad 44 thru_hole circle (at 16.51 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 173 /inout_user/UCTS0))
+ (pad 45 thru_hole circle (at 19.05 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 174 /inout_user/UTXD2))
+ (pad 46 thru_hole circle (at 19.05 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 52 /inout_user/URTS2))
+ (pad 47 thru_hole circle (at 21.59 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 54 /inout_user/URXD2))
+ (pad 48 thru_hole circle (at 21.59 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 50 /inout_user/UCTS2))
+ (pad 49 thru_hole circle (at 24.13 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 175 /GPT0))
+ (pad 50 thru_hole circle (at 24.13 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /GPT1))
+ (pad 51 thru_hole circle (at 26.67 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 176 /GPT2))
+ (pad 52 thru_hole circle (at 26.67 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /GPT3))
+ (pad 53 thru_hole circle (at 29.21 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 177 /inout_user/RCON-))
+ (pad 54 thru_hole circle (at 29.21 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 55 thru_hole circle (at 31.75 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 110 /inout_user/VCCA))
+ (pad 56 thru_hole circle (at 31.75 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 111 GNDA))
+ (pad 57 thru_hole circle (at 34.29 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 110 /inout_user/VCCA))
+ (pad 58 thru_hole circle (at 34.29 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 111 GNDA))
+ (pad 59 thru_hole circle (at 36.83 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 60 thru_hole circle (at 36.83 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x30.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY-6X1 (layer Composant) (tedit 41402119) (tstamp 53D8E038)
+ (at 223.52 69.85 270)
+ (descr "Connecteur 6 pins")
+ (tags "CONN DEV")
+ (path /47D80204/46A76BA6)
+ (fp_text reference P1 (at 0 -2.159 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_6 (at 0 2.159 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 0.889) (thickness 0.2032)))
+ )
+ (fp_line (start -7.62 1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -1.27) (end 7.62 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.62 -1.27) (end 7.62 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.62 1.27) (end -7.62 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -6.35 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 2 thru_hole circle (at -3.81 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 3 thru_hole circle (at -1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 64 /xilinx/TMS))
+ (pad 4 thru_hole circle (at 1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 62 /xilinx/TDI))
+ (pad 5 thru_hole circle (at 3.81 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 61 /xilinx/TCK))
+ (pad 6 thru_hole circle (at 6.35 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 63 /xilinx/TDO))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x06.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X2 (layer Composant) (tedit 3FAB87D4) (tstamp 53D8E046)
+ (at 198.755 88.265 270)
+ (descr "Double rangee de contacts 2 x 2 pins")
+ (tags CONN)
+ (path /47D80204/46A76EB2)
+ (fp_text reference P3 (at -0.381 -3.429 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_2X2 (at 0 3.048 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -2.54 -2.54) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 2.54) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 151 /inout_user/UCTS1))
+ (pad 2 thru_hole circle (at -1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 178 "Net-(P3-Pad2)"))
+ (pad 3 thru_hole circle (at 1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 170 /inout_user/URTS1))
+ (pad 4 thru_hole circle (at 1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 179 "Net-(P3-Pad4)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_20X2 (layer Composant) (tedit 5031D84E) (tstamp 53D8E051)
+ (at 223.52 113.03 270)
+ (descr "Double rangee de contacts 2 x 12 pins")
+ (tags CONN)
+ (path /47D80204/46ADE55A)
+ (fp_text reference P4 (at 0 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.27432)))
+ )
+ (fp_text value CONN_20X2 (at 0 3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 25.4 2.54) (end -25.4 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 25.4 -2.54) (end -25.4 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 25.4 -2.54) (end 25.4 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -25.4 -2.54) (end -25.4 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -24.13 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 65 /xilinx/XIL_D0))
+ (pad 2 thru_hole circle (at -24.13 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 11 thru_hole circle (at -11.43 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 97 /xilinx/XIL_D5))
+ (pad 4 thru_hole circle (at -21.59 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 78 /xilinx/XIL_D20))
+ (pad 13 thru_hole circle (at -8.89 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 98 /xilinx/XIL_D6))
+ (pad 6 thru_hole circle (at -19.05 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 79 /xilinx/XIL_D21))
+ (pad 15 thru_hole circle (at -6.35 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 99 /xilinx/XIL_D7))
+ (pad 8 thru_hole circle (at -16.51 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 80 /xilinx/XIL_D22))
+ (pad 17 thru_hole circle (at -3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 100 /xilinx/XIL_D8))
+ (pad 10 thru_hole circle (at -13.97 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 81 /xilinx/XIL_D23))
+ (pad 19 thru_hole circle (at -1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 101 /xilinx/XIL_D9))
+ (pad 12 thru_hole circle (at -11.43 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 82 /xilinx/XIL_D24))
+ (pad 21 thru_hole circle (at 1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 67 /xilinx/XIL_D10))
+ (pad 14 thru_hole circle (at -8.89 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 83 /xilinx/XIL_D25))
+ (pad 23 thru_hole circle (at 3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 68 /xilinx/XIL_D11))
+ (pad 16 thru_hole circle (at -6.35 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 84 /xilinx/XIL_D26))
+ (pad 25 thru_hole circle (at 6.35 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 69 /xilinx/XIL_D12))
+ (pad 18 thru_hole circle (at -3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 85 /xilinx/XIL_D27))
+ (pad 27 thru_hole circle (at 8.89 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 70 /xilinx/XIL_D13))
+ (pad 20 thru_hole circle (at -1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 86 /xilinx/XIL_D28))
+ (pad 29 thru_hole circle (at 11.43 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 71 /xilinx/XIL_D14))
+ (pad 22 thru_hole circle (at 1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 87 /xilinx/XIL_D29))
+ (pad 31 thru_hole circle (at 13.97 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 72 /xilinx/XIL_D15))
+ (pad 24 thru_hole circle (at 3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 89 /xilinx/XIL_D30))
+ (pad 26 thru_hole circle (at 6.35 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 90 /xilinx/XIL_D31))
+ (pad 33 thru_hole circle (at 16.51 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 73 /xilinx/XIL_D16))
+ (pad 28 thru_hole circle (at 8.89 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 91 /xilinx/XIL_D32))
+ (pad 32 thru_hole circle (at 13.97 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 93 /xilinx/XIL_D34))
+ (pad 34 thru_hole circle (at 16.51 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 94 /xilinx/XIL_D35))
+ (pad 36 thru_hole circle (at 19.05 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 95 /xilinx/XIL_D36))
+ (pad 38 thru_hole circle (at 21.59 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 56 /xilinx/+3,3V_OUT))
+ (pad 35 thru_hole circle (at 19.05 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 74 /xilinx/XIL_D17))
+ (pad 37 thru_hole circle (at 21.59 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 75 /xilinx/XIL_D18))
+ (pad 3 thru_hole circle (at -21.59 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 /xilinx/XIL_D1))
+ (pad 5 thru_hole circle (at -19.05 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 77 /xilinx/XIL_D2))
+ (pad 7 thru_hole circle (at -16.51 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 88 /xilinx/XIL_D3))
+ (pad 9 thru_hole circle (at -13.97 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 96 /xilinx/XIL_D4))
+ (pad 39 thru_hole circle (at 24.13 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 76 /xilinx/XIL_D19))
+ (pad 40 thru_hole circle (at 24.13 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 30 thru_hole circle (at 11.43 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 92 /xilinx/XIL_D33))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x20.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_4x2 (layer Composant) (tedit 3FAB90E6) (tstamp 53D8E080)
+ (at 161.417 119.253 180)
+ (descr "Double rangee de contacts 2 x 4 pins")
+ (tags CONN)
+ (path /47D80202/4652BF26)
+ (fp_text reference PULUPEN1 (at 0 -3.81 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_4X2 (at 0 3.81 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -3.81 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 160 /inout_user/QSPI_SCLK))
+ (pad 2 thru_hole circle (at -3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 180 "Net-(PULUPEN1-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 161 /QSPI_CS0))
+ (pad 4 thru_hole circle (at -1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 181 "Net-(PULUPEN1-Pad4)"))
+ (pad 5 thru_hole circle (at 1.27 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 132 /inout_user/CANTX))
+ (pad 6 thru_hole circle (at 1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 182 "Net-(PULUPEN1-Pad6)"))
+ (pad 7 thru_hole circle (at 3.81 1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /inout_user/CANRX))
+ (pad 8 thru_hole circle (at 3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 183 "Net-(PULUPEN1-Pad8)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x04.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SOT23EBC (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E08F)
+ (at 161.798 90.043 90)
+ (descr "Module CMS SOT23 Transistore EBC")
+ (tags "CMS SOT")
+ (path /46238519)
+ (attr smd)
+ (fp_text reference Q1 (at 0 -2.413 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.2032)))
+ )
+ (fp_text value 3906 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.2032)))
+ )
+ (fp_line (start -1.524 -0.381) (end 1.524 -0.381) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 -0.381) (end 1.524 0.381) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.381) (end -1.524 0.381) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 0.381) (end -1.524 -0.381) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -0.889 -1.016 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.889 -1.016 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 184 "Net-(Q1-Pad2)"))
+ (pad 3 smd rect (at 0 1.016 90) (size 0.9144 0.9144) (layers Composant F.Paste F.Mask)
+ (net 185 "Net-(Q1-Pad3)"))
+ (model SMD_Packages.3dshapes/ST23AK#1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1299999952316284 0.1500000059604645 0.1500000059604645))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E099)
+ (at 128.27 121.285 90)
+ (path /462389B6)
+ (attr smd)
+ (fp_text reference R1 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1M (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 57 /xilinx/GLCK2))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 7 /CLKIN/EXTAL))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0A5)
+ (at 103.886 96.647)
+ (path /461BB661)
+ (attr smd)
+ (fp_text reference R2 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 9 /CLKMOD1))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0B1)
+ (at 183.769 121.158 180)
+ (path /461BE039)
+ (attr smd)
+ (fp_text reference R4 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 150 /xilinx/IRQ-1))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0BD)
+ (at 183.769 123.444 180)
+ (path /461BE041)
+ (attr smd)
+ (fp_text reference R5 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 155 /xilinx/IRQ-2))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0C9)
+ (at 153.035 93.853)
+ (path /461BE046)
+ (attr smd)
+ (fp_text reference R6 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 164 /xilinx/IRQ-3))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0D5)
+ (at 163.957 112.268 270)
+ (path /46237E28)
+ (attr smd)
+ (fp_text reference R7 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1K (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 103 "Net-(ABRT_SW1-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 109 "Net-(C15-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0E1)
+ (at 169.672 117.094)
+ (path /461BE047)
+ (attr smd)
+ (fp_text reference R8 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 166 /IRQ-4))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0ED)
+ (at 141.478 85.852 90)
+ (path /461BE230)
+ (attr smd)
+ (fp_text reference R9 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 0 (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 186 "Net-(R9-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E0F9)
+ (at 173.863 117.094 180)
+ (path /461BE04B)
+ (attr smd)
+ (fp_text reference R10 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 20 /IRQ-5))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E105)
+ (at 153.035 98.298)
+ (path /461BE051)
+ (attr smd)
+ (fp_text reference R11 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 21 /IRQ-6))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E111)
+ (at 160.401 114.046 180)
+ (path /46237E2F)
+ (attr smd)
+ (fp_text reference R12 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 20K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 109 "Net-(C15-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E11D)
+ (at 153.035 96.012)
+ (path /461BE054)
+ (attr smd)
+ (fp_text reference R13 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 22 /IRQ-7))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E129)
+ (at 164.846 105.41 270)
+ (path /46237E3D)
+ (attr smd)
+ (fp_text reference R14 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 148 "Net-(LEDABRT1-Pad2)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 137 "Net-(D1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E135)
+ (at 158.623 94.869 90)
+ (path /4623847B)
+ (attr smd)
+ (fp_text reference R15 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 106 /inout_user/RSTI-))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E141)
+ (at 120.142 97.282 180)
+ (path /461BAF5C)
+ (attr smd)
+ (fp_text reference R16 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 23 /JTAG_EN))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E14D)
+ (at 83.312 104.267 180)
+ (path /461BB790)
+ (attr smd)
+ (fp_text reference R17 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 6 /BKPT-))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E159)
+ (at 83.312 106.553 180)
+ (path /461BB795)
+ (attr smd)
+ (fp_text reference R18 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 14 /DSCLK))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E165)
+ (at 83.312 119.126 180)
+ (path /461BB798)
+ (attr smd)
+ (fp_text reference R19 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 15 /DSI))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E171)
+ (at 83.312 121.412 180)
+ (path /461BB799)
+ (attr smd)
+ (fp_text reference R20 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 16 /DSO))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E17D)
+ (at 158.623 90.297 90)
+ (path /46238545)
+ (attr smd)
+ (fp_text reference R21 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 152 /inout_user/RTS0-))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 184 "Net-(Q1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E189)
+ (at 161.544 86.995)
+ (path /4623857F)
+ (attr smd)
+ (fp_text reference R22 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 185 "Net-(Q1-Pad3)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 187 "Net-(R22-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E195)
+ (at 127.889 84.455 180)
+ (path /47D80202/4652B5F4)
+ (attr smd)
+ (fp_text reference R23 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 188 "Net-(R23-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1A1)
+ (at 103.886 98.933)
+ (path /461BB65F)
+ (attr smd)
+ (fp_text reference R25 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 8 /CLKMOD0))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1AD)
+ (at 84.836 113.792 270)
+ (path /461BB8C0)
+ (attr smd)
+ (fp_text reference R26 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 29 /TCLK))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1B9)
+ (at 93.218 117.094)
+ (path /47D80202/4652B061)
+ (attr smd)
+ (fp_text reference R28 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 143 "Net-(LED1-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 189 "Net-(R28-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1C5)
+ (at 192.532 82.296 90)
+ (path /47D80202/4652B9D5)
+ (attr smd)
+ (fp_text reference R30 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 190 "Net-(R30-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1D1)
+ (at 93.218 121.158)
+ (path /47D80202/4652B067)
+ (attr smd)
+ (fp_text reference R31 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 144 "Net-(LED2-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 191 "Net-(R31-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1DD)
+ (at 93.218 125.349)
+ (path /47D80202/4652B069)
+ (attr smd)
+ (fp_text reference R32 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 145 "Net-(LED3-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 192 "Net-(R32-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1E9)
+ (at 93.218 129.413)
+ (path /47D80202/4652B06A)
+ (attr smd)
+ (fp_text reference R33 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 146 "Net-(LED4-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 193 "Net-(R33-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E1F5)
+ (at 96.52 110.236 180)
+ (path /47D80202/4652B111)
+ (attr smd)
+ (fp_text reference R34 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 149 "Net-(LED_EN1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E201)
+ (at 164.592 82.296 90)
+ (path /47D80202/4652B9CC)
+ (attr smd)
+ (fp_text reference R35 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 10K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 194 "Net-(R35-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E20D)
+ (at 101.854 93.345)
+ (path /47D80202/46540063)
+ (attr smd)
+ (fp_text reference R36 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 195 "Net-(R36-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E219)
+ (at 99.695 85.471 180)
+ (path /47D80202/46540164)
+ (attr smd)
+ (fp_text reference R38 (at 0 -0.3175 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 62 (at 0 0.381 180) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 33 /inout_user/CAN_L))
+ (pad 2 smd rect (at 0.9525 0 180) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 133 "Net-(CAN_TERM1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E225)
+ (at 100.584 101.473 90)
+ (path /461BE50C)
+ (attr smd)
+ (fp_text reference R45 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 177 /inout_user/RCON-))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E231)
+ (at 134.874 113.411 270)
+ (path /461BB742)
+ (attr smd)
+ (fp_text reference R46 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 22 (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 196 "Net-(R46-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 29 /TCLK))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E23D)
+ (at 157.734 125.476 90)
+ (path /47D80202/4652BF65)
+ (attr smd)
+ (fp_text reference R47 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 183 "Net-(PULUPEN1-Pad8)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E249)
+ (at 160.274 125.476 90)
+ (path /47D80202/4652BF62)
+ (attr smd)
+ (fp_text reference R48 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 182 "Net-(PULUPEN1-Pad6)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E255)
+ (at 162.814 125.476 90)
+ (path /47D80202/4652BF5C)
+ (attr smd)
+ (fp_text reference R49 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 181 "Net-(PULUPEN1-Pad4)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E261)
+ (at 165.354 125.476 90)
+ (path /47D80202/4652BF48)
+ (attr smd)
+ (fp_text reference R50 (at 0 -0.3175 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4,7K (at 0 0.381 90) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 180 "Net-(PULUPEN1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E26D)
+ (at 105.41 133.858)
+ (path /47D80202/46530638)
+ (attr smd)
+ (fp_text reference R53 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 270 (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 147 "Net-(LED5-Pad1)"))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E279)
+ (at 218.44 67.31 270)
+ (path /47D80204/46A76BCA)
+ (attr smd)
+ (fp_text reference R57 (at 0 -0.3175 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 4K7 (at 0 0.381 270) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0 270) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 61 /xilinx/TCK))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E285)
+ (at 206.375 76.835)
+ (path /47D80204/46A76BC3)
+ (attr smd)
+ (fp_text reference R62 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 58 /xilinx/LED_TEST1))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 138 "Net-(D8-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E291)
+ (at 206.375 80.645)
+ (path /47D80204/46A76BA7)
+ (attr smd)
+ (fp_text reference R63 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value 1K (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 59 /xilinx/LED_TEST2))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 139 "Net-(D9-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E29D)
+ (at 212.09 134.62)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /47D80204/4791D59D)
+ (autoplace_cost180 10)
+ (fp_text reference R64 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 3,3 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 56 /xilinx/+3,3V_OUT))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4000000059604645 0.4000000059604645 0.4000000059604645))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E2AA)
+ (at 99.695 87.757)
+ (path /47D80202/4654018B)
+ (attr smd)
+ (fp_text reference RCAN1 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value R (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 33 /inout_user/CAN_L))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM0805 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E2B6)
+ (at 99.695 90.043)
+ (path /47D80202/46540184)
+ (attr smd)
+ (fp_text reference RCAN2 (at 0 -0.3175) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_text value R (at 0 0.381) (layer F.SilkS)
+ (effects (font (size 0.50038 0.50038) (thickness 0.10922)))
+ )
+ (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.09906))
+ (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.09906))
+ (pad 1 smd rect (at -0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at 0.9525 0) (size 0.889 1.397) (layers Composant F.Paste F.Mask)
+ (net 32 /inout_user/CAN_H))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206POL (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E2C2)
+ (at 164.846 89.281 270)
+ (path /46238597)
+ (attr smd)
+ (fp_text reference RED1 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value LED_RESET1 (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.794 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.143) (end -2.794 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 187 "Net-(R22-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (model SMD_Packages.3dshapes/SMD-1206_Pol.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.1700000017881393 0.1599999964237213 0.1599999964237213))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E2D0)
+ (at 100.457 95.758 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /47D80202/4654007F)
+ (fp_text reference RS1 (at 0 -1.26746 270) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27 270) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0 270) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 195 "Net-(R36-Pad1)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:SW_SPDT (layer Composant) (tedit 53DD05A6) (tstamp 53D8E2F9)
+ (at 86.614 71.374 90)
+ (descr "Switch inverseur")
+ (tags "SWITCH DEV")
+ (path /47D80202/46530763)
+ (fp_text reference SW_ONOFF1 (at 9.017 2.413 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value SWITCH_INV (at 8.89 -2.286 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 -5.715) (end -1.27 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -5.08) (end -1.27 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -4.445) (end 2.54 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -5.715) (end 2.54 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end -1.27 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -0.635) (end -1.27 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 4.445) (end -1.27 4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 4.445) (end -1.27 5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 5.715) (end 2.54 5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -6.35) (end 2.54 6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 6.35) (end 15.24 6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.24 6.35) (end 15.24 -6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.24 -6.35) (end 2.54 -6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.24 -3.175) (end 22.86 -3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 22.86 -3.175) (end 22.86 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 22.86 3.175) (end 15.24 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 22.86 -1.27) (end 33.02 -3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 33.02 -3.175) (end 33.655 -3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 33.655 -3.175) (end 34.29 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 34.29 -2.54) (end 34.29 -1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 34.29 -1.905) (end 34.29 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 34.29 -1.27) (end 33.655 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 33.655 -0.635) (end 22.86 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 0 0 90) (size 3.81 2.54) (drill 1.6) (layers *.Cu *.Mask F.SilkS)
+ (net 140 "Net-(F1-Pad1)"))
+ (pad 1 thru_hole rect (at 0 -5.08 90) (size 3.81 2.54) (drill 1.6) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole rect (at 0 5.08 90) (size 3.81 2.54) (drill 1.6) (layers *.Cu *.Mask F.SilkS)
+ (net 141 "Net-(J1-Pad3)"))
+ (model unused_3d.3dshapes/Device.switch_toggle_horizontal_right_angle_PC_terminal.wrl
+ (at (xyz 0.3600000143051148 0 0))
+ (scale (xyz 0.6600000262260437 0.6600000262260437 0.6600000262260437))
+ (rotate (xyz 0 0 180))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E319)
+ (at 83.439 138.557 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /461BBA34)
+ (fp_text reference TA-1 (at 0 -1.26746 270) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27 270) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0 270) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 107 "Net-(BDM_PORT1-Pad26)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E31E)
+ (at 75.438 70.485 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /47D80202/46530806)
+ (fp_text reference TB1 (at 0 -5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 141 "Net-(J1-Pad3)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:VQFP100 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E328)
+ (at 135.382 101.473)
+ (descr "Module CMS Vqfp 100 pins")
+ (tags "CMS VQFP")
+ (path /46161C39)
+ (attr smd)
+ (fp_text reference U1 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value MCF5213-LQFP100 (at 0 2.54) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_circle (center 6.096 -6.477) (end 6.096 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.985 -6.35) (end 6.35 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.985 -6.731) (end -6.731 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.985 6.731) (end -6.731 6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.731 6.985) (end 6.985 6.731) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.35 -6.985) (end -6.731 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.985 -6.731) (end -6.985 6.731) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.731 6.985) (end 6.731 6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.985 6.731) (end 6.985 -6.35) (layer F.SilkS) (width 0.2032))
+ (pad 100 smd rect (at 7.747 -5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 53 /inout_user/URXD1))
+ (pad 76 smd rect (at 7.747 5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 6 /BKPT-))
+ (pad 77 smd rect (at 7.747 5.4864) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 10 /DDAT0))
+ (pad 78 smd rect (at 7.747 5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 11 /DDAT1))
+ (pad 79 smd rect (at 7.747 4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 15 /DSI))
+ (pad 80 smd rect (at 7.747 3.9878) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 16 /DSO))
+ (pad 81 smd rect (at 7.747 3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 82 smd rect (at 7.747 2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 83 smd rect (at 7.747 2.4892) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 12 /DDAT2))
+ (pad 84 smd rect (at 7.747 2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 13 /DDAT3))
+ (pad 85 smd rect (at 7.747 1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 14 /DSCLK))
+ (pad 86 smd rect (at 7.747 0.9906) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 1 /ALLPST))
+ (pad 87 smd rect (at 7.747 0.4826) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 150 /xilinx/IRQ-1))
+ (pad 88 smd rect (at 7.747 0) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 155 /xilinx/IRQ-2))
+ (pad 89 smd rect (at 7.747 -0.508) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 164 /xilinx/IRQ-3))
+ (pad 90 smd rect (at 7.747 -1.016) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 166 /IRQ-4))
+ (pad 91 smd rect (at 7.747 -1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 20 /IRQ-5))
+ (pad 92 smd rect (at 7.747 -2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 93 smd rect (at 7.747 -2.5146) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 94 smd rect (at 7.747 -2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 21 /IRQ-6))
+ (pad 95 smd rect (at 7.747 -3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 22 /IRQ-7))
+ (pad 96 smd rect (at 7.747 -4.0132) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 106 /inout_user/RSTI-))
+ (pad 97 smd rect (at 7.747 -4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 152 /inout_user/RTS0-))
+ (pad 98 smd rect (at 7.747 -5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 151 /inout_user/UCTS1))
+ (pad 99 smd rect (at 7.747 -5.5118) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 169 /inout_user/UTXD1))
+ (pad 75 smd rect (at 5.9944 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 51 smd rect (at -5.9944 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 165 /AN7))
+ (pad 52 smd rect (at -5.4864 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 5 /AN6))
+ (pad 53 smd rect (at -5.0038 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 163 /AN5))
+ (pad 54 smd rect (at -4.4958 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 4 /AN4))
+ (pad 55 smd rect (at -3.9878 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 56 smd rect (at -3.5052 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 57 smd rect (at -2.9972 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 58 smd rect (at -2.4892 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 175 /GPT0))
+ (pad 59 smd rect (at -2.0066 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 18 /GPT1))
+ (pad 60 smd rect (at -1.4986 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 37 /inout_user/PWM5))
+ (pad 61 smd rect (at -0.9906 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 176 /GPT2))
+ (pad 62 smd rect (at -0.4826 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 19 /GPT3))
+ (pad 63 smd rect (at 0 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 38 /inout_user/PWM7))
+ (pad 64 smd rect (at 0.508 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 196 "Net-(R46-Pad1)"))
+ (pad 65 smd rect (at 1.016 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 24 /PST0))
+ (pad 66 smd rect (at 1.4986 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 25 /PST1))
+ (pad 67 smd rect (at 2.0066 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 68 smd rect (at 2.5146 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 69 smd rect (at 2.9972 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 26 /PST2))
+ (pad 70 smd rect (at 3.5052 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 27 /PST3))
+ (pad 71 smd rect (at 4.0132 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 72 smd rect (at 4.4958 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 57 /xilinx/GLCK2))
+ (pad 73 smd rect (at 5.0038 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 7 /CLKIN/EXTAL))
+ (pad 74 smd rect (at 5.5118 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 30 /VDDPLL))
+ (pad 1 smd rect (at 5.9944 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at 5.4864 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 3 smd rect (at 5.0038 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 4 smd rect (at 4.4958 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 170 /inout_user/URTS1))
+ (pad 5 smd rect (at 3.9878 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 186 "Net-(R9-Pad1)"))
+ (pad 6 smd rect (at 3.5052 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 173 /inout_user/UCTS0))
+ (pad 7 smd rect (at 2.9972 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 172 /inout_user/URXD0))
+ (pad 8 smd rect (at 2.4892 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 55 /inout_user/UTXD0))
+ (pad 9 smd rect (at 2.0066 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 51 /inout_user/URTS0))
+ (pad 10 smd rect (at 1.4986 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 132 /inout_user/CANTX))
+ (pad 11 smd rect (at 0.9906 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 31 /inout_user/CANRX))
+ (pad 12 smd rect (at 0.4826 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 28 /QSPI_CS3))
+ (pad 13 smd rect (at 0 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 60 /xilinx/QSPI_CS2))
+ (pad 14 smd rect (at -0.508 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 15 smd rect (at -1.016 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 16 smd rect (at -1.4986 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 158 /inout_user/QSPI_DIN))
+ (pad 17 smd rect (at -2.0066 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 156 /inout_user/QSPI_DOUT))
+ (pad 18 smd rect (at -2.5146 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 160 /inout_user/QSPI_SCLK))
+ (pad 19 smd rect (at -2.9972 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 162 /xilinx/QSPI_CS1))
+ (pad 20 smd rect (at -3.5052 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 161 /QSPI_CS0))
+ (pad 21 smd rect (at -4.0132 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 177 /inout_user/RCON-))
+ (pad 22 smd rect (at -4.4958 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 23 smd rect (at -5.0038 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 24 smd rect (at -5.5118 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 25 smd rect (at -5.9944 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 26 smd rect (at -7.747 -5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 23 /JTAG_EN))
+ (pad 27 smd rect (at -7.747 -5.4864) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 50 /inout_user/UCTS2))
+ (pad 28 smd rect (at -7.747 -5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 54 /inout_user/URXD2))
+ (pad 29 smd rect (at -7.747 -4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 174 /inout_user/UTXD2))
+ (pad 30 smd rect (at -7.747 -3.9878) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 52 /inout_user/URTS2))
+ (pad 31 smd rect (at -7.747 -3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 168 /DTIN2))
+ (pad 32 smd rect (at -7.747 -2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 171 /DTIN3))
+ (pad 33 smd rect (at -7.747 -2.4892) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 154 /inout_user/PWM3))
+ (pad 34 smd rect (at -7.747 -2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 35 smd rect (at -7.747 -1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 36 smd rect (at -7.747 -0.9906) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 167 /DTIN0))
+ (pad 37 smd rect (at -7.747 -0.4826) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 17 /DTIN1))
+ (pad 38 smd rect (at -7.747 0) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 153 /inout_user/PWM1))
+ (pad 39 smd rect (at -7.747 0.508) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 9 /CLKMOD1))
+ (pad 40 smd rect (at -7.747 1.016) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 8 /CLKMOD0))
+ (pad 41 smd rect (at -7.747 1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 42 smd rect (at -7.747 2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 43 smd rect (at -7.747 2.5146) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 157 /AN0))
+ (pad 44 smd rect (at -7.747 2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 159 /AN1))
+ (pad 45 smd rect (at -7.747 3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 2 /AN2))
+ (pad 46 smd rect (at -7.747 4.0132) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 3 /AN3))
+ (pad 47 smd rect (at -7.747 4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 111 GNDA))
+ (pad 48 smd rect (at -7.747 5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 111 GNDA))
+ (pad 49 smd rect (at -7.747 5.5118) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 110 /inout_user/VCCA))
+ (pad 50 smd rect (at -7.747 5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 110 /inout_user/VCCA))
+ (model SMD_Packages.3dshapes/VQFP-100.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3939999938011169 0.3939999938011169 0.4000000059604645))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SOT353 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E398)
+ (at 160.528 108.331)
+ (descr SOT353)
+ (path /46554FB5)
+ (attr smd)
+ (fp_text reference U2 (at 0.09906 0 90) (layer F.SilkS)
+ (effects (font (size 0.762 0.635) (thickness 0.127)))
+ )
+ (fp_text value 74AHC1G14 (at 0.09906 0 90) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.635) (thickness 0.127)))
+ )
+ (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.1524))
+ (pad 1 smd rect (at -1.016 -0.635) (size 0.508 0.3048) (layers Composant F.Paste F.Mask))
+ (pad 3 smd rect (at -1.016 0.635) (size 0.508 0.3048) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 5 smd rect (at 1.016 -0.635) (size 0.508 0.3048) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 2 smd rect (at -1.016 0) (size 0.508 0.3048) (layers Composant F.Paste F.Mask)
+ (net 109 "Net-(C15-Pad1)"))
+ (pad 4 smd rect (at 1.016 0.635) (size 0.508 0.3048) (layers Composant F.Paste F.Mask)
+ (net 137 "Net-(D1-Pad2)"))
+ (model TO_SOT_Packages_SMD.3dshapes/SOT-23-5.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.7 0.7 0.7))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO16E (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E3A4)
+ (at 186.69 77.851 270)
+ (descr "Module CMS SOJ 16 pins etroit")
+ (tags "CMS SOJ")
+ (path /47D80202/4652B22B)
+ (attr smd)
+ (fp_text reference U3 (at 0 -0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_text value MAX202 (at 0 0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_line (start -5.461 -1.778) (end 5.461 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.461 -1.778) (end 5.461 1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.461 1.778) (end -5.461 1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.461 1.778) (end -5.461 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.461 -0.508) (end -4.699 -0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.699 -0.508) (end -4.699 0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.699 0.508) (end -5.461 0.508) (layer F.SilkS) (width 0.2032))
+ (pad 1 smd rect (at -4.445 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 113 "Net-(C24-Pad1)"))
+ (pad 2 smd rect (at -3.175 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 112 "Net-(C23-Pad2)"))
+ (pad 3 smd rect (at -1.905 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 114 "Net-(C24-Pad2)"))
+ (pad 4 smd rect (at -0.635 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 115 "Net-(C25-Pad1)"))
+ (pad 5 smd rect (at 0.635 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 116 "Net-(C25-Pad2)"))
+ (pad 6 smd rect (at 1.905 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 117 "Net-(C27-Pad1)"))
+ (pad 7 smd rect (at 3.175 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 39 /inout_user/RTS0))
+ (pad 8 smd rect (at 4.445 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 34 /inout_user/CTS0))
+ (pad 9 smd rect (at 4.445 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 197 "Net-(U3-Pad9)"))
+ (pad 10 smd rect (at 3.175 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 190 "Net-(R30-Pad2)"))
+ (pad 11 smd rect (at 1.905 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 198 "Net-(U3-Pad11)"))
+ (pad 12 smd rect (at 0.635 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 199 "Net-(U3-Pad12)"))
+ (pad 13 smd rect (at -0.635 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 42 /inout_user/RXD0))
+ (pad 14 smd rect (at -1.905 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 46 /inout_user/TXD0))
+ (pad 15 smd rect (at -3.175 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 16 smd rect (at -4.445 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SO-16-N.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.300000011920929 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO14E (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E3BE)
+ (at 100.203 117.602 270)
+ (descr "module CMS SOJ 14 pins etroit")
+ (tags "CMS SOJ")
+ (path /47D80202/4652B03E)
+ (attr smd)
+ (fp_text reference U4 (at 0 -0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_text value 74HC125 (at 0 1.016 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.127)))
+ )
+ (fp_line (start -4.826 -1.778) (end 4.826 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 4.826 -1.778) (end 4.826 2.032) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 4.826 2.032) (end -4.826 2.032) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.826 2.032) (end -4.826 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.826 -0.508) (end -4.064 -0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.064 -0.508) (end -4.064 0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.064 0.508) (end -4.826 0.508) (layer F.SilkS) (width 0.2032))
+ (pad 1 smd rect (at -3.81 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 149 "Net-(LED_EN1-Pad2)"))
+ (pad 2 smd rect (at -2.54 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 167 /DTIN0))
+ (pad 3 smd rect (at -1.27 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 189 "Net-(R28-Pad2)"))
+ (pad 4 smd rect (at 0 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 149 "Net-(LED_EN1-Pad2)"))
+ (pad 5 smd rect (at 1.27 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 17 /DTIN1))
+ (pad 6 smd rect (at 2.54 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 191 "Net-(R31-Pad2)"))
+ (pad 7 smd rect (at 3.81 2.794 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 8 smd rect (at 3.81 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 193 "Net-(R33-Pad2)"))
+ (pad 9 smd rect (at 2.54 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 171 /DTIN3))
+ (pad 10 smd rect (at 1.27 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 149 "Net-(LED_EN1-Pad2)"))
+ (pad 11 smd rect (at 0 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 192 "Net-(R32-Pad2)"))
+ (pad 12 smd rect (at -1.27 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 168 /DTIN2))
+ (pad 13 smd rect (at -2.54 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 149 "Net-(LED_EN1-Pad2)"))
+ (pad 14 smd rect (at -3.81 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SOIC-14_N.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.300000011920929 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO16E (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E3D6)
+ (at 158.75 77.851 270)
+ (descr "Module CMS SOJ 16 pins etroit")
+ (tags "CMS SOJ")
+ (path /47D80202/4652B4C1)
+ (attr smd)
+ (fp_text reference U5 (at 0 -0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_text value MAX202 (at 0 0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_line (start -5.461 -1.778) (end 5.461 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.461 -1.778) (end 5.461 1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.461 1.778) (end -5.461 1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.461 1.778) (end -5.461 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.461 -0.508) (end -4.699 -0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.699 -0.508) (end -4.699 0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.699 0.508) (end -5.461 0.508) (layer F.SilkS) (width 0.2032))
+ (pad 1 smd rect (at -4.445 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 119 "Net-(C31-Pad1)"))
+ (pad 2 smd rect (at -3.175 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 118 "Net-(C30-Pad2)"))
+ (pad 3 smd rect (at -1.905 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 120 "Net-(C31-Pad2)"))
+ (pad 4 smd rect (at -0.635 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 121 "Net-(C32-Pad1)"))
+ (pad 5 smd rect (at 0.635 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 122 "Net-(C32-Pad2)"))
+ (pad 6 smd rect (at 1.905 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 123 "Net-(C33-Pad1)"))
+ (pad 7 smd rect (at 3.175 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 40 /inout_user/RTS1))
+ (pad 8 smd rect (at 4.445 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 35 /inout_user/CTS1))
+ (pad 9 smd rect (at 4.445 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 200 "Net-(U5-Pad9)"))
+ (pad 10 smd rect (at 3.175 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 194 "Net-(R35-Pad2)"))
+ (pad 11 smd rect (at 1.905 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 201 "Net-(U5-Pad11)"))
+ (pad 12 smd rect (at 0.635 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 202 "Net-(U5-Pad12)"))
+ (pad 13 smd rect (at -0.635 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 43 /inout_user/RXD1))
+ (pad 14 smd rect (at -1.905 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 47 /inout_user/TXD1))
+ (pad 15 smd rect (at -3.175 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 16 smd rect (at -4.445 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SO-16-N.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.300000011920929 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO8E (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E3F0)
+ (at 105.918 88.392 90)
+ (descr "module CMS SOJ 8 pins etroit")
+ (tags "CMS SOJ")
+ (path /47D80202/4653FF97)
+ (attr smd)
+ (fp_text reference U7 (at 0 -0.889 90) (layer F.SilkS)
+ (effects (font (size 1.143 1.143) (thickness 0.1524)))
+ )
+ (fp_text value PCA82C251 (at 0 1.016 90) (layer F.SilkS)
+ (effects (font (size 0.889 0.889) (thickness 0.1524)))
+ )
+ (fp_line (start -2.667 1.778) (end -2.667 1.905) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.667 1.905) (end 2.667 1.905) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.667 -1.905) (end -2.667 -1.905) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.667 -1.905) (end -2.667 1.778) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.667 -0.508) (end -2.159 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.159 -0.508) (end -2.159 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.159 0.508) (end -2.667 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.667 -1.905) (end 2.667 1.905) (layer F.SilkS) (width 0.127))
+ (pad 8 smd rect (at -1.905 -2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 195 "Net-(R36-Pad1)"))
+ (pad 1 smd rect (at -1.905 2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 49 /inout_user/TxD_CAN))
+ (pad 7 smd rect (at -0.635 -2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 32 /inout_user/CAN_H))
+ (pad 6 smd rect (at 0.635 -2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 33 /inout_user/CAN_L))
+ (pad 5 smd rect (at 1.905 -2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 203 "Net-(U7-Pad5)"))
+ (pad 2 smd rect (at -0.635 2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 3 smd rect (at 0.635 2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 4 smd rect (at 1.905 2.667 90) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 45 /inout_user/RxD_CAN))
+ (model SMD_Packages.3dshapes/SOIC-8-N.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.3199999928474426 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO16E (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E403)
+ (at 125.73 77.851 270)
+ (descr "Module CMS SOJ 16 pins etroit")
+ (tags "CMS SOJ")
+ (path /47D80202/4652B4D3)
+ (attr smd)
+ (fp_text reference U8 (at 0 -0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_text value MAX202 (at 0 0.762 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.143) (thickness 0.127)))
+ )
+ (fp_line (start -5.461 -1.778) (end 5.461 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.461 -1.778) (end 5.461 1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.461 1.778) (end -5.461 1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.461 1.778) (end -5.461 -1.778) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.461 -0.508) (end -4.699 -0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.699 -0.508) (end -4.699 0.508) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -4.699 0.508) (end -5.461 0.508) (layer F.SilkS) (width 0.2032))
+ (pad 1 smd rect (at -4.445 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 129 "Net-(C44-Pad1)"))
+ (pad 2 smd rect (at -3.175 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 124 "Net-(C35-Pad2)"))
+ (pad 3 smd rect (at -1.905 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 130 "Net-(C44-Pad2)"))
+ (pad 4 smd rect (at -0.635 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 125 "Net-(C36-Pad1)"))
+ (pad 5 smd rect (at 0.635 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 126 "Net-(C36-Pad2)"))
+ (pad 6 smd rect (at 1.905 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 131 "Net-(C45-Pad1)"))
+ (pad 7 smd rect (at 3.175 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 136 "Net-(COM_SEL3-Pad3)"))
+ (pad 8 smd rect (at 4.445 2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 135 "Net-(COM_SEL2-Pad3)"))
+ (pad 9 smd rect (at 4.445 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 204 "Net-(U8-Pad9)"))
+ (pad 10 smd rect (at 3.175 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 205 "Net-(U8-Pad10)"))
+ (pad 11 smd rect (at 1.905 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 188 "Net-(R23-Pad2)"))
+ (pad 12 smd rect (at 0.635 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 206 "Net-(U8-Pad12)"))
+ (pad 13 smd rect (at -0.635 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 134 "Net-(COM_SEL1-Pad3)"))
+ (pad 14 smd rect (at -1.905 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 41 /inout_user/RTS2))
+ (pad 15 smd rect (at -3.175 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 16 smd rect (at -4.445 -2.54 270) (size 0.508 1.143) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (model SMD_Packages.3dshapes/SO-16-N.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.300000011920929 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:TQFP144 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E41D)
+ (at 201.93 111.76)
+ (path /47D80204/470F38BE)
+ (attr smd)
+ (fp_text reference U9 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value XCR3256-TQ144 (at 0 1.905) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_circle (center 8.255 -8.255) (end 8.255 -8.89) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.636 -9.398) (end 8.8646 -9.398) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.8646 -9.398) (end 8.8646 -10.16) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.636 -10.16) (end 8.636 -9.398) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.525 -10.16) (end -10.16 -9.525) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 -9.525) (end -10.16 9.525) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 9.525) (end -9.525 10.16) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.525 10.16) (end 9.525 10.16) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.525 10.16) (end 10.16 9.525) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 9.525) (end 10.16 -9.525) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 -9.525) (end 9.525 -10.16) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.525 -10.16) (end -9.525 -10.16) (layer F.SilkS) (width 0.3048))
+ (pad 1 smd rect (at 8.7503 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 81 /xilinx/XIL_D23))
+ (pad 2 smd rect (at 8.2423 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 96 /xilinx/XIL_D4))
+ (pad 3 smd rect (at 7.747 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 4 smd rect (at 7.2517 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 62 /xilinx/TDI))
+ (pad 5 smd rect (at 6.7437 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 80 /xilinx/XIL_D22))
+ (pad 6 smd rect (at 6.2484 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 78 /xilinx/XIL_D20))
+ (pad 7 smd rect (at 5.7531 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 77 /xilinx/XIL_D2))
+ (pad 8 smd rect (at 5.2451 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 88 /xilinx/XIL_D3))
+ (pad 9 smd rect (at 4.7498 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 10 smd rect (at 4.2545 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 79 /xilinx/XIL_D21))
+ (pad 11 smd rect (at 3.7465 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 66 /xilinx/XIL_D1))
+ (pad 12 smd rect (at 3.2512 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 65 /xilinx/XIL_D0))
+ (pad 13 smd rect (at 2.7559 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 14 smd rect (at 2.2479 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 15 smd rect (at 1.7526 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 16 smd rect (at 1.2573 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 17 smd rect (at 0.7493 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 18 smd rect (at 0.254 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 19 smd rect (at -0.254 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 20 smd rect (at -0.7493 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 64 /xilinx/TMS))
+ (pad 21 smd rect (at -1.2573 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 22 smd rect (at -1.7526 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 23 smd rect (at -2.2479 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 24 smd rect (at -2.7559 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 25 smd rect (at -3.2512 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 26 smd rect (at -3.7465 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 27 smd rect (at -4.2545 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 59 /xilinx/LED_TEST2))
+ (pad 28 smd rect (at -4.7498 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 58 /xilinx/LED_TEST1))
+ (pad 29 smd rect (at -5.2451 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 30 smd rect (at -5.7531 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 31 smd rect (at -6.2484 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 179 "Net-(P3-Pad4)"))
+ (pad 32 smd rect (at -6.7437 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 178 "Net-(P3-Pad2)"))
+ (pad 33 smd rect (at -7.2517 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 34 smd rect (at -7.747 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 35 smd rect (at -8.2423 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 36 smd rect (at -8.7503 -10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 66 smd rect (at -10.9855 5.7531) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 67 smd rect (at -10.9855 6.2484) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 68 smd rect (at -10.9855 6.7437) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 69 smd rect (at -10.9855 7.2517) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 70 smd rect (at -10.9855 7.747) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 71 smd rect (at -10.9855 8.2423) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 72 smd rect (at -10.9855 8.7503) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 114 smd rect (at 10.9855 6.2484) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 69 /xilinx/XIL_D12))
+ (pad 115 smd rect (at 10.9855 5.7531) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 116 smd rect (at 10.9855 5.2451) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 90 /xilinx/XIL_D31))
+ (pad 117 smd rect (at 10.9855 4.7498) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 87 /xilinx/XIL_D29))
+ (pad 118 smd rect (at 10.9855 4.2545) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 89 /xilinx/XIL_D30))
+ (pad 119 smd rect (at 10.9855 3.7465) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 68 /xilinx/XIL_D11))
+ (pad 120 smd rect (at 10.9855 3.2512) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 121 smd rect (at 10.9855 2.7559) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 122 smd rect (at 10.9855 2.2479) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 67 /xilinx/XIL_D10))
+ (pad 123 smd rect (at 10.9855 1.7526) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 124 smd rect (at 10.9855 1.2573) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 125 smd rect (at 10.9855 0.7493) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 126 smd rect (at 10.9855 0.254) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 127 smd rect (at 10.9855 -0.254) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 128 smd rect (at 10.9855 -0.7493) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 57 /xilinx/GLCK2))
+ (pad 129 smd rect (at 10.9855 -1.2573) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 130 smd rect (at 10.9855 -1.7526) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 131 smd rect (at 10.9855 -2.2479) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 101 /xilinx/XIL_D9))
+ (pad 132 smd rect (at 10.9855 -2.7559) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 86 /xilinx/XIL_D28))
+ (pad 133 smd rect (at 10.9855 -3.2512) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 134 smd rect (at 10.9855 -3.7465) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 85 /xilinx/XIL_D27))
+ (pad 135 smd rect (at 10.9855 -4.2545) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 136 smd rect (at 10.9855 -4.7498) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 100 /xilinx/XIL_D8))
+ (pad 137 smd rect (at 10.9855 -5.2451) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 84 /xilinx/XIL_D26))
+ (pad 138 smd rect (at 10.9855 -5.7531) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 99 /xilinx/XIL_D7))
+ (pad 139 smd rect (at 10.9855 -6.2484) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 83 /xilinx/XIL_D25))
+ (pad 140 smd rect (at 10.9855 -6.7437) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 98 /xilinx/XIL_D6))
+ (pad 141 smd rect (at 10.9855 -7.2517) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 142 smd rect (at 10.9855 -7.747) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 82 /xilinx/XIL_D24))
+ (pad 143 smd rect (at 10.9855 -8.2423) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 97 /xilinx/XIL_D5))
+ (pad 144 smd rect (at 10.9855 -8.7503) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 37 smd rect (at -10.9855 -8.7503) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 38 smd rect (at -10.9855 -8.2423) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 39 smd rect (at -10.9855 -7.747) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 40 smd rect (at -10.9855 -7.2517) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 41 smd rect (at -10.9855 -6.7437) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 42 smd rect (at -10.9855 -6.2484) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 150 /xilinx/IRQ-1))
+ (pad 43 smd rect (at -10.9855 -5.7531) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 155 /xilinx/IRQ-2))
+ (pad 44 smd rect (at -10.9855 -5.2451) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 164 /xilinx/IRQ-3))
+ (pad 45 smd rect (at -10.9855 -4.7498) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 60 /xilinx/QSPI_CS2))
+ (pad 46 smd rect (at -10.9855 -4.2545) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 158 /inout_user/QSPI_DIN))
+ (pad 47 smd rect (at -10.9855 -3.7465) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 156 /inout_user/QSPI_DOUT))
+ (pad 48 smd rect (at -10.9855 -3.2512) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 160 /inout_user/QSPI_SCLK))
+ (pad 49 smd rect (at -10.9855 -2.7559) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 151 /inout_user/UCTS1))
+ (pad 50 smd rect (at -10.9855 -2.2479) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 51 smd rect (at -10.9855 -1.7526) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 52 smd rect (at -10.9855 -1.2573) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 53 smd rect (at -10.9855 -0.7493) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 170 /inout_user/URTS1))
+ (pad 54 smd rect (at -10.9855 -0.254) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 162 /xilinx/QSPI_CS1))
+ (pad 55 smd rect (at -10.9855 0.254) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 56 smd rect (at -10.9855 0.7493) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 57 smd rect (at -10.9855 1.2573) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 58 smd rect (at -10.9855 1.7526) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 59 smd rect (at -10.9855 2.2479) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 60 smd rect (at -10.9855 2.7559) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 61 smd rect (at -10.9855 3.2512) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 62 smd rect (at -10.9855 3.7465) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 63 smd rect (at -10.9855 4.2545) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 64 smd rect (at -10.9855 4.7498) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 65 smd rect (at -10.9855 5.2451) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 78 smd rect (at -6.2484 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 79 smd rect (at -5.7531 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 80 smd rect (at -5.2451 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 81 smd rect (at -4.7498 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 82 smd rect (at -4.2545 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 83 smd rect (at -3.7465 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 84 smd rect (at -3.2512 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 85 smd rect (at -2.7559 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 86 smd rect (at -2.2479 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 87 smd rect (at -1.7526 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 88 smd rect (at -1.2573 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 89 smd rect (at -0.7493 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 61 /xilinx/TCK))
+ (pad 90 smd rect (at -0.254 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 91 smd rect (at 0.254 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 92 smd rect (at 0.7493 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 93 smd rect (at 1.2573 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 94 smd rect (at 1.7526 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 95 smd rect (at 2.2479 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 96 smd rect (at 2.7559 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 76 /xilinx/XIL_D19))
+ (pad 97 smd rect (at 3.2512 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 75 /xilinx/XIL_D18))
+ (pad 98 smd rect (at 3.7465 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 91 /xilinx/XIL_D32))
+ (pad 99 smd rect (at 4.2545 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 95 /xilinx/XIL_D36))
+ (pad 100 smd rect (at 4.7498 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 73 /xilinx/XIL_D16))
+ (pad 101 smd rect (at 5.2451 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 74 /xilinx/XIL_D17))
+ (pad 102 smd rect (at 5.7531 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 103 smd rect (at 6.2484 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 104 smd rect (at 6.7437 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 63 /xilinx/TDO))
+ (pad 105 smd rect (at 7.2517 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 106 smd rect (at 7.747 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 107 smd rect (at 8.2423 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 94 /xilinx/XIL_D35))
+ (pad 108 smd rect (at 8.7503 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 72 /xilinx/XIL_D15))
+ (pad 73 smd rect (at -8.7503 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 74 smd rect (at -8.2423 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 75 smd rect (at -7.747 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 76 smd rect (at -7.2517 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 77 smd rect (at -6.7437 10.9855) (size 0.254 1.524) (layers Composant F.Paste F.Mask))
+ (pad 109 smd rect (at 10.9855 8.7503) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 71 /xilinx/XIL_D14))
+ (pad 110 smd rect (at 10.9855 8.2423) (size 1.524 0.254) (layers Composant F.Paste F.Mask))
+ (pad 111 smd rect (at 10.9855 7.747) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 70 /xilinx/XIL_D13))
+ (pad 112 smd rect (at 10.9855 7.2517) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 92 /xilinx/XIL_D33))
+ (pad 113 smd rect (at 10.9855 6.7437) (size 1.524 0.254) (layers Composant F.Paste F.Mask)
+ (net 93 /xilinx/XIL_D34))
+ (model SMD_Packages.3dshapes/TQFP-144.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3939999938011169 0.3939999938011169 0.4000000059604645))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:DB9FC (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E4BC)
+ (at 189.103 67.31)
+ (descr "Connecteur DB9 femelle couche")
+ (tags "CONN DB9")
+ (path /47D80202/4652B26D)
+ (fp_text reference UARTCAN0 (at 1.27 -10.16) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9 (at 1.27 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 12.827 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -12.573 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 207 "Net-(UARTCAN0-Pad1)"))
+ (pad 2 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 46 /inout_user/TXD0))
+ (pad 3 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 42 /inout_user/RXD0))
+ (pad 4 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 207 "Net-(UARTCAN0-Pad1)"))
+ (pad 5 thru_hole circle (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 6 thru_hole circle (at -4.064 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 207 "Net-(UARTCAN0-Pad1)"))
+ (pad 7 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /inout_user/CTS0))
+ (pad 8 thru_hole circle (at 1.397 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 39 /inout_user/RTS0))
+ (pad 9 thru_hole circle (at 4.191 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (model Connect.3dshapes/DB9FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:DB9FC (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E4D4)
+ (at 155.575 67.31)
+ (descr "Connecteur DB9 femelle couche")
+ (tags "CONN DB9")
+ (path /47D80202/4652B4C2)
+ (fp_text reference UARTCAN1 (at 1.27 -10.16) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9 (at 1.27 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 12.827 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -12.573 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 208 "Net-(UARTCAN1-Pad1)"))
+ (pad 2 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 47 /inout_user/TXD1))
+ (pad 3 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 43 /inout_user/RXD1))
+ (pad 4 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 208 "Net-(UARTCAN1-Pad1)"))
+ (pad 5 thru_hole circle (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 6 thru_hole circle (at -4.064 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 208 "Net-(UARTCAN1-Pad1)"))
+ (pad 7 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 35 /inout_user/CTS1))
+ (pad 8 thru_hole circle (at 1.397 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 40 /inout_user/RTS1))
+ (pad 9 thru_hole circle (at 4.191 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (model Connect.3dshapes/DB9FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:DB9FC (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E4EC)
+ (at 122.047 67.31)
+ (descr "Connecteur DB9 femelle couche")
+ (tags "CONN DB9")
+ (path /47D80202/4652B4D4)
+ (fp_text reference UARTCAN2 (at 1.27 -10.16) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9 (at 1.27 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 12.827 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -12.573 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 209 "Net-(UARTCAN2-Pad1)"))
+ (pad 2 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 48 /inout_user/TXD2/CANL))
+ (pad 3 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 44 /inout_user/RXD2))
+ (pad 4 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 209 "Net-(UARTCAN2-Pad1)"))
+ (pad 5 thru_hole circle (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 6 thru_hole circle (at -4.064 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 209 "Net-(UARTCAN2-Pad1)"))
+ (pad 7 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /inout_user/CTS2/CANH))
+ (pad 8 thru_hole circle (at 1.397 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 41 /inout_user/RTS2))
+ (pad 9 thru_hole circle (at 4.191 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (model Connect.3dshapes/DB9FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_4x2 (layer Composant) (tedit 3FAB90E6) (tstamp 53D8E504)
+ (at 198.755 78.359 270)
+ (descr "Double rangee de contacts 2 x 4 pins")
+ (tags CONN)
+ (path /47D80202/4652B289)
+ (fp_text reference UART_EN0 (at 0 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_4X2 (at 0 3.81 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 198 "Net-(U3-Pad11)"))
+ (pad 2 thru_hole circle (at -3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 55 /inout_user/UTXD0))
+ (pad 3 thru_hole circle (at -1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 199 "Net-(U3-Pad12)"))
+ (pad 4 thru_hole circle (at -1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 172 /inout_user/URXD0))
+ (pad 5 thru_hole circle (at 1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 190 "Net-(R30-Pad2)"))
+ (pad 6 thru_hole circle (at 1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 51 /inout_user/URTS0))
+ (pad 7 thru_hole circle (at 3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 197 "Net-(U3-Pad9)"))
+ (pad 8 thru_hole circle (at 3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 173 /inout_user/UCTS0))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x04.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_4x2 (layer Composant) (tedit 3FAB90E6) (tstamp 53D8E513)
+ (at 170.815 78.359 270)
+ (descr "Double rangee de contacts 2 x 4 pins")
+ (tags CONN)
+ (path /47D80202/4652B4C3)
+ (fp_text reference UART_EN1 (at 0 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_4X2 (at 0 3.81 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 201 "Net-(U5-Pad11)"))
+ (pad 2 thru_hole circle (at -3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 169 /inout_user/UTXD1))
+ (pad 3 thru_hole circle (at -1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 202 "Net-(U5-Pad12)"))
+ (pad 4 thru_hole circle (at -1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 53 /inout_user/URXD1))
+ (pad 5 thru_hole circle (at 1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 194 "Net-(R35-Pad2)"))
+ (pad 6 thru_hole circle (at 1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 170 /inout_user/URTS1))
+ (pad 7 thru_hole circle (at 3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 200 "Net-(U5-Pad9)"))
+ (pad 8 thru_hole circle (at 3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 151 /inout_user/UCTS1))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x04.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:pin_array_4x2 (layer Composant) (tedit 3FAB90E6) (tstamp 53D8E522)
+ (at 137.033 78.359 270)
+ (descr "Double rangee de contacts 2 x 4 pins")
+ (tags CONN)
+ (path /47D80202/4652B4D5)
+ (fp_text reference UART_EN2 (at 0 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_4X2 (at 0 3.81 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 205 "Net-(U8-Pad10)"))
+ (pad 2 thru_hole circle (at -3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 174 /inout_user/UTXD2))
+ (pad 3 thru_hole circle (at -1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 204 "Net-(U8-Pad9)"))
+ (pad 4 thru_hole circle (at -1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 54 /inout_user/URXD2))
+ (pad 5 thru_hole circle (at 1.27 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 188 "Net-(R23-Pad2)"))
+ (pad 6 thru_hole circle (at 1.27 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 52 /inout_user/URTS2))
+ (pad 7 thru_hole circle (at 3.81 1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 206 "Net-(U8-Pad12)"))
+ (pad 8 thru_hole circle (at 3.81 -1.27 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 50 /inout_user/UCTS2))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x04.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8E531)
+ (at 113.792 109.855)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /46238079)
+ (fp_text reference VDDA1 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 142 "Net-(L1-Pad1)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:DPAK5 (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E53A)
+ (at 78.105 93.091)
+ (tags "CMS DPACK")
+ (path /47D80202/46603376)
+ (fp_text reference VR1 (at 0 -14.224) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.1524)))
+ )
+ (fp_text value LT1129_QPACK (at 0 -3.302) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.1524)))
+ )
+ (fp_line (start 2.794 -2.413) (end 2.794 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 4.064 1.27) (end 4.064 -2.413) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.143 -2.413) (end 1.143 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.143 1.27) (end 2.413 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.413 1.27) (end 2.413 -2.413) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.635 -2.413) (end -0.635 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.635 1.27) (end 0.635 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.635 1.27) (end 0.635 -2.413) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.286 -2.413) (end -2.286 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.286 1.27) (end -1.143 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.143 1.27) (end -1.016 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.016 1.27) (end -1.016 -2.413) (layer F.SilkS) (width 0.127))
+ (fp_line (start -4.064 -2.413) (end -4.064 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -4.064 1.27) (end -2.794 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.27) (end -2.794 -2.413) (layer F.SilkS) (width 0.127))
+ (fp_line (start -5.334 -2.413) (end 5.334 -2.413) (layer F.SilkS) (width 0.127))
+ (fp_line (start 5.334 -2.413) (end 5.334 -12.573) (layer F.SilkS) (width 0.127))
+ (fp_line (start 5.334 -12.573) (end -5.334 -12.573) (layer F.SilkS) (width 0.127))
+ (fp_line (start -5.334 -12.573) (end -5.334 -2.413) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -3.4036 0) (size 1.0668 2.286) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 3 smd rect (at 0 -8.763) (size 10.668 8.89) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 3 smd rect (at 0 0) (size 1.0668 2.286) (layers Composant F.Paste F.Mask)
+ (net 102 GND))
+ (pad 2 smd rect (at -1.7018 0) (size 1.0668 2.286) (layers Composant F.Paste F.Mask)
+ (net 104 VDD))
+ (pad 4 smd rect (at 1.7018 0) (size 1.0668 2.286) (layers Composant F.Paste F.Mask))
+ (pad 5 smd rect (at 3.4036 0) (size 1.0668 2.286) (layers Composant F.Paste F.Mask)
+ (net 127 "Net-(C38-Pad1)"))
+ (model ${KIPRJMOD}/prj.3dshapes/dpack_5.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E557)
+ (at 103.124 84.582 270)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /47D80202/4654003D)
+ (fp_text reference VREF1 (at 0 -1.26746 270) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27 270) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0 270) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 203 "Net-(U7-Pad5)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 53D8E55C)
+ (at 183.134 130.302)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /47D80202/4652A9C4)
+ (fp_text reference VX_EN1 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value JUMPER (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 128 "Net-(C43-Pad2)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:HC-18UH (layer Composant) (tedit 53D8D2B1) (tstamp 53D8E565)
+ (at 123.444 123.317 270)
+ (descr "Quartz boitier HC-18 horizontal")
+ (tags "QUARTZ DEV")
+ (path /462389C7)
+ (fp_text reference Y1 (at 0 6.35 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 8MHz (at 0 11.43 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 2.794) (end -6.35 2.794) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.842 2.794) (end 5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 2.794) (end -6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 2.794) (end 6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 2.032) (end -6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 0) (end -2.54 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 0) (end 2.54 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.842 2.794) (end -5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.842 15.24) (end 5.334 15.748) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.334 15.748) (end -5.334 15.748) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.334 15.748) (end -5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /CLKIN/EXTAL))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 57 /xilinx/GLCK2))
+ (model Crystals.3dshapes/HC-18UH.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:SW_PUSH_SMALL (layer Composant) (tedit 53DD02BA) (tstamp 53D8DC13)
+ (at 172.339 100.33)
+ (path /46237F50)
+ (fp_text reference ABRT_SW1 (at 0 -0.762) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value SW_PUSH (at 0 1.016) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.54) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end 3.81 -3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 -3.81) (end 3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 3.81 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 103 "Net-(ABRT_SW1-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (pad 1 thru_hole circle (at -3.81 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 103 "Net-(ABRT_SW1-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 104 VDD))
+ (model ${KIPRJMOD}/prj.3dshapes/push_butt_4pads.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1.17 1.17 1.17))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module discret:SW_PUSH_SMALL (layer Composant) (tedit 53DD02BA) (tstamp 53D8E2D5)
+ (at 172.339 89.789 180)
+ (path /465451D4)
+ (fp_text reference RST_SW1 (at 0 -0.762 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value SW_PUSH (at 0 1.016 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.54) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end 3.81 -3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 -3.81) (end 3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 3.81 -2.54 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 108 "Net-(C3-Pad1)"))
+ (pad 2 thru_hole circle (at 3.81 2.54 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 1 thru_hole circle (at -3.81 -2.54 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 108 "Net-(C3-Pad1)"))
+ (pad 2 thru_hole circle (at -3.81 2.54 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model ${KIPRJMOD}/prj.3dshapes/push_butt_4pads.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1.17 1.17 1.17))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module discret:SW_PUSH_SMALL (layer Composant) (tedit 53DD02BA) (tstamp 53D8E2E1)
+ (at 172.339 110.617)
+ (path /47D80202/4652DDDF)
+ (fp_text reference SW1 (at 0 -0.762) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value SW_PUSH (at 0 1.016) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.54) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end 3.81 -3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 -3.81) (end 3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 3.81 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 166 /IRQ-4))
+ (pad 2 thru_hole circle (at 3.81 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 1 thru_hole circle (at -3.81 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 166 /IRQ-4))
+ (pad 2 thru_hole circle (at -3.81 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model ${KIPRJMOD}/prj.3dshapes/push_butt_4pads.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1.17 1.17 1.17))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module discret:SW_PUSH_SMALL (layer Composant) (tedit 53DD02BA) (tstamp 53D8E2ED)
+ (at 172.466 122.301)
+ (path /47D80202/4652DDE7)
+ (fp_text reference SW2 (at 0 -0.762) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value SW_PUSH (at 0 1.016) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.54) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end 3.81 -3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 -3.81) (end 3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.81 3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.81 -3.81) (end -3.81 3.81) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 3.81 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /IRQ-5))
+ (pad 2 thru_hole circle (at 3.81 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (pad 1 thru_hole circle (at -3.81 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /IRQ-5))
+ (pad 2 thru_hole circle (at -3.81 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 GND))
+ (model ${KIPRJMOD}/prj.3dshapes/push_butt_4pads.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1.17 1.17 1.17))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (target plus (at 231.00792 53.75656) (size 5) (width 0.381) (layer Edge.Cuts))
+ (target plus (at 68.95592 148.86432) (size 5) (width 0.381) (layer Edge.Cuts))
+ (gr_text "CARTE COLDFIRE" (at 213.995 58.42) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "CARTE COLDFIRE" (at 213.995 58.42) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_line (start 71.12 147.32) (end 228.6 147.32) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 71.12 55.88) (end 71.12 147.32) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 228.6 55.88) (end 71.12 55.88) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 228.6 55.88) (end 228.6 147.32) (angle 90) (layer Edge.Cuts) (width 0.381))
+
+ (segment (start 152.019 102.489) (end 143.129 102.4636) (width 0.254) (layer Composant) (net 1) (status C30))
+ (segment (start 129.54 104.521) (end 129.921 104.14) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 128.8034 104.9782) (end 127.635 104.9782) (width 0.254) (layer Composant) (net 2) (status 420))
+ (segment (start 170.561 140.843) (end 169.164 139.446) (width 0.254) (layer VDD_layer) (net 2) (status 420))
+ (segment (start 174.879 140.843) (end 170.561 140.843) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 175.514 140.208) (end 174.879 140.843) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 175.514 133.604) (end 175.514 140.208) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 168.402 126.492) (end 175.514 133.604) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 146.812 126.492) (end 168.402 126.492) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 143.383 123.063) (end 146.812 126.492) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 136.398 123.063) (end 143.383 123.063) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 134.874 121.539) (end 136.398 123.063) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 134.874 113.919) (end 134.874 121.539) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 132.842 111.887) (end 134.874 113.919) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 132.842 105.156) (end 132.842 111.887) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 129.921 104.14) (end 131.826 104.14) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 129.54 105.41) (end 129.032 105.156) (width 0.254) (layer Composant) (net 2))
+ (segment (start 129.032 105.156) (end 128.8034 104.9782) (width 0.254) (layer Composant) (net 2))
+ (via (at 129.54 105.41) (size 0.635) (layers Composant Cuivre) (net 2))
+ (segment (start 129.54 105.41) (end 129.54 104.521) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 131.826 104.14) (end 132.842 105.156) (width 0.254) (layer VDD_layer) (net 2))
+ (segment (start 165.481 124.714) (end 165.481 124.841) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 146.939 124.714) (end 165.481 124.714) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 145.796 123.571) (end 146.939 124.714) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 145.796 122.555) (end 145.796 123.571) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 143.764 120.523) (end 145.796 122.555) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 139.192 120.523) (end 143.764 120.523) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 138.303 121.412) (end 139.192 120.523) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 136.017 121.412) (end 138.303 121.412) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 135.509 120.904) (end 136.017 121.412) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 135.509 113.157) (end 135.509 120.904) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 129.54 106.299) (end 129.032 106.299) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 129.032 106.299) (end 128.651 105.918) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 128.651 105.918) (end 128.651 104.394) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 129.032 105.918) (end 129.54 106.299) (width 0.254) (layer Composant) (net 3))
+ (segment (start 128.905 105.664) (end 129.032 105.918) (width 0.254) (layer Composant) (net 3))
+ (segment (start 128.6764 105.4862) (end 128.905 105.664) (width 0.254) (layer Composant) (net 3))
+ (segment (start 127.635 105.4862) (end 128.6764 105.4862) (width 0.254) (layer Composant) (net 3) (status 810))
+ (segment (start 168.783 141.605) (end 166.624 139.446) (width 0.254) (layer VDD_layer) (net 3) (status 420))
+ (segment (start 132.207 103.632) (end 133.35 104.775) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 176.911 141.605) (end 168.783 141.605) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 178.054 140.462) (end 176.911 141.605) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 178.054 133.604) (end 178.054 140.462) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 170.815 126.365) (end 178.054 133.604) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 170.815 124.46) (end 170.815 126.365) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 169.672 123.317) (end 170.815 124.46) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 167.005 123.317) (end 169.672 123.317) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 165.481 124.841) (end 167.005 123.317) (width 0.254) (layer VDD_layer) (net 3))
+ (via (at 129.54 106.299) (size 0.635) (layers Composant Cuivre) (net 3))
+ (segment (start 133.35 104.775) (end 133.35 110.998) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 133.35 110.998) (end 135.509 113.157) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 129.413 103.632) (end 132.207 103.632) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 128.651 104.394) (end 129.413 103.632) (width 0.254) (layer VDD_layer) (net 3))
+ (segment (start 164.084 139.446) (end 162.814 138.176) (width 0.254) (layer VDD_layer) (net 4) (status 810))
+ (segment (start 130.8862 107.6198) (end 131.064 107.442) (width 0.254) (layer Composant) (net 4))
+ (segment (start 131.064 107.442) (end 131.064 106.426) (width 0.254) (layer Composant) (net 4))
+ (segment (start 130.937 107.061) (end 131.064 106.934) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 131.064 106.934) (end 131.064 106.426) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 130.937 107.061) (end 130.937 114.681) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 130.937 114.681) (end 132.461 116.205) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 132.461 123.571) (end 132.461 116.205) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 139.573 130.683) (end 132.461 123.571) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 157.226 130.683) (end 139.573 130.683) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 162.814 136.271) (end 157.226 130.683) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 162.814 138.176) (end 162.814 136.271) (width 0.254) (layer VDD_layer) (net 4))
+ (segment (start 130.8862 107.6198) (end 130.8862 109.22) (width 0.254) (layer Composant) (net 4) (status 420))
+ (via (at 131.064 106.426) (size 0.635) (layers Composant Cuivre) (net 4))
+ (via (at 129.159 112.014) (size 0.889) (layers Composant Cuivre) (net 5))
+ (segment (start 129.159 112.014) (end 129.159 111.3) (width 0.254) (layer Composant) (net 5))
+ (segment (start 159.004 139.319) (end 157.734 138.049) (width 0.254) (layer Cuivre) (net 5) (status 10))
+ (segment (start 157.734 138.049) (end 157.734 136.017) (width 0.254) (layer Cuivre) (net 5))
+ (segment (start 157.734 136.017) (end 154.178 132.461) (width 0.254) (layer Cuivre) (net 5))
+ (segment (start 154.178 132.461) (end 138.43 132.461) (width 0.254) (layer Cuivre) (net 5))
+ (segment (start 138.43 132.461) (end 129.159 123.19) (width 0.254) (layer Cuivre) (net 5))
+ (segment (start 129.159 123.19) (end 129.159 112.014) (width 0.254) (layer Cuivre) (net 5))
+ (segment (start 159.004 139.446) (end 159.004 139.319) (width 0.254) (layer Cuivre) (net 5) (status 830))
+ (segment (start 129.413 110.617) (end 129.87528 110.15472) (width 0.254) (layer Composant) (net 5))
+ (segment (start 129.87528 110.15472) (end 129.8956 109.22) (width 0.254) (layer Composant) (net 5) (status 420))
+ (segment (start 129.159 110.871) (end 129.413 110.617) (width 0.254) (layer Composant) (net 5) (tstamp 53D8E6FD))
+ (segment (start 129.159 111.3) (end 129.159 110.871) (width 0.254) (layer Composant) (net 5))
+ (via (at 146.685 109.855) (size 0.889) (layers Composant Cuivre) (net 6))
+ (segment (start 83.566 106.299) (end 78.867 106.299) (width 0.254) (layer GND_layer) (net 6) (status 420))
+ (segment (start 82.3595 104.267) (end 80.899 104.267) (width 0.4318) (layer Composant) (net 6) (status 810))
+ (segment (start 80.899 104.267) (end 80.391 104.775) (width 0.4318) (layer Composant) (net 6))
+ (segment (start 83.566 106.299) (end 86.487 109.22) (width 0.254) (layer GND_layer) (net 6))
+ (segment (start 143.637 109.855) (end 146.685 109.855) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 141.732 111.76) (end 143.637 109.855) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 133.604 111.76) (end 141.732 111.76) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 132.461 110.617) (end 133.604 111.76) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 127.508 110.617) (end 132.461 110.617) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 125.476 112.649) (end 127.508 110.617) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 78.867 106.299) (end 80.391 104.775) (width 0.381) (layer Composant) (net 6) (status 810))
+ (segment (start 119.253 112.649) (end 125.476 112.649) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 87.63 112.141) (end 90.17 114.681) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 90.17 114.681) (end 94.361 114.681) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 86.487 109.22) (end 86.487 110.998) (width 0.254) (layer GND_layer) (net 6))
+ (segment (start 86.487 110.998) (end 87.63 112.141) (width 0.254) (layer GND_layer) (net 6))
+ (segment (start 145.288 108.204) (end 144.5514 107.4674) (width 0.254) (layer Composant) (net 6))
+ (segment (start 145.288 108.712) (end 145.288 108.204) (width 0.254) (layer Composant) (net 6))
+ (segment (start 146.431 109.855) (end 145.288 108.712) (width 0.254) (layer Composant) (net 6))
+ (segment (start 146.685 109.855) (end 146.431 109.855) (width 0.254) (layer Composant) (net 6))
+ (segment (start 117.729 114.173) (end 119.253 112.649) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 144.5514 107.4674) (end 143.129 107.4674) (width 0.254) (layer Composant) (net 6) (status 420))
+ (via (at 87.63 112.141) (size 0.889) (layers Composant Cuivre) (net 6))
+ (segment (start 94.361 114.681) (end 95.377 113.665) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 95.377 113.665) (end 97.917 113.665) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 97.917 113.665) (end 100.203 111.379) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 100.203 111.379) (end 107.696 111.379) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 107.696 111.379) (end 110.49 114.173) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 110.49 114.173) (end 117.729 114.173) (width 0.254) (layer Cuivre) (net 6))
+ (segment (start 141.224 114.554) (end 140.589 113.919) (width 0.381) (layer Composant) (net 7))
+ (segment (start 123.8885 120.3325) (end 123.444 120.777) (width 0.381) (layer Composant) (net 7) (status 430))
+ (via (at 142.621 116.205) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 128.27 120.3325) (end 123.8885 120.3325) (width 0.381) (layer Composant) (net 7) (status 830))
+ (segment (start 138.8745 116.7765) (end 139.446 116.205) (width 0.381) (layer Composant) (net 7))
+ (segment (start 136.652 116.7765) (end 138.8745 116.7765) (width 0.381) (layer Composant) (net 7) (status 810))
+ (segment (start 140.3858 111.0488) (end 140.589 111.379) (width 0.254) (layer Composant) (net 7))
+ (segment (start 140.3858 109.22) (end 140.3858 111.0488) (width 0.254) (layer Composant) (net 7) (status 810))
+ (segment (start 131.826 116.7765) (end 128.27 120.3325) (width 0.381) (layer Composant) (net 7) (status 420))
+ (segment (start 136.652 116.7765) (end 131.826 116.7765) (width 0.381) (layer Composant) (net 7) (status 810))
+ (segment (start 140.589 113.919) (end 140.589 111.379) (width 0.381) (layer Composant) (net 7))
+ (segment (start 139.446 116.205) (end 142.621 116.205) (width 0.381) (layer Cuivre) (net 7))
+ (segment (start 142.621 116.205) (end 142.621 115.316) (width 0.381) (layer Composant) (net 7))
+ (segment (start 142.621 115.316) (end 141.859 114.554) (width 0.381) (layer Composant) (net 7))
+ (segment (start 141.859 114.554) (end 141.224 114.554) (width 0.381) (layer Composant) (net 7))
+ (via (at 139.446 116.205) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 127.635 102.489) (end 126.492 102.489) (width 0.254) (layer Composant) (net 8) (status 810))
+ (segment (start 118.11 99.949) (end 116.586 98.425) (width 0.254) (layer Composant) (net 8))
+ (segment (start 116.586 98.425) (end 115.062 98.425) (width 0.254) (layer Composant) (net 8) (status 420))
+ (segment (start 115.062 98.425) (end 113.792 97.155) (width 0.254) (layer Composant) (net 8) (status 810))
+ (segment (start 113.792 97.155) (end 108.966 97.155) (width 0.254) (layer Composant) (net 8))
+ (segment (start 108.966 97.155) (end 107.188 98.933) (width 0.254) (layer Composant) (net 8))
+ (segment (start 107.188 98.933) (end 104.8385 98.933) (width 0.254) (layer Composant) (net 8) (status 420))
+ (segment (start 123.19 100.965) (end 122.174 99.949) (width 0.254) (layer Composant) (net 8))
+ (segment (start 122.174 99.949) (end 118.11 99.949) (width 0.254) (layer Composant) (net 8))
+ (segment (start 123.19 101.981) (end 123.19 100.965) (width 0.254) (layer Composant) (net 8))
+ (segment (start 123.444 102.235) (end 123.19 101.981) (width 0.254) (layer Composant) (net 8))
+ (segment (start 126.238 102.235) (end 123.444 102.235) (width 0.254) (layer Composant) (net 8))
+ (segment (start 126.492 102.489) (end 126.238 102.235) (width 0.254) (layer Composant) (net 8))
+ (segment (start 126.492 101.727) (end 124.587 101.727) (width 0.254) (layer Composant) (net 9))
+ (segment (start 122.809 99.949) (end 122.809 99.695) (width 0.254) (layer Composant) (net 9))
+ (segment (start 106.934 96.647) (end 104.8385 96.647) (width 0.254) (layer Composant) (net 9) (status 420))
+ (segment (start 108.966 94.615) (end 106.934 96.647) (width 0.254) (layer Composant) (net 9))
+ (segment (start 113.792 94.615) (end 108.966 94.615) (width 0.254) (layer Composant) (net 9))
+ (segment (start 115.062 95.885) (end 113.792 94.615) (width 0.254) (layer Composant) (net 9) (status 810))
+ (segment (start 118.618 99.441) (end 115.062 95.885) (width 0.254) (layer Composant) (net 9) (status 420))
+ (segment (start 122.555 99.441) (end 118.618 99.441) (width 0.254) (layer Composant) (net 9))
+ (segment (start 122.809 99.695) (end 122.555 99.441) (width 0.254) (layer Composant) (net 9))
+ (segment (start 124.587 101.727) (end 122.809 99.949) (width 0.254) (layer Composant) (net 9))
+ (segment (start 126.746 101.981) (end 126.492 101.727) (width 0.254) (layer Composant) (net 9))
+ (segment (start 127.635 101.981) (end 126.746 101.981) (width 0.254) (layer Composant) (net 9) (status 810))
+ (segment (start 122.936 103.632) (end 122.682 103.886) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 122.682 103.886) (end 120.523 103.886) (width 0.254) (layer Cuivre) (net 10))
+ (via (at 84.836 108.585) (size 0.635) (layers Composant Cuivre) (net 10))
+ (via (at 146.558 107.95) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 81.788 111.633) (end 84.836 108.585) (width 0.254) (layer GND_layer) (net 10))
+ (segment (start 81.788 125.984) (end 81.788 111.633) (width 0.254) (layer GND_layer) (net 10))
+ (segment (start 79.883 127.889) (end 81.788 125.984) (width 0.254) (layer GND_layer) (net 10))
+ (segment (start 77.597 127.889) (end 79.883 127.889) (width 0.254) (layer GND_layer) (net 10))
+ (segment (start 76.327 129.159) (end 77.597 127.889) (width 0.254) (layer GND_layer) (net 10) (status 810))
+ (segment (start 145.796 107.95) (end 146.558 107.95) (width 0.254) (layer Composant) (net 10))
+ (segment (start 144.907 107.061) (end 145.796 107.95) (width 0.254) (layer Composant) (net 10))
+ (segment (start 144.78 106.9594) (end 144.907 107.061) (width 0.254) (layer Composant) (net 10))
+ (segment (start 143.129 106.9594) (end 144.78 106.9594) (width 0.254) (layer Composant) (net 10) (status 810))
+ (segment (start 85.725 107.696) (end 84.836 108.585) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 108.6993 107.696) (end 85.725 107.696) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 120.523 103.886) (end 119.888 103.251) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 119.888 103.251) (end 116.84 103.251) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 116.84 103.251) (end 116.205 103.886) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 116.205 103.886) (end 116.205 105.664) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 116.205 105.664) (end 115.824 106.045) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 115.824 106.045) (end 110.3503 106.045) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 110.3503 106.045) (end 108.6993 107.696) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 132.842 103.632) (end 122.936 103.632) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 133.477 102.997) (end 132.842 103.632) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 134.493 102.997) (end 133.477 102.997) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 135.509 104.013) (end 134.493 102.997) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 137.16 104.013) (end 135.509 104.013) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 144.653 107.95) (end 144.526 107.823) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 144.526 107.823) (end 140.97 107.823) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 140.97 107.823) (end 137.16 104.013) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 146.558 107.95) (end 144.653 107.95) (width 0.254) (layer Cuivre) (net 10))
+ (segment (start 107.9881 107.188) (end 85.217 107.188) (width 0.254) (layer Cuivre) (net 11))
+ (via (at 83.82 108.585) (size 0.635) (layers Composant Cuivre) (net 11))
+ (segment (start 136.017 102.108) (end 128.651 102.108) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 128.651 102.108) (end 127.381 100.838) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 127.381 100.838) (end 118.237 100.838) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 118.237 100.838) (end 115.57 103.505) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 115.57 103.505) (end 111.6711 103.505) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 145.034 107.188) (end 145.542 106.68) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 141.097 107.188) (end 145.034 107.188) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 141.097 107.188) (end 136.017 102.108) (width 0.254) (layer Cuivre) (net 11))
+ (via (at 146.558 106.68) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 146.558 106.68) (end 145.542 106.68) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 143.129 106.4768) (end 145.2118 106.4768) (width 0.254) (layer Composant) (net 11) (status 810))
+ (segment (start 145.2118 106.4768) (end 145.415 106.68) (width 0.254) (layer Composant) (net 11))
+ (segment (start 145.415 106.68) (end 146.558 106.68) (width 0.254) (layer Composant) (net 11))
+ (segment (start 80.01 126.619) (end 78.867 126.619) (width 0.254) (layer GND_layer) (net 11) (status 420))
+ (segment (start 81.28 125.349) (end 80.01 126.619) (width 0.254) (layer GND_layer) (net 11))
+ (segment (start 81.28 111.125) (end 81.28 125.349) (width 0.254) (layer GND_layer) (net 11))
+ (segment (start 83.82 108.585) (end 81.28 111.125) (width 0.254) (layer GND_layer) (net 11))
+ (segment (start 85.217 107.188) (end 83.82 108.585) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 111.6711 103.505) (end 107.9881 107.188) (width 0.254) (layer Cuivre) (net 11))
+ (segment (start 131.572 100.203) (end 136.779 100.203) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 105.983 105.664) (end 83.566 105.664) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 139.827 103.378) (end 139.827 102.743) (width 0.254) (layer Composant) (net 12))
+ (segment (start 83.566 105.664) (end 81.788 107.442) (width 0.254) (layer Cuivre) (net 12))
+ (via (at 139.827 102.743) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 81.788 107.442) (end 81.788 108.585) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 81.788 108.585) (end 80.772 109.601) (width 0.254) (layer GND_layer) (net 12))
+ (segment (start 80.772 109.601) (end 80.772 124.206) (width 0.254) (layer GND_layer) (net 12))
+ (segment (start 80.772 124.206) (end 79.629 125.349) (width 0.254) (layer GND_layer) (net 12))
+ (segment (start 79.629 125.349) (end 77.597 125.349) (width 0.254) (layer GND_layer) (net 12))
+ (segment (start 77.597 125.349) (end 76.327 126.619) (width 0.254) (layer GND_layer) (net 12) (status 420))
+ (segment (start 111.571 100.076) (end 105.983 105.664) (width 0.254) (layer Cuivre) (net 12))
+ (via (at 81.788 108.585) (size 0.635) (layers Composant Cuivre) (net 12))
+ (segment (start 141.351 103.98252) (end 143.129 103.9622) (width 0.254) (layer Composant) (net 12) (status 420))
+ (segment (start 131.572 100.203) (end 129.667 98.298) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 129.667 98.298) (end 127.762 98.298) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 127.762 98.298) (end 126.111 96.647) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 126.111 96.647) (end 120.142 96.647) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 120.142 96.647) (end 116.713 100.076) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 116.713 100.076) (end 111.571 100.076) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 139.065 102.489) (end 139.573 102.489) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 139.573 102.489) (end 139.827 102.743) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 141.351 103.98252) (end 140.43152 103.98252) (width 0.254) (layer Composant) (net 12))
+ (segment (start 136.779 100.203) (end 139.065 102.489) (width 0.254) (layer Cuivre) (net 12))
+ (segment (start 140.43152 103.98252) (end 139.827 103.378) (width 0.254) (layer Composant) (net 12))
+ (segment (start 142.367 101.854) (end 142.367 102.87) (width 0.254) (layer Cuivre) (net 13))
+ (via (at 140.97 103.124) (size 0.889) (layers Composant Cuivre) (net 13))
+ (segment (start 142.113 103.124) (end 140.97 103.124) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 142.367 102.87) (end 142.113 103.124) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 141.4145 100.9015) (end 142.367 101.854) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 80.264 106.68) (end 82.296 104.648) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 82.296 104.648) (end 105.075 104.648) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 105.075 104.648) (end 110.998 98.725) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 110.998 98.725) (end 110.998 97.663) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 80.264 108.585) (end 80.264 122.682) (width 0.254) (layer GND_layer) (net 13))
+ (segment (start 110.998 97.663) (end 111.506 97.155) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 118.11 97.155) (end 119.634 95.631) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 119.634 95.631) (end 126.619 95.631) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 132.207 99.06) (end 137.541 99.06) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 130.429 97.282) (end 132.207 99.06) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 128.27 97.282) (end 130.429 97.282) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 126.619 95.631) (end 128.27 97.282) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 141.4145 100.9015) (end 139.3825 100.9015) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 139.3825 100.9015) (end 137.541 99.06) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 111.506 97.155) (end 118.11 97.155) (width 0.254) (layer Cuivre) (net 13))
+ (segment (start 140.97 103.124) (end 141.3002 103.4542) (width 0.254) (layer Composant) (net 13))
+ (segment (start 80.264 108.585) (end 80.264 106.68) (width 0.254) (layer Cuivre) (net 13))
+ (via (at 80.264 108.585) (size 0.635) (layers Composant Cuivre) (net 13))
+ (segment (start 80.264 122.682) (end 78.867 124.079) (width 0.254) (layer GND_layer) (net 13) (status 420))
+ (segment (start 141.3002 103.4542) (end 143.129 103.4796) (width 0.254) (layer Composant) (net 13) (status 420))
+ (segment (start 78.867 108.839) (end 79.756 109.347) (width 0.254) (layer Cuivre) (net 14) (status 810))
+ (segment (start 140.9065 101.7905) (end 140.97 101.854) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 79.756 109.347) (end 80.518 109.347) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 81.026 108.839) (end 81.026 106.807) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 81.026 106.807) (end 82.677 105.156) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 82.677 105.156) (end 105.629 105.156) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 105.629 105.156) (end 111.217 99.568) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 111.217 99.568) (end 116.459 99.568) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 116.459 99.568) (end 119.888 96.139) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 82.3595 106.553) (end 81.153 106.553) (width 0.4318) (layer Composant) (net 14) (status 810))
+ (segment (start 126.365 96.139) (end 128.016 97.79) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 128.016 97.79) (end 130.175 97.79) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 130.175 97.79) (end 131.953 99.568) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 131.953 99.568) (end 137.033 99.568) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 80.518 109.347) (end 81.026 108.839) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 81.153 106.553) (end 80.645 107.061) (width 0.4318) (layer Composant) (net 14))
+ (segment (start 78.867 108.839) (end 80.645 107.061) (width 0.381) (layer Composant) (net 14) (status 810))
+ (via (at 140.97 101.854) (size 0.889) (layers Composant Cuivre) (net 14))
+ (segment (start 140.9065 101.7905) (end 139.2555 101.7905) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 119.888 96.139) (end 126.365 96.139) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 139.2555 101.7905) (end 137.033 99.568) (width 0.254) (layer Cuivre) (net 14))
+ (segment (start 142.0876 102.9716) (end 143.129 102.9716) (width 0.254) (layer Composant) (net 14) (status 420))
+ (segment (start 140.97 101.854) (end 142.0876 102.9716) (width 0.254) (layer Composant) (net 14))
+ (segment (start 128.143 100.33) (end 129.159 101.346) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 117.221 101.092) (end 117.983 100.33) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 117.983 100.33) (end 128.143 100.33) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 136.398 101.346) (end 140.716 105.664) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 82.3595 119.126) (end 82.3595 117.4115) (width 0.4318) (layer Composant) (net 15) (status 810))
+ (segment (start 129.159 101.346) (end 136.398 101.346) (width 0.254) (layer Cuivre) (net 15))
+ (via (at 141.478 106.426) (size 0.889) (layers Composant Cuivre) (net 15))
+ (segment (start 141.478 106.426) (end 141.9352 105.9688) (width 0.254) (layer Composant) (net 15))
+ (segment (start 141.9352 105.9688) (end 143.129 105.9688) (width 0.254) (layer Composant) (net 15) (status 420))
+ (segment (start 140.716 105.664) (end 141.478 106.426) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 83.058 107.95) (end 84.328 106.68) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 82.3595 117.4115) (end 78.867 113.919) (width 0.4318) (layer Composant) (net 15) (status 420))
+ (segment (start 78.867 113.919) (end 79.248 113.03) (width 0.254) (layer Cuivre) (net 15) (status 810))
+ (segment (start 79.248 113.03) (end 83.058 109.22) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 83.058 109.22) (end 83.058 107.95) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 84.328 106.68) (end 107.2007 106.68) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 107.2007 106.68) (end 112.7887 101.092) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 112.7887 101.092) (end 117.221 101.092) (width 0.254) (layer Cuivre) (net 15))
+ (segment (start 106.5657 106.172) (end 84.074 106.172) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 84.074 106.172) (end 82.55 107.696) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 82.55 107.696) (end 82.55 108.839) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 82.55 108.839) (end 81.28 110.109) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 81.28 110.109) (end 78.232 110.109) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 78.232 110.109) (end 77.597 110.744) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 77.597 110.744) (end 77.597 115.189) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 77.597 115.189) (end 78.867 116.459) (width 0.254) (layer Cuivre) (net 16) (status 420))
+ (segment (start 78.867 116.459) (end 80.391 117.983) (width 0.381) (layer Composant) (net 16) (status 810))
+ (segment (start 80.391 117.983) (end 80.391 120.269) (width 0.381) (layer Composant) (net 16))
+ (segment (start 82.3595 121.412) (end 81.534 121.412) (width 0.4318) (layer Composant) (net 16) (status 810))
+ (segment (start 81.534 121.412) (end 80.391 120.269) (width 0.4318) (layer Composant) (net 16))
+ (segment (start 141.478 105.283) (end 142.0114 105.4862) (width 0.254) (layer Composant) (net 16))
+ (segment (start 142.0114 105.4862) (end 143.129 105.4608) (width 0.254) (layer Composant) (net 16) (status 420))
+ (via (at 141.478 105.283) (size 0.635) (layers Composant Cuivre) (net 16))
+ (segment (start 116.967 100.584) (end 112.1537 100.584) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 141.478 105.283) (end 140.97 105.156) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 136.652 100.838) (end 140.97 105.156) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 129.54 100.838) (end 136.652 100.838) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 129.54 100.838) (end 125.857 97.155) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 112.1537 100.584) (end 106.5657 106.172) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 125.857 97.155) (end 120.396 97.155) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 120.396 97.155) (end 116.967 100.584) (width 0.254) (layer Cuivre) (net 16))
+ (segment (start 130.937 95.25) (end 130.937 95.758) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 138.43 142.24) (end 109.347 142.24) (width 0.254) (layer GND_layer) (net 17))
+ (segment (start 109.347 142.24) (end 104.975 137.868) (width 0.254) (layer GND_layer) (net 17))
+ (segment (start 104.975 137.868) (end 104.975 104.34) (width 0.254) (layer GND_layer) (net 17))
+ (segment (start 104.975 104.34) (end 104.013 103.378) (width 0.254) (layer GND_layer) (net 17))
+ (segment (start 127.635 100.9904) (end 129.159 100.965) (width 0.254) (layer Composant) (net 17) (status 810))
+ (segment (start 129.159 100.965) (end 130.937 99.187) (width 0.254) (layer Composant) (net 17))
+ (segment (start 141.224 139.446) (end 138.43 142.24) (width 0.254) (layer GND_layer) (net 17) (status 810))
+ (segment (start 99.822 107.569) (end 104.013 103.378) (width 0.381) (layer Composant) (net 17))
+ (segment (start 99.822 117.729) (end 99.822 107.569) (width 0.381) (layer Composant) (net 17))
+ (segment (start 98.679 118.872) (end 99.822 117.729) (width 0.381) (layer Composant) (net 17))
+ (segment (start 97.409 118.872) (end 98.679 118.872) (width 0.381) (layer Composant) (net 17) (status 810))
+ (via (at 104.013 103.378) (size 0.635) (layers Composant Cuivre) (net 17))
+ (segment (start 130.683 96.012) (end 128.905 96.012) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 104.521 103.378) (end 104.013 103.378) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 109.982 97.917) (end 104.521 103.378) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 109.982 93.472) (end 109.982 97.917) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 130.937 99.187) (end 130.937 95.25) (width 0.254) (layer Composant) (net 17))
+ (segment (start 111.252 92.202) (end 109.982 93.472) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 125.73 92.202) (end 111.252 92.202) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 128.397 94.869) (end 125.73 92.202) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 128.397 95.504) (end 128.397 94.869) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 128.905 96.012) (end 128.397 95.504) (width 0.254) (layer Cuivre) (net 17))
+ (via (at 130.937 95.25) (size 0.635) (layers Composant Cuivre) (net 17))
+ (segment (start 130.937 95.758) (end 130.683 96.012) (width 0.254) (layer Cuivre) (net 17))
+ (segment (start 132.461 107.569) (end 132.461 125.73) (width 0.254) (layer GND_layer) (net 18))
+ (via (at 134.112 106.045) (size 0.635) (layers Composant Cuivre) (net 18))
+ (via (at 135.382 135.001) (size 0.635) (layers Composant Cuivre) (net 18))
+ (segment (start 133.731 106.299) (end 133.3754 106.6546) (width 0.254) (layer Composant) (net 18))
+ (segment (start 134.112 106.045) (end 133.731 106.299) (width 0.254) (layer Composant) (net 18))
+ (segment (start 135.382 128.651) (end 135.382 135.001) (width 0.254) (layer GND_layer) (net 18))
+ (segment (start 132.461 125.73) (end 135.382 128.651) (width 0.254) (layer GND_layer) (net 18))
+ (segment (start 133.3754 106.6546) (end 133.3754 109.22) (width 0.254) (layer Composant) (net 18) (status 420))
+ (segment (start 123.444 139.446) (end 122.174 138.176) (width 0.254) (layer Cuivre) (net 18) (status 810))
+ (segment (start 122.174 138.176) (end 122.174 136.398) (width 0.254) (layer Cuivre) (net 18))
+ (segment (start 122.174 136.398) (end 125.349 133.223) (width 0.254) (layer Cuivre) (net 18))
+ (segment (start 125.349 133.223) (end 134.239 133.223) (width 0.254) (layer Cuivre) (net 18))
+ (segment (start 134.239 133.223) (end 135.382 134.366) (width 0.254) (layer Cuivre) (net 18))
+ (segment (start 135.382 134.366) (end 135.382 135.001) (width 0.254) (layer Cuivre) (net 18))
+ (segment (start 134.112 106.045) (end 133.604 106.426) (width 0.254) (layer GND_layer) (net 18))
+ (segment (start 133.604 106.426) (end 132.461 107.569) (width 0.254) (layer GND_layer) (net 18))
+ (segment (start 137.16 128.905) (end 133.477 125.222) (width 0.254) (layer GND_layer) (net 19))
+ (segment (start 137.16 134.239) (end 137.16 135.001) (width 0.254) (layer Cuivre) (net 19))
+ (segment (start 135.128 132.207) (end 137.16 134.239) (width 0.254) (layer Cuivre) (net 19))
+ (segment (start 120.904 139.446) (end 119.634 138.176) (width 0.254) (layer Cuivre) (net 19) (status 810))
+ (segment (start 119.634 138.176) (end 119.634 136.398) (width 0.254) (layer Cuivre) (net 19))
+ (segment (start 119.634 136.398) (end 123.825 132.207) (width 0.254) (layer Cuivre) (net 19))
+ (segment (start 123.825 132.207) (end 135.128 132.207) (width 0.254) (layer Cuivre) (net 19))
+ (segment (start 137.16 135.001) (end 137.16 128.905) (width 0.254) (layer GND_layer) (net 19))
+ (via (at 137.16 135.001) (size 0.635) (layers Composant Cuivre) (net 19))
+ (via (at 135.001 106.934) (size 0.635) (layers Composant Cuivre) (net 19))
+ (segment (start 134.874 107.569) (end 134.8994 109.22) (width 0.254) (layer Composant) (net 19) (status 420))
+ (segment (start 135.001 106.934) (end 134.874 107.569) (width 0.254) (layer Composant) (net 19))
+ (segment (start 135.001 108.077) (end 135.001 106.934) (width 0.254) (layer GND_layer) (net 19))
+ (segment (start 133.477 109.601) (end 135.001 108.077) (width 0.254) (layer GND_layer) (net 19))
+ (segment (start 133.477 125.222) (end 133.477 109.601) (width 0.254) (layer GND_layer) (net 19))
+ (segment (start 148.817 112.549) (end 148.817 98.706) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 148.817 98.706) (end 149.352 98.171) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 149.352 98.171) (end 150.495 98.171) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 176.276 119.761) (end 176.276 118.5545) (width 0.4318) (layer Composant) (net 20) (status 810))
+ (segment (start 176.276 118.5545) (end 174.8155 117.094) (width 0.4318) (layer Composant) (net 20) (status 420))
+ (segment (start 176.276 119.761) (end 168.656 119.761) (width 0.4318) (layer Composant) (net 20) (status C30))
+ (via (at 150.495 98.171) (size 0.635) (layers Composant Cuivre) (net 20))
+ (segment (start 150.495 98.171) (end 149.733 98.171) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 138.811 97.282) (end 138.811 96.266) (width 0.254) (layer Composant) (net 20))
+ (segment (start 138.811 96.266) (end 138.811 97.028) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 142.621 97.917) (end 143.51 97.028) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 139.7 97.917) (end 142.621 97.917) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 138.811 97.028) (end 139.7 97.917) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 160.909 100.457) (end 163.83 97.536) (width 0.381) (layer Composant) (net 20))
+ (segment (start 163.83 97.536) (end 166.116 97.536) (width 0.381) (layer Composant) (net 20))
+ (segment (start 147.32 113.665) (end 147.701 113.665) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 147.701 113.665) (end 148.817 112.549) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 150.495 100.457) (end 160.909 100.457) (width 0.381) (layer Composant) (net 20))
+ (segment (start 144.78 116.205) (end 147.32 113.665) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 144.78 133.35) (end 144.78 116.205) (width 0.254) (layer GND_layer) (net 20))
+ (segment (start 141.224 136.906) (end 144.78 133.35) (width 0.254) (layer GND_layer) (net 20) (status 810))
+ (segment (start 166.497 117.602) (end 168.656 119.761) (width 0.381) (layer Composant) (net 20) (status 420))
+ (segment (start 149.987 98.171) (end 150.495 98.171) (width 0.254) (layer Composant) (net 20))
+ (segment (start 166.116 97.536) (end 166.497 97.917) (width 0.381) (layer Composant) (net 20))
+ (segment (start 149.733 98.425) (end 149.987 98.171) (width 0.254) (layer Composant) (net 20))
+ (segment (start 149.733 99.695) (end 149.733 98.425) (width 0.254) (layer Composant) (net 20))
+ (segment (start 150.495 100.457) (end 149.733 99.695) (width 0.254) (layer Composant) (net 20))
+ (segment (start 149.733 98.171) (end 148.59 97.028) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 143.51 97.028) (end 148.59 97.028) (width 0.254) (layer Cuivre) (net 20))
+ (segment (start 166.497 108.331) (end 166.497 117.602) (width 0.381) (layer Composant) (net 20))
+ (segment (start 168.021 106.807) (end 166.497 108.331) (width 0.381) (layer Composant) (net 20))
+ (segment (start 168.021 105.283) (end 168.021 106.807) (width 0.381) (layer Composant) (net 20))
+ (segment (start 166.497 103.759) (end 168.021 105.283) (width 0.381) (layer Composant) (net 20))
+ (segment (start 166.497 97.917) (end 166.497 103.759) (width 0.381) (layer Composant) (net 20))
+ (segment (start 138.811 97.282) (end 141.5034 99.9744) (width 0.254) (layer Composant) (net 20))
+ (segment (start 141.5034 99.9744) (end 143.129 99.9744) (width 0.254) (layer Composant) (net 20) (status 420))
+ (via (at 138.811 96.266) (size 0.889) (layers Composant Cuivre) (net 20))
+ (segment (start 139.573 136.398) (end 144.272 131.699) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 150.495 97.282) (end 151.0665 97.282) (width 0.254) (layer Composant) (net 21))
+ (segment (start 140.335 96.139) (end 140.716 96.52) (width 0.254) (layer Composant) (net 21))
+ (via (at 140.335 96.139) (size 0.889) (layers Composant Cuivre) (net 21))
+ (segment (start 140.335 96.139) (end 140.335 96.774) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 142.367 97.282) (end 143.129 96.52) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 140.843 97.282) (end 142.367 97.282) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 140.335 96.774) (end 140.843 97.282) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 138.684 136.906) (end 139.573 136.398) (width 0.254) (layer GND_layer) (net 21) (status 810))
+ (segment (start 144.272 131.699) (end 144.272 115.951) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 144.272 115.951) (end 147.066 113.157) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 147.066 113.157) (end 147.447 113.157) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 147.447 113.157) (end 148.309 112.295) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 148.309 112.295) (end 148.309 98.198) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 148.309 98.198) (end 149.225 97.282) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 149.225 97.282) (end 150.495 97.282) (width 0.254) (layer GND_layer) (net 21))
+ (segment (start 150.495 97.282) (end 149.733 97.282) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 148.971 96.52) (end 143.129 96.52) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 149.733 97.282) (end 148.971 96.52) (width 0.254) (layer Cuivre) (net 21))
+ (segment (start 151.0665 97.282) (end 152.0825 98.298) (width 0.254) (layer Composant) (net 21) (status 420))
+ (segment (start 140.716 96.52) (end 140.716 97.663) (width 0.254) (layer Composant) (net 21))
+ (segment (start 140.716 97.663) (end 141.5288 98.4758) (width 0.254) (layer Composant) (net 21))
+ (segment (start 141.5288 98.4758) (end 143.129 98.4758) (width 0.254) (layer Composant) (net 21) (status 420))
+ (via (at 150.495 97.282) (size 0.635) (layers Composant Cuivre) (net 21))
+ (via (at 141.605 96.266) (size 0.889) (layers Composant Cuivre) (net 22))
+ (segment (start 149.86 96.647) (end 149.225 97.282) (width 0.254) (layer Composant) (net 22))
+ (via (at 150.495 96.393) (size 0.635) (layers Composant Cuivre) (net 22))
+ (segment (start 150.495 96.393) (end 149.86 96.647) (width 0.254) (layer Composant) (net 22))
+ (segment (start 141.7828 97.9678) (end 143.129 97.9678) (width 0.254) (layer Composant) (net 22) (status 420))
+ (segment (start 141.605 97.79) (end 141.7828 97.9678) (width 0.254) (layer Composant) (net 22))
+ (segment (start 141.605 96.266) (end 141.605 97.79) (width 0.254) (layer Composant) (net 22))
+ (segment (start 150.876 96.012) (end 150.495 96.393) (width 0.254) (layer Composant) (net 22))
+ (segment (start 152.0825 96.012) (end 150.876 96.012) (width 0.254) (layer Composant) (net 22) (status 810))
+ (segment (start 149.733 96.393) (end 150.495 96.393) (width 0.254) (layer Cuivre) (net 22))
+ (segment (start 149.225 95.885) (end 149.733 96.393) (width 0.254) (layer Cuivre) (net 22))
+ (segment (start 141.986 95.885) (end 149.225 95.885) (width 0.254) (layer Cuivre) (net 22))
+ (segment (start 149.098 96.393) (end 150.495 96.393) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 147.801 97.69) (end 149.098 96.393) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 147.801 111.914) (end 147.801 97.69) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 143.764 131.318) (end 143.764 115.57) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 147.066 112.649) (end 147.801 111.914) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 146.685 112.649) (end 147.066 112.649) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 143.764 115.57) (end 146.685 112.649) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 149.225 97.282) (end 149.225 100.203) (width 0.254) (layer Composant) (net 22))
+ (segment (start 149.225 100.203) (end 150.241 101.219) (width 0.254) (layer Composant) (net 22))
+ (segment (start 150.241 101.219) (end 157.607 101.219) (width 0.381) (layer Composant) (net 22))
+ (segment (start 157.607 101.219) (end 157.9245 101.5365) (width 0.381) (layer Composant) (net 22))
+ (segment (start 157.9245 101.5365) (end 159.4485 101.5365) (width 0.381) (layer Composant) (net 22) (status 420))
+ (segment (start 136.144 136.906) (end 137.287 135.763) (width 0.254) (layer GND_layer) (net 22) (status 810))
+ (segment (start 137.287 135.763) (end 139.319 135.763) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 139.319 135.763) (end 143.764 131.318) (width 0.254) (layer GND_layer) (net 22))
+ (segment (start 141.986 95.885) (end 141.605 96.266) (width 0.254) (layer Cuivre) (net 22))
+ (segment (start 119.1895 95.1865) (end 117.348 93.345) (width 0.4318) (layer Composant) (net 23))
+ (segment (start 126.5174 95.2754) (end 127.635 95.4786) (width 0.254) (layer Composant) (net 23) (status 420))
+ (segment (start 116.078 92.964) (end 115.062 93.345) (width 0.254) (layer Cuivre) (net 23) (status 420))
+ (segment (start 117.348 93.345) (end 115.062 93.345) (width 0.4318) (layer Composant) (net 23) (status 420))
+ (segment (start 125.603 93.345) (end 125.603 94.361) (width 0.254) (layer Composant) (net 23))
+ (segment (start 125.476 92.964) (end 125.603 93.345) (width 0.254) (layer Composant) (net 23))
+ (segment (start 125.476 92.964) (end 116.078 92.964) (width 0.254) (layer Cuivre) (net 23))
+ (segment (start 125.603 94.361) (end 126.5174 95.2754) (width 0.254) (layer Composant) (net 23))
+ (via (at 125.476 92.964) (size 0.635) (layers Composant Cuivre) (net 23))
+ (segment (start 119.1895 97.282) (end 119.1895 95.1865) (width 0.4318) (layer Composant) (net 23) (status 810))
+ (segment (start 136.37768 107.81792) (end 136.37768 107.1) (width 0.254) (layer Composant) (net 24))
+ (segment (start 136.398 109.22) (end 136.37768 107.81792) (width 0.254) (layer Composant) (net 24) (status 810))
+ (segment (start 80.01 113.919) (end 83.185 110.744) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 111.506 111.125) (end 115.951 111.125) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 80.01 117.348) (end 80.01 113.919) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 79.629 117.729) (end 80.01 117.348) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 75.438 117.729) (end 79.629 117.729) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 74.676 118.491) (end 75.438 117.729) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 74.676 122.428) (end 74.676 118.491) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 76.327 124.079) (end 74.676 122.428) (width 0.254) (layer Cuivre) (net 24) (status 810))
+ (segment (start 119.507 107.569) (end 127.127 107.569) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 135.001 108.077) (end 135.89 107.188) (width 0.254) (layer Cuivre) (net 24))
+ (via (at 135.7 105.6) (size 0.889) (layers Composant Cuivre) (net 24))
+ (segment (start 127.127 107.569) (end 127.635 108.077) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 115.951 111.125) (end 119.507 107.569) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 109.147 108.766) (end 111.506 111.125) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 86.941 108.766) (end 109.147 108.766) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 84.963 110.744) (end 86.941 108.766) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 83.185 110.744) (end 84.963 110.744) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 127.635 108.077) (end 135.001 108.077) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 135.7 106.4) (end 135.7 105.6) (width 0.254) (layer Composant) (net 24) (tstamp 53D8E668))
+ (segment (start 136.37768 107.07768) (end 135.7 106.4) (width 0.254) (layer Composant) (net 24) (tstamp 53D8E667))
+ (segment (start 136.37768 107.1) (end 136.37768 107.07768) (width 0.254) (layer Composant) (net 24))
+ (segment (start 135.89 105.79) (end 135.7 105.6) (width 0.254) (layer Cuivre) (net 24) (tstamp 53D8E66B))
+ (segment (start 135.89 107.188) (end 135.89 105.79) (width 0.254) (layer Cuivre) (net 24))
+ (segment (start 116.151 111.887) (end 119.961 108.077) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 111.125 111.887) (end 116.151 111.887) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 136.8806 105.9434) (end 136.906 105.918) (width 0.254) (layer Composant) (net 25))
+ (segment (start 78.867 121.539) (end 80.518 119.888) (width 0.254) (layer Cuivre) (net 25) (status 810))
+ (segment (start 80.518 119.888) (end 80.518 114.173) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 80.518 114.173) (end 83.439 111.252) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 83.439 111.252) (end 85.217 111.252) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 85.217 111.252) (end 86.995 109.474) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 86.995 109.474) (end 108.712 109.474) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 108.712 109.474) (end 111.125 111.887) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 119.961 108.077) (end 126.873 108.077) (width 0.254) (layer Cuivre) (net 25))
+ (via (at 136.906 105.918) (size 0.635) (layers Composant Cuivre) (net 25))
+ (segment (start 136.906 107.061) (end 136.906 105.918) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 135.382 108.585) (end 136.906 107.061) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 127.381 108.585) (end 135.382 108.585) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 126.873 108.077) (end 127.381 108.585) (width 0.254) (layer Cuivre) (net 25))
+ (segment (start 136.8806 109.22) (end 136.8806 105.9434) (width 0.254) (layer Composant) (net 25) (status 810))
+ (segment (start 138.3792 109.22) (end 138.3792 107.9754) (width 0.254) (layer Composant) (net 26) (status 810))
+ (segment (start 116.351 112.649) (end 110.871 112.649) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 120.415 108.585) (end 116.351 112.649) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 83.693 111.76) (end 81.026 114.427) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 87.122 110.109) (end 108.331 110.109) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 136.017 109.093) (end 127.127 109.093) (width 0.254) (layer Cuivre) (net 26))
+ (via (at 138.7 106.5) (size 0.635) (layers Composant Cuivre) (net 26))
+ (segment (start 77.597 122.809) (end 76.327 121.539) (width 0.254) (layer Cuivre) (net 26) (status 420))
+ (segment (start 79.502 122.809) (end 77.597 122.809) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 87.122 110.109) (end 85.471 111.76) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 81.026 121.285) (end 79.502 122.809) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 81.026 114.427) (end 81.026 121.285) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 108.331 110.109) (end 110.871 112.649) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 85.471 111.76) (end 83.693 111.76) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 126.619 108.585) (end 120.415 108.585) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 127.127 109.093) (end 126.619 108.585) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 138.7 106.5) (end 136.017 109.093) (width 0.254) (layer Cuivre) (net 26))
+ (segment (start 138.3792 106.8208) (end 138.7 106.5) (width 0.254) (layer Composant) (net 26) (tstamp 53D8E686))
+ (segment (start 138.3792 107.9754) (end 138.3792 106.8208) (width 0.254) (layer Composant) (net 26))
+ (segment (start 83.82 112.395) (end 85.598 112.395) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 76.835 122.809) (end 77.597 123.571) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 81.534 123.444) (end 81.534 114.681) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 79.629 125.349) (end 81.534 123.444) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 77.978 125.349) (end 79.629 125.349) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 78.867 118.999) (end 77.597 120.269) (width 0.254) (layer Cuivre) (net 27) (status 810))
+ (via (at 139.065 107.442) (size 0.635) (layers Composant Cuivre) (net 27))
+ (segment (start 138.8872 109.22) (end 138.8872 107.8992) (width 0.254) (layer Composant) (net 27) (status 810))
+ (segment (start 136.779 109.728) (end 139.065 107.442) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 127 109.728) (end 136.779 109.728) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 81.534 114.681) (end 83.82 112.395) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 126.365 109.093) (end 127 109.728) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 120.969 109.093) (end 126.365 109.093) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 116.778 113.284) (end 120.969 109.093) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 110.49 113.284) (end 116.778 113.284) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 107.95 110.744) (end 110.49 113.284) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 87.249 110.744) (end 107.95 110.744) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 138.8872 107.8992) (end 139.065 107.442) (width 0.254) (layer Composant) (net 27))
+ (segment (start 77.597 120.269) (end 75.819 120.269) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 75.819 120.269) (end 75.184 120.904) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 75.184 120.904) (end 75.184 122.174) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 75.184 122.174) (end 75.819 122.809) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 75.819 122.809) (end 76.835 122.809) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 85.598 112.395) (end 87.249 110.744) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 77.597 123.571) (end 77.597 124.968) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 77.597 124.968) (end 77.978 125.349) (width 0.254) (layer Cuivre) (net 27))
+ (segment (start 148.844 136.906) (end 154.686 131.064) (width 0.254) (layer GND_layer) (net 28) (status 810))
+ (segment (start 137.0711 95.66656) (end 137.0711 96.9899) (width 0.254) (layer Cuivre) (net 28))
+ (via (at 153.035 92.71) (size 0.635) (layers Composant Cuivre) (net 28))
+ (segment (start 152.654 92.964) (end 153.035 92.71) (width 0.254) (layer Cuivre) (net 28))
+ (segment (start 139.573 92.964) (end 152.654 92.964) (width 0.254) (layer Cuivre) (net 28))
+ (segment (start 137.0711 95.66656) (end 139.573 92.964) (width 0.254) (layer Cuivre) (net 28))
+ (segment (start 154.686 94.361) (end 153.035 92.71) (width 0.254) (layer GND_layer) (net 28))
+ (segment (start 154.686 131.064) (end 154.686 94.361) (width 0.254) (layer GND_layer) (net 28))
+ (via (at 136.271 97.282) (size 0.889) (layers Composant Cuivre) (net 28))
+ (segment (start 135.880068 94.42206) (end 135.8646 93.726) (width 0.254) (layer Composant) (net 28) (tstamp 53D8E5DE) (status 420))
+ (segment (start 136.271 97.282) (end 136.779 97.282) (width 0.254) (layer Cuivre) (net 28))
+ (segment (start 136.779 97.282) (end 137.0711 96.9899) (width 0.254) (layer Cuivre) (net 28))
+ (segment (start 136.271 97.282) (end 136.398 97.282) (width 0.254) (layer Composant) (net 28))
+ (segment (start 136.779 96.901) (end 136.779 95.7) (width 0.254) (layer Composant) (net 28))
+ (segment (start 136.398 97.282) (end 136.779 96.901) (width 0.254) (layer Composant) (net 28))
+ (segment (start 136.779 95.321) (end 135.880068 94.422068) (width 0.254) (layer Composant) (net 28) (tstamp 53D8E5DA))
+ (segment (start 135.880068 94.422068) (end 135.880068 94.42206) (width 0.254) (layer Composant) (net 28) (tstamp 53D8E5DB))
+ (segment (start 136.779 95.7) (end 136.779 95.321) (width 0.254) (layer Composant) (net 28))
+ (via (at 122.428 115.316) (size 0.889) (layers Composant Cuivre) (net 29))
+ (segment (start 83.312 115.316) (end 83.312 134.112) (width 0.4318) (layer Composant) (net 29) (status 20))
+ (segment (start 93.853 116.459) (end 104.775 116.459) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 93.345 116.967) (end 93.853 116.459) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 85.09 116.967) (end 93.345 116.967) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 83.439 115.316) (end 85.09 116.967) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 83.312 115.316) (end 83.439 115.316) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 83.312 134.112) (end 83.439 134.239) (width 0.4318) (layer Composant) (net 29) (status 430))
+ (segment (start 122.301 115.189) (end 122.428 115.316) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 122.428 115.316) (end 122.555 115.189) (width 0.4318) (layer Composant) (net 29))
+ (segment (start 122.555 115.189) (end 134.0485 115.189) (width 0.4318) (layer Composant) (net 29))
+ (segment (start 134.0485 115.189) (end 134.874 114.3635) (width 0.4318) (layer Composant) (net 29) (status 420))
+ (segment (start 88.519 134.239) (end 88.9 134.62) (width 0.4318) (layer Cuivre) (net 29) (status 430))
+ (segment (start 83.439 134.239) (end 88.519 134.239) (width 0.4318) (layer Cuivre) (net 29) (status 830))
+ (segment (start 104.775 116.459) (end 106.045 115.189) (width 0.4318) (layer Cuivre) (net 29))
+ (via (at 83.312 115.316) (size 0.889) (layers Composant Cuivre) (net 29))
+ (segment (start 106.045 115.189) (end 122.301 115.189) (width 0.4318) (layer Cuivre) (net 29))
+ (segment (start 83.8835 112.8395) (end 84.836 112.8395) (width 0.4318) (layer Composant) (net 29) (status 420))
+ (segment (start 83.312 113.411) (end 83.8835 112.8395) (width 0.4318) (layer Composant) (net 29))
+ (segment (start 83.439 134.239) (end 78.867 134.239) (width 0.4318) (layer Cuivre) (net 29) (status C30))
+ (segment (start 83.312 115.316) (end 83.312 113.411) (width 0.4318) (layer Composant) (net 29))
+ (segment (start 149.733 111.6965) (end 150.114 112.0775) (width 0.381) (layer Composant) (net 30))
+ (segment (start 140.8938 109.22) (end 140.8938 110.7948) (width 0.254) (layer Composant) (net 30) (status 810))
+ (segment (start 141.986 111.6965) (end 141.732 111.4425) (width 0.381) (layer Composant) (net 30) (status 430))
+ (segment (start 143.51 111.6965) (end 141.986 111.6965) (width 0.381) (layer Composant) (net 30) (status 830))
+ (segment (start 140.8938 110.7948) (end 141.732 111.4425) (width 0.254) (layer Composant) (net 30) (status 420))
+ (segment (start 150.241 109.22) (end 150.241 111.9505) (width 0.254) (layer Composant) (net 30) (status 810))
+ (segment (start 150.241 111.9505) (end 150.114 112.0775) (width 0.254) (layer Composant) (net 30))
+ (segment (start 143.51 111.6965) (end 149.733 111.6965) (width 0.381) (layer Composant) (net 30) (status 810))
+ (segment (start 150.622 88.9) (end 151.13 88.9) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 151.13 88.9) (end 153.67 91.44) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 150.114 136.398) (end 150.114 138.176) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 156.337 130.175) (end 150.114 136.398) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 156.337 119.253) (end 156.337 130.175) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 157.607 117.983) (end 156.337 119.253) (width 0.254) (layer GND_layer) (net 31) (status 810))
+ (segment (start 134.366 85.598) (end 134.747 85.217) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 136.3726 93.726) (end 136.3853 92.329) (width 0.254) (layer Composant) (net 31) (status 810))
+ (segment (start 149.86 88.138) (end 150.622 88.9) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 141.097 88.138) (end 149.86 88.138) (width 0.254) (layer Cuivre) (net 31))
+ (via (at 134.747 85.217) (size 0.889) (layers Composant Cuivre) (net 31))
+ (via (at 150.622 88.9) (size 0.889) (layers Composant Cuivre) (net 31))
+ (segment (start 150.114 138.176) (end 151.384 139.446) (width 0.254) (layer GND_layer) (net 31) (status 420))
+ (segment (start 127.381 85.598) (end 134.366 85.598) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 134.747 85.217) (end 135.636 86.106) (width 0.254) (layer Composant) (net 31))
+ (segment (start 135.636 86.106) (end 135.636 88.646) (width 0.254) (layer Composant) (net 31))
+ (segment (start 139.827 89.408) (end 141.097 88.138) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 126.111 84.328) (end 118.999 84.328) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 127.381 85.598) (end 126.111 84.328) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 118.999 84.328) (end 114.3 89.027) (width 0.254) (layer Cuivre) (net 31) (status 420))
+ (segment (start 155.194 115.57) (end 155.194 93.726) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 155.194 93.726) (end 153.67 92.202) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 153.67 92.202) (end 153.67 91.44) (width 0.254) (layer GND_layer) (net 31))
+ (segment (start 157.607 117.983) (end 155.194 115.57) (width 0.254) (layer GND_layer) (net 31) (status 810))
+ (segment (start 136.3853 92.329) (end 136.271 91.94038) (width 0.254) (layer Composant) (net 31))
+ (via (at 135.636 88.646) (size 0.635) (layers Composant Cuivre) (net 31))
+ (segment (start 136.271 91.94038) (end 136.271 89.535) (width 0.254) (layer Composant) (net 31))
+ (segment (start 136.271 89.535) (end 135.763 89.027) (width 0.254) (layer Composant) (net 31))
+ (segment (start 135.763 89.027) (end 135.636 88.646) (width 0.254) (layer Composant) (net 31))
+ (segment (start 135.636 88.646) (end 135.636 89.154) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 135.636 89.154) (end 136.144 89.408) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 136.144 89.408) (end 139.827 89.408) (width 0.254) (layer Cuivre) (net 31))
+ (segment (start 100.457 90.551) (end 100.6475 90.043) (width 0.381) (layer Composant) (net 32) (status 430))
+ (segment (start 104.775 89.027) (end 105.618 88.184) (width 0.381) (layer Composant) (net 32))
+ (segment (start 105.618 88.184) (end 105.618 82.596) (width 0.381) (layer Composant) (net 32))
+ (segment (start 105.618 82.596) (end 108.077 80.137) (width 0.381) (layer Composant) (net 32))
+ (segment (start 108.077 80.137) (end 111.76 80.137) (width 0.381) (layer Composant) (net 32))
+ (segment (start 111.76 80.137) (end 113.284 78.613) (width 0.381) (layer Composant) (net 32) (status 420))
+ (segment (start 100.6475 90.043) (end 101.219 89.408) (width 0.381) (layer Composant) (net 32) (status 810))
+ (segment (start 101.219 89.408) (end 102.108 89.408) (width 0.381) (layer Composant) (net 32))
+ (segment (start 100.457 91.186) (end 100.457 90.551) (width 0.381) (layer Composant) (net 32) (status 20))
+ (segment (start 99.187 92.456) (end 100.457 91.186) (width 0.381) (layer Composant) (net 32))
+ (segment (start 99.187 94.361) (end 99.187 92.456) (width 0.381) (layer Composant) (net 32))
+ (segment (start 97.79 95.758) (end 99.187 94.361) (width 0.381) (layer Composant) (net 32) (status 810))
+ (segment (start 102.489 89.027) (end 103.251 89.027) (width 0.381) (layer Composant) (net 32) (status 420))
+ (segment (start 103.251 89.027) (end 104.775 89.027) (width 0.381) (layer Composant) (net 32) (status 810))
+ (segment (start 102.108 89.408) (end 102.489 89.027) (width 0.381) (layer Composant) (net 32))
+ (segment (start 108.204 78.613) (end 104.956 81.861) (width 0.381) (layer Composant) (net 33) (status 810))
+ (segment (start 100.6475 87.757) (end 103.251 87.757) (width 0.4318) (layer Composant) (net 33) (status C30))
+ (segment (start 100.6475 85.471) (end 100.6475 87.757) (width 0.762) (layer Composant) (net 33) (status C30))
+ (segment (start 104.956 81.861) (end 104.956 87.449) (width 0.381) (layer Composant) (net 33))
+ (segment (start 104.956 87.449) (end 104.648 87.757) (width 0.381) (layer Composant) (net 33))
+ (segment (start 104.648 87.757) (end 103.251 87.757) (width 0.381) (layer Composant) (net 33) (status 420))
+ (segment (start 178.816 80.518) (end 177.038 80.518) (width 0.381) (layer Composant) (net 34))
+ (segment (start 175.006 63.754) (end 185.801 63.754) (width 0.381) (layer Composant) (net 34))
+ (segment (start 184.15 82.296) (end 180.594 82.296) (width 0.381) (layer Composant) (net 34) (status 810))
+ (segment (start 173.482 65.278) (end 175.006 63.754) (width 0.381) (layer Composant) (net 34))
+ (segment (start 177.038 80.518) (end 176.022 79.502) (width 0.381) (layer Composant) (net 34))
+ (segment (start 176.022 79.502) (end 176.022 71.12) (width 0.381) (layer Composant) (net 34))
+ (segment (start 176.022 71.12) (end 173.482 68.58) (width 0.381) (layer Composant) (net 34))
+ (segment (start 173.482 68.58) (end 173.482 65.278) (width 0.381) (layer Composant) (net 34))
+ (segment (start 185.801 63.754) (end 187.833 66.04) (width 0.381) (layer Composant) (net 34) (status 420))
+ (segment (start 180.594 82.296) (end 178.816 80.518) (width 0.381) (layer Composant) (net 34))
+ (segment (start 150.241 63.754) (end 148.717 65.278) (width 0.381) (layer Composant) (net 35))
+ (segment (start 148.717 65.278) (end 148.717 79.121) (width 0.381) (layer Composant) (net 35))
+ (segment (start 154.305 65.151) (end 152.908 63.754) (width 0.381) (layer Composant) (net 35))
+ (segment (start 152.908 63.754) (end 150.241 63.754) (width 0.381) (layer Composant) (net 35))
+ (segment (start 148.717 79.121) (end 151.892 82.296) (width 0.381) (layer Composant) (net 35))
+ (segment (start 151.892 82.296) (end 156.21 82.296) (width 0.381) (layer Composant) (net 35) (status 420))
+ (segment (start 154.305 66.04) (end 154.305 65.151) (width 0.381) (layer Composant) (net 35) (status 810))
+ (segment (start 120.777 66.04) (end 120.523 66.04) (width 0.381) (layer Composant) (net 36) (status 830))
+ (via (at 109.474 71.374) (size 0.889) (layers Composant Cuivre) (net 36))
+ (segment (start 115.443 67.183) (end 112.776 69.85) (width 0.381) (layer Composant) (net 36))
+ (segment (start 112.776 69.85) (end 110.998 69.85) (width 0.381) (layer Composant) (net 36))
+ (segment (start 110.998 69.85) (end 109.474 71.374) (width 0.381) (layer Composant) (net 36))
+ (segment (start 113.284 76.073) (end 112.014 77.343) (width 0.381) (layer GND_layer) (net 36) (status 810))
+ (segment (start 112.014 77.343) (end 109.982 77.343) (width 0.381) (layer GND_layer) (net 36))
+ (segment (start 109.982 77.343) (end 109.474 76.835) (width 0.381) (layer GND_layer) (net 36))
+ (segment (start 109.474 76.835) (end 109.474 71.374) (width 0.381) (layer GND_layer) (net 36))
+ (segment (start 120.523 66.04) (end 119.38 67.183) (width 0.381) (layer Composant) (net 36) (status 10))
+ (segment (start 119.38 67.183) (end 115.443 67.183) (width 0.381) (layer Composant) (net 36))
+ (segment (start 138.049 135.001) (end 138.049 134.493) (width 0.254) (layer Cuivre) (net 37))
+ (via (at 134.239 110.871) (size 0.635) (layers Composant Cuivre) (net 37))
+ (segment (start 138.303 134.239) (end 145.542 134.239) (width 0.254) (layer Cuivre) (net 37))
+ (segment (start 145.542 134.239) (end 147.574 136.271) (width 0.254) (layer Cuivre) (net 37))
+ (segment (start 147.574 136.271) (end 147.574 138.176) (width 0.254) (layer Cuivre) (net 37))
+ (segment (start 147.574 138.176) (end 148.844 139.446) (width 0.254) (layer Cuivre) (net 37) (status 420))
+ (segment (start 134.239 110.871) (end 133.8834 110.4646) (width 0.254) (layer Composant) (net 37))
+ (segment (start 133.8834 110.4646) (end 133.8834 109.22) (width 0.254) (layer Composant) (net 37) (status 420))
+ (segment (start 134.239 110.871) (end 134.239 125.222) (width 0.254) (layer GND_layer) (net 37))
+ (segment (start 134.239 125.222) (end 138.049 129.032) (width 0.254) (layer GND_layer) (net 37))
+ (segment (start 138.049 129.032) (end 138.049 135.001) (width 0.254) (layer GND_layer) (net 37))
+ (via (at 138.049 135.001) (size 0.635) (layers Composant Cuivre) (net 37))
+ (segment (start 138.049 134.493) (end 138.303 134.239) (width 0.254) (layer Cuivre) (net 37))
+ (segment (start 138.684 132.969) (end 138.938 133.223) (width 0.254) (layer GND_layer) (net 38))
+ (segment (start 135.382 110.49) (end 135.128 110.871) (width 0.254) (layer Composant) (net 38))
+ (segment (start 135.382 109.22) (end 135.382 110.49) (width 0.254) (layer Composant) (net 38) (status 810))
+ (via (at 138.938 135.001) (size 0.635) (layers Composant Cuivre) (net 38))
+ (segment (start 138.938 135.001) (end 143.891 135.001) (width 0.254) (layer Cuivre) (net 38))
+ (segment (start 143.891 135.001) (end 145.034 136.144) (width 0.254) (layer Cuivre) (net 38))
+ (segment (start 145.034 136.144) (end 145.034 138.176) (width 0.254) (layer Cuivre) (net 38))
+ (segment (start 145.034 138.176) (end 146.304 139.446) (width 0.254) (layer Cuivre) (net 38) (status 420))
+ (segment (start 138.938 133.223) (end 138.938 135.001) (width 0.254) (layer GND_layer) (net 38))
+ (via (at 135.128 110.871) (size 0.635) (layers Composant Cuivre) (net 38))
+ (segment (start 135.128 125.349) (end 138.684 128.905) (width 0.254) (layer GND_layer) (net 38))
+ (segment (start 138.684 128.905) (end 138.684 132.969) (width 0.254) (layer GND_layer) (net 38))
+ (segment (start 135.128 110.871) (end 135.128 125.349) (width 0.254) (layer GND_layer) (net 38))
+ (segment (start 176.403 81.28) (end 178.435 81.28) (width 0.381) (layer Composant) (net 39))
+ (segment (start 187.579 62.865) (end 174.498 62.865) (width 0.381) (layer Composant) (net 39))
+ (segment (start 174.498 62.865) (end 172.72 64.643) (width 0.381) (layer Composant) (net 39))
+ (segment (start 172.72 64.643) (end 172.72 68.961) (width 0.381) (layer Composant) (net 39))
+ (segment (start 172.72 68.961) (end 175.26 71.501) (width 0.381) (layer Composant) (net 39))
+ (segment (start 175.26 71.501) (end 175.26 80.137) (width 0.381) (layer Composant) (net 39))
+ (segment (start 185.039 81.026) (end 184.15 81.026) (width 0.4318) (layer Composant) (net 39) (status 420))
+ (segment (start 190.5 65.786) (end 187.579 62.865) (width 0.4318) (layer Composant) (net 39) (status 10))
+ (segment (start 190.5 66.04) (end 190.5 65.786) (width 0.4318) (layer Composant) (net 39) (status 830))
+ (segment (start 185.674 81.661) (end 185.039 81.026) (width 0.381) (layer Composant) (net 39))
+ (segment (start 185.674 82.804) (end 185.674 81.661) (width 0.381) (layer Composant) (net 39))
+ (segment (start 185.42 83.058) (end 185.674 82.804) (width 0.381) (layer Composant) (net 39))
+ (segment (start 180.213 83.058) (end 185.42 83.058) (width 0.381) (layer Composant) (net 39))
+ (segment (start 178.435 81.28) (end 180.213 83.058) (width 0.381) (layer Composant) (net 39))
+ (segment (start 175.26 80.137) (end 176.403 81.28) (width 0.381) (layer Composant) (net 39))
+ (segment (start 157.734 82.804) (end 157.48 83.058) (width 0.381) (layer Composant) (net 40))
+ (segment (start 147.955 79.756) (end 147.955 64.77) (width 0.381) (layer Composant) (net 40))
+ (segment (start 147.955 79.756) (end 151.257 83.058) (width 0.381) (layer Composant) (net 40))
+ (segment (start 151.257 83.058) (end 157.48 83.058) (width 0.381) (layer Composant) (net 40))
+ (segment (start 156.972 65.532) (end 156.972 66.04) (width 0.381) (layer Composant) (net 40) (status 430))
+ (segment (start 157.734 82.042) (end 157.734 82.804) (width 0.381) (layer Composant) (net 40))
+ (segment (start 156.718 81.026) (end 157.734 82.042) (width 0.381) (layer Composant) (net 40) (status 10))
+ (segment (start 156.21 81.026) (end 156.718 81.026) (width 0.381) (layer Composant) (net 40) (status 830))
+ (segment (start 147.955 64.77) (end 149.86 62.865) (width 0.381) (layer Composant) (net 40))
+ (segment (start 149.86 62.865) (end 154.305 62.865) (width 0.381) (layer Composant) (net 40))
+ (segment (start 154.305 62.865) (end 156.972 65.532) (width 0.381) (layer Composant) (net 40) (status 20))
+ (segment (start 123.444 70.485) (end 126.746 73.787) (width 0.381) (layer Composant) (net 41))
+ (segment (start 123.444 66.04) (end 123.444 70.485) (width 0.381) (layer Composant) (net 41) (status 810))
+ (segment (start 127.381 75.946) (end 128.27 75.946) (width 0.381) (layer Composant) (net 41) (status 420))
+ (segment (start 126.746 75.311) (end 127.381 75.946) (width 0.381) (layer Composant) (net 41))
+ (segment (start 126.746 73.787) (end 126.746 75.311) (width 0.381) (layer Composant) (net 41))
+ (segment (start 189.103 68.58) (end 189.103 68.453) (width 0.381) (layer Composant) (net 42) (status 830))
+ (segment (start 185.039 69.723) (end 184.404 70.358) (width 0.381) (layer Composant) (net 42))
+ (segment (start 185.039 67.818) (end 185.039 69.723) (width 0.381) (layer Composant) (net 42))
+ (segment (start 184.404 70.358) (end 184.404 71.501) (width 0.381) (layer Composant) (net 42))
+ (segment (start 187.198 67.183) (end 185.674 67.183) (width 0.381) (layer Composant) (net 42))
+ (segment (start 187.452 67.437) (end 187.198 67.183) (width 0.381) (layer Composant) (net 42))
+ (segment (start 184.404 71.501) (end 186.944 74.041) (width 0.381) (layer Composant) (net 42))
+ (segment (start 186.944 74.041) (end 186.944 76.327) (width 0.381) (layer Composant) (net 42))
+ (segment (start 186.944 76.327) (end 187.833 77.216) (width 0.381) (layer Composant) (net 42))
+ (segment (start 187.833 77.216) (end 189.23 77.216) (width 0.381) (layer Composant) (net 42) (status 420))
+ (segment (start 188.087 67.437) (end 187.452 67.437) (width 0.381) (layer Composant) (net 42))
+ (segment (start 189.103 68.453) (end 188.087 67.437) (width 0.381) (layer Composant) (net 42) (status 10))
+ (segment (start 185.674 67.183) (end 185.039 67.818) (width 0.381) (layer Composant) (net 42))
+ (segment (start 159.004 76.581) (end 159.639 77.216) (width 0.381) (layer Composant) (net 43))
+ (segment (start 159.004 74.041) (end 159.004 76.581) (width 0.381) (layer Composant) (net 43))
+ (segment (start 155.702 70.739) (end 159.004 74.041) (width 0.381) (layer Composant) (net 43))
+ (segment (start 155.575 68.58) (end 154.305 67.31) (width 0.381) (layer Composant) (net 43) (status 810))
+ (segment (start 154.305 67.31) (end 152.019 67.31) (width 0.381) (layer Composant) (net 43))
+ (segment (start 153.035 70.739) (end 155.702 70.739) (width 0.381) (layer Composant) (net 43))
+ (segment (start 151.511 69.215) (end 153.035 70.739) (width 0.381) (layer Composant) (net 43))
+ (segment (start 151.511 67.818) (end 151.511 69.215) (width 0.381) (layer Composant) (net 43))
+ (segment (start 159.639 77.216) (end 161.29 77.216) (width 0.381) (layer Composant) (net 43) (status 420))
+ (segment (start 152.019 67.31) (end 151.511 67.818) (width 0.381) (layer Composant) (net 43))
+ (segment (start 112.014 74.803) (end 112.014 71.628) (width 0.381) (layer GND_layer) (net 44))
+ (via (at 112.014 71.628) (size 0.889) (layers Composant Cuivre) (net 44))
+ (segment (start 122.047 68.58) (end 120.269 70.358) (width 0.381) (layer Composant) (net 44) (status 810))
+ (segment (start 120.269 70.358) (end 118.11 70.358) (width 0.381) (layer Composant) (net 44))
+ (segment (start 118.11 70.358) (end 117.221 71.628) (width 0.381) (layer Composant) (net 44))
+ (segment (start 117.221 71.628) (end 112.014 71.628) (width 0.381) (layer Composant) (net 44))
+ (segment (start 110.744 76.073) (end 112.014 74.803) (width 0.381) (layer GND_layer) (net 44) (status 810))
+ (segment (start 110.744 85.217) (end 113.03 85.217) (width 0.381) (layer Composant) (net 45))
+ (segment (start 109.474 86.487) (end 110.744 85.217) (width 0.381) (layer Composant) (net 45))
+ (segment (start 113.03 85.217) (end 114.3 86.487) (width 0.381) (layer Composant) (net 45) (status 420))
+ (segment (start 108.585 86.487) (end 109.474 86.487) (width 0.381) (layer Composant) (net 45) (status 810))
+ (segment (start 187.706 73.787) (end 185.293 71.374) (width 0.381) (layer Composant) (net 46))
+ (segment (start 187.706 75.311) (end 187.706 73.787) (width 0.381) (layer Composant) (net 46))
+ (segment (start 188.341 75.946) (end 187.706 75.311) (width 0.381) (layer Composant) (net 46))
+ (segment (start 189.23 75.946) (end 188.341 75.946) (width 0.381) (layer Composant) (net 46) (status 810))
+ (segment (start 186.182 69.723) (end 186.436 68.58) (width 0.381) (layer Composant) (net 46) (status 420))
+ (segment (start 185.293 70.612) (end 186.182 69.723) (width 0.381) (layer Composant) (net 46))
+ (segment (start 185.293 71.374) (end 185.293 70.612) (width 0.381) (layer Composant) (net 46))
+ (segment (start 159.766 73.787) (end 159.766 75.311) (width 0.381) (layer Composant) (net 47))
+ (segment (start 155.956 69.977) (end 159.766 73.787) (width 0.381) (layer Composant) (net 47))
+ (segment (start 159.766 75.311) (end 160.401 75.946) (width 0.381) (layer Composant) (net 47))
+ (segment (start 160.401 75.946) (end 161.29 75.946) (width 0.381) (layer Composant) (net 47) (status 420))
+ (segment (start 152.908 68.58) (end 154.305 69.977) (width 0.381) (layer Composant) (net 47) (status 810))
+ (segment (start 154.305 69.977) (end 155.956 69.977) (width 0.381) (layer Composant) (net 47))
+ (segment (start 120.65 67.945) (end 122.0978 66.4972) (width 0.381) (layer Composant) (net 48))
+ (segment (start 109.22 68.834) (end 106.807 71.247) (width 0.381) (layer Composant) (net 48))
+ (segment (start 122.0978 66.4972) (end 122.0978 65.0748) (width 0.381) (layer Composant) (net 48))
+ (segment (start 122.0978 65.0748) (end 120.523 63.5) (width 0.381) (layer Composant) (net 48))
+ (segment (start 106.807 74.676) (end 108.204 76.073) (width 0.381) (layer Composant) (net 48) (status 420))
+ (segment (start 106.807 71.247) (end 106.807 74.676) (width 0.381) (layer Composant) (net 48))
+ (segment (start 120.523 63.5) (end 117.856 63.5) (width 0.381) (layer Composant) (net 48))
+ (segment (start 112.522 68.834) (end 109.22 68.834) (width 0.381) (layer Composant) (net 48))
+ (segment (start 117.856 63.5) (end 112.522 68.834) (width 0.381) (layer Composant) (net 48))
+ (segment (start 119.38 68.58) (end 120.65 67.945) (width 0.381) (layer Composant) (net 48) (status 810))
+ (segment (start 108.585 90.297) (end 110.49 90.297) (width 0.381) (layer Composant) (net 49) (status 810))
+ (segment (start 110.49 90.297) (end 111.76 89.027) (width 0.381) (layer Composant) (net 49) (status 420))
+ (segment (start 140.208 82.169) (end 140.208 82.804) (width 0.254) (layer Composant) (net 50))
+ (segment (start 122.174 96.266) (end 123.952 96.266) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 120.396 129.54) (end 124.714 133.858) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 120.396 105.537) (end 120.396 129.54) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 120.904 93.345) (end 120.904 94.996) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 131.064 87.757) (end 129.159 87.757) (width 0.254) (layer Composant) (net 50))
+ (segment (start 129.159 87.757) (end 124.714 92.202) (width 0.254) (layer Composant) (net 50))
+ (segment (start 124.714 92.202) (end 124.714 93.472) (width 0.254) (layer Composant) (net 50))
+ (segment (start 124.714 93.472) (end 124.841 93.98) (width 0.254) (layer Composant) (net 50))
+ (segment (start 124.841 93.98) (end 124.841 93.472) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 124.841 93.472) (end 123.952 92.583) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 123.952 92.583) (end 121.666 92.583) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 121.666 92.583) (end 120.904 93.345) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 134.493 84.328) (end 131.064 87.757) (width 0.254) (layer Composant) (net 50))
+ (segment (start 138.684 84.328) (end 134.493 84.328) (width 0.254) (layer Composant) (net 50))
+ (segment (start 140.208 82.804) (end 138.684 84.328) (width 0.254) (layer Composant) (net 50))
+ (segment (start 120.396 105.537) (end 124.587 101.346) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 125.984 138.938) (end 124.714 137.668) (width 0.254) (layer GND_layer) (net 50) (status 10))
+ (segment (start 125.984 139.446) (end 125.984 138.938) (width 0.254) (layer GND_layer) (net 50) (status 830))
+ (via (at 140.208 82.169) (size 0.889) (layers Composant Cuivre) (net 50))
+ (segment (start 140.208 82.169) (end 138.303 82.169) (width 0.254) (layer Cuivre) (net 50) (status 420))
+ (segment (start 126.4412 95.9612) (end 127.635 95.9866) (width 0.254) (layer Composant) (net 50) (status 420))
+ (segment (start 124.968 94.488) (end 126.4412 95.9612) (width 0.254) (layer Composant) (net 50))
+ (segment (start 124.841 93.98) (end 124.968 94.488) (width 0.254) (layer Composant) (net 50))
+ (segment (start 120.904 94.996) (end 122.174 96.266) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 123.952 96.266) (end 124.587 96.901) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 124.587 96.901) (end 124.587 101.346) (width 0.254) (layer GND_layer) (net 50))
+ (via (at 124.841 93.98) (size 0.635) (layers Composant Cuivre) (net 50))
+ (segment (start 124.714 133.858) (end 124.714 137.668) (width 0.254) (layer GND_layer) (net 50))
+ (segment (start 173.736 82.804) (end 172.593 83.947) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 178.054 82.804) (end 173.736 82.804) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 179.197 83.947) (end 178.054 82.804) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 185.801 83.947) (end 179.197 83.947) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 196.723 73.025) (end 185.801 83.947) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 201.168 73.025) (end 196.723 73.025) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 201.676 73.533) (end 201.168 73.025) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 201.676 77.978) (end 201.676 73.533) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 200.025 79.629) (end 201.676 77.978) (width 0.254) (layer Cuivre) (net 51) (status 810))
+ (segment (start 127.635 116.84) (end 129.032 118.237) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 129.032 118.237) (end 129.032 130.175) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 129.032 130.175) (end 129.921 131.064) (width 0.254) (layer GND_layer) (net 51))
+ (via (at 123.19 85.598) (size 0.889) (layers Composant Cuivre) (net 51))
+ (segment (start 132.334 138.176) (end 133.604 139.446) (width 0.254) (layer GND_layer) (net 51) (status 420))
+ (segment (start 132.334 136.398) (end 132.334 138.176) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 129.921 133.985) (end 132.334 136.398) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 129.921 131.064) (end 129.921 133.985) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 127.635 90.6) (end 127.635 116.84) (width 0.254) (layer GND_layer) (net 51) (tstamp 53D8E600))
+ (segment (start 123.825 86.995) (end 124.195 86.995) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 123.19 86.36) (end 123.825 86.995) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 123.19 85.598) (end 123.19 86.36) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 125.349 84.836) (end 126.873 86.36) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 123.952 84.836) (end 125.349 84.836) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 123.19 85.598) (end 123.952 84.836) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 137.3886 92.3036) (end 137.287 91.948) (width 0.254) (layer Composant) (net 51))
+ (segment (start 137.287 91.948) (end 137.16 85.344) (width 0.254) (layer Composant) (net 51))
+ (segment (start 137.3886 93.726) (end 137.3886 92.3036) (width 0.254) (layer Composant) (net 51) (status 810))
+ (segment (start 126.873 86.36) (end 137.033 86.36) (width 0.254) (layer Cuivre) (net 51))
+ (via (at 137.16 85.344) (size 0.889) (layers Composant Cuivre) (net 51))
+ (segment (start 172.593 83.947) (end 164.846 83.947) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 155.067 83.566) (end 164.465 83.566) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 153.035 85.598) (end 155.067 83.566) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 153.035 85.598) (end 143.637 85.598) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 143.637 85.598) (end 141.859 83.82) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 164.846 83.947) (end 164.465 83.566) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 137.033 86.36) (end 137.16 86.233) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 137.16 86.233) (end 137.16 85.344) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 141.859 83.82) (end 137.922 83.82) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 137.16 84.582) (end 137.16 85.344) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 137.922 83.82) (end 137.16 84.582) (width 0.254) (layer Cuivre) (net 51))
+ (segment (start 127.635 90.435) (end 127.635 90.6) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 127.635 90.435) (end 124.4 87.2) (width 0.254) (layer GND_layer) (net 51) (tstamp 53D8E602))
+ (segment (start 124.195 86.995) (end 124.4 87.2) (width 0.254) (layer GND_layer) (net 51))
+ (segment (start 122.428 94.488) (end 122.174 93.98) (width 0.254) (layer Composant) (net 52))
+ (segment (start 134.366 82.55) (end 134.366 81.661) (width 0.254) (layer Cuivre) (net 52))
+ (segment (start 134.366 81.661) (end 135.128 80.899) (width 0.254) (layer Cuivre) (net 52))
+ (segment (start 135.128 80.899) (end 137.033 80.899) (width 0.254) (layer Cuivre) (net 52))
+ (segment (start 137.033 80.899) (end 138.303 79.629) (width 0.254) (layer Cuivre) (net 52) (status 420))
+ (via (at 134.366 82.55) (size 0.889) (layers Composant Cuivre) (net 52))
+ (segment (start 125.603 120.015) (end 126.111 120.523) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 127.254 138.176) (end 128.524 139.446) (width 0.254) (layer GND_layer) (net 52) (status 420))
+ (segment (start 126.111 133.858) (end 126.111 120.523) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 122.174 93.98) (end 122.174 92.456) (width 0.254) (layer Composant) (net 52))
+ (segment (start 122.174 92.456) (end 128.397 86.233) (width 0.254) (layer Composant) (net 52))
+ (segment (start 128.397 86.233) (end 130.302 86.233) (width 0.254) (layer Composant) (net 52))
+ (segment (start 130.302 86.233) (end 133.858 82.677) (width 0.254) (layer Composant) (net 52))
+ (segment (start 133.858 82.677) (end 134.366 82.55) (width 0.254) (layer Composant) (net 52))
+ (segment (start 127.635 97.4852) (end 125.4252 97.4852) (width 0.254) (layer Composant) (net 52) (status 810))
+ (segment (start 125.4252 97.4852) (end 122.428 94.488) (width 0.254) (layer Composant) (net 52))
+ (segment (start 127.254 135.001) (end 126.111 133.858) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 127.254 135.001) (end 127.254 138.176) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 122.174 94.488) (end 122.936 95.25) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 122.936 95.25) (end 124.841 95.25) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 124.841 95.25) (end 125.603 96.012) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 125.603 96.012) (end 125.603 120.015) (width 0.254) (layer GND_layer) (net 52))
+ (via (at 122.174 93.98) (size 0.635) (layers Composant Cuivre) (net 52))
+ (segment (start 122.174 93.98) (end 122.174 94.488) (width 0.254) (layer GND_layer) (net 52))
+ (segment (start 148.844 87.884) (end 145.161 91.567) (width 0.254) (layer Composant) (net 53))
+ (segment (start 176.784 130.556) (end 185.42 121.92) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 148.844 84.836) (end 148.844 87.884) (width 0.254) (layer Composant) (net 53))
+ (segment (start 176.784 130.556) (end 176.784 136.906) (width 0.254) (layer GND_layer) (net 53) (status 420))
+ (segment (start 153.289 80.772) (end 164.973 80.772) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 164.973 80.772) (end 167.386 78.359) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 167.386 78.359) (end 170.815 78.359) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 170.815 78.359) (end 172.085 77.089) (width 0.254) (layer Cuivre) (net 53) (status 420))
+ (segment (start 172.085 77.089) (end 174.879 74.295) (width 0.254) (layer GND_layer) (net 53) (status 810))
+ (segment (start 174.879 74.295) (end 178.562 74.295) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 178.562 74.295) (end 180.975 76.708) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 180.975 76.708) (end 180.975 90.932) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 180.975 90.932) (end 181.483 91.44) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 181.483 91.44) (end 181.483 102.489) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 181.483 102.489) (end 185.42 106.426) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 185.42 106.426) (end 185.42 121.92) (width 0.254) (layer GND_layer) (net 53))
+ (segment (start 149.19452 85.18652) (end 150.01748 85.18652) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 150.01748 85.18652) (end 150.749 84.455) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 150.749 84.455) (end 150.749 83.312) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 150.749 83.312) (end 153.289 80.772) (width 0.254) (layer Cuivre) (net 53))
+ (segment (start 148.844 84.836) (end 149.19452 85.18652) (width 0.254) (layer Cuivre) (net 53))
+ (via (at 148.844 84.836) (size 0.889) (layers Composant Cuivre) (net 53))
+ (segment (start 143.9164 95.4786) (end 143.129 95.4786) (width 0.254) (layer Composant) (net 53) (status 420))
+ (segment (start 145.161 94.234) (end 143.9164 95.4786) (width 0.254) (layer Composant) (net 53))
+ (segment (start 145.161 91.567) (end 145.161 94.234) (width 0.254) (layer Composant) (net 53))
+ (segment (start 121.158 114.95532) (end 122.174 113.93932) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 121.158 114.95532) (end 121.158 128.397) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 121.158 128.397) (end 125.349 132.588) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 125.984 135.89) (end 125.349 135.255) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 125.984 136.906) (end 125.984 135.89) (width 0.254) (layer GND_layer) (net 54) (status 810))
+ (via (at 123.952 93.98) (size 0.635) (layers Composant Cuivre) (net 54))
+ (segment (start 125.9078 96.4438) (end 127.635 96.4692) (width 0.254) (layer Composant) (net 54) (status 420))
+ (segment (start 123.952 94.488) (end 125.9078 96.4438) (width 0.254) (layer Composant) (net 54))
+ (segment (start 122.174 104.902) (end 122.174 113.93932) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 125.095 96.393) (end 125.095 101.981) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 134.239 83.82) (end 130.81 87.249) (width 0.254) (layer Composant) (net 54))
+ (segment (start 130.81 87.249) (end 128.905 87.249) (width 0.254) (layer Composant) (net 54))
+ (segment (start 128.905 87.249) (end 123.952 92.202) (width 0.254) (layer Composant) (net 54))
+ (segment (start 123.952 92.202) (end 123.952 93.98) (width 0.254) (layer Composant) (net 54))
+ (segment (start 123.952 93.98) (end 123.952 93.472) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 123.952 93.472) (end 123.571 93.091) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 123.571 93.091) (end 121.92 93.091) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 138.303 83.82) (end 134.239 83.82) (width 0.254) (layer Composant) (net 54))
+ (segment (start 139.446 82.677) (end 138.303 83.82) (width 0.254) (layer Composant) (net 54))
+ (segment (start 138.303 77.089) (end 139.446 78.232) (width 0.254) (layer Composant) (net 54) (status 810))
+ (segment (start 121.92 93.091) (end 121.412 93.599) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 121.412 93.599) (end 121.412 94.615) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 121.412 94.615) (end 122.555 95.758) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 122.555 95.758) (end 124.46 95.758) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 139.446 78.232) (end 139.446 82.677) (width 0.254) (layer Composant) (net 54))
+ (segment (start 123.952 93.98) (end 123.952 94.488) (width 0.254) (layer Composant) (net 54))
+ (segment (start 125.349 132.588) (end 125.349 135.255) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 124.46 95.758) (end 125.095 96.393) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 125.095 101.981) (end 122.174 104.902) (width 0.254) (layer GND_layer) (net 54))
+ (segment (start 130.429 129.921) (end 130.429 133.731) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 141.605 84.328) (end 143.383 86.106) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 130.429 133.731) (end 133.604 136.906) (width 0.254) (layer GND_layer) (net 55) (status 420))
+ (segment (start 129.9845 129.4765) (end 130.429 129.921) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 129.9845 109.7915) (end 129.9845 129.4765) (width 0.254) (layer GND_layer) (net 55))
+ (via (at 138.176 85.598) (size 0.635) (layers Composant Cuivre) (net 55))
+ (segment (start 138.176 86.614) (end 138.176 85.598) (width 0.254) (layer Composant) (net 55))
+ (segment (start 138.176 85.598) (end 138.176 85.217) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 137.795 86.995) (end 138.176 86.614) (width 0.254) (layer Composant) (net 55))
+ (segment (start 137.795 91.948) (end 137.795 86.995) (width 0.254) (layer Composant) (net 55))
+ (segment (start 137.8839 92.3036) (end 137.795 91.948) (width 0.254) (layer Composant) (net 55))
+ (segment (start 137.8712 93.726) (end 137.8839 92.3036) (width 0.254) (layer Composant) (net 55) (status 810))
+ (segment (start 138.176 85.217) (end 139.065 84.328) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 139.065 84.328) (end 141.605 84.328) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 143.383 86.106) (end 153.289 86.106) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 153.289 86.106) (end 154.94 84.455) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 154.94 84.455) (end 172.847 84.455) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 172.847 84.455) (end 173.99 83.312) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 173.99 83.312) (end 177.673 83.312) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 177.673 83.312) (end 178.816 84.455) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 178.816 84.455) (end 186.563 84.455) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 186.563 84.455) (end 195.199 75.819) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 195.199 75.819) (end 198.755 75.819) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 198.755 75.819) (end 200.025 74.549) (width 0.254) (layer Cuivre) (net 55) (status 420))
+ (segment (start 124.587 85.852) (end 125.095 85.852) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 125.222 86.868) (end 137.414 86.868) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 138.176 86.106) (end 138.176 85.598) (width 0.254) (layer Cuivre) (net 55))
+ (via (at 124.587 85.852) (size 0.889) (layers Composant Cuivre) (net 55))
+ (segment (start 124.587 85.852) (end 124.587 86.233) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 124.587 86.233) (end 125.222 86.868) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 125.095 85.852) (end 127.5 88.257) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 137.414 86.868) (end 138.176 86.106) (width 0.254) (layer Cuivre) (net 55))
+ (segment (start 128.143 90.8) (end 128.143 107.95) (width 0.254) (layer GND_layer) (net 55) (tstamp 53D8E614))
+ (segment (start 128.143 107.95) (end 129.9845 109.7915) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 128.1 90.2) (end 127.5 89.6) (width 0.254) (layer GND_layer) (net 55) (tstamp 53D8E60E))
+ (segment (start 127.5 89.6) (end 127.5 88.257) (width 0.254) (layer GND_layer) (net 55) (tstamp 53D8E60F))
+ (segment (start 128.143 90.2) (end 128.1 90.2) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 128.143 90.2) (end 128.1 90.2) (width 0.254) (layer GND_layer) (net 55) (tstamp 53D8E616))
+ (segment (start 128.143 90.8) (end 128.143 90.2) (width 0.254) (layer GND_layer) (net 55))
+ (segment (start 217.17 134.62) (end 218.44 135.89) (width 0.254) (layer VDD_layer) (net 56) (status 810))
+ (segment (start 223.52 135.89) (end 224.79 134.62) (width 0.254) (layer VDD_layer) (net 56) (status 420))
+ (segment (start 218.44 135.89) (end 223.52 135.89) (width 0.254) (layer VDD_layer) (net 56))
+ (segment (start 138.049 123.317) (end 137.62736 123.73864) (width 0.381) (layer Composant) (net 57))
+ (segment (start 139.8778 109.22) (end 139.8778 111.0488) (width 0.254) (layer Composant) (net 57) (status 810))
+ (segment (start 178.19624 123.00204) (end 179.63642 124.44222) (width 0.254) (layer Composant) (net 57))
+ (segment (start 136.652 124.0155) (end 130.048 124.0155) (width 0.381) (layer Composant) (net 57) (status 810))
+ (segment (start 139.8778 111.0488) (end 139.954 111.379) (width 0.254) (layer Composant) (net 57))
+ (segment (start 202.4761 111.0107) (end 212.9155 111.0107) (width 0.254) (layer Composant) (net 57) (status 420))
+ (segment (start 168.4179 123.00204) (end 178.19624 123.00204) (width 0.254) (layer Composant) (net 57))
+ (segment (start 138.049 121.031) (end 138.049 123.317) (width 0.381) (layer Composant) (net 57))
+ (segment (start 141.224 117.856) (end 138.049 121.031) (width 0.381) (layer Composant) (net 57))
+ (segment (start 141.224 115.697) (end 141.224 117.856) (width 0.381) (layer Composant) (net 57))
+ (segment (start 139.954 114.3) (end 141.224 115.697) (width 0.381) (layer Composant) (net 57))
+ (segment (start 139.954 111.379) (end 139.954 114.3) (width 0.381) (layer Composant) (net 57))
+ (segment (start 137.3505 124.0155) (end 136.652 124.0155) (width 0.381) (layer Composant) (net 57) (status 430))
+ (segment (start 137.62736 123.73864) (end 137.3505 124.0155) (width 0.381) (layer Composant) (net 57) (status 20))
+ (segment (start 166.15222 125.26772) (end 168.4179 123.00204) (width 0.254) (layer Composant) (net 57))
+ (segment (start 189.04458 124.44222) (end 202.4761 111.0107) (width 0.254) (layer Composant) (net 57))
+ (segment (start 179.63642 124.44222) (end 189.04458 124.44222) (width 0.254) (layer Composant) (net 57))
+ (segment (start 130.048 124.0155) (end 128.27 122.2375) (width 0.381) (layer Composant) (net 57) (status 420))
+ (segment (start 128.27 122.2375) (end 127.0635 122.2375) (width 0.381) (layer Composant) (net 57) (status 810))
+ (segment (start 127.0635 122.2375) (end 123.444 125.857) (width 0.381) (layer Composant) (net 57) (status 420))
+ (segment (start 137.62736 123.73864) (end 139.15644 125.26772) (width 0.254) (layer Composant) (net 57))
+ (segment (start 139.15644 125.26772) (end 166.15222 125.26772) (width 0.254) (layer Composant) (net 57))
+ (segment (start 199.136 95.123) (end 202.819 91.44) (width 0.254) (layer Cuivre) (net 58))
+ (via (at 205.66126 78.74) (size 0.889) (layers Composant Cuivre) (net 58))
+ (segment (start 197.1802 98.7552) (end 197.1802 100.7745) (width 0.254) (layer Composant) (net 58) (status 420))
+ (segment (start 197.104 98.679) (end 197.1802 98.7552) (width 0.254) (layer Composant) (net 58))
+ (via (at 197.104 98.679) (size 0.889) (layers Composant Cuivre) (net 58))
+ (segment (start 197.104 96.647) (end 197.104 98.679) (width 0.254) (layer Cuivre) (net 58))
+ (segment (start 199.136 95.123) (end 198.628 95.123) (width 0.254) (layer Cuivre) (net 58))
+ (segment (start 202.819 91.44) (end 202.819 81.58226) (width 0.254) (layer Cuivre) (net 58))
+ (segment (start 202.819 81.58226) (end 205.66126 78.74) (width 0.254) (layer Cuivre) (net 58))
+ (segment (start 198.628 95.123) (end 197.104 96.647) (width 0.254) (layer Cuivre) (net 58))
+ (segment (start 205.4225 76.835) (end 205.4225 77.83068) (width 0.254) (layer Composant) (net 58) (status 810))
+ (segment (start 205.66126 78.06944) (end 205.66126 78.74) (width 0.254) (layer Composant) (net 58))
+ (segment (start 205.4225 77.83068) (end 205.66126 78.06944) (width 0.254) (layer Composant) (net 58))
+ (segment (start 205.4225 80.645) (end 205.4225 84.35594) (width 0.254) (layer Composant) (net 59) (status 810))
+ (segment (start 204.56652 85.21192) (end 204.56652 90.96248) (width 0.254) (layer Cuivre) (net 59))
+ (via (at 204.56652 85.21192) (size 0.889) (layers Composant Cuivre) (net 59))
+ (segment (start 205.4225 84.35594) (end 204.56652 85.21192) (width 0.254) (layer Composant) (net 59))
+ (segment (start 197.6755 99.3775) (end 198.247 98.806) (width 0.254) (layer Composant) (net 59))
+ (segment (start 197.6755 100.7745) (end 197.6755 99.3775) (width 0.254) (layer Composant) (net 59) (status 810))
+ (segment (start 199.39 96.139) (end 204.56652 90.96248) (width 0.254) (layer Cuivre) (net 59))
+ (segment (start 198.247 98.806) (end 198.247 97.282) (width 0.254) (layer Composant) (net 59))
+ (segment (start 198.247 97.282) (end 199.39 96.139) (width 0.254) (layer Composant) (net 59))
+ (via (at 199.39 96.139) (size 0.889) (layers Composant Cuivre) (net 59))
+ (segment (start 182.51678 106.68) (end 182.87492 107.03814) (width 0.254) (layer Composant) (net 60))
+ (segment (start 174.752 89.408) (end 174.244 89.408) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 174.244 89.408) (end 173.609 90.043) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 173.609 90.043) (end 165.608 90.043) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 165.608 90.043) (end 164.973 89.408) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 164.973 89.408) (end 159.512 89.408) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 159.512 89.408) (end 156.972 91.948) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 156.972 91.948) (end 154.432 91.948) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 135.382 93.726) (end 135.382 94.682) (width 0.254) (layer Composant) (net 60) (status 810))
+ (segment (start 155.702 93.218) (end 154.432 91.948) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 155.702 114.3) (end 155.702 93.218) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 158.877 117.475) (end 155.702 114.3) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 174.752 89.408) (end 174.244 89.408) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 158.877 129.413) (end 158.877 117.475) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 151.384 136.906) (end 158.877 129.413) (width 0.254) (layer GND_layer) (net 60) (status 810))
+ (segment (start 152.781 91.948) (end 154.432 91.948) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 190.9445 107.0102) (end 189.88532 107.0102) (width 0.254) (layer Composant) (net 60) (status 810))
+ (segment (start 152.273 92.456) (end 152.781 91.948) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 139.065 92.456) (end 152.273 92.456) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 136.017 95.504) (end 139.065 92.456) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 135.89 96.139) (end 136.017 95.504) (width 0.254) (layer Cuivre) (net 60))
+ (segment (start 189.85738 107.03814) (end 189.88532 107.0102) (width 0.254) (layer Composant) (net 60))
+ (segment (start 178.054 108.077) (end 179.451 106.68) (width 0.254) (layer Composant) (net 60))
+ (segment (start 178.054 110.363) (end 178.054 108.077) (width 0.254) (layer Composant) (net 60))
+ (via (at 154.432 91.948) (size 0.635) (layers Composant Cuivre) (net 60))
+ (via (at 178.054 110.363) (size 0.889) (layers Composant Cuivre) (net 60))
+ (segment (start 182.87492 107.03814) (end 189.85738 107.03814) (width 0.254) (layer Composant) (net 60))
+ (segment (start 174.244 89.408) (end 173.355 90.297) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 173.355 90.297) (end 173.355 107.95) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 179.451 106.68) (end 182.51678 106.68) (width 0.254) (layer Composant) (net 60))
+ (segment (start 173.355 107.95) (end 175.768 110.363) (width 0.254) (layer GND_layer) (net 60))
+ (segment (start 175.768 110.363) (end 178.054 110.363) (width 0.254) (layer GND_layer) (net 60))
+ (via (at 135.89 96.139) (size 0.889) (layers Composant Cuivre) (net 60))
+ (via (at 174.752 89.408) (size 0.889) (layers Composant Cuivre) (net 60))
+ (segment (start 135.89 95.19) (end 135.382 94.682) (width 0.2) (layer Composant) (net 60) (tstamp 53D8E5E0))
+ (segment (start 135.89 96.139) (end 135.89 95.19) (width 0.2) (layer Composant) (net 60))
+ (segment (start 201.1807 122.7455) (end 201.1807 121.68632) (width 0.254) (layer Composant) (net 61) (status 810))
+ (segment (start 201.1807 121.68632) (end 204.14488 118.72214) (width 0.254) (layer Composant) (net 61))
+ (segment (start 204.14488 118.72214) (end 204.14488 116.9543) (width 0.254) (layer Composant) (net 61))
+ (segment (start 218.44 68.2625) (end 218.44 69.00418) (width 0.254) (layer Composant) (net 61) (status 810))
+ (segment (start 223.52 73.66) (end 218.86418 69.00418) (width 0.254) (layer Composant) (net 61) (status 810))
+ (segment (start 218.86418 69.00418) (end 218.44 69.00418) (width 0.254) (layer Composant) (net 61))
+ (via (at 204.14488 116.9543) (size 0.889) (layers Composant Cuivre) (net 61))
+ (segment (start 204.14488 116.9543) (end 204.2287 116.9543) (width 0.254) (layer Cuivre) (net 61))
+ (segment (start 205.867 91.313) (end 223.52 73.66) (width 0.254) (layer Cuivre) (net 61) (status 420))
+ (segment (start 205.867 91.313) (end 205.867 115.316) (width 0.254) (layer Cuivre) (net 61))
+ (segment (start 204.2287 116.9543) (end 205.867 115.316) (width 0.254) (layer Cuivre) (net 61))
+ (segment (start 210.43138 103.08336) (end 210.43138 103.47706) (width 0.254) (layer Composant) (net 62))
+ (segment (start 224.58172 72.18172) (end 223.52 71.12) (width 0.254) (layer GND_layer) (net 62) (status 420))
+ (segment (start 209.1817 101.83368) (end 210.43138 103.08336) (width 0.254) (layer Composant) (net 62))
+ (segment (start 210.43138 103.47706) (end 210.43138 99.40036) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 210.43138 99.40036) (end 210.86064 98.9711) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 210.86064 98.9711) (end 210.86064 87.35822) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 210.86064 87.35822) (end 223.46412 74.75474) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 223.46412 74.75474) (end 224.5106 74.75474) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 224.5106 74.75474) (end 224.58172 74.68362) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 224.58172 74.68362) (end 224.58172 72.18172) (width 0.254) (layer GND_layer) (net 62))
+ (segment (start 209.1817 100.7745) (end 209.1817 101.83368) (width 0.254) (layer Composant) (net 62) (status 810))
+ (via (at 210.43138 103.47706) (size 0.889) (layers Composant Cuivre) (net 62))
+ (segment (start 207.772 107.44454) (end 213.26856 101.94798) (width 0.254) (layer GND_layer) (net 63))
+ (segment (start 213.26856 101.94798) (end 213.26856 86.45144) (width 0.254) (layer GND_layer) (net 63))
+ (segment (start 213.26856 86.45144) (end 223.52 76.2) (width 0.254) (layer GND_layer) (net 63) (status 420))
+ (segment (start 208.6737 122.7455) (end 208.6737 114.5667) (width 0.254) (layer Composant) (net 63) (status 810))
+ (segment (start 208.6737 114.5667) (end 209.37982 113.86058) (width 0.254) (layer Composant) (net 63))
+ (via (at 209.37982 113.86058) (size 0.889) (layers Composant Cuivre) (net 63))
+ (segment (start 209.37982 113.86058) (end 207.772 112.25276) (width 0.254) (layer GND_layer) (net 63))
+ (segment (start 207.772 112.25276) (end 207.772 107.44454) (width 0.254) (layer GND_layer) (net 63))
+ (segment (start 201.1807 96.44634) (end 201.1807 100.7745) (width 0.254) (layer Composant) (net 64) (status 420))
+ (segment (start 224.50806 74.78776) (end 222.83928 74.78776) (width 0.254) (layer Composant) (net 64))
+ (segment (start 223.52 68.58) (end 224.57918 69.63918) (width 0.254) (layer Composant) (net 64) (status 810))
+ (segment (start 224.57918 69.63918) (end 224.57918 74.71664) (width 0.254) (layer Composant) (net 64))
+ (segment (start 224.57918 74.71664) (end 224.50806 74.78776) (width 0.254) (layer Composant) (net 64))
+ (segment (start 222.83928 74.78776) (end 201.1807 96.44634) (width 0.254) (layer Composant) (net 64))
+ (segment (start 205.1812 98.49358) (end 205.1812 100.7745) (width 0.254) (layer Composant) (net 65) (status 420))
+ (segment (start 214.77478 88.9) (end 205.1812 98.49358) (width 0.254) (layer Composant) (net 65))
+ (segment (start 222.25 88.9) (end 214.77478 88.9) (width 0.254) (layer Composant) (net 65) (status 810))
+ (segment (start 205.6765 100.7745) (end 205.6765 98.60026) (width 0.254) (layer Composant) (net 66) (status 810))
+ (segment (start 212.83676 91.44) (end 222.25 91.44) (width 0.254) (layer Composant) (net 66) (status 420))
+ (segment (start 205.6765 98.60026) (end 212.83676 91.44) (width 0.254) (layer Composant) (net 66))
+ (segment (start 212.9155 114.0079) (end 221.9579 114.0079) (width 0.254) (layer Composant) (net 67) (status 830))
+ (segment (start 221.9579 114.0079) (end 222.25 114.3) (width 0.254) (layer Composant) (net 67) (status 430))
+ (segment (start 218.2495 116.84) (end 222.25 116.84) (width 0.254) (layer VDD_layer) (net 68) (status 420))
+ (via (at 216.68994 115.28044) (size 0.889) (layers Composant Cuivre) (net 68))
+ (segment (start 216.46388 115.5065) (end 216.68994 115.28044) (width 0.254) (layer Composant) (net 68))
+ (segment (start 212.9155 115.5065) (end 216.46388 115.5065) (width 0.254) (layer Composant) (net 68) (status 810))
+ (segment (start 216.68994 115.28044) (end 218.2495 116.84) (width 0.254) (layer VDD_layer) (net 68))
+ (segment (start 219.5449 118.0084) (end 220.9165 119.38) (width 0.254) (layer Composant) (net 69))
+ (segment (start 220.9165 119.38) (end 222.25 119.38) (width 0.254) (layer Composant) (net 69) (status 420))
+ (segment (start 212.9155 118.0084) (end 219.5449 118.0084) (width 0.254) (layer Composant) (net 69) (status 810))
+ (segment (start 212.9155 119.507) (end 219.837 119.507) (width 0.254) (layer Composant) (net 70) (status 810))
+ (segment (start 219.837 119.507) (end 222.25 121.92) (width 0.254) (layer Composant) (net 70) (status 420))
+ (segment (start 212.9155 120.5103) (end 218.3003 120.5103) (width 0.254) (layer Composant) (net 71) (status 810))
+ (segment (start 218.3003 120.5103) (end 222.25 124.46) (width 0.254) (layer Composant) (net 71) (status 420))
+ (segment (start 218.186 123.825) (end 221.361 127) (width 0.254) (layer Composant) (net 72))
+ (segment (start 210.6803 122.7455) (end 210.6803 123.80468) (width 0.254) (layer Composant) (net 72) (status 810))
+ (segment (start 210.6803 123.80468) (end 218.186 123.80468) (width 0.254) (layer Composant) (net 72))
+ (segment (start 218.186 123.80468) (end 218.186 123.825) (width 0.254) (layer Composant) (net 72))
+ (segment (start 221.361 127) (end 222.25 127) (width 0.254) (layer Composant) (net 72) (status 420))
+ (segment (start 206.6798 122.7455) (end 206.6798 123.80468) (width 0.254) (layer Composant) (net 73) (status 810))
+ (segment (start 222.25 129.54) (end 212.41512 129.54) (width 0.254) (layer Composant) (net 73) (status 810))
+ (segment (start 212.41512 129.54) (end 206.6798 123.80468) (width 0.254) (layer Composant) (net 73))
+ (segment (start 210.07324 125.27534) (end 216.8779 132.08) (width 0.254) (layer GND_layer) (net 74))
+ (segment (start 207.1751 123.65228) (end 207.1751 122.7455) (width 0.254) (layer Composant) (net 74) (status 420))
+ (segment (start 208.79816 125.27534) (end 207.1751 123.65228) (width 0.254) (layer Composant) (net 74))
+ (segment (start 210.07324 125.27534) (end 208.79816 125.27534) (width 0.254) (layer Composant) (net 74))
+ (via (at 210.07324 125.27534) (size 0.889) (layers Composant Cuivre) (net 74))
+ (segment (start 216.8779 132.08) (end 222.25 132.08) (width 0.254) (layer GND_layer) (net 74) (status 420))
+ (segment (start 205.1812 126.76378) (end 211.55914 133.14172) (width 0.254) (layer Composant) (net 75))
+ (segment (start 211.55914 133.14172) (end 220.77172 133.14172) (width 0.254) (layer Composant) (net 75))
+ (segment (start 220.77172 133.14172) (end 222.25 134.62) (width 0.254) (layer Composant) (net 75) (status 420))
+ (segment (start 205.1812 122.7455) (end 205.1812 126.76378) (width 0.254) (layer Composant) (net 75) (status 810))
+ (segment (start 204.6859 127.50546) (end 214.34044 137.16) (width 0.254) (layer Composant) (net 76))
+ (segment (start 204.6859 122.7455) (end 204.6859 127.50546) (width 0.254) (layer Composant) (net 76) (status 810))
+ (segment (start 214.34044 137.16) (end 222.25 137.16) (width 0.254) (layer Composant) (net 76) (status 420))
+ (segment (start 211.50072 93.98) (end 207.6831 97.79762) (width 0.254) (layer Composant) (net 77))
+ (segment (start 207.6831 97.79762) (end 207.6831 100.7745) (width 0.254) (layer Composant) (net 77) (status 420))
+ (segment (start 222.25 93.98) (end 211.50072 93.98) (width 0.254) (layer Composant) (net 77) (status 810))
+ (segment (start 211.0232 95.0595) (end 208.1784 97.9043) (width 0.254) (layer Composant) (net 78))
+ (segment (start 224.79 91.44) (end 225.86442 92.51442) (width 0.254) (layer Composant) (net 78) (status 810))
+ (segment (start 225.86442 94.98838) (end 225.7933 95.0595) (width 0.254) (layer Composant) (net 78))
+ (segment (start 225.7933 95.0595) (end 211.0232 95.0595) (width 0.254) (layer Composant) (net 78))
+ (segment (start 225.86442 92.51442) (end 225.86442 94.98838) (width 0.254) (layer Composant) (net 78))
+ (segment (start 208.1784 97.9043) (end 208.1784 100.7745) (width 0.254) (layer Composant) (net 78) (status 420))
+ (segment (start 223.52 92.71) (end 212.16874 92.71) (width 0.254) (layer Composant) (net 79))
+ (segment (start 206.1845 98.69424) (end 206.1845 100.7745) (width 0.254) (layer Composant) (net 79) (status 420))
+ (segment (start 224.79 93.98) (end 223.52 92.71) (width 0.254) (layer Composant) (net 79) (status 810))
+ (segment (start 212.16874 92.71) (end 206.1845 98.69424) (width 0.254) (layer Composant) (net 79))
+ (segment (start 208.6737 98.40976) (end 209.29346 97.79) (width 0.254) (layer Composant) (net 80))
+ (segment (start 209.29346 97.79) (end 223.52 97.79) (width 0.254) (layer Composant) (net 80))
+ (segment (start 208.6737 100.7745) (end 208.6737 98.40976) (width 0.254) (layer Composant) (net 80) (status 810))
+ (segment (start 223.52 97.79) (end 224.79 96.52) (width 0.254) (layer Composant) (net 80) (status 420))
+ (segment (start 223.52 100.33) (end 224.79 99.06) (width 0.254) (layer Composant) (net 81) (status 420))
+ (segment (start 210.6803 100.7745) (end 211.1248 100.33) (width 0.254) (layer Composant) (net 81) (status 810))
+ (segment (start 211.1248 100.33) (end 223.52 100.33) (width 0.254) (layer Composant) (net 81))
+ (segment (start 212.9155 104.013) (end 220.44152 104.013) (width 0.254) (layer Composant) (net 82) (status 810))
+ (segment (start 220.44152 104.013) (end 221.58452 102.87) (width 0.254) (layer Composant) (net 82))
+ (segment (start 221.58452 102.87) (end 223.52 102.87) (width 0.254) (layer Composant) (net 82))
+ (segment (start 223.52 102.87) (end 224.79 101.6) (width 0.254) (layer Composant) (net 82) (status 420))
+ (segment (start 223.4184 105.5116) (end 224.79 104.14) (width 0.254) (layer Composant) (net 83) (status 420))
+ (segment (start 212.9155 105.5116) (end 223.4184 105.5116) (width 0.254) (layer Composant) (net 83) (status 810))
+ (segment (start 218.53144 106.5149) (end 219.96654 107.95) (width 0.254) (layer Composant) (net 84))
+ (segment (start 223.52 107.95) (end 224.79 106.68) (width 0.254) (layer Composant) (net 84) (status 420))
+ (segment (start 219.96654 107.95) (end 223.52 107.95) (width 0.254) (layer Composant) (net 84))
+ (segment (start 212.9155 106.5149) (end 218.53144 106.5149) (width 0.254) (layer Composant) (net 84) (status 810))
+ (segment (start 223.57588 108.00588) (end 224.79 109.22) (width 0.254) (layer VDD_layer) (net 85) (status 420))
+ (segment (start 212.9155 108.0135) (end 213.97468 108.0135) (width 0.254) (layer Composant) (net 85) (status 810))
+ (segment (start 214.91448 108.00588) (end 223.57588 108.00588) (width 0.254) (layer VDD_layer) (net 85))
+ (segment (start 213.97468 108.0135) (end 213.9823 108.00588) (width 0.254) (layer Composant) (net 85))
+ (segment (start 213.9823 108.00588) (end 214.91448 108.00588) (width 0.254) (layer Composant) (net 85))
+ (via (at 214.91448 108.00588) (size 0.889) (layers Composant Cuivre) (net 85))
+ (segment (start 218.75496 110.65764) (end 223.68764 110.65764) (width 0.254) (layer Composant) (net 86))
+ (segment (start 217.10142 109.0041) (end 218.75496 110.65764) (width 0.254) (layer Composant) (net 86))
+ (segment (start 212.9155 109.0041) (end 217.10142 109.0041) (width 0.254) (layer Composant) (net 86) (status 810))
+ (segment (start 223.68764 110.65764) (end 224.79 111.76) (width 0.254) (layer Composant) (net 86) (status 420))
+ (segment (start 221.6531 115.57) (end 223.52 115.57) (width 0.254) (layer Composant) (net 87))
+ (segment (start 219.38488 116.5733) (end 219.456 116.64442) (width 0.254) (layer Composant) (net 87))
+ (segment (start 214.03818 116.5733) (end 219.38488 116.5733) (width 0.254) (layer Composant) (net 87))
+ (segment (start 213.97468 116.5098) (end 214.03818 116.5733) (width 0.254) (layer Composant) (net 87))
+ (segment (start 223.52 115.57) (end 224.79 114.3) (width 0.254) (layer Composant) (net 87) (status 420))
+ (segment (start 212.9155 116.5098) (end 213.97468 116.5098) (width 0.254) (layer Composant) (net 87) (status 810))
+ (segment (start 220.57868 116.64442) (end 221.6531 115.57) (width 0.254) (layer Composant) (net 87))
+ (segment (start 219.456 116.64442) (end 220.57868 116.64442) (width 0.254) (layer Composant) (net 87))
+ (segment (start 213.40826 96.52) (end 222.25 96.52) (width 0.254) (layer VDD_layer) (net 88) (status 420))
+ (segment (start 207.1751 100.7745) (end 207.1751 101.83368) (width 0.254) (layer Composant) (net 88) (status 810))
+ (segment (start 207.6196 102.30612) (end 207.62214 102.30612) (width 0.254) (layer Composant) (net 88))
+ (segment (start 207.62214 102.30612) (end 213.40826 96.52) (width 0.254) (layer VDD_layer) (net 88))
+ (via (at 207.62214 102.30612) (size 0.889) (layers Composant Cuivre) (net 88))
+ (segment (start 207.6196 102.27818) (end 207.6196 102.30612) (width 0.254) (layer Composant) (net 88))
+ (segment (start 207.1751 101.83368) (end 207.6196 102.27818) (width 0.254) (layer Composant) (net 88))
+ (segment (start 223.70542 115.75542) (end 224.79 116.84) (width 0.254) (layer VDD_layer) (net 89) (status 420))
+ (segment (start 220.0021 115.75542) (end 223.70542 115.75542) (width 0.254) (layer VDD_layer) (net 89))
+ (segment (start 216.32926 116.14912) (end 219.6084 116.14912) (width 0.254) (layer Composant) (net 89))
+ (segment (start 216.19464 116.0145) (end 216.32926 116.14912) (width 0.254) (layer Composant) (net 89))
+ (segment (start 219.6084 116.14912) (end 220.0021 115.75542) (width 0.254) (layer Composant) (net 89))
+ (segment (start 212.9155 116.0145) (end 216.19464 116.0145) (width 0.254) (layer Composant) (net 89) (status 810))
+ (via (at 220.0021 115.75542) (size 0.889) (layers Composant Cuivre) (net 89))
+ (segment (start 219.2147 117.0051) (end 220.3196 118.11) (width 0.254) (layer Composant) (net 90))
+ (segment (start 223.52 118.11) (end 224.79 119.38) (width 0.254) (layer Composant) (net 90) (status 420))
+ (segment (start 220.3196 118.11) (end 223.52 118.11) (width 0.254) (layer Composant) (net 90))
+ (segment (start 212.9155 117.0051) (end 219.2147 117.0051) (width 0.254) (layer Composant) (net 90) (status 810))
+ (segment (start 223.52 123.19) (end 224.79 121.92) (width 0.254) (layer VDD_layer) (net 91) (status 420))
+ (via (at 206.502 126.238) (size 0.889) (layers Composant Cuivre) (net 91))
+ (segment (start 208.407 123.19) (end 223.52 123.19) (width 0.254) (layer VDD_layer) (net 91))
+ (segment (start 206.502 125.58522) (end 205.6765 124.75972) (width 0.254) (layer Composant) (net 91))
+ (segment (start 206.502 126.238) (end 206.502 125.095) (width 0.254) (layer VDD_layer) (net 91))
+ (segment (start 206.502 126.238) (end 206.502 125.58522) (width 0.254) (layer Composant) (net 91))
+ (segment (start 206.502 125.095) (end 208.407 123.19) (width 0.254) (layer VDD_layer) (net 91))
+ (segment (start 205.6765 122.7455) (end 205.6765 124.75972) (width 0.254) (layer Composant) (net 91) (status 810))
+ (segment (start 219.94368 119.0117) (end 221.79026 120.85828) (width 0.254) (layer Composant) (net 92))
+ (segment (start 221.79026 120.85828) (end 223.30664 120.85828) (width 0.254) (layer Composant) (net 92))
+ (segment (start 212.9155 119.0117) (end 219.94368 119.0117) (width 0.254) (layer Composant) (net 92) (status 810))
+ (segment (start 223.37776 123.04776) (end 224.79 124.46) (width 0.254) (layer Composant) (net 92) (status 420))
+ (segment (start 223.37776 120.9294) (end 223.37776 123.04776) (width 0.254) (layer Composant) (net 92))
+ (segment (start 223.30664 120.85828) (end 223.37776 120.9294) (width 0.254) (layer Composant) (net 92))
+ (segment (start 223.52 125.73) (end 224.79 127) (width 0.254) (layer Composant) (net 93) (status 420))
+ (segment (start 211.85632 118.5037) (end 211.85632 120.88876) (width 0.254) (layer Composant) (net 93))
+ (segment (start 211.85632 120.88876) (end 212.32876 121.3612) (width 0.254) (layer Composant) (net 93))
+ (segment (start 212.9155 118.5037) (end 211.85632 118.5037) (width 0.254) (layer Composant) (net 93) (status 810))
+ (segment (start 212.32876 121.3612) (end 217.21572 121.3612) (width 0.254) (layer Composant) (net 93))
+ (segment (start 217.21572 121.3612) (end 221.58452 125.73) (width 0.254) (layer Composant) (net 93))
+ (segment (start 221.58452 125.73) (end 223.52 125.73) (width 0.254) (layer Composant) (net 93))
+ (segment (start 223.52 128.27) (end 224.79 129.54) (width 0.254) (layer Composant) (net 94) (status 420))
+ (segment (start 210.1723 122.7455) (end 210.1723 124.13996) (width 0.254) (layer Composant) (net 94) (status 810))
+ (segment (start 214.30234 128.27) (end 223.52 128.27) (width 0.254) (layer Composant) (net 94))
+ (segment (start 210.1723 124.13996) (end 214.30234 128.27) (width 0.254) (layer Composant) (net 94))
+ (segment (start 223.52 130.81) (end 212.95868 130.81) (width 0.254) (layer Composant) (net 95))
+ (segment (start 224.79 132.08) (end 223.52 130.81) (width 0.254) (layer Composant) (net 95) (status 810))
+ (segment (start 206.1845 124.03582) (end 206.1845 122.7455) (width 0.254) (layer Composant) (net 95) (status 420))
+ (segment (start 212.95868 130.81) (end 206.1845 124.03582) (width 0.254) (layer Composant) (net 95))
+ (segment (start 210.1723 99.71532) (end 221.59468 99.71532) (width 0.254) (layer Composant) (net 96))
+ (segment (start 210.1723 100.7745) (end 210.1723 99.71532) (width 0.254) (layer Composant) (net 96) (status 810))
+ (segment (start 221.59468 99.71532) (end 222.25 99.06) (width 0.254) (layer Composant) (net 96) (status 420))
+ (segment (start 220.3323 103.5177) (end 222.25 101.6) (width 0.254) (layer Composant) (net 97) (status 420))
+ (segment (start 212.9155 103.5177) (end 220.3323 103.5177) (width 0.254) (layer Composant) (net 97) (status 810))
+ (segment (start 212.9155 105.0163) (end 221.3737 105.0163) (width 0.254) (layer Composant) (net 98) (status 810))
+ (segment (start 221.3737 105.0163) (end 222.25 104.14) (width 0.254) (layer Composant) (net 98) (status 420))
+ (segment (start 212.9155 106.0069) (end 221.5769 106.0069) (width 0.254) (layer Composant) (net 99) (status 810))
+ (segment (start 221.5769 106.0069) (end 222.25 106.68) (width 0.254) (layer Composant) (net 99) (status 420))
+ (segment (start 222.25 109.22) (end 218.67368 109.22) (width 0.254) (layer Composant) (net 100) (status 810))
+ (segment (start 218.67368 109.22) (end 216.46388 107.0102) (width 0.254) (layer Composant) (net 100))
+ (segment (start 216.46388 107.0102) (end 212.9155 107.0102) (width 0.254) (layer Composant) (net 100) (status 420))
+ (segment (start 212.9155 109.5121) (end 215.392 109.5121) (width 0.254) (layer Composant) (net 101) (status 810))
+ (segment (start 215.392 109.5121) (end 217.6399 111.76) (width 0.254) (layer Composant) (net 101))
+ (segment (start 217.6399 111.76) (end 222.25 111.76) (width 0.254) (layer Composant) (net 101) (status 420))
+ (segment (start 190.0555 109.88548) (end 190.0555 107.315) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 129.032 91.3765) (end 128.9685 91.44) (width 0.4) (layer Cuivre) (net 102) (status 430))
+ (segment (start 109.4105 84.328) (end 109.601 84.328) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 110.744 83.312) (end 110.744 81.407) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 110.744 81.407) (end 110.744 78.613) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 76.327 111.379) (end 75.311 111.379) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 75.311 111.379) (end 74.549 112.141) (width 0.4) (layer Composant) (net 102))
+ (segment (start 74.549 112.141) (end 74.549 117.221) (width 0.4) (layer Composant) (net 102))
+ (segment (start 74.549 117.221) (end 76.327 118.999) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 134.3914 94.9452) (end 135.001 95.5548) (width 0.4) (layer Composant) (net 102))
+ (segment (start 135.001 95.5548) (end 135.001 97.663) (width 0.4) (layer Composant) (net 102))
+ (segment (start 163.068 75.311) (end 163.068 73.406) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 163.068 73.406) (end 162.56 72.898) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 162.56 72.898) (end 151.003 72.898) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 137.3886 109.22) (end 137.3886 108.077) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 137.3886 108.077) (end 137.668 107.823) (width 0.4) (layer Composant) (net 102))
+ (segment (start 137.668 107.823) (end 137.668 105.029) (width 0.4) (layer Composant) (net 102))
+ (segment (start 97.409 121.412) (end 96.901 121.412) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 96.901 121.412) (end 95.25 123.063) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 95.25 123.063) (end 88.646 123.063) (width 0.4) (layer Composant) (net 102))
+ (segment (start 88.646 123.063) (end 86.741 121.158) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 100.965 60.833) (end 100.965 66.929) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 189.23 74.676) (end 191.008 74.676) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 191.008 74.676) (end 191.008 75.438) (width 0.4) (layer Composant) (net 102))
+ (segment (start 191.008 75.438) (end 191.897 75.438) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 191.897 75.438) (end 192.532 75.1205) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 127.635 99.9744) (end 126.4412 99.9744) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 141.478 82.423) (end 141.605 82.55) (width 0.4) (layer GND_layer) (net 102))
+ (via (at 141.478 82.423) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 141.478 82.423) (end 141.478 84.8995) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 141.605 82.55) (end 141.605 86.741) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 141.605 86.741) (end 141.605 89.027) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 131.8768 108.1278) (end 131.826 107.95) (width 0.4) (layer Composant) (net 102))
+ (segment (start 141.605 86.741) (end 134.366 86.741) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 133.477 85.852) (end 131.699 85.852) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 134.366 86.741) (end 133.477 85.852) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 175.641 78.613) (end 175.641 86.741) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 177.165 77.089) (end 175.641 78.613) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 176.149 87.249) (end 168.529 87.249) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 140.6525 90.4875) (end 140.6525 91.059) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 141.605 89.535) (end 140.6525 90.4875) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 141.605 89.027) (end 141.605 89.535) (width 0.4) (layer Composant) (net 102))
+ (segment (start 121.158 101.854) (end 121.158 102.616) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 123.571 99.06) (end 121.158 101.854) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 183.134 128.27) (end 183.134 133.604) (width 0.4) (layer Composant) (net 102))
+ (segment (start 86.741 117.094) (end 86.741 115.57) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 128.9685 91.44) (end 128.9685 89.8525) (width 0.4) (layer Composant) (net 102))
+ (segment (start 129.8702 92.3417) (end 128.9685 91.44) (width 0.4) (layer Composant) (net 102))
+ (segment (start 129.8702 93.726) (end 129.8702 92.3417) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 194.691 73.66) (end 194.691 73.406) (width 0.4) (layer Composant) (net 102))
+ (segment (start 194.183 74.168) (end 194.691 73.66) (width 0.4) (layer Composant) (net 102))
+ (segment (start 194.183 75.311) (end 194.183 74.168) (width 0.4) (layer Composant) (net 102))
+ (segment (start 193.167 75.311) (end 194.183 75.311) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 192.532 75.1205) (end 193.167 75.311) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 86.741 117.094) (end 86.741 121.158) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 119.38 102.616) (end 121.158 102.616) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 117.348 100.584) (end 119.38 102.616) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 114.681 100.584) (end 117.348 100.584) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 112.522 98.425) (end 114.681 100.584) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 80.772 77.089) (end 75.438 73.025) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 93.599 106.934) (end 93.599 96.774) (width 0.4) (layer Composant) (net 102))
+ (segment (start 92.075 95.25) (end 88.9 95.25) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 93.599 96.774) (end 92.075 95.25) (width 0.4) (layer Composant) (net 102))
+ (segment (start 190.0555 115.189) (end 190.0555 116.18468) (width 0.4) (layer Cuivre) (net 102) (status 810))
+ (segment (start 189.48146 116.18468) (end 190.0555 116.18468) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 131.826 107.95) (end 131.826 105.537) (width 0.4) (layer Composant) (net 102))
+ (segment (start 131.826 105.537) (end 132.588 104.775) (width 0.4) (layer Composant) (net 102))
+ (segment (start 132.588 104.775) (end 132.588 103.632) (width 0.4) (layer Composant) (net 102))
+ (segment (start 131.8768 109.22) (end 131.8768 108.1278) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 126.4412 99.9744) (end 125.349 100.7745) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 109.4105 84.328) (end 109.4105 82.8675) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 129.032 89.789) (end 129.032 91.3765) (width 0.4) (layer Cuivre) (net 102) (status 20))
+ (segment (start 189.15634 116.5098) (end 189.48146 116.18468) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 189.88532 116.5098) (end 190.9445 116.5098) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 189.15634 116.5098) (end 189.88532 116.5098) (width 0.4) (layer Composant) (net 102))
+ (segment (start 189.88532 116.5098) (end 189.88532 114.0079) (width 0.254) (layer Composant) (net 102))
+ (segment (start 189.88532 114.0079) (end 190.9445 114.0079) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 189.88532 113.0173) (end 189.88532 114.0079) (width 0.254) (layer Composant) (net 102))
+ (segment (start 209.1817 122.7455) (end 209.1817 124.24918) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 209.1817 124.24918) (end 209.16646 124.26442) (width 0.4) (layer Composant) (net 102))
+ (segment (start 91.694 108.839) (end 91.694 112.903) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 208.28 123.37796) (end 209.16646 124.26442) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 213.97468 110.5027) (end 214.45474 110.5027) (width 0.4) (layer Composant) (net 102))
+ (segment (start 152.4 115.57) (end 152.273 115.697) (width 0.4) (layer VDD_layer) (net 102))
+ (segment (start 211.4042 107.5055) (end 211.45754 107.5055) (width 0.4) (layer GND_layer) (net 102))
+ (via (at 211.4042 107.5055) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 214.45474 110.5027) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 211.4042 107.5055) (end 212.9155 107.5055) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 213.44636 111.506) (end 213.97468 111.506) (width 0.254) (layer Composant) (net 102) (status 10))
+ (segment (start 212.9155 111.506) (end 213.44636 111.506) (width 0.254) (layer Composant) (net 102) (status 830))
+ (segment (start 213.44636 112.014) (end 213.97468 112.014) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 212.9155 112.014) (end 213.44636 112.014) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 213.44636 111.506) (end 213.44636 112.014) (width 0.254) (layer Composant) (net 102) (status 30))
+ (segment (start 213.83244 112.5093) (end 213.97468 112.36706) (width 0.4) (layer Composant) (net 102))
+ (segment (start 213.97468 112.36706) (end 213.97468 112.014) (width 0.4) (layer Composant) (net 102))
+ (segment (start 212.9155 112.5093) (end 213.83244 112.5093) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 213.83244 112.5093) (end 213.97468 112.65154) (width 0.4) (layer Composant) (net 102))
+ (segment (start 213.97468 112.65154) (end 213.97468 113.0173) (width 0.4) (layer Composant) (net 102))
+ (segment (start 212.9155 113.0173) (end 213.97468 113.0173) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 209.677 98.69424) (end 209.296 99.07524) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 209.296 99.07524) (end 209.296 99.8855) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 209.677 98.69424) (end 209.677 100.7745) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 203.454 99.71532) (end 202.6793 99.71532) (width 0.254) (layer Composant) (net 102))
+ (segment (start 204.6859 99.71532) (end 203.454 99.71532) (width 0.254) (layer Composant) (net 102))
+ (segment (start 203.454 98.67392) (end 203.454 99.71532) (width 0.254) (layer Composant) (net 102))
+ (via (at 199.644 97.536) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 199.644 97.536) (end 199.644 99.2505) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 199.644 99.2505) (end 199.009 99.8855) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 190.9445 113.0173) (end 189.88532 113.0173) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 93.599 106.934) (end 91.694 108.839) (width 0.4) (layer Composant) (net 102))
+ (segment (start 97.409 82.931) (end 103.632 76.708) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 102.108 66.929) (end 100.965 66.929) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 175.641 86.741) (end 176.149 87.249) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 104.267 72.1995) (end 104.267 69.088) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 104.14 139.827) (end 104.14 140.462) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 128.27 74.676) (end 130.1115 74.676) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 85.9155 114.7445) (end 84.836 114.7445) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 86.741 115.57) (end 85.9155 114.7445) (width 0.4) (layer Composant) (net 102))
+ (segment (start 144.8054 104.4702) (end 145.288 103.8225) (width 0.4) (layer Composant) (net 102))
+ (segment (start 143.129 104.4702) (end 144.8054 104.4702) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 140.3858 94.9198) (end 140.208 95.123) (width 0.4) (layer Composant) (net 102))
+ (segment (start 140.3858 93.726) (end 140.3858 94.9198) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 77.597 130.429) (end 74.422 130.429) (width 0.4) (layer Composant) (net 102))
+ (segment (start 78.867 129.159) (end 77.597 130.429) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 145.415 100.076) (end 146.812 100.076) (width 0.4) (layer Composant) (net 102))
+ (segment (start 144.8054 99.4664) (end 145.415 100.076) (width 0.254) (layer Composant) (net 102))
+ (segment (start 143.129 99.4664) (end 144.8054 99.4664) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 105.156 91.948) (end 106.68 90.424) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 145.3515 103.886) (end 145.288 103.8225) (width 0.4) (layer Cuivre) (net 102) (status 430))
+ (segment (start 101.6 98.933) (end 105.156 95.377) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 110.744 141.859) (end 115.951 141.859) (width 0.4) (layer Composant) (net 102))
+ (segment (start 103.378 112.522) (end 101.6 110.744) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 109.601 84.328) (end 110.109 83.82) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 146.6215 100.2665) (end 146.812 100.076) (width 0.4) (layer Cuivre) (net 102))
+ (via (at 111.252 83.82) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 152.4 119.507) (end 152.4 115.57) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 151.892 120.015) (end 152.4 119.507) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 159.385 115.57) (end 152.4 115.57) (width 0.4) (layer VDD_layer) (net 102))
+ (segment (start 159.512 115.697) (end 159.385 115.57) (width 0.4) (layer VDD_layer) (net 102))
+ (segment (start 159.4485 115.6335) (end 159.512 115.697) (width 0.4) (layer Composant) (net 102))
+ (segment (start 159.4485 114.046) (end 159.4485 115.6335) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 123.6345 103.505) (end 124.587 104.521) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 105.7275 90.424) (end 102.8065 93.345) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 106.68 90.424) (end 105.7275 90.424) (width 0.4) (layer Composant) (net 102))
+ (segment (start 158.623 108.966) (end 159.512 108.966) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 158.242 108.585) (end 158.623 108.966) (width 0.4) (layer Composant) (net 102))
+ (segment (start 158.242 106.045) (end 158.242 108.585) (width 0.4) (layer Composant) (net 102))
+ (segment (start 158.75 105.537) (end 158.242 106.045) (width 0.4) (layer Composant) (net 102))
+ (segment (start 98.7425 90.043) (end 97.282 90.043) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 97.663 90.424) (end 106.68 90.424) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 97.282 90.043) (end 97.663 90.424) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 75.438 81.661) (end 78.105 84.328) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 75.438 73.025) (end 75.438 81.661) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 78.105 93.091) (end 78.105 84.328) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 133.731 89.535) (end 131.699 87.503) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 131.699 87.503) (end 131.699 87.122) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 144.653 113.03) (end 144.0815 113.6015) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 144.0815 113.6015) (end 143.51 113.6015) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 142.24 108.839) (end 143.637 110.236) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.183 60.452) (end 162.814 60.452) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 196.215 62.484) (end 194.183 60.452) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 196.215 68.326) (end 196.215 62.484) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 195.961 68.58) (end 196.215 68.326) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.691 68.58) (end 195.961 68.58) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 130.937 60.452) (end 129.286 62.103) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 129.286 62.103) (end 129.286 66.929) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 129.286 66.929) (end 127.635 68.58) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 162.814 60.452) (end 130.937 60.452) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 131.064 111.252) (end 131.064 112.2045) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 131.064 112.2045) (end 131.0005 112.268) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 131.8768 110.4392) (end 131.064 111.252) (width 0.254) (layer Composant) (net 102))
+ (segment (start 110.744 141.859) (end 110.744 139.446) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 194.6783 98.4377) (end 195.58 97.536) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 195.58 97.536) (end 199.644 97.536) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.6783 99.25304) (end 194.6783 98.4377) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 200.78192 98.67392) (end 199.644 97.536) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 135.001 97.663) (end 135.636 98.298) (width 0.4) (layer Composant) (net 102))
+ (segment (start 135.636 98.298) (end 137.668 98.298) (width 0.4) (layer Composant) (net 102))
+ (segment (start 194.6783 100.7237) (end 190.5 104.902) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 190.5 104.902) (end 190.5 109.44098) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 190.5 109.44098) (end 189.43828 110.5027) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.6783 99.25304) (end 194.6783 100.7237) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 175.133 113.157) (end 173.863 114.427) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 173.863 114.427) (end 173.863 122.428) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 173.863 122.428) (end 176.276 124.841) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 176.149 113.157) (end 175.133 113.157) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 214.45474 118.97614) (end 209.16646 124.26442) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 214.45474 110.5027) (end 214.45474 118.97614) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.47432 98.69424) (end 203.454 98.67392) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 209.677 98.69424) (end 203.47432 98.69424) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.454 98.67392) (end 200.78192 98.67392) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 207.96504 123.063) (end 209.16646 124.26442) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 204.851 123.063) (end 207.96504 123.063) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.79436 124.11964) (end 204.851 123.063) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.79436 124.61748) (end 203.79436 124.11964) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 221.869 66.04) (end 215.773 72.136) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 215.773 72.136) (end 211.074 72.136) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 223.52 66.04) (end 221.869 66.04) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 211.074 72.136) (end 212.23732 73.29932) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 212.23732 73.29932) (end 212.23732 76.24826) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 195.961 72.136) (end 211.074 72.136) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.691 73.406) (end 195.961 72.136) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.691 73.406) (end 194.691 68.58) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 224.79 87.884) (end 226.187 86.487) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 226.187 86.487) (end 226.187 68.707) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 226.187 68.707) (end 223.52 66.04) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 224.79 88.9) (end 224.79 87.884) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 198.3105 136.3345) (end 201.676 139.7) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 201.676 139.7) (end 224.155 139.7) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 224.155 139.7) (end 224.79 139.065) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 224.79 139.065) (end 224.79 137.16) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 198.3105 127.5715) (end 198.3105 136.3345) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 189.15634 126.29134) (end 190.5 127.635) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 143.637 110.236) (end 143.637 112.014) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 143.637 112.014) (end 144.653 113.03) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 141.859 109.22) (end 142.24 108.839) (width 0.4) (layer Composant) (net 102))
+ (segment (start 141.3764 109.22) (end 141.859 109.22) (width 0.381) (layer Composant) (net 102) (status 810))
+ (segment (start 141.732 113.3475) (end 143.256 113.3475) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 143.256 113.3475) (end 143.51 113.6015) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 137.287 113.538) (end 137.287 117.475) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 137.287 117.475) (end 136.652 118.11) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 136.652 118.11) (end 136.652 120.396) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 136.5885 111.633) (end 136.5885 112.8395) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 136.5885 112.8395) (end 137.287 113.538) (width 0.4) (layer Composant) (net 102))
+ (segment (start 81.28 140.843) (end 79.375 138.938) (width 0.4) (layer Composant) (net 102))
+ (segment (start 79.375 138.938) (end 78.74 138.938) (width 0.4) (layer Composant) (net 102))
+ (segment (start 78.74 138.938) (end 77.597 137.795) (width 0.4) (layer Composant) (net 102))
+ (segment (start 77.597 137.795) (end 77.597 135.509) (width 0.4) (layer Composant) (net 102))
+ (segment (start 77.597 135.509) (end 76.327 134.239) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 140.335 107.823) (end 140.335 104.4956) (width 0.4) (layer Composant) (net 102))
+ (segment (start 141.3764 108.077) (end 141.351 108.077) (width 0.4) (layer Composant) (net 102))
+ (segment (start 141.351 108.077) (end 141.097 107.823) (width 0.4) (layer Composant) (net 102))
+ (segment (start 141.097 107.823) (end 140.335 107.823) (width 0.4) (layer Composant) (net 102))
+ (segment (start 139.3952 108.1024) (end 139.3952 109.22) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 141.3764 109.22) (end 141.3764 108.077) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 140.335 107.823) (end 139.7 107.823) (width 0.4) (layer Composant) (net 102))
+ (via (at 131.699 82.804) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 209.677 98.69424) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 146.812 100.076) (end 146.812 103.886) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 146.7485 103.8225) (end 146.812 103.886) (width 0.4) (layer Composant) (net 102))
+ (segment (start 145.288 103.8225) (end 146.7485 103.8225) (width 0.4) (layer Composant) (net 102))
+ (segment (start 150.876 77.1525) (end 150.876 75.311) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 151.003 75.184) (end 151.003 72.898) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 150.876 75.311) (end 151.003 75.184) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 164.592 83.312) (end 168.529 87.249) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 164.592 83.2485) (end 164.592 83.312) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 108.077 89.027) (end 108.585 89.027) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 106.68 90.424) (end 108.077 89.027) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 106.68 91.313) (end 106.68 90.424) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 108.712 93.345) (end 106.68 91.313) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 112.522 93.345) (end 108.712 93.345) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 168.529 87.249) (end 165.989 87.249) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (segment (start 194.691 83.185) (end 194.691 73.406) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 193.929 83.947) (end 194.691 83.185) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 193.2305 83.2485) (end 193.929 83.947) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 192.532 83.2485) (end 193.2305 83.2485) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 192.532 87.503) (end 189.23 90.805) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 192.532 83.2485) (end 192.532 87.503) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 105.664 74.676) (end 103.632 76.708) (width 0.4) (layer Composant) (net 102))
+ (segment (start 105.664 72.898) (end 105.664 74.676) (width 0.4) (layer Composant) (net 102))
+ (segment (start 104.9655 72.1995) (end 105.664 72.898) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 104.267 72.1995) (end 104.9655 72.1995) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 80.772 77.089) (end 85.979 77.089) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 106.48 82.931) (end 106.48 88.192) (width 0.4) (layer Composant) (net 102))
+ (segment (start 107.242 82.169) (end 106.48 82.931) (width 0.4) (layer Composant) (net 102))
+ (segment (start 108.712 82.169) (end 107.242 82.169) (width 0.4) (layer Composant) (net 102))
+ (segment (start 177.2285 77.1525) (end 177.165 77.089) (width 0.4) (layer Composant) (net 102))
+ (segment (start 178.562 77.1525) (end 177.2285 77.1525) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 123.571 99.695) (end 123.571 99.06) (width 0.4) (layer Composant) (net 102))
+ (segment (start 124.587 100.711) (end 123.571 99.695) (width 0.4) (layer Composant) (net 102))
+ (segment (start 140.208 95.123) (end 138.049 95.123) (width 0.4) (layer Composant) (net 102))
+ (via (at 189.15634 116.5098) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 166.243 89.535) (end 168.529 87.249) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 166.243 90.932) (end 166.243 89.535) (width 0.4) (layer Composant) (net 102))
+ (segment (start 159.4485 109.0295) (end 159.512 108.966) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 164.846 90.932) (end 166.243 90.932) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 135.763 102.997) (end 137.668 105.029) (width 0.4) (layer Composant) (net 102))
+ (segment (start 135.763 102.997) (end 132.588 103.632) (width 0.4) (layer Composant) (net 102))
+ (segment (start 129.3114 103.4542) (end 129.54 103.632) (width 0.254) (layer Composant) (net 102))
+ (segment (start 127.635 103.4796) (end 129.3114 103.4542) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 139.7 107.823) (end 139.446 108.077) (width 0.4) (layer Composant) (net 102))
+ (segment (start 139.446 108.077) (end 139.4206 108.077) (width 0.4) (layer Composant) (net 102))
+ (segment (start 139.4206 108.077) (end 139.3952 108.1024) (width 0.4) (layer Composant) (net 102))
+ (segment (start 137.668 95.504) (end 137.668 98.298) (width 0.4) (layer Composant) (net 102))
+ (segment (start 137.668 98.298) (end 137.668 105.029) (width 0.4) (layer Composant) (net 102))
+ (segment (start 131.699 82.804) (end 131.699 85.852) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 131.699 85.852) (end 131.699 87.122) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 161.163 68.58) (end 161.544 68.58) (width 0.4) (layer GND_layer) (net 102) (status 830))
+ (segment (start 161.544 68.58) (end 162.814 67.31) (width 0.4) (layer GND_layer) (net 102) (status 10))
+ (segment (start 162.814 67.31) (end 162.814 60.452) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 131.699 82.804) (end 130.048 84.455) (width 0.4) (layer Composant) (net 102))
+ (segment (start 130.048 84.455) (end 128.8415 84.455) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 190.5 127.635) (end 198.247 127.635) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 198.3105 127.5715) (end 199.644 126.238) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 198.247 127.635) (end 198.3105 127.5715) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 189.15634 116.5098) (end 189.15634 126.29134) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 188.214 115.56746) (end 189.15634 116.5098) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 188.214 111.125) (end 188.214 115.56746) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 188.8363 110.5027) (end 188.214 111.125) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 189.43828 110.5027) (end 188.8363 110.5027) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 93.726 132.588) (end 100.965 139.827) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 86.741 132.588) (end 93.726 132.588) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 85.852 132.588) (end 82.423 129.159) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 82.423 129.159) (end 78.867 129.159) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 132.715 75.438) (end 132.715 81.788) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 132.715 81.788) (end 131.699 82.804) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 91.694 112.903) (end 89.408 112.903) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 89.408 112.903) (end 86.741 115.57) (width 0.4) (layer Composant) (net 102))
+ (segment (start 104.267 69.088) (end 102.108 66.929) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 97.282 90.043) (end 91.694 90.043) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 164.846 90.932) (end 164.846 93.4085) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 147.32 115.697) (end 144.653 113.03) (width 0.4) (layer VDD_layer) (net 102))
+ (segment (start 159.4485 105.537) (end 158.75 105.537) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 104.14 140.462) (end 105.537 141.859) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 130.1115 74.676) (end 130.937 75.5015) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 105.537 141.859) (end 110.744 141.859) (width 0.4) (layer Composant) (net 102))
+ (segment (start 121.285 102.489) (end 121.285 101.346) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 121.158 102.616) (end 121.285 102.489) (width 0.4) (layer Composant) (net 102))
+ (segment (start 86.741 132.588) (end 85.852 132.588) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 103.632 79.883) (end 105.156 81.407) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 105.156 81.407) (end 110.744 81.407) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 103.632 76.708) (end 103.632 79.883) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 97.409 82.931) (end 89.281 82.931) (width 0.4) (layer Cuivre) (net 102) (status 20))
+ (segment (start 89.281 82.931) (end 88.9 82.55) (width 0.4) (layer Cuivre) (net 102) (status 430))
+ (segment (start 91.694 90.043) (end 88.9 92.837) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 88.9 92.837) (end 88.9 95.25) (width 0.4) (layer GND_layer) (net 102) (status 420))
+ (segment (start 85.979 77.089) (end 88.9 80.01) (width 0.4) (layer Composant) (net 102))
+ (segment (start 88.9 80.01) (end 88.9 82.55) (width 0.4) (layer Composant) (net 102) (status 420))
+ (via (at 146.812 103.886) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 146.812 100.076) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 150.876 75.311) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 163.068 75.311) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 106.68 90.424) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 132.715 75.438) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 86.741 132.588) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 100.965 139.827) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 117.729 75.184) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 103.632 76.708) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 97.282 90.043) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 152.4 115.57) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 159.512 115.697) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 103.378 112.522) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 193.929 83.947) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 194.691 73.406) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 123.571 99.06) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 121.158 102.616) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 129.032 89.789) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 163.068 74.676) (end 161.29 74.676) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 115.951 141.859) (end 118.364 139.446) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 101.6 110.744) (end 101.6 98.933) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 86.741 125.349) (end 86.741 129.54) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 163.068 75.311) (end 163.068 74.676) (width 0.4) (layer Composant) (net 102))
+ (segment (start 165.989 115.697) (end 168.529 113.157) (width 0.4) (layer VDD_layer) (net 102) (status 420))
+ (segment (start 159.512 115.697) (end 165.989 115.697) (width 0.4) (layer VDD_layer) (net 102))
+ (segment (start 165.9255 75.1205) (end 164.592 75.1205) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 146.812 103.886) (end 145.3515 103.886) (width 0.4) (layer Cuivre) (net 102) (status 20))
+ (segment (start 110.109 83.82) (end 111.252 83.82) (width 0.4) (layer Composant) (net 102))
+ (segment (start 166.624 74.422) (end 165.9255 75.1205) (width 0.4) (layer Composant) (net 102))
+ (segment (start 166.624 71.247) (end 166.624 74.422) (width 0.4) (layer Composant) (net 102))
+ (segment (start 163.957 68.58) (end 166.624 71.247) (width 0.4) (layer Composant) (net 102))
+ (segment (start 161.163 68.58) (end 163.957 68.58) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 145.415 100.2665) (end 146.6215 100.2665) (width 0.4) (layer Cuivre) (net 102) (status 810))
+ (segment (start 111.252 83.82) (end 110.744 83.312) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 131.8768 109.22) (end 131.8768 110.4392) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 140.3858 91.3257) (end 140.6525 91.059) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 140.3858 93.726) (end 140.3858 91.3257) (width 0.254) (layer Composant) (net 102) (status 830))
+ (segment (start 110.744 78.486) (end 111.887 77.343) (width 0.4) (layer Cuivre) (net 102) (status 10))
+ (segment (start 110.744 78.613) (end 110.744 78.486) (width 0.4) (layer Cuivre) (net 102) (status 830))
+ (segment (start 74.422 120.015) (end 74.422 130.429) (width 0.4) (layer Composant) (net 102))
+ (segment (start 105.156 95.377) (end 105.156 91.948) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 152.273 115.697) (end 147.32 115.697) (width 0.4) (layer VDD_layer) (net 102))
+ (segment (start 75.438 118.999) (end 74.422 120.015) (width 0.4) (layer Composant) (net 102))
+ (segment (start 76.327 118.999) (end 75.438 118.999) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 103.5685 112.3315) (end 103.378 112.522) (width 0.4) (layer Composant) (net 102))
+ (segment (start 126.746 103.4796) (end 127.635 103.4796) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 191.15278 96.90608) (end 190.69304 97.36582) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 189.23 94.9833) (end 191.15278 96.90608) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 189.23 90.805) (end 189.23 94.9833) (width 0.4) (layer GND_layer) (net 102) (status 810))
+ (via (at 191.15278 96.90608) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 81.28 140.97) (end 81.28 140.843) (width 0.4) (layer Composant) (net 102))
+ (segment (start 89.535 140.97) (end 81.28 140.97) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 86.741 121.158) (end 86.741 125.349) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 159.4485 114.046) (end 159.4485 111.252) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 159.4485 111.252) (end 159.4485 109.0295) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 199.1741 124.27204) (end 199.1741 122.7455) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 213.97468 110.5027) (end 213.97468 111.506) (width 0.254) (layer Composant) (net 102))
+ (via (at 133.731 89.535) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 141.605 89.027) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 129.54 103.632) (end 132.588 103.632) (width 0.4) (layer Composant) (net 102))
+ (via (at 136.652 120.396) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 137.287 113.538) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 142.24 108.839) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 126.746 103.505) (end 126.746 103.4796) (width 0.254) (layer Composant) (net 102))
+ (segment (start 126.619 103.632) (end 126.746 103.505) (width 0.4) (layer Composant) (net 102))
+ (segment (start 126.619 104.394) (end 126.619 103.632) (width 0.4) (layer Composant) (net 102))
+ (segment (start 126.492 104.521) (end 126.619 104.394) (width 0.4) (layer Composant) (net 102))
+ (segment (start 124.587 104.521) (end 126.492 104.521) (width 0.254) (layer Composant) (net 102))
+ (segment (start 211.45754 107.5055) (end 214.45474 110.5027) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 104.14 139.827) (end 100.965 139.827) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 133.731 91.2495) (end 133.5405 91.44) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 133.731 89.535) (end 133.731 91.2495) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 111.887 77.343) (end 115.57 77.343) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 117.729 75.184) (end 115.57 77.343) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 117.602 75.311) (end 117.729 75.184) (width 0.4) (layer Composant) (net 102))
+ (segment (start 117.602 77.1525) (end 117.602 75.311) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 163.957 75.311) (end 164.592 75.1205) (width 0.4) (layer Composant) (net 102) (status 430))
+ (segment (start 163.068 75.311) (end 163.957 75.311) (width 0.4) (layer Composant) (net 102) (status 20))
+ (segment (start 212.9155 110.5027) (end 213.97468 110.5027) (width 0.254) (layer Composant) (net 102) (status 810))
+ (via (at 194.6783 99.25304) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 192.33134 96.90608) (end 191.15278 96.90608) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 192.33134 96.90608) (end 194.6783 99.25304) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 194.6783 100.7745) (end 194.6783 99.25304) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 204.6859 100.7745) (end 204.6859 99.71532) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 202.6793 100.7745) (end 202.6793 99.71532) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 212.68182 76.835) (end 213.741 76.835) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 138.049 95.123) (end 137.668 95.504) (width 0.4) (layer Composant) (net 102))
+ (segment (start 212.68182 76.69276) (end 212.68182 76.835) (width 0.4) (layer Composant) (net 102))
+ (segment (start 212.23732 76.24826) (end 212.68182 76.69276) (width 0.4) (layer Composant) (net 102))
+ (via (at 212.23732 76.24826) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 212.19414 76.29144) (end 212.23732 76.24826) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 212.19414 80.645) (end 212.19414 76.29144) (width 0.4) (layer GND_layer) (net 102))
+ (via (at 212.19414 80.645) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 213.741 80.645) (end 212.19414 80.645) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 103.5685 111.252) (end 103.5685 112.3315) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 132.6515 75.5015) (end 130.937 75.5015) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 132.715 75.438) (end 132.6515 75.5015) (width 0.4) (layer Composant) (net 102))
+ (segment (start 162.941 75.438) (end 163.068 75.311) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 162.941 84.201) (end 162.941 75.438) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 165.989 87.249) (end 162.941 84.201) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.454 98.67392) (end 203.454 99.8855) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 209.27568 111.53648) (end 209.27568 111.4425) (width 0.4) (layer Cuivre) (net 102))
+ (via (at 144.653 113.03) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 177.165 77.089) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 209.16646 124.26442) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 199.1741 124.27204) (size 0.8) (layers Composant Cuivre) (net 102))
+ (via (at 203.454 98.67392) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 109.4105 82.8675) (end 108.712 82.169) (width 0.4) (layer Composant) (net 102))
+ (segment (start 190.5 97.36582) (end 190.5 98.1075) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 190.69304 97.36582) (end 190.5 97.36582) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 86.741 132.588) (end 86.741 129.54) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 134.366 93.726) (end 134.3914 94.9452) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 176.276 124.841) (end 168.656 124.841) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 136.652 118.6815) (end 136.652 120.396) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 136.652 120.396) (end 136.652 122.1105) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 138.938 104.4956) (end 140.335 104.4956) (width 0.4) (layer Composant) (net 102))
+ (segment (start 138.938 104.4956) (end 137.668 105.029) (width 0.4) (layer Composant) (net 102))
+ (segment (start 140.335 104.4956) (end 143.129 104.4702) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 182.8165 125.73) (end 177.165 125.73) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 177.165 125.73) (end 176.276 124.841) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 182.8165 125.73) (end 182.8165 127.9525) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 189.43828 110.5027) (end 190.0555 109.88548) (width 0.4) (layer Cuivre) (net 102))
+ (via (at 189.43828 110.5027) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 189.43828 110.5027) (end 190.9445 110.5027) (width 0.254) (layer Composant) (net 102) (status 420))
+ (segment (start 204.36332 124.3965) (end 204.14234 124.61748) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 204.14234 124.61748) (end 203.79436 124.61748) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 204.36332 124.3965) (end 205.359 124.3965) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (via (at 203.79436 124.61748) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 203.79436 124.61748) (end 203.79436 125.64364) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.79436 125.64364) (end 203.2 126.238) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 203.2 126.238) (end 199.644 126.238) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 199.1741 124.27204) (end 199.1741 125.7681) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 199.644 126.238) (end 199.1741 125.7681) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 197.485 124.3965) (end 198.48068 124.3965) (width 0.4) (layer Cuivre) (net 102) (status 810))
+ (segment (start 199.1741 124.27204) (end 198.60514 124.27204) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 198.60514 124.27204) (end 198.48068 124.3965) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 200.42632 124.3965) (end 200.30186 124.27204) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 200.30186 124.27204) (end 199.1741 124.27204) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 201.422 124.3965) (end 200.42632 124.3965) (width 0.4) (layer Cuivre) (net 102) (status 810))
+ (segment (start 209.74812 112.00892) (end 209.27568 111.53648) (width 0.4) (layer Cuivre) (net 102))
+ (segment (start 214.45474 110.5027) (end 212.94852 112.00892) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 208.28 120.3325) (end 208.28 123.37796) (width 0.4) (layer Cuivre) (net 102) (status 810))
+ (segment (start 209.74812 112.00892) (end 212.94852 112.00892) (width 0.4) (layer GND_layer) (net 102))
+ (via (at 209.74812 112.00892) (size 0.8) (layers Composant Cuivre) (net 102))
+ (segment (start 209.27568 111.4425) (end 208.28 111.4425) (width 0.4) (layer Cuivre) (net 102) (status 420))
+ (segment (start 128.9685 89.8525) (end 129.032 89.789) (width 0.4) (layer Composant) (net 102))
+ (segment (start 131.699 87.122) (end 129.032 89.789) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 129.3876 93.726) (end 129.8702 93.726) (width 0.254) (layer Composant) (net 102) (status C30))
+ (segment (start 123.6345 103.505) (end 123.19 103.505) (width 0.4) (layer Composant) (net 102) (status 830))
+ (segment (start 123.19 103.505) (end 122.301 102.616) (width 0.4) (layer Composant) (net 102) (status 10))
+ (segment (start 122.301 102.616) (end 121.158 102.616) (width 0.4) (layer Composant) (net 102))
+ (segment (start 151.003 72.898) (end 133.604 72.898) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 133.604 72.898) (end 132.715 73.787) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 132.715 73.787) (end 132.715 75.438) (width 0.4) (layer GND_layer) (net 102))
+ (segment (start 137.3886 109.22) (end 137.3886 110.7694) (width 0.2) (layer Composant) (net 102) (status 810))
+ (segment (start 182.8165 127.9525) (end 183.134 128.27) (width 0.4) (layer Composant) (net 102))
+ (segment (start 183.134 133.604) (end 181.864 134.874) (width 0.4) (layer Composant) (net 102))
+ (segment (start 181.864 134.874) (end 181.864 136.906) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 168.529 113.157) (end 176.149 113.157) (width 0.4) (layer Composant) (net 102) (status C30))
+ (segment (start 74.422 130.429) (end 74.422 133.477) (width 0.4) (layer Composant) (net 102))
+ (segment (start 74.422 133.477) (end 75.184 134.239) (width 0.4) (layer Composant) (net 102))
+ (segment (start 75.184 134.239) (end 76.327 134.239) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 76.327 108.839) (end 76.327 111.379) (width 0.4) (layer Cuivre) (net 102) (status C30))
+ (segment (start 112.522 93.345) (end 112.522 95.885) (width 0.4) (layer GND_layer) (net 102) (status C30))
+ (segment (start 112.522 95.885) (end 112.522 98.425) (width 0.4) (layer GND_layer) (net 102) (status C30))
+ (segment (start 137.3886 110.7694) (end 136.5885 111.633) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 134.366 93.726) (end 134.366 92.2655) (width 0.254) (layer Composant) (net 102) (status 810))
+ (segment (start 134.366 92.2655) (end 133.5405 91.44) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 125.349 100.7745) (end 124.587 100.711) (width 0.4) (layer Composant) (net 102) (status 810))
+ (segment (start 106.48 88.192) (end 107.315 89.027) (width 0.4) (layer Composant) (net 102))
+ (segment (start 107.315 89.027) (end 108.585 89.027) (width 0.4) (layer Composant) (net 102) (status 420))
+ (segment (start 167.132 99.187) (end 168.529 97.79) (width 0.4318) (layer Cuivre) (net 103) (status 420))
+ (segment (start 166.751 105.791) (end 167.132 105.41) (width 0.254) (layer Cuivre) (net 103))
+ (segment (start 166.751 106.934) (end 166.751 105.791) (width 0.4318) (layer Composant) (net 103))
+ (segment (start 167.132 105.41) (end 167.132 99.187) (width 0.4318) (layer Cuivre) (net 103))
+ (segment (start 176.149 97.79) (end 168.529 97.79) (width 0.762) (layer Composant) (net 103) (status C30))
+ (segment (start 163.957 109.728) (end 166.751 106.934) (width 0.4318) (layer Composant) (net 103))
+ (segment (start 163.957 111.3155) (end 163.957 109.728) (width 0.4318) (layer Composant) (net 103) (status 810))
+ (via (at 166.751 105.791) (size 0.889) (layers Composant Cuivre) (net 103))
+ (segment (start 85.217 115.57) (end 87.63 115.57) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 89.789 113.411) (end 89.789 111.379) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 87.63 115.57) (end 89.789 113.411) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 132.3848 110.4138) (end 132.9055 110.9345) (width 0.254) (layer Composant) (net 104))
+ (segment (start 132.9055 110.9345) (end 132.9055 112.268) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 192.5955 122.7455) (end 192.33388 123.00712) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 192.33388 123.00712) (end 192.33388 123.84532) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 193.1797 122.7455) (end 192.5955 122.7455) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 133.096 90.551) (end 132.461 89.916) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 132.461 89.916) (end 130.937 89.916) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 132.3848 109.22) (end 132.3848 110.4138) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 183.66232 123.84532) (end 178.689 118.872) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 178.689 118.872) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 192.33388 123.84532) (end 183.66232 123.84532) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 194.691 128.397) (end 200.914 134.62) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 200.914 134.62) (end 207.01 134.62) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 194.691 125.222) (end 194.691 128.397) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.51926 102.56774) (end 212.598 102.64648) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.598 102.64648) (end 212.598 104.648) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.598 104.648) (end 211.582 105.664) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 211.582 105.664) (end 206.83474 105.664) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 211.41436 102.56774) (end 212.51926 102.56774) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 206.83474 105.664) (end 206.83474 109.98708) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 206.83474 105.10774) (end 206.83474 105.664) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 204.724 102.997) (end 206.83474 105.10774) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 202.48118 102.997) (end 204.724 102.997) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 194.818 125.222) (end 198.9709 121.0691) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 198.9709 121.0691) (end 200.56348 121.0691) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 194.691 125.222) (end 194.818 125.222) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 192.33388 125.02388) (end 192.532 125.222) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 192.532 125.222) (end 194.691 125.222) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 192.33388 123.84532) (end 192.33388 125.02388) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 193.675 109.855) (end 195.072 109.855) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 193.167 70.866) (end 205.359 70.866) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 205.359 70.866) (end 211.12226 65.10274) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 211.12226 65.10274) (end 218.44 65.10274) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 191.008 73.025) (end 193.167 70.866) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 85.09 118.237) (end 83.82 116.967) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 85.09 119.126) (end 85.09 118.237) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 194.691 124.206) (end 194.691 125.222) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 196.4055 122.4915) (end 194.691 124.206) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 197.485 122.4915) (end 196.4055 122.4915) (width 0.5588) (layer Cuivre) (net 104) (status 810))
+ (via (at 191.008 73.025) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 97.155 87.757) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 107.95 114.173) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 146.05 74.676) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 164.592 71.247) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 162.306 106.807) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 163.449 100.33) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 107.823 83.185) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 100.838 113.03) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 97.409 112.141) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 131.572 71.247) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 193.675 109.855) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 130.937 89.916) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 157.734 97.536) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 121.666 98.425) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 133.985 104.267) (size 0.635) (layers Composant Cuivre) (net 104))
+ (via (at 168.275 115.062) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 85.09 119.126) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 138.8 113.2) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 146.812 105.41) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 161.163 92.329) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 131.699 102.87) (size 0.635) (layers Composant Cuivre) (net 104))
+ (via (at 146.812 98.679) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 194.691 125.222) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 211.41436 102.56774) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 199.009 102.97668) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 192.46088 113.5126) (size 1.143) (layers Composant Cuivre) (net 104))
+ (via (at 209.73288 118.09476) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 191.262 86.233) (end 189.23 88.265) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 191.262 73.279) (end 191.262 86.233) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 191.008 73.025) (end 191.262 73.279) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 191.1985 73.2155) (end 191.008 73.025) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 192.532 73.2155) (end 191.1985 73.2155) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 98.7425 87.757) (end 97.155 87.757) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 102.235 114.173) (end 107.95 114.173) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 101.092 113.03) (end 102.235 114.173) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 100.838 113.03) (end 101.092 113.03) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 107.95 134.112) (end 110.744 136.906) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 107.95 114.173) (end 107.95 134.112) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 143.002 71.628) (end 146.05 74.676) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 134.747 71.628) (end 143.002 71.628) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 132.7785 73.5965) (end 134.747 71.628) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 130.937 73.5965) (end 132.7785 73.5965) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 150.114 70.612) (end 146.05 74.676) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 152.908 70.612) (end 150.114 70.612) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 155.321 73.025) (end 152.908 70.612) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 162.814 73.025) (end 155.321 73.025) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 164.592 71.247) (end 162.814 73.025) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 164.846 70.993) (end 164.592 71.247) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 182.753 70.993) (end 164.846 70.993) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 184.785 73.025) (end 182.753 70.993) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 191.008 73.025) (end 184.785 73.025) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 179.07 130.302) (end 181.864 130.302) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 172.085 123.317) (end 179.07 130.302) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 172.085 105.283) (end 172.085 123.317) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 169.672 102.87) (end 172.085 105.283) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 168.529 102.87) (end 169.672 102.87) (width 0.5588) (layer VDD_layer) (net 104) (status 810))
+ (segment (start 161.544 106.807) (end 162.306 106.807) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 166.243 102.87) (end 168.529 102.87) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 162.306 106.807) (end 166.243 102.87) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 162.306 101.473) (end 162.306 106.807) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 163.449 100.33) (end 162.306 101.473) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 161.3535 104.7115) (end 161.036 104.394) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 161.3535 105.537) (end 161.3535 104.7115) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 104.648 87.757) (end 97.155 87.757) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 106.553 85.852) (end 104.648 87.757) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 106.553 84.455) (end 106.553 85.852) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 107.823 83.185) (end 106.553 84.455) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 107.5055 83.5025) (end 107.823 83.185) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 107.5055 84.328) (end 107.5055 83.5025) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 162.2425 72.4535) (end 161.29 73.406) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 162.2425 71.247) (end 162.2425 72.4535) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 164.592 71.247) (end 164.592 73.2155) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 74.7014 96.2914) (end 74.7014 93.091) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 78.74 100.33) (end 88.9 100.33) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 78.74 100.33) (end 74.7014 96.2914) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 74.7014 93.091) (end 76.4032 93.091) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 107.696 133.858) (end 110.744 136.906) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 106.3625 133.858) (end 107.696 133.858) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 74.549 136.779) (end 76.327 136.779) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 73.914 136.144) (end 74.549 136.779) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 73.914 117.475) (end 73.914 136.144) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 74.93 116.459) (end 73.914 117.475) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 76.327 116.459) (end 74.93 116.459) (width 0.5588) (layer VDD_layer) (net 104) (status 810))
+ (segment (start 162.814 126.4285) (end 165.354 126.4285) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 160.274 126.4285) (end 162.814 126.4285) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 190.1825 72.4535) (end 189.23 73.406) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 190.1825 71.247) (end 190.1825 72.4535) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 99.949 112.141) (end 100.838 113.03) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 97.409 112.141) (end 99.949 112.141) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 164.592 71.247) (end 162.2425 71.247) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 192.532 71.247) (end 190.1825 71.247) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 192.532 73.2155) (end 192.532 71.247) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 129.2225 72.4535) (end 128.27 73.406) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 129.2225 71.247) (end 129.2225 72.4535) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 157.734 126.4285) (end 160.274 126.4285) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 131.572 72.644) (end 130.937 73.5965) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 131.572 71.247) (end 131.572 72.644) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 107.569 87.757) (end 108.585 87.757) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 107.5055 87.6935) (end 107.569 87.757) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 131.572 77.343) (end 131.572 71.247) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 126.619 82.296) (end 131.572 77.343) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 108.712 82.296) (end 126.619 82.296) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 107.823 83.185) (end 108.712 82.296) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 107.5055 87.6) (end 107.5055 87.6935) (width 0.4) (layer Composant) (net 104) (tstamp 53D8E6D4) (status 810))
+ (segment (start 169.2275 130.302) (end 165.354 126.4285) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 181.864 130.302) (end 169.2275 130.302) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 131.572 71.247) (end 129.2225 71.247) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 168.529 102.87) (end 176.149 102.87) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 101.6635 111.252) (end 101.6635 113.03) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 97.4725 112.0775) (end 97.4725 110.236) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 97.409 112.141) (end 97.4725 112.0775) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 101.6635 113.03) (end 100.838 113.03) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 164.846 98.933) (end 163.449 100.33) (width 0.5588) (layer Composant) (net 104) (status 10))
+ (segment (start 164.846 98.806) (end 164.846 98.933) (width 0.5588) (layer Composant) (net 104) (status 830))
+ (segment (start 101.854 113.792) (end 102.743 113.792) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 101.6635 113.6015) (end 101.854 113.792) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 101.6635 113.03) (end 101.6635 113.6015) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 186.817 90.678) (end 189.23 88.265) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 185.547 90.678) (end 186.817 90.678) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 183.769 93.218) (end 185.547 90.678) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 183.769 101.854) (end 183.769 93.218) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 177.927 101.854) (end 183.769 101.854) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 176.911 102.87) (end 177.927 101.854) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 176.149 102.87) (end 176.911 102.87) (width 0.5588) (layer VDD_layer) (net 104) (status 810))
+ (segment (start 146.4945 98.3615) (end 146.812 98.679) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 145.415 98.3615) (end 146.4945 98.3615) (width 0.5588) (layer Cuivre) (net 104) (status 810))
+ (segment (start 145.6055 105.41) (end 145.288 105.7275) (width 0.5588) (layer Cuivre) (net 104) (status 430))
+ (segment (start 146.812 105.41) (end 145.6055 105.41) (width 0.5588) (layer Cuivre) (net 104) (status 20))
+ (segment (start 130.937 91.3765) (end 130.8735 91.44) (width 0.5588) (layer Cuivre) (net 104) (status 430))
+ (segment (start 130.937 89.916) (end 130.937 91.3765) (width 0.5588) (layer Cuivre) (net 104) (status 20))
+ (segment (start 108.585 109.855) (end 112.522 109.855) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 108.0135 110.4265) (end 108.585 109.855) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 108.0135 114.1095) (end 108.0135 110.4265) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 107.95 114.173) (end 108.0135 114.1095) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 130.8735 89.916) (end 130.937 89.916) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 133.096 90.551) (end 138.2 90.551) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 130.8862 93.726) (end 130.3782 93.726) (width 0.254) (layer Composant) (net 104) (status C30))
+ (segment (start 123.444 97.282) (end 121.0945 97.282) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 125.17374 99.01174) (end 123.444 97.282) (width 0.5588) (layer Composant) (net 104) (status 10))
+ (segment (start 125.349 98.8695) (end 125.17374 99.01174) (width 0.5588) (layer Composant) (net 104) (status 830))
+ (segment (start 157.734 95.758) (end 157.734 97.536) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 161.163 92.329) (end 157.734 95.758) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 102.9335 98.933) (end 102.9335 96.647) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 84.2645 121.412) (end 84.2645 119.126) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 126.0729 102.9716) (end 125.5395 103.505) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 127.635 102.9716) (end 126.0729 102.9716) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 170.6245 117.094) (end 172.9105 117.094) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 137.93978 110.998) (end 138.4935 111.633) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 137.8966 110.9472) (end 137.93978 110.998) (width 0.254) (layer Composant) (net 104))
+ (segment (start 137.8966 109.22) (end 137.8966 110.9472) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 84.2645 119.126) (end 85.09 119.126) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 155.829 97.536) (end 157.734 97.536) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 155.067 98.298) (end 155.829 97.536) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 153.9875 98.298) (end 155.067 98.298) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 182.8165 121.158) (end 182.8165 123.444) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 175.641 115.824) (end 173.863 115.824) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 173.863 115.824) (end 173.863 116.1415) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 173.863 116.1415) (end 172.9105 117.094) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 131.3942 109.22) (end 131.3942 110.0328) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 180.975 121.158) (end 178.689 118.872) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 182.8165 121.158) (end 180.975 121.158) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 141.351 92.2655) (end 142.5575 91.059) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 141.351 92.456) (end 141.351 92.2655) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 140.8684 92.9386) (end 141.351 92.456) (width 0.254) (layer Composant) (net 104))
+ (segment (start 140.8684 93.726) (end 140.8684 92.9386) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 132.3848 108.1278) (end 132.3848 109.22) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 132.334 107.823) (end 132.3848 108.1278) (width 0.254) (layer Composant) (net 104))
+ (segment (start 132.334 105.791) (end 132.334 107.823) (width 0.254) (layer Composant) (net 104))
+ (segment (start 133.096 105.029) (end 132.334 105.791) (width 0.254) (layer Composant) (net 104))
+ (segment (start 133.096 104.648) (end 133.096 105.029) (width 0.254) (layer Composant) (net 104))
+ (segment (start 133.477 104.267) (end 133.096 104.648) (width 0.254) (layer Composant) (net 104))
+ (segment (start 133.985 104.267) (end 133.477 104.267) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 140.8684 93.726) (end 141.3764 93.726) (width 0.254) (layer Composant) (net 104) (status C30))
+ (segment (start 138.8635 113.2635) (end 138.8 113.2) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 138.4935 111.633) (end 138.8635 113.2635) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 144.6784 104.9782) (end 143.129 104.9782) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 145.288 105.7275) (end 144.6784 104.9782) (width 0.254) (layer Composant) (net 104))
+ (segment (start 146.4945 105.7275) (end 145.288 105.7275) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 146.812 105.41) (end 146.4945 105.7275) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 127.889 95.25) (end 130.937 92.202) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 130.937 92.202) (end 130.937 89.916) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 127.889 97.155) (end 127.889 95.25) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 153.9875 93.853) (end 153.9875 96.012) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (via (at 98.298 100.584) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 98.3615 100.5205) (end 100.584 100.5205) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 98.298 100.584) (end 98.3615 100.5205) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 84.2645 106.553) (end 84.2645 104.267) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 102.1715 98.933) (end 100.584 100.5205) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 102.9335 98.933) (end 102.1715 98.933) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 153.9875 96.012) (end 153.9875 98.298) (width 0.5588) (layer Composant) (net 104) (status C30))
+ (segment (start 161.163 91.313) (end 160.782 90.932) (width 0.5588) (layer Composant) (net 104) (status 430))
+ (segment (start 161.163 92.329) (end 161.163 91.313) (width 0.5588) (layer Composant) (net 104) (status 20))
+ (segment (start 134.874 92.71) (end 134.874 93.726) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 135.5725 92.0115) (end 134.874 92.71) (width 0.254) (layer Composant) (net 104) (status 10))
+ (segment (start 135.4455 91.44) (end 135.5725 92.0115) (width 0.5588) (layer Composant) (net 104) (status 830))
+ (segment (start 142.621 120.015) (end 148.59 120.015) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (via (at 141.859 119.253) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 141.859 119.253) (end 140.97 118.364) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 138.8 113.708) (end 138.8 113.2) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 140.97 113.665) (end 138.8 113.708) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 140.97 118.364) (end 140.97 113.665) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 141.859 119.253) (end 142.621 120.015) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 155.194 100.076) (end 157.734 97.536) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 149.479 100.076) (end 155.194 100.076) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 148.082 98.679) (end 149.479 100.076) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 146.812 98.679) (end 148.082 98.679) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 161.163 107.95) (end 168.275 115.062) (width 0.5588) (layer GND_layer) (net 104))
+ (segment (start 161.163 92.329) (end 161.163 107.95) (width 0.5588) (layer GND_layer) (net 104))
+ (segment (start 121.0945 97.8535) (end 121.666 98.425) (width 0.5588) (layer Composant) (net 104) (status 10))
+ (segment (start 121.0945 97.282) (end 121.0945 97.8535) (width 0.5588) (layer Composant) (net 104) (status 830))
+ (segment (start 129.4384 102.9462) (end 127.635 102.9716) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 129.667 103.124) (end 129.4384 102.9462) (width 0.254) (layer Composant) (net 104))
+ (segment (start 131.318 103.124) (end 129.667 103.124) (width 0.254) (layer Composant) (net 104))
+ (segment (start 131.699 102.87) (end 131.318 103.124) (width 0.254) (layer Composant) (net 104))
+ (segment (start 130.048 97.155) (end 127.889 97.155) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 131.699 98.806) (end 130.048 97.155) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 131.699 102.87) (end 131.699 98.806) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 122.936 97.155) (end 121.666 98.425) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 127.889 97.155) (end 122.936 97.155) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 130.3782 92.8878) (end 130.3782 93.726) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 130.8735 92.3925) (end 130.3782 92.8878) (width 0.254) (layer Composant) (net 104))
+ (segment (start 130.8735 89.9795) (end 130.8735 92.3925) (width 0.254) (layer Composant) (net 104))
+ (segment (start 125.7808 99.4664) (end 125.349 98.8695) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 127.635 99.4664) (end 125.7808 99.4664) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 145.288 98.679) (end 146.812 98.679) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 145.0086 98.9584) (end 145.288 98.679) (width 0.254) (layer Composant) (net 104))
+ (segment (start 143.129 98.9584) (end 145.0086 98.9584) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 170.6245 115.8875) (end 170.6245 117.094) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 169.799 115.062) (end 170.6245 115.8875) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 168.275 115.062) (end 169.799 115.062) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 121.158 95.885) (end 121.0945 97.282) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 117.094 91.821) (end 121.158 95.885) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 110.49 91.821) (end 117.094 91.821) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 107.315 94.996) (end 110.49 91.821) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 103.251 94.996) (end 107.315 94.996) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 102.9335 95.3135) (end 103.251 94.996) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 102.9335 96.647) (end 102.9335 95.3135) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 77.597 117.729) (end 76.327 116.459) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 83.058 117.729) (end 77.597 117.729) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 83.82 116.967) (end 83.058 117.729) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 96.774 112.141) (end 96.012 111.379) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 97.409 112.141) (end 96.774 112.141) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 96.012 111.379) (end 89.789 111.379) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 85.217 115.57) (end 83.82 116.967) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 146.05 77.978) (end 143.129 80.899) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 143.129 80.899) (end 143.1 94) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 146.05 74.676) (end 146.05 77.978) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 161.544 107.696) (end 161.544 106.807) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 161.544 105.7275) (end 161.3535 105.537) (width 0.5588) (layer Composant) (net 104) (status 430))
+ (segment (start 161.544 106.807) (end 161.544 105.7275) (width 0.5588) (layer Composant) (net 104) (status 20))
+ (segment (start 134.212 88.392) (end 132.461 88.392) (width 0.4) (layer Composant) (net 104))
+ (segment (start 132.461 88.392) (end 130.937 89.916) (width 0.4) (layer Composant) (net 104))
+ (segment (start 135.4455 91.44) (end 135.4455 89.6255) (width 0.4) (layer Composant) (net 104) (status 810))
+ (segment (start 135.4455 89.6255) (end 134.212 88.392) (width 0.4) (layer Composant) (net 104))
+ (segment (start 130.937 89.916) (end 130.8735 89.9795) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 138.8 113.2) (end 138.938 110.109) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 137.668 104.267) (end 133.985 104.267) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 139.954 106.553) (end 137.668 104.267) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 139.954 109.093) (end 139.954 106.553) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 138.938 110.109) (end 139.954 109.093) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 145.288 104.394) (end 146.304 105.41) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 145.288 99.187) (end 145.288 104.394) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 145.796 98.679) (end 145.288 99.187) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 146.812 98.679) (end 145.796 98.679) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 145.288 105.41) (end 146.304 105.41) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 143.891 106.807) (end 145.288 105.41) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 143.891 109.093) (end 143.891 106.807) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 142.875 110.109) (end 143.891 109.093) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 138.938 110.109) (end 142.875 110.109) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 146.304 105.41) (end 146.812 105.41) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 130.8735 89.916) (end 130.8735 89.9795) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 153.416 106.426) (end 155.448 104.394) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 153.416 109.093) (end 153.416 106.426) (width 0.5588) (layer Composant) (net 104) (status 10))
+ (segment (start 153.543 109.22) (end 153.416 109.093) (width 0.5588) (layer Composant) (net 104) (status 830))
+ (segment (start 161.036 104.394) (end 155.448 104.394) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 194.691 125.222) (end 194.6783 122.7455) (width 0.254) (layer Composant) (net 104) (status 420))
+ (via (at 192.33388 123.84532) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 192.33388 123.84532) (end 192.33388 113.6396) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 192.46088 113.5126) (end 192.33388 113.6396) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 204.1779 121.24182) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 204.1779 121.24182) (end 205.6384 121.24182) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 205.6384 121.24182) (end 205.6511 121.22912) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 204.1779 122.7455) (end 204.1779 121.24182) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 190.9445 110.0074) (end 192.00368 110.0074) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 190.9445 109.5121) (end 191.86144 109.5121) (width 0.2032) (layer Composant) (net 104) (status 810))
+ (segment (start 193.3321 109.5121) (end 193.675 109.855) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 191.86144 109.5121) (end 193.3321 109.5121) (width 0.2032) (layer Composant) (net 104))
+ (segment (start 192.00368 109.65434) (end 192.00368 110.0074) (width 0.4) (layer Composant) (net 104))
+ (segment (start 191.86144 109.5121) (end 192.00368 109.65434) (width 0.254) (layer Composant) (net 104))
+ (segment (start 212.9155 103.0097) (end 211.85632 103.0097) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 211.41436 102.56774) (end 211.85632 103.0097) (width 0.5588) (layer Composant) (net 104))
+ (via (at 211.40928 113.5126) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 211.40928 113.5126) (end 212.4456 113.5126) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.4456 113.5126) (end 212.979 114.046) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.9155 113.5126) (end 211.40928 113.5126) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 195.072 109.855) (end 195.072 110.90148) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 195.072 110.90148) (end 192.46088 113.5126) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 195.072 107.315) (end 195.072 109.855) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 194.8815 107.1245) (end 195.072 107.315) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 193.167 107.1245) (end 194.8815 107.1245) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 193.167 107.1245) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 192.89268 107.1245) (end 192.70218 107.315) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 193.167 107.1245) (end 192.89268 107.1245) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 191.9605 107.315) (end 192.70218 107.315) (width 0.5588) (layer Cuivre) (net 104) (status 810))
+ (segment (start 199.009 102.97668) (end 199.009 101.7905) (width 0.5588) (layer Cuivre) (net 104) (status 420))
+ (segment (start 205.359 121.52122) (end 205.359 122.4915) (width 0.5588) (layer Cuivre) (net 104) (status 420))
+ (via (at 205.6511 121.22912) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 205.6511 121.22912) (end 205.6511 119.9769) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 206.375 119.253) (end 205.6511 119.9769) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 205.6511 121.22912) (end 205.359 121.52122) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 220.04274 63.5) (end 223.52 63.5) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 220.04274 63.5) (end 218.44 65.10274) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 218.44 65.10274) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 218.44 66.3575) (end 218.44 65.10274) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 158.623 96.647) (end 158.623 95.8215) (width 0.5588) (layer Composant) (net 104) (status 420))
+ (segment (start 157.734 97.536) (end 158.623 96.647) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 190.5 100.75418) (end 190.5 100.0125) (width 0.5588) (layer Cuivre) (net 104) (status 420))
+ (via (at 190.04788 101.2063) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 190.04788 101.2063) (end 190.04788 101.78288) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 190.04788 101.78288) (end 191.24168 102.97668) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 199.009 102.97668) (end 191.24168 102.97668) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 190.5 100.75418) (end 190.04788 101.2063) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 192.46088 113.5126) (end 190.9445 113.5126) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 191.9605 114.01298) (end 191.9605 115.189) (width 0.5588) (layer Cuivre) (net 104) (status 420))
+ (segment (start 192.46088 113.5126) (end 191.9605 114.01298) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 199.1741 102.81158) (end 199.1741 100.7745) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 199.009 102.97668) (end 199.1741 102.81158) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 206.375 119.253) (end 208.57464 119.253) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 200.56348 119.79148) (end 201.10196 119.253) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 200.56348 121.0691) (end 200.56348 119.79148) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 201.10196 119.253) (end 206.375 119.253) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 208.57464 119.253) (end 209.73288 118.09476) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 200.56348 121.0691) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 201.2442 121.74982) (end 201.422 121.74982) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 200.56348 121.0691) (end 201.2442 121.74982) (width 0.4) (layer Cuivre) (net 104))
+ (segment (start 201.422 122.4915) (end 201.422 121.74982) (width 0.4) (layer Cuivre) (net 104) (status 810))
+ (segment (start 202.946 102.53218) (end 203.454 102.53218) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 203.454 102.53218) (end 203.454 101.7905) (width 0.5588) (layer Cuivre) (net 104) (status 420))
+ (via (at 202.48118 102.997) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 199.009 102.97668) (end 202.46086 102.97668) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 202.46086 102.97668) (end 202.48118 102.997) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 202.48118 102.997) (end 202.946 102.53218) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 206.83474 109.98708) (end 206.83474 118.79326) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 206.375 119.253) (end 206.83474 118.79326) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 206.83474 109.98708) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 207.28432 109.5375) (end 208.28 109.5375) (width 0.5588) (layer Cuivre) (net 104) (status 420))
+ (segment (start 206.83474 109.98708) (end 207.28432 109.5375) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 209.33156 102.56774) (end 209.296 102.53218) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 211.41436 102.56774) (end 209.33156 102.56774) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 209.296 101.7905) (end 209.296 102.53218) (width 0.5588) (layer Cuivre) (net 104) (status 810))
+ (segment (start 209.60842 118.09476) (end 209.27568 118.4275) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 209.73288 118.09476) (end 209.60842 118.09476) (width 0.5588) (layer Cuivre) (net 104))
+ (segment (start 208.28 118.4275) (end 209.27568 118.4275) (width 0.5588) (layer Cuivre) (net 104) (status 810))
+ (segment (start 131.2545 113.919) (end 132.9055 112.268) (width 0.4) (layer Composant) (net 104) (status 420))
+ (segment (start 130.556 113.919) (end 131.2545 113.919) (width 0.4) (layer Composant) (net 104))
+ (segment (start 130.048 113.411) (end 130.556 113.919) (width 0.4) (layer Composant) (net 104))
+ (segment (start 130.048 111.125) (end 130.048 113.411) (width 0.4) (layer Composant) (net 104))
+ (segment (start 130.175 110.998) (end 130.048 111.125) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 130.429 110.998) (end 130.175 110.998) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 178.689 118.872) (end 175.641 115.824) (width 0.5588) (layer Composant) (net 104))
+ (via (at 211.40928 110.0074) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 211.40928 110.0074) (end 211.40928 110.06328) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 211.40928 110.06328) (end 212.979 111.633) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.979 114.046) (end 212.979 114.84864) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.979 111.633) (end 212.979 114.046) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.979 114.84864) (end 209.73288 118.09476) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 212.9155 110.0074) (end 211.40928 110.0074) (width 0.254) (layer Composant) (net 104) (status 810))
+ (segment (start 210.31454 117.5131) (end 212.9155 117.5131) (width 0.254) (layer Composant) (net 104) (status 420))
+ (segment (start 209.73288 118.09476) (end 210.31454 117.5131) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 88.9 103.505) (end 88.9 100.33) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 90.805 105.41) (end 88.9 103.505) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 97.409 112.141) (end 97.409 107.188) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 97.409 107.188) (end 95.631 105.41) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 131.3942 110.0328) (end 130.429 110.998) (width 0.254) (layer Composant) (net 104))
+ (segment (start 95.631 105.41) (end 90.805 105.41) (width 0.5588) (layer VDD_layer) (net 104))
+ (via (at 84.582 102.235) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 84.2645 102.5525) (end 84.582 102.235) (width 0.5588) (layer Composant) (net 104))
+ (segment (start 84.2645 104.267) (end 84.2645 102.5525) (width 0.5588) (layer Composant) (net 104) (status 810))
+ (segment (start 86.995 102.235) (end 88.9 100.33) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 84.582 102.235) (end 86.995 102.235) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 90.17 99.06) (end 88.9 100.33) (width 0.5588) (layer VDD_layer) (net 104) (status 420))
+ (segment (start 92.71 99.06) (end 90.17 99.06) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 93.472 98.298) (end 92.71 99.06) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 97.155 87.757) (end 95.25 87.757) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 95.25 87.757) (end 93.472 89.535) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 93.472 89.535) (end 93.472 98.298) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 89.154 100.584) (end 88.9 100.33) (width 0.5588) (layer VDD_layer) (net 104) (status 430))
+ (segment (start 98.298 100.584) (end 89.154 100.584) (width 0.5588) (layer VDD_layer) (net 104) (status 20))
+ (segment (start 107.3 84.5335) (end 107.5055 84.328) (width 0.4) (layer Composant) (net 104) (tstamp 53D8E6D8))
+ (segment (start 107.5 87.6) (end 107.3 87.4) (width 0.4) (layer Composant) (net 104) (tstamp 53D8E6D6))
+ (segment (start 107.3 87.4) (end 107.3 84.5335) (width 0.4) (layer Composant) (net 104) (tstamp 53D8E6D7))
+ (segment (start 107.5055 87.6) (end 107.5 87.6) (width 0.4) (layer Composant) (net 104))
+ (via (at 143.1 94) (size 1.143) (layers Composant Cuivre) (net 104))
+ (segment (start 142.826 93.726) (end 143.1 94) (width 0.4) (layer Composant) (net 104) (tstamp 53D8E6ED))
+ (segment (start 141.3764 93.726) (end 142.826 93.726) (width 0.4) (layer Composant) (net 104))
+ (segment (start 146.636 97.536) (end 143.1 94) (width 0.5588) (layer VDD_layer) (net 104) (tstamp 53D8E6F0))
+ (segment (start 146.812 98.679) (end 146.812 97.536) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 146.812 97.536) (end 146.636 97.536) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 139.651 90.551) (end 143.1 94) (width 0.5588) (layer VDD_layer) (net 104) (tstamp 53D8E6F5))
+ (segment (start 138.2 90.551) (end 139.651 90.551) (width 0.5588) (layer VDD_layer) (net 104))
+ (segment (start 82.423 136.398) (end 81.28 135.255) (width 0.254) (layer Composant) (net 105))
+ (segment (start 77.597 124.714) (end 77.597 112.649) (width 0.254) (layer Composant) (net 105))
+ (segment (start 80.264 125.349) (end 81.28 126.365) (width 0.254) (layer Composant) (net 105))
+ (segment (start 91.44 135.382) (end 90.424 136.398) (width 0.254) (layer Composant) (net 105) (status 10))
+ (segment (start 81.28 135.255) (end 81.28 126.365) (width 0.254) (layer Composant) (net 105))
+ (segment (start 78.232 125.349) (end 77.597 124.714) (width 0.254) (layer Composant) (net 105))
+ (segment (start 80.264 125.349) (end 78.232 125.349) (width 0.254) (layer Composant) (net 105))
+ (segment (start 90.424 136.398) (end 82.423 136.398) (width 0.254) (layer Composant) (net 105))
+ (segment (start 91.44 134.62) (end 91.44 135.382) (width 0.254) (layer Composant) (net 105) (status 830))
+ (segment (start 77.597 112.649) (end 78.867 111.379) (width 0.254) (layer Composant) (net 105) (status 420))
+ (segment (start 74.93 105.41) (end 74.93 112.522) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 147.574 95.25) (end 147.066 94.996) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 145.2372 97.4598) (end 143.129 97.4598) (width 0.254) (layer Composant) (net 106) (status 420))
+ (segment (start 147.193 95.504) (end 145.2372 97.4598) (width 0.254) (layer Composant) (net 106))
+ (segment (start 147.574 95.25) (end 147.193 95.504) (width 0.254) (layer Composant) (net 106))
+ (segment (start 174.625 90.17) (end 181.991 90.17) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 174.244 90.551) (end 174.625 90.17) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 165.354 90.551) (end 174.244 90.551) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 164.719 89.916) (end 165.354 90.551) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 159.766 89.916) (end 164.719 89.916) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 156.21 93.472) (end 159.766 89.916) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 148.717 93.472) (end 156.21 93.472) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 147.574 94.615) (end 148.717 93.472) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 147.574 95.25) (end 147.574 94.615) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 147.574 95.25) (end 147.574 92.71) (width 0.254) (layer Composant) (net 106))
+ (segment (start 178.054 138.176) (end 179.324 139.446) (width 0.254) (layer GND_layer) (net 106) (status 420))
+ (segment (start 178.054 130.175) (end 178.054 138.176) (width 0.254) (layer GND_layer) (net 106))
+ (segment (start 178.054 130.175) (end 185.928 122.301) (width 0.254) (layer GND_layer) (net 106))
+ (segment (start 185.928 106.172) (end 185.928 122.301) (width 0.254) (layer GND_layer) (net 106))
+ (segment (start 181.991 102.235) (end 185.928 106.172) (width 0.254) (layer GND_layer) (net 106))
+ (segment (start 181.991 90.17) (end 181.991 102.235) (width 0.254) (layer GND_layer) (net 106))
+ (segment (start 74.93 112.522) (end 76.327 113.919) (width 0.254) (layer Cuivre) (net 106) (status 420))
+ (segment (start 147.574 92.71) (end 149.225 91.059) (width 0.381) (layer Composant) (net 106))
+ (segment (start 149.225 91.059) (end 154.94 91.059) (width 0.381) (layer Composant) (net 106))
+ (segment (start 154.94 91.059) (end 157.7975 93.9165) (width 0.381) (layer Composant) (net 106))
+ (segment (start 157.7975 93.9165) (end 158.623 93.9165) (width 0.381) (layer Composant) (net 106) (status 420))
+ (segment (start 160.8455 94.6785) (end 159.385 94.6785) (width 0.4318) (layer Composant) (net 106) (status 810))
+ (segment (start 159.385 94.6785) (end 158.623 93.9165) (width 0.4318) (layer Composant) (net 106) (status 420))
+ (via (at 181.991 90.17) (size 0.889) (layers Composant Cuivre) (net 106))
+ (via (at 147.574 95.25) (size 0.635) (layers Composant Cuivre) (net 106))
+ (segment (start 137.033 98.425) (end 137.668 97.79) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 137.668 95.631) (end 137.668 97.79) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 138.303 94.996) (end 137.668 95.631) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 147.066 94.996) (end 138.303 94.996) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 132.334 98.425) (end 137.033 98.425) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 132.334 98.425) (end 130.683 96.774) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 130.683 96.774) (end 128.524 96.774) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 128.524 96.774) (end 126.873 95.123) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 126.873 95.123) (end 117.094 95.123) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 117.094 95.123) (end 116.586 94.615) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 116.586 94.615) (end 111.633 94.615) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 111.633 94.615) (end 110.49 95.758) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 110.49 95.758) (end 110.49 98.171) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 110.49 98.171) (end 104.521 104.14) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 104.521 104.14) (end 76.2 104.14) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 76.2 104.14) (end 74.93 105.41) (width 0.254) (layer Cuivre) (net 106))
+ (segment (start 80.645 138.557) (end 78.867 136.779) (width 0.381) (layer Cuivre) (net 107) (status 420))
+ (segment (start 83.439 138.557) (end 80.645 138.557) (width 0.381) (layer Cuivre) (net 107) (status 810))
+ (segment (start 176.149 92.075) (end 175.641 91.567) (width 0.381) (layer Composant) (net 108) (status 10))
+ (segment (start 169.291 91.567) (end 168.529 92.329) (width 0.381) (layer Composant) (net 108) (status 420))
+ (segment (start 164.846 95.3135) (end 165.2905 95.758) (width 0.254) (layer Composant) (net 108) (status 830))
+ (via (at 166.878 95.758) (size 0.889) (layers Composant Cuivre) (net 108))
+ (segment (start 176.149 92.329) (end 178.562 92.329) (width 0.381) (layer Cuivre) (net 108) (status 810))
+ (segment (start 176.149 92.329) (end 176.149 92.075) (width 0.381) (layer Composant) (net 108) (status 830))
+ (segment (start 165.2905 95.758) (end 166.878 95.758) (width 0.381) (layer Composant) (net 108) (status 10))
+ (segment (start 166.878 92.964) (end 166.878 95.758) (width 0.381) (layer Composant) (net 108))
+ (segment (start 167.513 92.329) (end 166.878 92.964) (width 0.381) (layer Composant) (net 108))
+ (segment (start 168.529 92.329) (end 167.513 92.329) (width 0.381) (layer Composant) (net 108) (status 810))
+ (segment (start 186.69 89.408) (end 186.69 88.265) (width 0.381) (layer Cuivre) (net 108) (status 420))
+ (segment (start 164.846 95.3135) (end 163.068 95.3135) (width 0.4318) (layer Composant) (net 108) (status 830))
+ (segment (start 175.641 91.567) (end 169.291 91.567) (width 0.4318) (layer Composant) (net 108))
+ (segment (start 163.068 95.3135) (end 162.7505 95.631) (width 0.4318) (layer Composant) (net 108) (status 430))
+ (segment (start 178.562 92.329) (end 179.197 92.964) (width 0.381) (layer Cuivre) (net 108))
+ (segment (start 179.197 92.964) (end 183.134 92.964) (width 0.381) (layer Cuivre) (net 108))
+ (segment (start 183.134 92.964) (end 186.69 89.408) (width 0.381) (layer Cuivre) (net 108))
+ (segment (start 161.3535 110.5535) (end 160.401 109.601) (width 0.254) (layer Composant) (net 109) (status 10))
+ (segment (start 160.401 109.601) (end 160.401 108.712) (width 0.254) (layer Composant) (net 109))
+ (segment (start 160.401 108.712) (end 160.02 108.331) (width 0.254) (layer Composant) (net 109))
+ (segment (start 160.02 108.331) (end 159.512 108.331) (width 0.254) (layer Composant) (net 109) (status 420))
+ (segment (start 161.3535 111.252) (end 161.3535 110.5535) (width 0.254) (layer Composant) (net 109) (status 830))
+ (segment (start 163.957 113.2205) (end 163.957 113.284) (width 0.762) (layer Composant) (net 109) (status 830))
+ (segment (start 161.3535 111.252) (end 161.3535 114.046) (width 0.762) (layer Composant) (net 109) (status C30))
+ (segment (start 163.957 113.284) (end 163.195 114.046) (width 0.762) (layer Composant) (net 109) (status 10))
+ (segment (start 163.195 114.046) (end 161.3535 114.046) (width 0.762) (layer Composant) (net 109) (status 420))
+ (segment (start 117.729 116.332) (end 117.729 131.445) (width 0.381) (layer GND_layer) (net 110))
+ (segment (start 122.8725 108.712) (end 121.793 108.712) (width 0.381) (layer Composant) (net 110) (status 810))
+ (segment (start 121.793 108.712) (end 120.777 107.696) (width 0.381) (layer Composant) (net 110) (status 420))
+ (via (at 117.729 116.332) (size 0.889) (layers Composant Cuivre) (net 110))
+ (segment (start 125.984 107.569) (end 126.3015 107.2515) (width 0.254) (layer Composant) (net 110))
+ (segment (start 125.984 110.49) (end 125.984 107.569) (width 0.254) (layer Composant) (net 110))
+ (segment (start 127.635 107.4674) (end 126.5174 107.4674) (width 0.254) (layer Composant) (net 110) (status 810))
+ (segment (start 126.56312 106.9848) (end 126.3015 107.2515) (width 0.254) (layer Composant) (net 110))
+ (segment (start 127.635 106.9848) (end 126.56312 106.9848) (width 0.254) (layer Composant) (net 110) (status 810))
+ (segment (start 113.284 136.906) (end 115.824 136.906) (width 0.254) (layer VDD_layer) (net 110) (status C30))
+ (segment (start 120.65 111.506) (end 120.65 113.411) (width 0.381) (layer Composant) (net 110))
+ (segment (start 120.65 113.411) (end 117.729 116.332) (width 0.381) (layer Composant) (net 110))
+ (segment (start 117.602 131.572) (end 115.824 133.35) (width 0.381) (layer GND_layer) (net 110))
+ (segment (start 115.824 133.35) (end 115.824 136.906) (width 0.381) (layer GND_layer) (net 110) (status 420))
+ (segment (start 120.777 107.696) (end 120.777 110.109) (width 0.381) (layer Composant) (net 110) (status 830))
+ (segment (start 120.777 110.109) (end 120.65 110.236) (width 0.381) (layer Composant) (net 110) (status 430))
+ (segment (start 125.984 110.49) (end 124.968 111.506) (width 0.254) (layer Composant) (net 110))
+ (segment (start 124.968 111.506) (end 120.65 111.506) (width 0.254) (layer Composant) (net 110))
+ (segment (start 126.5174 107.4674) (end 126.3015 107.2515) (width 0.254) (layer Composant) (net 110))
+ (segment (start 117.729 131.445) (end 117.602 131.445) (width 0.381) (layer GND_layer) (net 110))
+ (segment (start 117.602 131.445) (end 117.602 131.572) (width 0.381) (layer GND_layer) (net 110))
+ (segment (start 120.65 110.236) (end 120.65 111.506) (width 0.381) (layer Composant) (net 110) (status 810))
+ (segment (start 124.714 110.363) (end 124.7775 110.2995) (width 0.4) (layer Composant) (net 111))
+ (segment (start 124.7775 110.2995) (end 124.7775 108.712) (width 0.4) (layer Composant) (net 111) (status 420))
+ (segment (start 123.444 105.283) (end 123.825 105.664) (width 0.4) (layer GND_layer) (net 111))
+ (segment (start 123.825 105.664) (end 123.825 110.109) (width 0.4) (layer GND_layer) (net 111))
+ (segment (start 123.825 110.109) (end 123.571 110.363) (width 0.4) (layer GND_layer) (net 111))
+ (via (at 118.872 105.029) (size 0.8) (layers Composant Cuivre) (net 111))
+ (via (at 123.444 105.283) (size 0.8) (layers Composant Cuivre) (net 111))
+ (via (at 123.571 110.363) (size 0.8) (layers Composant Cuivre) (net 111))
+ (segment (start 126.492 105.9688) (end 126.492 106.426) (width 0.4) (layer Composant) (net 111))
+ (segment (start 126.5428 106.4768) (end 127.635 106.4768) (width 0.254) (layer Composant) (net 111) (status 420))
+ (segment (start 126.492 106.426) (end 126.5428 106.4768) (width 0.254) (layer Composant) (net 111))
+ (segment (start 123.444 105.283) (end 124.206 106.045) (width 0.4) (layer Composant) (net 111))
+ (segment (start 125.8062 106.045) (end 125.8824 105.9688) (width 0.4) (layer Composant) (net 111))
+ (segment (start 124.206 106.045) (end 125.8062 106.045) (width 0.4) (layer Composant) (net 111))
+ (segment (start 123.444 105.283) (end 121.666 105.283) (width 0.4) (layer Composant) (net 111))
+ (segment (start 121.666 105.283) (end 120.777 104.394) (width 0.4) (layer Composant) (net 111) (status 420))
+ (segment (start 123.571 110.363) (end 124.714 110.363) (width 0.4) (layer Composant) (net 111))
+ (segment (start 113.284 139.446) (end 113.665 139.446) (width 0.4) (layer GND_layer) (net 111) (status 830))
+ (segment (start 126.492 105.9688) (end 125.8824 105.9688) (width 0.4) (layer Composant) (net 111))
+ (segment (start 127.635 105.9688) (end 126.492 105.9688) (width 0.254) (layer Composant) (net 111) (status 810))
+ (segment (start 115.824 139.446) (end 113.284 139.446) (width 0.4) (layer GND_layer) (net 111) (status 30))
+ (segment (start 119.38 114.3) (end 119.38 132.588) (width 0.4) (layer GND_layer) (net 111) (tstamp 53D8E5AE))
+ (segment (start 118.872 113.792) (end 119.38 114.3) (width 0.4) (layer GND_layer) (net 111) (tstamp 53D8E5AD))
+ (segment (start 118.872 105.029) (end 118.872 113.792) (width 0.4) (layer GND_layer) (net 111))
+ (segment (start 117.1 138.424) (end 117.1 134.868) (width 0.4) (layer GND_layer) (net 111) (tstamp 53D8E5B3))
+ (segment (start 117.1 134.868) (end 119.38 132.588) (width 0.4) (layer GND_layer) (net 111) (tstamp 53D8E5B4))
+ (segment (start 116.078 139.446) (end 117.1 138.424) (width 0.4) (layer GND_layer) (net 111) (tstamp 53D8E5B2) (status 10))
+ (segment (start 115.824 139.446) (end 116.078 139.446) (width 0.4) (layer GND_layer) (net 111) (status 30))
+ (segment (start 117.983 104.14) (end 118.872 105.029) (width 0.4) (layer Composant) (net 111) (tstamp 53D8E5B8))
+ (segment (start 117.983 101.346) (end 117.983 104.14) (width 0.4) (layer Composant) (net 111) (status 10))
+ (segment (start 119.507 104.394) (end 118.872 105.029) (width 0.4) (layer Composant) (net 111) (tstamp 53D8E5BB))
+ (segment (start 120.777 104.394) (end 119.507 104.394) (width 0.4) (layer Composant) (net 111) (status 10))
+ (via (at 186.182 71.12) (size 0.889) (layers Composant Cuivre) (net 112))
+ (segment (start 187.579 71.12) (end 186.182 71.12) (width 0.381) (layer Composant) (net 112))
+ (segment (start 187.706 71.247) (end 187.579 71.12) (width 0.381) (layer Composant) (net 112))
+ (segment (start 188.2775 71.247) (end 187.706 71.247) (width 0.381) (layer Composant) (net 112) (status 810))
+ (segment (start 184.15 74.676) (end 186.182 74.676) (width 0.381) (layer Composant) (net 112) (status 810))
+ (via (at 186.182 74.676) (size 0.635) (layers Composant Cuivre) (net 112))
+ (segment (start 186.182 71.12) (end 186.182 74.676) (width 0.381) (layer GND_layer) (net 112))
+ (segment (start 183.7055 72.9615) (end 184.15 73.406) (width 0.4318) (layer Composant) (net 113) (status 420))
+ (segment (start 181.102 72.9615) (end 183.7055 72.9615) (width 0.4318) (layer Composant) (net 113) (status 810))
+ (segment (start 181.61 75.438) (end 181.102 74.93) (width 0.381) (layer Composant) (net 114) (status 20))
+ (segment (start 182.245 75.438) (end 181.61 75.438) (width 0.381) (layer Composant) (net 114))
+ (segment (start 184.15 75.946) (end 182.753 75.946) (width 0.381) (layer Composant) (net 114) (status 810))
+ (segment (start 181.102 74.93) (end 181.102 74.8665) (width 0.381) (layer Composant) (net 114) (status 430))
+ (segment (start 182.753 75.946) (end 182.245 75.438) (width 0.381) (layer Composant) (net 114))
+ (segment (start 181.102 77.2795) (end 184.0865 77.2795) (width 0.4318) (layer Composant) (net 115) (status 830))
+ (segment (start 184.0865 77.2795) (end 184.15 77.216) (width 0.4318) (layer Composant) (net 115) (status 430))
+ (segment (start 184.15 78.486) (end 181.8005 78.486) (width 0.4318) (layer Composant) (net 116) (status 810))
+ (segment (start 181.8005 78.486) (end 181.102 79.1845) (width 0.4318) (layer Composant) (net 116) (status 420))
+ (segment (start 183.007 79.756) (end 182.245 80.518) (width 0.381) (layer Composant) (net 117))
+ (segment (start 178.562 79.121) (end 179.959 80.518) (width 0.4318) (layer Composant) (net 117) (status 10))
+ (segment (start 178.562 79.0575) (end 178.562 79.121) (width 0.4318) (layer Composant) (net 117) (status 830))
+ (segment (start 182.245 80.518) (end 179.959 80.518) (width 0.381) (layer Composant) (net 117))
+ (segment (start 184.15 79.756) (end 183.007 79.756) (width 0.381) (layer Composant) (net 117) (status 810))
+ (segment (start 158.242 71.247) (end 158.242 74.676) (width 0.381) (layer Cuivre) (net 118))
+ (segment (start 160.3375 71.247) (end 158.242 71.247) (width 0.381) (layer Composant) (net 118) (status 810))
+ (via (at 158.242 71.247) (size 0.635) (layers Composant Cuivre) (net 118))
+ (segment (start 156.21 74.676) (end 158.242 74.676) (width 0.381) (layer Composant) (net 118) (status 810))
+ (via (at 158.242 74.676) (size 0.635) (layers Composant Cuivre) (net 118))
+ (segment (start 154.3685 72.8345) (end 154.94 73.406) (width 0.381) (layer Composant) (net 119))
+ (segment (start 153.162 72.8345) (end 154.3685 72.8345) (width 0.381) (layer Composant) (net 119) (status 810))
+ (segment (start 154.94 73.406) (end 156.21 73.406) (width 0.381) (layer Composant) (net 119) (status 420))
+ (segment (start 153.162 74.93) (end 153.67 75.438) (width 0.254) (layer Composant) (net 120) (status 10))
+ (segment (start 153.162 74.7395) (end 153.162 74.93) (width 0.254) (layer Composant) (net 120) (status 830))
+ (segment (start 154.305 75.438) (end 153.67 75.438) (width 0.381) (layer Composant) (net 120))
+ (segment (start 156.21 75.946) (end 154.813 75.946) (width 0.381) (layer Composant) (net 120) (status 810))
+ (segment (start 154.813 75.946) (end 154.305 75.438) (width 0.381) (layer Composant) (net 120))
+ (segment (start 153.8605 77.1525) (end 153.924 77.216) (width 0.381) (layer Composant) (net 121))
+ (segment (start 153.035 77.1525) (end 153.8605 77.1525) (width 0.381) (layer Composant) (net 121) (status 810))
+ (segment (start 153.924 77.216) (end 156.21 77.216) (width 0.381) (layer Composant) (net 121) (status 420))
+ (segment (start 153.035 79.0575) (end 153.6065 79.0575) (width 0.381) (layer Composant) (net 122) (status 830))
+ (segment (start 154.178 78.486) (end 156.21 78.486) (width 0.381) (layer Composant) (net 122) (status 420))
+ (segment (start 153.6065 79.0575) (end 154.178 78.486) (width 0.381) (layer Composant) (net 122) (status 10))
+ (segment (start 150.876 79.756) (end 151.638 80.518) (width 0.381) (layer Composant) (net 123))
+ (segment (start 150.876 79.0575) (end 150.876 79.756) (width 0.381) (layer Composant) (net 123) (status 810))
+ (segment (start 155.067 79.756) (end 156.21 79.756) (width 0.381) (layer Composant) (net 123) (status 420))
+ (segment (start 151.638 80.518) (end 154.305 80.518) (width 0.381) (layer Composant) (net 123))
+ (segment (start 154.305 80.518) (end 155.067 79.756) (width 0.381) (layer Composant) (net 123))
+ (via (at 125.222 74.676) (size 0.635) (layers Composant Cuivre) (net 124))
+ (segment (start 125.222 71.247) (end 127.3175 71.247) (width 0.381) (layer Composant) (net 124) (status 420))
+ (via (at 125.222 71.247) (size 0.635) (layers Composant Cuivre) (net 124))
+ (segment (start 125.222 71.247) (end 125.222 74.676) (width 0.381) (layer GND_layer) (net 124))
+ (segment (start 123.19 74.676) (end 125.222 74.676) (width 0.381) (layer Composant) (net 124) (status 810))
+ (segment (start 120.142 77.1525) (end 121.7295 77.1525) (width 0.381) (layer Composant) (net 125) (status 810))
+ (segment (start 121.793 77.216) (end 123.19 77.216) (width 0.381) (layer Composant) (net 125) (status 420))
+ (segment (start 121.7295 77.1525) (end 121.793 77.216) (width 0.381) (layer Composant) (net 125))
+ (segment (start 121.539 78.486) (end 120.9675 79.0575) (width 0.381) (layer Composant) (net 126))
+ (segment (start 123.19 78.486) (end 121.539 78.486) (width 0.381) (layer Composant) (net 126) (status 810))
+ (segment (start 120.9675 79.0575) (end 120.142 79.0575) (width 0.381) (layer Composant) (net 126) (status 420))
+ (segment (start 94.361 79.629) (end 99.949 79.629) (width 0.762) (layer Composant) (net 127) (status 420))
+ (segment (start 104.267 74.168) (end 99.949 78.486) (width 0.4318) (layer Composant) (net 127) (status 30))
+ (segment (start 87.6935 88.8365) (end 88.9 87.63) (width 0.762) (layer Composant) (net 127) (status 420))
+ (segment (start 99.949 79.629) (end 99.949 81.026) (width 0.762) (layer Composant) (net 127) (status 830))
+ (segment (start 93.472 77.089) (end 93.472 78.74) (width 0.762) (layer Composant) (net 127) (status 810))
+ (segment (start 93.472 78.74) (end 94.361 79.629) (width 0.762) (layer Composant) (net 127))
+ (segment (start 87.6935 90.2335) (end 87.6935 88.8365) (width 0.762) (layer Composant) (net 127))
+ (segment (start 97.282 83.693) (end 92.837 83.693) (width 0.762) (layer Composant) (net 127))
+ (segment (start 104.267 74.1045) (end 104.267 74.168) (width 0.4318) (layer Composant) (net 127) (status 830))
+ (segment (start 92.837 83.693) (end 88.9 87.63) (width 0.762) (layer Composant) (net 127) (status 420))
+ (segment (start 99.949 78.486) (end 99.949 79.629) (width 0.4318) (layer Composant) (net 127) (status 430))
+ (segment (start 99.949 81.026) (end 97.282 83.693) (width 0.762) (layer Composant) (net 127) (status 10))
+ (segment (start 87.6935 90.2335) (end 84.836 93.091) (width 0.762) (layer Composant) (net 127))
+ (segment (start 84.836 93.091) (end 81.5086 93.091) (width 0.762) (layer Composant) (net 127) (status 420))
+ (segment (start 184.404 126.0475) (end 184.7215 125.73) (width 0.4318) (layer Composant) (net 128) (status 430))
+ (segment (start 184.404 130.302) (end 184.404 126.0475) (width 0.4318) (layer Composant) (net 128) (status 830))
+ (segment (start 184.404 130.302) (end 184.404 136.906) (width 0.4318) (layer GND_layer) (net 128) (status C30))
+ (segment (start 123.19 73.406) (end 120.7135 73.406) (width 0.381) (layer Composant) (net 129) (status 810))
+ (segment (start 120.7135 73.406) (end 120.142 72.8345) (width 0.381) (layer Composant) (net 129) (status 420))
+ (segment (start 123.19 75.946) (end 121.793 75.946) (width 0.381) (layer Composant) (net 130) (status 810))
+ (segment (start 120.142 74.93) (end 120.65 75.438) (width 0.254) (layer Composant) (net 130) (status 10))
+ (segment (start 121.285 75.438) (end 120.65 75.438) (width 0.381) (layer Composant) (net 130))
+ (segment (start 120.142 74.7395) (end 120.142 74.93) (width 0.254) (layer Composant) (net 130) (status 830))
+ (segment (start 121.793 75.946) (end 121.285 75.438) (width 0.381) (layer Composant) (net 130))
+ (segment (start 123.19 79.756) (end 122.047 79.756) (width 0.381) (layer Composant) (net 131) (status 810))
+ (segment (start 122.047 79.756) (end 121.285 80.518) (width 0.381) (layer Composant) (net 131))
+ (segment (start 118.999 80.518) (end 117.602 79.0575) (width 0.381) (layer Composant) (net 131) (status 420))
+ (segment (start 121.285 80.518) (end 118.999 80.518) (width 0.381) (layer Composant) (net 131))
+ (segment (start 152.527 88.392) (end 151.765 87.63) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 161.544 127.508) (end 152.654 136.398) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 161.544 119.38) (end 161.544 127.508) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 160.147 117.983) (end 161.544 119.38) (width 0.254) (layer GND_layer) (net 132) (status 810))
+ (segment (start 156.21 114.046) (end 156.21 92.329) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 156.21 92.329) (end 154.813 90.932) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 160.147 117.983) (end 156.21 114.046) (width 0.254) (layer GND_layer) (net 132) (status 810))
+ (segment (start 136.779 89.027) (end 136.525 88.646) (width 0.254) (layer Composant) (net 132))
+ (segment (start 136.779 91.948) (end 136.779 89.027) (width 0.254) (layer Composant) (net 132))
+ (segment (start 136.8933 92.3163) (end 136.779 91.948) (width 0.254) (layer Composant) (net 132))
+ (segment (start 136.017 84.709) (end 136.017 85.344) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 135.763 84.455) (end 136.017 84.709) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 111.76 86.487) (end 111.76 85.852) (width 0.254) (layer Cuivre) (net 132) (status 830))
+ (segment (start 127.127 84.455) (end 135.763 84.455) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 136.8806 93.726) (end 136.8933 92.3163) (width 0.254) (layer Composant) (net 132) (status 810))
+ (segment (start 139.827 88.646) (end 136.525 88.646) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 151.765 87.63) (end 140.843 87.63) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 126.365 83.693) (end 127.127 84.455) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 113.919 83.693) (end 126.365 83.693) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 111.76 85.852) (end 113.919 83.693) (width 0.254) (layer Cuivre) (net 132) (status 10))
+ (segment (start 140.843 87.63) (end 139.827 88.646) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 153.035 88.392) (end 152.527 88.392) (width 0.254) (layer Cuivre) (net 132))
+ (segment (start 153.543 88.392) (end 154.813 89.662) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 154.813 89.662) (end 154.813 90.932) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 153.035 88.392) (end 153.543 88.392) (width 0.254) (layer GND_layer) (net 132))
+ (via (at 153.035 88.392) (size 0.889) (layers Composant Cuivre) (net 132))
+ (segment (start 152.654 136.398) (end 152.654 138.176) (width 0.254) (layer GND_layer) (net 132))
+ (segment (start 152.654 138.176) (end 153.924 139.446) (width 0.254) (layer GND_layer) (net 132) (status 420))
+ (segment (start 136.017 85.344) (end 136.525 86.106) (width 0.254) (layer Composant) (net 132))
+ (segment (start 136.525 86.106) (end 136.525 88.646) (width 0.254) (layer Composant) (net 132))
+ (via (at 136.017 85.344) (size 0.889) (layers Composant Cuivre) (net 132))
+ (via (at 136.525 88.646) (size 0.635) (layers Composant Cuivre) (net 132))
+ (segment (start 98.7425 85.471) (end 97.155 85.471) (width 0.381) (layer Composant) (net 133) (status 810))
+ (segment (start 95.885 86.741) (end 95.885 91.313) (width 0.381) (layer Composant) (net 133))
+ (segment (start 95.885 91.313) (end 97.79 93.218) (width 0.381) (layer Composant) (net 133) (status 420))
+ (segment (start 97.155 85.471) (end 95.885 86.741) (width 0.381) (layer Composant) (net 133))
+ (segment (start 125.984 74.041) (end 123.317 71.374) (width 0.381) (layer Composant) (net 134))
+ (segment (start 116.459 73.533) (end 113.284 73.533) (width 0.381) (layer Composant) (net 134) (status 420))
+ (segment (start 118.618 71.374) (end 116.459 73.533) (width 0.381) (layer Composant) (net 134))
+ (segment (start 123.317 71.374) (end 118.618 71.374) (width 0.381) (layer Composant) (net 134))
+ (segment (start 125.984 76.581) (end 125.984 74.041) (width 0.381) (layer Composant) (net 134))
+ (segment (start 126.619 77.216) (end 125.984 76.581) (width 0.381) (layer Composant) (net 134))
+ (segment (start 128.27 77.216) (end 126.619 77.216) (width 0.381) (layer Composant) (net 134) (status 810))
+ (segment (start 116.078 75.311) (end 115.57 74.803) (width 0.381) (layer Composant) (net 135))
+ (segment (start 119.634 82.296) (end 117.856 80.518) (width 0.381) (layer Composant) (net 135))
+ (segment (start 112.014 74.803) (end 110.744 73.533) (width 0.381) (layer Composant) (net 135) (status 420))
+ (segment (start 123.19 82.296) (end 119.634 82.296) (width 0.381) (layer Composant) (net 135) (status 810))
+ (segment (start 115.57 74.803) (end 112.014 74.803) (width 0.381) (layer Composant) (net 135))
+ (segment (start 116.078 80.137) (end 116.078 75.311) (width 0.381) (layer Composant) (net 135))
+ (segment (start 116.459 80.518) (end 116.078 80.137) (width 0.381) (layer Composant) (net 135))
+ (segment (start 117.856 80.518) (end 116.459 80.518) (width 0.381) (layer Composant) (net 135))
+ (segment (start 109.474 76.835) (end 109.474 74.803) (width 0.381) (layer Composant) (net 136))
+ (segment (start 123.19 81.026) (end 124.079 81.026) (width 0.381) (layer Composant) (net 136) (status 810))
+ (segment (start 109.982 77.343) (end 109.474 76.835) (width 0.381) (layer Composant) (net 136))
+ (segment (start 114.808 77.343) (end 109.982 77.343) (width 0.381) (layer Composant) (net 136))
+ (segment (start 115.316 77.851) (end 114.808 77.343) (width 0.381) (layer Composant) (net 136))
+ (segment (start 124.079 81.026) (end 124.841 81.788) (width 0.381) (layer Composant) (net 136))
+ (segment (start 124.841 81.788) (end 124.841 82.804) (width 0.381) (layer Composant) (net 136))
+ (segment (start 119.253 83.058) (end 117.475 81.28) (width 0.381) (layer Composant) (net 136))
+ (segment (start 124.841 82.804) (end 124.587 83.058) (width 0.381) (layer Composant) (net 136))
+ (segment (start 109.474 74.803) (end 108.204 73.533) (width 0.381) (layer Composant) (net 136) (status 420))
+ (segment (start 124.587 83.058) (end 119.253 83.058) (width 0.381) (layer Composant) (net 136))
+ (segment (start 115.316 80.645) (end 115.316 77.851) (width 0.381) (layer Composant) (net 136))
+ (segment (start 115.951 81.28) (end 115.316 80.645) (width 0.381) (layer Composant) (net 136))
+ (segment (start 117.475 81.28) (end 115.951 81.28) (width 0.381) (layer Composant) (net 136))
+ (segment (start 161.3535 102.489) (end 162.179 102.489) (width 0.381) (layer Composant) (net 137) (status 810))
+ (segment (start 163.195 103.505) (end 163.195 105.918) (width 0.381) (layer Composant) (net 137))
+ (segment (start 163.195 105.918) (end 163.6395 106.3625) (width 0.381) (layer Composant) (net 137))
+ (segment (start 163.6395 106.3625) (end 164.846 106.3625) (width 0.381) (layer Composant) (net 137) (status 420))
+ (segment (start 162.2425 108.966) (end 164.846 106.3625) (width 0.254) (layer Composant) (net 137) (status 420))
+ (segment (start 162.179 102.489) (end 163.195 103.505) (width 0.381) (layer Composant) (net 137))
+ (segment (start 161.544 108.966) (end 162.2425 108.966) (width 0.254) (layer Composant) (net 137) (status 810))
+ (segment (start 210.439 76.835) (end 207.3275 76.835) (width 0.254) (layer Composant) (net 138) (status C30))
+ (segment (start 210.439 80.645) (end 207.3275 80.645) (width 0.254) (layer Composant) (net 139) (status C30))
+ (segment (start 99.949 73.279) (end 97.155 73.279) (width 0.762) (layer Composant) (net 140) (status 810))
+ (segment (start 95.631 74.803) (end 90.043 74.803) (width 0.762) (layer Composant) (net 140))
+ (segment (start 97.155 73.279) (end 95.631 74.803) (width 0.762) (layer Composant) (net 140))
+ (segment (start 90.043 74.803) (end 86.614 71.374) (width 0.762) (layer Composant) (net 140) (status 420))
+ (segment (start 75.438 66.929) (end 79.248 63.119) (width 1.524) (layer Composant) (net 141) (status 10))
+ (segment (start 79.248 63.119) (end 95.885 63.119) (width 1.524) (layer Composant) (net 141) (status 420))
+ (segment (start 91.694 71.374) (end 91.694 67.31) (width 1.524) (layer Composant) (net 141) (status 810))
+ (segment (start 91.694 67.31) (end 95.885 63.119) (width 1.524) (layer Composant) (net 141) (status 420))
+ (segment (start 75.438 67.945) (end 75.438 66.929) (width 1.524) (layer Composant) (net 141) (status 830))
+ (segment (start 115.443 110.236) (end 115.062 109.855) (width 0.381) (layer Composant) (net 142) (status 430))
+ (segment (start 117.348 110.236) (end 115.443 110.236) (width 0.381) (layer Composant) (net 142) (status 830))
+ (segment (start 92.2655 117.094) (end 90.043 117.094) (width 0.4318) (layer Composant) (net 143) (status C30))
+ (segment (start 92.2655 121.158) (end 90.043 121.158) (width 0.4318) (layer Composant) (net 144) (status C30))
+ (segment (start 92.2655 125.349) (end 90.043 125.349) (width 0.4318) (layer Composant) (net 145) (status C30))
+ (segment (start 92.2655 129.413) (end 90.17 129.413) (width 0.4318) (layer Composant) (net 146) (status 830))
+ (segment (start 90.17 129.413) (end 90.043 129.54) (width 0.4318) (layer Composant) (net 146) (status 430))
+ (segment (start 104.4575 136.2075) (end 104.14 136.525) (width 0.4318) (layer Composant) (net 147) (status 430))
+ (segment (start 104.4575 133.858) (end 104.4575 136.2075) (width 0.4318) (layer Composant) (net 147) (status 830))
+ (segment (start 164.846 102.108) (end 164.846 104.4575) (width 0.4318) (layer Composant) (net 148) (status C30))
+ (segment (start 101.092 115.062) (end 101.092 118.872) (width 0.254) (layer GND_layer) (net 149))
+ (via (at 95.758 115.062) (size 0.889) (layers Composant Cuivre) (net 149))
+ (via (at 101.092 115.062) (size 0.889) (layers Composant Cuivre) (net 149))
+ (segment (start 96.139 113.792) (end 97.409 113.792) (width 0.381) (layer Composant) (net 149) (status 420))
+ (via (at 101.092 118.872) (size 0.889) (layers Composant Cuivre) (net 149))
+ (via (at 95.758 117.602) (size 0.889) (layers Composant Cuivre) (net 149))
+ (segment (start 101.092 115.062) (end 102.743 115.062) (width 0.381) (layer Composant) (net 149) (status 420))
+ (segment (start 95.758 115.062) (end 95.758 117.602) (width 0.254) (layer GND_layer) (net 149))
+ (segment (start 101.092 118.872) (end 102.743 118.872) (width 0.381) (layer Composant) (net 149) (status 420))
+ (segment (start 101.092 115.062) (end 95.758 115.062) (width 0.4318) (layer GND_layer) (net 149))
+ (segment (start 95.123 113.792) (end 94.234 112.903) (width 0.381) (layer Composant) (net 149) (status 420))
+ (segment (start 96.139 113.792) (end 95.123 113.792) (width 0.381) (layer Composant) (net 149))
+ (segment (start 95.5675 111.5695) (end 94.234 112.903) (width 0.381) (layer Composant) (net 149) (status 420))
+ (segment (start 95.5675 110.236) (end 95.5675 111.5695) (width 0.381) (layer Composant) (net 149) (status 810))
+ (segment (start 95.758 114.173) (end 96.139 113.792) (width 0.381) (layer Composant) (net 149))
+ (segment (start 95.758 115.062) (end 95.758 114.173) (width 0.381) (layer Composant) (net 149))
+ (segment (start 97.409 117.602) (end 95.758 117.602) (width 0.381) (layer Composant) (net 149) (status 810))
+ (segment (start 181.61 118.999) (end 182.372 119.761) (width 0.381) (layer Composant) (net 150))
+ (segment (start 181.61 118.999) (end 181.61 110.236) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 179.705 120.904) (end 181.61 118.999) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 182.499 141.351) (end 171.323 141.351) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 171.323 141.351) (end 170.434 140.462) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 170.434 140.462) (end 170.434 131.953) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 179.705 123.317) (end 175.133 127.889) (width 0.254) (layer GND_layer) (net 150))
+ (via (at 181.61 118.999) (size 0.889) (layers Composant Cuivre) (net 150))
+ (via (at 172.466 92.964) (size 0.889) (layers Composant Cuivre) (net 150))
+ (segment (start 184.404 139.446) (end 182.499 141.351) (width 0.254) (layer GND_layer) (net 150) (status 810))
+ (via (at 150.495 95.25) (size 0.889) (layers Composant Cuivre) (net 150))
+ (via (at 181.61 110.236) (size 0.635) (layers Composant Cuivre) (net 150))
+ (segment (start 179.705 120.904) (end 179.705 123.317) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 174.498 127.889) (end 170.434 131.953) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 175.133 127.889) (end 174.498 127.889) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 188.7982 105.3211) (end 188.9887 105.5116) (width 0.254) (layer Composant) (net 150))
+ (segment (start 188.9887 105.5116) (end 190.9445 105.5116) (width 0.254) (layer Composant) (net 150) (status 420))
+ (segment (start 181.61 110.236) (end 183.8833 110.236) (width 0.254) (layer VDD_layer) (net 150))
+ (segment (start 183.8833 110.236) (end 188.7982 105.3211) (width 0.254) (layer VDD_layer) (net 150))
+ (segment (start 150.495 95.25) (end 156.718 95.25) (width 0.254) (layer Cuivre) (net 150))
+ (via (at 188.7982 105.3211) (size 0.889) (layers Composant Cuivre) (net 150))
+ (segment (start 182.372 119.761) (end 183.769 119.761) (width 0.381) (layer Composant) (net 150))
+ (segment (start 183.769 119.761) (end 184.7215 121.158) (width 0.381) (layer Composant) (net 150) (status 420))
+ (segment (start 147.574 101.981) (end 143.129 101.9556) (width 0.254) (layer Composant) (net 150) (status 420))
+ (segment (start 148.717 100.838) (end 147.574 101.981) (width 0.254) (layer Composant) (net 150))
+ (segment (start 148.717 97.028) (end 148.717 100.838) (width 0.254) (layer Composant) (net 150))
+ (segment (start 150.495 95.25) (end 148.717 97.028) (width 0.254) (layer Composant) (net 150))
+ (segment (start 179.451 110.236) (end 181.61 110.236) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 178.562 111.125) (end 179.451 110.236) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 175.641 111.125) (end 178.562 111.125) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 156.718 95.25) (end 160.528 91.44) (width 0.254) (layer Cuivre) (net 150))
+ (segment (start 160.528 91.44) (end 163.576 91.44) (width 0.254) (layer Cuivre) (net 150))
+ (segment (start 163.576 91.44) (end 165.989 93.853) (width 0.254) (layer Cuivre) (net 150))
+ (segment (start 165.989 93.853) (end 170.561 93.853) (width 0.254) (layer Cuivre) (net 150))
+ (segment (start 170.561 93.853) (end 171.45 92.964) (width 0.254) (layer Cuivre) (net 150))
+ (segment (start 171.45 92.964) (end 172.466 92.964) (width 0.254) (layer Cuivre) (net 150))
+ (segment (start 172.466 92.964) (end 172.466 107.95) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 172.466 107.95) (end 175.641 111.125) (width 0.254) (layer GND_layer) (net 150))
+ (segment (start 171.704 132.207) (end 171.704 136.906) (width 0.254) (layer GND_layer) (net 151) (status 420))
+ (segment (start 171.704 132.207) (end 181.102 122.809) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 182.245 107.569) (end 182.499 107.823) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 182.499 107.823) (end 182.499 119.888) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 181.61 107.569) (end 182.245 107.569) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 152.4 85.852) (end 152.4 84.836) (width 0.254) (layer Composant) (net 151))
+ (segment (start 146.177 92.075) (end 152.4 85.852) (width 0.254) (layer Composant) (net 151))
+ (segment (start 181.61 107.569) (end 181.102 107.569) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 144.7038 96.4692) (end 146.177 94.996) (width 0.254) (layer Composant) (net 151))
+ (segment (start 143.129 96.4692) (end 144.7038 96.4692) (width 0.254) (layer Composant) (net 151) (status 810))
+ (segment (start 183.65978 105.51922) (end 181.61 107.569) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 183.65978 100.82022) (end 183.65978 105.51922) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 196.42582 88.05418) (end 183.65978 100.82022) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 197.485 88.05418) (end 196.42582 88.05418) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 197.485 86.995) (end 197.485 88.05418) (width 0.254) (layer Cuivre) (net 151) (status 810))
+ (segment (start 183.0451 109.0041) (end 190.9445 109.0041) (width 0.254) (layer Composant) (net 151) (status 420))
+ (segment (start 181.102 107.569) (end 178.435 104.902) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 178.435 104.902) (end 178.435 90.551) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 178.435 90.551) (end 179.959 89.027) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 179.959 89.027) (end 179.959 77.597) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 179.959 77.597) (end 178.181 75.819) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 178.181 75.819) (end 176.911 75.819) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 176.911 75.819) (end 173.99 78.74) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 173.99 78.74) (end 173.99 80.264) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 173.99 80.264) (end 172.085 82.169) (width 0.254) (layer GND_layer) (net 151) (status 420))
+ (segment (start 172.085 82.169) (end 170.942 83.312) (width 0.254) (layer Cuivre) (net 151) (status 810))
+ (segment (start 170.942 83.312) (end 168.656 83.312) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 168.656 83.312) (end 168.275 82.931) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 168.275 82.931) (end 164.846 82.931) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 164.973 82.804) (end 164.846 82.931) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 154.432 82.804) (end 164.973 82.804) (width 0.254) (layer Cuivre) (net 151))
+ (segment (start 152.4 84.836) (end 154.432 82.804) (width 0.254) (layer Cuivre) (net 151))
+ (via (at 181.61 107.569) (size 0.635) (layers Composant Cuivre) (net 151))
+ (via (at 152.4 84.836) (size 0.889) (layers Composant Cuivre) (net 151))
+ (segment (start 181.102 122.809) (end 181.102 121.285) (width 0.254) (layer GND_layer) (net 151))
+ (segment (start 146.177 94.996) (end 146.177 92.075) (width 0.254) (layer Composant) (net 151))
+ (segment (start 181.61 107.569) (end 183.0451 109.0041) (width 0.254) (layer Composant) (net 151))
+ (segment (start 181.102 121.285) (end 182.499 119.888) (width 0.254) (layer GND_layer) (net 151))
+ (via (at 163.322 93.472) (size 0.889) (layers Composant Cuivre) (net 152))
+ (via (at 179.197 93.726) (size 0.635) (layers Composant Cuivre) (net 152))
+ (segment (start 146.685 95.25) (end 146.812 94.869) (width 0.254) (layer Composant) (net 152))
+ (segment (start 144.9578 96.9772) (end 146.685 95.25) (width 0.254) (layer Composant) (net 152))
+ (segment (start 143.129 96.9772) (end 144.9578 96.9772) (width 0.254) (layer Composant) (net 152) (status 810))
+ (segment (start 164.465 94.615) (end 163.322 93.472) (width 0.254) (layer Cuivre) (net 152))
+ (segment (start 178.816 94.615) (end 164.465 94.615) (width 0.254) (layer Cuivre) (net 152))
+ (segment (start 179.197 94.234) (end 178.816 94.615) (width 0.254) (layer Cuivre) (net 152))
+ (segment (start 179.197 93.726) (end 179.197 94.234) (width 0.254) (layer Cuivre) (net 152))
+ (segment (start 158.369 91.44) (end 158.623 91.2495) (width 0.381) (layer Composant) (net 152) (status 430))
+ (segment (start 156.337 91.44) (end 158.369 91.44) (width 0.381) (layer Composant) (net 152) (status 20))
+ (segment (start 154.813 89.916) (end 156.337 91.44) (width 0.381) (layer Composant) (net 152))
+ (segment (start 149.352 89.916) (end 154.813 89.916) (width 0.381) (layer Composant) (net 152))
+ (segment (start 179.197 93.726) (end 178.943 94.234) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 146.812 92.456) (end 149.352 89.916) (width 0.381) (layer Composant) (net 152))
+ (segment (start 146.812 94.869) (end 146.812 92.456) (width 0.254) (layer Composant) (net 152))
+ (segment (start 160.782 93.472) (end 163.322 93.472) (width 0.381) (layer Composant) (net 152))
+ (segment (start 158.623 91.2495) (end 160.782 93.472) (width 0.381) (layer Composant) (net 152) (status 810))
+ (segment (start 180.594 140.716) (end 181.864 139.446) (width 0.254) (layer GND_layer) (net 152) (status 420))
+ (segment (start 173.736 140.716) (end 180.594 140.716) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 172.974 139.954) (end 173.736 140.716) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 172.974 131.826) (end 172.974 139.954) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 172.974 131.826) (end 183.007 121.793) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 183.007 107.442) (end 183.007 121.793) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 182.245 106.68) (end 183.007 107.442) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 181.102 106.68) (end 182.245 106.68) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 178.943 104.521) (end 181.102 106.68) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 178.943 94.234) (end 178.943 104.521) (width 0.254) (layer GND_layer) (net 152))
+ (segment (start 131.445 102.108) (end 130.937 102.616) (width 0.254) (layer Composant) (net 153))
+ (segment (start 129.921 102.616) (end 128.778 101.473) (width 0.254) (layer Composant) (net 153))
+ (segment (start 132.334 135.89) (end 132.334 139.954) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 128.778 101.473) (end 127.635 101.473) (width 0.254) (layer Composant) (net 153) (status 420))
+ (via (at 132.588 102.87) (size 0.635) (layers Composant Cuivre) (net 153))
+ (segment (start 167.894 140.208) (end 167.894 138.176) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 130.937 102.616) (end 129.921 102.616) (width 0.254) (layer Composant) (net 153))
+ (segment (start 132.334 102.489) (end 131.953 102.108) (width 0.254) (layer Composant) (net 153))
+ (segment (start 132.588 102.87) (end 132.334 102.489) (width 0.254) (layer Composant) (net 153))
+ (segment (start 167.894 138.176) (end 169.164 136.906) (width 0.254) (layer Cuivre) (net 153) (status 420))
+ (segment (start 132.588 102.87) (end 132.588 105.918) (width 0.254) (layer GND_layer) (net 153))
+ (segment (start 132.588 105.918) (end 131.445 107.061) (width 0.254) (layer GND_layer) (net 153))
+ (segment (start 131.445 107.061) (end 131.445 126.238) (width 0.254) (layer GND_layer) (net 153))
+ (segment (start 131.445 126.238) (end 133.604 128.397) (width 0.254) (layer GND_layer) (net 153))
+ (segment (start 133.604 128.397) (end 133.604 135.001) (width 0.254) (layer GND_layer) (net 153))
+ (segment (start 133.604 135.001) (end 133.604 134.493) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 133.604 134.493) (end 133.35 134.239) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 133.35 134.239) (end 132.461 134.239) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 132.461 134.239) (end 131.953 134.747) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 131.953 134.747) (end 131.953 135.509) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 131.953 135.509) (end 132.334 135.89) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 132.334 139.954) (end 133.604 141.224) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 133.604 141.224) (end 166.878 141.224) (width 0.254) (layer Cuivre) (net 153))
+ (segment (start 166.878 141.224) (end 167.894 140.208) (width 0.254) (layer Cuivre) (net 153))
+ (via (at 133.604 135.001) (size 0.635) (layers Composant Cuivre) (net 153))
+ (segment (start 131.953 102.108) (end 131.445 102.108) (width 0.254) (layer Composant) (net 153))
+ (segment (start 132.715 135.509) (end 132.715 135.001) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 132.715 135.001) (end 130.937 133.223) (width 0.254) (layer GND_layer) (net 154))
+ (segment (start 130.937 133.223) (end 130.937 129.413) (width 0.254) (layer GND_layer) (net 154))
+ (via (at 132.715 135.001) (size 0.635) (layers Composant Cuivre) (net 154))
+ (segment (start 166.624 136.906) (end 165.354 138.176) (width 0.254) (layer Cuivre) (net 154) (status 810))
+ (segment (start 132.969 135.763) (end 132.715 135.509) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 134.62 135.763) (end 132.969 135.763) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 134.874 136.017) (end 134.62 135.763) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 134.874 139.954) (end 134.874 136.017) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 135.636 140.716) (end 134.874 139.954) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 164.719 140.716) (end 135.636 140.716) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 165.354 140.081) (end 164.719 140.716) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 165.354 138.176) (end 165.354 140.081) (width 0.254) (layer Cuivre) (net 154))
+ (segment (start 130.556 109.601) (end 128.651 107.696) (width 0.254) (layer GND_layer) (net 154))
+ (segment (start 128.651 107.696) (end 128.651 99.568) (width 0.254) (layer GND_layer) (net 154))
+ (segment (start 128.651 99.568) (end 129.159 99.06) (width 0.254) (layer GND_layer) (net 154))
+ (segment (start 127.635 98.9838) (end 128.7526 98.9584) (width 0.254) (layer Composant) (net 154) (status 810))
+ (segment (start 128.7526 98.9584) (end 129.159 99.06) (width 0.254) (layer Composant) (net 154))
+ (via (at 129.159 99.06) (size 0.889) (layers Composant Cuivre) (net 154))
+ (segment (start 130.556 109.601) (end 130.556 129.032) (width 0.254) (layer GND_layer) (net 154))
+ (segment (start 130.556 129.032) (end 130.937 129.413) (width 0.254) (layer GND_layer) (net 154))
+ (segment (start 188.43752 106.18978) (end 189.16142 106.18978) (width 0.254) (layer Composant) (net 155))
+ (segment (start 147.32 101.473) (end 143.129 101.473) (width 0.254) (layer Composant) (net 155) (status 420))
+ (via (at 179.705 92.202) (size 0.635) (layers Composant Cuivre) (net 155))
+ (via (at 181.61 104.902) (size 0.635) (layers Composant Cuivre) (net 155))
+ (via (at 149.352 95.25) (size 0.635) (layers Composant Cuivre) (net 155))
+ (via (at 184.531 118.872) (size 0.889) (layers Composant Cuivre) (net 155))
+ (segment (start 175.514 130.937) (end 175.514 138.176) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 148.209 100.584) (end 147.32 101.473) (width 0.254) (layer Composant) (net 155))
+ (segment (start 189.3443 106.0069) (end 190.9445 106.0069) (width 0.254) (layer Composant) (net 155) (status 420))
+ (segment (start 189.16142 106.18978) (end 189.3443 106.0069) (width 0.254) (layer Composant) (net 155))
+ (segment (start 148.209 96.647) (end 148.209 100.584) (width 0.254) (layer Composant) (net 155))
+ (segment (start 149.098 95.758) (end 148.209 96.647) (width 0.254) (layer Composant) (net 155))
+ (segment (start 149.352 95.25) (end 149.098 95.758) (width 0.254) (layer Composant) (net 155))
+ (segment (start 182.245 104.902) (end 181.61 104.902) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 181.61 104.902) (end 187.14974 104.902) (width 0.254) (layer Composant) (net 155))
+ (segment (start 184.531 107.188) (end 182.245 104.902) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 184.7215 123.444) (end 185.928 122.2375) (width 0.254) (layer Composant) (net 155) (status 810))
+ (segment (start 180.467 92.964) (end 179.705 92.202) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 180.467 104.267) (end 180.467 92.964) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 185.928 122.2375) (end 185.928 119.253) (width 0.254) (layer Composant) (net 155))
+ (segment (start 185.928 119.253) (end 185.547 118.872) (width 0.254) (layer Composant) (net 155))
+ (segment (start 185.547 118.872) (end 184.531 118.872) (width 0.254) (layer Composant) (net 155))
+ (segment (start 184.531 118.872) (end 184.531 107.188) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 187.14974 104.902) (end 188.43752 106.18978) (width 0.254) (layer Composant) (net 155))
+ (segment (start 181.102 104.902) (end 180.467 104.267) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 181.61 104.902) (end 181.102 104.902) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 179.197 91.694) (end 179.705 92.202) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 177.927 91.694) (end 179.197 91.694) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 177.419 91.186) (end 177.927 91.694) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 175.514 91.186) (end 177.419 91.186) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 175.006 91.694) (end 175.514 91.186) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 171.45 91.694) (end 175.006 91.694) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 169.799 93.345) (end 171.45 91.694) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 166.37 93.345) (end 169.799 93.345) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 163.957 90.932) (end 166.37 93.345) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 160.274 90.932) (end 163.957 90.932) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 156.718 94.488) (end 160.274 90.932) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 149.606 94.488) (end 156.718 94.488) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 149.352 94.742) (end 149.606 94.488) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 149.352 95.25) (end 149.352 94.742) (width 0.254) (layer Cuivre) (net 155))
+ (segment (start 184.531 118.872) (end 184.531 121.92) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 175.514 130.937) (end 184.531 121.92) (width 0.254) (layer GND_layer) (net 155))
+ (segment (start 176.784 139.446) (end 175.514 138.176) (width 0.254) (layer GND_layer) (net 155) (status 810))
+ (segment (start 173.101 88.138) (end 172.466 88.773) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 172.466 88.773) (end 165.735 88.773) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 165.735 88.773) (end 165.1 88.138) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 165.1 88.138) (end 158.623 88.138) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 158.623 88.138) (end 157.099 89.662) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 181.61 108.458) (end 181.102 108.458) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 181.102 108.458) (end 179.07 106.426) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 179.07 106.426) (end 177.673 106.426) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 177.673 106.426) (end 177.292 106.045) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 177.292 106.045) (end 177.292 90.17) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 177.292 90.17) (end 178.181 89.281) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 178.181 89.281) (end 178.308 88.773) (width 0.254) (layer GND_layer) (net 156))
+ (via (at 193.294 105.41) (size 0.889) (layers Composant Cuivre) (net 156))
+ (via (at 157.099 89.662) (size 0.635) (layers Composant Cuivre) (net 156))
+ (via (at 133.35 96.012) (size 0.889) (layers Composant Cuivre) (net 156))
+ (via (at 181.61 108.458) (size 0.635) (layers Composant Cuivre) (net 156))
+ (segment (start 156.591 89.662) (end 155.575 90.678) (width 0.254) (layer Cuivre) (net 156))
+ (via (at 178.308 88.773) (size 0.635) (layers Composant Cuivre) (net 156))
+ (segment (start 193.294 105.41) (end 192.00368 106.6546) (width 0.254) (layer Composant) (net 156))
+ (segment (start 192.00368 106.6546) (end 192.00368 108.0135) (width 0.254) (layer Composant) (net 156))
+ (segment (start 181.61 108.458) (end 183.81472 106.25328) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 183.81472 106.25328) (end 192.405 106.25328) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 192.405 106.25328) (end 193.294 105.41) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 190.9445 108.0135) (end 192.00368 108.0135) (width 0.254) (layer Composant) (net 156) (status 810))
+ (segment (start 164.084 136.906) (end 164.084 135.382) (width 0.254) (layer GND_layer) (net 156) (status 810))
+ (segment (start 164.084 135.382) (end 167.44 132.026) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 167.44 132.026) (end 167.44 116.767) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 167.44 116.767) (end 159.766 109.093) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 159.766 109.093) (end 159.766 91.821) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 159.766 91.821) (end 157.607 89.662) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 157.607 89.662) (end 157.099 89.662) (width 0.254) (layer GND_layer) (net 156))
+ (segment (start 133.3754 93.726) (end 133.4008 95.5294) (width 0.254) (layer Composant) (net 156) (status 810))
+ (segment (start 133.4008 95.5294) (end 133.35 96.012) (width 0.254) (layer Composant) (net 156))
+ (segment (start 157.099 89.662) (end 156.591 89.662) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 175.387 88.138) (end 173.101 88.138) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 176.022 88.773) (end 175.387 88.138) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 178.308 88.773) (end 176.022 88.773) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 137.795 91.44) (end 133.8675 95.3675) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 151.765 91.44) (end 137.795 91.44) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 152.527 90.678) (end 151.765 91.44) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 155.575 90.678) (end 152.527 90.678) (width 0.254) (layer Cuivre) (net 156))
+ (segment (start 133.8675 95.4945) (end 133.35 96.012) (width 0.2) (layer Cuivre) (net 156) (tstamp 53D8E5CE))
+ (segment (start 133.8675 95.3675) (end 133.8675 95.4945) (width 0.2) (layer Cuivre) (net 156))
+ (segment (start 174.244 139.446) (end 172.974 138.176) (width 0.254) (layer VDD_layer) (net 157) (status 810))
+ (segment (start 146.05 128.27) (end 143.383 125.603) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 165.735 128.27) (end 146.05 128.27) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 132.334 105.41) (end 131.826 104.902) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 172.974 138.176) (end 172.974 135.509) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 129.0574 103.9622) (end 127.635 103.9876) (width 0.254) (layer Composant) (net 157) (status 420))
+ (segment (start 129.286 104.14) (end 129.0574 103.9622) (width 0.254) (layer Composant) (net 157))
+ (segment (start 130.81 104.14) (end 129.286 104.14) (width 0.254) (layer Composant) (net 157))
+ (segment (start 131.191 104.521) (end 130.81 104.14) (width 0.254) (layer Composant) (net 157))
+ (segment (start 131.318 104.902) (end 131.191 104.521) (width 0.254) (layer Composant) (net 157))
+ (segment (start 172.974 135.509) (end 165.735 128.27) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 131.826 104.902) (end 131.318 104.902) (width 0.254) (layer VDD_layer) (net 157))
+ (via (at 131.318 104.902) (size 0.635) (layers Composant Cuivre) (net 157))
+ (segment (start 132.334 112.903) (end 132.334 105.41) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 134.239 114.808) (end 132.334 112.903) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 143.383 125.603) (end 137.414 125.603) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 137.414 125.603) (end 134.239 122.428) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 134.239 122.428) (end 134.239 114.808) (width 0.254) (layer VDD_layer) (net 157))
+ (segment (start 134.747 96.393) (end 134.747 95.504) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 134.112 97.028) (end 134.747 96.393) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 188.37402 108.02112) (end 188.88964 107.5055) (width 0.254) (layer Composant) (net 158))
+ (segment (start 188.88964 107.5055) (end 190.9445 107.5055) (width 0.254) (layer Composant) (net 158) (status 420))
+ (segment (start 178.689 106.934) (end 176.911 106.934) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 181.61 109.347) (end 187.04814 109.347) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 187.04814 109.347) (end 188.37402 108.02112) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 181.61 109.347) (end 181.102 109.347) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 159.258 92.71) (end 157.099 90.551) (width 0.254) (layer GND_layer) (net 158))
+ (via (at 188.37402 108.02112) (size 0.889) (layers Composant Cuivre) (net 158))
+ (via (at 181.61 109.347) (size 0.635) (layers Composant Cuivre) (net 158))
+ (via (at 157.099 90.551) (size 0.635) (layers Composant Cuivre) (net 158))
+ (via (at 177.038 89.408) (size 0.635) (layers Composant Cuivre) (net 158))
+ (via (at 134.112 97.028) (size 0.889) (layers Composant Cuivre) (net 158))
+ (segment (start 134.112 97.028) (end 134.112 95.631) (width 0.254) (layer Composant) (net 158))
+ (segment (start 134.747 95.504) (end 138.303 91.948) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 159.258 109.347) (end 159.258 92.71) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 166.932 117.021) (end 159.258 109.347) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 166.932 131.518) (end 166.932 117.021) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 161.544 136.906) (end 166.932 131.518) (width 0.254) (layer GND_layer) (net 158) (status 810))
+ (segment (start 133.8834 95.4024) (end 134.112 95.631) (width 0.254) (layer Composant) (net 158))
+ (segment (start 181.102 109.347) (end 178.689 106.934) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 133.8834 93.726) (end 133.8834 95.4024) (width 0.254) (layer Composant) (net 158) (status 810))
+ (segment (start 156.464 91.186) (end 157.099 90.551) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 152.781 91.186) (end 156.464 91.186) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 152.019 91.948) (end 152.781 91.186) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 138.303 91.948) (end 152.019 91.948) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 157.607 90.551) (end 157.099 90.551) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 159.512 88.646) (end 157.607 90.551) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 164.846 88.646) (end 159.512 88.646) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 165.481 89.281) (end 164.846 88.646) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 172.974 89.281) (end 165.481 89.281) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 173.609 88.646) (end 172.974 89.281) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 175.133 88.646) (end 173.609 88.646) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 175.895 89.408) (end 175.133 88.646) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 177.038 89.408) (end 175.895 89.408) (width 0.254) (layer Cuivre) (net 158))
+ (segment (start 174.752 91.694) (end 177.038 89.408) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 174.752 104.775) (end 174.752 91.694) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 176.911 106.934) (end 174.752 104.775) (width 0.254) (layer GND_layer) (net 158))
+ (segment (start 170.434 138.176) (end 171.704 139.446) (width 0.254) (layer VDD_layer) (net 159) (status 420))
+ (segment (start 131.826 113.919) (end 133.35 115.443) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 133.35 115.443) (end 133.35 122.809) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 133.35 122.809) (end 138.684 128.143) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 138.684 128.143) (end 143.51 128.143) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 143.51 128.143) (end 144.78 129.413) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 144.78 129.413) (end 163.576 129.413) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 163.576 129.413) (end 170.434 136.271) (width 0.254) (layer VDD_layer) (net 159))
+ (via (at 130.429 104.902) (size 0.635) (layers Composant Cuivre) (net 159))
+ (segment (start 131.445 105.664) (end 131.826 106.045) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 130.683 105.664) (end 131.445 105.664) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 130.429 105.41) (end 130.683 105.664) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 130.429 104.902) (end 130.429 105.41) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 130.048 104.648) (end 130.429 104.902) (width 0.254) (layer Composant) (net 159))
+ (segment (start 129.159 104.648) (end 130.048 104.648) (width 0.254) (layer Composant) (net 159))
+ (segment (start 128.9304 104.4702) (end 129.159 104.648) (width 0.254) (layer Composant) (net 159))
+ (segment (start 127.635 104.4702) (end 128.9304 104.4702) (width 0.254) (layer Composant) (net 159) (status 810))
+ (segment (start 170.434 136.271) (end 170.434 138.176) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 131.826 106.045) (end 131.826 113.919) (width 0.254) (layer VDD_layer) (net 159))
+ (segment (start 189.05728 104.34828) (end 187.9346 104.34828) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 157.226 87.884) (end 158.369 87.122) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 174.117 91.186) (end 174.117 105.537) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 187.9346 104.34828) (end 185.3311 106.95178) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 185.3311 106.95178) (end 179.324 106.95178) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 192.00368 108.5088) (end 192.00368 108.50626) (width 0.254) (layer Composant) (net 160))
+ (segment (start 192.00368 108.50626) (end 193.07556 108.50626) (width 0.254) (layer Composant) (net 160))
+ (segment (start 193.07556 108.50626) (end 193.12636 108.45546) (width 0.254) (layer Composant) (net 160))
+ (segment (start 190.9445 108.5088) (end 192.00368 108.5088) (width 0.254) (layer Composant) (net 160) (status 810))
+ (via (at 193.12636 108.45546) (size 0.889) (layers Composant Cuivre) (net 160))
+ (segment (start 193.12636 108.45546) (end 193.12636 108.41736) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 158.369 87.122) (end 165.227 87.122) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 165.227 87.122) (end 166.37 88.265) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 166.37 88.265) (end 171.704 88.265) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 171.704 88.265) (end 172.339 87.63) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 172.339 87.63) (end 173.355 87.63) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 173.355 87.63) (end 175.133 85.852) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 175.133 85.852) (end 176.53 85.852) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 176.53 85.852) (end 178.1175 87.4395) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 178.1175 87.4395) (end 178.1175 87.757) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 178.1175 87.757) (end 178.308 87.884) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 165.227 117.983) (end 158.75 111.506) (width 0.254) (layer GND_layer) (net 160) (status 810))
+ (segment (start 158.75 111.506) (end 158.75 93.345) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 158.75 93.345) (end 156.337 90.932) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 156.337 90.932) (end 156.337 89.408) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 156.337 89.408) (end 157.226 88.519) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 157.226 88.519) (end 157.226 87.884) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 133.673 94.673) (end 137.414 90.932) (width 0.254) (layer Cuivre) (net 160) (tstamp 53D8E5C7))
+ (segment (start 137.414 90.932) (end 151.511 90.932) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 151.511 90.932) (end 152.273 90.17) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 152.273 90.17) (end 155.321 90.17) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 155.321 90.17) (end 157.226 88.265) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 157.226 88.265) (end 157.226 87.884) (width 0.254) (layer Cuivre) (net 160))
+ (segment (start 165.227 117.983) (end 166.424 119.18) (width 0.254) (layer GND_layer) (net 160) (status 810))
+ (segment (start 166.424 119.18) (end 166.424 129.486) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 166.424 129.486) (end 159.004 136.906) (width 0.254) (layer GND_layer) (net 160) (status 420))
+ (via (at 178.308 87.884) (size 0.635) (layers Composant Cuivre) (net 160))
+ (via (at 157.226 87.884) (size 0.889) (layers Composant Cuivre) (net 160))
+ (segment (start 132.8674 95.0976) (end 132.588 95.25) (width 0.254) (layer Composant) (net 160))
+ (segment (start 132.8674 93.726) (end 132.8674 95.0976) (width 0.254) (layer Composant) (net 160) (status 810))
+ (via (at 132.588 95.25) (size 0.889) (layers Composant Cuivre) (net 160))
+ (segment (start 179.324 106.934) (end 179.324 106.95178) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 177.292 106.934) (end 179.324 106.934) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 176.657 106.299) (end 177.292 106.934) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 174.879 106.299) (end 176.657 106.299) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 174.625 106.045) (end 174.879 106.299) (width 0.254) (layer VDD_layer) (net 160))
+ (via (at 174.625 106.045) (size 0.889) (layers Composant Cuivre) (net 160))
+ (segment (start 174.117 105.537) (end 174.625 106.045) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 177.419 87.884) (end 174.117 91.186) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 178.308 87.884) (end 177.419 87.884) (width 0.254) (layer GND_layer) (net 160))
+ (segment (start 193.12636 108.41736) (end 189.05728 104.34828) (width 0.254) (layer VDD_layer) (net 160))
+ (segment (start 133.165 94.673) (end 132.588 95.25) (width 0.2) (layer Cuivre) (net 160) (tstamp 53D8E5C9))
+ (segment (start 133.673 94.673) (end 133.165 94.673) (width 0.2) (layer Cuivre) (net 160))
+ (segment (start 163.957 129.413) (end 163.957 119.253) (width 0.254) (layer GND_layer) (net 161))
+ (segment (start 137.16 90.424) (end 151.257 90.424) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 151.257 90.424) (end 152.019 89.662) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 133.604 93.98) (end 137.16 90.424) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 152.019 89.662) (end 155.067 89.662) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 155.067 89.662) (end 155.829 88.9) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 131.8768 93.726) (end 131.8768 94.361) (width 0.254) (layer Composant) (net 161) (status 810))
+ (via (at 131.826 96.393) (size 0.889) (layers Composant Cuivre) (net 161))
+ (segment (start 131.826 96.393) (end 131.826 94.742) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 162.687 116.586) (end 156.718 110.744) (width 0.254) (layer GND_layer) (net 161))
+ (segment (start 156.718 110.744) (end 156.718 92.075) (width 0.254) (layer GND_layer) (net 161))
+ (segment (start 156.718 92.075) (end 155.829 91.186) (width 0.254) (layer GND_layer) (net 161))
+ (segment (start 162.687 117.983) (end 162.687 116.586) (width 0.254) (layer GND_layer) (net 161) (status 810))
+ (segment (start 131.826 96.393) (end 131.826 94.361) (width 0.254) (layer Composant) (net 161))
+ (segment (start 155.829 88.138) (end 155.829 88.9) (width 0.254) (layer Cuivre) (net 161))
+ (via (at 155.829 88.138) (size 0.889) (layers Composant Cuivre) (net 161))
+ (segment (start 163.957 119.253) (end 162.687 117.983) (width 0.254) (layer GND_layer) (net 161) (status 420))
+ (segment (start 131.826 94.361) (end 131.8768 94.361) (width 0.254) (layer Composant) (net 161))
+ (segment (start 156.464 136.906) (end 163.957 129.413) (width 0.254) (layer GND_layer) (net 161) (status 810))
+ (segment (start 131.826 94.742) (end 132.588 93.98) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 132.588 93.98) (end 133.604 93.98) (width 0.254) (layer Cuivre) (net 161))
+ (segment (start 155.829 91.186) (end 155.829 88.138) (width 0.254) (layer GND_layer) (net 161))
+ (segment (start 160.274 108.839) (end 160.274 89.916) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 134.747 92.075) (end 132.461 92.075) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 156.21 86.36) (end 167.259 86.36) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 167.259 86.36) (end 167.513 86.106) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 167.513 86.106) (end 173.482 86.106) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 173.482 86.106) (end 174.625 84.963) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 174.625 84.963) (end 176.53 84.963) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 176.53 84.963) (end 177.673 86.106) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 177.673 86.106) (end 178.816 86.106) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 178.816 86.106) (end 179.197 86.487) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 179.197 86.487) (end 179.197 89.027) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 179.197 89.027) (end 177.8 90.424) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 177.8 90.424) (end 177.8 105.283) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 177.8 105.283) (end 178.054 105.664) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 132.3848 93.726) (end 132.3848 92.5576) (width 0.254) (layer Composant) (net 162) (status 810))
+ (segment (start 164.846 138.176) (end 165.354 137.668) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 132.3848 92.5576) (end 132.461 92.075) (width 0.254) (layer Composant) (net 162))
+ (via (at 180.721 111.45774) (size 0.889) (layers Composant Cuivre) (net 162))
+ (segment (start 136.906 89.916) (end 134.747 92.075) (width 0.254) (layer Cuivre) (net 162))
+ (via (at 154.813 87.757) (size 0.889) (layers Composant Cuivre) (net 162))
+ (via (at 179.197 86.487) (size 0.889) (layers Composant Cuivre) (net 162))
+ (via (at 178.054 105.664) (size 0.889) (layers Composant Cuivre) (net 162))
+ (via (at 132.461 92.075) (size 0.635) (layers Composant Cuivre) (net 162))
+ (segment (start 154.813 87.757) (end 154.813 89.027) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 165.354 137.668) (end 165.354 135.001) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 165.354 135.001) (end 168.656 131.699) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 168.656 131.699) (end 168.656 127.508) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 168.656 127.508) (end 169.926 126.238) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 169.926 126.238) (end 169.926 118.491) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 169.926 118.491) (end 160.274 108.839) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 155.194 138.176) (end 164.846 138.176) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 160.274 89.916) (end 159.004 88.646) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 153.924 136.906) (end 155.194 138.176) (width 0.254) (layer GND_layer) (net 162) (status 810))
+ (segment (start 180.721 108.331) (end 180.721 111.45774) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 154.813 89.027) (end 154.686 89.154) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 154.813 87.757) (end 154.813 86.995) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 159.004 87.884) (end 159.004 88.646) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 157.734 86.614) (end 159.004 87.884) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 155.194 86.614) (end 157.734 86.614) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 154.813 86.995) (end 155.194 86.614) (width 0.254) (layer GND_layer) (net 162))
+ (segment (start 154.813 87.757) (end 156.21 86.36) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 151.003 89.916) (end 136.906 89.916) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 151.765 89.154) (end 151.003 89.916) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 154.686 89.154) (end 151.765 89.154) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 190.9445 111.506) (end 189.88532 111.506) (width 0.254) (layer Composant) (net 162) (status 810))
+ (segment (start 178.054 105.664) (end 180.721 108.331) (width 0.254) (layer Cuivre) (net 162))
+ (segment (start 189.83706 111.45774) (end 189.88532 111.506) (width 0.254) (layer Composant) (net 162))
+ (segment (start 180.721 111.45774) (end 189.83706 111.45774) (width 0.254) (layer Composant) (net 162))
+ (segment (start 130.175 107.315) (end 130.048 107.188) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 130.175 107.315) (end 130.175 115.697) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 130.3782 107.7468) (end 130.048 107.188) (width 0.254) (layer Composant) (net 163))
+ (segment (start 130.3782 109.22) (end 130.3782 107.7468) (width 0.254) (layer Composant) (net 163) (status 810))
+ (segment (start 130.175 115.697) (end 131.699 117.221) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 160.274 138.176) (end 160.274 136.271) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 131.699 124.206) (end 131.699 117.221) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 139.319 131.826) (end 131.699 124.206) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 155.829 131.826) (end 139.319 131.826) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 160.274 136.271) (end 155.829 131.826) (width 0.254) (layer VDD_layer) (net 163))
+ (segment (start 161.544 139.446) (end 160.274 138.176) (width 0.254) (layer VDD_layer) (net 163) (status 810))
+ (via (at 130.048 107.188) (size 0.889) (layers Composant Cuivre) (net 163))
+ (segment (start 183.32196 106.61396) (end 189.33922 106.61396) (width 0.254) (layer Composant) (net 164))
+ (segment (start 182.45582 105.74782) (end 183.32196 106.61396) (width 0.254) (layer Composant) (net 164))
+ (segment (start 181.58714 105.74782) (end 182.45582 105.74782) (width 0.254) (layer Composant) (net 164))
+ (segment (start 180.76926 104.92994) (end 181.58714 105.74782) (width 0.254) (layer Composant) (net 164))
+ (segment (start 180.76926 104.85374) (end 180.76926 104.92994) (width 0.254) (layer Composant) (net 164))
+ (segment (start 181.61 104.013) (end 180.76926 104.85374) (width 0.254) (layer Composant) (net 164))
+ (segment (start 148.717 94.869) (end 149.098 94.488) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 149.098 94.488) (end 150.876 94.488) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 150.876 94.488) (end 151.257 94.869) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 151.257 94.869) (end 151.257 99.568) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 151.257 99.568) (end 150.033 100.792) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 150.033 100.792) (end 150.033 112.857) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 150.033 112.857) (end 148.209 114.681) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 148.209 114.681) (end 148.082 114.681) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 148.082 114.681) (end 145.796 116.967) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 145.796 116.967) (end 145.796 135.001) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 146.304 135.509) (end 146.304 136.906) (width 0.254) (layer GND_layer) (net 164) (status 420))
+ (segment (start 152.0825 93.853) (end 148.971 93.853) (width 0.381) (layer Composant) (net 164) (status 810))
+ (segment (start 148.463 94.361) (end 148.463 95.25) (width 0.381) (layer Composant) (net 164))
+ (segment (start 143.129 100.965) (end 147.066 100.965) (width 0.254) (layer Composant) (net 164) (status 810))
+ (segment (start 147.066 100.965) (end 147.701 100.33) (width 0.254) (layer Composant) (net 164))
+ (segment (start 147.701 100.33) (end 147.701 96.393) (width 0.254) (layer Composant) (net 164))
+ (segment (start 147.701 96.393) (end 148.463 95.631) (width 0.254) (layer Composant) (net 164))
+ (segment (start 148.463 95.631) (end 148.463 95.25) (width 0.254) (layer Composant) (net 164))
+ (via (at 148.463 95.25) (size 0.635) (layers Composant Cuivre) (net 164))
+ (via (at 179.959 91.059) (size 0.889) (layers Composant Cuivre) (net 164))
+ (segment (start 174.752 91.059) (end 175.133 90.678) (width 0.254) (layer Cuivre) (net 164))
+ (via (at 181.61 104.013) (size 0.635) (layers Composant Cuivre) (net 164))
+ (segment (start 145.796 135.001) (end 146.304 135.509) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 178.308 91.059) (end 179.959 91.059) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 148.971 93.853) (end 148.463 94.361) (width 0.381) (layer Composant) (net 164))
+ (segment (start 177.927 90.678) (end 178.308 91.059) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 175.133 90.678) (end 177.927 90.678) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 148.463 95.25) (end 148.717 94.869) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 165.1 91.059) (end 174.752 91.059) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 164.465 90.424) (end 165.1 91.059) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 160.02 90.424) (end 164.465 90.424) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 156.464 93.98) (end 160.02 90.424) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 149.225 93.98) (end 156.464 93.98) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 148.463 94.742) (end 149.225 93.98) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 148.463 95.25) (end 148.463 94.742) (width 0.254) (layer Cuivre) (net 164))
+ (segment (start 179.959 91.44) (end 179.959 91.059) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 180.975 92.456) (end 179.959 91.44) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 180.975 103.378) (end 180.975 92.456) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 181.61 104.013) (end 180.975 103.378) (width 0.254) (layer GND_layer) (net 164))
+ (segment (start 189.43828 106.5149) (end 190.9445 106.5149) (width 0.254) (layer Composant) (net 164) (status 420))
+ (segment (start 189.33922 106.61396) (end 189.43828 106.5149) (width 0.254) (layer Composant) (net 164))
+ (segment (start 128.905 109.22) (end 128.397 109.728) (width 0.254) (layer Composant) (net 165))
+ (segment (start 152.908 133.35) (end 155.194 135.636) (width 0.254) (layer Cuivre) (net 165))
+ (segment (start 137.414 133.35) (end 152.908 133.35) (width 0.254) (layer Cuivre) (net 165))
+ (segment (start 155.194 135.636) (end 155.194 138.176) (width 0.254) (layer Cuivre) (net 165))
+ (segment (start 128.397 113.665) (end 128.397 124.333) (width 0.254) (layer Cuivre) (net 165))
+ (segment (start 129.3876 109.22) (end 128.905 109.22) (width 0.254) (layer Composant) (net 165) (status 810))
+ (segment (start 155.194 138.176) (end 156.464 139.446) (width 0.254) (layer Cuivre) (net 165) (status 420))
+ (via (at 128.397 113.665) (size 0.889) (layers Composant Cuivre) (net 165))
+ (segment (start 128.397 124.333) (end 137.414 133.35) (width 0.254) (layer Cuivre) (net 165))
+ (segment (start 128.397 109.728) (end 128.397 113.665) (width 0.254) (layer Composant) (net 165))
+ (segment (start 143.764 136.906) (end 145.288 135.382) (width 0.254) (layer GND_layer) (net 166) (status 810))
+ (segment (start 142.494 98.933) (end 143.891 97.536) (width 0.254) (layer Cuivre) (net 166))
+ (segment (start 138.811 98.933) (end 142.494 98.933) (width 0.254) (layer Cuivre) (net 166))
+ (via (at 138.811 98.933) (size 0.889) (layers Composant Cuivre) (net 166))
+ (segment (start 147.955 114.173) (end 149.425 112.703) (width 0.254) (layer GND_layer) (net 166))
+ (segment (start 138.811 98.933) (end 140.3604 100.4824) (width 0.254) (layer Composant) (net 166))
+ (segment (start 168.783 107.823) (end 168.783 104.902) (width 0.4318) (layer Composant) (net 166) (status 10))
+ (segment (start 140.3604 100.4824) (end 141.2494 100.4824) (width 0.254) (layer Composant) (net 166))
+ (via (at 150.495 99.06) (size 0.635) (layers Composant Cuivre) (net 166))
+ (segment (start 176.149 108.077) (end 168.529 108.077) (width 0.4318) (layer Composant) (net 166) (status C30))
+ (segment (start 167.259 110.49) (end 168.275 109.474) (width 0.381) (layer Composant) (net 166))
+ (segment (start 167.259 115.57) (end 167.259 110.49) (width 0.381) (layer Composant) (net 166))
+ (segment (start 168.275 108.331) (end 168.529 108.077) (width 0.4318) (layer Composant) (net 166) (status 430))
+ (segment (start 168.275 109.474) (end 168.275 108.331) (width 0.4318) (layer Composant) (net 166) (status 20))
+ (segment (start 143.129 100.457) (end 141.2494 100.4824) (width 0.254) (layer Composant) (net 166) (status 810))
+ (segment (start 149.733 99.06) (end 150.495 99.06) (width 0.254) (layer Cuivre) (net 166))
+ (segment (start 148.209 97.536) (end 149.733 99.06) (width 0.254) (layer Cuivre) (net 166))
+ (segment (start 149.425 100.023) (end 150.495 99.06) (width 0.254) (layer GND_layer) (net 166))
+ (segment (start 147.701 114.173) (end 147.955 114.173) (width 0.254) (layer GND_layer) (net 166))
+ (segment (start 145.288 116.586) (end 147.701 114.173) (width 0.254) (layer GND_layer) (net 166))
+ (segment (start 168.529 108.077) (end 168.783 107.823) (width 0.4318) (layer Composant) (net 166) (status 830))
+ (segment (start 150.622 99.441) (end 150.495 99.06) (width 0.381) (layer Composant) (net 166))
+ (segment (start 150.876 99.695) (end 150.622 99.441) (width 0.381) (layer Composant) (net 166))
+ (segment (start 160.528 99.695) (end 150.876 99.695) (width 0.381) (layer Composant) (net 166))
+ (segment (start 163.449 96.774) (end 160.528 99.695) (width 0.381) (layer Composant) (net 166))
+ (segment (start 166.751 96.774) (end 163.449 96.774) (width 0.381) (layer Composant) (net 166))
+ (segment (start 167.259 97.282) (end 166.751 96.774) (width 0.381) (layer Composant) (net 166))
+ (segment (start 167.259 103.378) (end 167.259 97.282) (width 0.381) (layer Composant) (net 166))
+ (segment (start 168.783 104.902) (end 167.259 103.378) (width 0.381) (layer Composant) (net 166))
+ (segment (start 168.7195 117.0305) (end 167.259 115.57) (width 0.4318) (layer Composant) (net 166) (status 10))
+ (segment (start 168.7195 117.094) (end 168.7195 117.0305) (width 0.4318) (layer Composant) (net 166) (status 830))
+ (segment (start 145.288 135.382) (end 145.288 116.586) (width 0.254) (layer GND_layer) (net 166))
+ (segment (start 149.425 112.703) (end 149.425 100.023) (width 0.254) (layer GND_layer) (net 166))
+ (segment (start 143.891 97.536) (end 148.209 97.536) (width 0.254) (layer Cuivre) (net 166))
+ (segment (start 103.251 101.727) (end 103.251 103.886) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 102.235 103.886) (end 102.235 102.743) (width 0.381) (layer Composant) (net 167))
+ (segment (start 102.235 102.743) (end 103.378 101.6) (width 0.381) (layer Composant) (net 167))
+ (segment (start 103.378 101.6) (end 104.013 101.6) (width 0.381) (layer Composant) (net 167))
+ (segment (start 104.013 101.6) (end 103.378 101.6) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 103.378 101.6) (end 103.251 101.727) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 99.06 107.061) (end 102.235 103.886) (width 0.381) (layer Composant) (net 167))
+ (segment (start 103.251 103.886) (end 104.467 105.102) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 104.467 105.102) (end 104.467 138.122) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 104.467 138.122) (end 109.093 142.748) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 109.093 142.748) (end 140.462 142.748) (width 0.254) (layer GND_layer) (net 167))
+ (segment (start 140.462 142.748) (end 143.764 139.446) (width 0.254) (layer GND_layer) (net 167) (status 420))
+ (segment (start 127.635 100.4824) (end 128.905 100.457) (width 0.254) (layer Composant) (net 167) (status 810))
+ (segment (start 128.905 100.457) (end 130.048 99.314) (width 0.254) (layer Composant) (net 167))
+ (segment (start 130.048 95.25) (end 130.048 94.996) (width 0.254) (layer Cuivre) (net 167))
+ (segment (start 130.048 94.996) (end 126.238 91.186) (width 0.254) (layer Cuivre) (net 167))
+ (segment (start 126.238 91.186) (end 110.744 91.186) (width 0.254) (layer Cuivre) (net 167))
+ (segment (start 110.744 91.186) (end 108.966 92.964) (width 0.254) (layer Cuivre) (net 167))
+ (segment (start 130.048 99.314) (end 130.048 95.25) (width 0.254) (layer Composant) (net 167))
+ (segment (start 108.966 92.964) (end 108.966 97.155) (width 0.254) (layer Cuivre) (net 167))
+ (segment (start 108.966 97.155) (end 104.521 101.6) (width 0.254) (layer Cuivre) (net 167))
+ (segment (start 104.521 101.6) (end 104.013 101.6) (width 0.254) (layer Cuivre) (net 167))
+ (via (at 104.013 101.6) (size 0.635) (layers Composant Cuivre) (net 167))
+ (via (at 130.048 95.25) (size 0.635) (layers Composant Cuivre) (net 167))
+ (segment (start 99.06 114.808) (end 99.06 107.061) (width 0.381) (layer Composant) (net 167))
+ (segment (start 98.806 115.062) (end 99.06 114.808) (width 0.381) (layer Composant) (net 167))
+ (segment (start 97.409 115.062) (end 98.806 115.062) (width 0.381) (layer Composant) (net 167) (status 810))
+ (segment (start 129.159 95.25) (end 129.159 94.869) (width 0.254) (layer Cuivre) (net 168))
+ (segment (start 129.159 94.869) (end 125.984 91.694) (width 0.254) (layer Cuivre) (net 168))
+ (segment (start 125.984 91.694) (end 110.998 91.694) (width 0.254) (layer Cuivre) (net 168))
+ (segment (start 110.998 91.694) (end 109.474 93.218) (width 0.254) (layer Cuivre) (net 168))
+ (via (at 129.159 95.25) (size 0.635) (layers Composant Cuivre) (net 168))
+ (via (at 104.013 102.489) (size 0.635) (layers Composant Cuivre) (net 168))
+ (segment (start 104.775 102.489) (end 104.013 102.489) (width 0.381) (layer Composant) (net 168))
+ (segment (start 105.283 102.997) (end 104.775 102.489) (width 0.381) (layer Composant) (net 168))
+ (segment (start 105.283 115.062) (end 105.283 102.997) (width 0.381) (layer Composant) (net 168))
+ (segment (start 104.013 116.332) (end 105.283 115.062) (width 0.381) (layer Composant) (net 168))
+ (segment (start 102.743 116.332) (end 104.013 116.332) (width 0.381) (layer Composant) (net 168) (status 810))
+ (segment (start 128.7272 97.9678) (end 127.635 97.9678) (width 0.254) (layer Composant) (net 168) (status 420))
+ (segment (start 129.159 97.536) (end 128.7272 97.9678) (width 0.254) (layer Composant) (net 168))
+ (segment (start 104.394 102.743) (end 104.013 102.489) (width 0.254) (layer GND_layer) (net 168))
+ (segment (start 105.483 103.832) (end 104.394 102.743) (width 0.254) (layer GND_layer) (net 168))
+ (segment (start 105.483 137.614) (end 105.483 103.832) (width 0.254) (layer GND_layer) (net 168))
+ (segment (start 109.601 141.732) (end 105.483 137.614) (width 0.254) (layer GND_layer) (net 168))
+ (segment (start 136.398 141.732) (end 109.601 141.732) (width 0.254) (layer GND_layer) (net 168))
+ (segment (start 138.684 139.446) (end 136.398 141.732) (width 0.254) (layer GND_layer) (net 168) (status 810))
+ (segment (start 104.521 102.489) (end 104.013 102.489) (width 0.254) (layer Cuivre) (net 168))
+ (segment (start 109.474 97.536) (end 104.521 102.489) (width 0.254) (layer Cuivre) (net 168))
+ (segment (start 109.474 93.218) (end 109.474 97.536) (width 0.254) (layer Cuivre) (net 168))
+ (segment (start 129.159 95.25) (end 129.159 97.536) (width 0.254) (layer Composant) (net 168))
+ (segment (start 152.654 80.01) (end 149.86 82.804) (width 0.254) (layer Cuivre) (net 169))
+ (segment (start 186.436 105.918) (end 186.436 122.936) (width 0.254) (layer GND_layer) (net 169))
+ (segment (start 179.324 130.048) (end 186.436 122.936) (width 0.254) (layer GND_layer) (net 169))
+ (segment (start 183.134 77.089) (end 183.134 102.616) (width 0.254) (layer GND_layer) (net 169))
+ (segment (start 178.562 72.517) (end 183.134 77.089) (width 0.254) (layer GND_layer) (net 169))
+ (segment (start 174.117 72.517) (end 178.562 72.517) (width 0.254) (layer GND_layer) (net 169))
+ (segment (start 172.085 74.549) (end 174.117 72.517) (width 0.254) (layer GND_layer) (net 169) (status 810))
+ (segment (start 170.815 75.819) (end 172.085 74.549) (width 0.254) (layer Cuivre) (net 169) (status 420))
+ (segment (start 168.91 75.819) (end 170.815 75.819) (width 0.254) (layer Cuivre) (net 169))
+ (segment (start 164.719 80.01) (end 168.91 75.819) (width 0.254) (layer Cuivre) (net 169))
+ (segment (start 152.654 80.01) (end 164.719 80.01) (width 0.254) (layer Cuivre) (net 169))
+ (segment (start 145.669 94.742) (end 144.4498 95.9612) (width 0.254) (layer Composant) (net 169))
+ (via (at 149.86 84.201) (size 0.889) (layers Composant Cuivre) (net 169))
+ (segment (start 144.4498 95.9612) (end 143.129 95.9612) (width 0.254) (layer Composant) (net 169) (status 420))
+ (segment (start 149.86 82.804) (end 149.86 84.201) (width 0.254) (layer Cuivre) (net 169))
+ (segment (start 145.669 91.821) (end 145.669 94.742) (width 0.254) (layer Composant) (net 169))
+ (segment (start 183.134 102.616) (end 186.436 105.918) (width 0.254) (layer GND_layer) (net 169))
+ (segment (start 149.86 87.63) (end 145.669 91.821) (width 0.254) (layer Composant) (net 169))
+ (segment (start 149.86 84.201) (end 149.86 87.63) (width 0.254) (layer Composant) (net 169))
+ (segment (start 179.324 130.048) (end 179.324 136.906) (width 0.254) (layer GND_layer) (net 169) (status 420))
+ (segment (start 183.515 107.061) (end 183.515 122.047) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 178.943 90.805) (end 180.467 89.281) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 180.467 89.281) (end 180.467 77.216) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 180.467 77.216) (end 178.308 75.057) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 179.959 93.472) (end 178.943 92.456) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 179.959 102.362) (end 179.959 93.472) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 179.705 102.87) (end 179.959 102.362) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 197.28942 89.535) (end 197.485 89.535) (width 0.254) (layer VDD_layer) (net 170) (status 430))
+ (segment (start 183.95442 102.87) (end 197.28942 89.535) (width 0.254) (layer VDD_layer) (net 170) (status 20))
+ (segment (start 179.705 102.87) (end 183.95442 102.87) (width 0.254) (layer VDD_layer) (net 170))
+ (segment (start 180.24602 102.32898) (end 179.705 102.87) (width 0.254) (layer Composant) (net 170))
+ (segment (start 191.62522 102.32898) (end 180.24602 102.32898) (width 0.254) (layer Composant) (net 170))
+ (segment (start 194.91706 105.62082) (end 191.62522 102.32898) (width 0.254) (layer Composant) (net 170))
+ (segment (start 194.91706 110.12678) (end 194.91706 105.62082) (width 0.254) (layer Composant) (net 170))
+ (segment (start 190.9445 111.0107) (end 194.03314 111.0107) (width 0.254) (layer Composant) (net 170) (status 810))
+ (segment (start 194.03314 111.0107) (end 194.91706 110.12678) (width 0.254) (layer Composant) (net 170))
+ (segment (start 151.638 83.82) (end 151.511 83.947) (width 0.254) (layer Cuivre) (net 170))
+ (via (at 151.511 83.947) (size 0.889) (layers Composant Cuivre) (net 170))
+ (segment (start 151.511 83.947) (end 151.4475 83.8835) (width 0.254) (layer Composant) (net 170))
+ (segment (start 151.4475 83.8835) (end 150.8125 83.8835) (width 0.254) (layer Composant) (net 170))
+ (segment (start 152.4 83.82) (end 151.638 83.82) (width 0.254) (layer Cuivre) (net 170))
+ (via (at 179.705 102.87) (size 0.889) (layers Composant Cuivre) (net 170))
+ (segment (start 139.8905 92.3036) (end 139.827 91.948) (width 0.254) (layer Composant) (net 170))
+ (segment (start 139.827 91.948) (end 139.827 88.519) (width 0.254) (layer Composant) (net 170))
+ (segment (start 139.827 88.519) (end 140.208 88.138) (width 0.254) (layer Composant) (net 170))
+ (segment (start 140.208 88.138) (end 143.002 88.138) (width 0.254) (layer Composant) (net 170))
+ (segment (start 143.002 88.138) (end 143.383 87.757) (width 0.254) (layer Composant) (net 170))
+ (segment (start 143.383 87.757) (end 143.383 84.074) (width 0.254) (layer Composant) (net 170))
+ (segment (start 143.383 84.074) (end 144.145 83.312) (width 0.254) (layer Composant) (net 170))
+ (segment (start 144.145 83.312) (end 150.241 83.312) (width 0.254) (layer Composant) (net 170))
+ (segment (start 150.241 83.312) (end 150.8125 83.8835) (width 0.254) (layer Composant) (net 170))
+ (segment (start 139.8778 93.726) (end 139.8905 92.3036) (width 0.254) (layer Composant) (net 170) (status 810))
+ (segment (start 170.815 80.899) (end 165.862 80.899) (width 0.254) (layer Cuivre) (net 170))
+ (segment (start 164.973 81.788) (end 165.862 80.899) (width 0.254) (layer Cuivre) (net 170))
+ (segment (start 154.432 81.788) (end 164.973 81.788) (width 0.254) (layer Cuivre) (net 170))
+ (segment (start 152.4 83.82) (end 154.432 81.788) (width 0.254) (layer Cuivre) (net 170))
+ (segment (start 172.085 79.629) (end 170.815 80.899) (width 0.254) (layer Cuivre) (net 170) (status 810))
+ (segment (start 179.705 104.394) (end 179.705 102.87) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 181.102 105.791) (end 179.705 104.394) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 182.245 105.791) (end 181.102 105.791) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 183.515 107.061) (end 182.245 105.791) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 174.244 131.318) (end 183.515 122.047) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 174.244 131.318) (end 174.244 136.906) (width 0.254) (layer GND_layer) (net 170) (status 420))
+ (segment (start 176.657 75.057) (end 172.085 79.629) (width 0.254) (layer GND_layer) (net 170) (status 420))
+ (segment (start 178.308 75.057) (end 176.657 75.057) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 178.943 92.456) (end 178.943 90.805) (width 0.254) (layer GND_layer) (net 170))
+ (segment (start 106.091 102.662) (end 104.394 100.965) (width 0.254) (layer GND_layer) (net 171))
+ (segment (start 110.49 90.678) (end 108.458 92.71) (width 0.254) (layer Cuivre) (net 171))
+ (segment (start 122.428 90.678) (end 110.49 90.678) (width 0.254) (layer Cuivre) (net 171))
+ (segment (start 122.936 90.043) (end 122.428 90.678) (width 0.254) (layer Cuivre) (net 171))
+ (segment (start 121.412 91.821) (end 122.936 90.043) (width 0.254) (layer Composant) (net 171))
+ (segment (start 121.412 94.234) (end 121.412 91.821) (width 0.254) (layer Composant) (net 171))
+ (segment (start 125.1204 97.9424) (end 121.412 94.234) (width 0.254) (layer Composant) (net 171))
+ (segment (start 126.0856 97.9424) (end 125.1204 97.9424) (width 0.254) (layer Composant) (net 171))
+ (segment (start 126.619 98.4758) (end 126.0856 97.9424) (width 0.254) (layer Composant) (net 171))
+ (via (at 122.936 90.043) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 104.394 100.965) (end 104.013 100.711) (width 0.254) (layer GND_layer) (net 171))
+ (via (at 104.013 100.711) (size 0.635) (layers Composant Cuivre) (net 171))
+ (segment (start 105.029 100.711) (end 104.013 100.711) (width 0.381) (layer Composant) (net 171))
+ (segment (start 106.045 101.727) (end 105.029 100.711) (width 0.381) (layer Composant) (net 171))
+ (segment (start 106.045 118.237) (end 106.045 101.727) (width 0.381) (layer Composant) (net 171))
+ (segment (start 104.14 120.142) (end 106.045 118.237) (width 0.381) (layer Composant) (net 171))
+ (segment (start 102.743 120.142) (end 104.14 120.142) (width 0.381) (layer Composant) (net 171) (status 810))
+ (segment (start 108.458 96.266) (end 104.013 100.711) (width 0.254) (layer Cuivre) (net 171))
+ (segment (start 108.458 92.71) (end 108.458 96.266) (width 0.254) (layer Cuivre) (net 171))
+ (segment (start 106.091 137.46) (end 106.091 102.662) (width 0.254) (layer GND_layer) (net 171))
+ (segment (start 109.855 141.224) (end 106.091 137.46) (width 0.254) (layer GND_layer) (net 171))
+ (segment (start 134.366 141.224) (end 109.855 141.224) (width 0.254) (layer GND_layer) (net 171))
+ (segment (start 136.144 139.446) (end 134.366 141.224) (width 0.254) (layer GND_layer) (net 171) (status 810))
+ (segment (start 127.635 98.4758) (end 126.619 98.4758) (width 0.254) (layer Composant) (net 171) (status 810))
+ (segment (start 187.325 84.963) (end 193.929 78.359) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 141.351 84.836) (end 143.129 86.614) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 139.446 84.836) (end 141.351 84.836) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 139.065 85.217) (end 139.446 84.836) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 139.065 85.598) (end 139.065 85.217) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 131.064 135.89) (end 131.064 136.906) (width 0.254) (layer GND_layer) (net 172) (status 420))
+ (segment (start 129.413 134.239) (end 131.064 135.89) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 129.413 132.08) (end 129.413 134.239) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 127.127 90.9) (end 127.127 117.856) (width 0.254) (layer GND_layer) (net 172) (tstamp 53D8E5F9))
+ (segment (start 127.127 117.856) (end 128.27 118.999) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 143.129 86.614) (end 153.543 86.614) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 153.543 86.614) (end 155.194 84.963) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 155.194 84.963) (end 173.101 84.963) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 173.101 84.963) (end 174.117 83.947) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 177.419 83.947) (end 178.435 84.963) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 178.435 84.963) (end 187.325 84.963) (width 0.254) (layer Cuivre) (net 172))
+ (via (at 121.793 85.598) (size 0.889) (layers Composant Cuivre) (net 172))
+ (segment (start 139.065 86.106) (end 139.065 85.598) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 137.795 87.376) (end 139.065 86.106) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 122.428 87.376) (end 137.795 87.376) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 121.793 86.741) (end 122.428 87.376) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 121.793 85.598) (end 121.793 86.741) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 122.555 87.757) (end 123.957 87.757) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 121.793 86.995) (end 122.555 87.757) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 121.793 85.598) (end 121.793 86.995) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 128.27 118.999) (end 128.27 130.937) (width 0.254) (layer GND_layer) (net 172))
+ (segment (start 129.413 132.08) (end 128.27 130.937) (width 0.254) (layer GND_layer) (net 172))
+ (via (at 139.065 85.598) (size 0.635) (layers Composant Cuivre) (net 172))
+ (segment (start 139.065 86.741) (end 139.065 85.598) (width 0.254) (layer Composant) (net 172))
+ (segment (start 138.303 87.503) (end 139.065 86.741) (width 0.254) (layer Composant) (net 172))
+ (segment (start 138.303 91.948) (end 138.303 87.503) (width 0.254) (layer Composant) (net 172))
+ (segment (start 138.3919 92.3036) (end 138.303 91.948) (width 0.254) (layer Composant) (net 172))
+ (segment (start 138.3792 93.726) (end 138.3919 92.3036) (width 0.254) (layer Composant) (net 172) (status 810))
+ (segment (start 198.755 78.359) (end 200.025 77.089) (width 0.254) (layer Cuivre) (net 172) (status 420))
+ (segment (start 193.929 78.359) (end 198.755 78.359) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 174.117 83.947) (end 177.419 83.947) (width 0.254) (layer Cuivre) (net 172))
+ (segment (start 127.1 90.9) (end 123.957 87.757) (width 0.254) (layer GND_layer) (net 172) (tstamp 53D8E5FB))
+ (segment (start 127.127 90.9) (end 127.1 90.9) (width 0.254) (layer GND_layer) (net 172))
+ (via (at 120.269 85.598) (size 0.889) (layers Composant Cuivre) (net 173))
+ (via (at 139.954 85.598) (size 0.635) (layers Composant Cuivre) (net 173))
+ (segment (start 127.635 119.507) (end 127.635 131.699) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 120.904 87.884) (end 139.827 87.884) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 120.269 87.249) (end 120.904 87.884) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 120.269 85.598) (end 120.269 87.249) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 139.954 86.487) (end 140.589 87.122) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 139.954 85.598) (end 139.954 86.487) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 120.269 86.487) (end 120.269 85.598) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 122.174 88.392) (end 120.269 86.487) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 123.792 88.392) (end 122.174 88.392) (width 0.254) (layer GND_layer) (net 173) (tstamp 53D8E5F7))
+ (segment (start 166.751 85.598) (end 166.878 85.471) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 187.96 85.471) (end 192.405 81.026) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 173.355 85.471) (end 174.371 84.455) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 166.878 85.471) (end 173.355 85.471) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 139.827 87.884) (end 140.589 87.122) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 155.321 85.598) (end 166.751 85.598) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 153.797 87.122) (end 155.321 85.598) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 140.589 87.122) (end 153.797 87.122) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 128.778 132.842) (end 127.635 131.699) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 126.619 118.491) (end 126.619 91.2) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 126.619 118.491) (end 127.635 119.507) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 128.778 135.001) (end 128.778 132.842) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 129.794 136.017) (end 128.778 135.001) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 129.794 138.176) (end 129.794 136.017) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 131.064 139.446) (end 129.794 138.176) (width 0.254) (layer GND_layer) (net 173) (status 810))
+ (segment (start 139.954 86.741) (end 139.954 85.598) (width 0.254) (layer Composant) (net 173))
+ (segment (start 138.811 87.884) (end 139.954 86.741) (width 0.254) (layer Composant) (net 173))
+ (segment (start 138.811 91.948) (end 138.811 87.884) (width 0.254) (layer Composant) (net 173))
+ (segment (start 138.8872 92.3036) (end 138.811 91.948) (width 0.254) (layer Composant) (net 173))
+ (segment (start 138.8872 93.726) (end 138.8872 92.3036) (width 0.254) (layer Composant) (net 173) (status 810))
+ (segment (start 198.882 81.026) (end 200.025 82.169) (width 0.254) (layer Cuivre) (net 173) (status 420))
+ (segment (start 192.405 81.026) (end 198.882 81.026) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 174.371 84.455) (end 177.038 84.455) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 178.054 85.471) (end 187.96 85.471) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 177.038 84.455) (end 178.054 85.471) (width 0.254) (layer Cuivre) (net 173))
+ (segment (start 126.6 91.2) (end 123.792 88.392) (width 0.254) (layer GND_layer) (net 173) (tstamp 53D8E5F4))
+ (segment (start 126.619 91.2) (end 126.6 91.2) (width 0.254) (layer GND_layer) (net 173))
+ (segment (start 126.873 120.142) (end 126.873 132.715) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 123.063 93.98) (end 123.317 94.361) (width 0.254) (layer GND_layer) (net 174))
+ (via (at 123.063 93.98) (size 0.635) (layers Composant Cuivre) (net 174))
+ (segment (start 123.063 93.98) (end 123.063 92.329) (width 0.254) (layer Composant) (net 174))
+ (segment (start 126.111 119.38) (end 126.873 120.142) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 126.111 95.631) (end 126.111 119.38) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 125.222 94.742) (end 126.111 95.631) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 123.698 94.742) (end 125.222 94.742) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 123.317 94.361) (end 123.698 94.742) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 123.063 93.98) (end 123.19 94.488) (width 0.254) (layer Composant) (net 174))
+ (segment (start 123.19 94.488) (end 125.6792 96.9772) (width 0.254) (layer Composant) (net 174))
+ (segment (start 128.143 133.985) (end 126.873 132.715) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 125.6792 96.9772) (end 127.635 96.9772) (width 0.254) (layer Composant) (net 174) (status 420))
+ (segment (start 123.063 92.329) (end 128.651 86.741) (width 0.254) (layer Composant) (net 174))
+ (segment (start 128.651 86.741) (end 130.556 86.741) (width 0.254) (layer Composant) (net 174))
+ (segment (start 130.556 86.741) (end 133.985 83.312) (width 0.254) (layer Composant) (net 174))
+ (segment (start 133.985 83.312) (end 136.271 83.312) (width 0.254) (layer Composant) (net 174))
+ (segment (start 136.271 83.312) (end 137.033 82.55) (width 0.254) (layer Composant) (net 174))
+ (segment (start 137.033 82.55) (end 137.033 75.819) (width 0.254) (layer Composant) (net 174))
+ (segment (start 137.033 75.819) (end 138.303 74.549) (width 0.254) (layer Composant) (net 174) (status 420))
+ (segment (start 128.143 133.985) (end 128.143 135.382) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 128.524 135.763) (end 128.524 136.906) (width 0.254) (layer GND_layer) (net 174) (status 420))
+ (segment (start 128.143 135.382) (end 128.524 135.763) (width 0.254) (layer GND_layer) (net 174))
+ (segment (start 132.8928 108.1278) (end 132.842 107.823) (width 0.254) (layer Composant) (net 175))
+ (segment (start 132.8928 109.22) (end 132.8928 108.1278) (width 0.254) (layer Composant) (net 175) (status 810))
+ (segment (start 133.731 105.41) (end 134.112 105.156) (width 0.254) (layer Composant) (net 175))
+ (segment (start 123.444 136.906) (end 126.619 133.731) (width 0.254) (layer Cuivre) (net 175) (status 810))
+ (segment (start 126.619 133.731) (end 133.858 133.731) (width 0.254) (layer Cuivre) (net 175))
+ (segment (start 133.858 133.731) (end 134.493 134.366) (width 0.254) (layer Cuivre) (net 175))
+ (segment (start 134.493 134.366) (end 134.493 135.001) (width 0.254) (layer Cuivre) (net 175))
+ (segment (start 134.493 128.524) (end 131.953 125.984) (width 0.254) (layer GND_layer) (net 175))
+ (segment (start 131.953 125.984) (end 131.953 107.315) (width 0.254) (layer GND_layer) (net 175))
+ (segment (start 131.953 107.315) (end 133.223 106.045) (width 0.254) (layer GND_layer) (net 175))
+ (segment (start 133.223 106.045) (end 133.223 105.537) (width 0.254) (layer GND_layer) (net 175))
+ (segment (start 134.493 135.001) (end 134.493 128.524) (width 0.254) (layer GND_layer) (net 175))
+ (segment (start 133.223 105.537) (end 133.604 105.156) (width 0.254) (layer GND_layer) (net 175))
+ (segment (start 133.604 105.156) (end 134.112 105.156) (width 0.254) (layer GND_layer) (net 175))
+ (via (at 134.493 135.001) (size 0.635) (layers Composant Cuivre) (net 175))
+ (segment (start 132.842 106.299) (end 133.731 105.41) (width 0.254) (layer Composant) (net 175))
+ (segment (start 132.842 107.823) (end 132.842 106.299) (width 0.254) (layer Composant) (net 175))
+ (via (at 134.112 105.156) (size 0.635) (layers Composant Cuivre) (net 175))
+ (segment (start 134.3914 109.22) (end 134.3914 107.823) (width 0.254) (layer Composant) (net 176) (status 810))
+ (segment (start 134.62 132.715) (end 136.271 134.366) (width 0.254) (layer Cuivre) (net 176))
+ (segment (start 136.271 135.001) (end 136.271 128.778) (width 0.254) (layer GND_layer) (net 176))
+ (via (at 134.112 106.934) (size 0.635) (layers Composant Cuivre) (net 176))
+ (via (at 136.271 135.001) (size 0.635) (layers Composant Cuivre) (net 176))
+ (segment (start 134.3914 107.823) (end 134.112 106.934) (width 0.254) (layer Composant) (net 176))
+ (segment (start 136.271 128.778) (end 132.969 125.476) (width 0.254) (layer GND_layer) (net 176))
+ (segment (start 136.271 134.366) (end 136.271 135.001) (width 0.254) (layer Cuivre) (net 176))
+ (segment (start 125.095 132.715) (end 134.62 132.715) (width 0.254) (layer Cuivre) (net 176))
+ (segment (start 120.904 136.906) (end 125.095 132.715) (width 0.254) (layer Cuivre) (net 176) (status 810))
+ (segment (start 132.969 108.077) (end 134.112 106.934) (width 0.254) (layer GND_layer) (net 176))
+ (segment (start 132.969 125.476) (end 132.969 108.077) (width 0.254) (layer GND_layer) (net 176))
+ (segment (start 127.508 88.519) (end 126.873 89.154) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 107.95 92.456) (end 107.95 95.758) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 132.08 91.313) (end 132.08 89.535) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 132.08 89.535) (end 131.064 88.519) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 131.064 88.519) (end 127.508 88.519) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 126.873 89.154) (end 122.301 89.154) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 122.301 89.154) (end 121.285 90.17) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 121.285 90.17) (end 110.236 90.17) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 110.236 90.17) (end 107.95 92.456) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 107.95 95.758) (end 103.378 100.33) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 103.378 100.33) (end 102.87 100.711) (width 0.254) (layer Cuivre) (net 177))
+ (segment (start 118.364 136.906) (end 119.634 138.176) (width 0.254) (layer GND_layer) (net 177) (status 810))
+ (segment (start 119.634 138.176) (end 119.634 140.208) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 119.634 140.208) (end 119.126 140.716) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 119.126 140.716) (end 110.109 140.716) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 110.109 140.716) (end 106.699 137.306) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 106.699 137.306) (end 106.699 102) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 106.699 102) (end 104.648 99.949) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 104.648 99.949) (end 103.505 99.949) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 103.505 99.949) (end 102.87 100.584) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 102.87 100.584) (end 102.87 100.711) (width 0.254) (layer GND_layer) (net 177))
+ (segment (start 131.3688 93.726) (end 131.3688 92.5068) (width 0.254) (layer Composant) (net 177) (status 810))
+ (segment (start 131.3688 92.5068) (end 131.699 92.202) (width 0.254) (layer Composant) (net 177))
+ (segment (start 131.699 92.202) (end 131.699 91.694) (width 0.254) (layer Composant) (net 177))
+ (segment (start 131.699 91.694) (end 132.08 91.313) (width 0.254) (layer Composant) (net 177))
+ (segment (start 102.87 100.711) (end 102.2985 100.711) (width 0.381) (layer Composant) (net 177))
+ (segment (start 102.2985 100.711) (end 100.584 102.4255) (width 0.381) (layer Composant) (net 177) (status 420))
+ (via (at 102.87 100.711) (size 0.889) (layers Composant Cuivre) (net 177))
+ (via (at 132.08 91.313) (size 0.635) (layers Composant Cuivre) (net 177))
+ (segment (start 195.1863 100.7745) (end 195.1863 101.93368) (width 0.254) (layer Composant) (net 178) (status 810))
+ (segment (start 195.1863 101.93368) (end 192.92664 101.93368) (width 0.254) (layer Composant) (net 178))
+ (segment (start 192.92664 101.93368) (end 192.75552 101.76256) (width 0.254) (layer Composant) (net 178))
+ (segment (start 192.75552 101.76256) (end 192.75552 97.31248) (width 0.254) (layer Composant) (net 178))
+ (segment (start 192.75552 97.31248) (end 198.755 91.313) (width 0.254) (layer Composant) (net 178))
+ (segment (start 198.755 91.313) (end 198.755 88.265) (width 0.254) (layer Composant) (net 178))
+ (segment (start 198.755 88.265) (end 200.025 86.995) (width 0.254) (layer Composant) (net 178) (status 420))
+ (segment (start 200.025 89.535) (end 200.025 93.17482) (width 0.254) (layer Composant) (net 179) (status 810))
+ (segment (start 200.025 93.17482) (end 195.6816 97.51822) (width 0.254) (layer Composant) (net 179))
+ (segment (start 195.6816 97.51822) (end 195.6816 100.7745) (width 0.254) (layer Composant) (net 179) (status 420))
+ (segment (start 164.719 121.412) (end 165.227 120.523) (width 0.381) (layer Composant) (net 180) (status 420))
+ (segment (start 164.719 124.206) (end 164.719 121.412) (width 0.381) (layer Composant) (net 180) (status 10))
+ (segment (start 165.354 124.5235) (end 164.719 124.206) (width 0.381) (layer Composant) (net 180) (status 830))
+ (segment (start 162.687 120.523) (end 162.687 124.206) (width 0.381) (layer Composant) (net 181) (status 830))
+ (segment (start 162.687 124.206) (end 162.814 124.5235) (width 0.381) (layer Composant) (net 181) (status 430))
+ (segment (start 160.147 120.523) (end 160.147 124.3965) (width 0.4318) (layer Composant) (net 182) (status 830))
+ (segment (start 160.147 124.3965) (end 160.274 124.5235) (width 0.4318) (layer Composant) (net 182) (status 430))
+ (segment (start 157.607 120.523) (end 157.607 124.3965) (width 0.4318) (layer Composant) (net 183) (status 830))
+ (segment (start 157.607 124.3965) (end 157.734 124.5235) (width 0.4318) (layer Composant) (net 183) (status 430))
+ (segment (start 158.8135 89.154) (end 158.623 89.3445) (width 0.381) (layer Composant) (net 184) (status 430))
+ (segment (start 160.782 89.154) (end 158.8135 89.154) (width 0.381) (layer Composant) (net 184) (status 830))
+ (segment (start 161.925 88.392) (end 162.433 88.392) (width 0.381) (layer Composant) (net 185))
+ (segment (start 162.814 88.773) (end 162.814 90.043) (width 0.381) (layer Composant) (net 185) (status 420))
+ (segment (start 162.433 88.392) (end 162.814 88.773) (width 0.381) (layer Composant) (net 185))
+ (segment (start 160.5915 87.0585) (end 161.925 88.392) (width 0.381) (layer Composant) (net 185) (status 10))
+ (segment (start 160.5915 86.995) (end 160.5915 87.0585) (width 0.381) (layer Composant) (net 185) (status 830))
+ (segment (start 141.478 86.8045) (end 141.478 87.376) (width 0.254) (layer Composant) (net 186) (status 810))
+ (segment (start 141.351 87.503) (end 139.954 87.503) (width 0.254) (layer Composant) (net 186))
+ (segment (start 141.478 87.376) (end 141.351 87.503) (width 0.254) (layer Composant) (net 186))
+ (segment (start 139.3698 92.3036) (end 139.3698 93.726) (width 0.254) (layer Composant) (net 186) (status 420))
+ (segment (start 139.319 91.948) (end 139.3698 92.3036) (width 0.254) (layer Composant) (net 186))
+ (segment (start 139.319 88.138) (end 139.319 91.948) (width 0.254) (layer Composant) (net 186))
+ (segment (start 139.954 87.503) (end 139.319 88.138) (width 0.254) (layer Composant) (net 186))
+ (segment (start 164.211 86.995) (end 164.846 87.63) (width 0.381) (layer Composant) (net 187) (status 430))
+ (segment (start 162.4965 86.995) (end 164.211 86.995) (width 0.381) (layer Composant) (net 187) (status 830))
+ (segment (start 126.492 83.82) (end 126.492 80.137) (width 0.254) (layer Composant) (net 188) (status 10))
+ (segment (start 126.873 79.756) (end 128.27 79.756) (width 0.254) (layer Composant) (net 188) (status 420))
+ (segment (start 126.9365 84.455) (end 126.9365 84.2645) (width 0.254) (layer Composant) (net 188) (status 830))
+ (segment (start 126.9365 84.2645) (end 126.9365 84.0105) (width 0.254) (layer Composant) (net 188) (status 30))
+ (segment (start 133.477 79.629) (end 135.763 79.629) (width 0.254) (layer Composant) (net 188) (status 420))
+ (segment (start 126.9365 84.2645) (end 126.492 83.82) (width 0.254) (layer Composant) (net 188) (status 30))
+ (segment (start 127.889 83.058) (end 129.8 83.058) (width 0.254) (layer Composant) (net 188))
+ (segment (start 126.9365 84.0105) (end 127.889 83.058) (width 0.254) (layer Composant) (net 188) (status 10))
+ (segment (start 126.492 80.137) (end 126.873 79.756) (width 0.254) (layer Composant) (net 188))
+ (segment (start 129.842 83.058) (end 133.271 79.629) (width 0.254) (layer Composant) (net 188) (tstamp 53D8E61C))
+ (segment (start 133.271 79.629) (end 133.477 79.629) (width 0.254) (layer Composant) (net 188) (tstamp 53D8E61D))
+ (segment (start 129.8 83.058) (end 129.842 83.058) (width 0.254) (layer Composant) (net 188))
+ (segment (start 97.409 116.332) (end 94.9325 116.332) (width 0.381) (layer Composant) (net 189) (status 810))
+ (segment (start 94.9325 116.332) (end 94.1705 117.094) (width 0.381) (layer Composant) (net 189) (status 420))
+ (segment (start 192.532 81.3435) (end 191.0715 81.3435) (width 0.381) (layer Composant) (net 190) (status 810))
+ (segment (start 191.0715 81.3435) (end 190.754 81.026) (width 0.381) (layer Composant) (net 190))
+ (segment (start 197.485 79.629) (end 196.088 81.026) (width 0.381) (layer Composant) (net 190) (status 810))
+ (segment (start 196.088 81.026) (end 194.183 81.026) (width 0.381) (layer Composant) (net 190))
+ (segment (start 194.183 81.026) (end 193.8655 81.3435) (width 0.381) (layer Composant) (net 190))
+ (segment (start 190.754 81.026) (end 189.23 81.026) (width 0.381) (layer Composant) (net 190) (status 420))
+ (segment (start 193.8655 81.3435) (end 192.532 81.3435) (width 0.381) (layer Composant) (net 190) (status 420))
+ (segment (start 97.409 120.142) (end 95.1865 120.142) (width 0.4318) (layer Composant) (net 191) (status 810))
+ (segment (start 95.1865 120.142) (end 94.1705 121.158) (width 0.4318) (layer Composant) (net 191) (status 420))
+ (segment (start 99.314 122.428) (end 100.203 121.539) (width 0.381) (layer Composant) (net 192))
+ (segment (start 100.203 121.539) (end 100.203 118.491) (width 0.381) (layer Composant) (net 192))
+ (segment (start 94.1705 125.349) (end 95.377 125.349) (width 0.381) (layer Composant) (net 192) (status 810))
+ (segment (start 98.298 122.428) (end 99.314 122.428) (width 0.381) (layer Composant) (net 192))
+ (segment (start 101.092 117.602) (end 102.743 117.602) (width 0.381) (layer Composant) (net 192) (status 420))
+ (segment (start 100.203 118.491) (end 101.092 117.602) (width 0.381) (layer Composant) (net 192))
+ (segment (start 95.377 125.349) (end 98.298 122.428) (width 0.381) (layer Composant) (net 192))
+ (segment (start 102.743 121.793) (end 101.346 123.19) (width 0.381) (layer Composant) (net 193))
+ (segment (start 95.885 126.111) (end 95.885 127.762) (width 0.381) (layer Composant) (net 193))
+ (segment (start 95.885 127.762) (end 94.234 129.413) (width 0.381) (layer Composant) (net 193) (status 20))
+ (segment (start 98.806 123.19) (end 95.885 126.111) (width 0.381) (layer Composant) (net 193))
+ (segment (start 94.234 129.413) (end 94.1705 129.413) (width 0.381) (layer Composant) (net 193) (status 430))
+ (segment (start 102.743 121.412) (end 102.743 121.793) (width 0.381) (layer Composant) (net 193) (status 810))
+ (segment (start 101.346 123.19) (end 98.806 123.19) (width 0.381) (layer Composant) (net 193))
+ (segment (start 167.0685 81.3435) (end 164.592 81.3435) (width 0.4318) (layer Composant) (net 194) (status 420))
+ (segment (start 168.783 79.629) (end 167.0685 81.3435) (width 0.4318) (layer Composant) (net 194) (status 10))
+ (segment (start 169.545 79.629) (end 168.783 79.629) (width 0.4318) (layer Composant) (net 194) (status 830))
+ (segment (start 161.29 81.026) (end 164.2745 81.026) (width 0.4318) (layer Composant) (net 194) (status 830))
+ (segment (start 164.2745 81.026) (end 164.592 81.3435) (width 0.4318) (layer Composant) (net 194) (status 430))
+ (segment (start 100.9015 93.345) (end 100.9015 95.3135) (width 0.381) (layer Composant) (net 195) (status 810))
+ (segment (start 100.9015 95.3135) (end 100.457 95.758) (width 0.381) (layer Composant) (net 195) (status 420))
+ (segment (start 102.489 91.313) (end 100.9015 92.9005) (width 0.381) (layer Composant) (net 195) (status 20))
+ (segment (start 102.489 90.297) (end 102.489 91.313) (width 0.381) (layer Composant) (net 195))
+ (segment (start 100.9015 92.9005) (end 100.9015 93.345) (width 0.381) (layer Composant) (net 195) (status 430))
+ (segment (start 103.251 90.297) (end 102.489 90.297) (width 0.381) (layer Composant) (net 195) (status 810))
+ (segment (start 135.763 111.506) (end 135.76808 111.506) (width 0.254) (layer Composant) (net 196))
+ (segment (start 135.763 110.744) (end 135.763 111.506) (width 0.254) (layer Composant) (net 196))
+ (segment (start 135.89 109.22) (end 135.89 110.617) (width 0.254) (layer Composant) (net 196) (status 810))
+ (segment (start 135.89 110.617) (end 135.763 110.744) (width 0.254) (layer Composant) (net 196))
+ (segment (start 135.76808 111.506) (end 134.874 112.4585) (width 0.254) (layer Composant) (net 196) (status 420))
+ (segment (start 189.23 82.296) (end 197.358 82.296) (width 0.381) (layer Composant) (net 197) (status 830))
+ (segment (start 197.358 82.296) (end 197.485 82.169) (width 0.381) (layer Composant) (net 197) (status 430))
+ (segment (start 196.215 78.359) (end 198.247 78.359) (width 0.381) (layer Composant) (net 198))
+ (segment (start 198.755 77.851) (end 198.755 75.819) (width 0.381) (layer Composant) (net 198))
+ (segment (start 198.755 75.819) (end 197.485 74.549) (width 0.381) (layer Composant) (net 198) (status 420))
+ (segment (start 194.818 79.756) (end 196.215 78.359) (width 0.381) (layer Composant) (net 198))
+ (segment (start 189.23 79.756) (end 194.818 79.756) (width 0.381) (layer Composant) (net 198) (status 810))
+ (segment (start 198.247 78.359) (end 198.755 77.851) (width 0.381) (layer Composant) (net 198))
+ (segment (start 196.088 77.089) (end 197.485 77.089) (width 0.381) (layer Composant) (net 199) (status 420))
+ (segment (start 189.23 78.486) (end 194.691 78.486) (width 0.381) (layer Composant) (net 199) (status 810))
+ (segment (start 194.691 78.486) (end 196.088 77.089) (width 0.381) (layer Composant) (net 199))
+ (segment (start 169.418 82.296) (end 169.545 82.169) (width 0.4318) (layer Composant) (net 200) (status 430))
+ (segment (start 161.29 82.296) (end 169.418 82.296) (width 0.4318) (layer Composant) (net 200) (status 830))
+ (segment (start 169.545 74.549) (end 170.815 75.819) (width 0.381) (layer Composant) (net 201) (status 810))
+ (segment (start 170.307 78.359) (end 168.275 78.359) (width 0.381) (layer Composant) (net 201))
+ (segment (start 166.878 79.756) (end 161.29 79.756) (width 0.381) (layer Composant) (net 201) (status 420))
+ (segment (start 168.275 78.359) (end 166.878 79.756) (width 0.381) (layer Composant) (net 201))
+ (segment (start 170.815 77.851) (end 170.307 78.359) (width 0.381) (layer Composant) (net 201))
+ (segment (start 170.815 75.819) (end 170.815 77.851) (width 0.381) (layer Composant) (net 201))
+ (segment (start 168.148 77.089) (end 169.545 77.089) (width 0.381) (layer Composant) (net 202) (status 420))
+ (segment (start 166.751 78.486) (end 168.148 77.089) (width 0.381) (layer Composant) (net 202))
+ (segment (start 161.29 78.486) (end 166.751 78.486) (width 0.381) (layer Composant) (net 202) (status 810))
+ (segment (start 103.124 85.979) (end 103.251 86.106) (width 0.381) (layer Composant) (net 203))
+ (segment (start 103.251 86.106) (end 103.251 86.487) (width 0.381) (layer Composant) (net 203) (status 420))
+ (segment (start 103.124 84.582) (end 103.124 85.979) (width 0.381) (layer Composant) (net 203) (status 810))
+ (segment (start 134.874 77.089) (end 135.763 77.089) (width 0.254) (layer Composant) (net 204) (status 420))
+ (segment (start 128.27 82.296) (end 129.667 82.296) (width 0.254) (layer Composant) (net 204) (status 810))
+ (segment (start 129.667 82.296) (end 134.874 77.089) (width 0.254) (layer Composant) (net 204))
+ (segment (start 134.493 75.819) (end 135.763 74.549) (width 0.254) (layer Composant) (net 205) (status 420))
+ (segment (start 134.493 76.327) (end 134.493 75.819) (width 0.254) (layer Composant) (net 205))
+ (segment (start 129.794 81.026) (end 134.493 76.327) (width 0.254) (layer Composant) (net 205))
+ (segment (start 128.27 81.026) (end 129.794 81.026) (width 0.254) (layer Composant) (net 205) (status 810))
+ (segment (start 130.048 85.725) (end 133.985 81.788) (width 0.254) (layer Composant) (net 206))
+ (segment (start 125.476 85.344) (end 125.857 85.725) (width 0.254) (layer Composant) (net 206))
+ (segment (start 134.874 81.788) (end 135.763 82.169) (width 0.254) (layer Composant) (net 206) (status 420))
+ (segment (start 128.27 78.486) (end 126.111 78.486) (width 0.254) (layer Composant) (net 206) (status 810))
+ (segment (start 125.857 85.725) (end 130.048 85.725) (width 0.254) (layer Composant) (net 206))
+ (segment (start 133.985 81.788) (end 134.874 81.788) (width 0.254) (layer Composant) (net 206))
+ (segment (start 125.476 79.121) (end 125.476 85.344) (width 0.254) (layer Composant) (net 206))
+ (segment (start 126.111 78.486) (end 125.476 79.121) (width 0.254) (layer Composant) (net 206))
+ (segment (start 191.897 65.405) (end 191.897 68.58) (width 0.4318) (layer Cuivre) (net 207) (status 420))
+ (segment (start 183.642 67.437) (end 185.039 66.04) (width 0.4318) (layer Composant) (net 207) (status 420))
+ (segment (start 183.642 68.58) (end 183.642 67.437) (width 0.4318) (layer Composant) (net 207) (status 810))
+ (segment (start 185.039 66.04) (end 185.166 66.04) (width 0.4318) (layer Cuivre) (net 207) (status 830))
+ (segment (start 185.166 66.04) (end 186.69 64.516) (width 0.4318) (layer Cuivre) (net 207) (status 10))
+ (segment (start 186.69 64.516) (end 191.008 64.516) (width 0.4318) (layer Cuivre) (net 207))
+ (segment (start 191.008 64.516) (end 191.897 65.405) (width 0.4318) (layer Cuivre) (net 207))
+ (segment (start 158.369 64.897) (end 157.734 64.262) (width 0.381) (layer Cuivre) (net 208))
+ (segment (start 158.369 68.58) (end 158.369 64.897) (width 0.381) (layer Cuivre) (net 208) (status 810))
+ (segment (start 150.114 68.58) (end 150.114 67.437) (width 0.381) (layer Composant) (net 208) (status 810))
+ (segment (start 157.734 64.262) (end 150.876 64.262) (width 0.381) (layer Cuivre) (net 208))
+ (segment (start 150.114 67.437) (end 151.511 66.04) (width 0.381) (layer Composant) (net 208) (status 420))
+ (segment (start 150.876 64.262) (end 149.987 65.151) (width 0.381) (layer Cuivre) (net 208))
+ (segment (start 149.987 65.151) (end 149.987 68.453) (width 0.381) (layer Cuivre) (net 208) (status 20))
+ (segment (start 149.987 68.453) (end 150.114 68.58) (width 0.381) (layer Cuivre) (net 208) (status 430))
+ (segment (start 117.983 66.04) (end 117.983 67.183) (width 0.381) (layer Cuivre) (net 209) (status 810))
+ (segment (start 124.841 68.58) (end 124.841 65.151) (width 0.381) (layer Cuivre) (net 209) (status 810))
+ (segment (start 124.206 64.516) (end 119.507 64.516) (width 0.381) (layer Cuivre) (net 209))
+ (segment (start 117.983 67.183) (end 116.586 68.58) (width 0.381) (layer Cuivre) (net 209) (status 420))
+ (segment (start 119.507 64.516) (end 117.983 66.04) (width 0.381) (layer Cuivre) (net 209) (status 420))
+ (segment (start 124.841 65.151) (end 124.206 64.516) (width 0.381) (layer Cuivre) (net 209))
+
+ (zone (net 104) (net_name VDD) (layer VDD_layer) (tstamp 4783A2CD) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 227.965 146.05) (xy 227.965 60.96) (xy 215.9 60.96) (xy 215.9 64.135) (xy 105.41 64.135)
+ (xy 105.41 74.93) (xy 72.39 74.93) (xy 72.39 146.05)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 227.7745 145.923) (xy 72.517 145.923) (xy 72.517 141.208935) (xy 88.328291 141.208935) (xy 88.511582 141.652535)
+ (xy 88.85068 141.992225) (xy 89.293959 142.17629) (xy 89.773935 142.176709) (xy 90.217535 141.993418) (xy 90.557225 141.65432)
+ (xy 90.74129 141.211041) (xy 90.741709 140.731065) (xy 90.558418 140.287465) (xy 90.30337 140.031971) (xy 99.929821 140.031971)
+ (xy 100.087058 140.412515) (xy 100.377954 140.703919) (xy 100.758223 140.86182) (xy 101.169971 140.862179) (xy 101.550515 140.704942)
+ (xy 101.841919 140.414046) (xy 101.99982 140.033777) (xy 102.000091 139.722661) (xy 109.346758 139.722661) (xy 109.55899 140.236303)
+ (xy 109.95163 140.629629) (xy 110.4649 140.842757) (xy 111.020661 140.843242) (xy 111.534303 140.63101) (xy 111.927629 140.23837)
+ (xy 112.013949 140.030488) (xy 112.09899 140.236303) (xy 112.49163 140.629629) (xy 113.0049 140.842757) (xy 113.560661 140.843242)
+ (xy 114.074303 140.63101) (xy 114.467629 140.23837) (xy 114.553949 140.030488) (xy 114.63899 140.236303) (xy 115.03163 140.629629)
+ (xy 115.5449 140.842757) (xy 116.100661 140.843242) (xy 116.614303 140.63101) (xy 117.007629 140.23837) (xy 117.093949 140.030488)
+ (xy 117.17899 140.236303) (xy 117.57163 140.629629) (xy 118.0849 140.842757) (xy 118.640661 140.843242) (xy 119.154303 140.63101)
+ (xy 119.547629 140.23837) (xy 119.633949 140.030488) (xy 119.71899 140.236303) (xy 120.11163 140.629629) (xy 120.6249 140.842757)
+ (xy 121.180661 140.843242) (xy 121.694303 140.63101) (xy 122.087629 140.23837) (xy 122.173949 140.030488) (xy 122.25899 140.236303)
+ (xy 122.65163 140.629629) (xy 123.1649 140.842757) (xy 123.720661 140.843242) (xy 124.234303 140.63101) (xy 124.627629 140.23837)
+ (xy 124.713949 140.030488) (xy 124.79899 140.236303) (xy 125.19163 140.629629) (xy 125.7049 140.842757) (xy 126.260661 140.843242)
+ (xy 126.774303 140.63101) (xy 127.167629 140.23837) (xy 127.253949 140.030488) (xy 127.33899 140.236303) (xy 127.73163 140.629629)
+ (xy 128.2449 140.842757) (xy 128.800661 140.843242) (xy 129.314303 140.63101) (xy 129.707629 140.23837) (xy 129.793949 140.030488)
+ (xy 129.87899 140.236303) (xy 130.27163 140.629629) (xy 130.7849 140.842757) (xy 131.340661 140.843242) (xy 131.854303 140.63101)
+ (xy 132.247629 140.23837) (xy 132.333949 140.030488) (xy 132.41899 140.236303) (xy 132.81163 140.629629) (xy 133.3249 140.842757)
+ (xy 133.880661 140.843242) (xy 134.394303 140.63101) (xy 134.787629 140.23837) (xy 134.873949 140.030488) (xy 134.95899 140.236303)
+ (xy 135.35163 140.629629) (xy 135.8649 140.842757) (xy 136.420661 140.843242) (xy 136.934303 140.63101) (xy 137.327629 140.23837)
+ (xy 137.413949 140.030488) (xy 137.49899 140.236303) (xy 137.89163 140.629629) (xy 138.4049 140.842757) (xy 138.960661 140.843242)
+ (xy 139.474303 140.63101) (xy 139.867629 140.23837) (xy 139.953949 140.030488) (xy 140.03899 140.236303) (xy 140.43163 140.629629)
+ (xy 140.9449 140.842757) (xy 141.500661 140.843242) (xy 142.014303 140.63101) (xy 142.407629 140.23837) (xy 142.493949 140.030488)
+ (xy 142.57899 140.236303) (xy 142.97163 140.629629) (xy 143.4849 140.842757) (xy 144.040661 140.843242) (xy 144.554303 140.63101)
+ (xy 144.947629 140.23837) (xy 145.033949 140.030488) (xy 145.11899 140.236303) (xy 145.51163 140.629629) (xy 146.0249 140.842757)
+ (xy 146.580661 140.843242) (xy 147.094303 140.63101) (xy 147.487629 140.23837) (xy 147.573949 140.030488) (xy 147.65899 140.236303)
+ (xy 148.05163 140.629629) (xy 148.5649 140.842757) (xy 149.120661 140.843242) (xy 149.634303 140.63101) (xy 150.027629 140.23837)
+ (xy 150.113949 140.030488) (xy 150.19899 140.236303) (xy 150.59163 140.629629) (xy 151.1049 140.842757) (xy 151.660661 140.843242)
+ (xy 152.174303 140.63101) (xy 152.567629 140.23837) (xy 152.653949 140.030488) (xy 152.73899 140.236303) (xy 153.13163 140.629629)
+ (xy 153.6449 140.842757) (xy 154.200661 140.843242) (xy 154.714303 140.63101) (xy 155.107629 140.23837) (xy 155.193949 140.030488)
+ (xy 155.27899 140.236303) (xy 155.67163 140.629629) (xy 156.1849 140.842757) (xy 156.740661 140.843242) (xy 157.254303 140.63101)
+ (xy 157.647629 140.23837) (xy 157.733949 140.030488) (xy 157.81899 140.236303) (xy 158.21163 140.629629) (xy 158.7249 140.842757)
+ (xy 159.280661 140.843242) (xy 159.794303 140.63101) (xy 160.187629 140.23837) (xy 160.273949 140.030488) (xy 160.35899 140.236303)
+ (xy 160.75163 140.629629) (xy 161.2649 140.842757) (xy 161.820661 140.843242) (xy 162.334303 140.63101) (xy 162.727629 140.23837)
+ (xy 162.813949 140.030488) (xy 162.89899 140.236303) (xy 163.29163 140.629629) (xy 163.8049 140.842757) (xy 164.360661 140.843242)
+ (xy 164.874303 140.63101) (xy 165.267629 140.23837) (xy 165.353949 140.030488) (xy 165.43899 140.236303) (xy 165.83163 140.629629)
+ (xy 166.3449 140.842757) (xy 166.900661 140.843242) (xy 166.931054 140.830684) (xy 168.244185 142.143815) (xy 168.491395 142.308996)
+ (xy 168.783 142.367) (xy 176.911 142.367) (xy 177.202605 142.308996) (xy 177.449815 142.143815) (xy 178.592815 141.000815)
+ (xy 178.757996 140.753605) (xy 178.763504 140.725912) (xy 179.0449 140.842757) (xy 179.600661 140.843242) (xy 180.114303 140.63101)
+ (xy 180.507629 140.23837) (xy 180.593949 140.030488) (xy 180.67899 140.236303) (xy 181.07163 140.629629) (xy 181.5849 140.842757)
+ (xy 182.140661 140.843242) (xy 182.654303 140.63101) (xy 183.047629 140.23837) (xy 183.133949 140.030488) (xy 183.21899 140.236303)
+ (xy 183.61163 140.629629) (xy 184.1249 140.842757) (xy 184.680661 140.843242) (xy 185.194303 140.63101) (xy 185.587629 140.23837)
+ (xy 185.800757 139.7251) (xy 185.801242 139.169339) (xy 185.58901 138.655697) (xy 185.236167 138.302237) (xy 185.401317 138.271162)
+ (xy 185.617441 138.13209) (xy 185.762431 137.91989) (xy 185.81344 137.668) (xy 185.81344 136.144) (xy 185.769162 135.908683)
+ (xy 185.63009 135.692559) (xy 185.494938 135.600213) (xy 206.209392 135.600213) (xy 206.278857 135.842397) (xy 206.802302 136.029144)
+ (xy 207.357368 136.001362) (xy 207.741143 135.842397) (xy 207.810608 135.600213) (xy 207.01 134.799605) (xy 206.209392 135.600213)
+ (xy 185.494938 135.600213) (xy 185.41789 135.547569) (xy 185.166 135.49656) (xy 183.642 135.49656) (xy 183.406683 135.540838)
+ (xy 183.190559 135.67991) (xy 183.045569 135.89211) (xy 183.008508 136.075124) (xy 182.65637 135.722371) (xy 182.1431 135.509243)
+ (xy 181.587339 135.508758) (xy 181.073697 135.72099) (xy 180.680371 136.11363) (xy 180.594051 136.321512) (xy 180.50901 136.115697)
+ (xy 180.11637 135.722371) (xy 179.6031 135.509243) (xy 179.047339 135.508758) (xy 178.816 135.604345) (xy 178.816 134.412302)
+ (xy 205.600856 134.412302) (xy 205.628638 134.967368) (xy 205.787603 135.351143) (xy 206.029787 135.420608) (xy 206.830395 134.62)
+ (xy 207.189605 134.62) (xy 207.990213 135.420608) (xy 208.232397 135.351143) (xy 208.419144 134.827698) (xy 208.391362 134.272632)
+ (xy 208.232397 133.888857) (xy 207.990213 133.819392) (xy 207.189605 134.62) (xy 206.830395 134.62) (xy 206.029787 133.819392)
+ (xy 205.787603 133.888857) (xy 205.600856 134.412302) (xy 178.816 134.412302) (xy 178.816 133.639787) (xy 206.209392 133.639787)
+ (xy 207.01 134.440395) (xy 207.810608 133.639787) (xy 207.741143 133.397603) (xy 207.217698 133.210856) (xy 206.662632 133.238638)
+ (xy 206.278857 133.397603) (xy 206.209392 133.639787) (xy 178.816 133.639787) (xy 178.816 133.604) (xy 178.757996 133.312395)
+ (xy 178.592815 133.065185) (xy 176.11538 130.58775) (xy 180.467 130.58775) (xy 180.467 131.19031) (xy 180.563673 131.423699)
+ (xy 180.742302 131.602327) (xy 180.975691 131.699) (xy 181.57825 131.699) (xy 181.737 131.54025) (xy 181.737 130.429)
+ (xy 180.62575 130.429) (xy 180.467 130.58775) (xy 176.11538 130.58775) (xy 174.94132 129.41369) (xy 180.467 129.41369)
+ (xy 180.467 130.01625) (xy 180.62575 130.175) (xy 181.737 130.175) (xy 181.737 129.06375) (xy 181.991 129.06375)
+ (xy 181.991 130.175) (xy 182.011 130.175) (xy 182.011 130.429) (xy 181.991 130.429) (xy 181.991 131.54025)
+ (xy 182.14975 131.699) (xy 182.752309 131.699) (xy 182.985698 131.602327) (xy 183.164327 131.423699) (xy 183.261 131.19031)
+ (xy 183.261 131.134386) (xy 183.61163 131.485629) (xy 184.1249 131.698757) (xy 184.680661 131.699242) (xy 185.194303 131.48701)
+ (xy 185.587629 131.09437) (xy 185.800757 130.5811) (xy 185.801242 130.025339) (xy 185.58901 129.511697) (xy 185.19637 129.118371)
+ (xy 184.6831 128.905243) (xy 184.127339 128.904758) (xy 183.613697 129.11699) (xy 183.261 129.469072) (xy 183.261 129.41369)
+ (xy 183.164327 129.180301) (xy 182.985698 129.001673) (xy 182.752309 128.905) (xy 182.14975 128.905) (xy 181.991 129.06375)
+ (xy 181.737 129.06375) (xy 181.57825 128.905) (xy 180.975691 128.905) (xy 180.742302 129.001673) (xy 180.563673 129.180301)
+ (xy 180.467 129.41369) (xy 174.94132 129.41369) (xy 171.979414 126.451784) (xy 205.422313 126.451784) (xy 205.586311 126.848689)
+ (xy 205.889714 127.152622) (xy 206.286332 127.317313) (xy 206.715784 127.317687) (xy 207.112689 127.153689) (xy 207.416622 126.850286)
+ (xy 207.581313 126.453668) (xy 207.581687 126.024216) (xy 207.417689 125.627311) (xy 207.264 125.473354) (xy 207.264 125.41063)
+ (xy 208.152905 124.521725) (xy 208.288518 124.849935) (xy 208.579414 125.141339) (xy 208.959683 125.29924) (xy 208.993718 125.29927)
+ (xy 208.993553 125.489124) (xy 209.157551 125.886029) (xy 209.460954 126.189962) (xy 209.857572 126.354653) (xy 210.287024 126.355027)
+ (xy 210.683929 126.191029) (xy 210.987862 125.887626) (xy 211.152553 125.491008) (xy 211.152927 125.061556) (xy 210.988929 124.664651)
+ (xy 210.685526 124.360718) (xy 210.288908 124.196027) (xy 210.20152 124.195951) (xy 210.201639 124.059449) (xy 210.157242 123.952)
+ (xy 220.94829 123.952) (xy 220.853243 124.1809) (xy 220.852758 124.736661) (xy 221.06499 125.250303) (xy 221.45763 125.643629)
+ (xy 221.665512 125.729949) (xy 221.459697 125.81499) (xy 221.066371 126.20763) (xy 220.853243 126.7209) (xy 220.852758 127.276661)
+ (xy 221.06499 127.790303) (xy 221.45763 128.183629) (xy 221.665512 128.269949) (xy 221.459697 128.35499) (xy 221.066371 128.74763)
+ (xy 220.853243 129.2609) (xy 220.852758 129.816661) (xy 221.06499 130.330303) (xy 221.45763 130.723629) (xy 221.665512 130.809949)
+ (xy 221.459697 130.89499) (xy 221.066371 131.28763) (xy 220.853243 131.8009) (xy 220.852758 132.356661) (xy 221.06499 132.870303)
+ (xy 221.45763 133.263629) (xy 221.665512 133.349949) (xy 221.459697 133.43499) (xy 221.066371 133.82763) (xy 220.853243 134.3409)
+ (xy 220.852758 134.896661) (xy 220.948345 135.128) (xy 218.755631 135.128) (xy 218.555013 134.927382) (xy 218.566757 134.8991)
+ (xy 218.567242 134.343339) (xy 218.35501 133.829697) (xy 217.96237 133.436371) (xy 217.4491 133.223243) (xy 216.893339 133.222758)
+ (xy 216.379697 133.43499) (xy 215.986371 133.82763) (xy 215.773243 134.3409) (xy 215.772758 134.896661) (xy 215.98499 135.410303)
+ (xy 216.37763 135.803629) (xy 216.8909 136.016757) (xy 217.446661 136.017242) (xy 217.477053 136.004684) (xy 217.901184 136.428815)
+ (xy 218.011221 136.502339) (xy 218.148395 136.593996) (xy 218.44 136.652) (xy 220.94829 136.652) (xy 220.853243 136.8809)
+ (xy 220.852758 137.436661) (xy 221.06499 137.950303) (xy 221.45763 138.343629) (xy 221.9709 138.556757) (xy 222.526661 138.557242)
+ (xy 223.040303 138.34501) (xy 223.433629 137.95237) (xy 223.519949 137.744488) (xy 223.60499 137.950303) (xy 223.99763 138.343629)
+ (xy 224.5109 138.556757) (xy 225.066661 138.557242) (xy 225.580303 138.34501) (xy 225.973629 137.95237) (xy 226.186757 137.4391)
+ (xy 226.187242 136.883339) (xy 225.97501 136.369697) (xy 225.58237 135.976371) (xy 225.374488 135.890051) (xy 225.580303 135.80501)
+ (xy 225.973629 135.41237) (xy 226.186757 134.8991) (xy 226.187242 134.343339) (xy 225.97501 133.829697) (xy 225.58237 133.436371)
+ (xy 225.374488 133.350051) (xy 225.580303 133.26501) (xy 225.973629 132.87237) (xy 226.186757 132.3591) (xy 226.187242 131.803339)
+ (xy 225.97501 131.289697) (xy 225.58237 130.896371) (xy 225.374488 130.810051) (xy 225.580303 130.72501) (xy 225.973629 130.33237)
+ (xy 226.186757 129.8191) (xy 226.187242 129.263339) (xy 225.97501 128.749697) (xy 225.58237 128.356371) (xy 225.374488 128.270051)
+ (xy 225.580303 128.18501) (xy 225.973629 127.79237) (xy 226.186757 127.2791) (xy 226.187242 126.723339) (xy 225.97501 126.209697)
+ (xy 225.58237 125.816371) (xy 225.374488 125.730051) (xy 225.580303 125.64501) (xy 225.973629 125.25237) (xy 226.186757 124.7391)
+ (xy 226.187242 124.183339) (xy 225.97501 123.669697) (xy 225.58237 123.276371) (xy 225.374488 123.190051) (xy 225.580303 123.10501)
+ (xy 225.973629 122.71237) (xy 226.186757 122.1991) (xy 226.187242 121.643339) (xy 225.97501 121.129697) (xy 225.58237 120.736371)
+ (xy 225.374488 120.650051) (xy 225.580303 120.56501) (xy 225.973629 120.17237) (xy 226.186757 119.6591) (xy 226.187242 119.103339)
+ (xy 225.97501 118.589697) (xy 225.58237 118.196371) (xy 225.374488 118.110051) (xy 225.580303 118.02501) (xy 225.973629 117.63237)
+ (xy 226.186757 117.1191) (xy 226.187242 116.563339) (xy 225.97501 116.049697) (xy 225.58237 115.656371) (xy 225.374488 115.570051)
+ (xy 225.580303 115.48501) (xy 225.973629 115.09237) (xy 226.186757 114.5791) (xy 226.187242 114.023339) (xy 225.97501 113.509697)
+ (xy 225.58237 113.116371) (xy 225.374488 113.030051) (xy 225.580303 112.94501) (xy 225.973629 112.55237) (xy 226.186757 112.0391)
+ (xy 226.187242 111.483339) (xy 225.97501 110.969697) (xy 225.58237 110.576371) (xy 225.374488 110.490051) (xy 225.580303 110.40501)
+ (xy 225.973629 110.01237) (xy 226.186757 109.4991) (xy 226.187242 108.943339) (xy 225.97501 108.429697) (xy 225.58237 108.036371)
+ (xy 225.374488 107.950051) (xy 225.580303 107.86501) (xy 225.973629 107.47237) (xy 226.186757 106.9591) (xy 226.187242 106.403339)
+ (xy 225.97501 105.889697) (xy 225.58237 105.496371) (xy 225.374488 105.410051) (xy 225.580303 105.32501) (xy 225.973629 104.93237)
+ (xy 226.186757 104.4191) (xy 226.187242 103.863339) (xy 225.97501 103.349697) (xy 225.58237 102.956371) (xy 225.374488 102.870051)
+ (xy 225.580303 102.78501) (xy 225.973629 102.39237) (xy 226.186757 101.8791) (xy 226.187242 101.323339) (xy 225.97501 100.809697)
+ (xy 225.58237 100.416371) (xy 225.374488 100.330051) (xy 225.580303 100.24501) (xy 225.973629 99.85237) (xy 226.186757 99.3391)
+ (xy 226.187242 98.783339) (xy 225.97501 98.269697) (xy 225.58237 97.876371) (xy 225.374488 97.790051) (xy 225.580303 97.70501)
+ (xy 225.973629 97.31237) (xy 226.186757 96.7991) (xy 226.187242 96.243339) (xy 225.97501 95.729697) (xy 225.58237 95.336371)
+ (xy 225.374488 95.250051) (xy 225.580303 95.16501) (xy 225.973629 94.77237) (xy 226.186757 94.2591) (xy 226.187242 93.703339)
+ (xy 225.97501 93.189697) (xy 225.58237 92.796371) (xy 225.374488 92.710051) (xy 225.580303 92.62501) (xy 225.973629 92.23237)
+ (xy 226.186757 91.7191) (xy 226.187242 91.163339) (xy 225.97501 90.649697) (xy 225.58237 90.256371) (xy 225.374488 90.170051)
+ (xy 225.580303 90.08501) (xy 225.973629 89.69237) (xy 226.186757 89.1791) (xy 226.187242 88.623339) (xy 225.97501 88.109697)
+ (xy 225.58237 87.716371) (xy 225.0691 87.503243) (xy 224.513339 87.502758) (xy 223.999697 87.71499) (xy 223.646237 88.067833)
+ (xy 223.615162 87.902683) (xy 223.47609 87.686559) (xy 223.26389 87.541569) (xy 223.012 87.49056) (xy 221.488 87.49056)
+ (xy 221.252683 87.534838) (xy 221.036559 87.67391) (xy 220.891569 87.88611) (xy 220.84056 88.138) (xy 220.84056 89.662)
+ (xy 220.884838 89.897317) (xy 221.02391 90.113441) (xy 221.23611 90.258431) (xy 221.419124 90.295492) (xy 221.066371 90.64763)
+ (xy 220.853243 91.1609) (xy 220.852758 91.716661) (xy 221.06499 92.230303) (xy 221.45763 92.623629) (xy 221.665512 92.709949)
+ (xy 221.459697 92.79499) (xy 221.066371 93.18763) (xy 220.853243 93.7009) (xy 220.852758 94.256661) (xy 221.06499 94.770303)
+ (xy 221.45763 95.163629) (xy 221.665512 95.249949) (xy 221.459697 95.33499) (xy 221.066371 95.72763) (xy 221.05376 95.758)
+ (xy 213.40826 95.758) (xy 213.116655 95.816004) (xy 212.869444 95.981185) (xy 210.609606 98.241023) (xy 210.554942 98.108725)
+ (xy 210.264046 97.817321) (xy 209.883777 97.65942) (xy 209.472029 97.659061) (xy 209.091485 97.816298) (xy 208.800081 98.107194)
+ (xy 208.64218 98.487463) (xy 208.641821 98.899211) (xy 208.799058 99.279755) (xy 209.089954 99.571159) (xy 209.223866 99.626764)
+ (xy 207.624009 101.226621) (xy 207.408356 101.226433) (xy 207.011451 101.390431) (xy 206.707518 101.693834) (xy 206.542827 102.090452)
+ (xy 206.542453 102.519904) (xy 206.706451 102.916809) (xy 207.009854 103.220742) (xy 207.406472 103.385433) (xy 207.835924 103.385807)
+ (xy 208.232829 103.221809) (xy 208.536762 102.918406) (xy 208.701453 102.521788) (xy 208.701642 102.304248) (xy 213.723891 97.282)
+ (xy 221.053295 97.282) (xy 221.06499 97.310303) (xy 221.45763 97.703629) (xy 221.665512 97.789949) (xy 221.459697 97.87499)
+ (xy 221.066371 98.26763) (xy 220.853243 98.7809) (xy 220.852758 99.336661) (xy 221.06499 99.850303) (xy 221.45763 100.243629)
+ (xy 221.665512 100.329949) (xy 221.459697 100.41499) (xy 221.066371 100.80763) (xy 220.853243 101.3209) (xy 220.852758 101.876661)
+ (xy 221.06499 102.390303) (xy 221.45763 102.783629) (xy 221.665512 102.869949) (xy 221.459697 102.95499) (xy 221.066371 103.34763)
+ (xy 220.853243 103.8609) (xy 220.852758 104.416661) (xy 221.06499 104.930303) (xy 221.45763 105.323629) (xy 221.665512 105.409949)
+ (xy 221.459697 105.49499) (xy 221.066371 105.88763) (xy 220.853243 106.4009) (xy 220.852758 106.956661) (xy 220.971434 107.24388)
+ (xy 215.679122 107.24388) (xy 215.526766 107.091258) (xy 215.130148 106.926567) (xy 214.700696 106.926193) (xy 214.303791 107.090191)
+ (xy 213.999858 107.393594) (xy 213.835167 107.790212) (xy 213.834793 108.219664) (xy 213.998791 108.616569) (xy 214.302194 108.920502)
+ (xy 214.698812 109.085193) (xy 215.128264 109.085567) (xy 215.525169 108.921569) (xy 215.679126 108.76788) (xy 220.925087 108.76788)
+ (xy 220.853243 108.9409) (xy 220.852758 109.496661) (xy 221.06499 110.010303) (xy 221.45763 110.403629) (xy 221.665512 110.489949)
+ (xy 221.459697 110.57499) (xy 221.066371 110.96763) (xy 220.853243 111.4809) (xy 220.852758 112.036661) (xy 221.06499 112.550303)
+ (xy 221.45763 112.943629) (xy 221.665512 113.029949) (xy 221.459697 113.11499) (xy 221.066371 113.50763) (xy 220.853243 114.0209)
+ (xy 220.852758 114.576661) (xy 221.024959 114.99342) (xy 220.766742 114.99342) (xy 220.614386 114.840798) (xy 220.217768 114.676107)
+ (xy 219.788316 114.675733) (xy 219.391411 114.839731) (xy 219.087478 115.143134) (xy 218.922787 115.539752) (xy 218.922413 115.969204)
+ (xy 218.967367 116.078) (xy 218.56513 116.078) (xy 217.769439 115.282309) (xy 217.769627 115.066656) (xy 217.605629 114.669751)
+ (xy 217.302226 114.365818) (xy 216.905608 114.201127) (xy 216.476156 114.200753) (xy 216.079251 114.364751) (xy 215.775318 114.668154)
+ (xy 215.610627 115.064772) (xy 215.610253 115.494224) (xy 215.774251 115.891129) (xy 216.077654 116.195062) (xy 216.474272 116.359753)
+ (xy 216.691812 116.359942) (xy 217.710685 117.378815) (xy 217.957895 117.543996) (xy 218.2495 117.602) (xy 221.053295 117.602)
+ (xy 221.06499 117.630303) (xy 221.45763 118.023629) (xy 221.665512 118.109949) (xy 221.459697 118.19499) (xy 221.066371 118.58763)
+ (xy 220.853243 119.1009) (xy 220.852758 119.656661) (xy 221.06499 120.170303) (xy 221.45763 120.563629) (xy 221.665512 120.649949)
+ (xy 221.459697 120.73499) (xy 221.066371 121.12763) (xy 220.853243 121.6409) (xy 220.852758 122.196661) (xy 220.948345 122.428)
+ (xy 208.407 122.428) (xy 208.115395 122.486004) (xy 207.925327 122.613004) (xy 207.868185 122.651185) (xy 205.963185 124.556185)
+ (xy 205.798004 124.803395) (xy 205.74 125.095) (xy 205.74 125.473358) (xy 205.587378 125.625714) (xy 205.422687 126.022332)
+ (xy 205.422313 126.451784) (xy 171.979414 126.451784) (xy 171.577 126.04937) (xy 171.577 125.105086) (xy 174.942269 125.105086)
+ (xy 175.144854 125.59538) (xy 175.519647 125.970827) (xy 176.009587 126.174268) (xy 176.540086 126.174731) (xy 177.03038 125.972146)
+ (xy 177.405827 125.597353) (xy 177.609268 125.107413) (xy 177.609731 124.576914) (xy 177.568452 124.477011) (xy 198.138921 124.477011)
+ (xy 198.296158 124.857555) (xy 198.587054 125.148959) (xy 198.967323 125.30686) (xy 199.379071 125.307219) (xy 199.759615 125.149982)
+ (xy 200.051019 124.859086) (xy 200.066231 124.822451) (xy 202.759181 124.822451) (xy 202.916418 125.202995) (xy 203.207314 125.494399)
+ (xy 203.587583 125.6523) (xy 203.999331 125.652659) (xy 204.379875 125.495422) (xy 204.671279 125.204526) (xy 204.82918 124.824257)
+ (xy 204.829539 124.412509) (xy 204.672302 124.031965) (xy 204.381406 123.740561) (xy 204.001137 123.58266) (xy 203.589389 123.582301)
+ (xy 203.208845 123.739538) (xy 202.917441 124.030434) (xy 202.75954 124.410703) (xy 202.759181 124.822451) (xy 200.066231 124.822451)
+ (xy 200.20892 124.478817) (xy 200.209279 124.067069) (xy 200.052042 123.686525) (xy 199.761146 123.395121) (xy 199.380877 123.23722)
+ (xy 198.969129 123.236861) (xy 198.588585 123.394098) (xy 198.297181 123.684994) (xy 198.13928 124.065263) (xy 198.138921 124.477011)
+ (xy 177.568452 124.477011) (xy 177.407146 124.08662) (xy 177.032353 123.711173) (xy 176.542413 123.507732) (xy 176.011914 123.507269)
+ (xy 175.52162 123.709854) (xy 175.146173 124.084647) (xy 174.942732 124.574587) (xy 174.942269 125.105086) (xy 171.577 125.105086)
+ (xy 171.577 124.46) (xy 171.518996 124.168395) (xy 171.353815 123.921185) (xy 170.210815 122.778185) (xy 170.200653 122.771395)
+ (xy 169.963605 122.613004) (xy 169.672 122.555) (xy 167.005 122.555) (xy 166.713395 122.613004) (xy 166.466184 122.778185)
+ (xy 165.29237 123.952) (xy 147.25463 123.952) (xy 146.558 123.25537) (xy 146.558 122.555) (xy 146.499996 122.263395)
+ (xy 146.334815 122.016185) (xy 144.302815 119.984185) (xy 144.253619 119.951313) (xy 144.055605 119.819004) (xy 143.764 119.761)
+ (xy 139.192 119.761) (xy 138.900395 119.819004) (xy 138.702381 119.951313) (xy 138.653185 119.984185) (xy 137.98737 120.65)
+ (xy 137.667211 120.65) (xy 137.68682 120.602777) (xy 137.687179 120.191029) (xy 137.529942 119.810485) (xy 137.239046 119.519081)
+ (xy 136.858777 119.36118) (xy 136.447029 119.360821) (xy 136.271 119.433554) (xy 136.271 116.418784) (xy 138.366313 116.418784)
+ (xy 138.530311 116.815689) (xy 138.833714 117.119622) (xy 139.230332 117.284313) (xy 139.659784 117.284687) (xy 140.056689 117.120689)
+ (xy 140.360622 116.817286) (xy 140.525313 116.420668) (xy 140.525314 116.418784) (xy 141.541313 116.418784) (xy 141.705311 116.815689)
+ (xy 142.008714 117.119622) (xy 142.405332 117.284313) (xy 142.834784 117.284687) (xy 143.231689 117.120689) (xy 143.535622 116.817286)
+ (xy 143.700313 116.420668) (xy 143.700687 115.991216) (xy 143.536689 115.594311) (xy 143.233286 115.290378) (xy 142.836668 115.125687)
+ (xy 142.407216 115.125313) (xy 142.010311 115.289311) (xy 141.706378 115.592714) (xy 141.541687 115.989332) (xy 141.541313 116.418784)
+ (xy 140.525314 116.418784) (xy 140.525687 115.991216) (xy 140.361689 115.594311) (xy 140.058286 115.290378) (xy 139.661668 115.125687)
+ (xy 139.232216 115.125313) (xy 138.835311 115.289311) (xy 138.531378 115.592714) (xy 138.366687 115.989332) (xy 138.366313 116.418784)
+ (xy 136.271 116.418784) (xy 136.271 113.789388) (xy 136.409058 114.123515) (xy 136.699954 114.414919) (xy 137.080223 114.57282)
+ (xy 137.491971 114.573179) (xy 137.872515 114.415942) (xy 138.163919 114.125046) (xy 138.32182 113.744777) (xy 138.322179 113.333029)
+ (xy 138.281663 113.234971) (xy 143.617821 113.234971) (xy 143.775058 113.615515) (xy 144.065954 113.906919) (xy 144.446223 114.06482)
+ (xy 144.507005 114.064873) (xy 146.729566 116.287434) (xy 147.00046 116.46844) (xy 147.32 116.532) (xy 152.017852 116.532)
+ (xy 152.193223 116.60482) (xy 152.604971 116.605179) (xy 152.985515 116.447942) (xy 153.028532 116.405) (xy 158.756329 116.405)
+ (xy 158.924954 116.573919) (xy 159.305223 116.73182) (xy 159.516395 116.732004) (xy 159.356697 116.79799) (xy 158.963371 117.19063)
+ (xy 158.877051 117.398512) (xy 158.79201 117.192697) (xy 158.39937 116.799371) (xy 157.8861 116.586243) (xy 157.330339 116.585758)
+ (xy 156.816697 116.79799) (xy 156.423371 117.19063) (xy 156.210243 117.7039) (xy 156.209758 118.259661) (xy 156.42199 118.773303)
+ (xy 156.81463 119.166629) (xy 157.022512 119.252949) (xy 156.816697 119.33799) (xy 156.423371 119.73063) (xy 156.210243 120.2439)
+ (xy 156.209758 120.799661) (xy 156.42199 121.313303) (xy 156.81463 121.706629) (xy 157.3279 121.919757) (xy 157.883661 121.920242)
+ (xy 158.397303 121.70801) (xy 158.790629 121.31537) (xy 158.876949 121.107488) (xy 158.96199 121.313303) (xy 159.35463 121.706629)
+ (xy 159.8679 121.919757) (xy 160.423661 121.920242) (xy 160.937303 121.70801) (xy 161.330629 121.31537) (xy 161.416949 121.107488)
+ (xy 161.50199 121.313303) (xy 161.89463 121.706629) (xy 162.4079 121.919757) (xy 162.963661 121.920242) (xy 163.477303 121.70801)
+ (xy 163.870629 121.31537) (xy 163.956949 121.107488) (xy 164.04199 121.313303) (xy 164.43463 121.706629) (xy 164.9479 121.919757)
+ (xy 165.503661 121.920242) (xy 166.017303 121.70801) (xy 166.410629 121.31537) (xy 166.623757 120.8021) (xy 166.624242 120.246339)
+ (xy 166.532823 120.025086) (xy 167.322269 120.025086) (xy 167.524854 120.51538) (xy 167.899647 120.890827) (xy 168.389587 121.094268)
+ (xy 168.920086 121.094731) (xy 169.41038 120.892146) (xy 169.785827 120.517353) (xy 169.989268 120.027413) (xy 169.98927 120.025086)
+ (xy 174.942269 120.025086) (xy 175.144854 120.51538) (xy 175.519647 120.890827) (xy 176.009587 121.094268) (xy 176.540086 121.094731)
+ (xy 177.03038 120.892146) (xy 177.405827 120.517353) (xy 177.609268 120.027413) (xy 177.609731 119.496914) (xy 177.492332 119.212784)
+ (xy 180.530313 119.212784) (xy 180.694311 119.609689) (xy 180.997714 119.913622) (xy 181.394332 120.078313) (xy 181.823784 120.078687)
+ (xy 182.220689 119.914689) (xy 182.524622 119.611286) (xy 182.689313 119.214668) (xy 182.689425 119.085784) (xy 183.451313 119.085784)
+ (xy 183.615311 119.482689) (xy 183.918714 119.786622) (xy 184.315332 119.951313) (xy 184.744784 119.951687) (xy 185.141689 119.787689)
+ (xy 185.445622 119.484286) (xy 185.610313 119.087668) (xy 185.610687 118.658216) (xy 185.446689 118.261311) (xy 185.143286 117.957378)
+ (xy 184.746668 117.792687) (xy 184.317216 117.792313) (xy 183.920311 117.956311) (xy 183.616378 118.259714) (xy 183.451687 118.656332)
+ (xy 183.451313 119.085784) (xy 182.689425 119.085784) (xy 182.689687 118.785216) (xy 182.525689 118.388311) (xy 182.222286 118.084378)
+ (xy 181.825668 117.919687) (xy 181.396216 117.919313) (xy 180.999311 118.083311) (xy 180.695378 118.386714) (xy 180.530687 118.783332)
+ (xy 180.530313 119.212784) (xy 177.492332 119.212784) (xy 177.407146 119.00662) (xy 177.032353 118.631173) (xy 176.542413 118.427732)
+ (xy 176.011914 118.427269) (xy 175.52162 118.629854) (xy 175.146173 119.004647) (xy 174.942732 119.494587) (xy 174.942269 120.025086)
+ (xy 169.98927 120.025086) (xy 169.989731 119.496914) (xy 169.787146 119.00662) (xy 169.412353 118.631173) (xy 168.922413 118.427732)
+ (xy 168.391914 118.427269) (xy 167.90162 118.629854) (xy 167.526173 119.004647) (xy 167.322732 119.494587) (xy 167.322269 120.025086)
+ (xy 166.532823 120.025086) (xy 166.41201 119.732697) (xy 166.059167 119.379237) (xy 166.224317 119.348162) (xy 166.440441 119.20909)
+ (xy 166.585431 118.99689) (xy 166.63644 118.745) (xy 166.63644 117.221) (xy 166.592162 116.985683) (xy 166.45309 116.769559)
+ (xy 166.372906 116.714771) (xy 188.121161 116.714771) (xy 188.278398 117.095315) (xy 188.569294 117.386719) (xy 188.949563 117.54462)
+ (xy 189.361311 117.544979) (xy 189.741855 117.387742) (xy 189.961896 117.168084) (xy 203.065193 117.168084) (xy 203.229191 117.564989)
+ (xy 203.532594 117.868922) (xy 203.929212 118.033613) (xy 204.358664 118.033987) (xy 204.755569 117.869989) (xy 205.059502 117.566586)
+ (xy 205.224193 117.169968) (xy 205.224567 116.740516) (xy 205.060569 116.343611) (xy 204.757166 116.039678) (xy 204.360548 115.874987)
+ (xy 203.931096 115.874613) (xy 203.534191 116.038611) (xy 203.230258 116.342014) (xy 203.065567 116.738632) (xy 203.065193 117.168084)
+ (xy 189.961896 117.168084) (xy 190.033259 117.096846) (xy 190.19116 116.716577) (xy 190.191519 116.304829) (xy 190.034282 115.924285)
+ (xy 189.743386 115.632881) (xy 189.363117 115.47498) (xy 188.951369 115.474621) (xy 188.570825 115.631858) (xy 188.279421 115.922754)
+ (xy 188.12152 116.303023) (xy 188.121161 116.714771) (xy 166.372906 116.714771) (xy 166.24089 116.624569) (xy 165.989 116.57356)
+ (xy 164.465 116.57356) (xy 164.229683 116.617838) (xy 164.013559 116.75691) (xy 163.868569 116.96911) (xy 163.831508 117.152124)
+ (xy 163.47937 116.799371) (xy 162.9661 116.586243) (xy 162.410339 116.585758) (xy 161.896697 116.79799) (xy 161.503371 117.19063)
+ (xy 161.417051 117.398512) (xy 161.33201 117.192697) (xy 160.93937 116.799371) (xy 160.4261 116.586243) (xy 160.070915 116.585933)
+ (xy 160.097515 116.574942) (xy 160.140532 116.532) (xy 165.989 116.532) (xy 166.308541 116.468439) (xy 166.579434 116.287434)
+ (xy 168.376501 114.490367) (xy 168.793086 114.490731) (xy 169.28338 114.288146) (xy 169.658827 113.913353) (xy 169.862268 113.423413)
+ (xy 169.86227 113.421086) (xy 174.815269 113.421086) (xy 175.017854 113.91138) (xy 175.392647 114.286827) (xy 175.882587 114.490268)
+ (xy 176.413086 114.490731) (xy 176.90338 114.288146) (xy 177.117535 114.074364) (xy 208.300133 114.074364) (xy 208.464131 114.471269)
+ (xy 208.767534 114.775202) (xy 209.164152 114.939893) (xy 209.593604 114.940267) (xy 209.990509 114.776269) (xy 210.294442 114.472866)
+ (xy 210.459133 114.076248) (xy 210.459507 113.646796) (xy 210.295509 113.249891) (xy 210.050074 113.004027) (xy 210.333635 112.886862)
+ (xy 210.625039 112.595966) (xy 210.78294 112.215697) (xy 210.783299 111.803949) (xy 210.626062 111.423405) (xy 210.335166 111.132001)
+ (xy 209.954897 110.9741) (xy 209.543149 110.973741) (xy 209.162605 111.130978) (xy 208.871201 111.421874) (xy 208.7133 111.802143)
+ (xy 208.712941 112.213891) (xy 208.870178 112.594435) (xy 209.088353 112.812991) (xy 208.769131 112.944891) (xy 208.465198 113.248294)
+ (xy 208.300507 113.644912) (xy 208.300133 114.074364) (xy 177.117535 114.074364) (xy 177.278827 113.913353) (xy 177.482268 113.423413)
+ (xy 177.482731 112.892914) (xy 177.280146 112.40262) (xy 176.905353 112.027173) (xy 176.415413 111.823732) (xy 175.884914 111.823269)
+ (xy 175.39462 112.025854) (xy 175.019173 112.400647) (xy 174.815732 112.890587) (xy 174.815269 113.421086) (xy 169.86227 113.421086)
+ (xy 169.862731 112.892914) (xy 169.660146 112.40262) (xy 169.285353 112.027173) (xy 168.795413 111.823732) (xy 168.264914 111.823269)
+ (xy 167.77462 112.025854) (xy 167.399173 112.400647) (xy 167.195732 112.890587) (xy 167.195366 113.309766) (xy 165.643132 114.862)
+ (xy 160.140892 114.862) (xy 160.099046 114.820081) (xy 159.718777 114.66218) (xy 159.307029 114.661821) (xy 159.129922 114.735)
+ (xy 153.028892 114.735) (xy 152.987046 114.693081) (xy 152.606777 114.53518) (xy 152.195029 114.534821) (xy 151.814485 114.692058)
+ (xy 151.644246 114.862) (xy 147.665868 114.862) (xy 145.688127 112.884259) (xy 145.688179 112.825029) (xy 145.530942 112.444485)
+ (xy 145.240046 112.153081) (xy 144.859777 111.99518) (xy 144.448029 111.994821) (xy 144.067485 112.152058) (xy 143.776081 112.442954)
+ (xy 143.61818 112.823223) (xy 143.617821 113.234971) (xy 138.281663 113.234971) (xy 138.164942 112.952485) (xy 137.874046 112.661081)
+ (xy 137.493777 112.50318) (xy 137.082029 112.502821) (xy 136.701485 112.660058) (xy 136.410081 112.950954) (xy 136.271 113.285899)
+ (xy 136.271 113.157) (xy 136.212996 112.865395) (xy 136.047815 112.618185) (xy 135.25324 111.82361) (xy 135.316633 111.823665)
+ (xy 135.666843 111.678961) (xy 135.93502 111.411253) (xy 136.080335 111.061295) (xy 136.080665 110.682367) (xy 135.935961 110.332157)
+ (xy 135.668253 110.06398) (xy 135.318295 109.918665) (xy 134.939367 109.918335) (xy 134.683304 110.024138) (xy 134.429295 109.918665)
+ (xy 134.112 109.918389) (xy 134.112 109.043971) (xy 141.204821 109.043971) (xy 141.362058 109.424515) (xy 141.652954 109.715919)
+ (xy 142.033223 109.87382) (xy 142.444971 109.874179) (xy 142.825515 109.716942) (xy 143.116919 109.426046) (xy 143.27482 109.045777)
+ (xy 143.275179 108.634029) (xy 143.117942 108.253485) (xy 142.827046 107.962081) (xy 142.446777 107.80418) (xy 142.035029 107.803821)
+ (xy 141.654485 107.961058) (xy 141.363081 108.251954) (xy 141.20518 108.632223) (xy 141.204821 109.043971) (xy 134.112 109.043971)
+ (xy 134.112 107.886501) (xy 134.300633 107.886665) (xy 134.556696 107.780862) (xy 134.810705 107.886335) (xy 135.189633 107.886665)
+ (xy 135.539843 107.741961) (xy 135.80802 107.474253) (xy 135.953335 107.124295) (xy 135.953665 106.745367) (xy 135.924668 106.67519)
+ (xy 136.201726 106.560712) (xy 136.365747 106.72502) (xy 136.715705 106.870335) (xy 137.094633 106.870665) (xy 137.444843 106.725961)
+ (xy 137.71302 106.458253) (xy 137.747608 106.374955) (xy 137.747335 106.688633) (xy 137.892039 107.038843) (xy 138.112658 107.259848)
+ (xy 138.112335 107.630633) (xy 138.257039 107.980843) (xy 138.524747 108.24902) (xy 138.874705 108.394335) (xy 139.253633 108.394665)
+ (xy 139.603843 108.249961) (xy 139.87202 107.982253) (xy 140.017335 107.632295) (xy 140.017665 107.253367) (xy 139.872961 106.903157)
+ (xy 139.652342 106.682152) (xy 139.652378 106.639784) (xy 140.398313 106.639784) (xy 140.562311 107.036689) (xy 140.865714 107.340622)
+ (xy 141.262332 107.505313) (xy 141.691784 107.505687) (xy 142.088689 107.341689) (xy 142.392622 107.038286) (xy 142.452624 106.893784)
+ (xy 145.478313 106.893784) (xy 145.642311 107.290689) (xy 145.666356 107.314776) (xy 145.643378 107.337714) (xy 145.478687 107.734332)
+ (xy 145.478313 108.163784) (xy 145.642311 108.560689) (xy 145.945714 108.864622) (xy 146.100011 108.928692) (xy 146.074311 108.939311)
+ (xy 145.770378 109.242714) (xy 145.605687 109.639332) (xy 145.605313 110.068784) (xy 145.769311 110.465689) (xy 146.072714 110.769622)
+ (xy 146.469332 110.934313) (xy 146.898784 110.934687) (xy 147.295689 110.770689) (xy 147.489932 110.576784) (xy 176.974313 110.576784)
+ (xy 177.138311 110.973689) (xy 177.441714 111.277622) (xy 177.838332 111.442313) (xy 178.267784 111.442687) (xy 178.664689 111.278689)
+ (xy 178.968622 110.975286) (xy 179.133313 110.578668) (xy 179.133687 110.149216) (xy 178.969689 109.752311) (xy 178.666286 109.448378)
+ (xy 178.269668 109.283687) (xy 177.840216 109.283313) (xy 177.443311 109.447311) (xy 177.139378 109.750714) (xy 176.974687 110.147332)
+ (xy 176.974313 110.576784) (xy 147.489932 110.576784) (xy 147.599622 110.467286) (xy 147.764313 110.070668) (xy 147.764687 109.641216)
+ (xy 147.600689 109.244311) (xy 147.297286 108.940378) (xy 147.142989 108.876308) (xy 147.168689 108.865689) (xy 147.472622 108.562286)
+ (xy 147.564472 108.341086) (xy 167.195269 108.341086) (xy 167.397854 108.83138) (xy 167.772647 109.206827) (xy 168.262587 109.410268)
+ (xy 168.793086 109.410731) (xy 169.28338 109.208146) (xy 169.658827 108.833353) (xy 169.862268 108.343413) (xy 169.862731 107.812914)
+ (xy 169.660146 107.32262) (xy 169.285353 106.947173) (xy 168.795413 106.743732) (xy 168.264914 106.743269) (xy 167.77462 106.945854)
+ (xy 167.399173 107.320647) (xy 167.195732 107.810587) (xy 167.195269 108.341086) (xy 147.564472 108.341086) (xy 147.637313 108.165668)
+ (xy 147.637687 107.736216) (xy 147.473689 107.339311) (xy 147.449644 107.315224) (xy 147.472622 107.292286) (xy 147.637313 106.895668)
+ (xy 147.637687 106.466216) (xy 147.473689 106.069311) (xy 147.409275 106.004784) (xy 165.671313 106.004784) (xy 165.835311 106.401689)
+ (xy 166.138714 106.705622) (xy 166.535332 106.870313) (xy 166.964784 106.870687) (xy 167.361689 106.706689) (xy 167.665622 106.403286)
+ (xy 167.725624 106.258784) (xy 173.545313 106.258784) (xy 173.709311 106.655689) (xy 174.012714 106.959622) (xy 174.409332 107.124313)
+ (xy 174.838784 107.124687) (xy 174.992918 107.061) (xy 175.279273 107.061) (xy 175.019173 107.320647) (xy 174.815732 107.810587)
+ (xy 174.815269 108.341086) (xy 175.017854 108.83138) (xy 175.392647 109.206827) (xy 175.882587 109.410268) (xy 176.413086 109.410731)
+ (xy 176.90338 109.208146) (xy 177.278827 108.833353) (xy 177.482268 108.343413) (xy 177.482731 107.812914) (xy 177.434423 107.696)
+ (xy 179.234614 107.696) (xy 179.324 107.71378) (xy 180.657373 107.71378) (xy 180.657335 107.757633) (xy 180.763138 108.013696)
+ (xy 180.657665 108.267705) (xy 180.657335 108.646633) (xy 180.763138 108.902696) (xy 180.657665 109.156705) (xy 180.657335 109.535633)
+ (xy 180.763138 109.791696) (xy 180.657665 110.045705) (xy 180.657375 110.378184) (xy 180.507216 110.378053) (xy 180.110311 110.542051)
+ (xy 179.806378 110.845454) (xy 179.641687 111.242072) (xy 179.641313 111.671524) (xy 179.805311 112.068429) (xy 180.108714 112.372362)
+ (xy 180.505332 112.537053) (xy 180.934784 112.537427) (xy 181.331689 112.373429) (xy 181.635622 112.070026) (xy 181.800313 111.673408)
+ (xy 181.800687 111.243956) (xy 181.777834 111.188647) (xy 181.798633 111.188665) (xy 182.148843 111.043961) (xy 182.194885 110.998)
+ (xy 183.8833 110.998) (xy 184.174905 110.939996) (xy 184.422115 110.774815) (xy 184.489259 110.707671) (xy 188.403101 110.707671)
+ (xy 188.560338 111.088215) (xy 188.851234 111.379619) (xy 189.231503 111.53752) (xy 189.643251 111.537879) (xy 190.023795 111.380642)
+ (xy 190.315199 111.089746) (xy 190.4731 110.709477) (xy 190.473101 110.707671) (xy 213.419561 110.707671) (xy 213.576798 111.088215)
+ (xy 213.867694 111.379619) (xy 214.247963 111.53752) (xy 214.659711 111.537879) (xy 215.040255 111.380642) (xy 215.331659 111.089746)
+ (xy 215.48956 110.709477) (xy 215.489919 110.297729) (xy 215.332682 109.917185) (xy 215.041786 109.625781) (xy 214.661517 109.46788)
+ (xy 214.249769 109.467521) (xy 213.869225 109.624758) (xy 213.577821 109.915654) (xy 213.41992 110.295923) (xy 213.419561 110.707671)
+ (xy 190.473101 110.707671) (xy 190.473459 110.297729) (xy 190.316222 109.917185) (xy 190.025326 109.625781) (xy 189.645057 109.46788)
+ (xy 189.233309 109.467521) (xy 188.852765 109.624758) (xy 188.561361 109.915654) (xy 188.40346 110.295923) (xy 188.403101 110.707671)
+ (xy 184.489259 110.707671) (xy 187.294623 107.902308) (xy 187.294333 108.234904) (xy 187.458331 108.631809) (xy 187.761734 108.935742)
+ (xy 188.158352 109.100433) (xy 188.587804 109.100807) (xy 188.984709 108.936809) (xy 189.288642 108.633406) (xy 189.453333 108.236788)
+ (xy 189.453707 107.807336) (xy 189.289709 107.410431) (xy 188.986306 107.106498) (xy 188.589688 106.941807) (xy 188.255415 106.941516)
+ (xy 188.796332 106.400599) (xy 189.011984 106.400787) (xy 189.408889 106.236789) (xy 189.638724 106.007354) (xy 192.046894 108.415524)
+ (xy 192.046673 108.669244) (xy 192.210671 109.066149) (xy 192.514074 109.370082) (xy 192.910692 109.534773) (xy 193.340144 109.535147)
+ (xy 193.737049 109.371149) (xy 194.040982 109.067746) (xy 194.205673 108.671128) (xy 194.206047 108.241676) (xy 194.042049 107.844771)
+ (xy 193.907984 107.710471) (xy 210.369021 107.710471) (xy 210.526258 108.091015) (xy 210.817154 108.382419) (xy 211.197423 108.54032)
+ (xy 211.609171 108.540679) (xy 211.989715 108.383442) (xy 212.281119 108.092546) (xy 212.43902 107.712277) (xy 212.439379 107.300529)
+ (xy 212.282142 106.919985) (xy 211.991246 106.628581) (xy 211.610977 106.47068) (xy 211.199229 106.470321) (xy 210.818685 106.627558)
+ (xy 210.527281 106.918454) (xy 210.36938 107.298723) (xy 210.369021 107.710471) (xy 193.907984 107.710471) (xy 193.738646 107.540838)
+ (xy 193.342028 107.376147) (xy 193.162621 107.375991) (xy 191.410414 105.623784) (xy 192.214313 105.623784) (xy 192.378311 106.020689)
+ (xy 192.681714 106.324622) (xy 193.078332 106.489313) (xy 193.507784 106.489687) (xy 193.904689 106.325689) (xy 194.208622 106.022286)
+ (xy 194.373313 105.625668) (xy 194.373687 105.196216) (xy 194.209689 104.799311) (xy 193.906286 104.495378) (xy 193.509668 104.330687)
+ (xy 193.080216 104.330313) (xy 192.683311 104.494311) (xy 192.379378 104.797714) (xy 192.214687 105.194332) (xy 192.214313 105.623784)
+ (xy 191.410414 105.623784) (xy 189.596095 103.809465) (xy 189.484185 103.734689) (xy 189.418567 103.690844) (xy 209.351693 103.690844)
+ (xy 209.515691 104.087749) (xy 209.819094 104.391682) (xy 210.215712 104.556373) (xy 210.645164 104.556747) (xy 211.042069 104.392749)
+ (xy 211.346002 104.089346) (xy 211.510693 103.692728) (xy 211.511067 103.263276) (xy 211.347069 102.866371) (xy 211.043666 102.562438)
+ (xy 210.647048 102.397747) (xy 210.217596 102.397373) (xy 209.820691 102.561371) (xy 209.516758 102.864774) (xy 209.352067 103.261392)
+ (xy 209.351693 103.690844) (xy 189.418567 103.690844) (xy 189.348885 103.644284) (xy 189.05728 103.58628) (xy 187.9346 103.58628)
+ (xy 187.642995 103.644284) (xy 187.507695 103.734689) (xy 187.395785 103.809465) (xy 185.01547 106.18978) (xy 179.413386 106.18978)
+ (xy 179.324 106.172) (xy 179.011926 106.172) (xy 179.133313 105.879668) (xy 179.133687 105.450216) (xy 178.969689 105.053311)
+ (xy 178.666286 104.749378) (xy 178.269668 104.584687) (xy 177.840216 104.584313) (xy 177.443311 104.748311) (xy 177.139378 105.051714)
+ (xy 176.974687 105.448332) (xy 176.974544 105.612336) (xy 176.948605 105.595004) (xy 176.657 105.537) (xy 175.583119 105.537)
+ (xy 175.540689 105.434311) (xy 175.237286 105.130378) (xy 174.840668 104.965687) (xy 174.411216 104.965313) (xy 174.014311 105.129311)
+ (xy 173.710378 105.432714) (xy 173.545687 105.829332) (xy 173.545313 106.258784) (xy 167.725624 106.258784) (xy 167.830313 106.006668)
+ (xy 167.830687 105.577216) (xy 167.666689 105.180311) (xy 167.363286 104.876378) (xy 166.966668 104.711687) (xy 166.537216 104.711313)
+ (xy 166.140311 104.875311) (xy 165.836378 105.178714) (xy 165.671687 105.575332) (xy 165.671313 106.004784) (xy 147.409275 106.004784)
+ (xy 147.170286 105.765378) (xy 146.773668 105.600687) (xy 146.344216 105.600313) (xy 145.947311 105.764311) (xy 145.643378 106.067714)
+ (xy 145.478687 106.464332) (xy 145.478313 106.893784) (xy 142.452624 106.893784) (xy 142.557313 106.641668) (xy 142.557687 106.212216)
+ (xy 142.393689 105.815311) (xy 142.319272 105.740764) (xy 142.430335 105.473295) (xy 142.430665 105.094367) (xy 142.285961 104.744157)
+ (xy 142.018253 104.47598) (xy 141.668295 104.330665) (xy 141.289367 104.330335) (xy 140.939157 104.475039) (xy 140.67098 104.742747)
+ (xy 140.525665 105.092705) (xy 140.525335 105.471633) (xy 140.636514 105.740706) (xy 140.563378 105.813714) (xy 140.398687 106.210332)
+ (xy 140.398313 106.639784) (xy 139.652378 106.639784) (xy 139.652665 106.311367) (xy 139.507961 105.961157) (xy 139.240253 105.69298)
+ (xy 138.890295 105.547665) (xy 138.511367 105.547335) (xy 138.161157 105.692039) (xy 137.89298 105.959747) (xy 137.858392 106.043045)
+ (xy 137.858665 105.729367) (xy 137.713961 105.379157) (xy 137.446253 105.11098) (xy 137.096295 104.965665) (xy 136.717367 104.965335)
+ (xy 136.622055 105.004717) (xy 136.615689 104.989311) (xy 136.312286 104.685378) (xy 135.915668 104.520687) (xy 135.486216 104.520313)
+ (xy 135.089311 104.684311) (xy 134.989059 104.784388) (xy 134.919961 104.617157) (xy 134.652253 104.34898) (xy 134.302295 104.203665)
+ (xy 133.923367 104.203335) (xy 133.875672 104.223042) (xy 133.228806 103.576176) (xy 133.39502 103.410253) (xy 133.540335 103.060295)
+ (xy 133.540425 102.956784) (xy 138.747313 102.956784) (xy 138.911311 103.353689) (xy 139.214714 103.657622) (xy 139.611332 103.822313)
+ (xy 140.040784 103.822687) (xy 140.112553 103.793033) (xy 140.357714 104.038622) (xy 140.754332 104.203313) (xy 141.183784 104.203687)
+ (xy 141.456577 104.090971) (xy 145.776821 104.090971) (xy 145.934058 104.471515) (xy 146.224954 104.762919) (xy 146.605223 104.92082)
+ (xy 147.016971 104.921179) (xy 147.397515 104.763942) (xy 147.688919 104.473046) (xy 147.84682 104.092777) (xy 147.847071 103.804188)
+ (xy 167.774417 103.804188) (xy 167.836071 104.0398) (xy 168.33648 104.215927) (xy 168.866199 104.187148) (xy 169.221929 104.0398)
+ (xy 169.283583 103.804188) (xy 175.394417 103.804188) (xy 175.456071 104.0398) (xy 175.95648 104.215927) (xy 176.486199 104.187148)
+ (xy 176.841929 104.0398) (xy 176.903583 103.804188) (xy 176.149 103.049605) (xy 175.394417 103.804188) (xy 169.283583 103.804188)
+ (xy 168.529 103.049605) (xy 167.774417 103.804188) (xy 147.847071 103.804188) (xy 147.847179 103.681029) (xy 147.689942 103.300485)
+ (xy 147.399046 103.009081) (xy 147.018777 102.85118) (xy 146.607029 102.850821) (xy 146.226485 103.008058) (xy 145.935081 103.298954)
+ (xy 145.77718 103.679223) (xy 145.776821 104.090971) (xy 141.456577 104.090971) (xy 141.580689 104.039689) (xy 141.884622 103.736286)
+ (xy 142.049313 103.339668) (xy 142.049687 102.910216) (xy 141.97437 102.727935) (xy 150.812291 102.727935) (xy 150.995582 103.171535)
+ (xy 151.33468 103.511225) (xy 151.777959 103.69529) (xy 152.257935 103.695709) (xy 152.701535 103.512418) (xy 153.041225 103.17332)
+ (xy 153.22529 102.730041) (xy 153.225335 102.67748) (xy 167.183073 102.67748) (xy 167.211852 103.207199) (xy 167.3592 103.562929)
+ (xy 167.594812 103.624583) (xy 168.349395 102.87) (xy 168.708605 102.87) (xy 169.463188 103.624583) (xy 169.6988 103.562929)
+ (xy 169.874927 103.06252) (xy 169.854009 102.67748) (xy 174.803073 102.67748) (xy 174.831852 103.207199) (xy 174.9792 103.562929)
+ (xy 175.214812 103.624583) (xy 175.969395 102.87) (xy 176.328605 102.87) (xy 177.083188 103.624583) (xy 177.3188 103.562929)
+ (xy 177.487442 103.083784) (xy 178.625313 103.083784) (xy 178.789311 103.480689) (xy 179.092714 103.784622) (xy 179.489332 103.949313)
+ (xy 179.918784 103.949687) (xy 180.315689 103.785689) (xy 180.469646 103.632) (xy 180.736852 103.632) (xy 180.657665 103.822705)
+ (xy 180.657335 104.201633) (xy 180.763138 104.457696) (xy 180.657665 104.711705) (xy 180.657335 105.090633) (xy 180.802039 105.440843)
+ (xy 181.069747 105.70902) (xy 181.419705 105.854335) (xy 181.798633 105.854665) (xy 182.148843 105.709961) (xy 182.41702 105.442253)
+ (xy 182.562335 105.092295) (xy 182.562665 104.713367) (xy 182.456862 104.457304) (xy 182.562335 104.203295) (xy 182.562665 103.824367)
+ (xy 182.48318 103.632) (xy 183.95442 103.632) (xy 184.246025 103.573996) (xy 184.493235 103.408815) (xy 188.444039 99.458011)
+ (xy 193.643121 99.458011) (xy 193.800358 99.838555) (xy 194.091254 100.129959) (xy 194.471523 100.28786) (xy 194.883271 100.288219)
+ (xy 195.263815 100.130982) (xy 195.555219 99.840086) (xy 195.71312 99.459817) (xy 195.713479 99.048069) (xy 195.649317 98.892784)
+ (xy 196.024313 98.892784) (xy 196.188311 99.289689) (xy 196.491714 99.593622) (xy 196.888332 99.758313) (xy 197.317784 99.758687)
+ (xy 197.714689 99.594689) (xy 198.018622 99.291286) (xy 198.183313 98.894668) (xy 198.183326 98.878891) (xy 202.418821 98.878891)
+ (xy 202.576058 99.259435) (xy 202.866954 99.550839) (xy 203.247223 99.70874) (xy 203.658971 99.709099) (xy 204.039515 99.551862)
+ (xy 204.330919 99.260966) (xy 204.48882 98.880697) (xy 204.489179 98.468949) (xy 204.331942 98.088405) (xy 204.041046 97.797001)
+ (xy 203.660777 97.6391) (xy 203.249029 97.638741) (xy 202.868485 97.795978) (xy 202.577081 98.086874) (xy 202.41918 98.467143)
+ (xy 202.418821 98.878891) (xy 198.183326 98.878891) (xy 198.183687 98.465216) (xy 198.019689 98.068311) (xy 197.716286 97.764378)
+ (xy 197.319668 97.599687) (xy 196.890216 97.599313) (xy 196.493311 97.763311) (xy 196.189378 98.066714) (xy 196.024687 98.463332)
+ (xy 196.024313 98.892784) (xy 195.649317 98.892784) (xy 195.556242 98.667525) (xy 195.265346 98.376121) (xy 194.885077 98.21822)
+ (xy 194.473329 98.217861) (xy 194.092785 98.375098) (xy 193.801381 98.665994) (xy 193.64348 99.046263) (xy 193.643121 99.458011)
+ (xy 188.444039 99.458011) (xy 190.342587 97.559463) (xy 190.565734 97.782999) (xy 190.946003 97.9409) (xy 191.357751 97.941259)
+ (xy 191.738295 97.784022) (xy 192.029699 97.493126) (xy 192.1876 97.112857) (xy 192.187959 96.701109) (xy 192.044035 96.352784)
+ (xy 198.310313 96.352784) (xy 198.474311 96.749689) (xy 198.73951 97.015352) (xy 198.60918 97.329223) (xy 198.608821 97.740971)
+ (xy 198.766058 98.121515) (xy 199.056954 98.412919) (xy 199.437223 98.57082) (xy 199.848971 98.571179) (xy 200.229515 98.413942)
+ (xy 200.520919 98.123046) (xy 200.67882 97.742777) (xy 200.679179 97.331029) (xy 200.521942 96.950485) (xy 200.310047 96.73822)
+ (xy 200.469313 96.354668) (xy 200.469687 95.925216) (xy 200.305689 95.528311) (xy 200.002286 95.224378) (xy 199.605668 95.059687)
+ (xy 199.176216 95.059313) (xy 198.779311 95.223311) (xy 198.475378 95.526714) (xy 198.310687 95.923332) (xy 198.310313 96.352784)
+ (xy 192.044035 96.352784) (xy 192.030722 96.320565) (xy 191.806299 96.095751) (xy 197.039421 90.862629) (xy 197.2059 90.931757)
+ (xy 197.761661 90.932242) (xy 198.275303 90.72001) (xy 198.668629 90.32737) (xy 198.754949 90.119488) (xy 198.83999 90.325303)
+ (xy 199.23263 90.718629) (xy 199.7459 90.931757) (xy 200.301661 90.932242) (xy 200.815303 90.72001) (xy 201.208629 90.32737)
+ (xy 201.421757 89.8141) (xy 201.422242 89.258339) (xy 201.21001 88.744697) (xy 200.81737 88.351371) (xy 200.609488 88.265051)
+ (xy 200.815303 88.18001) (xy 201.208629 87.78737) (xy 201.421757 87.2741) (xy 201.422242 86.718339) (xy 201.21001 86.204697)
+ (xy 200.81737 85.811371) (xy 200.3041 85.598243) (xy 199.748339 85.597758) (xy 199.234697 85.80999) (xy 198.881237 86.162833)
+ (xy 198.850162 85.997683) (xy 198.71109 85.781559) (xy 198.49889 85.636569) (xy 198.247 85.58556) (xy 196.723 85.58556)
+ (xy 196.487683 85.629838) (xy 196.271559 85.76891) (xy 196.126569 85.98111) (xy 196.07556 86.233) (xy 196.07556 87.757)
+ (xy 196.119838 87.992317) (xy 196.25891 88.208441) (xy 196.47111 88.353431) (xy 196.654124 88.390492) (xy 196.301371 88.74263)
+ (xy 196.088243 89.2559) (xy 196.087891 89.658899) (xy 183.63879 102.108) (xy 180.469642 102.108) (xy 180.317286 101.955378)
+ (xy 179.920668 101.790687) (xy 179.491216 101.790313) (xy 179.094311 101.954311) (xy 178.790378 102.257714) (xy 178.625687 102.654332)
+ (xy 178.625313 103.083784) (xy 177.487442 103.083784) (xy 177.494927 103.06252) (xy 177.466148 102.532801) (xy 177.3188 102.177071)
+ (xy 177.083188 102.115417) (xy 176.328605 102.87) (xy 175.969395 102.87) (xy 175.214812 102.115417) (xy 174.9792 102.177071)
+ (xy 174.803073 102.67748) (xy 169.854009 102.67748) (xy 169.846148 102.532801) (xy 169.6988 102.177071) (xy 169.463188 102.115417)
+ (xy 168.708605 102.87) (xy 168.349395 102.87) (xy 167.594812 102.115417) (xy 167.3592 102.177071) (xy 167.183073 102.67748)
+ (xy 153.225335 102.67748) (xy 153.225709 102.250065) (xy 153.095863 101.935812) (xy 167.774417 101.935812) (xy 168.529 102.690395)
+ (xy 169.283583 101.935812) (xy 175.394417 101.935812) (xy 176.149 102.690395) (xy 176.903583 101.935812) (xy 176.841929 101.7002)
+ (xy 176.34152 101.524073) (xy 175.811801 101.552852) (xy 175.456071 101.7002) (xy 175.394417 101.935812) (xy 169.283583 101.935812)
+ (xy 169.221929 101.7002) (xy 168.72152 101.524073) (xy 168.191801 101.552852) (xy 167.836071 101.7002) (xy 167.774417 101.935812)
+ (xy 153.095863 101.935812) (xy 153.042418 101.806465) (xy 152.70332 101.466775) (xy 152.260041 101.28271) (xy 151.780065 101.282291)
+ (xy 151.336465 101.465582) (xy 150.996775 101.80468) (xy 150.81271 102.247959) (xy 150.812291 102.727935) (xy 141.97437 102.727935)
+ (xy 141.885689 102.513311) (xy 141.861644 102.489224) (xy 141.884622 102.466286) (xy 142.049313 102.069668) (xy 142.049687 101.640216)
+ (xy 141.885689 101.243311) (xy 141.582286 100.939378) (xy 141.185668 100.774687) (xy 140.756216 100.774313) (xy 140.359311 100.938311)
+ (xy 140.055378 101.241714) (xy 139.890687 101.638332) (xy 139.890665 101.663555) (xy 139.613216 101.663313) (xy 139.216311 101.827311)
+ (xy 138.912378 102.130714) (xy 138.747687 102.527332) (xy 138.747313 102.956784) (xy 133.540425 102.956784) (xy 133.540665 102.681367)
+ (xy 133.395961 102.331157) (xy 133.128253 102.06298) (xy 132.778295 101.917665) (xy 132.399367 101.917335) (xy 132.049157 102.062039)
+ (xy 131.78098 102.329747) (xy 131.635665 102.679705) (xy 131.635499 102.87) (xy 129.413 102.87) (xy 129.121395 102.928004)
+ (xy 129.022377 102.994166) (xy 128.874185 103.093184) (xy 128.112185 103.855185) (xy 127.947004 104.102395) (xy 127.889 104.394)
+ (xy 127.889 105.918) (xy 127.947004 106.209605) (xy 128.082885 106.412965) (xy 128.112185 106.456815) (xy 128.493184 106.837815)
+ (xy 128.648819 106.941807) (xy 128.740395 107.002996) (xy 128.93568 107.041841) (xy 128.968598 107.074816) (xy 128.968313 107.401784)
+ (xy 129.132311 107.798689) (xy 129.413 108.079868) (xy 129.413 110.950604) (xy 129.374668 110.934687) (xy 128.945216 110.934313)
+ (xy 128.548311 111.098311) (xy 128.244378 111.401714) (xy 128.079687 111.798332) (xy 128.079313 112.227784) (xy 128.227057 112.585351)
+ (xy 128.183216 112.585313) (xy 127.786311 112.749311) (xy 127.482378 113.052714) (xy 127.317687 113.449332) (xy 127.317313 113.878784)
+ (xy 127.481311 114.275689) (xy 127.784714 114.579622) (xy 128.181332 114.744313) (xy 128.610784 114.744687) (xy 129.007689 114.580689)
+ (xy 129.311622 114.277286) (xy 129.413 114.033142) (xy 129.413 115.697) (xy 129.471004 115.988605) (xy 129.608955 116.195062)
+ (xy 129.636185 116.235815) (xy 130.937 117.536631) (xy 130.937 124.206) (xy 130.995004 124.497605) (xy 131.039543 124.564262)
+ (xy 131.160185 124.744815) (xy 138.780184 132.364815) (xy 138.966494 132.489303) (xy 139.027395 132.529996) (xy 139.319 132.588)
+ (xy 155.51337 132.588) (xy 158.519857 135.594488) (xy 158.213697 135.72099) (xy 157.820371 136.11363) (xy 157.734051 136.321512)
+ (xy 157.64901 136.115697) (xy 157.25637 135.722371) (xy 156.7431 135.509243) (xy 156.187339 135.508758) (xy 155.673697 135.72099)
+ (xy 155.280371 136.11363) (xy 155.194051 136.321512) (xy 155.10901 136.115697) (xy 154.71637 135.722371) (xy 154.2031 135.509243)
+ (xy 153.647339 135.508758) (xy 153.133697 135.72099) (xy 152.740371 136.11363) (xy 152.654051 136.321512) (xy 152.56901 136.115697)
+ (xy 152.17637 135.722371) (xy 151.6631 135.509243) (xy 151.107339 135.508758) (xy 150.593697 135.72099) (xy 150.200371 136.11363)
+ (xy 150.114051 136.321512) (xy 150.02901 136.115697) (xy 149.63637 135.722371) (xy 149.1231 135.509243) (xy 148.567339 135.508758)
+ (xy 148.053697 135.72099) (xy 147.660371 136.11363) (xy 147.574051 136.321512) (xy 147.48901 136.115697) (xy 147.09637 135.722371)
+ (xy 146.5831 135.509243) (xy 146.027339 135.508758) (xy 145.513697 135.72099) (xy 145.120371 136.11363) (xy 145.034051 136.321512)
+ (xy 144.94901 136.115697) (xy 144.55637 135.722371) (xy 144.0431 135.509243) (xy 143.487339 135.508758) (xy 142.973697 135.72099)
+ (xy 142.580371 136.11363) (xy 142.494051 136.321512) (xy 142.40901 136.115697) (xy 142.01637 135.722371) (xy 141.5031 135.509243)
+ (xy 140.947339 135.508758) (xy 140.433697 135.72099) (xy 140.040371 136.11363) (xy 139.954051 136.321512) (xy 139.86901 136.115697)
+ (xy 139.519901 135.765978) (xy 139.74502 135.541253) (xy 139.890335 135.191295) (xy 139.890665 134.812367) (xy 139.745961 134.462157)
+ (xy 139.478253 134.19398) (xy 139.128295 134.048665) (xy 138.749367 134.048335) (xy 138.493304 134.154138) (xy 138.239295 134.048665)
+ (xy 137.860367 134.048335) (xy 137.604304 134.154138) (xy 137.350295 134.048665) (xy 136.971367 134.048335) (xy 136.715304 134.154138)
+ (xy 136.461295 134.048665) (xy 136.082367 134.048335) (xy 135.826304 134.154138) (xy 135.572295 134.048665) (xy 135.193367 134.048335)
+ (xy 134.937304 134.154138) (xy 134.683295 134.048665) (xy 134.304367 134.048335) (xy 134.048304 134.154138) (xy 133.794295 134.048665)
+ (xy 133.415367 134.048335) (xy 133.159304 134.154138) (xy 132.905295 134.048665) (xy 132.526367 134.048335) (xy 132.176157 134.193039)
+ (xy 131.90798 134.460747) (xy 131.762665 134.810705) (xy 131.762335 135.189633) (xy 131.907039 135.539843) (xy 132.174747 135.80802)
+ (xy 132.524705 135.953335) (xy 132.580897 135.953384) (xy 132.420371 136.11363) (xy 132.334051 136.321512) (xy 132.24901 136.115697)
+ (xy 131.85637 135.722371) (xy 131.3431 135.509243) (xy 130.787339 135.508758) (xy 130.273697 135.72099) (xy 129.880371 136.11363)
+ (xy 129.794051 136.321512) (xy 129.70901 136.115697) (xy 129.31637 135.722371) (xy 128.8031 135.509243) (xy 128.247339 135.508758)
+ (xy 127.733697 135.72099) (xy 127.340371 136.11363) (xy 127.254051 136.321512) (xy 127.16901 136.115697) (xy 126.77637 135.722371)
+ (xy 126.2631 135.509243) (xy 125.707339 135.508758) (xy 125.193697 135.72099) (xy 124.800371 136.11363) (xy 124.714051 136.321512)
+ (xy 124.62901 136.115697) (xy 124.23637 135.722371) (xy 123.7231 135.509243) (xy 123.167339 135.508758) (xy 122.653697 135.72099)
+ (xy 122.260371 136.11363) (xy 122.174051 136.321512) (xy 122.08901 136.115697) (xy 121.69637 135.722371) (xy 121.1831 135.509243)
+ (xy 120.627339 135.508758) (xy 120.113697 135.72099) (xy 119.720371 136.11363) (xy 119.634051 136.321512) (xy 119.54901 136.115697)
+ (xy 119.15637 135.722371) (xy 118.6431 135.509243) (xy 118.087339 135.508758) (xy 117.573697 135.72099) (xy 117.180371 136.11363)
+ (xy 117.094051 136.321512) (xy 117.00901 136.115697) (xy 116.61637 135.722371) (xy 116.1031 135.509243) (xy 115.547339 135.508758)
+ (xy 115.033697 135.72099) (xy 114.640371 136.11363) (xy 114.62776 136.144) (xy 114.480705 136.144) (xy 114.46901 136.115697)
+ (xy 114.07637 135.722371) (xy 113.5631 135.509243) (xy 113.007339 135.508758) (xy 112.493697 135.72099) (xy 112.100371 136.11363)
+ (xy 112.020605 136.305727) (xy 111.966397 136.174857) (xy 111.724213 136.105392) (xy 110.923605 136.906) (xy 111.724213 137.706608)
+ (xy 111.966397 137.637143) (xy 112.016509 137.496682) (xy 112.09899 137.696303) (xy 112.49163 138.089629) (xy 112.699512 138.175949)
+ (xy 112.493697 138.26099) (xy 112.100371 138.65363) (xy 112.014051 138.861512) (xy 111.92901 138.655697) (xy 111.53637 138.262371)
+ (xy 111.344273 138.182605) (xy 111.475143 138.128397) (xy 111.544608 137.886213) (xy 110.744 137.085605) (xy 109.943392 137.886213)
+ (xy 110.012857 138.128397) (xy 110.153318 138.178509) (xy 109.953697 138.26099) (xy 109.560371 138.65363) (xy 109.347243 139.1669)
+ (xy 109.346758 139.722661) (xy 102.000091 139.722661) (xy 102.000179 139.622029) (xy 101.842942 139.241485) (xy 101.552046 138.950081)
+ (xy 101.171777 138.79218) (xy 100.760029 138.791821) (xy 100.379485 138.949058) (xy 100.088081 139.239954) (xy 99.93018 139.620223)
+ (xy 99.929821 140.031971) (xy 90.30337 140.031971) (xy 90.21932 139.947775) (xy 89.776041 139.76371) (xy 89.296065 139.763291)
+ (xy 88.852465 139.946582) (xy 88.512775 140.28568) (xy 88.32871 140.728959) (xy 88.328291 141.208935) (xy 72.517 141.208935)
+ (xy 72.517 138.795935) (xy 82.232291 138.795935) (xy 82.415582 139.239535) (xy 82.75468 139.579225) (xy 83.197959 139.76329)
+ (xy 83.677935 139.763709) (xy 84.121535 139.580418) (xy 84.461225 139.24132) (xy 84.64529 138.798041) (xy 84.645709 138.318065)
+ (xy 84.462418 137.874465) (xy 84.12332 137.534775) (xy 83.680041 137.35071) (xy 83.200065 137.350291) (xy 82.756465 137.533582)
+ (xy 82.416775 137.87268) (xy 82.23271 138.315959) (xy 82.232291 138.795935) (xy 72.517 138.795935) (xy 72.517 137.759213)
+ (xy 75.526392 137.759213) (xy 75.595857 138.001397) (xy 76.119302 138.188144) (xy 76.674368 138.160362) (xy 77.058143 138.001397)
+ (xy 77.127608 137.759213) (xy 76.327 136.958605) (xy 75.526392 137.759213) (xy 72.517 137.759213) (xy 72.517 136.571302)
+ (xy 74.917856 136.571302) (xy 74.945638 137.126368) (xy 75.104603 137.510143) (xy 75.346787 137.579608) (xy 76.147395 136.779)
+ (xy 75.346787 135.978392) (xy 75.104603 136.047857) (xy 74.917856 136.571302) (xy 72.517 136.571302) (xy 72.517 116.251302)
+ (xy 74.917856 116.251302) (xy 74.945638 116.806368) (xy 75.104603 117.190143) (xy 75.346787 117.259608) (xy 76.147395 116.459)
+ (xy 75.346787 115.658392) (xy 75.104603 115.727857) (xy 74.917856 116.251302) (xy 72.517 116.251302) (xy 72.517 105.537)
+ (xy 74.91756 105.537) (xy 74.91756 107.061) (xy 74.961838 107.296317) (xy 75.10091 107.512441) (xy 75.31311 107.657431)
+ (xy 75.496124 107.694492) (xy 75.143371 108.04663) (xy 74.930243 108.5599) (xy 74.929758 109.115661) (xy 75.14199 109.629303)
+ (xy 75.53463 110.022629) (xy 75.742512 110.108949) (xy 75.536697 110.19399) (xy 75.143371 110.58663) (xy 74.930243 111.0999)
+ (xy 74.929758 111.655661) (xy 75.14199 112.169303) (xy 75.53463 112.562629) (xy 75.742512 112.648949) (xy 75.536697 112.73399)
+ (xy 75.143371 113.12663) (xy 74.930243 113.6399) (xy 74.929758 114.195661) (xy 75.14199 114.709303) (xy 75.53463 115.102629)
+ (xy 75.726727 115.182395) (xy 75.595857 115.236603) (xy 75.526392 115.478787) (xy 76.327 116.279395) (xy 77.127608 115.478787)
+ (xy 77.058143 115.236603) (xy 76.917682 115.186491) (xy 77.117303 115.10401) (xy 77.510629 114.71137) (xy 77.596949 114.503488)
+ (xy 77.68199 114.709303) (xy 78.07463 115.102629) (xy 78.282512 115.188949) (xy 78.076697 115.27399) (xy 77.683371 115.66663)
+ (xy 77.603605 115.858727) (xy 77.549397 115.727857) (xy 77.307213 115.658392) (xy 76.506605 116.459) (xy 77.307213 117.259608)
+ (xy 77.549397 117.190143) (xy 77.599509 117.049682) (xy 77.68199 117.249303) (xy 78.07463 117.642629) (xy 78.282512 117.728949)
+ (xy 78.076697 117.81399) (xy 77.683371 118.20663) (xy 77.597051 118.414512) (xy 77.51201 118.208697) (xy 77.11937 117.815371)
+ (xy 76.927273 117.735605) (xy 77.058143 117.681397) (xy 77.127608 117.439213) (xy 76.327 116.638605) (xy 75.526392 117.439213)
+ (xy 75.595857 117.681397) (xy 75.736318 117.731509) (xy 75.536697 117.81399) (xy 75.143371 118.20663) (xy 74.930243 118.7199)
+ (xy 74.929758 119.275661) (xy 75.14199 119.789303) (xy 75.53463 120.182629) (xy 75.742512 120.268949) (xy 75.536697 120.35399)
+ (xy 75.143371 120.74663) (xy 74.930243 121.2599) (xy 74.929758 121.815661) (xy 75.14199 122.329303) (xy 75.53463 122.722629)
+ (xy 75.742512 122.808949) (xy 75.536697 122.89399) (xy 75.143371 123.28663) (xy 74.930243 123.7999) (xy 74.929758 124.355661)
+ (xy 75.14199 124.869303) (xy 75.53463 125.262629) (xy 75.742512 125.348949) (xy 75.536697 125.43399) (xy 75.143371 125.82663)
+ (xy 74.930243 126.3399) (xy 74.929758 126.895661) (xy 75.14199 127.409303) (xy 75.53463 127.802629) (xy 75.742512 127.888949)
+ (xy 75.536697 127.97399) (xy 75.143371 128.36663) (xy 74.930243 128.8799) (xy 74.929758 129.435661) (xy 75.14199 129.949303)
+ (xy 75.53463 130.342629) (xy 75.742512 130.428949) (xy 75.536697 130.51399) (xy 75.143371 130.90663) (xy 74.930243 131.4199)
+ (xy 74.929758 131.975661) (xy 75.14199 132.489303) (xy 75.53463 132.882629) (xy 75.742512 132.968949) (xy 75.536697 133.05399)
+ (xy 75.143371 133.44663) (xy 74.930243 133.9599) (xy 74.929758 134.515661) (xy 75.14199 135.029303) (xy 75.53463 135.422629)
+ (xy 75.726727 135.502395) (xy 75.595857 135.556603) (xy 75.526392 135.798787) (xy 76.327 136.599395) (xy 77.127608 135.798787)
+ (xy 77.058143 135.556603) (xy 76.917682 135.506491) (xy 77.117303 135.42401) (xy 77.510629 135.03137) (xy 77.596949 134.823488)
+ (xy 77.68199 135.029303) (xy 78.07463 135.422629) (xy 78.282512 135.508949) (xy 78.076697 135.59399) (xy 77.683371 135.98663)
+ (xy 77.603605 136.178727) (xy 77.549397 136.047857) (xy 77.307213 135.978392) (xy 76.506605 136.779) (xy 77.307213 137.579608)
+ (xy 77.549397 137.510143) (xy 77.599509 137.369682) (xy 77.68199 137.569303) (xy 78.07463 137.962629) (xy 78.5879 138.175757)
+ (xy 79.143661 138.176242) (xy 79.657303 137.96401) (xy 80.050629 137.57137) (xy 80.263757 137.0581) (xy 80.26407 136.698302)
+ (xy 109.334856 136.698302) (xy 109.362638 137.253368) (xy 109.521603 137.637143) (xy 109.763787 137.706608) (xy 110.564395 136.906)
+ (xy 109.763787 136.105392) (xy 109.521603 136.174857) (xy 109.334856 136.698302) (xy 80.26407 136.698302) (xy 80.264242 136.502339)
+ (xy 80.05201 135.988697) (xy 79.65937 135.595371) (xy 79.451488 135.509051) (xy 79.657303 135.42401) (xy 80.050629 135.03137)
+ (xy 80.263757 134.5181) (xy 80.263792 134.477935) (xy 82.232291 134.477935) (xy 82.415582 134.921535) (xy 82.75468 135.261225)
+ (xy 83.197959 135.44529) (xy 83.677935 135.445709) (xy 84.121535 135.262418) (xy 84.461225 134.92332) (xy 84.472294 134.896661)
+ (xy 87.502758 134.896661) (xy 87.71499 135.410303) (xy 88.10763 135.803629) (xy 88.6209 136.016757) (xy 89.176661 136.017242)
+ (xy 89.690303 135.80501) (xy 90.043763 135.452167) (xy 90.074838 135.617317) (xy 90.21391 135.833441) (xy 90.42611 135.978431)
+ (xy 90.678 136.02944) (xy 92.202 136.02944) (xy 92.437317 135.985162) (xy 92.529588 135.925787) (xy 109.943392 135.925787)
+ (xy 110.744 136.726395) (xy 111.544608 135.925787) (xy 111.475143 135.683603) (xy 110.951698 135.496856) (xy 110.396632 135.524638)
+ (xy 110.012857 135.683603) (xy 109.943392 135.925787) (xy 92.529588 135.925787) (xy 92.653441 135.84609) (xy 92.798431 135.63389)
+ (xy 92.84944 135.382) (xy 92.84944 133.858) (xy 92.805162 133.622683) (xy 92.66609 133.406559) (xy 92.45389 133.261569)
+ (xy 92.202 133.21056) (xy 90.678 133.21056) (xy 90.442683 133.254838) (xy 90.226559 133.39391) (xy 90.081569 133.60611)
+ (xy 90.044508 133.789124) (xy 89.69237 133.436371) (xy 89.1791 133.223243) (xy 88.623339 133.222758) (xy 88.109697 133.43499)
+ (xy 87.716371 133.82763) (xy 87.503243 134.3409) (xy 87.502758 134.896661) (xy 84.472294 134.896661) (xy 84.64529 134.480041)
+ (xy 84.645709 134.000065) (xy 84.462418 133.556465) (xy 84.12332 133.216775) (xy 83.680041 133.03271) (xy 83.200065 133.032291)
+ (xy 82.756465 133.215582) (xy 82.416775 133.55468) (xy 82.23271 133.997959) (xy 82.232291 134.477935) (xy 80.263792 134.477935)
+ (xy 80.264242 133.962339) (xy 80.05201 133.448697) (xy 79.65937 133.055371) (xy 79.451488 132.969051) (xy 79.657303 132.88401)
+ (xy 79.748501 132.792971) (xy 85.705821 132.792971) (xy 85.863058 133.173515) (xy 86.153954 133.464919) (xy 86.534223 133.62282)
+ (xy 86.945971 133.623179) (xy 87.326515 133.465942) (xy 87.617919 133.175046) (xy 87.77582 132.794777) (xy 87.776179 132.383029)
+ (xy 87.618942 132.002485) (xy 87.328046 131.711081) (xy 86.947777 131.55318) (xy 86.536029 131.552821) (xy 86.155485 131.710058)
+ (xy 85.864081 132.000954) (xy 85.70618 132.381223) (xy 85.705821 132.792971) (xy 79.748501 132.792971) (xy 80.050629 132.49137)
+ (xy 80.263757 131.9781) (xy 80.264242 131.422339) (xy 80.05201 130.908697) (xy 79.65937 130.515371) (xy 79.451488 130.429051)
+ (xy 79.657303 130.34401) (xy 80.050629 129.95137) (xy 80.263757 129.4381) (xy 80.264242 128.882339) (xy 80.05201 128.368697)
+ (xy 79.65937 127.975371) (xy 79.451488 127.889051) (xy 79.657303 127.80401) (xy 80.050629 127.41137) (xy 80.263757 126.8981)
+ (xy 80.264242 126.342339) (xy 80.188411 126.158812) (xy 121.919736 126.158812) (xy 122.151262 126.719149) (xy 122.579596 127.148231)
+ (xy 123.139528 127.380735) (xy 123.745812 127.381264) (xy 124.306149 127.149738) (xy 124.735231 126.721404) (xy 124.967735 126.161472)
+ (xy 124.968264 125.555188) (xy 124.736738 124.994851) (xy 124.308404 124.565769) (xy 123.748472 124.333265) (xy 123.142188 124.332736)
+ (xy 122.581851 124.564262) (xy 122.152769 124.992596) (xy 121.920265 125.552528) (xy 121.919736 126.158812) (xy 80.188411 126.158812)
+ (xy 80.05201 125.828697) (xy 79.65937 125.435371) (xy 79.451488 125.349051) (xy 79.657303 125.26401) (xy 80.050629 124.87137)
+ (xy 80.263757 124.3581) (xy 80.264242 123.802339) (xy 80.05201 123.288697) (xy 79.65937 122.895371) (xy 79.451488 122.809051)
+ (xy 79.657303 122.72401) (xy 80.050629 122.33137) (xy 80.263757 121.8181) (xy 80.264242 121.262339) (xy 80.188411 121.078812)
+ (xy 121.919736 121.078812) (xy 122.151262 121.639149) (xy 122.579596 122.068231) (xy 123.139528 122.300735) (xy 123.745812 122.301264)
+ (xy 124.306149 122.069738) (xy 124.735231 121.641404) (xy 124.967735 121.081472) (xy 124.968264 120.475188) (xy 124.736738 119.914851)
+ (xy 124.308404 119.485769) (xy 123.748472 119.253265) (xy 123.142188 119.252736) (xy 122.581851 119.484262) (xy 122.152769 119.912596)
+ (xy 121.920265 120.472528) (xy 121.919736 121.078812) (xy 80.188411 121.078812) (xy 80.05201 120.748697) (xy 79.65937 120.355371)
+ (xy 79.451488 120.269051) (xy 79.657303 120.18401) (xy 80.050629 119.79137) (xy 80.263757 119.2781) (xy 80.263924 119.085784)
+ (xy 100.012313 119.085784) (xy 100.176311 119.482689) (xy 100.479714 119.786622) (xy 100.876332 119.951313) (xy 101.305784 119.951687)
+ (xy 101.702689 119.787689) (xy 102.006622 119.484286) (xy 102.171313 119.087668) (xy 102.171687 118.658216) (xy 102.007689 118.261311)
+ (xy 101.704286 117.957378) (xy 101.307668 117.792687) (xy 100.878216 117.792313) (xy 100.481311 117.956311) (xy 100.177378 118.259714)
+ (xy 100.012687 118.656332) (xy 100.012313 119.085784) (xy 80.263924 119.085784) (xy 80.264242 118.722339) (xy 80.05201 118.208697)
+ (xy 79.659783 117.815784) (xy 94.678313 117.815784) (xy 94.842311 118.212689) (xy 95.145714 118.516622) (xy 95.542332 118.681313)
+ (xy 95.971784 118.681687) (xy 96.368689 118.517689) (xy 96.672622 118.214286) (xy 96.837313 117.817668) (xy 96.837687 117.388216)
+ (xy 96.673689 116.991311) (xy 96.370286 116.687378) (xy 96.029292 116.545784) (xy 116.649313 116.545784) (xy 116.813311 116.942689)
+ (xy 117.116714 117.246622) (xy 117.513332 117.411313) (xy 117.942784 117.411687) (xy 118.339689 117.247689) (xy 118.643622 116.944286)
+ (xy 118.808313 116.547668) (xy 118.808687 116.118216) (xy 118.644689 115.721311) (xy 118.453496 115.529784) (xy 121.348313 115.529784)
+ (xy 121.512311 115.926689) (xy 121.815714 116.230622) (xy 122.212332 116.395313) (xy 122.641784 116.395687) (xy 123.038689 116.231689)
+ (xy 123.342622 115.928286) (xy 123.507313 115.531668) (xy 123.507687 115.102216) (xy 123.343689 114.705311) (xy 123.040286 114.401378)
+ (xy 122.643668 114.236687) (xy 122.214216 114.236313) (xy 121.817311 114.400311) (xy 121.513378 114.703714) (xy 121.348687 115.100332)
+ (xy 121.348313 115.529784) (xy 118.453496 115.529784) (xy 118.341286 115.417378) (xy 117.944668 115.252687) (xy 117.515216 115.252313)
+ (xy 117.118311 115.416311) (xy 116.814378 115.719714) (xy 116.649687 116.116332) (xy 116.649313 116.545784) (xy 96.029292 116.545784)
+ (xy 95.973668 116.522687) (xy 95.544216 116.522313) (xy 95.147311 116.686311) (xy 94.843378 116.989714) (xy 94.678687 117.386332)
+ (xy 94.678313 117.815784) (xy 79.659783 117.815784) (xy 79.65937 117.815371) (xy 79.451488 117.729051) (xy 79.657303 117.64401)
+ (xy 80.050629 117.25137) (xy 80.263757 116.7381) (xy 80.264242 116.182339) (xy 80.05201 115.668697) (xy 79.91334 115.529784)
+ (xy 82.232313 115.529784) (xy 82.396311 115.926689) (xy 82.699714 116.230622) (xy 83.096332 116.395313) (xy 83.525784 116.395687)
+ (xy 83.922689 116.231689) (xy 84.226622 115.928286) (xy 84.391313 115.531668) (xy 84.391535 115.275784) (xy 94.678313 115.275784)
+ (xy 94.842311 115.672689) (xy 95.145714 115.976622) (xy 95.542332 116.141313) (xy 95.971784 116.141687) (xy 96.368689 115.977689)
+ (xy 96.672622 115.674286) (xy 96.837313 115.277668) (xy 96.837314 115.275784) (xy 100.012313 115.275784) (xy 100.176311 115.672689)
+ (xy 100.479714 115.976622) (xy 100.876332 116.141313) (xy 101.305784 116.141687) (xy 101.702689 115.977689) (xy 102.006622 115.674286)
+ (xy 102.171313 115.277668) (xy 102.171687 114.848216) (xy 102.007689 114.451311) (xy 101.704286 114.147378) (xy 101.307668 113.982687)
+ (xy 100.878216 113.982313) (xy 100.481311 114.146311) (xy 100.177378 114.449714) (xy 100.012687 114.846332) (xy 100.012313 115.275784)
+ (xy 96.837314 115.275784) (xy 96.837687 114.848216) (xy 96.673689 114.451311) (xy 96.370286 114.147378) (xy 95.973668 113.982687)
+ (xy 95.544216 113.982313) (xy 95.147311 114.146311) (xy 94.843378 114.449714) (xy 94.678687 114.846332) (xy 94.678313 115.275784)
+ (xy 84.391535 115.275784) (xy 84.391687 115.102216) (xy 84.227689 114.705311) (xy 83.924286 114.401378) (xy 83.527668 114.236687)
+ (xy 83.098216 114.236313) (xy 82.701311 114.400311) (xy 82.397378 114.703714) (xy 82.232687 115.100332) (xy 82.232313 115.529784)
+ (xy 79.91334 115.529784) (xy 79.65937 115.275371) (xy 79.451488 115.189051) (xy 79.657303 115.10401) (xy 80.050629 114.71137)
+ (xy 80.263757 114.1981) (xy 80.264242 113.642339) (xy 80.05201 113.128697) (xy 79.65937 112.735371) (xy 79.451488 112.649051)
+ (xy 79.657303 112.56401) (xy 79.866894 112.354784) (xy 86.550313 112.354784) (xy 86.714311 112.751689) (xy 87.017714 113.055622)
+ (xy 87.414332 113.220313) (xy 87.843784 113.220687) (xy 88.240689 113.056689) (xy 88.544622 112.753286) (xy 88.709313 112.356668)
+ (xy 88.7095 112.141) (xy 90.28456 112.141) (xy 90.28456 113.665) (xy 90.328838 113.900317) (xy 90.46791 114.116441)
+ (xy 90.68011 114.261431) (xy 90.932 114.31244) (xy 92.456 114.31244) (xy 92.691317 114.268162) (xy 92.907441 114.12909)
+ (xy 93.052431 113.91689) (xy 93.089492 113.733876) (xy 93.44163 114.086629) (xy 93.9549 114.299757) (xy 94.510661 114.300242)
+ (xy 95.024303 114.08801) (xy 95.417629 113.69537) (xy 95.630757 113.1821) (xy 95.631154 112.726971) (xy 102.342821 112.726971)
+ (xy 102.500058 113.107515) (xy 102.790954 113.398919) (xy 103.171223 113.55682) (xy 103.582971 113.557179) (xy 103.963515 113.399942)
+ (xy 104.254919 113.109046) (xy 104.41282 112.728777) (xy 104.413179 112.317029) (xy 104.255942 111.936485) (xy 103.965046 111.645081)
+ (xy 103.584777 111.48718) (xy 103.173029 111.486821) (xy 102.792485 111.644058) (xy 102.501081 111.934954) (xy 102.34318 112.315223)
+ (xy 102.342821 112.726971) (xy 95.631154 112.726971) (xy 95.631242 112.626339) (xy 95.41901 112.112697) (xy 95.02637 111.719371)
+ (xy 94.5131 111.506243) (xy 93.957339 111.505758) (xy 93.443697 111.71799) (xy 93.090237 112.070833) (xy 93.059162 111.905683)
+ (xy 92.92009 111.689559) (xy 92.70789 111.544569) (xy 92.456 111.49356) (xy 90.932 111.49356) (xy 90.696683 111.537838)
+ (xy 90.480559 111.67691) (xy 90.335569 111.88911) (xy 90.28456 112.141) (xy 88.7095 112.141) (xy 88.709687 111.927216)
+ (xy 88.545689 111.530311) (xy 88.242286 111.226378) (xy 87.845668 111.061687) (xy 87.416216 111.061313) (xy 87.019311 111.225311)
+ (xy 86.715378 111.528714) (xy 86.550687 111.925332) (xy 86.550313 112.354784) (xy 79.866894 112.354784) (xy 80.050629 112.17137)
+ (xy 80.263757 111.6581) (xy 80.264242 111.102339) (xy 80.05201 110.588697) (xy 79.65937 110.195371) (xy 79.527828 110.14075)
+ (xy 111.125 110.14075) (xy 111.125 110.74331) (xy 111.221673 110.976699) (xy 111.400302 111.155327) (xy 111.633691 111.252)
+ (xy 112.23625 111.252) (xy 112.395 111.09325) (xy 112.395 109.982) (xy 111.28375 109.982) (xy 111.125 110.14075)
+ (xy 79.527828 110.14075) (xy 79.451488 110.109051) (xy 79.657303 110.02401) (xy 80.050629 109.63137) (xy 80.08967 109.537349)
+ (xy 80.452633 109.537665) (xy 80.802843 109.392961) (xy 81.026155 109.17004) (xy 81.247747 109.39202) (xy 81.597705 109.537335)
+ (xy 81.976633 109.537665) (xy 82.326843 109.392961) (xy 82.59502 109.125253) (xy 82.740335 108.775295) (xy 82.740336 108.773633)
+ (xy 82.867335 108.773633) (xy 83.012039 109.123843) (xy 83.279747 109.39202) (xy 83.629705 109.537335) (xy 84.008633 109.537665)
+ (xy 84.328353 109.405559) (xy 84.645705 109.537335) (xy 85.024633 109.537665) (xy 85.374843 109.392961) (xy 85.64302 109.125253)
+ (xy 85.70886 108.96669) (xy 111.125 108.96669) (xy 111.125 109.56925) (xy 111.28375 109.728) (xy 112.395 109.728)
+ (xy 112.395 108.61675) (xy 112.649 108.61675) (xy 112.649 109.728) (xy 112.669 109.728) (xy 112.669 109.982)
+ (xy 112.649 109.982) (xy 112.649 111.09325) (xy 112.80775 111.252) (xy 113.410309 111.252) (xy 113.643698 111.155327)
+ (xy 113.822327 110.976699) (xy 113.919 110.74331) (xy 113.919 110.687386) (xy 114.26963 111.038629) (xy 114.7829 111.251757)
+ (xy 115.338661 111.252242) (xy 115.852303 111.04001) (xy 116.245629 110.64737) (xy 116.278598 110.567971) (xy 122.535821 110.567971)
+ (xy 122.693058 110.948515) (xy 122.983954 111.239919) (xy 123.364223 111.39782) (xy 123.775971 111.398179) (xy 124.156515 111.240942)
+ (xy 124.447919 110.950046) (xy 124.60582 110.569777) (xy 124.606179 110.158029) (xy 124.448942 109.777485) (xy 124.158046 109.486081)
+ (xy 123.777777 109.32818) (xy 123.366029 109.327821) (xy 122.985485 109.485058) (xy 122.694081 109.775954) (xy 122.53618 110.156223)
+ (xy 122.535821 110.567971) (xy 116.278598 110.567971) (xy 116.458757 110.1341) (xy 116.459242 109.578339) (xy 116.24701 109.064697)
+ (xy 115.85437 108.671371) (xy 115.3411 108.458243) (xy 114.785339 108.457758) (xy 114.271697 108.66999) (xy 113.919 109.022072)
+ (xy 113.919 108.96669) (xy 113.822327 108.733301) (xy 113.643698 108.554673) (xy 113.410309 108.458) (xy 112.80775 108.458)
+ (xy 112.649 108.61675) (xy 112.395 108.61675) (xy 112.23625 108.458) (xy 111.633691 108.458) (xy 111.400302 108.554673)
+ (xy 111.221673 108.733301) (xy 111.125 108.96669) (xy 85.70886 108.96669) (xy 85.788335 108.775295) (xy 85.788665 108.396367)
+ (xy 85.643961 108.046157) (xy 85.376253 107.77798) (xy 85.026295 107.632665) (xy 84.647367 107.632335) (xy 84.327647 107.764441)
+ (xy 84.010295 107.632665) (xy 83.631367 107.632335) (xy 83.281157 107.777039) (xy 83.01298 108.044747) (xy 82.867665 108.394705)
+ (xy 82.867335 108.773633) (xy 82.740336 108.773633) (xy 82.740665 108.396367) (xy 82.595961 108.046157) (xy 82.328253 107.77798)
+ (xy 81.978295 107.632665) (xy 81.599367 107.632335) (xy 81.249157 107.777039) (xy 81.025845 107.99996) (xy 80.804253 107.77798)
+ (xy 80.454295 107.632665) (xy 80.075367 107.632335) (xy 79.764569 107.760754) (xy 79.65937 107.655371) (xy 79.451488 107.569051)
+ (xy 79.657303 107.48401) (xy 80.050629 107.09137) (xy 80.263757 106.5781) (xy 80.264242 106.022339) (xy 80.05201 105.508697)
+ (xy 79.777764 105.233971) (xy 117.836821 105.233971) (xy 117.994058 105.614515) (xy 118.284954 105.905919) (xy 118.665223 106.06382)
+ (xy 119.076971 106.064179) (xy 119.457515 105.906942) (xy 119.748919 105.616046) (xy 119.8021 105.487971) (xy 122.408821 105.487971)
+ (xy 122.566058 105.868515) (xy 122.856954 106.159919) (xy 123.237223 106.31782) (xy 123.648971 106.318179) (xy 124.029515 106.160942)
+ (xy 124.320919 105.870046) (xy 124.47882 105.489777) (xy 124.479179 105.078029) (xy 124.321942 104.697485) (xy 124.031046 104.406081)
+ (xy 123.650777 104.24818) (xy 123.239029 104.247821) (xy 122.858485 104.405058) (xy 122.567081 104.695954) (xy 122.40918 105.076223)
+ (xy 122.408821 105.487971) (xy 119.8021 105.487971) (xy 119.90682 105.235777) (xy 119.907179 104.824029) (xy 119.749942 104.443485)
+ (xy 119.459046 104.152081) (xy 119.078777 103.99418) (xy 118.667029 103.993821) (xy 118.286485 104.151058) (xy 117.995081 104.441954)
+ (xy 117.83718 104.822223) (xy 117.836821 105.233971) (xy 79.777764 105.233971) (xy 79.65937 105.115371) (xy 79.1461 104.902243)
+ (xy 78.590339 104.901758) (xy 78.076697 105.11399) (xy 77.723237 105.466833) (xy 77.692162 105.301683) (xy 77.55309 105.085559)
+ (xy 77.34089 104.940569) (xy 77.089 104.88956) (xy 75.565 104.88956) (xy 75.329683 104.933838) (xy 75.113559 105.07291)
+ (xy 74.968569 105.28511) (xy 74.91756 105.537) (xy 72.517 105.537) (xy 72.517 100.61575) (xy 87.376 100.61575)
+ (xy 87.376 101.345309) (xy 87.472673 101.578698) (xy 87.651301 101.757327) (xy 87.88469 101.854) (xy 88.61425 101.854)
+ (xy 88.773 101.69525) (xy 88.773 100.457) (xy 89.027 100.457) (xy 89.027 101.69525) (xy 89.18575 101.854)
+ (xy 89.91531 101.854) (xy 90.148699 101.757327) (xy 90.327327 101.578698) (xy 90.424 101.345309) (xy 90.424 100.924784)
+ (xy 101.790313 100.924784) (xy 101.954311 101.321689) (xy 102.257714 101.625622) (xy 102.654332 101.790313) (xy 103.061176 101.790667)
+ (xy 103.166138 102.044696) (xy 103.060665 102.298705) (xy 103.060335 102.677633) (xy 103.166138 102.933696) (xy 103.060665 103.187705)
+ (xy 103.060335 103.566633) (xy 103.205039 103.916843) (xy 103.472747 104.18502) (xy 103.822705 104.330335) (xy 104.201633 104.330665)
+ (xy 104.551843 104.185961) (xy 104.82002 103.918253) (xy 104.965335 103.568295) (xy 104.965665 103.189367) (xy 104.859862 102.933304)
+ (xy 104.906506 102.820971) (xy 120.122821 102.820971) (xy 120.280058 103.201515) (xy 120.570954 103.492919) (xy 120.951223 103.65082)
+ (xy 121.362971 103.651179) (xy 121.743515 103.493942) (xy 122.034919 103.203046) (xy 122.19282 102.822777) (xy 122.193179 102.411029)
+ (xy 122.035942 102.030485) (xy 121.745046 101.739081) (xy 121.364777 101.58118) (xy 120.953029 101.580821) (xy 120.572485 101.738058)
+ (xy 120.281081 102.028954) (xy 120.12318 102.409223) (xy 120.122821 102.820971) (xy 104.906506 102.820971) (xy 104.965335 102.679295)
+ (xy 104.965665 102.300367) (xy 104.859862 102.044304) (xy 104.965335 101.790295) (xy 104.965665 101.411367) (xy 104.859862 101.155304)
+ (xy 104.965335 100.901295) (xy 104.965665 100.522367) (xy 104.865923 100.280971) (xy 145.776821 100.280971) (xy 145.934058 100.661515)
+ (xy 146.224954 100.952919) (xy 146.605223 101.11082) (xy 147.016971 101.111179) (xy 147.397515 100.953942) (xy 147.688919 100.663046)
+ (xy 147.84682 100.282777) (xy 147.847179 99.871029) (xy 147.689942 99.490485) (xy 147.399046 99.199081) (xy 147.018777 99.04118)
+ (xy 146.607029 99.040821) (xy 146.226485 99.198058) (xy 145.935081 99.488954) (xy 145.77718 99.869223) (xy 145.776821 100.280971)
+ (xy 104.865923 100.280971) (xy 104.820961 100.172157) (xy 104.553253 99.90398) (xy 104.203295 99.758665) (xy 103.824367 99.758335)
+ (xy 103.555294 99.869514) (xy 103.482286 99.796378) (xy 103.085668 99.631687) (xy 102.656216 99.631313) (xy 102.259311 99.795311)
+ (xy 101.955378 100.098714) (xy 101.790687 100.495332) (xy 101.790313 100.924784) (xy 90.424 100.924784) (xy 90.424 100.61575)
+ (xy 90.26525 100.457) (xy 89.027 100.457) (xy 88.773 100.457) (xy 87.53475 100.457) (xy 87.376 100.61575)
+ (xy 72.517 100.61575) (xy 72.517 99.314691) (xy 87.376 99.314691) (xy 87.376 100.04425) (xy 87.53475 100.203)
+ (xy 88.773 100.203) (xy 88.773 98.96475) (xy 89.027 98.96475) (xy 89.027 100.203) (xy 90.26525 100.203)
+ (xy 90.424 100.04425) (xy 90.424 99.314691) (xy 90.327327 99.081302) (xy 90.148699 98.902673) (xy 89.91531 98.806)
+ (xy 89.18575 98.806) (xy 89.027 98.96475) (xy 88.773 98.96475) (xy 88.61425 98.806) (xy 87.88469 98.806)
+ (xy 87.651301 98.902673) (xy 87.472673 99.081302) (xy 87.376 99.314691) (xy 72.517 99.314691) (xy 72.517 95.551812)
+ (xy 87.375736 95.551812) (xy 87.607262 96.112149) (xy 88.035596 96.541231) (xy 88.595528 96.773735) (xy 89.201812 96.774264)
+ (xy 89.762149 96.542738) (xy 90.191231 96.114404) (xy 90.423735 95.554472) (xy 90.424222 94.996) (xy 96.38056 94.996)
+ (xy 96.38056 96.52) (xy 96.424838 96.755317) (xy 96.56391 96.971441) (xy 96.77611 97.116431) (xy 97.028 97.16744)
+ (xy 98.552 97.16744) (xy 98.787317 97.123162) (xy 99.003441 96.98409) (xy 99.148431 96.77189) (xy 99.19944 96.52)
+ (xy 99.19944 95.996935) (xy 99.250291 95.996935) (xy 99.433582 96.440535) (xy 99.77268 96.780225) (xy 100.215959 96.96429)
+ (xy 100.695935 96.964709) (xy 101.139535 96.781418) (xy 101.479225 96.44232) (xy 101.66329 95.999041) (xy 101.663709 95.519065)
+ (xy 101.480418 95.075465) (xy 101.14132 94.735775) (xy 100.698041 94.55171) (xy 100.218065 94.551291) (xy 99.774465 94.734582)
+ (xy 99.434775 95.07368) (xy 99.25071 95.516959) (xy 99.250291 95.996935) (xy 99.19944 95.996935) (xy 99.19944 94.996)
+ (xy 99.155162 94.760683) (xy 99.01609 94.544559) (xy 98.80389 94.399569) (xy 98.620876 94.362508) (xy 98.973629 94.01037)
+ (xy 99.186757 93.4971) (xy 99.187242 92.941339) (xy 99.03918 92.583) (xy 111.11256 92.583) (xy 111.11256 94.107)
+ (xy 111.156838 94.342317) (xy 111.29591 94.558441) (xy 111.37777 94.614374) (xy 111.308559 94.65891) (xy 111.163569 94.87111)
+ (xy 111.11256 95.123) (xy 111.11256 96.647) (xy 111.156838 96.882317) (xy 111.29591 97.098441) (xy 111.37777 97.154374)
+ (xy 111.308559 97.19891) (xy 111.163569 97.41111) (xy 111.11256 97.663) (xy 111.11256 99.187) (xy 111.156838 99.422317)
+ (xy 111.29591 99.638441) (xy 111.50811 99.783431) (xy 111.76 99.83444) (xy 113.284 99.83444) (xy 113.519317 99.790162)
+ (xy 113.735441 99.65109) (xy 113.880431 99.43889) (xy 113.917492 99.255876) (xy 114.26963 99.608629) (xy 114.7829 99.821757)
+ (xy 115.338661 99.822242) (xy 115.852303 99.61001) (xy 116.197944 99.264971) (xy 122.535821 99.264971) (xy 122.693058 99.645515)
+ (xy 122.983954 99.936919) (xy 123.364223 100.09482) (xy 123.775971 100.095179) (xy 124.156515 99.937942) (xy 124.447919 99.647046)
+ (xy 124.60291 99.273784) (xy 128.079313 99.273784) (xy 128.243311 99.670689) (xy 128.546714 99.974622) (xy 128.943332 100.139313)
+ (xy 129.372784 100.139687) (xy 129.769689 99.975689) (xy 130.073622 99.672286) (xy 130.238313 99.275668) (xy 130.238425 99.146784)
+ (xy 137.731313 99.146784) (xy 137.895311 99.543689) (xy 138.198714 99.847622) (xy 138.595332 100.012313) (xy 139.024784 100.012687)
+ (xy 139.421689 99.848689) (xy 139.725622 99.545286) (xy 139.890313 99.148668) (xy 139.890687 98.719216) (xy 139.726689 98.322311)
+ (xy 139.423286 98.018378) (xy 139.026668 97.853687) (xy 138.597216 97.853313) (xy 138.200311 98.017311) (xy 137.896378 98.320714)
+ (xy 137.731687 98.717332) (xy 137.731313 99.146784) (xy 130.238425 99.146784) (xy 130.238687 98.846216) (xy 130.074689 98.449311)
+ (xy 129.771286 98.145378) (xy 129.374668 97.980687) (xy 128.945216 97.980313) (xy 128.548311 98.144311) (xy 128.244378 98.447714)
+ (xy 128.079687 98.844332) (xy 128.079313 99.273784) (xy 124.60291 99.273784) (xy 124.60582 99.266777) (xy 124.606179 98.855029)
+ (xy 124.448942 98.474485) (xy 124.158046 98.183081) (xy 123.777777 98.02518) (xy 123.366029 98.024821) (xy 122.985485 98.182058)
+ (xy 122.694081 98.472954) (xy 122.53618 98.853223) (xy 122.535821 99.264971) (xy 116.197944 99.264971) (xy 116.245629 99.21737)
+ (xy 116.458757 98.7041) (xy 116.459242 98.148339) (xy 116.24701 97.634697) (xy 115.85437 97.241371) (xy 115.646488 97.155051)
+ (xy 115.852303 97.07001) (xy 116.245629 96.67737) (xy 116.458757 96.1641) (xy 116.459242 95.608339) (xy 116.389122 95.438633)
+ (xy 128.206335 95.438633) (xy 128.351039 95.788843) (xy 128.618747 96.05702) (xy 128.968705 96.202335) (xy 129.347633 96.202665)
+ (xy 129.603696 96.096862) (xy 129.857705 96.202335) (xy 130.236633 96.202665) (xy 130.492696 96.096862) (xy 130.746665 96.202318)
+ (xy 130.746313 96.606784) (xy 130.910311 97.003689) (xy 131.213714 97.307622) (xy 131.610332 97.472313) (xy 132.039784 97.472687)
+ (xy 132.436689 97.308689) (xy 132.740622 97.005286) (xy 132.768055 96.939221) (xy 133.032481 97.049021) (xy 133.032313 97.241784)
+ (xy 133.196311 97.638689) (xy 133.499714 97.942622) (xy 133.896332 98.107313) (xy 134.325784 98.107687) (xy 134.722689 97.943689)
+ (xy 135.026622 97.640286) (xy 135.191313 97.243668) (xy 135.191554 96.967311) (xy 135.220686 96.996495) (xy 135.191687 97.066332)
+ (xy 135.191313 97.495784) (xy 135.355311 97.892689) (xy 135.658714 98.196622) (xy 136.055332 98.361313) (xy 136.484784 98.361687)
+ (xy 136.881689 98.197689) (xy 137.185622 97.894286) (xy 137.350313 97.497668) (xy 137.350687 97.068216) (xy 137.186689 96.671311)
+ (xy 136.995497 96.479784) (xy 137.731313 96.479784) (xy 137.895311 96.876689) (xy 138.198714 97.180622) (xy 138.595332 97.345313)
+ (xy 139.024784 97.345687) (xy 139.421689 97.181689) (xy 139.636498 96.967255) (xy 139.722714 97.053622) (xy 140.119332 97.218313)
+ (xy 140.548784 97.218687) (xy 140.889979 97.077708) (xy 140.992714 97.180622) (xy 141.389332 97.345313) (xy 141.818784 97.345687)
+ (xy 142.215689 97.181689) (xy 142.519622 96.878286) (xy 142.684313 96.481668) (xy 142.684687 96.052216) (xy 142.520689 95.655311)
+ (xy 142.304389 95.438633) (xy 146.621335 95.438633) (xy 146.766039 95.788843) (xy 147.033747 96.05702) (xy 147.383705 96.202335)
+ (xy 147.762633 96.202665) (xy 148.018696 96.096862) (xy 148.272705 96.202335) (xy 148.651633 96.202665) (xy 148.907696 96.096862)
+ (xy 149.161705 96.202335) (xy 149.540633 96.202665) (xy 149.543106 96.201643) (xy 149.542665 96.202705) (xy 149.542335 96.581633)
+ (xy 149.648138 96.837696) (xy 149.542665 97.091705) (xy 149.542335 97.470633) (xy 149.648138 97.726696) (xy 149.542665 97.980705)
+ (xy 149.542335 98.359633) (xy 149.648138 98.615696) (xy 149.542665 98.869705) (xy 149.542335 99.248633) (xy 149.687039 99.598843)
+ (xy 149.954747 99.86702) (xy 150.304705 100.012335) (xy 150.683633 100.012665) (xy 151.033843 99.867961) (xy 151.30202 99.600253)
+ (xy 151.447335 99.250295) (xy 151.447665 98.871367) (xy 151.341862 98.615304) (xy 151.447335 98.361295) (xy 151.447602 98.054086)
+ (xy 167.195269 98.054086) (xy 167.397854 98.54438) (xy 167.772647 98.919827) (xy 168.262587 99.123268) (xy 168.793086 99.123731)
+ (xy 169.28338 98.921146) (xy 169.658827 98.546353) (xy 169.862268 98.056413) (xy 169.86227 98.054086) (xy 174.815269 98.054086)
+ (xy 175.017854 98.54438) (xy 175.392647 98.919827) (xy 175.882587 99.123268) (xy 176.413086 99.123731) (xy 176.90338 98.921146)
+ (xy 177.278827 98.546353) (xy 177.482268 98.056413) (xy 177.482731 97.525914) (xy 177.280146 97.03562) (xy 176.905353 96.660173)
+ (xy 176.415413 96.456732) (xy 175.884914 96.456269) (xy 175.39462 96.658854) (xy 175.019173 97.033647) (xy 174.815732 97.523587)
+ (xy 174.815269 98.054086) (xy 169.86227 98.054086) (xy 169.862731 97.525914) (xy 169.660146 97.03562) (xy 169.285353 96.660173)
+ (xy 168.795413 96.456732) (xy 168.264914 96.456269) (xy 167.77462 96.658854) (xy 167.399173 97.033647) (xy 167.195732 97.523587)
+ (xy 167.195269 98.054086) (xy 151.447602 98.054086) (xy 151.447665 97.982367) (xy 151.341862 97.726304) (xy 151.447335 97.472295)
+ (xy 151.447665 97.093367) (xy 151.341862 96.837304) (xy 151.447335 96.583295) (xy 151.447665 96.204367) (xy 151.351564 95.971784)
+ (xy 165.798313 95.971784) (xy 165.962311 96.368689) (xy 166.265714 96.672622) (xy 166.662332 96.837313) (xy 167.091784 96.837687)
+ (xy 167.488689 96.673689) (xy 167.792622 96.370286) (xy 167.957313 95.973668) (xy 167.957687 95.544216) (xy 167.793689 95.147311)
+ (xy 167.490286 94.843378) (xy 167.093668 94.678687) (xy 166.664216 94.678313) (xy 166.267311 94.842311) (xy 165.963378 95.145714)
+ (xy 165.798687 95.542332) (xy 165.798313 95.971784) (xy 151.351564 95.971784) (xy 151.336486 95.935294) (xy 151.409622 95.862286)
+ (xy 151.574313 95.465668) (xy 151.574687 95.036216) (xy 151.410689 94.639311) (xy 151.107286 94.335378) (xy 150.710668 94.170687)
+ (xy 150.281216 94.170313) (xy 149.884311 94.334311) (xy 149.809764 94.408728) (xy 149.542295 94.297665) (xy 149.163367 94.297335)
+ (xy 148.907304 94.403138) (xy 148.653295 94.297665) (xy 148.274367 94.297335) (xy 148.018304 94.403138) (xy 147.764295 94.297665)
+ (xy 147.385367 94.297335) (xy 147.035157 94.442039) (xy 146.76698 94.709747) (xy 146.621665 95.059705) (xy 146.621335 95.438633)
+ (xy 142.304389 95.438633) (xy 142.217286 95.351378) (xy 141.820668 95.186687) (xy 141.391216 95.186313) (xy 141.050021 95.327292)
+ (xy 140.947286 95.224378) (xy 140.550668 95.059687) (xy 140.121216 95.059313) (xy 139.724311 95.223311) (xy 139.509502 95.437745)
+ (xy 139.423286 95.351378) (xy 139.026668 95.186687) (xy 138.597216 95.186313) (xy 138.200311 95.350311) (xy 137.896378 95.653714)
+ (xy 137.731687 96.050332) (xy 137.731313 96.479784) (xy 136.995497 96.479784) (xy 136.940314 96.424505) (xy 136.969313 96.354668)
+ (xy 136.969687 95.925216) (xy 136.805689 95.528311) (xy 136.502286 95.224378) (xy 136.105668 95.059687) (xy 135.676216 95.059313)
+ (xy 135.279311 95.223311) (xy 134.975378 95.526714) (xy 134.810687 95.923332) (xy 134.810446 96.199689) (xy 134.724286 96.113378)
+ (xy 134.429519 95.990979) (xy 134.429687 95.798216) (xy 134.265689 95.401311) (xy 133.962286 95.097378) (xy 133.637179 94.962381)
+ (xy 133.503689 94.639311) (xy 133.200286 94.335378) (xy 132.803668 94.170687) (xy 132.374216 94.170313) (xy 131.977311 94.334311)
+ (xy 131.673378 94.637714) (xy 131.672869 94.638939) (xy 131.477253 94.44298) (xy 131.127295 94.297665) (xy 130.748367 94.297335)
+ (xy 130.492304 94.403138) (xy 130.238295 94.297665) (xy 129.859367 94.297335) (xy 129.603304 94.403138) (xy 129.349295 94.297665)
+ (xy 128.970367 94.297335) (xy 128.620157 94.442039) (xy 128.35198 94.709747) (xy 128.206665 95.059705) (xy 128.206335 95.438633)
+ (xy 116.389122 95.438633) (xy 116.24701 95.094697) (xy 115.85437 94.701371) (xy 115.646488 94.615051) (xy 115.852303 94.53001)
+ (xy 116.214311 94.168633) (xy 121.221335 94.168633) (xy 121.366039 94.518843) (xy 121.633747 94.78702) (xy 121.983705 94.932335)
+ (xy 122.362633 94.932665) (xy 122.618696 94.826862) (xy 122.872705 94.932335) (xy 123.251633 94.932665) (xy 123.507696 94.826862)
+ (xy 123.761705 94.932335) (xy 124.140633 94.932665) (xy 124.396696 94.826862) (xy 124.650705 94.932335) (xy 125.029633 94.932665)
+ (xy 125.379843 94.787961) (xy 125.64802 94.520253) (xy 125.793335 94.170295) (xy 125.793602 93.863376) (xy 126.014843 93.771961)
+ (xy 126.10117 93.685784) (xy 162.242313 93.685784) (xy 162.406311 94.082689) (xy 162.709714 94.386622) (xy 163.106332 94.551313)
+ (xy 163.535784 94.551687) (xy 163.932689 94.387689) (xy 164.236622 94.084286) (xy 164.401313 93.687668) (xy 164.401687 93.258216)
+ (xy 164.237689 92.861311) (xy 163.969932 92.593086) (xy 167.195269 92.593086) (xy 167.397854 93.08338) (xy 167.772647 93.458827)
+ (xy 168.262587 93.662268) (xy 168.793086 93.662731) (xy 169.28338 93.460146) (xy 169.566234 93.177784) (xy 171.386313 93.177784)
+ (xy 171.550311 93.574689) (xy 171.853714 93.878622) (xy 172.250332 94.043313) (xy 172.679784 94.043687) (xy 172.992118 93.914633)
+ (xy 178.244335 93.914633) (xy 178.389039 94.264843) (xy 178.656747 94.53302) (xy 179.006705 94.678335) (xy 179.385633 94.678665)
+ (xy 179.735843 94.533961) (xy 180.00402 94.266253) (xy 180.149335 93.916295) (xy 180.149665 93.537367) (xy 180.004961 93.187157)
+ (xy 179.949488 93.131586) (xy 180.243843 93.009961) (xy 180.51202 92.742253) (xy 180.657335 92.392295) (xy 180.657665 92.013367)
+ (xy 180.62066 91.923807) (xy 180.873622 91.671286) (xy 181.038313 91.274668) (xy 181.038687 90.845216) (xy 180.874689 90.448311)
+ (xy 180.810275 90.383784) (xy 180.911313 90.383784) (xy 181.075311 90.780689) (xy 181.378714 91.084622) (xy 181.775332 91.249313)
+ (xy 182.204784 91.249687) (xy 182.601689 91.085689) (xy 182.618321 91.069086) (xy 187.896269 91.069086) (xy 188.098854 91.55938)
+ (xy 188.473647 91.934827) (xy 188.963587 92.138268) (xy 189.494086 92.138731) (xy 189.98438 91.936146) (xy 190.359827 91.561353)
+ (xy 190.563268 91.071413) (xy 190.563731 90.540914) (xy 190.361146 90.05062) (xy 189.986353 89.675173) (xy 189.664882 89.541686)
+ (xy 189.922929 89.4348) (xy 189.984583 89.199188) (xy 189.23 88.444605) (xy 188.475417 89.199188) (xy 188.537071 89.4348)
+ (xy 188.816312 89.533083) (xy 188.47562 89.673854) (xy 188.100173 90.048647) (xy 187.896732 90.538587) (xy 187.896269 91.069086)
+ (xy 182.618321 91.069086) (xy 182.905622 90.782286) (xy 183.070313 90.385668) (xy 183.070687 89.956216) (xy 182.906689 89.559311)
+ (xy 182.603286 89.255378) (xy 182.206668 89.090687) (xy 181.777216 89.090313) (xy 181.380311 89.254311) (xy 181.076378 89.557714)
+ (xy 180.911687 89.954332) (xy 180.911313 90.383784) (xy 180.810275 90.383784) (xy 180.571286 90.144378) (xy 180.174668 89.979687)
+ (xy 179.745216 89.979313) (xy 179.348311 90.143311) (xy 179.044378 90.446714) (xy 178.879687 90.843332) (xy 178.879313 91.272784)
+ (xy 178.998548 91.561355) (xy 178.89798 91.661747) (xy 178.752665 92.011705) (xy 178.752335 92.390633) (xy 178.897039 92.740843)
+ (xy 178.952512 92.796414) (xy 178.658157 92.918039) (xy 178.38998 93.185747) (xy 178.244665 93.535705) (xy 178.244335 93.914633)
+ (xy 172.992118 93.914633) (xy 173.076689 93.879689) (xy 173.380622 93.576286) (xy 173.545313 93.179668) (xy 173.545687 92.750216)
+ (xy 173.480763 92.593086) (xy 174.815269 92.593086) (xy 175.017854 93.08338) (xy 175.392647 93.458827) (xy 175.882587 93.662268)
+ (xy 176.413086 93.662731) (xy 176.90338 93.460146) (xy 177.278827 93.085353) (xy 177.482268 92.595413) (xy 177.482731 92.064914)
+ (xy 177.280146 91.57462) (xy 176.905353 91.199173) (xy 176.415413 90.995732) (xy 175.884914 90.995269) (xy 175.39462 91.197854)
+ (xy 175.019173 91.572647) (xy 174.815732 92.062587) (xy 174.815269 92.593086) (xy 173.480763 92.593086) (xy 173.381689 92.353311)
+ (xy 173.078286 92.049378) (xy 172.681668 91.884687) (xy 172.252216 91.884313) (xy 171.855311 92.048311) (xy 171.551378 92.351714)
+ (xy 171.386687 92.748332) (xy 171.386313 93.177784) (xy 169.566234 93.177784) (xy 169.658827 93.085353) (xy 169.862268 92.595413)
+ (xy 169.862731 92.064914) (xy 169.660146 91.57462) (xy 169.285353 91.199173) (xy 168.795413 90.995732) (xy 168.264914 90.995269)
+ (xy 167.77462 91.197854) (xy 167.399173 91.572647) (xy 167.195732 92.062587) (xy 167.195269 92.593086) (xy 163.969932 92.593086)
+ (xy 163.934286 92.557378) (xy 163.537668 92.392687) (xy 163.108216 92.392313) (xy 162.711311 92.556311) (xy 162.407378 92.859714)
+ (xy 162.242687 93.256332) (xy 162.242313 93.685784) (xy 126.10117 93.685784) (xy 126.28302 93.504253) (xy 126.428335 93.154295)
+ (xy 126.428665 92.775367) (xy 126.283961 92.425157) (xy 126.016253 92.15698) (xy 125.666295 92.011665) (xy 125.287367 92.011335)
+ (xy 124.937157 92.156039) (xy 124.66898 92.423747) (xy 124.523665 92.773705) (xy 124.523398 93.080624) (xy 124.396304 93.133138)
+ (xy 124.142295 93.027665) (xy 123.763367 93.027335) (xy 123.507304 93.133138) (xy 123.253295 93.027665) (xy 122.874367 93.027335)
+ (xy 122.618304 93.133138) (xy 122.364295 93.027665) (xy 121.985367 93.027335) (xy 121.635157 93.172039) (xy 121.36698 93.439747)
+ (xy 121.221665 93.789705) (xy 121.221335 94.168633) (xy 116.214311 94.168633) (xy 116.245629 94.13737) (xy 116.458757 93.6241)
+ (xy 116.459242 93.068339) (xy 116.24701 92.554697) (xy 115.85437 92.161371) (xy 115.3411 91.948243) (xy 114.785339 91.947758)
+ (xy 114.271697 92.15999) (xy 113.918237 92.512833) (xy 113.887162 92.347683) (xy 113.74809 92.131559) (xy 113.53589 91.986569)
+ (xy 113.284 91.93556) (xy 111.76 91.93556) (xy 111.524683 91.979838) (xy 111.308559 92.11891) (xy 111.163569 92.33111)
+ (xy 111.11256 92.583) (xy 99.03918 92.583) (xy 98.97501 92.427697) (xy 98.58237 92.034371) (xy 98.0691 91.821243)
+ (xy 97.513339 91.820758) (xy 96.999697 92.03299) (xy 96.606371 92.42563) (xy 96.393243 92.9389) (xy 96.392758 93.494661)
+ (xy 96.60499 94.008303) (xy 96.957833 94.361763) (xy 96.792683 94.392838) (xy 96.576559 94.53191) (xy 96.431569 94.74411)
+ (xy 96.38056 94.996) (xy 90.424222 94.996) (xy 90.424264 94.948188) (xy 90.192738 94.387851) (xy 89.764404 93.958769)
+ (xy 89.204472 93.726265) (xy 88.598188 93.725736) (xy 88.037851 93.957262) (xy 87.608769 94.385596) (xy 87.376265 94.945528)
+ (xy 87.375736 95.551812) (xy 72.517 95.551812) (xy 72.517 91.501633) (xy 131.127335 91.501633) (xy 131.272039 91.851843)
+ (xy 131.508487 92.088706) (xy 131.508335 92.263633) (xy 131.653039 92.613843) (xy 131.920747 92.88202) (xy 132.270705 93.027335)
+ (xy 132.649633 93.027665) (xy 132.961913 92.898633) (xy 152.082335 92.898633) (xy 152.227039 93.248843) (xy 152.494747 93.51702)
+ (xy 152.844705 93.662335) (xy 153.223633 93.662665) (xy 153.573843 93.517961) (xy 153.84202 93.250253) (xy 153.987335 92.900295)
+ (xy 153.987427 92.79475) (xy 154.241705 92.900335) (xy 154.620633 92.900665) (xy 154.970843 92.755961) (xy 155.23902 92.488253)
+ (xy 155.384335 92.138295) (xy 155.384665 91.759367) (xy 155.239961 91.409157) (xy 154.972253 91.14098) (xy 154.622295 90.995665)
+ (xy 154.243367 90.995335) (xy 153.893157 91.140039) (xy 153.62498 91.407747) (xy 153.479665 91.757705) (xy 153.479573 91.86325)
+ (xy 153.225295 91.757665) (xy 152.846367 91.757335) (xy 152.496157 91.902039) (xy 152.22798 92.169747) (xy 152.082665 92.519705)
+ (xy 152.082335 92.898633) (xy 132.961913 92.898633) (xy 132.999843 92.882961) (xy 133.26802 92.615253) (xy 133.413335 92.265295)
+ (xy 133.413665 91.886367) (xy 133.268961 91.536157) (xy 133.032513 91.299294) (xy 133.032665 91.124367) (xy 132.887961 90.774157)
+ (xy 132.620253 90.50598) (xy 132.270295 90.360665) (xy 131.891367 90.360335) (xy 131.541157 90.505039) (xy 131.27298 90.772747)
+ (xy 131.127665 91.122705) (xy 131.127335 91.501633) (xy 72.517 91.501633) (xy 72.517 90.247971) (xy 96.246821 90.247971)
+ (xy 96.404058 90.628515) (xy 96.694954 90.919919) (xy 97.075223 91.07782) (xy 97.486971 91.078179) (xy 97.867515 90.920942)
+ (xy 98.158919 90.630046) (xy 98.159365 90.628971) (xy 105.644821 90.628971) (xy 105.802058 91.009515) (xy 106.092954 91.300919)
+ (xy 106.473223 91.45882) (xy 106.884971 91.459179) (xy 107.265515 91.301942) (xy 107.556919 91.011046) (xy 107.71482 90.630777)
+ (xy 107.715179 90.219029) (xy 107.557942 89.838485) (xy 107.267046 89.547081) (xy 106.886777 89.38918) (xy 106.475029 89.388821)
+ (xy 106.094485 89.546058) (xy 105.803081 89.836954) (xy 105.64518 90.217223) (xy 105.644821 90.628971) (xy 98.159365 90.628971)
+ (xy 98.31682 90.249777) (xy 98.317179 89.838029) (xy 98.159942 89.457485) (xy 97.869046 89.166081) (xy 97.488777 89.00818)
+ (xy 97.077029 89.007821) (xy 96.696485 89.165058) (xy 96.405081 89.455954) (xy 96.24718 89.836223) (xy 96.246821 90.247971)
+ (xy 72.517 90.247971) (xy 72.517 86.741) (xy 87.36356 86.741) (xy 87.36356 88.519) (xy 87.407838 88.754317)
+ (xy 87.54691 88.970441) (xy 87.75911 89.115431) (xy 88.011 89.16644) (xy 89.789 89.16644) (xy 90.024317 89.122162)
+ (xy 90.240441 88.98309) (xy 90.385431 88.77089) (xy 90.43644 88.519) (xy 90.43644 86.741) (xy 90.392162 86.505683)
+ (xy 90.25309 86.289559) (xy 90.04089 86.144569) (xy 89.789 86.09356) (xy 88.011 86.09356) (xy 87.775683 86.137838)
+ (xy 87.559559 86.27691) (xy 87.414569 86.48911) (xy 87.36356 86.741) (xy 72.517 86.741) (xy 72.517 84.820935)
+ (xy 101.917291 84.820935) (xy 102.100582 85.264535) (xy 102.43968 85.604225) (xy 102.882959 85.78829) (xy 103.362935 85.788709)
+ (xy 103.517123 85.725) (xy 110.35056 85.725) (xy 110.35056 87.249) (xy 110.394838 87.484317) (xy 110.53391 87.700441)
+ (xy 110.74611 87.845431) (xy 110.929124 87.882492) (xy 110.576371 88.23463) (xy 110.363243 88.7479) (xy 110.362758 89.303661)
+ (xy 110.57499 89.817303) (xy 110.96763 90.210629) (xy 111.4809 90.423757) (xy 112.036661 90.424242) (xy 112.550303 90.21201)
+ (xy 112.943629 89.81937) (xy 113.029949 89.611488) (xy 113.11499 89.817303) (xy 113.50763 90.210629) (xy 114.0209 90.423757)
+ (xy 114.576661 90.424242) (xy 114.981941 90.256784) (xy 121.856313 90.256784) (xy 122.020311 90.653689) (xy 122.323714 90.957622)
+ (xy 122.720332 91.122313) (xy 123.149784 91.122687) (xy 123.546689 90.958689) (xy 123.850622 90.655286) (xy 124.015313 90.258668)
+ (xy 124.015543 89.993971) (xy 127.996821 89.993971) (xy 128.154058 90.374515) (xy 128.444954 90.665919) (xy 128.825223 90.82382)
+ (xy 129.236971 90.824179) (xy 129.617515 90.666942) (xy 129.908919 90.376046) (xy 130.06682 89.995777) (xy 130.067043 89.739971)
+ (xy 132.695821 89.739971) (xy 132.853058 90.120515) (xy 133.143954 90.411919) (xy 133.524223 90.56982) (xy 133.935971 90.570179)
+ (xy 134.316515 90.412942) (xy 134.607919 90.122046) (xy 134.76582 89.741777) (xy 134.766179 89.330029) (xy 134.608942 88.949485)
+ (xy 134.494291 88.834633) (xy 134.683335 88.834633) (xy 134.828039 89.184843) (xy 135.095747 89.45302) (xy 135.445705 89.598335)
+ (xy 135.824633 89.598665) (xy 136.080696 89.492862) (xy 136.334705 89.598335) (xy 136.713633 89.598665) (xy 137.063843 89.453961)
+ (xy 137.286221 89.231971) (xy 140.569821 89.231971) (xy 140.727058 89.612515) (xy 141.017954 89.903919) (xy 141.398223 90.06182)
+ (xy 141.809971 90.062179) (xy 142.190515 89.904942) (xy 142.481919 89.614046) (xy 142.63982 89.233777) (xy 142.639924 89.113784)
+ (xy 149.542313 89.113784) (xy 149.706311 89.510689) (xy 150.009714 89.814622) (xy 150.406332 89.979313) (xy 150.835784 89.979687)
+ (xy 151.232689 89.815689) (xy 151.536622 89.512286) (xy 151.701313 89.115668) (xy 151.701687 88.686216) (xy 151.668454 88.605784)
+ (xy 151.955313 88.605784) (xy 152.119311 89.002689) (xy 152.422714 89.306622) (xy 152.819332 89.471313) (xy 153.248784 89.471687)
+ (xy 153.645689 89.307689) (xy 153.949622 89.004286) (xy 154.114313 88.607668) (xy 154.114333 88.58509) (xy 154.200714 88.671622)
+ (xy 154.597332 88.836313) (xy 155.001133 88.836665) (xy 155.216714 89.052622) (xy 155.613332 89.217313) (xy 156.042784 89.217687)
+ (xy 156.303989 89.109759) (xy 156.29198 89.121747) (xy 156.146665 89.471705) (xy 156.146335 89.850633) (xy 156.252138 90.106696)
+ (xy 156.146665 90.360705) (xy 156.146335 90.739633) (xy 156.291039 91.089843) (xy 156.558747 91.35802) (xy 156.908705 91.503335)
+ (xy 157.287633 91.503665) (xy 157.637843 91.358961) (xy 157.90602 91.091253) (xy 158.051335 90.741295) (xy 158.051665 90.362367)
+ (xy 157.945862 90.106304) (xy 158.051335 89.852295) (xy 158.051535 89.621784) (xy 173.672313 89.621784) (xy 173.836311 90.018689)
+ (xy 174.139714 90.322622) (xy 174.536332 90.487313) (xy 174.965784 90.487687) (xy 175.362689 90.323689) (xy 175.666622 90.020286)
+ (xy 175.831313 89.623668) (xy 175.831687 89.194216) (xy 175.667689 88.797311) (xy 175.364286 88.493378) (xy 174.967668 88.328687)
+ (xy 174.538216 88.328313) (xy 174.141311 88.492311) (xy 173.837378 88.795714) (xy 173.672687 89.192332) (xy 173.672313 89.621784)
+ (xy 158.051535 89.621784) (xy 158.051665 89.473367) (xy 157.906961 89.123157) (xy 157.657832 88.873591) (xy 157.836689 88.799689)
+ (xy 158.140622 88.496286) (xy 158.305313 88.099668) (xy 158.305687 87.670216) (xy 158.240763 87.513086) (xy 167.195269 87.513086)
+ (xy 167.397854 88.00338) (xy 167.772647 88.378827) (xy 168.262587 88.582268) (xy 168.793086 88.582731) (xy 169.28338 88.380146)
+ (xy 169.658827 88.005353) (xy 169.862268 87.515413) (xy 169.86227 87.513086) (xy 174.815269 87.513086) (xy 175.017854 88.00338)
+ (xy 175.392647 88.378827) (xy 175.882587 88.582268) (xy 176.413086 88.582731) (xy 176.90338 88.380146) (xy 177.278827 88.005353)
+ (xy 177.355555 87.820573) (xy 177.355335 88.072633) (xy 177.461138 88.328696) (xy 177.381927 88.519459) (xy 177.228295 88.455665)
+ (xy 176.849367 88.455335) (xy 176.499157 88.600039) (xy 176.23098 88.867747) (xy 176.085665 89.217705) (xy 176.085335 89.596633)
+ (xy 176.230039 89.946843) (xy 176.497747 90.21502) (xy 176.847705 90.360335) (xy 177.226633 90.360665) (xy 177.576843 90.215961)
+ (xy 177.84502 89.948253) (xy 177.964073 89.661541) (xy 178.117705 89.725335) (xy 178.496633 89.725665) (xy 178.846843 89.580961)
+ (xy 179.11502 89.313253) (xy 179.260335 88.963295) (xy 179.260665 88.584367) (xy 179.154862 88.328304) (xy 179.260335 88.074295)
+ (xy 179.260665 87.695367) (xy 179.207422 87.56651) (xy 179.410784 87.566687) (xy 179.411236 87.5665) (xy 185.34406 87.5665)
+ (xy 185.34406 88.9635) (xy 185.388338 89.198817) (xy 185.52741 89.414941) (xy 185.73961 89.559931) (xy 185.9915 89.61094)
+ (xy 187.3885 89.61094) (xy 187.623817 89.566662) (xy 187.839941 89.42759) (xy 187.984931 89.21539) (xy 188.03594 88.9635)
+ (xy 188.03594 88.89936) (xy 188.0602 88.957929) (xy 188.295812 89.019583) (xy 189.050395 88.265) (xy 189.409605 88.265)
+ (xy 190.164188 89.019583) (xy 190.3998 88.957929) (xy 190.575927 88.45752) (xy 190.547148 87.927801) (xy 190.3998 87.572071)
+ (xy 190.164188 87.510417) (xy 189.409605 88.265) (xy 189.050395 88.265) (xy 188.295812 87.510417) (xy 188.0602 87.572071)
+ (xy 188.03594 87.640998) (xy 188.03594 87.5665) (xy 187.991662 87.331183) (xy 187.991424 87.330812) (xy 188.475417 87.330812)
+ (xy 189.23 88.085395) (xy 189.984583 87.330812) (xy 189.922929 87.0952) (xy 189.42252 86.919073) (xy 188.892801 86.947852)
+ (xy 188.537071 87.0952) (xy 188.475417 87.330812) (xy 187.991424 87.330812) (xy 187.85259 87.115059) (xy 187.64039 86.970069)
+ (xy 187.3885 86.91906) (xy 185.9915 86.91906) (xy 185.756183 86.963338) (xy 185.540059 87.10241) (xy 185.395069 87.31461)
+ (xy 185.34406 87.5665) (xy 179.411236 87.5665) (xy 179.807689 87.402689) (xy 180.111622 87.099286) (xy 180.276313 86.702668)
+ (xy 180.276687 86.273216) (xy 180.112689 85.876311) (xy 179.809286 85.572378) (xy 179.456058 85.425704) (xy 203.486833 85.425704)
+ (xy 203.650831 85.822609) (xy 203.954234 86.126542) (xy 204.350852 86.291233) (xy 204.780304 86.291607) (xy 205.177209 86.127609)
+ (xy 205.481142 85.824206) (xy 205.645833 85.427588) (xy 205.646207 84.998136) (xy 205.482209 84.601231) (xy 205.178806 84.297298)
+ (xy 204.782188 84.132607) (xy 204.352736 84.132233) (xy 203.955831 84.296231) (xy 203.651898 84.599634) (xy 203.487207 84.996252)
+ (xy 203.486833 85.425704) (xy 179.456058 85.425704) (xy 179.412668 85.407687) (xy 178.983216 85.407313) (xy 178.586311 85.571311)
+ (xy 178.282378 85.874714) (xy 178.117687 86.271332) (xy 178.117313 86.700784) (xy 178.212608 86.931416) (xy 178.119367 86.931335)
+ (xy 177.769157 87.076039) (xy 177.50098 87.343747) (xy 177.482379 87.388544) (xy 177.482731 86.984914) (xy 177.280146 86.49462)
+ (xy 176.905353 86.119173) (xy 176.415413 85.915732) (xy 175.884914 85.915269) (xy 175.39462 86.117854) (xy 175.019173 86.492647)
+ (xy 174.815732 86.982587) (xy 174.815269 87.513086) (xy 169.86227 87.513086) (xy 169.862731 86.984914) (xy 169.660146 86.49462)
+ (xy 169.285353 86.119173) (xy 168.795413 85.915732) (xy 168.264914 85.915269) (xy 167.77462 86.117854) (xy 167.399173 86.492647)
+ (xy 167.195732 86.982587) (xy 167.195269 87.513086) (xy 158.240763 87.513086) (xy 158.141689 87.273311) (xy 157.838286 86.969378)
+ (xy 157.441668 86.804687) (xy 157.012216 86.804313) (xy 156.615311 86.968311) (xy 156.383737 87.199481) (xy 156.044668 87.058687)
+ (xy 155.640867 87.058335) (xy 155.425286 86.842378) (xy 155.028668 86.677687) (xy 154.599216 86.677313) (xy 154.202311 86.841311)
+ (xy 153.898378 87.144714) (xy 153.733687 87.541332) (xy 153.733667 87.56391) (xy 153.647286 87.477378) (xy 153.250668 87.312687)
+ (xy 152.821216 87.312313) (xy 152.424311 87.476311) (xy 152.120378 87.779714) (xy 151.955687 88.176332) (xy 151.955313 88.605784)
+ (xy 151.668454 88.605784) (xy 151.537689 88.289311) (xy 151.234286 87.985378) (xy 150.837668 87.820687) (xy 150.408216 87.820313)
+ (xy 150.011311 87.984311) (xy 149.707378 88.287714) (xy 149.542687 88.684332) (xy 149.542313 89.113784) (xy 142.639924 89.113784)
+ (xy 142.640179 88.822029) (xy 142.482942 88.441485) (xy 142.192046 88.150081) (xy 141.811777 87.99218) (xy 141.400029 87.991821)
+ (xy 141.019485 88.149058) (xy 140.728081 88.439954) (xy 140.57018 88.820223) (xy 140.569821 89.231971) (xy 137.286221 89.231971)
+ (xy 137.33202 89.186253) (xy 137.477335 88.836295) (xy 137.477665 88.457367) (xy 137.332961 88.107157) (xy 137.065253 87.83898)
+ (xy 136.715295 87.693665) (xy 136.336367 87.693335) (xy 136.080304 87.799138) (xy 135.826295 87.693665) (xy 135.447367 87.693335)
+ (xy 135.097157 87.838039) (xy 134.82898 88.105747) (xy 134.683665 88.455705) (xy 134.683335 88.834633) (xy 134.494291 88.834633)
+ (xy 134.318046 88.658081) (xy 133.937777 88.50018) (xy 133.526029 88.499821) (xy 133.145485 88.657058) (xy 132.854081 88.947954)
+ (xy 132.69618 89.328223) (xy 132.695821 89.739971) (xy 130.067043 89.739971) (xy 130.067179 89.584029) (xy 129.909942 89.203485)
+ (xy 129.619046 88.912081) (xy 129.238777 88.75418) (xy 128.827029 88.753821) (xy 128.446485 88.911058) (xy 128.155081 89.201954)
+ (xy 127.99718 89.582223) (xy 127.996821 89.993971) (xy 124.015543 89.993971) (xy 124.015687 89.829216) (xy 123.851689 89.432311)
+ (xy 123.548286 89.128378) (xy 123.151668 88.963687) (xy 122.722216 88.963313) (xy 122.325311 89.127311) (xy 122.021378 89.430714)
+ (xy 121.856687 89.827332) (xy 121.856313 90.256784) (xy 114.981941 90.256784) (xy 115.090303 90.21201) (xy 115.483629 89.81937)
+ (xy 115.696757 89.3061) (xy 115.697242 88.750339) (xy 115.48501 88.236697) (xy 115.09237 87.843371) (xy 114.884488 87.757051)
+ (xy 115.090303 87.67201) (xy 115.483629 87.27937) (xy 115.696757 86.7661) (xy 115.697242 86.210339) (xy 115.532563 85.811784)
+ (xy 119.189313 85.811784) (xy 119.353311 86.208689) (xy 119.656714 86.512622) (xy 120.053332 86.677313) (xy 120.482784 86.677687)
+ (xy 120.879689 86.513689) (xy 121.030998 86.362644) (xy 121.180714 86.512622) (xy 121.577332 86.677313) (xy 122.006784 86.677687)
+ (xy 122.403689 86.513689) (xy 122.491387 86.426144) (xy 122.577714 86.512622) (xy 122.974332 86.677313) (xy 123.403784 86.677687)
+ (xy 123.745136 86.536643) (xy 123.974714 86.766622) (xy 124.371332 86.931313) (xy 124.800784 86.931687) (xy 125.197689 86.767689)
+ (xy 125.501622 86.464286) (xy 125.666313 86.067668) (xy 125.666687 85.638216) (xy 125.580978 85.430784) (xy 133.667313 85.430784)
+ (xy 133.831311 85.827689) (xy 134.134714 86.131622) (xy 134.531332 86.296313) (xy 134.960784 86.296687) (xy 135.301979 86.155708)
+ (xy 135.404714 86.258622) (xy 135.801332 86.423313) (xy 136.230784 86.423687) (xy 136.588891 86.27572) (xy 136.944332 86.423313)
+ (xy 137.373784 86.423687) (xy 137.572441 86.341603) (xy 137.635747 86.40502) (xy 137.985705 86.550335) (xy 138.364633 86.550665)
+ (xy 138.620696 86.444862) (xy 138.874705 86.550335) (xy 139.253633 86.550665) (xy 139.509696 86.444862) (xy 139.763705 86.550335)
+ (xy 140.142633 86.550665) (xy 140.492843 86.405961) (xy 140.76102 86.138253) (xy 140.906335 85.788295) (xy 140.906665 85.409367)
+ (xy 140.761961 85.059157) (xy 140.752605 85.049784) (xy 147.764313 85.049784) (xy 147.928311 85.446689) (xy 148.231714 85.750622)
+ (xy 148.628332 85.915313) (xy 149.057784 85.915687) (xy 149.454689 85.751689) (xy 149.758622 85.448286) (xy 149.828304 85.280473)
+ (xy 150.073784 85.280687) (xy 150.470689 85.116689) (xy 150.774622 84.813286) (xy 150.796901 84.759632) (xy 150.898714 84.861622)
+ (xy 151.295332 85.026313) (xy 151.320333 85.026335) (xy 151.320313 85.049784) (xy 151.484311 85.446689) (xy 151.787714 85.750622)
+ (xy 152.184332 85.915313) (xy 152.613784 85.915687) (xy 153.010689 85.751689) (xy 153.314622 85.448286) (xy 153.479313 85.051668)
+ (xy 153.479687 84.622216) (xy 153.315689 84.225311) (xy 153.242477 84.151971) (xy 192.893821 84.151971) (xy 193.051058 84.532515)
+ (xy 193.341954 84.823919) (xy 193.722223 84.98182) (xy 194.133971 84.982179) (xy 194.514515 84.824942) (xy 194.805919 84.534046)
+ (xy 194.96382 84.153777) (xy 194.964179 83.742029) (xy 194.806942 83.361485) (xy 194.516046 83.070081) (xy 194.135777 82.91218)
+ (xy 193.724029 82.911821) (xy 193.343485 83.069058) (xy 193.052081 83.359954) (xy 192.89418 83.740223) (xy 192.893821 84.151971)
+ (xy 153.242477 84.151971) (xy 153.012286 83.921378) (xy 152.615668 83.756687) (xy 152.590667 83.756665) (xy 152.590687 83.733216)
+ (xy 152.426689 83.336311) (xy 152.123286 83.032378) (xy 151.726668 82.867687) (xy 151.297216 82.867313) (xy 150.900311 83.031311)
+ (xy 150.596378 83.334714) (xy 150.574099 83.388368) (xy 150.472286 83.286378) (xy 150.075668 83.121687) (xy 149.646216 83.121313)
+ (xy 149.249311 83.285311) (xy 148.945378 83.588714) (xy 148.875696 83.756527) (xy 148.630216 83.756313) (xy 148.233311 83.920311)
+ (xy 147.929378 84.223714) (xy 147.764687 84.620332) (xy 147.764313 85.049784) (xy 140.752605 85.049784) (xy 140.494253 84.79098)
+ (xy 140.144295 84.645665) (xy 139.765367 84.645335) (xy 139.509304 84.751138) (xy 139.255295 84.645665) (xy 138.876367 84.645335)
+ (xy 138.620304 84.751138) (xy 138.366295 84.645665) (xy 137.987867 84.645335) (xy 137.772286 84.429378) (xy 137.375668 84.264687)
+ (xy 136.946216 84.264313) (xy 136.588109 84.41228) (xy 136.232668 84.264687) (xy 135.803216 84.264313) (xy 135.462021 84.405292)
+ (xy 135.359286 84.302378) (xy 134.962668 84.137687) (xy 134.533216 84.137313) (xy 134.136311 84.301311) (xy 133.832378 84.604714)
+ (xy 133.667687 85.001332) (xy 133.667313 85.430784) (xy 125.580978 85.430784) (xy 125.502689 85.241311) (xy 125.199286 84.937378)
+ (xy 124.802668 84.772687) (xy 124.373216 84.772313) (xy 124.031864 84.913357) (xy 123.802286 84.683378) (xy 123.405668 84.518687)
+ (xy 122.976216 84.518313) (xy 122.579311 84.682311) (xy 122.491613 84.769856) (xy 122.405286 84.683378) (xy 122.008668 84.518687)
+ (xy 121.579216 84.518313) (xy 121.182311 84.682311) (xy 121.031002 84.833356) (xy 120.881286 84.683378) (xy 120.484668 84.518687)
+ (xy 120.055216 84.518313) (xy 119.658311 84.682311) (xy 119.354378 84.985714) (xy 119.189687 85.382332) (xy 119.189313 85.811784)
+ (xy 115.532563 85.811784) (xy 115.48501 85.696697) (xy 115.09237 85.303371) (xy 114.5791 85.090243) (xy 114.023339 85.089758)
+ (xy 113.509697 85.30199) (xy 113.156237 85.654833) (xy 113.125162 85.489683) (xy 112.98609 85.273559) (xy 112.77389 85.128569)
+ (xy 112.522 85.07756) (xy 110.998 85.07756) (xy 110.762683 85.121838) (xy 110.546559 85.26091) (xy 110.401569 85.47311)
+ (xy 110.35056 85.725) (xy 103.517123 85.725) (xy 103.806535 85.605418) (xy 104.146225 85.26632) (xy 104.33029 84.823041)
+ (xy 104.330709 84.343065) (xy 104.199276 84.024971) (xy 110.216821 84.024971) (xy 110.374058 84.405515) (xy 110.664954 84.696919)
+ (xy 111.045223 84.85482) (xy 111.456971 84.855179) (xy 111.837515 84.697942) (xy 112.128919 84.407046) (xy 112.28682 84.026777)
+ (xy 112.287179 83.615029) (xy 112.129942 83.234485) (xy 111.904822 83.008971) (xy 130.663821 83.008971) (xy 130.821058 83.389515)
+ (xy 131.111954 83.680919) (xy 131.492223 83.83882) (xy 131.903971 83.839179) (xy 132.284515 83.681942) (xy 132.575919 83.391046)
+ (xy 132.73382 83.010777) (xy 132.734035 82.763784) (xy 133.286313 82.763784) (xy 133.450311 83.160689) (xy 133.753714 83.464622)
+ (xy 134.150332 83.629313) (xy 134.579784 83.629687) (xy 134.976689 83.465689) (xy 135.054895 83.387619) (xy 135.4839 83.565757)
+ (xy 136.039661 83.566242) (xy 136.553303 83.35401) (xy 136.946629 82.96137) (xy 137.032949 82.753488) (xy 137.11799 82.959303)
+ (xy 137.51063 83.352629) (xy 138.0239 83.565757) (xy 138.579661 83.566242) (xy 139.093303 83.35401) (xy 139.480141 82.967847)
+ (xy 139.595714 83.083622) (xy 139.992332 83.248313) (xy 140.421784 83.248687) (xy 140.717738 83.126401) (xy 140.890954 83.299919)
+ (xy 141.271223 83.45782) (xy 141.682971 83.458179) (xy 142.063515 83.300942) (xy 142.354919 83.010046) (xy 142.51282 82.629777)
+ (xy 142.513179 82.218029) (xy 142.355942 81.837485) (xy 142.065046 81.546081) (xy 141.684777 81.38818) (xy 141.273029 81.387821)
+ (xy 141.046806 81.481294) (xy 140.820286 81.254378) (xy 140.423668 81.089687) (xy 139.994216 81.089313) (xy 139.597311 81.253311)
+ (xy 139.479872 81.370545) (xy 139.09537 80.985371) (xy 138.887488 80.899051) (xy 139.093303 80.81401) (xy 139.486629 80.42137)
+ (xy 139.699757 79.9081) (xy 139.700242 79.352339) (xy 139.48801 78.838697) (xy 139.09537 78.445371) (xy 138.887488 78.359051)
+ (xy 139.093303 78.27401) (xy 139.486629 77.88137) (xy 139.699757 77.3681) (xy 139.700242 76.812339) (xy 139.48801 76.298697)
+ (xy 139.09537 75.905371) (xy 138.887488 75.819051) (xy 139.093303 75.73401) (xy 139.311722 75.515971) (xy 149.840821 75.515971)
+ (xy 149.998058 75.896515) (xy 150.288954 76.187919) (xy 150.669223 76.34582) (xy 151.080971 76.346179) (xy 151.461515 76.188942)
+ (xy 151.752919 75.898046) (xy 151.91082 75.517777) (xy 151.911179 75.106029) (xy 151.811437 74.864633) (xy 157.289335 74.864633)
+ (xy 157.434039 75.214843) (xy 157.701747 75.48302) (xy 158.051705 75.628335) (xy 158.430633 75.628665) (xy 158.703372 75.515971)
+ (xy 162.032821 75.515971) (xy 162.190058 75.896515) (xy 162.480954 76.187919) (xy 162.861223 76.34582) (xy 163.272971 76.346179)
+ (xy 163.653515 76.188942) (xy 163.944919 75.898046) (xy 164.10282 75.517777) (xy 164.103179 75.106029) (xy 163.945942 74.725485)
+ (xy 163.655046 74.434081) (xy 163.274777 74.27618) (xy 162.863029 74.275821) (xy 162.482485 74.433058) (xy 162.191081 74.723954)
+ (xy 162.03318 75.104223) (xy 162.032821 75.515971) (xy 158.703372 75.515971) (xy 158.780843 75.483961) (xy 159.04902 75.216253)
+ (xy 159.194335 74.866295) (xy 159.194665 74.487367) (xy 159.049961 74.137157) (xy 158.782253 73.86898) (xy 158.584823 73.787)
+ (xy 168.13556 73.787) (xy 168.13556 75.311) (xy 168.179838 75.546317) (xy 168.31891 75.762441) (xy 168.53111 75.907431)
+ (xy 168.714124 75.944492) (xy 168.361371 76.29663) (xy 168.148243 76.8099) (xy 168.147758 77.365661) (xy 168.35999 77.879303)
+ (xy 168.75263 78.272629) (xy 168.960512 78.358949) (xy 168.754697 78.44399) (xy 168.361371 78.83663) (xy 168.148243 79.3499)
+ (xy 168.147758 79.905661) (xy 168.35999 80.419303) (xy 168.75263 80.812629) (xy 168.960512 80.898949) (xy 168.754697 80.98399)
+ (xy 168.361371 81.37663) (xy 168.148243 81.8899) (xy 168.147758 82.445661) (xy 168.35999 82.959303) (xy 168.75263 83.352629)
+ (xy 169.2659 83.565757) (xy 169.821661 83.566242) (xy 170.335303 83.35401) (xy 170.728629 82.96137) (xy 170.814949 82.753488)
+ (xy 170.89999 82.959303) (xy 171.29263 83.352629) (xy 171.8059 83.565757) (xy 172.361661 83.566242) (xy 172.875303 83.35401)
+ (xy 173.268629 82.96137) (xy 173.481757 82.4481) (xy 173.482242 81.892339) (xy 173.27001 81.378697) (xy 172.87737 80.985371)
+ (xy 172.669488 80.899051) (xy 172.875303 80.81401) (xy 173.268629 80.42137) (xy 173.481757 79.9081) (xy 173.482242 79.352339)
+ (xy 173.27001 78.838697) (xy 172.87737 78.445371) (xy 172.669488 78.359051) (xy 172.875303 78.27401) (xy 173.268629 77.88137)
+ (xy 173.481757 77.3681) (xy 173.481821 77.293971) (xy 176.129821 77.293971) (xy 176.287058 77.674515) (xy 176.577954 77.965919)
+ (xy 176.958223 78.12382) (xy 177.369971 78.124179) (xy 177.750515 77.966942) (xy 178.041919 77.676046) (xy 178.19982 77.295777)
+ (xy 178.200179 76.884029) (xy 178.042942 76.503485) (xy 177.752046 76.212081) (xy 177.371777 76.05418) (xy 176.960029 76.053821)
+ (xy 176.579485 76.211058) (xy 176.288081 76.501954) (xy 176.13018 76.882223) (xy 176.129821 77.293971) (xy 173.481821 77.293971)
+ (xy 173.482242 76.812339) (xy 173.27001 76.298697) (xy 172.87737 75.905371) (xy 172.669488 75.819051) (xy 172.875303 75.73401)
+ (xy 173.268629 75.34137) (xy 173.466587 74.864633) (xy 185.229335 74.864633) (xy 185.374039 75.214843) (xy 185.641747 75.48302)
+ (xy 185.991705 75.628335) (xy 186.370633 75.628665) (xy 186.720843 75.483961) (xy 186.98902 75.216253) (xy 187.134335 74.866295)
+ (xy 187.134665 74.487367) (xy 186.989961 74.137157) (xy 186.722253 73.86898) (xy 186.372295 73.723665) (xy 185.993367 73.723335)
+ (xy 185.643157 73.868039) (xy 185.37498 74.135747) (xy 185.229665 74.485705) (xy 185.229335 74.864633) (xy 173.466587 74.864633)
+ (xy 173.481757 74.8281) (xy 173.482242 74.272339) (xy 173.27001 73.758697) (xy 173.122542 73.610971) (xy 193.655821 73.610971)
+ (xy 193.813058 73.991515) (xy 194.103954 74.282919) (xy 194.484223 74.44082) (xy 194.895971 74.441179) (xy 195.276515 74.283942)
+ (xy 195.567919 73.993046) (xy 195.653476 73.787) (xy 196.07556 73.787) (xy 196.07556 75.311) (xy 196.119838 75.546317)
+ (xy 196.25891 75.762441) (xy 196.47111 75.907431) (xy 196.654124 75.944492) (xy 196.301371 76.29663) (xy 196.088243 76.8099)
+ (xy 196.087758 77.365661) (xy 196.29999 77.879303) (xy 196.69263 78.272629) (xy 196.900512 78.358949) (xy 196.694697 78.44399)
+ (xy 196.301371 78.83663) (xy 196.088243 79.3499) (xy 196.087758 79.905661) (xy 196.29999 80.419303) (xy 196.69263 80.812629)
+ (xy 196.900512 80.898949) (xy 196.694697 80.98399) (xy 196.301371 81.37663) (xy 196.088243 81.8899) (xy 196.087758 82.445661)
+ (xy 196.29999 82.959303) (xy 196.69263 83.352629) (xy 197.2059 83.565757) (xy 197.761661 83.566242) (xy 198.275303 83.35401)
+ (xy 198.668629 82.96137) (xy 198.754949 82.753488) (xy 198.83999 82.959303) (xy 199.23263 83.352629) (xy 199.7459 83.565757)
+ (xy 200.301661 83.566242) (xy 200.815303 83.35401) (xy 201.208629 82.96137) (xy 201.421757 82.4481) (xy 201.422242 81.892339)
+ (xy 201.21001 81.378697) (xy 200.81737 80.985371) (xy 200.609488 80.899051) (xy 200.72827 80.849971) (xy 211.158961 80.849971)
+ (xy 211.316198 81.230515) (xy 211.607094 81.521919) (xy 211.987363 81.67982) (xy 212.399111 81.680179) (xy 212.779655 81.522942)
+ (xy 213.071059 81.232046) (xy 213.22896 80.851777) (xy 213.229319 80.440029) (xy 213.072082 80.059485) (xy 212.781186 79.768081)
+ (xy 212.400917 79.61018) (xy 211.989169 79.609821) (xy 211.608625 79.767058) (xy 211.317221 80.057954) (xy 211.15932 80.438223)
+ (xy 211.158961 80.849971) (xy 200.72827 80.849971) (xy 200.815303 80.81401) (xy 201.208629 80.42137) (xy 201.421757 79.9081)
+ (xy 201.422242 79.352339) (xy 201.257563 78.953784) (xy 204.581573 78.953784) (xy 204.745571 79.350689) (xy 205.048974 79.654622)
+ (xy 205.445592 79.819313) (xy 205.875044 79.819687) (xy 206.271949 79.655689) (xy 206.575882 79.352286) (xy 206.740573 78.955668)
+ (xy 206.740947 78.526216) (xy 206.576949 78.129311) (xy 206.273546 77.825378) (xy 205.876928 77.660687) (xy 205.447476 77.660313)
+ (xy 205.050571 77.824311) (xy 204.746638 78.127714) (xy 204.581947 78.524332) (xy 204.581573 78.953784) (xy 201.257563 78.953784)
+ (xy 201.21001 78.838697) (xy 200.81737 78.445371) (xy 200.609488 78.359051) (xy 200.815303 78.27401) (xy 201.208629 77.88137)
+ (xy 201.421757 77.3681) (xy 201.422242 76.812339) (xy 201.273862 76.453231) (xy 211.202141 76.453231) (xy 211.359378 76.833775)
+ (xy 211.650274 77.125179) (xy 212.030543 77.28308) (xy 212.442291 77.283439) (xy 212.822835 77.126202) (xy 213.114239 76.835306)
+ (xy 213.27214 76.455037) (xy 213.272499 76.043289) (xy 213.115262 75.662745) (xy 212.824366 75.371341) (xy 212.444097 75.21344)
+ (xy 212.032349 75.213081) (xy 211.651805 75.370318) (xy 211.360401 75.661214) (xy 211.2025 76.041483) (xy 211.202141 76.453231)
+ (xy 201.273862 76.453231) (xy 201.21001 76.298697) (xy 200.81737 75.905371) (xy 200.609488 75.819051) (xy 200.815303 75.73401)
+ (xy 201.208629 75.34137) (xy 201.421757 74.8281) (xy 201.422242 74.272339) (xy 201.21001 73.758697) (xy 200.81737 73.365371)
+ (xy 200.3041 73.152243) (xy 199.748339 73.151758) (xy 199.234697 73.36399) (xy 198.881237 73.716833) (xy 198.850162 73.551683)
+ (xy 198.71109 73.335559) (xy 198.49889 73.190569) (xy 198.247 73.13956) (xy 196.723 73.13956) (xy 196.487683 73.183838)
+ (xy 196.271559 73.32291) (xy 196.126569 73.53511) (xy 196.07556 73.787) (xy 195.653476 73.787) (xy 195.72582 73.612777)
+ (xy 195.726179 73.201029) (xy 195.568942 72.820485) (xy 195.278046 72.529081) (xy 194.897777 72.37118) (xy 194.486029 72.370821)
+ (xy 194.105485 72.528058) (xy 193.814081 72.818954) (xy 193.65618 73.199223) (xy 193.655821 73.610971) (xy 173.122542 73.610971)
+ (xy 172.87737 73.365371) (xy 172.3641 73.152243) (xy 171.808339 73.151758) (xy 171.294697 73.36399) (xy 170.941237 73.716833)
+ (xy 170.910162 73.551683) (xy 170.77109 73.335559) (xy 170.55889 73.190569) (xy 170.307 73.13956) (xy 168.783 73.13956)
+ (xy 168.547683 73.183838) (xy 168.331559 73.32291) (xy 168.186569 73.53511) (xy 168.13556 73.787) (xy 158.584823 73.787)
+ (xy 158.432295 73.723665) (xy 158.053367 73.723335) (xy 157.703157 73.868039) (xy 157.43498 74.135747) (xy 157.289665 74.485705)
+ (xy 157.289335 74.864633) (xy 151.811437 74.864633) (xy 151.753942 74.725485) (xy 151.463046 74.434081) (xy 151.082777 74.27618)
+ (xy 150.671029 74.275821) (xy 150.290485 74.433058) (xy 149.999081 74.723954) (xy 149.84118 75.104223) (xy 149.840821 75.515971)
+ (xy 139.311722 75.515971) (xy 139.486629 75.34137) (xy 139.699757 74.8281) (xy 139.700242 74.272339) (xy 139.48801 73.758697)
+ (xy 139.09537 73.365371) (xy 138.5821 73.152243) (xy 138.026339 73.151758) (xy 137.512697 73.36399) (xy 137.159237 73.716833)
+ (xy 137.128162 73.551683) (xy 136.98909 73.335559) (xy 136.77689 73.190569) (xy 136.525 73.13956) (xy 135.001 73.13956)
+ (xy 134.765683 73.183838) (xy 134.549559 73.32291) (xy 134.404569 73.53511) (xy 134.35356 73.787) (xy 134.35356 75.311)
+ (xy 134.397838 75.546317) (xy 134.53691 75.762441) (xy 134.74911 75.907431) (xy 134.932124 75.944492) (xy 134.579371 76.29663)
+ (xy 134.366243 76.8099) (xy 134.365758 77.365661) (xy 134.57799 77.879303) (xy 134.97063 78.272629) (xy 135.178512 78.358949)
+ (xy 134.972697 78.44399) (xy 134.579371 78.83663) (xy 134.366243 79.3499) (xy 134.365758 79.905661) (xy 134.57799 80.419303)
+ (xy 134.97063 80.812629) (xy 135.178512 80.898949) (xy 134.972697 80.98399) (xy 134.579371 81.37663) (xy 134.54033 81.470651)
+ (xy 134.152216 81.470313) (xy 133.755311 81.634311) (xy 133.451378 81.937714) (xy 133.286687 82.334332) (xy 133.286313 82.763784)
+ (xy 132.734035 82.763784) (xy 132.734179 82.599029) (xy 132.576942 82.218485) (xy 132.286046 81.927081) (xy 131.905777 81.76918)
+ (xy 131.494029 81.768821) (xy 131.113485 81.926058) (xy 130.822081 82.216954) (xy 130.66418 82.597223) (xy 130.663821 83.008971)
+ (xy 111.904822 83.008971) (xy 111.839046 82.943081) (xy 111.458777 82.78518) (xy 111.047029 82.784821) (xy 110.666485 82.942058)
+ (xy 110.375081 83.232954) (xy 110.21718 83.613223) (xy 110.216821 84.024971) (xy 104.199276 84.024971) (xy 104.147418 83.899465)
+ (xy 103.80832 83.559775) (xy 103.365041 83.37571) (xy 102.885065 83.375291) (xy 102.441465 83.558582) (xy 102.101775 83.89768)
+ (xy 101.91771 84.340959) (xy 101.917291 84.820935) (xy 72.517 84.820935) (xy 72.517 82.851812) (xy 87.375736 82.851812)
+ (xy 87.607262 83.412149) (xy 88.035596 83.841231) (xy 88.595528 84.073735) (xy 89.201812 84.074264) (xy 89.762149 83.842738)
+ (xy 90.191231 83.414404) (xy 90.423735 82.854472) (xy 90.424264 82.248188) (xy 90.192738 81.687851) (xy 89.764404 81.258769)
+ (xy 89.204472 81.026265) (xy 88.598188 81.025736) (xy 88.037851 81.257262) (xy 87.608769 81.685596) (xy 87.376265 82.245528)
+ (xy 87.375736 82.851812) (xy 72.517 82.851812) (xy 72.517 77.390812) (xy 79.247736 77.390812) (xy 79.479262 77.951149)
+ (xy 79.907596 78.380231) (xy 80.467528 78.612735) (xy 81.073812 78.613264) (xy 81.634149 78.381738) (xy 82.063231 77.953404)
+ (xy 82.295735 77.393472) (xy 82.296264 76.787188) (xy 82.064738 76.226851) (xy 82.037934 76.2) (xy 91.93556 76.2)
+ (xy 91.93556 77.978) (xy 91.979838 78.213317) (xy 92.11891 78.429441) (xy 92.33111 78.574431) (xy 92.583 78.62544)
+ (xy 94.361 78.62544) (xy 94.596317 78.581162) (xy 94.812441 78.44209) (xy 94.957431 78.22989) (xy 95.00844 77.978)
+ (xy 95.00844 77.851) (xy 106.79456 77.851) (xy 106.79456 79.375) (xy 106.838838 79.610317) (xy 106.97791 79.826441)
+ (xy 107.19011 79.971431) (xy 107.442 80.02244) (xy 108.966 80.02244) (xy 109.201317 79.978162) (xy 109.417441 79.83909)
+ (xy 109.473374 79.75723) (xy 109.51791 79.826441) (xy 109.73011 79.971431) (xy 109.982 80.02244) (xy 111.506 80.02244)
+ (xy 111.741317 79.978162) (xy 111.957441 79.83909) (xy 112.013374 79.75723) (xy 112.05791 79.826441) (xy 112.27011 79.971431)
+ (xy 112.522 80.02244) (xy 114.046 80.02244) (xy 114.281317 79.978162) (xy 114.497441 79.83909) (xy 114.642431 79.62689)
+ (xy 114.69344 79.375) (xy 114.69344 77.851) (xy 114.649162 77.615683) (xy 114.51009 77.399559) (xy 114.29789 77.254569)
+ (xy 114.114876 77.217508) (xy 114.467629 76.86537) (xy 114.680757 76.3521) (xy 114.681242 75.796339) (xy 114.512922 75.388971)
+ (xy 116.693821 75.388971) (xy 116.851058 75.769515) (xy 117.141954 76.060919) (xy 117.522223 76.21882) (xy 117.933971 76.219179)
+ (xy 118.314515 76.061942) (xy 118.605919 75.771046) (xy 118.6591 75.642971) (xy 131.679821 75.642971) (xy 131.837058 76.023515)
+ (xy 132.127954 76.314919) (xy 132.508223 76.47282) (xy 132.919971 76.473179) (xy 133.300515 76.315942) (xy 133.591919 76.025046)
+ (xy 133.74982 75.644777) (xy 133.750179 75.233029) (xy 133.592942 74.852485) (xy 133.302046 74.561081) (xy 132.921777 74.40318)
+ (xy 132.510029 74.402821) (xy 132.129485 74.560058) (xy 131.838081 74.850954) (xy 131.68018 75.231223) (xy 131.679821 75.642971)
+ (xy 118.6591 75.642971) (xy 118.76382 75.390777) (xy 118.764179 74.979029) (xy 118.716912 74.864633) (xy 124.269335 74.864633)
+ (xy 124.414039 75.214843) (xy 124.681747 75.48302) (xy 125.031705 75.628335) (xy 125.410633 75.628665) (xy 125.760843 75.483961)
+ (xy 126.02902 75.216253) (xy 126.174335 74.866295) (xy 126.174665 74.487367) (xy 126.029961 74.137157) (xy 125.762253 73.86898)
+ (xy 125.412295 73.723665) (xy 125.033367 73.723335) (xy 124.683157 73.868039) (xy 124.41498 74.135747) (xy 124.269665 74.485705)
+ (xy 124.269335 74.864633) (xy 118.716912 74.864633) (xy 118.606942 74.598485) (xy 118.316046 74.307081) (xy 117.935777 74.14918)
+ (xy 117.524029 74.148821) (xy 117.143485 74.306058) (xy 116.852081 74.596954) (xy 116.69418 74.977223) (xy 116.693821 75.388971)
+ (xy 114.512922 75.388971) (xy 114.46901 75.282697) (xy 114.07637 74.889371) (xy 113.868488 74.803051) (xy 114.074303 74.71801)
+ (xy 114.467629 74.32537) (xy 114.680757 73.8121) (xy 114.681242 73.256339) (xy 114.46901 72.742697) (xy 114.07637 72.349371)
+ (xy 113.5631 72.136243) (xy 113.007339 72.135758) (xy 112.964712 72.153371) (xy 113.093313 71.843668) (xy 113.093668 71.435633)
+ (xy 124.269335 71.435633) (xy 124.414039 71.785843) (xy 124.681747 72.05402) (xy 125.031705 72.199335) (xy 125.410633 72.199665)
+ (xy 125.760843 72.054961) (xy 126.02902 71.787253) (xy 126.174335 71.437295) (xy 126.174336 71.435633) (xy 157.289335 71.435633)
+ (xy 157.434039 71.785843) (xy 157.701747 72.05402) (xy 158.051705 72.199335) (xy 158.430633 72.199665) (xy 158.780843 72.054961)
+ (xy 159.04902 71.787253) (xy 159.194335 71.437295) (xy 159.194425 71.333784) (xy 185.102313 71.333784) (xy 185.266311 71.730689)
+ (xy 185.569714 72.034622) (xy 185.966332 72.199313) (xy 186.395784 72.199687) (xy 186.792689 72.035689) (xy 187.096622 71.732286)
+ (xy 187.261313 71.335668) (xy 187.261687 70.906216) (xy 187.097689 70.509311) (xy 186.794286 70.205378) (xy 186.397668 70.040687)
+ (xy 185.968216 70.040313) (xy 185.571311 70.204311) (xy 185.267378 70.507714) (xy 185.102687 70.904332) (xy 185.102313 71.333784)
+ (xy 159.194425 71.333784) (xy 159.194665 71.058367) (xy 159.049961 70.708157) (xy 158.782253 70.43998) (xy 158.432295 70.294665)
+ (xy 158.053367 70.294335) (xy 157.703157 70.439039) (xy 157.43498 70.706747) (xy 157.289665 71.056705) (xy 157.289335 71.435633)
+ (xy 126.174336 71.435633) (xy 126.174665 71.058367) (xy 126.029961 70.708157) (xy 125.762253 70.43998) (xy 125.412295 70.294665)
+ (xy 125.033367 70.294335) (xy 124.683157 70.439039) (xy 124.41498 70.706747) (xy 124.269665 71.056705) (xy 124.269335 71.435633)
+ (xy 113.093668 71.435633) (xy 113.093687 71.414216) (xy 112.929689 71.017311) (xy 112.626286 70.713378) (xy 112.229668 70.548687)
+ (xy 111.800216 70.548313) (xy 111.403311 70.712311) (xy 111.099378 71.015714) (xy 110.934687 71.412332) (xy 110.934313 71.841784)
+ (xy 111.062791 72.152724) (xy 111.0231 72.136243) (xy 110.467339 72.135758) (xy 109.953697 72.34799) (xy 109.560371 72.74063)
+ (xy 109.474051 72.948512) (xy 109.38901 72.742697) (xy 108.99637 72.349371) (xy 108.4831 72.136243) (xy 107.927339 72.135758)
+ (xy 107.413697 72.34799) (xy 107.020371 72.74063) (xy 106.807243 73.2539) (xy 106.806758 73.809661) (xy 107.01899 74.323303)
+ (xy 107.41163 74.716629) (xy 107.619512 74.802949) (xy 107.413697 74.88799) (xy 107.020371 75.28063) (xy 106.807243 75.7939)
+ (xy 106.806758 76.349661) (xy 107.01899 76.863303) (xy 107.371833 77.216763) (xy 107.206683 77.247838) (xy 106.990559 77.38691)
+ (xy 106.845569 77.59911) (xy 106.79456 77.851) (xy 95.00844 77.851) (xy 95.00844 76.912971) (xy 102.596821 76.912971)
+ (xy 102.754058 77.293515) (xy 103.044954 77.584919) (xy 103.425223 77.74282) (xy 103.836971 77.743179) (xy 104.217515 77.585942)
+ (xy 104.508919 77.295046) (xy 104.66682 76.914777) (xy 104.667179 76.503029) (xy 104.509942 76.122485) (xy 104.219046 75.831081)
+ (xy 103.838777 75.67318) (xy 103.427029 75.672821) (xy 103.046485 75.830058) (xy 102.755081 76.120954) (xy 102.59718 76.501223)
+ (xy 102.596821 76.912971) (xy 95.00844 76.912971) (xy 95.00844 76.2) (xy 94.964162 75.964683) (xy 94.82509 75.748559)
+ (xy 94.61289 75.603569) (xy 94.361 75.55256) (xy 92.583 75.55256) (xy 92.347683 75.596838) (xy 92.131559 75.73591)
+ (xy 91.986569 75.94811) (xy 91.93556 76.2) (xy 82.037934 76.2) (xy 81.636404 75.797769) (xy 81.076472 75.565265)
+ (xy 80.470188 75.564736) (xy 79.909851 75.796262) (xy 79.480769 76.224596) (xy 79.248265 76.784528) (xy 79.247736 77.390812)
+ (xy 72.517 77.390812) (xy 72.517 75.057) (xy 105.41 75.057) (xy 105.45941 75.046994) (xy 105.501035 75.018553)
+ (xy 105.528315 74.976159) (xy 105.537 74.93) (xy 105.537 71.587784) (xy 108.394313 71.587784) (xy 108.558311 71.984689)
+ (xy 108.861714 72.288622) (xy 109.258332 72.453313) (xy 109.687784 72.453687) (xy 110.084689 72.289689) (xy 110.388622 71.986286)
+ (xy 110.553313 71.589668) (xy 110.553687 71.160216) (xy 110.389689 70.763311) (xy 110.086286 70.459378) (xy 109.689668 70.294687)
+ (xy 109.260216 70.294313) (xy 108.863311 70.458311) (xy 108.559378 70.761714) (xy 108.394687 71.158332) (xy 108.394313 71.587784)
+ (xy 105.537 71.587784) (xy 105.537 64.262) (xy 107.659864 64.262) (xy 107.321948 64.599327) (xy 106.934441 65.532546)
+ (xy 106.93356 66.543021) (xy 107.319437 67.476915) (xy 108.033327 68.192052) (xy 108.966546 68.579559) (xy 109.977021 68.58044)
+ (xy 110.910915 68.194563) (xy 111.288135 67.818) (xy 115.17656 67.818) (xy 115.17656 69.342) (xy 115.220838 69.577317)
+ (xy 115.35991 69.793441) (xy 115.57211 69.938431) (xy 115.824 69.98944) (xy 117.348 69.98944) (xy 117.583317 69.945162)
+ (xy 117.799441 69.80609) (xy 117.944431 69.59389) (xy 117.99544 69.342) (xy 117.99544 68.887354) (xy 118.19499 69.370303)
+ (xy 118.58763 69.763629) (xy 119.1009 69.976757) (xy 119.656661 69.977242) (xy 120.170303 69.76501) (xy 120.563629 69.37237)
+ (xy 120.713606 69.011185) (xy 120.86199 69.370303) (xy 121.25463 69.763629) (xy 121.7679 69.976757) (xy 122.323661 69.977242)
+ (xy 122.837303 69.76501) (xy 123.230629 69.37237) (xy 123.443757 68.8591) (xy 123.443759 68.856664) (xy 123.65599 69.370303)
+ (xy 124.04863 69.763629) (xy 124.5619 69.976757) (xy 125.117661 69.977242) (xy 125.631303 69.76501) (xy 126.024629 69.37237)
+ (xy 126.237757 68.8591) (xy 126.237759 68.856664) (xy 126.44999 69.370303) (xy 126.84263 69.763629) (xy 127.3559 69.976757)
+ (xy 127.911661 69.977242) (xy 128.425303 69.76501) (xy 128.818629 69.37237) (xy 129.031757 68.8591) (xy 129.032242 68.303339)
+ (xy 128.82001 67.789697) (xy 128.42737 67.396371) (xy 127.9141 67.183243) (xy 127.358339 67.182758) (xy 126.844697 67.39499)
+ (xy 126.451371 67.78763) (xy 126.238243 68.3009) (xy 126.238241 68.303336) (xy 126.02601 67.789697) (xy 125.63337 67.396371)
+ (xy 125.1201 67.183243) (xy 124.564339 67.182758) (xy 124.050697 67.39499) (xy 123.657371 67.78763) (xy 123.444243 68.3009)
+ (xy 123.444241 68.303336) (xy 123.23201 67.789697) (xy 122.83937 67.396371) (xy 122.3261 67.183243) (xy 121.770339 67.182758)
+ (xy 121.256697 67.39499) (xy 120.863371 67.78763) (xy 120.713394 68.148815) (xy 120.56501 67.789697) (xy 120.17237 67.396371)
+ (xy 119.6591 67.183243) (xy 119.103339 67.182758) (xy 118.589697 67.39499) (xy 118.196371 67.78763) (xy 117.99544 68.271526)
+ (xy 117.99544 67.818) (xy 117.951162 67.582683) (xy 117.857347 67.436891) (xy 118.259661 67.437242) (xy 118.773303 67.22501)
+ (xy 119.166629 66.83237) (xy 119.379757 66.3191) (xy 119.379759 66.316664) (xy 119.59199 66.830303) (xy 119.98463 67.223629)
+ (xy 120.4979 67.436757) (xy 121.053661 67.437242) (xy 121.567303 67.22501) (xy 121.960629 66.83237) (xy 122.110606 66.471185)
+ (xy 122.25899 66.830303) (xy 122.65163 67.223629) (xy 123.1649 67.436757) (xy 123.720661 67.437242) (xy 124.234303 67.22501)
+ (xy 124.627629 66.83237) (xy 124.840757 66.3191) (xy 124.840759 66.316664) (xy 125.05299 66.830303) (xy 125.44563 67.223629)
+ (xy 125.9589 67.436757) (xy 126.514661 67.437242) (xy 127.028303 67.22501) (xy 127.421629 66.83237) (xy 127.634757 66.3191)
+ (xy 127.635242 65.763339) (xy 127.42301 65.249697) (xy 127.03037 64.856371) (xy 126.5171 64.643243) (xy 125.961339 64.642758)
+ (xy 125.447697 64.85499) (xy 125.054371 65.24763) (xy 124.841243 65.7609) (xy 124.841241 65.763336) (xy 124.62901 65.249697)
+ (xy 124.23637 64.856371) (xy 123.7231 64.643243) (xy 123.167339 64.642758) (xy 122.653697 64.85499) (xy 122.260371 65.24763)
+ (xy 122.110394 65.608815) (xy 121.96201 65.249697) (xy 121.56937 64.856371) (xy 121.0561 64.643243) (xy 120.500339 64.642758)
+ (xy 119.986697 64.85499) (xy 119.593371 65.24763) (xy 119.380243 65.7609) (xy 119.380241 65.763336) (xy 119.16801 65.249697)
+ (xy 118.77537 64.856371) (xy 118.2621 64.643243) (xy 117.706339 64.642758) (xy 117.192697 64.85499) (xy 116.799371 65.24763)
+ (xy 116.586243 65.7609) (xy 116.585758 66.316661) (xy 116.79799 66.830303) (xy 117.137654 67.17056) (xy 115.824 67.17056)
+ (xy 115.588683 67.214838) (xy 115.372559 67.35391) (xy 115.227569 67.56611) (xy 115.17656 67.818) (xy 111.288135 67.818)
+ (xy 111.626052 67.480673) (xy 112.013559 66.547454) (xy 112.01444 65.536979) (xy 111.628563 64.603085) (xy 111.288073 64.262)
+ (xy 133.059864 64.262) (xy 132.721948 64.599327) (xy 132.334441 65.532546) (xy 132.33356 66.543021) (xy 132.719437 67.476915)
+ (xy 133.433327 68.192052) (xy 134.366546 68.579559) (xy 135.377021 68.58044) (xy 136.310915 68.194563) (xy 137.026052 67.480673)
+ (xy 137.413559 66.547454) (xy 137.41444 65.536979) (xy 137.028563 64.603085) (xy 136.688073 64.262) (xy 141.187864 64.262)
+ (xy 140.849948 64.599327) (xy 140.462441 65.532546) (xy 140.46156 66.543021) (xy 140.847437 67.476915) (xy 141.561327 68.192052)
+ (xy 142.494546 68.579559) (xy 143.505021 68.58044) (xy 144.438915 68.194563) (xy 144.816135 67.818) (xy 148.70456 67.818)
+ (xy 148.70456 69.342) (xy 148.748838 69.577317) (xy 148.88791 69.793441) (xy 149.10011 69.938431) (xy 149.352 69.98944)
+ (xy 150.876 69.98944) (xy 151.111317 69.945162) (xy 151.327441 69.80609) (xy 151.472431 69.59389) (xy 151.52344 69.342)
+ (xy 151.52344 68.887354) (xy 151.72299 69.370303) (xy 152.11563 69.763629) (xy 152.6289 69.976757) (xy 153.184661 69.977242)
+ (xy 153.698303 69.76501) (xy 154.091629 69.37237) (xy 154.241606 69.011185) (xy 154.38999 69.370303) (xy 154.78263 69.763629)
+ (xy 155.2959 69.976757) (xy 155.851661 69.977242) (xy 156.365303 69.76501) (xy 156.758629 69.37237) (xy 156.971757 68.8591)
+ (xy 156.971759 68.856664) (xy 157.18399 69.370303) (xy 157.57663 69.763629) (xy 158.0899 69.976757) (xy 158.645661 69.977242)
+ (xy 159.159303 69.76501) (xy 159.552629 69.37237) (xy 159.765757 68.8591) (xy 159.765759 68.856664) (xy 159.97799 69.370303)
+ (xy 160.37063 69.763629) (xy 160.8839 69.976757) (xy 161.439661 69.977242) (xy 161.953303 69.76501) (xy 162.346629 69.37237)
+ (xy 162.559757 68.8591) (xy 162.560242 68.303339) (xy 162.34801 67.789697) (xy 161.95537 67.396371) (xy 161.4421 67.183243)
+ (xy 160.886339 67.182758) (xy 160.372697 67.39499) (xy 159.979371 67.78763) (xy 159.766243 68.3009) (xy 159.766241 68.303336)
+ (xy 159.55401 67.789697) (xy 159.16137 67.396371) (xy 158.6481 67.183243) (xy 158.092339 67.182758) (xy 157.578697 67.39499)
+ (xy 157.185371 67.78763) (xy 156.972243 68.3009) (xy 156.972241 68.303336) (xy 156.76001 67.789697) (xy 156.36737 67.396371)
+ (xy 155.8541 67.183243) (xy 155.298339 67.182758) (xy 154.784697 67.39499) (xy 154.391371 67.78763) (xy 154.241394 68.148815)
+ (xy 154.09301 67.789697) (xy 153.70037 67.396371) (xy 153.1871 67.183243) (xy 152.631339 67.182758) (xy 152.117697 67.39499)
+ (xy 151.724371 67.78763) (xy 151.52344 68.271526) (xy 151.52344 67.818) (xy 151.479162 67.582683) (xy 151.385347 67.436891)
+ (xy 151.787661 67.437242) (xy 152.301303 67.22501) (xy 152.694629 66.83237) (xy 152.907757 66.3191) (xy 152.907759 66.316664)
+ (xy 153.11999 66.830303) (xy 153.51263 67.223629) (xy 154.0259 67.436757) (xy 154.581661 67.437242) (xy 155.095303 67.22501)
+ (xy 155.488629 66.83237) (xy 155.638606 66.471185) (xy 155.78699 66.830303) (xy 156.17963 67.223629) (xy 156.6929 67.436757)
+ (xy 157.248661 67.437242) (xy 157.762303 67.22501) (xy 158.155629 66.83237) (xy 158.368757 66.3191) (xy 158.368759 66.316664)
+ (xy 158.58099 66.830303) (xy 158.97363 67.223629) (xy 159.4869 67.436757) (xy 160.042661 67.437242) (xy 160.556303 67.22501)
+ (xy 160.949629 66.83237) (xy 161.162757 66.3191) (xy 161.163242 65.763339) (xy 160.95101 65.249697) (xy 160.55837 64.856371)
+ (xy 160.0451 64.643243) (xy 159.489339 64.642758) (xy 158.975697 64.85499) (xy 158.582371 65.24763) (xy 158.369243 65.7609)
+ (xy 158.369241 65.763336) (xy 158.15701 65.249697) (xy 157.76437 64.856371) (xy 157.2511 64.643243) (xy 156.695339 64.642758)
+ (xy 156.181697 64.85499) (xy 155.788371 65.24763) (xy 155.638394 65.608815) (xy 155.49001 65.249697) (xy 155.09737 64.856371)
+ (xy 154.5841 64.643243) (xy 154.028339 64.642758) (xy 153.514697 64.85499) (xy 153.121371 65.24763) (xy 152.908243 65.7609)
+ (xy 152.908241 65.763336) (xy 152.69601 65.249697) (xy 152.30337 64.856371) (xy 151.7901 64.643243) (xy 151.234339 64.642758)
+ (xy 150.720697 64.85499) (xy 150.327371 65.24763) (xy 150.114243 65.7609) (xy 150.113758 66.316661) (xy 150.32599 66.830303)
+ (xy 150.665654 67.17056) (xy 149.352 67.17056) (xy 149.116683 67.214838) (xy 148.900559 67.35391) (xy 148.755569 67.56611)
+ (xy 148.70456 67.818) (xy 144.816135 67.818) (xy 145.154052 67.480673) (xy 145.541559 66.547454) (xy 145.54244 65.536979)
+ (xy 145.156563 64.603085) (xy 144.816073 64.262) (xy 166.587864 64.262) (xy 166.249948 64.599327) (xy 165.862441 65.532546)
+ (xy 165.86156 66.543021) (xy 166.247437 67.476915) (xy 166.961327 68.192052) (xy 167.894546 68.579559) (xy 168.905021 68.58044)
+ (xy 169.838915 68.194563) (xy 170.554052 67.480673) (xy 170.941559 66.547454) (xy 170.94244 65.536979) (xy 170.556563 64.603085)
+ (xy 170.216073 64.262) (xy 174.715864 64.262) (xy 174.377948 64.599327) (xy 173.990441 65.532546) (xy 173.98956 66.543021)
+ (xy 174.375437 67.476915) (xy 175.089327 68.192052) (xy 176.022546 68.579559) (xy 177.033021 68.58044) (xy 177.966915 68.194563)
+ (xy 178.344135 67.818) (xy 182.23256 67.818) (xy 182.23256 69.342) (xy 182.276838 69.577317) (xy 182.41591 69.793441)
+ (xy 182.62811 69.938431) (xy 182.88 69.98944) (xy 184.404 69.98944) (xy 184.639317 69.945162) (xy 184.855441 69.80609)
+ (xy 185.000431 69.59389) (xy 185.05144 69.342) (xy 185.05144 68.887354) (xy 185.25099 69.370303) (xy 185.64363 69.763629)
+ (xy 186.1569 69.976757) (xy 186.712661 69.977242) (xy 187.226303 69.76501) (xy 187.619629 69.37237) (xy 187.769606 69.011185)
+ (xy 187.91799 69.370303) (xy 188.31063 69.763629) (xy 188.8239 69.976757) (xy 189.379661 69.977242) (xy 189.893303 69.76501)
+ (xy 190.286629 69.37237) (xy 190.499757 68.8591) (xy 190.499759 68.856664) (xy 190.71199 69.370303) (xy 191.10463 69.763629)
+ (xy 191.6179 69.976757) (xy 192.173661 69.977242) (xy 192.687303 69.76501) (xy 193.080629 69.37237) (xy 193.293757 68.8591)
+ (xy 193.293759 68.856664) (xy 193.50599 69.370303) (xy 193.89863 69.763629) (xy 194.4119 69.976757) (xy 194.967661 69.977242)
+ (xy 195.481303 69.76501) (xy 195.874629 69.37237) (xy 196.087757 68.8591) (xy 196.088242 68.303339) (xy 195.87601 67.789697)
+ (xy 195.48337 67.396371) (xy 194.9701 67.183243) (xy 194.414339 67.182758) (xy 193.900697 67.39499) (xy 193.507371 67.78763)
+ (xy 193.294243 68.3009) (xy 193.294241 68.303336) (xy 193.08201 67.789697) (xy 192.68937 67.396371) (xy 192.1761 67.183243)
+ (xy 191.620339 67.182758) (xy 191.106697 67.39499) (xy 190.713371 67.78763) (xy 190.500243 68.3009) (xy 190.500241 68.303336)
+ (xy 190.28801 67.789697) (xy 189.89537 67.396371) (xy 189.3821 67.183243) (xy 188.826339 67.182758) (xy 188.312697 67.39499)
+ (xy 187.919371 67.78763) (xy 187.769394 68.148815) (xy 187.62101 67.789697) (xy 187.22837 67.396371) (xy 186.7151 67.183243)
+ (xy 186.159339 67.182758) (xy 185.645697 67.39499) (xy 185.252371 67.78763) (xy 185.05144 68.271526) (xy 185.05144 67.818)
+ (xy 185.007162 67.582683) (xy 184.913347 67.436891) (xy 185.315661 67.437242) (xy 185.829303 67.22501) (xy 186.222629 66.83237)
+ (xy 186.435757 66.3191) (xy 186.435759 66.316664) (xy 186.64799 66.830303) (xy 187.04063 67.223629) (xy 187.5539 67.436757)
+ (xy 188.109661 67.437242) (xy 188.623303 67.22501) (xy 189.016629 66.83237) (xy 189.166606 66.471185) (xy 189.31499 66.830303)
+ (xy 189.70763 67.223629) (xy 190.2209 67.436757) (xy 190.776661 67.437242) (xy 191.290303 67.22501) (xy 191.683629 66.83237)
+ (xy 191.896757 66.3191) (xy 191.896759 66.316664) (xy 192.10899 66.830303) (xy 192.50163 67.223629) (xy 193.0149 67.436757)
+ (xy 193.570661 67.437242) (xy 194.084303 67.22501) (xy 194.477629 66.83237) (xy 194.690757 66.3191) (xy 194.691242 65.763339)
+ (xy 194.47901 65.249697) (xy 194.08637 64.856371) (xy 193.5731 64.643243) (xy 193.017339 64.642758) (xy 192.503697 64.85499)
+ (xy 192.110371 65.24763) (xy 191.897243 65.7609) (xy 191.897241 65.763336) (xy 191.68501 65.249697) (xy 191.29237 64.856371)
+ (xy 190.7791 64.643243) (xy 190.223339 64.642758) (xy 189.709697 64.85499) (xy 189.316371 65.24763) (xy 189.166394 65.608815)
+ (xy 189.01801 65.249697) (xy 188.62537 64.856371) (xy 188.1121 64.643243) (xy 187.556339 64.642758) (xy 187.042697 64.85499)
+ (xy 186.649371 65.24763) (xy 186.436243 65.7609) (xy 186.436241 65.763336) (xy 186.22401 65.249697) (xy 185.83137 64.856371)
+ (xy 185.3181 64.643243) (xy 184.762339 64.642758) (xy 184.248697 64.85499) (xy 183.855371 65.24763) (xy 183.642243 65.7609)
+ (xy 183.641758 66.316661) (xy 183.85399 66.830303) (xy 184.193654 67.17056) (xy 182.88 67.17056) (xy 182.644683 67.214838)
+ (xy 182.428559 67.35391) (xy 182.283569 67.56611) (xy 182.23256 67.818) (xy 178.344135 67.818) (xy 178.682052 67.480673)
+ (xy 179.069559 66.547454) (xy 179.07044 65.536979) (xy 178.684563 64.603085) (xy 178.344073 64.262) (xy 200.115864 64.262)
+ (xy 199.777948 64.599327) (xy 199.390441 65.532546) (xy 199.38956 66.543021) (xy 199.775437 67.476915) (xy 200.489327 68.192052)
+ (xy 201.422546 68.579559) (xy 202.433021 68.58044) (xy 203.366915 68.194563) (xy 204.082052 67.480673) (xy 204.469559 66.547454)
+ (xy 204.46976 66.316661) (xy 222.122758 66.316661) (xy 222.33499 66.830303) (xy 222.72763 67.223629) (xy 222.935512 67.309949)
+ (xy 222.729697 67.39499) (xy 222.336371 67.78763) (xy 222.123243 68.3009) (xy 222.122758 68.856661) (xy 222.33499 69.370303)
+ (xy 222.72763 69.763629) (xy 222.935512 69.849949) (xy 222.729697 69.93499) (xy 222.336371 70.32763) (xy 222.123243 70.8409)
+ (xy 222.122758 71.396661) (xy 222.33499 71.910303) (xy 222.72763 72.303629) (xy 222.935512 72.389949) (xy 222.729697 72.47499)
+ (xy 222.336371 72.86763) (xy 222.123243 73.3809) (xy 222.122758 73.936661) (xy 222.33499 74.450303) (xy 222.72763 74.843629)
+ (xy 222.935512 74.929949) (xy 222.729697 75.01499) (xy 222.336371 75.40763) (xy 222.123243 75.9209) (xy 222.122758 76.476661)
+ (xy 222.33499 76.990303) (xy 222.72763 77.383629) (xy 223.2409 77.596757) (xy 223.796661 77.597242) (xy 224.310303 77.38501)
+ (xy 224.703629 76.99237) (xy 224.916757 76.4791) (xy 224.917242 75.923339) (xy 224.70501 75.409697) (xy 224.31237 75.016371)
+ (xy 224.104488 74.930051) (xy 224.310303 74.84501) (xy 224.703629 74.45237) (xy 224.916757 73.9391) (xy 224.917242 73.383339)
+ (xy 224.70501 72.869697) (xy 224.31237 72.476371) (xy 224.104488 72.390051) (xy 224.310303 72.30501) (xy 224.703629 71.91237)
+ (xy 224.916757 71.3991) (xy 224.917242 70.843339) (xy 224.70501 70.329697) (xy 224.31237 69.936371) (xy 224.104488 69.850051)
+ (xy 224.310303 69.76501) (xy 224.703629 69.37237) (xy 224.916757 68.8591) (xy 224.917242 68.303339) (xy 224.70501 67.789697)
+ (xy 224.31237 67.396371) (xy 224.104488 67.310051) (xy 224.310303 67.22501) (xy 224.703629 66.83237) (xy 224.916757 66.3191)
+ (xy 224.917242 65.763339) (xy 224.70501 65.249697) (xy 224.352928 64.897) (xy 224.40831 64.897) (xy 224.641699 64.800327)
+ (xy 224.820327 64.621698) (xy 224.917 64.388309) (xy 224.917 63.78575) (xy 224.75825 63.627) (xy 223.647 63.627)
+ (xy 223.647 63.647) (xy 223.393 63.647) (xy 223.393 63.627) (xy 222.28175 63.627) (xy 222.123 63.78575)
+ (xy 222.123 64.388309) (xy 222.219673 64.621698) (xy 222.398301 64.800327) (xy 222.63169 64.897) (xy 222.687614 64.897)
+ (xy 222.336371 65.24763) (xy 222.123243 65.7609) (xy 222.122758 66.316661) (xy 204.46976 66.316661) (xy 204.47044 65.536979)
+ (xy 204.084563 64.603085) (xy 203.744073 64.262) (xy 215.9 64.262) (xy 215.94941 64.251994) (xy 215.991035 64.223553)
+ (xy 216.018315 64.181159) (xy 216.027 64.135) (xy 216.027 62.611691) (xy 222.123 62.611691) (xy 222.123 63.21425)
+ (xy 222.28175 63.373) (xy 223.393 63.373) (xy 223.393 62.26175) (xy 223.647 62.26175) (xy 223.647 63.373)
+ (xy 224.75825 63.373) (xy 224.917 63.21425) (xy 224.917 62.611691) (xy 224.820327 62.378302) (xy 224.641699 62.199673)
+ (xy 224.40831 62.103) (xy 223.80575 62.103) (xy 223.647 62.26175) (xy 223.393 62.26175) (xy 223.23425 62.103)
+ (xy 222.63169 62.103) (xy 222.398301 62.199673) (xy 222.219673 62.378302) (xy 222.123 62.611691) (xy 216.027 62.611691)
+ (xy 216.027 61.087) (xy 227.7745 61.087)
+ )
+ )
+ )
+ (zone (net 102) (net_name GND) (layer GND_layer) (tstamp 489AD1F1) (hatch edge 0.508)
+ (connect_pads (clearance 0.5))
+ (min_thickness 0.3)
+ (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 71.755 146.685) (xy 227.33 146.05) (xy 227.33 56.515) (xy 97.155 56.515) (xy 97.155 74.93)
+ (xy 79.375 74.93) (xy 79.375 71.12) (xy 71.755 71.12)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 227.18 145.900611) (xy 85.352081 146.4795) (xy 71.9605 146.4795) (xy 71.9605 141.797235) (xy 88.854843 141.797235)
+ (xy 88.895536 142.027081) (xy 89.11405 142.131523) (xy 89.348741 142.191328) (xy 89.590589 142.204198) (xy 89.830301 142.169638)
+ (xy 90.058666 142.088977) (xy 90.174464 142.027081) (xy 90.215157 141.797235) (xy 89.535 141.117078) (xy 88.854843 141.797235)
+ (xy 71.9605 141.797235) (xy 71.9605 141.025589) (xy 88.300802 141.025589) (xy 88.335362 141.265301) (xy 88.416023 141.493666)
+ (xy 88.477919 141.609464) (xy 88.707765 141.650157) (xy 89.387922 140.97) (xy 89.682078 140.97) (xy 90.362235 141.650157)
+ (xy 90.592081 141.609464) (xy 90.696523 141.39095) (xy 90.756328 141.156259) (xy 90.769198 140.914411) (xy 90.734638 140.674699)
+ (xy 90.653977 140.446334) (xy 90.592081 140.330536) (xy 90.362235 140.289843) (xy 89.682078 140.97) (xy 89.387922 140.97)
+ (xy 88.707765 140.289843) (xy 88.477919 140.330536) (xy 88.373477 140.54905) (xy 88.313672 140.783741) (xy 88.300802 141.025589)
+ (xy 71.9605 141.025589) (xy 71.9605 140.142765) (xy 88.854843 140.142765) (xy 89.535 140.822922) (xy 90.215157 140.142765)
+ (xy 90.174464 139.912919) (xy 89.95595 139.808477) (xy 89.721259 139.748672) (xy 89.479411 139.735802) (xy 89.239699 139.770362)
+ (xy 89.011334 139.851023) (xy 88.895536 139.912919) (xy 88.854843 140.142765) (xy 71.9605 140.142765) (xy 71.9605 138.659707)
+ (xy 82.215895 138.659707) (xy 82.259138 138.89532) (xy 82.347321 139.118047) (xy 82.477087 139.319403) (xy 82.643491 139.49172)
+ (xy 82.840196 139.628433) (xy 83.059709 139.724336) (xy 83.29367 139.775776) (xy 83.533166 139.780793) (xy 83.769075 139.739195)
+ (xy 83.992412 139.652569) (xy 84.194669 139.524212) (xy 84.368143 139.359015) (xy 84.506227 139.163269) (xy 84.60366 138.944431)
+ (xy 84.656732 138.710835) (xy 84.660552 138.437226) (xy 84.614024 138.202239) (xy 84.522739 137.980766) (xy 84.390175 137.781241)
+ (xy 84.221381 137.611264) (xy 84.022786 137.477311) (xy 83.801955 137.384482) (xy 83.567299 137.336314) (xy 83.327757 137.334642)
+ (xy 83.092451 137.379528) (xy 82.870346 137.469265) (xy 82.6699 137.600433) (xy 82.498749 137.768036) (xy 82.363412 137.965691)
+ (xy 82.269044 138.185868) (xy 82.219239 138.420182) (xy 82.215895 138.659707) (xy 71.9605 138.659707) (xy 71.9605 134.287051)
+ (xy 74.900938 134.287051) (xy 74.937713 134.564338) (xy 75.027879 134.829124) (xy 75.114578 134.991325) (xy 75.363864 135.055058)
+ (xy 76.179922 134.239) (xy 75.363864 133.422942) (xy 75.114578 133.486675) (xy 74.991103 133.737663) (xy 74.918966 134.007917)
+ (xy 74.900938 134.287051) (xy 71.9605 134.287051) (xy 71.9605 119.047051) (xy 74.900938 119.047051) (xy 74.937713 119.324338)
+ (xy 75.027879 119.589124) (xy 75.114578 119.751325) (xy 75.363864 119.815058) (xy 76.179922 118.999) (xy 75.363864 118.182942)
+ (xy 75.114578 118.246675) (xy 74.991103 118.497663) (xy 74.918966 118.767917) (xy 74.900938 119.047051) (xy 71.9605 119.047051)
+ (xy 71.9605 111.427051) (xy 74.900938 111.427051) (xy 74.937713 111.704338) (xy 75.027879 111.969124) (xy 75.114578 112.131325)
+ (xy 75.363864 112.195058) (xy 76.179922 111.379) (xy 75.363864 110.562942) (xy 75.114578 110.626675) (xy 74.991103 110.877663)
+ (xy 74.918966 111.147917) (xy 74.900938 111.427051) (xy 71.9605 111.427051) (xy 71.9605 109.802136) (xy 75.510942 109.802136)
+ (xy 75.574675 110.051422) (xy 75.686861 110.106613) (xy 75.574675 110.166578) (xy 75.510942 110.415864) (xy 76.327 111.231922)
+ (xy 77.143058 110.415864) (xy 77.079325 110.166578) (xy 76.967139 110.111387) (xy 77.079325 110.051422) (xy 77.143058 109.802136)
+ (xy 76.327 108.986078) (xy 75.510942 109.802136) (xy 71.9605 109.802136) (xy 71.9605 108.887051) (xy 74.900938 108.887051)
+ (xy 74.937713 109.164338) (xy 75.027879 109.429124) (xy 75.114578 109.591325) (xy 75.363864 109.655058) (xy 76.179922 108.839)
+ (xy 75.363864 108.022942) (xy 75.114578 108.086675) (xy 74.991103 108.337663) (xy 74.918966 108.607917) (xy 74.900938 108.887051)
+ (xy 71.9605 108.887051) (xy 71.9605 105.537) (xy 74.911855 105.537) (xy 74.911855 107.061) (xy 74.920109 107.16451)
+ (xy 74.974478 107.340074) (xy 75.075606 107.493541) (xy 75.215484 107.612758) (xy 75.383038 107.688286) (xy 75.552733 107.712402)
+ (xy 75.510942 107.875864) (xy 76.327 108.691922) (xy 77.143058 107.875864) (xy 77.101459 107.713152) (xy 77.19251 107.705891)
+ (xy 77.368074 107.651522) (xy 77.521541 107.550394) (xy 77.640758 107.410516) (xy 77.716286 107.242962) (xy 77.730589 107.142316)
+ (xy 77.755071 107.180304) (xy 77.947427 107.379495) (xy 78.174809 107.53753) (xy 78.243992 107.567755) (xy 78.209661 107.581626)
+ (xy 77.977954 107.73325) (xy 77.780112 107.926992) (xy 77.623668 108.155472) (xy 77.602542 108.204763) (xy 77.539422 108.086675)
+ (xy 77.290136 108.022942) (xy 76.474078 108.839) (xy 77.290136 109.655058) (xy 77.539422 109.591325) (xy 77.598562 109.471112)
+ (xy 77.605068 109.487545) (xy 77.755071 109.720304) (xy 77.947427 109.919495) (xy 78.174809 110.07753) (xy 78.243992 110.107755)
+ (xy 78.209661 110.121626) (xy 77.977954 110.27325) (xy 77.780112 110.466992) (xy 77.623668 110.695472) (xy 77.602542 110.744763)
+ (xy 77.539422 110.626675) (xy 77.290136 110.562942) (xy 76.474078 111.379) (xy 77.290136 112.195058) (xy 77.539422 112.131325)
+ (xy 77.598562 112.011112) (xy 77.605068 112.027545) (xy 77.755071 112.260304) (xy 77.947427 112.459495) (xy 78.174809 112.61753)
+ (xy 78.243992 112.647755) (xy 78.209661 112.661626) (xy 77.977954 112.81325) (xy 77.780112 113.006992) (xy 77.623668 113.235472)
+ (xy 77.59762 113.296246) (xy 77.579754 113.252899) (xy 77.426516 113.022257) (xy 77.231398 112.825771) (xy 77.001831 112.670926)
+ (xy 76.961949 112.654161) (xy 77.079325 112.591422) (xy 77.143058 112.342136) (xy 76.327 111.526078) (xy 75.510942 112.342136)
+ (xy 75.574675 112.591422) (xy 75.695861 112.65104) (xy 75.669661 112.661626) (xy 75.437954 112.81325) (xy 75.240112 113.006992)
+ (xy 75.083668 113.235472) (xy 74.974583 113.489988) (xy 74.91701 113.760844) (xy 74.913144 114.037725) (xy 74.963131 114.310083)
+ (xy 75.065068 114.567545) (xy 75.215071 114.800304) (xy 75.407427 114.999495) (xy 75.634809 115.15753) (xy 75.703992 115.187755)
+ (xy 75.669661 115.201626) (xy 75.437954 115.35325) (xy 75.240112 115.546992) (xy 75.083668 115.775472) (xy 74.974583 116.029988)
+ (xy 74.91701 116.300844) (xy 74.913144 116.577725) (xy 74.963131 116.850083) (xy 75.065068 117.107545) (xy 75.215071 117.340304)
+ (xy 75.407427 117.539495) (xy 75.634809 117.69753) (xy 75.69339 117.723123) (xy 75.574675 117.786578) (xy 75.510942 118.035864)
+ (xy 76.327 118.851922) (xy 77.143058 118.035864) (xy 77.079325 117.786578) (xy 76.960182 117.727965) (xy 76.966719 117.725429)
+ (xy 77.20052 117.577055) (xy 77.401049 117.386094) (xy 77.560667 117.159821) (xy 77.595124 117.08243) (xy 77.605068 117.107545)
+ (xy 77.755071 117.340304) (xy 77.947427 117.539495) (xy 78.174809 117.69753) (xy 78.243992 117.727755) (xy 78.209661 117.741626)
+ (xy 77.977954 117.89325) (xy 77.780112 118.086992) (xy 77.623668 118.315472) (xy 77.602542 118.364763) (xy 77.539422 118.246675)
+ (xy 77.290136 118.182942) (xy 76.474078 118.999) (xy 77.290136 119.815058) (xy 77.539422 119.751325) (xy 77.598562 119.631112)
+ (xy 77.605068 119.647545) (xy 77.755071 119.880304) (xy 77.947427 120.079495) (xy 78.174809 120.23753) (xy 78.243992 120.267755)
+ (xy 78.209661 120.281626) (xy 77.977954 120.43325) (xy 77.780112 120.626992) (xy 77.623668 120.855472) (xy 77.59762 120.916246)
+ (xy 77.579754 120.872899) (xy 77.426516 120.642257) (xy 77.231398 120.445771) (xy 77.001831 120.290926) (xy 76.961949 120.274161)
+ (xy 77.079325 120.211422) (xy 77.143058 119.962136) (xy 76.327 119.146078) (xy 75.510942 119.962136) (xy 75.574675 120.211422)
+ (xy 75.695861 120.27104) (xy 75.669661 120.281626) (xy 75.437954 120.43325) (xy 75.240112 120.626992) (xy 75.083668 120.855472)
+ (xy 74.974583 121.109988) (xy 74.91701 121.380844) (xy 74.913144 121.657725) (xy 74.963131 121.930083) (xy 75.065068 122.187545)
+ (xy 75.215071 122.420304) (xy 75.407427 122.619495) (xy 75.634809 122.77753) (xy 75.703992 122.807755) (xy 75.669661 122.821626)
+ (xy 75.437954 122.97325) (xy 75.240112 123.166992) (xy 75.083668 123.395472) (xy 74.974583 123.649988) (xy 74.91701 123.920844)
+ (xy 74.913144 124.197725) (xy 74.963131 124.470083) (xy 75.065068 124.727545) (xy 75.215071 124.960304) (xy 75.407427 125.159495)
+ (xy 75.634809 125.31753) (xy 75.703992 125.347755) (xy 75.669661 125.361626) (xy 75.437954 125.51325) (xy 75.240112 125.706992)
+ (xy 75.083668 125.935472) (xy 74.974583 126.189988) (xy 74.91701 126.460844) (xy 74.913144 126.737725) (xy 74.963131 127.010083)
+ (xy 75.065068 127.267545) (xy 75.215071 127.500304) (xy 75.407427 127.699495) (xy 75.634809 127.85753) (xy 75.703992 127.887755)
+ (xy 75.669661 127.901626) (xy 75.437954 128.05325) (xy 75.240112 128.246992) (xy 75.083668 128.475472) (xy 74.974583 128.729988)
+ (xy 74.91701 129.000844) (xy 74.913144 129.277725) (xy 74.963131 129.550083) (xy 75.065068 129.807545) (xy 75.215071 130.040304)
+ (xy 75.407427 130.239495) (xy 75.634809 130.39753) (xy 75.703992 130.427755) (xy 75.669661 130.441626) (xy 75.437954 130.59325)
+ (xy 75.240112 130.786992) (xy 75.083668 131.015472) (xy 74.974583 131.269988) (xy 74.91701 131.540844) (xy 74.913144 131.817725)
+ (xy 74.963131 132.090083) (xy 75.065068 132.347545) (xy 75.215071 132.580304) (xy 75.407427 132.779495) (xy 75.634809 132.93753)
+ (xy 75.69339 132.963123) (xy 75.574675 133.026578) (xy 75.510942 133.275864) (xy 76.327 134.091922) (xy 77.143058 133.275864)
+ (xy 77.079325 133.026578) (xy 76.960182 132.967965) (xy 76.966719 132.965429) (xy 77.20052 132.817055) (xy 77.401049 132.626094)
+ (xy 77.560667 132.399821) (xy 77.595124 132.32243) (xy 77.605068 132.347545) (xy 77.755071 132.580304) (xy 77.947427 132.779495)
+ (xy 78.174809 132.93753) (xy 78.243992 132.967755) (xy 78.209661 132.981626) (xy 77.977954 133.13325) (xy 77.780112 133.326992)
+ (xy 77.623668 133.555472) (xy 77.602542 133.604763) (xy 77.539422 133.486675) (xy 77.290136 133.422942) (xy 76.474078 134.239)
+ (xy 77.290136 135.055058) (xy 77.539422 134.991325) (xy 77.598562 134.871112) (xy 77.605068 134.887545) (xy 77.755071 135.120304)
+ (xy 77.947427 135.319495) (xy 78.174809 135.47753) (xy 78.243992 135.507755) (xy 78.209661 135.521626) (xy 77.977954 135.67325)
+ (xy 77.780112 135.866992) (xy 77.623668 136.095472) (xy 77.59762 136.156246) (xy 77.579754 136.112899) (xy 77.426516 135.882257)
+ (xy 77.231398 135.685771) (xy 77.001831 135.530926) (xy 76.961949 135.514161) (xy 77.079325 135.451422) (xy 77.143058 135.202136)
+ (xy 76.327 134.386078) (xy 75.510942 135.202136) (xy 75.574675 135.451422) (xy 75.695861 135.51104) (xy 75.669661 135.521626)
+ (xy 75.437954 135.67325) (xy 75.240112 135.866992) (xy 75.083668 136.095472) (xy 74.974583 136.349988) (xy 74.91701 136.620844)
+ (xy 74.913144 136.897725) (xy 74.963131 137.170083) (xy 75.065068 137.427545) (xy 75.215071 137.660304) (xy 75.407427 137.859495)
+ (xy 75.634809 138.01753) (xy 75.888557 138.128389) (xy 76.159005 138.187851) (xy 76.435851 138.19365) (xy 76.708552 138.145566)
+ (xy 76.966719 138.045429) (xy 77.20052 137.897055) (xy 77.401049 137.706094) (xy 77.560667 137.479821) (xy 77.595124 137.40243)
+ (xy 77.605068 137.427545) (xy 77.755071 137.660304) (xy 77.947427 137.859495) (xy 78.174809 138.01753) (xy 78.428557 138.128389)
+ (xy 78.699005 138.187851) (xy 78.975851 138.19365) (xy 79.248552 138.145566) (xy 79.506719 138.045429) (xy 79.74052 137.897055)
+ (xy 79.941049 137.706094) (xy 80.100667 137.479821) (xy 80.213296 137.226853) (xy 80.274644 136.956827) (xy 80.27906 136.640546)
+ (xy 80.225276 136.368912) (xy 80.119754 136.112899) (xy 79.966516 135.882257) (xy 79.771398 135.685771) (xy 79.541831 135.530926)
+ (xy 79.493434 135.510582) (xy 79.506719 135.505429) (xy 79.74052 135.357055) (xy 79.941049 135.166094) (xy 80.100667 134.939821)
+ (xy 80.213296 134.686853) (xy 80.274644 134.416827) (xy 80.275692 134.341707) (xy 82.215895 134.341707) (xy 82.259138 134.57732)
+ (xy 82.347321 134.800047) (xy 82.477087 135.001403) (xy 82.643491 135.17372) (xy 82.840196 135.310433) (xy 83.059709 135.406336)
+ (xy 83.29367 135.457776) (xy 83.533166 135.462793) (xy 83.769075 135.421195) (xy 83.992412 135.334569) (xy 84.194669 135.206212)
+ (xy 84.368143 135.041015) (xy 84.506227 134.845269) (xy 84.553663 134.738725) (xy 87.486144 134.738725) (xy 87.536131 135.011083)
+ (xy 87.638068 135.268545) (xy 87.788071 135.501304) (xy 87.980427 135.700495) (xy 88.207809 135.85853) (xy 88.461557 135.969389)
+ (xy 88.732005 136.028851) (xy 89.008851 136.03465) (xy 89.281552 135.986566) (xy 89.539719 135.886429) (xy 89.77352 135.738055)
+ (xy 89.974049 135.547094) (xy 90.031523 135.46562) (xy 90.033109 135.48551) (xy 90.087478 135.661074) (xy 90.188606 135.814541)
+ (xy 90.328484 135.933758) (xy 90.496038 136.009286) (xy 90.678 136.035145) (xy 92.202 136.035145) (xy 92.30551 136.026891)
+ (xy 92.481074 135.972522) (xy 92.634541 135.871394) (xy 92.753758 135.731516) (xy 92.829286 135.563962) (xy 92.855145 135.382)
+ (xy 92.855145 133.858) (xy 92.846891 133.75449) (xy 92.792522 133.578926) (xy 92.691394 133.425459) (xy 92.551516 133.306242)
+ (xy 92.383962 133.230714) (xy 92.202 133.204855) (xy 90.678 133.204855) (xy 90.57449 133.213109) (xy 90.398926 133.267478)
+ (xy 90.245459 133.368606) (xy 90.126242 133.508484) (xy 90.050714 133.676038) (xy 90.036165 133.778418) (xy 89.999516 133.723257)
+ (xy 89.804398 133.526771) (xy 89.574831 133.371926) (xy 89.31956 133.26462) (xy 89.048308 133.208941) (xy 88.771408 133.207007)
+ (xy 88.499405 133.258895) (xy 88.242661 133.362626) (xy 88.010954 133.51425) (xy 87.813112 133.707992) (xy 87.656668 133.936472)
+ (xy 87.547583 134.190988) (xy 87.49001 134.461844) (xy 87.486144 134.738725) (xy 84.553663 134.738725) (xy 84.60366 134.626431)
+ (xy 84.656732 134.392835) (xy 84.660552 134.119226) (xy 84.614024 133.884239) (xy 84.522739 133.662766) (xy 84.390175 133.463241)
+ (xy 84.221381 133.293264) (xy 84.022786 133.159311) (xy 83.801955 133.066482) (xy 83.567299 133.018314) (xy 83.327757 133.016642)
+ (xy 83.092451 133.061528) (xy 82.870346 133.151265) (xy 82.6699 133.282433) (xy 82.498749 133.450036) (xy 82.363412 133.647691)
+ (xy 82.269044 133.867868) (xy 82.219239 134.102182) (xy 82.215895 134.341707) (xy 80.275692 134.341707) (xy 80.27906 134.100546)
+ (xy 80.225276 133.828912) (xy 80.119754 133.572899) (xy 79.966516 133.342257) (xy 79.771398 133.145771) (xy 79.541831 132.990926)
+ (xy 79.493434 132.970582) (xy 79.506719 132.965429) (xy 79.74052 132.817055) (xy 79.941049 132.626094) (xy 80.100667 132.399821)
+ (xy 80.213296 132.146853) (xy 80.274644 131.876827) (xy 80.27906 131.560546) (xy 80.225276 131.288912) (xy 80.119754 131.032899)
+ (xy 79.966516 130.802257) (xy 79.771398 130.605771) (xy 79.541831 130.450926) (xy 79.501949 130.434161) (xy 79.619325 130.371422)
+ (xy 79.683058 130.122136) (xy 78.867 129.306078) (xy 78.050942 130.122136) (xy 78.114675 130.371422) (xy 78.235861 130.43104)
+ (xy 78.209661 130.441626) (xy 77.977954 130.59325) (xy 77.780112 130.786992) (xy 77.623668 131.015472) (xy 77.59762 131.076246)
+ (xy 77.579754 131.032899) (xy 77.426516 130.802257) (xy 77.231398 130.605771) (xy 77.001831 130.450926) (xy 76.953434 130.430582)
+ (xy 76.966719 130.425429) (xy 77.20052 130.277055) (xy 77.401049 130.086094) (xy 77.560667 129.859821) (xy 77.590833 129.792067)
+ (xy 77.654578 129.911325) (xy 77.903864 129.975058) (xy 78.719922 129.159) (xy 78.70578 129.144858) (xy 78.852858 128.99778)
+ (xy 78.867 129.011922) (xy 78.881143 128.99778) (xy 79.028221 129.144858) (xy 79.014078 129.159) (xy 79.830136 129.975058)
+ (xy 80.079422 129.911325) (xy 80.202897 129.660337) (xy 80.275034 129.390083) (xy 80.293062 129.110949) (xy 80.256287 128.833662)
+ (xy 80.179209 128.60731) (xy 80.242467 128.573675) (xy 80.306185 128.540647) (xy 80.309379 128.538097) (xy 80.312985 128.53618)
+ (xy 80.368581 128.490837) (xy 80.424697 128.44604) (xy 80.430386 128.44043) (xy 80.430501 128.440336) (xy 80.430589 128.44023)
+ (xy 80.432422 128.438422) (xy 82.337422 126.533422) (xy 82.383013 126.477919) (xy 82.429113 126.422979) (xy 82.43108 126.419401)
+ (xy 82.433675 126.416242) (xy 82.467594 126.352983) (xy 82.502168 126.290093) (xy 82.503404 126.286196) (xy 82.505334 126.282597)
+ (xy 82.526315 126.213971) (xy 82.548021 126.145547) (xy 82.548476 126.141488) (xy 82.549671 126.13758) (xy 82.556924 126.066172)
+ (xy 82.564924 125.994849) (xy 82.56498 125.98686) (xy 82.564995 125.986712) (xy 82.564982 125.986574) (xy 82.565 125.984)
+ (xy 82.565 119.228707) (xy 83.866895 119.228707) (xy 83.910138 119.46432) (xy 83.998321 119.687047) (xy 84.128087 119.888403)
+ (xy 84.294491 120.06072) (xy 84.491196 120.197433) (xy 84.710709 120.293336) (xy 84.94467 120.344776) (xy 85.184166 120.349793)
+ (xy 85.420075 120.308195) (xy 85.643412 120.221569) (xy 85.845669 120.093212) (xy 86.019143 119.928015) (xy 86.157227 119.732269)
+ (xy 86.25466 119.513431) (xy 86.307732 119.279835) (xy 86.311552 119.006226) (xy 86.265024 118.771239) (xy 86.173739 118.549766)
+ (xy 86.041175 118.350241) (xy 85.872381 118.180264) (xy 85.673786 118.046311) (xy 85.452955 117.953482) (xy 85.218299 117.905314)
+ (xy 84.978757 117.903642) (xy 84.743451 117.948528) (xy 84.521346 118.038265) (xy 84.3209 118.169433) (xy 84.149749 118.337036)
+ (xy 84.014412 118.534691) (xy 83.920044 118.754868) (xy 83.870239 118.989182) (xy 83.866895 119.228707) (xy 82.565 119.228707)
+ (xy 82.565 116.118122) (xy 82.5992 116.153537) (xy 82.775454 116.276036) (xy 82.972144 116.361968) (xy 83.18178 116.408059)
+ (xy 83.396375 116.412555) (xy 83.607757 116.375282) (xy 83.807873 116.297662) (xy 83.989102 116.182651) (xy 84.14454 116.034629)
+ (xy 84.268267 115.859235) (xy 84.35557 115.66315) (xy 84.403124 115.453841) (xy 84.406547 115.208679) (xy 84.395727 115.154029)
+ (xy 94.662061 115.154029) (xy 94.700808 115.365145) (xy 94.779823 115.564714) (xy 94.896097 115.745136) (xy 94.981 115.833056)
+ (xy 94.981 116.83093) (xy 94.915507 116.895065) (xy 94.794241 117.072169) (xy 94.709685 117.269455) (xy 94.665058 117.479407)
+ (xy 94.662061 117.694029) (xy 94.700808 117.905145) (xy 94.779823 118.104714) (xy 94.896097 118.285136) (xy 95.0452 118.439537)
+ (xy 95.221454 118.562036) (xy 95.418144 118.647968) (xy 95.62778 118.694059) (xy 95.842375 118.698555) (xy 96.053757 118.661282)
+ (xy 96.253873 118.583662) (xy 96.435102 118.468651) (xy 96.59054 118.320629) (xy 96.714267 118.145235) (xy 96.80157 117.94915)
+ (xy 96.849124 117.739841) (xy 96.852547 117.494679) (xy 96.810856 117.284124) (xy 96.729062 117.085677) (xy 96.610281 116.906897)
+ (xy 96.535 116.831089) (xy 96.535 115.9279) (xy 100.315 115.9279) (xy 100.315 118.10093) (xy 100.249507 118.165065)
+ (xy 100.128241 118.342169) (xy 100.043685 118.539455) (xy 99.999058 118.749407) (xy 99.996061 118.964029) (xy 100.034808 119.175145)
+ (xy 100.113823 119.374714) (xy 100.230097 119.555136) (xy 100.3792 119.709537) (xy 100.555454 119.832036) (xy 100.752144 119.917968)
+ (xy 100.96178 119.964059) (xy 101.176375 119.968555) (xy 101.387757 119.931282) (xy 101.587873 119.853662) (xy 101.769102 119.738651)
+ (xy 101.92454 119.590629) (xy 102.048267 119.415235) (xy 102.13557 119.21915) (xy 102.183124 119.009841) (xy 102.186547 118.764679)
+ (xy 102.144856 118.554124) (xy 102.063062 118.355677) (xy 101.944281 118.176897) (xy 101.869 118.101089) (xy 101.869 115.833519)
+ (xy 101.92454 115.780629) (xy 102.048267 115.605235) (xy 102.13557 115.40915) (xy 102.183124 115.199841) (xy 102.186547 114.954679)
+ (xy 102.144856 114.744124) (xy 102.063062 114.545677) (xy 101.944281 114.366897) (xy 101.793036 114.214593) (xy 101.61509 114.094566)
+ (xy 101.509924 114.050358) (xy 101.593669 113.997212) (xy 101.767143 113.832015) (xy 101.905227 113.636269) (xy 102.00266 113.417431)
+ (xy 102.055732 113.183835) (xy 102.059552 112.910226) (xy 102.013024 112.675239) (xy 101.921739 112.453766) (xy 101.789175 112.254241)
+ (xy 101.620381 112.084264) (xy 101.421786 111.950311) (xy 101.200955 111.857482) (xy 100.966299 111.809314) (xy 100.726757 111.807642)
+ (xy 100.491451 111.852528) (xy 100.269346 111.942265) (xy 100.0689 112.073433) (xy 99.897749 112.241036) (xy 99.762412 112.438691)
+ (xy 99.668044 112.658868) (xy 99.618239 112.893182) (xy 99.614895 113.132707) (xy 99.658138 113.36832) (xy 99.746321 113.591047)
+ (xy 99.876087 113.792403) (xy 100.042491 113.96472) (xy 100.239196 114.101433) (xy 100.432141 114.185729) (xy 100.416292 114.1961)
+ (xy 96.431619 114.1961) (xy 96.28109 114.094566) (xy 96.083219 114.011389) (xy 95.87296 113.968229) (xy 95.658323 113.96673)
+ (xy 95.447482 114.00695) (xy 95.248469 114.087357) (xy 95.068864 114.204887) (xy 94.915507 114.355065) (xy 94.794241 114.532169)
+ (xy 94.709685 114.729455) (xy 94.665058 114.939407) (xy 94.662061 115.154029) (xy 84.395727 115.154029) (xy 84.364856 114.998124)
+ (xy 84.283062 114.799677) (xy 84.164281 114.620897) (xy 84.013036 114.468593) (xy 83.83509 114.348566) (xy 83.637219 114.265389)
+ (xy 83.42696 114.222229) (xy 83.212323 114.22073) (xy 83.001482 114.26095) (xy 82.802469 114.341357) (xy 82.622864 114.458887)
+ (xy 82.565 114.515552) (xy 82.565 111.954844) (xy 84.97729 109.542554) (xy 85.097439 109.521368) (xy 85.274335 109.452755)
+ (xy 85.434534 109.351089) (xy 85.477925 109.309769) (xy 85.71 109.541844) (xy 85.71 110.998) (xy 85.717009 111.069482)
+ (xy 85.72326 111.14093) (xy 85.724399 111.14485) (xy 85.724798 111.14892) (xy 85.745554 111.217668) (xy 85.765567 111.286553)
+ (xy 85.767447 111.290179) (xy 85.768628 111.294092) (xy 85.802325 111.357467) (xy 85.835353 111.421185) (xy 85.837903 111.424379)
+ (xy 85.83982 111.427985) (xy 85.885163 111.483581) (xy 85.92996 111.539697) (xy 85.93557 111.545386) (xy 85.935664 111.545501)
+ (xy 85.93577 111.545589) (xy 85.937578 111.547422) (xy 86.535288 112.145132) (xy 86.534061 112.233029) (xy 86.572808 112.444145)
+ (xy 86.651823 112.643714) (xy 86.768097 112.824136) (xy 86.9172 112.978537) (xy 87.093454 113.101036) (xy 87.290144 113.186968)
+ (xy 87.49978 113.233059) (xy 87.714375 113.237555) (xy 87.925757 113.200282) (xy 87.999961 113.1715) (xy 90.274 113.1715)
+ (xy 90.274 113.729808) (xy 90.299287 113.856932) (xy 90.348888 113.97668) (xy 90.420898 114.084451) (xy 90.51255 114.176102)
+ (xy 90.62032 114.248112) (xy 90.740069 114.297713) (xy 90.867193 114.323) (xy 91.4255 114.323) (xy 91.59 114.1585)
+ (xy 91.59 113.007) (xy 90.4385 113.007) (xy 90.274 113.1715) (xy 87.999961 113.1715) (xy 88.125873 113.122662)
+ (xy 88.307102 113.007651) (xy 88.46254 112.859629) (xy 88.586267 112.684235) (xy 88.67357 112.48815) (xy 88.721124 112.278841)
+ (xy 88.723953 112.076192) (xy 90.274 112.076192) (xy 90.274 112.6345) (xy 90.4385 112.799) (xy 91.59 112.799)
+ (xy 91.59 111.6475) (xy 91.798 111.6475) (xy 91.798 112.799) (xy 91.818 112.799) (xy 91.818 113.007)
+ (xy 91.798 113.007) (xy 91.798 114.1585) (xy 91.9625 114.323) (xy 92.520807 114.323) (xy 92.647931 114.297713)
+ (xy 92.76768 114.248112) (xy 92.87545 114.176102) (xy 92.967102 114.084451) (xy 93.039112 113.97668) (xy 93.088713 113.856932)
+ (xy 93.10762 113.761881) (xy 93.122071 113.784304) (xy 93.314427 113.983495) (xy 93.541809 114.14153) (xy 93.795557 114.252389)
+ (xy 94.066005 114.311851) (xy 94.342851 114.31765) (xy 94.615552 114.269566) (xy 94.873719 114.169429) (xy 95.10752 114.021055)
+ (xy 95.308049 113.830094) (xy 95.467667 113.603821) (xy 95.580296 113.350853) (xy 95.641644 113.080827) (xy 95.64606 112.764546)
+ (xy 95.592276 112.492912) (xy 95.489561 112.243707) (xy 96.185895 112.243707) (xy 96.229138 112.47932) (xy 96.317321 112.702047)
+ (xy 96.447087 112.903403) (xy 96.613491 113.07572) (xy 96.810196 113.212433) (xy 97.029709 113.308336) (xy 97.26367 113.359776)
+ (xy 97.503166 113.364793) (xy 97.739075 113.323195) (xy 97.962412 113.236569) (xy 98.164669 113.108212) (xy 98.338143 112.943015)
+ (xy 98.476227 112.747269) (xy 98.57366 112.528431) (xy 98.626732 112.294835) (xy 98.630552 112.021226) (xy 98.584024 111.786239)
+ (xy 98.492739 111.564766) (xy 98.360175 111.365241) (xy 98.191381 111.195264) (xy 97.992786 111.061311) (xy 97.771955 110.968482)
+ (xy 97.537299 110.920314) (xy 97.297757 110.918642) (xy 97.062451 110.963528) (xy 96.840346 111.053265) (xy 96.6399 111.184433)
+ (xy 96.468749 111.352036) (xy 96.333412 111.549691) (xy 96.239044 111.769868) (xy 96.189239 112.004182) (xy 96.185895 112.243707)
+ (xy 95.489561 112.243707) (xy 95.486754 112.236899) (xy 95.333516 112.006257) (xy 95.138398 111.809771) (xy 94.908831 111.654926)
+ (xy 94.65356 111.54762) (xy 94.382308 111.491941) (xy 94.105408 111.490007) (xy 93.833405 111.541895) (xy 93.576661 111.645626)
+ (xy 93.344954 111.79725) (xy 93.147112 111.990992) (xy 93.108321 112.047644) (xy 93.088713 111.949068) (xy 93.039112 111.82932)
+ (xy 92.967102 111.721549) (xy 92.87545 111.629898) (xy 92.76768 111.557888) (xy 92.647931 111.508287) (xy 92.520807 111.483)
+ (xy 91.9625 111.483) (xy 91.798 111.6475) (xy 91.59 111.6475) (xy 91.4255 111.483) (xy 90.867193 111.483)
+ (xy 90.740069 111.508287) (xy 90.62032 111.557888) (xy 90.51255 111.629898) (xy 90.420898 111.721549) (xy 90.348888 111.82932)
+ (xy 90.299287 111.949068) (xy 90.274 112.076192) (xy 88.723953 112.076192) (xy 88.724547 112.033679) (xy 88.682856 111.823124)
+ (xy 88.601062 111.624677) (xy 88.482281 111.445897) (xy 88.331036 111.293593) (xy 88.15309 111.173566) (xy 87.955219 111.090389)
+ (xy 87.74496 111.047229) (xy 87.6343 111.046456) (xy 87.264 110.676156) (xy 87.264 109.22) (xy 87.256996 109.148568)
+ (xy 87.250741 109.07707) (xy 87.249601 109.073144) (xy 87.249202 109.06908) (xy 87.228468 109.000406) (xy 87.208434 108.931448)
+ (xy 87.206553 108.927819) (xy 87.205372 108.923908) (xy 87.171684 108.86055) (xy 87.138647 108.796815) (xy 87.136097 108.793621)
+ (xy 87.13418 108.790015) (xy 87.088837 108.734419) (xy 87.04404 108.678303) (xy 87.03843 108.672614) (xy 87.038336 108.672499)
+ (xy 87.03823 108.672411) (xy 87.036422 108.670578) (xy 84.115422 105.749578) (xy 84.059919 105.703987) (xy 84.004979 105.657887)
+ (xy 84.001401 105.65592) (xy 83.998242 105.653325) (xy 83.934983 105.619406) (xy 83.872093 105.584832) (xy 83.868196 105.583596)
+ (xy 83.864597 105.581666) (xy 83.795971 105.560685) (xy 83.727547 105.538979) (xy 83.723488 105.538524) (xy 83.71958 105.537329)
+ (xy 83.648172 105.530076) (xy 83.576849 105.522076) (xy 83.56886 105.52202) (xy 83.568712 105.522005) (xy 83.568574 105.522018)
+ (xy 83.566 105.522) (xy 80.046073 105.522) (xy 79.966516 105.402257) (xy 79.771398 105.205771) (xy 79.541831 105.050926)
+ (xy 79.28656 104.94362) (xy 79.015308 104.887941) (xy 78.738408 104.886007) (xy 78.466405 104.937895) (xy 78.209661 105.041626)
+ (xy 77.977954 105.19325) (xy 77.780112 105.386992) (xy 77.735391 105.452305) (xy 77.733891 105.43349) (xy 77.679522 105.257926)
+ (xy 77.578394 105.104459) (xy 77.438516 104.985242) (xy 77.270962 104.909714) (xy 77.089 104.883855) (xy 75.565 104.883855)
+ (xy 75.46149 104.892109) (xy 75.285926 104.946478) (xy 75.132459 105.047606) (xy 75.013242 105.187484) (xy 74.937714 105.355038)
+ (xy 74.911855 105.537) (xy 71.9605 105.537) (xy 71.9605 102.337707) (xy 83.358895 102.337707) (xy 83.402138 102.57332)
+ (xy 83.490321 102.796047) (xy 83.620087 102.997403) (xy 83.786491 103.16972) (xy 83.983196 103.306433) (xy 84.202709 103.402336)
+ (xy 84.43667 103.453776) (xy 84.676166 103.458793) (xy 84.912075 103.417195) (xy 85.135412 103.330569) (xy 85.337669 103.202212)
+ (xy 85.511143 103.037015) (xy 85.649227 102.841269) (xy 85.74666 102.622431) (xy 85.799732 102.388835) (xy 85.803552 102.115226)
+ (xy 85.757024 101.880239) (xy 85.665739 101.658766) (xy 85.533175 101.459241) (xy 85.364381 101.289264) (xy 85.165786 101.155311)
+ (xy 84.944955 101.062482) (xy 84.710299 101.014314) (xy 84.470757 101.012642) (xy 84.235451 101.057528) (xy 84.013346 101.147265)
+ (xy 83.8129 101.278433) (xy 83.641749 101.446036) (xy 83.506412 101.643691) (xy 83.412044 101.863868) (xy 83.362239 102.098182)
+ (xy 83.358895 102.337707) (xy 71.9605 102.337707) (xy 71.9605 99.441) (xy 87.357855 99.441) (xy 87.357855 101.219)
+ (xy 87.366109 101.32251) (xy 87.420478 101.498074) (xy 87.521606 101.651541) (xy 87.661484 101.770758) (xy 87.829038 101.846286)
+ (xy 88.011 101.872145) (xy 89.789 101.872145) (xy 89.89251 101.863891) (xy 90.068074 101.809522) (xy 90.221541 101.708394)
+ (xy 90.340758 101.568516) (xy 90.416286 101.400962) (xy 90.442145 101.219) (xy 90.442145 100.686707) (xy 97.074895 100.686707)
+ (xy 97.118138 100.92232) (xy 97.206321 101.145047) (xy 97.336087 101.346403) (xy 97.502491 101.51872) (xy 97.699196 101.655433)
+ (xy 97.918709 101.751336) (xy 98.15267 101.802776) (xy 98.392166 101.807793) (xy 98.628075 101.766195) (xy 98.851412 101.679569)
+ (xy 99.053669 101.551212) (xy 99.227143 101.386015) (xy 99.365227 101.190269) (xy 99.46266 100.971431) (xy 99.50092 100.803029)
+ (xy 101.774061 100.803029) (xy 101.812808 101.014145) (xy 101.891823 101.213714) (xy 102.008097 101.394136) (xy 102.1572 101.548537)
+ (xy 102.333454 101.671036) (xy 102.474 101.732439) (xy 102.474 103.886) (xy 102.481009 103.957482) (xy 102.48726 104.02893)
+ (xy 102.488399 104.03285) (xy 102.488798 104.03692) (xy 102.509552 104.105662) (xy 102.529567 104.174553) (xy 102.531447 104.178179)
+ (xy 102.532628 104.182092) (xy 102.566325 104.245467) (xy 102.599353 104.309185) (xy 102.601903 104.312379) (xy 102.60382 104.315985)
+ (xy 102.649163 104.371581) (xy 102.69396 104.427697) (xy 102.69957 104.433386) (xy 102.699664 104.433501) (xy 102.69977 104.433589)
+ (xy 102.701578 104.435422) (xy 103.69 105.423844) (xy 103.69 138.122) (xy 103.697009 138.193482) (xy 103.70326 138.26493)
+ (xy 103.704399 138.26885) (xy 103.704798 138.27292) (xy 103.725554 138.341668) (xy 103.745567 138.410553) (xy 103.747447 138.414179)
+ (xy 103.748628 138.418092) (xy 103.782325 138.481467) (xy 103.815353 138.545185) (xy 103.817903 138.548379) (xy 103.81982 138.551985)
+ (xy 103.865163 138.607581) (xy 103.90996 138.663697) (xy 103.91557 138.669386) (xy 103.915664 138.669501) (xy 103.91577 138.669589)
+ (xy 103.917578 138.671422) (xy 108.543578 143.297422) (xy 108.599081 143.343013) (xy 108.654021 143.389113) (xy 108.657599 143.39108)
+ (xy 108.660758 143.393675) (xy 108.724017 143.427594) (xy 108.786907 143.462168) (xy 108.790804 143.463404) (xy 108.794403 143.465334)
+ (xy 108.863029 143.486315) (xy 108.931453 143.508021) (xy 108.935512 143.508476) (xy 108.93942 143.509671) (xy 109.010828 143.516924)
+ (xy 109.082151 143.524924) (xy 109.09014 143.52498) (xy 109.090288 143.524995) (xy 109.090426 143.524982) (xy 109.093 143.525)
+ (xy 140.462 143.525) (xy 140.533482 143.517991) (xy 140.60493 143.51174) (xy 140.60885 143.510601) (xy 140.61292 143.510202)
+ (xy 140.681668 143.489446) (xy 140.750553 143.469433) (xy 140.754179 143.467553) (xy 140.758092 143.466372) (xy 140.821467 143.432675)
+ (xy 140.885185 143.399647) (xy 140.888379 143.397097) (xy 140.891985 143.39518) (xy 140.947581 143.349837) (xy 141.003697 143.30504)
+ (xy 141.009386 143.29943) (xy 141.009501 143.299336) (xy 141.009589 143.29923) (xy 141.011422 143.297422) (xy 143.479589 140.829255)
+ (xy 143.596005 140.854851) (xy 143.872851 140.86065) (xy 144.145552 140.812566) (xy 144.403719 140.712429) (xy 144.63752 140.564055)
+ (xy 144.838049 140.373094) (xy 144.997667 140.146821) (xy 145.032124 140.06943) (xy 145.042068 140.094545) (xy 145.192071 140.327304)
+ (xy 145.384427 140.526495) (xy 145.611809 140.68453) (xy 145.865557 140.795389) (xy 146.136005 140.854851) (xy 146.412851 140.86065)
+ (xy 146.685552 140.812566) (xy 146.943719 140.712429) (xy 147.17752 140.564055) (xy 147.378049 140.373094) (xy 147.537667 140.146821)
+ (xy 147.572124 140.06943) (xy 147.582068 140.094545) (xy 147.732071 140.327304) (xy 147.924427 140.526495) (xy 148.151809 140.68453)
+ (xy 148.405557 140.795389) (xy 148.676005 140.854851) (xy 148.952851 140.86065) (xy 149.225552 140.812566) (xy 149.483719 140.712429)
+ (xy 149.71752 140.564055) (xy 149.918049 140.373094) (xy 150.077667 140.146821) (xy 150.112124 140.06943) (xy 150.122068 140.094545)
+ (xy 150.272071 140.327304) (xy 150.464427 140.526495) (xy 150.691809 140.68453) (xy 150.945557 140.795389) (xy 151.216005 140.854851)
+ (xy 151.492851 140.86065) (xy 151.765552 140.812566) (xy 152.023719 140.712429) (xy 152.25752 140.564055) (xy 152.458049 140.373094)
+ (xy 152.617667 140.146821) (xy 152.652124 140.06943) (xy 152.662068 140.094545) (xy 152.812071 140.327304) (xy 153.004427 140.526495)
+ (xy 153.231809 140.68453) (xy 153.485557 140.795389) (xy 153.756005 140.854851) (xy 154.032851 140.86065) (xy 154.305552 140.812566)
+ (xy 154.563719 140.712429) (xy 154.79752 140.564055) (xy 154.998049 140.373094) (xy 155.157667 140.146821) (xy 155.192124 140.06943)
+ (xy 155.202068 140.094545) (xy 155.352071 140.327304) (xy 155.544427 140.526495) (xy 155.771809 140.68453) (xy 156.025557 140.795389)
+ (xy 156.296005 140.854851) (xy 156.572851 140.86065) (xy 156.845552 140.812566) (xy 157.103719 140.712429) (xy 157.33752 140.564055)
+ (xy 157.538049 140.373094) (xy 157.697667 140.146821) (xy 157.732124 140.06943) (xy 157.742068 140.094545) (xy 157.892071 140.327304)
+ (xy 158.084427 140.526495) (xy 158.311809 140.68453) (xy 158.565557 140.795389) (xy 158.836005 140.854851) (xy 159.112851 140.86065)
+ (xy 159.385552 140.812566) (xy 159.643719 140.712429) (xy 159.87752 140.564055) (xy 160.078049 140.373094) (xy 160.237667 140.146821)
+ (xy 160.272124 140.06943) (xy 160.282068 140.094545) (xy 160.432071 140.327304) (xy 160.624427 140.526495) (xy 160.851809 140.68453)
+ (xy 161.105557 140.795389) (xy 161.376005 140.854851) (xy 161.652851 140.86065) (xy 161.925552 140.812566) (xy 162.183719 140.712429)
+ (xy 162.41752 140.564055) (xy 162.618049 140.373094) (xy 162.777667 140.146821) (xy 162.812124 140.06943) (xy 162.822068 140.094545)
+ (xy 162.972071 140.327304) (xy 163.164427 140.526495) (xy 163.391809 140.68453) (xy 163.645557 140.795389) (xy 163.916005 140.854851)
+ (xy 164.192851 140.86065) (xy 164.465552 140.812566) (xy 164.723719 140.712429) (xy 164.95752 140.564055) (xy 165.158049 140.373094)
+ (xy 165.317667 140.146821) (xy 165.352124 140.06943) (xy 165.362068 140.094545) (xy 165.512071 140.327304) (xy 165.704427 140.526495)
+ (xy 165.931809 140.68453) (xy 166.185557 140.795389) (xy 166.456005 140.854851) (xy 166.732851 140.86065) (xy 167.005552 140.812566)
+ (xy 167.263719 140.712429) (xy 167.49752 140.564055) (xy 167.698049 140.373094) (xy 167.857667 140.146821) (xy 167.892124 140.06943)
+ (xy 167.902068 140.094545) (xy 168.052071 140.327304) (xy 168.244427 140.526495) (xy 168.471809 140.68453) (xy 168.725557 140.795389)
+ (xy 168.996005 140.854851) (xy 169.272851 140.86065) (xy 169.545552 140.812566) (xy 169.711844 140.748065) (xy 169.712567 140.750553)
+ (xy 169.714447 140.754179) (xy 169.715628 140.758092) (xy 169.749325 140.821467) (xy 169.782353 140.885185) (xy 169.784903 140.888379)
+ (xy 169.78682 140.891985) (xy 169.832163 140.947581) (xy 169.87696 141.003697) (xy 169.88257 141.009386) (xy 169.882664 141.009501)
+ (xy 169.88277 141.009589) (xy 169.884578 141.011422) (xy 170.773578 141.900422) (xy 170.829081 141.946013) (xy 170.884021 141.992113)
+ (xy 170.887599 141.99408) (xy 170.890758 141.996675) (xy 170.954017 142.030594) (xy 171.016907 142.065168) (xy 171.020804 142.066404)
+ (xy 171.024403 142.068334) (xy 171.093029 142.089315) (xy 171.161453 142.111021) (xy 171.165512 142.111476) (xy 171.16942 142.112671)
+ (xy 171.240828 142.119924) (xy 171.312151 142.127924) (xy 171.32014 142.12798) (xy 171.320288 142.127995) (xy 171.320426 142.127982)
+ (xy 171.323 142.128) (xy 182.499 142.128) (xy 182.570482 142.120991) (xy 182.64193 142.11474) (xy 182.64585 142.113601)
+ (xy 182.64992 142.113202) (xy 182.718668 142.092446) (xy 182.787553 142.072433) (xy 182.791179 142.070553) (xy 182.795092 142.069372)
+ (xy 182.858467 142.035675) (xy 182.922185 142.002647) (xy 182.925379 142.000097) (xy 182.928985 141.99818) (xy 182.984581 141.952837)
+ (xy 183.040697 141.90804) (xy 183.046386 141.90243) (xy 183.046501 141.902336) (xy 183.046589 141.90223) (xy 183.048422 141.900422)
+ (xy 184.119589 140.829255) (xy 184.236005 140.854851) (xy 184.512851 140.86065) (xy 184.785552 140.812566) (xy 185.043719 140.712429)
+ (xy 185.27752 140.564055) (xy 185.478049 140.373094) (xy 185.637667 140.146821) (xy 185.750296 139.893853) (xy 185.811644 139.623827)
+ (xy 185.81606 139.307546) (xy 185.762276 139.035912) (xy 185.656754 138.779899) (xy 185.503516 138.549257) (xy 185.308398 138.352771)
+ (xy 185.251413 138.314334) (xy 185.26951 138.312891) (xy 185.445074 138.258522) (xy 185.598541 138.157394) (xy 185.717758 138.017516)
+ (xy 185.793286 137.849962) (xy 185.819145 137.668) (xy 185.819145 136.144) (xy 185.810891 136.04049) (xy 185.756522 135.864926)
+ (xy 185.655394 135.711459) (xy 185.515516 135.592242) (xy 185.347962 135.516714) (xy 185.2699 135.50562) (xy 185.2699 134.738725)
+ (xy 205.596144 134.738725) (xy 205.646131 135.011083) (xy 205.748068 135.268545) (xy 205.898071 135.501304) (xy 206.090427 135.700495)
+ (xy 206.317809 135.85853) (xy 206.571557 135.969389) (xy 206.842005 136.028851) (xy 207.118851 136.03465) (xy 207.391552 135.986566)
+ (xy 207.649719 135.886429) (xy 207.88352 135.738055) (xy 208.084049 135.547094) (xy 208.243667 135.320821) (xy 208.356296 135.067853)
+ (xy 208.417644 134.797827) (xy 208.418469 134.738725) (xy 215.756144 134.738725) (xy 215.806131 135.011083) (xy 215.908068 135.268545)
+ (xy 216.058071 135.501304) (xy 216.250427 135.700495) (xy 216.477809 135.85853) (xy 216.731557 135.969389) (xy 217.002005 136.028851)
+ (xy 217.278851 136.03465) (xy 217.551552 135.986566) (xy 217.809719 135.886429) (xy 218.04352 135.738055) (xy 218.244049 135.547094)
+ (xy 218.403667 135.320821) (xy 218.516296 135.067853) (xy 218.577644 134.797827) (xy 218.58206 134.481546) (xy 218.528276 134.209912)
+ (xy 218.422754 133.953899) (xy 218.269516 133.723257) (xy 218.074398 133.526771) (xy 217.844831 133.371926) (xy 217.58956 133.26462)
+ (xy 217.318308 133.208941) (xy 217.041408 133.207007) (xy 216.769405 133.258895) (xy 216.512661 133.362626) (xy 216.280954 133.51425)
+ (xy 216.083112 133.707992) (xy 215.926668 133.936472) (xy 215.817583 134.190988) (xy 215.76001 134.461844) (xy 215.756144 134.738725)
+ (xy 208.418469 134.738725) (xy 208.42206 134.481546) (xy 208.368276 134.209912) (xy 208.262754 133.953899) (xy 208.109516 133.723257)
+ (xy 207.914398 133.526771) (xy 207.684831 133.371926) (xy 207.42956 133.26462) (xy 207.158308 133.208941) (xy 206.881408 133.207007)
+ (xy 206.609405 133.258895) (xy 206.352661 133.362626) (xy 206.120954 133.51425) (xy 205.923112 133.707992) (xy 205.766668 133.936472)
+ (xy 205.657583 134.190988) (xy 205.60001 134.461844) (xy 205.596144 134.738725) (xy 185.2699 134.738725) (xy 185.2699 131.424891)
+ (xy 185.27752 131.420055) (xy 185.478049 131.229094) (xy 185.637667 131.002821) (xy 185.750296 130.749853) (xy 185.811644 130.479827)
+ (xy 185.81606 130.163546) (xy 185.762276 129.891912) (xy 185.656754 129.635899) (xy 185.503516 129.405257) (xy 185.308398 129.208771)
+ (xy 185.078831 129.053926) (xy 184.82356 128.94662) (xy 184.552308 128.890941) (xy 184.275408 128.889007) (xy 184.003405 128.940895)
+ (xy 183.746661 129.044626) (xy 183.514954 129.19625) (xy 183.317112 129.389992) (xy 183.272391 129.455305) (xy 183.270891 129.43649)
+ (xy 183.216522 129.260926) (xy 183.115394 129.107459) (xy 182.975516 128.988242) (xy 182.807962 128.912714) (xy 182.626 128.886855)
+ (xy 181.583989 128.886855) (xy 185.146137 125.324707) (xy 193.467895 125.324707) (xy 193.511138 125.56032) (xy 193.599321 125.783047)
+ (xy 193.729087 125.984403) (xy 193.895491 126.15672) (xy 194.092196 126.293433) (xy 194.311709 126.389336) (xy 194.54567 126.440776)
+ (xy 194.785166 126.445793) (xy 195.021075 126.404195) (xy 195.212287 126.330029) (xy 205.406061 126.330029) (xy 205.444808 126.541145)
+ (xy 205.523823 126.740714) (xy 205.640097 126.921136) (xy 205.7892 127.075537) (xy 205.965454 127.198036) (xy 206.162144 127.283968)
+ (xy 206.37178 127.330059) (xy 206.586375 127.334555) (xy 206.797757 127.297282) (xy 206.997873 127.219662) (xy 207.179102 127.104651)
+ (xy 207.33454 126.956629) (xy 207.458267 126.781235) (xy 207.54557 126.58515) (xy 207.593124 126.375841) (xy 207.596547 126.130679)
+ (xy 207.554856 125.920124) (xy 207.473062 125.721677) (xy 207.354281 125.542897) (xy 207.203036 125.390593) (xy 207.168606 125.367369)
+ (xy 208.977301 125.367369) (xy 209.016048 125.578485) (xy 209.095063 125.778054) (xy 209.211337 125.958476) (xy 209.36044 126.112877)
+ (xy 209.536694 126.235376) (xy 209.733384 126.321308) (xy 209.94302 126.367399) (xy 210.069096 126.37004) (xy 216.328478 132.629422)
+ (xy 216.383955 132.674991) (xy 216.438921 132.721113) (xy 216.442502 132.723082) (xy 216.445658 132.725674) (xy 216.508878 132.759573)
+ (xy 216.571807 132.794168) (xy 216.575704 132.795404) (xy 216.579303 132.797334) (xy 216.647887 132.818302) (xy 216.716353 132.840021)
+ (xy 216.720418 132.840477) (xy 216.72432 132.84167) (xy 216.795678 132.848918) (xy 216.867051 132.856924) (xy 216.87504 132.85698)
+ (xy 216.875188 132.856995) (xy 216.875326 132.856982) (xy 216.8779 132.857) (xy 221.070852 132.857) (xy 221.138071 132.961304)
+ (xy 221.330427 133.160495) (xy 221.557809 133.31853) (xy 221.626992 133.348755) (xy 221.592661 133.362626) (xy 221.360954 133.51425)
+ (xy 221.163112 133.707992) (xy 221.006668 133.936472) (xy 220.897583 134.190988) (xy 220.84001 134.461844) (xy 220.836144 134.738725)
+ (xy 220.886131 135.011083) (xy 220.988068 135.268545) (xy 221.138071 135.501304) (xy 221.330427 135.700495) (xy 221.557809 135.85853)
+ (xy 221.626992 135.888755) (xy 221.592661 135.902626) (xy 221.360954 136.05425) (xy 221.163112 136.247992) (xy 221.006668 136.476472)
+ (xy 220.897583 136.730988) (xy 220.84001 137.001844) (xy 220.836144 137.278725) (xy 220.886131 137.551083) (xy 220.988068 137.808545)
+ (xy 221.138071 138.041304) (xy 221.330427 138.240495) (xy 221.557809 138.39853) (xy 221.811557 138.509389) (xy 222.082005 138.568851)
+ (xy 222.358851 138.57465) (xy 222.631552 138.526566) (xy 222.889719 138.426429) (xy 223.12352 138.278055) (xy 223.286201 138.123136)
+ (xy 223.973942 138.123136) (xy 224.037675 138.372422) (xy 224.288663 138.495897) (xy 224.558917 138.568034) (xy 224.838051 138.586062)
+ (xy 225.115338 138.549287) (xy 225.380124 138.459121) (xy 225.542325 138.372422) (xy 225.606058 138.123136) (xy 224.79 137.307078)
+ (xy 223.973942 138.123136) (xy 223.286201 138.123136) (xy 223.324049 138.087094) (xy 223.483667 137.860821) (xy 223.513833 137.793067)
+ (xy 223.577578 137.912325) (xy 223.826864 137.976058) (xy 224.642922 137.16) (xy 224.937078 137.16) (xy 225.753136 137.976058)
+ (xy 226.002422 137.912325) (xy 226.125897 137.661337) (xy 226.198034 137.391083) (xy 226.216062 137.111949) (xy 226.179287 136.834662)
+ (xy 226.089121 136.569876) (xy 226.002422 136.407675) (xy 225.753136 136.343942) (xy 224.937078 137.16) (xy 224.642922 137.16)
+ (xy 223.826864 136.343942) (xy 223.577578 136.407675) (xy 223.517527 136.529741) (xy 223.502754 136.493899) (xy 223.349516 136.263257)
+ (xy 223.154398 136.066771) (xy 222.924831 135.911926) (xy 222.876434 135.891582) (xy 222.889719 135.886429) (xy 223.12352 135.738055)
+ (xy 223.324049 135.547094) (xy 223.483667 135.320821) (xy 223.518124 135.24343) (xy 223.528068 135.268545) (xy 223.678071 135.501304)
+ (xy 223.870427 135.700495) (xy 224.097809 135.85853) (xy 224.15639 135.884123) (xy 224.037675 135.947578) (xy 223.973942 136.196864)
+ (xy 224.79 137.012922) (xy 225.606058 136.196864) (xy 225.542325 135.947578) (xy 225.423182 135.888965) (xy 225.429719 135.886429)
+ (xy 225.66352 135.738055) (xy 225.864049 135.547094) (xy 226.023667 135.320821) (xy 226.136296 135.067853) (xy 226.197644 134.797827)
+ (xy 226.20206 134.481546) (xy 226.148276 134.209912) (xy 226.042754 133.953899) (xy 225.889516 133.723257) (xy 225.694398 133.526771)
+ (xy 225.464831 133.371926) (xy 225.416434 133.351582) (xy 225.429719 133.346429) (xy 225.66352 133.198055) (xy 225.864049 133.007094)
+ (xy 226.023667 132.780821) (xy 226.136296 132.527853) (xy 226.197644 132.257827) (xy 226.20206 131.941546) (xy 226.148276 131.669912)
+ (xy 226.042754 131.413899) (xy 225.889516 131.183257) (xy 225.694398 130.986771) (xy 225.464831 130.831926) (xy 225.416434 130.811582)
+ (xy 225.429719 130.806429) (xy 225.66352 130.658055) (xy 225.864049 130.467094) (xy 226.023667 130.240821) (xy 226.136296 129.987853)
+ (xy 226.197644 129.717827) (xy 226.20206 129.401546) (xy 226.148276 129.129912) (xy 226.042754 128.873899) (xy 225.889516 128.643257)
+ (xy 225.694398 128.446771) (xy 225.464831 128.291926) (xy 225.416434 128.271582) (xy 225.429719 128.266429) (xy 225.66352 128.118055)
+ (xy 225.864049 127.927094) (xy 226.023667 127.700821) (xy 226.136296 127.447853) (xy 226.197644 127.177827) (xy 226.20206 126.861546)
+ (xy 226.148276 126.589912) (xy 226.042754 126.333899) (xy 225.889516 126.103257) (xy 225.694398 125.906771) (xy 225.464831 125.751926)
+ (xy 225.416434 125.731582) (xy 225.429719 125.726429) (xy 225.66352 125.578055) (xy 225.864049 125.387094) (xy 226.023667 125.160821)
+ (xy 226.136296 124.907853) (xy 226.197644 124.637827) (xy 226.20206 124.321546) (xy 226.148276 124.049912) (xy 226.042754 123.793899)
+ (xy 225.889516 123.563257) (xy 225.694398 123.366771) (xy 225.464831 123.211926) (xy 225.416434 123.191582) (xy 225.429719 123.186429)
+ (xy 225.66352 123.038055) (xy 225.864049 122.847094) (xy 226.023667 122.620821) (xy 226.136296 122.367853) (xy 226.197644 122.097827)
+ (xy 226.20206 121.781546) (xy 226.148276 121.509912) (xy 226.042754 121.253899) (xy 225.889516 121.023257) (xy 225.694398 120.826771)
+ (xy 225.464831 120.671926) (xy 225.416434 120.651582) (xy 225.429719 120.646429) (xy 225.66352 120.498055) (xy 225.864049 120.307094)
+ (xy 226.023667 120.080821) (xy 226.136296 119.827853) (xy 226.197644 119.557827) (xy 226.20206 119.241546) (xy 226.148276 118.969912)
+ (xy 226.042754 118.713899) (xy 225.889516 118.483257) (xy 225.694398 118.286771) (xy 225.464831 118.131926) (xy 225.416434 118.111582)
+ (xy 225.429719 118.106429) (xy 225.66352 117.958055) (xy 225.864049 117.767094) (xy 226.023667 117.540821) (xy 226.136296 117.287853)
+ (xy 226.197644 117.017827) (xy 226.20206 116.701546) (xy 226.148276 116.429912) (xy 226.042754 116.173899) (xy 225.889516 115.943257)
+ (xy 225.694398 115.746771) (xy 225.464831 115.591926) (xy 225.416434 115.571582) (xy 225.429719 115.566429) (xy 225.66352 115.418055)
+ (xy 225.864049 115.227094) (xy 226.023667 115.000821) (xy 226.136296 114.747853) (xy 226.197644 114.477827) (xy 226.20206 114.161546)
+ (xy 226.148276 113.889912) (xy 226.042754 113.633899) (xy 225.889516 113.403257) (xy 225.694398 113.206771) (xy 225.464831 113.051926)
+ (xy 225.416434 113.031582) (xy 225.429719 113.026429) (xy 225.66352 112.878055) (xy 225.864049 112.687094) (xy 226.023667 112.460821)
+ (xy 226.136296 112.207853) (xy 226.197644 111.937827) (xy 226.20206 111.621546) (xy 226.148276 111.349912) (xy 226.042754 111.093899)
+ (xy 225.889516 110.863257) (xy 225.694398 110.666771) (xy 225.464831 110.511926) (xy 225.416434 110.491582) (xy 225.429719 110.486429)
+ (xy 225.66352 110.338055) (xy 225.864049 110.147094) (xy 226.023667 109.920821) (xy 226.136296 109.667853) (xy 226.197644 109.397827)
+ (xy 226.20206 109.081546) (xy 226.148276 108.809912) (xy 226.042754 108.553899) (xy 225.889516 108.323257) (xy 225.694398 108.126771)
+ (xy 225.464831 107.971926) (xy 225.416434 107.951582) (xy 225.429719 107.946429) (xy 225.66352 107.798055) (xy 225.864049 107.607094)
+ (xy 226.023667 107.380821) (xy 226.136296 107.127853) (xy 226.197644 106.857827) (xy 226.20206 106.541546) (xy 226.148276 106.269912)
+ (xy 226.042754 106.013899) (xy 225.889516 105.783257) (xy 225.694398 105.586771) (xy 225.464831 105.431926) (xy 225.416434 105.411582)
+ (xy 225.429719 105.406429) (xy 225.66352 105.258055) (xy 225.864049 105.067094) (xy 226.023667 104.840821) (xy 226.136296 104.587853)
+ (xy 226.197644 104.317827) (xy 226.20206 104.001546) (xy 226.148276 103.729912) (xy 226.042754 103.473899) (xy 225.889516 103.243257)
+ (xy 225.694398 103.046771) (xy 225.464831 102.891926) (xy 225.416434 102.871582) (xy 225.429719 102.866429) (xy 225.66352 102.718055)
+ (xy 225.864049 102.527094) (xy 226.023667 102.300821) (xy 226.136296 102.047853) (xy 226.197644 101.777827) (xy 226.20206 101.461546)
+ (xy 226.148276 101.189912) (xy 226.042754 100.933899) (xy 225.889516 100.703257) (xy 225.694398 100.506771) (xy 225.464831 100.351926)
+ (xy 225.416434 100.331582) (xy 225.429719 100.326429) (xy 225.66352 100.178055) (xy 225.864049 99.987094) (xy 226.023667 99.760821)
+ (xy 226.136296 99.507853) (xy 226.197644 99.237827) (xy 226.20206 98.921546) (xy 226.148276 98.649912) (xy 226.042754 98.393899)
+ (xy 225.889516 98.163257) (xy 225.694398 97.966771) (xy 225.464831 97.811926) (xy 225.416434 97.791582) (xy 225.429719 97.786429)
+ (xy 225.66352 97.638055) (xy 225.864049 97.447094) (xy 226.023667 97.220821) (xy 226.136296 96.967853) (xy 226.197644 96.697827)
+ (xy 226.20206 96.381546) (xy 226.148276 96.109912) (xy 226.042754 95.853899) (xy 225.889516 95.623257) (xy 225.694398 95.426771)
+ (xy 225.464831 95.271926) (xy 225.416434 95.251582) (xy 225.429719 95.246429) (xy 225.66352 95.098055) (xy 225.864049 94.907094)
+ (xy 226.023667 94.680821) (xy 226.136296 94.427853) (xy 226.197644 94.157827) (xy 226.20206 93.841546) (xy 226.148276 93.569912)
+ (xy 226.042754 93.313899) (xy 225.889516 93.083257) (xy 225.694398 92.886771) (xy 225.464831 92.731926) (xy 225.416434 92.711582)
+ (xy 225.429719 92.706429) (xy 225.66352 92.558055) (xy 225.864049 92.367094) (xy 226.023667 92.140821) (xy 226.136296 91.887853)
+ (xy 226.197644 91.617827) (xy 226.20206 91.301546) (xy 226.148276 91.029912) (xy 226.042754 90.773899) (xy 225.889516 90.543257)
+ (xy 225.694398 90.346771) (xy 225.464831 90.191926) (xy 225.424949 90.175161) (xy 225.542325 90.112422) (xy 225.606058 89.863136)
+ (xy 224.79 89.047078) (xy 223.973942 89.863136) (xy 224.037675 90.112422) (xy 224.158861 90.17204) (xy 224.132661 90.182626)
+ (xy 223.900954 90.33425) (xy 223.703112 90.527992) (xy 223.546668 90.756472) (xy 223.52062 90.817246) (xy 223.502754 90.773899)
+ (xy 223.349516 90.543257) (xy 223.154398 90.346771) (xy 223.097413 90.308334) (xy 223.11551 90.306891) (xy 223.291074 90.252522)
+ (xy 223.444541 90.151394) (xy 223.563758 90.011516) (xy 223.639286 89.843962) (xy 223.663402 89.674267) (xy 223.826864 89.716058)
+ (xy 224.642922 88.9) (xy 224.937078 88.9) (xy 225.753136 89.716058) (xy 226.002422 89.652325) (xy 226.125897 89.401337)
+ (xy 226.198034 89.131083) (xy 226.216062 88.851949) (xy 226.179287 88.574662) (xy 226.089121 88.309876) (xy 226.002422 88.147675)
+ (xy 225.753136 88.083942) (xy 224.937078 88.9) (xy 224.642922 88.9) (xy 223.826864 88.083942) (xy 223.664152 88.125541)
+ (xy 223.656891 88.03449) (xy 223.626658 87.936864) (xy 223.973942 87.936864) (xy 224.79 88.752922) (xy 225.606058 87.936864)
+ (xy 225.542325 87.687578) (xy 225.291337 87.564103) (xy 225.021083 87.491966) (xy 224.741949 87.473938) (xy 224.464662 87.510713)
+ (xy 224.199876 87.600879) (xy 224.037675 87.687578) (xy 223.973942 87.936864) (xy 223.626658 87.936864) (xy 223.602522 87.858926)
+ (xy 223.501394 87.705459) (xy 223.361516 87.586242) (xy 223.193962 87.510714) (xy 223.012 87.484855) (xy 221.488 87.484855)
+ (xy 221.38449 87.493109) (xy 221.208926 87.547478) (xy 221.055459 87.648606) (xy 220.936242 87.788484) (xy 220.860714 87.956038)
+ (xy 220.834855 88.138) (xy 220.834855 89.662) (xy 220.843109 89.76551) (xy 220.897478 89.941074) (xy 220.998606 90.094541)
+ (xy 221.138484 90.213758) (xy 221.306038 90.289286) (xy 221.407608 90.30372) (xy 221.360954 90.33425) (xy 221.163112 90.527992)
+ (xy 221.006668 90.756472) (xy 220.897583 91.010988) (xy 220.84001 91.281844) (xy 220.836144 91.558725) (xy 220.886131 91.831083)
+ (xy 220.988068 92.088545) (xy 221.138071 92.321304) (xy 221.330427 92.520495) (xy 221.557809 92.67853) (xy 221.626992 92.708755)
+ (xy 221.592661 92.722626) (xy 221.360954 92.87425) (xy 221.163112 93.067992) (xy 221.006668 93.296472) (xy 220.897583 93.550988)
+ (xy 220.84001 93.821844) (xy 220.836144 94.098725) (xy 220.886131 94.371083) (xy 220.988068 94.628545) (xy 221.138071 94.861304)
+ (xy 221.330427 95.060495) (xy 221.557809 95.21853) (xy 221.626992 95.248755) (xy 221.592661 95.262626) (xy 221.360954 95.41425)
+ (xy 221.163112 95.607992) (xy 221.006668 95.836472) (xy 220.897583 96.090988) (xy 220.84001 96.361844) (xy 220.836144 96.638725)
+ (xy 220.886131 96.911083) (xy 220.988068 97.168545) (xy 221.138071 97.401304) (xy 221.330427 97.600495) (xy 221.557809 97.75853)
+ (xy 221.626992 97.788755) (xy 221.592661 97.802626) (xy 221.360954 97.95425) (xy 221.163112 98.147992) (xy 221.006668 98.376472)
+ (xy 220.897583 98.630988) (xy 220.84001 98.901844) (xy 220.836144 99.178725) (xy 220.886131 99.451083) (xy 220.988068 99.708545)
+ (xy 221.138071 99.941304) (xy 221.330427 100.140495) (xy 221.557809 100.29853) (xy 221.626992 100.328755) (xy 221.592661 100.342626)
+ (xy 221.360954 100.49425) (xy 221.163112 100.687992) (xy 221.006668 100.916472) (xy 220.897583 101.170988) (xy 220.84001 101.441844)
+ (xy 220.836144 101.718725) (xy 220.886131 101.991083) (xy 220.988068 102.248545) (xy 221.138071 102.481304) (xy 221.330427 102.680495)
+ (xy 221.557809 102.83853) (xy 221.626992 102.868755) (xy 221.592661 102.882626) (xy 221.360954 103.03425) (xy 221.163112 103.227992)
+ (xy 221.006668 103.456472) (xy 220.897583 103.710988) (xy 220.84001 103.981844) (xy 220.836144 104.258725) (xy 220.886131 104.531083)
+ (xy 220.988068 104.788545) (xy 221.138071 105.021304) (xy 221.330427 105.220495) (xy 221.557809 105.37853) (xy 221.626992 105.408755)
+ (xy 221.592661 105.422626) (xy 221.360954 105.57425) (xy 221.163112 105.767992) (xy 221.006668 105.996472) (xy 220.897583 106.250988)
+ (xy 220.84001 106.521844) (xy 220.836144 106.798725) (xy 220.886131 107.071083) (xy 220.988068 107.328545) (xy 221.138071 107.561304)
+ (xy 221.330427 107.760495) (xy 221.557809 107.91853) (xy 221.626992 107.948755) (xy 221.592661 107.962626) (xy 221.360954 108.11425)
+ (xy 221.163112 108.307992) (xy 221.006668 108.536472) (xy 220.897583 108.790988) (xy 220.84001 109.061844) (xy 220.836144 109.338725)
+ (xy 220.886131 109.611083) (xy 220.988068 109.868545) (xy 221.138071 110.101304) (xy 221.330427 110.300495) (xy 221.557809 110.45853)
+ (xy 221.626992 110.488755) (xy 221.592661 110.502626) (xy 221.360954 110.65425) (xy 221.163112 110.847992) (xy 221.006668 111.076472)
+ (xy 220.897583 111.330988) (xy 220.84001 111.601844) (xy 220.836144 111.878725) (xy 220.886131 112.151083) (xy 220.988068 112.408545)
+ (xy 221.138071 112.641304) (xy 221.330427 112.840495) (xy 221.557809 112.99853) (xy 221.626992 113.028755) (xy 221.592661 113.042626)
+ (xy 221.360954 113.19425) (xy 221.163112 113.387992) (xy 221.006668 113.616472) (xy 220.897583 113.870988) (xy 220.84001 114.141844)
+ (xy 220.836144 114.418725) (xy 220.886131 114.691083) (xy 220.988068 114.948545) (xy 221.138071 115.181304) (xy 221.330427 115.380495)
+ (xy 221.557809 115.53853) (xy 221.626992 115.568755) (xy 221.592661 115.582626) (xy 221.360954 115.73425) (xy 221.163112 115.927992)
+ (xy 221.04671 116.097992) (xy 221.093224 115.893261) (xy 221.096647 115.648099) (xy 221.054956 115.437544) (xy 220.973162 115.239097)
+ (xy 220.854381 115.060317) (xy 220.703136 114.908013) (xy 220.52519 114.787986) (xy 220.327319 114.704809) (xy 220.11706 114.661649)
+ (xy 219.902423 114.66015) (xy 219.691582 114.70037) (xy 219.492569 114.780777) (xy 219.312964 114.898307) (xy 219.159607 115.048485)
+ (xy 219.038341 115.225589) (xy 218.953785 115.422875) (xy 218.909158 115.632827) (xy 218.906161 115.847449) (xy 218.944908 116.058565)
+ (xy 219.023923 116.258134) (xy 219.140197 116.438556) (xy 219.2893 116.592957) (xy 219.465554 116.715456) (xy 219.662244 116.801388)
+ (xy 219.87188 116.847479) (xy 220.086475 116.851975) (xy 220.297857 116.814702) (xy 220.497973 116.737082) (xy 220.679202 116.622071)
+ (xy 220.83464 116.474049) (xy 220.926161 116.344309) (xy 220.897583 116.410988) (xy 220.84001 116.681844) (xy 220.836144 116.958725)
+ (xy 220.886131 117.231083) (xy 220.988068 117.488545) (xy 221.138071 117.721304) (xy 221.330427 117.920495) (xy 221.557809 118.07853)
+ (xy 221.626992 118.108755) (xy 221.592661 118.122626) (xy 221.360954 118.27425) (xy 221.163112 118.467992) (xy 221.006668 118.696472)
+ (xy 220.897583 118.950988) (xy 220.84001 119.221844) (xy 220.836144 119.498725) (xy 220.886131 119.771083) (xy 220.988068 120.028545)
+ (xy 221.138071 120.261304) (xy 221.330427 120.460495) (xy 221.557809 120.61853) (xy 221.626992 120.648755) (xy 221.592661 120.662626)
+ (xy 221.360954 120.81425) (xy 221.163112 121.007992) (xy 221.006668 121.236472) (xy 220.897583 121.490988) (xy 220.84001 121.761844)
+ (xy 220.836144 122.038725) (xy 220.886131 122.311083) (xy 220.988068 122.568545) (xy 221.138071 122.801304) (xy 221.330427 123.000495)
+ (xy 221.557809 123.15853) (xy 221.626992 123.188755) (xy 221.592661 123.202626) (xy 221.360954 123.35425) (xy 221.163112 123.547992)
+ (xy 221.006668 123.776472) (xy 220.897583 124.030988) (xy 220.84001 124.301844) (xy 220.836144 124.578725) (xy 220.886131 124.851083)
+ (xy 220.988068 125.108545) (xy 221.138071 125.341304) (xy 221.330427 125.540495) (xy 221.557809 125.69853) (xy 221.626992 125.728755)
+ (xy 221.592661 125.742626) (xy 221.360954 125.89425) (xy 221.163112 126.087992) (xy 221.006668 126.316472) (xy 220.897583 126.570988)
+ (xy 220.84001 126.841844) (xy 220.836144 127.118725) (xy 220.886131 127.391083) (xy 220.988068 127.648545) (xy 221.138071 127.881304)
+ (xy 221.330427 128.080495) (xy 221.557809 128.23853) (xy 221.626992 128.268755) (xy 221.592661 128.282626) (xy 221.360954 128.43425)
+ (xy 221.163112 128.627992) (xy 221.006668 128.856472) (xy 220.897583 129.110988) (xy 220.84001 129.381844) (xy 220.836144 129.658725)
+ (xy 220.886131 129.931083) (xy 220.988068 130.188545) (xy 221.138071 130.421304) (xy 221.330427 130.620495) (xy 221.557809 130.77853)
+ (xy 221.626992 130.808755) (xy 221.592661 130.822626) (xy 221.360954 130.97425) (xy 221.163112 131.167992) (xy 221.07067 131.303)
+ (xy 217.199744 131.303) (xy 211.166368 125.269624) (xy 211.167787 125.168019) (xy 211.126096 124.957464) (xy 211.044302 124.759017)
+ (xy 210.925521 124.580237) (xy 210.774276 124.427933) (xy 210.59633 124.307906) (xy 210.398459 124.224729) (xy 210.1882 124.181569)
+ (xy 209.973563 124.18007) (xy 209.762722 124.22029) (xy 209.563709 124.300697) (xy 209.384104 124.418227) (xy 209.230747 124.568405)
+ (xy 209.109481 124.745509) (xy 209.024925 124.942795) (xy 208.980298 125.152747) (xy 208.977301 125.367369) (xy 207.168606 125.367369)
+ (xy 207.02509 125.270566) (xy 206.827219 125.187389) (xy 206.61696 125.144229) (xy 206.402323 125.14273) (xy 206.191482 125.18295)
+ (xy 205.992469 125.263357) (xy 205.812864 125.380887) (xy 205.659507 125.531065) (xy 205.538241 125.708169) (xy 205.453685 125.905455)
+ (xy 205.409058 126.115407) (xy 205.406061 126.330029) (xy 195.212287 126.330029) (xy 195.244412 126.317569) (xy 195.446669 126.189212)
+ (xy 195.620143 126.024015) (xy 195.758227 125.828269) (xy 195.85566 125.609431) (xy 195.908732 125.375835) (xy 195.912552 125.102226)
+ (xy 195.866024 124.867239) (xy 195.774739 124.645766) (xy 195.642175 124.446241) (xy 195.473381 124.276264) (xy 195.274786 124.142311)
+ (xy 195.053955 124.049482) (xy 194.819299 124.001314) (xy 194.579757 123.999642) (xy 194.344451 124.044528) (xy 194.122346 124.134265)
+ (xy 193.9219 124.265433) (xy 193.750749 124.433036) (xy 193.615412 124.630691) (xy 193.521044 124.850868) (xy 193.471239 125.085182)
+ (xy 193.467895 125.324707) (xy 185.146137 125.324707) (xy 186.522817 123.948027) (xy 191.110775 123.948027) (xy 191.154018 124.18364)
+ (xy 191.242201 124.406367) (xy 191.371967 124.607723) (xy 191.538371 124.78004) (xy 191.735076 124.916753) (xy 191.954589 125.012656)
+ (xy 192.18855 125.064096) (xy 192.428046 125.069113) (xy 192.663955 125.027515) (xy 192.887292 124.940889) (xy 193.089549 124.812532)
+ (xy 193.263023 124.647335) (xy 193.401107 124.451589) (xy 193.49854 124.232751) (xy 193.551612 123.999155) (xy 193.555432 123.725546)
+ (xy 193.508904 123.490559) (xy 193.417619 123.269086) (xy 193.285055 123.069561) (xy 193.116261 122.899584) (xy 192.917666 122.765631)
+ (xy 192.696835 122.672802) (xy 192.462179 122.624634) (xy 192.222637 122.622962) (xy 191.987331 122.667848) (xy 191.765226 122.757585)
+ (xy 191.56478 122.888753) (xy 191.393629 123.056356) (xy 191.258292 123.254011) (xy 191.163924 123.474188) (xy 191.114119 123.708502)
+ (xy 191.110775 123.948027) (xy 186.522817 123.948027) (xy 186.985422 123.485422) (xy 187.031013 123.429919) (xy 187.077113 123.374979)
+ (xy 187.07908 123.371401) (xy 187.081675 123.368242) (xy 187.115594 123.304983) (xy 187.150168 123.242093) (xy 187.151404 123.238196)
+ (xy 187.153334 123.234597) (xy 187.174315 123.165971) (xy 187.196021 123.097547) (xy 187.196476 123.093488) (xy 187.197671 123.08958)
+ (xy 187.204924 123.018172) (xy 187.212924 122.946849) (xy 187.21298 122.93886) (xy 187.212995 122.938712) (xy 187.212982 122.938574)
+ (xy 187.213 122.936) (xy 187.213 121.171807) (xy 199.340375 121.171807) (xy 199.383618 121.40742) (xy 199.471801 121.630147)
+ (xy 199.601567 121.831503) (xy 199.767971 122.00382) (xy 199.964676 122.140533) (xy 200.184189 122.236436) (xy 200.41815 122.287876)
+ (xy 200.657646 122.292893) (xy 200.893555 122.251295) (xy 201.116892 122.164669) (xy 201.319149 122.036312) (xy 201.492623 121.871115)
+ (xy 201.630707 121.675369) (xy 201.72814 121.456531) (xy 201.753586 121.344527) (xy 202.954795 121.344527) (xy 202.998038 121.58014)
+ (xy 203.086221 121.802867) (xy 203.215987 122.004223) (xy 203.382391 122.17654) (xy 203.579096 122.313253) (xy 203.798609 122.409156)
+ (xy 204.03257 122.460596) (xy 204.272066 122.465613) (xy 204.507975 122.424015) (xy 204.731312 122.337389) (xy 204.926797 122.213329)
+ (xy 205.052296 122.300553) (xy 205.271809 122.396456) (xy 205.50577 122.447896) (xy 205.745266 122.452913) (xy 205.981175 122.411315)
+ (xy 206.204512 122.324689) (xy 206.406769 122.196332) (xy 206.580243 122.031135) (xy 206.718327 121.835389) (xy 206.81576 121.616551)
+ (xy 206.868832 121.382955) (xy 206.872652 121.109346) (xy 206.826124 120.874359) (xy 206.734839 120.652886) (xy 206.602275 120.453361)
+ (xy 206.433481 120.283384) (xy 206.234886 120.149431) (xy 206.014055 120.056602) (xy 205.779399 120.008434) (xy 205.539857 120.006762)
+ (xy 205.304551 120.051648) (xy 205.082446 120.141385) (xy 204.904026 120.25814) (xy 204.761686 120.162131) (xy 204.540855 120.069302)
+ (xy 204.306199 120.021134) (xy 204.066657 120.019462) (xy 203.831351 120.064348) (xy 203.609246 120.154085) (xy 203.4088 120.285253)
+ (xy 203.237649 120.452856) (xy 203.102312 120.650511) (xy 203.007944 120.870688) (xy 202.958139 121.105002) (xy 202.954795 121.344527)
+ (xy 201.753586 121.344527) (xy 201.781212 121.222935) (xy 201.785032 120.949326) (xy 201.738504 120.714339) (xy 201.647219 120.492866)
+ (xy 201.514655 120.293341) (xy 201.345861 120.123364) (xy 201.147266 119.989411) (xy 200.926435 119.896582) (xy 200.691779 119.848414)
+ (xy 200.452237 119.846742) (xy 200.216931 119.891628) (xy 199.994826 119.981365) (xy 199.79438 120.112533) (xy 199.623229 120.280136)
+ (xy 199.487892 120.477791) (xy 199.393524 120.697968) (xy 199.343719 120.932282) (xy 199.340375 121.171807) (xy 187.213 121.171807)
+ (xy 187.213 118.197467) (xy 208.509775 118.197467) (xy 208.553018 118.43308) (xy 208.641201 118.655807) (xy 208.770967 118.857163)
+ (xy 208.937371 119.02948) (xy 209.134076 119.166193) (xy 209.353589 119.262096) (xy 209.58755 119.313536) (xy 209.827046 119.318553)
+ (xy 210.062955 119.276955) (xy 210.286292 119.190329) (xy 210.488549 119.061972) (xy 210.662023 118.896775) (xy 210.800107 118.701029)
+ (xy 210.89754 118.482191) (xy 210.950612 118.248595) (xy 210.954432 117.974986) (xy 210.907904 117.739999) (xy 210.816619 117.518526)
+ (xy 210.684055 117.319001) (xy 210.515261 117.149024) (xy 210.316666 117.015071) (xy 210.095835 116.922242) (xy 209.861179 116.874074)
+ (xy 209.621637 116.872402) (xy 209.386331 116.917288) (xy 209.164226 117.007025) (xy 208.96378 117.138193) (xy 208.792629 117.305796)
+ (xy 208.657292 117.503451) (xy 208.562924 117.723628) (xy 208.513119 117.957942) (xy 208.509775 118.197467) (xy 187.213 118.197467)
+ (xy 187.213 117.046329) (xy 203.048941 117.046329) (xy 203.087688 117.257445) (xy 203.166703 117.457014) (xy 203.282977 117.637436)
+ (xy 203.43208 117.791837) (xy 203.608334 117.914336) (xy 203.805024 118.000268) (xy 204.01466 118.046359) (xy 204.229255 118.050855)
+ (xy 204.440637 118.013582) (xy 204.640753 117.935962) (xy 204.821982 117.820951) (xy 204.97742 117.672929) (xy 205.101147 117.497535)
+ (xy 205.18845 117.30145) (xy 205.236004 117.092141) (xy 205.239427 116.846979) (xy 205.197736 116.636424) (xy 205.115942 116.437977)
+ (xy 204.997161 116.259197) (xy 204.845916 116.106893) (xy 204.66797 115.986866) (xy 204.470099 115.903689) (xy 204.25984 115.860529)
+ (xy 204.045203 115.85903) (xy 203.834362 115.89925) (xy 203.635349 115.979657) (xy 203.455744 116.097187) (xy 203.302387 116.247365)
+ (xy 203.181121 116.424469) (xy 203.096565 116.621755) (xy 203.051938 116.831707) (xy 203.048941 117.046329) (xy 187.213 117.046329)
+ (xy 187.213 115.372469) (xy 215.594001 115.372469) (xy 215.632748 115.583585) (xy 215.711763 115.783154) (xy 215.828037 115.963576)
+ (xy 215.97714 116.117977) (xy 216.153394 116.240476) (xy 216.350084 116.326408) (xy 216.55972 116.372499) (xy 216.774315 116.376995)
+ (xy 216.985697 116.339722) (xy 217.185813 116.262102) (xy 217.367042 116.147091) (xy 217.52248 115.999069) (xy 217.646207 115.823675)
+ (xy 217.73351 115.62759) (xy 217.781064 115.418281) (xy 217.784487 115.173119) (xy 217.742796 114.962564) (xy 217.661002 114.764117)
+ (xy 217.542221 114.585337) (xy 217.390976 114.433033) (xy 217.21303 114.313006) (xy 217.015159 114.229829) (xy 216.8049 114.186669)
+ (xy 216.590263 114.18517) (xy 216.379422 114.22539) (xy 216.180409 114.305797) (xy 216.000804 114.423327) (xy 215.847447 114.573505)
+ (xy 215.726181 114.750609) (xy 215.641625 114.947895) (xy 215.596998 115.157847) (xy 215.594001 115.372469) (xy 187.213 115.372469)
+ (xy 187.213 113.615307) (xy 191.237775 113.615307) (xy 191.281018 113.85092) (xy 191.369201 114.073647) (xy 191.498967 114.275003)
+ (xy 191.665371 114.44732) (xy 191.862076 114.584033) (xy 192.081589 114.679936) (xy 192.31555 114.731376) (xy 192.555046 114.736393)
+ (xy 192.790955 114.694795) (xy 193.014292 114.608169) (xy 193.216549 114.479812) (xy 193.390023 114.314615) (xy 193.528107 114.118869)
+ (xy 193.62554 113.900031) (xy 193.678612 113.666435) (xy 193.682432 113.392826) (xy 193.635904 113.157839) (xy 193.544619 112.936366)
+ (xy 193.412055 112.736841) (xy 193.243261 112.566864) (xy 193.044666 112.432911) (xy 192.823835 112.340082) (xy 192.589179 112.291914)
+ (xy 192.349637 112.290242) (xy 192.114331 112.335128) (xy 191.892226 112.424865) (xy 191.69178 112.556033) (xy 191.520629 112.723636)
+ (xy 191.385292 112.921291) (xy 191.290924 113.141468) (xy 191.241119 113.375782) (xy 191.237775 113.615307) (xy 187.213 113.615307)
+ (xy 187.213 108.113149) (xy 187.278081 108.113149) (xy 187.316828 108.324265) (xy 187.395843 108.523834) (xy 187.512117 108.704256)
+ (xy 187.66122 108.858657) (xy 187.837474 108.981156) (xy 188.034164 109.067088) (xy 188.2438 109.113179) (xy 188.458395 109.117675)
+ (xy 188.669777 109.080402) (xy 188.869893 109.002782) (xy 189.051122 108.887771) (xy 189.20656 108.739749) (xy 189.330287 108.564355)
+ (xy 189.41759 108.36827) (xy 189.465144 108.158961) (xy 189.468567 107.913799) (xy 189.426876 107.703244) (xy 189.345082 107.504797)
+ (xy 189.226301 107.326017) (xy 189.128179 107.227207) (xy 191.943895 107.227207) (xy 191.987138 107.46282) (xy 192.075321 107.685547)
+ (xy 192.197344 107.874888) (xy 192.162601 107.925629) (xy 192.078045 108.122915) (xy 192.033418 108.332867) (xy 192.030421 108.547489)
+ (xy 192.069168 108.758605) (xy 192.148183 108.958174) (xy 192.264457 109.138596) (xy 192.41356 109.292997) (xy 192.547078 109.385794)
+ (xy 192.505044 109.483868) (xy 192.455239 109.718182) (xy 192.451895 109.957707) (xy 192.495138 110.19332) (xy 192.583321 110.416047)
+ (xy 192.713087 110.617403) (xy 192.879491 110.78972) (xy 193.076196 110.926433) (xy 193.295709 111.022336) (xy 193.52967 111.073776)
+ (xy 193.769166 111.078793) (xy 194.005075 111.037195) (xy 194.228412 110.950569) (xy 194.430669 110.822212) (xy 194.604143 110.657015)
+ (xy 194.742227 110.461269) (xy 194.83966 110.242431) (xy 194.87434 110.089787) (xy 205.611635 110.089787) (xy 205.654878 110.3254)
+ (xy 205.743061 110.548127) (xy 205.872827 110.749483) (xy 206.039231 110.9218) (xy 206.235936 111.058513) (xy 206.455449 111.154416)
+ (xy 206.68941 111.205856) (xy 206.928906 111.210873) (xy 206.995 111.199219) (xy 206.995 112.25276) (xy 207.002009 112.324242)
+ (xy 207.00826 112.39569) (xy 207.009399 112.39961) (xy 207.009798 112.40368) (xy 207.030554 112.472428) (xy 207.050567 112.541313)
+ (xy 207.052447 112.544939) (xy 207.053628 112.548852) (xy 207.087325 112.612227) (xy 207.120353 112.675945) (xy 207.122903 112.679139)
+ (xy 207.12482 112.682745) (xy 207.170163 112.738341) (xy 207.21496 112.794457) (xy 207.22057 112.800146) (xy 207.220664 112.800261)
+ (xy 207.22077 112.800349) (xy 207.222578 112.802182) (xy 208.285108 113.864712) (xy 208.283881 113.952609) (xy 208.322628 114.163725)
+ (xy 208.401643 114.363294) (xy 208.517917 114.543716) (xy 208.66702 114.698117) (xy 208.843274 114.820616) (xy 209.039964 114.906548)
+ (xy 209.2496 114.952639) (xy 209.464195 114.957135) (xy 209.675577 114.919862) (xy 209.875693 114.842242) (xy 210.056922 114.727231)
+ (xy 210.21236 114.579209) (xy 210.336087 114.403815) (xy 210.415473 114.225513) (xy 210.447367 114.275003) (xy 210.613771 114.44732)
+ (xy 210.810476 114.584033) (xy 211.029989 114.679936) (xy 211.26395 114.731376) (xy 211.503446 114.736393) (xy 211.739355 114.694795)
+ (xy 211.962692 114.608169) (xy 212.164949 114.479812) (xy 212.338423 114.314615) (xy 212.476507 114.118869) (xy 212.57394 113.900031)
+ (xy 212.627012 113.666435) (xy 212.630832 113.392826) (xy 212.584304 113.157839) (xy 212.493019 112.936366) (xy 212.360455 112.736841)
+ (xy 212.191661 112.566864) (xy 211.993066 112.432911) (xy 211.772235 112.340082) (xy 211.537579 112.291914) (xy 211.298037 112.290242)
+ (xy 211.062731 112.335128) (xy 210.840626 112.424865) (xy 210.64018 112.556033) (xy 210.469029 112.723636) (xy 210.333692 112.921291)
+ (xy 210.239324 113.141468) (xy 210.233707 113.167894) (xy 210.232101 113.165477) (xy 210.080856 113.013173) (xy 209.90291 112.893146)
+ (xy 209.705039 112.809969) (xy 209.49478 112.766809) (xy 209.38412 112.766036) (xy 208.549 111.930916) (xy 208.549 110.110107)
+ (xy 210.186175 110.110107) (xy 210.229418 110.34572) (xy 210.317601 110.568447) (xy 210.447367 110.769803) (xy 210.613771 110.94212)
+ (xy 210.810476 111.078833) (xy 211.029989 111.174736) (xy 211.26395 111.226176) (xy 211.503446 111.231193) (xy 211.739355 111.189595)
+ (xy 211.962692 111.102969) (xy 212.164949 110.974612) (xy 212.338423 110.809415) (xy 212.476507 110.613669) (xy 212.57394 110.394831)
+ (xy 212.627012 110.161235) (xy 212.630832 109.887626) (xy 212.584304 109.652639) (xy 212.493019 109.431166) (xy 212.360455 109.231641)
+ (xy 212.191661 109.061664) (xy 211.993066 108.927711) (xy 211.772235 108.834882) (xy 211.537579 108.786714) (xy 211.298037 108.785042)
+ (xy 211.062731 108.829928) (xy 210.840626 108.919665) (xy 210.64018 109.050833) (xy 210.469029 109.218436) (xy 210.333692 109.416091)
+ (xy 210.239324 109.636268) (xy 210.189519 109.870582) (xy 210.186175 110.110107) (xy 208.549 110.110107) (xy 208.549 108.097909)
+ (xy 213.818541 108.097909) (xy 213.857288 108.309025) (xy 213.936303 108.508594) (xy 214.052577 108.689016) (xy 214.20168 108.843417)
+ (xy 214.377934 108.965916) (xy 214.574624 109.051848) (xy 214.78426 109.097939) (xy 214.998855 109.102435) (xy 215.210237 109.065162)
+ (xy 215.410353 108.987542) (xy 215.591582 108.872531) (xy 215.74702 108.724509) (xy 215.870747 108.549115) (xy 215.95805 108.35303)
+ (xy 216.005604 108.143721) (xy 216.009027 107.898559) (xy 215.967336 107.688004) (xy 215.885542 107.489557) (xy 215.766761 107.310777)
+ (xy 215.615516 107.158473) (xy 215.43757 107.038446) (xy 215.239699 106.955269) (xy 215.02944 106.912109) (xy 214.814803 106.91061)
+ (xy 214.603962 106.95083) (xy 214.404949 107.031237) (xy 214.225344 107.148767) (xy 214.071987 107.298945) (xy 213.950721 107.476049)
+ (xy 213.866165 107.673335) (xy 213.821538 107.883287) (xy 213.818541 108.097909) (xy 208.549 108.097909) (xy 208.549 107.766384)
+ (xy 213.817982 102.497402) (xy 213.863555 102.441921) (xy 213.909673 102.386959) (xy 213.911641 102.383379) (xy 213.914235 102.380221)
+ (xy 213.948162 102.316949) (xy 213.982728 102.254073) (xy 213.983963 102.250181) (xy 213.985895 102.246577) (xy 214.00689 102.177906)
+ (xy 214.028581 102.109527) (xy 214.029036 102.105468) (xy 214.030231 102.10156) (xy 214.037484 102.030152) (xy 214.045484 101.958829)
+ (xy 214.04554 101.95084) (xy 214.045555 101.950692) (xy 214.045542 101.950554) (xy 214.04556 101.94798) (xy 214.04556 86.773284)
+ (xy 223.235589 77.583255) (xy 223.352005 77.608851) (xy 223.628851 77.61465) (xy 223.901552 77.566566) (xy 224.159719 77.466429)
+ (xy 224.39352 77.318055) (xy 224.594049 77.127094) (xy 224.753667 76.900821) (xy 224.866296 76.647853) (xy 224.927644 76.377827)
+ (xy 224.93206 76.061546) (xy 224.878276 75.789912) (xy 224.772754 75.533899) (xy 224.744877 75.491941) (xy 224.799153 75.476173)
+ (xy 224.802779 75.474293) (xy 224.806692 75.473112) (xy 224.870067 75.439415) (xy 224.933785 75.406387) (xy 224.936979 75.403837)
+ (xy 224.940585 75.40192) (xy 224.996181 75.356577) (xy 225.052297 75.31178) (xy 225.057986 75.30617) (xy 225.058101 75.306076)
+ (xy 225.058189 75.30597) (xy 225.060022 75.304162) (xy 225.131142 75.233042) (xy 225.176733 75.177539) (xy 225.222833 75.122599)
+ (xy 225.2248 75.119021) (xy 225.227395 75.115862) (xy 225.261314 75.052603) (xy 225.295888 74.989713) (xy 225.297124 74.985816)
+ (xy 225.299054 74.982217) (xy 225.320035 74.913591) (xy 225.341741 74.845167) (xy 225.342196 74.841108) (xy 225.343391 74.8372)
+ (xy 225.350644 74.765792) (xy 225.358644 74.694469) (xy 225.3587 74.68648) (xy 225.358715 74.686332) (xy 225.358702 74.686194)
+ (xy 225.35872 74.68362) (xy 225.35872 72.18172) (xy 225.351716 72.110288) (xy 225.345461 72.03879) (xy 225.344321 72.034864)
+ (xy 225.343922 72.0308) (xy 225.323188 71.962126) (xy 225.303154 71.893168) (xy 225.301273 71.889539) (xy 225.300092 71.885628)
+ (xy 225.266404 71.82227) (xy 225.233367 71.758535) (xy 225.230817 71.755341) (xy 225.2289 71.751735) (xy 225.183557 71.696139)
+ (xy 225.13876 71.640023) (xy 225.13315 71.634334) (xy 225.133056 71.634219) (xy 225.13295 71.634131) (xy 225.131142 71.632298)
+ (xy 224.903397 71.404553) (xy 224.927644 71.297827) (xy 224.93206 70.981546) (xy 224.878276 70.709912) (xy 224.772754 70.453899)
+ (xy 224.619516 70.223257) (xy 224.424398 70.026771) (xy 224.194831 69.871926) (xy 224.146434 69.851582) (xy 224.159719 69.846429)
+ (xy 224.39352 69.698055) (xy 224.594049 69.507094) (xy 224.753667 69.280821) (xy 224.866296 69.027853) (xy 224.927644 68.757827)
+ (xy 224.93206 68.441546) (xy 224.878276 68.169912) (xy 224.772754 67.913899) (xy 224.619516 67.683257) (xy 224.424398 67.486771)
+ (xy 224.194831 67.331926) (xy 224.154949 67.315161) (xy 224.272325 67.252422) (xy 224.336058 67.003136) (xy 223.52 66.187078)
+ (xy 222.703942 67.003136) (xy 222.767675 67.252422) (xy 222.888861 67.31204) (xy 222.862661 67.322626) (xy 222.630954 67.47425)
+ (xy 222.433112 67.667992) (xy 222.276668 67.896472) (xy 222.167583 68.150988) (xy 222.11001 68.421844) (xy 222.106144 68.698725)
+ (xy 222.156131 68.971083) (xy 222.258068 69.228545) (xy 222.408071 69.461304) (xy 222.600427 69.660495) (xy 222.827809 69.81853)
+ (xy 222.896992 69.848755) (xy 222.862661 69.862626) (xy 222.630954 70.01425) (xy 222.433112 70.207992) (xy 222.276668 70.436472)
+ (xy 222.167583 70.690988) (xy 222.11001 70.961844) (xy 222.106144 71.238725) (xy 222.156131 71.511083) (xy 222.258068 71.768545)
+ (xy 222.408071 72.001304) (xy 222.600427 72.200495) (xy 222.827809 72.35853) (xy 222.896992 72.388755) (xy 222.862661 72.402626)
+ (xy 222.630954 72.55425) (xy 222.433112 72.747992) (xy 222.276668 72.976472) (xy 222.167583 73.230988) (xy 222.11001 73.501844)
+ (xy 222.106144 73.778725) (xy 222.156131 74.051083) (xy 222.258068 74.308545) (xy 222.408071 74.541304) (xy 222.491902 74.628114)
+ (xy 210.311218 86.808798) (xy 210.265627 86.864301) (xy 210.219527 86.919241) (xy 210.21756 86.922819) (xy 210.214965 86.925978)
+ (xy 210.181046 86.989237) (xy 210.146472 87.052127) (xy 210.145236 87.056024) (xy 210.143306 87.059623) (xy 210.122325 87.128249)
+ (xy 210.100619 87.196673) (xy 210.100164 87.200732) (xy 210.098969 87.20464) (xy 210.091716 87.276048) (xy 210.083716 87.347371)
+ (xy 210.08366 87.35536) (xy 210.083645 87.355508) (xy 210.083658 87.355646) (xy 210.08364 87.35822) (xy 210.08364 98.649256)
+ (xy 209.881958 98.850938) (xy 209.836367 98.906441) (xy 209.790267 98.961381) (xy 209.7883 98.964959) (xy 209.785705 98.968118)
+ (xy 209.751786 99.031377) (xy 209.717212 99.094267) (xy 209.715976 99.098164) (xy 209.714046 99.101763) (xy 209.693065 99.170389)
+ (xy 209.671359 99.238813) (xy 209.670904 99.242872) (xy 209.669709 99.24678) (xy 209.662456 99.318188) (xy 209.654456 99.389511)
+ (xy 209.6544 99.3975) (xy 209.654385 99.397648) (xy 209.654398 99.397786) (xy 209.65438 99.40036) (xy 209.65438 102.70599)
+ (xy 209.588887 102.770125) (xy 209.467621 102.947229) (xy 209.383065 103.144515) (xy 209.338438 103.354467) (xy 209.335441 103.569089)
+ (xy 209.374188 103.780205) (xy 209.453203 103.979774) (xy 209.569477 104.160196) (xy 209.71858 104.314597) (xy 209.768443 104.349253)
+ (xy 207.222578 106.895118) (xy 207.176987 106.950621) (xy 207.130887 107.005561) (xy 207.12892 107.009139) (xy 207.126325 107.012298)
+ (xy 207.092406 107.075557) (xy 207.057832 107.138447) (xy 207.056596 107.142344) (xy 207.054666 107.145943) (xy 207.033685 107.214569)
+ (xy 207.011979 107.282993) (xy 207.011524 107.287052) (xy 207.010329 107.29096) (xy 207.003076 107.362368) (xy 206.995076 107.433691)
+ (xy 206.99502 107.44168) (xy 206.995005 107.441828) (xy 206.995018 107.441966) (xy 206.995 107.44454) (xy 206.995 108.772955)
+ (xy 206.963039 108.766394) (xy 206.723497 108.764722) (xy 206.488191 108.809608) (xy 206.266086 108.899345) (xy 206.06564 109.030513)
+ (xy 205.894489 109.198116) (xy 205.759152 109.395771) (xy 205.664784 109.615948) (xy 205.614979 109.850262) (xy 205.611635 110.089787)
+ (xy 194.87434 110.089787) (xy 194.892732 110.008835) (xy 194.896552 109.735226) (xy 194.850024 109.500239) (xy 194.758739 109.278766)
+ (xy 194.626175 109.079241) (xy 194.457381 108.909264) (xy 194.258786 108.775311) (xy 194.183338 108.743595) (xy 194.217484 108.593301)
+ (xy 194.220907 108.348139) (xy 194.179216 108.137584) (xy 194.097422 107.939137) (xy 194.09179 107.93066) (xy 194.096143 107.926515)
+ (xy 194.234227 107.730769) (xy 194.33166 107.511931) (xy 194.384732 107.278335) (xy 194.388552 107.004726) (xy 194.342024 106.769739)
+ (xy 194.250739 106.548266) (xy 194.118175 106.348741) (xy 194.009898 106.239706) (xy 194.12654 106.128629) (xy 194.250267 105.953235)
+ (xy 194.33757 105.75715) (xy 194.385124 105.547841) (xy 194.388547 105.302679) (xy 194.346856 105.092124) (xy 194.265062 104.893677)
+ (xy 194.146281 104.714897) (xy 193.995036 104.562593) (xy 193.81709 104.442566) (xy 193.619219 104.359389) (xy 193.40896 104.316229)
+ (xy 193.194323 104.31473) (xy 192.983482 104.35495) (xy 192.784469 104.435357) (xy 192.604864 104.552887) (xy 192.451507 104.703065)
+ (xy 192.330241 104.880169) (xy 192.245685 105.077455) (xy 192.201058 105.287407) (xy 192.198061 105.502029) (xy 192.236808 105.713145)
+ (xy 192.315823 105.912714) (xy 192.432097 106.093136) (xy 192.463116 106.125257) (xy 192.3979 106.167933) (xy 192.226749 106.335536)
+ (xy 192.091412 106.533191) (xy 191.997044 106.753368) (xy 191.947239 106.987682) (xy 191.943895 107.227207) (xy 189.128179 107.227207)
+ (xy 189.075056 107.173713) (xy 188.89711 107.053686) (xy 188.699239 106.970509) (xy 188.48898 106.927349) (xy 188.274343 106.92585)
+ (xy 188.063502 106.96607) (xy 187.864489 107.046477) (xy 187.684884 107.164007) (xy 187.531527 107.314185) (xy 187.410261 107.491289)
+ (xy 187.325705 107.688575) (xy 187.281078 107.898527) (xy 187.278081 108.113149) (xy 187.213 108.113149) (xy 187.213 105.918)
+ (xy 187.205991 105.846518) (xy 187.19974 105.77507) (xy 187.198601 105.77115) (xy 187.198202 105.76708) (xy 187.177446 105.698332)
+ (xy 187.157433 105.629447) (xy 187.155553 105.625821) (xy 187.154372 105.621908) (xy 187.120675 105.558533) (xy 187.087647 105.494815)
+ (xy 187.085097 105.491621) (xy 187.08318 105.488015) (xy 187.037837 105.432419) (xy 187.022438 105.413129) (xy 187.702261 105.413129)
+ (xy 187.741008 105.624245) (xy 187.820023 105.823814) (xy 187.936297 106.004236) (xy 188.0854 106.158637) (xy 188.261654 106.281136)
+ (xy 188.458344 106.367068) (xy 188.66798 106.413159) (xy 188.882575 106.417655) (xy 189.093957 106.380382) (xy 189.294073 106.302762)
+ (xy 189.475302 106.187751) (xy 189.63074 106.039729) (xy 189.754467 105.864335) (xy 189.84177 105.66825) (xy 189.889324 105.458941)
+ (xy 189.892747 105.213779) (xy 189.851056 105.003224) (xy 189.769262 104.804777) (xy 189.650481 104.625997) (xy 189.499236 104.473693)
+ (xy 189.32129 104.353666) (xy 189.123419 104.270489) (xy 188.91316 104.227329) (xy 188.698523 104.22583) (xy 188.487682 104.26605)
+ (xy 188.288669 104.346457) (xy 188.109064 104.463987) (xy 187.955707 104.614165) (xy 187.834441 104.791269) (xy 187.749885 104.988555)
+ (xy 187.705258 105.198507) (xy 187.702261 105.413129) (xy 187.022438 105.413129) (xy 186.99304 105.376303) (xy 186.98743 105.370614)
+ (xy 186.987336 105.370499) (xy 186.98723 105.370411) (xy 186.985422 105.368578) (xy 184.696231 103.079387) (xy 197.785895 103.079387)
+ (xy 197.829138 103.315) (xy 197.917321 103.537727) (xy 198.047087 103.739083) (xy 198.213491 103.9114) (xy 198.410196 104.048113)
+ (xy 198.629709 104.144016) (xy 198.86367 104.195456) (xy 199.103166 104.200473) (xy 199.339075 104.158875) (xy 199.562412 104.072249)
+ (xy 199.764669 103.943892) (xy 199.938143 103.778695) (xy 200.076227 103.582949) (xy 200.17366 103.364111) (xy 200.226732 103.130515)
+ (xy 200.227162 103.099707) (xy 201.258075 103.099707) (xy 201.301318 103.33532) (xy 201.389501 103.558047) (xy 201.519267 103.759403)
+ (xy 201.685671 103.93172) (xy 201.882376 104.068433) (xy 202.101889 104.164336) (xy 202.33585 104.215776) (xy 202.575346 104.220793)
+ (xy 202.811255 104.179195) (xy 203.034592 104.092569) (xy 203.236849 103.964212) (xy 203.410323 103.799015) (xy 203.548407 103.603269)
+ (xy 203.64584 103.384431) (xy 203.698912 103.150835) (xy 203.702732 102.877226) (xy 203.656204 102.642239) (xy 203.564919 102.420766)
+ (xy 203.549893 102.398149) (xy 206.526201 102.398149) (xy 206.564948 102.609265) (xy 206.643963 102.808834) (xy 206.760237 102.989256)
+ (xy 206.90934 103.143657) (xy 207.085594 103.266156) (xy 207.282284 103.352088) (xy 207.49192 103.398179) (xy 207.706515 103.402675)
+ (xy 207.917897 103.365402) (xy 208.118013 103.287782) (xy 208.299242 103.172771) (xy 208.45468 103.024749) (xy 208.578407 102.849355)
+ (xy 208.66571 102.65327) (xy 208.713264 102.443961) (xy 208.716687 102.198799) (xy 208.674996 101.988244) (xy 208.593202 101.789797)
+ (xy 208.474421 101.611017) (xy 208.323176 101.458713) (xy 208.14523 101.338686) (xy 207.947359 101.255509) (xy 207.7371 101.212349)
+ (xy 207.522463 101.21085) (xy 207.311622 101.25107) (xy 207.112609 101.331477) (xy 206.933004 101.449007) (xy 206.779647 101.599185)
+ (xy 206.658381 101.776289) (xy 206.573825 101.973575) (xy 206.529198 102.183527) (xy 206.526201 102.398149) (xy 203.549893 102.398149)
+ (xy 203.432355 102.221241) (xy 203.263561 102.051264) (xy 203.064966 101.917311) (xy 202.844135 101.824482) (xy 202.609479 101.776314)
+ (xy 202.369937 101.774642) (xy 202.134631 101.819528) (xy 201.912526 101.909265) (xy 201.71208 102.040433) (xy 201.540929 102.208036)
+ (xy 201.405592 102.405691) (xy 201.311224 102.625868) (xy 201.261419 102.860182) (xy 201.258075 103.099707) (xy 200.227162 103.099707)
+ (xy 200.230552 102.856906) (xy 200.184024 102.621919) (xy 200.092739 102.400446) (xy 199.960175 102.200921) (xy 199.791381 102.030944)
+ (xy 199.592786 101.896991) (xy 199.371955 101.804162) (xy 199.137299 101.755994) (xy 198.897757 101.754322) (xy 198.662451 101.799208)
+ (xy 198.440346 101.888945) (xy 198.2399 102.020113) (xy 198.068749 102.187716) (xy 197.933412 102.385371) (xy 197.839044 102.605548)
+ (xy 197.789239 102.839862) (xy 197.785895 103.079387) (xy 184.696231 103.079387) (xy 183.911 102.294156) (xy 183.911 101.309007)
+ (xy 188.824775 101.309007) (xy 188.868018 101.54462) (xy 188.956201 101.767347) (xy 189.085967 101.968703) (xy 189.252371 102.14102)
+ (xy 189.449076 102.277733) (xy 189.668589 102.373636) (xy 189.90255 102.425076) (xy 190.142046 102.430093) (xy 190.377955 102.388495)
+ (xy 190.601292 102.301869) (xy 190.803549 102.173512) (xy 190.977023 102.008315) (xy 191.115107 101.812569) (xy 191.21254 101.593731)
+ (xy 191.265612 101.360135) (xy 191.269432 101.086526) (xy 191.222904 100.851539) (xy 191.131619 100.630066) (xy 190.999055 100.430541)
+ (xy 190.830261 100.260564) (xy 190.631666 100.126611) (xy 190.410835 100.033782) (xy 190.176179 99.985614) (xy 189.936637 99.983942)
+ (xy 189.701331 100.028828) (xy 189.479226 100.118565) (xy 189.27878 100.249733) (xy 189.107629 100.417336) (xy 188.972292 100.614991)
+ (xy 188.877924 100.835168) (xy 188.828119 101.069482) (xy 188.824775 101.309007) (xy 183.911 101.309007) (xy 183.911 98.771029)
+ (xy 196.008061 98.771029) (xy 196.046808 98.982145) (xy 196.125823 99.181714) (xy 196.242097 99.362136) (xy 196.3912 99.516537)
+ (xy 196.567454 99.639036) (xy 196.764144 99.724968) (xy 196.97378 99.771059) (xy 197.188375 99.775555) (xy 197.399757 99.738282)
+ (xy 197.599873 99.660662) (xy 197.781102 99.545651) (xy 197.93654 99.397629) (xy 198.060267 99.222235) (xy 198.14757 99.02615)
+ (xy 198.195124 98.816841) (xy 198.198547 98.571679) (xy 198.156856 98.361124) (xy 198.075062 98.162677) (xy 197.956281 97.983897)
+ (xy 197.805036 97.831593) (xy 197.62709 97.711566) (xy 197.429219 97.628389) (xy 197.21896 97.585229) (xy 197.004323 97.58373)
+ (xy 196.793482 97.62395) (xy 196.594469 97.704357) (xy 196.414864 97.821887) (xy 196.261507 97.972065) (xy 196.140241 98.149169)
+ (xy 196.055685 98.346455) (xy 196.011058 98.556407) (xy 196.008061 98.771029) (xy 183.911 98.771029) (xy 183.911 96.231029)
+ (xy 198.294061 96.231029) (xy 198.332808 96.442145) (xy 198.411823 96.641714) (xy 198.528097 96.822136) (xy 198.6772 96.976537)
+ (xy 198.853454 97.099036) (xy 199.050144 97.184968) (xy 199.25978 97.231059) (xy 199.474375 97.235555) (xy 199.685757 97.198282)
+ (xy 199.885873 97.120662) (xy 200.067102 97.005651) (xy 200.22254 96.857629) (xy 200.346267 96.682235) (xy 200.43357 96.48615)
+ (xy 200.481124 96.276841) (xy 200.484547 96.031679) (xy 200.442856 95.821124) (xy 200.361062 95.622677) (xy 200.242281 95.443897)
+ (xy 200.091036 95.291593) (xy 199.91309 95.171566) (xy 199.715219 95.088389) (xy 199.50496 95.045229) (xy 199.290323 95.04373)
+ (xy 199.079482 95.08395) (xy 198.880469 95.164357) (xy 198.700864 95.281887) (xy 198.547507 95.432065) (xy 198.426241 95.609169)
+ (xy 198.341685 95.806455) (xy 198.297058 96.016407) (xy 198.294061 96.231029) (xy 183.911 96.231029) (xy 183.911 91.722855)
+ (xy 188.459223 91.722855) (xy 188.515284 91.965657) (xy 188.75545 92.082789) (xy 189.013852 92.150817) (xy 189.280562 92.167126)
+ (xy 189.545328 92.131089) (xy 189.797976 92.044091) (xy 189.944716 91.965657) (xy 190.000777 91.722855) (xy 189.23 90.952078)
+ (xy 188.459223 91.722855) (xy 183.911 91.722855) (xy 183.911 90.855562) (xy 187.867874 90.855562) (xy 187.903911 91.120328)
+ (xy 187.990909 91.372976) (xy 188.069343 91.519716) (xy 188.312145 91.575777) (xy 189.082922 90.805) (xy 189.377078 90.805)
+ (xy 190.147855 91.575777) (xy 190.390657 91.519716) (xy 190.507789 91.27955) (xy 190.575817 91.021148) (xy 190.592126 90.754438)
+ (xy 190.556089 90.489672) (xy 190.469091 90.237024) (xy 190.390657 90.090284) (xy 190.147855 90.034223) (xy 189.377078 90.805)
+ (xy 189.082922 90.805) (xy 188.312145 90.034223) (xy 188.069343 90.090284) (xy 187.952211 90.33045) (xy 187.884183 90.588852)
+ (xy 187.867874 90.855562) (xy 183.911 90.855562) (xy 183.911 87.5665) (xy 185.338355 87.5665) (xy 185.338355 88.9635)
+ (xy 185.346609 89.06701) (xy 185.400978 89.242574) (xy 185.502106 89.396041) (xy 185.641984 89.515258) (xy 185.809538 89.590786)
+ (xy 185.9915 89.616645) (xy 187.3885 89.616645) (xy 187.49201 89.608391) (xy 187.667574 89.554022) (xy 187.821041 89.452894)
+ (xy 187.940258 89.313016) (xy 188.015786 89.145462) (xy 188.041645 88.9635) (xy 188.041645 88.910488) (xy 188.168076 89.106671)
+ (xy 188.351781 89.296903) (xy 188.568938 89.447831) (xy 188.76111 89.531789) (xy 188.662024 89.565909) (xy 188.515284 89.644343)
+ (xy 188.459223 89.887145) (xy 189.23 90.657922) (xy 190.000777 89.887145) (xy 189.944716 89.644343) (xy 189.704745 89.527306)
+ (xy 189.84095 89.474476) (xy 190.064237 89.332774) (xy 190.255747 89.150401) (xy 190.408187 88.934304) (xy 190.515751 88.692712)
+ (xy 190.57434 88.43483) (xy 190.578558 88.132773) (xy 190.527192 87.873355) (xy 190.426416 87.628854) (xy 190.280069 87.408584)
+ (xy 190.093725 87.220935) (xy 189.874483 87.073054) (xy 189.630692 86.970574) (xy 189.371639 86.917398) (xy 189.107191 86.915552)
+ (xy 188.84742 86.965106) (xy 188.602222 87.064172) (xy 188.380936 87.208978) (xy 188.191991 87.394007) (xy 188.042583 87.612212)
+ (xy 188.041645 87.614401) (xy 188.041645 87.5665) (xy 188.033391 87.46299) (xy 187.979022 87.287426) (xy 187.877894 87.133959)
+ (xy 187.738016 87.014742) (xy 187.570462 86.939214) (xy 187.3885 86.913355) (xy 185.9915 86.913355) (xy 185.88799 86.921609)
+ (xy 185.712426 86.975978) (xy 185.558959 87.077106) (xy 185.439742 87.216984) (xy 185.364214 87.384538) (xy 185.338355 87.5665)
+ (xy 183.911 87.5665) (xy 183.911 86.233) (xy 196.069855 86.233) (xy 196.069855 87.757) (xy 196.078109 87.86051)
+ (xy 196.132478 88.036074) (xy 196.233606 88.189541) (xy 196.373484 88.308758) (xy 196.541038 88.384286) (xy 196.642608 88.39872)
+ (xy 196.595954 88.42925) (xy 196.398112 88.622992) (xy 196.241668 88.851472) (xy 196.132583 89.105988) (xy 196.07501 89.376844)
+ (xy 196.071144 89.653725) (xy 196.121131 89.926083) (xy 196.223068 90.183545) (xy 196.373071 90.416304) (xy 196.565427 90.615495)
+ (xy 196.792809 90.77353) (xy 197.046557 90.884389) (xy 197.317005 90.943851) (xy 197.593851 90.94965) (xy 197.866552 90.901566)
+ (xy 198.124719 90.801429) (xy 198.35852 90.653055) (xy 198.559049 90.462094) (xy 198.718667 90.235821) (xy 198.753124 90.15843)
+ (xy 198.763068 90.183545) (xy 198.913071 90.416304) (xy 199.105427 90.615495) (xy 199.332809 90.77353) (xy 199.586557 90.884389)
+ (xy 199.857005 90.943851) (xy 200.133851 90.94965) (xy 200.406552 90.901566) (xy 200.664719 90.801429) (xy 200.89852 90.653055)
+ (xy 201.099049 90.462094) (xy 201.258667 90.235821) (xy 201.371296 89.982853) (xy 201.432644 89.712827) (xy 201.43706 89.396546)
+ (xy 201.383276 89.124912) (xy 201.277754 88.868899) (xy 201.124516 88.638257) (xy 200.929398 88.441771) (xy 200.699831 88.286926)
+ (xy 200.651434 88.266582) (xy 200.664719 88.261429) (xy 200.89852 88.113055) (xy 201.099049 87.922094) (xy 201.258667 87.695821)
+ (xy 201.371296 87.442853) (xy 201.432644 87.172827) (xy 201.43706 86.856546) (xy 201.383276 86.584912) (xy 201.277754 86.328899)
+ (xy 201.124516 86.098257) (xy 200.929398 85.901771) (xy 200.699831 85.746926) (xy 200.44456 85.63962) (xy 200.173308 85.583941)
+ (xy 199.896408 85.582007) (xy 199.624405 85.633895) (xy 199.367661 85.737626) (xy 199.135954 85.88925) (xy 198.938112 86.082992)
+ (xy 198.893391 86.148305) (xy 198.891891 86.12949) (xy 198.837522 85.953926) (xy 198.736394 85.800459) (xy 198.596516 85.681242)
+ (xy 198.428962 85.605714) (xy 198.247 85.579855) (xy 196.723 85.579855) (xy 196.61949 85.588109) (xy 196.443926 85.642478)
+ (xy 196.290459 85.743606) (xy 196.171242 85.883484) (xy 196.095714 86.051038) (xy 196.069855 86.233) (xy 183.911 86.233)
+ (xy 183.911 85.303949) (xy 203.470581 85.303949) (xy 203.509328 85.515065) (xy 203.588343 85.714634) (xy 203.704617 85.895056)
+ (xy 203.85372 86.049457) (xy 204.029974 86.171956) (xy 204.226664 86.257888) (xy 204.4363 86.303979) (xy 204.650895 86.308475)
+ (xy 204.862277 86.271202) (xy 205.062393 86.193582) (xy 205.243622 86.078571) (xy 205.39906 85.930549) (xy 205.522787 85.755155)
+ (xy 205.61009 85.55907) (xy 205.657644 85.349761) (xy 205.661067 85.104599) (xy 205.619376 84.894044) (xy 205.537582 84.695597)
+ (xy 205.418801 84.516817) (xy 205.267556 84.364513) (xy 205.08961 84.244486) (xy 204.891739 84.161309) (xy 204.68148 84.118149)
+ (xy 204.466843 84.11665) (xy 204.256002 84.15687) (xy 204.056989 84.237277) (xy 203.877384 84.354807) (xy 203.724027 84.504985)
+ (xy 203.602761 84.682089) (xy 203.518205 84.879375) (xy 203.473578 85.089327) (xy 203.470581 85.303949) (xy 183.911 85.303949)
+ (xy 183.911 77.089) (xy 183.903992 77.017527) (xy 183.89774 76.946069) (xy 183.896601 76.942148) (xy 183.896202 76.93808)
+ (xy 183.875449 76.869344) (xy 183.855433 76.800447) (xy 183.853553 76.796821) (xy 183.852372 76.792908) (xy 183.818675 76.729533)
+ (xy 183.785647 76.665815) (xy 183.783098 76.662621) (xy 183.78118 76.659015) (xy 183.735812 76.603388) (xy 183.691039 76.547303)
+ (xy 183.685431 76.541616) (xy 183.685336 76.541499) (xy 183.685228 76.54141) (xy 183.683422 76.539578) (xy 179.111422 71.967578)
+ (xy 179.055919 71.921987) (xy 179.000979 71.875887) (xy 178.997401 71.87392) (xy 178.994242 71.871325) (xy 178.930983 71.837406)
+ (xy 178.868093 71.802832) (xy 178.864196 71.801596) (xy 178.860597 71.799666) (xy 178.791971 71.778685) (xy 178.723547 71.756979)
+ (xy 178.719488 71.756524) (xy 178.71558 71.755329) (xy 178.644172 71.748076) (xy 178.572849 71.740076) (xy 178.56486 71.74002)
+ (xy 178.564712 71.740005) (xy 178.564574 71.740018) (xy 178.562 71.74) (xy 174.117 71.74) (xy 174.045518 71.747009)
+ (xy 173.97407 71.75326) (xy 173.970149 71.754399) (xy 173.96608 71.754798) (xy 173.897378 71.77554) (xy 173.828447 71.795566)
+ (xy 173.824816 71.797448) (xy 173.820908 71.798628) (xy 173.757568 71.832306) (xy 173.693815 71.865353) (xy 173.690621 71.867903)
+ (xy 173.687015 71.86982) (xy 173.631419 71.915163) (xy 173.575303 71.95996) (xy 173.569614 71.96557) (xy 173.569499 71.965664)
+ (xy 173.569411 71.96577) (xy 173.567578 71.967578) (xy 172.3693 73.165856) (xy 172.233308 73.137941) (xy 171.956408 73.136007)
+ (xy 171.684405 73.187895) (xy 171.427661 73.291626) (xy 171.195954 73.44325) (xy 170.998112 73.636992) (xy 170.953391 73.702305)
+ (xy 170.951891 73.68349) (xy 170.897522 73.507926) (xy 170.796394 73.354459) (xy 170.656516 73.235242) (xy 170.488962 73.159714)
+ (xy 170.307 73.133855) (xy 168.783 73.133855) (xy 168.67949 73.142109) (xy 168.503926 73.196478) (xy 168.350459 73.297606)
+ (xy 168.231242 73.437484) (xy 168.155714 73.605038) (xy 168.129855 73.787) (xy 168.129855 75.311) (xy 168.138109 75.41451)
+ (xy 168.192478 75.590074) (xy 168.293606 75.743541) (xy 168.433484 75.862758) (xy 168.601038 75.938286) (xy 168.702608 75.95272)
+ (xy 168.655954 75.98325) (xy 168.458112 76.176992) (xy 168.301668 76.405472) (xy 168.192583 76.659988) (xy 168.13501 76.930844)
+ (xy 168.131144 77.207725) (xy 168.181131 77.480083) (xy 168.283068 77.737545) (xy 168.433071 77.970304) (xy 168.625427 78.169495)
+ (xy 168.852809 78.32753) (xy 168.921992 78.357755) (xy 168.887661 78.371626) (xy 168.655954 78.52325) (xy 168.458112 78.716992)
+ (xy 168.301668 78.945472) (xy 168.192583 79.199988) (xy 168.13501 79.470844) (xy 168.131144 79.747725) (xy 168.181131 80.020083)
+ (xy 168.283068 80.277545) (xy 168.433071 80.510304) (xy 168.625427 80.709495) (xy 168.852809 80.86753) (xy 168.921992 80.897755)
+ (xy 168.887661 80.911626) (xy 168.655954 81.06325) (xy 168.458112 81.256992) (xy 168.301668 81.485472) (xy 168.192583 81.739988)
+ (xy 168.13501 82.010844) (xy 168.131144 82.287725) (xy 168.181131 82.560083) (xy 168.283068 82.817545) (xy 168.433071 83.050304)
+ (xy 168.625427 83.249495) (xy 168.852809 83.40753) (xy 169.106557 83.518389) (xy 169.377005 83.577851) (xy 169.653851 83.58365)
+ (xy 169.926552 83.535566) (xy 170.184719 83.435429) (xy 170.41852 83.287055) (xy 170.619049 83.096094) (xy 170.778667 82.869821)
+ (xy 170.813124 82.79243) (xy 170.823068 82.817545) (xy 170.973071 83.050304) (xy 171.165427 83.249495) (xy 171.392809 83.40753)
+ (xy 171.646557 83.518389) (xy 171.917005 83.577851) (xy 172.193851 83.58365) (xy 172.466552 83.535566) (xy 172.724719 83.435429)
+ (xy 172.95852 83.287055) (xy 173.159049 83.096094) (xy 173.318667 82.869821) (xy 173.431296 82.616853) (xy 173.492644 82.346827)
+ (xy 173.49706 82.030546) (xy 173.468176 81.884668) (xy 174.539422 80.813422) (xy 174.585013 80.757919) (xy 174.631113 80.702979)
+ (xy 174.63308 80.699401) (xy 174.635675 80.696242) (xy 174.669594 80.632983) (xy 174.704168 80.570093) (xy 174.705404 80.566196)
+ (xy 174.707334 80.562597) (xy 174.728315 80.493971) (xy 174.750021 80.425547) (xy 174.750476 80.421488) (xy 174.751671 80.41758)
+ (xy 174.758924 80.346172) (xy 174.766924 80.274849) (xy 174.76698 80.26686) (xy 174.766995 80.266712) (xy 174.766982 80.266574)
+ (xy 174.767 80.264) (xy 174.767 79.061844) (xy 177.232844 76.596) (xy 177.859156 76.596) (xy 179.182 77.918844)
+ (xy 179.182 85.392321) (xy 179.097323 85.39173) (xy 178.886482 85.43195) (xy 178.687469 85.512357) (xy 178.507864 85.629887)
+ (xy 178.354507 85.780065) (xy 178.233241 85.957169) (xy 178.148685 86.154455) (xy 178.104058 86.364407) (xy 178.101061 86.579029)
+ (xy 178.139808 86.790145) (xy 178.191696 86.921198) (xy 178.033513 86.951373) (xy 177.857592 87.02245) (xy 177.728386 87.107)
+ (xy 177.49868 87.107) (xy 177.475089 86.933672) (xy 177.388091 86.681024) (xy 177.309657 86.534284) (xy 177.066855 86.478223)
+ (xy 176.296078 87.249) (xy 176.310221 87.263143) (xy 176.163143 87.410221) (xy 176.149 87.396078) (xy 175.378223 88.166855)
+ (xy 175.434284 88.409657) (xy 175.67445 88.526789) (xy 175.676759 88.527397) (xy 175.547967 88.656189) (xy 175.453036 88.560593)
+ (xy 175.27509 88.440566) (xy 175.077219 88.357389) (xy 174.86696 88.314229) (xy 174.652323 88.31273) (xy 174.441482 88.35295)
+ (xy 174.242469 88.433357) (xy 174.062864 88.550887) (xy 173.909507 88.701065) (xy 173.899837 88.715188) (xy 173.88455 88.723316)
+ (xy 173.820815 88.756353) (xy 173.817621 88.758903) (xy 173.814015 88.76082) (xy 173.758419 88.806163) (xy 173.702303 88.85096)
+ (xy 173.696614 88.85657) (xy 173.696499 88.856664) (xy 173.696411 88.85677) (xy 173.694578 88.858578) (xy 172.805578 89.747578)
+ (xy 172.759987 89.803081) (xy 172.713887 89.858021) (xy 172.71192 89.861599) (xy 172.709325 89.864758) (xy 172.675406 89.928017)
+ (xy 172.640832 89.990907) (xy 172.639596 89.994804) (xy 172.637666 89.998403) (xy 172.616685 90.067029) (xy 172.594979 90.135453)
+ (xy 172.594524 90.139512) (xy 172.593329 90.14342) (xy 172.586076 90.214828) (xy 172.578076 90.286151) (xy 172.57802 90.29414)
+ (xy 172.578005 90.294288) (xy 172.578018 90.294426) (xy 172.578 90.297) (xy 172.578 91.870208) (xy 172.366323 91.86873)
+ (xy 172.155482 91.90895) (xy 171.956469 91.989357) (xy 171.776864 92.106887) (xy 171.623507 92.257065) (xy 171.502241 92.434169)
+ (xy 171.417685 92.631455) (xy 171.373058 92.841407) (xy 171.370061 93.056029) (xy 171.408808 93.267145) (xy 171.487823 93.466714)
+ (xy 171.604097 93.647136) (xy 171.689 93.735056) (xy 171.689 107.95) (xy 171.696009 108.021482) (xy 171.70226 108.09293)
+ (xy 171.703399 108.09685) (xy 171.703798 108.10092) (xy 171.724552 108.169662) (xy 171.744567 108.238553) (xy 171.746447 108.242179)
+ (xy 171.747628 108.246092) (xy 171.781325 108.309467) (xy 171.814353 108.373185) (xy 171.816903 108.376379) (xy 171.81882 108.379985)
+ (xy 171.864163 108.435581) (xy 171.90896 108.491697) (xy 171.91457 108.497386) (xy 171.914664 108.497501) (xy 171.91477 108.497589)
+ (xy 171.916578 108.499422) (xy 175.091578 111.674422) (xy 175.147081 111.720013) (xy 175.202021 111.766113) (xy 175.205599 111.76808)
+ (xy 175.208758 111.770675) (xy 175.272017 111.804594) (xy 175.334907 111.839168) (xy 175.338804 111.840404) (xy 175.342403 111.842334)
+ (xy 175.411029 111.863315) (xy 175.479453 111.885021) (xy 175.483512 111.885476) (xy 175.48742 111.886671) (xy 175.558828 111.893924)
+ (xy 175.62811 111.901695) (xy 175.581024 111.917909) (xy 175.434284 111.996343) (xy 175.378223 112.239145) (xy 176.149 113.009922)
+ (xy 176.919777 112.239145) (xy 176.863716 111.996343) (xy 176.670276 111.902) (xy 178.562 111.902) (xy 178.633482 111.894991)
+ (xy 178.70493 111.88874) (xy 178.70885 111.887601) (xy 178.71292 111.887202) (xy 178.781668 111.866446) (xy 178.850553 111.846433)
+ (xy 178.854179 111.844553) (xy 178.858092 111.843372) (xy 178.921467 111.809675) (xy 178.985185 111.776647) (xy 178.988379 111.774097)
+ (xy 178.991985 111.77218) (xy 179.047581 111.726837) (xy 179.103697 111.68204) (xy 179.109386 111.67643) (xy 179.109501 111.676336)
+ (xy 179.109589 111.67623) (xy 179.111422 111.674422) (xy 179.681713 111.104131) (xy 179.672685 111.125195) (xy 179.628058 111.335147)
+ (xy 179.625061 111.549769) (xy 179.663808 111.760885) (xy 179.742823 111.960454) (xy 179.859097 112.140876) (xy 180.0082 112.295277)
+ (xy 180.184454 112.417776) (xy 180.381144 112.503708) (xy 180.59078 112.549799) (xy 180.805375 112.554295) (xy 180.833 112.549424)
+ (xy 180.833 118.22793) (xy 180.767507 118.292065) (xy 180.646241 118.469169) (xy 180.561685 118.666455) (xy 180.517058 118.876407)
+ (xy 180.515405 118.994751) (xy 179.155578 120.354578) (xy 179.109987 120.410081) (xy 179.063887 120.465021) (xy 179.06192 120.468599)
+ (xy 179.059325 120.471758) (xy 179.025406 120.535017) (xy 178.990832 120.597907) (xy 178.989596 120.601804) (xy 178.987666 120.605403)
+ (xy 178.966685 120.674029) (xy 178.944979 120.742453) (xy 178.944524 120.746512) (xy 178.943329 120.75042) (xy 178.936076 120.821828)
+ (xy 178.928076 120.893151) (xy 178.92802 120.90114) (xy 178.928005 120.901288) (xy 178.928018 120.901426) (xy 178.928 120.904)
+ (xy 178.928 122.995156) (xy 177.549681 124.373475) (xy 177.515091 124.273024) (xy 177.436657 124.126284) (xy 177.193855 124.070223)
+ (xy 176.423078 124.841) (xy 176.437221 124.855143) (xy 176.290143 125.002221) (xy 176.276 124.988078) (xy 175.505223 125.758855)
+ (xy 175.561284 126.001657) (xy 175.80145 126.118789) (xy 175.803759 126.119397) (xy 174.811156 127.112) (xy 174.498 127.112)
+ (xy 174.426518 127.119009) (xy 174.35507 127.12526) (xy 174.351149 127.126399) (xy 174.34708 127.126798) (xy 174.278378 127.14754)
+ (xy 174.209447 127.167566) (xy 174.205816 127.169448) (xy 174.201908 127.170628) (xy 174.138568 127.204306) (xy 174.074815 127.237353)
+ (xy 174.071621 127.239903) (xy 174.068015 127.24182) (xy 174.012419 127.287163) (xy 173.956303 127.33196) (xy 173.950614 127.33757)
+ (xy 173.950499 127.337664) (xy 173.950411 127.33777) (xy 173.948578 127.339578) (xy 169.884578 131.403578) (xy 169.838987 131.459081)
+ (xy 169.792887 131.514021) (xy 169.79092 131.517599) (xy 169.788325 131.520758) (xy 169.754406 131.584017) (xy 169.719832 131.646907)
+ (xy 169.718596 131.650804) (xy 169.716666 131.654403) (xy 169.695685 131.723029) (xy 169.673979 131.791453) (xy 169.673524 131.795512)
+ (xy 169.672329 131.79942) (xy 169.665076 131.870828) (xy 169.657076 131.942151) (xy 169.65702 131.95014) (xy 169.657005 131.950288)
+ (xy 169.657018 131.950426) (xy 169.657 131.953) (xy 169.657 135.581491) (xy 169.58356 135.55062) (xy 169.312308 135.494941)
+ (xy 169.035408 135.493007) (xy 168.763405 135.544895) (xy 168.506661 135.648626) (xy 168.274954 135.80025) (xy 168.077112 135.993992)
+ (xy 167.920668 136.222472) (xy 167.89462 136.283246) (xy 167.876754 136.239899) (xy 167.723516 136.009257) (xy 167.528398 135.812771)
+ (xy 167.298831 135.657926) (xy 167.04356 135.55062) (xy 166.772308 135.494941) (xy 166.495408 135.493007) (xy 166.223405 135.544895)
+ (xy 166.131 135.582229) (xy 166.131 135.322844) (xy 169.205422 132.248422) (xy 169.251013 132.192919) (xy 169.297113 132.137979)
+ (xy 169.29908 132.134401) (xy 169.301675 132.131242) (xy 169.335594 132.067983) (xy 169.370168 132.005093) (xy 169.371404 132.001196)
+ (xy 169.373334 131.997597) (xy 169.394315 131.928971) (xy 169.416021 131.860547) (xy 169.416476 131.856488) (xy 169.417671 131.85258)
+ (xy 169.424924 131.781172) (xy 169.432924 131.709849) (xy 169.43298 131.70186) (xy 169.432995 131.701712) (xy 169.432982 131.701574)
+ (xy 169.433 131.699) (xy 169.433 127.829844) (xy 170.475422 126.787422) (xy 170.521013 126.731919) (xy 170.567113 126.676979)
+ (xy 170.56908 126.673401) (xy 170.571675 126.670242) (xy 170.605594 126.606983) (xy 170.640168 126.544093) (xy 170.641404 126.540196)
+ (xy 170.643334 126.536597) (xy 170.664315 126.467971) (xy 170.686021 126.399547) (xy 170.686476 126.395488) (xy 170.687671 126.39158)
+ (xy 170.694924 126.320172) (xy 170.702924 126.248849) (xy 170.70298 126.24086) (xy 170.702995 126.240712) (xy 170.702982 126.240574)
+ (xy 170.703 126.238) (xy 170.703 124.891562) (xy 174.913874 124.891562) (xy 174.949911 125.156328) (xy 175.036909 125.408976)
+ (xy 175.115343 125.555716) (xy 175.358145 125.611777) (xy 176.128922 124.841) (xy 175.358145 124.070223) (xy 175.115343 124.126284)
+ (xy 174.998211 124.36645) (xy 174.930183 124.624852) (xy 174.913874 124.891562) (xy 170.703 124.891562) (xy 170.703 123.923145)
+ (xy 175.505223 123.923145) (xy 176.276 124.693922) (xy 177.046777 123.923145) (xy 176.990716 123.680343) (xy 176.75055 123.563211)
+ (xy 176.492148 123.495183) (xy 176.225438 123.478874) (xy 175.960672 123.514911) (xy 175.708024 123.601909) (xy 175.561284 123.680343)
+ (xy 175.505223 123.923145) (xy 170.703 123.923145) (xy 170.703 119.874386) (xy 174.925727 119.874386) (xy 174.973466 120.134496)
+ (xy 175.070819 120.380379) (xy 175.214076 120.602671) (xy 175.397781 120.792903) (xy 175.614938 120.943831) (xy 175.857274 121.049705)
+ (xy 176.11556 121.106493) (xy 176.379956 121.112031) (xy 176.640393 121.066109) (xy 176.88695 120.970476) (xy 177.110237 120.828774)
+ (xy 177.301747 120.646401) (xy 177.454187 120.430304) (xy 177.561751 120.188712) (xy 177.62034 119.93083) (xy 177.624558 119.628773)
+ (xy 177.574281 119.374853) (xy 177.597321 119.433047) (xy 177.727087 119.634403) (xy 177.893491 119.80672) (xy 178.090196 119.943433)
+ (xy 178.309709 120.039336) (xy 178.54367 120.090776) (xy 178.783166 120.095793) (xy 179.019075 120.054195) (xy 179.242412 119.967569)
+ (xy 179.444669 119.839212) (xy 179.618143 119.674015) (xy 179.756227 119.478269) (xy 179.85366 119.259431) (xy 179.906732 119.025835)
+ (xy 179.910552 118.752226) (xy 179.864024 118.517239) (xy 179.772739 118.295766) (xy 179.640175 118.096241) (xy 179.471381 117.926264)
+ (xy 179.272786 117.792311) (xy 179.051955 117.699482) (xy 178.817299 117.651314) (xy 178.577757 117.649642) (xy 178.342451 117.694528)
+ (xy 178.120346 117.784265) (xy 177.9199 117.915433) (xy 177.748749 118.083036) (xy 177.613412 118.280691) (xy 177.519044 118.500868)
+ (xy 177.469239 118.735182) (xy 177.465895 118.974707) (xy 177.509138 119.21032) (xy 177.545584 119.302372) (xy 177.472416 119.124854)
+ (xy 177.326069 118.904584) (xy 177.139725 118.716935) (xy 176.920483 118.569054) (xy 176.676692 118.466574) (xy 176.417639 118.413398)
+ (xy 176.153191 118.411552) (xy 175.89342 118.461106) (xy 175.648222 118.560172) (xy 175.426936 118.704978) (xy 175.237991 118.890007)
+ (xy 175.088583 119.108212) (xy 174.984403 119.351281) (xy 174.92942 119.609957) (xy 174.925727 119.874386) (xy 170.703 119.874386)
+ (xy 170.703 118.491) (xy 170.695992 118.419527) (xy 170.68974 118.348069) (xy 170.688601 118.344148) (xy 170.688202 118.34008)
+ (xy 170.667449 118.271344) (xy 170.647433 118.202447) (xy 170.645553 118.198821) (xy 170.644372 118.194908) (xy 170.610675 118.131533)
+ (xy 170.577647 118.067815) (xy 170.575098 118.064621) (xy 170.57318 118.061015) (xy 170.527812 118.005388) (xy 170.483039 117.949303)
+ (xy 170.477431 117.943616) (xy 170.477336 117.943499) (xy 170.477228 117.94341) (xy 170.475422 117.941578) (xy 168.7297 116.195856)
+ (xy 168.828412 116.157569) (xy 169.030669 116.029212) (xy 169.204143 115.864015) (xy 169.342227 115.668269) (xy 169.43966 115.449431)
+ (xy 169.492732 115.215835) (xy 169.496552 114.942226) (xy 169.450024 114.707239) (xy 169.358739 114.485766) (xy 169.244575 114.313936)
+ (xy 169.299777 114.074855) (xy 175.378223 114.074855) (xy 175.434284 114.317657) (xy 175.67445 114.434789) (xy 175.932852 114.502817)
+ (xy 176.199562 114.519126) (xy 176.464328 114.483089) (xy 176.716976 114.396091) (xy 176.863716 114.317657) (xy 176.919777 114.074855)
+ (xy 176.149 113.304078) (xy 175.378223 114.074855) (xy 169.299777 114.074855) (xy 168.529 113.304078) (xy 168.514858 113.318221)
+ (xy 168.36778 113.171143) (xy 168.381922 113.157) (xy 168.676078 113.157) (xy 169.446855 113.927777) (xy 169.689657 113.871716)
+ (xy 169.806789 113.63155) (xy 169.874817 113.373148) (xy 169.884942 113.207562) (xy 174.786874 113.207562) (xy 174.822911 113.472328)
+ (xy 174.909909 113.724976) (xy 174.988343 113.871716) (xy 175.231145 113.927777) (xy 176.001922 113.157) (xy 176.296078 113.157)
+ (xy 177.066855 113.927777) (xy 177.309657 113.871716) (xy 177.426789 113.63155) (xy 177.494817 113.373148) (xy 177.511126 113.106438)
+ (xy 177.475089 112.841672) (xy 177.388091 112.589024) (xy 177.309657 112.442284) (xy 177.066855 112.386223) (xy 176.296078 113.157)
+ (xy 176.001922 113.157) (xy 175.231145 112.386223) (xy 174.988343 112.442284) (xy 174.871211 112.68245) (xy 174.803183 112.940852)
+ (xy 174.786874 113.207562) (xy 169.884942 113.207562) (xy 169.891126 113.106438) (xy 169.855089 112.841672) (xy 169.768091 112.589024)
+ (xy 169.689657 112.442284) (xy 169.446855 112.386223) (xy 168.676078 113.157) (xy 168.381922 113.157) (xy 167.611145 112.386223)
+ (xy 167.368343 112.442284) (xy 167.251211 112.68245) (xy 167.242585 112.715215) (xy 166.766515 112.239145) (xy 167.758223 112.239145)
+ (xy 168.529 113.009922) (xy 169.299777 112.239145) (xy 169.243716 111.996343) (xy 169.00355 111.879211) (xy 168.745148 111.811183)
+ (xy 168.478438 111.794874) (xy 168.213672 111.830911) (xy 167.961024 111.917909) (xy 167.814284 111.996343) (xy 167.758223 112.239145)
+ (xy 166.766515 112.239145) (xy 162.717756 108.190386) (xy 167.178727 108.190386) (xy 167.226466 108.450496) (xy 167.323819 108.696379)
+ (xy 167.467076 108.918671) (xy 167.650781 109.108903) (xy 167.867938 109.259831) (xy 168.110274 109.365705) (xy 168.36856 109.422493)
+ (xy 168.632956 109.428031) (xy 168.893393 109.382109) (xy 169.13995 109.286476) (xy 169.363237 109.144774) (xy 169.554747 108.962401)
+ (xy 169.707187 108.746304) (xy 169.814751 108.504712) (xy 169.87334 108.24683) (xy 169.877558 107.944773) (xy 169.826192 107.685355)
+ (xy 169.725416 107.440854) (xy 169.579069 107.220584) (xy 169.392725 107.032935) (xy 169.173483 106.885054) (xy 168.929692 106.782574)
+ (xy 168.670639 106.729398) (xy 168.406191 106.727552) (xy 168.14642 106.777106) (xy 167.901222 106.876172) (xy 167.679936 107.020978)
+ (xy 167.490991 107.206007) (xy 167.341583 107.424212) (xy 167.237403 107.667281) (xy 167.18242 107.925957) (xy 167.178727 108.190386)
+ (xy 162.717756 108.190386) (xy 162.534479 108.007109) (xy 162.636075 107.989195) (xy 162.859412 107.902569) (xy 163.061669 107.774212)
+ (xy 163.235143 107.609015) (xy 163.373227 107.413269) (xy 163.47066 107.194431) (xy 163.523732 106.960835) (xy 163.527552 106.687226)
+ (xy 163.481024 106.452239) (xy 163.389739 106.230766) (xy 163.257175 106.031241) (xy 163.109995 105.883029) (xy 165.655061 105.883029)
+ (xy 165.693808 106.094145) (xy 165.772823 106.293714) (xy 165.889097 106.474136) (xy 166.0382 106.628537) (xy 166.214454 106.751036)
+ (xy 166.411144 106.836968) (xy 166.62078 106.883059) (xy 166.835375 106.887555) (xy 167.046757 106.850282) (xy 167.246873 106.772662)
+ (xy 167.428102 106.657651) (xy 167.58354 106.509629) (xy 167.707267 106.334235) (xy 167.79457 106.13815) (xy 167.842124 105.928841)
+ (xy 167.845547 105.683679) (xy 167.803856 105.473124) (xy 167.722062 105.274677) (xy 167.603281 105.095897) (xy 167.452036 104.943593)
+ (xy 167.27409 104.823566) (xy 167.076219 104.740389) (xy 166.86596 104.697229) (xy 166.651323 104.69573) (xy 166.440482 104.73595)
+ (xy 166.241469 104.816357) (xy 166.061864 104.933887) (xy 165.908507 105.084065) (xy 165.787241 105.261169) (xy 165.702685 105.458455)
+ (xy 165.658058 105.668407) (xy 165.655061 105.883029) (xy 163.109995 105.883029) (xy 163.088381 105.861264) (xy 162.889786 105.727311)
+ (xy 162.668955 105.634482) (xy 162.434299 105.586314) (xy 162.194757 105.584642) (xy 162.0924 105.604167) (xy 162.0924 102.983386)
+ (xy 167.178727 102.983386) (xy 167.226466 103.243496) (xy 167.323819 103.489379) (xy 167.467076 103.711671) (xy 167.650781 103.901903)
+ (xy 167.867938 104.052831) (xy 168.110274 104.158705) (xy 168.36856 104.215493) (xy 168.632956 104.221031) (xy 168.893393 104.175109)
+ (xy 169.13995 104.079476) (xy 169.363237 103.937774) (xy 169.554747 103.755401) (xy 169.707187 103.539304) (xy 169.814751 103.297712)
+ (xy 169.87334 103.03983) (xy 169.877558 102.737773) (xy 169.826192 102.478355) (xy 169.725416 102.233854) (xy 169.579069 102.013584)
+ (xy 169.392725 101.825935) (xy 169.173483 101.678054) (xy 168.929692 101.575574) (xy 168.670639 101.522398) (xy 168.406191 101.520552)
+ (xy 168.14642 101.570106) (xy 167.901222 101.669172) (xy 167.679936 101.813978) (xy 167.490991 101.999007) (xy 167.341583 102.217212)
+ (xy 167.237403 102.460281) (xy 167.18242 102.718957) (xy 167.178727 102.983386) (xy 162.0924 102.983386) (xy 162.0924 100.432707)
+ (xy 162.225895 100.432707) (xy 162.269138 100.66832) (xy 162.357321 100.891047) (xy 162.487087 101.092403) (xy 162.653491 101.26472)
+ (xy 162.850196 101.401433) (xy 163.069709 101.497336) (xy 163.30367 101.548776) (xy 163.543166 101.553793) (xy 163.779075 101.512195)
+ (xy 164.002412 101.425569) (xy 164.204669 101.297212) (xy 164.378143 101.132015) (xy 164.516227 100.936269) (xy 164.61366 100.717431)
+ (xy 164.666732 100.483835) (xy 164.670552 100.210226) (xy 164.624024 99.975239) (xy 164.532739 99.753766) (xy 164.400175 99.554241)
+ (xy 164.231381 99.384264) (xy 164.032786 99.250311) (xy 163.811955 99.157482) (xy 163.577299 99.109314) (xy 163.337757 99.107642)
+ (xy 163.102451 99.152528) (xy 162.880346 99.242265) (xy 162.6799 99.373433) (xy 162.508749 99.541036) (xy 162.373412 99.738691)
+ (xy 162.279044 99.958868) (xy 162.229239 100.193182) (xy 162.225895 100.432707) (xy 162.0924 100.432707) (xy 162.0924 97.903386)
+ (xy 167.178727 97.903386) (xy 167.226466 98.163496) (xy 167.323819 98.409379) (xy 167.467076 98.631671) (xy 167.650781 98.821903)
+ (xy 167.867938 98.972831) (xy 168.110274 99.078705) (xy 168.36856 99.135493) (xy 168.632956 99.141031) (xy 168.893393 99.095109)
+ (xy 169.13995 98.999476) (xy 169.363237 98.857774) (xy 169.554747 98.675401) (xy 169.707187 98.459304) (xy 169.814751 98.217712)
+ (xy 169.87334 97.95983) (xy 169.877558 97.657773) (xy 169.826192 97.398355) (xy 169.725416 97.153854) (xy 169.579069 96.933584)
+ (xy 169.392725 96.745935) (xy 169.173483 96.598054) (xy 168.929692 96.495574) (xy 168.670639 96.442398) (xy 168.406191 96.440552)
+ (xy 168.14642 96.490106) (xy 167.901222 96.589172) (xy 167.679936 96.733978) (xy 167.490991 96.919007) (xy 167.341583 97.137212)
+ (xy 167.237403 97.380281) (xy 167.18242 97.638957) (xy 167.178727 97.903386) (xy 162.0924 97.903386) (xy 162.0924 95.850029)
+ (xy 165.782061 95.850029) (xy 165.820808 96.061145) (xy 165.899823 96.260714) (xy 166.016097 96.441136) (xy 166.1652 96.595537)
+ (xy 166.341454 96.718036) (xy 166.538144 96.803968) (xy 166.74778 96.850059) (xy 166.962375 96.854555) (xy 167.173757 96.817282)
+ (xy 167.373873 96.739662) (xy 167.555102 96.624651) (xy 167.71054 96.476629) (xy 167.834267 96.301235) (xy 167.92157 96.10515)
+ (xy 167.969124 95.895841) (xy 167.972547 95.650679) (xy 167.930856 95.440124) (xy 167.849062 95.241677) (xy 167.730281 95.062897)
+ (xy 167.579036 94.910593) (xy 167.40109 94.790566) (xy 167.203219 94.707389) (xy 166.99296 94.664229) (xy 166.778323 94.66273)
+ (xy 166.567482 94.70295) (xy 166.368469 94.783357) (xy 166.188864 94.900887) (xy 166.035507 95.051065) (xy 165.914241 95.228169)
+ (xy 165.829685 95.425455) (xy 165.785058 95.635407) (xy 165.782061 95.850029) (xy 162.0924 95.850029) (xy 162.0924 93.564029)
+ (xy 162.226061 93.564029) (xy 162.264808 93.775145) (xy 162.343823 93.974714) (xy 162.460097 94.155136) (xy 162.6092 94.309537)
+ (xy 162.785454 94.432036) (xy 162.982144 94.517968) (xy 163.19178 94.564059) (xy 163.406375 94.568555) (xy 163.617757 94.531282)
+ (xy 163.817873 94.453662) (xy 163.999102 94.338651) (xy 164.15454 94.190629) (xy 164.278267 94.015235) (xy 164.36557 93.81915)
+ (xy 164.413124 93.609841) (xy 164.416547 93.364679) (xy 164.374856 93.154124) (xy 164.293062 92.955677) (xy 164.174281 92.776897)
+ (xy 164.023036 92.624593) (xy 163.84509 92.504566) (xy 163.69717 92.442386) (xy 167.178727 92.442386) (xy 167.226466 92.702496)
+ (xy 167.323819 92.948379) (xy 167.467076 93.170671) (xy 167.650781 93.360903) (xy 167.867938 93.511831) (xy 168.110274 93.617705)
+ (xy 168.36856 93.674493) (xy 168.632956 93.680031) (xy 168.893393 93.634109) (xy 169.13995 93.538476) (xy 169.363237 93.396774)
+ (xy 169.554747 93.214401) (xy 169.707187 92.998304) (xy 169.814751 92.756712) (xy 169.87334 92.49883) (xy 169.877558 92.196773)
+ (xy 169.826192 91.937355) (xy 169.725416 91.692854) (xy 169.579069 91.472584) (xy 169.392725 91.284935) (xy 169.173483 91.137054)
+ (xy 168.929692 91.034574) (xy 168.670639 90.981398) (xy 168.406191 90.979552) (xy 168.14642 91.029106) (xy 167.901222 91.128172)
+ (xy 167.679936 91.272978) (xy 167.490991 91.458007) (xy 167.341583 91.676212) (xy 167.237403 91.919281) (xy 167.18242 92.177957)
+ (xy 167.178727 92.442386) (xy 163.69717 92.442386) (xy 163.647219 92.421389) (xy 163.43696 92.378229) (xy 163.222323 92.37673)
+ (xy 163.011482 92.41695) (xy 162.812469 92.497357) (xy 162.632864 92.614887) (xy 162.479507 92.765065) (xy 162.358241 92.942169)
+ (xy 162.273685 93.139455) (xy 162.229058 93.349407) (xy 162.226061 93.564029) (xy 162.0924 93.564029) (xy 162.0924 93.130651)
+ (xy 162.230227 92.935269) (xy 162.32766 92.716431) (xy 162.380732 92.482835) (xy 162.384552 92.209226) (xy 162.338024 91.974239)
+ (xy 162.246739 91.752766) (xy 162.114175 91.553241) (xy 161.945381 91.383264) (xy 161.746786 91.249311) (xy 161.525955 91.156482)
+ (xy 161.291299 91.108314) (xy 161.051757 91.106642) (xy 161.051 91.106786) (xy 161.051 89.916) (xy 161.043991 89.844518)
+ (xy 161.03774 89.77307) (xy 161.036601 89.76915) (xy 161.036202 89.76508) (xy 161.015446 89.696332) (xy 160.995433 89.627447)
+ (xy 160.993553 89.623821) (xy 160.992372 89.619908) (xy 160.958675 89.556533) (xy 160.925647 89.492815) (xy 160.923098 89.489621)
+ (xy 160.92118 89.486015) (xy 160.875812 89.430388) (xy 160.831039 89.374303) (xy 160.825431 89.368616) (xy 160.825336 89.368499)
+ (xy 160.825228 89.36841) (xy 160.823422 89.366578) (xy 159.781 88.324156) (xy 159.781 88.166855) (xy 167.758223 88.166855)
+ (xy 167.814284 88.409657) (xy 168.05445 88.526789) (xy 168.312852 88.594817) (xy 168.579562 88.611126) (xy 168.844328 88.575089)
+ (xy 169.096976 88.488091) (xy 169.243716 88.409657) (xy 169.299777 88.166855) (xy 168.529 87.396078) (xy 167.758223 88.166855)
+ (xy 159.781 88.166855) (xy 159.781 87.884) (xy 159.773991 87.812518) (xy 159.76774 87.74107) (xy 159.766601 87.73715)
+ (xy 159.766202 87.73308) (xy 159.745446 87.664332) (xy 159.725433 87.595447) (xy 159.723553 87.591821) (xy 159.722372 87.587908)
+ (xy 159.688675 87.524533) (xy 159.655647 87.460815) (xy 159.653098 87.457621) (xy 159.65118 87.454015) (xy 159.605812 87.398388)
+ (xy 159.561039 87.342303) (xy 159.555431 87.336616) (xy 159.555336 87.336499) (xy 159.555228 87.33641) (xy 159.553422 87.334578)
+ (xy 159.518406 87.299562) (xy 167.166874 87.299562) (xy 167.202911 87.564328) (xy 167.289909 87.816976) (xy 167.368343 87.963716)
+ (xy 167.611145 88.019777) (xy 168.381922 87.249) (xy 168.676078 87.249) (xy 169.446855 88.019777) (xy 169.689657 87.963716)
+ (xy 169.806789 87.72355) (xy 169.874817 87.465148) (xy 169.884942 87.299562) (xy 174.786874 87.299562) (xy 174.822911 87.564328)
+ (xy 174.909909 87.816976) (xy 174.988343 87.963716) (xy 175.231145 88.019777) (xy 176.001922 87.249) (xy 175.231145 86.478223)
+ (xy 174.988343 86.534284) (xy 174.871211 86.77445) (xy 174.803183 87.032852) (xy 174.786874 87.299562) (xy 169.884942 87.299562)
+ (xy 169.891126 87.198438) (xy 169.855089 86.933672) (xy 169.768091 86.681024) (xy 169.689657 86.534284) (xy 169.446855 86.478223)
+ (xy 168.676078 87.249) (xy 168.381922 87.249) (xy 167.611145 86.478223) (xy 167.368343 86.534284) (xy 167.251211 86.77445)
+ (xy 167.183183 87.032852) (xy 167.166874 87.299562) (xy 159.518406 87.299562) (xy 158.549989 86.331145) (xy 167.758223 86.331145)
+ (xy 168.529 87.101922) (xy 169.299777 86.331145) (xy 175.378223 86.331145) (xy 176.149 87.101922) (xy 176.919777 86.331145)
+ (xy 176.863716 86.088343) (xy 176.62355 85.971211) (xy 176.365148 85.903183) (xy 176.098438 85.886874) (xy 175.833672 85.922911)
+ (xy 175.581024 86.009909) (xy 175.434284 86.088343) (xy 175.378223 86.331145) (xy 169.299777 86.331145) (xy 169.243716 86.088343)
+ (xy 169.00355 85.971211) (xy 168.745148 85.903183) (xy 168.478438 85.886874) (xy 168.213672 85.922911) (xy 167.961024 86.009909)
+ (xy 167.814284 86.088343) (xy 167.758223 86.331145) (xy 158.549989 86.331145) (xy 158.283422 86.064578) (xy 158.227919 86.018987)
+ (xy 158.172979 85.972887) (xy 158.169401 85.97092) (xy 158.166242 85.968325) (xy 158.102983 85.934406) (xy 158.040093 85.899832)
+ (xy 158.036196 85.898596) (xy 158.032597 85.896666) (xy 157.963971 85.875685) (xy 157.895547 85.853979) (xy 157.891488 85.853524)
+ (xy 157.88758 85.852329) (xy 157.816172 85.845076) (xy 157.744849 85.837076) (xy 157.73686 85.83702) (xy 157.736712 85.837005)
+ (xy 157.736574 85.837018) (xy 157.734 85.837) (xy 155.194 85.837) (xy 155.122527 85.844008) (xy 155.051069 85.85026)
+ (xy 155.047148 85.851399) (xy 155.04308 85.851798) (xy 154.974344 85.872551) (xy 154.905447 85.892567) (xy 154.901821 85.894447)
+ (xy 154.897908 85.895628) (xy 154.834533 85.929325) (xy 154.770815 85.962353) (xy 154.767621 85.964902) (xy 154.764015 85.96682)
+ (xy 154.708388 86.012188) (xy 154.652303 86.056961) (xy 154.646616 86.062569) (xy 154.646499 86.062664) (xy 154.64641 86.062772)
+ (xy 154.644578 86.064578) (xy 154.263578 86.445578) (xy 154.217987 86.501081) (xy 154.171887 86.556021) (xy 154.16992 86.559599)
+ (xy 154.167325 86.562758) (xy 154.133406 86.626017) (xy 154.098832 86.688907) (xy 154.097596 86.692804) (xy 154.095666 86.696403)
+ (xy 154.074685 86.765029) (xy 154.052979 86.833453) (xy 154.052524 86.837512) (xy 154.051329 86.84142) (xy 154.044076 86.912828)
+ (xy 154.036076 86.984151) (xy 154.036064 86.985867) (xy 153.970507 87.050065) (xy 153.849241 87.227169) (xy 153.764685 87.424455)
+ (xy 153.7386 87.547175) (xy 153.736036 87.544593) (xy 153.55809 87.424566) (xy 153.360219 87.341389) (xy 153.14996 87.298229)
+ (xy 152.935323 87.29673) (xy 152.724482 87.33695) (xy 152.525469 87.417357) (xy 152.345864 87.534887) (xy 152.192507 87.685065)
+ (xy 152.071241 87.862169) (xy 151.986685 88.059455) (xy 151.942058 88.269407) (xy 151.939061 88.484029) (xy 151.967427 88.638583)
+ (xy 151.679422 88.350578) (xy 151.623919 88.304987) (xy 151.568979 88.258887) (xy 151.565401 88.25692) (xy 151.562242 88.254325)
+ (xy 151.498983 88.220406) (xy 151.4763 88.207936) (xy 151.474281 88.204897) (xy 151.323036 88.052593) (xy 151.14509 87.932566)
+ (xy 150.947219 87.849389) (xy 150.73696 87.806229) (xy 150.522323 87.80473) (xy 150.311482 87.84495) (xy 150.112469 87.925357)
+ (xy 149.932864 88.042887) (xy 149.779507 88.193065) (xy 149.658241 88.370169) (xy 149.573685 88.567455) (xy 149.529058 88.777407)
+ (xy 149.526061 88.992029) (xy 149.564808 89.203145) (xy 149.643823 89.402714) (xy 149.760097 89.583136) (xy 149.9092 89.737537)
+ (xy 150.085454 89.860036) (xy 150.282144 89.945968) (xy 150.49178 89.992059) (xy 150.706375 89.996555) (xy 150.917757 89.959282)
+ (xy 151.042178 89.911022) (xy 152.884817 91.753661) (xy 152.760513 91.777373) (xy 152.584592 91.84845) (xy 152.425828 91.952342)
+ (xy 152.290266 92.085094) (xy 152.183071 92.241648) (xy 152.108326 92.416042) (xy 152.068878 92.601632) (xy 152.066229 92.79135)
+ (xy 152.10048 92.977969) (xy 152.170326 93.154382) (xy 152.273108 93.313868) (xy 152.40491 93.450353) (xy 152.560712 93.558638)
+ (xy 152.73458 93.634599) (xy 152.896315 93.670159) (xy 153.909 94.682844) (xy 153.909 130.742156) (xy 149.1283 135.522856)
+ (xy 148.992308 135.494941) (xy 148.715408 135.493007) (xy 148.443405 135.544895) (xy 148.186661 135.648626) (xy 147.954954 135.80025)
+ (xy 147.757112 135.993992) (xy 147.600668 136.222472) (xy 147.57462 136.283246) (xy 147.556754 136.239899) (xy 147.403516 136.009257)
+ (xy 147.208398 135.812771) (xy 147.081 135.72684) (xy 147.081 135.509) (xy 147.073992 135.437527) (xy 147.06774 135.366069)
+ (xy 147.066601 135.362148) (xy 147.066202 135.35808) (xy 147.045449 135.289344) (xy 147.025433 135.220447) (xy 147.023553 135.216821)
+ (xy 147.022372 135.212908) (xy 146.988675 135.149533) (xy 146.955647 135.085815) (xy 146.953098 135.082621) (xy 146.95118 135.079015)
+ (xy 146.905812 135.023388) (xy 146.861039 134.967303) (xy 146.855431 134.961616) (xy 146.855336 134.961499) (xy 146.855228 134.96141)
+ (xy 146.853422 134.959578) (xy 146.573 134.679156) (xy 146.573 117.288844) (xy 148.443792 115.418052) (xy 148.497553 115.402433)
+ (xy 148.501179 115.400553) (xy 148.505092 115.399372) (xy 148.568467 115.365675) (xy 148.632185 115.332647) (xy 148.635379 115.330097)
+ (xy 148.638985 115.32818) (xy 148.694581 115.282837) (xy 148.750697 115.23804) (xy 148.756386 115.23243) (xy 148.756501 115.232336)
+ (xy 148.756589 115.23223) (xy 148.758422 115.230422) (xy 150.582422 113.406422) (xy 150.627995 113.350941) (xy 150.674113 113.295979)
+ (xy 150.676081 113.292399) (xy 150.678675 113.289241) (xy 150.712602 113.225969) (xy 150.747168 113.163093) (xy 150.748403 113.159201)
+ (xy 150.750335 113.155597) (xy 150.77133 113.086926) (xy 150.793021 113.018547) (xy 150.793476 113.014488) (xy 150.794671 113.01058)
+ (xy 150.801925 112.939162) (xy 150.809924 112.867849) (xy 150.80998 112.859859) (xy 150.809995 112.859711) (xy 150.809982 112.859573)
+ (xy 150.81 112.857) (xy 150.81 102.668559) (xy 150.839138 102.82732) (xy 150.927321 103.050047) (xy 151.057087 103.251403)
+ (xy 151.223491 103.42372) (xy 151.420196 103.560433) (xy 151.639709 103.656336) (xy 151.87367 103.707776) (xy 152.113166 103.712793)
+ (xy 152.349075 103.671195) (xy 152.572412 103.584569) (xy 152.774669 103.456212) (xy 152.948143 103.291015) (xy 153.086227 103.095269)
+ (xy 153.18366 102.876431) (xy 153.236732 102.642835) (xy 153.240552 102.369226) (xy 153.194024 102.134239) (xy 153.102739 101.912766)
+ (xy 152.970175 101.713241) (xy 152.801381 101.543264) (xy 152.602786 101.409311) (xy 152.381955 101.316482) (xy 152.147299 101.268314)
+ (xy 151.907757 101.266642) (xy 151.672451 101.311528) (xy 151.450346 101.401265) (xy 151.2499 101.532433) (xy 151.078749 101.700036)
+ (xy 150.943412 101.897691) (xy 150.849044 102.117868) (xy 150.81 102.301555) (xy 150.81 101.113844) (xy 151.806422 100.117422)
+ (xy 151.851991 100.061945) (xy 151.898113 100.006979) (xy 151.900082 100.003398) (xy 151.902674 100.000242) (xy 151.936573 99.937022)
+ (xy 151.971168 99.874093) (xy 151.972404 99.870196) (xy 151.974334 99.866597) (xy 151.995302 99.798013) (xy 152.017021 99.729547)
+ (xy 152.017477 99.725482) (xy 152.01867 99.72158) (xy 152.025918 99.650222) (xy 152.033924 99.578849) (xy 152.03398 99.57086)
+ (xy 152.033995 99.570712) (xy 152.033982 99.570574) (xy 152.034 99.568) (xy 152.034 94.869) (xy 152.026992 94.797527)
+ (xy 152.02074 94.726069) (xy 152.019601 94.722148) (xy 152.019202 94.71808) (xy 151.998449 94.649344) (xy 151.978433 94.580447)
+ (xy 151.976553 94.576821) (xy 151.975372 94.572908) (xy 151.941675 94.509533) (xy 151.908647 94.445815) (xy 151.906098 94.442621)
+ (xy 151.90418 94.439015) (xy 151.858812 94.383388) (xy 151.814039 94.327303) (xy 151.808431 94.321616) (xy 151.808336 94.321499)
+ (xy 151.808228 94.32141) (xy 151.806422 94.319578) (xy 151.425422 93.938578) (xy 151.369919 93.892987) (xy 151.314979 93.846887)
+ (xy 151.311401 93.84492) (xy 151.308242 93.842325) (xy 151.244983 93.808406) (xy 151.182093 93.773832) (xy 151.178196 93.772596)
+ (xy 151.174597 93.770666) (xy 151.105971 93.749685) (xy 151.037547 93.727979) (xy 151.033488 93.727524) (xy 151.02958 93.726329)
+ (xy 150.958172 93.719076) (xy 150.886849 93.711076) (xy 150.87886 93.71102) (xy 150.878712 93.711005) (xy 150.878574 93.711018)
+ (xy 150.876 93.711) (xy 149.098 93.711) (xy 149.026527 93.718008) (xy 148.955069 93.72426) (xy 148.951148 93.725399)
+ (xy 148.94708 93.725798) (xy 148.878344 93.746551) (xy 148.809447 93.766567) (xy 148.805821 93.768447) (xy 148.801908 93.769628)
+ (xy 148.738533 93.803325) (xy 148.674815 93.836353) (xy 148.671621 93.838902) (xy 148.668015 93.84082) (xy 148.612388 93.886188)
+ (xy 148.556303 93.930961) (xy 148.550616 93.936569) (xy 148.550499 93.936664) (xy 148.55041 93.936772) (xy 148.548578 93.938578)
+ (xy 148.167578 94.319578) (xy 148.15989 94.328937) (xy 148.016999 94.38667) (xy 147.861482 94.321297) (xy 147.675621 94.283145)
+ (xy 147.485889 94.28182) (xy 147.299513 94.317373) (xy 147.123592 94.38845) (xy 146.964828 94.492342) (xy 146.829266 94.625094)
+ (xy 146.722071 94.781648) (xy 146.647326 94.956042) (xy 146.607878 95.141632) (xy 146.605229 95.33135) (xy 146.63948 95.517969)
+ (xy 146.709326 95.694382) (xy 146.812108 95.853868) (xy 146.94391 95.990353) (xy 147.099712 96.098638) (xy 147.27358 96.174599)
+ (xy 147.45889 96.215342) (xy 147.648585 96.219316) (xy 147.835439 96.186368) (xy 148.012335 96.117755) (xy 148.020544 96.112545)
+ (xy 148.16258 96.174599) (xy 148.207648 96.184508) (xy 147.251578 97.140578) (xy 147.205987 97.196081) (xy 147.159887 97.251021)
+ (xy 147.15792 97.254599) (xy 147.155325 97.257758) (xy 147.121406 97.321017) (xy 147.086832 97.383907) (xy 147.085596 97.387804)
+ (xy 147.083666 97.391403) (xy 147.062685 97.460029) (xy 147.055713 97.482005) (xy 146.940299 97.458314) (xy 146.700757 97.456642)
+ (xy 146.465451 97.501528) (xy 146.243346 97.591265) (xy 146.0429 97.722433) (xy 145.871749 97.890036) (xy 145.736412 98.087691)
+ (xy 145.642044 98.307868) (xy 145.592239 98.542182) (xy 145.588895 98.781707) (xy 145.632138 99.01732) (xy 145.720321 99.240047)
+ (xy 145.850087 99.441403) (xy 146.016491 99.61372) (xy 146.213196 99.750433) (xy 146.432709 99.846336) (xy 146.66667 99.897776)
+ (xy 146.906166 99.902793) (xy 147.024 99.882015) (xy 147.024 104.206495) (xy 146.940299 104.189314) (xy 146.700757 104.187642)
+ (xy 146.465451 104.232528) (xy 146.243346 104.322265) (xy 146.0429 104.453433) (xy 145.871749 104.621036) (xy 145.736412 104.818691)
+ (xy 145.642044 105.038868) (xy 145.592239 105.273182) (xy 145.588895 105.512707) (xy 145.632138 105.74832) (xy 145.719552 105.969104)
+ (xy 145.715507 105.973065) (xy 145.594241 106.150169) (xy 145.509685 106.347455) (xy 145.465058 106.557407) (xy 145.462061 106.772029)
+ (xy 145.500808 106.983145) (xy 145.579823 107.182714) (xy 145.665646 107.315885) (xy 145.594241 107.420169) (xy 145.509685 107.617455)
+ (xy 145.465058 107.827407) (xy 145.462061 108.042029) (xy 145.500808 108.253145) (xy 145.579823 108.452714) (xy 145.696097 108.633136)
+ (xy 145.8452 108.787537) (xy 146.021454 108.910036) (xy 146.086612 108.938503) (xy 145.995864 108.997887) (xy 145.842507 109.148065)
+ (xy 145.721241 109.325169) (xy 145.636685 109.522455) (xy 145.592058 109.732407) (xy 145.589061 109.947029) (xy 145.627808 110.158145)
+ (xy 145.706823 110.357714) (xy 145.823097 110.538136) (xy 145.9722 110.692537) (xy 146.148454 110.815036) (xy 146.345144 110.900968)
+ (xy 146.55478 110.947059) (xy 146.769375 110.951555) (xy 146.980757 110.914282) (xy 147.024 110.897509) (xy 147.024 111.592156)
+ (xy 146.744156 111.872) (xy 146.685 111.872) (xy 146.613568 111.879004) (xy 146.54207 111.885259) (xy 146.538144 111.886399)
+ (xy 146.53408 111.886798) (xy 146.465406 111.907532) (xy 146.396448 111.927566) (xy 146.392819 111.929447) (xy 146.388908 111.930628)
+ (xy 146.32555 111.964316) (xy 146.261815 111.997353) (xy 146.258621 111.999903) (xy 146.255015 112.00182) (xy 146.199419 112.047163)
+ (xy 146.143303 112.09196) (xy 146.137614 112.09757) (xy 146.137499 112.097664) (xy 146.137411 112.09777) (xy 146.135578 112.099578)
+ (xy 143.214578 115.020578) (xy 143.168987 115.076081) (xy 143.122887 115.131021) (xy 143.12092 115.134599) (xy 143.118325 115.137758)
+ (xy 143.084406 115.201017) (xy 143.079288 115.210326) (xy 142.946219 115.154389) (xy 142.73596 115.111229) (xy 142.521323 115.10973)
+ (xy 142.310482 115.14995) (xy 142.111469 115.230357) (xy 141.931864 115.347887) (xy 141.778507 115.498065) (xy 141.657241 115.675169)
+ (xy 141.572685 115.872455) (xy 141.528058 116.082407) (xy 141.525061 116.297029) (xy 141.563808 116.508145) (xy 141.642823 116.707714)
+ (xy 141.759097 116.888136) (xy 141.9082 117.042537) (xy 142.084454 117.165036) (xy 142.281144 117.250968) (xy 142.49078 117.297059)
+ (xy 142.705375 117.301555) (xy 142.916757 117.264282) (xy 142.987 117.237036) (xy 142.987 118.784151) (xy 142.942739 118.676766)
+ (xy 142.810175 118.477241) (xy 142.641381 118.307264) (xy 142.442786 118.173311) (xy 142.221955 118.080482) (xy 141.987299 118.032314)
+ (xy 141.747757 118.030642) (xy 141.512451 118.075528) (xy 141.290346 118.165265) (xy 141.0899 118.296433) (xy 140.918749 118.464036)
+ (xy 140.783412 118.661691) (xy 140.689044 118.881868) (xy 140.639239 119.116182) (xy 140.635895 119.355707) (xy 140.679138 119.59132)
+ (xy 140.767321 119.814047) (xy 140.897087 120.015403) (xy 141.063491 120.18772) (xy 141.260196 120.324433) (xy 141.479709 120.420336)
+ (xy 141.71367 120.471776) (xy 141.953166 120.476793) (xy 142.189075 120.435195) (xy 142.412412 120.348569) (xy 142.614669 120.220212)
+ (xy 142.788143 120.055015) (xy 142.926227 119.859269) (xy 142.987 119.722771) (xy 142.987 130.996156) (xy 139.715 134.268156)
+ (xy 139.715 133.223) (xy 139.707991 133.151518) (xy 139.70174 133.08007) (xy 139.700601 133.07615) (xy 139.700202 133.07208)
+ (xy 139.679446 133.003332) (xy 139.659433 132.934447) (xy 139.657553 132.930821) (xy 139.656372 132.926908) (xy 139.622675 132.863533)
+ (xy 139.589647 132.799815) (xy 139.587098 132.796621) (xy 139.58518 132.793015) (xy 139.539812 132.737388) (xy 139.495039 132.681303)
+ (xy 139.489431 132.675616) (xy 139.489336 132.675499) (xy 139.489228 132.67541) (xy 139.487422 132.673578) (xy 139.461 132.647156)
+ (xy 139.461 128.905) (xy 139.453992 128.833527) (xy 139.44774 128.762069) (xy 139.446601 128.758148) (xy 139.446202 128.75408)
+ (xy 139.425449 128.685344) (xy 139.405433 128.616447) (xy 139.403553 128.612821) (xy 139.402372 128.608908) (xy 139.368675 128.545533)
+ (xy 139.335647 128.481815) (xy 139.333098 128.478621) (xy 139.33118 128.475015) (xy 139.285812 128.419388) (xy 139.241039 128.363303)
+ (xy 139.235431 128.357616) (xy 139.235336 128.357499) (xy 139.235228 128.35741) (xy 139.233422 128.355578) (xy 135.905 125.027156)
+ (xy 135.905 116.297029) (xy 138.350061 116.297029) (xy 138.388808 116.508145) (xy 138.467823 116.707714) (xy 138.584097 116.888136)
+ (xy 138.7332 117.042537) (xy 138.909454 117.165036) (xy 139.106144 117.250968) (xy 139.31578 117.297059) (xy 139.530375 117.301555)
+ (xy 139.741757 117.264282) (xy 139.941873 117.186662) (xy 140.123102 117.071651) (xy 140.27854 116.923629) (xy 140.402267 116.748235)
+ (xy 140.48957 116.55215) (xy 140.537124 116.342841) (xy 140.540547 116.097679) (xy 140.498856 115.887124) (xy 140.417062 115.688677)
+ (xy 140.298281 115.509897) (xy 140.147036 115.357593) (xy 139.96909 115.237566) (xy 139.771219 115.154389) (xy 139.56096 115.111229)
+ (xy 139.346323 115.10973) (xy 139.135482 115.14995) (xy 138.936469 115.230357) (xy 138.756864 115.347887) (xy 138.603507 115.498065)
+ (xy 138.482241 115.675169) (xy 138.397685 115.872455) (xy 138.353058 116.082407) (xy 138.350061 116.297029) (xy 135.905 116.297029)
+ (xy 135.905 113.302707) (xy 137.576895 113.302707) (xy 137.620138 113.53832) (xy 137.708321 113.761047) (xy 137.838087 113.962403)
+ (xy 138.004491 114.13472) (xy 138.201196 114.271433) (xy 138.420709 114.367336) (xy 138.65467 114.418776) (xy 138.894166 114.423793)
+ (xy 139.130075 114.382195) (xy 139.353412 114.295569) (xy 139.555669 114.167212) (xy 139.729143 114.002015) (xy 139.867227 113.806269)
+ (xy 139.96466 113.587431) (xy 140.017732 113.353835) (xy 140.021552 113.080226) (xy 139.975024 112.845239) (xy 139.883739 112.623766)
+ (xy 139.751175 112.424241) (xy 139.582381 112.254264) (xy 139.383786 112.120311) (xy 139.162955 112.027482) (xy 138.928299 111.979314)
+ (xy 138.688757 111.977642) (xy 138.453451 112.022528) (xy 138.231346 112.112265) (xy 138.0309 112.243433) (xy 137.859749 112.411036)
+ (xy 137.724412 112.608691) (xy 137.630044 112.828868) (xy 137.580239 113.063182) (xy 137.576895 113.302707) (xy 135.905 113.302707)
+ (xy 135.905 111.448031) (xy 135.973306 111.351201) (xy 136.050479 111.177868) (xy 136.092515 110.992847) (xy 136.095541 110.776132)
+ (xy 136.058688 110.590009) (xy 135.986385 110.414589) (xy 135.881386 110.256553) (xy 135.747691 110.121922) (xy 135.590393 110.015822)
+ (xy 135.415482 109.942297) (xy 135.229621 109.904145) (xy 135.039889 109.90282) (xy 134.853513 109.938373) (xy 134.681999 110.00767)
+ (xy 134.526482 109.942297) (xy 134.340621 109.904145) (xy 134.27317 109.903674) (xy 135.550422 108.626422) (xy 135.595991 108.570945)
+ (xy 135.642113 108.515979) (xy 135.644082 108.512398) (xy 135.646674 108.509242) (xy 135.680573 108.446022) (xy 135.715168 108.383093)
+ (xy 135.716404 108.379196) (xy 135.718334 108.375597) (xy 135.739302 108.307013) (xy 135.761021 108.238547) (xy 135.761477 108.234482)
+ (xy 135.76267 108.23058) (xy 135.769918 108.159222) (xy 135.777924 108.087849) (xy 135.77798 108.07986) (xy 135.777995 108.079712)
+ (xy 135.777982 108.079574) (xy 135.778 108.077) (xy 135.778 107.511031) (xy 135.846306 107.414201) (xy 135.923479 107.240868)
+ (xy 135.965515 107.055847) (xy 135.968541 106.839132) (xy 135.93505 106.669987) (xy 135.995757 106.659282) (xy 136.195873 106.581662)
+ (xy 136.199579 106.57931) (xy 136.27591 106.658353) (xy 136.431712 106.766638) (xy 136.60558 106.842599) (xy 136.79089 106.883342)
+ (xy 136.980585 106.887316) (xy 137.167439 106.854368) (xy 137.344335 106.785755) (xy 137.504534 106.684089) (xy 137.641936 106.553243)
+ (xy 137.733432 106.423538) (xy 137.731229 106.58135) (xy 137.76548 106.767969) (xy 137.835326 106.944382) (xy 137.938108 107.103868)
+ (xy 138.06991 107.240353) (xy 138.112424 107.269901) (xy 138.098878 107.333632) (xy 138.096229 107.52335) (xy 138.13048 107.709969)
+ (xy 138.200326 107.886382) (xy 138.303108 108.045868) (xy 138.43491 108.182353) (xy 138.590712 108.290638) (xy 138.76458 108.366599)
+ (xy 138.94989 108.407342) (xy 139.139585 108.411316) (xy 139.326439 108.378368) (xy 139.503335 108.309755) (xy 139.663534 108.208089)
+ (xy 139.800936 108.077243) (xy 139.910306 107.922201) (xy 139.987479 107.748868) (xy 140.029515 107.563847) (xy 140.032541 107.347132)
+ (xy 139.995688 107.161009) (xy 139.923385 106.985589) (xy 139.818386 106.827553) (xy 139.684691 106.692922) (xy 139.653194 106.671677)
+ (xy 139.664515 106.621847) (xy 139.665964 106.518029) (xy 140.382061 106.518029) (xy 140.420808 106.729145) (xy 140.499823 106.928714)
+ (xy 140.616097 107.109136) (xy 140.7652 107.263537) (xy 140.941454 107.386036) (xy 141.138144 107.471968) (xy 141.34778 107.518059)
+ (xy 141.562375 107.522555) (xy 141.773757 107.485282) (xy 141.973873 107.407662) (xy 142.155102 107.292651) (xy 142.31054 107.144629)
+ (xy 142.434267 106.969235) (xy 142.52157 106.77315) (xy 142.569124 106.563841) (xy 142.572547 106.318679) (xy 142.530856 106.108124)
+ (xy 142.449062 105.909677) (xy 142.334716 105.737573) (xy 142.400479 105.589868) (xy 142.442515 105.404847) (xy 142.445541 105.188132)
+ (xy 142.408688 105.002009) (xy 142.336385 104.826589) (xy 142.231386 104.668553) (xy 142.097691 104.533922) (xy 141.940393 104.427822)
+ (xy 141.765482 104.354297) (xy 141.579621 104.316145) (xy 141.389889 104.31482) (xy 141.203513 104.350373) (xy 141.027592 104.42145)
+ (xy 140.868828 104.525342) (xy 140.733266 104.658094) (xy 140.626071 104.814648) (xy 140.551326 104.989042) (xy 140.511878 105.174632)
+ (xy 140.509229 105.36435) (xy 140.54348 105.550969) (xy 140.613326 105.727382) (xy 140.621319 105.739785) (xy 140.514241 105.896169)
+ (xy 140.429685 106.093455) (xy 140.385058 106.303407) (xy 140.382061 106.518029) (xy 139.665964 106.518029) (xy 139.667541 106.405132)
+ (xy 139.630688 106.219009) (xy 139.558385 106.043589) (xy 139.453386 105.885553) (xy 139.319691 105.750922) (xy 139.162393 105.644822)
+ (xy 138.987482 105.571297) (xy 138.801621 105.533145) (xy 138.611889 105.53182) (xy 138.425513 105.567373) (xy 138.249592 105.63845)
+ (xy 138.090828 105.742342) (xy 137.955266 105.875094) (xy 137.871099 105.998016) (xy 137.873541 105.823132) (xy 137.836688 105.637009)
+ (xy 137.764385 105.461589) (xy 137.659386 105.303553) (xy 137.525691 105.168922) (xy 137.368393 105.062822) (xy 137.193482 104.989297)
+ (xy 137.007621 104.951145) (xy 136.817889 104.94982) (xy 136.631513 104.985373) (xy 136.611201 104.993579) (xy 136.552281 104.904897)
+ (xy 136.401036 104.752593) (xy 136.22309 104.632566) (xy 136.025219 104.549389) (xy 135.81496 104.506229) (xy 135.600323 104.50473)
+ (xy 135.389482 104.54495) (xy 135.190469 104.625357) (xy 135.010864 104.742887) (xy 134.994739 104.758677) (xy 134.970385 104.699589)
+ (xy 134.899204 104.592453) (xy 134.907479 104.573868) (xy 134.949515 104.388847) (xy 134.952541 104.172132) (xy 134.915688 103.986009)
+ (xy 134.843385 103.810589) (xy 134.738386 103.652553) (xy 134.604691 103.517922) (xy 134.447393 103.411822) (xy 134.272482 103.338297)
+ (xy 134.086621 103.300145) (xy 133.896889 103.29882) (xy 133.710513 103.334373) (xy 133.534592 103.40545) (xy 133.375828 103.509342)
+ (xy 133.365 103.519946) (xy 133.365 103.447031) (xy 133.433306 103.350201) (xy 133.510479 103.176868) (xy 133.552515 102.991847)
+ (xy 133.554704 102.835029) (xy 138.731061 102.835029) (xy 138.769808 103.046145) (xy 138.848823 103.245714) (xy 138.965097 103.426136)
+ (xy 139.1142 103.580537) (xy 139.290454 103.703036) (xy 139.487144 103.788968) (xy 139.69678 103.835059) (xy 139.911375 103.839555)
+ (xy 140.106784 103.805099) (xy 140.108097 103.807136) (xy 140.2572 103.961537) (xy 140.433454 104.084036) (xy 140.630144 104.169968)
+ (xy 140.83978 104.216059) (xy 141.054375 104.220555) (xy 141.265757 104.183282) (xy 141.465873 104.105662) (xy 141.647102 103.990651)
+ (xy 141.80254 103.842629) (xy 141.926267 103.667235) (xy 142.01357 103.47115) (xy 142.061124 103.261841) (xy 142.064547 103.016679)
+ (xy 142.022856 102.806124) (xy 141.941062 102.607677) (xy 141.861884 102.488504) (xy 141.926267 102.397235) (xy 142.01357 102.20115)
+ (xy 142.061124 101.991841) (xy 142.064547 101.746679) (xy 142.022856 101.536124) (xy 141.941062 101.337677) (xy 141.822281 101.158897)
+ (xy 141.671036 101.006593) (xy 141.49309 100.886566) (xy 141.295219 100.803389) (xy 141.08496 100.760229) (xy 140.870323 100.75873)
+ (xy 140.659482 100.79895) (xy 140.460469 100.879357) (xy 140.280864 100.996887) (xy 140.127507 101.147065) (xy 140.006241 101.324169)
+ (xy 139.921685 101.521455) (xy 139.894596 101.648898) (xy 139.727323 101.64773) (xy 139.516482 101.68795) (xy 139.317469 101.768357)
+ (xy 139.137864 101.885887) (xy 138.984507 102.036065) (xy 138.863241 102.213169) (xy 138.778685 102.410455) (xy 138.734058 102.620407)
+ (xy 138.731061 102.835029) (xy 133.554704 102.835029) (xy 133.555541 102.775132) (xy 133.518688 102.589009) (xy 133.446385 102.413589)
+ (xy 133.341386 102.255553) (xy 133.207691 102.120922) (xy 133.050393 102.014822) (xy 132.875482 101.941297) (xy 132.689621 101.903145)
+ (xy 132.499889 101.90182) (xy 132.313513 101.937373) (xy 132.141999 102.00667) (xy 131.986482 101.941297) (xy 131.800621 101.903145)
+ (xy 131.610889 101.90182) (xy 131.424513 101.937373) (xy 131.248592 102.00845) (xy 131.089828 102.112342) (xy 130.954266 102.245094)
+ (xy 130.847071 102.401648) (xy 130.772326 102.576042) (xy 130.732878 102.761632) (xy 130.730229 102.95135) (xy 130.76448 103.137969)
+ (xy 130.834326 103.314382) (xy 130.937108 103.473868) (xy 131.06891 103.610353) (xy 131.224712 103.718638) (xy 131.39858 103.794599)
+ (xy 131.58389 103.835342) (xy 131.773585 103.839316) (xy 131.811 103.832719) (xy 131.811 104.067467) (xy 131.780393 104.046822)
+ (xy 131.605482 103.973297) (xy 131.419621 103.935145) (xy 131.229889 103.93382) (xy 131.043513 103.969373) (xy 130.871999 104.03867)
+ (xy 130.716482 103.973297) (xy 130.530621 103.935145) (xy 130.340889 103.93382) (xy 130.154513 103.969373) (xy 129.978592 104.04045)
+ (xy 129.819828 104.144342) (xy 129.684266 104.277094) (xy 129.577071 104.433648) (xy 129.573205 104.442667) (xy 129.451889 104.44182)
+ (xy 129.428 104.446377) (xy 129.428 100.124) (xy 129.454757 100.119282) (xy 129.654873 100.041662) (xy 129.836102 99.926651)
+ (xy 129.99154 99.778629) (xy 130.115267 99.603235) (xy 130.20257 99.40715) (xy 130.250124 99.197841) (xy 130.252536 99.025029)
+ (xy 137.715061 99.025029) (xy 137.753808 99.236145) (xy 137.832823 99.435714) (xy 137.949097 99.616136) (xy 138.0982 99.770537)
+ (xy 138.274454 99.893036) (xy 138.471144 99.978968) (xy 138.68078 100.025059) (xy 138.895375 100.029555) (xy 139.106757 99.992282)
+ (xy 139.306873 99.914662) (xy 139.488102 99.799651) (xy 139.64354 99.651629) (xy 139.767267 99.476235) (xy 139.85457 99.28015)
+ (xy 139.902124 99.070841) (xy 139.905547 98.825679) (xy 139.863856 98.615124) (xy 139.782062 98.416677) (xy 139.663281 98.237897)
+ (xy 139.512036 98.085593) (xy 139.33409 97.965566) (xy 139.136219 97.882389) (xy 138.92596 97.839229) (xy 138.711323 97.83773)
+ (xy 138.500482 97.87795) (xy 138.301469 97.958357) (xy 138.121864 98.075887) (xy 137.968507 98.226065) (xy 137.847241 98.403169)
+ (xy 137.762685 98.600455) (xy 137.718058 98.810407) (xy 137.715061 99.025029) (xy 130.252536 99.025029) (xy 130.253547 98.952679)
+ (xy 130.211856 98.742124) (xy 130.130062 98.543677) (xy 130.011281 98.364897) (xy 129.860036 98.212593) (xy 129.68209 98.092566)
+ (xy 129.484219 98.009389) (xy 129.27396 97.966229) (xy 129.059323 97.96473) (xy 128.92 97.991307) (xy 128.92 96.188103)
+ (xy 129.04389 96.215342) (xy 129.233585 96.219316) (xy 129.420439 96.186368) (xy 129.597335 96.117755) (xy 129.605544 96.112545)
+ (xy 129.74758 96.174599) (xy 129.93289 96.215342) (xy 130.122585 96.219316) (xy 130.309439 96.186368) (xy 130.486335 96.117755)
+ (xy 130.494544 96.112545) (xy 130.63658 96.174599) (xy 130.748206 96.199142) (xy 130.733058 96.270407) (xy 130.730061 96.485029)
+ (xy 130.768808 96.696145) (xy 130.847823 96.895714) (xy 130.964097 97.076136) (xy 131.1132 97.230537) (xy 131.289454 97.353036)
+ (xy 131.486144 97.438968) (xy 131.69578 97.485059) (xy 131.910375 97.489555) (xy 132.121757 97.452282) (xy 132.321873 97.374662)
+ (xy 132.503102 97.259651) (xy 132.65854 97.111629) (xy 132.775581 96.945713) (xy 132.813454 96.972036) (xy 133.010144 97.057968)
+ (xy 133.016907 97.059455) (xy 133.016061 97.120029) (xy 133.054808 97.331145) (xy 133.133823 97.530714) (xy 133.250097 97.711136)
+ (xy 133.3992 97.865537) (xy 133.575454 97.988036) (xy 133.772144 98.073968) (xy 133.98178 98.120059) (xy 134.196375 98.124555)
+ (xy 134.407757 98.087282) (xy 134.607873 98.009662) (xy 134.789102 97.894651) (xy 134.94454 97.746629) (xy 135.068267 97.571235)
+ (xy 135.15557 97.37515) (xy 135.176321 97.283816) (xy 135.175061 97.374029) (xy 135.213808 97.585145) (xy 135.292823 97.784714)
+ (xy 135.409097 97.965136) (xy 135.5582 98.119537) (xy 135.734454 98.242036) (xy 135.931144 98.327968) (xy 136.14078 98.374059)
+ (xy 136.355375 98.378555) (xy 136.566757 98.341282) (xy 136.766873 98.263662) (xy 136.948102 98.148651) (xy 137.10354 98.000629)
+ (xy 137.227267 97.825235) (xy 137.31457 97.62915) (xy 137.362124 97.419841) (xy 137.365547 97.174679) (xy 137.323856 96.964124)
+ (xy 137.242062 96.765677) (xy 137.123281 96.586897) (xy 136.972036 96.434593) (xy 136.948838 96.418946) (xy 136.962678 96.358029)
+ (xy 137.715061 96.358029) (xy 137.753808 96.569145) (xy 137.832823 96.768714) (xy 137.949097 96.949136) (xy 138.0982 97.103537)
+ (xy 138.274454 97.226036) (xy 138.471144 97.311968) (xy 138.68078 97.358059) (xy 138.895375 97.362555) (xy 139.106757 97.325282)
+ (xy 139.306873 97.247662) (xy 139.488102 97.132651) (xy 139.639449 96.988525) (xy 139.798454 97.099036) (xy 139.995144 97.184968)
+ (xy 140.20478 97.231059) (xy 140.419375 97.235555) (xy 140.630757 97.198282) (xy 140.830873 97.120662) (xy 140.879151 97.090024)
+ (xy 140.8922 97.103537) (xy 141.068454 97.226036) (xy 141.265144 97.311968) (xy 141.47478 97.358059) (xy 141.689375 97.362555)
+ (xy 141.900757 97.325282) (xy 142.100873 97.247662) (xy 142.282102 97.132651) (xy 142.43754 96.984629) (xy 142.561267 96.809235)
+ (xy 142.64857 96.61315) (xy 142.696124 96.403841) (xy 142.699547 96.158679) (xy 142.657856 95.948124) (xy 142.576062 95.749677)
+ (xy 142.457281 95.570897) (xy 142.306036 95.418593) (xy 142.12809 95.298566) (xy 141.930219 95.215389) (xy 141.71996 95.172229)
+ (xy 141.505323 95.17073) (xy 141.294482 95.21095) (xy 141.095469 95.291357) (xy 141.059303 95.315023) (xy 141.036036 95.291593)
+ (xy 140.85809 95.171566) (xy 140.660219 95.088389) (xy 140.44996 95.045229) (xy 140.235323 95.04373) (xy 140.024482 95.08395)
+ (xy 139.825469 95.164357) (xy 139.645864 95.281887) (xy 139.508618 95.416288) (xy 139.33409 95.298566) (xy 139.136219 95.215389)
+ (xy 138.92596 95.172229) (xy 138.711323 95.17073) (xy 138.500482 95.21095) (xy 138.301469 95.291357) (xy 138.121864 95.408887)
+ (xy 137.968507 95.559065) (xy 137.847241 95.736169) (xy 137.762685 95.933455) (xy 137.718058 96.143407) (xy 137.715061 96.358029)
+ (xy 136.962678 96.358029) (xy 136.981124 96.276841) (xy 136.984547 96.031679) (xy 136.942856 95.821124) (xy 136.861062 95.622677)
+ (xy 136.742281 95.443897) (xy 136.591036 95.291593) (xy 136.41309 95.171566) (xy 136.215219 95.088389) (xy 136.00496 95.045229)
+ (xy 135.790323 95.04373) (xy 135.579482 95.08395) (xy 135.380469 95.164357) (xy 135.200864 95.281887) (xy 135.047507 95.432065)
+ (xy 134.926241 95.609169) (xy 134.841685 95.806455) (xy 134.797058 96.016407) (xy 134.794936 96.168384) (xy 134.63509 96.060566)
+ (xy 134.443495 95.980027) (xy 134.444547 95.904679) (xy 134.402856 95.694124) (xy 134.321062 95.495677) (xy 134.202281 95.316897)
+ (xy 134.051036 95.164593) (xy 133.87309 95.044566) (xy 133.675219 94.961389) (xy 133.64544 94.955276) (xy 133.640856 94.932124)
+ (xy 133.559062 94.733677) (xy 133.440281 94.554897) (xy 133.289036 94.402593) (xy 133.11109 94.282566) (xy 132.913219 94.199389)
+ (xy 132.70296 94.156229) (xy 132.488323 94.15473) (xy 132.277482 94.19495) (xy 132.078469 94.275357) (xy 131.898864 94.392887)
+ (xy 131.745507 94.543065) (xy 131.685528 94.630661) (xy 131.556691 94.500922) (xy 131.399393 94.394822) (xy 131.224482 94.321297)
+ (xy 131.038621 94.283145) (xy 130.848889 94.28182) (xy 130.662513 94.317373) (xy 130.490999 94.38667) (xy 130.335482 94.321297)
+ (xy 130.149621 94.283145) (xy 129.959889 94.28182) (xy 129.773513 94.317373) (xy 129.601999 94.38667) (xy 129.446482 94.321297)
+ (xy 129.260621 94.283145) (xy 129.070889 94.28182) (xy 128.92 94.310604) (xy 128.92 94.102707) (xy 141.876895 94.102707)
+ (xy 141.920138 94.33832) (xy 142.008321 94.561047) (xy 142.138087 94.762403) (xy 142.304491 94.93472) (xy 142.501196 95.071433)
+ (xy 142.720709 95.167336) (xy 142.95467 95.218776) (xy 143.194166 95.223793) (xy 143.430075 95.182195) (xy 143.653412 95.095569)
+ (xy 143.855669 94.967212) (xy 144.029143 94.802015) (xy 144.167227 94.606269) (xy 144.26466 94.387431) (xy 144.317732 94.153835)
+ (xy 144.321552 93.880226) (xy 144.275024 93.645239) (xy 144.183739 93.423766) (xy 144.051175 93.224241) (xy 143.882381 93.054264)
+ (xy 143.683786 92.920311) (xy 143.462955 92.827482) (xy 143.228299 92.779314) (xy 142.988757 92.777642) (xy 142.753451 92.822528)
+ (xy 142.531346 92.912265) (xy 142.3309 93.043433) (xy 142.159749 93.211036) (xy 142.024412 93.408691) (xy 141.930044 93.628868)
+ (xy 141.880239 93.863182) (xy 141.876895 94.102707) (xy 128.92 94.102707) (xy 128.92 90.2) (xy 128.912864 90.12722)
+ (xy 128.906237 90.054405) (xy 128.905468 90.051792) (xy 128.905202 90.04908) (xy 128.896032 90.018707) (xy 129.713895 90.018707)
+ (xy 129.757138 90.25432) (xy 129.845321 90.477047) (xy 129.975087 90.678403) (xy 130.141491 90.85072) (xy 130.338196 90.987433)
+ (xy 130.557709 91.083336) (xy 130.79167 91.134776) (xy 131.031166 91.139793) (xy 131.131417 91.122116) (xy 131.113878 91.204632)
+ (xy 131.111229 91.39435) (xy 131.14548 91.580969) (xy 131.215326 91.757382) (xy 131.318108 91.916868) (xy 131.44991 92.053353)
+ (xy 131.493247 92.083473) (xy 131.492229 92.15635) (xy 131.52648 92.342969) (xy 131.596326 92.519382) (xy 131.699108 92.678868)
+ (xy 131.83091 92.815353) (xy 131.986712 92.923638) (xy 132.16058 92.999599) (xy 132.34589 93.040342) (xy 132.535585 93.044316)
+ (xy 132.722439 93.011368) (xy 132.899335 92.942755) (xy 133.059534 92.841089) (xy 133.196936 92.710243) (xy 133.306306 92.555201)
+ (xy 133.383479 92.381868) (xy 133.425515 92.196847) (xy 133.428541 91.980132) (xy 133.391688 91.794009) (xy 133.319385 91.618589)
+ (xy 133.214386 91.460553) (xy 133.080691 91.325922) (xy 133.046359 91.302765) (xy 133.047541 91.218132) (xy 133.010688 91.032009)
+ (xy 132.938385 90.856589) (xy 132.833386 90.698553) (xy 132.699691 90.563922) (xy 132.542393 90.457822) (xy 132.367482 90.384297)
+ (xy 132.181621 90.346145) (xy 132.082949 90.345456) (xy 132.10166 90.303431) (xy 132.154732 90.069835) (xy 132.158552 89.796226)
+ (xy 132.112024 89.561239) (xy 132.020739 89.339766) (xy 131.888175 89.140241) (xy 131.719381 88.970264) (xy 131.520786 88.836311)
+ (xy 131.299955 88.743482) (xy 131.221367 88.72735) (xy 134.667229 88.72735) (xy 134.70148 88.913969) (xy 134.771326 89.090382)
+ (xy 134.874108 89.249868) (xy 135.00591 89.386353) (xy 135.161712 89.494638) (xy 135.33558 89.570599) (xy 135.52089 89.611342)
+ (xy 135.710585 89.615316) (xy 135.897439 89.582368) (xy 136.074335 89.513755) (xy 136.082544 89.508545) (xy 136.22458 89.570599)
+ (xy 136.40989 89.611342) (xy 136.599585 89.615316) (xy 136.786439 89.582368) (xy 136.963335 89.513755) (xy 137.123534 89.412089)
+ (xy 137.260936 89.281243) (xy 137.370306 89.126201) (xy 137.447479 88.952868) (xy 137.489515 88.767847) (xy 137.492541 88.551132)
+ (xy 137.455688 88.365009) (xy 137.383385 88.189589) (xy 137.278386 88.031553) (xy 137.144691 87.896922) (xy 136.987393 87.790822)
+ (xy 136.812482 87.717297) (xy 136.626621 87.679145) (xy 136.436889 87.67782) (xy 136.250513 87.713373) (xy 136.078999 87.78267)
+ (xy 135.923482 87.717297) (xy 135.737621 87.679145) (xy 135.547889 87.67782) (xy 135.361513 87.713373) (xy 135.185592 87.78445)
+ (xy 135.026828 87.888342) (xy 134.891266 88.021094) (xy 134.784071 88.177648) (xy 134.709326 88.352042) (xy 134.669878 88.537632)
+ (xy 134.667229 88.72735) (xy 131.221367 88.72735) (xy 131.065299 88.695314) (xy 130.825757 88.693642) (xy 130.590451 88.738528)
+ (xy 130.368346 88.828265) (xy 130.1679 88.959433) (xy 129.996749 89.127036) (xy 129.861412 89.324691) (xy 129.767044 89.544868)
+ (xy 129.717239 89.779182) (xy 129.713895 90.018707) (xy 128.896032 90.018707) (xy 128.88407 89.979087) (xy 128.863422 89.908931)
+ (xy 128.862159 89.906516) (xy 128.861372 89.903908) (xy 128.827054 89.839364) (xy 128.793166 89.774543) (xy 128.791458 89.772419)
+ (xy 128.79018 89.770015) (xy 128.743966 89.713351) (xy 128.698145 89.656362) (xy 128.696059 89.654612) (xy 128.694336 89.652499)
+ (xy 128.637958 89.605859) (xy 128.581979 89.558887) (xy 128.579593 89.557575) (xy 128.577493 89.555838) (xy 128.527828 89.528984)
+ (xy 128.277 89.278156) (xy 128.277 88.257) (xy 128.269996 88.185568) (xy 128.263741 88.11407) (xy 128.262601 88.110144)
+ (xy 128.262202 88.10608) (xy 128.241468 88.037406) (xy 128.221434 87.968448) (xy 128.219553 87.964819) (xy 128.218372 87.960908)
+ (xy 128.184684 87.89755) (xy 128.151647 87.833815) (xy 128.149097 87.830621) (xy 128.14718 87.827015) (xy 128.101837 87.771419)
+ (xy 128.05704 87.715303) (xy 128.05143 87.709614) (xy 128.051336 87.709499) (xy 128.05123 87.709411) (xy 128.049422 87.707578)
+ (xy 125.650873 85.309029) (xy 133.651061 85.309029) (xy 133.689808 85.520145) (xy 133.768823 85.719714) (xy 133.885097 85.900136)
+ (xy 134.0342 86.054537) (xy 134.210454 86.177036) (xy 134.407144 86.262968) (xy 134.61678 86.309059) (xy 134.831375 86.313555)
+ (xy 135.042757 86.276282) (xy 135.242873 86.198662) (xy 135.291151 86.168024) (xy 135.3042 86.181537) (xy 135.480454 86.304036)
+ (xy 135.677144 86.389968) (xy 135.88678 86.436059) (xy 136.101375 86.440555) (xy 136.312757 86.403282) (xy 136.512873 86.325662)
+ (xy 136.58694 86.278658) (xy 136.623454 86.304036) (xy 136.820144 86.389968) (xy 137.02978 86.436059) (xy 137.244375 86.440555)
+ (xy 137.455757 86.403282) (xy 137.573577 86.357582) (xy 137.701712 86.446638) (xy 137.87558 86.522599) (xy 138.06089 86.563342)
+ (xy 138.250585 86.567316) (xy 138.437439 86.534368) (xy 138.614335 86.465755) (xy 138.622544 86.460545) (xy 138.76458 86.522599)
+ (xy 138.94989 86.563342) (xy 139.139585 86.567316) (xy 139.326439 86.534368) (xy 139.503335 86.465755) (xy 139.511544 86.460545)
+ (xy 139.65358 86.522599) (xy 139.83889 86.563342) (xy 140.028585 86.567316) (xy 140.215439 86.534368) (xy 140.392335 86.465755)
+ (xy 140.552534 86.364089) (xy 140.689936 86.233243) (xy 140.799306 86.078201) (xy 140.876479 85.904868) (xy 140.918515 85.719847)
+ (xy 140.921541 85.503132) (xy 140.884688 85.317009) (xy 140.812385 85.141589) (xy 140.707386 84.983553) (xy 140.652249 84.928029)
+ (xy 147.748061 84.928029) (xy 147.786808 85.139145) (xy 147.865823 85.338714) (xy 147.982097 85.519136) (xy 148.1312 85.673537)
+ (xy 148.307454 85.796036) (xy 148.504144 85.881968) (xy 148.71378 85.928059) (xy 148.928375 85.932555) (xy 149.139757 85.895282)
+ (xy 149.339873 85.817662) (xy 149.521102 85.702651) (xy 149.67654 85.554629) (xy 149.800267 85.379235) (xy 149.837629 85.295319)
+ (xy 149.944375 85.297555) (xy 150.155757 85.260282) (xy 150.355873 85.182662) (xy 150.537102 85.067651) (xy 150.69254 84.919629)
+ (xy 150.792212 84.778336) (xy 150.7982 84.784537) (xy 150.974454 84.907036) (xy 151.171144 84.992968) (xy 151.32207 85.026151)
+ (xy 151.342808 85.139145) (xy 151.421823 85.338714) (xy 151.538097 85.519136) (xy 151.6872 85.673537) (xy 151.863454 85.796036)
+ (xy 152.060144 85.881968) (xy 152.26978 85.928059) (xy 152.484375 85.932555) (xy 152.695757 85.895282) (xy 152.895873 85.817662)
+ (xy 153.077102 85.702651) (xy 153.23254 85.554629) (xy 153.356267 85.379235) (xy 153.44357 85.18315) (xy 153.491124 84.973841)
+ (xy 153.494547 84.728679) (xy 153.452856 84.518124) (xy 153.371062 84.319677) (xy 153.252281 84.140897) (xy 153.101036 83.988593)
+ (xy 152.92309 83.868566) (xy 152.725219 83.785389) (xy 152.589272 83.757483) (xy 152.563856 83.629124) (xy 152.482062 83.430677)
+ (xy 152.363281 83.251897) (xy 152.212036 83.099593) (xy 152.03409 82.979566) (xy 151.836219 82.896389) (xy 151.62596 82.853229)
+ (xy 151.411323 82.85173) (xy 151.200482 82.89195) (xy 151.001469 82.972357) (xy 150.821864 83.089887) (xy 150.668507 83.240065)
+ (xy 150.578637 83.371317) (xy 150.561036 83.353593) (xy 150.38309 83.233566) (xy 150.185219 83.150389) (xy 149.97496 83.107229)
+ (xy 149.760323 83.10573) (xy 149.549482 83.14595) (xy 149.350469 83.226357) (xy 149.170864 83.343887) (xy 149.017507 83.494065)
+ (xy 148.896241 83.671169) (xy 148.866063 83.74158) (xy 148.744323 83.74073) (xy 148.533482 83.78095) (xy 148.334469 83.861357)
+ (xy 148.154864 83.978887) (xy 148.001507 84.129065) (xy 147.880241 84.306169) (xy 147.795685 84.503455) (xy 147.751058 84.713407)
+ (xy 147.748061 84.928029) (xy 140.652249 84.928029) (xy 140.573691 84.848922) (xy 140.416393 84.742822) (xy 140.241482 84.669297)
+ (xy 140.055621 84.631145) (xy 139.865889 84.62982) (xy 139.679513 84.665373) (xy 139.507999 84.73467) (xy 139.352482 84.669297)
+ (xy 139.166621 84.631145) (xy 138.976889 84.62982) (xy 138.790513 84.665373) (xy 138.618999 84.73467) (xy 138.463482 84.669297)
+ (xy 138.277621 84.631145) (xy 138.087889 84.62982) (xy 138.008395 84.644984) (xy 137.861036 84.496593) (xy 137.68309 84.376566)
+ (xy 137.485219 84.293389) (xy 137.27496 84.250229) (xy 137.060323 84.24873) (xy 136.849482 84.28895) (xy 136.650469 84.369357)
+ (xy 136.589019 84.409569) (xy 136.54009 84.376566) (xy 136.342219 84.293389) (xy 136.13196 84.250229) (xy 135.917323 84.24873)
+ (xy 135.706482 84.28895) (xy 135.507469 84.369357) (xy 135.471303 84.393023) (xy 135.448036 84.369593) (xy 135.27009 84.249566)
+ (xy 135.072219 84.166389) (xy 134.86196 84.123229) (xy 134.647323 84.12173) (xy 134.436482 84.16195) (xy 134.237469 84.242357)
+ (xy 134.057864 84.359887) (xy 133.904507 84.510065) (xy 133.783241 84.687169) (xy 133.698685 84.884455) (xy 133.654058 85.094407)
+ (xy 133.651061 85.309029) (xy 125.650873 85.309029) (xy 125.644422 85.302578) (xy 125.588919 85.256987) (xy 125.533979 85.210887)
+ (xy 125.530401 85.20892) (xy 125.527242 85.206325) (xy 125.463983 85.172406) (xy 125.4413 85.159936) (xy 125.439281 85.156897)
+ (xy 125.288036 85.004593) (xy 125.11009 84.884566) (xy 124.912219 84.801389) (xy 124.70196 84.758229) (xy 124.487323 84.75673)
+ (xy 124.276482 84.79695) (xy 124.077469 84.877357) (xy 124.040768 84.901373) (xy 123.891036 84.750593) (xy 123.71309 84.630566)
+ (xy 123.515219 84.547389) (xy 123.30496 84.504229) (xy 123.090323 84.50273) (xy 122.879482 84.54295) (xy 122.680469 84.623357)
+ (xy 122.500864 84.740887) (xy 122.49221 84.749361) (xy 122.31609 84.630566) (xy 122.118219 84.547389) (xy 121.90796 84.504229)
+ (xy 121.693323 84.50273) (xy 121.482482 84.54295) (xy 121.283469 84.623357) (xy 121.103864 84.740887) (xy 121.031129 84.812114)
+ (xy 120.970036 84.750593) (xy 120.79209 84.630566) (xy 120.594219 84.547389) (xy 120.38396 84.504229) (xy 120.169323 84.50273)
+ (xy 119.958482 84.54295) (xy 119.759469 84.623357) (xy 119.579864 84.740887) (xy 119.426507 84.891065) (xy 119.305241 85.068169)
+ (xy 119.220685 85.265455) (xy 119.176058 85.475407) (xy 119.173061 85.690029) (xy 119.211808 85.901145) (xy 119.290823 86.100714)
+ (xy 119.407097 86.281136) (xy 119.492 86.369056) (xy 119.492 86.487) (xy 119.499009 86.558482) (xy 119.50526 86.62993)
+ (xy 119.506399 86.63385) (xy 119.506798 86.63792) (xy 119.527554 86.706668) (xy 119.547567 86.775553) (xy 119.549447 86.779179)
+ (xy 119.550628 86.783092) (xy 119.584325 86.846467) (xy 119.617353 86.910185) (xy 119.619903 86.913379) (xy 119.62182 86.916985)
+ (xy 119.667163 86.972581) (xy 119.71196 87.028697) (xy 119.71757 87.034386) (xy 119.717664 87.034501) (xy 119.71777 87.034589)
+ (xy 119.719578 87.036422) (xy 121.624578 88.941422) (xy 121.680081 88.987013) (xy 121.735021 89.033113) (xy 121.738599 89.03508)
+ (xy 121.741758 89.037675) (xy 121.805017 89.071594) (xy 121.867907 89.106168) (xy 121.871804 89.107404) (xy 121.875403 89.109334)
+ (xy 121.944029 89.130315) (xy 122.012453 89.152021) (xy 122.016512 89.152476) (xy 122.02042 89.153671) (xy 122.091828 89.160924)
+ (xy 122.163151 89.168924) (xy 122.17114 89.16898) (xy 122.171288 89.168995) (xy 122.171426 89.168982) (xy 122.174 89.169)
+ (xy 122.27267 89.169) (xy 122.246864 89.185887) (xy 122.093507 89.336065) (xy 121.972241 89.513169) (xy 121.887685 89.710455)
+ (xy 121.843058 89.920407) (xy 121.840061 90.135029) (xy 121.878808 90.346145) (xy 121.957823 90.545714) (xy 122.074097 90.726136)
+ (xy 122.2232 90.880537) (xy 122.399454 91.003036) (xy 122.596144 91.088968) (xy 122.80578 91.135059) (xy 123.020375 91.139555)
+ (xy 123.231757 91.102282) (xy 123.431873 91.024662) (xy 123.613102 90.909651) (xy 123.76854 90.761629) (xy 123.892267 90.586235)
+ (xy 123.97957 90.39015) (xy 124.027124 90.180841) (xy 124.030547 89.935679) (xy 123.988856 89.725124) (xy 123.962615 89.661459)
+ (xy 125.842 91.540844) (xy 125.842 92.068303) (xy 125.763482 92.035297) (xy 125.577621 91.997145) (xy 125.387889 91.99582)
+ (xy 125.201513 92.031373) (xy 125.025592 92.10245) (xy 124.866828 92.206342) (xy 124.769498 92.301654) (xy 124.501422 92.033578)
+ (xy 124.445919 91.987987) (xy 124.390979 91.941887) (xy 124.387401 91.93992) (xy 124.384242 91.937325) (xy 124.320983 91.903406)
+ (xy 124.258093 91.868832) (xy 124.254196 91.867596) (xy 124.250597 91.865666) (xy 124.181971 91.844685) (xy 124.113547 91.822979)
+ (xy 124.109488 91.822524) (xy 124.10558 91.821329) (xy 124.034172 91.814076) (xy 123.962849 91.806076) (xy 123.95486 91.80602)
+ (xy 123.954712 91.806005) (xy 123.954574 91.806018) (xy 123.952 91.806) (xy 121.666 91.806) (xy 121.594568 91.813004)
+ (xy 121.52307 91.819259) (xy 121.519144 91.820399) (xy 121.51508 91.820798) (xy 121.446406 91.841532) (xy 121.377448 91.861566)
+ (xy 121.373819 91.863447) (xy 121.369908 91.864628) (xy 121.30655 91.898316) (xy 121.242815 91.931353) (xy 121.239621 91.933903)
+ (xy 121.236015 91.93582) (xy 121.180419 91.981163) (xy 121.124303 92.02596) (xy 121.118614 92.03157) (xy 121.118499 92.031664)
+ (xy 121.118411 92.03177) (xy 121.116578 92.033578) (xy 120.354578 92.795578) (xy 120.308987 92.851081) (xy 120.262887 92.906021)
+ (xy 120.26092 92.909599) (xy 120.258325 92.912758) (xy 120.224406 92.976017) (xy 120.189832 93.038907) (xy 120.188596 93.042804)
+ (xy 120.186666 93.046403) (xy 120.165685 93.115029) (xy 120.143979 93.183453) (xy 120.143524 93.187512) (xy 120.142329 93.19142)
+ (xy 120.135076 93.262828) (xy 120.127076 93.334151) (xy 120.12702 93.34214) (xy 120.127005 93.342288) (xy 120.127018 93.342426)
+ (xy 120.127 93.345) (xy 120.127 94.996) (xy 120.134009 95.067482) (xy 120.14026 95.13893) (xy 120.141399 95.14285)
+ (xy 120.141798 95.14692) (xy 120.162554 95.215668) (xy 120.182567 95.284553) (xy 120.184447 95.288179) (xy 120.185628 95.292092)
+ (xy 120.219325 95.355467) (xy 120.252353 95.419185) (xy 120.254903 95.422379) (xy 120.25682 95.425985) (xy 120.302163 95.481581)
+ (xy 120.34696 95.537697) (xy 120.35257 95.543386) (xy 120.352664 95.543501) (xy 120.35277 95.543589) (xy 120.354578 95.545422)
+ (xy 121.624578 96.815422) (xy 121.680081 96.861013) (xy 121.735021 96.907113) (xy 121.738599 96.90908) (xy 121.741758 96.911675)
+ (xy 121.805017 96.945594) (xy 121.867907 96.980168) (xy 121.871804 96.981404) (xy 121.875403 96.983334) (xy 121.944029 97.004315)
+ (xy 122.012453 97.026021) (xy 122.016512 97.026476) (xy 122.02042 97.027671) (xy 122.091828 97.034924) (xy 122.163151 97.042924)
+ (xy 122.17114 97.04298) (xy 122.171288 97.042995) (xy 122.171426 97.042982) (xy 122.174 97.043) (xy 123.630156 97.043)
+ (xy 123.81 97.222844) (xy 123.81 101.024156) (xy 119.919743 104.914413) (xy 119.88205 104.724048) (xy 119.803581 104.533669)
+ (xy 119.689629 104.362158) (xy 119.544534 104.216046) (xy 119.373822 104.1009) (xy 119.183996 104.021104) (xy 118.982286 103.979699)
+ (xy 118.776375 103.978261) (xy 118.574107 104.016846) (xy 118.383185 104.093983) (xy 118.210882 104.206735) (xy 118.063761 104.350807)
+ (xy 117.947425 104.520711) (xy 117.866307 104.709975) (xy 117.823494 104.911391) (xy 117.820619 105.117287) (xy 117.857791 105.31982)
+ (xy 117.933594 105.511275) (xy 118.022 105.648455) (xy 118.022 113.792) (xy 118.02966 113.870124) (xy 118.036505 113.948358)
+ (xy 118.037752 113.952649) (xy 118.038188 113.957099) (xy 118.060887 114.03228) (xy 118.082787 114.107662) (xy 118.084844 114.11163)
+ (xy 118.086136 114.11591) (xy 118.123004 114.185249) (xy 118.15913 114.254943) (xy 118.161918 114.258436) (xy 118.164017 114.262383)
+ (xy 118.213649 114.323238) (xy 118.262626 114.38459) (xy 118.268763 114.390814) (xy 118.268865 114.390939) (xy 118.268981 114.391035)
+ (xy 118.270959 114.393041) (xy 118.53 114.652081) (xy 118.53 115.585257) (xy 118.430036 115.484593) (xy 118.25209 115.364566)
+ (xy 118.054219 115.281389) (xy 117.84396 115.238229) (xy 117.629323 115.23673) (xy 117.418482 115.27695) (xy 117.219469 115.357357)
+ (xy 117.039864 115.474887) (xy 116.886507 115.625065) (xy 116.765241 115.802169) (xy 116.680685 115.999455) (xy 116.636058 116.209407)
+ (xy 116.633061 116.424029) (xy 116.671808 116.635145) (xy 116.750823 116.834714) (xy 116.867097 117.015136) (xy 116.8885 117.0373)
+ (xy 116.8885 131.005873) (xy 116.867562 131.044597) (xy 116.829467 131.113892) (xy 116.828577 131.116699) (xy 116.827174 131.119293)
+ (xy 116.80974 131.175614) (xy 115.229677 132.755677) (xy 115.180387 132.815682) (xy 115.130492 132.875145) (xy 115.128364 132.879016)
+ (xy 115.125557 132.882433) (xy 115.088854 132.950884) (xy 115.051467 133.018892) (xy 115.050131 133.023105) (xy 115.048042 133.027)
+ (xy 115.025345 133.101237) (xy 115.001867 133.17525) (xy 115.001374 133.179643) (xy 115.000082 133.18387) (xy 114.992235 133.261121)
+ (xy 114.983582 133.338265) (xy 114.983522 133.346902) (xy 114.983505 133.347066) (xy 114.983519 133.347219) (xy 114.9835 133.35)
+ (xy 114.9835 135.768483) (xy 114.934954 135.80025) (xy 114.737112 135.993992) (xy 114.580668 136.222472) (xy 114.55462 136.283246)
+ (xy 114.536754 136.239899) (xy 114.383516 136.009257) (xy 114.188398 135.812771) (xy 113.958831 135.657926) (xy 113.70356 135.55062)
+ (xy 113.432308 135.494941) (xy 113.155408 135.493007) (xy 112.883405 135.544895) (xy 112.626661 135.648626) (xy 112.394954 135.80025)
+ (xy 112.197112 135.993992) (xy 112.040668 136.222472) (xy 112.01462 136.283246) (xy 111.996754 136.239899) (xy 111.843516 136.009257)
+ (xy 111.648398 135.812771) (xy 111.418831 135.657926) (xy 111.16356 135.55062) (xy 110.892308 135.494941) (xy 110.615408 135.493007)
+ (xy 110.343405 135.544895) (xy 110.086661 135.648626) (xy 109.854954 135.80025) (xy 109.657112 135.993992) (xy 109.500668 136.222472)
+ (xy 109.391583 136.476988) (xy 109.33401 136.747844) (xy 109.330144 137.024725) (xy 109.380131 137.297083) (xy 109.482068 137.554545)
+ (xy 109.632071 137.787304) (xy 109.824427 137.986495) (xy 110.051809 138.14453) (xy 110.11039 138.170123) (xy 109.991675 138.233578)
+ (xy 109.927942 138.482864) (xy 110.744 139.298922) (xy 111.560058 138.482864) (xy 111.496325 138.233578) (xy 111.377182 138.174965)
+ (xy 111.383719 138.172429) (xy 111.61752 138.024055) (xy 111.818049 137.833094) (xy 111.977667 137.606821) (xy 112.012124 137.52943)
+ (xy 112.022068 137.554545) (xy 112.172071 137.787304) (xy 112.364427 137.986495) (xy 112.591809 138.14453) (xy 112.660992 138.174755)
+ (xy 112.626661 138.188626) (xy 112.394954 138.34025) (xy 112.197112 138.533992) (xy 112.040668 138.762472) (xy 112.019542 138.811763)
+ (xy 111.956422 138.693675) (xy 111.707136 138.629942) (xy 110.891078 139.446) (xy 110.905221 139.460143) (xy 110.758143 139.607221)
+ (xy 110.744 139.593078) (xy 110.729858 139.607221) (xy 110.58278 139.460143) (xy 110.596922 139.446) (xy 109.780864 138.629942)
+ (xy 109.531578 138.693675) (xy 109.417469 138.925625) (xy 107.476 136.984156) (xy 107.476 115.298959) (xy 107.570709 115.340336)
+ (xy 107.80467 115.391776) (xy 108.044166 115.396793) (xy 108.280075 115.355195) (xy 108.503412 115.268569) (xy 108.705669 115.140212)
+ (xy 108.879143 114.975015) (xy 109.017227 114.779269) (xy 109.11466 114.560431) (xy 109.167732 114.326835) (xy 109.171552 114.053226)
+ (xy 109.125024 113.818239) (xy 109.033739 113.596766) (xy 108.901175 113.397241) (xy 108.732381 113.227264) (xy 108.533786 113.093311)
+ (xy 108.312955 113.000482) (xy 108.078299 112.952314) (xy 107.838757 112.950642) (xy 107.603451 112.995528) (xy 107.476 113.047022)
+ (xy 107.476 109.093) (xy 111.106855 109.093) (xy 111.106855 110.617) (xy 111.115109 110.72051) (xy 111.169478 110.896074)
+ (xy 111.270606 111.049541) (xy 111.410484 111.168758) (xy 111.578038 111.244286) (xy 111.76 111.270145) (xy 113.284 111.270145)
+ (xy 113.38751 111.261891) (xy 113.563074 111.207522) (xy 113.716541 111.106394) (xy 113.835758 110.966516) (xy 113.911286 110.798962)
+ (xy 113.925589 110.698316) (xy 113.950071 110.736304) (xy 114.142427 110.935495) (xy 114.369809 111.09353) (xy 114.623557 111.204389)
+ (xy 114.894005 111.263851) (xy 115.170851 111.26965) (xy 115.443552 111.221566) (xy 115.701719 111.121429) (xy 115.93552 110.973055)
+ (xy 116.136049 110.782094) (xy 116.295667 110.555821) (xy 116.408296 110.302853) (xy 116.469644 110.032827) (xy 116.47406 109.716546)
+ (xy 116.420276 109.444912) (xy 116.314754 109.188899) (xy 116.161516 108.958257) (xy 115.966398 108.761771) (xy 115.736831 108.606926)
+ (xy 115.48156 108.49962) (xy 115.210308 108.443941) (xy 114.933408 108.442007) (xy 114.661405 108.493895) (xy 114.404661 108.597626)
+ (xy 114.172954 108.74925) (xy 113.975112 108.942992) (xy 113.930391 109.008305) (xy 113.928891 108.98949) (xy 113.874522 108.813926)
+ (xy 113.773394 108.660459) (xy 113.633516 108.541242) (xy 113.465962 108.465714) (xy 113.284 108.439855) (xy 111.76 108.439855)
+ (xy 111.65649 108.448109) (xy 111.480926 108.502478) (xy 111.327459 108.603606) (xy 111.208242 108.743484) (xy 111.132714 108.911038)
+ (xy 111.106855 109.093) (xy 107.476 109.093) (xy 107.476 102) (xy 107.468991 101.928518) (xy 107.46274 101.85707)
+ (xy 107.461601 101.85315) (xy 107.461202 101.84908) (xy 107.440446 101.780332) (xy 107.420433 101.711447) (xy 107.418553 101.707821)
+ (xy 107.417372 101.703908) (xy 107.383675 101.640533) (xy 107.350647 101.576815) (xy 107.348097 101.573621) (xy 107.34618 101.570015)
+ (xy 107.300837 101.514419) (xy 107.25604 101.458303) (xy 107.25043 101.452614) (xy 107.250336 101.452499) (xy 107.25023 101.452411)
+ (xy 107.248422 101.450578) (xy 105.197422 99.399578) (xy 105.141919 99.353987) (xy 105.086979 99.307887) (xy 105.083401 99.30592)
+ (xy 105.080242 99.303325) (xy 105.016977 99.269403) (xy 104.954093 99.234832) (xy 104.950196 99.233596) (xy 104.946597 99.231666)
+ (xy 104.877971 99.210685) (xy 104.809547 99.188979) (xy 104.805488 99.188524) (xy 104.80158 99.187329) (xy 104.730172 99.180076)
+ (xy 104.658849 99.172076) (xy 104.65086 99.17202) (xy 104.650712 99.172005) (xy 104.650574 99.172018) (xy 104.648 99.172)
+ (xy 103.505 99.172) (xy 103.433568 99.179004) (xy 103.36207 99.185259) (xy 103.358144 99.186399) (xy 103.35408 99.186798)
+ (xy 103.285406 99.207532) (xy 103.216448 99.227566) (xy 103.212819 99.229447) (xy 103.208908 99.230628) (xy 103.14555 99.264316)
+ (xy 103.081815 99.297353) (xy 103.078621 99.299903) (xy 103.075015 99.30182) (xy 103.019419 99.347163) (xy 102.963303 99.39196)
+ (xy 102.957614 99.39757) (xy 102.957499 99.397664) (xy 102.957411 99.39777) (xy 102.955578 99.399578) (xy 102.732143 99.623013)
+ (xy 102.559482 99.65595) (xy 102.360469 99.736357) (xy 102.180864 99.853887) (xy 102.027507 100.004065) (xy 101.906241 100.181169)
+ (xy 101.821685 100.378455) (xy 101.777058 100.588407) (xy 101.774061 100.803029) (xy 99.50092 100.803029) (xy 99.515732 100.737835)
+ (xy 99.519552 100.464226) (xy 99.473024 100.229239) (xy 99.381739 100.007766) (xy 99.249175 99.808241) (xy 99.080381 99.638264)
+ (xy 98.881786 99.504311) (xy 98.660955 99.411482) (xy 98.426299 99.363314) (xy 98.186757 99.361642) (xy 97.951451 99.406528)
+ (xy 97.729346 99.496265) (xy 97.5289 99.627433) (xy 97.357749 99.795036) (xy 97.222412 99.992691) (xy 97.128044 100.212868)
+ (xy 97.078239 100.447182) (xy 97.074895 100.686707) (xy 90.442145 100.686707) (xy 90.442145 99.441) (xy 90.433891 99.33749)
+ (xy 90.379522 99.161926) (xy 90.278394 99.008459) (xy 90.138516 98.889242) (xy 89.970962 98.813714) (xy 89.789 98.787855)
+ (xy 88.011 98.787855) (xy 87.90749 98.796109) (xy 87.731926 98.850478) (xy 87.578459 98.951606) (xy 87.459242 99.091484)
+ (xy 87.383714 99.259038) (xy 87.357855 99.441) (xy 71.9605 99.441) (xy 71.9605 98.6935) (xy 111.102 98.6935)
+ (xy 111.102 99.251808) (xy 111.127287 99.378932) (xy 111.176888 99.49868) (xy 111.248898 99.606451) (xy 111.34055 99.698102)
+ (xy 111.44832 99.770112) (xy 111.568069 99.819713) (xy 111.695193 99.845) (xy 112.2535 99.845) (xy 112.418 99.6805)
+ (xy 112.418 98.529) (xy 111.2665 98.529) (xy 111.102 98.6935) (xy 71.9605 98.6935) (xy 71.9605 96.303652)
+ (xy 87.993426 96.303652) (xy 88.072482 96.565917) (xy 88.345105 96.702072) (xy 88.639053 96.782426) (xy 88.943028 96.803889)
+ (xy 89.24535 96.765637) (xy 89.534401 96.669141) (xy 89.727518 96.565917) (xy 89.806574 96.303652) (xy 88.9 95.397078)
+ (xy 87.993426 96.303652) (xy 71.9605 96.303652) (xy 71.9605 95.293028) (xy 87.346111 95.293028) (xy 87.384363 95.59535)
+ (xy 87.480859 95.884401) (xy 87.584083 96.077518) (xy 87.846348 96.156574) (xy 88.752922 95.25) (xy 89.047078 95.25)
+ (xy 89.953652 96.156574) (xy 90.215917 96.077518) (xy 90.352072 95.804895) (xy 90.432426 95.510947) (xy 90.453889 95.206972)
+ (xy 90.427196 94.996) (xy 96.374855 94.996) (xy 96.374855 96.52) (xy 96.383109 96.62351) (xy 96.437478 96.799074)
+ (xy 96.538606 96.952541) (xy 96.678484 97.071758) (xy 96.846038 97.147286) (xy 97.028 97.173145) (xy 98.552 97.173145)
+ (xy 98.65551 97.164891) (xy 98.831074 97.110522) (xy 98.984541 97.009394) (xy 99.103758 96.869516) (xy 99.179286 96.701962)
+ (xy 99.205145 96.52) (xy 99.205145 95.860707) (xy 99.233895 95.860707) (xy 99.277138 96.09632) (xy 99.365321 96.319047)
+ (xy 99.495087 96.520403) (xy 99.661491 96.69272) (xy 99.858196 96.829433) (xy 100.077709 96.925336) (xy 100.31167 96.976776)
+ (xy 100.551166 96.981793) (xy 100.787075 96.940195) (xy 101.010412 96.853569) (xy 101.212669 96.725212) (xy 101.386143 96.560015)
+ (xy 101.524227 96.364269) (xy 101.618067 96.1535) (xy 111.102 96.1535) (xy 111.102 96.711808) (xy 111.127287 96.838932)
+ (xy 111.176888 96.95868) (xy 111.248898 97.066451) (xy 111.337448 97.155) (xy 111.248898 97.243549) (xy 111.176888 97.35132)
+ (xy 111.127287 97.471068) (xy 111.102 97.598192) (xy 111.102 98.1565) (xy 111.2665 98.321) (xy 112.418 98.321)
+ (xy 112.418 97.1695) (xy 112.4035 97.155) (xy 112.418 97.1405) (xy 112.418 95.989) (xy 111.2665 95.989)
+ (xy 111.102 96.1535) (xy 101.618067 96.1535) (xy 101.62166 96.145431) (xy 101.674732 95.911835) (xy 101.678552 95.638226)
+ (xy 101.632024 95.403239) (xy 101.540739 95.181766) (xy 101.408175 94.982241) (xy 101.239381 94.812264) (xy 101.040786 94.678311)
+ (xy 100.819955 94.585482) (xy 100.585299 94.537314) (xy 100.345757 94.535642) (xy 100.110451 94.580528) (xy 99.888346 94.670265)
+ (xy 99.6879 94.801433) (xy 99.516749 94.969036) (xy 99.381412 95.166691) (xy 99.287044 95.386868) (xy 99.237239 95.621182)
+ (xy 99.233895 95.860707) (xy 99.205145 95.860707) (xy 99.205145 94.996) (xy 99.196891 94.89249) (xy 99.142522 94.716926)
+ (xy 99.041394 94.563459) (xy 98.901516 94.444242) (xy 98.733962 94.368714) (xy 98.634361 94.35456) (xy 98.66352 94.336055)
+ (xy 98.864049 94.145094) (xy 99.023667 93.918821) (xy 99.136296 93.665853) (xy 99.14819 93.6135) (xy 111.102 93.6135)
+ (xy 111.102 94.171808) (xy 111.127287 94.298932) (xy 111.176888 94.41868) (xy 111.248898 94.526451) (xy 111.337448 94.615)
+ (xy 111.248898 94.703549) (xy 111.176888 94.81132) (xy 111.127287 94.931068) (xy 111.102 95.058192) (xy 111.102 95.6165)
+ (xy 111.2665 95.781) (xy 112.418 95.781) (xy 112.418 94.6295) (xy 112.4035 94.615) (xy 112.418 94.6005)
+ (xy 112.418 93.449) (xy 111.2665 93.449) (xy 111.102 93.6135) (xy 99.14819 93.6135) (xy 99.197644 93.395827)
+ (xy 99.20206 93.079546) (xy 99.148276 92.807912) (xy 99.042754 92.551899) (xy 99.02036 92.518192) (xy 111.102 92.518192)
+ (xy 111.102 93.0765) (xy 111.2665 93.241) (xy 112.418 93.241) (xy 112.418 92.0895) (xy 112.626 92.0895)
+ (xy 112.626 93.241) (xy 112.646 93.241) (xy 112.646 93.449) (xy 112.626 93.449) (xy 112.626 94.6005)
+ (xy 112.6405 94.615) (xy 112.626 94.6295) (xy 112.626 95.781) (xy 112.646 95.781) (xy 112.646 95.989)
+ (xy 112.626 95.989) (xy 112.626 97.1405) (xy 112.6405 97.155) (xy 112.626 97.1695) (xy 112.626 98.321)
+ (xy 112.646 98.321) (xy 112.646 98.529) (xy 112.626 98.529) (xy 112.626 99.6805) (xy 112.7905 99.845)
+ (xy 113.348807 99.845) (xy 113.475931 99.819713) (xy 113.59568 99.770112) (xy 113.70345 99.698102) (xy 113.795102 99.606451)
+ (xy 113.867112 99.49868) (xy 113.916713 99.378932) (xy 113.93562 99.283881) (xy 113.950071 99.306304) (xy 114.142427 99.505495)
+ (xy 114.369809 99.66353) (xy 114.623557 99.774389) (xy 114.894005 99.833851) (xy 115.170851 99.83965) (xy 115.443552 99.791566)
+ (xy 115.701719 99.691429) (xy 115.93552 99.543055) (xy 116.136049 99.352094) (xy 116.295667 99.125821) (xy 116.408296 98.872853)
+ (xy 116.469644 98.602827) (xy 116.470692 98.527707) (xy 120.442895 98.527707) (xy 120.486138 98.76332) (xy 120.574321 98.986047)
+ (xy 120.704087 99.187403) (xy 120.870491 99.35972) (xy 121.067196 99.496433) (xy 121.286709 99.592336) (xy 121.52067 99.643776)
+ (xy 121.760166 99.648793) (xy 121.996075 99.607195) (xy 122.219412 99.520569) (xy 122.421669 99.392212) (xy 122.595143 99.227015)
+ (xy 122.733227 99.031269) (xy 122.83066 98.812431) (xy 122.883732 98.578835) (xy 122.887552 98.305226) (xy 122.841024 98.070239)
+ (xy 122.749739 97.848766) (xy 122.617175 97.649241) (xy 122.448381 97.479264) (xy 122.249786 97.345311) (xy 122.028955 97.252482)
+ (xy 121.794299 97.204314) (xy 121.554757 97.202642) (xy 121.319451 97.247528) (xy 121.097346 97.337265) (xy 120.8969 97.468433)
+ (xy 120.725749 97.636036) (xy 120.590412 97.833691) (xy 120.496044 98.053868) (xy 120.446239 98.288182) (xy 120.442895 98.527707)
+ (xy 116.470692 98.527707) (xy 116.47406 98.286546) (xy 116.420276 98.014912) (xy 116.314754 97.758899) (xy 116.161516 97.528257)
+ (xy 115.966398 97.331771) (xy 115.736831 97.176926) (xy 115.688434 97.156582) (xy 115.701719 97.151429) (xy 115.93552 97.003055)
+ (xy 116.136049 96.812094) (xy 116.295667 96.585821) (xy 116.408296 96.332853) (xy 116.469644 96.062827) (xy 116.47406 95.746546)
+ (xy 116.420276 95.474912) (xy 116.314754 95.218899) (xy 116.161516 94.988257) (xy 115.966398 94.791771) (xy 115.736831 94.636926)
+ (xy 115.688434 94.616582) (xy 115.701719 94.611429) (xy 115.93552 94.463055) (xy 116.136049 94.272094) (xy 116.295667 94.045821)
+ (xy 116.408296 93.792853) (xy 116.469644 93.522827) (xy 116.47406 93.206546) (xy 116.420276 92.934912) (xy 116.314754 92.678899)
+ (xy 116.161516 92.448257) (xy 115.966398 92.251771) (xy 115.736831 92.096926) (xy 115.48156 91.98962) (xy 115.210308 91.933941)
+ (xy 114.933408 91.932007) (xy 114.661405 91.983895) (xy 114.404661 92.087626) (xy 114.172954 92.23925) (xy 113.975112 92.432992)
+ (xy 113.936321 92.489644) (xy 113.916713 92.391068) (xy 113.867112 92.27132) (xy 113.795102 92.163549) (xy 113.70345 92.071898)
+ (xy 113.59568 91.999888) (xy 113.475931 91.950287) (xy 113.348807 91.925) (xy 112.7905 91.925) (xy 112.626 92.0895)
+ (xy 112.418 92.0895) (xy 112.2535 91.925) (xy 111.695193 91.925) (xy 111.568069 91.950287) (xy 111.44832 91.999888)
+ (xy 111.34055 92.071898) (xy 111.248898 92.163549) (xy 111.176888 92.27132) (xy 111.127287 92.391068) (xy 111.102 92.518192)
+ (xy 99.02036 92.518192) (xy 98.889516 92.321257) (xy 98.694398 92.124771) (xy 98.464831 91.969926) (xy 98.20956 91.86262)
+ (xy 97.938308 91.806941) (xy 97.661408 91.805007) (xy 97.389405 91.856895) (xy 97.132661 91.960626) (xy 96.900954 92.11225)
+ (xy 96.703112 92.305992) (xy 96.546668 92.534472) (xy 96.437583 92.788988) (xy 96.38001 93.059844) (xy 96.376144 93.336725)
+ (xy 96.426131 93.609083) (xy 96.528068 93.866545) (xy 96.678071 94.099304) (xy 96.870427 94.298495) (xy 96.943901 94.349561)
+ (xy 96.92449 94.351109) (xy 96.748926 94.405478) (xy 96.595459 94.506606) (xy 96.476242 94.646484) (xy 96.400714 94.814038)
+ (xy 96.374855 94.996) (xy 90.427196 94.996) (xy 90.415637 94.90465) (xy 90.319141 94.615599) (xy 90.215917 94.422482)
+ (xy 89.953652 94.343426) (xy 89.047078 95.25) (xy 88.752922 95.25) (xy 87.846348 94.343426) (xy 87.584083 94.422482)
+ (xy 87.447928 94.695105) (xy 87.367574 94.989053) (xy 87.346111 95.293028) (xy 71.9605 95.293028) (xy 71.9605 94.196348)
+ (xy 87.993426 94.196348) (xy 88.9 95.102922) (xy 89.806574 94.196348) (xy 89.727518 93.934083) (xy 89.454895 93.797928)
+ (xy 89.160947 93.717574) (xy 88.856972 93.696111) (xy 88.55465 93.734363) (xy 88.265599 93.830859) (xy 88.072482 93.934083)
+ (xy 87.993426 94.196348) (xy 71.9605 94.196348) (xy 71.9605 86.741) (xy 87.357855 86.741) (xy 87.357855 88.519)
+ (xy 87.366109 88.62251) (xy 87.420478 88.798074) (xy 87.521606 88.951541) (xy 87.661484 89.070758) (xy 87.829038 89.146286)
+ (xy 88.011 89.172145) (xy 89.789 89.172145) (xy 89.89251 89.163891) (xy 90.068074 89.109522) (xy 90.221541 89.008394)
+ (xy 90.340758 88.868516) (xy 90.416286 88.700962) (xy 90.442145 88.519) (xy 90.442145 87.859707) (xy 95.931895 87.859707)
+ (xy 95.975138 88.09532) (xy 96.063321 88.318047) (xy 96.193087 88.519403) (xy 96.359491 88.69172) (xy 96.556196 88.828433)
+ (xy 96.775709 88.924336) (xy 97.00967 88.975776) (xy 97.249166 88.980793) (xy 97.485075 88.939195) (xy 97.708412 88.852569)
+ (xy 97.910669 88.724212) (xy 98.084143 88.559015) (xy 98.222227 88.363269) (xy 98.31966 88.144431) (xy 98.372732 87.910835)
+ (xy 98.376552 87.637226) (xy 98.330024 87.402239) (xy 98.238739 87.180766) (xy 98.106175 86.981241) (xy 97.937381 86.811264)
+ (xy 97.738786 86.677311) (xy 97.517955 86.584482) (xy 97.283299 86.536314) (xy 97.043757 86.534642) (xy 96.808451 86.579528)
+ (xy 96.586346 86.669265) (xy 96.3859 86.800433) (xy 96.214749 86.968036) (xy 96.079412 87.165691) (xy 95.985044 87.385868)
+ (xy 95.935239 87.620182) (xy 95.931895 87.859707) (xy 90.442145 87.859707) (xy 90.442145 86.741) (xy 90.433891 86.63749)
+ (xy 90.379522 86.461926) (xy 90.278394 86.308459) (xy 90.138516 86.189242) (xy 89.970962 86.113714) (xy 89.789 86.087855)
+ (xy 88.011 86.087855) (xy 87.90749 86.096109) (xy 87.731926 86.150478) (xy 87.578459 86.251606) (xy 87.459242 86.391484)
+ (xy 87.383714 86.559038) (xy 87.357855 86.741) (xy 71.9605 86.741) (xy 71.9605 84.684707) (xy 101.900895 84.684707)
+ (xy 101.944138 84.92032) (xy 102.032321 85.143047) (xy 102.162087 85.344403) (xy 102.328491 85.51672) (xy 102.525196 85.653433)
+ (xy 102.744709 85.749336) (xy 102.97867 85.800776) (xy 103.218166 85.805793) (xy 103.454075 85.764195) (xy 103.555126 85.725)
+ (xy 110.344855 85.725) (xy 110.344855 87.249) (xy 110.353109 87.35251) (xy 110.407478 87.528074) (xy 110.508606 87.681541)
+ (xy 110.648484 87.800758) (xy 110.816038 87.876286) (xy 110.917608 87.89072) (xy 110.870954 87.92125) (xy 110.673112 88.114992)
+ (xy 110.516668 88.343472) (xy 110.407583 88.597988) (xy 110.35001 88.868844) (xy 110.346144 89.145725) (xy 110.396131 89.418083)
+ (xy 110.498068 89.675545) (xy 110.648071 89.908304) (xy 110.840427 90.107495) (xy 111.067809 90.26553) (xy 111.321557 90.376389)
+ (xy 111.592005 90.435851) (xy 111.868851 90.44165) (xy 112.141552 90.393566) (xy 112.399719 90.293429) (xy 112.63352 90.145055)
+ (xy 112.834049 89.954094) (xy 112.993667 89.727821) (xy 113.028124 89.65043) (xy 113.038068 89.675545) (xy 113.188071 89.908304)
+ (xy 113.380427 90.107495) (xy 113.607809 90.26553) (xy 113.861557 90.376389) (xy 114.132005 90.435851) (xy 114.408851 90.44165)
+ (xy 114.681552 90.393566) (xy 114.939719 90.293429) (xy 115.17352 90.145055) (xy 115.374049 89.954094) (xy 115.533667 89.727821)
+ (xy 115.646296 89.474853) (xy 115.707644 89.204827) (xy 115.71206 88.888546) (xy 115.658276 88.616912) (xy 115.552754 88.360899)
+ (xy 115.399516 88.130257) (xy 115.204398 87.933771) (xy 114.974831 87.778926) (xy 114.926434 87.758582) (xy 114.939719 87.753429)
+ (xy 115.17352 87.605055) (xy 115.374049 87.414094) (xy 115.533667 87.187821) (xy 115.646296 86.934853) (xy 115.707644 86.664827)
+ (xy 115.71206 86.348546) (xy 115.658276 86.076912) (xy 115.552754 85.820899) (xy 115.399516 85.590257) (xy 115.204398 85.393771)
+ (xy 114.974831 85.238926) (xy 114.71956 85.13162) (xy 114.448308 85.075941) (xy 114.171408 85.074007) (xy 113.899405 85.125895)
+ (xy 113.642661 85.229626) (xy 113.410954 85.38125) (xy 113.213112 85.574992) (xy 113.168391 85.640305) (xy 113.166891 85.62149)
+ (xy 113.112522 85.445926) (xy 113.011394 85.292459) (xy 112.871516 85.173242) (xy 112.703962 85.097714) (xy 112.522 85.071855)
+ (xy 110.998 85.071855) (xy 110.89449 85.080109) (xy 110.718926 85.134478) (xy 110.565459 85.235606) (xy 110.446242 85.375484)
+ (xy 110.370714 85.543038) (xy 110.344855 85.725) (xy 103.555126 85.725) (xy 103.677412 85.677569) (xy 103.879669 85.549212)
+ (xy 104.053143 85.384015) (xy 104.191227 85.188269) (xy 104.28866 84.969431) (xy 104.341732 84.735835) (xy 104.345552 84.462226)
+ (xy 104.299024 84.227239) (xy 104.207739 84.005766) (xy 104.075175 83.806241) (xy 103.906381 83.636264) (xy 103.707786 83.502311)
+ (xy 103.486955 83.409482) (xy 103.252299 83.361314) (xy 103.012757 83.359642) (xy 102.777451 83.404528) (xy 102.555346 83.494265)
+ (xy 102.3549 83.625433) (xy 102.183749 83.793036) (xy 102.048412 83.990691) (xy 101.954044 84.210868) (xy 101.904239 84.445182)
+ (xy 101.900895 84.684707) (xy 71.9605 84.684707) (xy 71.9605 83.603652) (xy 87.993426 83.603652) (xy 88.072482 83.865917)
+ (xy 88.345105 84.002072) (xy 88.639053 84.082426) (xy 88.943028 84.103889) (xy 89.24535 84.065637) (xy 89.534401 83.969141)
+ (xy 89.727518 83.865917) (xy 89.806574 83.603652) (xy 88.9 82.697078) (xy 87.993426 83.603652) (xy 71.9605 83.603652)
+ (xy 71.9605 82.593028) (xy 87.346111 82.593028) (xy 87.384363 82.89535) (xy 87.480859 83.184401) (xy 87.584083 83.377518)
+ (xy 87.846348 83.456574) (xy 88.752922 82.55) (xy 89.047078 82.55) (xy 89.953652 83.456574) (xy 90.215917 83.377518)
+ (xy 90.26077 83.287707) (xy 106.599895 83.287707) (xy 106.643138 83.52332) (xy 106.731321 83.746047) (xy 106.861087 83.947403)
+ (xy 107.027491 84.11972) (xy 107.224196 84.256433) (xy 107.443709 84.352336) (xy 107.67767 84.403776) (xy 107.917166 84.408793)
+ (xy 108.153075 84.367195) (xy 108.376412 84.280569) (xy 108.578669 84.152212) (xy 108.752143 83.987015) (xy 108.890227 83.791269)
+ (xy 108.98766 83.572431) (xy 109.040732 83.338835) (xy 109.044552 83.065226) (xy 108.998024 82.830239) (xy 108.92045 82.642029)
+ (xy 133.270061 82.642029) (xy 133.308808 82.853145) (xy 133.387823 83.052714) (xy 133.504097 83.233136) (xy 133.6532 83.387537)
+ (xy 133.829454 83.510036) (xy 134.026144 83.595968) (xy 134.23578 83.642059) (xy 134.450375 83.646555) (xy 134.661757 83.609282)
+ (xy 134.861873 83.531662) (xy 135.043102 83.416651) (xy 135.060329 83.400246) (xy 135.070809 83.40753) (xy 135.324557 83.518389)
+ (xy 135.595005 83.577851) (xy 135.871851 83.58365) (xy 136.144552 83.535566) (xy 136.402719 83.435429) (xy 136.63652 83.287055)
+ (xy 136.837049 83.096094) (xy 136.996667 82.869821) (xy 137.031124 82.79243) (xy 137.041068 82.817545) (xy 137.191071 83.050304)
+ (xy 137.383427 83.249495) (xy 137.610809 83.40753) (xy 137.864557 83.518389) (xy 138.135005 83.577851) (xy 138.411851 83.58365)
+ (xy 138.684552 83.535566) (xy 138.942719 83.435429) (xy 139.17652 83.287055) (xy 139.377049 83.096094) (xy 139.463431 82.973639)
+ (xy 139.4952 83.006537) (xy 139.671454 83.129036) (xy 139.868144 83.214968) (xy 140.07778 83.261059) (xy 140.292375 83.265555)
+ (xy 140.503757 83.228282) (xy 140.703873 83.150662) (xy 140.885102 83.035651) (xy 141.04054 82.887629) (xy 141.164267 82.712235)
+ (xy 141.25157 82.51615) (xy 141.299124 82.306841) (xy 141.302547 82.061679) (xy 141.260856 81.851124) (xy 141.179062 81.652677)
+ (xy 141.060281 81.473897) (xy 140.909036 81.321593) (xy 140.73109 81.201566) (xy 140.533219 81.118389) (xy 140.32296 81.075229)
+ (xy 140.108323 81.07373) (xy 139.897482 81.11395) (xy 139.698469 81.194357) (xy 139.518864 81.311887) (xy 139.464328 81.365292)
+ (xy 139.402516 81.272257) (xy 139.207398 81.075771) (xy 138.977831 80.920926) (xy 138.929434 80.900582) (xy 138.942719 80.895429)
+ (xy 139.17652 80.747055) (xy 139.377049 80.556094) (xy 139.536667 80.329821) (xy 139.649296 80.076853) (xy 139.710644 79.806827)
+ (xy 139.71506 79.490546) (xy 139.661276 79.218912) (xy 139.555754 78.962899) (xy 139.402516 78.732257) (xy 139.207398 78.535771)
+ (xy 138.977831 78.380926) (xy 138.929434 78.360582) (xy 138.942719 78.355429) (xy 139.17652 78.207055) (xy 139.377049 78.016094)
+ (xy 139.536667 77.789821) (xy 139.649296 77.536853) (xy 139.710644 77.266827) (xy 139.71506 76.950546) (xy 139.661276 76.678912)
+ (xy 139.555754 76.422899) (xy 139.402516 76.192257) (xy 139.207398 75.995771) (xy 138.977831 75.840926) (xy 138.929434 75.820582)
+ (xy 138.942719 75.815429) (xy 139.17652 75.667055) (xy 139.377049 75.476094) (xy 139.536667 75.249821) (xy 139.649296 74.996853)
+ (xy 139.698857 74.778707) (xy 144.826895 74.778707) (xy 144.870138 75.01432) (xy 144.958321 75.237047) (xy 145.088087 75.438403)
+ (xy 145.254491 75.61072) (xy 145.451196 75.747433) (xy 145.670709 75.843336) (xy 145.90467 75.894776) (xy 146.144166 75.899793)
+ (xy 146.380075 75.858195) (xy 146.603412 75.771569) (xy 146.805669 75.643212) (xy 146.979143 75.478015) (xy 147.117227 75.282269)
+ (xy 147.21466 75.063431) (xy 147.267732 74.829835) (xy 147.268744 74.75735) (xy 157.273229 74.75735) (xy 157.30748 74.943969)
+ (xy 157.377326 75.120382) (xy 157.480108 75.279868) (xy 157.61191 75.416353) (xy 157.767712 75.524638) (xy 157.94158 75.600599)
+ (xy 158.12689 75.641342) (xy 158.316585 75.645316) (xy 158.503439 75.612368) (xy 158.680335 75.543755) (xy 158.840534 75.442089)
+ (xy 158.977936 75.311243) (xy 159.087306 75.156201) (xy 159.164479 74.982868) (xy 159.206515 74.797847) (xy 159.209541 74.581132)
+ (xy 159.172688 74.395009) (xy 159.100385 74.219589) (xy 158.995386 74.061553) (xy 158.861691 73.926922) (xy 158.704393 73.820822)
+ (xy 158.529482 73.747297) (xy 158.343621 73.709145) (xy 158.153889 73.70782) (xy 157.967513 73.743373) (xy 157.791592 73.81445)
+ (xy 157.632828 73.918342) (xy 157.497266 74.051094) (xy 157.390071 74.207648) (xy 157.315326 74.382042) (xy 157.275878 74.567632)
+ (xy 157.273229 74.75735) (xy 147.268744 74.75735) (xy 147.271552 74.556226) (xy 147.225024 74.321239) (xy 147.133739 74.099766)
+ (xy 147.001175 73.900241) (xy 146.832381 73.730264) (xy 146.633786 73.596311) (xy 146.412955 73.503482) (xy 146.178299 73.455314)
+ (xy 145.938757 73.453642) (xy 145.703451 73.498528) (xy 145.481346 73.588265) (xy 145.2809 73.719433) (xy 145.109749 73.887036)
+ (xy 144.974412 74.084691) (xy 144.880044 74.304868) (xy 144.830239 74.539182) (xy 144.826895 74.778707) (xy 139.698857 74.778707)
+ (xy 139.710644 74.726827) (xy 139.71506 74.410546) (xy 139.661276 74.138912) (xy 139.555754 73.882899) (xy 139.402516 73.652257)
+ (xy 139.207398 73.455771) (xy 138.977831 73.300926) (xy 138.72256 73.19362) (xy 138.451308 73.137941) (xy 138.174408 73.136007)
+ (xy 137.902405 73.187895) (xy 137.645661 73.291626) (xy 137.413954 73.44325) (xy 137.216112 73.636992) (xy 137.171391 73.702305)
+ (xy 137.169891 73.68349) (xy 137.115522 73.507926) (xy 137.014394 73.354459) (xy 136.874516 73.235242) (xy 136.706962 73.159714)
+ (xy 136.525 73.133855) (xy 135.001 73.133855) (xy 134.89749 73.142109) (xy 134.721926 73.196478) (xy 134.568459 73.297606)
+ (xy 134.449242 73.437484) (xy 134.373714 73.605038) (xy 134.347855 73.787) (xy 134.347855 75.311) (xy 134.356109 75.41451)
+ (xy 134.410478 75.590074) (xy 134.511606 75.743541) (xy 134.651484 75.862758) (xy 134.819038 75.938286) (xy 134.920608 75.95272)
+ (xy 134.873954 75.98325) (xy 134.676112 76.176992) (xy 134.519668 76.405472) (xy 134.410583 76.659988) (xy 134.35301 76.930844)
+ (xy 134.349144 77.207725) (xy 134.399131 77.480083) (xy 134.501068 77.737545) (xy 134.651071 77.970304) (xy 134.843427 78.169495)
+ (xy 135.070809 78.32753) (xy 135.139992 78.357755) (xy 135.105661 78.371626) (xy 134.873954 78.52325) (xy 134.676112 78.716992)
+ (xy 134.519668 78.945472) (xy 134.410583 79.199988) (xy 134.35301 79.470844) (xy 134.349144 79.747725) (xy 134.399131 80.020083)
+ (xy 134.501068 80.277545) (xy 134.651071 80.510304) (xy 134.843427 80.709495) (xy 135.070809 80.86753) (xy 135.139992 80.897755)
+ (xy 135.105661 80.911626) (xy 134.873954 81.06325) (xy 134.676112 81.256992) (xy 134.532454 81.466799) (xy 134.48096 81.456229)
+ (xy 134.266323 81.45473) (xy 134.055482 81.49495) (xy 133.856469 81.575357) (xy 133.676864 81.692887) (xy 133.523507 81.843065)
+ (xy 133.402241 82.020169) (xy 133.317685 82.217455) (xy 133.273058 82.427407) (xy 133.270061 82.642029) (xy 108.92045 82.642029)
+ (xy 108.906739 82.608766) (xy 108.774175 82.409241) (xy 108.605381 82.239264) (xy 108.406786 82.105311) (xy 108.185955 82.012482)
+ (xy 107.951299 81.964314) (xy 107.711757 81.962642) (xy 107.476451 82.007528) (xy 107.254346 82.097265) (xy 107.0539 82.228433)
+ (xy 106.882749 82.396036) (xy 106.747412 82.593691) (xy 106.653044 82.813868) (xy 106.603239 83.048182) (xy 106.599895 83.287707)
+ (xy 90.26077 83.287707) (xy 90.352072 83.104895) (xy 90.432426 82.810947) (xy 90.453889 82.506972) (xy 90.415637 82.20465)
+ (xy 90.319141 81.915599) (xy 90.215917 81.722482) (xy 89.953652 81.643426) (xy 89.047078 82.55) (xy 88.752922 82.55)
+ (xy 87.846348 81.643426) (xy 87.584083 81.722482) (xy 87.447928 81.995105) (xy 87.367574 82.289053) (xy 87.346111 82.593028)
+ (xy 71.9605 82.593028) (xy 71.9605 81.496348) (xy 87.993426 81.496348) (xy 88.9 82.402922) (xy 89.806574 81.496348)
+ (xy 89.727518 81.234083) (xy 89.454895 81.097928) (xy 89.160947 81.017574) (xy 88.856972 80.996111) (xy 88.55465 81.034363)
+ (xy 88.265599 81.130859) (xy 88.072482 81.234083) (xy 87.993426 81.496348) (xy 71.9605 81.496348) (xy 71.9605 78.142652)
+ (xy 79.865426 78.142652) (xy 79.944482 78.404917) (xy 80.217105 78.541072) (xy 80.511053 78.621426) (xy 80.815028 78.642889)
+ (xy 81.11735 78.604637) (xy 81.406401 78.508141) (xy 81.599518 78.404917) (xy 81.678574 78.142652) (xy 80.772 77.236078)
+ (xy 79.865426 78.142652) (xy 71.9605 78.142652) (xy 71.9605 77.132028) (xy 79.218111 77.132028) (xy 79.256363 77.43435)
+ (xy 79.352859 77.723401) (xy 79.456083 77.916518) (xy 79.718348 77.995574) (xy 80.624922 77.089) (xy 80.919078 77.089)
+ (xy 81.825652 77.995574) (xy 82.087917 77.916518) (xy 82.224072 77.643895) (xy 82.304426 77.349947) (xy 82.325889 77.045972)
+ (xy 82.287637 76.74365) (xy 82.191141 76.454599) (xy 82.087917 76.261482) (xy 81.883954 76.2) (xy 91.929855 76.2)
+ (xy 91.929855 77.978) (xy 91.938109 78.08151) (xy 91.992478 78.257074) (xy 92.093606 78.410541) (xy 92.233484 78.529758)
+ (xy 92.401038 78.605286) (xy 92.583 78.631145) (xy 94.361 78.631145) (xy 94.46451 78.622891) (xy 94.640074 78.568522)
+ (xy 94.793541 78.467394) (xy 94.912758 78.327516) (xy 94.988286 78.159962) (xy 95.014145 77.978) (xy 95.014145 77.851)
+ (xy 106.788855 77.851) (xy 106.788855 79.375) (xy 106.797109 79.47851) (xy 106.851478 79.654074) (xy 106.952606 79.807541)
+ (xy 107.092484 79.926758) (xy 107.260038 80.002286) (xy 107.442 80.028145) (xy 108.966 80.028145) (xy 109.06951 80.019891)
+ (xy 109.245074 79.965522) (xy 109.398541 79.864394) (xy 109.465297 79.786068) (xy 109.470898 79.79445) (xy 109.562549 79.886102)
+ (xy 109.67032 79.958112) (xy 109.790068 80.007713) (xy 109.917192 80.033) (xy 110.4755 80.033) (xy 110.64 79.8685)
+ (xy 110.64 78.717) (xy 110.62 78.717) (xy 110.62 78.509) (xy 110.64 78.509) (xy 110.64 78.489)
+ (xy 110.848 78.489) (xy 110.848 78.509) (xy 110.868 78.509) (xy 110.868 78.717) (xy 110.848 78.717)
+ (xy 110.848 79.8685) (xy 111.0125 80.033) (xy 111.570808 80.033) (xy 111.697932 80.007713) (xy 111.81768 79.958112)
+ (xy 111.925451 79.886102) (xy 112.017102 79.79445) (xy 112.020565 79.789268) (xy 112.032606 79.807541) (xy 112.172484 79.926758)
+ (xy 112.340038 80.002286) (xy 112.522 80.028145) (xy 114.046 80.028145) (xy 114.14951 80.019891) (xy 114.325074 79.965522)
+ (xy 114.478541 79.864394) (xy 114.597758 79.724516) (xy 114.673286 79.556962) (xy 114.699145 79.375) (xy 114.699145 77.851)
+ (xy 114.690891 77.74749) (xy 114.636522 77.571926) (xy 114.535394 77.418459) (xy 114.395516 77.299242) (xy 114.227962 77.223714)
+ (xy 114.128361 77.20956) (xy 114.15752 77.191055) (xy 114.358049 77.000094) (xy 114.517667 76.773821) (xy 114.630296 76.520853)
+ (xy 114.691644 76.250827) (xy 114.69606 75.934546) (xy 114.642276 75.662912) (xy 114.536754 75.406899) (xy 114.383516 75.176257)
+ (xy 114.188398 74.979771) (xy 113.958831 74.824926) (xy 113.910434 74.804582) (xy 113.923719 74.799429) (xy 114.15752 74.651055)
+ (xy 114.358049 74.460094) (xy 114.517667 74.233821) (xy 114.630296 73.980853) (xy 114.691644 73.710827) (xy 114.69606 73.394546)
+ (xy 114.642276 73.122912) (xy 114.536754 72.866899) (xy 114.383516 72.636257) (xy 114.188398 72.439771) (xy 113.958831 72.284926)
+ (xy 113.70356 72.17762) (xy 113.432308 72.121941) (xy 113.155408 72.120007) (xy 112.978008 72.153848) (xy 113.05757 71.97515)
+ (xy 113.105124 71.765841) (xy 113.108547 71.520679) (xy 113.070465 71.32835) (xy 124.253229 71.32835) (xy 124.28748 71.514969)
+ (xy 124.357326 71.691382) (xy 124.3815 71.728893) (xy 124.3815 74.190956) (xy 124.370071 74.207648) (xy 124.295326 74.382042)
+ (xy 124.255878 74.567632) (xy 124.253229 74.75735) (xy 124.28748 74.943969) (xy 124.357326 75.120382) (xy 124.460108 75.279868)
+ (xy 124.59191 75.416353) (xy 124.747712 75.524638) (xy 124.92158 75.600599) (xy 125.10689 75.641342) (xy 125.296585 75.645316)
+ (xy 125.483439 75.612368) (xy 125.660335 75.543755) (xy 125.820534 75.442089) (xy 125.957936 75.311243) (xy 126.067306 75.156201)
+ (xy 126.144479 74.982868) (xy 126.186515 74.797847) (xy 126.189541 74.581132) (xy 126.152688 74.395009) (xy 126.080385 74.219589)
+ (xy 126.0625 74.19267) (xy 126.0625 71.734014) (xy 126.067306 71.727201) (xy 126.144479 71.553868) (xy 126.186515 71.368847)
+ (xy 126.186782 71.349707) (xy 130.348895 71.349707) (xy 130.392138 71.58532) (xy 130.480321 71.808047) (xy 130.610087 72.009403)
+ (xy 130.776491 72.18172) (xy 130.973196 72.318433) (xy 131.192709 72.414336) (xy 131.42667 72.465776) (xy 131.666166 72.470793)
+ (xy 131.902075 72.429195) (xy 132.125412 72.342569) (xy 132.327669 72.214212) (xy 132.501143 72.049015) (xy 132.639227 71.853269)
+ (xy 132.73666 71.634431) (xy 132.789732 71.400835) (xy 132.790744 71.32835) (xy 157.273229 71.32835) (xy 157.30748 71.514969)
+ (xy 157.377326 71.691382) (xy 157.480108 71.850868) (xy 157.61191 71.987353) (xy 157.767712 72.095638) (xy 157.94158 72.171599)
+ (xy 158.12689 72.212342) (xy 158.316585 72.216316) (xy 158.503439 72.183368) (xy 158.680335 72.114755) (xy 158.840534 72.013089)
+ (xy 158.977936 71.882243) (xy 159.087306 71.727201) (xy 159.164479 71.553868) (xy 159.206515 71.368847) (xy 159.206782 71.349707)
+ (xy 163.368895 71.349707) (xy 163.412138 71.58532) (xy 163.500321 71.808047) (xy 163.630087 72.009403) (xy 163.796491 72.18172)
+ (xy 163.993196 72.318433) (xy 164.212709 72.414336) (xy 164.44667 72.465776) (xy 164.686166 72.470793) (xy 164.922075 72.429195)
+ (xy 165.145412 72.342569) (xy 165.347669 72.214212) (xy 165.521143 72.049015) (xy 165.659227 71.853269) (xy 165.75666 71.634431)
+ (xy 165.809732 71.400835) (xy 165.812368 71.212029) (xy 185.086061 71.212029) (xy 185.124808 71.423145) (xy 185.203823 71.622714)
+ (xy 185.320097 71.803136) (xy 185.3415 71.8253) (xy 185.3415 74.190956) (xy 185.330071 74.207648) (xy 185.255326 74.382042)
+ (xy 185.215878 74.567632) (xy 185.213229 74.75735) (xy 185.24748 74.943969) (xy 185.317326 75.120382) (xy 185.420108 75.279868)
+ (xy 185.55191 75.416353) (xy 185.707712 75.524638) (xy 185.88158 75.600599) (xy 186.06689 75.641342) (xy 186.256585 75.645316)
+ (xy 186.443439 75.612368) (xy 186.620335 75.543755) (xy 186.780534 75.442089) (xy 186.917936 75.311243) (xy 187.027306 75.156201)
+ (xy 187.104479 74.982868) (xy 187.146515 74.797847) (xy 187.149541 74.581132) (xy 187.112688 74.395009) (xy 187.040385 74.219589)
+ (xy 187.0225 74.19267) (xy 187.0225 73.127707) (xy 189.784895 73.127707) (xy 189.828138 73.36332) (xy 189.916321 73.586047)
+ (xy 190.046087 73.787403) (xy 190.212491 73.95972) (xy 190.409196 74.096433) (xy 190.628709 74.192336) (xy 190.86267 74.243776)
+ (xy 191.102166 74.248793) (xy 191.338075 74.207195) (xy 191.561412 74.120569) (xy 191.763669 73.992212) (xy 191.937143 73.827015)
+ (xy 191.96537 73.787) (xy 196.069855 73.787) (xy 196.069855 75.311) (xy 196.078109 75.41451) (xy 196.132478 75.590074)
+ (xy 196.233606 75.743541) (xy 196.373484 75.862758) (xy 196.541038 75.938286) (xy 196.642608 75.95272) (xy 196.595954 75.98325)
+ (xy 196.398112 76.176992) (xy 196.241668 76.405472) (xy 196.132583 76.659988) (xy 196.07501 76.930844) (xy 196.071144 77.207725)
+ (xy 196.121131 77.480083) (xy 196.223068 77.737545) (xy 196.373071 77.970304) (xy 196.565427 78.169495) (xy 196.792809 78.32753)
+ (xy 196.861992 78.357755) (xy 196.827661 78.371626) (xy 196.595954 78.52325) (xy 196.398112 78.716992) (xy 196.241668 78.945472)
+ (xy 196.132583 79.199988) (xy 196.07501 79.470844) (xy 196.071144 79.747725) (xy 196.121131 80.020083) (xy 196.223068 80.277545)
+ (xy 196.373071 80.510304) (xy 196.565427 80.709495) (xy 196.792809 80.86753) (xy 196.861992 80.897755) (xy 196.827661 80.911626)
+ (xy 196.595954 81.06325) (xy 196.398112 81.256992) (xy 196.241668 81.485472) (xy 196.132583 81.739988) (xy 196.07501 82.010844)
+ (xy 196.071144 82.287725) (xy 196.121131 82.560083) (xy 196.223068 82.817545) (xy 196.373071 83.050304) (xy 196.565427 83.249495)
+ (xy 196.792809 83.40753) (xy 197.046557 83.518389) (xy 197.317005 83.577851) (xy 197.593851 83.58365) (xy 197.866552 83.535566)
+ (xy 198.124719 83.435429) (xy 198.35852 83.287055) (xy 198.559049 83.096094) (xy 198.718667 82.869821) (xy 198.753124 82.79243)
+ (xy 198.763068 82.817545) (xy 198.913071 83.050304) (xy 199.105427 83.249495) (xy 199.332809 83.40753) (xy 199.586557 83.518389)
+ (xy 199.857005 83.577851) (xy 200.133851 83.58365) (xy 200.406552 83.535566) (xy 200.664719 83.435429) (xy 200.89852 83.287055)
+ (xy 201.099049 83.096094) (xy 201.258667 82.869821) (xy 201.371296 82.616853) (xy 201.432644 82.346827) (xy 201.43706 82.030546)
+ (xy 201.383276 81.758912) (xy 201.277754 81.502899) (xy 201.124516 81.272257) (xy 200.929398 81.075771) (xy 200.699831 80.920926)
+ (xy 200.651434 80.900582) (xy 200.664719 80.895429) (xy 200.89852 80.747055) (xy 201.099049 80.556094) (xy 201.258667 80.329821)
+ (xy 201.371296 80.076853) (xy 201.432644 79.806827) (xy 201.43706 79.490546) (xy 201.383276 79.218912) (xy 201.277754 78.962899)
+ (xy 201.190805 78.832029) (xy 204.565321 78.832029) (xy 204.604068 79.043145) (xy 204.683083 79.242714) (xy 204.799357 79.423136)
+ (xy 204.94846 79.577537) (xy 205.124714 79.700036) (xy 205.321404 79.785968) (xy 205.53104 79.832059) (xy 205.745635 79.836555)
+ (xy 205.957017 79.799282) (xy 206.157133 79.721662) (xy 206.338362 79.606651) (xy 206.4938 79.458629) (xy 206.617527 79.283235)
+ (xy 206.70483 79.08715) (xy 206.752384 78.877841) (xy 206.755807 78.632679) (xy 206.714116 78.422124) (xy 206.632322 78.223677)
+ (xy 206.513541 78.044897) (xy 206.362296 77.892593) (xy 206.18435 77.772566) (xy 205.986479 77.689389) (xy 205.77622 77.646229)
+ (xy 205.561583 77.64473) (xy 205.350742 77.68495) (xy 205.151729 77.765357) (xy 204.972124 77.882887) (xy 204.818767 78.033065)
+ (xy 204.697501 78.210169) (xy 204.612945 78.407455) (xy 204.568318 78.617407) (xy 204.565321 78.832029) (xy 201.190805 78.832029)
+ (xy 201.124516 78.732257) (xy 200.929398 78.535771) (xy 200.699831 78.380926) (xy 200.651434 78.360582) (xy 200.664719 78.355429)
+ (xy 200.89852 78.207055) (xy 201.099049 78.016094) (xy 201.258667 77.789821) (xy 201.371296 77.536853) (xy 201.432644 77.266827)
+ (xy 201.43706 76.950546) (xy 201.383276 76.678912) (xy 201.277754 76.422899) (xy 201.124516 76.192257) (xy 200.929398 75.995771)
+ (xy 200.699831 75.840926) (xy 200.651434 75.820582) (xy 200.664719 75.815429) (xy 200.89852 75.667055) (xy 201.099049 75.476094)
+ (xy 201.258667 75.249821) (xy 201.371296 74.996853) (xy 201.432644 74.726827) (xy 201.43706 74.410546) (xy 201.383276 74.138912)
+ (xy 201.277754 73.882899) (xy 201.124516 73.652257) (xy 200.929398 73.455771) (xy 200.699831 73.300926) (xy 200.44456 73.19362)
+ (xy 200.173308 73.137941) (xy 199.896408 73.136007) (xy 199.624405 73.187895) (xy 199.367661 73.291626) (xy 199.135954 73.44325)
+ (xy 198.938112 73.636992) (xy 198.893391 73.702305) (xy 198.891891 73.68349) (xy 198.837522 73.507926) (xy 198.736394 73.354459)
+ (xy 198.596516 73.235242) (xy 198.428962 73.159714) (xy 198.247 73.133855) (xy 196.723 73.133855) (xy 196.61949 73.142109)
+ (xy 196.443926 73.196478) (xy 196.290459 73.297606) (xy 196.171242 73.437484) (xy 196.095714 73.605038) (xy 196.069855 73.787)
+ (xy 191.96537 73.787) (xy 192.075227 73.631269) (xy 192.17266 73.412431) (xy 192.225732 73.178835) (xy 192.229552 72.905226)
+ (xy 192.183024 72.670239) (xy 192.091739 72.448766) (xy 191.959175 72.249241) (xy 191.790381 72.079264) (xy 191.591786 71.945311)
+ (xy 191.370955 71.852482) (xy 191.136299 71.804314) (xy 190.896757 71.802642) (xy 190.661451 71.847528) (xy 190.439346 71.937265)
+ (xy 190.2389 72.068433) (xy 190.067749 72.236036) (xy 189.932412 72.433691) (xy 189.838044 72.653868) (xy 189.788239 72.888182)
+ (xy 189.784895 73.127707) (xy 187.0225 73.127707) (xy 187.0225 71.827345) (xy 187.138267 71.663235) (xy 187.22557 71.46715)
+ (xy 187.273124 71.257841) (xy 187.276547 71.012679) (xy 187.234856 70.802124) (xy 187.153062 70.603677) (xy 187.034281 70.424897)
+ (xy 186.883036 70.272593) (xy 186.70509 70.152566) (xy 186.507219 70.069389) (xy 186.29696 70.026229) (xy 186.082323 70.02473)
+ (xy 185.871482 70.06495) (xy 185.672469 70.145357) (xy 185.492864 70.262887) (xy 185.339507 70.413065) (xy 185.218241 70.590169)
+ (xy 185.133685 70.787455) (xy 185.089058 70.997407) (xy 185.086061 71.212029) (xy 165.812368 71.212029) (xy 165.813552 71.127226)
+ (xy 165.767024 70.892239) (xy 165.675739 70.670766) (xy 165.543175 70.471241) (xy 165.374381 70.301264) (xy 165.175786 70.167311)
+ (xy 164.954955 70.074482) (xy 164.720299 70.026314) (xy 164.480757 70.024642) (xy 164.245451 70.069528) (xy 164.023346 70.159265)
+ (xy 163.8229 70.290433) (xy 163.651749 70.458036) (xy 163.516412 70.655691) (xy 163.422044 70.875868) (xy 163.372239 71.110182)
+ (xy 163.368895 71.349707) (xy 159.206782 71.349707) (xy 159.209541 71.152132) (xy 159.172688 70.966009) (xy 159.100385 70.790589)
+ (xy 158.995386 70.632553) (xy 158.861691 70.497922) (xy 158.704393 70.391822) (xy 158.529482 70.318297) (xy 158.343621 70.280145)
+ (xy 158.153889 70.27882) (xy 157.967513 70.314373) (xy 157.791592 70.38545) (xy 157.632828 70.489342) (xy 157.497266 70.622094)
+ (xy 157.390071 70.778648) (xy 157.315326 70.953042) (xy 157.275878 71.138632) (xy 157.273229 71.32835) (xy 132.790744 71.32835)
+ (xy 132.793552 71.127226) (xy 132.747024 70.892239) (xy 132.655739 70.670766) (xy 132.523175 70.471241) (xy 132.354381 70.301264)
+ (xy 132.155786 70.167311) (xy 131.934955 70.074482) (xy 131.700299 70.026314) (xy 131.460757 70.024642) (xy 131.225451 70.069528)
+ (xy 131.003346 70.159265) (xy 130.8029 70.290433) (xy 130.631749 70.458036) (xy 130.496412 70.655691) (xy 130.402044 70.875868)
+ (xy 130.352239 71.110182) (xy 130.348895 71.349707) (xy 126.186782 71.349707) (xy 126.189541 71.152132) (xy 126.152688 70.966009)
+ (xy 126.080385 70.790589) (xy 125.975386 70.632553) (xy 125.841691 70.497922) (xy 125.684393 70.391822) (xy 125.509482 70.318297)
+ (xy 125.323621 70.280145) (xy 125.133889 70.27882) (xy 124.947513 70.314373) (xy 124.771592 70.38545) (xy 124.612828 70.489342)
+ (xy 124.477266 70.622094) (xy 124.370071 70.778648) (xy 124.295326 70.953042) (xy 124.255878 71.138632) (xy 124.253229 71.32835)
+ (xy 113.070465 71.32835) (xy 113.066856 71.310124) (xy 112.985062 71.111677) (xy 112.866281 70.932897) (xy 112.715036 70.780593)
+ (xy 112.53709 70.660566) (xy 112.339219 70.577389) (xy 112.12896 70.534229) (xy 111.914323 70.53273) (xy 111.703482 70.57295)
+ (xy 111.504469 70.653357) (xy 111.324864 70.770887) (xy 111.171507 70.921065) (xy 111.050241 71.098169) (xy 110.965685 71.295455)
+ (xy 110.921058 71.505407) (xy 110.918061 71.720029) (xy 110.956808 71.931145) (xy 111.035823 72.130714) (xy 111.051186 72.154553)
+ (xy 110.892308 72.121941) (xy 110.615408 72.120007) (xy 110.343405 72.171895) (xy 110.3145 72.183573) (xy 110.3145 72.081345)
+ (xy 110.430267 71.917235) (xy 110.51757 71.72115) (xy 110.565124 71.511841) (xy 110.568547 71.266679) (xy 110.526856 71.056124)
+ (xy 110.445062 70.857677) (xy 110.326281 70.678897) (xy 110.175036 70.526593) (xy 109.99709 70.406566) (xy 109.799219 70.323389)
+ (xy 109.58896 70.280229) (xy 109.374323 70.27873) (xy 109.163482 70.31895) (xy 108.964469 70.399357) (xy 108.784864 70.516887)
+ (xy 108.631507 70.667065) (xy 108.510241 70.844169) (xy 108.425685 71.041455) (xy 108.381058 71.251407) (xy 108.378061 71.466029)
+ (xy 108.416808 71.677145) (xy 108.495823 71.876714) (xy 108.612097 72.057136) (xy 108.6335 72.0793) (xy 108.6335 72.181798)
+ (xy 108.62356 72.17762) (xy 108.352308 72.121941) (xy 108.075408 72.120007) (xy 107.803405 72.171895) (xy 107.546661 72.275626)
+ (xy 107.314954 72.42725) (xy 107.117112 72.620992) (xy 106.960668 72.849472) (xy 106.851583 73.103988) (xy 106.79401 73.374844)
+ (xy 106.790144 73.651725) (xy 106.840131 73.924083) (xy 106.942068 74.181545) (xy 107.092071 74.414304) (xy 107.284427 74.613495)
+ (xy 107.511809 74.77153) (xy 107.580992 74.801755) (xy 107.546661 74.815626) (xy 107.314954 74.96725) (xy 107.117112 75.160992)
+ (xy 106.960668 75.389472) (xy 106.851583 75.643988) (xy 106.79401 75.914844) (xy 106.790144 76.191725) (xy 106.840131 76.464083)
+ (xy 106.942068 76.721545) (xy 107.092071 76.954304) (xy 107.284427 77.153495) (xy 107.357901 77.204561) (xy 107.33849 77.206109)
+ (xy 107.162926 77.260478) (xy 107.009459 77.361606) (xy 106.890242 77.501484) (xy 106.814714 77.669038) (xy 106.788855 77.851)
+ (xy 95.014145 77.851) (xy 95.014145 76.2) (xy 95.005891 76.09649) (xy 94.951522 75.920926) (xy 94.850394 75.767459)
+ (xy 94.710516 75.648242) (xy 94.542962 75.572714) (xy 94.361 75.546855) (xy 92.583 75.546855) (xy 92.47949 75.555109)
+ (xy 92.303926 75.609478) (xy 92.150459 75.710606) (xy 92.031242 75.850484) (xy 91.955714 76.018038) (xy 91.929855 76.2)
+ (xy 81.883954 76.2) (xy 81.825652 76.182426) (xy 80.919078 77.089) (xy 80.624922 77.089) (xy 79.718348 76.182426)
+ (xy 79.456083 76.261482) (xy 79.319928 76.534105) (xy 79.239574 76.828053) (xy 79.218111 77.132028) (xy 71.9605 77.132028)
+ (xy 71.9605 76.035348) (xy 79.865426 76.035348) (xy 80.772 76.941922) (xy 81.678574 76.035348) (xy 81.599518 75.773083)
+ (xy 81.326895 75.636928) (xy 81.032947 75.556574) (xy 80.728972 75.535111) (xy 80.42665 75.573363) (xy 80.137599 75.669859)
+ (xy 79.944482 75.773083) (xy 79.865426 76.035348) (xy 71.9605 76.035348) (xy 71.9605 74.34996) (xy 74.260118 74.34996)
+ (xy 74.385047 74.651202) (xy 74.722535 74.825376) (xy 75.087519 74.930362) (xy 75.465971 74.962127) (xy 75.843348 74.919449)
+ (xy 76.205148 74.803968) (xy 76.490953 74.651202) (xy 76.615882 74.34996) (xy 75.438 73.172078) (xy 74.260118 74.34996)
+ (xy 71.9605 74.34996) (xy 71.9605 73.052971) (xy 73.500873 73.052971) (xy 73.543551 73.430348) (xy 73.659032 73.792148)
+ (xy 73.811798 74.077953) (xy 74.11304 74.202882) (xy 75.290922 73.025) (xy 75.585078 73.025) (xy 76.76296 74.202882)
+ (xy 77.064202 74.077953) (xy 77.238376 73.740465) (xy 77.343362 73.375481) (xy 77.375127 72.997029) (xy 77.332449 72.619652)
+ (xy 77.216968 72.257852) (xy 77.064202 71.972047) (xy 76.76296 71.847118) (xy 75.585078 73.025) (xy 75.290922 73.025)
+ (xy 74.11304 71.847118) (xy 73.811798 71.972047) (xy 73.637624 72.309535) (xy 73.532638 72.674519) (xy 73.500873 73.052971)
+ (xy 71.9605 73.052971) (xy 71.9605 71.27) (xy 74.626011 71.27) (xy 74.385047 71.398798) (xy 74.260118 71.70004)
+ (xy 75.438 72.877922) (xy 76.615882 71.70004) (xy 76.490953 71.398798) (xy 76.241388 71.27) (xy 79.225 71.27)
+ (xy 79.225 74.93) (xy 79.230939 74.971789) (xy 79.248284 75.010269) (xy 79.275663 75.042393) (xy 79.310908 75.065618)
+ (xy 79.351228 75.078104) (xy 79.375 75.08) (xy 97.155 75.08) (xy 97.196789 75.074061) (xy 97.235269 75.056716)
+ (xy 97.267393 75.029337) (xy 97.290618 74.994092) (xy 97.303104 74.953772) (xy 97.305 74.93) (xy 97.305 67.1975)
+ (xy 97.9067 67.1975) (xy 97.9067 69.394107) (xy 97.931987 69.521231) (xy 97.981588 69.64098) (xy 98.053598 69.74875)
+ (xy 98.145249 69.840402) (xy 98.25302 69.912412) (xy 98.372768 69.962013) (xy 98.499892 69.9873) (xy 100.6965 69.9873)
+ (xy 100.861 69.8228) (xy 100.861 67.033) (xy 101.069 67.033) (xy 101.069 69.8228) (xy 101.2335 69.9873)
+ (xy 103.430108 69.9873) (xy 103.557232 69.962013) (xy 103.67698 69.912412) (xy 103.784751 69.840402) (xy 103.876402 69.74875)
+ (xy 103.948412 69.64098) (xy 103.998013 69.521231) (xy 104.0233 69.394107) (xy 104.0233 67.1975) (xy 103.8588 67.033)
+ (xy 101.069 67.033) (xy 100.861 67.033) (xy 98.0712 67.033) (xy 97.9067 67.1975) (xy 97.305 67.1975)
+ (xy 97.305 65.830691) (xy 97.772039 65.534299) (xy 97.9067 65.406063) (xy 97.9067 66.6605) (xy 98.0712 66.825)
+ (xy 100.861 66.825) (xy 100.861 66.805) (xy 101.069 66.805) (xy 101.069 66.825) (xy 103.8588 66.825)
+ (xy 104.0233 66.6605) (xy 104.0233 66.254831) (xy 106.915641 66.254831) (xy 107.006092 66.747661) (xy 107.190545 67.213536)
+ (xy 107.461974 67.634712) (xy 107.810041 67.995145) (xy 108.221487 68.281108) (xy 108.680641 68.481707) (xy 109.170014 68.589303)
+ (xy 109.670966 68.599796) (xy 110.164415 68.512788) (xy 110.631566 68.331592) (xy 111.054626 68.06311) (xy 111.312016 67.818)
+ (xy 115.170855 67.818) (xy 115.170855 69.342) (xy 115.179109 69.44551) (xy 115.233478 69.621074) (xy 115.334606 69.774541)
+ (xy 115.474484 69.893758) (xy 115.642038 69.969286) (xy 115.824 69.995145) (xy 117.348 69.995145) (xy 117.45151 69.986891)
+ (xy 117.627074 69.932522) (xy 117.780541 69.831394) (xy 117.899758 69.691516) (xy 117.975286 69.523962) (xy 118.001145 69.342)
+ (xy 118.001145 68.889431) (xy 118.016131 68.971083) (xy 118.118068 69.228545) (xy 118.268071 69.461304) (xy 118.460427 69.660495)
+ (xy 118.687809 69.81853) (xy 118.941557 69.929389) (xy 119.212005 69.988851) (xy 119.488851 69.99465) (xy 119.761552 69.946566)
+ (xy 120.019719 69.846429) (xy 120.25352 69.698055) (xy 120.454049 69.507094) (xy 120.613667 69.280821) (xy 120.715346 69.052448)
+ (xy 120.785068 69.228545) (xy 120.935071 69.461304) (xy 121.127427 69.660495) (xy 121.354809 69.81853) (xy 121.608557 69.929389)
+ (xy 121.879005 69.988851) (xy 122.155851 69.99465) (xy 122.428552 69.946566) (xy 122.686719 69.846429) (xy 122.92052 69.698055)
+ (xy 123.121049 69.507094) (xy 123.280667 69.280821) (xy 123.393296 69.027853) (xy 123.445433 68.798372) (xy 123.477131 68.971083)
+ (xy 123.579068 69.228545) (xy 123.729071 69.461304) (xy 123.921427 69.660495) (xy 124.148809 69.81853) (xy 124.402557 69.929389)
+ (xy 124.673005 69.988851) (xy 124.949851 69.99465) (xy 125.222552 69.946566) (xy 125.480719 69.846429) (xy 125.71452 69.698055)
+ (xy 125.877201 69.543136) (xy 126.818942 69.543136) (xy 126.882675 69.792422) (xy 127.133663 69.915897) (xy 127.403917 69.988034)
+ (xy 127.683051 70.006062) (xy 127.960338 69.969287) (xy 128.225124 69.879121) (xy 128.387325 69.792422) (xy 128.451058 69.543136)
+ (xy 127.635 68.727078) (xy 126.818942 69.543136) (xy 125.877201 69.543136) (xy 125.915049 69.507094) (xy 126.074667 69.280821)
+ (xy 126.187296 69.027853) (xy 126.234441 68.820344) (xy 126.245713 68.905338) (xy 126.335879 69.170124) (xy 126.422578 69.332325)
+ (xy 126.671864 69.396058) (xy 127.487922 68.58) (xy 127.782078 68.58) (xy 128.598136 69.396058) (xy 128.847422 69.332325)
+ (xy 128.970897 69.081337) (xy 129.043034 68.811083) (xy 129.061062 68.531949) (xy 129.024287 68.254662) (xy 128.934121 67.989876)
+ (xy 128.847422 67.827675) (xy 128.598136 67.763942) (xy 127.782078 68.58) (xy 127.487922 68.58) (xy 126.671864 67.763942)
+ (xy 126.422578 67.827675) (xy 126.299103 68.078663) (xy 126.231417 68.332241) (xy 126.199276 68.169912) (xy 126.093754 67.913899)
+ (xy 125.940516 67.683257) (xy 125.874586 67.616864) (xy 126.818942 67.616864) (xy 127.635 68.432922) (xy 128.451058 67.616864)
+ (xy 128.387325 67.367578) (xy 128.136337 67.244103) (xy 127.866083 67.171966) (xy 127.586949 67.153938) (xy 127.309662 67.190713)
+ (xy 127.044876 67.280879) (xy 126.882675 67.367578) (xy 126.818942 67.616864) (xy 125.874586 67.616864) (xy 125.745398 67.486771)
+ (xy 125.515831 67.331926) (xy 125.26056 67.22462) (xy 124.989308 67.168941) (xy 124.712408 67.167007) (xy 124.440405 67.218895)
+ (xy 124.183661 67.322626) (xy 123.951954 67.47425) (xy 123.754112 67.667992) (xy 123.597668 67.896472) (xy 123.488583 68.150988)
+ (xy 123.443513 68.363025) (xy 123.405276 68.169912) (xy 123.299754 67.913899) (xy 123.146516 67.683257) (xy 122.951398 67.486771)
+ (xy 122.721831 67.331926) (xy 122.46656 67.22462) (xy 122.195308 67.168941) (xy 121.918408 67.167007) (xy 121.646405 67.218895)
+ (xy 121.389661 67.322626) (xy 121.157954 67.47425) (xy 120.960112 67.667992) (xy 120.803668 67.896472) (xy 120.71288 68.108297)
+ (xy 120.632754 67.913899) (xy 120.479516 67.683257) (xy 120.284398 67.486771) (xy 120.054831 67.331926) (xy 119.79956 67.22462)
+ (xy 119.528308 67.168941) (xy 119.251408 67.167007) (xy 118.979405 67.218895) (xy 118.722661 67.322626) (xy 118.490954 67.47425)
+ (xy 118.293112 67.667992) (xy 118.136668 67.896472) (xy 118.027583 68.150988) (xy 118.001145 68.275367) (xy 118.001145 67.818)
+ (xy 117.992891 67.71449) (xy 117.938522 67.538926) (xy 117.880065 67.450214) (xy 118.091851 67.45465) (xy 118.364552 67.406566)
+ (xy 118.622719 67.306429) (xy 118.85652 67.158055) (xy 119.057049 66.967094) (xy 119.216667 66.740821) (xy 119.329296 66.487853)
+ (xy 119.381433 66.258372) (xy 119.413131 66.431083) (xy 119.515068 66.688545) (xy 119.665071 66.921304) (xy 119.857427 67.120495)
+ (xy 120.084809 67.27853) (xy 120.338557 67.389389) (xy 120.609005 67.448851) (xy 120.885851 67.45465) (xy 121.158552 67.406566)
+ (xy 121.416719 67.306429) (xy 121.65052 67.158055) (xy 121.851049 66.967094) (xy 122.010667 66.740821) (xy 122.112346 66.512448)
+ (xy 122.182068 66.688545) (xy 122.332071 66.921304) (xy 122.524427 67.120495) (xy 122.751809 67.27853) (xy 123.005557 67.389389)
+ (xy 123.276005 67.448851) (xy 123.552851 67.45465) (xy 123.825552 67.406566) (xy 124.083719 67.306429) (xy 124.31752 67.158055)
+ (xy 124.518049 66.967094) (xy 124.677667 66.740821) (xy 124.790296 66.487853) (xy 124.842433 66.258372) (xy 124.874131 66.431083)
+ (xy 124.976068 66.688545) (xy 125.126071 66.921304) (xy 125.318427 67.120495) (xy 125.545809 67.27853) (xy 125.799557 67.389389)
+ (xy 126.070005 67.448851) (xy 126.346851 67.45465) (xy 126.619552 67.406566) (xy 126.877719 67.306429) (xy 127.11152 67.158055)
+ (xy 127.312049 66.967094) (xy 127.471667 66.740821) (xy 127.584296 66.487853) (xy 127.637236 66.254831) (xy 132.315641 66.254831)
+ (xy 132.406092 66.747661) (xy 132.590545 67.213536) (xy 132.861974 67.634712) (xy 133.210041 67.995145) (xy 133.621487 68.281108)
+ (xy 134.080641 68.481707) (xy 134.570014 68.589303) (xy 135.070966 68.599796) (xy 135.564415 68.512788) (xy 136.031566 68.331592)
+ (xy 136.454626 68.06311) (xy 136.817481 67.717568) (xy 137.106309 67.308128) (xy 137.310109 66.850386) (xy 137.421119 66.361776)
+ (xy 137.422612 66.254831) (xy 140.443641 66.254831) (xy 140.534092 66.747661) (xy 140.718545 67.213536) (xy 140.989974 67.634712)
+ (xy 141.338041 67.995145) (xy 141.749487 68.281108) (xy 142.208641 68.481707) (xy 142.698014 68.589303) (xy 143.198966 68.599796)
+ (xy 143.692415 68.512788) (xy 144.159566 68.331592) (xy 144.582626 68.06311) (xy 144.840016 67.818) (xy 148.698855 67.818)
+ (xy 148.698855 69.342) (xy 148.707109 69.44551) (xy 148.761478 69.621074) (xy 148.862606 69.774541) (xy 149.002484 69.893758)
+ (xy 149.170038 69.969286) (xy 149.352 69.995145) (xy 150.876 69.995145) (xy 150.97951 69.986891) (xy 151.155074 69.932522)
+ (xy 151.308541 69.831394) (xy 151.427758 69.691516) (xy 151.503286 69.523962) (xy 151.529145 69.342) (xy 151.529145 68.889431)
+ (xy 151.544131 68.971083) (xy 151.646068 69.228545) (xy 151.796071 69.461304) (xy 151.988427 69.660495) (xy 152.215809 69.81853)
+ (xy 152.469557 69.929389) (xy 152.740005 69.988851) (xy 153.016851 69.99465) (xy 153.289552 69.946566) (xy 153.547719 69.846429)
+ (xy 153.78152 69.698055) (xy 153.982049 69.507094) (xy 154.141667 69.280821) (xy 154.243346 69.052448) (xy 154.313068 69.228545)
+ (xy 154.463071 69.461304) (xy 154.655427 69.660495) (xy 154.882809 69.81853) (xy 155.136557 69.929389) (xy 155.407005 69.988851)
+ (xy 155.683851 69.99465) (xy 155.956552 69.946566) (xy 156.214719 69.846429) (xy 156.44852 69.698055) (xy 156.649049 69.507094)
+ (xy 156.808667 69.280821) (xy 156.921296 69.027853) (xy 156.973433 68.798372) (xy 157.005131 68.971083) (xy 157.107068 69.228545)
+ (xy 157.257071 69.461304) (xy 157.449427 69.660495) (xy 157.676809 69.81853) (xy 157.930557 69.929389) (xy 158.201005 69.988851)
+ (xy 158.477851 69.99465) (xy 158.750552 69.946566) (xy 159.008719 69.846429) (xy 159.24252 69.698055) (xy 159.405201 69.543136)
+ (xy 160.346942 69.543136) (xy 160.410675 69.792422) (xy 160.661663 69.915897) (xy 160.931917 69.988034) (xy 161.211051 70.006062)
+ (xy 161.488338 69.969287) (xy 161.753124 69.879121) (xy 161.915325 69.792422) (xy 161.979058 69.543136) (xy 161.163 68.727078)
+ (xy 160.346942 69.543136) (xy 159.405201 69.543136) (xy 159.443049 69.507094) (xy 159.602667 69.280821) (xy 159.715296 69.027853)
+ (xy 159.762441 68.820344) (xy 159.773713 68.905338) (xy 159.863879 69.170124) (xy 159.950578 69.332325) (xy 160.199864 69.396058)
+ (xy 161.015922 68.58) (xy 161.310078 68.58) (xy 162.126136 69.396058) (xy 162.375422 69.332325) (xy 162.498897 69.081337)
+ (xy 162.571034 68.811083) (xy 162.589062 68.531949) (xy 162.552287 68.254662) (xy 162.462121 67.989876) (xy 162.375422 67.827675)
+ (xy 162.126136 67.763942) (xy 161.310078 68.58) (xy 161.015922 68.58) (xy 160.199864 67.763942) (xy 159.950578 67.827675)
+ (xy 159.827103 68.078663) (xy 159.759417 68.332241) (xy 159.727276 68.169912) (xy 159.621754 67.913899) (xy 159.468516 67.683257)
+ (xy 159.402586 67.616864) (xy 160.346942 67.616864) (xy 161.163 68.432922) (xy 161.979058 67.616864) (xy 161.915325 67.367578)
+ (xy 161.664337 67.244103) (xy 161.394083 67.171966) (xy 161.114949 67.153938) (xy 160.837662 67.190713) (xy 160.572876 67.280879)
+ (xy 160.410675 67.367578) (xy 160.346942 67.616864) (xy 159.402586 67.616864) (xy 159.273398 67.486771) (xy 159.043831 67.331926)
+ (xy 158.78856 67.22462) (xy 158.517308 67.168941) (xy 158.240408 67.167007) (xy 157.968405 67.218895) (xy 157.711661 67.322626)
+ (xy 157.479954 67.47425) (xy 157.282112 67.667992) (xy 157.125668 67.896472) (xy 157.016583 68.150988) (xy 156.971513 68.363025)
+ (xy 156.933276 68.169912) (xy 156.827754 67.913899) (xy 156.674516 67.683257) (xy 156.479398 67.486771) (xy 156.249831 67.331926)
+ (xy 155.99456 67.22462) (xy 155.723308 67.168941) (xy 155.446408 67.167007) (xy 155.174405 67.218895) (xy 154.917661 67.322626)
+ (xy 154.685954 67.47425) (xy 154.488112 67.667992) (xy 154.331668 67.896472) (xy 154.24088 68.108297) (xy 154.160754 67.913899)
+ (xy 154.007516 67.683257) (xy 153.812398 67.486771) (xy 153.582831 67.331926) (xy 153.32756 67.22462) (xy 153.056308 67.168941)
+ (xy 152.779408 67.167007) (xy 152.507405 67.218895) (xy 152.250661 67.322626) (xy 152.018954 67.47425) (xy 151.821112 67.667992)
+ (xy 151.664668 67.896472) (xy 151.555583 68.150988) (xy 151.529145 68.275367) (xy 151.529145 67.818) (xy 151.520891 67.71449)
+ (xy 151.466522 67.538926) (xy 151.408065 67.450214) (xy 151.619851 67.45465) (xy 151.892552 67.406566) (xy 152.150719 67.306429)
+ (xy 152.38452 67.158055) (xy 152.585049 66.967094) (xy 152.744667 66.740821) (xy 152.857296 66.487853) (xy 152.909433 66.258372)
+ (xy 152.941131 66.431083) (xy 153.043068 66.688545) (xy 153.193071 66.921304) (xy 153.385427 67.120495) (xy 153.612809 67.27853)
+ (xy 153.866557 67.389389) (xy 154.137005 67.448851) (xy 154.413851 67.45465) (xy 154.686552 67.406566) (xy 154.944719 67.306429)
+ (xy 155.17852 67.158055) (xy 155.379049 66.967094) (xy 155.538667 66.740821) (xy 155.640346 66.512448) (xy 155.710068 66.688545)
+ (xy 155.860071 66.921304) (xy 156.052427 67.120495) (xy 156.279809 67.27853) (xy 156.533557 67.389389) (xy 156.804005 67.448851)
+ (xy 157.080851 67.45465) (xy 157.353552 67.406566) (xy 157.611719 67.306429) (xy 157.84552 67.158055) (xy 158.046049 66.967094)
+ (xy 158.205667 66.740821) (xy 158.318296 66.487853) (xy 158.370433 66.258372) (xy 158.402131 66.431083) (xy 158.504068 66.688545)
+ (xy 158.654071 66.921304) (xy 158.846427 67.120495) (xy 159.073809 67.27853) (xy 159.327557 67.389389) (xy 159.598005 67.448851)
+ (xy 159.874851 67.45465) (xy 160.147552 67.406566) (xy 160.405719 67.306429) (xy 160.63952 67.158055) (xy 160.840049 66.967094)
+ (xy 160.999667 66.740821) (xy 161.112296 66.487853) (xy 161.165236 66.254831) (xy 165.843641 66.254831) (xy 165.934092 66.747661)
+ (xy 166.118545 67.213536) (xy 166.389974 67.634712) (xy 166.738041 67.995145) (xy 167.149487 68.281108) (xy 167.608641 68.481707)
+ (xy 168.098014 68.589303) (xy 168.598966 68.599796) (xy 169.092415 68.512788) (xy 169.559566 68.331592) (xy 169.982626 68.06311)
+ (xy 170.345481 67.717568) (xy 170.634309 67.308128) (xy 170.838109 66.850386) (xy 170.949119 66.361776) (xy 170.950612 66.254831)
+ (xy 173.971641 66.254831) (xy 174.062092 66.747661) (xy 174.246545 67.213536) (xy 174.517974 67.634712) (xy 174.866041 67.995145)
+ (xy 175.277487 68.281108) (xy 175.736641 68.481707) (xy 176.226014 68.589303) (xy 176.726966 68.599796) (xy 177.220415 68.512788)
+ (xy 177.687566 68.331592) (xy 178.110626 68.06311) (xy 178.368016 67.818) (xy 182.226855 67.818) (xy 182.226855 69.342)
+ (xy 182.235109 69.44551) (xy 182.289478 69.621074) (xy 182.390606 69.774541) (xy 182.530484 69.893758) (xy 182.698038 69.969286)
+ (xy 182.88 69.995145) (xy 184.404 69.995145) (xy 184.50751 69.986891) (xy 184.683074 69.932522) (xy 184.836541 69.831394)
+ (xy 184.955758 69.691516) (xy 185.031286 69.523962) (xy 185.057145 69.342) (xy 185.057145 68.889431) (xy 185.072131 68.971083)
+ (xy 185.174068 69.228545) (xy 185.324071 69.461304) (xy 185.516427 69.660495) (xy 185.743809 69.81853) (xy 185.997557 69.929389)
+ (xy 186.268005 69.988851) (xy 186.544851 69.99465) (xy 186.817552 69.946566) (xy 187.075719 69.846429) (xy 187.30952 69.698055)
+ (xy 187.510049 69.507094) (xy 187.669667 69.280821) (xy 187.771346 69.052448) (xy 187.841068 69.228545) (xy 187.991071 69.461304)
+ (xy 188.183427 69.660495) (xy 188.410809 69.81853) (xy 188.664557 69.929389) (xy 188.935005 69.988851) (xy 189.211851 69.99465)
+ (xy 189.484552 69.946566) (xy 189.742719 69.846429) (xy 189.97652 69.698055) (xy 190.177049 69.507094) (xy 190.336667 69.280821)
+ (xy 190.449296 69.027853) (xy 190.501433 68.798372) (xy 190.533131 68.971083) (xy 190.635068 69.228545) (xy 190.785071 69.461304)
+ (xy 190.977427 69.660495) (xy 191.204809 69.81853) (xy 191.458557 69.929389) (xy 191.729005 69.988851) (xy 192.005851 69.99465)
+ (xy 192.278552 69.946566) (xy 192.536719 69.846429) (xy 192.77052 69.698055) (xy 192.933201 69.543136) (xy 193.874942 69.543136)
+ (xy 193.938675 69.792422) (xy 194.189663 69.915897) (xy 194.459917 69.988034) (xy 194.739051 70.006062) (xy 195.016338 69.969287)
+ (xy 195.281124 69.879121) (xy 195.443325 69.792422) (xy 195.507058 69.543136) (xy 194.691 68.727078) (xy 193.874942 69.543136)
+ (xy 192.933201 69.543136) (xy 192.971049 69.507094) (xy 193.130667 69.280821) (xy 193.243296 69.027853) (xy 193.290441 68.820344)
+ (xy 193.301713 68.905338) (xy 193.391879 69.170124) (xy 193.478578 69.332325) (xy 193.727864 69.396058) (xy 194.543922 68.58)
+ (xy 194.838078 68.58) (xy 195.654136 69.396058) (xy 195.903422 69.332325) (xy 196.026897 69.081337) (xy 196.099034 68.811083)
+ (xy 196.117062 68.531949) (xy 196.080287 68.254662) (xy 195.990121 67.989876) (xy 195.903422 67.827675) (xy 195.654136 67.763942)
+ (xy 194.838078 68.58) (xy 194.543922 68.58) (xy 193.727864 67.763942) (xy 193.478578 67.827675) (xy 193.355103 68.078663)
+ (xy 193.287417 68.332241) (xy 193.255276 68.169912) (xy 193.149754 67.913899) (xy 192.996516 67.683257) (xy 192.930586 67.616864)
+ (xy 193.874942 67.616864) (xy 194.691 68.432922) (xy 195.507058 67.616864) (xy 195.443325 67.367578) (xy 195.192337 67.244103)
+ (xy 194.922083 67.171966) (xy 194.642949 67.153938) (xy 194.365662 67.190713) (xy 194.100876 67.280879) (xy 193.938675 67.367578)
+ (xy 193.874942 67.616864) (xy 192.930586 67.616864) (xy 192.801398 67.486771) (xy 192.571831 67.331926) (xy 192.31656 67.22462)
+ (xy 192.045308 67.168941) (xy 191.768408 67.167007) (xy 191.496405 67.218895) (xy 191.239661 67.322626) (xy 191.007954 67.47425)
+ (xy 190.810112 67.667992) (xy 190.653668 67.896472) (xy 190.544583 68.150988) (xy 190.499513 68.363025) (xy 190.461276 68.169912)
+ (xy 190.355754 67.913899) (xy 190.202516 67.683257) (xy 190.007398 67.486771) (xy 189.777831 67.331926) (xy 189.52256 67.22462)
+ (xy 189.251308 67.168941) (xy 188.974408 67.167007) (xy 188.702405 67.218895) (xy 188.445661 67.322626) (xy 188.213954 67.47425)
+ (xy 188.016112 67.667992) (xy 187.859668 67.896472) (xy 187.76888 68.108297) (xy 187.688754 67.913899) (xy 187.535516 67.683257)
+ (xy 187.340398 67.486771) (xy 187.110831 67.331926) (xy 186.85556 67.22462) (xy 186.584308 67.168941) (xy 186.307408 67.167007)
+ (xy 186.035405 67.218895) (xy 185.778661 67.322626) (xy 185.546954 67.47425) (xy 185.349112 67.667992) (xy 185.192668 67.896472)
+ (xy 185.083583 68.150988) (xy 185.057145 68.275367) (xy 185.057145 67.818) (xy 185.048891 67.71449) (xy 184.994522 67.538926)
+ (xy 184.936065 67.450214) (xy 185.147851 67.45465) (xy 185.420552 67.406566) (xy 185.678719 67.306429) (xy 185.91252 67.158055)
+ (xy 186.113049 66.967094) (xy 186.272667 66.740821) (xy 186.385296 66.487853) (xy 186.437433 66.258372) (xy 186.469131 66.431083)
+ (xy 186.571068 66.688545) (xy 186.721071 66.921304) (xy 186.913427 67.120495) (xy 187.140809 67.27853) (xy 187.394557 67.389389)
+ (xy 187.665005 67.448851) (xy 187.941851 67.45465) (xy 188.214552 67.406566) (xy 188.472719 67.306429) (xy 188.70652 67.158055)
+ (xy 188.907049 66.967094) (xy 189.066667 66.740821) (xy 189.168346 66.512448) (xy 189.238068 66.688545) (xy 189.388071 66.921304)
+ (xy 189.580427 67.120495) (xy 189.807809 67.27853) (xy 190.061557 67.389389) (xy 190.332005 67.448851) (xy 190.608851 67.45465)
+ (xy 190.881552 67.406566) (xy 191.139719 67.306429) (xy 191.37352 67.158055) (xy 191.574049 66.967094) (xy 191.733667 66.740821)
+ (xy 191.846296 66.487853) (xy 191.898433 66.258372) (xy 191.930131 66.431083) (xy 192.032068 66.688545) (xy 192.182071 66.921304)
+ (xy 192.374427 67.120495) (xy 192.601809 67.27853) (xy 192.855557 67.389389) (xy 193.126005 67.448851) (xy 193.402851 67.45465)
+ (xy 193.675552 67.406566) (xy 193.933719 67.306429) (xy 194.16752 67.158055) (xy 194.368049 66.967094) (xy 194.527667 66.740821)
+ (xy 194.640296 66.487853) (xy 194.693236 66.254831) (xy 199.371641 66.254831) (xy 199.462092 66.747661) (xy 199.646545 67.213536)
+ (xy 199.917974 67.634712) (xy 200.266041 67.995145) (xy 200.677487 68.281108) (xy 201.136641 68.481707) (xy 201.626014 68.589303)
+ (xy 202.126966 68.599796) (xy 202.620415 68.512788) (xy 203.087566 68.331592) (xy 203.510626 68.06311) (xy 203.873481 67.717568)
+ (xy 204.162309 67.308128) (xy 204.366109 66.850386) (xy 204.477119 66.361776) (xy 204.48511 65.789469) (xy 204.387787 65.29795)
+ (xy 204.34966 65.205447) (xy 217.216895 65.205447) (xy 217.260138 65.44106) (xy 217.348321 65.663787) (xy 217.478087 65.865143)
+ (xy 217.644491 66.03746) (xy 217.841196 66.174173) (xy 218.060709 66.270076) (xy 218.29467 66.321516) (xy 218.534166 66.326533)
+ (xy 218.770075 66.284935) (xy 218.993412 66.198309) (xy 219.167149 66.088051) (xy 222.093938 66.088051) (xy 222.130713 66.365338)
+ (xy 222.220879 66.630124) (xy 222.307578 66.792325) (xy 222.556864 66.856058) (xy 223.372922 66.04) (xy 223.667078 66.04)
+ (xy 224.483136 66.856058) (xy 224.732422 66.792325) (xy 224.855897 66.541337) (xy 224.928034 66.271083) (xy 224.946062 65.991949)
+ (xy 224.909287 65.714662) (xy 224.819121 65.449876) (xy 224.732422 65.287675) (xy 224.483136 65.223942) (xy 223.667078 66.04)
+ (xy 223.372922 66.04) (xy 222.556864 65.223942) (xy 222.307578 65.287675) (xy 222.184103 65.538663) (xy 222.111966 65.808917)
+ (xy 222.093938 66.088051) (xy 219.167149 66.088051) (xy 219.195669 66.069952) (xy 219.369143 65.904755) (xy 219.507227 65.709009)
+ (xy 219.60466 65.490171) (xy 219.657732 65.256575) (xy 219.661552 64.982966) (xy 219.615024 64.747979) (xy 219.523739 64.526506)
+ (xy 219.391175 64.326981) (xy 219.222381 64.157004) (xy 219.023786 64.023051) (xy 218.802955 63.930222) (xy 218.568299 63.882054)
+ (xy 218.328757 63.880382) (xy 218.093451 63.925268) (xy 217.871346 64.015005) (xy 217.6709 64.146173) (xy 217.499749 64.313776)
+ (xy 217.364412 64.511431) (xy 217.270044 64.731608) (xy 217.220239 64.965922) (xy 217.216895 65.205447) (xy 204.34966 65.205447)
+ (xy 204.196847 64.834696) (xy 203.919564 64.417351) (xy 203.566499 64.061813) (xy 203.1511 63.781623) (xy 202.68919 63.587454)
+ (xy 202.198363 63.486701) (xy 201.697313 63.483203) (xy 201.205127 63.577093) (xy 200.740551 63.764794) (xy 200.321281 64.039157)
+ (xy 199.963286 64.389731) (xy 199.680203 64.803163) (xy 199.482814 65.263707) (xy 199.378637 65.753819) (xy 199.371641 66.254831)
+ (xy 194.693236 66.254831) (xy 194.701644 66.217827) (xy 194.70606 65.901546) (xy 194.652276 65.629912) (xy 194.546754 65.373899)
+ (xy 194.393516 65.143257) (xy 194.198398 64.946771) (xy 193.968831 64.791926) (xy 193.71356 64.68462) (xy 193.442308 64.628941)
+ (xy 193.165408 64.627007) (xy 192.893405 64.678895) (xy 192.636661 64.782626) (xy 192.404954 64.93425) (xy 192.207112 65.127992)
+ (xy 192.050668 65.356472) (xy 191.941583 65.610988) (xy 191.896513 65.823025) (xy 191.858276 65.629912) (xy 191.752754 65.373899)
+ (xy 191.599516 65.143257) (xy 191.404398 64.946771) (xy 191.174831 64.791926) (xy 190.91956 64.68462) (xy 190.648308 64.628941)
+ (xy 190.371408 64.627007) (xy 190.099405 64.678895) (xy 189.842661 64.782626) (xy 189.610954 64.93425) (xy 189.413112 65.127992)
+ (xy 189.256668 65.356472) (xy 189.16588 65.568297) (xy 189.085754 65.373899) (xy 188.932516 65.143257) (xy 188.737398 64.946771)
+ (xy 188.507831 64.791926) (xy 188.25256 64.68462) (xy 187.981308 64.628941) (xy 187.704408 64.627007) (xy 187.432405 64.678895)
+ (xy 187.175661 64.782626) (xy 186.943954 64.93425) (xy 186.746112 65.127992) (xy 186.589668 65.356472) (xy 186.480583 65.610988)
+ (xy 186.435513 65.823025) (xy 186.397276 65.629912) (xy 186.291754 65.373899) (xy 186.138516 65.143257) (xy 185.943398 64.946771)
+ (xy 185.713831 64.791926) (xy 185.45856 64.68462) (xy 185.187308 64.628941) (xy 184.910408 64.627007) (xy 184.638405 64.678895)
+ (xy 184.381661 64.782626) (xy 184.149954 64.93425) (xy 183.952112 65.127992) (xy 183.795668 65.356472) (xy 183.686583 65.610988)
+ (xy 183.62901 65.881844) (xy 183.625144 66.158725) (xy 183.675131 66.431083) (xy 183.777068 66.688545) (xy 183.927071 66.921304)
+ (xy 184.119427 67.120495) (xy 184.183253 67.164855) (xy 182.88 67.164855) (xy 182.77649 67.173109) (xy 182.600926 67.227478)
+ (xy 182.447459 67.328606) (xy 182.328242 67.468484) (xy 182.252714 67.636038) (xy 182.226855 67.818) (xy 178.368016 67.818)
+ (xy 178.473481 67.717568) (xy 178.762309 67.308128) (xy 178.966109 66.850386) (xy 179.077119 66.361776) (xy 179.08511 65.789469)
+ (xy 178.987787 65.29795) (xy 178.796847 64.834696) (xy 178.519564 64.417351) (xy 178.166499 64.061813) (xy 177.7511 63.781623)
+ (xy 177.28919 63.587454) (xy 176.798363 63.486701) (xy 176.297313 63.483203) (xy 175.805127 63.577093) (xy 175.340551 63.764794)
+ (xy 174.921281 64.039157) (xy 174.563286 64.389731) (xy 174.280203 64.803163) (xy 174.082814 65.263707) (xy 173.978637 65.753819)
+ (xy 173.971641 66.254831) (xy 170.950612 66.254831) (xy 170.95711 65.789469) (xy 170.859787 65.29795) (xy 170.668847 64.834696)
+ (xy 170.391564 64.417351) (xy 170.038499 64.061813) (xy 169.6231 63.781623) (xy 169.16119 63.587454) (xy 168.670363 63.486701)
+ (xy 168.169313 63.483203) (xy 167.677127 63.577093) (xy 167.212551 63.764794) (xy 166.793281 64.039157) (xy 166.435286 64.389731)
+ (xy 166.152203 64.803163) (xy 165.954814 65.263707) (xy 165.850637 65.753819) (xy 165.843641 66.254831) (xy 161.165236 66.254831)
+ (xy 161.173644 66.217827) (xy 161.17806 65.901546) (xy 161.124276 65.629912) (xy 161.018754 65.373899) (xy 160.865516 65.143257)
+ (xy 160.670398 64.946771) (xy 160.440831 64.791926) (xy 160.18556 64.68462) (xy 159.914308 64.628941) (xy 159.637408 64.627007)
+ (xy 159.365405 64.678895) (xy 159.108661 64.782626) (xy 158.876954 64.93425) (xy 158.679112 65.127992) (xy 158.522668 65.356472)
+ (xy 158.413583 65.610988) (xy 158.368513 65.823025) (xy 158.330276 65.629912) (xy 158.224754 65.373899) (xy 158.071516 65.143257)
+ (xy 157.876398 64.946771) (xy 157.646831 64.791926) (xy 157.39156 64.68462) (xy 157.120308 64.628941) (xy 156.843408 64.627007)
+ (xy 156.571405 64.678895) (xy 156.314661 64.782626) (xy 156.082954 64.93425) (xy 155.885112 65.127992) (xy 155.728668 65.356472)
+ (xy 155.63788 65.568297) (xy 155.557754 65.373899) (xy 155.404516 65.143257) (xy 155.209398 64.946771) (xy 154.979831 64.791926)
+ (xy 154.72456 64.68462) (xy 154.453308 64.628941) (xy 154.176408 64.627007) (xy 153.904405 64.678895) (xy 153.647661 64.782626)
+ (xy 153.415954 64.93425) (xy 153.218112 65.127992) (xy 153.061668 65.356472) (xy 152.952583 65.610988) (xy 152.907513 65.823025)
+ (xy 152.869276 65.629912) (xy 152.763754 65.373899) (xy 152.610516 65.143257) (xy 152.415398 64.946771) (xy 152.185831 64.791926)
+ (xy 151.93056 64.68462) (xy 151.659308 64.628941) (xy 151.382408 64.627007) (xy 151.110405 64.678895) (xy 150.853661 64.782626)
+ (xy 150.621954 64.93425) (xy 150.424112 65.127992) (xy 150.267668 65.356472) (xy 150.158583 65.610988) (xy 150.10101 65.881844)
+ (xy 150.097144 66.158725) (xy 150.147131 66.431083) (xy 150.249068 66.688545) (xy 150.399071 66.921304) (xy 150.591427 67.120495)
+ (xy 150.655253 67.164855) (xy 149.352 67.164855) (xy 149.24849 67.173109) (xy 149.072926 67.227478) (xy 148.919459 67.328606)
+ (xy 148.800242 67.468484) (xy 148.724714 67.636038) (xy 148.698855 67.818) (xy 144.840016 67.818) (xy 144.945481 67.717568)
+ (xy 145.234309 67.308128) (xy 145.438109 66.850386) (xy 145.549119 66.361776) (xy 145.55711 65.789469) (xy 145.459787 65.29795)
+ (xy 145.268847 64.834696) (xy 144.991564 64.417351) (xy 144.638499 64.061813) (xy 144.2231 63.781623) (xy 143.76119 63.587454)
+ (xy 143.270363 63.486701) (xy 142.769313 63.483203) (xy 142.277127 63.577093) (xy 141.812551 63.764794) (xy 141.393281 64.039157)
+ (xy 141.035286 64.389731) (xy 140.752203 64.803163) (xy 140.554814 65.263707) (xy 140.450637 65.753819) (xy 140.443641 66.254831)
+ (xy 137.422612 66.254831) (xy 137.42911 65.789469) (xy 137.331787 65.29795) (xy 137.140847 64.834696) (xy 136.863564 64.417351)
+ (xy 136.510499 64.061813) (xy 136.0951 63.781623) (xy 135.63319 63.587454) (xy 135.142363 63.486701) (xy 134.641313 63.483203)
+ (xy 134.149127 63.577093) (xy 133.684551 63.764794) (xy 133.265281 64.039157) (xy 132.907286 64.389731) (xy 132.624203 64.803163)
+ (xy 132.426814 65.263707) (xy 132.322637 65.753819) (xy 132.315641 66.254831) (xy 127.637236 66.254831) (xy 127.645644 66.217827)
+ (xy 127.65006 65.901546) (xy 127.596276 65.629912) (xy 127.490754 65.373899) (xy 127.337516 65.143257) (xy 127.142398 64.946771)
+ (xy 126.912831 64.791926) (xy 126.65756 64.68462) (xy 126.386308 64.628941) (xy 126.109408 64.627007) (xy 125.837405 64.678895)
+ (xy 125.580661 64.782626) (xy 125.348954 64.93425) (xy 125.151112 65.127992) (xy 124.994668 65.356472) (xy 124.885583 65.610988)
+ (xy 124.840513 65.823025) (xy 124.802276 65.629912) (xy 124.696754 65.373899) (xy 124.543516 65.143257) (xy 124.348398 64.946771)
+ (xy 124.118831 64.791926) (xy 123.86356 64.68462) (xy 123.592308 64.628941) (xy 123.315408 64.627007) (xy 123.043405 64.678895)
+ (xy 122.786661 64.782626) (xy 122.554954 64.93425) (xy 122.357112 65.127992) (xy 122.200668 65.356472) (xy 122.10988 65.568297)
+ (xy 122.029754 65.373899) (xy 121.876516 65.143257) (xy 121.681398 64.946771) (xy 121.451831 64.791926) (xy 121.19656 64.68462)
+ (xy 120.925308 64.628941) (xy 120.648408 64.627007) (xy 120.376405 64.678895) (xy 120.119661 64.782626) (xy 119.887954 64.93425)
+ (xy 119.690112 65.127992) (xy 119.533668 65.356472) (xy 119.424583 65.610988) (xy 119.379513 65.823025) (xy 119.341276 65.629912)
+ (xy 119.235754 65.373899) (xy 119.082516 65.143257) (xy 118.887398 64.946771) (xy 118.657831 64.791926) (xy 118.40256 64.68462)
+ (xy 118.131308 64.628941) (xy 117.854408 64.627007) (xy 117.582405 64.678895) (xy 117.325661 64.782626) (xy 117.093954 64.93425)
+ (xy 116.896112 65.127992) (xy 116.739668 65.356472) (xy 116.630583 65.610988) (xy 116.57301 65.881844) (xy 116.569144 66.158725)
+ (xy 116.619131 66.431083) (xy 116.721068 66.688545) (xy 116.871071 66.921304) (xy 117.063427 67.120495) (xy 117.127253 67.164855)
+ (xy 115.824 67.164855) (xy 115.72049 67.173109) (xy 115.544926 67.227478) (xy 115.391459 67.328606) (xy 115.272242 67.468484)
+ (xy 115.196714 67.636038) (xy 115.170855 67.818) (xy 111.312016 67.818) (xy 111.417481 67.717568) (xy 111.706309 67.308128)
+ (xy 111.910109 66.850386) (xy 112.021119 66.361776) (xy 112.02911 65.789469) (xy 111.931787 65.29795) (xy 111.740847 64.834696)
+ (xy 111.463564 64.417351) (xy 111.110499 64.061813) (xy 110.6951 63.781623) (xy 110.23319 63.587454) (xy 109.742363 63.486701)
+ (xy 109.241313 63.483203) (xy 108.749127 63.577093) (xy 108.284551 63.764794) (xy 107.865281 64.039157) (xy 107.507286 64.389731)
+ (xy 107.224203 64.803163) (xy 107.026814 65.263707) (xy 106.922637 65.753819) (xy 106.915641 66.254831) (xy 104.0233 66.254831)
+ (xy 104.0233 64.463893) (xy 103.998013 64.336769) (xy 103.948412 64.21702) (xy 103.876402 64.10925) (xy 103.784751 64.017598)
+ (xy 103.67698 63.945588) (xy 103.557232 63.895987) (xy 103.430108 63.8707) (xy 101.328405 63.8707) (xy 101.548183 63.850256)
+ (xy 102.125615 63.678507) (xy 102.658445 63.397407) (xy 102.68615 63.378895) (xy 102.946835 62.961913) (xy 100.965 60.980078)
+ (xy 100.950858 60.994221) (xy 100.80378 60.847143) (xy 100.817922 60.833) (xy 101.112078 60.833) (xy 103.093913 62.814835)
+ (xy 103.216815 62.738) (xy 222.104855 62.738) (xy 222.104855 64.262) (xy 222.113109 64.36551) (xy 222.167478 64.541074)
+ (xy 222.268606 64.694541) (xy 222.408484 64.813758) (xy 222.576038 64.889286) (xy 222.745733 64.913402) (xy 222.703942 65.076864)
+ (xy 223.52 65.892922) (xy 224.336058 65.076864) (xy 224.294459 64.914152) (xy 224.38551 64.906891) (xy 224.561074 64.852522)
+ (xy 224.714541 64.751394) (xy 224.833758 64.611516) (xy 224.909286 64.443962) (xy 224.935145 64.262) (xy 224.935145 62.738)
+ (xy 224.926891 62.63449) (xy 224.872522 62.458926) (xy 224.771394 62.305459) (xy 224.631516 62.186242) (xy 224.463962 62.110714)
+ (xy 224.282 62.084855) (xy 222.758 62.084855) (xy 222.65449 62.093109) (xy 222.478926 62.147478) (xy 222.325459 62.248606)
+ (xy 222.206242 62.388484) (xy 222.130714 62.556038) (xy 222.104855 62.738) (xy 103.216815 62.738) (xy 103.510895 62.55415)
+ (xy 103.797756 62.024399) (xy 103.975756 61.448863) (xy 104.038054 60.84966) (xy 103.982256 60.249817) (xy 103.810507 59.672385)
+ (xy 103.529407 59.139555) (xy 103.510895 59.11185) (xy 103.093913 58.851165) (xy 101.112078 60.833) (xy 100.817922 60.833)
+ (xy 98.836087 58.851165) (xy 98.419105 59.11185) (xy 98.132244 59.641601) (xy 97.954244 60.217137) (xy 97.892457 60.811423)
+ (xy 97.838742 60.757331) (xy 97.342816 60.422825) (xy 97.305 60.406929) (xy 97.305 58.704087) (xy 98.983165 58.704087)
+ (xy 100.965 60.685922) (xy 102.946835 58.704087) (xy 102.68615 58.287105) (xy 102.156399 58.000244) (xy 101.580863 57.822244)
+ (xy 100.98166 57.759946) (xy 100.381817 57.815744) (xy 99.804385 57.987493) (xy 99.271555 58.268593) (xy 99.24385 58.287105)
+ (xy 98.983165 58.704087) (xy 97.305 58.704087) (xy 97.305 56.7205) (xy 227.18 56.7205)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 118.525221 139.431858) (xy 118.511078 139.446) (xy 118.525221 139.460143) (xy 118.378143 139.607221) (xy 118.364 139.593078)
+ (xy 118.349858 139.607221) (xy 118.20278 139.460143) (xy 118.216922 139.446) (xy 118.20278 139.431858) (xy 118.349858 139.28478)
+ (xy 118.364 139.298922) (xy 118.378143 139.28478)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 180.448855 131.064) (xy 180.457109 131.16751) (xy 180.511478 131.343074) (xy 180.612606 131.496541) (xy 180.752484 131.615758)
+ (xy 180.920038 131.691286) (xy 181.102 131.717145) (xy 182.626 131.717145) (xy 182.72951 131.708891) (xy 182.905074 131.654522)
+ (xy 183.058541 131.553394) (xy 183.177758 131.413516) (xy 183.253286 131.245962) (xy 183.267589 131.145316) (xy 183.292071 131.183304)
+ (xy 183.484427 131.382495) (xy 183.5381 131.419799) (xy 183.5381 135.49923) (xy 183.362926 135.553478) (xy 183.209459 135.654606)
+ (xy 183.090242 135.794484) (xy 183.014714 135.962038) (xy 182.990598 136.131733) (xy 182.827136 136.089942) (xy 182.011078 136.906)
+ (xy 182.827136 137.722058) (xy 182.989848 137.680459) (xy 182.997109 137.77151) (xy 183.051478 137.947074) (xy 183.152606 138.100541)
+ (xy 183.292484 138.219758) (xy 183.460038 138.295286) (xy 183.561608 138.30972) (xy 183.514954 138.34025) (xy 183.317112 138.533992)
+ (xy 183.160668 138.762472) (xy 183.13462 138.823246) (xy 183.116754 138.779899) (xy 182.963516 138.549257) (xy 182.768398 138.352771)
+ (xy 182.538831 138.197926) (xy 182.498949 138.181161) (xy 182.616325 138.118422) (xy 182.680058 137.869136) (xy 181.864 137.053078)
+ (xy 181.047942 137.869136) (xy 181.111675 138.118422) (xy 181.232861 138.17804) (xy 181.206661 138.188626) (xy 180.974954 138.34025)
+ (xy 180.777112 138.533992) (xy 180.620668 138.762472) (xy 180.59462 138.823246) (xy 180.576754 138.779899) (xy 180.423516 138.549257)
+ (xy 180.228398 138.352771) (xy 179.998831 138.197926) (xy 179.950434 138.177582) (xy 179.963719 138.172429) (xy 180.19752 138.024055)
+ (xy 180.398049 137.833094) (xy 180.557667 137.606821) (xy 180.587833 137.539067) (xy 180.651578 137.658325) (xy 180.900864 137.722058)
+ (xy 181.716922 136.906) (xy 180.900864 136.089942) (xy 180.651578 136.153675) (xy 180.591527 136.275741) (xy 180.576754 136.239899)
+ (xy 180.423516 136.009257) (xy 180.357586 135.942864) (xy 181.047942 135.942864) (xy 181.864 136.758922) (xy 182.680058 135.942864)
+ (xy 182.616325 135.693578) (xy 182.365337 135.570103) (xy 182.095083 135.497966) (xy 181.815949 135.479938) (xy 181.538662 135.516713)
+ (xy 181.273876 135.606879) (xy 181.111675 135.693578) (xy 181.047942 135.942864) (xy 180.357586 135.942864) (xy 180.228398 135.812771)
+ (xy 180.101 135.72684) (xy 180.101 130.369844) (xy 180.448855 130.021989)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 168.817221 124.826858) (xy 168.803078 124.841) (xy 168.817221 124.855143) (xy 168.670143 125.002221) (xy 168.656 124.988078)
+ (xy 168.641858 125.002221) (xy 168.49478 124.855143) (xy 168.508922 124.841) (xy 168.49478 124.826858) (xy 168.641858 124.67978)
+ (xy 168.656 124.693922) (xy 168.670143 124.67978)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 161.843366 116.847533) (xy 161.797954 116.87725) (xy 161.600112 117.070992) (xy 161.443668 117.299472) (xy 161.41762 117.360246)
+ (xy 161.399754 117.316899) (xy 161.246516 117.086257) (xy 161.051398 116.889771) (xy 160.821831 116.734926) (xy 160.56656 116.62762)
+ (xy 160.295308 116.571941) (xy 160.018408 116.570007) (xy 159.862578 116.599734) (xy 156.987 113.724156) (xy 156.987 112.094494)
+ )
+ )
+ )
+ (zone (net 102) (net_name GND) (layer Cuivre) (tstamp 53CD1A96) (hatch edge 0.508)
+ (connect_pads (clearance 0.3))
+ (min_thickness 0.3)
+ (fill yes (arc_segments 32) (thermal_gap 0.381) (thermal_bridge_width 0.381))
+ (polygon
+ (pts
+ (xy 71.7 56.3) (xy 228.2 56.3) (xy 228.2 146.7) (xy 71.7 146.7) (xy 71.7 146.4)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 203.958315 60.4448) (xy 224.031686 60.4448) (xy 224.031686 56.5205) (xy 227.9595 56.5205) (xy 227.9595 146.55)
+ (xy 71.85 146.55) (xy 71.85 141.687532) (xy 88.874743 141.687532) (xy 88.917032 141.889463) (xy 89.108284 141.992355)
+ (xy 89.315935 142.055959) (xy 89.532005 142.07783) (xy 89.748189 142.057128) (xy 89.95618 141.994648) (xy 90.147987 141.892791)
+ (xy 90.152968 141.889463) (xy 90.195257 141.687532) (xy 89.535 141.027276) (xy 88.874743 141.687532) (xy 71.85 141.687532)
+ (xy 71.85 140.967005) (xy 88.42717 140.967005) (xy 88.447872 141.183189) (xy 88.510352 141.39118) (xy 88.612209 141.582987)
+ (xy 88.615537 141.587968) (xy 88.817468 141.630257) (xy 89.477724 140.97) (xy 89.592276 140.97) (xy 90.252532 141.630257)
+ (xy 90.454463 141.587968) (xy 90.557355 141.396716) (xy 90.620959 141.189065) (xy 90.64283 140.972995) (xy 90.622128 140.756811)
+ (xy 90.559648 140.54882) (xy 90.457791 140.357013) (xy 90.454463 140.352032) (xy 90.252532 140.309743) (xy 89.592276 140.97)
+ (xy 89.477724 140.97) (xy 88.817468 140.309743) (xy 88.615537 140.352032) (xy 88.512645 140.543284) (xy 88.449041 140.750935)
+ (xy 88.42717 140.967005) (xy 71.85 140.967005) (xy 71.85 140.252468) (xy 88.874743 140.252468) (xy 89.535 140.912724)
+ (xy 90.148739 140.298985) (xy 109.948291 140.298985) (xy 110.013453 140.520415) (xy 110.237098 140.642293) (xy 110.480223 140.718199)
+ (xy 110.733485 140.745214) (xy 110.987151 140.722301) (xy 111.231473 140.650341) (xy 111.457061 140.532098) (xy 111.474547 140.520415)
+ (xy 111.539709 140.298985) (xy 110.744 139.503276) (xy 109.948291 140.298985) (xy 90.148739 140.298985) (xy 90.195257 140.252468)
+ (xy 90.152968 140.050537) (xy 89.961716 139.947645) (xy 89.754065 139.884041) (xy 89.537995 139.86217) (xy 89.321811 139.882872)
+ (xy 89.11382 139.945352) (xy 88.922013 140.047209) (xy 88.917032 140.050537) (xy 88.874743 140.252468) (xy 71.85 140.252468)
+ (xy 71.85 136.880908) (xy 75.113407 136.880908) (xy 75.156314 137.114689) (xy 75.243812 137.335683) (xy 75.372568 137.535474)
+ (xy 75.537678 137.70645) (xy 75.732853 137.8421) (xy 75.950659 137.937257) (xy 76.1828 137.988297) (xy 76.420433 137.993275)
+ (xy 76.654508 137.952001) (xy 76.876108 137.866048) (xy 77.076792 137.73869) (xy 77.248917 137.574777) (xy 77.385927 137.380554)
+ (xy 77.482602 137.163418) (xy 77.535261 136.931639) (xy 77.535969 136.880908) (xy 77.653407 136.880908) (xy 77.696314 137.114689)
+ (xy 77.783812 137.335683) (xy 77.912568 137.535474) (xy 78.077678 137.70645) (xy 78.272853 137.8421) (xy 78.490659 137.937257)
+ (xy 78.7228 137.988297) (xy 78.960433 137.993275) (xy 79.143237 137.961041) (xy 80.192098 139.009902) (xy 80.237846 139.04748)
+ (xy 80.283139 139.085485) (xy 80.286088 139.087106) (xy 80.288693 139.089246) (xy 80.340888 139.117233) (xy 80.39268 139.145706)
+ (xy 80.395887 139.146723) (xy 80.398859 139.148317) (xy 80.455471 139.165625) (xy 80.511833 139.183504) (xy 80.515181 139.18388)
+ (xy 80.518401 139.184864) (xy 80.57723 139.190839) (xy 80.636057 139.197438) (xy 80.642642 139.197484) (xy 80.642764 139.197496)
+ (xy 80.642877 139.197485) (xy 80.645 139.1975) (xy 82.63741 139.1975) (xy 82.773742 139.338676) (xy 82.93824 139.453005)
+ (xy 83.121812 139.533205) (xy 83.317465 139.576222) (xy 83.517748 139.580418) (xy 83.715031 139.545631) (xy 83.9018 139.473188)
+ (xy 83.96121 139.435485) (xy 109.444786 139.435485) (xy 109.467699 139.689151) (xy 109.539659 139.933473) (xy 109.657902 140.159061)
+ (xy 109.669585 140.176547) (xy 109.891015 140.241709) (xy 110.686724 139.446) (xy 110.801276 139.446) (xy 111.596985 140.241709)
+ (xy 111.818415 140.176547) (xy 111.940293 139.952902) (xy 112.016199 139.709777) (xy 112.033465 139.547908) (xy 112.070407 139.547908)
+ (xy 112.113314 139.781689) (xy 112.200812 140.002683) (xy 112.329568 140.202474) (xy 112.494678 140.37345) (xy 112.689853 140.5091)
+ (xy 112.907659 140.604257) (xy 113.1398 140.655297) (xy 113.377433 140.660275) (xy 113.611508 140.619001) (xy 113.833108 140.533048)
+ (xy 114.033792 140.40569) (xy 114.205917 140.241777) (xy 114.342927 140.047554) (xy 114.439602 139.830418) (xy 114.492261 139.598639)
+ (xy 114.492969 139.547908) (xy 114.610407 139.547908) (xy 114.653314 139.781689) (xy 114.740812 140.002683) (xy 114.869568 140.202474)
+ (xy 115.034678 140.37345) (xy 115.229853 140.5091) (xy 115.447659 140.604257) (xy 115.6798 140.655297) (xy 115.917433 140.660275)
+ (xy 116.151508 140.619001) (xy 116.373108 140.533048) (xy 116.573792 140.40569) (xy 116.685842 140.298985) (xy 117.568291 140.298985)
+ (xy 117.633453 140.520415) (xy 117.857098 140.642293) (xy 118.100223 140.718199) (xy 118.353485 140.745214) (xy 118.607151 140.722301)
+ (xy 118.851473 140.650341) (xy 119.077061 140.532098) (xy 119.094547 140.520415) (xy 119.159709 140.298985) (xy 118.364 139.503276)
+ (xy 117.568291 140.298985) (xy 116.685842 140.298985) (xy 116.745917 140.241777) (xy 116.882927 140.047554) (xy 116.979602 139.830418)
+ (xy 117.032261 139.598639) (xy 117.034539 139.435485) (xy 117.064786 139.435485) (xy 117.087699 139.689151) (xy 117.159659 139.933473)
+ (xy 117.277902 140.159061) (xy 117.289585 140.176547) (xy 117.511015 140.241709) (xy 118.306724 139.446) (xy 117.511015 138.650291)
+ (xy 117.289585 138.715453) (xy 117.167707 138.939098) (xy 117.091801 139.182223) (xy 117.064786 139.435485) (xy 117.034539 139.435485)
+ (xy 117.036052 139.327157) (xy 116.989885 139.093999) (xy 116.89931 138.874247) (xy 116.767777 138.676274) (xy 116.600296 138.50762)
+ (xy 116.403246 138.374708) (xy 116.184132 138.282601) (xy 115.951301 138.234808) (xy 115.713622 138.233148) (xy 115.480147 138.277686)
+ (xy 115.259768 138.366725) (xy 115.060882 138.496872) (xy 114.891062 138.663172) (xy 114.756778 138.85929) (xy 114.663143 139.077755)
+ (xy 114.613726 139.310246) (xy 114.610407 139.547908) (xy 114.492969 139.547908) (xy 114.496052 139.327157) (xy 114.449885 139.093999)
+ (xy 114.35931 138.874247) (xy 114.227777 138.676274) (xy 114.060296 138.50762) (xy 113.863246 138.374708) (xy 113.644132 138.282601)
+ (xy 113.411301 138.234808) (xy 113.173622 138.233148) (xy 112.940147 138.277686) (xy 112.719768 138.366725) (xy 112.520882 138.496872)
+ (xy 112.351062 138.663172) (xy 112.216778 138.85929) (xy 112.123143 139.077755) (xy 112.073726 139.310246) (xy 112.070407 139.547908)
+ (xy 112.033465 139.547908) (xy 112.043214 139.456515) (xy 112.020301 139.202849) (xy 111.948341 138.958527) (xy 111.830098 138.732939)
+ (xy 111.818415 138.715453) (xy 111.596985 138.650291) (xy 110.801276 139.446) (xy 110.686724 139.446) (xy 109.891015 138.650291)
+ (xy 109.669585 138.715453) (xy 109.547707 138.939098) (xy 109.471801 139.182223) (xy 109.444786 139.435485) (xy 83.96121 139.435485)
+ (xy 84.070941 139.365848) (xy 84.216012 139.227699) (xy 84.331487 139.064003) (xy 84.412967 138.880996) (xy 84.457349 138.685647)
+ (xy 84.458642 138.593015) (xy 109.948291 138.593015) (xy 110.744 139.388724) (xy 111.539709 138.593015) (xy 111.474547 138.371585)
+ (xy 111.250902 138.249707) (xy 111.007777 138.173801) (xy 110.754515 138.146786) (xy 110.500849 138.169699) (xy 110.256527 138.241659)
+ (xy 110.030939 138.359902) (xy 110.013453 138.371585) (xy 109.948291 138.593015) (xy 84.458642 138.593015) (xy 84.460544 138.456837)
+ (xy 84.421634 138.260325) (xy 84.345295 138.075114) (xy 84.234436 137.908258) (xy 84.093279 137.766112) (xy 83.927201 137.654091)
+ (xy 83.742527 137.576461) (xy 83.546293 137.53618) (xy 83.345971 137.534781) (xy 83.149193 137.572319) (xy 82.963453 137.647363)
+ (xy 82.795827 137.757054) (xy 82.652699 137.897215) (xy 82.639494 137.9165) (xy 80.910304 137.9165) (xy 80.047525 137.053721)
+ (xy 80.057933 137.007908) (xy 109.530407 137.007908) (xy 109.573314 137.241689) (xy 109.660812 137.462683) (xy 109.789568 137.662474)
+ (xy 109.954678 137.83345) (xy 110.149853 137.9691) (xy 110.367659 138.064257) (xy 110.5998 138.115297) (xy 110.837433 138.120275)
+ (xy 111.071508 138.079001) (xy 111.293108 137.993048) (xy 111.493792 137.86569) (xy 111.665917 137.701777) (xy 111.802927 137.507554)
+ (xy 111.899602 137.290418) (xy 111.952261 137.058639) (xy 111.952969 137.007908) (xy 112.070407 137.007908) (xy 112.113314 137.241689)
+ (xy 112.200812 137.462683) (xy 112.329568 137.662474) (xy 112.494678 137.83345) (xy 112.689853 137.9691) (xy 112.907659 138.064257)
+ (xy 113.1398 138.115297) (xy 113.377433 138.120275) (xy 113.611508 138.079001) (xy 113.833108 137.993048) (xy 114.033792 137.86569)
+ (xy 114.205917 137.701777) (xy 114.342927 137.507554) (xy 114.439602 137.290418) (xy 114.492261 137.058639) (xy 114.492969 137.007908)
+ (xy 114.610407 137.007908) (xy 114.653314 137.241689) (xy 114.740812 137.462683) (xy 114.869568 137.662474) (xy 115.034678 137.83345)
+ (xy 115.229853 137.9691) (xy 115.447659 138.064257) (xy 115.6798 138.115297) (xy 115.917433 138.120275) (xy 116.151508 138.079001)
+ (xy 116.373108 137.993048) (xy 116.573792 137.86569) (xy 116.745917 137.701777) (xy 116.882927 137.507554) (xy 116.979602 137.290418)
+ (xy 117.032261 137.058639) (xy 117.036052 136.787157) (xy 116.989885 136.553999) (xy 116.89931 136.334247) (xy 116.767777 136.136274)
+ (xy 116.600296 135.96762) (xy 116.403246 135.834708) (xy 116.184132 135.742601) (xy 115.951301 135.694808) (xy 115.713622 135.693148)
+ (xy 115.480147 135.737686) (xy 115.259768 135.826725) (xy 115.060882 135.956872) (xy 114.891062 136.123172) (xy 114.756778 136.31929)
+ (xy 114.663143 136.537755) (xy 114.613726 136.770246) (xy 114.610407 137.007908) (xy 114.492969 137.007908) (xy 114.496052 136.787157)
+ (xy 114.449885 136.553999) (xy 114.35931 136.334247) (xy 114.227777 136.136274) (xy 114.060296 135.96762) (xy 113.863246 135.834708)
+ (xy 113.644132 135.742601) (xy 113.411301 135.694808) (xy 113.173622 135.693148) (xy 112.940147 135.737686) (xy 112.719768 135.826725)
+ (xy 112.520882 135.956872) (xy 112.351062 136.123172) (xy 112.216778 136.31929) (xy 112.123143 136.537755) (xy 112.073726 136.770246)
+ (xy 112.070407 137.007908) (xy 111.952969 137.007908) (xy 111.956052 136.787157) (xy 111.909885 136.553999) (xy 111.81931 136.334247)
+ (xy 111.687777 136.136274) (xy 111.520296 135.96762) (xy 111.323246 135.834708) (xy 111.104132 135.742601) (xy 110.871301 135.694808)
+ (xy 110.633622 135.693148) (xy 110.400147 135.737686) (xy 110.179768 135.826725) (xy 109.980882 135.956872) (xy 109.811062 136.123172)
+ (xy 109.676778 136.31929) (xy 109.583143 136.537755) (xy 109.533726 136.770246) (xy 109.530407 137.007908) (xy 80.057933 137.007908)
+ (xy 80.075261 136.931639) (xy 80.079052 136.660157) (xy 80.032885 136.426999) (xy 79.94231 136.207247) (xy 79.810777 136.009274)
+ (xy 79.643296 135.84062) (xy 79.446246 135.707708) (xy 79.227132 135.615601) (xy 78.994301 135.567808) (xy 78.756622 135.566148)
+ (xy 78.523147 135.610686) (xy 78.302768 135.699725) (xy 78.103882 135.829872) (xy 77.934062 135.996172) (xy 77.799778 136.19229)
+ (xy 77.706143 136.410755) (xy 77.656726 136.643246) (xy 77.653407 136.880908) (xy 77.535969 136.880908) (xy 77.539052 136.660157)
+ (xy 77.492885 136.426999) (xy 77.40231 136.207247) (xy 77.270777 136.009274) (xy 77.103296 135.84062) (xy 76.906246 135.707708)
+ (xy 76.687132 135.615601) (xy 76.454301 135.567808) (xy 76.216622 135.566148) (xy 75.983147 135.610686) (xy 75.762768 135.699725)
+ (xy 75.563882 135.829872) (xy 75.394062 135.996172) (xy 75.259778 136.19229) (xy 75.166143 136.410755) (xy 75.116726 136.643246)
+ (xy 75.113407 136.880908) (xy 71.85 136.880908) (xy 71.85 135.091985) (xy 75.531291 135.091985) (xy 75.596453 135.313415)
+ (xy 75.820098 135.435293) (xy 76.063223 135.511199) (xy 76.316485 135.538214) (xy 76.570151 135.515301) (xy 76.814473 135.443341)
+ (xy 77.040061 135.325098) (xy 77.057547 135.313415) (xy 77.122709 135.091985) (xy 76.327 134.296276) (xy 75.531291 135.091985)
+ (xy 71.85 135.091985) (xy 71.85 134.228485) (xy 75.027786 134.228485) (xy 75.050699 134.482151) (xy 75.122659 134.726473)
+ (xy 75.240902 134.952061) (xy 75.252585 134.969547) (xy 75.474015 135.034709) (xy 76.269724 134.239) (xy 76.384276 134.239)
+ (xy 77.179985 135.034709) (xy 77.401415 134.969547) (xy 77.523293 134.745902) (xy 77.599199 134.502777) (xy 77.616465 134.340908)
+ (xy 77.653407 134.340908) (xy 77.696314 134.574689) (xy 77.783812 134.795683) (xy 77.912568 134.995474) (xy 78.077678 135.16645)
+ (xy 78.272853 135.3021) (xy 78.490659 135.397257) (xy 78.7228 135.448297) (xy 78.960433 135.453275) (xy 79.194508 135.412001)
+ (xy 79.416108 135.326048) (xy 79.616792 135.19869) (xy 79.788917 135.034777) (xy 79.880536 134.9049) (xy 82.661938 134.9049)
+ (xy 82.773742 135.020676) (xy 82.93824 135.135005) (xy 83.121812 135.215205) (xy 83.317465 135.258222) (xy 83.517748 135.262418)
+ (xy 83.715031 135.227631) (xy 83.9018 135.155188) (xy 84.070941 135.047848) (xy 84.216012 134.909699) (xy 84.219397 134.9049)
+ (xy 87.719992 134.9049) (xy 87.729314 134.955689) (xy 87.816812 135.176683) (xy 87.945568 135.376474) (xy 88.110678 135.54745)
+ (xy 88.305853 135.6831) (xy 88.523659 135.778257) (xy 88.7558 135.829297) (xy 88.993433 135.834275) (xy 89.227508 135.793001)
+ (xy 89.449108 135.707048) (xy 89.649792 135.57969) (xy 89.821917 135.415777) (xy 89.958927 135.221554) (xy 90.055602 135.004418)
+ (xy 90.108261 134.772639) (xy 90.112052 134.501157) (xy 90.065885 134.267999) (xy 89.97531 134.048247) (xy 89.848911 133.858)
+ (xy 90.225823 133.858) (xy 90.225823 135.382) (xy 90.231537 135.453661) (xy 90.269178 135.575205) (xy 90.339189 135.681451)
+ (xy 90.436028 135.763986) (xy 90.552026 135.816275) (xy 90.678 135.834177) (xy 92.202 135.834177) (xy 92.273661 135.828463)
+ (xy 92.395205 135.790822) (xy 92.501451 135.720811) (xy 92.583986 135.623972) (xy 92.636275 135.507974) (xy 92.654177 135.382)
+ (xy 92.654177 133.858) (xy 92.648463 133.786339) (xy 92.610822 133.664795) (xy 92.540811 133.558549) (xy 92.443972 133.476014)
+ (xy 92.327974 133.423725) (xy 92.202 133.405823) (xy 90.678 133.405823) (xy 90.606339 133.411537) (xy 90.484795 133.449178)
+ (xy 90.378549 133.519189) (xy 90.296014 133.616028) (xy 90.243725 133.732026) (xy 90.225823 133.858) (xy 89.848911 133.858)
+ (xy 89.843777 133.850274) (xy 89.676296 133.68162) (xy 89.479246 133.548708) (xy 89.260132 133.456601) (xy 89.027301 133.408808)
+ (xy 88.789622 133.407148) (xy 88.556147 133.451686) (xy 88.335768 133.540725) (xy 88.286294 133.5731) (xy 84.217397 133.5731)
+ (xy 84.093279 133.448112) (xy 83.927201 133.336091) (xy 83.742527 133.258461) (xy 83.546293 133.21818) (xy 83.345971 133.216781)
+ (xy 83.149193 133.254319) (xy 82.963453 133.329363) (xy 82.795827 133.439054) (xy 82.658943 133.5731) (xy 79.879759 133.5731)
+ (xy 79.810777 133.469274) (xy 79.643296 133.30062) (xy 79.446246 133.167708) (xy 79.227132 133.075601) (xy 78.994301 133.027808)
+ (xy 78.756622 133.026148) (xy 78.523147 133.070686) (xy 78.302768 133.159725) (xy 78.103882 133.289872) (xy 77.934062 133.456172)
+ (xy 77.799778 133.65229) (xy 77.706143 133.870755) (xy 77.656726 134.103246) (xy 77.653407 134.340908) (xy 77.616465 134.340908)
+ (xy 77.626214 134.249515) (xy 77.603301 133.995849) (xy 77.531341 133.751527) (xy 77.413098 133.525939) (xy 77.401415 133.508453)
+ (xy 77.179985 133.443291) (xy 76.384276 134.239) (xy 76.269724 134.239) (xy 75.474015 133.443291) (xy 75.252585 133.508453)
+ (xy 75.130707 133.732098) (xy 75.054801 133.975223) (xy 75.027786 134.228485) (xy 71.85 134.228485) (xy 71.85 133.386015)
+ (xy 75.531291 133.386015) (xy 76.327 134.181724) (xy 77.122709 133.386015) (xy 77.057547 133.164585) (xy 76.833902 133.042707)
+ (xy 76.590777 132.966801) (xy 76.337515 132.939786) (xy 76.083849 132.962699) (xy 75.839527 133.034659) (xy 75.613939 133.152902)
+ (xy 75.596453 133.164585) (xy 75.531291 133.386015) (xy 71.85 133.386015) (xy 71.85 131.800908) (xy 75.113407 131.800908)
+ (xy 75.156314 132.034689) (xy 75.243812 132.255683) (xy 75.372568 132.455474) (xy 75.537678 132.62645) (xy 75.732853 132.7621)
+ (xy 75.950659 132.857257) (xy 76.1828 132.908297) (xy 76.420433 132.913275) (xy 76.654508 132.872001) (xy 76.876108 132.786048)
+ (xy 77.076792 132.65869) (xy 77.248917 132.494777) (xy 77.385927 132.300554) (xy 77.482602 132.083418) (xy 77.535261 131.851639)
+ (xy 77.535969 131.800908) (xy 77.653407 131.800908) (xy 77.696314 132.034689) (xy 77.783812 132.255683) (xy 77.912568 132.455474)
+ (xy 78.077678 132.62645) (xy 78.272853 132.7621) (xy 78.490659 132.857257) (xy 78.7228 132.908297) (xy 78.960433 132.913275)
+ (xy 79.194508 132.872001) (xy 79.416108 132.786048) (xy 79.616792 132.65869) (xy 79.788917 132.494777) (xy 79.925927 132.300554)
+ (xy 80.022602 132.083418) (xy 80.075261 131.851639) (xy 80.079052 131.580157) (xy 80.032885 131.346999) (xy 79.94231 131.127247)
+ (xy 79.810777 130.929274) (xy 79.643296 130.76062) (xy 79.446246 130.627708) (xy 79.227132 130.535601) (xy 78.994301 130.487808)
+ (xy 78.756622 130.486148) (xy 78.523147 130.530686) (xy 78.302768 130.619725) (xy 78.103882 130.749872) (xy 77.934062 130.916172)
+ (xy 77.799778 131.11229) (xy 77.706143 131.330755) (xy 77.656726 131.563246) (xy 77.653407 131.800908) (xy 77.535969 131.800908)
+ (xy 77.539052 131.580157) (xy 77.492885 131.346999) (xy 77.40231 131.127247) (xy 77.270777 130.929274) (xy 77.103296 130.76062)
+ (xy 76.906246 130.627708) (xy 76.687132 130.535601) (xy 76.454301 130.487808) (xy 76.216622 130.486148) (xy 75.983147 130.530686)
+ (xy 75.762768 130.619725) (xy 75.563882 130.749872) (xy 75.394062 130.916172) (xy 75.259778 131.11229) (xy 75.166143 131.330755)
+ (xy 75.116726 131.563246) (xy 75.113407 131.800908) (xy 71.85 131.800908) (xy 71.85 129.260908) (xy 75.113407 129.260908)
+ (xy 75.156314 129.494689) (xy 75.243812 129.715683) (xy 75.372568 129.915474) (xy 75.537678 130.08645) (xy 75.732853 130.2221)
+ (xy 75.950659 130.317257) (xy 76.1828 130.368297) (xy 76.420433 130.373275) (xy 76.654508 130.332001) (xy 76.876108 130.246048)
+ (xy 77.076792 130.11869) (xy 77.188842 130.011985) (xy 78.071291 130.011985) (xy 78.136453 130.233415) (xy 78.360098 130.355293)
+ (xy 78.603223 130.431199) (xy 78.856485 130.458214) (xy 79.110151 130.435301) (xy 79.354473 130.363341) (xy 79.580061 130.245098)
+ (xy 79.597547 130.233415) (xy 79.662709 130.011985) (xy 78.867 129.216276) (xy 78.071291 130.011985) (xy 77.188842 130.011985)
+ (xy 77.248917 129.954777) (xy 77.385927 129.760554) (xy 77.482602 129.543418) (xy 77.535261 129.311639) (xy 77.537539 129.148485)
+ (xy 77.567786 129.148485) (xy 77.590699 129.402151) (xy 77.662659 129.646473) (xy 77.780902 129.872061) (xy 77.792585 129.889547)
+ (xy 78.014015 129.954709) (xy 78.809724 129.159) (xy 78.924276 129.159) (xy 79.719985 129.954709) (xy 79.941415 129.889547)
+ (xy 80.063293 129.665902) (xy 80.139199 129.422777) (xy 80.166214 129.169515) (xy 80.143301 128.915849) (xy 80.071341 128.671527)
+ (xy 79.953098 128.445939) (xy 79.941415 128.428453) (xy 79.719985 128.363291) (xy 78.924276 129.159) (xy 78.809724 129.159)
+ (xy 78.014015 128.363291) (xy 77.792585 128.428453) (xy 77.670707 128.652098) (xy 77.594801 128.895223) (xy 77.567786 129.148485)
+ (xy 77.537539 129.148485) (xy 77.539052 129.040157) (xy 77.492885 128.806999) (xy 77.40231 128.587247) (xy 77.270777 128.389274)
+ (xy 77.188098 128.306015) (xy 78.071291 128.306015) (xy 78.867 129.101724) (xy 79.662709 128.306015) (xy 79.597547 128.084585)
+ (xy 79.373902 127.962707) (xy 79.130777 127.886801) (xy 78.877515 127.859786) (xy 78.623849 127.882699) (xy 78.379527 127.954659)
+ (xy 78.153939 128.072902) (xy 78.136453 128.084585) (xy 78.071291 128.306015) (xy 77.188098 128.306015) (xy 77.103296 128.22062)
+ (xy 76.906246 128.087708) (xy 76.687132 127.995601) (xy 76.454301 127.947808) (xy 76.216622 127.946148) (xy 75.983147 127.990686)
+ (xy 75.762768 128.079725) (xy 75.563882 128.209872) (xy 75.394062 128.376172) (xy 75.259778 128.57229) (xy 75.166143 128.790755)
+ (xy 75.116726 129.023246) (xy 75.113407 129.260908) (xy 71.85 129.260908) (xy 71.85 126.720908) (xy 75.113407 126.720908)
+ (xy 75.156314 126.954689) (xy 75.243812 127.175683) (xy 75.372568 127.375474) (xy 75.537678 127.54645) (xy 75.732853 127.6821)
+ (xy 75.950659 127.777257) (xy 76.1828 127.828297) (xy 76.420433 127.833275) (xy 76.654508 127.792001) (xy 76.876108 127.706048)
+ (xy 77.076792 127.57869) (xy 77.248917 127.414777) (xy 77.385927 127.220554) (xy 77.482602 127.003418) (xy 77.535261 126.771639)
+ (xy 77.539052 126.500157) (xy 77.492885 126.266999) (xy 77.40231 126.047247) (xy 77.270777 125.849274) (xy 77.103296 125.68062)
+ (xy 76.906246 125.547708) (xy 76.687132 125.455601) (xy 76.454301 125.407808) (xy 76.216622 125.406148) (xy 75.983147 125.450686)
+ (xy 75.762768 125.539725) (xy 75.563882 125.669872) (xy 75.394062 125.836172) (xy 75.259778 126.03229) (xy 75.166143 126.250755)
+ (xy 75.116726 126.483246) (xy 75.113407 126.720908) (xy 71.85 126.720908) (xy 71.85 118.491) (xy 74.099 118.491)
+ (xy 74.099 122.428) (xy 74.104201 122.481043) (xy 74.108847 122.53414) (xy 74.109693 122.537051) (xy 74.109989 122.540073)
+ (xy 74.125402 122.591123) (xy 74.140264 122.64228) (xy 74.14166 122.644973) (xy 74.142537 122.647878) (xy 74.167565 122.694949)
+ (xy 74.192087 122.742257) (xy 74.193979 122.744627) (xy 74.195404 122.747307) (xy 74.229086 122.788605) (xy 74.262343 122.830265)
+ (xy 74.266511 122.834492) (xy 74.266578 122.834574) (xy 74.266653 122.834636) (xy 74.267999 122.836001) (xy 75.162043 123.730044)
+ (xy 75.116726 123.943246) (xy 75.113407 124.180908) (xy 75.156314 124.414689) (xy 75.243812 124.635683) (xy 75.372568 124.835474)
+ (xy 75.537678 125.00645) (xy 75.732853 125.1421) (xy 75.950659 125.237257) (xy 76.1828 125.288297) (xy 76.420433 125.293275)
+ (xy 76.654508 125.252001) (xy 76.876108 125.166048) (xy 77.029378 125.06878) (xy 77.029847 125.07414) (xy 77.030693 125.077051)
+ (xy 77.030989 125.080073) (xy 77.046402 125.131123) (xy 77.061264 125.18228) (xy 77.06266 125.184973) (xy 77.063537 125.187878)
+ (xy 77.088565 125.234949) (xy 77.113087 125.282257) (xy 77.114979 125.284627) (xy 77.116404 125.287307) (xy 77.150086 125.328605)
+ (xy 77.183343 125.370265) (xy 77.187511 125.374492) (xy 77.187578 125.374574) (xy 77.187653 125.374636) (xy 77.188999 125.376001)
+ (xy 77.569999 125.757) (xy 77.611186 125.790831) (xy 77.652014 125.82509) (xy 77.65467 125.82655) (xy 77.657017 125.828478)
+ (xy 77.704009 125.853675) (xy 77.750696 125.879341) (xy 77.753589 125.880259) (xy 77.756262 125.881692) (xy 77.807261 125.897285)
+ (xy 77.858035 125.913391) (xy 77.861046 125.913729) (xy 77.863951 125.914617) (xy 77.879284 125.916174) (xy 77.799778 126.03229)
+ (xy 77.706143 126.250755) (xy 77.656726 126.483246) (xy 77.653407 126.720908) (xy 77.696314 126.954689) (xy 77.783812 127.175683)
+ (xy 77.912568 127.375474) (xy 78.077678 127.54645) (xy 78.272853 127.6821) (xy 78.490659 127.777257) (xy 78.7228 127.828297)
+ (xy 78.960433 127.833275) (xy 79.194508 127.792001) (xy 79.416108 127.706048) (xy 79.616792 127.57869) (xy 79.788917 127.414777)
+ (xy 79.925927 127.220554) (xy 80.022602 127.003418) (xy 80.075261 126.771639) (xy 80.079052 126.500157) (xy 80.032885 126.266999)
+ (xy 79.94231 126.047247) (xy 79.890713 125.969587) (xy 122.10324 125.969587) (xy 122.150643 126.227864) (xy 122.247309 126.472016)
+ (xy 122.389557 126.692741) (xy 122.571968 126.881634) (xy 122.787595 127.031498) (xy 123.028224 127.136627) (xy 123.28469 127.193014)
+ (xy 123.547224 127.198514) (xy 123.805826 127.152915) (xy 124.050646 127.057955) (xy 124.27236 126.917252) (xy 124.462521 126.736164)
+ (xy 124.613887 126.521588) (xy 124.720693 126.281699) (xy 124.778869 126.025633) (xy 124.783058 125.725704) (xy 124.732053 125.468114)
+ (xy 124.631987 125.225336) (xy 124.486672 125.006618) (xy 124.301641 124.820291) (xy 124.083942 124.673451) (xy 123.841869 124.571693)
+ (xy 123.584641 124.518892) (xy 123.322056 124.517058) (xy 123.064115 124.566263) (xy 122.820645 124.664632) (xy 122.600918 124.808417)
+ (xy 122.413303 124.992143) (xy 122.264948 125.208811) (xy 122.161502 125.450168) (xy 122.106906 125.707021) (xy 122.10324 125.969587)
+ (xy 79.890713 125.969587) (xy 79.835785 125.886914) (xy 79.84328 125.884736) (xy 79.845973 125.88334) (xy 79.848878 125.882463)
+ (xy 79.895949 125.857435) (xy 79.943257 125.832913) (xy 79.945627 125.831021) (xy 79.948307 125.829596) (xy 79.989605 125.795914)
+ (xy 80.031265 125.762657) (xy 80.035492 125.758489) (xy 80.035574 125.758422) (xy 80.035636 125.758347) (xy 80.037001 125.757001)
+ (xy 81.942001 123.852) (xy 81.975836 123.810809) (xy 82.01009 123.769986) (xy 82.01155 123.76733) (xy 82.013478 123.764983)
+ (xy 82.038694 123.717956) (xy 82.064341 123.671304) (xy 82.065257 123.668416) (xy 82.066693 123.665738) (xy 82.082295 123.614705)
+ (xy 82.098391 123.563965) (xy 82.098729 123.560953) (xy 82.099617 123.558048) (xy 82.105003 123.505023) (xy 82.110944 123.452056)
+ (xy 82.110985 123.44612) (xy 82.110996 123.446014) (xy 82.110987 123.445915) (xy 82.111 123.444) (xy 82.111 120.889587)
+ (xy 122.10324 120.889587) (xy 122.150643 121.147864) (xy 122.247309 121.392016) (xy 122.389557 121.612741) (xy 122.571968 121.801634)
+ (xy 122.787595 121.951498) (xy 123.028224 122.056627) (xy 123.28469 122.113014) (xy 123.547224 122.118514) (xy 123.805826 122.072915)
+ (xy 124.050646 121.977955) (xy 124.27236 121.837252) (xy 124.462521 121.656164) (xy 124.613887 121.441588) (xy 124.720693 121.201699)
+ (xy 124.778869 120.945633) (xy 124.783058 120.645704) (xy 124.732053 120.388114) (xy 124.631987 120.145336) (xy 124.486672 119.926618)
+ (xy 124.301641 119.740291) (xy 124.083942 119.593451) (xy 123.841869 119.491693) (xy 123.584641 119.438892) (xy 123.322056 119.437058)
+ (xy 123.064115 119.486263) (xy 122.820645 119.584632) (xy 122.600918 119.728417) (xy 122.413303 119.912143) (xy 122.264948 120.128811)
+ (xy 122.161502 120.370168) (xy 122.106906 120.627021) (xy 122.10324 120.889587) (xy 82.111 120.889587) (xy 82.111 119.211891)
+ (xy 84.067157 119.211891) (xy 84.10332 119.408926) (xy 84.177065 119.595185) (xy 84.285583 119.763573) (xy 84.424742 119.907676)
+ (xy 84.58924 120.022005) (xy 84.772812 120.102205) (xy 84.968465 120.145222) (xy 85.168748 120.149418) (xy 85.366031 120.114631)
+ (xy 85.5528 120.042188) (xy 85.721941 119.934848) (xy 85.867012 119.796699) (xy 85.982487 119.633003) (xy 86.063967 119.449996)
+ (xy 86.108349 119.254647) (xy 86.111544 119.025837) (xy 86.095977 118.947212) (xy 100.196324 118.947212) (xy 100.227991 119.119751)
+ (xy 100.292568 119.282852) (xy 100.387594 119.430305) (xy 100.509452 119.556492) (xy 100.653498 119.656607) (xy 100.814247 119.726836)
+ (xy 100.985575 119.764505) (xy 101.160957 119.768179) (xy 101.333713 119.737717) (xy 101.497261 119.674281) (xy 101.645374 119.580286)
+ (xy 101.772408 119.459313) (xy 101.873526 119.315969) (xy 101.944876 119.155714) (xy 101.98374 118.984653) (xy 101.986538 118.78429)
+ (xy 101.952466 118.61221) (xy 101.885618 118.450026) (xy 101.788542 118.303914) (xy 101.664935 118.179441) (xy 101.519504 118.081347)
+ (xy 101.357791 118.013369) (xy 101.185953 117.978096) (xy 101.010537 117.976871) (xy 100.838224 118.009742) (xy 100.675577 118.075455)
+ (xy 100.528791 118.171509) (xy 100.403458 118.294244) (xy 100.304351 118.438986) (xy 100.235246 118.600221) (xy 100.198774 118.771809)
+ (xy 100.196324 118.947212) (xy 86.095977 118.947212) (xy 86.072634 118.829325) (xy 85.996295 118.644114) (xy 85.885436 118.477258)
+ (xy 85.744279 118.335112) (xy 85.578201 118.223091) (xy 85.393527 118.145461) (xy 85.197293 118.10518) (xy 84.996971 118.103781)
+ (xy 84.800193 118.141319) (xy 84.614453 118.216363) (xy 84.446827 118.326054) (xy 84.303699 118.466215) (xy 84.190521 118.631507)
+ (xy 84.111604 118.815635) (xy 84.069954 119.011583) (xy 84.067157 119.211891) (xy 82.111 119.211891) (xy 82.111 114.920002)
+ (xy 84.059001 112.972) (xy 85.598 112.972) (xy 85.651043 112.966799) (xy 85.70414 112.962153) (xy 85.707051 112.961307)
+ (xy 85.710073 112.961011) (xy 85.761123 112.945598) (xy 85.81228 112.930736) (xy 85.814973 112.92934) (xy 85.817878 112.928463)
+ (xy 85.864949 112.903435) (xy 85.912257 112.878913) (xy 85.914627 112.877021) (xy 85.917307 112.875596) (xy 85.958605 112.841914)
+ (xy 86.000265 112.808657) (xy 86.004492 112.804489) (xy 86.004574 112.804422) (xy 86.004636 112.804347) (xy 86.006001 112.803001)
+ (xy 86.736329 112.072673) (xy 86.734324 112.216212) (xy 86.765991 112.388751) (xy 86.830568 112.551852) (xy 86.925594 112.699305)
+ (xy 87.047452 112.825492) (xy 87.191498 112.925607) (xy 87.352247 112.995836) (xy 87.523575 113.033505) (xy 87.698957 113.037179)
+ (xy 87.708495 113.035497) (xy 89.761999 115.089) (xy 89.803159 115.122809) (xy 89.844014 115.15709) (xy 89.846674 115.158552)
+ (xy 89.849017 115.160477) (xy 89.895971 115.185653) (xy 89.942696 115.211341) (xy 89.945589 115.212259) (xy 89.948262 115.213692)
+ (xy 89.999261 115.229285) (xy 90.050035 115.245391) (xy 90.053046 115.245729) (xy 90.055951 115.246617) (xy 90.108982 115.252003)
+ (xy 90.161944 115.257944) (xy 90.16788 115.257985) (xy 90.167986 115.257996) (xy 90.168085 115.257987) (xy 90.17 115.258)
+ (xy 94.361 115.258) (xy 94.414043 115.252799) (xy 94.46714 115.248153) (xy 94.470051 115.247307) (xy 94.473073 115.247011)
+ (xy 94.524123 115.231598) (xy 94.57528 115.216736) (xy 94.577973 115.21534) (xy 94.580878 115.214463) (xy 94.627949 115.189435)
+ (xy 94.675257 115.164913) (xy 94.677627 115.163021) (xy 94.680307 115.161596) (xy 94.721605 115.127914) (xy 94.763265 115.094657)
+ (xy 94.767492 115.090489) (xy 94.767574 115.090422) (xy 94.767636 115.090347) (xy 94.769001 115.089001) (xy 94.864329 114.993673)
+ (xy 94.862324 115.137212) (xy 94.893991 115.309751) (xy 94.958568 115.472852) (xy 95.053594 115.620305) (xy 95.175452 115.746492)
+ (xy 95.242512 115.7931) (xy 93.853 115.7931) (xy 93.791783 115.799102) (xy 93.730507 115.804463) (xy 93.727143 115.80544)
+ (xy 93.723659 115.805782) (xy 93.664758 115.823565) (xy 93.605706 115.840722) (xy 93.6026 115.842332) (xy 93.599245 115.843345)
+ (xy 93.544901 115.87224) (xy 93.490325 115.90053) (xy 93.48759 115.902714) (xy 93.484497 115.904358) (xy 93.436822 115.94324)
+ (xy 93.388757 115.98161) (xy 93.383883 115.986416) (xy 93.383784 115.986497) (xy 93.383708 115.986589) (xy 93.382137 115.988138)
+ (xy 93.069176 116.3011) (xy 85.365825 116.3011) (xy 84.185188 115.120464) (xy 84.172466 115.05621) (xy 84.105618 114.894026)
+ (xy 84.008542 114.747914) (xy 83.884935 114.623441) (xy 83.739504 114.525347) (xy 83.577791 114.457369) (xy 83.405953 114.422096)
+ (xy 83.230537 114.420871) (xy 83.058224 114.453742) (xy 82.895577 114.519455) (xy 82.748791 114.615509) (xy 82.623458 114.738244)
+ (xy 82.524351 114.882986) (xy 82.455246 115.044221) (xy 82.418774 115.215809) (xy 82.416324 115.391212) (xy 82.447991 115.563751)
+ (xy 82.512568 115.726852) (xy 82.607594 115.874305) (xy 82.729452 116.000492) (xy 82.873498 116.100607) (xy 83.034247 116.170836)
+ (xy 83.205575 116.208505) (xy 83.380957 116.212179) (xy 83.391581 116.210306) (xy 84.619138 117.437863) (xy 84.666677 117.476912)
+ (xy 84.713788 117.516443) (xy 84.716857 117.51813) (xy 84.719563 117.520353) (xy 84.773791 117.54943) (xy 84.827674 117.579052)
+ (xy 84.83101 117.58011) (xy 84.834098 117.581766) (xy 84.892944 117.599757) (xy 84.951552 117.618348) (xy 84.955032 117.618738)
+ (xy 84.95838 117.619762) (xy 85.019578 117.625979) (xy 85.080703 117.632835) (xy 85.087547 117.632883) (xy 85.087676 117.632896)
+ (xy 85.087797 117.632885) (xy 85.09 117.6329) (xy 93.345 117.6329) (xy 93.406221 117.626897) (xy 93.467493 117.621537)
+ (xy 93.470857 117.62056) (xy 93.474341 117.620218) (xy 93.533196 117.602449) (xy 93.592294 117.585279) (xy 93.595405 117.583667)
+ (xy 93.598755 117.582655) (xy 93.653063 117.553778) (xy 93.707675 117.52547) (xy 93.71041 117.523286) (xy 93.713503 117.521642)
+ (xy 93.761202 117.48274) (xy 93.809242 117.44439) (xy 93.814111 117.439588) (xy 93.814216 117.439503) (xy 93.814296 117.439406)
+ (xy 93.815862 117.437862) (xy 94.128825 117.1249) (xy 95.000537 117.1249) (xy 94.970351 117.168986) (xy 94.901246 117.330221)
+ (xy 94.864774 117.501809) (xy 94.862324 117.677212) (xy 94.893991 117.849751) (xy 94.958568 118.012852) (xy 95.053594 118.160305)
+ (xy 95.175452 118.286492) (xy 95.319498 118.386607) (xy 95.480247 118.456836) (xy 95.651575 118.494505) (xy 95.826957 118.498179)
+ (xy 95.999713 118.467717) (xy 96.163261 118.404281) (xy 96.311374 118.310286) (xy 96.438408 118.189313) (xy 96.539526 118.045969)
+ (xy 96.610876 117.885714) (xy 96.64974 117.714653) (xy 96.652538 117.51429) (xy 96.618466 117.34221) (xy 96.551618 117.180026)
+ (xy 96.514993 117.1249) (xy 104.775 117.1249) (xy 104.836221 117.118897) (xy 104.897493 117.113537) (xy 104.900857 117.11256)
+ (xy 104.904341 117.112218) (xy 104.963196 117.094449) (xy 105.022294 117.077279) (xy 105.025405 117.075667) (xy 105.028755 117.074655)
+ (xy 105.083063 117.045778) (xy 105.137675 117.01747) (xy 105.14041 117.015286) (xy 105.143503 117.013642) (xy 105.191202 116.97474)
+ (xy 105.239242 116.93639) (xy 105.244111 116.931588) (xy 105.244216 116.931503) (xy 105.244296 116.931406) (xy 105.245862 116.929862)
+ (xy 106.320825 115.8549) (xy 116.971537 115.8549) (xy 116.941351 115.898986) (xy 116.872246 116.060221) (xy 116.835774 116.231809)
+ (xy 116.833324 116.407212) (xy 116.864991 116.579751) (xy 116.929568 116.742852) (xy 117.024594 116.890305) (xy 117.146452 117.016492)
+ (xy 117.290498 117.116607) (xy 117.451247 117.186836) (xy 117.622575 117.224505) (xy 117.797957 117.228179) (xy 117.970713 117.197717)
+ (xy 118.134261 117.134281) (xy 118.282374 117.040286) (xy 118.409408 116.919313) (xy 118.510526 116.775969) (xy 118.581876 116.615714)
+ (xy 118.62074 116.444653) (xy 118.623538 116.24429) (xy 118.589466 116.07221) (xy 118.522618 115.910026) (xy 118.485993 115.8549)
+ (xy 121.711088 115.8549) (xy 121.723594 115.874305) (xy 121.845452 116.000492) (xy 121.989498 116.100607) (xy 122.150247 116.170836)
+ (xy 122.321575 116.208505) (xy 122.496957 116.212179) (xy 122.669713 116.181717) (xy 122.833261 116.118281) (xy 122.981374 116.024286)
+ (xy 123.108408 115.903313) (xy 123.209526 115.759969) (xy 123.280876 115.599714) (xy 123.31974 115.428653) (xy 123.322538 115.22829)
+ (xy 123.288466 115.05621) (xy 123.221618 114.894026) (xy 123.124542 114.747914) (xy 123.000935 114.623441) (xy 122.855504 114.525347)
+ (xy 122.693791 114.457369) (xy 122.521953 114.422096) (xy 122.346537 114.420871) (xy 122.174224 114.453742) (xy 122.011577 114.519455)
+ (xy 122.006007 114.5231) (xy 118.194902 114.5231) (xy 119.492001 113.226) (xy 125.476 113.226) (xy 125.529043 113.220799)
+ (xy 125.58214 113.216153) (xy 125.585051 113.215307) (xy 125.588073 113.215011) (xy 125.639123 113.199598) (xy 125.69028 113.184736)
+ (xy 125.692973 113.18334) (xy 125.695878 113.182463) (xy 125.742949 113.157435) (xy 125.790257 113.132913) (xy 125.792627 113.131021)
+ (xy 125.795307 113.129596) (xy 125.836605 113.095914) (xy 125.878265 113.062657) (xy 125.882492 113.058489) (xy 125.882574 113.058422)
+ (xy 125.882636 113.058347) (xy 125.884001 113.057001) (xy 127.747002 111.194) (xy 128.800631 111.194) (xy 128.742577 111.217455)
+ (xy 128.595791 111.313509) (xy 128.470458 111.436244) (xy 128.371351 111.580986) (xy 128.302246 111.742221) (xy 128.265774 111.913809)
+ (xy 128.263324 112.089212) (xy 128.294991 112.261751) (xy 128.359568 112.424852) (xy 128.454594 112.572305) (xy 128.576452 112.698492)
+ (xy 128.582 112.702348) (xy 128.582 112.789785) (xy 128.490953 112.771096) (xy 128.315537 112.769871) (xy 128.143224 112.802742)
+ (xy 127.980577 112.868455) (xy 127.833791 112.964509) (xy 127.708458 113.087244) (xy 127.609351 113.231986) (xy 127.540246 113.393221)
+ (xy 127.503774 113.564809) (xy 127.501324 113.740212) (xy 127.532991 113.912751) (xy 127.597568 114.075852) (xy 127.692594 114.223305)
+ (xy 127.814452 114.349492) (xy 127.82 114.353348) (xy 127.82 124.333) (xy 127.825201 124.386043) (xy 127.829847 124.43914)
+ (xy 127.830693 124.442051) (xy 127.830989 124.445073) (xy 127.846402 124.496123) (xy 127.861264 124.54728) (xy 127.86266 124.549973)
+ (xy 127.863537 124.552878) (xy 127.888565 124.599949) (xy 127.913087 124.647257) (xy 127.914979 124.649627) (xy 127.916404 124.652307)
+ (xy 127.950086 124.693605) (xy 127.983343 124.735265) (xy 127.987511 124.739492) (xy 127.987578 124.739574) (xy 127.987653 124.739636)
+ (xy 127.988999 124.741001) (xy 134.877999 131.63) (xy 123.825 131.63) (xy 123.771957 131.635201) (xy 123.71886 131.639847)
+ (xy 123.715949 131.640693) (xy 123.712927 131.640989) (xy 123.661877 131.656402) (xy 123.61072 131.671264) (xy 123.608027 131.67266)
+ (xy 123.605122 131.673537) (xy 123.558051 131.698565) (xy 123.510743 131.723087) (xy 123.508373 131.724979) (xy 123.505693 131.726404)
+ (xy 123.464395 131.760086) (xy 123.422735 131.793343) (xy 123.418508 131.797511) (xy 123.418426 131.797578) (xy 123.418364 131.797653)
+ (xy 123.416999 131.798999) (xy 119.225999 135.989999) (xy 119.197262 136.024985) (xy 119.140296 135.96762) (xy 118.943246 135.834708)
+ (xy 118.724132 135.742601) (xy 118.491301 135.694808) (xy 118.253622 135.693148) (xy 118.020147 135.737686) (xy 117.799768 135.826725)
+ (xy 117.600882 135.956872) (xy 117.431062 136.123172) (xy 117.296778 136.31929) (xy 117.203143 136.537755) (xy 117.153726 136.770246)
+ (xy 117.150407 137.007908) (xy 117.193314 137.241689) (xy 117.280812 137.462683) (xy 117.409568 137.662474) (xy 117.574678 137.83345)
+ (xy 117.769853 137.9691) (xy 117.987659 138.064257) (xy 118.2198 138.115297) (xy 118.457433 138.120275) (xy 118.691508 138.079001)
+ (xy 118.913108 137.993048) (xy 119.057 137.901731) (xy 119.057 138.176) (xy 119.062201 138.229043) (xy 119.066847 138.28214)
+ (xy 119.067693 138.285051) (xy 119.067989 138.288073) (xy 119.083402 138.339123) (xy 119.09251 138.370475) (xy 118.870902 138.249707)
+ (xy 118.627777 138.173801) (xy 118.374515 138.146786) (xy 118.120849 138.169699) (xy 117.876527 138.241659) (xy 117.650939 138.359902)
+ (xy 117.633453 138.371585) (xy 117.568291 138.593015) (xy 118.364 139.388724) (xy 118.378142 139.374582) (xy 118.435418 139.431858)
+ (xy 118.421276 139.446) (xy 119.216985 140.241709) (xy 119.438415 140.176547) (xy 119.560293 139.952902) (xy 119.636199 139.709777)
+ (xy 119.663214 139.456515) (xy 119.640301 139.202849) (xy 119.568341 138.958527) (xy 119.532889 138.890891) (xy 119.739043 139.097045)
+ (xy 119.693726 139.310246) (xy 119.690407 139.547908) (xy 119.733314 139.781689) (xy 119.820812 140.002683) (xy 119.949568 140.202474)
+ (xy 120.114678 140.37345) (xy 120.309853 140.5091) (xy 120.527659 140.604257) (xy 120.7598 140.655297) (xy 120.997433 140.660275)
+ (xy 121.231508 140.619001) (xy 121.453108 140.533048) (xy 121.653792 140.40569) (xy 121.825917 140.241777) (xy 121.962927 140.047554)
+ (xy 122.059602 139.830418) (xy 122.112261 139.598639) (xy 122.116052 139.327157) (xy 122.069885 139.093999) (xy 121.97931 138.874247)
+ (xy 121.847777 138.676274) (xy 121.680296 138.50762) (xy 121.483246 138.374708) (xy 121.264132 138.282601) (xy 121.031301 138.234808)
+ (xy 120.793622 138.233148) (xy 120.560147 138.277686) (xy 120.554122 138.28012) (xy 120.211 137.936998) (xy 120.211 137.900395)
+ (xy 120.309853 137.9691) (xy 120.527659 138.064257) (xy 120.7598 138.115297) (xy 120.997433 138.120275) (xy 121.231508 138.079001)
+ (xy 121.453108 137.993048) (xy 121.597 137.901731) (xy 121.597 138.176) (xy 121.602201 138.229043) (xy 121.606847 138.28214)
+ (xy 121.607693 138.285051) (xy 121.607989 138.288073) (xy 121.623402 138.339123) (xy 121.638264 138.39028) (xy 121.63966 138.392973)
+ (xy 121.640537 138.395878) (xy 121.665565 138.442949) (xy 121.690087 138.490257) (xy 121.691979 138.492627) (xy 121.693404 138.495307)
+ (xy 121.727086 138.536605) (xy 121.760343 138.578265) (xy 121.764511 138.582492) (xy 121.764578 138.582574) (xy 121.764653 138.582636)
+ (xy 121.765999 138.584001) (xy 122.279043 139.097045) (xy 122.233726 139.310246) (xy 122.230407 139.547908) (xy 122.273314 139.781689)
+ (xy 122.360812 140.002683) (xy 122.489568 140.202474) (xy 122.654678 140.37345) (xy 122.849853 140.5091) (xy 123.067659 140.604257)
+ (xy 123.2998 140.655297) (xy 123.537433 140.660275) (xy 123.771508 140.619001) (xy 123.993108 140.533048) (xy 124.193792 140.40569)
+ (xy 124.365917 140.241777) (xy 124.502927 140.047554) (xy 124.599602 139.830418) (xy 124.652261 139.598639) (xy 124.652969 139.547908)
+ (xy 124.770407 139.547908) (xy 124.813314 139.781689) (xy 124.900812 140.002683) (xy 125.029568 140.202474) (xy 125.194678 140.37345)
+ (xy 125.389853 140.5091) (xy 125.607659 140.604257) (xy 125.8398 140.655297) (xy 126.077433 140.660275) (xy 126.311508 140.619001)
+ (xy 126.533108 140.533048) (xy 126.733792 140.40569) (xy 126.905917 140.241777) (xy 127.042927 140.047554) (xy 127.139602 139.830418)
+ (xy 127.192261 139.598639) (xy 127.192969 139.547908) (xy 127.310407 139.547908) (xy 127.353314 139.781689) (xy 127.440812 140.002683)
+ (xy 127.569568 140.202474) (xy 127.734678 140.37345) (xy 127.929853 140.5091) (xy 128.147659 140.604257) (xy 128.3798 140.655297)
+ (xy 128.617433 140.660275) (xy 128.851508 140.619001) (xy 129.073108 140.533048) (xy 129.273792 140.40569) (xy 129.445917 140.241777)
+ (xy 129.582927 140.047554) (xy 129.679602 139.830418) (xy 129.732261 139.598639) (xy 129.736052 139.327157) (xy 129.689885 139.093999)
+ (xy 129.59931 138.874247) (xy 129.467777 138.676274) (xy 129.300296 138.50762) (xy 129.103246 138.374708) (xy 128.884132 138.282601)
+ (xy 128.651301 138.234808) (xy 128.413622 138.233148) (xy 128.180147 138.277686) (xy 127.959768 138.366725) (xy 127.760882 138.496872)
+ (xy 127.591062 138.663172) (xy 127.456778 138.85929) (xy 127.363143 139.077755) (xy 127.313726 139.310246) (xy 127.310407 139.547908)
+ (xy 127.192969 139.547908) (xy 127.196052 139.327157) (xy 127.149885 139.093999) (xy 127.05931 138.874247) (xy 126.927777 138.676274)
+ (xy 126.760296 138.50762) (xy 126.563246 138.374708) (xy 126.344132 138.282601) (xy 126.111301 138.234808) (xy 125.873622 138.233148)
+ (xy 125.640147 138.277686) (xy 125.419768 138.366725) (xy 125.220882 138.496872) (xy 125.051062 138.663172) (xy 124.916778 138.85929)
+ (xy 124.823143 139.077755) (xy 124.773726 139.310246) (xy 124.770407 139.547908) (xy 124.652969 139.547908) (xy 124.656052 139.327157)
+ (xy 124.609885 139.093999) (xy 124.51931 138.874247) (xy 124.387777 138.676274) (xy 124.220296 138.50762) (xy 124.023246 138.374708)
+ (xy 123.804132 138.282601) (xy 123.571301 138.234808) (xy 123.333622 138.233148) (xy 123.100147 138.277686) (xy 123.094122 138.28012)
+ (xy 122.751 137.936998) (xy 122.751 137.900395) (xy 122.849853 137.9691) (xy 123.067659 138.064257) (xy 123.2998 138.115297)
+ (xy 123.537433 138.120275) (xy 123.771508 138.079001) (xy 123.993108 137.993048) (xy 124.193792 137.86569) (xy 124.365917 137.701777)
+ (xy 124.502927 137.507554) (xy 124.599602 137.290418) (xy 124.652261 137.058639) (xy 124.652969 137.007908) (xy 124.770407 137.007908)
+ (xy 124.813314 137.241689) (xy 124.900812 137.462683) (xy 125.029568 137.662474) (xy 125.194678 137.83345) (xy 125.389853 137.9691)
+ (xy 125.607659 138.064257) (xy 125.8398 138.115297) (xy 126.077433 138.120275) (xy 126.311508 138.079001) (xy 126.533108 137.993048)
+ (xy 126.733792 137.86569) (xy 126.905917 137.701777) (xy 127.042927 137.507554) (xy 127.139602 137.290418) (xy 127.192261 137.058639)
+ (xy 127.192969 137.007908) (xy 127.310407 137.007908) (xy 127.353314 137.241689) (xy 127.440812 137.462683) (xy 127.569568 137.662474)
+ (xy 127.734678 137.83345) (xy 127.929853 137.9691) (xy 128.147659 138.064257) (xy 128.3798 138.115297) (xy 128.617433 138.120275)
+ (xy 128.851508 138.079001) (xy 129.073108 137.993048) (xy 129.273792 137.86569) (xy 129.445917 137.701777) (xy 129.582927 137.507554)
+ (xy 129.679602 137.290418) (xy 129.732261 137.058639) (xy 129.736052 136.787157) (xy 129.689885 136.553999) (xy 129.59931 136.334247)
+ (xy 129.467777 136.136274) (xy 129.300296 135.96762) (xy 129.103246 135.834708) (xy 128.884132 135.742601) (xy 128.651301 135.694808)
+ (xy 128.413622 135.693148) (xy 128.180147 135.737686) (xy 127.959768 135.826725) (xy 127.760882 135.956872) (xy 127.591062 136.123172)
+ (xy 127.456778 136.31929) (xy 127.363143 136.537755) (xy 127.313726 136.770246) (xy 127.310407 137.007908) (xy 127.192969 137.007908)
+ (xy 127.196052 136.787157) (xy 127.149885 136.553999) (xy 127.05931 136.334247) (xy 126.927777 136.136274) (xy 126.760296 135.96762)
+ (xy 126.563246 135.834708) (xy 126.344132 135.742601) (xy 126.111301 135.694808) (xy 125.873622 135.693148) (xy 125.640147 135.737686)
+ (xy 125.419768 135.826725) (xy 125.220882 135.956872) (xy 125.051062 136.123172) (xy 124.916778 136.31929) (xy 124.823143 136.537755)
+ (xy 124.773726 136.770246) (xy 124.770407 137.007908) (xy 124.652969 137.007908) (xy 124.656052 136.787157) (xy 124.610235 136.555767)
+ (xy 126.858002 134.308) (xy 131.575998 134.308) (xy 131.544999 134.338999) (xy 131.511144 134.380215) (xy 131.47691 134.421014)
+ (xy 131.47545 134.42367) (xy 131.473522 134.426017) (xy 131.448306 134.473044) (xy 131.422659 134.519696) (xy 131.421743 134.522584)
+ (xy 131.420307 134.525262) (xy 131.404701 134.576307) (xy 131.388609 134.627035) (xy 131.388271 134.630045) (xy 131.387383 134.632951)
+ (xy 131.381997 134.685982) (xy 131.376056 134.738944) (xy 131.376015 134.74488) (xy 131.376004 134.744986) (xy 131.376013 134.745085)
+ (xy 131.376 134.747) (xy 131.376 135.509) (xy 131.381201 135.562043) (xy 131.385847 135.61514) (xy 131.386693 135.618051)
+ (xy 131.386989 135.621073) (xy 131.402402 135.672123) (xy 131.417264 135.72328) (xy 131.41866 135.725973) (xy 131.419537 135.728878)
+ (xy 131.427611 135.744064) (xy 131.424132 135.742601) (xy 131.191301 135.694808) (xy 130.953622 135.693148) (xy 130.720147 135.737686)
+ (xy 130.499768 135.826725) (xy 130.300882 135.956872) (xy 130.131062 136.123172) (xy 129.996778 136.31929) (xy 129.903143 136.537755)
+ (xy 129.853726 136.770246) (xy 129.850407 137.007908) (xy 129.893314 137.241689) (xy 129.980812 137.462683) (xy 130.109568 137.662474)
+ (xy 130.274678 137.83345) (xy 130.469853 137.9691) (xy 130.687659 138.064257) (xy 130.9198 138.115297) (xy 131.157433 138.120275)
+ (xy 131.391508 138.079001) (xy 131.613108 137.993048) (xy 131.757 137.901731) (xy 131.757 138.451436) (xy 131.643246 138.374708)
+ (xy 131.424132 138.282601) (xy 131.191301 138.234808) (xy 130.953622 138.233148) (xy 130.720147 138.277686) (xy 130.499768 138.366725)
+ (xy 130.300882 138.496872) (xy 130.131062 138.663172) (xy 129.996778 138.85929) (xy 129.903143 139.077755) (xy 129.853726 139.310246)
+ (xy 129.850407 139.547908) (xy 129.893314 139.781689) (xy 129.980812 140.002683) (xy 130.109568 140.202474) (xy 130.274678 140.37345)
+ (xy 130.469853 140.5091) (xy 130.687659 140.604257) (xy 130.9198 140.655297) (xy 131.157433 140.660275) (xy 131.391508 140.619001)
+ (xy 131.613108 140.533048) (xy 131.813792 140.40569) (xy 131.896741 140.326699) (xy 131.920343 140.356265) (xy 131.924511 140.360492)
+ (xy 131.924578 140.360574) (xy 131.924653 140.360636) (xy 131.925999 140.362001) (xy 133.195999 141.632) (xy 133.237186 141.665831)
+ (xy 133.278014 141.70009) (xy 133.28067 141.70155) (xy 133.283017 141.703478) (xy 133.330009 141.728675) (xy 133.376696 141.754341)
+ (xy 133.379589 141.755259) (xy 133.382262 141.756692) (xy 133.433261 141.772285) (xy 133.484035 141.788391) (xy 133.487046 141.788729)
+ (xy 133.489951 141.789617) (xy 133.542982 141.795003) (xy 133.595944 141.800944) (xy 133.60188 141.800985) (xy 133.601986 141.800996)
+ (xy 133.602085 141.800987) (xy 133.604 141.801) (xy 166.878 141.801) (xy 166.931043 141.795799) (xy 166.98414 141.791153)
+ (xy 166.987051 141.790307) (xy 166.990073 141.790011) (xy 167.041123 141.774598) (xy 167.09228 141.759736) (xy 167.094973 141.75834)
+ (xy 167.097878 141.757463) (xy 167.144949 141.732435) (xy 167.192257 141.707913) (xy 167.194627 141.706021) (xy 167.197307 141.704596)
+ (xy 167.238605 141.670914) (xy 167.280265 141.637657) (xy 167.284492 141.633489) (xy 167.284574 141.633422) (xy 167.284636 141.633347)
+ (xy 167.286001 141.632001) (xy 168.302001 140.616001) (xy 168.335856 140.574785) (xy 168.37009 140.533986) (xy 168.37155 140.53133)
+ (xy 168.373478 140.528983) (xy 168.398694 140.481956) (xy 168.424341 140.435304) (xy 168.425257 140.432416) (xy 168.426693 140.429738)
+ (xy 168.431771 140.41313) (xy 168.569853 140.5091) (xy 168.787659 140.604257) (xy 169.0198 140.655297) (xy 169.257433 140.660275)
+ (xy 169.491508 140.619001) (xy 169.713108 140.533048) (xy 169.913792 140.40569) (xy 170.085917 140.241777) (xy 170.222927 140.047554)
+ (xy 170.319602 139.830418) (xy 170.372261 139.598639) (xy 170.372969 139.547908) (xy 170.490407 139.547908) (xy 170.533314 139.781689)
+ (xy 170.620812 140.002683) (xy 170.749568 140.202474) (xy 170.914678 140.37345) (xy 171.109853 140.5091) (xy 171.327659 140.604257)
+ (xy 171.5598 140.655297) (xy 171.797433 140.660275) (xy 172.031508 140.619001) (xy 172.253108 140.533048) (xy 172.453792 140.40569)
+ (xy 172.625917 140.241777) (xy 172.762927 140.047554) (xy 172.859602 139.830418) (xy 172.912261 139.598639) (xy 172.912969 139.547908)
+ (xy 173.030407 139.547908) (xy 173.073314 139.781689) (xy 173.160812 140.002683) (xy 173.289568 140.202474) (xy 173.454678 140.37345)
+ (xy 173.649853 140.5091) (xy 173.867659 140.604257) (xy 174.0998 140.655297) (xy 174.337433 140.660275) (xy 174.571508 140.619001)
+ (xy 174.793108 140.533048) (xy 174.993792 140.40569) (xy 175.165917 140.241777) (xy 175.302927 140.047554) (xy 175.399602 139.830418)
+ (xy 175.452261 139.598639) (xy 175.452969 139.547908) (xy 175.570407 139.547908) (xy 175.613314 139.781689) (xy 175.700812 140.002683)
+ (xy 175.829568 140.202474) (xy 175.994678 140.37345) (xy 176.189853 140.5091) (xy 176.407659 140.604257) (xy 176.6398 140.655297)
+ (xy 176.877433 140.660275) (xy 177.111508 140.619001) (xy 177.333108 140.533048) (xy 177.533792 140.40569) (xy 177.705917 140.241777)
+ (xy 177.842927 140.047554) (xy 177.939602 139.830418) (xy 177.992261 139.598639) (xy 177.992969 139.547908) (xy 178.110407 139.547908)
+ (xy 178.153314 139.781689) (xy 178.240812 140.002683) (xy 178.369568 140.202474) (xy 178.534678 140.37345) (xy 178.729853 140.5091)
+ (xy 178.947659 140.604257) (xy 179.1798 140.655297) (xy 179.417433 140.660275) (xy 179.651508 140.619001) (xy 179.873108 140.533048)
+ (xy 180.073792 140.40569) (xy 180.245917 140.241777) (xy 180.382927 140.047554) (xy 180.479602 139.830418) (xy 180.532261 139.598639)
+ (xy 180.532969 139.547908) (xy 180.650407 139.547908) (xy 180.693314 139.781689) (xy 180.780812 140.002683) (xy 180.909568 140.202474)
+ (xy 181.074678 140.37345) (xy 181.269853 140.5091) (xy 181.487659 140.604257) (xy 181.7198 140.655297) (xy 181.957433 140.660275)
+ (xy 182.191508 140.619001) (xy 182.413108 140.533048) (xy 182.613792 140.40569) (xy 182.785917 140.241777) (xy 182.922927 140.047554)
+ (xy 183.019602 139.830418) (xy 183.072261 139.598639) (xy 183.072969 139.547908) (xy 183.190407 139.547908) (xy 183.233314 139.781689)
+ (xy 183.320812 140.002683) (xy 183.449568 140.202474) (xy 183.614678 140.37345) (xy 183.809853 140.5091) (xy 184.027659 140.604257)
+ (xy 184.2598 140.655297) (xy 184.497433 140.660275) (xy 184.731508 140.619001) (xy 184.953108 140.533048) (xy 185.153792 140.40569)
+ (xy 185.325917 140.241777) (xy 185.462927 140.047554) (xy 185.559602 139.830418) (xy 185.612261 139.598639) (xy 185.616052 139.327157)
+ (xy 185.569885 139.093999) (xy 185.47931 138.874247) (xy 185.347777 138.676274) (xy 185.180296 138.50762) (xy 184.983246 138.374708)
+ (xy 184.764132 138.282601) (xy 184.531301 138.234808) (xy 184.293622 138.233148) (xy 184.060147 138.277686) (xy 183.839768 138.366725)
+ (xy 183.640882 138.496872) (xy 183.471062 138.663172) (xy 183.336778 138.85929) (xy 183.243143 139.077755) (xy 183.193726 139.310246)
+ (xy 183.190407 139.547908) (xy 183.072969 139.547908) (xy 183.076052 139.327157) (xy 183.029885 139.093999) (xy 182.93931 138.874247)
+ (xy 182.807777 138.676274) (xy 182.640296 138.50762) (xy 182.443246 138.374708) (xy 182.224132 138.282601) (xy 181.991301 138.234808)
+ (xy 181.753622 138.233148) (xy 181.520147 138.277686) (xy 181.299768 138.366725) (xy 181.100882 138.496872) (xy 180.931062 138.663172)
+ (xy 180.796778 138.85929) (xy 180.703143 139.077755) (xy 180.653726 139.310246) (xy 180.650407 139.547908) (xy 180.532969 139.547908)
+ (xy 180.536052 139.327157) (xy 180.489885 139.093999) (xy 180.39931 138.874247) (xy 180.267777 138.676274) (xy 180.100296 138.50762)
+ (xy 179.903246 138.374708) (xy 179.684132 138.282601) (xy 179.451301 138.234808) (xy 179.213622 138.233148) (xy 178.980147 138.277686)
+ (xy 178.759768 138.366725) (xy 178.560882 138.496872) (xy 178.391062 138.663172) (xy 178.256778 138.85929) (xy 178.163143 139.077755)
+ (xy 178.113726 139.310246) (xy 178.110407 139.547908) (xy 177.992969 139.547908) (xy 177.996052 139.327157) (xy 177.949885 139.093999)
+ (xy 177.85931 138.874247) (xy 177.727777 138.676274) (xy 177.560296 138.50762) (xy 177.363246 138.374708) (xy 177.144132 138.282601)
+ (xy 176.911301 138.234808) (xy 176.673622 138.233148) (xy 176.440147 138.277686) (xy 176.219768 138.366725) (xy 176.020882 138.496872)
+ (xy 175.851062 138.663172) (xy 175.716778 138.85929) (xy 175.623143 139.077755) (xy 175.573726 139.310246) (xy 175.570407 139.547908)
+ (xy 175.452969 139.547908) (xy 175.456052 139.327157) (xy 175.409885 139.093999) (xy 175.31931 138.874247) (xy 175.187777 138.676274)
+ (xy 175.020296 138.50762) (xy 174.823246 138.374708) (xy 174.604132 138.282601) (xy 174.371301 138.234808) (xy 174.133622 138.233148)
+ (xy 173.900147 138.277686) (xy 173.679768 138.366725) (xy 173.480882 138.496872) (xy 173.311062 138.663172) (xy 173.176778 138.85929)
+ (xy 173.083143 139.077755) (xy 173.033726 139.310246) (xy 173.030407 139.547908) (xy 172.912969 139.547908) (xy 172.916052 139.327157)
+ (xy 172.869885 139.093999) (xy 172.77931 138.874247) (xy 172.647777 138.676274) (xy 172.480296 138.50762) (xy 172.283246 138.374708)
+ (xy 172.064132 138.282601) (xy 171.831301 138.234808) (xy 171.593622 138.233148) (xy 171.360147 138.277686) (xy 171.139768 138.366725)
+ (xy 170.940882 138.496872) (xy 170.771062 138.663172) (xy 170.636778 138.85929) (xy 170.543143 139.077755) (xy 170.493726 139.310246)
+ (xy 170.490407 139.547908) (xy 170.372969 139.547908) (xy 170.376052 139.327157) (xy 170.329885 139.093999) (xy 170.23931 138.874247)
+ (xy 170.107777 138.676274) (xy 169.940296 138.50762) (xy 169.743246 138.374708) (xy 169.524132 138.282601) (xy 169.291301 138.234808)
+ (xy 169.053622 138.233148) (xy 168.820147 138.277686) (xy 168.599768 138.366725) (xy 168.471 138.450988) (xy 168.471 138.415002)
+ (xy 168.815601 138.070401) (xy 169.0198 138.115297) (xy 169.257433 138.120275) (xy 169.491508 138.079001) (xy 169.713108 137.993048)
+ (xy 169.913792 137.86569) (xy 170.085917 137.701777) (xy 170.222927 137.507554) (xy 170.319602 137.290418) (xy 170.372261 137.058639)
+ (xy 170.372969 137.007908) (xy 170.490407 137.007908) (xy 170.533314 137.241689) (xy 170.620812 137.462683) (xy 170.749568 137.662474)
+ (xy 170.914678 137.83345) (xy 171.109853 137.9691) (xy 171.327659 138.064257) (xy 171.5598 138.115297) (xy 171.797433 138.120275)
+ (xy 172.031508 138.079001) (xy 172.253108 137.993048) (xy 172.453792 137.86569) (xy 172.625917 137.701777) (xy 172.762927 137.507554)
+ (xy 172.859602 137.290418) (xy 172.912261 137.058639) (xy 172.912969 137.007908) (xy 173.030407 137.007908) (xy 173.073314 137.241689)
+ (xy 173.160812 137.462683) (xy 173.289568 137.662474) (xy 173.454678 137.83345) (xy 173.649853 137.9691) (xy 173.867659 138.064257)
+ (xy 174.0998 138.115297) (xy 174.337433 138.120275) (xy 174.571508 138.079001) (xy 174.793108 137.993048) (xy 174.993792 137.86569)
+ (xy 175.165917 137.701777) (xy 175.302927 137.507554) (xy 175.399602 137.290418) (xy 175.452261 137.058639) (xy 175.452969 137.007908)
+ (xy 175.570407 137.007908) (xy 175.613314 137.241689) (xy 175.700812 137.462683) (xy 175.829568 137.662474) (xy 175.994678 137.83345)
+ (xy 176.189853 137.9691) (xy 176.407659 138.064257) (xy 176.6398 138.115297) (xy 176.877433 138.120275) (xy 177.111508 138.079001)
+ (xy 177.333108 137.993048) (xy 177.533792 137.86569) (xy 177.705917 137.701777) (xy 177.842927 137.507554) (xy 177.939602 137.290418)
+ (xy 177.992261 137.058639) (xy 177.992969 137.007908) (xy 178.110407 137.007908) (xy 178.153314 137.241689) (xy 178.240812 137.462683)
+ (xy 178.369568 137.662474) (xy 178.534678 137.83345) (xy 178.729853 137.9691) (xy 178.947659 138.064257) (xy 179.1798 138.115297)
+ (xy 179.417433 138.120275) (xy 179.651508 138.079001) (xy 179.873108 137.993048) (xy 180.073792 137.86569) (xy 180.185842 137.758985)
+ (xy 181.068291 137.758985) (xy 181.133453 137.980415) (xy 181.357098 138.102293) (xy 181.600223 138.178199) (xy 181.853485 138.205214)
+ (xy 182.107151 138.182301) (xy 182.351473 138.110341) (xy 182.577061 137.992098) (xy 182.594547 137.980415) (xy 182.659709 137.758985)
+ (xy 181.864 136.963276) (xy 181.068291 137.758985) (xy 180.185842 137.758985) (xy 180.245917 137.701777) (xy 180.382927 137.507554)
+ (xy 180.479602 137.290418) (xy 180.532261 137.058639) (xy 180.534539 136.895485) (xy 180.564786 136.895485) (xy 180.587699 137.149151)
+ (xy 180.659659 137.393473) (xy 180.777902 137.619061) (xy 180.789585 137.636547) (xy 181.011015 137.701709) (xy 181.806724 136.906)
+ (xy 181.921276 136.906) (xy 182.716985 137.701709) (xy 182.938415 137.636547) (xy 183.060293 137.412902) (xy 183.136199 137.169777)
+ (xy 183.163214 136.916515) (xy 183.140301 136.662849) (xy 183.068341 136.418527) (xy 182.950098 136.192939) (xy 182.938415 136.175453)
+ (xy 182.831534 136.144) (xy 183.189823 136.144) (xy 183.189823 137.668) (xy 183.195537 137.739661) (xy 183.233178 137.861205)
+ (xy 183.303189 137.967451) (xy 183.400028 138.049986) (xy 183.516026 138.102275) (xy 183.642 138.120177) (xy 185.166 138.120177)
+ (xy 185.237661 138.114463) (xy 185.359205 138.076822) (xy 185.465451 138.006811) (xy 185.547986 137.909972) (xy 185.600275 137.793974)
+ (xy 185.618177 137.668) (xy 185.618177 137.261908) (xy 221.036407 137.261908) (xy 221.079314 137.495689) (xy 221.166812 137.716683)
+ (xy 221.295568 137.916474) (xy 221.460678 138.08745) (xy 221.655853 138.2231) (xy 221.873659 138.318257) (xy 222.1058 138.369297)
+ (xy 222.343433 138.374275) (xy 222.577508 138.333001) (xy 222.799108 138.247048) (xy 222.999792 138.11969) (xy 223.111842 138.012985)
+ (xy 223.994291 138.012985) (xy 224.059453 138.234415) (xy 224.283098 138.356293) (xy 224.526223 138.432199) (xy 224.779485 138.459214)
+ (xy 225.033151 138.436301) (xy 225.277473 138.364341) (xy 225.503061 138.246098) (xy 225.520547 138.234415) (xy 225.585709 138.012985)
+ (xy 224.79 137.217276) (xy 223.994291 138.012985) (xy 223.111842 138.012985) (xy 223.171917 137.955777) (xy 223.308927 137.761554)
+ (xy 223.405602 137.544418) (xy 223.458261 137.312639) (xy 223.460539 137.149485) (xy 223.490786 137.149485) (xy 223.513699 137.403151)
+ (xy 223.585659 137.647473) (xy 223.703902 137.873061) (xy 223.715585 137.890547) (xy 223.937015 137.955709) (xy 224.732724 137.16)
+ (xy 224.847276 137.16) (xy 225.642985 137.955709) (xy 225.864415 137.890547) (xy 225.986293 137.666902) (xy 226.062199 137.423777)
+ (xy 226.089214 137.170515) (xy 226.066301 136.916849) (xy 225.994341 136.672527) (xy 225.876098 136.446939) (xy 225.864415 136.429453)
+ (xy 225.642985 136.364291) (xy 224.847276 137.16) (xy 224.732724 137.16) (xy 223.937015 136.364291) (xy 223.715585 136.429453)
+ (xy 223.593707 136.653098) (xy 223.517801 136.896223) (xy 223.490786 137.149485) (xy 223.460539 137.149485) (xy 223.462052 137.041157)
+ (xy 223.415885 136.807999) (xy 223.32531 136.588247) (xy 223.193777 136.390274) (xy 223.111098 136.307015) (xy 223.994291 136.307015)
+ (xy 224.79 137.102724) (xy 225.585709 136.307015) (xy 225.520547 136.085585) (xy 225.296902 135.963707) (xy 225.053777 135.887801)
+ (xy 224.800515 135.860786) (xy 224.546849 135.883699) (xy 224.302527 135.955659) (xy 224.076939 136.073902) (xy 224.059453 136.085585)
+ (xy 223.994291 136.307015) (xy 223.111098 136.307015) (xy 223.026296 136.22162) (xy 222.829246 136.088708) (xy 222.610132 135.996601)
+ (xy 222.377301 135.948808) (xy 222.139622 135.947148) (xy 221.906147 135.991686) (xy 221.685768 136.080725) (xy 221.486882 136.210872)
+ (xy 221.317062 136.377172) (xy 221.182778 136.57329) (xy 221.089143 136.791755) (xy 221.039726 137.024246) (xy 221.036407 137.261908)
+ (xy 185.618177 137.261908) (xy 185.618177 136.144) (xy 185.612463 136.072339) (xy 185.574822 135.950795) (xy 185.504811 135.844549)
+ (xy 185.407972 135.762014) (xy 185.291974 135.709725) (xy 185.166 135.691823) (xy 183.642 135.691823) (xy 183.570339 135.697537)
+ (xy 183.448795 135.735178) (xy 183.342549 135.805189) (xy 183.260014 135.902028) (xy 183.207725 136.018026) (xy 183.189823 136.144)
+ (xy 182.831534 136.144) (xy 182.716985 136.110291) (xy 181.921276 136.906) (xy 181.806724 136.906) (xy 181.011015 136.110291)
+ (xy 180.789585 136.175453) (xy 180.667707 136.399098) (xy 180.591801 136.642223) (xy 180.564786 136.895485) (xy 180.534539 136.895485)
+ (xy 180.536052 136.787157) (xy 180.489885 136.553999) (xy 180.39931 136.334247) (xy 180.267777 136.136274) (xy 180.185098 136.053015)
+ (xy 181.068291 136.053015) (xy 181.864 136.848724) (xy 182.659709 136.053015) (xy 182.594547 135.831585) (xy 182.370902 135.709707)
+ (xy 182.127777 135.633801) (xy 181.874515 135.606786) (xy 181.620849 135.629699) (xy 181.376527 135.701659) (xy 181.150939 135.819902)
+ (xy 181.133453 135.831585) (xy 181.068291 136.053015) (xy 180.185098 136.053015) (xy 180.100296 135.96762) (xy 179.903246 135.834708)
+ (xy 179.684132 135.742601) (xy 179.451301 135.694808) (xy 179.213622 135.693148) (xy 178.980147 135.737686) (xy 178.759768 135.826725)
+ (xy 178.560882 135.956872) (xy 178.391062 136.123172) (xy 178.256778 136.31929) (xy 178.163143 136.537755) (xy 178.113726 136.770246)
+ (xy 178.110407 137.007908) (xy 177.992969 137.007908) (xy 177.996052 136.787157) (xy 177.949885 136.553999) (xy 177.85931 136.334247)
+ (xy 177.727777 136.136274) (xy 177.560296 135.96762) (xy 177.363246 135.834708) (xy 177.144132 135.742601) (xy 176.911301 135.694808)
+ (xy 176.673622 135.693148) (xy 176.440147 135.737686) (xy 176.219768 135.826725) (xy 176.020882 135.956872) (xy 175.851062 136.123172)
+ (xy 175.716778 136.31929) (xy 175.623143 136.537755) (xy 175.573726 136.770246) (xy 175.570407 137.007908) (xy 175.452969 137.007908)
+ (xy 175.456052 136.787157) (xy 175.409885 136.553999) (xy 175.31931 136.334247) (xy 175.187777 136.136274) (xy 175.020296 135.96762)
+ (xy 174.823246 135.834708) (xy 174.604132 135.742601) (xy 174.371301 135.694808) (xy 174.133622 135.693148) (xy 173.900147 135.737686)
+ (xy 173.679768 135.826725) (xy 173.480882 135.956872) (xy 173.311062 136.123172) (xy 173.176778 136.31929) (xy 173.083143 136.537755)
+ (xy 173.033726 136.770246) (xy 173.030407 137.007908) (xy 172.912969 137.007908) (xy 172.916052 136.787157) (xy 172.869885 136.553999)
+ (xy 172.77931 136.334247) (xy 172.647777 136.136274) (xy 172.480296 135.96762) (xy 172.283246 135.834708) (xy 172.064132 135.742601)
+ (xy 171.831301 135.694808) (xy 171.593622 135.693148) (xy 171.360147 135.737686) (xy 171.139768 135.826725) (xy 170.940882 135.956872)
+ (xy 170.771062 136.123172) (xy 170.636778 136.31929) (xy 170.543143 136.537755) (xy 170.493726 136.770246) (xy 170.490407 137.007908)
+ (xy 170.372969 137.007908) (xy 170.376052 136.787157) (xy 170.329885 136.553999) (xy 170.23931 136.334247) (xy 170.107777 136.136274)
+ (xy 169.940296 135.96762) (xy 169.743246 135.834708) (xy 169.524132 135.742601) (xy 169.291301 135.694808) (xy 169.053622 135.693148)
+ (xy 168.820147 135.737686) (xy 168.599768 135.826725) (xy 168.400882 135.956872) (xy 168.231062 136.123172) (xy 168.096778 136.31929)
+ (xy 168.003143 136.537755) (xy 167.953726 136.770246) (xy 167.950407 137.007908) (xy 167.993314 137.241689) (xy 167.998702 137.255297)
+ (xy 167.485999 137.767999) (xy 167.452144 137.809215) (xy 167.41791 137.850014) (xy 167.41645 137.85267) (xy 167.414522 137.855017)
+ (xy 167.389306 137.902044) (xy 167.363659 137.948696) (xy 167.362743 137.951584) (xy 167.361307 137.954262) (xy 167.345701 138.005307)
+ (xy 167.329609 138.056035) (xy 167.329271 138.059045) (xy 167.328383 138.061951) (xy 167.322997 138.114982) (xy 167.317056 138.167944)
+ (xy 167.317015 138.17388) (xy 167.317004 138.173986) (xy 167.317013 138.174085) (xy 167.317 138.176) (xy 167.317 138.451436)
+ (xy 167.203246 138.374708) (xy 166.984132 138.282601) (xy 166.751301 138.234808) (xy 166.513622 138.233148) (xy 166.280147 138.277686)
+ (xy 166.059768 138.366725) (xy 165.931 138.450988) (xy 165.931 138.415002) (xy 166.275601 138.070401) (xy 166.4798 138.115297)
+ (xy 166.717433 138.120275) (xy 166.951508 138.079001) (xy 167.173108 137.993048) (xy 167.373792 137.86569) (xy 167.545917 137.701777)
+ (xy 167.682927 137.507554) (xy 167.779602 137.290418) (xy 167.832261 137.058639) (xy 167.836052 136.787157) (xy 167.789885 136.553999)
+ (xy 167.69931 136.334247) (xy 167.567777 136.136274) (xy 167.400296 135.96762) (xy 167.203246 135.834708) (xy 166.984132 135.742601)
+ (xy 166.751301 135.694808) (xy 166.513622 135.693148) (xy 166.280147 135.737686) (xy 166.059768 135.826725) (xy 165.860882 135.956872)
+ (xy 165.691062 136.123172) (xy 165.556778 136.31929) (xy 165.463143 136.537755) (xy 165.413726 136.770246) (xy 165.410407 137.007908)
+ (xy 165.453314 137.241689) (xy 165.458702 137.255297) (xy 164.945999 137.767999) (xy 164.912144 137.809215) (xy 164.87791 137.850014)
+ (xy 164.87645 137.85267) (xy 164.874522 137.855017) (xy 164.849306 137.902044) (xy 164.823659 137.948696) (xy 164.822743 137.951584)
+ (xy 164.821307 137.954262) (xy 164.805701 138.005307) (xy 164.789609 138.056035) (xy 164.789271 138.059045) (xy 164.788383 138.061951)
+ (xy 164.782997 138.114982) (xy 164.777056 138.167944) (xy 164.777015 138.17388) (xy 164.777004 138.173986) (xy 164.777013 138.174085)
+ (xy 164.777 138.176) (xy 164.777 138.451436) (xy 164.663246 138.374708) (xy 164.444132 138.282601) (xy 164.211301 138.234808)
+ (xy 163.973622 138.233148) (xy 163.740147 138.277686) (xy 163.519768 138.366725) (xy 163.320882 138.496872) (xy 163.151062 138.663172)
+ (xy 163.016778 138.85929) (xy 162.923143 139.077755) (xy 162.873726 139.310246) (xy 162.870407 139.547908) (xy 162.913314 139.781689)
+ (xy 163.000812 140.002683) (xy 163.088662 140.139) (xy 162.538419 140.139) (xy 162.602927 140.047554) (xy 162.699602 139.830418)
+ (xy 162.752261 139.598639) (xy 162.756052 139.327157) (xy 162.709885 139.093999) (xy 162.61931 138.874247) (xy 162.487777 138.676274)
+ (xy 162.320296 138.50762) (xy 162.123246 138.374708) (xy 161.904132 138.282601) (xy 161.671301 138.234808) (xy 161.433622 138.233148)
+ (xy 161.200147 138.277686) (xy 160.979768 138.366725) (xy 160.780882 138.496872) (xy 160.611062 138.663172) (xy 160.476778 138.85929)
+ (xy 160.383143 139.077755) (xy 160.333726 139.310246) (xy 160.330407 139.547908) (xy 160.373314 139.781689) (xy 160.460812 140.002683)
+ (xy 160.548662 140.139) (xy 159.998419 140.139) (xy 160.062927 140.047554) (xy 160.159602 139.830418) (xy 160.212261 139.598639)
+ (xy 160.216052 139.327157) (xy 160.169885 139.093999) (xy 160.07931 138.874247) (xy 159.947777 138.676274) (xy 159.780296 138.50762)
+ (xy 159.583246 138.374708) (xy 159.364132 138.282601) (xy 159.131301 138.234808) (xy 158.893622 138.233148) (xy 158.759697 138.258696)
+ (xy 158.516846 138.015844) (xy 158.627659 138.064257) (xy 158.8598 138.115297) (xy 159.097433 138.120275) (xy 159.331508 138.079001)
+ (xy 159.553108 137.993048) (xy 159.753792 137.86569) (xy 159.925917 137.701777) (xy 160.062927 137.507554) (xy 160.159602 137.290418)
+ (xy 160.212261 137.058639) (xy 160.212969 137.007908) (xy 160.330407 137.007908) (xy 160.373314 137.241689) (xy 160.460812 137.462683)
+ (xy 160.589568 137.662474) (xy 160.754678 137.83345) (xy 160.949853 137.9691) (xy 161.167659 138.064257) (xy 161.3998 138.115297)
+ (xy 161.637433 138.120275) (xy 161.871508 138.079001) (xy 162.093108 137.993048) (xy 162.293792 137.86569) (xy 162.465917 137.701777)
+ (xy 162.602927 137.507554) (xy 162.699602 137.290418) (xy 162.752261 137.058639) (xy 162.752969 137.007908) (xy 162.870407 137.007908)
+ (xy 162.913314 137.241689) (xy 163.000812 137.462683) (xy 163.129568 137.662474) (xy 163.294678 137.83345) (xy 163.489853 137.9691)
+ (xy 163.707659 138.064257) (xy 163.9398 138.115297) (xy 164.177433 138.120275) (xy 164.411508 138.079001) (xy 164.633108 137.993048)
+ (xy 164.833792 137.86569) (xy 165.005917 137.701777) (xy 165.142927 137.507554) (xy 165.239602 137.290418) (xy 165.292261 137.058639)
+ (xy 165.296052 136.787157) (xy 165.249885 136.553999) (xy 165.15931 136.334247) (xy 165.027777 136.136274) (xy 164.860296 135.96762)
+ (xy 164.663246 135.834708) (xy 164.444132 135.742601) (xy 164.211301 135.694808) (xy 163.973622 135.693148) (xy 163.740147 135.737686)
+ (xy 163.519768 135.826725) (xy 163.320882 135.956872) (xy 163.151062 136.123172) (xy 163.016778 136.31929) (xy 162.923143 136.537755)
+ (xy 162.873726 136.770246) (xy 162.870407 137.007908) (xy 162.752969 137.007908) (xy 162.756052 136.787157) (xy 162.709885 136.553999)
+ (xy 162.61931 136.334247) (xy 162.487777 136.136274) (xy 162.320296 135.96762) (xy 162.123246 135.834708) (xy 161.904132 135.742601)
+ (xy 161.671301 135.694808) (xy 161.433622 135.693148) (xy 161.200147 135.737686) (xy 160.979768 135.826725) (xy 160.780882 135.956872)
+ (xy 160.611062 136.123172) (xy 160.476778 136.31929) (xy 160.383143 136.537755) (xy 160.333726 136.770246) (xy 160.330407 137.007908)
+ (xy 160.212969 137.007908) (xy 160.216052 136.787157) (xy 160.169885 136.553999) (xy 160.07931 136.334247) (xy 159.947777 136.136274)
+ (xy 159.780296 135.96762) (xy 159.583246 135.834708) (xy 159.364132 135.742601) (xy 159.131301 135.694808) (xy 158.893622 135.693148)
+ (xy 158.660147 135.737686) (xy 158.439768 135.826725) (xy 158.301697 135.917076) (xy 158.301153 135.91086) (xy 158.300307 135.907949)
+ (xy 158.300011 135.904927) (xy 158.284598 135.853877) (xy 158.269736 135.80272) (xy 158.26834 135.800027) (xy 158.267463 135.797122)
+ (xy 158.242414 135.750012) (xy 158.217912 135.702743) (xy 158.216023 135.700376) (xy 158.214596 135.697693) (xy 158.180891 135.656368)
+ (xy 158.147657 135.614735) (xy 158.143492 135.610512) (xy 158.143422 135.610426) (xy 158.143342 135.61036) (xy 158.142 135.608999)
+ (xy 157.25491 134.721908) (xy 205.796407 134.721908) (xy 205.839314 134.955689) (xy 205.926812 135.176683) (xy 206.055568 135.376474)
+ (xy 206.220678 135.54745) (xy 206.415853 135.6831) (xy 206.633659 135.778257) (xy 206.8658 135.829297) (xy 207.103433 135.834275)
+ (xy 207.337508 135.793001) (xy 207.559108 135.707048) (xy 207.759792 135.57969) (xy 207.931917 135.415777) (xy 208.068927 135.221554)
+ (xy 208.165602 135.004418) (xy 208.218261 134.772639) (xy 208.218969 134.721908) (xy 215.956407 134.721908) (xy 215.999314 134.955689)
+ (xy 216.086812 135.176683) (xy 216.215568 135.376474) (xy 216.380678 135.54745) (xy 216.575853 135.6831) (xy 216.793659 135.778257)
+ (xy 217.0258 135.829297) (xy 217.263433 135.834275) (xy 217.497508 135.793001) (xy 217.719108 135.707048) (xy 217.919792 135.57969)
+ (xy 218.091917 135.415777) (xy 218.228927 135.221554) (xy 218.325602 135.004418) (xy 218.378261 134.772639) (xy 218.378969 134.721908)
+ (xy 221.036407 134.721908) (xy 221.079314 134.955689) (xy 221.166812 135.176683) (xy 221.295568 135.376474) (xy 221.460678 135.54745)
+ (xy 221.655853 135.6831) (xy 221.873659 135.778257) (xy 222.1058 135.829297) (xy 222.343433 135.834275) (xy 222.577508 135.793001)
+ (xy 222.799108 135.707048) (xy 222.999792 135.57969) (xy 223.171917 135.415777) (xy 223.308927 135.221554) (xy 223.405602 135.004418)
+ (xy 223.458261 134.772639) (xy 223.458969 134.721908) (xy 223.576407 134.721908) (xy 223.619314 134.955689) (xy 223.706812 135.176683)
+ (xy 223.835568 135.376474) (xy 224.000678 135.54745) (xy 224.195853 135.6831) (xy 224.413659 135.778257) (xy 224.6458 135.829297)
+ (xy 224.883433 135.834275) (xy 225.117508 135.793001) (xy 225.339108 135.707048) (xy 225.539792 135.57969) (xy 225.711917 135.415777)
+ (xy 225.848927 135.221554) (xy 225.945602 135.004418) (xy 225.998261 134.772639) (xy 226.002052 134.501157) (xy 225.955885 134.267999)
+ (xy 225.86531 134.048247) (xy 225.733777 133.850274) (xy 225.566296 133.68162) (xy 225.369246 133.548708) (xy 225.150132 133.456601)
+ (xy 224.917301 133.408808) (xy 224.679622 133.407148) (xy 224.446147 133.451686) (xy 224.225768 133.540725) (xy 224.026882 133.670872)
+ (xy 223.857062 133.837172) (xy 223.722778 134.03329) (xy 223.629143 134.251755) (xy 223.579726 134.484246) (xy 223.576407 134.721908)
+ (xy 223.458969 134.721908) (xy 223.462052 134.501157) (xy 223.415885 134.267999) (xy 223.32531 134.048247) (xy 223.193777 133.850274)
+ (xy 223.026296 133.68162) (xy 222.829246 133.548708) (xy 222.610132 133.456601) (xy 222.377301 133.408808) (xy 222.139622 133.407148)
+ (xy 221.906147 133.451686) (xy 221.685768 133.540725) (xy 221.486882 133.670872) (xy 221.317062 133.837172) (xy 221.182778 134.03329)
+ (xy 221.089143 134.251755) (xy 221.039726 134.484246) (xy 221.036407 134.721908) (xy 218.378969 134.721908) (xy 218.382052 134.501157)
+ (xy 218.335885 134.267999) (xy 218.24531 134.048247) (xy 218.113777 133.850274) (xy 217.946296 133.68162) (xy 217.749246 133.548708)
+ (xy 217.530132 133.456601) (xy 217.297301 133.408808) (xy 217.059622 133.407148) (xy 216.826147 133.451686) (xy 216.605768 133.540725)
+ (xy 216.406882 133.670872) (xy 216.237062 133.837172) (xy 216.102778 134.03329) (xy 216.009143 134.251755) (xy 215.959726 134.484246)
+ (xy 215.956407 134.721908) (xy 208.218969 134.721908) (xy 208.222052 134.501157) (xy 208.175885 134.267999) (xy 208.08531 134.048247)
+ (xy 207.953777 133.850274) (xy 207.786296 133.68162) (xy 207.589246 133.548708) (xy 207.370132 133.456601) (xy 207.137301 133.408808)
+ (xy 206.899622 133.407148) (xy 206.666147 133.451686) (xy 206.445768 133.540725) (xy 206.246882 133.670872) (xy 206.077062 133.837172)
+ (xy 205.942778 134.03329) (xy 205.849143 134.251755) (xy 205.799726 134.484246) (xy 205.796407 134.721908) (xy 157.25491 134.721908)
+ (xy 154.71491 132.181908) (xy 221.036407 132.181908) (xy 221.079314 132.415689) (xy 221.166812 132.636683) (xy 221.295568 132.836474)
+ (xy 221.460678 133.00745) (xy 221.655853 133.1431) (xy 221.873659 133.238257) (xy 222.1058 133.289297) (xy 222.343433 133.294275)
+ (xy 222.577508 133.253001) (xy 222.799108 133.167048) (xy 222.999792 133.03969) (xy 223.171917 132.875777) (xy 223.308927 132.681554)
+ (xy 223.405602 132.464418) (xy 223.458261 132.232639) (xy 223.458969 132.181908) (xy 223.576407 132.181908) (xy 223.619314 132.415689)
+ (xy 223.706812 132.636683) (xy 223.835568 132.836474) (xy 224.000678 133.00745) (xy 224.195853 133.1431) (xy 224.413659 133.238257)
+ (xy 224.6458 133.289297) (xy 224.883433 133.294275) (xy 225.117508 133.253001) (xy 225.339108 133.167048) (xy 225.539792 133.03969)
+ (xy 225.711917 132.875777) (xy 225.848927 132.681554) (xy 225.945602 132.464418) (xy 225.998261 132.232639) (xy 226.002052 131.961157)
+ (xy 225.955885 131.727999) (xy 225.86531 131.508247) (xy 225.733777 131.310274) (xy 225.566296 131.14162) (xy 225.369246 131.008708)
+ (xy 225.150132 130.916601) (xy 224.917301 130.868808) (xy 224.679622 130.867148) (xy 224.446147 130.911686) (xy 224.225768 131.000725)
+ (xy 224.026882 131.130872) (xy 223.857062 131.297172) (xy 223.722778 131.49329) (xy 223.629143 131.711755) (xy 223.579726 131.944246)
+ (xy 223.576407 132.181908) (xy 223.458969 132.181908) (xy 223.462052 131.961157) (xy 223.415885 131.727999) (xy 223.32531 131.508247)
+ (xy 223.193777 131.310274) (xy 223.026296 131.14162) (xy 222.829246 131.008708) (xy 222.610132 130.916601) (xy 222.377301 130.868808)
+ (xy 222.139622 130.867148) (xy 221.906147 130.911686) (xy 221.685768 131.000725) (xy 221.486882 131.130872) (xy 221.317062 131.297172)
+ (xy 221.182778 131.49329) (xy 221.089143 131.711755) (xy 221.039726 131.944246) (xy 221.036407 132.181908) (xy 154.71491 132.181908)
+ (xy 154.586001 132.052999) (xy 154.544785 132.019144) (xy 154.503986 131.98491) (xy 154.50133 131.98345) (xy 154.498983 131.981522)
+ (xy 154.451956 131.956306) (xy 154.405304 131.930659) (xy 154.402416 131.929743) (xy 154.399738 131.928307) (xy 154.348693 131.912701)
+ (xy 154.297965 131.896609) (xy 154.294955 131.896271) (xy 154.292049 131.895383) (xy 154.239018 131.889997) (xy 154.186056 131.884056)
+ (xy 154.18012 131.884015) (xy 154.180014 131.884004) (xy 154.179915 131.884013) (xy 154.178 131.884) (xy 138.669002 131.884)
+ (xy 136.325002 129.54) (xy 180.649823 129.54) (xy 180.649823 131.064) (xy 180.655537 131.135661) (xy 180.693178 131.257205)
+ (xy 180.763189 131.363451) (xy 180.860028 131.445986) (xy 180.976026 131.498275) (xy 181.102 131.516177) (xy 182.626 131.516177)
+ (xy 182.697661 131.510463) (xy 182.819205 131.472822) (xy 182.925451 131.402811) (xy 183.007986 131.305972) (xy 183.060275 131.189974)
+ (xy 183.078177 131.064) (xy 183.078177 130.403908) (xy 183.190407 130.403908) (xy 183.233314 130.637689) (xy 183.320812 130.858683)
+ (xy 183.449568 131.058474) (xy 183.614678 131.22945) (xy 183.809853 131.3651) (xy 184.027659 131.460257) (xy 184.2598 131.511297)
+ (xy 184.497433 131.516275) (xy 184.731508 131.475001) (xy 184.953108 131.389048) (xy 185.153792 131.26169) (xy 185.325917 131.097777)
+ (xy 185.462927 130.903554) (xy 185.559602 130.686418) (xy 185.612261 130.454639) (xy 185.616052 130.183157) (xy 185.569885 129.949999)
+ (xy 185.47931 129.730247) (xy 185.420618 129.641908) (xy 221.036407 129.641908) (xy 221.079314 129.875689) (xy 221.166812 130.096683)
+ (xy 221.295568 130.296474) (xy 221.460678 130.46745) (xy 221.655853 130.6031) (xy 221.873659 130.698257) (xy 222.1058 130.749297)
+ (xy 222.343433 130.754275) (xy 222.577508 130.713001) (xy 222.799108 130.627048) (xy 222.999792 130.49969) (xy 223.171917 130.335777)
+ (xy 223.308927 130.141554) (xy 223.405602 129.924418) (xy 223.458261 129.692639) (xy 223.458969 129.641908) (xy 223.576407 129.641908)
+ (xy 223.619314 129.875689) (xy 223.706812 130.096683) (xy 223.835568 130.296474) (xy 224.000678 130.46745) (xy 224.195853 130.6031)
+ (xy 224.413659 130.698257) (xy 224.6458 130.749297) (xy 224.883433 130.754275) (xy 225.117508 130.713001) (xy 225.339108 130.627048)
+ (xy 225.539792 130.49969) (xy 225.711917 130.335777) (xy 225.848927 130.141554) (xy 225.945602 129.924418) (xy 225.998261 129.692639)
+ (xy 226.002052 129.421157) (xy 225.955885 129.187999) (xy 225.86531 128.968247) (xy 225.733777 128.770274) (xy 225.566296 128.60162)
+ (xy 225.369246 128.468708) (xy 225.150132 128.376601) (xy 224.917301 128.328808) (xy 224.679622 128.327148) (xy 224.446147 128.371686)
+ (xy 224.225768 128.460725) (xy 224.026882 128.590872) (xy 223.857062 128.757172) (xy 223.722778 128.95329) (xy 223.629143 129.171755)
+ (xy 223.579726 129.404246) (xy 223.576407 129.641908) (xy 223.458969 129.641908) (xy 223.462052 129.421157) (xy 223.415885 129.187999)
+ (xy 223.32531 128.968247) (xy 223.193777 128.770274) (xy 223.026296 128.60162) (xy 222.829246 128.468708) (xy 222.610132 128.376601)
+ (xy 222.377301 128.328808) (xy 222.139622 128.327148) (xy 221.906147 128.371686) (xy 221.685768 128.460725) (xy 221.486882 128.590872)
+ (xy 221.317062 128.757172) (xy 221.182778 128.95329) (xy 221.089143 129.171755) (xy 221.039726 129.404246) (xy 221.036407 129.641908)
+ (xy 185.420618 129.641908) (xy 185.347777 129.532274) (xy 185.180296 129.36362) (xy 184.983246 129.230708) (xy 184.764132 129.138601)
+ (xy 184.531301 129.090808) (xy 184.293622 129.089148) (xy 184.060147 129.133686) (xy 183.839768 129.222725) (xy 183.640882 129.352872)
+ (xy 183.471062 129.519172) (xy 183.336778 129.71529) (xy 183.243143 129.933755) (xy 183.193726 130.166246) (xy 183.190407 130.403908)
+ (xy 183.078177 130.403908) (xy 183.078177 129.54) (xy 183.072463 129.468339) (xy 183.034822 129.346795) (xy 182.964811 129.240549)
+ (xy 182.867972 129.158014) (xy 182.751974 129.105725) (xy 182.626 129.087823) (xy 181.102 129.087823) (xy 181.030339 129.093537)
+ (xy 180.908795 129.131178) (xy 180.802549 129.201189) (xy 180.720014 129.298028) (xy 180.667725 129.414026) (xy 180.649823 129.54)
+ (xy 136.325002 129.54) (xy 133.098214 126.313212) (xy 205.606324 126.313212) (xy 205.637991 126.485751) (xy 205.702568 126.648852)
+ (xy 205.797594 126.796305) (xy 205.919452 126.922492) (xy 206.063498 127.022607) (xy 206.224247 127.092836) (xy 206.395575 127.130505)
+ (xy 206.570957 127.134179) (xy 206.743713 127.103717) (xy 206.748376 127.101908) (xy 221.036407 127.101908) (xy 221.079314 127.335689)
+ (xy 221.166812 127.556683) (xy 221.295568 127.756474) (xy 221.460678 127.92745) (xy 221.655853 128.0631) (xy 221.873659 128.158257)
+ (xy 222.1058 128.209297) (xy 222.343433 128.214275) (xy 222.577508 128.173001) (xy 222.799108 128.087048) (xy 222.999792 127.95969)
+ (xy 223.171917 127.795777) (xy 223.308927 127.601554) (xy 223.405602 127.384418) (xy 223.458261 127.152639) (xy 223.458969 127.101908)
+ (xy 223.576407 127.101908) (xy 223.619314 127.335689) (xy 223.706812 127.556683) (xy 223.835568 127.756474) (xy 224.000678 127.92745)
+ (xy 224.195853 128.0631) (xy 224.413659 128.158257) (xy 224.6458 128.209297) (xy 224.883433 128.214275) (xy 225.117508 128.173001)
+ (xy 225.339108 128.087048) (xy 225.539792 127.95969) (xy 225.711917 127.795777) (xy 225.848927 127.601554) (xy 225.945602 127.384418)
+ (xy 225.998261 127.152639) (xy 226.002052 126.881157) (xy 225.955885 126.647999) (xy 225.86531 126.428247) (xy 225.733777 126.230274)
+ (xy 225.566296 126.06162) (xy 225.369246 125.928708) (xy 225.150132 125.836601) (xy 224.917301 125.788808) (xy 224.679622 125.787148)
+ (xy 224.446147 125.831686) (xy 224.225768 125.920725) (xy 224.026882 126.050872) (xy 223.857062 126.217172) (xy 223.722778 126.41329)
+ (xy 223.629143 126.631755) (xy 223.579726 126.864246) (xy 223.576407 127.101908) (xy 223.458969 127.101908) (xy 223.462052 126.881157)
+ (xy 223.415885 126.647999) (xy 223.32531 126.428247) (xy 223.193777 126.230274) (xy 223.026296 126.06162) (xy 222.829246 125.928708)
+ (xy 222.610132 125.836601) (xy 222.377301 125.788808) (xy 222.139622 125.787148) (xy 221.906147 125.831686) (xy 221.685768 125.920725)
+ (xy 221.486882 126.050872) (xy 221.317062 126.217172) (xy 221.182778 126.41329) (xy 221.089143 126.631755) (xy 221.039726 126.864246)
+ (xy 221.036407 127.101908) (xy 206.748376 127.101908) (xy 206.907261 127.040281) (xy 207.055374 126.946286) (xy 207.182408 126.825313)
+ (xy 207.283526 126.681969) (xy 207.354876 126.521714) (xy 207.39374 126.350653) (xy 207.396538 126.15029) (xy 207.362466 125.97821)
+ (xy 207.295618 125.816026) (xy 207.198542 125.669914) (xy 207.074935 125.545441) (xy 206.929504 125.447347) (xy 206.767791 125.379369)
+ (xy 206.627405 125.350552) (xy 209.177564 125.350552) (xy 209.209231 125.523091) (xy 209.273808 125.686192) (xy 209.368834 125.833645)
+ (xy 209.490692 125.959832) (xy 209.634738 126.059947) (xy 209.795487 126.130176) (xy 209.966815 126.167845) (xy 210.142197 126.171519)
+ (xy 210.314953 126.141057) (xy 210.478501 126.077621) (xy 210.626614 125.983626) (xy 210.753648 125.862653) (xy 210.854766 125.719309)
+ (xy 210.926116 125.559054) (xy 210.96498 125.387993) (xy 210.967778 125.18763) (xy 210.933706 125.01555) (xy 210.866858 124.853366)
+ (xy 210.769782 124.707254) (xy 210.646175 124.582781) (xy 210.61523 124.561908) (xy 221.036407 124.561908) (xy 221.079314 124.795689)
+ (xy 221.166812 125.016683) (xy 221.295568 125.216474) (xy 221.460678 125.38745) (xy 221.655853 125.5231) (xy 221.873659 125.618257)
+ (xy 222.1058 125.669297) (xy 222.343433 125.674275) (xy 222.577508 125.633001) (xy 222.799108 125.547048) (xy 222.999792 125.41969)
+ (xy 223.171917 125.255777) (xy 223.308927 125.061554) (xy 223.405602 124.844418) (xy 223.458261 124.612639) (xy 223.458969 124.561908)
+ (xy 223.576407 124.561908) (xy 223.619314 124.795689) (xy 223.706812 125.016683) (xy 223.835568 125.216474) (xy 224.000678 125.38745)
+ (xy 224.195853 125.5231) (xy 224.413659 125.618257) (xy 224.6458 125.669297) (xy 224.883433 125.674275) (xy 225.117508 125.633001)
+ (xy 225.339108 125.547048) (xy 225.539792 125.41969) (xy 225.711917 125.255777) (xy 225.848927 125.061554) (xy 225.945602 124.844418)
+ (xy 225.998261 124.612639) (xy 226.002052 124.341157) (xy 225.955885 124.107999) (xy 225.86531 123.888247) (xy 225.733777 123.690274)
+ (xy 225.566296 123.52162) (xy 225.369246 123.388708) (xy 225.150132 123.296601) (xy 224.917301 123.248808) (xy 224.679622 123.247148)
+ (xy 224.446147 123.291686) (xy 224.225768 123.380725) (xy 224.026882 123.510872) (xy 223.857062 123.677172) (xy 223.722778 123.87329)
+ (xy 223.629143 124.091755) (xy 223.579726 124.324246) (xy 223.576407 124.561908) (xy 223.458969 124.561908) (xy 223.462052 124.341157)
+ (xy 223.415885 124.107999) (xy 223.32531 123.888247) (xy 223.193777 123.690274) (xy 223.026296 123.52162) (xy 222.829246 123.388708)
+ (xy 222.610132 123.296601) (xy 222.377301 123.248808) (xy 222.139622 123.247148) (xy 221.906147 123.291686) (xy 221.685768 123.380725)
+ (xy 221.486882 123.510872) (xy 221.317062 123.677172) (xy 221.182778 123.87329) (xy 221.089143 124.091755) (xy 221.039726 124.324246)
+ (xy 221.036407 124.561908) (xy 210.61523 124.561908) (xy 210.500744 124.484687) (xy 210.339031 124.416709) (xy 210.167193 124.381436)
+ (xy 209.991777 124.380211) (xy 209.819464 124.413082) (xy 209.656817 124.478795) (xy 209.510031 124.574849) (xy 209.384698 124.697584)
+ (xy 209.285591 124.842326) (xy 209.216486 125.003561) (xy 209.180014 125.175149) (xy 209.177564 125.350552) (xy 206.627405 125.350552)
+ (xy 206.595953 125.344096) (xy 206.420537 125.342871) (xy 206.248224 125.375742) (xy 206.085577 125.441455) (xy 205.938791 125.537509)
+ (xy 205.813458 125.660244) (xy 205.714351 125.804986) (xy 205.645246 125.966221) (xy 205.608774 126.137809) (xy 205.606324 126.313212)
+ (xy 133.098214 126.313212) (xy 132.43384 125.648838) (xy 167.905438 125.648838) (xy 167.962977 125.863767) (xy 168.175825 125.979317)
+ (xy 168.407126 126.051122) (xy 168.647991 126.076423) (xy 168.889164 126.054247) (xy 169.121377 125.985447) (xy 169.335705 125.872666)
+ (xy 169.349023 125.863767) (xy 169.406562 125.648838) (xy 175.525438 125.648838) (xy 175.582977 125.863767) (xy 175.795825 125.979317)
+ (xy 176.027126 126.051122) (xy 176.267991 126.076423) (xy 176.509164 126.054247) (xy 176.741377 125.985447) (xy 176.955705 125.872666)
+ (xy 176.969023 125.863767) (xy 177.026562 125.648838) (xy 176.276 124.898276) (xy 175.525438 125.648838) (xy 169.406562 125.648838)
+ (xy 168.656 124.898276) (xy 167.905438 125.648838) (xy 132.43384 125.648838) (xy 131.617993 124.832991) (xy 167.420577 124.832991)
+ (xy 167.442753 125.074164) (xy 167.511553 125.306377) (xy 167.624334 125.520705) (xy 167.633233 125.534023) (xy 167.848162 125.591562)
+ (xy 168.598724 124.841) (xy 168.713276 124.841) (xy 169.463838 125.591562) (xy 169.678767 125.534023) (xy 169.794317 125.321175)
+ (xy 169.866122 125.089874) (xy 169.891423 124.849009) (xy 169.889951 124.832991) (xy 175.040577 124.832991) (xy 175.062753 125.074164)
+ (xy 175.131553 125.306377) (xy 175.244334 125.520705) (xy 175.253233 125.534023) (xy 175.468162 125.591562) (xy 176.218724 124.841)
+ (xy 176.333276 124.841) (xy 177.083838 125.591562) (xy 177.298767 125.534023) (xy 177.414317 125.321175) (xy 177.41844 125.307891)
+ (xy 193.668157 125.307891) (xy 193.70432 125.504926) (xy 193.778065 125.691185) (xy 193.886583 125.859573) (xy 194.025742 126.003676)
+ (xy 194.19024 126.118005) (xy 194.373812 126.198205) (xy 194.569465 126.241222) (xy 194.769748 126.245418) (xy 194.967031 126.210631)
+ (xy 195.1538 126.138188) (xy 195.322941 126.030848) (xy 195.468012 125.892699) (xy 195.583487 125.729003) (xy 195.664967 125.545996)
+ (xy 195.709349 125.350647) (xy 195.712544 125.121837) (xy 195.673634 124.925325) (xy 195.597295 124.740114) (xy 195.486436 124.573258)
+ (xy 195.482953 124.56975) (xy 196.2555 124.56975) (xy 196.2555 124.893299) (xy 196.275906 124.995887) (xy 196.315934 125.092523)
+ (xy 196.374045 125.179493) (xy 196.448007 125.253455) (xy 196.534977 125.311566) (xy 196.631613 125.351594) (xy 196.734201 125.372)
+ (xy 197.31175 125.372) (xy 197.4445 125.23925) (xy 197.4445 124.437) (xy 197.5255 124.437) (xy 197.5255 125.23925)
+ (xy 197.65825 125.372) (xy 198.235799 125.372) (xy 198.338387 125.351594) (xy 198.435023 125.311566) (xy 198.521993 125.253455)
+ (xy 198.595955 125.179493) (xy 198.654066 125.092523) (xy 198.694094 124.995887) (xy 198.7145 124.893299) (xy 198.7145 124.56975)
+ (xy 200.1925 124.56975) (xy 200.1925 124.893299) (xy 200.212906 124.995887) (xy 200.252934 125.092523) (xy 200.311045 125.179493)
+ (xy 200.385007 125.253455) (xy 200.471977 125.311566) (xy 200.568613 125.351594) (xy 200.671201 125.372) (xy 201.24875 125.372)
+ (xy 201.3815 125.23925) (xy 201.3815 124.437) (xy 201.4625 124.437) (xy 201.4625 125.23925) (xy 201.59525 125.372)
+ (xy 202.172799 125.372) (xy 202.275387 125.351594) (xy 202.372023 125.311566) (xy 202.458993 125.253455) (xy 202.532955 125.179493)
+ (xy 202.591066 125.092523) (xy 202.631094 124.995887) (xy 202.6515 124.893299) (xy 202.6515 124.56975) (xy 204.1295 124.56975)
+ (xy 204.1295 124.893299) (xy 204.149906 124.995887) (xy 204.189934 125.092523) (xy 204.248045 125.179493) (xy 204.322007 125.253455)
+ (xy 204.408977 125.311566) (xy 204.505613 125.351594) (xy 204.608201 125.372) (xy 205.18575 125.372) (xy 205.3185 125.23925)
+ (xy 205.3185 124.437) (xy 205.3995 124.437) (xy 205.3995 125.23925) (xy 205.53225 125.372) (xy 206.109799 125.372)
+ (xy 206.212387 125.351594) (xy 206.309023 125.311566) (xy 206.395993 125.253455) (xy 206.469955 125.179493) (xy 206.528066 125.092523)
+ (xy 206.568094 124.995887) (xy 206.5885 124.893299) (xy 206.5885 124.56975) (xy 206.45575 124.437) (xy 205.3995 124.437)
+ (xy 205.3185 124.437) (xy 204.26225 124.437) (xy 204.1295 124.56975) (xy 202.6515 124.56975) (xy 202.51875 124.437)
+ (xy 201.4625 124.437) (xy 201.3815 124.437) (xy 200.32525 124.437) (xy 200.1925 124.56975) (xy 198.7145 124.56975)
+ (xy 198.58175 124.437) (xy 197.5255 124.437) (xy 197.4445 124.437) (xy 196.38825 124.437) (xy 196.2555 124.56975)
+ (xy 195.482953 124.56975) (xy 195.421082 124.507446) (xy 196.028827 123.899701) (xy 196.2555 123.899701) (xy 196.2555 124.22325)
+ (xy 196.38825 124.356) (xy 197.4445 124.356) (xy 197.4445 123.55375) (xy 197.5255 123.55375) (xy 197.5255 124.356)
+ (xy 198.58175 124.356) (xy 198.7145 124.22325) (xy 198.7145 123.899701) (xy 200.1925 123.899701) (xy 200.1925 124.22325)
+ (xy 200.32525 124.356) (xy 201.3815 124.356) (xy 201.3815 123.55375) (xy 201.4625 123.55375) (xy 201.4625 124.356)
+ (xy 202.51875 124.356) (xy 202.6515 124.22325) (xy 202.6515 123.899701) (xy 204.1295 123.899701) (xy 204.1295 124.22325)
+ (xy 204.26225 124.356) (xy 205.3185 124.356) (xy 205.3185 123.55375) (xy 205.3995 123.55375) (xy 205.3995 124.356)
+ (xy 206.45575 124.356) (xy 206.5885 124.22325) (xy 206.5885 123.899701) (xy 206.568094 123.797113) (xy 206.528066 123.700477)
+ (xy 206.469955 123.613507) (xy 206.395993 123.539545) (xy 206.309023 123.481434) (xy 206.212387 123.441406) (xy 206.109799 123.421)
+ (xy 205.53225 123.421) (xy 205.3995 123.55375) (xy 205.3185 123.55375) (xy 205.18575 123.421) (xy 204.608201 123.421)
+ (xy 204.505613 123.441406) (xy 204.408977 123.481434) (xy 204.322007 123.539545) (xy 204.248045 123.613507) (xy 204.189934 123.700477)
+ (xy 204.149906 123.797113) (xy 204.1295 123.899701) (xy 202.6515 123.899701) (xy 202.631094 123.797113) (xy 202.591066 123.700477)
+ (xy 202.532955 123.613507) (xy 202.458993 123.539545) (xy 202.372023 123.481434) (xy 202.275387 123.441406) (xy 202.172799 123.421)
+ (xy 201.59525 123.421) (xy 201.4625 123.55375) (xy 201.3815 123.55375) (xy 201.24875 123.421) (xy 200.671201 123.421)
+ (xy 200.568613 123.441406) (xy 200.471977 123.481434) (xy 200.385007 123.539545) (xy 200.311045 123.613507) (xy 200.252934 123.700477)
+ (xy 200.212906 123.797113) (xy 200.1925 123.899701) (xy 198.7145 123.899701) (xy 198.694094 123.797113) (xy 198.654066 123.700477)
+ (xy 198.595955 123.613507) (xy 198.521993 123.539545) (xy 198.435023 123.481434) (xy 198.338387 123.441406) (xy 198.235799 123.421)
+ (xy 197.65825 123.421) (xy 197.5255 123.55375) (xy 197.4445 123.55375) (xy 197.31175 123.421) (xy 196.734201 123.421)
+ (xy 196.631613 123.441406) (xy 196.534977 123.481434) (xy 196.448007 123.539545) (xy 196.374045 123.613507) (xy 196.315934 123.700477)
+ (xy 196.275906 123.797113) (xy 196.2555 123.899701) (xy 196.028827 123.899701) (xy 196.590031 123.338497) (xy 196.660526 123.370275)
+ (xy 196.7865 123.388177) (xy 198.1835 123.388177) (xy 198.255161 123.382463) (xy 198.376705 123.344822) (xy 198.482951 123.274811)
+ (xy 198.565486 123.177972) (xy 198.617775 123.061974) (xy 198.635677 122.936) (xy 198.635677 122.047) (xy 198.629963 121.975339)
+ (xy 198.592322 121.853795) (xy 198.522311 121.747549) (xy 198.425472 121.665014) (xy 198.309474 121.612725) (xy 198.1835 121.594823)
+ (xy 196.7865 121.594823) (xy 196.714839 121.600537) (xy 196.593295 121.638178) (xy 196.487049 121.708189) (xy 196.441101 121.7621)
+ (xy 196.4055 121.7621) (xy 196.338382 121.768681) (xy 196.271326 121.774547) (xy 196.267645 121.775616) (xy 196.263825 121.775991)
+ (xy 196.199271 121.795481) (xy 196.134624 121.814263) (xy 196.131222 121.816026) (xy 196.127547 121.817136) (xy 196.068014 121.84879)
+ (xy 196.00824 121.879774) (xy 196.005244 121.882165) (xy 196.001856 121.883967) (xy 195.949637 121.926556) (xy 195.896988 121.968585)
+ (xy 195.891646 121.973852) (xy 195.89154 121.973939) (xy 195.891459 121.974037) (xy 195.889736 121.975736) (xy 194.175236 123.690236)
+ (xy 194.132426 123.742353) (xy 194.089162 123.793913) (xy 194.087316 123.797272) (xy 194.084879 123.800238) (xy 194.053008 123.859677)
+ (xy 194.020583 123.918659) (xy 194.019425 123.922311) (xy 194.01761 123.925695) (xy 193.997901 123.99016) (xy 193.977539 124.054349)
+ (xy 193.977111 124.058161) (xy 193.97599 124.061829) (xy 193.969185 124.128831) (xy 193.961671 124.195816) (xy 193.961619 124.203319)
+ (xy 193.961605 124.203454) (xy 193.961617 124.20358) (xy 193.9616 124.206) (xy 193.9616 124.506494) (xy 193.904699 124.562215)
+ (xy 193.791521 124.727507) (xy 193.712604 124.911635) (xy 193.670954 125.107583) (xy 193.668157 125.307891) (xy 177.41844 125.307891)
+ (xy 177.486122 125.089874) (xy 177.511423 124.849009) (xy 177.489247 124.607836) (xy 177.420447 124.375623) (xy 177.307666 124.161295)
+ (xy 177.298767 124.147977) (xy 177.083838 124.090438) (xy 176.333276 124.841) (xy 176.218724 124.841) (xy 175.468162 124.090438)
+ (xy 175.253233 124.147977) (xy 175.137683 124.360825) (xy 175.065878 124.592126) (xy 175.040577 124.832991) (xy 169.889951 124.832991)
+ (xy 169.869247 124.607836) (xy 169.800447 124.375623) (xy 169.687666 124.161295) (xy 169.678767 124.147977) (xy 169.463838 124.090438)
+ (xy 168.713276 124.841) (xy 168.598724 124.841) (xy 167.848162 124.090438) (xy 167.633233 124.147977) (xy 167.517683 124.360825)
+ (xy 167.445878 124.592126) (xy 167.420577 124.832991) (xy 131.617993 124.832991) (xy 130.818164 124.033162) (xy 167.905438 124.033162)
+ (xy 168.656 124.783724) (xy 169.406562 124.033162) (xy 175.525438 124.033162) (xy 176.276 124.783724) (xy 177.026562 124.033162)
+ (xy 176.999269 123.931211) (xy 191.311037 123.931211) (xy 191.3472 124.128246) (xy 191.420945 124.314505) (xy 191.529463 124.482893)
+ (xy 191.668622 124.626996) (xy 191.83312 124.741325) (xy 192.016692 124.821525) (xy 192.212345 124.864542) (xy 192.412628 124.868738)
+ (xy 192.609911 124.833951) (xy 192.79668 124.761508) (xy 192.965821 124.654168) (xy 193.110892 124.516019) (xy 193.226367 124.352323)
+ (xy 193.307847 124.169316) (xy 193.352229 123.973967) (xy 193.355424 123.745157) (xy 193.316514 123.548645) (xy 193.240175 123.363434)
+ (xy 193.129316 123.196578) (xy 192.988159 123.054432) (xy 192.822081 122.942411) (xy 192.637407 122.864781) (xy 192.441173 122.8245)
+ (xy 192.240851 122.823101) (xy 192.044073 122.860639) (xy 191.858333 122.935683) (xy 191.690707 123.045374) (xy 191.547579 123.185535)
+ (xy 191.434401 123.350827) (xy 191.355484 123.534955) (xy 191.313834 123.730903) (xy 191.311037 123.931211) (xy 176.999269 123.931211)
+ (xy 176.969023 123.818233) (xy 176.756175 123.702683) (xy 176.524874 123.630878) (xy 176.284009 123.605577) (xy 176.042836 123.627753)
+ (xy 175.810623 123.696553) (xy 175.596295 123.809334) (xy 175.582977 123.818233) (xy 175.525438 124.033162) (xy 169.406562 124.033162)
+ (xy 169.349023 123.818233) (xy 169.136175 123.702683) (xy 168.904874 123.630878) (xy 168.664009 123.605577) (xy 168.422836 123.627753)
+ (xy 168.190623 123.696553) (xy 167.976295 123.809334) (xy 167.962977 123.818233) (xy 167.905438 124.033162) (xy 130.818164 124.033162)
+ (xy 129.736 122.950998) (xy 129.736 120.624908) (xy 156.393407 120.624908) (xy 156.436314 120.858689) (xy 156.523812 121.079683)
+ (xy 156.652568 121.279474) (xy 156.817678 121.45045) (xy 157.012853 121.5861) (xy 157.230659 121.681257) (xy 157.4628 121.732297)
+ (xy 157.700433 121.737275) (xy 157.934508 121.696001) (xy 158.156108 121.610048) (xy 158.356792 121.48269) (xy 158.528917 121.318777)
+ (xy 158.665927 121.124554) (xy 158.762602 120.907418) (xy 158.815261 120.675639) (xy 158.815969 120.624908) (xy 158.933407 120.624908)
+ (xy 158.976314 120.858689) (xy 159.063812 121.079683) (xy 159.192568 121.279474) (xy 159.357678 121.45045) (xy 159.552853 121.5861)
+ (xy 159.770659 121.681257) (xy 160.0028 121.732297) (xy 160.240433 121.737275) (xy 160.474508 121.696001) (xy 160.696108 121.610048)
+ (xy 160.896792 121.48269) (xy 161.068917 121.318777) (xy 161.205927 121.124554) (xy 161.302602 120.907418) (xy 161.355261 120.675639)
+ (xy 161.355969 120.624908) (xy 161.473407 120.624908) (xy 161.516314 120.858689) (xy 161.603812 121.079683) (xy 161.732568 121.279474)
+ (xy 161.897678 121.45045) (xy 162.092853 121.5861) (xy 162.310659 121.681257) (xy 162.5428 121.732297) (xy 162.780433 121.737275)
+ (xy 163.014508 121.696001) (xy 163.236108 121.610048) (xy 163.436792 121.48269) (xy 163.608917 121.318777) (xy 163.745927 121.124554)
+ (xy 163.842602 120.907418) (xy 163.895261 120.675639) (xy 163.895969 120.624908) (xy 164.013407 120.624908) (xy 164.056314 120.858689)
+ (xy 164.143812 121.079683) (xy 164.272568 121.279474) (xy 164.437678 121.45045) (xy 164.632853 121.5861) (xy 164.850659 121.681257)
+ (xy 165.0828 121.732297) (xy 165.320433 121.737275) (xy 165.554508 121.696001) (xy 165.776108 121.610048) (xy 165.976792 121.48269)
+ (xy 166.148917 121.318777) (xy 166.264455 121.154991) (xy 199.540637 121.154991) (xy 199.5768 121.352026) (xy 199.650545 121.538285)
+ (xy 199.759063 121.706673) (xy 199.898222 121.850776) (xy 200.06272 121.965105) (xy 200.246292 122.045305) (xy 200.271323 122.050808)
+ (xy 200.271323 122.936) (xy 200.277037 123.007661) (xy 200.314678 123.129205) (xy 200.384689 123.235451) (xy 200.481528 123.317986)
+ (xy 200.597526 123.370275) (xy 200.7235 123.388177) (xy 202.1205 123.388177) (xy 202.192161 123.382463) (xy 202.313705 123.344822)
+ (xy 202.419951 123.274811) (xy 202.502486 123.177972) (xy 202.554775 123.061974) (xy 202.572677 122.936) (xy 202.572677 122.047)
+ (xy 202.566963 121.975339) (xy 202.529322 121.853795) (xy 202.459311 121.747549) (xy 202.362472 121.665014) (xy 202.246474 121.612725)
+ (xy 202.133637 121.59669) (xy 202.098288 121.476582) (xy 202.032336 121.350427) (xy 202.014072 121.327711) (xy 203.155057 121.327711)
+ (xy 203.19122 121.524746) (xy 203.264965 121.711005) (xy 203.373483 121.879393) (xy 203.512642 122.023496) (xy 203.67714 122.137825)
+ (xy 203.860712 122.218025) (xy 204.056365 122.261042) (xy 204.208323 122.264226) (xy 204.208323 122.936) (xy 204.214037 123.007661)
+ (xy 204.251678 123.129205) (xy 204.321689 123.235451) (xy 204.418528 123.317986) (xy 204.534526 123.370275) (xy 204.6605 123.388177)
+ (xy 206.0575 123.388177) (xy 206.129161 123.382463) (xy 206.250705 123.344822) (xy 206.356951 123.274811) (xy 206.439486 123.177972)
+ (xy 206.491775 123.061974) (xy 206.509677 122.936) (xy 206.509677 122.047) (xy 206.507677 122.021908) (xy 221.036407 122.021908)
+ (xy 221.079314 122.255689) (xy 221.166812 122.476683) (xy 221.295568 122.676474) (xy 221.460678 122.84745) (xy 221.655853 122.9831)
+ (xy 221.873659 123.078257) (xy 222.1058 123.129297) (xy 222.343433 123.134275) (xy 222.577508 123.093001) (xy 222.799108 123.007048)
+ (xy 222.999792 122.87969) (xy 223.171917 122.715777) (xy 223.308927 122.521554) (xy 223.405602 122.304418) (xy 223.458261 122.072639)
+ (xy 223.458969 122.021908) (xy 223.576407 122.021908) (xy 223.619314 122.255689) (xy 223.706812 122.476683) (xy 223.835568 122.676474)
+ (xy 224.000678 122.84745) (xy 224.195853 122.9831) (xy 224.413659 123.078257) (xy 224.6458 123.129297) (xy 224.883433 123.134275)
+ (xy 225.117508 123.093001) (xy 225.339108 123.007048) (xy 225.539792 122.87969) (xy 225.711917 122.715777) (xy 225.848927 122.521554)
+ (xy 225.945602 122.304418) (xy 225.998261 122.072639) (xy 226.002052 121.801157) (xy 225.955885 121.567999) (xy 225.86531 121.348247)
+ (xy 225.733777 121.150274) (xy 225.566296 120.98162) (xy 225.369246 120.848708) (xy 225.150132 120.756601) (xy 224.917301 120.708808)
+ (xy 224.679622 120.707148) (xy 224.446147 120.751686) (xy 224.225768 120.840725) (xy 224.026882 120.970872) (xy 223.857062 121.137172)
+ (xy 223.722778 121.33329) (xy 223.629143 121.551755) (xy 223.579726 121.784246) (xy 223.576407 122.021908) (xy 223.458969 122.021908)
+ (xy 223.462052 121.801157) (xy 223.415885 121.567999) (xy 223.32531 121.348247) (xy 223.193777 121.150274) (xy 223.026296 120.98162)
+ (xy 222.829246 120.848708) (xy 222.610132 120.756601) (xy 222.377301 120.708808) (xy 222.139622 120.707148) (xy 221.906147 120.751686)
+ (xy 221.685768 120.840725) (xy 221.486882 120.970872) (xy 221.317062 121.137172) (xy 221.182778 121.33329) (xy 221.089143 121.551755)
+ (xy 221.039726 121.784246) (xy 221.036407 122.021908) (xy 206.507677 122.021908) (xy 206.503963 121.975339) (xy 206.466322 121.853795)
+ (xy 206.463548 121.849585) (xy 206.543587 121.736123) (xy 206.625067 121.553116) (xy 206.669449 121.357767) (xy 206.672644 121.128957)
+ (xy 206.633734 120.932445) (xy 206.557395 120.747234) (xy 206.446536 120.580378) (xy 206.372428 120.50575) (xy 207.0505 120.50575)
+ (xy 207.0505 120.829299) (xy 207.070906 120.931887) (xy 207.110934 121.028523) (xy 207.169045 121.115493) (xy 207.243007 121.189455)
+ (xy 207.329977 121.247566) (xy 207.426613 121.287594) (xy 207.529201 121.308) (xy 208.10675 121.308) (xy 208.2395 121.17525)
+ (xy 208.2395 120.373) (xy 208.3205 120.373) (xy 208.3205 121.17525) (xy 208.45325 121.308) (xy 209.030799 121.308)
+ (xy 209.133387 121.287594) (xy 209.230023 121.247566) (xy 209.316993 121.189455) (xy 209.390955 121.115493) (xy 209.449066 121.028523)
+ (xy 209.489094 120.931887) (xy 209.5095 120.829299) (xy 209.5095 120.50575) (xy 209.37675 120.373) (xy 208.3205 120.373)
+ (xy 208.2395 120.373) (xy 207.18325 120.373) (xy 207.0505 120.50575) (xy 206.372428 120.50575) (xy 206.305379 120.438232)
+ (xy 206.139301 120.326211) (xy 205.954627 120.248581) (xy 205.758393 120.2083) (xy 205.558071 120.206901) (xy 205.361293 120.244439)
+ (xy 205.175553 120.319483) (xy 205.007927 120.429174) (xy 204.907872 120.527155) (xy 204.832179 120.450932) (xy 204.666101 120.338911)
+ (xy 204.481427 120.261281) (xy 204.285193 120.221) (xy 204.084871 120.219601) (xy 203.888093 120.257139) (xy 203.702353 120.332183)
+ (xy 203.534727 120.441874) (xy 203.391599 120.582035) (xy 203.278421 120.747327) (xy 203.199504 120.931455) (xy 203.157854 121.127403)
+ (xy 203.155057 121.327711) (xy 202.014072 121.327711) (xy 201.943136 121.239486) (xy 201.834087 121.147982) (xy 201.709341 121.079403)
+ (xy 201.584037 121.039654) (xy 201.585024 120.968937) (xy 201.546114 120.772425) (xy 201.469775 120.587214) (xy 201.358916 120.420358)
+ (xy 201.217759 120.278212) (xy 201.051681 120.166191) (xy 200.867007 120.088561) (xy 200.670773 120.04828) (xy 200.470451 120.046881)
+ (xy 200.273673 120.084419) (xy 200.087933 120.159463) (xy 199.920307 120.269154) (xy 199.777179 120.409315) (xy 199.664001 120.574607)
+ (xy 199.585084 120.758735) (xy 199.543434 120.954683) (xy 199.540637 121.154991) (xy 166.264455 121.154991) (xy 166.285927 121.124554)
+ (xy 166.382602 120.907418) (xy 166.435261 120.675639) (xy 166.439052 120.404157) (xy 166.392885 120.170999) (xy 166.30231 119.951247)
+ (xy 166.240071 119.857569) (xy 167.50599 119.857569) (xy 167.546649 120.079101) (xy 167.629563 120.288517) (xy 167.751573 120.47784)
+ (xy 167.908033 120.639859) (xy 168.092982 120.768402) (xy 168.299377 120.858573) (xy 168.519355 120.906939) (xy 168.744538 120.911656)
+ (xy 168.966349 120.872545) (xy 169.176338 120.791095) (xy 169.366508 120.670409) (xy 169.529615 120.515085) (xy 169.659447 120.331037)
+ (xy 169.751057 120.125277) (xy 169.800957 119.905642) (xy 169.801628 119.857569) (xy 175.12599 119.857569) (xy 175.166649 120.079101)
+ (xy 175.249563 120.288517) (xy 175.371573 120.47784) (xy 175.528033 120.639859) (xy 175.712982 120.768402) (xy 175.919377 120.858573)
+ (xy 176.139355 120.906939) (xy 176.364538 120.911656) (xy 176.586349 120.872545) (xy 176.796338 120.791095) (xy 176.986508 120.670409)
+ (xy 177.149615 120.515085) (xy 177.279447 120.331037) (xy 177.371057 120.125277) (xy 177.420957 119.905642) (xy 177.424549 119.648384)
+ (xy 177.380801 119.427441) (xy 177.294972 119.219203) (xy 177.17033 119.031602) (xy 177.097132 118.957891) (xy 177.666157 118.957891)
+ (xy 177.70232 119.154926) (xy 177.776065 119.341185) (xy 177.884583 119.509573) (xy 178.023742 119.653676) (xy 178.18824 119.768005)
+ (xy 178.371812 119.848205) (xy 178.567465 119.891222) (xy 178.767748 119.895418) (xy 178.965031 119.860631) (xy 179.1518 119.788188)
+ (xy 179.320941 119.680848) (xy 179.466012 119.542699) (xy 179.581487 119.379003) (xy 179.662967 119.195996) (xy 179.690635 119.074212)
+ (xy 180.714324 119.074212) (xy 180.745991 119.246751) (xy 180.810568 119.409852) (xy 180.905594 119.557305) (xy 181.027452 119.683492)
+ (xy 181.171498 119.783607) (xy 181.332247 119.853836) (xy 181.503575 119.891505) (xy 181.678957 119.895179) (xy 181.851713 119.864717)
+ (xy 181.92652 119.835701) (xy 207.0505 119.835701) (xy 207.0505 120.15925) (xy 207.18325 120.292) (xy 208.2395 120.292)
+ (xy 208.2395 119.48975) (xy 208.3205 119.48975) (xy 208.3205 120.292) (xy 209.37675 120.292) (xy 209.5095 120.15925)
+ (xy 209.5095 119.835701) (xy 209.489094 119.733113) (xy 209.449066 119.636477) (xy 209.390955 119.549507) (xy 209.323356 119.481908)
+ (xy 221.036407 119.481908) (xy 221.079314 119.715689) (xy 221.166812 119.936683) (xy 221.295568 120.136474) (xy 221.460678 120.30745)
+ (xy 221.655853 120.4431) (xy 221.873659 120.538257) (xy 222.1058 120.589297) (xy 222.343433 120.594275) (xy 222.577508 120.553001)
+ (xy 222.799108 120.467048) (xy 222.999792 120.33969) (xy 223.171917 120.175777) (xy 223.308927 119.981554) (xy 223.405602 119.764418)
+ (xy 223.458261 119.532639) (xy 223.458969 119.481908) (xy 223.576407 119.481908) (xy 223.619314 119.715689) (xy 223.706812 119.936683)
+ (xy 223.835568 120.136474) (xy 224.000678 120.30745) (xy 224.195853 120.4431) (xy 224.413659 120.538257) (xy 224.6458 120.589297)
+ (xy 224.883433 120.594275) (xy 225.117508 120.553001) (xy 225.339108 120.467048) (xy 225.539792 120.33969) (xy 225.711917 120.175777)
+ (xy 225.848927 119.981554) (xy 225.945602 119.764418) (xy 225.998261 119.532639) (xy 226.002052 119.261157) (xy 225.955885 119.027999)
+ (xy 225.86531 118.808247) (xy 225.733777 118.610274) (xy 225.566296 118.44162) (xy 225.369246 118.308708) (xy 225.150132 118.216601)
+ (xy 224.917301 118.168808) (xy 224.679622 118.167148) (xy 224.446147 118.211686) (xy 224.225768 118.300725) (xy 224.026882 118.430872)
+ (xy 223.857062 118.597172) (xy 223.722778 118.79329) (xy 223.629143 119.011755) (xy 223.579726 119.244246) (xy 223.576407 119.481908)
+ (xy 223.458969 119.481908) (xy 223.462052 119.261157) (xy 223.415885 119.027999) (xy 223.32531 118.808247) (xy 223.193777 118.610274)
+ (xy 223.026296 118.44162) (xy 222.829246 118.308708) (xy 222.610132 118.216601) (xy 222.377301 118.168808) (xy 222.139622 118.167148)
+ (xy 221.906147 118.211686) (xy 221.685768 118.300725) (xy 221.486882 118.430872) (xy 221.317062 118.597172) (xy 221.182778 118.79329)
+ (xy 221.089143 119.011755) (xy 221.039726 119.244246) (xy 221.036407 119.481908) (xy 209.323356 119.481908) (xy 209.316993 119.475545)
+ (xy 209.230023 119.417434) (xy 209.133387 119.377406) (xy 209.030799 119.357) (xy 208.45325 119.357) (xy 208.3205 119.48975)
+ (xy 208.2395 119.48975) (xy 208.10675 119.357) (xy 207.529201 119.357) (xy 207.426613 119.377406) (xy 207.329977 119.417434)
+ (xy 207.243007 119.475545) (xy 207.169045 119.549507) (xy 207.110934 119.636477) (xy 207.070906 119.733113) (xy 207.0505 119.835701)
+ (xy 181.92652 119.835701) (xy 182.015261 119.801281) (xy 182.163374 119.707286) (xy 182.290408 119.586313) (xy 182.391526 119.442969)
+ (xy 182.462876 119.282714) (xy 182.50174 119.111653) (xy 182.504036 118.947212) (xy 183.635324 118.947212) (xy 183.666991 119.119751)
+ (xy 183.731568 119.282852) (xy 183.826594 119.430305) (xy 183.948452 119.556492) (xy 184.092498 119.656607) (xy 184.253247 119.726836)
+ (xy 184.424575 119.764505) (xy 184.599957 119.768179) (xy 184.772713 119.737717) (xy 184.936261 119.674281) (xy 185.084374 119.580286)
+ (xy 185.211408 119.459313) (xy 185.312526 119.315969) (xy 185.383876 119.155714) (xy 185.42274 118.984653) (xy 185.425538 118.78429)
+ (xy 185.391466 118.61221) (xy 185.324618 118.450026) (xy 185.227542 118.303914) (xy 185.103935 118.179441) (xy 184.958504 118.081347)
+ (xy 184.796791 118.013369) (xy 184.648844 117.983) (xy 207.129323 117.983) (xy 207.129323 118.872) (xy 207.135037 118.943661)
+ (xy 207.172678 119.065205) (xy 207.242689 119.171451) (xy 207.339528 119.253986) (xy 207.455526 119.306275) (xy 207.5815 119.324177)
+ (xy 208.9785 119.324177) (xy 209.050161 119.318463) (xy 209.171705 119.280822) (xy 209.277951 119.210811) (xy 209.328296 119.151741)
+ (xy 209.342798 119.150319) (xy 209.409854 119.144453) (xy 209.413535 119.143384) (xy 209.417355 119.143009) (xy 209.481909 119.123519)
+ (xy 209.546556 119.104737) (xy 209.549958 119.102973) (xy 209.553633 119.101864) (xy 209.554392 119.10146) (xy 209.611345 119.113982)
+ (xy 209.811628 119.118178) (xy 210.008911 119.083391) (xy 210.19568 119.010948) (xy 210.364821 118.903608) (xy 210.509892 118.765459)
+ (xy 210.625367 118.601763) (xy 210.706847 118.418756) (xy 210.751229 118.223407) (xy 210.754424 117.994597) (xy 210.715514 117.798085)
+ (xy 210.639175 117.612874) (xy 210.528316 117.446018) (xy 210.387159 117.303872) (xy 210.221081 117.191851) (xy 210.036407 117.114221)
+ (xy 209.840173 117.07394) (xy 209.639851 117.072541) (xy 209.443073 117.110079) (xy 209.257333 117.185123) (xy 209.089707 117.294814)
+ (xy 208.946579 117.434975) (xy 208.88095 117.530823) (xy 207.5815 117.530823) (xy 207.509839 117.536537) (xy 207.388295 117.574178)
+ (xy 207.282049 117.644189) (xy 207.199514 117.741028) (xy 207.147225 117.857026) (xy 207.129323 117.983) (xy 184.648844 117.983)
+ (xy 184.624953 117.978096) (xy 184.449537 117.976871) (xy 184.277224 118.009742) (xy 184.114577 118.075455) (xy 183.967791 118.171509)
+ (xy 183.842458 118.294244) (xy 183.743351 118.438986) (xy 183.674246 118.600221) (xy 183.637774 118.771809) (xy 183.635324 118.947212)
+ (xy 182.504036 118.947212) (xy 182.504538 118.91129) (xy 182.470466 118.73921) (xy 182.403618 118.577026) (xy 182.306542 118.430914)
+ (xy 182.182935 118.306441) (xy 182.037504 118.208347) (xy 181.875791 118.140369) (xy 181.703953 118.105096) (xy 181.528537 118.103871)
+ (xy 181.356224 118.136742) (xy 181.193577 118.202455) (xy 181.046791 118.298509) (xy 180.921458 118.421244) (xy 180.822351 118.565986)
+ (xy 180.753246 118.727221) (xy 180.716774 118.898809) (xy 180.714324 119.074212) (xy 179.690635 119.074212) (xy 179.707349 119.000647)
+ (xy 179.710544 118.771837) (xy 179.671634 118.575325) (xy 179.595295 118.390114) (xy 179.484436 118.223258) (xy 179.343279 118.081112)
+ (xy 179.177201 117.969091) (xy 178.992527 117.891461) (xy 178.796293 117.85118) (xy 178.595971 117.849781) (xy 178.399193 117.887319)
+ (xy 178.213453 117.962363) (xy 178.045827 118.072054) (xy 177.902699 118.212215) (xy 177.789521 118.377507) (xy 177.710604 118.561635)
+ (xy 177.668954 118.757583) (xy 177.666157 118.957891) (xy 177.097132 118.957891) (xy 177.011624 118.871784) (xy 176.824897 118.745835)
+ (xy 176.617264 118.658554) (xy 176.396632 118.613265) (xy 176.171405 118.611693) (xy 175.950162 118.653897) (xy 175.74133 118.738271)
+ (xy 175.552863 118.8616) (xy 175.391941 119.019186) (xy 175.264692 119.205029) (xy 175.175964 119.412048) (xy 175.129135 119.632358)
+ (xy 175.12599 119.857569) (xy 169.801628 119.857569) (xy 169.804549 119.648384) (xy 169.760801 119.427441) (xy 169.674972 119.219203)
+ (xy 169.55033 119.031602) (xy 169.391624 118.871784) (xy 169.204897 118.745835) (xy 168.997264 118.658554) (xy 168.776632 118.613265)
+ (xy 168.551405 118.611693) (xy 168.330162 118.653897) (xy 168.12133 118.738271) (xy 167.932863 118.8616) (xy 167.771941 119.019186)
+ (xy 167.644692 119.205029) (xy 167.555964 119.412048) (xy 167.509135 119.632358) (xy 167.50599 119.857569) (xy 166.240071 119.857569)
+ (xy 166.170777 119.753274) (xy 166.003296 119.58462) (xy 165.806246 119.451708) (xy 165.587132 119.359601) (xy 165.354301 119.311808)
+ (xy 165.116622 119.310148) (xy 164.883147 119.354686) (xy 164.662768 119.443725) (xy 164.463882 119.573872) (xy 164.294062 119.740172)
+ (xy 164.159778 119.93629) (xy 164.066143 120.154755) (xy 164.016726 120.387246) (xy 164.013407 120.624908) (xy 163.895969 120.624908)
+ (xy 163.899052 120.404157) (xy 163.852885 120.170999) (xy 163.76231 119.951247) (xy 163.630777 119.753274) (xy 163.463296 119.58462)
+ (xy 163.266246 119.451708) (xy 163.047132 119.359601) (xy 162.814301 119.311808) (xy 162.576622 119.310148) (xy 162.343147 119.354686)
+ (xy 162.122768 119.443725) (xy 161.923882 119.573872) (xy 161.754062 119.740172) (xy 161.619778 119.93629) (xy 161.526143 120.154755)
+ (xy 161.476726 120.387246) (xy 161.473407 120.624908) (xy 161.355969 120.624908) (xy 161.359052 120.404157) (xy 161.312885 120.170999)
+ (xy 161.22231 119.951247) (xy 161.090777 119.753274) (xy 160.923296 119.58462) (xy 160.726246 119.451708) (xy 160.507132 119.359601)
+ (xy 160.274301 119.311808) (xy 160.036622 119.310148) (xy 159.803147 119.354686) (xy 159.582768 119.443725) (xy 159.383882 119.573872)
+ (xy 159.214062 119.740172) (xy 159.079778 119.93629) (xy 158.986143 120.154755) (xy 158.936726 120.387246) (xy 158.933407 120.624908)
+ (xy 158.815969 120.624908) (xy 158.819052 120.404157) (xy 158.772885 120.170999) (xy 158.68231 119.951247) (xy 158.550777 119.753274)
+ (xy 158.383296 119.58462) (xy 158.186246 119.451708) (xy 157.967132 119.359601) (xy 157.734301 119.311808) (xy 157.496622 119.310148)
+ (xy 157.263147 119.354686) (xy 157.042768 119.443725) (xy 156.843882 119.573872) (xy 156.674062 119.740172) (xy 156.539778 119.93629)
+ (xy 156.446143 120.154755) (xy 156.396726 120.387246) (xy 156.393407 120.624908) (xy 129.736 120.624908) (xy 129.736 119.338891)
+ (xy 140.836157 119.338891) (xy 140.87232 119.535926) (xy 140.946065 119.722185) (xy 141.054583 119.890573) (xy 141.193742 120.034676)
+ (xy 141.35824 120.149005) (xy 141.541812 120.229205) (xy 141.737465 120.272222) (xy 141.937748 120.276418) (xy 142.135031 120.241631)
+ (xy 142.3218 120.169188) (xy 142.490941 120.061848) (xy 142.636012 119.923699) (xy 142.751487 119.760003) (xy 142.832967 119.576996)
+ (xy 142.877349 119.381647) (xy 142.880544 119.152837) (xy 142.841634 118.956325) (xy 142.765295 118.771114) (xy 142.654436 118.604258)
+ (xy 142.513279 118.462112) (xy 142.347201 118.350091) (xy 142.162527 118.272461) (xy 141.966293 118.23218) (xy 141.765971 118.230781)
+ (xy 141.569193 118.268319) (xy 141.383453 118.343363) (xy 141.215827 118.453054) (xy 141.072699 118.593215) (xy 140.959521 118.758507)
+ (xy 140.880604 118.942635) (xy 140.838954 119.138583) (xy 140.836157 119.338891) (xy 129.736 119.338891) (xy 129.736 118.084908)
+ (xy 156.393407 118.084908) (xy 156.436314 118.318689) (xy 156.523812 118.539683) (xy 156.652568 118.739474) (xy 156.817678 118.91045)
+ (xy 157.012853 119.0461) (xy 157.230659 119.141257) (xy 157.4628 119.192297) (xy 157.700433 119.197275) (xy 157.934508 119.156001)
+ (xy 158.156108 119.070048) (xy 158.356792 118.94269) (xy 158.528917 118.778777) (xy 158.665927 118.584554) (xy 158.762602 118.367418)
+ (xy 158.815261 118.135639) (xy 158.815969 118.084908) (xy 158.933407 118.084908) (xy 158.976314 118.318689) (xy 159.063812 118.539683)
+ (xy 159.192568 118.739474) (xy 159.357678 118.91045) (xy 159.552853 119.0461) (xy 159.770659 119.141257) (xy 160.0028 119.192297)
+ (xy 160.240433 119.197275) (xy 160.474508 119.156001) (xy 160.696108 119.070048) (xy 160.896792 118.94269) (xy 161.068917 118.778777)
+ (xy 161.205927 118.584554) (xy 161.302602 118.367418) (xy 161.355261 118.135639) (xy 161.355969 118.084908) (xy 161.473407 118.084908)
+ (xy 161.516314 118.318689) (xy 161.603812 118.539683) (xy 161.732568 118.739474) (xy 161.897678 118.91045) (xy 162.092853 119.0461)
+ (xy 162.310659 119.141257) (xy 162.5428 119.192297) (xy 162.780433 119.197275) (xy 163.014508 119.156001) (xy 163.236108 119.070048)
+ (xy 163.436792 118.94269) (xy 163.608917 118.778777) (xy 163.745927 118.584554) (xy 163.842602 118.367418) (xy 163.895261 118.135639)
+ (xy 163.899052 117.864157) (xy 163.852885 117.630999) (xy 163.76231 117.411247) (xy 163.635911 117.221) (xy 164.012823 117.221)
+ (xy 164.012823 118.745) (xy 164.018537 118.816661) (xy 164.056178 118.938205) (xy 164.126189 119.044451) (xy 164.223028 119.126986)
+ (xy 164.339026 119.179275) (xy 164.465 119.197177) (xy 165.989 119.197177) (xy 166.060661 119.191463) (xy 166.182205 119.153822)
+ (xy 166.288451 119.083811) (xy 166.370986 118.986972) (xy 166.423275 118.870974) (xy 166.441177 118.745) (xy 166.441177 117.221)
+ (xy 166.435463 117.149339) (xy 166.398354 117.029512) (xy 203.249204 117.029512) (xy 203.280871 117.202051) (xy 203.345448 117.365152)
+ (xy 203.440474 117.512605) (xy 203.562332 117.638792) (xy 203.706378 117.738907) (xy 203.867127 117.809136) (xy 204.038455 117.846805)
+ (xy 204.213837 117.850479) (xy 204.386593 117.820017) (xy 204.550141 117.756581) (xy 204.698254 117.662586) (xy 204.825288 117.541613)
+ (xy 204.926406 117.398269) (xy 204.997756 117.238014) (xy 205.03662 117.066953) (xy 205.038101 116.960901) (xy 205.057094 116.941908)
+ (xy 221.036407 116.941908) (xy 221.079314 117.175689) (xy 221.166812 117.396683) (xy 221.295568 117.596474) (xy 221.460678 117.76745)
+ (xy 221.655853 117.9031) (xy 221.873659 117.998257) (xy 222.1058 118.049297) (xy 222.343433 118.054275) (xy 222.577508 118.013001)
+ (xy 222.799108 117.927048) (xy 222.999792 117.79969) (xy 223.171917 117.635777) (xy 223.308927 117.441554) (xy 223.405602 117.224418)
+ (xy 223.458261 116.992639) (xy 223.458969 116.941908) (xy 223.576407 116.941908) (xy 223.619314 117.175689) (xy 223.706812 117.396683)
+ (xy 223.835568 117.596474) (xy 224.000678 117.76745) (xy 224.195853 117.9031) (xy 224.413659 117.998257) (xy 224.6458 118.049297)
+ (xy 224.883433 118.054275) (xy 225.117508 118.013001) (xy 225.339108 117.927048) (xy 225.539792 117.79969) (xy 225.711917 117.635777)
+ (xy 225.848927 117.441554) (xy 225.945602 117.224418) (xy 225.998261 116.992639) (xy 226.002052 116.721157) (xy 225.955885 116.487999)
+ (xy 225.86531 116.268247) (xy 225.733777 116.070274) (xy 225.566296 115.90162) (xy 225.369246 115.768708) (xy 225.150132 115.676601)
+ (xy 224.917301 115.628808) (xy 224.679622 115.627148) (xy 224.446147 115.671686) (xy 224.225768 115.760725) (xy 224.026882 115.890872)
+ (xy 223.857062 116.057172) (xy 223.722778 116.25329) (xy 223.629143 116.471755) (xy 223.579726 116.704246) (xy 223.576407 116.941908)
+ (xy 223.458969 116.941908) (xy 223.462052 116.721157) (xy 223.415885 116.487999) (xy 223.32531 116.268247) (xy 223.193777 116.070274)
+ (xy 223.026296 115.90162) (xy 222.829246 115.768708) (xy 222.610132 115.676601) (xy 222.377301 115.628808) (xy 222.139622 115.627148)
+ (xy 221.906147 115.671686) (xy 221.685768 115.760725) (xy 221.486882 115.890872) (xy 221.317062 116.057172) (xy 221.182778 116.25329)
+ (xy 221.089143 116.471755) (xy 221.039726 116.704246) (xy 221.036407 116.941908) (xy 205.057094 116.941908) (xy 206.275001 115.724001)
+ (xy 206.308856 115.682785) (xy 206.34309 115.641986) (xy 206.34455 115.63933) (xy 206.346478 115.636983) (xy 206.371675 115.589991)
+ (xy 206.397341 115.543304) (xy 206.398259 115.540411) (xy 206.399692 115.537738) (xy 206.415285 115.486739) (xy 206.431391 115.435965)
+ (xy 206.431729 115.432954) (xy 206.432617 115.430049) (xy 206.438003 115.377018) (xy 206.440399 115.355652) (xy 215.794264 115.355652)
+ (xy 215.825931 115.528191) (xy 215.890508 115.691292) (xy 215.985534 115.838745) (xy 216.107392 115.964932) (xy 216.251438 116.065047)
+ (xy 216.412187 116.135276) (xy 216.583515 116.172945) (xy 216.758897 116.176619) (xy 216.931653 116.146157) (xy 217.095201 116.082721)
+ (xy 217.243314 115.988726) (xy 217.370348 115.867753) (xy 217.396533 115.830632) (xy 219.106424 115.830632) (xy 219.138091 116.003171)
+ (xy 219.202668 116.166272) (xy 219.297694 116.313725) (xy 219.419552 116.439912) (xy 219.563598 116.540027) (xy 219.724347 116.610256)
+ (xy 219.895675 116.647925) (xy 220.071057 116.651599) (xy 220.243813 116.621137) (xy 220.407361 116.557701) (xy 220.555474 116.463706)
+ (xy 220.682508 116.342733) (xy 220.783626 116.199389) (xy 220.854976 116.039134) (xy 220.89384 115.868073) (xy 220.896638 115.66771)
+ (xy 220.862566 115.49563) (xy 220.795718 115.333446) (xy 220.698642 115.187334) (xy 220.575035 115.062861) (xy 220.429604 114.964767)
+ (xy 220.267891 114.896789) (xy 220.096053 114.861516) (xy 219.920637 114.860291) (xy 219.748324 114.893162) (xy 219.585677 114.958875)
+ (xy 219.438891 115.054929) (xy 219.313558 115.177664) (xy 219.214451 115.322406) (xy 219.145346 115.483641) (xy 219.108874 115.655229)
+ (xy 219.106424 115.830632) (xy 217.396533 115.830632) (xy 217.471466 115.724409) (xy 217.542816 115.564154) (xy 217.58168 115.393093)
+ (xy 217.584478 115.19273) (xy 217.550406 115.02065) (xy 217.483558 114.858466) (xy 217.386482 114.712354) (xy 217.262875 114.587881)
+ (xy 217.117444 114.489787) (xy 216.955731 114.421809) (xy 216.858781 114.401908) (xy 221.036407 114.401908) (xy 221.079314 114.635689)
+ (xy 221.166812 114.856683) (xy 221.295568 115.056474) (xy 221.460678 115.22745) (xy 221.655853 115.3631) (xy 221.873659 115.458257)
+ (xy 222.1058 115.509297) (xy 222.343433 115.514275) (xy 222.577508 115.473001) (xy 222.799108 115.387048) (xy 222.999792 115.25969)
+ (xy 223.171917 115.095777) (xy 223.308927 114.901554) (xy 223.405602 114.684418) (xy 223.458261 114.452639) (xy 223.458969 114.401908)
+ (xy 223.576407 114.401908) (xy 223.619314 114.635689) (xy 223.706812 114.856683) (xy 223.835568 115.056474) (xy 224.000678 115.22745)
+ (xy 224.195853 115.3631) (xy 224.413659 115.458257) (xy 224.6458 115.509297) (xy 224.883433 115.514275) (xy 225.117508 115.473001)
+ (xy 225.339108 115.387048) (xy 225.539792 115.25969) (xy 225.711917 115.095777) (xy 225.848927 114.901554) (xy 225.945602 114.684418)
+ (xy 225.998261 114.452639) (xy 226.002052 114.181157) (xy 225.955885 113.947999) (xy 225.86531 113.728247) (xy 225.733777 113.530274)
+ (xy 225.566296 113.36162) (xy 225.369246 113.228708) (xy 225.150132 113.136601) (xy 224.917301 113.088808) (xy 224.679622 113.087148)
+ (xy 224.446147 113.131686) (xy 224.225768 113.220725) (xy 224.026882 113.350872) (xy 223.857062 113.517172) (xy 223.722778 113.71329)
+ (xy 223.629143 113.931755) (xy 223.579726 114.164246) (xy 223.576407 114.401908) (xy 223.458969 114.401908) (xy 223.462052 114.181157)
+ (xy 223.415885 113.947999) (xy 223.32531 113.728247) (xy 223.193777 113.530274) (xy 223.026296 113.36162) (xy 222.829246 113.228708)
+ (xy 222.610132 113.136601) (xy 222.377301 113.088808) (xy 222.139622 113.087148) (xy 221.906147 113.131686) (xy 221.685768 113.220725)
+ (xy 221.486882 113.350872) (xy 221.317062 113.517172) (xy 221.182778 113.71329) (xy 221.089143 113.931755) (xy 221.039726 114.164246)
+ (xy 221.036407 114.401908) (xy 216.858781 114.401908) (xy 216.783893 114.386536) (xy 216.608477 114.385311) (xy 216.436164 114.418182)
+ (xy 216.273517 114.483895) (xy 216.126731 114.579949) (xy 216.001398 114.702684) (xy 215.902291 114.847426) (xy 215.833186 115.008661)
+ (xy 215.796714 115.180249) (xy 215.794264 115.355652) (xy 206.440399 115.355652) (xy 206.443944 115.324056) (xy 206.443985 115.31812)
+ (xy 206.443996 115.318014) (xy 206.443987 115.317915) (xy 206.444 115.316) (xy 206.444 113.935792) (xy 208.484144 113.935792)
+ (xy 208.515811 114.108331) (xy 208.580388 114.271432) (xy 208.675414 114.418885) (xy 208.797272 114.545072) (xy 208.941318 114.645187)
+ (xy 209.102067 114.715416) (xy 209.273395 114.753085) (xy 209.448777 114.756759) (xy 209.621533 114.726297) (xy 209.785081 114.662861)
+ (xy 209.933194 114.568866) (xy 210.060228 114.447893) (xy 210.161346 114.304549) (xy 210.232696 114.144294) (xy 210.27156 113.973233)
+ (xy 210.274358 113.77287) (xy 210.240286 113.60079) (xy 210.239339 113.598491) (xy 210.386437 113.598491) (xy 210.4226 113.795526)
+ (xy 210.496345 113.981785) (xy 210.604863 114.150173) (xy 210.744022 114.294276) (xy 210.90852 114.408605) (xy 211.092092 114.488805)
+ (xy 211.287745 114.531822) (xy 211.488028 114.536018) (xy 211.685311 114.501231) (xy 211.87208 114.428788) (xy 212.041221 114.321448)
+ (xy 212.186292 114.183299) (xy 212.301767 114.019603) (xy 212.383247 113.836596) (xy 212.427629 113.641247) (xy 212.430824 113.412437)
+ (xy 212.391914 113.215925) (xy 212.315575 113.030714) (xy 212.204716 112.863858) (xy 212.063559 112.721712) (xy 211.897481 112.609691)
+ (xy 211.712807 112.532061) (xy 211.516573 112.49178) (xy 211.316251 112.490381) (xy 211.119473 112.527919) (xy 210.933733 112.602963)
+ (xy 210.766107 112.712654) (xy 210.622979 112.852815) (xy 210.509801 113.018107) (xy 210.430884 113.202235) (xy 210.389234 113.398183)
+ (xy 210.386437 113.598491) (xy 210.239339 113.598491) (xy 210.173438 113.438606) (xy 210.076362 113.292494) (xy 209.952755 113.168021)
+ (xy 209.807324 113.069927) (xy 209.645611 113.001949) (xy 209.473773 112.966676) (xy 209.298357 112.965451) (xy 209.126044 112.998322)
+ (xy 208.963397 113.064035) (xy 208.816611 113.160089) (xy 208.691278 113.282824) (xy 208.592171 113.427566) (xy 208.523066 113.588801)
+ (xy 208.486594 113.760389) (xy 208.484144 113.935792) (xy 206.444 113.935792) (xy 206.444 111.61575) (xy 207.0505 111.61575)
+ (xy 207.0505 111.939299) (xy 207.070906 112.041887) (xy 207.110934 112.138523) (xy 207.169045 112.225493) (xy 207.243007 112.299455)
+ (xy 207.329977 112.357566) (xy 207.426613 112.397594) (xy 207.529201 112.418) (xy 208.10675 112.418) (xy 208.2395 112.28525)
+ (xy 208.2395 111.483) (xy 208.3205 111.483) (xy 208.3205 112.28525) (xy 208.45325 112.418) (xy 209.030799 112.418)
+ (xy 209.133387 112.397594) (xy 209.230023 112.357566) (xy 209.316993 112.299455) (xy 209.390955 112.225493) (xy 209.449066 112.138523)
+ (xy 209.489094 112.041887) (xy 209.5095 111.939299) (xy 209.5095 111.861908) (xy 221.036407 111.861908) (xy 221.079314 112.095689)
+ (xy 221.166812 112.316683) (xy 221.295568 112.516474) (xy 221.460678 112.68745) (xy 221.655853 112.8231) (xy 221.873659 112.918257)
+ (xy 222.1058 112.969297) (xy 222.343433 112.974275) (xy 222.577508 112.933001) (xy 222.799108 112.847048) (xy 222.999792 112.71969)
+ (xy 223.171917 112.555777) (xy 223.308927 112.361554) (xy 223.405602 112.144418) (xy 223.458261 111.912639) (xy 223.458969 111.861908)
+ (xy 223.576407 111.861908) (xy 223.619314 112.095689) (xy 223.706812 112.316683) (xy 223.835568 112.516474) (xy 224.000678 112.68745)
+ (xy 224.195853 112.8231) (xy 224.413659 112.918257) (xy 224.6458 112.969297) (xy 224.883433 112.974275) (xy 225.117508 112.933001)
+ (xy 225.339108 112.847048) (xy 225.539792 112.71969) (xy 225.711917 112.555777) (xy 225.848927 112.361554) (xy 225.945602 112.144418)
+ (xy 225.998261 111.912639) (xy 226.002052 111.641157) (xy 225.955885 111.407999) (xy 225.86531 111.188247) (xy 225.733777 110.990274)
+ (xy 225.566296 110.82162) (xy 225.369246 110.688708) (xy 225.150132 110.596601) (xy 224.917301 110.548808) (xy 224.679622 110.547148)
+ (xy 224.446147 110.591686) (xy 224.225768 110.680725) (xy 224.026882 110.810872) (xy 223.857062 110.977172) (xy 223.722778 111.17329)
+ (xy 223.629143 111.391755) (xy 223.579726 111.624246) (xy 223.576407 111.861908) (xy 223.458969 111.861908) (xy 223.462052 111.641157)
+ (xy 223.415885 111.407999) (xy 223.32531 111.188247) (xy 223.193777 110.990274) (xy 223.026296 110.82162) (xy 222.829246 110.688708)
+ (xy 222.610132 110.596601) (xy 222.377301 110.548808) (xy 222.139622 110.547148) (xy 221.906147 110.591686) (xy 221.685768 110.680725)
+ (xy 221.486882 110.810872) (xy 221.317062 110.977172) (xy 221.182778 111.17329) (xy 221.089143 111.391755) (xy 221.039726 111.624246)
+ (xy 221.036407 111.861908) (xy 209.5095 111.861908) (xy 209.5095 111.61575) (xy 209.37675 111.483) (xy 208.3205 111.483)
+ (xy 208.2395 111.483) (xy 207.18325 111.483) (xy 207.0505 111.61575) (xy 206.444 111.61575) (xy 206.444 110.931151)
+ (xy 206.517552 110.963285) (xy 206.713205 111.006302) (xy 206.913488 111.010498) (xy 207.0505 110.986339) (xy 207.0505 111.26925)
+ (xy 207.18325 111.402) (xy 208.2395 111.402) (xy 208.2395 110.59975) (xy 208.3205 110.59975) (xy 208.3205 111.402)
+ (xy 209.37675 111.402) (xy 209.5095 111.26925) (xy 209.5095 110.945701) (xy 209.489094 110.843113) (xy 209.449066 110.746477)
+ (xy 209.390955 110.659507) (xy 209.316993 110.585545) (xy 209.230023 110.527434) (xy 209.133387 110.487406) (xy 209.030799 110.467)
+ (xy 208.45325 110.467) (xy 208.3205 110.59975) (xy 208.2395 110.59975) (xy 208.10675 110.467) (xy 207.739285 110.467)
+ (xy 207.753899 110.434177) (xy 208.9785 110.434177) (xy 209.050161 110.428463) (xy 209.171705 110.390822) (xy 209.277951 110.320811)
+ (xy 209.360486 110.223972) (xy 209.412775 110.107974) (xy 209.414861 110.093291) (xy 210.386437 110.093291) (xy 210.4226 110.290326)
+ (xy 210.496345 110.476585) (xy 210.604863 110.644973) (xy 210.744022 110.789076) (xy 210.90852 110.903405) (xy 211.092092 110.983605)
+ (xy 211.287745 111.026622) (xy 211.488028 111.030818) (xy 211.685311 110.996031) (xy 211.87208 110.923588) (xy 212.041221 110.816248)
+ (xy 212.186292 110.678099) (xy 212.301767 110.514403) (xy 212.383247 110.331396) (xy 212.427629 110.136047) (xy 212.430824 109.907237)
+ (xy 212.391914 109.710725) (xy 212.315575 109.525514) (xy 212.204716 109.358658) (xy 212.168222 109.321908) (xy 221.036407 109.321908)
+ (xy 221.079314 109.555689) (xy 221.166812 109.776683) (xy 221.295568 109.976474) (xy 221.460678 110.14745) (xy 221.655853 110.2831)
+ (xy 221.873659 110.378257) (xy 222.1058 110.429297) (xy 222.343433 110.434275) (xy 222.577508 110.393001) (xy 222.799108 110.307048)
+ (xy 222.999792 110.17969) (xy 223.171917 110.015777) (xy 223.308927 109.821554) (xy 223.405602 109.604418) (xy 223.458261 109.372639)
+ (xy 223.458969 109.321908) (xy 223.576407 109.321908) (xy 223.619314 109.555689) (xy 223.706812 109.776683) (xy 223.835568 109.976474)
+ (xy 224.000678 110.14745) (xy 224.195853 110.2831) (xy 224.413659 110.378257) (xy 224.6458 110.429297) (xy 224.883433 110.434275)
+ (xy 225.117508 110.393001) (xy 225.339108 110.307048) (xy 225.539792 110.17969) (xy 225.711917 110.015777) (xy 225.848927 109.821554)
+ (xy 225.945602 109.604418) (xy 225.998261 109.372639) (xy 226.002052 109.101157) (xy 225.955885 108.867999) (xy 225.86531 108.648247)
+ (xy 225.733777 108.450274) (xy 225.566296 108.28162) (xy 225.369246 108.148708) (xy 225.150132 108.056601) (xy 224.917301 108.008808)
+ (xy 224.679622 108.007148) (xy 224.446147 108.051686) (xy 224.225768 108.140725) (xy 224.026882 108.270872) (xy 223.857062 108.437172)
+ (xy 223.722778 108.63329) (xy 223.629143 108.851755) (xy 223.579726 109.084246) (xy 223.576407 109.321908) (xy 223.458969 109.321908)
+ (xy 223.462052 109.101157) (xy 223.415885 108.867999) (xy 223.32531 108.648247) (xy 223.193777 108.450274) (xy 223.026296 108.28162)
+ (xy 222.829246 108.148708) (xy 222.610132 108.056601) (xy 222.377301 108.008808) (xy 222.139622 108.007148) (xy 221.906147 108.051686)
+ (xy 221.685768 108.140725) (xy 221.486882 108.270872) (xy 221.317062 108.437172) (xy 221.182778 108.63329) (xy 221.089143 108.851755)
+ (xy 221.039726 109.084246) (xy 221.036407 109.321908) (xy 212.168222 109.321908) (xy 212.063559 109.216512) (xy 211.897481 109.104491)
+ (xy 211.712807 109.026861) (xy 211.516573 108.98658) (xy 211.316251 108.985181) (xy 211.119473 109.022719) (xy 210.933733 109.097763)
+ (xy 210.766107 109.207454) (xy 210.622979 109.347615) (xy 210.509801 109.512907) (xy 210.430884 109.697035) (xy 210.389234 109.892983)
+ (xy 210.386437 110.093291) (xy 209.414861 110.093291) (xy 209.430677 109.982) (xy 209.430677 109.093) (xy 209.424963 109.021339)
+ (xy 209.387322 108.899795) (xy 209.317311 108.793549) (xy 209.220472 108.711014) (xy 209.104474 108.658725) (xy 208.9785 108.640823)
+ (xy 207.5815 108.640823) (xy 207.509839 108.646537) (xy 207.388295 108.684178) (xy 207.282049 108.754189) (xy 207.231704 108.813259)
+ (xy 207.217202 108.814681) (xy 207.150146 108.820547) (xy 207.146465 108.821616) (xy 207.142645 108.821991) (xy 207.078091 108.841481)
+ (xy 207.013444 108.860263) (xy 207.010042 108.862026) (xy 207.006367 108.863136) (xy 206.946834 108.89479) (xy 206.88706 108.925774)
+ (xy 206.884064 108.928165) (xy 206.880676 108.929967) (xy 206.837075 108.965527) (xy 206.741711 108.964861) (xy 206.544933 109.002399)
+ (xy 206.444 109.043179) (xy 206.444 108.081092) (xy 214.018804 108.081092) (xy 214.050471 108.253631) (xy 214.115048 108.416732)
+ (xy 214.210074 108.564185) (xy 214.331932 108.690372) (xy 214.475978 108.790487) (xy 214.636727 108.860716) (xy 214.808055 108.898385)
+ (xy 214.983437 108.902059) (xy 215.156193 108.871597) (xy 215.319741 108.808161) (xy 215.467854 108.714166) (xy 215.594888 108.593193)
+ (xy 215.696006 108.449849) (xy 215.767356 108.289594) (xy 215.80622 108.118533) (xy 215.809018 107.91817) (xy 215.774946 107.74609)
+ (xy 215.708098 107.583906) (xy 215.611022 107.437794) (xy 215.487415 107.313321) (xy 215.341984 107.215227) (xy 215.180271 107.147249)
+ (xy 215.008433 107.111976) (xy 214.833017 107.110751) (xy 214.660704 107.143622) (xy 214.498057 107.209335) (xy 214.351271 107.305389)
+ (xy 214.225938 107.428124) (xy 214.126831 107.572866) (xy 214.057726 107.734101) (xy 214.021254 107.905689) (xy 214.018804 108.081092)
+ (xy 206.444 108.081092) (xy 206.444 106.781908) (xy 221.036407 106.781908) (xy 221.079314 107.015689) (xy 221.166812 107.236683)
+ (xy 221.295568 107.436474) (xy 221.460678 107.60745) (xy 221.655853 107.7431) (xy 221.873659 107.838257) (xy 222.1058 107.889297)
+ (xy 222.343433 107.894275) (xy 222.577508 107.853001) (xy 222.799108 107.767048) (xy 222.999792 107.63969) (xy 223.171917 107.475777)
+ (xy 223.308927 107.281554) (xy 223.405602 107.064418) (xy 223.458261 106.832639) (xy 223.458969 106.781908) (xy 223.576407 106.781908)
+ (xy 223.619314 107.015689) (xy 223.706812 107.236683) (xy 223.835568 107.436474) (xy 224.000678 107.60745) (xy 224.195853 107.7431)
+ (xy 224.413659 107.838257) (xy 224.6458 107.889297) (xy 224.883433 107.894275) (xy 225.117508 107.853001) (xy 225.339108 107.767048)
+ (xy 225.539792 107.63969) (xy 225.711917 107.475777) (xy 225.848927 107.281554) (xy 225.945602 107.064418) (xy 225.998261 106.832639)
+ (xy 226.002052 106.561157) (xy 225.955885 106.327999) (xy 225.86531 106.108247) (xy 225.733777 105.910274) (xy 225.566296 105.74162)
+ (xy 225.369246 105.608708) (xy 225.150132 105.516601) (xy 224.917301 105.468808) (xy 224.679622 105.467148) (xy 224.446147 105.511686)
+ (xy 224.225768 105.600725) (xy 224.026882 105.730872) (xy 223.857062 105.897172) (xy 223.722778 106.09329) (xy 223.629143 106.311755)
+ (xy 223.579726 106.544246) (xy 223.576407 106.781908) (xy 223.458969 106.781908) (xy 223.462052 106.561157) (xy 223.415885 106.327999)
+ (xy 223.32531 106.108247) (xy 223.193777 105.910274) (xy 223.026296 105.74162) (xy 222.829246 105.608708) (xy 222.610132 105.516601)
+ (xy 222.377301 105.468808) (xy 222.139622 105.467148) (xy 221.906147 105.511686) (xy 221.685768 105.600725) (xy 221.486882 105.730872)
+ (xy 221.317062 105.897172) (xy 221.182778 106.09329) (xy 221.089143 106.311755) (xy 221.039726 106.544246) (xy 221.036407 106.781908)
+ (xy 206.444 106.781908) (xy 206.444 102.381332) (xy 206.726464 102.381332) (xy 206.758131 102.553871) (xy 206.822708 102.716972)
+ (xy 206.917734 102.864425) (xy 207.039592 102.990612) (xy 207.183638 103.090727) (xy 207.344387 103.160956) (xy 207.515715 103.198625)
+ (xy 207.691097 103.202299) (xy 207.863853 103.171837) (xy 208.027401 103.108401) (xy 208.175514 103.014406) (xy 208.302548 102.893433)
+ (xy 208.403666 102.750089) (xy 208.444975 102.657307) (xy 208.471526 102.669275) (xy 208.583931 102.685249) (xy 208.599981 102.738409)
+ (xy 208.618763 102.803056) (xy 208.620527 102.806458) (xy 208.621636 102.810133) (xy 208.653269 102.869627) (xy 208.684273 102.92944)
+ (xy 208.686667 102.932439) (xy 208.688467 102.935824) (xy 208.731034 102.988016) (xy 208.773085 103.040692) (xy 208.778352 103.046034)
+ (xy 208.778439 103.04614) (xy 208.778537 103.046221) (xy 208.780236 103.047944) (xy 208.815796 103.083503) (xy 208.867857 103.126267)
+ (xy 208.919473 103.169578) (xy 208.922835 103.171426) (xy 208.925798 103.17386) (xy 208.985198 103.20571) (xy 209.044219 103.238157)
+ (xy 209.047871 103.239315) (xy 209.051255 103.24113) (xy 209.115733 103.260843) (xy 209.179909 103.281201) (xy 209.183719 103.281628)
+ (xy 209.187388 103.28275) (xy 209.254401 103.289557) (xy 209.321376 103.297069) (xy 209.328878 103.297121) (xy 209.329013 103.297135)
+ (xy 209.329139 103.297123) (xy 209.33156 103.29714) (xy 209.555101 103.29714) (xy 209.538154 103.376869) (xy 209.535704 103.552272)
+ (xy 209.567371 103.724811) (xy 209.631948 103.887912) (xy 209.726974 104.035365) (xy 209.848832 104.161552) (xy 209.992878 104.261667)
+ (xy 210.153627 104.331896) (xy 210.324955 104.369565) (xy 210.500337 104.373239) (xy 210.673093 104.342777) (xy 210.836641 104.279341)
+ (xy 210.895626 104.241908) (xy 221.036407 104.241908) (xy 221.079314 104.475689) (xy 221.166812 104.696683) (xy 221.295568 104.896474)
+ (xy 221.460678 105.06745) (xy 221.655853 105.2031) (xy 221.873659 105.298257) (xy 222.1058 105.349297) (xy 222.343433 105.354275)
+ (xy 222.577508 105.313001) (xy 222.799108 105.227048) (xy 222.999792 105.09969) (xy 223.171917 104.935777) (xy 223.308927 104.741554)
+ (xy 223.405602 104.524418) (xy 223.458261 104.292639) (xy 223.458969 104.241908) (xy 223.576407 104.241908) (xy 223.619314 104.475689)
+ (xy 223.706812 104.696683) (xy 223.835568 104.896474) (xy 224.000678 105.06745) (xy 224.195853 105.2031) (xy 224.413659 105.298257)
+ (xy 224.6458 105.349297) (xy 224.883433 105.354275) (xy 225.117508 105.313001) (xy 225.339108 105.227048) (xy 225.539792 105.09969)
+ (xy 225.711917 104.935777) (xy 225.848927 104.741554) (xy 225.945602 104.524418) (xy 225.998261 104.292639) (xy 226.002052 104.021157)
+ (xy 225.955885 103.787999) (xy 225.86531 103.568247) (xy 225.733777 103.370274) (xy 225.566296 103.20162) (xy 225.369246 103.068708)
+ (xy 225.150132 102.976601) (xy 224.917301 102.928808) (xy 224.679622 102.927148) (xy 224.446147 102.971686) (xy 224.225768 103.060725)
+ (xy 224.026882 103.190872) (xy 223.857062 103.357172) (xy 223.722778 103.55329) (xy 223.629143 103.771755) (xy 223.579726 104.004246)
+ (xy 223.576407 104.241908) (xy 223.458969 104.241908) (xy 223.462052 104.021157) (xy 223.415885 103.787999) (xy 223.32531 103.568247)
+ (xy 223.193777 103.370274) (xy 223.026296 103.20162) (xy 222.829246 103.068708) (xy 222.610132 102.976601) (xy 222.377301 102.928808)
+ (xy 222.139622 102.927148) (xy 221.906147 102.971686) (xy 221.685768 103.060725) (xy 221.486882 103.190872) (xy 221.317062 103.357172)
+ (xy 221.182778 103.55329) (xy 221.089143 103.771755) (xy 221.039726 104.004246) (xy 221.036407 104.241908) (xy 210.895626 104.241908)
+ (xy 210.984754 104.185346) (xy 211.111788 104.064373) (xy 211.212906 103.921029) (xy 211.284256 103.760774) (xy 211.32312 103.589713)
+ (xy 211.32315 103.587597) (xy 211.493108 103.591158) (xy 211.690391 103.556371) (xy 211.87716 103.483928) (xy 212.046301 103.376588)
+ (xy 212.191372 103.238439) (xy 212.306847 103.074743) (xy 212.388327 102.891736) (xy 212.432709 102.696387) (xy 212.435904 102.467577)
+ (xy 212.396994 102.271065) (xy 212.320655 102.085854) (xy 212.209796 101.918998) (xy 212.068639 101.776852) (xy 211.95753 101.701908)
+ (xy 221.036407 101.701908) (xy 221.079314 101.935689) (xy 221.166812 102.156683) (xy 221.295568 102.356474) (xy 221.460678 102.52745)
+ (xy 221.655853 102.6631) (xy 221.873659 102.758257) (xy 222.1058 102.809297) (xy 222.343433 102.814275) (xy 222.577508 102.773001)
+ (xy 222.799108 102.687048) (xy 222.999792 102.55969) (xy 223.171917 102.395777) (xy 223.308927 102.201554) (xy 223.405602 101.984418)
+ (xy 223.458261 101.752639) (xy 223.458969 101.701908) (xy 223.576407 101.701908) (xy 223.619314 101.935689) (xy 223.706812 102.156683)
+ (xy 223.835568 102.356474) (xy 224.000678 102.52745) (xy 224.195853 102.6631) (xy 224.413659 102.758257) (xy 224.6458 102.809297)
+ (xy 224.883433 102.814275) (xy 225.117508 102.773001) (xy 225.339108 102.687048) (xy 225.539792 102.55969) (xy 225.711917 102.395777)
+ (xy 225.848927 102.201554) (xy 225.945602 101.984418) (xy 225.998261 101.752639) (xy 226.002052 101.481157) (xy 225.955885 101.247999)
+ (xy 225.86531 101.028247) (xy 225.733777 100.830274) (xy 225.566296 100.66162) (xy 225.369246 100.528708) (xy 225.150132 100.436601)
+ (xy 224.917301 100.388808) (xy 224.679622 100.387148) (xy 224.446147 100.431686) (xy 224.225768 100.520725) (xy 224.026882 100.650872)
+ (xy 223.857062 100.817172) (xy 223.722778 101.01329) (xy 223.629143 101.231755) (xy 223.579726 101.464246) (xy 223.576407 101.701908)
+ (xy 223.458969 101.701908) (xy 223.462052 101.481157) (xy 223.415885 101.247999) (xy 223.32531 101.028247) (xy 223.193777 100.830274)
+ (xy 223.026296 100.66162) (xy 222.829246 100.528708) (xy 222.610132 100.436601) (xy 222.377301 100.388808) (xy 222.139622 100.387148)
+ (xy 221.906147 100.431686) (xy 221.685768 100.520725) (xy 221.486882 100.650872) (xy 221.317062 100.817172) (xy 221.182778 101.01329)
+ (xy 221.089143 101.231755) (xy 221.039726 101.464246) (xy 221.036407 101.701908) (xy 211.95753 101.701908) (xy 211.902561 101.664831)
+ (xy 211.717887 101.587201) (xy 211.521653 101.54692) (xy 211.321331 101.545521) (xy 211.124553 101.583059) (xy 210.938813 101.658103)
+ (xy 210.771187 101.767794) (xy 210.699148 101.83834) (xy 210.446677 101.83834) (xy 210.446677 101.346) (xy 210.440963 101.274339)
+ (xy 210.403322 101.152795) (xy 210.333311 101.046549) (xy 210.236472 100.964014) (xy 210.120474 100.911725) (xy 209.9945 100.893823)
+ (xy 208.5975 100.893823) (xy 208.525839 100.899537) (xy 208.404295 100.937178) (xy 208.298049 101.007189) (xy 208.215514 101.104028)
+ (xy 208.163225 101.220026) (xy 208.145323 101.346) (xy 208.145323 101.580003) (xy 208.049644 101.515467) (xy 207.887931 101.447489)
+ (xy 207.716093 101.412216) (xy 207.540677 101.410991) (xy 207.368364 101.443862) (xy 207.205717 101.509575) (xy 207.058931 101.605629)
+ (xy 206.933598 101.728364) (xy 206.834491 101.873106) (xy 206.765386 102.034341) (xy 206.728914 102.205929) (xy 206.726464 102.381332)
+ (xy 206.444 102.381332) (xy 206.444 100.05875) (xy 208.0665 100.05875) (xy 208.0665 100.382299) (xy 208.086906 100.484887)
+ (xy 208.126934 100.581523) (xy 208.185045 100.668493) (xy 208.259007 100.742455) (xy 208.345977 100.800566) (xy 208.442613 100.840594)
+ (xy 208.545201 100.861) (xy 209.12275 100.861) (xy 209.2555 100.72825) (xy 209.2555 99.926) (xy 209.3365 99.926)
+ (xy 209.3365 100.72825) (xy 209.46925 100.861) (xy 210.046799 100.861) (xy 210.149387 100.840594) (xy 210.246023 100.800566)
+ (xy 210.332993 100.742455) (xy 210.406955 100.668493) (xy 210.465066 100.581523) (xy 210.505094 100.484887) (xy 210.5255 100.382299)
+ (xy 210.5255 100.05875) (xy 210.39275 99.926) (xy 209.3365 99.926) (xy 209.2555 99.926) (xy 208.19925 99.926)
+ (xy 208.0665 100.05875) (xy 206.444 100.05875) (xy 206.444 99.388701) (xy 208.0665 99.388701) (xy 208.0665 99.71225)
+ (xy 208.19925 99.845) (xy 209.2555 99.845) (xy 209.2555 99.04275) (xy 209.3365 99.04275) (xy 209.3365 99.845)
+ (xy 210.39275 99.845) (xy 210.5255 99.71225) (xy 210.5255 99.388701) (xy 210.505094 99.286113) (xy 210.465066 99.189477)
+ (xy 210.446646 99.161908) (xy 221.036407 99.161908) (xy 221.079314 99.395689) (xy 221.166812 99.616683) (xy 221.295568 99.816474)
+ (xy 221.460678 99.98745) (xy 221.655853 100.1231) (xy 221.873659 100.218257) (xy 222.1058 100.269297) (xy 222.343433 100.274275)
+ (xy 222.577508 100.233001) (xy 222.799108 100.147048) (xy 222.999792 100.01969) (xy 223.171917 99.855777) (xy 223.308927 99.661554)
+ (xy 223.405602 99.444418) (xy 223.458261 99.212639) (xy 223.458969 99.161908) (xy 223.576407 99.161908) (xy 223.619314 99.395689)
+ (xy 223.706812 99.616683) (xy 223.835568 99.816474) (xy 224.000678 99.98745) (xy 224.195853 100.1231) (xy 224.413659 100.218257)
+ (xy 224.6458 100.269297) (xy 224.883433 100.274275) (xy 225.117508 100.233001) (xy 225.339108 100.147048) (xy 225.539792 100.01969)
+ (xy 225.711917 99.855777) (xy 225.848927 99.661554) (xy 225.945602 99.444418) (xy 225.998261 99.212639) (xy 226.002052 98.941157)
+ (xy 225.955885 98.707999) (xy 225.86531 98.488247) (xy 225.733777 98.290274) (xy 225.566296 98.12162) (xy 225.369246 97.988708)
+ (xy 225.150132 97.896601) (xy 224.917301 97.848808) (xy 224.679622 97.847148) (xy 224.446147 97.891686) (xy 224.225768 97.980725)
+ (xy 224.026882 98.110872) (xy 223.857062 98.277172) (xy 223.722778 98.47329) (xy 223.629143 98.691755) (xy 223.579726 98.924246)
+ (xy 223.576407 99.161908) (xy 223.458969 99.161908) (xy 223.462052 98.941157) (xy 223.415885 98.707999) (xy 223.32531 98.488247)
+ (xy 223.193777 98.290274) (xy 223.026296 98.12162) (xy 222.829246 97.988708) (xy 222.610132 97.896601) (xy 222.377301 97.848808)
+ (xy 222.139622 97.847148) (xy 221.906147 97.891686) (xy 221.685768 97.980725) (xy 221.486882 98.110872) (xy 221.317062 98.277172)
+ (xy 221.182778 98.47329) (xy 221.089143 98.691755) (xy 221.039726 98.924246) (xy 221.036407 99.161908) (xy 210.446646 99.161908)
+ (xy 210.406955 99.102507) (xy 210.332993 99.028545) (xy 210.246023 98.970434) (xy 210.149387 98.930406) (xy 210.046799 98.91)
+ (xy 209.46925 98.91) (xy 209.3365 99.04275) (xy 209.2555 99.04275) (xy 209.12275 98.91) (xy 208.545201 98.91)
+ (xy 208.442613 98.930406) (xy 208.345977 98.970434) (xy 208.259007 99.028545) (xy 208.185045 99.102507) (xy 208.126934 99.189477)
+ (xy 208.086906 99.286113) (xy 208.0665 99.388701) (xy 206.444 99.388701) (xy 206.444 96.621908) (xy 221.036407 96.621908)
+ (xy 221.079314 96.855689) (xy 221.166812 97.076683) (xy 221.295568 97.276474) (xy 221.460678 97.44745) (xy 221.655853 97.5831)
+ (xy 221.873659 97.678257) (xy 222.1058 97.729297) (xy 222.343433 97.734275) (xy 222.577508 97.693001) (xy 222.799108 97.607048)
+ (xy 222.999792 97.47969) (xy 223.171917 97.315777) (xy 223.308927 97.121554) (xy 223.405602 96.904418) (xy 223.458261 96.672639)
+ (xy 223.458969 96.621908) (xy 223.576407 96.621908) (xy 223.619314 96.855689) (xy 223.706812 97.076683) (xy 223.835568 97.276474)
+ (xy 224.000678 97.44745) (xy 224.195853 97.5831) (xy 224.413659 97.678257) (xy 224.6458 97.729297) (xy 224.883433 97.734275)
+ (xy 225.117508 97.693001) (xy 225.339108 97.607048) (xy 225.539792 97.47969) (xy 225.711917 97.315777) (xy 225.848927 97.121554)
+ (xy 225.945602 96.904418) (xy 225.998261 96.672639) (xy 226.002052 96.401157) (xy 225.955885 96.167999) (xy 225.86531 95.948247)
+ (xy 225.733777 95.750274) (xy 225.566296 95.58162) (xy 225.369246 95.448708) (xy 225.150132 95.356601) (xy 224.917301 95.308808)
+ (xy 224.679622 95.307148) (xy 224.446147 95.351686) (xy 224.225768 95.440725) (xy 224.026882 95.570872) (xy 223.857062 95.737172)
+ (xy 223.722778 95.93329) (xy 223.629143 96.151755) (xy 223.579726 96.384246) (xy 223.576407 96.621908) (xy 223.458969 96.621908)
+ (xy 223.462052 96.401157) (xy 223.415885 96.167999) (xy 223.32531 95.948247) (xy 223.193777 95.750274) (xy 223.026296 95.58162)
+ (xy 222.829246 95.448708) (xy 222.610132 95.356601) (xy 222.377301 95.308808) (xy 222.139622 95.307148) (xy 221.906147 95.351686)
+ (xy 221.685768 95.440725) (xy 221.486882 95.570872) (xy 221.317062 95.737172) (xy 221.182778 95.93329) (xy 221.089143 96.151755)
+ (xy 221.039726 96.384246) (xy 221.036407 96.621908) (xy 206.444 96.621908) (xy 206.444 94.081908) (xy 221.036407 94.081908)
+ (xy 221.079314 94.315689) (xy 221.166812 94.536683) (xy 221.295568 94.736474) (xy 221.460678 94.90745) (xy 221.655853 95.0431)
+ (xy 221.873659 95.138257) (xy 222.1058 95.189297) (xy 222.343433 95.194275) (xy 222.577508 95.153001) (xy 222.799108 95.067048)
+ (xy 222.999792 94.93969) (xy 223.171917 94.775777) (xy 223.308927 94.581554) (xy 223.405602 94.364418) (xy 223.458261 94.132639)
+ (xy 223.458969 94.081908) (xy 223.576407 94.081908) (xy 223.619314 94.315689) (xy 223.706812 94.536683) (xy 223.835568 94.736474)
+ (xy 224.000678 94.90745) (xy 224.195853 95.0431) (xy 224.413659 95.138257) (xy 224.6458 95.189297) (xy 224.883433 95.194275)
+ (xy 225.117508 95.153001) (xy 225.339108 95.067048) (xy 225.539792 94.93969) (xy 225.711917 94.775777) (xy 225.848927 94.581554)
+ (xy 225.945602 94.364418) (xy 225.998261 94.132639) (xy 226.002052 93.861157) (xy 225.955885 93.627999) (xy 225.86531 93.408247)
+ (xy 225.733777 93.210274) (xy 225.566296 93.04162) (xy 225.369246 92.908708) (xy 225.150132 92.816601) (xy 224.917301 92.768808)
+ (xy 224.679622 92.767148) (xy 224.446147 92.811686) (xy 224.225768 92.900725) (xy 224.026882 93.030872) (xy 223.857062 93.197172)
+ (xy 223.722778 93.39329) (xy 223.629143 93.611755) (xy 223.579726 93.844246) (xy 223.576407 94.081908) (xy 223.458969 94.081908)
+ (xy 223.462052 93.861157) (xy 223.415885 93.627999) (xy 223.32531 93.408247) (xy 223.193777 93.210274) (xy 223.026296 93.04162)
+ (xy 222.829246 92.908708) (xy 222.610132 92.816601) (xy 222.377301 92.768808) (xy 222.139622 92.767148) (xy 221.906147 92.811686)
+ (xy 221.685768 92.900725) (xy 221.486882 93.030872) (xy 221.317062 93.197172) (xy 221.182778 93.39329) (xy 221.089143 93.611755)
+ (xy 221.039726 93.844246) (xy 221.036407 94.081908) (xy 206.444 94.081908) (xy 206.444 91.552002) (xy 206.454094 91.541908)
+ (xy 221.036407 91.541908) (xy 221.079314 91.775689) (xy 221.166812 91.996683) (xy 221.295568 92.196474) (xy 221.460678 92.36745)
+ (xy 221.655853 92.5031) (xy 221.873659 92.598257) (xy 222.1058 92.649297) (xy 222.343433 92.654275) (xy 222.577508 92.613001)
+ (xy 222.799108 92.527048) (xy 222.999792 92.39969) (xy 223.171917 92.235777) (xy 223.308927 92.041554) (xy 223.405602 91.824418)
+ (xy 223.458261 91.592639) (xy 223.458969 91.541908) (xy 223.576407 91.541908) (xy 223.619314 91.775689) (xy 223.706812 91.996683)
+ (xy 223.835568 92.196474) (xy 224.000678 92.36745) (xy 224.195853 92.5031) (xy 224.413659 92.598257) (xy 224.6458 92.649297)
+ (xy 224.883433 92.654275) (xy 225.117508 92.613001) (xy 225.339108 92.527048) (xy 225.539792 92.39969) (xy 225.711917 92.235777)
+ (xy 225.848927 92.041554) (xy 225.945602 91.824418) (xy 225.998261 91.592639) (xy 226.002052 91.321157) (xy 225.955885 91.087999)
+ (xy 225.86531 90.868247) (xy 225.733777 90.670274) (xy 225.566296 90.50162) (xy 225.369246 90.368708) (xy 225.150132 90.276601)
+ (xy 224.917301 90.228808) (xy 224.679622 90.227148) (xy 224.446147 90.271686) (xy 224.225768 90.360725) (xy 224.026882 90.490872)
+ (xy 223.857062 90.657172) (xy 223.722778 90.85329) (xy 223.629143 91.071755) (xy 223.579726 91.304246) (xy 223.576407 91.541908)
+ (xy 223.458969 91.541908) (xy 223.462052 91.321157) (xy 223.415885 91.087999) (xy 223.32531 90.868247) (xy 223.193777 90.670274)
+ (xy 223.026296 90.50162) (xy 222.829246 90.368708) (xy 222.610132 90.276601) (xy 222.377301 90.228808) (xy 222.139622 90.227148)
+ (xy 221.906147 90.271686) (xy 221.685768 90.360725) (xy 221.486882 90.490872) (xy 221.317062 90.657172) (xy 221.182778 90.85329)
+ (xy 221.089143 91.071755) (xy 221.039726 91.304246) (xy 221.036407 91.541908) (xy 206.454094 91.541908) (xy 209.858002 88.138)
+ (xy 221.035823 88.138) (xy 221.035823 89.662) (xy 221.041537 89.733661) (xy 221.079178 89.855205) (xy 221.149189 89.961451)
+ (xy 221.246028 90.043986) (xy 221.362026 90.096275) (xy 221.488 90.114177) (xy 223.012 90.114177) (xy 223.083661 90.108463)
+ (xy 223.205205 90.070822) (xy 223.311451 90.000811) (xy 223.393986 89.903972) (xy 223.446275 89.787974) (xy 223.451247 89.752985)
+ (xy 223.994291 89.752985) (xy 224.059453 89.974415) (xy 224.283098 90.096293) (xy 224.526223 90.172199) (xy 224.779485 90.199214)
+ (xy 225.033151 90.176301) (xy 225.277473 90.104341) (xy 225.503061 89.986098) (xy 225.520547 89.974415) (xy 225.585709 89.752985)
+ (xy 224.79 88.957276) (xy 223.994291 89.752985) (xy 223.451247 89.752985) (xy 223.464177 89.662) (xy 223.464177 88.889485)
+ (xy 223.490786 88.889485) (xy 223.513699 89.143151) (xy 223.585659 89.387473) (xy 223.703902 89.613061) (xy 223.715585 89.630547)
+ (xy 223.937015 89.695709) (xy 224.732724 88.9) (xy 224.847276 88.9) (xy 225.642985 89.695709) (xy 225.864415 89.630547)
+ (xy 225.986293 89.406902) (xy 226.062199 89.163777) (xy 226.089214 88.910515) (xy 226.066301 88.656849) (xy 225.994341 88.412527)
+ (xy 225.876098 88.186939) (xy 225.864415 88.169453) (xy 225.642985 88.104291) (xy 224.847276 88.9) (xy 224.732724 88.9)
+ (xy 223.937015 88.104291) (xy 223.715585 88.169453) (xy 223.593707 88.393098) (xy 223.517801 88.636223) (xy 223.490786 88.889485)
+ (xy 223.464177 88.889485) (xy 223.464177 88.138) (xy 223.458463 88.066339) (xy 223.452479 88.047015) (xy 223.994291 88.047015)
+ (xy 224.79 88.842724) (xy 225.585709 88.047015) (xy 225.520547 87.825585) (xy 225.296902 87.703707) (xy 225.053777 87.627801)
+ (xy 224.800515 87.600786) (xy 224.546849 87.623699) (xy 224.302527 87.695659) (xy 224.076939 87.813902) (xy 224.059453 87.825585)
+ (xy 223.994291 88.047015) (xy 223.452479 88.047015) (xy 223.420822 87.944795) (xy 223.350811 87.838549) (xy 223.253972 87.756014)
+ (xy 223.137974 87.703725) (xy 223.012 87.685823) (xy 221.488 87.685823) (xy 221.416339 87.691537) (xy 221.294795 87.729178)
+ (xy 221.188549 87.799189) (xy 221.106014 87.896028) (xy 221.053725 88.012026) (xy 221.035823 88.138) (xy 209.858002 88.138)
+ (xy 221.694094 76.301908) (xy 222.306407 76.301908) (xy 222.349314 76.535689) (xy 222.436812 76.756683) (xy 222.565568 76.956474)
+ (xy 222.730678 77.12745) (xy 222.925853 77.2631) (xy 223.143659 77.358257) (xy 223.3758 77.409297) (xy 223.613433 77.414275)
+ (xy 223.847508 77.373001) (xy 224.069108 77.287048) (xy 224.269792 77.15969) (xy 224.441917 76.995777) (xy 224.578927 76.801554)
+ (xy 224.675602 76.584418) (xy 224.728261 76.352639) (xy 224.732052 76.081157) (xy 224.685885 75.847999) (xy 224.59531 75.628247)
+ (xy 224.463777 75.430274) (xy 224.296296 75.26162) (xy 224.099246 75.128708) (xy 223.880132 75.036601) (xy 223.647301 74.988808)
+ (xy 223.409622 74.987148) (xy 223.176147 75.031686) (xy 222.955768 75.120725) (xy 222.756882 75.250872) (xy 222.587062 75.417172)
+ (xy 222.452778 75.61329) (xy 222.359143 75.831755) (xy 222.309726 76.064246) (xy 222.306407 76.301908) (xy 221.694094 76.301908)
+ (xy 223.171601 74.824401) (xy 223.3758 74.869297) (xy 223.613433 74.874275) (xy 223.847508 74.833001) (xy 224.069108 74.747048)
+ (xy 224.269792 74.61969) (xy 224.441917 74.455777) (xy 224.578927 74.261554) (xy 224.675602 74.044418) (xy 224.728261 73.812639)
+ (xy 224.732052 73.541157) (xy 224.685885 73.307999) (xy 224.59531 73.088247) (xy 224.463777 72.890274) (xy 224.296296 72.72162)
+ (xy 224.099246 72.588708) (xy 223.880132 72.496601) (xy 223.647301 72.448808) (xy 223.409622 72.447148) (xy 223.176147 72.491686)
+ (xy 222.955768 72.580725) (xy 222.756882 72.710872) (xy 222.587062 72.877172) (xy 222.452778 73.07329) (xy 222.359143 73.291755)
+ (xy 222.309726 73.524246) (xy 222.306407 73.761908) (xy 222.349314 73.995689) (xy 222.354702 74.009296) (xy 205.458999 90.904999)
+ (xy 205.425144 90.946215) (xy 205.39091 90.987014) (xy 205.38945 90.98967) (xy 205.387522 90.992017) (xy 205.362306 91.039044)
+ (xy 205.336659 91.085696) (xy 205.335743 91.088584) (xy 205.334307 91.091262) (xy 205.318701 91.142307) (xy 205.302609 91.193035)
+ (xy 205.302271 91.196045) (xy 205.301383 91.198951) (xy 205.295997 91.251982) (xy 205.290056 91.304944) (xy 205.290015 91.31088)
+ (xy 205.290004 91.310986) (xy 205.290013 91.311085) (xy 205.29 91.313) (xy 205.29 115.076998) (xy 204.29506 116.071938)
+ (xy 204.238833 116.060396) (xy 204.063417 116.059171) (xy 203.891104 116.092042) (xy 203.728457 116.157755) (xy 203.581671 116.253809)
+ (xy 203.456338 116.376544) (xy 203.357231 116.521286) (xy 203.288126 116.682521) (xy 203.251654 116.854109) (xy 203.249204 117.029512)
+ (xy 166.398354 117.029512) (xy 166.397822 117.027795) (xy 166.327811 116.921549) (xy 166.230972 116.839014) (xy 166.114974 116.786725)
+ (xy 165.989 116.768823) (xy 164.465 116.768823) (xy 164.393339 116.774537) (xy 164.271795 116.812178) (xy 164.165549 116.882189)
+ (xy 164.083014 116.979028) (xy 164.030725 117.095026) (xy 164.012823 117.221) (xy 163.635911 117.221) (xy 163.630777 117.213274)
+ (xy 163.463296 117.04462) (xy 163.266246 116.911708) (xy 163.047132 116.819601) (xy 162.814301 116.771808) (xy 162.576622 116.770148)
+ (xy 162.343147 116.814686) (xy 162.122768 116.903725) (xy 161.923882 117.033872) (xy 161.754062 117.200172) (xy 161.619778 117.39629)
+ (xy 161.526143 117.614755) (xy 161.476726 117.847246) (xy 161.473407 118.084908) (xy 161.355969 118.084908) (xy 161.359052 117.864157)
+ (xy 161.312885 117.630999) (xy 161.22231 117.411247) (xy 161.090777 117.213274) (xy 160.923296 117.04462) (xy 160.726246 116.911708)
+ (xy 160.507132 116.819601) (xy 160.274301 116.771808) (xy 160.036622 116.770148) (xy 159.803147 116.814686) (xy 159.582768 116.903725)
+ (xy 159.383882 117.033872) (xy 159.214062 117.200172) (xy 159.079778 117.39629) (xy 158.986143 117.614755) (xy 158.936726 117.847246)
+ (xy 158.933407 118.084908) (xy 158.815969 118.084908) (xy 158.819052 117.864157) (xy 158.772885 117.630999) (xy 158.68231 117.411247)
+ (xy 158.550777 117.213274) (xy 158.383296 117.04462) (xy 158.186246 116.911708) (xy 157.967132 116.819601) (xy 157.734301 116.771808)
+ (xy 157.496622 116.770148) (xy 157.263147 116.814686) (xy 157.042768 116.903725) (xy 156.843882 117.033872) (xy 156.674062 117.200172)
+ (xy 156.539778 117.39629) (xy 156.446143 117.614755) (xy 156.396726 117.847246) (xy 156.393407 118.084908) (xy 129.736 118.084908)
+ (xy 129.736 116.280212) (xy 138.550324 116.280212) (xy 138.581991 116.452751) (xy 138.646568 116.615852) (xy 138.741594 116.763305)
+ (xy 138.863452 116.889492) (xy 139.007498 116.989607) (xy 139.168247 117.059836) (xy 139.339575 117.097505) (xy 139.514957 117.101179)
+ (xy 139.687713 117.070717) (xy 139.851261 117.007281) (xy 139.999374 116.913286) (xy 140.070556 116.8455) (xy 141.995969 116.8455)
+ (xy 142.038452 116.889492) (xy 142.182498 116.989607) (xy 142.343247 117.059836) (xy 142.514575 117.097505) (xy 142.689957 117.101179)
+ (xy 142.862713 117.070717) (xy 143.026261 117.007281) (xy 143.174374 116.913286) (xy 143.301408 116.792313) (xy 143.402526 116.648969)
+ (xy 143.473876 116.488714) (xy 143.51274 116.317653) (xy 143.515538 116.11729) (xy 143.481466 115.94521) (xy 143.414618 115.783026)
+ (xy 143.317542 115.636914) (xy 143.193935 115.512441) (xy 143.048504 115.414347) (xy 142.886791 115.346369) (xy 142.714953 115.311096)
+ (xy 142.539537 115.309871) (xy 142.367224 115.342742) (xy 142.204577 115.408455) (xy 142.057791 115.504509) (xy 141.99653 115.5645)
+ (xy 140.070632 115.5645) (xy 140.018935 115.512441) (xy 139.873504 115.414347) (xy 139.711791 115.346369) (xy 139.539953 115.311096)
+ (xy 139.364537 115.309871) (xy 139.192224 115.342742) (xy 139.029577 115.408455) (xy 138.882791 115.504509) (xy 138.757458 115.627244)
+ (xy 138.658351 115.771986) (xy 138.589246 115.933221) (xy 138.552774 116.104809) (xy 138.550324 116.280212) (xy 129.736 116.280212)
+ (xy 129.736 115.147891) (xy 167.252157 115.147891) (xy 167.28832 115.344926) (xy 167.362065 115.531185) (xy 167.470583 115.699573)
+ (xy 167.609742 115.843676) (xy 167.77424 115.958005) (xy 167.957812 116.038205) (xy 168.153465 116.081222) (xy 168.353748 116.085418)
+ (xy 168.551031 116.050631) (xy 168.7378 115.978188) (xy 168.906941 115.870848) (xy 169.052012 115.732699) (xy 169.167487 115.569003)
+ (xy 169.248967 115.385996) (xy 169.254361 115.36225) (xy 189.08 115.36225) (xy 189.08 115.939799) (xy 189.100406 116.042387)
+ (xy 189.140434 116.139023) (xy 189.198545 116.225993) (xy 189.272507 116.299955) (xy 189.359477 116.358066) (xy 189.456113 116.398094)
+ (xy 189.558701 116.4185) (xy 189.88225 116.4185) (xy 190.015 116.28575) (xy 190.015 115.2295) (xy 190.096 115.2295)
+ (xy 190.096 116.28575) (xy 190.22875 116.4185) (xy 190.552299 116.4185) (xy 190.654887 116.398094) (xy 190.751523 116.358066)
+ (xy 190.838493 116.299955) (xy 190.912455 116.225993) (xy 190.970566 116.139023) (xy 191.010594 116.042387) (xy 191.031 115.939799)
+ (xy 191.031 115.36225) (xy 190.89825 115.2295) (xy 190.096 115.2295) (xy 190.015 115.2295) (xy 189.21275 115.2295)
+ (xy 189.08 115.36225) (xy 169.254361 115.36225) (xy 169.293349 115.190647) (xy 169.296544 114.961837) (xy 169.257634 114.765325)
+ (xy 169.181295 114.580114) (xy 169.087009 114.438201) (xy 189.08 114.438201) (xy 189.08 115.01575) (xy 189.21275 115.1485)
+ (xy 190.015 115.1485) (xy 190.015 114.09225) (xy 190.096 114.09225) (xy 190.096 115.1485) (xy 190.89825 115.1485)
+ (xy 191.031 115.01575) (xy 191.031 114.4905) (xy 191.063823 114.4905) (xy 191.063823 115.8875) (xy 191.069537 115.959161)
+ (xy 191.107178 116.080705) (xy 191.177189 116.186951) (xy 191.274028 116.269486) (xy 191.390026 116.321775) (xy 191.516 116.339677)
+ (xy 192.405 116.339677) (xy 192.476661 116.333963) (xy 192.598205 116.296322) (xy 192.704451 116.226311) (xy 192.786986 116.129472)
+ (xy 192.839275 116.013474) (xy 192.857177 115.8875) (xy 192.857177 114.4905) (xy 192.854399 114.45566) (xy 192.92368 114.428788)
+ (xy 193.092821 114.321448) (xy 193.237892 114.183299) (xy 193.353367 114.019603) (xy 193.434847 113.836596) (xy 193.479229 113.641247)
+ (xy 193.482424 113.412437) (xy 193.443514 113.215925) (xy 193.367175 113.030714) (xy 193.256316 112.863858) (xy 193.115159 112.721712)
+ (xy 192.949081 112.609691) (xy 192.764407 112.532061) (xy 192.568173 112.49178) (xy 192.367851 112.490381) (xy 192.171073 112.527919)
+ (xy 191.985333 112.602963) (xy 191.817707 112.712654) (xy 191.674579 112.852815) (xy 191.561401 113.018107) (xy 191.482484 113.202235)
+ (xy 191.440834 113.398183) (xy 191.43936 113.503761) (xy 191.401926 113.549333) (xy 191.358662 113.600893) (xy 191.356816 113.604252)
+ (xy 191.354379 113.607218) (xy 191.322508 113.666657) (xy 191.290083 113.725639) (xy 191.288925 113.729291) (xy 191.28711 113.732675)
+ (xy 191.267401 113.79714) (xy 191.247039 113.861329) (xy 191.246611 113.865141) (xy 191.24549 113.868809) (xy 191.238685 113.935811)
+ (xy 191.231171 114.002796) (xy 191.231119 114.010299) (xy 191.231105 114.010434) (xy 191.231117 114.01056) (xy 191.2311 114.01298)
+ (xy 191.2311 114.142101) (xy 191.216549 114.151689) (xy 191.134014 114.248528) (xy 191.081725 114.364526) (xy 191.063823 114.4905)
+ (xy 191.031 114.4905) (xy 191.031 114.438201) (xy 191.010594 114.335613) (xy 190.970566 114.238977) (xy 190.912455 114.152007)
+ (xy 190.838493 114.078045) (xy 190.751523 114.019934) (xy 190.654887 113.979906) (xy 190.552299 113.9595) (xy 190.22875 113.9595)
+ (xy 190.096 114.09225) (xy 190.015 114.09225) (xy 189.88225 113.9595) (xy 189.558701 113.9595) (xy 189.456113 113.979906)
+ (xy 189.359477 114.019934) (xy 189.272507 114.078045) (xy 189.198545 114.152007) (xy 189.140434 114.238977) (xy 189.100406 114.335613)
+ (xy 189.08 114.438201) (xy 169.087009 114.438201) (xy 169.070436 114.413258) (xy 168.967354 114.309453) (xy 168.994377 114.301447)
+ (xy 169.208705 114.188666) (xy 169.222023 114.179767) (xy 169.279562 113.964838) (xy 175.398438 113.964838) (xy 175.455977 114.179767)
+ (xy 175.668825 114.295317) (xy 175.900126 114.367122) (xy 176.140991 114.392423) (xy 176.382164 114.370247) (xy 176.614377 114.301447)
+ (xy 176.828705 114.188666) (xy 176.842023 114.179767) (xy 176.899562 113.964838) (xy 176.149 113.214276) (xy 175.398438 113.964838)
+ (xy 169.279562 113.964838) (xy 168.529 113.214276) (xy 167.778438 113.964838) (xy 167.825792 114.141721) (xy 167.799453 114.152363)
+ (xy 167.631827 114.262054) (xy 167.488699 114.402215) (xy 167.375521 114.567507) (xy 167.296604 114.751635) (xy 167.254954 114.947583)
+ (xy 167.252157 115.147891) (xy 129.736 115.147891) (xy 129.736 112.699787) (xy 129.839408 112.601313) (xy 129.940526 112.457969)
+ (xy 130.011876 112.297714) (xy 130.05074 112.126653) (xy 130.053538 111.92629) (xy 130.019466 111.75421) (xy 129.952618 111.592026)
+ (xy 129.855542 111.445914) (xy 129.731935 111.321441) (xy 129.586504 111.223347) (xy 129.51669 111.194) (xy 132.221998 111.194)
+ (xy 133.195999 112.168001) (xy 133.237215 112.201856) (xy 133.278014 112.23609) (xy 133.28067 112.23755) (xy 133.283017 112.239478)
+ (xy 133.330009 112.264675) (xy 133.376696 112.290341) (xy 133.379589 112.291259) (xy 133.382262 112.292692) (xy 133.433261 112.308285)
+ (xy 133.484035 112.324391) (xy 133.487046 112.324729) (xy 133.489951 112.325617) (xy 133.542982 112.331003) (xy 133.595944 112.336944)
+ (xy 133.60188 112.336985) (xy 133.601986 112.336996) (xy 133.602085 112.336987) (xy 133.604 112.337) (xy 138.253184 112.337)
+ (xy 138.156827 112.400054) (xy 138.013699 112.540215) (xy 137.900521 112.705507) (xy 137.821604 112.889635) (xy 137.779954 113.085583)
+ (xy 137.777157 113.285891) (xy 137.81332 113.482926) (xy 137.887065 113.669185) (xy 137.995583 113.837573) (xy 138.134742 113.981676)
+ (xy 138.29924 114.096005) (xy 138.482812 114.176205) (xy 138.678465 114.219222) (xy 138.878748 114.223418) (xy 139.076031 114.188631)
+ (xy 139.2628 114.116188) (xy 139.431941 114.008848) (xy 139.577012 113.870699) (xy 139.692487 113.707003) (xy 139.773967 113.523996)
+ (xy 139.818349 113.328647) (xy 139.820857 113.148991) (xy 167.293577 113.148991) (xy 167.315753 113.390164) (xy 167.384553 113.622377)
+ (xy 167.497334 113.836705) (xy 167.506233 113.850023) (xy 167.721162 113.907562) (xy 168.471724 113.157) (xy 168.586276 113.157)
+ (xy 169.336838 113.907562) (xy 169.551767 113.850023) (xy 169.667317 113.637175) (xy 169.739122 113.405874) (xy 169.764423 113.165009)
+ (xy 169.762951 113.148991) (xy 174.913577 113.148991) (xy 174.935753 113.390164) (xy 175.004553 113.622377) (xy 175.117334 113.836705)
+ (xy 175.126233 113.850023) (xy 175.341162 113.907562) (xy 176.091724 113.157) (xy 176.206276 113.157) (xy 176.956838 113.907562)
+ (xy 177.171767 113.850023) (xy 177.287317 113.637175) (xy 177.359122 113.405874) (xy 177.384423 113.165009) (xy 177.362247 112.923836)
+ (xy 177.293447 112.691623) (xy 177.180666 112.477295) (xy 177.171767 112.463977) (xy 176.956838 112.406438) (xy 176.206276 113.157)
+ (xy 176.091724 113.157) (xy 175.341162 112.406438) (xy 175.126233 112.463977) (xy 175.010683 112.676825) (xy 174.938878 112.908126)
+ (xy 174.913577 113.148991) (xy 169.762951 113.148991) (xy 169.742247 112.923836) (xy 169.673447 112.691623) (xy 169.560666 112.477295)
+ (xy 169.551767 112.463977) (xy 169.336838 112.406438) (xy 168.586276 113.157) (xy 168.471724 113.157) (xy 167.721162 112.406438)
+ (xy 167.506233 112.463977) (xy 167.390683 112.676825) (xy 167.318878 112.908126) (xy 167.293577 113.148991) (xy 139.820857 113.148991)
+ (xy 139.821544 113.099837) (xy 139.782634 112.903325) (xy 139.706295 112.718114) (xy 139.595436 112.551258) (xy 139.454279 112.409112)
+ (xy 139.3654 112.349162) (xy 167.778438 112.349162) (xy 168.529 113.099724) (xy 169.279562 112.349162) (xy 175.398438 112.349162)
+ (xy 176.149 113.099724) (xy 176.899562 112.349162) (xy 176.842023 112.134233) (xy 176.629175 112.018683) (xy 176.397874 111.946878)
+ (xy 176.157009 111.921577) (xy 175.915836 111.943753) (xy 175.683623 112.012553) (xy 175.469295 112.125334) (xy 175.455977 112.134233)
+ (xy 175.398438 112.349162) (xy 169.279562 112.349162) (xy 169.222023 112.134233) (xy 169.009175 112.018683) (xy 168.777874 111.946878)
+ (xy 168.537009 111.921577) (xy 168.295836 111.943753) (xy 168.063623 112.012553) (xy 167.849295 112.125334) (xy 167.835977 112.134233)
+ (xy 167.778438 112.349162) (xy 139.3654 112.349162) (xy 139.347369 112.337) (xy 141.732 112.337) (xy 141.785043 112.331799)
+ (xy 141.83814 112.327153) (xy 141.841051 112.326307) (xy 141.844073 112.326011) (xy 141.895123 112.310598) (xy 141.94628 112.295736)
+ (xy 141.948973 112.29434) (xy 141.951878 112.293463) (xy 141.998949 112.268435) (xy 142.046257 112.243913) (xy 142.048627 112.242021)
+ (xy 142.051307 112.240596) (xy 142.092605 112.206914) (xy 142.134265 112.173657) (xy 142.138492 112.169489) (xy 142.138574 112.169422)
+ (xy 142.138636 112.169347) (xy 142.140001 112.168001) (xy 143.876001 110.432) (xy 145.998648 110.432) (xy 146.102452 110.539492)
+ (xy 146.246498 110.639607) (xy 146.407247 110.709836) (xy 146.578575 110.747505) (xy 146.753957 110.751179) (xy 146.926713 110.720717)
+ (xy 147.090261 110.657281) (xy 147.238374 110.563286) (xy 147.365408 110.442313) (xy 147.3683 110.438212) (xy 177.158324 110.438212)
+ (xy 177.189991 110.610751) (xy 177.254568 110.773852) (xy 177.349594 110.921305) (xy 177.471452 111.047492) (xy 177.615498 111.147607)
+ (xy 177.776247 111.217836) (xy 177.947575 111.255505) (xy 178.122957 111.259179) (xy 178.295713 111.228717) (xy 178.459261 111.165281)
+ (xy 178.607374 111.071286) (xy 178.734408 110.950313) (xy 178.835526 110.806969) (xy 178.906876 110.646714) (xy 178.94574 110.475653)
+ (xy 178.948538 110.27529) (xy 178.914466 110.10321) (xy 178.847618 109.941026) (xy 178.750542 109.794914) (xy 178.626935 109.670441)
+ (xy 178.481504 109.572347) (xy 178.319791 109.504369) (xy 178.147953 109.469096) (xy 177.972537 109.467871) (xy 177.800224 109.500742)
+ (xy 177.637577 109.566455) (xy 177.490791 109.662509) (xy 177.365458 109.785244) (xy 177.266351 109.929986) (xy 177.197246 110.091221)
+ (xy 177.160774 110.262809) (xy 177.158324 110.438212) (xy 147.3683 110.438212) (xy 147.466526 110.298969) (xy 147.537876 110.138714)
+ (xy 147.57674 109.967653) (xy 147.579538 109.76729) (xy 147.545466 109.59521) (xy 147.478618 109.433026) (xy 147.381542 109.286914)
+ (xy 147.257935 109.162441) (xy 147.112504 109.064347) (xy 146.950791 108.996369) (xy 146.778953 108.961096) (xy 146.603537 108.959871)
+ (xy 146.431224 108.992742) (xy 146.268577 109.058455) (xy 146.121791 109.154509) (xy 145.996458 109.277244) (xy 145.99594 109.278)
+ (xy 143.637 109.278) (xy 143.583953 109.283201) (xy 143.530861 109.287847) (xy 143.527951 109.288693) (xy 143.524927 109.288989)
+ (xy 143.473851 109.30441) (xy 143.422721 109.319264) (xy 143.420029 109.320659) (xy 143.417122 109.321537) (xy 143.370033 109.346575)
+ (xy 143.322743 109.371087) (xy 143.320373 109.372979) (xy 143.317693 109.374404) (xy 143.276401 109.408081) (xy 143.234736 109.441342)
+ (xy 143.230512 109.445508) (xy 143.230426 109.445578) (xy 143.23036 109.445658) (xy 143.229 109.446999) (xy 141.492998 111.183)
+ (xy 135.829258 111.183) (xy 135.859786 111.114433) (xy 135.893133 110.967659) (xy 135.895533 110.795743) (xy 135.866298 110.648095)
+ (xy 135.808942 110.508937) (xy 135.725648 110.38357) (xy 135.647625 110.305) (xy 136.779 110.305) (xy 136.832043 110.299799)
+ (xy 136.88514 110.295153) (xy 136.888051 110.294307) (xy 136.891073 110.294011) (xy 136.942123 110.278598) (xy 136.99328 110.263736)
+ (xy 136.995973 110.26234) (xy 136.998878 110.261463) (xy 137.045949 110.236435) (xy 137.093257 110.211913) (xy 137.095627 110.210021)
+ (xy 137.098307 110.208596) (xy 137.139605 110.174914) (xy 137.181265 110.141657) (xy 137.185492 110.137489) (xy 137.185574 110.137422)
+ (xy 137.185636 110.137347) (xy 137.187001 110.136001) (xy 139.112309 108.210693) (xy 139.124167 108.210941) (xy 139.272395 108.184804)
+ (xy 139.412723 108.130375) (xy 139.539807 108.049725) (xy 139.648805 107.945927) (xy 139.735567 107.822935) (xy 139.796786 107.685433)
+ (xy 139.830133 107.538659) (xy 139.830677 107.499678) (xy 140.562 108.231001) (xy 140.603169 108.264817) (xy 140.644014 108.29909)
+ (xy 140.646673 108.300552) (xy 140.649018 108.302478) (xy 140.696023 108.327683) (xy 140.742696 108.353341) (xy 140.745584 108.354257)
+ (xy 140.748262 108.355693) (xy 140.799295 108.371295) (xy 140.850035 108.387391) (xy 140.853047 108.387729) (xy 140.855952 108.388617)
+ (xy 140.909021 108.394008) (xy 140.961944 108.399944) (xy 140.96787 108.399985) (xy 140.967986 108.399997) (xy 140.968094 108.399987)
+ (xy 140.97 108.4) (xy 144.295921 108.4) (xy 144.327014 108.42609) (xy 144.32967 108.42755) (xy 144.332017 108.429478)
+ (xy 144.379009 108.454675) (xy 144.425696 108.480341) (xy 144.428589 108.481259) (xy 144.431262 108.482692) (xy 144.482261 108.498285)
+ (xy 144.533035 108.514391) (xy 144.536046 108.514729) (xy 144.538951 108.515617) (xy 144.591982 108.521003) (xy 144.644944 108.526944)
+ (xy 144.65088 108.526985) (xy 144.650986 108.526996) (xy 144.651085 108.526987) (xy 144.653 108.527) (xy 145.871648 108.527)
+ (xy 145.975452 108.634492) (xy 146.119498 108.734607) (xy 146.280247 108.804836) (xy 146.451575 108.842505) (xy 146.626957 108.846179)
+ (xy 146.799713 108.815717) (xy 146.963261 108.752281) (xy 147.111374 108.658286) (xy 147.238408 108.537313) (xy 147.339526 108.393969)
+ (xy 147.410876 108.233714) (xy 147.42454 108.173569) (xy 167.37899 108.173569) (xy 167.419649 108.395101) (xy 167.502563 108.604517)
+ (xy 167.624573 108.79384) (xy 167.781033 108.955859) (xy 167.965982 109.084402) (xy 168.172377 109.174573) (xy 168.392355 109.222939)
+ (xy 168.617538 109.227656) (xy 168.839349 109.188545) (xy 169.049338 109.107095) (xy 169.239508 108.986409) (xy 169.402615 108.831085)
+ (xy 169.532447 108.647037) (xy 169.624057 108.441277) (xy 169.673957 108.221642) (xy 169.674628 108.173569) (xy 174.99899 108.173569)
+ (xy 175.039649 108.395101) (xy 175.122563 108.604517) (xy 175.244573 108.79384) (xy 175.401033 108.955859) (xy 175.585982 109.084402)
+ (xy 175.792377 109.174573) (xy 176.012355 109.222939) (xy 176.237538 109.227656) (xy 176.459349 109.188545) (xy 176.669338 109.107095)
+ (xy 176.859508 108.986409) (xy 177.022615 108.831085) (xy 177.152447 108.647037) (xy 177.244057 108.441277) (xy 177.293957 108.221642)
+ (xy 177.297549 107.964384) (xy 177.253801 107.743441) (xy 177.167972 107.535203) (xy 177.04333 107.347602) (xy 176.884624 107.187784)
+ (xy 176.697897 107.061835) (xy 176.490264 106.974554) (xy 176.269632 106.929265) (xy 176.044405 106.927693) (xy 175.823162 106.969897)
+ (xy 175.61433 107.054271) (xy 175.425863 107.1776) (xy 175.264941 107.335186) (xy 175.137692 107.521029) (xy 175.048964 107.728048)
+ (xy 175.002135 107.948358) (xy 174.99899 108.173569) (xy 169.674628 108.173569) (xy 169.677549 107.964384) (xy 169.633801 107.743441)
+ (xy 169.547972 107.535203) (xy 169.42333 107.347602) (xy 169.264624 107.187784) (xy 169.077897 107.061835) (xy 168.870264 106.974554)
+ (xy 168.649632 106.929265) (xy 168.424405 106.927693) (xy 168.203162 106.969897) (xy 167.99433 107.054271) (xy 167.805863 107.1776)
+ (xy 167.644941 107.335186) (xy 167.517692 107.521029) (xy 167.428964 107.728048) (xy 167.382135 107.948358) (xy 167.37899 108.173569)
+ (xy 147.42454 108.173569) (xy 147.44974 108.062653) (xy 147.452538 107.86229) (xy 147.418466 107.69021) (xy 147.351618 107.528026)
+ (xy 147.254542 107.381914) (xy 147.188209 107.315117) (xy 147.238408 107.267313) (xy 147.339526 107.123969) (xy 147.410876 106.963714)
+ (xy 147.426966 106.892891) (xy 161.283157 106.892891) (xy 161.31932 107.089926) (xy 161.393065 107.276185) (xy 161.501583 107.444573)
+ (xy 161.640742 107.588676) (xy 161.80524 107.703005) (xy 161.988812 107.783205) (xy 162.184465 107.826222) (xy 162.384748 107.830418)
+ (xy 162.582031 107.795631) (xy 162.7688 107.723188) (xy 162.937941 107.615848) (xy 163.083012 107.477699) (xy 163.198487 107.314003)
+ (xy 163.279967 107.130996) (xy 163.324349 106.935647) (xy 163.327544 106.706837) (xy 163.288634 106.510325) (xy 163.212295 106.325114)
+ (xy 163.101436 106.158258) (xy 162.960279 106.016112) (xy 162.794201 105.904091) (xy 162.704091 105.866212) (xy 165.855324 105.866212)
+ (xy 165.886991 106.038751) (xy 165.951568 106.201852) (xy 166.046594 106.349305) (xy 166.168452 106.475492) (xy 166.312498 106.575607)
+ (xy 166.473247 106.645836) (xy 166.644575 106.683505) (xy 166.819957 106.687179) (xy 166.992713 106.656717) (xy 167.156261 106.593281)
+ (xy 167.304374 106.499286) (xy 167.431408 106.378313) (xy 167.532526 106.234969) (xy 167.583619 106.120212) (xy 173.729324 106.120212)
+ (xy 173.760991 106.292751) (xy 173.825568 106.455852) (xy 173.920594 106.603305) (xy 174.042452 106.729492) (xy 174.186498 106.829607)
+ (xy 174.347247 106.899836) (xy 174.518575 106.937505) (xy 174.693957 106.941179) (xy 174.866713 106.910717) (xy 175.030261 106.847281)
+ (xy 175.178374 106.753286) (xy 175.305408 106.632313) (xy 175.406526 106.488969) (xy 175.477876 106.328714) (xy 175.51674 106.157653)
+ (xy 175.519538 105.95729) (xy 175.485466 105.78521) (xy 175.466507 105.739212) (xy 177.158324 105.739212) (xy 177.189991 105.911751)
+ (xy 177.254568 106.074852) (xy 177.349594 106.222305) (xy 177.471452 106.348492) (xy 177.615498 106.448607) (xy 177.776247 106.518836)
+ (xy 177.947575 106.556505) (xy 178.122957 106.560179) (xy 178.132495 106.558497) (xy 180.144 108.570001) (xy 180.144 110.770754)
+ (xy 180.032458 110.879984) (xy 179.933351 111.024726) (xy 179.864246 111.185961) (xy 179.827774 111.357549) (xy 179.825324 111.532952)
+ (xy 179.856991 111.705491) (xy 179.921568 111.868592) (xy 180.016594 112.016045) (xy 180.138452 112.142232) (xy 180.282498 112.242347)
+ (xy 180.443247 112.312576) (xy 180.614575 112.350245) (xy 180.789957 112.353919) (xy 180.962713 112.323457) (xy 181.126261 112.260021)
+ (xy 181.274374 112.166026) (xy 181.401408 112.045053) (xy 181.502526 111.901709) (xy 181.573876 111.741454) (xy 181.61274 111.570393)
+ (xy 181.615538 111.37003) (xy 181.581466 111.19795) (xy 181.514618 111.035766) (xy 181.487486 110.994929) (xy 181.518685 111.001789)
+ (xy 181.669167 111.004941) (xy 181.817395 110.978804) (xy 181.957723 110.924375) (xy 182.084807 110.843725) (xy 182.193805 110.739927)
+ (xy 182.280567 110.616935) (xy 182.341786 110.479433) (xy 182.375133 110.332659) (xy 182.377533 110.160743) (xy 182.348298 110.013095)
+ (xy 182.311576 109.924) (xy 187.04814 109.924) (xy 187.101183 109.918799) (xy 187.15428 109.914153) (xy 187.157191 109.913307)
+ (xy 187.160213 109.913011) (xy 187.211263 109.897598) (xy 187.26242 109.882736) (xy 187.265113 109.88134) (xy 187.268018 109.880463)
+ (xy 187.315089 109.855435) (xy 187.362397 109.830913) (xy 187.364767 109.829021) (xy 187.367447 109.827596) (xy 187.408745 109.793914)
+ (xy 187.450405 109.760657) (xy 187.454632 109.756489) (xy 187.454714 109.756422) (xy 187.454776 109.756347) (xy 187.456141 109.755001)
+ (xy 188.296902 108.914239) (xy 188.442977 108.917299) (xy 188.615733 108.886837) (xy 188.779281 108.823401) (xy 188.927394 108.729406)
+ (xy 189.054428 108.608433) (xy 189.155546 108.465089) (xy 189.203634 108.357082) (xy 189.272507 108.425955) (xy 189.359477 108.484066)
+ (xy 189.456113 108.524094) (xy 189.558701 108.5445) (xy 189.88225 108.5445) (xy 190.015 108.41175) (xy 190.015 107.3555)
+ (xy 190.096 107.3555) (xy 190.096 108.41175) (xy 190.22875 108.5445) (xy 190.552299 108.5445) (xy 190.654887 108.524094)
+ (xy 190.751523 108.484066) (xy 190.838493 108.425955) (xy 190.912455 108.351993) (xy 190.970566 108.265023) (xy 191.010594 108.168387)
+ (xy 191.031 108.065799) (xy 191.031 107.48825) (xy 190.89825 107.3555) (xy 190.096 107.3555) (xy 190.015 107.3555)
+ (xy 189.21275 107.3555) (xy 189.088387 107.479863) (xy 189.070562 107.453034) (xy 188.946955 107.328561) (xy 188.801524 107.230467)
+ (xy 188.639811 107.162489) (xy 188.467973 107.127216) (xy 188.292557 107.125991) (xy 188.120244 107.158862) (xy 187.957597 107.224575)
+ (xy 187.810811 107.320629) (xy 187.685478 107.443364) (xy 187.586371 107.588106) (xy 187.517266 107.749341) (xy 187.480794 107.920929)
+ (xy 187.478344 108.096332) (xy 187.479036 108.100103) (xy 186.809138 108.77) (xy 182.311258 108.77) (xy 182.341786 108.701433)
+ (xy 182.375133 108.554659) (xy 182.375781 108.508221) (xy 184.053722 106.83028) (xy 189.08 106.83028) (xy 189.08 107.14175)
+ (xy 189.21275 107.2745) (xy 190.015 107.2745) (xy 190.015 107.2545) (xy 190.096 107.2545) (xy 190.096 107.2745)
+ (xy 190.89825 107.2745) (xy 191.031 107.14175) (xy 191.031 106.83028) (xy 191.063823 106.83028) (xy 191.063823 108.0135)
+ (xy 191.069537 108.085161) (xy 191.107178 108.206705) (xy 191.177189 108.312951) (xy 191.274028 108.395486) (xy 191.390026 108.447775)
+ (xy 191.516 108.465677) (xy 192.231592 108.465677) (xy 192.230684 108.530672) (xy 192.262351 108.703211) (xy 192.326928 108.866312)
+ (xy 192.421954 109.013765) (xy 192.543812 109.139952) (xy 192.687858 109.240067) (xy 192.818814 109.29728) (xy 192.775521 109.360507)
+ (xy 192.696604 109.544635) (xy 192.654954 109.740583) (xy 192.652157 109.940891) (xy 192.68832 110.137926) (xy 192.762065 110.324185)
+ (xy 192.870583 110.492573) (xy 193.009742 110.636676) (xy 193.17424 110.751005) (xy 193.357812 110.831205) (xy 193.553465 110.874222)
+ (xy 193.753748 110.878418) (xy 193.951031 110.843631) (xy 194.1378 110.771188) (xy 194.306941 110.663848) (xy 194.452012 110.525699)
+ (xy 194.567487 110.362003) (xy 194.648967 110.178996) (xy 194.693349 109.983647) (xy 194.696544 109.754837) (xy 194.657634 109.558325)
+ (xy 194.581295 109.373114) (xy 194.470436 109.206258) (xy 194.329279 109.064112) (xy 194.163201 108.952091) (xy 193.978527 108.874461)
+ (xy 193.923987 108.863266) (xy 193.979236 108.739174) (xy 194.0181 108.568113) (xy 194.020898 108.36775) (xy 193.986826 108.19567)
+ (xy 193.919978 108.033486) (xy 193.832325 107.901557) (xy 193.944012 107.795199) (xy 194.059487 107.631503) (xy 194.140967 107.448496)
+ (xy 194.185349 107.253147) (xy 194.188544 107.024337) (xy 194.149634 106.827825) (xy 194.073295 106.642614) (xy 193.962436 106.475758)
+ (xy 193.821279 106.333612) (xy 193.662524 106.22653) (xy 193.699261 106.212281) (xy 193.847374 106.118286) (xy 193.974408 105.997313)
+ (xy 194.075526 105.853969) (xy 194.146876 105.693714) (xy 194.18574 105.522653) (xy 194.188538 105.32229) (xy 194.154466 105.15021)
+ (xy 194.087618 104.988026) (xy 193.990542 104.841914) (xy 193.866935 104.717441) (xy 193.721504 104.619347) (xy 193.559791 104.551369)
+ (xy 193.387953 104.516096) (xy 193.212537 104.514871) (xy 193.040224 104.547742) (xy 192.877577 104.613455) (xy 192.730791 104.709509)
+ (xy 192.605458 104.832244) (xy 192.506351 104.976986) (xy 192.437246 105.138221) (xy 192.400774 105.309809) (xy 192.39862 105.464037)
+ (xy 192.17487 105.67628) (xy 189.619257 105.67628) (xy 189.651076 105.604814) (xy 189.68994 105.433753) (xy 189.692738 105.23339)
+ (xy 189.658666 105.06131) (xy 189.591818 104.899126) (xy 189.494742 104.753014) (xy 189.371135 104.628541) (xy 189.225704 104.530447)
+ (xy 189.063991 104.462469) (xy 188.892153 104.427196) (xy 188.716737 104.425971) (xy 188.544424 104.458842) (xy 188.381777 104.524555)
+ (xy 188.234991 104.620609) (xy 188.109658 104.743344) (xy 188.010551 104.888086) (xy 187.941446 105.049321) (xy 187.904974 105.220909)
+ (xy 187.902524 105.396312) (xy 187.934191 105.568851) (xy 187.976726 105.67628) (xy 184.212404 105.67628) (xy 184.224171 105.639185)
+ (xy 184.224509 105.636173) (xy 184.225397 105.633268) (xy 184.230788 105.580199) (xy 184.236724 105.527276) (xy 184.236765 105.52135)
+ (xy 184.236777 105.521234) (xy 184.236767 105.521126) (xy 184.23678 105.51922) (xy 184.23678 101.292191) (xy 189.025037 101.292191)
+ (xy 189.0612 101.489226) (xy 189.134945 101.675485) (xy 189.243463 101.843873) (xy 189.382622 101.987976) (xy 189.54712 102.102305)
+ (xy 189.730692 102.182505) (xy 189.926345 102.225522) (xy 190.126628 102.229718) (xy 190.323911 102.194931) (xy 190.51068 102.122488)
+ (xy 190.679821 102.015148) (xy 190.824892 101.876999) (xy 190.940367 101.713303) (xy 191.021847 101.530296) (xy 191.063717 101.346)
+ (xy 197.858323 101.346) (xy 197.858323 102.235) (xy 197.864037 102.306661) (xy 197.901678 102.428205) (xy 197.971689 102.534451)
+ (xy 198.056236 102.60651) (xy 198.030604 102.666315) (xy 197.988954 102.862263) (xy 197.986157 103.062571) (xy 198.02232 103.259606)
+ (xy 198.096065 103.445865) (xy 198.204583 103.614253) (xy 198.343742 103.758356) (xy 198.50824 103.872685) (xy 198.691812 103.952885)
+ (xy 198.887465 103.995902) (xy 199.087748 104.000098) (xy 199.285031 103.965311) (xy 199.4718 103.892868) (xy 199.640941 103.785528)
+ (xy 199.786012 103.647379) (xy 199.901487 103.483683) (xy 199.982967 103.300676) (xy 200.027349 103.105327) (xy 200.027662 103.082891)
+ (xy 201.458337 103.082891) (xy 201.4945 103.279926) (xy 201.568245 103.466185) (xy 201.676763 103.634573) (xy 201.815922 103.778676)
+ (xy 201.98042 103.893005) (xy 202.163992 103.973205) (xy 202.359645 104.016222) (xy 202.559928 104.020418) (xy 202.757211 103.985631)
+ (xy 202.94398 103.913188) (xy 203.113121 103.805848) (xy 203.258192 103.667699) (xy 203.373667 103.504003) (xy 203.455147 103.320996)
+ (xy 203.46898 103.260111) (xy 203.522377 103.254876) (xy 203.590676 103.24866) (xy 203.593126 103.247939) (xy 203.595675 103.247689)
+ (xy 203.661445 103.227832) (xy 203.727238 103.208468) (xy 203.729504 103.207283) (xy 203.731953 103.206544) (xy 203.792574 103.174311)
+ (xy 203.853393 103.142516) (xy 203.855386 103.140914) (xy 203.857644 103.139713) (xy 203.91087 103.096303) (xy 203.964334 103.053316)
+ (xy 203.965976 103.051359) (xy 203.96796 103.049741) (xy 204.011718 102.996847) (xy 204.055838 102.944267) (xy 204.057071 102.942024)
+ (xy 204.0587 102.940055) (xy 204.091352 102.879667) (xy 204.124417 102.819521) (xy 204.12519 102.817086) (xy 204.126407 102.814834)
+ (xy 204.146705 102.749263) (xy 204.16676 102.68604) (xy 204.224161 102.681463) (xy 204.345705 102.643822) (xy 204.451951 102.573811)
+ (xy 204.534486 102.476972) (xy 204.586775 102.360974) (xy 204.604677 102.235) (xy 204.604677 101.346) (xy 204.598963 101.274339)
+ (xy 204.561322 101.152795) (xy 204.491311 101.046549) (xy 204.394472 100.964014) (xy 204.278474 100.911725) (xy 204.1525 100.893823)
+ (xy 202.7555 100.893823) (xy 202.683839 100.899537) (xy 202.562295 100.937178) (xy 202.456049 101.007189) (xy 202.373514 101.104028)
+ (xy 202.321225 101.220026) (xy 202.303323 101.346) (xy 202.303323 101.990963) (xy 202.191373 102.012319) (xy 202.005633 102.087363)
+ (xy 201.838007 102.197054) (xy 201.694879 102.337215) (xy 201.581701 102.502507) (xy 201.502784 102.686635) (xy 201.461134 102.882583)
+ (xy 201.458337 103.082891) (xy 200.027662 103.082891) (xy 200.030544 102.876517) (xy 199.991634 102.680005) (xy 199.960484 102.60443)
+ (xy 200.006951 102.573811) (xy 200.089486 102.476972) (xy 200.141775 102.360974) (xy 200.159677 102.235) (xy 200.159677 101.346)
+ (xy 200.153963 101.274339) (xy 200.116322 101.152795) (xy 200.046311 101.046549) (xy 199.949472 100.964014) (xy 199.833474 100.911725)
+ (xy 199.7075 100.893823) (xy 198.3105 100.893823) (xy 198.238839 100.899537) (xy 198.117295 100.937178) (xy 198.011049 101.007189)
+ (xy 197.928514 101.104028) (xy 197.876225 101.220026) (xy 197.858323 101.346) (xy 191.063717 101.346) (xy 191.066229 101.334947)
+ (xy 191.068022 101.206567) (xy 191.101838 101.166267) (xy 191.103686 101.162905) (xy 191.10612 101.159942) (xy 191.13797 101.100542)
+ (xy 191.170417 101.041521) (xy 191.171575 101.037869) (xy 191.17339 101.034485) (xy 191.193099 100.97002) (xy 191.21276 100.90804)
+ (xy 191.270161 100.903463) (xy 191.391705 100.865822) (xy 191.497951 100.795811) (xy 191.580486 100.698972) (xy 191.632775 100.582974)
+ (xy 191.650677 100.457) (xy 191.650677 100.05875) (xy 197.7795 100.05875) (xy 197.7795 100.382299) (xy 197.799906 100.484887)
+ (xy 197.839934 100.581523) (xy 197.898045 100.668493) (xy 197.972007 100.742455) (xy 198.058977 100.800566) (xy 198.155613 100.840594)
+ (xy 198.258201 100.861) (xy 198.83575 100.861) (xy 198.9685 100.72825) (xy 198.9685 99.926) (xy 199.0495 99.926)
+ (xy 199.0495 100.72825) (xy 199.18225 100.861) (xy 199.759799 100.861) (xy 199.862387 100.840594) (xy 199.959023 100.800566)
+ (xy 200.045993 100.742455) (xy 200.119955 100.668493) (xy 200.178066 100.581523) (xy 200.218094 100.484887) (xy 200.2385 100.382299)
+ (xy 200.2385 100.05875) (xy 202.2245 100.05875) (xy 202.2245 100.382299) (xy 202.244906 100.484887) (xy 202.284934 100.581523)
+ (xy 202.343045 100.668493) (xy 202.417007 100.742455) (xy 202.503977 100.800566) (xy 202.600613 100.840594) (xy 202.703201 100.861)
+ (xy 203.28075 100.861) (xy 203.4135 100.72825) (xy 203.4135 99.926) (xy 203.4945 99.926) (xy 203.4945 100.72825)
+ (xy 203.62725 100.861) (xy 204.204799 100.861) (xy 204.307387 100.840594) (xy 204.404023 100.800566) (xy 204.490993 100.742455)
+ (xy 204.564955 100.668493) (xy 204.623066 100.581523) (xy 204.663094 100.484887) (xy 204.6835 100.382299) (xy 204.6835 100.05875)
+ (xy 204.55075 99.926) (xy 203.4945 99.926) (xy 203.4135 99.926) (xy 202.35725 99.926) (xy 202.2245 100.05875)
+ (xy 200.2385 100.05875) (xy 200.10575 99.926) (xy 199.0495 99.926) (xy 198.9685 99.926) (xy 197.91225 99.926)
+ (xy 197.7795 100.05875) (xy 191.650677 100.05875) (xy 191.650677 99.568) (xy 191.644963 99.496339) (xy 191.607322 99.374795)
+ (xy 191.537311 99.268549) (xy 191.440472 99.186014) (xy 191.324474 99.133725) (xy 191.1985 99.115823) (xy 189.8015 99.115823)
+ (xy 189.729839 99.121537) (xy 189.608295 99.159178) (xy 189.502049 99.229189) (xy 189.419514 99.326028) (xy 189.367225 99.442026)
+ (xy 189.349323 99.568) (xy 189.349323 100.457) (xy 189.349589 100.46033) (xy 189.261579 100.546515) (xy 189.148401 100.711807)
+ (xy 189.069484 100.895935) (xy 189.027834 101.091883) (xy 189.025037 101.292191) (xy 184.23678 101.292191) (xy 184.23678 101.059222)
+ (xy 187.015252 98.28075) (xy 189.2705 98.28075) (xy 189.2705 98.604299) (xy 189.290906 98.706887) (xy 189.330934 98.803523)
+ (xy 189.389045 98.890493) (xy 189.463007 98.964455) (xy 189.549977 99.022566) (xy 189.646613 99.062594) (xy 189.749201 99.083)
+ (xy 190.32675 99.083) (xy 190.4595 98.95025) (xy 190.4595 98.148) (xy 190.5405 98.148) (xy 190.5405 98.95025)
+ (xy 190.67325 99.083) (xy 191.250799 99.083) (xy 191.353387 99.062594) (xy 191.450023 99.022566) (xy 191.536993 98.964455)
+ (xy 191.610955 98.890493) (xy 191.669066 98.803523) (xy 191.689491 98.754212) (xy 196.208324 98.754212) (xy 196.239991 98.926751)
+ (xy 196.304568 99.089852) (xy 196.399594 99.237305) (xy 196.521452 99.363492) (xy 196.665498 99.463607) (xy 196.826247 99.533836)
+ (xy 196.997575 99.571505) (xy 197.172957 99.575179) (xy 197.345713 99.544717) (xy 197.509261 99.481281) (xy 197.657374 99.387286)
+ (xy 197.784408 99.266313) (xy 197.863688 99.153927) (xy 197.839934 99.189477) (xy 197.799906 99.286113) (xy 197.7795 99.388701)
+ (xy 197.7795 99.71225) (xy 197.91225 99.845) (xy 198.9685 99.845) (xy 198.9685 99.04275) (xy 199.0495 99.04275)
+ (xy 199.0495 99.845) (xy 200.10575 99.845) (xy 200.2385 99.71225) (xy 200.2385 99.388701) (xy 202.2245 99.388701)
+ (xy 202.2245 99.71225) (xy 202.35725 99.845) (xy 203.4135 99.845) (xy 203.4135 99.04275) (xy 203.4945 99.04275)
+ (xy 203.4945 99.845) (xy 204.55075 99.845) (xy 204.6835 99.71225) (xy 204.6835 99.388701) (xy 204.663094 99.286113)
+ (xy 204.623066 99.189477) (xy 204.564955 99.102507) (xy 204.490993 99.028545) (xy 204.404023 98.970434) (xy 204.307387 98.930406)
+ (xy 204.204799 98.91) (xy 203.62725 98.91) (xy 203.4945 99.04275) (xy 203.4135 99.04275) (xy 203.28075 98.91)
+ (xy 202.703201 98.91) (xy 202.600613 98.930406) (xy 202.503977 98.970434) (xy 202.417007 99.028545) (xy 202.343045 99.102507)
+ (xy 202.284934 99.189477) (xy 202.244906 99.286113) (xy 202.2245 99.388701) (xy 200.2385 99.388701) (xy 200.218094 99.286113)
+ (xy 200.178066 99.189477) (xy 200.119955 99.102507) (xy 200.045993 99.028545) (xy 199.959023 98.970434) (xy 199.862387 98.930406)
+ (xy 199.759799 98.91) (xy 199.18225 98.91) (xy 199.0495 99.04275) (xy 198.9685 99.04275) (xy 198.83575 98.91)
+ (xy 198.258201 98.91) (xy 198.155613 98.930406) (xy 198.058977 98.970434) (xy 197.972007 99.028545) (xy 197.898045 99.102507)
+ (xy 197.887829 99.117797) (xy 197.956876 98.962714) (xy 197.99574 98.791653) (xy 197.998538 98.59129) (xy 197.964466 98.41921)
+ (xy 197.897618 98.257026) (xy 197.800542 98.110914) (xy 197.681 97.990534) (xy 197.681 96.886002) (xy 198.496329 96.070672)
+ (xy 198.494324 96.214212) (xy 198.525991 96.386751) (xy 198.590568 96.549852) (xy 198.685594 96.697305) (xy 198.807452 96.823492)
+ (xy 198.951498 96.923607) (xy 199.112247 96.993836) (xy 199.283575 97.031505) (xy 199.458957 97.035179) (xy 199.631713 97.004717)
+ (xy 199.795261 96.941281) (xy 199.943374 96.847286) (xy 200.070408 96.726313) (xy 200.171526 96.582969) (xy 200.242876 96.422714)
+ (xy 200.28174 96.251653) (xy 200.284408 96.060594) (xy 204.974521 91.37048) (xy 205.008337 91.329311) (xy 205.04261 91.288466)
+ (xy 205.044072 91.285807) (xy 205.045998 91.283462) (xy 205.071203 91.236457) (xy 205.096861 91.189784) (xy 205.097777 91.186896)
+ (xy 205.099213 91.184218) (xy 205.114815 91.133185) (xy 205.130911 91.082445) (xy 205.131249 91.079433) (xy 205.132137 91.076528)
+ (xy 205.137523 91.023503) (xy 205.143464 90.970536) (xy 205.143505 90.9646) (xy 205.143516 90.964494) (xy 205.143507 90.964395)
+ (xy 205.14352 90.96248) (xy 205.14352 85.897707) (xy 205.246928 85.799233) (xy 205.348046 85.655889) (xy 205.419396 85.495634)
+ (xy 205.45826 85.324573) (xy 205.461058 85.12421) (xy 205.426986 84.95213) (xy 205.360138 84.789946) (xy 205.263062 84.643834)
+ (xy 205.139455 84.519361) (xy 204.994024 84.421267) (xy 204.832311 84.353289) (xy 204.660473 84.318016) (xy 204.485057 84.316791)
+ (xy 204.312744 84.349662) (xy 204.150097 84.415375) (xy 204.003311 84.511429) (xy 203.877978 84.634164) (xy 203.778871 84.778906)
+ (xy 203.709766 84.940141) (xy 203.673294 85.111729) (xy 203.670844 85.287132) (xy 203.702511 85.459671) (xy 203.767088 85.622772)
+ (xy 203.862114 85.770225) (xy 203.983972 85.896412) (xy 203.98952 85.900268) (xy 203.98952 90.723479) (xy 203.396 91.316999)
+ (xy 203.396 81.821262) (xy 205.584142 79.633119) (xy 205.730217 79.636179) (xy 205.902973 79.605717) (xy 206.066521 79.542281)
+ (xy 206.214634 79.448286) (xy 206.341668 79.327313) (xy 206.442786 79.183969) (xy 206.514136 79.023714) (xy 206.553 78.852653)
+ (xy 206.555798 78.65229) (xy 206.521726 78.48021) (xy 206.454878 78.318026) (xy 206.357802 78.171914) (xy 206.234195 78.047441)
+ (xy 206.088764 77.949347) (xy 205.927051 77.881369) (xy 205.755213 77.846096) (xy 205.579797 77.844871) (xy 205.407484 77.877742)
+ (xy 205.244837 77.943455) (xy 205.098051 78.039509) (xy 204.972718 78.162244) (xy 204.873611 78.306986) (xy 204.804506 78.468221)
+ (xy 204.768034 78.639809) (xy 204.765584 78.815212) (xy 204.766276 78.818983) (xy 202.410999 81.174259) (xy 202.377144 81.215475)
+ (xy 202.34291 81.256274) (xy 202.34145 81.25893) (xy 202.339522 81.261277) (xy 202.314306 81.308304) (xy 202.288659 81.354956)
+ (xy 202.287743 81.357844) (xy 202.286307 81.360522) (xy 202.270701 81.411567) (xy 202.254609 81.462295) (xy 202.254271 81.465305)
+ (xy 202.253383 81.468211) (xy 202.247997 81.521242) (xy 202.242056 81.574204) (xy 202.242015 81.58014) (xy 202.242004 81.580246)
+ (xy 202.242013 81.580345) (xy 202.242 81.58226) (xy 202.242 91.200999) (xy 198.896998 94.546) (xy 198.628 94.546)
+ (xy 198.574913 94.551205) (xy 198.52186 94.555847) (xy 198.518949 94.556693) (xy 198.515927 94.556989) (xy 198.464877 94.572402)
+ (xy 198.41372 94.587264) (xy 198.411027 94.58866) (xy 198.408122 94.589537) (xy 198.361012 94.614586) (xy 198.313743 94.639088)
+ (xy 198.311376 94.640977) (xy 198.308693 94.642404) (xy 198.267368 94.676109) (xy 198.225735 94.709343) (xy 198.221512 94.713508)
+ (xy 198.221426 94.713578) (xy 198.22136 94.713658) (xy 198.219999 94.715) (xy 196.695999 96.238999) (xy 196.662144 96.280215)
+ (xy 196.62791 96.321014) (xy 196.62645 96.32367) (xy 196.624522 96.326017) (xy 196.599306 96.373044) (xy 196.573659 96.419696)
+ (xy 196.572743 96.422584) (xy 196.571307 96.425262) (xy 196.555701 96.476307) (xy 196.539609 96.527035) (xy 196.539271 96.530045)
+ (xy 196.538383 96.532951) (xy 196.532997 96.585982) (xy 196.527056 96.638944) (xy 196.527015 96.64488) (xy 196.527004 96.644986)
+ (xy 196.527013 96.645085) (xy 196.527 96.647) (xy 196.527 97.992014) (xy 196.415458 98.101244) (xy 196.316351 98.245986)
+ (xy 196.247246 98.407221) (xy 196.210774 98.578809) (xy 196.208324 98.754212) (xy 191.689491 98.754212) (xy 191.709094 98.706887)
+ (xy 191.7295 98.604299) (xy 191.7295 98.28075) (xy 191.59675 98.148) (xy 190.5405 98.148) (xy 190.4595 98.148)
+ (xy 189.40325 98.148) (xy 189.2705 98.28075) (xy 187.015252 98.28075) (xy 187.685301 97.610701) (xy 189.2705 97.610701)
+ (xy 189.2705 97.93425) (xy 189.40325 98.067) (xy 190.4595 98.067) (xy 190.4595 97.26475) (xy 190.5405 97.26475)
+ (xy 190.5405 98.067) (xy 191.59675 98.067) (xy 191.7295 97.93425) (xy 191.7295 97.610701) (xy 191.709094 97.508113)
+ (xy 191.669066 97.411477) (xy 191.610955 97.324507) (xy 191.536993 97.250545) (xy 191.450023 97.192434) (xy 191.353387 97.152406)
+ (xy 191.250799 97.132) (xy 190.67325 97.132) (xy 190.5405 97.26475) (xy 190.4595 97.26475) (xy 190.32675 97.132)
+ (xy 189.749201 97.132) (xy 189.646613 97.152406) (xy 189.549977 97.192434) (xy 189.463007 97.250545) (xy 189.389045 97.324507)
+ (xy 189.330934 97.411477) (xy 189.290906 97.508113) (xy 189.2705 97.610701) (xy 187.685301 97.610701) (xy 196.664822 88.63118)
+ (xy 196.675615 88.63118) (xy 196.552062 88.752172) (xy 196.417778 88.94829) (xy 196.324143 89.166755) (xy 196.274726 89.399246)
+ (xy 196.271407 89.636908) (xy 196.314314 89.870689) (xy 196.401812 90.091683) (xy 196.530568 90.291474) (xy 196.695678 90.46245)
+ (xy 196.890853 90.5981) (xy 197.108659 90.693257) (xy 197.3408 90.744297) (xy 197.578433 90.749275) (xy 197.812508 90.708001)
+ (xy 198.034108 90.622048) (xy 198.234792 90.49469) (xy 198.406917 90.330777) (xy 198.543927 90.136554) (xy 198.640602 89.919418)
+ (xy 198.693261 89.687639) (xy 198.693969 89.636908) (xy 198.811407 89.636908) (xy 198.854314 89.870689) (xy 198.941812 90.091683)
+ (xy 199.070568 90.291474) (xy 199.235678 90.46245) (xy 199.430853 90.5981) (xy 199.648659 90.693257) (xy 199.8808 90.744297)
+ (xy 200.118433 90.749275) (xy 200.352508 90.708001) (xy 200.574108 90.622048) (xy 200.774792 90.49469) (xy 200.946917 90.330777)
+ (xy 201.083927 90.136554) (xy 201.180602 89.919418) (xy 201.233261 89.687639) (xy 201.237052 89.416157) (xy 201.190885 89.182999)
+ (xy 201.10031 88.963247) (xy 200.968777 88.765274) (xy 200.801296 88.59662) (xy 200.604246 88.463708) (xy 200.385132 88.371601)
+ (xy 200.152301 88.323808) (xy 199.914622 88.322148) (xy 199.681147 88.366686) (xy 199.460768 88.455725) (xy 199.261882 88.585872)
+ (xy 199.092062 88.752172) (xy 198.957778 88.94829) (xy 198.864143 89.166755) (xy 198.814726 89.399246) (xy 198.811407 89.636908)
+ (xy 198.693969 89.636908) (xy 198.697052 89.416157) (xy 198.650885 89.182999) (xy 198.56031 88.963247) (xy 198.428777 88.765274)
+ (xy 198.261296 88.59662) (xy 198.064246 88.463708) (xy 197.936167 88.409869) (xy 197.96109 88.380166) (xy 197.962064 88.378395)
+ (xy 197.963355 88.376834) (xy 197.989202 88.329031) (xy 198.015341 88.281484) (xy 198.015953 88.279556) (xy 198.016915 88.277776)
+ (xy 198.032979 88.225884) (xy 198.038278 88.209177) (xy 198.247 88.209177) (xy 198.318661 88.203463) (xy 198.440205 88.165822)
+ (xy 198.546451 88.095811) (xy 198.628986 87.998972) (xy 198.681275 87.882974) (xy 198.699177 87.757) (xy 198.699177 87.096908)
+ (xy 198.811407 87.096908) (xy 198.854314 87.330689) (xy 198.941812 87.551683) (xy 199.070568 87.751474) (xy 199.235678 87.92245)
+ (xy 199.430853 88.0581) (xy 199.648659 88.153257) (xy 199.8808 88.204297) (xy 200.118433 88.209275) (xy 200.352508 88.168001)
+ (xy 200.574108 88.082048) (xy 200.774792 87.95469) (xy 200.946917 87.790777) (xy 201.083927 87.596554) (xy 201.180602 87.379418)
+ (xy 201.233261 87.147639) (xy 201.237052 86.876157) (xy 201.190885 86.642999) (xy 201.10031 86.423247) (xy 200.968777 86.225274)
+ (xy 200.801296 86.05662) (xy 200.604246 85.923708) (xy 200.385132 85.831601) (xy 200.152301 85.783808) (xy 199.914622 85.782148)
+ (xy 199.681147 85.826686) (xy 199.460768 85.915725) (xy 199.261882 86.045872) (xy 199.092062 86.212172) (xy 198.957778 86.40829)
+ (xy 198.864143 86.626755) (xy 198.814726 86.859246) (xy 198.811407 87.096908) (xy 198.699177 87.096908) (xy 198.699177 86.233)
+ (xy 198.693463 86.161339) (xy 198.655822 86.039795) (xy 198.585811 85.933549) (xy 198.488972 85.851014) (xy 198.372974 85.798725)
+ (xy 198.247 85.780823) (xy 196.723 85.780823) (xy 196.651339 85.786537) (xy 196.529795 85.824178) (xy 196.423549 85.894189)
+ (xy 196.341014 85.991028) (xy 196.288725 86.107026) (xy 196.270823 86.233) (xy 196.270823 87.501128) (xy 196.262671 87.50359)
+ (xy 196.211541 87.518444) (xy 196.208849 87.519839) (xy 196.205942 87.520717) (xy 196.158853 87.545755) (xy 196.111563 87.570267)
+ (xy 196.109193 87.572159) (xy 196.106513 87.573584) (xy 196.065221 87.607261) (xy 196.023556 87.640522) (xy 196.019328 87.644692)
+ (xy 196.019246 87.644758) (xy 196.019184 87.644833) (xy 196.017819 87.646179) (xy 183.251779 100.412219) (xy 183.217924 100.453435)
+ (xy 183.18369 100.494234) (xy 183.18223 100.49689) (xy 183.180302 100.499237) (xy 183.155086 100.546264) (xy 183.129439 100.592916)
+ (xy 183.128523 100.595804) (xy 183.127087 100.598482) (xy 183.111481 100.649527) (xy 183.095389 100.700255) (xy 183.095051 100.703265)
+ (xy 183.094163 100.706171) (xy 183.088777 100.759202) (xy 183.082836 100.812164) (xy 183.082795 100.8181) (xy 183.082784 100.818206)
+ (xy 183.082793 100.818305) (xy 183.08278 100.82022) (xy 183.08278 105.280219) (xy 181.561886 106.801112) (xy 181.540103 106.80096)
+ (xy 181.392254 106.829164) (xy 181.2527 106.885547) (xy 181.126754 106.967964) (xy 181.019216 107.073273) (xy 180.93418 107.197465)
+ (xy 180.874886 107.335808) (xy 180.843592 107.483034) (xy 180.841491 107.633534) (xy 180.841931 107.63593) (xy 178.946248 105.740247)
+ (xy 178.948538 105.57629) (xy 178.914466 105.40421) (xy 178.847618 105.242026) (xy 178.750542 105.095914) (xy 178.626935 104.971441)
+ (xy 178.481504 104.873347) (xy 178.319791 104.805369) (xy 178.147953 104.770096) (xy 177.972537 104.768871) (xy 177.800224 104.801742)
+ (xy 177.637577 104.867455) (xy 177.490791 104.963509) (xy 177.365458 105.086244) (xy 177.266351 105.230986) (xy 177.197246 105.392221)
+ (xy 177.160774 105.563809) (xy 177.158324 105.739212) (xy 175.466507 105.739212) (xy 175.418618 105.623026) (xy 175.321542 105.476914)
+ (xy 175.197935 105.352441) (xy 175.052504 105.254347) (xy 174.890791 105.186369) (xy 174.718953 105.151096) (xy 174.543537 105.149871)
+ (xy 174.371224 105.182742) (xy 174.208577 105.248455) (xy 174.061791 105.344509) (xy 173.936458 105.467244) (xy 173.837351 105.611986)
+ (xy 173.768246 105.773221) (xy 173.731774 105.944809) (xy 173.729324 106.120212) (xy 167.583619 106.120212) (xy 167.603876 106.074714)
+ (xy 167.64274 105.903653) (xy 167.643753 105.831129) (xy 167.681443 105.786212) (xy 167.744052 105.672326) (xy 167.783348 105.548448)
+ (xy 167.797835 105.419297) (xy 167.7979 105.41) (xy 167.7979 104.077534) (xy 180.841491 104.077534) (xy 180.868662 104.225575)
+ (xy 180.92407 104.36552) (xy 180.983731 104.458097) (xy 180.93418 104.530465) (xy 180.874886 104.668808) (xy 180.843592 104.816034)
+ (xy 180.841491 104.966534) (xy 180.868662 105.114575) (xy 180.92407 105.25452) (xy 181.005605 105.381038) (xy 181.110161 105.489309)
+ (xy 181.233756 105.57521) (xy 181.371682 105.635468) (xy 181.518685 105.667789) (xy 181.669167 105.670941) (xy 181.817395 105.644804)
+ (xy 181.957723 105.590375) (xy 182.084807 105.509725) (xy 182.193805 105.405927) (xy 182.280567 105.282935) (xy 182.341786 105.145433)
+ (xy 182.375133 104.998659) (xy 182.377533 104.826743) (xy 182.348298 104.679095) (xy 182.290942 104.539937) (xy 182.235955 104.457176)
+ (xy 182.280567 104.393935) (xy 182.341786 104.256433) (xy 182.375133 104.109659) (xy 182.377533 103.937743) (xy 182.348298 103.790095)
+ (xy 182.290942 103.650937) (xy 182.207648 103.52557) (xy 182.10159 103.418769) (xy 181.976808 103.334603) (xy 181.838054 103.276276)
+ (xy 181.690614 103.246011) (xy 181.540103 103.24496) (xy 181.392254 103.273164) (xy 181.2527 103.329547) (xy 181.126754 103.411964)
+ (xy 181.019216 103.517273) (xy 180.93418 103.641465) (xy 180.874886 103.779808) (xy 180.843592 103.927034) (xy 180.841491 104.077534)
+ (xy 167.7979 104.077534) (xy 167.7979 103.760582) (xy 167.965982 103.877402) (xy 168.172377 103.967573) (xy 168.392355 104.015939)
+ (xy 168.617538 104.020656) (xy 168.839349 103.981545) (xy 169.049338 103.900095) (xy 169.239508 103.779409) (xy 169.402615 103.624085)
+ (xy 169.532447 103.440037) (xy 169.624057 103.234277) (xy 169.673957 103.014642) (xy 169.674628 102.966569) (xy 174.99899 102.966569)
+ (xy 175.039649 103.188101) (xy 175.122563 103.397517) (xy 175.244573 103.58684) (xy 175.401033 103.748859) (xy 175.585982 103.877402)
+ (xy 175.792377 103.967573) (xy 176.012355 104.015939) (xy 176.237538 104.020656) (xy 176.459349 103.981545) (xy 176.669338 103.900095)
+ (xy 176.859508 103.779409) (xy 177.022615 103.624085) (xy 177.152447 103.440037) (xy 177.244057 103.234277) (xy 177.293957 103.014642)
+ (xy 177.294926 102.945212) (xy 178.809324 102.945212) (xy 178.840991 103.117751) (xy 178.905568 103.280852) (xy 179.000594 103.428305)
+ (xy 179.122452 103.554492) (xy 179.266498 103.654607) (xy 179.427247 103.724836) (xy 179.598575 103.762505) (xy 179.773957 103.766179)
+ (xy 179.946713 103.735717) (xy 180.110261 103.672281) (xy 180.258374 103.578286) (xy 180.385408 103.457313) (xy 180.486526 103.313969)
+ (xy 180.557876 103.153714) (xy 180.59674 102.982653) (xy 180.599538 102.78229) (xy 180.565466 102.61021) (xy 180.498618 102.448026)
+ (xy 180.401542 102.301914) (xy 180.277935 102.177441) (xy 180.132504 102.079347) (xy 179.970791 102.011369) (xy 179.798953 101.976096)
+ (xy 179.623537 101.974871) (xy 179.451224 102.007742) (xy 179.288577 102.073455) (xy 179.141791 102.169509) (xy 179.016458 102.292244)
+ (xy 178.917351 102.436986) (xy 178.848246 102.598221) (xy 178.811774 102.769809) (xy 178.809324 102.945212) (xy 177.294926 102.945212)
+ (xy 177.297549 102.757384) (xy 177.253801 102.536441) (xy 177.167972 102.328203) (xy 177.04333 102.140602) (xy 176.884624 101.980784)
+ (xy 176.697897 101.854835) (xy 176.490264 101.767554) (xy 176.269632 101.722265) (xy 176.044405 101.720693) (xy 175.823162 101.762897)
+ (xy 175.61433 101.847271) (xy 175.425863 101.9706) (xy 175.264941 102.128186) (xy 175.137692 102.314029) (xy 175.048964 102.521048)
+ (xy 175.002135 102.741358) (xy 174.99899 102.966569) (xy 169.674628 102.966569) (xy 169.677549 102.757384) (xy 169.633801 102.536441)
+ (xy 169.547972 102.328203) (xy 169.42333 102.140602) (xy 169.264624 101.980784) (xy 169.077897 101.854835) (xy 168.870264 101.767554)
+ (xy 168.649632 101.722265) (xy 168.424405 101.720693) (xy 168.203162 101.762897) (xy 167.99433 101.847271) (xy 167.805863 101.9706)
+ (xy 167.7979 101.978398) (xy 167.7979 99.462824) (xy 168.336964 98.92376) (xy 168.392355 98.935939) (xy 168.617538 98.940656)
+ (xy 168.839349 98.901545) (xy 169.049338 98.820095) (xy 169.239508 98.699409) (xy 169.402615 98.544085) (xy 169.532447 98.360037)
+ (xy 169.624057 98.154277) (xy 169.673957 97.934642) (xy 169.674628 97.886569) (xy 174.99899 97.886569) (xy 175.039649 98.108101)
+ (xy 175.122563 98.317517) (xy 175.244573 98.50684) (xy 175.401033 98.668859) (xy 175.585982 98.797402) (xy 175.792377 98.887573)
+ (xy 176.012355 98.935939) (xy 176.237538 98.940656) (xy 176.459349 98.901545) (xy 176.669338 98.820095) (xy 176.859508 98.699409)
+ (xy 177.022615 98.544085) (xy 177.152447 98.360037) (xy 177.244057 98.154277) (xy 177.293957 97.934642) (xy 177.297549 97.677384)
+ (xy 177.253801 97.456441) (xy 177.167972 97.248203) (xy 177.04333 97.060602) (xy 176.884624 96.900784) (xy 176.697897 96.774835)
+ (xy 176.490264 96.687554) (xy 176.269632 96.642265) (xy 176.044405 96.640693) (xy 175.823162 96.682897) (xy 175.61433 96.767271)
+ (xy 175.425863 96.8906) (xy 175.264941 97.048186) (xy 175.137692 97.234029) (xy 175.048964 97.441048) (xy 175.002135 97.661358)
+ (xy 174.99899 97.886569) (xy 169.674628 97.886569) (xy 169.677549 97.677384) (xy 169.633801 97.456441) (xy 169.547972 97.248203)
+ (xy 169.42333 97.060602) (xy 169.264624 96.900784) (xy 169.077897 96.774835) (xy 168.870264 96.687554) (xy 168.649632 96.642265)
+ (xy 168.424405 96.640693) (xy 168.203162 96.682897) (xy 167.99433 96.767271) (xy 167.805863 96.8906) (xy 167.644941 97.048186)
+ (xy 167.517692 97.234029) (xy 167.428964 97.441048) (xy 167.382135 97.661358) (xy 167.37899 97.886569) (xy 167.396314 97.980961)
+ (xy 166.661138 98.716138) (xy 166.622113 98.763647) (xy 166.582557 98.810788) (xy 166.58087 98.813857) (xy 166.578647 98.816563)
+ (xy 166.54957 98.870791) (xy 166.519948 98.924674) (xy 166.51889 98.92801) (xy 166.517234 98.931098) (xy 166.499243 98.989944)
+ (xy 166.480652 99.048552) (xy 166.480262 99.052032) (xy 166.479238 99.05538) (xy 166.473021 99.116578) (xy 166.466165 99.177703)
+ (xy 166.466117 99.184547) (xy 166.466104 99.184676) (xy 166.466115 99.184797) (xy 166.4661 99.187) (xy 166.4661 104.941317)
+ (xy 166.334577 104.994455) (xy 166.187791 105.090509) (xy 166.062458 105.213244) (xy 165.963351 105.357986) (xy 165.894246 105.519221)
+ (xy 165.857774 105.690809) (xy 165.855324 105.866212) (xy 162.704091 105.866212) (xy 162.609527 105.826461) (xy 162.413293 105.78618)
+ (xy 162.212971 105.784781) (xy 162.016193 105.822319) (xy 161.830453 105.897363) (xy 161.662827 106.007054) (xy 161.519699 106.147215)
+ (xy 161.406521 106.312507) (xy 161.327604 106.496635) (xy 161.285954 106.692583) (xy 161.283157 106.892891) (xy 147.426966 106.892891)
+ (xy 147.44974 106.792653) (xy 147.452538 106.59229) (xy 147.418466 106.42021) (xy 147.35796 106.273413) (xy 147.443941 106.218848)
+ (xy 147.589012 106.080699) (xy 147.704487 105.917003) (xy 147.785967 105.733996) (xy 147.830349 105.538647) (xy 147.833544 105.309837)
+ (xy 147.794634 105.113325) (xy 147.718295 104.928114) (xy 147.607436 104.761258) (xy 147.466279 104.619112) (xy 147.300201 104.507091)
+ (xy 147.115527 104.429461) (xy 146.919293 104.38918) (xy 146.718971 104.387781) (xy 146.522193 104.425319) (xy 146.490342 104.438188)
+ (xy 146.497094 104.421887) (xy 146.5175 104.319299) (xy 146.5175 103.99575) (xy 146.38475 103.863) (xy 145.3285 103.863)
+ (xy 145.3285 103.883) (xy 145.2475 103.883) (xy 145.2475 103.863) (xy 144.19125 103.863) (xy 144.0585 103.99575)
+ (xy 144.0585 104.319299) (xy 144.078906 104.421887) (xy 144.118934 104.518523) (xy 144.177045 104.605493) (xy 144.251007 104.679455)
+ (xy 144.337977 104.737566) (xy 144.434613 104.777594) (xy 144.537201 104.798) (xy 145.11475 104.798) (xy 145.247498 104.665252)
+ (xy 145.247498 104.777924) (xy 145.20824 104.798273) (xy 145.205241 104.800667) (xy 145.201856 104.802467) (xy 145.167088 104.830823)
+ (xy 144.5895 104.830823) (xy 144.517839 104.836537) (xy 144.396295 104.874178) (xy 144.290049 104.944189) (xy 144.207514 105.041028)
+ (xy 144.155225 105.157026) (xy 144.137323 105.283) (xy 144.137323 106.172) (xy 144.143037 106.243661) (xy 144.180678 106.365205)
+ (xy 144.250689 106.471451) (xy 144.347528 106.553986) (xy 144.463526 106.606275) (xy 144.496775 106.611) (xy 142.353303 106.611)
+ (xy 142.36974 106.538653) (xy 142.372538 106.33829) (xy 142.338466 106.16621) (xy 142.271618 106.004026) (xy 142.174542 105.857914)
+ (xy 142.07935 105.762055) (xy 142.148567 105.663935) (xy 142.209786 105.526433) (xy 142.243133 105.379659) (xy 142.245533 105.207743)
+ (xy 142.216298 105.060095) (xy 142.158942 104.920937) (xy 142.075648 104.79557) (xy 141.96959 104.688769) (xy 141.844808 104.604603)
+ (xy 141.706054 104.546276) (xy 141.558614 104.516011) (xy 141.408103 104.51496) (xy 141.260254 104.543164) (xy 141.198226 104.568225)
+ (xy 140.544125 103.914123) (xy 140.692247 103.978836) (xy 140.863575 104.016505) (xy 141.038957 104.020179) (xy 141.211713 103.989717)
+ (xy 141.375261 103.926281) (xy 141.523374 103.832286) (xy 141.650408 103.711313) (xy 141.657683 103.701) (xy 142.113 103.701)
+ (xy 142.166043 103.695799) (xy 142.21914 103.691153) (xy 142.222051 103.690307) (xy 142.225073 103.690011) (xy 142.276123 103.674598)
+ (xy 142.32728 103.659736) (xy 142.329973 103.65834) (xy 142.332878 103.657463) (xy 142.379949 103.632435) (xy 142.427257 103.607913)
+ (xy 142.429627 103.606021) (xy 142.432307 103.604596) (xy 142.473605 103.570914) (xy 142.515265 103.537657) (xy 142.519492 103.533489)
+ (xy 142.519574 103.533422) (xy 142.519636 103.533347) (xy 142.521001 103.532001) (xy 142.7273 103.325701) (xy 144.0585 103.325701)
+ (xy 144.0585 103.64925) (xy 144.19125 103.782) (xy 145.2475 103.782) (xy 145.2475 102.97975) (xy 145.3285 102.97975)
+ (xy 145.3285 103.782) (xy 146.38475 103.782) (xy 146.5175 103.64925) (xy 146.5175 103.325701) (xy 146.497094 103.223113)
+ (xy 146.457066 103.126477) (xy 146.398955 103.039507) (xy 146.324993 102.965545) (xy 146.238023 102.907434) (xy 146.141387 102.867406)
+ (xy 146.038799 102.847) (xy 145.46125 102.847) (xy 145.3285 102.97975) (xy 145.2475 102.97975) (xy 145.11475 102.847)
+ (xy 144.537201 102.847) (xy 144.434613 102.867406) (xy 144.337977 102.907434) (xy 144.251007 102.965545) (xy 144.177045 103.039507)
+ (xy 144.118934 103.126477) (xy 144.078906 103.223113) (xy 144.0585 103.325701) (xy 142.7273 103.325701) (xy 142.775 103.278001)
+ (xy 142.808831 103.236814) (xy 142.84309 103.195986) (xy 142.84455 103.19333) (xy 142.846478 103.190983) (xy 142.871675 103.143991)
+ (xy 142.897341 103.097304) (xy 142.898259 103.094411) (xy 142.899692 103.091738) (xy 142.915299 103.040692) (xy 142.931391 102.989965)
+ (xy 142.931729 102.986954) (xy 142.932617 102.984049) (xy 142.938003 102.931018) (xy 142.943944 102.878056) (xy 142.943985 102.87212)
+ (xy 142.943996 102.872014) (xy 142.943987 102.871915) (xy 142.944 102.87) (xy 142.944 102.574891) (xy 150.996157 102.574891)
+ (xy 151.03232 102.771926) (xy 151.106065 102.958185) (xy 151.214583 103.126573) (xy 151.353742 103.270676) (xy 151.51824 103.385005)
+ (xy 151.701812 103.465205) (xy 151.897465 103.508222) (xy 152.097748 103.512418) (xy 152.295031 103.477631) (xy 152.4818 103.405188)
+ (xy 152.650941 103.297848) (xy 152.796012 103.159699) (xy 152.911487 102.996003) (xy 152.992967 102.812996) (xy 153.037349 102.617647)
+ (xy 153.040544 102.388837) (xy 153.001634 102.192325) (xy 152.925295 102.007114) (xy 152.814436 101.840258) (xy 152.673279 101.698112)
+ (xy 152.507201 101.586091) (xy 152.322527 101.508461) (xy 152.126293 101.46818) (xy 151.925971 101.466781) (xy 151.729193 101.504319)
+ (xy 151.543453 101.579363) (xy 151.375827 101.689054) (xy 151.232699 101.829215) (xy 151.119521 101.994507) (xy 151.040604 102.178635)
+ (xy 150.998954 102.374583) (xy 150.996157 102.574891) (xy 142.944 102.574891) (xy 142.944 101.854) (xy 142.938795 101.800913)
+ (xy 142.934153 101.74786) (xy 142.933307 101.744949) (xy 142.933011 101.741927) (xy 142.917598 101.690877) (xy 142.902736 101.63972)
+ (xy 142.90134 101.637027) (xy 142.900463 101.634122) (xy 142.875414 101.587012) (xy 142.850912 101.539743) (xy 142.849023 101.537376)
+ (xy 142.847596 101.534693) (xy 142.813891 101.493368) (xy 142.780657 101.451735) (xy 142.776492 101.447512) (xy 142.776422 101.447426)
+ (xy 142.776342 101.44736) (xy 142.775 101.445999) (xy 141.822501 100.493499) (xy 141.781285 100.459644) (xy 141.757576 100.43975)
+ (xy 144.1855 100.43975) (xy 144.1855 100.763299) (xy 144.205906 100.865887) (xy 144.245934 100.962523) (xy 144.304045 101.049493)
+ (xy 144.378007 101.123455) (xy 144.464977 101.181566) (xy 144.561613 101.221594) (xy 144.664201 101.242) (xy 145.24175 101.242)
+ (xy 145.3745 101.10925) (xy 145.3745 100.307) (xy 145.4555 100.307) (xy 145.4555 101.10925) (xy 145.58825 101.242)
+ (xy 146.165799 101.242) (xy 146.268387 101.221594) (xy 146.365023 101.181566) (xy 146.451993 101.123455) (xy 146.525955 101.049493)
+ (xy 146.584066 100.962523) (xy 146.624094 100.865887) (xy 146.6445 100.763299) (xy 146.6445 100.43975) (xy 146.51175 100.307)
+ (xy 145.4555 100.307) (xy 145.3745 100.307) (xy 144.31825 100.307) (xy 144.1855 100.43975) (xy 141.757576 100.43975)
+ (xy 141.740486 100.42541) (xy 141.73783 100.42395) (xy 141.735483 100.422022) (xy 141.688456 100.396806) (xy 141.641804 100.371159)
+ (xy 141.638916 100.370243) (xy 141.636238 100.368807) (xy 141.585193 100.353201) (xy 141.534465 100.337109) (xy 141.531455 100.336771)
+ (xy 141.528549 100.335883) (xy 141.475518 100.330497) (xy 141.422556 100.324556) (xy 141.41662 100.324515) (xy 141.416514 100.324504)
+ (xy 141.416415 100.324513) (xy 141.4145 100.3245) (xy 139.621501 100.3245) (xy 139.0837 99.786698) (xy 139.12752 99.769701)
+ (xy 144.1855 99.769701) (xy 144.1855 100.09325) (xy 144.31825 100.226) (xy 145.3745 100.226) (xy 145.3745 99.42375)
+ (xy 145.24175 99.291) (xy 144.664201 99.291) (xy 144.561613 99.311406) (xy 144.464977 99.351434) (xy 144.378007 99.409545)
+ (xy 144.304045 99.483507) (xy 144.245934 99.570477) (xy 144.205906 99.667113) (xy 144.1855 99.769701) (xy 139.12752 99.769701)
+ (xy 139.216261 99.735281) (xy 139.364374 99.641286) (xy 139.491408 99.520313) (xy 139.498683 99.51) (xy 142.494 99.51)
+ (xy 142.547043 99.504799) (xy 142.60014 99.500153) (xy 142.603051 99.499307) (xy 142.606073 99.499011) (xy 142.657123 99.483598)
+ (xy 142.70828 99.468736) (xy 142.710973 99.46734) (xy 142.713878 99.466463) (xy 142.760949 99.441435) (xy 142.808257 99.416913)
+ (xy 142.810627 99.415021) (xy 142.813307 99.413596) (xy 142.854605 99.379914) (xy 142.896265 99.346657) (xy 142.900492 99.342489)
+ (xy 142.900574 99.342422) (xy 142.900636 99.342347) (xy 142.902001 99.341001) (xy 144.130001 98.113) (xy 144.264323 98.113)
+ (xy 144.264323 98.806) (xy 144.270037 98.877661) (xy 144.307678 98.999205) (xy 144.377689 99.105451) (xy 144.474528 99.187986)
+ (xy 144.590526 99.240275) (xy 144.7165 99.258177) (xy 145.96995 99.258177) (xy 145.991102 99.291) (xy 145.58825 99.291)
+ (xy 145.4555 99.42375) (xy 145.4555 100.226) (xy 146.51175 100.226) (xy 146.6445 100.09325) (xy 146.6445 99.769701)
+ (xy 146.62753 99.684385) (xy 146.690465 99.698222) (xy 146.890748 99.702418) (xy 147.088031 99.667631) (xy 147.2748 99.595188)
+ (xy 147.443941 99.487848) (xy 147.52737 99.4084) (xy 147.779872 99.4084) (xy 148.963236 100.591763) (xy 149.015297 100.634527)
+ (xy 149.066913 100.677838) (xy 149.070275 100.679686) (xy 149.073238 100.68212) (xy 149.132638 100.71397) (xy 149.191659 100.746417)
+ (xy 149.195311 100.747575) (xy 149.198695 100.74939) (xy 149.263173 100.769103) (xy 149.327349 100.789461) (xy 149.331159 100.789888)
+ (xy 149.334828 100.79101) (xy 149.401841 100.797817) (xy 149.468816 100.805329) (xy 149.476318 100.805381) (xy 149.476453 100.805395)
+ (xy 149.476579 100.805383) (xy 149.479 100.8054) (xy 155.194 100.8054) (xy 155.261118 100.798819) (xy 155.328174 100.792953)
+ (xy 155.331855 100.791884) (xy 155.335675 100.791509) (xy 155.400229 100.772019) (xy 155.464876 100.753237) (xy 155.468278 100.751473)
+ (xy 155.471953 100.750364) (xy 155.531447 100.718731) (xy 155.59126 100.687727) (xy 155.594259 100.685333) (xy 155.597644 100.683533)
+ (xy 155.649836 100.640966) (xy 155.702512 100.598915) (xy 155.707854 100.593648) (xy 155.70796 100.593561) (xy 155.708041 100.593463)
+ (xy 155.709764 100.591764) (xy 155.885636 100.415891) (xy 162.426157 100.415891) (xy 162.46232 100.612926) (xy 162.536065 100.799185)
+ (xy 162.644583 100.967573) (xy 162.783742 101.111676) (xy 162.94824 101.226005) (xy 163.131812 101.306205) (xy 163.327465 101.349222)
+ (xy 163.527748 101.353418) (xy 163.725031 101.318631) (xy 163.9118 101.246188) (xy 164.080941 101.138848) (xy 164.226012 101.000699)
+ (xy 164.341487 100.837003) (xy 164.422967 100.653996) (xy 164.467349 100.458647) (xy 164.470544 100.229837) (xy 164.431634 100.033325)
+ (xy 164.355295 99.848114) (xy 164.244436 99.681258) (xy 164.103279 99.539112) (xy 163.937201 99.427091) (xy 163.752527 99.349461)
+ (xy 163.556293 99.30918) (xy 163.355971 99.307781) (xy 163.159193 99.345319) (xy 162.973453 99.420363) (xy 162.805827 99.530054)
+ (xy 162.662699 99.670215) (xy 162.549521 99.835507) (xy 162.470604 100.019635) (xy 162.428954 100.215583) (xy 162.426157 100.415891)
+ (xy 155.885636 100.415891) (xy 157.743559 98.557968) (xy 157.812748 98.559418) (xy 158.010031 98.524631) (xy 158.1968 98.452188)
+ (xy 158.365941 98.344848) (xy 158.511012 98.206699) (xy 158.626487 98.043003) (xy 158.707967 97.859996) (xy 158.752349 97.664647)
+ (xy 158.755544 97.435837) (xy 158.716634 97.239325) (xy 158.640295 97.054114) (xy 158.529436 96.887258) (xy 158.4634 96.820759)
+ (xy 158.4634 96.060128) (xy 161.172559 93.350968) (xy 161.241748 93.352418) (xy 161.439031 93.317631) (xy 161.6258 93.245188)
+ (xy 161.794941 93.137848) (xy 161.940012 92.999699) (xy 162.055487 92.836003) (xy 162.136967 92.652996) (xy 162.181349 92.457647)
+ (xy 162.184544 92.228837) (xy 162.145634 92.032325) (xy 162.139317 92.017) (xy 163.336998 92.017) (xy 165.357999 94.038)
+ (xy 164.704002 94.038) (xy 164.214248 93.548246) (xy 164.216538 93.38429) (xy 164.182466 93.21221) (xy 164.115618 93.050026)
+ (xy 164.018542 92.903914) (xy 163.894935 92.779441) (xy 163.749504 92.681347) (xy 163.587791 92.613369) (xy 163.415953 92.578096)
+ (xy 163.240537 92.576871) (xy 163.068224 92.609742) (xy 162.905577 92.675455) (xy 162.758791 92.771509) (xy 162.633458 92.894244)
+ (xy 162.534351 93.038986) (xy 162.465246 93.200221) (xy 162.428774 93.371809) (xy 162.426324 93.547212) (xy 162.457991 93.719751)
+ (xy 162.522568 93.882852) (xy 162.617594 94.030305) (xy 162.739452 94.156492) (xy 162.883498 94.256607) (xy 163.044247 94.326836)
+ (xy 163.215575 94.364505) (xy 163.390957 94.368179) (xy 163.400495 94.366497) (xy 164.056999 95.023001) (xy 164.098215 95.056856)
+ (xy 164.139014 95.09109) (xy 164.14167 95.09255) (xy 164.144017 95.094478) (xy 164.191009 95.119675) (xy 164.237696 95.145341)
+ (xy 164.240589 95.146259) (xy 164.243262 95.147692) (xy 164.294261 95.163285) (xy 164.345035 95.179391) (xy 164.348046 95.179729)
+ (xy 164.350951 95.180617) (xy 164.403982 95.186003) (xy 164.456944 95.191944) (xy 164.46288 95.191985) (xy 164.462986 95.191996)
+ (xy 164.463085 95.191987) (xy 164.465 95.192) (xy 166.181408 95.192) (xy 166.090351 95.324986) (xy 166.021246 95.486221)
+ (xy 165.984774 95.657809) (xy 165.982324 95.833212) (xy 166.013991 96.005751) (xy 166.078568 96.168852) (xy 166.173594 96.316305)
+ (xy 166.295452 96.442492) (xy 166.439498 96.542607) (xy 166.600247 96.612836) (xy 166.771575 96.650505) (xy 166.946957 96.654179)
+ (xy 167.119713 96.623717) (xy 167.283261 96.560281) (xy 167.431374 96.466286) (xy 167.558408 96.345313) (xy 167.659526 96.201969)
+ (xy 167.730876 96.041714) (xy 167.76974 95.870653) (xy 167.772538 95.67029) (xy 167.738466 95.49821) (xy 167.671618 95.336026)
+ (xy 167.575928 95.192) (xy 178.816 95.192) (xy 178.869043 95.186799) (xy 178.92214 95.182153) (xy 178.925051 95.181307)
+ (xy 178.928073 95.181011) (xy 178.979123 95.165598) (xy 179.03028 95.150736) (xy 179.032973 95.14934) (xy 179.035878 95.148463)
+ (xy 179.082949 95.123435) (xy 179.130257 95.098913) (xy 179.132627 95.097021) (xy 179.135307 95.095596) (xy 179.176611 95.061909)
+ (xy 179.218265 95.028657) (xy 179.222492 95.024489) (xy 179.222574 95.024422) (xy 179.222636 95.024347) (xy 179.224001 95.023001)
+ (xy 179.605 94.642001) (xy 179.638831 94.600814) (xy 179.67309 94.559986) (xy 179.67455 94.55733) (xy 179.676478 94.554983)
+ (xy 179.701675 94.507991) (xy 179.727341 94.461304) (xy 179.728259 94.458411) (xy 179.729692 94.455738) (xy 179.745285 94.404739)
+ (xy 179.761391 94.353965) (xy 179.761729 94.350954) (xy 179.762617 94.348049) (xy 179.768003 94.295018) (xy 179.773944 94.242056)
+ (xy 179.773983 94.236423) (xy 179.780805 94.229927) (xy 179.867567 94.106935) (xy 179.928786 93.969433) (xy 179.962133 93.822659)
+ (xy 179.964533 93.650743) (xy 179.955377 93.6045) (xy 183.134 93.6045) (xy 183.192893 93.598726) (xy 183.251821 93.59357)
+ (xy 183.255054 93.592631) (xy 183.258407 93.592302) (xy 183.315083 93.575191) (xy 183.371861 93.558695) (xy 183.374849 93.557146)
+ (xy 183.378076 93.556172) (xy 183.430324 93.528391) (xy 183.482842 93.501169) (xy 183.485478 93.499065) (xy 183.488447 93.497486)
+ (xy 183.534235 93.460142) (xy 183.580534 93.423182) (xy 183.585225 93.418556) (xy 183.585318 93.41848) (xy 183.585389 93.418394)
+ (xy 183.586902 93.416902) (xy 185.390966 91.612838) (xy 188.479438 91.612838) (xy 188.536977 91.827767) (xy 188.749825 91.943317)
+ (xy 188.981126 92.015122) (xy 189.221991 92.040423) (xy 189.463164 92.018247) (xy 189.695377 91.949447) (xy 189.909705 91.836666)
+ (xy 189.923023 91.827767) (xy 189.980562 91.612838) (xy 189.23 90.862276) (xy 188.479438 91.612838) (xy 185.390966 91.612838)
+ (xy 186.206813 90.796991) (xy 187.994577 90.796991) (xy 188.016753 91.038164) (xy 188.085553 91.270377) (xy 188.198334 91.484705)
+ (xy 188.207233 91.498023) (xy 188.422162 91.555562) (xy 189.172724 90.805) (xy 189.287276 90.805) (xy 190.037838 91.555562)
+ (xy 190.252767 91.498023) (xy 190.368317 91.285175) (xy 190.440122 91.053874) (xy 190.465423 90.813009) (xy 190.443247 90.571836)
+ (xy 190.374447 90.339623) (xy 190.261666 90.125295) (xy 190.252767 90.111977) (xy 190.037838 90.054438) (xy 189.287276 90.805)
+ (xy 189.172724 90.805) (xy 188.422162 90.054438) (xy 188.207233 90.111977) (xy 188.091683 90.324825) (xy 188.019878 90.556126)
+ (xy 187.994577 90.796991) (xy 186.206813 90.796991) (xy 187.006642 89.997162) (xy 188.479438 89.997162) (xy 189.23 90.747724)
+ (xy 189.980562 89.997162) (xy 189.923023 89.782233) (xy 189.710175 89.666683) (xy 189.478874 89.594878) (xy 189.238009 89.569577)
+ (xy 188.996836 89.591753) (xy 188.764623 89.660553) (xy 188.550295 89.773334) (xy 188.536977 89.782233) (xy 188.479438 89.997162)
+ (xy 187.006642 89.997162) (xy 187.142902 89.860902) (xy 187.180476 89.815159) (xy 187.218485 89.769861) (xy 187.220107 89.766911)
+ (xy 187.222245 89.764308) (xy 187.250204 89.712165) (xy 187.278706 89.66032) (xy 187.279725 89.657109) (xy 187.281316 89.654141)
+ (xy 187.298601 89.597603) (xy 187.316504 89.541167) (xy 187.31688 89.537816) (xy 187.317863 89.5346) (xy 187.323834 89.475815)
+ (xy 187.330438 89.416943) (xy 187.330447 89.415677) (xy 187.3885 89.415677) (xy 187.460161 89.409963) (xy 187.581705 89.372322)
+ (xy 187.687951 89.302311) (xy 187.770486 89.205472) (xy 187.822775 89.089474) (xy 187.840677 88.9635) (xy 187.840677 88.361569)
+ (xy 188.07999 88.361569) (xy 188.120649 88.583101) (xy 188.203563 88.792517) (xy 188.325573 88.98184) (xy 188.482033 89.143859)
+ (xy 188.666982 89.272402) (xy 188.873377 89.362573) (xy 189.093355 89.410939) (xy 189.318538 89.415656) (xy 189.540349 89.376545)
+ (xy 189.750338 89.295095) (xy 189.940508 89.174409) (xy 190.103615 89.019085) (xy 190.233447 88.835037) (xy 190.325057 88.629277)
+ (xy 190.374957 88.409642) (xy 190.378549 88.152384) (xy 190.334801 87.931441) (xy 190.248972 87.723203) (xy 190.12433 87.535602)
+ (xy 189.965624 87.375784) (xy 189.778897 87.249835) (xy 189.571264 87.162554) (xy 189.350632 87.117265) (xy 189.125405 87.115693)
+ (xy 188.904162 87.157897) (xy 188.69533 87.242271) (xy 188.506863 87.3656) (xy 188.345941 87.523186) (xy 188.218692 87.709029)
+ (xy 188.129964 87.916048) (xy 188.083135 88.136358) (xy 188.07999 88.361569) (xy 187.840677 88.361569) (xy 187.840677 87.5665)
+ (xy 187.834963 87.494839) (xy 187.797322 87.373295) (xy 187.727311 87.267049) (xy 187.630472 87.184514) (xy 187.514474 87.132225)
+ (xy 187.3885 87.114323) (xy 185.9915 87.114323) (xy 185.919839 87.120037) (xy 185.798295 87.157678) (xy 185.692049 87.227689)
+ (xy 185.609514 87.324528) (xy 185.557225 87.440526) (xy 185.539323 87.5665) (xy 185.539323 88.9635) (xy 185.545037 89.035161)
+ (xy 185.582678 89.156705) (xy 185.652689 89.262951) (xy 185.749528 89.345486) (xy 185.816514 89.375682) (xy 182.868696 92.3235)
+ (xy 180.464489 92.3235) (xy 180.470133 92.298659) (xy 180.472533 92.126743) (xy 180.443298 91.979095) (xy 180.38842 91.845949)
+ (xy 180.512374 91.767286) (xy 180.639408 91.646313) (xy 180.740526 91.502969) (xy 180.811876 91.342714) (xy 180.85074 91.171653)
+ (xy 180.853538 90.97129) (xy 180.819466 90.79921) (xy 180.797946 90.747) (xy 181.304648 90.747) (xy 181.408452 90.854492)
+ (xy 181.552498 90.954607) (xy 181.713247 91.024836) (xy 181.884575 91.062505) (xy 182.059957 91.066179) (xy 182.232713 91.035717)
+ (xy 182.396261 90.972281) (xy 182.544374 90.878286) (xy 182.671408 90.757313) (xy 182.772526 90.613969) (xy 182.843876 90.453714)
+ (xy 182.88274 90.282653) (xy 182.885538 90.08229) (xy 182.851466 89.91021) (xy 182.784618 89.748026) (xy 182.687542 89.601914)
+ (xy 182.563935 89.477441) (xy 182.418504 89.379347) (xy 182.256791 89.311369) (xy 182.084953 89.276096) (xy 181.909537 89.274871)
+ (xy 181.737224 89.307742) (xy 181.574577 89.373455) (xy 181.427791 89.469509) (xy 181.302458 89.592244) (xy 181.30194 89.593)
+ (xy 177.783062 89.593) (xy 177.803133 89.504659) (xy 177.805191 89.357234) (xy 177.808161 89.360309) (xy 177.931756 89.44621)
+ (xy 178.069682 89.506468) (xy 178.216685 89.538789) (xy 178.367167 89.541941) (xy 178.515395 89.515804) (xy 178.655723 89.461375)
+ (xy 178.782807 89.380725) (xy 178.891805 89.276927) (xy 178.978567 89.153935) (xy 179.039786 89.016433) (xy 179.073133 88.869659)
+ (xy 179.075533 88.697743) (xy 179.046298 88.550095) (xy 178.988942 88.410937) (xy 178.933955 88.328176) (xy 178.978567 88.264935)
+ (xy 179.039786 88.127433) (xy 179.073133 87.980659) (xy 179.075533 87.808743) (xy 179.046298 87.661095) (xy 178.988942 87.521937)
+ (xy 178.905648 87.39657) (xy 178.79959 87.289769) (xy 178.798708 87.289174) (xy 178.919247 87.341836) (xy 179.090575 87.379505)
+ (xy 179.265957 87.383179) (xy 179.438713 87.352717) (xy 179.602261 87.289281) (xy 179.750374 87.195286) (xy 179.877408 87.074313)
+ (xy 179.978526 86.930969) (xy 180.049876 86.770714) (xy 180.08874 86.599653) (xy 180.091538 86.39929) (xy 180.057466 86.22721)
+ (xy 179.990618 86.065026) (xy 179.979306 86.048) (xy 187.96 86.048) (xy 188.013043 86.042799) (xy 188.06614 86.038153)
+ (xy 188.069051 86.037307) (xy 188.072073 86.037011) (xy 188.123123 86.021598) (xy 188.17428 86.006736) (xy 188.176973 86.00534)
+ (xy 188.179878 86.004463) (xy 188.226949 85.979435) (xy 188.274257 85.954913) (xy 188.276627 85.953021) (xy 188.279307 85.951596)
+ (xy 188.320605 85.917914) (xy 188.362265 85.884657) (xy 188.366492 85.880489) (xy 188.366574 85.880422) (xy 188.366636 85.880347)
+ (xy 188.368001 85.879001) (xy 192.644001 81.603) (xy 196.408902 81.603) (xy 196.324143 81.800755) (xy 196.274726 82.033246)
+ (xy 196.271407 82.270908) (xy 196.314314 82.504689) (xy 196.401812 82.725683) (xy 196.530568 82.925474) (xy 196.695678 83.09645)
+ (xy 196.890853 83.2321) (xy 197.108659 83.327257) (xy 197.3408 83.378297) (xy 197.578433 83.383275) (xy 197.812508 83.342001)
+ (xy 198.034108 83.256048) (xy 198.234792 83.12869) (xy 198.406917 82.964777) (xy 198.543927 82.770554) (xy 198.640602 82.553418)
+ (xy 198.693261 82.321639) (xy 198.697052 82.050157) (xy 198.650885 81.816999) (xy 198.562681 81.603) (xy 198.642998 81.603)
+ (xy 198.860043 81.820045) (xy 198.814726 82.033246) (xy 198.811407 82.270908) (xy 198.854314 82.504689) (xy 198.941812 82.725683)
+ (xy 199.070568 82.925474) (xy 199.235678 83.09645) (xy 199.430853 83.2321) (xy 199.648659 83.327257) (xy 199.8808 83.378297)
+ (xy 200.118433 83.383275) (xy 200.352508 83.342001) (xy 200.574108 83.256048) (xy 200.774792 83.12869) (xy 200.946917 82.964777)
+ (xy 201.083927 82.770554) (xy 201.180602 82.553418) (xy 201.233261 82.321639) (xy 201.237052 82.050157) (xy 201.190885 81.816999)
+ (xy 201.10031 81.597247) (xy 200.968777 81.399274) (xy 200.801296 81.23062) (xy 200.604246 81.097708) (xy 200.385132 81.005601)
+ (xy 200.152301 80.957808) (xy 199.914622 80.956148) (xy 199.681147 81.000686) (xy 199.675122 81.00312) (xy 199.290001 80.617999)
+ (xy 199.248785 80.584144) (xy 199.207986 80.54991) (xy 199.20533 80.54845) (xy 199.202983 80.546522) (xy 199.155956 80.521306)
+ (xy 199.109304 80.495659) (xy 199.106416 80.494743) (xy 199.103738 80.493307) (xy 199.052693 80.477701) (xy 199.001965 80.461609)
+ (xy 198.998955 80.461271) (xy 198.996049 80.460383) (xy 198.943018 80.454997) (xy 198.890056 80.449056) (xy 198.88412 80.449015)
+ (xy 198.884014 80.449004) (xy 198.883915 80.449013) (xy 198.882 80.449) (xy 198.38148 80.449) (xy 198.406917 80.424777)
+ (xy 198.543927 80.230554) (xy 198.640602 80.013418) (xy 198.693261 79.781639) (xy 198.697052 79.510157) (xy 198.650885 79.276999)
+ (xy 198.56031 79.057247) (xy 198.479754 78.936) (xy 198.755 78.936) (xy 198.808043 78.930799) (xy 198.86114 78.926153)
+ (xy 198.864051 78.925307) (xy 198.867073 78.925011) (xy 198.918123 78.909598) (xy 198.96928 78.894736) (xy 198.971973 78.89334)
+ (xy 198.974878 78.892463) (xy 199.021949 78.867435) (xy 199.069257 78.842913) (xy 199.071627 78.841021) (xy 199.074307 78.839596)
+ (xy 199.115605 78.805914) (xy 199.157265 78.772657) (xy 199.161492 78.768489) (xy 199.161574 78.768422) (xy 199.161636 78.768347)
+ (xy 199.163001 78.767001) (xy 199.676601 78.253401) (xy 199.8808 78.298297) (xy 200.118433 78.303275) (xy 200.352508 78.262001)
+ (xy 200.574108 78.176048) (xy 200.774792 78.04869) (xy 200.946917 77.884777) (xy 201.083927 77.690554) (xy 201.099 77.656699)
+ (xy 201.099 77.738999) (xy 200.374566 78.463432) (xy 200.152301 78.417808) (xy 199.914622 78.416148) (xy 199.681147 78.460686)
+ (xy 199.460768 78.549725) (xy 199.261882 78.679872) (xy 199.092062 78.846172) (xy 198.957778 79.04229) (xy 198.864143 79.260755)
+ (xy 198.814726 79.493246) (xy 198.811407 79.730908) (xy 198.854314 79.964689) (xy 198.941812 80.185683) (xy 199.070568 80.385474)
+ (xy 199.235678 80.55645) (xy 199.430853 80.6921) (xy 199.648659 80.787257) (xy 199.8808 80.838297) (xy 200.118433 80.843275)
+ (xy 200.352508 80.802001) (xy 200.574108 80.716048) (xy 200.774792 80.58869) (xy 200.946917 80.424777) (xy 201.083927 80.230554)
+ (xy 201.180602 80.013418) (xy 201.233261 79.781639) (xy 201.237052 79.510157) (xy 201.191235 79.278767) (xy 202.084001 78.386)
+ (xy 202.117817 78.344831) (xy 202.15209 78.303986) (xy 202.153552 78.301327) (xy 202.155478 78.298982) (xy 202.180683 78.251977)
+ (xy 202.206341 78.205304) (xy 202.207257 78.202416) (xy 202.208693 78.199738) (xy 202.224295 78.148705) (xy 202.240391 78.097965)
+ (xy 202.240729 78.094953) (xy 202.241617 78.092048) (xy 202.247008 78.038979) (xy 202.252944 77.986056) (xy 202.252985 77.98013)
+ (xy 202.252997 77.980014) (xy 202.252987 77.979906) (xy 202.253 77.978) (xy 202.253 73.533) (xy 202.247795 73.479913)
+ (xy 202.243153 73.42686) (xy 202.242307 73.423949) (xy 202.242011 73.420927) (xy 202.226598 73.369877) (xy 202.211736 73.31872)
+ (xy 202.21034 73.316027) (xy 202.209463 73.313122) (xy 202.184414 73.266012) (xy 202.159912 73.218743) (xy 202.158023 73.216376)
+ (xy 202.156596 73.213693) (xy 202.122891 73.172368) (xy 202.089657 73.130735) (xy 202.085492 73.126512) (xy 202.085422 73.126426)
+ (xy 202.085342 73.12636) (xy 202.084 73.124999) (xy 201.576001 72.616999) (xy 201.534785 72.583144) (xy 201.493986 72.54891)
+ (xy 201.49133 72.54745) (xy 201.488983 72.545522) (xy 201.441956 72.520306) (xy 201.395304 72.494659) (xy 201.392416 72.493743)
+ (xy 201.389738 72.492307) (xy 201.338693 72.476701) (xy 201.287965 72.460609) (xy 201.284955 72.460271) (xy 201.282049 72.459383)
+ (xy 201.229018 72.453997) (xy 201.176056 72.448056) (xy 201.17012 72.448015) (xy 201.170014 72.448004) (xy 201.169915 72.448013)
+ (xy 201.168 72.448) (xy 196.723 72.448) (xy 196.669999 72.453197) (xy 196.616861 72.457846) (xy 196.613946 72.458693)
+ (xy 196.610927 72.458989) (xy 196.559893 72.474397) (xy 196.508721 72.489264) (xy 196.506029 72.490659) (xy 196.503122 72.491537)
+ (xy 196.456012 72.516586) (xy 196.408744 72.541087) (xy 196.406376 72.542978) (xy 196.403693 72.544404) (xy 196.362379 72.578099)
+ (xy 196.320736 72.611342) (xy 196.316512 72.615508) (xy 196.316426 72.615578) (xy 196.31636 72.615658) (xy 196.315 72.616999)
+ (xy 185.561998 83.37) (xy 179.436002 83.37) (xy 178.462001 82.395999) (xy 178.420785 82.362144) (xy 178.379986 82.32791)
+ (xy 178.37733 82.32645) (xy 178.374983 82.324522) (xy 178.327956 82.299306) (xy 178.281304 82.273659) (xy 178.278416 82.272743)
+ (xy 178.275738 82.271307) (xy 178.224693 82.255701) (xy 178.173965 82.239609) (xy 178.170955 82.239271) (xy 178.168049 82.238383)
+ (xy 178.115018 82.232997) (xy 178.062056 82.227056) (xy 178.05612 82.227015) (xy 178.056014 82.227004) (xy 178.055915 82.227013)
+ (xy 178.054 82.227) (xy 173.736 82.227) (xy 173.682957 82.232201) (xy 173.62986 82.236847) (xy 173.626949 82.237693)
+ (xy 173.623927 82.237989) (xy 173.572877 82.253402) (xy 173.52172 82.268264) (xy 173.519027 82.26966) (xy 173.516122 82.270537)
+ (xy 173.469051 82.295565) (xy 173.421743 82.320087) (xy 173.419373 82.321979) (xy 173.416693 82.323404) (xy 173.375395 82.357086)
+ (xy 173.333735 82.390343) (xy 173.329508 82.394511) (xy 173.329426 82.394578) (xy 173.329364 82.394653) (xy 173.327999 82.395999)
+ (xy 173.261188 82.46281) (xy 173.293261 82.321639) (xy 173.297052 82.050157) (xy 173.250885 81.816999) (xy 173.16031 81.597247)
+ (xy 173.028777 81.399274) (xy 172.861296 81.23062) (xy 172.664246 81.097708) (xy 172.445132 81.005601) (xy 172.212301 80.957808)
+ (xy 171.974622 80.956148) (xy 171.741147 81.000686) (xy 171.520768 81.089725) (xy 171.321882 81.219872) (xy 171.152062 81.386172)
+ (xy 171.017778 81.58229) (xy 170.924143 81.800755) (xy 170.874726 82.033246) (xy 170.871407 82.270908) (xy 170.914314 82.504689)
+ (xy 170.919702 82.518296) (xy 170.702998 82.735) (xy 170.619757 82.735) (xy 170.700602 82.553418) (xy 170.753261 82.321639)
+ (xy 170.757052 82.050157) (xy 170.710885 81.816999) (xy 170.62031 81.597247) (xy 170.539754 81.476) (xy 170.815 81.476)
+ (xy 170.868043 81.470799) (xy 170.92114 81.466153) (xy 170.924051 81.465307) (xy 170.927073 81.465011) (xy 170.978123 81.449598)
+ (xy 171.02928 81.434736) (xy 171.031973 81.43334) (xy 171.034878 81.432463) (xy 171.081949 81.407435) (xy 171.129257 81.382913)
+ (xy 171.131627 81.381021) (xy 171.134307 81.379596) (xy 171.175605 81.345914) (xy 171.217265 81.312657) (xy 171.221492 81.308489)
+ (xy 171.221574 81.308422) (xy 171.221636 81.308347) (xy 171.223001 81.307001) (xy 171.736601 80.793401) (xy 171.9408 80.838297)
+ (xy 172.178433 80.843275) (xy 172.412508 80.802001) (xy 172.634108 80.716048) (xy 172.834792 80.58869) (xy 173.006917 80.424777)
+ (xy 173.143927 80.230554) (xy 173.240602 80.013418) (xy 173.293261 79.781639) (xy 173.297052 79.510157) (xy 173.250885 79.276999)
+ (xy 173.16031 79.057247) (xy 173.028777 78.859274) (xy 172.861296 78.69062) (xy 172.664246 78.557708) (xy 172.445132 78.465601)
+ (xy 172.212301 78.417808) (xy 171.974622 78.416148) (xy 171.741147 78.460686) (xy 171.520768 78.549725) (xy 171.321882 78.679872)
+ (xy 171.152062 78.846172) (xy 171.017778 79.04229) (xy 170.924143 79.260755) (xy 170.874726 79.493246) (xy 170.871407 79.730908)
+ (xy 170.914314 79.964689) (xy 170.919702 79.978297) (xy 170.575998 80.322) (xy 170.539419 80.322) (xy 170.603927 80.230554)
+ (xy 170.700602 80.013418) (xy 170.753261 79.781639) (xy 170.757052 79.510157) (xy 170.710885 79.276999) (xy 170.62031 79.057247)
+ (xy 170.539754 78.936) (xy 170.815 78.936) (xy 170.868043 78.930799) (xy 170.92114 78.926153) (xy 170.924051 78.925307)
+ (xy 170.927073 78.925011) (xy 170.978123 78.909598) (xy 171.02928 78.894736) (xy 171.031973 78.89334) (xy 171.034878 78.892463)
+ (xy 171.081949 78.867435) (xy 171.129257 78.842913) (xy 171.131627 78.841021) (xy 171.134307 78.839596) (xy 171.175605 78.805914)
+ (xy 171.217265 78.772657) (xy 171.221492 78.768489) (xy 171.221574 78.768422) (xy 171.221636 78.768347) (xy 171.223001 78.767001)
+ (xy 171.736601 78.253401) (xy 171.9408 78.298297) (xy 172.178433 78.303275) (xy 172.412508 78.262001) (xy 172.634108 78.176048)
+ (xy 172.834792 78.04869) (xy 173.006917 77.884777) (xy 173.143927 77.690554) (xy 173.240602 77.473418) (xy 173.293261 77.241639)
+ (xy 173.297052 76.970157) (xy 173.250885 76.736999) (xy 173.16031 76.517247) (xy 173.028777 76.319274) (xy 172.861296 76.15062)
+ (xy 172.664246 76.017708) (xy 172.445132 75.925601) (xy 172.212301 75.877808) (xy 171.974622 75.876148) (xy 171.741147 75.920686)
+ (xy 171.520768 76.009725) (xy 171.321882 76.139872) (xy 171.152062 76.306172) (xy 171.017778 76.50229) (xy 170.924143 76.720755)
+ (xy 170.874726 76.953246) (xy 170.871407 77.190908) (xy 170.914314 77.424689) (xy 170.919702 77.438297) (xy 170.575998 77.782)
+ (xy 170.539419 77.782) (xy 170.603927 77.690554) (xy 170.700602 77.473418) (xy 170.753261 77.241639) (xy 170.757052 76.970157)
+ (xy 170.710885 76.736999) (xy 170.62031 76.517247) (xy 170.539754 76.396) (xy 170.815 76.396) (xy 170.868043 76.390799)
+ (xy 170.92114 76.386153) (xy 170.924051 76.385307) (xy 170.927073 76.385011) (xy 170.978123 76.369598) (xy 171.02928 76.354736)
+ (xy 171.031973 76.35334) (xy 171.034878 76.352463) (xy 171.081949 76.327435) (xy 171.129257 76.302913) (xy 171.131627 76.301021)
+ (xy 171.134307 76.299596) (xy 171.175605 76.265914) (xy 171.217265 76.232657) (xy 171.221492 76.228489) (xy 171.221574 76.228422)
+ (xy 171.221636 76.228347) (xy 171.223001 76.227001) (xy 171.736601 75.713401) (xy 171.9408 75.758297) (xy 172.178433 75.763275)
+ (xy 172.412508 75.722001) (xy 172.634108 75.636048) (xy 172.834792 75.50869) (xy 173.006917 75.344777) (xy 173.143927 75.150554)
+ (xy 173.240602 74.933418) (xy 173.284424 74.740534) (xy 185.413491 74.740534) (xy 185.440662 74.888575) (xy 185.49607 75.02852)
+ (xy 185.577605 75.155038) (xy 185.682161 75.263309) (xy 185.805756 75.34921) (xy 185.943682 75.409468) (xy 186.090685 75.441789)
+ (xy 186.241167 75.444941) (xy 186.389395 75.418804) (xy 186.529723 75.364375) (xy 186.656807 75.283725) (xy 186.765805 75.179927)
+ (xy 186.852567 75.056935) (xy 186.913786 74.919433) (xy 186.947133 74.772659) (xy 186.949533 74.600743) (xy 186.920298 74.453095)
+ (xy 186.862942 74.313937) (xy 186.779648 74.18857) (xy 186.67359 74.081769) (xy 186.548808 73.997603) (xy 186.410054 73.939276)
+ (xy 186.262614 73.909011) (xy 186.112103 73.90796) (xy 185.964254 73.936164) (xy 185.8247 73.992547) (xy 185.698754 74.074964)
+ (xy 185.591216 74.180273) (xy 185.50618 74.304465) (xy 185.446886 74.442808) (xy 185.415592 74.590034) (xy 185.413491 74.740534)
+ (xy 173.284424 74.740534) (xy 173.293261 74.701639) (xy 173.297052 74.430157) (xy 173.250885 74.196999) (xy 173.16031 73.977247)
+ (xy 173.028777 73.779274) (xy 172.861296 73.61062) (xy 172.664246 73.477708) (xy 172.445132 73.385601) (xy 172.212301 73.337808)
+ (xy 171.974622 73.336148) (xy 171.741147 73.380686) (xy 171.520768 73.469725) (xy 171.321882 73.599872) (xy 171.152062 73.766172)
+ (xy 171.017778 73.96229) (xy 170.924143 74.180755) (xy 170.874726 74.413246) (xy 170.871407 74.650908) (xy 170.914314 74.884689)
+ (xy 170.919702 74.898297) (xy 170.759177 75.058821) (xy 170.759177 73.787) (xy 170.753463 73.715339) (xy 170.715822 73.593795)
+ (xy 170.645811 73.487549) (xy 170.548972 73.405014) (xy 170.432974 73.352725) (xy 170.307 73.334823) (xy 168.783 73.334823)
+ (xy 168.711339 73.340537) (xy 168.589795 73.378178) (xy 168.483549 73.448189) (xy 168.401014 73.545028) (xy 168.348725 73.661026)
+ (xy 168.330823 73.787) (xy 168.330823 75.311) (xy 168.336537 75.382661) (xy 168.374178 75.504205) (xy 168.387927 75.525071)
+ (xy 164.479998 79.433) (xy 152.654 79.433) (xy 152.601003 79.438196) (xy 152.547861 79.442846) (xy 152.544946 79.443693)
+ (xy 152.541927 79.443989) (xy 152.490893 79.459397) (xy 152.439721 79.474264) (xy 152.437029 79.475659) (xy 152.434122 79.476537)
+ (xy 152.387012 79.501586) (xy 152.339744 79.526087) (xy 152.337376 79.527978) (xy 152.334693 79.529404) (xy 152.293379 79.563099)
+ (xy 152.251736 79.596342) (xy 152.247512 79.600508) (xy 152.247426 79.600578) (xy 152.24736 79.600658) (xy 152.246 79.601999)
+ (xy 149.451999 82.395999) (xy 149.418144 82.437215) (xy 149.38391 82.478014) (xy 149.38245 82.48067) (xy 149.380522 82.483017)
+ (xy 149.355306 82.530044) (xy 149.329659 82.576696) (xy 149.328743 82.579584) (xy 149.327307 82.582262) (xy 149.311701 82.633307)
+ (xy 149.295609 82.684035) (xy 149.295271 82.687045) (xy 149.294383 82.689951) (xy 149.288997 82.742982) (xy 149.283056 82.795944)
+ (xy 149.283015 82.80188) (xy 149.283004 82.801986) (xy 149.283013 82.802085) (xy 149.283 82.804) (xy 149.283 83.514014)
+ (xy 149.171458 83.623244) (xy 149.072351 83.767986) (xy 149.003246 83.929221) (xy 148.997894 83.9544) (xy 148.937953 83.942096)
+ (xy 148.762537 83.940871) (xy 148.590224 83.973742) (xy 148.427577 84.039455) (xy 148.280791 84.135509) (xy 148.155458 84.258244)
+ (xy 148.056351 84.402986) (xy 147.987246 84.564221) (xy 147.950774 84.735809) (xy 147.948324 84.911212) (xy 147.968474 85.021)
+ (xy 143.876001 85.021) (xy 142.267001 83.411999) (xy 142.225785 83.378144) (xy 142.184986 83.34391) (xy 142.18233 83.34245)
+ (xy 142.179983 83.340522) (xy 142.132956 83.315306) (xy 142.086304 83.289659) (xy 142.083416 83.288743) (xy 142.080738 83.287307)
+ (xy 142.029693 83.271701) (xy 141.978965 83.255609) (xy 141.975955 83.255271) (xy 141.973049 83.254383) (xy 141.920018 83.248997)
+ (xy 141.867056 83.243056) (xy 141.86112 83.243015) (xy 141.861014 83.243004) (xy 141.860915 83.243013) (xy 141.859 83.243)
+ (xy 138.872668 83.243) (xy 139.052792 83.12869) (xy 139.224917 82.964777) (xy 139.361927 82.770554) (xy 139.372859 82.746)
+ (xy 139.521648 82.746) (xy 139.625452 82.853492) (xy 139.769498 82.953607) (xy 139.930247 83.023836) (xy 140.101575 83.061505)
+ (xy 140.276957 83.065179) (xy 140.449713 83.034717) (xy 140.613261 82.971281) (xy 140.761374 82.877286) (xy 140.888408 82.756313)
+ (xy 140.989526 82.612969) (xy 141.060876 82.452714) (xy 141.09974 82.281653) (xy 141.102538 82.08129) (xy 141.068466 81.90921)
+ (xy 141.001618 81.747026) (xy 140.904542 81.600914) (xy 140.780935 81.476441) (xy 140.635504 81.378347) (xy 140.473791 81.310369)
+ (xy 140.301953 81.275096) (xy 140.126537 81.273871) (xy 139.954224 81.306742) (xy 139.791577 81.372455) (xy 139.644791 81.468509)
+ (xy 139.519458 81.591244) (xy 139.51894 81.592) (xy 139.374824 81.592) (xy 139.246777 81.399274) (xy 139.079296 81.23062)
+ (xy 138.882246 81.097708) (xy 138.663132 81.005601) (xy 138.430301 80.957808) (xy 138.192622 80.956148) (xy 137.959147 81.000686)
+ (xy 137.738768 81.089725) (xy 137.539882 81.219872) (xy 137.370062 81.386172) (xy 137.235778 81.58229) (xy 137.142143 81.800755)
+ (xy 137.092726 82.033246) (xy 137.089407 82.270908) (xy 137.132314 82.504689) (xy 137.219812 82.725683) (xy 137.348568 82.925474)
+ (xy 137.513678 83.09645) (xy 137.708853 83.2321) (xy 137.779785 83.263089) (xy 137.758893 83.269397) (xy 137.707721 83.284264)
+ (xy 137.705029 83.285659) (xy 137.702122 83.286537) (xy 137.655012 83.311586) (xy 137.607744 83.336087) (xy 137.605376 83.337978)
+ (xy 137.602693 83.339404) (xy 137.561379 83.373099) (xy 137.519736 83.406342) (xy 137.515512 83.410508) (xy 137.515426 83.410578)
+ (xy 137.51536 83.410658) (xy 137.514 83.411999) (xy 136.751999 84.173999) (xy 136.718144 84.215215) (xy 136.68391 84.256014)
+ (xy 136.68245 84.25867) (xy 136.680522 84.261017) (xy 136.655306 84.308044) (xy 136.629659 84.354696) (xy 136.628743 84.357584)
+ (xy 136.627307 84.360262) (xy 136.611701 84.411307) (xy 136.595609 84.462035) (xy 136.595271 84.465045) (xy 136.594383 84.467951)
+ (xy 136.588997 84.520982) (xy 136.583056 84.573944) (xy 136.583015 84.57988) (xy 136.583004 84.579986) (xy 136.583013 84.580085)
+ (xy 136.583 84.582) (xy 136.583 84.596891) (xy 136.567598 84.545877) (xy 136.552736 84.49472) (xy 136.55134 84.492027)
+ (xy 136.550463 84.489122) (xy 136.525435 84.442051) (xy 136.500913 84.394743) (xy 136.499021 84.392373) (xy 136.497596 84.389693)
+ (xy 136.463914 84.348395) (xy 136.430657 84.306735) (xy 136.426492 84.302512) (xy 136.426422 84.302426) (xy 136.426342 84.30236)
+ (xy 136.425 84.300999) (xy 136.171001 84.046999) (xy 136.129785 84.013144) (xy 136.088986 83.97891) (xy 136.08633 83.97745)
+ (xy 136.083983 83.975522) (xy 136.036956 83.950306) (xy 135.990304 83.924659) (xy 135.987416 83.923743) (xy 135.984738 83.922307)
+ (xy 135.933693 83.906701) (xy 135.882965 83.890609) (xy 135.879955 83.890271) (xy 135.877049 83.889383) (xy 135.824018 83.883997)
+ (xy 135.771056 83.878056) (xy 135.76512 83.878015) (xy 135.765014 83.878004) (xy 135.764915 83.878013) (xy 135.763 83.878)
+ (xy 127.366001 83.878) (xy 126.773001 83.284999) (xy 126.731785 83.251144) (xy 126.690986 83.21691) (xy 126.68833 83.21545)
+ (xy 126.685983 83.213522) (xy 126.638956 83.188306) (xy 126.592304 83.162659) (xy 126.589416 83.161743) (xy 126.586738 83.160307)
+ (xy 126.535693 83.144701) (xy 126.484965 83.128609) (xy 126.481955 83.128271) (xy 126.479049 83.127383) (xy 126.426018 83.121997)
+ (xy 126.373056 83.116056) (xy 126.36712 83.116015) (xy 126.367014 83.116004) (xy 126.366915 83.116013) (xy 126.365 83.116)
+ (xy 113.919 83.116) (xy 113.865957 83.121201) (xy 113.81286 83.125847) (xy 113.809949 83.126693) (xy 113.806927 83.126989)
+ (xy 113.755877 83.142402) (xy 113.70472 83.157264) (xy 113.702027 83.15866) (xy 113.699122 83.159537) (xy 113.652051 83.184565)
+ (xy 113.604743 83.209087) (xy 113.602373 83.210979) (xy 113.599693 83.212404) (xy 113.558395 83.246086) (xy 113.516735 83.279343)
+ (xy 113.512508 83.283511) (xy 113.512426 83.283578) (xy 113.512364 83.283653) (xy 113.510999 83.284999) (xy 111.523175 85.272823)
+ (xy 110.998 85.272823) (xy 110.926339 85.278537) (xy 110.804795 85.316178) (xy 110.698549 85.386189) (xy 110.616014 85.483028)
+ (xy 110.563725 85.599026) (xy 110.545823 85.725) (xy 110.545823 87.249) (xy 110.551537 87.320661) (xy 110.589178 87.442205)
+ (xy 110.659189 87.548451) (xy 110.756028 87.630986) (xy 110.872026 87.683275) (xy 110.998 87.701177) (xy 112.522 87.701177)
+ (xy 112.593661 87.695463) (xy 112.715205 87.657822) (xy 112.821451 87.587811) (xy 112.903986 87.490972) (xy 112.956275 87.374974)
+ (xy 112.974177 87.249) (xy 112.974177 86.588908) (xy 113.086407 86.588908) (xy 113.129314 86.822689) (xy 113.216812 87.043683)
+ (xy 113.345568 87.243474) (xy 113.510678 87.41445) (xy 113.705853 87.5501) (xy 113.923659 87.645257) (xy 114.1558 87.696297)
+ (xy 114.393433 87.701275) (xy 114.627508 87.660001) (xy 114.849108 87.574048) (xy 115.049792 87.44669) (xy 115.221917 87.282777)
+ (xy 115.358927 87.088554) (xy 115.455602 86.871418) (xy 115.508261 86.639639) (xy 115.512052 86.368157) (xy 115.465885 86.134999)
+ (xy 115.37531 85.915247) (xy 115.243777 85.717274) (xy 115.076296 85.54862) (xy 114.879246 85.415708) (xy 114.660132 85.323601)
+ (xy 114.427301 85.275808) (xy 114.189622 85.274148) (xy 113.956147 85.318686) (xy 113.735768 85.407725) (xy 113.536882 85.537872)
+ (xy 113.367062 85.704172) (xy 113.232778 85.90029) (xy 113.139143 86.118755) (xy 113.089726 86.351246) (xy 113.086407 86.588908)
+ (xy 112.974177 86.588908) (xy 112.974177 85.725) (xy 112.968463 85.653339) (xy 112.930822 85.531795) (xy 112.917073 85.510929)
+ (xy 114.158002 84.27) (xy 118.240999 84.27) (xy 114.649566 87.861432) (xy 114.427301 87.815808) (xy 114.189622 87.814148)
+ (xy 113.956147 87.858686) (xy 113.735768 87.947725) (xy 113.536882 88.077872) (xy 113.367062 88.244172) (xy 113.232778 88.44029)
+ (xy 113.139143 88.658755) (xy 113.089726 88.891246) (xy 113.086407 89.128908) (xy 113.129314 89.362689) (xy 113.216812 89.583683)
+ (xy 113.222816 89.593) (xy 112.834757 89.593) (xy 112.915602 89.411418) (xy 112.968261 89.179639) (xy 112.972052 88.908157)
+ (xy 112.925885 88.674999) (xy 112.83531 88.455247) (xy 112.703777 88.257274) (xy 112.536296 88.08862) (xy 112.339246 87.955708)
+ (xy 112.120132 87.863601) (xy 111.887301 87.815808) (xy 111.649622 87.814148) (xy 111.416147 87.858686) (xy 111.195768 87.947725)
+ (xy 110.996882 88.077872) (xy 110.827062 88.244172) (xy 110.692778 88.44029) (xy 110.599143 88.658755) (xy 110.549726 88.891246)
+ (xy 110.546407 89.128908) (xy 110.589314 89.362689) (xy 110.676812 89.583683) (xy 110.682816 89.593) (xy 110.236 89.593)
+ (xy 110.182957 89.598201) (xy 110.12986 89.602847) (xy 110.126949 89.603693) (xy 110.123927 89.603989) (xy 110.072877 89.619402)
+ (xy 110.02172 89.634264) (xy 110.019027 89.63566) (xy 110.016122 89.636537) (xy 109.969051 89.661565) (xy 109.921743 89.686087)
+ (xy 109.919373 89.687979) (xy 109.916693 89.689404) (xy 109.875395 89.723086) (xy 109.833735 89.756343) (xy 109.829512 89.760508)
+ (xy 109.829426 89.760578) (xy 109.82936 89.760658) (xy 109.827999 89.762) (xy 107.541999 92.047999) (xy 107.508144 92.089215)
+ (xy 107.47391 92.130014) (xy 107.47245 92.13267) (xy 107.470522 92.135017) (xy 107.445306 92.182044) (xy 107.419659 92.228696)
+ (xy 107.418743 92.231584) (xy 107.417307 92.234262) (xy 107.401701 92.285307) (xy 107.385609 92.336035) (xy 107.385271 92.339045)
+ (xy 107.384383 92.341951) (xy 107.378997 92.394982) (xy 107.373056 92.447944) (xy 107.373015 92.45388) (xy 107.373004 92.453986)
+ (xy 107.373013 92.454085) (xy 107.373 92.456) (xy 107.373 95.518999) (xy 103.056006 99.835992) (xy 102.963953 99.817096)
+ (xy 102.788537 99.815871) (xy 102.616224 99.848742) (xy 102.453577 99.914455) (xy 102.306791 100.010509) (xy 102.181458 100.133244)
+ (xy 102.082351 100.277986) (xy 102.013246 100.439221) (xy 101.976774 100.610809) (xy 101.974324 100.786212) (xy 102.005991 100.958751)
+ (xy 102.070568 101.121852) (xy 102.165594 101.269305) (xy 102.287452 101.395492) (xy 102.431498 101.495607) (xy 102.592247 101.565836)
+ (xy 102.763575 101.603505) (xy 102.938957 101.607179) (xy 103.111713 101.576717) (xy 103.246446 101.524457) (xy 103.244491 101.664534)
+ (xy 103.271662 101.812575) (xy 103.32707 101.95252) (xy 103.386731 102.045097) (xy 103.33718 102.117465) (xy 103.277886 102.255808)
+ (xy 103.246592 102.403034) (xy 103.244491 102.553534) (xy 103.271662 102.701575) (xy 103.32707 102.84152) (xy 103.386731 102.934097)
+ (xy 103.33718 103.006465) (xy 103.277886 103.144808) (xy 103.246592 103.292034) (xy 103.244491 103.442534) (xy 103.266601 103.563)
+ (xy 76.2 103.563) (xy 76.146957 103.568201) (xy 76.09386 103.572847) (xy 76.090949 103.573693) (xy 76.087927 103.573989)
+ (xy 76.036877 103.589402) (xy 75.98572 103.604264) (xy 75.983027 103.60566) (xy 75.980122 103.606537) (xy 75.933051 103.631565)
+ (xy 75.885743 103.656087) (xy 75.883373 103.657979) (xy 75.880693 103.659404) (xy 75.839395 103.693086) (xy 75.797735 103.726343)
+ (xy 75.793512 103.730508) (xy 75.793426 103.730578) (xy 75.79336 103.730658) (xy 75.791999 103.732) (xy 74.521999 105.001999)
+ (xy 74.488144 105.043215) (xy 74.45391 105.084014) (xy 74.45245 105.08667) (xy 74.450522 105.089017) (xy 74.425306 105.136044)
+ (xy 74.399659 105.182696) (xy 74.398743 105.185584) (xy 74.397307 105.188262) (xy 74.381701 105.239307) (xy 74.365609 105.290035)
+ (xy 74.365271 105.293045) (xy 74.364383 105.295951) (xy 74.358997 105.348982) (xy 74.353056 105.401944) (xy 74.353015 105.40788)
+ (xy 74.353004 105.407986) (xy 74.353013 105.408085) (xy 74.353 105.41) (xy 74.353 112.522) (xy 74.358201 112.575043)
+ (xy 74.362847 112.62814) (xy 74.363693 112.631051) (xy 74.363989 112.634073) (xy 74.379402 112.685123) (xy 74.394264 112.73628)
+ (xy 74.39566 112.738973) (xy 74.396537 112.741878) (xy 74.421565 112.788949) (xy 74.446087 112.836257) (xy 74.447979 112.838627)
+ (xy 74.449404 112.841307) (xy 74.483086 112.882605) (xy 74.516343 112.924265) (xy 74.520511 112.928492) (xy 74.520578 112.928574)
+ (xy 74.520653 112.928636) (xy 74.521999 112.930001) (xy 75.162043 113.570044) (xy 75.116726 113.783246) (xy 75.113407 114.020908)
+ (xy 75.156314 114.254689) (xy 75.243812 114.475683) (xy 75.372568 114.675474) (xy 75.537678 114.84645) (xy 75.732853 114.9821)
+ (xy 75.950659 115.077257) (xy 76.1828 115.128297) (xy 76.420433 115.133275) (xy 76.654508 115.092001) (xy 76.876108 115.006048)
+ (xy 77.02 114.914731) (xy 77.02 115.189) (xy 77.025201 115.242043) (xy 77.029847 115.29514) (xy 77.030693 115.298051)
+ (xy 77.030989 115.301073) (xy 77.046402 115.352123) (xy 77.061264 115.40328) (xy 77.06266 115.405973) (xy 77.063537 115.408878)
+ (xy 77.088565 115.455949) (xy 77.113087 115.503257) (xy 77.114979 115.505627) (xy 77.116404 115.508307) (xy 77.150086 115.549605)
+ (xy 77.183343 115.591265) (xy 77.187511 115.595492) (xy 77.187578 115.595574) (xy 77.187653 115.595636) (xy 77.188999 115.597001)
+ (xy 77.702043 116.110045) (xy 77.656726 116.323246) (xy 77.653407 116.560908) (xy 77.696314 116.794689) (xy 77.783812 117.015683)
+ (xy 77.871662 117.152) (xy 77.321419 117.152) (xy 77.385927 117.060554) (xy 77.482602 116.843418) (xy 77.535261 116.611639)
+ (xy 77.539052 116.340157) (xy 77.492885 116.106999) (xy 77.40231 115.887247) (xy 77.270777 115.689274) (xy 77.103296 115.52062)
+ (xy 76.906246 115.387708) (xy 76.687132 115.295601) (xy 76.454301 115.247808) (xy 76.216622 115.246148) (xy 75.983147 115.290686)
+ (xy 75.762768 115.379725) (xy 75.563882 115.509872) (xy 75.394062 115.676172) (xy 75.259778 115.87229) (xy 75.166143 116.090755)
+ (xy 75.116726 116.323246) (xy 75.113407 116.560908) (xy 75.156314 116.794689) (xy 75.243812 117.015683) (xy 75.337679 117.161337)
+ (xy 75.331861 117.161846) (xy 75.328946 117.162693) (xy 75.325927 117.162989) (xy 75.274893 117.178397) (xy 75.223721 117.193264)
+ (xy 75.221029 117.194659) (xy 75.218122 117.195537) (xy 75.171012 117.220586) (xy 75.123744 117.245087) (xy 75.121376 117.246978)
+ (xy 75.118693 117.248404) (xy 75.077379 117.282099) (xy 75.035736 117.315342) (xy 75.031512 117.319508) (xy 75.031426 117.319578)
+ (xy 75.03136 117.319658) (xy 75.03 117.320999) (xy 74.267999 118.082999) (xy 74.234144 118.124215) (xy 74.19991 118.165014)
+ (xy 74.19845 118.16767) (xy 74.196522 118.170017) (xy 74.171306 118.217044) (xy 74.145659 118.263696) (xy 74.144743 118.266584)
+ (xy 74.143307 118.269262) (xy 74.127701 118.320307) (xy 74.111609 118.371035) (xy 74.111271 118.374045) (xy 74.110383 118.376951)
+ (xy 74.104997 118.429982) (xy 74.099056 118.482944) (xy 74.099015 118.48888) (xy 74.099004 118.488986) (xy 74.099013 118.489085)
+ (xy 74.099 118.491) (xy 71.85 118.491) (xy 71.85 102.320891) (xy 83.559157 102.320891) (xy 83.59532 102.517926)
+ (xy 83.669065 102.704185) (xy 83.777583 102.872573) (xy 83.916742 103.016676) (xy 84.08124 103.131005) (xy 84.264812 103.211205)
+ (xy 84.460465 103.254222) (xy 84.660748 103.258418) (xy 84.858031 103.223631) (xy 85.0448 103.151188) (xy 85.213941 103.043848)
+ (xy 85.359012 102.905699) (xy 85.474487 102.742003) (xy 85.555967 102.558996) (xy 85.600349 102.363647) (xy 85.603544 102.134837)
+ (xy 85.564634 101.938325) (xy 85.488295 101.753114) (xy 85.377436 101.586258) (xy 85.236279 101.444112) (xy 85.070201 101.332091)
+ (xy 84.885527 101.254461) (xy 84.689293 101.21418) (xy 84.488971 101.212781) (xy 84.292193 101.250319) (xy 84.106453 101.325363)
+ (xy 83.938827 101.435054) (xy 83.795699 101.575215) (xy 83.682521 101.740507) (xy 83.603604 101.924635) (xy 83.561954 102.120583)
+ (xy 83.559157 102.320891) (xy 71.85 102.320891) (xy 71.85 99.441) (xy 87.558823 99.441) (xy 87.558823 101.219)
+ (xy 87.564537 101.290661) (xy 87.602178 101.412205) (xy 87.672189 101.518451) (xy 87.769028 101.600986) (xy 87.885026 101.653275)
+ (xy 88.011 101.671177) (xy 89.789 101.671177) (xy 89.860661 101.665463) (xy 89.982205 101.627822) (xy 90.088451 101.557811)
+ (xy 90.170986 101.460972) (xy 90.223275 101.344974) (xy 90.241177 101.219) (xy 90.241177 100.669891) (xy 97.275157 100.669891)
+ (xy 97.31132 100.866926) (xy 97.385065 101.053185) (xy 97.493583 101.221573) (xy 97.632742 101.365676) (xy 97.79724 101.480005)
+ (xy 97.980812 101.560205) (xy 98.176465 101.603222) (xy 98.376748 101.607418) (xy 98.574031 101.572631) (xy 98.7608 101.500188)
+ (xy 98.929941 101.392848) (xy 99.075012 101.254699) (xy 99.190487 101.091003) (xy 99.271967 100.907996) (xy 99.316349 100.712647)
+ (xy 99.319544 100.483837) (xy 99.280634 100.287325) (xy 99.204295 100.102114) (xy 99.093436 99.935258) (xy 98.952279 99.793112)
+ (xy 98.786201 99.681091) (xy 98.601527 99.603461) (xy 98.405293 99.56318) (xy 98.204971 99.561781) (xy 98.008193 99.599319)
+ (xy 97.822453 99.674363) (xy 97.654827 99.784054) (xy 97.511699 99.924215) (xy 97.398521 100.089507) (xy 97.319604 100.273635)
+ (xy 97.277954 100.469583) (xy 97.275157 100.669891) (xy 90.241177 100.669891) (xy 90.241177 99.441) (xy 90.235463 99.369339)
+ (xy 90.197822 99.247795) (xy 90.127811 99.141549) (xy 90.030972 99.059014) (xy 89.914974 99.006725) (xy 89.789 98.988823)
+ (xy 88.011 98.988823) (xy 87.939339 98.994537) (xy 87.817795 99.032178) (xy 87.711549 99.102189) (xy 87.629014 99.199028)
+ (xy 87.576725 99.315026) (xy 87.558823 99.441) (xy 71.85 99.441) (xy 71.85 96.193271) (xy 88.014004 96.193271)
+ (xy 88.09441 96.427703) (xy 88.339647 96.562237) (xy 88.606418 96.646341) (xy 88.884472 96.676786) (xy 89.163122 96.6524)
+ (xy 89.431661 96.574121) (xy 89.679768 96.444956) (xy 89.70559 96.427703) (xy 89.785996 96.193271) (xy 88.9 95.307276)
+ (xy 88.014004 96.193271) (xy 71.85 96.193271) (xy 71.85 95.234472) (xy 87.473214 95.234472) (xy 87.4976 95.513122)
+ (xy 87.575879 95.781661) (xy 87.705044 96.029768) (xy 87.722297 96.05559) (xy 87.956729 96.135996) (xy 88.842724 95.25)
+ (xy 88.957276 95.25) (xy 89.843271 96.135996) (xy 90.077703 96.05559) (xy 90.212237 95.810353) (xy 90.296341 95.543582)
+ (xy 90.326786 95.265528) (xy 90.303199 94.996) (xy 96.575823 94.996) (xy 96.575823 96.52) (xy 96.581537 96.591661)
+ (xy 96.619178 96.713205) (xy 96.689189 96.819451) (xy 96.786028 96.901986) (xy 96.902026 96.954275) (xy 97.028 96.972177)
+ (xy 98.552 96.972177) (xy 98.623661 96.966463) (xy 98.745205 96.928822) (xy 98.851451 96.858811) (xy 98.933986 96.761972)
+ (xy 98.986275 96.645974) (xy 99.004177 96.52) (xy 99.004177 95.843891) (xy 99.434157 95.843891) (xy 99.47032 96.040926)
+ (xy 99.544065 96.227185) (xy 99.652583 96.395573) (xy 99.791742 96.539676) (xy 99.95624 96.654005) (xy 100.139812 96.734205)
+ (xy 100.335465 96.777222) (xy 100.535748 96.781418) (xy 100.733031 96.746631) (xy 100.9198 96.674188) (xy 101.088941 96.566848)
+ (xy 101.234012 96.428699) (xy 101.349487 96.265003) (xy 101.430967 96.081996) (xy 101.475349 95.886647) (xy 101.478544 95.657837)
+ (xy 101.439634 95.461325) (xy 101.363295 95.276114) (xy 101.252436 95.109258) (xy 101.111279 94.967112) (xy 100.945201 94.855091)
+ (xy 100.760527 94.777461) (xy 100.564293 94.73718) (xy 100.363971 94.735781) (xy 100.167193 94.773319) (xy 99.981453 94.848363)
+ (xy 99.813827 94.958054) (xy 99.670699 95.098215) (xy 99.557521 95.263507) (xy 99.478604 95.447635) (xy 99.436954 95.643583)
+ (xy 99.434157 95.843891) (xy 99.004177 95.843891) (xy 99.004177 94.996) (xy 98.998463 94.924339) (xy 98.960822 94.802795)
+ (xy 98.890811 94.696549) (xy 98.793972 94.614014) (xy 98.677974 94.561725) (xy 98.552 94.543823) (xy 97.028 94.543823)
+ (xy 96.956339 94.549537) (xy 96.834795 94.587178) (xy 96.728549 94.657189) (xy 96.646014 94.754028) (xy 96.593725 94.870026)
+ (xy 96.575823 94.996) (xy 90.303199 94.996) (xy 90.3024 94.986878) (xy 90.224121 94.718339) (xy 90.094956 94.470232)
+ (xy 90.077703 94.44441) (xy 89.843271 94.364004) (xy 88.957276 95.25) (xy 88.842724 95.25) (xy 87.956729 94.364004)
+ (xy 87.722297 94.44441) (xy 87.587763 94.689647) (xy 87.503659 94.956418) (xy 87.473214 95.234472) (xy 71.85 95.234472)
+ (xy 71.85 94.306729) (xy 88.014004 94.306729) (xy 88.9 95.192724) (xy 89.785996 94.306729) (xy 89.70559 94.072297)
+ (xy 89.460353 93.937763) (xy 89.193582 93.853659) (xy 88.915528 93.823214) (xy 88.636878 93.8476) (xy 88.368339 93.925879)
+ (xy 88.120232 94.055044) (xy 88.09441 94.072297) (xy 88.014004 94.306729) (xy 71.85 94.306729) (xy 71.85 93.319908)
+ (xy 96.576407 93.319908) (xy 96.619314 93.553689) (xy 96.706812 93.774683) (xy 96.835568 93.974474) (xy 97.000678 94.14545)
+ (xy 97.195853 94.2811) (xy 97.413659 94.376257) (xy 97.6458 94.427297) (xy 97.883433 94.432275) (xy 98.117508 94.391001)
+ (xy 98.339108 94.305048) (xy 98.539792 94.17769) (xy 98.711917 94.013777) (xy 98.848927 93.819554) (xy 98.945602 93.602418)
+ (xy 98.998261 93.370639) (xy 99.002052 93.099157) (xy 98.955885 92.865999) (xy 98.86531 92.646247) (xy 98.733777 92.448274)
+ (xy 98.566296 92.27962) (xy 98.369246 92.146708) (xy 98.150132 92.054601) (xy 97.917301 92.006808) (xy 97.679622 92.005148)
+ (xy 97.446147 92.049686) (xy 97.225768 92.138725) (xy 97.026882 92.268872) (xy 96.857062 92.435172) (xy 96.722778 92.63129)
+ (xy 96.629143 92.849755) (xy 96.579726 93.082246) (xy 96.576407 93.319908) (xy 71.85 93.319908) (xy 71.85 86.741)
+ (xy 87.558823 86.741) (xy 87.558823 88.519) (xy 87.564537 88.590661) (xy 87.602178 88.712205) (xy 87.672189 88.818451)
+ (xy 87.769028 88.900986) (xy 87.885026 88.953275) (xy 88.011 88.971177) (xy 89.789 88.971177) (xy 89.860661 88.965463)
+ (xy 89.982205 88.927822) (xy 90.088451 88.857811) (xy 90.170986 88.760972) (xy 90.223275 88.644974) (xy 90.241177 88.519)
+ (xy 90.241177 87.842891) (xy 96.132157 87.842891) (xy 96.16832 88.039926) (xy 96.242065 88.226185) (xy 96.350583 88.394573)
+ (xy 96.489742 88.538676) (xy 96.65424 88.653005) (xy 96.837812 88.733205) (xy 97.033465 88.776222) (xy 97.233748 88.780418)
+ (xy 97.431031 88.745631) (xy 97.6178 88.673188) (xy 97.786941 88.565848) (xy 97.932012 88.427699) (xy 98.047487 88.264003)
+ (xy 98.128967 88.080996) (xy 98.173349 87.885647) (xy 98.176544 87.656837) (xy 98.137634 87.460325) (xy 98.061295 87.275114)
+ (xy 97.950436 87.108258) (xy 97.809279 86.966112) (xy 97.643201 86.854091) (xy 97.458527 86.776461) (xy 97.262293 86.73618)
+ (xy 97.061971 86.734781) (xy 96.865193 86.772319) (xy 96.679453 86.847363) (xy 96.511827 86.957054) (xy 96.368699 87.097215)
+ (xy 96.255521 87.262507) (xy 96.176604 87.446635) (xy 96.134954 87.642583) (xy 96.132157 87.842891) (xy 90.241177 87.842891)
+ (xy 90.241177 86.741) (xy 90.235463 86.669339) (xy 90.197822 86.547795) (xy 90.127811 86.441549) (xy 90.030972 86.359014)
+ (xy 89.914974 86.306725) (xy 89.789 86.288823) (xy 88.011 86.288823) (xy 87.939339 86.294537) (xy 87.817795 86.332178)
+ (xy 87.711549 86.402189) (xy 87.629014 86.499028) (xy 87.576725 86.615026) (xy 87.558823 86.741) (xy 71.85 86.741)
+ (xy 71.85 84.667891) (xy 102.101157 84.667891) (xy 102.13732 84.864926) (xy 102.211065 85.051185) (xy 102.319583 85.219573)
+ (xy 102.458742 85.363676) (xy 102.62324 85.478005) (xy 102.806812 85.558205) (xy 103.002465 85.601222) (xy 103.202748 85.605418)
+ (xy 103.400031 85.570631) (xy 103.5868 85.498188) (xy 103.755941 85.390848) (xy 103.901012 85.252699) (xy 104.016487 85.089003)
+ (xy 104.097967 84.905996) (xy 104.142349 84.710647) (xy 104.145544 84.481837) (xy 104.106634 84.285325) (xy 104.030295 84.100114)
+ (xy 103.919436 83.933258) (xy 103.778279 83.791112) (xy 103.612201 83.679091) (xy 103.427527 83.601461) (xy 103.231293 83.56118)
+ (xy 103.030971 83.559781) (xy 102.834193 83.597319) (xy 102.648453 83.672363) (xy 102.480827 83.782054) (xy 102.337699 83.922215)
+ (xy 102.224521 84.087507) (xy 102.145604 84.271635) (xy 102.103954 84.467583) (xy 102.101157 84.667891) (xy 71.85 84.667891)
+ (xy 71.85 83.493271) (xy 88.014004 83.493271) (xy 88.09441 83.727703) (xy 88.339647 83.862237) (xy 88.606418 83.946341)
+ (xy 88.884472 83.976786) (xy 89.163122 83.9524) (xy 89.431661 83.874121) (xy 89.679768 83.744956) (xy 89.70559 83.727703)
+ (xy 89.785996 83.493271) (xy 88.9 82.607276) (xy 88.014004 83.493271) (xy 71.85 83.493271) (xy 71.85 82.534472)
+ (xy 87.473214 82.534472) (xy 87.4976 82.813122) (xy 87.575879 83.081661) (xy 87.705044 83.329768) (xy 87.722297 83.35559)
+ (xy 87.956729 83.435996) (xy 88.842724 82.55) (xy 88.957276 82.55) (xy 89.843271 83.435996) (xy 90.077703 83.35559)
+ (xy 90.124167 83.270891) (xy 106.800157 83.270891) (xy 106.83632 83.467926) (xy 106.910065 83.654185) (xy 107.018583 83.822573)
+ (xy 107.157742 83.966676) (xy 107.32224 84.081005) (xy 107.505812 84.161205) (xy 107.701465 84.204222) (xy 107.901748 84.208418)
+ (xy 108.099031 84.173631) (xy 108.2858 84.101188) (xy 108.454941 83.993848) (xy 108.600012 83.855699) (xy 108.715487 83.692003)
+ (xy 108.796967 83.508996) (xy 108.841349 83.313647) (xy 108.844544 83.084837) (xy 108.805634 82.888325) (xy 108.729295 82.703114)
+ (xy 108.677537 82.625212) (xy 133.470324 82.625212) (xy 133.501991 82.797751) (xy 133.566568 82.960852) (xy 133.661594 83.108305)
+ (xy 133.783452 83.234492) (xy 133.927498 83.334607) (xy 134.088247 83.404836) (xy 134.259575 83.442505) (xy 134.434957 83.446179)
+ (xy 134.607713 83.415717) (xy 134.771261 83.352281) (xy 134.919374 83.258286) (xy 135.040528 83.142912) (xy 135.168853 83.2321)
+ (xy 135.386659 83.327257) (xy 135.6188 83.378297) (xy 135.856433 83.383275) (xy 136.090508 83.342001) (xy 136.312108 83.256048)
+ (xy 136.512792 83.12869) (xy 136.684917 82.964777) (xy 136.821927 82.770554) (xy 136.918602 82.553418) (xy 136.971261 82.321639)
+ (xy 136.975052 82.050157) (xy 136.928885 81.816999) (xy 136.83831 81.597247) (xy 136.757754 81.476) (xy 137.033 81.476)
+ (xy 137.086043 81.470799) (xy 137.13914 81.466153) (xy 137.142051 81.465307) (xy 137.145073 81.465011) (xy 137.196123 81.449598)
+ (xy 137.24728 81.434736) (xy 137.249973 81.43334) (xy 137.252878 81.432463) (xy 137.299949 81.407435) (xy 137.347257 81.382913)
+ (xy 137.349627 81.381021) (xy 137.352307 81.379596) (xy 137.393605 81.345914) (xy 137.435265 81.312657) (xy 137.439492 81.308489)
+ (xy 137.439574 81.308422) (xy 137.439636 81.308347) (xy 137.441001 81.307001) (xy 137.954601 80.793401) (xy 138.1588 80.838297)
+ (xy 138.396433 80.843275) (xy 138.630508 80.802001) (xy 138.852108 80.716048) (xy 139.052792 80.58869) (xy 139.224917 80.424777)
+ (xy 139.361927 80.230554) (xy 139.458602 80.013418) (xy 139.511261 79.781639) (xy 139.515052 79.510157) (xy 139.468885 79.276999)
+ (xy 139.37831 79.057247) (xy 139.246777 78.859274) (xy 139.079296 78.69062) (xy 138.882246 78.557708) (xy 138.663132 78.465601)
+ (xy 138.430301 78.417808) (xy 138.192622 78.416148) (xy 137.959147 78.460686) (xy 137.738768 78.549725) (xy 137.539882 78.679872)
+ (xy 137.370062 78.846172) (xy 137.235778 79.04229) (xy 137.142143 79.260755) (xy 137.092726 79.493246) (xy 137.089407 79.730908)
+ (xy 137.132314 79.964689) (xy 137.137702 79.978297) (xy 136.793998 80.322) (xy 136.757419 80.322) (xy 136.821927 80.230554)
+ (xy 136.918602 80.013418) (xy 136.971261 79.781639) (xy 136.975052 79.510157) (xy 136.928885 79.276999) (xy 136.83831 79.057247)
+ (xy 136.706777 78.859274) (xy 136.539296 78.69062) (xy 136.342246 78.557708) (xy 136.123132 78.465601) (xy 135.890301 78.417808)
+ (xy 135.652622 78.416148) (xy 135.419147 78.460686) (xy 135.198768 78.549725) (xy 134.999882 78.679872) (xy 134.830062 78.846172)
+ (xy 134.695778 79.04229) (xy 134.602143 79.260755) (xy 134.552726 79.493246) (xy 134.549407 79.730908) (xy 134.592314 79.964689)
+ (xy 134.679812 80.185683) (xy 134.808568 80.385474) (xy 134.829352 80.406997) (xy 134.813744 80.415087) (xy 134.811376 80.416978)
+ (xy 134.808693 80.418404) (xy 134.767379 80.452099) (xy 134.725736 80.485342) (xy 134.721512 80.489508) (xy 134.721426 80.489578)
+ (xy 134.72136 80.489658) (xy 134.72 80.490999) (xy 133.957999 81.252999) (xy 133.924144 81.294215) (xy 133.88991 81.335014)
+ (xy 133.88845 81.33767) (xy 133.886522 81.340017) (xy 133.861306 81.387044) (xy 133.835659 81.433696) (xy 133.834743 81.436584)
+ (xy 133.833307 81.439262) (xy 133.817701 81.490307) (xy 133.801609 81.541035) (xy 133.801271 81.544045) (xy 133.800383 81.546951)
+ (xy 133.794997 81.599982) (xy 133.789056 81.652944) (xy 133.789015 81.65888) (xy 133.789004 81.658986) (xy 133.789013 81.659085)
+ (xy 133.789 81.661) (xy 133.789 81.863014) (xy 133.677458 81.972244) (xy 133.578351 82.116986) (xy 133.509246 82.278221)
+ (xy 133.472774 82.449809) (xy 133.470324 82.625212) (xy 108.677537 82.625212) (xy 108.618436 82.536258) (xy 108.477279 82.394112)
+ (xy 108.311201 82.282091) (xy 108.126527 82.204461) (xy 107.930293 82.16418) (xy 107.729971 82.162781) (xy 107.533193 82.200319)
+ (xy 107.347453 82.275363) (xy 107.179827 82.385054) (xy 107.036699 82.525215) (xy 106.923521 82.690507) (xy 106.844604 82.874635)
+ (xy 106.802954 83.070583) (xy 106.800157 83.270891) (xy 90.124167 83.270891) (xy 90.212237 83.110353) (xy 90.296341 82.843582)
+ (xy 90.326786 82.565528) (xy 90.3024 82.286878) (xy 90.224121 82.018339) (xy 90.094956 81.770232) (xy 90.077703 81.74441)
+ (xy 89.843271 81.664004) (xy 88.957276 82.55) (xy 88.842724 82.55) (xy 87.956729 81.664004) (xy 87.722297 81.74441)
+ (xy 87.587763 81.989647) (xy 87.503659 82.256418) (xy 87.473214 82.534472) (xy 71.85 82.534472) (xy 71.85 81.606729)
+ (xy 88.014004 81.606729) (xy 88.9 82.492724) (xy 89.785996 81.606729) (xy 89.70559 81.372297) (xy 89.460353 81.237763)
+ (xy 89.193582 81.153659) (xy 88.915528 81.123214) (xy 88.636878 81.1476) (xy 88.368339 81.225879) (xy 88.120232 81.355044)
+ (xy 88.09441 81.372297) (xy 88.014004 81.606729) (xy 71.85 81.606729) (xy 71.85 78.032271) (xy 79.886004 78.032271)
+ (xy 79.96641 78.266703) (xy 80.211647 78.401237) (xy 80.478418 78.485341) (xy 80.756472 78.515786) (xy 81.035122 78.4914)
+ (xy 81.303661 78.413121) (xy 81.551768 78.283956) (xy 81.57759 78.266703) (xy 81.657996 78.032271) (xy 80.772 77.146276)
+ (xy 79.886004 78.032271) (xy 71.85 78.032271) (xy 71.85 77.073472) (xy 79.345214 77.073472) (xy 79.3696 77.352122)
+ (xy 79.447879 77.620661) (xy 79.577044 77.868768) (xy 79.594297 77.89459) (xy 79.828729 77.974996) (xy 80.714724 77.089)
+ (xy 80.829276 77.089) (xy 81.715271 77.974996) (xy 81.949703 77.89459) (xy 82.084237 77.649353) (xy 82.168341 77.382582)
+ (xy 82.198786 77.104528) (xy 82.1744 76.825878) (xy 82.096121 76.557339) (xy 81.966956 76.309232) (xy 81.949703 76.28341)
+ (xy 81.715271 76.203004) (xy 80.829276 77.089) (xy 80.714724 77.089) (xy 79.828729 76.203004) (xy 79.594297 76.28341)
+ (xy 79.459763 76.528647) (xy 79.375659 76.795418) (xy 79.345214 77.073472) (xy 71.85 77.073472) (xy 71.85 76.145729)
+ (xy 79.886004 76.145729) (xy 80.772 77.031724) (xy 81.603724 76.2) (xy 92.130823 76.2) (xy 92.130823 77.978)
+ (xy 92.136537 78.049661) (xy 92.174178 78.171205) (xy 92.244189 78.277451) (xy 92.341028 78.359986) (xy 92.457026 78.412275)
+ (xy 92.583 78.430177) (xy 94.361 78.430177) (xy 94.432661 78.424463) (xy 94.554205 78.386822) (xy 94.660451 78.316811)
+ (xy 94.742986 78.219972) (xy 94.795275 78.103974) (xy 94.813177 77.978) (xy 94.813177 77.851) (xy 106.989823 77.851)
+ (xy 106.989823 79.375) (xy 106.995537 79.446661) (xy 107.033178 79.568205) (xy 107.103189 79.674451) (xy 107.200028 79.756986)
+ (xy 107.316026 79.809275) (xy 107.442 79.827177) (xy 108.966 79.827177) (xy 109.037661 79.821463) (xy 109.159205 79.783822)
+ (xy 109.265451 79.713811) (xy 109.347986 79.616972) (xy 109.400275 79.500974) (xy 109.418177 79.375) (xy 109.418177 78.78625)
+ (xy 109.451 78.78625) (xy 109.451 79.427299) (xy 109.471406 79.529887) (xy 109.511434 79.626523) (xy 109.569545 79.713493)
+ (xy 109.643507 79.787455) (xy 109.730477 79.845566) (xy 109.827113 79.885594) (xy 109.929701 79.906) (xy 110.57075 79.906)
+ (xy 110.7035 79.77325) (xy 110.7035 78.6535) (xy 110.7845 78.6535) (xy 110.7845 79.77325) (xy 110.91725 79.906)
+ (xy 111.558299 79.906) (xy 111.660887 79.885594) (xy 111.757523 79.845566) (xy 111.844493 79.787455) (xy 111.918455 79.713493)
+ (xy 111.976566 79.626523) (xy 112.016594 79.529887) (xy 112.037 79.427299) (xy 112.037 78.78625) (xy 111.90425 78.6535)
+ (xy 110.7845 78.6535) (xy 110.7035 78.6535) (xy 109.58375 78.6535) (xy 109.451 78.78625) (xy 109.418177 78.78625)
+ (xy 109.418177 77.851) (xy 109.414007 77.798701) (xy 109.451 77.798701) (xy 109.451 78.43975) (xy 109.58375 78.5725)
+ (xy 110.7035 78.5725) (xy 110.7035 77.45275) (xy 110.7845 77.45275) (xy 110.7845 78.5725) (xy 111.90425 78.5725)
+ (xy 112.037 78.43975) (xy 112.037 77.851) (xy 112.069823 77.851) (xy 112.069823 79.375) (xy 112.075537 79.446661)
+ (xy 112.113178 79.568205) (xy 112.183189 79.674451) (xy 112.280028 79.756986) (xy 112.396026 79.809275) (xy 112.522 79.827177)
+ (xy 114.046 79.827177) (xy 114.117661 79.821463) (xy 114.239205 79.783822) (xy 114.345451 79.713811) (xy 114.427986 79.616972)
+ (xy 114.480275 79.500974) (xy 114.498177 79.375) (xy 114.498177 77.851) (xy 114.492463 77.779339) (xy 114.454822 77.657795)
+ (xy 114.384811 77.551549) (xy 114.287972 77.469014) (xy 114.171974 77.416725) (xy 114.046 77.398823) (xy 112.522 77.398823)
+ (xy 112.450339 77.404537) (xy 112.328795 77.442178) (xy 112.222549 77.512189) (xy 112.140014 77.609028) (xy 112.087725 77.725026)
+ (xy 112.069823 77.851) (xy 112.037 77.851) (xy 112.037 77.798701) (xy 112.016594 77.696113) (xy 111.976566 77.599477)
+ (xy 111.918455 77.512507) (xy 111.844493 77.438545) (xy 111.757523 77.380434) (xy 111.660887 77.340406) (xy 111.558299 77.32)
+ (xy 110.91725 77.32) (xy 110.7845 77.45275) (xy 110.7035 77.45275) (xy 110.57075 77.32) (xy 109.929701 77.32)
+ (xy 109.827113 77.340406) (xy 109.730477 77.380434) (xy 109.643507 77.438545) (xy 109.569545 77.512507) (xy 109.511434 77.599477)
+ (xy 109.471406 77.696113) (xy 109.451 77.798701) (xy 109.414007 77.798701) (xy 109.412463 77.779339) (xy 109.374822 77.657795)
+ (xy 109.304811 77.551549) (xy 109.207972 77.469014) (xy 109.091974 77.416725) (xy 108.966 77.398823) (xy 107.442 77.398823)
+ (xy 107.370339 77.404537) (xy 107.248795 77.442178) (xy 107.142549 77.512189) (xy 107.060014 77.609028) (xy 107.007725 77.725026)
+ (xy 106.989823 77.851) (xy 94.813177 77.851) (xy 94.813177 76.2) (xy 94.811177 76.174908) (xy 106.990407 76.174908)
+ (xy 107.033314 76.408689) (xy 107.120812 76.629683) (xy 107.249568 76.829474) (xy 107.414678 77.00045) (xy 107.609853 77.1361)
+ (xy 107.827659 77.231257) (xy 108.0598 77.282297) (xy 108.297433 77.287275) (xy 108.531508 77.246001) (xy 108.753108 77.160048)
+ (xy 108.953792 77.03269) (xy 109.125917 76.868777) (xy 109.262927 76.674554) (xy 109.359602 76.457418) (xy 109.412261 76.225639)
+ (xy 109.412969 76.174908) (xy 109.530407 76.174908) (xy 109.573314 76.408689) (xy 109.660812 76.629683) (xy 109.789568 76.829474)
+ (xy 109.954678 77.00045) (xy 110.149853 77.1361) (xy 110.367659 77.231257) (xy 110.5998 77.282297) (xy 110.837433 77.287275)
+ (xy 111.071508 77.246001) (xy 111.293108 77.160048) (xy 111.493792 77.03269) (xy 111.665917 76.868777) (xy 111.802927 76.674554)
+ (xy 111.899602 76.457418) (xy 111.952261 76.225639) (xy 111.952969 76.174908) (xy 112.070407 76.174908) (xy 112.113314 76.408689)
+ (xy 112.200812 76.629683) (xy 112.329568 76.829474) (xy 112.494678 77.00045) (xy 112.689853 77.1361) (xy 112.907659 77.231257)
+ (xy 113.1398 77.282297) (xy 113.377433 77.287275) (xy 113.611508 77.246001) (xy 113.753546 77.190908) (xy 134.549407 77.190908)
+ (xy 134.592314 77.424689) (xy 134.679812 77.645683) (xy 134.808568 77.845474) (xy 134.973678 78.01645) (xy 135.168853 78.1521)
+ (xy 135.386659 78.247257) (xy 135.6188 78.298297) (xy 135.856433 78.303275) (xy 136.090508 78.262001) (xy 136.312108 78.176048)
+ (xy 136.512792 78.04869) (xy 136.684917 77.884777) (xy 136.821927 77.690554) (xy 136.918602 77.473418) (xy 136.971261 77.241639)
+ (xy 136.971969 77.190908) (xy 137.089407 77.190908) (xy 137.132314 77.424689) (xy 137.219812 77.645683) (xy 137.348568 77.845474)
+ (xy 137.513678 78.01645) (xy 137.708853 78.1521) (xy 137.926659 78.247257) (xy 138.1588 78.298297) (xy 138.396433 78.303275)
+ (xy 138.630508 78.262001) (xy 138.852108 78.176048) (xy 139.052792 78.04869) (xy 139.224917 77.884777) (xy 139.361927 77.690554)
+ (xy 139.458602 77.473418) (xy 139.511261 77.241639) (xy 139.515052 76.970157) (xy 139.468885 76.736999) (xy 139.37831 76.517247)
+ (xy 139.246777 76.319274) (xy 139.079296 76.15062) (xy 138.882246 76.017708) (xy 138.663132 75.925601) (xy 138.430301 75.877808)
+ (xy 138.192622 75.876148) (xy 137.959147 75.920686) (xy 137.738768 76.009725) (xy 137.539882 76.139872) (xy 137.370062 76.306172)
+ (xy 137.235778 76.50229) (xy 137.142143 76.720755) (xy 137.092726 76.953246) (xy 137.089407 77.190908) (xy 136.971969 77.190908)
+ (xy 136.975052 76.970157) (xy 136.928885 76.736999) (xy 136.83831 76.517247) (xy 136.706777 76.319274) (xy 136.539296 76.15062)
+ (xy 136.342246 76.017708) (xy 136.123132 75.925601) (xy 135.890301 75.877808) (xy 135.652622 75.876148) (xy 135.419147 75.920686)
+ (xy 135.198768 76.009725) (xy 134.999882 76.139872) (xy 134.830062 76.306172) (xy 134.695778 76.50229) (xy 134.602143 76.720755)
+ (xy 134.552726 76.953246) (xy 134.549407 77.190908) (xy 113.753546 77.190908) (xy 113.833108 77.160048) (xy 114.033792 77.03269)
+ (xy 114.205917 76.868777) (xy 114.342927 76.674554) (xy 114.439602 76.457418) (xy 114.492261 76.225639) (xy 114.496052 75.954157)
+ (xy 114.449885 75.720999) (xy 114.35931 75.501247) (xy 114.227777 75.303274) (xy 114.060296 75.13462) (xy 113.863246 75.001708)
+ (xy 113.644132 74.909601) (xy 113.411301 74.861808) (xy 113.173622 74.860148) (xy 112.940147 74.904686) (xy 112.719768 74.993725)
+ (xy 112.520882 75.123872) (xy 112.351062 75.290172) (xy 112.216778 75.48629) (xy 112.123143 75.704755) (xy 112.073726 75.937246)
+ (xy 112.070407 76.174908) (xy 111.952969 76.174908) (xy 111.956052 75.954157) (xy 111.909885 75.720999) (xy 111.81931 75.501247)
+ (xy 111.687777 75.303274) (xy 111.520296 75.13462) (xy 111.323246 75.001708) (xy 111.104132 74.909601) (xy 110.871301 74.861808)
+ (xy 110.633622 74.860148) (xy 110.400147 74.904686) (xy 110.179768 74.993725) (xy 109.980882 75.123872) (xy 109.811062 75.290172)
+ (xy 109.676778 75.48629) (xy 109.583143 75.704755) (xy 109.533726 75.937246) (xy 109.530407 76.174908) (xy 109.412969 76.174908)
+ (xy 109.416052 75.954157) (xy 109.369885 75.720999) (xy 109.27931 75.501247) (xy 109.147777 75.303274) (xy 108.980296 75.13462)
+ (xy 108.783246 75.001708) (xy 108.564132 74.909601) (xy 108.331301 74.861808) (xy 108.093622 74.860148) (xy 107.860147 74.904686)
+ (xy 107.639768 74.993725) (xy 107.440882 75.123872) (xy 107.271062 75.290172) (xy 107.136778 75.48629) (xy 107.043143 75.704755)
+ (xy 106.993726 75.937246) (xy 106.990407 76.174908) (xy 94.811177 76.174908) (xy 94.807463 76.128339) (xy 94.769822 76.006795)
+ (xy 94.699811 75.900549) (xy 94.602972 75.818014) (xy 94.486974 75.765725) (xy 94.361 75.747823) (xy 92.583 75.747823)
+ (xy 92.511339 75.753537) (xy 92.389795 75.791178) (xy 92.283549 75.861189) (xy 92.201014 75.958028) (xy 92.148725 76.074026)
+ (xy 92.130823 76.2) (xy 81.603724 76.2) (xy 81.657996 76.145729) (xy 81.57759 75.911297) (xy 81.332353 75.776763)
+ (xy 81.065582 75.692659) (xy 80.787528 75.662214) (xy 80.508878 75.6866) (xy 80.240339 75.764879) (xy 79.992232 75.894044)
+ (xy 79.96641 75.911297) (xy 79.886004 76.145729) (xy 71.85 76.145729) (xy 71.85 74.239085) (xy 74.281191 74.239085)
+ (xy 74.407308 74.512528) (xy 74.717315 74.685024) (xy 75.055018 74.793725) (xy 75.407437 74.834455) (xy 75.761032 74.805649)
+ (xy 76.102212 74.708413) (xy 76.417868 74.546486) (xy 76.468692 74.512528) (xy 76.594809 74.239085) (xy 75.438 73.082276)
+ (xy 74.281191 74.239085) (xy 71.85 74.239085) (xy 71.85 72.994437) (xy 73.628545 72.994437) (xy 73.657351 73.348032)
+ (xy 73.754587 73.689212) (xy 73.916514 74.004868) (xy 73.950472 74.055692) (xy 74.223915 74.181809) (xy 75.380724 73.025)
+ (xy 75.495276 73.025) (xy 76.652085 74.181809) (xy 76.925528 74.055692) (xy 77.098024 73.745685) (xy 77.206725 73.407982)
+ (xy 77.247455 73.055563) (xy 77.218649 72.701968) (xy 77.121413 72.360788) (xy 76.959486 72.045132) (xy 76.925528 71.994308)
+ (xy 76.652085 71.868191) (xy 75.495276 73.025) (xy 75.380724 73.025) (xy 74.223915 71.868191) (xy 73.950472 71.994308)
+ (xy 73.777976 72.304315) (xy 73.669275 72.642018) (xy 73.628545 72.994437) (xy 71.85 72.994437) (xy 71.85 71.810915)
+ (xy 74.281191 71.810915) (xy 75.438 72.967724) (xy 76.594809 71.810915) (xy 76.468692 71.537472) (xy 76.158685 71.364976)
+ (xy 75.820982 71.256275) (xy 75.468563 71.215545) (xy 75.114968 71.244351) (xy 74.773788 71.341587) (xy 74.458132 71.503514)
+ (xy 74.407308 71.537472) (xy 74.281191 71.810915) (xy 71.85 71.810915) (xy 71.85 66.675) (xy 73.715823 66.675)
+ (xy 73.715823 69.215) (xy 73.721537 69.286661) (xy 73.759178 69.408205) (xy 73.829189 69.514451) (xy 73.926028 69.596986)
+ (xy 74.042026 69.649275) (xy 74.168 69.667177) (xy 76.708 69.667177) (xy 76.779661 69.661463) (xy 76.901205 69.623822)
+ (xy 77.007451 69.553811) (xy 77.079734 69.469) (xy 79.811823 69.469) (xy 79.811823 73.279) (xy 79.817537 73.350661)
+ (xy 79.855178 73.472205) (xy 79.925189 73.578451) (xy 80.022028 73.660986) (xy 80.138026 73.713275) (xy 80.264 73.731177)
+ (xy 82.804 73.731177) (xy 82.875661 73.725463) (xy 82.997205 73.687822) (xy 83.103451 73.617811) (xy 83.185986 73.520972)
+ (xy 83.238275 73.404974) (xy 83.256177 73.279) (xy 83.256177 69.469) (xy 84.891823 69.469) (xy 84.891823 73.279)
+ (xy 84.897537 73.350661) (xy 84.935178 73.472205) (xy 85.005189 73.578451) (xy 85.102028 73.660986) (xy 85.218026 73.713275)
+ (xy 85.344 73.731177) (xy 87.884 73.731177) (xy 87.955661 73.725463) (xy 88.077205 73.687822) (xy 88.183451 73.617811)
+ (xy 88.265986 73.520972) (xy 88.318275 73.404974) (xy 88.336177 73.279) (xy 88.336177 69.469) (xy 89.971823 69.469)
+ (xy 89.971823 73.279) (xy 89.977537 73.350661) (xy 90.015178 73.472205) (xy 90.085189 73.578451) (xy 90.182028 73.660986)
+ (xy 90.298026 73.713275) (xy 90.424 73.731177) (xy 92.964 73.731177) (xy 93.035661 73.725463) (xy 93.157205 73.687822)
+ (xy 93.237505 73.634908) (xy 106.990407 73.634908) (xy 107.033314 73.868689) (xy 107.120812 74.089683) (xy 107.249568 74.289474)
+ (xy 107.414678 74.46045) (xy 107.609853 74.5961) (xy 107.827659 74.691257) (xy 108.0598 74.742297) (xy 108.297433 74.747275)
+ (xy 108.531508 74.706001) (xy 108.753108 74.620048) (xy 108.953792 74.49269) (xy 109.125917 74.328777) (xy 109.262927 74.134554)
+ (xy 109.359602 73.917418) (xy 109.412261 73.685639) (xy 109.412969 73.634908) (xy 109.530407 73.634908) (xy 109.573314 73.868689)
+ (xy 109.660812 74.089683) (xy 109.789568 74.289474) (xy 109.954678 74.46045) (xy 110.149853 74.5961) (xy 110.367659 74.691257)
+ (xy 110.5998 74.742297) (xy 110.837433 74.747275) (xy 111.071508 74.706001) (xy 111.293108 74.620048) (xy 111.493792 74.49269)
+ (xy 111.665917 74.328777) (xy 111.802927 74.134554) (xy 111.899602 73.917418) (xy 111.952261 73.685639) (xy 111.952969 73.634908)
+ (xy 112.070407 73.634908) (xy 112.113314 73.868689) (xy 112.200812 74.089683) (xy 112.329568 74.289474) (xy 112.494678 74.46045)
+ (xy 112.689853 74.5961) (xy 112.907659 74.691257) (xy 113.1398 74.742297) (xy 113.377433 74.747275) (xy 113.415662 74.740534)
+ (xy 124.453491 74.740534) (xy 124.480662 74.888575) (xy 124.53607 75.02852) (xy 124.617605 75.155038) (xy 124.722161 75.263309)
+ (xy 124.845756 75.34921) (xy 124.983682 75.409468) (xy 125.130685 75.441789) (xy 125.281167 75.444941) (xy 125.429395 75.418804)
+ (xy 125.569723 75.364375) (xy 125.696807 75.283725) (xy 125.805805 75.179927) (xy 125.892567 75.056935) (xy 125.953786 74.919433)
+ (xy 125.987133 74.772659) (xy 125.989533 74.600743) (xy 125.960298 74.453095) (xy 125.902942 74.313937) (xy 125.819648 74.18857)
+ (xy 125.71359 74.081769) (xy 125.588808 73.997603) (xy 125.450054 73.939276) (xy 125.302614 73.909011) (xy 125.152103 73.90796)
+ (xy 125.004254 73.936164) (xy 124.8647 73.992547) (xy 124.738754 74.074964) (xy 124.631216 74.180273) (xy 124.54618 74.304465)
+ (xy 124.486886 74.442808) (xy 124.455592 74.590034) (xy 124.453491 74.740534) (xy 113.415662 74.740534) (xy 113.611508 74.706001)
+ (xy 113.833108 74.620048) (xy 114.033792 74.49269) (xy 114.205917 74.328777) (xy 114.342927 74.134554) (xy 114.439602 73.917418)
+ (xy 114.469232 73.787) (xy 134.548823 73.787) (xy 134.548823 75.311) (xy 134.554537 75.382661) (xy 134.592178 75.504205)
+ (xy 134.662189 75.610451) (xy 134.759028 75.692986) (xy 134.875026 75.745275) (xy 135.001 75.763177) (xy 136.525 75.763177)
+ (xy 136.596661 75.757463) (xy 136.718205 75.719822) (xy 136.824451 75.649811) (xy 136.906986 75.552972) (xy 136.959275 75.436974)
+ (xy 136.977177 75.311) (xy 136.977177 74.650908) (xy 137.089407 74.650908) (xy 137.132314 74.884689) (xy 137.219812 75.105683)
+ (xy 137.348568 75.305474) (xy 137.513678 75.47645) (xy 137.708853 75.6121) (xy 137.926659 75.707257) (xy 138.1588 75.758297)
+ (xy 138.396433 75.763275) (xy 138.630508 75.722001) (xy 138.852108 75.636048) (xy 139.052792 75.50869) (xy 139.224917 75.344777)
+ (xy 139.361927 75.150554) (xy 139.458602 74.933418) (xy 139.497572 74.761891) (xy 145.027157 74.761891) (xy 145.06332 74.958926)
+ (xy 145.137065 75.145185) (xy 145.245583 75.313573) (xy 145.384742 75.457676) (xy 145.54924 75.572005) (xy 145.732812 75.652205)
+ (xy 145.928465 75.695222) (xy 146.128748 75.699418) (xy 146.326031 75.664631) (xy 146.5128 75.592188) (xy 146.681941 75.484848)
+ (xy 146.827012 75.346699) (xy 146.942487 75.183003) (xy 147.023967 74.999996) (xy 147.068349 74.804647) (xy 147.071544 74.575837)
+ (xy 147.032634 74.379325) (xy 146.956295 74.194114) (xy 146.845436 74.027258) (xy 146.704279 73.885112) (xy 146.538201 73.773091)
+ (xy 146.353527 73.695461) (xy 146.157293 73.65518) (xy 145.956971 73.653781) (xy 145.760193 73.691319) (xy 145.574453 73.766363)
+ (xy 145.406827 73.876054) (xy 145.263699 74.016215) (xy 145.150521 74.181507) (xy 145.071604 74.365635) (xy 145.029954 74.561583)
+ (xy 145.027157 74.761891) (xy 139.497572 74.761891) (xy 139.511261 74.701639) (xy 139.515052 74.430157) (xy 139.468885 74.196999)
+ (xy 139.37831 73.977247) (xy 139.246777 73.779274) (xy 139.079296 73.61062) (xy 138.882246 73.477708) (xy 138.663132 73.385601)
+ (xy 138.430301 73.337808) (xy 138.192622 73.336148) (xy 137.959147 73.380686) (xy 137.738768 73.469725) (xy 137.539882 73.599872)
+ (xy 137.370062 73.766172) (xy 137.235778 73.96229) (xy 137.142143 74.180755) (xy 137.092726 74.413246) (xy 137.089407 74.650908)
+ (xy 136.977177 74.650908) (xy 136.977177 73.787) (xy 136.971463 73.715339) (xy 136.933822 73.593795) (xy 136.863811 73.487549)
+ (xy 136.766972 73.405014) (xy 136.650974 73.352725) (xy 136.525 73.334823) (xy 135.001 73.334823) (xy 134.929339 73.340537)
+ (xy 134.807795 73.378178) (xy 134.701549 73.448189) (xy 134.619014 73.545028) (xy 134.566725 73.661026) (xy 134.548823 73.787)
+ (xy 114.469232 73.787) (xy 114.492261 73.685639) (xy 114.496052 73.414157) (xy 114.449885 73.180999) (xy 114.35931 72.961247)
+ (xy 114.227777 72.763274) (xy 114.060296 72.59462) (xy 113.863246 72.461708) (xy 113.644132 72.369601) (xy 113.411301 72.321808)
+ (xy 113.173622 72.320148) (xy 112.940147 72.364686) (xy 112.719768 72.453725) (xy 112.520882 72.583872) (xy 112.351062 72.750172)
+ (xy 112.216778 72.94629) (xy 112.123143 73.164755) (xy 112.073726 73.397246) (xy 112.070407 73.634908) (xy 111.952969 73.634908)
+ (xy 111.956052 73.414157) (xy 111.909885 73.180999) (xy 111.81931 72.961247) (xy 111.687777 72.763274) (xy 111.520296 72.59462)
+ (xy 111.323246 72.461708) (xy 111.104132 72.369601) (xy 110.871301 72.321808) (xy 110.633622 72.320148) (xy 110.400147 72.364686)
+ (xy 110.179768 72.453725) (xy 109.980882 72.583872) (xy 109.811062 72.750172) (xy 109.676778 72.94629) (xy 109.583143 73.164755)
+ (xy 109.533726 73.397246) (xy 109.530407 73.634908) (xy 109.412969 73.634908) (xy 109.416052 73.414157) (xy 109.369885 73.180999)
+ (xy 109.27931 72.961247) (xy 109.147777 72.763274) (xy 108.980296 72.59462) (xy 108.783246 72.461708) (xy 108.564132 72.369601)
+ (xy 108.331301 72.321808) (xy 108.093622 72.320148) (xy 107.860147 72.364686) (xy 107.639768 72.453725) (xy 107.440882 72.583872)
+ (xy 107.271062 72.750172) (xy 107.136778 72.94629) (xy 107.043143 73.164755) (xy 106.993726 73.397246) (xy 106.990407 73.634908)
+ (xy 93.237505 73.634908) (xy 93.263451 73.617811) (xy 93.345986 73.520972) (xy 93.398275 73.404974) (xy 93.416177 73.279)
+ (xy 93.416177 71.449212) (xy 108.578324 71.449212) (xy 108.609991 71.621751) (xy 108.674568 71.784852) (xy 108.769594 71.932305)
+ (xy 108.891452 72.058492) (xy 109.035498 72.158607) (xy 109.196247 72.228836) (xy 109.367575 72.266505) (xy 109.542957 72.270179)
+ (xy 109.715713 72.239717) (xy 109.879261 72.176281) (xy 110.027374 72.082286) (xy 110.154408 71.961313) (xy 110.255526 71.817969)
+ (xy 110.306619 71.703212) (xy 111.118324 71.703212) (xy 111.149991 71.875751) (xy 111.214568 72.038852) (xy 111.309594 72.186305)
+ (xy 111.431452 72.312492) (xy 111.575498 72.412607) (xy 111.736247 72.482836) (xy 111.907575 72.520505) (xy 112.082957 72.524179)
+ (xy 112.255713 72.493717) (xy 112.419261 72.430281) (xy 112.567374 72.336286) (xy 112.694408 72.215313) (xy 112.795526 72.071969)
+ (xy 112.866876 71.911714) (xy 112.90574 71.740653) (xy 112.908538 71.54029) (xy 112.874466 71.36821) (xy 112.851106 71.311534)
+ (xy 124.453491 71.311534) (xy 124.480662 71.459575) (xy 124.53607 71.59952) (xy 124.617605 71.726038) (xy 124.722161 71.834309)
+ (xy 124.845756 71.92021) (xy 124.983682 71.980468) (xy 125.130685 72.012789) (xy 125.281167 72.015941) (xy 125.429395 71.989804)
+ (xy 125.569723 71.935375) (xy 125.696807 71.854725) (xy 125.805805 71.750927) (xy 125.892567 71.627935) (xy 125.953786 71.490433)
+ (xy 125.987133 71.343659) (xy 125.987283 71.332891) (xy 130.549157 71.332891) (xy 130.58532 71.529926) (xy 130.659065 71.716185)
+ (xy 130.767583 71.884573) (xy 130.906742 72.028676) (xy 131.07124 72.143005) (xy 131.254812 72.223205) (xy 131.450465 72.266222)
+ (xy 131.650748 72.270418) (xy 131.848031 72.235631) (xy 132.0348 72.163188) (xy 132.203941 72.055848) (xy 132.349012 71.917699)
+ (xy 132.464487 71.754003) (xy 132.545967 71.570996) (xy 132.590349 71.375647) (xy 132.591244 71.311534) (xy 157.473491 71.311534)
+ (xy 157.500662 71.459575) (xy 157.55607 71.59952) (xy 157.6015 71.670014) (xy 157.6015 74.252881) (xy 157.56618 74.304465)
+ (xy 157.506886 74.442808) (xy 157.475592 74.590034) (xy 157.473491 74.740534) (xy 157.500662 74.888575) (xy 157.55607 75.02852)
+ (xy 157.637605 75.155038) (xy 157.742161 75.263309) (xy 157.865756 75.34921) (xy 158.003682 75.409468) (xy 158.150685 75.441789)
+ (xy 158.301167 75.444941) (xy 158.449395 75.418804) (xy 158.589723 75.364375) (xy 158.716807 75.283725) (xy 158.825805 75.179927)
+ (xy 158.912567 75.056935) (xy 158.973786 74.919433) (xy 159.007133 74.772659) (xy 159.009533 74.600743) (xy 158.980298 74.453095)
+ (xy 158.922942 74.313937) (xy 158.8825 74.253067) (xy 158.8825 73.110891) (xy 189.985157 73.110891) (xy 190.02132 73.307926)
+ (xy 190.095065 73.494185) (xy 190.203583 73.662573) (xy 190.342742 73.806676) (xy 190.50724 73.921005) (xy 190.690812 74.001205)
+ (xy 190.886465 74.044222) (xy 191.086748 74.048418) (xy 191.284031 74.013631) (xy 191.4708 73.941188) (xy 191.639941 73.833848)
+ (xy 191.785012 73.695699) (xy 191.900487 73.532003) (xy 191.981967 73.348996) (xy 192.026349 73.153647) (xy 192.029544 72.924837)
+ (xy 191.990634 72.728325) (xy 191.914295 72.543114) (xy 191.803436 72.376258) (xy 191.662279 72.234112) (xy 191.496201 72.122091)
+ (xy 191.311527 72.044461) (xy 191.115293 72.00418) (xy 190.914971 72.002781) (xy 190.718193 72.040319) (xy 190.532453 72.115363)
+ (xy 190.364827 72.225054) (xy 190.221699 72.365215) (xy 190.108521 72.530507) (xy 190.029604 72.714635) (xy 189.987954 72.910583)
+ (xy 189.985157 73.110891) (xy 158.8825 73.110891) (xy 158.8825 71.670557) (xy 158.912567 71.627935) (xy 158.973786 71.490433)
+ (xy 159.007133 71.343659) (xy 159.007283 71.332891) (xy 163.569157 71.332891) (xy 163.60532 71.529926) (xy 163.679065 71.716185)
+ (xy 163.787583 71.884573) (xy 163.926742 72.028676) (xy 164.09124 72.143005) (xy 164.274812 72.223205) (xy 164.470465 72.266222)
+ (xy 164.670748 72.270418) (xy 164.868031 72.235631) (xy 165.0548 72.163188) (xy 165.223941 72.055848) (xy 165.369012 71.917699)
+ (xy 165.484487 71.754003) (xy 165.565967 71.570996) (xy 165.610349 71.375647) (xy 165.612868 71.195212) (xy 185.286324 71.195212)
+ (xy 185.317991 71.367751) (xy 185.382568 71.530852) (xy 185.477594 71.678305) (xy 185.599452 71.804492) (xy 185.743498 71.904607)
+ (xy 185.904247 71.974836) (xy 186.075575 72.012505) (xy 186.250957 72.016179) (xy 186.423713 71.985717) (xy 186.587261 71.922281)
+ (xy 186.735374 71.828286) (xy 186.862408 71.707313) (xy 186.963526 71.563969) (xy 187.034876 71.403714) (xy 187.07374 71.232653)
+ (xy 187.07389 71.221908) (xy 222.306407 71.221908) (xy 222.349314 71.455689) (xy 222.436812 71.676683) (xy 222.565568 71.876474)
+ (xy 222.730678 72.04745) (xy 222.925853 72.1831) (xy 223.143659 72.278257) (xy 223.3758 72.329297) (xy 223.613433 72.334275)
+ (xy 223.847508 72.293001) (xy 224.069108 72.207048) (xy 224.269792 72.07969) (xy 224.441917 71.915777) (xy 224.578927 71.721554)
+ (xy 224.675602 71.504418) (xy 224.728261 71.272639) (xy 224.732052 71.001157) (xy 224.685885 70.767999) (xy 224.59531 70.548247)
+ (xy 224.463777 70.350274) (xy 224.296296 70.18162) (xy 224.099246 70.048708) (xy 223.880132 69.956601) (xy 223.647301 69.908808)
+ (xy 223.409622 69.907148) (xy 223.176147 69.951686) (xy 222.955768 70.040725) (xy 222.756882 70.170872) (xy 222.587062 70.337172)
+ (xy 222.452778 70.53329) (xy 222.359143 70.751755) (xy 222.309726 70.984246) (xy 222.306407 71.221908) (xy 187.07389 71.221908)
+ (xy 187.076538 71.03229) (xy 187.042466 70.86021) (xy 186.975618 70.698026) (xy 186.878542 70.551914) (xy 186.754935 70.427441)
+ (xy 186.609504 70.329347) (xy 186.447791 70.261369) (xy 186.275953 70.226096) (xy 186.100537 70.224871) (xy 185.928224 70.257742)
+ (xy 185.765577 70.323455) (xy 185.618791 70.419509) (xy 185.493458 70.542244) (xy 185.394351 70.686986) (xy 185.325246 70.848221)
+ (xy 185.288774 71.019809) (xy 185.286324 71.195212) (xy 165.612868 71.195212) (xy 165.613544 71.146837) (xy 165.574634 70.950325)
+ (xy 165.498295 70.765114) (xy 165.387436 70.598258) (xy 165.246279 70.456112) (xy 165.080201 70.344091) (xy 164.895527 70.266461)
+ (xy 164.699293 70.22618) (xy 164.498971 70.224781) (xy 164.302193 70.262319) (xy 164.116453 70.337363) (xy 163.948827 70.447054)
+ (xy 163.805699 70.587215) (xy 163.692521 70.752507) (xy 163.613604 70.936635) (xy 163.571954 71.132583) (xy 163.569157 71.332891)
+ (xy 159.007283 71.332891) (xy 159.009533 71.171743) (xy 158.980298 71.024095) (xy 158.922942 70.884937) (xy 158.839648 70.75957)
+ (xy 158.73359 70.652769) (xy 158.608808 70.568603) (xy 158.470054 70.510276) (xy 158.322614 70.480011) (xy 158.172103 70.47896)
+ (xy 158.024254 70.507164) (xy 157.8847 70.563547) (xy 157.758754 70.645964) (xy 157.651216 70.751273) (xy 157.56618 70.875465)
+ (xy 157.506886 71.013808) (xy 157.475592 71.161034) (xy 157.473491 71.311534) (xy 132.591244 71.311534) (xy 132.593544 71.146837)
+ (xy 132.554634 70.950325) (xy 132.478295 70.765114) (xy 132.367436 70.598258) (xy 132.226279 70.456112) (xy 132.060201 70.344091)
+ (xy 131.875527 70.266461) (xy 131.679293 70.22618) (xy 131.478971 70.224781) (xy 131.282193 70.262319) (xy 131.096453 70.337363)
+ (xy 130.928827 70.447054) (xy 130.785699 70.587215) (xy 130.672521 70.752507) (xy 130.593604 70.936635) (xy 130.551954 71.132583)
+ (xy 130.549157 71.332891) (xy 125.987283 71.332891) (xy 125.989533 71.171743) (xy 125.960298 71.024095) (xy 125.902942 70.884937)
+ (xy 125.819648 70.75957) (xy 125.71359 70.652769) (xy 125.588808 70.568603) (xy 125.450054 70.510276) (xy 125.302614 70.480011)
+ (xy 125.152103 70.47896) (xy 125.004254 70.507164) (xy 124.8647 70.563547) (xy 124.738754 70.645964) (xy 124.631216 70.751273)
+ (xy 124.54618 70.875465) (xy 124.486886 71.013808) (xy 124.455592 71.161034) (xy 124.453491 71.311534) (xy 112.851106 71.311534)
+ (xy 112.807618 71.206026) (xy 112.710542 71.059914) (xy 112.586935 70.935441) (xy 112.441504 70.837347) (xy 112.279791 70.769369)
+ (xy 112.107953 70.734096) (xy 111.932537 70.732871) (xy 111.760224 70.765742) (xy 111.597577 70.831455) (xy 111.450791 70.927509)
+ (xy 111.325458 71.050244) (xy 111.226351 71.194986) (xy 111.157246 71.356221) (xy 111.120774 71.527809) (xy 111.118324 71.703212)
+ (xy 110.306619 71.703212) (xy 110.326876 71.657714) (xy 110.36574 71.486653) (xy 110.368538 71.28629) (xy 110.334466 71.11421)
+ (xy 110.267618 70.952026) (xy 110.170542 70.805914) (xy 110.046935 70.681441) (xy 109.901504 70.583347) (xy 109.739791 70.515369)
+ (xy 109.567953 70.480096) (xy 109.392537 70.478871) (xy 109.220224 70.511742) (xy 109.057577 70.577455) (xy 108.910791 70.673509)
+ (xy 108.785458 70.796244) (xy 108.686351 70.940986) (xy 108.617246 71.102221) (xy 108.580774 71.273809) (xy 108.578324 71.449212)
+ (xy 93.416177 71.449212) (xy 93.416177 69.469) (xy 93.410463 69.397339) (xy 93.372822 69.275795) (xy 93.302811 69.169549)
+ (xy 93.205972 69.087014) (xy 93.089974 69.034725) (xy 92.964 69.016823) (xy 90.424 69.016823) (xy 90.352339 69.022537)
+ (xy 90.230795 69.060178) (xy 90.124549 69.130189) (xy 90.042014 69.227028) (xy 89.989725 69.343026) (xy 89.971823 69.469)
+ (xy 88.336177 69.469) (xy 88.330463 69.397339) (xy 88.292822 69.275795) (xy 88.222811 69.169549) (xy 88.125972 69.087014)
+ (xy 88.009974 69.034725) (xy 87.884 69.016823) (xy 85.344 69.016823) (xy 85.272339 69.022537) (xy 85.150795 69.060178)
+ (xy 85.044549 69.130189) (xy 84.962014 69.227028) (xy 84.909725 69.343026) (xy 84.891823 69.469) (xy 83.256177 69.469)
+ (xy 83.250463 69.397339) (xy 83.212822 69.275795) (xy 83.142811 69.169549) (xy 83.045972 69.087014) (xy 82.929974 69.034725)
+ (xy 82.804 69.016823) (xy 80.264 69.016823) (xy 80.192339 69.022537) (xy 80.070795 69.060178) (xy 79.964549 69.130189)
+ (xy 79.882014 69.227028) (xy 79.829725 69.343026) (xy 79.811823 69.469) (xy 77.079734 69.469) (xy 77.089986 69.456972)
+ (xy 77.142275 69.340974) (xy 77.160177 69.215) (xy 77.160177 67.10225) (xy 98.0337 67.10225) (xy 98.0337 69.381599)
+ (xy 98.054106 69.484187) (xy 98.094134 69.580823) (xy 98.152245 69.667793) (xy 98.226207 69.741755) (xy 98.313177 69.799866)
+ (xy 98.409813 69.839894) (xy 98.512401 69.8603) (xy 100.79175 69.8603) (xy 100.9245 69.72755) (xy 100.9245 66.9695)
+ (xy 101.0055 66.9695) (xy 101.0055 69.72755) (xy 101.13825 69.8603) (xy 103.417599 69.8603) (xy 103.520187 69.839894)
+ (xy 103.616823 69.799866) (xy 103.703793 69.741755) (xy 103.777755 69.667793) (xy 103.835866 69.580823) (xy 103.875894 69.484187)
+ (xy 103.8963 69.381599) (xy 103.8963 67.10225) (xy 103.76355 66.9695) (xy 101.0055 66.9695) (xy 100.9245 66.9695)
+ (xy 98.16645 66.9695) (xy 98.0337 67.10225) (xy 77.160177 67.10225) (xy 77.160177 66.675) (xy 77.154463 66.603339)
+ (xy 77.116822 66.481795) (xy 77.046811 66.375549) (xy 76.949972 66.293014) (xy 76.833974 66.240725) (xy 76.708 66.222823)
+ (xy 74.168 66.222823) (xy 74.096339 66.228537) (xy 73.974795 66.266178) (xy 73.868549 66.336189) (xy 73.786014 66.433028)
+ (xy 73.733725 66.549026) (xy 73.715823 66.675) (xy 71.85 66.675) (xy 71.85 63.358661) (xy 93.030954 63.358661)
+ (xy 93.131859 63.90845) (xy 93.337631 64.42817) (xy 93.640431 64.898024) (xy 94.028726 65.300115) (xy 94.487726 65.619128)
+ (xy 94.999947 65.842912) (xy 95.54588 65.962944) (xy 96.10473 65.97465) (xy 96.655211 65.877585) (xy 97.176354 65.675447)
+ (xy 97.64831 65.375935) (xy 98.0337 65.008933) (xy 98.0337 66.75575) (xy 98.16645 66.8885) (xy 100.9245 66.8885)
+ (xy 100.9245 64.13045) (xy 101.0055 64.13045) (xy 101.0055 66.8885) (xy 103.76355 66.8885) (xy 103.8963 66.75575)
+ (xy 103.8963 66.238015) (xy 107.115904 66.238015) (xy 107.199275 66.692267) (xy 107.36929 67.121674) (xy 107.619472 67.509881)
+ (xy 107.940292 67.8421) (xy 108.319531 68.105678) (xy 108.742744 68.290575) (xy 109.193809 68.389749) (xy 109.655548 68.399421)
+ (xy 110.110371 68.319223) (xy 110.540954 68.152211) (xy 110.930898 67.904745) (xy 111.021989 67.818) (xy 115.371823 67.818)
+ (xy 115.371823 69.342) (xy 115.377537 69.413661) (xy 115.415178 69.535205) (xy 115.485189 69.641451) (xy 115.582028 69.723986)
+ (xy 115.698026 69.776275) (xy 115.824 69.794177) (xy 117.348 69.794177) (xy 117.419661 69.788463) (xy 117.541205 69.750822)
+ (xy 117.647451 69.680811) (xy 117.729986 69.583972) (xy 117.782275 69.467974) (xy 117.800177 69.342) (xy 117.800177 68.681908)
+ (xy 118.166407 68.681908) (xy 118.209314 68.915689) (xy 118.296812 69.136683) (xy 118.425568 69.336474) (xy 118.590678 69.50745)
+ (xy 118.785853 69.6431) (xy 119.003659 69.738257) (xy 119.2358 69.789297) (xy 119.473433 69.794275) (xy 119.707508 69.753001)
+ (xy 119.929108 69.667048) (xy 120.129792 69.53969) (xy 120.301917 69.375777) (xy 120.438927 69.181554) (xy 120.535602 68.964418)
+ (xy 120.588261 68.732639) (xy 120.588969 68.681908) (xy 120.833407 68.681908) (xy 120.876314 68.915689) (xy 120.963812 69.136683)
+ (xy 121.092568 69.336474) (xy 121.257678 69.50745) (xy 121.452853 69.6431) (xy 121.670659 69.738257) (xy 121.9028 69.789297)
+ (xy 122.140433 69.794275) (xy 122.374508 69.753001) (xy 122.596108 69.667048) (xy 122.796792 69.53969) (xy 122.968917 69.375777)
+ (xy 123.105927 69.181554) (xy 123.202602 68.964418) (xy 123.255261 68.732639) (xy 123.259052 68.461157) (xy 123.212885 68.227999)
+ (xy 123.12231 68.008247) (xy 122.990777 67.810274) (xy 122.823296 67.64162) (xy 122.626246 67.508708) (xy 122.407132 67.416601)
+ (xy 122.174301 67.368808) (xy 121.936622 67.367148) (xy 121.703147 67.411686) (xy 121.482768 67.500725) (xy 121.283882 67.630872)
+ (xy 121.114062 67.797172) (xy 120.979778 67.99329) (xy 120.886143 68.211755) (xy 120.836726 68.444246) (xy 120.833407 68.681908)
+ (xy 120.588969 68.681908) (xy 120.592052 68.461157) (xy 120.545885 68.227999) (xy 120.45531 68.008247) (xy 120.323777 67.810274)
+ (xy 120.156296 67.64162) (xy 119.959246 67.508708) (xy 119.740132 67.416601) (xy 119.507301 67.368808) (xy 119.269622 67.367148)
+ (xy 119.036147 67.411686) (xy 118.815768 67.500725) (xy 118.616882 67.630872) (xy 118.447062 67.797172) (xy 118.312778 67.99329)
+ (xy 118.219143 68.211755) (xy 118.169726 68.444246) (xy 118.166407 68.681908) (xy 117.800177 68.681908) (xy 117.800177 68.271627)
+ (xy 118.435902 67.635902) (xy 118.473476 67.590159) (xy 118.511485 67.544861) (xy 118.513107 67.541911) (xy 118.515245 67.539308)
+ (xy 118.543204 67.487165) (xy 118.571706 67.43532) (xy 118.572725 67.432109) (xy 118.574316 67.429141) (xy 118.591601 67.372603)
+ (xy 118.609504 67.316167) (xy 118.60988 67.312816) (xy 118.610863 67.3096) (xy 118.616834 67.250815) (xy 118.623438 67.191943)
+ (xy 118.623484 67.185358) (xy 118.623496 67.185236) (xy 118.623485 67.185123) (xy 118.6235 67.183) (xy 118.6235 67.069049)
+ (xy 118.732792 66.99969) (xy 118.904917 66.835777) (xy 119.041927 66.641554) (xy 119.138602 66.424418) (xy 119.191261 66.192639)
+ (xy 119.195052 65.921157) (xy 119.164078 65.764726) (xy 119.772304 65.1565) (xy 119.946865 65.1565) (xy 119.844062 65.257172)
+ (xy 119.709778 65.45329) (xy 119.616143 65.671755) (xy 119.566726 65.904246) (xy 119.563407 66.141908) (xy 119.606314 66.375689)
+ (xy 119.693812 66.596683) (xy 119.822568 66.796474) (xy 119.987678 66.96745) (xy 120.182853 67.1031) (xy 120.400659 67.198257)
+ (xy 120.6328 67.249297) (xy 120.870433 67.254275) (xy 121.104508 67.213001) (xy 121.326108 67.127048) (xy 121.526792 66.99969)
+ (xy 121.698917 66.835777) (xy 121.835927 66.641554) (xy 121.932602 66.424418) (xy 121.985261 66.192639) (xy 121.989052 65.921157)
+ (xy 121.942885 65.687999) (xy 121.85231 65.468247) (xy 121.720777 65.270274) (xy 121.607794 65.1565) (xy 122.613865 65.1565)
+ (xy 122.511062 65.257172) (xy 122.376778 65.45329) (xy 122.283143 65.671755) (xy 122.233726 65.904246) (xy 122.230407 66.141908)
+ (xy 122.273314 66.375689) (xy 122.360812 66.596683) (xy 122.489568 66.796474) (xy 122.654678 66.96745) (xy 122.849853 67.1031)
+ (xy 123.067659 67.198257) (xy 123.2998 67.249297) (xy 123.537433 67.254275) (xy 123.771508 67.213001) (xy 123.993108 67.127048)
+ (xy 124.193792 66.99969) (xy 124.2005 66.993302) (xy 124.2005 67.550633) (xy 124.077882 67.630872) (xy 123.908062 67.797172)
+ (xy 123.773778 67.99329) (xy 123.680143 68.211755) (xy 123.630726 68.444246) (xy 123.627407 68.681908) (xy 123.670314 68.915689)
+ (xy 123.757812 69.136683) (xy 123.886568 69.336474) (xy 124.051678 69.50745) (xy 124.246853 69.6431) (xy 124.464659 69.738257)
+ (xy 124.6968 69.789297) (xy 124.934433 69.794275) (xy 125.168508 69.753001) (xy 125.390108 69.667048) (xy 125.590792 69.53969)
+ (xy 125.702842 69.432985) (xy 126.839291 69.432985) (xy 126.904453 69.654415) (xy 127.128098 69.776293) (xy 127.371223 69.852199)
+ (xy 127.624485 69.879214) (xy 127.878151 69.856301) (xy 128.122473 69.784341) (xy 128.348061 69.666098) (xy 128.365547 69.654415)
+ (xy 128.430709 69.432985) (xy 127.635 68.637276) (xy 126.839291 69.432985) (xy 125.702842 69.432985) (xy 125.762917 69.375777)
+ (xy 125.899927 69.181554) (xy 125.996602 68.964418) (xy 126.049261 68.732639) (xy 126.051539 68.569485) (xy 126.335786 68.569485)
+ (xy 126.358699 68.823151) (xy 126.430659 69.067473) (xy 126.548902 69.293061) (xy 126.560585 69.310547) (xy 126.782015 69.375709)
+ (xy 127.577724 68.58) (xy 127.692276 68.58) (xy 128.487985 69.375709) (xy 128.709415 69.310547) (xy 128.831293 69.086902)
+ (xy 128.907199 68.843777) (xy 128.934214 68.590515) (xy 128.911301 68.336849) (xy 128.839341 68.092527) (xy 128.721098 67.866939)
+ (xy 128.709415 67.849453) (xy 128.487985 67.784291) (xy 127.692276 68.58) (xy 127.577724 68.58) (xy 126.782015 67.784291)
+ (xy 126.560585 67.849453) (xy 126.438707 68.073098) (xy 126.362801 68.316223) (xy 126.335786 68.569485) (xy 126.051539 68.569485)
+ (xy 126.053052 68.461157) (xy 126.006885 68.227999) (xy 125.91631 68.008247) (xy 125.784777 67.810274) (xy 125.702098 67.727015)
+ (xy 126.839291 67.727015) (xy 127.635 68.522724) (xy 128.430709 67.727015) (xy 128.365547 67.505585) (xy 128.141902 67.383707)
+ (xy 127.898777 67.307801) (xy 127.645515 67.280786) (xy 127.391849 67.303699) (xy 127.147527 67.375659) (xy 126.921939 67.493902)
+ (xy 126.904453 67.505585) (xy 126.839291 67.727015) (xy 125.702098 67.727015) (xy 125.617296 67.64162) (xy 125.4815 67.550024)
+ (xy 125.4815 66.990262) (xy 125.643853 67.1031) (xy 125.861659 67.198257) (xy 126.0938 67.249297) (xy 126.331433 67.254275)
+ (xy 126.565508 67.213001) (xy 126.787108 67.127048) (xy 126.987792 66.99969) (xy 127.159917 66.835777) (xy 127.296927 66.641554)
+ (xy 127.393602 66.424418) (xy 127.435951 66.238015) (xy 132.515904 66.238015) (xy 132.599275 66.692267) (xy 132.76929 67.121674)
+ (xy 133.019472 67.509881) (xy 133.340292 67.8421) (xy 133.719531 68.105678) (xy 134.142744 68.290575) (xy 134.593809 68.389749)
+ (xy 135.055548 68.399421) (xy 135.510371 68.319223) (xy 135.940954 68.152211) (xy 136.330898 67.904745) (xy 136.665349 67.586251)
+ (xy 136.931568 67.208862) (xy 137.119415 66.78695) (xy 137.221735 66.336588) (xy 137.223111 66.238015) (xy 140.643904 66.238015)
+ (xy 140.727275 66.692267) (xy 140.89729 67.121674) (xy 141.147472 67.509881) (xy 141.468292 67.8421) (xy 141.847531 68.105678)
+ (xy 142.270744 68.290575) (xy 142.721809 68.389749) (xy 143.183548 68.399421) (xy 143.638371 68.319223) (xy 144.068954 68.152211)
+ (xy 144.458898 67.904745) (xy 144.549989 67.818) (xy 148.899823 67.818) (xy 148.899823 69.342) (xy 148.905537 69.413661)
+ (xy 148.943178 69.535205) (xy 149.013189 69.641451) (xy 149.110028 69.723986) (xy 149.226026 69.776275) (xy 149.352 69.794177)
+ (xy 150.876 69.794177) (xy 150.947661 69.788463) (xy 151.069205 69.750822) (xy 151.175451 69.680811) (xy 151.257986 69.583972)
+ (xy 151.310275 69.467974) (xy 151.328177 69.342) (xy 151.328177 68.681908) (xy 151.694407 68.681908) (xy 151.737314 68.915689)
+ (xy 151.824812 69.136683) (xy 151.953568 69.336474) (xy 152.118678 69.50745) (xy 152.313853 69.6431) (xy 152.531659 69.738257)
+ (xy 152.7638 69.789297) (xy 153.001433 69.794275) (xy 153.235508 69.753001) (xy 153.457108 69.667048) (xy 153.657792 69.53969)
+ (xy 153.829917 69.375777) (xy 153.966927 69.181554) (xy 154.063602 68.964418) (xy 154.116261 68.732639) (xy 154.116969 68.681908)
+ (xy 154.361407 68.681908) (xy 154.404314 68.915689) (xy 154.491812 69.136683) (xy 154.620568 69.336474) (xy 154.785678 69.50745)
+ (xy 154.980853 69.6431) (xy 155.198659 69.738257) (xy 155.4308 69.789297) (xy 155.668433 69.794275) (xy 155.902508 69.753001)
+ (xy 156.124108 69.667048) (xy 156.324792 69.53969) (xy 156.496917 69.375777) (xy 156.633927 69.181554) (xy 156.730602 68.964418)
+ (xy 156.783261 68.732639) (xy 156.787052 68.461157) (xy 156.740885 68.227999) (xy 156.65031 68.008247) (xy 156.518777 67.810274)
+ (xy 156.351296 67.64162) (xy 156.154246 67.508708) (xy 155.935132 67.416601) (xy 155.702301 67.368808) (xy 155.464622 67.367148)
+ (xy 155.231147 67.411686) (xy 155.010768 67.500725) (xy 154.811882 67.630872) (xy 154.642062 67.797172) (xy 154.507778 67.99329)
+ (xy 154.414143 68.211755) (xy 154.364726 68.444246) (xy 154.361407 68.681908) (xy 154.116969 68.681908) (xy 154.120052 68.461157)
+ (xy 154.073885 68.227999) (xy 153.98331 68.008247) (xy 153.851777 67.810274) (xy 153.684296 67.64162) (xy 153.487246 67.508708)
+ (xy 153.268132 67.416601) (xy 153.035301 67.368808) (xy 152.797622 67.367148) (xy 152.564147 67.411686) (xy 152.343768 67.500725)
+ (xy 152.144882 67.630872) (xy 151.975062 67.797172) (xy 151.840778 67.99329) (xy 151.747143 68.211755) (xy 151.697726 68.444246)
+ (xy 151.694407 68.681908) (xy 151.328177 68.681908) (xy 151.328177 67.818) (xy 151.322463 67.746339) (xy 151.284822 67.624795)
+ (xy 151.214811 67.518549) (xy 151.117972 67.436014) (xy 151.001974 67.383725) (xy 150.876 67.365823) (xy 150.6275 67.365823)
+ (xy 150.6275 66.869926) (xy 150.721678 66.96745) (xy 150.916853 67.1031) (xy 151.134659 67.198257) (xy 151.3668 67.249297)
+ (xy 151.604433 67.254275) (xy 151.838508 67.213001) (xy 152.060108 67.127048) (xy 152.260792 66.99969) (xy 152.432917 66.835777)
+ (xy 152.569927 66.641554) (xy 152.666602 66.424418) (xy 152.719261 66.192639) (xy 152.723052 65.921157) (xy 152.676885 65.687999)
+ (xy 152.58631 65.468247) (xy 152.454777 65.270274) (xy 152.287296 65.10162) (xy 152.090246 64.968708) (xy 151.932743 64.9025)
+ (xy 153.88488 64.9025) (xy 153.740768 64.960725) (xy 153.541882 65.090872) (xy 153.372062 65.257172) (xy 153.237778 65.45329)
+ (xy 153.144143 65.671755) (xy 153.094726 65.904246) (xy 153.091407 66.141908) (xy 153.134314 66.375689) (xy 153.221812 66.596683)
+ (xy 153.350568 66.796474) (xy 153.515678 66.96745) (xy 153.710853 67.1031) (xy 153.928659 67.198257) (xy 154.1608 67.249297)
+ (xy 154.398433 67.254275) (xy 154.632508 67.213001) (xy 154.854108 67.127048) (xy 155.054792 66.99969) (xy 155.226917 66.835777)
+ (xy 155.363927 66.641554) (xy 155.460602 66.424418) (xy 155.513261 66.192639) (xy 155.517052 65.921157) (xy 155.470885 65.687999)
+ (xy 155.38031 65.468247) (xy 155.248777 65.270274) (xy 155.081296 65.10162) (xy 154.884246 64.968708) (xy 154.726743 64.9025)
+ (xy 156.55188 64.9025) (xy 156.407768 64.960725) (xy 156.208882 65.090872) (xy 156.039062 65.257172) (xy 155.904778 65.45329)
+ (xy 155.811143 65.671755) (xy 155.761726 65.904246) (xy 155.758407 66.141908) (xy 155.801314 66.375689) (xy 155.888812 66.596683)
+ (xy 156.017568 66.796474) (xy 156.182678 66.96745) (xy 156.377853 67.1031) (xy 156.595659 67.198257) (xy 156.8278 67.249297)
+ (xy 157.065433 67.254275) (xy 157.299508 67.213001) (xy 157.521108 67.127048) (xy 157.721792 66.99969) (xy 157.7285 66.993302)
+ (xy 157.7285 67.550633) (xy 157.605882 67.630872) (xy 157.436062 67.797172) (xy 157.301778 67.99329) (xy 157.208143 68.211755)
+ (xy 157.158726 68.444246) (xy 157.155407 68.681908) (xy 157.198314 68.915689) (xy 157.285812 69.136683) (xy 157.414568 69.336474)
+ (xy 157.579678 69.50745) (xy 157.774853 69.6431) (xy 157.992659 69.738257) (xy 158.2248 69.789297) (xy 158.462433 69.794275)
+ (xy 158.696508 69.753001) (xy 158.918108 69.667048) (xy 159.118792 69.53969) (xy 159.230842 69.432985) (xy 160.367291 69.432985)
+ (xy 160.432453 69.654415) (xy 160.656098 69.776293) (xy 160.899223 69.852199) (xy 161.152485 69.879214) (xy 161.406151 69.856301)
+ (xy 161.650473 69.784341) (xy 161.876061 69.666098) (xy 161.893547 69.654415) (xy 161.958709 69.432985) (xy 161.163 68.637276)
+ (xy 160.367291 69.432985) (xy 159.230842 69.432985) (xy 159.290917 69.375777) (xy 159.427927 69.181554) (xy 159.524602 68.964418)
+ (xy 159.577261 68.732639) (xy 159.579539 68.569485) (xy 159.863786 68.569485) (xy 159.886699 68.823151) (xy 159.958659 69.067473)
+ (xy 160.076902 69.293061) (xy 160.088585 69.310547) (xy 160.310015 69.375709) (xy 161.105724 68.58) (xy 161.220276 68.58)
+ (xy 162.015985 69.375709) (xy 162.237415 69.310547) (xy 162.359293 69.086902) (xy 162.435199 68.843777) (xy 162.462214 68.590515)
+ (xy 162.439301 68.336849) (xy 162.367341 68.092527) (xy 162.249098 67.866939) (xy 162.237415 67.849453) (xy 162.015985 67.784291)
+ (xy 161.220276 68.58) (xy 161.105724 68.58) (xy 160.310015 67.784291) (xy 160.088585 67.849453) (xy 159.966707 68.073098)
+ (xy 159.890801 68.316223) (xy 159.863786 68.569485) (xy 159.579539 68.569485) (xy 159.581052 68.461157) (xy 159.534885 68.227999)
+ (xy 159.44431 68.008247) (xy 159.312777 67.810274) (xy 159.230098 67.727015) (xy 160.367291 67.727015) (xy 161.163 68.522724)
+ (xy 161.958709 67.727015) (xy 161.893547 67.505585) (xy 161.669902 67.383707) (xy 161.426777 67.307801) (xy 161.173515 67.280786)
+ (xy 160.919849 67.303699) (xy 160.675527 67.375659) (xy 160.449939 67.493902) (xy 160.432453 67.505585) (xy 160.367291 67.727015)
+ (xy 159.230098 67.727015) (xy 159.145296 67.64162) (xy 159.0095 67.550024) (xy 159.0095 66.990262) (xy 159.171853 67.1031)
+ (xy 159.389659 67.198257) (xy 159.6218 67.249297) (xy 159.859433 67.254275) (xy 160.093508 67.213001) (xy 160.315108 67.127048)
+ (xy 160.515792 66.99969) (xy 160.687917 66.835777) (xy 160.824927 66.641554) (xy 160.921602 66.424418) (xy 160.963951 66.238015)
+ (xy 166.043904 66.238015) (xy 166.127275 66.692267) (xy 166.29729 67.121674) (xy 166.547472 67.509881) (xy 166.868292 67.8421)
+ (xy 167.247531 68.105678) (xy 167.670744 68.290575) (xy 168.121809 68.389749) (xy 168.583548 68.399421) (xy 169.038371 68.319223)
+ (xy 169.468954 68.152211) (xy 169.858898 67.904745) (xy 170.193349 67.586251) (xy 170.459568 67.208862) (xy 170.647415 66.78695)
+ (xy 170.749735 66.336588) (xy 170.751111 66.238015) (xy 174.171904 66.238015) (xy 174.255275 66.692267) (xy 174.42529 67.121674)
+ (xy 174.675472 67.509881) (xy 174.996292 67.8421) (xy 175.375531 68.105678) (xy 175.798744 68.290575) (xy 176.249809 68.389749)
+ (xy 176.711548 68.399421) (xy 177.166371 68.319223) (xy 177.596954 68.152211) (xy 177.986898 67.904745) (xy 178.077989 67.818)
+ (xy 182.427823 67.818) (xy 182.427823 69.342) (xy 182.433537 69.413661) (xy 182.471178 69.535205) (xy 182.541189 69.641451)
+ (xy 182.638028 69.723986) (xy 182.754026 69.776275) (xy 182.88 69.794177) (xy 184.404 69.794177) (xy 184.475661 69.788463)
+ (xy 184.597205 69.750822) (xy 184.703451 69.680811) (xy 184.785986 69.583972) (xy 184.838275 69.467974) (xy 184.856177 69.342)
+ (xy 184.856177 68.681908) (xy 185.222407 68.681908) (xy 185.265314 68.915689) (xy 185.352812 69.136683) (xy 185.481568 69.336474)
+ (xy 185.646678 69.50745) (xy 185.841853 69.6431) (xy 186.059659 69.738257) (xy 186.2918 69.789297) (xy 186.529433 69.794275)
+ (xy 186.763508 69.753001) (xy 186.985108 69.667048) (xy 187.185792 69.53969) (xy 187.357917 69.375777) (xy 187.494927 69.181554)
+ (xy 187.591602 68.964418) (xy 187.644261 68.732639) (xy 187.644969 68.681908) (xy 187.889407 68.681908) (xy 187.932314 68.915689)
+ (xy 188.019812 69.136683) (xy 188.148568 69.336474) (xy 188.313678 69.50745) (xy 188.508853 69.6431) (xy 188.726659 69.738257)
+ (xy 188.9588 69.789297) (xy 189.196433 69.794275) (xy 189.430508 69.753001) (xy 189.652108 69.667048) (xy 189.852792 69.53969)
+ (xy 190.024917 69.375777) (xy 190.161927 69.181554) (xy 190.258602 68.964418) (xy 190.311261 68.732639) (xy 190.315052 68.461157)
+ (xy 190.268885 68.227999) (xy 190.17831 68.008247) (xy 190.046777 67.810274) (xy 189.879296 67.64162) (xy 189.682246 67.508708)
+ (xy 189.463132 67.416601) (xy 189.230301 67.368808) (xy 188.992622 67.367148) (xy 188.759147 67.411686) (xy 188.538768 67.500725)
+ (xy 188.339882 67.630872) (xy 188.170062 67.797172) (xy 188.035778 67.99329) (xy 187.942143 68.211755) (xy 187.892726 68.444246)
+ (xy 187.889407 68.681908) (xy 187.644969 68.681908) (xy 187.648052 68.461157) (xy 187.601885 68.227999) (xy 187.51131 68.008247)
+ (xy 187.379777 67.810274) (xy 187.212296 67.64162) (xy 187.015246 67.508708) (xy 186.796132 67.416601) (xy 186.563301 67.368808)
+ (xy 186.325622 67.367148) (xy 186.092147 67.411686) (xy 185.871768 67.500725) (xy 185.672882 67.630872) (xy 185.503062 67.797172)
+ (xy 185.368778 67.99329) (xy 185.275143 68.211755) (xy 185.225726 68.444246) (xy 185.222407 68.681908) (xy 184.856177 68.681908)
+ (xy 184.856177 67.818) (xy 184.850463 67.746339) (xy 184.812822 67.624795) (xy 184.742811 67.518549) (xy 184.645972 67.436014)
+ (xy 184.529974 67.383725) (xy 184.404 67.365823) (xy 182.88 67.365823) (xy 182.808339 67.371537) (xy 182.686795 67.409178)
+ (xy 182.580549 67.479189) (xy 182.498014 67.576028) (xy 182.445725 67.692026) (xy 182.427823 67.818) (xy 178.077989 67.818)
+ (xy 178.321349 67.586251) (xy 178.587568 67.208862) (xy 178.775415 66.78695) (xy 178.877735 66.336588) (xy 178.880453 66.141908)
+ (xy 183.825407 66.141908) (xy 183.868314 66.375689) (xy 183.955812 66.596683) (xy 184.084568 66.796474) (xy 184.249678 66.96745)
+ (xy 184.444853 67.1031) (xy 184.662659 67.198257) (xy 184.8948 67.249297) (xy 185.132433 67.254275) (xy 185.366508 67.213001)
+ (xy 185.588108 67.127048) (xy 185.788792 66.99969) (xy 185.960917 66.835777) (xy 186.097927 66.641554) (xy 186.194602 66.424418)
+ (xy 186.247261 66.192639) (xy 186.251052 65.921157) (xy 186.247005 65.900719) (xy 186.965825 65.1819) (xy 186.976927 65.1819)
+ (xy 186.900062 65.257172) (xy 186.765778 65.45329) (xy 186.672143 65.671755) (xy 186.622726 65.904246) (xy 186.619407 66.141908)
+ (xy 186.662314 66.375689) (xy 186.749812 66.596683) (xy 186.878568 66.796474) (xy 187.043678 66.96745) (xy 187.238853 67.1031)
+ (xy 187.456659 67.198257) (xy 187.6888 67.249297) (xy 187.926433 67.254275) (xy 188.160508 67.213001) (xy 188.382108 67.127048)
+ (xy 188.582792 66.99969) (xy 188.754917 66.835777) (xy 188.891927 66.641554) (xy 188.988602 66.424418) (xy 189.041261 66.192639)
+ (xy 189.045052 65.921157) (xy 188.998885 65.687999) (xy 188.90831 65.468247) (xy 188.776777 65.270274) (xy 188.689018 65.1819)
+ (xy 189.643927 65.1819) (xy 189.567062 65.257172) (xy 189.432778 65.45329) (xy 189.339143 65.671755) (xy 189.289726 65.904246)
+ (xy 189.286407 66.141908) (xy 189.329314 66.375689) (xy 189.416812 66.596683) (xy 189.545568 66.796474) (xy 189.710678 66.96745)
+ (xy 189.905853 67.1031) (xy 190.123659 67.198257) (xy 190.3558 67.249297) (xy 190.593433 67.254275) (xy 190.827508 67.213001)
+ (xy 191.049108 67.127048) (xy 191.2311 67.011552) (xy 191.2311 67.567254) (xy 191.133882 67.630872) (xy 190.964062 67.797172)
+ (xy 190.829778 67.99329) (xy 190.736143 68.211755) (xy 190.686726 68.444246) (xy 190.683407 68.681908) (xy 190.726314 68.915689)
+ (xy 190.813812 69.136683) (xy 190.942568 69.336474) (xy 191.107678 69.50745) (xy 191.302853 69.6431) (xy 191.520659 69.738257)
+ (xy 191.7528 69.789297) (xy 191.990433 69.794275) (xy 192.224508 69.753001) (xy 192.446108 69.667048) (xy 192.646792 69.53969)
+ (xy 192.758842 69.432985) (xy 193.895291 69.432985) (xy 193.960453 69.654415) (xy 194.184098 69.776293) (xy 194.427223 69.852199)
+ (xy 194.680485 69.879214) (xy 194.934151 69.856301) (xy 195.178473 69.784341) (xy 195.404061 69.666098) (xy 195.421547 69.654415)
+ (xy 195.486709 69.432985) (xy 194.691 68.637276) (xy 193.895291 69.432985) (xy 192.758842 69.432985) (xy 192.818917 69.375777)
+ (xy 192.955927 69.181554) (xy 193.052602 68.964418) (xy 193.105261 68.732639) (xy 193.107539 68.569485) (xy 193.391786 68.569485)
+ (xy 193.414699 68.823151) (xy 193.486659 69.067473) (xy 193.604902 69.293061) (xy 193.616585 69.310547) (xy 193.838015 69.375709)
+ (xy 194.633724 68.58) (xy 194.748276 68.58) (xy 195.543985 69.375709) (xy 195.765415 69.310547) (xy 195.887293 69.086902)
+ (xy 195.963199 68.843777) (xy 195.980465 68.681908) (xy 222.306407 68.681908) (xy 222.349314 68.915689) (xy 222.436812 69.136683)
+ (xy 222.565568 69.336474) (xy 222.730678 69.50745) (xy 222.925853 69.6431) (xy 223.143659 69.738257) (xy 223.3758 69.789297)
+ (xy 223.613433 69.794275) (xy 223.847508 69.753001) (xy 224.069108 69.667048) (xy 224.269792 69.53969) (xy 224.441917 69.375777)
+ (xy 224.578927 69.181554) (xy 224.675602 68.964418) (xy 224.728261 68.732639) (xy 224.732052 68.461157) (xy 224.685885 68.227999)
+ (xy 224.59531 68.008247) (xy 224.463777 67.810274) (xy 224.296296 67.64162) (xy 224.099246 67.508708) (xy 223.880132 67.416601)
+ (xy 223.647301 67.368808) (xy 223.409622 67.367148) (xy 223.176147 67.411686) (xy 222.955768 67.500725) (xy 222.756882 67.630872)
+ (xy 222.587062 67.797172) (xy 222.452778 67.99329) (xy 222.359143 68.211755) (xy 222.309726 68.444246) (xy 222.306407 68.681908)
+ (xy 195.980465 68.681908) (xy 195.990214 68.590515) (xy 195.967301 68.336849) (xy 195.895341 68.092527) (xy 195.777098 67.866939)
+ (xy 195.765415 67.849453) (xy 195.543985 67.784291) (xy 194.748276 68.58) (xy 194.633724 68.58) (xy 193.838015 67.784291)
+ (xy 193.616585 67.849453) (xy 193.494707 68.073098) (xy 193.418801 68.316223) (xy 193.391786 68.569485) (xy 193.107539 68.569485)
+ (xy 193.109052 68.461157) (xy 193.062885 68.227999) (xy 192.97231 68.008247) (xy 192.840777 67.810274) (xy 192.758098 67.727015)
+ (xy 193.895291 67.727015) (xy 194.691 68.522724) (xy 195.486709 67.727015) (xy 195.421547 67.505585) (xy 195.197902 67.383707)
+ (xy 194.954777 67.307801) (xy 194.701515 67.280786) (xy 194.447849 67.303699) (xy 194.203527 67.375659) (xy 193.977939 67.493902)
+ (xy 193.960453 67.505585) (xy 193.895291 67.727015) (xy 192.758098 67.727015) (xy 192.673296 67.64162) (xy 192.5629 67.567157)
+ (xy 192.5629 67.007915) (xy 192.699853 67.1031) (xy 192.917659 67.198257) (xy 193.1498 67.249297) (xy 193.387433 67.254275)
+ (xy 193.621508 67.213001) (xy 193.843108 67.127048) (xy 194.043792 66.99969) (xy 194.215917 66.835777) (xy 194.352927 66.641554)
+ (xy 194.449602 66.424418) (xy 194.491951 66.238015) (xy 199.571904 66.238015) (xy 199.655275 66.692267) (xy 199.82529 67.121674)
+ (xy 200.075472 67.509881) (xy 200.396292 67.8421) (xy 200.775531 68.105678) (xy 201.198744 68.290575) (xy 201.649809 68.389749)
+ (xy 202.111548 68.399421) (xy 202.566371 68.319223) (xy 202.996954 68.152211) (xy 203.386898 67.904745) (xy 203.721349 67.586251)
+ (xy 203.987568 67.208862) (xy 204.128205 66.892985) (xy 222.724291 66.892985) (xy 222.789453 67.114415) (xy 223.013098 67.236293)
+ (xy 223.256223 67.312199) (xy 223.509485 67.339214) (xy 223.763151 67.316301) (xy 224.007473 67.244341) (xy 224.233061 67.126098)
+ (xy 224.250547 67.114415) (xy 224.315709 66.892985) (xy 223.52 66.097276) (xy 222.724291 66.892985) (xy 204.128205 66.892985)
+ (xy 204.175415 66.78695) (xy 204.277735 66.336588) (xy 204.285101 65.80908) (xy 204.195396 65.356037) (xy 204.126397 65.188631)
+ (xy 217.417157 65.188631) (xy 217.45332 65.385666) (xy 217.527065 65.571925) (xy 217.635583 65.740313) (xy 217.774742 65.884416)
+ (xy 217.93924 65.998745) (xy 218.122812 66.078945) (xy 218.318465 66.121962) (xy 218.518748 66.126158) (xy 218.716031 66.091371)
+ (xy 218.875582 66.029485) (xy 222.220786 66.029485) (xy 222.243699 66.283151) (xy 222.315659 66.527473) (xy 222.433902 66.753061)
+ (xy 222.445585 66.770547) (xy 222.667015 66.835709) (xy 223.462724 66.04) (xy 223.577276 66.04) (xy 224.372985 66.835709)
+ (xy 224.594415 66.770547) (xy 224.716293 66.546902) (xy 224.792199 66.303777) (xy 224.819214 66.050515) (xy 224.796301 65.796849)
+ (xy 224.724341 65.552527) (xy 224.606098 65.326939) (xy 224.594415 65.309453) (xy 224.372985 65.244291) (xy 223.577276 66.04)
+ (xy 223.462724 66.04) (xy 222.667015 65.244291) (xy 222.445585 65.309453) (xy 222.323707 65.533098) (xy 222.247801 65.776223)
+ (xy 222.220786 66.029485) (xy 218.875582 66.029485) (xy 218.9028 66.018928) (xy 219.071941 65.911588) (xy 219.217012 65.773439)
+ (xy 219.332487 65.609743) (xy 219.413967 65.426736) (xy 219.458349 65.231387) (xy 219.458968 65.187015) (xy 222.724291 65.187015)
+ (xy 223.52 65.982724) (xy 224.315709 65.187015) (xy 224.250547 64.965585) (xy 224.026902 64.843707) (xy 223.783777 64.767801)
+ (xy 223.530515 64.740786) (xy 223.276849 64.763699) (xy 223.032527 64.835659) (xy 222.806939 64.953902) (xy 222.789453 64.965585)
+ (xy 222.724291 65.187015) (xy 219.458968 65.187015) (xy 219.461544 65.002577) (xy 219.422634 64.806065) (xy 219.346295 64.620854)
+ (xy 219.235436 64.453998) (xy 219.094279 64.311852) (xy 218.928201 64.199831) (xy 218.743527 64.122201) (xy 218.547293 64.08192)
+ (xy 218.346971 64.080521) (xy 218.150193 64.118059) (xy 217.964453 64.193103) (xy 217.796827 64.302794) (xy 217.653699 64.442955)
+ (xy 217.540521 64.608247) (xy 217.461604 64.792375) (xy 217.419954 64.988323) (xy 217.417157 65.188631) (xy 204.126397 65.188631)
+ (xy 204.019403 64.929045) (xy 203.763825 64.544369) (xy 203.438397 64.216661) (xy 203.055515 63.958404) (xy 202.629762 63.779434)
+ (xy 202.177356 63.686568) (xy 201.715528 63.683344) (xy 201.261869 63.769884) (xy 200.833659 63.942892) (xy 200.447208 64.195779)
+ (xy 200.117236 64.518911) (xy 199.856312 64.899981) (xy 199.674374 65.324473) (xy 199.578353 65.77622) (xy 199.571904 66.238015)
+ (xy 194.491951 66.238015) (xy 194.502261 66.192639) (xy 194.506052 65.921157) (xy 194.459885 65.687999) (xy 194.36931 65.468247)
+ (xy 194.237777 65.270274) (xy 194.070296 65.10162) (xy 193.873246 64.968708) (xy 193.654132 64.876601) (xy 193.421301 64.828808)
+ (xy 193.183622 64.827148) (xy 192.950147 64.871686) (xy 192.729768 64.960725) (xy 192.530882 65.090872) (xy 192.497786 65.123282)
+ (xy 192.483778 65.096937) (xy 192.45547 65.042325) (xy 192.453286 65.03959) (xy 192.451642 65.036497) (xy 192.412765 64.988828)
+ (xy 192.374391 64.940758) (xy 192.369584 64.935883) (xy 192.369503 64.935784) (xy 192.369411 64.935708) (xy 192.367863 64.934138)
+ (xy 191.478862 64.045138) (xy 191.431353 64.006113) (xy 191.384212 63.966557) (xy 191.381143 63.96487) (xy 191.378437 63.962647)
+ (xy 191.324209 63.93357) (xy 191.270326 63.903948) (xy 191.26699 63.90289) (xy 191.263902 63.901234) (xy 191.205056 63.883243)
+ (xy 191.146448 63.864652) (xy 191.142968 63.864262) (xy 191.13962 63.863238) (xy 191.078422 63.857021) (xy 191.017297 63.850165)
+ (xy 191.010453 63.850117) (xy 191.010324 63.850104) (xy 191.010203 63.850115) (xy 191.008 63.8501) (xy 186.69 63.8501)
+ (xy 186.628783 63.856102) (xy 186.567507 63.861463) (xy 186.564143 63.86244) (xy 186.560659 63.862782) (xy 186.501758 63.880565)
+ (xy 186.442706 63.897722) (xy 186.4396 63.899332) (xy 186.436245 63.900345) (xy 186.381901 63.92924) (xy 186.327325 63.95753)
+ (xy 186.32459 63.959714) (xy 186.321497 63.961358) (xy 186.273822 64.00024) (xy 186.225757 64.03861) (xy 186.220883 64.043416)
+ (xy 186.220784 64.043497) (xy 186.220708 64.043589) (xy 186.219137 64.045138) (xy 185.389626 64.87465) (xy 185.166301 64.828808)
+ (xy 184.928622 64.827148) (xy 184.695147 64.871686) (xy 184.474768 64.960725) (xy 184.275882 65.090872) (xy 184.106062 65.257172)
+ (xy 183.971778 65.45329) (xy 183.878143 65.671755) (xy 183.828726 65.904246) (xy 183.825407 66.141908) (xy 178.880453 66.141908)
+ (xy 178.885101 65.80908) (xy 178.795396 65.356037) (xy 178.619403 64.929045) (xy 178.363825 64.544369) (xy 178.038397 64.216661)
+ (xy 177.655515 63.958404) (xy 177.229762 63.779434) (xy 176.777356 63.686568) (xy 176.315528 63.683344) (xy 175.861869 63.769884)
+ (xy 175.433659 63.942892) (xy 175.047208 64.195779) (xy 174.717236 64.518911) (xy 174.456312 64.899981) (xy 174.274374 65.324473)
+ (xy 174.178353 65.77622) (xy 174.171904 66.238015) (xy 170.751111 66.238015) (xy 170.757101 65.80908) (xy 170.667396 65.356037)
+ (xy 170.491403 64.929045) (xy 170.235825 64.544369) (xy 169.910397 64.216661) (xy 169.527515 63.958404) (xy 169.101762 63.779434)
+ (xy 168.649356 63.686568) (xy 168.187528 63.683344) (xy 167.733869 63.769884) (xy 167.305659 63.942892) (xy 166.919208 64.195779)
+ (xy 166.589236 64.518911) (xy 166.328312 64.899981) (xy 166.146374 65.324473) (xy 166.050353 65.77622) (xy 166.043904 66.238015)
+ (xy 160.963951 66.238015) (xy 160.974261 66.192639) (xy 160.978052 65.921157) (xy 160.931885 65.687999) (xy 160.84131 65.468247)
+ (xy 160.709777 65.270274) (xy 160.542296 65.10162) (xy 160.345246 64.968708) (xy 160.126132 64.876601) (xy 159.893301 64.828808)
+ (xy 159.655622 64.827148) (xy 159.422147 64.871686) (xy 159.201768 64.960725) (xy 159.0095 65.086541) (xy 159.0095 64.897)
+ (xy 159.003726 64.838107) (xy 158.99857 64.779179) (xy 158.997631 64.775946) (xy 158.997302 64.772593) (xy 158.980191 64.715917)
+ (xy 158.963695 64.659139) (xy 158.962146 64.656151) (xy 158.961172 64.652924) (xy 158.933403 64.6007) (xy 158.906169 64.548158)
+ (xy 158.904065 64.545522) (xy 158.902486 64.542553) (xy 158.865142 64.496765) (xy 158.828182 64.450466) (xy 158.823556 64.445775)
+ (xy 158.82348 64.445682) (xy 158.823394 64.445611) (xy 158.821902 64.444098) (xy 158.186902 63.809098) (xy 158.141132 63.771502)
+ (xy 158.095861 63.733515) (xy 158.092915 63.731895) (xy 158.090308 63.729754) (xy 158.038091 63.701756) (xy 157.98632 63.673294)
+ (xy 157.983113 63.672277) (xy 157.980141 63.670683) (xy 157.923557 63.653384) (xy 157.867167 63.635496) (xy 157.863816 63.63512)
+ (xy 157.8606 63.634137) (xy 157.801815 63.628166) (xy 157.742943 63.621562) (xy 157.736358 63.621516) (xy 157.736236 63.621504)
+ (xy 157.736123 63.621515) (xy 157.734 63.6215) (xy 150.876 63.6215) (xy 150.817107 63.627274) (xy 150.758179 63.63243)
+ (xy 150.754946 63.633369) (xy 150.751593 63.633698) (xy 150.694917 63.650809) (xy 150.638139 63.667305) (xy 150.635151 63.668854)
+ (xy 150.631924 63.669828) (xy 150.5797 63.697597) (xy 150.527158 63.724831) (xy 150.524522 63.726935) (xy 150.521553 63.728514)
+ (xy 150.475765 63.765858) (xy 150.429466 63.802818) (xy 150.424775 63.807444) (xy 150.424682 63.80752) (xy 150.424611 63.807606)
+ (xy 150.423098 63.809098) (xy 149.534098 64.698098) (xy 149.496502 64.743868) (xy 149.458515 64.789139) (xy 149.456895 64.792085)
+ (xy 149.454754 64.794692) (xy 149.426756 64.846909) (xy 149.398294 64.89868) (xy 149.397277 64.901887) (xy 149.395683 64.904859)
+ (xy 149.378384 64.961443) (xy 149.360496 65.017833) (xy 149.36012 65.021184) (xy 149.359137 65.0244) (xy 149.353166 65.083185)
+ (xy 149.346562 65.142057) (xy 149.346516 65.148642) (xy 149.346504 65.148764) (xy 149.346515 65.148877) (xy 149.3465 65.151)
+ (xy 149.3465 67.366262) (xy 149.280339 67.371537) (xy 149.158795 67.409178) (xy 149.052549 67.479189) (xy 148.970014 67.576028)
+ (xy 148.917725 67.692026) (xy 148.899823 67.818) (xy 144.549989 67.818) (xy 144.793349 67.586251) (xy 145.059568 67.208862)
+ (xy 145.247415 66.78695) (xy 145.349735 66.336588) (xy 145.357101 65.80908) (xy 145.267396 65.356037) (xy 145.091403 64.929045)
+ (xy 144.835825 64.544369) (xy 144.510397 64.216661) (xy 144.127515 63.958404) (xy 143.701762 63.779434) (xy 143.249356 63.686568)
+ (xy 142.787528 63.683344) (xy 142.333869 63.769884) (xy 141.905659 63.942892) (xy 141.519208 64.195779) (xy 141.189236 64.518911)
+ (xy 140.928312 64.899981) (xy 140.746374 65.324473) (xy 140.650353 65.77622) (xy 140.643904 66.238015) (xy 137.223111 66.238015)
+ (xy 137.229101 65.80908) (xy 137.139396 65.356037) (xy 136.963403 64.929045) (xy 136.707825 64.544369) (xy 136.382397 64.216661)
+ (xy 135.999515 63.958404) (xy 135.573762 63.779434) (xy 135.121356 63.686568) (xy 134.659528 63.683344) (xy 134.205869 63.769884)
+ (xy 133.777659 63.942892) (xy 133.391208 64.195779) (xy 133.061236 64.518911) (xy 132.800312 64.899981) (xy 132.618374 65.324473)
+ (xy 132.522353 65.77622) (xy 132.515904 66.238015) (xy 127.435951 66.238015) (xy 127.446261 66.192639) (xy 127.450052 65.921157)
+ (xy 127.403885 65.687999) (xy 127.31331 65.468247) (xy 127.181777 65.270274) (xy 127.014296 65.10162) (xy 126.817246 64.968708)
+ (xy 126.598132 64.876601) (xy 126.365301 64.828808) (xy 126.127622 64.827148) (xy 125.894147 64.871686) (xy 125.673768 64.960725)
+ (xy 125.475578 65.090417) (xy 125.47057 65.033179) (xy 125.469631 65.029946) (xy 125.469302 65.026593) (xy 125.452191 64.969917)
+ (xy 125.435695 64.913139) (xy 125.434146 64.910151) (xy 125.433172 64.906924) (xy 125.405403 64.8547) (xy 125.378169 64.802158)
+ (xy 125.376065 64.799522) (xy 125.374486 64.796553) (xy 125.337142 64.750765) (xy 125.300182 64.704466) (xy 125.295556 64.699775)
+ (xy 125.29548 64.699682) (xy 125.295394 64.699611) (xy 125.293902 64.698098) (xy 124.658902 64.063098) (xy 124.613132 64.025502)
+ (xy 124.567861 63.987515) (xy 124.564915 63.985895) (xy 124.562308 63.983754) (xy 124.510091 63.955756) (xy 124.45832 63.927294)
+ (xy 124.455113 63.926277) (xy 124.452141 63.924683) (xy 124.395557 63.907384) (xy 124.339167 63.889496) (xy 124.335816 63.88912)
+ (xy 124.3326 63.888137) (xy 124.273815 63.882166) (xy 124.214943 63.875562) (xy 124.208358 63.875516) (xy 124.208236 63.875504)
+ (xy 124.208123 63.875515) (xy 124.206 63.8755) (xy 119.507 63.8755) (xy 119.448016 63.881283) (xy 119.389179 63.886431)
+ (xy 119.385951 63.887369) (xy 119.382593 63.887698) (xy 119.325876 63.904822) (xy 119.269139 63.921305) (xy 119.266152 63.922854)
+ (xy 119.262924 63.923828) (xy 119.21066 63.951617) (xy 119.158158 63.978832) (xy 119.155526 63.980933) (xy 119.152553 63.982514)
+ (xy 119.106731 64.019885) (xy 119.060465 64.056819) (xy 119.055775 64.061444) (xy 119.055682 64.06152) (xy 119.055611 64.061606)
+ (xy 119.054098 64.063098) (xy 118.258058 64.859138) (xy 118.110301 64.828808) (xy 117.872622 64.827148) (xy 117.639147 64.871686)
+ (xy 117.418768 64.960725) (xy 117.219882 65.090872) (xy 117.050062 65.257172) (xy 116.915778 65.45329) (xy 116.822143 65.671755)
+ (xy 116.772726 65.904246) (xy 116.769407 66.141908) (xy 116.812314 66.375689) (xy 116.899812 66.596683) (xy 117.028568 66.796474)
+ (xy 117.193678 66.96745) (xy 117.252125 67.008071) (xy 116.894373 67.365823) (xy 115.824 67.365823) (xy 115.752339 67.371537)
+ (xy 115.630795 67.409178) (xy 115.524549 67.479189) (xy 115.442014 67.576028) (xy 115.389725 67.692026) (xy 115.371823 67.818)
+ (xy 111.021989 67.818) (xy 111.265349 67.586251) (xy 111.531568 67.208862) (xy 111.719415 66.78695) (xy 111.821735 66.336588)
+ (xy 111.829101 65.80908) (xy 111.739396 65.356037) (xy 111.563403 64.929045) (xy 111.307825 64.544369) (xy 110.982397 64.216661)
+ (xy 110.599515 63.958404) (xy 110.173762 63.779434) (xy 109.721356 63.686568) (xy 109.259528 63.683344) (xy 108.805869 63.769884)
+ (xy 108.377659 63.942892) (xy 107.991208 64.195779) (xy 107.661236 64.518911) (xy 107.400312 64.899981) (xy 107.218374 65.324473)
+ (xy 107.122353 65.77622) (xy 107.115904 66.238015) (xy 103.8963 66.238015) (xy 103.8963 64.476401) (xy 103.875894 64.373813)
+ (xy 103.835866 64.277177) (xy 103.777755 64.190207) (xy 103.703793 64.116245) (xy 103.616823 64.058134) (xy 103.520187 64.018106)
+ (xy 103.417599 63.9977) (xy 101.13825 63.9977) (xy 101.0055 64.13045) (xy 100.9245 64.13045) (xy 100.79175 63.9977)
+ (xy 98.608426 63.9977) (xy 98.726507 63.477966) (xy 98.73527 62.850334) (xy 99.004942 62.850334) (xy 99.266617 63.239526)
+ (xy 99.768741 63.524623) (xy 100.316836 63.706283) (xy 100.88984 63.777524) (xy 101.465733 63.735609) (xy 102.022382 63.582148)
+ (xy 102.538397 63.323039) (xy 102.663383 63.239526) (xy 102.925058 62.850334) (xy 100.965 60.890276) (xy 99.004942 62.850334)
+ (xy 98.73527 62.850334) (xy 98.735422 62.839514) (xy 98.692215 62.621305) (xy 98.947666 62.793058) (xy 100.907724 60.833)
+ (xy 101.022276 60.833) (xy 102.982334 62.793058) (xy 103.064222 62.738) (xy 222.305823 62.738) (xy 222.305823 64.262)
+ (xy 222.311537 64.333661) (xy 222.349178 64.455205) (xy 222.419189 64.561451) (xy 222.516028 64.643986) (xy 222.632026 64.696275)
+ (xy 222.758 64.714177) (xy 224.282 64.714177) (xy 224.353661 64.708463) (xy 224.475205 64.670822) (xy 224.581451 64.600811)
+ (xy 224.663986 64.503972) (xy 224.716275 64.387974) (xy 224.734177 64.262) (xy 224.734177 62.738) (xy 224.728463 62.666339)
+ (xy 224.690822 62.544795) (xy 224.620811 62.438549) (xy 224.523972 62.356014) (xy 224.407974 62.303725) (xy 224.282 62.285823)
+ (xy 222.758 62.285823) (xy 222.686339 62.291537) (xy 222.564795 62.329178) (xy 222.458549 62.399189) (xy 222.376014 62.496028)
+ (xy 222.323725 62.612026) (xy 222.305823 62.738) (xy 103.064222 62.738) (xy 103.371526 62.531383) (xy 103.656623 62.029259)
+ (xy 103.838283 61.481164) (xy 103.909524 60.90816) (xy 103.867609 60.332267) (xy 103.714148 59.775618) (xy 103.455039 59.259603)
+ (xy 103.371526 59.134617) (xy 102.982334 58.872942) (xy 101.022276 60.833) (xy 100.907724 60.833) (xy 98.947666 58.872942)
+ (xy 98.558474 59.134617) (xy 98.273377 59.636741) (xy 98.091717 60.184836) (xy 98.020476 60.75784) (xy 98.057102 61.261069)
+ (xy 97.71064 60.91218) (xy 97.247231 60.599606) (xy 96.731935 60.382996) (xy 96.184379 60.270599) (xy 95.62542 60.266696)
+ (xy 95.076348 60.371437) (xy 94.558078 60.580832) (xy 94.09035 60.886905) (xy 93.690979 61.277998) (xy 93.375178 61.739214)
+ (xy 93.154975 62.252985) (xy 93.038758 62.799743) (xy 93.030954 63.358661) (xy 71.85 63.358661) (xy 71.85 58.815666)
+ (xy 99.004942 58.815666) (xy 100.965 60.775724) (xy 102.925058 58.815666) (xy 102.663383 58.426474) (xy 102.161259 58.141377)
+ (xy 101.613164 57.959717) (xy 101.04016 57.888476) (xy 100.464267 57.930391) (xy 99.907618 58.083852) (xy 99.391603 58.342961)
+ (xy 99.266617 58.426474) (xy 99.004942 58.815666) (xy 71.85 58.815666) (xy 71.85 56.5205) (xy 203.958315 56.5205)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 76.398418 118.984858) (xy 76.384276 118.999) (xy 76.398418 119.013142) (xy 76.341142 119.070418) (xy 76.327 119.056276)
+ (xy 76.312858 119.070418) (xy 76.255582 119.013142) (xy 76.269724 118.999) (xy 76.255582 118.984858) (xy 76.312858 118.927582)
+ (xy 76.327 118.941724) (xy 76.341142 118.927582)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 110.024099 114.5231) (xy 108.912345 114.5231) (xy 108.923967 114.496996) (xy 108.968349 114.301647) (xy 108.971544 114.072837)
+ (xy 108.932634 113.876325) (xy 108.856295 113.691114) (xy 108.745436 113.524258) (xy 108.604279 113.382112) (xy 108.438201 113.270091)
+ (xy 108.253527 113.192461) (xy 108.057293 113.15218) (xy 107.856971 113.150781) (xy 107.660193 113.188319) (xy 107.474453 113.263363)
+ (xy 107.306827 113.373054) (xy 107.163699 113.513215) (xy 107.050521 113.678507) (xy 106.971604 113.862635) (xy 106.929954 114.058583)
+ (xy 106.927157 114.258891) (xy 106.96332 114.455926) (xy 106.989916 114.5231) (xy 106.045 114.5231) (xy 105.983779 114.529103)
+ (xy 105.922507 114.534463) (xy 105.919143 114.53544) (xy 105.915659 114.535782) (xy 105.856758 114.553565) (xy 105.797706 114.570722)
+ (xy 105.7946 114.572332) (xy 105.791245 114.573345) (xy 105.736901 114.60224) (xy 105.682325 114.63053) (xy 105.67959 114.632714)
+ (xy 105.676497 114.634358) (xy 105.628822 114.67324) (xy 105.580757 114.71161) (xy 105.575883 114.716416) (xy 105.575784 114.716497)
+ (xy 105.575708 114.716589) (xy 105.574137 114.718138) (xy 104.499176 115.7931) (xy 101.609425 115.7931) (xy 101.645374 115.770286)
+ (xy 101.772408 115.649313) (xy 101.873526 115.505969) (xy 101.944876 115.345714) (xy 101.98374 115.174653) (xy 101.986538 114.97429)
+ (xy 101.952466 114.80221) (xy 101.885618 114.640026) (xy 101.788542 114.493914) (xy 101.664935 114.369441) (xy 101.519504 114.271347)
+ (xy 101.357791 114.203369) (xy 101.185953 114.168096) (xy 101.010537 114.166871) (xy 100.838224 114.199742) (xy 100.675577 114.265455)
+ (xy 100.528791 114.361509) (xy 100.403458 114.484244) (xy 100.304351 114.628986) (xy 100.235246 114.790221) (xy 100.198774 114.961809)
+ (xy 100.196324 115.137212) (xy 100.227991 115.309751) (xy 100.292568 115.472852) (xy 100.387594 115.620305) (xy 100.509452 115.746492)
+ (xy 100.576512 115.7931) (xy 96.275425 115.7931) (xy 96.311374 115.770286) (xy 96.438408 115.649313) (xy 96.539526 115.505969)
+ (xy 96.610876 115.345714) (xy 96.64974 115.174653) (xy 96.652538 114.97429) (xy 96.618466 114.80221) (xy 96.551618 114.640026)
+ (xy 96.454542 114.493914) (xy 96.330935 114.369441) (xy 96.185504 114.271347) (xy 96.11569 114.242) (xy 97.917 114.242)
+ (xy 97.970043 114.236799) (xy 98.02314 114.232153) (xy 98.026051 114.231307) (xy 98.029073 114.231011) (xy 98.080123 114.215598)
+ (xy 98.13128 114.200736) (xy 98.133973 114.19934) (xy 98.136878 114.198463) (xy 98.183949 114.173435) (xy 98.231257 114.148913)
+ (xy 98.233627 114.147021) (xy 98.236307 114.145596) (xy 98.277605 114.111914) (xy 98.319265 114.078657) (xy 98.323492 114.074489)
+ (xy 98.323574 114.074422) (xy 98.323636 114.074347) (xy 98.325001 114.073001) (xy 99.28211 113.115891) (xy 99.815157 113.115891)
+ (xy 99.85132 113.312926) (xy 99.925065 113.499185) (xy 100.033583 113.667573) (xy 100.172742 113.811676) (xy 100.33724 113.926005)
+ (xy 100.520812 114.006205) (xy 100.716465 114.049222) (xy 100.916748 114.053418) (xy 101.114031 114.018631) (xy 101.3008 113.946188)
+ (xy 101.469941 113.838848) (xy 101.615012 113.700699) (xy 101.730487 113.537003) (xy 101.811967 113.353996) (xy 101.856349 113.158647)
+ (xy 101.859544 112.929837) (xy 101.820634 112.733325) (xy 101.744295 112.548114) (xy 101.633436 112.381258) (xy 101.492279 112.239112)
+ (xy 101.326201 112.127091) (xy 101.141527 112.049461) (xy 100.945293 112.00918) (xy 100.744971 112.007781) (xy 100.548193 112.045319)
+ (xy 100.362453 112.120363) (xy 100.194827 112.230054) (xy 100.051699 112.370215) (xy 99.938521 112.535507) (xy 99.859604 112.719635)
+ (xy 99.817954 112.915583) (xy 99.815157 113.115891) (xy 99.28211 113.115891) (xy 100.442001 111.956) (xy 107.456998 111.956)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 96.765827 111.341054) (xy 96.622699 111.481215) (xy 96.509521 111.646507) (xy 96.430604 111.830635) (xy 96.388954 112.026583)
+ (xy 96.386157 112.226891) (xy 96.42232 112.423926) (xy 96.496065 112.610185) (xy 96.604583 112.778573) (xy 96.743742 112.922676)
+ (xy 96.90824 113.037005) (xy 97.024964 113.088) (xy 95.434909 113.088) (xy 95.442261 113.055639) (xy 95.446052 112.784157)
+ (xy 95.399885 112.550999) (xy 95.30931 112.331247) (xy 95.177777 112.133274) (xy 95.010296 111.96462) (xy 94.813246 111.831708)
+ (xy 94.594132 111.739601) (xy 94.361301 111.691808) (xy 94.123622 111.690148) (xy 93.890147 111.734686) (xy 93.669768 111.823725)
+ (xy 93.470882 111.953872) (xy 93.301062 112.120172) (xy 93.166778 112.31629) (xy 93.073143 112.534755) (xy 93.023726 112.767246)
+ (xy 93.020407 113.004908) (xy 93.063314 113.238689) (xy 93.150812 113.459683) (xy 93.279568 113.659474) (xy 93.444678 113.83045)
+ (xy 93.639853 113.9661) (xy 93.857659 114.061257) (xy 94.052063 114.104) (xy 92.754765 114.104) (xy 92.794493 114.077455)
+ (xy 92.868455 114.003493) (xy 92.926566 113.916523) (xy 92.966594 113.819887) (xy 92.987 113.717299) (xy 92.987 113.07625)
+ (xy 92.85425 112.9435) (xy 91.7345 112.9435) (xy 91.7345 112.9635) (xy 91.6535 112.9635) (xy 91.6535 112.9435)
+ (xy 90.53375 112.9435) (xy 90.401 113.07625) (xy 90.401 113.717299) (xy 90.421406 113.819887) (xy 90.461434 113.916523)
+ (xy 90.519545 114.003493) (xy 90.593507 114.077455) (xy 90.633235 114.104) (xy 90.409001 114.104) (xy 88.522248 112.217247)
+ (xy 88.524043 112.088701) (xy 90.401 112.088701) (xy 90.401 112.72975) (xy 90.53375 112.8625) (xy 91.6535 112.8625)
+ (xy 91.6535 111.74275) (xy 91.7345 111.74275) (xy 91.7345 112.8625) (xy 92.85425 112.8625) (xy 92.987 112.72975)
+ (xy 92.987 112.088701) (xy 92.966594 111.986113) (xy 92.926566 111.889477) (xy 92.868455 111.802507) (xy 92.794493 111.728545)
+ (xy 92.707523 111.670434) (xy 92.610887 111.630406) (xy 92.508299 111.61) (xy 91.86725 111.61) (xy 91.7345 111.74275)
+ (xy 91.6535 111.74275) (xy 91.52075 111.61) (xy 90.879701 111.61) (xy 90.777113 111.630406) (xy 90.680477 111.670434)
+ (xy 90.593507 111.728545) (xy 90.519545 111.802507) (xy 90.461434 111.889477) (xy 90.421406 111.986113) (xy 90.401 112.088701)
+ (xy 88.524043 112.088701) (xy 88.524538 112.05329) (xy 88.490466 111.88121) (xy 88.423618 111.719026) (xy 88.326542 111.572914)
+ (xy 88.202935 111.448441) (xy 88.057504 111.350347) (xy 87.98769 111.321) (xy 96.796473 111.321)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 76.398418 111.364858) (xy 76.384276 111.379) (xy 76.398418 111.393142) (xy 76.341142 111.450418) (xy 76.327 111.436276)
+ (xy 76.312858 111.450418) (xy 76.255582 111.393142) (xy 76.269724 111.379) (xy 76.255582 111.364858) (xy 76.312858 111.307582)
+ (xy 76.327 111.321724) (xy 76.341142 111.307582)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 80.057365 106.070633) (xy 80.032885 105.946999) (xy 79.94231 105.727247) (xy 79.810777 105.529274) (xy 79.643296 105.36062)
+ (xy 79.446246 105.227708) (xy 79.227132 105.135601) (xy 78.994301 105.087808) (xy 78.756622 105.086148) (xy 78.523147 105.130686)
+ (xy 78.302768 105.219725) (xy 78.103882 105.349872) (xy 77.934062 105.516172) (xy 77.799778 105.71229) (xy 77.706143 105.930755)
+ (xy 77.656726 106.163246) (xy 77.653407 106.400908) (xy 77.696314 106.634689) (xy 77.783812 106.855683) (xy 77.912568 107.055474)
+ (xy 78.077678 107.22645) (xy 78.272853 107.3621) (xy 78.490659 107.457257) (xy 78.7228 107.508297) (xy 78.960433 107.513275)
+ (xy 79.194508 107.472001) (xy 79.416108 107.386048) (xy 79.616792 107.25869) (xy 79.687 107.191832) (xy 79.687 107.94463)
+ (xy 79.643296 107.90062) (xy 79.446246 107.767708) (xy 79.227132 107.675601) (xy 78.994301 107.627808) (xy 78.756622 107.626148)
+ (xy 78.523147 107.670686) (xy 78.302768 107.759725) (xy 78.103882 107.889872) (xy 77.934062 108.056172) (xy 77.799778 108.25229)
+ (xy 77.706143 108.470755) (xy 77.656726 108.703246) (xy 77.653407 108.940908) (xy 77.696314 109.174689) (xy 77.783812 109.395683)
+ (xy 77.912568 109.595474) (xy 77.933352 109.616997) (xy 77.917744 109.625087) (xy 77.915376 109.626978) (xy 77.912693 109.628404)
+ (xy 77.871379 109.662099) (xy 77.829736 109.695342) (xy 77.825512 109.699508) (xy 77.825426 109.699578) (xy 77.82536 109.699658)
+ (xy 77.824 109.700999) (xy 77.188999 110.335999) (xy 77.155144 110.377215) (xy 77.12091 110.418014) (xy 77.11945 110.42067)
+ (xy 77.117522 110.423017) (xy 77.101301 110.453268) (xy 77.057547 110.304585) (xy 76.833902 110.182707) (xy 76.594774 110.108049)
+ (xy 76.814473 110.043341) (xy 77.040061 109.925098) (xy 77.057547 109.913415) (xy 77.122709 109.691985) (xy 76.327 108.896276)
+ (xy 76.312858 108.910418) (xy 76.255582 108.853142) (xy 76.269724 108.839) (xy 76.384276 108.839) (xy 77.179985 109.634709)
+ (xy 77.401415 109.569547) (xy 77.523293 109.345902) (xy 77.599199 109.102777) (xy 77.626214 108.849515) (xy 77.603301 108.595849)
+ (xy 77.531341 108.351527) (xy 77.413098 108.125939) (xy 77.401415 108.108453) (xy 77.179985 108.043291) (xy 76.384276 108.839)
+ (xy 76.269724 108.839) (xy 76.255582 108.824858) (xy 76.312858 108.767582) (xy 76.327 108.781724) (xy 77.122709 107.986015)
+ (xy 77.057547 107.764585) (xy 76.833902 107.642707) (xy 76.590777 107.566801) (xy 76.337515 107.539786) (xy 76.083849 107.562699)
+ (xy 75.839527 107.634659) (xy 75.613939 107.752902) (xy 75.596453 107.764585) (xy 75.531292 107.986013) (xy 75.507 107.961721)
+ (xy 75.507 107.504935) (xy 75.565 107.513177) (xy 77.089 107.513177) (xy 77.160661 107.507463) (xy 77.282205 107.469822)
+ (xy 77.388451 107.399811) (xy 77.470986 107.302972) (xy 77.523275 107.186974) (xy 77.541177 107.061) (xy 77.541177 105.537)
+ (xy 77.535463 105.465339) (xy 77.497822 105.343795) (xy 77.427811 105.237549) (xy 77.330972 105.155014) (xy 77.214974 105.102725)
+ (xy 77.089 105.084823) (xy 76.071178 105.084823) (xy 76.439001 104.717) (xy 81.410998 104.717)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 128.242999 102.516) (xy 128.284186 102.549831) (xy 128.325014 102.58409) (xy 128.32767 102.58555) (xy 128.330017 102.587478)
+ (xy 128.377009 102.612675) (xy 128.423696 102.638341) (xy 128.426589 102.639259) (xy 128.429262 102.640692) (xy 128.48025 102.656281)
+ (xy 128.531035 102.672391) (xy 128.534046 102.672729) (xy 128.536951 102.673617) (xy 128.589982 102.679003) (xy 128.642944 102.684944)
+ (xy 128.64888 102.684985) (xy 128.648986 102.684996) (xy 128.649085 102.684987) (xy 128.651 102.685) (xy 130.953642 102.685)
+ (xy 130.932592 102.784034) (xy 130.930491 102.934534) (xy 130.952601 103.055) (xy 122.936 103.055) (xy 122.882957 103.060201)
+ (xy 122.82986 103.064847) (xy 122.826949 103.065693) (xy 122.823927 103.065989) (xy 122.772877 103.081402) (xy 122.72172 103.096264)
+ (xy 122.719027 103.09766) (xy 122.716122 103.098537) (xy 122.669051 103.123565) (xy 122.621743 103.148087) (xy 122.619373 103.149979)
+ (xy 122.616693 103.151404) (xy 122.575395 103.185086) (xy 122.533735 103.218343) (xy 122.529512 103.222508) (xy 122.529426 103.222578)
+ (xy 122.52936 103.222658) (xy 122.527999 103.224) (xy 122.442999 103.309) (xy 120.762001 103.309) (xy 120.296001 102.842999)
+ (xy 120.254785 102.809144) (xy 120.213986 102.77491) (xy 120.21133 102.77345) (xy 120.208983 102.771522) (xy 120.161956 102.746306)
+ (xy 120.115304 102.720659) (xy 120.112416 102.719743) (xy 120.109738 102.718307) (xy 120.058693 102.702701) (xy 120.007965 102.686609)
+ (xy 120.004955 102.686271) (xy 120.002049 102.685383) (xy 119.949018 102.679997) (xy 119.896056 102.674056) (xy 119.89012 102.674015)
+ (xy 119.890014 102.674004) (xy 119.889915 102.674013) (xy 119.888 102.674) (xy 117.217002 102.674) (xy 118.476001 101.415)
+ (xy 127.141998 101.415)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 120.879699 97.765215) (xy 120.766521 97.930507) (xy 120.687604 98.114635) (xy 120.645954 98.310583) (xy 120.643157 98.510891)
+ (xy 120.67932 98.707926) (xy 120.753065 98.894185) (xy 120.861583 99.062573) (xy 121.000742 99.206676) (xy 121.16524 99.321005)
+ (xy 121.348812 99.401205) (xy 121.544465 99.444222) (xy 121.744748 99.448418) (xy 121.942031 99.413631) (xy 122.1288 99.341188)
+ (xy 122.297941 99.233848) (xy 122.443012 99.095699) (xy 122.558487 98.932003) (xy 122.639967 98.748996) (xy 122.684349 98.553647)
+ (xy 122.687544 98.324837) (xy 122.648634 98.128325) (xy 122.572295 97.943114) (xy 122.461436 97.776258) (xy 122.417486 97.732)
+ (xy 125.617998 97.732) (xy 127.638999 99.753) (xy 118.614002 99.753) (xy 120.635001 97.732) (xy 120.913617 97.732)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.994778 97.83829) (xy 113.901143 98.056755) (xy 113.851726 98.289246) (xy 113.848407 98.526908) (xy 113.891314 98.760689)
+ (xy 113.978812 98.981683) (xy 113.984816 98.991) (xy 113.815 98.991) (xy 113.815 98.59825) (xy 113.68225 98.4655)
+ (xy 112.5625 98.4655) (xy 112.5625 98.4855) (xy 112.4815 98.4855) (xy 112.4815 98.4655) (xy 112.4615 98.4655)
+ (xy 112.4615 98.3845) (xy 112.4815 98.3845) (xy 112.4815 98.3645) (xy 112.5625 98.3645) (xy 112.5625 98.3845)
+ (xy 113.68225 98.3845) (xy 113.815 98.25175) (xy 113.815 97.732) (xy 114.067556 97.732)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.994778 95.29829) (xy 113.901143 95.516755) (xy 113.851726 95.749246) (xy 113.848407 95.986908) (xy 113.891314 96.220689)
+ (xy 113.978812 96.441683) (xy 114.066662 96.578) (xy 113.815 96.578) (xy 113.815 96.05825) (xy 113.68225 95.9255)
+ (xy 112.5625 95.9255) (xy 112.5625 95.9455) (xy 112.4815 95.9455) (xy 112.4815 95.9255) (xy 111.36175 95.9255)
+ (xy 111.229 96.05825) (xy 111.229 96.651775) (xy 111.191743 96.671088) (xy 111.189376 96.672977) (xy 111.186693 96.674404)
+ (xy 111.145368 96.708109) (xy 111.103735 96.741343) (xy 111.099512 96.745508) (xy 111.099426 96.745578) (xy 111.09936 96.745658)
+ (xy 111.097999 96.747) (xy 111.067 96.777999) (xy 111.067 95.997002) (xy 111.290626 95.773376) (xy 111.36175 95.8445)
+ (xy 112.4815 95.8445) (xy 112.4815 95.8245) (xy 112.5625 95.8245) (xy 112.5625 95.8445) (xy 113.68225 95.8445)
+ (xy 113.815 95.71175) (xy 113.815 95.192) (xy 114.067556 95.192)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.901143 92.976755) (xy 113.851726 93.209246) (xy 113.848407 93.446908) (xy 113.891314 93.680689) (xy 113.978812 93.901683)
+ (xy 114.066662 94.038) (xy 113.815 94.038) (xy 113.815 93.51825) (xy 113.68225 93.3855) (xy 112.5625 93.3855)
+ (xy 112.5625 93.4055) (xy 112.4815 93.4055) (xy 112.4815 93.3855) (xy 111.36175 93.3855) (xy 111.229 93.51825)
+ (xy 111.229 94.159299) (xy 111.236455 94.196777) (xy 111.230735 94.201343) (xy 111.226508 94.205511) (xy 111.226426 94.205578)
+ (xy 111.226364 94.205653) (xy 111.224999 94.206999) (xy 110.559 94.872998) (xy 110.559 93.711002) (xy 111.229 93.041001)
+ (xy 111.229 93.17175) (xy 111.36175 93.3045) (xy 112.4815 93.3045) (xy 112.4815 93.2845) (xy 112.5625 93.2845)
+ (xy 112.5625 93.3045) (xy 113.68225 93.3045) (xy 113.815 93.17175) (xy 113.815 92.779) (xy 113.985902 92.779)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 130.293827 89.116054) (xy 130.150699 89.256215) (xy 130.037521 89.421507) (xy 129.958604 89.605635) (xy 129.916954 89.801583)
+ (xy 129.914157 90.001891) (xy 129.95032 90.198926) (xy 130.024065 90.385185) (xy 130.075907 90.465628) (xy 130.047014 90.499528)
+ (xy 129.994725 90.615526) (xy 129.976823 90.7415) (xy 129.976823 92.1385) (xy 129.982537 92.210161) (xy 130.020178 92.331705)
+ (xy 130.090189 92.437951) (xy 130.187028 92.520486) (xy 130.303026 92.572775) (xy 130.429 92.590677) (xy 131.318 92.590677)
+ (xy 131.389661 92.584963) (xy 131.511205 92.547322) (xy 131.617451 92.477311) (xy 131.699986 92.380472) (xy 131.730043 92.313794)
+ (xy 131.77507 92.42752) (xy 131.856605 92.554038) (xy 131.961161 92.662309) (xy 132.084756 92.74821) (xy 132.222682 92.808468)
+ (xy 132.369685 92.840789) (xy 132.520167 92.843941) (xy 132.668395 92.817804) (xy 132.808723 92.763375) (xy 132.935807 92.682725)
+ (xy 132.968071 92.652) (xy 134.115998 92.652) (xy 133.364998 93.403) (xy 132.588 93.403) (xy 132.535003 93.408196)
+ (xy 132.481861 93.412846) (xy 132.478946 93.413693) (xy 132.475927 93.413989) (xy 132.424893 93.429397) (xy 132.373721 93.444264)
+ (xy 132.371029 93.445659) (xy 132.368122 93.446537) (xy 132.321012 93.471586) (xy 132.273744 93.496087) (xy 132.271376 93.497978)
+ (xy 132.268693 93.499404) (xy 132.227379 93.533099) (xy 132.185736 93.566342) (xy 132.181512 93.570508) (xy 132.181426 93.570578)
+ (xy 132.18136 93.570658) (xy 132.18 93.571999) (xy 131.417999 94.333999) (xy 131.384144 94.375215) (xy 131.34991 94.416014)
+ (xy 131.34845 94.41867) (xy 131.346522 94.421017) (xy 131.321306 94.468044) (xy 131.295659 94.514696) (xy 131.294743 94.517584)
+ (xy 131.293307 94.520262) (xy 131.280594 94.561845) (xy 131.165054 94.513276) (xy 131.017614 94.483011) (xy 130.867103 94.48196)
+ (xy 130.719254 94.510164) (xy 130.5797 94.566547) (xy 130.492201 94.623805) (xy 130.478032 94.614248) (xy 130.461658 94.593736)
+ (xy 130.457492 94.589512) (xy 130.457422 94.589426) (xy 130.457342 94.58936) (xy 130.456001 94.588) (xy 128.537502 92.6695)
+ (xy 128.79525 92.6695) (xy 128.928 92.53675) (xy 128.928 91.4805) (xy 129.009 91.4805) (xy 129.009 92.53675)
+ (xy 129.14175 92.6695) (xy 129.465299 92.6695) (xy 129.567887 92.649094) (xy 129.664523 92.609066) (xy 129.751493 92.550955)
+ (xy 129.825455 92.476993) (xy 129.883566 92.390023) (xy 129.923594 92.293387) (xy 129.944 92.190799) (xy 129.944 91.61325)
+ (xy 129.81125 91.4805) (xy 129.009 91.4805) (xy 128.928 91.4805) (xy 128.12575 91.4805) (xy 127.993 91.61325)
+ (xy 127.993 92.124998) (xy 126.646001 90.777999) (xy 126.604785 90.744144) (xy 126.563986 90.70991) (xy 126.56133 90.70845)
+ (xy 126.558983 90.706522) (xy 126.52668 90.689201) (xy 127.993 90.689201) (xy 127.993 91.26675) (xy 128.12575 91.3995)
+ (xy 128.928 91.3995) (xy 128.928 90.34325) (xy 129.009 90.34325) (xy 129.009 91.3995) (xy 129.81125 91.3995)
+ (xy 129.944 91.26675) (xy 129.944 90.689201) (xy 129.923594 90.586613) (xy 129.883566 90.489977) (xy 129.825455 90.403007)
+ (xy 129.751493 90.329045) (xy 129.664523 90.270934) (xy 129.567887 90.230906) (xy 129.465299 90.2105) (xy 129.14175 90.2105)
+ (xy 129.009 90.34325) (xy 128.928 90.34325) (xy 128.79525 90.2105) (xy 128.471701 90.2105) (xy 128.369113 90.230906)
+ (xy 128.272477 90.270934) (xy 128.185507 90.329045) (xy 128.111545 90.403007) (xy 128.053434 90.489977) (xy 128.013406 90.586613)
+ (xy 127.993 90.689201) (xy 126.52668 90.689201) (xy 126.511956 90.681306) (xy 126.465304 90.655659) (xy 126.462416 90.654743)
+ (xy 126.459738 90.653307) (xy 126.408693 90.637701) (xy 126.357965 90.621609) (xy 126.354955 90.621271) (xy 126.352049 90.620383)
+ (xy 126.299018 90.614997) (xy 126.246056 90.609056) (xy 126.24012 90.609015) (xy 126.240014 90.609004) (xy 126.239915 90.609013)
+ (xy 126.238 90.609) (xy 123.631443 90.609) (xy 123.717526 90.486969) (xy 123.788876 90.326714) (xy 123.82774 90.155653)
+ (xy 123.830538 89.95529) (xy 123.796466 89.78321) (xy 123.774946 89.731) (xy 126.873 89.731) (xy 126.926043 89.725799)
+ (xy 126.97914 89.721153) (xy 126.982051 89.720307) (xy 126.985073 89.720011) (xy 127.036123 89.704598) (xy 127.08728 89.689736)
+ (xy 127.089973 89.68834) (xy 127.092878 89.687463) (xy 127.139949 89.662435) (xy 127.187257 89.637913) (xy 127.189627 89.636021)
+ (xy 127.192307 89.634596) (xy 127.233605 89.600914) (xy 127.275265 89.567657) (xy 127.279492 89.563489) (xy 127.279574 89.563422)
+ (xy 127.279636 89.563347) (xy 127.281001 89.562001) (xy 127.747001 89.096) (xy 130.324473 89.096)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 134.869592 88.560034) (xy 134.867491 88.710534) (xy 134.894662 88.858575) (xy 134.95007 88.99852) (xy 135.031605 89.125038)
+ (xy 135.059 89.153406) (xy 135.059 89.154) (xy 135.062261 89.187254) (xy 135.062864 89.220668) (xy 135.067743 89.243168)
+ (xy 135.069989 89.266073) (xy 135.079647 89.298061) (xy 135.086729 89.330721) (xy 135.095883 89.35184) (xy 135.102537 89.373878)
+ (xy 135.118227 89.403387) (xy 135.131515 89.434042) (xy 135.144595 89.452978) (xy 135.155404 89.473307) (xy 135.176527 89.499206)
+ (xy 135.195517 89.526698) (xy 135.21203 89.542736) (xy 135.226578 89.560574) (xy 135.252326 89.581874) (xy 135.276297 89.605157)
+ (xy 135.29561 89.617682) (xy 135.313346 89.632355) (xy 135.342736 89.648246) (xy 135.370777 89.666432) (xy 135.377958 89.670084)
+ (xy 135.885958 89.924084) (xy 135.901814 89.930159) (xy 135.916696 89.938341) (xy 135.954289 89.950266) (xy 135.991113 89.964376)
+ (xy 136.007848 89.967256) (xy 136.024035 89.972391) (xy 136.032642 89.973356) (xy 134.507998 91.498) (xy 132.969701 91.498)
+ (xy 132.95259 91.480769) (xy 132.845152 91.408302) (xy 132.847533 91.237743) (xy 132.818298 91.090095) (xy 132.760942 90.950937)
+ (xy 132.677648 90.82557) (xy 132.657 90.804777) (xy 132.657 89.535) (xy 132.651799 89.481957) (xy 132.647153 89.42886)
+ (xy 132.646307 89.425949) (xy 132.646011 89.422927) (xy 132.630598 89.371877) (xy 132.615736 89.32072) (xy 132.61434 89.318027)
+ (xy 132.613463 89.315122) (xy 132.588434 89.268049) (xy 132.563913 89.220743) (xy 132.562021 89.218373) (xy 132.560596 89.215693)
+ (xy 132.526914 89.174395) (xy 132.493657 89.132735) (xy 132.489489 89.128508) (xy 132.489422 89.128426) (xy 132.489347 89.128364)
+ (xy 132.488001 89.126999) (xy 131.822002 88.461) (xy 134.890642 88.461)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 149.728458 88.822459) (xy 149.726324 88.975212) (xy 149.757991 89.147751) (xy 149.822568 89.310852) (xy 149.840708 89.339)
+ (xy 140.712002 89.339) (xy 141.336001 88.715) (xy 149.620998 88.715)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 176.220418 87.234858) (xy 176.206276 87.249) (xy 176.956838 87.999562) (xy 177.171767 87.942023) (xy 177.287317 87.729175)
+ (xy 177.359122 87.497874) (xy 177.359193 87.497195) (xy 177.5405 87.678502) (xy 177.5405 87.757) (xy 177.543598 87.788596)
+ (xy 177.541592 87.798034) (xy 177.539491 87.948534) (xy 177.566662 88.096575) (xy 177.606027 88.196) (xy 176.862307 88.196)
+ (xy 176.899562 88.056838) (xy 176.149 87.306276) (xy 176.134858 87.320418) (xy 176.077582 87.263142) (xy 176.091724 87.249)
+ (xy 176.077582 87.234858) (xy 176.134858 87.177582) (xy 176.149 87.191724) (xy 176.163142 87.177582)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 168.600418 87.234858) (xy 168.586276 87.249) (xy 168.600418 87.263142) (xy 168.543142 87.320418) (xy 168.529 87.306276)
+ (xy 168.514858 87.320418) (xy 168.457582 87.263142) (xy 168.471724 87.249) (xy 168.457582 87.234858) (xy 168.514858 87.177582)
+ (xy 168.529 87.191724) (xy 168.543142 87.177582)
+ )
+ )
+ )
+)
diff --git a/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.net b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.net
new file mode 100644
index 0000000..aaa4a1c
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.net
@@ -0,0 +1,2772 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.sch)
+ (date "27/08/2014 18:26:26")
+ (tool "Eeschema (2014-08-25 BZR 5096)-product"))
+ (components
+ (comp (ref U1)
+ (value MCF5213-LQFP100)
+ (footprint lib_smd:VQFP100)
+ (libsource (lib motorola) (part MCF5213-LQFP100))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161C39))
+ (comp (ref C18)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238286))
+ (comp (ref GND1)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 465FE6C5))
+ (comp (ref U2)
+ (value 74AHC1G14)
+ (footprint lib_smd:SOT353)
+ (libsource (lib 74xx) (part 74AHC1G14))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46554FB5))
+ (comp (ref CT1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46545507))
+ (comp (ref RST_SW1)
+ (value SW_PUSH)
+ (footprint discret:SW_PUSH_SMALL)
+ (libsource (lib device) (part SW_PUSH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 465451D4))
+ (comp (ref Y1)
+ (value 8MHz)
+ (footprint discret:HC-18UH)
+ (libsource (lib device) (part CRYSTAL))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462389C7))
+ (comp (ref C2)
+ (value 10pF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462389C0))
+ (comp (ref C1)
+ (value 10pF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462389BC))
+ (comp (ref R1)
+ (value 1M)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462389B6))
+ (comp (ref ALLPST1)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238965))
+ (comp (ref RED1)
+ (value LED_RESET1)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238597))
+ (comp (ref R22)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4623857F))
+ (comp (ref R21)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238545))
+ (comp (ref Q1)
+ (value 3906)
+ (footprint lib_smd:SOT23EBC)
+ (libsource (lib device) (part PNP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238519))
+ (comp (ref R15)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4623847B))
+ (comp (ref D3)
+ (value BAT54)
+ (footprint lib_smd:ST23AK#1)
+ (libsource (lib device) (part DIODE))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4623846D))
+ (comp (ref C3)
+ (value 1nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238468))
+ (comp (ref LV1)
+ (value DS1818)
+ (footprint discret:TO92-INVERT)
+ (libsource (lib special) (part MC34064P))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462383E5))
+ (comp (ref C16)
+ (value 10uF)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462382CE))
+ (comp (ref FB1)
+ (value BEAD)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 462380B8))
+ (comp (ref L1)
+ (value 10uH)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238092))
+ (comp (ref VDDA1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46238079))
+ (comp (ref D1)
+ (value BAT54)
+ (footprint lib_smd:ST23AK#1)
+ (libsource (lib device) (part DIODE))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237F86))
+ (comp (ref ABRT_SW1)
+ (value SW_PUSH)
+ (footprint discret:SW_PUSH_SMALL)
+ (libsource (lib device) (part SW_PUSH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237F50))
+ (comp (ref LEDABRT1)
+ (value RED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237E52))
+ (comp (ref R14)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237E3D))
+ (comp (ref C15)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237E36))
+ (comp (ref R12)
+ (value 20K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237E2F))
+ (comp (ref R7)
+ (value 1K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237E28))
+ (comp (ref C14)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46237DF9))
+ (comp (ref R45)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE50C))
+ (comp (ref C20)
+ (value 1nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE364))
+ (comp (ref C21)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE35C))
+ (comp (ref L2)
+ (value 10uH)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE327))
+ (comp (ref R9)
+ (value 0)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE230))
+ (comp (ref R13)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE054))
+ (comp (ref R11)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE051))
+ (comp (ref R10)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE04B))
+ (comp (ref R8)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE047))
+ (comp (ref R6)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE046))
+ (comp (ref R5)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE041))
+ (comp (ref R4)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BE039))
+ (comp (ref TA-1)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BBA34))
+ (comp (ref R26)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB8C0))
+ (comp (ref CLKOUT1)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB894))
+ (comp (ref R20)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB799))
+ (comp (ref R19)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB798))
+ (comp (ref R18)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB795))
+ (comp (ref R17)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB790))
+ (comp (ref R46)
+ (value 22)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB742))
+ (comp (ref R2)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB661))
+ (comp (ref R25)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB65F))
+ (comp (ref CLK1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB648))
+ (comp (ref CLK0)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB62E))
+ (comp (ref C6)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BB5E5))
+ (comp (ref R16)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BAF5C))
+ (comp (ref BDM_EN1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BAF4F))
+ (comp (ref BDM_PORT1)
+ (value CONN_13X2)
+ (footprint pin_array:pin_array_13x2)
+ (libsource (lib conn) (part CONN_13X2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 461BAEE7))
+ (comp (ref C17)
+ (value 100uF)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161D3C))
+ (comp (ref C12)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CDA))
+ (comp (ref C11)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CD9))
+ (comp (ref C10)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CD8))
+ (comp (ref C9)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CD7))
+ (comp (ref C8)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CD4))
+ (comp (ref C7)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CD3))
+ (comp (ref C5)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CB8))
+ (comp (ref C4)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 46161CB5))
+ (comp (ref VR1)
+ (value LT1129_QPACK)
+ (footprint lib_smd:DPAK5)
+ (libsource (lib regul) (part LT1129_QPACK))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46603376))
+ (comp (ref C26)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46546CA6))
+ (comp (ref RCAN1)
+ (value R)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4654018B))
+ (comp (ref RCAN2)
+ (value R)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46540184))
+ (comp (ref R38)
+ (value 62)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46540164))
+ (comp (ref CAN_TERM1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46540159))
+ (comp (ref RS1)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4654007F))
+ (comp (ref R36)
+ (value 1K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46540063))
+ (comp (ref VREF1)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4654003D))
+ (comp (ref C34)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4653FFFE))
+ (comp (ref U7)
+ (value PCA82C251)
+ (footprint lib_smd:SO8E)
+ (libsource (lib kit-dev-coldfire-xilinx_5213-cache) (part PCA82C251))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4653FF97))
+ (comp (ref TB1)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib conn) (part CONN_2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46530806))
+ (comp (ref J1)
+ (value JACK_2P)
+ (footprint connect:JACK_ALIM)
+ (libsource (lib device) (part JACK_2P))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 465307C6))
+ (comp (ref SW_ONOFF1)
+ (value SWITCH_INV)
+ (footprint discret:SW_SPDT)
+ (libsource (lib device) (part SWITCH_INV))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46530763))
+ (comp (ref F1)
+ (value FUSE)
+ (footprint lib_smd:FSUPCMS)
+ (libsource (lib device) (part FUSE))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46530747))
+ (comp (ref C41)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 465306F6))
+ (comp (ref D7)
+ (value 1N4004)
+ (footprint discret:D5)
+ (libsource (lib device) (part DIODE))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 465306C8))
+ (comp (ref C38)
+ (value 10uF)
+ (footprint discret:C2V8)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 465306B1))
+ (comp (ref LED5)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46530639))
+ (comp (ref R53)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 46530638))
+ (comp (ref C40)
+ (value 220uF)
+ (footprint discret:C2V8)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 465305FE))
+ (comp (ref SW2)
+ (value SW_PUSH)
+ (footprint discret:SW_PUSH_SMALL)
+ (libsource (lib device) (part SW_PUSH))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652DDE7))
+ (comp (ref SW1)
+ (value SW_PUSH)
+ (footprint discret:SW_PUSH_SMALL)
+ (libsource (lib device) (part SW_PUSH))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652DDDF))
+ (comp (ref CAN_EN1)
+ (value CONN_2X2)
+ (footprint pin_array:PIN_ARRAY_2X2)
+ (libsource (lib conn) (part CONN_2X2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BFF1))
+ (comp (ref R47)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BF65))
+ (comp (ref R48)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BF62))
+ (comp (ref R49)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BF5C))
+ (comp (ref R50)
+ (value 4,7K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BF48))
+ (comp (ref PULUPEN1)
+ (value CONN_4X2)
+ (footprint pin_array:pin_array_4x2)
+ (libsource (lib conn) (part CONN_4X2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BF26))
+ (comp (ref COM_SEL1)
+ (value CONN_3)
+ (footprint pin_array:PIN_ARRAY_3X1)
+ (libsource (lib conn) (part CONN_3))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BADD))
+ (comp (ref COM_SEL2)
+ (value CONN_3)
+ (footprint pin_array:PIN_ARRAY_3X1)
+ (libsource (lib conn) (part CONN_3))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BAD4))
+ (comp (ref COM_SEL3)
+ (value CONN_3)
+ (footprint pin_array:PIN_ARRAY_3X1)
+ (libsource (lib conn) (part CONN_3))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652BA65))
+ (comp (ref R30)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B9D5))
+ (comp (ref R35)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B9CC))
+ (comp (ref R23)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B5F4))
+ (comp (ref C45)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4DC))
+ (comp (ref C46)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D9))
+ (comp (ref C36)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D8))
+ (comp (ref C44)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D7))
+ (comp (ref C35)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D6))
+ (comp (ref UART_EN2)
+ (value CONN_4X2)
+ (footprint pin_array:pin_array_4x2)
+ (libsource (lib conn) (part CONN_4X2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D5))
+ (comp (ref UARTCAN2)
+ (value DB9)
+ (footprint connect:DB9FC)
+ (libsource (lib conn) (part DB9))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D4))
+ (comp (ref U8)
+ (value MAX202)
+ (footprint lib_smd:SO16E)
+ (libsource (lib special) (part MAX202))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4D3))
+ (comp (ref C33)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4CA))
+ (comp (ref C28)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C7))
+ (comp (ref C32)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C6))
+ (comp (ref C31)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C5))
+ (comp (ref C30)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C4))
+ (comp (ref UART_EN1)
+ (value CONN_4X2)
+ (footprint pin_array:pin_array_4x2)
+ (libsource (lib conn) (part CONN_4X2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C3))
+ (comp (ref UARTCAN1)
+ (value DB9)
+ (footprint connect:DB9FC)
+ (libsource (lib conn) (part DB9))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C2))
+ (comp (ref U5)
+ (value MAX202)
+ (footprint lib_smd:SO16E)
+ (libsource (lib special) (part MAX202))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B4C1))
+ (comp (ref C27)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B486))
+ (comp (ref C22)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B365))
+ (comp (ref C25)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B35B))
+ (comp (ref C24)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B354))
+ (comp (ref C23)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B33B))
+ (comp (ref UART_EN0)
+ (value CONN_4X2)
+ (footprint pin_array:pin_array_4x2)
+ (libsource (lib conn) (part CONN_4X2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B289))
+ (comp (ref UARTCAN0)
+ (value DB9)
+ (footprint connect:DB9FC)
+ (libsource (lib conn) (part DB9))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B26D))
+ (comp (ref U3)
+ (value MAX202)
+ (footprint lib_smd:SO16E)
+ (libsource (lib special) (part MAX202))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B22B))
+ (comp (ref R34)
+ (value 10K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B111))
+ (comp (ref LED_EN1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B108))
+ (comp (ref LED4)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B0BC))
+ (comp (ref LED3)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B0BB))
+ (comp (ref LED2)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B0B7))
+ (comp (ref LED1)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B0AE))
+ (comp (ref R33)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B06A))
+ (comp (ref R32)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B069))
+ (comp (ref R31)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B067))
+ (comp (ref R28)
+ (value 270)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B061))
+ (comp (ref U4)
+ (value 74HC125)
+ (footprint lib_smd:SO14E)
+ (libsource (lib 74xx) (part 74LS125))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652B03E))
+ (comp (ref C43)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652A9D3))
+ (comp (ref VX_EN1)
+ (value JUMPER)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib device) (part JUMPER))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652A9C4))
+ (comp (ref MCU_PORT1)
+ (value CONN_30X2)
+ (footprint pin_array:PIN_ARRAY_30X2)
+ (libsource (lib conn) (part CONN_30X2))
+ (sheetpath (names /inout_user/) (tstamps /47D80202/))
+ (tstamp 4652A4FB))
+ (comp (ref R64)
+ (value 3,3)
+ (footprint discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 4791D59D))
+ (comp (ref P3)
+ (value CONN_2X2)
+ (footprint pin_array:PIN_ARRAY_2X2)
+ (libsource (lib conn) (part CONN_2X2))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76EB2))
+ (comp (ref U9)
+ (value XCR3256-TQ144)
+ (footprint lib_smd:TQFP144)
+ (libsource (lib xilinx) (part XCR3256-TQ144))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 470F38BE))
+ (comp (ref P4)
+ (value CONN_20X2)
+ (footprint pin_array:PIN_ARRAY_20X2)
+ (libsource (lib conn) (part CONN_20X2))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46ADE55A))
+ (comp (ref R57)
+ (value 4K7)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BCA))
+ (comp (ref D8)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BC4))
+ (comp (ref R62)
+ (value 1K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BC3))
+ (comp (ref C61)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BBC))
+ (comp (ref C60)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BBB))
+ (comp (ref C59)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BBA))
+ (comp (ref C54)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BB5))
+ (comp (ref C53)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BB4))
+ (comp (ref C52)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BB3))
+ (comp (ref C51)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BB2))
+ (comp (ref C58)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BB1))
+ (comp (ref C57)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BB0))
+ (comp (ref C56)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BAF))
+ (comp (ref C55)
+ (value 100nF)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part C))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BAE))
+ (comp (ref D9)
+ (value LED)
+ (footprint lib_smd:SM1206POL)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BA8))
+ (comp (ref R63)
+ (value 1K)
+ (footprint lib_smd:SM0805)
+ (libsource (lib device) (part R))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BA7))
+ (comp (ref P1)
+ (value CONN_6)
+ (footprint pin_array:PIN_ARRAY-6X1)
+ (libsource (lib conn) (part CONN_6))
+ (sheetpath (names /xilinx/) (tstamps /47D80204/))
+ (tstamp 46A76BA6)))
+ (libparts
+ (libpart (lib device) (part C)
+ (description "Condensateur non polarise")
+ (footprints
+ (fp SM*)
+ (fp C?)
+ (fp C1-1))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CP)
+ (aliases
+ (alias CAPAPOL))
+ (description "Condensateur polarise")
+ (footprints
+ (fp CP*)
+ (fp SM*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CRYSTAL)
+ (fields
+ (field (name Reference) X)
+ (field (name Value) CRYSTAL))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part DIODE)
+ (description "Diode simple")
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODE))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part FUSE)
+ (fields
+ (field (name Reference) F)
+ (field (name Value) FUSE))
+ (pins
+ (pin (num 1) (name ~) (type input))
+ (pin (num 2) (name ~) (type input))))
+ (libpart (lib device) (part INDUCTOR)
+ (fields
+ (field (name Reference) L)
+ (field (name Value) INDUCTOR))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part JACK_2P)
+ (fields
+ (field (name Reference) J)
+ (field (name Value) JACK_2P))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))
+ (pin (num 3) (name ~) (type passive))))
+ (libpart (lib device) (part JUMPER)
+ (fields
+ (field (name Reference) JP)
+ (field (name Value) JUMPER))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part LED)
+ (footprints
+ (fp LED-3MM)
+ (fp LED-5MM)
+ (fp LED-10MM)
+ (fp LED-0603)
+ (fp LED-0805)
+ (fp LED-1206)
+ (fp LEDV))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) LED))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part PNP)
+ (docs transistors/bipolar/*.*)
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) PNP))
+ (pins
+ (pin (num 1) (name E) (type passive))
+ (pin (num 2) (name B) (type input))
+ (pin (num 3) (name C) (type passive))))
+ (libpart (lib device) (part R)
+ (description Resistance)
+ (footprints
+ (fp R?)
+ (fp SM0603)
+ (fp SM0805)
+ (fp R?-*)
+ (fp SM1206))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part SW_PUSH)
+ (description "Push Button")
+ (fields
+ (field (name Reference) SW)
+ (field (name Value) SW_PUSH))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part SWITCH_INV)
+ (description "Switch inverseur")
+ (fields
+ (field (name Reference) SW)
+ (field (name Value) SWITCH_INV))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))))
+ (libpart (lib conn) (part CONN_1)
+ (description "1 pin")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_1))
+ (pins
+ (pin (num 1) (name 1) (type passive))))
+ (libpart (lib conn) (part CONN_13X2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_13X2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name P2) (type passive))
+ (pin (num 3) (name P3) (type passive))
+ (pin (num 4) (name P4) (type passive))
+ (pin (num 5) (name P5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))
+ (pin (num 10) (name P10) (type passive))
+ (pin (num 11) (name P11) (type passive))
+ (pin (num 12) (name P12) (type passive))
+ (pin (num 13) (name P13) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P20) (type passive))
+ (pin (num 25) (name P24) (type passive))
+ (pin (num 26) (name P22) (type passive))))
+ (libpart (lib conn) (part CONN_2)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib conn) (part CONN_20X2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_20X2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name P2) (type passive))
+ (pin (num 3) (name P3) (type passive))
+ (pin (num 4) (name P4) (type passive))
+ (pin (num 5) (name P5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))
+ (pin (num 10) (name P10) (type passive))
+ (pin (num 11) (name P11) (type passive))
+ (pin (num 12) (name P12) (type passive))
+ (pin (num 13) (name P13) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P24) (type passive))
+ (pin (num 25) (name ~) (type passive))
+ (pin (num 26) (name P26) (type passive))
+ (pin (num 27) (name P27) (type passive))
+ (pin (num 28) (name P28) (type passive))
+ (pin (num 29) (name P29) (type passive))
+ (pin (num 30) (name P30) (type passive))
+ (pin (num 31) (name P31) (type passive))
+ (pin (num 32) (name P32) (type passive))
+ (pin (num 33) (name P33) (type passive))
+ (pin (num 34) (name P34) (type passive))
+ (pin (num 35) (name P35) (type passive))
+ (pin (num 36) (name P36) (type passive))
+ (pin (num 37) (name P37) (type passive))
+ (pin (num 38) (name P38) (type passive))
+ (pin (num 39) (name P39) (type passive))
+ (pin (num 40) (name P40) (type passive))))
+ (libpart (lib conn) (part CONN_2X2)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2X2))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))))
+ (libpart (lib conn) (part CONN_3)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) K)
+ (field (name Value) CONN_3))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))
+ (pin (num 3) (name P3) (type passive))))
+ (libpart (lib conn) (part CONN_30X2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_30X2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name P2) (type passive))
+ (pin (num 3) (name P3) (type passive))
+ (pin (num 4) (name P4) (type passive))
+ (pin (num 5) (name P5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))
+ (pin (num 10) (name P10) (type passive))
+ (pin (num 11) (name P11) (type passive))
+ (pin (num 12) (name P12) (type passive))
+ (pin (num 13) (name P13) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P24) (type passive))
+ (pin (num 25) (name ~) (type passive))
+ (pin (num 26) (name P26) (type passive))
+ (pin (num 27) (name P27) (type passive))
+ (pin (num 28) (name P28) (type passive))
+ (pin (num 29) (name P29) (type passive))
+ (pin (num 30) (name P30) (type passive))
+ (pin (num 31) (name P31) (type passive))
+ (pin (num 32) (name P32) (type passive))
+ (pin (num 33) (name P33) (type passive))
+ (pin (num 34) (name P34) (type passive))
+ (pin (num 35) (name P35) (type passive))
+ (pin (num 36) (name P36) (type passive))
+ (pin (num 37) (name P37) (type passive))
+ (pin (num 38) (name P38) (type passive))
+ (pin (num 39) (name P39) (type passive))
+ (pin (num 40) (name P40) (type passive))
+ (pin (num 41) (name P41) (type passive))
+ (pin (num 42) (name P42) (type passive))
+ (pin (num 43) (name P43) (type passive))
+ (pin (num 44) (name P44) (type passive))
+ (pin (num 45) (name P45) (type passive))
+ (pin (num 46) (name P46) (type passive))
+ (pin (num 47) (name P47) (type passive))
+ (pin (num 48) (name P48) (type passive))
+ (pin (num 49) (name P49) (type passive))
+ (pin (num 50) (name P50) (type passive))
+ (pin (num 51) (name P51) (type passive))
+ (pin (num 52) (name P52) (type passive))
+ (pin (num 53) (name P53) (type passive))
+ (pin (num 54) (name P54) (type passive))
+ (pin (num 55) (name P55) (type passive))
+ (pin (num 56) (name P56) (type passive))
+ (pin (num 57) (name P57) (type passive))
+ (pin (num 58) (name P58) (type passive))
+ (pin (num 59) (name P59) (type passive))
+ (pin (num 60) (name P60) (type passive))))
+ (libpart (lib conn) (part CONN_4X2)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_4X2))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))))
+ (libpart (lib conn) (part CONN_6)
+ (description "ymbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_6))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))))
+ (libpart (lib conn) (part DB9)
+ (footprints
+ (fp DB9*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB9))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))))
+ (libpart (lib regul) (part LT1129_QPACK)
+ (aliases
+ (alias LT_1129_QP))
+ (description "LowDrop Linear Regulator (QPACK 5 pins)")
+ (docs linear-tec/lt1129.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) LT1129_QPACK))
+ (pins
+ (pin (num 1) (name OUT) (type power_out))
+ (pin (num 2) (name SENSE) (type input))
+ (pin (num 3) (name GND) (type power_in))
+ (pin (num 4) (name SHDN) (type input))
+ (pin (num 5) (name IN) (type input))))
+ (libpart (lib 74xx) (part 74AHC1G14)
+ (description "inverting buffer with Schmitt trigger.")
+ (docs 74xx/74ahc_ahct1g14.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74AHC1G14))
+ (pins
+ (pin (num 2) (name ~) (type input))
+ (pin (num 3) (name GND) (type power_in))
+ (pin (num 4) (name ~) (type output))
+ (pin (num 5) (name VCC) (type power_in))))
+ (libpart (lib 74xx) (part 74LS125)
+ (description "Quad buffer 3 State out")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS125))
+ (pins
+ (pin (num 1) (name E) (type input))
+ (pin (num 2) (name D) (type input))
+ (pin (num 3) (name O) (type 3state))
+ (pin (num 4) (name E) (type input))
+ (pin (num 5) (name D) (type input))
+ (pin (num 6) (name O) (type 3state))
+ (pin (num 7) (name GND) (type power_in))
+ (pin (num 8) (name O) (type 3state))
+ (pin (num 9) (name D) (type input))
+ (pin (num 10) (name E) (type input))
+ (pin (num 11) (name O) (type 3state))
+ (pin (num 12) (name D) (type input))
+ (pin (num 13) (name E) (type input))
+ (pin (num 14) (name VCC) (type power_in))))
+ (libpart (lib xilinx) (part XCR3256-TQ144)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) XCR3256-TQ144))
+ (pins
+ (pin (num 1) (name I1) (type passive))
+ (pin (num 2) (name I0) (type passive))
+ (pin (num 3) (name GND) (type power_in))
+ (pin (num 4) (name J0/TDI) (type passive))
+ (pin (num 5) (name J2) (type passive))
+ (pin (num 6) (name J3) (type passive))
+ (pin (num 7) (name J4) (type passive))
+ (pin (num 8) (name J11) (type passive))
+ (pin (num 9) (name J13) (type passive))
+ (pin (num 10) (name J14) (type passive))
+ (pin (num 11) (name J15) (type passive))
+ (pin (num 12) (name L2) (type passive))
+ (pin (num 13) (name PORT_EN) (type passive))
+ (pin (num 14) (name L3) (type passive))
+ (pin (num 15) (name L4) (type passive))
+ (pin (num 16) (name L11) (type passive))
+ (pin (num 17) (name GND) (type power_in))
+ (pin (num 18) (name L13) (type passive))
+ (pin (num 19) (name L14) (type passive))
+ (pin (num 20) (name N0/TMS) (type passive))
+ (pin (num 21) (name N2) (type passive))
+ (pin (num 22) (name N3) (type passive))
+ (pin (num 23) (name N4) (type passive))
+ (pin (num 24) (name VCC) (type power_in))
+ (pin (num 25) (name N11) (type passive))
+ (pin (num 26) (name N13) (type passive))
+ (pin (num 27) (name N14) (type passive))
+ (pin (num 28) (name N15) (type passive))
+ (pin (num 29) (name P2) (type passive))
+ (pin (num 30) (name P3) (type passive))
+ (pin (num 31) (name P4) (type passive))
+ (pin (num 32) (name P11) (type passive))
+ (pin (num 33) (name GND) (type power_in))
+ (pin (num 34) (name P13) (type passive))
+ (pin (num 35) (name P14) (type passive))
+ (pin (num 36) (name P15) (type passive))
+ (pin (num 37) (name O15) (type passive))
+ (pin (num 38) (name O13) (type passive))
+ (pin (num 39) (name O12) (type passive))
+ (pin (num 40) (name O4) (type passive))
+ (pin (num 41) (name O3) (type passive))
+ (pin (num 42) (name O2) (type passive))
+ (pin (num 43) (name O1) (type passive))
+ (pin (num 44) (name O0) (type passive))
+ (pin (num 45) (name M15) (type passive))
+ (pin (num 46) (name M13) (type passive))
+ (pin (num 47) (name M12) (type passive))
+ (pin (num 48) (name M11) (type passive))
+ (pin (num 49) (name M4) (type passive))
+ (pin (num 50) (name VCC) (type power_in))
+ (pin (num 51) (name VCC) (type power_in))
+ (pin (num 52) (name GND) (type power_in))
+ (pin (num 53) (name M2) (type passive))
+ (pin (num 54) (name M1) (type passive))
+ (pin (num 55) (name F1) (type passive))
+ (pin (num 56) (name F2) (type passive))
+ (pin (num 57) (name GND) (type power_in))
+ (pin (num 58) (name VCC) (type power_in))
+ (pin (num 59) (name GND) (type power_in))
+ (pin (num 60) (name F4) (type passive))
+ (pin (num 61) (name F11) (type passive))
+ (pin (num 62) (name F12) (type passive))
+ (pin (num 63) (name F13) (type passive))
+ (pin (num 64) (name GND) (type power_in))
+ (pin (num 65) (name F15) (type passive))
+ (pin (num 66) (name H0) (type passive))
+ (pin (num 67) (name H1) (type passive))
+ (pin (num 68) (name H2) (type passive))
+ (pin (num 69) (name H3) (type passive))
+ (pin (num 70) (name H11) (type passive))
+ (pin (num 71) (name H13) (type passive))
+ (pin (num 72) (name H15) (type passive))
+ (pin (num 73) (name VCC) (type power_in))
+ (pin (num 74) (name G14) (type passive))
+ (pin (num 75) (name G13) (type passive))
+ (pin (num 76) (name VCC) (type power_in))
+ (pin (num 77) (name G11) (type passive))
+ (pin (num 78) (name G4) (type passive))
+ (pin (num 79) (name G3) (type passive))
+ (pin (num 80) (name G2) (type passive))
+ (pin (num 81) (name G0) (type input))
+ (pin (num 82) (name E14) (type passive))
+ (pin (num 83) (name E13) (type passive))
+ (pin (num 84) (name E11) (type passive))
+ (pin (num 85) (name GND) (type power_in))
+ (pin (num 86) (name E4) (type passive))
+ (pin (num 87) (name E3) (type passive))
+ (pin (num 88) (name E2) (type passive))
+ (pin (num 89) (name E0/TCK) (type passive))
+ (pin (num 90) (name C14) (type passive))
+ (pin (num 91) (name C13) (type passive))
+ (pin (num 92) (name C11) (type passive))
+ (pin (num 93) (name C4) (type passive))
+ (pin (num 94) (name C3) (type passive))
+ (pin (num 95) (name VCC) (type power_in))
+ (pin (num 96) (name C2) (type passive))
+ (pin (num 97) (name C1) (type passive))
+ (pin (num 98) (name C0) (type passive))
+ (pin (num 99) (name A13) (type passive))
+ (pin (num 100) (name A12) (type passive))
+ (pin (num 101) (name A11) (type passive))
+ (pin (num 102) (name A4) (type passive))
+ (pin (num 103) (name A3) (type passive))
+ (pin (num 104) (name A2/TDO) (type passive))
+ (pin (num 105) (name GND) (type power_in))
+ (pin (num 106) (name A0) (type passive))
+ (pin (num 107) (name B0) (type passive))
+ (pin (num 108) (name B1) (type passive))
+ (pin (num 109) (name B4) (type passive))
+ (pin (num 110) (name B11) (type passive))
+ (pin (num 111) (name B12) (type passive))
+ (pin (num 112) (name B14) (type passive))
+ (pin (num 113) (name B15) (type passive))
+ (pin (num 114) (name D0) (type passive))
+ (pin (num 115) (name VCC) (type power_in))
+ (pin (num 116) (name D1) (type passive))
+ (pin (num 117) (name D2) (type passive))
+ (pin (num 118) (name D4) (type passive))
+ (pin (num 119) (name D11) (type passive))
+ (pin (num 120) (name D12) (type passive))
+ (pin (num 121) (name D13) (type passive))
+ (pin (num 122) (name D15) (type passive))
+ (pin (num 123) (name VCC) (type power_in))
+ (pin (num 124) (name GND) (type power_in))
+ (pin (num 125) (name CLK3/IN3) (type input))
+ (pin (num 126) (name CLK2/IN2) (type input))
+ (pin (num 127) (name CLK1/IN1) (type input))
+ (pin (num 128) (name CLK0/IN0) (type input))
+ (pin (num 129) (name GND) (type power_in))
+ (pin (num 130) (name VCC) (type power_in))
+ (pin (num 131) (name K15) (type passive))
+ (pin (num 132) (name K14) (type passive))
+ (pin (num 133) (name K13) (type passive))
+ (pin (num 134) (name K12) (type passive))
+ (pin (num 135) (name GND) (type power_in))
+ (pin (num 136) (name K11) (type passive))
+ (pin (num 137) (name K4) (type passive))
+ (pin (num 138) (name K2) (type passive))
+ (pin (num 139) (name I15) (type passive))
+ (pin (num 140) (name I14) (type passive))
+ (pin (num 141) (name I13) (type passive))
+ (pin (num 142) (name I12) (type passive))
+ (pin (num 143) (name I4) (type passive))
+ (pin (num 144) (name VCC) (type power_in))))
+ (libpart (lib special) (part MAX232)
+ (aliases
+ (alias MAX202))
+ (description "Driver de Ligne RS232")
+ (docs maxim/MAX220-MAX249.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) MAX232))
+ (pins
+ (pin (num 1) (name C1+) (type input))
+ (pin (num 2) (name V+) (type power_out))
+ (pin (num 3) (name C1-) (type input))
+ (pin (num 4) (name C2+) (type input))
+ (pin (num 5) (name C2-) (type input))
+ (pin (num 6) (name V-) (type power_out))
+ (pin (num 7) (name T2OUT) (type output))
+ (pin (num 8) (name R2IN) (type input))
+ (pin (num 9) (name R2OUT) (type output))
+ (pin (num 10) (name T2IN) (type input))
+ (pin (num 11) (name T1IN) (type input))
+ (pin (num 12) (name R1OUT) (type output))
+ (pin (num 13) (name R1IN) (type input))
+ (pin (num 14) (name T1OUT) (type output))
+ (pin (num 15) (name GND) (type power_in))
+ (pin (num 16) (name VCC) (type power_in))))
+ (libpart (lib special) (part MC34064P)
+ (aliases
+ (alias MC33064P))
+ (description "Undervoltage sensing circuit (TP-226AA package)")
+ (docs onsemi/mc34064.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) MC34064P))
+ (pins
+ (pin (num 1) (name Rst) (type openCol))
+ (pin (num 2) (name In) (type input))
+ (pin (num 3) (name Gbd) (type input))))
+ (libpart (lib motorola) (part MCF5213-LQFP100)
+ (description "Coldfire with SRAM and Flash Eprom - LQFP100 package")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) MCF5213-LQFP100))
+ (pins
+ (pin (num 1) (name VCC) (type power_in))
+ (pin (num 2) (name VCC) (type power_in))
+ (pin (num 3) (name GND) (type power_in))
+ (pin (num 4) (name ~URTS1~/SYNCB/UTXD2/PUB2) (type BiDi))
+ (pin (num 5) (name TEST) (type input))
+ (pin (num 6) (name ~UCTS0~/CANRX/PUA3) (type BiDi))
+ (pin (num 7) (name URXD0/PUA1) (type BiDi))
+ (pin (num 8) (name UTXD0/PUA0) (type BiDi))
+ (pin (num 9) (name ~URTS0~/CANTX/PUA2) (type BiDi))
+ (pin (num 10) (name SCL/CANTX/PAS0/UTXD2) (type BiDi))
+ (pin (num 11) (name SDA/CANRX/PAS1/URXD2) (type BiDi))
+ (pin (num 12) (name QSPI_CS3/SYNCA/SYNCB/PQS6) (type BiDi))
+ (pin (num 13) (name QSPI_CS2/PQS5) (type BiDi))
+ (pin (num 14) (name VCC) (type power_in))
+ (pin (num 15) (name GND) (type power_in))
+ (pin (num 16) (name QSPI_DIN/EZPD/CANRX/RXD1/PQS1) (type BiDi))
+ (pin (num 17) (name QSPI_DOUT/EZPQ/CANTX/RXD0/PQS0) (type BiDi))
+ (pin (num 18) (name QSPI_CLK/EZPCK/SCL/RTS1/PQS2) (type BiDi))
+ (pin (num 19) (name QSPI_CS1/PQS4) (type BiDi))
+ (pin (num 20) (name QSPI_CS0/SDA/CTS1/PQS3) (type BiDi))
+ (pin (num 21) (name RCON/EZPCS) (type input))
+ (pin (num 22) (name VCC) (type power_in))
+ (pin (num 23) (name VCC) (type power_in))
+ (pin (num 24) (name GND) (type power_in))
+ (pin (num 25) (name GND) (type power_in))
+ (pin (num 26) (name JTAG_EN) (type input))
+ (pin (num 27) (name ~UCTS2~/PUC3) (type BiDi))
+ (pin (num 28) (name URXD2/PUC1) (type BiDi))
+ (pin (num 29) (name UTXD2/PUC0) (type BiDi))
+ (pin (num 30) (name ~URTS2~/PUC2) (type BiDi))
+ (pin (num 31) (name DTIN2/DTOUT2/PWM4/PTC2) (type BiDi))
+ (pin (num 32) (name DTIN3/DTOUT3/PWM6/PTC3) (type BiDi))
+ (pin (num 33) (name PWM3/PTD1) (type BiDi))
+ (pin (num 34) (name VCC) (type power_in))
+ (pin (num 35) (name GND) (type power_in))
+ (pin (num 36) (name DTIN0/DTOUT0/PWM0/PTC0) (type BiDi))
+ (pin (num 37) (name DTIN1/DTOUT1/PWM2/PTC1) (type BiDi))
+ (pin (num 38) (name PWM1/PTD0) (type BiDi))
+ (pin (num 39) (name CLKMOD1) (type input))
+ (pin (num 40) (name CLKMOD0) (type input))
+ (pin (num 41) (name VCC) (type power_in))
+ (pin (num 42) (name GND) (type power_in))
+ (pin (num 43) (name AN0/PAN0) (type BiDi))
+ (pin (num 44) (name AN1/PAN1) (type BiDi))
+ (pin (num 45) (name AN2/PAN2) (type BiDi))
+ (pin (num 46) (name AN3/PAN3) (type BiDi))
+ (pin (num 47) (name VSSA) (type input))
+ (pin (num 48) (name VRL) (type input))
+ (pin (num 49) (name VRH) (type input))
+ (pin (num 50) (name VCCA) (type input))
+ (pin (num 51) (name AN7/PAN7) (type BiDi))
+ (pin (num 52) (name AN6/PAN6) (type BiDi))
+ (pin (num 53) (name AN5/PAN5) (type BiDi))
+ (pin (num 54) (name AN4/PAN4) (type BiDi))
+ (pin (num 55) (name VSTBY) (type power_in))
+ (pin (num 56) (name GND) (type power_in))
+ (pin (num 57) (name VCC) (type power_in))
+ (pin (num 58) (name GPT0/PWM1/PTA0) (type BiDi))
+ (pin (num 59) (name GPT1/PWM3/PTA1) (type BiDi))
+ (pin (num 60) (name PWM5/PTD2) (type BiDi))
+ (pin (num 61) (name GPT2PWM5//PTA2) (type BiDi))
+ (pin (num 62) (name GPT3/PWM7/PTA3) (type BiDi))
+ (pin (num 63) (name PWM7/PTD3) (type BiDi))
+ (pin (num 64) (name TCLK/PSTCLK/CLKOUT) (type input))
+ (pin (num 65) (name PST0/PDD0) (type BiDi))
+ (pin (num 66) (name PST1/PDD1) (type BiDi))
+ (pin (num 67) (name GND) (type power_in))
+ (pin (num 68) (name VCC) (type power_in))
+ (pin (num 69) (name PST2/PDD2) (type BiDi))
+ (pin (num 70) (name PST3/PDD3) (type BiDi))
+ (pin (num 71) (name GNDPLL) (type passive))
+ (pin (num 72) (name XTAL) (type output))
+ (pin (num 73) (name CLKIN/EXTAL) (type input))
+ (pin (num 74) (name VCCPLL) (type passive))
+ (pin (num 75) (name GND) (type power_in))
+ (pin (num 76) (name ~BKPT~/TMS) (type input))
+ (pin (num 77) (name DDATA0/PDD4) (type BiDi))
+ (pin (num 78) (name DDATA1/PDD5) (type BiDi))
+ (pin (num 79) (name DSI/TDI) (type input))
+ (pin (num 80) (name DSO/TDO) (type output))
+ (pin (num 81) (name VCC) (type power_in))
+ (pin (num 82) (name GND) (type power_in))
+ (pin (num 83) (name DDATA2/PDD6) (type BiDi))
+ (pin (num 84) (name DDATA3/PDD7) (type BiDi))
+ (pin (num 85) (name DSCLK/~TRST~) (type input))
+ (pin (num 86) (name ALLPST) (type output))
+ (pin (num 87) (name ~IRQ1~/PNQ1/SYNCA/PWM1) (type BiDi))
+ (pin (num 88) (name ~IRQ2~/PNQ2) (type BiDi))
+ (pin (num 89) (name ~IRQ3~/PNQ3) (type BiDi))
+ (pin (num 90) (name ~IRQ4~/PNQ4) (type BiDi))
+ (pin (num 91) (name ~IRQ5~/PNQ5) (type BiDi))
+ (pin (num 92) (name GND) (type power_in))
+ (pin (num 93) (name VCC) (type power_in))
+ (pin (num 94) (name ~IRQ6~/PNQ6) (type BiDi))
+ (pin (num 95) (name ~IRQ7~/PNQ7) (type BiDi))
+ (pin (num 96) (name RSTI) (type input))
+ (pin (num 97) (name RSTO) (type output))
+ (pin (num 98) (name ~UCTS1~/SYNCA/URXD2/PUB3) (type BiDi))
+ (pin (num 99) (name UTXD1/PUB0) (type BiDi))
+ (pin (num 100) (name URXD1/PUB1) (type BiDi))))
+ (libpart (lib kit-dev-coldfire-xilinx_5213-cache) (part PCA82C251)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) PCA82C251))
+ (pins
+ (pin (num 1) (name TxD) (type input))
+ (pin (num 2) (name GND) (type power_in))
+ (pin (num 3) (name VCC) (type power_in))
+ (pin (num 4) (name RxD) (type output))
+ (pin (num 5) (name Vref) (type output))
+ (pin (num 6) (name CAN-) (type BiDi))
+ (pin (num 7) (name CAN+) (type BiDi))
+ (pin (num 8) (name Rsl) (type input)))))
+ (libraries
+ (library (logical device)
+ (uri f:\kicad\share\library\device.lib))
+ (library (logical conn)
+ (uri f:\kicad\share\library\conn.lib))
+ (library (logical regul)
+ (uri f:\kicad\share\library\regul.lib))
+ (library (logical 74xx)
+ (uri f:\kicad\share\library\74xx.lib))
+ (library (logical xilinx)
+ (uri f:\kicad\share\library\xilinx.lib))
+ (library (logical special)
+ (uri f:\kicad\share\library\special.lib))
+ (library (logical motorola)
+ (uri f:\kicad\share\library\motorola.lib))
+ (library (logical kit-dev-coldfire-xilinx_5213-cache)
+ (uri F:\kicad-launchpad\testing\demos\kit-dev-coldfire-xilinx_5213\kit-dev-coldfire-xilinx_5213-cache.lib)))
+ (nets
+ (net (code 1) (name /GPT3)
+ (node (ref U1) (pin 62))
+ (node (ref MCU_PORT1) (pin 52)))
+ (net (code 2) (name /inout_user/UCTS2)
+ (node (ref U1) (pin 27))
+ (node (ref MCU_PORT1) (pin 48))
+ (node (ref UART_EN2) (pin 8)))
+ (net (code 3) (name /inout_user/URTS2)
+ (node (ref MCU_PORT1) (pin 46))
+ (node (ref UART_EN2) (pin 6))
+ (node (ref U1) (pin 30)))
+ (net (code 4) (name /inout_user/UCTS1)
+ (node (ref P3) (pin 1))
+ (node (ref U9) (pin 49))
+ (node (ref U1) (pin 98))
+ (node (ref UART_EN1) (pin 8))
+ (node (ref MCU_PORT1) (pin 11)))
+ (net (code 5) (name /inout_user/URTS1)
+ (node (ref U9) (pin 53))
+ (node (ref U1) (pin 4))
+ (node (ref UART_EN1) (pin 6))
+ (node (ref P3) (pin 3))
+ (node (ref MCU_PORT1) (pin 9)))
+ (net (code 6) (name /inout_user/UCTS0)
+ (node (ref UART_EN0) (pin 8))
+ (node (ref U1) (pin 6))
+ (node (ref MCU_PORT1) (pin 44)))
+ (net (code 7) (name /inout_user/URTS0)
+ (node (ref UART_EN0) (pin 6))
+ (node (ref MCU_PORT1) (pin 42))
+ (node (ref U1) (pin 9)))
+ (net (code 8) (name /GPT2)
+ (node (ref MCU_PORT1) (pin 51))
+ (node (ref U1) (pin 61)))
+ (net (code 9) (name /GPT1)
+ (node (ref U1) (pin 59))
+ (node (ref MCU_PORT1) (pin 50)))
+ (net (code 10) (name /GPT0)
+ (node (ref U1) (pin 58))
+ (node (ref MCU_PORT1) (pin 49)))
+ (net (code 11) (name GND)
+ (node (ref U9) (pin 85))
+ (node (ref U9) (pin 57))
+ (node (ref U9) (pin 17))
+ (node (ref U9) (pin 126))
+ (node (ref U4) (pin 7))
+ (node (ref U1) (pin 24))
+ (node (ref U9) (pin 135))
+ (node (ref U9) (pin 125))
+ (node (ref U1) (pin 15))
+ (node (ref U1) (pin 25))
+ (node (ref U9) (pin 59))
+ (node (ref MCU_PORT1) (pin 3))
+ (node (ref MCU_PORT1) (pin 60))
+ (node (ref U1) (pin 35))
+ (node (ref U1) (pin 82))
+ (node (ref U1) (pin 92))
+ (node (ref GND1) (pin 1))
+ (node (ref U2) (pin 3))
+ (node (ref RST_SW1) (pin 2))
+ (node (ref U1) (pin 67))
+ (node (ref U1) (pin 75))
+ (node (ref U9) (pin 105))
+ (node (ref UARTCAN2) (pin 5))
+ (node (ref U9) (pin 124))
+ (node (ref U1) (pin 56))
+ (node (ref U1) (pin 71))
+ (node (ref U9) (pin 129))
+ (node (ref U9) (pin 127))
+ (node (ref U1) (pin 42))
+ (node (ref VR1) (pin 3))
+ (node (ref C52) (pin 2))
+ (node (ref MCU_PORT1) (pin 54))
+ (node (ref P1) (pin 2))
+ (node (ref C53) (pin 2))
+ (node (ref C54) (pin 2))
+ (node (ref C59) (pin 2))
+ (node (ref C60) (pin 2))
+ (node (ref C61) (pin 2))
+ (node (ref D8) (pin 2))
+ (node (ref U3) (pin 15))
+ (node (ref C22) (pin 2))
+ (node (ref LED2) (pin 2))
+ (node (ref J1) (pin 1))
+ (node (ref UARTCAN0) (pin 5))
+ (node (ref RED1) (pin 2))
+ (node (ref LED4) (pin 2))
+ (node (ref LED3) (pin 2))
+ (node (ref LED1) (pin 2))
+ (node (ref C28) (pin 2))
+ (node (ref R30) (pin 1))
+ (node (ref C46) (pin 2))
+ (node (ref C43) (pin 1))
+ (node (ref R35) (pin 1))
+ (node (ref COM_SEL2) (pin 1))
+ (node (ref R23) (pin 1))
+ (node (ref C33) (pin 2))
+ (node (ref U8) (pin 15))
+ (node (ref J1) (pin 2))
+ (node (ref C45) (pin 2))
+ (node (ref SW2) (pin 2))
+ (node (ref U1) (pin 3))
+ (node (ref SW1) (pin 2))
+ (node (ref C40) (pin 2))
+ (node (ref TB1) (pin 2))
+ (node (ref RCAN2) (pin 1))
+ (node (ref C26) (pin 2))
+ (node (ref R36) (pin 2))
+ (node (ref C38) (pin 2))
+ (node (ref LED_EN1) (pin 1))
+ (node (ref D7) (pin 1))
+ (node (ref UARTCAN1) (pin 5))
+ (node (ref C41) (pin 2))
+ (node (ref C34) (pin 2))
+ (node (ref LED5) (pin 2))
+ (node (ref C27) (pin 2))
+ (node (ref U7) (pin 2))
+ (node (ref U5) (pin 15))
+ (node (ref C58) (pin 2))
+ (node (ref C11) (pin 2))
+ (node (ref C6) (pin 2))
+ (node (ref C12) (pin 2))
+ (node (ref C1) (pin 2))
+ (node (ref C57) (pin 2))
+ (node (ref C56) (pin 2))
+ (node (ref CLK0) (pin 1))
+ (node (ref C2) (pin 2))
+ (node (ref C51) (pin 2))
+ (node (ref C17) (pin 2))
+ (node (ref U9) (pin 3))
+ (node (ref C55) (pin 2))
+ (node (ref C21) (pin 2))
+ (node (ref C9) (pin 2))
+ (node (ref C10) (pin 2))
+ (node (ref BDM_EN1) (pin 1))
+ (node (ref C8) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref C20) (pin 2))
+ (node (ref BDM_PORT1) (pin 23))
+ (node (ref D9) (pin 2))
+ (node (ref BDM_PORT1) (pin 11))
+ (node (ref BDM_PORT1) (pin 20))
+ (node (ref P4) (pin 2))
+ (node (ref BDM_PORT1) (pin 5))
+ (node (ref CLK1) (pin 1))
+ (node (ref BDM_PORT1) (pin 3))
+ (node (ref U9) (pin 33))
+ (node (ref R26) (pin 2))
+ (node (ref LV1) (pin 3))
+ (node (ref U9) (pin 64))
+ (node (ref R12) (pin 2))
+ (node (ref P4) (pin 40))
+ (node (ref U9) (pin 52))
+ (node (ref R9) (pin 2))
+ (node (ref C3) (pin 2))
+ (node (ref C14) (pin 1))
+ (node (ref FB1) (pin 1))
+ (node (ref C15) (pin 2))
+ (node (ref U9) (pin 13)))
+ (net (code 12) (name "Net-(R22-Pad2)")
+ (node (ref RED1) (pin 1))
+ (node (ref R22) (pin 2)))
+ (net (code 13) (name /inout_user/RTS0-)
+ (node (ref MCU_PORT1) (pin 4))
+ (node (ref R21) (pin 1))
+ (node (ref U1) (pin 97)))
+ (net (code 14) (name /CLKIN/EXTAL)
+ (node (ref Y1) (pin 1))
+ (node (ref C1) (pin 1))
+ (node (ref U1) (pin 73))
+ (node (ref R1) (pin 2)))
+ (net (code 15) (name /xilinx/GLCK2)
+ (node (ref U9) (pin 128))
+ (node (ref Y1) (pin 2))
+ (node (ref C2) (pin 1))
+ (node (ref R1) (pin 1))
+ (node (ref U1) (pin 72)))
+ (net (code 16) (name GNDA)
+ (node (ref C18) (pin 2))
+ (node (ref C16) (pin 2))
+ (node (ref MCU_PORT1) (pin 58))
+ (node (ref MCU_PORT1) (pin 56))
+ (node (ref FB1) (pin 2))
+ (node (ref U1) (pin 48))
+ (node (ref U1) (pin 47)))
+ (net (code 17) (name +3.3V)
+ (node (ref U1) (pin 1))
+ (node (ref C6) (pin 1))
+ (node (ref U1) (pin 2))
+ (node (ref U1) (pin 57))
+ (node (ref R45) (pin 2))
+ (node (ref C26) (pin 1))
+ (node (ref R19) (pin 1))
+ (node (ref R2) (pin 1))
+ (node (ref VR1) (pin 2))
+ (node (ref R18) (pin 1))
+ (node (ref U2) (pin 5))
+ (node (ref R16) (pin 1))
+ (node (ref RCAN1) (pin 1))
+ (node (ref U1) (pin 68))
+ (node (ref R25) (pin 1))
+ (node (ref R20) (pin 1))
+ (node (ref VR1) (pin 1))
+ (node (ref U9) (pin 24))
+ (node (ref U9) (pin 73))
+ (node (ref U8) (pin 16))
+ (node (ref R64) (pin 1))
+ (node (ref VX_EN1) (pin 1))
+ (node (ref U9) (pin 50))
+ (node (ref LV1) (pin 2))
+ (node (ref C35) (pin 1))
+ (node (ref C46) (pin 1))
+ (node (ref U4) (pin 14))
+ (node (ref VDDA1) (pin 1))
+ (node (ref MCU_PORT1) (pin 59))
+ (node (ref ABRT_SW1) (pin 2))
+ (node (ref Q1) (pin 1))
+ (node (ref R34) (pin 1))
+ (node (ref R15) (pin 1))
+ (node (ref C28) (pin 1))
+ (node (ref U9) (pin 51))
+ (node (ref C30) (pin 1))
+ (node (ref C34) (pin 1))
+ (node (ref U5) (pin 16))
+ (node (ref U7) (pin 3))
+ (node (ref R47) (pin 1))
+ (node (ref R48) (pin 1))
+ (node (ref R49) (pin 1))
+ (node (ref R50) (pin 1))
+ (node (ref R53) (pin 2))
+ (node (ref C23) (pin 1))
+ (node (ref C22) (pin 1))
+ (node (ref U3) (pin 16))
+ (node (ref C40) (pin 1))
+ (node (ref L2) (pin 1))
+ (node (ref R4) (pin 2))
+ (node (ref C10) (pin 1))
+ (node (ref U9) (pin 76))
+ (node (ref P1) (pin 1))
+ (node (ref C9) (pin 1))
+ (node (ref C57) (pin 1))
+ (node (ref C56) (pin 1))
+ (node (ref C8) (pin 1))
+ (node (ref C58) (pin 1))
+ (node (ref U9) (pin 95))
+ (node (ref R17) (pin 1))
+ (node (ref C53) (pin 1))
+ (node (ref C52) (pin 1))
+ (node (ref R5) (pin 2))
+ (node (ref U9) (pin 130))
+ (node (ref U9) (pin 115))
+ (node (ref C54) (pin 1))
+ (node (ref C59) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref LEDABRT1) (pin 1))
+ (node (ref C51) (pin 1))
+ (node (ref U9) (pin 58))
+ (node (ref U1) (pin 22))
+ (node (ref U1) (pin 81))
+ (node (ref R57) (pin 1))
+ (node (ref U1) (pin 41))
+ (node (ref C60) (pin 1))
+ (node (ref C11) (pin 1))
+ (node (ref C14) (pin 2))
+ (node (ref U9) (pin 123))
+ (node (ref U1) (pin 23))
+ (node (ref R10) (pin 2))
+ (node (ref R8) (pin 2))
+ (node (ref R6) (pin 2))
+ (node (ref C55) (pin 1))
+ (node (ref BDM_PORT1) (pin 9))
+ (node (ref C12) (pin 1))
+ (node (ref U1) (pin 34))
+ (node (ref BDM_PORT1) (pin 25))
+ (node (ref U1) (pin 14))
+ (node (ref U1) (pin 93))
+ (node (ref C5) (pin 1))
+ (node (ref R13) (pin 2))
+ (node (ref C61) (pin 1))
+ (node (ref C17) (pin 1))
+ (node (ref C7) (pin 1))
+ (node (ref U9) (pin 144))
+ (node (ref R11) (pin 2))
+ (node (ref U1) (pin 55)))
+ (net (code 18) (name "Net-(L1-Pad1)")
+ (node (ref VDDA1) (pin 2))
+ (node (ref L1) (pin 1)))
+ (net (code 19) (name /IRQ-7)
+ (node (ref D1) (pin 1))
+ (node (ref MCU_PORT1) (pin 39))
+ (node (ref U1) (pin 95))
+ (node (ref R13) (pin 1)))
+ (net (code 20) (name "Net-(Q1-Pad2)")
+ (node (ref Q1) (pin 2))
+ (node (ref R21) (pin 2)))
+ (net (code 21) (name "Net-(Q1-Pad3)")
+ (node (ref R22) (pin 1))
+ (node (ref Q1) (pin 3)))
+ (net (code 22) (name /inout_user/RSTI-)
+ (node (ref BDM_PORT1) (pin 7))
+ (node (ref U1) (pin 96))
+ (node (ref D3) (pin 1))
+ (node (ref R15) (pin 2))
+ (node (ref MCU_PORT1) (pin 6)))
+ (net (code 23) (name /inout_user/PWM3)
+ (node (ref U1) (pin 33))
+ (node (ref MCU_PORT1) (pin 15)))
+ (net (code 24) (name /inout_user/PWM1)
+ (node (ref MCU_PORT1) (pin 13))
+ (node (ref U1) (pin 38)))
+ (net (code 25) (name /inout_user/PWM7)
+ (node (ref MCU_PORT1) (pin 32))
+ (node (ref U1) (pin 63)))
+ (net (code 26) (name /inout_user/PWM5)
+ (node (ref MCU_PORT1) (pin 30))
+ (node (ref U1) (pin 60)))
+ (net (code 27) (name /BKPT-)
+ (node (ref U1) (pin 76))
+ (node (ref BDM_PORT1) (pin 2))
+ (node (ref R17) (pin 2)))
+ (net (code 28) (name /CLKMOD1)
+ (node (ref CLK1) (pin 2))
+ (node (ref R2) (pin 2))
+ (node (ref U1) (pin 39)))
+ (net (code 29) (name /DSI)
+ (node (ref BDM_PORT1) (pin 8))
+ (node (ref U1) (pin 79))
+ (node (ref R19) (pin 2)))
+ (net (code 30) (name /PST1)
+ (node (ref U1) (pin 66))
+ (node (ref BDM_PORT1) (pin 14)))
+ (net (code 31) (name /PST0)
+ (node (ref U1) (pin 65))
+ (node (ref BDM_PORT1) (pin 15)))
+ (net (code 32) (name /DSO)
+ (node (ref U1) (pin 80))
+ (node (ref R20) (pin 2))
+ (node (ref BDM_PORT1) (pin 10)))
+ (net (code 33) (name /DSCLK)
+ (node (ref BDM_PORT1) (pin 4))
+ (node (ref R18) (pin 2))
+ (node (ref U1) (pin 85)))
+ (net (code 34) (name "Net-(R46-Pad1)")
+ (node (ref U1) (pin 64))
+ (node (ref R46) (pin 1)))
+ (net (code 35) (name /JTAG_EN)
+ (node (ref U1) (pin 26))
+ (node (ref BDM_EN1) (pin 2))
+ (node (ref R16) (pin 2)))
+ (net (code 36) (name "Net-(BDM_PORT1-Pad1)")
+ (node (ref BDM_PORT1) (pin 1)))
+ (net (code 37) (name "Net-(BDM_PORT1-Pad6)")
+ (node (ref BDM_PORT1) (pin 6))
+ (node (ref CT1) (pin 1)))
+ (net (code 38) (name "Net-(BDM_PORT1-Pad21)")
+ (node (ref BDM_PORT1) (pin 21)))
+ (net (code 39) (name "Net-(BDM_PORT1-Pad22)")
+ (node (ref BDM_PORT1) (pin 22)))
+ (net (code 40) (name "Net-(LEDABRT1-Pad2)")
+ (node (ref R14) (pin 1))
+ (node (ref LEDABRT1) (pin 2)))
+ (net (code 41) (name "Net-(ABRT_SW1-Pad1)")
+ (node (ref R7) (pin 1))
+ (node (ref ABRT_SW1) (pin 1)))
+ (net (code 42) (name /inout_user/RCON-)
+ (node (ref U1) (pin 21))
+ (node (ref R45) (pin 1))
+ (node (ref MCU_PORT1) (pin 53)))
+ (net (code 43) (name "Net-(BDM_PORT1-Pad26)")
+ (node (ref BDM_PORT1) (pin 26))
+ (node (ref TA-1) (pin 1)))
+ (net (code 44) (name /DDAT3)
+ (node (ref U1) (pin 84))
+ (node (ref BDM_PORT1) (pin 16)))
+ (net (code 45) (name /DDAT2)
+ (node (ref BDM_PORT1) (pin 17))
+ (node (ref U1) (pin 83)))
+ (net (code 46) (name /DDAT1)
+ (node (ref U1) (pin 78))
+ (node (ref BDM_PORT1) (pin 18)))
+ (net (code 47) (name /DDAT0)
+ (node (ref U1) (pin 77))
+ (node (ref BDM_PORT1) (pin 19)))
+ (net (code 48) (name /CLKMOD0)
+ (node (ref U1) (pin 40))
+ (node (ref R25) (pin 2))
+ (node (ref CLK0) (pin 2)))
+ (net (code 49) (name /inout_user/VCCA)
+ (node (ref MCU_PORT1) (pin 55))
+ (node (ref C16) (pin 1))
+ (node (ref L1) (pin 2))
+ (node (ref MCU_PORT1) (pin 57))
+ (node (ref C18) (pin 1))
+ (node (ref U1) (pin 49))
+ (node (ref U1) (pin 50)))
+ (net (code 50) (name "Net-(D1-Pad2)")
+ (node (ref D1) (pin 2))
+ (node (ref R14) (pin 2))
+ (node (ref U2) (pin 4)))
+ (net (code 51) (name "Net-(C15-Pad1)")
+ (node (ref C15) (pin 1))
+ (node (ref R12) (pin 1))
+ (node (ref R7) (pin 2))
+ (node (ref U2) (pin 2)))
+ (net (code 52) (name /VDDPLL)
+ (node (ref C20) (pin 1))
+ (node (ref C21) (pin 1))
+ (node (ref U1) (pin 74))
+ (node (ref L2) (pin 2)))
+ (net (code 53) (name /inout_user/QSPI_DIN)
+ (node (ref MCU_PORT1) (pin 19))
+ (node (ref U9) (pin 46))
+ (node (ref U1) (pin 16)))
+ (net (code 54) (name /inout_user/CANTX)
+ (node (ref PULUPEN1) (pin 5))
+ (node (ref CAN_EN1) (pin 1))
+ (node (ref MCU_PORT1) (pin 26))
+ (node (ref U1) (pin 10)))
+ (net (code 55) (name /QSPI_CS0)
+ (node (ref PULUPEN1) (pin 3))
+ (node (ref MCU_PORT1) (pin 23))
+ (node (ref U1) (pin 20)))
+ (net (code 56) (name /PST3)
+ (node (ref BDM_PORT1) (pin 12))
+ (node (ref U1) (pin 70)))
+ (net (code 57) (name /inout_user/CANRX)
+ (node (ref PULUPEN1) (pin 7))
+ (node (ref MCU_PORT1) (pin 28))
+ (node (ref U1) (pin 11))
+ (node (ref CAN_EN1) (pin 4)))
+ (net (code 58) (name /QSPI_CS3)
+ (node (ref MCU_PORT1) (pin 29))
+ (node (ref U1) (pin 12)))
+ (net (code 59) (name /xilinx/QSPI_CS2)
+ (node (ref U1) (pin 13))
+ (node (ref U9) (pin 45))
+ (node (ref MCU_PORT1) (pin 27)))
+ (net (code 60) (name /inout_user/UTXD1)
+ (node (ref U1) (pin 99))
+ (node (ref MCU_PORT1) (pin 5))
+ (node (ref UART_EN1) (pin 2)))
+ (net (code 61) (name /inout_user/URXD1)
+ (node (ref U1) (pin 100))
+ (node (ref MCU_PORT1) (pin 7))
+ (node (ref UART_EN1) (pin 4)))
+ (net (code 62) (name /TCLK)
+ (node (ref R26) (pin 1))
+ (node (ref CLKOUT1) (pin 1))
+ (node (ref BDM_PORT1) (pin 24))
+ (node (ref CT1) (pin 2))
+ (node (ref R46) (pin 2)))
+ (net (code 63) (name /inout_user/URXD2)
+ (node (ref U1) (pin 28))
+ (node (ref MCU_PORT1) (pin 47))
+ (node (ref UART_EN2) (pin 4)))
+ (net (code 64) (name /ALLPST)
+ (node (ref ALLPST1) (pin 1))
+ (node (ref U1) (pin 86)))
+ (net (code 65) (name /inout_user/QSPI_DOUT)
+ (node (ref MCU_PORT1) (pin 17))
+ (node (ref U1) (pin 17))
+ (node (ref U9) (pin 47)))
+ (net (code 66) (name /inout_user/QSPI_SCLK)
+ (node (ref U1) (pin 18))
+ (node (ref MCU_PORT1) (pin 21))
+ (node (ref U9) (pin 48))
+ (node (ref PULUPEN1) (pin 1)))
+ (net (code 67) (name /xilinx/QSPI_CS1)
+ (node (ref U9) (pin 54))
+ (node (ref U1) (pin 19))
+ (node (ref MCU_PORT1) (pin 25)))
+ (net (code 68) (name /inout_user/UTXD2)
+ (node (ref MCU_PORT1) (pin 45))
+ (node (ref UART_EN2) (pin 2))
+ (node (ref U1) (pin 29)))
+ (net (code 69) (name /PST2)
+ (node (ref BDM_PORT1) (pin 13))
+ (node (ref U1) (pin 69)))
+ (net (code 70) (name /inout_user/UTXD0)
+ (node (ref UART_EN0) (pin 2))
+ (node (ref U1) (pin 8))
+ (node (ref MCU_PORT1) (pin 41)))
+ (net (code 71) (name "Net-(C3-Pad1)")
+ (node (ref C3) (pin 1))
+ (node (ref D3) (pin 2))
+ (node (ref LV1) (pin 1))
+ (node (ref RST_SW1) (pin 1)))
+ (net (code 72) (name "Net-(R9-Pad1)")
+ (node (ref U1) (pin 5))
+ (node (ref R9) (pin 1)))
+ (net (code 73) (name /inout_user/URXD0)
+ (node (ref UART_EN0) (pin 4))
+ (node (ref MCU_PORT1) (pin 43))
+ (node (ref U1) (pin 7)))
+ (net (code 74) (name /inout_user/CTS1)
+ (node (ref UARTCAN1) (pin 7))
+ (node (ref U5) (pin 8)))
+ (net (code 75) (name "Net-(C33-Pad1)")
+ (node (ref U5) (pin 6))
+ (node (ref C33) (pin 1)))
+ (net (code 76) (name "Net-(C27-Pad1)")
+ (node (ref C27) (pin 1))
+ (node (ref U3) (pin 6)))
+ (net (code 77) (name "Net-(C32-Pad2)")
+ (node (ref C32) (pin 2))
+ (node (ref U5) (pin 5)))
+ (net (code 78) (name "Net-(R35-Pad2)")
+ (node (ref U5) (pin 10))
+ (node (ref UART_EN1) (pin 5))
+ (node (ref R35) (pin 2)))
+ (net (code 79) (name "Net-(C31-Pad2)")
+ (node (ref C31) (pin 2))
+ (node (ref U5) (pin 3)))
+ (net (code 80) (name "Net-(C30-Pad2)")
+ (node (ref C30) (pin 2))
+ (node (ref U5) (pin 2)))
+ (net (code 81) (name "Net-(U5-Pad11)")
+ (node (ref UART_EN1) (pin 1))
+ (node (ref U5) (pin 11)))
+ (net (code 82) (name "Net-(U5-Pad12)")
+ (node (ref U5) (pin 12))
+ (node (ref UART_EN1) (pin 3)))
+ (net (code 83) (name "Net-(C31-Pad1)")
+ (node (ref C31) (pin 1))
+ (node (ref U5) (pin 1)))
+ (net (code 84) (name "Net-(U5-Pad9)")
+ (node (ref U5) (pin 9))
+ (node (ref UART_EN1) (pin 7)))
+ (net (code 85) (name "Net-(UARTCAN1-Pad9)")
+ (node (ref UARTCAN1) (pin 9)))
+ (net (code 86) (name /inout_user/RXD0)
+ (node (ref U3) (pin 13))
+ (node (ref UARTCAN0) (pin 3)))
+ (net (code 87) (name /inout_user/RTS0)
+ (node (ref UARTCAN0) (pin 8))
+ (node (ref U3) (pin 7)))
+ (net (code 88) (name "Net-(UARTCAN0-Pad9)")
+ (node (ref UARTCAN0) (pin 9)))
+ (net (code 89) (name /inout_user/TXD0)
+ (node (ref UARTCAN0) (pin 2))
+ (node (ref U3) (pin 14)))
+ (net (code 90) (name "Net-(C25-Pad1)")
+ (node (ref C25) (pin 1))
+ (node (ref U3) (pin 4)))
+ (net (code 91) (name "Net-(C25-Pad2)")
+ (node (ref U3) (pin 5))
+ (node (ref C25) (pin 2)))
+ (net (code 92) (name "Net-(C24-Pad1)")
+ (node (ref C24) (pin 1))
+ (node (ref U3) (pin 1)))
+ (net (code 93) (name "Net-(C24-Pad2)")
+ (node (ref U3) (pin 3))
+ (node (ref C24) (pin 2)))
+ (net (code 94) (name "Net-(C23-Pad2)")
+ (node (ref C23) (pin 2))
+ (node (ref U3) (pin 2)))
+ (net (code 95) (name "Net-(U3-Pad11)")
+ (node (ref UART_EN0) (pin 1))
+ (node (ref U3) (pin 11)))
+ (net (code 96) (name "Net-(U3-Pad12)")
+ (node (ref UART_EN0) (pin 3))
+ (node (ref U3) (pin 12)))
+ (net (code 97) (name "Net-(U3-Pad9)")
+ (node (ref U3) (pin 9))
+ (node (ref UART_EN0) (pin 7)))
+ (net (code 98) (name "Net-(UARTCAN0-Pad1)")
+ (node (ref UARTCAN0) (pin 1))
+ (node (ref UARTCAN0) (pin 4))
+ (node (ref UARTCAN0) (pin 6)))
+ (net (code 99) (name "Net-(C45-Pad1)")
+ (node (ref U8) (pin 6))
+ (node (ref C45) (pin 1)))
+ (net (code 100) (name "Net-(UARTCAN2-Pad9)")
+ (node (ref UARTCAN2) (pin 9)))
+ (net (code 101) (name /inout_user/CAN_H)
+ (node (ref COM_SEL1) (pin 1))
+ (node (ref RCAN2) (pin 2))
+ (node (ref CAN_TERM1) (pin 1))
+ (node (ref U7) (pin 7)))
+ (net (code 102) (name "Net-(COM_SEL1-Pad3)")
+ (node (ref U8) (pin 13))
+ (node (ref COM_SEL1) (pin 3)))
+ (net (code 103) (name "Net-(COM_SEL2-Pad3)")
+ (node (ref COM_SEL2) (pin 3))
+ (node (ref U8) (pin 8)))
+ (net (code 104) (name /inout_user/CAN_L)
+ (node (ref R38) (pin 1))
+ (node (ref RCAN1) (pin 2))
+ (node (ref COM_SEL3) (pin 1))
+ (node (ref U7) (pin 6)))
+ (net (code 105) (name /inout_user/TXD2/CANL)
+ (node (ref COM_SEL3) (pin 2))
+ (node (ref UARTCAN2) (pin 2)))
+ (net (code 106) (name /inout_user/RTS1)
+ (node (ref U5) (pin 7))
+ (node (ref UARTCAN1) (pin 8)))
+ (net (code 107) (name /inout_user/RXD1)
+ (node (ref UARTCAN1) (pin 3))
+ (node (ref U5) (pin 13)))
+ (net (code 108) (name /inout_user/TXD1)
+ (node (ref UARTCAN1) (pin 2))
+ (node (ref U5) (pin 14)))
+ (net (code 109) (name "Net-(U8-Pad10)")
+ (node (ref UART_EN2) (pin 1))
+ (node (ref U8) (pin 10)))
+ (net (code 110) (name "Net-(U8-Pad12)")
+ (node (ref UART_EN2) (pin 7))
+ (node (ref U8) (pin 12)))
+ (net (code 111) (name "Net-(UARTCAN2-Pad1)")
+ (node (ref UARTCAN2) (pin 6))
+ (node (ref UARTCAN2) (pin 4))
+ (node (ref UARTCAN2) (pin 1)))
+ (net (code 112) (name "Net-(C32-Pad1)")
+ (node (ref C32) (pin 1))
+ (node (ref U5) (pin 4)))
+ (net (code 113) (name "Net-(C44-Pad1)")
+ (node (ref C44) (pin 1))
+ (node (ref U8) (pin 1)))
+ (net (code 114) (name "Net-(C35-Pad2)")
+ (node (ref C35) (pin 2))
+ (node (ref U8) (pin 2)))
+ (net (code 115) (name "Net-(C44-Pad2)")
+ (node (ref C44) (pin 2))
+ (node (ref U8) (pin 3)))
+ (net (code 116) (name "Net-(C36-Pad1)")
+ (node (ref U8) (pin 4))
+ (node (ref C36) (pin 1)))
+ (net (code 117) (name "Net-(C36-Pad2)")
+ (node (ref U8) (pin 5))
+ (node (ref C36) (pin 2)))
+ (net (code 118) (name "Net-(LED3-Pad1)")
+ (node (ref R32) (pin 1))
+ (node (ref LED3) (pin 1)))
+ (net (code 119) (name "Net-(R32-Pad2)")
+ (node (ref R32) (pin 2))
+ (node (ref U4) (pin 11)))
+ (net (code 120) (name "Net-(LED2-Pad1)")
+ (node (ref LED2) (pin 1))
+ (node (ref R31) (pin 1)))
+ (net (code 121) (name "Net-(R31-Pad2)")
+ (node (ref R31) (pin 2))
+ (node (ref U4) (pin 6)))
+ (net (code 122) (name "Net-(LED1-Pad1)")
+ (node (ref R28) (pin 1))
+ (node (ref LED1) (pin 1)))
+ (net (code 123) (name "Net-(R28-Pad2)")
+ (node (ref U4) (pin 3))
+ (node (ref R28) (pin 2)))
+ (net (code 124) (name "Net-(R33-Pad2)")
+ (node (ref U4) (pin 8))
+ (node (ref R33) (pin 2)))
+ (net (code 125) (name "Net-(LED_EN1-Pad2)")
+ (node (ref R34) (pin 2))
+ (node (ref LED_EN1) (pin 2))
+ (node (ref U4) (pin 1))
+ (node (ref U4) (pin 13))
+ (node (ref U4) (pin 10))
+ (node (ref U4) (pin 4)))
+ (net (code 126) (name "Net-(LED4-Pad1)")
+ (node (ref R33) (pin 1))
+ (node (ref LED4) (pin 1)))
+ (net (code 127) (name "Net-(C43-Pad2)")
+ (node (ref MCU_PORT1) (pin 1))
+ (node (ref C43) (pin 2))
+ (node (ref VX_EN1) (pin 2)))
+ (net (code 128) (name /inout_user/CTS0)
+ (node (ref UARTCAN0) (pin 7))
+ (node (ref U3) (pin 8)))
+ (net (code 129) (name /inout_user/RXD2)
+ (node (ref COM_SEL2) (pin 2))
+ (node (ref UARTCAN2) (pin 3)))
+ (net (code 130) (name "Net-(PULUPEN1-Pad8)")
+ (node (ref R47) (pin 2))
+ (node (ref PULUPEN1) (pin 8)))
+ (net (code 131) (name "Net-(PULUPEN1-Pad4)")
+ (node (ref PULUPEN1) (pin 4))
+ (node (ref R49) (pin 2)))
+ (net (code 132) (name /inout_user/TxD_CAN)
+ (node (ref U7) (pin 1))
+ (node (ref CAN_EN1) (pin 3)))
+ (net (code 133) (name "Net-(R36-Pad1)")
+ (node (ref R36) (pin 1))
+ (node (ref U7) (pin 8))
+ (node (ref RS1) (pin 1)))
+ (net (code 134) (name "Net-(R23-Pad2)")
+ (node (ref R23) (pin 2))
+ (node (ref U8) (pin 11))
+ (node (ref UART_EN2) (pin 5)))
+ (net (code 135) (name "Net-(UARTCAN1-Pad1)")
+ (node (ref UARTCAN1) (pin 6))
+ (node (ref UARTCAN1) (pin 1))
+ (node (ref UARTCAN1) (pin 4)))
+ (net (code 136) (name /inout_user/RTS2)
+ (node (ref U8) (pin 14))
+ (node (ref UARTCAN2) (pin 8)))
+ (net (code 137) (name "Net-(SW_ONOFF1-Pad1)")
+ (node (ref SW_ONOFF1) (pin 1)))
+ (net (code 138) (name "Net-(F1-Pad1)")
+ (node (ref SW_ONOFF1) (pin 2))
+ (node (ref F1) (pin 1)))
+ (net (code 139) (name "Net-(J1-Pad3)")
+ (node (ref J1) (pin 3))
+ (node (ref TB1) (pin 1))
+ (node (ref SW_ONOFF1) (pin 3)))
+ (net (code 140) (name "Net-(C38-Pad1)")
+ (node (ref C38) (pin 1))
+ (node (ref VR1) (pin 5))
+ (node (ref D7) (pin 2))
+ (node (ref C41) (pin 1))
+ (node (ref F1) (pin 2)))
+ (net (code 141) (name "Net-(LED5-Pad1)")
+ (node (ref R53) (pin 1))
+ (node (ref LED5) (pin 1)))
+ (net (code 142) (name "Net-(U7-Pad5)")
+ (node (ref VREF1) (pin 1))
+ (node (ref U7) (pin 5)))
+ (net (code 143) (name "Net-(PULUPEN1-Pad6)")
+ (node (ref R48) (pin 2))
+ (node (ref PULUPEN1) (pin 6)))
+ (net (code 144) (name "Net-(PULUPEN1-Pad2)")
+ (node (ref R50) (pin 2))
+ (node (ref PULUPEN1) (pin 2)))
+ (net (code 145) (name /inout_user/CTS2/CANH)
+ (node (ref UARTCAN2) (pin 7))
+ (node (ref COM_SEL1) (pin 2)))
+ (net (code 146) (name "Net-(U8-Pad9)")
+ (node (ref UART_EN2) (pin 3))
+ (node (ref U8) (pin 9)))
+ (net (code 147) (name "Net-(R30-Pad2)")
+ (node (ref R30) (pin 2))
+ (node (ref UART_EN0) (pin 5))
+ (node (ref U3) (pin 10)))
+ (net (code 148) (name "Net-(COM_SEL3-Pad3)")
+ (node (ref COM_SEL3) (pin 3))
+ (node (ref U8) (pin 7)))
+ (net (code 149) (name "Net-(CAN_TERM1-Pad2)")
+ (node (ref R38) (pin 2))
+ (node (ref CAN_TERM1) (pin 2)))
+ (net (code 150) (name /inout_user/RxD_CAN)
+ (node (ref CAN_EN1) (pin 2))
+ (node (ref U7) (pin 4)))
+ (net (code 151) (name "Net-(VR1-Pad4)")
+ (node (ref VR1) (pin 4)))
+ (net (code 152) (name /xilinx/XIL_D4)
+ (node (ref P4) (pin 9))
+ (node (ref U9) (pin 2)))
+ (net (code 153) (name /xilinx/XIL_D3)
+ (node (ref P4) (pin 7))
+ (node (ref U9) (pin 8)))
+ (net (code 154) (name /xilinx/XIL_D2)
+ (node (ref U9) (pin 7))
+ (node (ref P4) (pin 5)))
+ (net (code 155) (name /xilinx/XIL_D1)
+ (node (ref P4) (pin 3))
+ (node (ref U9) (pin 11)))
+ (net (code 156) (name /xilinx/XIL_D0)
+ (node (ref U9) (pin 12))
+ (node (ref P4) (pin 1)))
+ (net (code 157) (name "Net-(U9-Pad106)")
+ (node (ref U9) (pin 106)))
+ (net (code 158) (name /xilinx/XIL_D35)
+ (node (ref P4) (pin 34))
+ (node (ref U9) (pin 107)))
+ (net (code 159) (name "Net-(U9-Pad74)")
+ (node (ref U9) (pin 74)))
+ (net (code 160) (name "Net-(U9-Pad66)")
+ (node (ref U9) (pin 66)))
+ (net (code 161) (name "Net-(U9-Pad86)")
+ (node (ref U9) (pin 86)))
+ (net (code 162) (name "Net-(U9-Pad37)")
+ (node (ref U9) (pin 37)))
+ (net (code 163) (name "Net-(U9-Pad56)")
+ (node (ref U9) (pin 56)))
+ (net (code 164) (name "Net-(U9-Pad67)")
+ (node (ref U9) (pin 67)))
+ (net (code 165) (name "Net-(U9-Pad77)")
+ (node (ref U9) (pin 77)))
+ (net (code 166) (name "Net-(U9-Pad87)")
+ (node (ref U9) (pin 87)))
+ (net (code 167) (name "Net-(U9-Pad18)")
+ (node (ref U9) (pin 18)))
+ (net (code 168) (name "Net-(U9-Pad38)")
+ (node (ref U9) (pin 38)))
+ (net (code 169) (name "Net-(U9-Pad75)")
+ (node (ref U9) (pin 75)))
+ (net (code 170) (name "Net-(U9-Pad84)")
+ (node (ref U9) (pin 84)))
+ (net (code 171) (name "Net-(U9-Pad94)")
+ (node (ref U9) (pin 94)))
+ (net (code 172) (name "Net-(U9-Pad15)")
+ (node (ref U9) (pin 15)))
+ (net (code 173) (name "Net-(U9-Pad25)")
+ (node (ref U9) (pin 25)))
+ (net (code 174) (name "Net-(U9-Pad35)")
+ (node (ref U9) (pin 35)))
+ (net (code 175) (name "Net-(U9-Pad55)")
+ (node (ref U9) (pin 55)))
+ (net (code 176) (name "Net-(U9-Pad65)")
+ (node (ref U9) (pin 65)))
+ (net (code 177) (name "Net-(U9-Pad16)")
+ (node (ref U9) (pin 16)))
+ (net (code 178) (name "Net-(U9-Pad26)")
+ (node (ref U9) (pin 26)))
+ (net (code 179) (name "Net-(U9-Pad36)")
+ (node (ref U9) (pin 36)))
+ (net (code 180) (name "Net-(U9-Pad121)")
+ (node (ref U9) (pin 121)))
+ (net (code 181) (name "Net-(U9-Pad141)")
+ (node (ref U9) (pin 141)))
+ (net (code 182) (name "Net-(U9-Pad102)")
+ (node (ref U9) (pin 102)))
+ (net (code 183) (name "Net-(U9-Pad120)")
+ (node (ref U9) (pin 120)))
+ (net (code 184) (name "Net-(U9-Pad103)")
+ (node (ref U9) (pin 103)))
+ (net (code 185) (name "Net-(U9-Pad133)")
+ (node (ref U9) (pin 133)))
+ (net (code 186) (name "Net-(U9-Pad68)")
+ (node (ref U9) (pin 68)))
+ (net (code 187) (name "Net-(U9-Pad78)")
+ (node (ref U9) (pin 78)))
+ (net (code 188) (name "Net-(U9-Pad88)")
+ (node (ref U9) (pin 88)))
+ (net (code 189) (name "Net-(U9-Pad19)")
+ (node (ref U9) (pin 19)))
+ (net (code 190) (name "Net-(U9-Pad29)")
+ (node (ref U9) (pin 29)))
+ (net (code 191) (name "Net-(U9-Pad39)")
+ (node (ref U9) (pin 39)))
+ (net (code 192) (name /xilinx/XIL_D5)
+ (node (ref U9) (pin 143))
+ (node (ref P4) (pin 11)))
+ (net (code 193) (name "Net-(U9-Pad69)")
+ (node (ref U9) (pin 69)))
+ (net (code 194) (name "Net-(U9-Pad79)")
+ (node (ref U9) (pin 79)))
+ (net (code 195) (name "Net-(U9-Pad110)")
+ (node (ref U9) (pin 110)))
+ (net (code 196) (name "Net-(D8-Pad1)")
+ (node (ref R62) (pin 2))
+ (node (ref D8) (pin 1)))
+ (net (code 197) (name /xilinx/TCK)
+ (node (ref P1) (pin 5))
+ (node (ref U9) (pin 89))
+ (node (ref R57) (pin 2)))
+ (net (code 198) (name /xilinx/LED_TEST1)
+ (node (ref U9) (pin 28))
+ (node (ref R62) (pin 1)))
+ (net (code 199) (name /xilinx/TDO)
+ (node (ref P1) (pin 6))
+ (node (ref U9) (pin 104)))
+ (net (code 200) (name /xilinx/TDI)
+ (node (ref U9) (pin 4))
+ (node (ref P1) (pin 4)))
+ (net (code 201) (name /xilinx/LED_TEST2)
+ (node (ref R63) (pin 1))
+ (node (ref U9) (pin 27)))
+ (net (code 202) (name "Net-(D9-Pad1)")
+ (node (ref D9) (pin 1))
+ (node (ref R63) (pin 2)))
+ (net (code 203) (name /xilinx/TMS)
+ (node (ref P1) (pin 3))
+ (node (ref U9) (pin 20)))
+ (net (code 204) (name /xilinx/XIL_D20)
+ (node (ref U9) (pin 6))
+ (node (ref P4) (pin 4)))
+ (net (code 205) (name /xilinx/XIL_D21)
+ (node (ref U9) (pin 10))
+ (node (ref P4) (pin 6)))
+ (net (code 206) (name /xilinx/XIL_D22)
+ (node (ref U9) (pin 5))
+ (node (ref P4) (pin 8)))
+ (net (code 207) (name /xilinx/+3,3V_OUT)
+ (node (ref P4) (pin 38))
+ (node (ref R64) (pin 2)))
+ (net (code 208) (name /xilinx/XIL_D17)
+ (node (ref U9) (pin 101))
+ (node (ref P4) (pin 35)))
+ (net (code 209) (name /xilinx/XIL_D26)
+ (node (ref P4) (pin 16))
+ (node (ref U9) (pin 137)))
+ (net (code 210) (name /xilinx/XIL_D31)
+ (node (ref U9) (pin 116))
+ (node (ref P4) (pin 26)))
+ (net (code 211) (name /xilinx/XIL_D36)
+ (node (ref P4) (pin 36))
+ (node (ref U9) (pin 99)))
+ (net (code 212) (name /xilinx/XIL_D8)
+ (node (ref P4) (pin 17))
+ (node (ref U9) (pin 136)))
+ (net (code 213) (name /xilinx/XIL_D13)
+ (node (ref P4) (pin 27))
+ (node (ref U9) (pin 111)))
+ (net (code 214) (name /xilinx/XIL_D18)
+ (node (ref P4) (pin 37))
+ (node (ref U9) (pin 97)))
+ (net (code 215) (name /xilinx/XIL_D27)
+ (node (ref P4) (pin 18))
+ (node (ref U9) (pin 134)))
+ (net (code 216) (name /xilinx/XIL_D32)
+ (node (ref P4) (pin 28))
+ (node (ref U9) (pin 98)))
+ (net (code 217) (name /xilinx/XIL_D12)
+ (node (ref U9) (pin 114))
+ (node (ref P4) (pin 25)))
+ (net (code 218) (name /xilinx/XIL_D9)
+ (node (ref P4) (pin 19))
+ (node (ref U9) (pin 131)))
+ (net (code 219) (name /xilinx/XIL_D14)
+ (node (ref P4) (pin 29))
+ (node (ref U9) (pin 109)))
+ (net (code 220) (name /xilinx/XIL_D19)
+ (node (ref U9) (pin 96))
+ (node (ref P4) (pin 39)))
+ (net (code 221) (name /xilinx/XIL_D29)
+ (node (ref P4) (pin 22))
+ (node (ref U9) (pin 117)))
+ (net (code 222) (name /xilinx/XIL_D23)
+ (node (ref U9) (pin 1))
+ (node (ref P4) (pin 10)))
+ (net (code 223) (name /xilinx/XIL_D28)
+ (node (ref U9) (pin 132))
+ (node (ref P4) (pin 20)))
+ (net (code 224) (name /xilinx/XIL_D33)
+ (node (ref P4) (pin 30))
+ (node (ref U9) (pin 112)))
+ (net (code 225) (name /xilinx/XIL_D10)
+ (node (ref P4) (pin 21))
+ (node (ref U9) (pin 122)))
+ (net (code 226) (name /xilinx/XIL_D15)
+ (node (ref P4) (pin 31))
+ (node (ref U9) (pin 108)))
+ (net (code 227) (name /xilinx/XIL_D24)
+ (node (ref P4) (pin 12))
+ (node (ref U9) (pin 142)))
+ (net (code 228) (name /xilinx/XIL_D34)
+ (node (ref P4) (pin 32))
+ (node (ref U9) (pin 113)))
+ (net (code 229) (name /xilinx/XIL_D6)
+ (node (ref P4) (pin 13))
+ (node (ref U9) (pin 140)))
+ (net (code 230) (name /xilinx/XIL_D11)
+ (node (ref U9) (pin 119))
+ (node (ref P4) (pin 23)))
+ (net (code 231) (name /xilinx/XIL_D16)
+ (node (ref P4) (pin 33))
+ (node (ref U9) (pin 100)))
+ (net (code 232) (name /xilinx/XIL_D25)
+ (node (ref U9) (pin 139))
+ (node (ref P4) (pin 14)))
+ (net (code 233) (name /xilinx/XIL_D30)
+ (node (ref U9) (pin 118))
+ (node (ref P4) (pin 24)))
+ (net (code 234) (name /xilinx/XIL_D7)
+ (node (ref U9) (pin 138))
+ (node (ref P4) (pin 15)))
+ (net (code 235) (name "Net-(P3-Pad4)")
+ (node (ref P3) (pin 4))
+ (node (ref U9) (pin 31)))
+ (net (code 236) (name "Net-(U9-Pad90)")
+ (node (ref U9) (pin 90)))
+ (net (code 237) (name "Net-(U9-Pad91)")
+ (node (ref U9) (pin 91)))
+ (net (code 238) (name "Net-(U9-Pad92)")
+ (node (ref U9) (pin 92)))
+ (net (code 239) (name "Net-(U9-Pad93)")
+ (node (ref U9) (pin 93)))
+ (net (code 240) (name "Net-(U9-Pad9)")
+ (node (ref U9) (pin 9)))
+ (net (code 241) (name "Net-(U9-Pad30)")
+ (node (ref U9) (pin 30)))
+ (net (code 242) (name "Net-(U9-Pad40)")
+ (node (ref U9) (pin 40)))
+ (net (code 243) (name "Net-(U9-Pad60)")
+ (node (ref U9) (pin 60)))
+ (net (code 244) (name "Net-(U9-Pad70)")
+ (node (ref U9) (pin 70)))
+ (net (code 245) (name "Net-(U9-Pad80)")
+ (node (ref U9) (pin 80)))
+ (net (code 246) (name "Net-(U9-Pad62)")
+ (node (ref U9) (pin 62)))
+ (net (code 247) (name "Net-(U9-Pad61)")
+ (node (ref U9) (pin 61)))
+ (net (code 248) (name "Net-(U9-Pad23)")
+ (node (ref U9) (pin 23)))
+ (net (code 249) (name "Net-(U9-Pad63)")
+ (node (ref U9) (pin 63)))
+ (net (code 250) (name "Net-(U9-Pad82)")
+ (node (ref U9) (pin 82)))
+ (net (code 251) (name "Net-(U9-Pad83)")
+ (node (ref U9) (pin 83)))
+ (net (code 252) (name "Net-(U9-Pad14)")
+ (node (ref U9) (pin 14)))
+ (net (code 253) (name "Net-(U9-Pad34)")
+ (node (ref U9) (pin 34)))
+ (net (code 254) (name "Net-(U9-Pad21)")
+ (node (ref U9) (pin 21)))
+ (net (code 255) (name "Net-(U9-Pad41)")
+ (node (ref U9) (pin 41)))
+ (net (code 256) (name "Net-(U9-Pad71)")
+ (node (ref U9) (pin 71)))
+ (net (code 257) (name "Net-(U9-Pad81)")
+ (node (ref U9) (pin 81)))
+ (net (code 258) (name "Net-(U9-Pad22)")
+ (node (ref U9) (pin 22)))
+ (net (code 259) (name "Net-(P3-Pad2)")
+ (node (ref U9) (pin 32))
+ (node (ref P3) (pin 2)))
+ (net (code 260) (name "Net-(U9-Pad72)")
+ (node (ref U9) (pin 72)))
+ (net (code 261) (name /AN7)
+ (node (ref U1) (pin 51))
+ (node (ref MCU_PORT1) (pin 24)))
+ (net (code 263) (name /xilinx/IRQ-1)
+ (node (ref U1) (pin 87))
+ (node (ref MCU_PORT1) (pin 2))
+ (node (ref U9) (pin 42))
+ (node (ref R4) (pin 1)))
+ (net (code 264) (name /xilinx/IRQ-2)
+ (node (ref U9) (pin 43))
+ (node (ref U1) (pin 88))
+ (node (ref MCU_PORT1) (pin 8))
+ (node (ref R5) (pin 1)))
+ (net (code 265) (name /xilinx/IRQ-3)
+ (node (ref U1) (pin 89))
+ (node (ref U9) (pin 44))
+ (node (ref R6) (pin 1))
+ (node (ref MCU_PORT1) (pin 31)))
+ (net (code 266) (name /IRQ-4)
+ (node (ref MCU_PORT1) (pin 33))
+ (node (ref U1) (pin 90))
+ (node (ref SW1) (pin 1))
+ (node (ref R8) (pin 1)))
+ (net (code 267) (name /IRQ-5)
+ (node (ref SW2) (pin 1))
+ (node (ref R10) (pin 1))
+ (node (ref MCU_PORT1) (pin 35))
+ (node (ref U1) (pin 91)))
+ (net (code 268) (name /IRQ-6)
+ (node (ref MCU_PORT1) (pin 37))
+ (node (ref U1) (pin 94))
+ (node (ref R11) (pin 1)))
+ (net (code 269) (name /AN6)
+ (node (ref U1) (pin 52))
+ (node (ref MCU_PORT1) (pin 22)))
+ (net (code 270) (name /DTIN0)
+ (node (ref U1) (pin 36))
+ (node (ref U4) (pin 2))
+ (node (ref MCU_PORT1) (pin 34)))
+ (net (code 271) (name /DTIN1)
+ (node (ref MCU_PORT1) (pin 36))
+ (node (ref U1) (pin 37))
+ (node (ref U4) (pin 5)))
+ (net (code 272) (name /DTIN2)
+ (node (ref U4) (pin 12))
+ (node (ref MCU_PORT1) (pin 38))
+ (node (ref U1) (pin 31)))
+ (net (code 273) (name /DTIN3)
+ (node (ref U4) (pin 9))
+ (node (ref U1) (pin 32))
+ (node (ref MCU_PORT1) (pin 40)))
+ (net (code 274) (name /AN0)
+ (node (ref U1) (pin 43))
+ (node (ref MCU_PORT1) (pin 10)))
+ (net (code 275) (name /AN1)
+ (node (ref MCU_PORT1) (pin 12))
+ (node (ref U1) (pin 44)))
+ (net (code 276) (name /AN2)
+ (node (ref MCU_PORT1) (pin 14))
+ (node (ref U1) (pin 45)))
+ (net (code 277) (name /AN3)
+ (node (ref MCU_PORT1) (pin 16))
+ (node (ref U1) (pin 46)))
+ (net (code 278) (name /AN4)
+ (node (ref U1) (pin 54))
+ (node (ref MCU_PORT1) (pin 18)))
+ (net (code 279) (name /AN5)
+ (node (ref U1) (pin 53))
+ (node (ref MCU_PORT1) (pin 20))))) \ No newline at end of file
diff --git a/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.pro b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.pro
new file mode 100644
index 0000000..376475b
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.pro
@@ -0,0 +1,37 @@
+update=18/05/2015 09:05:34
+last_client=kicad
+[general]
+version=1
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=
+UseCmpFile=1
+PadDrill=0
+PadDrillOvalY=0
+PadSizeH=0.4064
+PadSizeV=1.27
+PcbTextSizeV=2.032
+PcbTextSizeH=1.524
+PcbTextThickness=0.3048
+ModuleTextSizeV=1.524
+ModuleTextSizeH=1.524
+ModuleTextSizeThickness=0.3048
+SolderMaskClearance=0.2
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.381
+BoardOutlineThickness=0.381
+ModuleOutlineThickness=0.1524
+[pcbnew/libraries]
+LibDir=
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=kit-dev-coldfire-xilinx_5213_schlib
+LibName2=power
diff --git a/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.sch b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.sch
new file mode 100644
index 0000000..751ac0d
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.sch
@@ -0,0 +1,2566 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:motorola
+LIBS:kit-dev-coldfire-xilinx_5213-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 1 3
+Title "Dev kit coldfire 5213"
+Date "Sun 22 Mar 2015"
+Rev "0"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Connection ~ 7100 1400
+Wire Wire Line
+ 6900 1200 7100 1200
+Wire Wire Line
+ 7100 1200 7100 1400
+Wire Wire Line
+ 7100 1400 7100 1450
+Connection ~ 2900 10000
+Wire Wire Line
+ 3850 10000 4000 10000
+Wire Wire Line
+ 4000 10000 4200 10000
+Wire Wire Line
+ 4200 10000 4400 10000
+Wire Wire Line
+ 4400 10000 4750 10000
+Wire Wire Line
+ 4750 10000 5150 10000
+Wire Wire Line
+ 5150 10000 5550 10000
+Wire Wire Line
+ 5550 10000 5900 10000
+Wire Wire Line
+ 5900 10000 6250 10000
+Wire Wire Line
+ 6250 10000 6600 10000
+Wire Wire Line
+ 6600 10000 7000 10000
+Wire Wire Line
+ 7000 10000 7350 10000
+Wire Wire Line
+ 7350 10000 7750 10000
+Wire Wire Line
+ 2350 7800 1100 7800
+Wire Wire Line
+ 1100 7800 1100 8100
+Wire Wire Line
+ 1100 8100 1100 8500
+Wire Wire Line
+ 1100 8500 1100 8700
+Wire Wire Line
+ 1800 8100 1900 8100
+Wire Wire Line
+ 1900 8100 2350 8100
+Wire Wire Line
+ 13900 4450 13850 4450
+Connection ~ 2300 3000
+Wire Wire Line
+ 1600 3000 1900 3000
+Wire Wire Line
+ 1900 3000 2300 3000
+Wire Wire Line
+ 2300 3000 2400 3000
+Wire Wire Line
+ 13100 6750 12200 6750
+Wire Wire Line
+ 12550 6200 13100 6200
+Wire Wire Line
+ 12550 6100 13100 6100
+Connection ~ 5150 10500
+Wire Wire Line
+ 1900 4300 2000 4300
+Wire Wire Line
+ 3850 10000 3850 9950
+Wire Wire Line
+ 15600 7950 15100 7950
+Wire Wire Line
+ 15600 7850 15100 7850
+Wire Wire Line
+ 12650 8150 13100 8150
+Wire Wire Line
+ 12650 8050 13100 8050
+Wire Wire Line
+ 15100 8950 15600 8950
+Wire Wire Line
+ 15100 8850 15600 8850
+Wire Wire Line
+ 15550 9150 15100 9150
+Wire Wire Line
+ 15550 9250 15100 9250
+Wire Wire Line
+ 15550 9350 15100 9350
+Wire Wire Line
+ 15550 9450 15100 9450
+Wire Wire Line
+ 13100 9450 12650 9450
+Wire Wire Line
+ 13100 9350 12650 9350
+Wire Wire Line
+ 13100 8900 12650 8900
+Wire Wire Line
+ 13100 9000 12650 9000
+Wire Wire Line
+ 13100 8450 12650 8450
+Wire Wire Line
+ 13100 8550 12650 8550
+Wire Wire Line
+ 13100 8350 12650 8350
+Wire Wire Line
+ 13100 8250 12650 8250
+Wire Wire Line
+ 13100 8800 12650 8800
+Wire Wire Line
+ 13100 8700 12650 8700
+Wire Wire Line
+ 13100 9250 12650 9250
+Wire Wire Line
+ 13100 9150 12650 9150
+Wire Wire Line
+ 15550 8750 15100 8750
+Wire Wire Line
+ 15550 8650 15100 8650
+Wire Bus Line
+ 15850 8250 15100 8250
+Wire Wire Line
+ 15100 8550 15700 8550
+Wire Wire Line
+ 15100 8450 15700 8450
+Wire Wire Line
+ 15100 8350 15700 8350
+Wire Wire Line
+ 12500 1700 12600 1700
+Connection ~ 1100 8100
+Wire Wire Line
+ 1100 8100 1300 8100
+Wire Wire Line
+ 5450 2450 6150 2450
+Wire Wire Line
+ 5450 2350 6150 2350
+Wire Wire Line
+ 10600 5300 10150 5300
+Wire Wire Line
+ 10600 5200 10150 5200
+Wire Wire Line
+ 10600 5100 10150 5100
+Wire Wire Line
+ 10600 5000 10150 5000
+Wire Wire Line
+ 10600 4900 10150 4900
+Wire Wire Line
+ 10600 4800 10150 4800
+Wire Wire Line
+ 10600 2850 10150 2850
+Wire Wire Line
+ 10600 2750 10150 2750
+Wire Wire Line
+ 10600 2650 10150 2650
+Wire Wire Line
+ 10600 2550 10150 2550
+Wire Wire Line
+ 2300 4500 2300 4600
+Wire Wire Line
+ 2800 3000 2950 3000
+Wire Wire Line
+ 2950 3000 3600 3000
+Wire Wire Line
+ 850 2950 850 3000
+Wire Wire Line
+ 850 3000 900 3000
+Connection ~ 2600 10000
+Wire Wire Line
+ 2600 10050 2600 10000
+Wire Wire Line
+ 2900 10000 2900 10050
+Wire Wire Line
+ 5350 6950 5350 6900
+Wire Wire Line
+ 5350 6900 5450 6900
+Wire Wire Line
+ 5450 6900 5450 6800
+Wire Wire Line
+ 5450 6800 6150 6800
+Wire Wire Line
+ 1100 10000 1050 10000
+Wire Wire Line
+ 1050 10000 1050 9950
+Wire Wire Line
+ 2450 10000 2600 10000
+Wire Wire Line
+ 2600 10000 2900 10000
+Wire Wire Line
+ 2900 10000 3200 10000
+Wire Wire Line
+ 6150 6950 5700 6950
+Wire Wire Line
+ 5700 6700 6150 6700
+Connection ~ 14450 1700
+Wire Wire Line
+ 14350 1700 14450 1700
+Wire Wire Line
+ 14450 1700 14600 1700
+Wire Wire Line
+ 14450 1150 14450 1100
+Connection ~ 13300 1700
+Wire Wire Line
+ 13300 1850 13300 1700
+Wire Wire Line
+ 13100 1700 13300 1700
+Wire Wire Line
+ 13300 1700 13450 1700
+Wire Wire Line
+ 6150 3050 5750 3050
+Wire Bus Line
+ 5550 5950 5550 6050
+Wire Bus Line
+ 5550 6050 5550 6150
+Wire Bus Line
+ 5550 6150 5550 6250
+Wire Bus Line
+ 5550 6250 5550 6350
+Wire Bus Line
+ 5550 6350 5550 6450
+Wire Bus Line
+ 5550 6450 5550 6550
+Wire Bus Line
+ 5550 6550 5550 6650
+Connection ~ 6750 1400
+Wire Wire Line
+ 6750 1450 6750 1400
+Wire Wire Line
+ 6300 1200 6250 1200
+Wire Wire Line
+ 6250 1200 6250 1150
+Wire Wire Line
+ 5550 2750 6150 2750
+Wire Wire Line
+ 5550 2650 6150 2650
+Wire Bus Line
+ 5400 5900 4600 5900
+Wire Bus Line
+ 5400 5150 5400 5250
+Wire Bus Line
+ 5400 5250 5400 5350
+Wire Bus Line
+ 5400 5350 5400 5450
+Wire Bus Line
+ 5400 5450 5400 5550
+Wire Bus Line
+ 5400 5550 5400 5650
+Wire Bus Line
+ 5400 5650 5400 5750
+Wire Bus Line
+ 5400 5750 5400 5900
+Connection ~ 4150 5150
+Wire Wire Line
+ 4150 5150 4200 5150
+Connection ~ 4750 5450
+Wire Wire Line
+ 4750 5450 4800 5450
+Connection ~ 4750 5050
+Wire Wire Line
+ 4750 5050 4800 5050
+Wire Wire Line
+ 5300 5650 5400 5650
+Wire Wire Line
+ 5400 5650 6150 5650
+Wire Wire Line
+ 5300 5450 5400 5450
+Wire Wire Line
+ 5400 5450 6150 5450
+Wire Wire Line
+ 5300 5250 5400 5250
+Wire Wire Line
+ 5400 5250 6150 5250
+Wire Wire Line
+ 5300 5050 6150 5050
+Wire Wire Line
+ 13600 4700 13600 4800
+Wire Wire Line
+ 14550 4450 14550 4600
+Wire Wire Line
+ 14550 4600 14550 4750
+Wire Wire Line
+ 12800 4400 12100 4400
+Wire Wire Line
+ 15150 4000 13600 4000
+Wire Wire Line
+ 15150 4200 13600 4200
+Wire Wire Line
+ 12800 4100 12100 4100
+Wire Wire Line
+ 12450 4700 12700 4700
+Wire Wire Line
+ 12700 4700 12800 4700
+Connection ~ 14100 4600
+Wire Wire Line
+ 14100 4600 14100 4700
+Connection ~ 14350 3800
+Wire Wire Line
+ 14350 3250 14350 3800
+Wire Wire Line
+ 13600 3600 14100 3600
+Wire Wire Line
+ 14100 3600 15150 3600
+Connection ~ 13850 3500
+Wire Wire Line
+ 13850 3250 13850 3500
+Connection ~ 14350 2700
+Wire Wire Line
+ 14350 2700 14350 2750
+Connection ~ 13850 2700
+Wire Wire Line
+ 13850 2650 13850 2700
+Wire Wire Line
+ 13850 2700 13850 2750
+Wire Wire Line
+ 13850 2700 14100 2700
+Wire Wire Line
+ 14100 2700 14350 2700
+Wire Wire Line
+ 14350 2700 14600 2700
+Wire Wire Line
+ 13600 4600 14100 4600
+Wire Wire Line
+ 14100 4600 14550 4600
+Wire Wire Line
+ 14550 4600 15100 4600
+Wire Wire Line
+ 13600 3800 14350 3800
+Wire Wire Line
+ 14350 3800 15150 3800
+Wire Wire Line
+ 5700 3850 6150 3850
+Wire Wire Line
+ 5700 3550 6150 3550
+Wire Wire Line
+ 6150 3750 5650 3750
+Connection ~ 2850 1650
+Wire Wire Line
+ 2750 1650 2850 1650
+Wire Wire Line
+ 2850 1650 3600 1650
+Wire Wire Line
+ 2850 1600 2850 1650
+Connection ~ 5150 10000
+Wire Wire Line
+ 5150 10000 5150 10050
+Wire Wire Line
+ 5000 3350 5050 3350
+Wire Wire Line
+ 5050 3350 6150 3350
+Connection ~ 12600 4000
+Wire Wire Line
+ 12600 4000 12800 4000
+Wire Wire Line
+ 12600 3600 12600 3700
+Wire Wire Line
+ 12600 3700 12600 4000
+Wire Wire Line
+ 12600 4000 12600 4600
+Wire Wire Line
+ 12600 4600 12600 4800
+Wire Wire Line
+ 12600 3600 12800 3600
+Connection ~ 4750 10000
+Wire Wire Line
+ 4750 10000 4750 10050
+Connection ~ 7350 10000
+Wire Wire Line
+ 7350 10050 7350 10000
+Connection ~ 6600 10000
+Wire Wire Line
+ 6600 10000 6600 10050
+Connection ~ 5900 10000
+Wire Wire Line
+ 5900 10000 5900 10050
+Connection ~ 4400 10000
+Connection ~ 5550 10500
+Wire Wire Line
+ 5550 10500 5550 10450
+Connection ~ 6250 10500
+Wire Wire Line
+ 6250 10500 6250 10450
+Connection ~ 7000 10500
+Wire Wire Line
+ 7000 10500 7000 10450
+Connection ~ 7750 10500
+Wire Wire Line
+ 7750 10500 7750 10450
+Wire Wire Line
+ 7850 10500 7850 10550
+Connection ~ 8350 7500
+Wire Wire Line
+ 8350 7500 8350 7450
+Connection ~ 8250 7500
+Wire Wire Line
+ 8250 7500 8250 7450
+Connection ~ 8150 7500
+Wire Wire Line
+ 8150 7500 8150 7450
+Connection ~ 8050 7500
+Wire Wire Line
+ 8050 7500 8050 7450
+Connection ~ 7950 7500
+Wire Wire Line
+ 7950 7500 7950 7450
+Wire Wire Line
+ 7900 7500 7950 7500
+Wire Wire Line
+ 7950 7500 8000 7500
+Wire Wire Line
+ 8000 7500 8050 7500
+Wire Wire Line
+ 8050 7500 8100 7500
+Wire Wire Line
+ 8100 7500 8150 7500
+Wire Wire Line
+ 8150 7500 8200 7500
+Wire Wire Line
+ 8200 7500 8250 7500
+Wire Wire Line
+ 8250 7500 8300 7500
+Wire Wire Line
+ 8300 7500 8350 7500
+Wire Wire Line
+ 8350 7500 8400 7500
+Wire Wire Line
+ 7900 7500 7900 7450
+Connection ~ 8000 1700
+Wire Wire Line
+ 8000 1700 8000 1750
+Connection ~ 8100 1700
+Wire Wire Line
+ 8100 1700 8100 1750
+Connection ~ 8200 1700
+Wire Wire Line
+ 8200 1700 8200 1750
+Connection ~ 8300 1700
+Wire Wire Line
+ 8300 1700 8300 1750
+Wire Wire Line
+ 7900 1750 7900 1700
+Wire Wire Line
+ 8350 1700 8350 1750
+Connection ~ 8350 1700
+Wire Wire Line
+ 8250 1700 8250 1750
+Connection ~ 8250 1700
+Wire Wire Line
+ 8150 1700 8150 1750
+Connection ~ 8150 1700
+Wire Wire Line
+ 8050 1700 8050 1750
+Connection ~ 8050 1700
+Wire Wire Line
+ 7950 1750 7950 1700
+Connection ~ 7950 1700
+Wire Wire Line
+ 8400 7450 8400 7500
+Wire Wire Line
+ 8400 7500 8400 7550
+Connection ~ 8400 7500
+Wire Wire Line
+ 8000 7500 8000 7450
+Connection ~ 8000 7500
+Wire Wire Line
+ 8100 7500 8100 7450
+Connection ~ 8100 7500
+Wire Wire Line
+ 8200 7500 8200 7450
+Connection ~ 8200 7500
+Wire Wire Line
+ 8300 7500 8300 7450
+Connection ~ 8300 7500
+Wire Wire Line
+ 4750 10450 4750 10500
+Wire Wire Line
+ 7350 10500 7350 10450
+Connection ~ 7350 10500
+Wire Wire Line
+ 6600 10500 6600 10450
+Connection ~ 6600 10500
+Wire Wire Line
+ 5900 10500 5900 10450
+Connection ~ 5900 10500
+Wire Wire Line
+ 7750 10000 7750 10050
+Wire Wire Line
+ 5550 10000 5550 10050
+Connection ~ 5550 10000
+Wire Wire Line
+ 6250 10000 6250 10050
+Connection ~ 6250 10000
+Wire Wire Line
+ 7000 10000 7000 10050
+Connection ~ 7000 10000
+Wire Wire Line
+ 4400 10450 4400 10500
+Connection ~ 4750 10500
+Wire Wire Line
+ 4000 9950 4000 10000
+Wire Wire Line
+ 12800 3700 12600 3700
+Connection ~ 12600 3700
+Wire Wire Line
+ 12600 4600 12800 4600
+Connection ~ 12600 4600
+Wire Wire Line
+ 5050 3300 5050 3350
+Connection ~ 5050 3350
+Wire Wire Line
+ 5150 10500 5150 10450
+Wire Wire Line
+ 5550 2850 6150 2850
+Wire Wire Line
+ 5550 2950 6150 2950
+Wire Wire Line
+ 3050 1600 3050 2000
+Connection ~ 3050 2000
+Wire Wire Line
+ 2750 2000 3050 2000
+Wire Wire Line
+ 3050 2000 3600 2000
+Wire Wire Line
+ 5150 3750 4750 3750
+Wire Wire Line
+ 5700 3650 6150 3650
+Wire Wire Line
+ 14600 2700 14600 2750
+Wire Wire Line
+ 14100 2700 14100 2750
+Connection ~ 14100 2700
+Wire Wire Line
+ 13600 3500 13850 3500
+Wire Wire Line
+ 13850 3500 15150 3500
+Wire Wire Line
+ 5700 3450 6150 3450
+Wire Wire Line
+ 14100 3250 14100 3600
+Connection ~ 14100 3600
+Wire Wire Line
+ 13600 3900 14600 3900
+Wire Wire Line
+ 14600 3900 15150 3900
+Wire Wire Line
+ 14600 3250 14600 3900
+Connection ~ 14600 3900
+Connection ~ 14550 4600
+Wire Wire Line
+ 6150 4100 5600 4100
+Wire Wire Line
+ 6150 4200 5600 4200
+Wire Wire Line
+ 6150 4300 5600 4300
+Wire Wire Line
+ 6150 4400 5600 4400
+Wire Wire Line
+ 6150 4500 5600 4500
+Wire Wire Line
+ 6150 4600 5600 4600
+Wire Wire Line
+ 6150 4700 5600 4700
+Wire Wire Line
+ 6150 4800 5600 4800
+Wire Wire Line
+ 12800 3900 12700 3900
+Wire Wire Line
+ 12700 3900 12700 4700
+Connection ~ 12700 4700
+Wire Wire Line
+ 12800 4200 12100 4200
+Wire Wire Line
+ 15150 4100 13600 4100
+Wire Wire Line
+ 15150 4300 13600 4300
+Wire Wire Line
+ 12800 4300 12100 4300
+Wire Wire Line
+ 12100 3800 12800 3800
+Wire Wire Line
+ 13600 3700 13850 3700
+Wire Wire Line
+ 13850 3700 13850 4450
+Wire Wire Line
+ 4700 5150 5400 5150
+Wire Wire Line
+ 5400 5150 6150 5150
+Wire Wire Line
+ 4700 5350 5400 5350
+Wire Wire Line
+ 5400 5350 6150 5350
+Wire Wire Line
+ 4700 5550 5400 5550
+Wire Wire Line
+ 5400 5550 6150 5550
+Wire Wire Line
+ 4750 5650 4800 5650
+Wire Wire Line
+ 4750 5000 4750 5050
+Wire Wire Line
+ 4750 5050 4750 5250
+Wire Wire Line
+ 4750 5250 4750 5450
+Wire Wire Line
+ 4750 5450 4750 5650
+Wire Wire Line
+ 4750 5250 4800 5250
+Connection ~ 4750 5250
+Wire Wire Line
+ 4150 5550 4200 5550
+Wire Wire Line
+ 4150 5000 4150 5150
+Wire Wire Line
+ 4150 5150 4150 5350
+Wire Wire Line
+ 4150 5350 4150 5550
+Wire Wire Line
+ 4150 5350 4200 5350
+Connection ~ 4150 5350
+Wire Wire Line
+ 10600 2100 10150 2100
+Wire Wire Line
+ 10600 2200 10150 2200
+Wire Wire Line
+ 10600 2300 10150 2300
+Wire Wire Line
+ 10600 2400 10150 2400
+Wire Wire Line
+ 10600 3000 10150 3000
+Wire Wire Line
+ 10600 3100 10150 3100
+Wire Wire Line
+ 10600 3200 10150 3200
+Wire Wire Line
+ 10600 3300 10150 3300
+Wire Wire Line
+ 6150 1400 6750 1400
+Wire Wire Line
+ 6750 1400 7100 1400
+Wire Wire Line
+ 6150 1400 6150 2100
+Wire Wire Line
+ 6150 5850 5650 5850
+Wire Wire Line
+ 6150 5950 5650 5950
+Wire Wire Line
+ 6150 6050 5650 6050
+Wire Wire Line
+ 6150 6150 5650 6150
+Wire Wire Line
+ 6150 6250 5650 6250
+Wire Wire Line
+ 6150 6350 5650 6350
+Wire Wire Line
+ 6150 6450 5650 6450
+Wire Wire Line
+ 6150 6550 5650 6550
+Wire Bus Line
+ 5550 6650 4600 6650
+Wire Wire Line
+ 5250 3050 5250 3000
+Wire Wire Line
+ 6150 4000 5500 4000
+Wire Wire Line
+ 13100 1700 13100 1800
+Wire Wire Line
+ 14450 1650 14450 1700
+Wire Wire Line
+ 11800 1700 11900 1700
+Wire Wire Line
+ 15400 1700 15000 1700
+Wire Wire Line
+ 6150 7050 6100 7050
+Wire Wire Line
+ 6100 7050 6100 7100
+Wire Wire Line
+ 1700 10000 1850 10000
+Wire Wire Line
+ 1850 10500 1800 10500
+Wire Wire Line
+ 1800 10500 1800 10550
+Wire Wire Line
+ 2600 10450 2600 10500
+Wire Wire Line
+ 2600 10500 2600 10600
+Wire Wire Line
+ 10150 5700 11050 5700
+Wire Wire Line
+ 10150 5800 11050 5800
+Wire Wire Line
+ 10150 5900 11050 5900
+Wire Wire Line
+ 10150 6000 11050 6000
+Wire Wire Line
+ 10150 6100 11050 6100
+Wire Wire Line
+ 10150 6200 11050 6200
+Wire Wire Line
+ 10150 6300 11050 6300
+Wire Wire Line
+ 1900 3000 1900 3100
+Wire Wire Line
+ 2950 2900 2950 3000
+Connection ~ 2950 3000
+Wire Wire Line
+ 1400 4300 800 4300
+Wire Wire Line
+ 2300 5100 2300 5200
+Wire Wire Line
+ 2300 5600 2300 5700
+Wire Wire Line
+ 10600 4100 10150 4100
+Wire Wire Line
+ 10600 4200 10150 4200
+Wire Wire Line
+ 10600 4300 10150 4300
+Wire Wire Line
+ 10600 4400 10150 4400
+Wire Wire Line
+ 10600 4500 10150 4500
+Wire Wire Line
+ 10600 4600 10150 4600
+Wire Wire Line
+ 10600 3650 10150 3650
+Wire Wire Line
+ 10600 3750 10150 3750
+Wire Wire Line
+ 6150 3150 6100 3150
+Wire Wire Line
+ 1100 8500 1200 8500
+Connection ~ 1100 8500
+Wire Wire Line
+ 1800 8500 1900 8500
+Connection ~ 1900 8500
+Connection ~ 1900 8100
+Wire Bus Line
+ 12300 7850 13100 7850
+Wire Bus Line
+ 12300 7950 13100 7950
+Wire Bus Line
+ 12300 7650 13100 7650
+Wire Bus Line
+ 12300 7750 13100 7750
+Connection ~ 4000 10000
+Wire Wire Line
+ 12550 5750 13100 5750
+Wire Wire Line
+ 12550 5850 13100 5850
+Wire Wire Line
+ 12550 5950 13100 5950
+Wire Wire Line
+ 13100 6350 12200 6350
+Wire Wire Line
+ 13100 6450 12200 6450
+Wire Wire Line
+ 13100 6550 12200 6550
+Wire Wire Line
+ 13100 6650 12200 6650
+Wire Wire Line
+ 8400 1650 8400 1700
+Wire Wire Line
+ 8400 1700 8400 1750
+Connection ~ 8400 1700
+Wire Wire Line
+ 2300 3100 2300 3000
+Connection ~ 1900 3000
+Wire Wire Line
+ 14550 4450 14500 4450
+Wire Wire Line
+ 4400 10500 4750 10500
+Wire Wire Line
+ 4750 10500 5150 10500
+Wire Wire Line
+ 5150 10500 5550 10500
+Wire Wire Line
+ 5550 10500 5900 10500
+Wire Wire Line
+ 5900 10500 6250 10500
+Wire Wire Line
+ 6250 10500 6600 10500
+Wire Wire Line
+ 6600 10500 7000 10500
+Wire Wire Line
+ 7000 10500 7350 10500
+Wire Wire Line
+ 7350 10500 7750 10500
+Wire Wire Line
+ 7750 10500 7850 10500
+Wire Wire Line
+ 7850 10500 8000 10500
+Wire Wire Line
+ 8000 10500 8100 10500
+Wire Wire Line
+ 1900 8100 1900 8500
+Wire Wire Line
+ 1900 8500 1900 8650
+Wire Wire Line
+ 12200 6850 13100 6850
+Wire Wire Line
+ 2900 10450 2900 10500
+Wire Wire Line
+ 2900 10500 2900 10600
+Wire Wire Line
+ 8500 1700 8500 1750
+Wire Wire Line
+ 7900 1700 7950 1700
+Wire Wire Line
+ 7950 1700 8000 1700
+Wire Wire Line
+ 8000 1700 8050 1700
+Wire Wire Line
+ 8050 1700 8100 1700
+Wire Wire Line
+ 8100 1700 8150 1700
+Wire Wire Line
+ 8150 1700 8200 1700
+Wire Wire Line
+ 8200 1700 8250 1700
+Wire Wire Line
+ 8250 1700 8300 1700
+Wire Wire Line
+ 8300 1700 8350 1700
+Wire Wire Line
+ 8350 1700 8400 1700
+Wire Wire Line
+ 8400 1700 8500 1700
+$Comp
+L MCF5213-LQFP100 U1
+U 1 1 46161C39
+P 8150 4600
+F 0 "U1" H 8150 7600 60 0000 C CNN
+F 1 "MCF5213-LQFP100" H 8750 1950 60 0000 L CNN
+F 2 "lib_smd:VQFP100" H 8150 4600 60 0001 C CNN
+F 3 "" H 8150 4600 60 0001 C CNN
+ 1 8150 4600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GNDA #PWR01
+U 1 1 462382A4
+P 2900 10600
+F 0 "#PWR01" H 2900 10600 40 0001 C CNN
+F 1 "GNDA" H 2900 10530 40 0000 C CNN
+F 2 "" H 2900 10600 60 0001 C CNN
+F 3 "" H 2900 10600 60 0001 C CNN
+ 1 2900 10600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C18
+U 1 1 46238286
+P 2900 10250
+F 0 "C18" H 2950 10350 50 0000 L CNN
+F 1 "100nF" H 2950 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 2900 10250 60 0001 C CNN
+F 3 "" H 2900 10250 60 0001 C CNN
+ 1 2900 10250
+ 1 0 0 -1
+$EndComp
+Text Label 12450 6850 0 60 ~ 0
+XTAL
+Text Label 2050 8100 0 60 ~ 0
+XTAL
+$Comp
+L GNDA #PWR02
+U 1 1 46602ECA
+P 5350 6950
+F 0 "#PWR02" H 5350 6950 40 0001 C CNN
+F 1 "GNDA" H 5350 6880 40 0000 C CNN
+F 2 "" H 5350 6950 60 0001 C CNN
+F 3 "" H 5350 6950 60 0001 C CNN
+ 1 5350 6950
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 GND1
+U 1 1 465FE6C5
+P 8250 10500
+F 0 "GND1" H 8330 10500 40 0000 L CNN
+F 1 "CONN_1" H 8250 10555 30 0001 C CNN
+F 2 "connect:PINTST" H 8250 10500 60 0001 C CNN
+F 3 "" H 8250 10500 60 0001 C CNN
+ 1 8250 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GNDA #PWR03
+U 1 1 46555AB9
+P 6100 7100
+F 0 "#PWR03" H 6100 7100 40 0001 C CNN
+F 1 "GNDA" H 6100 7030 40 0000 C CNN
+F 2 "" H 6100 7100 60 0001 C CNN
+F 3 "" H 6100 7100 60 0001 C CNN
+ 1 6100 7100
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR04
+U 1 1 46554FD2
+P 13850 1450
+F 0 "#PWR04" H 13850 1410 30 0001 C CNN
+F 1 "+3.3V" H 13850 1560 40 0000 C CNN
+F 2 "" H 13850 1450 60 0001 C CNN
+F 3 "" H 13850 1450 60 0001 C CNN
+ 1 13850 1450
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR05
+U 1 1 46554FCD
+P 13850 1950
+F 0 "#PWR05" H 13850 1950 30 0001 C CNN
+F 1 "GND" H 13850 1880 30 0001 C CNN
+F 2 "" H 13850 1950 60 0001 C CNN
+F 3 "" H 13850 1950 60 0001 C CNN
+ 1 13850 1950
+ -1 0 0 -1
+$EndComp
+$Comp
+L 74AHC1G14 U2
+U 1 1 46554FB5
+P 13900 1700
+F 0 "U2" H 13950 1850 50 0000 C CNN
+F 1 "74AHC1G14" H 13900 1350 50 0000 C CNN
+F 2 "lib_smd:SOT353" H 13900 1700 60 0001 C CNN
+F 3 "" H 13900 1700 60 0001 C CNN
+ 1 13900 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER CT1
+U 1 1 46545507
+P 14200 4450
+F 0 "CT1" H 14600 4500 60 0000 C CNN
+F 1 "JUMPER" H 14200 4370 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 14200 4450 60 0001 C CNN
+F 3 "" H 14200 4450 60 0001 C CNN
+ 1 14200 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR06
+U 1 1 465451F6
+P 2300 3750
+F 0 "#PWR06" H 2300 3750 30 0001 C CNN
+F 1 "GND" H 2300 3680 30 0001 C CNN
+F 2 "" H 2300 3750 60 0001 C CNN
+F 3 "" H 2300 3750 60 0001 C CNN
+ 1 2300 3750
+ 1 0 0 -1
+$EndComp
+$Comp
+L SW_PUSH RST_SW1
+U 1 1 465451D4
+P 2300 3400
+F 0 "RST_SW1" V 2250 3750 50 0000 C CNN
+F 1 "SW_PUSH" V 2350 3750 50 0000 C CNN
+F 2 "discret:SW_PUSH_SMALL" H 2300 3400 60 0001 C CNN
+F 3 "" H 2300 3400 60 0001 C CNN
+ 1 2300 3400
+ 0 1 1 0
+$EndComp
+Text Label 12350 6750 0 60 ~ 0
+QSPI_CLK
+Text Label 12350 6650 0 60 ~ 0
+QSPI_CS2
+Text Label 12350 6550 0 60 ~ 0
+QSPI_CS1
+Text Label 12600 6200 0 60 ~ 0
+UCTS1
+Text Label 12600 6100 0 60 ~ 0
+URTS1
+Text Label 12350 6350 0 60 ~ 0
+DSPI_DOUT
+Text Label 12350 6450 0 60 ~ 0
+QSPI_DIN
+Text Label 12650 5950 0 60 ~ 0
+IRQ-3
+Text Label 12650 5850 0 60 ~ 0
+IRQ-2
+Text Label 12650 5750 0 60 ~ 0
+IRQ-1
+$Comp
+L VCC #PWR07
+U 1 1 4652AF7E
+P 3850 9950
+F 0 "#PWR07" H 3850 10050 30 0001 C CNN
+F 1 "VCC" H 3850 10050 40 0000 C CNN
+F 2 "" H 3850 9950 60 0001 C CNN
+F 3 "" H 3850 9950 60 0001 C CNN
+ 1 3850 9950
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG08
+U 1 1 4652AF2F
+P 3150 10550
+F 0 "#FLG08" H 3150 10820 30 0001 C CNN
+F 1 "PWR_FLAG" H 3150 10780 30 0000 C CNN
+F 2 "" H 3150 10550 60 0001 C CNN
+F 3 "" H 3150 10550 60 0001 C CNN
+ 1 3150 10550
+ -1 0 0 1
+$EndComp
+Text Label 15200 7850 0 60 ~ 0
+VRL
+Text Label 15200 7950 0 60 ~ 0
+VRH
+$Comp
+L PWR_FLAG #FLG09
+U 1 1 4652AE72
+P 8000 10550
+F 0 "#FLG09" H 8000 10820 30 0001 C CNN
+F 1 "PWR_FLAG" H 8000 10780 30 0000 C CNN
+F 2 "" H 8000 10550 60 0001 C CNN
+F 3 "" H 8000 10550 60 0001 C CNN
+ 1 8000 10550
+ -1 0 0 1
+$EndComp
+Text Label 12700 8150 0 60 ~ 0
+RCON-
+Text Label 12700 8050 0 60 ~ 0
+VCCA
+Text Label 12400 7950 0 60 ~ 0
+GPT[0..3]
+Text Label 12400 7750 0 60 ~ 0
+DTIN[0..3]
+Text Label 12400 7650 0 60 ~ 0
+AN[0..7]
+Text Label 12400 7850 0 60 ~ 0
+IRQ-[0..7]
+Text Label 15250 8950 0 60 ~ 0
+RSTO-
+Text Label 15250 8850 0 60 ~ 0
+RSTI-
+Text Label 15250 9450 0 60 ~ 0
+PWM7
+Text Label 15250 9350 0 60 ~ 0
+PWM5
+Text Label 15250 9250 0 60 ~ 0
+PWM3
+Text Label 15250 9150 0 60 ~ 0
+PWM1
+Text Label 12700 9450 0 60 ~ 0
+UCTS2
+Text Label 12700 9350 0 60 ~ 0
+URTS2
+Text Label 12700 8900 0 60 ~ 0
+UCTS1
+Text Label 12700 9000 0 60 ~ 0
+URTS1
+Text Label 12700 8450 0 60 ~ 0
+UCTS0
+Text Label 12700 8550 0 60 ~ 0
+URTS0
+Text Label 12700 9150 0 60 ~ 0
+URXD2
+Text Label 12700 8700 0 60 ~ 0
+URXD1
+Text Label 12700 8250 0 60 ~ 0
+URXD0
+Text Label 12700 9250 0 60 ~ 0
+UTXD2
+Text Label 12700 8800 0 60 ~ 0
+UTXD1
+Text Label 12700 8350 0 60 ~ 0
+UTXD0
+Text Label 15200 8650 0 60 ~ 0
+CANRX
+Text Label 15200 8750 0 60 ~ 0
+CANTX
+Text Label 15200 8250 0 60 ~ 0
+QSPI_CS[0..3]
+Text Label 15200 8350 0 60 ~ 0
+QSPI_CLK
+Text Label 15200 8550 0 60 ~ 0
+DSPI_DOUT
+Text Label 15200 8450 0 60 ~ 0
+QSPI_DIN
+$Sheet
+S 13100 7550 2000 2050
+U 47D80202
+F0 "inout_user" 60
+F1 "in_out_conn.sch" 60
+F2 "AN[0..7]" I L 13100 7650 60
+F3 "DTIN[0..3]" I L 13100 7750 60
+F4 "IRQ-[0..7]" I L 13100 7850 60
+F5 "GPT[0..3]" I L 13100 7950 60
+F6 "VCCA" I L 13100 8050 60
+F7 "RCON-" I L 13100 8150 60
+F8 "UCTS2" I L 13100 9450 60
+F9 "URTS2" I L 13100 9350 60
+F10 "UCTS0" I L 13100 8450 60
+F11 "URTS0" I L 13100 8550 60
+F12 "URXD2" I L 13100 9150 60
+F13 "UTXD2" I L 13100 9250 60
+F14 "URXD0" I L 13100 8250 60
+F15 "UTXD0" I L 13100 8350 60
+F16 "QSPI_SCLK" I R 15100 8350 60
+F17 "QSPI_DIN" I R 15100 8450 60
+F18 "QSPI_DOUT" I R 15100 8550 60
+F19 "PWM3" I R 15100 9250 60
+F20 "PWM1" I R 15100 9150 60
+F21 "UCTS1" I L 13100 8900 60
+F22 "URTS1" I L 13100 9000 60
+F23 "URXD1" I L 13100 8700 60
+F24 "UTXD1" I L 13100 8800 60
+F25 "PWM7" I R 15100 9450 60
+F26 "PWM5" I R 15100 9350 60
+F27 "VRL" I R 15100 7850 60
+F28 "VRH" I R 15100 7950 60
+F29 "CANRX" I R 15100 8650 60
+F30 "CANTX" I R 15100 8750 60
+F31 "RSTI-" I R 15100 8850 60
+F32 "RTS0-" I R 15100 8950 60
+F33 "QSPI_CS[0..3]" I R 15100 8250 60
+$EndSheet
+$Sheet
+S 13100 5650 2100 1250
+U 47D80204
+F0 "xilinx" 60
+F1 "xilinx.sch" 60
+F2 "IRQ-3" I L 13100 5950 60
+F3 "IRQ-2" I L 13100 5850 60
+F4 "QSPI_CS1" I L 13100 6550 60
+F5 "URTS1-" I L 13100 6100 60
+F6 "UCTS1-" I L 13100 6200 60
+F7 "QSPI_DOUT" O L 13100 6350 60
+F8 "QSPI_DIN" I L 13100 6450 60
+F9 "QSPI_CS2" I L 13100 6650 60
+F10 "IRQ-1" I L 13100 5750 60
+F11 "QSPI_SCLK" I L 13100 6750 60
+F12 "GLCK2" I L 13100 6850 60
+$EndSheet
+Text Label 1150 7800 0 60 ~ 0
+CLKIN/EXTAL
+$Comp
+L GND #PWR010
+U 1 1 46238A4E
+P 1100 9100
+F 0 "#PWR010" H 1100 9100 30 0001 C CNN
+F 1 "GND" H 1100 9030 30 0001 C CNN
+F 2 "" H 1100 9100 60 0001 C CNN
+F 3 "" H 1100 9100 60 0001 C CNN
+ 1 1100 9100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR011
+U 1 1 46238A48
+P 1900 9050
+F 0 "#PWR011" H 1900 9050 30 0001 C CNN
+F 1 "GND" H 1900 8980 30 0001 C CNN
+F 2 "" H 1900 9050 60 0001 C CNN
+F 3 "" H 1900 9050 60 0001 C CNN
+ 1 1900 9050
+ 1 0 0 -1
+$EndComp
+$Comp
+L CRYSTAL Y1
+U 1 1 462389C7
+P 1500 8500
+F 0 "Y1" H 1500 8650 60 0000 C CNN
+F 1 "8MHz" H 1500 8350 60 0000 C CNN
+F 2 "discret:HC-18UH" H 1500 8500 60 0001 C CNN
+F 3 "" H 1500 8500 60 0001 C CNN
+ 1 1500 8500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C2
+U 1 1 462389C0
+P 1900 8850
+F 0 "C2" H 1950 8950 50 0000 L CNN
+F 1 "10pF" H 1950 8750 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 1900 8850 60 0001 C CNN
+F 3 "" H 1900 8850 60 0001 C CNN
+ 1 1900 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C1
+U 1 1 462389BC
+P 1100 8900
+F 0 "C1" H 1150 9000 50 0000 L CNN
+F 1 "10pF" H 1150 8800 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 1100 8900 60 0001 C CNN
+F 3 "" H 1100 8900 60 0001 C CNN
+ 1 1100 8900
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 462389B6
+P 1550 8100
+F 0 "R1" V 1630 8100 50 0000 C CNN
+F 1 "1M" V 1550 8100 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 1550 8100 60 0001 C CNN
+F 3 "" H 1550 8100 60 0001 C CNN
+ 1 1550 8100
+ 0 1 1 0
+$EndComp
+$Comp
+L CONN_1 ALLPST1
+U 1 1 46238965
+P 5350 4000
+F 0 "ALLPST1" H 5350 4100 40 0000 C CNN
+F 1 "CONN_1" H 5300 4040 30 0001 C CNN
+F 2 "connect:PINTST" H 5350 4000 60 0001 C CNN
+F 3 "" H 5350 4000 60 0001 C CNN
+ 1 5350 4000
+ -1 0 0 1
+$EndComp
+Text Label 5450 2450 0 60 ~ 0
+XTAL
+Text Label 5450 2350 0 60 ~ 0
+CLKIN/EXTAL
+Text Label 5800 3050 0 60 ~ 0
+RCON-
+Text Label 10250 3750 0 60 ~ 0
+CANRX
+Text Label 10250 3650 0 60 ~ 0
+CANTX
+Text Label 10250 5300 0 60 ~ 0
+UCTS2
+Text Label 10250 5200 0 60 ~ 0
+URTS2
+Text Label 10250 5100 0 60 ~ 0
+UCTS1
+Text Label 10250 5000 0 60 ~ 0
+URTS1
+Text Label 10250 4900 0 60 ~ 0
+UCTS0
+Text Label 10250 4800 0 60 ~ 0
+URTS0
+Text Label 10250 4600 0 60 ~ 0
+URXD2
+Text Label 10250 4400 0 60 ~ 0
+URXD1
+Text Label 10250 4200 0 60 ~ 0
+URXD0
+Text Label 10250 4500 0 60 ~ 0
+UTXD2
+Text Label 10250 4300 0 60 ~ 0
+UTXD1
+Text Label 10250 4100 0 60 ~ 0
+UTXD0
+Text Label 10300 2850 0 60 ~ 0
+GPT3
+Text Label 10300 2750 0 60 ~ 0
+GPT2
+Text Label 10300 2650 0 60 ~ 0
+GPT1
+Text Label 10300 2550 0 60 ~ 0
+GPT0
+$Comp
+L GND #PWR012
+U 1 1 462385BA
+P 2300 5700
+F 0 "#PWR012" H 2300 5700 30 0001 C CNN
+F 1 "GND" H 2300 5630 30 0001 C CNN
+F 2 "" H 2300 5700 60 0001 C CNN
+F 3 "" H 2300 5700 60 0001 C CNN
+ 1 2300 5700
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED RED1
+U 1 1 46238597
+P 2300 5400
+F 0 "RED1" V 2250 5700 50 0000 C CNN
+F 1 "LED_RESET1" V 2350 5700 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 2300 5400 60 0001 C CNN
+F 3 "" H 2300 5400 60 0001 C CNN
+ 1 2300 5400
+ 0 1 1 0
+$EndComp
+$Comp
+L R R22
+U 1 1 4623857F
+P 2300 4850
+F 0 "R22" H 2150 5000 50 0000 C CNN
+F 1 "270" V 2300 4850 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 2300 4850 60 0001 C CNN
+F 3 "" H 2300 4850 60 0001 C CNN
+ 1 2300 4850
+ 1 0 0 -1
+$EndComp
+Text Label 1200 4300 2 60 ~ 0
+RSTO-
+$Comp
+L R R21
+U 1 1 46238545
+P 1650 4300
+F 0 "R21" V 1550 4300 50 0000 C CNN
+F 1 "4.7K" V 1650 4300 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 1650 4300 60 0001 C CNN
+F 3 "" H 1650 4300 60 0001 C CNN
+ 1 1650 4300
+ 0 -1 1 0
+$EndComp
+$Comp
+L VDD #PWR013
+U 1 1 46238539
+P 2300 4050
+F 0 "#PWR013" H 2300 4150 30 0001 C CNN
+F 1 "VDD" H 2300 4160 40 0000 C CNN
+F 2 "" H 2300 4050 60 0001 C CNN
+F 3 "" H 2300 4050 60 0001 C CNN
+ 1 2300 4050
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR014
+U 1 1 46238531
+P 8400 7550
+F 0 "#PWR014" H 8400 7550 30 0001 C CNN
+F 1 "GND" H 8400 7480 30 0001 C CNN
+F 2 "" H 8400 7550 60 0001 C CNN
+F 3 "" H 8400 7550 60 0001 C CNN
+ 1 8400 7550
+ 1 0 0 -1
+$EndComp
+$Comp
+L PNP Q1
+U 1 1 46238519
+P 2200 4300
+F 0 "Q1" H 2050 4150 60 0000 C CNN
+F 1 "3906" H 2050 4450 60 0000 C CNN
+F 2 "lib_smd:SOT23EBC" H 2200 4300 60 0001 C CNN
+F 3 "" H 2200 4300 60 0001 C CNN
+ 1 2200 4300
+ 1 0 0 1
+$EndComp
+Text Label 3250 3000 0 60 ~ 0
+RSTI-
+$Comp
+L +3.3V #PWR015
+U 1 1 462384A7
+P 2950 2400
+F 0 "#PWR015" H 2950 2360 40 0001 C CNN
+F 1 "+3.3V" H 2950 2510 40 0000 C CNN
+F 2 "" H 2950 2400 60 0001 C CNN
+F 3 "" H 2950 2400 60 0001 C CNN
+ 1 2950 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR016
+U 1 1 4623848E
+P 1900 3550
+F 0 "#PWR016" H 1900 3550 30 0001 C CNN
+F 1 "GND" H 1900 3480 30 0001 C CNN
+F 2 "" H 1900 3550 60 0001 C CNN
+F 3 "" H 1900 3550 60 0001 C CNN
+ 1 1900 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R15
+U 1 1 4623847B
+P 2950 2650
+F 0 "R15" H 2800 2800 50 0000 C CNN
+F 1 "4,7K" V 2950 2650 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 2950 2650 60 0001 C CNN
+F 3 "" H 2950 2650 60 0001 C CNN
+ 1 2950 2650
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODE D3
+U 1 1 4623846D
+P 2600 3000
+F 0 "D3" H 2600 2800 50 0000 C CNN
+F 1 "BAT54" H 2600 2900 50 0000 C CNN
+F 2 "lib_smd:ST23AK#1" H 2600 3000 60 0001 C CNN
+F 3 "" H 2600 3000 60 0001 C CNN
+ 1 2600 3000
+ -1 0 0 1
+$EndComp
+$Comp
+L C C3
+U 1 1 46238468
+P 1900 3300
+F 0 "C3" H 1950 3400 50 0000 L CNN
+F 1 "1nF" H 1950 3200 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 1900 3300 60 0001 C CNN
+F 3 "" H 1900 3300 60 0001 C CNN
+ 1 1900 3300
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR017
+U 1 1 4623840E
+P 850 2950
+F 0 "#PWR017" H 850 2910 40 0001 C CNN
+F 1 "+3.3V" H 850 3060 40 0000 C CNN
+F 2 "" H 850 2950 60 0001 C CNN
+F 3 "" H 850 2950 60 0001 C CNN
+ 1 850 2950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR018
+U 1 1 46238409
+P 1250 3400
+F 0 "#PWR018" H 1250 3400 30 0001 C CNN
+F 1 "GND" H 1250 3330 30 0001 C CNN
+F 2 "" H 1250 3400 60 0001 C CNN
+F 3 "" H 1250 3400 60 0001 C CNN
+ 1 1250 3400
+ 1 0 0 -1
+$EndComp
+$Comp
+L MC34064P LV1
+U 1 1 462383E5
+P 1250 3050
+F 0 "LV1" H 1250 3350 60 0000 C CNN
+F 1 "DS1818" H 1250 3250 60 0000 C CNN
+F 2 "discret:TO92-INVERT" H 1250 3050 60 0001 C CNN
+F 3 "" H 1250 3050 60 0001 C CNN
+ 1 1250 3050
+ 1 0 0 -1
+$EndComp
+Text Label 10250 6300 0 60 ~ 0
+QSPI_CS3
+Text Label 10250 6200 0 60 ~ 0
+QSPI_CS2
+Text Label 10250 6100 0 60 ~ 0
+QSPI_CS1
+Text Label 10250 6000 0 60 ~ 0
+QSPI_CS0
+Text Label 10250 5900 0 60 ~ 0
+QSPI_CLK
+Text Label 10250 5700 0 60 ~ 0
+DSPI_DOUT
+Text Label 10250 5800 0 60 ~ 0
+QSPI_DIN
+$Comp
+L CP C16
+U 1 1 462382CE
+P 2600 10250
+F 0 "C16" H 2650 10350 50 0000 L CNN
+F 1 "10uF" H 2650 10150 50 0000 L CNN
+F 2 "lib_smd:SM1206POL" H 2600 10250 60 0001 C CNN
+F 3 "" H 2600 10250 60 0001 C CNN
+ 1 2600 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GNDA #PWR019
+U 1 1 462380EB
+P 2600 10600
+F 0 "#PWR019" H 2600 10600 40 0001 C CNN
+F 1 "GNDA" H 2600 10530 40 0000 C CNN
+F 2 "" H 2600 10600 60 0001 C CNN
+F 3 "" H 2600 10600 60 0001 C CNN
+ 1 2600 10600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR020
+U 1 1 462380D3
+P 1800 10550
+F 0 "#PWR020" H 1800 10550 30 0001 C CNN
+F 1 "GND" H 1800 10480 30 0001 C CNN
+F 2 "" H 1800 10550 60 0001 C CNN
+F 3 "" H 1800 10550 60 0001 C CNN
+ 1 1800 10550
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR FB1
+U 1 1 462380B8
+P 2150 10500
+F 0 "FB1" V 2250 10500 50 0000 C CNN
+F 1 "BEAD" V 2100 10500 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2150 10500 60 0001 C CNN
+F 3 "" H 2150 10500 60 0001 C CNN
+ 1 2150 10500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L INDUCTOR L1
+U 1 1 46238092
+P 2150 10000
+F 0 "L1" V 2250 10000 50 0000 C CNN
+F 1 "10uH" V 2100 10000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2150 10000 60 0001 C CNN
+F 3 "" H 2150 10000 60 0001 C CNN
+ 1 2150 10000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L JUMPER VDDA1
+U 1 1 46238079
+P 1400 10000
+F 0 "VDDA1" H 1400 10150 60 0000 C CNN
+F 1 "JUMPER" H 1400 9920 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 1400 10000 60 0001 C CNN
+F 3 "" H 1400 10000 60 0001 C CNN
+ 1 1400 10000
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR021
+U 1 1 46238078
+P 1050 9950
+F 0 "#PWR021" H 1050 9910 30 0001 C CNN
+F 1 "+3.3V" H 1050 10060 40 0000 C CNN
+F 2 "" H 1050 9950 60 0001 C CNN
+F 3 "" H 1050 9950 60 0001 C CNN
+ 1 1050 9950
+ 1 0 0 -1
+$EndComp
+Text Label 2650 10000 0 60 ~ 0
+VCCA
+Text Label 3200 10000 2 60 ~ 0
+VRH
+Text Label 5800 6950 0 60 ~ 0
+VCCA
+Text Label 5850 6800 0 60 ~ 0
+VRL
+Text Label 5850 6700 0 60 ~ 0
+VRH
+Text Label 15400 1700 2 60 ~ 0
+IRQ-7
+$Comp
+L DIODE D1
+U 1 1 46237F86
+P 14800 1700
+F 0 "D1" H 14800 1800 40 0000 C CNN
+F 1 "BAT54" H 14800 1600 40 0000 C CNN
+F 2 "lib_smd:ST23AK#1" H 14800 1700 60 0001 C CNN
+F 3 "" H 14800 1700 60 0001 C CNN
+ 1 14800 1700
+ -1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR022
+U 1 1 46237F59
+P 11800 1700
+F 0 "#PWR022" H 11800 1660 30 0001 C CNN
+F 1 "+3.3V" H 11800 1810 40 0000 C CNN
+F 2 "" H 11800 1700 60 0001 C CNN
+F 3 "" H 11800 1700 60 0001 C CNN
+ 1 11800 1700
+ -1 0 0 -1
+$EndComp
+$Comp
+L SW_PUSH ABRT_SW1
+U 1 1 46237F50
+P 12200 1700
+F 0 "ABRT_SW1" H 12200 1850 50 0000 C CNN
+F 1 "SW_PUSH" H 12200 1620 50 0000 C CNN
+F 2 "discret:SW_PUSH_SMALL" H 12200 1700 60 0001 C CNN
+F 3 "" H 12200 1700 60 0001 C CNN
+ 1 12200 1700
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR023
+U 1 1 46237F11
+P 13100 2350
+F 0 "#PWR023" H 13100 2350 30 0001 C CNN
+F 1 "GND" H 13100 2280 30 0001 C CNN
+F 2 "" H 13100 2350 60 0001 C CNN
+F 3 "" H 13100 2350 60 0001 C CNN
+ 1 13100 2350
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR024
+U 1 1 46237F0E
+P 13300 2350
+F 0 "#PWR024" H 13300 2350 30 0001 C CNN
+F 1 "GND" H 13300 2280 30 0001 C CNN
+F 2 "" H 13300 2350 60 0001 C CNN
+F 3 "" H 13300 2350 60 0001 C CNN
+ 1 13300 2350
+ -1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR025
+U 1 1 46237E86
+P 14450 650
+F 0 "#PWR025" H 14450 610 30 0001 C CNN
+F 1 "+3.3V" H 14450 760 40 0000 C CNN
+F 2 "" H 14450 650 60 0001 C CNN
+F 3 "" H 14450 650 60 0001 C CNN
+ 1 14450 650
+ -1 0 0 -1
+$EndComp
+$Comp
+L LED LEDABRT1
+U 1 1 46237E52
+P 14450 900
+F 0 "LEDABRT1" H 14450 1000 50 0000 C CNN
+F 1 "RED" H 14450 800 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 14450 900 60 0001 C CNN
+F 3 "" H 14450 900 60 0001 C CNN
+ 1 14450 900
+ 0 -1 1 0
+$EndComp
+$Comp
+L R R14
+U 1 1 46237E3D
+P 14450 1400
+F 0 "R14" V 14530 1400 50 0000 C CNN
+F 1 "270" V 14450 1400 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14450 1400 60 0001 C CNN
+F 3 "" H 14450 1400 60 0001 C CNN
+ 1 14450 1400
+ -1 0 0 -1
+$EndComp
+$Comp
+L C C15
+U 1 1 46237E36
+P 13300 2050
+F 0 "C15" H 13050 2150 50 0000 L CNN
+F 1 "100nF" H 13000 1950 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 13300 2050 60 0001 C CNN
+F 3 "" H 13300 2050 60 0001 C CNN
+ 1 13300 2050
+ -1 0 0 -1
+$EndComp
+$Comp
+L R R12
+U 1 1 46237E2F
+P 13100 2050
+F 0 "R12" H 13250 2200 50 0000 C CNN
+F 1 "20K" V 13100 2050 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 13100 2050 60 0001 C CNN
+F 3 "" H 13100 2050 60 0001 C CNN
+ 1 13100 2050
+ -1 0 0 -1
+$EndComp
+$Comp
+L R R7
+U 1 1 46237E28
+P 12850 1700
+F 0 "R7" V 12750 1700 50 0000 C CNN
+F 1 "1K" V 12850 1700 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 12850 1700 60 0001 C CNN
+F 3 "" H 12850 1700 60 0001 C CNN
+ 1 12850 1700
+ 0 -1 1 0
+$EndComp
+$Comp
+L +3.3V #PWR026
+U 1 1 46237E18
+P 13300 1000
+F 0 "#PWR026" H 13300 960 30 0001 C CNN
+F 1 "+3.3V" H 13300 1110 40 0000 C CNN
+F 2 "" H 13300 1000 60 0001 C CNN
+F 3 "" H 13300 1000 60 0001 C CNN
+ 1 13300 1000
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR027
+U 1 1 46237E07
+P 13300 1450
+F 0 "#PWR027" H 13300 1450 30 0001 C CNN
+F 1 "GND" H 13300 1380 30 0001 C CNN
+F 2 "" H 13300 1450 60 0001 C CNN
+F 3 "" H 13300 1450 60 0001 C CNN
+ 1 13300 1450
+ -1 0 0 -1
+$EndComp
+$Comp
+L C C14
+U 1 1 46237DF9
+P 13300 1250
+F 0 "C14" H 13400 1200 50 0000 L CNN
+F 1 "100nF" H 13400 1300 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 13300 1250 60 0001 C CNN
+F 3 "" H 13300 1250 60 0001 C CNN
+ 1 13300 1250
+ 1 0 0 1
+$EndComp
+Text Label 5650 4000 0 60 ~ 0
+ALLPST
+$Comp
+L VDD #PWR028
+U 1 1 461BE524
+P 5250 3000
+F 0 "#PWR028" H 5250 3100 30 0001 C CNN
+F 1 "VDD" H 5250 3110 40 0000 C CNN
+F 2 "" H 5250 3000 60 0001 C CNN
+F 3 "" H 5250 3000 60 0001 C CNN
+ 1 5250 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R45
+U 1 1 461BE50C
+P 5500 3050
+F 0 "R45" V 5600 2950 50 0000 C CNN
+F 1 "4,7K" V 5500 3050 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5500 3050 60 0001 C CNN
+F 3 "" H 5500 3050 60 0001 C CNN
+ 1 5500 3050
+ 0 1 1 0
+$EndComp
+Text Label 4650 6650 0 60 ~ 0
+AN[0..7]
+Entry Wire Line
+ 5550 6650 5650 6550
+Entry Wire Line
+ 5550 6550 5650 6450
+Entry Wire Line
+ 5550 6450 5650 6350
+Entry Wire Line
+ 5550 6350 5650 6250
+Entry Wire Line
+ 5550 6250 5650 6150
+Entry Wire Line
+ 5550 6150 5650 6050
+Entry Wire Line
+ 5550 6050 5650 5950
+Entry Wire Line
+ 5550 5950 5650 5850
+Text Label 5700 6550 0 60 ~ 0
+AN7
+Text Label 5700 6450 0 60 ~ 0
+AN6
+Text Label 5700 6350 0 60 ~ 0
+AN5
+Text Label 5700 6250 0 60 ~ 0
+AN4
+Text Label 5700 6150 0 60 ~ 0
+AN3
+Text Label 5700 6050 0 60 ~ 0
+AN2
+Text Label 5700 5950 0 60 ~ 0
+AN1
+Text Label 5700 5850 0 60 ~ 0
+AN0
+Text Label 6200 1400 0 60 ~ 0
+VDDPLL
+$Comp
+L GND #PWR029
+U 1 1 461BE37E
+P 7100 1850
+F 0 "#PWR029" H 7100 1850 30 0001 C CNN
+F 1 "GND" H 7100 1780 30 0001 C CNN
+F 2 "" H 7100 1850 60 0001 C CNN
+F 3 "" H 7100 1850 60 0001 C CNN
+ 1 7100 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR030
+U 1 1 461BE36C
+P 6750 1850
+F 0 "#PWR030" H 6750 1850 30 0001 C CNN
+F 1 "GND" H 6750 1780 30 0001 C CNN
+F 2 "" H 6750 1850 60 0001 C CNN
+F 3 "" H 6750 1850 60 0001 C CNN
+ 1 6750 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C20
+U 1 1 461BE364
+P 6750 1650
+F 0 "C20" H 6800 1750 50 0000 L CNN
+F 1 "1nF" H 6800 1550 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 6750 1650 60 0001 C CNN
+F 3 "" H 6750 1650 60 0001 C CNN
+ 1 6750 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C21
+U 1 1 461BE35C
+P 7100 1650
+F 0 "C21" H 7150 1750 50 0000 L CNN
+F 1 "100nF" H 7150 1550 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 7100 1650 60 0001 C CNN
+F 3 "" H 7100 1650 60 0001 C CNN
+ 1 7100 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L2
+U 1 1 461BE327
+P 6600 1200
+F 0 "L2" V 6550 1200 40 0000 C CNN
+F 1 "10uH" V 6700 1200 40 0000 C CNN
+F 2 "lib_smd:SM1206" H 6600 1200 60 0001 C CNN
+F 3 "" H 6600 1200 60 0001 C CNN
+ 1 6600 1200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #PWR031
+U 1 1 461BE318
+P 6250 1150
+F 0 "#PWR031" H 6250 1110 30 0001 C CNN
+F 1 "+3.3V" H 6250 1260 40 0000 C CNN
+F 2 "" H 6250 1150 60 0001 C CNN
+F 3 "" H 6250 1150 60 0001 C CNN
+ 1 6250 1150
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR032
+U 1 1 461BE2B7
+P 4350 3350
+F 0 "#PWR032" H 4350 3350 30 0001 C CNN
+F 1 "GND" H 4350 3280 30 0001 C CNN
+F 2 "" H 4350 3350 60 0001 C CNN
+F 3 "" H 4350 3350 60 0001 C CNN
+ 1 4350 3350
+ 0 1 1 0
+$EndComp
+Text Label 5600 2750 0 60 ~ 0
+RSTO-
+Text Label 5600 2650 0 60 ~ 0
+RSTI-
+$Comp
+L R R9
+U 1 1 461BE230
+P 5850 3150
+F 0 "R9" V 5930 3150 50 0000 C CNN
+F 1 "0" V 5850 3150 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5850 3150 60 0001 C CNN
+F 3 "" H 5850 3150 60 0001 C CNN
+ 1 5850 3150
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR033
+U 1 1 461BE20A
+P 6150 2200
+F 0 "#PWR033" H 6150 2200 30 0001 C CNN
+F 1 "GND" H 6150 2130 30 0001 C CNN
+F 2 "" H 6150 2200 60 0001 C CNN
+F 3 "" H 6150 2200 60 0001 C CNN
+ 1 6150 2200
+ 0 1 1 0
+$EndComp
+Text Label 10250 3300 0 60 ~ 0
+DTIN3
+Text Label 10250 3200 0 60 ~ 0
+DTIN2
+Text Label 10250 3100 0 60 ~ 0
+DTIN1
+Text Label 10250 3000 0 60 ~ 0
+DTIN0
+Text Label 10300 2400 0 60 ~ 0
+PWM7
+Text Label 10300 2300 0 60 ~ 0
+PWM5
+Text Label 10300 2200 0 60 ~ 0
+PWM3
+Text Label 10300 2100 0 60 ~ 0
+PWM1
+Entry Wire Line
+ 5400 5750 5500 5650
+Entry Wire Line
+ 5400 5650 5500 5550
+Entry Wire Line
+ 5400 5550 5500 5450
+Entry Wire Line
+ 5400 5450 5500 5350
+Entry Wire Line
+ 5400 5350 5500 5250
+Entry Wire Line
+ 5400 5250 5500 5150
+Entry Wire Line
+ 5400 5150 5500 5050
+Text Label 4650 5900 0 60 ~ 0
+IRQ-[1..7]
+$Comp
+L VDD #PWR034
+U 1 1 461BE128
+P 4750 5000
+F 0 "#PWR034" H 4750 5100 30 0001 C CNN
+F 1 "VDD" H 4750 5110 40 0000 C CNN
+F 2 "" H 4750 5000 60 0001 C CNN
+F 3 "" H 4750 5000 60 0001 C CNN
+ 1 4750 5000
+ 1 0 0 -1
+$EndComp
+$Comp
+L VDD #PWR035
+U 1 1 461BE125
+P 4150 5000
+F 0 "#PWR035" H 4150 5100 30 0001 C CNN
+F 1 "VDD" H 4150 5110 40 0000 C CNN
+F 2 "" H 4150 5000 60 0001 C CNN
+F 3 "" H 4150 5000 60 0001 C CNN
+ 1 4150 5000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R13
+U 1 1 461BE054
+P 5050 5650
+F 0 "R13" V 5130 5650 50 0000 C CNN
+F 1 "10K" V 5050 5650 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5050 5650 60 0001 C CNN
+F 3 "" H 5050 5650 60 0001 C CNN
+ 1 5050 5650
+ 0 1 1 0
+$EndComp
+$Comp
+L R R11
+U 1 1 461BE051
+P 4450 5550
+F 0 "R11" V 4530 5550 50 0000 C CNN
+F 1 "10K" V 4450 5550 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 4450 5550 60 0001 C CNN
+F 3 "" H 4450 5550 60 0001 C CNN
+ 1 4450 5550
+ 0 1 1 0
+$EndComp
+$Comp
+L R R10
+U 1 1 461BE04B
+P 5050 5450
+F 0 "R10" V 5130 5450 50 0000 C CNN
+F 1 "10K" V 5050 5450 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5050 5450 60 0001 C CNN
+F 3 "" H 5050 5450 60 0001 C CNN
+ 1 5050 5450
+ 0 1 1 0
+$EndComp
+$Comp
+L R R8
+U 1 1 461BE047
+P 4450 5350
+F 0 "R8" V 4530 5350 50 0000 C CNN
+F 1 "10K" V 4450 5350 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 4450 5350 60 0001 C CNN
+F 3 "" H 4450 5350 60 0001 C CNN
+ 1 4450 5350
+ 0 1 1 0
+$EndComp
+$Comp
+L R R6
+U 1 1 461BE046
+P 5050 5250
+F 0 "R6" V 5130 5250 50 0000 C CNN
+F 1 "10K" V 5050 5250 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5050 5250 60 0001 C CNN
+F 3 "" H 5050 5250 60 0001 C CNN
+ 1 5050 5250
+ 0 1 1 0
+$EndComp
+$Comp
+L R R5
+U 1 1 461BE041
+P 4450 5150
+F 0 "R5" V 4530 5150 50 0000 C CNN
+F 1 "10K" V 4450 5150 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 4450 5150 60 0001 C CNN
+F 3 "" H 4450 5150 60 0001 C CNN
+ 1 4450 5150
+ 0 1 1 0
+$EndComp
+$Comp
+L R R4
+U 1 1 461BE039
+P 5050 5050
+F 0 "R4" V 5130 5050 50 0000 C CNN
+F 1 "10K" V 5050 5050 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5050 5050 60 0001 C CNN
+F 3 "" H 5050 5050 60 0001 C CNN
+ 1 5050 5050
+ 0 1 1 0
+$EndComp
+Text Label 5650 5650 0 60 ~ 0
+IRQ-7
+Text Label 5650 5550 0 60 ~ 0
+IRQ-6
+Text Label 5650 5450 0 60 ~ 0
+IRQ-5
+Text Label 5650 5350 0 60 ~ 0
+IRQ-4
+Text Label 5650 5250 0 60 ~ 0
+IRQ-3
+Text Label 5650 5150 0 60 ~ 0
+IRQ-2
+Text Label 5650 5050 0 60 ~ 0
+IRQ-1
+$Comp
+L CONN_1 TA-1
+U 1 1 461BBA34
+P 13750 4800
+F 0 "TA-1" H 13800 4700 40 0000 C CNN
+F 1 "CONN_1" H 13700 4840 30 0001 C CNN
+F 2 "connect:PINTST" H 13750 4800 60 0001 C CNN
+F 3 "" H 13750 4800 60 0001 C CNN
+ 1 13750 4800
+ 1 0 0 -1
+$EndComp
+Text Label 12150 3800 0 60 ~ 0
+RSTI-
+NoConn ~ 12800 4500
+$Comp
+L +3.3V #PWR036
+U 1 1 461BB93F
+P 12450 4700
+F 0 "#PWR036" H 12450 4660 30 0001 C CNN
+F 1 "+3.3V" H 12450 4810 40 0000 C CNN
+F 2 "" H 12450 4700 60 0001 C CNN
+F 3 "" H 12450 4700 60 0001 C CNN
+ 1 12450 4700
+ 0 -1 -1 0
+$EndComp
+NoConn ~ 13600 4500
+NoConn ~ 12800 3500
+Text Label 14700 4200 0 60 ~ 0
+DDAT3
+Text Label 12150 4300 0 60 ~ 0
+DDAT2
+Text Label 14700 4300 0 60 ~ 0
+DDAT1
+Text Label 12150 4400 0 60 ~ 0
+DDAT0
+Text Label 14750 4000 0 60 ~ 0
+PST3
+Text Label 12150 4100 0 60 ~ 0
+PST2
+Text Label 14750 4100 0 60 ~ 0
+PST1
+Text Label 12150 4200 0 60 ~ 0
+PST0
+Text Label 5650 4800 0 60 ~ 0
+DDAT3
+Text Label 5650 4700 0 60 ~ 0
+DDAT2
+Text Label 5650 4600 0 60 ~ 0
+DDAT1
+Text Label 5650 4500 0 60 ~ 0
+DDAT0
+Text Label 5650 4400 0 60 ~ 0
+PST3
+Text Label 5650 4300 0 60 ~ 0
+PST2
+Text Label 5650 4200 0 60 ~ 0
+PST1
+Text Label 5650 4100 0 60 ~ 0
+PST0
+$Comp
+L GND #PWR037
+U 1 1 461BB8C6
+P 14100 5200
+F 0 "#PWR037" H 14100 5200 30 0001 C CNN
+F 1 "GND" H 14100 5130 30 0001 C CNN
+F 2 "" H 14100 5200 60 0001 C CNN
+F 3 "" H 14100 5200 60 0001 C CNN
+ 1 14100 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R26
+U 1 1 461BB8C0
+P 14100 4950
+F 0 "R26" V 14180 4950 50 0000 C CNN
+F 1 "10K" V 14100 4950 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14100 4950 60 0001 C CNN
+F 3 "" H 14100 4950 60 0001 C CNN
+ 1 14100 4950
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 CLKOUT1
+U 1 1 461BB894
+P 14700 4750
+F 0 "CLKOUT1" H 14750 4650 40 0000 C CNN
+F 1 "CONN_1" H 14650 4790 30 0001 C CNN
+F 2 "connect:PINTST" H 14700 4750 60 0001 C CNN
+F 3 "" H 14700 4750 60 0001 C CNN
+ 1 14700 4750
+ 1 0 0 -1
+$EndComp
+Text Label 14750 3600 0 60 ~ 0
+DSCLK
+Text Label 5750 3450 0 60 ~ 0
+DSCLK
+$Comp
+L VDD #PWR038
+U 1 1 461BB7AD
+P 13850 2650
+F 0 "#PWR038" H 13850 2750 30 0001 C CNN
+F 1 "VDD" H 13850 2760 40 0000 C CNN
+F 2 "" H 13850 2650 60 0001 C CNN
+F 3 "" H 13850 2650 60 0001 C CNN
+ 1 13850 2650
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R20
+U 1 1 461BB799
+P 14600 3000
+F 0 "R20" V 14680 3000 50 0000 C CNN
+F 1 "4,7K" V 14600 3000 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14600 3000 60 0001 C CNN
+F 3 "" H 14600 3000 60 0001 C CNN
+ 1 14600 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R19
+U 1 1 461BB798
+P 14350 3000
+F 0 "R19" V 14430 3000 50 0000 C CNN
+F 1 "4,7K" V 14350 3000 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14350 3000 60 0001 C CNN
+F 3 "" H 14350 3000 60 0001 C CNN
+ 1 14350 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R18
+U 1 1 461BB795
+P 14100 3000
+F 0 "R18" V 14180 3000 50 0000 C CNN
+F 1 "4,7K" V 14100 3000 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 14100 3000 60 0001 C CNN
+F 3 "" H 14100 3000 60 0001 C CNN
+ 1 14100 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R17
+U 1 1 461BB790
+P 13850 3000
+F 0 "R17" V 13930 3000 50 0000 C CNN
+F 1 "4,7K" V 13850 3000 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 13850 3000 60 0001 C CNN
+F 3 "" H 13850 3000 60 0001 C CNN
+ 1 13850 3000
+ 1 0 0 -1
+$EndComp
+Text Label 14750 3500 0 60 ~ 0
+BKPT-
+Text Label 14750 4600 0 60 ~ 0
+TCLK
+Text Label 14750 3900 0 60 ~ 0
+DSO
+Text Label 14750 3800 0 60 ~ 0
+DSI
+Text Label 4800 3750 0 60 ~ 0
+TCLK
+$Comp
+L R R46
+U 1 1 461BB742
+P 5400 3750
+F 0 "R46" V 5480 3750 50 0000 C CNN
+F 1 "22" V 5400 3750 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5400 3750 60 0001 C CNN
+F 3 "" H 5400 3750 60 0001 C CNN
+ 1 5400 3750
+ 0 1 1 0
+$EndComp
+Text Label 5350 3350 0 60 ~ 0
+JTAG_EN
+Text Label 5750 3650 0 60 ~ 0
+DSO
+Text Label 5750 3550 0 60 ~ 0
+DSI
+Text Label 5750 3850 0 60 ~ 0
+BKPT-
+Text Label 3150 2000 0 60 ~ 0
+CLKMOD1
+Text Label 3150 1650 0 60 ~ 0
+CLKMOD0
+Text Label 5550 2950 0 60 ~ 0
+CLKMOD1
+Text Label 5550 2850 0 60 ~ 0
+CLKMOD0
+$Comp
+L GND #PWR039
+U 1 1 461BB690
+P 5600 3150
+F 0 "#PWR039" H 5600 3150 30 0001 C CNN
+F 1 "GND" H 5600 3080 30 0001 C CNN
+F 2 "" H 5600 3150 60 0001 C CNN
+F 3 "" H 5600 3150 60 0001 C CNN
+ 1 5600 3150
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR040
+U 1 1 461BB68E
+P 2100 2000
+F 0 "#PWR040" H 2100 2000 30 0001 C CNN
+F 1 "GND" H 2100 1930 30 0001 C CNN
+F 2 "" H 2100 2000 60 0001 C CNN
+F 3 "" H 2100 2000 60 0001 C CNN
+ 1 2100 2000
+ 0 1 1 0
+$EndComp
+$Comp
+L VDD #PWR041
+U 1 1 461BB662
+P 3050 1050
+F 0 "#PWR041" H 3050 1150 30 0001 C CNN
+F 1 "VDD" H 3050 1160 40 0000 C CNN
+F 2 "" H 3050 1050 60 0001 C CNN
+F 3 "" H 3050 1050 60 0001 C CNN
+ 1 3050 1050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R2
+U 1 1 461BB661
+P 3050 1350
+F 0 "R2" H 2950 1550 50 0000 C CNN
+F 1 "4,7K" V 3050 1350 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 3050 1350 60 0001 C CNN
+F 3 "" H 3050 1350 60 0001 C CNN
+ 1 3050 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L VDD #PWR042
+U 1 1 461BB660
+P 2850 1050
+F 0 "#PWR042" H 2850 1150 30 0001 C CNN
+F 1 "VDD" H 2850 1160 40 0000 C CNN
+F 2 "" H 2850 1050 60 0001 C CNN
+F 3 "" H 2850 1050 60 0001 C CNN
+ 1 2850 1050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R25
+U 1 1 461BB65F
+P 2850 1350
+F 0 "R25" H 2700 1550 50 0000 C CNN
+F 1 "4,7K" V 2850 1350 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 2850 1350 60 0001 C CNN
+F 3 "" H 2850 1350 60 0001 C CNN
+ 1 2850 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER CLK1
+U 1 1 461BB648
+P 2450 2000
+F 0 "CLK1" H 2450 2150 60 0000 C CNN
+F 1 "JUMPER" H 2450 1920 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 2450 2000 60 0001 C CNN
+F 3 "" H 2450 2000 60 0001 C CNN
+ 1 2450 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER CLK0
+U 1 1 461BB62E
+P 2450 1650
+F 0 "CLK0" H 2450 1800 60 0000 C CNN
+F 1 "JUMPER" H 2450 1570 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 2450 1650 60 0001 C CNN
+F 3 "" H 2450 1650 60 0001 C CNN
+ 1 2450 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L VDD #PWR043
+U 1 1 461BB60D
+P 8400 1650
+F 0 "#PWR043" H 8400 1750 30 0001 C CNN
+F 1 "VDD" H 8400 1760 40 0000 C CNN
+F 2 "" H 8400 1650 60 0001 C CNN
+F 3 "" H 8400 1650 60 0001 C CNN
+ 1 8400 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C6
+U 1 1 461BB5E5
+P 5150 10250
+F 0 "C6" H 5200 10350 50 0000 L CNN
+F 1 "100nF" H 5200 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 5150 10250 60 0001 C CNN
+F 3 "" H 5150 10250 60 0001 C CNN
+ 1 5150 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L VDD #PWR044
+U 1 1 461BB525
+P 5050 2750
+F 0 "#PWR044" H 5050 2850 30 0001 C CNN
+F 1 "VDD" H 5050 2860 40 0000 C CNN
+F 2 "" H 5050 2750 60 0001 C CNN
+F 3 "" H 5050 2750 60 0001 C CNN
+ 1 5050 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR045
+U 1 1 461BAF82
+P 2100 1650
+F 0 "#PWR045" H 2100 1650 30 0001 C CNN
+F 1 "GND" H 2100 1580 30 0001 C CNN
+F 2 "" H 2100 1650 60 0001 C CNN
+F 3 "" H 2100 1650 60 0001 C CNN
+ 1 2100 1650
+ 0 1 1 0
+$EndComp
+$Comp
+L R R16
+U 1 1 461BAF5C
+P 5050 3050
+F 0 "R16" V 5130 3050 50 0000 C CNN
+F 1 "4,7K" V 5050 3050 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 5050 3050 60 0001 C CNN
+F 3 "" H 5050 3050 60 0001 C CNN
+ 1 5050 3050
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER BDM_EN1
+U 1 1 461BAF4F
+P 4700 3350
+F 0 "BDM_EN1" H 4700 3500 60 0000 C CNN
+F 1 "JUMPER" H 4700 3270 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 4700 3350 60 0001 C CNN
+F 3 "" H 4700 3350 60 0001 C CNN
+ 1 4700 3350
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR046
+U 1 1 461BAF37
+P 13600 4400
+F 0 "#PWR046" H 13600 4400 30 0001 C CNN
+F 1 "GND" H 13600 4330 30 0001 C CNN
+F 2 "" H 13600 4400 60 0001 C CNN
+F 3 "" H 13600 4400 60 0001 C CNN
+ 1 13600 4400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR047
+U 1 1 461BAF13
+P 12600 4800
+F 0 "#PWR047" H 12600 4800 30 0001 C CNN
+F 1 "GND" H 12600 4730 30 0001 C CNN
+F 2 "" H 12600 4800 60 0001 C CNN
+F 3 "" H 12600 4800 60 0001 C CNN
+ 1 12600 4800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_13X2 BDM_PORT1
+U 1 1 461BAEE7
+P 13200 4100
+F 0 "BDM_PORT1" H 13200 4800 60 0000 C CNN
+F 1 "CONN_13X2" V 13200 4100 50 0000 C CNN
+F 2 "pin_array:pin_array_13x2" H 13200 4100 60 0001 C CNN
+F 3 "" H 13200 4100 60 0001 C CNN
+ 1 13200 4100
+ 1 0 0 -1
+$EndComp
+$Comp
+L VDD #PWR048
+U 1 1 461BAEA3
+P 4200 9950
+F 0 "#PWR048" H 4200 10050 30 0001 C CNN
+F 1 "VDD" H 4200 10060 40 0000 C CNN
+F 2 "" H 4200 9950 60 0001 C CNN
+F 3 "" H 4200 9950 60 0001 C CNN
+ 1 4200 9950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR049
+U 1 1 46161D48
+P 7850 10550
+F 0 "#PWR049" H 7850 10550 30 0001 C CNN
+F 1 "GND" H 7850 10480 30 0001 C CNN
+F 2 "" H 7850 10550 60 0001 C CNN
+F 3 "" H 7850 10550 60 0001 C CNN
+ 1 7850 10550
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C17
+U 1 1 46161D3C
+P 7750 10250
+F 0 "C17" H 7800 10350 50 0000 L CNN
+F 1 "100uF" H 7800 10150 50 0000 L CNN
+F 2 "lib_smd:SM1206POL" H 7750 10250 60 0001 C CNN
+F 3 "" H 7750 10250 60 0001 C CNN
+ 1 7750 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #PWR050
+U 1 1 46161D18
+P 4000 9950
+F 0 "#PWR050" H 4000 9910 30 0001 C CNN
+F 1 "+3.3V" H 4000 10060 40 0000 C CNN
+F 2 "" H 4000 9950 60 0001 C CNN
+F 3 "" H 4000 9950 60 0001 C CNN
+ 1 4000 9950
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C12
+U 1 1 46161CDA
+P 7350 10250
+F 0 "C12" H 7400 10350 50 0000 L CNN
+F 1 "100nF" H 7400 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 7350 10250 60 0001 C CNN
+F 3 "" H 7350 10250 60 0001 C CNN
+ 1 7350 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C11
+U 1 1 46161CD9
+P 7000 10250
+F 0 "C11" H 7050 10350 50 0000 L CNN
+F 1 "100nF" H 7050 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 7000 10250 60 0001 C CNN
+F 3 "" H 7000 10250 60 0001 C CNN
+ 1 7000 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C10
+U 1 1 46161CD8
+P 6600 10250
+F 0 "C10" H 6650 10350 50 0000 L CNN
+F 1 "100nF" H 6650 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 6600 10250 60 0001 C CNN
+F 3 "" H 6600 10250 60 0001 C CNN
+ 1 6600 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C9
+U 1 1 46161CD7
+P 6250 10250
+F 0 "C9" H 6300 10350 50 0000 L CNN
+F 1 "100nF" H 6300 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 6250 10250 60 0001 C CNN
+F 3 "" H 6250 10250 60 0001 C CNN
+ 1 6250 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C8
+U 1 1 46161CD4
+P 5900 10250
+F 0 "C8" H 5950 10350 50 0000 L CNN
+F 1 "100nF" H 5950 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 5900 10250 60 0001 C CNN
+F 3 "" H 5900 10250 60 0001 C CNN
+ 1 5900 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C7
+U 1 1 46161CD3
+P 5550 10250
+F 0 "C7" H 5600 10350 50 0000 L CNN
+F 1 "100nF" H 5600 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 5550 10250 60 0001 C CNN
+F 3 "" H 5550 10250 60 0001 C CNN
+ 1 5550 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C5
+U 1 1 46161CB8
+P 4750 10250
+F 0 "C5" H 4800 10350 50 0000 L CNN
+F 1 "100nF" H 4800 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 4750 10250 60 0001 C CNN
+F 3 "" H 4750 10250 60 0001 C CNN
+ 1 4750 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C4
+U 1 1 46161CB5
+P 4400 10250
+F 0 "C4" H 4450 10350 50 0000 L CNN
+F 1 "100nF" H 4450 10150 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 4400 10250 60 0001 C CNN
+F 3 "" H 4400 10250 60 0001 C CNN
+ 1 4400 10250
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1250 3350 1250 3400
+Wire Wire Line
+ 2450 10500 2600 10500
+Connection ~ 2600 10500
+Wire Wire Line
+ 3150 10550 3150 10500
+Wire Wire Line
+ 3150 10500 2900 10500
+Connection ~ 2900 10500
+Connection ~ 7850 10500
+Wire Wire Line
+ 8000 10550 8000 10500
+Connection ~ 8000 10500
+Wire Wire Line
+ 4200 9950 4200 10000
+Connection ~ 4200 10000
+Wire Wire Line
+ 4400 10000 4400 10050
+Wire Wire Line
+ 2150 1650 2100 1650
+Wire Wire Line
+ 2150 2000 2100 2000
+Wire Wire Line
+ 2850 1050 2850 1100
+Wire Wire Line
+ 3050 1100 3050 1050
+Wire Wire Line
+ 2300 4050 2300 4100
+Wire Wire Line
+ 2300 3750 2300 3700
+Wire Wire Line
+ 1900 3550 1900 3500
+Wire Wire Line
+ 5050 2750 5050 2800
+Wire Wire Line
+ 4350 3350 4400 3350
+Wire Wire Line
+ 13300 1000 13300 1050
+Wire Wire Line
+ 14450 650 14450 700
+Wire Wire Line
+ 13850 1450 13850 1500
+Wire Wire Line
+ 13850 1950 13850 1900
+Wire Wire Line
+ 13300 2350 13300 2250
+Wire Wire Line
+ 13100 2350 13100 2300
+$EndSCHEMATC
diff --git a/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213_schlib.lib b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213_schlib.lib
new file mode 100644
index 0000000..1dcd3f6
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213_schlib.lib
@@ -0,0 +1,1055 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +3.3V
+#
+DEF +3.3V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -40 30 H I C CNN
+F1 "+3.3V" 0 110 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS +3,3V
+DRAW
+X +3.3V 1 0 0 0 U 30 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# 74AHC1G14
+#
+DEF 74AHC1G14 U 0 30 Y Y 1 F N
+F0 "U" 145 115 40 H V C CNN
+F1 "74AHC1G14" 200 -100 40 H V C CNN
+F2 "" 95 -135 30 H V C CNN
+F3 "" 145 115 60 H V C CNN
+DRAW
+P 4 0 0 0 -150 150 -150 -150 150 0 -150 150 N
+X GND 3 -50 -200 100 U 40 20 0 0 W
+X VCC 5 -50 200 100 D 40 20 0 0 W
+X ~ 2 -450 0 300 R 60 60 1 1 I
+X ~ 4 450 0 300 L 60 60 1 1 O I
+X ~ 2 -450 0 300 R 60 60 1 2 I I
+X ~ 4 450 0 300 L 60 60 1 2 O
+ENDDRAW
+ENDDEF
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_13X2
+#
+DEF CONN_13X2 P 0 10 Y N 1 F N
+F0 "P" 0 700 60 H V C CNN
+F1 "CONN_13X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 650 100 -650 0 1 0 N
+X P1 1 -400 600 300 R 40 30 1 1 P I
+X P2 2 400 600 300 L 40 30 1 1 P I
+X P3 3 -400 500 300 R 40 30 1 1 P I
+X P4 4 400 500 300 L 40 30 1 1 P I
+X P5 5 -400 400 300 R 40 30 1 1 P I
+X P6 6 400 400 300 L 40 30 1 1 P I
+X P7 7 -400 300 300 R 40 30 1 1 P I
+X P8 8 400 300 300 L 40 30 1 1 P I
+X P9 9 -400 200 300 R 40 30 1 1 P I
+X P10 10 400 200 300 L 40 30 1 1 P I
+X P20 20 400 -300 300 L 40 30 1 1 P I
+X P11 11 -400 100 300 R 40 30 1 1 P I
+X P21 21 -400 -400 300 R 40 30 1 1 P I
+X P12 12 400 100 300 L 40 30 1 1 P I
+X P22 22 400 -400 300 L 40 30 1 1 P I
+X P13 13 -400 0 300 R 40 30 1 1 P I
+X P23 23 -400 -500 300 R 40 30 1 1 P I
+X P14 14 400 0 300 L 40 30 1 1 P I
+X P20 24 400 -500 300 L 40 30 1 1 P I
+X P15 15 -400 -100 300 R 40 30 1 1 P I
+X P24 25 -400 -600 300 R 40 30 1 1 P I
+X P16 16 400 -100 300 L 40 30 1 1 P I
+X P22 26 400 -600 300 L 40 30 1 1 P I
+X P17 17 -400 -200 300 R 40 30 1 1 P I
+X P18 18 400 -200 300 L 40 30 1 1 P I
+X P19 19 -400 -300 300 R 40 30 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_20X2
+#
+DEF CONN_20X2 P 0 10 Y N 1 F N
+F0 "P" 0 1050 60 H V C CNN
+F1 "CONN_20X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 1000 100 -1000 0 1 0 N
+X P1 1 -400 950 300 R 60 30 1 1 P I
+X P2 2 400 950 300 L 60 30 1 1 P I
+X P3 3 -400 850 300 R 60 30 1 1 P I
+X P4 4 400 850 300 L 60 30 1 1 P I
+X P5 5 -400 750 300 R 60 30 1 1 P I
+X P6 6 400 750 300 L 60 30 1 1 P I
+X P7 7 -400 650 300 R 60 30 1 1 P I
+X P8 8 400 650 300 L 60 30 1 1 P I
+X P9 9 -400 550 300 R 60 30 1 1 P I
+X P10 10 400 550 300 L 60 30 1 1 P I
+X P20 20 400 50 300 L 60 30 1 1 P I
+X P30 30 400 -450 300 L 60 30 1 1 P I
+X P40 40 400 -950 300 L 60 30 1 1 P I
+X P11 11 -400 450 300 R 60 30 1 1 P I
+X P21 21 -400 -50 300 R 60 30 1 1 P I
+X P31 31 -400 -550 300 R 60 30 1 1 P I
+X P12 12 400 450 300 L 60 30 1 1 P I
+X P22 22 400 -50 300 L 60 30 1 1 P I
+X P32 32 400 -550 300 L 60 30 1 1 P I
+X P13 13 -400 350 300 R 60 30 1 1 P I
+X P23 23 -400 -150 300 R 60 30 1 1 P I
+X P33 33 -400 -650 300 R 60 30 1 1 P I
+X P14 14 400 350 300 L 60 30 1 1 P I
+X P24 24 400 -150 300 L 60 30 1 1 P I
+X P34 34 400 -650 300 L 60 30 1 1 P I
+X P15 15 -400 250 300 R 60 30 1 1 P I
+X ~ 25 -400 -250 300 R 60 30 1 1 P I
+X P35 35 -400 -750 300 R 60 30 1 1 P I
+X P16 16 400 250 300 L 60 30 1 1 P I
+X P26 26 400 -250 300 L 60 30 1 1 P I
+X P36 36 400 -750 300 L 60 30 1 1 P I
+X P17 17 -400 150 300 R 60 30 1 1 P I
+X P27 27 -400 -350 300 R 60 30 1 1 P I
+X P37 37 -400 -850 300 R 60 30 1 1 P I
+X P18 18 400 150 300 L 60 30 1 1 P I
+X P28 28 400 -350 300 L 60 30 1 1 P I
+X P38 38 400 -850 300 L 60 30 1 1 P I
+X P19 19 -400 50 300 R 60 30 1 1 P I
+X P29 29 -400 -450 300 R 60 30 1 1 P I
+X P39 39 -400 -950 300 R 60 30 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_2X2
+#
+DEF CONN_2X2 P 0 40 Y N 1 F N
+F0 "P" 0 150 50 H V C CNN
+F1 "CONN_2X2" 10 -130 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 100 100 -100 0 1 0 N
+X 1 1 -400 50 300 R 60 60 1 1 P I
+X 2 2 400 50 300 L 60 60 1 1 P I
+X 3 3 -400 -50 300 R 60 60 1 1 P I
+X 4 4 400 -50 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_3
+#
+DEF CONN_3 K 0 40 Y N 1 F N
+F0 "K" -50 0 50 V V C CNN
+F1 "CONN_3" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 0 250 R 60 60 1 1 P I
+X P3 3 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_30X2
+#
+DEF CONN_30X2 P 0 10 Y N 1 F N
+F0 "P" 0 1550 60 H V C CNN
+F1 "CONN_30X2" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 1500 100 -1500 0 1 0 N
+X P1 1 -400 1450 300 R 60 30 1 1 P I
+X P2 2 400 1450 300 L 60 30 1 1 P I
+X P3 3 -400 1350 300 R 60 30 1 1 P I
+X P4 4 400 1350 300 L 60 30 1 1 P I
+X P5 5 -400 1250 300 R 60 30 1 1 P I
+X P6 6 400 1250 300 L 60 30 1 1 P I
+X P7 7 -400 1150 300 R 60 30 1 1 P I
+X P8 8 400 1150 300 L 60 30 1 1 P I
+X P9 9 -400 1050 300 R 60 30 1 1 P I
+X P10 10 400 1050 300 L 60 30 1 1 P I
+X P20 20 400 550 300 L 60 30 1 1 P I
+X P30 30 400 50 300 L 60 30 1 1 P I
+X P40 40 400 -450 300 L 60 30 1 1 P I
+X P50 50 400 -950 300 L 60 30 1 1 P I
+X P60 60 400 -1450 300 L 50 50 1 1 P I
+X P11 11 -400 950 300 R 60 30 1 1 P I
+X P21 21 -400 450 300 R 60 30 1 1 P I
+X P31 31 -400 -50 300 R 60 30 1 1 P I
+X P41 41 -400 -550 300 R 60 30 1 1 P I
+X P51 51 -400 -1050 300 R 50 50 1 1 P I
+X P12 12 400 950 300 L 60 30 1 1 P I
+X P22 22 400 450 300 L 60 30 1 1 P I
+X P32 32 400 -50 300 L 60 30 1 1 P I
+X P42 42 400 -550 300 L 60 30 1 1 P I
+X P52 52 400 -1050 300 L 50 50 1 1 P I
+X P13 13 -400 850 300 R 60 30 1 1 P I
+X P23 23 -400 350 300 R 60 30 1 1 P I
+X P23 23 -400 350 300 R 60 30 1 1 P I
+X P33 33 -400 -150 300 R 60 30 1 1 P I
+X P43 43 -400 -650 300 R 60 30 1 1 P I
+X P53 53 -400 -1150 300 R 50 50 1 1 P I
+X P14 14 400 850 300 L 60 30 1 1 P I
+X P24 24 400 350 300 L 60 30 1 1 P I
+X P34 34 400 -150 300 L 60 30 1 1 P I
+X P44 44 400 -650 300 L 60 30 1 1 P I
+X P54 54 400 -1150 300 L 50 50 1 1 P I
+X P15 15 -400 750 300 R 60 30 1 1 P I
+X ~ 25 -400 250 300 R 60 30 1 1 P I
+X P35 35 -400 -250 300 R 60 30 1 1 P I
+X P45 45 -400 -750 300 R 60 30 1 1 P I
+X P55 55 -400 -1250 300 R 50 50 1 1 P I
+X P16 16 400 750 300 L 60 30 1 1 P I
+X P26 26 400 250 300 L 60 30 1 1 P I
+X P36 36 400 -250 300 L 60 30 1 1 P I
+X P46 46 400 -750 300 L 60 30 1 1 P I
+X P56 56 400 -1250 300 L 50 50 1 1 P I
+X P17 17 -400 650 300 R 60 30 1 1 P I
+X P27 27 -400 150 300 R 60 30 1 1 P I
+X P37 37 -400 -350 300 R 60 30 1 1 P I
+X P47 47 -400 -850 300 R 60 30 1 1 P I
+X P57 57 -400 -1350 300 R 50 50 1 1 P I
+X P18 18 400 650 300 L 60 30 1 1 P I
+X P28 28 400 150 300 L 60 30 1 1 P I
+X P38 38 400 -350 300 L 60 30 1 1 P I
+X P48 48 400 -850 300 L 60 30 1 1 P I
+X P58 58 400 -1350 300 L 50 50 1 1 P I
+X P19 19 -400 550 300 R 60 30 1 1 P I
+X P29 29 -400 50 300 R 60 30 1 1 P I
+X P39 39 -400 -450 300 R 60 30 1 1 P I
+X P49 49 -400 -950 300 R 60 30 1 1 P I
+X P59 59 -400 -1450 300 R 50 50 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_4X2
+#
+DEF CONN_4X2 P 0 40 Y N 1 F N
+F0 "P" 0 250 50 H V C CNN
+F1 "CONN_4X2" 0 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 200 100 -200 0 1 0 N
+X 1 1 -400 150 300 R 60 60 1 1 P I
+X 2 2 400 150 300 L 60 60 1 1 P I
+X 3 3 -400 50 300 R 60 60 1 1 P I
+X 4 4 400 50 300 L 60 60 1 1 P I
+X 5 5 -400 -50 300 R 60 60 1 1 P I
+X 6 6 400 -50 300 L 60 60 1 1 P I
+X 7 7 -400 -150 300 R 60 60 1 1 P I
+X 8 8 400 -150 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_6
+#
+DEF CONN_6 P 0 30 Y N 1 F N
+F0 "P" -50 0 60 V V C CNN
+F1 "CONN_6" 50 0 60 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 300 100 -300 0 1 0 N
+X 1 1 -350 250 250 R 60 60 1 1 P I
+X 2 2 -350 150 250 R 60 60 1 1 P I
+X 3 3 -350 50 250 R 60 60 1 1 P I
+X 4 4 -350 -50 250 R 60 60 1 1 P I
+X 5 5 -350 -150 250 R 60 60 1 1 P I
+X 6 6 -350 -250 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# FUSE
+#
+DEF FUSE F 0 10 Y Y 1 F N
+F0 "F" 100 50 40 H V C CNN
+F1 "FUSE" -100 -50 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A -75 0 75 1 1799 0 1 0 N 0 0 -150 0
+A 75 0 75 -1799 -1 0 1 0 N 0 0 150 0
+X ~ 1 -250 0 100 R 40 40 1 1 I
+X ~ 2 250 0 100 L 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# GNDA
+#
+DEF GNDA #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 40 H I C CNN
+F1 "GNDA" 0 -70 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GNDA 1 0 0 0 U 40 40 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JACK_2P
+#
+DEF JACK_2P J 0 40 Y Y 1 F N
+F0 "J" -350 -200 60 H V C CNN
+F1 "JACK_2P" -150 250 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -450 150 -400 -100 0 1 0 F
+S 300 -150 -400 200 0 1 0 N
+P 3 0 1 0 150 0 300 0 300 0 N
+P 4 0 1 0 0 -100 -50 -50 -100 -100 -100 -100 N
+P 4 0 1 0 0 -100 300 -100 300 -100 300 -100 N
+P 4 0 1 0 50 -50 100 -100 150 -50 150 -50 N
+P 4 0 1 0 150 0 100 0 100 -100 100 -100 N
+P 5 0 1 0 300 150 -250 150 -300 100 -350 150 -350 150 N
+X ~ 1 450 -100 150 L 50 50 1 1 P
+X ~ 2 450 0 150 L 50 50 1 1 P
+X ~ 3 450 150 150 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JUMPER
+#
+DEF JUMPER JP 0 30 Y N 1 F N
+F0 "JP" 0 150 60 H V C CNN
+F1 "JUMPER" 0 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
+C -100 0 35 0 1 0 N
+C 100 0 35 0 1 0 N
+X 1 1 -300 0 165 R 60 60 0 1 P
+X 2 2 300 0 165 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LT1129_QPACK
+#
+DEF LT1129_QPACK U 0 30 Y Y 1 F N
+F0 "U" 250 450 60 H V C CNN
+F1 "LT1129_QPACK" 500 -495 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LT_1129_QP
+DRAW
+S -500 -400 500 400 0 1 0 N
+X OUT 1 800 300 300 L 60 60 1 1 w
+X SENSE 2 800 100 300 L 60 60 1 1 I
+X GND 3 0 -700 300 U 60 60 1 1 W
+X SHDN 4 -800 100 300 R 60 60 1 1 I I
+X IN 5 -800 300 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MAX232
+#
+DEF MAX232 U 0 40 Y Y 1 F N
+F0 "U" 0 850 70 H V C CNN
+F1 "MAX232" 0 -850 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS MAX202
+DRAW
+T 900 80 -530 40 0 0 0 RS232 Normal 0 C C
+T 900 -100 -530 40 0 0 0 TTL Normal 0 C C
+S -500 -800 500 800 0 1 0 N
+P 3 0 1 0 -500 -300 500 -300 500 -300 N
+P 3 0 1 0 0 -300 0 -800 0 -800 N
+X C1+ 1 -800 700 300 R 60 50 1 1 I
+X V+ 2 800 300 300 L 60 50 1 1 w
+X C1- 3 -800 300 300 R 60 50 1 1 I
+X C2+ 4 -800 200 300 R 60 50 1 1 I
+X C2- 5 -800 -200 300 R 60 50 1 1 I
+X V- 6 800 -200 300 L 60 50 1 1 w
+X T2OUT 7 800 -500 300 L 60 50 1 1 O
+X R2IN 8 800 -700 300 L 60 50 1 1 I
+X R2OUT 9 -800 -700 300 R 60 50 1 1 O
+X T2IN 10 -800 -500 300 R 60 50 1 1 I
+X T1IN 11 -800 -400 300 R 60 50 1 1 I
+X R1OUT 12 -800 -600 300 R 60 50 1 1 O
+X R1IN 13 800 -600 300 L 60 50 1 1 I
+X T1OUT 14 800 -400 300 L 60 50 1 1 O
+X GND 15 800 100 300 L 60 50 1 1 W
+X VCC 16 800 700 300 L 60 50 1 1 W
+ENDDRAW
+ENDDEF
+#
+# MC34064P
+#
+DEF MC34064P U 0 20 Y Y 1 F N
+F0 "U" 50 200 60 H V C CNN
+F1 "MC34064P" 300 -190 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS MC33064P
+DRAW
+S -200 -150 200 150 0 1 0 N
+X Rst 1 350 50 150 L 60 40 1 1 C
+X In 2 -350 50 150 R 60 40 1 1 I
+X Gbd 3 0 -300 150 U 60 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MCF5213-LQFP100
+#
+DEF MCF5213-LQFP100 U 0 40 Y Y 1 F N
+F0 "U" 1150 2700 60 H V L CNN
+F1 "MCF5213-LQFP100" 600 -2650 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -1700 2600 1700 -2600 0 1 0 N
+X VCC 1 -250 2850 250 D 30 30 1 1 W
+X VCC 2 -200 2850 250 D 30 30 1 1 W
+X GND 3 -250 -2850 250 U 30 30 1 1 W
+X ~URTS1~/SYNCB/UTXD2/PUB2 4 2000 -400 300 L 50 50 1 1 B
+X TEST 5 -2000 1450 300 R 50 50 1 1 I
+X ~UCTS0~/CANRX/PUA3 6 2000 -300 300 L 50 50 1 1 B
+X URXD0/PUA1 7 2000 400 300 L 50 50 1 1 B
+X UTXD0/PUA0 8 2000 500 300 L 50 50 1 1 B
+X ~URTS0~/CANTX/PUA2 9 2000 -200 300 L 50 50 1 1 B
+X SCL/CANTX/PAS0/UTXD2 10 2000 950 300 L 50 50 1 1 B
+X QSPI_CS0/SDA/CTS1/PQS3 20 2000 -1400 300 L 50 50 1 1 B
+X ~URTS2~/PUC2 30 2000 -600 300 L 50 50 1 1 B
+X CLKMOD0 40 -2000 1750 300 R 50 50 1 1 I
+X VCCA 50 -2000 -2350 300 R 50 50 1 1 I
+X PWM5/PTD2 60 2000 2300 300 L 50 60 1 1 B
+X PST3/PDD3 70 -2000 200 300 R 50 50 1 1 B
+X DSO/TDO 80 -2000 950 300 R 50 50 1 1 O
+X ~IRQ4~/PNQ4 90 -2000 -750 300 R 50 50 1 1 B
+X SDA/CANRX/PAS1/URXD2 11 2000 850 300 L 50 50 1 1 B
+X RCON/EZPCS 21 -2000 1550 300 R 50 50 1 1 I L
+X DTIN2/DTOUT2/PWM4/PTC2 31 2000 1400 300 L 50 50 1 1 B
+X VCC 41 50 2850 250 D 30 30 1 1 W
+X AN7/PAN7 51 -2000 -1950 300 R 50 50 1 1 B
+X GPT2PWM5//PTA2 61 2000 1850 300 L 50 50 1 1 B
+X GNDPLL 71 -2000 2400 300 R 50 50 1 1 P
+X VCC 81 200 2850 250 D 30 30 1 1 W
+X ~IRQ5~/PNQ5 91 -2000 -850 300 R 50 50 1 1 B
+X QSPI_CS3/SYNCA/SYNCB/PQS6 12 2000 -1700 300 L 50 50 1 1 B
+X VCC 22 -100 2850 250 D 30 30 1 1 W
+X DTIN3/DTOUT3/PWM6/PTC3 32 2000 1300 300 L 50 50 1 1 B
+X GND 42 0 -2850 250 U 30 30 1 1 W
+X AN6/PAN6 52 -2000 -1850 300 R 50 50 1 1 B
+X GPT3/PWM7/PTA3 62 2000 1750 300 L 50 50 1 1 B
+X XTAL 72 -2000 2150 300 R 50 50 1 1 O
+X GND 82 200 -2850 250 U 30 30 1 1 W
+X GND 92 250 -2850 250 U 30 30 1 1 W
+X QSPI_CS2/PQS5 13 2000 -1600 300 L 50 50 1 1 B
+X VCC 23 -50 2850 250 D 30 30 1 1 W
+X PWM3/PTD1 33 2000 2400 300 L 50 60 1 1 B
+X AN0/PAN0 43 -2000 -1250 300 R 50 50 1 1 B
+X AN5/PAN5 53 -2000 -1750 300 R 50 50 1 1 B
+X PWM7/PTD3 63 2000 2200 300 L 50 60 1 1 B
+X CLKIN/EXTAL 73 -2000 2250 300 R 50 50 1 1 I
+X DDATA2/PDD6 83 -2000 -100 300 R 50 50 1 1 B
+X VCC 93 250 2850 250 D 30 30 1 1 W
+X VCC 14 -150 2850 250 D 30 30 1 1 W
+X GND 24 -150 -2850 250 U 30 30 1 1 W
+X VCC 34 0 2850 250 D 30 30 1 1 W
+X AN1/PAN1 44 -2000 -1350 300 R 50 50 1 1 B
+X AN4/PAN4 54 -2000 -1650 300 R 50 50 1 1 B
+X TCLK/PSTCLK/CLKOUT 64 -2000 850 300 R 50 50 1 1 I
+X VCCPLL 74 -2000 2500 300 R 50 50 1 1 P
+X DDATA3/PDD7 84 -2000 -200 300 R 50 50 1 1 B
+X ~IRQ6~/PNQ6 94 -2000 -950 300 R 50 50 1 1 B
+X GND 15 -200 -2850 250 U 30 30 1 1 W
+X GND 25 -100 -2850 250 U 30 30 1 1 W
+X GND 35 -50 -2850 250 U 30 30 1 1 W
+X AN2/PAN2 45 -2000 -1450 300 R 50 50 1 1 B
+X VSTBY 55 350 2850 250 D 30 30 1 1 W
+X PST0/PDD0 65 -2000 500 300 R 50 50 1 1 B
+X GND 75 150 -2850 250 U 30 30 1 1 W
+X DSCLK/~TRST~ 85 -2000 1150 300 R 50 50 1 1 I
+X ~IRQ7~/PNQ7 95 -2000 -1050 300 R 50 50 1 1 B
+X QSPI_DIN/EZPD/CANRX/RXD1/PQS1 16 2000 -1200 300 L 50 50 1 1 B
+X JTAG_EN 26 -2000 1250 300 R 50 50 1 1 I
+X DTIN0/DTOUT0/PWM0/PTC0 36 2000 1600 300 L 50 50 1 1 B
+X AN3/PAN3 46 -2000 -1550 300 R 50 50 1 1 B
+X GND 56 50 -2850 250 U 30 30 1 1 W
+X PST1/PDD1 66 -2000 400 300 R 50 50 1 1 B
+X ~BKPT~/TMS 76 -2000 750 300 R 50 50 1 1 I
+X ALLPST 86 -2000 600 300 R 50 50 1 1 O
+X RSTI 96 -2000 1950 300 R 50 50 1 1 I L
+X QSPI_DOUT/EZPQ/CANTX/RXD0/PQS0 17 2000 -1100 300 L 50 50 1 1 B
+X ~UCTS2~/PUC3 27 2000 -700 300 L 50 50 1 1 B
+X DTIN1/DTOUT1/PWM2/PTC1 37 2000 1500 300 L 50 50 1 1 B
+X VSSA 47 -2000 -2450 300 R 50 50 1 1 I
+X VCC 57 100 2850 250 D 30 30 1 1 W
+X GND 67 100 -2850 250 U 30 30 1 1 W
+X DDATA0/PDD4 77 -2000 100 300 R 50 50 1 1 B
+X ~IRQ1~/PNQ1/SYNCA/PWM1 87 -2000 -450 300 R 50 50 1 1 B
+X RSTO 97 -2000 1850 300 R 50 50 1 1 O V
+X QSPI_CLK/EZPCK/SCL/RTS1/PQS2 18 2000 -1300 300 L 50 50 1 1 B
+X URXD2/PUC1 28 2000 0 300 L 50 50 1 1 B
+X PWM1/PTD0 38 2000 2500 300 L 50 60 1 1 B
+X VRL 48 -2000 -2200 300 R 50 50 1 1 I
+X GPT0/PWM1/PTA0 58 2000 2050 300 L 50 50 1 1 B
+X VCC 68 150 2850 250 D 30 30 1 1 W
+X DDATA1/PDD5 78 -2000 0 300 R 50 50 1 1 B
+X ~IRQ2~/PNQ2 88 -2000 -550 300 R 50 50 1 1 B
+X ~UCTS1~/SYNCA/URXD2/PUB3 98 2000 -500 300 L 50 50 1 1 B
+X QSPI_CS1/PQS4 19 2000 -1500 300 L 50 50 1 1 B
+X UTXD2/PUC0 29 2000 100 300 L 50 50 1 1 B
+X CLKMOD1 39 -2000 1650 300 R 50 50 1 1 I
+X VRH 49 -2000 -2100 300 R 50 50 1 1 I
+X GPT1/PWM3/PTA1 59 2000 1950 300 L 50 50 1 1 B
+X PST2/PDD2 69 -2000 300 300 R 50 50 1 1 B
+X DSI/TDI 79 -2000 1050 300 R 50 50 1 1 I
+X ~IRQ3~/PNQ3 89 -2000 -650 300 R 50 50 1 1 B
+X UTXD1/PUB0 99 2000 300 300 L 50 50 1 1 B
+X URXD1/PUB1 100 2000 200 300 L 50 50 1 1 B
+ENDDRAW
+ENDDEF
+#
+# PCA82C251
+#
+DEF PCA82C251 U 0 0 Y Y 1 F N
+F0 "U" 150 450 60 H V C CNN
+F1 "PCA82C251" 300 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+T 0 50 300 20 0 0 1 Volt Normal 1 C C
+S -200 400 200 -300 0 1 0 N
+P 2 0 1 0 -150 -150 -200 -150 N
+P 2 0 1 0 -150 150 -200 150 N
+P 2 0 1 0 100 -50 200 -50 N
+P 2 0 1 0 150 50 200 50 N
+P 2 0 1 0 150 300 200 300 N
+P 3 0 1 0 -200 0 -100 0 -70 90 N
+P 4 0 1 0 -150 -150 50 -50 50 -250 -150 -150 N
+P 4 0 1 0 -50 100 100 100 100 -100 50 -100 N
+P 4 0 1 0 -50 200 150 200 150 -200 50 -200 N
+P 5 0 1 0 -150 200 -150 50 50 150 -150 250 -150 200 N
+P 5 0 1 0 -50 350 -50 250 150 250 150 350 -50 350 N
+X TxD 1 -450 150 300 R 50 40 1 1 I
+X GND 2 500 -200 300 L 50 40 1 1 W
+X VCC 3 -450 300 250 R 50 40 1 1 W
+X RxD 4 -450 -150 300 R 50 40 1 1 O
+X Vref 5 500 300 300 L 50 40 1 1 O
+X CAN- 6 500 -50 300 L 50 40 1 1 B
+X CAN+ 7 500 50 300 L 50 40 1 1 B
+X Rsl 8 -450 0 300 R 50 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PNP
+#
+DEF PNP Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 60 H V R CNN
+F1 "PNP" 0 150 60 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SWITCH_INV
+#
+DEF SWITCH_INV SW 0 0 N Y 1 F N
+F0 "SW" -200 150 50 H V C CNN
+F1 "SWITCH_INV" -150 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C -150 0 50 0 0 0 N
+C 150 -100 50 0 0 0 N
+C 150 100 50 0 1 0 N
+P 2 0 1 0 -100 0 150 50 N
+X 1 1 500 100 300 L 60 60 1 1 P
+X 2 2 -500 0 300 R 60 60 1 1 P
+X 3 3 500 -100 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SW_PUSH
+#
+DEF SW_PUSH SW 0 40 N N 1 F N
+F0 "SW" 150 110 50 H V C CNN
+F1 "SW_PUSH" 0 -80 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -170 50 170 60 0 1 0 N
+P 4 0 1 0 -40 60 -30 90 30 90 40 60 N
+X 1 1 -300 0 200 R 60 60 0 1 P I
+X 2 2 300 0 200 L 60 60 0 1 P I
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VDD
+#
+DEF VDD #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VDD" 0 110 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VDD 1 0 0 0 U 40 40 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# XCR3256-TQ144
+#
+DEF XCR3256-TQ144 U 0 20 Y Y 1 F N
+F0 "U" 0 3500 70 H V C CNN
+F1 "XCR3256-TQ144" 0 -3600 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -650 3400 650 -3500 0 1 0 N
+X I1 1 950 -2900 300 L 50 50 1 1 P
+X I0 2 950 -3000 300 L 50 50 1 1 P
+X GND 3 -50 -3500 0 U 30 30 1 1 W N
+X J0/TDI 4 -950 3100 300 R 50 50 1 1 P
+X J2 5 950 -2200 300 L 50 50 1 1 P
+X J3 6 950 -2100 300 L 50 50 1 1 P
+X J4 7 950 -2000 300 L 50 50 1 1 P
+X J11 8 950 -1900 300 L 50 50 1 1 P
+X J13 9 950 -1800 300 L 50 50 1 1 P
+X J14 10 950 -1700 300 L 50 50 1 1 P
+X N0/TMS 20 -950 3000 300 R 50 50 1 1 P
+X P3 30 950 2700 300 L 50 50 1 1 P
+X O4 40 950 2100 300 L 50 50 1 1 P
+X VCC 50 50 3400 0 D 30 30 1 1 W N
+X F4 60 -950 -1900 300 R 50 50 1 1 P
+X H11 70 950 -3400 300 L 50 50 1 1 P
+X G2 80 -950 -2500 300 R 50 50 1 1 P
+X C14 90 -950 500 300 R 50 50 1 1 P
+X J15 11 950 -1600 300 L 50 50 1 1 P
+X N2 21 950 900 300 L 50 50 1 1 P
+X P4 31 950 2800 300 L 50 50 1 1 P
+X O3 41 950 2000 300 L 50 50 1 1 P
+X VCC 51 -450 3400 0 D 30 30 1 1 W N
+X F11 61 -950 -2000 300 R 50 50 1 1 P
+X H13 71 950 -3300 300 L 50 50 1 1 P
+X G0 81 -950 -2400 300 R 50 50 1 1 I
+X C13 91 -950 600 300 R 50 50 1 1 P
+X L2 12 950 -600 300 L 50 50 1 1 P
+X N3 22 950 1000 300 L 50 50 1 1 P
+X P11 32 950 2900 300 L 50 50 1 1 P
+X O2 42 950 1900 300 L 50 50 1 1 P
+X GND 52 -350 -3500 0 U 30 30 1 1 W N
+X F12 62 -950 -2100 300 R 50 50 1 1 P
+X H15 72 950 -3200 300 L 50 50 1 1 P
+X E14 82 -950 -1500 300 R 50 50 1 1 P
+X C11 92 -950 700 300 R 50 50 1 1 P
+X PORT_EN 13 -950 2900 300 R 50 50 1 1 P
+X N4 23 950 1100 300 L 50 50 1 1 P
+X GND 33 150 -3500 0 U 30 30 1 1 W N
+X O1 43 950 1800 300 L 50 50 1 1 P
+X M2 53 950 200 300 L 50 50 1 1 P
+X F13 63 -950 -2200 300 R 50 50 1 1 P
+X VCC 73 150 3400 0 D 30 30 1 1 W N
+X E13 83 -950 -1400 300 R 50 50 1 1 P
+X C4 93 -950 800 300 R 50 50 1 1 P
+X L3 14 950 -500 300 L 50 50 1 1 P
+X VCC 24 -50 3400 0 D 30 30 1 1 W N
+X P13 34 950 3000 300 L 50 50 1 1 P
+X O0 44 950 1700 300 L 50 50 1 1 P
+X M1 54 950 100 300 L 50 50 1 1 P
+X GND 64 350 -3500 0 U 30 30 1 1 W N
+X G14 74 -950 -3000 300 R 50 50 1 1 P
+X E11 84 -950 -1600 300 R 50 50 1 1 P
+X C3 94 -950 900 300 R 50 50 1 1 P
+X L4 15 950 -400 300 L 50 50 1 1 P
+X N11 25 950 1200 300 L 50 50 1 1 P
+X P14 35 950 3100 300 L 50 50 1 1 P
+X M15 45 950 700 300 L 50 50 1 1 P
+X F1 55 -950 -1700 300 R 50 50 1 1 P
+X F15 65 -950 -2300 300 R 50 50 1 1 P
+X G13 75 -950 -2900 300 R 50 50 1 1 P
+X GND 85 450 -3500 0 U 30 30 1 1 W N
+X VCC 95 350 3400 0 D 30 30 1 1 W N
+X L11 16 950 -300 300 L 50 50 1 1 P
+X N13 26 950 1300 300 L 50 50 1 1 P
+X P15 36 950 3200 300 L 50 50 1 1 P
+X M13 46 950 600 300 L 50 50 1 1 P
+X F2 56 -950 -1800 300 R 50 50 1 1 P
+X H0 66 -950 -3100 300 R 50 50 1 1 P
+X VCC 76 250 3400 0 D 30 30 1 1 W N
+X E4 86 -950 -1300 300 R 50 50 1 1 P
+X C2 96 -950 1000 300 R 50 50 1 1 P
+X GND 17 50 -3500 0 U 30 30 1 1 W N
+X N14 27 950 1400 300 L 50 50 1 1 P
+X O15 37 950 2400 300 L 50 50 1 1 P
+X M12 47 950 500 300 L 50 50 1 1 P
+X GND 57 -450 -3500 0 U 30 30 1 1 W N
+X H1 67 -950 -3200 300 R 50 50 1 1 P
+X G11 77 -950 -2800 300 R 50 50 1 1 P
+X E3 87 -950 -1200 300 R 50 50 1 1 P
+X C1 97 -950 1100 300 R 50 50 1 1 P
+X L13 18 950 -200 300 L 50 50 1 1 P
+X N15 28 950 1500 300 L 50 50 1 1 P
+X O13 38 950 2300 300 L 50 50 1 1 P
+X M11 48 950 400 300 L 50 50 1 1 P
+X VCC 58 -350 3400 0 D 30 30 1 1 W N
+X H2 68 -950 -3300 300 R 50 50 1 1 P
+X G4 78 -950 -2700 300 R 50 50 1 1 P
+X E2 88 -950 -1100 300 R 50 50 1 1 P
+X C0 98 -950 1200 300 R 50 50 1 1 P
+X L14 19 950 -100 300 L 50 50 1 1 P
+X P2 29 950 2600 300 L 50 50 1 1 P
+X O12 39 950 2200 300 L 50 50 1 1 P
+X M4 49 950 300 300 L 50 50 1 1 P
+X GND 59 250 -3500 0 U 30 30 1 1 W N
+X H3 69 -950 -3400 300 R 50 50 1 1 P
+X G3 79 -950 -2600 300 R 50 50 1 1 P
+X E0/TCK 89 -950 3200 300 R 50 50 1 1 P
+X A13 99 -950 2200 300 R 50 50 1 1 P
+X A12 100 -950 2300 300 R 50 50 1 1 P
+X B11 110 -950 1700 300 R 50 50 1 1 P
+X D12 120 -950 -700 300 R 50 50 1 1 P
+X VCC 130 -150 3400 0 D 30 30 1 1 W N
+X I14 140 950 -2500 300 L 50 50 1 1 P
+X A11 101 -950 2400 300 R 50 50 1 1 P
+X B12 111 -950 1600 300 R 50 50 1 1 P
+X D13 121 -950 -800 300 R 50 50 1 1 P
+X K15 131 950 -800 300 L 50 50 1 1 P
+X I13 141 950 -2600 300 L 50 50 1 1 P
+X A4 102 -950 2500 300 R 50 50 1 1 P
+X B14 112 -950 1500 300 R 50 50 1 1 P
+X D15 122 -950 -900 300 R 50 50 1 1 P
+X K14 132 950 -900 300 L 50 50 1 1 P
+X I12 142 950 -2700 300 L 50 50 1 1 P
+X A3 103 -950 2600 300 R 50 50 1 1 P
+X B15 113 -950 1400 300 R 50 50 1 1 P
+X VCC 123 -250 3400 0 D 30 30 1 1 W N
+X K13 133 950 -1000 300 L 50 50 1 1 P
+X I4 143 950 -2800 300 L 50 50 1 1 P
+X A2/TDO 104 -950 3300 300 R 50 50 1 1 P
+X D0 114 -950 -200 300 R 50 50 1 1 P
+X GND 124 -250 -3500 0 U 30 30 1 1 W N
+X K12 134 950 -1100 300 L 50 50 1 1 P
+X VCC 144 550 3400 0 D 30 30 1 1 W N
+X GND 105 550 -3500 0 U 30 30 1 1 W N
+X VCC 115 450 3400 0 D 30 30 1 1 W N
+X CLK3/IN3 125 -950 0 300 R 50 50 1 1 I
+X GND 135 -550 -3500 0 U 30 30 1 1 W N
+X A0 106 -950 2700 300 R 50 50 1 1 P
+X D1 116 -950 -300 300 R 50 50 1 1 P
+X CLK2/IN2 126 -950 100 300 R 50 50 1 1 I
+X K11 136 950 -1200 300 L 50 50 1 1 P
+X B0 107 -950 2000 300 R 50 50 1 1 P
+X D2 117 -950 -400 300 R 50 50 1 1 P
+X CLK1/IN1 127 -950 200 300 R 50 50 1 1 I
+X K4 137 950 -1300 300 L 50 50 1 1 P
+X B1 108 -950 1900 300 R 50 50 1 1 P
+X D4 118 -950 -500 300 R 50 50 1 1 P
+X CLK0/IN0 128 -950 300 300 R 50 50 1 1 I
+X K2 138 950 -1400 300 L 50 50 1 1 P
+X B4 109 -950 1800 300 R 50 50 1 1 P
+X D11 119 -950 -600 300 R 50 50 1 1 P
+X GND 129 -150 -3500 0 U 30 30 1 1 W N
+X I15 139 950 -2400 300 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wings b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wings
new file mode 100644
index 0000000..654ecfa
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wings
Binary files differ
diff --git a/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wrl b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wrl
new file mode 100644
index 0000000..bb88a4f
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/dpack_5.wrl
@@ -0,0 +1,465 @@
+#VRML V2.0 utf8
+#Exported from Wings 3D 2.0.1
+DEF cube4_copy14 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material DEF pin Material {
+ diffuseColor 0.7200000000000001 0.7200000000000001 0.7200000000000001
+ emissiveColor 0.0 0.0 0.0
+ specularColor 0.40298507462686567 0.40298507462686567 0.40298507462686567
+ ambientIntensity 0.7388059701492539
+ transparency 0.0
+ shininess 1.0
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 0.49469757557083704 0.9044116856547368 0.5885495998933049,
+ 0.49469757557107047 0.9044117988462632 0.4165495998934562,
+ 0.8497157948850202 0.904410585242893 0.4165495998934562,
+ 0.8497157948847871 0.9044104720513666 0.5885495998933049,
+ 0.4946949389278774 -0.3755880511037757 0.18854694630386348,
+ 0.4946949389281108 -0.37558793791224976 0.016546946304015004,
+ 0.8497131582420605 -0.37558915151562 0.016546946304015004,
+ 0.8497131582418275 -0.37558926470714593 0.18854694630386348,
+ 0.4946968944379325 0.5737450189895246 0.5885487153633737,
+ 0.49469621330556995 0.2430786155604212 0.18854783083379462,
+ 0.49469689443816556 0.5737451321810509 0.4165487153635251,
+ 0.4946962133058033 0.24307872875194758 0.016547830833946137,
+ 0.8497151137521156 0.5737439185776807 0.4165487153635251,
+ 0.849714432619753 0.24307751514857734 0.016547830833946137,
+ 0.8497151137518822 0.5737438053861543 0.5885487153633737,
+ 0.8497144326195201 0.24307740195705096 0.18854783083379462 ] }
+ coordIndex [
+ 0, 1, 8, -1,
+ 0, 3, 1, -1,
+ 0, 8, 3, -1,
+ 1, 2, 12, -1,
+ 1, 3, 2, -1,
+ 1, 10, 8, -1,
+ 1, 12, 10, -1,
+ 2, 3, 12, -1,
+ 3, 8, 14, -1,
+ 3, 14, 12, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 4, 7, 15, -1,
+ 4, 9, 11, -1,
+ 4, 11, 5, -1,
+ 4, 15, 9, -1,
+ 5, 11, 6, -1,
+ 6, 11, 13, -1,
+ 6, 13, 15, -1,
+ 6, 15, 7, -1,
+ 8, 9, 15, -1,
+ 8, 10, 11, -1,
+ 8, 11, 9, -1,
+ 8, 15, 14, -1,
+ 10, 12, 11, -1,
+ 11, 12, 13, -1,
+ 12, 14, 15, -1,
+ 12, 15, 13, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube4_copy13 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pin
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -0.8593024244219452 0.9044171255138134 0.5885495998933049,
+ -0.859302424421712 0.9044172387053397 0.4165495998934562,
+ -0.5042842051077618 0.9044160251019691 0.4165495998934562,
+ -0.5042842051079948 0.9044159119104427 0.5885495998933049,
+ -0.8593050610649048 -0.37558261124469916 0.18854694630386348,
+ -0.8593050610646716 -0.37558249805317323 0.016546946304015004,
+ -0.5042868417507214 -0.3755837116565439 0.016546946304015004,
+ -0.5042868417509545 -0.37558382484806985 0.18854694630386348,
+ -0.85930310555485 0.5737504588486011 0.5885487153633737,
+ -0.8593037866872122 0.24308405541949774 0.18854783083379462,
+ -0.8593031055546166 0.5737505720401275 0.4165487153635251,
+ -0.8593037866869792 0.2430841686110241 0.016547830833946137,
+ -0.5042848862406663 0.5737493584367568 0.4165487153635251,
+ -0.5042855673730287 0.24308295500765342 0.016547830833946137,
+ -0.5042848862408994 0.5737492452452304 0.5885487153633737,
+ -0.5042855673732618 0.24308284181612705 0.18854783083379462 ] }
+ coordIndex [
+ 0, 1, 8, -1,
+ 0, 3, 1, -1,
+ 0, 8, 3, -1,
+ 1, 2, 12, -1,
+ 1, 3, 2, -1,
+ 1, 10, 8, -1,
+ 1, 12, 10, -1,
+ 2, 3, 12, -1,
+ 3, 8, 14, -1,
+ 3, 14, 12, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 4, 7, 15, -1,
+ 4, 9, 11, -1,
+ 4, 11, 5, -1,
+ 4, 15, 9, -1,
+ 5, 11, 6, -1,
+ 6, 11, 13, -1,
+ 6, 13, 15, -1,
+ 6, 15, 7, -1,
+ 8, 9, 15, -1,
+ 8, 10, 11, -1,
+ 8, 11, 9, -1,
+ 8, 15, 14, -1,
+ 10, 12, 11, -1,
+ 11, 12, 13, -1,
+ 12, 14, 15, -1,
+ 12, 15, 13, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube4_sep12 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pin
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 1.180697575570837 0.9044116856547368 0.5885495998933049,
+ 1.1806975755710705 0.9044117988462632 0.4165495998934562,
+ 1.5357157948850202 0.904410585242893 0.4165495998934562,
+ 1.5357157948847873 0.9044104720513666 0.5885495998933049,
+ 1.1806949389278774 -0.3755880511037757 0.18854694630386348,
+ 1.1806949389281107 -0.37558793791224976 0.016546946304015004,
+ 1.5357131582420604 -0.37558915151562 0.016546946304015004,
+ 1.5357131582418275 -0.37558926470714593 0.18854694630386348,
+ 1.1806968944379324 0.5737450189895246 0.5885487153633737,
+ 1.1806962133055698 0.2430786155604212 0.18854783083379462,
+ 1.1806968944381657 0.5737451321810509 0.4165487153635251,
+ 1.1806962133058032 0.24307872875194758 0.016547830833946137,
+ 1.5357151137521157 0.5737439185776807 0.4165487153635251,
+ 1.5357144326197532 0.24307751514857734 0.016547830833946137,
+ 1.5357151137518823 0.5737438053861543 0.5885487153633737,
+ 1.5357144326195202 0.24307740195705096 0.18854783083379462 ] }
+ coordIndex [
+ 0, 1, 8, -1,
+ 0, 3, 1, -1,
+ 0, 8, 3, -1,
+ 1, 2, 12, -1,
+ 1, 3, 2, -1,
+ 1, 10, 8, -1,
+ 1, 12, 10, -1,
+ 2, 3, 12, -1,
+ 3, 8, 14, -1,
+ 3, 14, 12, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 4, 7, 15, -1,
+ 4, 9, 11, -1,
+ 4, 11, 5, -1,
+ 4, 15, 9, -1,
+ 5, 11, 6, -1,
+ 6, 11, 13, -1,
+ 6, 13, 15, -1,
+ 6, 15, 7, -1,
+ 8, 9, 15, -1,
+ 8, 10, 11, -1,
+ 8, 11, 9, -1,
+ 8, 15, 14, -1,
+ 10, 12, 11, -1,
+ 11, 12, 13, -1,
+ 12, 14, 15, -1,
+ 12, 15, 13, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube4_sep11 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material DEF body Material {
+ diffuseColor 0.44776119402985076 0.44776119402985076 0.44776119402985076
+ emissiveColor 0.0 0.0 0.0
+ specularColor 0.1417910447761194 0.1417910447761194 0.1417910447761194
+ ambientIntensity 0.41791044776119407
+ transparency 0.0
+ shininess 1.0
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 1.7152182518946473 4.648202041089771 0.21455433502265325,
+ -1.7212817480994713 4.648206473911521 0.21455433502265325,
+ 1.715218251893144 4.648201472705371 0.9151563190222725,
+ 2.0002170429163337 4.372600412283759 0.915153709418467,
+ -1.975787352051995 4.392370384480033 0.9151537094184671,
+ -1.7212817481009746 4.648205905527121 0.9151563190222725,
+ -1.9005928402305177 0.9877300684708781 0.9903511975572958,
+ 1.9250072516857544 0.987720514056661 0.9903511970000083,
+ 1.9250169548338514 4.3407105532877495 0.9903536678082394,
+ 1.6848051964769646 4.573001455891576 0.990356221445347,
+ -1.690018073116452 4.573005799088463 0.9903562216740227,
+ -1.9005873998329612 4.361336105799042 0.9903536694750094,
+ -1.9152865271521975 0.9730364659199149 0.9756575141597525,
+ -1.870992956009541 0.9125300933792071 0.9151510998145782,
+ -1.9757927946571687 1.0173303844892836 0.9151511749515024,
+ 1.897407043978173 0.9125206978536344 0.9151510998145782,
+ 2.0002073279192447 1.0153204122985005 0.9151511739199032,
+ 1.9408555979327713 0.9718721025896782 0.9745027864966964,
+ 1.7152182518955217 4.648202371555615 0.1579523510221698,
+ 1.6640182518963231 4.648202744883636 0.1067523510230423,
+ 1.7152182518963175 4.699402670482303 0.1067523510230423,
+ 2.000217042919113 4.372601490999284 0.15794974141909796,
+ -1.9757873520492162 4.392371463195559 0.15794974141909796,
+ -1.6700817480978067 4.648207028902958 0.1067523510230423,
+ -1.721281748098597 4.648206804377365 0.1579523510221698,
+ -1.721281748097801 4.699407103304052 0.1067523510230423,
+ -1.97579279465439 1.017331463204725 0.15794720695216236,
+ -1.8709929560067624 0.9125311720945917 0.15794713181520903,
+ 2.000207327922024 1.0153214910139419 0.15794720592054828,
+ 1.897407043980952 0.912521776569019 0.15794713181520903,
+ 1.9490169829485158 4.350889392455781 0.10674971307897159,
+ 1.7730073864998548 1.0365294400006129 0.10674723322683204,
+ 1.7001994515741845 0.9637219084186877 0.10674719811808896,
+ -1.8497850979587613 0.9637311861239397 0.10674719827538891,
+ -1.9245927620025127 1.0385391731419686 0.10674723463826673,
+ -1.924587384580483 4.371241887419728 0.10674971421434783 ] }
+ coordIndex [
+ 0, 1, 5, -1,
+ 0, 2, 3, -1,
+ 0, 3, 21, -1,
+ 0, 5, 2, -1,
+ 0, 21, 18, -1,
+ 1, 4, 5, -1,
+ 1, 22, 4, -1,
+ 1, 24, 22, -1,
+ 2, 5, 9, -1,
+ 2, 9, 3, -1,
+ 3, 8, 16, -1,
+ 3, 9, 8, -1,
+ 3, 16, 28, -1,
+ 3, 28, 21, -1,
+ 4, 11, 5, -1,
+ 4, 14, 11, -1,
+ 4, 22, 14, -1,
+ 5, 10, 9, -1,
+ 5, 11, 10, -1,
+ 6, 7, 9, -1,
+ 6, 9, 11, -1,
+ 6, 11, 14, -1,
+ 6, 12, 13, -1,
+ 6, 13, 7, -1,
+ 6, 14, 12, -1,
+ 7, 8, 9, -1,
+ 7, 13, 15, -1,
+ 7, 15, 17, -1,
+ 7, 16, 8, -1,
+ 7, 17, 16, -1,
+ 9, 10, 11, -1,
+ 12, 14, 13, -1,
+ 13, 14, 27, -1,
+ 13, 27, 15, -1,
+ 14, 22, 26, -1,
+ 14, 26, 27, -1,
+ 15, 16, 17, -1,
+ 15, 27, 29, -1,
+ 15, 28, 16, -1,
+ 15, 29, 28, -1,
+ 18, 19, 20, -1,
+ 18, 21, 30, -1,
+ 18, 30, 19, -1,
+ 19, 30, 31, -1,
+ 19, 31, 35, -1,
+ 19, 35, 23, -1,
+ 21, 28, 30, -1,
+ 22, 23, 35, -1,
+ 22, 24, 23, -1,
+ 22, 34, 26, -1,
+ 22, 35, 34, -1,
+ 23, 24, 25, -1,
+ 26, 34, 27, -1,
+ 27, 32, 29, -1,
+ 27, 33, 32, -1,
+ 27, 34, 33, -1,
+ 28, 29, 32, -1,
+ 28, 31, 30, -1,
+ 28, 32, 31, -1,
+ 31, 32, 35, -1,
+ 32, 33, 35, -1,
+ 33, 34, 35, -1 ]
+ }
+ },
+ Shape {
+ appearance Appearance {
+ material USE pin
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 1.7152182518946473 4.648202041089771 0.21455433502265325,
+ -1.7212817480994713 4.648206473911521 0.21455433502265325,
+ -1.7212817480994713 5.103406473911578 0.21455433502265325,
+ 1.7152182518946473 5.103402041089829 0.21455433502265325,
+ 1.7152182518963175 5.103402670482479 0.1067523510230423,
+ -1.721281748097801 5.10340710330423 0.1067523510230423,
+ -1.6964817480990886 5.128206582666104 0.18975433502307587,
+ 1.6904182518950355 5.128202221920532 0.18975433502307587,
+ 1.6904182518959348 5.1282025617278375 0.1315523510226197,
+ -1.6964817480981893 5.128206922473412 0.1315523510226197,
+ 1.7152182518955217 4.648202371555615 0.1579523510221698,
+ 1.6640182518963231 4.648202744883636 0.1067523510230423,
+ 1.7152182518963175 4.699402670482303 0.1067523510230423,
+ -1.6700817480978067 4.648207028902958 0.1067523510230423,
+ -1.721281748098597 4.648206804377365 0.1579523510221698,
+ -1.721281748097801 4.699407103304052 0.1067523510230423 ] }
+ coordIndex [
+ 0, 2, 1, -1,
+ 0, 3, 2, -1,
+ 0, 10, 12, -1,
+ 0, 12, 3, -1,
+ 1, 2, 15, -1,
+ 1, 15, 14, -1,
+ 2, 3, 7, -1,
+ 2, 5, 15, -1,
+ 2, 6, 9, -1,
+ 2, 7, 6, -1,
+ 2, 9, 5, -1,
+ 3, 4, 7, -1,
+ 3, 12, 4, -1,
+ 4, 5, 9, -1,
+ 4, 8, 7, -1,
+ 4, 9, 8, -1,
+ 4, 11, 13, -1,
+ 4, 12, 11, -1,
+ 4, 13, 5, -1,
+ 5, 13, 15, -1,
+ 6, 7, 9, -1,
+ 7, 8, 9, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube4_sep10 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pin
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -1.5293024244219453 0.9044171255138134 0.5885495998933049,
+ -1.5293024244217122 0.9044172387053397 0.4165495998934562,
+ -1.174284205107762 0.9044160251019691 0.4165495998934562,
+ -1.174284205107995 0.9044159119104427 0.5885495998933049,
+ -1.529305061064905 -0.37558261124469916 0.18854694630386348,
+ -1.529305061064672 -0.37558249805317323 0.016546946304015004,
+ -1.1742868417507215 -0.3755837116565439 0.016546946304015004,
+ -1.1742868417509547 -0.37558382484806985 0.18854694630386348,
+ -1.52930310555485 0.5737504588486011 0.5885487153633737,
+ -1.5293037866872121 0.24308405541949774 0.18854783083379462,
+ -1.5293031055546167 0.5737505720401275 0.4165487153635251,
+ -1.5293037866869792 0.2430841686110241 0.016547830833946137,
+ -1.1742848862406663 0.5737493584367568 0.4165487153635251,
+ -1.174285567373029 0.24308295500765342 0.016547830833946137,
+ -1.1742848862408997 0.5737492452452304 0.5885487153633737,
+ -1.1742855673732622 0.24308284181612705 0.18854783083379462 ] }
+ coordIndex [
+ 0, 1, 8, -1,
+ 0, 3, 1, -1,
+ 0, 8, 3, -1,
+ 1, 2, 12, -1,
+ 1, 3, 2, -1,
+ 1, 10, 8, -1,
+ 1, 12, 10, -1,
+ 2, 3, 12, -1,
+ 3, 8, 14, -1,
+ 3, 14, 12, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 4, 7, 15, -1,
+ 4, 9, 11, -1,
+ 4, 11, 5, -1,
+ 4, 15, 9, -1,
+ 5, 11, 6, -1,
+ 6, 11, 13, -1,
+ 6, 13, 15, -1,
+ 6, 15, 7, -1,
+ 8, 9, 15, -1,
+ 8, 10, 11, -1,
+ 8, 11, 9, -1,
+ 8, 15, 14, -1,
+ 10, 12, 11, -1,
+ 11, 12, 13, -1,
+ 12, 14, 15, -1,
+ 12, 15, 13, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube4_sep26 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pin
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -0.17930242442557165 0.9044143923163264 0.5885495998933049,
+ -0.17930242442533853 0.9044145055078527 0.4165495998934562,
+ 0.17571579488861147 0.904413291904482 0.4165495998934562,
+ 0.17571579488837835 0.9044131787129557 0.5885495998933049,
+ -0.17930506106853134 -0.37558534444218616 0.18854694630386348,
+ -0.17930506106829822 -0.37558523125066023 0.016546946304015004,
+ 0.17571315824565187 -0.3755864448540309 0.016546946304015004,
+ 0.17571315824541867 -0.37558655804555685 0.18854694630386348,
+ -0.17930310555847634 0.5737477256511141 0.5885487153633737,
+ -0.1793037866908388 0.24308132222201073 0.18854783083379462,
+ -0.17930310555824314 0.5737478388426405 0.4165487153635251,
+ -0.17930378669060557 0.2430814354135371 0.016547830833946137,
+ 0.17571511375570686 0.5737466252392698 0.4165487153635251,
+ 0.17571443262334444 0.24308022181016642 0.016547830833946137,
+ 0.17571511375547366 0.5737465120477434 0.5885487153633737,
+ 0.17571443262311123 0.24308010861864005 0.18854783083379462 ] }
+ coordIndex [
+ 0, 1, 8, -1,
+ 0, 3, 1, -1,
+ 0, 8, 3, -1,
+ 1, 2, 12, -1,
+ 1, 3, 2, -1,
+ 1, 10, 8, -1,
+ 1, 12, 10, -1,
+ 2, 3, 12, -1,
+ 3, 8, 14, -1,
+ 3, 14, 12, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 4, 7, 15, -1,
+ 4, 9, 11, -1,
+ 4, 11, 5, -1,
+ 4, 15, 9, -1,
+ 5, 11, 6, -1,
+ 6, 11, 13, -1,
+ 6, 13, 15, -1,
+ 6, 15, 7, -1,
+ 8, 9, 15, -1,
+ 8, 10, 11, -1,
+ 8, 11, 9, -1,
+ 8, 15, 14, -1,
+ 10, 12, 11, -1,
+ 11, 12, 13, -1,
+ 12, 14, 15, -1,
+ 12, 15, 13, -1 ]
+ }
+ }
+ ]
+}
+
diff --git a/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wings b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wings
new file mode 100644
index 0000000..925f823
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wings
Binary files differ
diff --git a/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wrl b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wrl
new file mode 100644
index 0000000..70d7a0a
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/prj.3dshapes/push_butt_4pads.wrl
@@ -0,0 +1,883 @@
+#VRML V2.0 utf8
+#Exported from Wings 3D 2.0.1
+DEF cylinder7_copy10 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material DEF mold Material {
+ diffuseColor 0.3194453658536587 0.3194453658536587 0.35398
+ emissiveColor 7.622400000000001e-4 7.622400000000001e-4 0.001
+ specularColor 0.0 0.0 0.0
+ ambientIntensity 0.1806907491527868
+ transparency 0.0
+ shininess 0.43
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -0.5900000000000001 -0.8000000000000002 1.54952,
+ -0.60598529817263 -0.8803635207966689 1.54952,
+ -0.6515075759508252 -0.948492424049175 1.54952,
+ -0.7196364792033313 -0.9940147018273703 1.54952,
+ -0.8000000000000002 -1.01 1.54952,
+ -0.8803635207966689 -0.9940147018273703 1.54952,
+ -0.948492424049175 -0.948492424049175 1.54952,
+ -0.9940147018273703 -0.8803635207966689 1.54952,
+ -1.01 -0.8000000000000002 1.54952,
+ -0.9940147018273703 -0.7196364792033313 1.54952,
+ -0.948492424049175 -0.6515075759508252 1.54952,
+ -0.880363520796669 -0.60598529817263 1.54952,
+ -0.8000000000000002 -0.5900000000000001 1.54952,
+ -0.7196364792033311 -0.60598529817263 1.54952,
+ -0.6515075759508252 -0.651507575950825 1.54952,
+ -0.60598529817263 -0.7196364792033311 1.54952,
+ -0.5900000000000001 -0.8000000000000002 1.44952,
+ -0.60598529817263 -0.8803635207966689 1.44952,
+ -0.6515075759508252 -0.948492424049175 1.44952,
+ -0.7196364792033313 -0.9940147018273703 1.44952,
+ -0.8000000000000002 -1.01 1.44952,
+ -0.8803635207966689 -0.9940147018273703 1.44952,
+ -0.948492424049175 -0.948492424049175 1.44952,
+ -0.9940147018273703 -0.8803635207966689 1.44952,
+ -1.01 -0.8000000000000002 1.44952,
+ -0.9940147018273703 -0.7196364792033313 1.44952,
+ -0.948492424049175 -0.6515075759508252 1.44952,
+ -0.880363520796669 -0.60598529817263 1.44952,
+ -0.8000000000000002 -0.5900000000000001 1.44952,
+ -0.7196364792033311 -0.60598529817263 1.44952,
+ -0.6515075759508252 -0.651507575950825 1.44952,
+ -0.60598529817263 -0.7196364792033311 1.44952 ] }
+ coordIndex [
+ 0, 1, 16, -1,
+ 0, 8, 1, -1,
+ 0, 9, 8, -1,
+ 0, 15, 9, -1,
+ 0, 16, 15, -1,
+ 1, 2, 18, -1,
+ 1, 7, 2, -1,
+ 1, 8, 7, -1,
+ 1, 17, 16, -1,
+ 1, 18, 17, -1,
+ 2, 3, 18, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 3, 4, 20, -1,
+ 3, 5, 4, -1,
+ 3, 6, 5, -1,
+ 3, 19, 18, -1,
+ 3, 20, 19, -1,
+ 4, 5, 20, -1,
+ 5, 6, 22, -1,
+ 5, 21, 20, -1,
+ 5, 22, 21, -1,
+ 6, 7, 22, -1,
+ 7, 8, 24, -1,
+ 7, 23, 22, -1,
+ 7, 24, 23, -1,
+ 8, 9, 24, -1,
+ 9, 10, 26, -1,
+ 9, 15, 10, -1,
+ 9, 25, 24, -1,
+ 9, 26, 25, -1,
+ 10, 11, 26, -1,
+ 10, 14, 11, -1,
+ 10, 15, 14, -1,
+ 11, 12, 28, -1,
+ 11, 13, 12, -1,
+ 11, 14, 13, -1,
+ 11, 27, 26, -1,
+ 11, 28, 27, -1,
+ 12, 13, 28, -1,
+ 13, 14, 30, -1,
+ 13, 29, 28, -1,
+ 13, 30, 29, -1,
+ 14, 15, 30, -1,
+ 15, 16, 31, -1,
+ 15, 31, 30, -1,
+ 16, 17, 23, -1,
+ 16, 23, 24, -1,
+ 16, 24, 31, -1,
+ 17, 18, 22, -1,
+ 17, 22, 23, -1,
+ 18, 19, 21, -1,
+ 18, 21, 22, -1,
+ 19, 20, 21, -1,
+ 24, 25, 31, -1,
+ 25, 26, 30, -1,
+ 25, 30, 31, -1,
+ 26, 27, 29, -1,
+ 26, 29, 30, -1,
+ 27, 28, 29, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cylinder7_copy9 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE mold
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 1.01 -0.8000000000000002 1.54952,
+ 0.9940147018273701 -0.8803635207966689 1.54952,
+ 0.9484924240491749 -0.948492424049175 1.54952,
+ 0.8803635207966688 -0.9940147018273703 1.54952,
+ 0.7999999999999999 -1.01 1.54952,
+ 0.7196364792033312 -0.9940147018273703 1.54952,
+ 0.6515075759508251 -0.948492424049175 1.54952,
+ 0.6059852981726298 -0.8803635207966689 1.54952,
+ 0.5900000000000001 -0.8000000000000002 1.54952,
+ 0.6059852981726298 -0.7196364792033313 1.54952,
+ 0.6515075759508251 -0.6515075759508252 1.54952,
+ 0.7196364792033311 -0.60598529817263 1.54952,
+ 0.7999999999999999 -0.5900000000000001 1.54952,
+ 0.880363520796669 -0.60598529817263 1.54952,
+ 0.9484924240491749 -0.651507575950825 1.54952,
+ 0.9940147018273701 -0.7196364792033311 1.54952,
+ 1.01 -0.8000000000000002 1.44952,
+ 0.9940147018273701 -0.8803635207966689 1.44952,
+ 0.9484924240491749 -0.948492424049175 1.44952,
+ 0.8803635207966688 -0.9940147018273703 1.44952,
+ 0.7999999999999999 -1.01 1.44952,
+ 0.7196364792033312 -0.9940147018273703 1.44952,
+ 0.6515075759508251 -0.948492424049175 1.44952,
+ 0.6059852981726298 -0.8803635207966689 1.44952,
+ 0.5900000000000001 -0.8000000000000002 1.44952,
+ 0.6059852981726298 -0.7196364792033313 1.44952,
+ 0.6515075759508251 -0.6515075759508252 1.44952,
+ 0.7196364792033311 -0.60598529817263 1.44952,
+ 0.7999999999999999 -0.5900000000000001 1.44952,
+ 0.880363520796669 -0.60598529817263 1.44952,
+ 0.9484924240491749 -0.651507575950825 1.44952,
+ 0.9940147018273701 -0.7196364792033311 1.44952 ] }
+ coordIndex [
+ 0, 1, 16, -1,
+ 0, 8, 1, -1,
+ 0, 9, 8, -1,
+ 0, 15, 9, -1,
+ 0, 16, 15, -1,
+ 1, 2, 18, -1,
+ 1, 7, 2, -1,
+ 1, 8, 7, -1,
+ 1, 17, 16, -1,
+ 1, 18, 17, -1,
+ 2, 3, 18, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 3, 4, 20, -1,
+ 3, 5, 4, -1,
+ 3, 6, 5, -1,
+ 3, 19, 18, -1,
+ 3, 20, 19, -1,
+ 4, 5, 20, -1,
+ 5, 6, 22, -1,
+ 5, 21, 20, -1,
+ 5, 22, 21, -1,
+ 6, 7, 22, -1,
+ 7, 8, 24, -1,
+ 7, 23, 22, -1,
+ 7, 24, 23, -1,
+ 8, 9, 24, -1,
+ 9, 10, 26, -1,
+ 9, 15, 10, -1,
+ 9, 25, 24, -1,
+ 9, 26, 25, -1,
+ 10, 11, 26, -1,
+ 10, 14, 11, -1,
+ 10, 15, 14, -1,
+ 11, 12, 28, -1,
+ 11, 13, 12, -1,
+ 11, 14, 13, -1,
+ 11, 27, 26, -1,
+ 11, 28, 27, -1,
+ 12, 13, 28, -1,
+ 13, 14, 30, -1,
+ 13, 29, 28, -1,
+ 13, 30, 29, -1,
+ 14, 15, 30, -1,
+ 15, 16, 31, -1,
+ 15, 31, 30, -1,
+ 16, 17, 23, -1,
+ 16, 23, 24, -1,
+ 16, 24, 31, -1,
+ 17, 18, 22, -1,
+ 17, 22, 23, -1,
+ 18, 19, 21, -1,
+ 18, 21, 22, -1,
+ 19, 20, 21, -1,
+ 24, 25, 31, -1,
+ 25, 26, 30, -1,
+ 25, 30, 31, -1,
+ 26, 27, 29, -1,
+ 26, 29, 30, -1,
+ 27, 28, 29, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cylinder7_copy8 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE mold
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -0.5900000000000001 0.7999999999999999 1.54952,
+ -0.60598529817263 0.7196364792033312 1.54952,
+ -0.6515075759508252 0.6515075759508251 1.54952,
+ -0.7196364792033313 0.6059852981726298 1.54952,
+ -0.8000000000000002 0.5900000000000001 1.54952,
+ -0.8803635207966689 0.6059852981726298 1.54952,
+ -0.948492424049175 0.6515075759508251 1.54952,
+ -0.9940147018273703 0.7196364792033312 1.54952,
+ -1.01 0.7999999999999999 1.54952,
+ -0.9940147018273703 0.8803635207966688 1.54952,
+ -0.948492424049175 0.9484924240491749 1.54952,
+ -0.880363520796669 0.9940147018273701 1.54952,
+ -0.8000000000000002 1.01 1.54952,
+ -0.7196364792033311 0.9940147018273701 1.54952,
+ -0.6515075759508252 0.9484924240491751 1.54952,
+ -0.60598529817263 0.880363520796669 1.54952,
+ -0.5900000000000001 0.7999999999999999 1.44952,
+ -0.60598529817263 0.7196364792033312 1.44952,
+ -0.6515075759508252 0.6515075759508251 1.44952,
+ -0.7196364792033313 0.6059852981726298 1.44952,
+ -0.8000000000000002 0.5900000000000001 1.44952,
+ -0.8803635207966689 0.6059852981726298 1.44952,
+ -0.948492424049175 0.6515075759508251 1.44952,
+ -0.9940147018273703 0.7196364792033312 1.44952,
+ -1.01 0.7999999999999999 1.44952,
+ -0.9940147018273703 0.8803635207966688 1.44952,
+ -0.948492424049175 0.9484924240491749 1.44952,
+ -0.880363520796669 0.9940147018273701 1.44952,
+ -0.8000000000000002 1.01 1.44952,
+ -0.7196364792033311 0.9940147018273701 1.44952,
+ -0.6515075759508252 0.9484924240491751 1.44952,
+ -0.60598529817263 0.880363520796669 1.44952 ] }
+ coordIndex [
+ 0, 1, 16, -1,
+ 0, 8, 1, -1,
+ 0, 9, 8, -1,
+ 0, 15, 9, -1,
+ 0, 16, 15, -1,
+ 1, 2, 18, -1,
+ 1, 7, 2, -1,
+ 1, 8, 7, -1,
+ 1, 17, 16, -1,
+ 1, 18, 17, -1,
+ 2, 3, 18, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 3, 4, 20, -1,
+ 3, 5, 4, -1,
+ 3, 6, 5, -1,
+ 3, 19, 18, -1,
+ 3, 20, 19, -1,
+ 4, 5, 20, -1,
+ 5, 6, 22, -1,
+ 5, 21, 20, -1,
+ 5, 22, 21, -1,
+ 6, 7, 22, -1,
+ 7, 8, 24, -1,
+ 7, 23, 22, -1,
+ 7, 24, 23, -1,
+ 8, 9, 24, -1,
+ 9, 10, 26, -1,
+ 9, 15, 10, -1,
+ 9, 25, 24, -1,
+ 9, 26, 25, -1,
+ 10, 11, 26, -1,
+ 10, 14, 11, -1,
+ 10, 15, 14, -1,
+ 11, 12, 28, -1,
+ 11, 13, 12, -1,
+ 11, 14, 13, -1,
+ 11, 27, 26, -1,
+ 11, 28, 27, -1,
+ 12, 13, 28, -1,
+ 13, 14, 30, -1,
+ 13, 29, 28, -1,
+ 13, 30, 29, -1,
+ 14, 15, 30, -1,
+ 15, 16, 31, -1,
+ 15, 31, 30, -1,
+ 16, 17, 23, -1,
+ 16, 23, 24, -1,
+ 16, 24, 31, -1,
+ 17, 18, 22, -1,
+ 17, 22, 23, -1,
+ 18, 19, 21, -1,
+ 18, 21, 22, -1,
+ 19, 20, 21, -1,
+ 24, 25, 31, -1,
+ 25, 26, 30, -1,
+ 25, 30, 31, -1,
+ 26, 27, 29, -1,
+ 26, 29, 30, -1,
+ 27, 28, 29, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cylinder7 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE mold
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 1.01 0.7999999999999999 1.54952,
+ 0.9940147018273701 0.7196364792033312 1.54952,
+ 0.9484924240491749 0.6515075759508251 1.54952,
+ 0.8803635207966688 0.6059852981726298 1.54952,
+ 0.7999999999999999 0.5900000000000001 1.54952,
+ 0.7196364792033312 0.6059852981726298 1.54952,
+ 0.6515075759508251 0.6515075759508251 1.54952,
+ 0.6059852981726298 0.7196364792033312 1.54952,
+ 0.5900000000000001 0.7999999999999999 1.54952,
+ 0.6059852981726298 0.8803635207966688 1.54952,
+ 0.6515075759508251 0.9484924240491749 1.54952,
+ 0.7196364792033311 0.9940147018273701 1.54952,
+ 0.7999999999999999 1.01 1.54952,
+ 0.880363520796669 0.9940147018273701 1.54952,
+ 0.9484924240491749 0.9484924240491751 1.54952,
+ 0.9940147018273701 0.880363520796669 1.54952,
+ 1.01 0.7999999999999999 1.44952,
+ 0.9940147018273701 0.7196364792033312 1.44952,
+ 0.9484924240491749 0.6515075759508251 1.44952,
+ 0.8803635207966688 0.6059852981726298 1.44952,
+ 0.7999999999999999 0.5900000000000001 1.44952,
+ 0.7196364792033312 0.6059852981726298 1.44952,
+ 0.6515075759508251 0.6515075759508251 1.44952,
+ 0.6059852981726298 0.7196364792033312 1.44952,
+ 0.5900000000000001 0.7999999999999999 1.44952,
+ 0.6059852981726298 0.8803635207966688 1.44952,
+ 0.6515075759508251 0.9484924240491749 1.44952,
+ 0.7196364792033311 0.9940147018273701 1.44952,
+ 0.7999999999999999 1.01 1.44952,
+ 0.880363520796669 0.9940147018273701 1.44952,
+ 0.9484924240491749 0.9484924240491751 1.44952,
+ 0.9940147018273701 0.880363520796669 1.44952 ] }
+ coordIndex [
+ 0, 1, 16, -1,
+ 0, 8, 1, -1,
+ 0, 9, 8, -1,
+ 0, 15, 9, -1,
+ 0, 16, 15, -1,
+ 1, 2, 18, -1,
+ 1, 7, 2, -1,
+ 1, 8, 7, -1,
+ 1, 17, 16, -1,
+ 1, 18, 17, -1,
+ 2, 3, 18, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 3, 4, 20, -1,
+ 3, 5, 4, -1,
+ 3, 6, 5, -1,
+ 3, 19, 18, -1,
+ 3, 20, 19, -1,
+ 4, 5, 20, -1,
+ 5, 6, 22, -1,
+ 5, 21, 20, -1,
+ 5, 22, 21, -1,
+ 6, 7, 22, -1,
+ 7, 8, 24, -1,
+ 7, 23, 22, -1,
+ 7, 24, 23, -1,
+ 8, 9, 24, -1,
+ 9, 10, 26, -1,
+ 9, 15, 10, -1,
+ 9, 25, 24, -1,
+ 9, 26, 25, -1,
+ 10, 11, 26, -1,
+ 10, 14, 11, -1,
+ 10, 15, 14, -1,
+ 11, 12, 28, -1,
+ 11, 13, 12, -1,
+ 11, 14, 13, -1,
+ 11, 27, 26, -1,
+ 11, 28, 27, -1,
+ 12, 13, 28, -1,
+ 13, 14, 30, -1,
+ 13, 29, 28, -1,
+ 13, 30, 29, -1,
+ 14, 15, 30, -1,
+ 15, 16, 31, -1,
+ 15, 31, 30, -1,
+ 16, 17, 23, -1,
+ 16, 23, 24, -1,
+ 16, 24, 31, -1,
+ 17, 18, 22, -1,
+ 17, 22, 23, -1,
+ 18, 19, 21, -1,
+ 18, 21, 22, -1,
+ 19, 20, 21, -1,
+ 24, 25, 31, -1,
+ 25, 26, 30, -1,
+ 25, 30, 31, -1,
+ 26, 27, 29, -1,
+ 26, 29, 30, -1,
+ 27, 28, 29, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube7_copy6 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material DEF pins Material {
+ diffuseColor 0.6044776119402985 0.6044776119402985 0.6044776119402985
+ emissiveColor 0.0 0.0 0.0
+ specularColor 0.22388059701492538 0.22388059701492538 0.22388059701492538
+ ambientIntensity 0.5447761194029851
+ transparency 0.0
+ shininess 1.0
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 1.0199999999999996 -1.2199995714285716 0.22951899999999997,
+ 1.0199999999999996 -1.3399995714285717 0.22951899999999997,
+ 0.7499999999999996 -1.3399995714285717 0.22951899999999997,
+ 0.7499999999999996 -1.2199995714285716 0.22951899999999997,
+ 1.0199999999999996 -1.3399995714285717 0.34951899999999997,
+ 1.0199999999999996 -1.2199995714285716 0.34951899999999997,
+ 0.7499999999999996 -1.2199995714285716 0.34951899999999997,
+ 0.7499999999999996 -1.3399995714285717 0.34951899999999997,
+ 0.7499999999999998 -1.0199995714285717 0.34951899999999997,
+ 1.0199999999999996 -1.0199995714285717 0.34951899999999997,
+ 1.0199999999999996 -1.0199995714285717 0.22951899999999997,
+ 0.7499999999999998 -1.0199995714285717 0.22951899999999997,
+ 1.0199999999999996 -1.2199995714285716 -0.8258406666666664,
+ 1.0199999999999996 -1.3399995714285717 -0.8258406666666664,
+ 0.7499999999999996 -1.3399995714285717 -0.8258406666666664,
+ 0.7499999999999996 -1.2199995714285716 -0.8258406666666664 ] }
+ coordIndex [
+ 0, 1, 13, -1,
+ 0, 3, 11, -1,
+ 0, 4, 1, -1,
+ 0, 5, 4, -1,
+ 0, 9, 5, -1,
+ 0, 10, 9, -1,
+ 0, 11, 10, -1,
+ 0, 12, 15, -1,
+ 0, 13, 12, -1,
+ 0, 15, 3, -1,
+ 1, 2, 13, -1,
+ 1, 4, 2, -1,
+ 2, 3, 15, -1,
+ 2, 4, 7, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 2, 14, 13, -1,
+ 2, 15, 14, -1,
+ 3, 6, 11, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 5, 9, 6, -1,
+ 6, 8, 11, -1,
+ 6, 9, 8, -1,
+ 8, 9, 11, -1,
+ 9, 10, 11, -1,
+ 12, 13, 15, -1,
+ 13, 14, 15, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube7_copy5 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pins
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -0.75 -1.2199995714285714 0.22951899999999997,
+ -0.75 -1.3399995714285715 0.22951899999999997,
+ -1.02 -1.3399995714285715 0.22951899999999997,
+ -1.02 -1.2199995714285714 0.22951899999999997,
+ -0.75 -1.3399995714285715 0.34951899999999997,
+ -0.75 -1.2199995714285714 0.34951899999999997,
+ -1.02 -1.2199995714285714 0.34951899999999997,
+ -1.02 -1.3399995714285715 0.34951899999999997,
+ -1.02 -1.0199995714285714 0.34951899999999997,
+ -0.7499999999999998 -1.0199995714285714 0.34951899999999997,
+ -0.7499999999999998 -1.0199995714285714 0.22951899999999997,
+ -1.02 -1.0199995714285714 0.22951899999999997,
+ -0.75 -1.2199995714285714 -0.8258406666666664,
+ -0.75 -1.3399995714285715 -0.8258406666666664,
+ -1.02 -1.3399995714285715 -0.8258406666666664,
+ -1.02 -1.2199995714285714 -0.8258406666666664 ] }
+ coordIndex [
+ 0, 1, 13, -1,
+ 0, 3, 11, -1,
+ 0, 4, 1, -1,
+ 0, 5, 4, -1,
+ 0, 9, 5, -1,
+ 0, 10, 9, -1,
+ 0, 11, 10, -1,
+ 0, 12, 15, -1,
+ 0, 13, 12, -1,
+ 0, 15, 3, -1,
+ 1, 2, 13, -1,
+ 1, 4, 2, -1,
+ 2, 3, 15, -1,
+ 2, 4, 7, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 2, 14, 13, -1,
+ 2, 15, 14, -1,
+ 3, 6, 11, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 5, 9, 6, -1,
+ 6, 8, 11, -1,
+ 6, 9, 8, -1,
+ 8, 9, 11, -1,
+ 9, 10, 11, -1,
+ 12, 13, 15, -1,
+ 13, 14, 15, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube7_copy8 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pins
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 0.75 1.22 0.22951899999999997,
+ 0.75 1.34 0.22951899999999997,
+ 1.02 1.34 0.22951899999999997,
+ 1.02 1.22 0.22951899999999997,
+ 0.75 1.34 0.34951899999999997,
+ 0.75 1.22 0.34951899999999997,
+ 1.02 1.22 0.34951899999999997,
+ 1.02 1.34 0.34951899999999997,
+ 1.02 1.02 0.34951899999999997,
+ 0.75 1.02 0.34951899999999997,
+ 0.75 1.02 0.22951899999999997,
+ 1.02 1.02 0.22951899999999997,
+ 0.75 1.22 -0.8258406666666664,
+ 0.75 1.34 -0.8258406666666664,
+ 1.02 1.34 -0.8258406666666664,
+ 1.02 1.22 -0.8258406666666664 ] }
+ coordIndex [
+ 0, 1, 13, -1,
+ 0, 3, 11, -1,
+ 0, 4, 1, -1,
+ 0, 5, 4, -1,
+ 0, 9, 5, -1,
+ 0, 10, 9, -1,
+ 0, 11, 10, -1,
+ 0, 12, 15, -1,
+ 0, 13, 12, -1,
+ 0, 15, 3, -1,
+ 1, 2, 13, -1,
+ 1, 4, 2, -1,
+ 2, 3, 15, -1,
+ 2, 4, 7, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 2, 14, 13, -1,
+ 2, 15, 14, -1,
+ 3, 6, 11, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 5, 9, 6, -1,
+ 6, 8, 11, -1,
+ 6, 9, 8, -1,
+ 8, 9, 11, -1,
+ 9, 10, 11, -1,
+ 12, 13, 15, -1,
+ 13, 14, 15, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube7 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE pins
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -1.02 1.22 0.22951899999999997,
+ -1.02 1.34 0.22951899999999997,
+ -0.75 1.34 0.22951899999999997,
+ -0.75 1.22 0.22951899999999997,
+ -1.02 1.34 0.34951899999999997,
+ -1.02 1.22 0.34951899999999997,
+ -0.75 1.22 0.34951899999999997,
+ -0.75 1.34 0.34951899999999997,
+ -0.75 1.02 0.34951899999999997,
+ -1.02 1.02 0.34951899999999997,
+ -1.02 1.02 0.22951899999999997,
+ -0.75 1.02 0.22951899999999997,
+ -1.02 1.22 -0.8258406666666664,
+ -1.02 1.34 -0.8258406666666664,
+ -0.75 1.34 -0.8258406666666664,
+ -0.75 1.22 -0.8258406666666664 ] }
+ coordIndex [
+ 0, 1, 13, -1,
+ 0, 3, 11, -1,
+ 0, 4, 1, -1,
+ 0, 5, 4, -1,
+ 0, 9, 5, -1,
+ 0, 10, 9, -1,
+ 0, 11, 10, -1,
+ 0, 12, 15, -1,
+ 0, 13, 12, -1,
+ 0, 15, 3, -1,
+ 1, 2, 13, -1,
+ 1, 4, 2, -1,
+ 2, 3, 15, -1,
+ 2, 4, 7, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 2, 14, 13, -1,
+ 2, 15, 14, -1,
+ 3, 6, 11, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1,
+ 5, 9, 6, -1,
+ 6, 8, 11, -1,
+ 6, 9, 8, -1,
+ 8, 9, 11, -1,
+ 9, 10, 11, -1,
+ 12, 13, 15, -1,
+ 13, 14, 15, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cylinder7 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material DEF push2 Material {
+ diffuseColor 0.7669 0.24881644444444442 0.23518266666666665
+ emissiveColor 0.001 7.142857142857143e-5 0.0
+ specularColor 0.23134328358208955 0.21527101335428123 0.21437810945273633
+ ambientIntensity 0.545343458147857
+ transparency 0.0
+ shininess 1.0
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 0.6649999999999998 4.9447115306922195e-17 2.0495203039999996,
+ 0.6143798891200056 -0.2544844825227846 2.0495203039999996,
+ 0.4702260094890541 -0.47022600948905396 2.0495203039999996,
+ 0.25448448252278466 -0.6143798891200056 2.0495203039999996,
+ 2.5088302746043006e-17 -0.6649999999999998 2.0495203039999996,
+ -0.25448448252278466 -0.6143798891200056 2.0495203039999996,
+ -0.470226009489054 -0.470226009489054 2.0495203039999996,
+ -0.6143798891200056 -0.25448448252278466 2.0495203039999996,
+ -0.665 -3.1989207222265875e-17 2.0495203039999996,
+ -0.6143798891200056 0.25448448252278466 2.0495203039999996,
+ -0.4702260094890542 0.47022600948905413 2.0495203039999996,
+ -0.25448448252278505 0.6143798891200056 2.0495203039999996,
+ -1.3778434231233315e-16 0.6649999999999999 2.0495203039999996,
+ 0.2544844825227848 0.6143798891200056 2.0495203039999996,
+ 0.47022600948905396 0.4702260094890542 2.0495203039999996,
+ 0.6143798891200056 0.2544844825227851 2.0495203039999996,
+ 0.7 -3.74835796082551e-17 1.4495203040000002,
+ 0.6467156727579007 -0.26787840265556284 1.4495203040000002,
+ 0.4949747468305833 -0.4949747468305833 1.4495203040000002,
+ 0.26787840265556284 -0.6467156727579008 1.4495203040000002,
+ 2.9330379271164106e-17 -0.7 1.4495203040000002,
+ -0.2678784026555628 -0.6467156727579008 1.4495203040000002,
+ -0.4949747468305832 -0.49497474683058335 1.4495203040000002,
+ -0.6467156727579007 -0.26787840265556295 1.4495203040000002,
+ -0.7 -1.232060243758215e-16 1.4495203040000002,
+ -0.6467156727579008 0.26787840265556273 1.4495203040000002,
+ -0.49497474683058335 0.4949747468305831 1.4495203040000002,
+ -0.26787840265556323 0.6467156727579004 1.4495203040000002,
+ -1.421145102639687e-16 0.6999999999999998 1.4495203040000002,
+ 0.267878402655563 0.6467156727579005 1.4495203040000002,
+ 0.4949747468305831 0.4949747468305833 1.4495203040000002,
+ 0.6467156727579005 0.26787840265556323 1.4495203040000002 ] }
+ coordIndex [
+ 0, 1, 16, -1,
+ 0, 8, 1, -1,
+ 0, 9, 8, -1,
+ 0, 15, 9, -1,
+ 0, 16, 15, -1,
+ 1, 2, 18, -1,
+ 1, 7, 2, -1,
+ 1, 8, 7, -1,
+ 1, 17, 16, -1,
+ 1, 18, 17, -1,
+ 2, 3, 18, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 3, 4, 20, -1,
+ 3, 5, 4, -1,
+ 3, 6, 5, -1,
+ 3, 19, 18, -1,
+ 3, 20, 19, -1,
+ 4, 5, 20, -1,
+ 5, 6, 22, -1,
+ 5, 21, 20, -1,
+ 5, 22, 21, -1,
+ 6, 7, 22, -1,
+ 7, 8, 24, -1,
+ 7, 23, 22, -1,
+ 7, 24, 23, -1,
+ 8, 9, 24, -1,
+ 9, 10, 26, -1,
+ 9, 15, 10, -1,
+ 9, 25, 24, -1,
+ 9, 26, 25, -1,
+ 10, 11, 26, -1,
+ 10, 14, 11, -1,
+ 10, 15, 14, -1,
+ 11, 12, 28, -1,
+ 11, 13, 12, -1,
+ 11, 14, 13, -1,
+ 11, 27, 26, -1,
+ 11, 28, 27, -1,
+ 12, 13, 28, -1,
+ 13, 14, 30, -1,
+ 13, 29, 28, -1,
+ 13, 30, 29, -1,
+ 14, 15, 30, -1,
+ 15, 16, 31, -1,
+ 15, 31, 30, -1 ]
+ }
+ },
+ Shape {
+ appearance Appearance {
+ material DEF default Material {
+ diffuseColor 0.7898538076923077 0.8133333333333334 0.6940444444444445
+ emissiveColor 0.0 0.0 0.0
+ specularColor 0.0 0.0 0.0
+ ambientIntensity 0.765743861823362
+ transparency 0.0
+ shininess 0.0
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ 0.7 -3.74835796082551e-17 1.4495203040000002,
+ 0.6467156727579007 -0.26787840265556284 1.4495203040000002,
+ 0.4949747468305833 -0.4949747468305833 1.4495203040000002,
+ 0.26787840265556284 -0.6467156727579008 1.4495203040000002,
+ 2.9330379271164106e-17 -0.7 1.4495203040000002,
+ -0.2678784026555628 -0.6467156727579008 1.4495203040000002,
+ -0.4949747468305832 -0.49497474683058335 1.4495203040000002,
+ -0.6467156727579007 -0.26787840265556295 1.4495203040000002,
+ -0.7 -1.232060243758215e-16 1.4495203040000002,
+ -0.6467156727579008 0.26787840265556273 1.4495203040000002,
+ -0.49497474683058335 0.4949747468305831 1.4495203040000002,
+ -0.26787840265556323 0.6467156727579004 1.4495203040000002,
+ -1.421145102639687e-16 0.6999999999999998 1.4495203040000002,
+ 0.267878402655563 0.6467156727579005 1.4495203040000002,
+ 0.4949747468305831 0.4949747468305833 1.4495203040000002,
+ 0.6467156727579005 0.26787840265556323 1.4495203040000002 ] }
+ coordIndex [
+ 0, 1, 7, -1,
+ 0, 7, 8, -1,
+ 0, 8, 15, -1,
+ 1, 2, 6, -1,
+ 1, 6, 7, -1,
+ 2, 3, 5, -1,
+ 2, 5, 6, -1,
+ 3, 4, 5, -1,
+ 8, 9, 15, -1,
+ 9, 10, 14, -1,
+ 9, 14, 15, -1,
+ 10, 11, 13, -1,
+ 10, 13, 14, -1,
+ 11, 12, 13, -1 ]
+ }
+ }
+ ]
+}
+
+DEF cube6 Transform {
+ children [
+ Shape {
+ appearance Appearance {
+ material USE mold
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -1.18 -1.18 1.34952,
+ -1.18 1.18 1.34952,
+ 1.18 1.18 1.34952,
+ 1.18 -1.18 1.34952,
+ -1.18 -1.18 0.029519999999999987,
+ -1.18 1.18 0.029519999999999987,
+ 1.18 1.18 0.029519999999999987,
+ 1.18 -1.18 0.029519999999999987 ] }
+ coordIndex [
+ 0, 1, 5, -1,
+ 0, 4, 7, -1,
+ 0, 5, 4, -1,
+ 0, 7, 3, -1,
+ 1, 2, 5, -1,
+ 2, 3, 7, -1,
+ 2, 6, 5, -1,
+ 2, 7, 6, -1,
+ 4, 5, 7, -1,
+ 5, 6, 7, -1 ]
+ }
+ },
+ Shape {
+ appearance Appearance {
+ material DEF metal Material {
+ diffuseColor 0.64702 0.64702 0.64702
+ emissiveColor 0.001 0.001 0.001
+ specularColor 0.12686567164179105 0.12686567164179105 0.12686567164179105
+ ambientIntensity 0.4626865671641791
+ transparency 0.0
+ shininess 1.0
+ }
+ }
+ geometry IndexedFaceSet {
+ coord Coordinate { point [
+ -1.18 -1.18 1.34952,
+ -1.18 1.18 1.34952,
+ 1.18 1.18 1.34952,
+ 1.18 -1.18 1.34952,
+ -1.18 1.18 1.4495200000000001,
+ -1.18 -1.18 1.4495200000000001,
+ 1.18 -1.18 1.4495200000000001,
+ 1.18 1.18 1.4495200000000001 ] }
+ coordIndex [
+ 0, 3, 6, -1,
+ 0, 4, 1, -1,
+ 0, 5, 4, -1,
+ 0, 6, 5, -1,
+ 1, 4, 2, -1,
+ 2, 4, 7, -1,
+ 2, 6, 3, -1,
+ 2, 7, 6, -1,
+ 4, 5, 6, -1,
+ 4, 6, 7, -1 ]
+ }
+ }
+ ]
+}
+
diff --git a/demos/kit-dev-coldfire-xilinx_5213/xilinx.sch b/demos/kit-dev-coldfire-xilinx_5213/xilinx.sch
new file mode 100644
index 0000000..b425a82
--- /dev/null
+++ b/demos/kit-dev-coldfire-xilinx_5213/xilinx.sch
@@ -0,0 +1,1054 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:motorola
+LIBS:kit-dev-coldfire-xilinx_5213-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 3 3
+Title "Dev kit coldfire 5213"
+Date "Sun 22 Mar 2015"
+Rev "0"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+NoConn ~ 3600 5700
+NoConn ~ 3600 2400
+NoConn ~ 3600 1600
+NoConn ~ 3600 1500
+NoConn ~ 3600 1400
+NoConn ~ 3600 3600
+NoConn ~ 3600 3500
+NoConn ~ 3600 3400
+NoConn ~ 3600 3300
+NoConn ~ 3600 3200
+NoConn ~ 3600 2400
+NoConn ~ 3600 4900
+NoConn ~ 3600 4800
+NoConn ~ 5500 6700
+NoConn ~ 5500 5900
+NoConn ~ 5500 5100
+NoConn ~ 5500 2900
+Wire Wire Line
+ 5500 2700 6350 2700
+Connection ~ 3050 900
+Wire Wire Line
+ 10200 3900 9600 3900
+Connection ~ 3550 4000
+Wire Wire Line
+ 3600 4000 3550 4000
+Wire Wire Line
+ 10700 3900 10850 3900
+Wire Wire Line
+ 3050 900 3050 650
+Wire Wire Line
+ 3600 800 2700 800
+Wire Wire Line
+ 5500 2200 6350 2200
+Wire Wire Line
+ 6350 2400 5500 2400
+Wire Wire Line
+ 6350 4000 5500 4000
+Wire Wire Line
+ 6350 3800 5500 3800
+Wire Wire Line
+ 6350 3600 5500 3600
+Wire Wire Line
+ 6350 3400 5500 3400
+Wire Wire Line
+ 6350 3500 5500 3500
+Wire Wire Line
+ 6350 3700 5500 3700
+Wire Wire Line
+ 6350 3900 5500 3900
+Wire Wire Line
+ 6350 2300 5500 2300
+Wire Wire Line
+ 6200 1300 5500 1300
+Wire Wire Line
+ 1300 2200 2150 2200
+Wire Wire Line
+ 3600 1000 2700 1000
+Wire Wire Line
+ 5500 4700 6050 4700
+Wire Wire Line
+ 5500 5700 6050 5700
+Wire Wire Line
+ 5500 6100 6050 6100
+Wire Wire Line
+ 5500 6000 6050 6000
+Wire Wire Line
+ 5500 7100 6050 7100
+Wire Wire Line
+ 2150 3100 1300 3100
+Wire Wire Line
+ 2150 2900 1300 2900
+Wire Wire Line
+ 2150 2700 1300 2700
+Wire Wire Line
+ 2150 2500 1300 2500
+Wire Wire Line
+ 2150 2300 1300 2300
+Wire Wire Line
+ 7000 1300 7600 1300
+Wire Wire Line
+ 3600 3800 3400 3800
+Wire Wire Line
+ 10600 6350 10600 6400
+Connection ~ 10000 6400
+Wire Wire Line
+ 10000 6400 10000 6350
+Connection ~ 9400 6400
+Wire Wire Line
+ 9400 6400 9400 6350
+Connection ~ 8800 6400
+Wire Wire Line
+ 8800 6400 8800 6350
+Wire Wire Line
+ 10600 6400 10300 6400
+Wire Wire Line
+ 10300 6400 10000 6400
+Wire Wire Line
+ 10000 6400 9700 6400
+Wire Wire Line
+ 9700 6400 9400 6400
+Wire Wire Line
+ 9400 6400 9100 6400
+Wire Wire Line
+ 9100 6400 8800 6400
+Wire Wire Line
+ 8800 6400 8500 6400
+Wire Wire Line
+ 8500 6400 8200 6400
+Wire Wire Line
+ 8200 6400 7900 6400
+Wire Wire Line
+ 7900 6400 7600 6400
+Wire Wire Line
+ 7600 5900 7900 5900
+Wire Wire Line
+ 7900 5900 8200 5900
+Wire Wire Line
+ 8200 5900 8500 5900
+Wire Wire Line
+ 8500 5900 8800 5900
+Wire Wire Line
+ 8800 5900 9100 5900
+Wire Wire Line
+ 9100 5900 9400 5900
+Wire Wire Line
+ 9400 5900 9700 5900
+Wire Wire Line
+ 9700 5900 10000 5900
+Wire Wire Line
+ 10000 5900 10300 5900
+Wire Wire Line
+ 10300 5900 10600 5900
+Connection ~ 9700 5900
+Connection ~ 9100 5900
+Connection ~ 8500 5900
+Wire Wire Line
+ 2750 1300 2700 1300
+Wire Wire Line
+ 8350 5100 9000 5100
+Wire Wire Line
+ 9600 5100 9500 5100
+Connection ~ 7600 5900
+Wire Wire Line
+ 7600 5950 7600 5900
+Wire Wire Line
+ 7600 5900 7600 5850
+Connection ~ 10000 5900
+Connection ~ 7900 5900
+Wire Wire Line
+ 7900 5900 7900 5950
+Connection ~ 8200 5900
+Wire Wire Line
+ 8200 5900 8200 5950
+Wire Wire Line
+ 8500 5900 8500 5950
+Connection ~ 8800 5900
+Wire Wire Line
+ 9100 5900 9100 5950
+Connection ~ 9400 5900
+Wire Wire Line
+ 9700 5900 9700 5950
+Connection ~ 8500 6400
+Connection ~ 10300 5900
+Wire Wire Line
+ 10300 5950 10300 5900
+Wire Wire Line
+ 10600 5900 10600 5950
+Connection ~ 7900 6400
+Wire Wire Line
+ 7900 6350 7900 6400
+Connection ~ 8200 6400
+Wire Wire Line
+ 8200 6400 8200 6350
+Wire Wire Line
+ 8500 6400 8500 6350
+Wire Wire Line
+ 8350 5400 9000 5400
+Wire Wire Line
+ 9600 5400 9500 5400
+Wire Wire Line
+ 2700 1100 3600 1100
+Wire Wire Line
+ 8800 5900 8800 5950
+Wire Wire Line
+ 9400 5900 9400 5950
+Wire Wire Line
+ 10000 5900 10000 5950
+Wire Wire Line
+ 7600 6450 7600 6400
+Wire Wire Line
+ 7600 6400 7600 6350
+Connection ~ 7600 6400
+Wire Wire Line
+ 9100 6400 9100 6350
+Connection ~ 9100 6400
+Wire Wire Line
+ 9700 6400 9700 6350
+Connection ~ 9700 6400
+Wire Wire Line
+ 10300 6400 10300 6350
+Connection ~ 10300 6400
+Wire Wire Line
+ 7600 1200 7000 1200
+Wire Wire Line
+ 5500 6900 6050 6900
+Wire Wire Line
+ 5500 6600 6050 6600
+Wire Wire Line
+ 5500 5500 6050 5500
+Wire Wire Line
+ 5500 5300 6050 5300
+Wire Wire Line
+ 5500 4900 6050 4900
+Wire Wire Line
+ 3050 5000 3600 5000
+Wire Wire Line
+ 3050 4700 3600 4700
+Wire Wire Line
+ 3050 4300 3600 4300
+Wire Wire Line
+ 3050 2500 3600 2500
+Wire Wire Line
+ 3050 2300 3600 2300
+Wire Wire Line
+ 3050 2200 3600 2200
+Wire Wire Line
+ 3050 1800 3600 1800
+Wire Wire Line
+ 3050 1700 3600 1700
+Wire Wire Line
+ 3050 3000 3600 3000
+Wire Wire Line
+ 3050 3100 3600 3100
+Wire Wire Line
+ 5500 6200 6050 6200
+Wire Wire Line
+ 5500 5800 6050 5800
+Wire Wire Line
+ 5500 6300 6050 6300
+Wire Wire Line
+ 5500 7000 6050 7000
+Wire Wire Line
+ 5500 6800 6050 6800
+Wire Wire Line
+ 5500 6500 6050 6500
+Wire Wire Line
+ 5500 5400 6050 5400
+Wire Wire Line
+ 5500 5200 6050 5200
+Wire Wire Line
+ 5500 5000 6050 5000
+Wire Wire Line
+ 3050 4500 3600 4500
+Wire Wire Line
+ 3050 4600 3600 4600
+Wire Wire Line
+ 3050 4400 3600 4400
+Wire Wire Line
+ 3050 2900 3600 2900
+Wire Wire Line
+ 3050 2600 3600 2600
+Wire Wire Line
+ 3050 2700 3600 2700
+Wire Wire Line
+ 3050 2100 3600 2100
+Wire Wire Line
+ 3050 1900 3600 1900
+Wire Wire Line
+ 8250 2100 8800 2100
+Wire Wire Line
+ 8250 2200 8800 2200
+Wire Wire Line
+ 8250 2300 8800 2300
+Wire Wire Line
+ 8250 2400 8800 2400
+Wire Wire Line
+ 8250 2500 8800 2500
+Wire Wire Line
+ 8250 2600 8800 2600
+Wire Wire Line
+ 8250 2700 8800 2700
+Wire Wire Line
+ 8250 2800 8800 2800
+Wire Wire Line
+ 8250 2900 8800 2900
+Wire Wire Line
+ 8250 3000 8800 3000
+Wire Wire Line
+ 8250 3100 8800 3100
+Wire Wire Line
+ 8250 3200 8800 3200
+Wire Wire Line
+ 8250 3300 8800 3300
+Wire Wire Line
+ 8250 3400 8800 3400
+Wire Wire Line
+ 8250 3500 8800 3500
+Wire Wire Line
+ 8250 3600 8800 3600
+Wire Wire Line
+ 8250 3700 8800 3700
+Wire Wire Line
+ 8250 3800 8800 3800
+Wire Wire Line
+ 8250 3900 8800 3900
+Wire Wire Line
+ 8250 4000 8800 4000
+Wire Wire Line
+ 9600 2200 10150 2200
+Wire Wire Line
+ 9600 2300 10150 2300
+Wire Wire Line
+ 9600 2400 10150 2400
+Wire Wire Line
+ 9600 2500 10150 2500
+Wire Wire Line
+ 9600 2600 10150 2600
+Wire Wire Line
+ 9600 2700 10150 2700
+Wire Wire Line
+ 9600 2800 10150 2800
+Wire Wire Line
+ 9600 2900 10150 2900
+Wire Wire Line
+ 9600 3000 10150 3000
+Wire Wire Line
+ 9600 3100 10150 3100
+Wire Wire Line
+ 9600 3200 10150 3200
+Wire Wire Line
+ 9600 3300 10150 3300
+Wire Wire Line
+ 9600 3400 10150 3400
+Wire Wire Line
+ 9600 3500 10150 3500
+Wire Wire Line
+ 9600 3600 10150 3600
+Wire Wire Line
+ 9600 3700 10150 3700
+Wire Wire Line
+ 9600 3800 10150 3800
+Wire Wire Line
+ 2150 2400 1300 2400
+Wire Wire Line
+ 2150 2600 1300 2600
+Wire Wire Line
+ 2150 2800 1300 2800
+Wire Wire Line
+ 2150 3000 1300 3000
+Wire Wire Line
+ 6200 1200 5500 1200
+Wire Wire Line
+ 3600 1200 3450 1200
+Wire Wire Line
+ 3450 1200 3450 1250
+Wire Wire Line
+ 3600 900 3050 900
+Wire Wire Line
+ 3050 900 2700 900
+Wire Wire Line
+ 3600 3900 3550 3900
+Wire Wire Line
+ 3550 3900 3550 4000
+Wire Wire Line
+ 3550 4000 3550 4100
+Wire Wire Line
+ 3500 4100 3550 4100
+Wire Wire Line
+ 3550 4100 3600 4100
+Connection ~ 3550 4100
+Wire Wire Line
+ 5500 2600 6350 2600
+NoConn ~ 3600 7000
+NoConn ~ 3600 6900
+Text Label 9600 3900 0 60 ~ 0
++3,3V_OUT
+$Comp
+L GND #PWR0105
+U 1 1 480DCF5A
+P 3500 4100
+F 0 "#PWR0105" H 3500 4100 30 0001 C CNN
+F 1 "GND" H 3500 4030 30 0001 C CNN
+F 2 "" H 3500 4100 60 0001 C CNN
+F 3 "" H 3500 4100 60 0001 C CNN
+ 1 3500 4100
+ 0 1 1 0
+$EndComp
+$Comp
+L +3,3V #PWR0106
+U 1 1 4791D619
+P 10850 3900
+F 0 "#PWR0106" H 10850 3860 30 0001 C CNN
+F 1 "+3,3V" H 10850 4010 40 0000 C CNN
+F 2 "" H 10850 3900 60 0001 C CNN
+F 3 "" H 10850 3900 60 0001 C CNN
+ 1 10850 3900
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R64
+U 1 1 4791D59D
+P 10450 3900
+F 0 "R64" V 10350 3900 50 0000 C CNN
+F 1 "3,3" V 10450 3900 50 0000 C CNN
+F 2 "discret:R4" H 10450 3900 60 0001 C CNN
+F 3 "" H 10450 3900 60 0001 C CNN
+ 1 10450 3900
+ 0 1 1 0
+$EndComp
+NoConn ~ 5500 4600
+NoConn ~ 5500 4500
+NoConn ~ 5500 4400
+NoConn ~ 5500 4300
+NoConn ~ 5500 4200
+NoConn ~ 5500 7500
+NoConn ~ 5500 7400
+NoConn ~ 5500 7300
+NoConn ~ 3600 5300
+NoConn ~ 3600 5200
+NoConn ~ 5500 2100
+NoConn ~ 5500 2000
+NoConn ~ 5500 1900
+NoConn ~ 5500 1800
+NoConn ~ 5500 3200
+NoConn ~ 5500 3100
+NoConn ~ 5500 3000
+NoConn ~ 5500 2800
+NoConn ~ 5500 1700
+NoConn ~ 5500 1500
+NoConn ~ 5500 1400
+NoConn ~ 5500 1100
+NoConn ~ 5500 1000
+NoConn ~ 5500 900
+$Comp
+L GND #PWR0107
+U 1 1 470F3BF2
+P 3450 1250
+F 0 "#PWR0107" H 3450 1250 30 0001 C CNN
+F 1 "GND" H 3450 1180 30 0001 C CNN
+F 2 "" H 3450 1250 60 0001 C CNN
+F 3 "" H 3450 1250 60 0001 C CNN
+ 1 3450 1250
+ 1 0 0 -1
+$EndComp
+NoConn ~ 3600 5600
+NoConn ~ 3600 5500
+NoConn ~ 3600 5400
+NoConn ~ 3600 7500
+NoConn ~ 3600 7400
+NoConn ~ 3600 7300
+NoConn ~ 3600 7200
+NoConn ~ 3600 7100
+NoConn ~ 3600 6800
+NoConn ~ 3600 6700
+NoConn ~ 3600 6600
+NoConn ~ 3600 6500
+NoConn ~ 3600 6400
+NoConn ~ 3600 6300
+NoConn ~ 3600 6200
+NoConn ~ 3600 6100
+NoConn ~ 3600 6000
+NoConn ~ 3600 5900
+NoConn ~ 3600 5800
+Text Label 5650 4000 0 60 ~ 0
+XIL_DATA
+Text Label 5650 2400 0 60 ~ 0
+XIL_INIT
+Text Label 5650 3900 0 60 ~ 0
+XIL_RTS
+Text Label 5650 3800 0 60 ~ 0
+XIL_CTS
+Text Label 5650 3400 0 60 ~ 0
+XIL_CCLK
+Text Label 5650 3500 0 60 ~ 0
+XIL_DIN
+Text Label 5650 3600 0 60 ~ 0
+XIL_DOUT
+Text Label 5650 3700 0 60 ~ 0
+XIL_SPI_CLK
+Text Label 5650 2300 0 60 ~ 0
+XIL_IRQ2
+Text Label 5650 2200 0 60 ~ 0
+XIL_IRQ1
+$Comp
+L CONN_2X2 P3
+U 1 1 46A76EB2
+P 6600 1250
+F 0 "P3" H 6600 1400 50 0000 C CNN
+F 1 "CONN_2X2" H 6610 1120 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X2" H 6600 1250 60 0001 C CNN
+F 3 "" H 6600 1250 60 0001 C CNN
+ 1 6600 1250
+ -1 0 0 -1
+$EndComp
+$Comp
+L XCR3256-TQ144 U9
+U 1 1 470F38BE
+P 4550 4100
+F 0 "U9" H 4550 7550 70 0000 C CNN
+F 1 "XCR3256-TQ144" H 4550 500 60 0000 C CNN
+F 2 "lib_smd:TQFP144" H 4550 4100 60 0001 C CNN
+F 3 "" H 4550 4100 60 0001 C CNN
+ 1 4550 4100
+ 1 0 0 -1
+$EndComp
+Text Label 5550 6900 0 60 ~ 0
+XIL_D5
+Text Label 5600 7100 0 60 ~ 0
+XIL_D4
+Text Label 5600 6000 0 60 ~ 0
+XIL_D3
+Text Label 5600 6100 0 60 ~ 0
+XIL_D2
+Text Label 5600 5700 0 60 ~ 0
+XIL_D1
+Text Label 5550 4700 0 60 ~ 0
+XIL_D0
+Text Label 9700 3800 0 60 ~ 0
+XIL_D36
+Text Label 9700 3700 0 60 ~ 0
+XIL_D35
+Text Label 9700 3600 0 60 ~ 0
+XIL_D34
+Text Label 9700 3500 0 60 ~ 0
+XIL_D33
+Text Label 9700 3400 0 60 ~ 0
+XIL_D32
+Text Label 9700 3300 0 60 ~ 0
+XIL_D31
+Text Label 9700 3200 0 60 ~ 0
+XIL_D30
+Text Label 9700 3100 0 60 ~ 0
+XIL_D29
+Text Label 9700 3000 0 60 ~ 0
+XIL_D28
+Text Label 9700 2900 0 60 ~ 0
+XIL_D27
+Text Label 9700 2800 0 60 ~ 0
+XIL_D26
+Text Label 9700 2700 0 60 ~ 0
+XIL_D25
+Text Label 9700 2600 0 60 ~ 0
+XIL_D24
+Text Label 9700 2500 0 60 ~ 0
+XIL_D23
+Text Label 9700 2400 0 60 ~ 0
+XIL_D22
+Text Label 9700 2300 0 60 ~ 0
+XIL_D21
+Text Label 9700 2200 0 60 ~ 0
+XIL_D20
+Text Label 8250 4000 0 60 ~ 0
+XIL_D19
+Text Label 8250 3900 0 60 ~ 0
+XIL_D18
+Text Label 8250 3800 0 60 ~ 0
+XIL_D17
+Text Label 8250 3700 0 60 ~ 0
+XIL_D16
+Text Label 8250 3600 0 60 ~ 0
+XIL_D15
+Text Label 8250 3500 0 60 ~ 0
+XIL_D14
+Text Label 8250 3400 0 60 ~ 0
+XIL_D13
+Text Label 8250 3300 0 60 ~ 0
+XIL_D12
+Text Label 8250 3200 0 60 ~ 0
+XIL_D11
+Text Label 8250 3100 0 60 ~ 0
+XIL_D10
+Text Label 8250 3000 0 60 ~ 0
+XIL_D9
+Text Label 8250 2900 0 60 ~ 0
+XIL_D8
+Text Label 8250 2800 0 60 ~ 0
+XIL_D7
+Text Label 8250 2700 0 60 ~ 0
+XIL_D6
+Text Label 8250 2600 0 60 ~ 0
+XIL_D5
+Text Label 8250 2500 0 60 ~ 0
+XIL_D4
+Text Label 8250 2400 0 60 ~ 0
+XIL_D3
+Text Label 8250 2300 0 60 ~ 0
+XIL_D2
+Text Label 8250 2200 0 60 ~ 0
+XIL_D1
+Text Label 8250 2100 0 60 ~ 0
+XIL_D0
+Text Label 3100 1900 0 60 ~ 0
+XIL_D36
+Text Label 3100 2100 0 60 ~ 0
+XIL_D35
+$Comp
+L GND #PWR0108
+U 1 1 46ADE620
+P 9650 4000
+F 0 "#PWR0108" H 9650 4000 30 0001 C CNN
+F 1 "GND" H 9650 3930 30 0001 C CNN
+F 2 "" H 9650 4000 60 0001 C CNN
+F 3 "" H 9650 4000 60 0001 C CNN
+ 1 9650 4000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR0109
+U 1 1 46ADE61B
+P 9650 2100
+F 0 "#PWR0109" H 9650 2100 30 0001 C CNN
+F 1 "GND" H 9650 2030 30 0001 C CNN
+F 2 "" H 9650 2100 60 0001 C CNN
+F 3 "" H 9650 2100 60 0001 C CNN
+ 1 9650 2100
+ 0 -1 -1 0
+$EndComp
+Text Label 3100 2700 0 60 ~ 0
+XIL_D34
+Text Label 3100 2600 0 60 ~ 0
+XIL_D33
+Text Label 3100 2900 0 60 ~ 0
+XIL_D32
+Text Label 3100 4400 0 60 ~ 0
+XIL_D31
+Text Label 3100 4600 0 60 ~ 0
+XIL_D30
+Text Label 3100 4500 0 60 ~ 0
+XIL_D29
+Text Label 5550 5000 0 60 ~ 0
+XIL_D28
+Text Label 5550 5200 0 60 ~ 0
+XIL_D27
+Text Label 5600 5400 0 60 ~ 0
+XIL_D26
+Text Label 5600 6500 0 60 ~ 0
+XIL_D25
+Text Label 5600 6800 0 60 ~ 0
+XIL_D24
+Text Label 5600 7000 0 60 ~ 0
+XIL_D23
+Text Label 5600 6300 0 60 ~ 0
+XIL_D22
+Text Label 5600 5800 0 60 ~ 0
+XIL_D21
+Text Label 5550 6200 0 60 ~ 0
+XIL_D20
+Text Label 3050 3100 0 60 ~ 0
+XIL_D19
+Text Label 3050 3000 0 60 ~ 0
+XIL_D18
+Text Label 3050 1700 0 60 ~ 0
+XIL_D17
+Text Label 3050 1800 0 60 ~ 0
+XIL_D16
+Text Label 3050 2200 0 60 ~ 0
+XIL_D15
+Text Label 3050 2300 0 60 ~ 0
+XIL_D14
+Text Label 3050 2500 0 60 ~ 0
+XIL_D13
+Text Label 3100 4300 0 60 ~ 0
+XIL_D12
+Text Label 3100 4700 0 60 ~ 0
+XIL_D11
+Text Label 3050 5000 0 60 ~ 0
+XIL_D10
+Text Label 5600 4900 0 60 ~ 0
+XIL_D9
+Text Label 5600 5300 0 60 ~ 0
+XIL_D8
+Text Label 5600 5500 0 60 ~ 0
+XIL_D7
+Text Label 5600 6600 0 60 ~ 0
+XIL_D6
+$Comp
+L CONN_20X2 P4
+U 1 1 46ADE55A
+P 9200 3050
+F 0 "P4" H 9200 4100 60 0000 C CNN
+F 1 "CONN_20X2" V 9200 3050 50 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_20X2" H 9200 3050 60 0001 C CNN
+F 3 "" H 9200 3050 60 0001 C CNN
+ 1 9200 3050
+ 1 0 0 -1
+$EndComp
+Text Label 5650 2600 0 60 ~ 0
+LED_TEST1
+Text Label 5650 2700 0 60 ~ 0
+LED_TEST2
+Text Label 1450 2900 0 60 ~ 0
+XIL_DATA
+Text Label 1450 3100 0 60 ~ 0
+XIL_INIT
+Text Label 7050 1300 0 60 ~ 0
+XIL_RTS
+Text Label 7050 1200 0 60 ~ 0
+XIL_CTS
+Text Label 1450 2800 0 60 ~ 0
+XIL_RTS
+Text Label 1450 2700 0 60 ~ 0
+XIL_CTS
+Text Label 1450 2300 0 60 ~ 0
+XIL_CCLK
+Text Label 1450 2400 0 60 ~ 0
+XIL_DIN
+Text Label 1450 2500 0 60 ~ 0
+XIL_DOUT
+Text Label 1450 2600 0 60 ~ 0
+XIL_SPI_CLK
+Text Label 1450 3000 0 60 ~ 0
+XIL_IRQ2
+Text Label 1450 2200 0 60 ~ 0
+XIL_IRQ1
+Text HLabel 3400 3800 0 60 Input ~ 0
+GLCK2
+$Comp
+L +3,3V #PWR0110
+U 1 1 46A76BD3
+P 2750 1300
+F 0 "#PWR0110" H 2750 1260 30 0001 C CNN
+F 1 "+3,3V" V 2750 1500 40 0000 C CNN
+F 2 "" H 2750 1300 60 0001 C CNN
+F 3 "" H 2750 1300 60 0001 C CNN
+ 1 2750 1300
+ 0 1 1 0
+$EndComp
+$Comp
+L +3,3V #PWR0111
+U 1 1 46A76BD2
+P 3600 650
+F 0 "#PWR0111" H 3600 610 30 0001 C CNN
+F 1 "+3,3V" H 3600 760 40 0000 C CNN
+F 2 "" H 3600 650 60 0001 C CNN
+F 3 "" H 3600 650 60 0001 C CNN
+ 1 3600 650
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R57
+U 1 1 46A76BCA
+P 3300 650
+F 0 "R57" V 3200 650 50 0000 C CNN
+F 1 "4K7" V 3300 650 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 3300 650 60 0001 C CNN
+F 3 "" H 3300 650 60 0001 C CNN
+ 1 3300 650
+ 0 1 1 0
+$EndComp
+Text Label 8350 5100 0 60 ~ 0
+LED_TEST1
+$Comp
+L GND #PWR0112
+U 1 1 46A76BC5
+P 10050 5100
+F 0 "#PWR0112" H 10050 5100 40 0001 C CNN
+F 1 "GND" H 10050 5030 40 0001 C CNN
+F 2 "" H 10050 5100 60 0001 C CNN
+F 3 "" H 10050 5100 60 0001 C CNN
+ 1 10050 5100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L LED D8
+U 1 1 46A76BC4
+P 9800 5100
+F 0 "D8" H 9800 5200 50 0000 C CNN
+F 1 "LED" H 9800 5000 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 9800 5100 60 0001 C CNN
+F 3 "" H 9800 5100 60 0001 C CNN
+ 1 9800 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R62
+U 1 1 46A76BC3
+P 9250 5100
+F 0 "R62" V 9330 5100 50 0000 C CNN
+F 1 "1K" V 9250 5100 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 9250 5100 60 0001 C CNN
+F 3 "" H 9250 5100 60 0001 C CNN
+ 1 9250 5100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR0113
+U 1 1 46A76BC1
+P 7600 6450
+F 0 "#PWR0113" H 7600 6450 30 0001 C CNN
+F 1 "GND" H 7600 6380 30 0001 C CNN
+F 2 "" H 7600 6450 60 0001 C CNN
+F 3 "" H 7600 6450 60 0001 C CNN
+ 1 7600 6450
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3,3V #PWR0114
+U 1 1 46A76BBF
+P 7600 5850
+F 0 "#PWR0114" H 7600 5810 30 0001 C CNN
+F 1 "+3,3V" H 7600 5960 40 0000 C CNN
+F 2 "" H 7600 5850 60 0001 C CNN
+F 3 "" H 7600 5850 60 0001 C CNN
+ 1 7600 5850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C61
+U 1 1 46A76BBC
+P 10600 6150
+F 0 "C61" H 10650 6250 50 0000 L CNN
+F 1 "100nF" H 10600 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 10600 6150 60 0001 C CNN
+F 3 "" H 10600 6150 60 0001 C CNN
+ 1 10600 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C60
+U 1 1 46A76BBB
+P 10300 6150
+F 0 "C60" H 10350 6250 50 0000 L CNN
+F 1 "100nF" H 10300 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 10300 6150 60 0001 C CNN
+F 3 "" H 10300 6150 60 0001 C CNN
+ 1 10300 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C59
+U 1 1 46A76BBA
+P 10000 6150
+F 0 "C59" H 10050 6250 50 0000 L CNN
+F 1 "100nF" H 10000 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 10000 6150 60 0001 C CNN
+F 3 "" H 10000 6150 60 0001 C CNN
+ 1 10000 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C54
+U 1 1 46A76BB5
+P 8500 6150
+F 0 "C54" H 8550 6250 50 0000 L CNN
+F 1 "100nF" H 8500 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 8500 6150 60 0001 C CNN
+F 3 "" H 8500 6150 60 0001 C CNN
+ 1 8500 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C53
+U 1 1 46A76BB4
+P 8200 6150
+F 0 "C53" H 8250 6250 50 0000 L CNN
+F 1 "100nF" H 8200 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 8200 6150 60 0001 C CNN
+F 3 "" H 8200 6150 60 0001 C CNN
+ 1 8200 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C52
+U 1 1 46A76BB3
+P 7900 6150
+F 0 "C52" H 7950 6250 50 0000 L CNN
+F 1 "100nF" H 7900 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 7900 6150 60 0001 C CNN
+F 3 "" H 7900 6150 60 0001 C CNN
+ 1 7900 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C51
+U 1 1 46A76BB2
+P 7600 6150
+F 0 "C51" H 7650 6250 50 0000 L CNN
+F 1 "100nF" H 7600 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 7600 6150 60 0001 C CNN
+F 3 "" H 7600 6150 60 0001 C CNN
+ 1 7600 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C58
+U 1 1 46A76BB1
+P 9700 6150
+F 0 "C58" H 9750 6250 50 0000 L CNN
+F 1 "100nF" H 9700 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 9700 6150 60 0001 C CNN
+F 3 "" H 9700 6150 60 0001 C CNN
+ 1 9700 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C57
+U 1 1 46A76BB0
+P 9400 6150
+F 0 "C57" H 9450 6250 50 0000 L CNN
+F 1 "100nF" H 9400 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 9400 6150 60 0001 C CNN
+F 3 "" H 9400 6150 60 0001 C CNN
+ 1 9400 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C56
+U 1 1 46A76BAF
+P 9100 6150
+F 0 "C56" H 9150 6250 50 0000 L CNN
+F 1 "100nF" H 9100 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 9100 6150 60 0001 C CNN
+F 3 "" H 9100 6150 60 0001 C CNN
+ 1 9100 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C55
+U 1 1 46A76BAE
+P 8800 6150
+F 0 "C55" H 8850 6250 50 0000 L CNN
+F 1 "100nF" H 8800 6050 50 0000 L CNN
+F 2 "lib_smd:SM0805" H 8800 6150 60 0001 C CNN
+F 3 "" H 8800 6150 60 0001 C CNN
+ 1 8800 6150
+ 1 0 0 -1
+$EndComp
+Text Label 8350 5400 0 60 ~ 0
+LED_TEST2
+Text Label 2800 900 0 60 ~ 0
+TCK
+$Comp
+L GND #PWR0115
+U 1 1 46A76BA9
+P 10050 5400
+F 0 "#PWR0115" H 10050 5400 40 0001 C CNN
+F 1 "GND" H 10050 5330 40 0001 C CNN
+F 2 "" H 10050 5400 60 0001 C CNN
+F 3 "" H 10050 5400 60 0001 C CNN
+ 1 10050 5400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L LED D9
+U 1 1 46A76BA8
+P 9800 5400
+F 0 "D9" H 9800 5500 50 0000 C CNN
+F 1 "LED" H 9800 5300 50 0000 C CNN
+F 2 "lib_smd:SM1206POL" H 9800 5400 60 0001 C CNN
+F 3 "" H 9800 5400 60 0001 C CNN
+ 1 9800 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R63
+U 1 1 46A76BA7
+P 9250 5400
+F 0 "R63" V 9330 5400 50 0000 C CNN
+F 1 "1K" V 9250 5400 50 0000 C CNN
+F 2 "lib_smd:SM0805" H 9250 5400 60 0001 C CNN
+F 3 "" H 9250 5400 60 0001 C CNN
+ 1 9250 5400
+ 0 -1 -1 0
+$EndComp
+Text Label 2800 1100 0 60 ~ 0
+TMS
+Text Label 2800 1000 0 60 ~ 0
+TDI
+Text Label 2800 800 0 60 ~ 0
+TDO
+$Comp
+L CONN_6 P1
+U 1 1 46A76BA6
+P 2350 1050
+F 0 "P1" V 2300 1050 60 0000 C CNN
+F 1 "CONN_6" V 2400 1050 60 0000 C CNN
+F 2 "pin_array:PIN_ARRAY-6X1" H 2350 1050 60 0001 C CNN
+F 3 "" H 2350 1050 60 0001 C CNN
+ 1 2350 1050
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #PWR0116
+U 1 1 46A76BA5
+P 2750 1200
+F 0 "#PWR0116" H 2750 1200 40 0001 C CNN
+F 1 "GND" H 2750 1130 40 0001 C CNN
+F 2 "" H 2750 1200 60 0001 C CNN
+F 3 "" H 2750 1200 60 0001 C CNN
+ 1 2750 1200
+ 0 -1 -1 0
+$EndComp
+Text HLabel 1300 2600 0 60 Input ~ 0
+QSPI_SCLK
+Text HLabel 1300 3100 0 60 Input ~ 0
+IRQ-3
+Text HLabel 1300 3000 0 60 Input ~ 0
+IRQ-2
+Text HLabel 1300 2900 0 60 Input ~ 0
+QSPI_CS1
+Text HLabel 1300 2800 0 60 Input ~ 0
+URTS1-
+Text HLabel 1300 2700 0 60 Input ~ 0
+UCTS1-
+Text HLabel 1300 2500 0 60 Output ~ 0
+QSPI_DOUT
+Text HLabel 1300 2400 0 60 Input ~ 0
+QSPI_DIN
+Text HLabel 1300 2300 0 60 Input ~ 0
+QSPI_CS2
+Text HLabel 1300 2200 0 60 Input ~ 0
+IRQ-1
+Wire Wire Line
+ 3600 650 3550 650
+Wire Wire Line
+ 2750 1200 2700 1200
+Wire Wire Line
+ 9650 2100 9600 2100
+Wire Wire Line
+ 9650 4000 9600 4000
+Wire Wire Line
+ 10050 5400 10000 5400
+Wire Wire Line
+ 10000 5100 10050 5100
+$EndSCHEMATC
diff --git a/demos/microwave/microwave.kicad_pcb b/demos/microwave/microwave.kicad_pcb
new file mode 100644
index 0000000..93f8180
--- /dev/null
+++ b/demos/microwave/microwave.kicad_pcb
@@ -0,0 +1,987 @@
+(kicad_pcb (version 3) (host pcbnew "(2013-02-23 BZR 3971)-testing")
+
+ (general
+ (links 0)
+ (no_connects 0)
+ (area 59.537599 81.127599 351.942401 202.082401)
+ (thickness 1.6)
+ (drawings 7)
+ (tracks 0)
+ (zones 0)
+ (modules 4)
+ (nets 1)
+ )
+
+ (page A3)
+ (layers
+ (15 Dessus.Cu signal)
+ (0 Dessous.Cu signal)
+ (16 B.Adhes user)
+ (17 F.Adhes user)
+ (18 B.Paste user)
+ (19 F.Paste user)
+ (20 B.SilkS user)
+ (21 F.SilkS user)
+ (22 B.Mask user)
+ (23 F.Mask user)
+ (24 Dwgs.User user)
+ (25 Cmts.User user)
+ (26 Eco1.User user)
+ (27 Eco2.User user)
+ (28 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.254)
+ (trace_clearance 0.254)
+ (zone_clearance 0.381)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.3048)
+ (edge_width 0.3048)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.2032)
+ (pcb_text_size 1.524 1.524)
+ (mod_edge_width 0.3048)
+ (mod_text_size 1.27 1.27)
+ (mod_text_width 0.2032)
+ (pad_size 1.397 1.397)
+ (pad_drill 0.8128)
+ (pad_to_mask_clearance 0.2)
+ (aux_axis_origin 0 0)
+ (visible_elements FFFFFFBF)
+ (pcbplotparams
+ (layerselection 3178497)
+ (usegerberextensions true)
+ (excludeedgelayer true)
+ (linewidth 10000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotothertext true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net "")
+ )
+
+ (module POLY (layer Dessus.Cu) (tedit 42809A8C) (tstamp 0)
+ (at 203.2 144.78)
+ (fp_text reference POLY (at 0 0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_text value VAL** (at 0 -0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_poly (pts (xy -135.7503 0) (xy -135.7503 -0.61214) (xy -135.24738 -0.61214) (xy -134.74446 -0.6096)
+ (xy -134.24154 -0.60452) (xy -133.73862 -0.59944) (xy -133.2357 -0.59436) (xy -132.73278 -0.58674)
+ (xy -132.22986 -0.58166) (xy -131.72694 -0.57404) (xy -131.22402 -0.56642) (xy -130.72364 -0.56134)
+ (xy -130.22072 -0.55626) (xy -129.7178 -0.55372) (xy -129.21488 -0.55372) (xy -128.71196 -0.55372)
+ (xy -128.20904 -0.5588) (xy -127.70612 -0.56388) (xy -127.2032 -0.57404) (xy -126.70028 -0.5842)
+ (xy -126.19736 -0.5969) (xy -125.69444 -0.61214) (xy -125.19152 -0.62738) (xy -124.6886 -0.64516)
+ (xy -124.18568 -0.66294) (xy -123.68276 -0.68072) (xy -123.17984 -0.69596) (xy -122.67692 -0.7112)
+ (xy -122.174 -0.72644) (xy -121.67362 -0.7366) (xy -121.1707 -0.74422) (xy -120.66778 -0.75184)
+ (xy -120.16486 -0.75438) (xy -119.66194 -0.75184) (xy -119.15902 -0.7493) (xy -118.6561 -0.73914)
+ (xy -118.15318 -0.72898) (xy -117.65026 -0.7112) (xy -117.14734 -0.69342) (xy -116.64442 -0.66802)
+ (xy -116.1415 -0.64262) (xy -115.63858 -0.61214) (xy -115.13566 -0.57912) (xy -114.63274 -0.5461)
+ (xy -114.12982 -0.51054) (xy -113.6269 -0.47752) (xy -113.12398 -0.44704) (xy -112.6236 -0.41656)
+ (xy -112.12068 -0.3937) (xy -111.61776 -0.37338) (xy -111.11484 -0.36068) (xy -110.61192 -0.35052)
+ (xy -110.109 -0.35052) (xy -109.60608 -0.35306) (xy -109.10316 -0.36576) (xy -108.60024 -0.38354)
+ (xy -108.09732 -0.40894) (xy -107.5944 -0.43942) (xy -107.09148 -0.47752) (xy -106.58856 -0.5207)
+ (xy -106.08564 -0.56642) (xy -105.58272 -0.61214) (xy -105.0798 -0.65786) (xy -104.57688 -0.70358)
+ (xy -104.07396 -0.74422) (xy -103.57358 -0.78232) (xy -103.07066 -0.8128) (xy -102.56774 -0.84074)
+ (xy -102.06482 -0.86106) (xy -101.5619 -0.8763) (xy -101.05898 -0.889) (xy -100.55606 -0.89408)
+ (xy -100.05314 -0.89408) (xy -99.55022 -0.889) (xy -99.0473 -0.87884) (xy -98.54438 -0.86106)
+ (xy -98.04146 -0.8382) (xy -97.53854 -0.81026) (xy -97.03562 -0.77216) (xy -96.5327 -0.72644)
+ (xy -96.02978 -0.6731) (xy -95.52686 -0.61214) (xy -95.02394 -0.54864) (xy -94.52356 -0.48006)
+ (xy -94.02064 -0.41656) (xy -93.51772 -0.3556) (xy -93.0148 -0.29972) (xy -92.51188 -0.25654)
+ (xy -92.00896 -0.22098) (xy -91.50604 -0.19558) (xy -91.00312 -0.18034) (xy -90.5002 -0.17272)
+ (xy -89.99728 -0.17272) (xy -89.49436 -0.18034) (xy -88.99144 -0.19812) (xy -88.48852 -0.2286)
+ (xy -87.9856 -0.2667) (xy -87.48268 -0.32004) (xy -86.97976 -0.381) (xy -86.47684 -0.45466)
+ (xy -85.97392 -0.5334) (xy -85.47354 -0.61214) (xy -84.97062 -0.68834) (xy -84.4677 -0.75692)
+ (xy -83.96478 -0.81788) (xy -83.46186 -0.86614) (xy -82.95894 -0.90678) (xy -82.45602 -0.93472)
+ (xy -81.9531 -0.95758) (xy -81.45018 -0.97282) (xy -80.94726 -0.98044) (xy -80.44434 -0.98552)
+ (xy -79.94142 -0.98552) (xy -79.4385 -0.98044) (xy -78.93558 -0.96774) (xy -78.43266 -0.94996)
+ (xy -77.92974 -0.92456) (xy -77.42682 -0.889) (xy -76.9239 -0.84074) (xy -76.42352 -0.77724)
+ (xy -75.9206 -0.70104) (xy -75.41768 -0.61214) (xy -74.91476 -0.51562) (xy -74.41184 -0.4191)
+ (xy -73.90892 -0.32766) (xy -73.406 -0.25146) (xy -72.90308 -0.1905) (xy -72.40016 -0.14732)
+ (xy -71.89724 -0.1143) (xy -71.39432 -0.09398) (xy -70.8914 -0.08128) (xy -70.38848 -0.0762)
+ (xy -69.88556 -0.08128) (xy -69.38264 -0.09398) (xy -68.87972 -0.1143) (xy -68.3768 -0.14732)
+ (xy -67.87388 -0.1905) (xy -67.3735 -0.25146) (xy -66.87058 -0.32766) (xy -66.36766 -0.4191)
+ (xy -65.86474 -0.51562) (xy -65.36182 -0.61214) (xy -64.8589 -0.70104) (xy -64.35598 -0.77978)
+ (xy -63.85306 -0.84328) (xy -63.35014 -0.89408) (xy -62.84722 -0.93218) (xy -62.3443 -0.96012)
+ (xy -61.84138 -0.98044) (xy -61.33846 -0.99314) (xy -60.83554 -0.99822) (xy -60.33262 -1.00076)
+ (xy -59.8297 -0.99822) (xy -59.32678 -0.99314) (xy -58.82386 -0.98044) (xy -58.32348 -0.96012)
+ (xy -57.82056 -0.93218) (xy -57.31764 -0.89408) (xy -56.81472 -0.84328) (xy -56.3118 -0.77978)
+ (xy -55.80888 -0.70104) (xy -55.30596 -0.61214) (xy -54.80304 -0.51562) (xy -54.30012 -0.4191)
+ (xy -53.7972 -0.32766) (xy -53.29428 -0.25146) (xy -52.79136 -0.1905) (xy -52.28844 -0.14732)
+ (xy -51.78552 -0.1143) (xy -51.2826 -0.09398) (xy -50.77968 -0.08128) (xy -50.27676 -0.0762)
+ (xy -49.77384 -0.08128) (xy -49.27346 -0.09398) (xy -48.77054 -0.1143) (xy -48.26762 -0.14732)
+ (xy -47.7647 -0.1905) (xy -47.26178 -0.25146) (xy -46.75886 -0.32766) (xy -46.25594 -0.4191)
+ (xy -45.75302 -0.51562) (xy -45.2501 -0.61214) (xy -44.74718 -0.70104) (xy -44.24426 -0.77978)
+ (xy -43.74134 -0.84328) (xy -43.23842 -0.89408) (xy -42.7355 -0.93218) (xy -42.23258 -0.96012)
+ (xy -41.72966 -0.98044) (xy -41.22674 -0.99314) (xy -40.72382 -0.99822) (xy -40.22344 -1.00076)
+ (xy -39.72052 -0.99822) (xy -39.2176 -0.99314) (xy -38.71468 -0.98044) (xy -38.21176 -0.96012)
+ (xy -37.70884 -0.93218) (xy -37.20592 -0.89408) (xy -36.703 -0.84328) (xy -36.20008 -0.77978)
+ (xy -35.69716 -0.70104) (xy -35.19424 -0.61214) (xy -34.69132 -0.51562) (xy -34.1884 -0.4191)
+ (xy -33.68548 -0.32766) (xy -33.18256 -0.25146) (xy -32.67964 -0.1905) (xy -32.17672 -0.14732)
+ (xy -31.6738 -0.1143) (xy -31.17088 -0.09398) (xy -30.6705 -0.08128) (xy -30.16758 -0.0762)
+ (xy -29.66466 -0.08128) (xy -29.16174 -0.09398) (xy -28.65882 -0.1143) (xy -28.1559 -0.14732)
+ (xy -27.65298 -0.1905) (xy -27.15006 -0.25146) (xy -26.64714 -0.32766) (xy -26.14422 -0.4191)
+ (xy -25.6413 -0.51562) (xy -25.13838 -0.61214) (xy -24.63546 -0.70104) (xy -24.13254 -0.77978)
+ (xy -23.62962 -0.84328) (xy -23.1267 -0.89408) (xy -22.62378 -0.93218) (xy -22.12086 -0.96012)
+ (xy -21.62048 -0.98044) (xy -21.11756 -0.99314) (xy -20.61464 -0.99822) (xy -20.11172 -1.00076)
+ (xy -19.6088 -0.99822) (xy -19.10588 -0.99314) (xy -18.60296 -0.98044) (xy -18.10004 -0.96012)
+ (xy -17.59712 -0.93218) (xy -17.0942 -0.89408) (xy -16.59128 -0.84328) (xy -16.08836 -0.77978)
+ (xy -15.58544 -0.70104) (xy -15.08252 -0.61214) (xy -14.5796 -0.51562) (xy -14.07668 -0.4191)
+ (xy -13.57376 -0.32766) (xy -13.07084 -0.25146) (xy -12.57046 -0.1905) (xy -12.06754 -0.14732)
+ (xy -11.56462 -0.1143) (xy -11.0617 -0.09398) (xy -10.55878 -0.08128) (xy -10.05586 -0.0762)
+ (xy -9.55294 -0.08128) (xy -9.05002 -0.09398) (xy -8.5471 -0.1143) (xy -8.04418 -0.14732)
+ (xy -7.54126 -0.1905) (xy -7.03834 -0.25146) (xy -6.53542 -0.32766) (xy -6.0325 -0.4191)
+ (xy -5.52958 -0.51562) (xy -5.02666 -0.61214) (xy -4.52374 -0.70104) (xy -4.02082 -0.77978)
+ (xy -3.52044 -0.84328) (xy -3.01752 -0.89408) (xy -2.5146 -0.93218) (xy -2.01168 -0.96012)
+ (xy -1.50876 -0.98044) (xy -1.00584 -0.99314) (xy -0.50292 -0.99822) (xy 0 -1.00076)
+ (xy 0.50292 -0.99822) (xy 1.00584 -0.99314) (xy 1.50876 -0.98044) (xy 2.01168 -0.96012)
+ (xy 2.5146 -0.93218) (xy 3.01752 -0.89408) (xy 3.52044 -0.84328) (xy 4.02336 -0.77978)
+ (xy 4.52628 -0.70104) (xy 5.0292 -0.61214) (xy 5.52958 -0.51562) (xy 6.0325 -0.4191)
+ (xy 6.53542 -0.32766) (xy 7.03834 -0.25146) (xy 7.54126 -0.1905) (xy 8.04418 -0.14732)
+ (xy 8.5471 -0.1143) (xy 9.05002 -0.09398) (xy 9.55294 -0.08128) (xy 10.05586 -0.0762)
+ (xy 10.55878 -0.08128) (xy 11.0617 -0.09398) (xy 11.56462 -0.1143) (xy 12.06754 -0.14732)
+ (xy 12.57046 -0.1905) (xy 13.07338 -0.25146) (xy 13.5763 -0.32766) (xy 14.07922 -0.4191)
+ (xy 14.5796 -0.51562) (xy 15.08252 -0.61214) (xy 15.58544 -0.70104) (xy 16.08836 -0.77978)
+ (xy 16.59128 -0.84328) (xy 17.0942 -0.89408) (xy 17.59712 -0.93218) (xy 18.10004 -0.96012)
+ (xy 18.60296 -0.98044) (xy 19.10588 -0.99314) (xy 19.6088 -0.99822) (xy 20.11172 -1.00076)
+ (xy 20.61464 -0.99822) (xy 21.11756 -0.99314) (xy 21.62048 -0.98044) (xy 22.1234 -0.96012)
+ (xy 22.62632 -0.93218) (xy 23.12924 -0.89408) (xy 23.62962 -0.84328) (xy 24.13254 -0.77978)
+ (xy 24.63546 -0.70104) (xy 25.13838 -0.61214) (xy 25.6413 -0.51562) (xy 26.14422 -0.4191)
+ (xy 26.64714 -0.32766) (xy 27.15006 -0.25146) (xy 27.65298 -0.1905) (xy 28.1559 -0.14732)
+ (xy 28.65882 -0.1143) (xy 29.16174 -0.09398) (xy 29.66466 -0.08128) (xy 30.16758 -0.0762)
+ (xy 30.6705 -0.08128) (xy 31.17342 -0.09398) (xy 31.67634 -0.1143) (xy 32.17926 -0.14732)
+ (xy 32.67964 -0.1905) (xy 33.18256 -0.25146) (xy 33.68548 -0.32766) (xy 34.1884 -0.4191)
+ (xy 34.69132 -0.51562) (xy 35.19424 -0.61214) (xy 35.69716 -0.70104) (xy 36.20008 -0.77978)
+ (xy 36.703 -0.84328) (xy 37.20592 -0.89408) (xy 37.70884 -0.93218) (xy 38.21176 -0.96012)
+ (xy 38.71468 -0.98044) (xy 39.2176 -0.99314) (xy 39.72052 -0.99822) (xy 40.22344 -1.00076)
+ (xy 40.72636 -0.99822) (xy 41.22928 -0.99314) (xy 41.72966 -0.98044) (xy 42.23258 -0.96012)
+ (xy 42.7355 -0.93218) (xy 43.23842 -0.89408) (xy 43.74134 -0.84328) (xy 44.24426 -0.77978)
+ (xy 44.74718 -0.70104) (xy 45.2501 -0.61214) (xy 45.75302 -0.51562) (xy 46.25594 -0.4191)
+ (xy 46.75886 -0.32766) (xy 47.26178 -0.25146) (xy 47.7647 -0.1905) (xy 48.26762 -0.14732)
+ (xy 48.77054 -0.1143) (xy 49.27346 -0.09398) (xy 49.77638 -0.08128) (xy 50.2793 -0.0762)
+ (xy 50.77968 -0.08128) (xy 51.2826 -0.09398) (xy 51.78552 -0.1143) (xy 52.28844 -0.14732)
+ (xy 52.79136 -0.1905) (xy 53.29428 -0.25146) (xy 53.7972 -0.32766) (xy 54.30012 -0.4191)
+ (xy 54.80304 -0.51562) (xy 55.30596 -0.61214) (xy 55.80888 -0.70104) (xy 56.3118 -0.77978)
+ (xy 56.81472 -0.84328) (xy 57.31764 -0.89408) (xy 57.82056 -0.93218) (xy 58.32348 -0.96012)
+ (xy 58.8264 -0.98044) (xy 59.32932 -0.99314) (xy 59.83224 -0.99822) (xy 60.33262 -1.00076)
+ (xy 60.83554 -0.99822) (xy 61.33846 -0.99314) (xy 61.84138 -0.98044) (xy 62.3443 -0.96012)
+ (xy 62.84722 -0.93218) (xy 63.35014 -0.89408) (xy 63.85306 -0.84328) (xy 64.35598 -0.77978)
+ (xy 64.8589 -0.70104) (xy 65.36182 -0.61214) (xy 65.86474 -0.51562) (xy 66.36766 -0.4191)
+ (xy 66.87058 -0.32766) (xy 67.3735 -0.25146) (xy 67.87642 -0.1905) (xy 68.37934 -0.14732)
+ (xy 68.88226 -0.1143) (xy 69.38264 -0.09398) (xy 69.88556 -0.08128) (xy 70.38848 -0.0762)
+ (xy 70.8914 -0.08128) (xy 71.39432 -0.09398) (xy 71.89724 -0.1143) (xy 72.40016 -0.14732)
+ (xy 72.90308 -0.1905) (xy 73.406 -0.25146) (xy 73.90892 -0.32766) (xy 74.41184 -0.4191)
+ (xy 74.91476 -0.51562) (xy 75.41768 -0.61214) (xy 75.9206 -0.70104) (xy 76.42352 -0.77724)
+ (xy 76.92644 -0.84074) (xy 77.42936 -0.889) (xy 77.93228 -0.92456) (xy 78.43266 -0.94996)
+ (xy 78.93558 -0.96774) (xy 79.4385 -0.98044) (xy 79.94142 -0.98552) (xy 80.44434 -0.98552)
+ (xy 80.94726 -0.98044) (xy 81.45018 -0.97282) (xy 81.9531 -0.95758) (xy 82.45602 -0.93472)
+ (xy 82.95894 -0.90678) (xy 83.46186 -0.86614) (xy 83.96478 -0.81788) (xy 84.4677 -0.75692)
+ (xy 84.97062 -0.68834) (xy 85.47354 -0.61214) (xy 85.97646 -0.5334) (xy 86.47938 -0.45466)
+ (xy 86.9823 -0.381) (xy 87.48268 -0.32004) (xy 87.9856 -0.2667) (xy 88.48852 -0.2286)
+ (xy 88.99144 -0.19812) (xy 89.49436 -0.18034) (xy 89.99728 -0.17272) (xy 90.5002 -0.17272)
+ (xy 91.00312 -0.18034) (xy 91.50604 -0.19558) (xy 92.00896 -0.22098) (xy 92.51188 -0.25654)
+ (xy 93.0148 -0.29972) (xy 93.51772 -0.3556) (xy 94.02064 -0.41656) (xy 94.52356 -0.48006)
+ (xy 95.02648 -0.54864) (xy 95.5294 -0.61214) (xy 96.03232 -0.6731) (xy 96.5327 -0.72644)
+ (xy 97.03562 -0.77216) (xy 97.53854 -0.81026) (xy 98.04146 -0.8382) (xy 98.54438 -0.86106)
+ (xy 99.0473 -0.87884) (xy 99.55022 -0.889) (xy 100.05314 -0.89408) (xy 100.55606 -0.89408)
+ (xy 101.05898 -0.889) (xy 101.5619 -0.8763) (xy 102.06482 -0.86106) (xy 102.56774 -0.84074)
+ (xy 103.07066 -0.8128) (xy 103.57358 -0.78232) (xy 104.0765 -0.74422) (xy 104.57942 -0.70358)
+ (xy 105.08234 -0.65786) (xy 105.58272 -0.61214) (xy 106.08564 -0.56642) (xy 106.58856 -0.5207)
+ (xy 107.09148 -0.47752) (xy 107.5944 -0.43942) (xy 108.09732 -0.40894) (xy 108.60024 -0.38354)
+ (xy 109.10316 -0.36576) (xy 109.60608 -0.35306) (xy 110.109 -0.35052) (xy 110.61192 -0.35052)
+ (xy 111.11484 -0.36068) (xy 111.61776 -0.37338) (xy 112.12068 -0.3937) (xy 112.6236 -0.41656)
+ (xy 113.12652 -0.44704) (xy 113.62944 -0.47752) (xy 114.13236 -0.51054) (xy 114.63274 -0.5461)
+ (xy 115.13566 -0.57912) (xy 115.63858 -0.61214) (xy 116.1415 -0.64262) (xy 116.64442 -0.66802)
+ (xy 117.14734 -0.69342) (xy 117.65026 -0.7112) (xy 118.15318 -0.72898) (xy 118.6561 -0.73914)
+ (xy 119.15902 -0.7493) (xy 119.66194 -0.75184) (xy 120.16486 -0.75438) (xy 120.66778 -0.75184)
+ (xy 121.1707 -0.74422) (xy 121.67362 -0.7366) (xy 122.17654 -0.72644) (xy 122.67946 -0.7112)
+ (xy 123.18238 -0.69596) (xy 123.68276 -0.68072) (xy 124.18568 -0.66294) (xy 124.6886 -0.64516)
+ (xy 125.19152 -0.62738) (xy 125.69444 -0.61214) (xy 126.19736 -0.5969) (xy 126.70028 -0.5842)
+ (xy 127.2032 -0.57404) (xy 127.70612 -0.56388) (xy 128.20904 -0.5588) (xy 128.71196 -0.55372)
+ (xy 129.21488 -0.55372) (xy 129.7178 -0.55372) (xy 130.22072 -0.55626) (xy 130.72364 -0.56134)
+ (xy 131.22656 -0.56642) (xy 131.72948 -0.57404) (xy 132.2324 -0.58166) (xy 132.73278 -0.58674)
+ (xy 133.2357 -0.59436) (xy 133.73862 -0.59944) (xy 134.24154 -0.60452) (xy 134.74446 -0.6096)
+ (xy 135.24738 -0.61214) (xy 135.7503 -0.61214) (xy 135.7503 0.61214) (xy 135.24738 0.61214)
+ (xy 134.74446 0.6096) (xy 134.24154 0.60452) (xy 133.73862 0.59944) (xy 133.2357 0.59436)
+ (xy 132.73278 0.58674) (xy 132.2324 0.58166) (xy 131.72948 0.57404) (xy 131.22656 0.56642)
+ (xy 130.72364 0.56134) (xy 130.22072 0.55626) (xy 129.7178 0.55372) (xy 129.21488 0.55372)
+ (xy 128.71196 0.55372) (xy 128.20904 0.5588) (xy 127.70612 0.56388) (xy 127.2032 0.57404)
+ (xy 126.70028 0.5842) (xy 126.19736 0.5969) (xy 125.69444 0.61214) (xy 125.19152 0.62738)
+ (xy 124.6886 0.64516) (xy 124.18568 0.66294) (xy 123.68276 0.68072) (xy 123.18238 0.69596)
+ (xy 122.67946 0.7112) (xy 122.17654 0.72644) (xy 121.67362 0.7366) (xy 121.1707 0.74422)
+ (xy 120.66778 0.75184) (xy 120.16486 0.75438) (xy 119.66194 0.75184) (xy 119.15902 0.7493)
+ (xy 118.6561 0.73914) (xy 118.15318 0.72898) (xy 117.65026 0.7112) (xy 117.14734 0.69342)
+ (xy 116.64442 0.66802) (xy 116.1415 0.64262) (xy 115.63858 0.61214) (xy 115.13566 0.57912)
+ (xy 114.63274 0.5461) (xy 114.13236 0.51054) (xy 113.62944 0.47752) (xy 113.12652 0.44704)
+ (xy 112.6236 0.41656) (xy 112.12068 0.3937) (xy 111.61776 0.37338) (xy 111.11484 0.36068)
+ (xy 110.61192 0.35052) (xy 110.109 0.35052) (xy 109.60608 0.35306) (xy 109.10316 0.36576)
+ (xy 108.60024 0.38354) (xy 108.09732 0.40894) (xy 107.5944 0.43942) (xy 107.09148 0.47752)
+ (xy 106.58856 0.5207) (xy 106.08564 0.56642) (xy 105.58272 0.61214) (xy 105.08234 0.65786)
+ (xy 104.57942 0.70358) (xy 104.0765 0.74422) (xy 103.57358 0.78232) (xy 103.07066 0.8128)
+ (xy 102.56774 0.84074) (xy 102.06482 0.86106) (xy 101.5619 0.8763) (xy 101.05898 0.889)
+ (xy 100.55606 0.89408) (xy 100.05314 0.89408) (xy 99.55022 0.889) (xy 99.0473 0.87884)
+ (xy 98.54438 0.86106) (xy 98.04146 0.8382) (xy 97.53854 0.81026) (xy 97.03562 0.77216)
+ (xy 96.5327 0.72644) (xy 96.03232 0.6731) (xy 95.5294 0.61214) (xy 95.02648 0.54864)
+ (xy 94.52356 0.48006) (xy 94.02064 0.41656) (xy 93.51772 0.3556) (xy 93.0148 0.29972)
+ (xy 92.51188 0.25654) (xy 92.00896 0.22098) (xy 91.50604 0.19558) (xy 91.00312 0.18034)
+ (xy 90.5002 0.17272) (xy 89.99728 0.17272) (xy 89.49436 0.18034) (xy 88.99144 0.19812)
+ (xy 88.48852 0.2286) (xy 87.9856 0.2667) (xy 87.48268 0.32004) (xy 86.9823 0.381)
+ (xy 86.47938 0.45466) (xy 85.97646 0.5334) (xy 85.47354 0.61214) (xy 84.97062 0.68834)
+ (xy 84.4677 0.75692) (xy 83.96478 0.81788) (xy 83.46186 0.86614) (xy 82.95894 0.90678)
+ (xy 82.45602 0.93472) (xy 81.9531 0.95758) (xy 81.45018 0.97282) (xy 80.94726 0.98044)
+ (xy 80.44434 0.98552) (xy 79.94142 0.98552) (xy 79.4385 0.98044) (xy 78.93558 0.96774)
+ (xy 78.43266 0.94996) (xy 77.93228 0.92456) (xy 77.42936 0.889) (xy 76.92644 0.84074)
+ (xy 76.42352 0.77724) (xy 75.9206 0.70104) (xy 75.41768 0.61214) (xy 74.91476 0.51562)
+ (xy 74.41184 0.4191) (xy 73.90892 0.32766) (xy 73.406 0.25146) (xy 72.90308 0.1905)
+ (xy 72.40016 0.14732) (xy 71.89724 0.1143) (xy 71.39432 0.09398) (xy 70.8914 0.08128)
+ (xy 70.38848 0.0762) (xy 69.88556 0.08128) (xy 69.38264 0.09398) (xy 68.88226 0.1143)
+ (xy 68.37934 0.14732) (xy 67.87642 0.1905) (xy 67.3735 0.25146) (xy 66.87058 0.32766)
+ (xy 66.36766 0.4191) (xy 65.86474 0.51562) (xy 65.36182 0.61214) (xy 64.8589 0.70104)
+ (xy 64.35598 0.77978) (xy 63.85306 0.84328) (xy 63.35014 0.89408) (xy 62.84722 0.93218)
+ (xy 62.3443 0.96012) (xy 61.84138 0.98044) (xy 61.33846 0.99314) (xy 60.83554 0.99822)
+ (xy 60.33262 1.00076) (xy 59.83224 0.99822) (xy 59.32932 0.99314) (xy 58.8264 0.98044)
+ (xy 58.32348 0.96012) (xy 57.82056 0.93218) (xy 57.31764 0.89408) (xy 56.81472 0.84328)
+ (xy 56.3118 0.77978) (xy 55.80888 0.70104) (xy 55.30596 0.61214) (xy 54.80304 0.51562)
+ (xy 54.30012 0.4191) (xy 53.7972 0.32766) (xy 53.29428 0.25146) (xy 52.79136 0.1905)
+ (xy 52.28844 0.14732) (xy 51.78552 0.1143) (xy 51.2826 0.09398) (xy 50.77968 0.08128)
+ (xy 50.2793 0.0762) (xy 49.77638 0.08128) (xy 49.27346 0.09398) (xy 48.77054 0.1143)
+ (xy 48.26762 0.14732) (xy 47.7647 0.1905) (xy 47.26178 0.25146) (xy 46.75886 0.32766)
+ (xy 46.25594 0.4191) (xy 45.75302 0.51562) (xy 45.2501 0.61214) (xy 44.74718 0.70104)
+ (xy 44.24426 0.77978) (xy 43.74134 0.84328) (xy 43.23842 0.89408) (xy 42.7355 0.93218)
+ (xy 42.23258 0.96012) (xy 41.72966 0.98044) (xy 41.22928 0.99314) (xy 40.72636 0.99822)
+ (xy 40.22344 1.00076) (xy 39.72052 0.99822) (xy 39.2176 0.99314) (xy 38.71468 0.98044)
+ (xy 38.21176 0.96012) (xy 37.70884 0.93218) (xy 37.20592 0.89408) (xy 36.703 0.84328)
+ (xy 36.20008 0.77978) (xy 35.69716 0.70104) (xy 35.19424 0.61214) (xy 34.69132 0.51562)
+ (xy 34.1884 0.4191) (xy 33.68548 0.32766) (xy 33.18256 0.25146) (xy 32.67964 0.1905)
+ (xy 32.17926 0.14732) (xy 31.67634 0.1143) (xy 31.17342 0.09398) (xy 30.6705 0.08128)
+ (xy 30.16758 0.0762) (xy 29.66466 0.08128) (xy 29.16174 0.09398) (xy 28.65882 0.1143)
+ (xy 28.1559 0.14732) (xy 27.65298 0.1905) (xy 27.15006 0.25146) (xy 26.64714 0.32766)
+ (xy 26.14422 0.4191) (xy 25.6413 0.51562) (xy 25.13838 0.61214) (xy 24.63546 0.70104)
+ (xy 24.13254 0.77978) (xy 23.62962 0.84328) (xy 23.12924 0.89408) (xy 22.62632 0.93218)
+ (xy 22.1234 0.96012) (xy 21.62048 0.98044) (xy 21.11756 0.99314) (xy 20.61464 0.99822)
+ (xy 20.11172 1.00076) (xy 19.6088 0.99822) (xy 19.10588 0.99314) (xy 18.60296 0.98044)
+ (xy 18.10004 0.96012) (xy 17.59712 0.93218) (xy 17.0942 0.89408) (xy 16.59128 0.84328)
+ (xy 16.08836 0.77978) (xy 15.58544 0.70104) (xy 15.08252 0.61214) (xy 14.5796 0.51562)
+ (xy 14.07922 0.4191) (xy 13.5763 0.32766) (xy 13.07338 0.25146) (xy 12.57046 0.1905)
+ (xy 12.06754 0.14732) (xy 11.56462 0.1143) (xy 11.0617 0.09398) (xy 10.55878 0.08128)
+ (xy 10.05586 0.0762) (xy 9.55294 0.08128) (xy 9.05002 0.09398) (xy 8.5471 0.1143)
+ (xy 8.04418 0.14732) (xy 7.54126 0.1905) (xy 7.03834 0.25146) (xy 6.53542 0.32766)
+ (xy 6.0325 0.4191) (xy 5.52958 0.51562) (xy 5.0292 0.61214) (xy 4.52628 0.70104)
+ (xy 4.02336 0.77978) (xy 3.52044 0.84328) (xy 3.01752 0.89408) (xy 2.5146 0.93218)
+ (xy 2.01168 0.96012) (xy 1.50876 0.98044) (xy 1.00584 0.99314) (xy 0.50292 0.99822)
+ (xy 0 1.00076) (xy -0.50292 0.99822) (xy -1.00584 0.99314) (xy -1.50876 0.98044)
+ (xy -2.01168 0.96012) (xy -2.5146 0.93218) (xy -3.01752 0.89408) (xy -3.52044 0.84328)
+ (xy -4.02082 0.77978) (xy -4.52374 0.70104) (xy -5.02666 0.61214) (xy -5.52958 0.51562)
+ (xy -6.0325 0.4191) (xy -6.53542 0.32766) (xy -7.03834 0.25146) (xy -7.54126 0.1905)
+ (xy -8.04418 0.14732) (xy -8.5471 0.1143) (xy -9.05002 0.09398) (xy -9.55294 0.08128)
+ (xy -10.05586 0.0762) (xy -10.55878 0.08128) (xy -11.0617 0.09398) (xy -11.56462 0.1143)
+ (xy -12.06754 0.14732) (xy -12.57046 0.1905) (xy -13.07084 0.25146) (xy -13.57376 0.32766)
+ (xy -14.07668 0.4191) (xy -14.5796 0.51562) (xy -15.08252 0.61214) (xy -15.58544 0.70104)
+ (xy -16.08836 0.77978) (xy -16.59128 0.84328) (xy -17.0942 0.89408) (xy -17.59712 0.93218)
+ (xy -18.10004 0.96012) (xy -18.60296 0.98044) (xy -19.10588 0.99314) (xy -19.6088 0.99822)
+ (xy -20.11172 1.00076) (xy -20.61464 0.99822) (xy -21.11756 0.99314) (xy -21.62048 0.98044)
+ (xy -22.12086 0.96012) (xy -22.62378 0.93218) (xy -23.1267 0.89408) (xy -23.62962 0.84328)
+ (xy -24.13254 0.77978) (xy -24.63546 0.70104) (xy -25.13838 0.61214) (xy -25.6413 0.51562)
+ (xy -26.14422 0.4191) (xy -26.64714 0.32766) (xy -27.15006 0.25146) (xy -27.65298 0.1905)
+ (xy -28.1559 0.14732) (xy -28.65882 0.1143) (xy -29.16174 0.09398) (xy -29.66466 0.08128)
+ (xy -30.16758 0.0762) (xy -30.6705 0.08128) (xy -31.17088 0.09398) (xy -31.6738 0.1143)
+ (xy -32.17672 0.14732) (xy -32.67964 0.1905) (xy -33.18256 0.25146) (xy -33.68548 0.32766)
+ (xy -34.1884 0.4191) (xy -34.69132 0.51562) (xy -35.19424 0.61214) (xy -35.69716 0.70104)
+ (xy -36.20008 0.77978) (xy -36.703 0.84328) (xy -37.20592 0.89408) (xy -37.70884 0.93218)
+ (xy -38.21176 0.96012) (xy -38.71468 0.98044) (xy -39.2176 0.99314) (xy -39.72052 0.99822)
+ (xy -40.22344 1.00076) (xy -40.72382 0.99822) (xy -41.22674 0.99314) (xy -41.72966 0.98044)
+ (xy -42.23258 0.96012) (xy -42.7355 0.93218) (xy -43.23842 0.89408) (xy -43.74134 0.84328)
+ (xy -44.24426 0.77978) (xy -44.74718 0.70104) (xy -45.2501 0.61214) (xy -45.75302 0.51562)
+ (xy -46.25594 0.4191) (xy -46.75886 0.32766) (xy -47.26178 0.25146) (xy -47.7647 0.1905)
+ (xy -48.26762 0.14732) (xy -48.77054 0.1143) (xy -49.27346 0.09398) (xy -49.77384 0.08128)
+ (xy -50.27676 0.0762) (xy -50.77968 0.08128) (xy -51.2826 0.09398) (xy -51.78552 0.1143)
+ (xy -52.28844 0.14732) (xy -52.79136 0.1905) (xy -53.29428 0.25146) (xy -53.7972 0.32766)
+ (xy -54.30012 0.4191) (xy -54.80304 0.51562) (xy -55.30596 0.61214) (xy -55.80888 0.70104)
+ (xy -56.3118 0.77978) (xy -56.81472 0.84328) (xy -57.31764 0.89408) (xy -57.82056 0.93218)
+ (xy -58.32348 0.96012) (xy -58.82386 0.98044) (xy -59.32678 0.99314) (xy -59.8297 0.99822)
+ (xy -60.33262 1.00076) (xy -60.83554 0.99822) (xy -61.33846 0.99314) (xy -61.84138 0.98044)
+ (xy -62.3443 0.96012) (xy -62.84722 0.93218) (xy -63.35014 0.89408) (xy -63.85306 0.84328)
+ (xy -64.35598 0.77978) (xy -64.8589 0.70104) (xy -65.36182 0.61214) (xy -65.86474 0.51562)
+ (xy -66.36766 0.4191) (xy -66.87058 0.32766) (xy -67.3735 0.25146) (xy -67.87388 0.1905)
+ (xy -68.3768 0.14732) (xy -68.87972 0.1143) (xy -69.38264 0.09398) (xy -69.88556 0.08128)
+ (xy -70.38848 0.0762) (xy -70.8914 0.08128) (xy -71.39432 0.09398) (xy -71.89724 0.1143)
+ (xy -72.40016 0.14732) (xy -72.90308 0.1905) (xy -73.406 0.25146) (xy -73.90892 0.32766)
+ (xy -74.41184 0.4191) (xy -74.91476 0.51562) (xy -75.41768 0.61214) (xy -75.9206 0.70104)
+ (xy -76.42352 0.77724) (xy -76.9239 0.84074) (xy -77.42682 0.889) (xy -77.92974 0.92456)
+ (xy -78.43266 0.94996) (xy -78.93558 0.96774) (xy -79.4385 0.98044) (xy -79.94142 0.98552)
+ (xy -80.44434 0.98552) (xy -80.94726 0.98044) (xy -81.45018 0.97282) (xy -81.9531 0.95758)
+ (xy -82.45602 0.93472) (xy -82.95894 0.90678) (xy -83.46186 0.86614) (xy -83.96478 0.81788)
+ (xy -84.4677 0.75692) (xy -84.97062 0.68834) (xy -85.47354 0.61214) (xy -85.97392 0.5334)
+ (xy -86.47684 0.45466) (xy -86.97976 0.381) (xy -87.48268 0.32004) (xy -87.9856 0.2667)
+ (xy -88.48852 0.2286) (xy -88.99144 0.19812) (xy -89.49436 0.18034) (xy -89.99728 0.17272)
+ (xy -90.5002 0.17272) (xy -91.00312 0.18034) (xy -91.50604 0.19558) (xy -92.00896 0.22098)
+ (xy -92.51188 0.25654) (xy -93.0148 0.29972) (xy -93.51772 0.3556) (xy -94.02064 0.41656)
+ (xy -94.52356 0.48006) (xy -95.02394 0.54864) (xy -95.52686 0.61214) (xy -96.02978 0.6731)
+ (xy -96.5327 0.72644) (xy -97.03562 0.77216) (xy -97.53854 0.81026) (xy -98.04146 0.8382)
+ (xy -98.54438 0.86106) (xy -99.0473 0.87884) (xy -99.55022 0.889) (xy -100.05314 0.89408)
+ (xy -100.55606 0.89408) (xy -101.05898 0.889) (xy -101.5619 0.8763) (xy -102.06482 0.86106)
+ (xy -102.56774 0.84074) (xy -103.07066 0.8128) (xy -103.57358 0.78232) (xy -104.07396 0.74422)
+ (xy -104.57688 0.70358) (xy -105.0798 0.65786) (xy -105.58272 0.61214) (xy -106.08564 0.56642)
+ (xy -106.58856 0.5207) (xy -107.09148 0.47752) (xy -107.5944 0.43942) (xy -108.09732 0.40894)
+ (xy -108.60024 0.38354) (xy -109.10316 0.36576) (xy -109.60608 0.35306) (xy -110.109 0.35052)
+ (xy -110.61192 0.35052) (xy -111.11484 0.36068) (xy -111.61776 0.37338) (xy -112.12068 0.3937)
+ (xy -112.6236 0.41656) (xy -113.12398 0.44704) (xy -113.6269 0.47752) (xy -114.12982 0.51054)
+ (xy -114.63274 0.5461) (xy -115.13566 0.57912) (xy -115.63858 0.61214) (xy -116.1415 0.64262)
+ (xy -116.64442 0.66802) (xy -117.14734 0.69342) (xy -117.65026 0.7112) (xy -118.15318 0.72898)
+ (xy -118.6561 0.73914) (xy -119.15902 0.7493) (xy -119.66194 0.75184) (xy -120.16486 0.75438)
+ (xy -120.66778 0.75184) (xy -121.1707 0.74422) (xy -121.67362 0.7366) (xy -122.174 0.72644)
+ (xy -122.67692 0.7112) (xy -123.17984 0.69596) (xy -123.68276 0.68072) (xy -124.18568 0.66294)
+ (xy -124.6886 0.64516) (xy -125.19152 0.62738) (xy -125.69444 0.61214) (xy -126.19736 0.5969)
+ (xy -126.70028 0.5842) (xy -127.2032 0.57404) (xy -127.70612 0.56388) (xy -128.20904 0.5588)
+ (xy -128.71196 0.55372) (xy -129.21488 0.55372) (xy -129.7178 0.55372) (xy -130.22072 0.55626)
+ (xy -130.72364 0.56134) (xy -131.22402 0.56642) (xy -131.72694 0.57404) (xy -132.22986 0.58166)
+ (xy -132.73278 0.58674) (xy -133.2357 0.59436) (xy -133.73862 0.59944) (xy -134.24154 0.60452)
+ (xy -134.74446 0.6096) (xy -135.24738 0.61214) (xy -135.7503 0.61214) (xy -135.7503 0)) (layer Dessus.Cu) (width 0.3048))
+ (pad 2 smd rect (at -135.7503 0) (size 1.22428 1.22428)
+ (layers Dessus.Cu)
+ )
+ (pad 1 smd rect (at 135.7503 0) (size 1.22428 1.22428)
+ (layers Dessus.Cu)
+ )
+ )
+
+ (module POLY (layer Dessus.Cu) (tedit 4278D8F6) (tstamp 0)
+ (at 203.17968 117.21084)
+ (fp_text reference POLY (at 0 0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_text value VAL** (at 0 -0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_poly (pts (xy -135.7503 0) (xy -135.7503 0.61214) (xy -135.24738 0.61214) (xy -134.74446 0.6096)
+ (xy -134.24154 0.60452) (xy -133.73862 0.59944) (xy -133.2357 0.59436) (xy -132.73278 0.58674)
+ (xy -132.22986 0.58166) (xy -131.72694 0.57404) (xy -131.22402 0.56642) (xy -130.72364 0.56134)
+ (xy -130.22072 0.55626) (xy -129.7178 0.55372) (xy -129.21488 0.55372) (xy -128.71196 0.55372)
+ (xy -128.20904 0.5588) (xy -127.70612 0.56388) (xy -127.2032 0.57404) (xy -126.70028 0.5842)
+ (xy -126.19736 0.5969) (xy -125.69444 0.61214) (xy -125.19152 0.62738) (xy -124.6886 0.64516)
+ (xy -124.18568 0.66294) (xy -123.68276 0.68072) (xy -123.17984 0.69596) (xy -122.67692 0.7112)
+ (xy -122.174 0.72644) (xy -121.67362 0.7366) (xy -121.1707 0.74422) (xy -120.66778 0.75184)
+ (xy -120.16486 0.75438) (xy -119.66194 0.75184) (xy -119.15902 0.7493) (xy -118.6561 0.73914)
+ (xy -118.15318 0.72898) (xy -117.65026 0.7112) (xy -117.14734 0.69342) (xy -116.64442 0.66802)
+ (xy -116.1415 0.64262) (xy -115.63858 0.61214) (xy -115.13566 0.57912) (xy -114.63274 0.5461)
+ (xy -114.12982 0.51054) (xy -113.6269 0.47752) (xy -113.12398 0.44704) (xy -112.6236 0.41656)
+ (xy -112.12068 0.3937) (xy -111.61776 0.37338) (xy -111.11484 0.36068) (xy -110.61192 0.35052)
+ (xy -110.109 0.35052) (xy -109.60608 0.35306) (xy -109.10316 0.36576) (xy -108.60024 0.38354)
+ (xy -108.09732 0.40894) (xy -107.5944 0.43942) (xy -107.09148 0.47752) (xy -106.58856 0.5207)
+ (xy -106.08564 0.56642) (xy -105.58272 0.61214) (xy -105.0798 0.65786) (xy -104.57688 0.70358)
+ (xy -104.07396 0.74422) (xy -103.57358 0.78232) (xy -103.07066 0.8128) (xy -102.56774 0.84074)
+ (xy -102.06482 0.86106) (xy -101.5619 0.8763) (xy -101.05898 0.889) (xy -100.55606 0.89408)
+ (xy -100.05314 0.89408) (xy -99.55022 0.889) (xy -99.0473 0.87884) (xy -98.54438 0.86106)
+ (xy -98.04146 0.8382) (xy -97.53854 0.81026) (xy -97.03562 0.77216) (xy -96.5327 0.72644)
+ (xy -96.02978 0.6731) (xy -95.52686 0.61214) (xy -95.02394 0.54864) (xy -94.52356 0.48006)
+ (xy -94.02064 0.41656) (xy -93.51772 0.3556) (xy -93.0148 0.29972) (xy -92.51188 0.25654)
+ (xy -92.00896 0.22098) (xy -91.50604 0.19558) (xy -91.00312 0.18034) (xy -90.5002 0.17272)
+ (xy -89.99728 0.17272) (xy -89.49436 0.18034) (xy -88.99144 0.19812) (xy -88.48852 0.2286)
+ (xy -87.9856 0.2667) (xy -87.48268 0.32004) (xy -86.97976 0.381) (xy -86.47684 0.45466)
+ (xy -85.97392 0.5334) (xy -85.47354 0.61214) (xy -84.97062 0.68834) (xy -84.4677 0.75692)
+ (xy -83.96478 0.81788) (xy -83.46186 0.86614) (xy -82.95894 0.90678) (xy -82.45602 0.93472)
+ (xy -81.9531 0.95758) (xy -81.45018 0.97282) (xy -80.94726 0.98044) (xy -80.44434 0.98552)
+ (xy -79.94142 0.98552) (xy -79.4385 0.98044) (xy -78.93558 0.96774) (xy -78.43266 0.94996)
+ (xy -77.92974 0.92456) (xy -77.42682 0.889) (xy -76.9239 0.84074) (xy -76.42352 0.77724)
+ (xy -75.9206 0.70104) (xy -75.41768 0.61214) (xy -74.91476 0.51562) (xy -74.41184 0.4191)
+ (xy -73.90892 0.32766) (xy -73.406 0.25146) (xy -72.90308 0.1905) (xy -72.40016 0.14732)
+ (xy -71.89724 0.1143) (xy -71.39432 0.09398) (xy -70.8914 0.08128) (xy -70.38848 0.0762)
+ (xy -69.88556 0.08128) (xy -69.38264 0.09398) (xy -68.87972 0.1143) (xy -68.3768 0.14732)
+ (xy -67.87388 0.1905) (xy -67.3735 0.25146) (xy -66.87058 0.32766) (xy -66.36766 0.4191)
+ (xy -65.86474 0.51562) (xy -65.36182 0.61214) (xy -64.8589 0.70104) (xy -64.35598 0.77978)
+ (xy -63.85306 0.84328) (xy -63.35014 0.89408) (xy -62.84722 0.93218) (xy -62.3443 0.96012)
+ (xy -61.84138 0.98044) (xy -61.33846 0.99314) (xy -60.83554 0.99822) (xy -60.33262 1.00076)
+ (xy -59.8297 0.99822) (xy -59.32678 0.99314) (xy -58.82386 0.98044) (xy -58.32348 0.96012)
+ (xy -57.82056 0.93218) (xy -57.31764 0.89408) (xy -56.81472 0.84328) (xy -56.3118 0.77978)
+ (xy -55.80888 0.70104) (xy -55.30596 0.61214) (xy -54.80304 0.51562) (xy -54.30012 0.4191)
+ (xy -53.7972 0.32766) (xy -53.29428 0.25146) (xy -52.79136 0.1905) (xy -52.28844 0.14732)
+ (xy -51.78552 0.1143) (xy -51.2826 0.09398) (xy -50.77968 0.08128) (xy -50.27676 0.0762)
+ (xy -49.77384 0.08128) (xy -49.27346 0.09398) (xy -48.77054 0.1143) (xy -48.26762 0.14732)
+ (xy -47.7647 0.1905) (xy -47.26178 0.25146) (xy -46.75886 0.32766) (xy -46.25594 0.4191)
+ (xy -45.75302 0.51562) (xy -45.2501 0.61214) (xy -44.74718 0.70104) (xy -44.24426 0.77978)
+ (xy -43.74134 0.84328) (xy -43.23842 0.89408) (xy -42.7355 0.93218) (xy -42.23258 0.96012)
+ (xy -41.72966 0.98044) (xy -41.22674 0.99314) (xy -40.72382 0.99822) (xy -40.22344 1.00076)
+ (xy -39.72052 0.99822) (xy -39.2176 0.99314) (xy -38.71468 0.98044) (xy -38.21176 0.96012)
+ (xy -37.70884 0.93218) (xy -37.20592 0.89408) (xy -36.703 0.84328) (xy -36.20008 0.77978)
+ (xy -35.69716 0.70104) (xy -35.19424 0.61214) (xy -34.69132 0.51562) (xy -34.1884 0.4191)
+ (xy -33.68548 0.32766) (xy -33.18256 0.25146) (xy -32.67964 0.1905) (xy -32.17672 0.14732)
+ (xy -31.6738 0.1143) (xy -31.17088 0.09398) (xy -30.6705 0.08128) (xy -30.16758 0.0762)
+ (xy -29.66466 0.08128) (xy -29.16174 0.09398) (xy -28.65882 0.1143) (xy -28.1559 0.14732)
+ (xy -27.65298 0.1905) (xy -27.15006 0.25146) (xy -26.64714 0.32766) (xy -26.14422 0.4191)
+ (xy -25.6413 0.51562) (xy -25.13838 0.61214) (xy -24.63546 0.70104) (xy -24.13254 0.77978)
+ (xy -23.62962 0.84328) (xy -23.1267 0.89408) (xy -22.62378 0.93218) (xy -22.12086 0.96012)
+ (xy -21.62048 0.98044) (xy -21.11756 0.99314) (xy -20.61464 0.99822) (xy -20.11172 1.00076)
+ (xy -19.6088 0.99822) (xy -19.10588 0.99314) (xy -18.60296 0.98044) (xy -18.10004 0.96012)
+ (xy -17.59712 0.93218) (xy -17.0942 0.89408) (xy -16.59128 0.84328) (xy -16.08836 0.77978)
+ (xy -15.58544 0.70104) (xy -15.08252 0.61214) (xy -14.5796 0.51562) (xy -14.07668 0.4191)
+ (xy -13.57376 0.32766) (xy -13.07084 0.25146) (xy -12.57046 0.1905) (xy -12.06754 0.14732)
+ (xy -11.56462 0.1143) (xy -11.0617 0.09398) (xy -10.55878 0.08128) (xy -10.05586 0.0762)
+ (xy -9.55294 0.08128) (xy -9.05002 0.09398) (xy -8.5471 0.1143) (xy -8.04418 0.14732)
+ (xy -7.54126 0.1905) (xy -7.03834 0.25146) (xy -6.53542 0.32766) (xy -6.0325 0.4191)
+ (xy -5.52958 0.51562) (xy -5.02666 0.61214) (xy -4.52374 0.70104) (xy -4.02082 0.77978)
+ (xy -3.52044 0.84328) (xy -3.01752 0.89408) (xy -2.5146 0.93218) (xy -2.01168 0.96012)
+ (xy -1.50876 0.98044) (xy -1.00584 0.99314) (xy -0.50292 0.99822) (xy 0 1.00076)
+ (xy 0.50292 0.99822) (xy 1.00584 0.99314) (xy 1.50876 0.98044) (xy 2.01168 0.96012)
+ (xy 2.5146 0.93218) (xy 3.01752 0.89408) (xy 3.52044 0.84328) (xy 4.02336 0.77978)
+ (xy 4.52628 0.70104) (xy 5.0292 0.61214) (xy 5.52958 0.51562) (xy 6.0325 0.4191)
+ (xy 6.53542 0.32766) (xy 7.03834 0.25146) (xy 7.54126 0.1905) (xy 8.04418 0.14732)
+ (xy 8.5471 0.1143) (xy 9.05002 0.09398) (xy 9.55294 0.08128) (xy 10.05586 0.0762)
+ (xy 10.55878 0.08128) (xy 11.0617 0.09398) (xy 11.56462 0.1143) (xy 12.06754 0.14732)
+ (xy 12.57046 0.1905) (xy 13.07338 0.25146) (xy 13.5763 0.32766) (xy 14.07922 0.4191)
+ (xy 14.5796 0.51562) (xy 15.08252 0.61214) (xy 15.58544 0.70104) (xy 16.08836 0.77978)
+ (xy 16.59128 0.84328) (xy 17.0942 0.89408) (xy 17.59712 0.93218) (xy 18.10004 0.96012)
+ (xy 18.60296 0.98044) (xy 19.10588 0.99314) (xy 19.6088 0.99822) (xy 20.11172 1.00076)
+ (xy 20.61464 0.99822) (xy 21.11756 0.99314) (xy 21.62048 0.98044) (xy 22.1234 0.96012)
+ (xy 22.62632 0.93218) (xy 23.12924 0.89408) (xy 23.62962 0.84328) (xy 24.13254 0.77978)
+ (xy 24.63546 0.70104) (xy 25.13838 0.61214) (xy 25.6413 0.51562) (xy 26.14422 0.4191)
+ (xy 26.64714 0.32766) (xy 27.15006 0.25146) (xy 27.65298 0.1905) (xy 28.1559 0.14732)
+ (xy 28.65882 0.1143) (xy 29.16174 0.09398) (xy 29.66466 0.08128) (xy 30.16758 0.0762)
+ (xy 30.6705 0.08128) (xy 31.17342 0.09398) (xy 31.67634 0.1143) (xy 32.17926 0.14732)
+ (xy 32.67964 0.1905) (xy 33.18256 0.25146) (xy 33.68548 0.32766) (xy 34.1884 0.4191)
+ (xy 34.69132 0.51562) (xy 35.19424 0.61214) (xy 35.69716 0.70104) (xy 36.20008 0.77978)
+ (xy 36.703 0.84328) (xy 37.20592 0.89408) (xy 37.70884 0.93218) (xy 38.21176 0.96012)
+ (xy 38.71468 0.98044) (xy 39.2176 0.99314) (xy 39.72052 0.99822) (xy 40.22344 1.00076)
+ (xy 40.72636 0.99822) (xy 41.22928 0.99314) (xy 41.72966 0.98044) (xy 42.23258 0.96012)
+ (xy 42.7355 0.93218) (xy 43.23842 0.89408) (xy 43.74134 0.84328) (xy 44.24426 0.77978)
+ (xy 44.74718 0.70104) (xy 45.2501 0.61214) (xy 45.75302 0.51562) (xy 46.25594 0.4191)
+ (xy 46.75886 0.32766) (xy 47.26178 0.25146) (xy 47.7647 0.1905) (xy 48.26762 0.14732)
+ (xy 48.77054 0.1143) (xy 49.27346 0.09398) (xy 49.77638 0.08128) (xy 50.2793 0.0762)
+ (xy 50.77968 0.08128) (xy 51.2826 0.09398) (xy 51.78552 0.1143) (xy 52.28844 0.14732)
+ (xy 52.79136 0.1905) (xy 53.29428 0.25146) (xy 53.7972 0.32766) (xy 54.30012 0.4191)
+ (xy 54.80304 0.51562) (xy 55.30596 0.61214) (xy 55.80888 0.70104) (xy 56.3118 0.77978)
+ (xy 56.81472 0.84328) (xy 57.31764 0.89408) (xy 57.82056 0.93218) (xy 58.32348 0.96012)
+ (xy 58.8264 0.98044) (xy 59.32932 0.99314) (xy 59.83224 0.99822) (xy 60.33262 1.00076)
+ (xy 60.83554 0.99822) (xy 61.33846 0.99314) (xy 61.84138 0.98044) (xy 62.3443 0.96012)
+ (xy 62.84722 0.93218) (xy 63.35014 0.89408) (xy 63.85306 0.84328) (xy 64.35598 0.77978)
+ (xy 64.8589 0.70104) (xy 65.36182 0.61214) (xy 65.86474 0.51562) (xy 66.36766 0.4191)
+ (xy 66.87058 0.32766) (xy 67.3735 0.25146) (xy 67.87642 0.1905) (xy 68.37934 0.14732)
+ (xy 68.88226 0.1143) (xy 69.38264 0.09398) (xy 69.88556 0.08128) (xy 70.38848 0.0762)
+ (xy 70.8914 0.08128) (xy 71.39432 0.09398) (xy 71.89724 0.1143) (xy 72.40016 0.14732)
+ (xy 72.90308 0.1905) (xy 73.406 0.25146) (xy 73.90892 0.32766) (xy 74.41184 0.4191)
+ (xy 74.91476 0.51562) (xy 75.41768 0.61214) (xy 75.9206 0.70104) (xy 76.42352 0.77724)
+ (xy 76.92644 0.84074) (xy 77.42936 0.889) (xy 77.93228 0.92456) (xy 78.43266 0.94996)
+ (xy 78.93558 0.96774) (xy 79.4385 0.98044) (xy 79.94142 0.98552) (xy 80.44434 0.98552)
+ (xy 80.94726 0.98044) (xy 81.45018 0.97282) (xy 81.9531 0.95758) (xy 82.45602 0.93472)
+ (xy 82.95894 0.90678) (xy 83.46186 0.86614) (xy 83.96478 0.81788) (xy 84.4677 0.75692)
+ (xy 84.97062 0.68834) (xy 85.47354 0.61214) (xy 85.97646 0.5334) (xy 86.47938 0.45466)
+ (xy 86.9823 0.381) (xy 87.48268 0.32004) (xy 87.9856 0.2667) (xy 88.48852 0.2286)
+ (xy 88.99144 0.19812) (xy 89.49436 0.18034) (xy 89.99728 0.17272) (xy 90.5002 0.17272)
+ (xy 91.00312 0.18034) (xy 91.50604 0.19558) (xy 92.00896 0.22098) (xy 92.51188 0.25654)
+ (xy 93.0148 0.29972) (xy 93.51772 0.3556) (xy 94.02064 0.41656) (xy 94.52356 0.48006)
+ (xy 95.02648 0.54864) (xy 95.5294 0.61214) (xy 96.03232 0.6731) (xy 96.5327 0.72644)
+ (xy 97.03562 0.77216) (xy 97.53854 0.81026) (xy 98.04146 0.8382) (xy 98.54438 0.86106)
+ (xy 99.0473 0.87884) (xy 99.55022 0.889) (xy 100.05314 0.89408) (xy 100.55606 0.89408)
+ (xy 101.05898 0.889) (xy 101.5619 0.8763) (xy 102.06482 0.86106) (xy 102.56774 0.84074)
+ (xy 103.07066 0.8128) (xy 103.57358 0.78232) (xy 104.0765 0.74422) (xy 104.57942 0.70358)
+ (xy 105.08234 0.65786) (xy 105.58272 0.61214) (xy 106.08564 0.56642) (xy 106.58856 0.5207)
+ (xy 107.09148 0.47752) (xy 107.5944 0.43942) (xy 108.09732 0.40894) (xy 108.60024 0.38354)
+ (xy 109.10316 0.36576) (xy 109.60608 0.35306) (xy 110.109 0.35052) (xy 110.61192 0.35052)
+ (xy 111.11484 0.36068) (xy 111.61776 0.37338) (xy 112.12068 0.3937) (xy 112.6236 0.41656)
+ (xy 113.12652 0.44704) (xy 113.62944 0.47752) (xy 114.13236 0.51054) (xy 114.63274 0.5461)
+ (xy 115.13566 0.57912) (xy 115.63858 0.61214) (xy 116.1415 0.64262) (xy 116.64442 0.66802)
+ (xy 117.14734 0.69342) (xy 117.65026 0.7112) (xy 118.15318 0.72898) (xy 118.6561 0.73914)
+ (xy 119.15902 0.7493) (xy 119.66194 0.75184) (xy 120.16486 0.75438) (xy 120.66778 0.75184)
+ (xy 121.1707 0.74422) (xy 121.67362 0.7366) (xy 122.17654 0.72644) (xy 122.67946 0.7112)
+ (xy 123.18238 0.69596) (xy 123.68276 0.68072) (xy 124.18568 0.66294) (xy 124.6886 0.64516)
+ (xy 125.19152 0.62738) (xy 125.69444 0.61214) (xy 126.19736 0.5969) (xy 126.70028 0.5842)
+ (xy 127.2032 0.57404) (xy 127.70612 0.56388) (xy 128.20904 0.5588) (xy 128.71196 0.55372)
+ (xy 129.21488 0.55372) (xy 129.7178 0.55372) (xy 130.22072 0.55626) (xy 130.72364 0.56134)
+ (xy 131.22656 0.56642) (xy 131.72948 0.57404) (xy 132.2324 0.58166) (xy 132.73278 0.58674)
+ (xy 133.2357 0.59436) (xy 133.73862 0.59944) (xy 134.24154 0.60452) (xy 134.74446 0.6096)
+ (xy 135.24738 0.61214) (xy 135.7503 0.61214) (xy 135.7503 0)) (layer Dessus.Cu) (width 0.3048))
+ (pad 2 smd rect (at -135.7503 0.3048) (size 0.61214 0.61214)
+ (layers Dessus.Cu)
+ )
+ (pad 1 smd rect (at 135.7503 0.3048) (size 0.61214 0.61214)
+ (layers Dessus.Cu)
+ )
+ )
+
+ (module POLY (layer Dessus.Cu) (tedit 4278D8F1) (tstamp 0)
+ (at 203.2 119.38)
+ (fp_text reference POLY (at 0 0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_text value VAL** (at 0 -0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_poly (pts (xy -135.7503 0) (xy -135.7503 -0.61214) (xy -135.24738 -0.61214) (xy -134.74446 -0.6096)
+ (xy -134.24154 -0.60452) (xy -133.73862 -0.59944) (xy -133.2357 -0.59436) (xy -132.73278 -0.58674)
+ (xy -132.22986 -0.58166) (xy -131.72694 -0.57404) (xy -131.22402 -0.56642) (xy -130.72364 -0.56134)
+ (xy -130.22072 -0.55626) (xy -129.7178 -0.55372) (xy -129.21488 -0.55372) (xy -128.71196 -0.55372)
+ (xy -128.20904 -0.5588) (xy -127.70612 -0.56388) (xy -127.2032 -0.57404) (xy -126.70028 -0.5842)
+ (xy -126.19736 -0.5969) (xy -125.69444 -0.61214) (xy -125.19152 -0.62738) (xy -124.6886 -0.64516)
+ (xy -124.18568 -0.66294) (xy -123.68276 -0.68072) (xy -123.17984 -0.69596) (xy -122.67692 -0.7112)
+ (xy -122.174 -0.72644) (xy -121.67362 -0.7366) (xy -121.1707 -0.74422) (xy -120.66778 -0.75184)
+ (xy -120.16486 -0.75438) (xy -119.66194 -0.75184) (xy -119.15902 -0.7493) (xy -118.6561 -0.73914)
+ (xy -118.15318 -0.72898) (xy -117.65026 -0.7112) (xy -117.14734 -0.69342) (xy -116.64442 -0.66802)
+ (xy -116.1415 -0.64262) (xy -115.63858 -0.61214) (xy -115.13566 -0.57912) (xy -114.63274 -0.5461)
+ (xy -114.12982 -0.51054) (xy -113.6269 -0.47752) (xy -113.12398 -0.44704) (xy -112.6236 -0.41656)
+ (xy -112.12068 -0.3937) (xy -111.61776 -0.37338) (xy -111.11484 -0.36068) (xy -110.61192 -0.35052)
+ (xy -110.109 -0.35052) (xy -109.60608 -0.35306) (xy -109.10316 -0.36576) (xy -108.60024 -0.38354)
+ (xy -108.09732 -0.40894) (xy -107.5944 -0.43942) (xy -107.09148 -0.47752) (xy -106.58856 -0.5207)
+ (xy -106.08564 -0.56642) (xy -105.58272 -0.61214) (xy -105.0798 -0.65786) (xy -104.57688 -0.70358)
+ (xy -104.07396 -0.74422) (xy -103.57358 -0.78232) (xy -103.07066 -0.8128) (xy -102.56774 -0.84074)
+ (xy -102.06482 -0.86106) (xy -101.5619 -0.8763) (xy -101.05898 -0.889) (xy -100.55606 -0.89408)
+ (xy -100.05314 -0.89408) (xy -99.55022 -0.889) (xy -99.0473 -0.87884) (xy -98.54438 -0.86106)
+ (xy -98.04146 -0.8382) (xy -97.53854 -0.81026) (xy -97.03562 -0.77216) (xy -96.5327 -0.72644)
+ (xy -96.02978 -0.6731) (xy -95.52686 -0.61214) (xy -95.02394 -0.54864) (xy -94.52356 -0.48006)
+ (xy -94.02064 -0.41656) (xy -93.51772 -0.3556) (xy -93.0148 -0.29972) (xy -92.51188 -0.25654)
+ (xy -92.00896 -0.22098) (xy -91.50604 -0.19558) (xy -91.00312 -0.18034) (xy -90.5002 -0.17272)
+ (xy -89.99728 -0.17272) (xy -89.49436 -0.18034) (xy -88.99144 -0.19812) (xy -88.48852 -0.2286)
+ (xy -87.9856 -0.2667) (xy -87.48268 -0.32004) (xy -86.97976 -0.381) (xy -86.47684 -0.45466)
+ (xy -85.97392 -0.5334) (xy -85.47354 -0.61214) (xy -84.97062 -0.68834) (xy -84.4677 -0.75692)
+ (xy -83.96478 -0.81788) (xy -83.46186 -0.86614) (xy -82.95894 -0.90678) (xy -82.45602 -0.93472)
+ (xy -81.9531 -0.95758) (xy -81.45018 -0.97282) (xy -80.94726 -0.98044) (xy -80.44434 -0.98552)
+ (xy -79.94142 -0.98552) (xy -79.4385 -0.98044) (xy -78.93558 -0.96774) (xy -78.43266 -0.94996)
+ (xy -77.92974 -0.92456) (xy -77.42682 -0.889) (xy -76.9239 -0.84074) (xy -76.42352 -0.77724)
+ (xy -75.9206 -0.70104) (xy -75.41768 -0.61214) (xy -74.91476 -0.51562) (xy -74.41184 -0.4191)
+ (xy -73.90892 -0.32766) (xy -73.406 -0.25146) (xy -72.90308 -0.1905) (xy -72.40016 -0.14732)
+ (xy -71.89724 -0.1143) (xy -71.39432 -0.09398) (xy -70.8914 -0.08128) (xy -70.38848 -0.0762)
+ (xy -69.88556 -0.08128) (xy -69.38264 -0.09398) (xy -68.87972 -0.1143) (xy -68.3768 -0.14732)
+ (xy -67.87388 -0.1905) (xy -67.3735 -0.25146) (xy -66.87058 -0.32766) (xy -66.36766 -0.4191)
+ (xy -65.86474 -0.51562) (xy -65.36182 -0.61214) (xy -64.8589 -0.70104) (xy -64.35598 -0.77978)
+ (xy -63.85306 -0.84328) (xy -63.35014 -0.89408) (xy -62.84722 -0.93218) (xy -62.3443 -0.96012)
+ (xy -61.84138 -0.98044) (xy -61.33846 -0.99314) (xy -60.83554 -0.99822) (xy -60.33262 -1.00076)
+ (xy -59.8297 -0.99822) (xy -59.32678 -0.99314) (xy -58.82386 -0.98044) (xy -58.32348 -0.96012)
+ (xy -57.82056 -0.93218) (xy -57.31764 -0.89408) (xy -56.81472 -0.84328) (xy -56.3118 -0.77978)
+ (xy -55.80888 -0.70104) (xy -55.30596 -0.61214) (xy -54.80304 -0.51562) (xy -54.30012 -0.4191)
+ (xy -53.7972 -0.32766) (xy -53.29428 -0.25146) (xy -52.79136 -0.1905) (xy -52.28844 -0.14732)
+ (xy -51.78552 -0.1143) (xy -51.2826 -0.09398) (xy -50.77968 -0.08128) (xy -50.27676 -0.0762)
+ (xy -49.77384 -0.08128) (xy -49.27346 -0.09398) (xy -48.77054 -0.1143) (xy -48.26762 -0.14732)
+ (xy -47.7647 -0.1905) (xy -47.26178 -0.25146) (xy -46.75886 -0.32766) (xy -46.25594 -0.4191)
+ (xy -45.75302 -0.51562) (xy -45.2501 -0.61214) (xy -44.74718 -0.70104) (xy -44.24426 -0.77978)
+ (xy -43.74134 -0.84328) (xy -43.23842 -0.89408) (xy -42.7355 -0.93218) (xy -42.23258 -0.96012)
+ (xy -41.72966 -0.98044) (xy -41.22674 -0.99314) (xy -40.72382 -0.99822) (xy -40.22344 -1.00076)
+ (xy -39.72052 -0.99822) (xy -39.2176 -0.99314) (xy -38.71468 -0.98044) (xy -38.21176 -0.96012)
+ (xy -37.70884 -0.93218) (xy -37.20592 -0.89408) (xy -36.703 -0.84328) (xy -36.20008 -0.77978)
+ (xy -35.69716 -0.70104) (xy -35.19424 -0.61214) (xy -34.69132 -0.51562) (xy -34.1884 -0.4191)
+ (xy -33.68548 -0.32766) (xy -33.18256 -0.25146) (xy -32.67964 -0.1905) (xy -32.17672 -0.14732)
+ (xy -31.6738 -0.1143) (xy -31.17088 -0.09398) (xy -30.6705 -0.08128) (xy -30.16758 -0.0762)
+ (xy -29.66466 -0.08128) (xy -29.16174 -0.09398) (xy -28.65882 -0.1143) (xy -28.1559 -0.14732)
+ (xy -27.65298 -0.1905) (xy -27.15006 -0.25146) (xy -26.64714 -0.32766) (xy -26.14422 -0.4191)
+ (xy -25.6413 -0.51562) (xy -25.13838 -0.61214) (xy -24.63546 -0.70104) (xy -24.13254 -0.77978)
+ (xy -23.62962 -0.84328) (xy -23.1267 -0.89408) (xy -22.62378 -0.93218) (xy -22.12086 -0.96012)
+ (xy -21.62048 -0.98044) (xy -21.11756 -0.99314) (xy -20.61464 -0.99822) (xy -20.11172 -1.00076)
+ (xy -19.6088 -0.99822) (xy -19.10588 -0.99314) (xy -18.60296 -0.98044) (xy -18.10004 -0.96012)
+ (xy -17.59712 -0.93218) (xy -17.0942 -0.89408) (xy -16.59128 -0.84328) (xy -16.08836 -0.77978)
+ (xy -15.58544 -0.70104) (xy -15.08252 -0.61214) (xy -14.5796 -0.51562) (xy -14.07668 -0.4191)
+ (xy -13.57376 -0.32766) (xy -13.07084 -0.25146) (xy -12.57046 -0.1905) (xy -12.06754 -0.14732)
+ (xy -11.56462 -0.1143) (xy -11.0617 -0.09398) (xy -10.55878 -0.08128) (xy -10.05586 -0.0762)
+ (xy -9.55294 -0.08128) (xy -9.05002 -0.09398) (xy -8.5471 -0.1143) (xy -8.04418 -0.14732)
+ (xy -7.54126 -0.1905) (xy -7.03834 -0.25146) (xy -6.53542 -0.32766) (xy -6.0325 -0.4191)
+ (xy -5.52958 -0.51562) (xy -5.02666 -0.61214) (xy -4.52374 -0.70104) (xy -4.02082 -0.77978)
+ (xy -3.52044 -0.84328) (xy -3.01752 -0.89408) (xy -2.5146 -0.93218) (xy -2.01168 -0.96012)
+ (xy -1.50876 -0.98044) (xy -1.00584 -0.99314) (xy -0.50292 -0.99822) (xy 0 -1.00076)
+ (xy 0.50292 -0.99822) (xy 1.00584 -0.99314) (xy 1.50876 -0.98044) (xy 2.01168 -0.96012)
+ (xy 2.5146 -0.93218) (xy 3.01752 -0.89408) (xy 3.52044 -0.84328) (xy 4.02336 -0.77978)
+ (xy 4.52628 -0.70104) (xy 5.0292 -0.61214) (xy 5.52958 -0.51562) (xy 6.0325 -0.4191)
+ (xy 6.53542 -0.32766) (xy 7.03834 -0.25146) (xy 7.54126 -0.1905) (xy 8.04418 -0.14732)
+ (xy 8.5471 -0.1143) (xy 9.05002 -0.09398) (xy 9.55294 -0.08128) (xy 10.05586 -0.0762)
+ (xy 10.55878 -0.08128) (xy 11.0617 -0.09398) (xy 11.56462 -0.1143) (xy 12.06754 -0.14732)
+ (xy 12.57046 -0.1905) (xy 13.07338 -0.25146) (xy 13.5763 -0.32766) (xy 14.07922 -0.4191)
+ (xy 14.5796 -0.51562) (xy 15.08252 -0.61214) (xy 15.58544 -0.70104) (xy 16.08836 -0.77978)
+ (xy 16.59128 -0.84328) (xy 17.0942 -0.89408) (xy 17.59712 -0.93218) (xy 18.10004 -0.96012)
+ (xy 18.60296 -0.98044) (xy 19.10588 -0.99314) (xy 19.6088 -0.99822) (xy 20.11172 -1.00076)
+ (xy 20.61464 -0.99822) (xy 21.11756 -0.99314) (xy 21.62048 -0.98044) (xy 22.1234 -0.96012)
+ (xy 22.62632 -0.93218) (xy 23.12924 -0.89408) (xy 23.62962 -0.84328) (xy 24.13254 -0.77978)
+ (xy 24.63546 -0.70104) (xy 25.13838 -0.61214) (xy 25.6413 -0.51562) (xy 26.14422 -0.4191)
+ (xy 26.64714 -0.32766) (xy 27.15006 -0.25146) (xy 27.65298 -0.1905) (xy 28.1559 -0.14732)
+ (xy 28.65882 -0.1143) (xy 29.16174 -0.09398) (xy 29.66466 -0.08128) (xy 30.16758 -0.0762)
+ (xy 30.6705 -0.08128) (xy 31.17342 -0.09398) (xy 31.67634 -0.1143) (xy 32.17926 -0.14732)
+ (xy 32.67964 -0.1905) (xy 33.18256 -0.25146) (xy 33.68548 -0.32766) (xy 34.1884 -0.4191)
+ (xy 34.69132 -0.51562) (xy 35.19424 -0.61214) (xy 35.69716 -0.70104) (xy 36.20008 -0.77978)
+ (xy 36.703 -0.84328) (xy 37.20592 -0.89408) (xy 37.70884 -0.93218) (xy 38.21176 -0.96012)
+ (xy 38.71468 -0.98044) (xy 39.2176 -0.99314) (xy 39.72052 -0.99822) (xy 40.22344 -1.00076)
+ (xy 40.72636 -0.99822) (xy 41.22928 -0.99314) (xy 41.72966 -0.98044) (xy 42.23258 -0.96012)
+ (xy 42.7355 -0.93218) (xy 43.23842 -0.89408) (xy 43.74134 -0.84328) (xy 44.24426 -0.77978)
+ (xy 44.74718 -0.70104) (xy 45.2501 -0.61214) (xy 45.75302 -0.51562) (xy 46.25594 -0.4191)
+ (xy 46.75886 -0.32766) (xy 47.26178 -0.25146) (xy 47.7647 -0.1905) (xy 48.26762 -0.14732)
+ (xy 48.77054 -0.1143) (xy 49.27346 -0.09398) (xy 49.77638 -0.08128) (xy 50.2793 -0.0762)
+ (xy 50.77968 -0.08128) (xy 51.2826 -0.09398) (xy 51.78552 -0.1143) (xy 52.28844 -0.14732)
+ (xy 52.79136 -0.1905) (xy 53.29428 -0.25146) (xy 53.7972 -0.32766) (xy 54.30012 -0.4191)
+ (xy 54.80304 -0.51562) (xy 55.30596 -0.61214) (xy 55.80888 -0.70104) (xy 56.3118 -0.77978)
+ (xy 56.81472 -0.84328) (xy 57.31764 -0.89408) (xy 57.82056 -0.93218) (xy 58.32348 -0.96012)
+ (xy 58.8264 -0.98044) (xy 59.32932 -0.99314) (xy 59.83224 -0.99822) (xy 60.33262 -1.00076)
+ (xy 60.83554 -0.99822) (xy 61.33846 -0.99314) (xy 61.84138 -0.98044) (xy 62.3443 -0.96012)
+ (xy 62.84722 -0.93218) (xy 63.35014 -0.89408) (xy 63.85306 -0.84328) (xy 64.35598 -0.77978)
+ (xy 64.8589 -0.70104) (xy 65.36182 -0.61214) (xy 65.86474 -0.51562) (xy 66.36766 -0.4191)
+ (xy 66.87058 -0.32766) (xy 67.3735 -0.25146) (xy 67.87642 -0.1905) (xy 68.37934 -0.14732)
+ (xy 68.88226 -0.1143) (xy 69.38264 -0.09398) (xy 69.88556 -0.08128) (xy 70.38848 -0.0762)
+ (xy 70.8914 -0.08128) (xy 71.39432 -0.09398) (xy 71.89724 -0.1143) (xy 72.40016 -0.14732)
+ (xy 72.90308 -0.1905) (xy 73.406 -0.25146) (xy 73.90892 -0.32766) (xy 74.41184 -0.4191)
+ (xy 74.91476 -0.51562) (xy 75.41768 -0.61214) (xy 75.9206 -0.70104) (xy 76.42352 -0.77724)
+ (xy 76.92644 -0.84074) (xy 77.42936 -0.889) (xy 77.93228 -0.92456) (xy 78.43266 -0.94996)
+ (xy 78.93558 -0.96774) (xy 79.4385 -0.98044) (xy 79.94142 -0.98552) (xy 80.44434 -0.98552)
+ (xy 80.94726 -0.98044) (xy 81.45018 -0.97282) (xy 81.9531 -0.95758) (xy 82.45602 -0.93472)
+ (xy 82.95894 -0.90678) (xy 83.46186 -0.86614) (xy 83.96478 -0.81788) (xy 84.4677 -0.75692)
+ (xy 84.97062 -0.68834) (xy 85.47354 -0.61214) (xy 85.97646 -0.5334) (xy 86.47938 -0.45466)
+ (xy 86.9823 -0.381) (xy 87.48268 -0.32004) (xy 87.9856 -0.2667) (xy 88.48852 -0.2286)
+ (xy 88.99144 -0.19812) (xy 89.49436 -0.18034) (xy 89.99728 -0.17272) (xy 90.5002 -0.17272)
+ (xy 91.00312 -0.18034) (xy 91.50604 -0.19558) (xy 92.00896 -0.22098) (xy 92.51188 -0.25654)
+ (xy 93.0148 -0.29972) (xy 93.51772 -0.3556) (xy 94.02064 -0.41656) (xy 94.52356 -0.48006)
+ (xy 95.02648 -0.54864) (xy 95.5294 -0.61214) (xy 96.03232 -0.6731) (xy 96.5327 -0.72644)
+ (xy 97.03562 -0.77216) (xy 97.53854 -0.81026) (xy 98.04146 -0.8382) (xy 98.54438 -0.86106)
+ (xy 99.0473 -0.87884) (xy 99.55022 -0.889) (xy 100.05314 -0.89408) (xy 100.55606 -0.89408)
+ (xy 101.05898 -0.889) (xy 101.5619 -0.8763) (xy 102.06482 -0.86106) (xy 102.56774 -0.84074)
+ (xy 103.07066 -0.8128) (xy 103.57358 -0.78232) (xy 104.0765 -0.74422) (xy 104.57942 -0.70358)
+ (xy 105.08234 -0.65786) (xy 105.58272 -0.61214) (xy 106.08564 -0.56642) (xy 106.58856 -0.5207)
+ (xy 107.09148 -0.47752) (xy 107.5944 -0.43942) (xy 108.09732 -0.40894) (xy 108.60024 -0.38354)
+ (xy 109.10316 -0.36576) (xy 109.60608 -0.35306) (xy 110.109 -0.35052) (xy 110.61192 -0.35052)
+ (xy 111.11484 -0.36068) (xy 111.61776 -0.37338) (xy 112.12068 -0.3937) (xy 112.6236 -0.41656)
+ (xy 113.12652 -0.44704) (xy 113.62944 -0.47752) (xy 114.13236 -0.51054) (xy 114.63274 -0.5461)
+ (xy 115.13566 -0.57912) (xy 115.63858 -0.61214) (xy 116.1415 -0.64262) (xy 116.64442 -0.66802)
+ (xy 117.14734 -0.69342) (xy 117.65026 -0.7112) (xy 118.15318 -0.72898) (xy 118.6561 -0.73914)
+ (xy 119.15902 -0.7493) (xy 119.66194 -0.75184) (xy 120.16486 -0.75438) (xy 120.66778 -0.75184)
+ (xy 121.1707 -0.74422) (xy 121.67362 -0.7366) (xy 122.17654 -0.72644) (xy 122.67946 -0.7112)
+ (xy 123.18238 -0.69596) (xy 123.68276 -0.68072) (xy 124.18568 -0.66294) (xy 124.6886 -0.64516)
+ (xy 125.19152 -0.62738) (xy 125.69444 -0.61214) (xy 126.19736 -0.5969) (xy 126.70028 -0.5842)
+ (xy 127.2032 -0.57404) (xy 127.70612 -0.56388) (xy 128.20904 -0.5588) (xy 128.71196 -0.55372)
+ (xy 129.21488 -0.55372) (xy 129.7178 -0.55372) (xy 130.22072 -0.55626) (xy 130.72364 -0.56134)
+ (xy 131.22656 -0.56642) (xy 131.72948 -0.57404) (xy 132.2324 -0.58166) (xy 132.73278 -0.58674)
+ (xy 133.2357 -0.59436) (xy 133.73862 -0.59944) (xy 134.24154 -0.60452) (xy 134.74446 -0.6096)
+ (xy 135.24738 -0.61214) (xy 135.7503 -0.61214) (xy 135.7503 0.61214) (xy 135.24738 0.61214)
+ (xy 134.74446 0.6096) (xy 134.24154 0.60452) (xy 133.73862 0.59944) (xy 133.2357 0.59436)
+ (xy 132.73278 0.58674) (xy 132.2324 0.58166) (xy 131.72948 0.57404) (xy 131.22656 0.56642)
+ (xy 130.72364 0.56134) (xy 130.22072 0.55626) (xy 129.7178 0.55372) (xy 129.21488 0.55372)
+ (xy 128.71196 0.55372) (xy 128.20904 0.5588) (xy 127.70612 0.56388) (xy 127.2032 0.57404)
+ (xy 126.70028 0.5842) (xy 126.19736 0.5969) (xy 125.69444 0.61214) (xy 125.19152 0.62738)
+ (xy 124.6886 0.64516) (xy 124.18568 0.66294) (xy 123.68276 0.68072) (xy 123.18238 0.69596)
+ (xy 122.67946 0.7112) (xy 122.17654 0.72644) (xy 121.67362 0.7366) (xy 121.1707 0.74422)
+ (xy 120.66778 0.75184) (xy 120.16486 0.75438) (xy 119.66194 0.75184) (xy 119.15902 0.7493)
+ (xy 118.6561 0.73914) (xy 118.15318 0.72898) (xy 117.65026 0.7112) (xy 117.14734 0.69342)
+ (xy 116.64442 0.66802) (xy 116.1415 0.64262) (xy 115.63858 0.61214) (xy 115.13566 0.57912)
+ (xy 114.63274 0.5461) (xy 114.13236 0.51054) (xy 113.62944 0.47752) (xy 113.12652 0.44704)
+ (xy 112.6236 0.41656) (xy 112.12068 0.3937) (xy 111.61776 0.37338) (xy 111.11484 0.36068)
+ (xy 110.61192 0.35052) (xy 110.109 0.35052) (xy 109.60608 0.35306) (xy 109.10316 0.36576)
+ (xy 108.60024 0.38354) (xy 108.09732 0.40894) (xy 107.5944 0.43942) (xy 107.09148 0.47752)
+ (xy 106.58856 0.5207) (xy 106.08564 0.56642) (xy 105.58272 0.61214) (xy 105.08234 0.65786)
+ (xy 104.57942 0.70358) (xy 104.0765 0.74422) (xy 103.57358 0.78232) (xy 103.07066 0.8128)
+ (xy 102.56774 0.84074) (xy 102.06482 0.86106) (xy 101.5619 0.8763) (xy 101.05898 0.889)
+ (xy 100.55606 0.89408) (xy 100.05314 0.89408) (xy 99.55022 0.889) (xy 99.0473 0.87884)
+ (xy 98.54438 0.86106) (xy 98.04146 0.8382) (xy 97.53854 0.81026) (xy 97.03562 0.77216)
+ (xy 96.5327 0.72644) (xy 96.03232 0.6731) (xy 95.5294 0.61214) (xy 95.02648 0.54864)
+ (xy 94.52356 0.48006) (xy 94.02064 0.41656) (xy 93.51772 0.3556) (xy 93.0148 0.29972)
+ (xy 92.51188 0.25654) (xy 92.00896 0.22098) (xy 91.50604 0.19558) (xy 91.00312 0.18034)
+ (xy 90.5002 0.17272) (xy 89.99728 0.17272) (xy 89.49436 0.18034) (xy 88.99144 0.19812)
+ (xy 88.48852 0.2286) (xy 87.9856 0.2667) (xy 87.48268 0.32004) (xy 86.9823 0.381)
+ (xy 86.47938 0.45466) (xy 85.97646 0.5334) (xy 85.47354 0.61214) (xy 84.97062 0.68834)
+ (xy 84.4677 0.75692) (xy 83.96478 0.81788) (xy 83.46186 0.86614) (xy 82.95894 0.90678)
+ (xy 82.45602 0.93472) (xy 81.9531 0.95758) (xy 81.45018 0.97282) (xy 80.94726 0.98044)
+ (xy 80.44434 0.98552) (xy 79.94142 0.98552) (xy 79.4385 0.98044) (xy 78.93558 0.96774)
+ (xy 78.43266 0.94996) (xy 77.93228 0.92456) (xy 77.42936 0.889) (xy 76.92644 0.84074)
+ (xy 76.42352 0.77724) (xy 75.9206 0.70104) (xy 75.41768 0.61214) (xy 74.91476 0.51562)
+ (xy 74.41184 0.4191) (xy 73.90892 0.32766) (xy 73.406 0.25146) (xy 72.90308 0.1905)
+ (xy 72.40016 0.14732) (xy 71.89724 0.1143) (xy 71.39432 0.09398) (xy 70.8914 0.08128)
+ (xy 70.38848 0.0762) (xy 69.88556 0.08128) (xy 69.38264 0.09398) (xy 68.88226 0.1143)
+ (xy 68.37934 0.14732) (xy 67.87642 0.1905) (xy 67.3735 0.25146) (xy 66.87058 0.32766)
+ (xy 66.36766 0.4191) (xy 65.86474 0.51562) (xy 65.36182 0.61214) (xy 64.8589 0.70104)
+ (xy 64.35598 0.77978) (xy 63.85306 0.84328) (xy 63.35014 0.89408) (xy 62.84722 0.93218)
+ (xy 62.3443 0.96012) (xy 61.84138 0.98044) (xy 61.33846 0.99314) (xy 60.83554 0.99822)
+ (xy 60.33262 1.00076) (xy 59.83224 0.99822) (xy 59.32932 0.99314) (xy 58.8264 0.98044)
+ (xy 58.32348 0.96012) (xy 57.82056 0.93218) (xy 57.31764 0.89408) (xy 56.81472 0.84328)
+ (xy 56.3118 0.77978) (xy 55.80888 0.70104) (xy 55.30596 0.61214) (xy 54.80304 0.51562)
+ (xy 54.30012 0.4191) (xy 53.7972 0.32766) (xy 53.29428 0.25146) (xy 52.79136 0.1905)
+ (xy 52.28844 0.14732) (xy 51.78552 0.1143) (xy 51.2826 0.09398) (xy 50.77968 0.08128)
+ (xy 50.2793 0.0762) (xy 49.77638 0.08128) (xy 49.27346 0.09398) (xy 48.77054 0.1143)
+ (xy 48.26762 0.14732) (xy 47.7647 0.1905) (xy 47.26178 0.25146) (xy 46.75886 0.32766)
+ (xy 46.25594 0.4191) (xy 45.75302 0.51562) (xy 45.2501 0.61214) (xy 44.74718 0.70104)
+ (xy 44.24426 0.77978) (xy 43.74134 0.84328) (xy 43.23842 0.89408) (xy 42.7355 0.93218)
+ (xy 42.23258 0.96012) (xy 41.72966 0.98044) (xy 41.22928 0.99314) (xy 40.72636 0.99822)
+ (xy 40.22344 1.00076) (xy 39.72052 0.99822) (xy 39.2176 0.99314) (xy 38.71468 0.98044)
+ (xy 38.21176 0.96012) (xy 37.70884 0.93218) (xy 37.20592 0.89408) (xy 36.703 0.84328)
+ (xy 36.20008 0.77978) (xy 35.69716 0.70104) (xy 35.19424 0.61214) (xy 34.69132 0.51562)
+ (xy 34.1884 0.4191) (xy 33.68548 0.32766) (xy 33.18256 0.25146) (xy 32.67964 0.1905)
+ (xy 32.17926 0.14732) (xy 31.67634 0.1143) (xy 31.17342 0.09398) (xy 30.6705 0.08128)
+ (xy 30.16758 0.0762) (xy 29.66466 0.08128) (xy 29.16174 0.09398) (xy 28.65882 0.1143)
+ (xy 28.1559 0.14732) (xy 27.65298 0.1905) (xy 27.15006 0.25146) (xy 26.64714 0.32766)
+ (xy 26.14422 0.4191) (xy 25.6413 0.51562) (xy 25.13838 0.61214) (xy 24.63546 0.70104)
+ (xy 24.13254 0.77978) (xy 23.62962 0.84328) (xy 23.12924 0.89408) (xy 22.62632 0.93218)
+ (xy 22.1234 0.96012) (xy 21.62048 0.98044) (xy 21.11756 0.99314) (xy 20.61464 0.99822)
+ (xy 20.11172 1.00076) (xy 19.6088 0.99822) (xy 19.10588 0.99314) (xy 18.60296 0.98044)
+ (xy 18.10004 0.96012) (xy 17.59712 0.93218) (xy 17.0942 0.89408) (xy 16.59128 0.84328)
+ (xy 16.08836 0.77978) (xy 15.58544 0.70104) (xy 15.08252 0.61214) (xy 14.5796 0.51562)
+ (xy 14.07922 0.4191) (xy 13.5763 0.32766) (xy 13.07338 0.25146) (xy 12.57046 0.1905)
+ (xy 12.06754 0.14732) (xy 11.56462 0.1143) (xy 11.0617 0.09398) (xy 10.55878 0.08128)
+ (xy 10.05586 0.0762) (xy 9.55294 0.08128) (xy 9.05002 0.09398) (xy 8.5471 0.1143)
+ (xy 8.04418 0.14732) (xy 7.54126 0.1905) (xy 7.03834 0.25146) (xy 6.53542 0.32766)
+ (xy 6.0325 0.4191) (xy 5.52958 0.51562) (xy 5.0292 0.61214) (xy 4.52628 0.70104)
+ (xy 4.02336 0.77978) (xy 3.52044 0.84328) (xy 3.01752 0.89408) (xy 2.5146 0.93218)
+ (xy 2.01168 0.96012) (xy 1.50876 0.98044) (xy 1.00584 0.99314) (xy 0.50292 0.99822)
+ (xy 0 1.00076) (xy -0.50292 0.99822) (xy -1.00584 0.99314) (xy -1.50876 0.98044)
+ (xy -2.01168 0.96012) (xy -2.5146 0.93218) (xy -3.01752 0.89408) (xy -3.52044 0.84328)
+ (xy -4.02082 0.77978) (xy -4.52374 0.70104) (xy -5.02666 0.61214) (xy -5.52958 0.51562)
+ (xy -6.0325 0.4191) (xy -6.53542 0.32766) (xy -7.03834 0.25146) (xy -7.54126 0.1905)
+ (xy -8.04418 0.14732) (xy -8.5471 0.1143) (xy -9.05002 0.09398) (xy -9.55294 0.08128)
+ (xy -10.05586 0.0762) (xy -10.55878 0.08128) (xy -11.0617 0.09398) (xy -11.56462 0.1143)
+ (xy -12.06754 0.14732) (xy -12.57046 0.1905) (xy -13.07084 0.25146) (xy -13.57376 0.32766)
+ (xy -14.07668 0.4191) (xy -14.5796 0.51562) (xy -15.08252 0.61214) (xy -15.58544 0.70104)
+ (xy -16.08836 0.77978) (xy -16.59128 0.84328) (xy -17.0942 0.89408) (xy -17.59712 0.93218)
+ (xy -18.10004 0.96012) (xy -18.60296 0.98044) (xy -19.10588 0.99314) (xy -19.6088 0.99822)
+ (xy -20.11172 1.00076) (xy -20.61464 0.99822) (xy -21.11756 0.99314) (xy -21.62048 0.98044)
+ (xy -22.12086 0.96012) (xy -22.62378 0.93218) (xy -23.1267 0.89408) (xy -23.62962 0.84328)
+ (xy -24.13254 0.77978) (xy -24.63546 0.70104) (xy -25.13838 0.61214) (xy -25.6413 0.51562)
+ (xy -26.14422 0.4191) (xy -26.64714 0.32766) (xy -27.15006 0.25146) (xy -27.65298 0.1905)
+ (xy -28.1559 0.14732) (xy -28.65882 0.1143) (xy -29.16174 0.09398) (xy -29.66466 0.08128)
+ (xy -30.16758 0.0762) (xy -30.6705 0.08128) (xy -31.17088 0.09398) (xy -31.6738 0.1143)
+ (xy -32.17672 0.14732) (xy -32.67964 0.1905) (xy -33.18256 0.25146) (xy -33.68548 0.32766)
+ (xy -34.1884 0.4191) (xy -34.69132 0.51562) (xy -35.19424 0.61214) (xy -35.69716 0.70104)
+ (xy -36.20008 0.77978) (xy -36.703 0.84328) (xy -37.20592 0.89408) (xy -37.70884 0.93218)
+ (xy -38.21176 0.96012) (xy -38.71468 0.98044) (xy -39.2176 0.99314) (xy -39.72052 0.99822)
+ (xy -40.22344 1.00076) (xy -40.72382 0.99822) (xy -41.22674 0.99314) (xy -41.72966 0.98044)
+ (xy -42.23258 0.96012) (xy -42.7355 0.93218) (xy -43.23842 0.89408) (xy -43.74134 0.84328)
+ (xy -44.24426 0.77978) (xy -44.74718 0.70104) (xy -45.2501 0.61214) (xy -45.75302 0.51562)
+ (xy -46.25594 0.4191) (xy -46.75886 0.32766) (xy -47.26178 0.25146) (xy -47.7647 0.1905)
+ (xy -48.26762 0.14732) (xy -48.77054 0.1143) (xy -49.27346 0.09398) (xy -49.77384 0.08128)
+ (xy -50.27676 0.0762) (xy -50.77968 0.08128) (xy -51.2826 0.09398) (xy -51.78552 0.1143)
+ (xy -52.28844 0.14732) (xy -52.79136 0.1905) (xy -53.29428 0.25146) (xy -53.7972 0.32766)
+ (xy -54.30012 0.4191) (xy -54.80304 0.51562) (xy -55.30596 0.61214) (xy -55.80888 0.70104)
+ (xy -56.3118 0.77978) (xy -56.81472 0.84328) (xy -57.31764 0.89408) (xy -57.82056 0.93218)
+ (xy -58.32348 0.96012) (xy -58.82386 0.98044) (xy -59.32678 0.99314) (xy -59.8297 0.99822)
+ (xy -60.33262 1.00076) (xy -60.83554 0.99822) (xy -61.33846 0.99314) (xy -61.84138 0.98044)
+ (xy -62.3443 0.96012) (xy -62.84722 0.93218) (xy -63.35014 0.89408) (xy -63.85306 0.84328)
+ (xy -64.35598 0.77978) (xy -64.8589 0.70104) (xy -65.36182 0.61214) (xy -65.86474 0.51562)
+ (xy -66.36766 0.4191) (xy -66.87058 0.32766) (xy -67.3735 0.25146) (xy -67.87388 0.1905)
+ (xy -68.3768 0.14732) (xy -68.87972 0.1143) (xy -69.38264 0.09398) (xy -69.88556 0.08128)
+ (xy -70.38848 0.0762) (xy -70.8914 0.08128) (xy -71.39432 0.09398) (xy -71.89724 0.1143)
+ (xy -72.40016 0.14732) (xy -72.90308 0.1905) (xy -73.406 0.25146) (xy -73.90892 0.32766)
+ (xy -74.41184 0.4191) (xy -74.91476 0.51562) (xy -75.41768 0.61214) (xy -75.9206 0.70104)
+ (xy -76.42352 0.77724) (xy -76.9239 0.84074) (xy -77.42682 0.889) (xy -77.92974 0.92456)
+ (xy -78.43266 0.94996) (xy -78.93558 0.96774) (xy -79.4385 0.98044) (xy -79.94142 0.98552)
+ (xy -80.44434 0.98552) (xy -80.94726 0.98044) (xy -81.45018 0.97282) (xy -81.9531 0.95758)
+ (xy -82.45602 0.93472) (xy -82.95894 0.90678) (xy -83.46186 0.86614) (xy -83.96478 0.81788)
+ (xy -84.4677 0.75692) (xy -84.97062 0.68834) (xy -85.47354 0.61214) (xy -85.97392 0.5334)
+ (xy -86.47684 0.45466) (xy -86.97976 0.381) (xy -87.48268 0.32004) (xy -87.9856 0.2667)
+ (xy -88.48852 0.2286) (xy -88.99144 0.19812) (xy -89.49436 0.18034) (xy -89.99728 0.17272)
+ (xy -90.5002 0.17272) (xy -91.00312 0.18034) (xy -91.50604 0.19558) (xy -92.00896 0.22098)
+ (xy -92.51188 0.25654) (xy -93.0148 0.29972) (xy -93.51772 0.3556) (xy -94.02064 0.41656)
+ (xy -94.52356 0.48006) (xy -95.02394 0.54864) (xy -95.52686 0.61214) (xy -96.02978 0.6731)
+ (xy -96.5327 0.72644) (xy -97.03562 0.77216) (xy -97.53854 0.81026) (xy -98.04146 0.8382)
+ (xy -98.54438 0.86106) (xy -99.0473 0.87884) (xy -99.55022 0.889) (xy -100.05314 0.89408)
+ (xy -100.55606 0.89408) (xy -101.05898 0.889) (xy -101.5619 0.8763) (xy -102.06482 0.86106)
+ (xy -102.56774 0.84074) (xy -103.07066 0.8128) (xy -103.57358 0.78232) (xy -104.07396 0.74422)
+ (xy -104.57688 0.70358) (xy -105.0798 0.65786) (xy -105.58272 0.61214) (xy -106.08564 0.56642)
+ (xy -106.58856 0.5207) (xy -107.09148 0.47752) (xy -107.5944 0.43942) (xy -108.09732 0.40894)
+ (xy -108.60024 0.38354) (xy -109.10316 0.36576) (xy -109.60608 0.35306) (xy -110.109 0.35052)
+ (xy -110.61192 0.35052) (xy -111.11484 0.36068) (xy -111.61776 0.37338) (xy -112.12068 0.3937)
+ (xy -112.6236 0.41656) (xy -113.12398 0.44704) (xy -113.6269 0.47752) (xy -114.12982 0.51054)
+ (xy -114.63274 0.5461) (xy -115.13566 0.57912) (xy -115.63858 0.61214) (xy -116.1415 0.64262)
+ (xy -116.64442 0.66802) (xy -117.14734 0.69342) (xy -117.65026 0.7112) (xy -118.15318 0.72898)
+ (xy -118.6561 0.73914) (xy -119.15902 0.7493) (xy -119.66194 0.75184) (xy -120.16486 0.75438)
+ (xy -120.66778 0.75184) (xy -121.1707 0.74422) (xy -121.67362 0.7366) (xy -122.174 0.72644)
+ (xy -122.67692 0.7112) (xy -123.17984 0.69596) (xy -123.68276 0.68072) (xy -124.18568 0.66294)
+ (xy -124.6886 0.64516) (xy -125.19152 0.62738) (xy -125.69444 0.61214) (xy -126.19736 0.5969)
+ (xy -126.70028 0.5842) (xy -127.2032 0.57404) (xy -127.70612 0.56388) (xy -128.20904 0.5588)
+ (xy -128.71196 0.55372) (xy -129.21488 0.55372) (xy -129.7178 0.55372) (xy -130.22072 0.55626)
+ (xy -130.72364 0.56134) (xy -131.22402 0.56642) (xy -131.72694 0.57404) (xy -132.22986 0.58166)
+ (xy -132.73278 0.58674) (xy -133.2357 0.59436) (xy -133.73862 0.59944) (xy -134.24154 0.60452)
+ (xy -134.74446 0.6096) (xy -135.24738 0.61214) (xy -135.7503 0.61214) (xy -135.7503 0)) (layer Dessus.Cu) (width 0.3048))
+ (pad 2 smd rect (at -135.7503 0) (size 1.22428 1.22428)
+ (layers Dessus.Cu)
+ )
+ (pad 1 smd rect (at 135.7503 0) (size 1.22428 1.22428)
+ (layers Dessus.Cu)
+ )
+ )
+
+ (module POLY (layer Dessus.Cu) (tedit 4278D8EB) (tstamp 0)
+ (at 203.18984 121.54408)
+ (fp_text reference POLY (at 0 0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_text value VAL** (at 0 -0.0762) (layer F.SilkS)
+ (effects (font (size 0.0762 0.0762) (thickness 0.2032)))
+ )
+ (fp_poly (pts (xy -135.7503 0) (xy -135.7503 -0.61214) (xy -135.24738 -0.61214) (xy -134.74446 -0.6096)
+ (xy -134.24154 -0.60452) (xy -133.73862 -0.59944) (xy -133.2357 -0.59436) (xy -132.73278 -0.58674)
+ (xy -132.22986 -0.58166) (xy -131.72694 -0.57404) (xy -131.22402 -0.56642) (xy -130.72364 -0.56134)
+ (xy -130.22072 -0.55626) (xy -129.7178 -0.55372) (xy -129.21488 -0.55372) (xy -128.71196 -0.55372)
+ (xy -128.20904 -0.5588) (xy -127.70612 -0.56388) (xy -127.2032 -0.57404) (xy -126.70028 -0.5842)
+ (xy -126.19736 -0.5969) (xy -125.69444 -0.61214) (xy -125.19152 -0.62738) (xy -124.6886 -0.64516)
+ (xy -124.18568 -0.66294) (xy -123.68276 -0.68072) (xy -123.17984 -0.69596) (xy -122.67692 -0.7112)
+ (xy -122.174 -0.72644) (xy -121.67362 -0.7366) (xy -121.1707 -0.74422) (xy -120.66778 -0.75184)
+ (xy -120.16486 -0.75438) (xy -119.66194 -0.75184) (xy -119.15902 -0.7493) (xy -118.6561 -0.73914)
+ (xy -118.15318 -0.72898) (xy -117.65026 -0.7112) (xy -117.14734 -0.69342) (xy -116.64442 -0.66802)
+ (xy -116.1415 -0.64262) (xy -115.63858 -0.61214) (xy -115.13566 -0.57912) (xy -114.63274 -0.5461)
+ (xy -114.12982 -0.51054) (xy -113.6269 -0.47752) (xy -113.12398 -0.44704) (xy -112.6236 -0.41656)
+ (xy -112.12068 -0.3937) (xy -111.61776 -0.37338) (xy -111.11484 -0.36068) (xy -110.61192 -0.35052)
+ (xy -110.109 -0.35052) (xy -109.60608 -0.35306) (xy -109.10316 -0.36576) (xy -108.60024 -0.38354)
+ (xy -108.09732 -0.40894) (xy -107.5944 -0.43942) (xy -107.09148 -0.47752) (xy -106.58856 -0.5207)
+ (xy -106.08564 -0.56642) (xy -105.58272 -0.61214) (xy -105.0798 -0.65786) (xy -104.57688 -0.70358)
+ (xy -104.07396 -0.74422) (xy -103.57358 -0.78232) (xy -103.07066 -0.8128) (xy -102.56774 -0.84074)
+ (xy -102.06482 -0.86106) (xy -101.5619 -0.8763) (xy -101.05898 -0.889) (xy -100.55606 -0.89408)
+ (xy -100.05314 -0.89408) (xy -99.55022 -0.889) (xy -99.0473 -0.87884) (xy -98.54438 -0.86106)
+ (xy -98.04146 -0.8382) (xy -97.53854 -0.81026) (xy -97.03562 -0.77216) (xy -96.5327 -0.72644)
+ (xy -96.02978 -0.6731) (xy -95.52686 -0.61214) (xy -95.02394 -0.54864) (xy -94.52356 -0.48006)
+ (xy -94.02064 -0.41656) (xy -93.51772 -0.3556) (xy -93.0148 -0.29972) (xy -92.51188 -0.25654)
+ (xy -92.00896 -0.22098) (xy -91.50604 -0.19558) (xy -91.00312 -0.18034) (xy -90.5002 -0.17272)
+ (xy -89.99728 -0.17272) (xy -89.49436 -0.18034) (xy -88.99144 -0.19812) (xy -88.48852 -0.2286)
+ (xy -87.9856 -0.2667) (xy -87.48268 -0.32004) (xy -86.97976 -0.381) (xy -86.47684 -0.45466)
+ (xy -85.97392 -0.5334) (xy -85.47354 -0.61214) (xy -84.97062 -0.68834) (xy -84.4677 -0.75692)
+ (xy -83.96478 -0.81788) (xy -83.46186 -0.86614) (xy -82.95894 -0.90678) (xy -82.45602 -0.93472)
+ (xy -81.9531 -0.95758) (xy -81.45018 -0.97282) (xy -80.94726 -0.98044) (xy -80.44434 -0.98552)
+ (xy -79.94142 -0.98552) (xy -79.4385 -0.98044) (xy -78.93558 -0.96774) (xy -78.43266 -0.94996)
+ (xy -77.92974 -0.92456) (xy -77.42682 -0.889) (xy -76.9239 -0.84074) (xy -76.42352 -0.77724)
+ (xy -75.9206 -0.70104) (xy -75.41768 -0.61214) (xy -74.91476 -0.51562) (xy -74.41184 -0.4191)
+ (xy -73.90892 -0.32766) (xy -73.406 -0.25146) (xy -72.90308 -0.1905) (xy -72.40016 -0.14732)
+ (xy -71.89724 -0.1143) (xy -71.39432 -0.09398) (xy -70.8914 -0.08128) (xy -70.38848 -0.0762)
+ (xy -69.88556 -0.08128) (xy -69.38264 -0.09398) (xy -68.87972 -0.1143) (xy -68.3768 -0.14732)
+ (xy -67.87388 -0.1905) (xy -67.3735 -0.25146) (xy -66.87058 -0.32766) (xy -66.36766 -0.4191)
+ (xy -65.86474 -0.51562) (xy -65.36182 -0.61214) (xy -64.8589 -0.70104) (xy -64.35598 -0.77978)
+ (xy -63.85306 -0.84328) (xy -63.35014 -0.89408) (xy -62.84722 -0.93218) (xy -62.3443 -0.96012)
+ (xy -61.84138 -0.98044) (xy -61.33846 -0.99314) (xy -60.83554 -0.99822) (xy -60.33262 -1.00076)
+ (xy -59.8297 -0.99822) (xy -59.32678 -0.99314) (xy -58.82386 -0.98044) (xy -58.32348 -0.96012)
+ (xy -57.82056 -0.93218) (xy -57.31764 -0.89408) (xy -56.81472 -0.84328) (xy -56.3118 -0.77978)
+ (xy -55.80888 -0.70104) (xy -55.30596 -0.61214) (xy -54.80304 -0.51562) (xy -54.30012 -0.4191)
+ (xy -53.7972 -0.32766) (xy -53.29428 -0.25146) (xy -52.79136 -0.1905) (xy -52.28844 -0.14732)
+ (xy -51.78552 -0.1143) (xy -51.2826 -0.09398) (xy -50.77968 -0.08128) (xy -50.27676 -0.0762)
+ (xy -49.77384 -0.08128) (xy -49.27346 -0.09398) (xy -48.77054 -0.1143) (xy -48.26762 -0.14732)
+ (xy -47.7647 -0.1905) (xy -47.26178 -0.25146) (xy -46.75886 -0.32766) (xy -46.25594 -0.4191)
+ (xy -45.75302 -0.51562) (xy -45.2501 -0.61214) (xy -44.74718 -0.70104) (xy -44.24426 -0.77978)
+ (xy -43.74134 -0.84328) (xy -43.23842 -0.89408) (xy -42.7355 -0.93218) (xy -42.23258 -0.96012)
+ (xy -41.72966 -0.98044) (xy -41.22674 -0.99314) (xy -40.72382 -0.99822) (xy -40.22344 -1.00076)
+ (xy -39.72052 -0.99822) (xy -39.2176 -0.99314) (xy -38.71468 -0.98044) (xy -38.21176 -0.96012)
+ (xy -37.70884 -0.93218) (xy -37.20592 -0.89408) (xy -36.703 -0.84328) (xy -36.20008 -0.77978)
+ (xy -35.69716 -0.70104) (xy -35.19424 -0.61214) (xy -34.69132 -0.51562) (xy -34.1884 -0.4191)
+ (xy -33.68548 -0.32766) (xy -33.18256 -0.25146) (xy -32.67964 -0.1905) (xy -32.17672 -0.14732)
+ (xy -31.6738 -0.1143) (xy -31.17088 -0.09398) (xy -30.6705 -0.08128) (xy -30.16758 -0.0762)
+ (xy -29.66466 -0.08128) (xy -29.16174 -0.09398) (xy -28.65882 -0.1143) (xy -28.1559 -0.14732)
+ (xy -27.65298 -0.1905) (xy -27.15006 -0.25146) (xy -26.64714 -0.32766) (xy -26.14422 -0.4191)
+ (xy -25.6413 -0.51562) (xy -25.13838 -0.61214) (xy -24.63546 -0.70104) (xy -24.13254 -0.77978)
+ (xy -23.62962 -0.84328) (xy -23.1267 -0.89408) (xy -22.62378 -0.93218) (xy -22.12086 -0.96012)
+ (xy -21.62048 -0.98044) (xy -21.11756 -0.99314) (xy -20.61464 -0.99822) (xy -20.11172 -1.00076)
+ (xy -19.6088 -0.99822) (xy -19.10588 -0.99314) (xy -18.60296 -0.98044) (xy -18.10004 -0.96012)
+ (xy -17.59712 -0.93218) (xy -17.0942 -0.89408) (xy -16.59128 -0.84328) (xy -16.08836 -0.77978)
+ (xy -15.58544 -0.70104) (xy -15.08252 -0.61214) (xy -14.5796 -0.51562) (xy -14.07668 -0.4191)
+ (xy -13.57376 -0.32766) (xy -13.07084 -0.25146) (xy -12.57046 -0.1905) (xy -12.06754 -0.14732)
+ (xy -11.56462 -0.1143) (xy -11.0617 -0.09398) (xy -10.55878 -0.08128) (xy -10.05586 -0.0762)
+ (xy -9.55294 -0.08128) (xy -9.05002 -0.09398) (xy -8.5471 -0.1143) (xy -8.04418 -0.14732)
+ (xy -7.54126 -0.1905) (xy -7.03834 -0.25146) (xy -6.53542 -0.32766) (xy -6.0325 -0.4191)
+ (xy -5.52958 -0.51562) (xy -5.02666 -0.61214) (xy -4.52374 -0.70104) (xy -4.02082 -0.77978)
+ (xy -3.52044 -0.84328) (xy -3.01752 -0.89408) (xy -2.5146 -0.93218) (xy -2.01168 -0.96012)
+ (xy -1.50876 -0.98044) (xy -1.00584 -0.99314) (xy -0.50292 -0.99822) (xy 0 -1.00076)
+ (xy 0.50292 -0.99822) (xy 1.00584 -0.99314) (xy 1.50876 -0.98044) (xy 2.01168 -0.96012)
+ (xy 2.5146 -0.93218) (xy 3.01752 -0.89408) (xy 3.52044 -0.84328) (xy 4.02336 -0.77978)
+ (xy 4.52628 -0.70104) (xy 5.0292 -0.61214) (xy 5.52958 -0.51562) (xy 6.0325 -0.4191)
+ (xy 6.53542 -0.32766) (xy 7.03834 -0.25146) (xy 7.54126 -0.1905) (xy 8.04418 -0.14732)
+ (xy 8.5471 -0.1143) (xy 9.05002 -0.09398) (xy 9.55294 -0.08128) (xy 10.05586 -0.0762)
+ (xy 10.55878 -0.08128) (xy 11.0617 -0.09398) (xy 11.56462 -0.1143) (xy 12.06754 -0.14732)
+ (xy 12.57046 -0.1905) (xy 13.07338 -0.25146) (xy 13.5763 -0.32766) (xy 14.07922 -0.4191)
+ (xy 14.5796 -0.51562) (xy 15.08252 -0.61214) (xy 15.58544 -0.70104) (xy 16.08836 -0.77978)
+ (xy 16.59128 -0.84328) (xy 17.0942 -0.89408) (xy 17.59712 -0.93218) (xy 18.10004 -0.96012)
+ (xy 18.60296 -0.98044) (xy 19.10588 -0.99314) (xy 19.6088 -0.99822) (xy 20.11172 -1.00076)
+ (xy 20.61464 -0.99822) (xy 21.11756 -0.99314) (xy 21.62048 -0.98044) (xy 22.1234 -0.96012)
+ (xy 22.62632 -0.93218) (xy 23.12924 -0.89408) (xy 23.62962 -0.84328) (xy 24.13254 -0.77978)
+ (xy 24.63546 -0.70104) (xy 25.13838 -0.61214) (xy 25.6413 -0.51562) (xy 26.14422 -0.4191)
+ (xy 26.64714 -0.32766) (xy 27.15006 -0.25146) (xy 27.65298 -0.1905) (xy 28.1559 -0.14732)
+ (xy 28.65882 -0.1143) (xy 29.16174 -0.09398) (xy 29.66466 -0.08128) (xy 30.16758 -0.0762)
+ (xy 30.6705 -0.08128) (xy 31.17342 -0.09398) (xy 31.67634 -0.1143) (xy 32.17926 -0.14732)
+ (xy 32.67964 -0.1905) (xy 33.18256 -0.25146) (xy 33.68548 -0.32766) (xy 34.1884 -0.4191)
+ (xy 34.69132 -0.51562) (xy 35.19424 -0.61214) (xy 35.69716 -0.70104) (xy 36.20008 -0.77978)
+ (xy 36.703 -0.84328) (xy 37.20592 -0.89408) (xy 37.70884 -0.93218) (xy 38.21176 -0.96012)
+ (xy 38.71468 -0.98044) (xy 39.2176 -0.99314) (xy 39.72052 -0.99822) (xy 40.22344 -1.00076)
+ (xy 40.72636 -0.99822) (xy 41.22928 -0.99314) (xy 41.72966 -0.98044) (xy 42.23258 -0.96012)
+ (xy 42.7355 -0.93218) (xy 43.23842 -0.89408) (xy 43.74134 -0.84328) (xy 44.24426 -0.77978)
+ (xy 44.74718 -0.70104) (xy 45.2501 -0.61214) (xy 45.75302 -0.51562) (xy 46.25594 -0.4191)
+ (xy 46.75886 -0.32766) (xy 47.26178 -0.25146) (xy 47.7647 -0.1905) (xy 48.26762 -0.14732)
+ (xy 48.77054 -0.1143) (xy 49.27346 -0.09398) (xy 49.77638 -0.08128) (xy 50.2793 -0.0762)
+ (xy 50.77968 -0.08128) (xy 51.2826 -0.09398) (xy 51.78552 -0.1143) (xy 52.28844 -0.14732)
+ (xy 52.79136 -0.1905) (xy 53.29428 -0.25146) (xy 53.7972 -0.32766) (xy 54.30012 -0.4191)
+ (xy 54.80304 -0.51562) (xy 55.30596 -0.61214) (xy 55.80888 -0.70104) (xy 56.3118 -0.77978)
+ (xy 56.81472 -0.84328) (xy 57.31764 -0.89408) (xy 57.82056 -0.93218) (xy 58.32348 -0.96012)
+ (xy 58.8264 -0.98044) (xy 59.32932 -0.99314) (xy 59.83224 -0.99822) (xy 60.33262 -1.00076)
+ (xy 60.83554 -0.99822) (xy 61.33846 -0.99314) (xy 61.84138 -0.98044) (xy 62.3443 -0.96012)
+ (xy 62.84722 -0.93218) (xy 63.35014 -0.89408) (xy 63.85306 -0.84328) (xy 64.35598 -0.77978)
+ (xy 64.8589 -0.70104) (xy 65.36182 -0.61214) (xy 65.86474 -0.51562) (xy 66.36766 -0.4191)
+ (xy 66.87058 -0.32766) (xy 67.3735 -0.25146) (xy 67.87642 -0.1905) (xy 68.37934 -0.14732)
+ (xy 68.88226 -0.1143) (xy 69.38264 -0.09398) (xy 69.88556 -0.08128) (xy 70.38848 -0.0762)
+ (xy 70.8914 -0.08128) (xy 71.39432 -0.09398) (xy 71.89724 -0.1143) (xy 72.40016 -0.14732)
+ (xy 72.90308 -0.1905) (xy 73.406 -0.25146) (xy 73.90892 -0.32766) (xy 74.41184 -0.4191)
+ (xy 74.91476 -0.51562) (xy 75.41768 -0.61214) (xy 75.9206 -0.70104) (xy 76.42352 -0.77724)
+ (xy 76.92644 -0.84074) (xy 77.42936 -0.889) (xy 77.93228 -0.92456) (xy 78.43266 -0.94996)
+ (xy 78.93558 -0.96774) (xy 79.4385 -0.98044) (xy 79.94142 -0.98552) (xy 80.44434 -0.98552)
+ (xy 80.94726 -0.98044) (xy 81.45018 -0.97282) (xy 81.9531 -0.95758) (xy 82.45602 -0.93472)
+ (xy 82.95894 -0.90678) (xy 83.46186 -0.86614) (xy 83.96478 -0.81788) (xy 84.4677 -0.75692)
+ (xy 84.97062 -0.68834) (xy 85.47354 -0.61214) (xy 85.97646 -0.5334) (xy 86.47938 -0.45466)
+ (xy 86.9823 -0.381) (xy 87.48268 -0.32004) (xy 87.9856 -0.2667) (xy 88.48852 -0.2286)
+ (xy 88.99144 -0.19812) (xy 89.49436 -0.18034) (xy 89.99728 -0.17272) (xy 90.5002 -0.17272)
+ (xy 91.00312 -0.18034) (xy 91.50604 -0.19558) (xy 92.00896 -0.22098) (xy 92.51188 -0.25654)
+ (xy 93.0148 -0.29972) (xy 93.51772 -0.3556) (xy 94.02064 -0.41656) (xy 94.52356 -0.48006)
+ (xy 95.02648 -0.54864) (xy 95.5294 -0.61214) (xy 96.03232 -0.6731) (xy 96.5327 -0.72644)
+ (xy 97.03562 -0.77216) (xy 97.53854 -0.81026) (xy 98.04146 -0.8382) (xy 98.54438 -0.86106)
+ (xy 99.0473 -0.87884) (xy 99.55022 -0.889) (xy 100.05314 -0.89408) (xy 100.55606 -0.89408)
+ (xy 101.05898 -0.889) (xy 101.5619 -0.8763) (xy 102.06482 -0.86106) (xy 102.56774 -0.84074)
+ (xy 103.07066 -0.8128) (xy 103.57358 -0.78232) (xy 104.0765 -0.74422) (xy 104.57942 -0.70358)
+ (xy 105.08234 -0.65786) (xy 105.58272 -0.61214) (xy 106.08564 -0.56642) (xy 106.58856 -0.5207)
+ (xy 107.09148 -0.47752) (xy 107.5944 -0.43942) (xy 108.09732 -0.40894) (xy 108.60024 -0.38354)
+ (xy 109.10316 -0.36576) (xy 109.60608 -0.35306) (xy 110.109 -0.35052) (xy 110.61192 -0.35052)
+ (xy 111.11484 -0.36068) (xy 111.61776 -0.37338) (xy 112.12068 -0.3937) (xy 112.6236 -0.41656)
+ (xy 113.12652 -0.44704) (xy 113.62944 -0.47752) (xy 114.13236 -0.51054) (xy 114.63274 -0.5461)
+ (xy 115.13566 -0.57912) (xy 115.63858 -0.61214) (xy 116.1415 -0.64262) (xy 116.64442 -0.66802)
+ (xy 117.14734 -0.69342) (xy 117.65026 -0.7112) (xy 118.15318 -0.72898) (xy 118.6561 -0.73914)
+ (xy 119.15902 -0.7493) (xy 119.66194 -0.75184) (xy 120.16486 -0.75438) (xy 120.66778 -0.75184)
+ (xy 121.1707 -0.74422) (xy 121.67362 -0.7366) (xy 122.17654 -0.72644) (xy 122.67946 -0.7112)
+ (xy 123.18238 -0.69596) (xy 123.68276 -0.68072) (xy 124.18568 -0.66294) (xy 124.6886 -0.64516)
+ (xy 125.19152 -0.62738) (xy 125.69444 -0.61214) (xy 126.19736 -0.5969) (xy 126.70028 -0.5842)
+ (xy 127.2032 -0.57404) (xy 127.70612 -0.56388) (xy 128.20904 -0.5588) (xy 128.71196 -0.55372)
+ (xy 129.21488 -0.55372) (xy 129.7178 -0.55372) (xy 130.22072 -0.55626) (xy 130.72364 -0.56134)
+ (xy 131.22656 -0.56642) (xy 131.72948 -0.57404) (xy 132.2324 -0.58166) (xy 132.73278 -0.58674)
+ (xy 133.2357 -0.59436) (xy 133.73862 -0.59944) (xy 134.24154 -0.60452) (xy 134.74446 -0.6096)
+ (xy 135.24738 -0.61214) (xy 135.7503 -0.61214) (xy 135.7503 0)) (layer Dessus.Cu) (width 0.3048))
+ (pad 2 smd rect (at -135.7503 -0.3048) (size 0.61214 0.61214)
+ (layers Dessus.Cu)
+ )
+ (pad 1 smd rect (at 135.7503 -0.3048) (size 0.61214 0.61214)
+ (layers Dessus.Cu)
+ )
+ )
+
+ (gr_line (start 203.50988 120.54332) (end 203.50988 120.55348) (angle 90) (layer Dwgs.User) (width 0.3048))
+ (gr_line (start 202.84694 120.54332) (end 203.50988 120.54332) (angle 90) (layer Dwgs.User) (width 0.3048))
+ (gr_line (start 162.4076 120.38076) (end 164.10178 120.38076) (angle 90) (layer Dwgs.User) (width 0.3048))
+ (gr_line (start 59.69 201.93) (end 59.69 81.28) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 351.79 201.93) (end 59.69 201.93) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 351.79 81.28) (end 351.79 201.93) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 59.69 81.28) (end 351.79 81.28) (angle 90) (layer Edge.Cuts) (width 0.3048))
+
+)
diff --git a/demos/microwave/microwave.pro b/demos/microwave/microwave.pro
new file mode 100644
index 0000000..850c5e2
--- /dev/null
+++ b/demos/microwave/microwave.pro
@@ -0,0 +1,6 @@
+update=4/5/2005-08:37:34
+last_client=kicad
+[general]
+version=1
+RootSch=microwave.sch
+BoardNm=microwave.brd
diff --git a/demos/microwave/shape1.txt b/demos/microwave/shape1.txt
new file mode 100644
index 0000000..8c9de97
--- /dev/null
+++ b/demos/microwave/shape1.txt
@@ -0,0 +1,547 @@
+Unit=MM
+XScale=271.501
+YScale=1.00133
+
+$COORD
+0 0.6112600148417837
+0.001851851851851852 0.6104800531118608
+0.003703703703703704 0.6081757281507512
+0.005555555555555557 0.6044531055618283
+0.007407407407407408 0.599486762516193
+0.009259259259259259 0.5935160158642286
+0.011111111111111113 0.5868388504889748
+0.012962962962962964 0.5798030837911864
+0.014814814814814815 0.5727945435109563
+0.01666666666666667 0.5662224098001487
+0.018518518518518517 0.5605022804213778
+0.020370370370370372 0.5560378433445655
+0.022222222222222227 0.553202190998946
+0.024074074074074078 0.5523197577184014
+0.02592592592592593 0.553649664241613
+0.02777777777777778 0.5573710353040977
+0.02962962962962963 0.5635707555653804
+0.031481481481481485 0.572234223741259
+0.03333333333333334 0.5832399194250434
+0.03518518518518519 0.5963588544290375
+0.037037037037037035 0.6112600148417837
+0.038888888888888896 0.6275225190204103
+0.040740740740740744 0.6446543704173731
+0.042592592592592605 0.6621165251087465
+0.04444444444444445 0.6793498472037356
+0.046296296296296294 0.6958017696903088
+0.048148148148148155 0.7109493917236018
+0.05 0.7243163902363279
+0.05185185185185186 0.7354823381126933
+0.05370370370370371 0.744084487228675
+0.05555555555555556 0.7498134547244848
+0.057407407407407414 0.7524052953363638
+0.05925925925925926 0.7516330377591058
+0.061111111111111116 0.7473009105429774
+0.06296296296296297 0.7392442363225176
+0.06481481481481483 0.7273373672784776
+0.06666666666666668 0.7115110433113251
+0.06851851851851852 0.6917790963735535
+0.07037037037037037 0.6682724318714942
+0.07222222222222223 0.6412757623843693
+0.07407407407407407 0.6112600148417837
+0.07592592592592594 0.5789014449739935
+0.07777777777777779 0.5450783763694819
+0.07962962962962963 0.5108392228036683
+0.08148148148148149 0.4773414562975137
+0.08333333333333333 0.44576943778659933
+0.08518518518518521 0.41724683363822496
+0.08703703703703705 0.3927630768718494
+0.0888888888888889 0.3731302890362308
+0.09074074074074075 0.35897743359238754
+0.09259259259259259 0.3507757948758571
+0.09444444444444446 0.348879318022291
+0.09629629629629631 0.3535586425965462
+0.09814814814814816 0.36500954362118593
+0.1 0.38332379278761564
+0.10185185185185185 0.40842211881882806
+0.10370370370370371 0.4399638668882644
+0.10555555555555557 0.47726249580089236
+0.10740740740740742 0.5192431283719975
+0.10925925925925926 0.5644712436976586
+0.11111111111111112 0.6112600148417835
+0.11296296296296297 0.6578363562782682
+0.11481481481481483 0.7025253239861248
+0.11666666666666668 0.7439081525488906
+0.11851851851851852 0.7809210707767429
+0.12037037037037038 0.8128826400111351
+0.12222222222222223 0.8394571019035619
+0.12407407407407409 0.860573539216722
+0.12592592592592594 0.8763239779680684
+0.12777777777777777 0.8868601876540964
+0.12962962962962965 0.8923026289797253
+0.1314814814814815 0.8926690199367778
+0.13333333333333336 0.887826240785074
+0.1351851851851852 0.877468318320662
+0.13703703703703704 0.86112455626706
+0.1388888888888889 0.838204317918709
+0.14074074074074075 0.8080866395542506
+0.1425925925925926 0.7702611358114759
+0.14444444444444446 0.7245184220845895
+0.14629629629629629 0.6711710154768866
+0.14814814814814814 0.6112600148417842
+0.15000000000000002 0.546676126530793
+0.15185185185185188 0.48011208572084635
+0.15370370370370373 0.414788804305345
+0.15555555555555559 0.35397256654700704
+0.1574074074074074 0.3004083420077615
+0.15925925925925927 0.2558769436179474
+0.16111111111111112 0.22106712840325926
+0.16296296296296298 0.19581146666689886
+0.16481481481481483 0.17954337713547525
+0.16666666666666666 0.17173784855015767
+0.16851851851851854 0.17218094626798014
+0.17037037037037042 0.181081777261482
+0.17222222222222225 0.1991072026882523
+0.1740740740740741 0.22731824825729188
+0.17592592592592593 0.266873896520806
+0.1777777777777778 0.31844190919299903
+0.17962962962962967 0.38150219597472734
+0.1814814814814815 0.4539098109114302
+0.18333333333333335 0.5320043789351214
+0.18518518518518517 0.6112600148417837
+0.18703703703703706 0.6871928049136522
+0.1888888888888889 0.7561626376023101
+0.19074074074074077 0.815825806547097
+0.19259259259259262 0.8651911577371734
+0.19444444444444445 0.9043819907193135
+0.19629629629629633 0.9342591495117966
+0.19814814814814818 0.956036932842215
+0.2 0.9709673171254489
+0.20185185185185187 0.9801153275130516
+0.2037037037037037 0.984215113262963
+0.20555555555555557 0.9835831393023908
+0.20740740740740743 0.9780662862273402
+0.20925925925925928 0.9670128027064302
+0.21111111111111114 0.9492694576258127
+0.21296296296296297 0.9232271230909701
+0.21481481481481485 0.886957055218297
+0.2166666666666667 0.8384948946691764
+0.21851851851851853 0.7763245296557731
+0.22037037037037038 0.700066255828527
+0.22222222222222224 0.6112600148417849
+0.2240740740740741 0.5148310891799976
+0.22592592592592595 0.4180443767070181
+0.2277777777777778 0.3282796039274866
+0.22962962962962966 0.25170232423351135
+0.2314814814814815 0.19141876175976152
+0.23333333333333336 0.14690924622604876
+0.23518518518518522 0.11527873802605577
+0.23703703703703705 0.09356447116658453
+0.2388888888888889 0.08040518672963767
+0.24074074074074076 0.07592167203396542
+0.2425925925925926 0.08040518672963677
+0.24444444444444446 0.09356447116658362
+0.24629629629629632 0.11527873802605487
+0.24814814814814817 0.14690924622604604
+0.25 0.19141876175976127
+0.2518518518518519 0.25170232423351185
+0.25370370370370376 0.3282796039274873
+0.25555555555555554 0.4180443767070198
+0.2574074074074074 0.5148310891799965
+0.2592592592592593 0.6112600148417834
+0.2611111111111111 0.70073258758033
+0.262962962962963 0.7787171652994143
+0.26481481481481484 0.8430877397863978
+0.2666666666666667 0.8937520762332646
+0.2685185185185185 0.9319602167917431
+0.2703703703703704 0.9596079770487871
+0.27222222222222225 0.9786975551923163
+0.2740740740740741 0.9909906188751259
+0.2759259259259259 0.9978199685378885
+0.2777777777777778 1.0000046817261843
+0.2796296296296297 0.9978199685378887
+0.2814814814814815 0.9909906188751264
+0.2833333333333334 0.9786975551923158
+0.2851851851851852 0.9596079770487871
+0.28703703703703703 0.9319602167917431
+0.2888888888888889 0.8937520762332638
+0.2907407407407408 0.8430877397863968
+0.29259259259259257 0.7787171652994135
+0.29444444444444445 0.7007325875803306
+0.2962962962962963 0.6112600148417852
+0.29814814814814816 0.5148310891799975
+0.30000000000000004 0.41804437670702094
+0.30185185185185187 0.3282796039274866
+0.30370370370370375 0.2517023242335098
+0.3055555555555556 0.19141876175976152
+0.30740740740740746 0.14690924622604876
+0.30925925925925923 0.11527873802605487
+0.31111111111111117 0.09356447116658453
+0.312962962962963 0.08040518672963586
+0.3148148148148148 0.07592167203396542
+0.3166666666666667 0.08040518672963677
+0.31851851851851853 0.09356447116658362
+0.3203703703703704 0.11527873802605441
+0.32222222222222224 0.14690924622604604
+0.3240740740740741 0.1914187617597604
+0.32592592592592595 0.25170232423351163
+0.3277777777777778 0.32827960392748534
+0.32962962962962966 0.41804437670701916
+0.33148148148148154 0.5148310891799994
+0.3333333333333333 0.6112600148417834
+0.33518518518518525 0.7007325875803301
+0.3370370370370371 0.7787171652994124
+0.3388888888888889 0.8430877397863971
+0.34074074074074084 0.8937520762332655
+0.3425925925925926 0.9319602167917429
+0.3444444444444445 0.9596079770487871
+0.34629629629629627 0.9786975551923156
+0.3481481481481482 0.9909906188751259
+0.35000000000000003 0.9978199685378888
+0.35185185185185186 1.0000046817261843
+0.35370370370370374 0.9978199685378887
+0.3555555555555556 0.9909906188751261
+0.35740740740740745 0.9786975551923159
+0.35925925925925933 0.9596079770487872
+0.36111111111111116 0.9319602167917432
+0.362962962962963 0.8937520762332641
+0.3648148148148149 0.8430877397863957
+0.3666666666666667 0.7787171652994135
+0.3685185185185186 0.7007325875803293
+0.37037037037037035 0.6112600148417852
+0.3722222222222223 0.5148310891799979
+0.3740740740740741 0.4180443767070169
+0.37592592592592594 0.32827960392748595
+0.3777777777777778 0.2517023242335098
+0.37962962962962965 0.1914187617597622
+0.38148148148148153 0.14690924622604604
+0.3833333333333334 0.11527873802605396
+0.38518518518518524 0.09356447116658227
+0.38703703703703707 0.08040518672963767
+0.3888888888888889 0.07592167203396542
+0.3907407407407408 0.08040518672963767
+0.39259259259259266 0.09356447116658362
+0.39444444444444443 0.11527873802605669
+0.39629629629629637 0.14690924622604967
+0.3981481481481482 0.19141876175976105
+0.4 0.2517023242335096
+0.40185185185185196 0.3282796039274907
+0.40370370370370373 0.41804437670701894
+0.4055555555555556 0.5148310891799994
+0.4074074074074074 0.6112600148417809
+0.4092592592592593 0.700732587580332
+0.41111111111111115 0.7787171652994156
+0.412962962962963 0.8430877397863958
+0.41481481481481486 0.8937520762332644
+0.4166666666666667 0.9319602167917428
+0.41851851851851857 0.9596079770487873
+0.42037037037037045 0.9786975551923159
+0.4222222222222223 0.9909906188751261
+0.4240740740740741 0.9978199685378888
+0.42592592592592593 1.0000046817261843
+0.4277777777777778 0.9978199685378888
+0.4296296296296297 0.9909906188751255
+0.43148148148148147 0.9786975551923159
+0.4333333333333334 0.9596079770487872
+0.43518518518518523 0.9319602167917426
+0.43703703703703706 0.8937520762332641
+0.438888888888889 0.8430877397863957
+0.44074074074074077 0.7787171652994149
+0.44259259259259265 0.7007325875803279
+0.4444444444444445 0.6112600148417849
+0.44629629629629636 0.5148310891799979
+0.4481481481481482 0.41804437670701844
+0.45 0.3282796039274875
+0.4518518518518519 0.2517023242335096
+0.4537037037037037 0.1914187617597624
+0.4555555555555556 0.14690924622604556
+0.4574074074074075 0.11527873802605396
+0.4592592592592593 0.09356447116658227
+0.46111111111111114 0.08040518672963767
+0.462962962962963 0.07592167203396542
+0.46481481481481485 0.08040518672963767
+0.46666666666666673 0.09356447116658362
+0.46851851851851856 0.11527873802605669
+0.47037037037037044 0.1469092462260474
+0.4722222222222222 0.19141876175976105
+0.4740740740740741 0.25170232423351
+0.475925925925926 0.32827960392749045
+0.4777777777777778 0.41804437670701927
+0.4796296296296297 0.5148310891799983
+0.4814814814814815 0.6112600148417852
+0.4833333333333334 0.7007325875803319
+0.4851851851851852 0.7787171652994154
+0.4870370370370371 0.8430877397863961
+0.48888888888888893 0.893752076233264
+0.4907407407407408 0.9319602167917428
+0.49259259259259264 0.9596079770487873
+0.4944444444444445 0.9786975551923159
+0.49629629629629635 0.9909906188751261
+0.49814814814814823 0.9978199685378888
+0.5 1.0000046817261843
+0.501851851851852 0.9978199685378888
+0.5037037037037038 0.9909906188751255
+0.5055555555555555 0.9786975551923159
+0.5074074074074075 0.9596079770487872
+0.5092592592592593 0.9319602167917427
+0.5111111111111111 0.8937520762332641
+0.5129629629629631 0.8430877397863957
+0.5148148148148148 0.7787171652994154
+0.5166666666666667 0.7007325875803279
+0.5185185185185186 0.6112600148417849
+0.5203703703703704 0.5148310891799982
+0.5222222222222223 0.41804437670701927
+0.5240740740740741 0.3282796039274875
+0.525925925925926 0.25170232423351
+0.5277777777777778 0.1914187617597624
+0.5296296296296297 0.14690924622604556
+0.5314814814814816 0.11527873802605441
+0.5333333333333334 0.09356447116658362
+0.5351851851851852 0.08040518672963767
+0.537037037037037 0.07592167203396542
+0.538888888888889 0.08040518672963767
+0.5407407407407409 0.09356447116658362
+0.5425925925925926 0.11527873802605669
+0.5444444444444445 0.1469092462260474
+0.5462962962962963 0.19141876175976083
+0.5481481481481482 0.25170232423351
+0.5500000000000002 0.32827960392749045
+0.5518518518518518 0.41804437670701927
+0.5537037037037037 0.5148310891799982
+0.5555555555555556 0.6112600148417807
+0.5574074074074075 0.7007325875803317
+0.5592592592592593 0.7787171652994154
+0.5611111111111111 0.8430877397863957
+0.562962962962963 0.8937520762332641
+0.5648148148148149 0.9319602167917427
+0.5666666666666668 0.9596079770487872
+0.5685185185185185 0.9786975551923159
+0.5703703703703704 0.9909906188751261
+0.5722222222222223 0.9978199685378888
+0.5740740740740741 1.0000046817261843
+0.5759259259259261 0.9978199685378888
+0.5777777777777778 0.990990618875126
+0.5796296296296296 0.9786975551923159
+0.5814814814814816 0.9596079770487873
+0.5833333333333334 0.9319602167917428
+0.5851851851851851 0.893752076233264
+0.5870370370370371 0.8430877397863961
+0.5888888888888889 0.7787171652994154
+0.5907407407407408 0.700732587580328
+0.5925925925925926 0.6112600148417852
+0.5944444444444444 0.5148310891799983
+0.5962962962962963 0.41804437670701927
+0.5981481481481483 0.3282796039274837
+0.6000000000000001 0.25170232423351363
+0.6018518518518519 0.1914187617597624
+0.6037037037037037 0.14690924622604556
+0.6055555555555556 0.11527873802605441
+0.6074074074074075 0.09356447116658
+0.6092592592592592 0.08040518672963767
+0.6111111111111112 0.07592167203396542
+0.612962962962963 0.08040518672963767
+0.6148148148148149 0.09356447116658227
+0.6166666666666668 0.11527873802605532
+0.6185185185185185 0.14690924622604556
+0.6203703703703703 0.19141876175976083
+0.6222222222222223 0.2517023242335096
+0.6240740740740742 0.32827960392749084
+0.625925925925926 0.41804437670702244
+0.6277777777777778 0.5148310891799933
+0.6296296296296297 0.6112600148417849
+0.6314814814814815 0.7007325875803313
+0.6333333333333334 0.7787171652994149
+0.6351851851851853 0.8430877397863983
+0.6370370370370371 0.8937520762332641
+0.638888888888889 0.9319602167917426
+0.6407407407407408 0.9596079770487872
+0.6425925925925926 0.9786975551923159
+0.6444444444444445 0.9909906188751264
+0.6462962962962963 0.9978199685378885
+0.6481481481481483 1.0000046817261843
+0.65 0.9978199685378888
+0.6518518518518519 0.990990618875126
+0.6537037037037038 0.9786975551923153
+0.6555555555555556 0.9596079770487881
+0.6574074074074074 0.9319602167917428
+0.6592592592592593 0.8937520762332644
+0.6611111111111112 0.8430877397863958
+0.6629629629629631 0.7787171652994119
+0.6648148148148149 0.700732587580332
+0.6666666666666666 0.6112600148417853
+0.6685185185185185 0.5148310891799994
+0.6703703703703705 0.41804437670701894
+0.6722222222222224 0.3282796039274832
+0.6740740740740742 0.2517023242335123
+0.6759259259259259 0.19141876175976402
+0.6777777777777778 0.14690924622604556
+0.6796296296296297 0.11527873802605487
+0.6814814814814817 0.09356447116658317
+0.6833333333333332 0.08040518672963767
+0.6851851851851852 0.07592167203396542
+0.6870370370370371 0.08040518672963767
+0.688888888888889 0.09356447116658227
+0.6907407407407408 0.11527873802605532
+0.6925925925925925 0.14690924622604604
+0.6944444444444444 0.19141876175975991
+0.6962962962962964 0.2517023242335098
+0.6981481481481483 0.32827960392748967
+0.7000000000000001 0.4180443767070223
+0.7018518518518518 0.5148310891799933
+0.7037037037037037 0.6112600148417806
+0.7055555555555556 0.7007325875803315
+0.7074074074074075 0.7787171652994154
+0.7092592592592594 0.8430877397863984
+0.7111111111111112 0.893752076233266
+0.712962962962963 0.9319602167917425
+0.7148148148148149 0.9596079770487872
+0.7166666666666667 0.9786975551923159
+0.7185185185185187 0.9909906188751264
+0.7203703703703705 0.9978199685378889
+0.7222222222222223 1.0000046817261843
+0.7240740740740741 0.9978199685378888
+0.725925925925926 0.990990618875126
+0.7277777777777779 0.9786975551923153
+0.7296296296296299 0.9596079770487863
+0.7314814814814815 0.9319602167917429
+0.7333333333333334 0.8937520762332644
+0.7351851851851853 0.8430877397863963
+0.7370370370370372 0.7787171652994124
+0.738888888888889 0.7007325875803283
+0.7407407407407407 0.6112600148417854
+0.7425925925925926 0.5148310891799994
+0.7444444444444446 0.41804437670701916
+0.7462962962962965 0.3282796039274832
+0.7481481481481482 0.2517023242335075
+0.75 0.1914187617597624
+0.7518518518518519 0.14690924622604512
+0.7537037037037038 0.11527873802605487
+0.7555555555555556 0.09356447116658317
+0.7574074074074075 0.08040518672963497
+0.7592592592592593 0.07592167203396542
+0.7611111111111112 0.08040518672963767
+0.7629629629629631 0.09356447116658453
+0.7648148148148148 0.11527873802605487
+0.7666666666666668 0.1469092462260492
+0.7685185185185186 0.1914187617597622
+0.7703703703703705 0.2517023242335098
+0.7722222222222223 0.32827960392748967
+0.7740740740740741 0.41804437670701877
+0.775925925925926 0.5148310891800024
+0.7777777777777778 0.6112600148417852
+0.7796296296296298 0.7000662558285229
+0.7814814814814816 0.7763245296557746
+0.7833333333333334 0.8384948946691805
+0.7851851851851853 0.8869570552182992
+0.7870370370370371 0.9232271230909694
+0.7888888888888889 0.9492694576258136
+0.7907407407407407 0.9670128027064302
+0.7925925925925927 0.9780662862273405
+0.7944444444444446 0.9835831393023908
+0.7962962962962964 0.984215113262963
+0.7981481481481482 0.9801153275130515
+0.8 0.970967317125449
+0.8018518518518519 0.9560369328422141
+0.8037037037037039 0.9342591495117945
+0.8055555555555556 0.9043819907193148
+0.8074074074074075 0.8651911577371731
+0.8092592592592593 0.8158258065470932
+0.8111111111111112 0.7561626376023086
+0.8129629629629631 0.6871928049136468
+0.8148148148148148 0.6112600148417889
+0.8166666666666668 0.5320043789351223
+0.8185185185185186 0.4539098109114265
+0.8203703703703705 0.38150219597472734
+0.8222222222222223 0.31844190919299376
+0.8240740740740741 0.26687389652080645
+0.825925925925926 0.22731824825729463
+0.827777777777778 0.19910720268825208
+0.8296296296296297 0.18108177726148109
+0.8314814814814816 0.17218094626798014
+0.8333333333333334 0.17173784855015767
+0.8351851851851853 0.17954337713547572
+0.8370370370370371 0.19581146666689908
+0.838888888888889 0.22106712840326107
+0.8407407407407409 0.25587694361794805
+0.8425925925925927 0.3004083420077604
+0.8444444444444446 0.35397256654700726
+0.8462962962962963 0.41478880430534454
+0.8481481481481482 0.4801120857208489
+0.8500000000000001 0.5466761265307919
+0.8518518518518519 0.6112600148417815
+0.8537037037037039 0.671171015476887
+0.8555555555555556 0.7245184220845888
+0.8574074074074075 0.770261135811477
+0.8592592592592594 0.8080866395542531
+0.8611111111111112 0.838204317918707
+0.8629629629629629 0.8611245562670603
+0.8648148148148149 0.8774683183206623
+0.8666666666666668 0.8878262407850736
+0.8685185185185187 0.8926690199367775
+0.8703703703703705 0.8923026289797253
+0.8722222222222222 0.8868601876540964
+0.8740740740740741 0.8763239779680679
+0.8759259259259261 0.860573539216722
+0.877777777777778 0.839457101903561
+0.8796296296296297 0.8128826400111351
+0.8814814814814815 0.7809210707767439
+0.8833333333333334 0.7439081525488904
+0.8851851851851853 0.7025253239861226
+0.8870370370370372 0.6578363562782673
+0.888888888888889 0.6112600148417849
+0.8907407407407408 0.5644712436976566
+0.8925925925925927 0.5192431283719975
+0.8944444444444446 0.47726249580089064
+0.8962962962962964 0.4399638668882644
+0.8981481481481481 0.4084221188188298
+0.9 0.38332379278761614
+0.901851851851852 0.3650095436211867
+0.9037037037037038 0.3535586425965464
+0.9055555555555557 0.3488793180222912
+0.9074074074074074 0.3507757948758571
+0.9092592592592593 0.3589774335923883
+0.9111111111111112 0.37313028903623147
+0.9129629629629631 0.3927630768718494
+0.914814814814815 0.41724683363822646
+0.9166666666666667 0.44576943778659933
+0.9185185185185186 0.47734145629751373
+0.9203703703703704 0.5108392228036693
+0.9222222222222223 0.5450783763694812
+0.9240740740740743 0.5789014449739956
+0.925925925925926 0.6112600148417845
+0.9277777777777778 0.6412757623843682
+0.9296296296296297 0.6682724318714947
+0.9314814814814816 0.6917790963735548
+0.9333333333333335 0.7115110433113251
+0.9351851851851852 0.7273373672784774
+0.9370370370370371 0.7392442363225181
+0.938888888888889 0.7473009105429775
+0.9407407407407409 0.7516330377591053
+0.9425925925925928 0.7524052953363636
+0.9444444444444444 0.7498134547244848
+0.9462962962962964 0.7440844872286745
+0.9481481481481482 0.7354823381126927
+0.9500000000000002 0.7243163902363281
+0.951851851851852 0.7109493917236009
+0.9537037037037036 0.695801769690309
+0.9555555555555556 0.6793498472037361
+0.9574074074074076 0.662116525108746
+0.9592592592592594 0.6446543704173732
+0.9611111111111112 0.6275225190204095
+0.962962962962963 0.6112600148417837
+0.9648148148148148 0.5963588544290377
+0.9666666666666668 0.5832399194250436
+0.9685185185185187 0.5722342237412583
+0.9703703703703704 0.5635707555653802
+0.9722222222222222 0.5573710353040976
+0.9740740740740742 0.5536496642416132
+0.975925925925926 0.5523197577184019
+0.9777777777777779 0.5532021909989459
+0.9796296296296299 0.5560378433445659
+0.9814814814814816 0.5605022804213778
+0.9833333333333334 0.5662224098001489
+0.9851851851851853 0.5727945435109563
+0.987037037037037 0.5798030837911864
+0.988888888888889 0.5868388504889752
+0.9907407407407408 0.5935160158642286
+0.9925925925925927 0.5994867625161924
+0.9944444444444445 0.6044531055618283
+0.9962962962962965 0.6081757281507512
+0.9981481481481482 0.6104800531118608
+1. 0.6112600148417837
+$ENDCOORD
diff --git a/demos/pic_programmer/fp-lib-table b/demos/pic_programmer/fp-lib-table
new file mode 100644
index 0000000..9308deb
--- /dev/null
+++ b/demos/pic_programmer/fp-lib-table
@@ -0,0 +1,4 @@
+(fp_lib_table
+ (lib (name footprints)(type KiCad)(uri ${KIPRJMOD}/libs/pic_programmer_fp.pretty)(options "")(descr "project specific"))
+ (lib (name sockets)(type KiCad)(uri ${KISYSMOD}/Sockets.pretty)(options "")(descr ""))
+)
diff --git a/demos/pic_programmer/libs/pic_programmer_fp.pretty/1pin-4.kicad_mod b/demos/pic_programmer/libs/pic_programmer_fp.pretty/1pin-4.kicad_mod
new file mode 100644
index 0000000..adff1e5
--- /dev/null
+++ b/demos/pic_programmer/libs/pic_programmer_fp.pretty/1pin-4.kicad_mod
@@ -0,0 +1,12 @@
+(module 1pin-4 (layer F.Cu) (tedit 5401E012)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (fp_text reference 1PIN-4 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value P103 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+)
diff --git a/demos/pic_programmer/libs/pic_programmer_schlib.lib b/demos/pic_programmer/libs/pic_programmer_schlib.lib
new file mode 100644
index 0000000..eaebdde
--- /dev/null
+++ b/demos/pic_programmer/libs/pic_programmer_schlib.lib
@@ -0,0 +1,606 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 24C16
+#
+DEF 24C16 U 0 30 Y Y 1 F N
+F0 "U" 150 350 60 H V C CNN
+F1 "24C16" 200 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 24C512
+DRAW
+X GND 4 0 -500 200 U 60 60 0 0 W
+X VCC 8 0 500 200 D 60 60 0 0 W
+S -400 -300 400 300 1 1 0 N
+X A0 1 -700 200 300 R 60 60 1 1 I
+X A1 2 -700 100 300 R 60 60 1 1 I
+X A2 3 -700 0 300 R 60 60 1 1 I
+X SDA 5 700 -200 300 L 60 60 1 1 B
+X SCL 6 700 -100 300 L 60 60 1 1 I
+X WP 7 700 100 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JUMPER
+#
+DEF JUMPER JP 0 30 Y N 1 F N
+F0 "JP" 0 150 60 H V C CNN
+F1 "JUMPER" 0 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
+C -100 0 35 0 1 0 N
+C 100 0 35 0 1 0 N
+X 1 1 -300 0 165 R 60 60 0 1 P
+X 2 2 300 0 165 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LT1372
+#
+DEF LT1372 U 0 30 Y Y 1 F N
+F0 "U" 600 500 60 H V C CNN
+F1 "LT1372" -500 500 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LT1373
+DRAW
+S -700 -400 700 400 0 1 0 N
+X Vc 1 250 -700 300 U 60 60 1 1 I
+X FB+ 2 1000 -250 300 L 60 60 1 1 I
+X FB- 3 -1000 250 300 R 60 60 1 1 P
+X S/S 4 -1000 -250 300 R 60 60 1 1 P
+X Vin 5 0 700 300 D 60 60 1 1 W
+X GND_S 6 -150 -700 300 U 60 60 1 1 I
+X GND 7 -300 -700 300 U 60 60 1 1 I
+X Vsw 8 1000 250 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NPN
+#
+DEF NPN Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 50 H V R CNN
+F1 "NPN" 0 150 50 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PIC12C508A
+#
+DEF PIC12C508A U 0 40 Y Y 1 F N
+F0 "U" 0 700 60 H V C CNN
+F1 "PIC12C508A" 0 -650 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS PIC12C509A
+DRAW
+S 400 -600 -450 650 0 1 0 N
+X VDD 1 -750 500 300 R 50 50 1 1 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 1 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 1 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 1 I
+X GP2 5 700 -500 300 L 50 50 1 1 I
+X GP1 6 700 -200 300 L 50 50 1 1 I
+X GP0 7 700 200 300 L 50 50 1 1 I
+X VSS 8 700 500 300 L 50 50 1 1 W
+X VDD 1 -750 500 300 R 50 50 1 2 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 2 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 2 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 2 I
+X GP2 5 700 -500 300 L 50 50 1 2 I
+X GP1 6 700 -200 300 L 50 50 1 2 I
+X GP0 7 700 200 300 L 50 50 1 2 I
+X VSS 8 700 500 300 L 50 50 1 2 W
+ENDDRAW
+ENDDEF
+#
+# PIC16F54
+#
+DEF PIC16F54 U? 0 40 Y Y 1 F N
+F0 "U?" 0 -750 60 H V C CNN
+F1 "PIC16F54" 0 800 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 700 450 -700 0 1 0 N
+X RA2 1 -800 600 300 R 50 50 1 1 B
+X RA3 2 -800 450 300 R 50 50 1 1 B
+X T0ckl 3 -800 300 300 R 50 50 1 1 O
+X MCLR 4 -800 150 300 R 50 50 1 1 I
+X VSS 5 -800 0 300 R 50 50 1 1 W
+X RB0 6 -800 -150 300 R 50 50 1 1 B
+X RB1 7 -800 -300 300 R 50 50 1 1 B
+X RB2 8 -800 -450 300 R 50 50 1 1 B
+X RB3 9 -800 -600 300 R 50 50 1 1 B
+X RB4 10 750 -600 300 L 50 50 1 1 B
+X RB5 11 750 -450 300 L 50 50 1 1 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 1 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 1 B
+X VDD 14 750 0 300 L 50 50 1 1 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 1 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 1 I
+X RA0 17 750 450 300 L 50 50 1 1 B
+X RA1 18 750 600 300 L 50 50 1 1 B
+X RA2 1 -800 600 300 R 50 50 1 2 B
+X RA3 2 -800 450 300 R 50 50 1 2 B
+X T0ckl 3 -800 300 300 R 50 50 1 2 O
+X MCLR 4 -800 150 300 R 50 50 1 2 I
+X VSS 5 -800 0 300 R 50 50 1 2 W
+X RB0 6 -800 -150 300 R 50 50 1 2 B
+X RB1 7 -800 -300 300 R 50 50 1 2 B
+X RB2 8 -800 -450 300 R 50 50 1 2 B
+X RB3 9 -800 -600 300 R 50 50 1 2 B
+X RB4 10 750 -600 300 L 50 50 1 2 B
+X RB5 11 750 -450 300 L 50 50 1 2 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 2 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 2 B
+X VDD 14 750 0 300 L 50 50 1 2 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 2 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 2 I
+X RA0 17 750 450 300 L 50 50 1 2 B
+X RA1 18 750 600 300 L 50 50 1 2 B
+ENDDRAW
+ENDDEF
+#
+# PNP
+#
+DEF PNP Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 60 H V R CNN
+F1 "PNP" 0 150 60 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP28
+#
+DEF SUPP28 J 0 40 Y Y 1 F N
+F0 "J" 0 100 70 H V C CNN
+F1 "SUPP28" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -750 300 750 0 1 0 N
+X 1 1 -600 650 300 R 60 60 1 1 P
+X 2 2 -600 550 300 R 60 60 1 1 P
+X 3 3 -600 450 300 R 60 60 1 1 P
+X 4 4 -600 350 300 R 60 60 1 1 P
+X 5 5 -600 250 300 R 60 60 1 1 P
+X 6 6 -600 150 300 R 60 60 1 1 P
+X 7 7 -600 50 300 R 60 60 1 1 P
+X 8 8 -600 -50 300 R 60 60 1 1 P
+X 9 9 -600 -150 300 R 60 60 1 1 P
+X 10 10 -600 -250 300 R 60 60 1 1 P
+X 20 20 600 -150 300 L 60 60 1 1 P
+X 11 11 -600 -350 300 R 60 60 1 1 P
+X 21 21 600 -50 300 L 60 60 1 1 P
+X 12 12 -600 -450 300 R 60 60 1 1 P
+X 22 22 600 50 300 L 60 60 1 1 P
+X 13 13 -600 -550 300 R 60 60 1 1 P
+X 23 23 600 150 300 L 60 60 1 1 P
+X 14 14 -600 -650 300 R 60 60 1 1 P
+X 24 24 600 250 300 L 60 60 1 1 P
+X 15 15 600 -650 300 L 60 60 1 1 P
+X 25 25 600 350 300 L 60 60 1 1 P
+X 16 16 600 -550 300 L 60 60 1 1 P
+X 26 26 600 450 300 L 60 60 1 1 P
+X 17 17 600 -450 300 L 60 60 1 1 P
+X 27 27 600 550 300 L 60 60 1 1 P
+X 18 18 600 -350 300 L 60 60 1 1 P
+X 28 28 600 650 300 L 60 60 1 1 P
+X 19 19 600 -250 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP40
+#
+DEF SUPP40 P 0 40 Y Y 1 F N
+F0 "P" 0 1100 70 H V C CNN
+F1 "SUPP40" 0 -1100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -1050 300 1050 0 1 0 N
+X 1 1 -600 950 300 R 60 60 1 1 P
+X 2 2 -600 850 300 R 60 60 1 1 P
+X 3 3 -600 750 300 R 60 60 1 1 P
+X 4 4 -600 650 300 R 60 60 1 1 P
+X 5 5 -600 550 300 R 60 60 1 1 P
+X 6 6 -600 450 300 R 60 60 1 1 P
+X 7 7 -600 350 300 R 60 60 1 1 P
+X 8 8 -600 250 300 R 60 60 1 1 P
+X 9 9 -600 150 300 R 60 60 1 1 P
+X 10 10 -600 50 300 R 60 60 1 1 P
+X 20 20 -600 -950 300 R 60 60 1 1 P
+X 30 30 600 -50 300 L 60 60 1 1 P
+X 40 40 600 950 300 L 60 60 1 1 P
+X 11 11 -600 -50 300 R 60 60 1 1 P
+X 21 21 600 -950 300 L 60 60 1 1 P
+X 31 31 600 50 300 L 60 60 1 1 P
+X 12 12 -600 -150 300 R 60 60 1 1 P
+X 22 22 600 -850 300 L 60 60 1 1 P
+X 32 32 600 150 300 L 60 60 1 1 P
+X 13 13 -600 -250 300 R 60 60 1 1 P
+X 23 23 600 -750 300 L 60 60 1 1 P
+X 33 33 600 250 300 L 60 60 1 1 P
+X 14 14 -600 -350 300 R 60 60 1 1 P
+X 24 24 600 -650 300 L 60 60 1 1 P
+X 34 34 600 350 300 L 60 60 1 1 P
+X 15 15 -600 -450 300 R 60 60 1 1 P
+X 25 25 600 -550 300 L 60 60 1 1 P
+X 35 35 600 450 300 L 60 60 1 1 P
+X 16 16 -600 -550 300 R 60 60 1 1 P
+X 26 26 600 -450 300 L 60 60 1 1 P
+X 36 36 600 550 300 L 60 60 1 1 P
+X 17 17 -600 -650 300 R 60 60 1 1 P
+X 27 27 600 -350 300 L 60 60 1 1 P
+X 37 37 600 650 300 L 60 60 1 1 P
+X 18 18 -600 -750 300 R 60 60 1 1 P
+X 28 28 600 -250 300 L 60 60 1 1 P
+X 38 38 600 750 300 L 60 60 1 1 P
+X 19 19 -600 -850 300 R 60 60 1 1 P
+X 29 29 600 -150 300 L 60 60 1 1 P
+X 39 39 600 850 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VPP
+#
+DEF VPP #PWR 0 0 Y Y 1 F N
+F0 "#PWR" 0 200 40 H I C CNN
+F1 "VPP" 0 150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VPP 1 0 0 0 U 40 40 0 0 W N
+C 0 80 20 0 1 0 N
+P 2 0 1 0 0 60 0 0 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/pic_programmer/pic_programmer-cache.lib b/demos/pic_programmer/pic_programmer-cache.lib
new file mode 100644
index 0000000..eaebdde
--- /dev/null
+++ b/demos/pic_programmer/pic_programmer-cache.lib
@@ -0,0 +1,606 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 24C16
+#
+DEF 24C16 U 0 30 Y Y 1 F N
+F0 "U" 150 350 60 H V C CNN
+F1 "24C16" 200 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 24C512
+DRAW
+X GND 4 0 -500 200 U 60 60 0 0 W
+X VCC 8 0 500 200 D 60 60 0 0 W
+S -400 -300 400 300 1 1 0 N
+X A0 1 -700 200 300 R 60 60 1 1 I
+X A1 2 -700 100 300 R 60 60 1 1 I
+X A2 3 -700 0 300 R 60 60 1 1 I
+X SDA 5 700 -200 300 L 60 60 1 1 B
+X SCL 6 700 -100 300 L 60 60 1 1 I
+X WP 7 700 100 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# JUMPER
+#
+DEF JUMPER JP 0 30 Y N 1 F N
+F0 "JP" 0 150 60 H V C CNN
+F1 "JUMPER" 0 -80 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
+C -100 0 35 0 1 0 N
+C 100 0 35 0 1 0 N
+X 1 1 -300 0 165 R 60 60 0 1 P
+X 2 2 300 0 165 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LT1372
+#
+DEF LT1372 U 0 30 Y Y 1 F N
+F0 "U" 600 500 60 H V C CNN
+F1 "LT1372" -500 500 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LT1373
+DRAW
+S -700 -400 700 400 0 1 0 N
+X Vc 1 250 -700 300 U 60 60 1 1 I
+X FB+ 2 1000 -250 300 L 60 60 1 1 I
+X FB- 3 -1000 250 300 R 60 60 1 1 P
+X S/S 4 -1000 -250 300 R 60 60 1 1 P
+X Vin 5 0 700 300 D 60 60 1 1 W
+X GND_S 6 -150 -700 300 U 60 60 1 1 I
+X GND 7 -300 -700 300 U 60 60 1 1 I
+X Vsw 8 1000 250 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NPN
+#
+DEF NPN Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 50 H V R CNN
+F1 "NPN" 0 150 50 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PIC12C508A
+#
+DEF PIC12C508A U 0 40 Y Y 1 F N
+F0 "U" 0 700 60 H V C CNN
+F1 "PIC12C508A" 0 -650 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS PIC12C509A
+DRAW
+S 400 -600 -450 650 0 1 0 N
+X VDD 1 -750 500 300 R 50 50 1 1 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 1 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 1 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 1 I
+X GP2 5 700 -500 300 L 50 50 1 1 I
+X GP1 6 700 -200 300 L 50 50 1 1 I
+X GP0 7 700 200 300 L 50 50 1 1 I
+X VSS 8 700 500 300 L 50 50 1 1 W
+X VDD 1 -750 500 300 R 50 50 1 2 W
+X GP5/OSC1 2 -750 200 300 R 50 50 1 2 I
+X GP4/OSC2 3 -750 -200 300 R 50 50 1 2 I
+X GP3/MCLR 4 -750 -500 300 R 50 50 1 2 I
+X GP2 5 700 -500 300 L 50 50 1 2 I
+X GP1 6 700 -200 300 L 50 50 1 2 I
+X GP0 7 700 200 300 L 50 50 1 2 I
+X VSS 8 700 500 300 L 50 50 1 2 W
+ENDDRAW
+ENDDEF
+#
+# PIC16F54
+#
+DEF PIC16F54 U? 0 40 Y Y 1 F N
+F0 "U?" 0 -750 60 H V C CNN
+F1 "PIC16F54" 0 800 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 700 450 -700 0 1 0 N
+X RA2 1 -800 600 300 R 50 50 1 1 B
+X RA3 2 -800 450 300 R 50 50 1 1 B
+X T0ckl 3 -800 300 300 R 50 50 1 1 O
+X MCLR 4 -800 150 300 R 50 50 1 1 I
+X VSS 5 -800 0 300 R 50 50 1 1 W
+X RB0 6 -800 -150 300 R 50 50 1 1 B
+X RB1 7 -800 -300 300 R 50 50 1 1 B
+X RB2 8 -800 -450 300 R 50 50 1 1 B
+X RB3 9 -800 -600 300 R 50 50 1 1 B
+X RB4 10 750 -600 300 L 50 50 1 1 B
+X RB5 11 750 -450 300 L 50 50 1 1 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 1 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 1 B
+X VDD 14 750 0 300 L 50 50 1 1 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 1 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 1 I
+X RA0 17 750 450 300 L 50 50 1 1 B
+X RA1 18 750 600 300 L 50 50 1 1 B
+X RA2 1 -800 600 300 R 50 50 1 2 B
+X RA3 2 -800 450 300 R 50 50 1 2 B
+X T0ckl 3 -800 300 300 R 50 50 1 2 O
+X MCLR 4 -800 150 300 R 50 50 1 2 I
+X VSS 5 -800 0 300 R 50 50 1 2 W
+X RB0 6 -800 -150 300 R 50 50 1 2 B
+X RB1 7 -800 -300 300 R 50 50 1 2 B
+X RB2 8 -800 -450 300 R 50 50 1 2 B
+X RB3 9 -800 -600 300 R 50 50 1 2 B
+X RB4 10 750 -600 300 L 50 50 1 2 B
+X RB5 11 750 -450 300 L 50 50 1 2 B
+X ICSPC/RB6 12 750 -300 300 L 50 50 1 2 B
+X ICSPD/RB7 13 750 -150 300 L 50 50 1 2 B
+X VDD 14 750 0 300 L 50 50 1 2 W
+X OSC2/CLKO 15 750 150 300 L 50 50 1 2 O
+X OSC1/CLKI 16 750 300 300 L 50 50 1 2 I
+X RA0 17 750 450 300 L 50 50 1 2 B
+X RA1 18 750 600 300 L 50 50 1 2 B
+ENDDRAW
+ENDDEF
+#
+# PNP
+#
+DEF PNP Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 60 H V R CNN
+F1 "PNP" 0 150 60 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 F
+P 3 0 1 0 25 -25 0 0 0 0 N
+P 3 0 1 0 100 -100 65 -65 65 -65 N
+P 5 0 1 0 25 -25 50 -75 75 -50 25 -25 25 -25 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP28
+#
+DEF SUPP28 J 0 40 Y Y 1 F N
+F0 "J" 0 100 70 H V C CNN
+F1 "SUPP28" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -750 300 750 0 1 0 N
+X 1 1 -600 650 300 R 60 60 1 1 P
+X 2 2 -600 550 300 R 60 60 1 1 P
+X 3 3 -600 450 300 R 60 60 1 1 P
+X 4 4 -600 350 300 R 60 60 1 1 P
+X 5 5 -600 250 300 R 60 60 1 1 P
+X 6 6 -600 150 300 R 60 60 1 1 P
+X 7 7 -600 50 300 R 60 60 1 1 P
+X 8 8 -600 -50 300 R 60 60 1 1 P
+X 9 9 -600 -150 300 R 60 60 1 1 P
+X 10 10 -600 -250 300 R 60 60 1 1 P
+X 20 20 600 -150 300 L 60 60 1 1 P
+X 11 11 -600 -350 300 R 60 60 1 1 P
+X 21 21 600 -50 300 L 60 60 1 1 P
+X 12 12 -600 -450 300 R 60 60 1 1 P
+X 22 22 600 50 300 L 60 60 1 1 P
+X 13 13 -600 -550 300 R 60 60 1 1 P
+X 23 23 600 150 300 L 60 60 1 1 P
+X 14 14 -600 -650 300 R 60 60 1 1 P
+X 24 24 600 250 300 L 60 60 1 1 P
+X 15 15 600 -650 300 L 60 60 1 1 P
+X 25 25 600 350 300 L 60 60 1 1 P
+X 16 16 600 -550 300 L 60 60 1 1 P
+X 26 26 600 450 300 L 60 60 1 1 P
+X 17 17 600 -450 300 L 60 60 1 1 P
+X 27 27 600 550 300 L 60 60 1 1 P
+X 18 18 600 -350 300 L 60 60 1 1 P
+X 28 28 600 650 300 L 60 60 1 1 P
+X 19 19 600 -250 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# SUPP40
+#
+DEF SUPP40 P 0 40 Y Y 1 F N
+F0 "P" 0 1100 70 H V C CNN
+F1 "SUPP40" 0 -1100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -300 -1050 300 1050 0 1 0 N
+X 1 1 -600 950 300 R 60 60 1 1 P
+X 2 2 -600 850 300 R 60 60 1 1 P
+X 3 3 -600 750 300 R 60 60 1 1 P
+X 4 4 -600 650 300 R 60 60 1 1 P
+X 5 5 -600 550 300 R 60 60 1 1 P
+X 6 6 -600 450 300 R 60 60 1 1 P
+X 7 7 -600 350 300 R 60 60 1 1 P
+X 8 8 -600 250 300 R 60 60 1 1 P
+X 9 9 -600 150 300 R 60 60 1 1 P
+X 10 10 -600 50 300 R 60 60 1 1 P
+X 20 20 -600 -950 300 R 60 60 1 1 P
+X 30 30 600 -50 300 L 60 60 1 1 P
+X 40 40 600 950 300 L 60 60 1 1 P
+X 11 11 -600 -50 300 R 60 60 1 1 P
+X 21 21 600 -950 300 L 60 60 1 1 P
+X 31 31 600 50 300 L 60 60 1 1 P
+X 12 12 -600 -150 300 R 60 60 1 1 P
+X 22 22 600 -850 300 L 60 60 1 1 P
+X 32 32 600 150 300 L 60 60 1 1 P
+X 13 13 -600 -250 300 R 60 60 1 1 P
+X 23 23 600 -750 300 L 60 60 1 1 P
+X 33 33 600 250 300 L 60 60 1 1 P
+X 14 14 -600 -350 300 R 60 60 1 1 P
+X 24 24 600 -650 300 L 60 60 1 1 P
+X 34 34 600 350 300 L 60 60 1 1 P
+X 15 15 -600 -450 300 R 60 60 1 1 P
+X 25 25 600 -550 300 L 60 60 1 1 P
+X 35 35 600 450 300 L 60 60 1 1 P
+X 16 16 -600 -550 300 R 60 60 1 1 P
+X 26 26 600 -450 300 L 60 60 1 1 P
+X 36 36 600 550 300 L 60 60 1 1 P
+X 17 17 -600 -650 300 R 60 60 1 1 P
+X 27 27 600 -350 300 L 60 60 1 1 P
+X 37 37 600 650 300 L 60 60 1 1 P
+X 18 18 -600 -750 300 R 60 60 1 1 P
+X 28 28 600 -250 300 L 60 60 1 1 P
+X 38 38 600 750 300 L 60 60 1 1 P
+X 19 19 -600 -850 300 R 60 60 1 1 P
+X 29 29 600 -150 300 L 60 60 1 1 P
+X 39 39 600 850 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VPP
+#
+DEF VPP #PWR 0 0 Y Y 1 F N
+F0 "#PWR" 0 200 40 H I C CNN
+F1 "VPP" 0 150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VPP 1 0 0 0 U 40 40 0 0 W N
+C 0 80 20 0 1 0 N
+P 2 0 1 0 0 60 0 0 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/pic_programmer/pic_programmer.kicad_pcb b/demos/pic_programmer/pic_programmer.kicad_pcb
new file mode 100644
index 0000000..2612914
--- /dev/null
+++ b/demos/pic_programmer/pic_programmer.kicad_pcb
@@ -0,0 +1,4172 @@
+(kicad_pcb (version 4) (host pcbnew "(2014-09-16 BZR 5138)-product")
+
+ (general
+ (links 130)
+ (no_connects 0)
+ (area 56.717599 26.199499 233.870501 139.890501)
+ (thickness 1.6)
+ (drawings 24)
+ (tracks 354)
+ (zones 0)
+ (modules 63)
+ (nets 35)
+ )
+
+ (page A4)
+ (title_block
+ (title "SERIAL PIC PROGRAMMER")
+ )
+
+ (layers
+ (0 Composant signal)
+ (31 Cuivre signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.5)
+ (user_trace_width 0.4)
+ (user_trace_width 0.5)
+ (trace_clearance 0.25)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 1.6)
+ (via_drill 0.6)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 1.5748 2.794)
+ (pad_drill 0.8128)
+ (pad_to_mask_clearance 0.1)
+ (aux_axis_origin 62.23 153.67)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions true)
+ (excludeedgelayer true)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 /CTS)
+ (net 2 /DTR)
+ (net 3 /PC-CLOCK-OUT)
+ (net 4 /TXD)
+ (net 5 GND)
+ (net 6 "Net-(C2-Pad1)")
+ (net 7 "Net-(C4-Pad1)")
+ (net 8 "Net-(C5-Pad1)")
+ (net 9 "Net-(C9-Pad2)")
+ (net 10 "Net-(D1-Pad1)")
+ (net 11 "Net-(D10-Pad1)")
+ (net 12 "Net-(D11-Pad1)")
+ (net 13 "Net-(D11-Pad2)")
+ (net 14 "Net-(D12-Pad1)")
+ (net 15 "Net-(D2-Pad1)")
+ (net 16 "Net-(D4-Pad1)")
+ (net 17 "Net-(D6-Pad1)")
+ (net 18 "Net-(D8-Pad1)")
+ (net 19 "Net-(D9-Pad1)")
+ (net 20 "Net-(Q1-Pad2)")
+ (net 21 "Net-(Q2-Pad3)")
+ (net 22 "Net-(Q3-Pad2)")
+ (net 23 "Net-(R12-Pad1)")
+ (net 24 "Net-(R13-Pad1)")
+ (net 25 "Net-(R15-Pad1)")
+ (net 26 "Net-(R16-Pad1)")
+ (net 27 "Net-(R8-Pad1)")
+ (net 28 "Net-(RV1-Pad2)")
+ (net 29 VCC)
+ (net 30 VPP)
+ (net 31 /pic_sockets/VCC_PIC)
+ (net 32 /pic_sockets/VPP-MCLR)
+ (net 33 /pic_sockets/CLOCK-RB6)
+ (net 34 /pic_sockets/DATA-RB7)
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.25)
+ (trace_width 0.5)
+ (via_dia 1.6)
+ (via_drill 0.6)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net /CTS)
+ (add_net /DTR)
+ (add_net /PC-CLOCK-OUT)
+ (add_net /TXD)
+ (add_net /pic_sockets/CLOCK-RB6)
+ (add_net /pic_sockets/DATA-RB7)
+ (add_net /pic_sockets/VCC_PIC)
+ (add_net /pic_sockets/VPP-MCLR)
+ (add_net "Net-(C2-Pad1)")
+ (add_net "Net-(C4-Pad1)")
+ (add_net "Net-(C5-Pad1)")
+ (add_net "Net-(C9-Pad2)")
+ (add_net "Net-(D1-Pad1)")
+ (add_net "Net-(D10-Pad1)")
+ (add_net "Net-(D11-Pad1)")
+ (add_net "Net-(D11-Pad2)")
+ (add_net "Net-(D12-Pad1)")
+ (add_net "Net-(D2-Pad1)")
+ (add_net "Net-(D4-Pad1)")
+ (add_net "Net-(D6-Pad1)")
+ (add_net "Net-(D8-Pad1)")
+ (add_net "Net-(D9-Pad1)")
+ (add_net "Net-(Q1-Pad2)")
+ (add_net "Net-(Q2-Pad3)")
+ (add_net "Net-(Q3-Pad2)")
+ (add_net "Net-(R12-Pad1)")
+ (add_net "Net-(R13-Pad1)")
+ (add_net "Net-(R15-Pad1)")
+ (add_net "Net-(R16-Pad1)")
+ (add_net "Net-(R8-Pad1)")
+ (add_net "Net-(RV1-Pad2)")
+ (add_net VPP)
+ )
+
+ (net_class POWER ""
+ (clearance 0.28)
+ (trace_width 0.8)
+ (via_dia 1.6)
+ (via_drill 0.6)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ (add_net VCC)
+ )
+
+ (module discret:CP10 (layer Composant) (tedit 54031E5E) (tstamp 54032B86)
+ (at 97.79 78.74 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /442A5056)
+ (fp_text reference C1 (at 2.54 1.27 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 100µF (at -1.905 -1.27 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 12.7 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 0) (end 10.16 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 -2.54) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -1.27) (end -10.16 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 -1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 1.27) (end -7.62 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -12.7 0) (end -10.16 0) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole circle (at 12.7 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 1 thru_hole rect (at -12.7 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP10 (layer Composant) (tedit 54031E5E) (tstamp 54032B95)
+ (at 97.155 90.17)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /442A501D)
+ (fp_text reference C2 (at 2.54 1.27) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 220uF (at -1.905 -1.27) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 12.7 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 0) (end 10.16 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 10.16 -2.54) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -1.27) (end -10.16 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 -1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -10.16 1.27) (end -7.62 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -12.7 0) (end -10.16 0) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole circle (at 12.7 0) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 1 thru_hole rect (at -12.7 0) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(C2-Pad1)"))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CP8 (layer Composant) (tedit 54031E5E) (tstamp 54032BA4)
+ (at 133.985 72.39 270)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /442A584C)
+ (fp_text reference C3 (at 1.27 1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 22uF/25V (at 1.27 -1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 0) (end -8.89 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 2.54) (end -7.62 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -2.54) (end 8.89 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 -2.54) (end 8.89 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 2.54) (end -7.62 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 0) (end 10.16 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 2.54) (end -6.35 -2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 VPP))
+ (pad 2 thru_hole circle (at 10.16 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.8 0.8 0.8))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 54031E5E) (tstamp 54032BB4)
+ (at 116.84 52.07)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /442A5F61)
+ (fp_text reference C4 (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 0 (at 0 2.032) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 54031E5E) (tstamp 54032BBF)
+ (at 132.08 49.53)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /442A58B1)
+ (fp_text reference C5 (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 10nF (at 0 2.032) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(C5-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 54031E5E) (tstamp 54032BCA)
+ (at 196.85 114.935 270)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /4804A5E2/442AA12B)
+ (fp_text reference C6 (at 0 2.032 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100nF (at 0 2.032 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole circle (at 0 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 54031E5E) (tstamp 54032BD5)
+ (at 198.755 73.66 270)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /4804A5E2/442AA145)
+ (fp_text reference C7 (at 0 2.032 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100nF (at 0 2.032 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole circle (at 0 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1-1 (layer Composant) (tedit 54031E5E) (tstamp 54032BE0)
+ (at 145.542 49.784)
+ (descr "Condensateur e = 1 ou 2 pas")
+ (tags C)
+ (path /464AD280)
+ (fp_text reference C9 (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 22OnF (at 0 2.032) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 VPP))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(C9-Pad2)"))
+ (pad 2 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(C9-Pad2)"))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D5 (layer Composant) (tedit 54031E5E) (tstamp 54032BEB)
+ (at 87.63 64.77 270)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /442A500B)
+ (fp_text reference D1 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value 1N4004 (at -0.254 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -6.35 0 270) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 10 "Net-(D1-Pad1)"))
+ (pad 2 thru_hole rect (at 6.35 0 270) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(C2-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032BFA)
+ (at 104.14 118.11)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /442A4D1B)
+ (fp_text reference D2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(D2-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032C09)
+ (at 104.14 121.92)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /442A4D25)
+ (fp_text reference D3 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(D2-Pad1)"))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032C18)
+ (at 104.14 111.76)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /442A4D5C)
+ (fp_text reference D4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(D4-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032C27)
+ (at 104.14 109.22)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /442A4D5D)
+ (fp_text reference D5 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(D4-Pad1)"))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032C36)
+ (at 104.14 124.46)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /442A4D64)
+ (fp_text reference D6 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D6-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032C45)
+ (at 104.14 115.57)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /442A4D65)
+ (fp_text reference D7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D6-Pad1)"))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 54031E5E) (tstamp 54032C54)
+ (at 154.94 77.47)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /442A4F5D)
+ (fp_text reference D8 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value RED-LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(D8-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 54031E5E) (tstamp 54032C5D)
+ (at 154.94 87.63)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /442A5084)
+ (fp_text reference D9 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value GREEN-LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(D9-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D5 (layer Composant) (tedit 54031E5E) (tstamp 54032C66)
+ (at 130.81 57.15)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /442A6026)
+ (fp_text reference D10 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value SCHOTTKY (at -0.254 0) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 11 "Net-(D10-Pad1)"))
+ (pad 2 thru_hole rect (at 6.35 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 30 VPP))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 54032C75)
+ (at 142.875 80.645 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4639BA28)
+ (fp_text reference D11 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT43 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(D11-Pad2)"))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(D11-Pad1)"))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 54031E5E) (tstamp 54032C84)
+ (at 154.94 97.155)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /4639B9EA)
+ (fp_text reference D12 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value YELLOW-LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 "Net-(D12-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:DB9FC (layer Composant) (tedit 54031E5E) (tstamp 54032C8D)
+ (at 81.28 115.57 90)
+ (descr "Connecteur DB9 femelle couche")
+ (tags "CONN DB9")
+ (path /442A4C93)
+ (fp_text reference J1 (at 1.27 -10.16 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9-FEMAL (at 1.27 -3.81 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 12.827 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -12.573 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -5.461 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at -2.667 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole circle (at 0 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /TXD))
+ (pad 4 thru_hole circle (at 2.794 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /DTR))
+ (pad 5 thru_hole circle (at 5.588 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 6 thru_hole circle (at -4.064 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole circle (at -1.27 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /PC-CLOCK-OUT))
+ (pad 8 thru_hole circle (at 1.397 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /CTS))
+ (pad 9 thru_hole circle (at 4.191 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (model Connect.3dshapes/DB9FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:GS2 (layer Cuivre) (tedit 54031E5E) (tstamp 54032CA5)
+ (at 147.32 97.79 270)
+ (descr "Pontet Goute de soudure")
+ (path /4639BAF8)
+ (attr virtual)
+ (fp_text reference JP1 (at 1.778 0 540) (layer B.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value JUMPER (at 1.524 0 540) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -0.889 1.27) (end -0.889 -1.27) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.27) (end 0.889 1.27) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.27) (end -0.889 -1.27) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.27) (end 0.889 1.27) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at 0 0.635 270) (size 1.27 0.9652) (layers Cuivre B.Paste B.Mask)
+ (net 29 VCC))
+ (pad 2 smd rect (at 0 -0.635 270) (size 1.27 0.9652) (layers Cuivre B.Paste B.Mask)
+ (net 31 /pic_sockets/VCC_PIC))
+ )
+
+ (module inductors:INDUCTOR_V (layer Composant) (tedit 54031E5E) (tstamp 54032CAE)
+ (at 125.73 64.77 270)
+ (descr "Inductor (vertical)")
+ (tags INDUCTOR)
+ (path /442A57BE)
+ (fp_text reference L1 (at 0 1.99898 270) (layer F.SilkS)
+ (effects (font (size 1.00076 1.00076) (thickness 0.2032)))
+ )
+ (fp_text value 22uH (at 0.09906 -1.99898 270) (layer F.SilkS)
+ (effects (font (size 1.00076 1.00076) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 3.81 0) (layer F.SilkS) (width 0.20066))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 "Net-(D10-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (model Inductors.3dshapes/INDUCTOR_V.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 2 2 2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:bornier2 (layer Composant) (tedit 54031E5E) (tstamp 54032CB4)
+ (at 78.74 64.77 90)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /442A4FE7)
+ (fp_text reference P1 (at 0 -5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole circle (at 2.54 0 90) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 10 "Net-(D1-Pad1)"))
+ (model Connect.3dshapes/bornier2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92 (layer Composant) (tedit 54031E5E) (tstamp 54032D16)
+ (at 146.05 69.85)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /442A4EB9)
+ (fp_text reference Q1 (at -1.27 3.81) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BC237 (at -1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(Q1-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(D11-Pad2)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92 (layer Composant) (tedit 54031E5E) (tstamp 54032D24)
+ (at 146.05 62.23)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /442A4F30)
+ (fp_text reference Q2 (at -1.27 3.81) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BC307 (at -1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 VPP))
+ (pad 2 thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(C9-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(Q2-Pad3)"))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:TO92 (layer Composant) (tedit 54031E5E) (tstamp 54032D32)
+ (at 142.24 97.79)
+ (descr "Transistor TO92 brochage type BC237")
+ (tags "TR TO92")
+ (path /4639B996)
+ (fp_text reference Q3 (at -1.27 3.81) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BC307 (at -1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -1.27 2.54) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -2.54) (end 1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -3.81) (end -3.81 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 1.27) (end -2.54 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at 1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 2 thru_hole circle (at -1.27 -1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(Q3-Pad2)"))
+ (pad 3 thru_hole circle (at -1.27 1.27) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (model Discret.3dshapes/TO92.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D40)
+ (at 92.71 118.11)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4CF4)
+ (autoplace_cost180 10)
+ (fp_text reference R1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /TXD))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(D2-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D4D)
+ (at 92.71 115.57)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4CFB)
+ (autoplace_cost180 10)
+ (fp_text reference R2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /TXD))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D5A)
+ (at 92.71 111.76)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D5A)
+ (autoplace_cost180 10)
+ (fp_text reference R3 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /DTR))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(D4-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D67)
+ (at 92.71 109.22)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D5B)
+ (autoplace_cost180 10)
+ (fp_text reference R4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /DTR))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D74)
+ (at 92.71 124.46)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D62)
+ (autoplace_cost180 10)
+ (fp_text reference R5 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /PC-CLOCK-OUT))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D6-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D81)
+ (at 92.71 121.92)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D63)
+ (autoplace_cost180 10)
+ (fp_text reference R6 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /PC-CLOCK-OUT))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D8E)
+ (at 144.145 54.61)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4F2A)
+ (autoplace_cost180 10)
+ (fp_text reference R7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 VPP))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(C9-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032D9B)
+ (at 144.145 90.17)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D92)
+ (autoplace_cost180 10)
+ (fp_text reference R8 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(R8-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 "Net-(Q1-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DA8)
+ (at 144.145 77.47)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4F52)
+ (autoplace_cost180 10)
+ (fp_text reference R9 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 2.2K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(Q2-Pad3)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 "Net-(D8-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DB5)
+ (at 119.38 48.26)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A5F83)
+ (autoplace_cost180 10)
+ (fp_text reference R10 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 5,1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 "Net-(C5-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DC2)
+ (at 139.065 66.04 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4F23)
+ (autoplace_cost180 10)
+ (fp_text reference R11 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 22K (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 "Net-(D11-Pad2)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 "Net-(C9-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DCF)
+ (at 135.255 116.84 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D85)
+ (autoplace_cost180 10)
+ (fp_text reference R12 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(R12-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DDC)
+ (at 140.335 116.84 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A4D8D)
+ (autoplace_cost180 10)
+ (fp_text reference R13 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 "Net-(R13-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /pic_sockets/CLOCK-RB6))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DE9)
+ (at 144.145 87.63)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A5083)
+ (autoplace_cost180 10)
+ (fp_text reference R14 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 "Net-(D9-Pad1)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032DF6)
+ (at 123.19 78.74)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A58D7)
+ (autoplace_cost180 10)
+ (fp_text reference R15 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 6.2K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(R15-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032E03)
+ (at 123.19 75.565)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A58DC)
+ (autoplace_cost180 10)
+ (fp_text reference R16 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 62K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 "Net-(R16-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 VPP))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032E10)
+ (at 156.21 63.5 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /442A50BF)
+ (autoplace_cost180 10)
+ (fp_text reference R17 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 22K (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(Q2-Pad3)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032E1D)
+ (at 152.4 63.5 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /44369638)
+ (autoplace_cost180 10)
+ (fp_text reference R18 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 220 (at 0 0 90) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 "Net-(Q2-Pad3)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /pic_sockets/VPP-MCLR))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032E2A)
+ (at 144.145 83.82 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4639B9B0)
+ (autoplace_cost180 10)
+ (fp_text reference R19 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 2.2K (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 "Net-(D11-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(Q3-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032E37)
+ (at 139.7 102.235 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4639B9B3)
+ (autoplace_cost180 10)
+ (fp_text reference R20 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 2.2K (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 "Net-(Q3-Pad2)"))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:R4 (layer Composant) (tedit 54031E5E) (tstamp 54032E44)
+ (at 153.035 102.235 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4639B9E9)
+ (autoplace_cost180 10)
+ (fp_text reference R21 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 470 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 "Net-(D12-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:RV2X4 (layer Composant) (tedit 54031E5E) (tstamp 54032E51)
+ (at 122.555 88.265 180)
+ (descr "Resistance variable / Potentiometre")
+ (tags R)
+ (path /443D0101)
+ (fp_text reference RV1 (at -2.54 -5.08 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1K (at -1.651 5.461 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -7.62 -3.81) (end 3.81 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -3.81) (end 6.35 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 -1.27) (end 6.35 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 3.81) (end -7.62 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 3.81) (end -7.62 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0.762 -3.81) (end 1.905 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.651 3.81) (end 0.762 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 -0.508) (end 4.953 -0.508) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 0.508) (end 4.953 0.508) (layer F.SilkS) (width 0.3048))
+ (fp_circle (center 1.27 0) (end -2.54 -0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 -2.54 180) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask F.SilkS)
+ (net 25 "Net-(R15-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(RV1-Pad2)"))
+ (pad 3 thru_hole circle (at -5.08 2.54 180) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask F.SilkS)
+ (net 26 "Net-(R16-Pad1)"))
+ (model Discret.3dshapes/RV2X4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 54031E5E) (tstamp 54032E62)
+ (at 182.88 113.03 270)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /4804A5E2/442A87F7)
+ (fp_text reference U1 (at -6.35 0 360) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value 24Cxx (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 3 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 4 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 5 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (pad 6 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /pic_sockets/CLOCK-RB6))
+ (pad 7 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-14__300_ELL (layer Composant) (tedit 54031E5E) (tstamp 54032E74)
+ (at 123.19 115.57)
+ (descr "14 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /442A4D6B)
+ (fp_text reference U2 (at -5.08 -1.27) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_text value 74HC125 (at 1.27 1.27) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 2.54) (end -10.16 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 2.54) (end -10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 -1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 -2.54) (end 10.16 2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -7.62 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 2 thru_hole oval (at -5.08 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 "Net-(D2-Pad1)"))
+ (pad 3 thru_hole oval (at -2.54 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 "Net-(R8-Pad1)"))
+ (pad 4 thru_hole oval (at 0 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 5 thru_hole oval (at 2.54 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 "Net-(D4-Pad1)"))
+ (pad 6 thru_hole oval (at 5.08 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 "Net-(R12-Pad1)"))
+ (pad 7 thru_hole oval (at 7.62 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 8 thru_hole oval (at 7.62 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 "Net-(R13-Pad1)"))
+ (pad 9 thru_hole oval (at 5.08 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 "Net-(D6-Pad1)"))
+ (pad 10 thru_hole oval (at 2.54 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 11 thru_hole oval (at 0 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /CTS))
+ (pad 12 thru_hole oval (at -2.54 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (pad 13 thru_hole oval (at -5.08 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 14 thru_hole oval (at -7.62 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (model Sockets_DIP.3dshapes/DIP-14__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LM78XX (layer Composant) (tedit 54031E5E) (tstamp 54032E8C)
+ (at 99.06 71.12 90)
+ (descr "Regulateur TO220 serie LM78xx")
+ (tags "TR TO220")
+ (path /442A504A)
+ (fp_text reference U3 (at 7.62 0 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 7805 (at 10.668 0.127 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 0 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0 2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 5.08) (end 20.32 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 5.08) (end 20.32 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 3.81) (end 12.7 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 3.81) (end 12.7 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -5.08) (end 20.32 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 4 thru_hole rect (at 16.51 0 90) (size 8.89 8.89) (drill 3.048) (layers *.Cu *.SilkS *.Mask))
+ (pad VI thru_hole circle (at 0 -2.54 90) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 6 "Net-(C2-Pad1)"))
+ (pad GND thru_hole rect (at 0 0 90) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad VO thru_hole circle (at 0 2.54 90) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (model Discret.3dshapes/TO220.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 54031E5E) (tstamp 54032E9D)
+ (at 114.3 60.96 270)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /442A5E20)
+ (fp_text reference U4 (at -6.35 0 360) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value LT1373 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 "Net-(RV1-Pad2)"))
+ (pad 3 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 VCC))
+ (pad 6 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 7 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 8 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 "Net-(D10-Pad1)"))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-18__300_ELL (layer Composant) (tedit 54031E5E) (tstamp 54032EAF)
+ (at 211.455 118.11 270)
+ (descr "18 pins DIL package, elliptical pads")
+ (path /4804A5E2/442A81A7)
+ (fp_text reference U5 (at -7.62 -1.27 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value PIC_18_PINS (at 1.524 1.016 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_line (start -12.7 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -11.43 -1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -11.43 1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -12.7 -2.54) (end 12.7 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 12.7 -2.54) (end 12.7 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 12.7 2.54) (end -12.7 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -12.7 2.54) (end -12.7 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -10.16 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole oval (at -7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at -5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at -2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /pic_sockets/VPP-MCLR))
+ (pad 5 thru_hole oval (at 0 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 6 thru_hole oval (at 2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at 5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at 7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole oval (at 10.16 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at 10.16 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole oval (at 5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /pic_sockets/CLOCK-RB6))
+ (pad 13 thru_hole oval (at 2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (pad 14 thru_hole oval (at 0 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 15 thru_hole oval (at -2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole oval (at -5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole oval (at -7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at -10.16 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (model Sockets_DIP.3dshapes/DIP-18__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300_ELL (layer Composant) (tedit 54031E5E) (tstamp 54032ECB)
+ (at 182.88 124.46 270)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /4804A5E2/442A81A5)
+ (fp_text reference U6 (at -6.35 0 360) (layer F.SilkS)
+ (effects (font (size 1.778 1.143) (thickness 0.3048)))
+ )
+ (fp_text value PIC_8_PINS (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.778 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 2 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /pic_sockets/VPP-MCLR))
+ (pad 5 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /pic_sockets/CLOCK-RB6))
+ (pad 7 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (pad 8 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module footprints:1pin-4 (layer Composant) (tedit 5401E012) (tstamp 54033012)
+ (at 77.47 135.89)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54020BEA)
+ (fp_text reference P101 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module footprints:1pin-4 (layer Composant) (tedit 5401E012) (tstamp 54033017)
+ (at 158.75 135.89)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54020DA9)
+ (fp_text reference P102 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module footprints:1pin-4 (layer Composant) (tedit 5401E012) (tstamp 5403301C)
+ (at 229.87 135.89)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54020DC2)
+ (fp_text reference P103 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module footprints:1pin-4 (layer Composant) (tedit 5401E012) (tstamp 54033021)
+ (at 229.87 44.45)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54020DE3)
+ (fp_text reference P104 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module footprints:1pin-4 (layer Composant) (tedit 5401E012) (tstamp 54033026)
+ (at 158.75 44.45)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54020E5D)
+ (fp_text reference P105 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module footprints:1pin-4 (layer Composant) (tedit 5401E012) (tstamp 5403302B)
+ (at 77.47 44.45)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54020E76)
+ (fp_text reference P106 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module sockets:40tex-Ell600 (layer Composant) (tedit 541D2BDC) (tstamp 541E1940)
+ (at 182.88 74.93 270)
+ (descr "Support TEXTOOL Dil 40 pins, pads elliptiques, e=600 mils")
+ (tags DEV)
+ (path /4804A5E2/442A88ED)
+ (fp_text reference P3 (at -3.81 -3.175 270) (layer F.SilkS)
+ (effects (font (size 2.032 1.27) (thickness 0.3048)))
+ )
+ (fp_text value SUPP40 (at -5.715 1.905 270) (layer F.SilkS)
+ (effects (font (size 2.032 1.27) (thickness 0.3048)))
+ )
+ (fp_line (start -29.21 -5.08) (end 26.67 -5.08) (layer F.SilkS) (width 0.381))
+ (fp_line (start 26.67 -5.08) (end 26.67 5.08) (layer F.SilkS) (width 0.381))
+ (fp_line (start 26.67 5.08) (end -29.21 5.08) (layer F.SilkS) (width 0.381))
+ (fp_line (start -29.21 5.08) (end -29.21 -5.08) (layer F.SilkS) (width 0.381))
+ (fp_line (start -24.13 -11.43) (end -24.13 -15.24) (layer F.SilkS) (width 0.381))
+ (fp_line (start -24.13 -15.24) (end -25.4 -16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start -25.4 -16.51) (end -27.94 -16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start -27.94 -16.51) (end -29.21 -15.24) (layer F.SilkS) (width 0.381))
+ (fp_line (start -29.21 -15.24) (end -29.21 -11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start 24.13 11.43) (end 24.13 15.24) (layer F.SilkS) (width 0.381))
+ (fp_line (start 24.13 15.24) (end 22.86 16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start 22.86 16.51) (end 20.32 16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start 20.32 16.51) (end 19.05 15.24) (layer F.SilkS) (width 0.381))
+ (fp_line (start 19.05 15.24) (end 19.05 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -29.21 10.16) (end -29.21 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -48.26 10.16) (end -48.26 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -48.26 11.43) (end -46.99 12.7) (layer F.SilkS) (width 0.381))
+ (fp_line (start -46.99 12.7) (end -40.64 12.7) (layer F.SilkS) (width 0.381))
+ (fp_line (start -40.64 12.7) (end -39.37 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -39.37 11.43) (end -39.37 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -39.37 10.16) (end -29.21 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -39.37 11.43) (end -33.02 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -39.37 10.16) (end -40.64 8.89) (layer F.SilkS) (width 0.381))
+ (fp_line (start -40.64 8.89) (end -46.99 8.89) (layer F.SilkS) (width 0.381))
+ (fp_line (start -46.99 8.89) (end -48.26 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -33.02 -11.43) (end 30.48 -11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start 30.48 -11.43) (end 31.75 -10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start 31.75 -10.16) (end 31.75 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start 31.75 10.16) (end 30.48 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start 30.48 11.43) (end -33.02 11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -33.02 11.43) (end -34.29 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -34.29 10.16) (end -34.29 -10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -34.29 -10.16) (end -33.02 -11.43) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -24.13 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /pic_sockets/VPP-MCLR))
+ (pad 2 thru_hole oval (at -21.59 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at -19.05 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at -16.51 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at -13.97 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at -11.43 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at -8.89 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at -6.35 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 9 thru_hole oval (at -3.81 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at -1.27 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 1.27 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 12 thru_hole oval (at 3.81 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 13 thru_hole oval (at 6.35 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 14 thru_hole oval (at 8.89 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 15 thru_hole oval (at 11.43 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole oval (at 13.97 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole oval (at 16.51 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at 19.05 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 19 thru_hole oval (at 21.59 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 20 thru_hole oval (at 24.13 7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 21 thru_hole oval (at 24.13 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole oval (at 21.59 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole oval (at 19.05 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 24 thru_hole oval (at 16.51 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 25 thru_hole oval (at 13.97 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 26 thru_hole oval (at 11.43 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 27 thru_hole oval (at 8.89 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 28 thru_hole oval (at 6.35 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 29 thru_hole oval (at 3.81 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 30 thru_hole oval (at 1.27 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 31 thru_hole oval (at -1.27 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 32 thru_hole oval (at -3.81 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 33 thru_hole oval (at -6.35 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 34 thru_hole oval (at -8.89 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 35 thru_hole oval (at -11.43 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 36 thru_hole oval (at -13.97 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 37 thru_hole oval (at -16.51 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 38 thru_hole oval (at -19.05 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 39 thru_hole oval (at -21.59 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /pic_sockets/CLOCK-RB6))
+ (pad 40 thru_hole oval (at -24.13 -7.62 270) (size 1.5748 2.794) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (pad HOLE thru_hole circle (at -26.67 -13.97 270) (size 2.54 2.54) (drill 2.032) (layers *.Cu *.Mask F.SilkS))
+ (pad HOLE thru_hole circle (at 21.59 13.97 270) (size 2.54 2.54) (drill 2.032) (layers *.Cu *.Mask F.SilkS))
+ (model Sockets.3dshapes/40tex600.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-28__300_ELL (layer Composant) (tedit 541D29CF) (tstamp 541E3550)
+ (at 211.455 67.31 270)
+ (descr "28 pins DIL package, elliptical pads, width 300mil")
+ (tags DIL)
+ (path /4804A5E2/4436967E)
+ (fp_text reference P2 (at -11.43 0 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_text value SUPP28 (at 6.985 0 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.3048)))
+ )
+ (fp_line (start -19.05 -2.54) (end 19.05 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 19.05 -2.54) (end 19.05 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 19.05 2.54) (end -19.05 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -19.05 2.54) (end -19.05 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -19.05 -1.27) (end -17.78 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -17.78 -1.27) (end -17.78 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -17.78 1.27) (end -19.05 1.27) (layer F.SilkS) (width 0.381))
+ (pad 2 thru_hole oval (at -13.97 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at -11.43 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at -8.89 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at -6.35 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at -3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at -1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole oval (at 1.27 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 9 thru_hole oval (at 3.81 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at 6.35 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 8.89 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole oval (at 11.43 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 13 thru_hole oval (at 13.97 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 14 thru_hole oval (at 16.51 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -16.51 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /pic_sockets/VPP-MCLR))
+ (pad 15 thru_hole oval (at 16.51 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole oval (at 13.97 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole oval (at 11.43 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at 8.89 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 19 thru_hole oval (at 6.35 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 GND))
+ (pad 20 thru_hole oval (at 3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /pic_sockets/VCC_PIC))
+ (pad 21 thru_hole oval (at 1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole oval (at -1.27 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole oval (at -3.81 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 24 thru_hole oval (at -6.35 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 25 thru_hole oval (at -8.89 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 26 thru_hole oval (at -11.43 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 27 thru_hole oval (at -13.97 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /pic_sockets/CLOCK-RB6))
+ (pad 28 thru_hole oval (at -16.51 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /pic_sockets/DATA-RB7))
+ (model Sockets_DIP.3dshapes/DIP-28__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_text "VCC ON" (at 162.9 99.1) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 200.66 107.95) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 171.45 120.65) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 171.45 109.22) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 202 48.7) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text 1=>> (at 167.64 48.895) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text JP-CHARRAS (at 94.615 137.16) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "J-P CHARRAS" (at 94.615 137.16) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text "13V ADJUST" (at 123.19 95.25) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 40 PINS" (at 182.245 45.085) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 28 PINS" (at 212.725 45.085) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 18 PINS" (at 211.455 132.715) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "I2C PROM" (at 166.37 114.3) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC 8 PINS" (at 183.515 132.08) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PWR ON" (at 163.83 88.9) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "VPP ON" (at 163.195 80.645) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text +8/12V (at 80.01 57.15) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC PROGRAMMER V03" (at 125.095 132.08) (layer Composant)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "PIC PROGRAMMER V03" (at 124.46 134.62) (layer Cuivre)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_line (start 73.66 139.7) (end 73.66 40.64) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 233.68 139.7) (end 73.66 139.7) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 233.68 40.64) (end 233.68 139.7) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 173.99 40.64) (end 233.68 40.64) (angle 90) (layer Edge.Cuts) (width 0.381))
+ (gr_line (start 73.66 40.64) (end 173.99 40.64) (angle 90) (layer Edge.Cuts) (width 0.381))
+
+ (segment (start 112.395 113.665) (end 113.03 114.3) (width 0.5) (layer Cuivre) (net 1))
+ (segment (start 80.01 114.173) (end 83.947 114.173) (width 0.5) (layer Cuivre) (net 1) (status 800))
+ (segment (start 123.19 113.03) (end 123.19 111.76) (width 0.5) (layer Cuivre) (net 1) (status 400))
+ (segment (start 121.92 114.3) (end 123.19 113.03) (width 0.5) (layer Cuivre) (net 1))
+ (segment (start 113.03 114.3) (end 121.92 114.3) (width 0.5) (layer Cuivre) (net 1))
+ (segment (start 83.947 114.173) (end 84.455 113.665) (width 0.5) (layer Cuivre) (net 1))
+ (segment (start 84.455 113.665) (end 112.395 113.665) (width 0.5) (layer Cuivre) (net 1))
+ (segment (start 83.185 111.76) (end 87.63 111.76) (width 0.5) (layer Cuivre) (net 2) (status 400))
+ (segment (start 82.55 112.395) (end 83.185 111.76) (width 0.5) (layer Cuivre) (net 2))
+ (segment (start 82.55 112.776) (end 82.55 112.395) (width 0.5) (layer Cuivre) (net 2) (status 800))
+ (segment (start 87.63 111.76) (end 87.63 109.22) (width 0.5) (layer Cuivre) (net 2) (status C00))
+ (segment (start 77.47 117.475) (end 77.47 120.65) (width 0.5) (layer Cuivre) (net 3))
+ (segment (start 80.01 116.84) (end 78.105 116.84) (width 0.5) (layer Cuivre) (net 3) (status 800))
+ (segment (start 86.36 124.46) (end 87.63 124.46) (width 0.5) (layer Cuivre) (net 3) (status 400))
+ (segment (start 80.01 123.19) (end 85.09 123.19) (width 0.5) (layer Cuivre) (net 3))
+ (segment (start 78.105 116.84) (end 77.47 117.475) (width 0.5) (layer Cuivre) (net 3))
+ (segment (start 85.09 123.19) (end 86.36 124.46) (width 0.5) (layer Cuivre) (net 3))
+ (segment (start 87.63 124.46) (end 87.63 121.92) (width 0.5) (layer Cuivre) (net 3) (status C00))
+ (segment (start 77.47 120.65) (end 80.01 123.19) (width 0.5) (layer Cuivre) (net 3))
+ (segment (start 87.63 118.11) (end 87.63 115.57) (width 0.5) (layer Cuivre) (net 4) (status C00))
+ (segment (start 87.63 115.57) (end 82.55 115.57) (width 0.5) (layer Cuivre) (net 4) (status C00))
+ (segment (start 87.63 71.12) (end 96.52 71.12) (width 0.5) (layer Cuivre) (net 6) (status C00))
+ (segment (start 84.455 90.17) (end 84.455 89.535) (width 0.5) (layer Cuivre) (net 6) (status 800))
+ (segment (start 82.55 76.2) (end 87.63 71.12) (width 0.5) (layer Cuivre) (net 6) (status 400))
+ (segment (start 82.55 87.63) (end 82.55 76.2) (width 0.5) (layer Cuivre) (net 6))
+ (segment (start 84.455 89.535) (end 82.55 87.63) (width 0.5) (layer Cuivre) (net 6))
+ (segment (start 114.3 48.26) (end 114.3 52.07) (width 0.5) (layer Cuivre) (net 7) (status C00))
+ (segment (start 110.49 57.15) (end 110.49 53.34) (width 0.5) (layer Cuivre) (net 7) (status 800))
+ (segment (start 110.49 53.34) (end 111.76 52.07) (width 0.5) (layer Cuivre) (net 7))
+ (segment (start 111.76 52.07) (end 114.3 52.07) (width 0.5) (layer Cuivre) (net 7) (status 400))
+ (segment (start 128.27 48.26) (end 129.54 49.53) (width 0.5) (layer Cuivre) (net 8) (status 400))
+ (segment (start 124.46 48.26) (end 128.27 48.26) (width 0.5) (layer Cuivre) (net 8) (status 800))
+ (segment (start 144.78 60.96) (end 139.065 60.96) (width 0.5) (layer Cuivre) (net 9) (status C00))
+ (segment (start 149.225 54.61) (end 149.225 59.055) (width 0.5) (layer Cuivre) (net 9) (status 800))
+ (segment (start 148.59 63.5) (end 147.32 63.5) (width 0.5) (layer Cuivre) (net 9))
+ (segment (start 149.225 59.055) (end 149.86 59.69) (width 0.5) (layer Cuivre) (net 9))
+ (segment (start 149.86 62.23) (end 148.59 63.5) (width 0.5) (layer Cuivre) (net 9))
+ (segment (start 149.86 59.69) (end 149.86 62.23) (width 0.5) (layer Cuivre) (net 9))
+ (segment (start 144.78 60.96) (end 147.32 63.5) (width 0.5) (layer Cuivre) (net 9) (status 800))
+ (segment (start 145.542 49.784) (end 148.082 49.784) (width 0.5) (layer Cuivre) (net 9) (status C00))
+ (segment (start 148.082 49.784) (end 148.844 49.784) (width 0.5) (layer Cuivre) (net 9) (status 800))
+ (segment (start 149.225 50.165) (end 149.225 54.61) (width 0.5) (layer Cuivre) (net 9) (status 400))
+ (segment (start 148.844 49.784) (end 149.225 50.165) (width 0.5) (layer Cuivre) (net 9))
+ (segment (start 78.74 62.23) (end 83.82 62.23) (width 0.5) (layer Cuivre) (net 10) (status 800))
+ (segment (start 83.82 62.23) (end 87.63 58.42) (width 0.5) (layer Cuivre) (net 10) (status 400))
+ (segment (start 118.11 57.15) (end 124.46 57.15) (width 0.5) (layer Cuivre) (net 11) (status C00))
+ (segment (start 124.46 57.15) (end 124.46 60.96) (width 0.5) (layer Cuivre) (net 11) (status 800))
+ (segment (start 124.46 60.96) (end 125.73 62.23) (width 0.5) (layer Cuivre) (net 11) (status 400))
+ (segment (start 148.59 80.645) (end 149.225 81.28) (width 0.5) (layer Cuivre) (net 12))
+ (segment (start 146.685 80.645) (end 148.59 80.645) (width 0.5) (layer Cuivre) (net 12) (status 800))
+ (segment (start 149.225 81.28) (end 149.225 83.82) (width 0.5) (layer Cuivre) (net 12) (status 400))
+ (segment (start 141.605 73.66) (end 141.605 78.105) (width 0.5) (layer Cuivre) (net 13))
+ (segment (start 141.605 78.105) (end 139.065 80.645) (width 0.5) (layer Cuivre) (net 13) (status 400))
+ (segment (start 139.065 71.12) (end 141.605 73.66) (width 0.5) (layer Cuivre) (net 13) (status 800))
+ (segment (start 144.78 71.12) (end 139.065 71.12) (width 0.5) (layer Cuivre) (net 13) (status C00))
+ (segment (start 153.67 97.155) (end 153.67 97.79) (width 0.5) (layer Cuivre) (net 14) (status 800))
+ (segment (start 153.67 97.79) (end 158.115 102.235) (width 0.5) (layer Cuivre) (net 14) (status 400))
+ (segment (start 106.045 121.92) (end 107.95 121.92) (width 0.5) (layer Cuivre) (net 15) (status 400))
+ (segment (start 94.615 124.46) (end 97.155 127) (width 0.5) (layer Cuivre) (net 15))
+ (segment (start 97.79 118.11) (end 95.885 118.11) (width 0.5) (layer Cuivre) (net 15) (status 800))
+ (segment (start 100.33 118.11) (end 97.79 118.11) (width 0.5) (layer Cuivre) (net 15) (status C00))
+ (segment (start 116.205 121.92) (end 118.11 120.015) (width 0.5) (layer Cuivre) (net 15))
+ (segment (start 118.11 120.015) (end 118.11 119.38) (width 0.5) (layer Cuivre) (net 15) (status 400))
+ (segment (start 107.95 121.92) (end 116.205 121.92) (width 0.5) (layer Cuivre) (net 15) (status 800))
+ (segment (start 95.885 118.11) (end 94.615 119.38) (width 0.5) (layer Cuivre) (net 15))
+ (segment (start 94.615 119.38) (end 94.615 124.46) (width 0.5) (layer Cuivre) (net 15))
+ (segment (start 100.965 127) (end 106.045 121.92) (width 0.5) (layer Cuivre) (net 15))
+ (segment (start 97.155 127) (end 100.965 127) (width 0.5) (layer Cuivre) (net 15))
+ (segment (start 100.33 111.76) (end 104.267 111.76) (width 0.5) (layer Cuivre) (net 16) (status 800))
+ (segment (start 100.33 111.76) (end 97.79 111.76) (width 0.5) (layer Cuivre) (net 16) (status C00))
+ (segment (start 111.76 109.855) (end 111.76 119.38) (width 0.5) (layer Composant) (net 16))
+ (segment (start 125.73 120.65) (end 125.73 119.38) (width 0.5) (layer Composant) (net 16) (status 400))
+ (segment (start 115.57 123.19) (end 123.19 123.19) (width 0.5) (layer Composant) (net 16))
+ (segment (start 111.125 109.22) (end 111.76 109.855) (width 0.5) (layer Composant) (net 16))
+ (segment (start 111.76 119.38) (end 115.57 123.19) (width 0.5) (layer Composant) (net 16))
+ (segment (start 123.19 123.19) (end 125.73 120.65) (width 0.5) (layer Composant) (net 16))
+ (segment (start 107.95 109.22) (end 111.125 109.22) (width 0.5) (layer Composant) (net 16) (status 800))
+ (segment (start 107.95 109.22) (end 106.807 109.22) (width 0.5) (layer Cuivre) (net 16) (status 800))
+ (segment (start 106.807 109.22) (end 104.267 111.76) (width 0.5) (layer Cuivre) (net 16))
+ (segment (start 128.27 113.03) (end 125.73 115.57) (width 0.5) (layer Cuivre) (net 17))
+ (segment (start 101.6 120.015) (end 106.045 115.57) (width 0.5) (layer Cuivre) (net 17))
+ (segment (start 100.33 124.46) (end 97.79 124.46) (width 0.5) (layer Cuivre) (net 17) (status C00))
+ (segment (start 106.045 115.57) (end 107.95 115.57) (width 0.5) (layer Cuivre) (net 17) (status 400))
+ (segment (start 95.885 122.555) (end 97.79 124.46) (width 0.5) (layer Cuivre) (net 17) (status 400))
+ (segment (start 128.27 111.76) (end 128.27 113.03) (width 0.5) (layer Cuivre) (net 17) (status 800))
+ (segment (start 107.95 115.57) (end 125.73 115.57) (width 0.5) (layer Cuivre) (net 17) (status 800))
+ (segment (start 96.52 120.015) (end 101.6 120.015) (width 0.5) (layer Cuivre) (net 17))
+ (segment (start 95.885 120.65) (end 95.885 122.555) (width 0.5) (layer Cuivre) (net 17))
+ (segment (start 96.52 120.015) (end 95.885 120.65) (width 0.5) (layer Cuivre) (net 17))
+ (segment (start 153.67 77.47) (end 149.225 77.47) (width 0.5) (layer Cuivre) (net 18) (status C00))
+ (segment (start 153.67 87.63) (end 149.225 87.63) (width 0.5) (layer Cuivre) (net 19) (status C00))
+ (segment (start 146.685 90.17) (end 144.78 88.265) (width 0.5) (layer Cuivre) (net 20))
+ (segment (start 147.32 73.025) (end 144.78 75.565) (width 0.5) (layer Cuivre) (net 20))
+ (segment (start 144.78 75.565) (end 144.78 88.265) (width 0.5) (layer Cuivre) (net 20))
+ (segment (start 147.32 71.12) (end 147.32 73.025) (width 0.5) (layer Cuivre) (net 20))
+ (segment (start 144.78 68.58) (end 147.32 71.12) (width 0.5) (layer Cuivre) (net 20) (status 800))
+ (segment (start 149.225 90.17) (end 146.685 90.17) (width 0.5) (layer Cuivre) (net 20) (status 800))
+ (segment (start 144.78 63.5) (end 145.415 63.5) (width 0.5) (layer Cuivre) (net 21) (status 800))
+ (segment (start 152.4 68.58) (end 152.4 69.85) (width 0.5) (layer Composant) (net 21) (status 800))
+ (segment (start 146.05 73.66) (end 147.955 71.755) (width 0.5) (layer Composant) (net 21))
+ (segment (start 137.795 74.93) (end 137.795 76.2) (width 0.5) (layer Composant) (net 21))
+ (segment (start 137.795 74.93) (end 139.065 73.66) (width 0.5) (layer Composant) (net 21))
+ (segment (start 145.415 63.5) (end 147.32 65.405) (width 0.5) (layer Cuivre) (net 21))
+ (segment (start 147.955 71.755) (end 150.495 71.755) (width 0.5) (layer Composant) (net 21))
+ (segment (start 156.21 58.42) (end 156.21 61.595) (width 0.5) (layer Cuivre) (net 21) (status 800))
+ (segment (start 152.4 65.405) (end 152.4 68.58) (width 0.5) (layer Cuivre) (net 21) (status 400))
+ (segment (start 156.21 61.595) (end 152.4 65.405) (width 0.5) (layer Cuivre) (net 21))
+ (segment (start 149.225 65.405) (end 152.4 68.58) (width 0.5) (layer Cuivre) (net 21) (status 400))
+ (segment (start 147.32 65.405) (end 149.225 65.405) (width 0.5) (layer Cuivre) (net 21))
+ (segment (start 139.065 73.66) (end 146.05 73.66) (width 0.5) (layer Composant) (net 21))
+ (segment (start 137.795 76.2) (end 139.065 77.47) (width 0.5) (layer Composant) (net 21) (status 400))
+ (segment (start 150.495 71.755) (end 152.4 69.85) (width 0.5) (layer Composant) (net 21))
+ (segment (start 140.97 85.09) (end 139.7 83.82) (width 0.5) (layer Cuivre) (net 22))
+ (segment (start 139.7 83.82) (end 139.065 83.82) (width 0.5) (layer Cuivre) (net 22) (status 400))
+ (segment (start 140.97 96.52) (end 135.255 96.52) (width 0.5) (layer Cuivre) (net 22) (status 800))
+ (segment (start 134.62 97.155) (end 134.62 102.235) (width 0.5) (layer Cuivre) (net 22) (status 400))
+ (segment (start 135.255 96.52) (end 134.62 97.155) (width 0.5) (layer Cuivre) (net 22))
+ (segment (start 140.97 85.09) (end 140.97 96.52) (width 0.5) (layer Cuivre) (net 22) (status 400))
+ (segment (start 128.27 119.38) (end 128.27 120.65) (width 0.5) (layer Cuivre) (net 23) (status 800))
+ (segment (start 129.54 121.92) (end 135.255 121.92) (width 0.5) (layer Cuivre) (net 23) (status 400))
+ (segment (start 128.27 120.65) (end 129.54 121.92) (width 0.5) (layer Cuivre) (net 23))
+ (segment (start 130.81 109.6264) (end 132.6896 107.7468) (width 0.5) (layer Cuivre) (net 24))
+ (segment (start 130.81 111.76) (end 130.81 109.6264) (width 0.5) (layer Cuivre) (net 24) (status 800))
+ (segment (start 140.335 109.6772) (end 140.335 111.76) (width 0.5) (layer Cuivre) (net 24) (status 400))
+ (segment (start 138.4046 107.7468) (end 140.335 109.6772) (width 0.5) (layer Cuivre) (net 24))
+ (segment (start 132.6896 107.7468) (end 138.4046 107.7468) (width 0.5) (layer Cuivre) (net 24))
+ (segment (start 125.73 90.805) (end 127.635 90.805) (width 0.5) (layer Cuivre) (net 25) (status 400))
+ (segment (start 124.46 86.36) (end 124.46 89.535) (width 0.5) (layer Cuivre) (net 25))
+ (segment (start 118.11 78.74) (end 118.11 80.01) (width 0.5) (layer Cuivre) (net 25) (status 800))
+ (segment (start 118.11 80.01) (end 124.46 86.36) (width 0.5) (layer Cuivre) (net 25))
+ (segment (start 124.46 89.535) (end 125.73 90.805) (width 0.5) (layer Cuivre) (net 25))
+ (segment (start 120.65 76.2) (end 120.65 79.375) (width 0.5) (layer Cuivre) (net 26))
+ (segment (start 118.11 75.565) (end 120.015 75.565) (width 0.5) (layer Cuivre) (net 26) (status 800))
+ (segment (start 120.015 75.565) (end 120.65 76.2) (width 0.5) (layer Cuivre) (net 26))
+ (segment (start 127 85.725) (end 127.635 85.725) (width 0.5) (layer Cuivre) (net 26) (status 400))
+ (segment (start 120.65 79.375) (end 127 85.725) (width 0.5) (layer Cuivre) (net 26))
+ (segment (start 114.935 116.205) (end 120.015 116.205) (width 0.5) (layer Composant) (net 27))
+ (segment (start 114.935 102.235) (end 113.03 104.14) (width 0.5) (layer Composant) (net 27))
+ (segment (start 120.65 116.84) (end 120.65 119.38) (width 0.5) (layer Composant) (net 27) (status 400))
+ (segment (start 114.935 102.235) (end 127 102.235) (width 0.5) (layer Composant) (net 27))
+ (segment (start 127 102.235) (end 139.065 90.17) (width 0.5) (layer Composant) (net 27) (status 400))
+ (segment (start 120.015 116.205) (end 120.65 116.84) (width 0.5) (layer Composant) (net 27))
+ (segment (start 113.03 104.14) (end 113.03 114.3) (width 0.5) (layer Composant) (net 27))
+ (segment (start 113.03 114.3) (end 114.935 116.205) (width 0.5) (layer Composant) (net 27))
+ (segment (start 117.475 84.455) (end 117.475 88.265) (width 0.5) (layer Cuivre) (net 28) (status 400))
+ (segment (start 113.665 60.96) (end 113.665 80.645) (width 0.5) (layer Cuivre) (net 28))
+ (segment (start 112.395 59.69) (end 113.665 60.96) (width 0.5) (layer Cuivre) (net 28))
+ (segment (start 110.49 59.69) (end 112.395 59.69) (width 0.5) (layer Cuivre) (net 28) (status 800))
+ (segment (start 113.665 80.645) (end 117.475 84.455) (width 0.5) (layer Cuivre) (net 28))
+ (segment (start 146.685 97.79) (end 144.78 97.79) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 144.78 97.79) (end 144.78 97.917) (width 0.8) (layer Cuivre) (net 29) (tstamp 54033059))
+ (segment (start 133.985 87.63) (end 126.365 80.01) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 114.3 93.345) (end 130.81 93.345) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 134.62 89.535) (end 134.62 87.63) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 118.11 64.77) (end 120.65 64.77) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 123.19 67.31) (end 120.65 64.77) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 123.825 67.31) (end 123.19 67.31) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 107.95 111.76) (end 115.57 111.76) (width 0.8) (layer Cuivre) (net 29) (status C00))
+ (segment (start 134.62 87.63) (end 133.985 87.63) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 143.51 96.52) (end 144.78 96.52) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 144.78 102.235) (end 144.78 97.917) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 144.78 97.917) (end 144.78 96.52) (width 0.8) (layer Cuivre) (net 29) (tstamp 5403305C) (status 800))
+ (segment (start 110.49 123.825) (end 109.855 124.46) (width 0.8) (layer Composant) (net 29))
+ (segment (start 126.365 80.01) (end 124.46 80.01) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 124.46 80.01) (end 123.825 79.375) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 139.065 87.63) (end 134.62 87.63) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 101.6 71.12) (end 107.95 71.12) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 115.57 98.425) (end 115.57 104.775) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 114.3 93.345) (end 114.3 97.155) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 114.3 97.155) (end 115.57 98.425) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 115.57 111.76) (end 115.57 104.775) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 123.825 79.375) (end 123.825 67.31) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 130.81 93.345) (end 134.62 89.535) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 110.49 119.38) (end 110.49 123.825) (width 0.8) (layer Composant) (net 29))
+ (segment (start 110.49 84.455) (end 114.3 88.265) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 114.3 88.265) (end 114.3 93.345) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 110.49 78.74) (end 110.49 84.455) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 110.49 73.66) (end 107.95 71.12) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 110.49 78.74) (end 110.49 73.66) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 125.73 67.31) (end 123.825 67.31) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 107.95 111.76) (end 109.855 111.76) (width 0.8) (layer Composant) (net 29) (status 800))
+ (segment (start 109.22 118.11) (end 107.95 118.11) (width 0.8) (layer Composant) (net 29) (status 400))
+ (segment (start 110.49 116.84) (end 109.22 118.11) (width 0.8) (layer Composant) (net 29))
+ (segment (start 110.49 112.395) (end 110.49 116.84) (width 0.8) (layer Composant) (net 29))
+ (segment (start 109.855 111.76) (end 110.49 112.395) (width 0.8) (layer Composant) (net 29))
+ (segment (start 109.22 118.11) (end 110.49 119.38) (width 0.8) (layer Composant) (net 29))
+ (segment (start 109.855 124.46) (end 107.95 124.46) (width 0.8) (layer Composant) (net 29) (status 400))
+ (segment (start 143.51 96.52) (end 142.24 97.79) (width 0.8) (layer Cuivre) (net 29) (status 800))
+ (segment (start 137.16 99.06) (end 137.16 103.505) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 138.43 97.79) (end 137.16 99.06) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 142.24 97.79) (end 138.43 97.79) (width 0.5) (layer Cuivre) (net 29))
+ (segment (start 135.89 104.775) (end 115.57 104.775) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 137.16 103.505) (end 135.89 104.775) (width 0.8) (layer Cuivre) (net 29))
+ (segment (start 136.525 57.15) (end 133.985 59.69) (width 0.5) (layer Cuivre) (net 30))
+ (segment (start 133.985 68.58) (end 128.27 74.295) (width 0.5) (layer Cuivre) (net 30))
+ (segment (start 133.985 62.23) (end 133.985 68.58) (width 0.5) (layer Cuivre) (net 30) (status 800))
+ (segment (start 137.16 56.515) (end 139.065 54.61) (width 0.5) (layer Cuivre) (net 30) (status 400))
+ (segment (start 137.16 57.15) (end 137.16 56.515) (width 0.5) (layer Cuivre) (net 30) (status 800))
+ (segment (start 136.525 57.15) (end 137.16 57.15) (width 0.5) (layer Cuivre) (net 30) (status 400))
+ (segment (start 143.51 57.15) (end 147.32 60.96) (width 0.5) (layer Cuivre) (net 30) (status 400))
+ (segment (start 137.16 57.15) (end 143.51 57.15) (width 0.5) (layer Cuivre) (net 30) (status 800))
+ (segment (start 133.985 62.23) (end 133.985 59.69) (width 0.5) (layer Cuivre) (net 30) (status 800))
+ (segment (start 128.27 74.295) (end 128.27 75.565) (width 0.5) (layer Cuivre) (net 30) (status 400))
+ (segment (start 139.065 54.61) (end 139.065 51.181) (width 0.5) (layer Cuivre) (net 30) (status 800))
+ (segment (start 140.462 49.784) (end 143.002 49.784) (width 0.5) (layer Cuivre) (net 30) (status 400))
+ (segment (start 139.065 51.181) (end 140.462 49.784) (width 0.5) (layer Cuivre) (net 30))
+ (segment (start 196.85 112.395) (end 203.2 112.395) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 147.955 97.79) (end 147.955 102.235) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 170.18 104.775) (end 154.305 104.775) (width 0.5) (layer Composant) (net 31))
+ (segment (start 170.18 104.775) (end 185.42 104.775) (width 0.5) (layer Composant) (net 31))
+ (segment (start 185.42 104.775) (end 186.69 106.045) (width 0.5) (layer Composant) (net 31))
+ (segment (start 186.69 109.22) (end 186.69 106.045) (width 0.5) (layer Composant) (net 31) (status 400))
+ (segment (start 151.765 102.235) (end 147.955 102.235) (width 0.5) (layer Composant) (net 31) (tstamp 54033055))
+ (segment (start 154.305 104.775) (end 151.765 102.235) (width 0.5) (layer Composant) (net 31) (tstamp 54033053))
+ (segment (start 186.69 106.045) (end 187.96 104.775) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 196.85 106.68) (end 194.945 104.775) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 196.85 112.395) (end 196.85 106.68) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 186.69 109.22) (end 186.69 106.045) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 187.96 104.775) (end 194.945 104.775) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 201.93 64.77) (end 205.74 64.77) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 198.755 67.945) (end 201.93 64.77) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 205.74 64.77) (end 210.185 64.77) (width 0.4) (layer Cuivre) (net 31))
+ (segment (start 198.755 71.12) (end 198.755 67.945) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 210.185 64.77) (end 210.82 64.77) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 190.5 71.12) (end 198.755 71.12) (width 0.5) (layer Cuivre) (net 31) (status C00))
+ (segment (start 213.36 71.12) (end 215.265 71.12) (width 0.5) (layer Cuivre) (net 31) (status 400))
+ (segment (start 212.725 70.485) (end 213.36 71.12) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 166.37 120.65) (end 147.955 102.235) (width 0.5) (layer Cuivre) (net 31) (status 400))
+ (segment (start 210.82 64.77) (end 212.725 66.675) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 206.375 102.235) (end 219.075 102.235) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 203.2 105.41) (end 203.2 112.395) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 219.075 102.235) (end 220.345 100.965) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 220.345 100.965) (end 220.345 71.755) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 220.345 71.755) (end 219.71 71.12) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 219.71 71.12) (end 215.265 71.12) (width 0.5) (layer Cuivre) (net 31) (status 400))
+ (segment (start 203.2 105.41) (end 206.375 102.235) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 212.725 66.675) (end 212.725 70.485) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 204.47 116.84) (end 210.185 116.84) (width 0.4) (layer Cuivre) (net 31))
+ (segment (start 210.185 118.11) (end 210.185 116.84) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 203.2 115.57) (end 204.47 116.84) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 203.2 112.395) (end 203.2 115.57) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 198.12 119.38) (end 210.185 119.38) (width 0.4) (layer Cuivre) (net 31))
+ (segment (start 210.185 119.38) (end 210.185 118.11) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 193.04 119.38) (end 198.12 119.38) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 182.245 121.92) (end 184.7 121.92) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 184.7 121.92) (end 189.23 121.92) (width 0.4) (layer Cuivre) (net 31) (tstamp 52C92399))
+ (segment (start 189.23 121.92) (end 190.5 121.92) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 185.42 71.12) (end 190.5 71.12) (width 0.5) (layer Cuivre) (net 31) (status 400))
+ (segment (start 190.5 121.92) (end 193.04 119.38) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 180.975 120.65) (end 182.245 121.92) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 179.07 120.65) (end 180.975 120.65) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 175.26 76.2) (end 180.34 76.2) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 210.185 118.11) (end 215.265 118.11) (width 0.5) (layer Cuivre) (net 31) (status 400))
+ (segment (start 180.34 76.2) (end 185.42 71.12) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 140.97 99.06) (end 140.97 104.14) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 140.97 104.14) (end 142.24 105.41) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 142.24 105.41) (end 144.78 105.41) (width 0.5) (layer Cuivre) (net 31))
+ (segment (start 144.78 105.41) (end 147.955 102.235) (width 0.5) (layer Cuivre) (net 31) (status 400))
+ (segment (start 179.07 120.65) (end 166.37 120.65) (width 0.5) (layer Cuivre) (net 31) (status 800))
+ (segment (start 207.645 50.8) (end 207.645 46.355) (width 0.5) (layer Cuivre) (net 32) (status 800))
+ (segment (start 179.07 130.81) (end 180.975 132.715) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 207.645 115.57) (end 205.105 115.57) (width 0.5) (layer Cuivre) (net 32) (status 800))
+ (segment (start 221.615 104.14) (end 220.98 104.14) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 221.615 104.14) (end 222.25 103.505) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 220.98 130.81) (end 220.98 104.14) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 218.44 133.35) (end 220.98 130.81) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 222.25 48.895) (end 222.25 103.505) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 205.105 115.57) (end 204.47 114.935) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 204.47 114.935) (end 204.47 106.68) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 204.47 106.68) (end 207.01 104.14) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 207.01 104.14) (end 220.98 104.14) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 219.71 46.355) (end 207.645 46.355) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 156.845 50.8) (end 175.26 50.8) (width 0.5) (layer Cuivre) (net 32) (status 400))
+ (segment (start 195.58 132.715) (end 196.215 133.35) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 175.26 50.8) (end 175.26 47.625) (width 0.5) (layer Cuivre) (net 32) (status 800))
+ (segment (start 179.07 130.81) (end 179.07 128.27) (width 0.5) (layer Cuivre) (net 32) (status 400))
+ (segment (start 207.645 46.355) (end 176.53 46.355) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 175.26 47.625) (end 176.53 46.355) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 222.25 48.895) (end 219.71 46.355) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 196.215 133.35) (end 218.44 133.35) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 195.58 132.715) (end 180.975 132.715) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 152.4 55.245) (end 152.4 58.42) (width 0.5) (layer Cuivre) (net 32) (status 400))
+ (segment (start 156.845 50.8) (end 152.4 55.245) (width 0.5) (layer Cuivre) (net 32))
+ (segment (start 189.865 110.49) (end 189.865 113.665) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 140.335 122.555) (end 144.78 127) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 217.805 123.825) (end 217.17 123.19) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 217.805 130.175) (end 217.805 123.825) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 205.74 54.61) (end 208.915 54.61) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 196.85 54.61) (end 205.74 54.61) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 211.455 53.34) (end 210.185 54.61) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 210.185 54.61) (end 208.915 54.61) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 211.455 53.34) (end 215.265 53.34) (width 0.5) (layer Cuivre) (net 33) (status 400))
+ (segment (start 192.405 125.73) (end 198.12 131.445) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 144.78 127) (end 177.165 127) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 193.04 107.315) (end 193.04 75.565) (width 0.5) (layer Composant) (net 33))
+ (segment (start 196.85 67.31) (end 196.85 54.61) (width 0.5) (layer Composant) (net 33))
+ (segment (start 189.865 123.19) (end 192.405 125.73) (width 0.5) (layer Composant) (net 33))
+ (segment (start 189.23 114.3) (end 186.69 114.3) (width 0.5) (layer Cuivre) (net 33) (status 400))
+ (via (at 192.405 125.73) (size 1.6) (layers Composant Cuivre) (net 33))
+ (via (at 196.85 54.61) (size 1.6) (layers Composant Cuivre) (net 33))
+ (segment (start 193.04 75.565) (end 196.215 72.39) (width 0.5) (layer Composant) (net 33))
+ (segment (start 193.04 107.315) (end 189.865 110.49) (width 0.5) (layer Composant) (net 33))
+ (segment (start 186.69 125.73) (end 192.405 125.73) (width 0.5) (layer Cuivre) (net 33) (status 802))
+ (segment (start 198.12 131.445) (end 216.535 131.445) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 140.335 121.92) (end 140.335 122.555) (width 0.5) (layer Cuivre) (net 33) (status 800))
+ (segment (start 217.17 123.19) (end 215.265 123.19) (width 0.5) (layer Cuivre) (net 33) (status 400))
+ (segment (start 195.58 53.34) (end 196.85 54.61) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 190.5 53.34) (end 195.58 53.34) (width 0.5) (layer Cuivre) (net 33) (status 800))
+ (segment (start 196.215 67.945) (end 196.85 67.31) (width 0.5) (layer Composant) (net 33))
+ (segment (start 189.865 110.49) (end 189.865 123.19) (width 0.5) (layer Composant) (net 33))
+ (segment (start 196.215 72.39) (end 196.215 67.945) (width 0.5) (layer Composant) (net 33))
+ (segment (start 182.245 125.73) (end 186.69 125.73) (width 0.5) (layer Cuivre) (net 33) (status 400))
+ (via (at 189.865 110.49) (size 1.6) (layers Composant Cuivre) (net 33))
+ (segment (start 182.245 125.73) (end 180.975 127) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 177.165 127) (end 180.975 127) (width 0.4318) (layer Cuivre) (net 33))
+ (segment (start 216.535 131.445) (end 217.805 130.175) (width 0.5) (layer Cuivre) (net 33))
+ (segment (start 189.865 113.665) (end 189.23 114.3) (width 0.5) (layer Cuivre) (net 33))
+ (via (at 192.405 123.19) (size 1.6) (layers Composant Cuivre) (net 34))
+ (segment (start 132.715 109.22) (end 135.255 111.76) (width 0.5) (layer Composant) (net 34) (status 400))
+ (segment (start 192.405 114.3) (end 192.405 123.19) (width 0.5) (layer Composant) (net 34))
+ (segment (start 200.025 52.07) (end 205.74 52.07) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 203.2 121.92) (end 213.995 121.92) (width 0.4) (layer Cuivre) (net 34) (status 2))
+ (segment (start 173.99 125.095) (end 174.625 124.46) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 209.55 52.07) (end 210.82 50.8) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 201.93 123.19) (end 203.2 121.92) (width 0.5) (layer Cuivre) (net 34) (status 2))
+ (segment (start 213.995 121.92) (end 215.265 120.65) (width 0.5) (layer Cuivre) (net 34) (status 402))
+ (segment (start 186.69 123.19) (end 192.405 123.19) (width 0.5) (layer Cuivre) (net 34) (status 802))
+ (segment (start 174.625 124.46) (end 181.61 124.46) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 149.86 125.095) (end 173.99 125.095) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 181.61 124.46) (end 182.88 123.19) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 120.65 109.855) (end 121.285 109.22) (width 0.5) (layer Composant) (net 34))
+ (segment (start 120.65 111.76) (end 120.65 109.855) (width 0.5) (layer Composant) (net 34) (status 800))
+ (segment (start 192.405 123.19) (end 201.93 123.19) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 121.285 109.22) (end 132.715 109.22) (width 0.5) (layer Composant) (net 34))
+ (segment (start 205.74 52.07) (end 209.55 52.07) (width 0.4318) (layer Cuivre) (net 34))
+ (segment (start 182.88 123.19) (end 186.69 123.19) (width 0.5) (layer Cuivre) (net 34) (status 400))
+ (segment (start 194.945 91.44) (end 194.945 113.665) (width 0.5) (layer Composant) (net 34))
+ (segment (start 194.945 113.665) (end 194.31 114.3) (width 0.5) (layer Composant) (net 34))
+ (segment (start 200.025 57.15) (end 200.025 52.07) (width 0.5) (layer Composant) (net 34))
+ (via (at 200.025 52.07) (size 1.6) (layers Composant Cuivre) (net 34))
+ (segment (start 194.31 114.3) (end 192.405 114.3) (width 0.5) (layer Composant) (net 34))
+ (segment (start 190.5 50.8) (end 198.755 50.8) (width 0.5) (layer Cuivre) (net 34) (status 800))
+ (segment (start 198.755 50.8) (end 200.025 52.07) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 135.255 111.76) (end 137.795 114.3) (width 0.5) (layer Cuivre) (net 34) (status 800))
+ (segment (start 215.265 50.8) (end 210.82 50.8) (width 0.5) (layer Cuivre) (net 34) (status 800))
+ (segment (start 200.025 57.15) (end 201.295 58.42) (width 0.5) (layer Composant) (net 34))
+ (via (at 192.405 114.3) (size 1.6) (layers Composant Cuivre) (net 34))
+ (segment (start 201.295 58.42) (end 201.295 85.09) (width 0.5) (layer Composant) (net 34))
+ (segment (start 201.295 85.09) (end 194.945 91.44) (width 0.5) (layer Composant) (net 34))
+ (segment (start 137.795 114.3) (end 139.065 114.3) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 139.065 114.3) (end 149.86 125.095) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 192.405 114.3) (end 191.77 114.3) (width 0.5) (layer Cuivre) (net 34))
+ (segment (start 189.23 116.84) (end 186.69 116.84) (width 0.5) (layer Cuivre) (net 34) (status 400))
+ (segment (start 191.77 114.3) (end 189.23 116.84) (width 0.5) (layer Cuivre) (net 34))
+
+ (zone (net 5) (net_name GND) (layer Cuivre) (tstamp 48F6319A) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.3)
+ (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.635))
+ (polygon
+ (pts
+ (xy 223.52 138.43) (xy 232.41 128.905) (xy 232.41 53.975) (xy 219.71 41.91) (xy 81.28 41.91)
+ (xy 74.295 48.895) (xy 74.295 127.635) (xy 86.36 138.43)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 232.26 128.845876) (xy 223.454817 138.28) (xy 223.158 138.28) (xy 223.158 103.505) (xy 223.158 48.895)
+ (xy 223.149814 48.811516) (xy 223.142505 48.727972) (xy 223.141172 48.723386) (xy 223.140707 48.718635) (xy 223.116464 48.638339)
+ (xy 223.093065 48.557797) (xy 223.090867 48.553558) (xy 223.089488 48.548988) (xy 223.050117 48.474944) (xy 223.011513 48.400468)
+ (xy 223.008533 48.396735) (xy 223.006292 48.39252) (xy 222.953266 48.327504) (xy 222.900954 48.261974) (xy 222.894401 48.255328)
+ (xy 222.89429 48.255192) (xy 222.894163 48.255087) (xy 222.892053 48.252947) (xy 220.352053 45.712947) (xy 220.287229 45.6597)
+ (xy 220.22299 45.605797) (xy 220.218805 45.603496) (xy 220.215116 45.600466) (xy 220.141197 45.560831) (xy 220.067699 45.520425)
+ (xy 220.063148 45.518981) (xy 220.05894 45.516725) (xy 219.978751 45.492209) (xy 219.898784 45.466842) (xy 219.894036 45.466309)
+ (xy 219.889472 45.464914) (xy 219.806044 45.456439) (xy 219.722678 45.447089) (xy 219.71334 45.447023) (xy 219.713169 45.447006)
+ (xy 219.713009 45.447021) (xy 219.71 45.447) (xy 207.645 45.447) (xy 176.53 45.447) (xy 176.446516 45.455185)
+ (xy 176.362972 45.462495) (xy 176.358387 45.463827) (xy 176.353635 45.464293) (xy 176.273325 45.488539) (xy 176.192798 45.511935)
+ (xy 176.18856 45.514131) (xy 176.183988 45.515512) (xy 176.109925 45.554891) (xy 176.035468 45.593487) (xy 176.031735 45.596466)
+ (xy 176.02752 45.598708) (xy 175.96251 45.651728) (xy 175.896975 45.704045) (xy 175.890328 45.710598) (xy 175.890192 45.71071)
+ (xy 175.890087 45.710836) (xy 175.887947 45.712947) (xy 174.617947 46.982947) (xy 174.5647 47.04777) (xy 174.510797 47.11201)
+ (xy 174.508496 47.116194) (xy 174.505466 47.119884) (xy 174.465831 47.193802) (xy 174.425425 47.267301) (xy 174.423981 47.271851)
+ (xy 174.421725 47.27606) (xy 174.397209 47.356248) (xy 174.371842 47.436216) (xy 174.371309 47.440963) (xy 174.369914 47.445528)
+ (xy 174.361439 47.528955) (xy 174.352089 47.612322) (xy 174.352023 47.621659) (xy 174.352006 47.621831) (xy 174.352021 47.62199)
+ (xy 174.352 47.625) (xy 174.352 49.3546) (xy 173.798193 49.3546) (xy 173.671069 49.379887) (xy 173.55132 49.429488)
+ (xy 173.44355 49.501498) (xy 173.351898 49.593149) (xy 173.279888 49.70092) (xy 173.230287 49.820668) (xy 173.216097 49.892)
+ (xy 156.845 49.892) (xy 156.761516 49.900185) (xy 156.677972 49.907495) (xy 156.673387 49.908827) (xy 156.668635 49.909293)
+ (xy 156.588325 49.933539) (xy 156.507798 49.956935) (xy 156.50356 49.959131) (xy 156.498988 49.960512) (xy 156.424925 49.999891)
+ (xy 156.350468 50.038487) (xy 156.346735 50.041466) (xy 156.34252 50.043708) (xy 156.277534 50.096708) (xy 156.211974 50.149045)
+ (xy 156.205327 50.155599) (xy 156.205192 50.15571) (xy 156.205088 50.155835) (xy 156.202947 50.157947) (xy 151.757947 54.602947)
+ (xy 151.7047 54.66777) (xy 151.650797 54.73201) (xy 151.648496 54.736194) (xy 151.645466 54.739884) (xy 151.605831 54.813802)
+ (xy 151.565425 54.887301) (xy 151.563981 54.891851) (xy 151.561725 54.89606) (xy 151.537209 54.976248) (xy 151.511842 55.056216)
+ (xy 151.511309 55.060963) (xy 151.509914 55.065528) (xy 151.501439 55.148955) (xy 151.492089 55.232322) (xy 151.492023 55.241659)
+ (xy 151.492006 55.241831) (xy 151.492021 55.24199) (xy 151.492 55.245) (xy 151.492 57.321613) (xy 151.306953 57.502825)
+ (xy 151.149623 57.7326) (xy 151.03992 57.988557) (xy 150.982021 58.260948) (xy 150.978133 58.539397) (xy 151.028404 58.813299)
+ (xy 151.130918 59.07222) (xy 151.281771 59.306298) (xy 151.475217 59.506617) (xy 151.703887 59.665547) (xy 151.959073 59.777035)
+ (xy 152.231053 59.836834) (xy 152.509468 59.842666) (xy 152.783714 59.794309) (xy 153.043344 59.693605) (xy 153.27847 59.54439)
+ (xy 153.480134 59.352347) (xy 153.640657 59.124791) (xy 153.753924 58.87039) (xy 153.81562 58.598834) (xy 153.820061 58.280762)
+ (xy 153.765971 58.007589) (xy 153.659852 57.750125) (xy 153.505746 57.518176) (xy 153.309522 57.320577) (xy 153.308 57.31955)
+ (xy 153.308 55.621106) (xy 157.221106 51.708) (xy 173.216098 51.708) (xy 173.230287 51.779331) (xy 173.279888 51.89908)
+ (xy 173.351898 52.00685) (xy 173.443549 52.098502) (xy 173.55132 52.170512) (xy 173.671068 52.220113) (xy 173.72453 52.230747)
+ (xy 173.621979 52.314386) (xy 173.442166 52.531743) (xy 173.307996 52.779885) (xy 173.224579 53.049362) (xy 173.195092 53.329909)
+ (xy 173.220659 53.610841) (xy 173.300305 53.881456) (xy 173.430998 54.131448) (xy 173.607758 54.351293) (xy 173.823854 54.532619)
+ (xy 173.964748 54.610076) (xy 173.840585 54.676096) (xy 173.621979 54.854386) (xy 173.442166 55.071743) (xy 173.307996 55.319885)
+ (xy 173.224579 55.589362) (xy 173.195092 55.869909) (xy 173.220659 56.150841) (xy 173.300305 56.421456) (xy 173.430998 56.671448)
+ (xy 173.607758 56.891293) (xy 173.823854 57.072619) (xy 173.964748 57.150076) (xy 173.840585 57.216096) (xy 173.621979 57.394386)
+ (xy 173.442166 57.611743) (xy 173.307996 57.859885) (xy 173.224579 58.129362) (xy 173.195092 58.409909) (xy 173.220659 58.690841)
+ (xy 173.300305 58.961456) (xy 173.430998 59.211448) (xy 173.607758 59.431293) (xy 173.823854 59.612619) (xy 173.964748 59.690076)
+ (xy 173.840585 59.756096) (xy 173.621979 59.934386) (xy 173.442166 60.151743) (xy 173.307996 60.399885) (xy 173.224579 60.669362)
+ (xy 173.195092 60.949909) (xy 173.220659 61.230841) (xy 173.300305 61.501456) (xy 173.430998 61.751448) (xy 173.607758 61.971293)
+ (xy 173.823854 62.152619) (xy 173.964748 62.230076) (xy 173.840585 62.296096) (xy 173.621979 62.474386) (xy 173.442166 62.691743)
+ (xy 173.307996 62.939885) (xy 173.224579 63.209362) (xy 173.195092 63.489909) (xy 173.220659 63.770841) (xy 173.300305 64.041456)
+ (xy 173.430998 64.291448) (xy 173.607758 64.511293) (xy 173.823854 64.692619) (xy 173.964748 64.770076) (xy 173.840585 64.836096)
+ (xy 173.621979 65.014386) (xy 173.442166 65.231743) (xy 173.307996 65.479885) (xy 173.224579 65.749362) (xy 173.195092 66.029909)
+ (xy 173.220659 66.310841) (xy 173.300305 66.581456) (xy 173.430998 66.831448) (xy 173.607758 67.051293) (xy 173.823854 67.232619)
+ (xy 173.953561 67.303926) (xy 173.94252 67.308724) (xy 173.708108 67.471252) (xy 173.509908 67.676388) (xy 173.355536 67.91625)
+ (xy 173.258616 68.189975) (xy 173.380499 68.4125) (xy 175.0925 68.4125) (xy 175.0925 68.3925) (xy 175.4275 68.3925)
+ (xy 175.4275 68.4125) (xy 177.139501 68.4125) (xy 177.261384 68.189975) (xy 177.164464 67.91625) (xy 177.010092 67.676388)
+ (xy 176.811892 67.471252) (xy 176.57748 67.308724) (xy 176.566488 67.303948) (xy 176.679415 67.243904) (xy 176.898021 67.065614)
+ (xy 177.077834 66.848257) (xy 177.212004 66.600115) (xy 177.295421 66.330638) (xy 177.324908 66.050091) (xy 177.299341 65.769159)
+ (xy 177.219695 65.498544) (xy 177.089002 65.248552) (xy 176.912242 65.028707) (xy 176.696146 64.847381) (xy 176.555251 64.769923)
+ (xy 176.679415 64.703904) (xy 176.898021 64.525614) (xy 177.077834 64.308257) (xy 177.212004 64.060115) (xy 177.295421 63.790638)
+ (xy 177.324908 63.510091) (xy 177.299341 63.229159) (xy 177.219695 62.958544) (xy 177.089002 62.708552) (xy 176.912242 62.488707)
+ (xy 176.696146 62.307381) (xy 176.555251 62.229923) (xy 176.679415 62.163904) (xy 176.898021 61.985614) (xy 177.077834 61.768257)
+ (xy 177.212004 61.520115) (xy 177.295421 61.250638) (xy 177.324908 60.970091) (xy 177.299341 60.689159) (xy 177.219695 60.418544)
+ (xy 177.089002 60.168552) (xy 176.912242 59.948707) (xy 176.696146 59.767381) (xy 176.555251 59.689923) (xy 176.679415 59.623904)
+ (xy 176.898021 59.445614) (xy 177.077834 59.228257) (xy 177.212004 58.980115) (xy 177.295421 58.710638) (xy 177.324908 58.430091)
+ (xy 177.299341 58.149159) (xy 177.219695 57.878544) (xy 177.089002 57.628552) (xy 176.912242 57.408707) (xy 176.696146 57.227381)
+ (xy 176.555251 57.149923) (xy 176.679415 57.083904) (xy 176.898021 56.905614) (xy 177.077834 56.688257) (xy 177.212004 56.440115)
+ (xy 177.295421 56.170638) (xy 177.324908 55.890091) (xy 177.299341 55.609159) (xy 177.219695 55.338544) (xy 177.089002 55.088552)
+ (xy 176.912242 54.868707) (xy 176.696146 54.687381) (xy 176.555251 54.609923) (xy 176.679415 54.543904) (xy 176.898021 54.365614)
+ (xy 177.077834 54.148257) (xy 177.212004 53.900115) (xy 177.295421 53.630638) (xy 177.324908 53.350091) (xy 177.299341 53.069159)
+ (xy 177.219695 52.798544) (xy 177.089002 52.548552) (xy 176.912242 52.328707) (xy 176.795492 52.230742) (xy 176.848931 52.220113)
+ (xy 176.96868 52.170512) (xy 177.07645 52.098502) (xy 177.168102 52.006851) (xy 177.240112 51.89908) (xy 177.289713 51.779332)
+ (xy 177.315 51.652208) (xy 177.315 51.522593) (xy 177.315 49.947793) (xy 177.289713 49.820669) (xy 177.240112 49.70092)
+ (xy 177.168102 49.59315) (xy 177.076451 49.501498) (xy 176.96868 49.429488) (xy 176.848932 49.379887) (xy 176.721808 49.3546)
+ (xy 176.592193 49.3546) (xy 176.168 49.3546) (xy 176.168 48.001106) (xy 176.906106 47.263) (xy 195.195911 47.263)
+ (xy 195.152306 47.326685) (xy 195.003356 47.67421) (xy 194.924745 48.044048) (xy 194.919465 48.422112) (xy 194.98772 48.794)
+ (xy 195.126908 49.145549) (xy 195.331728 49.463368) (xy 195.594379 49.73535) (xy 195.819768 49.892) (xy 192.235291 49.892)
+ (xy 192.152242 49.788707) (xy 191.936146 49.607381) (xy 191.688947 49.471482) (xy 191.420059 49.386185) (xy 191.139724 49.354741)
+ (xy 191.119543 49.3546) (xy 189.880457 49.3546) (xy 189.599711 49.382127) (xy 189.329658 49.463661) (xy 189.080585 49.596096)
+ (xy 188.861979 49.774386) (xy 188.682166 49.991743) (xy 188.547996 50.239885) (xy 188.464579 50.509362) (xy 188.435092 50.789909)
+ (xy 188.460659 51.070841) (xy 188.540305 51.341456) (xy 188.670998 51.591448) (xy 188.847758 51.811293) (xy 189.063854 51.992619)
+ (xy 189.204748 52.070076) (xy 189.080585 52.136096) (xy 188.861979 52.314386) (xy 188.682166 52.531743) (xy 188.547996 52.779885)
+ (xy 188.464579 53.049362) (xy 188.435092 53.329909) (xy 188.460659 53.610841) (xy 188.540305 53.881456) (xy 188.670998 54.131448)
+ (xy 188.847758 54.351293) (xy 189.063854 54.532619) (xy 189.204748 54.610076) (xy 189.080585 54.676096) (xy 188.861979 54.854386)
+ (xy 188.682166 55.071743) (xy 188.547996 55.319885) (xy 188.464579 55.589362) (xy 188.435092 55.869909) (xy 188.460659 56.150841)
+ (xy 188.540305 56.421456) (xy 188.670998 56.671448) (xy 188.847758 56.891293) (xy 189.063854 57.072619) (xy 189.204748 57.150076)
+ (xy 189.080585 57.216096) (xy 188.861979 57.394386) (xy 188.682166 57.611743) (xy 188.547996 57.859885) (xy 188.464579 58.129362)
+ (xy 188.435092 58.409909) (xy 188.460659 58.690841) (xy 188.540305 58.961456) (xy 188.670998 59.211448) (xy 188.847758 59.431293)
+ (xy 189.063854 59.612619) (xy 189.204748 59.690076) (xy 189.080585 59.756096) (xy 188.861979 59.934386) (xy 188.682166 60.151743)
+ (xy 188.547996 60.399885) (xy 188.464579 60.669362) (xy 188.435092 60.949909) (xy 188.460659 61.230841) (xy 188.540305 61.501456)
+ (xy 188.670998 61.751448) (xy 188.847758 61.971293) (xy 189.063854 62.152619) (xy 189.204748 62.230076) (xy 189.080585 62.296096)
+ (xy 188.861979 62.474386) (xy 188.682166 62.691743) (xy 188.547996 62.939885) (xy 188.464579 63.209362) (xy 188.435092 63.489909)
+ (xy 188.460659 63.770841) (xy 188.540305 64.041456) (xy 188.670998 64.291448) (xy 188.847758 64.511293) (xy 189.063854 64.692619)
+ (xy 189.204748 64.770076) (xy 189.080585 64.836096) (xy 188.861979 65.014386) (xy 188.682166 65.231743) (xy 188.547996 65.479885)
+ (xy 188.464579 65.749362) (xy 188.435092 66.029909) (xy 188.460659 66.310841) (xy 188.540305 66.581456) (xy 188.670998 66.831448)
+ (xy 188.847758 67.051293) (xy 189.063854 67.232619) (xy 189.204748 67.310076) (xy 189.080585 67.376096) (xy 188.861979 67.554386)
+ (xy 188.682166 67.771743) (xy 188.547996 68.019885) (xy 188.464579 68.289362) (xy 188.435092 68.569909) (xy 188.460659 68.850841)
+ (xy 188.540305 69.121456) (xy 188.670998 69.371448) (xy 188.847758 69.591293) (xy 189.063854 69.772619) (xy 189.204748 69.850076)
+ (xy 189.080585 69.916096) (xy 188.861979 70.094386) (xy 188.76468 70.212) (xy 185.42 70.212) (xy 185.336512 70.220186)
+ (xy 185.252972 70.227495) (xy 185.248387 70.228827) (xy 185.243635 70.229293) (xy 185.163325 70.253539) (xy 185.082798 70.276935)
+ (xy 185.07856 70.279131) (xy 185.073988 70.280512) (xy 184.999925 70.319891) (xy 184.925468 70.358487) (xy 184.921735 70.361466)
+ (xy 184.91752 70.363708) (xy 184.85251 70.416728) (xy 184.786975 70.469045) (xy 184.780328 70.475598) (xy 184.780192 70.47571)
+ (xy 184.780087 70.475836) (xy 184.777947 70.477947) (xy 179.963894 75.292) (xy 176.995291 75.292) (xy 176.912242 75.188707)
+ (xy 176.696146 75.007381) (xy 176.555251 74.929923) (xy 176.679415 74.863904) (xy 176.898021 74.685614) (xy 177.077834 74.468257)
+ (xy 177.212004 74.220115) (xy 177.295421 73.950638) (xy 177.324908 73.670091) (xy 177.299341 73.389159) (xy 177.219695 73.118544)
+ (xy 177.089002 72.868552) (xy 176.912242 72.648707) (xy 176.696146 72.467381) (xy 176.555251 72.389923) (xy 176.679415 72.323904)
+ (xy 176.898021 72.145614) (xy 177.077834 71.928257) (xy 177.212004 71.680115) (xy 177.295421 71.410638) (xy 177.324908 71.130091)
+ (xy 177.299341 70.849159) (xy 177.219695 70.578544) (xy 177.089002 70.328552) (xy 176.912242 70.108707) (xy 176.696146 69.927381)
+ (xy 176.566438 69.856073) (xy 176.57748 69.851276) (xy 176.811892 69.688748) (xy 177.010092 69.483612) (xy 177.164464 69.24375)
+ (xy 177.261384 68.970025) (xy 177.139501 68.7475) (xy 175.4275 68.7475) (xy 175.4275 68.7675) (xy 175.0925 68.7675)
+ (xy 175.0925 68.7475) (xy 173.380499 68.7475) (xy 173.258616 68.970025) (xy 173.355536 69.24375) (xy 173.509908 69.483612)
+ (xy 173.708108 69.688748) (xy 173.94252 69.851276) (xy 173.953511 69.856051) (xy 173.840585 69.916096) (xy 173.621979 70.094386)
+ (xy 173.442166 70.311743) (xy 173.307996 70.559885) (xy 173.224579 70.829362) (xy 173.195092 71.109909) (xy 173.220659 71.390841)
+ (xy 173.300305 71.661456) (xy 173.430998 71.911448) (xy 173.607758 72.131293) (xy 173.823854 72.312619) (xy 173.964748 72.390076)
+ (xy 173.840585 72.456096) (xy 173.621979 72.634386) (xy 173.442166 72.851743) (xy 173.307996 73.099885) (xy 173.224579 73.369362)
+ (xy 173.195092 73.649909) (xy 173.220659 73.930841) (xy 173.300305 74.201456) (xy 173.430998 74.451448) (xy 173.607758 74.671293)
+ (xy 173.823854 74.852619) (xy 173.964748 74.930076) (xy 173.840585 74.996096) (xy 173.621979 75.174386) (xy 173.442166 75.391743)
+ (xy 173.307996 75.639885) (xy 173.224579 75.909362) (xy 173.195092 76.189909) (xy 173.220659 76.470841) (xy 173.300305 76.741456)
+ (xy 173.430998 76.991448) (xy 173.607758 77.211293) (xy 173.823854 77.392619) (xy 173.953561 77.463926) (xy 173.94252 77.468724)
+ (xy 173.708108 77.631252) (xy 173.509908 77.836388) (xy 173.355536 78.07625) (xy 173.258616 78.349975) (xy 173.380499 78.5725)
+ (xy 175.0925 78.5725) (xy 175.0925 78.5525) (xy 175.4275 78.5525) (xy 175.4275 78.5725) (xy 177.139501 78.5725)
+ (xy 177.261384 78.349975) (xy 177.164464 78.07625) (xy 177.010092 77.836388) (xy 176.811892 77.631252) (xy 176.57748 77.468724)
+ (xy 176.566488 77.463948) (xy 176.679415 77.403904) (xy 176.898021 77.225614) (xy 176.995319 77.108) (xy 180.34 77.108)
+ (xy 180.423483 77.099814) (xy 180.507028 77.092505) (xy 180.511612 77.091172) (xy 180.516365 77.090707) (xy 180.596674 77.06646)
+ (xy 180.677202 77.043065) (xy 180.681439 77.040868) (xy 180.686012 77.039488) (xy 180.760074 77.000108) (xy 180.834532 76.961513)
+ (xy 180.838264 76.958533) (xy 180.84248 76.956292) (xy 180.907489 76.903271) (xy 180.973025 76.850955) (xy 180.979671 76.844401)
+ (xy 180.979808 76.84429) (xy 180.979912 76.844163) (xy 180.982053 76.842053) (xy 185.796106 72.028) (xy 188.764708 72.028)
+ (xy 188.847758 72.131293) (xy 189.063854 72.312619) (xy 189.193561 72.383926) (xy 189.18252 72.388724) (xy 188.948108 72.551252)
+ (xy 188.749908 72.756388) (xy 188.595536 72.99625) (xy 188.498616 73.269975) (xy 188.620499 73.4925) (xy 190.3325 73.4925)
+ (xy 190.3325 73.4725) (xy 190.6675 73.4725) (xy 190.6675 73.4925) (xy 192.379501 73.4925) (xy 192.501384 73.269975)
+ (xy 192.404464 72.99625) (xy 192.250092 72.756388) (xy 192.051892 72.551252) (xy 191.81748 72.388724) (xy 191.806488 72.383948)
+ (xy 191.919415 72.323904) (xy 192.138021 72.145614) (xy 192.235319 72.028) (xy 197.746007 72.028) (xy 197.871571 72.158025)
+ (xy 198.090016 72.309849) (xy 198.275469 72.390871) (xy 198.129649 72.448852) (xy 198.095394 72.467162) (xy 198.034245 72.702364)
+ (xy 198.755 73.423119) (xy 199.475755 72.702364) (xy 199.414606 72.467162) (xy 199.2339 72.389276) (xy 199.369575 72.336652)
+ (xy 199.594186 72.194109) (xy 199.786833 72.010654) (xy 199.940177 71.793274) (xy 200.048379 71.55025) (xy 200.107316 71.290837)
+ (xy 200.111559 70.986988) (xy 200.059888 70.726031) (xy 199.958514 70.48008) (xy 199.811299 70.258504) (xy 199.663 70.109165)
+ (xy 199.663 68.321106) (xy 202.306106 65.678) (xy 205.74 65.678) (xy 205.891496 65.663145) (xy 205.864808 65.749362)
+ (xy 205.835321 66.029909) (xy 205.860888 66.310841) (xy 205.940534 66.581456) (xy 206.071227 66.831448) (xy 206.247987 67.051293)
+ (xy 206.464083 67.232619) (xy 206.593247 67.303628) (xy 206.58152 67.308724) (xy 206.347108 67.471252) (xy 206.148908 67.676388)
+ (xy 205.994536 67.91625) (xy 205.897616 68.189975) (xy 206.019499 68.4125) (xy 207.4775 68.4125) (xy 207.4775 68.3925)
+ (xy 207.8125 68.3925) (xy 207.8125 68.4125) (xy 209.270501 68.4125) (xy 209.392384 68.189975) (xy 209.295464 67.91625)
+ (xy 209.141092 67.676388) (xy 208.942892 67.471252) (xy 208.70848 67.308724) (xy 208.696812 67.303654) (xy 208.809186 67.243904)
+ (xy 209.027792 67.065614) (xy 209.207605 66.848257) (xy 209.341775 66.600115) (xy 209.425192 66.330638) (xy 209.454679 66.050091)
+ (xy 209.429112 65.769159) (xy 209.387566 65.628) (xy 209.901145 65.628) (xy 209.996216 65.658158) (xy 210.172322 65.677911)
+ (xy 210.185 65.678) (xy 210.443894 65.678) (xy 211.817 67.051106) (xy 211.817 70.485) (xy 211.825185 70.568483)
+ (xy 211.832495 70.652028) (xy 211.833827 70.656612) (xy 211.834293 70.661365) (xy 211.858539 70.741674) (xy 211.881935 70.822202)
+ (xy 211.884131 70.826439) (xy 211.885512 70.831012) (xy 211.924891 70.905074) (xy 211.963487 70.979532) (xy 211.966466 70.983264)
+ (xy 211.968708 70.98748) (xy 212.021728 71.052489) (xy 212.074045 71.118025) (xy 212.080598 71.124671) (xy 212.08071 71.124808)
+ (xy 212.080836 71.124912) (xy 212.082947 71.127053) (xy 212.717947 71.762053) (xy 212.78277 71.815299) (xy 212.84701 71.869203)
+ (xy 212.851194 71.871503) (xy 212.854884 71.874534) (xy 212.928802 71.914168) (xy 213.002301 71.954575) (xy 213.006851 71.956018)
+ (xy 213.01106 71.958275) (xy 213.091248 71.98279) (xy 213.171216 72.008158) (xy 213.175963 72.00869) (xy 213.180528 72.010086)
+ (xy 213.263999 72.018565) (xy 213.347322 72.027911) (xy 213.356648 72.027976) (xy 213.356831 72.027995) (xy 213.357 72.027978)
+ (xy 213.36 72.028) (xy 213.784937 72.028) (xy 213.867987 72.131293) (xy 214.084083 72.312619) (xy 214.213247 72.383628)
+ (xy 214.20152 72.388724) (xy 213.967108 72.551252) (xy 213.768908 72.756388) (xy 213.614536 72.99625) (xy 213.517616 73.269975)
+ (xy 213.639499 73.4925) (xy 215.0975 73.4925) (xy 215.0975 73.4725) (xy 215.4325 73.4725) (xy 215.4325 73.4925)
+ (xy 216.890501 73.4925) (xy 217.012384 73.269975) (xy 216.915464 72.99625) (xy 216.761092 72.756388) (xy 216.562892 72.551252)
+ (xy 216.32848 72.388724) (xy 216.316812 72.383654) (xy 216.429186 72.323904) (xy 216.647792 72.145614) (xy 216.74509 72.028)
+ (xy 219.333894 72.028) (xy 219.437 72.131106) (xy 219.437 100.588894) (xy 218.698894 101.327) (xy 217.074679 101.327)
+ (xy 217.074679 83.830091) (xy 217.049112 83.549159) (xy 216.969466 83.278544) (xy 216.838773 83.028552) (xy 216.662013 82.808707)
+ (xy 216.445917 82.627381) (xy 216.305022 82.549923) (xy 216.429186 82.483904) (xy 216.647792 82.305614) (xy 216.827605 82.088257)
+ (xy 216.961775 81.840115) (xy 217.045192 81.570638) (xy 217.074679 81.290091) (xy 217.049112 81.009159) (xy 216.969466 80.738544)
+ (xy 216.838773 80.488552) (xy 216.662013 80.268707) (xy 216.445917 80.087381) (xy 216.305022 80.009923) (xy 216.429186 79.943904)
+ (xy 216.647792 79.765614) (xy 216.827605 79.548257) (xy 216.961775 79.300115) (xy 217.045192 79.030638) (xy 217.074679 78.750091)
+ (xy 217.049112 78.469159) (xy 216.969466 78.198544) (xy 216.838773 77.948552) (xy 216.662013 77.728707) (xy 216.445917 77.547381)
+ (xy 216.305022 77.469923) (xy 216.429186 77.403904) (xy 216.647792 77.225614) (xy 216.827605 77.008257) (xy 216.961775 76.760115)
+ (xy 217.045192 76.490638) (xy 217.074679 76.210091) (xy 217.049112 75.929159) (xy 216.969466 75.658544) (xy 216.838773 75.408552)
+ (xy 216.662013 75.188707) (xy 216.445917 75.007381) (xy 216.316752 74.936371) (xy 216.32848 74.931276) (xy 216.562892 74.768748)
+ (xy 216.761092 74.563612) (xy 216.915464 74.32375) (xy 217.012384 74.050025) (xy 216.890501 73.8275) (xy 215.4325 73.8275)
+ (xy 215.4325 73.8475) (xy 215.0975 73.8475) (xy 215.0975 73.8275) (xy 213.639499 73.8275) (xy 213.517616 74.050025)
+ (xy 213.614536 74.32375) (xy 213.768908 74.563612) (xy 213.967108 74.768748) (xy 214.20152 74.931276) (xy 214.213187 74.936345)
+ (xy 214.100814 74.996096) (xy 213.882208 75.174386) (xy 213.702395 75.391743) (xy 213.568225 75.639885) (xy 213.484808 75.909362)
+ (xy 213.455321 76.189909) (xy 213.480888 76.470841) (xy 213.560534 76.741456) (xy 213.691227 76.991448) (xy 213.867987 77.211293)
+ (xy 214.084083 77.392619) (xy 214.224977 77.470076) (xy 214.100814 77.536096) (xy 213.882208 77.714386) (xy 213.702395 77.931743)
+ (xy 213.568225 78.179885) (xy 213.484808 78.449362) (xy 213.455321 78.729909) (xy 213.480888 79.010841) (xy 213.560534 79.281456)
+ (xy 213.691227 79.531448) (xy 213.867987 79.751293) (xy 214.084083 79.932619) (xy 214.224977 80.010076) (xy 214.100814 80.076096)
+ (xy 213.882208 80.254386) (xy 213.702395 80.471743) (xy 213.568225 80.719885) (xy 213.484808 80.989362) (xy 213.455321 81.269909)
+ (xy 213.480888 81.550841) (xy 213.560534 81.821456) (xy 213.691227 82.071448) (xy 213.867987 82.291293) (xy 214.084083 82.472619)
+ (xy 214.224977 82.550076) (xy 214.100814 82.616096) (xy 213.882208 82.794386) (xy 213.702395 83.011743) (xy 213.568225 83.259885)
+ (xy 213.484808 83.529362) (xy 213.455321 83.809909) (xy 213.480888 84.090841) (xy 213.560534 84.361456) (xy 213.691227 84.611448)
+ (xy 213.867987 84.831293) (xy 214.084083 85.012619) (xy 214.331282 85.148518) (xy 214.60017 85.233815) (xy 214.880505 85.265259)
+ (xy 214.900686 85.2654) (xy 215.629314 85.2654) (xy 215.91006 85.237873) (xy 216.180113 85.156339) (xy 216.429186 85.023904)
+ (xy 216.647792 84.845614) (xy 216.827605 84.628257) (xy 216.961775 84.380115) (xy 217.045192 84.110638) (xy 217.074679 83.830091)
+ (xy 217.074679 101.327) (xy 209.454679 101.327) (xy 209.454679 83.830091) (xy 209.429112 83.549159) (xy 209.349466 83.278544)
+ (xy 209.218773 83.028552) (xy 209.042013 82.808707) (xy 208.825917 82.627381) (xy 208.685022 82.549923) (xy 208.809186 82.483904)
+ (xy 209.027792 82.305614) (xy 209.207605 82.088257) (xy 209.341775 81.840115) (xy 209.425192 81.570638) (xy 209.454679 81.290091)
+ (xy 209.429112 81.009159) (xy 209.349466 80.738544) (xy 209.218773 80.488552) (xy 209.042013 80.268707) (xy 208.825917 80.087381)
+ (xy 208.685022 80.009923) (xy 208.809186 79.943904) (xy 209.027792 79.765614) (xy 209.207605 79.548257) (xy 209.341775 79.300115)
+ (xy 209.425192 79.030638) (xy 209.454679 78.750091) (xy 209.429112 78.469159) (xy 209.349466 78.198544) (xy 209.218773 77.948552)
+ (xy 209.042013 77.728707) (xy 208.825917 77.547381) (xy 208.685022 77.469923) (xy 208.809186 77.403904) (xy 209.027792 77.225614)
+ (xy 209.207605 77.008257) (xy 209.341775 76.760115) (xy 209.425192 76.490638) (xy 209.454679 76.210091) (xy 209.429112 75.929159)
+ (xy 209.349466 75.658544) (xy 209.218773 75.408552) (xy 209.042013 75.188707) (xy 208.825917 75.007381) (xy 208.685022 74.929923)
+ (xy 208.809186 74.863904) (xy 209.027792 74.685614) (xy 209.207605 74.468257) (xy 209.341775 74.220115) (xy 209.425192 73.950638)
+ (xy 209.454679 73.670091) (xy 209.429112 73.389159) (xy 209.349466 73.118544) (xy 209.218773 72.868552) (xy 209.042013 72.648707)
+ (xy 208.825917 72.467381) (xy 208.685022 72.389923) (xy 208.809186 72.323904) (xy 209.027792 72.145614) (xy 209.207605 71.928257)
+ (xy 209.341775 71.680115) (xy 209.425192 71.410638) (xy 209.454679 71.130091) (xy 209.429112 70.849159) (xy 209.349466 70.578544)
+ (xy 209.218773 70.328552) (xy 209.042013 70.108707) (xy 208.825917 69.927381) (xy 208.696752 69.856371) (xy 208.70848 69.851276)
+ (xy 208.942892 69.688748) (xy 209.141092 69.483612) (xy 209.295464 69.24375) (xy 209.392384 68.970025) (xy 209.270501 68.7475)
+ (xy 207.8125 68.7475) (xy 207.8125 68.7675) (xy 207.4775 68.7675) (xy 207.4775 68.7475) (xy 206.019499 68.7475)
+ (xy 205.897616 68.970025) (xy 205.994536 69.24375) (xy 206.148908 69.483612) (xy 206.347108 69.688748) (xy 206.58152 69.851276)
+ (xy 206.593187 69.856345) (xy 206.480814 69.916096) (xy 206.262208 70.094386) (xy 206.082395 70.311743) (xy 205.948225 70.559885)
+ (xy 205.864808 70.829362) (xy 205.835321 71.109909) (xy 205.860888 71.390841) (xy 205.940534 71.661456) (xy 206.071227 71.911448)
+ (xy 206.247987 72.131293) (xy 206.464083 72.312619) (xy 206.604977 72.390076) (xy 206.480814 72.456096) (xy 206.262208 72.634386)
+ (xy 206.082395 72.851743) (xy 205.948225 73.099885) (xy 205.864808 73.369362) (xy 205.835321 73.649909) (xy 205.860888 73.930841)
+ (xy 205.940534 74.201456) (xy 206.071227 74.451448) (xy 206.247987 74.671293) (xy 206.464083 74.852619) (xy 206.604977 74.930076)
+ (xy 206.480814 74.996096) (xy 206.262208 75.174386) (xy 206.082395 75.391743) (xy 205.948225 75.639885) (xy 205.864808 75.909362)
+ (xy 205.835321 76.189909) (xy 205.860888 76.470841) (xy 205.940534 76.741456) (xy 206.071227 76.991448) (xy 206.247987 77.211293)
+ (xy 206.464083 77.392619) (xy 206.604977 77.470076) (xy 206.480814 77.536096) (xy 206.262208 77.714386) (xy 206.082395 77.931743)
+ (xy 205.948225 78.179885) (xy 205.864808 78.449362) (xy 205.835321 78.729909) (xy 205.860888 79.010841) (xy 205.940534 79.281456)
+ (xy 206.071227 79.531448) (xy 206.247987 79.751293) (xy 206.464083 79.932619) (xy 206.604977 80.010076) (xy 206.480814 80.076096)
+ (xy 206.262208 80.254386) (xy 206.082395 80.471743) (xy 205.948225 80.719885) (xy 205.864808 80.989362) (xy 205.835321 81.269909)
+ (xy 205.860888 81.550841) (xy 205.940534 81.821456) (xy 206.071227 82.071448) (xy 206.247987 82.291293) (xy 206.464083 82.472619)
+ (xy 206.604977 82.550076) (xy 206.480814 82.616096) (xy 206.262208 82.794386) (xy 206.082395 83.011743) (xy 205.948225 83.259885)
+ (xy 205.864808 83.529362) (xy 205.835321 83.809909) (xy 205.860888 84.090841) (xy 205.940534 84.361456) (xy 206.071227 84.611448)
+ (xy 206.247987 84.831293) (xy 206.464083 85.012619) (xy 206.711282 85.148518) (xy 206.98017 85.233815) (xy 207.260505 85.265259)
+ (xy 207.280686 85.2654) (xy 208.009314 85.2654) (xy 208.29006 85.237873) (xy 208.560113 85.156339) (xy 208.809186 85.023904)
+ (xy 209.027792 84.845614) (xy 209.207605 84.628257) (xy 209.341775 84.380115) (xy 209.425192 84.110638) (xy 209.454679 83.830091)
+ (xy 209.454679 101.327) (xy 206.375 101.327) (xy 206.291516 101.335185) (xy 206.207972 101.342495) (xy 206.203387 101.343827)
+ (xy 206.198635 101.344293) (xy 206.118325 101.368539) (xy 206.037798 101.391935) (xy 206.03356 101.394131) (xy 206.028988 101.395512)
+ (xy 205.954925 101.434891) (xy 205.880468 101.473487) (xy 205.876735 101.476466) (xy 205.87252 101.478708) (xy 205.80751 101.531728)
+ (xy 205.741975 101.584045) (xy 205.735328 101.590598) (xy 205.735192 101.59071) (xy 205.735087 101.590836) (xy 205.732947 101.592947)
+ (xy 202.557947 104.767947) (xy 202.5047 104.83277) (xy 202.450797 104.89701) (xy 202.448496 104.901194) (xy 202.445466 104.904884)
+ (xy 202.405831 104.978802) (xy 202.365425 105.052301) (xy 202.363981 105.056851) (xy 202.361725 105.06106) (xy 202.337209 105.141248)
+ (xy 202.311842 105.221216) (xy 202.311309 105.225963) (xy 202.309914 105.230528) (xy 202.301439 105.313955) (xy 202.292089 105.397322)
+ (xy 202.292023 105.406659) (xy 202.292006 105.406831) (xy 202.292021 105.40699) (xy 202.292 105.41) (xy 202.292 111.487)
+ (xy 200.113266 111.487) (xy 200.113266 76.085737) (xy 200.113266 73.545737) (xy 200.064876 73.282948) (xy 199.966148 73.034649)
+ (xy 199.947838 73.000394) (xy 199.712636 72.939245) (xy 198.991881 73.66) (xy 199.712636 74.380755) (xy 199.947838 74.319606)
+ (xy 200.053601 74.074221) (xy 200.109459 73.812917) (xy 200.113266 73.545737) (xy 200.113266 76.085737) (xy 200.064876 75.822948)
+ (xy 199.966148 75.574649) (xy 199.947838 75.540394) (xy 199.712636 75.479245) (xy 199.475755 75.716126) (xy 199.475755 75.242364)
+ (xy 199.414606 75.007162) (xy 199.234024 74.929329) (xy 199.380351 74.871148) (xy 199.414606 74.852838) (xy 199.475755 74.617636)
+ (xy 198.755 73.896881) (xy 198.518119 74.133762) (xy 198.518119 73.66) (xy 197.797364 72.939245) (xy 197.562162 73.000394)
+ (xy 197.456399 73.245779) (xy 197.400541 73.507083) (xy 197.396734 73.774263) (xy 197.445124 74.037052) (xy 197.543852 74.285351)
+ (xy 197.562162 74.319606) (xy 197.797364 74.380755) (xy 198.518119 73.66) (xy 198.518119 74.133762) (xy 198.034245 74.617636)
+ (xy 198.095394 74.852838) (xy 198.275975 74.93067) (xy 198.129649 74.988852) (xy 198.095394 75.007162) (xy 198.034245 75.242364)
+ (xy 198.755 75.963119) (xy 199.475755 75.242364) (xy 199.475755 75.716126) (xy 198.991881 76.2) (xy 199.712636 76.920755)
+ (xy 199.947838 76.859606) (xy 200.053601 76.614221) (xy 200.109459 76.352917) (xy 200.113266 76.085737) (xy 200.113266 111.487)
+ (xy 199.475755 111.487) (xy 199.475755 77.157636) (xy 198.755 76.436881) (xy 198.518119 76.673762) (xy 198.518119 76.2)
+ (xy 197.797364 75.479245) (xy 197.562162 75.540394) (xy 197.456399 75.785779) (xy 197.400541 76.047083) (xy 197.396734 76.314263)
+ (xy 197.445124 76.577052) (xy 197.543852 76.825351) (xy 197.562162 76.859606) (xy 197.797364 76.920755) (xy 198.518119 76.2)
+ (xy 198.518119 76.673762) (xy 198.034245 77.157636) (xy 198.095394 77.392838) (xy 198.340779 77.498601) (xy 198.602083 77.554459)
+ (xy 198.869263 77.558266) (xy 199.132052 77.509876) (xy 199.380351 77.411148) (xy 199.414606 77.392838) (xy 199.475755 77.157636)
+ (xy 199.475755 111.487) (xy 197.860118 111.487) (xy 197.758 111.384165) (xy 197.758 106.68) (xy 197.749813 106.596512)
+ (xy 197.742505 106.512972) (xy 197.741172 106.508387) (xy 197.740707 106.503635) (xy 197.71646 106.423325) (xy 197.693065 106.342798)
+ (xy 197.690868 106.33856) (xy 197.689488 106.333988) (xy 197.650108 106.259925) (xy 197.611513 106.185468) (xy 197.608533 106.181735)
+ (xy 197.606292 106.17752) (xy 197.553271 106.11251) (xy 197.500955 106.046975) (xy 197.494401 106.040328) (xy 197.49429 106.040192)
+ (xy 197.494163 106.040087) (xy 197.492053 106.037947) (xy 195.587053 104.132947) (xy 195.522229 104.0797) (xy 195.45799 104.025797)
+ (xy 195.453805 104.023496) (xy 195.450116 104.020466) (xy 195.376197 103.980831) (xy 195.302699 103.940425) (xy 195.298148 103.938981)
+ (xy 195.29394 103.936725) (xy 195.213751 103.912209) (xy 195.133784 103.886842) (xy 195.129036 103.886309) (xy 195.124472 103.884914)
+ (xy 195.041044 103.876439) (xy 194.957678 103.867089) (xy 194.94834 103.867023) (xy 194.948169 103.867006) (xy 194.948009 103.867021)
+ (xy 194.945 103.867) (xy 192.564908 103.867) (xy 192.564908 99.070091) (xy 192.539341 98.789159) (xy 192.459695 98.518544)
+ (xy 192.329002 98.268552) (xy 192.152242 98.048707) (xy 191.936146 97.867381) (xy 191.795251 97.789923) (xy 191.919415 97.723904)
+ (xy 192.138021 97.545614) (xy 192.317834 97.328257) (xy 192.452004 97.080115) (xy 192.535421 96.810638) (xy 192.564908 96.530091)
+ (xy 192.539341 96.249159) (xy 192.459695 95.978544) (xy 192.329002 95.728552) (xy 192.152242 95.508707) (xy 191.936146 95.327381)
+ (xy 191.795251 95.249923) (xy 191.919415 95.183904) (xy 192.138021 95.005614) (xy 192.317834 94.788257) (xy 192.452004 94.540115)
+ (xy 192.535421 94.270638) (xy 192.564908 93.990091) (xy 192.539341 93.709159) (xy 192.459695 93.438544) (xy 192.329002 93.188552)
+ (xy 192.152242 92.968707) (xy 191.936146 92.787381) (xy 191.795251 92.709923) (xy 191.919415 92.643904) (xy 192.138021 92.465614)
+ (xy 192.317834 92.248257) (xy 192.452004 92.000115) (xy 192.535421 91.730638) (xy 192.564908 91.450091) (xy 192.539341 91.169159)
+ (xy 192.459695 90.898544) (xy 192.329002 90.648552) (xy 192.152242 90.428707) (xy 191.936146 90.247381) (xy 191.795251 90.169923)
+ (xy 191.919415 90.103904) (xy 192.138021 89.925614) (xy 192.317834 89.708257) (xy 192.452004 89.460115) (xy 192.535421 89.190638)
+ (xy 192.564908 88.910091) (xy 192.539341 88.629159) (xy 192.459695 88.358544) (xy 192.329002 88.108552) (xy 192.152242 87.888707)
+ (xy 191.936146 87.707381) (xy 191.795251 87.629923) (xy 191.919415 87.563904) (xy 192.138021 87.385614) (xy 192.317834 87.168257)
+ (xy 192.452004 86.920115) (xy 192.535421 86.650638) (xy 192.564908 86.370091) (xy 192.539341 86.089159) (xy 192.459695 85.818544)
+ (xy 192.329002 85.568552) (xy 192.152242 85.348707) (xy 191.936146 85.167381) (xy 191.795251 85.089923) (xy 191.919415 85.023904)
+ (xy 192.138021 84.845614) (xy 192.317834 84.628257) (xy 192.452004 84.380115) (xy 192.535421 84.110638) (xy 192.564908 83.830091)
+ (xy 192.539341 83.549159) (xy 192.459695 83.278544) (xy 192.329002 83.028552) (xy 192.152242 82.808707) (xy 191.936146 82.627381)
+ (xy 191.795251 82.549923) (xy 191.919415 82.483904) (xy 192.138021 82.305614) (xy 192.317834 82.088257) (xy 192.452004 81.840115)
+ (xy 192.535421 81.570638) (xy 192.564908 81.290091) (xy 192.539341 81.009159) (xy 192.459695 80.738544) (xy 192.329002 80.488552)
+ (xy 192.152242 80.268707) (xy 191.936146 80.087381) (xy 191.795251 80.009923) (xy 191.919415 79.943904) (xy 192.138021 79.765614)
+ (xy 192.317834 79.548257) (xy 192.452004 79.300115) (xy 192.535421 79.030638) (xy 192.564908 78.750091) (xy 192.539341 78.469159)
+ (xy 192.459695 78.198544) (xy 192.329002 77.948552) (xy 192.152242 77.728707) (xy 191.936146 77.547381) (xy 191.795251 77.469923)
+ (xy 191.919415 77.403904) (xy 192.138021 77.225614) (xy 192.317834 77.008257) (xy 192.452004 76.760115) (xy 192.535421 76.490638)
+ (xy 192.564908 76.210091) (xy 192.539341 75.929159) (xy 192.459695 75.658544) (xy 192.329002 75.408552) (xy 192.152242 75.188707)
+ (xy 191.936146 75.007381) (xy 191.806438 74.936073) (xy 191.81748 74.931276) (xy 192.051892 74.768748) (xy 192.250092 74.563612)
+ (xy 192.404464 74.32375) (xy 192.501384 74.050025) (xy 192.379501 73.8275) (xy 190.6675 73.8275) (xy 190.6675 73.8475)
+ (xy 190.3325 73.8475) (xy 190.3325 73.8275) (xy 188.620499 73.8275) (xy 188.498616 74.050025) (xy 188.595536 74.32375)
+ (xy 188.749908 74.563612) (xy 188.948108 74.768748) (xy 189.18252 74.931276) (xy 189.193511 74.936051) (xy 189.080585 74.996096)
+ (xy 188.861979 75.174386) (xy 188.682166 75.391743) (xy 188.547996 75.639885) (xy 188.464579 75.909362) (xy 188.435092 76.189909)
+ (xy 188.460659 76.470841) (xy 188.540305 76.741456) (xy 188.670998 76.991448) (xy 188.847758 77.211293) (xy 189.063854 77.392619)
+ (xy 189.204748 77.470076) (xy 189.080585 77.536096) (xy 188.861979 77.714386) (xy 188.682166 77.931743) (xy 188.547996 78.179885)
+ (xy 188.464579 78.449362) (xy 188.435092 78.729909) (xy 188.460659 79.010841) (xy 188.540305 79.281456) (xy 188.670998 79.531448)
+ (xy 188.847758 79.751293) (xy 189.063854 79.932619) (xy 189.204748 80.010076) (xy 189.080585 80.076096) (xy 188.861979 80.254386)
+ (xy 188.682166 80.471743) (xy 188.547996 80.719885) (xy 188.464579 80.989362) (xy 188.435092 81.269909) (xy 188.460659 81.550841)
+ (xy 188.540305 81.821456) (xy 188.670998 82.071448) (xy 188.847758 82.291293) (xy 189.063854 82.472619) (xy 189.204748 82.550076)
+ (xy 189.080585 82.616096) (xy 188.861979 82.794386) (xy 188.682166 83.011743) (xy 188.547996 83.259885) (xy 188.464579 83.529362)
+ (xy 188.435092 83.809909) (xy 188.460659 84.090841) (xy 188.540305 84.361456) (xy 188.670998 84.611448) (xy 188.847758 84.831293)
+ (xy 189.063854 85.012619) (xy 189.204748 85.090076) (xy 189.080585 85.156096) (xy 188.861979 85.334386) (xy 188.682166 85.551743)
+ (xy 188.547996 85.799885) (xy 188.464579 86.069362) (xy 188.435092 86.349909) (xy 188.460659 86.630841) (xy 188.540305 86.901456)
+ (xy 188.670998 87.151448) (xy 188.847758 87.371293) (xy 189.063854 87.552619) (xy 189.204748 87.630076) (xy 189.080585 87.696096)
+ (xy 188.861979 87.874386) (xy 188.682166 88.091743) (xy 188.547996 88.339885) (xy 188.464579 88.609362) (xy 188.435092 88.889909)
+ (xy 188.460659 89.170841) (xy 188.540305 89.441456) (xy 188.670998 89.691448) (xy 188.847758 89.911293) (xy 189.063854 90.092619)
+ (xy 189.204748 90.170076) (xy 189.080585 90.236096) (xy 188.861979 90.414386) (xy 188.682166 90.631743) (xy 188.547996 90.879885)
+ (xy 188.464579 91.149362) (xy 188.435092 91.429909) (xy 188.460659 91.710841) (xy 188.540305 91.981456) (xy 188.670998 92.231448)
+ (xy 188.847758 92.451293) (xy 189.063854 92.632619) (xy 189.204748 92.710076) (xy 189.080585 92.776096) (xy 188.861979 92.954386)
+ (xy 188.682166 93.171743) (xy 188.547996 93.419885) (xy 188.464579 93.689362) (xy 188.435092 93.969909) (xy 188.460659 94.250841)
+ (xy 188.540305 94.521456) (xy 188.670998 94.771448) (xy 188.847758 94.991293) (xy 189.063854 95.172619) (xy 189.204748 95.250076)
+ (xy 189.080585 95.316096) (xy 188.861979 95.494386) (xy 188.682166 95.711743) (xy 188.547996 95.959885) (xy 188.464579 96.229362)
+ (xy 188.435092 96.509909) (xy 188.460659 96.790841) (xy 188.540305 97.061456) (xy 188.670998 97.311448) (xy 188.847758 97.531293)
+ (xy 189.063854 97.712619) (xy 189.204748 97.790076) (xy 189.080585 97.856096) (xy 188.861979 98.034386) (xy 188.682166 98.251743)
+ (xy 188.547996 98.499885) (xy 188.464579 98.769362) (xy 188.435092 99.049909) (xy 188.460659 99.330841) (xy 188.540305 99.601456)
+ (xy 188.670998 99.851448) (xy 188.847758 100.071293) (xy 189.063854 100.252619) (xy 189.311053 100.388518) (xy 189.579941 100.473815)
+ (xy 189.860276 100.505259) (xy 189.880457 100.5054) (xy 191.119543 100.5054) (xy 191.400289 100.477873) (xy 191.670342 100.396339)
+ (xy 191.919415 100.263904) (xy 192.138021 100.085614) (xy 192.317834 99.868257) (xy 192.452004 99.620115) (xy 192.535421 99.350638)
+ (xy 192.564908 99.070091) (xy 192.564908 103.867) (xy 187.96 103.867) (xy 187.876516 103.875185) (xy 187.792972 103.882495)
+ (xy 187.788387 103.883827) (xy 187.783635 103.884293) (xy 187.703325 103.908539) (xy 187.622798 103.931935) (xy 187.61856 103.934131)
+ (xy 187.613988 103.935512) (xy 187.539925 103.974891) (xy 187.465468 104.013487) (xy 187.461735 104.016466) (xy 187.45752 104.018708)
+ (xy 187.39251 104.071728) (xy 187.326975 104.124045) (xy 187.320328 104.130598) (xy 187.320192 104.13071) (xy 187.320087 104.130836)
+ (xy 187.317947 104.132947) (xy 186.047947 105.402947) (xy 185.9947 105.46777) (xy 185.940797 105.53201) (xy 185.938496 105.536194)
+ (xy 185.935466 105.539884) (xy 185.895831 105.613802) (xy 185.855425 105.687301) (xy 185.853981 105.691851) (xy 185.851725 105.69606)
+ (xy 185.827209 105.776248) (xy 185.801842 105.856216) (xy 185.801309 105.860963) (xy 185.799914 105.865528) (xy 185.791439 105.948955)
+ (xy 185.782089 106.032322) (xy 185.782023 106.041659) (xy 185.782006 106.041831) (xy 185.782021 106.04199) (xy 185.782 106.045)
+ (xy 185.782 107.881513) (xy 185.774887 107.883661) (xy 185.525814 108.016096) (xy 185.307208 108.194386) (xy 185.127395 108.411743)
+ (xy 184.993225 108.659885) (xy 184.909808 108.929362) (xy 184.880321 109.209909) (xy 184.905888 109.490841) (xy 184.985534 109.761456)
+ (xy 185.116227 110.011448) (xy 185.292987 110.231293) (xy 185.509083 110.412619) (xy 185.649977 110.490076) (xy 185.525814 110.556096)
+ (xy 185.307208 110.734386) (xy 185.127395 110.951743) (xy 184.993225 111.199885) (xy 184.909808 111.469362) (xy 184.880321 111.749909)
+ (xy 184.905888 112.030841) (xy 184.985534 112.301456) (xy 185.116227 112.551448) (xy 185.292987 112.771293) (xy 185.509083 112.952619)
+ (xy 185.649977 113.030076) (xy 185.525814 113.096096) (xy 185.307208 113.274386) (xy 185.127395 113.491743) (xy 184.993225 113.739885)
+ (xy 184.909808 114.009362) (xy 184.880321 114.289909) (xy 184.905888 114.570841) (xy 184.985534 114.841456) (xy 185.116227 115.091448)
+ (xy 185.292987 115.311293) (xy 185.509083 115.492619) (xy 185.649977 115.570076) (xy 185.525814 115.636096) (xy 185.307208 115.814386)
+ (xy 185.127395 116.031743) (xy 184.993225 116.279885) (xy 184.909808 116.549362) (xy 184.880321 116.829909) (xy 184.905888 117.110841)
+ (xy 184.985534 117.381456) (xy 185.116227 117.631448) (xy 185.292987 117.851293) (xy 185.509083 118.032619) (xy 185.756282 118.168518)
+ (xy 186.02517 118.253815) (xy 186.305505 118.285259) (xy 186.325686 118.2854) (xy 187.054314 118.2854) (xy 187.33506 118.257873)
+ (xy 187.605113 118.176339) (xy 187.854186 118.043904) (xy 188.072792 117.865614) (xy 188.17009 117.748) (xy 189.23 117.748)
+ (xy 189.313483 117.739814) (xy 189.397028 117.732505) (xy 189.401612 117.731172) (xy 189.406365 117.730707) (xy 189.486674 117.70646)
+ (xy 189.567202 117.683065) (xy 189.571439 117.680868) (xy 189.576012 117.679488) (xy 189.650074 117.640108) (xy 189.724532 117.601513)
+ (xy 189.728264 117.598533) (xy 189.73248 117.596292) (xy 189.797489 117.543271) (xy 189.863025 117.490955) (xy 189.869671 117.484401)
+ (xy 189.869808 117.48429) (xy 189.869912 117.484163) (xy 189.872053 117.482053) (xy 191.749392 115.604713) (xy 191.952273 115.69335)
+ (xy 192.231532 115.754749) (xy 192.517398 115.760737) (xy 192.798982 115.711086) (xy 193.06556 115.607687) (xy 193.306978 115.454479)
+ (xy 193.514039 115.257297) (xy 193.678858 115.023652) (xy 193.795156 114.762443) (xy 193.858503 114.48362) (xy 193.863063 114.157036)
+ (xy 193.807526 113.876553) (xy 193.698567 113.612198) (xy 193.540336 113.374042) (xy 193.338861 113.171156) (xy 193.101816 113.011266)
+ (xy 192.838229 112.900465) (xy 192.55814 112.842971) (xy 192.272218 112.840975) (xy 191.991354 112.894552) (xy 191.726246 113.001663)
+ (xy 191.486991 113.158227) (xy 191.282703 113.358281) (xy 191.121163 113.594204) (xy 191.06826 113.717633) (xy 190.623876 114.162017)
+ (xy 190.659168 114.096197) (xy 190.699575 114.022699) (xy 190.701018 114.018148) (xy 190.703275 114.01394) (xy 190.72779 113.933751)
+ (xy 190.753158 113.853784) (xy 190.75369 113.849036) (xy 190.755086 113.844472) (xy 190.763565 113.761) (xy 190.772911 113.677678)
+ (xy 190.772976 113.668351) (xy 190.772995 113.668169) (xy 190.772978 113.667999) (xy 190.773 113.665) (xy 190.773 111.638744)
+ (xy 190.974039 111.447297) (xy 191.138858 111.213652) (xy 191.255156 110.952443) (xy 191.318503 110.67362) (xy 191.323063 110.347036)
+ (xy 191.267526 110.066553) (xy 191.158567 109.802198) (xy 191.000336 109.564042) (xy 190.798861 109.361156) (xy 190.561816 109.201266)
+ (xy 190.298229 109.090465) (xy 190.01814 109.032971) (xy 189.732218 109.030975) (xy 189.451354 109.084552) (xy 189.186246 109.191663)
+ (xy 188.946991 109.348227) (xy 188.742703 109.548281) (xy 188.581163 109.784204) (xy 188.468523 110.047011) (xy 188.409075 110.326692)
+ (xy 188.405083 110.612593) (xy 188.456699 110.893824) (xy 188.561956 111.159674) (xy 188.716846 111.400016) (xy 188.915469 111.605696)
+ (xy 188.957 111.63456) (xy 188.957 113.288894) (xy 188.853894 113.392) (xy 188.170062 113.392) (xy 188.087013 113.288707)
+ (xy 187.870917 113.107381) (xy 187.730022 113.029923) (xy 187.854186 112.963904) (xy 188.072792 112.785614) (xy 188.252605 112.568257)
+ (xy 188.386775 112.320115) (xy 188.470192 112.050638) (xy 188.499679 111.770091) (xy 188.474112 111.489159) (xy 188.394466 111.218544)
+ (xy 188.263773 110.968552) (xy 188.087013 110.748707) (xy 187.870917 110.567381) (xy 187.730022 110.489923) (xy 187.854186 110.423904)
+ (xy 188.072792 110.245614) (xy 188.252605 110.028257) (xy 188.386775 109.780115) (xy 188.470192 109.510638) (xy 188.499679 109.230091)
+ (xy 188.474112 108.949159) (xy 188.394466 108.678544) (xy 188.263773 108.428552) (xy 188.087013 108.208707) (xy 187.870917 108.027381)
+ (xy 187.623718 107.891482) (xy 187.598 107.883323) (xy 187.598 106.421106) (xy 188.336106 105.683) (xy 194.568894 105.683)
+ (xy 195.942 107.056106) (xy 195.942 111.385493) (xy 195.805832 111.518839) (xy 195.655538 111.738339) (xy 195.55074 111.98285)
+ (xy 195.495431 112.243061) (xy 195.491716 112.509058) (xy 195.539739 112.770711) (xy 195.637669 113.018054) (xy 195.781776 113.241664)
+ (xy 195.966571 113.433025) (xy 196.185016 113.584849) (xy 196.370469 113.665871) (xy 196.224649 113.723852) (xy 196.190394 113.742162)
+ (xy 196.129245 113.977364) (xy 196.85 114.698119) (xy 197.570755 113.977364) (xy 197.509606 113.742162) (xy 197.3289 113.664276)
+ (xy 197.464575 113.611652) (xy 197.689186 113.469109) (xy 197.863617 113.303) (xy 202.292 113.303) (xy 202.292 115.57)
+ (xy 202.300185 115.653483) (xy 202.307495 115.737028) (xy 202.308827 115.741612) (xy 202.309293 115.746365) (xy 202.333539 115.826674)
+ (xy 202.356935 115.907202) (xy 202.359131 115.911439) (xy 202.360512 115.916012) (xy 202.399891 115.990074) (xy 202.438487 116.064532)
+ (xy 202.441466 116.068264) (xy 202.443708 116.07248) (xy 202.496728 116.137489) (xy 202.549045 116.203025) (xy 202.555598 116.209671)
+ (xy 202.55571 116.209808) (xy 202.555836 116.209912) (xy 202.557947 116.212053) (xy 203.827947 117.482053) (xy 203.964884 117.594534)
+ (xy 204.12106 117.678275) (xy 204.290528 117.730086) (xy 204.466831 117.747994) (xy 204.643254 117.731317) (xy 204.755014 117.698)
+ (xy 205.905396 117.698) (xy 205.897616 117.719975) (xy 206.019499 117.9425) (xy 207.4775 117.9425) (xy 207.4775 117.9225)
+ (xy 207.8125 117.9225) (xy 207.8125 117.9425) (xy 207.8325 117.9425) (xy 207.8325 118.2775) (xy 207.8125 118.2775)
+ (xy 207.8125 118.2975) (xy 207.4775 118.2975) (xy 207.4775 118.2775) (xy 206.019499 118.2775) (xy 205.897616 118.500025)
+ (xy 205.905396 118.522) (xy 198.403854 118.522) (xy 198.308784 118.491842) (xy 198.208266 118.480567) (xy 198.208266 117.360737)
+ (xy 198.208266 114.820737) (xy 198.159876 114.557948) (xy 198.061148 114.309649) (xy 198.042838 114.275394) (xy 197.807636 114.214245)
+ (xy 197.086881 114.935) (xy 197.807636 115.655755) (xy 198.042838 115.594606) (xy 198.148601 115.349221) (xy 198.204459 115.087917)
+ (xy 198.208266 114.820737) (xy 198.208266 117.360737) (xy 198.159876 117.097948) (xy 198.061148 116.849649) (xy 198.042838 116.815394)
+ (xy 197.807636 116.754245) (xy 197.570755 116.991126) (xy 197.570755 116.517364) (xy 197.509606 116.282162) (xy 197.329024 116.204329)
+ (xy 197.475351 116.146148) (xy 197.509606 116.127838) (xy 197.570755 115.892636) (xy 196.85 115.171881) (xy 196.613119 115.408762)
+ (xy 196.613119 114.935) (xy 195.892364 114.214245) (xy 195.657162 114.275394) (xy 195.551399 114.520779) (xy 195.495541 114.782083)
+ (xy 195.491734 115.049263) (xy 195.540124 115.312052) (xy 195.638852 115.560351) (xy 195.657162 115.594606) (xy 195.892364 115.655755)
+ (xy 196.613119 114.935) (xy 196.613119 115.408762) (xy 196.129245 115.892636) (xy 196.190394 116.127838) (xy 196.370975 116.20567)
+ (xy 196.224649 116.263852) (xy 196.190394 116.282162) (xy 196.129245 116.517364) (xy 196.85 117.238119) (xy 197.570755 116.517364)
+ (xy 197.570755 116.991126) (xy 197.086881 117.475) (xy 197.807636 118.195755) (xy 198.042838 118.134606) (xy 198.148601 117.889221)
+ (xy 198.204459 117.627917) (xy 198.208266 117.360737) (xy 198.208266 118.480567) (xy 198.132678 118.472089) (xy 198.12 118.472)
+ (xy 197.56052 118.472) (xy 197.570755 118.432636) (xy 196.85 117.711881) (xy 196.613119 117.948762) (xy 196.613119 117.475)
+ (xy 195.892364 116.754245) (xy 195.657162 116.815394) (xy 195.551399 117.060779) (xy 195.495541 117.322083) (xy 195.491734 117.589263)
+ (xy 195.540124 117.852052) (xy 195.638852 118.100351) (xy 195.657162 118.134606) (xy 195.892364 118.195755) (xy 196.613119 117.475)
+ (xy 196.613119 117.948762) (xy 196.129245 118.432636) (xy 196.139479 118.472) (xy 193.04 118.472) (xy 192.956516 118.480185)
+ (xy 192.872972 118.487495) (xy 192.868386 118.488827) (xy 192.863635 118.489293) (xy 192.783339 118.513535) (xy 192.702797 118.536935)
+ (xy 192.698558 118.539132) (xy 192.693988 118.540512) (xy 192.619944 118.579882) (xy 192.545468 118.618487) (xy 192.541735 118.621466)
+ (xy 192.53752 118.623708) (xy 192.472504 118.676733) (xy 192.406974 118.729046) (xy 192.400328 118.735598) (xy 192.400192 118.73571)
+ (xy 192.400087 118.735836) (xy 192.397947 118.737947) (xy 190.123894 121.012) (xy 189.23 121.012) (xy 189.053635 121.029293)
+ (xy 188.945303 121.062) (xy 188.429603 121.062) (xy 188.437384 121.040025) (xy 188.437384 120.259975) (xy 188.340464 119.98625)
+ (xy 188.186092 119.746388) (xy 187.987892 119.541252) (xy 187.75348 119.378724) (xy 187.491865 119.265051) (xy 187.2131 119.2046)
+ (xy 186.8575 119.2046) (xy 186.8575 120.4825) (xy 188.315501 120.4825) (xy 188.437384 120.259975) (xy 188.437384 121.040025)
+ (xy 188.315501 120.8175) (xy 186.8575 120.8175) (xy 186.8575 120.8375) (xy 186.5225 120.8375) (xy 186.5225 120.8175)
+ (xy 186.5225 120.4825) (xy 186.5225 119.2046) (xy 186.1669 119.2046) (xy 185.888135 119.265051) (xy 185.62652 119.378724)
+ (xy 185.392108 119.541252) (xy 185.193908 119.746388) (xy 185.039536 119.98625) (xy 184.942616 120.259975) (xy 185.064499 120.4825)
+ (xy 186.5225 120.4825) (xy 186.5225 120.8175) (xy 185.064499 120.8175) (xy 184.942616 121.040025) (xy 184.946163 121.050043)
+ (xy 184.888784 121.031842) (xy 184.712678 121.012089) (xy 184.7 121.012) (xy 182.621106 121.012) (xy 181.617053 120.007947)
+ (xy 181.552229 119.9547) (xy 181.48799 119.900797) (xy 181.483805 119.898496) (xy 181.480116 119.895466) (xy 181.406197 119.855831)
+ (xy 181.332699 119.815425) (xy 181.328148 119.813981) (xy 181.32394 119.811725) (xy 181.243751 119.787209) (xy 181.163784 119.761842)
+ (xy 181.159036 119.761309) (xy 181.154472 119.759914) (xy 181.071044 119.751439) (xy 180.987678 119.742089) (xy 180.97834 119.742023)
+ (xy 180.978169 119.742006) (xy 180.978009 119.742021) (xy 180.975 119.742) (xy 180.871 119.742) (xy 180.871 110.072207)
+ (xy 180.871 109.552) (xy 180.871 108.888) (xy 180.871 108.367793) (xy 180.845713 108.240669) (xy 180.796112 108.12092)
+ (xy 180.724102 108.01315) (xy 180.632451 107.921498) (xy 180.52468 107.849488) (xy 180.404932 107.799887) (xy 180.277808 107.7746)
+ (xy 180.148193 107.7746) (xy 179.402 107.7746) (xy 179.2375 107.9391) (xy 179.2375 109.0525) (xy 180.7065 109.0525)
+ (xy 180.871 108.888) (xy 180.871 109.552) (xy 180.7065 109.3875) (xy 179.2375 109.3875) (xy 179.2375 110.3146)
+ (xy 179.2375 110.5009) (xy 179.2375 111.5925) (xy 180.695501 111.5925) (xy 180.817384 111.369975) (xy 180.720464 111.09625)
+ (xy 180.566092 110.856388) (xy 180.367892 110.651252) (xy 180.363665 110.648321) (xy 180.404932 110.640113) (xy 180.52468 110.590512)
+ (xy 180.632451 110.518502) (xy 180.724102 110.42685) (xy 180.796112 110.31908) (xy 180.845713 110.199331) (xy 180.871 110.072207)
+ (xy 180.871 119.742) (xy 180.859901 119.742) (xy 180.845713 119.670669) (xy 180.817384 119.602275) (xy 180.817384 117.230025)
+ (xy 180.817384 116.449975) (xy 180.720464 116.17625) (xy 180.566092 115.936388) (xy 180.367892 115.731252) (xy 180.13532 115.57)
+ (xy 180.367892 115.408748) (xy 180.566092 115.203612) (xy 180.720464 114.96375) (xy 180.817384 114.690025) (xy 180.817384 113.909975)
+ (xy 180.720464 113.63625) (xy 180.566092 113.396388) (xy 180.367892 113.191252) (xy 180.13532 113.03) (xy 180.367892 112.868748)
+ (xy 180.566092 112.663612) (xy 180.720464 112.42375) (xy 180.817384 112.150025) (xy 180.695501 111.9275) (xy 179.2375 111.9275)
+ (xy 179.2375 112.8546) (xy 179.2375 113.2054) (xy 179.2375 114.1325) (xy 180.695501 114.1325) (xy 180.817384 113.909975)
+ (xy 180.817384 114.690025) (xy 180.695501 114.4675) (xy 179.2375 114.4675) (xy 179.2375 115.3946) (xy 179.2375 115.7454)
+ (xy 179.2375 116.6725) (xy 180.695501 116.6725) (xy 180.817384 116.449975) (xy 180.817384 117.230025) (xy 180.695501 117.0075)
+ (xy 179.2375 117.0075) (xy 179.2375 118.2854) (xy 179.5931 118.2854) (xy 179.871865 118.224949) (xy 180.13348 118.111276)
+ (xy 180.367892 117.948748) (xy 180.566092 117.743612) (xy 180.720464 117.50375) (xy 180.817384 117.230025) (xy 180.817384 119.602275)
+ (xy 180.796112 119.55092) (xy 180.724102 119.44315) (xy 180.632451 119.351498) (xy 180.52468 119.279488) (xy 180.404932 119.229887)
+ (xy 180.277808 119.2046) (xy 180.148193 119.2046) (xy 178.9025 119.2046) (xy 178.9025 118.2854) (xy 178.9025 117.0075)
+ (xy 178.9025 116.6725) (xy 178.9025 115.7454) (xy 178.9025 115.3946) (xy 178.9025 114.4675) (xy 178.9025 114.1325)
+ (xy 178.9025 113.2054) (xy 178.9025 112.8546) (xy 178.9025 111.9275) (xy 178.9025 111.5925) (xy 178.9025 110.5009)
+ (xy 178.9025 110.3146) (xy 178.9025 109.3875) (xy 178.9025 109.0525) (xy 178.9025 107.9391) (xy 178.738 107.7746)
+ (xy 177.991807 107.7746) (xy 177.862192 107.7746) (xy 177.735068 107.799887) (xy 177.61532 107.849488) (xy 177.507549 107.921498)
+ (xy 177.415898 108.01315) (xy 177.343888 108.12092) (xy 177.324908 108.166742) (xy 177.324908 99.070091) (xy 177.299341 98.789159)
+ (xy 177.219695 98.518544) (xy 177.089002 98.268552) (xy 176.912242 98.048707) (xy 176.696146 97.867381) (xy 176.555251 97.789923)
+ (xy 176.679415 97.723904) (xy 176.898021 97.545614) (xy 177.077834 97.328257) (xy 177.212004 97.080115) (xy 177.295421 96.810638)
+ (xy 177.324908 96.530091) (xy 177.299341 96.249159) (xy 177.219695 95.978544) (xy 177.089002 95.728552) (xy 176.912242 95.508707)
+ (xy 176.696146 95.327381) (xy 176.555251 95.249923) (xy 176.679415 95.183904) (xy 176.898021 95.005614) (xy 177.077834 94.788257)
+ (xy 177.212004 94.540115) (xy 177.295421 94.270638) (xy 177.324908 93.990091) (xy 177.299341 93.709159) (xy 177.219695 93.438544)
+ (xy 177.089002 93.188552) (xy 176.912242 92.968707) (xy 176.696146 92.787381) (xy 176.555251 92.709923) (xy 176.679415 92.643904)
+ (xy 176.898021 92.465614) (xy 177.077834 92.248257) (xy 177.212004 92.000115) (xy 177.295421 91.730638) (xy 177.324908 91.450091)
+ (xy 177.299341 91.169159) (xy 177.219695 90.898544) (xy 177.089002 90.648552) (xy 176.912242 90.428707) (xy 176.696146 90.247381)
+ (xy 176.555251 90.169923) (xy 176.679415 90.103904) (xy 176.898021 89.925614) (xy 177.077834 89.708257) (xy 177.212004 89.460115)
+ (xy 177.295421 89.190638) (xy 177.324908 88.910091) (xy 177.299341 88.629159) (xy 177.219695 88.358544) (xy 177.089002 88.108552)
+ (xy 176.912242 87.888707) (xy 176.696146 87.707381) (xy 176.555251 87.629923) (xy 176.679415 87.563904) (xy 176.898021 87.385614)
+ (xy 177.077834 87.168257) (xy 177.212004 86.920115) (xy 177.295421 86.650638) (xy 177.324908 86.370091) (xy 177.299341 86.089159)
+ (xy 177.219695 85.818544) (xy 177.089002 85.568552) (xy 176.912242 85.348707) (xy 176.696146 85.167381) (xy 176.555251 85.089923)
+ (xy 176.679415 85.023904) (xy 176.898021 84.845614) (xy 177.077834 84.628257) (xy 177.212004 84.380115) (xy 177.295421 84.110638)
+ (xy 177.324908 83.830091) (xy 177.299341 83.549159) (xy 177.219695 83.278544) (xy 177.089002 83.028552) (xy 176.912242 82.808707)
+ (xy 176.696146 82.627381) (xy 176.555251 82.549923) (xy 176.679415 82.483904) (xy 176.898021 82.305614) (xy 177.077834 82.088257)
+ (xy 177.212004 81.840115) (xy 177.295421 81.570638) (xy 177.324908 81.290091) (xy 177.299341 81.009159) (xy 177.219695 80.738544)
+ (xy 177.089002 80.488552) (xy 176.912242 80.268707) (xy 176.696146 80.087381) (xy 176.566438 80.016073) (xy 176.57748 80.011276)
+ (xy 176.811892 79.848748) (xy 177.010092 79.643612) (xy 177.164464 79.40375) (xy 177.261384 79.130025) (xy 177.139501 78.9075)
+ (xy 175.4275 78.9075) (xy 175.4275 78.9275) (xy 175.0925 78.9275) (xy 175.0925 78.9075) (xy 173.380499 78.9075)
+ (xy 173.258616 79.130025) (xy 173.355536 79.40375) (xy 173.509908 79.643612) (xy 173.708108 79.848748) (xy 173.94252 80.011276)
+ (xy 173.953511 80.016051) (xy 173.840585 80.076096) (xy 173.621979 80.254386) (xy 173.442166 80.471743) (xy 173.307996 80.719885)
+ (xy 173.224579 80.989362) (xy 173.195092 81.269909) (xy 173.220659 81.550841) (xy 173.300305 81.821456) (xy 173.430998 82.071448)
+ (xy 173.607758 82.291293) (xy 173.823854 82.472619) (xy 173.964748 82.550076) (xy 173.840585 82.616096) (xy 173.621979 82.794386)
+ (xy 173.442166 83.011743) (xy 173.307996 83.259885) (xy 173.224579 83.529362) (xy 173.195092 83.809909) (xy 173.220659 84.090841)
+ (xy 173.300305 84.361456) (xy 173.430998 84.611448) (xy 173.607758 84.831293) (xy 173.823854 85.012619) (xy 173.964748 85.090076)
+ (xy 173.840585 85.156096) (xy 173.621979 85.334386) (xy 173.442166 85.551743) (xy 173.307996 85.799885) (xy 173.224579 86.069362)
+ (xy 173.195092 86.349909) (xy 173.220659 86.630841) (xy 173.300305 86.901456) (xy 173.430998 87.151448) (xy 173.607758 87.371293)
+ (xy 173.823854 87.552619) (xy 173.964748 87.630076) (xy 173.840585 87.696096) (xy 173.621979 87.874386) (xy 173.442166 88.091743)
+ (xy 173.307996 88.339885) (xy 173.224579 88.609362) (xy 173.195092 88.889909) (xy 173.220659 89.170841) (xy 173.300305 89.441456)
+ (xy 173.430998 89.691448) (xy 173.607758 89.911293) (xy 173.823854 90.092619) (xy 173.964748 90.170076) (xy 173.840585 90.236096)
+ (xy 173.621979 90.414386) (xy 173.442166 90.631743) (xy 173.307996 90.879885) (xy 173.224579 91.149362) (xy 173.195092 91.429909)
+ (xy 173.220659 91.710841) (xy 173.300305 91.981456) (xy 173.430998 92.231448) (xy 173.607758 92.451293) (xy 173.823854 92.632619)
+ (xy 173.964748 92.710076) (xy 173.840585 92.776096) (xy 173.621979 92.954386) (xy 173.442166 93.171743) (xy 173.307996 93.419885)
+ (xy 173.224579 93.689362) (xy 173.195092 93.969909) (xy 173.220659 94.250841) (xy 173.300305 94.521456) (xy 173.430998 94.771448)
+ (xy 173.607758 94.991293) (xy 173.823854 95.172619) (xy 173.964748 95.250076) (xy 173.840585 95.316096) (xy 173.621979 95.494386)
+ (xy 173.442166 95.711743) (xy 173.307996 95.959885) (xy 173.224579 96.229362) (xy 173.195092 96.509909) (xy 173.220659 96.790841)
+ (xy 173.300305 97.061456) (xy 173.430998 97.311448) (xy 173.607758 97.531293) (xy 173.823854 97.712619) (xy 173.964748 97.790076)
+ (xy 173.840585 97.856096) (xy 173.621979 98.034386) (xy 173.442166 98.251743) (xy 173.307996 98.499885) (xy 173.224579 98.769362)
+ (xy 173.195092 99.049909) (xy 173.220659 99.330841) (xy 173.300305 99.601456) (xy 173.430998 99.851448) (xy 173.607758 100.071293)
+ (xy 173.823854 100.252619) (xy 174.071053 100.388518) (xy 174.339941 100.473815) (xy 174.620276 100.505259) (xy 174.640457 100.5054)
+ (xy 175.879543 100.5054) (xy 176.160289 100.477873) (xy 176.430342 100.396339) (xy 176.679415 100.263904) (xy 176.898021 100.085614)
+ (xy 177.077834 99.868257) (xy 177.212004 99.620115) (xy 177.295421 99.350638) (xy 177.324908 99.070091) (xy 177.324908 108.166742)
+ (xy 177.294287 108.240669) (xy 177.269 108.367793) (xy 177.269 108.888) (xy 177.4335 109.0525) (xy 178.9025 109.0525)
+ (xy 178.9025 109.3875) (xy 177.4335 109.3875) (xy 177.269 109.552) (xy 177.269 110.072207) (xy 177.294287 110.199331)
+ (xy 177.343888 110.31908) (xy 177.415898 110.42685) (xy 177.507549 110.518502) (xy 177.61532 110.590512) (xy 177.735068 110.640113)
+ (xy 177.776334 110.648321) (xy 177.772108 110.651252) (xy 177.573908 110.856388) (xy 177.419536 111.09625) (xy 177.322616 111.369975)
+ (xy 177.444499 111.5925) (xy 178.9025 111.5925) (xy 178.9025 111.9275) (xy 177.444499 111.9275) (xy 177.322616 112.150025)
+ (xy 177.419536 112.42375) (xy 177.573908 112.663612) (xy 177.772108 112.868748) (xy 178.004679 113.03) (xy 177.772108 113.191252)
+ (xy 177.573908 113.396388) (xy 177.419536 113.63625) (xy 177.322616 113.909975) (xy 177.444499 114.1325) (xy 178.9025 114.1325)
+ (xy 178.9025 114.4675) (xy 177.444499 114.4675) (xy 177.322616 114.690025) (xy 177.419536 114.96375) (xy 177.573908 115.203612)
+ (xy 177.772108 115.408748) (xy 178.004679 115.57) (xy 177.772108 115.731252) (xy 177.573908 115.936388) (xy 177.419536 116.17625)
+ (xy 177.322616 116.449975) (xy 177.444499 116.6725) (xy 178.9025 116.6725) (xy 178.9025 117.0075) (xy 177.444499 117.0075)
+ (xy 177.322616 117.230025) (xy 177.419536 117.50375) (xy 177.573908 117.743612) (xy 177.772108 117.948748) (xy 178.00652 118.111276)
+ (xy 178.268135 118.224949) (xy 178.5469 118.2854) (xy 178.9025 118.2854) (xy 178.9025 119.2046) (xy 177.862193 119.2046)
+ (xy 177.735069 119.229887) (xy 177.61532 119.279488) (xy 177.50755 119.351498) (xy 177.415898 119.443149) (xy 177.343888 119.55092)
+ (xy 177.294287 119.670668) (xy 177.280097 119.742) (xy 170.838083 119.742) (xy 170.838083 96.33095) (xy 170.764643 95.96005)
+ (xy 170.62056 95.610479) (xy 170.411322 95.295551) (xy 170.1449 95.027262) (xy 169.831441 94.815831) (xy 169.482884 94.669312)
+ (xy 169.112506 94.593284) (xy 168.734415 94.590644) (xy 168.363012 94.661493) (xy 168.012443 94.803132) (xy 167.696062 95.010166)
+ (xy 167.42592 95.274709) (xy 167.212306 95.586685) (xy 167.063356 95.93421) (xy 166.984745 96.304048) (xy 166.979465 96.682112)
+ (xy 167.04772 97.054) (xy 167.186908 97.405549) (xy 167.391728 97.723368) (xy 167.654379 97.99535) (xy 167.964855 98.211137)
+ (xy 168.311332 98.362509) (xy 168.680613 98.443701) (xy 169.05863 98.451619) (xy 169.430986 98.385963) (xy 169.783498 98.249232)
+ (xy 170.102739 98.046636) (xy 170.376548 97.785891) (xy 170.594498 97.476928) (xy 170.748285 97.131516) (xy 170.832053 96.762812)
+ (xy 170.838083 96.33095) (xy 170.838083 119.742) (xy 166.746106 119.742) (xy 159.535061 112.530955) (xy 159.535061 102.095762)
+ (xy 159.480971 101.822589) (xy 159.374852 101.565125) (xy 159.220746 101.333176) (xy 159.024522 101.135577) (xy 158.793654 100.979855)
+ (xy 158.536937 100.871941) (xy 158.264149 100.815946) (xy 157.985679 100.814001) (xy 157.97932 100.815214) (xy 157.63249 100.468384)
+ (xy 157.63249 68.468261) (xy 157.630061 68.454647) (xy 157.630061 58.280762) (xy 157.575971 58.007589) (xy 157.469852 57.750125)
+ (xy 157.315746 57.518176) (xy 157.119522 57.320577) (xy 156.888654 57.164855) (xy 156.631937 57.056941) (xy 156.359149 57.000946)
+ (xy 156.080679 56.999001) (xy 155.807135 57.051183) (xy 155.548936 57.155502) (xy 155.315917 57.307985) (xy 155.116953 57.502825)
+ (xy 154.959623 57.7326) (xy 154.84992 57.988557) (xy 154.792021 58.260948) (xy 154.788133 58.539397) (xy 154.838404 58.813299)
+ (xy 154.940918 59.07222) (xy 155.091771 59.306298) (xy 155.285217 59.506617) (xy 155.302 59.518281) (xy 155.302 61.218894)
+ (xy 151.757947 64.762947) (xy 151.7047 64.82777) (xy 151.650797 64.89201) (xy 151.648496 64.896194) (xy 151.645466 64.899884)
+ (xy 151.605831 64.973802) (xy 151.565425 65.047301) (xy 151.563981 65.051851) (xy 151.561725 65.05606) (xy 151.537209 65.136248)
+ (xy 151.511842 65.216216) (xy 151.511309 65.220963) (xy 151.509914 65.225528) (xy 151.501439 65.308955) (xy 151.492089 65.392322)
+ (xy 151.492023 65.401659) (xy 151.492006 65.401831) (xy 151.492021 65.40199) (xy 151.492 65.405) (xy 151.492 66.387894)
+ (xy 149.867053 64.762947) (xy 149.802229 64.7097) (xy 149.73799 64.655797) (xy 149.733805 64.653496) (xy 149.730116 64.650466)
+ (xy 149.656197 64.610831) (xy 149.582699 64.570425) (xy 149.578148 64.568981) (xy 149.57394 64.566725) (xy 149.493751 64.542209)
+ (xy 149.413784 64.516842) (xy 149.409036 64.516309) (xy 149.404472 64.514914) (xy 149.321044 64.506439) (xy 149.237678 64.497089)
+ (xy 149.22834 64.497023) (xy 149.228169 64.497006) (xy 149.228009 64.497021) (xy 149.225 64.497) (xy 147.696106 64.497)
+ (xy 147.607106 64.408) (xy 148.59 64.408) (xy 148.673483 64.399814) (xy 148.757028 64.392505) (xy 148.761612 64.391172)
+ (xy 148.766365 64.390707) (xy 148.846674 64.36646) (xy 148.927202 64.343065) (xy 148.931439 64.340868) (xy 148.936012 64.339488)
+ (xy 149.010074 64.300108) (xy 149.084532 64.261513) (xy 149.088264 64.258533) (xy 149.09248 64.256292) (xy 149.157489 64.203271)
+ (xy 149.223025 64.150955) (xy 149.229671 64.144401) (xy 149.229808 64.14429) (xy 149.229912 64.144163) (xy 149.232053 64.142053)
+ (xy 150.502053 62.872053) (xy 150.555299 62.807229) (xy 150.609203 62.74299) (xy 150.611503 62.738805) (xy 150.614534 62.735116)
+ (xy 150.654168 62.661197) (xy 150.694575 62.587699) (xy 150.696018 62.583148) (xy 150.698275 62.57894) (xy 150.72279 62.498751)
+ (xy 150.748158 62.418784) (xy 150.74869 62.414036) (xy 150.750086 62.409472) (xy 150.75856 62.326044) (xy 150.767911 62.242678)
+ (xy 150.767976 62.23334) (xy 150.767994 62.233169) (xy 150.767978 62.233009) (xy 150.768 62.23) (xy 150.768 59.69)
+ (xy 150.759818 59.606562) (xy 150.752506 59.522972) (xy 150.751172 59.518381) (xy 150.750707 59.513635) (xy 150.726472 59.433367)
+ (xy 150.703065 59.352798) (xy 150.700868 59.34856) (xy 150.699488 59.343988) (xy 150.660108 59.269925) (xy 150.621513 59.195468)
+ (xy 150.618533 59.191735) (xy 150.616292 59.18752) (xy 150.563271 59.12251) (xy 150.510955 59.056975) (xy 150.504401 59.050328)
+ (xy 150.50429 59.050192) (xy 150.504163 59.050087) (xy 150.502053 59.047947) (xy 150.133 58.678894) (xy 150.133 55.706268)
+ (xy 150.305134 55.542347) (xy 150.465657 55.314791) (xy 150.578924 55.06039) (xy 150.64062 54.788834) (xy 150.645061 54.470762)
+ (xy 150.590971 54.197589) (xy 150.484852 53.940125) (xy 150.330746 53.708176) (xy 150.134522 53.510577) (xy 150.133 53.50955)
+ (xy 150.133 50.165) (xy 150.124814 50.081516) (xy 150.117505 49.997972) (xy 150.116172 49.993386) (xy 150.115707 49.988635)
+ (xy 150.091464 49.908339) (xy 150.068065 49.827797) (xy 150.065867 49.823558) (xy 150.064488 49.818988) (xy 150.025117 49.744944)
+ (xy 149.986513 49.670468) (xy 149.983533 49.666735) (xy 149.981292 49.66252) (xy 149.928266 49.597504) (xy 149.875954 49.531974)
+ (xy 149.869401 49.525328) (xy 149.86929 49.525192) (xy 149.869163 49.525087) (xy 149.867053 49.522947) (xy 149.486053 49.141947)
+ (xy 149.421229 49.0887) (xy 149.35699 49.034797) (xy 149.352805 49.032496) (xy 149.349116 49.029466) (xy 149.275197 48.989831)
+ (xy 149.201699 48.949425) (xy 149.197148 48.947981) (xy 149.19294 48.945725) (xy 149.143731 48.93068) (xy 149.138299 48.922504)
+ (xy 148.95085 48.733741) (xy 148.730306 48.584983) (xy 148.485069 48.481894) (xy 148.224479 48.428403) (xy 147.958462 48.426546)
+ (xy 147.697151 48.476394) (xy 147.450498 48.576048) (xy 147.227899 48.721712) (xy 147.070344 48.876) (xy 146.552118 48.876)
+ (xy 146.41085 48.733741) (xy 146.190306 48.584983) (xy 145.945069 48.481894) (xy 145.684479 48.428403) (xy 145.418462 48.426546)
+ (xy 145.157151 48.476394) (xy 144.910498 48.576048) (xy 144.687899 48.721712) (xy 144.497832 48.907839) (xy 144.347538 49.127339)
+ (xy 144.27162 49.304466) (xy 144.205514 49.14408) (xy 144.058299 48.922504) (xy 143.87085 48.733741) (xy 143.650306 48.584983)
+ (xy 143.405069 48.481894) (xy 143.144479 48.428403) (xy 142.878462 48.426546) (xy 142.617151 48.476394) (xy 142.370498 48.576048)
+ (xy 142.147899 48.721712) (xy 141.990344 48.876) (xy 140.462 48.876) (xy 140.378516 48.884185) (xy 140.294972 48.891495)
+ (xy 140.290387 48.892827) (xy 140.285635 48.893293) (xy 140.205325 48.917539) (xy 140.124798 48.940935) (xy 140.12056 48.943131)
+ (xy 140.115988 48.944512) (xy 140.041925 48.983891) (xy 139.967468 49.022487) (xy 139.963735 49.025466) (xy 139.95952 49.027708)
+ (xy 139.894504 49.080733) (xy 139.828974 49.133046) (xy 139.822328 49.139598) (xy 139.822192 49.13971) (xy 139.822087 49.139836)
+ (xy 139.819947 49.141947) (xy 138.422947 50.538947) (xy 138.3697 50.60377) (xy 138.315797 50.66801) (xy 138.313496 50.672194)
+ (xy 138.310466 50.675884) (xy 138.270831 50.749802) (xy 138.230425 50.823301) (xy 138.228981 50.827851) (xy 138.226725 50.83206)
+ (xy 138.202209 50.912248) (xy 138.176842 50.992216) (xy 138.176309 50.996963) (xy 138.174914 51.001528) (xy 138.166439 51.084955)
+ (xy 138.157089 51.168322) (xy 138.157023 51.177659) (xy 138.157006 51.177831) (xy 138.157021 51.17799) (xy 138.157 51.181)
+ (xy 138.157 53.511613) (xy 137.971953 53.692825) (xy 137.814623 53.9226) (xy 137.70492 54.178557) (xy 137.647021 54.450948)
+ (xy 137.643133 54.729397) (xy 137.64598 54.744913) (xy 136.787894 55.603) (xy 136.206193 55.603) (xy 136.079069 55.628287)
+ (xy 135.978266 55.67004) (xy 135.978266 49.415737) (xy 135.929876 49.152948) (xy 135.831148 48.904649) (xy 135.812838 48.870394)
+ (xy 135.577636 48.809245) (xy 135.340755 49.046126) (xy 135.340755 48.572364) (xy 135.279606 48.337162) (xy 135.034221 48.231399)
+ (xy 134.772917 48.175541) (xy 134.505737 48.171734) (xy 134.242948 48.220124) (xy 133.994649 48.318852) (xy 133.960394 48.337162)
+ (xy 133.899245 48.572364) (xy 134.62 49.293119) (xy 135.340755 48.572364) (xy 135.340755 49.046126) (xy 134.856881 49.53)
+ (xy 135.577636 50.250755) (xy 135.812838 50.189606) (xy 135.918601 49.944221) (xy 135.974459 49.682917) (xy 135.978266 49.415737)
+ (xy 135.978266 55.67004) (xy 135.95932 55.677888) (xy 135.85155 55.749898) (xy 135.759898 55.841549) (xy 135.687888 55.94932)
+ (xy 135.638287 56.069068) (xy 135.613 56.196192) (xy 135.613 56.325807) (xy 135.613 56.777894) (xy 135.340755 57.050139)
+ (xy 135.340755 50.487636) (xy 134.62 49.766881) (xy 134.383119 50.003762) (xy 134.383119 49.53) (xy 133.662364 48.809245)
+ (xy 133.427162 48.870394) (xy 133.349329 49.050975) (xy 133.291148 48.904649) (xy 133.272838 48.870394) (xy 133.037636 48.809245)
+ (xy 132.800755 49.046126) (xy 132.800755 48.572364) (xy 132.739606 48.337162) (xy 132.494221 48.231399) (xy 132.232917 48.175541)
+ (xy 131.965737 48.171734) (xy 131.702948 48.220124) (xy 131.454649 48.318852) (xy 131.420394 48.337162) (xy 131.359245 48.572364)
+ (xy 132.08 49.293119) (xy 132.800755 48.572364) (xy 132.800755 49.046126) (xy 132.316881 49.53) (xy 133.037636 50.250755)
+ (xy 133.272838 50.189606) (xy 133.35067 50.009024) (xy 133.408852 50.155351) (xy 133.427162 50.189606) (xy 133.662364 50.250755)
+ (xy 134.383119 49.53) (xy 134.383119 50.003762) (xy 133.899245 50.487636) (xy 133.960394 50.722838) (xy 134.205779 50.828601)
+ (xy 134.467083 50.884459) (xy 134.734263 50.888266) (xy 134.997052 50.839876) (xy 135.245351 50.741148) (xy 135.279606 50.722838)
+ (xy 135.340755 50.487636) (xy 135.340755 57.050139) (xy 133.342947 59.047947) (xy 133.2897 59.11277) (xy 133.235797 59.17701)
+ (xy 133.233496 59.181194) (xy 133.230466 59.184884) (xy 133.190831 59.258802) (xy 133.150425 59.332301) (xy 133.148981 59.336851)
+ (xy 133.146725 59.34106) (xy 133.122209 59.421248) (xy 133.096842 59.501216) (xy 133.096309 59.505963) (xy 133.094914 59.510528)
+ (xy 133.086439 59.593955) (xy 133.077089 59.677322) (xy 133.077023 59.686659) (xy 133.077006 59.686831) (xy 133.077021 59.68699)
+ (xy 133.077 59.69) (xy 133.077 60.683) (xy 133.031193 60.683) (xy 132.904069 60.708287) (xy 132.800755 60.75108)
+ (xy 132.800755 50.487636) (xy 132.08 49.766881) (xy 131.843119 50.003762) (xy 131.843119 49.53) (xy 131.122364 48.809245)
+ (xy 130.887162 48.870394) (xy 130.809585 49.050381) (xy 130.743514 48.89008) (xy 130.596299 48.668504) (xy 130.40885 48.479741)
+ (xy 130.188306 48.330983) (xy 129.943069 48.227894) (xy 129.682479 48.174403) (xy 129.467004 48.172898) (xy 128.912053 47.617947)
+ (xy 128.847229 47.5647) (xy 128.78299 47.510797) (xy 128.778805 47.508496) (xy 128.775116 47.505466) (xy 128.701197 47.465831)
+ (xy 128.627699 47.425425) (xy 128.623148 47.423981) (xy 128.61894 47.421725) (xy 128.538751 47.397209) (xy 128.458784 47.371842)
+ (xy 128.454036 47.371309) (xy 128.449472 47.369914) (xy 128.366044 47.361439) (xy 128.282678 47.352089) (xy 128.27334 47.352023)
+ (xy 128.273169 47.352006) (xy 128.273009 47.352021) (xy 128.27 47.352) (xy 125.559612 47.352) (xy 125.369522 47.160577)
+ (xy 125.138654 47.004855) (xy 124.881937 46.896941) (xy 124.609149 46.840946) (xy 124.330679 46.839001) (xy 124.057135 46.891183)
+ (xy 123.798936 46.995502) (xy 123.565917 47.147985) (xy 123.366953 47.342825) (xy 123.209623 47.5726) (xy 123.09992 47.828557)
+ (xy 123.042021 48.100948) (xy 123.038133 48.379397) (xy 123.088404 48.653299) (xy 123.190918 48.91222) (xy 123.341771 49.146298)
+ (xy 123.535217 49.346617) (xy 123.763887 49.505547) (xy 124.019073 49.617035) (xy 124.291053 49.676834) (xy 124.569468 49.682666)
+ (xy 124.843714 49.634309) (xy 125.103344 49.533605) (xy 125.33847 49.38439) (xy 125.540134 49.192347) (xy 125.557308 49.168)
+ (xy 127.893894 49.168) (xy 128.184308 49.458414) (xy 128.181716 49.644058) (xy 128.229739 49.905711) (xy 128.327669 50.153054)
+ (xy 128.471776 50.376664) (xy 128.656571 50.568025) (xy 128.875016 50.719849) (xy 129.11879 50.826351) (xy 129.378608 50.883476)
+ (xy 129.644573 50.889047) (xy 129.906555 50.842852) (xy 130.154575 50.746652) (xy 130.379186 50.604109) (xy 130.571833 50.420654)
+ (xy 130.725177 50.203274) (xy 130.811138 50.010202) (xy 130.868852 50.155351) (xy 130.887162 50.189606) (xy 131.122364 50.250755)
+ (xy 131.843119 49.53) (xy 131.843119 50.003762) (xy 131.359245 50.487636) (xy 131.420394 50.722838) (xy 131.665779 50.828601)
+ (xy 131.927083 50.884459) (xy 132.194263 50.888266) (xy 132.457052 50.839876) (xy 132.705351 50.741148) (xy 132.739606 50.722838)
+ (xy 132.800755 50.487636) (xy 132.800755 60.75108) (xy 132.78432 60.757888) (xy 132.67655 60.829898) (xy 132.584898 60.921549)
+ (xy 132.512888 61.02932) (xy 132.463287 61.149068) (xy 132.438 61.276192) (xy 132.438 61.405807) (xy 132.438 63.183807)
+ (xy 132.463287 63.310931) (xy 132.512888 63.43068) (xy 132.584898 63.53845) (xy 132.676549 63.630102) (xy 132.78432 63.702112)
+ (xy 132.904068 63.751713) (xy 133.031192 63.777) (xy 133.077 63.777) (xy 133.077 68.203894) (xy 127.627947 73.652947)
+ (xy 127.5747 73.71777) (xy 127.520797 73.78201) (xy 127.518496 73.786194) (xy 127.515466 73.789884) (xy 127.475831 73.863802)
+ (xy 127.435425 73.937301) (xy 127.433981 73.941851) (xy 127.431725 73.94606) (xy 127.407209 74.026248) (xy 127.381842 74.106216)
+ (xy 127.381309 74.110963) (xy 127.379914 74.115528) (xy 127.371439 74.198955) (xy 127.362089 74.282322) (xy 127.362023 74.291659)
+ (xy 127.362006 74.291831) (xy 127.362021 74.29199) (xy 127.362 74.295) (xy 127.362 74.466613) (xy 127.176953 74.647825)
+ (xy 127.019623 74.8776) (xy 126.90992 75.133557) (xy 126.852021 75.405948) (xy 126.848133 75.684397) (xy 126.898404 75.958299)
+ (xy 127.000918 76.21722) (xy 127.151771 76.451298) (xy 127.345217 76.651617) (xy 127.573887 76.810547) (xy 127.829073 76.922035)
+ (xy 128.101053 76.981834) (xy 128.379468 76.987666) (xy 128.653714 76.939309) (xy 128.913344 76.838605) (xy 129.14847 76.68939)
+ (xy 129.350134 76.497347) (xy 129.510657 76.269791) (xy 129.623924 76.01539) (xy 129.68562 75.743834) (xy 129.690061 75.425762)
+ (xy 129.635971 75.152589) (xy 129.529852 74.895125) (xy 129.375746 74.663176) (xy 129.281169 74.567936) (xy 134.627053 69.222053)
+ (xy 134.680299 69.157229) (xy 134.734203 69.09299) (xy 134.736503 69.088805) (xy 134.739534 69.085116) (xy 134.779168 69.011197)
+ (xy 134.819575 68.937699) (xy 134.821018 68.933148) (xy 134.823275 68.92894) (xy 134.847804 68.848709) (xy 134.873158 68.768784)
+ (xy 134.873689 68.764041) (xy 134.875087 68.759472) (xy 134.88357 68.67595) (xy 134.892911 68.592678) (xy 134.892976 68.583351)
+ (xy 134.892995 68.583169) (xy 134.892978 68.582999) (xy 134.893 68.58) (xy 134.893 63.777) (xy 134.938807 63.777)
+ (xy 135.065931 63.751713) (xy 135.18568 63.702112) (xy 135.29345 63.630102) (xy 135.385102 63.538451) (xy 135.457112 63.43068)
+ (xy 135.506713 63.310932) (xy 135.532 63.183808) (xy 135.532 63.054193) (xy 135.532 61.276193) (xy 135.506713 61.149069)
+ (xy 135.457112 61.02932) (xy 135.385102 60.92155) (xy 135.293451 60.829898) (xy 135.18568 60.757888) (xy 135.065932 60.708287)
+ (xy 134.938808 60.683) (xy 134.893 60.683) (xy 134.893 60.066106) (xy 136.262106 58.697) (xy 136.335807 58.697)
+ (xy 138.113807 58.697) (xy 138.240931 58.671713) (xy 138.36068 58.622112) (xy 138.46845 58.550102) (xy 138.560102 58.458451)
+ (xy 138.632112 58.35068) (xy 138.681713 58.230932) (xy 138.707 58.103808) (xy 138.707 58.058) (xy 143.133894 58.058)
+ (xy 144.678594 59.6027) (xy 144.656462 59.602546) (xy 144.395151 59.652394) (xy 144.148498 59.752048) (xy 143.925899 59.897712)
+ (xy 143.768344 60.052) (xy 140.164612 60.052) (xy 139.974522 59.860577) (xy 139.743654 59.704855) (xy 139.486937 59.596941)
+ (xy 139.214149 59.540946) (xy 138.935679 59.539001) (xy 138.662135 59.591183) (xy 138.403936 59.695502) (xy 138.170917 59.847985)
+ (xy 137.971953 60.042825) (xy 137.814623 60.2726) (xy 137.70492 60.528557) (xy 137.647021 60.800948) (xy 137.643133 61.079397)
+ (xy 137.693404 61.353299) (xy 137.795918 61.61222) (xy 137.946771 61.846298) (xy 138.140217 62.046617) (xy 138.368887 62.205547)
+ (xy 138.624073 62.317035) (xy 138.896053 62.376834) (xy 139.174468 62.382666) (xy 139.448714 62.334309) (xy 139.708344 62.233605)
+ (xy 139.94347 62.08439) (xy 140.145134 61.892347) (xy 140.162308 61.868) (xy 143.771007 61.868) (xy 143.896571 61.998025)
+ (xy 144.115016 62.149849) (xy 144.300203 62.230755) (xy 144.148498 62.292048) (xy 143.925899 62.437712) (xy 143.735832 62.623839)
+ (xy 143.585538 62.843339) (xy 143.48074 63.08785) (xy 143.425431 63.348061) (xy 143.421716 63.614058) (xy 143.469739 63.875711)
+ (xy 143.567669 64.123054) (xy 143.711776 64.346664) (xy 143.896571 64.538025) (xy 144.115016 64.689849) (xy 144.35879 64.796351)
+ (xy 144.618608 64.853476) (xy 144.884573 64.859047) (xy 145.146555 64.812852) (xy 145.360689 64.729795) (xy 146.677947 66.047053)
+ (xy 146.74277 66.100299) (xy 146.80701 66.154203) (xy 146.811194 66.156503) (xy 146.814884 66.159534) (xy 146.888802 66.199168)
+ (xy 146.962301 66.239575) (xy 146.966851 66.241018) (xy 146.97106 66.243275) (xy 147.051248 66.26779) (xy 147.131216 66.293158)
+ (xy 147.135963 66.29369) (xy 147.140528 66.295086) (xy 147.223999 66.303565) (xy 147.307322 66.312911) (xy 147.316648 66.312976)
+ (xy 147.316831 66.312995) (xy 147.317 66.312978) (xy 147.32 66.313) (xy 148.848894 66.313) (xy 150.981674 68.44578)
+ (xy 150.978133 68.699397) (xy 151.028404 68.973299) (xy 151.130918 69.23222) (xy 151.281771 69.466298) (xy 151.475217 69.666617)
+ (xy 151.703887 69.825547) (xy 151.959073 69.937035) (xy 152.231053 69.996834) (xy 152.509468 70.002666) (xy 152.783714 69.954309)
+ (xy 153.043344 69.853605) (xy 153.27847 69.70439) (xy 153.480134 69.512347) (xy 153.640657 69.284791) (xy 153.753924 69.03039)
+ (xy 153.81562 68.758834) (xy 153.820061 68.440762) (xy 153.765971 68.167589) (xy 153.659852 67.910125) (xy 153.505746 67.678176)
+ (xy 153.309522 67.480577) (xy 153.308 67.47955) (xy 153.308 65.781106) (xy 156.852053 62.237053) (xy 156.905299 62.172229)
+ (xy 156.959203 62.10799) (xy 156.961503 62.103805) (xy 156.964534 62.100116) (xy 157.004168 62.026197) (xy 157.044575 61.952699)
+ (xy 157.046018 61.948148) (xy 157.048275 61.94394) (xy 157.07279 61.863751) (xy 157.098158 61.783784) (xy 157.09869 61.779036)
+ (xy 157.100086 61.774472) (xy 157.108565 61.691) (xy 157.117911 61.607678) (xy 157.117976 61.598351) (xy 157.117995 61.598169)
+ (xy 157.117978 61.597999) (xy 157.118 61.595) (xy 157.118 59.516268) (xy 157.290134 59.352347) (xy 157.450657 59.124791)
+ (xy 157.563924 58.87039) (xy 157.62562 58.598834) (xy 157.630061 58.280762) (xy 157.630061 68.454647) (xy 157.583358 68.192894)
+ (xy 157.481449 67.932403) (xy 157.454836 67.882615) (xy 157.213179 67.813702) (xy 156.976298 68.050583) (xy 156.976298 67.576821)
+ (xy 156.907385 67.335164) (xy 156.65113 67.22303) (xy 156.377922 67.163043) (xy 156.098261 67.15751) (xy 155.822894 67.206642)
+ (xy 155.562403 67.308551) (xy 155.512615 67.335164) (xy 155.443702 67.576821) (xy 156.21 68.343119) (xy 156.976298 67.576821)
+ (xy 156.976298 68.050583) (xy 156.446881 68.58) (xy 157.213179 69.346298) (xy 157.454836 69.277385) (xy 157.56697 69.02113)
+ (xy 157.626957 68.747922) (xy 157.63249 68.468261) (xy 157.63249 100.468384) (xy 157.568266 100.40416) (xy 157.568266 97.040737)
+ (xy 157.568266 87.515737) (xy 157.568266 77.355737) (xy 157.519876 77.092948) (xy 157.421148 76.844649) (xy 157.402838 76.810394)
+ (xy 157.167636 76.749245) (xy 156.976298 76.940583) (xy 156.976298 69.583179) (xy 156.21 68.816881) (xy 155.973119 69.053762)
+ (xy 155.973119 68.58) (xy 155.206821 67.813702) (xy 154.965164 67.882615) (xy 154.85303 68.13887) (xy 154.793043 68.412078)
+ (xy 154.78751 68.691739) (xy 154.836642 68.967106) (xy 154.938551 69.227597) (xy 154.965164 69.277385) (xy 155.206821 69.346298)
+ (xy 155.973119 68.58) (xy 155.973119 69.053762) (xy 155.443702 69.583179) (xy 155.512615 69.824836) (xy 155.76887 69.93697)
+ (xy 156.042078 69.996957) (xy 156.321739 70.00249) (xy 156.597106 69.953358) (xy 156.857597 69.851449) (xy 156.907385 69.824836)
+ (xy 156.976298 69.583179) (xy 156.976298 76.940583) (xy 156.930755 76.986126) (xy 156.930755 76.512364) (xy 156.869606 76.277162)
+ (xy 156.624221 76.171399) (xy 156.362917 76.115541) (xy 156.095737 76.111734) (xy 155.832948 76.160124) (xy 155.584649 76.258852)
+ (xy 155.550394 76.277162) (xy 155.489245 76.512364) (xy 156.21 77.233119) (xy 156.930755 76.512364) (xy 156.930755 76.986126)
+ (xy 156.446881 77.47) (xy 157.167636 78.190755) (xy 157.402838 78.129606) (xy 157.508601 77.884221) (xy 157.564459 77.622917)
+ (xy 157.568266 77.355737) (xy 157.568266 87.515737) (xy 157.519876 87.252948) (xy 157.421148 87.004649) (xy 157.402838 86.970394)
+ (xy 157.167636 86.909245) (xy 156.930755 87.146126) (xy 156.930755 86.672364) (xy 156.930755 78.427636) (xy 156.21 77.706881)
+ (xy 155.973119 77.943762) (xy 155.973119 77.47) (xy 155.252364 76.749245) (xy 155.0265 76.807966) (xy 155.0265 76.706693)
+ (xy 155.001213 76.579569) (xy 154.951612 76.45982) (xy 154.879602 76.35205) (xy 154.787951 76.260398) (xy 154.68018 76.188388)
+ (xy 154.560432 76.138787) (xy 154.433308 76.1135) (xy 154.303693 76.1135) (xy 152.906693 76.1135) (xy 152.779569 76.138787)
+ (xy 152.65982 76.188388) (xy 152.55205 76.260398) (xy 152.460398 76.352049) (xy 152.388388 76.45982) (xy 152.346063 76.562)
+ (xy 150.324612 76.562) (xy 150.134522 76.370577) (xy 149.903654 76.214855) (xy 149.646937 76.106941) (xy 149.374149 76.050946)
+ (xy 149.095679 76.049001) (xy 148.822135 76.101183) (xy 148.6765 76.160023) (xy 148.563936 76.205502) (xy 148.330917 76.357985)
+ (xy 148.131953 76.552825) (xy 147.974623 76.7826) (xy 147.86492 77.038557) (xy 147.807021 77.310948) (xy 147.803133 77.589397)
+ (xy 147.853404 77.863299) (xy 147.955918 78.12222) (xy 148.106771 78.356298) (xy 148.300217 78.556617) (xy 148.528887 78.715547)
+ (xy 148.784073 78.827035) (xy 149.056053 78.886834) (xy 149.334468 78.892666) (xy 149.608714 78.844309) (xy 149.868344 78.743605)
+ (xy 150.10347 78.59439) (xy 150.305134 78.402347) (xy 150.322308 78.378) (xy 152.346064 78.378) (xy 152.388388 78.48018)
+ (xy 152.460398 78.58795) (xy 152.552049 78.679602) (xy 152.65982 78.751612) (xy 152.779568 78.801213) (xy 152.906692 78.8265)
+ (xy 153.036307 78.8265) (xy 154.433307 78.8265) (xy 154.560431 78.801213) (xy 154.68018 78.751612) (xy 154.78795 78.679602)
+ (xy 154.879602 78.587951) (xy 154.951612 78.48018) (xy 155.001213 78.360432) (xy 155.0265 78.233308) (xy 155.0265 78.132033)
+ (xy 155.252364 78.190755) (xy 155.973119 77.47) (xy 155.973119 77.943762) (xy 155.489245 78.427636) (xy 155.550394 78.662838)
+ (xy 155.795779 78.768601) (xy 156.057083 78.824459) (xy 156.324263 78.828266) (xy 156.587052 78.779876) (xy 156.835351 78.681148)
+ (xy 156.869606 78.662838) (xy 156.930755 78.427636) (xy 156.930755 86.672364) (xy 156.869606 86.437162) (xy 156.624221 86.331399)
+ (xy 156.362917 86.275541) (xy 156.095737 86.271734) (xy 155.832948 86.320124) (xy 155.584649 86.418852) (xy 155.550394 86.437162)
+ (xy 155.489245 86.672364) (xy 156.21 87.393119) (xy 156.930755 86.672364) (xy 156.930755 87.146126) (xy 156.446881 87.63)
+ (xy 157.167636 88.350755) (xy 157.402838 88.289606) (xy 157.508601 88.044221) (xy 157.564459 87.782917) (xy 157.568266 87.515737)
+ (xy 157.568266 97.040737) (xy 157.519876 96.777948) (xy 157.421148 96.529649) (xy 157.402838 96.495394) (xy 157.167636 96.434245)
+ (xy 156.930755 96.671126) (xy 156.930755 96.197364) (xy 156.930755 88.587636) (xy 156.21 87.866881) (xy 155.973119 88.103762)
+ (xy 155.973119 87.63) (xy 155.252364 86.909245) (xy 155.0265 86.967966) (xy 155.0265 86.866693) (xy 155.001213 86.739569)
+ (xy 154.951612 86.61982) (xy 154.879602 86.51205) (xy 154.787951 86.420398) (xy 154.68018 86.348388) (xy 154.560432 86.298787)
+ (xy 154.433308 86.2735) (xy 154.303693 86.2735) (xy 152.906693 86.2735) (xy 152.779569 86.298787) (xy 152.65982 86.348388)
+ (xy 152.55205 86.420398) (xy 152.460398 86.512049) (xy 152.388388 86.61982) (xy 152.346063 86.722) (xy 150.324612 86.722)
+ (xy 150.134522 86.530577) (xy 149.903654 86.374855) (xy 149.646937 86.266941) (xy 149.374149 86.210946) (xy 149.095679 86.209001)
+ (xy 148.822135 86.261183) (xy 148.563936 86.365502) (xy 148.330917 86.517985) (xy 148.131953 86.712825) (xy 147.974623 86.9426)
+ (xy 147.86492 87.198557) (xy 147.807021 87.470948) (xy 147.803133 87.749397) (xy 147.853404 88.023299) (xy 147.955918 88.28222)
+ (xy 148.106771 88.516298) (xy 148.300217 88.716617) (xy 148.528887 88.875547) (xy 148.581348 88.898466) (xy 148.563936 88.905502)
+ (xy 148.330917 89.057985) (xy 148.131953 89.252825) (xy 148.12567 89.262) (xy 147.061106 89.262) (xy 145.688 87.888894)
+ (xy 145.688 81.565418) (xy 145.801571 81.683025) (xy 146.020016 81.834849) (xy 146.26379 81.941351) (xy 146.523608 81.998476)
+ (xy 146.789573 82.004047) (xy 147.051555 81.957852) (xy 147.299575 81.861652) (xy 147.524186 81.719109) (xy 147.698617 81.553)
+ (xy 148.213894 81.553) (xy 148.317 81.656106) (xy 148.317 82.721613) (xy 148.131953 82.902825) (xy 147.974623 83.1326)
+ (xy 147.86492 83.388557) (xy 147.807021 83.660948) (xy 147.803133 83.939397) (xy 147.853404 84.213299) (xy 147.955918 84.47222)
+ (xy 148.106771 84.706298) (xy 148.300217 84.906617) (xy 148.528887 85.065547) (xy 148.784073 85.177035) (xy 149.056053 85.236834)
+ (xy 149.334468 85.242666) (xy 149.608714 85.194309) (xy 149.868344 85.093605) (xy 150.10347 84.94439) (xy 150.305134 84.752347)
+ (xy 150.465657 84.524791) (xy 150.578924 84.27039) (xy 150.64062 83.998834) (xy 150.645061 83.680762) (xy 150.590971 83.407589)
+ (xy 150.484852 83.150125) (xy 150.330746 82.918176) (xy 150.134522 82.720577) (xy 150.133 82.71955) (xy 150.133 81.28)
+ (xy 150.124818 81.196562) (xy 150.117506 81.112972) (xy 150.116172 81.108381) (xy 150.115707 81.103635) (xy 150.091472 81.023367)
+ (xy 150.068065 80.942798) (xy 150.065868 80.93856) (xy 150.064488 80.933988) (xy 150.025108 80.859925) (xy 149.986513 80.785468)
+ (xy 149.983533 80.781735) (xy 149.981292 80.77752) (xy 149.928271 80.71251) (xy 149.875955 80.646975) (xy 149.869401 80.640328)
+ (xy 149.86929 80.640192) (xy 149.869163 80.640087) (xy 149.867053 80.637947) (xy 149.232053 80.002947) (xy 149.167229 79.9497)
+ (xy 149.10299 79.895797) (xy 149.098805 79.893496) (xy 149.095116 79.890466) (xy 149.021197 79.850831) (xy 148.947699 79.810425)
+ (xy 148.943148 79.808981) (xy 148.93894 79.806725) (xy 148.858751 79.782209) (xy 148.778784 79.756842) (xy 148.774036 79.756309)
+ (xy 148.769472 79.754914) (xy 148.686044 79.746439) (xy 148.602678 79.737089) (xy 148.59334 79.737023) (xy 148.593169 79.737006)
+ (xy 148.593009 79.737021) (xy 148.59 79.737) (xy 147.695118 79.737) (xy 147.55385 79.594741) (xy 147.333306 79.445983)
+ (xy 147.088069 79.342894) (xy 146.827479 79.289403) (xy 146.561462 79.287546) (xy 146.300151 79.337394) (xy 146.053498 79.437048)
+ (xy 145.830899 79.582712) (xy 145.688 79.722648) (xy 145.688 75.941106) (xy 147.962053 73.667053) (xy 148.015299 73.602229)
+ (xy 148.069203 73.53799) (xy 148.071503 73.533805) (xy 148.074534 73.530116) (xy 148.114178 73.456179) (xy 148.154575 73.382699)
+ (xy 148.156017 73.37815) (xy 148.158275 73.373941) (xy 148.182799 73.293724) (xy 148.208158 73.213784) (xy 148.20869 73.209038)
+ (xy 148.210086 73.204473) (xy 148.218561 73.121035) (xy 148.227911 73.037678) (xy 148.227976 73.028341) (xy 148.227994 73.02817)
+ (xy 148.227978 73.028009) (xy 148.228 73.025) (xy 148.228 71.12) (xy 148.219814 71.036516) (xy 148.212505 70.952972)
+ (xy 148.211172 70.948386) (xy 148.210707 70.943635) (xy 148.186464 70.863339) (xy 148.163065 70.782797) (xy 148.160867 70.778558)
+ (xy 148.159488 70.773988) (xy 148.120117 70.699944) (xy 148.081513 70.625468) (xy 148.078533 70.621735) (xy 148.076292 70.61752)
+ (xy 148.023266 70.552504) (xy 147.970954 70.486974) (xy 147.964401 70.480328) (xy 147.96429 70.480192) (xy 147.964163 70.480087)
+ (xy 147.962053 70.477947) (xy 147.420606 69.9365) (xy 147.487502 69.9365) (xy 147.487502 69.772002) (xy 147.652 69.9365)
+ (xy 148.083307 69.9365) (xy 148.210431 69.911213) (xy 148.33018 69.861612) (xy 148.43795 69.789602) (xy 148.529602 69.697951)
+ (xy 148.601612 69.59018) (xy 148.651213 69.470432) (xy 148.6765 69.343308) (xy 148.6765 69.213693) (xy 148.6765 68.912)
+ (xy 148.6765 68.248) (xy 148.6765 67.946307) (xy 148.6765 67.816692) (xy 148.651213 67.689568) (xy 148.601612 67.56982)
+ (xy 148.529602 67.462049) (xy 148.43795 67.370398) (xy 148.33018 67.298388) (xy 148.210431 67.248787) (xy 148.083307 67.2235)
+ (xy 147.652 67.2235) (xy 147.4875 67.388) (xy 147.4875 68.4125) (xy 148.512 68.4125) (xy 148.6765 68.248)
+ (xy 148.6765 68.912) (xy 148.512 68.7475) (xy 147.4875 68.7475) (xy 147.4875 68.7675) (xy 147.1525 68.7675)
+ (xy 147.1525 68.7475) (xy 147.1325 68.7475) (xy 147.1325 68.4125) (xy 147.1525 68.4125) (xy 147.1525 67.388)
+ (xy 146.988 67.2235) (xy 146.556693 67.2235) (xy 146.429569 67.248787) (xy 146.30982 67.298388) (xy 146.20205 67.370398)
+ (xy 146.110398 67.462049) (xy 146.038388 67.56982) (xy 145.988787 67.689568) (xy 145.9635 67.816692) (xy 145.9635 67.909956)
+ (xy 145.836299 67.718504) (xy 145.64885 67.529741) (xy 145.428306 67.380983) (xy 145.183069 67.277894) (xy 144.922479 67.224403)
+ (xy 144.656462 67.222546) (xy 144.395151 67.272394) (xy 144.148498 67.372048) (xy 143.925899 67.517712) (xy 143.735832 67.703839)
+ (xy 143.585538 67.923339) (xy 143.48074 68.16785) (xy 143.425431 68.428061) (xy 143.421716 68.694058) (xy 143.469739 68.955711)
+ (xy 143.567669 69.203054) (xy 143.711776 69.426664) (xy 143.896571 69.618025) (xy 144.115016 69.769849) (xy 144.300203 69.850755)
+ (xy 144.148498 69.912048) (xy 143.925899 70.057712) (xy 143.768344 70.212) (xy 140.164612 70.212) (xy 139.974522 70.020577)
+ (xy 139.743654 69.864855) (xy 139.486937 69.756941) (xy 139.214149 69.700946) (xy 138.935679 69.699001) (xy 138.662135 69.751183)
+ (xy 138.403936 69.855502) (xy 138.170917 70.007985) (xy 137.971953 70.202825) (xy 137.814623 70.4326) (xy 137.70492 70.688557)
+ (xy 137.647021 70.960948) (xy 137.643133 71.239397) (xy 137.693404 71.513299) (xy 137.795918 71.77222) (xy 137.946771 72.006298)
+ (xy 138.140217 72.206617) (xy 138.368887 72.365547) (xy 138.624073 72.477035) (xy 138.896053 72.536834) (xy 139.174468 72.542666)
+ (xy 139.199199 72.538305) (xy 140.697 74.036106) (xy 140.697 77.728894) (xy 140.349439 78.076454) (xy 140.418924 77.92039)
+ (xy 140.48062 77.648834) (xy 140.485061 77.330762) (xy 140.430971 77.057589) (xy 140.324852 76.800125) (xy 140.170746 76.568176)
+ (xy 139.974522 76.370577) (xy 139.743654 76.214855) (xy 139.486937 76.106941) (xy 139.214149 76.050946) (xy 138.935679 76.049001)
+ (xy 138.662135 76.101183) (xy 138.403936 76.205502) (xy 138.170917 76.357985) (xy 137.971953 76.552825) (xy 137.814623 76.7826)
+ (xy 137.70492 77.038557) (xy 137.647021 77.310948) (xy 137.643133 77.589397) (xy 137.693404 77.863299) (xy 137.795918 78.12222)
+ (xy 137.946771 78.356298) (xy 138.140217 78.556617) (xy 138.368887 78.715547) (xy 138.624073 78.827035) (xy 138.896053 78.886834)
+ (xy 139.174468 78.892666) (xy 139.448714 78.844309) (xy 139.665779 78.760114) (xy 139.137394 79.2885) (xy 138.301693 79.2885)
+ (xy 138.174569 79.313787) (xy 138.05482 79.363388) (xy 137.94705 79.435398) (xy 137.855398 79.527049) (xy 137.783388 79.63482)
+ (xy 137.733787 79.754568) (xy 137.7085 79.881692) (xy 137.7085 80.011307) (xy 137.7085 81.408307) (xy 137.733787 81.535431)
+ (xy 137.783388 81.65518) (xy 137.855398 81.76295) (xy 137.947049 81.854602) (xy 138.05482 81.926612) (xy 138.174568 81.976213)
+ (xy 138.301692 82.0015) (xy 138.431307 82.0015) (xy 139.828307 82.0015) (xy 139.955431 81.976213) (xy 140.07518 81.926612)
+ (xy 140.18295 81.854602) (xy 140.274602 81.762951) (xy 140.346612 81.65518) (xy 140.396213 81.535432) (xy 140.4215 81.408308)
+ (xy 140.4215 81.278693) (xy 140.4215 80.572606) (xy 142.247053 78.747053) (xy 142.300299 78.682229) (xy 142.354203 78.61799)
+ (xy 142.356503 78.613805) (xy 142.359534 78.610116) (xy 142.399178 78.536179) (xy 142.439575 78.462699) (xy 142.441017 78.45815)
+ (xy 142.443275 78.453941) (xy 142.467799 78.373724) (xy 142.493158 78.293784) (xy 142.49369 78.289038) (xy 142.495086 78.284473)
+ (xy 142.503561 78.201035) (xy 142.512911 78.117678) (xy 142.512976 78.108341) (xy 142.512994 78.10817) (xy 142.512978 78.108009)
+ (xy 142.513 78.105) (xy 142.513 73.66) (xy 142.504814 73.576516) (xy 142.497505 73.492972) (xy 142.496172 73.488386)
+ (xy 142.495707 73.483635) (xy 142.471464 73.403339) (xy 142.448065 73.322797) (xy 142.445867 73.318558) (xy 142.444488 73.313988)
+ (xy 142.405117 73.239944) (xy 142.366513 73.165468) (xy 142.363533 73.161735) (xy 142.361292 73.15752) (xy 142.308266 73.092504)
+ (xy 142.255954 73.026974) (xy 142.249401 73.020328) (xy 142.24929 73.020192) (xy 142.249163 73.020087) (xy 142.247053 73.017947)
+ (xy 141.257106 72.028) (xy 143.771007 72.028) (xy 143.896571 72.158025) (xy 144.115016 72.309849) (xy 144.35879 72.416351)
+ (xy 144.618608 72.473476) (xy 144.884573 72.479047) (xy 145.146555 72.432852) (xy 145.394575 72.336652) (xy 145.619186 72.194109)
+ (xy 145.811833 72.010654) (xy 145.965177 71.793274) (xy 146.073379 71.55025) (xy 146.132316 71.290837) (xy 146.13334 71.217446)
+ (xy 146.412 71.496106) (xy 146.412 72.648894) (xy 144.137947 74.922947) (xy 144.0847 74.98777) (xy 144.030797 75.05201)
+ (xy 144.028496 75.056194) (xy 144.025466 75.059884) (xy 143.985831 75.133802) (xy 143.945425 75.207301) (xy 143.943981 75.211851)
+ (xy 143.941725 75.21606) (xy 143.917209 75.296248) (xy 143.891842 75.376216) (xy 143.891309 75.380963) (xy 143.889914 75.385528)
+ (xy 143.881439 75.468955) (xy 143.872089 75.552322) (xy 143.872023 75.561659) (xy 143.872006 75.561831) (xy 143.872021 75.56199)
+ (xy 143.872 75.565) (xy 143.872 88.265) (xy 143.880185 88.348483) (xy 143.887495 88.432028) (xy 143.888827 88.436612)
+ (xy 143.889293 88.441365) (xy 143.913539 88.521674) (xy 143.936935 88.602202) (xy 143.939131 88.606439) (xy 143.940512 88.611012)
+ (xy 143.979891 88.685074) (xy 144.018487 88.759532) (xy 144.021466 88.763264) (xy 144.023708 88.76748) (xy 144.076728 88.832489)
+ (xy 144.129045 88.898025) (xy 144.135598 88.904671) (xy 144.13571 88.904808) (xy 144.135836 88.904912) (xy 144.137947 88.907053)
+ (xy 146.042947 90.812053) (xy 146.10777 90.865299) (xy 146.17201 90.919203) (xy 146.176194 90.921503) (xy 146.179884 90.924534)
+ (xy 146.253802 90.964168) (xy 146.327301 91.004575) (xy 146.331851 91.006018) (xy 146.33606 91.008275) (xy 146.416248 91.03279)
+ (xy 146.496216 91.058158) (xy 146.500963 91.05869) (xy 146.505528 91.060086) (xy 146.588999 91.068565) (xy 146.672322 91.077911)
+ (xy 146.681648 91.077976) (xy 146.681831 91.077995) (xy 146.682 91.077978) (xy 146.685 91.078) (xy 148.127728 91.078)
+ (xy 148.300217 91.256617) (xy 148.528887 91.415547) (xy 148.784073 91.527035) (xy 149.056053 91.586834) (xy 149.334468 91.592666)
+ (xy 149.608714 91.544309) (xy 149.868344 91.443605) (xy 150.10347 91.29439) (xy 150.305134 91.102347) (xy 150.465657 90.874791)
+ (xy 150.578924 90.62039) (xy 150.64062 90.348834) (xy 150.645061 90.030762) (xy 150.590971 89.757589) (xy 150.484852 89.500125)
+ (xy 150.330746 89.268176) (xy 150.134522 89.070577) (xy 149.903654 88.914855) (xy 149.871749 88.901443) (xy 150.10347 88.75439)
+ (xy 150.305134 88.562347) (xy 150.322308 88.538) (xy 152.346064 88.538) (xy 152.388388 88.64018) (xy 152.460398 88.74795)
+ (xy 152.552049 88.839602) (xy 152.65982 88.911612) (xy 152.779568 88.961213) (xy 152.906692 88.9865) (xy 153.036307 88.9865)
+ (xy 154.433307 88.9865) (xy 154.560431 88.961213) (xy 154.68018 88.911612) (xy 154.78795 88.839602) (xy 154.879602 88.747951)
+ (xy 154.951612 88.64018) (xy 155.001213 88.520432) (xy 155.0265 88.393308) (xy 155.0265 88.292033) (xy 155.252364 88.350755)
+ (xy 155.973119 87.63) (xy 155.973119 88.103762) (xy 155.489245 88.587636) (xy 155.550394 88.822838) (xy 155.795779 88.928601)
+ (xy 156.057083 88.984459) (xy 156.324263 88.988266) (xy 156.587052 88.939876) (xy 156.835351 88.841148) (xy 156.869606 88.822838)
+ (xy 156.930755 88.587636) (xy 156.930755 96.197364) (xy 156.869606 95.962162) (xy 156.624221 95.856399) (xy 156.362917 95.800541)
+ (xy 156.095737 95.796734) (xy 155.832948 95.845124) (xy 155.584649 95.943852) (xy 155.550394 95.962162) (xy 155.489245 96.197364)
+ (xy 156.21 96.918119) (xy 156.930755 96.197364) (xy 156.930755 96.671126) (xy 156.446881 97.155) (xy 157.167636 97.875755)
+ (xy 157.402838 97.814606) (xy 157.508601 97.569221) (xy 157.564459 97.307917) (xy 157.568266 97.040737) (xy 157.568266 100.40416)
+ (xy 156.930755 99.766649) (xy 155.382994 98.218888) (xy 155.489245 98.112637) (xy 155.550394 98.347838) (xy 155.795779 98.453601)
+ (xy 156.057083 98.509459) (xy 156.324263 98.513266) (xy 156.587052 98.464876) (xy 156.835351 98.366148) (xy 156.869606 98.347838)
+ (xy 156.930755 98.112636) (xy 156.21 97.391881) (xy 156.195858 97.406022) (xy 155.958977 97.169142) (xy 155.973119 97.155)
+ (xy 155.252364 96.434245) (xy 155.0265 96.492966) (xy 155.0265 96.391693) (xy 155.001213 96.264569) (xy 154.951612 96.14482)
+ (xy 154.879602 96.03705) (xy 154.787951 95.945398) (xy 154.68018 95.873388) (xy 154.560432 95.823787) (xy 154.433308 95.7985)
+ (xy 154.303693 95.7985) (xy 152.906693 95.7985) (xy 152.779569 95.823787) (xy 152.65982 95.873388) (xy 152.55205 95.945398)
+ (xy 152.460398 96.037049) (xy 152.388388 96.14482) (xy 152.338787 96.264568) (xy 152.3135 96.391692) (xy 152.3135 96.521307)
+ (xy 152.3135 97.918307) (xy 152.338787 98.045431) (xy 152.388388 98.16518) (xy 152.460398 98.27295) (xy 152.552049 98.364602)
+ (xy 152.65982 98.436612) (xy 152.779568 98.486213) (xy 152.906692 98.5115) (xy 153.036307 98.5115) (xy 153.107394 98.5115)
+ (xy 156.696674 102.10078) (xy 156.693133 102.354397) (xy 156.743404 102.628299) (xy 156.845918 102.88722) (xy 156.996771 103.121298)
+ (xy 157.190217 103.321617) (xy 157.418887 103.480547) (xy 157.674073 103.592035) (xy 157.946053 103.651834) (xy 158.224468 103.657666)
+ (xy 158.498714 103.609309) (xy 158.758344 103.508605) (xy 158.99347 103.35939) (xy 159.195134 103.167347) (xy 159.355657 102.939791)
+ (xy 159.468924 102.68539) (xy 159.53062 102.413834) (xy 159.535061 102.095762) (xy 159.535061 112.530955) (xy 149.371271 102.367165)
+ (xy 149.375061 102.095762) (xy 149.320971 101.822589) (xy 149.214852 101.565125) (xy 149.060746 101.333176) (xy 148.864522 101.135577)
+ (xy 148.863 101.13455) (xy 148.863 98.930152) (xy 148.948702 98.844451) (xy 149.020712 98.73668) (xy 149.070313 98.616932)
+ (xy 149.0956 98.489808) (xy 149.0956 98.360193) (xy 149.0956 97.090193) (xy 149.070313 96.963069) (xy 149.020712 96.84332)
+ (xy 148.948702 96.73555) (xy 148.857051 96.643898) (xy 148.74928 96.571888) (xy 148.629532 96.522287) (xy 148.502408 96.497)
+ (xy 148.372793 96.497) (xy 147.407593 96.497) (xy 147.32 96.514423) (xy 147.232408 96.497) (xy 147.102793 96.497)
+ (xy 146.137593 96.497) (xy 146.010469 96.522287) (xy 145.89072 96.571888) (xy 145.838 96.607114) (xy 145.838 96.52)
+ (xy 145.82828 96.420866) (xy 145.81926 96.321751) (xy 145.818213 96.318194) (xy 145.817851 96.3145) (xy 145.78907 96.219175)
+ (xy 145.760961 96.123666) (xy 145.759241 96.120376) (xy 145.75817 96.116828) (xy 145.711448 96.028958) (xy 145.665297 95.940678)
+ (xy 145.662971 95.937786) (xy 145.661231 95.934512) (xy 145.598308 95.857361) (xy 145.535912 95.779756) (xy 145.53307 95.777371)
+ (xy 145.530726 95.774497) (xy 145.453992 95.711017) (xy 145.377735 95.64703) (xy 145.374485 95.645243) (xy 145.371626 95.642878)
+ (xy 145.284052 95.595527) (xy 145.196791 95.547555) (xy 145.193252 95.546432) (xy 145.189991 95.544669) (xy 145.094881 95.515227)
+ (xy 144.999971 95.48512) (xy 144.996285 95.484706) (xy 144.99274 95.483609) (xy 144.893711 95.4732) (xy 144.794772 95.462103)
+ (xy 144.787645 95.462053) (xy 144.787386 95.462026) (xy 144.787125 95.462049) (xy 144.78 95.462) (xy 144.759659 95.462)
+ (xy 144.719602 95.40205) (xy 144.627951 95.310398) (xy 144.52018 95.238388) (xy 144.400432 95.188787) (xy 144.273308 95.1635)
+ (xy 144.143693 95.1635) (xy 142.746693 95.1635) (xy 142.619569 95.188787) (xy 142.49982 95.238388) (xy 142.39205 95.310398)
+ (xy 142.300398 95.402049) (xy 142.228388 95.50982) (xy 142.178787 95.629568) (xy 142.1535 95.756692) (xy 142.1535 95.849956)
+ (xy 142.026299 95.658504) (xy 141.878 95.509165) (xy 141.878 85.09) (xy 141.869814 85.006516) (xy 141.862505 84.922972)
+ (xy 141.861172 84.918387) (xy 141.860707 84.913635) (xy 141.83646 84.833325) (xy 141.813065 84.752798) (xy 141.810868 84.74856)
+ (xy 141.809488 84.743988) (xy 141.770108 84.669925) (xy 141.731513 84.595468) (xy 141.728533 84.591735) (xy 141.726292 84.58752)
+ (xy 141.673271 84.52251) (xy 141.620955 84.456975) (xy 141.614401 84.450328) (xy 141.61429 84.450192) (xy 141.614163 84.450087)
+ (xy 141.612053 84.447947) (xy 140.342053 83.177947) (xy 140.333384 83.170826) (xy 140.324852 83.150125) (xy 140.170746 82.918176)
+ (xy 139.974522 82.720577) (xy 139.743654 82.564855) (xy 139.486937 82.456941) (xy 139.214149 82.400946) (xy 138.935679 82.399001)
+ (xy 138.662135 82.451183) (xy 138.403936 82.555502) (xy 138.170917 82.707985) (xy 137.971953 82.902825) (xy 137.814623 83.1326)
+ (xy 137.70492 83.388557) (xy 137.647021 83.660948) (xy 137.643133 83.939397) (xy 137.693404 84.213299) (xy 137.795918 84.47222)
+ (xy 137.946771 84.706298) (xy 138.140217 84.906617) (xy 138.368887 85.065547) (xy 138.624073 85.177035) (xy 138.896053 85.236834)
+ (xy 139.174468 85.242666) (xy 139.448714 85.194309) (xy 139.694765 85.098871) (xy 140.062 85.466106) (xy 140.062 86.618667)
+ (xy 139.974522 86.530577) (xy 139.743654 86.374855) (xy 139.486937 86.266941) (xy 139.214149 86.210946) (xy 138.935679 86.209001)
+ (xy 138.662135 86.261183) (xy 138.403936 86.365502) (xy 138.170917 86.517985) (xy 138.115758 86.572) (xy 135.535817 86.572)
+ (xy 135.535817 82.443303) (xy 135.485203 82.142803) (xy 135.376936 81.857952) (xy 135.333736 81.777127) (xy 135.079146 81.692735)
+ (xy 134.842265 81.929616) (xy 134.842265 81.455854) (xy 134.757873 81.201264) (xy 134.479897 81.076399) (xy 134.182902 81.008165)
+ (xy 133.878303 80.999183) (xy 133.577803 81.049797) (xy 133.292952 81.158064) (xy 133.212127 81.201264) (xy 133.127735 81.455854)
+ (xy 133.985 82.313119) (xy 134.842265 81.455854) (xy 134.842265 81.929616) (xy 134.221881 82.55) (xy 135.079146 83.407265)
+ (xy 135.333736 83.322873) (xy 135.458601 83.044897) (xy 135.526835 82.747902) (xy 135.535817 82.443303) (xy 135.535817 86.572)
+ (xy 134.842265 86.572) (xy 134.842265 83.644146) (xy 133.985 82.786881) (xy 133.748119 83.023762) (xy 133.748119 82.55)
+ (xy 132.890854 81.692735) (xy 132.636264 81.777127) (xy 132.511399 82.055103) (xy 132.443165 82.352098) (xy 132.434183 82.656697)
+ (xy 132.484797 82.957197) (xy 132.593064 83.242048) (xy 132.636264 83.322873) (xy 132.890854 83.407265) (xy 133.748119 82.55)
+ (xy 133.748119 83.023762) (xy 133.127735 83.644146) (xy 133.212127 83.898736) (xy 133.490103 84.023601) (xy 133.787098 84.091835)
+ (xy 134.091697 84.100817) (xy 134.392197 84.050203) (xy 134.677048 83.941936) (xy 134.757873 83.898736) (xy 134.842265 83.644146)
+ (xy 134.842265 86.572) (xy 134.62 86.572) (xy 134.423238 86.572) (xy 129.69249 81.841252) (xy 129.69249 78.628261)
+ (xy 129.643358 78.352894) (xy 129.541449 78.092403) (xy 129.514836 78.042615) (xy 129.273179 77.973702) (xy 129.036298 78.210583)
+ (xy 129.036298 77.736821) (xy 128.967385 77.495164) (xy 128.71113 77.38303) (xy 128.437922 77.323043) (xy 128.158261 77.31751)
+ (xy 127.882894 77.366642) (xy 127.622403 77.468551) (xy 127.572615 77.495164) (xy 127.503702 77.736821) (xy 128.27 78.503119)
+ (xy 129.036298 77.736821) (xy 129.036298 78.210583) (xy 128.506881 78.74) (xy 129.273179 79.506298) (xy 129.514836 79.437385)
+ (xy 129.62697 79.18113) (xy 129.686957 78.907922) (xy 129.69249 78.628261) (xy 129.69249 81.841252) (xy 127.981782 80.130544)
+ (xy 128.102078 80.156957) (xy 128.381739 80.16249) (xy 128.657106 80.113358) (xy 128.917597 80.011449) (xy 128.967385 79.984836)
+ (xy 129.036298 79.743179) (xy 128.27 78.976881) (xy 128.255857 78.991022) (xy 128.018976 78.754141) (xy 128.033119 78.74)
+ (xy 127.266821 77.973702) (xy 127.025164 78.042615) (xy 126.91303 78.29887) (xy 126.853043 78.572078) (xy 126.84751 78.851739)
+ (xy 126.891352 79.097462) (xy 126.867411 79.084625) (xy 126.781791 79.037555) (xy 126.776487 79.035872) (xy 126.771585 79.033244)
+ (xy 126.678122 79.004669) (xy 126.584971 78.97512) (xy 126.579443 78.974499) (xy 126.574122 78.972873) (xy 126.476866 78.962994)
+ (xy 126.379772 78.952103) (xy 126.368901 78.952027) (xy 126.368693 78.952006) (xy 126.368498 78.952024) (xy 126.365 78.952)
+ (xy 124.898238 78.952) (xy 124.883 78.936762) (xy 124.883 68.68268) (xy 124.9405 68.722644) (xy 125.22992 68.849088)
+ (xy 125.538388 68.916909) (xy 125.854154 68.923523) (xy 126.165191 68.868679) (xy 126.459652 68.754465) (xy 126.726321 68.585232)
+ (xy 126.95504 68.367426) (xy 127.137098 68.109343) (xy 127.265559 67.820813) (xy 127.335532 67.512826) (xy 127.34057 67.152082)
+ (xy 127.3405 67.151728) (xy 127.3405 63.247308) (xy 127.3405 63.117693) (xy 127.3405 61.212693) (xy 127.315213 61.085569)
+ (xy 127.265612 60.96582) (xy 127.193602 60.85805) (xy 127.101951 60.766398) (xy 126.99418 60.694388) (xy 126.874432 60.644787)
+ (xy 126.747308 60.6195) (xy 126.617693 60.6195) (xy 125.403606 60.6195) (xy 125.368 60.583894) (xy 125.368 58.40607)
+ (xy 125.417037 58.374951) (xy 125.636737 58.165733) (xy 125.811617 57.917825) (xy 125.935014 57.640672) (xy 126.002227 57.344829)
+ (xy 126.007066 56.998309) (xy 125.948139 56.700704) (xy 125.832529 56.420213) (xy 125.66464 56.16752) (xy 125.450866 55.952249)
+ (xy 125.199351 55.782599) (xy 124.919674 55.665034) (xy 124.622488 55.604031) (xy 124.319113 55.601913) (xy 124.021104 55.658761)
+ (xy 123.739813 55.77241) (xy 123.485954 55.938531) (xy 123.269195 56.150796) (xy 123.206746 56.242) (xy 120.738266 56.242)
+ (xy 120.738266 51.955737) (xy 120.689876 51.692948) (xy 120.591148 51.444649) (xy 120.572838 51.410394) (xy 120.337636 51.349245)
+ (xy 120.100755 51.586126) (xy 120.100755 51.112364) (xy 120.039606 50.877162) (xy 119.794221 50.771399) (xy 119.532917 50.715541)
+ (xy 119.265737 50.711734) (xy 119.002948 50.760124) (xy 118.754649 50.858852) (xy 118.720394 50.877162) (xy 118.659245 51.112364)
+ (xy 119.38 51.833119) (xy 120.100755 51.112364) (xy 120.100755 51.586126) (xy 119.616881 52.07) (xy 120.337636 52.790755)
+ (xy 120.572838 52.729606) (xy 120.678601 52.484221) (xy 120.734459 52.222917) (xy 120.738266 51.955737) (xy 120.738266 56.242)
+ (xy 120.100755 56.242) (xy 120.100755 53.027636) (xy 119.38 52.306881) (xy 119.143119 52.543762) (xy 119.143119 52.07)
+ (xy 118.422364 51.349245) (xy 118.187162 51.410394) (xy 118.109329 51.590975) (xy 118.051148 51.444649) (xy 118.032838 51.410394)
+ (xy 117.797636 51.349245) (xy 117.560755 51.586126) (xy 117.560755 51.112364) (xy 117.499606 50.877162) (xy 117.254221 50.771399)
+ (xy 116.992917 50.715541) (xy 116.725737 50.711734) (xy 116.462948 50.760124) (xy 116.214649 50.858852) (xy 116.180394 50.877162)
+ (xy 116.119245 51.112364) (xy 116.84 51.833119) (xy 117.560755 51.112364) (xy 117.560755 51.586126) (xy 117.076881 52.07)
+ (xy 117.797636 52.790755) (xy 118.032838 52.729606) (xy 118.11067 52.549024) (xy 118.168852 52.695351) (xy 118.187162 52.729606)
+ (xy 118.422364 52.790755) (xy 119.143119 52.07) (xy 119.143119 52.543762) (xy 118.659245 53.027636) (xy 118.720394 53.262838)
+ (xy 118.965779 53.368601) (xy 119.227083 53.424459) (xy 119.494263 53.428266) (xy 119.757052 53.379876) (xy 120.005351 53.281148)
+ (xy 120.039606 53.262838) (xy 120.100755 53.027636) (xy 120.100755 56.242) (xy 119.590062 56.242) (xy 119.507013 56.138707)
+ (xy 119.290917 55.957381) (xy 119.043718 55.821482) (xy 118.77483 55.736185) (xy 118.494495 55.704741) (xy 118.474314 55.7046)
+ (xy 117.745686 55.7046) (xy 117.560755 55.722732) (xy 117.560755 53.027636) (xy 116.84 52.306881) (xy 116.119245 53.027636)
+ (xy 116.180394 53.262838) (xy 116.425779 53.368601) (xy 116.687083 53.424459) (xy 116.954263 53.428266) (xy 117.217052 53.379876)
+ (xy 117.465351 53.281148) (xy 117.499606 53.262838) (xy 117.560755 53.027636) (xy 117.560755 55.722732) (xy 117.46494 55.732127)
+ (xy 117.194887 55.813661) (xy 116.945814 55.946096) (xy 116.727208 56.124386) (xy 116.547395 56.341743) (xy 116.413225 56.589885)
+ (xy 116.329808 56.859362) (xy 116.300321 57.139909) (xy 116.325888 57.420841) (xy 116.405534 57.691456) (xy 116.536227 57.941448)
+ (xy 116.712987 58.161293) (xy 116.929083 58.342619) (xy 117.058247 58.413628) (xy 117.04652 58.418724) (xy 116.812108 58.581252)
+ (xy 116.613908 58.786388) (xy 116.459536 59.02625) (xy 116.362616 59.299975) (xy 116.484499 59.5225) (xy 117.9425 59.5225)
+ (xy 117.9425 59.5025) (xy 118.2775 59.5025) (xy 118.2775 59.5225) (xy 119.735501 59.5225) (xy 119.857384 59.299975)
+ (xy 119.760464 59.02625) (xy 119.606092 58.786388) (xy 119.407892 58.581252) (xy 119.17348 58.418724) (xy 119.161812 58.413654)
+ (xy 119.274186 58.353904) (xy 119.492792 58.175614) (xy 119.59009 58.058) (xy 123.204662 58.058) (xy 123.24176 58.115565)
+ (xy 123.452507 58.3338) (xy 123.552 58.402949) (xy 123.552 60.96) (xy 123.560185 61.043483) (xy 123.567495 61.127028)
+ (xy 123.568827 61.131612) (xy 123.569293 61.136365) (xy 123.593539 61.216674) (xy 123.616935 61.297202) (xy 123.619131 61.301439)
+ (xy 123.620512 61.306012) (xy 123.659891 61.380074) (xy 123.698487 61.454532) (xy 123.701466 61.458264) (xy 123.703708 61.46248)
+ (xy 123.756728 61.527489) (xy 123.809045 61.593025) (xy 123.815598 61.599671) (xy 123.81571 61.599808) (xy 123.815836 61.599912)
+ (xy 123.817947 61.602053) (xy 124.1195 61.903606) (xy 124.1195 63.247307) (xy 124.144787 63.374431) (xy 124.194388 63.49418)
+ (xy 124.266398 63.60195) (xy 124.358049 63.693602) (xy 124.46582 63.765612) (xy 124.585568 63.815213) (xy 124.712692 63.8405)
+ (xy 124.842307 63.8405) (xy 126.747307 63.8405) (xy 126.874431 63.815213) (xy 126.99418 63.765612) (xy 127.10195 63.693602)
+ (xy 127.193602 63.601951) (xy 127.265612 63.49418) (xy 127.315213 63.374432) (xy 127.3405 63.247308) (xy 127.3405 67.151728)
+ (xy 127.279223 66.842262) (xy 127.158868 66.550257) (xy 126.984087 66.287191) (xy 126.761539 66.063084) (xy 126.499699 65.886471)
+ (xy 126.208542 65.76408) (xy 125.899158 65.700572) (xy 125.58333 65.698367) (xy 125.273089 65.757549) (xy 124.980251 65.875863)
+ (xy 124.715971 66.048803) (xy 124.508473 66.252) (xy 123.825 66.252) (xy 123.628238 66.252) (xy 121.398119 64.021881)
+ (xy 121.32258 63.959832) (xy 121.247735 63.89703) (xy 121.242862 63.894351) (xy 121.238561 63.890818) (xy 121.152411 63.844625)
+ (xy 121.066791 63.797555) (xy 121.061487 63.795872) (xy 121.056585 63.793244) (xy 120.963122 63.764669) (xy 120.869971 63.73512)
+ (xy 120.864443 63.734499) (xy 120.859122 63.732873) (xy 120.761866 63.722994) (xy 120.664772 63.712103) (xy 120.653901 63.712027)
+ (xy 120.653693 63.712006) (xy 120.653498 63.712024) (xy 120.65 63.712) (xy 119.451349 63.712) (xy 119.290917 63.577381)
+ (xy 119.161752 63.506371) (xy 119.17348 63.501276) (xy 119.407892 63.338748) (xy 119.606092 63.133612) (xy 119.760464 62.89375)
+ (xy 119.857384 62.620025) (xy 119.857384 61.839975) (xy 119.760464 61.56625) (xy 119.606092 61.326388) (xy 119.407892 61.121252)
+ (xy 119.17532 60.96) (xy 119.407892 60.798748) (xy 119.606092 60.593612) (xy 119.760464 60.35375) (xy 119.857384 60.080025)
+ (xy 119.735501 59.8575) (xy 118.2775 59.8575) (xy 118.2775 60.7846) (xy 118.2775 61.1354) (xy 118.2775 62.0625)
+ (xy 119.735501 62.0625) (xy 119.857384 61.839975) (xy 119.857384 62.620025) (xy 119.735501 62.3975) (xy 118.2775 62.3975)
+ (xy 118.2775 62.4175) (xy 117.9425 62.4175) (xy 117.9425 62.3975) (xy 117.9425 62.0625) (xy 117.9425 61.1354)
+ (xy 117.9425 60.7846) (xy 117.9425 59.8575) (xy 116.484499 59.8575) (xy 116.362616 60.080025) (xy 116.459536 60.35375)
+ (xy 116.613908 60.593612) (xy 116.812108 60.798748) (xy 117.044679 60.96) (xy 116.812108 61.121252) (xy 116.613908 61.326388)
+ (xy 116.459536 61.56625) (xy 116.362616 61.839975) (xy 116.484499 62.0625) (xy 117.9425 62.0625) (xy 117.9425 62.3975)
+ (xy 116.484499 62.3975) (xy 116.362616 62.620025) (xy 116.459536 62.89375) (xy 116.613908 63.133612) (xy 116.812108 63.338748)
+ (xy 117.04652 63.501276) (xy 117.058187 63.506345) (xy 116.945814 63.566096) (xy 116.727208 63.744386) (xy 116.547395 63.961743)
+ (xy 116.413225 64.209885) (xy 116.329808 64.479362) (xy 116.300321 64.759909) (xy 116.325888 65.040841) (xy 116.405534 65.311456)
+ (xy 116.536227 65.561448) (xy 116.712987 65.781293) (xy 116.929083 65.962619) (xy 117.176282 66.098518) (xy 117.44517 66.183815)
+ (xy 117.725505 66.215259) (xy 117.745686 66.2154) (xy 118.474314 66.2154) (xy 118.75506 66.187873) (xy 119.025113 66.106339)
+ (xy 119.274186 65.973904) (xy 119.453082 65.828) (xy 120.211762 65.828) (xy 122.441881 68.058119) (xy 122.517419 68.120167)
+ (xy 122.592265 68.18297) (xy 122.597137 68.185648) (xy 122.601439 68.189182) (xy 122.687588 68.235374) (xy 122.767 68.279031)
+ (xy 122.767 79.375) (xy 122.776541 79.47231) (xy 122.785055 79.569621) (xy 122.786605 79.574958) (xy 122.787149 79.5805)
+ (xy 122.815411 79.674107) (xy 122.842662 79.767907) (xy 122.845221 79.772845) (xy 122.84683 79.778172) (xy 122.892707 79.864455)
+ (xy 122.937686 79.951228) (xy 122.941157 79.955577) (xy 122.943769 79.960488) (xy 123.005512 80.036193) (xy 123.066508 80.112601)
+ (xy 123.074144 80.120344) (xy 123.074274 80.120503) (xy 123.07442 80.120624) (xy 123.076881 80.123119) (xy 123.711881 80.758119)
+ (xy 123.787419 80.820167) (xy 123.862265 80.88297) (xy 123.867137 80.885648) (xy 123.871439 80.889182) (xy 123.957623 80.935393)
+ (xy 124.043209 80.982445) (xy 124.048508 80.984126) (xy 124.053415 80.986757) (xy 124.146923 81.015345) (xy 124.240029 81.04488)
+ (xy 124.245556 81.045499) (xy 124.250878 81.047127) (xy 124.348133 81.057005) (xy 124.445228 81.067897) (xy 124.456098 81.067972)
+ (xy 124.456307 81.067994) (xy 124.456501 81.067975) (xy 124.46 81.068) (xy 125.926762 81.068) (xy 133.236881 88.378119)
+ (xy 133.312419 88.440167) (xy 133.387265 88.50297) (xy 133.392137 88.505648) (xy 133.396439 88.509182) (xy 133.482588 88.555374)
+ (xy 133.562 88.599031) (xy 133.562 89.096762) (xy 130.371762 92.287) (xy 128.42402 92.287) (xy 128.670604 92.130513)
+ (xy 128.908341 91.904119) (xy 129.097577 91.63586) (xy 129.231104 91.335953) (xy 129.303836 91.015823) (xy 129.309072 90.640856)
+ (xy 129.309072 85.560856) (xy 129.245307 85.23882) (xy 129.120206 84.935302) (xy 128.938534 84.661864) (xy 128.707211 84.42892)
+ (xy 128.435047 84.245343) (xy 128.132411 84.118126) (xy 127.810827 84.052115) (xy 127.482547 84.049823) (xy 127.160073 84.111338)
+ (xy 126.85569 84.234317) (xy 126.818052 84.258946) (xy 121.558 78.998894) (xy 121.558 76.2) (xy 121.549818 76.116562)
+ (xy 121.542506 76.032972) (xy 121.541172 76.028381) (xy 121.540707 76.023635) (xy 121.516472 75.943367) (xy 121.493065 75.862798)
+ (xy 121.490868 75.85856) (xy 121.489488 75.853988) (xy 121.450108 75.779925) (xy 121.411513 75.705468) (xy 121.408533 75.701735)
+ (xy 121.406292 75.69752) (xy 121.353271 75.63251) (xy 121.300955 75.566975) (xy 121.294401 75.560328) (xy 121.29429 75.560192)
+ (xy 121.294163 75.560087) (xy 121.292053 75.557947) (xy 120.657053 74.922947) (xy 120.592229 74.8697) (xy 120.52799 74.815797)
+ (xy 120.523805 74.813496) (xy 120.520116 74.810466) (xy 120.446197 74.770831) (xy 120.372699 74.730425) (xy 120.368148 74.728981)
+ (xy 120.36394 74.726725) (xy 120.283751 74.702209) (xy 120.203784 74.676842) (xy 120.199036 74.676309) (xy 120.194472 74.674914)
+ (xy 120.111044 74.666439) (xy 120.027678 74.657089) (xy 120.01834 74.657023) (xy 120.018169 74.657006) (xy 120.018009 74.657021)
+ (xy 120.015 74.657) (xy 119.209612 74.657) (xy 119.019522 74.465577) (xy 118.788654 74.309855) (xy 118.531937 74.201941)
+ (xy 118.259149 74.145946) (xy 117.980679 74.144001) (xy 117.707135 74.196183) (xy 117.448936 74.300502) (xy 117.215917 74.452985)
+ (xy 117.016953 74.647825) (xy 116.859623 74.8776) (xy 116.74992 75.133557) (xy 116.692021 75.405948) (xy 116.688133 75.684397)
+ (xy 116.738404 75.958299) (xy 116.840918 76.21722) (xy 116.991771 76.451298) (xy 117.185217 76.651617) (xy 117.413887 76.810547)
+ (xy 117.669073 76.922035) (xy 117.941053 76.981834) (xy 118.219468 76.987666) (xy 118.493714 76.939309) (xy 118.753344 76.838605)
+ (xy 118.98847 76.68939) (xy 119.190134 76.497347) (xy 119.207308 76.473) (xy 119.638894 76.473) (xy 119.742 76.576106)
+ (xy 119.742 79.375) (xy 119.750185 79.458483) (xy 119.757495 79.542028) (xy 119.758827 79.546612) (xy 119.759293 79.551365)
+ (xy 119.783539 79.631674) (xy 119.806935 79.712202) (xy 119.809131 79.716439) (xy 119.810512 79.721012) (xy 119.849891 79.795074)
+ (xy 119.888487 79.869532) (xy 119.891466 79.873264) (xy 119.893708 79.87748) (xy 119.946728 79.942489) (xy 119.999045 80.008025)
+ (xy 120.005598 80.014671) (xy 120.00571 80.014808) (xy 120.005836 80.014912) (xy 120.007947 80.017053) (xy 125.981761 85.990867)
+ (xy 126.018062 86.18865) (xy 126.138913 86.493884) (xy 126.316749 86.769833) (xy 126.544798 87.005984) (xy 126.814371 87.193342)
+ (xy 127.115203 87.324772) (xy 127.435833 87.395267) (xy 127.764049 87.402142) (xy 128.08735 87.345136) (xy 128.393421 87.226419)
+ (xy 128.670604 87.050513) (xy 128.908341 86.824119) (xy 129.097577 86.55586) (xy 129.231104 86.255953) (xy 129.303836 85.935823)
+ (xy 129.309072 85.560856) (xy 129.309072 90.640856) (xy 129.245307 90.31882) (xy 129.120206 90.015302) (xy 128.938534 89.741864)
+ (xy 128.707211 89.50892) (xy 128.435047 89.325343) (xy 128.132411 89.198126) (xy 127.810827 89.132115) (xy 127.482547 89.129823)
+ (xy 127.160073 89.191338) (xy 126.85569 89.314317) (xy 126.58099 89.494076) (xy 126.346437 89.723767) (xy 126.227821 89.897)
+ (xy 126.106106 89.897) (xy 125.368 89.158894) (xy 125.368 86.36) (xy 125.359814 86.276516) (xy 125.352505 86.192972)
+ (xy 125.351172 86.188387) (xy 125.350707 86.183635) (xy 125.32646 86.103325) (xy 125.303065 86.022798) (xy 125.300868 86.01856)
+ (xy 125.299488 86.013988) (xy 125.260108 85.939925) (xy 125.221513 85.865468) (xy 125.218533 85.861735) (xy 125.216292 85.85752)
+ (xy 125.163271 85.79251) (xy 125.110955 85.726975) (xy 125.104401 85.720328) (xy 125.10429 85.720192) (xy 125.104163 85.720087)
+ (xy 125.102053 85.717947) (xy 119.12166 79.737554) (xy 119.190134 79.672347) (xy 119.350657 79.444791) (xy 119.463924 79.19039)
+ (xy 119.52562 78.918834) (xy 119.530061 78.600762) (xy 119.475971 78.327589) (xy 119.369852 78.070125) (xy 119.215746 77.838176)
+ (xy 119.019522 77.640577) (xy 118.788654 77.484855) (xy 118.531937 77.376941) (xy 118.259149 77.320946) (xy 117.980679 77.319001)
+ (xy 117.707135 77.371183) (xy 117.448936 77.475502) (xy 117.215917 77.627985) (xy 117.016953 77.822825) (xy 116.859623 78.0526)
+ (xy 116.74992 78.308557) (xy 116.692021 78.580948) (xy 116.688133 78.859397) (xy 116.738404 79.133299) (xy 116.840918 79.39222)
+ (xy 116.991771 79.626298) (xy 117.185217 79.826617) (xy 117.202 79.838281) (xy 117.202 80.01) (xy 117.210185 80.093483)
+ (xy 117.217495 80.177028) (xy 117.218827 80.181612) (xy 117.219293 80.186365) (xy 117.243539 80.266674) (xy 117.266935 80.347202)
+ (xy 117.269131 80.351439) (xy 117.270512 80.356012) (xy 117.309891 80.430074) (xy 117.348487 80.504532) (xy 117.351466 80.508264)
+ (xy 117.353708 80.51248) (xy 117.406728 80.577489) (xy 117.459045 80.643025) (xy 117.465598 80.649671) (xy 117.46571 80.649808)
+ (xy 117.465836 80.649912) (xy 117.467947 80.652053) (xy 123.552 86.736106) (xy 123.552 89.535) (xy 123.560185 89.618483)
+ (xy 123.567495 89.702028) (xy 123.568827 89.706612) (xy 123.569293 89.711365) (xy 123.593539 89.791674) (xy 123.616935 89.872202)
+ (xy 123.619131 89.876439) (xy 123.620512 89.881012) (xy 123.659891 89.955074) (xy 123.698487 90.029532) (xy 123.701466 90.033264)
+ (xy 123.703708 90.03748) (xy 123.756728 90.102489) (xy 123.809045 90.168025) (xy 123.815598 90.174671) (xy 123.81571 90.174808)
+ (xy 123.815836 90.174912) (xy 123.817947 90.177053) (xy 125.087947 91.447053) (xy 125.15277 91.500299) (xy 125.21701 91.554203)
+ (xy 125.221194 91.556503) (xy 125.224884 91.559534) (xy 125.298802 91.599168) (xy 125.372301 91.639575) (xy 125.376851 91.641018)
+ (xy 125.38106 91.643275) (xy 125.461248 91.66779) (xy 125.541216 91.693158) (xy 125.545963 91.69369) (xy 125.550528 91.695086)
+ (xy 125.633955 91.70356) (xy 125.717322 91.712911) (xy 125.726659 91.712976) (xy 125.726831 91.712994) (xy 125.72699 91.712978)
+ (xy 125.73 91.713) (xy 126.228566 91.713) (xy 126.316749 91.849833) (xy 126.544798 92.085984) (xy 126.814371 92.273342)
+ (xy 126.845632 92.287) (xy 119.149072 92.287) (xy 119.149072 88.100856) (xy 119.085307 87.77882) (xy 118.960206 87.475302)
+ (xy 118.778534 87.201864) (xy 118.547211 86.96892) (xy 118.383 86.858158) (xy 118.383 84.455) (xy 118.374813 84.371512)
+ (xy 118.367505 84.287972) (xy 118.366172 84.283387) (xy 118.365707 84.278635) (xy 118.34146 84.198325) (xy 118.318065 84.117798)
+ (xy 118.315868 84.11356) (xy 118.314488 84.108988) (xy 118.275108 84.034925) (xy 118.236513 83.960468) (xy 118.233533 83.956735)
+ (xy 118.231292 83.95252) (xy 118.178271 83.88751) (xy 118.125955 83.821975) (xy 118.119401 83.815328) (xy 118.11929 83.815192)
+ (xy 118.119163 83.815087) (xy 118.117053 83.812947) (xy 114.573 80.268894) (xy 114.573 60.96) (xy 114.564814 60.876516)
+ (xy 114.557505 60.792972) (xy 114.556172 60.788387) (xy 114.555707 60.783635) (xy 114.53146 60.703325) (xy 114.508065 60.622798)
+ (xy 114.505868 60.61856) (xy 114.504488 60.613988) (xy 114.465108 60.539925) (xy 114.426513 60.465468) (xy 114.423533 60.461735)
+ (xy 114.421292 60.45752) (xy 114.368271 60.39251) (xy 114.315955 60.326975) (xy 114.309401 60.320328) (xy 114.30929 60.320192)
+ (xy 114.309163 60.320087) (xy 114.307053 60.317947) (xy 113.037053 59.047947) (xy 112.972229 58.9947) (xy 112.90799 58.940797)
+ (xy 112.903805 58.938496) (xy 112.900116 58.935466) (xy 112.826197 58.895831) (xy 112.752699 58.855425) (xy 112.748148 58.853981)
+ (xy 112.74394 58.851725) (xy 112.663751 58.827209) (xy 112.583784 58.801842) (xy 112.579036 58.801309) (xy 112.574472 58.799914)
+ (xy 112.491044 58.791439) (xy 112.407678 58.782089) (xy 112.39834 58.782023) (xy 112.398169 58.782006) (xy 112.398009 58.782021)
+ (xy 112.395 58.782) (xy 111.970062 58.782) (xy 111.887013 58.678707) (xy 111.770499 58.58094) (xy 111.824931 58.570113)
+ (xy 111.94468 58.520512) (xy 112.05245 58.448502) (xy 112.144102 58.356851) (xy 112.216112 58.24908) (xy 112.265713 58.129332)
+ (xy 112.291 58.002208) (xy 112.291 57.872593) (xy 112.291 56.297793) (xy 112.265713 56.170669) (xy 112.216112 56.05092)
+ (xy 112.144102 55.94315) (xy 112.052451 55.851498) (xy 111.94468 55.779488) (xy 111.824932 55.729887) (xy 111.697808 55.7046)
+ (xy 111.568193 55.7046) (xy 111.398 55.7046) (xy 111.398 53.716106) (xy 112.136106 52.978) (xy 113.291007 52.978)
+ (xy 113.416571 53.108025) (xy 113.635016 53.259849) (xy 113.87879 53.366351) (xy 114.138608 53.423476) (xy 114.404573 53.429047)
+ (xy 114.666555 53.382852) (xy 114.914575 53.286652) (xy 115.139186 53.144109) (xy 115.331833 52.960654) (xy 115.485177 52.743274)
+ (xy 115.571138 52.550202) (xy 115.628852 52.695351) (xy 115.647162 52.729606) (xy 115.882364 52.790755) (xy 116.603119 52.07)
+ (xy 115.882364 51.349245) (xy 115.647162 51.410394) (xy 115.569585 51.590381) (xy 115.503514 51.43008) (xy 115.356299 51.208504)
+ (xy 115.208 51.059165) (xy 115.208 49.356268) (xy 115.380134 49.192347) (xy 115.540657 48.964791) (xy 115.653924 48.71039)
+ (xy 115.71562 48.438834) (xy 115.720061 48.120762) (xy 115.665971 47.847589) (xy 115.559852 47.590125) (xy 115.405746 47.358176)
+ (xy 115.209522 47.160577) (xy 114.978654 47.004855) (xy 114.721937 46.896941) (xy 114.449149 46.840946) (xy 114.170679 46.839001)
+ (xy 113.897135 46.891183) (xy 113.638936 46.995502) (xy 113.405917 47.147985) (xy 113.206953 47.342825) (xy 113.049623 47.5726)
+ (xy 112.93992 47.828557) (xy 112.882021 48.100948) (xy 112.878133 48.379397) (xy 112.928404 48.653299) (xy 113.030918 48.91222)
+ (xy 113.181771 49.146298) (xy 113.375217 49.346617) (xy 113.392 49.358281) (xy 113.392 51.060493) (xy 113.288344 51.162)
+ (xy 111.76 51.162) (xy 111.676516 51.170185) (xy 111.592972 51.177495) (xy 111.588387 51.178827) (xy 111.583635 51.179293)
+ (xy 111.503325 51.203539) (xy 111.422798 51.226935) (xy 111.41856 51.229131) (xy 111.413988 51.230512) (xy 111.339925 51.269891)
+ (xy 111.265468 51.308487) (xy 111.261735 51.311466) (xy 111.25752 51.313708) (xy 111.19251 51.366728) (xy 111.126975 51.419045)
+ (xy 111.120328 51.425598) (xy 111.120192 51.42571) (xy 111.120087 51.425836) (xy 111.117947 51.427947) (xy 109.847947 52.697947)
+ (xy 109.7947 52.76277) (xy 109.740797 52.82701) (xy 109.738496 52.831194) (xy 109.735466 52.834884) (xy 109.695831 52.908802)
+ (xy 109.655425 52.982301) (xy 109.653981 52.986851) (xy 109.651725 52.99106) (xy 109.627209 53.071248) (xy 109.601842 53.151216)
+ (xy 109.601309 53.155963) (xy 109.599914 53.160528) (xy 109.591439 53.243955) (xy 109.582089 53.327322) (xy 109.582023 53.336659)
+ (xy 109.582006 53.336831) (xy 109.582021 53.33699) (xy 109.582 53.34) (xy 109.582 55.7046) (xy 109.282193 55.7046)
+ (xy 109.155069 55.729887) (xy 109.03532 55.779488) (xy 108.92755 55.851498) (xy 108.835898 55.943149) (xy 108.763888 56.05092)
+ (xy 108.714287 56.170668) (xy 108.689 56.297792) (xy 108.689 56.427407) (xy 108.689 58.002207) (xy 108.714287 58.129331)
+ (xy 108.763888 58.24908) (xy 108.835898 58.35685) (xy 108.927549 58.448502) (xy 109.03532 58.520512) (xy 109.155068 58.570113)
+ (xy 109.209518 58.580944) (xy 109.107208 58.664386) (xy 108.927395 58.881743) (xy 108.793225 59.129885) (xy 108.709808 59.399362)
+ (xy 108.680321 59.679909) (xy 108.705888 59.960841) (xy 108.785534 60.231456) (xy 108.916227 60.481448) (xy 109.092987 60.701293)
+ (xy 109.309083 60.882619) (xy 109.449977 60.960076) (xy 109.325814 61.026096) (xy 109.107208 61.204386) (xy 108.927395 61.421743)
+ (xy 108.793225 61.669885) (xy 108.709808 61.939362) (xy 108.680321 62.219909) (xy 108.705888 62.500841) (xy 108.785534 62.771456)
+ (xy 108.916227 63.021448) (xy 109.092987 63.241293) (xy 109.309083 63.422619) (xy 109.449977 63.500076) (xy 109.325814 63.566096)
+ (xy 109.107208 63.744386) (xy 108.927395 63.961743) (xy 108.793225 64.209885) (xy 108.709808 64.479362) (xy 108.680321 64.759909)
+ (xy 108.705888 65.040841) (xy 108.785534 65.311456) (xy 108.916227 65.561448) (xy 109.092987 65.781293) (xy 109.309083 65.962619)
+ (xy 109.556282 66.098518) (xy 109.82517 66.183815) (xy 110.105505 66.215259) (xy 110.125686 66.2154) (xy 110.854314 66.2154)
+ (xy 111.13506 66.187873) (xy 111.405113 66.106339) (xy 111.654186 65.973904) (xy 111.872792 65.795614) (xy 112.052605 65.578257)
+ (xy 112.186775 65.330115) (xy 112.270192 65.060638) (xy 112.299679 64.780091) (xy 112.274112 64.499159) (xy 112.194466 64.228544)
+ (xy 112.063773 63.978552) (xy 111.887013 63.758707) (xy 111.670917 63.577381) (xy 111.530022 63.499923) (xy 111.654186 63.433904)
+ (xy 111.872792 63.255614) (xy 112.052605 63.038257) (xy 112.186775 62.790115) (xy 112.270192 62.520638) (xy 112.299679 62.240091)
+ (xy 112.274112 61.959159) (xy 112.194466 61.688544) (xy 112.063773 61.438552) (xy 111.887013 61.218707) (xy 111.670917 61.037381)
+ (xy 111.530022 60.959923) (xy 111.654186 60.893904) (xy 111.872792 60.715614) (xy 111.97009 60.598) (xy 112.018894 60.598)
+ (xy 112.757 61.336106) (xy 112.757 80.645) (xy 112.765185 80.728483) (xy 112.772495 80.812028) (xy 112.773827 80.816612)
+ (xy 112.774293 80.821365) (xy 112.798539 80.901674) (xy 112.821935 80.982202) (xy 112.824131 80.986439) (xy 112.825512 80.991012)
+ (xy 112.864891 81.065074) (xy 112.903487 81.139532) (xy 112.906466 81.143264) (xy 112.908708 81.14748) (xy 112.961728 81.212489)
+ (xy 113.014045 81.278025) (xy 113.020598 81.284671) (xy 113.02071 81.284808) (xy 113.020836 81.284912) (xy 113.022947 81.287053)
+ (xy 116.567 84.831106) (xy 116.567 86.858529) (xy 116.42099 86.954076) (xy 116.186437 87.183767) (xy 116.000965 87.454642)
+ (xy 115.871638 87.756384) (xy 115.803383 88.077498) (xy 115.798799 88.405755) (xy 115.858062 88.72865) (xy 115.978913 89.033884)
+ (xy 116.156749 89.309833) (xy 116.384798 89.545984) (xy 116.654371 89.733342) (xy 116.955203 89.864772) (xy 117.275833 89.935267)
+ (xy 117.604049 89.942142) (xy 117.92735 89.885136) (xy 118.233421 89.766419) (xy 118.510604 89.590513) (xy 118.748341 89.364119)
+ (xy 118.937577 89.09586) (xy 119.071104 88.795953) (xy 119.143836 88.475823) (xy 119.149072 88.100856) (xy 119.149072 92.287)
+ (xy 115.358 92.287) (xy 115.358 88.265) (xy 115.348463 88.167735) (xy 115.339946 88.07038) (xy 115.338393 88.065038)
+ (xy 115.337851 88.0595) (xy 115.309593 87.965908) (xy 115.282338 87.872094) (xy 115.279778 87.867157) (xy 115.27817 87.861828)
+ (xy 115.232271 87.775505) (xy 115.187314 87.688773) (xy 115.183843 87.684425) (xy 115.181231 87.679512) (xy 115.119469 87.603784)
+ (xy 115.058492 87.527399) (xy 115.050855 87.519655) (xy 115.050726 87.519497) (xy 115.050579 87.519375) (xy 115.048119 87.516881)
+ (xy 111.548 84.016762) (xy 111.548 80.266274) (xy 111.570931 80.261713) (xy 111.69068 80.212112) (xy 111.79845 80.140102)
+ (xy 111.890102 80.048451) (xy 111.962112 79.94068) (xy 112.011713 79.820932) (xy 112.037 79.693808) (xy 112.037 79.564193)
+ (xy 112.037 77.786193) (xy 112.011713 77.659069) (xy 111.962112 77.53932) (xy 111.890102 77.43155) (xy 111.798451 77.339898)
+ (xy 111.69068 77.267888) (xy 111.570932 77.218287) (xy 111.548 77.213725) (xy 111.548 73.66) (xy 111.538458 73.562689)
+ (xy 111.529945 73.465379) (xy 111.528394 73.460041) (xy 111.527851 73.4545) (xy 111.499588 73.360892) (xy 111.472338 73.267093)
+ (xy 111.469778 73.262154) (xy 111.46817 73.256828) (xy 111.422271 73.170505) (xy 111.377313 73.083772) (xy 111.373844 73.079426)
+ (xy 111.371231 73.074512) (xy 111.30944 72.998748) (xy 111.248491 72.922399) (xy 111.240856 72.914657) (xy 111.240726 72.914497)
+ (xy 111.240577 72.914374) (xy 111.238119 72.911881) (xy 108.698119 70.371881) (xy 108.62258 70.309832) (xy 108.547735 70.24703)
+ (xy 108.542862 70.244351) (xy 108.538561 70.240818) (xy 108.452411 70.194625) (xy 108.366791 70.147555) (xy 108.361487 70.145872)
+ (xy 108.356585 70.143244) (xy 108.263122 70.114669) (xy 108.169971 70.08512) (xy 108.164443 70.084499) (xy 108.159122 70.082873)
+ (xy 108.061866 70.072994) (xy 107.964772 70.062103) (xy 107.953901 70.062027) (xy 107.953693 70.062006) (xy 107.953498 70.062024)
+ (xy 107.95 70.062) (xy 104.163 70.062) (xy 104.163 59.119808) (xy 104.163 58.990193) (xy 104.163 50.100193)
+ (xy 104.137713 49.973069) (xy 104.088112 49.85332) (xy 104.016102 49.74555) (xy 103.924451 49.653898) (xy 103.81668 49.581888)
+ (xy 103.696932 49.532287) (xy 103.569808 49.507) (xy 103.440193 49.507) (xy 94.550193 49.507) (xy 94.423069 49.532287)
+ (xy 94.30332 49.581888) (xy 94.19555 49.653898) (xy 94.103898 49.745549) (xy 94.031888 49.85332) (xy 93.982287 49.973068)
+ (xy 93.957 50.100192) (xy 93.957 50.229807) (xy 93.957 59.119807) (xy 93.982287 59.246931) (xy 94.031888 59.36668)
+ (xy 94.103898 59.47445) (xy 94.195549 59.566102) (xy 94.30332 59.638112) (xy 94.423068 59.687713) (xy 94.550192 59.713)
+ (xy 94.679807 59.713) (xy 103.569807 59.713) (xy 103.696931 59.687713) (xy 103.81668 59.638112) (xy 103.92445 59.566102)
+ (xy 104.016102 59.474451) (xy 104.088112 59.36668) (xy 104.137713 59.246932) (xy 104.163 59.119808) (xy 104.163 70.062)
+ (xy 102.729645 70.062) (xy 102.590866 69.922249) (xy 102.339351 69.752599) (xy 102.059674 69.635034) (xy 101.762488 69.574031)
+ (xy 101.459113 69.571913) (xy 101.161104 69.628761) (xy 100.879813 69.74241) (xy 100.625954 69.908531) (xy 100.556012 69.977022)
+ (xy 100.532112 69.91932) (xy 100.460102 69.81155) (xy 100.368451 69.719898) (xy 100.26068 69.647888) (xy 100.140932 69.598287)
+ (xy 100.013808 69.573) (xy 99.884193 69.573) (xy 99.392 69.573) (xy 99.2275 69.7375) (xy 99.2275 70.9525)
+ (xy 99.2475 70.9525) (xy 99.2475 71.2875) (xy 99.2275 71.2875) (xy 99.2275 72.5025) (xy 99.392 72.667)
+ (xy 99.884193 72.667) (xy 100.013808 72.667) (xy 100.140932 72.641713) (xy 100.26068 72.592112) (xy 100.368451 72.520102)
+ (xy 100.460102 72.42845) (xy 100.532112 72.32068) (xy 100.555134 72.265099) (xy 100.592507 72.3038) (xy 100.841629 72.476944)
+ (xy 101.119638 72.598403) (xy 101.415943 72.66355) (xy 101.719259 72.669904) (xy 102.018032 72.617222) (xy 102.300882 72.507511)
+ (xy 102.557037 72.344951) (xy 102.732352 72.178) (xy 107.511762 72.178) (xy 109.432 74.098238) (xy 109.432 77.213725)
+ (xy 109.409069 77.218287) (xy 109.28932 77.267888) (xy 109.18155 77.339898) (xy 109.089898 77.431549) (xy 109.017888 77.53932)
+ (xy 108.968287 77.659068) (xy 108.943 77.786192) (xy 108.943 77.915807) (xy 108.943 79.693807) (xy 108.968287 79.820931)
+ (xy 109.017888 79.94068) (xy 109.089898 80.04845) (xy 109.181549 80.140102) (xy 109.28932 80.212112) (xy 109.409068 80.261713)
+ (xy 109.432 80.266274) (xy 109.432 84.455) (xy 109.441541 84.55231) (xy 109.450055 84.649621) (xy 109.451605 84.654958)
+ (xy 109.452149 84.6605) (xy 109.480411 84.754107) (xy 109.507662 84.847907) (xy 109.510221 84.852845) (xy 109.51183 84.858172)
+ (xy 109.557707 84.944455) (xy 109.602686 85.031228) (xy 109.606157 85.035577) (xy 109.608769 85.040488) (xy 109.670512 85.116193)
+ (xy 109.731508 85.192601) (xy 109.739144 85.200344) (xy 109.739274 85.200503) (xy 109.73942 85.200624) (xy 109.741881 85.203119)
+ (xy 113.242 88.703238) (xy 113.242 93.345) (xy 113.242 97.155) (xy 113.251541 97.25231) (xy 113.260055 97.349621)
+ (xy 113.261605 97.354958) (xy 113.262149 97.3605) (xy 113.290411 97.454107) (xy 113.317662 97.547907) (xy 113.320221 97.552845)
+ (xy 113.32183 97.558172) (xy 113.367707 97.644455) (xy 113.412686 97.731228) (xy 113.416157 97.735577) (xy 113.418769 97.740488)
+ (xy 113.480512 97.816193) (xy 113.541508 97.892601) (xy 113.549144 97.900344) (xy 113.549274 97.900503) (xy 113.54942 97.900624)
+ (xy 113.551881 97.903119) (xy 114.512 98.863238) (xy 114.512 104.775) (xy 114.512 110.41865) (xy 114.377381 110.579083)
+ (xy 114.309806 110.702) (xy 111.405817 110.702) (xy 111.405817 90.063303) (xy 111.355203 89.762803) (xy 111.246936 89.477952)
+ (xy 111.203736 89.397127) (xy 110.949146 89.312735) (xy 110.712265 89.549616) (xy 110.712265 89.075854) (xy 110.627873 88.821264)
+ (xy 110.349897 88.696399) (xy 110.052902 88.628165) (xy 109.748303 88.619183) (xy 109.447803 88.669797) (xy 109.162952 88.778064)
+ (xy 109.082127 88.821264) (xy 108.997735 89.075854) (xy 109.855 89.933119) (xy 110.712265 89.075854) (xy 110.712265 89.549616)
+ (xy 110.091881 90.17) (xy 110.949146 91.027265) (xy 111.203736 90.942873) (xy 111.328601 90.664897) (xy 111.396835 90.367902)
+ (xy 111.405817 90.063303) (xy 111.405817 110.702) (xy 110.712265 110.702) (xy 110.712265 91.264146) (xy 109.855 90.406881)
+ (xy 109.618119 90.643762) (xy 109.618119 90.17) (xy 108.760854 89.312735) (xy 108.506264 89.397127) (xy 108.381399 89.675103)
+ (xy 108.313165 89.972098) (xy 108.304183 90.276697) (xy 108.354797 90.577197) (xy 108.463064 90.862048) (xy 108.506264 90.942873)
+ (xy 108.760854 91.027265) (xy 109.618119 90.17) (xy 109.618119 90.643762) (xy 108.997735 91.264146) (xy 109.082127 91.518736)
+ (xy 109.360103 91.643601) (xy 109.657098 91.711835) (xy 109.961697 91.720817) (xy 110.262197 91.670203) (xy 110.547048 91.561936)
+ (xy 110.627873 91.518736) (xy 110.712265 91.264146) (xy 110.712265 110.702) (xy 109.199659 110.702) (xy 109.159602 110.64205)
+ (xy 109.067951 110.550398) (xy 108.977558 110.489999) (xy 109.06795 110.429602) (xy 109.159602 110.337951) (xy 109.231612 110.23018)
+ (xy 109.281213 110.110432) (xy 109.3065 109.983308) (xy 109.3065 109.853693) (xy 109.3065 108.456693) (xy 109.281213 108.329569)
+ (xy 109.231612 108.20982) (xy 109.159602 108.10205) (xy 109.067951 108.010398) (xy 108.96018 107.938388) (xy 108.840432 107.888787)
+ (xy 108.713308 107.8635) (xy 108.583693 107.8635) (xy 107.186693 107.8635) (xy 107.059569 107.888787) (xy 106.93982 107.938388)
+ (xy 106.83205 108.010398) (xy 106.740398 108.102049) (xy 106.668388 108.20982) (xy 106.618787 108.329568) (xy 106.618088 108.333081)
+ (xy 106.550339 108.353535) (xy 106.469797 108.376935) (xy 106.465558 108.379132) (xy 106.460988 108.380512) (xy 106.386944 108.419882)
+ (xy 106.312468 108.458487) (xy 106.308735 108.461466) (xy 106.30452 108.463708) (xy 106.239504 108.516733) (xy 106.173974 108.569046)
+ (xy 106.167328 108.575598) (xy 106.167192 108.57571) (xy 106.167087 108.575836) (xy 106.164947 108.577947) (xy 103.890894 110.852)
+ (xy 101.688266 110.852) (xy 101.688266 109.105737) (xy 101.639876 108.842948) (xy 101.541148 108.594649) (xy 101.522838 108.560394)
+ (xy 101.287636 108.499245) (xy 101.050755 108.736126) (xy 101.050755 108.262364) (xy 100.989606 108.027162) (xy 100.744221 107.921399)
+ (xy 100.482917 107.865541) (xy 100.215737 107.861734) (xy 99.952948 107.910124) (xy 99.704649 108.008852) (xy 99.670394 108.027162)
+ (xy 99.609245 108.262364) (xy 100.33 108.983119) (xy 101.050755 108.262364) (xy 101.050755 108.736126) (xy 100.566881 109.22)
+ (xy 101.287636 109.940755) (xy 101.522838 109.879606) (xy 101.628601 109.634221) (xy 101.684459 109.372917) (xy 101.688266 109.105737)
+ (xy 101.688266 110.852) (xy 101.340118 110.852) (xy 101.19885 110.709741) (xy 100.978306 110.560983) (xy 100.808421 110.489569)
+ (xy 100.955351 110.431148) (xy 100.989606 110.412838) (xy 101.050755 110.177636) (xy 100.33 109.456881) (xy 100.093119 109.693762)
+ (xy 100.093119 109.22) (xy 99.372364 108.499245) (xy 99.137162 108.560394) (xy 99.09501 108.65819) (xy 99.061449 108.572403)
+ (xy 99.034836 108.522615) (xy 98.8925 108.482025) (xy 98.8925 72.5025) (xy 98.8925 71.2875) (xy 98.8725 71.2875)
+ (xy 98.8725 70.9525) (xy 98.8925 70.9525) (xy 98.8925 69.7375) (xy 98.728 69.573) (xy 98.235807 69.573)
+ (xy 98.106192 69.573) (xy 97.979068 69.598287) (xy 97.85932 69.647888) (xy 97.751549 69.719898) (xy 97.659898 69.81155)
+ (xy 97.587888 69.91932) (xy 97.564361 69.976119) (xy 97.510866 69.922249) (xy 97.259351 69.752599) (xy 96.979674 69.635034)
+ (xy 96.682488 69.574031) (xy 96.379113 69.571913) (xy 96.081104 69.628761) (xy 95.799813 69.74241) (xy 95.545954 69.908531)
+ (xy 95.329195 70.120796) (xy 95.266746 70.212) (xy 89.177066 70.212) (xy 89.177066 58.268309) (xy 89.118139 57.970704)
+ (xy 89.002529 57.690213) (xy 88.83464 57.43752) (xy 88.620866 57.222249) (xy 88.369351 57.052599) (xy 88.089674 56.935034)
+ (xy 87.792488 56.874031) (xy 87.489113 56.871913) (xy 87.191104 56.928761) (xy 86.909813 57.04241) (xy 86.655954 57.208531)
+ (xy 86.439195 57.420796) (xy 86.267794 57.671121) (xy 86.148279 57.949971) (xy 86.085203 58.246723) (xy 86.080967 58.550076)
+ (xy 86.101878 58.664015) (xy 83.443894 61.322) (xy 80.451186 61.322) (xy 80.45056 61.320479) (xy 80.241322 61.005551)
+ (xy 79.9749 60.737262) (xy 79.661441 60.525831) (xy 79.312884 60.379312) (xy 78.942506 60.303284) (xy 78.564415 60.300644)
+ (xy 78.193012 60.371493) (xy 77.842443 60.513132) (xy 77.526062 60.720166) (xy 77.25592 60.984709) (xy 77.042306 61.296685)
+ (xy 76.893356 61.64421) (xy 76.814745 62.014048) (xy 76.809465 62.392112) (xy 76.87772 62.764) (xy 77.016908 63.115549)
+ (xy 77.221728 63.433368) (xy 77.484379 63.70535) (xy 77.794855 63.921137) (xy 78.141332 64.072509) (xy 78.510613 64.153701)
+ (xy 78.88863 64.161619) (xy 79.260986 64.095963) (xy 79.613498 63.959232) (xy 79.932739 63.756636) (xy 80.206548 63.495891)
+ (xy 80.424498 63.186928) (xy 80.446282 63.138) (xy 83.82 63.138) (xy 83.903483 63.129814) (xy 83.987028 63.122505)
+ (xy 83.991612 63.121172) (xy 83.996365 63.120707) (xy 84.076674 63.09646) (xy 84.157202 63.073065) (xy 84.161439 63.070868)
+ (xy 84.166012 63.069488) (xy 84.240074 63.030108) (xy 84.314532 62.991513) (xy 84.318264 62.988533) (xy 84.32248 62.986292)
+ (xy 84.387489 62.933271) (xy 84.453025 62.880955) (xy 84.459671 62.874401) (xy 84.459808 62.87429) (xy 84.459912 62.874163)
+ (xy 84.462053 62.872053) (xy 87.384143 59.949962) (xy 87.445943 59.96355) (xy 87.749259 59.969904) (xy 88.048032 59.917222)
+ (xy 88.330882 59.807511) (xy 88.587037 59.644951) (xy 88.806737 59.435733) (xy 88.981617 59.187825) (xy 89.105014 58.910672)
+ (xy 89.172227 58.614829) (xy 89.177066 58.268309) (xy 89.177066 70.212) (xy 89.177 70.212) (xy 89.177 70.166193)
+ (xy 89.151713 70.039069) (xy 89.102112 69.91932) (xy 89.030102 69.81155) (xy 88.938451 69.719898) (xy 88.83068 69.647888)
+ (xy 88.710932 69.598287) (xy 88.583808 69.573) (xy 88.454193 69.573) (xy 86.676193 69.573) (xy 86.549069 69.598287)
+ (xy 86.42932 69.647888) (xy 86.32155 69.719898) (xy 86.229898 69.811549) (xy 86.157888 69.91932) (xy 86.108287 70.039068)
+ (xy 86.083 70.166192) (xy 86.083 70.295807) (xy 86.083 71.382894) (xy 81.907947 75.557947) (xy 81.8547 75.62277)
+ (xy 81.800797 75.68701) (xy 81.798496 75.691194) (xy 81.795466 75.694884) (xy 81.755831 75.768802) (xy 81.715425 75.842301)
+ (xy 81.713981 75.846851) (xy 81.711725 75.85106) (xy 81.687209 75.931248) (xy 81.661842 76.011216) (xy 81.661309 76.015963)
+ (xy 81.659914 76.020528) (xy 81.651439 76.103955) (xy 81.642089 76.187322) (xy 81.642023 76.196659) (xy 81.642006 76.196831)
+ (xy 81.642021 76.19699) (xy 81.642 76.2) (xy 81.642 87.63) (xy 81.650185 87.713483) (xy 81.657495 87.797028)
+ (xy 81.658827 87.801612) (xy 81.659293 87.806365) (xy 81.683539 87.886674) (xy 81.706935 87.967202) (xy 81.709131 87.971439)
+ (xy 81.710512 87.976012) (xy 81.749891 88.050074) (xy 81.788487 88.124532) (xy 81.791466 88.128264) (xy 81.793708 88.13248)
+ (xy 81.846728 88.197489) (xy 81.899045 88.263025) (xy 81.905598 88.269671) (xy 81.90571 88.269808) (xy 81.905836 88.269912)
+ (xy 81.907947 88.272053) (xy 82.908 89.272106) (xy 82.908 89.345807) (xy 82.908 91.123807) (xy 82.933287 91.250931)
+ (xy 82.982888 91.37068) (xy 83.054898 91.47845) (xy 83.146549 91.570102) (xy 83.25432 91.642112) (xy 83.374068 91.691713)
+ (xy 83.501192 91.717) (xy 83.630807 91.717) (xy 85.408807 91.717) (xy 85.535931 91.691713) (xy 85.65568 91.642112)
+ (xy 85.76345 91.570102) (xy 85.855102 91.478451) (xy 85.927112 91.37068) (xy 85.976713 91.250932) (xy 86.002 91.123808)
+ (xy 86.002 90.994193) (xy 86.002 89.216193) (xy 85.976713 89.089069) (xy 85.947265 89.017974) (xy 85.947265 79.834146)
+ (xy 85.09 78.976881) (xy 84.853119 79.213762) (xy 84.853119 78.74) (xy 83.995854 77.882735) (xy 83.741264 77.967127)
+ (xy 83.616399 78.245103) (xy 83.548165 78.542098) (xy 83.539183 78.846697) (xy 83.589797 79.147197) (xy 83.698064 79.432048)
+ (xy 83.741264 79.512873) (xy 83.995854 79.597265) (xy 84.853119 78.74) (xy 84.853119 79.213762) (xy 84.232735 79.834146)
+ (xy 84.317127 80.088736) (xy 84.595103 80.213601) (xy 84.892098 80.281835) (xy 85.196697 80.290817) (xy 85.497197 80.240203)
+ (xy 85.782048 80.131936) (xy 85.862873 80.088736) (xy 85.947265 79.834146) (xy 85.947265 89.017974) (xy 85.927112 88.96932)
+ (xy 85.855102 88.86155) (xy 85.763451 88.769898) (xy 85.65568 88.697888) (xy 85.535932 88.648287) (xy 85.408808 88.623)
+ (xy 85.279193 88.623) (xy 84.827106 88.623) (xy 83.458 87.253894) (xy 83.458 76.576106) (xy 87.367106 72.667)
+ (xy 88.583807 72.667) (xy 88.710931 72.641713) (xy 88.83068 72.592112) (xy 88.93845 72.520102) (xy 89.030102 72.428451)
+ (xy 89.102112 72.32068) (xy 89.151713 72.200932) (xy 89.177 72.073808) (xy 89.177 72.028) (xy 95.264662 72.028)
+ (xy 95.30176 72.085565) (xy 95.512507 72.3038) (xy 95.761629 72.476944) (xy 96.039638 72.598403) (xy 96.335943 72.66355)
+ (xy 96.639259 72.669904) (xy 96.938032 72.617222) (xy 97.220882 72.507511) (xy 97.477037 72.344951) (xy 97.563741 72.262383)
+ (xy 97.587888 72.32068) (xy 97.659898 72.42845) (xy 97.751549 72.520102) (xy 97.85932 72.592112) (xy 97.979068 72.641713)
+ (xy 98.106192 72.667) (xy 98.235807 72.667) (xy 98.728 72.667) (xy 98.8925 72.5025) (xy 98.8925 108.482025)
+ (xy 98.793179 108.453702) (xy 98.556298 108.690583) (xy 98.556298 108.216821) (xy 98.487385 107.975164) (xy 98.23113 107.86303)
+ (xy 97.957922 107.803043) (xy 97.678261 107.79751) (xy 97.402894 107.846642) (xy 97.142403 107.948551) (xy 97.092615 107.975164)
+ (xy 97.023702 108.216821) (xy 97.79 108.983119) (xy 98.556298 108.216821) (xy 98.556298 108.690583) (xy 98.026881 109.22)
+ (xy 98.793179 109.986298) (xy 99.034836 109.917385) (xy 99.09386 109.782498) (xy 99.118852 109.845351) (xy 99.137162 109.879606)
+ (xy 99.372364 109.940755) (xy 100.093119 109.22) (xy 100.093119 109.693762) (xy 99.609245 110.177636) (xy 99.670394 110.412838)
+ (xy 99.850703 110.490553) (xy 99.698498 110.552048) (xy 99.475899 110.697712) (xy 99.318344 110.852) (xy 98.889612 110.852)
+ (xy 98.699522 110.660577) (xy 98.468654 110.504855) (xy 98.437164 110.491618) (xy 98.437597 110.491449) (xy 98.487385 110.464836)
+ (xy 98.556298 110.223179) (xy 97.79 109.456881) (xy 97.553119 109.693762) (xy 97.553119 109.22) (xy 96.786821 108.453702)
+ (xy 96.545164 108.522615) (xy 96.43303 108.77887) (xy 96.373043 109.052078) (xy 96.36751 109.331739) (xy 96.416642 109.607106)
+ (xy 96.518551 109.867597) (xy 96.545164 109.917385) (xy 96.786821 109.986298) (xy 97.553119 109.22) (xy 97.553119 109.693762)
+ (xy 97.023702 110.223179) (xy 97.092615 110.464836) (xy 97.146488 110.48841) (xy 97.128936 110.495502) (xy 96.895917 110.647985)
+ (xy 96.696953 110.842825) (xy 96.539623 111.0726) (xy 96.42992 111.328557) (xy 96.372021 111.600948) (xy 96.368133 111.879397)
+ (xy 96.418404 112.153299) (xy 96.520918 112.41222) (xy 96.671771 112.646298) (xy 96.778674 112.757) (xy 88.642242 112.757)
+ (xy 88.710134 112.692347) (xy 88.870657 112.464791) (xy 88.983924 112.21039) (xy 89.04562 111.938834) (xy 89.050061 111.620762)
+ (xy 88.995971 111.347589) (xy 88.889852 111.090125) (xy 88.735746 110.858176) (xy 88.539522 110.660577) (xy 88.538 110.65955)
+ (xy 88.538 110.316268) (xy 88.710134 110.152347) (xy 88.870657 109.924791) (xy 88.983924 109.67039) (xy 89.04562 109.398834)
+ (xy 89.050061 109.080762) (xy 88.995971 108.807589) (xy 88.889852 108.550125) (xy 88.735746 108.318176) (xy 88.539522 108.120577)
+ (xy 88.308654 107.964855) (xy 88.051937 107.856941) (xy 87.779149 107.800946) (xy 87.500679 107.799001) (xy 87.227135 107.851183)
+ (xy 86.968936 107.955502) (xy 86.735917 108.107985) (xy 86.640817 108.201113) (xy 86.640817 78.633303) (xy 86.590203 78.332803)
+ (xy 86.481936 78.047952) (xy 86.438736 77.967127) (xy 86.184146 77.882735) (xy 85.947265 78.119616) (xy 85.947265 77.645854)
+ (xy 85.862873 77.391264) (xy 85.584897 77.266399) (xy 85.287902 77.198165) (xy 84.983303 77.189183) (xy 84.682803 77.239797)
+ (xy 84.397952 77.348064) (xy 84.317127 77.391264) (xy 84.232735 77.645854) (xy 85.09 78.503119) (xy 85.947265 77.645854)
+ (xy 85.947265 78.119616) (xy 85.326881 78.74) (xy 86.184146 79.597265) (xy 86.438736 79.512873) (xy 86.563601 79.234897)
+ (xy 86.631835 78.937902) (xy 86.640817 78.633303) (xy 86.640817 108.201113) (xy 86.536953 108.302825) (xy 86.379623 108.5326)
+ (xy 86.26992 108.788557) (xy 86.212021 109.060948) (xy 86.208133 109.339397) (xy 86.258404 109.613299) (xy 86.360918 109.87222)
+ (xy 86.511771 110.106298) (xy 86.705217 110.306617) (xy 86.722 110.318281) (xy 86.722 110.661613) (xy 86.536953 110.842825)
+ (xy 86.53067 110.852) (xy 83.97249 110.852) (xy 83.656883 110.852) (xy 83.553181 110.748297) (xy 83.794836 110.679385)
+ (xy 83.90697 110.42313) (xy 83.966957 110.149922) (xy 83.97249 109.870261) (xy 83.923358 109.594894) (xy 83.821449 109.334403)
+ (xy 83.794836 109.284615) (xy 83.553179 109.215702) (xy 83.316298 109.452583) (xy 83.316298 108.978821) (xy 83.247385 108.737164)
+ (xy 82.99113 108.62503) (xy 82.717922 108.565043) (xy 82.57311 108.562177) (xy 82.57311 102.491685) (xy 82.475482 101.998627)
+ (xy 82.283944 101.533922) (xy 82.005793 101.115271) (xy 81.651622 100.758619) (xy 81.234923 100.477552) (xy 80.771567 100.282775)
+ (xy 80.668 100.261515) (xy 80.668 68.644807) (xy 80.668 67.642) (xy 80.668 66.978) (xy 80.668 65.975193)
+ (xy 80.642713 65.848069) (xy 80.593112 65.72832) (xy 80.521102 65.62055) (xy 80.429451 65.528898) (xy 80.32168 65.456888)
+ (xy 80.201932 65.407287) (xy 80.074808 65.382) (xy 79.945193 65.382) (xy 79.072 65.382) (xy 78.9075 65.5465)
+ (xy 78.9075 67.1425) (xy 80.5035 67.1425) (xy 80.668 66.978) (xy 80.668 67.642) (xy 80.5035 67.4775)
+ (xy 78.9075 67.4775) (xy 78.9075 69.0735) (xy 79.072 69.238) (xy 79.945193 69.238) (xy 80.074808 69.238)
+ (xy 80.201932 69.212713) (xy 80.32168 69.163112) (xy 80.429451 69.091102) (xy 80.521102 68.99945) (xy 80.593112 68.89168)
+ (xy 80.642713 68.771931) (xy 80.668 68.644807) (xy 80.668 100.261515) (xy 80.279203 100.181707) (xy 79.776585 100.178198)
+ (xy 79.282858 100.272382) (xy 78.816827 100.46067) (xy 78.5725 100.620553) (xy 78.5725 69.0735) (xy 78.5725 67.4775)
+ (xy 78.5725 67.1425) (xy 78.5725 65.5465) (xy 78.408 65.382) (xy 77.534807 65.382) (xy 77.405192 65.382)
+ (xy 77.278068 65.407287) (xy 77.15832 65.456888) (xy 77.050549 65.528898) (xy 76.958898 65.62055) (xy 76.886888 65.72832)
+ (xy 76.837287 65.848069) (xy 76.812 65.975193) (xy 76.812 66.978) (xy 76.9765 67.1425) (xy 78.5725 67.1425)
+ (xy 78.5725 67.4775) (xy 76.9765 67.4775) (xy 76.812 67.642) (xy 76.812 68.644807) (xy 76.837287 68.771931)
+ (xy 76.886888 68.89168) (xy 76.958898 68.99945) (xy 77.050549 69.091102) (xy 77.15832 69.163112) (xy 77.278068 69.212713)
+ (xy 77.405192 69.238) (xy 77.534807 69.238) (xy 78.408 69.238) (xy 78.5725 69.0735) (xy 78.5725 100.620553)
+ (xy 78.396244 100.735892) (xy 78.037128 101.087564) (xy 77.753159 101.502291) (xy 77.555152 101.964276) (xy 77.450649 102.455923)
+ (xy 77.443631 102.958504) (xy 77.534366 103.452877) (xy 77.719396 103.92021) (xy 77.991675 104.342705) (xy 78.340831 104.704267)
+ (xy 78.753566 104.991124) (xy 79.214157 105.192352) (xy 79.705062 105.300284) (xy 80.207582 105.310811) (xy 80.702576 105.22353)
+ (xy 81.17119 105.041766) (xy 81.595575 104.772444) (xy 81.959566 104.42582) (xy 82.249298 104.015098) (xy 82.453736 103.555923)
+ (xy 82.565093 103.065783) (xy 82.57311 102.491685) (xy 82.57311 108.562177) (xy 82.438261 108.55951) (xy 82.162894 108.608642)
+ (xy 81.902403 108.710551) (xy 81.852615 108.737164) (xy 81.783702 108.978821) (xy 82.55 109.745119) (xy 83.316298 108.978821)
+ (xy 83.316298 109.452583) (xy 82.786881 109.982) (xy 82.801023 109.996142) (xy 82.564141 110.233023) (xy 82.55 110.218881)
+ (xy 82.313119 110.455762) (xy 82.313119 109.982) (xy 81.546821 109.215702) (xy 81.305164 109.284615) (xy 81.19303 109.54087)
+ (xy 81.133043 109.814078) (xy 81.12751 110.093739) (xy 81.176642 110.369106) (xy 81.278551 110.629597) (xy 81.305164 110.679385)
+ (xy 81.546821 110.748298) (xy 82.313119 109.982) (xy 82.313119 110.455762) (xy 81.783702 110.985179) (xy 81.852615 111.226836)
+ (xy 82.10887 111.33897) (xy 82.283566 111.377327) (xy 82.278834 111.382059) (xy 82.147135 111.407183) (xy 81.888936 111.511502)
+ (xy 81.655917 111.663985) (xy 81.456953 111.858825) (xy 81.299623 112.0886) (xy 81.18992 112.344557) (xy 81.132021 112.616948)
+ (xy 81.128133 112.895397) (xy 81.178404 113.169299) (xy 81.216294 113.265) (xy 81.109612 113.265) (xy 80.919522 113.073577)
+ (xy 80.688654 112.917855) (xy 80.431937 112.809941) (xy 80.265866 112.775851) (xy 80.393714 112.753309) (xy 80.653344 112.652605)
+ (xy 80.88847 112.50339) (xy 81.090134 112.311347) (xy 81.250657 112.083791) (xy 81.363924 111.82939) (xy 81.42562 111.557834)
+ (xy 81.430061 111.239762) (xy 81.375971 110.966589) (xy 81.269852 110.709125) (xy 81.115746 110.477176) (xy 80.919522 110.279577)
+ (xy 80.688654 110.123855) (xy 80.431937 110.015941) (xy 80.159149 109.959946) (xy 79.880679 109.958001) (xy 79.607135 110.010183)
+ (xy 79.348936 110.114502) (xy 79.115917 110.266985) (xy 78.916953 110.461825) (xy 78.759623 110.6916) (xy 78.64992 110.947557)
+ (xy 78.592021 111.219948) (xy 78.588133 111.498397) (xy 78.638404 111.772299) (xy 78.740918 112.03122) (xy 78.891771 112.265298)
+ (xy 79.085217 112.465617) (xy 79.313887 112.624547) (xy 79.569073 112.736035) (xy 79.752715 112.776411) (xy 79.607135 112.804183)
+ (xy 79.348936 112.908502) (xy 79.115917 113.060985) (xy 78.916953 113.255825) (xy 78.759623 113.4856) (xy 78.64992 113.741557)
+ (xy 78.592021 114.013948) (xy 78.588133 114.292397) (xy 78.638404 114.566299) (xy 78.740918 114.82522) (xy 78.891771 115.059298)
+ (xy 79.085217 115.259617) (xy 79.313887 115.418547) (xy 79.517374 115.507448) (xy 79.348936 115.575502) (xy 79.115917 115.727985)
+ (xy 78.916953 115.922825) (xy 78.91067 115.932) (xy 78.105 115.932) (xy 78.021562 115.940181) (xy 77.937972 115.947494)
+ (xy 77.933381 115.948827) (xy 77.928635 115.949293) (xy 77.848367 115.973527) (xy 77.767798 115.996935) (xy 77.76356 115.999131)
+ (xy 77.758988 116.000512) (xy 77.684925 116.039891) (xy 77.610468 116.078487) (xy 77.606735 116.081466) (xy 77.60252 116.083708)
+ (xy 77.53751 116.136728) (xy 77.471975 116.189045) (xy 77.465328 116.195598) (xy 77.465192 116.19571) (xy 77.465087 116.195836)
+ (xy 77.462947 116.197947) (xy 76.827947 116.832947) (xy 76.7747 116.89777) (xy 76.720797 116.96201) (xy 76.718496 116.966194)
+ (xy 76.715466 116.969884) (xy 76.675831 117.043802) (xy 76.635425 117.117301) (xy 76.633981 117.121851) (xy 76.631725 117.12606)
+ (xy 76.607209 117.206248) (xy 76.581842 117.286216) (xy 76.581309 117.290963) (xy 76.579914 117.295528) (xy 76.571439 117.378955)
+ (xy 76.562089 117.462322) (xy 76.562023 117.471659) (xy 76.562006 117.471831) (xy 76.562021 117.47199) (xy 76.562 117.475)
+ (xy 76.562 120.65) (xy 76.570185 120.733483) (xy 76.577495 120.817028) (xy 76.578827 120.821612) (xy 76.579293 120.826365)
+ (xy 76.603539 120.906674) (xy 76.626935 120.987202) (xy 76.629131 120.991439) (xy 76.630512 120.996012) (xy 76.669891 121.070074)
+ (xy 76.708487 121.144532) (xy 76.711466 121.148264) (xy 76.713708 121.15248) (xy 76.766728 121.217489) (xy 76.819045 121.283025)
+ (xy 76.825598 121.289671) (xy 76.82571 121.289808) (xy 76.825836 121.289912) (xy 76.827947 121.292053) (xy 79.367947 123.832053)
+ (xy 79.43277 123.885299) (xy 79.49701 123.939203) (xy 79.501194 123.941503) (xy 79.504884 123.944534) (xy 79.57882 123.984178)
+ (xy 79.652301 124.024575) (xy 79.656849 124.026017) (xy 79.661059 124.028275) (xy 79.741275 124.052799) (xy 79.821216 124.078158)
+ (xy 79.825961 124.07869) (xy 79.830527 124.080086) (xy 79.913964 124.088561) (xy 79.997322 124.097911) (xy 80.006658 124.097976)
+ (xy 80.00683 124.097994) (xy 80.00699 124.097978) (xy 80.01 124.098) (xy 84.713894 124.098) (xy 85.717947 125.102053)
+ (xy 85.78277 125.155299) (xy 85.84701 125.209203) (xy 85.851194 125.211503) (xy 85.854884 125.214534) (xy 85.928802 125.254168)
+ (xy 86.002301 125.294575) (xy 86.006851 125.296018) (xy 86.01106 125.298275) (xy 86.091248 125.32279) (xy 86.171216 125.348158)
+ (xy 86.175963 125.34869) (xy 86.180528 125.350086) (xy 86.263955 125.35856) (xy 86.347322 125.367911) (xy 86.356659 125.367976)
+ (xy 86.356831 125.367994) (xy 86.35699 125.367978) (xy 86.36 125.368) (xy 86.532728 125.368) (xy 86.705217 125.546617)
+ (xy 86.933887 125.705547) (xy 87.189073 125.817035) (xy 87.461053 125.876834) (xy 87.739468 125.882666) (xy 88.013714 125.834309)
+ (xy 88.273344 125.733605) (xy 88.50847 125.58439) (xy 88.710134 125.392347) (xy 88.870657 125.164791) (xy 88.983924 124.91039)
+ (xy 89.04562 124.638834) (xy 89.050061 124.320762) (xy 88.995971 124.047589) (xy 88.889852 123.790125) (xy 88.735746 123.558176)
+ (xy 88.539522 123.360577) (xy 88.538 123.35955) (xy 88.538 123.016268) (xy 88.710134 122.852347) (xy 88.870657 122.624791)
+ (xy 88.983924 122.37039) (xy 89.04562 122.098834) (xy 89.050061 121.780762) (xy 88.995971 121.507589) (xy 88.889852 121.250125)
+ (xy 88.735746 121.018176) (xy 88.539522 120.820577) (xy 88.308654 120.664855) (xy 88.051937 120.556941) (xy 87.779149 120.500946)
+ (xy 87.500679 120.499001) (xy 87.227135 120.551183) (xy 86.968936 120.655502) (xy 86.735917 120.807985) (xy 86.536953 121.002825)
+ (xy 86.379623 121.2326) (xy 86.26992 121.488557) (xy 86.212021 121.760948) (xy 86.208133 122.039397) (xy 86.258404 122.313299)
+ (xy 86.360918 122.57222) (xy 86.511771 122.806298) (xy 86.705217 123.006617) (xy 86.722 123.018281) (xy 86.722 123.361613)
+ (xy 86.632936 123.44883) (xy 85.732053 122.547947) (xy 85.667229 122.4947) (xy 85.60299 122.440797) (xy 85.598805 122.438496)
+ (xy 85.595116 122.435466) (xy 85.521197 122.395831) (xy 85.447699 122.355425) (xy 85.443148 122.353981) (xy 85.43894 122.351725)
+ (xy 85.358751 122.327209) (xy 85.278784 122.301842) (xy 85.274036 122.301309) (xy 85.269472 122.299914) (xy 85.186044 122.291439)
+ (xy 85.102678 122.282089) (xy 85.09334 122.282023) (xy 85.093169 122.282006) (xy 85.093009 122.282021) (xy 85.09 122.282)
+ (xy 83.753552 122.282) (xy 83.823102 122.212451) (xy 83.895112 122.10468) (xy 83.944713 121.984932) (xy 83.97 121.857808)
+ (xy 83.97 121.728193) (xy 83.97 120.204193) (xy 83.944713 120.077069) (xy 83.895112 119.95732) (xy 83.823102 119.84955)
+ (xy 83.731451 119.757898) (xy 83.62368 119.685888) (xy 83.503932 119.636287) (xy 83.376808 119.611) (xy 83.247193 119.611)
+ (xy 82.93451 119.611) (xy 83.193344 119.510605) (xy 83.42847 119.36139) (xy 83.630134 119.169347) (xy 83.790657 118.941791)
+ (xy 83.903924 118.68739) (xy 83.96562 118.415834) (xy 83.970061 118.097762) (xy 83.915971 117.824589) (xy 83.809852 117.567125)
+ (xy 83.655746 117.335176) (xy 83.459522 117.137577) (xy 83.228654 116.981855) (xy 83.040657 116.902828) (xy 83.193344 116.843605)
+ (xy 83.42847 116.69439) (xy 83.630134 116.502347) (xy 83.647308 116.478) (xy 86.532728 116.478) (xy 86.705217 116.656617)
+ (xy 86.722 116.668281) (xy 86.722 117.011613) (xy 86.536953 117.192825) (xy 86.379623 117.4226) (xy 86.26992 117.678557)
+ (xy 86.212021 117.950948) (xy 86.208133 118.229397) (xy 86.258404 118.503299) (xy 86.360918 118.76222) (xy 86.511771 118.996298)
+ (xy 86.705217 119.196617) (xy 86.933887 119.355547) (xy 87.189073 119.467035) (xy 87.461053 119.526834) (xy 87.739468 119.532666)
+ (xy 88.013714 119.484309) (xy 88.273344 119.383605) (xy 88.50847 119.23439) (xy 88.710134 119.042347) (xy 88.870657 118.814791)
+ (xy 88.983924 118.56039) (xy 89.04562 118.288834) (xy 89.050061 117.970762) (xy 88.995971 117.697589) (xy 88.889852 117.440125)
+ (xy 88.735746 117.208176) (xy 88.539522 117.010577) (xy 88.538 117.00955) (xy 88.538 116.666268) (xy 88.710134 116.502347)
+ (xy 88.870657 116.274791) (xy 88.983924 116.02039) (xy 89.04562 115.748834) (xy 89.050061 115.430762) (xy 88.995971 115.157589)
+ (xy 88.889852 114.900125) (xy 88.735746 114.668176) (xy 88.641232 114.573) (xy 96.770126 114.573) (xy 96.663121 114.680005)
+ (xy 96.786818 114.803702) (xy 96.545164 114.872615) (xy 96.43303 115.12887) (xy 96.373043 115.402078) (xy 96.36751 115.681739)
+ (xy 96.416642 115.957106) (xy 96.518551 116.217597) (xy 96.545164 116.267385) (xy 96.786821 116.336298) (xy 97.553119 115.57)
+ (xy 97.538977 115.555858) (xy 97.775858 115.318977) (xy 97.79 115.333119) (xy 97.804142 115.318977) (xy 98.041023 115.555858)
+ (xy 98.026881 115.57) (xy 98.793179 116.336298) (xy 99.034836 116.267385) (xy 99.09386 116.132498) (xy 99.118852 116.195351)
+ (xy 99.137162 116.229606) (xy 99.372364 116.290755) (xy 100.093119 115.57) (xy 99.372364 114.849245) (xy 99.137162 114.910394)
+ (xy 99.09501 115.00819) (xy 99.061449 114.922403) (xy 99.034836 114.872615) (xy 98.793181 114.803702) (xy 98.916879 114.680005)
+ (xy 98.809874 114.573) (xy 99.619479 114.573) (xy 99.609245 114.612364) (xy 100.33 115.333119) (xy 101.050755 114.612364)
+ (xy 101.04052 114.573) (xy 106.662928 114.573) (xy 106.626063 114.662) (xy 106.045 114.662) (xy 105.961516 114.670185)
+ (xy 105.877972 114.677495) (xy 105.873387 114.678827) (xy 105.868635 114.679293) (xy 105.788325 114.703539) (xy 105.707798 114.726935)
+ (xy 105.70356 114.729131) (xy 105.698988 114.730512) (xy 105.624925 114.769891) (xy 105.550468 114.808487) (xy 105.546735 114.811466)
+ (xy 105.54252 114.813708) (xy 105.477534 114.866708) (xy 105.411974 114.919045) (xy 105.405327 114.925599) (xy 105.405192 114.92571)
+ (xy 105.405088 114.925835) (xy 105.402947 114.927947) (xy 101.688266 118.642627) (xy 101.688266 115.455737) (xy 101.639876 115.192948)
+ (xy 101.541148 114.944649) (xy 101.522838 114.910394) (xy 101.287636 114.849245) (xy 100.566881 115.57) (xy 101.287636 116.290755)
+ (xy 101.522838 116.229606) (xy 101.628601 115.984221) (xy 101.684459 115.722917) (xy 101.688266 115.455737) (xy 101.688266 118.642627)
+ (xy 101.437487 118.893406) (xy 101.515177 118.783274) (xy 101.623379 118.54025) (xy 101.682316 118.280837) (xy 101.686559 117.976988)
+ (xy 101.634888 117.716031) (xy 101.533514 117.47008) (xy 101.386299 117.248504) (xy 101.19885 117.059741) (xy 100.978306 116.910983)
+ (xy 100.808421 116.839569) (xy 100.955351 116.781148) (xy 100.989606 116.762838) (xy 101.050755 116.527636) (xy 100.33 115.806881)
+ (xy 100.093119 116.043762) (xy 99.609245 116.527636) (xy 99.670394 116.762838) (xy 99.850703 116.840553) (xy 99.698498 116.902048)
+ (xy 99.475899 117.047712) (xy 99.318344 117.202) (xy 98.889612 117.202) (xy 98.699522 117.010577) (xy 98.468654 116.854855)
+ (xy 98.437164 116.841618) (xy 98.437597 116.841449) (xy 98.487385 116.814836) (xy 98.556298 116.573179) (xy 97.79 115.806881)
+ (xy 97.553119 116.043762) (xy 97.023702 116.573179) (xy 97.092615 116.814836) (xy 97.146488 116.83841) (xy 97.128936 116.845502)
+ (xy 96.895917 116.997985) (xy 96.696953 117.192825) (xy 96.69067 117.202) (xy 95.885 117.202) (xy 95.801516 117.210185)
+ (xy 95.717972 117.217495) (xy 95.713387 117.218827) (xy 95.708635 117.219293) (xy 95.628325 117.243539) (xy 95.547798 117.266935)
+ (xy 95.54356 117.269131) (xy 95.538988 117.270512) (xy 95.464925 117.309891) (xy 95.390468 117.348487) (xy 95.386735 117.351466)
+ (xy 95.38252 117.353708) (xy 95.31751 117.406728) (xy 95.251975 117.459045) (xy 95.245328 117.465598) (xy 95.245192 117.46571)
+ (xy 95.245087 117.465836) (xy 95.242947 117.467947) (xy 93.972947 118.737947) (xy 93.9197 118.80277) (xy 93.865797 118.86701)
+ (xy 93.863496 118.871194) (xy 93.860466 118.874884) (xy 93.820831 118.948802) (xy 93.780425 119.022301) (xy 93.778981 119.026851)
+ (xy 93.776725 119.03106) (xy 93.752209 119.111248) (xy 93.726842 119.191216) (xy 93.726309 119.195963) (xy 93.724914 119.200528)
+ (xy 93.716439 119.283955) (xy 93.707089 119.367322) (xy 93.707023 119.376659) (xy 93.707006 119.376831) (xy 93.707021 119.37699)
+ (xy 93.707 119.38) (xy 93.707 124.46) (xy 93.715185 124.543483) (xy 93.722495 124.627028) (xy 93.723827 124.631612)
+ (xy 93.724293 124.636365) (xy 93.748539 124.716674) (xy 93.771935 124.797202) (xy 93.774131 124.801439) (xy 93.775512 124.806012)
+ (xy 93.814891 124.880074) (xy 93.853487 124.954532) (xy 93.856466 124.958264) (xy 93.858708 124.96248) (xy 93.911728 125.027489)
+ (xy 93.964045 125.093025) (xy 93.970598 125.099671) (xy 93.97071 125.099808) (xy 93.970836 125.099912) (xy 93.972947 125.102053)
+ (xy 96.512947 127.642053) (xy 96.57777 127.695299) (xy 96.64201 127.749203) (xy 96.646194 127.751503) (xy 96.649884 127.754534)
+ (xy 96.72382 127.794178) (xy 96.797301 127.834575) (xy 96.801849 127.836017) (xy 96.806059 127.838275) (xy 96.886275 127.862799)
+ (xy 96.966216 127.888158) (xy 96.970961 127.88869) (xy 96.975527 127.890086) (xy 97.058964 127.898561) (xy 97.142322 127.907911)
+ (xy 97.151658 127.907976) (xy 97.15183 127.907994) (xy 97.15199 127.907978) (xy 97.155 127.908) (xy 100.965 127.908)
+ (xy 101.048483 127.899814) (xy 101.132028 127.892505) (xy 101.136612 127.891172) (xy 101.141365 127.890707) (xy 101.221674 127.86646)
+ (xy 101.302202 127.843065) (xy 101.306439 127.840868) (xy 101.311012 127.839488) (xy 101.385074 127.800108) (xy 101.459532 127.761513)
+ (xy 101.463264 127.758533) (xy 101.46748 127.756292) (xy 101.532489 127.703271) (xy 101.598025 127.650955) (xy 101.604671 127.644401)
+ (xy 101.604808 127.64429) (xy 101.604912 127.644163) (xy 101.607053 127.642053) (xy 106.421106 122.828) (xy 106.626064 122.828)
+ (xy 106.668388 122.93018) (xy 106.740398 123.03795) (xy 106.832049 123.129602) (xy 106.922441 123.19) (xy 106.83205 123.250398)
+ (xy 106.740398 123.342049) (xy 106.668388 123.44982) (xy 106.618787 123.569568) (xy 106.5935 123.696692) (xy 106.5935 123.826307)
+ (xy 106.5935 125.223307) (xy 106.618787 125.350431) (xy 106.668388 125.47018) (xy 106.740398 125.57795) (xy 106.832049 125.669602)
+ (xy 106.93982 125.741612) (xy 107.059568 125.791213) (xy 107.186692 125.8165) (xy 107.316307 125.8165) (xy 108.713307 125.8165)
+ (xy 108.840431 125.791213) (xy 108.96018 125.741612) (xy 109.06795 125.669602) (xy 109.159602 125.577951) (xy 109.231612 125.47018)
+ (xy 109.281213 125.350432) (xy 109.3065 125.223308) (xy 109.3065 125.093693) (xy 109.3065 123.696693) (xy 109.281213 123.569569)
+ (xy 109.231612 123.44982) (xy 109.159602 123.34205) (xy 109.067951 123.250398) (xy 108.977558 123.189999) (xy 109.06795 123.129602)
+ (xy 109.159602 123.037951) (xy 109.231612 122.93018) (xy 109.273936 122.828) (xy 116.205 122.828) (xy 116.288483 122.819814)
+ (xy 116.372028 122.812505) (xy 116.376612 122.811172) (xy 116.381365 122.810707) (xy 116.461674 122.78646) (xy 116.542202 122.763065)
+ (xy 116.546439 122.760868) (xy 116.551012 122.759488) (xy 116.625074 122.720108) (xy 116.699532 122.681513) (xy 116.703264 122.678533)
+ (xy 116.70748 122.676292) (xy 116.772489 122.623271) (xy 116.838025 122.570955) (xy 116.844671 122.564401) (xy 116.844808 122.56429)
+ (xy 116.844912 122.564163) (xy 116.847053 122.562053) (xy 118.231393 121.177712) (xy 118.380841 121.164112) (xy 118.651456 121.084466)
+ (xy 118.901448 120.953773) (xy 119.121293 120.777013) (xy 119.302619 120.560917) (xy 119.380076 120.420022) (xy 119.446096 120.544186)
+ (xy 119.624386 120.762792) (xy 119.841743 120.942605) (xy 120.089885 121.076775) (xy 120.359362 121.160192) (xy 120.639909 121.189679)
+ (xy 120.920841 121.164112) (xy 121.191456 121.084466) (xy 121.441448 120.953773) (xy 121.661293 120.777013) (xy 121.842619 120.560917)
+ (xy 121.913628 120.431752) (xy 121.918724 120.44348) (xy 122.081252 120.677892) (xy 122.286388 120.876092) (xy 122.52625 121.030464)
+ (xy 122.799975 121.127384) (xy 123.0225 121.005501) (xy 123.0225 119.5475) (xy 123.0025 119.5475) (xy 123.0025 119.2125)
+ (xy 123.0225 119.2125) (xy 123.0225 117.754499) (xy 122.799975 117.632616) (xy 122.52625 117.729536) (xy 122.286388 117.883908)
+ (xy 122.081252 118.082108) (xy 121.918724 118.31652) (xy 121.913654 118.328187) (xy 121.853904 118.215814) (xy 121.675614 117.997208)
+ (xy 121.458257 117.817395) (xy 121.210115 117.683225) (xy 120.940638 117.599808) (xy 120.660091 117.570321) (xy 120.379159 117.595888)
+ (xy 120.108544 117.675534) (xy 119.858552 117.806227) (xy 119.638707 117.982987) (xy 119.457381 118.199083) (xy 119.379923 118.339977)
+ (xy 119.313904 118.215814) (xy 119.135614 117.997208) (xy 118.918257 117.817395) (xy 118.670115 117.683225) (xy 118.400638 117.599808)
+ (xy 118.120091 117.570321) (xy 117.839159 117.595888) (xy 117.568544 117.675534) (xy 117.318552 117.806227) (xy 117.098707 117.982987)
+ (xy 117.00094 118.0995) (xy 116.990113 118.045068) (xy 116.940512 117.92532) (xy 116.868502 117.817549) (xy 116.77685 117.725898)
+ (xy 116.66908 117.653888) (xy 116.549331 117.604287) (xy 116.422207 117.579) (xy 115.902 117.579) (xy 115.7375 117.7435)
+ (xy 115.7375 119.2125) (xy 115.7575 119.2125) (xy 115.7575 119.5475) (xy 115.7375 119.5475) (xy 115.7375 119.5675)
+ (xy 115.4025 119.5675) (xy 115.4025 119.5475) (xy 115.4025 119.2125) (xy 115.4025 117.7435) (xy 115.238 117.579)
+ (xy 114.717793 117.579) (xy 114.590669 117.604287) (xy 114.47092 117.653888) (xy 114.36315 117.725898) (xy 114.271498 117.817549)
+ (xy 114.199488 117.92532) (xy 114.149887 118.045068) (xy 114.1246 118.172192) (xy 114.1246 118.301807) (xy 114.1246 119.048)
+ (xy 114.2891 119.2125) (xy 115.4025 119.2125) (xy 115.4025 119.5475) (xy 114.2891 119.5475) (xy 114.1246 119.712)
+ (xy 114.1246 120.458193) (xy 114.1246 120.587808) (xy 114.149887 120.714932) (xy 114.199488 120.83468) (xy 114.271498 120.942451)
+ (xy 114.341047 121.012) (xy 109.273935 121.012) (xy 109.231612 120.90982) (xy 109.159602 120.80205) (xy 109.067951 120.710398)
+ (xy 108.96018 120.638388) (xy 108.840432 120.588787) (xy 108.713308 120.5635) (xy 108.583693 120.5635) (xy 107.186693 120.5635)
+ (xy 107.059569 120.588787) (xy 106.93982 120.638388) (xy 106.83205 120.710398) (xy 106.740398 120.802049) (xy 106.668388 120.90982)
+ (xy 106.626063 121.012) (xy 106.045 121.012) (xy 105.961512 121.020186) (xy 105.877972 121.027495) (xy 105.873387 121.028827)
+ (xy 105.868635 121.029293) (xy 105.788325 121.053539) (xy 105.707798 121.076935) (xy 105.70356 121.079131) (xy 105.698988 121.080512)
+ (xy 105.624925 121.119891) (xy 105.550468 121.158487) (xy 105.546735 121.161466) (xy 105.54252 121.163708) (xy 105.47751 121.216728)
+ (xy 105.411975 121.269045) (xy 105.405328 121.275598) (xy 105.405192 121.27571) (xy 105.405087 121.275836) (xy 105.402947 121.277947)
+ (xy 101.688266 124.992627) (xy 101.688266 121.805737) (xy 101.639876 121.542948) (xy 101.541148 121.294649) (xy 101.522838 121.260394)
+ (xy 101.287636 121.199245) (xy 100.566881 121.92) (xy 101.287636 122.640755) (xy 101.522838 122.579606) (xy 101.628601 122.334221)
+ (xy 101.684459 122.072917) (xy 101.688266 121.805737) (xy 101.688266 124.992627) (xy 101.437487 125.243406) (xy 101.515177 125.133274)
+ (xy 101.623379 124.89025) (xy 101.682316 124.630837) (xy 101.686559 124.326988) (xy 101.634888 124.066031) (xy 101.533514 123.82008)
+ (xy 101.386299 123.598504) (xy 101.19885 123.409741) (xy 100.978306 123.260983) (xy 100.808421 123.189569) (xy 100.955351 123.131148)
+ (xy 100.989606 123.112838) (xy 101.050755 122.877636) (xy 100.33 122.156881) (xy 100.093119 122.393762) (xy 99.609245 122.877636)
+ (xy 99.670394 123.112838) (xy 99.850703 123.190553) (xy 99.698498 123.252048) (xy 99.475899 123.397712) (xy 99.318344 123.552)
+ (xy 98.889612 123.552) (xy 98.699522 123.360577) (xy 98.468654 123.204855) (xy 98.437164 123.191618) (xy 98.437597 123.191449)
+ (xy 98.487385 123.164836) (xy 98.556298 122.923179) (xy 97.79 122.156881) (xy 97.775857 122.171022) (xy 97.538976 121.934141)
+ (xy 97.553119 121.92) (xy 97.538977 121.905858) (xy 97.775858 121.668977) (xy 97.79 121.683119) (xy 97.804142 121.668977)
+ (xy 98.041023 121.905858) (xy 98.026881 121.92) (xy 98.793179 122.686298) (xy 99.034836 122.617385) (xy 99.09386 122.482498)
+ (xy 99.118852 122.545351) (xy 99.137162 122.579606) (xy 99.372364 122.640755) (xy 100.093119 121.92) (xy 99.372364 121.199245)
+ (xy 99.137162 121.260394) (xy 99.09501 121.35819) (xy 99.061449 121.272403) (xy 99.034836 121.222615) (xy 98.793181 121.153702)
+ (xy 98.916879 121.030005) (xy 98.809874 120.923) (xy 99.619479 120.923) (xy 99.609245 120.962364) (xy 100.33 121.683119)
+ (xy 101.050755 120.962364) (xy 101.04052 120.923) (xy 101.6 120.923) (xy 101.683483 120.914814) (xy 101.767028 120.907505)
+ (xy 101.771612 120.906172) (xy 101.776365 120.905707) (xy 101.856674 120.88146) (xy 101.937202 120.858065) (xy 101.941439 120.855868)
+ (xy 101.946012 120.854488) (xy 102.020074 120.815108) (xy 102.094532 120.776513) (xy 102.098264 120.773533) (xy 102.10248 120.771292)
+ (xy 102.167489 120.718271) (xy 102.233025 120.665955) (xy 102.239671 120.659401) (xy 102.239808 120.65929) (xy 102.239912 120.659163)
+ (xy 102.242053 120.657053) (xy 106.421106 116.478) (xy 106.626064 116.478) (xy 106.668388 116.58018) (xy 106.740398 116.68795)
+ (xy 106.832049 116.779602) (xy 106.922441 116.84) (xy 106.83205 116.900398) (xy 106.740398 116.992049) (xy 106.668388 117.09982)
+ (xy 106.618787 117.219568) (xy 106.5935 117.346692) (xy 106.5935 117.476307) (xy 106.5935 118.873307) (xy 106.618787 119.000431)
+ (xy 106.668388 119.12018) (xy 106.740398 119.22795) (xy 106.832049 119.319602) (xy 106.93982 119.391612) (xy 107.059568 119.441213)
+ (xy 107.186692 119.4665) (xy 107.316307 119.4665) (xy 108.713307 119.4665) (xy 108.840431 119.441213) (xy 108.96018 119.391612)
+ (xy 109.06795 119.319602) (xy 109.159602 119.227951) (xy 109.231612 119.12018) (xy 109.281213 119.000432) (xy 109.3065 118.873308)
+ (xy 109.3065 118.743693) (xy 109.3065 117.346693) (xy 109.281213 117.219569) (xy 109.231612 117.09982) (xy 109.159602 116.99205)
+ (xy 109.067951 116.900398) (xy 108.977558 116.839999) (xy 109.06795 116.779602) (xy 109.159602 116.687951) (xy 109.231612 116.58018)
+ (xy 109.273936 116.478) (xy 125.73 116.478) (xy 125.813483 116.469814) (xy 125.897028 116.462505) (xy 125.901612 116.461172)
+ (xy 125.906365 116.460707) (xy 125.986674 116.43646) (xy 126.067202 116.413065) (xy 126.071439 116.410868) (xy 126.076012 116.409488)
+ (xy 126.150074 116.370108) (xy 126.224532 116.331513) (xy 126.228264 116.328533) (xy 126.23248 116.326292) (xy 126.297489 116.273271)
+ (xy 126.363025 116.220955) (xy 126.369671 116.214401) (xy 126.369808 116.21429) (xy 126.369912 116.214163) (xy 126.372053 116.212053)
+ (xy 128.912053 113.672053) (xy 128.965299 113.607229) (xy 129.019203 113.54299) (xy 129.021503 113.538805) (xy 129.024534 113.535116)
+ (xy 129.064178 113.461179) (xy 129.104575 113.387699) (xy 129.106017 113.38315) (xy 129.108275 113.378941) (xy 129.132799 113.298724)
+ (xy 129.142303 113.268763) (xy 129.281293 113.157013) (xy 129.462619 112.940917) (xy 129.540076 112.800022) (xy 129.606096 112.924186)
+ (xy 129.784386 113.142792) (xy 130.001743 113.322605) (xy 130.249885 113.456775) (xy 130.519362 113.540192) (xy 130.799909 113.569679)
+ (xy 131.080841 113.544112) (xy 131.351456 113.464466) (xy 131.601448 113.333773) (xy 131.821293 113.157013) (xy 132.002619 112.940917)
+ (xy 132.138518 112.693718) (xy 132.223815 112.42483) (xy 132.255259 112.144495) (xy 132.2554 112.124314) (xy 132.2554 111.395686)
+ (xy 132.227873 111.11494) (xy 132.146339 110.844887) (xy 132.013904 110.595814) (xy 131.835614 110.377208) (xy 131.718 110.279909)
+ (xy 131.718 110.002506) (xy 133.065706 108.6548) (xy 138.028494 108.6548) (xy 139.427 110.053306) (xy 139.427 110.661613)
+ (xy 139.241953 110.842825) (xy 139.084623 111.0726) (xy 138.97492 111.328557) (xy 138.917021 111.600948) (xy 138.913133 111.879397)
+ (xy 138.963404 112.153299) (xy 139.065918 112.41222) (xy 139.216771 112.646298) (xy 139.410217 112.846617) (xy 139.638887 113.005547)
+ (xy 139.894073 113.117035) (xy 140.166053 113.176834) (xy 140.444468 113.182666) (xy 140.718714 113.134309) (xy 140.978344 113.033605)
+ (xy 141.21347 112.88439) (xy 141.415134 112.692347) (xy 141.575657 112.464791) (xy 141.688924 112.21039) (xy 141.75062 111.938834)
+ (xy 141.755061 111.620762) (xy 141.700971 111.347589) (xy 141.594852 111.090125) (xy 141.440746 110.858176) (xy 141.244522 110.660577)
+ (xy 141.243 110.65955) (xy 141.243 109.6772) (xy 141.234813 109.593712) (xy 141.227505 109.510172) (xy 141.226172 109.505587)
+ (xy 141.225707 109.500835) (xy 141.20146 109.420525) (xy 141.178065 109.339998) (xy 141.175868 109.33576) (xy 141.174488 109.331188)
+ (xy 141.135108 109.257125) (xy 141.096513 109.182668) (xy 141.093533 109.178935) (xy 141.091292 109.17472) (xy 141.038271 109.10971)
+ (xy 140.985955 109.044175) (xy 140.979401 109.037528) (xy 140.97929 109.037392) (xy 140.979163 109.037287) (xy 140.977053 109.035147)
+ (xy 139.046653 107.104747) (xy 138.981829 107.0515) (xy 138.91759 106.997597) (xy 138.913405 106.995296) (xy 138.909716 106.992266)
+ (xy 138.835797 106.952631) (xy 138.762299 106.912225) (xy 138.757748 106.910781) (xy 138.75354 106.908525) (xy 138.673351 106.884009)
+ (xy 138.593384 106.858642) (xy 138.588636 106.858109) (xy 138.584072 106.856714) (xy 138.500644 106.848239) (xy 138.417278 106.838889)
+ (xy 138.40794 106.838823) (xy 138.407769 106.838806) (xy 138.407609 106.838821) (xy 138.4046 106.8388) (xy 132.6896 106.8388)
+ (xy 132.606112 106.846986) (xy 132.522572 106.854295) (xy 132.517987 106.855627) (xy 132.513235 106.856093) (xy 132.432925 106.880339)
+ (xy 132.352398 106.903735) (xy 132.34816 106.905931) (xy 132.343588 106.907312) (xy 132.269525 106.946691) (xy 132.195068 106.985287)
+ (xy 132.191335 106.988266) (xy 132.18712 106.990508) (xy 132.12211 107.043528) (xy 132.056575 107.095845) (xy 132.049928 107.102398)
+ (xy 132.049792 107.10251) (xy 132.049687 107.102636) (xy 132.047547 107.104747) (xy 130.167947 108.984347) (xy 130.1147 109.04917)
+ (xy 130.060797 109.11341) (xy 130.058496 109.117594) (xy 130.055466 109.121284) (xy 130.015831 109.195202) (xy 129.975425 109.268701)
+ (xy 129.973981 109.273251) (xy 129.971725 109.27746) (xy 129.947209 109.357648) (xy 129.921842 109.437616) (xy 129.921309 109.442363)
+ (xy 129.919914 109.446928) (xy 129.911439 109.530355) (xy 129.902089 109.613722) (xy 129.902023 109.623059) (xy 129.902006 109.623231)
+ (xy 129.902021 109.62339) (xy 129.902 109.6264) (xy 129.902 110.279937) (xy 129.798707 110.362987) (xy 129.617381 110.579083)
+ (xy 129.539923 110.719977) (xy 129.473904 110.595814) (xy 129.295614 110.377208) (xy 129.078257 110.197395) (xy 128.830115 110.063225)
+ (xy 128.560638 109.979808) (xy 128.280091 109.950321) (xy 127.999159 109.975888) (xy 127.728544 110.055534) (xy 127.478552 110.186227)
+ (xy 127.258707 110.362987) (xy 127.077381 110.579083) (xy 127.006371 110.708247) (xy 127.001276 110.69652) (xy 126.838748 110.462108)
+ (xy 126.633612 110.263908) (xy 126.39375 110.109536) (xy 126.120025 110.012616) (xy 125.8975 110.134499) (xy 125.8975 111.5925)
+ (xy 125.9175 111.5925) (xy 125.9175 111.9275) (xy 125.8975 111.9275) (xy 125.8975 113.385501) (xy 126.120025 113.507384)
+ (xy 126.39375 113.410464) (xy 126.633612 113.256092) (xy 126.838748 113.057892) (xy 127.001276 112.82348) (xy 127.006345 112.811812)
+ (xy 127.066096 112.924186) (xy 127.077601 112.938292) (xy 125.353894 114.662) (xy 122.842106 114.662) (xy 123.832053 113.672053)
+ (xy 123.885299 113.607229) (xy 123.939203 113.54299) (xy 123.941503 113.538805) (xy 123.944534 113.535116) (xy 123.984168 113.461197)
+ (xy 124.024575 113.387699) (xy 124.026018 113.383148) (xy 124.028275 113.37894) (xy 124.05279 113.298751) (xy 124.062303 113.268763)
+ (xy 124.201293 113.157013) (xy 124.382619 112.940917) (xy 124.453628 112.811752) (xy 124.458724 112.82348) (xy 124.621252 113.057892)
+ (xy 124.826388 113.256092) (xy 125.06625 113.410464) (xy 125.339975 113.507384) (xy 125.5625 113.385501) (xy 125.5625 111.9275)
+ (xy 125.5425 111.9275) (xy 125.5425 111.5925) (xy 125.5625 111.5925) (xy 125.5625 110.134499) (xy 125.339975 110.012616)
+ (xy 125.06625 110.109536) (xy 124.826388 110.263908) (xy 124.621252 110.462108) (xy 124.458724 110.69652) (xy 124.453654 110.708187)
+ (xy 124.393904 110.595814) (xy 124.215614 110.377208) (xy 123.998257 110.197395) (xy 123.750115 110.063225) (xy 123.480638 109.979808)
+ (xy 123.200091 109.950321) (xy 122.919159 109.975888) (xy 122.648544 110.055534) (xy 122.398552 110.186227) (xy 122.178707 110.362987)
+ (xy 121.997381 110.579083) (xy 121.919923 110.719977) (xy 121.853904 110.595814) (xy 121.675614 110.377208) (xy 121.458257 110.197395)
+ (xy 121.210115 110.063225) (xy 120.940638 109.979808) (xy 120.660091 109.950321) (xy 120.379159 109.975888) (xy 120.108544 110.055534)
+ (xy 119.858552 110.186227) (xy 119.638707 110.362987) (xy 119.457381 110.579083) (xy 119.386371 110.708247) (xy 119.381276 110.69652)
+ (xy 119.218748 110.462108) (xy 119.013612 110.263908) (xy 118.77375 110.109536) (xy 118.500025 110.012616) (xy 118.2775 110.134499)
+ (xy 118.2775 111.5925) (xy 118.2975 111.5925) (xy 118.2975 111.9275) (xy 118.2775 111.9275) (xy 118.2775 111.9475)
+ (xy 117.9425 111.9475) (xy 117.9425 111.9275) (xy 117.9225 111.9275) (xy 117.9225 111.5925) (xy 117.9425 111.5925)
+ (xy 117.9425 110.134499) (xy 117.719975 110.012616) (xy 117.44625 110.109536) (xy 117.206388 110.263908) (xy 117.001252 110.462108)
+ (xy 116.838724 110.69652) (xy 116.833654 110.708187) (xy 116.773904 110.595814) (xy 116.628 110.416917) (xy 116.628 105.833)
+ (xy 135.89 105.833) (xy 135.98731 105.823458) (xy 136.084621 105.814945) (xy 136.089958 105.813394) (xy 136.0955 105.812851)
+ (xy 136.189107 105.784588) (xy 136.282907 105.757338) (xy 136.287845 105.754778) (xy 136.293172 105.75317) (xy 136.379455 105.707292)
+ (xy 136.466228 105.662314) (xy 136.470577 105.658842) (xy 136.475488 105.656231) (xy 136.551193 105.594487) (xy 136.627601 105.533492)
+ (xy 136.635344 105.525855) (xy 136.635503 105.525726) (xy 136.635624 105.525579) (xy 136.638119 105.523119) (xy 137.908119 104.253119)
+ (xy 137.970167 104.17758) (xy 138.03297 104.102735) (xy 138.035648 104.097862) (xy 138.039182 104.093561) (xy 138.085374 104.007411)
+ (xy 138.132445 103.921791) (xy 138.134127 103.916487) (xy 138.136756 103.911585) (xy 138.16533 103.818122) (xy 138.19488 103.724971)
+ (xy 138.1955 103.719443) (xy 138.197127 103.714122) (xy 138.207005 103.616866) (xy 138.217897 103.519772) (xy 138.217972 103.508901)
+ (xy 138.217994 103.508693) (xy 138.217975 103.508498) (xy 138.218 103.505) (xy 138.218 99.498238) (xy 139.018238 98.698)
+ (xy 139.66008 98.698) (xy 139.615431 98.908061) (xy 139.611716 99.174058) (xy 139.659739 99.435711) (xy 139.757669 99.683054)
+ (xy 139.901776 99.906664) (xy 140.062 100.07258) (xy 140.062 104.14) (xy 140.070185 104.223483) (xy 140.077495 104.307028)
+ (xy 140.078827 104.311612) (xy 140.079293 104.316365) (xy 140.103539 104.396674) (xy 140.126935 104.477202) (xy 140.129131 104.481439)
+ (xy 140.130512 104.486012) (xy 140.169891 104.560074) (xy 140.208487 104.634532) (xy 140.211466 104.638264) (xy 140.213708 104.64248)
+ (xy 140.266728 104.707489) (xy 140.319045 104.773025) (xy 140.325598 104.779671) (xy 140.32571 104.779808) (xy 140.325836 104.779912)
+ (xy 140.327947 104.782053) (xy 141.597947 106.052053) (xy 141.66277 106.105299) (xy 141.72701 106.159203) (xy 141.731194 106.161503)
+ (xy 141.734884 106.164534) (xy 141.808802 106.204168) (xy 141.882301 106.244575) (xy 141.886851 106.246018) (xy 141.89106 106.248275)
+ (xy 141.971248 106.27279) (xy 142.051216 106.298158) (xy 142.055963 106.29869) (xy 142.060528 106.300086) (xy 142.143955 106.30856)
+ (xy 142.227322 106.317911) (xy 142.236659 106.317976) (xy 142.236831 106.317994) (xy 142.23699 106.317978) (xy 142.24 106.318)
+ (xy 144.78 106.318) (xy 144.863483 106.309814) (xy 144.947028 106.302505) (xy 144.951612 106.301172) (xy 144.956365 106.300707)
+ (xy 145.036674 106.27646) (xy 145.117202 106.253065) (xy 145.121439 106.250868) (xy 145.126012 106.249488) (xy 145.200074 106.210108)
+ (xy 145.274532 106.171513) (xy 145.278264 106.168533) (xy 145.28248 106.166292) (xy 145.347489 106.113271) (xy 145.413025 106.060955)
+ (xy 145.419671 106.054401) (xy 145.419808 106.05429) (xy 145.419912 106.054163) (xy 145.422053 106.052053) (xy 147.821528 103.652577)
+ (xy 148.064468 103.657666) (xy 148.089199 103.653305) (xy 165.727947 121.292053) (xy 165.79277 121.345299) (xy 165.85701 121.399203)
+ (xy 165.861194 121.401503) (xy 165.864884 121.404534) (xy 165.938802 121.444168) (xy 166.012301 121.484575) (xy 166.016851 121.486018)
+ (xy 166.02106 121.488275) (xy 166.101248 121.51279) (xy 166.181216 121.538158) (xy 166.185963 121.53869) (xy 166.190528 121.540086)
+ (xy 166.273999 121.548565) (xy 166.357322 121.557911) (xy 166.366648 121.557976) (xy 166.366831 121.557995) (xy 166.367 121.557978)
+ (xy 166.37 121.558) (xy 177.280098 121.558) (xy 177.294287 121.629331) (xy 177.343888 121.74908) (xy 177.415898 121.85685)
+ (xy 177.507549 121.948502) (xy 177.61532 122.020512) (xy 177.735068 122.070113) (xy 177.789518 122.080944) (xy 177.687208 122.164386)
+ (xy 177.507395 122.381743) (xy 177.373225 122.629885) (xy 177.289808 122.899362) (xy 177.260321 123.179909) (xy 177.285888 123.460841)
+ (xy 177.322753 123.5861) (xy 174.858267 123.5861) (xy 174.810683 123.571188) (xy 174.634509 123.55205) (xy 174.457972 123.567494)
+ (xy 174.287798 123.616935) (xy 174.130468 123.698487) (xy 173.991975 123.809045) (xy 173.982947 123.817947) (xy 173.613893 124.187)
+ (xy 150.236105 124.187) (xy 139.707053 113.657947) (xy 139.642229 113.6047) (xy 139.57799 113.550797) (xy 139.573805 113.548496)
+ (xy 139.570116 113.545466) (xy 139.496197 113.505831) (xy 139.422699 113.465425) (xy 139.418148 113.463981) (xy 139.41394 113.461725)
+ (xy 139.333751 113.437209) (xy 139.253784 113.411842) (xy 139.249036 113.411309) (xy 139.244472 113.409914) (xy 139.161044 113.401439)
+ (xy 139.077678 113.392089) (xy 139.06834 113.392023) (xy 139.068169 113.392006) (xy 139.068009 113.392021) (xy 139.065 113.392)
+ (xy 138.171106 113.392) (xy 136.671271 111.892165) (xy 136.675061 111.620762) (xy 136.620971 111.347589) (xy 136.514852 111.090125)
+ (xy 136.360746 110.858176) (xy 136.164522 110.660577) (xy 135.933654 110.504855) (xy 135.676937 110.396941) (xy 135.404149 110.340946)
+ (xy 135.125679 110.339001) (xy 134.852135 110.391183) (xy 134.593936 110.495502) (xy 134.360917 110.647985) (xy 134.161953 110.842825)
+ (xy 134.004623 111.0726) (xy 133.89492 111.328557) (xy 133.837021 111.600948) (xy 133.833133 111.879397) (xy 133.883404 112.153299)
+ (xy 133.985918 112.41222) (xy 134.136771 112.646298) (xy 134.330217 112.846617) (xy 134.558887 113.005547) (xy 134.814073 113.117035)
+ (xy 135.086053 113.176834) (xy 135.364468 113.182666) (xy 135.389199 113.178305) (xy 137.152947 114.942053) (xy 137.21777 114.995299)
+ (xy 137.28201 115.049203) (xy 137.286194 115.051503) (xy 137.289884 115.054534) (xy 137.36382 115.094178) (xy 137.437301 115.134575)
+ (xy 137.441849 115.136017) (xy 137.446059 115.138275) (xy 137.526275 115.162799) (xy 137.606216 115.188158) (xy 137.610961 115.18869)
+ (xy 137.615527 115.190086) (xy 137.698964 115.198561) (xy 137.782322 115.207911) (xy 137.791658 115.207976) (xy 137.79183 115.207994)
+ (xy 137.79199 115.207978) (xy 137.795 115.208) (xy 138.688894 115.208) (xy 149.217947 125.737053) (xy 149.28277 125.790299)
+ (xy 149.34701 125.844203) (xy 149.351194 125.846503) (xy 149.354884 125.849534) (xy 149.42882 125.889178) (xy 149.502301 125.929575)
+ (xy 149.506849 125.931017) (xy 149.511059 125.933275) (xy 149.591262 125.957795) (xy 149.671216 125.983158) (xy 149.675963 125.98369)
+ (xy 149.680528 125.985086) (xy 149.763959 125.99356) (xy 149.847322 126.002911) (xy 149.856658 126.002976) (xy 149.85683 126.002994)
+ (xy 149.85699 126.002978) (xy 149.86 126.003) (xy 173.99 126.003) (xy 174.073483 125.994814) (xy 174.157028 125.987505)
+ (xy 174.161612 125.986172) (xy 174.166365 125.985707) (xy 174.246674 125.96146) (xy 174.327202 125.938065) (xy 174.331439 125.935868)
+ (xy 174.336012 125.934488) (xy 174.410074 125.895108) (xy 174.484532 125.856513) (xy 174.488264 125.853533) (xy 174.49248 125.851292)
+ (xy 174.557489 125.798271) (xy 174.623025 125.745955) (xy 174.629671 125.739401) (xy 174.629808 125.73929) (xy 174.629912 125.739163)
+ (xy 174.632053 125.737053) (xy 175.035206 125.3339) (xy 177.322453 125.3339) (xy 177.289808 125.439362) (xy 177.260321 125.719909)
+ (xy 177.285888 126.000841) (xy 177.317354 126.107755) (xy 177.177678 126.092089) (xy 177.165 126.092) (xy 145.156106 126.092)
+ (xy 141.610542 122.546436) (xy 141.688924 122.37039) (xy 141.75062 122.098834) (xy 141.755061 121.780762) (xy 141.700971 121.507589)
+ (xy 141.594852 121.250125) (xy 141.440746 121.018176) (xy 141.244522 120.820577) (xy 141.013654 120.664855) (xy 140.756937 120.556941)
+ (xy 140.484149 120.500946) (xy 140.205679 120.499001) (xy 139.932135 120.551183) (xy 139.673936 120.655502) (xy 139.440917 120.807985)
+ (xy 139.241953 121.002825) (xy 139.084623 121.2326) (xy 138.97492 121.488557) (xy 138.917021 121.760948) (xy 138.913133 122.039397)
+ (xy 138.963404 122.313299) (xy 139.065918 122.57222) (xy 139.216771 122.806298) (xy 139.410217 123.006617) (xy 139.638887 123.165547)
+ (xy 139.680675 123.183803) (xy 139.684045 123.188025) (xy 139.690598 123.194671) (xy 139.69071 123.194808) (xy 139.690836 123.194912)
+ (xy 139.692947 123.197053) (xy 144.137947 127.642053) (xy 144.20277 127.695299) (xy 144.26701 127.749203) (xy 144.271194 127.751503)
+ (xy 144.274884 127.754534) (xy 144.348802 127.794168) (xy 144.422301 127.834575) (xy 144.426851 127.836018) (xy 144.43106 127.838275)
+ (xy 144.511248 127.86279) (xy 144.591216 127.888158) (xy 144.595963 127.88869) (xy 144.600528 127.890086) (xy 144.683955 127.89856)
+ (xy 144.767322 127.907911) (xy 144.776659 127.907976) (xy 144.776831 127.907994) (xy 144.77699 127.907978) (xy 144.78 127.908)
+ (xy 177.165 127.908) (xy 177.316496 127.893145) (xy 177.289808 127.979362) (xy 177.260321 128.259909) (xy 177.285888 128.540841)
+ (xy 177.365534 128.811456) (xy 177.496227 129.061448) (xy 177.672987 129.281293) (xy 177.889083 129.462619) (xy 178.136282 129.598518)
+ (xy 178.162 129.606676) (xy 178.162 130.81) (xy 178.170185 130.893483) (xy 178.177495 130.977028) (xy 178.178827 130.981612)
+ (xy 178.179293 130.986365) (xy 178.203539 131.066674) (xy 178.226935 131.147202) (xy 178.229131 131.151439) (xy 178.230512 131.156012)
+ (xy 178.269891 131.230074) (xy 178.308487 131.304532) (xy 178.311466 131.308264) (xy 178.313708 131.31248) (xy 178.366728 131.377489)
+ (xy 178.419045 131.443025) (xy 178.425598 131.449671) (xy 178.42571 131.449808) (xy 178.425836 131.449912) (xy 178.427947 131.452053)
+ (xy 180.332947 133.357053) (xy 180.39777 133.410299) (xy 180.46201 133.464203) (xy 180.466194 133.466503) (xy 180.469884 133.469534)
+ (xy 180.543802 133.509168) (xy 180.617301 133.549575) (xy 180.621851 133.551018) (xy 180.62606 133.553275) (xy 180.706248 133.57779)
+ (xy 180.786216 133.603158) (xy 180.790963 133.60369) (xy 180.795528 133.605086) (xy 180.878999 133.613565) (xy 180.962322 133.622911)
+ (xy 180.971648 133.622976) (xy 180.971831 133.622995) (xy 180.972 133.622978) (xy 180.975 133.623) (xy 195.203893 133.623)
+ (xy 195.572947 133.992053) (xy 195.63777 134.045299) (xy 195.70201 134.099203) (xy 195.706194 134.101503) (xy 195.709884 134.104534)
+ (xy 195.783802 134.144168) (xy 195.857301 134.184575) (xy 195.861851 134.186018) (xy 195.86606 134.188275) (xy 195.946248 134.21279)
+ (xy 196.026216 134.238158) (xy 196.030963 134.23869) (xy 196.035528 134.240086) (xy 196.118999 134.248565) (xy 196.202322 134.257911)
+ (xy 196.211648 134.257976) (xy 196.211831 134.257995) (xy 196.212 134.257978) (xy 196.215 134.258) (xy 218.44 134.258)
+ (xy 218.523483 134.249814) (xy 218.607028 134.242505) (xy 218.611612 134.241172) (xy 218.616365 134.240707) (xy 218.696674 134.21646)
+ (xy 218.777202 134.193065) (xy 218.781439 134.190868) (xy 218.786012 134.189488) (xy 218.860074 134.150108) (xy 218.934532 134.111513)
+ (xy 218.938264 134.108533) (xy 218.94248 134.106292) (xy 219.007489 134.053271) (xy 219.073025 134.000955) (xy 219.079671 133.994401)
+ (xy 219.079808 133.99429) (xy 219.079912 133.994163) (xy 219.082053 133.992053) (xy 221.622053 131.452053) (xy 221.675299 131.387229)
+ (xy 221.729203 131.32299) (xy 221.731503 131.318805) (xy 221.734534 131.315116) (xy 221.774178 131.241179) (xy 221.814575 131.167699)
+ (xy 221.816017 131.16315) (xy 221.818275 131.158941) (xy 221.842799 131.078724) (xy 221.868158 130.998784) (xy 221.86869 130.994038)
+ (xy 221.870086 130.989473) (xy 221.878561 130.906035) (xy 221.887911 130.822678) (xy 221.887976 130.813341) (xy 221.887994 130.81317)
+ (xy 221.887978 130.813009) (xy 221.888 130.81) (xy 221.888 105.001717) (xy 221.952202 104.983065) (xy 221.956439 104.980868)
+ (xy 221.961012 104.979488) (xy 222.035074 104.940108) (xy 222.109532 104.901513) (xy 222.113264 104.898533) (xy 222.11748 104.896292)
+ (xy 222.182489 104.843271) (xy 222.248025 104.790955) (xy 222.254671 104.784401) (xy 222.254808 104.78429) (xy 222.254912 104.784163)
+ (xy 222.257053 104.782053) (xy 222.892053 104.147053) (xy 222.945299 104.082229) (xy 222.999203 104.01799) (xy 223.001503 104.013805)
+ (xy 223.004534 104.010116) (xy 223.044168 103.936197) (xy 223.084575 103.862699) (xy 223.086018 103.858148) (xy 223.088275 103.85394)
+ (xy 223.11279 103.773751) (xy 223.138158 103.693784) (xy 223.13869 103.689036) (xy 223.140086 103.684472) (xy 223.148565 103.601)
+ (xy 223.157911 103.517678) (xy 223.157976 103.508351) (xy 223.157995 103.508169) (xy 223.157978 103.507999) (xy 223.158 103.505)
+ (xy 223.158 138.28) (xy 160.004457 138.28) (xy 160.414143 138.020006) (xy 160.79617 137.656206) (xy 161.100259 137.225133)
+ (xy 161.314827 136.743204) (xy 161.431702 136.228778) (xy 161.440116 135.626232) (xy 161.33765 135.108742) (xy 161.136621 134.621011)
+ (xy 160.844687 134.181615) (xy 160.472967 133.80729) (xy 160.03562 133.512296) (xy 159.549304 133.307867) (xy 159.032542 133.201791)
+ (xy 158.505019 133.198109) (xy 157.986827 133.296959) (xy 157.497703 133.494578) (xy 157.05628 133.783437) (xy 156.67937 134.152535)
+ (xy 156.381329 134.587812) (xy 156.17351 135.072689) (xy 156.063829 135.588698) (xy 156.056464 136.116183) (xy 156.151694 136.635052)
+ (xy 156.345893 137.125543) (xy 156.631664 137.568972) (xy 156.998122 137.94845) (xy 157.431308 138.249522) (xy 157.501069 138.28)
+ (xy 138.115543 138.28) (xy 138.115543 136.8528) (xy 138.115543 132.0824) (xy 136.675061 132.0824) (xy 136.675061 121.780762)
+ (xy 136.620971 121.507589) (xy 136.514852 121.250125) (xy 136.360746 121.018176) (xy 136.164522 120.820577) (xy 135.933654 120.664855)
+ (xy 135.676937 120.556941) (xy 135.404149 120.500946) (xy 135.125679 120.499001) (xy 134.852135 120.551183) (xy 134.593936 120.655502)
+ (xy 134.360917 120.807985) (xy 134.161953 121.002825) (xy 134.15567 121.012) (xy 131.502439 121.012) (xy 131.713612 120.876092)
+ (xy 131.918748 120.677892) (xy 132.081276 120.44348) (xy 132.194949 120.181865) (xy 132.2554 119.9031) (xy 132.2554 119.5475)
+ (xy 132.2554 119.2125) (xy 132.2554 118.8569) (xy 132.194949 118.578135) (xy 132.081276 118.31652) (xy 131.918748 118.082108)
+ (xy 131.713612 117.883908) (xy 131.47375 117.729536) (xy 131.200025 117.632616) (xy 130.9775 117.754499) (xy 130.9775 119.2125)
+ (xy 132.2554 119.2125) (xy 132.2554 119.5475) (xy 130.9775 119.5475) (xy 130.9775 119.5675) (xy 130.6425 119.5675)
+ (xy 130.6425 119.5475) (xy 130.6225 119.5475) (xy 130.6225 119.2125) (xy 130.6425 119.2125) (xy 130.6425 117.754499)
+ (xy 130.419975 117.632616) (xy 130.14625 117.729536) (xy 129.906388 117.883908) (xy 129.701252 118.082108) (xy 129.538724 118.31652)
+ (xy 129.533654 118.328187) (xy 129.473904 118.215814) (xy 129.295614 117.997208) (xy 129.078257 117.817395) (xy 128.830115 117.683225)
+ (xy 128.560638 117.599808) (xy 128.280091 117.570321) (xy 127.999159 117.595888) (xy 127.728544 117.675534) (xy 127.478552 117.806227)
+ (xy 127.258707 117.982987) (xy 127.077381 118.199083) (xy 126.999923 118.339977) (xy 126.933904 118.215814) (xy 126.755614 117.997208)
+ (xy 126.538257 117.817395) (xy 126.290115 117.683225) (xy 126.020638 117.599808) (xy 125.740091 117.570321) (xy 125.459159 117.595888)
+ (xy 125.188544 117.675534) (xy 124.938552 117.806227) (xy 124.718707 117.982987) (xy 124.537381 118.199083) (xy 124.466371 118.328247)
+ (xy 124.461276 118.31652) (xy 124.298748 118.082108) (xy 124.093612 117.883908) (xy 123.85375 117.729536) (xy 123.580025 117.632616)
+ (xy 123.3575 117.754499) (xy 123.3575 119.2125) (xy 123.3775 119.2125) (xy 123.3775 119.5475) (xy 123.3575 119.5475)
+ (xy 123.3575 121.005501) (xy 123.580025 121.127384) (xy 123.85375 121.030464) (xy 124.093612 120.876092) (xy 124.298748 120.677892)
+ (xy 124.461276 120.44348) (xy 124.466345 120.431812) (xy 124.526096 120.544186) (xy 124.704386 120.762792) (xy 124.921743 120.942605)
+ (xy 125.169885 121.076775) (xy 125.439362 121.160192) (xy 125.719909 121.189679) (xy 126.000841 121.164112) (xy 126.271456 121.084466)
+ (xy 126.521448 120.953773) (xy 126.741293 120.777013) (xy 126.922619 120.560917) (xy 127.000076 120.420022) (xy 127.066096 120.544186)
+ (xy 127.244386 120.762792) (xy 127.398622 120.890387) (xy 127.403539 120.906674) (xy 127.426935 120.987202) (xy 127.429131 120.991439)
+ (xy 127.430512 120.996012) (xy 127.469891 121.070074) (xy 127.508487 121.144532) (xy 127.511466 121.148264) (xy 127.513708 121.15248)
+ (xy 127.566728 121.217489) (xy 127.619045 121.283025) (xy 127.625598 121.289671) (xy 127.62571 121.289808) (xy 127.625836 121.289912)
+ (xy 127.627947 121.292053) (xy 128.897947 122.562053) (xy 128.96277 122.615299) (xy 129.02701 122.669203) (xy 129.031194 122.671503)
+ (xy 129.034884 122.674534) (xy 129.108802 122.714168) (xy 129.182301 122.754575) (xy 129.186851 122.756018) (xy 129.19106 122.758275)
+ (xy 129.271248 122.78279) (xy 129.351216 122.808158) (xy 129.355963 122.80869) (xy 129.360528 122.810086) (xy 129.443955 122.81856)
+ (xy 129.527322 122.827911) (xy 129.536659 122.827976) (xy 129.536831 122.827994) (xy 129.53699 122.827978) (xy 129.54 122.828)
+ (xy 134.157728 122.828) (xy 134.330217 123.006617) (xy 134.558887 123.165547) (xy 134.814073 123.277035) (xy 135.086053 123.336834)
+ (xy 135.364468 123.342666) (xy 135.638714 123.294309) (xy 135.898344 123.193605) (xy 136.13347 123.04439) (xy 136.335134 122.852347)
+ (xy 136.495657 122.624791) (xy 136.608924 122.37039) (xy 136.67062 122.098834) (xy 136.675061 121.780762) (xy 136.675061 132.0824)
+ (xy 110.804457 132.0824) (xy 110.804457 136.8528) (xy 138.115543 136.8528) (xy 138.115543 138.28) (xy 103.408258 138.28)
+ (xy 103.408258 134.6224) (xy 85.821743 134.6224) (xy 85.821743 137.747124) (xy 82.57311 134.840452) (xy 82.57311 127.891685)
+ (xy 82.475482 127.398627) (xy 82.283944 126.933922) (xy 82.005793 126.515271) (xy 81.651622 126.158619) (xy 81.234923 125.877552)
+ (xy 80.771567 125.682775) (xy 80.279203 125.581707) (xy 79.776585 125.578198) (xy 79.282858 125.672382) (xy 78.816827 125.86067)
+ (xy 78.396244 126.135892) (xy 78.037128 126.487564) (xy 77.753159 126.902291) (xy 77.555152 127.364276) (xy 77.450649 127.855923)
+ (xy 77.443631 128.358504) (xy 77.534366 128.852877) (xy 77.719396 129.32021) (xy 77.991675 129.742705) (xy 78.340831 130.104267)
+ (xy 78.753566 130.391124) (xy 79.214157 130.592352) (xy 79.705062 130.700284) (xy 80.207582 130.710811) (xy 80.702576 130.62353)
+ (xy 81.17119 130.441766) (xy 81.595575 130.172444) (xy 81.959566 129.82582) (xy 82.249298 129.415098) (xy 82.453736 128.955923)
+ (xy 82.565093 128.465783) (xy 82.57311 127.891685) (xy 82.57311 134.840452) (xy 74.5085 127.624748) (xy 74.5085 48.893632)
+ (xy 76.45843 46.943701) (xy 76.634722 47.020721) (xy 77.149952 47.134002) (xy 77.677373 47.14505) (xy 78.196895 47.053444)
+ (xy 78.688729 46.862674) (xy 79.134143 46.580006) (xy 79.51617 46.216206) (xy 79.820259 45.785133) (xy 80.034827 45.303204)
+ (xy 80.151702 44.788778) (xy 80.160116 44.186232) (xy 80.05765 43.668742) (xy 79.963007 43.439124) (xy 81.342132 42.06)
+ (xy 157.489417 42.06) (xy 157.05628 42.343437) (xy 156.67937 42.712535) (xy 156.381329 43.147812) (xy 156.17351 43.632689)
+ (xy 156.063829 44.148698) (xy 156.056464 44.676183) (xy 156.151694 45.195052) (xy 156.345893 45.685543) (xy 156.631664 46.128972)
+ (xy 156.998122 46.50845) (xy 157.431308 46.809522) (xy 157.914722 47.020721) (xy 158.429952 47.134002) (xy 158.957373 47.14505)
+ (xy 159.476895 47.053444) (xy 159.968729 46.862674) (xy 160.414143 46.580006) (xy 160.79617 46.216206) (xy 161.100259 45.785133)
+ (xy 161.314827 45.303204) (xy 161.431702 44.788778) (xy 161.440116 44.186232) (xy 161.33765 43.668742) (xy 161.136621 43.181011)
+ (xy 160.844687 42.741615) (xy 160.472967 42.36729) (xy 160.03562 42.072296) (xy 160.006369 42.06) (xy 219.650109 42.06)
+ (xy 232.26 54.039397) (xy 232.26 128.845876)
+ )
+ )
+ )
+)
diff --git a/demos/pic_programmer/pic_programmer.net b/demos/pic_programmer/pic_programmer.net
new file mode 100644
index 0000000..2b62ba1
--- /dev/null
+++ b/demos/pic_programmer/pic_programmer.net
@@ -0,0 +1,1089 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/pic_programmer/pic_programmer.sch)
+ (date "05/11/2015 17:22:30")
+ (tool "Eeschema (2015-11-05 BZR 6299)-product")
+ (sheet (number 1) (name /) (tstamps /)
+ (title_block
+ (title "JDM - COM84 PIC Programmer with 13V DC/DC converter")
+ (company KiCad)
+ (rev 2)
+ (date "05 jan 2014")
+ (source pic_programmer.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value ""))))
+ (sheet (number 2) (name /pic_sockets/) (tstamps /4804A5E2/)
+ (title_block
+ (title "JDM - COM84 PIC Programmer with 13V DC/DC converter")
+ (company KiCad)
+ (rev 3)
+ (date "Sun 22 Mar 2015")
+ (source pic_sockets.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value "")))))
+ (components
+ (comp (ref C9)
+ (value 220nF)
+ (footprint discret:C1-1)
+ (libsource (lib pic_programmer_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 464AD280))
+ (comp (ref JP1)
+ (value JUMPER)
+ (footprint connect:GS2)
+ (libsource (lib pic_programmer_schlib) (part JUMPER))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639BAF8))
+ (comp (ref D11)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639BA28))
+ (comp (ref D12)
+ (value YELLOW-LED)
+ (footprint discret:LEDV)
+ (libsource (lib pic_programmer_schlib) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639B9EA))
+ (comp (ref R21)
+ (value 470)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639B9E9))
+ (comp (ref R20)
+ (value 2.2K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639B9B3))
+ (comp (ref R19)
+ (value 2.2K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639B9B0))
+ (comp (ref Q3)
+ (value BC307)
+ (footprint discret:TO92)
+ (libsource (lib pic_programmer_schlib) (part PNP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4639B996))
+ (comp (ref RV1)
+ (value 1K)
+ (footprint discret:RV2X4)
+ (libsource (lib pic_programmer_schlib) (part POT))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 443D0101))
+ (comp (ref R18)
+ (value 220)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 44369638))
+ (comp (ref D10)
+ (value SCHOTTKY)
+ (footprint discret:D5)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A6026))
+ (comp (ref R10)
+ (value 5,1K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A5F83))
+ (comp (ref C4)
+ (value 0)
+ (footprint discret:C1-1)
+ (libsource (lib pic_programmer_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A5F61))
+ (comp (ref U4)
+ (value LT1373)
+ (footprint dip_sockets:DIP-8__300_ELL)
+ (libsource (lib pic_programmer_schlib) (part LT1373))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A5E20))
+ (comp (ref R16)
+ (value 62K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A58DC))
+ (comp (ref R15)
+ (value 6.2K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A58D7))
+ (comp (ref C5)
+ (value 10nF)
+ (footprint discret:C1-1)
+ (libsource (lib pic_programmer_schlib) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A58B1))
+ (comp (ref C3)
+ (value 22uF/25V)
+ (footprint discret:CP8)
+ (libsource (lib pic_programmer_schlib) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A584C))
+ (comp (ref L1)
+ (value 22uH)
+ (footprint inductors:INDUCTOR_V)
+ (libsource (lib pic_programmer_schlib) (part INDUCTOR))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A57BE))
+ (comp (ref R17)
+ (value 22K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A50BF))
+ (comp (ref D9)
+ (value GREEN-LED)
+ (footprint discret:LEDV)
+ (fields
+ (field (name Champ4) "GREEN LED"))
+ (libsource (lib pic_programmer_schlib) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A5084))
+ (comp (ref R14)
+ (value 470)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A5083))
+ (comp (ref C1)
+ (value 100µF)
+ (footprint discret:CP10)
+ (libsource (lib pic_programmer_schlib) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A5056))
+ (comp (ref U3)
+ (value 7805)
+ (footprint discret:LM78XX)
+ (libsource (lib pic_programmer_schlib) (part 7805))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A504A))
+ (comp (ref C2)
+ (value 220uF)
+ (footprint discret:CP10)
+ (libsource (lib pic_programmer_schlib) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A501D))
+ (comp (ref D1)
+ (value 1N4004)
+ (footprint discret:D5)
+ (libsource (lib pic_programmer_schlib) (part DIODE))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A500B))
+ (comp (ref P1)
+ (value CONN_2)
+ (footprint connect:bornier2)
+ (libsource (lib pic_programmer_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4FE7))
+ (comp (ref D8)
+ (value RED-LED)
+ (footprint discret:LEDV)
+ (fields
+ (field (name Champ4) "Low Current Led"))
+ (libsource (lib pic_programmer_schlib) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4F5D))
+ (comp (ref R9)
+ (value 2.2K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4F52))
+ (comp (ref Q2)
+ (value BC307)
+ (footprint discret:TO92)
+ (libsource (lib pic_programmer_schlib) (part PNP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4F30))
+ (comp (ref R7)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4F2A))
+ (comp (ref R11)
+ (value 22K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4F23))
+ (comp (ref Q1)
+ (value BC237)
+ (footprint discret:TO92)
+ (libsource (lib pic_programmer_schlib) (part NPN))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4EB9))
+ (comp (ref R8)
+ (value 1K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D92))
+ (comp (ref R13)
+ (value 470)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D8D))
+ (comp (ref R12)
+ (value 470)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D85))
+ (comp (ref U2)
+ (value 74HC125)
+ (footprint dip_sockets:DIP-14__300_ELL)
+ (libsource (lib pic_programmer_schlib) (part 74LS125))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D6B))
+ (comp (ref D7)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D65))
+ (comp (ref D6)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D64))
+ (comp (ref R6)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D63))
+ (comp (ref R5)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D62))
+ (comp (ref D5)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D5D))
+ (comp (ref D4)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D5C))
+ (comp (ref R4)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D5B))
+ (comp (ref R3)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D5A))
+ (comp (ref D3)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D25))
+ (comp (ref D2)
+ (value BAT43)
+ (footprint discret:D3)
+ (libsource (lib pic_programmer_schlib) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4D1B))
+ (comp (ref R2)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4CFB))
+ (comp (ref R1)
+ (value 10K)
+ (footprint discret:R4)
+ (libsource (lib pic_programmer_schlib) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4CF4))
+ (comp (ref J1)
+ (value DB9-FEMAL)
+ (footprint connect:DB9FC)
+ (libsource (lib pic_programmer_schlib) (part DB9))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 442A4C93))
+ (comp (ref P101)
+ (value CONN_1)
+ (footprint footprints:1pin-4)
+ (libsource (lib pic_programmer_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54020BEA))
+ (comp (ref P102)
+ (value CONN_1)
+ (footprint footprints:1pin-4)
+ (libsource (lib pic_programmer_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54020DA9))
+ (comp (ref P103)
+ (value CONN_1)
+ (footprint footprints:1pin-4)
+ (libsource (lib pic_programmer_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54020DC2))
+ (comp (ref P104)
+ (value CONN_1)
+ (footprint footprints:1pin-4)
+ (libsource (lib pic_programmer_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54020DE3))
+ (comp (ref P105)
+ (value CONN_1)
+ (footprint footprints:1pin-4)
+ (libsource (lib pic_programmer_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54020E5D))
+ (comp (ref P106)
+ (value CONN_1)
+ (footprint footprints:1pin-4)
+ (libsource (lib pic_programmer_schlib) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 54020E76))
+ (comp (ref P2)
+ (value SUPP28)
+ (footprint dip_sockets:DIP-28__300_ELL)
+ (libsource (lib pic_programmer_schlib) (part SUPP28))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 4436967E))
+ (comp (ref C7)
+ (value 100nF)
+ (footprint discret:C1-1)
+ (libsource (lib pic_programmer_schlib) (part C))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 442AA145))
+ (comp (ref P3)
+ (value SUPP40)
+ (footprint sockets:40tex-Ell600)
+ (libsource (lib pic_programmer_schlib) (part SUPP40))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 442A88ED))
+ (comp (ref U1)
+ (value 24Cxx)
+ (footprint dip_sockets:DIP-8__300_ELL)
+ (libsource (lib pic_programmer_schlib) (part 24C16))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 442A87F7))
+ (comp (ref U5)
+ (value PIC_18_PINS)
+ (footprint dip_sockets:DIP-18__300_ELL)
+ (libsource (lib pic_programmer_schlib) (part PIC16F54))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 442A81A7))
+ (comp (ref U6)
+ (value PIC_8_PINS)
+ (footprint dip_sockets:DIP-8__300_ELL)
+ (libsource (lib pic_programmer_schlib) (part PIC12C508A))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 442A81A5))
+ (comp (ref C6)
+ (value 100nF)
+ (footprint discret:C1-1)
+ (libsource (lib pic_programmer_schlib) (part C))
+ (sheetpath (names /pic_sockets/) (tstamps /4804A5E2/))
+ (tstamp 442AA12B)))
+ (libparts
+ (libpart (lib pic_programmer_schlib) (part 24C16)
+ (aliases
+ (alias 24C512))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 24C16))
+ (pins
+ (pin (num 1) (name A0) (type input))
+ (pin (num 2) (name A1) (type input))
+ (pin (num 3) (name A2) (type input))
+ (pin (num 4) (name GND) (type power_in))
+ (pin (num 5) (name SDA) (type BiDi))
+ (pin (num 6) (name SCL) (type input))
+ (pin (num 7) (name WP) (type input))
+ (pin (num 8) (name VCC) (type power_in))))
+ (libpart (lib pic_programmer_schlib) (part 74LS125)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS125))
+ (pins
+ (pin (num 1) (name E) (type input))
+ (pin (num 2) (name D) (type input))
+ (pin (num 3) (name O) (type 3state))
+ (pin (num 4) (name E) (type input))
+ (pin (num 5) (name D) (type input))
+ (pin (num 6) (name O) (type 3state))
+ (pin (num 7) (name GND) (type power_in))
+ (pin (num 8) (name O) (type 3state))
+ (pin (num 9) (name D) (type input))
+ (pin (num 10) (name E) (type input))
+ (pin (num 11) (name O) (type 3state))
+ (pin (num 12) (name D) (type input))
+ (pin (num 13) (name E) (type input))
+ (pin (num 14) (name VCC) (type power_in))))
+ (libpart (lib pic_programmer_schlib) (part 7805)
+ (aliases
+ (alias LM7805)
+ (alias LM7812)
+ (alias 78L05))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 7805))
+ (pins
+ (pin (num GND) (name GND) (type input))
+ (pin (num VI) (name VI) (type input))
+ (pin (num VO) (name VO) (type power_out))))
+ (libpart (lib pic_programmer_schlib) (part C)
+ (footprints
+ (fp SM*)
+ (fp C?)
+ (fp C1-1))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part CONN_1)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_1))
+ (pins
+ (pin (num 1) (name 1) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part CONN_2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part CP)
+ (aliases
+ (alias CAPAPOL))
+ (footprints
+ (fp CP*)
+ (fp SM*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part DB9)
+ (footprints
+ (fp DB9*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB9))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part DIODE)
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODE))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part DIODESCH)
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODESCH))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part INDUCTOR)
+ (fields
+ (field (name Reference) L)
+ (field (name Value) INDUCTOR))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part JUMPER)
+ (fields
+ (field (name Reference) JP)
+ (field (name Value) JUMPER))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part LED)
+ (footprints
+ (fp LED-3MM)
+ (fp LED-5MM)
+ (fp LED-10MM)
+ (fp LED-0603)
+ (fp LED-0805)
+ (fp LED-1206)
+ (fp LEDV))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) LED))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part LT1372)
+ (aliases
+ (alias LT1373))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) LT1372))
+ (pins
+ (pin (num 1) (name Vc) (type input))
+ (pin (num 2) (name FB+) (type input))
+ (pin (num 3) (name FB-) (type passive))
+ (pin (num 4) (name S/S) (type passive))
+ (pin (num 5) (name Vin) (type power_in))
+ (pin (num 6) (name GND_S) (type input))
+ (pin (num 7) (name GND) (type input))
+ (pin (num 8) (name Vsw) (type input))))
+ (libpart (lib pic_programmer_schlib) (part NPN)
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) NPN))
+ (pins
+ (pin (num 1) (name E) (type passive))
+ (pin (num 2) (name B) (type input))
+ (pin (num 3) (name C) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part PIC12C508A)
+ (aliases
+ (alias PIC12C509A))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) PIC12C508A))
+ (pins
+ (pin (num 1) (name VDD) (type power_in))
+ (pin (num 2) (name GP5/OSC1) (type input))
+ (pin (num 3) (name GP4/OSC2) (type input))
+ (pin (num 4) (name GP3/MCLR) (type input))
+ (pin (num 5) (name GP2) (type input))
+ (pin (num 6) (name GP1) (type input))
+ (pin (num 7) (name GP0) (type input))
+ (pin (num 8) (name VSS) (type power_in))))
+ (libpart (lib pic_programmer_schlib) (part PIC16F54)
+ (fields
+ (field (name Reference) U?)
+ (field (name Value) PIC16F54))
+ (pins
+ (pin (num 1) (name RA2) (type BiDi))
+ (pin (num 2) (name RA3) (type BiDi))
+ (pin (num 3) (name T0ckl) (type output))
+ (pin (num 4) (name MCLR) (type input))
+ (pin (num 5) (name VSS) (type power_in))
+ (pin (num 6) (name RB0) (type BiDi))
+ (pin (num 7) (name RB1) (type BiDi))
+ (pin (num 8) (name RB2) (type BiDi))
+ (pin (num 9) (name RB3) (type BiDi))
+ (pin (num 10) (name RB4) (type BiDi))
+ (pin (num 11) (name RB5) (type BiDi))
+ (pin (num 12) (name ICSPC/RB6) (type BiDi))
+ (pin (num 13) (name ICSPD/RB7) (type BiDi))
+ (pin (num 14) (name VDD) (type power_in))
+ (pin (num 15) (name OSC2/CLKO) (type output))
+ (pin (num 16) (name OSC1/CLKI) (type input))
+ (pin (num 17) (name RA0) (type BiDi))
+ (pin (num 18) (name RA1) (type BiDi))))
+ (libpart (lib pic_programmer_schlib) (part PNP)
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) PNP))
+ (pins
+ (pin (num 1) (name E) (type passive))
+ (pin (num 2) (name B) (type input))
+ (pin (num 3) (name C) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part POT)
+ (fields
+ (field (name Reference) RV)
+ (field (name Value) POT))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part R)
+ (footprints
+ (fp R?)
+ (fp SM0603)
+ (fp SM0805)
+ (fp R?-*)
+ (fp SM1206))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part SUPP28)
+ (fields
+ (field (name Reference) J)
+ (field (name Value) SUPP28))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name 14) (type passive))
+ (pin (num 15) (name 15) (type passive))
+ (pin (num 16) (name 16) (type passive))
+ (pin (num 17) (name 17) (type passive))
+ (pin (num 18) (name 18) (type passive))
+ (pin (num 19) (name 19) (type passive))
+ (pin (num 20) (name 20) (type passive))
+ (pin (num 21) (name 21) (type passive))
+ (pin (num 22) (name 22) (type passive))
+ (pin (num 23) (name 23) (type passive))
+ (pin (num 24) (name 24) (type passive))
+ (pin (num 25) (name 25) (type passive))
+ (pin (num 26) (name 26) (type passive))
+ (pin (num 27) (name 27) (type passive))
+ (pin (num 28) (name 28) (type passive))))
+ (libpart (lib pic_programmer_schlib) (part SUPP40)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) SUPP40))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name 14) (type passive))
+ (pin (num 15) (name 15) (type passive))
+ (pin (num 16) (name 16) (type passive))
+ (pin (num 17) (name 17) (type passive))
+ (pin (num 18) (name 18) (type passive))
+ (pin (num 19) (name 19) (type passive))
+ (pin (num 20) (name 20) (type passive))
+ (pin (num 21) (name 21) (type passive))
+ (pin (num 22) (name 22) (type passive))
+ (pin (num 23) (name 23) (type passive))
+ (pin (num 24) (name 24) (type passive))
+ (pin (num 25) (name 25) (type passive))
+ (pin (num 26) (name 26) (type passive))
+ (pin (num 27) (name 27) (type passive))
+ (pin (num 28) (name 28) (type passive))
+ (pin (num 29) (name 29) (type passive))
+ (pin (num 30) (name 30) (type passive))
+ (pin (num 31) (name 31) (type passive))
+ (pin (num 32) (name 32) (type passive))
+ (pin (num 33) (name 33) (type passive))
+ (pin (num 34) (name 34) (type passive))
+ (pin (num 35) (name 35) (type passive))
+ (pin (num 36) (name 36) (type passive))
+ (pin (num 37) (name 37) (type passive))
+ (pin (num 38) (name 38) (type passive))
+ (pin (num 39) (name 39) (type passive))
+ (pin (num 40) (name 40) (type passive)))))
+ (libraries
+ (library (logical pic_programmer_schlib)
+ (uri libs\pic_programmer_schlib.lib)))
+ (nets
+ (net (code 1) (name GND)
+ (node (ref P2) (pin 8))
+ (node (ref U2) (pin 4))
+ (node (ref J1) (pin 5))
+ (node (ref R6) (pin 2))
+ (node (ref D9) (pin 2))
+ (node (ref U2) (pin 1))
+ (node (ref C5) (pin 2))
+ (node (ref R2) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref D3) (pin 1))
+ (node (ref D5) (pin 1))
+ (node (ref U2) (pin 10))
+ (node (ref P3) (pin 8))
+ (node (ref U6) (pin 8))
+ (node (ref U1) (pin 4))
+ (node (ref C6) (pin 2))
+ (node (ref D7) (pin 1))
+ (node (ref U2) (pin 13))
+ (node (ref D12) (pin 2))
+ (node (ref P3) (pin 12))
+ (node (ref P3) (pin 31))
+ (node (ref U2) (pin 7))
+ (node (ref R4) (pin 2))
+ (node (ref P1) (pin 1))
+ (node (ref R17) (pin 2))
+ (node (ref U1) (pin 1))
+ (node (ref C4) (pin 2))
+ (node (ref U5) (pin 5))
+ (node (ref U4) (pin 6))
+ (node (ref D8) (pin 2))
+ (node (ref Q1) (pin 1))
+ (node (ref P2) (pin 19))
+ (node (ref R15) (pin 2))
+ (node (ref U1) (pin 3))
+ (node (ref U1) (pin 2))
+ (node (ref C2) (pin 2))
+ (node (ref C3) (pin 2))
+ (node (ref U4) (pin 7))
+ (node (ref U3) (pin GND))
+ (node (ref C1) (pin 2)))
+ (net (code 2) (name VPP)
+ (node (ref R7) (pin 1))
+ (node (ref R16) (pin 2))
+ (node (ref D10) (pin 2))
+ (node (ref C9) (pin 1))
+ (node (ref Q2) (pin 1))
+ (node (ref C3) (pin 1)))
+ (net (code 3) (name "Net-(D8-Pad1)")
+ (node (ref R9) (pin 2))
+ (node (ref D8) (pin 1)))
+ (net (code 4) (name /pic_sockets/VPP-MCLR)
+ (node (ref P3) (pin 1))
+ (node (ref U6) (pin 4))
+ (node (ref P2) (pin 1))
+ (node (ref R18) (pin 2))
+ (node (ref U5) (pin 4)))
+ (net (code 5) (name /pic_sockets/CLOCK-RB6)
+ (node (ref U5) (pin 12))
+ (node (ref P3) (pin 39))
+ (node (ref U6) (pin 6))
+ (node (ref U1) (pin 6))
+ (node (ref P2) (pin 27))
+ (node (ref R13) (pin 2)))
+ (net (code 6) (name "Net-(Q1-Pad2)")
+ (node (ref Q1) (pin 2))
+ (node (ref R8) (pin 2)))
+ (net (code 7) (name "Net-(D10-Pad1)")
+ (node (ref D10) (pin 1))
+ (node (ref L1) (pin 1))
+ (node (ref U4) (pin 8)))
+ (net (code 8) (name VCC)
+ (node (ref JP1) (pin 1))
+ (node (ref D6) (pin 2))
+ (node (ref D2) (pin 2))
+ (node (ref R14) (pin 1))
+ (node (ref C1) (pin 1))
+ (node (ref U3) (pin VO))
+ (node (ref U4) (pin 5))
+ (node (ref L1) (pin 2))
+ (node (ref Q3) (pin 1))
+ (node (ref D4) (pin 2))
+ (node (ref R20) (pin 1))
+ (node (ref U2) (pin 14)))
+ (net (code 9) (name "Net-(J1-Pad1)")
+ (node (ref J1) (pin 1)))
+ (net (code 10) (name "Net-(J1-Pad6)")
+ (node (ref J1) (pin 6)))
+ (net (code 11) (name "Net-(J1-Pad2)")
+ (node (ref J1) (pin 2)))
+ (net (code 12) (name "Net-(J1-Pad9)")
+ (node (ref J1) (pin 9)))
+ (net (code 13) (name "Net-(D1-Pad1)")
+ (node (ref D1) (pin 1))
+ (node (ref P1) (pin 2)))
+ (net (code 14) (name "Net-(C2-Pad1)")
+ (node (ref C2) (pin 1))
+ (node (ref D1) (pin 2))
+ (node (ref U3) (pin VI)))
+ (net (code 15) (name "Net-(D9-Pad1)")
+ (node (ref R14) (pin 2))
+ (node (ref D9) (pin 1)))
+ (net (code 16) (name /TXD)
+ (node (ref J1) (pin 3))
+ (node (ref R1) (pin 1))
+ (node (ref R2) (pin 1)))
+ (net (code 17) (name "Net-(R8-Pad1)")
+ (node (ref R8) (pin 1))
+ (node (ref U2) (pin 3)))
+ (net (code 18) (name "Net-(R12-Pad1)")
+ (node (ref R12) (pin 1))
+ (node (ref U2) (pin 6)))
+ (net (code 19) (name "Net-(P102-Pad1)")
+ (node (ref P102) (pin 1)))
+ (net (code 20) (name "Net-(P106-Pad1)")
+ (node (ref P106) (pin 1)))
+ (net (code 21) (name "Net-(P105-Pad1)")
+ (node (ref P105) (pin 1)))
+ (net (code 22) (name "Net-(P104-Pad1)")
+ (node (ref P104) (pin 1)))
+ (net (code 23) (name "Net-(P103-Pad1)")
+ (node (ref P103) (pin 1)))
+ (net (code 24) (name "Net-(P101-Pad1)")
+ (node (ref P101) (pin 1)))
+ (net (code 25) (name "Net-(C9-Pad2)")
+ (node (ref R11) (pin 2))
+ (node (ref Q2) (pin 2))
+ (node (ref R7) (pin 2))
+ (node (ref C9) (pin 2)))
+ (net (code 26) (name "Net-(R13-Pad1)")
+ (node (ref U2) (pin 8))
+ (node (ref R13) (pin 1)))
+ (net (code 27) (name /pic_sockets/DATA-RB7)
+ (node (ref U6) (pin 7))
+ (node (ref P3) (pin 40))
+ (node (ref U5) (pin 13))
+ (node (ref U1) (pin 5))
+ (node (ref U2) (pin 12))
+ (node (ref R12) (pin 2))
+ (node (ref P2) (pin 28)))
+ (net (code 28) (name "Net-(D6-Pad1)")
+ (node (ref R5) (pin 2))
+ (node (ref U2) (pin 9))
+ (node (ref D7) (pin 2))
+ (node (ref D6) (pin 1)))
+ (net (code 29) (name "Net-(RV1-Pad2)")
+ (node (ref U4) (pin 2))
+ (node (ref RV1) (pin 2)))
+ (net (code 30) (name "Net-(R16-Pad1)")
+ (node (ref RV1) (pin 3))
+ (node (ref R16) (pin 1)))
+ (net (code 31) (name "Net-(R15-Pad1)")
+ (node (ref RV1) (pin 1))
+ (node (ref R15) (pin 1)))
+ (net (code 32) (name /pic_sockets/VCC_PIC)
+ (node (ref R21) (pin 2))
+ (node (ref C6) (pin 1))
+ (node (ref JP1) (pin 2))
+ (node (ref P3) (pin 11))
+ (node (ref U6) (pin 1))
+ (node (ref P3) (pin 32))
+ (node (ref U5) (pin 14))
+ (node (ref Q3) (pin 3))
+ (node (ref U1) (pin 8))
+ (node (ref P2) (pin 20))
+ (node (ref C7) (pin 1)))
+ (net (code 33) (name "Net-(Q3-Pad2)")
+ (node (ref Q3) (pin 2))
+ (node (ref R19) (pin 2))
+ (node (ref R20) (pin 2)))
+ (net (code 34) (name "Net-(D12-Pad1)")
+ (node (ref R21) (pin 1))
+ (node (ref D12) (pin 1)))
+ (net (code 35) (name "Net-(D11-Pad1)")
+ (node (ref D11) (pin 1))
+ (node (ref R19) (pin 1)))
+ (net (code 36) (name "Net-(C4-Pad1)")
+ (node (ref U4) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref R10) (pin 1)))
+ (net (code 37) (name "Net-(C5-Pad1)")
+ (node (ref C5) (pin 1))
+ (node (ref R10) (pin 2)))
+ (net (code 38) (name "Net-(U4-Pad3)")
+ (node (ref U4) (pin 3)))
+ (net (code 39) (name /PC-CLOCK-OUT)
+ (node (ref J1) (pin 7))
+ (node (ref R5) (pin 1))
+ (node (ref R6) (pin 1)))
+ (net (code 40) (name /CTS)
+ (node (ref J1) (pin 8))
+ (node (ref U2) (pin 11)))
+ (net (code 41) (name /DTR)
+ (node (ref J1) (pin 4))
+ (node (ref R3) (pin 1))
+ (node (ref R4) (pin 1)))
+ (net (code 42) (name "Net-(U4-Pad4)")
+ (node (ref U4) (pin 4)))
+ (net (code 43) (name "Net-(Q2-Pad3)")
+ (node (ref R9) (pin 1))
+ (node (ref Q2) (pin 3))
+ (node (ref R18) (pin 1))
+ (node (ref R17) (pin 1)))
+ (net (code 44) (name "Net-(D11-Pad2)")
+ (node (ref D11) (pin 2))
+ (node (ref Q1) (pin 3))
+ (node (ref R11) (pin 1)))
+ (net (code 45) (name "Net-(D2-Pad1)")
+ (node (ref R1) (pin 2))
+ (node (ref D2) (pin 1))
+ (node (ref U2) (pin 2))
+ (node (ref D3) (pin 2)))
+ (net (code 46) (name "Net-(D4-Pad1)")
+ (node (ref U2) (pin 5))
+ (node (ref D5) (pin 2))
+ (node (ref R3) (pin 2))
+ (node (ref D4) (pin 1)))
+ (net (code 47) (name "Net-(U5-Pad9)")
+ (node (ref U5) (pin 9)))
+ (net (code 48) (name "Net-(U5-Pad18)")
+ (node (ref U5) (pin 18)))
+ (net (code 49) (name "Net-(U5-Pad17)")
+ (node (ref U5) (pin 17)))
+ (net (code 50) (name "Net-(U5-Pad15)")
+ (node (ref U5) (pin 15)))
+ (net (code 51) (name "Net-(U5-Pad16)")
+ (node (ref U5) (pin 16)))
+ (net (code 52) (name "Net-(U5-Pad11)")
+ (node (ref U5) (pin 11)))
+ (net (code 53) (name "Net-(U5-Pad10)")
+ (node (ref U5) (pin 10)))
+ (net (code 54) (name "Net-(U5-Pad2)")
+ (node (ref U5) (pin 2)))
+ (net (code 55) (name "Net-(U1-Pad7)")
+ (node (ref U1) (pin 7)))
+ (net (code 56) (name "Net-(U5-Pad8)")
+ (node (ref U5) (pin 8)))
+ (net (code 57) (name "Net-(U5-Pad7)")
+ (node (ref U5) (pin 7)))
+ (net (code 58) (name "Net-(U5-Pad6)")
+ (node (ref U5) (pin 6)))
+ (net (code 59) (name "Net-(U5-Pad3)")
+ (node (ref U5) (pin 3)))
+ (net (code 60) (name "Net-(U5-Pad1)")
+ (node (ref U5) (pin 1)))
+ (net (code 61) (name "Net-(P3-Pad25)")
+ (node (ref P3) (pin 25)))
+ (net (code 62) (name "Net-(P3-Pad15)")
+ (node (ref P3) (pin 15)))
+ (net (code 63) (name "Net-(P3-Pad34)")
+ (node (ref P3) (pin 34)))
+ (net (code 64) (name "Net-(P3-Pad24)")
+ (node (ref P3) (pin 24)))
+ (net (code 65) (name "Net-(P3-Pad14)")
+ (node (ref P3) (pin 14)))
+ (net (code 66) (name "Net-(P3-Pad33)")
+ (node (ref P3) (pin 33)))
+ (net (code 67) (name "Net-(P3-Pad23)")
+ (node (ref P3) (pin 23)))
+ (net (code 68) (name "Net-(P3-Pad13)")
+ (node (ref P3) (pin 13)))
+ (net (code 69) (name "Net-(P3-Pad35)")
+ (node (ref P3) (pin 35)))
+ (net (code 70) (name "Net-(P3-Pad22)")
+ (node (ref P3) (pin 22)))
+ (net (code 71) (name "Net-(P3-Pad21)")
+ (node (ref P3) (pin 21)))
+ (net (code 72) (name "Net-(P3-Pad30)")
+ (node (ref P3) (pin 30)))
+ (net (code 73) (name "Net-(P3-Pad20)")
+ (node (ref P3) (pin 20)))
+ (net (code 74) (name "Net-(P3-Pad38)")
+ (node (ref P3) (pin 38)))
+ (net (code 75) (name "Net-(P3-Pad29)")
+ (node (ref P3) (pin 29)))
+ (net (code 76) (name "Net-(P3-Pad19)")
+ (node (ref P3) (pin 19)))
+ (net (code 77) (name "Net-(P3-Pad28)")
+ (node (ref P3) (pin 28)))
+ (net (code 78) (name "Net-(P3-Pad18)")
+ (node (ref P3) (pin 18)))
+ (net (code 79) (name "Net-(P3-Pad37)")
+ (node (ref P3) (pin 37)))
+ (net (code 80) (name "Net-(P3-Pad27)")
+ (node (ref P3) (pin 27)))
+ (net (code 81) (name "Net-(P3-Pad17)")
+ (node (ref P3) (pin 17)))
+ (net (code 82) (name "Net-(P3-Pad36)")
+ (node (ref P3) (pin 36)))
+ (net (code 83) (name "Net-(P3-Pad26)")
+ (node (ref P3) (pin 26)))
+ (net (code 84) (name "Net-(P3-Pad16)")
+ (node (ref P3) (pin 16)))
+ (net (code 85) (name "Net-(U6-Pad2)")
+ (node (ref U6) (pin 2)))
+ (net (code 86) (name "Net-(U6-Pad3)")
+ (node (ref U6) (pin 3)))
+ (net (code 87) (name "Net-(U6-Pad5)")
+ (node (ref U6) (pin 5)))
+ (net (code 88) (name "Net-(P2-Pad21)")
+ (node (ref P2) (pin 21)))
+ (net (code 89) (name "Net-(P2-Pad10)")
+ (node (ref P2) (pin 10)))
+ (net (code 90) (name "Net-(P2-Pad12)")
+ (node (ref P2) (pin 12)))
+ (net (code 91) (name "Net-(P2-Pad13)")
+ (node (ref P2) (pin 13)))
+ (net (code 92) (name "Net-(P2-Pad14)")
+ (node (ref P2) (pin 14)))
+ (net (code 93) (name "Net-(P2-Pad26)")
+ (node (ref P2) (pin 26)))
+ (net (code 94) (name "Net-(P2-Pad25)")
+ (node (ref P2) (pin 25)))
+ (net (code 95) (name "Net-(P2-Pad24)")
+ (node (ref P2) (pin 24)))
+ (net (code 96) (name "Net-(P2-Pad23)")
+ (node (ref P2) (pin 23)))
+ (net (code 97) (name "Net-(P2-Pad22)")
+ (node (ref P2) (pin 22)))
+ (net (code 98) (name "Net-(P2-Pad9)")
+ (node (ref P2) (pin 9)))
+ (net (code 99) (name "Net-(P2-Pad18)")
+ (node (ref P2) (pin 18)))
+ (net (code 100) (name "Net-(P2-Pad17)")
+ (node (ref P2) (pin 17)))
+ (net (code 101) (name "Net-(P2-Pad16)")
+ (node (ref P2) (pin 16)))
+ (net (code 102) (name "Net-(P2-Pad15)")
+ (node (ref P2) (pin 15)))
+ (net (code 103) (name "Net-(P2-Pad11)")
+ (node (ref P2) (pin 11)))
+ (net (code 104) (name "Net-(P2-Pad4)")
+ (node (ref P2) (pin 4)))
+ (net (code 105) (name "Net-(P2-Pad3)")
+ (node (ref P2) (pin 3)))
+ (net (code 106) (name "Net-(P2-Pad2)")
+ (node (ref P2) (pin 2)))
+ (net (code 107) (name "Net-(P2-Pad5)")
+ (node (ref P2) (pin 5)))
+ (net (code 108) (name "Net-(P2-Pad6)")
+ (node (ref P2) (pin 6)))
+ (net (code 109) (name "Net-(P2-Pad7)")
+ (node (ref P2) (pin 7)))
+ (net (code 110) (name "Net-(P3-Pad10)")
+ (node (ref P3) (pin 10)))
+ (net (code 111) (name "Net-(P3-Pad9)")
+ (node (ref P3) (pin 9)))
+ (net (code 112) (name "Net-(P3-Pad7)")
+ (node (ref P3) (pin 7)))
+ (net (code 113) (name "Net-(P3-Pad6)")
+ (node (ref P3) (pin 6)))
+ (net (code 114) (name "Net-(P3-Pad5)")
+ (node (ref P3) (pin 5)))
+ (net (code 115) (name "Net-(P3-Pad4)")
+ (node (ref P3) (pin 4)))
+ (net (code 116) (name "Net-(P3-Pad3)")
+ (node (ref P3) (pin 3)))
+ (net (code 117) (name "Net-(P3-Pad2)")
+ (node (ref P3) (pin 2))))) \ No newline at end of file
diff --git a/demos/pic_programmer/pic_programmer.pro b/demos/pic_programmer/pic_programmer.pro
new file mode 100644
index 0000000..1c2d1ae
--- /dev/null
+++ b/demos/pic_programmer/pic_programmer.pro
@@ -0,0 +1,37 @@
+update=17/05/2015 17:14:38
+last_client=kicad
+[common]
+NetDir=
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=pic_programmer.net
+UseCmpFile=0
+PadDrill=0.8128
+PadDrillOvalY=0.8128
+PadSizeH=1.5748
+PadSizeV=2.794
+PcbTextSizeV=2.032
+PcbTextSizeH=1.524
+PcbTextThickness=0.3048
+ModuleTextSizeV=1.524
+ModuleTextSizeH=1.524
+ModuleTextSizeThickness=0.3048
+SolderMaskClearance=0.09999999999999999
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.381
+BoardOutlineThickness=0.381
+ModuleOutlineThickness=0.381
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=libs/pic_programmer_schlib
+LibName2=power
diff --git a/demos/pic_programmer/pic_programmer.sch b/demos/pic_programmer/pic_programmer.sch
new file mode 100644
index 0000000..27d7d2f
--- /dev/null
+++ b/demos/pic_programmer/pic_programmer.sch
@@ -0,0 +1,1369 @@
+EESchema Schematic File Version 2
+LIBS:pic_programmer_schlib
+LIBS:power
+LIBS:pic_programmer-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 2
+Title "JDM - COM84 PIC Programmer with 13V DC/DC converter"
+Date "05 jan 2014"
+Rev "2"
+Comp "KiCad"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 5700 1250 6100 1250
+Wire Wire Line
+ 5700 1250 5700 1200
+Wire Wire Line
+ 8650 3200 8650 3150
+Wire Wire Line
+ 6550 1600 7100 1600
+Wire Wire Line
+ 7400 2900 7350 2900
+Wire Wire Line
+ 7650 3300 7650 3200
+Wire Wire Line
+ 8000 2900 7900 2900
+Wire Wire Line
+ 8300 3200 8300 3100
+Wire Wire Line
+ 9450 5900 9400 5900
+Wire Wire Line
+ 9400 5900 9400 5650
+Wire Wire Line
+ 9400 5650 8750 5650
+Wire Wire Line
+ 9750 6150 9600 6150
+Wire Wire Line
+ 9750 5650 9600 5650
+Connection ~ 1400 6850
+Wire Wire Line
+ 1600 6850 1600 6900
+Wire Wire Line
+ 1350 6850 1600 6850
+Wire Wire Line
+ 8300 3500 9200 3500
+Wire Wire Line
+ 9200 4150 8250 4150
+Wire Wire Line
+ 9200 3850 8250 3850
+Wire Wire Line
+ 10250 5350 10250 5650
+Wire Wire Line
+ 9200 5400 8800 5400
+Wire Wire Line
+ 8800 5400 8800 5150
+Wire Wire Line
+ 9050 6300 9200 6300
+Wire Wire Line
+ 9200 6300 9200 6000
+Wire Wire Line
+ 9200 6000 9250 6000
+Wire Wire Line
+ 8800 6000 8600 6000
+Wire Wire Line
+ 8600 6000 8600 6100
+Wire Wire Line
+ 8100 6100 8000 6100
+Wire Wire Line
+ 8000 6100 8000 6300
+Wire Wire Line
+ 8000 6300 8650 6300
+Wire Wire Line
+ 7450 6150 7450 6100
+Wire Wire Line
+ 7450 6100 7600 6100
+Wire Notes Line
+ 11150 4500 11150 6450
+Wire Notes Line
+ 11150 4500 6400 4500
+Wire Wire Line
+ 8800 5150 8750 5150
+Wire Wire Line
+ 9400 5050 9400 5150
+Wire Notes Line
+ 6400 4500 6400 6450
+Wire Notes Line
+ 6400 6450 11150 6450
+Wire Wire Line
+ 10250 6150 10250 6200
+Connection ~ 10050 5400
+Wire Wire Line
+ 10050 5350 10050 5400
+Wire Wire Line
+ 7750 4700 7750 4650
+Wire Wire Line
+ 10800 5450 10800 5400
+Wire Wire Line
+ 10800 5400 10750 5400
+Connection ~ 10250 5400
+Wire Wire Line
+ 9600 5400 10350 5400
+Wire Wire Line
+ 1700 3700 2250 3700
+Wire Wire Line
+ 3900 4200 2250 4200
+Wire Wire Line
+ 2250 4200 2250 3700
+Connection ~ 3400 6650
+Wire Wire Line
+ 3400 6650 3400 6600
+Connection ~ 3200 6650
+Wire Wire Line
+ 3100 6650 3600 6650
+Wire Wire Line
+ 4150 6750 4150 6650
+Wire Wire Line
+ 4150 6650 4100 6650
+Wire Wire Line
+ 3200 6650 3200 6700
+Connection ~ 1950 6650
+Wire Wire Line
+ 1950 6700 1950 6650
+Wire Wire Line
+ 1850 6650 2300 6650
+Wire Wire Line
+ 1400 6900 1400 6850
+Wire Wire Line
+ 1450 6650 1350 6650
+Wire Wire Line
+ 7600 1600 8250 1600
+Wire Wire Line
+ 5950 5100 5350 5100
+Wire Wire Line
+ 5350 3150 6200 3150
+Wire Wire Line
+ 5150 1700 4950 1700
+Wire Wire Line
+ 5450 1400 5450 1500
+Wire Wire Line
+ 5450 1400 5500 1400
+Connection ~ 6100 1400
+Wire Wire Line
+ 6000 1400 6250 1400
+Wire Wire Line
+ 6100 1250 6100 1400
+Wire Wire Line
+ 6550 1200 6550 1100
+Wire Wire Line
+ 6550 1600 6550 1650
+Wire Wire Line
+ 6550 2600 6550 2650
+Wire Wire Line
+ 6550 2150 6550 2200
+Wire Wire Line
+ 2100 5100 3250 5100
+Wire Wire Line
+ 2100 5100 2100 3500
+Wire Wire Line
+ 2100 3500 1700 3500
+Wire Wire Line
+ 2450 3800 2450 3150
+Wire Wire Line
+ 2450 3800 1700 3800
+Wire Wire Line
+ 2250 1700 2850 1700
+Wire Wire Line
+ 2250 1700 2250 3600
+Wire Wire Line
+ 2250 3600 1700 3600
+Wire Wire Line
+ 2450 3150 3250 3150
+Connection ~ 5400 3150
+Wire Wire Line
+ 4800 4200 5400 4200
+Wire Wire Line
+ 5400 4200 5400 3150
+Wire Wire Line
+ 4850 5100 4800 5100
+Wire Wire Line
+ 4450 1700 4400 1700
+Wire Wire Line
+ 4850 3150 4800 3150
+Connection ~ 3200 5100
+Wire Wire Line
+ 3200 5150 3200 5100
+Wire Wire Line
+ 3850 5050 3850 5200
+Connection ~ 3850 5100
+Wire Wire Line
+ 3750 5100 3900 5100
+Connection ~ 3200 3150
+Wire Wire Line
+ 3200 3200 3200 3150
+Wire Wire Line
+ 3850 3100 3850 3250
+Connection ~ 3850 3150
+Wire Wire Line
+ 3750 3150 3900 3150
+Connection ~ 2800 1700
+Wire Wire Line
+ 2800 1750 2800 1700
+Wire Wire Line
+ 3450 1650 3450 1800
+Connection ~ 3450 1700
+Wire Wire Line
+ 3350 1700 3500 1700
+Wire Wire Line
+ 7900 2900 7900 2650
+Wire Wire Line
+ 8150 3200 9200 3200
+Connection ~ 8300 3200
+Wire Wire Line
+ 5450 1500 5850 1500
+Wire Wire Line
+ 5850 1500 5850 2900
+Wire Wire Line
+ 5850 2900 6950 2900
+Wire Wire Line
+ 7050 1850 7050 1600
+Connection ~ 7050 1600
+Wire Wire Line
+ 5700 800 5700 750
+Wire Wire Line
+ 5700 750 6100 750
+Wire Wire Line
+ 6100 750 6100 700
+$Comp
+L C C9
+U 1 1 464AD280
+P 5700 1000
+F 0 "C9" H 5750 1100 50 0000 L CNN
+F 1 "220nF" H 5750 900 50 0000 L CNN
+F 2 "discret:C1-1" H 5500 900 30 0000 C CNN
+F 3 "" H 5700 1000 60 0001 C CNN
+ 1 5700 1000
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR01
+U 1 1 4639BB04
+P 8650 2550
+F 0 "#PWR01" H 8650 2650 30 0001 C CNN
+F 1 "VCC" H 8650 2650 30 0000 C CNN
+F 2 "" H 8650 2550 60 0001 C CNN
+F 3 "" H 8650 2550 60 0001 C CNN
+ 1 8650 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L JUMPER JP1
+U 1 1 4639BAF8
+P 8650 2850
+F 0 "JP1" H 8650 3000 60 0000 C CNN
+F 1 "JUMPER" H 8650 2770 40 0000 C CNN
+F 2 "connect:GS2" H 8650 3050 30 0000 C CNN
+F 3 "" H 8650 2850 60 0001 C CNN
+ 1 8650 2850
+ 0 1 1 0
+$EndComp
+$Comp
+L DIODESCH D11
+U 1 1 4639BA28
+P 7150 2900
+F 0 "D11" H 7150 3000 40 0000 C CNN
+F 1 "BAT43" H 7150 2800 40 0000 C CNN
+F 2 "discret:D3" H 7150 3050 30 0000 C CNN
+F 3 "" H 7150 2900 60 0001 C CNN
+ 1 7150 2900
+ -1 0 0 1
+$EndComp
+$Comp
+L VCC #PWR02
+U 1 1 4639BA17
+P 8300 2700
+F 0 "#PWR02" H 8300 2800 30 0001 C CNN
+F 1 "VCC" H 8300 2800 30 0000 C CNN
+F 2 "" H 8300 2700 60 0001 C CNN
+F 3 "" H 8300 2700 60 0001 C CNN
+ 1 8300 2700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR03
+U 1 1 4639B9EB
+P 7650 3700
+F 0 "#PWR03" H 7650 3700 30 0001 C CNN
+F 1 "GND" H 7650 3630 30 0001 C CNN
+F 2 "" H 7650 3700 60 0001 C CNN
+F 3 "" H 7650 3700 60 0001 C CNN
+ 1 7650 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED D12
+U 1 1 4639B9EA
+P 7650 3500
+F 0 "D12" H 7650 3600 50 0000 C CNN
+F 1 "YELLOW-LED" H 7650 3400 50 0000 C CNN
+F 2 "discret:LEDV" H 7650 3650 30 0000 C CNN
+F 3 "" H 7650 3500 60 0001 C CNN
+ 1 7650 3500
+ 0 1 1 0
+$EndComp
+$Comp
+L R R21
+U 1 1 4639B9E9
+P 7900 3200
+F 0 "R21" V 7980 3200 50 0000 C CNN
+F 1 "470" V 7900 3200 50 0000 C CNN
+F 2 "discret:R4" V 7824 3189 30 0000 C CNN
+F 3 "" H 7900 3200 60 0001 C CNN
+ 1 7900 3200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R20
+U 1 1 4639B9B3
+P 7650 2650
+F 0 "R20" V 7730 2650 50 0000 C CNN
+F 1 "2.2K" V 7650 2650 50 0000 C CNN
+F 2 "discret:R4" V 7778 2650 30 0000 C CNN
+F 3 "" H 7650 2650 60 0001 C CNN
+ 1 7650 2650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R19
+U 1 1 4639B9B0
+P 7650 2900
+F 0 "R19" V 7730 2900 50 0000 C CNN
+F 1 "2.2K" V 7650 2900 50 0000 C CNN
+F 2 "discret:R4" V 7578 2900 30 0000 C CNN
+F 3 "" H 7650 2900 60 0001 C CNN
+ 1 7650 2900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L PNP Q3
+U 1 1 4639B996
+P 8200 2900
+F 0 "Q3" H 8350 2900 60 0000 C CNN
+F 1 "BC307" H 8104 3050 60 0000 C CNN
+F 2 "discret:TO92" H 8100 3100 30 0000 C CNN
+F 3 "" H 8200 2900 60 0001 C CNN
+ 1 8200 2900
+ 1 0 0 1
+$EndComp
+$Comp
+L VCC #PWR04
+U 1 1 4638AB33
+P 7400 2650
+F 0 "#PWR04" H 7400 2750 30 0001 C CNN
+F 1 "VCC" H 7400 2750 30 0000 C CNN
+F 2 "" H 7400 2650 60 0001 C CNN
+F 3 "" H 7400 2650 60 0001 C CNN
+ 1 7400 2650
+ 1 0 0 -1
+$EndComp
+Text Notes 9800 5900 0 50 ~ 0
+ADJUST for VPP = 13V
+$Comp
+L POT RV1
+U 1 1 443D0101
+P 9600 5900
+F 0 "RV1" H 9600 5800 50 0000 C CNN
+F 1 "1K" H 9600 5900 50 0000 C CNN
+F 2 "discret:RV2X4" H 9600 5750 30 0000 C CNN
+F 3 "" H 9600 5900 60 0001 C CNN
+ 1 9600 5900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R18
+U 1 1 44369638
+P 7350 1600
+F 0 "R18" V 7430 1600 50 0000 C CNN
+F 1 "220" V 7350 1600 50 0000 C CNN
+F 2 "discret:R4" V 7500 1600 60 0000 C CNN
+F 3 "" H 7350 1600 60 0001 C CNN
+ 1 7350 1600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR05
+U 1 1 442AABC2
+P 6550 2650
+F 0 "#PWR05" H 6550 2650 30 0001 C CNN
+F 1 "GND" H 6550 2580 30 0001 C CNN
+F 2 "" H 6550 2650 60 0001 C CNN
+F 3 "" H 6550 2650 60 0001 C CNN
+ 1 6550 2650
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG06
+U 1 1 442A8330
+P 1600 6900
+F 0 "#FLG06" H 1600 7170 30 0001 C CNN
+F 1 "PWR_FLAG" H 1600 7130 30 0000 C CNN
+F 2 "" H 1600 6900 60 0001 C CNN
+F 3 "" H 1600 6900 60 0001 C CNN
+ 1 1600 6900
+ -1 0 0 1
+$EndComp
+Text Label 8400 4150 0 60 ~ 0
+CLOCK-RB6
+Text Label 8350 3850 0 60 ~ 0
+DATA-RB7
+Text Label 8400 3500 0 60 ~ 0
+VPP/MCLR
+$Sheet
+S 9200 3100 1550 1200
+U 4804A5E2
+F0 "pic_sockets" 60
+F1 "pic_sockets.sch" 60
+F2 "VPP-MCLR" I L 9200 3500 60
+F3 "CLOCK-RB6" I L 9200 4150 60
+F4 "DATA-RB7" I L 9200 3850 60
+F5 "VCC_PIC" I L 9200 3200 60
+$EndSheet
+Text Label 1850 3800 0 60 ~ 0
+DTR
+Text Label 1850 3700 0 60 ~ 0
+CTS
+Text Label 1850 3600 0 60 ~ 0
+TXD
+Text Label 1850 3500 0 60 ~ 0
+RTS
+Text Notes 850 6500 0 60 ~ 0
+8 to 15V
+NoConn ~ 6750 5150
+$Comp
+L DIODESCH D10
+U 1 1 442A6026
+P 9400 5400
+F 0 "D10" H 9400 5500 40 0000 C CNN
+F 1 "SCHOTTKY" H 9400 5300 40 0000 C CNN
+F 2 "discret:D5" H 9400 5250 30 0000 C CNN
+F 3 "" H 9400 5400 60 0001 C CNN
+ 1 9400 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R10
+U 1 1 442A5F83
+P 8350 6100
+F 0 "R10" V 8430 6100 50 0000 C CNN
+F 1 "5,1K" V 8350 6100 50 0000 C CNN
+F 2 "discret:R4" V 8250 6100 30 0000 C CNN
+F 3 "" H 8350 6100 60 0001 C CNN
+ 1 8350 6100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C4
+U 1 1 442A5F61
+P 8850 6300
+F 0 "C4" H 8900 6400 50 0000 L CNN
+F 1 "0" V 8900 6200 50 0000 L CNN
+F 2 "discret:C1-1" V 8800 6100 30 0000 C CNN
+F 3 "" H 8850 6300 60 0001 C CNN
+ 1 8850 6300
+ 0 -1 -1 0
+$EndComp
+$Comp
+L LT1373 U4
+U 1 1 442A5E20
+P 7750 5400
+F 0 "U4" H 8350 5900 60 0000 C CNN
+F 1 "LT1373" H 7250 5900 60 0000 C CNN
+F 2 "dip_sockets:DIP-8__300_ELL" H 7350 5850 30 0000 C CNN
+F 3 "" H 7750 5400 60 0001 C CNN
+ 1 7750 5400
+ 1 0 0 -1
+$EndComp
+Text Notes 8100 4700 0 100 Italic 20
+VPP (13V) power
+$Comp
+L GND #PWR07
+U 1 1 442A58DF
+P 10250 6200
+F 0 "#PWR07" H 10250 6200 30 0001 C CNN
+F 1 "GND" H 10250 6130 30 0001 C CNN
+F 2 "" H 10250 6200 60 0001 C CNN
+F 3 "" H 10250 6200 60 0001 C CNN
+ 1 10250 6200
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R16
+U 1 1 442A58DC
+P 10000 5650
+F 0 "R16" V 10080 5650 50 0000 C CNN
+F 1 "62K" V 10000 5650 50 0000 C CNN
+F 2 "discret:R4" V 9929 5647 30 0000 C CNN
+F 3 "" H 10000 5650 60 0001 C CNN
+ 1 10000 5650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R15
+U 1 1 442A58D7
+P 10000 6150
+F 0 "R15" V 10080 6150 50 0000 C CNN
+F 1 "6.2K" V 10000 6150 50 0000 C CNN
+F 2 "discret:R4" V 9922 6141 30 0000 C CNN
+F 3 "" H 10000 6150 60 0001 C CNN
+ 1 10000 6150
+ 0 -1 -1 0
+$EndComp
+NoConn ~ 6750 5650
+$Comp
+L GND #PWR08
+U 1 1 442A58B8
+P 9250 6000
+F 0 "#PWR08" H 9250 6000 30 0001 C CNN
+F 1 "GND" H 9250 5930 30 0001 C CNN
+F 2 "" H 9250 6000 60 0001 C CNN
+F 3 "" H 9250 6000 60 0001 C CNN
+ 1 9250 6000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C5
+U 1 1 442A58B1
+P 9000 6000
+F 0 "C5" H 9050 6100 50 0000 L CNN
+F 1 "10nF" V 9150 5850 50 0000 L CNN
+F 2 "discret:C1-1" V 8950 6200 30 0000 C CNN
+F 3 "" H 9000 6000 60 0001 C CNN
+ 1 9000 6000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L PWR_FLAG #FLG09
+U 1 1 442A5893
+P 10050 5350
+F 0 "#FLG09" H 10050 5620 30 0001 C CNN
+F 1 "PWR_FLAG" H 10050 5580 30 0000 C CNN
+F 2 "" H 10050 5350 60 0001 C CNN
+F 3 "" H 10050 5350 60 0001 C CNN
+ 1 10050 5350
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR010
+U 1 1 442A5882
+P 9400 5050
+F 0 "#PWR010" H 9400 5150 30 0001 C CNN
+F 1 "VCC" H 9400 5150 30 0000 C CNN
+F 2 "" H 9400 5050 60 0001 C CNN
+F 3 "" H 9400 5050 60 0001 C CNN
+ 1 9400 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR011
+U 1 1 442A5852
+P 10800 5450
+F 0 "#PWR011" H 10800 5450 30 0001 C CNN
+F 1 "GND" H 10800 5380 30 0001 C CNN
+F 2 "" H 10800 5450 60 0001 C CNN
+F 3 "" H 10800 5450 60 0001 C CNN
+ 1 10800 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C3
+U 1 1 442A584C
+P 10550 5400
+F 0 "C3" H 10600 5500 50 0000 L CNN
+F 1 "22uF/25V" V 10700 5050 50 0000 L CNN
+F 2 "discret:CP8" V 10450 5400 30 0000 C CNN
+F 3 "" H 10550 5400 60 0001 C CNN
+ 1 10550 5400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L VPP #PWR134
+U 1 1 442A5846
+P 10250 5350
+F 0 "#PWR134" H 10250 5550 40 0001 C CNN
+F 1 "VPP" H 10250 5500 40 0000 C CNN
+F 2 "" H 10250 5350 60 0001 C CNN
+F 3 "" H 10250 5350 60 0001 C CNN
+ 1 10250 5350
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR012
+U 1 1 442A580B
+P 7450 6150
+F 0 "#PWR012" H 7450 6150 30 0001 C CNN
+F 1 "GND" H 7450 6080 30 0001 C CNN
+F 2 "" H 7450 6150 60 0001 C CNN
+F 3 "" H 7450 6150 60 0001 C CNN
+ 1 7450 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR013
+U 1 1 442A57CB
+P 7750 4650
+F 0 "#PWR013" H 7750 4750 30 0001 C CNN
+F 1 "VCC" H 7750 4750 30 0000 C CNN
+F 2 "" H 7750 4650 60 0001 C CNN
+F 3 "" H 7750 4650 60 0001 C CNN
+ 1 7750 4650
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L1
+U 1 1 442A57BE
+P 9100 5150
+F 0 "L1" V 9050 5150 40 0000 C CNN
+F 1 "22uH" V 9200 5150 40 0000 C CNN
+F 2 "inductors:INDUCTOR_V" V 9250 5150 30 0000 C CNN
+F 3 "" H 9100 5150 60 0001 C CNN
+ 1 9100 5150
+ 0 -1 -1 0
+$EndComp
+NoConn ~ 1700 3900
+NoConn ~ 1700 3400
+NoConn ~ 1700 3300
+NoConn ~ 1700 3200
+$Comp
+L GND #PWR014
+U 1 1 442A50C2
+P 7050 2350
+F 0 "#PWR014" H 7050 2350 30 0001 C CNN
+F 1 "GND" H 7050 2280 30 0001 C CNN
+F 2 "" H 7050 2350 60 0001 C CNN
+F 3 "" H 7050 2350 60 0001 C CNN
+ 1 7050 2350
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R17
+U 1 1 442A50BF
+P 7050 2100
+F 0 "R17" V 7130 2100 50 0000 C CNN
+F 1 "22K" V 7050 2100 50 0000 C CNN
+F 2 "discret:R4" V 7200 2100 60 0000 C CNN
+F 3 "" H 7050 2100 60 0001 C CNN
+ 1 7050 2100
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR015
+U 1 1 442A50B3
+P 3400 6600
+F 0 "#PWR015" H 3400 6700 30 0001 C CNN
+F 1 "VCC" H 3400 6700 30 0000 C CNN
+F 2 "" H 3400 6600 60 0001 C CNN
+F 3 "" H 3400 6600 60 0001 C CNN
+ 1 3400 6600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR016
+U 1 1 442A5095
+P 4150 7150
+F 0 "#PWR016" H 4150 7150 30 0001 C CNN
+F 1 "GND" H 4150 7080 30 0001 C CNN
+F 2 "" H 4150 7150 60 0001 C CNN
+F 3 "" H 4150 7150 60 0001 C CNN
+ 1 4150 7150
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED D9
+U 1 1 442A5084
+P 4150 6950
+F 0 "D9" H 4150 7050 50 0000 C CNN
+F 1 "GREEN-LED" H 4150 6850 50 0000 C CNN
+F 2 "discret:LEDV" H 4150 7200 30 0000 C CNN
+F 3 "" H 4150 6950 60 0001 C CNN
+F 4 "GREEN LED" H 4200 7100 40 0000 C CNN "Champ4"
+ 1 4150 6950
+ 0 1 1 0
+$EndComp
+$Comp
+L R R14
+U 1 1 442A5083
+P 3850 6650
+F 0 "R14" V 3930 6650 50 0000 C CNN
+F 1 "470" V 3850 6650 50 0000 C CNN
+F 2 "discret:R4" V 3765 6645 30 0000 C CNN
+F 3 "" H 3850 6650 60 0001 C CNN
+ 1 3850 6650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR017
+U 1 1 442A5057
+P 3200 7100
+F 0 "#PWR017" H 3200 7100 30 0001 C CNN
+F 1 "GND" H 3200 7030 30 0001 C CNN
+F 2 "" H 3200 7100 60 0001 C CNN
+F 3 "" H 3200 7100 60 0001 C CNN
+ 1 3200 7100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C1
+U 1 1 442A5056
+P 3200 6900
+F 0 "C1" H 3250 7000 50 0000 L CNN
+F 1 "100µF" H 3250 6800 50 0000 L CNN
+F 2 "discret:CP10" H 3500 6750 30 0000 C CNN
+F 3 "" H 3200 6900 60 0001 C CNN
+ 1 3200 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR018
+U 1 1 442A5050
+P 2700 6950
+F 0 "#PWR018" H 2700 6950 30 0001 C CNN
+F 1 "GND" H 2700 6880 30 0001 C CNN
+F 2 "" H 2700 6950 60 0001 C CNN
+F 3 "" H 2700 6950 60 0001 C CNN
+ 1 2700 6950
+ 1 0 0 -1
+$EndComp
+$Comp
+L 7805 U3
+U 1 1 442A504A
+P 2700 6700
+F 0 "U3" H 2850 6504 60 0000 C CNN
+F 1 "7805" H 2700 6900 60 0000 C CNN
+F 2 "discret:LM78XX" H 2750 7000 60 0000 C CNN
+F 3 "" H 2700 6700 60 0001 C CNN
+ 1 2700 6700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR019
+U 1 1 442A5023
+P 1950 7100
+F 0 "#PWR019" H 1950 7100 30 0001 C CNN
+F 1 "GND" H 1950 7030 30 0001 C CNN
+F 2 "" H 1950 7100 60 0001 C CNN
+F 3 "" H 1950 7100 60 0001 C CNN
+ 1 1950 7100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C2
+U 1 1 442A501D
+P 1950 6900
+F 0 "C2" H 2000 7000 50 0000 L CNN
+F 1 "220uF" H 2000 6800 50 0000 L CNN
+F 2 "discret:CP10" H 2300 6700 60 0000 C CNN
+F 3 "" H 1950 6900 60 0001 C CNN
+ 1 1950 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR020
+U 1 1 442A500F
+P 1400 6900
+F 0 "#PWR020" H 1400 6900 30 0001 C CNN
+F 1 "GND" H 1400 6830 30 0001 C CNN
+F 2 "" H 1400 6900 60 0001 C CNN
+F 3 "" H 1400 6900 60 0001 C CNN
+ 1 1400 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODE D1
+U 1 1 442A500B
+P 1650 6650
+F 0 "D1" H 1650 6750 40 0000 C CNN
+F 1 "1N4004" H 1650 6550 40 0000 C CNN
+F 2 "discret:D5" H 1646 6800 30 0000 C CNN
+F 3 "" H 1650 6650 60 0001 C CNN
+ 1 1650 6650
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P1
+U 1 1 442A4FE7
+P 1000 6750
+F 0 "P1" V 950 6750 40 0000 C CNN
+F 1 "CONN_2" V 1050 6750 40 0000 C CNN
+F 2 "connect:bornier2" H 950 7000 60 0000 C CNN
+F 3 "" H 1000 6750 60 0001 C CNN
+ 1 1000 6750
+ -1 0 0 1
+$EndComp
+Text Label 7750 1600 0 60 ~ 0
+VPP/MCLR
+$Comp
+L LED D8
+U 1 1 442A4F5D
+P 6550 2400
+F 0 "D8" H 6550 2500 50 0000 C CNN
+F 1 "RED-LED" H 6550 2300 50 0000 C CNN
+F 2 "discret:LEDV" H 6550 2250 30 0000 C CNN
+F 3 "" H 6550 2400 60 0001 C CNN
+F 4 "Low Current Led" H 6600 2550 40 0000 C CNN "Champ4"
+ 1 6550 2400
+ 0 1 1 0
+$EndComp
+$Comp
+L R R9
+U 1 1 442A4F52
+P 6550 1900
+F 0 "R9" V 6630 1900 50 0000 C CNN
+F 1 "2.2K" V 6550 1900 50 0000 C CNN
+F 2 "discret:R4" V 6450 1900 30 0000 C CNN
+F 3 "" H 6550 1900 60 0001 C CNN
+ 1 6550 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L VPP #PWR123
+U 1 1 442A4F48
+P 6550 1100
+F 0 "#PWR123" H 6550 1300 40 0001 C CNN
+F 1 "VPP" H 6550 1250 40 0000 C CNN
+F 2 "" H 6550 1100 60 0001 C CNN
+F 3 "" H 6550 1100 60 0001 C CNN
+ 1 6550 1100
+ 1 0 0 -1
+$EndComp
+$Comp
+L VPP #PWR122
+U 1 1 442A4F44
+P 6100 700
+F 0 "#PWR122" H 6100 900 40 0001 C CNN
+F 1 "VPP" H 6100 850 40 0000 C CNN
+F 2 "" H 6100 700 60 0001 C CNN
+F 3 "" H 6100 700 60 0001 C CNN
+ 1 6100 700
+ 1 0 0 -1
+$EndComp
+$Comp
+L PNP Q2
+U 1 1 442A4F30
+P 6450 1400
+F 0 "Q2" H 6400 1250 60 0000 C CNN
+F 1 "BC307" H 6354 1550 60 0000 C CNN
+F 2 "discret:TO92" H 6348 1617 30 0000 C CNN
+F 3 "" H 6450 1400 60 0001 C CNN
+ 1 6450 1400
+ 1 0 0 1
+$EndComp
+$Comp
+L R R7
+U 1 1 442A4F2A
+P 6100 1000
+F 0 "R7" V 6180 1000 50 0000 C CNN
+F 1 "10K" V 6100 1000 50 0000 C CNN
+F 2 "discret:R4" V 6250 1000 60 0000 C CNN
+F 3 "" H 6100 1000 60 0001 C CNN
+ 1 6100 1000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R11
+U 1 1 442A4F23
+P 5750 1400
+F 0 "R11" V 5830 1400 50 0000 C CNN
+F 1 "22K" V 5750 1400 50 0000 C CNN
+F 2 "discret:R4" V 5821 1591 30 0000 C CNN
+F 3 "" H 5750 1400 60 0001 C CNN
+ 1 5750 1400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR021
+U 1 1 442A4F1C
+P 5450 1900
+F 0 "#PWR021" H 5450 1900 30 0001 C CNN
+F 1 "GND" H 5450 1830 30 0001 C CNN
+F 2 "" H 5450 1900 60 0001 C CNN
+F 3 "" H 5450 1900 60 0001 C CNN
+ 1 5450 1900
+ 1 0 0 -1
+$EndComp
+Text Label 2300 1700 0 60 ~ 0
+VPP_ON
+Text Label 5400 5100 0 60 ~ 0
+CLOCK-RB6
+Text Label 5500 3150 0 60 ~ 0
+DATA-RB7
+$Comp
+L NPN Q1
+U 1 1 442A4EB9
+P 5350 1700
+F 0 "Q1" H 5500 1700 50 0000 C CNN
+F 1 "BC237" H 5252 1850 50 0000 C CNN
+F 2 "discret:TO92" H 5200 1550 30 0000 C CNN
+F 3 "" H 5350 1700 60 0001 C CNN
+ 1 5350 1700
+ 1 0 0 -1
+$EndComp
+Text Label 2350 5100 0 60 ~ 0
+PC-CLOCK-OUT
+$Comp
+L GND #PWR022
+U 1 1 442A4E06
+P 1700 4000
+F 0 "#PWR022" H 1700 4000 30 0001 C CNN
+F 1 "GND" H 1700 3930 30 0001 C CNN
+F 2 "" H 1700 4000 60 0001 C CNN
+F 3 "" H 1700 4000 60 0001 C CNN
+ 1 1700 4000
+ 0 -1 -1 0
+$EndComp
+Text Label 2700 4200 0 60 ~ 0
+PC-DATA-IN
+Text Label 2500 3150 0 60 ~ 0
+PC-DATA-OUT
+$Comp
+L GND #PWR023
+U 1 1 442A4DB3
+P 2800 2250
+F 0 "#PWR023" H 2800 2250 30 0001 C CNN
+F 1 "GND" H 2800 2180 30 0001 C CNN
+F 2 "" H 2800 2250 60 0001 C CNN
+F 3 "" H 2800 2250 60 0001 C CNN
+ 1 2800 2250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR024
+U 1 1 442A4DAE
+P 3200 5650
+F 0 "#PWR024" H 3200 5650 30 0001 C CNN
+F 1 "GND" H 3200 5580 30 0001 C CNN
+F 2 "" H 3200 5650 60 0001 C CNN
+F 3 "" H 3200 5650 60 0001 C CNN
+ 1 3200 5650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR025
+U 1 1 442A4DAB
+P 3200 3700
+F 0 "#PWR025" H 3200 3700 30 0001 C CNN
+F 1 "GND" H 3200 3630 30 0001 C CNN
+F 2 "" H 3200 3700 60 0001 C CNN
+F 3 "" H 3200 3700 60 0001 C CNN
+ 1 3200 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R8
+U 1 1 442A4D92
+P 4700 1700
+F 0 "R8" V 4780 1700 50 0000 C CNN
+F 1 "1K" V 4700 1700 50 0000 C CNN
+F 2 "discret:R4" V 4850 1700 30 0000 C CNN
+F 3 "" H 4700 1700 60 0001 C CNN
+ 1 4700 1700
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R13
+U 1 1 442A4D8D
+P 5100 5100
+F 0 "R13" V 5180 5100 50 0000 C CNN
+F 1 "470" V 5100 5100 50 0000 C CNN
+F 2 "discret:R4" V 5250 5100 30 0000 C CNN
+F 3 "" H 5100 5100 60 0001 C CNN
+ 1 5100 5100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R12
+U 1 1 442A4D85
+P 5100 3150
+F 0 "R12" V 5180 3150 50 0000 C CNN
+F 1 "470" V 5100 3150 50 0000 C CNN
+F 2 "discret:R4" V 5250 3150 60 0000 C CNN
+F 3 "" H 5100 3150 60 0001 C CNN
+ 1 5100 3150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR026
+U 1 1 442A4D75
+P 4350 4500
+F 0 "#PWR026" H 4350 4500 30 0001 C CNN
+F 1 "GND" H 4350 4430 30 0001 C CNN
+F 2 "" H 4350 4500 60 0001 C CNN
+F 3 "" H 4350 4500 60 0001 C CNN
+ 1 4350 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U2
+U 4 1 442A4D6B
+P 4350 4200
+F 0 "U2" H 4350 4300 50 0000 L BNN
+F 1 "74HC125" H 4400 4050 40 0000 L TNN
+F 2 "dip_sockets:DIP-14__300_ELL" H 4750 4100 30 0000 C CNN
+F 3 "" H 4350 4200 60 0001 C CNN
+ 4 4350 4200
+ -1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR027
+U 1 1 442A4D68
+P 3850 4650
+F 0 "#PWR027" H 3850 4750 30 0001 C CNN
+F 1 "VCC" H 3850 4750 30 0000 C CNN
+F 2 "" H 3850 4650 60 0001 C CNN
+F 3 "" H 3850 4650 60 0001 C CNN
+ 1 3850 4650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR028
+U 1 1 442A4D67
+P 3850 5600
+F 0 "#PWR028" H 3850 5600 30 0001 C CNN
+F 1 "GND" H 3850 5530 30 0001 C CNN
+F 2 "" H 3850 5600 60 0001 C CNN
+F 3 "" H 3850 5600 60 0001 C CNN
+ 1 3850 5600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR029
+U 1 1 442A4D66
+P 4350 5400
+F 0 "#PWR029" H 4350 5400 30 0001 C CNN
+F 1 "GND" H 4350 5330 30 0001 C CNN
+F 2 "" H 4350 5400 60 0001 C CNN
+F 3 "" H 4350 5400 60 0001 C CNN
+ 1 4350 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D7
+U 1 1 442A4D65
+P 3850 5400
+F 0 "D7" H 3850 5500 40 0000 C CNN
+F 1 "BAT43" H 3850 5300 40 0000 C CNN
+F 2 "discret:D3" H 3850 5250 30 0000 C CNN
+F 3 "" H 3850 5400 60 0001 C CNN
+ 1 3850 5400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DIODESCH D6
+U 1 1 442A4D64
+P 3850 4850
+F 0 "D6" H 3850 4950 40 0000 C CNN
+F 1 "BAT43" H 3850 4750 40 0000 C CNN
+F 2 "discret:D3" H 3850 4700 30 0000 C CNN
+F 3 "" H 3850 4850 60 0001 C CNN
+ 1 3850 4850
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R6
+U 1 1 442A4D63
+P 3200 5400
+F 0 "R6" V 3280 5400 50 0000 C CNN
+F 1 "10K" V 3200 5400 50 0000 C CNN
+F 2 "discret:R4" V 3100 5400 30 0000 C CNN
+F 3 "" H 3200 5400 60 0001 C CNN
+ 1 3200 5400
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R5
+U 1 1 442A4D62
+P 3500 5100
+F 0 "R5" V 3580 5100 50 0000 C CNN
+F 1 "10K" V 3500 5100 50 0000 C CNN
+F 2 "discret:R4" V 3420 5088 30 0000 C CNN
+F 3 "" H 3500 5100 60 0001 C CNN
+ 1 3500 5100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L 74LS125 U2
+U 3 1 442A4D61
+P 4350 5100
+F 0 "U2" H 4350 5200 50 0000 L BNN
+F 1 "74HC125" H 4400 4950 40 0000 L TNN
+F 2 "dip_sockets:DIP-14__300_ELL" H 4750 4850 30 0000 C CNN
+F 3 "" H 4350 5100 60 0001 C CNN
+ 3 4350 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR030
+U 1 1 442A4D60
+P 3850 2700
+F 0 "#PWR030" H 3850 2800 30 0001 C CNN
+F 1 "VCC" H 3850 2800 30 0000 C CNN
+F 2 "" H 3850 2700 60 0001 C CNN
+F 3 "" H 3850 2700 60 0001 C CNN
+ 1 3850 2700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR031
+U 1 1 442A4D5F
+P 3850 3650
+F 0 "#PWR031" H 3850 3650 30 0001 C CNN
+F 1 "GND" H 3850 3580 30 0001 C CNN
+F 2 "" H 3850 3650 60 0001 C CNN
+F 3 "" H 3850 3650 60 0001 C CNN
+ 1 3850 3650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR032
+U 1 1 442A4D5E
+P 4350 3450
+F 0 "#PWR032" H 4350 3450 30 0001 C CNN
+F 1 "GND" H 4350 3380 30 0001 C CNN
+F 2 "" H 4350 3450 60 0001 C CNN
+F 3 "" H 4350 3450 60 0001 C CNN
+ 1 4350 3450
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D5
+U 1 1 442A4D5D
+P 3850 3450
+F 0 "D5" H 3850 3550 40 0000 C CNN
+F 1 "BAT43" H 3850 3350 40 0000 C CNN
+F 2 "discret:D3" H 3850 3300 60 0000 C CNN
+F 3 "" H 3850 3450 60 0001 C CNN
+ 1 3850 3450
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DIODESCH D4
+U 1 1 442A4D5C
+P 3850 2900
+F 0 "D4" H 3850 3000 40 0000 C CNN
+F 1 "BAT43" H 3850 2800 40 0000 C CNN
+F 2 "discret:D3" H 3850 2750 30 0000 C CNN
+F 3 "" H 3850 2900 60 0001 C CNN
+ 1 3850 2900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R4
+U 1 1 442A4D5B
+P 3200 3450
+F 0 "R4" V 3280 3450 50 0000 C CNN
+F 1 "10K" V 3200 3450 50 0000 C CNN
+F 2 "discret:R4" V 3100 3450 60 0000 C CNN
+F 3 "" H 3200 3450 60 0001 C CNN
+ 1 3200 3450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R3
+U 1 1 442A4D5A
+P 3500 3150
+F 0 "R3" V 3580 3150 50 0000 C CNN
+F 1 "10K" V 3500 3150 50 0000 C CNN
+F 2 "discret:R4" V 3650 3150 30 0000 C CNN
+F 3 "" H 3500 3150 60 0001 C CNN
+ 1 3500 3150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L 74LS125 U2
+U 2 1 442A4D59
+P 4350 3150
+F 0 "U2" H 4350 3250 50 0000 L BNN
+F 1 "74HC125" H 4400 3000 40 0000 L TNN
+F 2 "dip_sockets:DIP-14__300_ELL" H 4712 2930 30 0000 C CNN
+F 3 "" H 4350 3150 60 0001 C CNN
+ 2 4350 3150
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR033
+U 1 1 442A4D41
+P 3450 1250
+F 0 "#PWR033" H 3450 1350 30 0001 C CNN
+F 1 "VCC" H 3450 1350 30 0000 C CNN
+F 2 "" H 3450 1250 60 0001 C CNN
+F 3 "" H 3450 1250 60 0001 C CNN
+ 1 3450 1250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR034
+U 1 1 442A4D3B
+P 3450 2200
+F 0 "#PWR034" H 3450 2200 30 0001 C CNN
+F 1 "GND" H 3450 2130 30 0001 C CNN
+F 2 "" H 3450 2200 60 0001 C CNN
+F 3 "" H 3450 2200 60 0001 C CNN
+ 1 3450 2200
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR035
+U 1 1 442A4D38
+P 3950 2000
+F 0 "#PWR035" H 3950 2000 30 0001 C CNN
+F 1 "GND" H 3950 1930 30 0001 C CNN
+F 2 "" H 3950 2000 60 0001 C CNN
+F 3 "" H 3950 2000 60 0001 C CNN
+ 1 3950 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D3
+U 1 1 442A4D25
+P 3450 2000
+F 0 "D3" H 3450 2100 40 0000 C CNN
+F 1 "BAT43" H 3450 1900 40 0000 C CNN
+F 2 "discret:D3" H 3450 1850 30 0000 C CNN
+F 3 "" H 3450 2000 60 0001 C CNN
+ 1 3450 2000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DIODESCH D2
+U 1 1 442A4D1B
+P 3450 1450
+F 0 "D2" H 3450 1550 40 0000 C CNN
+F 1 "BAT43" H 3450 1350 40 0000 C CNN
+F 2 "discret:D3" H 3500 1300 30 0000 C CNN
+F 3 "" H 3450 1450 60 0001 C CNN
+ 1 3450 1450
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R2
+U 1 1 442A4CFB
+P 2800 2000
+F 0 "R2" V 2880 2000 50 0000 C CNN
+F 1 "10K" V 2800 2000 50 0000 C CNN
+F 2 "discret:R4" V 2700 2000 60 0000 C CNN
+F 3 "" H 2800 2000 60 0001 C CNN
+ 1 2800 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 442A4CF4
+P 3100 1700
+F 0 "R1" V 3180 1700 50 0000 C CNN
+F 1 "10K" V 3100 1700 50 0000 C CNN
+F 2 "discret:R4" V 3250 1700 60 0000 C CNN
+F 3 "" H 3100 1700 60 0001 C CNN
+ 1 3100 1700
+ 0 -1 -1 0
+$EndComp
+$Comp
+L 74LS125 U2
+U 1 1 442A4CC8
+P 3950 1700
+F 0 "U2" H 3950 1800 50 0000 L BNN
+F 1 "74HC125" H 4000 1550 40 0000 L TNN
+F 2 "dip_sockets:DIP-14__300_ELL" H 4350 1450 30 0000 C CNN
+F 3 "" H 3950 1700 60 0001 C CNN
+ 1 3950 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB9 J1
+U 1 1 442A4C93
+P 1250 3600
+F 0 "J1" H 1250 4150 70 0000 C CNN
+F 1 "DB9-FEMAL" H 1250 3050 70 0000 C CNN
+F 2 "connect:DB9FC" H 1200 4250 60 0000 C CNN
+F 3 "" H 1250 3600 60 0001 C CNN
+ 1 1250 3600
+ -1 0 0 1
+$EndComp
+$Comp
+L CONN_1 P101
+U 1 1 54020BEA
+P 6400 6800
+F 0 "P101" H 6480 6800 40 0000 L CNN
+F 1 "CONN_1" H 6400 6855 30 0001 C CNN
+F 2 "footprints:1pin-4" H 6400 6800 60 0001 C CNN
+F 3 "" H 6400 6800 60 0000 C CNN
+ 1 6400 6800
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P102
+U 1 1 54020DA9
+P 6400 6950
+F 0 "P102" H 6480 6950 40 0000 L CNN
+F 1 "CONN_1" H 6400 7005 30 0001 C CNN
+F 2 "footprints:1pin-4" H 6400 6950 60 0001 C CNN
+F 3 "" H 6400 6950 60 0000 C CNN
+ 1 6400 6950
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P103
+U 1 1 54020DC2
+P 6400 7100
+F 0 "P103" H 6480 7100 40 0000 L CNN
+F 1 "CONN_1" H 6400 7155 30 0001 C CNN
+F 2 "footprints:1pin-4" H 6400 7100 60 0001 C CNN
+F 3 "" H 6400 7100 60 0000 C CNN
+ 1 6400 7100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P104
+U 1 1 54020DE3
+P 6400 7250
+F 0 "P104" H 6480 7250 40 0000 L CNN
+F 1 "CONN_1" H 6400 7305 30 0001 C CNN
+F 2 "footprints:1pin-4" H 6400 7250 60 0001 C CNN
+F 3 "" H 6400 7250 60 0000 C CNN
+ 1 6400 7250
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P105
+U 1 1 54020E5D
+P 6400 7400
+F 0 "P105" H 6480 7400 40 0000 L CNN
+F 1 "CONN_1" H 6400 7455 30 0001 C CNN
+F 2 "footprints:1pin-4" H 6400 7400 60 0001 C CNN
+F 3 "" H 6400 7400 60 0000 C CNN
+ 1 6400 7400
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P106
+U 1 1 54020E76
+P 6400 7550
+F 0 "P106" H 6480 7550 40 0000 L CNN
+F 1 "CONN_1" H 6400 7605 30 0001 C CNN
+F 2 "footprints:1pin-4" H 6400 7550 60 0001 C CNN
+F 3 "" H 6400 7550 60 0000 C CNN
+ 1 6400 7550
+ 1 0 0 -1
+$EndComp
+Connection ~ 8650 3200
+Wire Notes Line
+ 5850 6700 6800 6700
+Wire Notes Line
+ 6800 6700 6800 7750
+Wire Notes Line
+ 6800 7750 5850 7750
+Wire Notes Line
+ 5850 7750 5850 6700
+Text Notes 6050 7700 0 40 Italic 0
+Mounting holes
+NoConn ~ 6250 6800
+NoConn ~ 6250 6950
+NoConn ~ 6250 7100
+NoConn ~ 6250 7250
+NoConn ~ 6250 7400
+NoConn ~ 6250 7550
+$EndSCHEMATC
diff --git a/demos/pic_programmer/pic_sockets.sch b/demos/pic_programmer/pic_sockets.sch
new file mode 100644
index 0000000..464526c
--- /dev/null
+++ b/demos/pic_programmer/pic_sockets.sch
@@ -0,0 +1,461 @@
+EESchema Schematic File Version 2
+LIBS:pic_programmer_schlib
+LIBS:power
+LIBS:pic_programmer-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 2 2
+Title "JDM - COM84 PIC Programmer with 13V DC/DC converter"
+Date "Sun 22 Mar 2015"
+Rev "3"
+Comp "KiCad"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 3300 6600 3300 6500
+Wire Wire Line
+ 2100 2400 3000 2400
+Wire Wire Line
+ 9200 2000 10100 2000
+Wire Wire Line
+ 9200 1900 10000 1900
+Wire Wire Line
+ 7100 1900 8000 1900
+Connection ~ 2800 1200
+Wire Wire Line
+ 2800 1200 3000 1200
+Connection ~ 2800 1300
+Wire Wire Line
+ 2800 1100 2800 1350
+Wire Wire Line
+ 2800 1100 3000 1100
+Wire Wire Line
+ 3000 1300 2800 1300
+Wire Wire Line
+ 4400 1500 10000 1500
+Wire Wire Line
+ 4400 1400 10100 1400
+Wire Wire Line
+ 10100 4000 9200 4000
+Wire Wire Line
+ 10000 3900 9200 3900
+Wire Wire Line
+ 7100 3900 8000 3900
+Wire Wire Line
+ 2950 4600 2750 4600
+Wire Wire Line
+ 5400 4900 4500 4900
+Wire Wire Line
+ 5300 4750 4500 4750
+Wire Wire Line
+ 2200 4450 2950 4450
+Wire Wire Line
+ 5400 3100 4450 3100
+Wire Wire Line
+ 5300 2700 4450 2700
+Wire Wire Line
+ 3000 3400 2200 3400
+Wire Wire Line
+ 2750 4600 2750 4650
+Wire Wire Line
+ 5500 4600 4500 4600
+Wire Wire Line
+ 10200 2700 9200 2700
+Wire Wire Line
+ 10200 4700 9200 4700
+Wire Wire Line
+ 8000 4900 7200 4900
+Wire Wire Line
+ 3300 6500 2400 6500
+Text HLabel 1900 6200 0 60 Input ~ 0
+VCC_PIC
+Text Label 2450 2400 0 60 ~ 0
+VCC_PIC
+Text Label 7200 4900 0 60 ~ 0
+VCC_PIC
+Text Label 9450 4700 0 60 ~ 0
+VCC_PIC
+Text Label 9450 2700 0 60 ~ 0
+VCC_PIC
+$Comp
+L GND #PWR036
+U 1 1 442A8794
+P 8000 5000
+F 0 "#PWR036" H 8000 5000 30 0001 C CNN
+F 1 "GND" H 8000 4930 30 0001 C CNN
+F 2 "" H 8000 5000 60 0001 C CNN
+F 3 "" H 8000 5000 60 0001 C CNN
+ 1 8000 5000
+ 0 1 1 0
+$EndComp
+Text Label 4750 4600 0 60 ~ 0
+VCC_PIC
+$Comp
+L GND #PWR037
+U 1 1 443CCA5D
+P 8000 4600
+F 0 "#PWR037" H 8000 4600 30 0001 C CNN
+F 1 "GND" H 8000 4530 30 0001 C CNN
+F 2 "" H 8000 4600 60 0001 C CNN
+F 3 "" H 8000 4600 60 0001 C CNN
+ 1 8000 4600
+ 0 1 1 0
+$EndComp
+NoConn ~ 8000 2900
+NoConn ~ 9200 3200
+NoConn ~ 9200 3100
+NoConn ~ 9200 3000
+NoConn ~ 9200 2900
+NoConn ~ 9200 2600
+NoConn ~ 9200 2500
+NoConn ~ 9200 2400
+NoConn ~ 9200 2300
+NoConn ~ 9200 2200
+NoConn ~ 9200 2100
+NoConn ~ 8000 3200
+NoConn ~ 8000 3100
+NoConn ~ 8000 3000
+NoConn ~ 8000 2800
+NoConn ~ 8000 2700
+NoConn ~ 8000 2500
+NoConn ~ 8000 2400
+NoConn ~ 8000 2300
+NoConn ~ 8000 2200
+NoConn ~ 8000 2100
+NoConn ~ 8000 2000
+$Comp
+L GND #PWR038
+U 1 1 443697C7
+P 9200 2800
+F 0 "#PWR038" H 9200 2800 30 0001 C CNN
+F 1 "GND" H 9200 2730 30 0001 C CNN
+F 2 "" H 9200 2800 60 0001 C CNN
+F 3 "" H 9200 2800 60 0001 C CNN
+ 1 9200 2800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR039
+U 1 1 443697C3
+P 8000 2600
+F 0 "#PWR039" H 8000 2600 30 0001 C CNN
+F 1 "GND" H 8000 2530 30 0001 C CNN
+F 2 "" H 8000 2600 60 0001 C CNN
+F 3 "" H 8000 2600 60 0001 C CNN
+ 1 8000 2600
+ 0 1 1 0
+$EndComp
+Text Label 9350 2000 0 60 ~ 0
+CLOCK-RB6
+Text Label 9350 1900 0 60 ~ 0
+DATA-RB7
+Text Label 7350 1900 0 60 ~ 0
+VPP-MCLR
+$Comp
+L SUPP28 P2
+U 1 1 4436967E
+P 8600 2550
+F 0 "P2" H 8600 3350 70 0000 C CNN
+F 1 "SUPP28" H 8600 1700 70 0000 C CNN
+F 2 "dip_sockets:DIP-28__300_ELL" H 8600 1600 60 0000 C CNN
+F 3 "" H 8600 2550 60 0001 C CNN
+ 1 8600 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR040
+U 1 1 442AA147
+P 3300 7050
+F 0 "#PWR040" H 3300 7050 30 0001 C CNN
+F 1 "GND" H 3300 6980 30 0001 C CNN
+F 2 "" H 3300 7050 60 0001 C CNN
+F 3 "" H 3300 7050 60 0001 C CNN
+ 1 3300 7050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C7
+U 1 1 442AA145
+P 3300 6800
+F 0 "C7" H 3350 6900 50 0000 L CNN
+F 1 "100nF" H 3350 6700 50 0000 L CNN
+F 2 "discret:C1-1" H 3650 6600 60 0000 C CNN
+F 3 "" H 3300 6800 60 0001 C CNN
+ 1 3300 6800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR041
+U 1 1 442AA138
+P 2400 7050
+F 0 "#PWR041" H 2400 7050 30 0001 C CNN
+F 1 "GND" H 2400 6980 30 0001 C CNN
+F 2 "" H 2400 7050 60 0001 C CNN
+F 3 "" H 2400 7050 60 0001 C CNN
+ 1 2400 7050
+ 1 0 0 -1
+$EndComp
+NoConn ~ 9200 5800
+NoConn ~ 9200 5700
+NoConn ~ 9200 5600
+NoConn ~ 9200 5500
+NoConn ~ 9200 5400
+NoConn ~ 9200 5300
+NoConn ~ 9200 5200
+NoConn ~ 9200 5100
+NoConn ~ 9200 5000
+NoConn ~ 9200 4900
+NoConn ~ 9200 4600
+NoConn ~ 9200 4500
+NoConn ~ 9200 4400
+NoConn ~ 9200 4300
+NoConn ~ 9200 4200
+NoConn ~ 9200 4100
+NoConn ~ 8000 5800
+NoConn ~ 8000 5700
+NoConn ~ 8000 5600
+NoConn ~ 8000 5500
+NoConn ~ 8000 5400
+NoConn ~ 8000 5300
+NoConn ~ 8000 5200
+NoConn ~ 8000 5100
+NoConn ~ 8000 4800
+NoConn ~ 8000 4700
+NoConn ~ 8000 4500
+NoConn ~ 8000 4400
+NoConn ~ 8000 4300
+NoConn ~ 8000 4200
+NoConn ~ 8000 4100
+NoConn ~ 8000 4000
+$Comp
+L GND #PWR042
+U 1 1 442A896A
+P 9200 4800
+F 0 "#PWR042" H 9200 4800 30 0001 C CNN
+F 1 "GND" H 9200 4730 30 0001 C CNN
+F 2 "" H 9200 4800 60 0001 C CNN
+F 3 "" H 9200 4800 60 0001 C CNN
+ 1 9200 4800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L SUPP40 P3
+U 1 1 442A88ED
+P 8600 4850
+F 0 "P3" H 8600 5950 70 0000 C CNN
+F 1 "SUPP40" H 8600 3700 70 0000 C CNN
+F 2 "sockets:40tex-Ell600" H 8600 3600 60 0000 C CNN
+F 3 "" H 8600 4850 60 0001 C CNN
+ 1 8600 4850
+ 1 0 0 -1
+$EndComp
+NoConn ~ 4400 1200
+$Comp
+L GND #PWR043
+U 1 1 442A8838
+P 2800 1350
+F 0 "#PWR043" H 2800 1350 30 0001 C CNN
+F 1 "GND" H 2800 1280 30 0001 C CNN
+F 2 "" H 2800 1350 60 0001 C CNN
+F 3 "" H 2800 1350 60 0001 C CNN
+ 1 2800 1350
+ 1 0 0 -1
+$EndComp
+Text Label 4550 1500 0 60 ~ 0
+DATA-RB7
+Text Label 4550 1400 0 60 ~ 0
+CLOCK-RB6
+$Comp
+L 24C16 U1
+U 1 1 442A87F7
+P 3700 1300
+F 0 "U1" H 3850 1650 60 0000 C CNN
+F 1 "24Cxx" H 3900 950 60 0000 C CNN
+F 2 "dip_sockets:DIP-8__300_ELL" H 4450 850 60 0000 C CNN
+F 3 "" H 3700 1300 60 0001 C CNN
+ 1 3700 1300
+ 1 0 0 -1
+$EndComp
+Text Label 9350 4000 0 60 ~ 0
+CLOCK-RB6
+Text Label 9350 3900 0 60 ~ 0
+DATA-RB7
+Text Label 7350 3900 0 60 ~ 0
+VPP-MCLR
+NoConn ~ 2950 4150
+NoConn ~ 4500 5200
+NoConn ~ 4500 5050
+NoConn ~ 4500 4300
+NoConn ~ 4500 4450
+NoConn ~ 4500 4150
+NoConn ~ 4500 4000
+NoConn ~ 2950 5200
+NoConn ~ 2950 5050
+NoConn ~ 2950 4900
+NoConn ~ 2950 4750
+NoConn ~ 2950 4300
+NoConn ~ 2950 4000
+$Comp
+L PIC16F54 U5
+U 1 1 442A81A7
+P 3750 4600
+F 0 "U5" H 3750 5350 60 0000 C CNN
+F 1 "PIC_18_PINS" H 3750 3800 60 0000 C CNN
+F 2 "dip_sockets:DIP-18__300_ELL" H 3800 3700 60 0000 C CNN
+F 3 "" H 3750 4600 60 0001 C CNN
+ 1 3750 4600
+ 1 0 0 -1
+$EndComp
+NoConn ~ 4450 3400
+NoConn ~ 3000 3100
+NoConn ~ 3000 2700
+Text Label 4650 4900 0 60 ~ 0
+CLOCK-RB6
+Text Label 4650 4750 0 60 ~ 0
+DATA-RB7
+Text Label 2300 4450 0 60 ~ 0
+VPP-MCLR
+Text Label 2350 3400 0 60 ~ 0
+VPP-MCLR
+Text Label 4600 3100 0 60 ~ 0
+CLOCK-RB6
+Text Label 4600 2700 0 60 ~ 0
+DATA-RB7
+Text HLabel 1900 6300 0 60 Input ~ 0
+VPP-MCLR
+Text HLabel 1900 2000 0 60 Input ~ 0
+CLOCK-RB6
+Text HLabel 1900 2100 0 60 Input ~ 0
+DATA-RB7
+$Comp
+L GND #PWR044
+U 1 1 442A820F
+P 2750 4650
+F 0 "#PWR044" H 2750 4650 30 0001 C CNN
+F 1 "GND" H 2750 4580 30 0001 C CNN
+F 2 "" H 2750 4650 60 0001 C CNN
+F 3 "" H 2750 4650 60 0001 C CNN
+ 1 2750 4650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR045
+U 1 1 442A8205
+P 4450 2400
+F 0 "#PWR045" H 4450 2400 30 0001 C CNN
+F 1 "GND" H 4450 2330 30 0001 C CNN
+F 2 "" H 4450 2400 60 0001 C CNN
+F 3 "" H 4450 2400 60 0001 C CNN
+ 1 4450 2400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L PIC12C508A U6
+U 1 1 442A81A5
+P 3750 2900
+F 0 "U6" H 3700 3600 60 0000 C CNN
+F 1 "PIC_8_PINS" H 3750 2200 60 0000 C CNN
+F 2 "dip_sockets:DIP-8__300_ELL" H 3750 2100 60 0000 C CNN
+F 3 "" H 3750 2900 60 0001 C CNN
+ 1 3750 2900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR046
+U 1 1 52C92629
+P 3700 1850
+F 0 "#PWR046" H 3700 1850 30 0001 C CNN
+F 1 "GND" H 3700 1780 30 0001 C CNN
+F 2 "" H 3700 1850 60 0001 C CNN
+F 3 "" H 3700 1850 60 0001 C CNN
+ 1 3700 1850
+ 1 0 0 -1
+$EndComp
+Text Label 3700 800 0 60 ~ 0
+VCC_PIC
+$Comp
+L C C6
+U 1 1 442AA12B
+P 2400 6800
+F 0 "C6" H 2450 6900 50 0000 L CNN
+F 1 "100nF" H 2450 6700 50 0000 L CNN
+F 2 "discret:C1-1" H 2750 6600 60 0000 C CNN
+F 3 "" H 2400 6800 60 0001 C CNN
+ 1 2400 6800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2400 6200 2400 6600
+Text Label 2750 6500 0 60 ~ 0
+VCC_PIC
+Wire Wire Line
+ 5300 1500 5300 4750
+Connection ~ 5300 2700
+Wire Wire Line
+ 5400 1400 5400 4900
+Connection ~ 5400 3100
+Wire Wire Line
+ 10000 1500 10000 3900
+Connection ~ 5300 1500
+Connection ~ 10000 1900
+Wire Wire Line
+ 10100 1400 10100 4000
+Connection ~ 10100 2000
+Connection ~ 5400 1400
+Wire Wire Line
+ 10200 6200 10200 2700
+Wire Wire Line
+ 5500 6200 5500 800
+Wire Wire Line
+ 1900 6200 10200 6200
+Connection ~ 10200 4700
+Wire Wire Line
+ 5500 800 3700 800
+Connection ~ 5500 4600
+Wire Wire Line
+ 2200 3400 2200 6300
+Wire Wire Line
+ 7100 6300 1900 6300
+Wire Wire Line
+ 7100 1900 7100 6300
+Connection ~ 2200 4450
+Connection ~ 7100 3900
+Wire Wire Line
+ 7200 4900 7200 6200
+Connection ~ 7200 6200
+Connection ~ 5500 6200
+Connection ~ 2200 6300
+Wire Wire Line
+ 2100 2400 2100 6200
+Connection ~ 2100 6200
+Wire Wire Line
+ 1900 2000 5400 2000
+Connection ~ 5400 2000
+Wire Wire Line
+ 1900 2100 5300 2100
+Connection ~ 5300 2100
+Connection ~ 2400 6500
+Connection ~ 2400 6200
+Wire Wire Line
+ 3700 1850 3700 1800
+Wire Wire Line
+ 2400 7000 2400 7050
+Wire Wire Line
+ 3300 7000 3300 7050
+$Comp
+L PWR_FLAG #FLG047
+U 1 1 5558FA28
+P 3300 6500
+F 0 "#FLG047" H 3300 6595 30 0001 C CNN
+F 1 "PWR_FLAG" H 3300 6680 30 0000 C CNN
+F 2 "" H 3300 6500 60 0000 C CNN
+F 3 "" H 3300 6500 60 0000 C CNN
+ 1 3300 6500
+ 0 1 1 0
+$EndComp
+$EndSCHEMATC
diff --git a/demos/pspice/pspice-cache.lib b/demos/pspice/pspice-cache.lib
new file mode 100644
index 0000000..06bcb9c
--- /dev/null
+++ b/demos/pspice/pspice-cache.lib
@@ -0,0 +1,115 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +12V
+#
+DEF +12V #PWR 0 0 N Y 1 F N
+F0 "#PWR" 0 200 40 H I C CNN
+F1 "+12V" 0 150 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +12V 1 0 0 0 R 40 40 0 0 W N
+C 0 80 20 0 1 0 N
+P 2 0 1 0 0 60 0 0 N
+ENDDRAW
+ENDDEF
+#
+# 0
+#
+DEF 0 #GND 0 0 Y Y 1 F P
+F0 "#GND" 0 -100 40 H I C CNN
+F1 "0" 0 -70 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X 0 1 0 0 0 R 40 40 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# CAP
+#
+DEF CAP C 0 10 Y Y 1 F N
+F0 "C" 100 150 50 V V C CNN
+F1 "CAP" 100 -150 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS C
+DRAW
+P 2 0 1 0 -150 -50 150 -50 N
+P 2 0 1 0 -150 50 150 50 N
+X ~ 1 0 250 200 D 40 40 1 1 P
+X ~ 2 0 -250 200 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 0 N Y 1 F N
+F0 "L" 0 100 50 H V C CNN
+F1 "INDUCTOR" 0 -50 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A -150 0 50 1 1799 0 1 0 N -100 0 -200 0
+A -50 0 50 1 1799 0 1 0 N 0 0 -100 0
+A 50 0 50 1 1799 0 1 0 N 100 0 0 0
+A 150 0 50 1 1799 0 1 0 N 200 0 100 0
+X 1 1 -250 0 50 R 30 30 1 1 I
+X 2 2 250 0 50 L 30 30 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QNPN
+#
+DEF QNPN Q 0 0 Y Y 1 F N
+F0 "Q" -100 300 50 H V C CNN
+F1 "QNPN" -100 200 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 0 0 0 0 150 -150 N
+P 4 0 0 0 150 -150 150 -50 50 -150 150 -150 F
+P 2 0 1 0 0 -150 0 150 N
+P 2 0 1 0 0 0 150 150 N
+P 4 0 1 0 -100 -150 0 -150 0 -150 0 -150 N
+X C 1 150 350 200 D 40 40 1 1 P
+X B 2 -300 0 300 R 40 40 1 1 I
+X E 3 150 -350 200 U 40 40 1 1 P
+X Substrat 4 -100 -350 200 U 50 20 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -40 150 40 -150 0 1 0 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VSOURCE
+#
+DEF VSOURCE V 0 40 Y Y 1 F N
+F0 "V" 0 -100 60 H V C CNN
+F1 "VSOURCE" 0 100 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 400 0 1 0 N
+T 0 -320 -10 100 0 0 1 V Normal 0 C C
+P 2 0 1 0 -250 -250 -250 150 F
+P 3 0 1 0 -300 150 -250 250 -200 150 F
+X E1 1 0 700 300 D 60 60 1 1 I
+X E2 2 0 -700 300 U 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/pspice/pspice.cir b/demos/pspice/pspice.cir
new file mode 100644
index 0000000..0c78a13
--- /dev/null
+++ b/demos/pspice/pspice.cir
@@ -0,0 +1,33 @@
+* EESchema Netlist Version 1.1 (Spice format) creation date: 05/01/2014 19:00:38
+
+* To exclude a component from the Spice Netlist add [Spice_Netlist_Enabled] user FIELD set to: N
+* To reorder the component spice node sequence add [Spice_Node_Sequence] user FIELD and define sequence: 2,1,0
+
+*Sheet Name:/
+R12 /VOUT Net-_L1-Pad1_ 22K
+R11 +12V Net-_L1-Pad1_ 100
+L1 Net-_L1-Pad1_ /VOUT 100mH
+R10 Net-_C3-Pad1_ Net-_Q3-Pad3_ 220
+C3 Net-_C3-Pad1_ 0 10uF
+C2 Net-_C2-Pad1_ 0 1nF
+R8 Net-_Q3-Pad3_ 0 2.2K
+Q3 /VOUT Net-_C2-Pad1_ Net-_Q3-Pad3_ Net-_Q3-Pad3_ Q2N2222
+V2 Net-_C1-Pad2_ 0 AC 0.1
+C1 /VIN Net-_C1-Pad2_ 1UF
+V1 +12V 0 DC 12V
+R2 /VIN 0 10K
+R6 +12V /VIN 22K
+R5 +12V Net-_Q2-Pad2_ 22K
+R1 Net-_Q2-Pad2_ 0 10K
+R7 Net-_Q1-Pad3_ 0 470
+R4 +12V Net-_C2-Pad1_ 1K
+R3 +12V Net-_Q1-Pad1_ 1K
+Q2 Net-_C2-Pad1_ Net-_Q2-Pad2_ Net-_Q1-Pad3_ Net-_Q1-Pad3_ Q2N2222
+Q1 Net-_Q1-Pad1_ /VIN Net-_Q1-Pad3_ Net-_Q1-Pad3_ Q2N2222
+
+.model Q2N2222 npn (bf=200)
+.print tran v(nodes)
+.print dc v(nodes)
+.tran 10 10000 10 > pspice.dat
+
+.end
diff --git a/demos/pspice/pspice.pro b/demos/pspice/pspice.pro
new file mode 100644
index 0000000..3151f0d
--- /dev/null
+++ b/demos/pspice/pspice.pro
@@ -0,0 +1,49 @@
+update=05/01/2014 19:00:46
+last_client=eeschema
+[general]
+version=1
+RootSch=pspice.sch
+BoardNm=pspice.brd
+[pcbnew]
+version=1
+PadDrlX=320
+PadDimH=600
+PadDimV=600
+BoardThickness=630
+SgPcb45=1
+TxtPcbV=800
+TxtPcbH=600
+TxtModV=600
+TxtModH=600
+TxtModW=120
+VEgarde=100
+DrawLar=150
+EdgeLar=150
+TxtLar=120
+MSegLar=150
+LastNetListRead=
+[pcbnew/libraries]
+LibDir=
+LibName1=sockets
+LibName2=connect
+LibName3=discret
+LibName4=pin_array
+LibName5=divers
+LibName6=libcms
+LibName7=display
+LibName8=valves
+LibName9=led
+LibName10=dip_sockets
+[eeschema]
+version=1
+PageLayoutDescrFile=
+SubpartIdSeparator=0
+SubpartFirstId=65
+LibDir=
+NetFmtName=Spice
+RptD_X=0
+RptD_Y=100
+RptLab=1
+LabSize=60
+[eeschema/libraries]
+LibName1=pspice
diff --git a/demos/pspice/pspice.sch b/demos/pspice/pspice.sch
new file mode 100644
index 0000000..9e64a24
--- /dev/null
+++ b/demos/pspice/pspice.sch
@@ -0,0 +1,498 @@
+EESchema Schematic File Version 2
+LIBS:pspice
+LIBS:pspice-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date "Sun 22 Mar 2015"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Text Label 4550 2800 0 60 ~ 0
+VIN
+Text Label 8650 2100 0 60 ~ 0
+VOUT
+Wire Notes Line
+ 1100 7100 1100 6200
+Wire Notes Line
+ 1100 7100 3900 7100
+Wire Notes Line
+ 3900 7100 3900 6200
+Wire Notes Line
+ 3900 6200 1100 6200
+Wire Wire Line
+ 4400 2800 5300 2800
+Connection ~ 9200 1800
+Wire Wire Line
+ 8700 1800 9200 1800
+Wire Wire Line
+ 7800 1800 8200 1800
+Wire Wire Line
+ 7800 1450 7800 1800
+Wire Wire Line
+ 7800 1500 8250 1500
+Wire Wire Line
+ 9200 1500 9200 2100
+Wire Wire Line
+ 8250 2900 8400 2900
+Connection ~ 7050 2450
+Wire Wire Line
+ 7050 2600 7050 2450
+Connection ~ 5750 3200
+Connection ~ 6100 3200
+Wire Wire Line
+ 6350 3200 6350 3150
+Wire Wire Line
+ 5500 3200 6350 3200
+Wire Wire Line
+ 5750 3150 5750 3200
+Wire Wire Line
+ 5500 3200 5500 3150
+Wire Wire Line
+ 3900 2800 3850 2800
+Wire Wire Line
+ 6100 2450 7250 2450
+Wire Wire Line
+ 6100 2450 6100 2300
+Wire Wire Line
+ 5750 2450 5750 2300
+Connection ~ 5100 2800
+Connection ~ 6700 2800
+Wire Wire Line
+ 6550 2800 6700 2800
+Wire Wire Line
+ 6700 2300 6700 3300
+Wire Wire Line
+ 5100 2300 5100 3300
+Wire Wire Line
+ 9200 2100 7700 2100
+Text Notes 1150 6600 0 60 ~ 0
++gnucap .model Q2N2222 npn (bf=200)\n.print tran v(nodes)\n.print dc v(nodes)\n.tran 10 10000 10 > pspice.dat\n
+Text Notes 1100 6200 0 60 ~ 0
+Pspice directives using one multiline text:
+$Comp
+L R R12
+U 1 1 3E9D53DA
+P 8450 1800
+F 0 "R12" V 8530 1800 50 0000 C CNN
+F 1 "22K" V 8450 1800 50 0000 C CNN
+F 2 "" H 8450 1800 60 0001 C CNN
+F 3 "" H 8450 1800 60 0001 C CNN
+ 1 8450 1800
+ 0 1 1 0
+$EndComp
+$Comp
+L R R11
+U 1 1 3E9D4D47
+P 7800 1200
+F 0 "R11" H 7700 1400 50 0000 C CNN
+F 1 "100" V 7800 1200 50 0000 C CNN
+F 2 "" H 7800 1200 60 0001 C CNN
+F 3 "" H 7800 1200 60 0001 C CNN
+ 1 7800 1200
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L1
+U 1 1 3E9D4A5D
+P 8500 1500
+F 0 "L1" H 8500 1600 50 0000 C CNN
+F 1 "100mH" H 8500 1400 50 0000 C CNN
+F 2 "" H 8500 1500 60 0001 C CNN
+F 3 "" H 8500 1500 60 0001 C CNN
+ 1 8500 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R10
+U 1 1 3E9D3DED
+P 8000 2900
+F 0 "R10" V 8080 2900 50 0000 C CNN
+F 1 "220" V 8000 2900 50 0000 C CNN
+F 2 "" H 8000 2900 60 0001 C CNN
+F 3 "" H 8000 2900 60 0001 C CNN
+ 1 8000 2900
+ 0 1 1 0
+$EndComp
+$Comp
+L 0 #GND01
+U 1 1 3E9D3DE2
+P 8400 3450
+F 0 "#GND01" H 8400 3350 40 0001 C CNN
+F 1 "0" H 8400 3380 40 0000 C CNN
+F 2 "" H 8400 3450 60 0001 C CNN
+F 3 "" H 8400 3450 60 0001 C CNN
+ 1 8400 3450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CAP C3
+U 1 1 3E9D3DD3
+P 8400 3150
+F 0 "C3" V 8500 3300 50 0000 C CNN
+F 1 "10uF" V 8500 3000 50 0000 C CNN
+F 2 "" H 8400 3150 60 0000 C CNN
+F 3 "" H 8400 3150 60 0000 C CNN
+ 1 8400 3150
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND02
+U 1 1 3E9D1EFF
+P 7050 3150
+F 0 "#GND02" H 7050 3050 40 0001 C CNN
+F 1 "0" H 7050 3080 40 0000 C CNN
+F 2 "" H 7050 3150 60 0001 C CNN
+F 3 "" H 7050 3150 60 0001 C CNN
+ 1 7050 3150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C2
+U 1 1 3E9D1EF8
+P 7050 2850
+F 0 "C2" V 7150 3000 50 0000 C CNN
+F 1 "1nF" V 7150 2700 50 0000 C CNN
+F 2 "" H 7050 2850 60 0001 C CNN
+F 3 "" H 7050 2850 60 0001 C CNN
+ 1 7050 2850
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND03
+U 1 1 32E8B852
+P 7700 3550
+F 0 "#GND03" H 7700 3450 40 0001 C CNN
+F 1 "0" H 7700 3480 40 0000 C CNN
+F 2 "" H 7700 3550 60 0001 C CNN
+F 3 "" H 7700 3550 60 0001 C CNN
+ 1 7700 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #+12V6
+U 1 1 32E8B84A
+P 7800 900
+F 0 "#+12V6" H 7800 1100 40 0001 C CNN
+F 1 "+12V" H 7800 1050 40 0000 C CNN
+F 2 "" H 7800 900 60 0001 C CNN
+F 3 "" H 7800 900 60 0001 C CNN
+ 1 7800 900
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R8
+U 1 1 32E8B80E
+P 7700 3250
+F 0 "R8" V 7780 3250 50 0000 C CNN
+F 1 "2.2K" V 7700 3250 50 0000 C CNN
+F 2 "" H 7700 3250 60 0001 C CNN
+F 3 "" H 7700 3250 60 0001 C CNN
+ 1 7700 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L QNPN Q3
+U 1 1 32E8B7FC
+P 7550 2450
+F 0 "Q3" H 7450 2750 50 0000 C CNN
+F 1 "Q2N2222" H 7450 2650 50 0000 C CNN
+F 2 "" H 7550 2450 60 0001 C CNN
+F 3 "" H 7550 2450 60 0001 C CNN
+ 1 7550 2450
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND04
+U 1 1 32CFC469
+P 3850 4250
+F 0 "#GND04" H 3850 4150 40 0001 C CNN
+F 1 "0" H 3850 4180 40 0000 C CNN
+F 2 "" H 3850 4250 60 0001 C CNN
+F 3 "" H 3850 4250 60 0001 C CNN
+ 1 3850 4250
+ 1 0 0 -1
+$EndComp
+$Comp
+L VSOURCE V2
+U 1 1 32CFC454
+P 3850 3500
+F 0 "V2" H 3850 3400 60 0000 C CNN
+F 1 "AC 0.1" H 3850 3600 60 0000 C CNN
+F 2 "" H 3850 3500 60 0001 C CNN
+F 3 "" H 3850 3500 60 0001 C CNN
+ 1 3850 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C1
+U 1 1 32CFC413
+P 4150 2800
+F 0 "C1" V 4250 2950 50 0000 C CNN
+F 1 "1UF" V 4250 2650 50 0000 C CNN
+F 2 "" H 4150 2800 60 0001 C CNN
+F 3 "" H 4150 2800 60 0001 C CNN
+ 1 4150 2800
+ 0 1 1 0
+$EndComp
+$Comp
+L +12V #+12V5
+U 1 1 32CFC34D
+P 2850 1500
+F 0 "#+12V5" H 2850 1700 40 0001 C CNN
+F 1 "+12V" H 2850 1650 40 0000 C CNN
+F 2 "" H 2850 1500 60 0001 C CNN
+F 3 "" H 2850 1500 60 0001 C CNN
+ 1 2850 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND05
+U 1 1 32CFC344
+P 2850 2950
+F 0 "#GND05" H 2850 2850 40 0001 C CNN
+F 1 "0" H 2850 2880 40 0000 C CNN
+F 2 "" H 2850 2950 60 0001 C CNN
+F 3 "" H 2850 2950 60 0001 C CNN
+ 1 2850 2950
+ 1 0 0 -1
+$EndComp
+$Comp
+L VSOURCE V1
+U 1 1 32CFC337
+P 2850 2200
+F 0 "V1" H 2850 2100 60 0000 C CNN
+F 1 "DC 12V" H 2850 2300 60 0000 C CNN
+F 2 "" H 2850 2200 60 0001 C CNN
+F 3 "" H 2850 2200 60 0001 C CNN
+ 1 2850 2200
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #+12V4
+U 1 1 32CFC303
+P 6700 1750
+F 0 "#+12V4" H 6700 1950 40 0001 C CNN
+F 1 "+12V" H 6700 1900 40 0000 C CNN
+F 2 "" H 6700 1750 60 0001 C CNN
+F 3 "" H 6700 1750 60 0001 C CNN
+ 1 6700 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #+12V3
+U 1 1 32CFC2FF
+P 6100 1750
+F 0 "#+12V3" H 6100 1950 40 0001 C CNN
+F 1 "+12V" H 6100 1900 40 0000 C CNN
+F 2 "" H 6100 1750 60 0001 C CNN
+F 3 "" H 6100 1750 60 0001 C CNN
+ 1 6100 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #+12V2
+U 1 1 32CFC2FD
+P 5750 1750
+F 0 "#+12V2" H 5750 1950 40 0001 C CNN
+F 1 "+12V" H 5750 1900 40 0000 C CNN
+F 2 "" H 5750 1750 60 0001 C CNN
+F 3 "" H 5750 1750 60 0001 C CNN
+ 1 5750 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #+12V1
+U 1 1 32CFC2F7
+P 5100 1750
+F 0 "#+12V1" H 5100 1950 40 0001 C CNN
+F 1 "+12V" H 5100 1900 40 0000 C CNN
+F 2 "" H 5100 1750 60 0001 C CNN
+F 3 "" H 5100 1750 60 0001 C CNN
+ 1 5100 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND06
+U 1 1 32CFC2B8
+P 6700 3850
+F 0 "#GND06" H 6700 3750 40 0001 C CNN
+F 1 "0" H 6700 3780 40 0000 C CNN
+F 2 "" H 6700 3850 60 0001 C CNN
+F 3 "" H 6700 3850 60 0001 C CNN
+ 1 6700 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND07
+U 1 1 32CFC2B5
+P 5100 3850
+F 0 "#GND07" H 5100 3750 40 0001 C CNN
+F 1 "0" H 5100 3780 40 0000 C CNN
+F 2 "" H 5100 3850 60 0001 C CNN
+F 3 "" H 5100 3850 60 0001 C CNN
+ 1 5100 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R2
+U 1 1 32CFC293
+P 5100 3550
+F 0 "R2" V 5180 3550 50 0000 C CNN
+F 1 "10K" V 5100 3550 50 0000 C CNN
+F 2 "" H 5100 3550 60 0001 C CNN
+F 3 "" H 5100 3550 60 0001 C CNN
+ 1 5100 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R6
+U 1 1 32CFC288
+P 5100 2050
+F 0 "R6" H 5000 2250 50 0000 C CNN
+F 1 "22K" V 5100 2050 50 0000 C CNN
+F 2 "" H 5100 2050 60 0001 C CNN
+F 3 "" H 5100 2050 60 0001 C CNN
+ 1 5100 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R5
+U 1 1 32CFC27F
+P 6700 2050
+F 0 "R5" H 6600 2250 50 0000 C CNN
+F 1 "22K" V 6700 2050 50 0000 C CNN
+F 2 "" H 6700 2050 60 0001 C CNN
+F 3 "" H 6700 2050 60 0001 C CNN
+ 1 6700 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 32CFC277
+P 6700 3550
+F 0 "R1" V 6780 3550 50 0000 C CNN
+F 1 "10K" V 6700 3550 50 0000 C CNN
+F 2 "" H 6700 3550 60 0001 C CNN
+F 3 "" H 6700 3550 60 0001 C CNN
+ 1 6700 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L 0 #GND08
+U 1 1 32CFC26C
+P 5950 3850
+F 0 "#GND08" H 5950 3750 40 0001 C CNN
+F 1 "0" H 5950 3780 40 0000 C CNN
+F 2 "" H 5950 3850 60 0001 C CNN
+F 3 "" H 5950 3850 60 0001 C CNN
+ 1 5950 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R7
+U 1 1 32CFC25A
+P 5950 3550
+F 0 "R7" V 6030 3550 50 0000 C CNN
+F 1 "470" V 5950 3550 50 0000 C CNN
+F 2 "" H 5950 3550 60 0001 C CNN
+F 3 "" H 5950 3550 60 0001 C CNN
+ 1 5950 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R4
+U 1 1 32CFC254
+P 6100 2050
+F 0 "R4" H 6000 2250 50 0000 C CNN
+F 1 "1K" V 6100 2050 50 0000 C CNN
+F 2 "" H 6100 2050 60 0001 C CNN
+F 3 "" H 6100 2050 60 0001 C CNN
+ 1 6100 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R3
+U 1 1 32CFC24C
+P 5750 2050
+F 0 "R3" H 5650 2250 50 0000 C CNN
+F 1 "1K" V 5750 2050 50 0000 C CNN
+F 2 "" H 5750 2050 60 0001 C CNN
+F 3 "" H 5750 2050 60 0001 C CNN
+ 1 5750 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L QNPN Q2
+U 1 1 32CFC230
+P 6250 2800
+F 0 "Q2" H 6150 3100 50 0000 C CNN
+F 1 "Q2N2222" H 6150 3000 50 0000 C CNN
+F 2 "" H 6250 2800 60 0001 C CNN
+F 3 "" H 6250 2800 60 0001 C CNN
+ 1 6250 2800
+ -1 0 0 -1
+$EndComp
+$Comp
+L QNPN Q1
+U 1 1 32CFC227
+P 5600 2800
+F 0 "Q1" H 5500 3100 50 0000 C CNN
+F 1 "Q2N2222" H 5500 3000 50 0000 C CNN
+F 2 "" H 5600 2800 60 0001 C CNN
+F 3 "" H 5600 2800 60 0001 C CNN
+ 1 5600 2800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9200 1500 8750 1500
+Connection ~ 7800 1500
+Wire Wire Line
+ 2850 2900 2850 2950
+Wire Wire Line
+ 3850 4200 3850 4250
+Wire Wire Line
+ 5100 3800 5100 3850
+Wire Wire Line
+ 5950 3800 5950 3850
+Wire Wire Line
+ 6100 3150 6100 3200
+Wire Wire Line
+ 5950 3200 5950 3300
+Connection ~ 5950 3200
+Wire Wire Line
+ 6700 3850 6700 3800
+Wire Wire Line
+ 7050 3150 7050 3100
+Wire Wire Line
+ 7700 3550 7700 3500
+Wire Wire Line
+ 8400 3450 8400 3400
+Wire Wire Line
+ 7700 2800 7700 3000
+Wire Wire Line
+ 7750 2900 7700 2900
+Connection ~ 7700 2900
+Wire Wire Line
+ 7700 2850 7450 2850
+Wire Wire Line
+ 7450 2850 7450 2800
+Connection ~ 7700 2850
+Wire Wire Line
+ 6700 1750 6700 1800
+Wire Wire Line
+ 6100 1750 6100 1800
+Wire Wire Line
+ 5750 1750 5750 1800
+Wire Wire Line
+ 5100 1750 5100 1800
+Wire Wire Line
+ 7800 900 7800 950
+$EndSCHEMATC
diff --git a/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py b/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py
new file mode 100644
index 0000000..55c1698
--- /dev/null
+++ b/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py
@@ -0,0 +1,119 @@
+'''
+ A python script example to create plot files to build a board:
+ Gerber files
+ Drill files
+ Map dril files
+
+ Important note:
+ this python script does not plot frame references (page layout).
+ the reason is it is not yet possible from a python script because plotting
+ plot frame references needs loading the corresponding page layout file
+ (.wks file) or the default template.
+
+ This info (the page layout template) is not stored in the board, and therefore
+ not available.
+
+ Do not try to change SetPlotFrameRef(False) to SetPlotFrameRef(true)
+ the result is the pcbnew lib will crash if you try to plot
+ the unknown frame references template.
+
+ Anyway, in gerber and drill files the page layout is not plot
+'''
+
+import sys
+
+from pcbnew import *
+filename=sys.argv[1]
+
+board = LoadBoard(filename)
+
+plotDir = "plot/"
+
+pctl = PLOT_CONTROLLER(board)
+
+popt = pctl.GetPlotOptions()
+
+popt.SetOutputDirectory(plotDir)
+
+# Set some important plot options:
+popt.SetPlotFrameRef(False) #do not change it
+popt.SetLineWidth(FromMM(0.35))
+
+popt.SetAutoScale(False) #do not change it
+popt.SetScale(1) #do not change it
+popt.SetMirror(False)
+popt.SetUseGerberAttributes(True)
+popt.SetUseGerberProtelExtensions(False)
+popt.SetExcludeEdgeLayer(False);
+popt.SetScale(1)
+popt.SetUseAuxOrigin(True)
+
+# This by gerbers only (also the name is truly horrid!)
+popt.SetSubtractMaskFromSilk(False)
+
+# Once the defaults are set it become pretty easy...
+# I have a Turing-complete programming language here: I'll use it...
+# param 0 is a string added to the file base name to identify the drawing
+# param 1 is the layer ID
+# param 2 is a comment
+plot_plan = [
+ ( "CuTop", F_Cu, "Top layer" ),
+ ( "CuBottom", B_Cu, "Bottom layer" ),
+ ( "PasteBottom", B_Paste, "Paste Bottom" ),
+ ( "PasteTop", F_Paste, "Paste top" ),
+ ( "SilkTop", F_SilkS, "Silk top" ),
+ ( "SilkBottom", B_SilkS, "Silk top" ),
+ ( "MaskBottom", B_Mask, "Mask bottom" ),
+ ( "MaskTop", F_Mask, "Mask top" ),
+ ( "EdgeCuts", Edge_Cuts, "Edges" ),
+]
+
+
+for layer_info in plot_plan:
+ pctl.SetLayer(layer_info[1])
+ pctl.OpenPlotfile(layer_info[0], PLOT_FORMAT_GERBER, layer_info[2])
+ print 'plot %s' % pctl.GetPlotFileName()
+ if pctl.PlotLayer() == False:
+ print "plot error"
+
+#generate internal copper layers, if any
+lyrcnt = board.GetCopperLayerCount();
+
+for innerlyr in range ( 1, lyrcnt-1 ):
+ pctl.SetLayer(innerlyr)
+ lyrname = 'inner%s' % innerlyr
+ pctl.OpenPlotfile(lyrname, PLOT_FORMAT_GERBER, "inner")
+ print 'plot %s' % pctl.GetPlotFileName()
+ if pctl.PlotLayer() == False:
+ print "plot error"
+
+
+# At the end you have to close the last plot, otherwise you don't know when
+# the object will be recycled!
+pctl.ClosePlot()
+
+# Fabricators need drill files.
+# sometimes a drill map file is asked (for verification purpose)
+drlwriter = EXCELLON_WRITER( board )
+drlwriter.SetMapFileFormat( PLOT_FORMAT_PDF )
+
+mirror = False
+minimalHeader = False
+offset = wxPoint(0,0)
+# False to generate 2 separate drill files (one for plated holes, one for non plated holes)
+# True to generate only one drill file
+mergeNPTH = False
+drlwriter.SetOptions( mirror, minimalHeader, offset, mergeNPTH )
+
+metricFmt = True
+drlwriter.SetFormat( metricFmt )
+
+genDrl = True
+genMap = True
+print 'create drill and map files in %s' % pctl.GetPlotDirName()
+drlwriter.CreateDrillandMapFilesSet( pctl.GetPlotDirName(), genDrl, genMap );
+
+# One can create a text file to report drill statistics
+rptfn = pctl.GetPlotDirName() + 'drill_report.rpt'
+print 'report: %s' % rptfn
+drlwriter.GenDrillReportFile( rptfn );
diff --git a/demos/python_scripts_examples/plot_board.py b/demos/python_scripts_examples/plot_board.py
new file mode 100644
index 0000000..6fd55d0
--- /dev/null
+++ b/demos/python_scripts_examples/plot_board.py
@@ -0,0 +1,211 @@
+'''
+ A python script example to create various plot files from a board:
+ Fab files
+ Doc files
+ Gerber files
+
+ Important note:
+ this python script does not plot frame references.
+ the reason is it is not yet possible from a python script because plotting
+ plot frame references needs loading the corresponding page layout file
+ (.wks file) or the default template.
+
+ This info (the page layout template) is not stored in the board, and therefore
+ not available.
+
+ Do not try to change SetPlotFrameRef(False) to SetPlotFrameRef(true)
+ the result is the pcbnew lib will crash if you try to plot
+ the unknown frame references template.
+'''
+
+import sys
+
+from pcbnew import *
+filename=sys.argv[1]
+
+board = LoadBoard(filename)
+
+pctl = PLOT_CONTROLLER(board)
+
+popt = pctl.GetPlotOptions()
+
+popt.SetOutputDirectory("plot/")
+
+# Set some important plot options:
+popt.SetPlotFrameRef(False)
+popt.SetLineWidth(FromMM(0.35))
+
+popt.SetAutoScale(False)
+popt.SetScale(1)
+popt.SetMirror(False)
+popt.SetUseGerberAttributes(True)
+popt.SetExcludeEdgeLayer(False);
+popt.SetScale(1)
+popt.SetUseAuxOrigin(True)
+
+# This by gerbers only (also the name is truly horrid!)
+popt.SetSubtractMaskFromSilk(False)
+
+pctl.SetLayer(F_SilkS)
+pctl.OpenPlotfile("Silk", PLOT_FORMAT_PDF, "Assembly guide")
+pctl.PlotLayer()
+
+# Once the defaults are set it become pretty easy...
+# I have a Turing-complete programming language here: I'll use it...
+# param 0 is a string added to the file base name to identify the drawing
+# param 1 is the layer ID
+plot_plan = [
+ ( "CuTop", F_Cu, "Top layer" ),
+ ( "CuBottom", B_Cu, "Bottom layer" ),
+ ( "PasteBottom", B_Paste, "Paste Bottom" ),
+ ( "PasteTop", F_Paste, "Paste top" ),
+ ( "SilkTop", F_SilkS, "Silk top" ),
+ ( "SilkBottom", B_SilkS, "Silk top" ),
+ ( "MaskBottom", B_Mask, "Mask bottom" ),
+ ( "MaskTop", F_Mask, "Mask top" ),
+ ( "EdgeCuts", Edge_Cuts, "Edges" ),
+]
+
+
+for layer_info in plot_plan:
+ pctl.SetLayer(layer_info[1])
+ pctl.OpenPlotfile(layer_info[0], PLOT_FORMAT_GERBER, layer_info[2])
+ pctl.PlotLayer()
+
+# Our fabricators want two additional gerbers:
+# An assembly with no silk trim and all and only the references
+# (you'll see that even holes have designators, obviously)
+popt.SetSubtractMaskFromSilk(False)
+popt.SetPlotReference(True)
+popt.SetPlotValue(False)
+popt.SetPlotInvisibleText(True)
+
+pctl.SetLayer(F_SilkS)
+pctl.OpenPlotfile("AssyTop", PLOT_FORMAT_PDF, "Assembly top")
+pctl.PlotLayer()
+
+# And a gerber with only the component outlines (really!)
+popt.SetPlotReference(False)
+popt.SetPlotInvisibleText(False)
+pctl.SetLayer(F_SilkS)
+pctl.OpenPlotfile("AssyOutlinesTop", PLOT_FORMAT_PDF, "Assembly outline top")
+pctl.PlotLayer()
+
+# The same could be done for the bottom side, if there were components
+popt.SetUseAuxOrigin(False)
+
+## For documentation we also want a general layout PDF
+## I usually use a shell script to merge the ps files and then distill the result
+## Now I can do it with a control file. As a bonus I can have references in a
+## different colour, too.
+
+popt.SetPlotReference(True)
+popt.SetPlotValue(True)
+popt.SetPlotInvisibleText(False)
+# Remember that the frame is always in color 0 (BLACK) and should be requested
+# before opening the plot
+popt.SetPlotFrameRef(False)
+pctl.SetLayer(Dwgs_User)
+
+pctl.OpenPlotfile("Layout", PLOT_FORMAT_PDF, "General layout")
+pctl.PlotLayer()
+
+# Do the PCB edges in yellow
+popt.SetColor(YELLOW)
+pctl.SetLayer(Edge_Cuts)
+pctl.PlotLayer()
+
+## Comments in, uhmm... green
+popt.SetColor(GREEN)
+pctl.SetLayer(Cmts_User)
+pctl.PlotLayer()
+
+# Bottom mask as lines only, in red
+#popt.SetMode(LINE)
+popt.SetColor(RED)
+pctl.SetLayer(B_Mask)
+pctl.PlotLayer()
+
+# Top mask as lines only, in blue
+popt.SetColor(BLUE)
+pctl.SetLayer(F_Mask)
+pctl.PlotLayer()
+
+# Top paste in light blue, filled
+popt.SetColor(BLUE)
+#popt.SetMode(FILLED)
+pctl.SetLayer(F_Paste)
+pctl.PlotLayer()
+
+# Top Silk in cyan, filled, references in dark cyan
+popt.SetReferenceColor(DARKCYAN)
+popt.SetColor(CYAN)
+pctl.SetLayer(F_SilkS)
+pctl.PlotLayer()
+
+popt.SetTextMode(PLOTTEXTMODE_STROKE)
+pctl.SetLayer(F_Mask)
+pctl.OpenPlotfile("Assembly", PLOT_FORMAT_SVG, "Master Assembly")
+pctl.SetColorMode(True)
+
+# We want *everything*
+popt.SetPlotReference(True)
+popt.SetPlotValue(True)
+popt.SetPlotInvisibleText(True)
+
+# Remember than the DXF driver assigns colours to layers. This means that
+# we will be able to turn references on and off simply using their layers
+# Also most of the layer are now plotted in 'line' mode, because DXF handles
+# fill mode almost like sketch mode (this is to keep compatibility with
+# most CAD programs; most of the advanced primitive attributes required are
+# handled only by recent autocads...); also the entry level cads (qcad
+# and derivatives) simply don't handle polyline widths...
+
+# Here I'm using numbers for colors and layers, I'm too lazy too look them up:P
+popt.SetReferenceColor(19)
+popt.SetValueColor(21)
+
+popt.SetColor(0)
+#popt.SetMode(LINE)
+pctl.SetLayer(B_SilkS)
+pctl.PlotLayer()
+popt.SetColor(14)
+pctl.SetLayer(F_SilkS)
+pctl.PlotLayer()
+popt.SetColor(2)
+pctl.SetLayer(B_Mask)
+pctl.PlotLayer()
+popt.SetColor(4)
+pctl.SetLayer(F_Mask)
+pctl.PlotLayer()
+popt.SetColor(1)
+pctl.SetLayer(B_Paste)
+pctl.PlotLayer()
+popt.SetColor(9)
+pctl.SetLayer(F_Paste)
+pctl.PlotLayer()
+popt.SetColor(3)
+pctl.SetLayer(Edge_Cuts)
+pctl.PlotLayer()
+
+# Export the copper layers too... exporting one of them in filled mode with
+# drill marks will put the marks in the WHITE later (since it tries to blank
+# the pads...); these will be obviously great reference points for snap
+# and stuff in the cad. A pctl function to only plot them would be
+# better anyway...
+
+popt.SetColor(17)
+#popt.SetMode(FILLED)
+popt.SetDrillMarksType(PCB_PLOT_PARAMS.FULL_DRILL_SHAPE)
+pctl.SetLayer(B_Cu)
+pctl.PlotLayer()
+popt.SetColor(20)
+popt.SetDrillMarksType(PCB_PLOT_PARAMS.NO_DRILL_SHAPE)
+pctl.SetLayer(F_Cu)
+pctl.PlotLayer()
+
+# At the end you have to close the last plot, otherwise you don't know when
+# the object will be recycled!
+pctl.ClosePlot()
+
+# We have just generated 21 plotfiles with a single script
diff --git a/demos/sonde xilinx/sonde xilinx-cache.lib b/demos/sonde xilinx/sonde xilinx-cache.lib
new file mode 100644
index 0000000..4415ec6
--- /dev/null
+++ b/demos/sonde xilinx/sonde xilinx-cache.lib
@@ -0,0 +1,318 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_6
+#
+DEF CONN_6 P 0 30 Y N 1 F N
+F0 "P" -50 0 60 V V C CNN
+F1 "CONN_6" 50 0 60 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 300 100 -300 0 1 0 N
+X 1 1 -350 250 250 R 60 60 1 1 P I
+X 2 2 -350 150 250 R 60 60 1 1 P I
+X 3 3 -350 50 250 R 60 60 1 1 P I
+X 4 4 -350 -50 250 R 60 60 1 1 P I
+X 5 5 -350 -150 250 R 60 60 1 1 P I
+X 6 6 -350 -250 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB25
+#
+DEF DB25 J 0 40 Y N 1 F N
+F0 "J" 50 1350 70 H V C CNN
+F1 "DB25" -50 -1350 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB25*
+$ENDFPLIST
+DRAW
+A -109 1270 41 1799 774 0 1 8 N -150 1270 -100 1310
+A -108 -1259 42 -1787 -788 0 1 8 N -150 -1260 -100 -1300
+A 116 -1169 34 -657 -15 0 1 8 N 130 -1200 150 -1170
+A 117 1170 32 664 1 0 1 8 N 130 1199 149 1170
+C -70 -1200 30 0 1 0 N
+C -70 -1000 30 0 1 0 N
+C -70 -800 30 0 1 0 N
+C -70 -600 30 0 1 0 N
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C -70 600 30 0 1 0 N
+C -70 800 30 0 1 0 N
+C -70 1000 30 0 1 0 N
+C -70 1200 30 0 1 0 N
+C 50 -1100 30 0 1 0 N
+C 50 -900 30 0 1 0 N
+C 50 -700 30 0 1 0 N
+C 50 -500 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+C 50 500 30 0 1 0 N
+C 50 700 30 0 1 0 N
+C 50 900 30 0 1 0 N
+C 50 1100 30 0 1 0 N
+P 2 0 1 8 -150 -1260 -150 1270 N
+P 2 0 1 0 -150 -1200 -100 -1200 N
+P 2 0 1 0 -150 -1100 20 -1100 N
+P 2 0 1 0 -150 -1000 -100 -1000 N
+P 2 0 1 0 -150 -900 20 -900 N
+P 2 0 1 0 -150 -800 -100 -800 N
+P 2 0 1 0 -150 -700 20 -700 N
+P 2 0 1 0 -150 -600 -100 -600 N
+P 2 0 1 0 -150 -500 20 -500 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -150 500 20 500 N
+P 2 0 1 0 -150 600 -100 600 N
+P 2 0 1 0 -150 700 20 700 N
+P 2 0 1 0 -150 800 -100 800 N
+P 2 0 1 0 -150 900 20 900 N
+P 2 0 1 0 -150 1000 -100 1000 N
+P 2 0 1 0 -150 1100 20 1100 N
+P 2 0 1 0 -150 1200 -100 1200 N
+P 2 0 1 8 -100 -1300 130 -1200 N
+P 2 0 1 8 130 1200 -100 1310 N
+P 2 0 1 8 150 -1170 150 1170 N
+X 1 1 -450 -1200 300 R 60 60 1 1 P
+X 2 2 -450 -1000 300 R 60 60 1 1 P
+X 3 3 -450 -800 300 R 60 60 1 1 P
+X 4 4 -450 -600 300 R 60 60 1 1 P
+X 5 5 -450 -400 300 R 60 60 1 1 P
+X 6 6 -450 -200 300 R 60 60 1 1 P
+X 7 7 -450 0 300 R 60 60 1 1 P
+X 8 8 -450 200 300 R 60 60 1 1 P
+X 9 9 -450 400 300 R 60 60 1 1 P
+X 10 10 -450 600 300 R 60 60 1 1 P
+X P20 20 -450 100 300 R 60 60 1 1 P
+X 11 11 -450 800 300 R 60 60 1 1 P
+X P21 21 -450 300 300 R 60 60 1 1 P
+X 12 12 -450 1000 300 R 60 60 1 1 P
+X P22 22 -450 500 300 R 60 60 1 1 P
+X 13 13 -450 1200 300 R 60 60 1 1 P
+X P23 23 -450 700 300 R 60 60 1 1 P
+X P14 14 -450 -1100 300 R 60 60 1 1 P
+X P24 24 -450 900 300 R 60 60 1 1 P
+X P15 15 -450 -900 300 R 60 60 1 1 P
+X P25 25 -450 1100 300 R 60 60 1 1 P
+X P16 16 -450 -700 300 R 60 60 1 1 P
+X P17 17 -450 -500 300 R 60 60 1 1 P
+X P18 18 -450 -300 300 R 60 60 1 1 P
+X P19 19 -450 -100 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/sonde xilinx/sonde xilinx.kicad_pcb b/demos/sonde xilinx/sonde xilinx.kicad_pcb
new file mode 100644
index 0000000..415dc24
--- /dev/null
+++ b/demos/sonde xilinx/sonde xilinx.kicad_pcb
@@ -0,0 +1,1660 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-03-10 BZR 5499)-product")
+
+ (general
+ (links 66)
+ (no_connects 0)
+ (area 87.894885 61.823599 196.621401 118.313201)
+ (thickness 1.6002)
+ (drawings 19)
+ (tracks 265)
+ (zones 0)
+ (modules 25)
+ (nets 27)
+ )
+
+ (page A4)
+ (title_block
+ (rev 1)
+ (company "Kicad Demo")
+ )
+
+ (layers
+ (0 Dessus signal)
+ (31 Dessous signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.635)
+ (user_trace_width 0.4)
+ (user_trace_width 1)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2032)
+ (segment_width 0.3)
+ (edge_width 0.1)
+ (via_size 1.651)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.5 1.5)
+ (mod_edge_width 0.3)
+ (mod_text_size 0.3 1.5)
+ (mod_text_width 0.3)
+ (pad_size 1.778 5.08)
+ (pad_drill 0)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 0 0)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions false)
+ (excludeedgelayer false)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 0)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 /CLK-D1)
+ (net 2 /CTRL-D3)
+ (net 3 /DONE-SELECT*)
+ (net 4 /PWR_3,3-5V)
+ (net 5 /TCK-CCLK)
+ (net 6 /TD0-DONE)
+ (net 7 /TD0-PROG-D4)
+ (net 8 /TDI-DIN)
+ (net 9 /TDI-DIN-D0)
+ (net 10 /TMS-PROG)
+ (net 11 /TMS-PROG-D2)
+ (net 12 /VCC_SENSE-ERROR*)
+ (net 13 GND)
+ (net 14 N-000008)
+ (net 15 N-000014)
+ (net 16 N-000015)
+ (net 17 N-000016)
+ (net 18 N-000030)
+ (net 19 N-000031)
+ (net 20 N-000032)
+ (net 21 N-000033)
+ (net 22 N-000034)
+ (net 23 N-000035)
+ (net 24 N-000036)
+ (net 25 N-000038)
+ (net 26 VCC)
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.254)
+ (trace_width 0.635)
+ (via_dia 1.651)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net /CLK-D1)
+ (add_net /CTRL-D3)
+ (add_net /DONE-SELECT*)
+ (add_net /PWR_3,3-5V)
+ (add_net /TCK-CCLK)
+ (add_net /TD0-DONE)
+ (add_net /TD0-PROG-D4)
+ (add_net /TDI-DIN)
+ (add_net /TDI-DIN-D0)
+ (add_net /TMS-PROG)
+ (add_net /TMS-PROG-D2)
+ (add_net /VCC_SENSE-ERROR*)
+ (add_net GND)
+ (add_net N-000008)
+ (add_net N-000014)
+ (add_net N-000015)
+ (add_net N-000016)
+ (add_net N-000030)
+ (add_net N-000031)
+ (add_net N-000032)
+ (add_net N-000033)
+ (add_net N-000034)
+ (add_net N-000035)
+ (add_net N-000036)
+ (add_net N-000038)
+ (add_net VCC)
+ )
+
+ (module DB25M_CI (layer Dessus) (tedit 3F9A86C0) (tstamp 3)
+ (at 102.87 88.9 90)
+ (descr "Connecteur DB25 male couche")
+ (tags "CONN DB25")
+ (path /3EBF7D04)
+ (fp_text reference J1 (at 0 -2.667 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB25MALE (at 0 -8.763 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 15.875 -0.508) (end 16.891 -3.302) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.891 -3.302) (end 17.907 -0.508) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 -4.318) (end 26.67 -4.318) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 26.67 -5.588) (end -26.67 -5.588) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 26.67 -5.588) (end 26.67 -4.318) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 -5.588) (end -26.67 -4.318) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 -0.508) (end -20.32 -0.508) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 19.05 -0.508) (end 19.05 1.143) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 19.05 1.143) (end 17.78 1.143) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -19.05 -0.508) (end -19.05 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -19.05 1.016) (end -17.78 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -0.508) (end -20.32 -4.318) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 -4.318) (end 20.32 -0.508) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -5.588) (end -20.32 -11.303) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -11.303) (end 20.32 -11.303) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 -11.303) (end 20.32 -5.588) (layer F.SilkS) (width 0.3048))
+ (pad 13 connect rect (at -16.51 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 3 /DONE-SELECT*))
+ (pad 12 connect rect (at -13.716 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 14 N-000008))
+ (pad 11 connect rect (at -11.049 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 14 N-000008))
+ (pad 10 connect rect (at -8.255 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask))
+ (pad 9 connect rect (at -5.588 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask))
+ (pad 8 connect rect (at -2.794 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 14 N-000008))
+ (pad 7 connect rect (at 0 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask))
+ (pad 6 connect rect (at 2.667 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 7 /TD0-PROG-D4))
+ (pad 5 connect rect (at 5.461 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 2 /CTRL-D3))
+ (pad 4 connect rect (at 8.128 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 11 /TMS-PROG-D2))
+ (pad 3 connect rect (at 10.922 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 1 /CLK-D1))
+ (pad 2 connect rect (at 13.716 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask)
+ (net 9 /TDI-DIN-D0))
+ (pad 1 connect rect (at 16.383 2.667 180) (size 5.08 1.524) (layers Dessus F.Mask))
+ (pad 25 connect rect (at -15.113 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask)
+ (net 13 GND))
+ (pad 24 connect rect (at -12.446 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 23 connect rect (at -9.652 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 22 connect rect (at -6.858 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 21 connect rect (at -4.191 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 20 connect rect (at -1.397 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask)
+ (net 13 GND))
+ (pad 19 connect rect (at 1.27 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 18 connect rect (at 4.064 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 17 connect rect (at 6.858 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 16 connect rect (at 9.525 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (pad 15 connect rect (at 12.319 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask)
+ (net 12 /VCC_SENSE-ERROR*))
+ (pad 14 connect rect (at 14.986 2.667 180) (size 5.08 1.524) (layers Dessous B.Mask))
+ (model Connect.3dshapes/DB25M_CI.wrl
+ (at (xyz 0 0 -0.033))
+ (scale (xyz 0.98 1 1))
+ (rotate (xyz 90 180 0))
+ )
+ )
+
+ (module bornier6 (layer Dessus) (tedit 41F667CA) (tstamp 3)
+ (at 170.18 88.9 270)
+ (descr "Bornier d'alimentation 4 pins")
+ (tags DEV)
+ (path /3EBF830C)
+ (fp_text reference P1 (at 10.16 -6.35 270) (layer F.SilkS)
+ (effects (font (size 2.6162 1.59766) (thickness 0.3048)))
+ )
+ (fp_text value CONN_6 (at -17.78 0 360) (layer F.SilkS)
+ (effects (font (size 3.05054 2.0955) (thickness 0.3048)))
+ )
+ (fp_line (start -15.24 -3.81) (end -15.24 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.24 3.81) (end 15.24 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.24 2.54) (end 15.24 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.24 -3.81) (end 15.24 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.24 3.81) (end 15.24 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole circle (at -7.62 0 270) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 3 thru_hole circle (at -2.54 0 270) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /TD0-DONE))
+ (pad 1 thru_hole rect (at -12.7 0 270) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /PWR_3,3-5V))
+ (pad 4 thru_hole circle (at 2.54 0 270) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /TDI-DIN))
+ (pad 5 thru_hole circle (at 7.62 0 270) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /TCK-CCLK))
+ (pad 6 thru_hole circle (at 12.7 0 270) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /TMS-PROG))
+ (model Connect.3dshapes/bornier6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 142.24 72.39)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF8187)
+ (autoplace_cost180 10)
+ (fp_text reference R2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 5,1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 N-000038))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 76.2 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF7D16)
+ (autoplace_cost180 10)
+ (fp_text reference R1 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 N-000014))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /VCC_SENSE-ERROR*))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 157.48 88.9 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF819B)
+ (autoplace_cost180 10)
+ (fp_text reference R14 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /TD0-DONE))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 N-000038))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 156.21 73.66)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF818E)
+ (autoplace_cost180 10)
+ (fp_text reference R5 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 83.82 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF7D26)
+ (autoplace_cost180 10)
+ (fp_text reference R6 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 N-000031))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /TD0-PROG-D4))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 92.71 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4D52807F)
+ (autoplace_cost180 10)
+ (fp_text reference R7 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 N-000016))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /TDI-DIN-D0))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 86.36 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4D528080)
+ (autoplace_cost180 10)
+ (fp_text reference R8 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 N-000033))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /CTRL-D3))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 81.28 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF7D33)
+ (autoplace_cost180 10)
+ (fp_text reference R9 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 N-000032))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /TMS-PROG-D2))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 78.74 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF7D31)
+ (autoplace_cost180 10)
+ (fp_text reference R10 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 N-000030))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /CLK-D1))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 157.48 93.98 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4D527316)
+ (autoplace_cost180 10)
+ (fp_text reference R11 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /TDI-DIN))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 N-000035))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 157.48 99.06 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4D528083)
+ (autoplace_cost180 10)
+ (fp_text reference R12 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /TCK-CCLK))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 N-000036))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 157.48 105.41 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /4D528082)
+ (autoplace_cost180 10)
+ (fp_text reference R13 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 100 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /TMS-PROG))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 N-000034))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module R4 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 116.84 104.14 180)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EBF7D22)
+ (autoplace_cost180 10)
+ (fp_text reference R4 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 47 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.397 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 N-000015))
+ (pad 2 thru_hole circle (at 5.08 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /DONE-SELECT*))
+ (model Discret.3dshapes/R3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module CP5 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 140.97 76.2)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /3EBF82C6)
+ (fp_text reference C1 (at 0 0) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 1uF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.3335) (thickness 0.3048)))
+ )
+ (fp_line (start -4.445 -1.27) (end -4.445 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.445 -1.27) (end -4.445 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.445 -1.27) (end -4.445 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.445 -1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 1.27) (end -4.445 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.445 1.27) (end -4.445 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.445 -0.635) (end -4.445 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -4.445 -0.635) (end -5.08 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -0.635) (end -5.08 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0.635) (end -4.445 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 0) (end -6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 0) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 0) (end -5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 0) (end 6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 0) (end 6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 0) (end 6.35 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 0) (end 6.35 0) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (pad 2 thru_hole circle (at 6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module D3 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 156.21 78.74 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /3EBF8176)
+ (fp_text reference D2 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT46 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /PWR_3,3-5V))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module D3 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 130.81 72.39 180)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /3EBF815E)
+ (fp_text reference D1 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT46 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 N-000014))
+ (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module 14DIP-ELL300 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 144.78 90.17 270)
+ (descr "Module Dil 14 pins, pads elliptiques")
+ (tags DIL)
+ (path /3EBF7EEC)
+ (fp_text reference U2 (at -5.08 -1.27 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.28702)))
+ )
+ (fp_text value 74LS125 (at 1.27 1.27 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.28702)))
+ )
+ (fp_line (start -10.16 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 2.54) (end -10.16 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 2.54) (end -10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 -1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 -2.54) (end 10.16 2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 2 thru_hole oval (at -5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 N-000038))
+ (pad 3 thru_hole oval (at -2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 N-000015))
+ (pad 4 thru_hole oval (at 0 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 5 thru_hole oval (at 2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 6 thru_hole oval (at 5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole oval (at 7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 8 thru_hole oval (at 7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole oval (at 5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 10 thru_hole oval (at 2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 11 thru_hole oval (at 0 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole oval (at -2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 13 thru_hole oval (at -5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 14 thru_hole oval (at -7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (model Sockets_DIP.3dshapes/DIP-14__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module 14DIP-ELL300 (layer Dessus) (tedit 4BF0FA82) (tstamp 3)
+ (at 130.81 90.17 270)
+ (descr "Module Dil 14 pins, pads elliptiques")
+ (tags DIL)
+ (path /3EBF7DBD)
+ (fp_text reference U1 (at -5.08 -1.27 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.28702)))
+ )
+ (fp_text value 74LS125 (at 1.27 1.27 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.143) (thickness 0.28702)))
+ )
+ (fp_line (start -10.16 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 2.54) (end -10.16 2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 2.54) (end -10.16 -2.54) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 -1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -8.89 1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 -2.54) (end 10.16 2.54) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 N-000031))
+ (pad 2 thru_hole oval (at -5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 3 thru_hole oval (at -2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 N-000038))
+ (pad 4 thru_hole oval (at 0 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 N-000033))
+ (pad 5 thru_hole oval (at 2.54 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 N-000016))
+ (pad 6 thru_hole oval (at 5.08 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 N-000035))
+ (pad 7 thru_hole oval (at 7.62 3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (pad 8 thru_hole oval (at 7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 N-000036))
+ (pad 9 thru_hole oval (at 5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 N-000030))
+ (pad 10 thru_hole oval (at 2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 N-000033))
+ (pad 11 thru_hole oval (at 0 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 N-000034))
+ (pad 12 thru_hole oval (at -2.54 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 N-000032))
+ (pad 13 thru_hole oval (at -5.08 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 N-000033))
+ (pad 14 thru_hole oval (at -7.62 -3.81 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 VCC))
+ (model Sockets_DIP.3dshapes/DIP-14__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module C2 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 140.97 105.41 270)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4D528085)
+ (fp_text reference C2 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100pF (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 N-000035))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module C2 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 153.67 69.85)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4D528084)
+ (fp_text reference C3 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100pF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 N-000038))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module C2 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 144.78 105.41 270)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /4D528086)
+ (fp_text reference C5 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100pF (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 N-000036))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module C2 (layer Dessus) (tedit 200000) (tstamp 3)
+ (at 148.59 105.41 270)
+ (descr "Condensateur = 2 pas")
+ (tags C)
+ (path /3EBF81A7)
+ (fp_text reference C4 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 100pF (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -3.556 -1.016) (end 3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 -1.016) (end 3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.556 1.016) (end -3.556 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 1.016) (end -3.556 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.556 -0.508) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 N-000034))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 GND))
+ (model Discret.3dshapes/C2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module DB9M_CI_INVERT (layer Dessus) (tedit 552F658C) (tstamp 3)
+ (at 184.15 90.17 270)
+ (descr "Connecteur DB9 femelle encarte")
+ (tags "CONN DB9")
+ (path /3ECDE5C8)
+ (fp_text reference J2 (at 0 -9.144 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9MALE (at 0 -3.048 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -8.509 -12.065) (end 8.636 -12.065) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -1.27) (end -9.144 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.906 -1.27) (end 9.271 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.906 -4.445) (end -9.779 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.621 -4.445) (end 9.906 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.494 -5.715) (end 15.621 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.636 -5.715) (end 8.636 -12.065) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.621 -4.445) (end 15.621 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.906 -1.27) (end 9.906 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.366 0) (end 9.271 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 0) (end 9.271 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.509 -5.715) (end -8.509 -12.065) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.779 -4.445) (end -15.494 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.494 -4.445) (end -15.494 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.144 -1.27) (end -9.779 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.779 -1.27) (end -9.779 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.239 0) (end -9.144 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.144 0) (end -9.144 -1.27) (layer F.SilkS) (width 0.3048))
+ (pad 4 connect rect (at 2.794 2.54 270) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 5 /TCK-CCLK))
+ (pad 3 connect rect (at 0 2.54 270) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 8 /TDI-DIN))
+ (pad 2 connect rect (at -2.794 2.54 270) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 6 /TD0-DONE))
+ (pad 1 connect rect (at -5.588 2.54 270) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 4 /PWR_3,3-5V))
+ (pad 5 connect rect (at 5.588 2.54 270) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 10 /TMS-PROG))
+ (pad 6 connect rect (at -4.191 2.54 270) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 13 GND))
+ (pad 7 connect rect (at -1.397 2.54 270) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 13 GND))
+ (pad 8 connect rect (at 1.397 2.54 270) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 13 GND))
+ (pad 9 connect rect (at 4.191 2.54 270) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 13 GND))
+ (model Connect.3dshapes/DB9M_CI_INVERT.wrl
+ (at (xyz 0 0 -0.033))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 90 0 0))
+ )
+ )
+
+ (gr_line (start 184.15 83.185) (end 184.15 97.79) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_line (start 102.87 71.12) (end 102.87 106.68) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (dimension 81.28 (width 0.3048) (layer Dwgs.User)
+ (gr_text "3.2000 " (at 143.256 114.173) (layer Dwgs.User)
+ (effects (font (thickness 0.3048)))
+ )
+ (feature1 (pts (xy 184.15 110.49) (xy 184.15 118.3132)))
+ (feature2 (pts (xy 102.87 110.49) (xy 102.87 118.3132)))
+ (crossbar (pts (xy 102.87 115.57) (xy 184.15 115.57)))
+ (arrow1a (pts (xy 184.15 115.57) (xy 183.02478 116.1542)))
+ (arrow1b (pts (xy 184.15 115.57) (xy 183.02478 114.9858)))
+ (arrow2a (pts (xy 102.87 115.57) (xy 103.99522 116.1542)))
+ (arrow2b (pts (xy 102.87 115.57) (xy 103.99522 114.9858)))
+ )
+ (gr_line (start 184.15 110.49) (end 179.07 110.49) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 184.15 97.79) (end 184.15 110.49) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 184.15 67.31) (end 184.15 83.185) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 179.07 67.31) (end 184.15 67.31) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_text TMS-PROG (at 158.115 102.235) (layer Dessus)
+ (effects (font (thickness 0.381)))
+ )
+ (gr_text TCK-CCL (at 158.115 96.52) (layer Dessus)
+ (effects (font (thickness 0.381)))
+ )
+ (gr_text TDI-TIN (at 158.115 91.44) (layer Dessus)
+ (effects (font (thickness 0.381)))
+ )
+ (gr_text TDO-DONE (at 158.115 86.36) (layer Dessus)
+ (effects (font (thickness 0.381)))
+ )
+ (gr_text VCC (at 162.56 76.2) (layer Dessus)
+ (effects (font (thickness 0.381)))
+ )
+ (gr_text GND (at 162.56 81.28) (layer Dessus)
+ (effects (font (thickness 0.381)))
+ )
+ (gr_text "Component Side" (at 121.92 69.85) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text "Copper layer" (at 119.38 68.58) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_line (start 102.87 110.49) (end 102.87 106.68) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 179.07 110.49) (end 102.87 110.49) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 102.87 67.31) (end 179.07 67.31) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 102.87 71.12) (end 102.87 67.31) (angle 90) (layer Edge.Cuts) (width 0.3048))
+
+ (segment (start 110.49 78.74) (end 109.855 78.105) (width 0.635) (layer Dessus) (net 1))
+ (segment (start 109.855 78.105) (end 106.045 78.105) (width 0.635) (layer Dessus) (net 1))
+ (segment (start 111.76 78.74) (end 110.49 78.74) (width 0.635) (layer Dessus) (net 1) (status 800))
+ (segment (start 106.045 78.105) (end 105.537 77.978) (width 0.635) (layer Dessus) (net 1) (status 400))
+ (segment (start 109.22 83.82) (end 105.41 83.82) (width 0.635) (layer Dessus) (net 2))
+ (segment (start 109.855 85.725) (end 109.855 84.455) (width 0.635) (layer Dessus) (net 2))
+ (segment (start 110.49 86.36) (end 109.855 85.725) (width 0.635) (layer Dessus) (net 2))
+ (segment (start 105.41 83.82) (end 105.537 83.439) (width 0.635) (layer Dessus) (net 2) (status 400))
+ (segment (start 111.76 86.36) (end 110.49 86.36) (width 0.635) (layer Dessus) (net 2) (status 800))
+ (segment (start 109.855 84.455) (end 109.22 83.82) (width 0.635) (layer Dessus) (net 2))
+ (segment (start 111.125 105.41) (end 105.537 105.41) (width 0.635) (layer Dessus) (net 3) (status 400))
+ (segment (start 111.76 104.775) (end 111.125 105.41) (width 0.635) (layer Dessus) (net 3))
+ (segment (start 111.76 104.14) (end 111.76 104.775) (width 0.635) (layer Dessus) (net 3) (status 800))
+ (segment (start 181.61 76.835) (end 181.61 84.582) (width 1.016) (layer Dessous) (net 4) (status 400))
+ (segment (start 162.56 78.74) (end 165.1 76.2) (width 1.016) (layer Dessous) (net 4))
+ (segment (start 160.02 78.74) (end 162.56 78.74) (width 1.016) (layer Dessous) (net 4) (status 800))
+ (segment (start 170.18 76.2) (end 180.975 76.2) (width 1.016) (layer Dessous) (net 4) (status 800))
+ (segment (start 181.61 76.835) (end 180.975 76.2) (width 1.016) (layer Dessous) (net 4))
+ (segment (start 165.1 76.2) (end 170.18 76.2) (width 1.016) (layer Dessous) (net 4) (status 400))
+ (segment (start 165.1 96.52) (end 170.18 96.52) (width 0.635) (layer Dessous) (net 5) (status 400))
+ (segment (start 173.99 93.345) (end 174.625 92.71) (width 0.635) (layer Dessous) (net 5))
+ (segment (start 170.18 96.52) (end 172.72 96.52) (width 0.635) (layer Dessous) (net 5) (status 800))
+ (segment (start 181.61 92.71) (end 181.61 92.964) (width 0.635) (layer Dessous) (net 5) (status 400))
+ (segment (start 162.56 99.06) (end 165.1 96.52) (width 0.635) (layer Dessous) (net 5) (status 800))
+ (segment (start 172.72 96.52) (end 173.99 95.25) (width 0.635) (layer Dessous) (net 5))
+ (segment (start 173.99 95.25) (end 173.99 93.345) (width 0.635) (layer Dessous) (net 5))
+ (segment (start 174.625 92.71) (end 181.61 92.71) (width 0.635) (layer Dessous) (net 5))
+ (segment (start 180.975 86.995) (end 181.61 87.376) (width 0.635) (layer Dessous) (net 6) (status 400))
+ (segment (start 163.195 86.36) (end 170.18 86.36) (width 0.635) (layer Dessous) (net 6) (status 400))
+ (segment (start 170.18 86.36) (end 177.8 86.36) (width 0.635) (layer Dessous) (net 6) (status 800))
+ (segment (start 162.56 86.995) (end 163.195 86.36) (width 0.635) (layer Dessous) (net 6))
+ (segment (start 178.435 86.995) (end 180.975 86.995) (width 0.635) (layer Dessous) (net 6))
+ (segment (start 162.56 88.9) (end 162.56 86.995) (width 0.635) (layer Dessous) (net 6) (status 800))
+ (segment (start 177.8 86.36) (end 178.435 86.995) (width 0.635) (layer Dessous) (net 6))
+ (segment (start 107.95 86.233) (end 109.982 88.265) (width 0.635) (layer Dessus) (net 7))
+ (segment (start 109.982 88.265) (end 113.665 88.265) (width 0.635) (layer Dessus) (net 7))
+ (segment (start 113.665 88.265) (end 114.3 87.63) (width 0.635) (layer Dessus) (net 7))
+ (segment (start 114.3 87.63) (end 114.3 84.455) (width 0.635) (layer Dessus) (net 7))
+ (segment (start 105.537 86.233) (end 107.95 86.233) (width 0.635) (layer Dessus) (net 7) (status 800))
+ (segment (start 113.665 83.82) (end 111.76 83.82) (width 0.635) (layer Dessus) (net 7) (status 400))
+ (segment (start 114.3 84.455) (end 113.665 83.82) (width 0.635) (layer Dessus) (net 7))
+ (segment (start 170.18 91.44) (end 173.99 91.44) (width 0.635) (layer Dessous) (net 8) (status 800))
+ (segment (start 165.1 91.44) (end 170.18 91.44) (width 0.635) (layer Dessous) (net 8) (status 400))
+ (segment (start 162.56 93.98) (end 165.1 91.44) (width 0.635) (layer Dessous) (net 8) (status 800))
+ (segment (start 173.99 91.44) (end 175.26 90.17) (width 0.635) (layer Dessous) (net 8))
+ (segment (start 175.26 90.17) (end 181.61 90.17) (width 0.635) (layer Dessous) (net 8) (status 400))
+ (segment (start 114.935 92.71) (end 116.205 91.44) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 106.045 75.565) (end 105.537 75.184) (width 0.635) (layer Dessus) (net 9) (status 400))
+ (segment (start 111.76 92.71) (end 114.935 92.71) (width 0.635) (layer Dessus) (net 9) (status 800))
+ (segment (start 116.205 74.93) (end 115.57 74.295) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 106.045 74.93) (end 106.045 75.565) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 115.57 74.295) (end 109.22 74.295) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 108.585 74.93) (end 106.045 74.93) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 109.22 74.295) (end 108.585 74.93) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 116.205 91.44) (end 116.205 74.93) (width 0.635) (layer Dessus) (net 9))
+ (segment (start 178.435 95.885) (end 181.61 95.885) (width 0.635) (layer Dessous) (net 10))
+ (segment (start 170.18 104.775) (end 170.18 101.6) (width 0.635) (layer Dessous) (net 10) (status 400))
+ (segment (start 172.72 101.6) (end 178.435 95.885) (width 0.635) (layer Dessous) (net 10))
+ (segment (start 170.18 101.6) (end 172.72 101.6) (width 0.635) (layer Dessous) (net 10) (status 800))
+ (segment (start 162.56 105.41) (end 169.545 105.41) (width 0.635) (layer Dessous) (net 10) (status 800))
+ (segment (start 181.61 95.885) (end 181.61 95.758) (width 0.635) (layer Dessous) (net 10) (status 400))
+ (segment (start 169.545 105.41) (end 170.18 104.775) (width 0.635) (layer Dessous) (net 10))
+ (segment (start 109.855 80.645) (end 106.045 80.645) (width 0.635) (layer Dessus) (net 11))
+ (segment (start 111.76 81.28) (end 110.49 81.28) (width 0.635) (layer Dessus) (net 11) (status 800))
+ (segment (start 106.045 80.645) (end 105.537 80.772) (width 0.635) (layer Dessus) (net 11) (status 400))
+ (segment (start 110.49 81.28) (end 109.855 80.645) (width 0.635) (layer Dessus) (net 11))
+ (segment (start 111.76 76.2) (end 106.045 76.2) (width 0.635) (layer Dessous) (net 12) (status 800))
+ (segment (start 106.045 76.2) (end 105.537 76.581) (width 0.635) (layer Dessous) (net 12) (status 400))
+ (segment (start 148.59 85.09) (end 154.305 85.09) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 149.86 92.71) (end 148.59 92.71) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 148.59 95.25) (end 148.59 92.71) (width 1.016) (layer Dessous) (net 13) (status C00))
+ (segment (start 148.59 87.63) (end 148.59 85.09) (width 1.016) (layer Dessous) (net 13) (status C00))
+ (segment (start 155.575 71.755) (end 156.21 71.12) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 156.21 71.12) (end 156.21 69.85) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 147.32 76.2) (end 149.225 74.295) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 140.97 76.835) (end 141.605 76.2) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 150.495 92.075) (end 149.86 92.71) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 154.305 92.075) (end 150.495 92.075) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 154.94 85.725) (end 154.94 91.44) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 154.305 85.09) (end 154.94 85.725) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 140.97 82.55) (end 140.97 76.835) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 141.605 76.2) (end 147.32 76.2) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 140.97 92.71) (end 144.78 92.71) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 140.97 97.79) (end 144.145 97.79) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 144.78 92.71) (end 148.59 92.71) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 140.97 92.71) (end 140.97 90.17) (width 1.016) (layer Dessous) (net 13) (status C00))
+ (segment (start 144.145 97.79) (end 144.78 97.155) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 149.225 72.39) (end 149.86 71.755) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 149.225 74.295) (end 149.225 72.39) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 146.05 85.09) (end 143.51 82.55) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 143.51 82.55) (end 140.97 82.55) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (via (at 177.8 81.28) (size 1.778) (layers Dessus Dessous) (net 13))
+ (segment (start 177.8 81.28) (end 180.975 81.28) (width 1.016) (layer Dessus) (net 13))
+ (segment (start 180.975 81.28) (end 181.61 81.915) (width 1.016) (layer Dessus) (net 13))
+ (segment (start 170.18 81.28) (end 177.8 81.28) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 181.61 85.979) (end 181.61 81.915) (width 1.016) (layer Dessus) (net 13) (status 800))
+ (segment (start 181.61 88.773) (end 181.61 85.979) (width 1.016) (layer Dessus) (net 13) (status C00))
+ (segment (start 181.61 91.567) (end 181.61 88.773) (width 1.016) (layer Dessus) (net 13) (status C00))
+ (segment (start 181.61 94.361) (end 181.61 91.567) (width 1.016) (layer Dessus) (net 13) (status C00))
+ (segment (start 154.94 91.44) (end 154.305 92.075) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 161.29 70.485) (end 161.29 73.66) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 156.21 69.85) (end 160.655 69.85) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 160.655 69.85) (end 161.29 70.485) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 170.18 81.28) (end 158.115 81.28) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 158.115 81.28) (end 157.48 80.645) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 158.115 73.66) (end 161.29 73.66) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 157.48 80.645) (end 157.48 74.295) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 157.48 74.295) (end 158.115 73.66) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 140.97 107.95) (end 144.78 107.95) (width 1.016) (layer Dessous) (net 13) (status C00))
+ (segment (start 144.78 107.95) (end 148.59 107.95) (width 1.016) (layer Dessous) (net 13) (status C00))
+ (segment (start 149.86 71.755) (end 155.575 71.755) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 156.845 107.95) (end 157.48 107.315) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 157.48 107.315) (end 157.48 80.645) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 148.59 107.95) (end 156.845 107.95) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 117.475 85.09) (end 116.84 85.725) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 116.84 85.725) (end 116.84 89.535) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 109.22 104.14) (end 109.22 107.315) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 109.855 107.95) (end 127 107.95) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 109.855 90.297) (end 109.855 90.17) (width 0.635) (layer Dessous) (net 13))
+ (segment (start 105.537 90.297) (end 109.855 90.297) (width 0.635) (layer Dessous) (net 13) (status 800))
+ (segment (start 109.22 104.013) (end 109.22 104.14) (width 0.635) (layer Dessous) (net 13))
+ (segment (start 105.537 104.013) (end 109.22 104.013) (width 0.635) (layer Dessous) (net 13) (status 800))
+ (segment (start 148.59 85.09) (end 146.05 85.09) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 109.22 90.805) (end 109.22 104.14) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 127 107.95) (end 140.97 107.95) (width 1.016) (layer Dessous) (net 13) (status 400))
+ (segment (start 109.22 107.315) (end 109.855 107.95) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 127 97.79) (end 127 107.95) (width 1.016) (layer Dessous) (net 13) (status 800))
+ (segment (start 127 85.09) (end 117.475 85.09) (width 0.4318) (layer Dessous) (net 13) (status 800))
+ (segment (start 144.78 97.155) (end 144.78 92.71) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 109.855 90.17) (end 109.22 90.805) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 116.205 90.17) (end 109.855 90.17) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 116.84 89.535) (end 116.205 90.17) (width 1.016) (layer Dessous) (net 13))
+ (segment (start 105.41 102.87) (end 105.537 102.616) (width 0.635) (layer Dessus) (net 14) (status 400))
+ (segment (start 109.22 102.87) (end 105.41 102.87) (width 0.635) (layer Dessus) (net 14))
+ (segment (start 105.537 99.949) (end 109.855 99.949) (width 0.635) (layer Dessus) (net 14) (status 800))
+ (segment (start 109.855 99.949) (end 109.855 100.33) (width 0.635) (layer Dessus) (net 14))
+ (segment (start 109.855 100.33) (end 109.855 102.235) (width 0.635) (layer Dessus) (net 14))
+ (segment (start 109.855 102.235) (end 109.22 102.87) (width 0.635) (layer Dessus) (net 14))
+ (segment (start 109.855 92.329) (end 109.855 100.33) (width 0.635) (layer Dessus) (net 14))
+ (segment (start 105.537 91.694) (end 109.22 91.694) (width 0.635) (layer Dessus) (net 14) (status 800))
+ (segment (start 109.22 91.694) (end 109.855 92.329) (width 0.635) (layer Dessus) (net 14))
+ (segment (start 121.92 73.025) (end 122.555 72.39) (width 0.635) (layer Dessous) (net 15))
+ (segment (start 121.92 76.2) (end 121.92 73.025) (width 0.635) (layer Dessous) (net 15) (status 800))
+ (segment (start 122.555 72.39) (end 127 72.39) (width 0.635) (layer Dessous) (net 15) (status 400))
+ (segment (start 140.97 87.63) (end 139.065 89.535) (width 0.635) (layer Dessous) (net 16) (status 800))
+ (segment (start 135.255 104.14) (end 121.92 104.14) (width 0.635) (layer Dessus) (net 16) (status 400))
+ (segment (start 139.065 89.535) (end 139.065 100.33) (width 0.635) (layer Dessous) (net 16))
+ (segment (start 139.065 100.33) (end 135.255 104.14) (width 0.635) (layer Dessus) (net 16))
+ (via (at 139.065 100.33) (size 1.778) (layers Dessus Dessous) (net 16))
+ (segment (start 121.92 92.71) (end 127 92.71) (width 0.635) (layer Dessous) (net 17) (status C00))
+ (segment (start 132.08 83.185) (end 132.715 83.82) (width 0.635) (layer Dessous) (net 18))
+ (segment (start 136.525 83.82) (end 137.795 85.09) (width 0.635) (layer Dessous) (net 18))
+ (segment (start 137.795 94.615) (end 137.795 85.09) (width 0.635) (layer Dessous) (net 18))
+ (segment (start 131.445 78.74) (end 132.08 79.375) (width 0.635) (layer Dessous) (net 18))
+ (segment (start 132.08 79.375) (end 132.08 83.185) (width 0.635) (layer Dessous) (net 18))
+ (segment (start 137.795 94.615) (end 137.16 95.25) (width 0.635) (layer Dessous) (net 18))
+ (segment (start 137.16 95.25) (end 134.62 95.25) (width 0.635) (layer Dessous) (net 18) (status 400))
+ (segment (start 121.92 78.74) (end 131.445 78.74) (width 0.635) (layer Dessous) (net 18) (status 800))
+ (segment (start 132.715 83.82) (end 136.525 83.82) (width 0.4318) (layer Dessous) (net 18))
+ (segment (start 125.73 82.55) (end 127 82.55) (width 0.635) (layer Dessous) (net 19) (status 400))
+ (segment (start 121.92 83.82) (end 124.46 83.82) (width 0.635) (layer Dessous) (net 19) (status 800))
+ (segment (start 124.46 83.82) (end 125.73 82.55) (width 0.635) (layer Dessous) (net 19))
+ (segment (start 130.81 81.915) (end 129.54 80.645) (width 0.635) (layer Dessous) (net 20))
+ (segment (start 129.54 80.645) (end 124.46 80.645) (width 0.635) (layer Dessous) (net 20))
+ (segment (start 131.445 87.63) (end 134.62 87.63) (width 0.635) (layer Dessous) (net 20) (status 400))
+ (segment (start 130.81 86.995) (end 130.81 81.915) (width 0.635) (layer Dessous) (net 20))
+ (segment (start 131.445 87.63) (end 130.81 86.995) (width 0.635) (layer Dessous) (net 20))
+ (segment (start 121.92 81.28) (end 123.825 81.28) (width 0.635) (layer Dessous) (net 20) (status 800))
+ (segment (start 123.825 81.28) (end 124.46 80.645) (width 0.635) (layer Dessous) (net 20))
+ (segment (start 121.92 89.535) (end 122.555 90.17) (width 0.635) (layer Dessous) (net 21))
+ (segment (start 131.445 88.9) (end 135.89 88.9) (width 0.4318) (layer Dessous) (net 21))
+ (segment (start 130.175 90.17) (end 132.715 92.71) (width 0.635) (layer Dessous) (net 21))
+ (segment (start 136.525 88.265) (end 136.525 85.725) (width 0.635) (layer Dessous) (net 21))
+ (segment (start 135.89 85.09) (end 136.525 85.725) (width 0.635) (layer Dessous) (net 21))
+ (segment (start 121.92 86.36) (end 121.92 89.535) (width 0.635) (layer Dessous) (net 21) (status 800))
+ (segment (start 130.175 90.17) (end 131.445 88.9) (width 0.635) (layer Dessous) (net 21))
+ (segment (start 132.715 92.71) (end 134.62 92.71) (width 0.635) (layer Dessous) (net 21) (status 400))
+ (segment (start 122.555 90.17) (end 127 90.17) (width 0.635) (layer Dessous) (net 21) (status 400))
+ (segment (start 135.89 85.09) (end 134.62 85.09) (width 0.635) (layer Dessous) (net 21) (status 400))
+ (segment (start 135.89 88.9) (end 136.525 88.265) (width 0.635) (layer Dessous) (net 21))
+ (segment (start 127 90.17) (end 130.175 90.17) (width 0.635) (layer Dessous) (net 21) (status 800))
+ (segment (start 125.73 96.52) (end 128.905 96.52) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 125.095 94.615) (end 125.095 95.885) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 151.765 102.87) (end 152.4 103.505) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 128.905 96.52) (end 129.54 96.52) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 130.81 104.775) (end 132.08 106.045) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 130.81 97.79) (end 130.81 104.775) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 129.54 96.52) (end 130.81 97.79) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 125.73 96.52) (end 125.095 95.885) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 152.4 103.505) (end 152.4 105.41) (width 0.635) (layer Dessous) (net 22) (status 400))
+ (segment (start 148.59 102.87) (end 151.765 102.87) (width 0.635) (layer Dessous) (net 22) (status 800))
+ (segment (start 136.525 93.345) (end 135.89 93.98) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 136.525 90.805) (end 136.525 93.345) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 132.08 106.045) (end 145.415 106.045) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 135.89 90.17) (end 136.525 90.805) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 145.415 106.045) (end 146.685 104.775) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 135.89 93.98) (end 125.73 93.98) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 125.73 93.98) (end 125.095 94.615) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 134.62 90.17) (end 135.89 90.17) (width 0.635) (layer Dessous) (net 22) (status 800))
+ (segment (start 147.32 102.87) (end 148.59 102.87) (width 0.635) (layer Dessous) (net 22) (status 400))
+ (segment (start 146.685 103.505) (end 147.32 102.87) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 146.685 104.775) (end 146.685 103.505) (width 0.635) (layer Dessous) (net 22))
+ (segment (start 137.795 97.155) (end 137.795 99.06) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 137.16 96.52) (end 137.795 97.155) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 132.08 96.52) (end 137.16 96.52) (width 0.4318) (layer Dessous) (net 23))
+ (segment (start 140.97 102.87) (end 144.145 99.695) (width 0.635) (layer Dessous) (net 23) (status 800))
+ (segment (start 127 95.25) (end 130.81 95.25) (width 0.635) (layer Dessous) (net 23) (status 800))
+ (segment (start 130.81 95.25) (end 132.08 96.52) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 137.795 102.87) (end 140.97 102.87) (width 0.635) (layer Dessous) (net 23) (status 400))
+ (segment (start 152.4 96.52) (end 152.4 93.98) (width 0.635) (layer Dessous) (net 23) (status 400))
+ (segment (start 150.495 98.425) (end 152.4 96.52) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 137.795 99.06) (end 137.16 99.695) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 144.145 99.695) (end 149.86 99.695) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 137.16 102.235) (end 137.795 102.87) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 149.86 99.695) (end 150.495 99.06) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 150.495 99.06) (end 150.495 98.425) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 137.16 99.695) (end 137.16 102.235) (width 0.635) (layer Dessous) (net 23))
+ (segment (start 152.4 100.33) (end 152.4 99.06) (width 0.635) (layer Dessous) (net 24) (status 400))
+ (segment (start 151.765 100.965) (end 152.4 100.33) (width 0.635) (layer Dessous) (net 24))
+ (segment (start 144.145 104.775) (end 144.78 104.14) (width 0.635) (layer Dessous) (net 24))
+ (segment (start 134.62 104.14) (end 135.255 104.775) (width 0.635) (layer Dessous) (net 24))
+ (segment (start 135.255 104.775) (end 144.145 104.775) (width 0.635) (layer Dessous) (net 24))
+ (segment (start 146.685 100.965) (end 151.765 100.965) (width 0.635) (layer Dessous) (net 24))
+ (segment (start 144.78 102.87) (end 146.685 100.965) (width 0.635) (layer Dessous) (net 24) (status 800))
+ (segment (start 144.78 104.14) (end 144.78 102.87) (width 0.635) (layer Dessous) (net 24) (status 400))
+ (segment (start 134.62 97.79) (end 134.62 104.14) (width 0.635) (layer Dessous) (net 24) (status 800))
+ (segment (start 127 87.63) (end 124.46 87.63) (width 0.635) (layer Dessous) (net 25) (status 800))
+ (segment (start 152.4 88.9) (end 145.415 88.9) (width 0.4318) (layer Dessous) (net 25) (status 800))
+ (segment (start 144.145 77.47) (end 144.145 74.93) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 147.32 72.39) (end 147.32 70.485) (width 0.635) (layer Dessous) (net 25) (status 800))
+ (segment (start 143.51 78.105) (end 144.145 77.47) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 142.24 72.39) (end 147.32 72.39) (width 0.635) (layer Dessous) (net 25) (status 400))
+ (segment (start 138.43 83.82) (end 138.43 76.2) (width 0.635) (layer Dessous) (net 25))
+ (via (at 124.46 87.63) (size 1.778) (layers Dessus Dessous) (net 25))
+ (segment (start 145.415 88.9) (end 144.78 88.265) (width 0.635) (layer Dessous) (net 25))
+ (segment (start 144.78 86.36) (end 143.51 85.09) (width 0.635) (layer Dessous) (net 25))
+ (segment (start 144.145 74.93) (end 144.78 74.295) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 147.32 70.485) (end 147.955 69.85) (width 0.635) (layer Dessous) (net 25))
+ (segment (start 144.78 88.265) (end 144.78 86.36) (width 0.635) (layer Dessous) (net 25))
+ (segment (start 146.685 74.295) (end 147.32 73.66) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 143.51 85.09) (end 140.97 85.09) (width 0.635) (layer Dessous) (net 25) (status 400))
+ (segment (start 124.46 87.63) (end 124.46 80.01) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 147.32 73.66) (end 147.32 72.39) (width 0.635) (layer Dessus) (net 25) (status 400))
+ (segment (start 147.955 69.85) (end 151.13 69.85) (width 0.635) (layer Dessous) (net 25) (status 400))
+ (segment (start 139.7 85.09) (end 138.43 83.82) (width 0.635) (layer Dessous) (net 25))
+ (segment (start 140.97 85.09) (end 139.7 85.09) (width 0.635) (layer Dessous) (net 25) (status 800))
+ (segment (start 144.78 74.295) (end 146.685 74.295) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 138.43 76.2) (end 142.24 72.39) (width 0.635) (layer Dessous) (net 25))
+ (segment (start 126.365 78.105) (end 143.51 78.105) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 124.46 80.01) (end 126.365 78.105) (width 0.635) (layer Dessus) (net 25))
+ (segment (start 137.16 72.39) (end 142.875 72.39) (width 1.016) (layer Dessus) (net 26) (status 800))
+ (segment (start 142.875 72.39) (end 145.415 69.85) (width 1.016) (layer Dessus) (net 26))
+ (segment (start 149.86 73.025) (end 150.495 73.66) (width 1.016) (layer Dessus) (net 26))
+ (segment (start 148.59 69.85) (end 149.86 71.12) (width 1.016) (layer Dessus) (net 26))
+ (segment (start 151.13 78.74) (end 152.4 78.74) (width 1.016) (layer Dessous) (net 26) (status 400))
+ (segment (start 145.415 69.85) (end 148.59 69.85) (width 1.016) (layer Dessus) (net 26))
+ (segment (start 150.495 73.66) (end 151.13 73.66) (width 1.016) (layer Dessus) (net 26) (status 400))
+ (segment (start 148.59 82.55) (end 148.59 79.375) (width 1.016) (layer Dessous) (net 26) (status 800))
+ (segment (start 134.62 76.2) (end 134.62 72.39) (width 1.016) (layer Dessous) (net 26) (status C00))
+ (segment (start 149.225 78.74) (end 151.13 78.74) (width 1.016) (layer Dessous) (net 26))
+ (segment (start 137.16 72.39) (end 134.62 72.39) (width 1.016) (layer Dessous) (net 26) (status C00))
+ (segment (start 151.13 73.66) (end 151.13 78.74) (width 1.016) (layer Dessous) (net 26) (status 800))
+ (segment (start 149.86 71.12) (end 149.86 73.025) (width 1.016) (layer Dessus) (net 26))
+ (segment (start 148.59 79.375) (end 149.225 78.74) (width 1.016) (layer Dessous) (net 26))
+ (segment (start 134.62 82.55) (end 134.62 76.2) (width 1.016) (layer Dessous) (net 26) (status C00))
+
+ (zone (net 13) (net_name GND) (layer Dessous) (tstamp 4BF0F951) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 182.88 109.22) (xy 182.88 68.58) (xy 105.41 68.58) (xy 105.41 109.22)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 130.732962 88.265) (xy 129.780462 89.2175) (xy 128.431828 89.2175) (xy 128.396222 89.164211) (xy 128.000801 88.899999)
+ (xy 128.396222 88.635789) (xy 128.704559 88.174329) (xy 128.812833 87.63) (xy 128.704559 87.085671) (xy 128.396222 86.624211)
+ (xy 128.00117 86.360246) (xy 128.017262 86.355525) (xy 128.451191 86.005986) (xy 128.718327 85.516996) (xy 128.73501 85.43706)
+ (xy 128.612852 85.217) (xy 127.127 85.217) (xy 127.127 85.237) (xy 126.873 85.237) (xy 126.873 85.217)
+ (xy 125.387148 85.217) (xy 125.26499 85.43706) (xy 125.281673 85.516996) (xy 125.548809 86.005986) (xy 125.982738 86.355525)
+ (xy 125.998829 86.360246) (xy 125.607119 86.621978) (xy 125.324404 86.338769) (xy 124.764472 86.106265) (xy 124.158188 86.105736)
+ (xy 123.597851 86.337262) (xy 123.316775 86.617847) (xy 123.317242 86.083339) (xy 123.10501 85.569697) (xy 122.71237 85.176371)
+ (xy 122.504487 85.09005) (xy 122.710303 85.00501) (xy 122.943219 84.7725) (xy 124.46 84.7725) (xy 124.824506 84.699995)
+ (xy 125.133519 84.493519) (xy 125.676913 83.950124) (xy 125.73069 83.9724) (xy 125.799099 83.9724) (xy 125.548809 84.174014)
+ (xy 125.281673 84.663004) (xy 125.26499 84.74294) (xy 125.387148 84.963) (xy 126.873 84.963) (xy 126.873 84.943)
+ (xy 127.127 84.943) (xy 127.127 84.963) (xy 128.612852 84.963) (xy 128.73501 84.74294) (xy 128.718327 84.663004)
+ (xy 128.451191 84.174014) (xy 128.2009 83.9724) (xy 128.269309 83.9724) (xy 128.502698 83.875727) (xy 128.681327 83.697099)
+ (xy 128.778 83.46371) (xy 128.778 83.211091) (xy 128.778 81.636291) (xy 128.761932 81.5975) (xy 129.145462 81.5975)
+ (xy 129.8575 82.309538) (xy 129.8575 86.995) (xy 129.930005 87.359506) (xy 130.136481 87.668519) (xy 130.732962 88.265)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 182.753 109.093) (xy 157.555927 109.093) (xy 157.555927 70.04252) (xy 157.527148 69.512801) (xy 157.3798 69.157071)
+ (xy 157.144188 69.095417) (xy 156.389605 69.85) (xy 157.144188 70.604583) (xy 157.3798 70.542929) (xy 157.555927 70.04252)
+ (xy 157.555927 109.093) (xy 156.964583 109.093) (xy 156.964583 70.784188) (xy 156.21 70.029605) (xy 156.030395 70.20921)
+ (xy 156.030395 69.85) (xy 155.275812 69.095417) (xy 155.0402 69.157071) (xy 154.864073 69.65748) (xy 154.892852 70.187199)
+ (xy 155.0402 70.542929) (xy 155.275812 70.604583) (xy 156.030395 69.85) (xy 156.030395 70.20921) (xy 155.455417 70.784188)
+ (xy 155.517071 71.0198) (xy 156.01748 71.195927) (xy 156.547199 71.167148) (xy 156.902929 71.0198) (xy 156.964583 70.784188)
+ (xy 156.964583 109.093) (xy 149.935927 109.093) (xy 149.935927 108.14252) (xy 149.907148 107.612801) (xy 149.7598 107.257071)
+ (xy 149.524188 107.195417) (xy 149.344583 107.375022) (xy 149.344583 107.015812) (xy 149.282929 106.7802) (xy 148.78252 106.604073)
+ (xy 148.252801 106.632852) (xy 147.897071 106.7802) (xy 147.835417 107.015812) (xy 148.59 107.770395) (xy 149.344583 107.015812)
+ (xy 149.344583 107.375022) (xy 148.769605 107.95) (xy 149.524188 108.704583) (xy 149.7598 108.642929) (xy 149.935927 108.14252)
+ (xy 149.935927 109.093) (xy 149.289941 109.093) (xy 149.344583 108.884188) (xy 148.59 108.129605) (xy 148.410395 108.30921)
+ (xy 148.410395 107.95) (xy 147.655812 107.195417) (xy 147.4202 107.257071) (xy 147.244073 107.75748) (xy 147.272852 108.287199)
+ (xy 147.4202 108.642929) (xy 147.655812 108.704583) (xy 148.410395 107.95) (xy 148.410395 108.30921) (xy 147.835417 108.884188)
+ (xy 147.890058 109.093) (xy 146.125927 109.093) (xy 146.125927 108.14252) (xy 146.097148 107.612801) (xy 145.9498 107.257071)
+ (xy 145.714188 107.195417) (xy 144.959605 107.95) (xy 145.714188 108.704583) (xy 145.9498 108.642929) (xy 146.125927 108.14252)
+ (xy 146.125927 109.093) (xy 145.479941 109.093) (xy 145.534583 108.884188) (xy 144.78 108.129605) (xy 144.600395 108.30921)
+ (xy 144.025417 108.884188) (xy 144.080058 109.093) (xy 142.315927 109.093) (xy 141.669941 109.093) (xy 141.724583 108.884188)
+ (xy 140.97 108.129605) (xy 140.790395 108.30921) (xy 140.215417 108.884188) (xy 140.270058 109.093) (xy 128.73501 109.093)
+ (xy 128.73501 98.13706) (xy 128.612852 97.917) (xy 127.127 97.917) (xy 127.127 99.2124) (xy 127.4826 99.2124)
+ (xy 128.017262 99.055525) (xy 128.451191 98.705986) (xy 128.718327 98.216996) (xy 128.73501 98.13706) (xy 128.73501 109.093)
+ (xy 126.873 109.093) (xy 126.873 99.2124) (xy 126.873 97.917) (xy 125.387148 97.917) (xy 125.26499 98.13706)
+ (xy 125.281673 98.216996) (xy 125.548809 98.705986) (xy 125.982738 99.055525) (xy 126.5174 99.2124) (xy 126.873 99.2124)
+ (xy 126.873 109.093) (xy 123.317242 109.093) (xy 123.317242 103.863339) (xy 123.10501 103.349697) (xy 122.71237 102.956371)
+ (xy 122.1991 102.743243) (xy 121.643339 102.742758) (xy 121.129697 102.95499) (xy 120.736371 103.34763) (xy 120.523243 103.8609)
+ (xy 120.522758 104.416661) (xy 120.73499 104.930303) (xy 121.12763 105.323629) (xy 121.6409 105.536757) (xy 122.196661 105.537242)
+ (xy 122.710303 105.32501) (xy 123.103629 104.93237) (xy 123.316757 104.4191) (xy 123.317242 103.863339) (xy 123.317242 109.093)
+ (xy 113.157242 109.093) (xy 113.157242 103.863339) (xy 113.157242 92.433339) (xy 112.94501 91.919697) (xy 112.55237 91.526371)
+ (xy 112.0391 91.313243) (xy 111.483339 91.312758) (xy 110.969697 91.52499) (xy 110.576371 91.91763) (xy 110.363243 92.4309)
+ (xy 110.362758 92.986661) (xy 110.57499 93.500303) (xy 110.96763 93.893629) (xy 111.4809 94.106757) (xy 112.036661 94.107242)
+ (xy 112.550303 93.89501) (xy 112.943629 93.50237) (xy 113.156757 92.9891) (xy 113.157242 92.433339) (xy 113.157242 103.863339)
+ (xy 112.94501 103.349697) (xy 112.55237 102.956371) (xy 112.0391 102.743243) (xy 111.483339 102.742758) (xy 110.969697 102.95499)
+ (xy 110.576371 103.34763) (xy 110.363243 103.8609) (xy 110.362758 104.416661) (xy 110.57499 104.930303) (xy 110.96763 105.323629)
+ (xy 111.4809 105.536757) (xy 112.036661 105.537242) (xy 112.550303 105.32501) (xy 112.943629 104.93237) (xy 113.156757 104.4191)
+ (xy 113.157242 103.863339) (xy 113.157242 109.093) (xy 108.712 109.093) (xy 108.712 104.90131) (xy 108.712 104.648691)
+ (xy 108.712 104.29875) (xy 108.55325 104.14) (xy 105.664 104.14) (xy 105.664 105.25125) (xy 105.82275 105.41)
+ (xy 108.203309 105.41) (xy 108.436698 105.313327) (xy 108.615327 105.134699) (xy 108.712 104.90131) (xy 108.712 109.093)
+ (xy 105.537 109.093) (xy 105.537 103.866) (xy 105.664 103.866) (xy 105.664 103.886) (xy 108.55325 103.886)
+ (xy 108.712 103.72725) (xy 108.712 103.377309) (xy 108.712 103.12469) (xy 108.615327 102.891301) (xy 108.436698 102.712673)
+ (xy 108.356611 102.6795) (xy 108.436698 102.646327) (xy 108.615327 102.467699) (xy 108.712 102.23431) (xy 108.712 101.981691)
+ (xy 108.712 100.457691) (xy 108.615327 100.224302) (xy 108.436699 100.045673) (xy 108.20331 99.949) (xy 108.203309 99.949)
+ (xy 108.436698 99.852327) (xy 108.615327 99.673699) (xy 108.712 99.44031) (xy 108.712 99.187691) (xy 108.712 97.663691)
+ (xy 108.615327 97.430302) (xy 108.436699 97.251673) (xy 108.20331 97.155) (xy 108.203309 97.155) (xy 108.436698 97.058327)
+ (xy 108.615327 96.879699) (xy 108.712 96.64631) (xy 108.712 96.393691) (xy 108.712 94.869691) (xy 108.615327 94.636302)
+ (xy 108.436699 94.457673) (xy 108.356611 94.424499) (xy 108.436698 94.391327) (xy 108.615327 94.212699) (xy 108.712 93.97931)
+ (xy 108.712 93.726691) (xy 108.712 92.202691) (xy 108.615327 91.969302) (xy 108.436699 91.790673) (xy 108.20331 91.694)
+ (xy 108.203309 91.694) (xy 108.436698 91.597327) (xy 108.615327 91.418699) (xy 108.712 91.18531) (xy 108.712 90.932691)
+ (xy 108.712 90.58275) (xy 108.55325 90.424) (xy 105.664 90.424) (xy 105.664 90.444) (xy 105.537 90.444)
+ (xy 105.537 90.15) (xy 105.664 90.15) (xy 105.664 90.17) (xy 108.55325 90.17) (xy 108.712 90.01125)
+ (xy 108.712 89.661309) (xy 108.712 89.40869) (xy 108.615327 89.175301) (xy 108.436698 88.996673) (xy 108.356611 88.9635)
+ (xy 108.436698 88.930327) (xy 108.615327 88.751699) (xy 108.712 88.51831) (xy 108.712 88.265691) (xy 108.712 86.741691)
+ (xy 108.615327 86.508302) (xy 108.436699 86.329673) (xy 108.20331 86.233) (xy 108.203309 86.233) (xy 108.436698 86.136327)
+ (xy 108.615327 85.957699) (xy 108.712 85.72431) (xy 108.712 85.471691) (xy 108.712 83.947691) (xy 108.615327 83.714302)
+ (xy 108.436699 83.535673) (xy 108.20331 83.439) (xy 108.203309 83.439) (xy 108.436698 83.342327) (xy 108.615327 83.163699)
+ (xy 108.712 82.93031) (xy 108.712 82.677691) (xy 108.712 81.153691) (xy 108.615327 80.920302) (xy 108.436699 80.741673)
+ (xy 108.356611 80.708499) (xy 108.436698 80.675327) (xy 108.615327 80.496699) (xy 108.712 80.26331) (xy 108.712 80.010691)
+ (xy 108.712 78.486691) (xy 108.615327 78.253302) (xy 108.436699 78.074673) (xy 108.20331 77.978) (xy 108.203309 77.978)
+ (xy 108.436698 77.881327) (xy 108.615327 77.702699) (xy 108.712 77.46931) (xy 108.712 77.216691) (xy 108.712 77.1525)
+ (xy 110.736904 77.1525) (xy 110.96763 77.383629) (xy 111.175512 77.469949) (xy 110.969697 77.55499) (xy 110.576371 77.94763)
+ (xy 110.363243 78.4609) (xy 110.362758 79.016661) (xy 110.57499 79.530303) (xy 110.96763 79.923629) (xy 111.175512 80.009949)
+ (xy 110.969697 80.09499) (xy 110.576371 80.48763) (xy 110.363243 81.0009) (xy 110.362758 81.556661) (xy 110.57499 82.070303)
+ (xy 110.96763 82.463629) (xy 111.175512 82.549949) (xy 110.969697 82.63499) (xy 110.576371 83.02763) (xy 110.363243 83.5409)
+ (xy 110.362758 84.096661) (xy 110.57499 84.610303) (xy 110.96763 85.003629) (xy 111.175512 85.089949) (xy 110.969697 85.17499)
+ (xy 110.576371 85.56763) (xy 110.363243 86.0809) (xy 110.362758 86.636661) (xy 110.57499 87.150303) (xy 110.96763 87.543629)
+ (xy 111.4809 87.756757) (xy 112.036661 87.757242) (xy 112.550303 87.54501) (xy 112.943629 87.15237) (xy 113.156757 86.6391)
+ (xy 113.157242 86.083339) (xy 112.94501 85.569697) (xy 112.55237 85.176371) (xy 112.344487 85.09005) (xy 112.550303 85.00501)
+ (xy 112.943629 84.61237) (xy 113.156757 84.0991) (xy 113.157242 83.543339) (xy 112.94501 83.029697) (xy 112.55237 82.636371)
+ (xy 112.344487 82.55005) (xy 112.550303 82.46501) (xy 112.943629 82.07237) (xy 113.156757 81.5591) (xy 113.157242 81.003339)
+ (xy 112.94501 80.489697) (xy 112.55237 80.096371) (xy 112.344487 80.01005) (xy 112.550303 79.92501) (xy 112.943629 79.53237)
+ (xy 113.156757 79.0191) (xy 113.157242 78.463339) (xy 112.94501 77.949697) (xy 112.55237 77.556371) (xy 112.344487 77.47005)
+ (xy 112.550303 77.38501) (xy 112.943629 76.99237) (xy 113.156757 76.4791) (xy 113.157242 75.923339) (xy 112.94501 75.409697)
+ (xy 112.55237 75.016371) (xy 112.0391 74.803243) (xy 111.483339 74.802758) (xy 110.969697 75.01499) (xy 110.73678 75.2475)
+ (xy 108.356612 75.2475) (xy 108.356611 75.247499) (xy 108.436698 75.214327) (xy 108.615327 75.035699) (xy 108.712 74.80231)
+ (xy 108.712 74.549691) (xy 108.712 73.025691) (xy 108.615327 72.792302) (xy 108.436699 72.613673) (xy 108.20331 72.517)
+ (xy 107.950691 72.517) (xy 105.537 72.517) (xy 105.537 68.707) (xy 111.262885 68.707) (xy 111.262885 70.4342)
+ (xy 127.497115 70.4342) (xy 127.497115 68.707) (xy 150.404308 68.707) (xy 150.37562 68.718854) (xy 150.196662 68.8975)
+ (xy 147.955 68.8975) (xy 147.590494 68.970005) (xy 147.281481 69.176481) (xy 146.646481 69.811481) (xy 146.440005 70.120494)
+ (xy 146.3675 70.485) (xy 146.3675 71.366904) (xy 146.29678 71.4375) (xy 142.24 71.4375) (xy 141.875494 71.510005)
+ (xy 141.566481 71.716481) (xy 137.756481 75.526481) (xy 137.550005 75.835494) (xy 137.4775 76.2) (xy 137.4775 83.425462)
+ (xy 137.198519 83.146481) (xy 136.889506 82.940005) (xy 136.525 82.8675) (xy 136.363279 82.899668) (xy 136.432833 82.55)
+ (xy 136.324559 82.005671) (xy 136.016222 81.544211) (xy 135.763 81.375013) (xy 135.763 77.352025) (xy 135.856827 77.258199)
+ (xy 135.9535 77.02481) (xy 135.9535 76.772191) (xy 135.9535 75.375191) (xy 135.856827 75.141802) (xy 135.763 75.047974)
+ (xy 135.763 73.533) (xy 136.327071 73.533) (xy 136.36763 73.573629) (xy 136.8809 73.786757) (xy 137.436661 73.787242)
+ (xy 137.950303 73.57501) (xy 138.343629 73.18237) (xy 138.556757 72.6691) (xy 138.557242 72.113339) (xy 138.34501 71.599697)
+ (xy 137.95237 71.206371) (xy 137.4391 70.993243) (xy 136.883339 70.992758) (xy 136.369697 71.20499) (xy 136.327613 71.247)
+ (xy 135.344628 71.247) (xy 134.886413 71.056732) (xy 134.355914 71.056269) (xy 133.86562 71.258854) (xy 133.490173 71.633647)
+ (xy 133.286732 72.123587) (xy 133.286269 72.654086) (xy 133.477 73.115691) (xy 133.477 75.047974) (xy 133.383173 75.141801)
+ (xy 133.2865 75.37519) (xy 133.2865 75.627809) (xy 133.2865 77.024809) (xy 133.383173 77.258198) (xy 133.477 77.352025)
+ (xy 133.477 81.375013) (xy 133.223778 81.544211) (xy 133.0325 81.830479) (xy 133.0325 79.375) (xy 132.959995 79.010495)
+ (xy 132.959995 79.010494) (xy 132.753519 78.701481) (xy 132.118519 78.066481) (xy 131.809506 77.860005) (xy 131.445 77.7875)
+ (xy 122.943095 77.7875) (xy 122.71237 77.556371) (xy 122.504487 77.47005) (xy 122.710303 77.38501) (xy 123.103629 76.99237)
+ (xy 123.316757 76.4791) (xy 123.317242 75.923339) (xy 123.10501 75.409697) (xy 122.8725 75.17678) (xy 122.8725 73.419538)
+ (xy 122.949538 73.3425) (xy 125.719391 73.3425) (xy 125.763173 73.448198) (xy 125.941801 73.626827) (xy 126.17519 73.7235)
+ (xy 126.427809 73.7235) (xy 127.824809 73.7235) (xy 128.058198 73.626827) (xy 128.236827 73.448199) (xy 128.3335 73.21481)
+ (xy 128.3335 72.962191) (xy 128.3335 71.565191) (xy 128.236827 71.331802) (xy 128.058199 71.153173) (xy 127.82481 71.0565)
+ (xy 127.572191 71.0565) (xy 126.175191 71.0565) (xy 125.941802 71.153173) (xy 125.763173 71.331801) (xy 125.71939 71.4375)
+ (xy 122.555 71.4375) (xy 122.190494 71.510005) (xy 121.881481 71.716481) (xy 121.246481 72.351481) (xy 121.040005 72.660494)
+ (xy 120.9675 73.025) (xy 120.9675 75.176904) (xy 120.736371 75.40763) (xy 120.523243 75.9209) (xy 120.522758 76.476661)
+ (xy 120.73499 76.990303) (xy 121.12763 77.383629) (xy 121.335512 77.469949) (xy 121.129697 77.55499) (xy 120.736371 77.94763)
+ (xy 120.523243 78.4609) (xy 120.522758 79.016661) (xy 120.73499 79.530303) (xy 121.12763 79.923629) (xy 121.335512 80.009949)
+ (xy 121.129697 80.09499) (xy 120.736371 80.48763) (xy 120.523243 81.0009) (xy 120.522758 81.556661) (xy 120.73499 82.070303)
+ (xy 121.12763 82.463629) (xy 121.335512 82.549949) (xy 121.129697 82.63499) (xy 120.736371 83.02763) (xy 120.523243 83.5409)
+ (xy 120.522758 84.096661) (xy 120.73499 84.610303) (xy 121.12763 85.003629) (xy 121.335512 85.089949) (xy 121.129697 85.17499)
+ (xy 120.736371 85.56763) (xy 120.523243 86.0809) (xy 120.522758 86.636661) (xy 120.73499 87.150303) (xy 120.9675 87.383219)
+ (xy 120.9675 89.535) (xy 121.040005 89.899506) (xy 121.246481 90.208519) (xy 121.881481 90.843519) (xy 122.190494 91.049995)
+ (xy 122.190495 91.049995) (xy 122.555 91.1225) (xy 125.568171 91.1225) (xy 125.603778 91.175789) (xy 125.999198 91.439999)
+ (xy 125.603778 91.704211) (xy 125.568171 91.7575) (xy 122.943095 91.7575) (xy 122.71237 91.526371) (xy 122.1991 91.313243)
+ (xy 121.643339 91.312758) (xy 121.129697 91.52499) (xy 120.736371 91.91763) (xy 120.523243 92.4309) (xy 120.522758 92.986661)
+ (xy 120.73499 93.500303) (xy 121.12763 93.893629) (xy 121.6409 94.106757) (xy 122.196661 94.107242) (xy 122.710303 93.89501)
+ (xy 122.943219 93.6625) (xy 124.700462 93.6625) (xy 124.421481 93.941481) (xy 124.215005 94.250494) (xy 124.1425 94.615)
+ (xy 124.1425 95.885) (xy 124.215005 96.249506) (xy 124.421481 96.558519) (xy 124.730494 96.764995) (xy 124.781857 96.775211)
+ (xy 125.128323 97.121677) (xy 125.337247 97.261275) (xy 125.281673 97.363004) (xy 125.26499 97.44294) (xy 125.387148 97.663)
+ (xy 126.873 97.663) (xy 126.873 97.643) (xy 127.127 97.643) (xy 127.127 97.663) (xy 128.612852 97.663)
+ (xy 128.73501 97.44294) (xy 128.734083 97.438502) (xy 128.905 97.4725) (xy 129.145462 97.4725) (xy 129.8575 98.184538)
+ (xy 129.8575 104.775) (xy 129.930005 105.139506) (xy 130.136481 105.448519) (xy 131.406481 106.718519) (xy 131.715494 106.924995)
+ (xy 132.08 106.9975) (xy 140.003218 106.9975) (xy 139.920555 107.080163) (xy 140.035809 107.195417) (xy 139.8002 107.257071)
+ (xy 139.624073 107.75748) (xy 139.652852 108.287199) (xy 139.8002 108.642929) (xy 140.035812 108.704583) (xy 140.790395 107.95)
+ (xy 140.776252 107.935857) (xy 140.955857 107.756252) (xy 140.97 107.770395) (xy 140.984142 107.756252) (xy 141.163747 107.935857)
+ (xy 141.149605 107.95) (xy 141.904188 108.704583) (xy 142.1398 108.642929) (xy 142.315927 108.14252) (xy 142.287148 107.612801)
+ (xy 142.1398 107.257071) (xy 141.90419 107.195417) (xy 142.019445 107.080163) (xy 141.936782 106.9975) (xy 143.813218 106.9975)
+ (xy 143.730555 107.080163) (xy 143.845809 107.195417) (xy 143.6102 107.257071) (xy 143.434073 107.75748) (xy 143.462852 108.287199)
+ (xy 143.6102 108.642929) (xy 143.845812 108.704583) (xy 144.600395 107.95) (xy 144.586252 107.935857) (xy 144.765857 107.756252)
+ (xy 144.78 107.770395) (xy 145.534583 107.015812) (xy 145.524111 106.975796) (xy 145.779506 106.924995) (xy 146.088519 106.718519)
+ (xy 147.358519 105.448519) (xy 147.564995 105.139506) (xy 147.6375 104.775) (xy 147.6375 103.899538) (xy 147.685558 103.851479)
+ (xy 147.833647 103.999827) (xy 148.323587 104.203268) (xy 148.854086 104.203731) (xy 149.34438 104.001146) (xy 149.523337 103.8225)
+ (xy 151.370462 103.8225) (xy 151.4475 103.899538) (xy 151.4475 104.386904) (xy 151.216371 104.61763) (xy 151.003243 105.1309)
+ (xy 151.002758 105.686661) (xy 151.21499 106.200303) (xy 151.60763 106.593629) (xy 152.1209 106.806757) (xy 152.676661 106.807242)
+ (xy 153.190303 106.59501) (xy 153.583629 106.20237) (xy 153.796757 105.6891) (xy 153.797242 105.133339) (xy 153.58501 104.619697)
+ (xy 153.3525 104.38678) (xy 153.3525 103.505) (xy 153.279995 103.140495) (xy 153.279995 103.140494) (xy 153.073519 102.831481)
+ (xy 152.438519 102.196481) (xy 152.129506 101.990005) (xy 151.765 101.9175) (xy 152.129506 101.844995) (xy 152.438519 101.638519)
+ (xy 153.073519 101.003519) (xy 153.279995 100.694506) (xy 153.279995 100.694505) (xy 153.3525 100.33) (xy 153.3525 100.083095)
+ (xy 153.583629 99.85237) (xy 153.796757 99.3391) (xy 153.797242 98.783339) (xy 153.58501 98.269697) (xy 153.19237 97.876371)
+ (xy 152.6791 97.663243) (xy 152.60386 97.663177) (xy 153.073519 97.193519) (xy 153.279995 96.884506) (xy 153.3525 96.52)
+ (xy 153.3525 95.003095) (xy 153.583629 94.77237) (xy 153.796757 94.2591) (xy 153.797242 93.703339) (xy 153.58501 93.189697)
+ (xy 153.19237 92.796371) (xy 152.6791 92.583243) (xy 152.123339 92.582758) (xy 151.609697 92.79499) (xy 151.216371 93.18763)
+ (xy 151.003243 93.7009) (xy 151.002758 94.256661) (xy 151.21499 94.770303) (xy 151.4475 95.003219) (xy 151.4475 96.125462)
+ (xy 150.299989 97.272972) (xy 150.294559 97.245671) (xy 149.986222 96.784211) (xy 149.59117 96.520246) (xy 149.607262 96.515525)
+ (xy 150.041191 96.165986) (xy 150.308327 95.676996) (xy 150.32501 95.59706) (xy 150.32501 94.90294) (xy 150.308327 94.823004)
+ (xy 150.041191 94.334014) (xy 149.607262 93.984475) (xy 149.59201 93.98) (xy 149.607262 93.975525) (xy 150.041191 93.625986)
+ (xy 150.308327 93.136996) (xy 150.32501 93.05706) (xy 150.202852 92.837) (xy 148.717 92.837) (xy 148.717 93.8276)
+ (xy 148.717 94.1324) (xy 148.717 95.123) (xy 150.202852 95.123) (xy 150.32501 94.90294) (xy 150.32501 95.59706)
+ (xy 150.202852 95.377) (xy 148.717 95.377) (xy 148.717 95.397) (xy 148.463 95.397) (xy 148.463 95.377)
+ (xy 148.463 95.123) (xy 148.463 94.1324) (xy 148.463 93.8276) (xy 148.463 92.837) (xy 146.977148 92.837)
+ (xy 146.85499 93.05706) (xy 146.871673 93.136996) (xy 147.138809 93.625986) (xy 147.572738 93.975525) (xy 147.587989 93.98)
+ (xy 147.572738 93.984475) (xy 147.138809 94.334014) (xy 146.871673 94.823004) (xy 146.85499 94.90294) (xy 146.977148 95.123)
+ (xy 148.463 95.123) (xy 148.463 95.377) (xy 146.977148 95.377) (xy 146.85499 95.59706) (xy 146.871673 95.676996)
+ (xy 147.138809 96.165986) (xy 147.572738 96.515525) (xy 147.588829 96.520246) (xy 147.193778 96.784211) (xy 146.885441 97.245671)
+ (xy 146.777167 97.79) (xy 146.885441 98.334329) (xy 147.158171 98.7425) (xy 144.145 98.7425) (xy 143.780494 98.815005)
+ (xy 143.471481 99.021481) (xy 142.70501 99.787951) (xy 142.70501 98.13706) (xy 142.582852 97.917) (xy 141.097 97.917)
+ (xy 141.097 99.2124) (xy 141.4526 99.2124) (xy 141.987262 99.055525) (xy 142.421191 98.705986) (xy 142.688327 98.216996)
+ (xy 142.70501 98.13706) (xy 142.70501 99.787951) (xy 140.956474 101.536487) (xy 140.705914 101.536269) (xy 140.21562 101.738854)
+ (xy 140.036662 101.9175) (xy 138.189538 101.9175) (xy 138.1125 101.840462) (xy 138.1125 101.532981) (xy 138.200596 101.621231)
+ (xy 138.760528 101.853735) (xy 139.366812 101.854264) (xy 139.927149 101.622738) (xy 140.356231 101.194404) (xy 140.588735 100.634472)
+ (xy 140.589264 100.028188) (xy 140.357738 99.467851) (xy 140.0175 99.127018) (xy 140.0175 99.074526) (xy 140.4874 99.2124)
+ (xy 140.843 99.2124) (xy 140.843 97.917) (xy 140.823 97.917) (xy 140.823 97.663) (xy 140.843 97.663)
+ (xy 140.843 97.643) (xy 141.097 97.643) (xy 141.097 97.663) (xy 142.582852 97.663) (xy 142.70501 97.44294)
+ (xy 142.688327 97.363004) (xy 142.421191 96.874014) (xy 141.987262 96.524475) (xy 141.97117 96.519753) (xy 142.366222 96.255789)
+ (xy 142.674559 95.794329) (xy 142.782833 95.25) (xy 142.674559 94.705671) (xy 142.366222 94.244211) (xy 141.97117 93.980246)
+ (xy 141.987262 93.975525) (xy 142.421191 93.625986) (xy 142.688327 93.136996) (xy 142.70501 93.05706) (xy 142.70501 92.36294)
+ (xy 142.688327 92.283004) (xy 142.421191 91.794014) (xy 141.987262 91.444475) (xy 141.97201 91.44) (xy 141.987262 91.435525)
+ (xy 142.421191 91.085986) (xy 142.688327 90.596996) (xy 142.70501 90.51706) (xy 142.582852 90.297) (xy 141.097 90.297)
+ (xy 141.097 91.2876) (xy 141.097 91.5924) (xy 141.097 92.583) (xy 142.582852 92.583) (xy 142.70501 92.36294)
+ (xy 142.70501 93.05706) (xy 142.582852 92.837) (xy 141.097 92.837) (xy 141.097 92.857) (xy 140.843 92.857)
+ (xy 140.843 92.837) (xy 140.823 92.837) (xy 140.823 92.583) (xy 140.843 92.583) (xy 140.843 91.5924)
+ (xy 140.843 91.2876) (xy 140.843 90.297) (xy 140.823 90.297) (xy 140.823 90.043) (xy 140.843 90.043)
+ (xy 140.843 90.023) (xy 141.097 90.023) (xy 141.097 90.043) (xy 142.582852 90.043) (xy 142.70501 89.82294)
+ (xy 142.688327 89.743004) (xy 142.421191 89.254014) (xy 141.987262 88.904475) (xy 141.97117 88.899753) (xy 142.366222 88.635789)
+ (xy 142.674559 88.174329) (xy 142.782833 87.63) (xy 142.674559 87.085671) (xy 142.366222 86.624211) (xy 141.970801 86.359999)
+ (xy 142.366222 86.095789) (xy 142.401828 86.0425) (xy 143.115462 86.0425) (xy 143.8275 86.754538) (xy 143.8275 88.265)
+ (xy 143.900005 88.629506) (xy 144.106481 88.938519) (xy 144.741481 89.573519) (xy 145.050495 89.779995) (xy 145.415 89.8525)
+ (xy 145.779506 89.779995) (xy 145.823049 89.7509) (xy 146.860531 89.7509) (xy 146.777167 90.17) (xy 146.885441 90.714329)
+ (xy 147.193778 91.175789) (xy 147.588829 91.439753) (xy 147.572738 91.444475) (xy 147.138809 91.794014) (xy 146.871673 92.283004)
+ (xy 146.85499 92.36294) (xy 146.977148 92.583) (xy 148.463 92.583) (xy 148.463 92.563) (xy 148.717 92.563)
+ (xy 148.717 92.583) (xy 150.202852 92.583) (xy 150.32501 92.36294) (xy 150.308327 92.283004) (xy 150.041191 91.794014)
+ (xy 149.607262 91.444475) (xy 149.59117 91.439753) (xy 149.986222 91.175789) (xy 150.294559 90.714329) (xy 150.402833 90.17)
+ (xy 150.319468 89.7509) (xy 151.275481 89.7509) (xy 151.60763 90.083629) (xy 152.1209 90.296757) (xy 152.676661 90.297242)
+ (xy 153.190303 90.08501) (xy 153.583629 89.69237) (xy 153.796757 89.1791) (xy 153.797242 88.623339) (xy 153.7335 88.469071)
+ (xy 153.7335 79.56481) (xy 153.7335 79.312191) (xy 153.7335 77.915191) (xy 153.636827 77.681802) (xy 153.458199 77.503173)
+ (xy 153.22481 77.4065) (xy 152.972191 77.4065) (xy 152.273 77.4065) (xy 152.273 74.492928) (xy 152.313629 74.45237)
+ (xy 152.526757 73.9391) (xy 152.527242 73.383339) (xy 152.31501 72.869697) (xy 151.92237 72.476371) (xy 151.4091 72.263243)
+ (xy 150.853339 72.262758) (xy 150.339697 72.47499) (xy 149.946371 72.86763) (xy 149.733243 73.3809) (xy 149.732758 73.936661)
+ (xy 149.94499 74.450303) (xy 149.987 74.492386) (xy 149.987 77.597) (xy 149.225 77.597) (xy 148.787593 77.684006)
+ (xy 148.665927 77.7653) (xy 148.665927 76.39252) (xy 148.637148 75.862801) (xy 148.4898 75.507071) (xy 148.254188 75.445417)
+ (xy 148.074583 75.625022) (xy 148.074583 75.265812) (xy 148.012929 75.0302) (xy 147.51252 74.854073) (xy 146.982801 74.882852)
+ (xy 146.627071 75.0302) (xy 146.565417 75.265812) (xy 147.32 76.020395) (xy 148.074583 75.265812) (xy 148.074583 75.625022)
+ (xy 147.499605 76.2) (xy 148.254188 76.954583) (xy 148.4898 76.892929) (xy 148.665927 76.39252) (xy 148.665927 77.7653)
+ (xy 148.416777 77.931777) (xy 148.074583 78.273971) (xy 148.074583 77.134188) (xy 147.32 76.379605) (xy 147.140395 76.55921)
+ (xy 147.140395 76.2) (xy 146.385812 75.445417) (xy 146.1502 75.507071) (xy 145.974073 76.00748) (xy 146.002852 76.537199)
+ (xy 146.1502 76.892929) (xy 146.385812 76.954583) (xy 147.140395 76.2) (xy 147.140395 76.55921) (xy 146.565417 77.134188)
+ (xy 146.627071 77.3698) (xy 147.12748 77.545927) (xy 147.657199 77.517148) (xy 148.012929 77.3698) (xy 148.074583 77.134188)
+ (xy 148.074583 78.273971) (xy 147.781777 78.566777) (xy 147.534006 78.937593) (xy 147.447 79.375) (xy 147.447 81.375013)
+ (xy 147.193778 81.544211) (xy 146.885441 82.005671) (xy 146.777167 82.55) (xy 146.885441 83.094329) (xy 147.193778 83.555789)
+ (xy 147.588829 83.819753) (xy 147.572738 83.824475) (xy 147.138809 84.174014) (xy 146.871673 84.663004) (xy 146.85499 84.74294)
+ (xy 146.977148 84.963) (xy 148.463 84.963) (xy 148.463 84.943) (xy 148.717 84.943) (xy 148.717 84.963)
+ (xy 150.202852 84.963) (xy 150.32501 84.74294) (xy 150.308327 84.663004) (xy 150.041191 84.174014) (xy 149.607262 83.824475)
+ (xy 149.59117 83.819753) (xy 149.986222 83.555789) (xy 150.294559 83.094329) (xy 150.402833 82.55) (xy 150.294559 82.005671)
+ (xy 149.986222 81.544211) (xy 149.733 81.375013) (xy 149.733 79.883) (xy 151.13 79.883) (xy 151.247974 79.883)
+ (xy 151.341801 79.976827) (xy 151.57519 80.0735) (xy 151.827809 80.0735) (xy 153.224809 80.0735) (xy 153.458198 79.976827)
+ (xy 153.636827 79.798199) (xy 153.7335 79.56481) (xy 153.7335 88.469071) (xy 153.58501 88.109697) (xy 153.19237 87.716371)
+ (xy 152.6791 87.503243) (xy 152.123339 87.502758) (xy 151.609697 87.71499) (xy 151.275003 88.0491) (xy 150.309974 88.0491)
+ (xy 150.32501 87.97706) (xy 150.32501 87.28294) (xy 150.308327 87.203004) (xy 150.041191 86.714014) (xy 149.607262 86.364475)
+ (xy 149.59201 86.36) (xy 149.607262 86.355525) (xy 150.041191 86.005986) (xy 150.308327 85.516996) (xy 150.32501 85.43706)
+ (xy 150.202852 85.217) (xy 148.717 85.217) (xy 148.717 86.2076) (xy 148.717 86.5124) (xy 148.717 87.503)
+ (xy 150.202852 87.503) (xy 150.32501 87.28294) (xy 150.32501 87.97706) (xy 150.202852 87.757) (xy 148.717 87.757)
+ (xy 148.717 87.777) (xy 148.463 87.777) (xy 148.463 87.757) (xy 148.463 87.503) (xy 148.463 86.5124)
+ (xy 148.463 86.2076) (xy 148.463 85.217) (xy 146.977148 85.217) (xy 146.85499 85.43706) (xy 146.871673 85.516996)
+ (xy 147.138809 86.005986) (xy 147.572738 86.355525) (xy 147.587989 86.36) (xy 147.572738 86.364475) (xy 147.138809 86.714014)
+ (xy 146.871673 87.203004) (xy 146.85499 87.28294) (xy 146.977148 87.503) (xy 148.463 87.503) (xy 148.463 87.757)
+ (xy 146.977148 87.757) (xy 146.85499 87.97706) (xy 146.870025 88.0491) (xy 145.911138 88.0491) (xy 145.7325 87.870462)
+ (xy 145.7325 86.36) (xy 145.659995 85.995494) (xy 145.453519 85.686481) (xy 144.183519 84.416481) (xy 143.874506 84.210005)
+ (xy 143.51 84.1375) (xy 142.401828 84.1375) (xy 142.366222 84.084211) (xy 142.198884 83.9724) (xy 142.23931 83.9724)
+ (xy 142.472699 83.875727) (xy 142.651327 83.697098) (xy 142.748 83.463709) (xy 142.748 82.83575) (xy 142.748 82.26425)
+ (xy 142.748 81.636291) (xy 142.651327 81.402902) (xy 142.472699 81.224273) (xy 142.23931 81.1276) (xy 141.986691 81.1276)
+ (xy 141.25575 81.1276) (xy 141.097 81.28635) (xy 141.097 82.423) (xy 142.58925 82.423) (xy 142.748 82.26425)
+ (xy 142.748 82.83575) (xy 142.58925 82.677) (xy 141.097 82.677) (xy 141.097 82.697) (xy 140.843 82.697)
+ (xy 140.843 82.677) (xy 140.823 82.677) (xy 140.823 82.423) (xy 140.843 82.423) (xy 140.843 81.28635)
+ (xy 140.68425 81.1276) (xy 139.953309 81.1276) (xy 139.70069 81.1276) (xy 139.467301 81.224273) (xy 139.3825 81.309074)
+ (xy 139.3825 76.594538) (xy 142.634538 73.3425) (xy 146.296904 73.3425) (xy 146.52763 73.573629) (xy 147.0409 73.786757)
+ (xy 147.596661 73.787242) (xy 148.110303 73.57501) (xy 148.503629 73.18237) (xy 148.716757 72.6691) (xy 148.717242 72.113339)
+ (xy 148.50501 71.599697) (xy 148.2725 71.36678) (xy 148.2725 70.879538) (xy 148.349538 70.8025) (xy 150.196628 70.8025)
+ (xy 150.373647 70.979827) (xy 150.863587 71.183268) (xy 151.394086 71.183731) (xy 151.88438 70.981146) (xy 152.259827 70.606353)
+ (xy 152.463268 70.116413) (xy 152.463731 69.585914) (xy 152.261146 69.09562) (xy 151.886353 68.720173) (xy 151.854628 68.707)
+ (xy 155.510058 68.707) (xy 155.455417 68.915812) (xy 156.21 69.670395) (xy 156.964583 68.915812) (xy 156.909941 68.707)
+ (xy 182.753 68.707) (xy 182.753 76.835) (xy 182.665994 76.397593) (xy 182.418223 76.026777) (xy 181.783223 75.391777)
+ (xy 181.412407 75.144006) (xy 180.975 75.057) (xy 172.72 75.057) (xy 172.72 74.168691) (xy 172.623327 73.935302)
+ (xy 172.444699 73.756673) (xy 172.21131 73.66) (xy 171.958691 73.66) (xy 168.148691 73.66) (xy 167.915302 73.756673)
+ (xy 167.736673 73.935301) (xy 167.64 74.16869) (xy 167.64 74.421309) (xy 167.64 75.057) (xy 165.1 75.057)
+ (xy 164.662593 75.144006) (xy 164.291777 75.391777) (xy 162.699144 76.98441) (xy 162.699144 73.867698) (xy 162.671362 73.312632)
+ (xy 162.512397 72.928857) (xy 162.270213 72.859392) (xy 162.090608 73.038997) (xy 162.090608 72.679787) (xy 162.021143 72.437603)
+ (xy 161.497698 72.250856) (xy 160.942632 72.278638) (xy 160.558857 72.437603) (xy 160.489392 72.679787) (xy 161.29 73.480395)
+ (xy 162.090608 72.679787) (xy 162.090608 73.038997) (xy 161.469605 73.66) (xy 162.270213 74.460608) (xy 162.512397 74.391143)
+ (xy 162.699144 73.867698) (xy 162.699144 76.98441) (xy 162.090608 77.592946) (xy 162.090608 74.640213) (xy 161.29 73.839605)
+ (xy 161.110395 74.01921) (xy 161.110395 73.66) (xy 160.309787 72.859392) (xy 160.067603 72.928857) (xy 159.880856 73.452302)
+ (xy 159.908638 74.007368) (xy 160.067603 74.391143) (xy 160.309787 74.460608) (xy 161.110395 73.66) (xy 161.110395 74.01921)
+ (xy 160.489392 74.640213) (xy 160.558857 74.882397) (xy 161.082302 75.069144) (xy 161.637368 75.041362) (xy 162.021143 74.882397)
+ (xy 162.090608 74.640213) (xy 162.090608 77.592946) (xy 162.086554 77.597) (xy 160.744628 77.597) (xy 160.286413 77.406732)
+ (xy 159.755914 77.406269) (xy 159.26562 77.608854) (xy 158.890173 77.983647) (xy 158.686732 78.473587) (xy 158.686269 79.004086)
+ (xy 158.888854 79.49438) (xy 159.263647 79.869827) (xy 159.753587 80.073268) (xy 160.284086 80.073731) (xy 160.745691 79.883)
+ (xy 162.56 79.883) (xy 162.997407 79.795994) (xy 163.368223 79.548223) (xy 165.573446 77.343) (xy 167.64 77.343)
+ (xy 167.64 78.231309) (xy 167.736673 78.464698) (xy 167.915301 78.643327) (xy 168.14869 78.74) (xy 168.401309 78.74)
+ (xy 170.167548 78.74) (xy 169.649923 78.745067) (xy 168.762353 79.112711) (xy 168.553165 79.47356) (xy 170.18 81.100395)
+ (xy 171.806835 79.47356) (xy 171.597647 79.112711) (xy 170.672326 78.74) (xy 172.211309 78.74) (xy 172.444698 78.643327)
+ (xy 172.623327 78.464699) (xy 172.72 78.23131) (xy 172.72 77.978691) (xy 172.72 77.343) (xy 180.467 77.343)
+ (xy 180.467 83.058) (xy 178.943691 83.058) (xy 178.710302 83.154673) (xy 178.531673 83.333301) (xy 178.435 83.56669)
+ (xy 178.435 83.819309) (xy 178.435 85.597309) (xy 178.47133 85.685018) (xy 178.164506 85.480005) (xy 177.8 85.4075)
+ (xy 172.724824 85.4075) (xy 172.724824 81.76035) (xy 172.714933 80.749923) (xy 172.347289 79.862353) (xy 171.98644 79.653165)
+ (xy 170.359605 81.28) (xy 171.98644 82.906835) (xy 172.347289 82.697647) (xy 172.724824 81.76035) (xy 172.724824 85.4075)
+ (xy 172.534719 85.4075) (xy 172.334563 84.923085) (xy 171.620673 84.207948) (xy 170.687454 83.820441) (xy 170.191567 83.820008)
+ (xy 170.710077 83.814933) (xy 171.597647 83.447289) (xy 171.806835 83.08644) (xy 170.18 81.459605) (xy 170.000395 81.63921)
+ (xy 170.000395 81.28) (xy 168.37356 79.653165) (xy 168.012711 79.862353) (xy 167.635176 80.79965) (xy 167.645067 81.810077)
+ (xy 168.012711 82.697647) (xy 168.37356 82.906835) (xy 170.000395 81.28) (xy 170.000395 81.63921) (xy 168.553165 83.08644)
+ (xy 168.762353 83.447289) (xy 169.686602 83.819568) (xy 169.676979 83.81956) (xy 168.743085 84.205437) (xy 168.027948 84.919327)
+ (xy 167.82524 85.4075) (xy 163.195 85.4075) (xy 162.830494 85.480005) (xy 162.521481 85.686481) (xy 161.886481 86.321481)
+ (xy 161.680005 86.630494) (xy 161.6075 86.995) (xy 161.6075 87.876904) (xy 161.376371 88.10763) (xy 161.163243 88.6209)
+ (xy 161.162758 89.176661) (xy 161.37499 89.690303) (xy 161.76763 90.083629) (xy 162.2809 90.296757) (xy 162.836661 90.297242)
+ (xy 163.350303 90.08501) (xy 163.743629 89.69237) (xy 163.956757 89.1791) (xy 163.957242 88.623339) (xy 163.74501 88.109697)
+ (xy 163.5125 87.87678) (xy 163.5125 87.389538) (xy 163.589538 87.3125) (xy 167.82528 87.3125) (xy 168.025437 87.796915)
+ (xy 168.739327 88.512052) (xy 169.672546 88.899559) (xy 169.676972 88.899562) (xy 168.743085 89.285437) (xy 168.027948 89.999327)
+ (xy 167.82524 90.4875) (xy 165.1 90.4875) (xy 164.735494 90.560005) (xy 164.42648 90.766481) (xy 162.609918 92.583042)
+ (xy 162.283339 92.582758) (xy 161.769697 92.79499) (xy 161.376371 93.18763) (xy 161.163243 93.7009) (xy 161.162758 94.256661)
+ (xy 161.37499 94.770303) (xy 161.76763 95.163629) (xy 162.2809 95.376757) (xy 162.836661 95.377242) (xy 163.350303 95.16501)
+ (xy 163.743629 94.77237) (xy 163.956757 94.2591) (xy 163.957044 93.929994) (xy 165.494538 92.3925) (xy 167.82528 92.3925)
+ (xy 168.025437 92.876915) (xy 168.739327 93.592052) (xy 169.672546 93.979559) (xy 169.676972 93.979562) (xy 168.743085 94.365437)
+ (xy 168.027948 95.079327) (xy 167.82524 95.5675) (xy 165.1 95.5675) (xy 164.735494 95.640005) (xy 164.42648 95.846481)
+ (xy 162.609918 97.663042) (xy 162.283339 97.662758) (xy 161.769697 97.87499) (xy 161.376371 98.26763) (xy 161.163243 98.7809)
+ (xy 161.162758 99.336661) (xy 161.37499 99.850303) (xy 161.76763 100.243629) (xy 162.2809 100.456757) (xy 162.836661 100.457242)
+ (xy 163.350303 100.24501) (xy 163.743629 99.85237) (xy 163.956757 99.3391) (xy 163.957044 99.009994) (xy 165.494538 97.4725)
+ (xy 167.82528 97.4725) (xy 168.025437 97.956915) (xy 168.739327 98.672052) (xy 169.672546 99.059559) (xy 169.676972 99.059562)
+ (xy 168.743085 99.445437) (xy 168.027948 100.159327) (xy 167.640441 101.092546) (xy 167.63956 102.103021) (xy 168.025437 103.036915)
+ (xy 168.739327 103.752052) (xy 169.2275 103.954759) (xy 169.2275 104.380462) (xy 169.150462 104.4575) (xy 163.583095 104.4575)
+ (xy 163.35237 104.226371) (xy 162.8391 104.013243) (xy 162.283339 104.012758) (xy 161.769697 104.22499) (xy 161.376371 104.61763)
+ (xy 161.163243 105.1309) (xy 161.162758 105.686661) (xy 161.37499 106.200303) (xy 161.76763 106.593629) (xy 162.2809 106.806757)
+ (xy 162.836661 106.807242) (xy 163.350303 106.59501) (xy 163.583219 106.3625) (xy 169.545 106.3625) (xy 169.909506 106.289995)
+ (xy 170.218519 106.083519) (xy 170.853519 105.448519) (xy 171.059995 105.139506) (xy 171.059995 105.139505) (xy 171.1325 104.775)
+ (xy 171.1325 103.954719) (xy 171.616915 103.754563) (xy 172.332052 103.040673) (xy 172.534759 102.5525) (xy 172.72 102.5525)
+ (xy 173.084506 102.479995) (xy 173.393519 102.273519) (xy 178.596006 97.071032) (xy 178.710301 97.185327) (xy 178.94369 97.282)
+ (xy 179.196309 97.282) (xy 182.753 97.282) (xy 182.753 109.093)
+ )
+ )
+ )
+)
diff --git a/demos/sonde xilinx/sonde xilinx.net b/demos/sonde xilinx/sonde xilinx.net
new file mode 100644
index 0000000..33e887a
--- /dev/null
+++ b/demos/sonde xilinx/sonde xilinx.net
@@ -0,0 +1,420 @@
+(export (version D)
+ (design
+ (source "F:/kicad-launchpad/testing/demos/sonde xilinx/sonde xilinx.sch")
+ (date "05/01/2014 18:35:33")
+ (tool "eeschema (2014-01-04 BZR 4608)-product"))
+ (components
+ (comp (ref R11)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D527316))
+ (comp (ref C4)
+ (value 100pF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF81A7))
+ (comp (ref R13)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D528082))
+ (comp (ref U1)
+ (value 74LS125)
+ (libsource (lib 74xx) (part 74LS125))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7DBD))
+ (comp (ref J2)
+ (value DB9MALE)
+ (libsource (lib conn) (part DB9))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDE5C8))
+ (comp (ref P1)
+ (value CONN_6)
+ (libsource (lib conn) (part CONN_6))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF830C))
+ (comp (ref C1)
+ (value 1uF)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF82C6))
+ (comp (ref C5)
+ (value 100pF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D528086))
+ (comp (ref R12)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D528083))
+ (comp (ref C2)
+ (value 100pF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D528085))
+ (comp (ref C3)
+ (value 100pF)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D528084))
+ (comp (ref R14)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF819B))
+ (comp (ref R5)
+ (value 1K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF818E))
+ (comp (ref R2)
+ (value 5,1K)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF8187))
+ (comp (ref D2)
+ (value BAT46)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF8176))
+ (comp (ref D1)
+ (value BAT46)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF815E))
+ (comp (ref U2)
+ (value 74LS125)
+ (libsource (lib 74xx) (part 74LS125))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7EEC))
+ (comp (ref R9)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7D33))
+ (comp (ref R10)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7D31))
+ (comp (ref R8)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D528080))
+ (comp (ref R7)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4D52807F))
+ (comp (ref R6)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7D26))
+ (comp (ref R4)
+ (value 47)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7D22))
+ (comp (ref R1)
+ (value 100)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7D16))
+ (comp (ref J1)
+ (value DB25MALE)
+ (libsource (lib conn) (part DB25))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EBF7D04)))
+ (libparts
+ (libpart (lib device) (part C)
+ (description "Condensateur non polarise")
+ (footprints
+ (fp SM*)
+ (fp C?)
+ (fp C1-1))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CP)
+ (aliases
+ (alias CAPAPOL))
+ (description "Condensateur polarise")
+ (footprints
+ (fp CP*)
+ (fp SM*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part DIODESCH)
+ (description "Diode schottky")
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODESCH))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part R)
+ (description Resistance)
+ (footprints
+ (fp R?)
+ (fp SM0603)
+ (fp SM0805)
+ (fp R?-*)
+ (fp SM1206))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib conn) (part CONN_6)
+ (description "ymbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_6))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))))
+ (libpart (lib conn) (part DB25)
+ (footprints
+ (fp DB25*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB25))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P24) (type passive))
+ (pin (num 25) (name P25) (type passive))))
+ (libpart (lib conn) (part DB9)
+ (footprints
+ (fp DB9*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB9))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))))
+ (libpart (lib 74xx) (part 74LS125)
+ (description "Quad buffer 3 State out")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS125))
+ (pins
+ (pin (num 1) (name E) (type input))
+ (pin (num 2) (name D) (type input))
+ (pin (num 3) (name O) (type 3state))
+ (pin (num 4) (name E) (type input))
+ (pin (num 5) (name D) (type input))
+ (pin (num 6) (name O) (type 3state))
+ (pin (num 7) (name GND) (type power_in))
+ (pin (num 8) (name O) (type 3state))
+ (pin (num 9) (name D) (type input))
+ (pin (num 10) (name E) (type input))
+ (pin (num 11) (name O) (type 3state))
+ (pin (num 12) (name D) (type input))
+ (pin (num 13) (name E) (type input))
+ (pin (num 14) (name VCC) (type power_in)))))
+ (libraries
+ (library (logical device)
+ (uri F:\kicad\share\library\device.lib))
+ (library (logical conn)
+ (uri F:\kicad\share\library\conn.lib))
+ (library (logical 74xx)
+ (uri F:\kicad\share\library\74xx.lib)))
+ (nets
+ (net (code 1) (name VCC)
+ (node (ref U2) (pin 14))
+ (node (ref R5) (pin 1))
+ (node (ref R2) (pin 1))
+ (node (ref D2) (pin 2))
+ (node (ref D1) (pin 1))
+ (node (ref U1) (pin 14))
+ (node (ref C1) (pin 1)))
+ (net (code 2) (name GND)
+ (node (ref J2) (pin 7))
+ (node (ref J2) (pin 8))
+ (node (ref J2) (pin 9))
+ (node (ref C5) (pin 2))
+ (node (ref R5) (pin 2))
+ (node (ref U1) (pin 2))
+ (node (ref C1) (pin 2))
+ (node (ref U1) (pin 7))
+ (node (ref J1) (pin 20))
+ (node (ref U2) (pin 1))
+ (node (ref J1) (pin 25))
+ (node (ref U2) (pin 12))
+ (node (ref U2) (pin 10))
+ (node (ref U2) (pin 9))
+ (node (ref U2) (pin 7))
+ (node (ref U2) (pin 4))
+ (node (ref U2) (pin 5))
+ (node (ref P1) (pin 2))
+ (node (ref U2) (pin 13))
+ (node (ref C3) (pin 2))
+ (node (ref J2) (pin 6))
+ (node (ref C4) (pin 2))
+ (node (ref C2) (pin 2)))
+ (net (code 3) (name "Net-(U2-Pad11)")
+ (node (ref U2) (pin 11)))
+ (net (code 4) (name "Net-(U2-Pad8)")
+ (node (ref U2) (pin 8)))
+ (net (code 5) (name "Net-(U2-Pad6)")
+ (node (ref U2) (pin 6)))
+ (net (code 6) (name /TMS-PROG-D2)
+ (node (ref J1) (pin 4))
+ (node (ref R9) (pin 2)))
+ (net (code 7) (name /VCC_SENSE-ERROR*)
+ (node (ref J1) (pin 15))
+ (node (ref R1) (pin 2)))
+ (net (code 8) (name "Net-(J1-Pad11)")
+ (node (ref J1) (pin 12))
+ (node (ref J1) (pin 11))
+ (node (ref J1) (pin 8)))
+ (net (code 9) (name /TD0-PROG-D4)
+ (node (ref J1) (pin 6))
+ (node (ref R6) (pin 2)))
+ (net (code 10) (name /TDI-DIN-D0)
+ (node (ref J1) (pin 2))
+ (node (ref R7) (pin 2)))
+ (net (code 11) (name /CTRL-D3)
+ (node (ref J1) (pin 5))
+ (node (ref R8) (pin 2)))
+ (net (code 12) (name /CLK-D1)
+ (node (ref J1) (pin 3))
+ (node (ref R10) (pin 2)))
+ (net (code 13) (name "Net-(R4-Pad1)")
+ (node (ref R4) (pin 1))
+ (node (ref U2) (pin 3)))
+ (net (code 14) (name "Net-(J1-Pad1)")
+ (node (ref J1) (pin 1)))
+ (net (code 15) (name "Net-(J1-Pad7)")
+ (node (ref J1) (pin 7)))
+ (net (code 16) (name "Net-(R7-Pad1)")
+ (node (ref U1) (pin 5))
+ (node (ref R7) (pin 1)))
+ (net (code 17) (name /DONE-SELECT*)
+ (node (ref J1) (pin 13))
+ (node (ref R4) (pin 2)))
+ (net (code 18) (name "Net-(J1-Pad19)")
+ (node (ref J1) (pin 19)))
+ (net (code 19) (name "Net-(J1-Pad18)")
+ (node (ref J1) (pin 18)))
+ (net (code 20) (name "Net-(J1-Pad17)")
+ (node (ref J1) (pin 17)))
+ (net (code 21) (name "Net-(J1-Pad16)")
+ (node (ref J1) (pin 16)))
+ (net (code 22) (name "Net-(J1-Pad24)")
+ (node (ref J1) (pin 24)))
+ (net (code 23) (name "Net-(J1-Pad14)")
+ (node (ref J1) (pin 14)))
+ (net (code 24) (name "Net-(J1-Pad23)")
+ (node (ref J1) (pin 23)))
+ (net (code 25) (name "Net-(R9-Pad1)")
+ (node (ref U1) (pin 12))
+ (node (ref R9) (pin 1)))
+ (net (code 26) (name "Net-(J1-Pad22)")
+ (node (ref J1) (pin 22)))
+ (net (code 27) (name "Net-(J1-Pad21)")
+ (node (ref J1) (pin 21)))
+ (net (code 28) (name "Net-(J1-Pad10)")
+ (node (ref J1) (pin 10)))
+ (net (code 29) (name "Net-(J1-Pad9)")
+ (node (ref J1) (pin 9)))
+ (net (code 30) (name "Net-(R10-Pad1)")
+ (node (ref R10) (pin 1))
+ (node (ref U1) (pin 9)))
+ (net (code 31) (name "Net-(R6-Pad1)")
+ (node (ref R6) (pin 1))
+ (node (ref U1) (pin 1)))
+ (net (code 32) (name "Net-(D1-Pad2)")
+ (node (ref R1) (pin 1))
+ (node (ref D1) (pin 2)))
+ (net (code 33) (name "Net-(C4-Pad1)")
+ (node (ref C4) (pin 1))
+ (node (ref R13) (pin 2))
+ (node (ref U1) (pin 11)))
+ (net (code 34) (name "Net-(R8-Pad1)")
+ (node (ref U1) (pin 4))
+ (node (ref R8) (pin 1))
+ (node (ref U1) (pin 10))
+ (node (ref U1) (pin 13)))
+ (net (code 35) (name /PWR_3,3-5V)
+ (node (ref D2) (pin 1))
+ (node (ref J2) (pin 1))
+ (node (ref P1) (pin 1)))
+ (net (code 36) (name "Net-(C2-Pad1)")
+ (node (ref U1) (pin 6))
+ (node (ref C2) (pin 1))
+ (node (ref R11) (pin 2)))
+ (net (code 37) (name "Net-(C5-Pad1)")
+ (node (ref U1) (pin 8))
+ (node (ref C5) (pin 1))
+ (node (ref R12) (pin 2)))
+ (net (code 38) (name "Net-(C3-Pad1)")
+ (node (ref R2) (pin 2))
+ (node (ref R14) (pin 2))
+ (node (ref C3) (pin 1))
+ (node (ref U1) (pin 3))
+ (node (ref U2) (pin 2)))
+ (net (code 39) (name /TD0-DONE)
+ (node (ref P1) (pin 3))
+ (node (ref J2) (pin 2))
+ (node (ref R14) (pin 1)))
+ (net (code 40) (name /TDI-DIN)
+ (node (ref P1) (pin 4))
+ (node (ref R11) (pin 1))
+ (node (ref J2) (pin 3)))
+ (net (code 41) (name /TCK-CCLK)
+ (node (ref P1) (pin 5))
+ (node (ref R12) (pin 1))
+ (node (ref J2) (pin 4)))
+ (net (code 42) (name /TMS-PROG)
+ (node (ref J2) (pin 5))
+ (node (ref P1) (pin 6))
+ (node (ref R13) (pin 1))))) \ No newline at end of file
diff --git a/demos/sonde xilinx/sonde xilinx.pro b/demos/sonde xilinx/sonde xilinx.pro
new file mode 100644
index 0000000..2670870
--- /dev/null
+++ b/demos/sonde xilinx/sonde xilinx.pro
@@ -0,0 +1,45 @@
+update=18/05/2015 09:07:49
+version=1
+last_client=kicad
+[cvpcb]
+NetITyp=0
+NetIExt=.net
+PkgIExt=.pkg
+NetDir=
+LibDir=
+NetType=0
+[pcbnew]
+version=1
+PadDrlX=320
+PadDimH=620
+PadDimV=900
+BoardThickness=630
+TxtPcbV=600
+TxtPcbH=600
+TxtModV=600
+TxtModH=120
+TxtModW=120
+VEgarde=100
+DrawLar=120
+EdgeLar=120
+TxtLar=120
+MSegLar=120
+LastNetListRead=sonde xilinx.net
+[pcbnew/libraries]
+LibDir=
+LibName1=supports
+LibName2=connect
+LibName3=discret
+LibName4=pin_array
+LibName5=divers
+LibName6=libcms
+LibName7=display
+LibName8=valves
+[general]
+version=1
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=sonde xilinx_schlib
+LibName2=power
diff --git a/demos/sonde xilinx/sonde xilinx.sch b/demos/sonde xilinx/sonde xilinx.sch
new file mode 100644
index 0000000..fc67f7a
--- /dev/null
+++ b/demos/sonde xilinx/sonde xilinx.sch
@@ -0,0 +1,818 @@
+EESchema Schematic File Version 2
+LIBS:sonde xilinx_schlib
+LIBS:power
+LIBS:sonde xilinx-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title "PARALLEL CABLE III"
+Date "Sun 22 Mar 2015"
+Rev "1"
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L R R11
+U 1 1 4D527316
+P 6650 2600
+F 0 "R11" V 6730 2600 50 0000 C CNN
+F 1 "100" V 6650 2600 50 0000 C CNN
+F 2 "Discret:R4" H 6650 2600 60 0001 C CNN
+F 3 "" H 6650 2600 60 0001 C CNN
+ 1 6650 2600
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 6900 4200 7350 4200
+Wire Wire Line
+ 7350 4200 7350 3050
+Connection ~ 6300 4200
+Wire Wire Line
+ 6300 4250 6300 4200
+Wire Wire Line
+ 5900 4200 6400 4200
+$Comp
+L GND #PWR01
+U 1 1 3EBF81B1
+P 6300 4700
+F 0 "#PWR01" H 6300 4700 40 0001 C CNN
+F 1 "GND" H 6300 4630 40 0001 C CNN
+F 2 "" H 6300 4700 60 0001 C CNN
+F 3 "" H 6300 4700 60 0001 C CNN
+ 1 6300 4700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C4
+U 1 1 3EBF81A7
+P 6300 4450
+F 0 "C4" H 6350 4550 50 0000 L CNN
+F 1 "100pF" H 6350 4350 50 0000 L CNN
+F 2 "Discret:C2" H 6300 4450 60 0001 C CNN
+F 3 "" H 6300 4450 60 0001 C CNN
+ 1 6300 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R13
+U 1 1 4D528082
+P 6650 4200
+F 0 "R13" V 6730 4200 50 0000 C CNN
+F 1 "100" V 6650 4200 50 0000 C CNN
+F 2 "Discret:R4" H 6650 4200 60 0001 C CNN
+F 3 "" H 6650 4200 60 0001 C CNN
+ 1 6650 4200
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 5000 4200 4200 4200
+Wire Wire Line
+ 4800 4500 5450 4500
+$Comp
+L 74LS125 U1
+U 4 1 3EBF7DBD
+P 5450 4200
+F 0 "U1" H 5450 4300 50 0000 L BNN
+F 1 "74LS125" H 5500 4051 50 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 5450 4200 60 0001 C CNN
+F 3 "" H 5450 4200 60 0001 C CNN
+ 4 5450 4200
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4800 2900 4800 4500
+Text Label 8100 3800 1 60 ~ 0
+TMS-PROG
+Wire Wire Line
+ 10250 4100 8200 4100
+Wire Wire Line
+ 10250 4300 8100 4300
+Wire Wire Line
+ 10250 3900 8300 3900
+Wire Wire Line
+ 10250 3700 8400 3700
+Wire Wire Line
+ 10050 3600 10250 3600
+Connection ~ 10200 3600
+Connection ~ 10200 4000
+Connection ~ 10200 3800
+Wire Wire Line
+ 10200 4000 10250 4000
+Wire Wire Line
+ 10250 3800 10200 3800
+Wire Wire Line
+ 10200 3600 10200 4200
+Wire Wire Line
+ 10200 4200 10250 4200
+$Comp
+L DB9 J2
+U 1 1 3ECDE5C8
+P 10700 3900
+F 0 "J2" H 10700 4450 70 0000 C CNN
+F 1 "DB9MALE" H 10700 3353 70 0000 C CNN
+F 2 "Connect:DB9M_CI_INVERT" H 10700 3900 60 0001 C CNN
+F 3 "" H 10700 3900 60 0001 C CNN
+ 1 10700 3900
+ 1 0 0 1
+$EndComp
+Connection ~ 8100 3050
+Connection ~ 8200 2950
+Connection ~ 8300 2850
+Connection ~ 8400 2750
+Wire Wire Line
+ 8100 4300 8100 3050
+Wire Wire Line
+ 8200 4100 8200 2950
+Wire Wire Line
+ 8300 3900 8300 2850
+Wire Wire Line
+ 8400 3700 8400 2750
+$Comp
+L PWR_FLAG #FLG02
+U 1 1 3EBF848F
+P 6100 950
+F 0 "#FLG02" H 6100 1220 30 0001 C CNN
+F 1 "PWR_FLAG" H 6100 1180 30 0000 C CNN
+F 2 "" H 6100 950 60 0001 C CNN
+F 3 "" H 6100 950 60 0001 C CNN
+ 1 6100 950
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR03
+U 1 1 3EBF8479
+P 5800 950
+F 0 "#PWR03" H 5800 1050 30 0001 C CNN
+F 1 "VCC" H 5800 1050 30 0000 C CNN
+F 2 "" H 5800 950 60 0001 C CNN
+F 3 "" H 5800 950 60 0001 C CNN
+ 1 5800 950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR04
+U 1 1 3EBF8458
+P 10200 4850
+F 0 "#PWR04" H 10200 4850 40 0001 C CNN
+F 1 "GND" H 10200 4780 40 0001 C CNN
+F 2 "" H 10200 4850 60 0001 C CNN
+F 3 "" H 10200 4850 60 0001 C CNN
+ 1 10200 4850
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG05
+U 1 1 3EBF843C
+P 10200 4800
+F 0 "#FLG05" H 10200 5070 30 0001 C CNN
+F 1 "PWR_FLAG" H 10200 5030 30 0000 C CNN
+F 2 "" H 10200 4800 60 0001 C CNN
+F 3 "" H 10200 4800 60 0001 C CNN
+ 1 10200 4800
+ 1 0 0 -1
+$EndComp
+NoConn ~ 2200 4000
+NoConn ~ 2200 3900
+NoConn ~ 2200 3500
+NoConn ~ 2200 3300
+NoConn ~ 2200 3100
+Wire Wire Line
+ 2500 2750 2500 2700
+Wire Wire Line
+ 2500 2700 2200 2700
+$Comp
+L GND #PWR06
+U 1 1 4D528081
+P 2500 2750
+F 0 "#PWR06" H 2500 2750 40 0001 C CNN
+F 1 "GND" H 2500 2680 40 0001 C CNN
+F 2 "" H 2500 2750 60 0001 C CNN
+F 3 "" H 2500 2750 60 0001 C CNN
+ 1 2500 2750
+ 1 0 0 -1
+$EndComp
+NoConn ~ 2200 2900
+NoConn ~ 2200 2800
+NoConn ~ 2200 2500
+NoConn ~ 2200 2400
+NoConn ~ 2200 2300
+NoConn ~ 2200 2200
+NoConn ~ 2200 2100
+NoConn ~ 2200 1900
+Wire Wire Line
+ 10250 3500 9400 3500
+Text Label 9450 3500 0 60 ~ 0
+PWR_3,3-5V
+$Comp
+L GND #PWR07
+U 1 1 4D52808A
+P 10050 3600
+F 0 "#PWR07" H 10050 3600 40 0001 C CNN
+F 1 "GND" H 10050 3530 40 0001 C CNN
+F 2 "" H 10050 3600 60 0001 C CNN
+F 3 "" H 10050 3600 60 0001 C CNN
+ 1 10050 3600
+ 0 1 1 0
+$EndComp
+Text Label 7550 3050 0 60 ~ 0
+TMS-PROG
+Text Label 7550 2950 0 60 ~ 0
+TCK-CCLK
+Text Label 7550 2850 0 60 ~ 0
+TDI-DIN
+Text Label 7550 2750 0 60 ~ 0
+TD0-DONE
+Text Label 7700 2550 0 60 ~ 0
+PWR_3,3-5V
+$Comp
+L GND #PWR08
+U 1 1 3EBF8376
+P 8450 2650
+F 0 "#PWR08" H 8450 2650 40 0001 C CNN
+F 1 "GND" H 8450 2580 40 0001 C CNN
+F 2 "" H 8450 2650 60 0001 C CNN
+F 3 "" H 8450 2650 60 0001 C CNN
+ 1 8450 2650
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 7350 3050 8500 3050
+Wire Wire Line
+ 7250 2950 8500 2950
+Wire Wire Line
+ 7250 2950 7250 3300
+Wire Wire Line
+ 7250 3300 6900 3300
+Wire Wire Line
+ 7250 2850 8500 2850
+Wire Wire Line
+ 7250 2850 7250 2600
+Wire Wire Line
+ 7250 2600 6900 2600
+Wire Wire Line
+ 7450 2750 8500 2750
+Wire Wire Line
+ 7450 2750 7450 1900
+Wire Wire Line
+ 7450 1900 6900 1900
+Wire Wire Line
+ 8500 2550 7650 2550
+Wire Wire Line
+ 7650 2550 7650 1000
+Wire Wire Line
+ 7300 1000 9400 1000
+$Comp
+L CONN_6 P1
+U 1 1 3EBF830C
+P 8850 2800
+F 0 "P1" V 8800 2800 60 0000 C CNN
+F 1 "CONN_6" V 8900 2800 60 0000 C CNN
+F 2 "Connect:bornier6" H 8850 2800 60 0001 C CNN
+F 3 "" H 8850 2800 60 0001 C CNN
+ 1 8850 2800
+ 1 0 0 -1
+$EndComp
+Connection ~ 6500 1000
+Wire Wire Line
+ 6500 1000 6500 1050
+$Comp
+L GND #PWR09
+U 1 1 3EBF82CF
+P 6500 1500
+F 0 "#PWR09" H 6500 1500 40 0001 C CNN
+F 1 "GND" H 6500 1430 40 0001 C CNN
+F 2 "" H 6500 1500 60 0001 C CNN
+F 3 "" H 6500 1500 60 0001 C CNN
+ 1 6500 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C1
+U 1 1 3EBF82C6
+P 6500 1250
+F 0 "C1" H 6550 1350 50 0000 L CNN
+F 1 "1uF" H 6550 1151 50 0000 L CNN
+F 2 "Discret:CP5" H 6500 1250 60 0001 C CNN
+F 3 "" H 6500 1250 60 0001 C CNN
+ 1 6500 1250
+ 1 0 0 -1
+$EndComp
+Connection ~ 6300 3300
+Connection ~ 6300 2600
+Connection ~ 6300 1900
+Wire Wire Line
+ 6300 1900 6300 1950
+Wire Wire Line
+ 6300 2650 6300 2600
+Wire Wire Line
+ 6300 3350 6300 3300
+Wire Wire Line
+ 5900 3300 6400 3300
+Wire Wire Line
+ 5900 2600 6400 2600
+Wire Wire Line
+ 5850 1900 6400 1900
+$Comp
+L GND #PWR010
+U 1 1 4D528089
+P 6300 3800
+F 0 "#PWR010" H 6300 3800 40 0001 C CNN
+F 1 "GND" H 6300 3730 40 0001 C CNN
+F 2 "" H 6300 3800 60 0001 C CNN
+F 3 "" H 6300 3800 60 0001 C CNN
+ 1 6300 3800
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C5
+U 1 1 4D528086
+P 6300 3550
+F 0 "C5" H 6350 3650 50 0000 L CNN
+F 1 "100pF" H 6350 3450 50 0000 L CNN
+F 2 "Discret:C2" H 6300 3550 60 0001 C CNN
+F 3 "" H 6300 3550 60 0001 C CNN
+ 1 6300 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R12
+U 1 1 4D528083
+P 6650 3300
+F 0 "R12" V 6730 3300 50 0000 C CNN
+F 1 "100" V 6650 3300 50 0000 C CNN
+F 2 "Discret:R4" H 6650 3300 60 0001 C CNN
+F 3 "" H 6650 3300 60 0001 C CNN
+ 1 6650 3300
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR011
+U 1 1 4D528088
+P 6300 3100
+F 0 "#PWR011" H 6300 3100 40 0001 C CNN
+F 1 "GND" H 6300 3030 40 0001 C CNN
+F 2 "" H 6300 3100 60 0001 C CNN
+F 3 "" H 6300 3100 60 0001 C CNN
+ 1 6300 3100
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C2
+U 1 1 4D528085
+P 6300 2850
+F 0 "C2" H 6350 2950 50 0000 L CNN
+F 1 "100pF" H 6350 2750 50 0000 L CNN
+F 2 "Discret:C2" H 6300 2850 60 0001 C CNN
+F 3 "" H 6300 2850 60 0001 C CNN
+ 1 6300 2850
+ 1 0 0 -1
+$EndComp
+Connection ~ 5900 1000
+Connection ~ 6200 1000
+Wire Wire Line
+ 4300 1000 4200 1000
+Wire Wire Line
+ 2300 1000 2300 3700
+Wire Wire Line
+ 4700 1000 6900 1000
+Wire Wire Line
+ 5900 1000 5900 1050
+Wire Wire Line
+ 6200 1000 6200 1050
+$Comp
+L GND #PWR012
+U 1 1 3EBF81B3
+P 6200 1600
+F 0 "#PWR012" H 6200 1600 40 0001 C CNN
+F 1 "GND" H 6200 1530 40 0001 C CNN
+F 2 "" H 6200 1600 60 0001 C CNN
+F 3 "" H 6200 1600 60 0001 C CNN
+ 1 6200 1600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR013
+U 1 1 4D528087
+P 6300 2400
+F 0 "#PWR013" H 6300 2400 40 0001 C CNN
+F 1 "GND" H 6300 2330 40 0001 C CNN
+F 2 "" H 6300 2400 60 0001 C CNN
+F 3 "" H 6300 2400 60 0001 C CNN
+ 1 6300 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C3
+U 1 1 4D528084
+P 6300 2150
+F 0 "C3" H 6350 2250 50 0000 L CNN
+F 1 "100pF" H 6350 2050 50 0000 L CNN
+F 2 "Discret:C2" H 6300 2150 60 0001 C CNN
+F 3 "" H 6300 2150 60 0001 C CNN
+ 1 6300 2150
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R14
+U 1 1 3EBF819B
+P 6650 1900
+F 0 "R14" V 6730 1900 50 0000 C CNN
+F 1 "100" V 6650 1900 50 0000 C CNN
+F 2 "Discret:R4" H 6650 1900 60 0001 C CNN
+F 3 "" H 6650 1900 60 0001 C CNN
+ 1 6650 1900
+ 0 1 1 0
+$EndComp
+$Comp
+L R R5
+U 1 1 3EBF818E
+P 6200 1300
+F 0 "R5" H 6050 1500 50 0000 C CNN
+F 1 "1K" V 6200 1300 50 0000 C CNN
+F 2 "Discret:R4" H 6200 1300 60 0001 C CNN
+F 3 "" H 6200 1300 60 0001 C CNN
+ 1 6200 1300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R2
+U 1 1 3EBF8187
+P 5900 1300
+F 0 "R2" H 5750 1500 50 0000 C CNN
+F 1 "5,1K" V 5900 1300 50 0000 C CNN
+F 2 "Discret:R4" H 5900 1300 60 0001 C CNN
+F 3 "" H 5900 1300 60 0001 C CNN
+ 1 5900 1300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D2
+U 1 1 3EBF8176
+P 7100 1000
+F 0 "D2" H 7100 1100 50 0000 C CNN
+F 1 "BAT46" H 7100 900 50 0000 C CNN
+F 2 "Discret:D3" H 7100 1000 60 0001 C CNN
+F 3 "" H 7100 1000 60 0001 C CNN
+ 1 7100 1000
+ -1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D1
+U 1 1 3EBF815E
+P 4500 1000
+F 0 "D1" H 4500 1100 50 0000 C CNN
+F 1 "BAT46" H 4500 900 50 0000 C CNN
+F 2 "Discret:D3" H 4500 1000 60 0001 C CNN
+F 3 "" H 4500 1000 60 0001 C CNN
+ 1 4500 1000
+ -1 0 0 -1
+$EndComp
+Connection ~ 2350 2000
+Wire Wire Line
+ 2350 1800 2350 2600
+Wire Wire Line
+ 2350 2600 2200 2600
+Wire Wire Line
+ 2200 2000 2350 2000
+Wire Wire Line
+ 2350 1800 2200 1800
+Wire Wire Line
+ 2500 1750 2500 1700
+Wire Wire Line
+ 2500 1700 2200 1700
+$Comp
+L GND #PWR014
+U 1 1 3EBF8100
+P 2500 1750
+F 0 "#PWR014" H 2500 1750 40 0001 C CNN
+F 1 "GND" H 2500 1680 40 0001 C CNN
+F 2 "" H 2500 1750 60 0001 C CNN
+F 3 "" H 2500 1750 60 0001 C CNN
+ 1 2500 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR015
+U 1 1 3EBF80DD
+P 4650 2000
+F 0 "#PWR015" H 4650 2000 40 0001 C CNN
+F 1 "GND" H 4650 1930 40 0001 C CNN
+F 2 "" H 4650 2000 60 0001 C CNN
+F 3 "" H 4650 2000 60 0001 C CNN
+ 1 4650 2000
+ 1 0 0 -1
+$EndComp
+Connection ~ 4800 3600
+Connection ~ 4800 2900
+Text Label 2600 1000 0 60 ~ 0
+VCC_SENSE-ERROR*
+Text Label 2400 3800 0 60 ~ 0
+TDI-DIN-D0
+Text Label 2400 3600 0 60 ~ 0
+CLK-D1
+Text Label 2400 3400 0 60 ~ 0
+TMS-PROG-D2
+Text Label 2400 3200 0 60 ~ 0
+CTRL-D3
+Text Label 2400 3000 0 60 ~ 0
+TD0-PROG-D4
+Wire Wire Line
+ 2300 1000 3700 1000
+Wire Wire Line
+ 2300 3700 2200 3700
+Wire Wire Line
+ 3700 4200 3600 4200
+Wire Wire Line
+ 3600 4200 3600 3400
+Wire Wire Line
+ 3600 3400 2200 3400
+Wire Wire Line
+ 2200 3600 3400 3600
+Wire Wire Line
+ 3400 3600 3400 3300
+Wire Wire Line
+ 3400 3300 3700 3300
+Wire Wire Line
+ 2200 3200 3400 3200
+Wire Wire Line
+ 3400 3200 3400 2900
+Wire Wire Line
+ 3400 2900 3700 2900
+Wire Wire Line
+ 2200 3800 3300 3800
+Wire Wire Line
+ 3300 3800 3300 2600
+Wire Wire Line
+ 3300 2600 3700 2600
+Wire Wire Line
+ 2200 3000 3200 3000
+Wire Wire Line
+ 3200 3000 3200 2250
+Wire Wire Line
+ 3200 2250 3700 2250
+Text Label 2600 1600 0 60 ~ 0
+DONE-SELECT*
+NoConn ~ 2150 6900
+NoConn ~ 2150 6250
+NoConn ~ 2150 5600
+Connection ~ 1150 7200
+Connection ~ 1150 6900
+Connection ~ 1150 6550
+Connection ~ 1150 5900
+Wire Wire Line
+ 1700 5900 1150 5900
+Wire Wire Line
+ 1150 6550 1700 6550
+Wire Wire Line
+ 1150 7200 1700 7200
+$Comp
+L GND #PWR016
+U 1 1 3EBF7F0D
+P 1150 7300
+F 0 "#PWR016" H 1150 7300 40 0001 C CNN
+F 1 "GND" H 1150 7230 40 0001 C CNN
+F 2 "" H 1150 7300 60 0001 C CNN
+F 3 "" H 1150 7300 60 0001 C CNN
+ 1 1150 7300
+ 1 0 0 -1
+$EndComp
+Connection ~ 1150 6250
+Wire Wire Line
+ 1150 6250 1250 6250
+Wire Wire Line
+ 1150 6900 1250 6900
+Wire Wire Line
+ 1150 5600 1150 7300
+Wire Wire Line
+ 1150 5600 1250 5600
+$Comp
+L 74LS125 U2
+U 4 1 3EBF7EEC
+P 1700 5600
+F 0 "U2" H 1700 5700 50 0000 L BNN
+F 1 "74LS125" H 1750 5450 40 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 1700 5600 60 0001 C CNN
+F 3 "" H 1700 5600 60 0001 C CNN
+ 4 1700 5600
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U2
+U 3 1 3EBF7EDF
+P 1700 6250
+F 0 "U2" H 1700 6350 50 0000 L BNN
+F 1 "74LS125" H 1750 6100 40 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 1700 6250 60 0001 C CNN
+F 3 "" H 1700 6250 60 0001 C CNN
+ 3 1700 6250
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U2
+U 2 1 3EBF7EDD
+P 1700 6900
+F 0 "U2" H 1700 7000 50 0000 L BNN
+F 1 "74LS125" H 1750 6750 40 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 1700 6900 60 0001 C CNN
+F 3 "" H 1700 6900 60 0001 C CNN
+ 2 1700 6900
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5450 3600 4800 3600
+Wire Wire Line
+ 4200 2900 5450 2900
+Wire Wire Line
+ 5000 3300 4200 3300
+Wire Wire Line
+ 5000 2600 4200 2600
+Wire Wire Line
+ 4200 2250 5400 2250
+Wire Wire Line
+ 5400 2250 5400 2200
+Wire Wire Line
+ 4650 2000 4650 1900
+$Comp
+L 74LS125 U1
+U 3 1 3EBF7DB3
+P 5450 3300
+F 0 "U1" H 5450 3400 50 0000 L BNN
+F 1 "74LS125" H 5500 3151 50 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 5450 3300 60 0001 C CNN
+F 3 "" H 5450 3300 60 0001 C CNN
+ 3 5450 3300
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U1
+U 2 1 3EBF7DAD
+P 5450 2600
+F 0 "U1" H 5450 2700 50 0000 L BNN
+F 1 "74LS125" H 5500 2451 50 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 5450 2600 60 0001 C CNN
+F 3 "" H 5450 2600 60 0001 C CNN
+ 2 5450 2600
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U1
+U 1 1 3EBF7D9F
+P 5400 1900
+F 0 "U1" H 5400 2000 50 0000 L BNN
+F 1 "74LS125" H 5450 1750 50 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 5400 1900 60 0001 C CNN
+F 3 "" H 5400 1900 60 0001 C CNN
+ 1 5400 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS125 U2
+U 1 1 3EBF7D92
+P 4650 1600
+F 0 "U2" H 4650 1700 50 0000 L BNN
+F 1 "74LS125" H 4700 1450 50 0000 L TNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 4650 1600 60 0001 C CNN
+F 3 "" H 4650 1600 60 0001 C CNN
+ 1 4650 1600
+ -1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2200 1600 3700 1600
+$Comp
+L R R9
+U 1 1 3EBF7D33
+P 3950 4200
+F 0 "R9" V 4030 4200 50 0000 C CNN
+F 1 "100" V 3950 4200 50 0000 C CNN
+F 2 "Discret:R4" H 3950 4200 60 0001 C CNN
+F 3 "" H 3950 4200 60 0001 C CNN
+ 1 3950 4200
+ 0 1 1 0
+$EndComp
+$Comp
+L R R10
+U 1 1 3EBF7D31
+P 3950 3300
+F 0 "R10" V 4030 3300 50 0000 C CNN
+F 1 "100" V 3950 3300 50 0000 C CNN
+F 2 "Discret:R4" H 3950 3300 60 0001 C CNN
+F 3 "" H 3950 3300 60 0001 C CNN
+ 1 3950 3300
+ 0 1 1 0
+$EndComp
+$Comp
+L R R8
+U 1 1 4D528080
+P 3950 2900
+F 0 "R8" V 4030 2900 50 0000 C CNN
+F 1 "100" V 3950 2900 50 0000 C CNN
+F 2 "Discret:R4" H 3950 2900 60 0001 C CNN
+F 3 "" H 3950 2900 60 0001 C CNN
+ 1 3950 2900
+ 0 1 1 0
+$EndComp
+$Comp
+L R R7
+U 1 1 4D52807F
+P 3950 2600
+F 0 "R7" V 4030 2600 50 0000 C CNN
+F 1 "100" V 3950 2600 50 0000 C CNN
+F 2 "Discret:R4" H 3950 2600 60 0001 C CNN
+F 3 "" H 3950 2600 60 0001 C CNN
+ 1 3950 2600
+ 0 1 1 0
+$EndComp
+$Comp
+L R R6
+U 1 1 3EBF7D26
+P 3950 2250
+F 0 "R6" V 4030 2250 50 0000 C CNN
+F 1 "100" V 3950 2250 50 0000 C CNN
+F 2 "Discret:R4" H 3950 2250 60 0001 C CNN
+F 3 "" H 3950 2250 60 0001 C CNN
+ 1 3950 2250
+ 0 1 1 0
+$EndComp
+$Comp
+L R R4
+U 1 1 3EBF7D22
+P 3950 1600
+F 0 "R4" V 4030 1600 50 0000 C CNN
+F 1 "47" V 3950 1600 50 0000 C CNN
+F 2 "Discret:R4" H 3950 1600 60 0001 C CNN
+F 3 "" H 3950 1600 60 0001 C CNN
+ 1 3950 1600
+ 0 1 1 0
+$EndComp
+$Comp
+L R R1
+U 1 1 3EBF7D16
+P 3950 1000
+F 0 "R1" V 4030 1000 50 0000 C CNN
+F 1 "100" V 3950 1000 50 0000 C CNN
+F 2 "Discret:R4" H 3950 1000 60 0001 C CNN
+F 3 "" H 3950 1000 60 0001 C CNN
+ 1 3950 1000
+ 0 1 1 0
+$EndComp
+$Comp
+L DB25 J1
+U 1 1 3EBF7D04
+P 1750 2800
+F 0 "J1" H 1800 4150 70 0000 C CNN
+F 1 "DB25MALE" H 1700 1450 70 0000 C CNN
+F 2 "Connect:DB25M_CI" H 1750 2800 60 0001 C CNN
+F 3 "" H 1750 2800 60 0001 C CNN
+ 1 1750 2800
+ -1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9400 1000 9400 3500
+Connection ~ 7650 1000
+$Comp
+L GND #PWR017
+U 1 1 5510FC05
+P 4950 2000
+F 0 "#PWR017" H 4950 2000 30 0001 C CNN
+F 1 "GND" H 4950 1930 30 0001 C CNN
+F 2 "" H 4950 2000 60 0000 C CNN
+F 3 "" H 4950 2000 60 0000 C CNN
+ 1 4950 2000
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4950 1900 4950 2000
+Wire Wire Line
+ 5100 1600 5900 1600
+Wire Wire Line
+ 5900 1550 5900 1900
+Connection ~ 5900 1900
+Connection ~ 5900 1600
+Wire Wire Line
+ 10200 4850 10200 4800
+Wire Wire Line
+ 6300 4650 6300 4700
+Wire Wire Line
+ 6300 3750 6300 3800
+Wire Wire Line
+ 6300 3100 6300 3050
+Wire Wire Line
+ 6300 2400 6300 2350
+Wire Wire Line
+ 6200 1600 6200 1550
+Wire Wire Line
+ 6500 1500 6500 1450
+Wire Wire Line
+ 6100 950 6100 1000
+Connection ~ 6100 1000
+Wire Wire Line
+ 5800 1000 5800 950
+Connection ~ 5800 1000
+Wire Wire Line
+ 8450 2650 8500 2650
+$EndSCHEMATC
diff --git a/demos/sonde xilinx/sonde xilinx_schlib.lib b/demos/sonde xilinx/sonde xilinx_schlib.lib
new file mode 100644
index 0000000..4415ec6
--- /dev/null
+++ b/demos/sonde xilinx/sonde xilinx_schlib.lib
@@ -0,0 +1,318 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 74LS125
+#
+DEF 74LS125 U 0 30 Y Y 4 F N
+F0 "U" 0 100 50 H V L BNN
+F1 "74LS125" 50 -150 40 H V L TNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 7 -150 -150 0 U 50 30 0 0 W N
+X VCC 14 -150 150 0 D 50 30 0 0 W N
+X E 1 0 -300 220 U 50 30 1 0 I I
+X E 4 0 -300 220 U 50 30 2 0 I I
+X E 10 0 -300 220 U 50 30 3 0 I I
+X E 13 0 -300 220 U 50 30 4 0 I I
+P 4 0 1 0 -150 150 -150 -150 150 0 -150 150 N
+X D 2 -450 0 300 R 50 30 1 1 I
+X O 3 450 0 300 L 50 30 1 1 T
+X D 5 -450 0 300 R 50 30 2 1 I
+X O 6 450 0 300 L 50 30 2 1 T
+X O 8 450 0 300 L 50 30 3 1 T
+X D 9 -450 0 300 R 50 30 3 1 I
+X O 11 450 0 300 L 50 30 4 1 T
+X D 12 -450 0 300 R 50 30 4 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_6
+#
+DEF CONN_6 P 0 30 Y N 1 F N
+F0 "P" -50 0 60 V V C CNN
+F1 "CONN_6" 50 0 60 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 300 100 -300 0 1 0 N
+X 1 1 -350 250 250 R 60 60 1 1 P I
+X 2 2 -350 150 250 R 60 60 1 1 P I
+X 3 3 -350 50 250 R 60 60 1 1 P I
+X 4 4 -350 -50 250 R 60 60 1 1 P I
+X 5 5 -350 -150 250 R 60 60 1 1 P I
+X 6 6 -350 -250 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB25
+#
+DEF DB25 J 0 40 Y N 1 F N
+F0 "J" 50 1350 70 H V C CNN
+F1 "DB25" -50 -1350 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB25*
+$ENDFPLIST
+DRAW
+A -109 1270 41 1799 774 0 1 8 N -150 1270 -100 1310
+A -108 -1259 42 -1787 -788 0 1 8 N -150 -1260 -100 -1300
+A 116 -1169 34 -657 -15 0 1 8 N 130 -1200 150 -1170
+A 117 1170 32 664 1 0 1 8 N 130 1199 149 1170
+C -70 -1200 30 0 1 0 N
+C -70 -1000 30 0 1 0 N
+C -70 -800 30 0 1 0 N
+C -70 -600 30 0 1 0 N
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C -70 600 30 0 1 0 N
+C -70 800 30 0 1 0 N
+C -70 1000 30 0 1 0 N
+C -70 1200 30 0 1 0 N
+C 50 -1100 30 0 1 0 N
+C 50 -900 30 0 1 0 N
+C 50 -700 30 0 1 0 N
+C 50 -500 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+C 50 500 30 0 1 0 N
+C 50 700 30 0 1 0 N
+C 50 900 30 0 1 0 N
+C 50 1100 30 0 1 0 N
+P 2 0 1 8 -150 -1260 -150 1270 N
+P 2 0 1 0 -150 -1200 -100 -1200 N
+P 2 0 1 0 -150 -1100 20 -1100 N
+P 2 0 1 0 -150 -1000 -100 -1000 N
+P 2 0 1 0 -150 -900 20 -900 N
+P 2 0 1 0 -150 -800 -100 -800 N
+P 2 0 1 0 -150 -700 20 -700 N
+P 2 0 1 0 -150 -600 -100 -600 N
+P 2 0 1 0 -150 -500 20 -500 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -150 500 20 500 N
+P 2 0 1 0 -150 600 -100 600 N
+P 2 0 1 0 -150 700 20 700 N
+P 2 0 1 0 -150 800 -100 800 N
+P 2 0 1 0 -150 900 20 900 N
+P 2 0 1 0 -150 1000 -100 1000 N
+P 2 0 1 0 -150 1100 20 1100 N
+P 2 0 1 0 -150 1200 -100 1200 N
+P 2 0 1 8 -100 -1300 130 -1200 N
+P 2 0 1 8 130 1200 -100 1310 N
+P 2 0 1 8 150 -1170 150 1170 N
+X 1 1 -450 -1200 300 R 60 60 1 1 P
+X 2 2 -450 -1000 300 R 60 60 1 1 P
+X 3 3 -450 -800 300 R 60 60 1 1 P
+X 4 4 -450 -600 300 R 60 60 1 1 P
+X 5 5 -450 -400 300 R 60 60 1 1 P
+X 6 6 -450 -200 300 R 60 60 1 1 P
+X 7 7 -450 0 300 R 60 60 1 1 P
+X 8 8 -450 200 300 R 60 60 1 1 P
+X 9 9 -450 400 300 R 60 60 1 1 P
+X 10 10 -450 600 300 R 60 60 1 1 P
+X P20 20 -450 100 300 R 60 60 1 1 P
+X 11 11 -450 800 300 R 60 60 1 1 P
+X P21 21 -450 300 300 R 60 60 1 1 P
+X 12 12 -450 1000 300 R 60 60 1 1 P
+X P22 22 -450 500 300 R 60 60 1 1 P
+X 13 13 -450 1200 300 R 60 60 1 1 P
+X P23 23 -450 700 300 R 60 60 1 1 P
+X P14 14 -450 -1100 300 R 60 60 1 1 P
+X P24 24 -450 900 300 R 60 60 1 1 P
+X P15 15 -450 -900 300 R 60 60 1 1 P
+X P25 25 -450 1100 300 R 60 60 1 1 P
+X P16 16 -450 -700 300 R 60 60 1 1 P
+X P17 17 -450 -500 300 R 60 60 1 1 P
+X P18 18 -450 -300 300 R 60 60 1 1 P
+X P19 19 -450 -100 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/test_pads_inside_pads/test_pads_inside_pads-cache.lib b/demos/test_pads_inside_pads/test_pads_inside_pads-cache.lib
new file mode 100644
index 0000000..7c107a8
--- /dev/null
+++ b/demos/test_pads_inside_pads/test_pads_inside_pads-cache.lib
@@ -0,0 +1,18 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/test_pads_inside_pads/test_pads_inside_pads.kicad_pcb b/demos/test_pads_inside_pads/test_pads_inside_pads.kicad_pcb
new file mode 100644
index 0000000..e07d003
--- /dev/null
+++ b/demos/test_pads_inside_pads/test_pads_inside_pads.kicad_pcb
@@ -0,0 +1,195 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-04-25 BZR 5623)-product")
+
+ (general
+ (links 12)
+ (no_connects 0)
+ (area 79.121 35.179 111.052429 65.3542)
+ (thickness 1.6002)
+ (drawings 0)
+ (tracks 4)
+ (zones 0)
+ (modules 4)
+ (nets 3)
+ )
+
+ (page A4)
+ (layers
+ (0 Dessus signal)
+ (31 Dessous signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.2032)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2032)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 1.524 1.524)
+ (pad_drill 0.8128)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 0 0)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions true)
+ (excludeedgelayer true)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 0)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 /NET1)
+ (net 2 /NET2)
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.254)
+ (trace_width 0.2032)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net /NET1)
+ (add_net /NET2)
+ )
+
+ (module 1pin (layer Dessus) (tedit 553E7303) (tstamp 4EE505BA)
+ (at 89.535 45.593)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4EDF7CC5)
+ (fp_text reference P1 (at 0 -12) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 12) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_line (start -11 -11) (end 11 -11) (layer F.SilkS) (width 0.15))
+ (fp_line (start 11 -11) (end 11 11) (layer F.SilkS) (width 0.15))
+ (fp_line (start 11 11) (end -11 11) (layer F.SilkS) (width 0.15))
+ (fp_line (start -11 11) (end -11 -11) (layer F.SilkS) (width 0.15))
+ (pad 1 smd rect (at 0 0) (size 20.32 20.32) (layers Dessus F.Paste F.Mask)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at -8.255 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at -3.81 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at 0 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at 3.81 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at 8.255 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at 8.255 -4.445) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at 3.81 -4.445) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at 0 -4.445) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at -3.81 -4.445) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ (pad 1 thru_hole circle (at -8.255 -4.445) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ )
+
+ (module 1pin (layer Dessus) (tedit 200000) (tstamp 4EE505BC)
+ (at 107.696 45.593)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4EDF7CC0)
+ (fp_text reference P2 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 2 /NET2))
+ )
+
+ (module 1pin (layer Dessus) (tedit 200000) (tstamp 4EE505BE)
+ (at 87.122 61.468)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4EE5056C)
+ (fp_text reference P3 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /NET1))
+ )
+
+ (module 1pin (layer Dessus) (tedit 4EE8A1D1) (tstamp 4EE505C0)
+ (at 107.061 61.468)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4EE5056D)
+ (fp_text reference P4 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_text value CONN_1 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.254)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)
+ (net 1 /NET1) (die_length 7.62))
+ )
+
+ (segment (start 107.061 61.468) (end 87.122 61.468) (width 0.2032) (layer Dessous) (net 1))
+ (segment (start 103.759 41.148) (end 107.696 45.085) (width 0.2032) (layer Dessous) (net 2))
+ (segment (start 107.696 45.085) (end 107.696 45.593) (width 0.2032) (layer Dessous) (net 2))
+ (segment (start 97.79 41.148) (end 103.759 41.148) (width 0.2032) (layer Dessous) (net 2))
+
+)
diff --git a/demos/test_pads_inside_pads/test_pads_inside_pads.net b/demos/test_pads_inside_pads/test_pads_inside_pads.net
new file mode 100644
index 0000000..25e493a
--- /dev/null
+++ b/demos/test_pads_inside_pads/test_pads_inside_pads.net
@@ -0,0 +1,44 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/test_pads_inside_pads/test_pads_inside_pads.sch)
+ (date "09/01/2014 15:29:02")
+ (tool "eeschema (2014-01-08 BZR 4616)-product"))
+ (components
+ (comp (ref P4)
+ (value CONN_1)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4EE5056D))
+ (comp (ref P3)
+ (value CONN_1)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4EE5056C))
+ (comp (ref P1)
+ (value CONN_1)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4EDF7CC5))
+ (comp (ref P2)
+ (value CONN_1)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 4EDF7CC0)))
+ (libparts
+ (libpart (lib conn) (part CONN_1)
+ (description "1 pin")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_1))
+ (pins
+ (pin (num 1) (name 1) (type passive)))))
+ (libraries
+ (library (logical conn)
+ (uri F:\kicad\share\library\conn.lib)))
+ (nets
+ (net (code 1) (name /NET1)
+ (node (ref P4) (pin 1))
+ (node (ref P3) (pin 1)))
+ (net (code 2) (name /NET2)
+ (node (ref P1) (pin 1))
+ (node (ref P2) (pin 1))))) \ No newline at end of file
diff --git a/demos/test_pads_inside_pads/test_pads_inside_pads.pro b/demos/test_pads_inside_pads/test_pads_inside_pads.pro
new file mode 100644
index 0000000..96ac357
--- /dev/null
+++ b/demos/test_pads_inside_pads/test_pads_inside_pads.pro
@@ -0,0 +1,108 @@
+update=13/12/2011 11:04:14
+version=1
+last_client=pcbnew
+[cvpcb]
+version=1
+NetITyp=0
+NetIExt=.net
+PkgIExt=.pkg
+NetDir=
+LibDir=
+NetType=0
+[cvpcb/libraries]
+EquName1=devcms
+[eeschema]
+version=1
+LibDir=
+NetFmt=1
+HPGLSpd=20
+HPGLDm=15
+HPGLNum=1
+offX_A4=0
+offY_A4=0
+offX_A3=0
+offY_A3=0
+offX_A2=0
+offY_A2=0
+offX_A1=0
+offY_A1=0
+offX_A0=0
+offY_A0=0
+offX_A=0
+offY_A=0
+offX_B=0
+offY_B=0
+offX_C=0
+offY_C=0
+offX_D=0
+offY_D=0
+offX_E=0
+offY_E=0
+RptD_X=0
+RptD_Y=100
+RptLab=1
+SimCmd=
+UseNetN=0
+LabSize=60
+[eeschema/libraries]
+LibName1=power
+LibName2=device
+LibName3=transistors
+LibName4=conn
+LibName5=linear
+LibName6=regul
+LibName7=74xx
+LibName8=cmos4000
+LibName9=adc-dac
+LibName10=memory
+LibName11=xilinx
+LibName12=special
+LibName13=microcontrollers
+LibName14=dsp
+LibName15=microchip
+LibName16=analog_switches
+LibName17=motorola
+LibName18=texas
+LibName19=intel
+LibName20=audio
+LibName21=interface
+LibName22=digital-audio
+LibName23=philips
+LibName24=display
+LibName25=cypress
+LibName26=siliconi
+LibName27=opto
+LibName28=atmel
+LibName29=contrib
+LibName30=valves
+[general]
+version=1
+[pcbnew]
+version=1
+PadDrlX=320
+PadDimH=600
+PadDimV=600
+BoardThickness=630
+TxtPcbV=800
+TxtPcbH=600
+TxtModV=600
+TxtModH=600
+TxtModW=120
+VEgarde=100
+DrawLar=150
+EdgeLar=150
+TxtLar=120
+MSegLar=150
+LastNetListRead=
+[pcbnew/libraries]
+LibDir=
+LibName1=sockets
+LibName2=connect
+LibName3=discret
+LibName4=pin_array
+LibName5=divers
+LibName6=libcms
+LibName7=display
+LibName8=valves
+LibName9=led
+LibName10=dip_sockets
diff --git a/demos/test_pads_inside_pads/test_pads_inside_pads.sch b/demos/test_pads_inside_pads/test_pads_inside_pads.sch
new file mode 100644
index 0000000..f193dc4
--- /dev/null
+++ b/demos/test_pads_inside_pads/test_pads_inside_pads.sch
@@ -0,0 +1,99 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:dsp
+LIBS:microchip
+LIBS:analog_switches
+LIBS:motorola
+LIBS:texas
+LIBS:intel
+LIBS:audio
+LIBS:interface
+LIBS:digital-audio
+LIBS:philips
+LIBS:display
+LIBS:cypress
+LIBS:siliconi
+LIBS:opto
+LIBS:atmel
+LIBS:contrib
+LIBS:valves
+LIBS:test_pads_inside_pads-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date "19 dec 2011"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 4150 1750 3750 1750
+Wire Wire Line
+ 4150 1450 3750 1450
+Text Label 3850 1450 0 60 ~ 0
+NET1
+$Comp
+L CONN_1 P4
+U 1 1 4EE5056D
+P 4300 1450
+F 0 "P4" H 4380 1450 40 0000 L CNN
+F 1 "CONN_1" H 4300 1505 30 0001 C CNN
+F 2 "Connect:1pin" H 4300 1400 60 0000 C CNN
+F 3 "" H 4300 1450 60 0001 C CNN
+ 1 4300 1450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P3
+U 1 1 4EE5056C
+P 3600 1450
+F 0 "P3" H 3680 1450 40 0000 L CNN
+F 1 "CONN_1" H 3600 1505 30 0001 C CNN
+F 2 "Connect:1pin" H 3600 1500 60 0000 C CNN
+F 3 "" H 3600 1450 60 0001 C CNN
+ 1 3600 1450
+ -1 0 0 1
+$EndComp
+$Comp
+L CONN_1 P1
+U 1 1 4EDF7CC5
+P 3600 1750
+F 0 "P1" H 3680 1750 40 0000 L CNN
+F 1 "CONN_1" H 3600 1805 30 0001 C CNN
+F 2 "Connect:1pin" H 3600 1800 60 0000 C CNN
+F 3 "" H 3600 1750 60 0001 C CNN
+ 1 3600 1750
+ -1 0 0 1
+$EndComp
+$Comp
+L CONN_1 P2
+U 1 1 4EDF7CC0
+P 4300 1750
+F 0 "P2" H 4380 1750 40 0000 L CNN
+F 1 "CONN_1" H 4300 1805 30 0001 C CNN
+F 2 "Connect:1pin" H 4300 1700 60 0000 C CNN
+F 3 "" H 4300 1750 60 0001 C CNN
+ 1 4300 1750
+ 1 0 0 -1
+$EndComp
+Text Label 3850 1750 0 60 ~ 0
+NET2
+$EndSCHEMATC
diff --git a/demos/test_xil_95108/carte_test-cache.lib b/demos/test_xil_95108/carte_test-cache.lib
new file mode 100644
index 0000000..a4ad919
--- /dev/null
+++ b/demos/test_xil_95108/carte_test-cache.lib
@@ -0,0 +1,667 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +12V
+#
+DEF +12V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "+12V" 0 140 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -30 50 0 100 N
+P 2 0 1 0 0 0 0 100 N
+P 2 0 1 0 0 100 30 50 N
+X +12V 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# -12V
+#
+DEF -12V #PWR 0 0 Y Y 1 F N
+F0 "#PWR" 0 100 50 H I C CNN
+F1 "-12V" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X -12V 1 0 0 0 U 20 20 0 0 W N
+P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F
+ENDDRAW
+ENDDEF
+#
+# 74HCT04
+#
+DEF 74HCT04 U 0 30 Y Y 6 F N
+F0 "U" 150 100 40 H V C CNN
+F1 "74HCT04" 200 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 74HC14 74HC04 74LS14
+DRAW
+P 4 0 0 0 -150 150 -150 -150 150 0 -150 150 N
+X GND 7 -50 -100 0 U 30 20 0 0 W N
+X VCC 14 -50 100 0 D 30 20 0 0 W N
+X ~ 1 -450 0 300 R 60 60 1 1 I
+X ~ 2 450 0 300 L 60 60 1 1 O I
+X ~ 3 -450 0 300 R 60 60 2 1 I
+X ~ 4 450 0 300 L 60 60 2 1 O I
+X ~ 5 -450 0 300 R 60 60 3 1 I
+X ~ 6 450 0 300 L 60 60 3 1 O I
+X ~ 8 450 0 300 L 60 60 4 1 O I
+X ~ 9 -450 0 300 R 60 60 4 1 I
+X ~ 10 450 0 300 L 60 60 5 1 O I
+X ~ 11 -450 0 300 R 60 60 5 1 I
+X ~ 12 450 0 300 L 60 60 6 1 O I
+X ~ 13 -450 0 300 R 60 60 6 1 I
+X ~ 1 -450 0 300 R 60 60 1 2 I I
+X ~ 2 450 0 300 L 60 60 1 2 O
+X ~ 3 -450 0 300 R 60 60 2 2 I I
+X ~ 4 450 0 300 L 60 60 2 2 O
+X ~ 5 -450 0 300 R 60 60 3 2 I I
+X ~ 6 450 0 300 L 60 60 3 2 O
+X ~ 8 450 0 300 L 60 60 4 2 O
+X ~ 9 -450 0 300 R 60 60 4 2 I I
+X ~ 10 450 0 300 L 60 60 5 2 O
+X ~ 11 -450 0 300 R 60 60 5 2 I I
+X ~ 12 450 0 300 L 60 60 6 2 O
+X ~ 13 -450 0 300 R 60 60 6 2 I I
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "C" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ C?
+ C_????_*
+ C_????
+ SMD*_c
+ Capacitor*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_2X2
+#
+DEF CONN_2X2 P 0 40 Y N 1 F N
+F0 "P" 0 150 50 H V C CNN
+F1 "CONN_2X2" 10 -130 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 100 100 -100 0 1 0 N
+X 1 1 -400 50 300 R 60 60 1 1 P I
+X 2 2 400 50 300 L 60 60 1 1 P I
+X 3 3 -400 -50 300 R 60 60 1 1 P I
+X 4 4 400 -50 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_3
+#
+DEF CONN_3 K 0 40 Y N 1 F N
+F0 "K" -50 0 50 V V C CNN
+F1 "CONN_3" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 0 250 R 60 60 1 1 P I
+X P3 3 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "CP" 25 -100 50 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ CP*
+ Elko*
+ TantalC*
+ C*elec
+ c_elec*
+ SMD*_Pol
+$ENDFPLIST
+DRAW
+S -90 20 -90 40 0 1 0 N
+S -90 20 90 20 0 1 0 N
+S -70 90 -30 90 0 1 0 N
+S -50 70 -50 110 0 1 0 N
+S 90 -20 -90 -40 0 1 0 F
+S 90 40 -90 40 0 1 0 N
+S 90 40 90 20 0 1 0 N
+X ~ 1 0 150 110 D 40 40 1 1 P
+X ~ 2 0 -150 110 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB25
+#
+DEF DB25 J 0 40 Y N 1 F N
+F0 "J" 50 1350 70 H V C CNN
+F1 "DB25" -50 -1350 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A -109 1270 41 1799 774 0 1 0 N -150 1270 -100 1310
+A -108 -1259 42 -1787 -788 0 1 0 N -150 -1260 -100 -1300
+A 116 -1169 34 -657 -15 0 1 0 N 130 -1200 150 -1170
+A 117 1170 32 664 1 0 1 0 N 130 1199 149 1170
+C -70 -1200 30 0 1 0 N
+C -70 -1000 30 0 1 0 N
+C -70 -800 30 0 1 0 N
+C -70 -600 30 0 1 0 N
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C -70 600 30 0 1 0 N
+C -70 800 30 0 1 0 N
+C -70 1000 30 0 1 0 N
+C -70 1200 30 0 1 0 N
+C 50 -1100 30 0 1 0 N
+C 50 -900 30 0 1 0 N
+C 50 -700 30 0 1 0 N
+C 50 -500 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+C 50 500 30 0 1 0 N
+C 50 700 30 0 1 0 N
+C 50 900 30 0 1 0 N
+C 50 1100 30 0 1 0 N
+P 2 0 1 0 -150 -1260 -150 1270 N
+P 2 0 1 0 -150 -1200 -100 -1200 N
+P 2 0 1 0 -150 -1100 20 -1100 N
+P 2 0 1 0 -150 -1000 -100 -1000 N
+P 2 0 1 0 -150 -900 20 -900 N
+P 2 0 1 0 -150 -800 -100 -800 N
+P 2 0 1 0 -150 -700 20 -700 N
+P 2 0 1 0 -150 -600 -100 -600 N
+P 2 0 1 0 -150 -500 20 -500 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -150 500 20 500 N
+P 2 0 1 0 -150 600 -100 600 N
+P 2 0 1 0 -150 700 20 700 N
+P 2 0 1 0 -150 800 -100 800 N
+P 2 0 1 0 -150 900 20 900 N
+P 2 0 1 0 -150 1000 -100 1000 N
+P 2 0 1 0 -150 1100 20 1100 N
+P 2 0 1 0 -150 1200 -100 1200 N
+P 2 0 1 0 -100 -1300 130 -1200 N
+P 2 0 1 0 130 1200 -100 1310 N
+P 2 0 1 0 150 -1170 150 1170 N
+X 1 1 -450 -1200 300 R 60 60 1 1 P
+X 2 2 -450 -1000 300 R 60 60 1 1 P
+X 3 3 -450 -800 300 R 60 60 1 1 P
+X 4 4 -450 -600 300 R 60 60 1 1 P
+X 5 5 -450 -400 300 R 60 60 1 1 P
+X 6 6 -450 -200 300 R 60 60 1 1 P
+X 7 7 -450 0 300 R 60 60 1 1 P
+X 8 8 -450 200 300 R 60 60 1 1 P
+X 9 9 -450 400 300 R 60 60 1 1 P
+X 10 10 -450 600 300 R 60 60 1 1 P
+X P20 20 -450 100 300 R 60 60 1 1 P
+X 11 11 -450 800 300 R 60 60 1 1 P
+X P21 21 -450 300 300 R 60 60 1 1 P
+X 12 12 -450 1000 300 R 60 60 1 1 P
+X P22 22 -450 500 300 R 60 60 1 1 P
+X 13 13 -450 1200 300 R 60 60 1 1 P
+X P23 23 -450 700 300 R 60 60 1 1 P
+X P14 14 -450 -1100 300 R 60 60 1 1 P
+X P24 24 -450 900 300 R 60 60 1 1 P
+X P15 15 -450 -900 300 R 60 60 1 1 P
+X P25 25 -450 1100 300 R 60 60 1 1 P
+X P16 16 -450 -700 300 R 60 60 1 1 P
+X P17 17 -450 -500 300 R 60 60 1 1 P
+X P18 18 -450 -300 300 R 60 60 1 1 P
+X P19 19 -450 -100 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 0 -150 -460 -150 460 N
+P 2 0 1 0 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -140 -470 -110 -490 N
+P 2 0 1 0 -140 470 -150 460 N
+P 2 0 1 0 -140 470 -100 490 N
+P 2 0 1 0 -110 -490 -50 -490 N
+P 2 0 1 0 -100 490 -70 490 N
+P 2 0 1 0 129 390 -70 490 N
+P 2 0 1 0 129 390 150 370 N
+P 2 0 1 0 140 -409 -50 -490 N
+P 2 0 1 0 150 -390 140 -409 N
+P 2 0 1 0 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 0 Y Y 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X K 1 200 0 150 L 20 20 1 1 P
+X A 2 -200 0 150 R 20 20 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "GND" 0 -123 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 20 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 -50 50 -50 -50 N
+P 3 0 1 0 -80 -25 -125 -65 -120 -40 N
+P 3 0 1 0 -65 -40 -110 -80 -105 -55 N
+P 3 0 1 0 50 50 -50 0 50 -50 F
+X K 1 -200 0 150 R 40 40 1 1 P
+X A 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LM318N
+#
+DEF LM318N U 0 30 Y Y 1 F N
+F0 "U" 100 300 60 H V C CNN
+F1 "LM318N" 210 -250 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 -200 -200 200 N
+P 2 0 1 0 -200 200 200 0 N
+P 2 0 1 0 200 -100 100 -50 N
+P 2 0 1 0 200 0 -200 -200 N
+P 2 0 1 0 200 100 100 50 N
+P 2 0 1 0 200 200 0 100 N
+X FIN2 1 500 200 300 L 60 30 1 1 P
+X - 2 -500 -100 300 R 60 60 1 1 I
+X + 3 -500 100 300 R 60 60 1 1 I
+X V- 4 -100 -400 250 U 60 30 1 1 W
+X FOUT 5 500 -100 300 L 60 30 1 1 P
+X OUT 6 500 0 300 L 60 30 1 1 O
+X V+ 7 -100 400 250 D 60 30 1 1 W
+X FIN1 8 500 100 300 L 60 30 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "R" 0 0 50 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R_*
+ Resistor_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 60 60 1 1 P
+X ~ 2 0 -150 50 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# RAM_32KO
+#
+DEF RAM_32KO U 0 40 Y Y 1 F N
+F0 "U" 150 900 70 H V C CNN
+F1 "RAM_32KO" 300 -1100 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 14 0 -1050 0 U 60 60 0 0 W N
+X VCC 28 0 850 0 D 60 60 0 0 W N
+S -400 850 400 -1050 0 1 0 N
+X A14 1 -700 -600 300 R 60 60 1 1 I
+X A12 2 -700 -400 300 R 60 60 1 1 I
+X A7 3 -700 100 300 R 60 60 1 1 I
+X A6 4 -700 200 300 R 60 60 1 1 I
+X A5 5 -700 300 300 R 60 60 1 1 I
+X A4 6 -700 400 300 R 60 60 1 1 I
+X A3 7 -700 500 300 R 60 60 1 1 I
+X A2 8 -700 600 300 R 60 60 1 1 I
+X A1 9 -700 700 300 R 60 60 1 1 I
+X A0 10 -700 800 300 R 60 60 1 1 I
+X CS 20 -700 -800 300 R 60 60 1 1 I I
+X D0 11 700 800 300 L 60 60 1 1 T
+X A10 21 -700 -200 300 R 60 60 1 1 I
+X D1 12 700 700 300 L 60 60 1 1 T
+X OE 22 -700 -900 300 R 60 60 1 1 I I
+X D2 13 700 600 300 L 60 60 1 1 T
+X A11 23 -700 -300 300 R 60 60 1 1 I
+X A9 24 -700 -100 300 R 60 60 1 1 I
+X D3 15 700 500 300 L 60 60 1 1 T
+X A8 25 -700 0 300 R 60 60 1 1 I
+X D4 16 700 400 300 L 60 60 1 1 T
+X A13 26 -700 -500 300 R 60 60 1 1 I
+X D5 17 700 300 300 L 60 60 1 1 T
+X WE 27 -700 -1000 300 R 60 60 1 1 I I
+X D6 18 700 200 300 L 60 60 1 1 T
+X D7 19 700 100 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# SW_PUSH
+#
+DEF SW_PUSH SW 0 40 N N 1 F N
+F0 "SW" 150 110 50 H V C CNN
+F1 "SW_PUSH" 0 -80 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -170 50 170 60 0 1 0 N
+P 4 0 1 0 -40 60 -30 90 30 90 40 60 N
+X 1 1 -300 0 200 R 60 60 0 1 P I
+X 2 2 300 0 200 L 60 60 0 1 P I
+ENDDRAW
+ENDDEF
+#
+# TDA8702
+#
+DEF TDA8702 U 0 40 Y Y 1 F N
+F0 "U" 200 800 60 H V L CNN
+F1 "TDA8702" 200 -800 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 700 500 -700 0 1 0 N
+X VREF 1 -800 -400 300 R 50 50 1 1 B
+X AGND 2 100 -900 200 U 50 50 1 1 W
+X DB2 3 -800 400 300 R 50 50 1 1 I
+X DB3 4 -800 300 300 R 50 50 1 1 I
+X Clock 5 -800 -600 300 R 50 50 1 1 I C
+X DGND 6 -100 -900 200 U 50 50 1 1 W
+X DB7 7 -800 -100 300 R 50 50 1 1 I
+X DB6 8 -800 0 300 R 50 50 1 1 I
+X DB6 8 -800 0 300 R 50 50 1 1 I
+X DB5 9 -800 100 300 R 50 50 1 1 I
+X DB4 10 -800 200 300 R 50 50 1 1 I
+X DB1 11 -800 500 300 R 50 50 1 1 I
+X DB0 12 -800 600 300 R 50 50 1 1 I
+X VCCD 13 -100 900 200 D 50 50 1 1 W
+X VOUT 14 800 -150 300 L 50 50 1 1 O
+X VOUT 15 800 200 300 L 50 50 1 1 O I
+X VCCA 16 100 900 200 D 50 50 1 1 W
+X VREF 1 -800 -400 300 R 50 50 1 2 B
+X AGND 2 100 -900 300 U 50 50 1 2 W
+X DB2 3 -800 400 300 R 50 50 1 2 I
+X DB3 4 -800 300 300 R 50 50 1 2 I
+X Clock 5 -800 -600 300 R 50 50 1 2 I C
+X DGND 6 -100 -900 300 U 50 50 1 2 W
+X DB7 7 -800 -100 300 R 50 50 1 2 I
+X DB6 8 -800 0 300 R 50 50 1 2 I
+X DB6 8 -800 0 300 R 50 50 1 2 I
+X DB5 9 -800 100 300 R 50 50 1 2 I
+X DB4 10 -800 200 300 R 50 50 1 2 I
+X DB1 11 -800 500 300 R 50 50 1 2 I
+X DB0 12 -800 600 300 R 50 50 1 2 I
+X VCCD 13 -100 900 300 D 50 50 1 2 W
+X VOUT 14 800 -150 300 L 50 50 1 2 O
+X VOUT 15 800 200 300 L 50 50 1 2 O
+X VCCA 16 100 900 300 D 50 50 1 2 W
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "VCC" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 75 25 0 1 0 N
+P 2 0 1 0 0 0 0 50 N
+X VCC 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC95108PC84
+#
+DEF XC95108PC84 U 0 30 Y Y 1 F N
+F0 "U" 550 2550 60 H V L CNN
+F1 "XC95108PC84" 400 -1950 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -850 2450 850 -1850 0 1 0 N
+X P1 1 -1150 1850 300 R 60 60 1 1 B
+X P2 2 -1150 1750 300 R 60 60 1 1 B
+X P3 3 -1150 1650 300 R 60 60 1 1 B
+X P4 4 -1150 1550 300 R 60 60 1 1 B
+X P5 5 -1150 1450 300 R 60 60 1 1 B
+X P6 6 -1150 1350 300 R 60 60 1 1 B
+X P7 7 -1150 1250 300 R 60 60 1 1 B
+X GND 8 -250 -2150 300 U 60 60 1 1 W
+X I/O/GCK1 9 -1150 1150 300 R 60 60 1 1 B
+X I/O/GCK2 10 -1150 1050 300 R 60 60 1 1 B
+X P20 20 -1150 50 300 R 60 60 1 1 B
+X TCK 30 -1150 2150 300 R 60 60 1 1 I
+X P40 40 -1150 -1450 300 R 60 60 1 1 B
+X P50 50 1150 -1350 300 L 60 60 1 1 B
+X GND 60 250 -2150 300 U 60 60 1 1 W
+X P70 70 1150 550 300 L 60 60 1 1 B
+X P80 80 1150 1450 300 L 60 60 1 1 B
+X P11 11 -1150 950 300 R 60 60 1 1 B
+X P21 21 -1150 -50 300 R 60 60 1 1 B
+X P31 31 -1150 -550 300 R 60 60 1 1 B
+X P41 41 -1150 -1550 300 R 60 60 1 1 B
+X P51 51 1150 -1250 300 L 60 60 1 1 B
+X P61 61 1150 -250 300 L 60 60 1 1 B
+X P71 71 1150 750 300 L 60 60 1 1 B
+X P81 81 1150 1550 300 L 60 60 1 1 B
+X I/O/GCK3 12 -1150 850 300 R 60 60 1 1 B
+X VCCIO 22 100 2750 300 D 60 60 1 1 W
+X P32 32 -1150 -750 300 R 60 60 1 1 B
+X GND 42 50 -2150 300 U 60 60 1 1 W
+X P52 52 1150 -1150 300 L 60 60 1 1 B
+X P62 62 1150 -150 300 L 60 60 1 1 B
+X P72 72 1150 850 300 L 60 60 1 1 B
+X P82 82 1150 1650 300 L 60 60 1 1 B
+X P13 13 -1150 750 300 R 60 60 1 1 B
+X P23 23 -1150 -150 300 R 60 60 1 1 B
+X P33 33 -1150 -850 300 R 60 60 1 1 B
+X P43 43 -1150 -1650 300 R 60 60 1 1 B
+X P53 53 1150 -1050 300 L 60 60 1 1 B
+X P63 63 1150 -50 300 L 60 60 1 1 B
+X VCC 73 -200 2750 300 D 60 60 1 1 W
+X P83 83 1150 1750 300 L 60 60 1 1 B
+X P14 14 -1150 550 300 R 60 60 1 1 B
+X P24 24 -1150 -250 300 R 60 60 1 1 B
+X P34 34 -1150 -950 300 R 60 60 1 1 B
+X P44 44 -1150 -1750 300 R 60 60 1 1 B
+X P54 54 1150 -950 300 L 60 60 1 1 B
+X VCCIO 64 200 2750 300 D 60 60 1 1 W
+X I/O/GSR 74 1150 950 300 L 60 60 1 1 B
+X P84 84 1150 1850 300 L 60 60 1 1 B
+X P15 15 -1150 450 300 R 60 60 1 1 B
+X P25 25 -1150 -350 300 R 60 60 1 1 B
+X P35 35 -1150 -1050 300 R 60 60 1 1 B
+X P45 45 1150 -1750 300 L 60 60 1 1 B
+X P55 55 1150 -850 300 L 60 60 1 1 B
+X P65 65 1150 50 300 L 60 60 1 1 B
+X P75 75 1150 1050 300 L 60 60 1 1 B
+X GND 16 -150 -2150 300 U 60 60 1 1 W
+X P26 26 -1150 -450 300 R 60 60 1 1 B
+X P36 36 -1150 -1150 300 R 60 60 1 1 B
+X P46 46 1150 -1650 300 L 60 60 1 1 B
+X P56 56 1150 -750 300 L 60 60 1 1 B
+X P66 66 1150 150 300 L 60 60 1 1 B
+X I/O/GTS1 76 1150 1150 300 L 60 60 1 1 B
+X P17 17 -1150 350 300 R 60 60 1 1 B
+X GND 27 -50 -2150 300 U 60 60 1 1 W
+X P37 37 -1150 -1250 300 R 60 60 1 1 B
+X P47 47 1150 -1550 300 L 60 60 1 1 B
+X P57 57 1150 -450 300 L 60 60 1 1 B
+X P67 67 1150 250 300 L 60 60 1 1 B
+X I/O/GTS2 77 1150 1250 300 L 60 60 1 1 B
+X P18 18 -1150 250 300 R 60 60 1 1 B
+X TDI 28 -1150 2350 300 R 60 60 1 1 I
+X VCC 38 -300 2750 300 D 60 60 1 1 W
+X P48 48 1150 -1450 300 L 60 60 1 1 B
+X P58 58 1150 -350 300 L 60 60 1 1 B
+X P68 68 1150 350 300 L 60 60 1 1 B
+X VCC 78 -100 2750 300 D 60 60 1 1 W
+X P19 19 -1150 150 300 R 60 60 1 1 B
+X TMS 29 -1150 2250 300 R 60 60 1 1 I
+X P39 39 -1150 -1350 300 R 60 60 1 1 B
+X GND 49 150 -2150 300 U 60 60 1 1 W
+X TDO 59 -1150 2050 300 R 60 60 1 1 O
+X P69 69 1150 450 300 L 60 60 1 1 B
+X P79 79 1150 1350 300 L 60 60 1 1 B
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/test_xil_95108/carte_test.kicad_pcb b/demos/test_xil_95108/carte_test.kicad_pcb
new file mode 100644
index 0000000..a2c3882
--- /dev/null
+++ b/demos/test_xil_95108/carte_test.kicad_pcb
@@ -0,0 +1,4205 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-10-29 BZR 6286)-product")
+
+ (general
+ (links 173)
+ (no_connects 0)
+ (area 94.462599 36.042599 196.367401 136.042401)
+ (thickness 1.6002)
+ (drawings 32)
+ (tracks 689)
+ (zones 0)
+ (modules 42)
+ (nets 101)
+ )
+
+ (page A4)
+ (title_block
+ (title "CARTE TEST XILINX XC95108")
+ (rev 0)
+ )
+
+ (layers
+ (0 Dessus signal)
+ (31 Dessous signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.4318)
+ (user_trace_width 1.016)
+ (trace_clearance 0.254)
+ (zone_clearance 0.5)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.3048)
+ (edge_width 0.1)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.2032)
+ (pcb_text_size 1.524 1.524)
+ (mod_edge_width 0.3048)
+ (mod_text_size 1.27 1.27)
+ (mod_text_width 0.2032)
+ (pad_size 1.7272 1.7272)
+ (pad_drill 1.016)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 0 0)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions false)
+ (excludeedgelayer true)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+ (net 1 +12V)
+ (net 2 -12V)
+ (net 3 /CSMEM)
+ (net 4 /DAT0)
+ (net 5 /DAT1)
+ (net 6 /DAT2)
+ (net 7 /DAT3)
+ (net 8 /DAT4)
+ (net 9 /DAT5)
+ (net 10 /DAT6)
+ (net 11 /DAT7)
+ (net 12 /DCLK)
+ (net 13 /LED1)
+ (net 14 /LED2)
+ (net 15 /MA0)
+ (net 16 /MA1)
+ (net 17 /MA2)
+ (net 18 /MA3)
+ (net 19 /MA4)
+ (net 20 /MA5)
+ (net 21 /MA6)
+ (net 22 /MA7)
+ (net 23 /MD0)
+ (net 24 /MD1)
+ (net 25 /MD10)
+ (net 26 /MD11)
+ (net 27 /MD12)
+ (net 28 /MD13)
+ (net 29 /MD14)
+ (net 30 /MD2)
+ (net 31 /MD3)
+ (net 32 /MD4)
+ (net 33 /MD5)
+ (net 34 /MD6)
+ (net 35 /MD7)
+ (net 36 /MD8)
+ (net 37 /MD9)
+ (net 38 /OEMEM)
+ (net 39 /PARBUS0)
+ (net 40 /PARBUS1)
+ (net 41 /PARBUS2)
+ (net 42 /PARBUS3)
+ (net 43 /PARBUS4)
+ (net 44 /PARBUS5)
+ (net 45 /PARBUS6)
+ (net 46 /PARBUS7)
+ (net 47 /PAR_AUX0/STROBE*)
+ (net 48 /PAR_AUX1/ERROR*)
+ (net 49 /PAR_AUX2/AUTOLF*)
+ (net 50 /PAR_AUX3/SELECT*)
+ (net 51 /PAR_AUX4/PE)
+ (net 52 /PAR_AUX5/BUSY*)
+ (net 53 /PAR_AUX6/ACK)
+ (net 54 /PAR_AUX7/INIT)
+ (net 55 /PAR_AUX8/SELECT)
+ (net 56 /PIN_TEST0)
+ (net 57 /PIN_TEST1)
+ (net 58 /R/W-A14)
+ (net 59 /SW0)
+ (net 60 /SW1)
+ (net 61 /TCK)
+ (net 62 /TDI)
+ (net 63 /TDO)
+ (net 64 /TMS)
+ (net 65 /XIN/CLK)
+ (net 66 GND)
+ (net 67 "Net-(C1-Pad1)")
+ (net 68 "Net-(C14-Pad1)")
+ (net 69 "Net-(C14-Pad2)")
+ (net 70 "Net-(C2-Pad1)")
+ (net 71 "Net-(C2-Pad2)")
+ (net 72 "Net-(C4-Pad1)")
+ (net 73 "Net-(C5-Pad1)")
+ (net 74 "Net-(K1-Pad2)")
+ (net 75 "Net-(P3-Pad1)")
+ (net 76 "Net-(R10-Pad2)")
+ (net 77 "Net-(R6-Pad1)")
+ (net 78 "Net-(R7-Pad2)")
+ (net 79 VCC)
+ (net 80 "Net-(U2-Pad14)")
+ (net 81 "Net-(U2-Pad15)")
+ (net 82 "Net-(U2-Pad17)")
+ (net 83 "Net-(U2-Pad18)")
+ (net 84 "Net-(U2-Pad19)")
+ (net 85 "Net-(U2-Pad20)")
+ (net 86 "Net-(U2-Pad21)")
+ (net 87 "Net-(U2-Pad23)")
+ (net 88 "Net-(U2-Pad57)")
+ (net 89 "Net-(U2-Pad65)")
+ (net 90 "Net-(U4-Pad6)")
+ (net 91 "Net-(U4-Pad8)")
+ (net 92 "Net-(U4-Pad10)")
+ (net 93 "Net-(U4-Pad12)")
+ (net 94 "Net-(U6-Pad1)")
+ (net 95 "Net-(U6-Pad5)")
+ (net 96 "Net-(U6-Pad8)")
+ (net 97 /+12BATT)
+ (net 98 /-12BATT)
+ (net 99 "Net-(D2-Pad2)")
+ (net 100 "Net-(D3-Pad2)")
+
+ (net_class Default "Ceci est la Netclass par défaut"
+ (clearance 0.254)
+ (trace_width 0.4318)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net +12V)
+ (add_net -12V)
+ (add_net /+12BATT)
+ (add_net /-12BATT)
+ (add_net /CSMEM)
+ (add_net /DAT0)
+ (add_net /DAT1)
+ (add_net /DAT2)
+ (add_net /DAT3)
+ (add_net /DAT4)
+ (add_net /DAT5)
+ (add_net /DAT6)
+ (add_net /DAT7)
+ (add_net /DCLK)
+ (add_net /LED1)
+ (add_net /LED2)
+ (add_net /MA0)
+ (add_net /MA1)
+ (add_net /MA2)
+ (add_net /MA3)
+ (add_net /MA4)
+ (add_net /MA5)
+ (add_net /MA6)
+ (add_net /MA7)
+ (add_net /MD0)
+ (add_net /MD1)
+ (add_net /MD10)
+ (add_net /MD11)
+ (add_net /MD12)
+ (add_net /MD13)
+ (add_net /MD14)
+ (add_net /MD2)
+ (add_net /MD3)
+ (add_net /MD4)
+ (add_net /MD5)
+ (add_net /MD6)
+ (add_net /MD7)
+ (add_net /MD8)
+ (add_net /MD9)
+ (add_net /OEMEM)
+ (add_net /PARBUS0)
+ (add_net /PARBUS1)
+ (add_net /PARBUS2)
+ (add_net /PARBUS3)
+ (add_net /PARBUS4)
+ (add_net /PARBUS5)
+ (add_net /PARBUS6)
+ (add_net /PARBUS7)
+ (add_net /PAR_AUX0/STROBE*)
+ (add_net /PAR_AUX1/ERROR*)
+ (add_net /PAR_AUX2/AUTOLF*)
+ (add_net /PAR_AUX3/SELECT*)
+ (add_net /PAR_AUX4/PE)
+ (add_net /PAR_AUX5/BUSY*)
+ (add_net /PAR_AUX6/ACK)
+ (add_net /PAR_AUX7/INIT)
+ (add_net /PAR_AUX8/SELECT)
+ (add_net /PIN_TEST0)
+ (add_net /PIN_TEST1)
+ (add_net /R/W-A14)
+ (add_net /SW0)
+ (add_net /SW1)
+ (add_net /TCK)
+ (add_net /TDI)
+ (add_net /TDO)
+ (add_net /TMS)
+ (add_net /XIN/CLK)
+ (add_net GND)
+ (add_net "Net-(C1-Pad1)")
+ (add_net "Net-(C14-Pad1)")
+ (add_net "Net-(C14-Pad2)")
+ (add_net "Net-(C2-Pad1)")
+ (add_net "Net-(C2-Pad2)")
+ (add_net "Net-(C4-Pad1)")
+ (add_net "Net-(C5-Pad1)")
+ (add_net "Net-(D2-Pad2)")
+ (add_net "Net-(D3-Pad2)")
+ (add_net "Net-(K1-Pad2)")
+ (add_net "Net-(P3-Pad1)")
+ (add_net "Net-(R10-Pad2)")
+ (add_net "Net-(R6-Pad1)")
+ (add_net "Net-(R7-Pad2)")
+ (add_net "Net-(U2-Pad14)")
+ (add_net "Net-(U2-Pad15)")
+ (add_net "Net-(U2-Pad17)")
+ (add_net "Net-(U2-Pad18)")
+ (add_net "Net-(U2-Pad19)")
+ (add_net "Net-(U2-Pad20)")
+ (add_net "Net-(U2-Pad21)")
+ (add_net "Net-(U2-Pad23)")
+ (add_net "Net-(U2-Pad57)")
+ (add_net "Net-(U2-Pad65)")
+ (add_net "Net-(U4-Pad10)")
+ (add_net "Net-(U4-Pad12)")
+ (add_net "Net-(U4-Pad6)")
+ (add_net "Net-(U4-Pad8)")
+ (add_net "Net-(U6-Pad1)")
+ (add_net "Net-(U6-Pad5)")
+ (add_net "Net-(U6-Pad8)")
+ (add_net VCC)
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326C7)
+ (at 121.285 62.865 90)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /3EC23ABA)
+ (attr smd)
+ (fp_text reference C1 (at 0 2.3 90) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -2.3 90) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0 90) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 67 "Net-(C1-Pad1)"))
+ (pad 2 smd rect (at 1.5 0 90) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Dessus) (tedit 0) (tstamp 563326CC)
+ (at 137.16 53.975)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /3EC23B98)
+ (fp_text reference C2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10uF (at 0.635 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 70 "Net-(C2-Pad1)"))
+ (pad 2 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 71 "Net-(C2-Pad2)"))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Dessus) (tedit 0) (tstamp 563326D1)
+ (at 188.595 88.9 270)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /3EC23DCD)
+ (fp_text reference C3 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10uF (at 0.635 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 2 thru_hole circle (at 7.62 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326D6)
+ (at 130.175 126.365)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /3EC242AD)
+ (attr smd)
+ (fp_text reference C4 (at 0 2.3) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 22pF (at 0 -2.3) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 72 "Net-(C4-Pad1)"))
+ (pad 2 smd rect (at 1.5 0) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326DB)
+ (at 130.175 121.285)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /52CEE1C5)
+ (attr smd)
+ (fp_text reference C5 (at 0 2.3) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 22pF (at 0 -2.3) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 73 "Net-(C5-Pad1)"))
+ (pad 2 smd rect (at 1.5 0) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Dessus) (tedit 0) (tstamp 563326E0)
+ (at 156.21 106.68 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /3EC243D6)
+ (fp_text reference C6 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 47uF (at 0.635 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 +12V))
+ (pad 2 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326E5)
+ (at 176.53 69.85 180)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /52CEE1C8)
+ (attr smd)
+ (fp_text reference C7 (at 0 2.3 180) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -2.3 180) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0 180) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 79 VCC))
+ (pad 2 smd rect (at 1.5 0 180) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326EA)
+ (at 137.795 79.375)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /52CEE1CA)
+ (attr smd)
+ (fp_text reference C8 (at 0 2.3) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -2.3) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 79 VCC))
+ (pad 2 smd rect (at 1.5 0) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326EF)
+ (at 141.605 92.075 90)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /52CEE1C9)
+ (attr smd)
+ (fp_text reference C10 (at 0 2.3 90) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -2.3 90) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0 90) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 79 VCC))
+ (pad 2 smd rect (at 1.5 0 90) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326F4)
+ (at 127.635 85.725 270)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /52CEE1C7)
+ (attr smd)
+ (fp_text reference C11 (at 0 2.3 270) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -2.3 270) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0 270) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 79 VCC))
+ (pad 2 smd rect (at 1.5 0 270) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitors_SMD:C_1206 (layer Dessous) (tedit 5415D7BD) (tstamp 563326F9)
+ (at 118.745 113.665 270)
+ (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
+ (tags "capacitor 1206")
+ (path /3EC4C7DB)
+ (attr smd)
+ (fp_text reference C12 (at 0 2.3 270) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 -2.3 270) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.3 1.15) (end 2.3 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1 1.025) (end -1 1.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -1 -1.025) (end 1 -1.025) (layer B.SilkS) (width 0.15))
+ (pad 1 smd rect (at -1.5 0 270) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 79 VCC))
+ (pad 2 smd rect (at 1.5 0 270) (size 1 1.6) (layers Dessous B.Paste B.Mask)
+ (net 66 GND))
+ (model Capacitors_SMD.3dshapes/C_1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Dessus) (tedit 0) (tstamp 563326FE)
+ (at 159.385 43.815 180)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /3ECDDCAD)
+ (fp_text reference C13 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10uF (at 0.635 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 2 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 -12V))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:CP6 (layer Dessus) (tedit 0) (tstamp 56332703)
+ (at 137.16 50.165)
+ (descr "Condensateur polarise")
+ (tags CP)
+ (path /3ECDDACB)
+ (fp_text reference C14 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10uF (at 0.635 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -7.62 0) (end -6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 0.508) (end -6.604 0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 0.508) (end -6.604 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.604 -0.508) (end -6.096 -0.508) (layer F.SilkS) (width 0.15))
+ (fp_line (start 7.62 0) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 0) (end 6.604 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 -1.524) (end -6.096 -1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 -1.524) (end -6.096 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.096 1.524) (end 6.604 1.524) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.604 1.524) (end 6.604 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 68 "Net-(C14-Pad1)"))
+ (pad 2 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 69 "Net-(C14-Pad2)"))
+ (model Discret.3dshapes/CP6.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.6 0.6 0.6))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Connect:DB25FC (layer Dessus) (tedit 54736218) (tstamp 5633271C)
+ (at 100.965 88.265 90)
+ (descr "Connecteur DB25 femelle couche")
+ (tags "CONN DB25")
+ (path /3EC4C60F)
+ (fp_text reference J1 (at 0 -15.24 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB25 (at 0 -6.35 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 26.67 -11.43) (end 26.67 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 19.05 -6.35) (end 19.05 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.955 -11.43) (end 20.955 -6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.955 -11.43) (end -20.955 -6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -19.05 -6.35) (end -19.05 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 2.54) (end -26.67 -11.43) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 26.67 -6.35) (end 19.05 -6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 -6.35) (end -19.05 -6.35) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 -8.255) (end 20.32 -11.43) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -8.255) (end -20.32 -11.43) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 -18.415) (end 20.32 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -18.415) (end -20.32 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 26.67 -11.43) (end 26.67 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 26.67 -12.7) (end -26.67 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 -12.7) (end -26.67 -11.43) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 -11.43) (end 26.67 -11.43) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 19.05 2.54) (end 26.67 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -8.255) (end 20.32 -8.255) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -20.32 -18.415) (end 20.32 -18.415) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -26.67 2.54) (end -19.05 2.54) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 23.495 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole rect (at -23.495 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -16.51 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 47 /PAR_AUX0/STROBE*))
+ (pad 2 thru_hole circle (at -13.716 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 39 /PARBUS0))
+ (pad 3 thru_hole circle (at -11.049 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 40 /PARBUS1))
+ (pad 4 thru_hole circle (at -8.255 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 41 /PARBUS2))
+ (pad 5 thru_hole circle (at -5.461 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 42 /PARBUS3))
+ (pad 6 thru_hole circle (at -2.667 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 43 /PARBUS4))
+ (pad 7 thru_hole circle (at 0 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 44 /PARBUS5))
+ (pad 8 thru_hole circle (at 2.794 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 45 /PARBUS6))
+ (pad 9 thru_hole circle (at 5.588 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 46 /PARBUS7))
+ (pad 10 thru_hole circle (at 8.382 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 53 /PAR_AUX6/ACK))
+ (pad 11 thru_hole circle (at 11.049 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 52 /PAR_AUX5/BUSY*))
+ (pad 12 thru_hole circle (at 13.843 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 51 /PAR_AUX4/PE))
+ (pad 13 thru_hole circle (at 16.637 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 50 /PAR_AUX3/SELECT*))
+ (pad 14 thru_hole circle (at -14.9352 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 49 /PAR_AUX2/AUTOLF*))
+ (pad 15 thru_hole circle (at -12.3952 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 48 /PAR_AUX1/ERROR*))
+ (pad 16 thru_hole circle (at -9.6012 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 54 /PAR_AUX7/INIT))
+ (pad 17 thru_hole circle (at -6.858 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 55 /PAR_AUX8/SELECT))
+ (pad 18 thru_hole circle (at -4.1148 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 19 thru_hole circle (at -1.3208 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 20 thru_hole circle (at 1.4224 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 21 thru_hole circle (at 4.1656 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 22 thru_hole circle (at 7.0104 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 23 thru_hole circle (at 9.7028 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 24 thru_hole circle (at 12.446 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 25 thru_hole circle (at 15.24 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model Conn_DBxx/db25_female_pin90deg.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Connect:DB9F_CI_INVERT (layer Dessus) (tedit 0) (tstamp 5633273A)
+ (at 152.781 135.89 180)
+ (descr "Connecteur DB9 male encarte")
+ (tags "CONN DB9")
+ (path /3ECDEBEA)
+ (fp_text reference J2 (at 0 -9.144 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9FEM (at 0 -2.667 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -8.509 -12.065) (end 8.636 -12.065) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -1.27) (end -9.144 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.906 -1.27) (end 9.271 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.906 -4.445) (end -9.779 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.621 -4.445) (end 9.906 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.494 -5.715) (end 15.621 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.636 -5.715) (end 8.636 -12.065) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 15.621 -4.445) (end 15.621 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.906 -1.27) (end 9.906 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.366 0) (end 9.271 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 0) (end 9.271 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.509 -5.715) (end -8.509 -12.065) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.779 -4.445) (end -15.494 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -15.494 -4.445) (end -15.494 -5.715) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.144 -1.27) (end -9.779 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.779 -1.27) (end -9.779 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.239 0) (end -9.144 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.144 0) (end -9.144 -1.27) (layer F.SilkS) (width 0.3048))
+ (pad 2 connect rect (at 2.794 2.54 180) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 63 /TDO))
+ (pad 3 connect rect (at 0 2.54 180) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 62 /TDI))
+ (pad 4 connect rect (at -2.794 2.54 180) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 61 /TCK))
+ (pad 5 connect rect (at -5.588 2.54 180) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 64 /TMS))
+ (pad 1 connect rect (at 5.588 2.54 180) (size 1.778 5.08) (layers Dessous B.Mask)
+ (net 79 VCC))
+ (pad 9 connect rect (at -4.191 2.54 180) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 66 GND))
+ (pad 8 connect rect (at -1.397 2.54 180) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 66 GND))
+ (pad 7 connect rect (at 1.397 2.54 180) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 66 GND))
+ (pad 6 connect rect (at 4.191 2.54 180) (size 1.778 5.08) (layers Dessus F.Mask)
+ (net 66 GND))
+ (model Conn_DBxx/db9_female.wrl
+ (at (xyz 0 0 -0.033))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 90 0 0))
+ )
+ )
+
+ (module Connect:bornier2 (layer Dessus) (tedit 0) (tstamp 56332752)
+ (at 187.325 61.595 270)
+ (descr "Bornier d'alimentation 2 pins")
+ (tags DEV)
+ (path /3EC2446D)
+ (fp_text reference P3 (at 0 -5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 5.08 270) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 75 "Net-(P3-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model Device/bornier_2.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 5633275E)
+ (at 130.175 126.365)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EC242C1)
+ (fp_text reference R1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 100K (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 72 "Net-(C4-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 73 "Net-(C5-Pad1)"))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 56332763)
+ (at 114.935 57.785 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /52CEE1D3)
+ (fp_text reference R2 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 330 (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 99 "Net-(D2-Pad2)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /LED1))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 56332768)
+ (at 117.475 57.785 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EC4D082)
+ (fp_text reference R3 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 330 (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 "Net-(D3-Pad2)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /LED2))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 5633276D)
+ (at 150.495 59.055 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EC8B970)
+ (fp_text reference R4 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4,7K (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 60 /SW1))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 56332772)
+ (at 147.955 59.055 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3EC8B978)
+ (fp_text reference R5 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 4,7K (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 59 /SW0))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 56332777)
+ (at 117.475 44.45 270)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3ECDDB57)
+ (fp_text reference R6 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1,1k (at 0 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 77 "Net-(R6-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 5633277C)
+ (at 139.7 41.91)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3ECDDB60)
+ (fp_text reference R7 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1,1K (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 76 "Net-(R10-Pad2)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 78 "Net-(R7-Pad2)"))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 56332781)
+ (at 139.7 44.45)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3ECDDB43)
+ (fp_text reference R8 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 2,2K (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 78 "Net-(R7-Pad2)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 69 "Net-(C14-Pad2)"))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 56332786)
+ (at 139.7 46.99)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3ECDDB4B)
+ (fp_text reference R9 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 2,2K (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 77 "Net-(R6-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 71 "Net-(C2-Pad2)"))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:R4 (layer Dessus) (tedit 0) (tstamp 5633278B)
+ (at 187.325 46.99 90)
+ (descr "Resitance 4 pas")
+ (tags R)
+ (path /3ECDDB6D)
+ (fp_text reference R10 (at 0 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 75 (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 0) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 0) (end -4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -1.016) (end 4.064 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.016) (end 4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 1.016) (end -4.064 1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 1.016) (end -4.064 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.064 -0.508) (end -3.556 -1.016) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 4.064 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 75 "Net-(P3-Pad1)"))
+ (pad 2 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 76 "Net-(R10-Pad2)"))
+ (model Discret.3dshapes/R4.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.4 0.4 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:SW_PUSH (layer Dessus) (tedit 0) (tstamp 56332790)
+ (at 159.385 53.975)
+ (descr "Bouton poussoir")
+ (tags "SWITCH DEV")
+ (path /3EC8B876)
+ (autoplace_cost180 10)
+ (fp_text reference SW1 (at 1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_text value SW_PUSH (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_line (start 6.35 -5.715) (end 6.35 5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.35 5.715) (end 5.715 6.35) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.715 6.35) (end -5.715 6.35) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.715 6.35) (end -6.35 5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.35 5.715) (end -6.35 -5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.715 -6.35) (end 5.715 -6.35) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.715 -6.35) (end 6.35 -5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.35 -5.715) (end -5.715 -6.35) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -5.08 -2.54) (size 2.54 2.54) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 59 /SW0))
+ (pad 2 thru_hole circle (at 5.08 2.54) (size 2.54 2.54) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model device/switch_push.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:SW_PUSH (layer Dessus) (tedit 0) (tstamp 56332795)
+ (at 173.355 53.975)
+ (descr "Bouton poussoir")
+ (tags "SWITCH DEV")
+ (path /3EC8B882)
+ (autoplace_cost180 10)
+ (fp_text reference SW2 (at 1.27 -5.08) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_text value SW_PUSH (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.254)))
+ )
+ (fp_line (start 6.35 -5.715) (end 6.35 5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.35 5.715) (end 5.715 6.35) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.715 6.35) (end -5.715 6.35) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.715 6.35) (end -6.35 5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.35 5.715) (end -6.35 -5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -5.715 -6.35) (end 5.715 -6.35) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 5.715 -6.35) (end 6.35 -5.715) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.35 -5.715) (end -5.715 -6.35) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -5.08 -2.54) (size 2.54 2.54) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 60 /SW1))
+ (pad 2 thru_hole circle (at 5.08 2.54) (size 2.54 2.54) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (model device/switch_push.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-16__300_ELL (layer Dessus) (tedit 0) (tstamp 5633279A)
+ (at 132.715 61.595)
+ (descr "16 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /3EC238E5)
+ (fp_text reference U1 (at -6.35 -1.27) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value TDA8702 (at 1.27 1.27) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -11.43 -1.27) (end -10.16 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -10.16 -1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -10.16 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -11.43 -2.54) (end 11.43 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 11.43 -2.54) (end 11.43 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 11.43 2.54) (end -11.43 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -11.43 2.54) (end -11.43 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -8.89 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 67 "Net-(C1-Pad1)"))
+ (pad 2 thru_hole oval (at -6.35 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 3 thru_hole oval (at -3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /DAT2))
+ (pad 4 thru_hole oval (at -1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /DAT3))
+ (pad 5 thru_hole oval (at 1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /DCLK))
+ (pad 6 thru_hole oval (at 3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 7 thru_hole oval (at 6.35 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /DAT7))
+ (pad 8 thru_hole oval (at 8.89 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /DAT6))
+ (pad 9 thru_hole oval (at 8.89 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /DAT5))
+ (pad 10 thru_hole oval (at 6.35 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /DAT4))
+ (pad 11 thru_hole oval (at 3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /DAT1))
+ (pad 12 thru_hole oval (at 1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /DAT0))
+ (pad 13 thru_hole oval (at -1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 14 thru_hole oval (at -3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 70 "Net-(C2-Pad1)"))
+ (pad 15 thru_hole oval (at -6.35 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 68 "Net-(C14-Pad1)"))
+ (pad 16 thru_hole oval (at -8.89 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (model Sockets_DIP.3dshapes/DIP-16__300_ELL.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:LM78XX (layer Dessus) (tedit 0) (tstamp 56332804)
+ (at 155.575 120.015)
+ (descr "Regulateur TO220 serie LM78xx")
+ (tags "TR TO220")
+ (path /3EC2436D)
+ (fp_text reference U3 (at 7.62 0 90) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_text value LM7805 (at 10.668 0.127 90) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 0 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0 0) (end 5.08 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 0 2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 5.08) (end 20.32 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 20.32 5.08) (end 20.32 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 3.81) (end 12.7 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.7 3.81) (end 12.7 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -5.08) (end 20.32 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 4 thru_hole rect (at 16.51 0) (size 8.89 8.89) (drill 3.048) (layers *.Cu *.SilkS *.Mask))
+ (pad VI thru_hole circle (at 0 -2.54) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 1 +12V))
+ (pad GND thru_hole rect (at 0 0) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad VO thru_hole circle (at 0 2.54) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (model discret/to220_horiz.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-14__300_ELL (layer Dessus) (tedit 0) (tstamp 5633280B)
+ (at 131.445 113.665)
+ (descr "14 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /3EC4C318)
+ (fp_text reference U4 (at -5.08 -1.27) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74HC04 (at 1.27 1.27) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -10.16 -2.54) (end 10.16 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 10.16 2.54) (end -10.16 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -10.16 2.54) (end -10.16 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -10.16 -1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -8.89 1.27) (end -10.16 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 10.16 -2.54) (end 10.16 2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -7.62 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 73 "Net-(C5-Pad1)"))
+ (pad 2 thru_hole oval (at -5.08 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 72 "Net-(C4-Pad1)"))
+ (pad 3 thru_hole oval (at -2.54 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 72 "Net-(C4-Pad1)"))
+ (pad 4 thru_hole oval (at 0 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 65 /XIN/CLK))
+ (pad 5 thru_hole oval (at 2.54 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 6 thru_hole oval (at 5.08 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 90 "Net-(U4-Pad6)"))
+ (pad 7 thru_hole oval (at 7.62 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 8 thru_hole oval (at 7.62 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 91 "Net-(U4-Pad8)"))
+ (pad 9 thru_hole oval (at 5.08 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 10 thru_hole oval (at 2.54 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 92 "Net-(U4-Pad10)"))
+ (pad 11 thru_hole oval (at 0 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 12 thru_hole oval (at -2.54 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 93 "Net-(U4-Pad12)"))
+ (pad 13 thru_hole oval (at -5.08 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 14 thru_hole oval (at -7.62 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (model Sockets_DIP.3dshapes/DIP-14__300_ELL.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-28__300__600_ELL (layer Dessus) (tedit 0) (tstamp 5633281C)
+ (at 175.895 89.535 270)
+ (descr "28 pins DIL package, elliptical pads, width 300mil and 600mil")
+ (tags DIL)
+ (path /3EC4C463)
+ (fp_text reference U5 (at -12.7 -3.81 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value RAM_32KO (at -0.127 4.191 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -19.05 2.54) (end -17.78 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -17.78 2.54) (end -17.78 5.08) (layer F.SilkS) (width 0.15))
+ (fp_line (start -17.78 5.08) (end -19.05 5.08) (layer F.SilkS) (width 0.15))
+ (fp_line (start -19.05 1.27) (end 19.05 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -19.05 -1.27) (end -19.05 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -19.05 -1.27) (end -17.78 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -17.78 -1.27) (end -17.78 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -17.78 1.27) (end -19.05 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -19.05 -6.35) (end 19.05 -6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start 19.05 -6.35) (end 19.05 6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start 19.05 6.35) (end -19.05 6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -19.05 6.35) (end -19.05 -6.35) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -16.51 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 74 "Net-(K1-Pad2)"))
+ (pad 2 thru_hole oval (at -13.97 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /MD12))
+ (pad 3 thru_hole oval (at -11.43 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 35 /MD7))
+ (pad 4 thru_hole oval (at -8.89 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /MD6))
+ (pad 5 thru_hole oval (at -6.35 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /MD5))
+ (pad 6 thru_hole oval (at -3.81 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /MD4))
+ (pad 7 thru_hole oval (at -1.27 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /MD3))
+ (pad 8 thru_hole oval (at 1.27 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 /MD2))
+ (pad 9 thru_hole oval (at 3.81 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /MD1))
+ (pad 10 thru_hole oval (at 6.35 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /MD0))
+ (pad 11 thru_hole oval (at 8.89 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /MA0))
+ (pad 12 thru_hole oval (at 11.43 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /MA1))
+ (pad 13 thru_hole oval (at 13.97 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 /MA2))
+ (pad 14 thru_hole oval (at 16.51 7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 15 thru_hole oval (at 16.51 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /MA3))
+ (pad 16 thru_hole oval (at 13.97 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /MA4))
+ (pad 17 thru_hole oval (at 11.43 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /MA5))
+ (pad 18 thru_hole oval (at 8.89 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /MA6))
+ (pad 19 thru_hole oval (at 6.35 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /MA7))
+ (pad 20 thru_hole oval (at 3.81 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /CSMEM))
+ (pad 21 thru_hole oval (at 1.27 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /MD10))
+ (pad 22 thru_hole oval (at -1.27 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 38 /OEMEM))
+ (pad 23 thru_hole oval (at -3.81 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /MD11))
+ (pad 24 thru_hole oval (at -6.35 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 37 /MD9))
+ (pad 25 thru_hole oval (at -8.89 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /MD8))
+ (pad 26 thru_hole oval (at -11.43 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /MD13))
+ (pad 27 thru_hole oval (at -13.97 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 58 /R/W-A14))
+ (pad 28 thru_hole oval (at -16.51 -7.62 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 15 thru_hole oval (at 16.51 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /MA3))
+ (pad 16 thru_hole oval (at 13.97 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /MA4))
+ (pad 17 thru_hole oval (at 11.43 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /MA5))
+ (pad 18 thru_hole oval (at 8.89 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /MA6))
+ (pad 19 thru_hole oval (at 6.35 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /MA7))
+ (pad 20 thru_hole oval (at 3.81 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /CSMEM))
+ (pad 21 thru_hole oval (at 1.27 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /MD10))
+ (pad 22 thru_hole oval (at -1.27 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 38 /OEMEM))
+ (pad 23 thru_hole oval (at -3.81 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /MD11))
+ (pad 24 thru_hole oval (at -6.35 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 37 /MD9))
+ (pad 25 thru_hole oval (at -8.89 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /MD8))
+ (pad 26 thru_hole oval (at -11.43 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /MD13))
+ (pad 27 thru_hole oval (at -13.97 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 58 /R/W-A14))
+ (pad 28 thru_hole oval (at -16.51 0 270) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (model Sockets_DIP.3dshapes/DIP-28__300__600_ELL.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Sockets_DIP:DIP-8__300_ELL (layer Dessus) (tedit 0) (tstamp 56332849)
+ (at 125.73 43.18)
+ (descr "8 pins DIL package, elliptical pads")
+ (tags DIL)
+ (path /3ECDDB8B)
+ (fp_text reference U6 (at -6.35 0 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value LM318N (at 0 0) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 94 "Net-(U6-Pad1)"))
+ (pad 2 thru_hole oval (at -1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 78 "Net-(R7-Pad2)"))
+ (pad 3 thru_hole oval (at 1.27 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 77 "Net-(R6-Pad1)"))
+ (pad 4 thru_hole oval (at 3.81 3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 2 -12V))
+ (pad 5 thru_hole oval (at 3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 95 "Net-(U6-Pad5)"))
+ (pad 6 thru_hole oval (at 1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 76 "Net-(R10-Pad2)"))
+ (pad 7 thru_hole oval (at -1.27 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 1 +12V))
+ (pad 8 thru_hole oval (at -3.81 -3.81) (size 1.5748 2.286) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 96 "Net-(U6-Pad8)"))
+ (model Sockets_DIP.3dshapes/DIP-8__300_ELL.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Crystals:HC-18UH (layer Dessus) (tedit 0) (tstamp 56332854)
+ (at 121.285 123.825 270)
+ (descr "Quartz boitier HC-18 horizontal")
+ (tags "QUARTZ DEV")
+ (path /3EC2428D)
+ (fp_text reference X1 (at 0 6.35 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10MHz (at 0 11.43 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 6.35 2.794) (end -6.35 2.794) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.842 2.794) (end 5.842 15.24) (layer F.SilkS) (width 0.15))
+ (fp_line (start -6.35 2.794) (end -6.35 2.032) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.35 2.794) (end 6.35 2.032) (layer F.SilkS) (width 0.15))
+ (fp_line (start 6.35 2.032) (end -6.35 2.032) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.54 0) (end -2.54 2.032) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.54 0) (end 2.54 2.032) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.842 2.794) (end -5.842 15.24) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.842 15.24) (end 5.334 15.748) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.334 15.748) (end -5.334 15.748) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.334 15.748) (end -5.842 15.24) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 73 "Net-(C5-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 72 "Net-(C4-Pad1)"))
+ (model Crystals.3dshapes/HC-18UH.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module LEDs:LED-5MM (layer Dessus) (tedit 5570F7EA) (tstamp 5633293A)
+ (at 108.585 60.325)
+ (descr "LED 5mm round vertical")
+ (tags "LED 5mm round vertical")
+ (path /52CEE1D4)
+ (fp_text reference D2 (at 1.524 4.064) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value LED (at 1.524 -3.937) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.5 -1.55) (end -1.5 1.55) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.3 0) (end -1.5 1.55) (angle -302) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.27 0) (end -1.23 -1.5) (angle 297.5) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.23 1.5) (end -1.23 -1.5) (layer F.SilkS) (width 0.15))
+ (fp_circle (center 1.27 0) (end 0.97 -2.5) (layer F.SilkS) (width 0.15))
+ (fp_text user K (at -1.905 1.905) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 1 thru_hole rect (at 0 0 90) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 99 "Net-(D2-Pad2)"))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0.05 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module LEDs:LED-5MM (layer Dessus) (tedit 5570F7EA) (tstamp 5633293F)
+ (at 108.585 52.705)
+ (descr "LED 5mm round vertical")
+ (tags "LED 5mm round vertical")
+ (path /3EC4D08F)
+ (fp_text reference D3 (at 1.524 4.064) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value LED (at 1.524 -3.937) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.5 -1.55) (end -1.5 1.55) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.3 0) (end -1.5 1.55) (angle -302) (layer F.CrtYd) (width 0.05))
+ (fp_arc (start 1.27 0) (end -1.23 -1.5) (angle 297.5) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.23 1.5) (end -1.23 -1.5) (layer F.SilkS) (width 0.15))
+ (fp_circle (center 1.27 0) (end 0.97 -2.5) (layer F.SilkS) (width 0.15))
+ (fp_text user K (at -1.905 1.905) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 1 thru_hole rect (at 0 0 90) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 2 thru_hole circle (at 2.54 0) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
+ (net 100 "Net-(D3-Pad2)"))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0.05 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Sockets:PLCC84 (layer Dessus) (tedit 0) (tstamp 563327AD)
+ (at 135.255 86.995)
+ (descr "Support Plcc 84 pins, pads ronds")
+ (tags PLCC)
+ (path /5633AE5A)
+ (fp_text reference U2 (at 0 -2.54) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value XC95108PC84 (at 0 3.81) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -10.16 6.35) (end -7.62 10.16) (layer F.SilkS) (width 0.15))
+ (fp_line (start -7.62 10.16) (end 10.16 10.16) (layer F.SilkS) (width 0.15))
+ (fp_line (start 10.16 10.16) (end 10.16 -10.16) (layer F.SilkS) (width 0.15))
+ (fp_line (start 10.16 -10.16) (end -10.16 -10.16) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 -16.51) (end -16.51 16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start -16.51 16.51) (end 16.51 16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start 16.51 16.51) (end 16.51 -16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start 16.51 -16.51) (end -16.51 -16.51) (layer F.SilkS) (width 0.15))
+ (fp_line (start -10.16 -10.16) (end -10.16 6.35) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at -15.24 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 56 /PIN_TEST0))
+ (pad 2 thru_hole circle (at -12.7 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 57 /PIN_TEST1))
+ (pad 3 thru_hole circle (at -15.24 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 42 /PARBUS3))
+ (pad 4 thru_hole circle (at -12.7 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 55 /PAR_AUX8/SELECT))
+ (pad 5 thru_hole circle (at -15.24 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 41 /PARBUS2))
+ (pad 6 thru_hole circle (at -12.7 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 54 /PAR_AUX7/INIT))
+ (pad 7 thru_hole circle (at -15.24 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 40 /PARBUS1))
+ (pad 8 thru_hole circle (at -12.7 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 9 thru_hole circle (at -15.24 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 48 /PAR_AUX1/ERROR*))
+ (pad 10 thru_hole circle (at -12.7 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 39 /PARBUS0))
+ (pad 11 thru_hole circle (at -15.24 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 49 /PAR_AUX2/AUTOLF*))
+ (pad 12 thru_hole circle (at -12.7 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 65 /XIN/CLK))
+ (pad 13 thru_hole circle (at -12.7 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 47 /PAR_AUX0/STROBE*))
+ (pad 14 thru_hole circle (at -10.16 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 80 "Net-(U2-Pad14)"))
+ (pad 15 thru_hole circle (at -10.16 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 81 "Net-(U2-Pad15)"))
+ (pad 16 thru_hole circle (at -7.62 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 17 thru_hole circle (at -7.62 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 82 "Net-(U2-Pad17)"))
+ (pad 18 thru_hole circle (at -5.08 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 83 "Net-(U2-Pad18)"))
+ (pad 19 thru_hole circle (at -5.08 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 84 "Net-(U2-Pad19)"))
+ (pad 20 thru_hole circle (at -2.54 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 85 "Net-(U2-Pad20)"))
+ (pad 21 thru_hole circle (at -2.54 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 86 "Net-(U2-Pad21)"))
+ (pad 22 thru_hole circle (at 0 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 23 thru_hole circle (at 0 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 87 "Net-(U2-Pad23)"))
+ (pad 24 thru_hole circle (at 2.54 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /MA4))
+ (pad 25 thru_hole circle (at 2.54 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /MA3))
+ (pad 26 thru_hole circle (at 5.08 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 /MA2))
+ (pad 27 thru_hole circle (at 5.08 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 28 thru_hole circle (at 7.62 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 62 /TDI))
+ (pad 29 thru_hole circle (at 7.62 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 64 /TMS))
+ (pad 30 thru_hole circle (at 10.16 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 61 /TCK))
+ (pad 31 thru_hole circle (at 10.16 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /MA5))
+ (pad 32 thru_hole circle (at 12.7 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /MA1))
+ (pad 33 thru_hole circle (at 15.24 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /MA0))
+ (pad 34 thru_hole circle (at 12.7 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /MA6))
+ (pad 35 thru_hole circle (at 15.24 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /MD0))
+ (pad 36 thru_hole circle (at 12.7 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /MA7))
+ (pad 37 thru_hole circle (at 15.24 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /MD1))
+ (pad 38 thru_hole circle (at 12.7 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 39 thru_hole circle (at 15.24 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 3 /CSMEM))
+ (pad 40 thru_hole circle (at 12.7 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 /MD2))
+ (pad 41 thru_hole circle (at 15.24 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /MD10))
+ (pad 42 thru_hole circle (at 12.7 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 43 thru_hole circle (at 15.24 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 38 /OEMEM))
+ (pad 44 thru_hole circle (at 12.7 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /MD3))
+ (pad 45 thru_hole circle (at 15.24 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /MD11))
+ (pad 46 thru_hole circle (at 12.7 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /MD4))
+ (pad 47 thru_hole circle (at 15.24 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 37 /MD9))
+ (pad 48 thru_hole circle (at 12.7 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /MD5))
+ (pad 49 thru_hole circle (at 15.24 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 50 thru_hole circle (at 12.7 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 34 /MD6))
+ (pad 51 thru_hole circle (at 15.24 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 36 /MD8))
+ (pad 52 thru_hole circle (at 12.7 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 35 /MD7))
+ (pad 53 thru_hole circle (at 15.24 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /MD13))
+ (pad 54 thru_hole circle (at 12.7 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 58 /R/W-A14))
+ (pad 55 thru_hole circle (at 12.7 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /MD12))
+ (pad 56 thru_hole circle (at 10.16 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /MD14))
+ (pad 57 thru_hole circle (at 10.16 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 88 "Net-(U2-Pad57)"))
+ (pad 58 thru_hole circle (at 7.62 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /DAT6))
+ (pad 59 thru_hole circle (at 7.62 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 63 /TDO))
+ (pad 60 thru_hole circle (at 5.08 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 61 thru_hole circle (at 5.08 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /DAT5))
+ (pad 62 thru_hole circle (at 2.54 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /DAT7))
+ (pad 63 thru_hole circle (at 2.54 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /DAT4))
+ (pad 64 thru_hole circle (at 0 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 65 thru_hole circle (at 0 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 89 "Net-(U2-Pad65)"))
+ (pad 66 thru_hole circle (at -2.54 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /DAT1))
+ (pad 67 thru_hole circle (at -2.54 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /DCLK))
+ (pad 68 thru_hole circle (at -5.08 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /DAT3))
+ (pad 69 thru_hole circle (at -5.08 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /DAT0))
+ (pad 70 thru_hole circle (at -7.62 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /DAT2))
+ (pad 71 thru_hole circle (at -7.62 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 60 /SW1))
+ (pad 72 thru_hole circle (at -10.16 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 59 /SW0))
+ (pad 73 thru_hole circle (at -10.16 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 74 thru_hole circle (at -12.7 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /LED2))
+ (pad 75 thru_hole circle (at -15.24 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 50 /PAR_AUX3/SELECT*))
+ (pad 76 thru_hole circle (at -12.7 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /LED1))
+ (pad 77 thru_hole circle (at -15.24 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 51 /PAR_AUX4/PE))
+ (pad 78 thru_hole circle (at -12.7 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 79 thru_hole circle (at -15.24 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 53 /PAR_AUX6/ACK))
+ (pad 80 thru_hole circle (at -12.7 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 52 /PAR_AUX5/BUSY*))
+ (pad 81 thru_hole circle (at -15.24 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 45 /PARBUS6))
+ (pad 82 thru_hole circle (at -12.7 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 46 /PARBUS7))
+ (pad 83 thru_hole circle (at -15.24 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 44 /PARBUS5))
+ (pad 84 thru_hole circle (at -12.7 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 43 /PARBUS4))
+ (model Sockets.3dshapes/PLCC84.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Socket_Strips:Socket_Strip_Straight_1x03 (layer Dessus) (tedit 56332C49) (tstamp 5634890F)
+ (at 187.325 125.095 90)
+ (descr "Through hole socket strip")
+ (tags "socket strip")
+ (path /3EC243AC)
+ (fp_text reference P2 (at 0 -2.286 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_text value CONN_3 (at 0 2.286 90) (layer F.SilkS) hide
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start 1.27 1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.81 1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 2.54 0 270) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 97 /+12BATT))
+ (pad 2 thru_hole oval (at 0 0 270) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 3 thru_hole oval (at -2.54 0 270) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 98 /-12BATT))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x02 (layer Dessus) (tedit 0) (tstamp 56348915)
+ (at 111.125 86.36)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /3ECB3F5E)
+ (fp_text reference P4 (at 0 -5.1) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_2X2 (at 0 -3.1) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 2 thru_hole oval (at 2.54 0) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 56 /PIN_TEST0))
+ (pad 3 thru_hole oval (at 0 2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 GND))
+ (pad 4 thru_hole oval (at 2.54 2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 57 /PIN_TEST1))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl
+ (at (xyz 0.05 -0.05 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Socket_Strips:Socket_Strip_Straight_1x03 (layer Dessus) (tedit 0) (tstamp 56348B1E)
+ (at 168.275 66.675)
+ (descr "Through hole socket strip")
+ (tags "socket strip")
+ (path /3EC4C49F)
+ (fp_text reference K1 (at 0 -2.286) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_text value CONN_3 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_line (start 1.27 1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.81 1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 2.54 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 79 VCC))
+ (pad 2 thru_hole oval (at 0 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 74 "Net-(K1-Pad2)"))
+ (pad 3 thru_hole oval (at -2.54 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /MD14))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:D5 (layer Dessus) (tedit 0) (tstamp 56332708)
+ (at 186.055 112.395 180)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /3EC243C8)
+ (fp_text reference D1 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4004 (at -0.254 0 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.15))
+ (pad 2 thru_hole circle (at -6.35 0 180) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 97 /+12BATT))
+ (pad 1 thru_hole rect (at 6.35 0 180) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 1 +12V))
+ (model Discret.3dshapes/D5.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Discret:D5 (layer Dessus) (tedit 0) (tstamp 56332717)
+ (at 194.31 100.965 270)
+ (descr "Diode 5 pas")
+ (tags "DIODE DEV")
+ (path /3ECDDCDD)
+ (fp_text reference D4 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 1N4004 (at -0.254 0 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 6.35 0) (end 5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 0) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 -1.27) (end -5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 0) (end -6.35 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 0) (end -5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -5.08 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 5.08 1.27) (end 5.08 0) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 3.81 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 4.064 -1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.15))
+ (pad 2 thru_hole circle (at -6.35 0 270) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 2 -12V))
+ (pad 1 thru_hole rect (at 6.35 0 270) (size 1.778 1.778) (drill 1.143) (layers *.Cu *.Mask F.SilkS)
+ (net 98 /-12BATT))
+ (model Discret.3dshapes/D5.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.5 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_text -12V (at 187.325 130.429) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_line (start 144.78 135.89) (end 160.655 135.89) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_text ROM (at 176.53 67.31) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text "XILINX XC95108PC84" (at 113.665 133.985) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text "CARTE TEST" (at 107.315 131.445) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_line (start 160.655 135.89) (end 192.405 135.89) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 94.615 135.89) (end 144.78 135.89) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 94.615 36.195) (end 94.615 46.355) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 196.215 36.195) (end 94.615 36.195) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 196.215 37.465) (end 196.215 36.195) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 196.215 135.89) (end 194.945 135.89) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 196.215 37.465) (end 196.215 135.89) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 192.405 135.89) (end 194.945 135.89) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 94.615 133.985) (end 94.615 135.89) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_text "XILINX XC95108" (at 108.585 133.985) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_line (start 94.615 132.715) (end 94.615 133.985) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_text PIN2 (at 113.03 92.71) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text PIN1 (at 113.03 82.55) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text TMS (at 160.655 130.81 90) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text TCK (at 156.21 127 90) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text TDI (at 153.035 127 90) (layer Dessous)
+ (effects (font (size 1.27 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text TDO (at 149.733 125.095 90) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text GND (at 142.875 131.445) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text VCC (at 144.78 128.905 90) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text "CARTE TEST" (at 104.775 131.445) (layer Dessous)
+ (effects (font (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text VOUT (at 187.325 54.61) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text GND (at 187.325 68.58) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text +12V (at 186.69 119.888) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text GND (at 183.261 125.222) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_text RAM (at 161.29 67.31) (layer Dessus)
+ (effects (font (thickness 0.3048)))
+ )
+ (gr_line (start 94.615 46.355) (end 94.615 53.975) (angle 90) (layer Edge.Cuts) (width 0.3048))
+ (gr_line (start 94.615 53.975) (end 94.615 132.715) (angle 90) (layer Edge.Cuts) (width 0.3048))
+
+ (segment (start 131.445 41.91) (end 125.095 41.91) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 160.02 59.055) (end 159.385 58.42) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 155.575 113.665) (end 155.575 117.475) (width 1.016) (layer Dessous) (net 1) (status 400))
+ (segment (start 158.75 40.005) (end 133.35 40.005) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 159.385 58.42) (end 159.385 40.64) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 159.385 40.64) (end 158.75 40.005) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 173.99 59.055) (end 160.02 59.055) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 133.35 40.005) (end 131.445 41.91) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 163.83 106.68) (end 163.83 112.395) (width 1.016) (layer Dessous) (net 1) (status 800))
+ (segment (start 125.095 41.91) (end 124.46 41.275) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 124.46 41.275) (end 124.46 39.37) (width 1.016) (layer Dessus) (net 1) (status 400))
+ (segment (start 156.845 112.395) (end 155.575 113.665) (width 1.016) (layer Dessous) (net 1))
+ (segment (start 185.42 70.485) (end 173.99 59.055) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 169.545 112.395) (end 163.83 112.395) (width 1.016) (layer Dessous) (net 1))
+ (segment (start 186.69 71.755) (end 185.42 70.485) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 163.83 112.395) (end 156.845 112.395) (width 1.016) (layer Dessous) (net 1))
+ (segment (start 179.705 112.395) (end 179.705 110.49) (width 1.016) (layer Dessus) (net 1) (status 800))
+ (segment (start 186.69 107.315) (end 186.69 71.755) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 185.42 108.585) (end 186.69 107.315) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 169.545 112.395) (end 179.705 112.395) (width 1.016) (layer Dessous) (net 1) (status 400))
+ (segment (start 179.705 110.49) (end 183.515 110.49) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 183.515 110.49) (end 185.42 108.585) (width 1.016) (layer Dessus) (net 1))
+ (segment (start 129.54 46.99) (end 131.445 46.99) (width 1.016) (layer Dessous) (net 2) (status 800))
+ (segment (start 174.625 46.355) (end 191.135 46.355) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 160.02 43.815) (end 162.56 41.275) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 169.545 41.275) (end 174.625 46.355) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 149.225 43.815) (end 151.765 43.815) (width 1.016) (layer Dessous) (net 2) (status 400))
+ (segment (start 151.765 43.815) (end 160.02 43.815) (width 1.016) (layer Dessous) (net 2) (status 800))
+ (segment (start 138.43 48.895) (end 141.605 45.72) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 133.35 48.895) (end 138.43 48.895) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 141.605 45.72) (end 141.605 43.815) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 142.24 43.18) (end 148.59 43.18) (width 0.4318) (layer Dessous) (net 2))
+ (segment (start 148.59 43.18) (end 149.225 43.815) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 141.605 43.815) (end 142.24 43.18) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 131.445 46.99) (end 133.35 48.895) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 162.56 41.275) (end 169.545 41.275) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 194.31 94.615) (end 194.31 49.53) (width 1.016) (layer Dessous) (net 2) (status 800))
+ (segment (start 194.31 49.53) (end 191.77 46.99) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 191.135 46.355) (end 191.77 46.99) (width 1.016) (layer Dessous) (net 2))
+ (segment (start 180.975 93.345) (end 175.895 93.345) (width 0.4318) (layer Dessous) (net 3) (status 400))
+ (segment (start 150.495 92.075) (end 172.085 92.075) (width 0.4318) (layer Dessous) (net 3) (status 800))
+ (segment (start 175.895 93.345) (end 173.355 93.345) (width 0.4318) (layer Dessous) (net 3) (status 800))
+ (segment (start 180.975 93.345) (end 183.515 93.345) (width 0.4318) (layer Dessous) (net 3) (status 400))
+ (segment (start 173.355 93.345) (end 172.085 92.075) (width 0.4318) (layer Dessous) (net 3))
+ (segment (start 130.175 62.865) (end 131.445 61.595) (width 0.4318) (layer Dessous) (net 4))
+ (segment (start 128.905 69.215) (end 130.175 67.945) (width 0.4318) (layer Dessous) (net 4))
+ (segment (start 131.445 61.595) (end 133.35 61.595) (width 0.4318) (layer Dessous) (net 4))
+ (segment (start 128.905 73.025) (end 128.905 69.215) (width 0.4318) (layer Dessous) (net 4))
+ (segment (start 133.35 61.595) (end 133.985 60.96) (width 0.4318) (layer Dessous) (net 4))
+ (segment (start 133.985 60.96) (end 133.985 57.785) (width 0.4318) (layer Dessous) (net 4) (status 400))
+ (segment (start 130.175 74.295) (end 128.905 73.025) (width 0.4318) (layer Dessous) (net 4) (status 800))
+ (segment (start 130.175 67.945) (end 130.175 62.865) (width 0.4318) (layer Dessous) (net 4))
+ (segment (start 135.255 61.595) (end 135.255 66.675) (width 0.4318) (layer Dessous) (net 5))
+ (segment (start 132.715 69.215) (end 132.715 71.755) (width 0.4318) (layer Dessous) (net 5) (status 400))
+ (segment (start 132.715 69.215) (end 135.255 66.675) (width 0.4318) (layer Dessous) (net 5))
+ (segment (start 136.525 57.785) (end 136.525 60.325) (width 0.4318) (layer Dessous) (net 5) (status 800))
+ (segment (start 135.255 61.595) (end 136.525 60.325) (width 0.4318) (layer Dessous) (net 5))
+ (segment (start 127.635 69.215) (end 127.635 71.755) (width 0.4318) (layer Dessous) (net 6) (status 400))
+ (segment (start 128.905 67.945) (end 127.635 69.215) (width 0.4318) (layer Dessous) (net 6))
+ (segment (start 128.905 65.405) (end 128.905 67.945) (width 0.4318) (layer Dessous) (net 6) (status 800))
+ (segment (start 130.175 69.215) (end 131.445 67.945) (width 0.4318) (layer Dessous) (net 7))
+ (segment (start 131.445 67.945) (end 131.445 65.405) (width 0.4318) (layer Dessous) (net 7) (status 400))
+ (segment (start 130.175 71.755) (end 130.175 69.215) (width 0.4318) (layer Dessous) (net 7) (status 800))
+ (segment (start 139.065 57.785) (end 139.065 60.325) (width 0.4318) (layer Dessous) (net 8) (status 800))
+ (segment (start 136.525 71.12) (end 137.795 69.85) (width 0.4318) (layer Dessous) (net 8))
+ (segment (start 136.525 71.12) (end 136.525 73.025) (width 0.4318) (layer Dessous) (net 8))
+ (segment (start 137.795 69.85) (end 137.795 61.595) (width 0.4318) (layer Dessous) (net 8))
+ (segment (start 139.065 60.325) (end 137.795 61.595) (width 0.4318) (layer Dessous) (net 8))
+ (segment (start 136.525 73.025) (end 137.795 74.295) (width 0.4318) (layer Dessous) (net 8) (status 400))
+ (segment (start 140.335 61.595) (end 140.335 66.675) (width 0.4318) (layer Dessous) (net 9))
+ (segment (start 141.605 60.325) (end 140.335 61.595) (width 0.4318) (layer Dessous) (net 9))
+ (segment (start 141.605 67.945) (end 140.335 66.675) (width 0.4318) (layer Dessous) (net 9))
+ (segment (start 141.605 73.025) (end 141.605 67.945) (width 0.4318) (layer Dessous) (net 9))
+ (segment (start 140.335 74.295) (end 141.605 73.025) (width 0.4318) (layer Dessous) (net 9) (status 800))
+ (segment (start 141.605 57.785) (end 141.605 60.325) (width 0.4318) (layer Dessous) (net 9) (status 800))
+ (segment (start 142.875 71.755) (end 142.875 66.04) (width 0.4318) (layer Dessous) (net 10) (status 800))
+ (segment (start 142.875 66.04) (end 142.24 65.405) (width 0.4318) (layer Dessous) (net 10))
+ (segment (start 142.24 65.405) (end 141.605 65.405) (width 0.4318) (layer Dessous) (net 10) (status 400))
+ (segment (start 139.065 70.485) (end 137.795 71.755) (width 0.4318) (layer Dessous) (net 11) (status 400))
+ (segment (start 139.065 65.405) (end 139.065 70.485) (width 0.4318) (layer Dessous) (net 11) (status 800))
+ (segment (start 133.985 66.675) (end 133.985 65.405) (width 0.4318) (layer Dessous) (net 12) (status 400))
+ (segment (start 131.445 69.215) (end 133.985 66.675) (width 0.4318) (layer Dessous) (net 12))
+ (segment (start 131.445 73.025) (end 131.445 69.215) (width 0.4318) (layer Dessous) (net 12))
+ (segment (start 132.715 74.295) (end 131.445 73.025) (width 0.4318) (layer Dessous) (net 12) (status 800))
+ (segment (start 114.935 62.865) (end 114.935 71.755) (width 0.4318) (layer Dessous) (net 13) (status 800))
+ (segment (start 116.205 73.025) (end 114.935 71.755) (width 0.4318) (layer Dessous) (net 13))
+ (segment (start 116.205 73.025) (end 121.285 73.025) (width 0.4318) (layer Dessous) (net 13))
+ (segment (start 121.285 73.025) (end 122.555 74.295) (width 0.4318) (layer Dessous) (net 13) (status 400))
+ (segment (start 117.475 62.865) (end 117.475 71.12) (width 0.4318) (layer Dessous) (net 14) (status 800))
+ (segment (start 118.11 71.755) (end 122.555 71.755) (width 0.4318) (layer Dessous) (net 14) (status 400))
+ (segment (start 117.475 71.12) (end 118.11 71.755) (width 0.4318) (layer Dessous) (net 14))
+ (segment (start 150.495 99.695) (end 161.925 99.695) (width 0.4318) (layer Dessous) (net 15) (status 800))
+ (segment (start 161.925 99.695) (end 163.195 98.425) (width 0.4318) (layer Dessous) (net 15))
+ (segment (start 163.195 98.425) (end 168.275 98.425) (width 0.4318) (layer Dessous) (net 15) (status 400))
+ (segment (start 147.955 102.235) (end 161.925 102.235) (width 0.4318) (layer Dessous) (net 16) (status 800))
+ (segment (start 161.925 102.235) (end 163.195 100.965) (width 0.4318) (layer Dessous) (net 16))
+ (segment (start 163.195 100.965) (end 168.275 100.965) (width 0.4318) (layer Dessous) (net 16) (status 400))
+ (segment (start 163.83 103.505) (end 168.275 103.505) (width 0.4318) (layer Dessus) (net 17) (status 400))
+ (segment (start 140.97 105.41) (end 151.13 105.41) (width 0.4318) (layer Dessus) (net 17))
+ (via (at 140.97 105.41) (size 1.651) (layers Dessus Dessous) (net 17))
+ (segment (start 161.925 105.41) (end 163.83 103.505) (width 0.4318) (layer Dessus) (net 17))
+ (segment (start 151.13 105.41) (end 161.925 105.41) (width 0.4318) (layer Dessus) (net 17))
+ (segment (start 140.335 102.235) (end 140.335 104.14) (width 0.4318) (layer Dessous) (net 17) (status 800))
+ (segment (start 140.335 104.14) (end 140.97 104.775) (width 0.4318) (layer Dessous) (net 17))
+ (segment (start 140.97 104.775) (end 140.97 105.41) (width 0.4318) (layer Dessous) (net 17))
+ (segment (start 135.255 107.315) (end 135.255 104.775) (width 0.4318) (layer Dessous) (net 18))
+ (segment (start 137.16 107.95) (end 136.525 107.315) (width 0.4318) (layer Dessus) (net 18))
+ (segment (start 136.525 100.965) (end 137.795 99.695) (width 0.4318) (layer Dessous) (net 18) (status 400))
+ (segment (start 136.525 107.315) (end 135.255 107.315) (width 0.4318) (layer Dessus) (net 18))
+ (segment (start 175.895 106.045) (end 183.515 106.045) (width 0.4318) (layer Dessous) (net 18) (status C00))
+ (segment (start 140.335 107.95) (end 137.16 107.95) (width 0.4318) (layer Dessus) (net 18))
+ (segment (start 135.255 104.775) (end 136.525 103.505) (width 0.4318) (layer Dessous) (net 18))
+ (segment (start 136.525 103.505) (end 136.525 100.965) (width 0.4318) (layer Dessous) (net 18))
+ (segment (start 183.515 108.585) (end 183.515 106.045) (width 0.4318) (layer Dessus) (net 18) (status 400))
+ (segment (start 140.335 107.95) (end 141.605 109.22) (width 0.4318) (layer Dessus) (net 18))
+ (segment (start 141.605 109.22) (end 182.88 109.22) (width 0.4318) (layer Dessus) (net 18))
+ (via (at 135.255 107.315) (size 1.651) (layers Dessus Dessous) (net 18))
+ (segment (start 182.88 109.22) (end 183.515 108.585) (width 0.4318) (layer Dessus) (net 18))
+ (segment (start 183.515 103.505) (end 175.895 103.505) (width 0.4318) (layer Dessous) (net 19) (status C00))
+ (segment (start 137.16 106.045) (end 138.43 106.045) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 143.51 107.315) (end 140.97 107.315) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 137.795 104.14) (end 137.795 102.235) (width 0.4318) (layer Dessous) (net 19) (status 400))
+ (segment (start 177.165 107.95) (end 144.145 107.95) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 138.43 106.045) (end 139.065 106.68) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 144.145 107.95) (end 143.51 107.315) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 181.61 103.505) (end 177.165 107.95) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 137.16 104.775) (end 137.16 106.045) (width 0.4318) (layer Dessous) (net 19))
+ (segment (start 183.515 103.505) (end 181.61 103.505) (width 0.4318) (layer Dessus) (net 19) (status 800))
+ (via (at 137.16 106.045) (size 1.651) (layers Dessus Dessous) (net 19))
+ (segment (start 140.335 106.68) (end 140.97 107.315) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 137.795 104.14) (end 137.16 104.775) (width 0.4318) (layer Dessous) (net 19))
+ (segment (start 139.065 106.68) (end 140.335 106.68) (width 0.4318) (layer Dessus) (net 19))
+ (segment (start 180.975 100.965) (end 183.515 100.965) (width 0.4318) (layer Dessous) (net 20) (status 400))
+ (segment (start 180.975 100.965) (end 175.895 100.965) (width 0.4318) (layer Dessous) (net 20) (status 400))
+ (segment (start 145.415 99.695) (end 146.685 100.965) (width 0.4318) (layer Dessous) (net 20) (status 800))
+ (segment (start 173.99 100.965) (end 172.72 99.695) (width 0.4318) (layer Dessous) (net 20))
+ (segment (start 146.685 100.965) (end 161.925 100.965) (width 0.4318) (layer Dessous) (net 20))
+ (segment (start 161.925 100.965) (end 163.195 99.695) (width 0.4318) (layer Dessous) (net 20))
+ (segment (start 175.895 100.965) (end 173.99 100.965) (width 0.4318) (layer Dessous) (net 20) (status 800))
+ (segment (start 163.195 99.695) (end 172.72 99.695) (width 0.4318) (layer Dessous) (net 20))
+ (segment (start 175.895 98.425) (end 173.355 98.425) (width 0.4318) (layer Dessous) (net 21) (status 800))
+ (segment (start 180.975 98.425) (end 175.895 98.425) (width 0.4318) (layer Dessous) (net 21) (status 400))
+ (segment (start 180.975 98.425) (end 183.515 98.425) (width 0.4318) (layer Dessous) (net 21) (status 400))
+ (segment (start 161.925 98.425) (end 163.195 97.155) (width 0.4318) (layer Dessous) (net 21))
+ (segment (start 163.195 97.155) (end 172.085 97.155) (width 0.4318) (layer Dessous) (net 21))
+ (segment (start 149.225 98.425) (end 161.925 98.425) (width 0.4318) (layer Dessous) (net 21))
+ (segment (start 173.355 98.425) (end 172.085 97.155) (width 0.4318) (layer Dessous) (net 21))
+ (segment (start 147.955 99.695) (end 149.225 98.425) (width 0.4318) (layer Dessous) (net 21) (status 800))
+ (segment (start 172.72 94.615) (end 172.085 94.615) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 175.895 95.885) (end 173.99 95.885) (width 0.4318) (layer Dessous) (net 22) (status 800))
+ (segment (start 173.99 95.885) (end 172.72 94.615) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 147.955 97.155) (end 149.225 95.885) (width 0.4318) (layer Dessous) (net 22) (status 800))
+ (segment (start 159.385 94.615) (end 172.085 94.615) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 149.225 95.885) (end 158.115 95.885) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 158.115 95.885) (end 159.385 94.615) (width 0.4318) (layer Dessous) (net 22))
+ (segment (start 180.975 95.885) (end 175.895 95.885) (width 0.4318) (layer Dessous) (net 22) (status 400))
+ (segment (start 180.975 95.885) (end 183.515 95.885) (width 0.4318) (layer Dessous) (net 22) (status 400))
+ (segment (start 159.385 97.155) (end 160.655 95.885) (width 0.4318) (layer Dessous) (net 23))
+ (segment (start 160.655 95.885) (end 168.275 95.885) (width 0.4318) (layer Dessous) (net 23) (status 400))
+ (segment (start 150.495 97.155) (end 159.385 97.155) (width 0.4318) (layer Dessous) (net 23) (status 800))
+ (segment (start 151.765 93.345) (end 168.275 93.345) (width 0.4318) (layer Dessous) (net 24) (status 400))
+ (segment (start 150.495 94.615) (end 151.765 93.345) (width 0.4318) (layer Dessous) (net 24) (status 800))
+ (segment (start 173.99 90.805) (end 172.72 89.535) (width 0.4318) (layer Dessous) (net 25))
+ (segment (start 175.895 90.805) (end 173.99 90.805) (width 0.4318) (layer Dessous) (net 25) (status 800))
+ (segment (start 180.975 90.805) (end 175.895 90.805) (width 0.4318) (layer Dessous) (net 25) (status 400))
+ (segment (start 180.975 90.805) (end 183.515 90.805) (width 0.4318) (layer Dessous) (net 25) (status 400))
+ (segment (start 150.495 89.535) (end 172.72 89.535) (width 0.4318) (layer Dessous) (net 25) (status 800))
+ (segment (start 175.895 85.725) (end 173.99 85.725) (width 0.4318) (layer Dessous) (net 26) (status 800))
+ (segment (start 150.495 84.455) (end 172.72 84.455) (width 0.4318) (layer Dessous) (net 26) (status 800))
+ (segment (start 175.895 85.725) (end 180.975 85.725) (width 0.4318) (layer Dessous) (net 26) (status 800))
+ (segment (start 180.975 85.725) (end 183.515 85.725) (width 0.4318) (layer Dessous) (net 26) (status 400))
+ (segment (start 173.99 85.725) (end 172.72 84.455) (width 0.4318) (layer Dessous) (net 26))
+ (segment (start 147.955 74.295) (end 149.225 73.025) (width 0.4318) (layer Dessous) (net 27) (status 800))
+ (segment (start 160.655 75.565) (end 168.275 75.565) (width 0.4318) (layer Dessous) (net 27) (status 400))
+ (segment (start 149.225 73.025) (end 158.115 73.025) (width 0.4318) (layer Dessous) (net 27))
+ (segment (start 158.115 73.025) (end 160.655 75.565) (width 0.4318) (layer Dessous) (net 27))
+ (segment (start 175.895 78.105) (end 172.085 78.105) (width 0.4318) (layer Dessous) (net 28) (status 800))
+ (segment (start 175.895 78.105) (end 183.515 78.105) (width 0.4318) (layer Dessous) (net 28) (status C00))
+ (segment (start 158.115 74.295) (end 160.655 76.835) (width 0.4318) (layer Dessous) (net 28))
+ (segment (start 170.815 76.835) (end 172.085 78.105) (width 0.4318) (layer Dessous) (net 28))
+ (segment (start 158.115 74.295) (end 150.495 74.295) (width 0.4318) (layer Dessous) (net 28) (status 400))
+ (segment (start 160.655 76.835) (end 170.815 76.835) (width 0.4318) (layer Dessous) (net 28))
+ (segment (start 145.415 68.58) (end 146.05 67.945) (width 0.4318) (layer Dessous) (net 29))
+ (segment (start 145.415 71.755) (end 145.415 68.58) (width 0.4318) (layer Dessous) (net 29) (status 800))
+ (segment (start 146.05 67.945) (end 159.385 67.945) (width 0.4318) (layer Dessous) (net 29))
+ (segment (start 159.385 67.945) (end 160.655 66.675) (width 0.4318) (layer Dessous) (net 29))
+ (segment (start 160.655 66.675) (end 165.735 66.675) (width 0.4318) (layer Dessous) (net 29) (status 400))
+ (segment (start 147.955 92.075) (end 149.225 90.805) (width 0.4318) (layer Dessous) (net 30) (status 800))
+ (segment (start 149.225 90.805) (end 168.275 90.805) (width 0.4318) (layer Dessous) (net 30) (status 400))
+ (segment (start 149.225 88.265) (end 168.275 88.265) (width 0.4318) (layer Dessous) (net 31) (status 400))
+ (segment (start 147.955 86.995) (end 149.225 88.265) (width 0.4318) (layer Dessous) (net 31) (status 800))
+ (segment (start 149.225 85.725) (end 147.955 84.455) (width 0.4318) (layer Dessous) (net 32) (status 400))
+ (segment (start 168.275 85.725) (end 149.225 85.725) (width 0.4318) (layer Dessous) (net 32) (status 800))
+ (segment (start 149.225 83.185) (end 147.955 81.915) (width 0.4318) (layer Dessous) (net 33) (status 400))
+ (segment (start 168.275 83.185) (end 149.225 83.185) (width 0.4318) (layer Dessous) (net 33) (status 800))
+ (segment (start 147.955 79.375) (end 149.225 80.645) (width 0.4318) (layer Dessous) (net 34) (status 800))
+ (segment (start 149.225 80.645) (end 168.275 80.645) (width 0.4318) (layer Dessous) (net 34) (status 400))
+ (segment (start 149.225 75.565) (end 147.955 76.835) (width 0.4318) (layer Dessous) (net 35) (status 400))
+ (segment (start 156.845 75.565) (end 149.225 75.565) (width 0.4318) (layer Dessous) (net 35))
+ (segment (start 159.385 78.105) (end 156.845 75.565) (width 0.4318) (layer Dessous) (net 35))
+ (segment (start 168.275 78.105) (end 159.385 78.105) (width 0.4318) (layer Dessous) (net 35) (status 800))
+ (segment (start 159.385 79.375) (end 172.72 79.375) (width 0.4318) (layer Dessous) (net 36))
+ (segment (start 173.99 80.645) (end 172.72 79.375) (width 0.4318) (layer Dessous) (net 36))
+ (segment (start 156.845 76.835) (end 159.385 79.375) (width 0.4318) (layer Dessous) (net 36))
+ (segment (start 175.895 80.645) (end 173.99 80.645) (width 0.4318) (layer Dessous) (net 36) (status 800))
+ (segment (start 180.975 80.645) (end 183.515 80.645) (width 0.4318) (layer Dessous) (net 36) (status 400))
+ (segment (start 175.895 80.645) (end 180.975 80.645) (width 0.4318) (layer Dessous) (net 36) (status 800))
+ (segment (start 150.495 76.835) (end 156.845 76.835) (width 0.4318) (layer Dessous) (net 36) (status 800))
+ (segment (start 173.99 83.185) (end 172.72 81.915) (width 0.4318) (layer Dessous) (net 37))
+ (segment (start 150.495 81.915) (end 172.72 81.915) (width 0.4318) (layer Dessous) (net 37) (status 800))
+ (segment (start 175.895 83.185) (end 173.99 83.185) (width 0.4318) (layer Dessous) (net 37) (status 800))
+ (segment (start 175.895 83.185) (end 180.975 83.185) (width 0.4318) (layer Dessous) (net 37) (status 800))
+ (segment (start 180.975 83.185) (end 183.515 83.185) (width 0.4318) (layer Dessous) (net 37) (status 400))
+ (segment (start 173.99 88.265) (end 172.72 86.995) (width 0.4318) (layer Dessous) (net 38))
+ (segment (start 180.975 88.265) (end 183.515 88.265) (width 0.4318) (layer Dessous) (net 38) (status 400))
+ (segment (start 150.495 86.995) (end 172.72 86.995) (width 0.4318) (layer Dessous) (net 38) (status 800))
+ (segment (start 175.895 88.265) (end 173.99 88.265) (width 0.4318) (layer Dessous) (net 38) (status 800))
+ (segment (start 180.975 88.265) (end 175.895 88.265) (width 0.4318) (layer Dessous) (net 38) (status 400))
+ (segment (start 115.951 98.425) (end 121.285 98.425) (width 0.4318) (layer Dessous) (net 39))
+ (segment (start 121.285 98.425) (end 122.555 97.155) (width 0.4318) (layer Dessous) (net 39) (status 400))
+ (segment (start 112.395 101.981) (end 115.951 98.425) (width 0.4318) (layer Dessous) (net 39))
+ (segment (start 102.235 101.981) (end 112.395 101.981) (width 0.4318) (layer Dessous) (net 39) (status 800))
+ (segment (start 109.22 99.06) (end 102.235 99.06) (width 0.4318) (layer Dessous) (net 40))
+ (segment (start 102.235 99.06) (end 102.235 99.314) (width 0.4318) (layer Dessous) (net 40) (status 400))
+ (segment (start 112.395 95.885) (end 109.22 99.06) (width 0.4318) (layer Dessous) (net 40))
+ (segment (start 118.745 95.885) (end 120.015 94.615) (width 0.4318) (layer Dessous) (net 40) (status 400))
+ (segment (start 112.395 95.885) (end 118.745 95.885) (width 0.4318) (layer Dessous) (net 40))
+ (segment (start 117.475 93.345) (end 118.745 92.075) (width 0.4318) (layer Dessous) (net 41))
+ (segment (start 102.235 96.52) (end 104.775 96.52) (width 0.4318) (layer Dessous) (net 41) (status 800))
+ (segment (start 118.745 92.075) (end 120.015 92.075) (width 0.4318) (layer Dessous) (net 41) (status 400))
+ (segment (start 108.585 95.885) (end 111.125 93.345) (width 0.4318) (layer Dessous) (net 41))
+ (segment (start 105.41 95.885) (end 108.585 95.885) (width 0.4318) (layer Dessous) (net 41))
+ (segment (start 104.775 96.52) (end 105.41 95.885) (width 0.4318) (layer Dessous) (net 41))
+ (segment (start 111.125 93.345) (end 117.475 93.345) (width 0.4318) (layer Dessous) (net 41))
+ (segment (start 102.235 93.726) (end 105.41 93.726) (width 0.4318) (layer Dessous) (net 42) (status 800))
+ (segment (start 118.11 89.535) (end 120.015 89.535) (width 0.4318) (layer Dessous) (net 42) (status 400))
+ (segment (start 109.22 90.805) (end 116.84 90.805) (width 0.4318) (layer Dessous) (net 42))
+ (segment (start 105.41 93.726) (end 107.061 92.075) (width 0.4318) (layer Dessous) (net 42))
+ (segment (start 107.95 92.075) (end 109.22 90.805) (width 0.4318) (layer Dessous) (net 42))
+ (segment (start 116.84 90.805) (end 118.11 89.535) (width 0.4318) (layer Dessous) (net 42))
+ (segment (start 107.061 92.075) (end 107.95 92.075) (width 0.4318) (layer Dessous) (net 42))
+ (segment (start 121.285 85.725) (end 122.555 84.455) (width 0.4318) (layer Dessous) (net 43) (status 400))
+ (segment (start 106.68 88.9) (end 106.68 87.63) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 104.775 90.932) (end 104.775 90.805) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 109.855 84.455) (end 116.84 84.455) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 106.68 87.63) (end 109.855 84.455) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 118.11 85.725) (end 121.285 85.725) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 116.84 84.455) (end 118.11 85.725) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 104.775 90.805) (end 106.68 88.9) (width 0.4318) (layer Dessous) (net 43))
+ (segment (start 102.235 90.932) (end 104.775 90.932) (width 0.4318) (layer Dessous) (net 43) (status 800))
+ (segment (start 109.22 83.185) (end 117.475 83.185) (width 0.4318) (layer Dessous) (net 44))
+ (segment (start 102.235 88.265) (end 104.14 88.265) (width 0.4318) (layer Dessous) (net 44) (status 800))
+ (segment (start 118.745 84.455) (end 120.015 84.455) (width 0.4318) (layer Dessous) (net 44) (status 400))
+ (segment (start 104.14 88.265) (end 109.22 83.185) (width 0.4318) (layer Dessous) (net 44))
+ (segment (start 117.475 83.185) (end 118.745 84.455) (width 0.4318) (layer Dessous) (net 44))
+ (segment (start 107.315 81.915) (end 120.015 81.915) (width 0.4318) (layer Dessous) (net 45) (status 400))
+ (segment (start 104.14 85.09) (end 107.315 81.915) (width 0.4318) (layer Dessous) (net 45))
+ (segment (start 102.235 85.471) (end 104.14 85.471) (width 0.4318) (layer Dessous) (net 45) (status 800))
+ (segment (start 104.14 85.471) (end 104.14 85.09) (width 0.4318) (layer Dessous) (net 45))
+ (segment (start 103.505 82.55) (end 105.41 80.645) (width 0.4318) (layer Dessous) (net 46))
+ (segment (start 102.235 82.677) (end 103.505 82.677) (width 0.4318) (layer Dessous) (net 46) (status 800))
+ (segment (start 103.505 82.677) (end 103.505 82.55) (width 0.4318) (layer Dessous) (net 46))
+ (segment (start 105.41 80.645) (end 121.285 80.645) (width 0.4318) (layer Dessous) (net 46))
+ (segment (start 121.285 80.645) (end 122.555 81.915) (width 0.4318) (layer Dessous) (net 46) (status 400))
+ (segment (start 117.475 104.775) (end 122.555 99.695) (width 0.4318) (layer Dessous) (net 47) (status 400))
+ (segment (start 102.235 104.775) (end 117.475 104.775) (width 0.4318) (layer Dessous) (net 47) (status 800))
+ (segment (start 113.3602 97.155) (end 120.015 97.155) (width 0.4318) (layer Dessous) (net 48) (status 400))
+ (segment (start 99.695 100.6602) (end 109.855 100.6602) (width 0.4318) (layer Dessous) (net 48) (status 800))
+ (segment (start 109.855 100.6602) (end 113.3602 97.155) (width 0.4318) (layer Dessous) (net 48))
+ (segment (start 100.965 103.505) (end 116.205 103.505) (width 0.4318) (layer Dessous) (net 49))
+ (segment (start 116.205 103.505) (end 120.015 99.695) (width 0.4318) (layer Dessous) (net 49) (status 400))
+ (segment (start 100.965 103.2002) (end 100.965 103.505) (width 0.4318) (layer Dessous) (net 49))
+ (segment (start 99.695 103.2002) (end 100.965 103.2002) (width 0.4318) (layer Dessous) (net 49) (status 800))
+ (segment (start 102.235 71.628) (end 108.585 71.628) (width 0.4318) (layer Dessous) (net 50) (status 800))
+ (segment (start 108.585 71.628) (end 111.125 74.168) (width 0.4318) (layer Dessous) (net 50))
+ (segment (start 111.125 74.168) (end 120.015 74.168) (width 0.4318) (layer Dessous) (net 50))
+ (segment (start 120.015 74.168) (end 120.015 74.295) (width 0.4318) (layer Dessous) (net 50) (status 400))
+ (segment (start 109.855 74.422) (end 112.268 76.835) (width 0.4318) (layer Dessous) (net 51))
+ (segment (start 112.268 76.835) (end 120.015 76.835) (width 0.4318) (layer Dessous) (net 51) (status 400))
+ (segment (start 102.235 74.422) (end 109.855 74.422) (width 0.4318) (layer Dessous) (net 51) (status 800))
+ (segment (start 112.014 78.105) (end 121.285 78.105) (width 0.4318) (layer Dessous) (net 52))
+ (segment (start 111.125 77.216) (end 112.014 78.105) (width 0.4318) (layer Dessous) (net 52))
+ (segment (start 102.235 77.216) (end 111.125 77.216) (width 0.4318) (layer Dessous) (net 52) (status 800))
+ (segment (start 121.285 78.105) (end 122.555 79.375) (width 0.4318) (layer Dessous) (net 52) (status 400))
+ (segment (start 103.505 79.375) (end 120.015 79.375) (width 0.4318) (layer Dessous) (net 53) (status 400))
+ (segment (start 102.235 79.883) (end 103.505 79.883) (width 0.4318) (layer Dessous) (net 53) (status 800))
+ (segment (start 103.505 79.883) (end 103.505 79.375) (width 0.4318) (layer Dessous) (net 53))
+ (segment (start 104.648 97.79) (end 108.585 97.79) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 108.585 97.79) (end 111.76 94.615) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 118.745 93.345) (end 117.475 94.615) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 104.394 98.044) (end 104.648 97.79) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 121.285 93.345) (end 122.555 92.075) (width 0.4318) (layer Dessous) (net 54) (status 400))
+ (segment (start 118.745 93.345) (end 121.285 93.345) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 99.8728 98.044) (end 104.394 98.044) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 99.695 97.8662) (end 99.8728 98.044) (width 0.4318) (layer Dessous) (net 54) (status 800))
+ (segment (start 111.76 94.615) (end 117.475 94.615) (width 0.4318) (layer Dessous) (net 54))
+ (segment (start 105.283 94.615) (end 108.585 94.615) (width 0.4318) (layer Dessous) (net 55))
+ (segment (start 99.695 95.123) (end 104.775 95.123) (width 0.4318) (layer Dessous) (net 55) (status 800))
+ (segment (start 111.125 92.075) (end 117.475 92.075) (width 0.4318) (layer Dessous) (net 55))
+ (segment (start 117.475 92.075) (end 118.745 90.805) (width 0.4318) (layer Dessous) (net 55))
+ (segment (start 118.745 90.805) (end 121.285 90.805) (width 0.4318) (layer Dessous) (net 55))
+ (segment (start 121.285 90.805) (end 122.555 89.535) (width 0.4318) (layer Dessous) (net 55) (status 400))
+ (segment (start 108.585 94.615) (end 111.125 92.075) (width 0.4318) (layer Dessous) (net 55))
+ (segment (start 104.775 95.123) (end 105.283 94.615) (width 0.4318) (layer Dessous) (net 55))
+ (segment (start 116.84 86.995) (end 120.015 86.995) (width 0.4318) (layer Dessous) (net 56) (status 400))
+ (segment (start 116.205 86.36) (end 116.84 86.995) (width 0.4318) (layer Dessous) (net 56))
+ (segment (start 113.665 86.36) (end 116.205 86.36) (width 0.4318) (layer Dessous) (net 56) (status 800))
+ (segment (start 116.205 88.9) (end 116.84 88.265) (width 0.4318) (layer Dessous) (net 57))
+ (segment (start 116.84 88.265) (end 121.285 88.265) (width 0.4318) (layer Dessous) (net 57))
+ (segment (start 113.665 88.9) (end 116.205 88.9) (width 0.4318) (layer Dessous) (net 57) (status 800))
+ (segment (start 121.285 88.265) (end 122.555 86.995) (width 0.4318) (layer Dessous) (net 57) (status 400))
+ (segment (start 175.895 75.565) (end 183.515 75.565) (width 0.4318) (layer Dessous) (net 58) (status C00))
+ (segment (start 161.925 74.295) (end 159.385 71.755) (width 0.4318) (layer Dessous) (net 58))
+ (segment (start 170.815 74.295) (end 172.085 75.565) (width 0.4318) (layer Dessous) (net 58))
+ (segment (start 159.385 71.755) (end 147.955 71.755) (width 0.4318) (layer Dessous) (net 58) (status 400))
+ (segment (start 170.815 74.295) (end 161.925 74.295) (width 0.4318) (layer Dessous) (net 58))
+ (segment (start 175.895 75.565) (end 172.085 75.565) (width 0.4318) (layer Dessous) (net 58) (status 800))
+ (segment (start 139.065 52.07) (end 146.05 52.07) (width 0.4318) (layer Dessus) (net 59))
+ (segment (start 123.19 69.85) (end 125.095 71.755) (width 0.4318) (layer Dessous) (net 59) (status 400))
+ (via (at 120.015 67.945) (size 1.651) (layers Dessus Dessous) (net 59))
+ (segment (start 147.955 53.975) (end 146.05 52.07) (width 0.4318) (layer Dessus) (net 59) (status 800))
+ (segment (start 135.89 48.895) (end 139.065 52.07) (width 0.4318) (layer Dessus) (net 59))
+ (segment (start 120.015 67.945) (end 120.015 69.215) (width 0.4318) (layer Dessous) (net 59))
+ (segment (start 120.015 67.945) (end 120.015 50.8) (width 0.4318) (layer Dessus) (net 59))
+ (segment (start 120.015 50.8) (end 121.92 48.895) (width 0.4318) (layer Dessus) (net 59))
+ (segment (start 120.65 69.85) (end 123.19 69.85) (width 0.4318) (layer Dessous) (net 59))
+ (segment (start 147.955 53.975) (end 150.495 51.435) (width 0.4318) (layer Dessous) (net 59) (status 800))
+ (segment (start 150.495 51.435) (end 154.305 51.435) (width 0.4318) (layer Dessous) (net 59) (status 400))
+ (segment (start 121.92 48.895) (end 135.89 48.895) (width 0.4318) (layer Dessus) (net 59))
+ (segment (start 120.015 69.215) (end 120.65 69.85) (width 0.4318) (layer Dessous) (net 59))
+ (segment (start 159.385 53.975) (end 161.925 51.435) (width 0.4318) (layer Dessous) (net 60))
+ (segment (start 139.065 55.245) (end 143.51 55.245) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 150.495 53.975) (end 159.385 53.975) (width 0.4318) (layer Dessous) (net 60) (status 800))
+ (segment (start 149.86 55.88) (end 150.495 55.245) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 123.825 67.945) (end 121.92 67.945) (width 0.4318) (layer Dessous) (net 60))
+ (segment (start 143.51 55.245) (end 144.145 55.88) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 126.365 73.025) (end 126.365 70.485) (width 0.4318) (layer Dessous) (net 60))
+ (segment (start 127.635 74.295) (end 126.365 73.025) (width 0.4318) (layer Dessous) (net 60) (status 800))
+ (segment (start 135.89 52.07) (end 123.19 52.07) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 144.145 55.88) (end 149.86 55.88) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 161.925 51.435) (end 168.275 51.435) (width 0.4318) (layer Dessous) (net 60) (status 400))
+ (segment (start 150.495 55.245) (end 150.495 53.975) (width 0.4318) (layer Dessus) (net 60) (status 400))
+ (segment (start 135.89 52.07) (end 139.065 55.245) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 126.365 70.485) (end 123.825 67.945) (width 0.4318) (layer Dessous) (net 60))
+ (segment (start 121.92 67.945) (end 121.92 53.34) (width 0.4318) (layer Dessus) (net 60))
+ (segment (start 123.19 52.07) (end 121.92 53.34) (width 0.4318) (layer Dessus) (net 60))
+ (via (at 121.92 67.945) (size 1.651) (layers Dessus Dessous) (net 60))
+ (segment (start 152.654 120.904) (end 152.654 120.904) (width 0.4318) (layer Dessous) (net 61))
+ (segment (start 154.305 128.905) (end 154.94 129.54) (width 0.4318) (layer Dessous) (net 61) (tstamp 56348A12))
+ (segment (start 154.305 124.841) (end 154.305 128.905) (width 0.4318) (layer Dessous) (net 61) (tstamp 56348A11))
+ (segment (start 152.654 123.19) (end 154.305 124.841) (width 0.4318) (layer Dessous) (net 61) (tstamp 56348A10))
+ (segment (start 152.654 120.904) (end 152.654 123.19) (width 0.4318) (layer Dessous) (net 61) (tstamp 56348A0F))
+ (segment (start 152.654 120.904) (end 145.034 113.284) (width 0.4318) (layer Dessous) (net 61))
+ (segment (start 154.94 129.54) (end 155.575 130.175) (width 0.4318) (layer Dessous) (net 61))
+ (segment (start 155.575 130.175) (end 155.575 133.35) (width 0.4318) (layer Dessous) (net 61) (status 400))
+ (segment (start 145.034 113.284) (end 145.415 102.235) (width 0.4318) (layer Dessous) (net 61) (status 400))
+ (segment (start 152.781 133.35) (end 152.781 130.302) (width 0.4318) (layer Dessous) (net 62))
+ (segment (start 151.511 129.032) (end 151.511 128.651) (width 0.4318) (layer Dessous) (net 62) (tstamp 56348A24))
+ (segment (start 152.781 130.302) (end 151.511 129.032) (width 0.4318) (layer Dessous) (net 62) (tstamp 56348A23))
+ (segment (start 151.511 122.301) (end 151.511 128.651) (width 0.4318) (layer Dessous) (net 62))
+ (segment (start 144.145 103.505) (end 144.145 114.935) (width 0.4318) (layer Dessous) (net 62))
+ (segment (start 142.875 102.235) (end 144.145 103.505) (width 0.4318) (layer Dessous) (net 62) (status 800))
+ (segment (start 144.145 114.935) (end 151.511 122.301) (width 0.4318) (layer Dessous) (net 62))
+ (segment (start 152.4 104.14) (end 142.24 104.14) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 142.24 104.14) (end 141.986 103.886) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 141.986 103.886) (end 139.827 103.886) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 144.145 129.54) (end 145.415 128.27) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 139.827 103.886) (end 139.573 104.14) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 139.573 104.14) (end 120.65 104.14) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 120.65 104.14) (end 116.205 108.585) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 144.145 67.31) (end 144.145 73.025) (width 0.4318) (layer Dessous) (net 63))
+ (segment (start 116.205 108.585) (end 116.205 127.635) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 116.205 127.635) (end 118.11 129.54) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 118.11 129.54) (end 144.145 129.54) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 145.415 128.27) (end 149.86 128.27) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 151.765 66.675) (end 152.4 66.04) (width 0.4318) (layer Dessous) (net 63))
+ (via (at 154.305 66.04) (size 1.651) (layers Dessus Dessous) (net 63))
+ (segment (start 154.305 102.235) (end 154.305 66.04) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 149.987 130.175) (end 149.86 130.175) (width 0.4318) (layer Dessous) (net 63))
+ (segment (start 152.4 66.04) (end 154.305 66.04) (width 0.4318) (layer Dessous) (net 63))
+ (segment (start 144.145 67.31) (end 144.78 66.675) (width 0.4318) (layer Dessous) (net 63))
+ (segment (start 144.78 66.675) (end 151.765 66.675) (width 0.4318) (layer Dessous) (net 63))
+ (segment (start 144.145 73.025) (end 142.875 74.295) (width 0.4318) (layer Dessous) (net 63) (status 400))
+ (segment (start 154.305 102.235) (end 152.4 104.14) (width 0.4318) (layer Dessus) (net 63))
+ (segment (start 149.987 133.35) (end 149.987 130.175) (width 0.4318) (layer Dessous) (net 63) (status 800))
+ (segment (start 149.86 128.27) (end 149.86 130.175) (width 0.4318) (layer Dessous) (net 63))
+ (via (at 149.86 128.27) (size 1.651) (layers Dessus Dessous) (net 63))
+ (segment (start 142.875 119.38) (end 147.32 123.825) (width 0.4318) (layer Dessous) (net 64))
+ (segment (start 142.875 119.38) (end 142.875 104.775) (width 0.4318) (layer Dessous) (net 64))
+ (segment (start 148.59 126.365) (end 158.75 126.365) (width 0.4318) (layer Dessus) (net 64))
+ (segment (start 158.369 128.905) (end 158.75 128.524) (width 0.4318) (layer Dessous) (net 64))
+ (segment (start 141.605 103.505) (end 141.605 100.965) (width 0.4318) (layer Dessous) (net 64))
+ (segment (start 158.369 133.35) (end 158.369 128.905) (width 0.4318) (layer Dessous) (net 64) (status 800))
+ (segment (start 158.75 128.524) (end 158.75 128.27) (width 0.4318) (layer Dessous) (net 64))
+ (segment (start 141.605 103.505) (end 142.875 104.775) (width 0.4318) (layer Dessous) (net 64))
+ (via (at 158.75 126.365) (size 1.651) (layers Dessus Dessous) (net 64))
+ (segment (start 158.75 128.27) (end 158.75 126.365) (width 0.4318) (layer Dessous) (net 64))
+ (segment (start 142.875 99.695) (end 141.605 100.965) (width 0.4318) (layer Dessous) (net 64) (status 800))
+ (segment (start 147.32 125.095) (end 148.59 126.365) (width 0.4318) (layer Dessus) (net 64))
+ (segment (start 147.32 123.825) (end 147.32 125.095) (width 0.4318) (layer Dessous) (net 64))
+ (via (at 147.32 125.095) (size 1.651) (layers Dessus Dessous) (net 64))
+ (segment (start 120.65 117.475) (end 116.84 117.475) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 116.205 116.84) (end 116.205 107.95) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 116.84 107.315) (end 121.285 107.315) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 130.81 114.935) (end 122.555 114.935) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 131.445 117.475) (end 131.445 115.57) (width 0.4318) (layer Dessous) (net 65) (status 800))
+ (segment (start 116.205 107.95) (end 116.84 107.315) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 122.555 106.045) (end 122.555 102.235) (width 0.4318) (layer Dessous) (net 65) (status 400))
+ (segment (start 121.285 107.315) (end 122.555 106.045) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 131.445 115.57) (end 130.81 114.935) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 121.285 116.205) (end 121.285 116.84) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 121.285 116.84) (end 120.65 117.475) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 116.84 117.475) (end 116.205 116.84) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 122.555 114.935) (end 121.285 116.205) (width 0.4318) (layer Dessous) (net 65))
+ (segment (start 154.94 62.865) (end 156.21 62.865) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 150.495 79.375) (end 153.67 79.375) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 156.21 78.74) (end 156.21 62.865) (width 1.016) (layer Dessus) (net 66))
+ (via (at 156.21 78.74) (size 1.651) (layers Dessus Dessous) (net 66))
+ (segment (start 153.67 79.375) (end 154.305 78.74) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 154.305 78.74) (end 156.21 78.74) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 135.89 68.58) (end 142.24 68.58) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 144.78 66.04) (end 151.765 66.04) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 142.24 68.58) (end 144.78 66.04) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 151.765 66.04) (end 154.94 62.865) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 127 94.615) (end 126.365 94.615) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 126.365 94.615) (end 122.555 94.615) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 147.32 59.055) (end 163.83 59.055) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 163.83 59.055) (end 164.465 58.42) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 164.465 58.42) (end 164.465 56.515) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 136.525 65.405) (end 136.525 61.595) (width 0.635) (layer Dessous) (net 66) (status 800))
+ (segment (start 126.365 67.945) (end 132.715 67.945) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 141.605 90.424) (end 141.605 89.535) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 133.35 68.58) (end 135.89 68.58) (width 1.016) (layer Dessus) (net 66))
+ (via (at 135.89 68.58) (size 1.651) (layers Dessus Dessous) (net 66))
+ (segment (start 135.89 68.58) (end 136.525 67.945) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 132.715 67.945) (end 133.35 68.58) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 136.525 109.855) (end 139.065 107.315) (width 0.635) (layer Dessous) (net 66) (status 800))
+ (segment (start 164.465 56.515) (end 171.45 56.515) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 136.525 111.76) (end 136.525 109.855) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 135.89 112.395) (end 136.525 111.76) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 132.715 112.395) (end 135.255 112.395) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 135.255 112.395) (end 135.89 112.395) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 135.255 112.395) (end 135.255 114.935) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 126.365 113.411) (end 126.365 112.395) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 132.08 112.395) (end 132.715 112.395) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 131.445 111.76) (end 132.08 112.395) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 131.445 109.855) (end 131.445 111.76) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 126.365 112.395) (end 126.365 109.855) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 139.065 100.965) (end 139.065 107.315) (width 0.4318) (layer Dessous) (net 66))
+ (segment (start 140.335 99.695) (end 139.065 100.965) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 131.826 126.365) (end 131.826 121.285) (width 1.016) (layer Dessous) (net 66) (status C00))
+ (segment (start 133.35 121.285) (end 133.985 120.65) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 133.985 120.65) (end 133.985 117.475) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 131.826 121.285) (end 133.35 121.285) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 120.015 114.046) (end 125.73 114.046) (width 0.635) (layer Dessous) (net 66))
+ (segment (start 125.73 114.046) (end 126.365 113.411) (width 0.635) (layer Dessous) (net 66))
+ (segment (start 127.635 87.376) (end 127.635 93.98) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 127.635 93.98) (end 127 94.615) (width 1.016) (layer Dessous) (net 66))
+ (via (at 126.365 67.945) (size 1.651) (layers Dessus Dessous) (net 66))
+ (segment (start 126.365 67.945) (end 126.365 65.405) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 136.525 61.595) (end 137.795 60.325) (width 0.635) (layer Dessous) (net 66))
+ (segment (start 137.795 60.325) (end 137.795 56.515) (width 0.4318) (layer Dessous) (net 66))
+ (segment (start 137.795 56.515) (end 138.43 55.88) (width 0.635) (layer Dessous) (net 66))
+ (segment (start 138.43 55.88) (end 144.145 55.88) (width 0.635) (layer Dessous) (net 66))
+ (segment (start 144.145 55.88) (end 147.32 59.055) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 171.45 56.515) (end 178.435 56.515) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 156.845 133.35) (end 156.972 133.35) (width 1.016) (layer Dessus) (net 66) (status 400))
+ (segment (start 167.005 43.815) (end 171.45 48.26) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 141.605 78.105) (end 149.225 78.105) (width 0.4318) (layer Dessous) (net 66))
+ (segment (start 189.865 71.755) (end 189.865 64.77) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 189.865 64.77) (end 189.23 64.135) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 189.23 64.135) (end 187.325 64.135) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 189.865 71.755) (end 191.135 73.025) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 191.135 73.025) (end 191.135 95.885) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 189.865 96.52) (end 188.595 96.52) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 126.365 100.965) (end 126.365 94.615) (width 0.4318) (layer Dessous) (net 66))
+ (segment (start 141.605 89.535) (end 141.605 78.105) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 140.716 78.105) (end 141.605 78.105) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 139.446 79.375) (end 140.716 78.105) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 147.955 89.535) (end 141.605 89.535) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 127.635 102.235) (end 126.365 100.965) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 136.525 67.945) (end 136.525 65.405) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 104.775 92.3798) (end 108.2548 88.9) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 191.135 95.885) (end 190.5 96.52) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 149.225 78.105) (end 150.495 79.375) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 171.45 48.26) (end 171.45 56.515) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 190.5 96.52) (end 189.865 96.52) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 146.685 133.35) (end 140.97 133.35) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 148.59 133.35) (end 146.685 133.35) (width 1.016) (layer Dessus) (net 66) (status 800))
+ (via (at 140.97 133.35) (size 1.651) (layers Dessus Dessous) (net 66))
+ (segment (start 140.97 133.35) (end 140.97 127) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 140.97 127) (end 139.065 125.095) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 108.2548 88.9) (end 111.125 88.9) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 99.695 92.3798) (end 104.775 92.3798) (width 0.635) (layer Dessous) (net 66) (status 800))
+ (segment (start 111.125 88.9) (end 111.125 86.36) (width 1.016) (layer Dessous) (net 66) (status C00))
+ (segment (start 99.695 92.075) (end 99.695 92.3798) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 137.795 114.935) (end 139.065 116.205) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 139.065 116.205) (end 139.065 117.475) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 133.985 116.205) (end 135.255 114.935) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 133.985 117.475) (end 133.985 116.205) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 118.745 115.316) (end 120.015 114.046) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 127.635 102.235) (end 127.635 104.775) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 126.365 106.045) (end 126.365 109.855) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 127.635 104.775) (end 126.365 106.045) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 126.365 112.395) (end 132.715 112.395) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 139.446 79.375) (end 139.446 76.835) (width 1.016) (layer Dessous) (net 66) (status 800))
+ (segment (start 139.065 73.025) (end 140.335 71.755) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 139.065 76.835) (end 139.065 73.025) (width 0.4318) (layer Dessous) (net 66))
+ (segment (start 139.446 76.835) (end 139.065 76.835) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 154.178 133.35) (end 156.845 133.35) (width 1.016) (layer Dessus) (net 66) (status 800))
+ (segment (start 154.305 133.35) (end 154.178 133.35) (width 1.016) (layer Dessus) (net 66) (status 400))
+ (segment (start 151.384 133.35) (end 154.305 133.35) (width 1.016) (layer Dessus) (net 66) (status 800))
+ (segment (start 151.13 133.35) (end 151.384 133.35) (width 1.016) (layer Dessus) (net 66) (status 400))
+ (segment (start 148.59 133.35) (end 151.13 133.35) (width 1.016) (layer Dessus) (net 66) (status 800))
+ (segment (start 147.32 117.475) (end 149.86 120.015) (width 1.016) (layer Dessus) (net 66))
+ (segment (start 149.86 120.015) (end 155.575 120.015) (width 1.016) (layer Dessus) (net 66) (status 400))
+ (segment (start 139.065 117.475) (end 147.32 117.475) (width 1.016) (layer Dessus) (net 66) (status 800))
+ (segment (start 139.065 125.095) (end 139.065 117.475) (width 1.016) (layer Dessous) (net 66) (status 400))
+ (segment (start 135.255 114.935) (end 137.795 114.935) (width 1.016) (layer Dessous) (net 66))
+ (segment (start 121.285 65.405) (end 123.825 65.405) (width 0.4318) (layer Dessous) (net 67) (status 400))
+ (segment (start 121.285 64.516) (end 121.285 65.405) (width 0.4318) (layer Dessous) (net 67) (status 800))
+ (segment (start 129.54 50.165) (end 127 50.165) (width 0.4318) (layer Dessous) (net 68) (status 800))
+ (segment (start 127 50.165) (end 126.365 50.8) (width 0.4318) (layer Dessous) (net 68))
+ (segment (start 126.365 50.8) (end 126.365 57.785) (width 0.4318) (layer Dessous) (net 68) (status 400))
+ (segment (start 146.05 50.165) (end 144.78 50.165) (width 0.4318) (layer Dessous) (net 69) (status 400))
+ (segment (start 146.685 49.53) (end 146.05 50.165) (width 0.4318) (layer Dessous) (net 69))
+ (segment (start 144.78 44.45) (end 146.05 44.45) (width 0.4318) (layer Dessous) (net 69) (status 800))
+ (segment (start 146.685 45.085) (end 146.685 49.53) (width 0.4318) (layer Dessous) (net 69))
+ (segment (start 146.05 44.45) (end 146.685 45.085) (width 0.4318) (layer Dessous) (net 69))
+ (segment (start 128.905 54.61) (end 129.54 53.975) (width 0.4318) (layer Dessous) (net 70) (status 400))
+ (segment (start 128.905 57.785) (end 128.905 54.61) (width 0.4318) (layer Dessous) (net 70) (status 800))
+ (segment (start 142.875 53.34) (end 143.51 53.975) (width 0.4318) (layer Dessous) (net 71))
+ (segment (start 144.78 46.99) (end 143.51 46.99) (width 0.4318) (layer Dessous) (net 71) (status 800))
+ (segment (start 143.51 46.99) (end 142.875 47.625) (width 0.4318) (layer Dessous) (net 71))
+ (segment (start 143.51 53.975) (end 144.78 53.975) (width 0.4318) (layer Dessous) (net 71) (status 400))
+ (segment (start 142.875 47.625) (end 142.875 53.34) (width 0.4318) (layer Dessous) (net 71))
+ (segment (start 126.365 117.475) (end 128.905 117.475) (width 0.4318) (layer Dessous) (net 72) (status C00))
+ (segment (start 125.095 126.365) (end 121.285 126.365) (width 0.4318) (layer Dessous) (net 72) (status C00))
+ (segment (start 128.905 126.365) (end 128.524 126.365) (width 0.4318) (layer Dessous) (net 72) (status 400))
+ (segment (start 128.905 117.475) (end 130.175 118.745) (width 0.4318) (layer Dessous) (net 72) (status 800))
+ (segment (start 128.905 125.095) (end 128.905 126.365) (width 0.4318) (layer Dessous) (net 72))
+ (segment (start 130.175 123.825) (end 128.905 125.095) (width 0.4318) (layer Dessous) (net 72))
+ (segment (start 128.524 126.365) (end 125.095 126.365) (width 0.4318) (layer Dessous) (net 72) (status C00))
+ (segment (start 130.175 118.745) (end 130.175 123.825) (width 0.4318) (layer Dessous) (net 72))
+ (segment (start 119.38 121.285) (end 121.285 121.285) (width 0.4318) (layer Dessous) (net 73) (status 400))
+ (segment (start 123.825 117.475) (end 123.825 121.285) (width 0.4318) (layer Dessous) (net 73) (status 800))
+ (segment (start 118.745 127.635) (end 118.745 121.92) (width 0.4318) (layer Dessous) (net 73))
+ (segment (start 120.015 128.905) (end 118.745 127.635) (width 0.4318) (layer Dessous) (net 73))
+ (segment (start 132.715 128.905) (end 120.015 128.905) (width 0.4318) (layer Dessous) (net 73))
+ (segment (start 123.825 121.285) (end 128.524 121.285) (width 0.4318) (layer Dessous) (net 73) (status 400))
+ (segment (start 118.745 121.92) (end 119.38 121.285) (width 0.4318) (layer Dessous) (net 73))
+ (segment (start 135.255 126.365) (end 132.715 128.905) (width 0.4318) (layer Dessous) (net 73) (status 800))
+ (segment (start 121.285 121.285) (end 123.825 121.285) (width 0.4318) (layer Dessous) (net 73) (status 800))
+ (segment (start 168.275 66.675) (end 168.275 73.025) (width 0.4318) (layer Dessous) (net 74) (status C00))
+ (segment (start 187.325 52.07) (end 187.325 59.055) (width 0.4318) (layer Dessous) (net 75) (status C00))
+ (segment (start 127.635 41.91) (end 134.62 41.91) (width 0.4318) (layer Dessous) (net 76) (status 400))
+ (segment (start 187.325 41.91) (end 172.72 41.91) (width 0.4318) (layer Dessous) (net 76) (status 800))
+ (segment (start 127 39.37) (end 127 41.275) (width 0.4318) (layer Dessous) (net 76) (status 800))
+ (segment (start 140.97 40.005) (end 170.815 40.005) (width 0.4318) (layer Dessous) (net 76))
+ (segment (start 140.97 40.005) (end 139.065 41.91) (width 0.4318) (layer Dessous) (net 76))
+ (segment (start 139.065 41.91) (end 134.62 41.91) (width 0.4318) (layer Dessous) (net 76) (status 400))
+ (segment (start 127 41.275) (end 127.635 41.91) (width 0.4318) (layer Dessous) (net 76))
+ (segment (start 170.815 40.005) (end 172.72 41.91) (width 0.4318) (layer Dessous) (net 76))
+ (segment (start 127.635 45.085) (end 131.445 45.085) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 119.38 48.895) (end 120.015 49.53) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 125.095 49.53) (end 125.73 48.895) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 131.445 45.085) (end 133.35 46.99) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 127 45.72) (end 127.635 45.085) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 117.475 39.37) (end 117.475 45.72) (width 0.4318) (layer Dessous) (net 77) (status 800))
+ (segment (start 127 48.26) (end 127 46.99) (width 0.4318) (layer Dessous) (net 77) (status 400))
+ (segment (start 133.35 46.99) (end 134.62 46.99) (width 0.4318) (layer Dessous) (net 77) (status 400))
+ (segment (start 127 46.99) (end 127 45.72) (width 0.4318) (layer Dessous) (net 77) (status 800))
+ (segment (start 119.38 47.625) (end 119.38 48.895) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 117.475 45.72) (end 119.38 47.625) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 126.365 48.895) (end 127 48.26) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 125.73 48.895) (end 126.365 48.895) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 120.015 49.53) (end 125.095 49.53) (width 0.4318) (layer Dessous) (net 77))
+ (segment (start 141.605 41.91) (end 144.78 41.91) (width 0.4318) (layer Dessous) (net 78) (status 400))
+ (segment (start 139.065 44.45) (end 141.605 41.91) (width 0.4318) (layer Dessous) (net 78))
+ (segment (start 124.46 46.99) (end 124.46 44.45) (width 0.4318) (layer Dessous) (net 78) (status 800))
+ (segment (start 134.62 44.45) (end 139.065 44.45) (width 0.4318) (layer Dessous) (net 78) (status 800))
+ (segment (start 124.46 44.45) (end 125.095 43.815) (width 0.4318) (layer Dessous) (net 78))
+ (segment (start 125.095 43.815) (end 132.08 43.815) (width 0.4318) (layer Dessous) (net 78))
+ (segment (start 132.08 43.815) (end 132.715 44.45) (width 0.4318) (layer Dessous) (net 78))
+ (segment (start 132.715 44.45) (end 134.62 44.45) (width 0.4318) (layer Dessous) (net 78) (status 400))
+ (segment (start 170.815 64.77) (end 170.815 66.675) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 170.815 66.675) (end 170.815 70.485) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 170.815 70.485) (end 173.355 73.025) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 191.135 106.68) (end 182.245 115.57) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 135.255 102.235) (end 133.985 100.965) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 134.62 93.345) (end 137.795 93.345) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 133.985 93.98) (end 134.62 93.345) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 191.135 82.55) (end 189.865 81.28) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 147.955 64.135) (end 150.495 64.135) (width 1.016) (layer Dessous) (net 79) (status C00))
+ (segment (start 150.495 64.135) (end 170.18 64.135) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 133.985 78.74) (end 134.62 79.375) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 134.62 79.375) (end 136.144 79.375) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 118.745 107.95) (end 119.38 107.315) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 179.07 126.365) (end 179.07 116.84) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 125.095 74.295) (end 125.095 76.835) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 135.255 102.235) (end 132.715 104.775) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (via (at 132.715 106.045) (size 1.651) (layers Dessus Dessous) (net 79))
+ (segment (start 132.715 104.775) (end 132.715 106.045) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 131.445 107.315) (end 132.715 106.045) (width 1.016) (layer Dessus) (net 79))
+ (via (at 123.825 107.315) (size 1.651) (layers Dessus Dessous) (net 79))
+ (segment (start 123.825 109.855) (end 123.825 107.315) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 122.555 76.835) (end 125.095 76.835) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 188.595 73.66) (end 188.595 81.28) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 119.38 123.825) (end 118.745 123.19) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 130.81 60.325) (end 131.445 59.69) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 124.46 60.325) (end 130.81 60.325) (width 0.635) (layer Dessous) (net 79))
+ (segment (start 125.095 76.835) (end 125.095 79.375) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 127.635 81.915) (end 127.635 84.455) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 125.095 79.375) (end 127.635 81.915) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 133.985 84.455) (end 133.985 88.9) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 137.795 90.17) (end 137.795 93.345) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 137.16 89.535) (end 137.795 90.17) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 134.62 89.535) (end 137.16 89.535) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 133.985 88.9) (end 134.62 89.535) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 135.255 71.755) (end 133.985 73.025) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 135.509 84.455) (end 133.985 84.455) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 133.985 84.455) (end 127.635 84.455) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 136.144 83.82) (end 135.509 84.455) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 143.51 60.96) (end 146.685 64.135) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 123.825 59.69) (end 124.46 60.325) (width 0.635) (layer Dessous) (net 79))
+ (segment (start 178.435 127) (end 179.07 126.365) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 136.144 79.375) (end 136.144 83.82) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 191.135 104.775) (end 191.135 106.68) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 191.135 104.775) (end 191.135 82.55) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 146.685 64.135) (end 147.955 64.135) (width 1.016) (layer Dessus) (net 79) (status 400))
+ (segment (start 175.895 73.025) (end 175.514 73.025) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 123.825 107.315) (end 131.445 107.315) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 123.825 59.69) (end 125.095 60.96) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 127.635 84.455) (end 127.635 84.074) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 178.181 73.025) (end 178.435 73.025) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 123.825 57.785) (end 123.825 59.69) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 133.985 73.025) (end 133.985 78.74) (width 0.4318) (layer Dessous) (net 79))
+ (segment (start 137.795 93.345) (end 141.605 93.345) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 141.605 93.345) (end 141.605 93.726) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 123.19 112.014) (end 123.825 111.379) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 123.825 111.379) (end 123.825 109.855) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 118.745 112.014) (end 123.19 112.014) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 142.494 94.615) (end 147.955 94.615) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 118.745 123.19) (end 118.745 107.95) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 122.555 123.825) (end 119.38 123.825) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 170.18 64.135) (end 170.815 64.77) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 123.825 122.555) (end 122.555 123.825) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 119.38 107.315) (end 123.825 107.315) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 142.24 122.555) (end 123.825 122.555) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 155.575 122.555) (end 142.24 122.555) (width 1.016) (layer Dessus) (net 79) (status 800))
+ (segment (start 179.07 116.84) (end 180.34 115.57) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 189.865 81.28) (end 188.595 81.28) (width 1.016) (layer Dessus) (net 79) (status 400))
+ (segment (start 178.181 69.85) (end 178.181 73.025) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 173.355 73.025) (end 175.895 73.025) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 166.37 127) (end 178.435 127) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 161.925 122.555) (end 166.37 127) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 155.575 122.555) (end 161.925 122.555) (width 1.016) (layer Dessus) (net 79) (status 800))
+ (segment (start 182.245 115.57) (end 180.34 115.57) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 187.96 73.025) (end 188.595 73.66) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 183.515 73.025) (end 187.96 73.025) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 133.985 100.965) (end 133.985 93.98) (width 0.4318) (layer Dessous) (net 79))
+ (segment (start 131.445 59.69) (end 131.445 57.785) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 125.095 60.96) (end 143.51 60.96) (width 1.016) (layer Dessus) (net 79))
+ (segment (start 123.825 57.785) (end 123.825 59.69) (width 1.016) (layer Dessus) (net 79) (status 800))
+ (segment (start 178.435 73.025) (end 183.515 73.025) (width 1.016) (layer Dessous) (net 79) (status 400))
+ (segment (start 175.895 73.025) (end 178.435 73.025) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 142.24 122.809) (end 142.24 122.555) (width 1.016) (layer Dessus) (net 79))
+ (via (at 142.24 122.809) (size 1.651) (layers Dessus Dessous) (net 79))
+ (segment (start 147.066 127.635) (end 142.24 122.809) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 147.193 133.35) (end 147.193 129.54) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 147.193 129.54) (end 147.066 129.54) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 147.066 129.54) (end 147.066 127.635) (width 1.016) (layer Dessous) (net 79))
+ (segment (start 141.605 93.726) (end 142.494 94.615) (width 1.016) (layer Dessous) (net 79) (status 800))
+ (segment (start 192.405 117.983) (end 192.405 120.777) (width 1.016) (layer Dessous) (net 97))
+ (segment (start 192.405 120.777) (end 190.627 122.555) (width 1.016) (layer Dessous) (net 97) (tstamp 5634899F))
+ (segment (start 192.405 117.983) (end 192.405 112.395) (width 1.016) (layer Dessous) (net 97) (tstamp 5634899D) (status 400))
+ (segment (start 190.627 122.555) (end 187.325 122.555) (width 1.016) (layer Dessous) (net 97) (tstamp 563489A0))
+ (segment (start 194.31 107.315) (end 194.945 107.95) (width 1.016) (layer Dessous) (net 98) (status 800))
+ (segment (start 194.945 107.95) (end 194.945 124.079) (width 1.016) (layer Dessous) (net 98))
+ (segment (start 194.945 124.079) (end 194.945 124.968) (width 1.016) (layer Dessous) (net 98))
+ (segment (start 194.945 124.968) (end 192.278 127.635) (width 1.016) (layer Dessous) (net 98) (tstamp 563489A6))
+ (segment (start 192.278 127.635) (end 187.325 127.635) (width 1.016) (layer Dessous) (net 98) (tstamp 563489A7))
+ (segment (start 111.125 60.325) (end 111.125 57.785) (width 0.4318) (layer Dessous) (net 99) (status 800))
+ (segment (start 111.125 57.785) (end 114.935 53.975) (width 0.4318) (layer Dessous) (net 99))
+ (segment (start 114.935 53.975) (end 114.935 52.705) (width 0.4318) (layer Dessous) (net 99) (status 400))
+ (segment (start 111.125 50.8) (end 111.76 50.165) (width 0.4318) (layer Dessous) (net 100))
+ (segment (start 111.125 52.705) (end 111.125 50.8) (width 0.4318) (layer Dessous) (net 100) (status 800))
+ (segment (start 111.76 50.165) (end 114.935 50.165) (width 0.4318) (layer Dessous) (net 100))
+ (segment (start 117.475 52.705) (end 114.935 50.165) (width 0.4318) (layer Dessous) (net 100) (status 800))
+
+ (zone (net 66) (net_name GND) (layer Dessous) (tstamp 47AB4739) (hatch edge 0.508)
+ (connect_pads (clearance 0.5))
+ (min_thickness 0.2)
+ (fill yes (arc_segments 32) (thermal_gap 0.5) (thermal_bridge_width 0.5))
+ (polygon
+ (pts
+ (xy 195.58 134.62) (xy 195.58 36.83) (xy 95.25 36.83) (xy 95.25 134.62)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 195.4626 93.190076) (xy 195.418 93.169971) (xy 195.418 49.53) (xy 195.408011 49.428126) (xy 195.399092 49.326181)
+ (xy 195.397467 49.320586) (xy 195.396898 49.314788) (xy 195.367316 49.216806) (xy 195.338762 49.118524) (xy 195.336081 49.113352)
+ (xy 195.334397 49.107774) (xy 195.28635 49.017411) (xy 195.239247 48.926539) (xy 195.235612 48.921985) (xy 195.232877 48.916842)
+ (xy 195.168203 48.837544) (xy 195.104337 48.757541) (xy 195.096338 48.74943) (xy 195.096204 48.749265) (xy 195.096052 48.749139)
+ (xy 195.093474 48.746525) (xy 192.553546 46.206598) (xy 192.553475 46.206526) (xy 191.918474 45.571526) (xy 191.839413 45.506584)
+ (xy 191.760983 45.440774) (xy 191.755877 45.437967) (xy 191.751375 45.434269) (xy 191.66119 45.385912) (xy 191.571488 45.336598)
+ (xy 191.565933 45.334836) (xy 191.560799 45.332083) (xy 191.46293 45.302161) (xy 191.365366 45.271212) (xy 191.359576 45.270563)
+ (xy 191.354004 45.268859) (xy 191.252189 45.258517) (xy 191.15047 45.247108) (xy 191.139078 45.247028) (xy 191.138867 45.247007)
+ (xy 191.13867 45.247026) (xy 191.135 45.247) (xy 175.083948 45.247) (xy 172.542535 42.705587) (xy 172.550365 42.708071)
+ (xy 172.554632 42.70855) (xy 172.558732 42.709803) (xy 172.633701 42.717418) (xy 172.708608 42.72582) (xy 172.716993 42.725879)
+ (xy 172.717152 42.725895) (xy 172.7173 42.725881) (xy 172.72 42.7259) (xy 186.230407 42.7259) (xy 186.252445 42.760097)
+ (xy 186.43799 42.952234) (xy 186.65732 43.104672) (xy 186.902082 43.211606) (xy 187.162954 43.268963) (xy 187.429997 43.274556)
+ (xy 187.693041 43.228175) (xy 187.942066 43.131584) (xy 188.167588 42.988464) (xy 188.361016 42.804265) (xy 188.514982 42.586004)
+ (xy 188.623622 42.341994) (xy 188.682798 42.08153) (xy 188.687058 41.776449) (xy 188.635178 41.514434) (xy 188.533393 41.267486)
+ (xy 188.385581 41.045011) (xy 188.197372 40.855483) (xy 187.975935 40.706122) (xy 187.729703 40.602616) (xy 187.468057 40.548907)
+ (xy 187.200961 40.547043) (xy 186.93859 40.597092) (xy 186.690938 40.697151) (xy 186.467436 40.843406) (xy 186.276599 41.030287)
+ (xy 186.232905 41.0941) (xy 173.057957 41.0941) (xy 171.391928 39.428072) (xy 171.333726 39.380264) (xy 171.275957 39.33179)
+ (xy 171.272194 39.329721) (xy 171.268881 39.327) (xy 171.2025 39.291407) (xy 171.136417 39.255077) (xy 171.132326 39.253779)
+ (xy 171.128547 39.251753) (xy 171.056527 39.229735) (xy 170.984635 39.206929) (xy 170.980368 39.20645) (xy 170.976268 39.205197)
+ (xy 170.901299 39.197582) (xy 170.826392 39.18918) (xy 170.818007 39.189121) (xy 170.817848 39.189105) (xy 170.8177 39.189119)
+ (xy 170.815 39.1891) (xy 140.97 39.1891) (xy 140.894993 39.196455) (xy 140.819915 39.203023) (xy 140.815794 39.20422)
+ (xy 140.811524 39.204639) (xy 140.739405 39.226413) (xy 140.667001 39.247448) (xy 140.663189 39.249424) (xy 140.659085 39.250663)
+ (xy 140.592612 39.286008) (xy 140.525629 39.320728) (xy 140.522272 39.323408) (xy 140.518488 39.32542) (xy 140.460079 39.373057)
+ (xy 140.401184 39.420073) (xy 140.395214 39.425959) (xy 140.395089 39.426061) (xy 140.394993 39.426177) (xy 140.393072 39.428071)
+ (xy 138.727044 41.0941) (xy 135.713196 41.0941) (xy 135.680581 41.045011) (xy 135.492372 40.855483) (xy 135.270935 40.706122)
+ (xy 135.024703 40.602616) (xy 134.763057 40.548907) (xy 134.495961 40.547043) (xy 134.23359 40.597092) (xy 133.985938 40.697151)
+ (xy 133.762436 40.843406) (xy 133.571599 41.030287) (xy 133.527905 41.0941) (xy 129.809347 41.0941) (xy 130.059729 41.020409)
+ (xy 130.299689 40.894961) (xy 130.510713 40.725293) (xy 130.684762 40.517869) (xy 130.815208 40.280589) (xy 130.897082 40.022491)
+ (xy 130.927265 39.753405) (xy 130.9274 39.734034) (xy 130.9274 39.005966) (xy 130.900977 38.736485) (xy 130.822715 38.477269)
+ (xy 130.695595 38.238191) (xy 130.524458 38.028356) (xy 130.315824 37.855759) (xy 130.077639 37.726973) (xy 129.818976 37.646903)
+ (xy 129.549686 37.6186) (xy 129.280027 37.643141) (xy 129.020271 37.719591) (xy 128.780311 37.845039) (xy 128.569287 38.014707)
+ (xy 128.395238 38.222131) (xy 128.269076 38.451618) (xy 128.155595 38.238191) (xy 127.984458 38.028356) (xy 127.775824 37.855759)
+ (xy 127.537639 37.726973) (xy 127.278976 37.646903) (xy 127.009686 37.6186) (xy 126.740027 37.643141) (xy 126.480271 37.719591)
+ (xy 126.240311 37.845039) (xy 126.029287 38.014707) (xy 125.855238 38.222131) (xy 125.729076 38.451618) (xy 125.615595 38.238191)
+ (xy 125.444458 38.028356) (xy 125.235824 37.855759) (xy 124.997639 37.726973) (xy 124.738976 37.646903) (xy 124.469686 37.6186)
+ (xy 124.200027 37.643141) (xy 123.940271 37.719591) (xy 123.700311 37.845039) (xy 123.489287 38.014707) (xy 123.315238 38.222131)
+ (xy 123.189076 38.451618) (xy 123.075595 38.238191) (xy 122.904458 38.028356) (xy 122.695824 37.855759) (xy 122.457639 37.726973)
+ (xy 122.198976 37.646903) (xy 121.929686 37.6186) (xy 121.660027 37.643141) (xy 121.400271 37.719591) (xy 121.160311 37.845039)
+ (xy 120.949287 38.014707) (xy 120.775238 38.222131) (xy 120.644792 38.459411) (xy 120.562918 38.717509) (xy 120.532735 38.986595)
+ (xy 120.5326 39.005966) (xy 120.5326 39.734034) (xy 120.559023 40.003515) (xy 120.637285 40.262731) (xy 120.764405 40.501809)
+ (xy 120.935542 40.711644) (xy 121.144176 40.884241) (xy 121.382361 41.013027) (xy 121.641024 41.093097) (xy 121.910314 41.1214)
+ (xy 122.179973 41.096859) (xy 122.439729 41.020409) (xy 122.679689 40.894961) (xy 122.890713 40.725293) (xy 123.064762 40.517869)
+ (xy 123.190924 40.288382) (xy 123.304405 40.501809) (xy 123.475542 40.711644) (xy 123.684176 40.884241) (xy 123.922361 41.013027)
+ (xy 124.181024 41.093097) (xy 124.450314 41.1214) (xy 124.719973 41.096859) (xy 124.979729 41.020409) (xy 125.219689 40.894961)
+ (xy 125.430713 40.725293) (xy 125.604762 40.517869) (xy 125.730924 40.288382) (xy 125.844405 40.501809) (xy 126.015542 40.711644)
+ (xy 126.1841 40.851087) (xy 126.1841 41.275) (xy 126.191454 41.350003) (xy 126.198023 41.425086) (xy 126.19922 41.429208)
+ (xy 126.199639 41.433476) (xy 126.221409 41.505583) (xy 126.242448 41.577999) (xy 126.244424 41.581811) (xy 126.245663 41.585915)
+ (xy 126.281029 41.652428) (xy 126.315729 41.719371) (xy 126.318406 41.722725) (xy 126.32042 41.726512) (xy 126.368079 41.784949)
+ (xy 126.415073 41.843816) (xy 126.420955 41.849781) (xy 126.421061 41.849911) (xy 126.421181 41.85001) (xy 126.423072 41.851928)
+ (xy 127.058072 42.486929) (xy 127.116304 42.534761) (xy 127.174043 42.58321) (xy 127.177806 42.585279) (xy 127.181119 42.588)
+ (xy 127.247481 42.623583) (xy 127.313583 42.659923) (xy 127.317677 42.661222) (xy 127.321454 42.663247) (xy 127.393459 42.685261)
+ (xy 127.465365 42.708071) (xy 127.469632 42.70855) (xy 127.473732 42.709803) (xy 127.548701 42.717418) (xy 127.623608 42.72582)
+ (xy 127.631993 42.725879) (xy 127.632152 42.725895) (xy 127.6323 42.725881) (xy 127.635 42.7259) (xy 133.525407 42.7259)
+ (xy 133.547445 42.760097) (xy 133.73299 42.952234) (xy 133.95232 43.104672) (xy 134.126013 43.180557) (xy 133.985938 43.237151)
+ (xy 133.762436 43.383406) (xy 133.571599 43.570287) (xy 133.527905 43.6341) (xy 133.052957 43.6341) (xy 132.656928 43.238072)
+ (xy 132.598726 43.190264) (xy 132.540957 43.14179) (xy 132.537194 43.139721) (xy 132.533881 43.137) (xy 132.4675 43.101407)
+ (xy 132.401417 43.065077) (xy 132.397326 43.063779) (xy 132.393547 43.061753) (xy 132.321527 43.039735) (xy 132.249635 43.016929)
+ (xy 132.245368 43.01645) (xy 132.241268 43.015197) (xy 132.166299 43.007582) (xy 132.091392 42.99918) (xy 132.083007 42.999121)
+ (xy 132.082848 42.999105) (xy 132.0827 42.999119) (xy 132.08 42.9991) (xy 125.095 42.9991) (xy 125.019993 43.006455)
+ (xy 124.944915 43.013023) (xy 124.940794 43.01422) (xy 124.936524 43.014639) (xy 124.864405 43.036413) (xy 124.792001 43.057448)
+ (xy 124.788189 43.059424) (xy 124.784085 43.060663) (xy 124.717612 43.096008) (xy 124.650629 43.130728) (xy 124.647272 43.133408)
+ (xy 124.643488 43.13542) (xy 124.585079 43.183057) (xy 124.526184 43.230073) (xy 124.520214 43.235959) (xy 124.520089 43.236061)
+ (xy 124.519993 43.236177) (xy 124.518072 43.238071) (xy 123.883072 43.873072) (xy 123.835264 43.931274) (xy 123.78679 43.989043)
+ (xy 123.784721 43.992806) (xy 123.782 43.996119) (xy 123.746407 44.0625) (xy 123.710077 44.128583) (xy 123.708779 44.132674)
+ (xy 123.706753 44.136453) (xy 123.684735 44.208473) (xy 123.661929 44.280365) (xy 123.66145 44.284632) (xy 123.660197 44.288732)
+ (xy 123.652582 44.363701) (xy 123.64418 44.438608) (xy 123.644121 44.446993) (xy 123.644105 44.447152) (xy 123.644119 44.4473)
+ (xy 123.6441 44.45) (xy 123.6441 45.510234) (xy 123.489287 45.634707) (xy 123.315238 45.842131) (xy 123.310303 45.851108)
+ (xy 123.310303 45.847) (xy 123.302684 45.751452) (xy 123.252497 45.589393) (xy 123.159148 45.447731) (xy 123.03003 45.337685)
+ (xy 122.875365 45.267966) (xy 122.7074 45.244097) (xy 121.1326 45.244097) (xy 121.037052 45.251716) (xy 120.874993 45.301903)
+ (xy 120.733331 45.395252) (xy 120.623285 45.52437) (xy 120.553566 45.679035) (xy 120.529697 45.847) (xy 120.529697 48.133)
+ (xy 120.537316 48.228548) (xy 120.587503 48.390607) (xy 120.680852 48.532269) (xy 120.80997 48.642315) (xy 120.964635 48.712034)
+ (xy 120.979173 48.7141) (xy 120.352957 48.7141) (xy 120.1959 48.557044) (xy 120.1959 47.625) (xy 120.188545 47.549993)
+ (xy 120.181977 47.474915) (xy 120.18078 47.470794) (xy 120.180361 47.466524) (xy 120.158587 47.394405) (xy 120.137552 47.322001)
+ (xy 120.135576 47.318189) (xy 120.134337 47.314085) (xy 120.098992 47.247612) (xy 120.064272 47.180629) (xy 120.061592 47.177272)
+ (xy 120.05958 47.173488) (xy 120.011943 47.115079) (xy 119.964927 47.056184) (xy 119.959041 47.050214) (xy 119.958939 47.050089)
+ (xy 119.958823 47.049993) (xy 119.956929 47.048072) (xy 118.2909 45.382044) (xy 118.2909 40.465401) (xy 118.317588 40.448464)
+ (xy 118.511016 40.264265) (xy 118.664982 40.046004) (xy 118.773622 39.801994) (xy 118.832798 39.54153) (xy 118.837058 39.236449)
+ (xy 118.785178 38.974434) (xy 118.683393 38.727486) (xy 118.535581 38.505011) (xy 118.347372 38.315483) (xy 118.125935 38.166122)
+ (xy 117.879703 38.062616) (xy 117.618057 38.008907) (xy 117.350961 38.007043) (xy 117.08859 38.057092) (xy 116.840938 38.157151)
+ (xy 116.617436 38.303406) (xy 116.426599 38.490287) (xy 116.275695 38.710677) (xy 116.170473 38.95618) (xy 116.114939 39.217445)
+ (xy 116.11121 39.484521) (xy 116.159427 39.747235) (xy 116.257754 39.99558) (xy 116.402445 40.220097) (xy 116.58799 40.412234)
+ (xy 116.6591 40.461657) (xy 116.6591 45.72) (xy 116.666454 45.795003) (xy 116.673023 45.870086) (xy 116.67422 45.874208)
+ (xy 116.674639 45.878476) (xy 116.696409 45.950583) (xy 116.717448 46.022999) (xy 116.719424 46.026811) (xy 116.720663 46.030915)
+ (xy 116.756029 46.097428) (xy 116.790729 46.164371) (xy 116.793406 46.167725) (xy 116.79542 46.171512) (xy 116.843079 46.229949)
+ (xy 116.890073 46.288816) (xy 116.895955 46.294781) (xy 116.896061 46.294911) (xy 116.896181 46.29501) (xy 116.898072 46.296928)
+ (xy 118.5641 47.962957) (xy 118.5641 48.820759) (xy 118.436187 48.780946) (xy 117.687132 49.53) (xy 118.436187 50.279054)
+ (xy 118.66371 50.208238) (xy 118.773187 49.963301) (xy 118.832776 49.701712) (xy 118.838156 49.507012) (xy 119.438072 50.106929)
+ (xy 119.496304 50.154761) (xy 119.554043 50.20321) (xy 119.557806 50.205279) (xy 119.561119 50.208) (xy 119.627481 50.243583)
+ (xy 119.693583 50.279923) (xy 119.697677 50.281222) (xy 119.701454 50.283247) (xy 119.773459 50.305261) (xy 119.845365 50.328071)
+ (xy 119.849632 50.32855) (xy 119.853732 50.329803) (xy 119.928701 50.337418) (xy 120.003608 50.34582) (xy 120.011993 50.345879)
+ (xy 120.012152 50.345895) (xy 120.0123 50.345881) (xy 120.015 50.3459) (xy 125.095 50.3459) (xy 125.170003 50.338546)
+ (xy 125.245086 50.331977) (xy 125.249208 50.33078) (xy 125.253476 50.330361) (xy 125.325583 50.308591) (xy 125.397999 50.287552)
+ (xy 125.401811 50.285576) (xy 125.405915 50.284337) (xy 125.472428 50.248971) (xy 125.539371 50.214271) (xy 125.542725 50.211594)
+ (xy 125.546512 50.20958) (xy 125.604949 50.161921) (xy 125.663816 50.114927) (xy 125.669781 50.109045) (xy 125.669911 50.108939)
+ (xy 125.67001 50.108819) (xy 125.671928 50.106928) (xy 126.067957 49.7109) (xy 126.300243 49.7109) (xy 125.788072 50.223072)
+ (xy 125.740264 50.281274) (xy 125.69179 50.339043) (xy 125.689721 50.342806) (xy 125.687 50.346119) (xy 125.651407 50.4125)
+ (xy 125.615077 50.478583) (xy 125.613779 50.482674) (xy 125.611753 50.486453) (xy 125.589735 50.558473) (xy 125.566929 50.630365)
+ (xy 125.56645 50.634632) (xy 125.565197 50.638732) (xy 125.557582 50.713701) (xy 125.54918 50.788608) (xy 125.549121 50.796993)
+ (xy 125.549105 50.797152) (xy 125.549119 50.7973) (xy 125.5491 50.8) (xy 125.5491 56.305234) (xy 125.394287 56.429707)
+ (xy 125.220238 56.637131) (xy 125.094076 56.866618) (xy 124.980595 56.653191) (xy 124.809458 56.443356) (xy 124.600824 56.270759)
+ (xy 124.362639 56.141973) (xy 124.103976 56.061903) (xy 123.834686 56.0336) (xy 123.565027 56.058141) (xy 123.305271 56.134591)
+ (xy 123.065311 56.260039) (xy 122.854287 56.429707) (xy 122.680238 56.637131) (xy 122.549792 56.874411) (xy 122.467918 57.132509)
+ (xy 122.437735 57.401595) (xy 122.4376 57.420966) (xy 122.4376 58.149034) (xy 122.464023 58.418515) (xy 122.542285 58.677731)
+ (xy 122.669405 58.916809) (xy 122.717 58.975166) (xy 122.717 59.69) (xy 122.738102 59.905212) (xy 122.800603 60.112226)
+ (xy 122.902123 60.303158) (xy 123.038796 60.470735) (xy 123.205414 60.608574) (xy 123.395633 60.711424) (xy 123.602206 60.775369)
+ (xy 123.614076 60.776617) (xy 123.81123 60.973771) (xy 123.876703 61.027551) (xy 123.941643 61.082042) (xy 123.945873 61.084368)
+ (xy 123.949599 61.087428) (xy 124.024271 61.127467) (xy 124.098558 61.168307) (xy 124.103156 61.169766) (xy 124.107409 61.172046)
+ (xy 124.188488 61.196834) (xy 124.269241 61.22245) (xy 124.274033 61.222988) (xy 124.27865 61.224399) (xy 124.362996 61.232967)
+ (xy 124.44719 61.242411) (xy 124.456616 61.242476) (xy 124.456798 61.242495) (xy 124.456968 61.242479) (xy 124.46 61.2425)
+ (xy 130.189219 61.2425) (xy 130.37707 61.34492) (xy 130.502056 61.384088) (xy 129.598072 62.288072) (xy 129.550264 62.346274)
+ (xy 129.50179 62.404043) (xy 129.499721 62.407806) (xy 129.497 62.411119) (xy 129.461407 62.4775) (xy 129.425077 62.543583)
+ (xy 129.423779 62.547674) (xy 129.421753 62.551453) (xy 129.399735 62.623473) (xy 129.376929 62.695365) (xy 129.37645 62.699632)
+ (xy 129.375197 62.703732) (xy 129.367582 62.778701) (xy 129.35918 62.853608) (xy 129.359121 62.861993) (xy 129.359105 62.862152)
+ (xy 129.359119 62.8623) (xy 129.3591 62.865) (xy 129.3591 63.736113) (xy 129.183976 63.681903) (xy 128.914686 63.6536)
+ (xy 128.645027 63.678141) (xy 128.385271 63.754591) (xy 128.145311 63.880039) (xy 127.934287 64.049707) (xy 127.760238 64.257131)
+ (xy 127.634481 64.485881) (xy 127.589388 64.379883) (xy 127.435245 64.153881) (xy 127.239973 63.962294) (xy 127.011077 63.812484)
+ (xy 126.728918 63.710579) (xy 126.515 63.821125) (xy 126.515 65.255) (xy 126.535 65.255) (xy 126.535 65.555)
+ (xy 126.515 65.555) (xy 126.515 66.988875) (xy 126.728918 67.099421) (xy 127.011077 66.997516) (xy 127.239973 66.847706)
+ (xy 127.435245 66.656119) (xy 127.589388 66.430117) (xy 127.635297 66.322202) (xy 127.749405 66.536809) (xy 127.920542 66.746644)
+ (xy 128.0891 66.886087) (xy 128.0891 67.607043) (xy 127.058072 68.638072) (xy 127.010264 68.696274) (xy 126.96179 68.754043)
+ (xy 126.959721 68.757806) (xy 126.957 68.761119) (xy 126.921407 68.8275) (xy 126.885077 68.893583) (xy 126.883779 68.897674)
+ (xy 126.881753 68.901453) (xy 126.859735 68.973473) (xy 126.836929 69.045365) (xy 126.83645 69.049632) (xy 126.835197 69.053732)
+ (xy 126.827582 69.128701) (xy 126.81918 69.203608) (xy 126.819121 69.211993) (xy 126.819105 69.212152) (xy 126.819119 69.2123)
+ (xy 126.8191 69.215) (xy 126.8191 69.785243) (xy 124.401928 67.368072) (xy 124.343726 67.320264) (xy 124.285957 67.27179)
+ (xy 124.282194 67.269721) (xy 124.278881 67.267) (xy 124.2125 67.231407) (xy 124.146417 67.195077) (xy 124.142326 67.193779)
+ (xy 124.138547 67.191753) (xy 124.066527 67.169735) (xy 124.007163 67.150903) (xy 124.6124 67.150903) (xy 124.707948 67.143284)
+ (xy 124.870007 67.093097) (xy 125.011669 66.999748) (xy 125.121715 66.87063) (xy 125.191434 66.715965) (xy 125.215303 66.548)
+ (xy 125.215303 66.539628) (xy 125.294755 66.656119) (xy 125.490027 66.847706) (xy 125.718923 66.997516) (xy 126.001082 67.099421)
+ (xy 126.215 66.988875) (xy 126.215 65.555) (xy 126.195 65.555) (xy 126.195 65.255) (xy 126.215 65.255)
+ (xy 126.215 63.821125) (xy 126.001082 63.710579) (xy 125.718923 63.812484) (xy 125.490027 63.962294) (xy 125.294755 64.153881)
+ (xy 125.215303 64.270372) (xy 125.215303 64.262) (xy 125.207684 64.166452) (xy 125.157497 64.004393) (xy 125.064148 63.862731)
+ (xy 124.93503 63.752685) (xy 124.780365 63.682966) (xy 124.6124 63.659097) (xy 123.0376 63.659097) (xy 122.942052 63.666716)
+ (xy 122.779993 63.716903) (xy 122.681281 63.78195) (xy 122.680284 63.769452) (xy 122.630097 63.607393) (xy 122.536748 63.465731)
+ (xy 122.40763 63.355685) (xy 122.252965 63.285966) (xy 122.085 63.262097) (xy 120.485 63.262097) (xy 120.389452 63.269716)
+ (xy 120.227393 63.319903) (xy 120.085731 63.413252) (xy 119.975685 63.54237) (xy 119.905966 63.697035) (xy 119.882097 63.865)
+ (xy 119.882097 64.865) (xy 119.889716 64.960548) (xy 119.939903 65.122607) (xy 120.033252 65.264269) (xy 120.16237 65.374315)
+ (xy 120.317035 65.444034) (xy 120.47513 65.4665) (xy 120.476593 65.48142) (xy 120.483552 65.557884) (xy 120.48436 65.560629)
+ (xy 120.484639 65.563476) (xy 120.506832 65.636981) (xy 120.528511 65.710642) (xy 120.529836 65.713177) (xy 120.530663 65.715915)
+ (xy 120.566686 65.783665) (xy 120.602284 65.851757) (xy 120.604078 65.853989) (xy 120.60542 65.856512) (xy 120.653949 65.916015)
+ (xy 120.702062 65.975855) (xy 120.704251 65.977692) (xy 120.706061 65.979911) (xy 120.765235 66.028863) (xy 120.824043 66.07821)
+ (xy 120.826551 66.079589) (xy 120.828755 66.081412) (xy 120.896261 66.117912) (xy 120.963583 66.154923) (xy 120.966312 66.155789)
+ (xy 120.968826 66.157148) (xy 121.042081 66.179824) (xy 121.115365 66.203071) (xy 121.118212 66.20339) (xy 121.120941 66.204235)
+ (xy 121.197267 66.212257) (xy 121.273608 66.22082) (xy 121.2791 66.220859) (xy 121.279304 66.22088) (xy 121.279508 66.220861)
+ (xy 121.285 66.2209) (xy 122.434697 66.2209) (xy 122.434697 66.548) (xy 122.440222 66.61729) (xy 122.343571 66.576662)
+ (xy 122.069726 66.52045) (xy 121.790178 66.518498) (xy 121.515575 66.570882) (xy 121.256376 66.675605) (xy 121.022455 66.828679)
+ (xy 120.968227 66.881783) (xy 120.928044 66.841319) (xy 120.696283 66.684994) (xy 120.438571 66.576662) (xy 120.164726 66.52045)
+ (xy 119.885178 66.518498) (xy 119.610575 66.570882) (xy 119.351376 66.675605) (xy 119.117455 66.828679) (xy 118.91772 67.024273)
+ (xy 118.759781 67.254937) (xy 118.649653 67.511886) (xy 118.59153 67.785332) (xy 118.587627 68.06486) (xy 118.638092 68.339822)
+ (xy 118.741003 68.599746) (xy 118.89244 68.83473) (xy 119.086635 69.035825) (xy 119.1991 69.11399) (xy 119.1991 69.215)
+ (xy 119.206454 69.290003) (xy 119.213023 69.365086) (xy 119.21422 69.369208) (xy 119.214639 69.373476) (xy 119.236409 69.445583)
+ (xy 119.257448 69.517999) (xy 119.259424 69.521811) (xy 119.260663 69.525915) (xy 119.296029 69.592428) (xy 119.330729 69.659371)
+ (xy 119.333406 69.662725) (xy 119.33542 69.666512) (xy 119.383079 69.724949) (xy 119.430073 69.783816) (xy 119.435955 69.789781)
+ (xy 119.436061 69.789911) (xy 119.436181 69.79001) (xy 119.438072 69.791928) (xy 120.073072 70.426929) (xy 120.131304 70.474761)
+ (xy 120.189043 70.52321) (xy 120.192806 70.525279) (xy 120.196119 70.528) (xy 120.262481 70.563583) (xy 120.328583 70.599923)
+ (xy 120.332677 70.601222) (xy 120.336454 70.603247) (xy 120.408459 70.625261) (xy 120.480365 70.648071) (xy 120.484632 70.64855)
+ (xy 120.488732 70.649803) (xy 120.563701 70.657418) (xy 120.638608 70.66582) (xy 120.646993 70.665879) (xy 120.647152 70.665895)
+ (xy 120.6473 70.665881) (xy 120.65 70.6659) (xy 121.847802 70.6659) (xy 121.737418 70.738133) (xy 121.555478 70.916302)
+ (xy 121.539868 70.9391) (xy 118.447957 70.9391) (xy 118.2909 70.782044) (xy 118.2909 63.960401) (xy 118.317588 63.943464)
+ (xy 118.511016 63.759265) (xy 118.664982 63.541004) (xy 118.773622 63.296994) (xy 118.832798 63.03653) (xy 118.837058 62.731449)
+ (xy 118.785178 62.469434) (xy 118.683393 62.222486) (xy 118.535581 62.000011) (xy 118.347372 61.810483) (xy 118.131685 61.665)
+ (xy 119.885 61.665) (xy 119.885 61.924095) (xy 119.908058 62.040014) (xy 119.953287 62.149207) (xy 120.01895 62.247478)
+ (xy 120.102522 62.331051) (xy 120.200794 62.396713) (xy 120.309987 62.441942) (xy 120.425905 62.465) (xy 120.985 62.465)
+ (xy 121.135 62.315) (xy 121.135 61.515) (xy 121.435 61.515) (xy 121.435 62.315) (xy 121.585 62.465)
+ (xy 122.144095 62.465) (xy 122.260013 62.441942) (xy 122.369206 62.396713) (xy 122.467478 62.331051) (xy 122.55105 62.247478)
+ (xy 122.616713 62.149207) (xy 122.661942 62.040014) (xy 122.685 61.924095) (xy 122.685 61.665) (xy 122.535 61.515)
+ (xy 121.435 61.515) (xy 121.135 61.515) (xy 120.035 61.515) (xy 119.885 61.665) (xy 118.131685 61.665)
+ (xy 118.125935 61.661122) (xy 117.879703 61.557616) (xy 117.618057 61.503907) (xy 117.350961 61.502043) (xy 117.08859 61.552092)
+ (xy 116.840938 61.652151) (xy 116.617436 61.798406) (xy 116.426599 61.985287) (xy 116.275695 62.205677) (xy 116.20472 62.371276)
+ (xy 116.143393 62.222486) (xy 115.995581 62.000011) (xy 115.807372 61.810483) (xy 115.585935 61.661122) (xy 115.339703 61.557616)
+ (xy 115.078057 61.503907) (xy 114.810961 61.502043) (xy 114.54859 61.552092) (xy 114.300938 61.652151) (xy 114.077436 61.798406)
+ (xy 113.886599 61.985287) (xy 113.735695 62.205677) (xy 113.630473 62.45118) (xy 113.574939 62.712445) (xy 113.57121 62.979521)
+ (xy 113.619427 63.242235) (xy 113.717754 63.49058) (xy 113.862445 63.715097) (xy 114.04799 63.907234) (xy 114.1191 63.956657)
+ (xy 114.1191 71.755) (xy 114.126454 71.830003) (xy 114.133023 71.905086) (xy 114.13422 71.909208) (xy 114.134639 71.913476)
+ (xy 114.156409 71.985583) (xy 114.177448 72.057999) (xy 114.179424 72.061811) (xy 114.180663 72.065915) (xy 114.216029 72.132428)
+ (xy 114.250729 72.199371) (xy 114.253406 72.202725) (xy 114.25542 72.206512) (xy 114.303079 72.264949) (xy 114.350073 72.323816)
+ (xy 114.355955 72.329781) (xy 114.356061 72.329911) (xy 114.356181 72.33001) (xy 114.358072 72.331928) (xy 115.378243 73.3521)
+ (xy 111.462957 73.3521) (xy 109.161928 71.051072) (xy 109.103726 71.003264) (xy 109.045957 70.95479) (xy 109.042194 70.952721)
+ (xy 109.038881 70.95) (xy 108.9725 70.914407) (xy 108.906417 70.878077) (xy 108.902326 70.876779) (xy 108.898547 70.874753)
+ (xy 108.826527 70.852735) (xy 108.754635 70.829929) (xy 108.750368 70.82945) (xy 108.746268 70.828197) (xy 108.671299 70.820582)
+ (xy 108.596392 70.81218) (xy 108.588007 70.812121) (xy 108.587848 70.812105) (xy 108.5877 70.812119) (xy 108.585 70.8121)
+ (xy 103.328196 70.8121) (xy 103.295581 70.763011) (xy 103.107372 70.573483) (xy 102.885935 70.424122) (xy 102.639703 70.320616)
+ (xy 102.378057 70.266907) (xy 102.110961 70.265043) (xy 101.84859 70.315092) (xy 101.600938 70.415151) (xy 101.377436 70.561406)
+ (xy 101.186599 70.748287) (xy 101.035695 70.968677) (xy 100.930473 71.21418) (xy 100.874939 71.475445) (xy 100.87121 71.742521)
+ (xy 100.919427 72.005235) (xy 101.017754 72.25358) (xy 101.162445 72.478097) (xy 101.34799 72.670234) (xy 101.56732 72.822672)
+ (xy 101.812082 72.929606) (xy 102.072954 72.986963) (xy 102.339997 72.992556) (xy 102.603041 72.946175) (xy 102.852066 72.849584)
+ (xy 103.077588 72.706464) (xy 103.271016 72.522265) (xy 103.326296 72.4439) (xy 108.247044 72.4439) (xy 109.409243 73.6061)
+ (xy 103.328196 73.6061) (xy 103.295581 73.557011) (xy 103.107372 73.367483) (xy 102.885935 73.218122) (xy 102.639703 73.114616)
+ (xy 102.378057 73.060907) (xy 102.110961 73.059043) (xy 101.84859 73.109092) (xy 101.600938 73.209151) (xy 101.377436 73.355406)
+ (xy 101.186599 73.542287) (xy 101.035695 73.762677) (xy 100.930473 74.00818) (xy 100.874939 74.269445) (xy 100.87121 74.536521)
+ (xy 100.919427 74.799235) (xy 101.017754 75.04758) (xy 101.162445 75.272097) (xy 101.34799 75.464234) (xy 101.56732 75.616672)
+ (xy 101.812082 75.723606) (xy 102.072954 75.780963) (xy 102.339997 75.786556) (xy 102.603041 75.740175) (xy 102.852066 75.643584)
+ (xy 103.077588 75.500464) (xy 103.271016 75.316265) (xy 103.326296 75.2379) (xy 109.517044 75.2379) (xy 110.679243 76.4001)
+ (xy 103.328196 76.4001) (xy 103.295581 76.351011) (xy 103.107372 76.161483) (xy 102.885935 76.012122) (xy 102.639703 75.908616)
+ (xy 102.378057 75.854907) (xy 102.110961 75.853043) (xy 101.84859 75.903092) (xy 101.600938 76.003151) (xy 101.377436 76.149406)
+ (xy 101.186599 76.336287) (xy 101.035695 76.556677) (xy 100.930473 76.80218) (xy 100.874939 77.063445) (xy 100.87121 77.330521)
+ (xy 100.919427 77.593235) (xy 101.017754 77.84158) (xy 101.162445 78.066097) (xy 101.34799 78.258234) (xy 101.56732 78.410672)
+ (xy 101.812082 78.517606) (xy 101.956862 78.549438) (xy 101.84859 78.570092) (xy 101.600938 78.670151) (xy 101.377436 78.816406)
+ (xy 101.186599 79.003287) (xy 101.035695 79.223677) (xy 100.930473 79.46918) (xy 100.874939 79.730445) (xy 100.87121 79.997521)
+ (xy 100.919427 80.260235) (xy 101.017754 80.50858) (xy 101.162445 80.733097) (xy 101.34799 80.925234) (xy 101.56732 81.077672)
+ (xy 101.812082 81.184606) (xy 102.072954 81.241963) (xy 102.339997 81.247556) (xy 102.603041 81.201175) (xy 102.852066 81.104584)
+ (xy 103.077588 80.961464) (xy 103.271016 80.777265) (xy 103.326296 80.6989) (xy 103.505 80.6989) (xy 103.58142 80.691407)
+ (xy 103.657884 80.684448) (xy 103.660629 80.68364) (xy 103.663476 80.683361) (xy 103.736981 80.661168) (xy 103.810642 80.639489)
+ (xy 103.813177 80.638164) (xy 103.815915 80.637337) (xy 103.883665 80.601314) (xy 103.951757 80.565716) (xy 103.953989 80.563922)
+ (xy 103.956512 80.56258) (xy 104.016015 80.514051) (xy 104.075855 80.465938) (xy 104.077692 80.463749) (xy 104.079911 80.461939)
+ (xy 104.128863 80.402765) (xy 104.17821 80.343957) (xy 104.179589 80.341449) (xy 104.181412 80.339245) (xy 104.217912 80.271739)
+ (xy 104.254923 80.204417) (xy 104.255789 80.201688) (xy 104.257148 80.199174) (xy 104.259709 80.1909) (xy 104.710243 80.1909)
+ (xy 103.192717 81.708426) (xy 103.107372 81.622483) (xy 102.885935 81.473122) (xy 102.639703 81.369616) (xy 102.378057 81.315907)
+ (xy 102.110961 81.314043) (xy 101.84859 81.364092) (xy 101.600938 81.464151) (xy 101.377436 81.610406) (xy 101.186599 81.797287)
+ (xy 101.035695 82.017677) (xy 100.930473 82.26318) (xy 100.874939 82.524445) (xy 100.87121 82.791521) (xy 100.919427 83.054235)
+ (xy 101.017754 83.30258) (xy 101.162445 83.527097) (xy 101.34799 83.719234) (xy 101.56732 83.871672) (xy 101.812082 83.978606)
+ (xy 102.072954 84.035963) (xy 102.339997 84.041556) (xy 102.603041 83.995175) (xy 102.852066 83.898584) (xy 103.077588 83.755464)
+ (xy 103.271016 83.571265) (xy 103.326296 83.4929) (xy 103.505 83.4929) (xy 103.58142 83.485407) (xy 103.657884 83.478448)
+ (xy 103.660629 83.47764) (xy 103.663476 83.477361) (xy 103.736981 83.455168) (xy 103.810642 83.433489) (xy 103.813177 83.432164)
+ (xy 103.815915 83.431337) (xy 103.883665 83.395314) (xy 103.951757 83.359716) (xy 103.953989 83.357922) (xy 103.956512 83.35658)
+ (xy 104.016015 83.308051) (xy 104.075855 83.259938) (xy 104.077692 83.257749) (xy 104.079911 83.255939) (xy 104.128863 83.196765)
+ (xy 104.17821 83.137957) (xy 104.179589 83.135449) (xy 104.181412 83.133245) (xy 104.217912 83.065739) (xy 104.254923 82.998417)
+ (xy 104.255789 82.995688) (xy 104.257148 82.993174) (xy 104.275738 82.933118) (xy 105.747957 81.4609) (xy 106.615244 81.4609)
+ (xy 103.563072 84.513072) (xy 103.515264 84.571274) (xy 103.46679 84.629043) (xy 103.464721 84.632806) (xy 103.462 84.636119)
+ (xy 103.451822 84.6551) (xy 103.328196 84.6551) (xy 103.295581 84.606011) (xy 103.107372 84.416483) (xy 102.885935 84.267122)
+ (xy 102.639703 84.163616) (xy 102.378057 84.109907) (xy 102.110961 84.108043) (xy 101.84859 84.158092) (xy 101.600938 84.258151)
+ (xy 101.377436 84.404406) (xy 101.186599 84.591287) (xy 101.035695 84.811677) (xy 100.930473 85.05718) (xy 100.874939 85.318445)
+ (xy 100.87121 85.585521) (xy 100.919427 85.848235) (xy 101.017754 86.09658) (xy 101.162445 86.321097) (xy 101.34799 86.513234)
+ (xy 101.56732 86.665672) (xy 101.812082 86.772606) (xy 102.072954 86.829963) (xy 102.339997 86.835556) (xy 102.603041 86.789175)
+ (xy 102.852066 86.692584) (xy 103.077588 86.549464) (xy 103.271016 86.365265) (xy 103.326296 86.2869) (xy 104.14 86.2869)
+ (xy 104.21642 86.279407) (xy 104.292884 86.272448) (xy 104.295629 86.27164) (xy 104.298476 86.271361) (xy 104.371981 86.249168)
+ (xy 104.445642 86.227489) (xy 104.448177 86.226164) (xy 104.450915 86.225337) (xy 104.518665 86.189314) (xy 104.586757 86.153716)
+ (xy 104.588989 86.151922) (xy 104.591512 86.15058) (xy 104.651015 86.102051) (xy 104.710855 86.053938) (xy 104.712692 86.051749)
+ (xy 104.714911 86.049939) (xy 104.763863 85.990765) (xy 104.81321 85.931957) (xy 104.814589 85.929449) (xy 104.816412 85.927245)
+ (xy 104.852912 85.859739) (xy 104.889923 85.792417) (xy 104.890789 85.789688) (xy 104.892148 85.787174) (xy 104.914824 85.713919)
+ (xy 104.938071 85.640635) (xy 104.93839 85.637788) (xy 104.939235 85.635059) (xy 104.947257 85.558733) (xy 104.95582 85.482392)
+ (xy 104.955859 85.4769) (xy 104.95588 85.476696) (xy 104.955861 85.476492) (xy 104.9559 85.471) (xy 104.9559 85.427956)
+ (xy 107.652956 82.7309) (xy 108.520244 82.7309) (xy 103.802044 87.4491) (xy 103.328196 87.4491) (xy 103.295581 87.400011)
+ (xy 103.107372 87.210483) (xy 102.885935 87.061122) (xy 102.639703 86.957616) (xy 102.378057 86.903907) (xy 102.110961 86.902043)
+ (xy 101.84859 86.952092) (xy 101.600938 87.052151) (xy 101.377436 87.198406) (xy 101.186599 87.385287) (xy 101.035695 87.605677)
+ (xy 100.930473 87.85118) (xy 100.874939 88.112445) (xy 100.87121 88.379521) (xy 100.919427 88.642235) (xy 101.017754 88.89058)
+ (xy 101.162445 89.115097) (xy 101.34799 89.307234) (xy 101.56732 89.459672) (xy 101.812082 89.566606) (xy 101.956862 89.598438)
+ (xy 101.84859 89.619092) (xy 101.600938 89.719151) (xy 101.377436 89.865406) (xy 101.186599 90.052287) (xy 101.035695 90.272677)
+ (xy 100.930473 90.51818) (xy 100.874939 90.779445) (xy 100.87121 91.046521) (xy 100.919427 91.309235) (xy 101.017754 91.55758)
+ (xy 101.162445 91.782097) (xy 101.34799 91.974234) (xy 101.56732 92.126672) (xy 101.812082 92.233606) (xy 102.072954 92.290963)
+ (xy 102.339997 92.296556) (xy 102.603041 92.250175) (xy 102.852066 92.153584) (xy 103.077588 92.010464) (xy 103.271016 91.826265)
+ (xy 103.326296 91.7479) (xy 104.775 91.7479) (xy 104.85142 91.740407) (xy 104.927884 91.733448) (xy 104.930629 91.73264)
+ (xy 104.933476 91.732361) (xy 105.006981 91.710168) (xy 105.080642 91.688489) (xy 105.083177 91.687164) (xy 105.085915 91.686337)
+ (xy 105.153665 91.650314) (xy 105.221757 91.614716) (xy 105.223989 91.612922) (xy 105.226512 91.61158) (xy 105.286015 91.563051)
+ (xy 105.345855 91.514938) (xy 105.347692 91.512749) (xy 105.349911 91.510939) (xy 105.398863 91.451765) (xy 105.44821 91.392957)
+ (xy 105.449589 91.390449) (xy 105.451412 91.388245) (xy 105.487912 91.320739) (xy 105.524923 91.253417) (xy 105.525789 91.250688)
+ (xy 105.527148 91.248174) (xy 105.545738 91.188118) (xy 107.256929 89.476928) (xy 107.304761 89.418696) (xy 107.35321 89.360957)
+ (xy 107.355279 89.357194) (xy 107.358 89.353881) (xy 107.393593 89.2875) (xy 107.429923 89.221417) (xy 107.431221 89.217326)
+ (xy 107.433247 89.213547) (xy 107.455265 89.141527) (xy 107.478071 89.069635) (xy 107.47855 89.065368) (xy 107.479803 89.061268)
+ (xy 107.487418 88.986299) (xy 107.49582 88.911392) (xy 107.495879 88.903007) (xy 107.495895 88.902848) (xy 107.495881 88.9027)
+ (xy 107.4959 88.9) (xy 107.4959 87.967956) (xy 108.803856 86.66) (xy 109.6614 86.66) (xy 109.6614 87.282695)
+ (xy 109.684458 87.398613) (xy 109.729687 87.507806) (xy 109.795349 87.606078) (xy 109.878922 87.68965) (xy 109.977193 87.755313)
+ (xy 110.086386 87.800542) (xy 110.153897 87.813971) (xy 110.026586 87.932721) (xy 109.858985 88.165597) (xy 109.740036 88.426696)
+ (xy 109.710497 88.524095) (xy 109.819992 88.75) (xy 110.975 88.75) (xy 110.975 86.51) (xy 109.8114 86.51)
+ (xy 109.6614 86.66) (xy 108.803856 86.66) (xy 109.6614 85.802456) (xy 109.6614 86.06) (xy 109.8114 86.21)
+ (xy 110.975 86.21) (xy 110.975 86.19) (xy 111.275 86.19) (xy 111.275 86.21) (xy 111.295 86.21)
+ (xy 111.295 86.51) (xy 111.275 86.51) (xy 111.275 88.75) (xy 111.295 88.75) (xy 111.295 89.05)
+ (xy 111.275 89.05) (xy 111.275 89.07) (xy 110.975 89.07) (xy 110.975 89.05) (xy 109.819992 89.05)
+ (xy 109.710497 89.275905) (xy 109.740036 89.373304) (xy 109.858985 89.634403) (xy 110.026586 89.867279) (xy 110.15719 89.9891)
+ (xy 109.22 89.9891) (xy 109.144997 89.996454) (xy 109.069914 90.003023) (xy 109.065792 90.00422) (xy 109.061524 90.004639)
+ (xy 108.98943 90.026405) (xy 108.917 90.047448) (xy 108.913187 90.049425) (xy 108.909085 90.050663) (xy 108.842611 90.086008)
+ (xy 108.775628 90.120729) (xy 108.772272 90.123408) (xy 108.768488 90.12542) (xy 108.710098 90.173042) (xy 108.651183 90.220073)
+ (xy 108.645213 90.22596) (xy 108.645089 90.226061) (xy 108.644994 90.226176) (xy 108.643071 90.228072) (xy 107.612044 91.2591)
+ (xy 107.061 91.2591) (xy 106.985993 91.266455) (xy 106.910915 91.273023) (xy 106.906794 91.27422) (xy 106.902524 91.274639)
+ (xy 106.830405 91.296413) (xy 106.758001 91.317448) (xy 106.754189 91.319424) (xy 106.750085 91.320663) (xy 106.683612 91.356008)
+ (xy 106.616629 91.390728) (xy 106.613272 91.393408) (xy 106.609488 91.39542) (xy 106.551109 91.443032) (xy 106.492184 91.490072)
+ (xy 106.486213 91.49596) (xy 106.486089 91.496061) (xy 106.485994 91.496175) (xy 106.484072 91.498071) (xy 105.072044 92.9101)
+ (xy 103.328196 92.9101) (xy 103.295581 92.861011) (xy 103.107372 92.671483) (xy 102.885935 92.522122) (xy 102.639703 92.418616)
+ (xy 102.378057 92.364907) (xy 102.110961 92.363043) (xy 101.84859 92.413092) (xy 101.600938 92.513151) (xy 101.377436 92.659406)
+ (xy 101.186599 92.846287) (xy 101.035695 93.066677) (xy 100.930473 93.31218) (xy 100.874939 93.573445) (xy 100.87121 93.840521)
+ (xy 100.919427 94.103235) (xy 101.000143 94.3071) (xy 100.788196 94.3071) (xy 100.755581 94.258011) (xy 100.567372 94.068483)
+ (xy 100.345935 93.919122) (xy 100.099703 93.815616) (xy 99.838057 93.761907) (xy 99.570961 93.760043) (xy 99.30859 93.810092)
+ (xy 99.060938 93.910151) (xy 98.837436 94.056406) (xy 98.646599 94.243287) (xy 98.495695 94.463677) (xy 98.390473 94.70918)
+ (xy 98.334939 94.970445) (xy 98.33121 95.237521) (xy 98.379427 95.500235) (xy 98.477754 95.74858) (xy 98.622445 95.973097)
+ (xy 98.80799 96.165234) (xy 99.02732 96.317672) (xy 99.272082 96.424606) (xy 99.532954 96.481963) (xy 99.799997 96.487556)
+ (xy 100.063041 96.441175) (xy 100.312066 96.344584) (xy 100.537588 96.201464) (xy 100.731016 96.017265) (xy 100.786296 95.9389)
+ (xy 101.002169 95.9389) (xy 100.930473 96.10618) (xy 100.874939 96.367445) (xy 100.87121 96.634521) (xy 100.919427 96.897235)
+ (xy 101.017754 97.14558) (xy 101.070934 97.2281) (xy 100.905212 97.2281) (xy 100.903393 97.223686) (xy 100.755581 97.001211)
+ (xy 100.567372 96.811683) (xy 100.345935 96.662322) (xy 100.099703 96.558816) (xy 99.838057 96.505107) (xy 99.570961 96.503243)
+ (xy 99.30859 96.553292) (xy 99.060938 96.653351) (xy 98.837436 96.799606) (xy 98.646599 96.986487) (xy 98.495695 97.206877)
+ (xy 98.390473 97.45238) (xy 98.334939 97.713645) (xy 98.33121 97.980721) (xy 98.379427 98.243435) (xy 98.477754 98.49178)
+ (xy 98.622445 98.716297) (xy 98.80799 98.908434) (xy 99.02732 99.060872) (xy 99.272082 99.167806) (xy 99.532954 99.225163)
+ (xy 99.799997 99.230756) (xy 100.063041 99.184375) (xy 100.312066 99.087784) (xy 100.537588 98.944664) (xy 100.626599 98.8599)
+ (xy 100.947737 98.8599) (xy 100.930473 98.90018) (xy 100.874939 99.161445) (xy 100.87121 99.428521) (xy 100.919427 99.691235)
+ (xy 100.98003 99.8443) (xy 100.788196 99.8443) (xy 100.755581 99.795211) (xy 100.567372 99.605683) (xy 100.345935 99.456322)
+ (xy 100.099703 99.352816) (xy 99.838057 99.299107) (xy 99.570961 99.297243) (xy 99.30859 99.347292) (xy 99.060938 99.447351)
+ (xy 98.837436 99.593606) (xy 98.646599 99.780487) (xy 98.495695 100.000877) (xy 98.390473 100.24638) (xy 98.334939 100.507645)
+ (xy 98.33121 100.774721) (xy 98.379427 101.037435) (xy 98.477754 101.28578) (xy 98.622445 101.510297) (xy 98.80799 101.702434)
+ (xy 99.02732 101.854872) (xy 99.201013 101.930757) (xy 99.060938 101.987351) (xy 98.837436 102.133606) (xy 98.646599 102.320487)
+ (xy 98.495695 102.540877) (xy 98.390473 102.78638) (xy 98.334939 103.047645) (xy 98.33121 103.314721) (xy 98.379427 103.577435)
+ (xy 98.477754 103.82578) (xy 98.622445 104.050297) (xy 98.80799 104.242434) (xy 99.02732 104.394872) (xy 99.272082 104.501806)
+ (xy 99.532954 104.559163) (xy 99.799997 104.564756) (xy 100.063041 104.518375) (xy 100.312066 104.421784) (xy 100.537588 104.278664)
+ (xy 100.592189 104.226669) (xy 100.643583 104.254923) (xy 100.646312 104.255789) (xy 100.648826 104.257148) (xy 100.722081 104.279824)
+ (xy 100.795365 104.303071) (xy 100.798212 104.30339) (xy 100.800941 104.304235) (xy 100.870097 104.311504) (xy 100.870097 105.537)
+ (xy 100.877716 105.632548) (xy 100.927903 105.794607) (xy 101.021252 105.936269) (xy 101.15037 106.046315) (xy 101.305035 106.116034)
+ (xy 101.473 106.139903) (xy 102.997 106.139903) (xy 103.092548 106.132284) (xy 103.254607 106.082097) (xy 103.396269 105.988748)
+ (xy 103.506315 105.85963) (xy 103.576034 105.704965) (xy 103.592243 105.5909) (xy 117.475 105.5909) (xy 117.550003 105.583546)
+ (xy 117.625086 105.576977) (xy 117.629208 105.57578) (xy 117.633476 105.575361) (xy 117.705583 105.553591) (xy 117.777999 105.532552)
+ (xy 117.781811 105.530576) (xy 117.785915 105.529337) (xy 117.852428 105.493971) (xy 117.919371 105.459271) (xy 117.922725 105.456594)
+ (xy 117.926512 105.45458) (xy 117.984949 105.406921) (xy 118.043816 105.359927) (xy 118.049781 105.354045) (xy 118.049911 105.353939)
+ (xy 118.05001 105.353819) (xy 118.051928 105.351928) (xy 121.257557 102.146299) (xy 121.254793 102.344181) (xy 121.300762 102.594647)
+ (xy 121.394505 102.831414) (xy 121.53245 103.045463) (xy 121.709344 103.228642) (xy 121.7391 103.249323) (xy 121.7391 105.707043)
+ (xy 120.947044 106.4991) (xy 116.84 106.4991) (xy 116.764993 106.506455) (xy 116.689915 106.513023) (xy 116.685794 106.51422)
+ (xy 116.681524 106.514639) (xy 116.609405 106.536413) (xy 116.537001 106.557448) (xy 116.533189 106.559424) (xy 116.529085 106.560663)
+ (xy 116.462612 106.596008) (xy 116.395629 106.630728) (xy 116.392272 106.633408) (xy 116.388488 106.63542) (xy 116.330079 106.683057)
+ (xy 116.271184 106.730073) (xy 116.265214 106.735959) (xy 116.265089 106.736061) (xy 116.264993 106.736177) (xy 116.263072 106.738071)
+ (xy 115.628072 107.373072) (xy 115.580264 107.431274) (xy 115.53179 107.489043) (xy 115.529721 107.492806) (xy 115.527 107.496119)
+ (xy 115.491407 107.5625) (xy 115.455077 107.628583) (xy 115.453779 107.632674) (xy 115.451753 107.636453) (xy 115.429735 107.708473)
+ (xy 115.406929 107.780365) (xy 115.40645 107.784632) (xy 115.405197 107.788732) (xy 115.397582 107.863701) (xy 115.38918 107.938608)
+ (xy 115.389121 107.946993) (xy 115.389105 107.947152) (xy 115.389119 107.9473) (xy 115.3891 107.95) (xy 115.3891 116.84)
+ (xy 115.396454 116.915003) (xy 115.403023 116.990086) (xy 115.40422 116.994208) (xy 115.404639 116.998476) (xy 115.426409 117.070583)
+ (xy 115.447448 117.142999) (xy 115.449424 117.146811) (xy 115.450663 117.150915) (xy 115.486029 117.217428) (xy 115.520729 117.284371)
+ (xy 115.523406 117.287725) (xy 115.52542 117.291512) (xy 115.573079 117.349949) (xy 115.620073 117.408816) (xy 115.625955 117.414781)
+ (xy 115.626061 117.414911) (xy 115.626181 117.41501) (xy 115.628072 117.416928) (xy 116.263072 118.051929) (xy 116.321304 118.099761)
+ (xy 116.379043 118.14821) (xy 116.382806 118.150279) (xy 116.386119 118.153) (xy 116.452481 118.188583) (xy 116.518583 118.224923)
+ (xy 116.522677 118.226222) (xy 116.526454 118.228247) (xy 116.598459 118.250261) (xy 116.670365 118.273071) (xy 116.674632 118.27355)
+ (xy 116.678732 118.274803) (xy 116.753701 118.282418) (xy 116.828608 118.29082) (xy 116.836993 118.290879) (xy 116.837152 118.290895)
+ (xy 116.8373 118.290881) (xy 116.84 118.2909) (xy 120.65 118.2909) (xy 120.725003 118.283546) (xy 120.800086 118.276977)
+ (xy 120.804208 118.27578) (xy 120.808476 118.275361) (xy 120.880583 118.253591) (xy 120.952999 118.232552) (xy 120.956811 118.230576)
+ (xy 120.960915 118.229337) (xy 121.027428 118.193971) (xy 121.094371 118.159271) (xy 121.097725 118.156594) (xy 121.101512 118.15458)
+ (xy 121.159949 118.106921) (xy 121.218816 118.059927) (xy 121.224781 118.054045) (xy 121.224911 118.053939) (xy 121.22501 118.053819)
+ (xy 121.226928 118.051928) (xy 121.861929 117.416928) (xy 121.909761 117.358696) (xy 121.95821 117.300957) (xy 121.960279 117.297194)
+ (xy 121.963 117.293881) (xy 121.998583 117.227519) (xy 122.034923 117.161417) (xy 122.036222 117.157323) (xy 122.038247 117.153546)
+ (xy 122.060261 117.081541) (xy 122.083071 117.009635) (xy 122.08355 117.005368) (xy 122.084803 117.001268) (xy 122.092418 116.926299)
+ (xy 122.10082 116.851392) (xy 122.100879 116.843007) (xy 122.100895 116.842848) (xy 122.100881 116.8427) (xy 122.1009 116.84)
+ (xy 122.1009 116.542956) (xy 122.455045 116.188811) (xy 122.434697 116.332) (xy 122.434697 118.618) (xy 122.442316 118.713548)
+ (xy 122.492503 118.875607) (xy 122.585852 119.017269) (xy 122.71497 119.127315) (xy 122.869635 119.197034) (xy 123.0091 119.216853)
+ (xy 123.0091 120.4691) (xy 122.530679 120.4691) (xy 122.444476 120.339355) (xy 122.238717 120.132154) (xy 121.996631 119.968865)
+ (xy 121.72744 119.855708) (xy 121.441396 119.796991) (xy 121.149395 119.794953) (xy 120.862559 119.84967) (xy 120.591814 119.959058)
+ (xy 120.347472 120.118951) (xy 120.13884 120.323258) (xy 120.038981 120.4691) (xy 119.38 120.4691) (xy 119.304993 120.476455)
+ (xy 119.229915 120.483023) (xy 119.225794 120.48422) (xy 119.221524 120.484639) (xy 119.149405 120.506413) (xy 119.077001 120.527448)
+ (xy 119.073189 120.529424) (xy 119.069085 120.530663) (xy 119.002612 120.566008) (xy 118.935629 120.600728) (xy 118.932272 120.603408)
+ (xy 118.928488 120.60542) (xy 118.870079 120.653057) (xy 118.811184 120.700073) (xy 118.805214 120.705959) (xy 118.805089 120.706061)
+ (xy 118.804993 120.706177) (xy 118.803072 120.708071) (xy 118.168072 121.343072) (xy 118.120264 121.401274) (xy 118.07179 121.459043)
+ (xy 118.069721 121.462806) (xy 118.067 121.466119) (xy 118.031407 121.5325) (xy 117.995077 121.598583) (xy 117.993779 121.602674)
+ (xy 117.991753 121.606453) (xy 117.969735 121.678473) (xy 117.946929 121.750365) (xy 117.94645 121.754632) (xy 117.945197 121.758732)
+ (xy 117.937582 121.833701) (xy 117.92918 121.908608) (xy 117.929121 121.916993) (xy 117.929105 121.917152) (xy 117.929119 121.9173)
+ (xy 117.9291 121.92) (xy 117.9291 127.635) (xy 117.936454 127.710003) (xy 117.943023 127.785086) (xy 117.94422 127.789208)
+ (xy 117.944639 127.793476) (xy 117.966409 127.865583) (xy 117.987448 127.937999) (xy 117.989424 127.941811) (xy 117.990663 127.945915)
+ (xy 118.026029 128.012428) (xy 118.060729 128.079371) (xy 118.063406 128.082725) (xy 118.06542 128.086512) (xy 118.113079 128.144949)
+ (xy 118.160073 128.203816) (xy 118.165955 128.209781) (xy 118.166061 128.209911) (xy 118.166181 128.21001) (xy 118.168072 128.211928)
+ (xy 119.438071 129.481928) (xy 119.496299 129.529757) (xy 119.554043 129.57821) (xy 119.557806 129.580279) (xy 119.561119 129.583)
+ (xy 119.6275 129.618593) (xy 119.693583 129.654923) (xy 119.697674 129.656221) (xy 119.701453 129.658247) (xy 119.773485 129.680269)
+ (xy 119.845365 129.703071) (xy 119.849631 129.703549) (xy 119.853731 129.704803) (xy 119.928706 129.712419) (xy 120.003608 129.72082)
+ (xy 120.011993 129.720879) (xy 120.012152 129.720895) (xy 120.0123 129.720881) (xy 120.015 129.7209) (xy 132.715 129.7209)
+ (xy 132.790003 129.713546) (xy 132.865086 129.706977) (xy 132.869208 129.70578) (xy 132.873476 129.705361) (xy 132.945583 129.683591)
+ (xy 133.017999 129.662552) (xy 133.021811 129.660576) (xy 133.025915 129.659337) (xy 133.092428 129.623971) (xy 133.159371 129.589271)
+ (xy 133.162725 129.586594) (xy 133.166512 129.58458) (xy 133.224949 129.536921) (xy 133.283816 129.489927) (xy 133.289781 129.484045)
+ (xy 133.289911 129.483939) (xy 133.29001 129.483819) (xy 133.291928 129.481928) (xy 135.057655 127.716202) (xy 135.092954 127.723963)
+ (xy 135.359997 127.729556) (xy 135.623041 127.683175) (xy 135.872066 127.586584) (xy 136.097588 127.443464) (xy 136.291016 127.259265)
+ (xy 136.444982 127.041004) (xy 136.553622 126.796994) (xy 136.612798 126.53653) (xy 136.617058 126.231449) (xy 136.565178 125.969434)
+ (xy 136.463393 125.722486) (xy 136.315581 125.500011) (xy 136.127372 125.310483) (xy 135.905935 125.161122) (xy 135.659703 125.057616)
+ (xy 135.398057 125.003907) (xy 135.130961 125.002043) (xy 134.86859 125.052092) (xy 134.620938 125.152151) (xy 134.397436 125.298406)
+ (xy 134.206599 125.485287) (xy 134.055695 125.705677) (xy 133.950473 125.95118) (xy 133.894939 126.212445) (xy 133.89121 126.479521)
+ (xy 133.906006 126.560137) (xy 132.377044 128.0891) (xy 120.352957 128.0891) (xy 119.5609 127.297044) (xy 119.5609 122.257956)
+ (xy 119.717957 122.1009) (xy 120.039311 122.1009) (xy 120.112434 122.214364) (xy 120.31528 122.424417) (xy 120.555062 122.59107)
+ (xy 120.822647 122.707976) (xy 121.107843 122.77068) (xy 121.399787 122.776795) (xy 121.687359 122.726089) (xy 121.959605 122.620491)
+ (xy 122.206156 122.464026) (xy 122.41762 122.262651) (xy 122.531723 122.1009) (xy 127.573365 122.1009) (xy 127.579716 122.180548)
+ (xy 127.629903 122.342607) (xy 127.723252 122.484269) (xy 127.85237 122.594315) (xy 128.007035 122.664034) (xy 128.175 122.687903)
+ (xy 129.175 122.687903) (xy 129.270548 122.680284) (xy 129.3591 122.652861) (xy 129.3591 123.487043) (xy 128.328072 124.518072)
+ (xy 128.280264 124.576274) (xy 128.23179 124.634043) (xy 128.229721 124.637806) (xy 128.227 124.641119) (xy 128.191407 124.7075)
+ (xy 128.155077 124.773583) (xy 128.153779 124.777674) (xy 128.151753 124.781453) (xy 128.129735 124.853473) (xy 128.106929 124.925365)
+ (xy 128.10645 124.929632) (xy 128.105197 124.933732) (xy 128.101722 124.96794) (xy 128.079452 124.969716) (xy 127.917393 125.019903)
+ (xy 127.775731 125.113252) (xy 127.665685 125.24237) (xy 127.595966 125.397035) (xy 127.574357 125.5491) (xy 126.188196 125.5491)
+ (xy 126.155581 125.500011) (xy 125.967372 125.310483) (xy 125.745935 125.161122) (xy 125.499703 125.057616) (xy 125.238057 125.003907)
+ (xy 124.970961 125.002043) (xy 124.70859 125.052092) (xy 124.460938 125.152151) (xy 124.237436 125.298406) (xy 124.046599 125.485287)
+ (xy 124.002905 125.5491) (xy 122.530679 125.5491) (xy 122.444476 125.419355) (xy 122.238717 125.212154) (xy 121.996631 125.048865)
+ (xy 121.72744 124.935708) (xy 121.441396 124.876991) (xy 121.149395 124.874953) (xy 120.862559 124.92967) (xy 120.591814 125.039058)
+ (xy 120.347472 125.198951) (xy 120.13884 125.403258) (xy 119.973866 125.644198) (xy 119.858831 125.912593) (xy 119.798119 126.19822)
+ (xy 119.794042 126.490199) (xy 119.846755 126.77741) (xy 119.954251 127.048912) (xy 120.112434 127.294364) (xy 120.31528 127.504417)
+ (xy 120.555062 127.67107) (xy 120.822647 127.787976) (xy 121.107843 127.85068) (xy 121.399787 127.856795) (xy 121.687359 127.806089)
+ (xy 121.959605 127.700491) (xy 122.206156 127.544026) (xy 122.41762 127.342651) (xy 122.531723 127.1809) (xy 124.000407 127.1809)
+ (xy 124.022445 127.215097) (xy 124.20799 127.407234) (xy 124.42732 127.559672) (xy 124.672082 127.666606) (xy 124.932954 127.723963)
+ (xy 125.199997 127.729556) (xy 125.463041 127.683175) (xy 125.712066 127.586584) (xy 125.937588 127.443464) (xy 126.131016 127.259265)
+ (xy 126.186296 127.1809) (xy 127.573365 127.1809) (xy 127.579716 127.260548) (xy 127.629903 127.422607) (xy 127.723252 127.564269)
+ (xy 127.85237 127.674315) (xy 128.007035 127.744034) (xy 128.175 127.767903) (xy 129.175 127.767903) (xy 129.270548 127.760284)
+ (xy 129.432607 127.710097) (xy 129.574269 127.616748) (xy 129.684315 127.48763) (xy 129.754034 127.332965) (xy 129.777903 127.165)
+ (xy 129.777903 126.665) (xy 130.575 126.665) (xy 130.575 127.224095) (xy 130.598058 127.340013) (xy 130.643287 127.449206)
+ (xy 130.708949 127.547478) (xy 130.792522 127.63105) (xy 130.890793 127.696713) (xy 130.999986 127.741942) (xy 131.115905 127.765)
+ (xy 131.375 127.765) (xy 131.525 127.615) (xy 131.525 126.515) (xy 131.825 126.515) (xy 131.825 127.615)
+ (xy 131.975 127.765) (xy 132.234095 127.765) (xy 132.350014 127.741942) (xy 132.459207 127.696713) (xy 132.557478 127.63105)
+ (xy 132.641051 127.547478) (xy 132.706713 127.449206) (xy 132.751942 127.340013) (xy 132.775 127.224095) (xy 132.775 126.665)
+ (xy 132.625 126.515) (xy 131.825 126.515) (xy 131.525 126.515) (xy 130.725 126.515) (xy 130.575 126.665)
+ (xy 129.777903 126.665) (xy 129.777903 125.565) (xy 129.773191 125.505905) (xy 130.575 125.505905) (xy 130.575 126.065)
+ (xy 130.725 126.215) (xy 131.525 126.215) (xy 131.525 125.115) (xy 131.825 125.115) (xy 131.825 126.215)
+ (xy 132.625 126.215) (xy 132.775 126.065) (xy 132.775 125.505905) (xy 132.751942 125.389987) (xy 132.706713 125.280794)
+ (xy 132.641051 125.182522) (xy 132.557478 125.09895) (xy 132.459207 125.033287) (xy 132.350014 124.988058) (xy 132.234095 124.965)
+ (xy 131.975 124.965) (xy 131.825 125.115) (xy 131.525 125.115) (xy 131.375 124.965) (xy 131.115905 124.965)
+ (xy 130.999986 124.988058) (xy 130.890793 125.033287) (xy 130.792522 125.09895) (xy 130.708949 125.182522) (xy 130.643287 125.280794)
+ (xy 130.598058 125.389987) (xy 130.575 125.505905) (xy 129.773191 125.505905) (xy 129.770284 125.469452) (xy 129.749977 125.403879)
+ (xy 130.751928 124.401929) (xy 130.799757 124.343701) (xy 130.84821 124.285957) (xy 130.850279 124.282194) (xy 130.853 124.278881)
+ (xy 130.888593 124.2125) (xy 130.924923 124.146417) (xy 130.926221 124.142326) (xy 130.928247 124.138547) (xy 130.950269 124.066515)
+ (xy 130.973071 123.994635) (xy 130.973549 123.990369) (xy 130.974803 123.986269) (xy 130.982419 123.911294) (xy 130.99082 123.836392)
+ (xy 130.990879 123.828007) (xy 130.990895 123.827848) (xy 130.990881 123.8277) (xy 130.9909 123.825) (xy 130.9909 122.658178)
+ (xy 130.999986 122.661942) (xy 131.115905 122.685) (xy 131.375 122.685) (xy 131.525 122.535) (xy 131.525 121.435)
+ (xy 131.825 121.435) (xy 131.825 122.535) (xy 131.975 122.685) (xy 132.234095 122.685) (xy 132.350014 122.661942)
+ (xy 132.459207 122.616713) (xy 132.557478 122.55105) (xy 132.641051 122.467478) (xy 132.706713 122.369206) (xy 132.751942 122.260013)
+ (xy 132.775 122.144095) (xy 132.775 121.585) (xy 132.625 121.435) (xy 131.825 121.435) (xy 131.525 121.435)
+ (xy 131.505 121.435) (xy 131.505 121.135) (xy 131.525 121.135) (xy 131.525 120.035) (xy 131.825 120.035)
+ (xy 131.825 121.135) (xy 132.625 121.135) (xy 132.775 120.985) (xy 132.775 120.425905) (xy 132.751942 120.309987)
+ (xy 132.706713 120.200794) (xy 132.641051 120.102522) (xy 132.557478 120.01895) (xy 132.459207 119.953287) (xy 132.350014 119.908058)
+ (xy 132.234095 119.885) (xy 131.975 119.885) (xy 131.825 120.035) (xy 131.525 120.035) (xy 131.375 119.885)
+ (xy 131.115905 119.885) (xy 130.999986 119.908058) (xy 130.9909 119.911822) (xy 130.9909 119.143887) (xy 131.166024 119.198097)
+ (xy 131.435314 119.2264) (xy 131.704973 119.201859) (xy 131.964729 119.125409) (xy 132.204689 118.999961) (xy 132.415713 118.830293)
+ (xy 132.589762 118.622869) (xy 132.715519 118.394119) (xy 132.760612 118.500117) (xy 132.914755 118.726119) (xy 133.110027 118.917706)
+ (xy 133.338923 119.067516) (xy 133.621082 119.169421) (xy 133.835 119.058875) (xy 133.835 117.625) (xy 133.815 117.625)
+ (xy 133.815 117.325) (xy 133.835 117.325) (xy 133.835 115.891125) (xy 134.135 115.891125) (xy 134.135 117.325)
+ (xy 134.155 117.325) (xy 134.155 117.625) (xy 134.135 117.625) (xy 134.135 119.058875) (xy 134.348918 119.169421)
+ (xy 134.631077 119.067516) (xy 134.859973 118.917706) (xy 135.055245 118.726119) (xy 135.209388 118.500117) (xy 135.255297 118.392202)
+ (xy 135.369405 118.606809) (xy 135.540542 118.816644) (xy 135.749176 118.989241) (xy 135.987361 119.118027) (xy 136.246024 119.198097)
+ (xy 136.515314 119.2264) (xy 136.784973 119.201859) (xy 137.044729 119.125409) (xy 137.284689 118.999961) (xy 137.495713 118.830293)
+ (xy 137.669762 118.622869) (xy 137.795519 118.394119) (xy 137.840612 118.500117) (xy 137.994755 118.726119) (xy 138.190027 118.917706)
+ (xy 138.418923 119.067516) (xy 138.701082 119.169421) (xy 138.915 119.058875) (xy 138.915 117.625) (xy 139.215 117.625)
+ (xy 139.215 119.058875) (xy 139.428918 119.169421) (xy 139.711077 119.067516) (xy 139.939973 118.917706) (xy 140.135245 118.726119)
+ (xy 140.289388 118.500117) (xy 140.396478 118.248386) (xy 140.4524 117.9806) (xy 140.4524 117.625) (xy 139.215 117.625)
+ (xy 138.915 117.625) (xy 138.895 117.625) (xy 138.895 117.325) (xy 138.915 117.325) (xy 138.915 115.891125)
+ (xy 139.215 115.891125) (xy 139.215 117.325) (xy 140.4524 117.325) (xy 140.4524 116.9694) (xy 140.396478 116.701614)
+ (xy 140.289388 116.449883) (xy 140.135245 116.223881) (xy 139.939973 116.032294) (xy 139.711077 115.882484) (xy 139.428918 115.780579)
+ (xy 139.215 115.891125) (xy 138.915 115.891125) (xy 138.701082 115.780579) (xy 138.418923 115.882484) (xy 138.190027 116.032294)
+ (xy 137.994755 116.223881) (xy 137.840612 116.449883) (xy 137.794703 116.557798) (xy 137.680595 116.343191) (xy 137.509458 116.133356)
+ (xy 137.300824 115.960759) (xy 137.062639 115.831973) (xy 136.803976 115.751903) (xy 136.534686 115.7236) (xy 136.265027 115.748141)
+ (xy 136.005271 115.824591) (xy 135.765311 115.950039) (xy 135.554287 116.119707) (xy 135.380238 116.327131) (xy 135.254481 116.555881)
+ (xy 135.209388 116.449883) (xy 135.055245 116.223881) (xy 134.859973 116.032294) (xy 134.631077 115.882484) (xy 134.348918 115.780579)
+ (xy 134.135 115.891125) (xy 133.835 115.891125) (xy 133.621082 115.780579) (xy 133.338923 115.882484) (xy 133.110027 116.032294)
+ (xy 132.914755 116.223881) (xy 132.760612 116.449883) (xy 132.714703 116.557798) (xy 132.600595 116.343191) (xy 132.429458 116.133356)
+ (xy 132.2609 115.993913) (xy 132.2609 115.57) (xy 132.253545 115.494993) (xy 132.246977 115.419915) (xy 132.24578 115.415794)
+ (xy 132.245361 115.411524) (xy 132.223587 115.339405) (xy 132.202552 115.267001) (xy 132.200576 115.263189) (xy 132.199337 115.259085)
+ (xy 132.163992 115.192612) (xy 132.129272 115.125629) (xy 132.126592 115.122272) (xy 132.12458 115.118488) (xy 132.076943 115.060079)
+ (xy 132.029927 115.001184) (xy 132.024041 114.995214) (xy 132.023939 114.995089) (xy 132.023823 114.994993) (xy 132.021929 114.993072)
+ (xy 131.386928 114.358072) (xy 131.328726 114.310264) (xy 131.270957 114.26179) (xy 131.267194 114.259721) (xy 131.263881 114.257)
+ (xy 131.1975 114.221407) (xy 131.131417 114.185077) (xy 131.127326 114.183779) (xy 131.123547 114.181753) (xy 131.051527 114.159735)
+ (xy 130.979635 114.136929) (xy 130.975368 114.13645) (xy 130.971268 114.135197) (xy 130.896299 114.127582) (xy 130.821392 114.11918)
+ (xy 130.813007 114.119121) (xy 130.812848 114.119105) (xy 130.8127 114.119119) (xy 130.81 114.1191) (xy 122.555 114.1191)
+ (xy 122.479997 114.126454) (xy 122.404914 114.133023) (xy 122.400792 114.13422) (xy 122.396524 114.134639) (xy 122.32443 114.156405)
+ (xy 122.252 114.177448) (xy 122.248187 114.179425) (xy 122.244085 114.180663) (xy 122.177611 114.216008) (xy 122.110628 114.250729)
+ (xy 122.107272 114.253408) (xy 122.103488 114.25542) (xy 122.045098 114.303042) (xy 121.986183 114.350073) (xy 121.980213 114.35596)
+ (xy 121.980089 114.356061) (xy 121.979994 114.356176) (xy 121.978071 114.358072) (xy 120.708072 115.628072) (xy 120.660264 115.686274)
+ (xy 120.61179 115.744043) (xy 120.609721 115.747806) (xy 120.607 115.751119) (xy 120.571407 115.8175) (xy 120.535077 115.883583)
+ (xy 120.533779 115.887674) (xy 120.531753 115.891453) (xy 120.509735 115.963473) (xy 120.486929 116.035365) (xy 120.48645 116.039632)
+ (xy 120.485197 116.043732) (xy 120.477582 116.118701) (xy 120.46918 116.193608) (xy 120.469121 116.201993) (xy 120.469105 116.202152)
+ (xy 120.469119 116.2023) (xy 120.4691 116.205) (xy 120.4691 116.502043) (xy 120.312044 116.6591) (xy 117.177957 116.6591)
+ (xy 117.0209 116.502044) (xy 117.0209 115.465) (xy 117.345 115.465) (xy 117.345 115.724095) (xy 117.368058 115.840014)
+ (xy 117.413287 115.949207) (xy 117.47895 116.047478) (xy 117.562522 116.131051) (xy 117.660794 116.196713) (xy 117.769987 116.241942)
+ (xy 117.885905 116.265) (xy 118.445 116.265) (xy 118.595 116.115) (xy 118.595 115.315) (xy 118.895 115.315)
+ (xy 118.895 116.115) (xy 119.045 116.265) (xy 119.604095 116.265) (xy 119.720013 116.241942) (xy 119.829206 116.196713)
+ (xy 119.927478 116.131051) (xy 120.01105 116.047478) (xy 120.076713 115.949207) (xy 120.121942 115.840014) (xy 120.145 115.724095)
+ (xy 120.145 115.465) (xy 119.995 115.315) (xy 118.895 115.315) (xy 118.595 115.315) (xy 117.495 115.315)
+ (xy 117.345 115.465) (xy 117.0209 115.465) (xy 117.0209 114.605905) (xy 117.345 114.605905) (xy 117.345 114.865)
+ (xy 117.495 115.015) (xy 118.595 115.015) (xy 118.595 114.215) (xy 118.895 114.215) (xy 118.895 115.015)
+ (xy 119.995 115.015) (xy 120.145 114.865) (xy 120.145 114.605905) (xy 120.121942 114.489986) (xy 120.076713 114.380793)
+ (xy 120.01105 114.282522) (xy 119.927478 114.198949) (xy 119.829206 114.133287) (xy 119.720013 114.088058) (xy 119.604095 114.065)
+ (xy 119.045 114.065) (xy 118.895 114.215) (xy 118.595 114.215) (xy 118.445 114.065) (xy 117.885905 114.065)
+ (xy 117.769987 114.088058) (xy 117.660794 114.133287) (xy 117.562522 114.198949) (xy 117.47895 114.282522) (xy 117.413287 114.380793)
+ (xy 117.368058 114.489986) (xy 117.345 114.605905) (xy 117.0209 114.605905) (xy 117.0209 108.287956) (xy 117.177957 108.1309)
+ (xy 121.285 108.1309) (xy 121.360003 108.123546) (xy 121.435086 108.116977) (xy 121.439208 108.11578) (xy 121.443476 108.115361)
+ (xy 121.515583 108.093591) (xy 121.587999 108.072552) (xy 121.591811 108.070576) (xy 121.595915 108.069337) (xy 121.662428 108.033971)
+ (xy 121.729371 107.999271) (xy 121.732725 107.996594) (xy 121.736512 107.99458) (xy 121.794949 107.946921) (xy 121.853816 107.899927)
+ (xy 121.859781 107.894045) (xy 121.859911 107.893939) (xy 121.86001 107.893819) (xy 121.861928 107.891928) (xy 122.39874 107.355116)
+ (xy 122.397627 107.43486) (xy 122.448092 107.709822) (xy 122.551003 107.969746) (xy 122.70244 108.20473) (xy 122.717 108.219807)
+ (xy 122.717 108.66332) (xy 122.680238 108.707131) (xy 122.549792 108.944411) (xy 122.467918 109.202509) (xy 122.437735 109.471595)
+ (xy 122.4376 109.490966) (xy 122.4376 110.219034) (xy 122.464023 110.488515) (xy 122.542285 110.747731) (xy 122.626438 110.906)
+ (xy 118.745 110.906) (xy 118.529788 110.927102) (xy 118.322774 110.989603) (xy 118.186432 111.062097) (xy 117.945 111.062097)
+ (xy 117.849452 111.069716) (xy 117.687393 111.119903) (xy 117.545731 111.213252) (xy 117.435685 111.34237) (xy 117.365966 111.497035)
+ (xy 117.342097 111.665) (xy 117.342097 112.665) (xy 117.349716 112.760548) (xy 117.399903 112.922607) (xy 117.493252 113.064269)
+ (xy 117.62237 113.174315) (xy 117.777035 113.244034) (xy 117.945 113.267903) (xy 119.545 113.267903) (xy 119.640548 113.260284)
+ (xy 119.802607 113.210097) (xy 119.936299 113.122) (xy 123.19 113.122) (xy 123.291874 113.112011) (xy 123.393819 113.103092)
+ (xy 123.399414 113.101466) (xy 123.405212 113.100898) (xy 123.503161 113.071326) (xy 123.601475 113.042763) (xy 123.60665 113.04008)
+ (xy 123.612226 113.038397) (xy 123.702593 112.990348) (xy 123.79346 112.943247) (xy 123.798012 112.939613) (xy 123.803158 112.936877)
+ (xy 123.882478 112.872185) (xy 123.962459 112.808337) (xy 123.970566 112.800342) (xy 123.970735 112.800204) (xy 123.970864 112.800048)
+ (xy 123.973474 112.797474) (xy 124.608475 112.162474) (xy 124.673441 112.083383) (xy 124.739226 112.004983) (xy 124.742033 111.999877)
+ (xy 124.745731 111.995375) (xy 124.794088 111.90519) (xy 124.843402 111.815488) (xy 124.845164 111.809933) (xy 124.847917 111.804799)
+ (xy 124.877839 111.70693) (xy 124.908788 111.609366) (xy 124.909437 111.603576) (xy 124.911141 111.598004) (xy 124.921483 111.496189)
+ (xy 124.932892 111.39447) (xy 124.932972 111.383078) (xy 124.932993 111.382867) (xy 124.932974 111.38267) (xy 124.933 111.379)
+ (xy 124.933 111.04668) (xy 124.969762 111.002869) (xy 125.095519 110.774119) (xy 125.140612 110.880117) (xy 125.294755 111.106119)
+ (xy 125.490027 111.297706) (xy 125.718923 111.447516) (xy 126.001082 111.549421) (xy 126.215 111.438875) (xy 126.215 110.005)
+ (xy 126.195 110.005) (xy 126.195 109.705) (xy 126.215 109.705) (xy 126.215 108.271125) (xy 126.515 108.271125)
+ (xy 126.515 109.705) (xy 126.535 109.705) (xy 126.535 110.005) (xy 126.515 110.005) (xy 126.515 111.438875)
+ (xy 126.728918 111.549421) (xy 127.011077 111.447516) (xy 127.239973 111.297706) (xy 127.435245 111.106119) (xy 127.589388 110.880117)
+ (xy 127.635297 110.772202) (xy 127.749405 110.986809) (xy 127.920542 111.196644) (xy 128.129176 111.369241) (xy 128.367361 111.498027)
+ (xy 128.626024 111.578097) (xy 128.895314 111.6064) (xy 129.164973 111.581859) (xy 129.424729 111.505409) (xy 129.664689 111.379961)
+ (xy 129.875713 111.210293) (xy 130.049762 111.002869) (xy 130.175519 110.774119) (xy 130.220612 110.880117) (xy 130.374755 111.106119)
+ (xy 130.570027 111.297706) (xy 130.798923 111.447516) (xy 131.081082 111.549421) (xy 131.295 111.438875) (xy 131.295 110.005)
+ (xy 131.275 110.005) (xy 131.275 109.705) (xy 131.295 109.705) (xy 131.295 108.271125) (xy 131.081082 108.160579)
+ (xy 130.798923 108.262484) (xy 130.570027 108.412294) (xy 130.374755 108.603881) (xy 130.220612 108.829883) (xy 130.174703 108.937798)
+ (xy 130.060595 108.723191) (xy 129.889458 108.513356) (xy 129.680824 108.340759) (xy 129.442639 108.211973) (xy 129.183976 108.131903)
+ (xy 128.914686 108.1036) (xy 128.645027 108.128141) (xy 128.385271 108.204591) (xy 128.145311 108.330039) (xy 127.934287 108.499707)
+ (xy 127.760238 108.707131) (xy 127.634481 108.935881) (xy 127.589388 108.829883) (xy 127.435245 108.603881) (xy 127.239973 108.412294)
+ (xy 127.011077 108.262484) (xy 126.728918 108.160579) (xy 126.515 108.271125) (xy 126.215 108.271125) (xy 126.001082 108.160579)
+ (xy 125.718923 108.262484) (xy 125.490027 108.412294) (xy 125.294755 108.603881) (xy 125.140612 108.829883) (xy 125.094703 108.937798)
+ (xy 124.980595 108.723191) (xy 124.933 108.664834) (xy 124.933 108.217385) (xy 125.070462 108.022521) (xy 125.184167 107.767135)
+ (xy 125.246102 107.494527) (xy 125.250561 107.175223) (xy 125.196262 106.900992) (xy 125.089731 106.64253) (xy 124.935028 106.409683)
+ (xy 124.738044 106.211319) (xy 124.506283 106.054994) (xy 124.248571 105.946662) (xy 123.974726 105.89045) (xy 123.695178 105.888498)
+ (xy 123.420575 105.940882) (xy 123.3709 105.960952) (xy 123.3709 103.251189) (xy 123.542714 103.087572) (xy 123.689502 102.879487)
+ (xy 123.793077 102.646853) (xy 123.824754 102.507426) (xy 123.840762 102.594647) (xy 123.934505 102.831414) (xy 124.07245 103.045463)
+ (xy 124.249344 103.228642) (xy 124.458449 103.373974) (xy 124.6918 103.475922) (xy 124.940509 103.530605) (xy 125.195102 103.535937)
+ (xy 125.445882 103.491718) (xy 125.683297 103.399631) (xy 125.898305 103.263183) (xy 126.01642 103.150703) (xy 126.931429 103.150703)
+ (xy 126.994506 103.37176) (xy 127.228583 103.474872) (xy 127.47828 103.530336) (xy 127.733999 103.536021) (xy 127.985914 103.491709)
+ (xy 128.224343 103.399102) (xy 128.275494 103.37176) (xy 128.338571 103.150703) (xy 127.635 102.447132) (xy 126.931429 103.150703)
+ (xy 126.01642 103.150703) (xy 126.082714 103.087572) (xy 126.229502 102.879487) (xy 126.333077 102.646853) (xy 126.364602 102.508094)
+ (xy 126.378291 102.585914) (xy 126.470898 102.824343) (xy 126.49824 102.875494) (xy 126.719297 102.938571) (xy 127.422868 102.235)
+ (xy 126.719297 101.531429) (xy 126.49824 101.594506) (xy 126.395128 101.828583) (xy 126.36508 101.96386) (xy 126.344094 101.857876)
+ (xy 126.247055 101.622441) (xy 126.106134 101.410339) (xy 125.9267 101.229647) (xy 125.715586 101.087249) (xy 125.480835 100.988569)
+ (xy 125.368113 100.965431) (xy 125.445882 100.951718) (xy 125.683297 100.859631) (xy 125.898305 100.723183) (xy 126.082714 100.547572)
+ (xy 126.229502 100.339487) (xy 126.333077 100.106853) (xy 126.364754 99.967426) (xy 126.380762 100.054647) (xy 126.474505 100.291414)
+ (xy 126.61245 100.505463) (xy 126.789344 100.688642) (xy 126.998449 100.833974) (xy 127.2318 100.935922) (xy 127.362094 100.964569)
+ (xy 127.284086 100.978291) (xy 127.045657 101.070898) (xy 126.994506 101.09824) (xy 126.931429 101.319297) (xy 127.635 102.022868)
+ (xy 128.338571 101.319297) (xy 128.275494 101.09824) (xy 128.041417 100.995128) (xy 127.907894 100.965469) (xy 127.985882 100.951718)
+ (xy 128.223297 100.859631) (xy 128.438305 100.723183) (xy 128.622714 100.547572) (xy 128.769502 100.339487) (xy 128.873077 100.106853)
+ (xy 128.904754 99.967426) (xy 128.920762 100.054647) (xy 129.014505 100.291414) (xy 129.15245 100.505463) (xy 129.329344 100.688642)
+ (xy 129.538449 100.833974) (xy 129.7718 100.935922) (xy 129.903357 100.964847) (xy 129.806606 100.983303) (xy 129.570499 101.078697)
+ (xy 129.357418 101.218133) (xy 129.175478 101.396302) (xy 129.03161 101.606416) (xy 128.931293 101.840473) (xy 128.905436 101.962123)
+ (xy 128.891709 101.884086) (xy 128.799102 101.645657) (xy 128.77176 101.594506) (xy 128.550703 101.531429) (xy 127.847132 102.235)
+ (xy 128.550703 102.938571) (xy 128.77176 102.875494) (xy 128.874872 102.641417) (xy 128.9047 102.507132) (xy 128.920762 102.594647)
+ (xy 129.014505 102.831414) (xy 129.15245 103.045463) (xy 129.329344 103.228642) (xy 129.538449 103.373974) (xy 129.7718 103.475922)
+ (xy 130.020509 103.530605) (xy 130.275102 103.535937) (xy 130.525882 103.491718) (xy 130.763297 103.399631) (xy 130.978305 103.263183)
+ (xy 131.162714 103.087572) (xy 131.309502 102.879487) (xy 131.413077 102.646853) (xy 131.444754 102.507426) (xy 131.460762 102.594647)
+ (xy 131.554505 102.831414) (xy 131.69245 103.045463) (xy 131.869344 103.228642) (xy 132.078449 103.373974) (xy 132.3118 103.475922)
+ (xy 132.422738 103.500314) (xy 131.931526 103.991526) (xy 131.866584 104.070587) (xy 131.800774 104.149017) (xy 131.797967 104.154123)
+ (xy 131.794269 104.158625) (xy 131.745912 104.24881) (xy 131.696598 104.338512) (xy 131.694836 104.344067) (xy 131.692083 104.349201)
+ (xy 131.662161 104.44707) (xy 131.631212 104.544634) (xy 131.630563 104.550424) (xy 131.628859 104.555996) (xy 131.618517 104.657811)
+ (xy 131.607108 104.75953) (xy 131.607028 104.770922) (xy 131.607007 104.771133) (xy 131.607026 104.77133) (xy 131.607 104.775)
+ (xy 131.607 105.139929) (xy 131.459781 105.354937) (xy 131.349653 105.611886) (xy 131.29153 105.885332) (xy 131.287627 106.16486)
+ (xy 131.338092 106.439822) (xy 131.441003 106.699746) (xy 131.59244 106.93473) (xy 131.786635 107.135825) (xy 132.016191 107.295371)
+ (xy 132.272365 107.407291) (xy 132.545399 107.467321) (xy 132.824892 107.473175) (xy 133.1002 107.424631) (xy 133.360836 107.323537)
+ (xy 133.596872 107.173744) (xy 133.799317 106.980958) (xy 133.921312 106.808019) (xy 133.889653 106.881886) (xy 133.83153 107.155332)
+ (xy 133.827627 107.43486) (xy 133.878092 107.709822) (xy 133.981003 107.969746) (xy 134.072539 108.111783) (xy 133.994686 108.1036)
+ (xy 133.725027 108.128141) (xy 133.465271 108.204591) (xy 133.225311 108.330039) (xy 133.014287 108.499707) (xy 132.840238 108.707131)
+ (xy 132.714481 108.935881) (xy 132.669388 108.829883) (xy 132.515245 108.603881) (xy 132.319973 108.412294) (xy 132.091077 108.262484)
+ (xy 131.808918 108.160579) (xy 131.595 108.271125) (xy 131.595 109.705) (xy 131.615 109.705) (xy 131.615 110.005)
+ (xy 131.595 110.005) (xy 131.595 111.438875) (xy 131.808918 111.549421) (xy 132.091077 111.447516) (xy 132.319973 111.297706)
+ (xy 132.515245 111.106119) (xy 132.669388 110.880117) (xy 132.715297 110.772202) (xy 132.829405 110.986809) (xy 133.000542 111.196644)
+ (xy 133.209176 111.369241) (xy 133.447361 111.498027) (xy 133.706024 111.578097) (xy 133.975314 111.6064) (xy 134.244973 111.581859)
+ (xy 134.504729 111.505409) (xy 134.744689 111.379961) (xy 134.955713 111.210293) (xy 135.129762 111.002869) (xy 135.255519 110.774119)
+ (xy 135.300612 110.880117) (xy 135.454755 111.106119) (xy 135.650027 111.297706) (xy 135.878923 111.447516) (xy 136.161082 111.549421)
+ (xy 136.375 111.438875) (xy 136.375 110.005) (xy 136.355 110.005) (xy 136.355 109.705) (xy 136.375 109.705)
+ (xy 136.375 108.271125) (xy 136.675 108.271125) (xy 136.675 109.705) (xy 136.695 109.705) (xy 136.695 110.005)
+ (xy 136.675 110.005) (xy 136.675 111.438875) (xy 136.888918 111.549421) (xy 137.171077 111.447516) (xy 137.399973 111.297706)
+ (xy 137.595245 111.106119) (xy 137.749388 110.880117) (xy 137.795297 110.772202) (xy 137.909405 110.986809) (xy 138.080542 111.196644)
+ (xy 138.289176 111.369241) (xy 138.527361 111.498027) (xy 138.786024 111.578097) (xy 139.055314 111.6064) (xy 139.324973 111.581859)
+ (xy 139.584729 111.505409) (xy 139.824689 111.379961) (xy 140.035713 111.210293) (xy 140.209762 111.002869) (xy 140.340208 110.765589)
+ (xy 140.422082 110.507491) (xy 140.452265 110.238405) (xy 140.4524 110.219034) (xy 140.4524 109.490966) (xy 140.425977 109.221485)
+ (xy 140.347715 108.962269) (xy 140.220595 108.723191) (xy 140.049458 108.513356) (xy 139.840824 108.340759) (xy 139.602639 108.211973)
+ (xy 139.343976 108.131903) (xy 139.074686 108.1036) (xy 138.805027 108.128141) (xy 138.545271 108.204591) (xy 138.305311 108.330039)
+ (xy 138.094287 108.499707) (xy 137.920238 108.707131) (xy 137.794481 108.935881) (xy 137.749388 108.829883) (xy 137.595245 108.603881)
+ (xy 137.399973 108.412294) (xy 137.171077 108.262484) (xy 136.888918 108.160579) (xy 136.675 108.271125) (xy 136.375 108.271125)
+ (xy 136.338141 108.252078) (xy 136.339317 108.250958) (xy 136.500462 108.022521) (xy 136.614167 107.767135) (xy 136.676102 107.494527)
+ (xy 136.677563 107.389902) (xy 136.717365 107.407291) (xy 136.990399 107.467321) (xy 137.269892 107.473175) (xy 137.5452 107.424631)
+ (xy 137.805836 107.323537) (xy 138.041872 107.173744) (xy 138.244317 106.980958) (xy 138.405462 106.752521) (xy 138.519167 106.497135)
+ (xy 138.581102 106.224527) (xy 138.585561 105.905223) (xy 138.531262 105.630992) (xy 138.424731 105.37253) (xy 138.270028 105.139683)
+ (xy 138.110161 104.978696) (xy 138.371929 104.716928) (xy 138.419761 104.658696) (xy 138.46821 104.600957) (xy 138.470279 104.597194)
+ (xy 138.473 104.593881) (xy 138.508583 104.527519) (xy 138.544923 104.461417) (xy 138.546222 104.457323) (xy 138.548247 104.453546)
+ (xy 138.570261 104.381541) (xy 138.593071 104.309635) (xy 138.59355 104.305368) (xy 138.594803 104.301268) (xy 138.602418 104.226299)
+ (xy 138.61082 104.151392) (xy 138.610879 104.143007) (xy 138.610895 104.142848) (xy 138.610881 104.1427) (xy 138.6109 104.14)
+ (xy 138.6109 103.251189) (xy 138.782714 103.087572) (xy 138.929502 102.879487) (xy 139.033077 102.646853) (xy 139.064754 102.507426)
+ (xy 139.080762 102.594647) (xy 139.174505 102.831414) (xy 139.31245 103.045463) (xy 139.489344 103.228642) (xy 139.5191 103.249323)
+ (xy 139.5191 104.14) (xy 139.526454 104.215003) (xy 139.533023 104.290086) (xy 139.53422 104.294208) (xy 139.534639 104.298476)
+ (xy 139.556409 104.370583) (xy 139.577448 104.442999) (xy 139.579424 104.446811) (xy 139.580663 104.450915) (xy 139.616029 104.517428)
+ (xy 139.650729 104.584371) (xy 139.653406 104.587725) (xy 139.65542 104.591512) (xy 139.703079 104.649949) (xy 139.735174 104.690153)
+ (xy 139.714781 104.719937) (xy 139.604653 104.976886) (xy 139.54653 105.250332) (xy 139.542627 105.52986) (xy 139.593092 105.804822)
+ (xy 139.696003 106.064746) (xy 139.84744 106.29973) (xy 140.041635 106.500825) (xy 140.271191 106.660371) (xy 140.527365 106.772291)
+ (xy 140.800399 106.832321) (xy 141.079892 106.838175) (xy 141.3552 106.789631) (xy 141.615836 106.688537) (xy 141.851872 106.538744)
+ (xy 142.054317 106.345958) (xy 142.0591 106.339178) (xy 142.0591 119.38) (xy 142.066454 119.455003) (xy 142.073023 119.530086)
+ (xy 142.07422 119.534208) (xy 142.074639 119.538476) (xy 142.096409 119.610583) (xy 142.117448 119.682999) (xy 142.119424 119.686811)
+ (xy 142.120663 119.690915) (xy 142.156029 119.757428) (xy 142.190729 119.824371) (xy 142.193406 119.827725) (xy 142.19542 119.831512)
+ (xy 142.243079 119.889949) (xy 142.290073 119.948816) (xy 142.295955 119.954781) (xy 142.296061 119.954911) (xy 142.296181 119.95501)
+ (xy 142.298072 119.956928) (xy 146.370601 124.029458) (xy 146.22272 124.174273) (xy 146.064781 124.404937) (xy 145.954653 124.661886)
+ (xy 145.902972 124.905024) (xy 143.665163 122.667215) (xy 143.611262 122.394992) (xy 143.504731 122.13653) (xy 143.350028 121.903683)
+ (xy 143.153044 121.705319) (xy 142.921283 121.548994) (xy 142.663571 121.440662) (xy 142.389726 121.38445) (xy 142.110178 121.382498)
+ (xy 141.835575 121.434882) (xy 141.576376 121.539605) (xy 141.342455 121.692679) (xy 141.14272 121.888273) (xy 140.984781 122.118937)
+ (xy 140.874653 122.375886) (xy 140.81653 122.649332) (xy 140.812627 122.92886) (xy 140.863092 123.203822) (xy 140.966003 123.463746)
+ (xy 141.11744 123.69873) (xy 141.311635 123.899825) (xy 141.541191 124.059371) (xy 141.797365 124.171291) (xy 142.070399 124.231321)
+ (xy 142.095907 124.231855) (xy 143.839509 125.975457) (xy 142.656 125.975457) (xy 142.656 131.834543) (xy 145.701097 131.834543)
+ (xy 145.701097 134.52) (xy 118.626544 134.52) (xy 118.626544 131.861) (xy 112.131401 131.861) (xy 112.131401 129.321)
+ (xy 97.4186 129.321) (xy 97.4186 133.2642) (xy 98.543456 133.2642) (xy 98.543456 134.52) (xy 95.3674 134.52)
+ (xy 95.3674 109.855) (xy 97.187097 109.855) (xy 97.187097 113.665) (xy 97.194716 113.760548) (xy 97.244903 113.922607)
+ (xy 97.338252 114.064269) (xy 97.46737 114.174315) (xy 97.622035 114.244034) (xy 97.79 114.267903) (xy 101.6 114.267903)
+ (xy 101.695548 114.260284) (xy 101.857607 114.210097) (xy 101.999269 114.116748) (xy 102.109315 113.98763) (xy 102.179034 113.832965)
+ (xy 102.202903 113.665) (xy 102.202903 109.855) (xy 102.195284 109.759452) (xy 102.145097 109.597393) (xy 102.051748 109.455731)
+ (xy 101.92263 109.345685) (xy 101.767965 109.275966) (xy 101.6 109.252097) (xy 97.79 109.252097) (xy 97.694452 109.259716)
+ (xy 97.532393 109.309903) (xy 97.390731 109.403252) (xy 97.280685 109.53237) (xy 97.210966 109.687035) (xy 97.187097 109.855)
+ (xy 95.3674 109.855) (xy 95.3674 93.340987) (xy 98.945946 93.340987) (xy 99.016762 93.56851) (xy 99.261699 93.677987)
+ (xy 99.523288 93.737576) (xy 99.791476 93.744986) (xy 100.055958 93.699932) (xy 100.306567 93.604147) (xy 100.373238 93.56851)
+ (xy 100.444054 93.340987) (xy 99.695 92.591932) (xy 98.945946 93.340987) (xy 95.3674 93.340987) (xy 95.3674 92.476276)
+ (xy 98.329814 92.476276) (xy 98.374868 92.740758) (xy 98.470653 92.991367) (xy 98.50629 93.058038) (xy 98.733813 93.128854)
+ (xy 99.482868 92.3798) (xy 99.907132 92.3798) (xy 100.656187 93.128854) (xy 100.88371 93.058038) (xy 100.993187 92.813101)
+ (xy 101.052776 92.551512) (xy 101.060186 92.283324) (xy 101.015132 92.018842) (xy 100.919347 91.768233) (xy 100.88371 91.701562)
+ (xy 100.656187 91.630746) (xy 99.907132 92.3798) (xy 99.482868 92.3798) (xy 98.733813 91.630746) (xy 98.50629 91.701562)
+ (xy 98.396813 91.946499) (xy 98.337224 92.208088) (xy 98.329814 92.476276) (xy 95.3674 92.476276) (xy 95.3674 91.418613)
+ (xy 98.945946 91.418613) (xy 99.695 92.167668) (xy 100.444054 91.418613) (xy 100.373238 91.19109) (xy 100.128301 91.081613)
+ (xy 99.866712 91.022024) (xy 99.598524 91.014614) (xy 99.334042 91.059668) (xy 99.083433 91.155453) (xy 99.016762 91.19109)
+ (xy 98.945946 91.418613) (xy 95.3674 91.418613) (xy 95.3674 90.546987) (xy 98.945946 90.546987) (xy 99.016762 90.77451)
+ (xy 99.261699 90.883987) (xy 99.523288 90.943576) (xy 99.791476 90.950986) (xy 100.055958 90.905932) (xy 100.306567 90.810147)
+ (xy 100.373238 90.77451) (xy 100.444054 90.546987) (xy 99.695 89.797932) (xy 98.945946 90.546987) (xy 95.3674 90.546987)
+ (xy 95.3674 89.682276) (xy 98.329814 89.682276) (xy 98.374868 89.946758) (xy 98.470653 90.197367) (xy 98.50629 90.264038)
+ (xy 98.733813 90.334854) (xy 99.482868 89.5858) (xy 99.907132 89.5858) (xy 100.656187 90.334854) (xy 100.88371 90.264038)
+ (xy 100.993187 90.019101) (xy 101.052776 89.757512) (xy 101.060186 89.489324) (xy 101.015132 89.224842) (xy 100.919347 88.974233)
+ (xy 100.88371 88.907562) (xy 100.656187 88.836746) (xy 99.907132 89.5858) (xy 99.482868 89.5858) (xy 98.733813 88.836746)
+ (xy 98.50629 88.907562) (xy 98.396813 89.152499) (xy 98.337224 89.414088) (xy 98.329814 89.682276) (xy 95.3674 89.682276)
+ (xy 95.3674 88.624613) (xy 98.945946 88.624613) (xy 99.695 89.373668) (xy 100.444054 88.624613) (xy 100.373238 88.39709)
+ (xy 100.128301 88.287613) (xy 99.866712 88.228024) (xy 99.598524 88.220614) (xy 99.334042 88.265668) (xy 99.083433 88.361453)
+ (xy 99.016762 88.39709) (xy 98.945946 88.624613) (xy 95.3674 88.624613) (xy 95.3674 87.803787) (xy 98.945946 87.803787)
+ (xy 99.016762 88.03131) (xy 99.261699 88.140787) (xy 99.523288 88.200376) (xy 99.791476 88.207786) (xy 100.055958 88.162732)
+ (xy 100.306567 88.066947) (xy 100.373238 88.03131) (xy 100.444054 87.803787) (xy 99.695 87.054732) (xy 98.945946 87.803787)
+ (xy 95.3674 87.803787) (xy 95.3674 86.939076) (xy 98.329814 86.939076) (xy 98.374868 87.203558) (xy 98.470653 87.454167)
+ (xy 98.50629 87.520838) (xy 98.733813 87.591654) (xy 99.482868 86.8426) (xy 99.907132 86.8426) (xy 100.656187 87.591654)
+ (xy 100.88371 87.520838) (xy 100.993187 87.275901) (xy 101.052776 87.014312) (xy 101.060186 86.746124) (xy 101.015132 86.481642)
+ (xy 100.919347 86.231033) (xy 100.88371 86.164362) (xy 100.656187 86.093546) (xy 99.907132 86.8426) (xy 99.482868 86.8426)
+ (xy 98.733813 86.093546) (xy 98.50629 86.164362) (xy 98.396813 86.409299) (xy 98.337224 86.670888) (xy 98.329814 86.939076)
+ (xy 95.3674 86.939076) (xy 95.3674 85.881413) (xy 98.945946 85.881413) (xy 99.695 86.630468) (xy 100.444054 85.881413)
+ (xy 100.373238 85.65389) (xy 100.128301 85.544413) (xy 99.866712 85.484824) (xy 99.598524 85.477414) (xy 99.334042 85.522468)
+ (xy 99.083433 85.618253) (xy 99.016762 85.65389) (xy 98.945946 85.881413) (xy 95.3674 85.881413) (xy 95.3674 85.060587)
+ (xy 98.945946 85.060587) (xy 99.016762 85.28811) (xy 99.261699 85.397587) (xy 99.523288 85.457176) (xy 99.791476 85.464586)
+ (xy 100.055958 85.419532) (xy 100.306567 85.323747) (xy 100.373238 85.28811) (xy 100.444054 85.060587) (xy 99.695 84.311532)
+ (xy 98.945946 85.060587) (xy 95.3674 85.060587) (xy 95.3674 84.195876) (xy 98.329814 84.195876) (xy 98.374868 84.460358)
+ (xy 98.470653 84.710967) (xy 98.50629 84.777638) (xy 98.733813 84.848454) (xy 99.482868 84.0994) (xy 99.907132 84.0994)
+ (xy 100.656187 84.848454) (xy 100.88371 84.777638) (xy 100.993187 84.532701) (xy 101.052776 84.271112) (xy 101.060186 84.002924)
+ (xy 101.015132 83.738442) (xy 100.919347 83.487833) (xy 100.88371 83.421162) (xy 100.656187 83.350346) (xy 99.907132 84.0994)
+ (xy 99.482868 84.0994) (xy 98.733813 83.350346) (xy 98.50629 83.421162) (xy 98.396813 83.666099) (xy 98.337224 83.927688)
+ (xy 98.329814 84.195876) (xy 95.3674 84.195876) (xy 95.3674 83.138213) (xy 98.945946 83.138213) (xy 99.695 83.887268)
+ (xy 100.444054 83.138213) (xy 100.373238 82.91069) (xy 100.128301 82.801213) (xy 99.866712 82.741624) (xy 99.598524 82.734214)
+ (xy 99.334042 82.779268) (xy 99.083433 82.875053) (xy 99.016762 82.91069) (xy 98.945946 83.138213) (xy 95.3674 83.138213)
+ (xy 95.3674 82.215787) (xy 98.945946 82.215787) (xy 99.016762 82.44331) (xy 99.261699 82.552787) (xy 99.523288 82.612376)
+ (xy 99.791476 82.619786) (xy 100.055958 82.574732) (xy 100.306567 82.478947) (xy 100.373238 82.44331) (xy 100.444054 82.215787)
+ (xy 99.695 81.466732) (xy 98.945946 82.215787) (xy 95.3674 82.215787) (xy 95.3674 81.351076) (xy 98.329814 81.351076)
+ (xy 98.374868 81.615558) (xy 98.470653 81.866167) (xy 98.50629 81.932838) (xy 98.733813 82.003654) (xy 99.482868 81.2546)
+ (xy 99.907132 81.2546) (xy 100.656187 82.003654) (xy 100.88371 81.932838) (xy 100.993187 81.687901) (xy 101.052776 81.426312)
+ (xy 101.060186 81.158124) (xy 101.015132 80.893642) (xy 100.919347 80.643033) (xy 100.88371 80.576362) (xy 100.656187 80.505546)
+ (xy 99.907132 81.2546) (xy 99.482868 81.2546) (xy 98.733813 80.505546) (xy 98.50629 80.576362) (xy 98.396813 80.821299)
+ (xy 98.337224 81.082888) (xy 98.329814 81.351076) (xy 95.3674 81.351076) (xy 95.3674 79.523387) (xy 98.945946 79.523387)
+ (xy 99.016762 79.75091) (xy 99.261699 79.860387) (xy 99.478717 79.909823) (xy 99.334042 79.934468) (xy 99.083433 80.030253)
+ (xy 99.016762 80.06589) (xy 98.945946 80.293413) (xy 99.695 81.042468) (xy 100.444054 80.293413) (xy 100.373238 80.06589)
+ (xy 100.128301 79.956413) (xy 99.911283 79.906977) (xy 100.055958 79.882332) (xy 100.306567 79.786547) (xy 100.373238 79.75091)
+ (xy 100.444054 79.523387) (xy 99.695 78.774332) (xy 98.945946 79.523387) (xy 95.3674 79.523387) (xy 95.3674 78.658676)
+ (xy 98.329814 78.658676) (xy 98.374868 78.923158) (xy 98.470653 79.173767) (xy 98.50629 79.240438) (xy 98.733813 79.311254)
+ (xy 99.482868 78.5622) (xy 99.907132 78.5622) (xy 100.656187 79.311254) (xy 100.88371 79.240438) (xy 100.993187 78.995501)
+ (xy 101.052776 78.733912) (xy 101.060186 78.465724) (xy 101.015132 78.201242) (xy 100.919347 77.950633) (xy 100.88371 77.883962)
+ (xy 100.656187 77.813146) (xy 99.907132 78.5622) (xy 99.482868 78.5622) (xy 98.733813 77.813146) (xy 98.50629 77.883962)
+ (xy 98.396813 78.128899) (xy 98.337224 78.390488) (xy 98.329814 78.658676) (xy 95.3674 78.658676) (xy 95.3674 77.601013)
+ (xy 98.945946 77.601013) (xy 99.695 78.350068) (xy 100.444054 77.601013) (xy 100.373238 77.37349) (xy 100.128301 77.264013)
+ (xy 99.866712 77.204424) (xy 99.598524 77.197014) (xy 99.334042 77.242068) (xy 99.083433 77.337853) (xy 99.016762 77.37349)
+ (xy 98.945946 77.601013) (xy 95.3674 77.601013) (xy 95.3674 76.780187) (xy 98.945946 76.780187) (xy 99.016762 77.00771)
+ (xy 99.261699 77.117187) (xy 99.523288 77.176776) (xy 99.791476 77.184186) (xy 100.055958 77.139132) (xy 100.306567 77.043347)
+ (xy 100.373238 77.00771) (xy 100.444054 76.780187) (xy 99.695 76.031132) (xy 98.945946 76.780187) (xy 95.3674 76.780187)
+ (xy 95.3674 75.915476) (xy 98.329814 75.915476) (xy 98.374868 76.179958) (xy 98.470653 76.430567) (xy 98.50629 76.497238)
+ (xy 98.733813 76.568054) (xy 99.482868 75.819) (xy 99.907132 75.819) (xy 100.656187 76.568054) (xy 100.88371 76.497238)
+ (xy 100.993187 76.252301) (xy 101.052776 75.990712) (xy 101.060186 75.722524) (xy 101.015132 75.458042) (xy 100.919347 75.207433)
+ (xy 100.88371 75.140762) (xy 100.656187 75.069946) (xy 99.907132 75.819) (xy 99.482868 75.819) (xy 98.733813 75.069946)
+ (xy 98.50629 75.140762) (xy 98.396813 75.385699) (xy 98.337224 75.647288) (xy 98.329814 75.915476) (xy 95.3674 75.915476)
+ (xy 95.3674 74.857813) (xy 98.945946 74.857813) (xy 99.695 75.606868) (xy 100.444054 74.857813) (xy 100.373238 74.63029)
+ (xy 100.128301 74.520813) (xy 99.866712 74.461224) (xy 99.598524 74.453814) (xy 99.334042 74.498868) (xy 99.083433 74.594653)
+ (xy 99.016762 74.63029) (xy 98.945946 74.857813) (xy 95.3674 74.857813) (xy 95.3674 73.986187) (xy 98.945946 73.986187)
+ (xy 99.016762 74.21371) (xy 99.261699 74.323187) (xy 99.523288 74.382776) (xy 99.791476 74.390186) (xy 100.055958 74.345132)
+ (xy 100.306567 74.249347) (xy 100.373238 74.21371) (xy 100.444054 73.986187) (xy 99.695 73.237132) (xy 98.945946 73.986187)
+ (xy 95.3674 73.986187) (xy 95.3674 73.121476) (xy 98.329814 73.121476) (xy 98.374868 73.385958) (xy 98.470653 73.636567)
+ (xy 98.50629 73.703238) (xy 98.733813 73.774054) (xy 99.482868 73.025) (xy 99.907132 73.025) (xy 100.656187 73.774054)
+ (xy 100.88371 73.703238) (xy 100.993187 73.458301) (xy 101.052776 73.196712) (xy 101.060186 72.928524) (xy 101.015132 72.664042)
+ (xy 100.919347 72.413433) (xy 100.88371 72.346762) (xy 100.656187 72.275946) (xy 99.907132 73.025) (xy 99.482868 73.025)
+ (xy 98.733813 72.275946) (xy 98.50629 72.346762) (xy 98.396813 72.591699) (xy 98.337224 72.853288) (xy 98.329814 73.121476)
+ (xy 95.3674 73.121476) (xy 95.3674 72.063813) (xy 98.945946 72.063813) (xy 99.695 72.812868) (xy 100.444054 72.063813)
+ (xy 100.373238 71.83629) (xy 100.128301 71.726813) (xy 99.866712 71.667224) (xy 99.598524 71.659814) (xy 99.334042 71.704868)
+ (xy 99.083433 71.800653) (xy 99.016762 71.83629) (xy 98.945946 72.063813) (xy 95.3674 72.063813) (xy 95.3674 64.980627)
+ (xy 97.186707 64.980627) (xy 97.275388 65.463813) (xy 97.456231 65.920571) (xy 97.722349 66.333504) (xy 98.063604 66.686884)
+ (xy 98.466998 66.96725) (xy 98.917167 67.163924) (xy 99.396963 67.269414) (xy 99.888111 67.279702) (xy 100.371904 67.194397)
+ (xy 100.829913 67.016747) (xy 101.244694 66.753518) (xy 101.600448 66.414739) (xy 101.883624 66.013311) (xy 102.083436 65.564527)
+ (xy 102.192273 65.085479) (xy 102.200108 64.524372) (xy 102.104689 64.042472) (xy 101.917486 63.588283) (xy 101.645629 63.179106)
+ (xy 101.299473 62.830525) (xy 100.892204 62.555818) (xy 100.439333 62.365449) (xy 99.958111 62.266668) (xy 99.466867 62.263238)
+ (xy 98.984312 62.355291) (xy 98.528828 62.539318) (xy 98.117762 62.808312) (xy 97.766773 63.152026) (xy 97.48923 63.557368)
+ (xy 97.295704 64.008898) (xy 97.193566 64.489419) (xy 97.186707 64.980627) (xy 95.3674 64.980627) (xy 95.3674 60.414022)
+ (xy 107.030047 60.414022) (xy 107.077292 60.715667) (xy 107.182478 61.002299) (xy 107.242645 61.114868) (xy 107.489349 61.208519)
+ (xy 108.372868 60.325) (xy 107.489349 59.441481) (xy 107.242645 59.535132) (xy 107.114343 59.81219) (xy 107.042557 60.108955)
+ (xy 107.030047 60.414022) (xy 95.3674 60.414022) (xy 95.3674 52.794022) (xy 107.030047 52.794022) (xy 107.077292 53.095667)
+ (xy 107.182478 53.382299) (xy 107.242645 53.494868) (xy 107.489349 53.588519) (xy 108.372868 52.705) (xy 107.489349 51.821481)
+ (xy 107.242645 51.915132) (xy 107.114343 52.19219) (xy 107.042557 52.488955) (xy 107.030047 52.794022) (xy 95.3674 52.794022)
+ (xy 95.3674 51.609349) (xy 107.701481 51.609349) (xy 108.585 52.492868) (xy 108.599143 52.478726) (xy 108.811275 52.690858)
+ (xy 108.797132 52.705) (xy 108.811275 52.719143) (xy 108.599143 52.931275) (xy 108.585 52.917132) (xy 107.701481 53.800651)
+ (xy 107.795132 54.047355) (xy 108.07219 54.175657) (xy 108.368955 54.247443) (xy 108.674022 54.259953) (xy 108.975667 54.212708)
+ (xy 109.262299 54.107522) (xy 109.374868 54.047355) (xy 109.468518 53.800653) (xy 109.579909 53.912044) (xy 109.606126 53.885827)
+ (xy 109.629903 53.962607) (xy 109.723252 54.104269) (xy 109.85237 54.214315) (xy 110.007035 54.284034) (xy 110.175 54.307903)
+ (xy 112.075 54.307903) (xy 112.170548 54.300284) (xy 112.332607 54.250097) (xy 112.474269 54.156748) (xy 112.584315 54.02763)
+ (xy 112.654034 53.872965) (xy 112.677903 53.705) (xy 112.677903 51.705) (xy 112.670284 51.609452) (xy 112.620097 51.447393)
+ (xy 112.526748 51.305731) (xy 112.39763 51.195685) (xy 112.242965 51.125966) (xy 112.075 51.102097) (xy 111.976759 51.102097)
+ (xy 112.097957 50.9809) (xy 114.597044 50.9809) (xy 114.959221 51.343078) (xy 114.810961 51.342043) (xy 114.54859 51.392092)
+ (xy 114.300938 51.492151) (xy 114.077436 51.638406) (xy 113.886599 51.825287) (xy 113.735695 52.045677) (xy 113.630473 52.29118)
+ (xy 113.574939 52.552445) (xy 113.57121 52.819521) (xy 113.619427 53.082235) (xy 113.717754 53.33058) (xy 113.862445 53.555097)
+ (xy 114.028791 53.727352) (xy 110.548072 57.208072) (xy 110.500264 57.266274) (xy 110.45179 57.324043) (xy 110.449721 57.327806)
+ (xy 110.447 57.331119) (xy 110.411407 57.3975) (xy 110.375077 57.463583) (xy 110.373779 57.467674) (xy 110.371753 57.471453)
+ (xy 110.349735 57.543473) (xy 110.326929 57.615365) (xy 110.32645 57.619632) (xy 110.325197 57.623732) (xy 110.317582 57.698701)
+ (xy 110.30918 57.773608) (xy 110.309121 57.781993) (xy 110.309105 57.782152) (xy 110.309119 57.7823) (xy 110.3091 57.785)
+ (xy 110.3091 58.722097) (xy 110.175 58.722097) (xy 110.079452 58.729716) (xy 109.917393 58.779903) (xy 109.775731 58.873252)
+ (xy 109.665685 59.00237) (xy 109.603119 59.141166) (xy 109.579909 59.117956) (xy 109.468518 59.229347) (xy 109.374868 58.982645)
+ (xy 109.09781 58.854343) (xy 108.801045 58.782557) (xy 108.495978 58.770047) (xy 108.194333 58.817292) (xy 107.907701 58.922478)
+ (xy 107.795132 58.982645) (xy 107.701481 59.229349) (xy 108.585 60.112868) (xy 108.599143 60.098726) (xy 108.811275 60.310858)
+ (xy 108.797132 60.325) (xy 108.811275 60.339143) (xy 108.599143 60.551275) (xy 108.585 60.537132) (xy 107.701481 61.420651)
+ (xy 107.795132 61.667355) (xy 108.07219 61.795657) (xy 108.368955 61.867443) (xy 108.674022 61.879953) (xy 108.975667 61.832708)
+ (xy 109.262299 61.727522) (xy 109.374868 61.667355) (xy 109.468518 61.420653) (xy 109.579909 61.532044) (xy 109.606126 61.505827)
+ (xy 109.629903 61.582607) (xy 109.723252 61.724269) (xy 109.85237 61.834315) (xy 110.007035 61.904034) (xy 110.175 61.927903)
+ (xy 112.075 61.927903) (xy 112.170548 61.920284) (xy 112.332607 61.870097) (xy 112.474269 61.776748) (xy 112.584315 61.64763)
+ (xy 112.654034 61.492965) (xy 112.677903 61.325) (xy 112.677903 60.805905) (xy 119.885 60.805905) (xy 119.885 61.065)
+ (xy 120.035 61.215) (xy 121.135 61.215) (xy 121.135 60.415) (xy 121.435 60.415) (xy 121.435 61.215)
+ (xy 122.535 61.215) (xy 122.685 61.065) (xy 122.685 60.805905) (xy 122.661942 60.689986) (xy 122.616713 60.580793)
+ (xy 122.55105 60.482522) (xy 122.467478 60.398949) (xy 122.369206 60.333287) (xy 122.260013 60.288058) (xy 122.144095 60.265)
+ (xy 121.585 60.265) (xy 121.435 60.415) (xy 121.135 60.415) (xy 120.985 60.265) (xy 120.425905 60.265)
+ (xy 120.309987 60.288058) (xy 120.200794 60.333287) (xy 120.102522 60.398949) (xy 120.01895 60.482522) (xy 119.953287 60.580793)
+ (xy 119.908058 60.689986) (xy 119.885 60.805905) (xy 112.677903 60.805905) (xy 112.677903 59.325) (xy 112.670284 59.229452)
+ (xy 112.620097 59.067393) (xy 112.526748 58.925731) (xy 112.39763 58.815685) (xy 112.242965 58.745966) (xy 112.075 58.722097)
+ (xy 111.9409 58.722097) (xy 111.9409 58.122956) (xy 115.511929 54.551928) (xy 115.559761 54.493696) (xy 115.60821 54.435957)
+ (xy 115.610279 54.432194) (xy 115.613 54.428881) (xy 115.648583 54.362519) (xy 115.684923 54.296417) (xy 115.686222 54.292323)
+ (xy 115.688247 54.288546) (xy 115.710261 54.216541) (xy 115.733071 54.144635) (xy 115.73355 54.140368) (xy 115.734803 54.136268)
+ (xy 115.742418 54.061299) (xy 115.75082 53.986392) (xy 115.750879 53.978007) (xy 115.750895 53.977848) (xy 115.750881 53.9777)
+ (xy 115.7509 53.975) (xy 115.7509 53.800401) (xy 115.777588 53.783464) (xy 115.971016 53.599265) (xy 116.124982 53.381004)
+ (xy 116.205826 53.199425) (xy 116.257754 53.33058) (xy 116.402445 53.555097) (xy 116.58799 53.747234) (xy 116.80732 53.899672)
+ (xy 117.052082 54.006606) (xy 117.312954 54.063963) (xy 117.579997 54.069556) (xy 117.843041 54.023175) (xy 118.092066 53.926584)
+ (xy 118.317588 53.783464) (xy 118.511016 53.599265) (xy 118.664982 53.381004) (xy 118.773622 53.136994) (xy 118.832798 52.87653)
+ (xy 118.837058 52.571449) (xy 118.785178 52.309434) (xy 118.683393 52.062486) (xy 118.535581 51.840011) (xy 118.347372 51.650483)
+ (xy 118.125935 51.501122) (xy 117.879703 51.397616) (xy 117.618057 51.343907) (xy 117.350961 51.342043) (xy 117.279526 51.35567)
+ (xy 116.415043 50.491187) (xy 116.725946 50.491187) (xy 116.796762 50.71871) (xy 117.041699 50.828187) (xy 117.303288 50.887776)
+ (xy 117.571476 50.895186) (xy 117.835958 50.850132) (xy 118.086567 50.754347) (xy 118.153238 50.71871) (xy 118.224054 50.491187)
+ (xy 117.475 49.742132) (xy 116.725946 50.491187) (xy 116.415043 50.491187) (xy 115.550332 49.626476) (xy 116.109814 49.626476)
+ (xy 116.154868 49.890958) (xy 116.250653 50.141567) (xy 116.28629 50.208238) (xy 116.513813 50.279054) (xy 117.262868 49.53)
+ (xy 116.513813 48.780946) (xy 116.28629 48.851762) (xy 116.176813 49.096699) (xy 116.117224 49.358288) (xy 116.109814 49.626476)
+ (xy 115.550332 49.626476) (xy 115.511928 49.588072) (xy 115.453726 49.540264) (xy 115.395957 49.49179) (xy 115.392194 49.489721)
+ (xy 115.388881 49.487) (xy 115.3225 49.451407) (xy 115.256417 49.415077) (xy 115.252326 49.413779) (xy 115.248547 49.411753)
+ (xy 115.176527 49.389735) (xy 115.104635 49.366929) (xy 115.100368 49.36645) (xy 115.096268 49.365197) (xy 115.021299 49.357582)
+ (xy 114.946392 49.34918) (xy 114.938007 49.349121) (xy 114.937848 49.349105) (xy 114.9377 49.349119) (xy 114.935 49.3491)
+ (xy 111.76 49.3491) (xy 111.684993 49.356455) (xy 111.609915 49.363023) (xy 111.605794 49.36422) (xy 111.601524 49.364639)
+ (xy 111.529405 49.386413) (xy 111.457001 49.407448) (xy 111.453189 49.409424) (xy 111.449085 49.410663) (xy 111.382612 49.446008)
+ (xy 111.315629 49.480728) (xy 111.312272 49.483408) (xy 111.308488 49.48542) (xy 111.250079 49.533057) (xy 111.191184 49.580073)
+ (xy 111.185214 49.585959) (xy 111.185089 49.586061) (xy 111.184993 49.586177) (xy 111.183072 49.588071) (xy 110.548072 50.223072)
+ (xy 110.500264 50.281274) (xy 110.45179 50.339043) (xy 110.449721 50.342806) (xy 110.447 50.346119) (xy 110.411407 50.4125)
+ (xy 110.375077 50.478583) (xy 110.373779 50.482674) (xy 110.371753 50.486453) (xy 110.349735 50.558473) (xy 110.326929 50.630365)
+ (xy 110.32645 50.634632) (xy 110.325197 50.638732) (xy 110.317582 50.713701) (xy 110.30918 50.788608) (xy 110.309121 50.796993)
+ (xy 110.309105 50.797152) (xy 110.309119 50.7973) (xy 110.3091 50.8) (xy 110.3091 51.102097) (xy 110.175 51.102097)
+ (xy 110.079452 51.109716) (xy 109.917393 51.159903) (xy 109.775731 51.253252) (xy 109.665685 51.38237) (xy 109.603119 51.521166)
+ (xy 109.579909 51.497956) (xy 109.468518 51.609347) (xy 109.374868 51.362645) (xy 109.09781 51.234343) (xy 108.801045 51.162557)
+ (xy 108.495978 51.150047) (xy 108.194333 51.197292) (xy 107.907701 51.302478) (xy 107.795132 51.362645) (xy 107.701481 51.609349)
+ (xy 95.3674 51.609349) (xy 95.3674 48.568813) (xy 116.725946 48.568813) (xy 117.475 49.317868) (xy 118.224054 48.568813)
+ (xy 118.153238 48.34129) (xy 117.908301 48.231813) (xy 117.646712 48.172224) (xy 117.378524 48.164814) (xy 117.114042 48.209868)
+ (xy 116.863433 48.305653) (xy 116.796762 48.34129) (xy 116.725946 48.568813) (xy 95.3674 48.568813) (xy 95.3674 36.9474)
+ (xy 195.4626 36.9474)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 173.841526 47.138474) (xy 173.920587 47.203416) (xy 173.999017 47.269226) (xy 174.004123 47.272033) (xy 174.008625 47.275731)
+ (xy 174.09881 47.324088) (xy 174.188512 47.373402) (xy 174.194067 47.375164) (xy 174.199201 47.377917) (xy 174.29707 47.407839)
+ (xy 174.394634 47.438788) (xy 174.400424 47.439437) (xy 174.405996 47.441141) (xy 174.507811 47.451483) (xy 174.60953 47.462892)
+ (xy 174.620922 47.462972) (xy 174.621133 47.462993) (xy 174.62133 47.462974) (xy 174.625 47.463) (xy 190.676051 47.463)
+ (xy 190.986526 47.773475) (xy 190.986532 47.77348) (xy 193.202 49.988949) (xy 193.202 93.168947) (xy 193.163393 93.180903)
+ (xy 193.021731 93.274252) (xy 192.911685 93.40337) (xy 192.841966 93.558035) (xy 192.818097 93.726) (xy 192.818097 95.504)
+ (xy 192.825716 95.599548) (xy 192.875903 95.761607) (xy 192.969252 95.903269) (xy 193.09837 96.013315) (xy 193.253035 96.083034)
+ (xy 193.421 96.106903) (xy 195.199 96.106903) (xy 195.294548 96.099284) (xy 195.456607 96.049097) (xy 195.4626 96.045148)
+ (xy 195.4626 106.362431) (xy 195.263717 106.162154) (xy 195.021631 105.998865) (xy 194.75244 105.885708) (xy 194.466396 105.826991)
+ (xy 194.174395 105.824953) (xy 193.887559 105.87967) (xy 193.616814 105.989058) (xy 193.372472 106.148951) (xy 193.16384 106.353258)
+ (xy 192.998866 106.594198) (xy 192.883831 106.862593) (xy 192.823119 107.14822) (xy 192.819042 107.440199) (xy 192.871755 107.72741)
+ (xy 192.979251 107.998912) (xy 193.137434 108.244364) (xy 193.34028 108.454417) (xy 193.580062 108.62107) (xy 193.837 108.733324)
+ (xy 193.837 111.245211) (xy 193.745748 111.106731) (xy 193.61663 110.996685) (xy 193.461965 110.926966) (xy 193.294 110.903097)
+ (xy 191.516 110.903097) (xy 191.420452 110.910716) (xy 191.258393 110.960903) (xy 191.116731 111.054252) (xy 191.006685 111.18337)
+ (xy 190.936966 111.338035) (xy 190.913097 111.506) (xy 190.913097 113.284) (xy 190.920716 113.379548) (xy 190.970903 113.541607)
+ (xy 191.064252 113.683269) (xy 191.19337 113.793315) (xy 191.297 113.840029) (xy 191.297 120.318051) (xy 190.168052 121.447)
+ (xy 188.890187 121.447) (xy 188.886097 121.433793) (xy 188.792748 121.292131) (xy 188.66363 121.182085) (xy 188.508965 121.112366)
+ (xy 188.341 121.088497) (xy 186.309 121.088497) (xy 186.213452 121.096116) (xy 186.051393 121.146303) (xy 185.909731 121.239652)
+ (xy 185.799685 121.36877) (xy 185.729966 121.523435) (xy 185.706097 121.6914) (xy 185.706097 123.4186) (xy 185.713716 123.514148)
+ (xy 185.763903 123.676207) (xy 185.857252 123.817869) (xy 185.98637 123.927915) (xy 186.141035 123.997634) (xy 186.197789 124.005699)
+ (xy 186.180786 124.018526) (xy 185.989834 124.232703) (xy 185.844335 124.480018) (xy 185.758097 124.719095) (xy 185.867592 124.945)
+ (xy 187.175 124.945) (xy 187.175 124.925) (xy 187.475 124.925) (xy 187.475 124.945) (xy 188.782408 124.945)
+ (xy 188.891903 124.719095) (xy 188.805665 124.480018) (xy 188.660166 124.232703) (xy 188.469214 124.018526) (xy 188.455345 124.008063)
+ (xy 188.598607 123.963697) (xy 188.740269 123.870348) (xy 188.850315 123.74123) (xy 188.885579 123.663) (xy 190.627 123.663)
+ (xy 190.728874 123.653011) (xy 190.830819 123.644092) (xy 190.836414 123.642466) (xy 190.842212 123.641898) (xy 190.940161 123.612326)
+ (xy 191.038475 123.583763) (xy 191.04365 123.58108) (xy 191.049226 123.579397) (xy 191.139593 123.531348) (xy 191.23046 123.484247)
+ (xy 191.235012 123.480613) (xy 191.240158 123.477877) (xy 191.319478 123.413185) (xy 191.399459 123.349337) (xy 191.407566 123.341342)
+ (xy 191.407735 123.341204) (xy 191.407864 123.341048) (xy 191.410474 123.338474) (xy 193.188475 121.560474) (xy 193.253441 121.481383)
+ (xy 193.319226 121.402983) (xy 193.322033 121.397877) (xy 193.325731 121.393375) (xy 193.374088 121.30319) (xy 193.423402 121.213488)
+ (xy 193.425164 121.207933) (xy 193.427917 121.202799) (xy 193.457839 121.10493) (xy 193.488788 121.007366) (xy 193.489437 121.001576)
+ (xy 193.491141 120.996004) (xy 193.501483 120.894189) (xy 193.512892 120.79247) (xy 193.512972 120.781078) (xy 193.512993 120.780867)
+ (xy 193.512974 120.78067) (xy 193.513 120.777) (xy 193.513 113.841053) (xy 193.551607 113.829097) (xy 193.693269 113.735748)
+ (xy 193.803315 113.60663) (xy 193.837 113.531903) (xy 193.837 124.509051) (xy 191.819052 126.527) (xy 188.430846 126.527)
+ (xy 188.312105 126.427364) (xy 188.198006 126.364638) (xy 188.240147 126.344283) (xy 188.469214 126.171474) (xy 188.660166 125.957297)
+ (xy 188.805665 125.709982) (xy 188.891903 125.470905) (xy 188.782408 125.245) (xy 187.475 125.245) (xy 187.475 125.265)
+ (xy 187.175 125.265) (xy 187.175 125.245) (xy 185.867592 125.245) (xy 185.758097 125.470905) (xy 185.844335 125.709982)
+ (xy 185.989834 125.957297) (xy 186.180786 126.171474) (xy 186.409853 126.344283) (xy 186.451638 126.364466) (xy 186.354837 126.415936)
+ (xy 186.133478 126.596472) (xy 185.951402 126.816565) (xy 185.815542 127.067832) (xy 185.731075 127.340702) (xy 185.701217 127.624782)
+ (xy 185.727105 127.909251) (xy 185.807755 128.183274) (xy 185.940093 128.436414) (xy 186.119079 128.659027) (xy 186.337895 128.842636)
+ (xy 186.588208 128.980246) (xy 186.860481 129.066617) (xy 187.144346 129.098457) (xy 187.164781 129.0986) (xy 187.485219 129.0986)
+ (xy 187.7695 129.070726) (xy 188.042954 128.988166) (xy 188.295163 128.854064) (xy 188.431341 128.743) (xy 192.278 128.743)
+ (xy 192.379874 128.733011) (xy 192.481819 128.724092) (xy 192.487414 128.722466) (xy 192.493212 128.721898) (xy 192.591161 128.692326)
+ (xy 192.689475 128.663763) (xy 192.69465 128.66108) (xy 192.700226 128.659397) (xy 192.790593 128.611348) (xy 192.88146 128.564247)
+ (xy 192.886012 128.560613) (xy 192.891158 128.557877) (xy 192.970478 128.493185) (xy 193.050459 128.429337) (xy 193.058566 128.421342)
+ (xy 193.058735 128.421204) (xy 193.058864 128.421048) (xy 193.061474 128.418474) (xy 195.4626 126.017349) (xy 195.4626 134.52)
+ (xy 159.860903 134.52) (xy 159.860903 133.739543) (xy 162.4742 133.739543) (xy 162.4742 127.880457) (xy 159.5659 127.880457)
+ (xy 159.5659 127.535611) (xy 159.631872 127.493744) (xy 159.834317 127.300958) (xy 159.995462 127.072521) (xy 160.109167 126.817135)
+ (xy 160.171102 126.544527) (xy 160.175561 126.225223) (xy 160.121262 125.950992) (xy 160.014731 125.69253) (xy 159.860028 125.459683)
+ (xy 159.663044 125.261319) (xy 159.431283 125.104994) (xy 159.173571 124.996662) (xy 158.899726 124.94045) (xy 158.620178 124.938498)
+ (xy 158.345575 124.990882) (xy 158.086376 125.095605) (xy 158.0292 125.13302) (xy 158.0292 124.143028) (xy 154.760885 124.143028)
+ (xy 153.4699 122.852044) (xy 153.4699 122.680199) (xy 154.084042 122.680199) (xy 154.136755 122.96741) (xy 154.244251 123.238912)
+ (xy 154.402434 123.484364) (xy 154.60528 123.694417) (xy 154.845062 123.86107) (xy 155.112647 123.977976) (xy 155.397843 124.04068)
+ (xy 155.689787 124.046795) (xy 155.977359 123.996089) (xy 156.249605 123.890491) (xy 156.496156 123.734026) (xy 156.70762 123.532651)
+ (xy 156.875943 123.294038) (xy 156.994713 123.027276) (xy 157.059407 122.742524) (xy 157.064064 122.408996) (xy 157.007346 122.122549)
+ (xy 156.896071 121.852574) (xy 156.734476 121.609355) (xy 156.612244 121.486267) (xy 156.639014 121.480942) (xy 156.748207 121.435713)
+ (xy 156.846478 121.37005) (xy 156.930051 121.286478) (xy 156.995713 121.188206) (xy 157.040942 121.079013) (xy 157.064 120.963095)
+ (xy 157.064 120.315) (xy 156.914 120.165) (xy 155.725 120.165) (xy 155.725 120.185) (xy 155.425 120.185)
+ (xy 155.425 120.165) (xy 154.236 120.165) (xy 154.086 120.315) (xy 154.086 120.963095) (xy 154.109058 121.079013)
+ (xy 154.154287 121.188206) (xy 154.219949 121.286478) (xy 154.303522 121.37005) (xy 154.401793 121.435713) (xy 154.510986 121.480942)
+ (xy 154.538039 121.486323) (xy 154.42884 121.593258) (xy 154.263866 121.834198) (xy 154.148831 122.102593) (xy 154.088119 122.38822)
+ (xy 154.084042 122.680199) (xy 153.4699 122.680199) (xy 153.4699 120.904) (xy 153.462546 120.828997) (xy 153.455977 120.753914)
+ (xy 153.455577 120.752539) (xy 153.455448 120.751116) (xy 153.45464 120.748371) (xy 153.454361 120.745524) (xy 153.432595 120.67343)
+ (xy 153.411552 120.601) (xy 153.410892 120.599726) (xy 153.410489 120.598358) (xy 153.409164 120.595823) (xy 153.408337 120.593085)
+ (xy 153.372992 120.526611) (xy 153.338271 120.459628) (xy 153.337378 120.45851) (xy 153.336716 120.457243) (xy 153.334922 120.455011)
+ (xy 153.33358 120.452488) (xy 153.285958 120.394098) (xy 153.238927 120.335183) (xy 153.237029 120.333258) (xy 153.236938 120.333145)
+ (xy 153.236819 120.333045) (xy 153.23304 120.329213) (xy 153.232939 120.329089) (xy 153.232824 120.328994) (xy 153.230928 120.327071)
+ (xy 150.504056 117.600199) (xy 154.084042 117.600199) (xy 154.136755 117.88741) (xy 154.244251 118.158912) (xy 154.402434 118.404364)
+ (xy 154.53714 118.543856) (xy 154.510986 118.549058) (xy 154.401793 118.594287) (xy 154.303522 118.65995) (xy 154.219949 118.743522)
+ (xy 154.154287 118.841794) (xy 154.109058 118.950987) (xy 154.086 119.066905) (xy 154.086 119.715) (xy 154.236 119.865)
+ (xy 155.425 119.865) (xy 155.425 119.845) (xy 155.725 119.845) (xy 155.725 119.865) (xy 156.914 119.865)
+ (xy 157.064 119.715) (xy 157.064 119.066905) (xy 157.040942 118.950987) (xy 156.995713 118.841794) (xy 156.930051 118.743522)
+ (xy 156.846478 118.65995) (xy 156.748207 118.594287) (xy 156.639014 118.549058) (xy 156.612021 118.543689) (xy 156.70762 118.452651)
+ (xy 156.875943 118.214038) (xy 156.994713 117.947276) (xy 157.059407 117.662524) (xy 157.064064 117.328996) (xy 157.007346 117.042549)
+ (xy 156.896071 116.772574) (xy 156.734476 116.529355) (xy 156.683 116.477518) (xy 156.683 115.57) (xy 167.037097 115.57)
+ (xy 167.037097 124.46) (xy 167.044716 124.555548) (xy 167.094903 124.717607) (xy 167.188252 124.859269) (xy 167.31737 124.969315)
+ (xy 167.472035 125.039034) (xy 167.64 125.062903) (xy 176.53 125.062903) (xy 176.625548 125.055284) (xy 176.787607 125.005097)
+ (xy 176.929269 124.911748) (xy 177.039315 124.78263) (xy 177.109034 124.627965) (xy 177.132903 124.46) (xy 177.132903 115.57)
+ (xy 177.125284 115.474452) (xy 177.075097 115.312393) (xy 176.981748 115.170731) (xy 176.85263 115.060685) (xy 176.697965 114.990966)
+ (xy 176.53 114.967097) (xy 167.64 114.967097) (xy 167.544452 114.974716) (xy 167.382393 115.024903) (xy 167.240731 115.118252)
+ (xy 167.130685 115.24737) (xy 167.060966 115.402035) (xy 167.037097 115.57) (xy 156.683 115.57) (xy 156.683 114.123948)
+ (xy 157.303948 113.503) (xy 178.704941 113.503) (xy 178.73528 113.534417) (xy 178.975062 113.70107) (xy 179.242647 113.817976)
+ (xy 179.527843 113.88068) (xy 179.819787 113.886795) (xy 180.107359 113.836089) (xy 180.379605 113.730491) (xy 180.626156 113.574026)
+ (xy 180.83762 113.372651) (xy 181.005943 113.134038) (xy 181.124713 112.867276) (xy 181.189407 112.582524) (xy 181.194064 112.248996)
+ (xy 181.137346 111.962549) (xy 181.026071 111.692574) (xy 180.864476 111.449355) (xy 180.658717 111.242154) (xy 180.416631 111.078865)
+ (xy 180.14744 110.965708) (xy 179.861396 110.906991) (xy 179.569395 110.904953) (xy 179.282559 110.95967) (xy 179.011814 111.069058)
+ (xy 178.767472 111.228951) (xy 178.708194 111.287) (xy 164.938 111.287) (xy 164.938 107.818244) (xy 165.037815 107.70113)
+ (xy 165.107534 107.546465) (xy 165.131403 107.3785) (xy 165.131403 106.408918) (xy 166.580579 106.408918) (xy 166.682484 106.691077)
+ (xy 166.832294 106.919973) (xy 167.023881 107.115245) (xy 167.249883 107.269388) (xy 167.501614 107.376478) (xy 167.7694 107.4324)
+ (xy 168.125 107.4324) (xy 168.125 106.195) (xy 168.425 106.195) (xy 168.425 107.4324) (xy 168.7806 107.4324)
+ (xy 169.048386 107.376478) (xy 169.300117 107.269388) (xy 169.526119 107.115245) (xy 169.717706 106.919973) (xy 169.867516 106.691077)
+ (xy 169.969421 106.408918) (xy 169.858875 106.195) (xy 168.425 106.195) (xy 168.125 106.195) (xy 166.691125 106.195)
+ (xy 166.580579 106.408918) (xy 165.131403 106.408918) (xy 165.131403 105.9815) (xy 165.123784 105.885952) (xy 165.073597 105.723893)
+ (xy 164.980248 105.582231) (xy 164.85113 105.472185) (xy 164.696465 105.402466) (xy 164.5285 105.378597) (xy 163.1315 105.378597)
+ (xy 163.035952 105.386216) (xy 162.873893 105.436403) (xy 162.732231 105.529752) (xy 162.622185 105.65887) (xy 162.552466 105.813535)
+ (xy 162.528597 105.9815) (xy 162.528597 107.3785) (xy 162.536216 107.474048) (xy 162.586403 107.636107) (xy 162.679752 107.777769)
+ (xy 162.722 107.813777) (xy 162.722 111.287) (xy 156.845 111.287) (xy 156.743126 111.296989) (xy 156.641181 111.305908)
+ (xy 156.635586 111.307533) (xy 156.629788 111.308102) (xy 156.531793 111.337688) (xy 156.433525 111.366238) (xy 156.428354 111.368918)
+ (xy 156.422774 111.370603) (xy 156.332392 111.41866) (xy 156.241539 111.465753) (xy 156.236985 111.469388) (xy 156.231842 111.472123)
+ (xy 156.152544 111.536797) (xy 156.072541 111.600663) (xy 156.064434 111.608658) (xy 156.064265 111.608796) (xy 156.064136 111.608952)
+ (xy 156.061526 111.611526) (xy 154.791526 112.881526) (xy 154.726584 112.960587) (xy 154.660774 113.039017) (xy 154.657967 113.044123)
+ (xy 154.654269 113.048625) (xy 154.605912 113.13881) (xy 154.556598 113.228512) (xy 154.554836 113.234067) (xy 154.552083 113.239201)
+ (xy 154.522161 113.33707) (xy 154.491212 113.434634) (xy 154.490563 113.440424) (xy 154.488859 113.445996) (xy 154.478517 113.547811)
+ (xy 154.467108 113.64953) (xy 154.467028 113.660922) (xy 154.467007 113.661133) (xy 154.467026 113.66133) (xy 154.467 113.665)
+ (xy 154.467 116.475889) (xy 154.42884 116.513258) (xy 154.263866 116.754198) (xy 154.148831 117.022593) (xy 154.088119 117.30822)
+ (xy 154.084042 117.600199) (xy 150.504056 117.600199) (xy 145.861634 112.957778) (xy 146.046531 107.595703) (xy 147.886429 107.595703)
+ (xy 147.949506 107.81676) (xy 148.183583 107.919872) (xy 148.43328 107.975336) (xy 148.688999 107.981021) (xy 148.940914 107.936709)
+ (xy 149.179343 107.844102) (xy 149.230494 107.81676) (xy 149.293571 107.595703) (xy 148.59 106.892132) (xy 147.886429 107.595703)
+ (xy 146.046531 107.595703) (xy 146.074694 106.778999) (xy 147.288979 106.778999) (xy 147.333291 107.030914) (xy 147.425898 107.269343)
+ (xy 147.45324 107.320494) (xy 147.674297 107.383571) (xy 148.377868 106.68) (xy 148.802132 106.68) (xy 149.505703 107.383571)
+ (xy 149.72676 107.320494) (xy 149.829872 107.086417) (xy 149.885336 106.83672) (xy 149.891021 106.581001) (xy 149.846709 106.329086)
+ (xy 149.754102 106.090657) (xy 149.72676 106.039506) (xy 149.505703 105.976429) (xy 148.802132 106.68) (xy 148.377868 106.68)
+ (xy 147.674297 105.976429) (xy 147.45324 106.039506) (xy 147.350128 106.273583) (xy 147.294664 106.52328) (xy 147.288979 106.778999)
+ (xy 146.074694 106.778999) (xy 146.109683 105.764297) (xy 147.886429 105.764297) (xy 148.59 106.467868) (xy 149.293571 105.764297)
+ (xy 149.230494 105.54324) (xy 148.996417 105.440128) (xy 148.74672 105.384664) (xy 148.491001 105.378979) (xy 148.239086 105.423291)
+ (xy 148.000657 105.515898) (xy 147.949506 105.54324) (xy 147.886429 105.764297) (xy 146.109683 105.764297) (xy 146.195429 103.2777)
+ (xy 146.218305 103.263183) (xy 146.402714 103.087572) (xy 146.549502 102.879487) (xy 146.653077 102.646853) (xy 146.684754 102.507426)
+ (xy 146.700762 102.594647) (xy 146.794505 102.831414) (xy 146.93245 103.045463) (xy 147.109344 103.228642) (xy 147.318449 103.373974)
+ (xy 147.5518 103.475922) (xy 147.800509 103.530605) (xy 148.055102 103.535937) (xy 148.305882 103.491718) (xy 148.543297 103.399631)
+ (xy 148.758305 103.263183) (xy 148.942714 103.087572) (xy 148.968583 103.0509) (xy 161.925 103.0509) (xy 162.000003 103.043546)
+ (xy 162.075086 103.036977) (xy 162.079208 103.03578) (xy 162.083476 103.035361) (xy 162.155583 103.013591) (xy 162.227999 102.992552)
+ (xy 162.231811 102.990576) (xy 162.235915 102.989337) (xy 162.302428 102.953971) (xy 162.369371 102.919271) (xy 162.372725 102.916594)
+ (xy 162.376512 102.91458) (xy 162.434949 102.866921) (xy 162.493816 102.819927) (xy 162.499781 102.814045) (xy 162.499911 102.813939)
+ (xy 162.50001 102.813819) (xy 162.501928 102.811928) (xy 163.532957 101.7809) (xy 166.795234 101.7809) (xy 166.919707 101.935713)
+ (xy 167.127131 102.109762) (xy 167.356618 102.235924) (xy 167.143191 102.349405) (xy 166.933356 102.520542) (xy 166.760759 102.729176)
+ (xy 166.631973 102.967361) (xy 166.551903 103.226024) (xy 166.5236 103.495314) (xy 166.548141 103.764973) (xy 166.624591 104.024729)
+ (xy 166.750039 104.264689) (xy 166.919707 104.475713) (xy 167.127131 104.649762) (xy 167.355881 104.775519) (xy 167.249883 104.820612)
+ (xy 167.023881 104.974755) (xy 166.832294 105.170027) (xy 166.682484 105.398923) (xy 166.580579 105.681082) (xy 166.691125 105.895)
+ (xy 168.125 105.895) (xy 168.125 105.875) (xy 168.425 105.875) (xy 168.425 105.895) (xy 169.858875 105.895)
+ (xy 169.969421 105.681082) (xy 169.867516 105.398923) (xy 169.717706 105.170027) (xy 169.526119 104.974755) (xy 169.300117 104.820612)
+ (xy 169.192202 104.774703) (xy 169.406809 104.660595) (xy 169.616644 104.489458) (xy 169.789241 104.280824) (xy 169.918027 104.042639)
+ (xy 169.998097 103.783976) (xy 170.0264 103.514686) (xy 170.001859 103.245027) (xy 169.925409 102.985271) (xy 169.799961 102.745311)
+ (xy 169.630293 102.534287) (xy 169.422869 102.360238) (xy 169.193382 102.234076) (xy 169.406809 102.120595) (xy 169.616644 101.949458)
+ (xy 169.789241 101.740824) (xy 169.918027 101.502639) (xy 169.998097 101.243976) (xy 170.0264 100.974686) (xy 170.001859 100.705027)
+ (xy 169.944725 100.5109) (xy 172.382044 100.5109) (xy 173.413071 101.541928) (xy 173.471299 101.589757) (xy 173.529043 101.63821)
+ (xy 173.532806 101.640279) (xy 173.536119 101.643) (xy 173.6025 101.678593) (xy 173.668583 101.714923) (xy 173.672674 101.716221)
+ (xy 173.676453 101.718247) (xy 173.748485 101.740269) (xy 173.820365 101.763071) (xy 173.824631 101.763549) (xy 173.828731 101.764803)
+ (xy 173.903706 101.772419) (xy 173.978608 101.78082) (xy 173.986993 101.780879) (xy 173.987152 101.780895) (xy 173.9873 101.780881)
+ (xy 173.99 101.7809) (xy 174.415234 101.7809) (xy 174.539707 101.935713) (xy 174.747131 102.109762) (xy 174.976618 102.235924)
+ (xy 174.763191 102.349405) (xy 174.553356 102.520542) (xy 174.380759 102.729176) (xy 174.251973 102.967361) (xy 174.171903 103.226024)
+ (xy 174.1436 103.495314) (xy 174.168141 103.764973) (xy 174.244591 104.024729) (xy 174.370039 104.264689) (xy 174.539707 104.475713)
+ (xy 174.747131 104.649762) (xy 174.976618 104.775924) (xy 174.763191 104.889405) (xy 174.553356 105.060542) (xy 174.380759 105.269176)
+ (xy 174.251973 105.507361) (xy 174.171903 105.766024) (xy 174.1436 106.035314) (xy 174.168141 106.304973) (xy 174.244591 106.564729)
+ (xy 174.370039 106.804689) (xy 174.539707 107.015713) (xy 174.747131 107.189762) (xy 174.984411 107.320208) (xy 175.242509 107.402082)
+ (xy 175.511595 107.432265) (xy 175.530966 107.4324) (xy 176.259034 107.4324) (xy 176.528515 107.405977) (xy 176.787731 107.327715)
+ (xy 177.026809 107.200595) (xy 177.236644 107.029458) (xy 177.376087 106.8609) (xy 182.035234 106.8609) (xy 182.159707 107.015713)
+ (xy 182.367131 107.189762) (xy 182.604411 107.320208) (xy 182.862509 107.402082) (xy 183.131595 107.432265) (xy 183.150966 107.4324)
+ (xy 183.879034 107.4324) (xy 184.148515 107.405977) (xy 184.407731 107.327715) (xy 184.646809 107.200595) (xy 184.856644 107.029458)
+ (xy 185.029241 106.820824) (xy 185.158027 106.582639) (xy 185.238097 106.323976) (xy 185.2664 106.054686) (xy 185.241859 105.785027)
+ (xy 185.165409 105.525271) (xy 185.039961 105.285311) (xy 184.870293 105.074287) (xy 184.662869 104.900238) (xy 184.433382 104.774076)
+ (xy 184.646809 104.660595) (xy 184.856644 104.489458) (xy 185.029241 104.280824) (xy 185.158027 104.042639) (xy 185.238097 103.783976)
+ (xy 185.2664 103.514686) (xy 185.241859 103.245027) (xy 185.165409 102.985271) (xy 185.039961 102.745311) (xy 184.870293 102.534287)
+ (xy 184.662869 102.360238) (xy 184.433382 102.234076) (xy 184.646809 102.120595) (xy 184.856644 101.949458) (xy 185.029241 101.740824)
+ (xy 185.158027 101.502639) (xy 185.238097 101.243976) (xy 185.2664 100.974686) (xy 185.241859 100.705027) (xy 185.165409 100.445271)
+ (xy 185.039961 100.205311) (xy 184.870293 99.994287) (xy 184.662869 99.820238) (xy 184.433382 99.694076) (xy 184.646809 99.580595)
+ (xy 184.856644 99.409458) (xy 185.029241 99.200824) (xy 185.158027 98.962639) (xy 185.238097 98.703976) (xy 185.2664 98.434686)
+ (xy 185.241859 98.165027) (xy 185.165409 97.905271) (xy 185.039961 97.665311) (xy 184.870293 97.454287) (xy 184.848146 97.435703)
+ (xy 187.891429 97.435703) (xy 187.954506 97.65676) (xy 188.188583 97.759872) (xy 188.43828 97.815336) (xy 188.693999 97.821021)
+ (xy 188.945914 97.776709) (xy 189.184343 97.684102) (xy 189.235494 97.65676) (xy 189.298571 97.435703) (xy 188.595 96.732132)
+ (xy 187.891429 97.435703) (xy 184.848146 97.435703) (xy 184.662869 97.280238) (xy 184.433382 97.154076) (xy 184.646809 97.040595)
+ (xy 184.856644 96.869458) (xy 185.029241 96.660824) (xy 185.051855 96.618999) (xy 187.293979 96.618999) (xy 187.338291 96.870914)
+ (xy 187.430898 97.109343) (xy 187.45824 97.160494) (xy 187.679297 97.223571) (xy 188.382868 96.52) (xy 188.807132 96.52)
+ (xy 189.510703 97.223571) (xy 189.73176 97.160494) (xy 189.834872 96.926417) (xy 189.890336 96.67672) (xy 189.896021 96.421001)
+ (xy 189.851709 96.169086) (xy 189.759102 95.930657) (xy 189.73176 95.879506) (xy 189.510703 95.816429) (xy 188.807132 96.52)
+ (xy 188.382868 96.52) (xy 187.679297 95.816429) (xy 187.45824 95.879506) (xy 187.355128 96.113583) (xy 187.299664 96.36328)
+ (xy 187.293979 96.618999) (xy 185.051855 96.618999) (xy 185.158027 96.422639) (xy 185.238097 96.163976) (xy 185.2664 95.894686)
+ (xy 185.241859 95.625027) (xy 185.235758 95.604297) (xy 187.891429 95.604297) (xy 188.595 96.307868) (xy 189.298571 95.604297)
+ (xy 189.235494 95.38324) (xy 189.001417 95.280128) (xy 188.75172 95.224664) (xy 188.496001 95.218979) (xy 188.244086 95.263291)
+ (xy 188.005657 95.355898) (xy 187.954506 95.38324) (xy 187.891429 95.604297) (xy 185.235758 95.604297) (xy 185.165409 95.365271)
+ (xy 185.039961 95.125311) (xy 184.870293 94.914287) (xy 184.662869 94.740238) (xy 184.433382 94.614076) (xy 184.646809 94.500595)
+ (xy 184.856644 94.329458) (xy 185.029241 94.120824) (xy 185.158027 93.882639) (xy 185.238097 93.623976) (xy 185.2664 93.354686)
+ (xy 185.241859 93.085027) (xy 185.165409 92.825271) (xy 185.039961 92.585311) (xy 184.870293 92.374287) (xy 184.662869 92.200238)
+ (xy 184.433382 92.074076) (xy 184.646809 91.960595) (xy 184.856644 91.789458) (xy 185.029241 91.580824) (xy 185.158027 91.342639)
+ (xy 185.238097 91.083976) (xy 185.2664 90.814686) (xy 185.241859 90.545027) (xy 185.165409 90.285271) (xy 185.039961 90.045311)
+ (xy 184.870293 89.834287) (xy 184.662869 89.660238) (xy 184.433382 89.534076) (xy 184.646809 89.420595) (xy 184.856644 89.249458)
+ (xy 185.029241 89.040824) (xy 185.158027 88.802639) (xy 185.238097 88.543976) (xy 185.2664 88.274686) (xy 185.241859 88.005027)
+ (xy 185.165409 87.745271) (xy 185.039961 87.505311) (xy 184.870293 87.294287) (xy 184.662869 87.120238) (xy 184.433382 86.994076)
+ (xy 184.646809 86.880595) (xy 184.856644 86.709458) (xy 185.029241 86.500824) (xy 185.158027 86.262639) (xy 185.238097 86.003976)
+ (xy 185.2664 85.734686) (xy 185.241859 85.465027) (xy 185.165409 85.205271) (xy 185.039961 84.965311) (xy 184.870293 84.754287)
+ (xy 184.662869 84.580238) (xy 184.433382 84.454076) (xy 184.646809 84.340595) (xy 184.856644 84.169458) (xy 185.029241 83.960824)
+ (xy 185.158027 83.722639) (xy 185.238097 83.463976) (xy 185.2664 83.194686) (xy 185.241859 82.925027) (xy 185.165409 82.665271)
+ (xy 185.039961 82.425311) (xy 184.870293 82.214287) (xy 184.662869 82.040238) (xy 184.433382 81.914076) (xy 184.646809 81.800595)
+ (xy 184.856644 81.629458) (xy 185.029241 81.420824) (xy 185.158027 81.182639) (xy 185.238097 80.923976) (xy 185.2664 80.654686)
+ (xy 185.241859 80.385027) (xy 185.165409 80.125271) (xy 185.039961 79.885311) (xy 184.870293 79.674287) (xy 184.662869 79.500238)
+ (xy 184.433382 79.374076) (xy 184.646809 79.260595) (xy 184.856644 79.089458) (xy 185.029241 78.880824) (xy 185.158027 78.642639)
+ (xy 185.238097 78.383976) (xy 185.2664 78.114686) (xy 185.241859 77.845027) (xy 185.165409 77.585271) (xy 185.039961 77.345311)
+ (xy 184.870293 77.134287) (xy 184.662869 76.960238) (xy 184.433382 76.834076) (xy 184.646809 76.720595) (xy 184.856644 76.549458)
+ (xy 185.029241 76.340824) (xy 185.158027 76.102639) (xy 185.238097 75.843976) (xy 185.2664 75.574686) (xy 185.241859 75.305027)
+ (xy 185.165409 75.045271) (xy 185.039961 74.805311) (xy 184.870293 74.594287) (xy 184.662869 74.420238) (xy 184.433382 74.294076)
+ (xy 184.646809 74.180595) (xy 184.705166 74.133) (xy 187.487 74.133) (xy 187.487 80.141756) (xy 187.387185 80.25887)
+ (xy 187.317466 80.413535) (xy 187.293597 80.5815) (xy 187.293597 81.9785) (xy 187.301216 82.074048) (xy 187.351403 82.236107)
+ (xy 187.444752 82.377769) (xy 187.57387 82.487815) (xy 187.728535 82.557534) (xy 187.8965 82.581403) (xy 189.2935 82.581403)
+ (xy 189.389048 82.573784) (xy 189.551107 82.523597) (xy 189.692769 82.430248) (xy 189.802815 82.30113) (xy 189.872534 82.146465)
+ (xy 189.896403 81.9785) (xy 189.896403 80.5815) (xy 189.888784 80.485952) (xy 189.838597 80.323893) (xy 189.745248 80.182231)
+ (xy 189.703 80.146223) (xy 189.703 73.66) (xy 189.69302 73.558217) (xy 189.684093 73.456182) (xy 189.682466 73.450582)
+ (xy 189.681898 73.444788) (xy 189.652334 73.346868) (xy 189.623763 73.248525) (xy 189.62108 73.24335) (xy 189.619397 73.237774)
+ (xy 189.571348 73.147407) (xy 189.524247 73.05654) (xy 189.520613 73.051988) (xy 189.517877 73.046842) (xy 189.453185 72.967522)
+ (xy 189.389337 72.887541) (xy 189.381338 72.879429) (xy 189.381204 72.879265) (xy 189.381052 72.879139) (xy 189.378475 72.876526)
+ (xy 188.743474 72.241526) (xy 188.664413 72.176584) (xy 188.585983 72.110774) (xy 188.580877 72.107967) (xy 188.576375 72.104269)
+ (xy 188.48619 72.055912) (xy 188.396488 72.006598) (xy 188.390933 72.004836) (xy 188.385799 72.002083) (xy 188.28793 71.972161)
+ (xy 188.190366 71.941212) (xy 188.184576 71.940563) (xy 188.179004 71.938859) (xy 188.077189 71.928517) (xy 187.97547 71.917108)
+ (xy 187.964078 71.917028) (xy 187.963867 71.917007) (xy 187.96367 71.917026) (xy 187.96 71.917) (xy 184.70668 71.917)
+ (xy 184.662869 71.880238) (xy 184.425589 71.749792) (xy 184.167491 71.667918) (xy 183.898405 71.637735) (xy 183.879034 71.6376)
+ (xy 183.150966 71.6376) (xy 182.881485 71.664023) (xy 182.622269 71.742285) (xy 182.383191 71.869405) (xy 182.324834 71.917)
+ (xy 179.289 71.917) (xy 179.289 69.85) (xy 179.267898 69.634788) (xy 179.205397 69.427774) (xy 179.132903 69.291432)
+ (xy 179.132903 69.05) (xy 179.125284 68.954452) (xy 179.075097 68.792393) (xy 178.981748 68.650731) (xy 178.85263 68.540685)
+ (xy 178.697965 68.470966) (xy 178.53 68.447097) (xy 177.53 68.447097) (xy 177.434452 68.454716) (xy 177.272393 68.504903)
+ (xy 177.130731 68.598252) (xy 177.020685 68.72737) (xy 176.950966 68.882035) (xy 176.927097 69.05) (xy 176.927097 70.65)
+ (xy 176.934716 70.745548) (xy 176.984903 70.907607) (xy 177.073 71.041299) (xy 177.073 71.905521) (xy 177.042869 71.880238)
+ (xy 176.805589 71.749792) (xy 176.547491 71.667918) (xy 176.278405 71.637735) (xy 176.259034 71.6376) (xy 175.530966 71.6376)
+ (xy 175.261485 71.664023) (xy 175.002269 71.742285) (xy 174.763191 71.869405) (xy 174.704834 71.917) (xy 173.813949 71.917)
+ (xy 172.046949 70.15) (xy 173.93 70.15) (xy 173.93 70.709095) (xy 173.953058 70.825013) (xy 173.998287 70.934206)
+ (xy 174.063949 71.032478) (xy 174.147522 71.11605) (xy 174.245793 71.181713) (xy 174.354986 71.226942) (xy 174.470905 71.25)
+ (xy 174.73 71.25) (xy 174.88 71.1) (xy 174.88 70) (xy 175.18 70) (xy 175.18 71.1)
+ (xy 175.33 71.25) (xy 175.589095 71.25) (xy 175.705014 71.226942) (xy 175.814207 71.181713) (xy 175.912478 71.11605)
+ (xy 175.996051 71.032478) (xy 176.061713 70.934206) (xy 176.106942 70.825013) (xy 176.13 70.709095) (xy 176.13 70.15)
+ (xy 175.98 70) (xy 175.18 70) (xy 174.88 70) (xy 174.08 70) (xy 173.93 70.15)
+ (xy 172.046949 70.15) (xy 171.923 70.026052) (xy 171.923 68.990905) (xy 173.93 68.990905) (xy 173.93 69.55)
+ (xy 174.08 69.7) (xy 174.88 69.7) (xy 174.88 68.6) (xy 175.18 68.6) (xy 175.18 69.7)
+ (xy 175.98 69.7) (xy 176.13 69.55) (xy 176.13 68.990905) (xy 176.106942 68.874987) (xy 176.061713 68.765794)
+ (xy 175.996051 68.667522) (xy 175.912478 68.58395) (xy 175.814207 68.518287) (xy 175.705014 68.473058) (xy 175.589095 68.45)
+ (xy 175.33 68.45) (xy 175.18 68.6) (xy 174.88 68.6) (xy 174.73 68.45) (xy 174.470905 68.45)
+ (xy 174.354986 68.473058) (xy 174.245793 68.518287) (xy 174.147522 68.58395) (xy 174.063949 68.667522) (xy 173.998287 68.765794)
+ (xy 173.953058 68.874987) (xy 173.93 68.990905) (xy 171.923 68.990905) (xy 171.923 67.813244) (xy 172.022815 67.69613)
+ (xy 172.092534 67.541465) (xy 172.116403 67.3735) (xy 172.116403 65.9765) (xy 172.108784 65.880952) (xy 172.058597 65.718893)
+ (xy 171.965248 65.577231) (xy 171.923 65.541223) (xy 171.923 65.459078) (xy 186.213054 65.459078) (xy 186.345401 65.738498)
+ (xy 186.677051 65.898797) (xy 187.033601 65.991315) (xy 187.401349 66.012496) (xy 187.766163 65.961525) (xy 188.114024 65.840363)
+ (xy 188.304599 65.738498) (xy 188.436946 65.459078) (xy 187.325 64.347132) (xy 186.213054 65.459078) (xy 171.923 65.459078)
+ (xy 171.923 64.77) (xy 171.91302 64.668217) (xy 171.904093 64.566182) (xy 171.902466 64.560582) (xy 171.901898 64.554788)
+ (xy 171.872334 64.456868) (xy 171.843763 64.358525) (xy 171.84108 64.35335) (xy 171.839397 64.347774) (xy 171.791348 64.257407)
+ (xy 171.767474 64.211349) (xy 185.447504 64.211349) (xy 185.498475 64.576163) (xy 185.619637 64.924024) (xy 185.721502 65.114599)
+ (xy 186.000922 65.246946) (xy 187.112868 64.135) (xy 187.537132 64.135) (xy 188.649078 65.246946) (xy 188.928498 65.114599)
+ (xy 189.088797 64.782949) (xy 189.181315 64.426399) (xy 189.202496 64.058651) (xy 189.151525 63.693837) (xy 189.030363 63.345976)
+ (xy 188.928498 63.155401) (xy 188.649078 63.023054) (xy 187.537132 64.135) (xy 187.112868 64.135) (xy 186.000922 63.023054)
+ (xy 185.721502 63.155401) (xy 185.561203 63.487051) (xy 185.468685 63.843601) (xy 185.447504 64.211349) (xy 171.767474 64.211349)
+ (xy 171.744247 64.16654) (xy 171.740613 64.161988) (xy 171.737877 64.156842) (xy 171.673185 64.077522) (xy 171.609337 63.997541)
+ (xy 171.601338 63.989429) (xy 171.601204 63.989265) (xy 171.601052 63.989139) (xy 171.598475 63.986526) (xy 170.963474 63.351526)
+ (xy 170.884413 63.286584) (xy 170.805983 63.220774) (xy 170.800877 63.217967) (xy 170.796375 63.214269) (xy 170.70619 63.165912)
+ (xy 170.616488 63.116598) (xy 170.610933 63.114836) (xy 170.605799 63.112083) (xy 170.50793 63.082161) (xy 170.410366 63.051212)
+ (xy 170.404576 63.050563) (xy 170.399004 63.048859) (xy 170.297189 63.038517) (xy 170.19547 63.027108) (xy 170.184078 63.027028)
+ (xy 170.183867 63.027007) (xy 170.18367 63.027026) (xy 170.18 63.027) (xy 151.28808 63.027) (xy 151.145935 62.931122)
+ (xy 150.899703 62.827616) (xy 150.818378 62.810922) (xy 186.213054 62.810922) (xy 187.325 63.922868) (xy 188.436946 62.810922)
+ (xy 188.304599 62.531502) (xy 187.972949 62.371203) (xy 187.616399 62.278685) (xy 187.248651 62.257504) (xy 186.883837 62.308475)
+ (xy 186.535976 62.429637) (xy 186.345401 62.531502) (xy 186.213054 62.810922) (xy 150.818378 62.810922) (xy 150.638057 62.773907)
+ (xy 150.370961 62.772043) (xy 150.10859 62.822092) (xy 149.860938 62.922151) (xy 149.700711 63.027) (xy 148.74808 63.027)
+ (xy 148.605935 62.931122) (xy 148.359703 62.827616) (xy 148.098057 62.773907) (xy 147.830961 62.772043) (xy 147.56859 62.822092)
+ (xy 147.320938 62.922151) (xy 147.097436 63.068406) (xy 146.906599 63.255287) (xy 146.755695 63.475677) (xy 146.650473 63.72118)
+ (xy 146.594939 63.982445) (xy 146.59121 64.249521) (xy 146.639427 64.512235) (xy 146.737754 64.76058) (xy 146.882445 64.985097)
+ (xy 147.06799 65.177234) (xy 147.28732 65.329672) (xy 147.532082 65.436606) (xy 147.792954 65.493963) (xy 148.059997 65.499556)
+ (xy 148.323041 65.453175) (xy 148.572066 65.356584) (xy 148.751047 65.243) (xy 149.702615 65.243) (xy 149.82732 65.329672)
+ (xy 150.072082 65.436606) (xy 150.332954 65.493963) (xy 150.599997 65.499556) (xy 150.863041 65.453175) (xy 151.112066 65.356584)
+ (xy 151.291047 65.243) (xy 152.230392 65.243) (xy 152.169405 65.261413) (xy 152.097001 65.282448) (xy 152.093189 65.284424)
+ (xy 152.089085 65.285663) (xy 152.022612 65.321008) (xy 151.955629 65.355728) (xy 151.952272 65.358408) (xy 151.948488 65.36042)
+ (xy 151.890079 65.408057) (xy 151.831184 65.455073) (xy 151.825214 65.460959) (xy 151.825089 65.461061) (xy 151.824993 65.461177)
+ (xy 151.823072 65.463071) (xy 151.427044 65.8591) (xy 144.78 65.8591) (xy 144.704993 65.866455) (xy 144.629915 65.873023)
+ (xy 144.625794 65.87422) (xy 144.621524 65.874639) (xy 144.549405 65.896413) (xy 144.477001 65.917448) (xy 144.473189 65.919424)
+ (xy 144.469085 65.920663) (xy 144.402612 65.956008) (xy 144.335629 65.990728) (xy 144.332272 65.993408) (xy 144.328488 65.99542)
+ (xy 144.270079 66.043057) (xy 144.211184 66.090073) (xy 144.205214 66.095959) (xy 144.205089 66.096061) (xy 144.204993 66.096177)
+ (xy 144.203072 66.098071) (xy 143.6909 66.610244) (xy 143.6909 66.04) (xy 143.683545 65.964993) (xy 143.676977 65.889915)
+ (xy 143.67578 65.885794) (xy 143.675361 65.881524) (xy 143.653587 65.809405) (xy 143.632552 65.737001) (xy 143.630576 65.733189)
+ (xy 143.629337 65.729085) (xy 143.593992 65.662612) (xy 143.559272 65.595629) (xy 143.556592 65.592272) (xy 143.55458 65.588488)
+ (xy 143.506943 65.530079) (xy 143.459927 65.471184) (xy 143.454041 65.465214) (xy 143.453939 65.465089) (xy 143.453823 65.464993)
+ (xy 143.451929 65.463072) (xy 142.988332 64.999476) (xy 142.965977 64.771485) (xy 142.887715 64.512269) (xy 142.760595 64.273191)
+ (xy 142.589458 64.063356) (xy 142.380824 63.890759) (xy 142.142639 63.761973) (xy 141.883976 63.681903) (xy 141.614686 63.6536)
+ (xy 141.345027 63.678141) (xy 141.1509 63.735275) (xy 141.1509 61.932956) (xy 142.181928 60.901929) (xy 142.229757 60.843701)
+ (xy 142.27821 60.785957) (xy 142.280279 60.782194) (xy 142.283 60.778881) (xy 142.318593 60.7125) (xy 142.354923 60.646417)
+ (xy 142.356221 60.642326) (xy 142.358247 60.638547) (xy 142.380269 60.566515) (xy 142.403071 60.494635) (xy 142.403549 60.490369)
+ (xy 142.404803 60.486269) (xy 142.412419 60.411294) (xy 142.42082 60.336392) (xy 142.420879 60.328007) (xy 142.420895 60.327848)
+ (xy 142.420881 60.3277) (xy 142.4209 60.325) (xy 142.4209 59.264766) (xy 142.575713 59.140293) (xy 142.749762 58.932869)
+ (xy 142.880208 58.695589) (xy 142.962082 58.437491) (xy 142.992265 58.168405) (xy 142.9924 58.149034) (xy 142.9924 57.839078)
+ (xy 163.353054 57.839078) (xy 163.485401 58.118498) (xy 163.817051 58.278797) (xy 164.173601 58.371315) (xy 164.541349 58.392496)
+ (xy 164.906163 58.341525) (xy 165.254024 58.220363) (xy 165.444599 58.118498) (xy 165.576946 57.839078) (xy 177.323054 57.839078)
+ (xy 177.455401 58.118498) (xy 177.787051 58.278797) (xy 178.143601 58.371315) (xy 178.511349 58.392496) (xy 178.876163 58.341525)
+ (xy 179.224024 58.220363) (xy 179.414599 58.118498) (xy 179.546946 57.839078) (xy 179.492868 57.785) (xy 185.452097 57.785)
+ (xy 185.452097 60.325) (xy 185.459716 60.420548) (xy 185.509903 60.582607) (xy 185.603252 60.724269) (xy 185.73237 60.834315)
+ (xy 185.887035 60.904034) (xy 186.055 60.927903) (xy 188.595 60.927903) (xy 188.690548 60.920284) (xy 188.852607 60.870097)
+ (xy 188.994269 60.776748) (xy 189.104315 60.64763) (xy 189.174034 60.492965) (xy 189.197903 60.325) (xy 189.197903 57.785)
+ (xy 189.190284 57.689452) (xy 189.140097 57.527393) (xy 189.046748 57.385731) (xy 188.91763 57.275685) (xy 188.762965 57.205966)
+ (xy 188.595 57.182097) (xy 188.1409 57.182097) (xy 188.1409 53.165401) (xy 188.167588 53.148464) (xy 188.361016 52.964265)
+ (xy 188.514982 52.746004) (xy 188.623622 52.501994) (xy 188.682798 52.24153) (xy 188.687058 51.936449) (xy 188.635178 51.674434)
+ (xy 188.533393 51.427486) (xy 188.385581 51.205011) (xy 188.197372 51.015483) (xy 187.975935 50.866122) (xy 187.729703 50.762616)
+ (xy 187.468057 50.708907) (xy 187.200961 50.707043) (xy 186.93859 50.757092) (xy 186.690938 50.857151) (xy 186.467436 51.003406)
+ (xy 186.276599 51.190287) (xy 186.125695 51.410677) (xy 186.020473 51.65618) (xy 185.964939 51.917445) (xy 185.96121 52.184521)
+ (xy 186.009427 52.447235) (xy 186.107754 52.69558) (xy 186.252445 52.920097) (xy 186.43799 53.112234) (xy 186.5091 53.161657)
+ (xy 186.5091 57.182097) (xy 186.055 57.182097) (xy 185.959452 57.189716) (xy 185.797393 57.239903) (xy 185.655731 57.333252)
+ (xy 185.545685 57.46237) (xy 185.475966 57.617035) (xy 185.452097 57.785) (xy 179.492868 57.785) (xy 178.435 56.727132)
+ (xy 177.323054 57.839078) (xy 165.576946 57.839078) (xy 164.465 56.727132) (xy 163.353054 57.839078) (xy 142.9924 57.839078)
+ (xy 142.9924 57.420966) (xy 142.965977 57.151485) (xy 142.887715 56.892269) (xy 142.760595 56.653191) (xy 142.710158 56.591349)
+ (xy 162.587504 56.591349) (xy 162.638475 56.956163) (xy 162.759637 57.304024) (xy 162.861502 57.494599) (xy 163.140922 57.626946)
+ (xy 164.252868 56.515) (xy 164.677132 56.515) (xy 165.789078 57.626946) (xy 166.068498 57.494599) (xy 166.228797 57.162949)
+ (xy 166.321315 56.806399) (xy 166.333701 56.591349) (xy 176.557504 56.591349) (xy 176.608475 56.956163) (xy 176.729637 57.304024)
+ (xy 176.831502 57.494599) (xy 177.110922 57.626946) (xy 178.222868 56.515) (xy 178.647132 56.515) (xy 179.759078 57.626946)
+ (xy 180.038498 57.494599) (xy 180.198797 57.162949) (xy 180.291315 56.806399) (xy 180.312496 56.438651) (xy 180.261525 56.073837)
+ (xy 180.140363 55.725976) (xy 180.038498 55.535401) (xy 179.759078 55.403054) (xy 178.647132 56.515) (xy 178.222868 56.515)
+ (xy 177.110922 55.403054) (xy 176.831502 55.535401) (xy 176.671203 55.867051) (xy 176.578685 56.223601) (xy 176.557504 56.591349)
+ (xy 166.333701 56.591349) (xy 166.342496 56.438651) (xy 166.291525 56.073837) (xy 166.170363 55.725976) (xy 166.068498 55.535401)
+ (xy 165.789078 55.403054) (xy 164.677132 56.515) (xy 164.252868 56.515) (xy 163.140922 55.403054) (xy 162.861502 55.535401)
+ (xy 162.701203 55.867051) (xy 162.608685 56.223601) (xy 162.587504 56.591349) (xy 142.710158 56.591349) (xy 142.589458 56.443356)
+ (xy 142.380824 56.270759) (xy 142.142639 56.141973) (xy 141.883976 56.061903) (xy 141.614686 56.0336) (xy 141.345027 56.058141)
+ (xy 141.085271 56.134591) (xy 140.845311 56.260039) (xy 140.634287 56.429707) (xy 140.460238 56.637131) (xy 140.334076 56.866618)
+ (xy 140.220595 56.653191) (xy 140.049458 56.443356) (xy 139.840824 56.270759) (xy 139.602639 56.141973) (xy 139.343976 56.061903)
+ (xy 139.074686 56.0336) (xy 138.805027 56.058141) (xy 138.545271 56.134591) (xy 138.305311 56.260039) (xy 138.094287 56.429707)
+ (xy 137.920238 56.637131) (xy 137.794076 56.866618) (xy 137.680595 56.653191) (xy 137.509458 56.443356) (xy 137.300824 56.270759)
+ (xy 137.062639 56.141973) (xy 136.803976 56.061903) (xy 136.534686 56.0336) (xy 136.265027 56.058141) (xy 136.005271 56.134591)
+ (xy 135.765311 56.260039) (xy 135.554287 56.429707) (xy 135.380238 56.637131) (xy 135.254076 56.866618) (xy 135.140595 56.653191)
+ (xy 134.969458 56.443356) (xy 134.760824 56.270759) (xy 134.522639 56.141973) (xy 134.263976 56.061903) (xy 133.994686 56.0336)
+ (xy 133.725027 56.058141) (xy 133.465271 56.134591) (xy 133.225311 56.260039) (xy 133.014287 56.429707) (xy 132.840238 56.637131)
+ (xy 132.714076 56.866618) (xy 132.600595 56.653191) (xy 132.429458 56.443356) (xy 132.220824 56.270759) (xy 131.982639 56.141973)
+ (xy 131.723976 56.061903) (xy 131.454686 56.0336) (xy 131.185027 56.058141) (xy 130.925271 56.134591) (xy 130.685311 56.260039)
+ (xy 130.474287 56.429707) (xy 130.300238 56.637131) (xy 130.174076 56.866618) (xy 130.060595 56.653191) (xy 129.889458 56.443356)
+ (xy 129.7209 56.303913) (xy 129.7209 55.276403) (xy 130.2385 55.276403) (xy 130.334048 55.268784) (xy 130.496107 55.218597)
+ (xy 130.637769 55.125248) (xy 130.747815 54.99613) (xy 130.817534 54.841465) (xy 130.841403 54.6735) (xy 130.841403 53.2765)
+ (xy 130.833784 53.180952) (xy 130.783597 53.018893) (xy 130.690248 52.877231) (xy 130.56113 52.767185) (xy 130.406465 52.697466)
+ (xy 130.2385 52.673597) (xy 128.8415 52.673597) (xy 128.745952 52.681216) (xy 128.583893 52.731403) (xy 128.442231 52.824752)
+ (xy 128.332185 52.95387) (xy 128.262466 53.108535) (xy 128.238597 53.2765) (xy 128.238597 54.140931) (xy 128.23179 54.149043)
+ (xy 128.229721 54.152806) (xy 128.227 54.156119) (xy 128.191407 54.2225) (xy 128.155077 54.288583) (xy 128.153779 54.292674)
+ (xy 128.151753 54.296453) (xy 128.129735 54.368473) (xy 128.106929 54.440365) (xy 128.10645 54.444632) (xy 128.105197 54.448732)
+ (xy 128.097582 54.523701) (xy 128.08918 54.598608) (xy 128.089121 54.606993) (xy 128.089105 54.607152) (xy 128.089119 54.6073)
+ (xy 128.0891 54.61) (xy 128.0891 56.305234) (xy 127.934287 56.429707) (xy 127.760238 56.637131) (xy 127.634076 56.866618)
+ (xy 127.520595 56.653191) (xy 127.349458 56.443356) (xy 127.1809 56.303913) (xy 127.1809 51.137956) (xy 127.337957 50.9809)
+ (xy 128.252983 50.9809) (xy 128.296403 51.121107) (xy 128.389752 51.262769) (xy 128.51887 51.372815) (xy 128.673535 51.442534)
+ (xy 128.8415 51.466403) (xy 130.2385 51.466403) (xy 130.334048 51.458784) (xy 130.496107 51.408597) (xy 130.637769 51.315248)
+ (xy 130.747815 51.18613) (xy 130.817534 51.031465) (xy 130.841403 50.8635) (xy 130.841403 49.4665) (xy 130.833784 49.370952)
+ (xy 130.783597 49.208893) (xy 130.690248 49.067231) (xy 130.56113 48.957185) (xy 130.406465 48.887466) (xy 130.2385 48.863597)
+ (xy 128.8415 48.863597) (xy 128.745952 48.871216) (xy 128.583893 48.921403) (xy 128.442231 49.014752) (xy 128.332185 49.14387)
+ (xy 128.262466 49.298535) (xy 128.25528 49.3491) (xy 127.064756 49.3491) (xy 127.576929 48.836928) (xy 127.624761 48.778696)
+ (xy 127.67321 48.720957) (xy 127.675279 48.717194) (xy 127.678 48.713881) (xy 127.713583 48.647519) (xy 127.749923 48.581417)
+ (xy 127.751222 48.577323) (xy 127.753247 48.573546) (xy 127.774896 48.502734) (xy 127.970713 48.345293) (xy 128.144762 48.137869)
+ (xy 128.270924 47.908382) (xy 128.384405 48.121809) (xy 128.555542 48.331644) (xy 128.764176 48.504241) (xy 129.002361 48.633027)
+ (xy 129.261024 48.713097) (xy 129.530314 48.7414) (xy 129.799973 48.716859) (xy 130.059729 48.640409) (xy 130.299689 48.514961)
+ (xy 130.510713 48.345293) (xy 130.684762 48.137869) (xy 130.70668 48.098) (xy 130.986052 48.098) (xy 132.566526 49.678474)
+ (xy 132.645587 49.743416) (xy 132.724017 49.809226) (xy 132.729123 49.812033) (xy 132.733625 49.815731) (xy 132.82381 49.864088)
+ (xy 132.913512 49.913402) (xy 132.919067 49.915164) (xy 132.924201 49.917917) (xy 133.02207 49.947839) (xy 133.119634 49.978788)
+ (xy 133.125424 49.979437) (xy 133.130996 49.981141) (xy 133.232811 49.991483) (xy 133.33453 50.002892) (xy 133.345922 50.002972)
+ (xy 133.346133 50.002993) (xy 133.34633 50.002974) (xy 133.35 50.003) (xy 138.43 50.003) (xy 138.531874 49.993011)
+ (xy 138.633819 49.984092) (xy 138.639414 49.982466) (xy 138.645212 49.981898) (xy 138.743161 49.952326) (xy 138.841475 49.923763)
+ (xy 138.84665 49.92108) (xy 138.852226 49.919397) (xy 138.942593 49.871348) (xy 139.03346 49.824247) (xy 139.038012 49.820613)
+ (xy 139.043158 49.817877) (xy 139.122478 49.753185) (xy 139.202459 49.689337) (xy 139.210566 49.681342) (xy 139.210735 49.681204)
+ (xy 139.210864 49.681048) (xy 139.213474 49.678474) (xy 142.388474 46.503474) (xy 142.453416 46.424413) (xy 142.519226 46.345983)
+ (xy 142.522033 46.340877) (xy 142.525731 46.336375) (xy 142.574088 46.24619) (xy 142.623402 46.156488) (xy 142.625164 46.150933)
+ (xy 142.627917 46.145799) (xy 142.657839 46.04793) (xy 142.688788 45.950366) (xy 142.689437 45.944576) (xy 142.691141 45.939004)
+ (xy 142.701483 45.837189) (xy 142.712892 45.73547) (xy 142.712972 45.724078) (xy 142.712993 45.723867) (xy 142.712974 45.72367)
+ (xy 142.713 45.72) (xy 142.713 44.273949) (xy 142.991049 43.9959) (xy 143.492737 43.9959) (xy 143.475473 44.03618)
+ (xy 143.419939 44.297445) (xy 143.41621 44.564521) (xy 143.464427 44.827235) (xy 143.562754 45.07558) (xy 143.707445 45.300097)
+ (xy 143.89299 45.492234) (xy 144.11232 45.644672) (xy 144.286013 45.720557) (xy 144.145938 45.777151) (xy 143.922436 45.923406)
+ (xy 143.731599 46.110287) (xy 143.687905 46.1741) (xy 143.51 46.1741) (xy 143.434993 46.181455) (xy 143.359915 46.188023)
+ (xy 143.355794 46.18922) (xy 143.351524 46.189639) (xy 143.279405 46.211413) (xy 143.207001 46.232448) (xy 143.203189 46.234424)
+ (xy 143.199085 46.235663) (xy 143.132612 46.271008) (xy 143.065629 46.305728) (xy 143.062272 46.308408) (xy 143.058488 46.31042)
+ (xy 143.000079 46.358057) (xy 142.941184 46.405073) (xy 142.935214 46.410959) (xy 142.935089 46.411061) (xy 142.934993 46.411177)
+ (xy 142.933072 46.413071) (xy 142.298072 47.048072) (xy 142.250264 47.106274) (xy 142.20179 47.164043) (xy 142.199721 47.167806)
+ (xy 142.197 47.171119) (xy 142.161407 47.2375) (xy 142.125077 47.303583) (xy 142.123779 47.307674) (xy 142.121753 47.311453)
+ (xy 142.099735 47.383473) (xy 142.076929 47.455365) (xy 142.07645 47.459632) (xy 142.075197 47.463732) (xy 142.067582 47.538701)
+ (xy 142.05918 47.613608) (xy 142.059121 47.621993) (xy 142.059105 47.622152) (xy 142.059119 47.6223) (xy 142.0591 47.625)
+ (xy 142.0591 53.34) (xy 142.066454 53.415003) (xy 142.073023 53.490086) (xy 142.07422 53.494208) (xy 142.074639 53.498476)
+ (xy 142.096409 53.570583) (xy 142.117448 53.642999) (xy 142.119424 53.646811) (xy 142.120663 53.650915) (xy 142.156029 53.717428)
+ (xy 142.190729 53.784371) (xy 142.193406 53.787725) (xy 142.19542 53.791512) (xy 142.243079 53.849949) (xy 142.290073 53.908816)
+ (xy 142.295955 53.914781) (xy 142.296061 53.914911) (xy 142.296181 53.91501) (xy 142.298072 53.916928) (xy 142.933072 54.551929)
+ (xy 142.991304 54.599761) (xy 143.049043 54.64821) (xy 143.052806 54.650279) (xy 143.056119 54.653) (xy 143.122481 54.688583)
+ (xy 143.188583 54.724923) (xy 143.192677 54.726222) (xy 143.196454 54.728247) (xy 143.268459 54.750261) (xy 143.340365 54.773071)
+ (xy 143.344632 54.77355) (xy 143.348732 54.774803) (xy 143.423701 54.782418) (xy 143.498608 54.79082) (xy 143.506993 54.790879)
+ (xy 143.507152 54.790895) (xy 143.5073 54.790881) (xy 143.51 54.7909) (xy 143.7627 54.7909) (xy 143.934344 54.968642)
+ (xy 144.143449 55.113974) (xy 144.3768 55.215922) (xy 144.625509 55.270605) (xy 144.880102 55.275937) (xy 145.130882 55.231718)
+ (xy 145.368297 55.139631) (xy 145.583305 55.003183) (xy 145.767714 54.827572) (xy 145.914502 54.619487) (xy 146.018077 54.386853)
+ (xy 146.074494 54.138533) (xy 146.075178 54.089521) (xy 146.59121 54.089521) (xy 146.639427 54.352235) (xy 146.737754 54.60058)
+ (xy 146.882445 54.825097) (xy 147.06799 55.017234) (xy 147.28732 55.169672) (xy 147.532082 55.276606) (xy 147.792954 55.333963)
+ (xy 148.059997 55.339556) (xy 148.323041 55.293175) (xy 148.572066 55.196584) (xy 148.797588 55.053464) (xy 148.991016 54.869265)
+ (xy 149.144982 54.651004) (xy 149.225826 54.469425) (xy 149.277754 54.60058) (xy 149.422445 54.825097) (xy 149.60799 55.017234)
+ (xy 149.82732 55.169672) (xy 150.072082 55.276606) (xy 150.332954 55.333963) (xy 150.599997 55.339556) (xy 150.863041 55.293175)
+ (xy 151.112066 55.196584) (xy 151.120987 55.190922) (xy 163.353054 55.190922) (xy 164.465 56.302868) (xy 165.576946 55.190922)
+ (xy 177.323054 55.190922) (xy 178.435 56.302868) (xy 179.546946 55.190922) (xy 179.414599 54.911502) (xy 179.082949 54.751203)
+ (xy 178.726399 54.658685) (xy 178.358651 54.637504) (xy 177.993837 54.688475) (xy 177.645976 54.809637) (xy 177.455401 54.911502)
+ (xy 177.323054 55.190922) (xy 165.576946 55.190922) (xy 165.444599 54.911502) (xy 165.112949 54.751203) (xy 164.756399 54.658685)
+ (xy 164.388651 54.637504) (xy 164.023837 54.688475) (xy 163.675976 54.809637) (xy 163.485401 54.911502) (xy 163.353054 55.190922)
+ (xy 151.120987 55.190922) (xy 151.337588 55.053464) (xy 151.531016 54.869265) (xy 151.586296 54.7909) (xy 159.385 54.7909)
+ (xy 159.460003 54.783546) (xy 159.535086 54.776977) (xy 159.539208 54.77578) (xy 159.543476 54.775361) (xy 159.615583 54.753591)
+ (xy 159.687999 54.732552) (xy 159.691811 54.730576) (xy 159.695915 54.729337) (xy 159.762428 54.693971) (xy 159.829371 54.659271)
+ (xy 159.832725 54.656594) (xy 159.836512 54.65458) (xy 159.894949 54.606921) (xy 159.953816 54.559927) (xy 159.959781 54.554045)
+ (xy 159.959911 54.553939) (xy 159.96001 54.553819) (xy 159.961928 54.551928) (xy 162.262957 52.2509) (xy 166.586716 52.2509)
+ (xy 166.603744 52.293909) (xy 166.802402 52.602166) (xy 167.057152 52.865967) (xy 167.358288 53.075262) (xy 167.694342 53.222081)
+ (xy 168.052513 53.30083) (xy 168.419159 53.30851) (xy 168.780313 53.244829) (xy 169.122221 53.112212) (xy 169.431857 52.91571)
+ (xy 169.69743 52.662809) (xy 169.908823 52.36314) (xy 170.057984 52.02812) (xy 170.139231 51.670507) (xy 170.14508 51.251637)
+ (xy 170.073849 50.891895) (xy 169.934101 50.55284) (xy 169.731158 50.247387) (xy 169.47275 49.987169) (xy 169.168721 49.782098)
+ (xy 168.83065 49.639986) (xy 168.471414 49.566246) (xy 168.104697 49.563685) (xy 167.744467 49.632403) (xy 167.404445 49.769781)
+ (xy 167.097581 49.970587) (xy 166.835566 50.227171) (xy 166.628378 50.529762) (xy 166.590088 50.6191) (xy 161.925 50.6191)
+ (xy 161.849997 50.626454) (xy 161.774914 50.633023) (xy 161.770792 50.63422) (xy 161.766524 50.634639) (xy 161.694384 50.656419)
+ (xy 161.622 50.677449) (xy 161.618191 50.679423) (xy 161.614085 50.680663) (xy 161.547575 50.716027) (xy 161.480628 50.750729)
+ (xy 161.477272 50.753408) (xy 161.473488 50.75542) (xy 161.415098 50.803042) (xy 161.356183 50.850073) (xy 161.350213 50.85596)
+ (xy 161.350089 50.856061) (xy 161.349994 50.856176) (xy 161.348071 50.858072) (xy 159.047044 53.1591) (xy 155.031336 53.1591)
+ (xy 155.152221 53.112212) (xy 155.461857 52.91571) (xy 155.72743 52.662809) (xy 155.938823 52.36314) (xy 156.087984 52.02812)
+ (xy 156.169231 51.670507) (xy 156.17508 51.251637) (xy 156.103849 50.891895) (xy 155.964101 50.55284) (xy 155.761158 50.247387)
+ (xy 155.50275 49.987169) (xy 155.198721 49.782098) (xy 154.86065 49.639986) (xy 154.501414 49.566246) (xy 154.134697 49.563685)
+ (xy 153.774467 49.632403) (xy 153.434445 49.769781) (xy 153.127581 49.970587) (xy 152.865566 50.227171) (xy 152.658378 50.529762)
+ (xy 152.620088 50.6191) (xy 150.495 50.6191) (xy 150.419997 50.626454) (xy 150.344914 50.633023) (xy 150.340792 50.63422)
+ (xy 150.336524 50.634639) (xy 150.264384 50.656419) (xy 150.192 50.677449) (xy 150.188191 50.679423) (xy 150.184085 50.680663)
+ (xy 150.117575 50.716027) (xy 150.050628 50.750729) (xy 150.047272 50.753408) (xy 150.043488 50.75542) (xy 149.985098 50.803042)
+ (xy 149.926183 50.850073) (xy 149.920213 50.85596) (xy 149.920089 50.856061) (xy 149.919994 50.856176) (xy 149.918071 50.858072)
+ (xy 148.151306 52.624838) (xy 148.098057 52.613907) (xy 147.830961 52.612043) (xy 147.56859 52.662092) (xy 147.320938 52.762151)
+ (xy 147.097436 52.908406) (xy 146.906599 53.095287) (xy 146.755695 53.315677) (xy 146.650473 53.56118) (xy 146.594939 53.822445)
+ (xy 146.59121 54.089521) (xy 146.075178 54.089521) (xy 146.078556 53.847675) (xy 146.029094 53.597876) (xy 145.932055 53.362441)
+ (xy 145.791134 53.150339) (xy 145.6117 52.969647) (xy 145.400586 52.827249) (xy 145.165835 52.728569) (xy 144.916387 52.677365)
+ (xy 144.661744 52.675587) (xy 144.411606 52.723303) (xy 144.175499 52.818697) (xy 143.962418 52.958133) (xy 143.803052 53.114196)
+ (xy 143.6909 53.002044) (xy 143.6909 50.872197) (xy 143.75745 50.975463) (xy 143.934344 51.158642) (xy 144.143449 51.303974)
+ (xy 144.3768 51.405922) (xy 144.625509 51.460605) (xy 144.880102 51.465937) (xy 145.130882 51.421718) (xy 145.368297 51.329631)
+ (xy 145.583305 51.193183) (xy 145.767714 51.017572) (xy 145.793583 50.9809) (xy 146.05 50.9809) (xy 146.125003 50.973546)
+ (xy 146.200086 50.966977) (xy 146.204208 50.96578) (xy 146.208476 50.965361) (xy 146.280583 50.943591) (xy 146.352999 50.922552)
+ (xy 146.356811 50.920576) (xy 146.360915 50.919337) (xy 146.427428 50.883971) (xy 146.494371 50.849271) (xy 146.497725 50.846594)
+ (xy 146.501512 50.84458) (xy 146.559949 50.796921) (xy 146.618816 50.749927) (xy 146.624781 50.744045) (xy 146.624911 50.743939)
+ (xy 146.62501 50.743819) (xy 146.626928 50.741928) (xy 147.261929 50.106928) (xy 147.309761 50.048696) (xy 147.35821 49.990957)
+ (xy 147.360279 49.987194) (xy 147.363 49.983881) (xy 147.398583 49.917519) (xy 147.434923 49.851417) (xy 147.436222 49.847323)
+ (xy 147.438247 49.843546) (xy 147.460261 49.771541) (xy 147.483071 49.699635) (xy 147.48355 49.695368) (xy 147.484803 49.691268)
+ (xy 147.492418 49.616299) (xy 147.50082 49.541392) (xy 147.500879 49.533007) (xy 147.500895 49.532848) (xy 147.500881 49.5327)
+ (xy 147.5009 49.53) (xy 147.5009 45.085) (xy 147.493545 45.009993) (xy 147.486977 44.934915) (xy 147.48578 44.930794)
+ (xy 147.485361 44.926524) (xy 147.463587 44.854405) (xy 147.442552 44.782001) (xy 147.440576 44.778189) (xy 147.439337 44.774085)
+ (xy 147.403992 44.707612) (xy 147.369272 44.640629) (xy 147.366592 44.637272) (xy 147.36458 44.633488) (xy 147.316943 44.575079)
+ (xy 147.269927 44.516184) (xy 147.264041 44.510214) (xy 147.263939 44.510089) (xy 147.263823 44.509993) (xy 147.261929 44.508072)
+ (xy 146.749756 43.9959) (xy 147.838952 43.9959) (xy 148.441526 44.598475) (xy 148.520617 44.663441) (xy 148.599017 44.729226)
+ (xy 148.604123 44.732033) (xy 148.608625 44.735731) (xy 148.69881 44.784088) (xy 148.788512 44.833402) (xy 148.794067 44.835164)
+ (xy 148.799201 44.837917) (xy 148.89707 44.867839) (xy 148.994634 44.898788) (xy 149.000424 44.899437) (xy 149.005996 44.901141)
+ (xy 149.107811 44.911483) (xy 149.20953 44.922892) (xy 149.220922 44.922972) (xy 149.221133 44.922993) (xy 149.22133 44.922974)
+ (xy 149.225 44.923) (xy 151.083883 44.923) (xy 151.128449 44.953974) (xy 151.3618 45.055922) (xy 151.610509 45.110605)
+ (xy 151.865102 45.115937) (xy 152.115882 45.071718) (xy 152.353297 44.979631) (xy 152.442533 44.923) (xy 160.02 44.923)
+ (xy 160.121874 44.913011) (xy 160.223819 44.904092) (xy 160.229414 44.902466) (xy 160.235212 44.901898) (xy 160.333161 44.872326)
+ (xy 160.431475 44.843763) (xy 160.43665 44.84108) (xy 160.442226 44.839397) (xy 160.532593 44.791348) (xy 160.62346 44.744247)
+ (xy 160.628012 44.740613) (xy 160.633158 44.737877) (xy 160.712478 44.673185) (xy 160.792459 44.609337) (xy 160.800566 44.601342)
+ (xy 160.800735 44.601204) (xy 160.800864 44.601048) (xy 160.803474 44.598474) (xy 161.286948 44.115) (xy 165.7065 44.115)
+ (xy 165.7065 44.572595) (xy 165.729558 44.688513) (xy 165.774787 44.797706) (xy 165.840449 44.895978) (xy 165.924022 44.97955)
+ (xy 166.022293 45.045213) (xy 166.131486 45.090442) (xy 166.247405 45.1135) (xy 166.705 45.1135) (xy 166.855 44.9635)
+ (xy 166.855 43.965) (xy 167.155 43.965) (xy 167.155 44.9635) (xy 167.305 45.1135) (xy 167.762595 45.1135)
+ (xy 167.878514 45.090442) (xy 167.987707 45.045213) (xy 168.085978 44.97955) (xy 168.169551 44.895978) (xy 168.235213 44.797706)
+ (xy 168.280442 44.688513) (xy 168.3035 44.572595) (xy 168.3035 44.115) (xy 168.1535 43.965) (xy 167.155 43.965)
+ (xy 166.855 43.965) (xy 165.8565 43.965) (xy 165.7065 44.115) (xy 161.286948 44.115) (xy 162.344543 43.057405)
+ (xy 165.7065 43.057405) (xy 165.7065 43.515) (xy 165.8565 43.665) (xy 166.855 43.665) (xy 166.855 42.6665)
+ (xy 167.155 42.6665) (xy 167.155 43.665) (xy 168.1535 43.665) (xy 168.3035 43.515) (xy 168.3035 43.057405)
+ (xy 168.280442 42.941487) (xy 168.235213 42.832294) (xy 168.169551 42.734022) (xy 168.085978 42.65045) (xy 167.987707 42.584787)
+ (xy 167.878514 42.539558) (xy 167.762595 42.5165) (xy 167.305 42.5165) (xy 167.155 42.6665) (xy 166.855 42.6665)
+ (xy 166.705 42.5165) (xy 166.247405 42.5165) (xy 166.131486 42.539558) (xy 166.022293 42.584787) (xy 165.924022 42.65045)
+ (xy 165.840449 42.734022) (xy 165.774787 42.832294) (xy 165.729558 42.941487) (xy 165.7065 43.057405) (xy 162.344543 43.057405)
+ (xy 163.018949 42.383) (xy 169.086052 42.383)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 140.353252 94.474269) (xy 140.48237 94.584315) (xy 140.637035 94.654034) (xy 140.805 94.677903) (xy 140.989955 94.677903)
+ (xy 141.710526 95.398474) (xy 141.789587 95.463416) (xy 141.868017 95.529226) (xy 141.873123 95.532033) (xy 141.877625 95.535731)
+ (xy 141.96781 95.584088) (xy 142.057512 95.633402) (xy 142.063067 95.635164) (xy 142.068201 95.637917) (xy 142.16607 95.667839)
+ (xy 142.263634 95.698788) (xy 142.269424 95.699437) (xy 142.274996 95.701141) (xy 142.376811 95.711483) (xy 142.47853 95.722892)
+ (xy 142.489922 95.722972) (xy 142.490133 95.722993) (xy 142.49033 95.722974) (xy 142.494 95.723) (xy 147.273883 95.723)
+ (xy 147.318449 95.753974) (xy 147.5518 95.855922) (xy 147.683357 95.884847) (xy 147.586606 95.903303) (xy 147.350499 95.998697)
+ (xy 147.137418 96.138133) (xy 146.955478 96.316302) (xy 146.81161 96.526416) (xy 146.711293 96.760473) (xy 146.658349 97.009557)
+ (xy 146.654793 97.264181) (xy 146.700762 97.514647) (xy 146.794505 97.751414) (xy 146.93245 97.965463) (xy 147.109344 98.148642)
+ (xy 147.318449 98.293974) (xy 147.5518 98.395922) (xy 147.683357 98.424847) (xy 147.586606 98.443303) (xy 147.350499 98.538697)
+ (xy 147.137418 98.678133) (xy 146.955478 98.856302) (xy 146.81161 99.066416) (xy 146.711293 99.300473) (xy 146.685073 99.423828)
+ (xy 146.664094 99.317876) (xy 146.567055 99.082441) (xy 146.426134 98.870339) (xy 146.2467 98.689647) (xy 146.035586 98.547249)
+ (xy 145.800835 98.448569) (xy 145.551387 98.397365) (xy 145.296744 98.395587) (xy 145.046606 98.443303) (xy 144.810499 98.538697)
+ (xy 144.597418 98.678133) (xy 144.415478 98.856302) (xy 144.27161 99.066416) (xy 144.171293 99.300473) (xy 144.145073 99.423828)
+ (xy 144.124094 99.317876) (xy 144.027055 99.082441) (xy 143.886134 98.870339) (xy 143.7067 98.689647) (xy 143.495586 98.547249)
+ (xy 143.260835 98.448569) (xy 143.011387 98.397365) (xy 142.756744 98.395587) (xy 142.506606 98.443303) (xy 142.270499 98.538697)
+ (xy 142.057418 98.678133) (xy 141.875478 98.856302) (xy 141.73161 99.066416) (xy 141.631293 99.300473) (xy 141.605436 99.422123)
+ (xy 141.591709 99.344086) (xy 141.499102 99.105657) (xy 141.47176 99.054506) (xy 141.250703 98.991429) (xy 140.547132 99.695)
+ (xy 140.561275 99.709143) (xy 140.349143 99.921275) (xy 140.335 99.907132) (xy 139.631429 100.610703) (xy 139.694506 100.83176)
+ (xy 139.928583 100.934872) (xy 140.06345 100.964829) (xy 139.966606 100.983303) (xy 139.730499 101.078697) (xy 139.517418 101.218133)
+ (xy 139.335478 101.396302) (xy 139.19161 101.606416) (xy 139.091293 101.840473) (xy 139.065073 101.963828) (xy 139.044094 101.857876)
+ (xy 138.947055 101.622441) (xy 138.806134 101.410339) (xy 138.6267 101.229647) (xy 138.415586 101.087249) (xy 138.180835 100.988569)
+ (xy 138.068113 100.965431) (xy 138.145882 100.951718) (xy 138.383297 100.859631) (xy 138.598305 100.723183) (xy 138.782714 100.547572)
+ (xy 138.929502 100.339487) (xy 139.033077 100.106853) (xy 139.064602 99.968094) (xy 139.078291 100.045914) (xy 139.170898 100.284343)
+ (xy 139.19824 100.335494) (xy 139.419297 100.398571) (xy 140.122868 99.695) (xy 139.419297 98.991429) (xy 139.19824 99.054506)
+ (xy 139.095128 99.288583) (xy 139.06508 99.42386) (xy 139.044094 99.317876) (xy 138.947055 99.082441) (xy 138.806134 98.870339)
+ (xy 138.715726 98.779297) (xy 139.631429 98.779297) (xy 140.335 99.482868) (xy 141.038571 98.779297) (xy 140.975494 98.55824)
+ (xy 140.741417 98.455128) (xy 140.49172 98.399664) (xy 140.236001 98.393979) (xy 139.984086 98.438291) (xy 139.745657 98.530898)
+ (xy 139.694506 98.55824) (xy 139.631429 98.779297) (xy 138.715726 98.779297) (xy 138.6267 98.689647) (xy 138.415586 98.547249)
+ (xy 138.180835 98.448569) (xy 137.931387 98.397365) (xy 137.676744 98.395587) (xy 137.426606 98.443303) (xy 137.190499 98.538697)
+ (xy 136.977418 98.678133) (xy 136.795478 98.856302) (xy 136.65161 99.066416) (xy 136.551293 99.300473) (xy 136.525073 99.423828)
+ (xy 136.504094 99.317876) (xy 136.407055 99.082441) (xy 136.266134 98.870339) (xy 136.0867 98.689647) (xy 135.875586 98.547249)
+ (xy 135.640835 98.448569) (xy 135.391387 98.397365) (xy 135.136744 98.395587) (xy 134.886606 98.443303) (xy 134.8009 98.477931)
+ (xy 134.8009 94.731048) (xy 135.078948 94.453) (xy 140.339237 94.453)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 123.987 79.375) (xy 123.996989 79.476874) (xy 124.005908 79.578819) (xy 124.007534 79.584414) (xy 124.008102 79.590212)
+ (xy 124.037674 79.688161) (xy 124.066237 79.786475) (xy 124.06892 79.79165) (xy 124.070603 79.797226) (xy 124.118652 79.887593)
+ (xy 124.165753 79.97846) (xy 124.169387 79.983012) (xy 124.172123 79.988158) (xy 124.236815 80.067478) (xy 124.300663 80.147459)
+ (xy 124.308658 80.155566) (xy 124.308796 80.155735) (xy 124.308952 80.155864) (xy 124.311526 80.158474) (xy 126.527 82.373949)
+ (xy 126.527 83.21311) (xy 126.435731 83.273252) (xy 126.325685 83.40237) (xy 126.255966 83.557035) (xy 126.232097 83.725)
+ (xy 126.232097 84.725) (xy 126.239716 84.820548) (xy 126.289903 84.982607) (xy 126.383252 85.124269) (xy 126.51237 85.234315)
+ (xy 126.667035 85.304034) (xy 126.835 85.327903) (xy 126.95977 85.327903) (xy 127.009017 85.369226) (xy 127.012419 85.371096)
+ (xy 127.015414 85.373574) (xy 127.107125 85.423162) (xy 127.198512 85.473402) (xy 127.202218 85.474578) (xy 127.205633 85.476424)
+ (xy 127.305143 85.507228) (xy 127.404634 85.538788) (xy 127.408499 85.539222) (xy 127.412206 85.540369) (xy 127.515846 85.551262)
+ (xy 127.61953 85.562892) (xy 127.62699 85.562944) (xy 127.627265 85.562973) (xy 127.627541 85.562948) (xy 127.635 85.563)
+ (xy 132.877 85.563) (xy 132.877 88.9) (xy 132.886989 89.001874) (xy 132.895908 89.103819) (xy 132.897534 89.109414)
+ (xy 132.898102 89.115212) (xy 132.927674 89.213161) (xy 132.956237 89.311475) (xy 132.95892 89.31665) (xy 132.960603 89.322226)
+ (xy 133.008652 89.412593) (xy 133.055753 89.50346) (xy 133.059387 89.508012) (xy 133.062123 89.513158) (xy 133.126815 89.592478)
+ (xy 133.190663 89.672459) (xy 133.198658 89.680566) (xy 133.198796 89.680735) (xy 133.198952 89.680864) (xy 133.201526 89.683474)
+ (xy 133.836526 90.318475) (xy 133.915617 90.383441) (xy 133.994017 90.449226) (xy 133.999123 90.452033) (xy 134.003625 90.455731)
+ (xy 134.09381 90.504088) (xy 134.183512 90.553402) (xy 134.189067 90.555164) (xy 134.194201 90.557917) (xy 134.29207 90.587839)
+ (xy 134.389634 90.618788) (xy 134.395424 90.619437) (xy 134.400996 90.621141) (xy 134.502811 90.631483) (xy 134.60453 90.642892)
+ (xy 134.615922 90.642972) (xy 134.616133 90.642993) (xy 134.61633 90.642974) (xy 134.62 90.643) (xy 136.687 90.643)
+ (xy 136.687 92.237) (xy 134.62 92.237) (xy 134.518217 92.24698) (xy 134.416182 92.255907) (xy 134.410582 92.257534)
+ (xy 134.404788 92.258102) (xy 134.306868 92.287666) (xy 134.208525 92.316237) (xy 134.20335 92.31892) (xy 134.197774 92.320603)
+ (xy 134.107407 92.368652) (xy 134.01654 92.415753) (xy 134.011988 92.419387) (xy 134.006842 92.422123) (xy 133.927522 92.486815)
+ (xy 133.847541 92.550663) (xy 133.839429 92.558662) (xy 133.839265 92.558796) (xy 133.839139 92.558948) (xy 133.836526 92.561525)
+ (xy 133.201526 93.196526) (xy 133.064269 93.363625) (xy 132.962083 93.554201) (xy 132.898859 93.760996) (xy 132.877007 93.976133)
+ (xy 132.897357 94.191416) (xy 132.959136 94.398648) (xy 133.059989 94.589933) (xy 133.1691 94.724674) (xy 133.1691 98.477265)
+ (xy 133.100835 98.448569) (xy 132.851387 98.397365) (xy 132.596744 98.395587) (xy 132.346606 98.443303) (xy 132.110499 98.538697)
+ (xy 131.897418 98.678133) (xy 131.715478 98.856302) (xy 131.57161 99.066416) (xy 131.471293 99.300473) (xy 131.445073 99.423828)
+ (xy 131.424094 99.317876) (xy 131.327055 99.082441) (xy 131.186134 98.870339) (xy 131.0067 98.689647) (xy 130.795586 98.547249)
+ (xy 130.560835 98.448569) (xy 130.311387 98.397365) (xy 130.056744 98.395587) (xy 129.806606 98.443303) (xy 129.570499 98.538697)
+ (xy 129.357418 98.678133) (xy 129.175478 98.856302) (xy 129.03161 99.066416) (xy 128.931293 99.300473) (xy 128.905073 99.423828)
+ (xy 128.884094 99.317876) (xy 128.787055 99.082441) (xy 128.646134 98.870339) (xy 128.4667 98.689647) (xy 128.255586 98.547249)
+ (xy 128.020835 98.448569) (xy 127.771387 98.397365) (xy 127.516744 98.395587) (xy 127.266606 98.443303) (xy 127.030499 98.538697)
+ (xy 126.817418 98.678133) (xy 126.635478 98.856302) (xy 126.49161 99.066416) (xy 126.391293 99.300473) (xy 126.365073 99.423828)
+ (xy 126.344094 99.317876) (xy 126.247055 99.082441) (xy 126.106134 98.870339) (xy 125.9267 98.689647) (xy 125.715586 98.547249)
+ (xy 125.480835 98.448569) (xy 125.231387 98.397365) (xy 124.976744 98.395587) (xy 124.726606 98.443303) (xy 124.490499 98.538697)
+ (xy 124.277418 98.678133) (xy 124.095478 98.856302) (xy 123.95161 99.066416) (xy 123.851293 99.300473) (xy 123.825073 99.423828)
+ (xy 123.804094 99.317876) (xy 123.707055 99.082441) (xy 123.566134 98.870339) (xy 123.3867 98.689647) (xy 123.175586 98.547249)
+ (xy 122.940835 98.448569) (xy 122.828113 98.425431) (xy 122.905882 98.411718) (xy 123.143297 98.319631) (xy 123.358305 98.183183)
+ (xy 123.542714 98.007572) (xy 123.689502 97.799487) (xy 123.793077 97.566853) (xy 123.849494 97.318533) (xy 123.853556 97.027675)
+ (xy 123.804094 96.777876) (xy 123.707055 96.542441) (xy 123.566134 96.330339) (xy 123.3867 96.149647) (xy 123.175586 96.007249)
+ (xy 122.940835 95.908569) (xy 122.828018 95.885411) (xy 122.905914 95.871709) (xy 123.144343 95.779102) (xy 123.195494 95.75176)
+ (xy 123.258571 95.530703) (xy 122.555 94.827132) (xy 121.851429 95.530703) (xy 121.914506 95.75176) (xy 122.148583 95.854872)
+ (xy 122.28345 95.884829) (xy 122.186606 95.903303) (xy 121.950499 95.998697) (xy 121.737418 96.138133) (xy 121.555478 96.316302)
+ (xy 121.41161 96.526416) (xy 121.311293 96.760473) (xy 121.285073 96.883828) (xy 121.264094 96.777876) (xy 121.167055 96.542441)
+ (xy 121.026134 96.330339) (xy 120.8467 96.149647) (xy 120.635586 96.007249) (xy 120.400835 95.908569) (xy 120.288113 95.885431)
+ (xy 120.365882 95.871718) (xy 120.603297 95.779631) (xy 120.818305 95.643183) (xy 121.002714 95.467572) (xy 121.149502 95.259487)
+ (xy 121.253077 95.026853) (xy 121.284602 94.888094) (xy 121.298291 94.965914) (xy 121.390898 95.204343) (xy 121.41824 95.255494)
+ (xy 121.639297 95.318571) (xy 122.342868 94.615) (xy 122.767132 94.615) (xy 123.470703 95.318571) (xy 123.69176 95.255494)
+ (xy 123.794872 95.021417) (xy 123.850336 94.77172) (xy 123.856021 94.516001) (xy 123.811709 94.264086) (xy 123.719102 94.025657)
+ (xy 123.69176 93.974506) (xy 123.470703 93.911429) (xy 122.767132 94.615) (xy 122.342868 94.615) (xy 122.328726 94.600858)
+ (xy 122.540858 94.388726) (xy 122.555 94.402868) (xy 123.258571 93.699297) (xy 123.195494 93.47824) (xy 122.961417 93.375128)
+ (xy 122.827894 93.345469) (xy 122.905882 93.331718) (xy 123.143297 93.239631) (xy 123.358305 93.103183) (xy 123.542714 92.927572)
+ (xy 123.689502 92.719487) (xy 123.793077 92.486853) (xy 123.849494 92.238533) (xy 123.853556 91.947675) (xy 123.804094 91.697876)
+ (xy 123.707055 91.462441) (xy 123.566134 91.250339) (xy 123.3867 91.069647) (xy 123.175586 90.927249) (xy 122.940835 90.828569)
+ (xy 122.828113 90.805431) (xy 122.905882 90.791718) (xy 123.143297 90.699631) (xy 123.358305 90.563183) (xy 123.542714 90.387572)
+ (xy 123.689502 90.179487) (xy 123.793077 89.946853) (xy 123.849494 89.698533) (xy 123.853556 89.407675) (xy 123.804094 89.157876)
+ (xy 123.707055 88.922441) (xy 123.566134 88.710339) (xy 123.3867 88.529647) (xy 123.175586 88.387249) (xy 122.940835 88.288569)
+ (xy 122.828113 88.265431) (xy 122.905882 88.251718) (xy 123.143297 88.159631) (xy 123.358305 88.023183) (xy 123.542714 87.847572)
+ (xy 123.689502 87.639487) (xy 123.740474 87.525) (xy 126.235 87.525) (xy 126.235 87.784095) (xy 126.258058 87.900014)
+ (xy 126.303287 88.009207) (xy 126.36895 88.107478) (xy 126.452522 88.191051) (xy 126.550794 88.256713) (xy 126.659987 88.301942)
+ (xy 126.775905 88.325) (xy 127.335 88.325) (xy 127.485 88.175) (xy 127.485 87.375) (xy 127.785 87.375)
+ (xy 127.785 88.175) (xy 127.935 88.325) (xy 128.494095 88.325) (xy 128.610013 88.301942) (xy 128.719206 88.256713)
+ (xy 128.817478 88.191051) (xy 128.90105 88.107478) (xy 128.966713 88.009207) (xy 129.011942 87.900014) (xy 129.035 87.784095)
+ (xy 129.035 87.525) (xy 128.885 87.375) (xy 127.785 87.375) (xy 127.485 87.375) (xy 126.385 87.375)
+ (xy 126.235 87.525) (xy 123.740474 87.525) (xy 123.793077 87.406853) (xy 123.849494 87.158533) (xy 123.853556 86.867675)
+ (xy 123.813605 86.665905) (xy 126.235 86.665905) (xy 126.235 86.925) (xy 126.385 87.075) (xy 127.485 87.075)
+ (xy 127.485 86.275) (xy 127.785 86.275) (xy 127.785 87.075) (xy 128.885 87.075) (xy 129.035 86.925)
+ (xy 129.035 86.665905) (xy 129.011942 86.549986) (xy 128.966713 86.440793) (xy 128.90105 86.342522) (xy 128.817478 86.258949)
+ (xy 128.719206 86.193287) (xy 128.610013 86.148058) (xy 128.494095 86.125) (xy 127.935 86.125) (xy 127.785 86.275)
+ (xy 127.485 86.275) (xy 127.335 86.125) (xy 126.775905 86.125) (xy 126.659987 86.148058) (xy 126.550794 86.193287)
+ (xy 126.452522 86.258949) (xy 126.36895 86.342522) (xy 126.303287 86.440793) (xy 126.258058 86.549986) (xy 126.235 86.665905)
+ (xy 123.813605 86.665905) (xy 123.804094 86.617876) (xy 123.707055 86.382441) (xy 123.566134 86.170339) (xy 123.3867 85.989647)
+ (xy 123.175586 85.847249) (xy 122.940835 85.748569) (xy 122.828113 85.725431) (xy 122.905882 85.711718) (xy 123.143297 85.619631)
+ (xy 123.358305 85.483183) (xy 123.542714 85.307572) (xy 123.689502 85.099487) (xy 123.793077 84.866853) (xy 123.849494 84.618533)
+ (xy 123.853556 84.327675) (xy 123.804094 84.077876) (xy 123.707055 83.842441) (xy 123.566134 83.630339) (xy 123.3867 83.449647)
+ (xy 123.175586 83.307249) (xy 122.940835 83.208569) (xy 122.828113 83.185431) (xy 122.905882 83.171718) (xy 123.143297 83.079631)
+ (xy 123.358305 82.943183) (xy 123.542714 82.767572) (xy 123.689502 82.559487) (xy 123.793077 82.326853) (xy 123.849494 82.078533)
+ (xy 123.853556 81.787675) (xy 123.804094 81.537876) (xy 123.707055 81.302441) (xy 123.566134 81.090339) (xy 123.3867 80.909647)
+ (xy 123.175586 80.767249) (xy 122.940835 80.668569) (xy 122.828113 80.645431) (xy 122.905882 80.631718) (xy 123.143297 80.539631)
+ (xy 123.358305 80.403183) (xy 123.542714 80.227572) (xy 123.689502 80.019487) (xy 123.793077 79.786853) (xy 123.849494 79.538533)
+ (xy 123.853556 79.247675) (xy 123.804094 78.997876) (xy 123.707055 78.762441) (xy 123.566134 78.550339) (xy 123.3867 78.369647)
+ (xy 123.175586 78.227249) (xy 122.940835 78.128569) (xy 122.828113 78.105431) (xy 122.905882 78.091718) (xy 123.143297 77.999631)
+ (xy 123.232533 77.943) (xy 123.987 77.943)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 146.700762 74.654647) (xy 146.794505 74.891414) (xy 146.93245 75.105463) (xy 147.109344 75.288642) (xy 147.318449 75.433974)
+ (xy 147.5518 75.535922) (xy 147.683357 75.564847) (xy 147.586606 75.583303) (xy 147.350499 75.678697) (xy 147.137418 75.818133)
+ (xy 146.955478 75.996302) (xy 146.81161 76.206416) (xy 146.711293 76.440473) (xy 146.658349 76.689557) (xy 146.654793 76.944181)
+ (xy 146.700762 77.194647) (xy 146.794505 77.431414) (xy 146.93245 77.645463) (xy 147.109344 77.828642) (xy 147.318449 77.973974)
+ (xy 147.5518 78.075922) (xy 147.683357 78.104847) (xy 147.586606 78.123303) (xy 147.350499 78.218697) (xy 147.137418 78.358133)
+ (xy 146.955478 78.536302) (xy 146.81161 78.746416) (xy 146.711293 78.980473) (xy 146.658349 79.229557) (xy 146.654793 79.484181)
+ (xy 146.700762 79.734647) (xy 146.794505 79.971414) (xy 146.93245 80.185463) (xy 147.109344 80.368642) (xy 147.318449 80.513974)
+ (xy 147.5518 80.615922) (xy 147.683357 80.644847) (xy 147.586606 80.663303) (xy 147.350499 80.758697) (xy 147.137418 80.898133)
+ (xy 146.955478 81.076302) (xy 146.81161 81.286416) (xy 146.711293 81.520473) (xy 146.658349 81.769557) (xy 146.654793 82.024181)
+ (xy 146.700762 82.274647) (xy 146.794505 82.511414) (xy 146.93245 82.725463) (xy 147.109344 82.908642) (xy 147.318449 83.053974)
+ (xy 147.5518 83.155922) (xy 147.683357 83.184847) (xy 147.586606 83.203303) (xy 147.350499 83.298697) (xy 147.137418 83.438133)
+ (xy 146.955478 83.616302) (xy 146.81161 83.826416) (xy 146.711293 84.060473) (xy 146.658349 84.309557) (xy 146.654793 84.564181)
+ (xy 146.700762 84.814647) (xy 146.794505 85.051414) (xy 146.93245 85.265463) (xy 147.109344 85.448642) (xy 147.318449 85.593974)
+ (xy 147.5518 85.695922) (xy 147.683357 85.724847) (xy 147.586606 85.743303) (xy 147.350499 85.838697) (xy 147.137418 85.978133)
+ (xy 146.955478 86.156302) (xy 146.81161 86.366416) (xy 146.711293 86.600473) (xy 146.658349 86.849557) (xy 146.654793 87.104181)
+ (xy 146.700762 87.354647) (xy 146.794505 87.591414) (xy 146.93245 87.805463) (xy 147.109344 87.988642) (xy 147.318449 88.133974)
+ (xy 147.5518 88.235922) (xy 147.682094 88.264569) (xy 147.604086 88.278291) (xy 147.365657 88.370898) (xy 147.314506 88.39824)
+ (xy 147.251429 88.619297) (xy 147.955 89.322868) (xy 147.969143 89.308726) (xy 148.181275 89.520858) (xy 148.167132 89.535)
+ (xy 148.181275 89.549143) (xy 147.969143 89.761275) (xy 147.955 89.747132) (xy 147.251429 90.450703) (xy 147.314506 90.67176)
+ (xy 147.548583 90.774872) (xy 147.68345 90.804829) (xy 147.586606 90.823303) (xy 147.350499 90.918697) (xy 147.137418 91.058133)
+ (xy 146.955478 91.236302) (xy 146.81161 91.446416) (xy 146.711293 91.680473) (xy 146.658349 91.929557) (xy 146.654793 92.184181)
+ (xy 146.700762 92.434647) (xy 146.794505 92.671414) (xy 146.93245 92.885463) (xy 147.109344 93.068642) (xy 147.318449 93.213974)
+ (xy 147.5518 93.315922) (xy 147.683357 93.344847) (xy 147.586606 93.363303) (xy 147.350499 93.458697) (xy 147.276684 93.507)
+ (xy 143.007903 93.507) (xy 143.007903 93.075) (xy 143.000284 92.979452) (xy 142.950097 92.817393) (xy 142.856748 92.675731)
+ (xy 142.72763 92.565685) (xy 142.572965 92.495966) (xy 142.405 92.472097) (xy 142.28023 92.472097) (xy 142.230983 92.430774)
+ (xy 142.227581 92.428904) (xy 142.224586 92.426426) (xy 142.132875 92.376838) (xy 142.041488 92.326598) (xy 142.037782 92.325422)
+ (xy 142.034367 92.323576) (xy 141.934857 92.292772) (xy 141.835366 92.261212) (xy 141.831501 92.260778) (xy 141.827794 92.259631)
+ (xy 141.724154 92.248738) (xy 141.62047 92.237108) (xy 141.61301 92.237056) (xy 141.612735 92.237027) (xy 141.612459 92.237052)
+ (xy 141.605 92.237) (xy 138.903 92.237) (xy 138.903 90.875) (xy 140.205 90.875) (xy 140.205 91.134095)
+ (xy 140.228058 91.250014) (xy 140.273287 91.359207) (xy 140.33895 91.457478) (xy 140.422522 91.541051) (xy 140.520794 91.606713)
+ (xy 140.629987 91.651942) (xy 140.745905 91.675) (xy 141.305 91.675) (xy 141.455 91.525) (xy 141.455 90.725)
+ (xy 141.755 90.725) (xy 141.755 91.525) (xy 141.905 91.675) (xy 142.464095 91.675) (xy 142.580013 91.651942)
+ (xy 142.689206 91.606713) (xy 142.787478 91.541051) (xy 142.87105 91.457478) (xy 142.936713 91.359207) (xy 142.981942 91.250014)
+ (xy 143.005 91.134095) (xy 143.005 90.875) (xy 142.855 90.725) (xy 141.755 90.725) (xy 141.455 90.725)
+ (xy 140.355 90.725) (xy 140.205 90.875) (xy 138.903 90.875) (xy 138.903 90.17) (xy 138.89302 90.068217)
+ (xy 138.888444 90.015905) (xy 140.205 90.015905) (xy 140.205 90.275) (xy 140.355 90.425) (xy 141.455 90.425)
+ (xy 141.455 89.625) (xy 141.755 89.625) (xy 141.755 90.425) (xy 142.855 90.425) (xy 143.005 90.275)
+ (xy 143.005 90.015905) (xy 142.981942 89.899986) (xy 142.936713 89.790793) (xy 142.87105 89.692522) (xy 142.812528 89.633999)
+ (xy 146.653979 89.633999) (xy 146.698291 89.885914) (xy 146.790898 90.124343) (xy 146.81824 90.175494) (xy 147.039297 90.238571)
+ (xy 147.742868 89.535) (xy 147.039297 88.831429) (xy 146.81824 88.894506) (xy 146.715128 89.128583) (xy 146.659664 89.37828)
+ (xy 146.653979 89.633999) (xy 142.812528 89.633999) (xy 142.787478 89.608949) (xy 142.689206 89.543287) (xy 142.580013 89.498058)
+ (xy 142.464095 89.475) (xy 141.905 89.475) (xy 141.755 89.625) (xy 141.455 89.625) (xy 141.305 89.475)
+ (xy 140.745905 89.475) (xy 140.629987 89.498058) (xy 140.520794 89.543287) (xy 140.422522 89.608949) (xy 140.33895 89.692522)
+ (xy 140.273287 89.790793) (xy 140.228058 89.899986) (xy 140.205 90.015905) (xy 138.888444 90.015905) (xy 138.884093 89.966182)
+ (xy 138.882466 89.960582) (xy 138.881898 89.954788) (xy 138.852334 89.856868) (xy 138.823763 89.758525) (xy 138.82108 89.75335)
+ (xy 138.819397 89.747774) (xy 138.771348 89.657407) (xy 138.724247 89.56654) (xy 138.720613 89.561988) (xy 138.717877 89.556842)
+ (xy 138.653185 89.477522) (xy 138.589337 89.397541) (xy 138.581338 89.389429) (xy 138.581204 89.389265) (xy 138.581052 89.389139)
+ (xy 138.578475 89.386526) (xy 137.943474 88.751526) (xy 137.864413 88.686584) (xy 137.785983 88.620774) (xy 137.780877 88.617967)
+ (xy 137.776375 88.614269) (xy 137.68619 88.565912) (xy 137.596488 88.516598) (xy 137.590933 88.514836) (xy 137.585799 88.512083)
+ (xy 137.48793 88.482161) (xy 137.390366 88.451212) (xy 137.384576 88.450563) (xy 137.379004 88.448859) (xy 137.277189 88.438517)
+ (xy 137.17547 88.427108) (xy 137.164078 88.427028) (xy 137.163867 88.427007) (xy 137.16367 88.427026) (xy 137.16 88.427)
+ (xy 135.093 88.427) (xy 135.093 85.563) (xy 135.509 85.563) (xy 135.610874 85.553011) (xy 135.712819 85.544092)
+ (xy 135.718414 85.542466) (xy 135.724212 85.541898) (xy 135.822161 85.512326) (xy 135.920475 85.483763) (xy 135.92565 85.48108)
+ (xy 135.931226 85.479397) (xy 136.021593 85.431348) (xy 136.11246 85.384247) (xy 136.117012 85.380613) (xy 136.122158 85.377877)
+ (xy 136.201478 85.313185) (xy 136.281459 85.249337) (xy 136.289566 85.241342) (xy 136.289735 85.241204) (xy 136.289864 85.241048)
+ (xy 136.292474 85.238474) (xy 136.927475 84.603474) (xy 136.992441 84.524383) (xy 137.058226 84.445983) (xy 137.061033 84.440877)
+ (xy 137.064731 84.436375) (xy 137.113088 84.34619) (xy 137.162402 84.256488) (xy 137.164164 84.250933) (xy 137.166917 84.245799)
+ (xy 137.196839 84.14793) (xy 137.227788 84.050366) (xy 137.228437 84.044576) (xy 137.230141 84.039004) (xy 137.240483 83.937189)
+ (xy 137.251892 83.83547) (xy 137.251972 83.824078) (xy 137.251993 83.823867) (xy 137.251974 83.82367) (xy 137.252 83.82)
+ (xy 137.252 80.559012) (xy 137.304315 80.49763) (xy 137.374034 80.342965) (xy 137.397903 80.175) (xy 137.397903 79.675)
+ (xy 138.195 79.675) (xy 138.195 80.234095) (xy 138.218058 80.350013) (xy 138.263287 80.459206) (xy 138.328949 80.557478)
+ (xy 138.412522 80.64105) (xy 138.510793 80.706713) (xy 138.619986 80.751942) (xy 138.735905 80.775) (xy 138.995 80.775)
+ (xy 139.145 80.625) (xy 139.145 79.525) (xy 139.445 79.525) (xy 139.445 80.625) (xy 139.595 80.775)
+ (xy 139.854095 80.775) (xy 139.970014 80.751942) (xy 140.079207 80.706713) (xy 140.177478 80.64105) (xy 140.261051 80.557478)
+ (xy 140.326713 80.459206) (xy 140.371942 80.350013) (xy 140.395 80.234095) (xy 140.395 79.675) (xy 140.245 79.525)
+ (xy 139.445 79.525) (xy 139.145 79.525) (xy 138.345 79.525) (xy 138.195 79.675) (xy 137.397903 79.675)
+ (xy 137.397903 78.575) (xy 137.393191 78.515905) (xy 138.195 78.515905) (xy 138.195 79.075) (xy 138.345 79.225)
+ (xy 139.145 79.225) (xy 139.145 78.125) (xy 139.445 78.125) (xy 139.445 79.225) (xy 140.245 79.225)
+ (xy 140.395 79.075) (xy 140.395 78.515905) (xy 140.371942 78.399987) (xy 140.326713 78.290794) (xy 140.261051 78.192522)
+ (xy 140.177478 78.10895) (xy 140.079207 78.043287) (xy 139.970014 77.998058) (xy 139.854095 77.975) (xy 139.595 77.975)
+ (xy 139.445 78.125) (xy 139.145 78.125) (xy 138.995 77.975) (xy 138.735905 77.975) (xy 138.619986 77.998058)
+ (xy 138.510793 78.043287) (xy 138.412522 78.10895) (xy 138.328949 78.192522) (xy 138.263287 78.290794) (xy 138.218058 78.399987)
+ (xy 138.195 78.515905) (xy 137.393191 78.515905) (xy 137.390284 78.479452) (xy 137.340097 78.317393) (xy 137.246748 78.175731)
+ (xy 137.11763 78.065685) (xy 136.962965 77.995966) (xy 136.795 77.972097) (xy 135.795 77.972097) (xy 135.699452 77.979716)
+ (xy 135.537393 78.029903) (xy 135.395731 78.123252) (xy 135.285685 78.25237) (xy 135.27909 78.267) (xy 135.078948 78.267)
+ (xy 134.8009 77.988952) (xy 134.8009 75.513684) (xy 134.8518 75.535922) (xy 135.100509 75.590605) (xy 135.355102 75.595937)
+ (xy 135.605882 75.551718) (xy 135.843297 75.459631) (xy 136.058305 75.323183) (xy 136.242714 75.147572) (xy 136.389502 74.939487)
+ (xy 136.493077 74.706853) (xy 136.524754 74.567426) (xy 136.540762 74.654647) (xy 136.634505 74.891414) (xy 136.77245 75.105463)
+ (xy 136.949344 75.288642) (xy 137.158449 75.433974) (xy 137.3918 75.535922) (xy 137.640509 75.590605) (xy 137.895102 75.595937)
+ (xy 138.145882 75.551718) (xy 138.383297 75.459631) (xy 138.598305 75.323183) (xy 138.782714 75.147572) (xy 138.929502 74.939487)
+ (xy 139.033077 74.706853) (xy 139.064754 74.567426) (xy 139.080762 74.654647) (xy 139.174505 74.891414) (xy 139.31245 75.105463)
+ (xy 139.489344 75.288642) (xy 139.698449 75.433974) (xy 139.9318 75.535922) (xy 140.180509 75.590605) (xy 140.435102 75.595937)
+ (xy 140.685882 75.551718) (xy 140.923297 75.459631) (xy 141.138305 75.323183) (xy 141.322714 75.147572) (xy 141.469502 74.939487)
+ (xy 141.573077 74.706853) (xy 141.604754 74.567426) (xy 141.620762 74.654647) (xy 141.714505 74.891414) (xy 141.85245 75.105463)
+ (xy 142.029344 75.288642) (xy 142.238449 75.433974) (xy 142.4718 75.535922) (xy 142.720509 75.590605) (xy 142.975102 75.595937)
+ (xy 143.225882 75.551718) (xy 143.463297 75.459631) (xy 143.678305 75.323183) (xy 143.862714 75.147572) (xy 144.009502 74.939487)
+ (xy 144.113077 74.706853) (xy 144.144754 74.567426) (xy 144.160762 74.654647) (xy 144.254505 74.891414) (xy 144.39245 75.105463)
+ (xy 144.569344 75.288642) (xy 144.778449 75.433974) (xy 145.0118 75.535922) (xy 145.260509 75.590605) (xy 145.515102 75.595937)
+ (xy 145.765882 75.551718) (xy 146.003297 75.459631) (xy 146.218305 75.323183) (xy 146.402714 75.147572) (xy 146.549502 74.939487)
+ (xy 146.653077 74.706853) (xy 146.684754 74.567426)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 149.240762 77.194647) (xy 149.334505 77.431414) (xy 149.47245 77.645463) (xy 149.649344 77.828642) (xy 149.858449 77.973974)
+ (xy 150.0918 78.075922) (xy 150.222094 78.104569) (xy 150.144086 78.118291) (xy 149.905657 78.210898) (xy 149.854506 78.23824)
+ (xy 149.791429 78.459297) (xy 150.495 79.162868) (xy 151.198571 78.459297) (xy 151.135494 78.23824) (xy 150.901417 78.135128)
+ (xy 150.767894 78.105469) (xy 150.845882 78.091718) (xy 151.083297 77.999631) (xy 151.298305 77.863183) (xy 151.482714 77.687572)
+ (xy 151.508583 77.6509) (xy 156.507044 77.6509) (xy 158.685243 79.8291) (xy 151.713867 79.8291) (xy 151.734872 79.781417)
+ (xy 151.790336 79.53172) (xy 151.796021 79.276001) (xy 151.751709 79.024086) (xy 151.659102 78.785657) (xy 151.63176 78.734506)
+ (xy 151.410703 78.671429) (xy 150.707132 79.375) (xy 150.721275 79.389143) (xy 150.509143 79.601275) (xy 150.495 79.587132)
+ (xy 150.480858 79.601275) (xy 150.268726 79.389143) (xy 150.282868 79.375) (xy 149.579297 78.671429) (xy 149.35824 78.734506)
+ (xy 149.255128 78.968583) (xy 149.22508 79.10386) (xy 149.204094 78.997876) (xy 149.107055 78.762441) (xy 148.966134 78.550339)
+ (xy 148.7867 78.369647) (xy 148.575586 78.227249) (xy 148.340835 78.128569) (xy 148.228113 78.105431) (xy 148.305882 78.091718)
+ (xy 148.543297 77.999631) (xy 148.758305 77.863183) (xy 148.942714 77.687572) (xy 149.089502 77.479487) (xy 149.193077 77.246853)
+ (xy 149.224754 77.107426)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 140.561275 71.740858) (xy 140.547132 71.755) (xy 140.561275 71.769143) (xy 140.349143 71.981275) (xy 140.335 71.967132)
+ (xy 139.631429 72.670703) (xy 139.694506 72.89176) (xy 139.928583 72.994872) (xy 140.06345 73.024829) (xy 139.966606 73.043303)
+ (xy 139.730499 73.138697) (xy 139.517418 73.278133) (xy 139.335478 73.456302) (xy 139.19161 73.666416) (xy 139.091293 73.900473)
+ (xy 139.065073 74.023828) (xy 139.044094 73.917876) (xy 138.947055 73.682441) (xy 138.806134 73.470339) (xy 138.6267 73.289647)
+ (xy 138.415586 73.147249) (xy 138.180835 73.048569) (xy 138.068113 73.025431) (xy 138.145882 73.011718) (xy 138.383297 72.919631)
+ (xy 138.598305 72.783183) (xy 138.782714 72.607572) (xy 138.929502 72.399487) (xy 139.033077 72.166853) (xy 139.064602 72.028094)
+ (xy 139.078291 72.105914) (xy 139.170898 72.344343) (xy 139.19824 72.395494) (xy 139.419297 72.458571) (xy 140.122868 71.755)
+ (xy 140.108726 71.740858) (xy 140.320858 71.528726) (xy 140.335 71.542868) (xy 140.349143 71.528726)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 137.909405 58.916809) (xy 138.080542 59.126644) (xy 138.2491 59.266087) (xy 138.2491 59.987043) (xy 137.218072 61.018072)
+ (xy 137.170264 61.076274) (xy 137.12179 61.134043) (xy 137.119721 61.137806) (xy 137.117 61.141119) (xy 137.081407 61.2075)
+ (xy 137.045077 61.273583) (xy 137.043779 61.277674) (xy 137.041753 61.281453) (xy 137.019735 61.353473) (xy 136.996929 61.425365)
+ (xy 136.99645 61.429632) (xy 136.995197 61.433732) (xy 136.987582 61.508701) (xy 136.97918 61.583608) (xy 136.979121 61.591993)
+ (xy 136.979105 61.592152) (xy 136.979119 61.5923) (xy 136.9791 61.595) (xy 136.9791 63.743149) (xy 136.888918 63.710579)
+ (xy 136.675 63.821125) (xy 136.675 65.255) (xy 136.695 65.255) (xy 136.695 65.555) (xy 136.675 65.555)
+ (xy 136.675 66.988875) (xy 136.888918 67.099421) (xy 136.9791 67.066851) (xy 136.9791 69.512043) (xy 135.948072 70.543072)
+ (xy 135.900264 70.601274) (xy 135.888143 70.615719) (xy 135.875586 70.607249) (xy 135.640835 70.508569) (xy 135.391387 70.457365)
+ (xy 135.136744 70.455587) (xy 134.886606 70.503303) (xy 134.650499 70.598697) (xy 134.437418 70.738133) (xy 134.255478 70.916302)
+ (xy 134.11161 71.126416) (xy 134.011293 71.360473) (xy 133.992051 71.451001) (xy 133.980801 71.462251) (xy 133.964094 71.377876)
+ (xy 133.867055 71.142441) (xy 133.726134 70.930339) (xy 133.5467 70.749647) (xy 133.5309 70.73899) (xy 133.5309 69.552956)
+ (xy 135.831928 67.251929) (xy 135.879775 67.193679) (xy 135.92821 67.135957) (xy 135.930277 67.132197) (xy 135.933 67.128882)
+ (xy 135.968605 67.062479) (xy 135.983546 67.035302) (xy 136.161082 67.099421) (xy 136.375 66.988875) (xy 136.375 65.555)
+ (xy 136.355 65.555) (xy 136.355 65.255) (xy 136.375 65.255) (xy 136.375 63.821125) (xy 136.161082 63.710579)
+ (xy 136.0709 63.743149) (xy 136.0709 61.932956) (xy 137.101928 60.901929) (xy 137.149757 60.843701) (xy 137.19821 60.785957)
+ (xy 137.200279 60.782194) (xy 137.203 60.778881) (xy 137.238593 60.7125) (xy 137.274923 60.646417) (xy 137.276221 60.642326)
+ (xy 137.278247 60.638547) (xy 137.300269 60.566515) (xy 137.323071 60.494635) (xy 137.323549 60.490369) (xy 137.324803 60.486269)
+ (xy 137.332419 60.411294) (xy 137.34082 60.336392) (xy 137.340879 60.328007) (xy 137.340895 60.327848) (xy 137.340881 60.3277)
+ (xy 137.3409 60.325) (xy 137.3409 59.264766) (xy 137.495713 59.140293) (xy 137.669762 58.932869) (xy 137.795924 58.703382)
+ )
+ )
+ )
+)
diff --git a/demos/test_xil_95108/carte_test.net b/demos/test_xil_95108/carte_test.net
new file mode 100644
index 0000000..6304903
--- /dev/null
+++ b/demos/test_xil_95108/carte_test.net
@@ -0,0 +1,974 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/test_xil_95108/carte_test.sch)
+ (date "30/10/2015 11:21:02")
+ (tool "Eeschema (2015-10-29 BZR 6286)-product")
+ (sheet (number 1) (name /) (tstamps /)
+ (title_block
+ (title "XC95108PC84 EXPERIMENTATION BOARD")
+ (company)
+ (rev)
+ (date "Sun 22 Mar 2015")
+ (source carte_test.sch)
+ (comment (number 1) (value ""))
+ (comment (number 2) (value ""))
+ (comment (number 3) (value ""))
+ (comment (number 4) (value "")))))
+ (components
+ (comp (ref J2)
+ (value DB9FEM)
+ (footprint Connect:DB9F_CI_INVERT)
+ (libsource (lib carte_test_schlib) (part DB9))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDEBEA))
+ (comp (ref D4)
+ (value 1N4004)
+ (footprint Discret:D5)
+ (libsource (lib carte_test_schlib) (part DIODE))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDCDD))
+ (comp (ref C13)
+ (value 10uF)
+ (footprint Discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDCAD))
+ (comp (ref U6)
+ (value LM318N)
+ (footprint Sockets_DIP:DIP-8__300_ELL)
+ (libsource (lib carte_test_schlib) (part LM318N))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDB8B))
+ (comp (ref R10)
+ (value 75)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDB6D))
+ (comp (ref R7)
+ (value 1,1K)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDB60))
+ (comp (ref R6)
+ (value 1,1k)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDB57))
+ (comp (ref R9)
+ (value 2,2K)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDB4B))
+ (comp (ref R8)
+ (value 2,2K)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDB43))
+ (comp (ref C14)
+ (value 10uF)
+ (footprint Discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECDDACB))
+ (comp (ref P4)
+ (value CONN_2X2)
+ (footprint Pin_Headers:Pin_Header_Straight_2x02)
+ (libsource (lib carte_test_schlib) (part CONN_2X2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3ECB3F5E))
+ (comp (ref J1)
+ (value DB25)
+ (footprint Connect:DB25FC)
+ (libsource (lib carte_test_schlib) (part DB25))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4C60F))
+ (comp (ref R5)
+ (value 4,7K)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC8B978))
+ (comp (ref R4)
+ (value 4,7K)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC8B970))
+ (comp (ref SW2)
+ (value SW_PUSH)
+ (footprint Discret:SW_PUSH)
+ (libsource (lib device) (part SW_PUSH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC8B882))
+ (comp (ref SW1)
+ (value SW_PUSH)
+ (footprint Discret:SW_PUSH)
+ (libsource (lib device) (part SW_PUSH))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC8B876))
+ (comp (ref D3)
+ (value LED)
+ (footprint LEDs:LED-5MM)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4D08F))
+ (comp (ref R3)
+ (value 330)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4D082))
+ (comp (ref D2)
+ (value LED)
+ (footprint LEDs:LED-5MM)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1D4))
+ (comp (ref R2)
+ (value 330)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1D3))
+ (comp (ref C12)
+ (value 100nF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4C7DB))
+ (comp (ref C7)
+ (value 100nF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1C8))
+ (comp (ref C11)
+ (value 100nF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1C7))
+ (comp (ref C10)
+ (value 100nF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1C9))
+ (comp (ref C8)
+ (value 100nF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1CA))
+ (comp (ref K1)
+ (value CONN_3)
+ (footprint Socket_Strips:Socket_Strip_Straight_1x03)
+ (libsource (lib carte_test_schlib) (part CONN_3))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4C49F))
+ (comp (ref U5)
+ (value RAM_32KO)
+ (footprint Sockets_DIP:DIP-28__300__600_ELL)
+ (libsource (lib carte_test_schlib) (part RAM_32KO))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4C463))
+ (comp (ref U4)
+ (value 74HC04)
+ (footprint Sockets_DIP:DIP-14__300_ELL)
+ (libsource (lib carte_test_schlib) (part 74HC04))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC4C318))
+ (comp (ref P3)
+ (value CONN_2)
+ (footprint Connect:bornier2)
+ (libsource (lib carte_test_schlib) (part CONN_2))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC2446D))
+ (comp (ref C6)
+ (value 47uF)
+ (footprint Discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC243D6))
+ (comp (ref D1)
+ (value 1N4004)
+ (footprint Discret:D5)
+ (libsource (lib carte_test_schlib) (part DIODE))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC243C8))
+ (comp (ref P2)
+ (value CONN_3)
+ (footprint Socket_Strips:Socket_Strip_Straight_1x03)
+ (libsource (lib carte_test_schlib) (part CONN_3))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC243AC))
+ (comp (ref U3)
+ (value LM7805)
+ (footprint Discret:LM78XX)
+ (libsource (lib carte_test_schlib) (part LM7805))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC2436D))
+ (comp (ref C4)
+ (value 22pF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC242AD))
+ (comp (ref R1)
+ (value 100K)
+ (footprint Discret:R4)
+ (libsource (lib device) (part R))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC242C1))
+ (comp (ref C5)
+ (value 22pF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 52CEE1C5))
+ (comp (ref X1)
+ (value 10MHz)
+ (footprint Crystals:HC-18UH)
+ (libsource (lib carte_test_schlib) (part CRYSTAL))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC2428D))
+ (comp (ref C3)
+ (value 10uF)
+ (footprint Discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC23DCD))
+ (comp (ref C2)
+ (value 10uF)
+ (footprint Discret:CP6)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC23B98))
+ (comp (ref C1)
+ (value 100nF)
+ (footprint Capacitors_SMD:C_1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC23ABA))
+ (comp (ref U1)
+ (value TDA8702)
+ (footprint Sockets_DIP:DIP-16__300_ELL)
+ (libsource (lib carte_test_schlib) (part TDA8702))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 3EC238E5))
+ (comp (ref U2)
+ (value XC95108PC84)
+ (footprint Sockets:PLCC84)
+ (libsource (lib carte_test_schlib) (part XC95108PC84))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 5633AE5A)))
+ (libparts
+ (libpart (lib device) (part C)
+ (description "Unpolarized capacitor")
+ (footprints
+ (fp C?)
+ (fp C_????_*)
+ (fp C_????)
+ (fp SMD*_c)
+ (fp Capacitor*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CP)
+ (description "Polarised capacitor")
+ (footprints
+ (fp CP*)
+ (fp Elko*)
+ (fp TantalC*)
+ (fp C*elec)
+ (fp c_elec*)
+ (fp SMD*_Pol))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib carte_test_schlib) (part LM318N)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) LM318N))
+ (pins
+ (pin (num 1) (name FIN2) (type passive))
+ (pin (num 2) (name -) (type input))
+ (pin (num 3) (name +) (type input))
+ (pin (num 4) (name V-) (type power_in))
+ (pin (num 5) (name FOUT) (type passive))
+ (pin (num 6) (name OUT) (type output))
+ (pin (num 7) (name V+) (type power_in))
+ (pin (num 8) (name FIN1) (type passive))))
+ (libpart (lib carte_test_schlib) (part RAM_32KO)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) RAM_32KO))
+ (pins
+ (pin (num 1) (name A14) (type input))
+ (pin (num 2) (name A12) (type input))
+ (pin (num 3) (name A7) (type input))
+ (pin (num 4) (name A6) (type input))
+ (pin (num 5) (name A5) (type input))
+ (pin (num 6) (name A4) (type input))
+ (pin (num 7) (name A3) (type input))
+ (pin (num 8) (name A2) (type input))
+ (pin (num 9) (name A1) (type input))
+ (pin (num 10) (name A0) (type input))
+ (pin (num 11) (name D0) (type 3state))
+ (pin (num 12) (name D1) (type 3state))
+ (pin (num 13) (name D2) (type 3state))
+ (pin (num 14) (name GND) (type power_in))
+ (pin (num 15) (name D3) (type 3state))
+ (pin (num 16) (name D4) (type 3state))
+ (pin (num 17) (name D5) (type 3state))
+ (pin (num 18) (name D6) (type 3state))
+ (pin (num 19) (name D7) (type 3state))
+ (pin (num 20) (name CS) (type input))
+ (pin (num 21) (name A10) (type input))
+ (pin (num 22) (name OE) (type input))
+ (pin (num 23) (name A11) (type input))
+ (pin (num 24) (name A9) (type input))
+ (pin (num 25) (name A8) (type input))
+ (pin (num 26) (name A13) (type input))
+ (pin (num 27) (name WE) (type input))
+ (pin (num 28) (name VCC) (type power_in))))
+ (libpart (lib carte_test_schlib) (part TDA8702)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) TDA8702))
+ (pins
+ (pin (num 1) (name VREF) (type BiDi))
+ (pin (num 2) (name AGND) (type power_in))
+ (pin (num 3) (name DB2) (type input))
+ (pin (num 4) (name DB3) (type input))
+ (pin (num 5) (name Clock) (type input))
+ (pin (num 6) (name DGND) (type power_in))
+ (pin (num 7) (name DB7) (type input))
+ (pin (num 8) (name DB6) (type input))
+ (pin (num 9) (name DB5) (type input))
+ (pin (num 10) (name DB4) (type input))
+ (pin (num 11) (name DB1) (type input))
+ (pin (num 12) (name DB0) (type input))
+ (pin (num 13) (name VCCD) (type power_in))
+ (pin (num 14) (name VOUT) (type output))
+ (pin (num 15) (name VOUT) (type output))
+ (pin (num 16) (name VCCA) (type power_in))))
+ (libpart (lib carte_test_schlib) (part XC95108PC84)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) XC95108PC84))
+ (pins
+ (pin (num 1) (name P1) (type BiDi))
+ (pin (num 2) (name P2) (type BiDi))
+ (pin (num 3) (name P3) (type BiDi))
+ (pin (num 4) (name P4) (type BiDi))
+ (pin (num 5) (name P5) (type BiDi))
+ (pin (num 6) (name P6) (type BiDi))
+ (pin (num 7) (name P7) (type BiDi))
+ (pin (num 8) (name GND) (type power_in))
+ (pin (num 9) (name I/O/GCK1) (type BiDi))
+ (pin (num 10) (name I/O/GCK2) (type BiDi))
+ (pin (num 11) (name P11) (type BiDi))
+ (pin (num 12) (name I/O/GCK3) (type BiDi))
+ (pin (num 13) (name P13) (type BiDi))
+ (pin (num 14) (name P14) (type BiDi))
+ (pin (num 15) (name P15) (type BiDi))
+ (pin (num 16) (name GND) (type power_in))
+ (pin (num 17) (name P17) (type BiDi))
+ (pin (num 18) (name P18) (type BiDi))
+ (pin (num 19) (name P19) (type BiDi))
+ (pin (num 20) (name P20) (type BiDi))
+ (pin (num 21) (name P21) (type BiDi))
+ (pin (num 22) (name VCCIO) (type power_in))
+ (pin (num 23) (name P23) (type BiDi))
+ (pin (num 24) (name P24) (type BiDi))
+ (pin (num 25) (name P25) (type BiDi))
+ (pin (num 26) (name P26) (type BiDi))
+ (pin (num 27) (name GND) (type power_in))
+ (pin (num 28) (name TDI) (type input))
+ (pin (num 29) (name TMS) (type input))
+ (pin (num 30) (name TCK) (type input))
+ (pin (num 31) (name P31) (type BiDi))
+ (pin (num 32) (name P32) (type BiDi))
+ (pin (num 33) (name P33) (type BiDi))
+ (pin (num 34) (name P34) (type BiDi))
+ (pin (num 35) (name P35) (type BiDi))
+ (pin (num 36) (name P36) (type BiDi))
+ (pin (num 37) (name P37) (type BiDi))
+ (pin (num 38) (name VCC) (type power_in))
+ (pin (num 39) (name P39) (type BiDi))
+ (pin (num 40) (name P40) (type BiDi))
+ (pin (num 41) (name P41) (type BiDi))
+ (pin (num 42) (name GND) (type power_in))
+ (pin (num 43) (name P43) (type BiDi))
+ (pin (num 44) (name P44) (type BiDi))
+ (pin (num 45) (name P45) (type BiDi))
+ (pin (num 46) (name P46) (type BiDi))
+ (pin (num 47) (name P47) (type BiDi))
+ (pin (num 48) (name P48) (type BiDi))
+ (pin (num 49) (name GND) (type power_in))
+ (pin (num 50) (name P50) (type BiDi))
+ (pin (num 51) (name P51) (type BiDi))
+ (pin (num 52) (name P52) (type BiDi))
+ (pin (num 53) (name P53) (type BiDi))
+ (pin (num 54) (name P54) (type BiDi))
+ (pin (num 55) (name P55) (type BiDi))
+ (pin (num 56) (name P56) (type BiDi))
+ (pin (num 57) (name P57) (type BiDi))
+ (pin (num 58) (name P58) (type BiDi))
+ (pin (num 59) (name TDO) (type output))
+ (pin (num 60) (name GND) (type power_in))
+ (pin (num 61) (name P61) (type BiDi))
+ (pin (num 62) (name P62) (type BiDi))
+ (pin (num 63) (name P63) (type BiDi))
+ (pin (num 64) (name VCCIO) (type power_in))
+ (pin (num 65) (name P65) (type BiDi))
+ (pin (num 66) (name P66) (type BiDi))
+ (pin (num 67) (name P67) (type BiDi))
+ (pin (num 68) (name P68) (type BiDi))
+ (pin (num 69) (name P69) (type BiDi))
+ (pin (num 70) (name P70) (type BiDi))
+ (pin (num 71) (name P71) (type BiDi))
+ (pin (num 72) (name P72) (type BiDi))
+ (pin (num 73) (name VCC) (type power_in))
+ (pin (num 74) (name I/O/GSR) (type BiDi))
+ (pin (num 75) (name P75) (type BiDi))
+ (pin (num 76) (name I/O/GTS1) (type BiDi))
+ (pin (num 77) (name I/O/GTS2) (type BiDi))
+ (pin (num 78) (name VCC) (type power_in))
+ (pin (num 79) (name P79) (type BiDi))
+ (pin (num 80) (name P80) (type BiDi))
+ (pin (num 81) (name P81) (type BiDi))
+ (pin (num 82) (name P82) (type BiDi))
+ (pin (num 83) (name P83) (type BiDi))
+ (pin (num 84) (name P84) (type BiDi))))
+ (libpart (lib device) (part R)
+ (description Resistor)
+ (footprints
+ (fp R_*)
+ (fp Resistor_*))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part SW_PUSH)
+ (description "Push Button")
+ (fields
+ (field (name Reference) SW)
+ (field (name Value) SW_PUSH))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part LED)
+ (footprints
+ (fp LED-3MM)
+ (fp LED-5MM)
+ (fp LED-10MM)
+ (fp LED-0603)
+ (fp LED-0805)
+ (fp LED-1206)
+ (fp LEDV))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) LED))
+ (pins
+ (pin (num 1) (name K) (type passive))
+ (pin (num 2) (name A) (type passive))))
+ (libpart (lib carte_test_schlib) (part 74HCT04)
+ (aliases
+ (alias 74HC14)
+ (alias 74HC04)
+ (alias 74LS14))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74HCT04))
+ (pins
+ (pin (num 1) (name ~) (type input))
+ (pin (num 2) (name ~) (type output))
+ (pin (num 3) (name ~) (type input))
+ (pin (num 4) (name ~) (type output))
+ (pin (num 5) (name ~) (type input))
+ (pin (num 6) (name ~) (type output))
+ (pin (num 7) (name GND) (type power_in))
+ (pin (num 8) (name ~) (type output))
+ (pin (num 9) (name ~) (type input))
+ (pin (num 10) (name ~) (type output))
+ (pin (num 11) (name ~) (type input))
+ (pin (num 12) (name ~) (type output))
+ (pin (num 13) (name ~) (type input))
+ (pin (num 14) (name VCC) (type power_in))))
+ (libpart (lib carte_test_schlib) (part 7805)
+ (aliases
+ (alias LM7805)
+ (alias LM7812)
+ (alias 78L05))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 7805))
+ (pins
+ (pin (num GND) (name GND) (type input))
+ (pin (num VI) (name VI) (type input))
+ (pin (num VO) (name VO) (type power_out))))
+ (libpart (lib carte_test_schlib) (part CONN_2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib carte_test_schlib) (part CONN_2X2)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2X2))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))))
+ (libpart (lib carte_test_schlib) (part CONN_3)
+ (fields
+ (field (name Reference) K)
+ (field (name Value) CONN_3))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))
+ (pin (num 3) (name P3) (type passive))))
+ (libpart (lib carte_test_schlib) (part CRYSTAL)
+ (fields
+ (field (name Reference) X)
+ (field (name Value) CRYSTAL))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib carte_test_schlib) (part DB25)
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB25))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))
+ (pin (num 10) (name 10) (type passive))
+ (pin (num 11) (name 11) (type passive))
+ (pin (num 12) (name 12) (type passive))
+ (pin (num 13) (name 13) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P24) (type passive))
+ (pin (num 25) (name P25) (type passive))))
+ (libpart (lib carte_test_schlib) (part DB9)
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB9))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))))
+ (libpart (lib carte_test_schlib) (part DIODE)
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODE))
+ (pins
+ (pin (num 1) (name K) (type passive))
+ (pin (num 2) (name A) (type passive)))))
+ (libraries
+ (library (logical carte_test_schlib)
+ (uri F:\kicad-launchpad\testing\demos\test_xil_95108\carte_test_schlib.lib))
+ (library (logical device)
+ (uri F:\kicad\share\kicad\library\device.lib)))
+ (nets
+ (net (code 1) (name /PARBUS0)
+ (node (ref U2) (pin 10))
+ (node (ref J1) (pin 2)))
+ (net (code 2) (name "Net-(K1-Pad2)")
+ (node (ref K1) (pin 2))
+ (node (ref U5) (pin 1)))
+ (net (code 3) (name /DAT3)
+ (node (ref U1) (pin 4))
+ (node (ref U2) (pin 68)))
+ (net (code 4) (name /DAT2)
+ (node (ref U1) (pin 3))
+ (node (ref U2) (pin 70)))
+ (net (code 5) (name /DAT7)
+ (node (ref U1) (pin 7))
+ (node (ref U2) (pin 62)))
+ (net (code 6) (name /DAT6)
+ (node (ref U1) (pin 8))
+ (node (ref U2) (pin 58)))
+ (net (code 7) (name /DAT5)
+ (node (ref U1) (pin 9))
+ (node (ref U2) (pin 61)))
+ (net (code 8) (name /DAT4)
+ (node (ref U2) (pin 63))
+ (node (ref U1) (pin 10)))
+ (net (code 9) (name /DAT1)
+ (node (ref U2) (pin 66))
+ (node (ref U1) (pin 11)))
+ (net (code 10) (name /DAT0)
+ (node (ref U2) (pin 69))
+ (node (ref U1) (pin 12)))
+ (net (code 11) (name VCC)
+ (node (ref U2) (pin 78))
+ (node (ref U2) (pin 22))
+ (node (ref U2) (pin 38))
+ (node (ref U2) (pin 64))
+ (node (ref U4) (pin 14))
+ (node (ref U2) (pin 73))
+ (node (ref U1) (pin 16))
+ (node (ref U1) (pin 13))
+ (node (ref C7) (pin 1))
+ (node (ref C10) (pin 1))
+ (node (ref R4) (pin 1))
+ (node (ref R5) (pin 1))
+ (node (ref C8) (pin 1))
+ (node (ref C12) (pin 1))
+ (node (ref C3) (pin 1))
+ (node (ref U3) (pin VO))
+ (node (ref J2) (pin 1))
+ (node (ref C11) (pin 1))
+ (node (ref K1) (pin 1))
+ (node (ref U5) (pin 28)))
+ (net (code 12) (name "Net-(C2-Pad1)")
+ (node (ref U1) (pin 14))
+ (node (ref C2) (pin 1)))
+ (net (code 13) (name "Net-(C2-Pad2)")
+ (node (ref R9) (pin 2))
+ (node (ref C2) (pin 2)))
+ (net (code 14) (name GND)
+ (node (ref SW2) (pin 2))
+ (node (ref C8) (pin 2))
+ (node (ref U2) (pin 49))
+ (node (ref J2) (pin 9))
+ (node (ref J2) (pin 8))
+ (node (ref J2) (pin 7))
+ (node (ref C7) (pin 2))
+ (node (ref J2) (pin 6))
+ (node (ref SW1) (pin 2))
+ (node (ref R6) (pin 2))
+ (node (ref U2) (pin 16))
+ (node (ref C10) (pin 2))
+ (node (ref C3) (pin 2))
+ (node (ref J1) (pin 21))
+ (node (ref J1) (pin 20))
+ (node (ref U2) (pin 8))
+ (node (ref U2) (pin 27))
+ (node (ref C13) (pin 1))
+ (node (ref J1) (pin 19))
+ (node (ref D2) (pin 1))
+ (node (ref D3) (pin 1))
+ (node (ref J1) (pin 18))
+ (node (ref C12) (pin 2))
+ (node (ref C11) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref U3) (pin GND))
+ (node (ref P3) (pin 2))
+ (node (ref C6) (pin 2))
+ (node (ref U4) (pin 13))
+ (node (ref U4) (pin 5))
+ (node (ref U4) (pin 11))
+ (node (ref U2) (pin 42))
+ (node (ref U5) (pin 14))
+ (node (ref J1) (pin 25))
+ (node (ref J1) (pin 24))
+ (node (ref J1) (pin 23))
+ (node (ref J1) (pin 22))
+ (node (ref P4) (pin 3))
+ (node (ref C1) (pin 2))
+ (node (ref P2) (pin 2))
+ (node (ref U2) (pin 60))
+ (node (ref U1) (pin 6))
+ (node (ref U1) (pin 2))
+ (node (ref P4) (pin 1))
+ (node (ref U4) (pin 9))
+ (node (ref U4) (pin 7)))
+ (net (code 15) (name "Net-(C1-Pad1)")
+ (node (ref U1) (pin 1))
+ (node (ref C1) (pin 1)))
+ (net (code 16) (name "Net-(C14-Pad1)")
+ (node (ref C14) (pin 1))
+ (node (ref U1) (pin 15)))
+ (net (code 17) (name "Net-(R10-Pad2)")
+ (node (ref R10) (pin 2))
+ (node (ref R7) (pin 1))
+ (node (ref U6) (pin 6)))
+ (net (code 18) (name /-12BATT)
+ (node (ref D4) (pin 1))
+ (node (ref P2) (pin 3)))
+ (net (code 19) (name -12V)
+ (node (ref D4) (pin 2))
+ (node (ref C13) (pin 2))
+ (node (ref U6) (pin 4)))
+ (net (code 20) (name /+12BATT)
+ (node (ref P2) (pin 1))
+ (node (ref D1) (pin 2)))
+ (net (code 21) (name "Net-(R6-Pad1)")
+ (node (ref R9) (pin 1))
+ (node (ref R6) (pin 1))
+ (node (ref U6) (pin 3)))
+ (net (code 22) (name "Net-(R7-Pad2)")
+ (node (ref R7) (pin 2))
+ (node (ref U6) (pin 2))
+ (node (ref R8) (pin 1)))
+ (net (code 23) (name "Net-(C14-Pad2)")
+ (node (ref C14) (pin 2))
+ (node (ref R8) (pin 2)))
+ (net (code 24) (name "Net-(P3-Pad1)")
+ (node (ref P3) (pin 1))
+ (node (ref R10) (pin 1)))
+ (net (code 25) (name /PIN_TEST1)
+ (node (ref U2) (pin 2))
+ (node (ref P4) (pin 4)))
+ (net (code 26) (name /PIN_TEST0)
+ (node (ref P4) (pin 2))
+ (node (ref U2) (pin 1)))
+ (net (code 27) (name "Net-(U2-Pad21)")
+ (node (ref U2) (pin 21)))
+ (net (code 28) (name "Net-(U2-Pad23)")
+ (node (ref U2) (pin 23)))
+ (net (code 29) (name "Net-(D2-Pad2)")
+ (node (ref R2) (pin 1))
+ (node (ref D2) (pin 2)))
+ (net (code 30) (name "Net-(D3-Pad2)")
+ (node (ref D3) (pin 2))
+ (node (ref R3) (pin 1)))
+ (net (code 31) (name "Net-(U2-Pad20)")
+ (node (ref U2) (pin 20)))
+ (net (code 32) (name "Net-(U2-Pad17)")
+ (node (ref U2) (pin 17)))
+ (net (code 33) (name "Net-(U2-Pad57)")
+ (node (ref U2) (pin 57)))
+ (net (code 34) (name /DCLK)
+ (node (ref U2) (pin 67))
+ (node (ref U1) (pin 5)))
+ (net (code 35) (name "Net-(U2-Pad18)")
+ (node (ref U2) (pin 18)))
+ (net (code 36) (name "Net-(U2-Pad19)")
+ (node (ref U2) (pin 19)))
+ (net (code 37) (name "Net-(U2-Pad14)")
+ (node (ref U2) (pin 14)))
+ (net (code 38) (name "Net-(U2-Pad15)")
+ (node (ref U2) (pin 15)))
+ (net (code 39) (name "Net-(U2-Pad65)")
+ (node (ref U2) (pin 65)))
+ (net (code 40) (name "Net-(C4-Pad1)")
+ (node (ref U4) (pin 2))
+ (node (ref U4) (pin 3))
+ (node (ref X1) (pin 2))
+ (node (ref C4) (pin 1))
+ (node (ref R1) (pin 1)))
+ (net (code 41) (name "Net-(C5-Pad1)")
+ (node (ref X1) (pin 1))
+ (node (ref C5) (pin 1))
+ (node (ref R1) (pin 2))
+ (node (ref U4) (pin 1)))
+ (net (code 42) (name +12V)
+ (node (ref U3) (pin VI))
+ (node (ref C6) (pin 1))
+ (node (ref D1) (pin 1))
+ (node (ref U6) (pin 7)))
+ (net (code 43) (name /PAR_AUX0/STROBE*)
+ (node (ref J1) (pin 1))
+ (node (ref U2) (pin 13)))
+ (net (code 44) (name /SW1)
+ (node (ref R4) (pin 2))
+ (node (ref SW2) (pin 1))
+ (node (ref U2) (pin 71)))
+ (net (code 45) (name /SW0)
+ (node (ref U2) (pin 72))
+ (node (ref SW1) (pin 1))
+ (node (ref R5) (pin 2)))
+ (net (code 46) (name /PAR_AUX1/ERROR*)
+ (node (ref U2) (pin 9))
+ (node (ref J1) (pin 15)))
+ (net (code 47) (name /PAR_AUX5/BUSY*)
+ (node (ref J1) (pin 11))
+ (node (ref U2) (pin 80)))
+ (net (code 48) (name /PAR_AUX4/PE)
+ (node (ref J1) (pin 12))
+ (node (ref U2) (pin 77)))
+ (net (code 49) (name /PAR_AUX3/SELECT*)
+ (node (ref J1) (pin 13))
+ (node (ref U2) (pin 75)))
+ (net (code 50) (name /LED2)
+ (node (ref U2) (pin 74))
+ (node (ref R3) (pin 2)))
+ (net (code 51) (name /LED1)
+ (node (ref R2) (pin 2))
+ (node (ref U2) (pin 76)))
+ (net (code 52) (name /PAR_AUX7/INIT)
+ (node (ref U2) (pin 6))
+ (node (ref J1) (pin 16)))
+ (net (code 53) (name /PAR_AUX8/SELECT)
+ (node (ref J1) (pin 17))
+ (node (ref U2) (pin 4)))
+ (net (code 54) (name /PAR_AUX6/ACK)
+ (node (ref J1) (pin 10))
+ (node (ref U2) (pin 79)))
+ (net (code 55) (name /PAR_AUX2/AUTOLF*)
+ (node (ref J1) (pin 14))
+ (node (ref U2) (pin 11)))
+ (net (code 56) (name /PARBUS7)
+ (node (ref J1) (pin 9))
+ (node (ref U2) (pin 82)))
+ (net (code 57) (name /PARBUS6)
+ (node (ref U2) (pin 81))
+ (node (ref J1) (pin 8)))
+ (net (code 58) (name /PARBUS5)
+ (node (ref U2) (pin 83))
+ (node (ref J1) (pin 7)))
+ (net (code 59) (name /PARBUS4)
+ (node (ref J1) (pin 6))
+ (node (ref U2) (pin 84)))
+ (net (code 60) (name /PARBUS3)
+ (node (ref J1) (pin 5))
+ (node (ref U2) (pin 3)))
+ (net (code 61) (name "Net-(U6-Pad1)")
+ (node (ref U6) (pin 1)))
+ (net (code 62) (name "Net-(U6-Pad5)")
+ (node (ref U6) (pin 5)))
+ (net (code 63) (name "Net-(U6-Pad8)")
+ (node (ref U6) (pin 8)))
+ (net (code 64) (name /PARBUS2)
+ (node (ref J1) (pin 4))
+ (node (ref U2) (pin 5)))
+ (net (code 65) (name "Net-(U4-Pad6)")
+ (node (ref U4) (pin 6)))
+ (net (code 66) (name "Net-(U4-Pad8)")
+ (node (ref U4) (pin 8)))
+ (net (code 67) (name /XIN/CLK)
+ (node (ref U4) (pin 4))
+ (node (ref U2) (pin 12)))
+ (net (code 68) (name "Net-(U4-Pad12)")
+ (node (ref U4) (pin 12)))
+ (net (code 69) (name "Net-(U4-Pad10)")
+ (node (ref U4) (pin 10)))
+ (net (code 70) (name /TDI)
+ (node (ref J2) (pin 3))
+ (node (ref U2) (pin 28)))
+ (net (code 71) (name /TMS)
+ (node (ref J2) (pin 5))
+ (node (ref U2) (pin 29)))
+ (net (code 72) (name /TCK)
+ (node (ref J2) (pin 4))
+ (node (ref U2) (pin 30)))
+ (net (code 73) (name /TDO)
+ (node (ref J2) (pin 2))
+ (node (ref U2) (pin 59)))
+ (net (code 74) (name /MA2)
+ (node (ref U2) (pin 26))
+ (node (ref U5) (pin 13)))
+ (net (code 75) (name /MD1)
+ (node (ref U2) (pin 37))
+ (node (ref U5) (pin 9)))
+ (net (code 76) (name /MD0)
+ (node (ref U2) (pin 35))
+ (node (ref U5) (pin 10)))
+ (net (code 77) (name /MD14)
+ (node (ref K1) (pin 3))
+ (node (ref U2) (pin 56)))
+ (net (code 78) (name /R/W-A14)
+ (node (ref U2) (pin 54))
+ (node (ref U5) (pin 27)))
+ (net (code 79) (name /OEMEM)
+ (node (ref U5) (pin 22))
+ (node (ref U2) (pin 43)))
+ (net (code 80) (name /CSMEM)
+ (node (ref U5) (pin 20))
+ (node (ref U2) (pin 39)))
+ (net (code 81) (name /MA7)
+ (node (ref U5) (pin 19))
+ (node (ref U2) (pin 36)))
+ (net (code 82) (name /MA6)
+ (node (ref U2) (pin 34))
+ (node (ref U5) (pin 18)))
+ (net (code 83) (name /MA5)
+ (node (ref U5) (pin 17))
+ (node (ref U2) (pin 31)))
+ (net (code 84) (name /MA4)
+ (node (ref U2) (pin 24))
+ (node (ref U5) (pin 16)))
+ (net (code 85) (name /MA3)
+ (node (ref U5) (pin 15))
+ (node (ref U2) (pin 25)))
+ (net (code 86) (name /MD2)
+ (node (ref U5) (pin 8))
+ (node (ref U2) (pin 40)))
+ (net (code 87) (name /MA1)
+ (node (ref U2) (pin 32))
+ (node (ref U5) (pin 12)))
+ (net (code 88) (name /MA0)
+ (node (ref U2) (pin 33))
+ (node (ref U5) (pin 11)))
+ (net (code 89) (name /MD13)
+ (node (ref U2) (pin 53))
+ (node (ref U5) (pin 26)))
+ (net (code 90) (name /MD12)
+ (node (ref U5) (pin 2))
+ (node (ref U2) (pin 55)))
+ (net (code 91) (name /MD11)
+ (node (ref U5) (pin 23))
+ (node (ref U2) (pin 45)))
+ (net (code 92) (name /MD10)
+ (node (ref U5) (pin 21))
+ (node (ref U2) (pin 41)))
+ (net (code 93) (name /MD9)
+ (node (ref U5) (pin 24))
+ (node (ref U2) (pin 47)))
+ (net (code 94) (name /PARBUS1)
+ (node (ref U2) (pin 7))
+ (node (ref J1) (pin 3)))
+ (net (code 95) (name /MD8)
+ (node (ref U2) (pin 51))
+ (node (ref U5) (pin 25)))
+ (net (code 96) (name /MD7)
+ (node (ref U5) (pin 3))
+ (node (ref U2) (pin 52)))
+ (net (code 97) (name /MD6)
+ (node (ref U5) (pin 4))
+ (node (ref U2) (pin 50)))
+ (net (code 98) (name /MD5)
+ (node (ref U5) (pin 5))
+ (node (ref U2) (pin 48)))
+ (net (code 99) (name /MD4)
+ (node (ref U5) (pin 6))
+ (node (ref U2) (pin 46)))
+ (net (code 100) (name /MD3)
+ (node (ref U2) (pin 44))
+ (node (ref U5) (pin 7))))) \ No newline at end of file
diff --git a/demos/test_xil_95108/carte_test.pro b/demos/test_xil_95108/carte_test.pro
new file mode 100644
index 0000000..ba1e32c
--- /dev/null
+++ b/demos/test_xil_95108/carte_test.pro
@@ -0,0 +1,89 @@
+update=30/10/2015 11:04:44
+version=1
+last_client=kicad
+[pcbnew]
+version=1
+LibDir=
+Sel_Mod=1
+NetType=0
+PadDril=320
+PadDimH=550
+PadDimV=550
+PadOfDH=0
+PadOfDV=0
+PadForm=1
+PadMask=14745599
+PadAttr=0
+PadOrie=0
+ViaDiam=450
+ViaDril=250
+Isol=100
+Mlayer=536838151
+Lpiste=250
+RouteTo=15
+RouteBo=0
+TypeVia=3
+Segm45=1
+Racc45=1
+Unite=0
+SegFill=1
+SegAffG=0
+NewAffG=1
+PadFill=1
+PadAffG=1
+PadSNum=1
+ModAffC=0
+ModAffT=0
+PcbAffT=0
+SgPcb45=1
+TxtPcbV=600
+TxtPcbH=600
+GridX=500
+GridY=500
+TxtModV=500
+TxtModH=500
+TxtModW=80
+HPGLnum=1
+Pltmarg=300
+HPGdiam=15
+HPGLSpd=20
+HPGLrec=2
+HPGLorg=0
+GERBmin=15
+GERBfmt=1
+VEgarde=100
+DrawLar=120
+EdgeLar=120
+TxtLar=80
+MSegLar=120
+ForPlot=1
+WpenSer=10
+UserGrX=500
+UserGrY=500
+UserGrU=1
+DivGrPc=1
+TimeOut=600
+ShowRat=0
+ShowMRa=0
+[pcbnew/libraries]
+LibName1=connect
+LibName2=discret
+LibName3=pin_array
+LibName4=divers
+LibName5=libcms
+LibName6=dip_sockets
+LibDir=
+[cvpcb]
+version=1
+NetIExt=.net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=device
+LibName2=carte_test_schlib
+LibName3=power
diff --git a/demos/test_xil_95108/carte_test.sch b/demos/test_xil_95108/carte_test.sch
new file mode 100644
index 0000000..826ed41
--- /dev/null
+++ b/demos/test_xil_95108/carte_test.sch
@@ -0,0 +1,1834 @@
+EESchema Schematic File Version 2
+LIBS:device
+LIBS:carte_test_schlib
+LIBS:power
+LIBS:carte_test-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 1 1
+Title "XC95108PC84 EXPERIMENTATION BOARD"
+Date "Sun 22 Mar 2015"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L DB9 J2
+U 1 1 3ECDEBEA
+P 4100 1650
+F 0 "J2" V 4100 2250 70 0000 C CNN
+F 1 "DB9FEM" V 3950 2400 70 0000 C CNN
+F 2 "Connect:DB9F_CI_INVERT" V 4300 1650 60 0000 C CNN
+F 3 "" H 4100 1650 60 0001 C CNN
+ 1 4100 1650
+ 0 1 -1 0
+$EndComp
+$Comp
+L PWR_FLAG #FLG01
+U 1 1 3ECDDD9A
+P 2400 7750
+F 0 "#FLG01" H 2400 8020 30 0001 C CNN
+F 1 "PWR_FLAG" H 2400 7950 30 0000 C CNN
+F 2 "" H 2400 7750 60 0001 C CNN
+F 3 "" H 2400 7750 60 0001 C CNN
+ 1 2400 7750
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODE D4
+U 1 1 3ECDDCDD
+P 2100 8000
+F 0 "D4" H 2000 8050 50 0000 C CNN
+F 1 "1N4004" H 2100 7901 50 0000 C CNN
+F 2 "Discret:D5" H 2100 7850 30 0000 C CNN
+F 3 "" H 2100 8000 60 0001 C CNN
+ 1 2100 8000
+ -1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG02
+U 1 1 3ECDDCBE
+P 2300 8050
+F 0 "#FLG02" H 2300 8320 30 0001 C CNN
+F 1 "PWR_FLAG" H 2300 8280 30 0000 C CNN
+F 2 "" H 2300 8050 60 0001 C CNN
+F 3 "" H 2300 8050 60 0001 C CNN
+ 1 2300 8050
+ 1 0 0 1
+$EndComp
+$Comp
+L GND #PWR03
+U 1 1 3ECDDCB7
+P 2400 8650
+F 0 "#PWR03" H 2400 8650 40 0001 C CNN
+F 1 "GND" H 2400 8580 40 0001 C CNN
+F 2 "" H 2400 8650 60 0001 C CNN
+F 3 "" H 2400 8650 60 0001 C CNN
+ 1 2400 8650
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C13
+U 1 1 3ECDDCAD
+P 2400 8500
+F 0 "C13" H 2450 8600 50 0000 L CNN
+F 1 "10uF" H 2450 8400 50 0000 L CNN
+F 2 "Discret:CP6" H 2400 8500 60 0000 C CNN
+F 3 "" H 2400 8500 60 0001 C CNN
+ 1 2400 8500
+ 1 0 0 1
+$EndComp
+$Comp
+L -12V #PWR139
+U 1 1 3ECDDC9F
+P 2550 8050
+F 0 "#PWR139" H 2550 8250 40 0001 C CNN
+F 1 "-12V" H 2550 8200 40 0000 C CNN
+F 2 "" H 2550 8050 60 0001 C CNN
+F 3 "" H 2550 8050 60 0001 C CNN
+ 1 2550 8050
+ 1 0 0 1
+$EndComp
+NoConn ~ 13400 4200
+NoConn ~ 13400 4100
+NoConn ~ 13400 3900
+$Comp
+L -12V #PWR118
+U 1 1 3ECDDC1A
+P 12800 3550
+F 0 "#PWR118" H 12800 3750 40 0001 C CNN
+F 1 "-12V" H 12800 3700 40 0000 C CNN
+F 2 "" H 12800 3550 60 0001 C CNN
+F 3 "" H 12800 3550 60 0001 C CNN
+ 1 12800 3550
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #PWR04
+U 1 1 3ECDDC05
+P 12800 4450
+F 0 "#PWR04" H 12800 4650 40 0001 C CNN
+F 1 "+12V" H 12800 4600 40 0000 C CNN
+F 2 "" H 12800 4450 60 0001 C CNN
+F 3 "" H 12800 4450 60 0001 C CNN
+ 1 12800 4450
+ 1 0 0 1
+$EndComp
+$Comp
+L +12V #PWR05
+U 1 1 3ECDDBF2
+P 2700 7750
+F 0 "#PWR05" H 2700 7950 40 0001 C CNN
+F 1 "+12V" H 2700 7900 40 0000 C CNN
+F 2 "" H 2700 7750 60 0001 C CNN
+F 3 "" H 2700 7750 60 0001 C CNN
+ 1 2700 7750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR06
+U 1 1 3ECDDBE0
+P 12300 4650
+F 0 "#PWR06" H 12300 4650 40 0001 C CNN
+F 1 "GND" H 12300 4580 40 0001 C CNN
+F 2 "" H 12300 4650 60 0001 C CNN
+F 3 "" H 12300 4650 60 0001 C CNN
+ 1 12300 4650
+ 1 0 0 -1
+$EndComp
+$Comp
+L LM318N U6
+U 1 1 3ECDDB8B
+P 12900 4000
+F 0 "U6" H 13000 4300 60 0000 C CNN
+F 1 "LM318N" H 13110 3751 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-8__300_ELL" H 13250 4400 30 0000 C CNN
+F 3 "" H 12900 4000 60 0001 C CNN
+ 1 12900 4000
+ 1 0 0 1
+$EndComp
+$Comp
+L R R10
+U 1 1 3ECDDB6D
+P 13850 4000
+F 0 "R10" V 13930 4000 50 0000 C CNN
+F 1 "75" V 13850 4000 50 0000 C CNN
+F 2 "Discret:R4" V 13750 4000 60 0000 C CNN
+F 3 "" H 13850 4000 60 0001 C CNN
+ 1 13850 4000
+ 0 1 1 0
+$EndComp
+$Comp
+L R R7
+U 1 1 3ECDDB60
+P 12950 3300
+F 0 "R7" V 13030 3300 50 0000 C CNN
+F 1 "1,1K" V 12950 3300 50 0000 C CNN
+F 2 "Discret:R4" V 12850 3300 60 0000 C CNN
+F 3 "" H 12950 3300 60 0001 C CNN
+ 1 12950 3300
+ 0 1 1 0
+$EndComp
+$Comp
+L R R6
+U 1 1 3ECDDB57
+P 12300 4500
+F 0 "R6" H 12150 4650 50 0000 C CNN
+F 1 "1,1k" V 12300 4500 50 0000 C CNN
+F 2 "Discret:R4" H 12300 4500 60 0000 C CNN
+F 3 "" H 12300 4500 60 0001 C CNN
+ 1 12300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R9
+U 1 1 3ECDDB4B
+P 12000 4200
+F 0 "R9" V 12080 4200 50 0000 C CNN
+F 1 "2,2K" V 12000 4200 50 0000 C CNN
+F 2 "Discret:R4" V 11900 4200 60 0000 C CNN
+F 3 "" H 12000 4200 60 0001 C CNN
+ 1 12000 4200
+ 0 1 1 0
+$EndComp
+$Comp
+L R R8
+U 1 1 3ECDDB43
+P 12000 3850
+F 0 "R8" V 12080 3850 50 0000 C CNN
+F 1 "2,2K" V 12000 3850 50 0000 C CNN
+F 2 "Discret:R4" V 11900 3850 60 0000 C CNN
+F 3 "" H 12000 3850 60 0001 C CNN
+ 1 12000 3850
+ 0 1 1 0
+$EndComp
+$Comp
+L CP C14
+U 1 1 3ECDDACB
+P 11400 3850
+F 0 "C14" V 11550 3850 50 0000 C CNN
+F 1 "10uF" V 11250 3850 50 0000 C TNN
+F 2 "Discret:CP6" V 11600 3850 60 0000 C CNN
+F 3 "" H 11400 3850 60 0001 C CNN
+ 1 11400 3850
+ 0 -1 -1 0
+$EndComp
+Text Label 4150 3000 0 60 ~ 0
+PIN_TEST1
+Text Label 4150 2900 0 60 ~ 0
+PIN_TEST0
+$Comp
+L GND #PWR07
+U 1 1 3ECB3F8B
+P 13550 1650
+F 0 "#PWR07" H 13550 1650 40 0001 C CNN
+F 1 "GND" H 13550 1580 40 0001 C CNN
+F 2 "" H 13550 1650 60 0001 C CNN
+F 3 "" H 13550 1650 60 0001 C CNN
+ 1 13550 1650
+ 1 0 0 -1
+$EndComp
+Text Label 14450 1600 0 60 ~ 0
+PIN_TEST1
+Text Label 14450 1500 0 60 ~ 0
+PIN_TEST0
+$Comp
+L CONN_2X2 P4
+U 1 1 3ECB3F5E
+P 14000 1550
+F 0 "P4" H 14000 1700 50 0000 C CNN
+F 1 "CONN_2X2" H 14010 1420 40 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x02" H 14000 1350 30 0000 C CNN
+F 3 "" H 14000 1550 60 0001 C CNN
+ 1 14000 1550
+ 1 0 0 -1
+$EndComp
+Text Label 3900 3400 0 60 ~ 0
+PAR_AUX7/INIT
+$Comp
+L GND #PWR08
+U 1 1 3ECB3A8F
+P 1950 5000
+F 0 "#PWR08" H 1950 5000 40 0001 C CNN
+F 1 "GND" H 1950 4932 40 0001 C CNN
+F 2 "" H 1950 5000 60 0001 C CNN
+F 3 "" H 1950 5000 60 0001 C CNN
+ 1 1950 5000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR09
+U 1 1 3ECB3A8D
+P 1950 4800
+F 0 "#PWR09" H 1950 4800 40 0001 C CNN
+F 1 "GND" H 1950 4732 40 0001 C CNN
+F 2 "" H 1950 4800 60 0001 C CNN
+F 3 "" H 1950 4800 60 0001 C CNN
+ 1 1950 4800
+ 0 -1 -1 0
+$EndComp
+Text Label 3800 3200 0 60 ~ 0
+PAR_AUX8/SELECT
+$Comp
+L GND #PWR010
+U 1 1 3ECB3A50
+P 1950 4400
+F 0 "#PWR010" H 1950 4400 40 0001 C CNN
+F 1 "GND" H 1950 4332 40 0001 C CNN
+F 2 "" H 1950 4400 60 0001 C CNN
+F 3 "" H 1950 4400 60 0001 C CNN
+ 1 1950 4400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR011
+U 1 1 3ECB3A4D
+P 1950 4200
+F 0 "#PWR011" H 1950 4200 40 0001 C CNN
+F 1 "GND" H 1950 4132 40 0001 C CNN
+F 2 "" H 1950 4200 60 0001 C CNN
+F 3 "" H 1950 4200 60 0001 C CNN
+ 1 1950 4200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR012
+U 1 1 3ECB3A4B
+P 1950 4000
+F 0 "#PWR012" H 1950 4000 40 0001 C CNN
+F 1 "GND" H 1950 3932 40 0001 C CNN
+F 2 "" H 1950 4000 60 0001 C CNN
+F 3 "" H 1950 4000 60 0001 C CNN
+ 1 1950 4000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR013
+U 1 1 3ECB3A48
+P 1950 3800
+F 0 "#PWR013" H 1950 3800 40 0001 C CNN
+F 1 "GND" H 1950 3732 40 0001 C CNN
+F 2 "" H 1950 3800 60 0001 C CNN
+F 3 "" H 1950 3800 60 0001 C CNN
+ 1 1950 3800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L DB25 J1
+U 1 1 3EC4C60F
+P 1500 4700
+F 0 "J1" H 1550 6050 70 0000 C CNN
+F 1 "DB25" H 1450 3350 70 0000 C CNN
+F 2 "Connect:DB25FC" H 1450 3250 60 0000 C CNN
+F 3 "" H 1500 4700 60 0001 C CNN
+ 1 1500 4700
+ -1 0 0 -1
+$EndComp
+NoConn ~ 4800 4900
+NoConn ~ 4800 4800
+NoConn ~ 4800 4700
+NoConn ~ 4800 4600
+NoConn ~ 4800 4500
+NoConn ~ 4800 4400
+NoConn ~ 4800 4300
+NoConn ~ 4800 4200
+Text Label 2050 5200 0 60 ~ 0
+PAR_AUX8/SELECT
+Text Label 2050 5400 0 60 ~ 0
+PAR_AUX7/INIT
+NoConn ~ 7100 4700
+NoConn ~ 7100 5200
+Text Label 10600 1850 0 60 ~ 0
+SW1
+Text Label 10600 1600 0 60 ~ 0
+SW0
+$Comp
+L VCC #PWR014
+U 1 1 3EC8B981
+P 11200 1200
+F 0 "#PWR014" H 11200 1400 40 0001 C CNN
+F 1 "VCC" H 11200 1350 40 0000 C CNN
+F 2 "" H 11200 1200 60 0001 C CNN
+F 3 "" H 11200 1200 60 0001 C CNN
+ 1 11200 1200
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR015
+U 1 1 3EC8B97E
+P 11000 1200
+F 0 "#PWR015" H 11000 1400 40 0001 C CNN
+F 1 "VCC" H 11000 1350 40 0000 C CNN
+F 2 "" H 11000 1200 60 0001 C CNN
+F 3 "" H 11000 1200 60 0001 C CNN
+ 1 11000 1200
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R5
+U 1 1 3EC8B978
+P 11000 1350
+F 0 "R5" V 11080 1350 50 0000 C CNN
+F 1 "4,7K" V 11000 1350 50 0000 C CNN
+F 2 "Discret:R4" V 10936 1344 30 0000 C CNN
+F 3 "" H 11000 1350 60 0001 C CNN
+ 1 11000 1350
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R4
+U 1 1 3EC8B970
+P 11200 1350
+F 0 "R4" V 11280 1350 50 0000 C CNN
+F 1 "4,7K" V 11200 1350 50 0000 C CNN
+F 2 "Discret:R4" V 11324 1356 30 0000 C CNN
+F 3 "" H 11200 1350 60 0001 C CNN
+ 1 11200 1350
+ 1 0 0 -1
+$EndComp
+Text Label 7150 4000 0 60 ~ 0
+SW1
+Text Label 7150 3900 0 60 ~ 0
+SW0
+$Comp
+L GND #PWR016
+U 1 1 3EC8B890
+P 12350 1850
+F 0 "#PWR016" H 12350 1850 40 0001 C CNN
+F 1 "GND" H 12350 1780 40 0001 C CNN
+F 2 "" H 12350 1850 60 0001 C CNN
+F 3 "" H 12350 1850 60 0001 C CNN
+ 1 12350 1850
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR017
+U 1 1 3EC8B88C
+P 12350 1600
+F 0 "#PWR017" H 12350 1600 40 0001 C CNN
+F 1 "GND" H 12350 1530 40 0001 C CNN
+F 2 "" H 12350 1600 60 0001 C CNN
+F 3 "" H 12350 1600 60 0001 C CNN
+ 1 12350 1600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L SW_PUSH SW2
+U 1 1 3EC8B882
+P 12000 1850
+F 0 "SW2" H 12000 1700 50 0000 C CNN
+F 1 "SW_PUSH" H 12000 1770 50 0000 C CNN
+F 2 "Discret:SW_PUSH" H 12050 1650 30 0000 C CNN
+F 3 "" H 12000 1850 60 0001 C CNN
+ 1 12000 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L SW_PUSH SW1
+U 1 1 3EC8B876
+P 12000 1600
+F 0 "SW1" H 12150 1750 50 0000 C CNN
+F 1 "SW_PUSH" H 11800 1750 50 0000 C CNN
+F 2 "Discret:SW_PUSH" H 12000 1800 30 0000 C CNN
+F 3 "" H 12000 1600 60 0001 C CNN
+ 1 12000 1600
+ 1 0 0 -1
+$EndComp
+Text Label 3750 3600 0 60 ~ 0
+PAR_AUX1/ERROR*
+Text Label 3750 4000 0 60 ~ 0
+PAR_AUX0/STROBE*
+Text Label 7150 3300 0 60 ~ 0
+PAR_AUX5/BUSY*
+Text Label 7150 3500 0 60 ~ 0
+PAR_AUX4/PE
+Text Label 7150 3700 0 60 ~ 0
+PAR_AUX3/SELECT*
+$Comp
+L GND #PWR018
+U 1 1 3EC4F034
+P 1950 4600
+F 0 "#PWR018" H 1950 4600 40 0001 C CNN
+F 1 "GND" H 1950 4532 40 0001 C CNN
+F 2 "" H 1950 4600 60 0001 C CNN
+F 3 "" H 1950 4600 60 0001 C CNN
+ 1 1950 4600
+ 0 -1 -1 0
+$EndComp
+Text Label 7150 3800 0 60 ~ 0
+LED2
+Text Label 7150 3600 0 60 ~ 0
+LED1
+Text Label 10750 2600 0 60 ~ 0
+LED2
+Text Label 10750 2300 0 60 ~ 0
+LED1
+$Comp
+L GND #PWR019
+U 1 1 3EC4D095
+P 11950 2600
+F 0 "#PWR019" H 11950 2600 40 0001 C CNN
+F 1 "GND" H 11950 2530 40 0001 C CNN
+F 2 "" H 11950 2600 60 0001 C CNN
+F 3 "" H 11950 2600 60 0001 C CNN
+ 1 11950 2600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L LED D3
+U 1 1 3EC4D08F
+P 11700 2600
+F 0 "D3" H 11700 2700 50 0000 C CNN
+F 1 "LED" H 11700 2500 50 0000 C CNN
+F 2 "LEDs:LED-5MM" H 11450 2500 30 0000 C CNN
+F 3 "" H 11700 2600 60 0001 C CNN
+ 1 11700 2600
+ -1 0 0 1
+$EndComp
+$Comp
+L R R3
+U 1 1 3EC4D082
+P 11250 2600
+F 0 "R3" V 11330 2600 50 0000 C CNN
+F 1 "330" V 11250 2600 50 0000 C CNN
+F 2 "Discret:R4" V 11350 2600 60 0000 C CNN
+F 3 "" H 11250 2600 60 0001 C CNN
+ 1 11250 2600
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR020
+U 1 1 52CEE1D5
+P 11950 2300
+F 0 "#PWR020" H 11950 2300 40 0001 C CNN
+F 1 "GND" H 11950 2230 40 0001 C CNN
+F 2 "" H 11950 2300 60 0001 C CNN
+F 3 "" H 11950 2300 60 0001 C CNN
+ 1 11950 2300
+ 0 -1 -1 0
+$EndComp
+$Comp
+L LED D2
+U 1 1 52CEE1D4
+P 11700 2300
+F 0 "D2" H 11700 2400 50 0000 C CNN
+F 1 "LED" H 11700 2200 50 0000 C CNN
+F 2 "LEDs:LED-5MM" H 11450 2200 30 0000 C CNN
+F 3 "" H 11700 2300 60 0001 C CNN
+ 1 11700 2300
+ -1 0 0 1
+$EndComp
+$Comp
+L R R2
+U 1 1 52CEE1D3
+P 11250 2300
+F 0 "R2" V 11330 2300 50 0000 C CNN
+F 1 "330" V 11250 2300 50 0000 C CNN
+F 2 "Discret:R4" V 11150 2300 60 0000 C CNN
+F 3 "" H 11250 2300 60 0001 C CNN
+ 1 11250 2300
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #PWR021
+U 1 1 3EC4C7F6
+P 4700 9400
+F 0 "#PWR021" H 4700 9400 40 0001 C CNN
+F 1 "GND" H 4700 9330 40 0001 C CNN
+F 2 "" H 4700 9400 60 0001 C CNN
+F 3 "" H 4700 9400 60 0001 C CNN
+ 1 4700 9400
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR022
+U 1 1 3EC4C7EA
+P 4700 9100
+F 0 "#PWR022" H 4700 9300 40 0001 C CNN
+F 1 "VCC" H 4700 9250 40 0000 C CNN
+F 2 "" H 4700 9100 60 0001 C CNN
+F 3 "" H 4700 9100 60 0001 C CNN
+ 1 4700 9100
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C12
+U 1 1 3EC4C7DB
+P 4700 9250
+F 0 "C12" H 4750 9350 50 0000 L CNN
+F 1 "100nF" H 4750 9150 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" V 4600 9250 30 0000 C CNN
+F 3 "" H 4700 9250 60 0001 C CNN
+ 1 4700 9250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR023
+U 1 1 52CEE1D2
+P 12300 7850
+F 0 "#PWR023" H 12300 7850 40 0001 C CNN
+F 1 "GND" H 12300 7780 40 0001 C CNN
+F 2 "" H 12300 7850 60 0001 C CNN
+F 3 "" H 12300 7850 60 0001 C CNN
+ 1 12300 7850
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR024
+U 1 1 52CEE1CE
+P 12300 7550
+F 0 "#PWR024" H 12300 7750 40 0001 C CNN
+F 1 "VCC" H 12300 7700 40 0000 C CNN
+F 2 "" H 12300 7550 60 0001 C CNN
+F 3 "" H 12300 7550 60 0001 C CNN
+ 1 12300 7550
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C7
+U 1 1 52CEE1C8
+P 12300 7700
+F 0 "C7" H 12350 7800 50 0000 L CNN
+F 1 "100nF" H 12350 7600 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" H 12300 7700 60 0000 C CNN
+F 3 "" H 12300 7700 60 0001 C CNN
+ 1 12300 7700
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR025
+U 1 1 52CEE1CD
+P 8000 1700
+F 0 "#PWR025" H 8000 1900 40 0001 C CNN
+F 1 "VCC" H 8000 1800 40 0000 C CNN
+F 2 "" H 8000 1700 60 0001 C CNN
+F 3 "" H 8000 1700 60 0001 C CNN
+ 1 8000 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C11
+U 1 1 52CEE1C7
+P 8000 1900
+F 0 "C11" H 8050 2000 50 0000 L CNN
+F 1 "100nF" H 8050 1800 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" V 7900 1900 20 0000 C CNN
+F 3 "" H 8000 1900 60 0001 C CNN
+ 1 8000 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR026
+U 1 1 52CEE1CC
+P 7600 1700
+F 0 "#PWR026" H 7600 1900 40 0001 C CNN
+F 1 "VCC" H 7600 1800 40 0000 C CNN
+F 2 "" H 7600 1700 60 0001 C CNN
+F 3 "" H 7600 1700 60 0001 C CNN
+ 1 7600 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C10
+U 1 1 52CEE1C9
+P 7600 1900
+F 0 "C10" H 7650 2000 50 0000 L CNN
+F 1 "100nF" H 7650 1800 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" V 7500 1900 20 0000 C CNN
+F 3 "" H 7600 1900 60 0001 C CNN
+ 1 7600 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR027
+U 1 1 52CEE1CB
+P 7200 1700
+F 0 "#PWR027" H 7200 1900 40 0001 C CNN
+F 1 "VCC" H 7200 1800 40 0000 C CNN
+F 2 "" H 7200 1700 60 0001 C CNN
+F 3 "" H 7200 1700 60 0001 C CNN
+ 1 7200 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C8
+U 1 1 52CEE1CA
+P 7200 1900
+F 0 "C8" H 7250 2000 50 0000 L CNN
+F 1 "100nF" H 7250 1800 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" V 7100 1900 20 0000 C CNN
+F 3 "" H 7200 1900 60 0001 C CNN
+ 1 7200 1900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR028
+U 1 1 3EC4C76B
+P 1950 3600
+F 0 "#PWR028" H 1950 3600 40 0001 C CNN
+F 1 "GND" H 1950 3532 40 0001 C CNN
+F 2 "" H 1950 3600 60 0001 C CNN
+F 3 "" H 1950 3600 60 0001 C CNN
+ 1 1950 3600
+ 0 -1 -1 0
+$EndComp
+Text Label 2050 4100 0 60 ~ 0
+PAR_AUX6/ACK
+Text Label 2050 3900 0 60 ~ 0
+PAR_AUX5/BUSY*
+Text Label 2050 3700 0 60 ~ 0
+PAR_AUX4/PE
+Text Label 2050 3500 0 60 ~ 0
+PAR_AUX3/SELECT*
+Text Label 2050 5800 0 60 ~ 0
+PAR_AUX2/AUTOLF*
+Text Label 2050 5600 0 60 ~ 0
+PAR_AUX1/ERROR*
+Text Label 2050 5900 0 60 ~ 0
+PAR_AUX0/STROBE*
+Text Label 2050 4300 0 60 ~ 0
+PARBUS7
+Text Label 2050 4500 0 60 ~ 0
+PARBUS6
+Text Label 2050 4700 0 60 ~ 0
+PARBUS5
+Text Label 2050 4900 0 60 ~ 0
+PARBUS4
+Text Label 2050 5100 0 60 ~ 0
+PARBUS3
+Text Label 2050 5300 0 60 ~ 0
+PARBUS2
+Text Label 2050 5500 0 60 ~ 0
+PARBUS1
+Text Label 2050 5700 0 60 ~ 0
+PARBUS0
+Text Label 7150 3400 0 60 ~ 0
+PAR_AUX6/ACK
+Text Label 3750 3800 0 60 ~ 0
+PAR_AUX2/AUTOLF*
+Text Label 7150 3100 0 60 ~ 0
+PARBUS7
+Text Label 7150 3200 0 60 ~ 0
+PARBUS6
+Text Label 7150 3000 0 60 ~ 0
+PARBUS5
+Text Label 7150 2900 0 60 ~ 0
+PARBUS4
+Text Label 4200 3100 0 60 ~ 0
+PARBUS3
+Text Label 4200 3300 0 60 ~ 0
+PARBUS2
+Text Label 4200 3500 0 60 ~ 0
+PARBUS1
+Text Label 4200 3700 0 60 ~ 0
+PARBUS0
+Text Label 7200 5800 0 60 ~ 0
+MD13
+Text Label 7250 5600 0 60 ~ 0
+MD12
+Text Label 7200 6500 0 60 ~ 0
+MD11
+Text Label 4350 6300 0 60 ~ 0
+MD10
+Text Label 7200 6300 0 60 ~ 0
+MD9
+Text Label 7200 6000 0 60 ~ 0
+MD8
+Text Label 7200 5900 0 60 ~ 0
+MD7
+Text Label 7200 6100 0 60 ~ 0
+MD6
+Text Label 7200 6200 0 60 ~ 0
+MD5
+Text Label 7200 6400 0 60 ~ 0
+MD4
+Text Label 4350 6500 0 60 ~ 0
+MD3
+Text Label 4350 6200 0 60 ~ 0
+MD2
+Text Label 4350 6000 0 60 ~ 0
+MD1
+Text Label 4350 5800 0 60 ~ 0
+MD0
+Text Label 7250 5500 0 60 ~ 0
+MD14
+Text Label 7150 5700 0 60 ~ 0
+R/W-A14
+Text Label 4350 6400 0 60 ~ 0
+OEMEM
+Text Label 4350 6100 0 60 ~ 0
+CSMEM
+Text Label 4500 5900 0 60 ~ 0
+MA7
+Text Label 4500 5700 0 60 ~ 0
+MA6
+Text Label 4500 5300 0 60 ~ 0
+MA5
+Text Label 4500 5000 0 60 ~ 0
+MA4
+Text Label 4500 5100 0 60 ~ 0
+MA3
+Text Label 4500 5200 0 60 ~ 0
+MA2
+Text Label 4500 5500 0 60 ~ 0
+MA1
+Text Label 4500 5600 0 60 ~ 0
+MA0
+Text Label 10200 7800 0 60 ~ 0
+R/W-A14
+Text Label 10250 7700 0 60 ~ 0
+OEMEM
+Text Label 10250 7600 0 60 ~ 0
+CSMEM
+Text Label 9450 7650 0 60 ~ 0
+MD14
+Text Label 10250 7300 0 60 ~ 0
+MD13
+Text Label 10250 7200 0 60 ~ 0
+MD12
+Text Label 10250 7100 0 60 ~ 0
+MD11
+Text Label 10250 7000 0 60 ~ 0
+MD10
+Text Label 10250 6900 0 60 ~ 0
+MD9
+Text Label 10250 6800 0 60 ~ 0
+MD8
+Text Label 10250 6700 0 60 ~ 0
+MD7
+Text Label 10250 6600 0 60 ~ 0
+MD6
+Text Label 10250 6500 0 60 ~ 0
+MD5
+Text Label 10250 6400 0 60 ~ 0
+MD4
+Text Label 10250 6300 0 60 ~ 0
+MD3
+Text Label 10250 6200 0 60 ~ 0
+MD2
+Text Label 10250 6100 0 60 ~ 0
+MD1
+Text Label 10250 6000 0 60 ~ 0
+MD0
+Text Label 12250 6700 0 60 ~ 0
+MA7
+Text Label 12250 6600 0 60 ~ 0
+MA6
+Text Label 12250 6500 0 60 ~ 0
+MA5
+Text Label 12250 6400 0 60 ~ 0
+MA4
+Text Label 12250 6300 0 60 ~ 0
+MA3
+Text Label 12250 6200 0 60 ~ 0
+MA2
+Text Label 12250 6100 0 60 ~ 0
+MA1
+Text Label 12250 6000 0 60 ~ 0
+MA0
+$Comp
+L VCC #PWR029
+U 1 1 3EC4C4B5
+P 9900 7600
+F 0 "#PWR029" H 9900 7800 40 0001 C CNN
+F 1 "VCC" H 9900 7750 40 0000 C CNN
+F 2 "" H 9900 7600 60 0001 C CNN
+F 3 "" H 9900 7600 60 0001 C CNN
+ 1 9900 7600
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_3 K1
+U 1 1 3EC4C49F
+P 9800 8000
+F 0 "K1" V 9750 8000 50 0000 C CNN
+F 1 "CONN_3" V 9850 8000 40 0000 C CNN
+F 2 "Socket_Strips:Socket_Strip_Straight_1x03" V 9950 8000 30 0000 C CNN
+F 3 "" H 9800 8000 60 0001 C CNN
+ 1 9800 8000
+ 0 1 1 0
+$EndComp
+$Comp
+L RAM_32KO U5
+U 1 1 3EC4C463
+P 11400 6800
+F 0 "U5" H 11400 7700 70 0000 C CNN
+F 1 "RAM_32KO" H 11400 5550 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-28__300__600_ELL" H 11400 5650 60 0000 C CNN
+F 3 "" H 11400 6800 60 0001 C CNN
+ 1 11400 6800
+ 1 0 0 -1
+$EndComp
+Text Label 4300 3900 0 60 ~ 0
+XIN/CLK
+NoConn ~ 3100 10300
+NoConn ~ 2000 10800
+NoConn ~ 2000 10300
+NoConn ~ 2000 9750
+$Comp
+L GND #PWR030
+U 1 1 3EC4C328
+P 2200 10350
+F 0 "#PWR030" H 2200 10350 40 0001 C CNN
+F 1 "GND" H 2200 10280 40 0001 C CNN
+F 2 "" H 2200 10350 60 0001 C CNN
+F 3 "" H 2200 10350 60 0001 C CNN
+ 1 2200 10350
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR031
+U 1 1 3EC4C322
+P 1050 10900
+F 0 "#PWR031" H 1050 10900 40 0001 C CNN
+F 1 "GND" H 1050 10830 40 0001 C CNN
+F 2 "" H 1050 10900 60 0001 C CNN
+F 3 "" H 1050 10900 60 0001 C CNN
+ 1 1050 10900
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74HC04 U4
+U 6 1 3EC4C318
+P 2650 10300
+F 0 "U4" H 2845 10415 60 0000 C CNN
+F 1 "74HC04" H 2840 10176 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 3250 10500 20 0000 C CNN
+F 3 "" H 2650 10300 60 0001 C CNN
+ 6 2650 10300
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74HC04 U4
+U 5 1 3EC4C311
+P 1550 10800
+F 0 "U4" H 1745 10915 60 0000 C CNN
+F 1 "74HC04" H 1740 10676 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 1900 11000 20 0000 C CNN
+F 3 "" H 1550 10800 60 0001 C CNN
+ 5 1550 10800
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74HC04 U4
+U 4 1 3EC4C30C
+P 1550 10300
+F 0 "U4" H 1745 10415 60 0000 C CNN
+F 1 "74HC04" H 1740 10176 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 1800 10500 20 0000 C CNN
+F 3 "" H 1550 10300 60 0001 C CNN
+ 4 1550 10300
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74HC04 U4
+U 3 1 3EC4C30A
+P 1550 9750
+F 0 "U4" H 1745 9865 60 0000 C CNN
+F 1 "74HC04" H 1740 9626 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 1550 10000 26 0000 C CNN
+F 3 "" H 1550 9750 60 0001 C CNN
+ 3 1550 9750
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74HC04 U4
+U 2 1 3EC4C300
+P 6850 8900
+F 0 "U4" H 7045 9015 60 0000 C CNN
+F 1 "74HC04" H 7040 8776 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 7100 8700 60 0000 C CNN
+F 3 "" H 6850 8900 60 0001 C CNN
+ 2 6850 8900
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74HC04 U4
+U 1 1 3EC4C2F6
+P 5750 8900
+F 0 "U4" H 5945 9015 60 0000 C CNN
+F 1 "74HC04" H 5940 8776 60 0000 C CNN
+F 2 "Sockets_DIP:DIP-14__300_ELL" H 5650 9100 60 0000 C CNN
+F 3 "" H 5750 8900 60 0001 C CNN
+ 1 5750 8900
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG032
+U 1 1 3EC24491
+P 1850 8600
+F 0 "#FLG032" H 1850 8870 30 0001 C CNN
+F 1 "PWR_FLAG" H 1850 8830 30 0000 C CNN
+F 2 "" H 1850 8600 60 0001 C CNN
+F 3 "" H 1850 8600 60 0001 C CNN
+ 1 1850 8600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR033
+U 1 1 52CEE1C6
+P 1850 8650
+F 0 "#PWR033" H 1850 8650 40 0001 C CNN
+F 1 "GND" H 1850 8580 40 0001 C CNN
+F 2 "" H 1850 8650 60 0001 C CNN
+F 3 "" H 1850 8650 60 0001 C CNN
+ 1 1850 8650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR034
+U 1 1 52CEE1C4
+P 14200 4250
+F 0 "#PWR034" H 14200 4250 40 0001 C CNN
+F 1 "GND" H 14200 4180 40 0001 C CNN
+F 2 "" H 14200 4250 60 0001 C CNN
+F 3 "" H 14200 4250 60 0001 C CNN
+ 1 14200 4250
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_2 P3
+U 1 1 3EC2446D
+P 14550 4100
+F 0 "P3" V 14500 4100 40 0000 C CNN
+F 1 "CONN_2" V 14600 4100 40 0000 C CNN
+F 2 "Connect:bornier2" H 14550 3900 60 0000 C CNN
+F 3 "" H 14550 4100 60 0001 C CNN
+ 1 14550 4100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR035
+U 1 1 3EC243DC
+P 2800 8250
+F 0 "#PWR035" H 2800 8250 40 0001 C CNN
+F 1 "GND" H 2800 8180 40 0001 C CNN
+F 2 "" H 2800 8250 60 0001 C CNN
+F 3 "" H 2800 8250 60 0001 C CNN
+ 1 2800 8250
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C6
+U 1 1 3EC243D6
+P 2800 8100
+F 0 "C6" H 2850 8200 50 0000 L CNN
+F 1 "47uF" H 2850 8000 50 0000 L CNN
+F 2 "Discret:CP6" H 2950 7950 30 0000 C CNN
+F 3 "" H 2800 8100 60 0001 C CNN
+ 1 2800 8100
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODE D1
+U 1 1 3EC243C8
+P 2100 7800
+F 0 "D1" H 2100 7900 50 0000 C CNN
+F 1 "1N4004" H 2100 8000 50 0000 C CNN
+F 2 "Discret:D5" H 2100 7950 30 0000 C CNN
+F 3 "" H 2100 7800 60 0001 C CNN
+ 1 2100 7800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR036
+U 1 1 3EC243BD
+P 1500 7900
+F 0 "#PWR036" H 1500 7900 40 0001 C CNN
+F 1 "GND" H 1500 7831 40 0001 C CNN
+F 2 "" H 1500 7900 60 0001 C CNN
+F 3 "" H 1500 7900 60 0001 C CNN
+ 1 1500 7900
+ 0 -1 -1 0
+$EndComp
+$Comp
+L CONN_3 P2
+U 1 1 3EC243AC
+P 1150 7900
+F 0 "P2" V 1102 7900 40 0000 C CNN
+F 1 "CONN_3" V 1200 7900 40 0000 C CNN
+F 2 "Socket_Strips:Socket_Strip_Straight_1x03" V 1300 7900 30 0000 C CNN
+F 3 "" H 1150 7900 60 0001 C CNN
+ 1 1150 7900
+ -1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR037
+U 1 1 3EC24382
+P 3900 7750
+F 0 "#PWR037" H 3900 7950 40 0001 C CNN
+F 1 "VCC" H 3900 7900 40 0000 C CNN
+F 2 "" H 3900 7750 60 0001 C CNN
+F 3 "" H 3900 7750 60 0001 C CNN
+ 1 3900 7750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR038
+U 1 1 3EC2437A
+P 3400 8150
+F 0 "#PWR038" H 3400 8150 40 0001 C CNN
+F 1 "GND" H 3400 8080 40 0001 C CNN
+F 2 "" H 3400 8150 60 0001 C CNN
+F 3 "" H 3400 8150 60 0001 C CNN
+ 1 3400 8150
+ 1 0 0 -1
+$EndComp
+$Comp
+L LM7805 U3
+U 1 1 3EC2436D
+P 3400 7850
+F 0 "U3" H 3400 8150 60 0000 C CNN
+F 1 "LM7805" H 3400 8050 60 0000 C CNN
+F 2 "Discret:LM78XX" H 3500 7600 30 0000 C CNN
+F 3 "" H 3400 7850 60 0001 C CNN
+ 1 3400 7850
+ 1 0 0 -1
+$EndComp
+Text Label 7400 8900 0 60 ~ 0
+XIN/CLK
+$Comp
+L GND #PWR039
+U 1 1 52CEE1C2
+P 6300 10250
+F 0 "#PWR039" H 6300 10250 40 0001 C CNN
+F 1 "GND" H 6300 10180 40 0001 C CNN
+F 2 "" H 6300 10250 60 0001 C CNN
+F 3 "" H 6300 10250 60 0001 C CNN
+ 1 6300 10250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C4
+U 1 1 3EC242AD
+P 6300 10100
+F 0 "C4" H 6400 10200 50 0000 L CNN
+F 1 "22pF" H 6400 10000 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" H 6900 9950 60 0000 C CNN
+F 3 "" H 6300 10100 60 0001 C CNN
+ 1 6300 10100
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 3EC242C1
+P 5750 9800
+F 0 "R1" V 5830 9800 50 0000 C CNN
+F 1 "100K" V 5750 9800 50 0000 C CNN
+F 2 "Discret:R4" H 5750 9800 60 0000 C CNN
+F 3 "" H 5750 9800 60 0001 C CNN
+ 1 5750 9800
+ 0 1 1 0
+$EndComp
+$Comp
+L C C5
+U 1 1 52CEE1C5
+P 5200 10100
+F 0 "C5" H 5300 10200 50 0000 L CNN
+F 1 "22pF" H 5300 10000 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" H 5500 9950 30 0000 C CNN
+F 3 "" H 5200 10100 60 0001 C CNN
+ 1 5200 10100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CRYSTAL X1
+U 1 1 3EC2428D
+P 5750 9400
+F 0 "X1" H 5750 9550 60 0000 C CNN
+F 1 "10MHz" H 5750 9250 60 0000 C CNN
+F 2 "Crystals:HC-18UH" H 5750 9400 60 0000 C CNN
+F 3 "" H 5750 9400 60 0001 C CNN
+ 1 5750 9400
+ 1 0 0 -1
+$EndComp
+Text Label 4550 2400 0 60 ~ 0
+TDI
+Text Label 4550 2500 0 60 ~ 0
+TMS
+Text Label 4550 2600 0 60 ~ 0
+TCK
+Text Label 4550 2700 0 60 ~ 0
+TDO
+$Comp
+L GND #PWR040
+U 1 1 3EC23E6E
+P 3800 2200
+F 0 "#PWR040" H 3800 2200 40 0001 C CNN
+F 1 "GND" H 3800 2130 40 0001 C CNN
+F 2 "" H 3800 2200 60 0001 C CNN
+F 3 "" H 3800 2200 60 0001 C CNN
+ 1 3800 2200
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR041
+U 1 1 52CEE1C0
+P 3450 2000
+F 0 "#PWR041" H 3450 2200 40 0001 C CNN
+F 1 "VCC" H 3450 2100 40 0000 C CNN
+F 2 "" H 3450 2000 60 0001 C CNN
+F 3 "" H 3450 2000 60 0001 C CNN
+ 1 3450 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR042
+U 1 1 3EC23DE5
+P 3900 8250
+F 0 "#PWR042" H 3900 8250 40 0001 C CNN
+F 1 "GND" H 3900 8180 40 0001 C CNN
+F 2 "" H 3900 8250 60 0001 C CNN
+F 3 "" H 3900 8250 60 0001 C CNN
+ 1 3900 8250
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C3
+U 1 1 3EC23DCD
+P 3900 8100
+F 0 "C3" H 3950 8200 50 0000 L CNN
+F 1 "10uF" H 3950 8000 50 0000 L CNN
+F 2 "Discret:CP6" H 4050 7950 30 0000 C CNN
+F 3 "" H 3900 8100 60 0001 C CNN
+ 1 3900 8100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C2
+U 1 1 3EC23B98
+P 11400 4200
+F 0 "C2" V 11550 4200 50 0000 C BNN
+F 1 "10uF" V 11250 4200 50 0000 C CNN
+F 2 "Discret:CP6" V 11200 4200 60 0000 C CNN
+F 3 "" H 11400 4200 60 0001 C CNN
+ 1 11400 4200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR043
+U 1 1 3EC23ADD
+P 9500 5100
+F 0 "#PWR043" H 9500 5100 40 0001 C CNN
+F 1 "GND" H 9500 5030 40 0001 C CNN
+F 2 "" H 9500 5100 60 0001 C CNN
+F 3 "" H 9500 5100 60 0001 C CNN
+ 1 9500 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C1
+U 1 1 3EC23ABA
+P 9500 4950
+F 0 "C1" H 9550 5050 50 0000 L CNN
+F 1 "100nF" H 9550 4850 50 0000 L CNN
+F 2 "Capacitors_SMD:C_1206" H 9500 4950 60 0000 C CNN
+F 3 "" H 9500 4950 60 0001 C CNN
+ 1 9500 4950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR044
+U 1 1 3EC23A35
+P 10400 5000
+F 0 "#PWR044" H 10400 5000 40 0001 C CNN
+F 1 "GND" H 10400 4930 40 0001 C CNN
+F 2 "" H 10400 5000 60 0001 C CNN
+F 3 "" H 10400 5000 60 0001 C CNN
+ 1 10400 5000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR045
+U 1 1 52CEE1C3
+P 6200 7000
+F 0 "#PWR045" H 6200 7000 40 0001 C CNN
+F 1 "GND" H 6200 6930 40 0001 C CNN
+F 2 "" H 6200 7000 60 0001 C CNN
+F 3 "" H 6200 7000 60 0001 C CNN
+ 1 6200 7000
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR046
+U 1 1 3EC239FE
+P 10400 3050
+F 0 "#PWR046" H 10400 3250 40 0001 C CNN
+F 1 "VCC" H 10400 3200 40 0000 C CNN
+F 2 "" H 10400 3050 60 0001 C CNN
+F 3 "" H 10400 3050 60 0001 C CNN
+ 1 10400 3050
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #PWR047
+U 1 1 52CEE1C1
+P 6150 1900
+F 0 "#PWR047" H 6150 2100 40 0001 C CNN
+F 1 "VCC" H 6150 2000 40 0000 C CNN
+F 2 "" H 6150 1900 60 0001 C CNN
+F 3 "" H 6150 1900 60 0001 C CNN
+ 1 6150 1900
+ 1 0 0 -1
+$EndComp
+Text Label 7150 4500 0 60 ~ 0
+DCLK
+Text Label 9150 4650 0 60 ~ 0
+DCLK
+Text Label 7150 4900 0 60 ~ 0
+DAT7
+Text Label 7150 5100 0 60 ~ 0
+DAT6
+Text Label 7150 5000 0 60 ~ 0
+DAT5
+Text Label 7150 4800 0 60 ~ 0
+DAT4
+Text Label 7150 4400 0 60 ~ 0
+DAT3
+Text Label 7150 4200 0 60 ~ 0
+DAT2
+Text Label 7150 4600 0 60 ~ 0
+DAT1
+Text Label 7150 4300 0 60 ~ 0
+DAT0
+Text Label 9300 4150 0 60 ~ 0
+DAT7
+Text Label 9300 4050 0 60 ~ 0
+DAT6
+Text Label 9300 3950 0 60 ~ 0
+DAT5
+Text Label 9300 3850 0 60 ~ 0
+DAT4
+Text Label 9300 3750 0 60 ~ 0
+DAT3
+Text Label 9300 3650 0 60 ~ 0
+DAT2
+Text Label 9300 3550 0 60 ~ 0
+DAT1
+Text Label 9300 3450 0 60 ~ 0
+DAT0
+$Comp
+L TDA8702 U1
+U 1 1 3EC238E5
+P 10400 4050
+F 0 "U1" H 10600 4850 60 0000 L CNN
+F 1 "TDA8702" H 10600 3250 60 0000 L CNN
+F 2 "Sockets_DIP:DIP-16__300_ELL" H 10900 3150 30 0000 C CNN
+F 3 "" H 10400 4050 60 0001 C CNN
+ 1 10400 4050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR048
+U 1 1 3EC23A2D
+P 5200 10250
+F 0 "#PWR048" H 5200 10250 40 0001 C CNN
+F 1 "GND" H 5200 10180 40 0001 C CNN
+F 2 "" H 5200 10250 60 0001 C CNN
+F 3 "" H 5200 10250 60 0001 C CNN
+ 1 5200 10250
+ 1 0 0 -1
+$EndComp
+Connection ~ 11000 1600
+Wire Wire Line
+ 10600 1600 11700 1600
+Wire Wire Line
+ 11000 1500 11000 1600
+Connection ~ 11200 1850
+Wire Wire Line
+ 4500 2500 4500 2100
+Wire Wire Line
+ 4300 2600 4300 2100
+Wire Wire Line
+ 4800 2600 4300 2600
+Wire Wire Line
+ 4100 2400 4100 2100
+Wire Wire Line
+ 4800 2400 4100 2400
+Wire Wire Line
+ 3900 2700 4800 2700
+Wire Wire Line
+ 3900 2100 3900 2700
+Wire Wire Line
+ 3450 2100 3700 2100
+Connection ~ 3800 2150
+Connection ~ 4000 2150
+Connection ~ 4200 2150
+Wire Wire Line
+ 4000 2100 4000 2150
+Wire Wire Line
+ 4200 2150 4200 2100
+Wire Wire Line
+ 4400 2150 4400 2100
+Wire Wire Line
+ 3800 2150 4400 2150
+Wire Wire Line
+ 3800 2100 3800 2200
+Connection ~ 2400 8000
+Wire Wire Line
+ 1900 8000 1500 8000
+Wire Wire Line
+ 2400 8000 2400 8350
+Wire Wire Line
+ 2550 8000 2550 8050
+Wire Wire Line
+ 2300 8000 2550 8000
+Wire Wire Line
+ 2300 7800 3000 7800
+Wire Wire Line
+ 1500 7800 1900 7800
+Connection ~ 12300 4200
+Connection ~ 12400 3850
+Wire Wire Line
+ 12400 4200 12400 4100
+Wire Wire Line
+ 12150 4200 12400 4200
+Wire Wire Line
+ 12300 4200 12300 4350
+Wire Wire Line
+ 13500 3300 13500 4000
+Wire Wire Line
+ 13100 3300 13500 3300
+Wire Wire Line
+ 12400 3300 12800 3300
+Wire Wire Line
+ 12400 3300 12400 3900
+Wire Wire Line
+ 12150 3850 12400 3850
+Wire Wire Line
+ 11550 3850 11850 3850
+Wire Wire Line
+ 14000 4000 14200 4000
+Wire Wire Line
+ 13400 4000 13700 4000
+Wire Wire Line
+ 4150 3000 4800 3000
+Wire Wire Line
+ 4150 2900 4800 2900
+Connection ~ 13550 1600
+Wire Wire Line
+ 13600 1600 13550 1600
+Wire Wire Line
+ 13550 1500 13600 1500
+Wire Wire Line
+ 13550 1500 13550 1650
+Wire Wire Line
+ 14400 1600 15050 1600
+Wire Wire Line
+ 14400 1500 15050 1500
+Wire Wire Line
+ 3800 3400 4800 3400
+Wire Wire Line
+ 3700 3200 4800 3200
+Wire Wire Line
+ 1950 5200 3050 5200
+Wire Wire Line
+ 1950 5400 2950 5400
+Wire Wire Line
+ 1950 4100 3000 4100
+Wire Wire Line
+ 1950 3900 3000 3900
+Wire Wire Line
+ 1950 3700 2850 3700
+Wire Wire Line
+ 7100 3400 8200 3400
+Wire Wire Line
+ 1950 5900 3100 5900
+Wire Wire Line
+ 1950 5800 3050 5800
+Wire Wire Line
+ 1950 5600 3050 5600
+Wire Wire Line
+ 7550 5500 7100 5500
+Wire Wire Line
+ 11200 1850 11200 1500
+Wire Wire Line
+ 10600 1850 11700 1850
+Wire Wire Line
+ 3900 7750 3900 7950
+Wire Wire Line
+ 7450 4000 7100 4000
+Wire Wire Line
+ 7450 3900 7100 3900
+Wire Wire Line
+ 4800 3600 3700 3600
+Wire Wire Line
+ 3700 4000 4800 4000
+Wire Wire Line
+ 7100 3300 8200 3300
+Wire Wire Line
+ 7100 3500 8200 3500
+Wire Wire Line
+ 7100 3700 8200 3700
+Wire Wire Line
+ 7450 3800 7100 3800
+Wire Wire Line
+ 7450 3600 7100 3600
+Wire Wire Line
+ 11100 2600 10750 2600
+Wire Wire Line
+ 11100 2300 10750 2300
+Wire Wire Line
+ 2650 3500 1950 3500
+Wire Wire Line
+ 2650 5700 1950 5700
+Wire Wire Line
+ 2650 5500 1950 5500
+Wire Wire Line
+ 2650 5300 1950 5300
+Wire Wire Line
+ 2650 5100 1950 5100
+Wire Wire Line
+ 2650 4900 1950 4900
+Wire Wire Line
+ 2650 4700 1950 4700
+Wire Wire Line
+ 2650 4500 1950 4500
+Wire Wire Line
+ 2650 4300 1950 4300
+Wire Wire Line
+ 4800 3800 3700 3800
+Wire Wire Line
+ 7700 3100 7100 3100
+Wire Wire Line
+ 7700 3200 7100 3200
+Wire Wire Line
+ 7700 3000 7100 3000
+Wire Wire Line
+ 7700 2900 7100 2900
+Wire Wire Line
+ 4800 3100 4200 3100
+Wire Wire Line
+ 4800 3300 4200 3300
+Wire Wire Line
+ 4800 3500 4200 3500
+Wire Wire Line
+ 4800 3700 4200 3700
+Wire Wire Line
+ 7650 5800 7100 5800
+Wire Wire Line
+ 7550 5600 7100 5600
+Wire Wire Line
+ 7650 6500 7100 6500
+Wire Wire Line
+ 4800 6300 4250 6300
+Wire Wire Line
+ 7650 6300 7100 6300
+Wire Wire Line
+ 7650 6000 7100 6000
+Wire Wire Line
+ 7650 5900 7100 5900
+Wire Wire Line
+ 7650 6100 7100 6100
+Wire Wire Line
+ 7650 6200 7100 6200
+Wire Wire Line
+ 7650 6400 7100 6400
+Wire Wire Line
+ 4800 6500 4250 6500
+Wire Wire Line
+ 4800 6200 4250 6200
+Wire Wire Line
+ 4800 6000 4250 6000
+Wire Wire Line
+ 4800 5800 4250 5800
+Wire Wire Line
+ 7650 5700 7100 5700
+Wire Wire Line
+ 4800 6400 4250 6400
+Wire Wire Line
+ 4800 6100 4250 6100
+Wire Wire Line
+ 4350 5900 4800 5900
+Wire Wire Line
+ 4350 5700 4800 5700
+Wire Wire Line
+ 4350 5300 4800 5300
+Wire Wire Line
+ 4350 5000 4800 5000
+Wire Wire Line
+ 4350 5100 4800 5100
+Wire Wire Line
+ 4350 5200 4800 5200
+Wire Wire Line
+ 4350 5500 4800 5500
+Wire Wire Line
+ 4350 5600 4800 5600
+Wire Wire Line
+ 9700 7650 9400 7650
+Wire Wire Line
+ 9800 7400 9800 7650
+Wire Wire Line
+ 10700 7400 9800 7400
+Wire Wire Line
+ 10700 7800 10150 7800
+Wire Wire Line
+ 10700 7700 10150 7700
+Wire Wire Line
+ 10700 7600 10150 7600
+Wire Wire Line
+ 10700 7300 10150 7300
+Wire Wire Line
+ 10700 7200 10150 7200
+Wire Wire Line
+ 10700 7100 10150 7100
+Wire Wire Line
+ 10700 7000 10150 7000
+Wire Wire Line
+ 10700 6900 10150 6900
+Wire Wire Line
+ 10700 6800 10150 6800
+Wire Wire Line
+ 10700 6700 10150 6700
+Wire Wire Line
+ 10700 6600 10150 6600
+Wire Wire Line
+ 10700 6500 10150 6500
+Wire Wire Line
+ 10700 6400 10150 6400
+Wire Wire Line
+ 10700 6300 10150 6300
+Wire Wire Line
+ 10700 6200 10150 6200
+Wire Wire Line
+ 10700 6100 10150 6100
+Wire Wire Line
+ 10700 6000 10150 6000
+Wire Wire Line
+ 12100 6700 12550 6700
+Wire Wire Line
+ 12100 6600 12550 6600
+Wire Wire Line
+ 12100 6500 12550 6500
+Wire Wire Line
+ 12100 6400 12550 6400
+Wire Wire Line
+ 12100 6300 12550 6300
+Wire Wire Line
+ 12100 6200 12550 6200
+Wire Wire Line
+ 12100 6100 12550 6100
+Wire Wire Line
+ 12100 6000 12550 6000
+Wire Wire Line
+ 4200 3900 4800 3900
+Connection ~ 5200 9400
+Connection ~ 6300 9400
+Wire Wire Line
+ 6050 9400 6300 9400
+Connection ~ 6300 8900
+Wire Wire Line
+ 6300 8900 6300 9950
+Wire Wire Line
+ 6300 9800 5900 9800
+Wire Wire Line
+ 7300 8900 7900 8900
+Wire Wire Line
+ 6200 8900 6400 8900
+Wire Wire Line
+ 5200 8900 5300 8900
+Wire Wire Line
+ 5200 8900 5200 9950
+Connection ~ 1050 10800
+Connection ~ 1050 10300
+Wire Wire Line
+ 1050 10800 1100 10800
+Wire Wire Line
+ 1100 10300 1050 10300
+Wire Wire Line
+ 1050 9750 1100 9750
+Wire Wire Line
+ 1050 9750 1050 10900
+Wire Wire Line
+ 2200 10350 2200 10300
+Wire Wire Line
+ 1850 8650 1850 8600
+Wire Wire Line
+ 11850 4200 11550 4200
+Wire Wire Line
+ 14200 4250 14200 4200
+Connection ~ 2800 7800
+Connection ~ 6050 2000
+Connection ~ 5750 2000
+Connection ~ 5850 2000
+Wire Wire Line
+ 3900 7800 3800 7800
+Connection ~ 6300 9800
+Connection ~ 5200 9800
+Wire Wire Line
+ 5600 9800 5200 9800
+Wire Wire Line
+ 5200 9400 5450 9400
+Wire Wire Line
+ 4800 2500 4500 2500
+Wire Wire Line
+ 3450 2100 3450 2000
+Wire Wire Line
+ 9500 4450 9500 4800
+Wire Wire Line
+ 9600 4450 9500 4450
+Wire Wire Line
+ 6200 6900 6200 7000
+Wire Wire Line
+ 10400 5000 10400 4950
+Wire Wire Line
+ 10300 4950 10500 4950
+Wire Wire Line
+ 10300 3150 10500 3150
+Wire Wire Line
+ 10400 3150 10400 3050
+Wire Wire Line
+ 6150 2000 6150 1900
+Wire Wire Line
+ 5650 2000 6150 2000
+Wire Wire Line
+ 7400 4500 7100 4500
+Wire Wire Line
+ 9600 4650 9150 4650
+Wire Wire Line
+ 7400 4900 7100 4900
+Wire Wire Line
+ 7400 5100 7100 5100
+Wire Wire Line
+ 7400 5000 7100 5000
+Wire Wire Line
+ 7400 4800 7100 4800
+Wire Wire Line
+ 7400 4400 7100 4400
+Wire Wire Line
+ 7400 4200 7100 4200
+Wire Wire Line
+ 7400 4600 7100 4600
+Wire Wire Line
+ 7400 4300 7100 4300
+Wire Wire Line
+ 9600 4150 9300 4150
+Wire Wire Line
+ 9600 4050 9300 4050
+Wire Wire Line
+ 9600 3950 9300 3950
+Wire Wire Line
+ 9600 3850 9300 3850
+Wire Wire Line
+ 9600 3750 9300 3750
+Wire Wire Line
+ 9600 3650 9300 3650
+Wire Wire Line
+ 9600 3550 9300 3550
+Wire Wire Line
+ 9600 3450 9300 3450
+Connection ~ 3900 7800
+Wire Wire Line
+ 2400 7750 2400 7800
+Connection ~ 2400 7800
+Wire Wire Line
+ 2300 8050 2300 8000
+Wire Wire Line
+ 5700 6900 5700 6950
+Wire Wire Line
+ 5700 6950 6200 6950
+Wire Wire Line
+ 6100 6900 6100 6950
+Connection ~ 6100 6950
+Wire Wire Line
+ 6000 6900 6000 6950
+Connection ~ 6000 6950
+Wire Wire Line
+ 5900 6900 5900 6950
+Connection ~ 5900 6950
+Wire Wire Line
+ 5800 6900 5800 6950
+Connection ~ 5800 6950
+Connection ~ 6200 6950
+Connection ~ 13500 4000
+Wire Wire Line
+ 8000 1700 8000 1750
+Wire Wire Line
+ 7600 1700 7600 1750
+Wire Wire Line
+ 7200 1750 7200 1700
+Wire Wire Line
+ 2700 7750 2700 7800
+Connection ~ 2700 7800
+Wire Wire Line
+ 2800 7800 2800 7950
+Wire Wire Line
+ 3400 8150 3400 8100
+Wire Wire Line
+ 9900 7600 9900 7650
+Connection ~ 10400 4950
+Connection ~ 10400 3150
+Wire Wire Line
+ 12800 3550 12800 3600
+Wire Wire Line
+ 12800 4450 12800 4400
+Wire Wire Line
+ 11900 2300 11950 2300
+Wire Wire Line
+ 11950 2600 11900 2600
+Wire Wire Line
+ 12350 1600 12300 1600
+Wire Wire Line
+ 12300 1850 12350 1850
+Text Label 1500 7800 0 60 ~ 0
++12BATT
+Text Label 1500 8000 0 60 ~ 0
+-12BATT
+Wire Wire Line
+ 11500 2300 11400 2300
+Wire Wire Line
+ 11500 2600 11400 2600
+Wire Wire Line
+ 11250 3850 11200 3850
+Wire Wire Line
+ 11250 4200 11200 4200
+$Comp
+L GND #PWR049
+U 1 1 52CEE1D1
+P 7200 2050
+F 0 "#PWR049" H 7200 2050 40 0001 C CNN
+F 1 "GND" H 7200 1980 40 0001 C CNN
+F 2 "" H 7200 2050 60 0001 C CNN
+F 3 "" H 7200 2050 60 0001 C CNN
+ 1 7200 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR050
+U 1 1 52CEE1CF
+P 7600 2050
+F 0 "#PWR050" H 7600 2050 40 0001 C CNN
+F 1 "GND" H 7600 1980 40 0001 C CNN
+F 2 "" H 7600 2050 60 0001 C CNN
+F 3 "" H 7600 2050 60 0001 C CNN
+ 1 7600 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR051
+U 1 1 52CEE1D0
+P 8000 2050
+F 0 "#PWR051" H 8000 2050 40 0001 C CNN
+F 1 "GND" H 8000 1980 40 0001 C CNN
+F 2 "" H 8000 2050 60 0001 C CNN
+F 3 "" H 8000 2050 60 0001 C CNN
+ 1 8000 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L XC95108PC84 U2
+U 1 1 5633AE5A
+P 5950 4750
+F 0 "U2" H 6500 7300 60 0000 L CNN
+F 1 "XC95108PC84" H 6350 2800 60 0000 L CNN
+F 2 "Sockets:PLCC84" H 5950 4750 60 0000 C CNN
+F 3 "" H 5950 4750 60 0000 C CNN
+ 1 5950 4750
+ 1 0 0 -1
+$EndComp
+$EndSCHEMATC
diff --git a/demos/test_xil_95108/carte_test_schlib.lib b/demos/test_xil_95108/carte_test_schlib.lib
new file mode 100644
index 0000000..eb9d703
--- /dev/null
+++ b/demos/test_xil_95108/carte_test_schlib.lib
@@ -0,0 +1,605 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# 74HCT04
+#
+DEF 74HCT04 U 0 30 Y Y 6 F N
+F0 "U" 150 100 40 H V C CNN
+F1 "74HCT04" 200 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 74HC14 74HC04 74LS14
+DRAW
+P 4 0 0 0 -150 150 -150 -150 150 0 -150 150 N
+X GND 7 -50 -100 0 U 30 20 0 0 W N
+X VCC 14 -50 100 0 D 30 20 0 0 W N
+X ~ 1 -450 0 300 R 60 60 1 1 I
+X ~ 2 450 0 300 L 60 60 1 1 O I
+X ~ 3 -450 0 300 R 60 60 2 1 I
+X ~ 4 450 0 300 L 60 60 2 1 O I
+X ~ 5 -450 0 300 R 60 60 3 1 I
+X ~ 6 450 0 300 L 60 60 3 1 O I
+X ~ 8 450 0 300 L 60 60 4 1 O I
+X ~ 9 -450 0 300 R 60 60 4 1 I
+X ~ 10 450 0 300 L 60 60 5 1 O I
+X ~ 11 -450 0 300 R 60 60 5 1 I
+X ~ 12 450 0 300 L 60 60 6 1 O I
+X ~ 13 -450 0 300 R 60 60 6 1 I
+X ~ 1 -450 0 300 R 60 60 1 2 I I
+X ~ 2 450 0 300 L 60 60 1 2 O
+X ~ 3 -450 0 300 R 60 60 2 2 I I
+X ~ 4 450 0 300 L 60 60 2 2 O
+X ~ 5 -450 0 300 R 60 60 3 2 I I
+X ~ 6 450 0 300 L 60 60 3 2 O
+X ~ 8 450 0 300 L 60 60 4 2 O
+X ~ 9 -450 0 300 R 60 60 4 2 I I
+X ~ 10 450 0 300 L 60 60 5 2 O
+X ~ 11 -450 0 300 R 60 60 5 2 I I
+X ~ 12 450 0 300 L 60 60 6 2 O
+X ~ 13 -450 0 300 R 60 60 6 2 I I
+ENDDRAW
+ENDDEF
+#
+# 7805
+#
+DEF 7805 U 0 30 N Y 1 F N
+F0 "U" 150 -196 60 H V C CNN
+F1 "7805" 0 200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS LM7805 LM7812 78L05
+DRAW
+S -200 -150 200 150 0 1 0 N
+X VI VI -400 50 200 R 40 40 1 1 I
+X VO VO 400 50 200 L 40 40 1 1 w
+X GND GND 0 -250 100 U 40 40 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_2X2
+#
+DEF CONN_2X2 P 0 40 Y N 1 F N
+F0 "P" 0 150 50 H V C CNN
+F1 "CONN_2X2" 10 -130 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 100 100 -100 0 1 0 N
+X 1 1 -400 50 300 R 60 60 1 1 P I
+X 2 2 400 50 300 L 60 60 1 1 P I
+X 3 3 -400 -50 300 R 60 60 1 1 P I
+X 4 4 400 -50 300 L 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_3
+#
+DEF CONN_3 K 0 40 Y N 1 F N
+F0 "K" -50 0 50 V V C CNN
+F1 "CONN_3" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 0 250 R 60 60 1 1 P I
+X P3 3 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB25
+#
+DEF DB25 J 0 40 Y N 1 F N
+F0 "J" 50 1350 70 H V C CNN
+F1 "DB25" -50 -1350 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A -109 1270 41 1799 774 0 1 0 N -150 1270 -100 1310
+A -108 -1259 42 -1787 -788 0 1 0 N -150 -1260 -100 -1300
+A 116 -1169 34 -657 -15 0 1 0 N 130 -1200 150 -1170
+A 117 1170 32 664 1 0 1 0 N 130 1199 149 1170
+C -70 -1200 30 0 1 0 N
+C -70 -1000 30 0 1 0 N
+C -70 -800 30 0 1 0 N
+C -70 -600 30 0 1 0 N
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C -70 600 30 0 1 0 N
+C -70 800 30 0 1 0 N
+C -70 1000 30 0 1 0 N
+C -70 1200 30 0 1 0 N
+C 50 -1100 30 0 1 0 N
+C 50 -900 30 0 1 0 N
+C 50 -700 30 0 1 0 N
+C 50 -500 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+C 50 500 30 0 1 0 N
+C 50 700 30 0 1 0 N
+C 50 900 30 0 1 0 N
+C 50 1100 30 0 1 0 N
+P 2 0 1 0 -150 -1260 -150 1270 N
+P 2 0 1 0 -150 -1200 -100 -1200 N
+P 2 0 1 0 -150 -1100 20 -1100 N
+P 2 0 1 0 -150 -1000 -100 -1000 N
+P 2 0 1 0 -150 -900 20 -900 N
+P 2 0 1 0 -150 -800 -100 -800 N
+P 2 0 1 0 -150 -700 20 -700 N
+P 2 0 1 0 -150 -600 -100 -600 N
+P 2 0 1 0 -150 -500 20 -500 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -150 500 20 500 N
+P 2 0 1 0 -150 600 -100 600 N
+P 2 0 1 0 -150 700 20 700 N
+P 2 0 1 0 -150 800 -100 800 N
+P 2 0 1 0 -150 900 20 900 N
+P 2 0 1 0 -150 1000 -100 1000 N
+P 2 0 1 0 -150 1100 20 1100 N
+P 2 0 1 0 -150 1200 -100 1200 N
+P 2 0 1 0 -100 -1300 130 -1200 N
+P 2 0 1 0 130 1200 -100 1310 N
+P 2 0 1 0 150 -1170 150 1170 N
+X 1 1 -450 -1200 300 R 60 60 1 1 P
+X 2 2 -450 -1000 300 R 60 60 1 1 P
+X 3 3 -450 -800 300 R 60 60 1 1 P
+X 4 4 -450 -600 300 R 60 60 1 1 P
+X 5 5 -450 -400 300 R 60 60 1 1 P
+X 6 6 -450 -200 300 R 60 60 1 1 P
+X 7 7 -450 0 300 R 60 60 1 1 P
+X 8 8 -450 200 300 R 60 60 1 1 P
+X 9 9 -450 400 300 R 60 60 1 1 P
+X 10 10 -450 600 300 R 60 60 1 1 P
+X P20 20 -450 100 300 R 60 60 1 1 P
+X 11 11 -450 800 300 R 60 60 1 1 P
+X P21 21 -450 300 300 R 60 60 1 1 P
+X 12 12 -450 1000 300 R 60 60 1 1 P
+X P22 22 -450 500 300 R 60 60 1 1 P
+X 13 13 -450 1200 300 R 60 60 1 1 P
+X P23 23 -450 700 300 R 60 60 1 1 P
+X P14 14 -450 -1100 300 R 60 60 1 1 P
+X P24 24 -450 900 300 R 60 60 1 1 P
+X P15 15 -450 -900 300 R 60 60 1 1 P
+X P25 25 -450 1100 300 R 60 60 1 1 P
+X P16 16 -450 -700 300 R 60 60 1 1 P
+X P17 17 -450 -500 300 R 60 60 1 1 P
+X P18 18 -450 -300 300 R 60 60 1 1 P
+X P19 19 -450 -100 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 0 -150 -460 -150 460 N
+P 2 0 1 0 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 0 -140 -470 -110 -490 N
+P 2 0 1 0 -140 470 -150 460 N
+P 2 0 1 0 -140 470 -100 490 N
+P 2 0 1 0 -110 -490 -50 -490 N
+P 2 0 1 0 -100 490 -70 490 N
+P 2 0 1 0 129 390 -70 490 N
+P 2 0 1 0 129 390 150 370 N
+P 2 0 1 0 140 -409 -50 -490 N
+P 2 0 1 0 150 -390 140 -409 N
+P 2 0 1 0 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODE
+#
+DEF DIODE D 0 0 Y Y 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODE" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 2 0 1 6 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+X K 1 200 0 150 L 20 20 1 1 P
+X A 2 -200 0 150 R 20 20 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LM318N
+#
+DEF LM318N U 0 30 Y Y 1 F N
+F0 "U" 100 300 60 H V C CNN
+F1 "LM318N" 210 -250 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 -200 -200 200 N
+P 2 0 1 0 -200 200 200 0 N
+P 2 0 1 0 200 -100 100 -50 N
+P 2 0 1 0 200 0 -200 -200 N
+P 2 0 1 0 200 100 100 50 N
+P 2 0 1 0 200 200 0 100 N
+X FIN2 1 500 200 300 L 60 30 1 1 P
+X - 2 -500 -100 300 R 60 60 1 1 I
+X + 3 -500 100 300 R 60 60 1 1 I
+X V- 4 -100 -400 250 U 60 30 1 1 W
+X FOUT 5 500 -100 300 L 60 30 1 1 P
+X OUT 6 500 0 300 L 60 30 1 1 O
+X V+ 7 -100 400 250 D 60 30 1 1 W
+X FIN1 8 500 100 300 L 60 30 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# RAM_32KO
+#
+DEF RAM_32KO U 0 40 Y Y 1 F N
+F0 "U" 150 900 70 H V C CNN
+F1 "RAM_32KO" 300 -1100 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X GND 14 0 -1050 0 U 60 60 0 0 W N
+X VCC 28 0 850 0 D 60 60 0 0 W N
+S -400 850 400 -1050 0 1 0 N
+X A14 1 -700 -600 300 R 60 60 1 1 I
+X A12 2 -700 -400 300 R 60 60 1 1 I
+X A7 3 -700 100 300 R 60 60 1 1 I
+X A6 4 -700 200 300 R 60 60 1 1 I
+X A5 5 -700 300 300 R 60 60 1 1 I
+X A4 6 -700 400 300 R 60 60 1 1 I
+X A3 7 -700 500 300 R 60 60 1 1 I
+X A2 8 -700 600 300 R 60 60 1 1 I
+X A1 9 -700 700 300 R 60 60 1 1 I
+X A0 10 -700 800 300 R 60 60 1 1 I
+X CS 20 -700 -800 300 R 60 60 1 1 I I
+X D0 11 700 800 300 L 60 60 1 1 T
+X A10 21 -700 -200 300 R 60 60 1 1 I
+X D1 12 700 700 300 L 60 60 1 1 T
+X OE 22 -700 -900 300 R 60 60 1 1 I I
+X D2 13 700 600 300 L 60 60 1 1 T
+X A11 23 -700 -300 300 R 60 60 1 1 I
+X A9 24 -700 -100 300 R 60 60 1 1 I
+X D3 15 700 500 300 L 60 60 1 1 T
+X A8 25 -700 0 300 R 60 60 1 1 I
+X D4 16 700 400 300 L 60 60 1 1 T
+X A13 26 -700 -500 300 R 60 60 1 1 I
+X D5 17 700 300 300 L 60 60 1 1 T
+X WE 27 -700 -1000 300 R 60 60 1 1 I I
+X D6 18 700 200 300 L 60 60 1 1 T
+X D7 19 700 100 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# SW_PUSH
+#
+DEF SW_PUSH SW 0 40 N N 1 F N
+F0 "SW" 150 110 50 H V C CNN
+F1 "SW_PUSH" 0 -80 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -170 50 170 60 0 1 0 N
+P 4 0 1 0 -40 60 -30 90 30 90 40 60 N
+X 1 1 -300 0 200 R 60 60 0 1 P I
+X 2 2 300 0 200 L 60 60 0 1 P I
+ENDDRAW
+ENDDEF
+#
+# TDA8702
+#
+DEF TDA8702 U 0 40 Y Y 1 F N
+F0 "U" 200 800 60 H V L CNN
+F1 "TDA8702" 200 -800 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 700 500 -700 0 1 0 N
+X VREF 1 -800 -400 300 R 50 50 1 1 B
+X AGND 2 100 -900 200 U 50 50 1 1 W
+X DB2 3 -800 400 300 R 50 50 1 1 I
+X DB3 4 -800 300 300 R 50 50 1 1 I
+X Clock 5 -800 -600 300 R 50 50 1 1 I C
+X DGND 6 -100 -900 200 U 50 50 1 1 W
+X DB7 7 -800 -100 300 R 50 50 1 1 I
+X DB6 8 -800 0 300 R 50 50 1 1 I
+X DB6 8 -800 0 300 R 50 50 1 1 I
+X DB5 9 -800 100 300 R 50 50 1 1 I
+X DB4 10 -800 200 300 R 50 50 1 1 I
+X DB1 11 -800 500 300 R 50 50 1 1 I
+X DB0 12 -800 600 300 R 50 50 1 1 I
+X VCCD 13 -100 900 200 D 50 50 1 1 W
+X VOUT 14 800 -150 300 L 50 50 1 1 O
+X VOUT 15 800 200 300 L 50 50 1 1 O I
+X VCCA 16 100 900 200 D 50 50 1 1 W
+X VREF 1 -800 -400 300 R 50 50 1 2 B
+X AGND 2 100 -900 300 U 50 50 1 2 W
+X DB2 3 -800 400 300 R 50 50 1 2 I
+X DB3 4 -800 300 300 R 50 50 1 2 I
+X Clock 5 -800 -600 300 R 50 50 1 2 I C
+X DGND 6 -100 -900 300 U 50 50 1 2 W
+X DB7 7 -800 -100 300 R 50 50 1 2 I
+X DB6 8 -800 0 300 R 50 50 1 2 I
+X DB6 8 -800 0 300 R 50 50 1 2 I
+X DB5 9 -800 100 300 R 50 50 1 2 I
+X DB4 10 -800 200 300 R 50 50 1 2 I
+X DB1 11 -800 500 300 R 50 50 1 2 I
+X DB0 12 -800 600 300 R 50 50 1 2 I
+X VCCD 13 -100 900 300 D 50 50 1 2 W
+X VOUT 14 800 -150 300 L 50 50 1 2 O
+X VOUT 15 800 200 300 L 50 50 1 2 O
+X VCCA 16 100 900 300 D 50 50 1 2 W
+ENDDRAW
+ENDDEF
+#
+# XC95108PC84
+#
+DEF XC95108PC84 U 0 30 Y Y 1 F N
+F0 "U" 550 2550 60 H V L CNN
+F1 "XC95108PC84" 400 -1950 60 H V L CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -850 2450 850 -1850 0 1 0 N
+X P1 1 -1150 1850 300 R 60 60 1 1 B
+X P2 2 -1150 1750 300 R 60 60 1 1 B
+X P3 3 -1150 1650 300 R 60 60 1 1 B
+X P4 4 -1150 1550 300 R 60 60 1 1 B
+X P5 5 -1150 1450 300 R 60 60 1 1 B
+X P6 6 -1150 1350 300 R 60 60 1 1 B
+X P7 7 -1150 1250 300 R 60 60 1 1 B
+X GND 8 -250 -2150 300 U 60 60 1 1 W
+X I/O/GCK1 9 -1150 1150 300 R 60 60 1 1 B
+X I/O/GCK2 10 -1150 1050 300 R 60 60 1 1 B
+X P20 20 -1150 50 300 R 60 60 1 1 B
+X TCK 30 -1150 2150 300 R 60 60 1 1 I
+X P40 40 -1150 -1450 300 R 60 60 1 1 B
+X P50 50 1150 -1350 300 L 60 60 1 1 B
+X GND 60 250 -2150 300 U 60 60 1 1 W
+X P70 70 1150 550 300 L 60 60 1 1 B
+X P80 80 1150 1450 300 L 60 60 1 1 B
+X P11 11 -1150 950 300 R 60 60 1 1 B
+X P21 21 -1150 -50 300 R 60 60 1 1 B
+X P31 31 -1150 -550 300 R 60 60 1 1 B
+X P41 41 -1150 -1550 300 R 60 60 1 1 B
+X P51 51 1150 -1250 300 L 60 60 1 1 B
+X P61 61 1150 -250 300 L 60 60 1 1 B
+X P71 71 1150 750 300 L 60 60 1 1 B
+X P81 81 1150 1550 300 L 60 60 1 1 B
+X I/O/GCK3 12 -1150 850 300 R 60 60 1 1 B
+X VCCIO 22 100 2750 300 D 60 60 1 1 W
+X P32 32 -1150 -750 300 R 60 60 1 1 B
+X GND 42 50 -2150 300 U 60 60 1 1 W
+X P52 52 1150 -1150 300 L 60 60 1 1 B
+X P62 62 1150 -150 300 L 60 60 1 1 B
+X P72 72 1150 850 300 L 60 60 1 1 B
+X P82 82 1150 1650 300 L 60 60 1 1 B
+X P13 13 -1150 750 300 R 60 60 1 1 B
+X P23 23 -1150 -150 300 R 60 60 1 1 B
+X P33 33 -1150 -850 300 R 60 60 1 1 B
+X P43 43 -1150 -1650 300 R 60 60 1 1 B
+X P53 53 1150 -1050 300 L 60 60 1 1 B
+X P63 63 1150 -50 300 L 60 60 1 1 B
+X VCC 73 -200 2750 300 D 60 60 1 1 W
+X P83 83 1150 1750 300 L 60 60 1 1 B
+X P14 14 -1150 550 300 R 60 60 1 1 B
+X P24 24 -1150 -250 300 R 60 60 1 1 B
+X P34 34 -1150 -950 300 R 60 60 1 1 B
+X P44 44 -1150 -1750 300 R 60 60 1 1 B
+X P54 54 1150 -950 300 L 60 60 1 1 B
+X VCCIO 64 200 2750 300 D 60 60 1 1 W
+X I/O/GSR 74 1150 950 300 L 60 60 1 1 B
+X P84 84 1150 1850 300 L 60 60 1 1 B
+X P15 15 -1150 450 300 R 60 60 1 1 B
+X P25 25 -1150 -350 300 R 60 60 1 1 B
+X P35 35 -1150 -1050 300 R 60 60 1 1 B
+X P45 45 1150 -1750 300 L 60 60 1 1 B
+X P55 55 1150 -850 300 L 60 60 1 1 B
+X P65 65 1150 50 300 L 60 60 1 1 B
+X P75 75 1150 1050 300 L 60 60 1 1 B
+X GND 16 -150 -2150 300 U 60 60 1 1 W
+X P26 26 -1150 -450 300 R 60 60 1 1 B
+X P36 36 -1150 -1150 300 R 60 60 1 1 B
+X P46 46 1150 -1650 300 L 60 60 1 1 B
+X P56 56 1150 -750 300 L 60 60 1 1 B
+X P66 66 1150 150 300 L 60 60 1 1 B
+X I/O/GTS1 76 1150 1150 300 L 60 60 1 1 B
+X P17 17 -1150 350 300 R 60 60 1 1 B
+X GND 27 -50 -2150 300 U 60 60 1 1 W
+X P37 37 -1150 -1250 300 R 60 60 1 1 B
+X P47 47 1150 -1550 300 L 60 60 1 1 B
+X P57 57 1150 -450 300 L 60 60 1 1 B
+X P67 67 1150 250 300 L 60 60 1 1 B
+X I/O/GTS2 77 1150 1250 300 L 60 60 1 1 B
+X P18 18 -1150 250 300 R 60 60 1 1 B
+X TDI 28 -1150 2350 300 R 60 60 1 1 I
+X VCC 38 -300 2750 300 D 60 60 1 1 W
+X P48 48 1150 -1450 300 L 60 60 1 1 B
+X P58 58 1150 -350 300 L 60 60 1 1 B
+X P68 68 1150 350 300 L 60 60 1 1 B
+X VCC 78 -100 2750 300 D 60 60 1 1 W
+X P19 19 -1150 150 300 R 60 60 1 1 B
+X TMS 29 -1150 2250 300 R 60 60 1 1 I
+X P39 39 -1150 -1350 300 R 60 60 1 1 B
+X GND 49 150 -2150 300 U 60 60 1 1 W
+X TDO 59 -1150 2050 300 R 60 60 1 1 O
+X P69 69 1150 450 300 L 60 60 1 1 B
+X P79 79 1150 1350 300 L 60 60 1 1 B
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/test_xil_95108/fp-lib-table b/demos/test_xil_95108/fp-lib-table
new file mode 100644
index 0000000..30a35b2
--- /dev/null
+++ b/demos/test_xil_95108/fp-lib-table
@@ -0,0 +1,7 @@
+(fp_lib_table
+ (lib (name Capacitors_SMD)(type KiCad)(uri "$(KISYSMOD)\\Capacitors_SMD.pretty")(options "")(descr ""))
+ (lib (name Sockets_DIP)(type KiCad)(uri "$(KISYSMOD)\\Sockets_DIP.pretty")(options "")(descr ""))
+ (lib (name Pin_Headers)(type KiCad)(uri "$(KISYSMOD)/Pin_Headers.pretty")(options "")(descr ""))
+ (lib (name SMD_Packages)(type KiCad)(uri "$(KISYSMOD)/SMD_Packages.pretty")(options "")(descr ""))
+ (lib (name Sockets)(type KiCad)(uri "$(KISYSMOD)/Sockets.pretty")(options "")(descr ""))
+)
diff --git a/demos/video/bus_pci.sch b/demos/video/bus_pci.sch
new file mode 100644
index 0000000..0d613b4
--- /dev/null
+++ b/demos/video/bus_pci.sch
@@ -0,0 +1,2745 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 7 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 "Interface Bus PCI"
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Connection ~ 1250 10750
+Wire Wire Line
+ 1050 10750 1500 10750
+$Comp
+L PWR_FLAG #FLG076
+U 1 1 4174D9FB
+P 1500 10750
+F 0 "#FLG076" H 1500 11020 30 0001 C CNN
+F 1 "PWR_FLAG" H 1500 10980 30 0000 C CNN
+F 2 "" H 1500 10750 60 0001 C CNN
+F 3 "" H 1500 10750 60 0001 C CNN
+ 1 1500 10750
+ 1 0 0 -1
+$EndComp
+Connection ~ 1150 8850
+Wire Wire Line
+ 600 10200 1050 10200
+Wire Wire Line
+ 1050 10150 1050 10300
+$Comp
+L PWR_FLAG #FLG077
+U 1 1 4BF03691
+P 1050 10150
+F 0 "#FLG077" H 1050 10420 30 0001 C CNN
+F 1 "PWR_FLAG" H 1050 10380 30 0000 C CNN
+F 2 "" H 1050 10150 60 0001 C CNN
+F 3 "" H 1050 10150 60 0001 C CNN
+ 1 1050 10150
+ 1 0 0 -1
+$EndComp
+Connection ~ 4500 1000
+Wire Wire Line
+ 4250 1000 4500 1000
+Wire Wire Line
+ 700 8850 1150 8850
+$Comp
+L PWR_FLAG #FLG078
+U 1 1 4174D820
+P 4250 1000
+F 0 "#FLG078" H 4250 1270 30 0001 C CNN
+F 1 "PWR_FLAG" H 4250 1200 30 0000 C CNN
+F 2 "" H 4250 1000 60 0001 C CNN
+F 3 "" H 4250 1000 60 0001 C CNN
+ 1 4250 1000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG079
+U 1 1 4174D80F
+P 1150 8850
+F 0 "#FLG079" H 1150 9120 30 0001 C CNN
+F 1 "PWR_FLAG" H 1150 9080 30 0000 C CNN
+F 2 "" H 1150 8850 60 0001 C CNN
+F 3 "" H 1150 8850 60 0001 C CNN
+ 1 1150 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L VSS #PWR080
+U 1 1 33BA4D4A
+P 1250 10800
+F 0 "#PWR080" H 1250 10800 40 0001 C CNN
+F 1 "VSS" H 1250 10730 40 0000 C CNN
+F 2 "" H 1250 10800 60 0001 C CNN
+F 3 "" H 1250 10800 60 0001 C CNN
+ 1 1250 10800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1250 10750 1250 10800
+Connection ~ 1050 10750
+$Comp
+L VCC #PWR081
+U 1 1 33B3DC6A
+P 850 8800
+F 0 "#PWR081" H 850 9000 40 0001 C CNN
+F 1 "VCC" H 850 8950 40 0000 C CNN
+F 2 "" H 850 8800 60 0001 C CNN
+F 3 "" H 850 8800 60 0001 C CNN
+ 1 850 8800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 600 10150 600 10300
+Wire Wire Line
+ 1150 8850 1150 8950
+$Comp
+L +3.3V #PWR082
+U 1 1 33AFD455
+P 600 10150
+F 0 "#PWR082" H 600 10350 40 0001 C CNN
+F 1 "+3.3V" H 600 10300 40 0000 C CNN
+F 2 "" H 600 10150 60 0001 C CNN
+F 3 "" H 600 10150 60 0001 C CNN
+ 1 600 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND083
+U 1 1 4BF036CB
+P 1050 10800
+F 0 "#GND083" H 1050 10900 60 0001 C CNN
+F 1 "GND" H 1050 10700 60 0001 C CNN
+F 2 "" H 1050 10800 60 0001 C CNN
+F 3 "" H 1050 10800 60 0001 C CNN
+ 1 1050 10800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1050 10700 1050 10800
+$Comp
+L GND #GND084
+U 1 1 4BF036CC
+P 600 10800
+F 0 "#GND084" H 600 10900 60 0001 C CNN
+F 1 "GND" H 600 10700 60 0001 C CNN
+F 2 "" H 600 10800 60 0001 C CNN
+F 3 "" H 600 10800 60 0001 C CNN
+ 1 600 10800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 600 10700 600 10800
+$Comp
+L GND #GND085
+U 1 1 4BF036CD
+P 1150 9450
+F 0 "#GND085" H 1150 9550 60 0001 C CNN
+F 1 "GND" H 1150 9350 60 0000 C CNN
+F 2 "" H 1150 9450 60 0001 C CNN
+F 3 "" H 1150 9450 60 0001 C CNN
+ 1 1150 9450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1150 9350 1150 9450
+$Comp
+L CP C69
+U 1 1 33AFD43A
+P 1050 10500
+F 0 "C69" H 1100 10600 50 0000 L CNN
+F 1 "4,7uF" H 1100 10400 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 1050 10500 60 0001 C CNN
+F 3 "" H 1050 10500 60 0001 C CNN
+ 1 1050 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C68
+U 1 1 4BF036D8
+P 600 10500
+F 0 "C68" H 650 10600 50 0000 L CNN
+F 1 "4,7uF" H 650 10400 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 600 10500 60 0001 C CNN
+F 3 "" H 600 10500 60 0001 C CNN
+ 1 600 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C67
+U 1 1 33AFD420
+P 1150 9150
+F 0 "C67" H 1200 9250 50 0000 L CNN
+F 1 "4,7uF" H 1200 9050 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 1150 9150 60 0001 C CNN
+F 3 "" H 1150 9150 60 0001 C CNN
+ 1 1150 9150
+ 1 0 0 -1
+$EndComp
+NoConn ~ 2200 1150
+Wire Wire Line
+ 4400 5550 4500 5550
+Wire Wire Line
+ 4400 3150 4500 3150
+Text HLabel 10800 5050 2 60 Output ~ 0
+PTADR-
+Wire Wire Line
+ 10600 5050 10800 5050
+Wire Bus Line
+ 11300 4850 11250 4850
+Wire Bus Line
+ 11250 4850 11250 4750
+Entry Wire Line
+ 11150 4950 11250 4850
+Entry Wire Line
+ 11150 4850 11250 4750
+Entry Wire Line
+ 11150 4750 11250 4850
+Entry Wire Line
+ 11150 4650 11250 4750
+Wire Wire Line
+ 10600 4950 11150 4950
+Wire Wire Line
+ 10600 4850 11150 4850
+Wire Wire Line
+ 10600 4750 11150 4750
+Wire Wire Line
+ 10600 4650 11150 4650
+Text Label 10700 4950 0 60 ~ 0
+PTBE-3
+Text Label 10700 4850 0 60 ~ 0
+PTBE-2
+Text Label 10700 4750 0 60 ~ 0
+PTBE-1
+Text Label 10700 4650 0 60 ~ 0
+PTBE-0
+Text HLabel 11200 4250 2 60 Output ~ 0
+PTATN-
+Wire Bus Line
+ 11100 5850 11100 6150
+Wire Bus Line
+ 11100 5850 11150 5850
+Wire Bus Line
+ 11100 5350 11100 5750
+Wire Bus Line
+ 11100 5350 11150 5350
+Entry Wire Line
+ 11000 6250 11100 6150
+Entry Wire Line
+ 11000 6150 11100 6050
+Entry Wire Line
+ 11000 6050 11100 5950
+Entry Wire Line
+ 11000 5950 11100 5850
+Entry Wire Line
+ 11000 5850 11100 5750
+Entry Wire Line
+ 11000 5750 11100 5650
+Entry Wire Line
+ 11000 5650 11100 5550
+Entry Wire Line
+ 11000 5550 11100 5450
+Entry Wire Line
+ 11000 5450 11100 5350
+Text Label 10700 6250 0 60 ~ 0
+BE-3
+Text Label 10700 6150 0 60 ~ 0
+BE-2
+Text Label 10700 6050 0 60 ~ 0
+BE-1
+Text Label 10700 5950 0 60 ~ 0
+BE-0
+Wire Wire Line
+ 10600 6250 11000 6250
+Wire Wire Line
+ 10600 6150 11000 6150
+Wire Wire Line
+ 10600 6050 11000 6050
+Wire Wire Line
+ 10600 5950 11000 5950
+Wire Wire Line
+ 10600 5850 11000 5850
+Wire Wire Line
+ 10600 5750 11000 5750
+Wire Wire Line
+ 10600 5650 11000 5650
+Wire Wire Line
+ 10600 5550 11000 5550
+Wire Wire Line
+ 10600 5450 11000 5450
+Text Label 10700 5850 0 60 ~ 0
+ADR6
+Text Label 10700 5750 0 60 ~ 0
+ADR5
+Text Label 10700 5650 0 60 ~ 0
+ADR4
+Text Label 10700 5550 0 60 ~ 0
+ADR3
+Text Label 10700 5450 0 60 ~ 0
+ADR2
+Wire Bus Line
+ 11600 850 11600 4050
+Entry Wire Line
+ 11500 4150 11600 4050
+Entry Wire Line
+ 11500 4050 11600 3950
+Entry Wire Line
+ 11500 3950 11600 3850
+Entry Wire Line
+ 11500 3850 11600 3750
+Entry Wire Line
+ 11500 3750 11600 3650
+Entry Wire Line
+ 11500 3650 11600 3550
+Entry Wire Line
+ 11500 3550 11600 3450
+Entry Wire Line
+ 11500 3450 11600 3350
+Entry Wire Line
+ 11500 3350 11600 3250
+Entry Wire Line
+ 11500 3250 11600 3150
+Entry Wire Line
+ 11500 3150 11600 3050
+Entry Wire Line
+ 11500 3050 11600 2950
+Entry Wire Line
+ 11500 2950 11600 2850
+Entry Wire Line
+ 11500 2850 11600 2750
+Entry Wire Line
+ 11500 2750 11600 2650
+Entry Wire Line
+ 11500 2650 11600 2550
+Wire Wire Line
+ 10600 4150 11500 4150
+Wire Wire Line
+ 10600 4050 11500 4050
+Wire Wire Line
+ 10600 3950 11500 3950
+Wire Wire Line
+ 10600 3850 11500 3850
+Wire Wire Line
+ 10600 3750 11500 3750
+Wire Wire Line
+ 10600 3650 11500 3650
+Wire Wire Line
+ 10600 3550 11500 3550
+Wire Wire Line
+ 10600 3450 11500 3450
+Wire Wire Line
+ 10600 3350 11500 3350
+Wire Wire Line
+ 10600 3250 11500 3250
+Wire Wire Line
+ 10600 3150 11500 3150
+Wire Wire Line
+ 10600 3050 11500 3050
+Wire Wire Line
+ 10600 2950 11500 2950
+Wire Wire Line
+ 10600 2850 11500 2850
+Wire Wire Line
+ 10600 2750 11500 2750
+Wire Wire Line
+ 10600 2650 11500 2650
+Wire Wire Line
+ 2200 1550 2200 1650
+Wire Wire Line
+ 4500 6950 4500 7250
+Wire Wire Line
+ 2100 6950 2100 7250
+Wire Wire Line
+ 4950 9350 4950 9600
+Text Label 1500 6850 0 60 ~ 0
+P_AD1
+Text Label 1500 6650 0 60 ~ 0
+P_AD3
+Text Label 1500 6550 0 60 ~ 0
+P_AD5
+Text Label 1500 6350 0 60 ~ 0
+P_AD7
+Text Label 1500 6250 0 60 ~ 0
+P_AD8
+Text Label 1500 5850 0 60 ~ 0
+P_AD10
+Text Label 1500 5750 0 60 ~ 0
+P_AD12
+Text Label 1500 5550 0 60 ~ 0
+P_AD14
+Text Label 1450 4250 0 60 ~ 0
+P_AD17
+Text Label 1450 4050 0 60 ~ 0
+P_AD19
+Text Label 1450 3950 0 60 ~ 0
+P_AD21
+Text Label 1450 3750 0 60 ~ 0
+P_AD23
+Text Label 1450 3450 0 60 ~ 0
+P_AD25
+Text Label 1450 3350 0 60 ~ 0
+P_AD27
+Text Label 1450 3150 0 60 ~ 0
+P_AD29
+Text Label 1450 3050 0 60 ~ 0
+P_AD31
+Text Label 1450 5450 0 60 ~ 0
+P_C/BE1#
+Text Label 1450 4350 0 60 ~ 0
+P_C/BE2#
+Text Label 1450 3650 0 60 ~ 0
+P_C/BE3#
+Text Label 1450 2650 0 60 ~ 0
+P_CLK
+Text Label 1450 4550 0 60 ~ 0
+P_IRDY#
+Text Label 1450 4950 0 60 ~ 0
+P_LOCK#
+Text Label 1450 4750 0 60 ~ 0
+P_DEVSEL#
+Text Label 1450 2850 0 60 ~ 0
+P_REQ#
+Text Label 1450 5050 0 60 ~ 0
+P_PERR#
+Text Label 1450 5250 0 60 ~ 0
+P_SERR#
+Wire Wire Line
+ 1350 2650 2200 2650
+Wire Wire Line
+ 1350 2850 2200 2850
+Wire Wire Line
+ 1350 3050 2200 3050
+Wire Wire Line
+ 1350 3150 2200 3150
+Wire Wire Line
+ 1350 3350 2200 3350
+Wire Wire Line
+ 1350 3450 2200 3450
+Wire Wire Line
+ 1350 3650 2200 3650
+Wire Wire Line
+ 1350 3750 2200 3750
+Wire Wire Line
+ 1350 3950 2200 3950
+Wire Wire Line
+ 1350 4050 2200 4050
+Wire Wire Line
+ 1350 4250 2200 4250
+Wire Wire Line
+ 1350 4350 2200 4350
+Wire Wire Line
+ 1350 4550 2200 4550
+Wire Wire Line
+ 1350 4750 2200 4750
+Wire Wire Line
+ 1350 4950 2200 4950
+Wire Wire Line
+ 1350 5050 2200 5050
+Wire Wire Line
+ 1350 5250 2200 5250
+Wire Wire Line
+ 1350 5450 2200 5450
+Wire Wire Line
+ 1350 5550 2200 5550
+Wire Wire Line
+ 1350 5750 2200 5750
+Wire Wire Line
+ 1350 5850 2200 5850
+Wire Wire Line
+ 1350 6250 2200 6250
+Wire Wire Line
+ 1350 6350 2200 6350
+Wire Wire Line
+ 1350 6550 2200 6550
+Wire Wire Line
+ 1350 6650 2200 6650
+Wire Wire Line
+ 1350 6850 2200 6850
+Text Notes 2550 10900 0 60 ~ 0
+Decoupling for "S5933"
+Wire Notes Line
+ 1700 10950 1700 9050
+Wire Notes Line
+ 1700 10950 4600 10950
+Wire Notes Line
+ 4600 10950 4600 9050
+Wire Notes Line
+ 4600 9050 1700 9050
+$Comp
+L S5933_PQ160 U11
+U 1 1 21FA8347
+P 9450 5100
+F 0 "U11" H 9450 7350 60 0000 C CNN
+F 1 "S5933_PQ160" H 9900 950 60 0000 C CNN
+F 2 "lib_smd:PQFP160" H 9450 5100 60 0001 C CNN
+F 3 "" H 9450 5100 60 0001 C CNN
+ 1 9450 5100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND086
+U 1 1 2691B5BF
+P 2150 1350
+F 0 "#GND086" H 2150 1450 60 0001 C CNN
+F 1 "GND" H 2150 1250 60 0001 C CNN
+F 2 "" H 2150 1350 60 0001 C CNN
+F 3 "" H 2150 1350 60 0001 C CNN
+ 1 2150 1350
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND087
+U 1 1 2691B5CE
+P 2150 2550
+F 0 "#GND087" H 2150 2650 60 0001 C CNN
+F 1 "GND" H 2150 2450 60 0001 C CNN
+F 2 "" H 2150 2550 60 0001 C CNN
+F 3 "" H 2150 2550 60 0001 C CNN
+ 1 2150 2550
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND088
+U 1 1 2691B5D3
+P 2150 2750
+F 0 "#GND088" H 2150 2850 60 0001 C CNN
+F 1 "GND" H 2150 2650 60 0001 C CNN
+F 2 "" H 2150 2750 60 0001 C CNN
+F 3 "" H 2150 2750 60 0001 C CNN
+ 1 2150 2750
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND089
+U 1 1 2691B5D8
+P 2150 3250
+F 0 "#GND089" H 2150 3350 60 0001 C CNN
+F 1 "GND" H 2150 3150 60 0001 C CNN
+F 2 "" H 2150 3250 60 0001 C CNN
+F 3 "" H 2150 3250 60 0001 C CNN
+ 1 2150 3250
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND090
+U 1 1 2691B5DD
+P 2150 3850
+F 0 "#GND090" H 2150 3950 60 0001 C CNN
+F 1 "GND" H 2150 3750 60 0001 C CNN
+F 2 "" H 2150 3850 60 0001 C CNN
+F 3 "" H 2150 3850 60 0001 C CNN
+ 1 2150 3850
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND091
+U 1 1 2691B5E2
+P 2150 4450
+F 0 "#GND091" H 2150 4550 60 0001 C CNN
+F 1 "GND" H 2150 4350 60 0001 C CNN
+F 2 "" H 2150 4450 60 0001 C CNN
+F 3 "" H 2150 4450 60 0001 C CNN
+ 1 2150 4450
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND092
+U 1 1 2691B5E7
+P 2150 4850
+F 0 "#GND092" H 2150 4950 60 0001 C CNN
+F 1 "GND" H 2150 4750 60 0001 C CNN
+F 2 "" H 2150 4850 60 0001 C CNN
+F 3 "" H 2150 4850 60 0001 C CNN
+ 1 2150 4850
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND093
+U 1 1 2691B5EC
+P 2150 5650
+F 0 "#GND093" H 2150 5750 60 0001 C CNN
+F 1 "GND" H 2150 5550 60 0001 C CNN
+F 2 "" H 2150 5650 60 0001 C CNN
+F 3 "" H 2150 5650 60 0001 C CNN
+ 1 2150 5650
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND094
+U 1 1 2691B5F1
+P 2150 5950
+F 0 "#GND094" H 2150 6050 60 0001 C CNN
+F 1 "GND" H 2150 5850 60 0001 C CNN
+F 2 "" H 2150 5950 60 0001 C CNN
+F 3 "" H 2150 5950 60 0001 C CNN
+ 1 2150 5950
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND095
+U 1 1 2691B5F6
+P 2150 6750
+F 0 "#GND095" H 2150 6850 60 0001 C CNN
+F 1 "GND" H 2150 6650 60 0001 C CNN
+F 2 "" H 2150 6750 60 0001 C CNN
+F 3 "" H 2150 6750 60 0001 C CNN
+ 1 2150 6750
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND096
+U 1 1 2691B5FB
+P 4500 6650
+F 0 "#GND096" H 4500 6750 60 0001 C CNN
+F 1 "GND" H 4500 6550 60 0001 C CNN
+F 2 "" H 4500 6650 60 0001 C CNN
+F 3 "" H 4500 6650 60 0001 C CNN
+ 1 4500 6650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND097
+U 1 1 2691B600
+P 4500 5850
+F 0 "#GND097" H 4500 5950 60 0001 C CNN
+F 1 "GND" H 4500 5750 60 0001 C CNN
+F 2 "" H 4500 5850 60 0001 C CNN
+F 3 "" H 4500 5850 60 0001 C CNN
+ 1 4500 5850
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND098
+U 1 1 2691B605
+P 4500 5250
+F 0 "#GND098" H 4500 5350 60 0001 C CNN
+F 1 "GND" H 4500 5150 60 0001 C CNN
+F 2 "" H 4500 5250 60 0001 C CNN
+F 3 "" H 4500 5250 60 0001 C CNN
+ 1 4500 5250
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND099
+U 1 1 2691B60A
+P 4500 4750
+F 0 "#GND099" H 4500 4850 60 0001 C CNN
+F 1 "GND" H 4500 4650 60 0001 C CNN
+F 2 "" H 4500 4750 60 0001 C CNN
+F 3 "" H 4500 4750 60 0001 C CNN
+ 1 4500 4750
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0100
+U 1 1 2691B60F
+P 4500 4550
+F 0 "#GND0100" H 4500 4650 60 0001 C CNN
+F 1 "GND" H 4500 4450 60 0001 C CNN
+F 2 "" H 4500 4550 60 0001 C CNN
+F 3 "" H 4500 4550 60 0001 C CNN
+ 1 4500 4550
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0101
+U 1 1 2691B614
+P 4500 4050
+F 0 "#GND0101" H 4500 4150 60 0001 C CNN
+F 1 "GND" H 4500 3950 60 0001 C CNN
+F 2 "" H 4500 4050 60 0001 C CNN
+F 3 "" H 4500 4050 60 0001 C CNN
+ 1 4500 4050
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0102
+U 1 1 2691B619
+P 4500 3450
+F 0 "#GND0102" H 4500 3550 60 0001 C CNN
+F 1 "GND" H 4500 3350 60 0001 C CNN
+F 2 "" H 4500 3450 60 0001 C CNN
+F 3 "" H 4500 3450 60 0001 C CNN
+ 1 4500 3450
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0103
+U 1 1 2691B61E
+P 4500 2850
+F 0 "#GND0103" H 4500 2850 40 0001 C CNN
+F 1 "GND" H 4500 2780 40 0001 C CNN
+F 2 "" H 4500 2850 60 0001 C CNN
+F 3 "" H 4500 2850 60 0001 C CNN
+ 1 4500 2850
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0104
+U 1 1 2691B63C
+P 1500 2250
+F 0 "#GND0104" H 1500 2250 40 0001 C CNN
+F 1 "GND" H 1500 2180 40 0001 C CNN
+F 2 "" H 1500 2250 60 0001 C CNN
+F 3 "" H 1500 2250 60 0001 C CNN
+ 1 1500 2250
+ 1 0 0 -1
+$EndComp
+$Comp
+L TEST W4
+U 1 1 2691B632
+P 1800 2150
+F 0 "W4" H 1800 2210 40 0000 C CNN
+F 1 "TEST" H 1800 2080 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 1800 2150 60 0001 C CNN
+F 3 "" H 1800 2150 60 0001 C CNN
+ 1 1800 2150
+ 1 0 0 -1
+$EndComp
+$Comp
+L TEST W5
+U 1 1 2691B637
+P 1800 1950
+F 0 "W5" H 1800 2010 40 0000 C CNN
+F 1 "TEST" H 1800 1880 40 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_2X1" H 1800 1950 60 0001 C CNN
+F 3 "" H 1800 1950 60 0001 C CNN
+ 1 1800 1950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0105
+U 1 1 26A799F2
+P 12050 6700
+F 0 "#GND0105" H 12050 6800 60 0001 C CNN
+F 1 "GND" H 12050 6600 60 0001 C CNN
+F 2 "" H 12050 6700 60 0001 C CNN
+F 3 "" H 12050 6700 60 0001 C CNN
+ 1 12050 6700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0106
+U 1 1 26A799FC
+P 11900 7950
+F 0 "#GND0106" H 11900 8050 60 0001 C CNN
+F 1 "GND" H 11900 7850 60 0001 C CNN
+F 2 "" H 11900 7950 60 0001 C CNN
+F 3 "" H 11900 7950 60 0001 C CNN
+ 1 11900 7950
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0107
+U 1 1 26A79A06
+P 11900 8850
+F 0 "#GND0107" H 11900 8950 60 0001 C CNN
+F 1 "GND" H 11900 8750 60 0001 C CNN
+F 2 "" H 11900 8850 60 0001 C CNN
+F 3 "" H 11900 8850 60 0001 C CNN
+ 1 11900 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R5
+U 1 1 26A799E8
+P 12500 6150
+F 0 "R5" V 12580 6150 50 0000 C CNN
+F 1 "10K" V 12500 6150 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 12500 6150 60 0001 C CNN
+F 3 "" H 12500 6150 60 0001 C CNN
+ 1 12500 6150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R6
+U 1 1 26A79A01
+P 12350 7350
+F 0 "R6" V 12430 7350 50 0000 C CNN
+F 1 "10K" V 12350 7350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 12350 7350 60 0001 C CNN
+F 3 "" H 12350 7350 60 0001 C CNN
+ 1 12350 7350
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R7
+U 1 1 26A79A0B
+P 12350 8250
+F 0 "R7" V 12430 8250 50 0000 C CNN
+F 1 "10K" V 12350 8250 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 12350 8250 60 0001 C CNN
+F 3 "" H 12350 8250 60 0001 C CNN
+ 1 12350 8250
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0108
+U 1 1 26B211BB
+P 4950 9600
+F 0 "#GND0108" H 4950 9700 60 0001 C CNN
+F 1 "GND" H 4950 9500 60 0001 C CNN
+F 2 "" H 4950 9600 60 0001 C CNN
+F 3 "" H 4950 9600 60 0001 C CNN
+ 1 4950 9600
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R28
+U 1 1 26B211C0
+P 6800 9300
+F 0 "R28" V 6880 9300 50 0000 C CNN
+F 1 "2,2K" V 6800 9300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 6800 9300 60 0001 C CNN
+F 3 "" H 6800 9300 60 0001 C CNN
+ 1 6800 9300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R29
+U 1 1 26B211CF
+P 7100 9300
+F 0 "R29" V 7180 9300 50 0000 C CNN
+F 1 "2,2K" V 7100 9300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 7100 9300 60 0001 C CNN
+F 3 "" H 7100 9300 60 0001 C CNN
+ 1 7100 9300
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C24
+U 1 1 26B211D9
+P 1900 9600
+F 0 "C24" H 1950 9700 50 0000 L CNN
+F 1 "100nF" H 1950 9500 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 1900 9600 60 0001 C CNN
+F 3 "" H 1900 9600 60 0001 C CNN
+ 1 1900 9600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0109
+U 1 1 26B211DE
+P 1900 9850
+F 0 "#GND0109" H 1900 9950 60 0001 C CNN
+F 1 "GND" H 1900 9750 60 0001 C CNN
+F 2 "" H 1900 9850 60 0001 C CNN
+F 3 "" H 1900 9850 60 0001 C CNN
+ 1 1900 9850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C25
+U 1 1 26B211E3
+P 2600 9600
+F 0 "C25" H 2650 9700 50 0000 L CNN
+F 1 "100nF" H 2650 9500 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 2600 9600 60 0001 C CNN
+F 3 "" H 2600 9600 60 0001 C CNN
+ 1 2600 9600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0110
+U 1 1 26B211E8
+P 2600 9850
+F 0 "#GND0110" H 2600 9950 60 0001 C CNN
+F 1 "GND" H 2600 9750 60 0001 C CNN
+F 2 "" H 2600 9850 60 0001 C CNN
+F 3 "" H 2600 9850 60 0001 C CNN
+ 1 2600 9850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C26
+U 1 1 26B211ED
+P 3300 9600
+F 0 "C26" H 3350 9700 50 0000 L CNN
+F 1 "100nF" H 3350 9500 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 3300 9600 60 0001 C CNN
+F 3 "" H 3300 9600 60 0001 C CNN
+ 1 3300 9600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0111
+U 1 1 26B211F2
+P 3300 9850
+F 0 "#GND0111" H 3300 9950 60 0001 C CNN
+F 1 "GND" H 3300 9750 60 0001 C CNN
+F 2 "" H 3300 9850 60 0001 C CNN
+F 3 "" H 3300 9850 60 0001 C CNN
+ 1 3300 9850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C27
+U 1 1 26B211F7
+P 4000 9600
+F 0 "C27" H 4050 9700 50 0000 L CNN
+F 1 "100nF" H 4050 9500 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 4000 9600 60 0001 C CNN
+F 3 "" H 4000 9600 60 0001 C CNN
+ 1 4000 9600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0112
+U 1 1 26B211FC
+P 4000 9850
+F 0 "#GND0112" H 4000 9950 60 0001 C CNN
+F 1 "GND" H 4000 9750 60 0001 C CNN
+F 2 "" H 4000 9850 60 0001 C CNN
+F 3 "" H 4000 9850 60 0001 C CNN
+ 1 4000 9850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C28
+U 1 1 26B21201
+P 1900 10400
+F 0 "C28" H 1950 10500 50 0000 L CNN
+F 1 "100nF" H 1950 10300 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 1900 10400 60 0001 C CNN
+F 3 "" H 1900 10400 60 0001 C CNN
+ 1 1900 10400
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0113
+U 1 1 26B21206
+P 1900 10650
+F 0 "#GND0113" H 1900 10750 60 0001 C CNN
+F 1 "GND" H 1900 10550 60 0001 C CNN
+F 2 "" H 1900 10650 60 0001 C CNN
+F 3 "" H 1900 10650 60 0001 C CNN
+ 1 1900 10650
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C29
+U 1 1 26B2120B
+P 2600 10400
+F 0 "C29" H 2650 10500 50 0000 L CNN
+F 1 "100nF" H 2650 10300 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 2600 10400 60 0001 C CNN
+F 3 "" H 2600 10400 60 0001 C CNN
+ 1 2600 10400
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0114
+U 1 1 26B21210
+P 2600 10650
+F 0 "#GND0114" H 2600 10750 60 0001 C CNN
+F 1 "GND" H 2600 10550 60 0001 C CNN
+F 2 "" H 2600 10650 60 0001 C CNN
+F 3 "" H 2600 10650 60 0001 C CNN
+ 1 2600 10650
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C30
+U 1 1 26B21215
+P 3300 10400
+F 0 "C30" H 3350 10500 50 0000 L CNN
+F 1 "100nF" H 3350 10300 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 3300 10400 60 0001 C CNN
+F 3 "" H 3300 10400 60 0001 C CNN
+ 1 3300 10400
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0115
+U 1 1 26B2121A
+P 3300 10650
+F 0 "#GND0115" H 3300 10750 60 0001 C CNN
+F 1 "GND" H 3300 10550 60 0001 C CNN
+F 2 "" H 3300 10650 60 0001 C CNN
+F 3 "" H 3300 10650 60 0001 C CNN
+ 1 3300 10650
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C31
+U 1 1 26B2121F
+P 4000 10400
+F 0 "C31" H 4050 10500 50 0000 L CNN
+F 1 "100nF" H 4050 10300 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 4000 10400 60 0001 C CNN
+F 3 "" H 4000 10400 60 0001 C CNN
+ 1 4000 10400
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0116
+U 1 1 26B21224
+P 4000 10650
+F 0 "#GND0116" H 4000 10750 60 0001 C CNN
+F 1 "GND" H 4000 10550 60 0001 C CNN
+F 2 "" H 4000 10650 60 0001 C CNN
+F 3 "" H 4000 10650 60 0001 C CNN
+ 1 4000 10650
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0117
+U 1 1 2820F094
+P 700 9450
+F 0 "#GND0117" H 700 9550 60 0001 C CNN
+F 1 "GND" H 700 9350 60 0000 C CNN
+F 2 "" H 700 9450 60 0001 C CNN
+F 3 "" H 700 9450 60 0001 C CNN
+ 1 700 9450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C38
+U 1 1 2820F08A
+P 700 9150
+F 0 "C38" H 750 9250 50 0000 L CNN
+F 1 "4,7uF" H 750 9050 50 0000 L CNN
+F 2 "lib_smd:SM1812L" H 700 9150 60 0001 C CNN
+F 3 "" H 700 9150 60 0001 C CNN
+ 1 700 9150
+ 1 0 0 -1
+$EndComp
+$Comp
+L BUSPCI-5V BUS1
+U 1 1 269C6109
+P 3300 4200
+F 0 "BUS1" H 3300 7400 60 0000 C CNN
+F 1 "BUSPCI_5V" H 3300 1000 60 0000 C CNN
+F 2 "Connect:BUSPCI" H 3300 4200 60 0001 C CNN
+F 3 "" H 3300 4200 60 0001 C CNN
+ 1 3300 4200
+ 1 0 0 -1
+$EndComp
+$Comp
+L 24C16 U1
+U 1 1 2F5F7E5C
+P 5750 9550
+F 0 "U1" H 5900 9900 60 0000 C CNN
+F 1 "24C16" H 5950 9200 60 0000 C CNN
+F 2 "dip_sockets:DIP-8__300" H 5750 9550 60 0001 C CNN
+F 3 "" H 5750 9550 60 0001 C CNN
+ 1 5750 9550
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR1
+U 1 1 C8AF8090
+P 14350 1300
+F 0 "RR1" H 14400 1850 70 0000 C CNN
+F 1 "8x10K" V 14380 1300 70 0000 C CNN
+F 2 "Connect:SIL-9" H 14350 1300 60 0001 C CNN
+F 3 "" H 14350 1300 60 0001 C CNN
+ 1 14350 1300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR2
+U 1 1 C8B01EF2
+P 14350 2300
+F 0 "RR2" H 14400 2850 70 0000 C CNN
+F 1 "8x10K" V 14380 2300 70 0000 C CNN
+F 2 "Connect:SIL-9" H 14350 2300 60 0001 C CNN
+F 3 "" H 14350 2300 60 0001 C CNN
+ 1 14350 2300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR3
+U 1 1 C8B23B9F
+P 14350 3300
+F 0 "RR3" H 14400 3850 70 0000 C CNN
+F 1 "8x10K" V 14380 3300 70 0000 C CNN
+F 2 "Connect:SIL-9" H 14350 3300 60 0001 C CNN
+F 3 "" H 14350 3300 60 0001 C CNN
+ 1 14350 3300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR4
+U 1 1 C8B2B4CE
+P 14350 4300
+F 0 "RR4" H 14400 4850 70 0000 C CNN
+F 1 "8x10K" V 14380 4300 70 0000 C CNN
+F 2 "Discret:r_pack8" H 14350 4300 60 0001 C CNN
+F 3 "" H 14350 4300 60 0001 C CNN
+ 1 14350 4300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR5
+U 1 1 C8B2B4E3
+P 14350 5300
+F 0 "RR5" H 14400 5850 70 0000 C CNN
+F 1 "8x10K" V 14380 5300 70 0000 C CNN
+F 2 "Discret:r_pack8" H 14350 5300 60 0001 C CNN
+F 3 "" H 14350 5300 60 0001 C CNN
+ 1 14350 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR6
+U 1 1 C93123CE
+P 14350 6300
+F 0 "RR6" H 14400 6850 70 0000 C CNN
+F 1 "8x10K" V 14380 6300 70 0000 C CNN
+F 2 "Connect:SIL-9" H 14350 6300 60 0001 C CNN
+F 3 "" H 14350 6300 60 0001 C CNN
+ 1 14350 6300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR7
+U 1 1 C931248E
+P 14350 7300
+F 0 "RR7" H 14400 7850 70 0000 C CNN
+F 1 "8x10K" V 14380 7300 70 0000 C CNN
+F 2 "Discret:r_pack8" H 14350 7300 60 0001 C CNN
+F 3 "" H 14350 7300 60 0001 C CNN
+ 1 14350 7300
+ 1 0 0 -1
+$EndComp
+$Comp
+L RR8 RR8
+U 1 1 C9363A3F
+P 14350 8300
+F 0 "RR8" H 14400 8850 70 0000 C CNN
+F 1 "8x10K" V 14380 8300 70 0000 C CNN
+F 2 "Connect:SIL-9" H 14350 8300 60 0001 C CNN
+F 3 "" H 14350 8300 60 0001 C CNN
+ 1 14350 8300
+ 1 0 0 -1
+$EndComp
+$Comp
+L TEST W2
+U 1 1 26A799F7
+P 11900 7650
+F 0 "W2" H 11900 7750 60 0000 C CNN
+F 1 "FLOAT#" H 11900 7550 60 0000 C CNN
+F 2 "Connect:GS2" H 11900 7650 60 0001 C CNN
+F 3 "" H 11900 7650 60 0001 C CNN
+ 1 11900 7650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L TEST W3
+U 1 1 26A79A10
+P 11900 8550
+F 0 "W3" H 11900 8610 40 0000 C CNN
+F 1 "SERNV" H 11900 8480 40 0000 C CNN
+F 2 "Connect:GS2" H 11900 8550 60 0001 C CNN
+F 3 "" H 11900 8550 60 0001 C CNN
+ 1 11900 8550
+ 0 -1 -1 0
+$EndComp
+$Comp
+L TEST W1
+U 1 1 26A799ED
+P 12050 6450
+F 0 "W1" H 12050 6550 60 0000 C CNN
+F 1 "16/32" H 12050 6350 60 0000 C CNN
+F 2 "Connect:GS2" H 12050 6450 60 0001 C CNN
+F 3 "" H 12050 6450 60 0001 C CNN
+ 1 12050 6450
+ 0 -1 -1 0
+$EndComp
+Text HLabel 11700 850 2 60 BiDi ~ 0
+DQ[0..31]
+Text HLabel 7100 6650 0 60 BiDi ~ 0
+IRQ_SRL
+Text HLabel 7100 7450 0 60 BiDi ~ 0
+X_IRQ
+Text HLabel 11200 4350 2 60 Input ~ 0
+PTRDY-
+Text HLabel 11200 4450 2 60 Output ~ 0
+PTNUM0
+Text HLabel 11200 4550 2 60 Output ~ 0
+PTNUM1
+Text HLabel 11300 4850 2 60 Output ~ 0
+PTBE-[0..3]
+Text HLabel 10800 5150 2 60 Output ~ 0
+PTWR
+Text HLabel 10800 5250 2 60 Output ~ 0
+PTBURST-
+Text HLabel 11150 5350 2 60 Input ~ 0
+ADR[2..6]
+Text HLabel 11150 5850 2 60 Input ~ 0
+BE-[0..3]
+Text HLabel 11400 6450 2 60 Input ~ 0
+SELECT-
+Text HLabel 11400 6550 2 60 Input ~ 0
+WR-
+Text HLabel 11400 6650 2 60 Input ~ 0
+RD-
+Text HLabel 10800 7650 2 60 Output ~ 0
+BPCLK
+Text HLabel 10800 7750 2 60 Output ~ 0
+SYSRST-
+Text HLabel 10800 7150 2 60 Output ~ 0
+WRFULL
+Text HLabel 10800 7250 2 60 Output ~ 0
+RDEMPTY
+Text HLabel 11400 6850 2 60 Input ~ 0
+WRFIFO-
+Text HLabel 11400 6950 2 60 Input ~ 0
+RDFIFO-
+Text HLabel 10800 7550 2 60 Output ~ 0
+IRQ-
+Text Label 7600 1050 0 60 ~ 0
+P_AD0
+Text Label 7600 1150 0 60 ~ 0
+P_AD1
+Text Label 7600 1250 0 60 ~ 0
+P_AD2
+Text Label 7600 1350 0 60 ~ 0
+P_AD3
+Text Label 7600 1450 0 60 ~ 0
+P_AD4
+Text Label 7600 1550 0 60 ~ 0
+P_AD5
+Text Label 7600 1650 0 60 ~ 0
+P_AD6
+Text Label 7600 1750 0 60 ~ 0
+P_AD7
+Text Label 7600 1850 0 60 ~ 0
+P_AD8
+Text Label 7600 1950 0 60 ~ 0
+P_AD9
+Text Label 7600 2050 0 60 ~ 0
+P_AD10
+Text Label 7600 2150 0 60 ~ 0
+P_AD11
+Text Label 7600 2250 0 60 ~ 0
+P_AD12
+Text Label 7600 2350 0 60 ~ 0
+P_AD13
+Text Label 7600 2450 0 60 ~ 0
+P_AD14
+Text Label 7600 2550 0 60 ~ 0
+P_AD15
+Text Label 7600 2650 0 60 ~ 0
+P_AD16
+Text Label 7600 2750 0 60 ~ 0
+P_AD17
+Text Label 7600 2850 0 60 ~ 0
+P_AD18
+Text Label 7600 2950 0 60 ~ 0
+P_AD19
+Text Label 7600 3050 0 60 ~ 0
+P_AD20
+Text Label 7600 3150 0 60 ~ 0
+P_AD21
+Text Label 7600 3250 0 60 ~ 0
+P_AD22
+Text Label 7600 3350 0 60 ~ 0
+P_AD23
+Text Label 7600 3450 0 60 ~ 0
+P_AD24
+Text Label 7600 3550 0 60 ~ 0
+P_AD25
+Text Label 7600 3650 0 60 ~ 0
+P_AD26
+Text Label 7600 3750 0 60 ~ 0
+P_AD27
+Text Label 7600 3850 0 60 ~ 0
+P_AD28
+Text Label 7600 3950 0 60 ~ 0
+P_AD29
+Text Label 7600 4050 0 60 ~ 0
+P_AD30
+Text Label 7600 4150 0 60 ~ 0
+P_AD31
+Text Label 4800 6850 0 60 ~ 0
+P_AD0
+Text Label 4800 6750 0 60 ~ 0
+P_AD2
+Text Label 4800 6550 0 60 ~ 0
+P_AD4
+Text Label 4800 6450 0 60 ~ 0
+P_AD6
+Text Label 4800 5950 0 60 ~ 0
+P_AD9
+Text Label 4800 5750 0 60 ~ 0
+P_AD11
+Text Label 4800 5650 0 60 ~ 0
+P_AD13
+Text Label 4800 5450 0 60 ~ 0
+P_AD15
+Text Label 4800 4250 0 60 ~ 0
+P_AD16
+Text Label 4800 4150 0 60 ~ 0
+P_AD18
+Text Label 4800 3950 0 60 ~ 0
+P_AD20
+Text Label 4800 3850 0 60 ~ 0
+P_AD22
+Text Label 4800 3550 0 60 ~ 0
+P_AD24
+Text Label 4800 3350 0 60 ~ 0
+P_AD26
+Text Label 4800 3250 0 60 ~ 0
+P_AD28
+Text Label 4800 3050 0 60 ~ 0
+P_AD30
+Text Label 7500 4250 0 60 ~ 0
+P_C/BE0#
+Text Label 7500 4350 0 60 ~ 0
+P_C/BE1#
+Text Label 7500 4450 0 60 ~ 0
+P_C/BE2#
+Text Label 7500 4550 0 60 ~ 0
+P_C/BE3#
+Text Label 4800 6250 0 60 ~ 0
+P_C/BE0#
+Text Label 7600 4650 0 60 ~ 0
+P_PAR
+Text Label 7600 4750 0 60 ~ 0
+P_CLK
+Text Label 7600 4850 0 60 ~ 0
+P_RST#
+Text Label 4800 5350 0 60 ~ 0
+P_PAR
+Text Label 4800 2550 0 60 ~ 0
+P_RST#
+Text Label 7500 5050 0 60 ~ 0
+P_FRAME#
+Text Label 7500 5150 0 60 ~ 0
+P_IRDY#
+Text Label 7500 5250 0 60 ~ 0
+P_TRDY#
+Text Label 7500 5350 0 60 ~ 0
+P_STOP#
+Text Label 7500 5450 0 60 ~ 0
+P_LOCK#
+Text Label 4800 4450 0 60 ~ 0
+P_FRAME#
+Text Label 4800 4650 0 60 ~ 0
+P_TRDY#
+Text Label 4800 4850 0 60 ~ 0
+P_STOP#
+Text Label 7500 5650 0 60 ~ 0
+P_IDSEL
+Text Label 7500 5750 0 60 ~ 0
+P_DEVSEL#
+Text Label 7500 5850 0 60 ~ 0
+P_REQ#
+Text Label 7500 5950 0 60 ~ 0
+P_GNT#
+Text Label 7500 6050 0 60 ~ 0
+P_PERR#
+Text Label 7500 6150 0 60 ~ 0
+P_SERR#
+Text Label 7500 6350 0 60 ~ 0
+P_INTA#
+Text Label 4800 3650 0 60 ~ 0
+P_IDSEL
+Text Label 4800 2750 0 60 ~ 0
+P_GNT#
+Text Label 4800 1650 0 60 ~ 0
+P_INTA#
+Text Label 10800 1050 0 60 ~ 0
+DQ0
+Text Label 10800 1150 0 60 ~ 0
+DQ1
+Text Label 10800 1250 0 60 ~ 0
+DQ2
+Text Label 10800 1350 0 60 ~ 0
+DQ3
+Text Label 10800 1450 0 60 ~ 0
+DQ4
+Text Label 10800 1550 0 60 ~ 0
+DQ5
+Text Label 10800 1650 0 60 ~ 0
+DQ6
+Text Label 10800 1750 0 60 ~ 0
+DQ7
+Text Label 10800 1850 0 60 ~ 0
+DQ8
+Text Label 10800 1950 0 60 ~ 0
+DQ9
+Text Label 10800 2050 0 60 ~ 0
+DQ10
+Text Label 10800 2150 0 60 ~ 0
+DQ11
+Text Label 10800 2250 0 60 ~ 0
+DQ12
+Text Label 10800 2350 0 60 ~ 0
+DQ13
+Text Label 10800 2450 0 60 ~ 0
+DQ14
+Text Label 10800 2550 0 60 ~ 0
+DQ15
+Text Label 10800 2650 0 60 ~ 0
+DQ16
+Text Label 10800 2750 0 60 ~ 0
+DQ17
+Text Label 10800 2850 0 60 ~ 0
+DQ18
+Text Label 10800 2950 0 60 ~ 0
+DQ19
+Text Label 10800 3050 0 60 ~ 0
+DQ20
+Text Label 10800 3150 0 60 ~ 0
+DQ21
+Text Label 10800 3250 0 60 ~ 0
+DQ22
+Text Label 10800 3350 0 60 ~ 0
+DQ23
+Text Label 10800 3450 0 60 ~ 0
+DQ24
+Text Label 10800 3550 0 60 ~ 0
+DQ25
+Text Label 10800 3650 0 60 ~ 0
+DQ26
+Text Label 10800 3750 0 60 ~ 0
+DQ27
+Text Label 10800 3850 0 60 ~ 0
+DQ28
+Text Label 10800 3950 0 60 ~ 0
+DQ29
+Text Label 10800 4050 0 60 ~ 0
+DQ30
+Text Label 10800 4150 0 60 ~ 0
+DQ31
+Text Label 7800 6750 0 60 ~ 0
+EA1
+Text Label 7800 6850 0 60 ~ 0
+EA2
+Text Label 7800 6950 0 60 ~ 0
+EA3
+Text Label 7800 7050 0 60 ~ 0
+EA4
+Text Label 7800 7150 0 60 ~ 0
+EA5
+Text Label 7800 7250 0 60 ~ 0
+EA6
+Text Label 7800 7350 0 60 ~ 0
+EA7
+Text Label 7800 7550 0 60 ~ 0
+EA9
+Text Label 7800 7650 0 60 ~ 0
+EA10
+Text Label 7800 7750 0 60 ~ 0
+EA11
+Text Label 7800 7850 0 60 ~ 0
+EA12
+Text Label 7800 7950 0 60 ~ 0
+EA13
+Text Label 7800 8050 0 60 ~ 0
+EA14
+Text Label 7800 8150 0 60 ~ 0
+EA15
+Text Label 7800 8250 0 60 ~ 0
+EQ0
+Text Label 7800 8350 0 60 ~ 0
+EQ1
+Text Label 7800 8450 0 60 ~ 0
+EQ2
+Text Label 7800 8550 0 60 ~ 0
+EQ3
+Text Label 7800 8650 0 60 ~ 0
+EQ4
+Text Label 7800 8750 0 60 ~ 0
+EQ5
+Text Label 7800 8850 0 60 ~ 0
+EQ6
+Text Label 7800 8950 0 60 ~ 0
+EQ7
+Text Label 13500 1150 0 60 ~ 0
+EQ1
+Text Label 13500 1350 0 60 ~ 0
+EQ2
+Text Label 13500 1450 0 60 ~ 0
+EQ3
+Text Label 13500 1650 0 60 ~ 0
+EQ4
+Text Label 13500 2150 0 60 ~ 0
+EQ5
+Text Label 13500 1950 0 60 ~ 0
+EQ6
+Text Label 13500 2650 0 60 ~ 0
+EQ7
+Text Label 13500 950 0 60 ~ 0
+EQ0
+Text Label 13500 4450 0 60 ~ 0
+DQ16
+Text Label 13500 4650 0 60 ~ 0
+DQ17
+Text Label 13500 6350 0 60 ~ 0
+DQ18
+Text Label 13500 6050 0 60 ~ 0
+DQ20
+Text Label 13500 5350 0 60 ~ 0
+DQ21
+Text Label 13500 4050 0 60 ~ 0
+DQ22
+Text Label 13500 4250 0 60 ~ 0
+DQ23
+Text Label 13500 3050 0 60 ~ 0
+DQ24
+Text Label 13500 3650 0 60 ~ 0
+DQ25
+Text Label 13500 2550 0 60 ~ 0
+DQ26
+Text Label 13500 2250 0 60 ~ 0
+DQ27
+Text Label 13500 2050 0 60 ~ 0
+DQ28
+Text Label 13500 1550 0 60 ~ 0
+DQ29
+Text Label 13500 1250 0 60 ~ 0
+DQ30
+Text Label 13500 1050 0 60 ~ 0
+DQ31
+Text Label 13400 2450 0 60 ~ 0
+IRQ_SRL
+Text Label 13400 5150 0 60 ~ 0
+X_IRQ
+Text Label 13500 2350 0 60 ~ 0
+EA1
+Text Label 13500 3550 0 60 ~ 0
+EA2
+Text Label 13500 3350 0 60 ~ 0
+EA3
+Text Label 13500 2950 0 60 ~ 0
+EA4
+Text Label 13500 4150 0 60 ~ 0
+EA5
+Text Label 13500 3950 0 60 ~ 0
+EA6
+Text Label 13500 5650 0 60 ~ 0
+EA7
+Text Label 13500 5050 0 60 ~ 0
+EA9
+Text Label 13500 6650 0 60 ~ 0
+EA10
+Text Label 13500 6450 0 60 ~ 0
+EA11
+Text Label 13500 6250 0 60 ~ 0
+EA12
+Text Label 13500 6150 0 60 ~ 0
+EA13
+Text Label 13500 4550 0 60 ~ 0
+EA14
+Text Label 13500 4350 0 60 ~ 0
+EA15
+Text Label 13500 6950 0 60 ~ 0
+DQ0
+Text Label 13500 7050 0 60 ~ 0
+DQ1
+Text Label 13500 7150 0 60 ~ 0
+DQ2
+Text Label 13500 7250 0 60 ~ 0
+DQ3
+Text Label 13500 7350 0 60 ~ 0
+DQ4
+Text Label 13500 7450 0 60 ~ 0
+DQ5
+Text Label 13500 7550 0 60 ~ 0
+DQ6
+Text Label 13500 7650 0 60 ~ 0
+DQ7
+Text Label 13500 8650 0 60 ~ 0
+DQ8
+Text Label 13500 8550 0 60 ~ 0
+DQ9
+Text Label 13500 8450 0 60 ~ 0
+DQ10
+Text Label 13500 8350 0 60 ~ 0
+DQ11
+Text Label 13500 8250 0 60 ~ 0
+DQ12
+Text Label 13500 8150 0 60 ~ 0
+DQ13
+Text Label 13500 8050 0 60 ~ 0
+DQ14
+Text Label 13500 7950 0 60 ~ 0
+DQ15
+Text Label 13400 3150 0 60 ~ 0
+SELECT-
+Text Label 13500 3250 0 60 ~ 0
+WR-
+Text Label 13500 3450 0 60 ~ 0
+RD-
+Text Label 13400 5550 0 60 ~ 0
+WRFIFO-
+Text Label 13400 5450 0 60 ~ 0
+RDFIFO-
+Text Label 13400 4950 0 60 ~ 0
+PTATN-
+Text Label 13400 5950 0 60 ~ 0
+PTRDY-
+Text Label 13400 5250 0 60 ~ 0
+PTADR-
+Text Label 13500 6550 0 60 ~ 0
+DQ19
+$Comp
+L +5V #+0118
+U 1 1 4BF0369F
+P 6550 8850
+F 0 "#+0118" H 6550 9050 40 0001 C CNN
+F 1 "+5V" H 6550 9000 40 0000 C CNN
+F 2 "" H 6550 8850 60 0001 C CNN
+F 3 "" H 6550 8850 60 0001 C CNN
+ 1 6550 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0119
+U 1 1 4BF036A1
+P 1900 9350
+F 0 "#+0119" H 1900 9550 40 0001 C CNN
+F 1 "+5V" H 1900 9500 40 0000 C CNN
+F 2 "" H 1900 9350 60 0001 C CNN
+F 3 "" H 1900 9350 60 0001 C CNN
+ 1 1900 9350
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0120
+U 1 1 4BF036A3
+P 2600 9350
+F 0 "#+0120" H 2600 9550 40 0001 C CNN
+F 1 "+5V" H 2600 9500 40 0000 C CNN
+F 2 "" H 2600 9350 60 0001 C CNN
+F 3 "" H 2600 9350 60 0001 C CNN
+ 1 2600 9350
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0121
+U 1 1 4BF036A2
+P 3300 9350
+F 0 "#+0121" H 3300 9550 40 0001 C CNN
+F 1 "+5V" H 3300 9500 40 0000 C CNN
+F 2 "" H 3300 9350 60 0001 C CNN
+F 3 "" H 3300 9350 60 0001 C CNN
+ 1 3300 9350
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0122
+U 1 1 4BF036A0
+P 4000 9350
+F 0 "#+0122" H 4000 9550 40 0001 C CNN
+F 1 "+5V" H 4000 9500 40 0000 C CNN
+F 2 "" H 4000 9350 60 0001 C CNN
+F 3 "" H 4000 9350 60 0001 C CNN
+ 1 4000 9350
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0123
+U 1 1 4BF03698
+P 1900 10150
+F 0 "#+0123" H 1900 10350 40 0001 C CNN
+F 1 "+5V" H 1900 10300 40 0000 C CNN
+F 2 "" H 1900 10150 60 0001 C CNN
+F 3 "" H 1900 10150 60 0001 C CNN
+ 1 1900 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0124
+U 1 1 4BF03697
+P 2600 10150
+F 0 "#+0124" H 2600 10350 40 0001 C CNN
+F 1 "+5V" H 2600 10300 40 0000 C CNN
+F 2 "" H 2600 10150 60 0001 C CNN
+F 3 "" H 2600 10150 60 0001 C CNN
+ 1 2600 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0125
+U 1 1 4BF03696
+P 3300 10150
+F 0 "#+0125" H 3300 10350 40 0001 C CNN
+F 1 "+5V" H 3300 10300 40 0000 C CNN
+F 2 "" H 3300 10150 60 0001 C CNN
+F 3 "" H 3300 10150 60 0001 C CNN
+ 1 3300 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0126
+U 1 1 4BF03695
+P 4000 10150
+F 0 "#+0126" H 4000 10350 40 0001 C CNN
+F 1 "+5V" H 4000 10300 40 0000 C CNN
+F 2 "" H 4000 10150 60 0001 C CNN
+F 3 "" H 4000 10150 60 0001 C CNN
+ 1 4000 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #+0127
+U 1 1 4BF03694
+P 4500 3150
+F 0 "#+0127" H 4500 3350 40 0001 C CNN
+F 1 "+3.3V" V 4500 3350 40 0000 C CNN
+F 2 "" H 4500 3150 60 0001 C CNN
+F 3 "" H 4500 3150 60 0001 C CNN
+ 1 4500 3150
+ 0 1 1 0
+$EndComp
+$Comp
+L +3.3V #+0128
+U 1 1 4BF03693
+P 4500 5550
+F 0 "#+0128" H 4500 5750 40 0001 C CNN
+F 1 "+3.3V" V 4500 5750 40 0000 C CNN
+F 2 "" H 4500 5550 60 0001 C CNN
+F 3 "" H 4500 5550 60 0001 C CNN
+ 1 4500 5550
+ 0 1 1 0
+$EndComp
+$Comp
+L +5V #+0129
+U 1 1 4BF03692
+P 700 8800
+F 0 "#+0129" H 700 9000 40 0001 C CNN
+F 1 "+5V" H 700 8950 40 0000 C CNN
+F 2 "" H 700 8800 60 0001 C CNN
+F 3 "" H 700 8800 60 0001 C CNN
+ 1 700 8800
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0130
+U 1 1 4BF036B5
+P 4900 1500
+F 0 "#+0130" H 4900 1590 20 0001 C CNN
+F 1 "+5V" H 4900 1590 40 0000 C CNN
+F 2 "" H 4900 1500 60 0001 C CNN
+F 3 "" H 4900 1500 60 0001 C CNN
+ 1 4900 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L +12V #+0131
+U 1 1 4BF036B6
+P 4500 950
+F 0 "#+0131" H 4500 1150 40 0001 C CNN
+F 1 "+12V" H 4500 1100 40 0000 C CNN
+F 2 "" H 4500 950 60 0001 C CNN
+F 3 "" H 4500 950 60 0001 C CNN
+ 1 4500 950
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0132
+U 1 1 4BF036B7
+P 14000 850
+F 0 "#+0132" H 14000 1050 40 0001 C CNN
+F 1 "+5V" H 14000 1000 40 0000 C CNN
+F 2 "" H 14000 850 60 0001 C CNN
+F 3 "" H 14000 850 60 0001 C CNN
+ 1 14000 850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0133
+U 1 1 4BF036B8
+P 14000 1850
+F 0 "#+0133" H 14000 2050 40 0001 C CNN
+F 1 "+5V" H 14000 2000 40 0000 C CNN
+F 2 "" H 14000 1850 60 0001 C CNN
+F 3 "" H 14000 1850 60 0001 C CNN
+ 1 14000 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0134
+U 1 1 4BF036B9
+P 14000 2850
+F 0 "#+0134" H 14000 3050 40 0001 C CNN
+F 1 "+5V" H 14000 3000 40 0000 C CNN
+F 2 "" H 14000 2850 60 0001 C CNN
+F 3 "" H 14000 2850 60 0001 C CNN
+ 1 14000 2850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0135
+U 1 1 4BF036BA
+P 14000 3850
+F 0 "#+0135" H 14000 4050 40 0001 C CNN
+F 1 "+5V" H 14000 4000 40 0000 C CNN
+F 2 "" H 14000 3850 60 0001 C CNN
+F 3 "" H 14000 3850 60 0001 C CNN
+ 1 14000 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0136
+U 1 1 4BF036BB
+P 14000 4850
+F 0 "#+0136" H 14000 5050 40 0001 C CNN
+F 1 "+5V" H 14000 5000 40 0000 C CNN
+F 2 "" H 14000 4850 60 0001 C CNN
+F 3 "" H 14000 4850 60 0001 C CNN
+ 1 14000 4850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0137
+U 1 1 4BF036BC
+P 14000 5850
+F 0 "#+0137" H 14000 6050 40 0001 C CNN
+F 1 "+5V" H 14000 6000 40 0000 C CNN
+F 2 "" H 14000 5850 60 0001 C CNN
+F 3 "" H 14000 5850 60 0001 C CNN
+ 1 14000 5850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0138
+U 1 1 4BF036BD
+P 14000 6850
+F 0 "#+0138" H 14000 7050 40 0001 C CNN
+F 1 "+5V" H 14000 7000 40 0000 C CNN
+F 2 "" H 14000 6850 60 0001 C CNN
+F 3 "" H 14000 6850 60 0001 C CNN
+ 1 14000 6850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0139
+U 1 1 4BF036BE
+P 14000 7850
+F 0 "#+0139" H 14000 8050 40 0001 C CNN
+F 1 "+5V" H 14000 8000 40 0000 C CNN
+F 2 "" H 14000 7850 60 0001 C CNN
+F 3 "" H 14000 7850 60 0001 C CNN
+ 1 14000 7850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +3.3V #+0140
+U 1 1 4BF036BF
+P 2100 3550
+F 0 "#+0140" H 2100 3750 40 0001 C CNN
+F 1 "+3.3V" V 2150 3700 40 0000 C CNN
+F 2 "" H 2100 3550 60 0001 C CNN
+F 3 "" H 2100 3550 60 0001 C CNN
+ 1 2100 3550
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #+0141
+U 1 1 4BF036C0
+P 2100 4150
+F 0 "#+0141" H 2100 4350 40 0001 C CNN
+F 1 "+3.3V" V 2150 4300 40 0000 C CNN
+F 2 "" H 2100 4150 60 0001 C CNN
+F 3 "" H 2100 4150 60 0001 C CNN
+ 1 2100 4150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #+0142
+U 1 1 4BF036C1
+P 2100 4650
+F 0 "#+0142" H 2100 4850 40 0001 C CNN
+F 1 "+3.3V" V 2150 4800 40 0000 C CNN
+F 2 "" H 2100 4650 60 0001 C CNN
+F 3 "" H 2100 4650 60 0001 C CNN
+ 1 2100 4650
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #+0143
+U 1 1 4BF036C2
+P 2100 5150
+F 0 "#+0143" H 2100 5350 40 0001 C CNN
+F 1 "+3.3V" V 2150 5350 40 0000 C CNN
+F 2 "" H 2100 5150 60 0001 C CNN
+F 3 "" H 2100 5150 60 0001 C CNN
+ 1 2100 5150
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #+0144
+U 1 1 4BF036C3
+P 2100 5350
+F 0 "#+0144" H 2100 5550 40 0001 C CNN
+F 1 "+3.3V" V 2150 5550 40 0000 C CNN
+F 2 "" H 2100 5350 60 0001 C CNN
+F 3 "" H 2100 5350 60 0001 C CNN
+ 1 2100 5350
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #+0145
+U 1 1 4BF036C4
+P 2100 6450
+F 0 "#+0145" H 2100 6650 40 0001 C CNN
+F 1 "+3.3V" V 2100 6650 40 0000 C CNN
+F 2 "" H 2100 6450 60 0001 C CNN
+F 3 "" H 2100 6450 60 0001 C CNN
+ 1 2100 6450
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +5V #+0146
+U 1 1 4BF036C5
+P 2000 6950
+F 0 "#+0146" H 2000 7150 40 0001 C CNN
+F 1 "+5V" H 2000 7100 40 0000 C CNN
+F 2 "" H 2000 6950 60 0001 C CNN
+F 3 "" H 2000 6950 60 0001 C CNN
+ 1 2000 6950
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +5V #+0147
+U 1 1 4BF036C6
+P 2100 1650
+F 0 "#+0147" H 2100 1850 40 0001 C CNN
+F 1 "+5V" H 2100 1800 40 0000 C CNN
+F 2 "" H 2100 1650 60 0001 C CNN
+F 3 "" H 2100 1650 60 0001 C CNN
+ 1 2100 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0148
+U 1 1 4BF036A4
+P 2100 2950
+F 0 "#+0148" H 2100 3150 40 0001 C CNN
+F 1 "+5V" V 2100 3150 40 0000 C CNN
+F 2 "" H 2100 2950 60 0001 C CNN
+F 3 "" H 2100 2950 60 0001 C CNN
+ 1 2100 2950
+ 0 -1 -1 0
+$EndComp
+$Comp
+L +3.3V #+0149
+U 1 1 4BF036A5
+P 4500 6350
+F 0 "#+0149" H 4500 6550 40 0001 C CNN
+F 1 "+3.3V" V 4500 6550 40 0000 C CNN
+F 2 "" H 4500 6350 60 0001 C CNN
+F 3 "" H 4500 6350 60 0001 C CNN
+ 1 4500 6350
+ 0 1 1 0
+$EndComp
+$Comp
+L +3.3V #+0150
+U 1 1 4BF036A6
+P 4500 4950
+F 0 "#+0150" H 4500 5150 40 0001 C CNN
+F 1 "+3.3V" V 4500 5150 40 0000 C CNN
+F 2 "" H 4500 4950 60 0001 C CNN
+F 3 "" H 4500 4950 60 0001 C CNN
+ 1 4500 4950
+ 0 1 1 0
+$EndComp
+$Comp
+L +3.3V #+0151
+U 1 1 4BF036A7
+P 4500 4350
+F 0 "#+0151" H 4500 4550 40 0001 C CNN
+F 1 "+3.3V" V 4500 4550 40 0000 C CNN
+F 2 "" H 4500 4350 60 0001 C CNN
+F 3 "" H 4500 4350 60 0001 C CNN
+ 1 4500 4350
+ 0 1 1 0
+$EndComp
+$Comp
+L +3.3V #+0152
+U 1 1 4BF036A8
+P 4500 3750
+F 0 "#+0152" H 4500 3950 40 0001 C CNN
+F 1 "+3.3V" V 4500 3950 40 0000 C CNN
+F 2 "" H 4500 3750 60 0001 C CNN
+F 3 "" H 4500 3750 60 0001 C CNN
+ 1 4500 3750
+ 0 1 1 0
+$EndComp
+$Comp
+L +5V #+0153
+U 1 1 4BF036A9
+P 4600 6950
+F 0 "#+0153" H 4600 7150 40 0001 C CNN
+F 1 "+5V" V 4600 7100 40 0000 C CNN
+F 2 "" H 4600 6950 60 0001 C CNN
+F 3 "" H 4600 6950 60 0001 C CNN
+ 1 4600 6950
+ 0 1 1 0
+$EndComp
+$Comp
+L +5V #+0154
+U 1 1 4BF036AA
+P 12850 6150
+F 0 "#+0154" H 12850 6350 40 0001 C CNN
+F 1 "+5V" H 12850 6300 40 0000 C CNN
+F 2 "" H 12850 6150 60 0001 C CNN
+F 3 "" H 12850 6150 60 0001 C CNN
+ 1 12850 6150
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0155
+U 1 1 4BF036AB
+P 12700 7350
+F 0 "#+0155" H 12700 7550 40 0001 C CNN
+F 1 "+5V" H 12700 7500 40 0000 C CNN
+F 2 "" H 12700 7350 60 0001 C CNN
+F 3 "" H 12700 7350 60 0001 C CNN
+ 1 12700 7350
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0156
+U 1 1 4BF036AC
+P 12700 8250
+F 0 "#+0156" H 12700 8450 40 0001 C CNN
+F 1 "+5V" H 12700 8400 40 0000 C CNN
+F 2 "" H 12700 8250 60 0001 C CNN
+F 3 "" H 12700 8250 60 0001 C CNN
+ 1 12700 8250
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0157
+U 1 1 4BF036AD
+P 4500 1850
+F 0 "#+0157" H 4500 2050 40 0001 C CNN
+F 1 "+5V" H 4500 2000 40 0000 C CNN
+F 2 "" H 4500 1850 60 0001 C CNN
+F 3 "" H 4500 1850 60 0001 C CNN
+ 1 4500 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0158
+U 1 1 4BF036AE
+P 4500 2050
+F 0 "#+0158" H 4500 2250 40 0001 C CNN
+F 1 "+5V" H 4500 2200 40 0000 C CNN
+F 2 "" H 4500 2050 60 0001 C CNN
+F 3 "" H 4500 2050 60 0001 C CNN
+ 1 4500 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0159
+U 1 1 4BF036AF
+P 4500 2650
+F 0 "#+0159" H 4500 2850 40 0001 C CNN
+F 1 "+5V" V 4500 2800 40 0000 C CNN
+F 2 "" H 4500 2650 60 0001 C CNN
+F 3 "" H 4500 2650 60 0001 C CNN
+ 1 4500 2650
+ 0 1 1 0
+$EndComp
+Entry Wire Line
+ 11500 1050 11600 950
+Entry Wire Line
+ 11500 1150 11600 1050
+Entry Wire Line
+ 11500 1250 11600 1150
+Entry Wire Line
+ 11500 1350 11600 1250
+Entry Wire Line
+ 11500 1450 11600 1350
+Entry Wire Line
+ 11500 1550 11600 1450
+Entry Wire Line
+ 11500 1650 11600 1550
+Entry Wire Line
+ 11500 1750 11600 1650
+Entry Wire Line
+ 11500 1850 11600 1750
+Entry Wire Line
+ 11500 1950 11600 1850
+Entry Wire Line
+ 11500 2050 11600 1950
+Entry Wire Line
+ 11500 2150 11600 2050
+Entry Wire Line
+ 11500 2250 11600 2150
+Entry Wire Line
+ 11500 2350 11600 2250
+Entry Wire Line
+ 11500 2450 11600 2350
+Entry Wire Line
+ 11500 2550 11600 2450
+Connection ~ 1500 2150
+Connection ~ 12050 6150
+Connection ~ 2100 6950
+Connection ~ 4500 6950
+Connection ~ 2100 7150
+Connection ~ 4500 7150
+Connection ~ 11900 7350
+Connection ~ 11900 8250
+Connection ~ 6550 8950
+Connection ~ 6800 8950
+Connection ~ 4950 9450
+Connection ~ 4950 9550
+Connection ~ 6800 9650
+Connection ~ 7100 9750
+NoConn ~ 4400 1150
+NoConn ~ 2200 1250
+NoConn ~ 4400 1350
+NoConn ~ 2200 1750
+NoConn ~ 4400 1750
+NoConn ~ 2200 1850
+NoConn ~ 4400 1950
+NoConn ~ 2200 2050
+NoConn ~ 4400 2150
+NoConn ~ 2200 2450
+NoConn ~ 4400 2450
+NoConn ~ 4400 2950
+NoConn ~ 4400 5050
+NoConn ~ 4400 5150
+NoConn ~ 2200 7050
+NoConn ~ 4400 7050
+Wire Wire Line
+ 1900 750 4700 750
+Wire Wire Line
+ 13300 950 14000 950
+Wire Wire Line
+ 7400 1050 8300 1050
+Wire Wire Line
+ 10600 1050 11500 1050
+Wire Wire Line
+ 13300 1050 14000 1050
+Wire Wire Line
+ 7400 1150 8300 1150
+Wire Wire Line
+ 10600 1150 11500 1150
+Wire Wire Line
+ 13300 1150 14000 1150
+Wire Wire Line
+ 4500 1250 4400 1250
+Wire Wire Line
+ 7400 1250 8300 1250
+Wire Wire Line
+ 10600 1250 11500 1250
+Wire Wire Line
+ 13300 1250 14000 1250
+Wire Wire Line
+ 7400 1350 8300 1350
+Wire Wire Line
+ 10600 1350 11500 1350
+Wire Wire Line
+ 13300 1350 14000 1350
+Wire Wire Line
+ 2200 1450 1900 1450
+Wire Wire Line
+ 4400 1450 4700 1450
+Wire Wire Line
+ 7400 1450 8300 1450
+Wire Wire Line
+ 10600 1450 11500 1450
+Wire Wire Line
+ 13300 1450 14000 1450
+Wire Wire Line
+ 4400 1550 4900 1550
+Wire Wire Line
+ 7400 1550 8300 1550
+Wire Wire Line
+ 10600 1550 11500 1550
+Wire Wire Line
+ 13300 1550 14000 1550
+Wire Wire Line
+ 2200 1650 2100 1650
+Wire Wire Line
+ 4400 1650 5300 1650
+Wire Wire Line
+ 7400 1650 8300 1650
+Wire Wire Line
+ 10600 1650 11500 1650
+Wire Wire Line
+ 13300 1650 14000 1650
+Wire Wire Line
+ 7400 1750 8300 1750
+Wire Wire Line
+ 10600 1750 11500 1750
+Wire Wire Line
+ 4400 1850 4500 1850
+Wire Wire Line
+ 7400 1850 8300 1850
+Wire Wire Line
+ 10600 1850 11500 1850
+Wire Wire Line
+ 1600 1950 1500 1950
+Wire Wire Line
+ 2000 1950 2200 1950
+Wire Wire Line
+ 7400 1950 8300 1950
+Wire Wire Line
+ 10600 1950 11500 1950
+Wire Wire Line
+ 13300 1950 14000 1950
+Wire Wire Line
+ 4400 2050 4500 2050
+Wire Wire Line
+ 7400 2050 8300 2050
+Wire Wire Line
+ 10600 2050 11500 2050
+Wire Wire Line
+ 13300 2050 14000 2050
+Wire Wire Line
+ 1500 2150 1600 2150
+Wire Wire Line
+ 2000 2150 2200 2150
+Wire Wire Line
+ 7400 2150 8300 2150
+Wire Wire Line
+ 10600 2150 11500 2150
+Wire Wire Line
+ 13300 2150 14000 2150
+Wire Wire Line
+ 7400 2250 8300 2250
+Wire Wire Line
+ 10600 2250 11500 2250
+Wire Wire Line
+ 13300 2250 14000 2250
+Wire Wire Line
+ 7400 2350 8300 2350
+Wire Wire Line
+ 10600 2350 11500 2350
+Wire Wire Line
+ 13300 2350 14000 2350
+Wire Wire Line
+ 7400 2450 8300 2450
+Wire Wire Line
+ 10600 2450 11500 2450
+Wire Wire Line
+ 13300 2450 14000 2450
+Wire Wire Line
+ 4400 2550 5300 2550
+Wire Wire Line
+ 7400 2550 8300 2550
+Wire Wire Line
+ 10600 2550 11500 2550
+Wire Wire Line
+ 13300 2550 14000 2550
+Wire Wire Line
+ 4400 2650 4500 2650
+Wire Wire Line
+ 7400 2650 8300 2650
+Wire Wire Line
+ 13300 2650 14000 2650
+Wire Wire Line
+ 4400 2750 5300 2750
+Wire Wire Line
+ 7400 2750 8300 2750
+Wire Wire Line
+ 4400 2850 4500 2850
+Wire Wire Line
+ 7400 2850 8300 2850
+Wire Wire Line
+ 2100 2950 2200 2950
+Wire Wire Line
+ 7400 2950 8300 2950
+Wire Wire Line
+ 13300 2950 14000 2950
+Wire Wire Line
+ 4400 3050 5300 3050
+Wire Wire Line
+ 7400 3050 8300 3050
+Wire Wire Line
+ 13300 3050 14000 3050
+Wire Wire Line
+ 7400 3150 8300 3150
+Wire Wire Line
+ 13300 3150 14000 3150
+Wire Wire Line
+ 4400 3250 5300 3250
+Wire Wire Line
+ 7400 3250 8300 3250
+Wire Wire Line
+ 13300 3250 14000 3250
+Wire Wire Line
+ 4400 3350 5300 3350
+Wire Wire Line
+ 7400 3350 8300 3350
+Wire Wire Line
+ 13300 3350 14000 3350
+Wire Wire Line
+ 4400 3450 4500 3450
+Wire Wire Line
+ 7400 3450 8300 3450
+Wire Wire Line
+ 13300 3450 14000 3450
+Wire Wire Line
+ 2100 3550 2200 3550
+Wire Wire Line
+ 4400 3550 5300 3550
+Wire Wire Line
+ 7400 3550 8300 3550
+Wire Wire Line
+ 13300 3550 14000 3550
+Wire Wire Line
+ 4400 3650 5300 3650
+Wire Wire Line
+ 7400 3650 8300 3650
+Wire Wire Line
+ 13300 3650 14000 3650
+Wire Wire Line
+ 4400 3750 4500 3750
+Wire Wire Line
+ 7400 3750 8300 3750
+Wire Wire Line
+ 4400 3850 5300 3850
+Wire Wire Line
+ 7400 3850 8300 3850
+Wire Wire Line
+ 4400 3950 5300 3950
+Wire Wire Line
+ 7400 3950 8300 3950
+Wire Wire Line
+ 13300 3950 14000 3950
+Wire Wire Line
+ 4400 4050 4500 4050
+Wire Wire Line
+ 7400 4050 8300 4050
+Wire Wire Line
+ 13300 4050 14000 4050
+Wire Wire Line
+ 2100 4150 2200 4150
+Wire Wire Line
+ 4400 4150 5300 4150
+Wire Wire Line
+ 7400 4150 8300 4150
+Wire Wire Line
+ 13300 4150 14000 4150
+Wire Wire Line
+ 4400 4250 5300 4250
+Wire Wire Line
+ 7400 4250 8300 4250
+Wire Wire Line
+ 10600 4250 11200 4250
+Wire Wire Line
+ 13300 4250 14000 4250
+Wire Wire Line
+ 4400 4350 4500 4350
+Wire Wire Line
+ 7400 4350 8300 4350
+Wire Wire Line
+ 10600 4350 11200 4350
+Wire Wire Line
+ 13300 4350 14000 4350
+Wire Wire Line
+ 4400 4450 5300 4450
+Wire Wire Line
+ 7400 4450 8300 4450
+Wire Wire Line
+ 10600 4450 11200 4450
+Wire Wire Line
+ 13300 4450 14000 4450
+Wire Wire Line
+ 4400 4550 4500 4550
+Wire Wire Line
+ 7400 4550 8300 4550
+Wire Wire Line
+ 10600 4550 11200 4550
+Wire Wire Line
+ 13300 4550 14000 4550
+Wire Wire Line
+ 2100 4650 2200 4650
+Wire Wire Line
+ 4400 4650 5300 4650
+Wire Wire Line
+ 7400 4650 8300 4650
+Wire Wire Line
+ 13300 4650 14000 4650
+Wire Wire Line
+ 4400 4750 4500 4750
+Wire Wire Line
+ 7400 4750 8300 4750
+Wire Wire Line
+ 4400 4850 5300 4850
+Wire Wire Line
+ 7400 4850 8300 4850
+Wire Wire Line
+ 4400 4950 4500 4950
+Wire Wire Line
+ 13300 4950 14000 4950
+Wire Wire Line
+ 7400 5050 8300 5050
+Wire Wire Line
+ 13300 5050 14000 5050
+Wire Wire Line
+ 2100 5150 2200 5150
+Wire Wire Line
+ 7400 5150 8300 5150
+Wire Wire Line
+ 10600 5150 10800 5150
+Wire Wire Line
+ 13300 5150 14000 5150
+Wire Wire Line
+ 4400 5250 4500 5250
+Wire Wire Line
+ 7400 5250 8300 5250
+Wire Wire Line
+ 10600 5250 10800 5250
+Wire Wire Line
+ 13300 5250 14000 5250
+Wire Wire Line
+ 2100 5350 2200 5350
+Wire Wire Line
+ 4400 5350 5400 5350
+Wire Wire Line
+ 7400 5350 8300 5350
+Wire Wire Line
+ 13300 5350 14000 5350
+Wire Wire Line
+ 4400 5450 5400 5450
+Wire Wire Line
+ 7400 5450 8300 5450
+Wire Wire Line
+ 11600 6150 12250 6150
+Wire Wire Line
+ 12750 6150 12850 6150
+Wire Wire Line
+ 13300 5450 14000 5450
+Wire Wire Line
+ 13300 5550 14000 5550
+Wire Wire Line
+ 4400 5650 5400 5650
+Wire Wire Line
+ 7400 5650 8300 5650
+Wire Wire Line
+ 13300 5650 14000 5650
+Wire Wire Line
+ 4400 5750 5400 5750
+Wire Wire Line
+ 7400 5750 8300 5750
+Wire Wire Line
+ 4400 5850 4500 5850
+Wire Wire Line
+ 7400 5850 8300 5850
+Wire Wire Line
+ 4400 5950 5400 5950
+Wire Wire Line
+ 7400 5950 8300 5950
+Wire Wire Line
+ 13300 5950 14000 5950
+Wire Wire Line
+ 7400 6050 8300 6050
+Wire Wire Line
+ 13300 6050 14000 6050
+Wire Wire Line
+ 7400 6150 8300 6150
+Wire Wire Line
+ 13300 6150 14000 6150
+Wire Wire Line
+ 4400 6250 5400 6250
+Wire Wire Line
+ 13300 6250 14000 6250
+Wire Wire Line
+ 4400 6350 4500 6350
+Wire Wire Line
+ 7400 6350 8300 6350
+Wire Wire Line
+ 10600 6350 11600 6350
+Wire Wire Line
+ 13300 6350 14000 6350
+Wire Wire Line
+ 2100 6450 2200 6450
+Wire Wire Line
+ 4400 6450 5400 6450
+Wire Wire Line
+ 10600 6450 11400 6450
+Wire Wire Line
+ 13300 6450 14000 6450
+Wire Wire Line
+ 4400 6550 5400 6550
+Wire Wire Line
+ 10600 6550 11400 6550
+Wire Wire Line
+ 13300 6550 14000 6550
+Wire Wire Line
+ 4400 6650 4500 6650
+Wire Wire Line
+ 7100 6650 8300 6650
+Wire Wire Line
+ 10600 6650 11400 6650
+Wire Wire Line
+ 13300 6650 14000 6650
+Wire Wire Line
+ 4400 6750 5400 6750
+Wire Wire Line
+ 7700 6750 8300 6750
+Wire Wire Line
+ 4400 6850 5400 6850
+Wire Wire Line
+ 7700 6850 8300 6850
+Wire Wire Line
+ 10600 6850 11400 6850
+Wire Wire Line
+ 2000 6950 2200 6950
+Wire Wire Line
+ 4400 6950 4600 6950
+Wire Wire Line
+ 7700 6950 8300 6950
+Wire Wire Line
+ 10600 6950 11400 6950
+Wire Wire Line
+ 13300 6950 14000 6950
+Wire Wire Line
+ 7700 7050 8300 7050
+Wire Wire Line
+ 13300 7050 14000 7050
+Wire Wire Line
+ 2100 7150 2200 7150
+Wire Wire Line
+ 4400 7150 4500 7150
+Wire Wire Line
+ 7700 7150 8300 7150
+Wire Wire Line
+ 10600 7150 10800 7150
+Wire Wire Line
+ 13300 7150 14000 7150
+Wire Wire Line
+ 2100 7250 2200 7250
+Wire Wire Line
+ 4500 7250 4400 7250
+Wire Wire Line
+ 7700 7250 8300 7250
+Wire Wire Line
+ 10600 7250 10800 7250
+Wire Wire Line
+ 13300 7250 14000 7250
+Wire Wire Line
+ 7700 7350 8300 7350
+Wire Wire Line
+ 10600 7350 12100 7350
+Wire Wire Line
+ 12600 7350 12700 7350
+Wire Wire Line
+ 13300 7350 14000 7350
+Wire Wire Line
+ 7100 7450 8300 7450
+Wire Wire Line
+ 10600 7450 11600 7450
+Wire Wire Line
+ 13300 7450 14000 7450
+Wire Wire Line
+ 7700 7550 8300 7550
+Wire Wire Line
+ 10600 7550 10800 7550
+Wire Wire Line
+ 13300 7550 14000 7550
+Wire Wire Line
+ 7700 7650 8300 7650
+Wire Wire Line
+ 10600 7650 10800 7650
+Wire Wire Line
+ 13300 7650 14000 7650
+Wire Wire Line
+ 7700 7750 8300 7750
+Wire Wire Line
+ 10600 7750 10800 7750
+Wire Wire Line
+ 7700 7850 8300 7850
+Wire Wire Line
+ 7700 7950 8300 7950
+Wire Wire Line
+ 13300 7950 14000 7950
+Wire Wire Line
+ 7700 8050 8300 8050
+Wire Wire Line
+ 13300 8050 14000 8050
+Wire Wire Line
+ 7700 8150 8300 8150
+Wire Wire Line
+ 13300 8150 14000 8150
+Wire Wire Line
+ 7700 8250 8300 8250
+Wire Wire Line
+ 11600 8250 12100 8250
+Wire Wire Line
+ 12600 8250 12700 8250
+Wire Wire Line
+ 13300 8250 14000 8250
+Wire Wire Line
+ 7700 8350 8300 8350
+Wire Wire Line
+ 13300 8350 14000 8350
+Wire Wire Line
+ 7700 8450 8300 8450
+Wire Wire Line
+ 13300 8450 14000 8450
+Wire Wire Line
+ 7700 8550 8300 8550
+Wire Wire Line
+ 13300 8550 14000 8550
+Wire Wire Line
+ 7700 8650 8300 8650
+Wire Wire Line
+ 13300 8650 14000 8650
+Wire Wire Line
+ 7700 8750 8300 8750
+Wire Wire Line
+ 7700 8850 8300 8850
+Wire Wire Line
+ 6550 8950 7100 8950
+Wire Wire Line
+ 7700 8950 8300 8950
+Wire Wire Line
+ 8300 9050 8000 9050
+Wire Wire Line
+ 8300 9150 8100 9150
+Wire Wire Line
+ 4950 9350 5050 9350
+Wire Wire Line
+ 4950 9450 5050 9450
+Wire Wire Line
+ 6550 9450 6450 9450
+Wire Wire Line
+ 4950 9550 5050 9550
+Wire Wire Line
+ 6450 9650 8000 9650
+Wire Wire Line
+ 6450 9750 8100 9750
+Wire Bus Line
+ 11600 850 11700 850
+Wire Wire Line
+ 700 8800 700 8950
+Wire Wire Line
+ 700 9350 700 9450
+Wire Wire Line
+ 1500 1950 1500 2250
+Wire Wire Line
+ 1900 1450 1900 750
+Wire Wire Line
+ 4500 950 4500 1250
+Wire Wire Line
+ 4700 1450 4700 750
+Wire Wire Line
+ 4900 1550 4900 1500
+Wire Wire Line
+ 6550 8850 6550 9450
+Wire Wire Line
+ 6800 8950 6800 9050
+Wire Wire Line
+ 6800 9550 6800 9650
+Wire Wire Line
+ 7100 8950 7100 9050
+Wire Wire Line
+ 7100 9550 7100 9750
+Wire Wire Line
+ 8000 9650 8000 9050
+Wire Wire Line
+ 8100 9750 8100 9150
+Wire Wire Line
+ 11600 6350 11600 6150
+Wire Wire Line
+ 11600 7450 11600 8250
+Wire Wire Line
+ 12050 6150 12050 6250
+Wire Wire Line
+ 11900 7350 11900 7450
+Wire Wire Line
+ 11900 7850 11900 7950
+Wire Wire Line
+ 11900 8250 11900 8350
+Wire Wire Line
+ 11900 8750 11900 8850
+$Comp
+L GND #PWR0160
+U 1 1 54022E29
+P 5750 10100
+F 0 "#PWR0160" H 5750 10100 30 0001 C CNN
+F 1 "GND" H 5750 10030 30 0001 C CNN
+F 2 "" H 5750 10100 60 0000 C CNN
+F 3 "" H 5750 10100 60 0000 C CNN
+ 1 5750 10100
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5V #+0161
+U 1 1 54022EE0
+P 5750 9000
+F 0 "#+0161" H 5750 9200 40 0001 C CNN
+F 1 "+5V" H 5750 9150 40 0000 C CNN
+F 2 "" H 5750 9000 60 0001 C CNN
+F 3 "" H 5750 9000 60 0001 C CNN
+ 1 5750 9000
+ 1 0 0 -1
+$EndComp
+Connection ~ 600 10200
+Connection ~ 1050 10200
+Connection ~ 700 8850
+Wire Wire Line
+ 850 8800 850 8850
+Connection ~ 850 8850
+Wire Wire Line
+ 4000 9350 4000 9400
+Wire Wire Line
+ 3300 9350 3300 9400
+Wire Wire Line
+ 2600 9400 2600 9350
+Wire Wire Line
+ 1900 9350 1900 9400
+Wire Wire Line
+ 4000 9850 4000 9800
+Wire Wire Line
+ 3300 9850 3300 9800
+Wire Wire Line
+ 2600 9850 2600 9800
+Wire Wire Line
+ 1900 9800 1900 9850
+Wire Wire Line
+ 4000 10150 4000 10200
+Wire Wire Line
+ 3300 10200 3300 10150
+Wire Wire Line
+ 2600 10150 2600 10200
+Wire Wire Line
+ 1900 10150 1900 10200
+Wire Wire Line
+ 1900 10600 1900 10650
+Wire Wire Line
+ 2600 10600 2600 10650
+Wire Wire Line
+ 3300 10600 3300 10650
+Wire Wire Line
+ 4000 10600 4000 10650
+Wire Wire Line
+ 5750 10050 5750 10100
+Wire Wire Line
+ 5750 9000 5750 9050
+Wire Wire Line
+ 2200 1350 2150 1350
+Wire Wire Line
+ 2200 2550 2150 2550
+Wire Wire Line
+ 2150 2750 2200 2750
+Wire Wire Line
+ 2150 3250 2200 3250
+Wire Wire Line
+ 2150 3850 2200 3850
+Wire Wire Line
+ 2200 4450 2150 4450
+Wire Wire Line
+ 2200 4850 2150 4850
+Wire Wire Line
+ 2150 5650 2200 5650
+Wire Wire Line
+ 2200 5950 2150 5950
+Wire Wire Line
+ 2150 6750 2200 6750
+Wire Wire Line
+ 12050 6700 12050 6650
+$EndSCHEMATC
diff --git a/demos/video/esvideo.sch b/demos/video/esvideo.sch
new file mode 100644
index 0000000..8c7603f
--- /dev/null
+++ b/demos/video/esvideo.sch
@@ -0,0 +1,1190 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 8 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+NoConn ~ 11350 6250
+Text Label 5700 2200 0 60 ~ 0
+VAA
+Wire Wire Line
+ 5650 2300 5650 2200
+Wire Wire Line
+ 11350 6450 11900 6450
+Wire Wire Line
+ 6550 7700 7150 7700
+Text Label 6650 7700 0 60 ~ 0
+OE_RVB-
+Text Label 11450 6450 0 60 ~ 0
+OE_RVB-
+Wire Wire Line
+ 11350 6350 12000 6350
+Text HLabel 12000 6350 2 60 Output ~ 0
+OE_PAL-
+Text Label 8950 6950 0 60 ~ 0
+PCA2
+Text Label 8950 6850 0 60 ~ 0
+PCA1
+Text Label 8950 6750 0 60 ~ 0
+PCA0
+Text Label 4100 7200 0 60 ~ 0
+PCA2
+Text Label 4100 7100 0 60 ~ 0
+PCA1
+Text Label 4100 7000 0 60 ~ 0
+PCA0
+$Comp
+L GND #PWR0162
+U 1 1 33A566EB
+P 9300 7800
+F 0 "#PWR0162" H 9300 7800 40 0001 C CNN
+F 1 "GND" H 9300 7730 40 0001 C CNN
+F 2 "" H 9300 7800 60 0001 C CNN
+F 3 "" H 9300 7800 60 0001 C CNN
+ 1 9300 7800
+ 1 0 0 -1
+$EndComp
+Connection ~ 4350 3100
+$Comp
+L GND #PWR0163
+U 1 1 3392D11C
+P 4350 4200
+F 0 "#PWR0163" H 4350 4200 40 0001 C CNN
+F 1 "GND" H 4350 4130 40 0001 C CNN
+F 2 "" H 4350 4200 60 0001 C CNN
+F 3 "" H 4350 4200 60 0001 C CNN
+ 1 4350 4200
+ 0 1 1 0
+$EndComp
+Connection ~ 4350 3600
+Connection ~ 4350 3500
+Connection ~ 4350 3400
+Connection ~ 4350 3300
+Connection ~ 4350 3200
+Wire Wire Line
+ 4350 3600 4450 3600
+Wire Wire Line
+ 4350 3500 4450 3500
+Wire Wire Line
+ 4350 3400 4450 3400
+Wire Wire Line
+ 4350 3300 4450 3300
+Wire Wire Line
+ 4450 3200 4350 3200
+Wire Wire Line
+ 4350 3100 4350 3800
+Wire Wire Line
+ 4350 3800 4450 3800
+Wire Wire Line
+ 4350 4200 4450 4200
+Text HLabel 1700 6200 0 60 Input ~ 0
+BLUE_IN
+Text HLabel 1700 5400 0 60 Input ~ 0
+GREEN_IN
+Text HLabel 1700 4600 0 60 Input ~ 0
+RED_IN
+$Comp
+L GND #PWR0164
+U 1 1 335F5DFC
+P 12050 5050
+F 0 "#PWR0164" H 12050 5050 40 0001 C CNN
+F 1 "GND" H 12050 4980 40 0001 C CNN
+F 2 "" H 12050 5050 60 0001 C CNN
+F 3 "" H 12050 5050 60 0001 C CNN
+ 1 12050 5050
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C32
+U 1 1 335F5DF2
+P 11800 5050
+F 0 "C32" V 11650 5050 50 0000 C CNN
+F 1 "100nF" V 11950 5050 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11800 5050 60 0001 C CNN
+F 3 "" H 11800 5050 60 0001 C CNN
+ 1 11800 5050
+ 0 1 1 0
+$EndComp
+Connection ~ 11450 4650
+Connection ~ 11500 5050
+Wire Wire Line
+ 11350 5050 11600 5050
+Wire Wire Line
+ 11500 5050 11500 4450
+Wire Wire Line
+ 11500 4450 11350 4450
+Wire Wire Line
+ 11450 4850 11350 4850
+Wire Wire Line
+ 11450 3300 11450 4850
+Wire Wire Line
+ 9350 7550 8950 7550
+Wire Wire Line
+ 9350 7450 8950 7450
+Text Label 9000 7550 0 60 ~ 0
+TVI1
+Text Label 9000 7450 0 60 ~ 0
+TVI0
+Wire Wire Line
+ 6550 4100 6550 4000
+Wire Wire Line
+ 6550 4000 6650 4000
+NoConn ~ 4450 4900
+Text HLabel 1500 750 0 60 Input ~ 0
+TVI[0..1]
+Wire Wire Line
+ 8900 5650 9350 5650
+Wire Wire Line
+ 8900 5550 9350 5550
+Wire Wire Line
+ 8900 5450 9350 5450
+Wire Wire Line
+ 8900 5350 9350 5350
+Wire Wire Line
+ 8900 5250 9350 5250
+Wire Wire Line
+ 8900 5150 9350 5150
+Wire Wire Line
+ 8900 5050 9350 5050
+Wire Wire Line
+ 8900 4950 9350 4950
+Wire Wire Line
+ 8900 4750 9350 4750
+Wire Wire Line
+ 8900 4650 9350 4650
+Wire Wire Line
+ 8900 4550 9350 4550
+Wire Wire Line
+ 8900 4450 9350 4450
+Wire Wire Line
+ 8900 4350 9350 4350
+Wire Wire Line
+ 8900 4250 9350 4250
+Wire Wire Line
+ 8900 4150 9350 4150
+Wire Wire Line
+ 8900 4050 9350 4050
+Wire Wire Line
+ 8900 3850 9350 3850
+Wire Wire Line
+ 8900 3750 9350 3750
+Wire Wire Line
+ 8900 3650 9350 3650
+Wire Wire Line
+ 8900 3550 9350 3550
+Wire Wire Line
+ 8900 3450 9350 3450
+Wire Wire Line
+ 8900 3350 9350 3350
+Wire Wire Line
+ 8900 3250 9350 3250
+Wire Wire Line
+ 8900 3150 9350 3150
+Text Label 9000 5650 0 60 ~ 0
+TVB7
+Text Label 9000 5550 0 60 ~ 0
+TVB6
+Text Label 9000 5450 0 60 ~ 0
+TVB5
+Text Label 9000 5350 0 60 ~ 0
+TVB4
+Text Label 9000 5250 0 60 ~ 0
+TVB3
+Text Label 9000 5150 0 60 ~ 0
+TVB2
+Text Label 9000 5050 0 60 ~ 0
+TVB1
+Text Label 9000 4950 0 60 ~ 0
+TVB0
+Text Label 9000 4750 0 60 ~ 0
+TVG7
+Text Label 9000 4650 0 60 ~ 0
+TVG6
+Text Label 9000 4550 0 60 ~ 0
+TVG5
+Text Label 9000 4450 0 60 ~ 0
+TVG4
+Text Label 9000 4350 0 60 ~ 0
+TVG3
+Text Label 9000 4250 0 60 ~ 0
+TVG2
+Text Label 9000 4150 0 60 ~ 0
+TVG1
+Text Label 9000 4050 0 60 ~ 0
+TVG0
+Text Label 9000 3850 0 60 ~ 0
+TVR7
+Text Label 9000 3750 0 60 ~ 0
+TVR6
+Text Label 9000 3650 0 60 ~ 0
+TVR5
+Text Label 9000 3550 0 60 ~ 0
+TVR4
+Text Label 9000 3450 0 60 ~ 0
+TVR3
+Text Label 9000 3350 0 60 ~ 0
+TVR2
+Text Label 9000 3250 0 60 ~ 0
+TVR1
+Text Label 9000 3150 0 60 ~ 0
+TVR0
+Wire Wire Line
+ 6550 7500 7000 7500
+Wire Wire Line
+ 6550 7400 7000 7400
+Wire Wire Line
+ 6550 7300 7000 7300
+Wire Wire Line
+ 6550 7200 7000 7200
+Wire Wire Line
+ 6550 7100 7000 7100
+Wire Wire Line
+ 6550 7000 7000 7000
+Wire Wire Line
+ 6550 6900 7000 6900
+Wire Wire Line
+ 6550 6800 7000 6800
+Wire Wire Line
+ 6550 6600 7000 6600
+Wire Wire Line
+ 6550 6500 7000 6500
+Wire Wire Line
+ 6550 6400 7000 6400
+Wire Wire Line
+ 6550 6300 7000 6300
+Wire Wire Line
+ 6550 6200 7000 6200
+Wire Wire Line
+ 6550 6100 7000 6100
+Wire Wire Line
+ 6550 6000 7000 6000
+Wire Wire Line
+ 6550 5900 7000 5900
+Wire Wire Line
+ 6550 5700 7000 5700
+Wire Wire Line
+ 6550 5600 7000 5600
+Wire Wire Line
+ 6550 5500 7000 5500
+Wire Wire Line
+ 6550 5400 7000 5400
+Wire Wire Line
+ 6550 5300 7000 5300
+Wire Wire Line
+ 6550 5200 7000 5200
+Wire Wire Line
+ 6550 5100 7000 5100
+Wire Wire Line
+ 6550 5000 7000 5000
+Text Label 6650 7500 0 60 ~ 0
+TVB7
+Text Label 6650 7400 0 60 ~ 0
+TVB6
+Text Label 6650 7300 0 60 ~ 0
+TVB5
+Text Label 6650 7200 0 60 ~ 0
+TVB4
+Text Label 6650 7100 0 60 ~ 0
+TVB3
+Text Label 6650 7000 0 60 ~ 0
+TVB2
+Text Label 6650 6900 0 60 ~ 0
+TVB1
+Text Label 6650 6800 0 60 ~ 0
+TVB0
+Text Label 6650 6600 0 60 ~ 0
+TVG7
+Text Label 6650 6500 0 60 ~ 0
+TVG6
+Text Label 6650 6400 0 60 ~ 0
+TVG5
+Text Label 6650 6300 0 60 ~ 0
+TVG4
+Text Label 6650 6200 0 60 ~ 0
+TVG3
+Text Label 6650 6100 0 60 ~ 0
+TVG2
+Text Label 6650 6000 0 60 ~ 0
+TVG1
+Text Label 6650 5900 0 60 ~ 0
+TVG0
+Text Label 6650 5700 0 60 ~ 0
+TVR7
+Text Label 6650 5600 0 60 ~ 0
+TVR6
+Text Label 6650 5500 0 60 ~ 0
+TVR5
+Text Label 6650 5400 0 60 ~ 0
+TVR4
+Text Label 6650 5300 0 60 ~ 0
+TVR3
+Text Label 6650 5200 0 60 ~ 0
+TVR2
+Text Label 6650 5100 0 60 ~ 0
+TVR1
+Text Label 6650 5000 0 60 ~ 0
+TVR0
+Text HLabel 6550 2700 2 60 Output ~ 0
+CSYNCIN-
+Text HLabel 6650 4600 2 60 Input ~ 0
+CLKCAD
+Wire Wire Line
+ 6650 4600 6550 4600
+$Comp
+L GND #GND0165
+U 1 1 A458682C
+P 12850 4250
+F 0 "#GND0165" H 12850 4350 60 0001 C CNN
+F 1 "GND" H 12850 4150 60 0001 C CNN
+F 2 "" H 12850 4250 60 0001 C CNN
+F 3 "" H 12850 4250 60 0001 C CNN
+ 1 12850 4250
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R8
+U 1 1 A4586827
+P 12550 4250
+F 0 "R8" V 12630 4250 50 0000 C CNN
+F 1 "150" V 12550 4250 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 12550 4250 60 0001 C CNN
+F 3 "" H 12550 4250 60 0001 C CNN
+ 1 12550 4250
+ 0 -1 -1 0
+$EndComp
+Connection ~ 12150 4250
+Wire Wire Line
+ 11350 4250 12300 4250
+Wire Wire Line
+ 12150 2800 12150 4250
+Wire Wire Line
+ 11450 4650 11350 4650
+Text HLabel 1500 1250 0 60 3State ~ 0
+DPC[0..7]
+Text HLabel 1500 1350 0 60 Input ~ 0
+PCA[0..2]
+$Comp
+L GND #GND0166
+U 1 1 32FA0485
+P 5650 8250
+F 0 "#GND0166" H 5650 8250 40 0001 C CNN
+F 1 "GND" H 5650 8180 40 0001 C CNN
+F 2 "" H 5650 8250 60 0001 C CNN
+F 3 "" H 5650 8250 60 0001 C CNN
+ 1 5650 8250
+ 1 0 0 -1
+$EndComp
+Text HLabel 1500 1050 0 60 3State ~ 0
+TVB[0..7]
+Text HLabel 1500 950 0 60 3State ~ 0
+TVG[0..7]
+Text HLabel 1500 850 0 60 3State ~ 0
+TVR[0..7]
+Text HLabel 11400 5450 2 60 Input ~ 0
+CSYNCOUT-
+Text HLabel 11400 5650 2 60 Input ~ 0
+BLANK-
+Text HLabel 11400 5850 2 60 Input ~ 0
+CLKCDA
+Text HLabel 6650 4000 2 60 Input ~ 0
+CLAMP
+NoConn ~ 11350 6550
+NoConn ~ 11350 7050
+NoConn ~ 11350 6950
+Wire Wire Line
+ 13150 3850 13150 3250
+Wire Wire Line
+ 11350 3850 13450 3850
+Wire Wire Line
+ 12900 3650 12900 3250
+Wire Wire Line
+ 11350 3650 13450 3650
+$Comp
+L GND #GND0167
+U 1 1 32F9F3E8
+P 10450 8250
+F 0 "#GND0167" H 10450 8250 40 0001 C CNN
+F 1 "GND" H 10450 8180 40 0001 C CNN
+F 2 "" H 10450 8250 60 0001 C CNN
+F 3 "" H 10450 8250 60 0001 C CNN
+ 1 10450 8250
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 1700 6200 1800 6200
+Wire Wire Line
+ 3800 2100 4450 2100
+Wire Wire Line
+ 4450 2100 4450 2700
+Wire Wire Line
+ 4350 2900 4450 2900
+Wire Wire Line
+ 4350 2800 4450 2800
+Connection ~ 6550 4700
+Wire Wire Line
+ 6550 4600 6550 4800
+Wire Wire Line
+ 6550 3700 6550 3800
+Wire Wire Line
+ 6550 3400 6550 3500
+Wire Wire Line
+ 6550 3100 6550 3200
+Connection ~ 6550 4300
+Wire Wire Line
+ 6550 4200 6550 4400
+Wire Wire Line
+ 6550 4400 6650 4400
+NoConn ~ 4450 5400
+NoConn ~ 4450 5300
+NoConn ~ 4450 5200
+NoConn ~ 4450 5100
+Connection ~ 4450 4300
+Connection ~ 4450 3900
+Wire Wire Line
+ 4450 4200 4450 4400
+Wire Wire Line
+ 4450 3800 4450 4000
+Text HLabel 9300 7250 0 60 Input ~ 0
+WRCDA-
+Text HLabel 9300 7150 0 60 Input ~ 0
+RDCDA-
+Connection ~ 10250 2750
+Connection ~ 10150 2750
+Wire Wire Line
+ 4050 7200 4450 7200
+Text HLabel 4450 6800 0 60 Input ~ 0
+WRCAD-
+Text HLabel 4450 6700 0 60 Input ~ 0
+RDCAD-
+$Comp
+L BT473 U9
+U 1 1 32F9E902
+P 10350 5450
+F 0 "U9" H 10350 5550 70 0000 C CNN
+F 1 "BT473" H 10350 5350 70 0000 C CNN
+F 2 "footprints:PLCC68" H 10350 5450 60 0001 C CNN
+F 3 "" H 10350 5450 60 0001 C CNN
+ 1 10350 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L BT253 U8
+U 1 1 32F9E7F1
+P 5500 5200
+F 0 "U8" H 5500 5300 70 0000 C CNN
+F 1 "BT253" H 5500 5100 70 0000 C CNN
+F 2 "footprints:PLCC84" H 5500 5200 60 0001 C CNN
+F 3 "" H 5500 5200 60 0001 C CNN
+ 1 5500 5200
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3800 2000 3800 2200
+Wire Wire Line
+ 3800 2800 3800 2600
+Wire Wire Line
+ 3750 2800 3850 2800
+Wire Wire Line
+ 2750 6200 3000 6200
+Wire Wire Line
+ 2300 6200 2350 6200
+Wire Wire Line
+ 2750 5400 2900 5400
+Wire Wire Line
+ 2300 5400 2350 5400
+Wire Wire Line
+ 2300 4600 2350 4600
+Wire Wire Line
+ 2750 4600 4450 4600
+Wire Wire Line
+ 1700 5400 1800 5400
+Wire Wire Line
+ 1700 4600 1800 4600
+$Comp
+L R R42
+U 1 1 84DFB9D2
+P 12600 3000
+F 0 "R42" H 12500 3200 50 0000 C CNN
+F 1 "75" V 12600 3000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 12600 3000 60 0001 C CNN
+F 3 "" H 12600 3000 60 0001 C CNN
+ 1 12600 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R43
+U 1 1 84DFB9D7
+P 12900 3000
+F 0 "R43" H 12800 3200 50 0000 C CNN
+F 1 "75" V 12900 3000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 12900 3000 60 0001 C CNN
+F 3 "" H 12900 3000 60 0001 C CNN
+ 1 12900 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R44
+U 1 1 84DFB9DC
+P 13150 3000
+F 0 "R44" H 13050 3200 50 0000 C CNN
+F 1 "75" V 13150 3000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 13150 3000 60 0001 C CNN
+F 3 "" H 13150 3000 60 0001 C CNN
+ 1 13150 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C33
+U 1 1 84DFBA31
+P 9350 2500
+F 0 "C33" H 9500 2600 50 0000 C CNN
+F 1 "100nF" H 9500 2400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9350 2500 60 0001 C CNN
+F 3 "" H 9350 2500 60 0001 C CNN
+ 1 9350 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C34
+U 1 1 84DFBA36
+P 11650 2600
+F 0 "C34" H 11800 2700 50 0000 C CNN
+F 1 "100nF" H 11800 2500 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11650 2600 60 0001 C CNN
+F 3 "" H 11650 2600 60 0001 C CNN
+ 1 11650 2600
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C42
+U 1 1 84DFBAEF
+P 12150 2600
+F 0 "C42" H 12300 2700 50 0000 C CNN
+F 1 "2.2uF" H 12300 2500 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 12150 2600 60 0001 C CNN
+F 3 "" H 12150 2600 60 0001 C CNN
+ 1 12150 2600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C35
+U 1 1 84DFBB21
+P 11450 3100
+F 0 "C35" H 11600 3200 50 0000 C CNN
+F 1 "100nF" H 11600 3000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11450 3100 60 0001 C CNN
+F 3 "" H 11450 3100 60 0001 C CNN
+ 1 11450 3100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0168
+U 1 1 684863B9
+P 9350 2750
+F 0 "#GND0168" H 9350 2850 60 0001 C CNN
+F 1 "GND" H 9350 2650 60 0001 C CNN
+F 2 "" H 9350 2750 60 0001 C CNN
+F 3 "" H 9350 2750 60 0001 C CNN
+ 1 9350 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0169
+U 1 1 684863BE
+P 9850 2750
+F 0 "#GND0169" H 9850 2850 60 0001 C CNN
+F 1 "GND" H 9850 2650 60 0001 C CNN
+F 2 "" H 9850 2750 60 0001 C CNN
+F 3 "" H 9850 2750 60 0001 C CNN
+ 1 9850 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0170
+U 1 1 684863C3
+P 12600 2700
+F 0 "#GND0170" H 12600 2800 60 0001 C CNN
+F 1 "GND" H 12600 2600 60 0001 C CNN
+F 2 "" H 12600 2700 60 0001 C CNN
+F 3 "" H 12600 2700 60 0001 C CNN
+ 1 12600 2700
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #GND0171
+U 1 1 684863C8
+P 12900 2700
+F 0 "#GND0171" H 12900 2800 60 0001 C CNN
+F 1 "GND" H 12900 2600 60 0001 C CNN
+F 2 "" H 12900 2700 60 0001 C CNN
+F 3 "" H 12900 2700 60 0001 C CNN
+ 1 12900 2700
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #GND0172
+U 1 1 684863CD
+P 13150 2700
+F 0 "#GND0172" H 13150 2800 60 0001 C CNN
+F 1 "GND" H 13150 2600 60 0001 C CNN
+F 2 "" H 13150 2700 60 0001 C CNN
+F 3 "" H 13150 2700 60 0001 C CNN
+ 1 13150 2700
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #GND0173
+U 1 1 A44C032A
+P 6650 4400
+F 0 "#GND0173" H 6650 4500 60 0001 C CNN
+F 1 "GND" H 6650 4300 60 0000 C CNN
+F 2 "" H 6650 4400 60 0001 C CNN
+F 3 "" H 6650 4400 60 0001 C CNN
+ 1 6650 4400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R47
+U 1 1 A44C0348
+P 2050 5000
+F 0 "R47" V 2130 5000 50 0000 C CNN
+F 1 "75" V 2050 5000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2050 5000 60 0001 C CNN
+F 3 "" H 2050 5000 60 0001 C CNN
+ 1 2050 5000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R45
+U 1 1 A44C032F
+P 2050 5800
+F 0 "R45" V 2130 5800 50 0000 C CNN
+F 1 "75" V 2050 5800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2050 5800 60 0001 C CNN
+F 3 "" H 2050 5800 60 0001 C CNN
+ 1 2050 5800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R46
+U 1 1 A44C0339
+P 2050 6600
+F 0 "R46" V 2130 6600 50 0000 C CNN
+F 1 "75" V 2050 6600 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2050 6600 60 0001 C CNN
+F 3 "" H 2050 6600 60 0001 C CNN
+ 1 2050 6600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0174
+U 1 1 A44C0393
+P 2350 5000
+F 0 "#GND0174" H 2350 5100 60 0001 C CNN
+F 1 "GND" H 2350 4900 60 0001 C CNN
+F 2 "" H 2350 5000 60 0001 C CNN
+F 3 "" H 2350 5000 60 0001 C CNN
+ 1 2350 5000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0175
+U 1 1 A44C0398
+P 2350 5800
+F 0 "#GND0175" H 2350 5900 60 0001 C CNN
+F 1 "GND" H 2350 5700 60 0001 C CNN
+F 2 "" H 2350 5800 60 0001 C CNN
+F 3 "" H 2350 5800 60 0001 C CNN
+ 1 2350 5800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0176
+U 1 1 A44C039D
+P 2350 6600
+F 0 "#GND0176" H 2350 6700 60 0001 C CNN
+F 1 "GND" H 2350 6500 60 0001 C CNN
+F 2 "" H 2350 6600 60 0001 C CNN
+F 3 "" H 2350 6600 60 0001 C CNN
+ 1 2350 6600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R38
+U 1 1 A44C03AC
+P 4100 2900
+F 0 "R38" V 4180 2900 50 0000 C CNN
+F 1 "510" V 4100 2900 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4100 2900 60 0001 C CNN
+F 3 "" H 4100 2900 60 0001 C CNN
+ 1 4100 2900
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND0177
+U 1 1 A44C03B1
+P 3800 2900
+F 0 "#GND0177" H 3800 3000 60 0001 C CNN
+F 1 "GND" H 3800 2800 60 0001 C CNN
+F 2 "" H 3800 2900 60 0001 C CNN
+F 3 "" H 3800 2900 60 0001 C CNN
+ 1 3800 2900
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND0178
+U 1 1 A44D982F
+P 3800 1450
+F 0 "#GND0178" H 3800 1550 60 0001 C CNN
+F 1 "GND" H 3800 1350 60 0001 C CNN
+F 2 "" H 3800 1450 60 0001 C CNN
+F 3 "" H 3800 1450 60 0001 C CNN
+ 1 3800 1450
+ -1 0 0 1
+$EndComp
+$Comp
+L R R15
+U 1 1 A44D982A
+P 3800 1750
+F 0 "R15" V 3880 1750 50 0000 C CNN
+F 1 "1M" V 3800 1750 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3800 1750 60 0001 C CNN
+F 3 "" H 3800 1750 60 0001 C CNN
+ 1 3800 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND0179
+U 1 1 A44D9852
+P 3300 2800
+F 0 "#GND0179" H 3300 2900 60 0001 C CNN
+F 1 "GND" H 3300 2700 60 0001 C CNN
+F 2 "" H 3300 2800 60 0001 C CNN
+F 3 "" H 3300 2800 60 0001 C CNN
+ 1 3300 2800
+ 0 1 1 0
+$EndComp
+$Comp
+L C C36
+U 1 1 A44D9848
+P 3800 2400
+F 0 "C36" H 3950 2500 50 0000 C CNN
+F 1 "100nF" H 3950 2300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3800 2400 60 0001 C CNN
+F 3 "" H 3800 2400 60 0001 C CNN
+ 1 3800 2400
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R36
+U 1 1 A44D9843
+P 4100 2800
+F 0 "R36" V 4180 2800 50 0000 C CNN
+F 1 "470" V 4100 2800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4100 2800 60 0001 C CNN
+F 3 "" H 4100 2800 60 0001 C CNN
+ 1 4100 2800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C37
+U 1 1 A44D984D
+P 3550 2800
+F 0 "C37" V 3800 2800 50 0000 C CNN
+F 1 "100pF" V 3700 2800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3550 2800 60 0001 C CNN
+F 3 "" H 3550 2800 60 0001 C CNN
+ 1 3550 2800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R24
+U 1 1 A44C034D
+P 2050 4600
+F 0 "R24" V 2130 4600 50 0000 C CNN
+F 1 "220" V 2050 4600 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2050 4600 60 0001 C CNN
+F 3 "" H 2050 4600 60 0001 C CNN
+ 1 2050 4600
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R23
+U 1 1 A44C0343
+P 2050 5400
+F 0 "R23" V 2130 5400 50 0000 C CNN
+F 1 "220" V 2050 5400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2050 5400 60 0001 C CNN
+F 3 "" H 2050 5400 60 0001 C CNN
+ 1 2050 5400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R22
+U 1 1 A44C0334
+P 2050 6200
+F 0 "R22" V 2130 6200 50 0000 C CNN
+F 1 "220" V 2050 6200 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2050 6200 60 0001 C CNN
+F 3 "" H 2050 6200 60 0001 C CNN
+ 1 2050 6200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C39
+U 1 1 A44C037F
+P 2550 4600
+F 0 "C39" V 2400 4600 50 0000 C CNN
+F 1 "1uF" V 2700 4600 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 2550 4600 60 0001 C CNN
+F 3 "" H 2550 4600 60 0001 C CNN
+ 1 2550 4600
+ 0 1 1 0
+$EndComp
+$Comp
+L C C40
+U 1 1 A44C0384
+P 2550 5400
+F 0 "C40" V 2400 5400 50 0000 C CNN
+F 1 "1uF" V 2700 5400 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 2550 5400 60 0001 C CNN
+F 3 "" H 2550 5400 60 0001 C CNN
+ 1 2550 5400
+ 0 1 1 0
+$EndComp
+$Comp
+L C C41
+U 1 1 A44C0389
+P 2550 6200
+F 0 "C41" V 2400 6200 50 0000 C CNN
+F 1 "1uF" V 2700 6200 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 2550 6200 60 0001 C CNN
+F 3 "" H 2550 6200 60 0001 C CNN
+ 1 2550 6200
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND0180
+U 1 1 26FC0C80
+P 6400 2200
+F 0 "#GND0180" H 6400 2300 60 0001 C CNN
+F 1 "GND" H 6400 2100 60 0001 C CNN
+F 2 "" H 6400 2200 60 0001 C CNN
+F 3 "" H 6400 2200 60 0001 C CNN
+ 1 6400 2200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L CP C52
+U 1 1 84DFB9B9
+P 6150 2200
+F 0 "C52" V 6300 2200 50 0000 C CNN
+F 1 "22uF" V 6000 2200 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 6150 2200 60 0001 C CNN
+F 3 "" H 6150 2200 60 0001 C CNN
+ 1 6150 2200
+ 0 -1 -1 0
+$EndComp
+$Comp
+L CP C51
+U 1 1 28ED6A43
+P 9850 2500
+F 0 "C51" H 10000 2600 50 0000 C CNN
+F 1 "22uF" H 10000 2400 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 9850 2500 60 0001 C CNN
+F 3 "" H 9850 2500 60 0001 C CNN
+ 1 9850 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L5
+U 1 1 84DFBB99
+P 12150 1800
+F 0 "L5" H 12350 1850 50 0000 C CNN
+F 1 "22uH" H 12350 1750 50 0000 C CNN
+F 2 "lib_smd:SM1812" H 12150 1800 60 0001 C CNN
+F 3 "" H 12150 1800 60 0001 C CNN
+ 1 12150 1800
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R37
+U 1 1 5D7688E4
+P 3700 3100
+F 0 "R37" V 3780 3100 50 0000 C CNN
+F 1 "510" V 3700 3100 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3700 3100 60 0001 C CNN
+F 3 "" H 3700 3100 60 0001 C CNN
+ 1 3700 3100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND0181
+U 1 1 5D7688FD
+P 3400 3100
+F 0 "#GND0181" H 3400 3200 60 0001 C CNN
+F 1 "GND" H 3400 3000 60 0001 C CNN
+F 2 "" H 3400 3100 60 0001 C CNN
+F 3 "" H 3400 3100 60 0001 C CNN
+ 1 3400 3100
+ 0 1 1 0
+$EndComp
+Text Label 10550 2200 0 60 ~ 0
+VAA
+Text HLabel 13450 3450 2 60 Output ~ 0
+RED
+Text HLabel 13450 3650 2 60 Output ~ 0
+GREEN
+Text HLabel 13450 3850 2 60 Output ~ 0
+BLUE
+Text Label 4050 5800 0 60 ~ 0
+DPC0
+Text Label 4050 5900 0 60 ~ 0
+DPC1
+Text Label 4050 6000 0 60 ~ 0
+DPC2
+Text Label 4050 6100 0 60 ~ 0
+DPC3
+Text Label 4050 6200 0 60 ~ 0
+DPC4
+Text Label 4050 6300 0 60 ~ 0
+DPC5
+Text Label 4050 6400 0 60 ~ 0
+DPC6
+Text Label 4050 6500 0 60 ~ 0
+DPC7
+Text Label 8950 5850 0 60 ~ 0
+DPC0
+Text Label 8950 5950 0 60 ~ 0
+DPC1
+Text Label 8950 6050 0 60 ~ 0
+DPC2
+Text Label 8950 6150 0 60 ~ 0
+DPC3
+Text Label 8950 6250 0 60 ~ 0
+DPC4
+Text Label 8950 6350 0 60 ~ 0
+DPC5
+Text Label 8950 6450 0 60 ~ 0
+DPC6
+Text Label 8950 6550 0 60 ~ 0
+DPC7
+Text Label 4000 3100 0 60 ~ 0
+REF+
+$Comp
+L VCC #VCC0182
+U 1 1 4BF036B4
+P 12150 1450
+F 0 "#VCC0182" H 12150 1650 40 0001 C CNN
+F 1 "VCC" H 12150 1600 40 0000 C CNN
+F 2 "" H 12150 1450 60 0001 C CNN
+F 3 "" H 12150 1450 60 0001 C CNN
+ 1 12150 1450
+ 1 0 0 -1
+$EndComp
+Connection ~ 9850 2200
+Connection ~ 10550 2200
+Connection ~ 11450 2200
+Connection ~ 11650 2200
+Connection ~ 10350 2750
+Connection ~ 10450 2750
+Connection ~ 12600 3450
+Connection ~ 12900 3650
+Connection ~ 13150 3850
+Wire Wire Line
+ 5350 2200 5950 2200
+Wire Wire Line
+ 9350 2200 12150 2200
+Wire Wire Line
+ 10050 2750 10550 2750
+Wire Wire Line
+ 11350 3450 13450 3450
+Wire Wire Line
+ 3950 3100 4450 3100
+Wire Wire Line
+ 4450 4700 2900 4700
+Wire Wire Line
+ 8950 5850 9350 5850
+Wire Wire Line
+ 4450 4800 3000 4800
+Wire Wire Line
+ 8950 5950 9350 5950
+Wire Wire Line
+ 8950 6050 9350 6050
+Wire Wire Line
+ 8950 6150 9350 6150
+Wire Wire Line
+ 4050 5800 4450 5800
+Wire Wire Line
+ 8950 6250 9350 6250
+Wire Wire Line
+ 4050 5900 4450 5900
+Wire Wire Line
+ 8950 6350 9350 6350
+Wire Wire Line
+ 4050 6000 4450 6000
+Wire Wire Line
+ 8950 6450 9350 6450
+Wire Wire Line
+ 4050 6100 4450 6100
+Wire Wire Line
+ 8950 6550 9350 6550
+Wire Wire Line
+ 4050 6200 4450 6200
+Wire Wire Line
+ 4050 6300 4450 6300
+Wire Wire Line
+ 8950 6750 9350 6750
+Wire Wire Line
+ 4050 6400 4450 6400
+Wire Wire Line
+ 8950 6850 9350 6850
+Wire Wire Line
+ 4050 6500 4450 6500
+Wire Wire Line
+ 8950 6950 9350 6950
+Wire Wire Line
+ 4050 7000 4450 7000
+Wire Wire Line
+ 4050 7100 4450 7100
+Wire Wire Line
+ 2900 4700 2900 5400
+Wire Wire Line
+ 3000 4800 3000 6200
+Wire Wire Line
+ 10550 2750 10550 2200
+Wire Wire Line
+ 12600 3250 12600 3450
+Wire Wire Line
+ 1750 5400 1750 5800
+Wire Wire Line
+ 1750 5800 1800 5800
+Connection ~ 1750 5400
+Wire Wire Line
+ 1750 6200 1750 6600
+Wire Wire Line
+ 1750 6600 1800 6600
+Connection ~ 1750 6200
+Wire Wire Line
+ 1750 4600 1750 5000
+Wire Wire Line
+ 1750 5000 1800 5000
+Connection ~ 1750 4600
+Connection ~ 3800 2100
+Connection ~ 3800 2800
+Connection ~ 6550 4600
+Connection ~ 6550 4400
+Connection ~ 6550 4000
+Wire Wire Line
+ 12150 2100 12150 2400
+Connection ~ 12150 2200
+Wire Wire Line
+ 11450 2200 11450 2900
+Wire Wire Line
+ 11650 2900 12150 2900
+Connection ~ 12150 2900
+Wire Wire Line
+ 13150 2750 13150 2700
+Wire Wire Line
+ 12900 2700 12900 2750
+Wire Wire Line
+ 12600 2750 12600 2700
+Wire Wire Line
+ 11650 2800 11650 2900
+Wire Wire Line
+ 11650 2200 11650 2400
+Wire Wire Line
+ 9850 2300 9850 2200
+Wire Wire Line
+ 9850 2750 9850 2700
+Wire Wire Line
+ 9350 2300 9350 2200
+Wire Wire Line
+ 9350 2700 9350 2750
+Wire Wire Line
+ 12850 4250 12800 4250
+Wire Wire Line
+ 12050 5050 12000 5050
+Wire Wire Line
+ 11400 5650 11350 5650
+Wire Wire Line
+ 11400 5450 11350 5450
+Wire Wire Line
+ 11400 5850 11350 5850
+Wire Wire Line
+ 10450 8150 10450 8250
+Wire Wire Line
+ 10150 8200 10450 8200
+Wire Wire Line
+ 10350 8200 10350 8150
+Connection ~ 10450 8200
+Wire Wire Line
+ 10250 8200 10250 8150
+Connection ~ 10350 8200
+Wire Wire Line
+ 10150 8200 10150 8150
+Connection ~ 10250 8200
+Wire Wire Line
+ 9300 7650 9300 7800
+Wire Wire Line
+ 9300 7650 9350 7650
+Wire Wire Line
+ 9350 7750 9300 7750
+Connection ~ 9300 7750
+Wire Wire Line
+ 9300 7150 9350 7150
+Wire Wire Line
+ 9350 7250 9300 7250
+Wire Wire Line
+ 5650 8100 5650 8250
+Wire Wire Line
+ 5350 8150 5650 8150
+Wire Wire Line
+ 5350 8150 5350 8100
+Connection ~ 5650 8150
+Wire Wire Line
+ 5450 8100 5450 8150
+Connection ~ 5450 8150
+Wire Wire Line
+ 5550 8100 5550 8150
+Connection ~ 5550 8150
+Wire Wire Line
+ 2300 6600 2350 6600
+Wire Wire Line
+ 2350 5800 2300 5800
+Wire Wire Line
+ 2350 5000 2300 5000
+Wire Wire Line
+ 3400 3100 3450 3100
+Wire Wire Line
+ 3300 2800 3350 2800
+Wire Wire Line
+ 3800 2900 3850 2900
+Wire Wire Line
+ 3800 1500 3800 1450
+Wire Wire Line
+ 5550 2200 5550 2300
+Connection ~ 5650 2200
+Wire Wire Line
+ 5450 2200 5450 2300
+Connection ~ 5550 2200
+Wire Wire Line
+ 5350 2200 5350 2300
+Connection ~ 5450 2200
+Wire Wire Line
+ 6400 2200 6350 2200
+Wire Wire Line
+ 12150 1450 12150 1500
+$EndSCHEMATC
diff --git a/demos/video/fp-lib-table b/demos/video/fp-lib-table
new file mode 100644
index 0000000..6128dc0
--- /dev/null
+++ b/demos/video/fp-lib-table
@@ -0,0 +1,3 @@
+(fp_lib_table
+ (lib (name footprints)(type KiCad)(uri ${KIPRJMOD}/libs/footprints.pretty)(options "")(descr "footprints specific to this project"))
+)
diff --git a/demos/video/graphic.sch b/demos/video/graphic.sch
new file mode 100644
index 0000000..15db3a9
--- /dev/null
+++ b/demos/video/graphic.sch
@@ -0,0 +1,1654 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 5 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 "Xilinxs"
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Text Label 3100 1900 0 60 ~ 0
+DONE
+Text Label 3050 2000 0 60 ~ 0
+DIN
+Text Label 3000 2200 0 60 ~ 0
+CCLK
+Wire Wire Line
+ 6150 5000 5550 5000
+Text Label 5650 5000 0 60 ~ 0
+RESERV1
+Wire Wire Line
+ 11900 3900 11300 3900
+Text Label 11400 3900 0 60 ~ 0
+RESERV1
+$Comp
+L GND #PWR057
+U 1 1 34E1752B
+P 4850 1000
+F 0 "#PWR057" H 4850 1000 40 0001 C CNN
+F 1 "GND" H 4850 930 40 0001 C CNN
+F 2 "" H 4850 1000 60 0001 C CNN
+F 3 "" H 4850 1000 60 0001 C CNN
+ 1 4850 1000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P12
+U 1 1 34E1751D
+P 4850 800
+F 0 "P12" V 5050 800 50 0000 C CNN
+F 1 "CONN_1" V 4950 800 50 0000 C CNN
+F 2 "Connect:TESTPOINT" H 4850 800 60 0001 C CNN
+F 3 "" H 4850 800 60 0001 C CNN
+ 1 4850 800
+ 0 -1 -1 0
+$EndComp
+NoConn ~ 5550 3600
+Wire Wire Line
+ 5550 2800 6250 2800
+Wire Wire Line
+ 5550 3400 6250 3400
+Wire Wire Line
+ 5550 5500 5700 5500
+$Comp
+L CONN_1 P9
+U 1 1 34E1718B
+P 5850 5500
+F 0 "P9" H 5850 5400 50 0000 C CNN
+F 1 "CONN_1" H 5850 5300 50 0000 C CNN
+F 2 "Connect:PINTST" H 5850 5500 60 0001 C CNN
+F 3 "" H 5850 5500 60 0001 C CNN
+ 1 5850 5500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P11
+U 1 1 4BF036DA
+P 6400 3400
+F 0 "P11" H 6400 3550 50 0000 C CNN
+F 1 "CONN_1" H 6400 3450 50 0000 C CNN
+F 2 "Connect:PINTST" H 6400 3400 60 0001 C CNN
+F 3 "" H 6400 3400 60 0001 C CNN
+ 1 6400 3400
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_1 P10
+U 1 1 4BF036D9
+P 6400 2800
+F 0 "P10" H 6400 2950 50 0000 C CNN
+F 1 "CONN_1" H 6400 2850 50 0000 C CNN
+F 2 "Connect:PINTST" H 6400 2800 60 0001 C CNN
+F 3 "" H 6400 2800 60 0001 C CNN
+ 1 6400 2800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 11250 4000 11900 4000
+Text HLabel 11250 4000 0 60 Output ~ 0
+ACQ_ON
+Wire Wire Line
+ 14100 5600 14600 5600
+NoConn ~ 14100 8200
+Wire Wire Line
+ 8200 5500 6700 5500
+Connection ~ 8200 5500
+Text Label 5600 3500 0 60 ~ 0
+LED
+Wire Wire Line
+ 5550 3500 5850 3500
+NoConn ~ 5550 1900
+NoConn ~ 5550 1800
+NoConn ~ 5550 1500
+NoConn ~ 5550 5800
+NoConn ~ 5550 5700
+NoConn ~ 5550 5100
+NoConn ~ 5550 4900
+NoConn ~ 5550 4700
+NoConn ~ 5550 4300
+NoConn ~ 5550 1700
+Wire Wire Line
+ 6700 5500 6700 5400
+$Comp
+L XC4005-PQ100 U23
+U 1 1 33BA5628
+P 4500 3700
+F 0 "U23" H 4500 3800 70 0000 C CNN
+F 1 "XC4003/PQ100" H 4500 3600 70 0000 C CNN
+F 2 "lib_smd:PQFP100" H 4500 3700 60 0001 C CNN
+F 3 "" H 4500 3700 60 0001 C CNN
+ 1 4500 3700
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5950 1600 5550 1600
+Wire Wire Line
+ 3450 4500 2900 4500
+Wire Wire Line
+ 14550 3700 14100 3700
+Text Label 14200 3700 0 60 ~ 0
+SYSRST-
+Wire Wire Line
+ 14100 4700 14550 4700
+Wire Wire Line
+ 14100 8700 14750 8700
+Wire Wire Line
+ 14650 3500 14100 3500
+Wire Wire Line
+ 14650 3400 14100 3400
+Text Label 14200 4700 0 60 ~ 0
+SELECT-
+Wire Wire Line
+ 14550 4100 14100 4100
+Wire Wire Line
+ 14550 4000 14100 4000
+Wire Wire Line
+ 14550 3900 14100 3900
+Wire Wire Line
+ 14550 3800 14100 3800
+Text Label 14200 3800 0 60 ~ 0
+BE-3
+Text Label 14200 3900 0 60 ~ 0
+BE-2
+Text Label 14200 4000 0 60 ~ 0
+BE-1
+Text Label 14200 4100 0 60 ~ 0
+BE-0
+Text Label 14200 3400 0 60 ~ 0
+PTNUM1
+Text Label 14200 3500 0 60 ~ 0
+PTNUM0
+Wire Wire Line
+ 14650 3300 14100 3300
+Wire Wire Line
+ 14650 3200 14100 3200
+Wire Wire Line
+ 14650 3100 14100 3100
+Wire Wire Line
+ 14650 3000 14100 3000
+Text Label 14200 3300 0 60 ~ 0
+PTBE-3
+Text Label 14200 3200 0 60 ~ 0
+PTBE-2
+Text Label 14200 3100 0 60 ~ 0
+PTBE-1
+Text Label 14200 3000 0 60 ~ 0
+PTBE-0
+Text HLabel 15050 2300 2 60 Output ~ 0
+TVI[0..1]
+Wire Wire Line
+ 11300 4200 11900 4200
+Wire Wire Line
+ 11300 3600 11900 3600
+Wire Wire Line
+ 6700 5400 5550 5400
+Wire Wire Line
+ 5550 5300 6700 5300
+Text Label 5600 5300 0 60 ~ 0
+CLK10MHz
+Text Label 11500 4900 0 60 ~ 0
+PTWR
+Wire Wire Line
+ 11900 4900 11450 4900
+Wire Wire Line
+ 11900 4800 11450 4800
+Text HLabel 11450 4800 0 60 BiDi ~ 0
+X_IRQ
+Wire Wire Line
+ 14100 3600 14700 3600
+Text HLabel 14700 3600 2 60 Input ~ 0
+IRQ-
+Wire Wire Line
+ 14100 4800 14700 4800
+Text HLabel 14700 4800 2 60 BiDi ~ 0
+IRQ_SLR
+Wire Wire Line
+ 11900 4500 11300 4500
+Wire Wire Line
+ 11900 5100 11450 5100
+Wire Wire Line
+ 11900 4400 11300 4400
+Wire Wire Line
+ 11900 4300 11300 4300
+Text Label 11350 4500 0 60 ~ 0
+PTBURST-
+Text Label 11350 4400 0 60 ~ 0
+PTATN-
+Text Label 11350 4300 0 60 ~ 0
+PTRDY-
+Text Label 11450 5100 0 60 ~ 0
+PTADR-
+Wire Wire Line
+ 5100 10700 5100 10650
+Wire Wire Line
+ 5450 10700 5450 10650
+Wire Wire Line
+ 5800 10700 5800 10650
+Wire Wire Line
+ 6150 10700 6150 10650
+Wire Wire Line
+ 2750 10700 6150 10700
+Wire Wire Line
+ 5100 10200 5100 10250
+Wire Wire Line
+ 5450 10200 5450 10250
+Wire Wire Line
+ 5800 10200 5800 10250
+Wire Wire Line
+ 6150 10200 6150 10250
+Wire Wire Line
+ 2750 10200 6150 10200
+Connection ~ 5800 10200
+Connection ~ 5450 10200
+Connection ~ 4550 10200
+Connection ~ 5100 10200
+Connection ~ 5800 10700
+Connection ~ 5450 10700
+Connection ~ 5100 10700
+Connection ~ 4550 10700
+$Comp
+L C C73
+U 1 1 33AFD8EF
+P 6150 10450
+F 0 "C73" H 6300 10550 50 0000 C CNN
+F 1 "100nF" H 6300 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 6150 10450 60 0001 C CNN
+F 3 "" H 6150 10450 60 0001 C CNN
+ 1 6150 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C72
+U 1 1 33AFD8ED
+P 5800 10450
+F 0 "C72" H 5950 10550 50 0000 C CNN
+F 1 "100nF" H 5950 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5800 10450 60 0001 C CNN
+F 3 "" H 5800 10450 60 0001 C CNN
+ 1 5800 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C71
+U 1 1 33AFD8E9
+P 5450 10450
+F 0 "C71" H 5600 10550 50 0000 C CNN
+F 1 "100nF" H 5600 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5450 10450 60 0001 C CNN
+F 3 "" H 5450 10450 60 0001 C CNN
+ 1 5450 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C70
+U 1 1 33AFD8AF
+P 5100 10450
+F 0 "C70" H 5250 10550 50 0000 C CNN
+F 1 "100nF" H 5250 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5100 10450 60 0001 C CNN
+F 3 "" H 5100 10450 60 0001 C CNN
+ 1 5100 10450
+ 1 0 0 -1
+$EndComp
+Text Label 14200 4600 0 60 ~ 0
+ADR2
+Text Label 14200 4500 0 60 ~ 0
+ADR3
+Text Label 14200 4400 0 60 ~ 0
+ADR4
+Text Label 14200 4300 0 60 ~ 0
+ADR5
+Text Label 14200 4200 0 60 ~ 0
+ADR6
+Text HLabel 15050 2150 2 60 Output ~ 0
+PCA[0..2]
+Wire Wire Line
+ 5550 4400 5950 4400
+Wire Wire Line
+ 5550 4500 5950 4500
+Wire Wire Line
+ 5550 4600 5950 4600
+Text Label 5650 4600 0 60 ~ 0
+PCA2
+Text Label 5650 4500 0 60 ~ 0
+PCA1
+Text Label 5650 4400 0 60 ~ 0
+PCA0
+Wire Wire Line
+ 14100 6400 14500 6400
+Wire Wire Line
+ 14100 5800 14500 5800
+Text Label 14150 6400 0 60 ~ 0
+TVI1
+Text Label 14200 6300 0 60 ~ 0
+TVI0
+Wire Wire Line
+ 14500 6800 14100 6800
+Wire Wire Line
+ 14500 7100 14100 7100
+Wire Wire Line
+ 14500 6700 14100 6700
+Wire Wire Line
+ 14500 7200 14100 7200
+Text Label 14150 6800 0 60 ~ 0
+IOE-
+Text Label 14150 7100 0 60 ~ 0
+IWR-
+Text Label 14150 6700 0 60 ~ 0
+ICAS-
+Text Label 14150 7200 0 60 ~ 0
+IRAS-
+Wire Wire Line
+ 14500 7300 14100 7300
+Wire Wire Line
+ 14500 7600 14100 7600
+Wire Wire Line
+ 14500 8400 14100 8400
+Wire Wire Line
+ 14500 8300 14100 8300
+Wire Wire Line
+ 14500 8100 14100 8100
+Wire Wire Line
+ 14500 8000 14100 8000
+Wire Wire Line
+ 14500 7900 14100 7900
+Wire Wire Line
+ 14500 7800 14100 7800
+Wire Wire Line
+ 14500 7700 14100 7700
+Wire Wire Line
+ 14500 7500 14100 7500
+Text Label 14200 7300 0 60 ~ 0
+IA9
+Text Label 14200 7600 0 60 ~ 0
+IA8
+Text Label 14200 8400 0 60 ~ 0
+IA7
+Text Label 14200 8300 0 60 ~ 0
+IA6
+Text Label 14200 8100 0 60 ~ 0
+IA5
+Text Label 14200 8000 0 60 ~ 0
+IA4
+Text Label 14200 7900 0 60 ~ 0
+IA3
+Text Label 14200 7800 0 60 ~ 0
+IA2
+Text Label 14200 7700 0 60 ~ 0
+IA1
+Text Label 14200 7500 0 60 ~ 0
+IA0
+Wire Wire Line
+ 14100 6600 14400 6600
+Wire Wire Line
+ 14100 6500 14400 6500
+Wire Wire Line
+ 14100 7000 14400 7000
+Wire Wire Line
+ 14100 6900 14400 6900
+Text Label 14150 6500 0 60 ~ 0
+ID3
+Text Label 14150 6600 0 60 ~ 0
+ID2
+Text Label 14150 7000 0 60 ~ 0
+ID1
+Text Label 14150 6900 0 60 ~ 0
+ID0
+Wire Wire Line
+ 8700 9400 8300 9400
+Wire Wire Line
+ 8700 9300 8300 9300
+Wire Wire Line
+ 8700 9200 8300 9200
+Wire Wire Line
+ 8700 9100 8300 9100
+Wire Wire Line
+ 8700 8900 8300 8900
+Wire Wire Line
+ 8700 8800 8300 8800
+Wire Wire Line
+ 8700 8700 8300 8700
+Wire Wire Line
+ 8700 8600 8300 8600
+Wire Wire Line
+ 8700 8500 8300 8500
+Wire Wire Line
+ 8700 8400 8300 8400
+Wire Wire Line
+ 8700 8300 8300 8300
+Wire Wire Line
+ 8700 8200 8300 8200
+Wire Wire Line
+ 8700 8100 8300 8100
+Wire Wire Line
+ 8700 8000 8300 8000
+Wire Wire Line
+ 10000 8300 10300 8300
+Wire Wire Line
+ 10000 8200 10300 8200
+Wire Wire Line
+ 10000 8100 10300 8100
+Wire Wire Line
+ 10000 8000 10300 8000
+Text Label 10050 8300 0 60 ~ 0
+ID3
+Text Label 10050 8200 0 60 ~ 0
+ID2
+Text Label 10050 8100 0 60 ~ 0
+ID1
+Text Label 10050 8000 0 60 ~ 0
+ID0
+Text Label 8350 9400 0 60 ~ 0
+IOE-
+Text Label 8350 9300 0 60 ~ 0
+IWR-
+Text Label 8350 9200 0 60 ~ 0
+ICAS-
+Text Label 8350 9100 0 60 ~ 0
+IRAS-
+Text Label 8400 8900 0 60 ~ 0
+IA9
+Text Label 8400 8800 0 60 ~ 0
+IA8
+Text Label 8400 8700 0 60 ~ 0
+IA7
+Text Label 8400 8600 0 60 ~ 0
+IA6
+Text Label 8400 8500 0 60 ~ 0
+IA5
+Text Label 8400 8400 0 60 ~ 0
+IA4
+Text Label 8400 8300 0 60 ~ 0
+IA3
+Text Label 8400 8200 0 60 ~ 0
+IA2
+Text Label 8400 8100 0 60 ~ 0
+IA1
+Text Label 8400 8000 0 60 ~ 0
+IA0
+$Comp
+L 4C4001 U2
+U 1 1 33A805F8
+P 9350 8700
+F 0 "U2" H 9400 8700 70 0000 C CNN
+F 1 "4C4001" H 9400 8400 70 0000 C CNN
+F 2 "lib_smd:SO28" H 9350 8700 60 0001 C CNN
+F 3 "" H 9350 8700 60 0001 C CNN
+ 1 9350 8700
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 11300 7600 11900 7600
+Wire Wire Line
+ 11300 7800 11900 7800
+Text HLabel 11300 7700 0 60 Output ~ 0
+WRITE_RAM
+Text HLabel 11300 7800 0 60 Output ~ 0
+ACCES_RAM-
+$Comp
+L GND #PWR058
+U 1 1 33A80097
+P 2800 1200
+F 0 "#PWR058" H 2800 1200 40 0001 C CNN
+F 1 "GND" H 2800 1130 40 0001 C CNN
+F 2 "" H 2800 1200 60 0001 C CNN
+F 3 "" H 2800 1200 60 0001 C CNN
+ 1 2800 1200
+ 1 0 0 -1
+$EndComp
+NoConn ~ 3450 2100
+Text Label 14300 2900 0 60 ~ 0
+CSIO-
+Wire Wire Line
+ 14100 2900 14700 2900
+Text Label 5750 4800 0 60 ~ 0
+CSIO-
+Wire Wire Line
+ 5550 4800 6150 4800
+Text Label 7250 2850 0 60 ~ 0
+LED
+NoConn ~ 3450 2400
+NoConn ~ 3450 2500
+Connection ~ 3450 1500
+Connection ~ 3450 1600
+$Comp
+L VCC #PWR059
+U 1 1 33A7E12B
+P 4350 1250
+F 0 "#PWR059" H 4350 1450 40 0001 C CNN
+F 1 "VCC" H 4350 1400 40 0000 C CNN
+F 2 "" H 4350 1250 60 0001 C CNN
+F 3 "" H 4350 1250 60 0001 C CNN
+ 1 4350 1250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR060
+U 1 1 33A7E121
+P 3650 1150
+F 0 "#PWR060" H 3650 1150 40 0001 C CNN
+F 1 "GND" H 3650 1080 40 0001 C CNN
+F 2 "" H 3650 1150 60 0001 C CNN
+F 3 "" H 3650 1150 60 0001 C CNN
+ 1 3650 1150
+ 1 0 0 -1
+$EndComp
+Connection ~ 3450 1250
+Wire Wire Line
+ 3800 1250 3450 1250
+Wire Wire Line
+ 3450 1100 3450 1700
+Wire Wire Line
+ 2900 1150 2900 2200
+Wire Wire Line
+ 3000 1150 3000 2000
+Wire Wire Line
+ 3100 1150 3100 1900
+Wire Wire Line
+ 3200 1150 3200 1800
+$Comp
+L CONN_2 P4
+U 1 1 33A7E0C8
+P 3550 750
+F 0 "P4" V 3500 750 40 0000 C CNN
+F 1 "CONN_2" V 3600 750 40 0000 C CNN
+F 2 "Connect:SIL-2" H 3550 750 60 0001 C CNN
+F 3 "" H 3550 750 60 0001 C CNN
+ 1 3550 750
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R48
+U 1 1 33A7E0B2
+P 4050 1250
+F 0 "R48" V 4130 1250 50 0000 C CNN
+F 1 "10K" V 4050 1250 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4050 1250 60 0001 C CNN
+F 3 "" H 4050 1250 60 0001 C CNN
+F 4 "~" V 4050 1170 50 0001 C CNN "Champ7"
+ 1 4050 1250
+ 0 1 1 0
+$EndComp
+NoConn ~ 2500 1700
+$Comp
+L VCC #PWR061
+U 1 1 33A7E07A
+P 950 1150
+F 0 "#PWR061" H 950 1350 40 0001 C CNN
+F 1 "VCC" H 950 1300 40 0000 C CNN
+F 2 "" H 950 1150 60 0001 C CNN
+F 3 "" H 950 1150 60 0001 C CNN
+ 1 950 1150
+ 1 0 0 -1
+$EndComp
+Connection ~ 2900 2200
+Connection ~ 3000 1400
+Wire Wire Line
+ 2750 1800 3450 1800
+Wire Wire Line
+ 1000 1400 800 1400
+Wire Wire Line
+ 800 1400 800 2200
+Wire Wire Line
+ 800 2200 3450 2200
+Wire Wire Line
+ 3000 2000 3450 2000
+Wire Wire Line
+ 2500 1400 3000 1400
+Wire Wire Line
+ 3100 1900 3450 1900
+$Comp
+L CONN_5 P5
+U 1 1 33A7DFAB
+P 3000 750
+F 0 "P5" V 2950 750 50 0000 C CNN
+F 1 "CONN_5" V 3050 750 50 0000 C CNN
+F 2 "pin_array:PIN_ARRAY_5x1" H 3000 750 60 0001 C CNN
+F 3 "" H 3000 750 60 0001 C CNN
+ 1 3000 750
+ 0 -1 -1 0
+$EndComp
+$Comp
+L XC1736APD8 U21
+U 1 1 33A7DDDD
+P 1750 1550
+F 0 "U21" H 1750 1950 70 0000 C CNN
+F 1 "XC1736APD8" H 1750 1150 70 0000 C CNN
+F 2 "dip_sockets:DIP-8__300" H 1750 1550 60 0001 C CNN
+F 3 "" H 1750 1550 60 0001 C CNN
+ 1 1750 1550
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2050 7300 1950 7300
+$Comp
+L VCC #PWR062
+U 1 1 33A7DCF3
+P 1950 7300
+F 0 "#PWR062" H 1950 7500 40 0001 C CNN
+F 1 "VCC" H 1950 7450 40 0000 C CNN
+F 2 "" H 1950 7300 60 0001 C CNN
+F 3 "" H 1950 7300 60 0001 C CNN
+ 1 1950 7300
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R1
+U 1 1 33A7DCE3
+P 2300 7300
+F 0 "R1" V 2380 7300 50 0000 C CNN
+F 1 "10" V 2300 7300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2300 7300 60 0001 C CNN
+F 3 "" H 2300 7300 60 0001 C CNN
+F 4 "~" V 2300 7220 50 0001 C CNN "Champ7"
+ 1 2300 7300
+ 0 1 1 0
+$EndComp
+Connection ~ 3000 7300
+Wire Wire Line
+ 3000 7300 3000 7400
+$Comp
+L GND #PWR063
+U 1 1 33A7DCA9
+P 3000 7850
+F 0 "#PWR063" H 3000 7850 40 0001 C CNN
+F 1 "GND" H 3000 7780 40 0001 C CNN
+F 2 "" H 3000 7850 60 0001 C CNN
+F 3 "" H 3000 7850 60 0001 C CNN
+ 1 3000 7850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C23
+U 1 1 33A7DC91
+P 3000 7600
+F 0 "C23" H 3150 7700 50 0000 C CNN
+F 1 "100nF" H 3150 7500 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3000 7600 60 0001 C CNN
+F 3 "" H 3000 7600 60 0001 C CNN
+ 1 3000 7600
+ 1 0 0 -1
+$EndComp
+Text Label 11400 3600 0 60 ~ 0
+X_DOUT
+Text HLabel 15050 1550 2 60 Output ~ 0
+X_DOUT
+Text HLabel 15050 1650 2 60 Output ~ 0
+X_CLK
+Text HLabel 15050 1750 2 60 Output ~ 0
+X_DONE
+Text HLabel 15050 1850 2 60 Output ~ 0
+X_PROG-
+Wire Wire Line
+ 11250 6900 11900 6900
+Wire Wire Line
+ 11250 7500 11900 7500
+Text HLabel 11250 6900 0 60 Input ~ 0
+VD_PAL-
+Text HLabel 11250 7400 0 60 Input ~ 0
+HD_PAL-
+Text HLabel 11250 7000 0 60 Input ~ 0
+F_PALIN
+Wire Wire Line
+ 11250 7000 11900 7000
+Wire Wire Line
+ 5550 4100 5750 4100
+Wire Wire Line
+ 5550 4000 5750 4000
+Text HLabel 5750 4100 2 60 Output ~ 0
+BT812_WR-
+Text HLabel 5750 4000 2 60 Output ~ 0
+BT812_RD-
+Text Label 5650 5400 0 60 ~ 0
+XTAL_I
+NoConn ~ 14100 5700
+Wire Wire Line
+ 11450 5300 11900 5300
+Wire Wire Line
+ 11450 5500 11900 5500
+Text HLabel 11450 5300 0 60 Output ~ 0
+RDFIFO-
+Text HLabel 11450 5500 0 60 Output ~ 0
+WRFIFO-
+Wire Wire Line
+ 11900 5400 11450 5400
+Wire Wire Line
+ 11900 5200 11450 5200
+Text HLabel 11450 5400 0 60 Output ~ 0
+WRFULL
+Text HLabel 11450 5200 0 60 Output ~ 0
+RDEMPTY
+Wire Wire Line
+ 3450 4200 2950 4200
+Wire Wire Line
+ 3450 4100 2950 4100
+Wire Wire Line
+ 3450 4000 2950 4000
+Wire Wire Line
+ 3450 3900 2950 3900
+Text Label 3000 4200 0 60 ~ 0
+PTBE-3
+Text Label 3000 4100 0 60 ~ 0
+PTBE-2
+Text Label 3000 4000 0 60 ~ 0
+PTBE-1
+Text Label 3000 3900 0 60 ~ 0
+PTBE-0
+Wire Wire Line
+ 5950 5900 5550 5900
+Wire Wire Line
+ 3450 5600 3050 5600
+Wire Wire Line
+ 3450 5500 3050 5500
+Wire Wire Line
+ 3450 5400 3050 5400
+Wire Wire Line
+ 3450 5300 3050 5300
+Text Label 5600 5900 0 60 ~ 0
+ADR2
+Text Label 3100 5600 0 60 ~ 0
+ADR3
+Text Label 3100 5500 0 60 ~ 0
+ADR4
+Text Label 3100 5400 0 60 ~ 0
+ADR5
+Text Label 3100 5300 0 60 ~ 0
+ADR6
+Wire Wire Line
+ 3450 5200 3050 5200
+Wire Wire Line
+ 3450 5100 3050 5100
+Wire Wire Line
+ 3450 5000 3050 5000
+Wire Wire Line
+ 3450 4900 3050 4900
+Text Label 3100 4900 0 60 ~ 0
+BE-3
+Text Label 3100 5000 0 60 ~ 0
+BE-2
+Text Label 3100 5100 0 60 ~ 0
+BE-1
+Text Label 3100 5200 0 60 ~ 0
+BE-0
+Wire Wire Line
+ 11550 7300 11900 7300
+$Comp
+L XC4005-PQ160 U24
+U 1 1 3366016A
+P 13000 5900
+F 0 "U24" H 13000 6000 70 0000 C CNN
+F 1 "XC4005-PQ160" H 13000 5800 70 0000 C CNN
+F 2 "lib_smd:PQFP160" H 13000 5900 60 0001 C CNN
+F 3 "" H 13000 5900 60 0001 C CNN
+ 1 13000 5900
+ 1 0 0 -1
+$EndComp
+Text Label 11600 7300 0 60 ~ 0
+DQ15
+Text Label 11600 7200 0 60 ~ 0
+DQ14
+Text Label 11600 7100 0 60 ~ 0
+DQ13
+Text Label 11600 6800 0 60 ~ 0
+DQ12
+Text Label 11600 6700 0 60 ~ 0
+DQ11
+Text Label 11600 6600 0 60 ~ 0
+DQ10
+Text Label 11600 6500 0 60 ~ 0
+DQ9
+Text Label 11600 6400 0 60 ~ 0
+DQ8
+Text Label 11600 6300 0 60 ~ 0
+DQ7
+Text Label 11600 6200 0 60 ~ 0
+DQ6
+Text Label 11600 6100 0 60 ~ 0
+DQ5
+Text Label 11500 6000 0 60 ~ 0
+DQ4
+Text Label 11500 5900 0 60 ~ 0
+DQ3
+Text Label 11500 5800 0 60 ~ 0
+DQ2
+Text Label 11500 5700 0 60 ~ 0
+DQ1
+Text Label 11500 5600 0 60 ~ 0
+DQ0
+Text HLabel 1300 2400 0 60 3State ~ 0
+DQ[0..15]
+Text Label 11400 3700 0 60 ~ 0
+X_CLK
+Text Label 11400 3500 0 60 ~ 0
+X_DIN
+Text Label 11400 3400 0 60 ~ 0
+X_DONE
+Text Label 11400 3300 0 60 ~ 0
+X_PROG-
+Wire Wire Line
+ 11300 3700 11900 3700
+Wire Wire Line
+ 11300 3500 11900 3500
+Wire Wire Line
+ 11300 3300 11900 3300
+Wire Wire Line
+ 11300 3400 11900 3400
+$Comp
+L VCC #PWR064
+U 1 1 3365FFE4
+P 8000 2150
+F 0 "#PWR064" H 8000 2350 40 0001 C CNN
+F 1 "VCC" H 8000 2300 40 0000 C CNN
+F 2 "" H 8000 2150 60 0001 C CNN
+F 3 "" H 8000 2150 60 0001 C CNN
+ 1 8000 2150
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R13
+U 1 1 2D5AA03C
+P 8000 2500
+F 0 "R13" H 7850 2700 50 0000 C CNN
+F 1 "1K" V 8000 2500 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 8000 2500 60 0001 C CNN
+F 3 "" H 8000 2500 60 0001 C CNN
+ 1 8000 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LED D6
+U 1 1 2D5AA041
+P 7700 2850
+F 0 "D6" H 7700 2600 60 0000 C CNN
+F 1 "LED" H 7720 2700 60 0000 C CNN
+F 2 "Discret:LEDV" H 7700 2850 60 0001 C CNN
+F 3 "" H 7700 2850 60 0001 C CNN
+ 1 7700 2850
+ -1 0 0 1
+$EndComp
+Text HLabel 3150 3700 0 60 Input ~ 0
+PTATN-
+Text HLabel 2850 3800 0 60 Output ~ 0
+PTRDY-
+Text HLabel 3350 4700 0 60 Input ~ 0
+PTNUM1
+Text HLabel 1450 2700 0 60 Input ~ 0
+PTBE-[0..3]
+Text HLabel 3150 4400 0 60 Output ~ 0
+PTADR-
+Text HLabel 3150 3500 0 60 Input ~ 0
+PTWR
+Text HLabel 3150 3600 0 60 Input ~ 0
+PTBURST-
+Text HLabel 650 2500 2 60 Output ~ 0
+ADR[2..6]
+Text HLabel 3350 5700 0 60 Output ~ 0
+SELECT-
+Text HLabel 3350 5900 0 60 Output ~ 0
+WR-
+Text HLabel 3350 5800 0 60 Output ~ 0
+RD-
+Text HLabel 2900 4500 0 60 Input ~ 0
+BPCLK
+Text HLabel 5950 1600 2 60 Input ~ 0
+SYSRST-
+Text HLabel 3350 4800 0 60 Input ~ 0
+PTNUM0
+Text HLabel 650 2600 2 60 Output ~ 0
+BE-[0..3]
+Text Label 3150 3400 0 60 ~ 0
+DQ0
+Text Label 3150 3300 0 60 ~ 0
+DQ1
+Text Label 5650 2900 0 60 ~ 0
+X_CLK
+Text Label 5650 3000 0 60 ~ 0
+X_DIN
+Text Label 5650 3200 0 60 ~ 0
+X_DONE
+Text Label 5650 3100 0 60 ~ 0
+X_PROG-
+Text Label 3150 3200 0 60 ~ 0
+DQ2
+Text Label 3150 2900 0 60 ~ 0
+DQ3
+Text Label 3150 3100 0 60 ~ 0
+DQ4
+Text Label 3150 3000 0 60 ~ 0
+DQ5
+Text Label 3150 2800 0 60 ~ 0
+DQ6
+Text Label 3150 2700 0 60 ~ 0
+DQ7
+Text Label 5750 2000 0 60 ~ 0
+DQ8
+Text Label 5750 2100 0 60 ~ 0
+DQ9
+Text Label 5750 2200 0 60 ~ 0
+DQ10
+Text Label 5750 2300 0 60 ~ 0
+DQ11
+Text Label 5750 2400 0 60 ~ 0
+DQ12
+Text Label 5750 2500 0 60 ~ 0
+DQ13
+Text Label 5750 2700 0 60 ~ 0
+DQ14
+Text Label 5750 2600 0 60 ~ 0
+DQ15
+Wire Wire Line
+ 3150 4400 3450 4400
+Wire Wire Line
+ 3150 3500 3450 3500
+Wire Wire Line
+ 3150 3600 3450 3600
+Wire Wire Line
+ 3150 3700 3450 3700
+Wire Wire Line
+ 2850 3800 3450 3800
+Wire Wire Line
+ 3350 4800 3450 4800
+Wire Wire Line
+ 3350 4700 3450 4700
+Wire Wire Line
+ 5550 2900 6150 2900
+Wire Wire Line
+ 5550 3000 6150 3000
+Wire Wire Line
+ 3050 2700 3450 2700
+Wire Wire Line
+ 5550 3100 6150 3100
+Wire Wire Line
+ 3050 2800 3450 2800
+Wire Wire Line
+ 5550 3200 6150 3200
+Wire Wire Line
+ 3050 3000 3450 3000
+Wire Wire Line
+ 3050 3100 3450 3100
+Wire Wire Line
+ 3050 2900 3450 2900
+Wire Wire Line
+ 3050 3200 3450 3200
+Wire Wire Line
+ 3050 3300 3450 3300
+Wire Wire Line
+ 3050 3400 3450 3400
+Wire Wire Line
+ 7200 2850 7500 2850
+Wire Wire Line
+ 7900 2850 8000 2850
+Wire Wire Line
+ 3350 5700 3450 5700
+Wire Wire Line
+ 3350 5900 3450 5900
+Wire Wire Line
+ 3350 5800 3450 5800
+Wire Wire Line
+ 5550 2600 6150 2600
+Wire Wire Line
+ 5550 2700 6150 2700
+Wire Wire Line
+ 5550 2500 6150 2500
+Wire Wire Line
+ 5550 2400 6150 2400
+Wire Wire Line
+ 5550 2300 6150 2300
+Wire Wire Line
+ 5550 2200 6150 2200
+Wire Wire Line
+ 5550 2100 6150 2100
+Wire Wire Line
+ 5550 2000 6150 2000
+Wire Wire Line
+ 8000 2150 8000 2250
+Wire Wire Line
+ 8000 2850 8000 2750
+Text HLabel 11250 7500 0 60 Output ~ 0
+BLANK-
+Wire Wire Line
+ 11250 7400 11900 7400
+Wire Wire Line
+ 11550 7200 11900 7200
+Wire Wire Line
+ 11550 7100 11900 7100
+Wire Wire Line
+ 11550 6800 11900 6800
+Wire Wire Line
+ 11550 6700 11900 6700
+Wire Wire Line
+ 11550 6600 11900 6600
+Wire Wire Line
+ 11550 6500 11900 6500
+Wire Wire Line
+ 11550 6400 11900 6400
+Wire Wire Line
+ 11550 6300 11900 6300
+Wire Wire Line
+ 11300 8300 11900 8300
+Text HLabel 11300 8300 0 60 Output ~ 0
+WRAM-
+Wire Wire Line
+ 5550 3900 5750 3900
+Wire Wire Line
+ 5550 3800 5750 3800
+Wire Wire Line
+ 5550 3700 5750 3700
+Wire Wire Line
+ 5550 4200 5750 4200
+Text HLabel 5750 3900 2 60 Output ~ 0
+RDCDA-
+Text HLabel 5750 3800 2 60 Output ~ 0
+WRCDA-
+Text HLabel 5750 3700 2 60 Output ~ 0
+RDCAD-
+Text HLabel 5750 4200 2 60 Output ~ 0
+WRCAD-
+Wire Wire Line
+ 11300 8200 11900 8200
+Wire Wire Line
+ 11300 8100 11900 8100
+Wire Wire Line
+ 11300 8000 11900 8000
+Wire Wire Line
+ 11300 7900 11900 7900
+Wire Wire Line
+ 11300 8600 11900 8600
+Wire Wire Line
+ 11300 8500 11900 8500
+Wire Wire Line
+ 11300 8400 11900 8400
+Wire Wire Line
+ 11300 8900 11900 8900
+Wire Wire Line
+ 11300 8800 11900 8800
+Wire Wire Line
+ 11300 8700 11900 8700
+Wire Wire Line
+ 14100 8900 14700 8900
+Wire Wire Line
+ 14100 8800 14700 8800
+Text HLabel 11300 8400 0 60 Output ~ 0
+RAS7-
+Text HLabel 11300 8500 0 60 Output ~ 0
+RAS6-
+Text HLabel 11300 8600 0 60 Output ~ 0
+RAS5-
+Text HLabel 11300 8700 0 60 Output ~ 0
+RAS4-
+Text HLabel 11300 8800 0 60 Output ~ 0
+RAS3-
+Text HLabel 11300 8900 0 60 Output ~ 0
+RAS2-
+Text HLabel 14700 8900 2 60 Output ~ 0
+RAS1-
+Text HLabel 14700 8800 2 60 Output ~ 0
+RAS0-
+Text HLabel 11300 8200 0 60 Output ~ 0
+CAS3-
+Text HLabel 11300 8100 0 60 Output ~ 0
+CAS2-
+Text HLabel 11300 8000 0 60 Output ~ 0
+CAS1-
+Text HLabel 11300 7900 0 60 Output ~ 0
+CAS0-
+Wire Wire Line
+ 14100 5000 14550 5000
+Wire Wire Line
+ 14100 4900 14550 4900
+Text HLabel 14550 4900 2 60 Input ~ 0
+RD-
+Text HLabel 14550 5000 2 60 Input ~ 0
+WR-
+Wire Wire Line
+ 11250 5000 11900 5000
+Wire Wire Line
+ 11300 7700 11900 7700
+Wire Wire Line
+ 14500 4300 14100 4300
+Wire Wire Line
+ 14500 4400 14100 4400
+Wire Wire Line
+ 14500 4500 14100 4500
+Wire Wire Line
+ 14500 4600 14100 4600
+Wire Wire Line
+ 11900 5600 11400 5600
+Wire Wire Line
+ 11900 5800 11400 5800
+Wire Wire Line
+ 11900 5700 11400 5700
+Wire Wire Line
+ 11900 5900 11400 5900
+Wire Wire Line
+ 11900 6000 11400 6000
+Wire Wire Line
+ 11900 6200 11550 6200
+Wire Wire Line
+ 11900 6100 11550 6100
+Text HLabel 15050 2000 2 60 Output ~ 0
+MXA[0..10]
+Wire Wire Line
+ 14100 6300 14600 6300
+Wire Wire Line
+ 14100 6200 14600 6200
+Wire Wire Line
+ 14100 6100 14600 6100
+Wire Wire Line
+ 14100 6000 14600 6000
+Wire Wire Line
+ 14100 5900 14600 5900
+Wire Wire Line
+ 14100 5500 14600 5500
+Wire Wire Line
+ 14100 5400 14600 5400
+Wire Wire Line
+ 14100 5300 14600 5300
+Wire Wire Line
+ 14100 5200 14600 5200
+Wire Wire Line
+ 14100 5100 14600 5100
+Text Label 14200 6200 0 60 ~ 0
+MXA10
+Text Label 14200 6100 0 60 ~ 0
+MXA9
+Text Label 14200 6000 0 60 ~ 0
+MXA8
+Text Label 14200 5900 0 60 ~ 0
+MXA7
+Text Label 14200 5800 0 60 ~ 0
+MXA6
+Text Label 14200 5600 0 60 ~ 0
+MXA5
+Text Label 14200 5500 0 60 ~ 0
+MXA4
+Text Label 14200 5400 0 60 ~ 0
+MXA3
+Text Label 14200 5300 0 60 ~ 0
+MXA2
+Text Label 14200 5200 0 60 ~ 0
+MXA1
+Text Label 14200 5100 0 60 ~ 0
+MXA0
+Wire Wire Line
+ 3100 10250 3100 10200
+Wire Wire Line
+ 2750 10150 2750 10250
+Wire Wire Line
+ 8100 5300 8200 5300
+Wire Wire Line
+ 7200 5300 7500 5300
+Wire Wire Line
+ 2550 7300 3350 7300
+Wire Wire Line
+ 2000 8850 2450 8850
+Text Label 2050 8850 0 60 ~ 0
+VOSC
+Text Label 3350 7300 2 60 ~ 0
+VOSC
+Wire Notes Line
+ 850 9650 7200 9650
+Wire Notes Line
+ 850 11150 7200 11150
+Wire Notes Line
+ 850 11150 850 9650
+Text Notes 1350 11050 0 60 ~ 0
+Decoupling
+Wire Notes Line
+ 1000 7000 5550 7000
+Wire Notes Line
+ 1000 9500 5550 9500
+Wire Notes Line
+ 1000 9500 1000 7000
+Text Notes 1100 9400 0 60 ~ 0
+OSCILLATOR generates sample clock for DAC and ADC
+$Comp
+L GND #GND065
+U 1 1 B3BF4EE3
+P 7400 6050
+F 0 "#GND065" H 7400 6150 60 0001 C CNN
+F 1 "GND" H 7400 5950 60 0000 C CNN
+F 2 "" H 7400 6050 60 0001 C CNN
+F 3 "" H 7400 6050 60 0001 C CNN
+ 1 7400 6050
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C49
+U 1 1 B3BF4EDE
+P 7400 5800
+F 0 "C49" H 7550 5900 50 0000 C CNN
+F 1 "22pF" H 7550 5700 50 0000 C CNN
+F 2 "Discret:C1" H 7400 5800 60 0001 C CNN
+F 3 "" H 7400 5800 60 0001 C CNN
+ 1 7400 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C50
+U 1 1 B3BF4EE8
+P 8200 5800
+F 0 "C50" H 8350 5900 50 0000 C CNN
+F 1 "22pF" H 8350 5700 50 0000 C CNN
+F 2 "Discret:C1" H 8200 5800 60 0001 C CNN
+F 3 "" H 8200 5800 60 0001 C CNN
+ 1 8200 5800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND066
+U 1 1 B3BF4EED
+P 8200 6050
+F 0 "#GND066" H 8200 6150 60 0001 C CNN
+F 1 "GND" H 8200 5950 60 0000 C CNN
+F 2 "" H 8200 6050 60 0001 C CNN
+F 3 "" H 8200 6050 60 0001 C CNN
+ 1 8200 6050
+ 1 0 0 -1
+$EndComp
+$Comp
+L CRYSTAL X1
+U 1 1 B3BF4ED4
+P 7800 5300
+F 0 "X1" H 7800 5450 60 0000 C CNN
+F 1 "10MHz" H 7800 5150 60 0000 C CNN
+F 2 "Discret:HC-18UV" H 7800 5300 60 0001 C CNN
+F 3 "" H 7800 5300 60 0001 C CNN
+ 1 7800 5300
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND067
+U 1 1 B9ED7ABA
+P 1250 10700
+F 0 "#GND067" H 1250 10800 60 0001 C CNN
+F 1 "GND" H 1250 10600 60 0001 C CNN
+F 2 "" H 1250 10700 60 0001 C CNN
+F 3 "" H 1250 10700 60 0001 C CNN
+ 1 1250 10700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND068
+U 1 1 B9ED7ABF
+P 2050 10700
+F 0 "#GND068" H 2050 10800 60 0001 C CNN
+F 1 "GND" H 2050 10600 60 0001 C CNN
+F 2 "" H 2050 10700 60 0001 C CNN
+F 3 "" H 2050 10700 60 0001 C CNN
+ 1 2050 10700
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R26
+U 1 1 B3BF4ED9
+P 7750 4950
+F 0 "R26" V 7830 4950 50 0000 C CNN
+F 1 "220K" V 7750 4950 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 7750 4950 60 0001 C CNN
+F 3 "" H 7750 4950 60 0001 C CNN
+ 1 7750 4950
+ 0 1 1 0
+$EndComp
+$Comp
+L C C17
+U 1 1 BF805547
+P 3500 10450
+F 0 "C17" H 3650 10550 50 0000 C CNN
+F 1 "100nF" H 3650 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3500 10450 60 0001 C CNN
+F 3 "" H 3500 10450 60 0001 C CNN
+ 1 3500 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C18
+U 1 1 BF80554C
+P 3850 10450
+F 0 "C18" H 4000 10550 50 0000 C CNN
+F 1 "100nF" H 4000 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3850 10450 60 0001 C CNN
+F 3 "" H 3850 10450 60 0001 C CNN
+ 1 3850 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C19
+U 1 1 BF805551
+P 3100 10450
+F 0 "C19" H 3250 10550 50 0000 C CNN
+F 1 "100nF" H 3250 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3100 10450 60 0001 C CNN
+F 3 "" H 3100 10450 60 0001 C CNN
+ 1 3100 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C20
+U 1 1 BF805556
+P 2750 10450
+F 0 "C20" H 2900 10550 50 0000 C CNN
+F 1 "100nF" H 2900 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2750 10450 60 0001 C CNN
+F 3 "" H 2750 10450 60 0001 C CNN
+ 1 2750 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND069
+U 1 1 BF805565
+P 2750 10750
+F 0 "#GND069" H 2750 10850 60 0001 C CNN
+F 1 "GND" H 2750 10650 60 0001 C CNN
+F 2 "" H 2750 10750 60 0001 C CNN
+F 3 "" H 2750 10750 60 0001 C CNN
+ 1 2750 10750
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C56
+U 1 1 B9ED7AB0
+P 1250 10450
+F 0 "C56" H 1450 10500 50 0000 C CNN
+F 1 "4.7uF" H 1450 10400 50 0000 C CNN
+F 2 "lib_smd:SM1812L" H 1250 10450 60 0001 C CNN
+F 3 "" H 1250 10450 60 0001 C CNN
+ 1 1250 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C57
+U 1 1 B9ED7AB5
+P 2050 10450
+F 0 "C57" H 2250 10500 50 0000 C CNN
+F 1 "4.7uF" H 2250 10400 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 2050 10450 60 0001 C CNN
+F 3 "" H 2050 10450 60 0001 C CNN
+ 1 2050 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND070
+U 1 1 228C46D3
+P 2700 7850
+F 0 "#GND070" H 2700 7950 60 0001 C CNN
+F 1 "GND" H 2700 7750 60 0001 C CNN
+F 2 "" H 2700 7850 60 0001 C CNN
+F 3 "" H 2700 7850 60 0001 C CNN
+ 1 2700 7850
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C63
+U 1 1 228C4700
+P 2700 7600
+F 0 "C63" H 2800 7750 50 0000 C CNN
+F 1 "47uF" H 2800 7450 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 2700 7600 60 0001 C CNN
+F 3 "" H 2700 7600 60 0001 C CNN
+ 1 2700 7600
+ 1 0 0 -1
+$EndComp
+$Comp
+L AV9173 U7
+U 1 1 2295D392
+P 3400 8550
+F 0 "U7" H 3570 9000 60 0000 C CNN
+F 1 "AV9173" H 3660 8100 60 0000 C CNN
+F 2 "lib_smd:SO8E" H 3400 8550 60 0001 C CNN
+F 3 "" H 3400 8550 60 0001 C CNN
+ 1 3400 8550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND071
+U 1 1 2295D397
+P 3350 9100
+F 0 "#GND071" H 3350 9200 60 0001 C CNN
+F 1 "GND" H 3350 9000 60 0001 C CNN
+F 2 "" H 3350 9100 60 0001 C CNN
+F 3 "" H 3350 9100 60 0001 C CNN
+ 1 3350 9100
+ 1 0 0 -1
+$EndComp
+Text HLabel 11250 5000 0 60 Output ~ 0
+CSYNC-OUT
+Text HLabel 14750 8500 2 60 Output ~ 0
+CADCLK
+Text HLabel 14750 8600 2 60 Output ~ 0
+CDACLK
+Text HLabel 14750 8700 2 60 Output ~ 0
+CLAMP
+Text HLabel 11300 7600 0 60 Input ~ 0
+CSYNCIN-
+Text Label 11350 4200 0 60 ~ 0
+CLK10MHz
+Text Label 1950 8450 0 60 ~ 0
+HDOUT
+Text Label 1750 8250 0 60 ~ 0
+HDREFOUT
+Text Label 4550 8450 0 60 ~ 0
+14MHZOUT
+Text Label 14200 7400 0 60 ~ 0
+14MHZOUT
+Text Label 11350 4700 0 60 ~ 0
+HDOUT
+Text Label 11350 4600 0 60 ~ 0
+HDREFOUT
+$Comp
+L VCC #VCC072
+U 1 1 4BF03699
+P 2050 10150
+F 0 "#VCC072" H 2050 10350 40 0001 C CNN
+F 1 "VCC" H 2050 10300 40 0000 C CNN
+F 2 "" H 2050 10150 60 0001 C CNN
+F 3 "" H 2050 10150 60 0001 C CNN
+ 1 2050 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #VCC073
+U 1 1 4BF0369A
+P 1250 10150
+F 0 "#VCC073" H 1250 10350 40 0001 C CNN
+F 1 "VCC" H 1250 10300 40 0000 C CNN
+F 2 "" H 1250 10150 60 0001 C CNN
+F 3 "" H 1250 10150 60 0001 C CNN
+ 1 1250 10150
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #VCC074
+U 1 1 4BF0369B
+P 11800 2800
+F 0 "#VCC074" H 11800 3000 40 0001 C CNN
+F 1 "VCC" H 11800 2950 40 0000 C CNN
+F 2 "" H 11800 2800 60 0001 C CNN
+F 3 "" H 11800 2800 60 0001 C CNN
+ 1 11800 2800
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #VCC075
+U 1 1 4BF0369C
+P 2750 10150
+F 0 "#VCC075" H 2750 10350 40 0001 C CNN
+F 1 "VCC" H 2750 10300 40 0000 C CNN
+F 2 "" H 2750 10150 60 0001 C CNN
+F 3 "" H 2750 10150 60 0001 C CNN
+ 1 2750 10150
+ 1 0 0 -1
+$EndComp
+Connection ~ 11800 2900
+Connection ~ 11800 3000
+Connection ~ 7400 5300
+Connection ~ 8200 5300
+Connection ~ 2700 7300
+Connection ~ 3100 10200
+Connection ~ 3500 10200
+Connection ~ 3850 10200
+Connection ~ 3100 10700
+Connection ~ 3500 10700
+Connection ~ 3850 10700
+Wire Wire Line
+ 14100 7400 14750 7400
+Wire Wire Line
+ 11800 2900 11900 2900
+Wire Wire Line
+ 11250 4700 11900 4700
+Wire Wire Line
+ 11800 3000 11900 3000
+Wire Wire Line
+ 11250 4600 11900 4600
+Wire Wire Line
+ 7300 4950 7500 4950
+Wire Wire Line
+ 8000 4950 8200 4950
+Wire Wire Line
+ 11800 3100 11900 3100
+Wire Wire Line
+ 14100 8500 14750 8500
+Wire Wire Line
+ 14100 8600 14750 8600
+Wire Wire Line
+ 1750 8250 2450 8250
+Wire Wire Line
+ 14100 4200 14500 4200
+Wire Wire Line
+ 1950 8450 2450 8450
+Wire Wire Line
+ 4350 8450 5250 8450
+Wire Wire Line
+ 1250 10150 1250 10250
+Wire Wire Line
+ 2050 10150 2050 10250
+Wire Wire Line
+ 2700 7300 2700 7400
+Wire Wire Line
+ 2350 8850 2350 8650
+Wire Wire Line
+ 2750 10650 2750 10750
+Wire Wire Line
+ 3100 10650 3100 10700
+Wire Wire Line
+ 3500 10200 3500 10250
+Wire Wire Line
+ 3500 10650 3500 10700
+Wire Wire Line
+ 8200 4950 8200 5600
+Wire Wire Line
+ 11800 2800 11800 3100
+Wire Wire Line
+ 3350 7300 3350 8050
+Wire Wire Line
+ 4550 10650 4550 10700
+Wire Wire Line
+ 4550 10200 4550 10250
+Wire Wire Line
+ 4200 10200 4200 10250
+Wire Wire Line
+ 4200 10650 4200 10700
+Connection ~ 4200 10700
+Connection ~ 4200 10200
+$Comp
+L C C22
+U 1 1 268A4E88
+P 4200 10450
+F 0 "C22" H 4350 10550 50 0000 C CNN
+F 1 "100nF" H 4350 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4200 10450 60 0001 C CNN
+F 3 "" H 4200 10450 60 0001 C CNN
+ 1 4200 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C21
+U 1 1 268A4E83
+P 4550 10450
+F 0 "C21" H 4700 10550 50 0000 C CNN
+F 1 "100nF" H 4700 10350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4550 10450 60 0001 C CNN
+F 3 "" H 4550 10450 60 0001 C CNN
+ 1 4550 10450
+ 1 0 0 -1
+$EndComp
+Wire Notes Line
+ 7200 11150 7200 9650
+Wire Wire Line
+ 2350 8650 2450 8650
+Connection ~ 2350 8850
+Wire Notes Line
+ 5550 9500 5550 7000
+$Comp
+L R R21
+U 1 1 525FE207
+P 6950 5300
+F 0 "R21" V 7030 5300 50 0000 C CNN
+F 1 "220" V 6950 5300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 6950 5300 60 0001 C CNN
+F 3 "" H 6950 5300 60 0001 C CNN
+ 1 6950 5300
+ 0 1 1 0
+$EndComp
+NoConn ~ 4350 8650
+Text Label 2400 2050 0 60 ~ 0
+PROG*
+Connection ~ 3200 1800
+Wire Wire Line
+ 2750 2050 2750 1800
+Wire Wire Line
+ 900 2050 2750 2050
+Wire Wire Line
+ 1000 1600 900 1600
+Wire Wire Line
+ 900 1600 900 2050
+Wire Wire Line
+ 1000 1800 900 1800
+Connection ~ 900 1800
+Connection ~ 2750 10200
+Connection ~ 2750 10700
+Wire Wire Line
+ 3850 10650 3850 10700
+Wire Wire Line
+ 3850 10250 3850 10200
+Wire Wire Line
+ 2050 10700 2050 10650
+Wire Wire Line
+ 1250 10700 1250 10650
+Wire Wire Line
+ 3350 9050 3350 9100
+Wire Wire Line
+ 2700 7850 2700 7800
+Wire Wire Line
+ 3000 7850 3000 7800
+Wire Wire Line
+ 950 1150 950 1200
+Wire Wire Line
+ 950 1200 1000 1200
+Wire Wire Line
+ 2800 1200 2800 1150
+Wire Wire Line
+ 3650 1150 3650 1100
+Wire Wire Line
+ 4350 1250 4300 1250
+Wire Wire Line
+ 4850 950 4850 1000
+Wire Wire Line
+ 8200 6000 8200 6050
+Wire Wire Line
+ 7400 6050 7400 6000
+Wire Wire Line
+ 7300 4950 7300 5300
+Connection ~ 7300 5300
+Wire Wire Line
+ 7400 5300 7400 5600
+$EndSCHEMATC
diff --git a/demos/video/libs/footprints.pretty/LRTDK.kicad_mod b/demos/video/libs/footprints.pretty/LRTDK.kicad_mod
new file mode 100644
index 0000000..bc2c042
--- /dev/null
+++ b/demos/video/libs/footprints.pretty/LRTDK.kicad_mod
@@ -0,0 +1,20 @@
+(module LRTDK (layer F.Cu) (tedit 54018D02)
+ (fp_text reference L6 (at -0.381 -5.08 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.254)))
+ )
+ (fp_text value 470nS (at 0.1 -8.3) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.254)))
+ )
+ (fp_line (start 12.7 -1.27) (end 12.7 0) (layer F.SilkS) (width 0.381))
+ (fp_line (start 7.62 -1.27) (end 7.62 0) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 0) (end -10.16 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -12.7 0) (end -12.7 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -15.24 -1.27) (end -15.24 -11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -15.24 -11.43) (end 15.24 -11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start 15.24 -11.43) (end 15.24 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -15.24 -1.27) (end 15.24 -1.27) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at -12.7 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole circle (at -10.16 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole circle (at 7.62 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at 12.7 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+)
diff --git a/demos/video/libs/footprints.pretty/PLCC68.kicad_mod b/demos/video/libs/footprints.pretty/PLCC68.kicad_mod
new file mode 100644
index 0000000..5883f3f
--- /dev/null
+++ b/demos/video/libs/footprints.pretty/PLCC68.kicad_mod
@@ -0,0 +1,92 @@
+(module PLCC68 (layer F.Cu) (tedit 200000)
+ (descr "Support Plcc 68 pins, pads ronds")
+ (tags PLCC)
+ (fp_text reference U*** (at 0 -2.54) (layer F.SilkS)
+ (effects (font (size 2.56794 1.50622) (thickness 0.3048)))
+ )
+ (fp_text value PLCC68 (at 0 2.54) (layer F.SilkS)
+ (effects (font (size 2.55778 1.48844) (thickness 0.3048)))
+ )
+ (fp_line (start -13.97 -13.97) (end 13.97 -13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start 13.97 -13.97) (end 13.97 13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start 13.97 13.97) (end -13.97 13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start -13.97 13.97) (end -13.97 -13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.62 -7.62) (end 7.62 -7.62) (layer F.SilkS) (width 0.381))
+ (fp_line (start 7.62 -7.62) (end 7.62 7.62) (layer F.SilkS) (width 0.381))
+ (fp_line (start 7.62 7.62) (end -5.08 7.62) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 7.62) (end -7.62 5.08) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.62 5.08) (end -7.62 -7.62) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -12.7 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at -10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole circle (at -12.7 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole circle (at -10.16 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole circle (at -12.7 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole circle (at -10.16 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole circle (at -12.7 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole circle (at -10.16 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole circle (at -12.7 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole circle (at -10.16 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole circle (at -10.16 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole circle (at -7.62 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 13 thru_hole circle (at -7.62 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 14 thru_hole circle (at -5.08 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 15 thru_hole circle (at -5.08 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole circle (at -2.54 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole circle (at -2.54 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole circle (at 0 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 19 thru_hole circle (at 0 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 20 thru_hole circle (at 2.54 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 21 thru_hole circle (at 2.54 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole circle (at 5.08 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole circle (at 5.08 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 24 thru_hole circle (at 7.62 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 25 thru_hole circle (at 7.62 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 26 thru_hole circle (at 10.16 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 27 thru_hole circle (at 12.7 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 28 thru_hole circle (at 10.16 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 29 thru_hole circle (at 12.7 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 30 thru_hole circle (at 10.16 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 31 thru_hole circle (at 12.7 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 32 thru_hole circle (at 10.16 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 33 thru_hole circle (at 12.7 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 34 thru_hole circle (at 10.16 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 35 thru_hole circle (at 12.7 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 36 thru_hole circle (at 10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 37 thru_hole circle (at 12.7 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 38 thru_hole circle (at 10.16 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 39 thru_hole circle (at 12.7 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 40 thru_hole circle (at 10.16 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 41 thru_hole circle (at 12.7 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 42 thru_hole circle (at 10.16 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 43 thru_hole circle (at 12.7 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 44 thru_hole circle (at 10.16 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 45 thru_hole circle (at 10.16 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 46 thru_hole circle (at 7.62 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 47 thru_hole circle (at 7.62 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 48 thru_hole circle (at 5.08 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 49 thru_hole circle (at 5.08 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 50 thru_hole circle (at 2.54 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 51 thru_hole circle (at 2.54 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 52 thru_hole circle (at 0 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 53 thru_hole circle (at 0 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 54 thru_hole circle (at -2.54 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 55 thru_hole circle (at -2.54 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 56 thru_hole circle (at -5.08 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 57 thru_hole circle (at -5.08 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 58 thru_hole circle (at -7.62 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 59 thru_hole circle (at -7.62 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 60 thru_hole circle (at -10.16 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 61 thru_hole circle (at -12.7 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 62 thru_hole circle (at -10.16 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 63 thru_hole circle (at -12.7 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 64 thru_hole circle (at -10.16 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 65 thru_hole circle (at -12.7 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 66 thru_hole circle (at -10.16 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 67 thru_hole circle (at -12.7 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 68 thru_hole circle (at -10.16 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (model support/supp_plcc68.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+)
diff --git a/demos/video/libs/footprints.pretty/PLCC84.kicad_mod b/demos/video/libs/footprints.pretty/PLCC84.kicad_mod
new file mode 100644
index 0000000..3e319da
--- /dev/null
+++ b/demos/video/libs/footprints.pretty/PLCC84.kicad_mod
@@ -0,0 +1,108 @@
+(module PLCC84 (layer F.Cu) (tedit 200000)
+ (descr "Support Plcc 84 pins, pads ronds")
+ (tags PLCC)
+ (fp_text reference U*** (at 0 -2.54) (layer F.SilkS)
+ (effects (font (size 3.33756 1.94818) (thickness 0.3048)))
+ )
+ (fp_text value PLCC84 (at 0 3.81) (layer F.SilkS)
+ (effects (font (size 2.90576 1.69672) (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 6.35) (end -7.62 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.62 10.16) (end 10.16 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 10.16) (end 10.16 -10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 -10.16) (end -10.16 -10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -16.51 -16.51) (end -16.51 16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start -16.51 16.51) (end 16.51 16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start 16.51 16.51) (end 16.51 -16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start 16.51 -16.51) (end -16.51 -16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 -10.16) (end -10.16 6.35) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -15.24 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole circle (at -12.7 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole circle (at -15.24 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole circle (at -12.7 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole circle (at -15.24 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole circle (at -12.7 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole circle (at -15.24 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 8 thru_hole circle (at -12.7 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole circle (at -15.24 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole circle (at -12.7 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole circle (at -15.24 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 12 thru_hole circle (at -12.7 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 13 thru_hole circle (at -12.7 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 14 thru_hole circle (at -10.16 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 15 thru_hole circle (at -10.16 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 16 thru_hole circle (at -7.62 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 17 thru_hole circle (at -7.62 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole circle (at -5.08 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 19 thru_hole circle (at -5.08 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 20 thru_hole circle (at -2.54 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 21 thru_hole circle (at -2.54 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 22 thru_hole circle (at 0 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 23 thru_hole circle (at 0 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 24 thru_hole circle (at 2.54 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 25 thru_hole circle (at 2.54 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 26 thru_hole circle (at 5.08 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 27 thru_hole circle (at 5.08 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 28 thru_hole circle (at 7.62 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 29 thru_hole circle (at 7.62 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 30 thru_hole circle (at 10.16 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 31 thru_hole circle (at 10.16 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 32 thru_hole circle (at 12.7 15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 33 thru_hole circle (at 15.24 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 34 thru_hole circle (at 12.7 12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 35 thru_hole circle (at 15.24 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 36 thru_hole circle (at 12.7 10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 37 thru_hole circle (at 15.24 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 38 thru_hole circle (at 12.7 7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 39 thru_hole circle (at 15.24 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 40 thru_hole circle (at 12.7 5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 41 thru_hole circle (at 15.24 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 42 thru_hole circle (at 12.7 2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 43 thru_hole circle (at 15.24 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 44 thru_hole circle (at 12.7 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 45 thru_hole circle (at 15.24 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 46 thru_hole circle (at 12.7 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 47 thru_hole circle (at 15.24 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 48 thru_hole circle (at 12.7 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 49 thru_hole circle (at 15.24 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 50 thru_hole circle (at 12.7 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 51 thru_hole circle (at 15.24 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 52 thru_hole circle (at 12.7 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 53 thru_hole circle (at 15.24 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 54 thru_hole circle (at 12.7 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 55 thru_hole circle (at 12.7 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 56 thru_hole circle (at 10.16 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 57 thru_hole circle (at 10.16 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 58 thru_hole circle (at 7.62 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 59 thru_hole circle (at 7.62 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 60 thru_hole circle (at 5.08 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 61 thru_hole circle (at 5.08 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 62 thru_hole circle (at 2.54 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 63 thru_hole circle (at 2.54 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 64 thru_hole circle (at 0 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 65 thru_hole circle (at 0 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 66 thru_hole circle (at -2.54 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 67 thru_hole circle (at -2.54 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 68 thru_hole circle (at -5.08 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 69 thru_hole circle (at -5.08 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 70 thru_hole circle (at -7.62 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 71 thru_hole circle (at -7.62 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 72 thru_hole circle (at -10.16 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 73 thru_hole circle (at -10.16 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 74 thru_hole circle (at -12.7 -15.24) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 75 thru_hole circle (at -15.24 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 76 thru_hole circle (at -12.7 -12.7) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 77 thru_hole circle (at -15.24 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 78 thru_hole circle (at -12.7 -10.16) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 79 thru_hole circle (at -15.24 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 80 thru_hole circle (at -12.7 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 81 thru_hole circle (at -15.24 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 82 thru_hole circle (at -12.7 -5.08) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 83 thru_hole circle (at -15.24 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 84 thru_hole circle (at -12.7 -2.54) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (model support/supp_plcc84.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+)
diff --git a/demos/video/libs/footprints.pretty/sim72.kicad_mod b/demos/video/libs/footprints.pretty/sim72.kicad_mod
new file mode 100644
index 0000000..affea47
--- /dev/null
+++ b/demos/video/libs/footprints.pretty/sim72.kicad_mod
@@ -0,0 +1,91 @@
+(module SIM72 (layer F.Cu) (tedit 200000)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (fp_text reference U19 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+)
diff --git a/demos/video/libs/video_schlib.lib b/demos/video/libs/video_schlib.lib
new file mode 100644
index 0000000..bee8d0b
--- /dev/null
+++ b/demos/video/libs/video_schlib.lib
@@ -0,0 +1,1720 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +12V
+#
+DEF +12V #PWR 0 0 N Y 1 F P
+F0 "#PWR" 0 -50 20 H I C CNN
+F1 "+12V" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +12V 1 0 0 0 U 20 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# +3.3V
+#
+DEF +3.3V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -40 30 H I C CNN
+F1 "+3.3V" 0 110 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS +3,3V
+DRAW
+X +3.3V 1 0 0 0 U 30 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# +5F
+#
+DEF +5F #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -50 20 H I C CNN
+F1 "+5F" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +5F 1 0 0 0 U 20 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# +5V
+#
+DEF +5V #PWR 0 40 Y Y 1 F P
+F0 "#PWR" 0 90 20 H I C CNN
+F1 "+5V" 0 90 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +5V 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 4 0 1 0 0 0 0 30 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# 24C16
+#
+DEF 24C16 U 0 30 Y Y 1 F N
+F0 "U" 150 350 60 H V C CNN
+F1 "24C16" 200 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 24C512
+DRAW
+X GND 4 0 -500 200 U 60 60 0 0 W
+X VCC 8 0 500 200 D 60 60 0 0 W
+S -400 -300 400 300 1 1 0 N
+X A0 1 -700 200 300 R 60 60 1 1 I
+X A1 2 -700 100 300 R 60 60 1 1 I
+X A2 3 -700 0 300 R 60 60 1 1 I
+X SDA 5 700 -200 300 L 60 60 1 1 B
+X SCL 6 700 -100 300 L 60 60 1 1 I
+X WP 7 700 100 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# 4C4001
+#
+DEF 4C4001 U 0 40 Y Y 1 F N
+F0 "U" 50 0 70 H V C CNN
+F1 "4C4001" 50 -300 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -350 750 350 -750 0 1 0 N
+X D0 1 650 700 300 L 60 60 1 1 T
+X D1 2 650 600 300 L 60 60 1 1 T
+X WR 3 -650 -600 300 R 60 60 1 1 I I
+X RAS 4 -650 -400 300 R 60 60 1 1 I I
+X A9 5 -650 -200 300 R 60 60 1 1 I
+X A0 6 -650 700 300 R 60 60 1 1 I
+X A1 7 -650 600 300 R 60 60 1 1 I
+X A2 8 -650 500 300 R 60 60 1 1 I
+X A3 9 -650 400 300 R 60 60 1 1 I
+X VCC 10 -250 750 0 U 60 60 1 1 W N
+X GND 20 -250 -750 0 U 60 60 1 1 W N
+X A4 11 -650 300 300 R 60 60 1 1 I
+X A5 12 -650 200 300 R 60 60 1 1 I
+X A6 13 -650 100 300 R 60 60 1 1 I
+X A7 14 -650 0 300 R 60 60 1 1 I
+X A8 15 -650 -100 300 R 60 60 1 1 I
+X OE 16 -650 -700 300 R 60 60 1 1 I I
+X CAS 17 -650 -500 300 R 60 60 1 1 I I
+X D2 18 650 500 300 L 60 60 1 1 T
+X D3 19 650 400 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# 74LS245
+#
+DEF 74LS245 U 0 10 Y Y 1 F N
+F0 "U" 100 575 50 H V L BNN
+F1 "74LS245" 50 -575 50 H V L TNN
+F2 "" 50 -650 30 H V L CNN
+F3 "" 100 575 30 H V C CNN
+ALIAS 74HC245
+DRAW
+X GND 10 0 -550 0 U 60 60 0 0 W N
+X VCC 20 0 550 0 D 60 60 0 0 W N
+S -400 550 400 -550 0 1 0 N
+P 3 0 1 0 50 100 0 -100 -100 -100 N
+P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
+X A->B 1 -700 -400 300 R 60 60 1 1 I
+X A0 2 -700 500 300 R 60 60 1 1 T
+X A1 3 -700 400 300 R 60 60 1 1 T
+X A2 4 -700 300 300 R 60 60 1 1 T
+X A3 5 -700 200 300 R 60 60 1 1 T
+X A4 6 -700 100 300 R 60 60 1 1 T
+X A5 7 -700 0 300 R 60 60 1 1 T
+X A6 8 -700 -100 300 R 60 60 1 1 T
+X A7 9 -700 -200 300 R 60 60 1 1 T
+X B7 11 700 -200 300 L 60 60 1 1 T
+X B6 12 700 -100 300 L 60 60 1 1 T
+X B5 13 700 0 300 L 60 60 1 1 T
+X B4 14 700 100 300 L 60 60 1 1 T
+X B3 15 700 200 300 L 60 60 1 1 T
+X B2 16 700 300 300 L 60 60 1 1 T
+X B1 17 700 400 300 L 60 60 1 1 T
+X B0 18 700 500 300 L 60 60 1 1 T
+X CE 19 -700 -500 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# AV9173
+#
+DEF AV9173 U 0 30 Y Y 1 F N
+F0 "U" 170 450 60 H V C CNN
+F1 "AV9173" 260 -450 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -650 350 650 -350 0 1 0 N
+X FSIGIN 1 -950 100 300 R 60 60 1 1 I
+X FREFIN 2 -950 300 300 R 60 60 1 1 I
+X GND 3 -50 -500 150 U 60 60 1 1 I
+X FS0 4 -950 -100 300 R 60 60 1 1 I
+X OE 5 -950 -300 300 R 60 60 1 1 I
+X CKKOUT 6 950 100 300 L 60 60 1 1 T
+X VCC 7 -50 500 150 D 60 60 1 1 I
+X CLK/2 8 950 -100 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# BNC
+#
+DEF BNC P 0 40 Y N 1 F N
+F0 "P" 10 120 60 H V C CNN
+F1 "BNC" 110 -60 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 20 0 1 8 N
+C 0 0 70 0 1 12 N
+X In 1 -150 0 130 R 40 40 1 1 P
+X Ext 2 0 -200 130 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# BT253
+#
+DEF BT253 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "BT253" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS BT254
+DRAW
+S -750 -2600 750 2600 0 1 0 N
+X VAA 1 -50 2900 300 D 60 60 1 1 I
+X GND 2 -150 -2900 300 U 60 60 1 1 I
+X GND 3 -50 -2900 300 U 60 60 1 1 I
+X SYNC0 4 -1050 300 300 R 60 60 1 1 I I
+X SYNC1 5 -1050 -200 300 R 60 60 1 1 I I
+X CEXT1 6 -1050 2400 300 R 60 60 1 1 O
+X CEXT2 7 -1050 2500 300 R 60 60 1 1 I
+X CSYNC 8 1050 2500 300 L 60 60 1 1 O I
+X D7 9 -1050 -1300 300 R 60 60 1 1 T
+X D6 10 -1050 -1200 300 R 60 60 1 1 T
+X RD 20 -1050 -1500 300 R 60 60 1 1 I I
+X B2 30 1050 -1800 300 L 60 60 1 1 T
+X RCLOCK 40 1050 600 300 L 60 60 1 1 I C
+X R6 50 1050 -400 300 L 60 60 1 1 T
+X GIN 60 1050 1700 300 L 60 60 1 1 I
+X GOUT 70 1050 1800 300 L 60 60 1 1 O
+X IOUT1 80 -1050 2000 300 R 60 60 1 1 P
+X D5 11 -1050 -1100 300 R 60 60 1 1 T
+X RREF- 21 -1050 1000 300 R 60 60 1 1 I
+X B1 31 1050 -1700 300 L 60 60 1 1 T
+X GND 41 50 -2900 300 U 60 60 1 1 I
+X R5 51 1050 -300 300 L 60 60 1 1 T
+X BLEVEL 61 1050 800 300 L 60 60 1 1 I
+X IOUT5 71 -1050 1600 300 R 60 60 1 1 P
+X RVID1 81 -1050 100 300 R 60 60 1 1 I
+X D4 12 -1050 -1000 300 R 60 60 1 1 T
+X GREF- 22 -1050 900 300 R 60 60 1 1 I
+X B0 32 1050 -1600 300 L 60 60 1 1 T
+X GND 42 150 -2900 300 U 60 60 1 1 I
+X R4 52 1050 -200 300 L 60 60 1 1 T
+X RIN 62 1050 2000 300 L 60 60 1 1 I
+X ROUT 72 1050 2100 300 L 60 60 1 1 O
+X IOUT0 82 -1050 2100 300 R 60 60 1 1 P
+X D3 13 -1050 -900 300 R 60 60 1 1 T
+X BREF- 23 -1050 800 300 R 60 60 1 1 I
+X G7 33 1050 -1400 300 L 60 60 1 1 T
+X VAA 43 50 2900 300 D 60 60 1 1 I
+X R3 53 1050 -100 300 L 60 60 1 1 T
+X GLEVEL 63 1050 900 300 L 60 60 1 1 I
+X IOUT4 73 -1050 1700 300 R 60 60 1 1 P
+X RVID0 83 -1050 600 300 R 60 60 1 1 I
+X D2 14 -1050 -800 300 R 60 60 1 1 T
+X WR 24 -1050 -1600 300 R 60 60 1 1 I I
+X G6 34 1050 -1300 300 L 60 60 1 1 T
+X VAA 44 150 2900 300 D 60 60 1 1 I
+X R2 54 1050 0 300 L 60 60 1 1 T
+X BREF+ 64 -1050 1200 300 R 60 60 1 1 I
+X BVID1 74 -1050 -100 300 R 60 60 1 1 I
+X VAA 84 -150 2900 300 D 60 60 1 1 I
+X D1 15 -1050 -700 300 R 60 60 1 1 T
+X B7 25 1050 -2300 300 L 60 60 1 1 T
+X G5 35 1050 -1200 300 L 60 60 1 1 T
+X G3 45 1050 -1000 300 L 60 60 1 1 T
+X R1 55 1050 100 300 L 60 60 1 1 T
+X GREF+ 65 -1050 1300 300 R 60 60 1 1 I
+X BVID0 75 -1050 400 300 R 60 60 1 1 I
+X D0 16 -1050 -600 300 R 60 60 1 1 T
+X B6 26 1050 -2200 300 L 60 60 1 1 T
+X G4 36 1050 -1100 300 L 60 60 1 1 T
+X G2 46 1050 -900 300 L 60 60 1 1 T
+X R0 56 1050 200 300 L 60 60 1 1 T
+X RREF+ 66 -1050 1400 300 R 60 60 1 1 I
+X IOUT3 76 -1050 1800 300 R 60 60 1 1 P
+X A0 17 -1050 -1800 300 R 60 60 1 1 I
+X B5 27 1050 -2100 300 L 60 60 1 1 T
+X ZERO 37 1050 1100 300 L 60 60 1 1 I
+X G1 47 1050 -800 300 L 60 60 1 1 T
+X OE 57 1050 -2500 300 L 60 60 1 1 I I
+X RLEVEL 67 1050 1000 300 L 60 60 1 1 I
+X GVID1 77 -1050 0 300 R 60 60 1 1 I
+X A1 18 -1050 -1900 300 R 60 60 1 1 I
+X B4 28 1050 -2000 300 L 60 60 1 1 T
+X BCLOCK 38 1050 400 300 L 60 60 1 1 I C
+X G0 48 1050 -700 300 L 60 60 1 1 T
+X BIN 58 1050 1400 300 L 60 60 1 1 I
+X BOUT 68 1050 1500 300 L 60 60 1 1 O
+X IOUT2 78 -1050 1900 300 R 60 60 1 1 P
+X A2 19 -1050 -2000 300 R 60 60 1 1 I
+X B3 29 1050 -1900 300 L 60 60 1 1 T
+X GCLOCK 39 1050 500 300 L 60 60 1 1 I C
+X R7 49 1050 -500 300 L 60 60 1 1 T
+X CLAMP 59 1050 1200 300 L 60 60 1 1 I
+X RSET 69 -1050 2300 300 R 60 60 1 1 I
+X GVID0 79 -1050 500 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BT473
+#
+DEF BT473 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "BT473" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -700 -2400 700 2400 0 1 0 N
+X VAA 1 -300 2700 300 D 60 60 1 1 I
+X VAA 2 -200 2700 300 D 60 60 1 1 I
+X GND 3 -200 -2700 300 U 60 60 1 1 I
+X GND 4 -100 -2700 300 U 60 60 1 1 I
+X S0 5 1000 -1500 300 L 60 60 1 1 I
+X S1 6 1000 -1600 300 L 60 60 1 1 I
+X BLANK 7 1000 -200 300 L 60 60 1 1 I I
+X SYNC 8 1000 0 300 L 60 60 1 1 I I
+X CLOCK 9 1000 -400 300 L 60 60 1 1 I C
+X OL0 10 -1000 -2000 300 R 60 60 1 1 I
+X D6 20 -1000 -1000 300 R 60 60 1 1 I
+X CR3 30 1000 -1100 300 L 60 60 1 1 O
+X IREF 40 1000 1200 300 L 60 60 1 1 I
+X R5 50 -1000 1800 300 R 60 60 1 1 I
+X G7 60 -1000 700 300 R 60 60 1 1 I
+X OL1 11 -1000 -2100 300 R 60 60 1 1 I
+X D7 21 -1000 -1100 300 R 60 60 1 1 I
+X GND 31 0 -2700 300 U 60 60 1 1 I
+X COMP 41 1000 800 300 L 60 60 1 1 I
+X R6 51 -1000 1700 300 R 60 60 1 1 I
+X B0 61 -1000 500 300 R 60 60 1 1 I
+X OL2 12 -1000 -2200 300 R 60 60 1 1 I
+X WR 22 -1000 -1700 300 R 60 60 1 1 I I
+X GND 32 100 -2700 300 U 60 60 1 1 I
+X OPA 42 1000 600 300 L 60 60 1 1 O
+X R7 52 -1000 1600 300 R 60 60 1 1 I
+X B1 62 -1000 400 300 R 60 60 1 1 I
+X OL3 13 -1000 -2300 300 R 60 60 1 1 I
+X RD 23 -1000 -1800 300 R 60 60 1 1 I I
+X VAA 33 -100 2700 300 D 60 60 1 1 I
+X VREF 43 1000 1000 300 L 60 60 1 1 I
+X G0 53 -1000 1400 300 R 60 60 1 1 I
+X B2 63 -1000 300 300 R 60 60 1 1 I
+X D0 14 -1000 -400 300 R 60 60 1 1 I
+X RS0 24 -1000 -1300 300 R 60 60 1 1 I
+X VAA 34 0 2700 300 D 60 60 1 1 I
+X VREFOUT 44 1000 400 300 L 60 60 1 1 O
+X G1 54 -1000 1300 300 R 60 60 1 1 I
+X B3 64 -1000 200 300 R 60 60 1 1 I
+X D1 15 -1000 -500 300 R 60 60 1 1 I
+X RS1 25 -1000 -1400 300 R 60 60 1 1 I
+X VAA 35 100 2700 300 D 60 60 1 1 I
+X R0 45 -1000 2300 300 R 60 60 1 1 I
+X G2 55 -1000 1200 300 R 60 60 1 1 I
+X B4 65 -1000 100 300 R 60 60 1 1 I
+X D2 16 -1000 -600 300 R 60 60 1 1 I
+X RS2 26 -1000 -1500 300 R 60 60 1 1 I
+X VAA 36 200 2700 300 D 60 60 1 1 I
+X R1 46 -1000 2200 300 R 60 60 1 1 I
+X G3 56 -1000 1100 300 R 60 60 1 1 I
+X B5 66 -1000 0 300 R 60 60 1 1 I
+X D3 17 -1000 -700 300 R 60 60 1 1 I
+X CR0 27 1000 -800 300 L 60 60 1 1 O
+X RED 37 1000 2000 300 L 60 60 1 1 O
+X R2 47 -1000 2100 300 R 60 60 1 1 I
+X G4 57 -1000 1000 300 R 60 60 1 1 I
+X B6 67 -1000 -100 300 R 60 60 1 1 I
+X D4 18 -1000 -800 300 R 60 60 1 1 I
+X CR1 28 1000 -900 300 L 60 60 1 1 O
+X GRE 38 1000 1800 300 L 60 60 1 1 O
+X R3 48 -1000 2000 300 R 60 60 1 1 I
+X G5 58 -1000 900 300 R 60 60 1 1 I
+X B7 68 -1000 -200 300 R 60 60 1 1 I
+X D5 19 -1000 -900 300 R 60 60 1 1 I
+X CR2 29 1000 -1000 300 L 60 60 1 1 O
+X BLU 39 1000 1600 300 L 60 60 1 1 O
+X R4 49 -1000 1900 300 R 60 60 1 1 I
+X G6 59 -1000 800 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BT812
+#
+DEF BT812 U 0 30 Y Y 1 F N
+F0 "U" 1870 3350 60 H V C CNN
+F1 "BT812" 1230 -3350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -1750 -3300 1750 3300 0 1 0 N
+X VAA 1 -650 3600 300 D 60 60 1 1 I
+X VAA 2 -550 3600 300 D 60 60 1 1 I
+X YREF- 3 -2050 -100 300 R 60 60 1 1 I
+X VIN_Y/COMP. 4 2050 -300 300 L 60 60 1 1 I
+X GNDA 5 -650 -3600 300 U 60 60 1 1 I
+X OUT_Y 6 2050 0 300 L 60 60 1 1 O
+X YLEVEL 7 -2050 100 300 R 60 60 1 1 I
+X GND 30 -1550 -3600 300 U 60 60 1 1 I
+X VAA 40 -350 3600 300 D 60 60 1 1 I
+X B5 50 2050 600 300 L 60 60 1 1 T
+X R5 60 2050 2400 300 L 60 60 1 1 T
+X G4 70 2050 1600 300 L 60 60 1 1 T
+X VAA 80 250 3600 300 D 60 60 1 1 I
+X TCLK 90 -2050 2000 300 R 60 60 1 1 I
+X VCC 31 -1650 3600 300 D 60 60 1 1 I
+X VAA 41 -250 3600 300 D 60 60 1 1 I
+X B4 51 2050 700 300 L 60 60 1 1 T
+X R4 61 2050 2500 300 L 60 60 1 1 T
+X G3 71 2050 1700 300 L 60 60 1 1 T
+X VAA 81 350 3600 300 D 60 60 1 1 I
+X VCC 91 -1250 3600 300 D 60 60 1 1 P
+X ACTIVE 32 2050 -1800 300 L 60 60 1 1 O
+X VAA 42 -150 3600 300 D 60 60 1 1 I
+X B3 52 2050 800 300 L 60 60 1 1 T
+X R3 62 2050 2600 300 L 60 60 1 1 T
+X G2 72 2050 1800 300 L 60 60 1 1 T
+X VAA 82 450 3600 300 D 60 60 1 1 I
+X D0 92 -2050 -1200 300 R 60 60 1 1 T
+X VACTIVE 33 2050 -1700 300 L 60 60 1 1 O I
+X VAA 43 -50 3600 300 D 60 60 1 1 I
+X B2 53 2050 900 300 L 60 60 1 1 T
+X R2 63 2050 2700 300 L 60 60 1 1 T
+X G1 73 2050 1900 300 L 60 60 1 1 T
+X WR 83 -2050 -2500 300 R 60 60 1 1 I I
+X D1 93 -2050 -1300 300 R 60 60 1 1 T
+X VRESET 34 2050 -1500 300 L 60 60 1 1 O I
+X GND 44 -1450 -3600 300 U 60 60 1 1 I
+X B1 54 2050 1000 300 L 60 60 1 1 T
+X R1 64 2050 2800 300 L 60 60 1 1 T
+X G0 74 2050 2000 300 L 60 60 1 1 T
+X RS0 84 -2050 -2100 300 R 60 60 1 1 I
+X D2 94 -2050 -1400 300 R 60 60 1 1 T
+X FIELD_1 25 2050 -2100 300 L 60 60 1 1 B
+X HACTIVE 35 2050 -1600 300 L 60 60 1 1 O I
+X VCC 45 -1550 3600 300 D 60 60 1 1 I
+X B0 55 2050 1100 300 L 60 60 1 1 T
+X R0 65 2050 2900 300 L 60 60 1 1 T
+X GND 75 -1150 -3600 300 U 60 60 1 1 I
+X RS1 85 -2050 -2200 300 R 60 60 1 1 I
+X D3 95 -2050 -1500 300 R 60 60 1 1 T
+X GND 16 -1650 -3600 300 U 60 60 1 1 I
+X FIELD_0 26 2050 -2000 300 L 60 60 1 1 B
+X HRESET 36 2050 -1400 300 L 60 60 1 1 O I
+X VTU_EN 46 -2050 2300 300 R 60 60 1 1 I I
+X GND 56 -1350 -3600 300 U 60 60 1 1 I
+X GND 66 -1250 -3600 300 U 60 60 1 1 I
+X VCC 76 -1350 3600 300 D 60 60 1 1 I
+X RD 86 -2050 -2400 300 R 60 60 1 1 I I
+X D4 96 -2050 -1600 300 R 60 60 1 1 T
+X FIELD_2 27 2050 -2200 300 L 60 60 1 1 O
+X SERROR 37 2050 -1100 300 L 60 60 1 1 O
+X PIXEL_EN 47 -2050 2200 300 R 60 60 1 1 I I
+X VCC 57 -1450 3600 300 D 60 60 1 1 I
+X G7 67 2050 1300 300 L 60 60 1 1 T
+X RESET 87 -2050 -2700 300 R 60 60 1 1 I I
+X D5 97 -2050 -1700 300 R 60 60 1 1 T
+X CBFLAG 28 2050 -1000 300 L 60 60 1 1 O
+X CAPTURE 38 2050 -800 300 L 60 60 1 1 O
+X B7 48 2050 400 300 L 60 60 1 1 T
+X R7 58 2050 2200 300 L 60 60 1 1 T
+X G6 68 2050 1400 300 L 60 60 1 1 T
+X VAA 78 50 3600 300 D 60 60 1 1 I
+X TDI 88 -2050 1800 300 R 60 60 1 1 I
+X GND 98 -1050 -3600 300 U 60 60 1 1 I
+X VALID 29 2050 -900 300 L 60 60 1 1 O
+X VAA 39 -450 3600 300 D 60 60 1 1 I
+X B6 49 2050 500 300 L 60 60 1 1 T
+X R6 59 2050 2300 300 L 60 60 1 1 T
+X G5 69 2050 1500 300 L 60 60 1 1 T
+X VAA 79 150 3600 300 D 60 60 1 1 I
+X TMS 89 -2050 1900 300 R 60 60 1 1 I
+X D6 99 -2050 -1800 300 R 60 60 1 1 T
+X D7 100 -2050 -1900 300 R 60 60 1 1 T
+X N/C 110 2050 -2900 300 L 60 60 1 1 I
+X VAA 120 650 3600 300 D 60 60 1 1 I
+X GNDA 130 -150 -3600 300 U 60 60 1 1 I
+X SYNC_DET 140 -2050 300 300 R 60 60 1 1 I
+X VID3_Y 150 -2050 600 300 R 60 60 1 1 I
+X VAA 160 1650 3600 300 D 60 60 1 1 I
+X TDO 101 -2050 1700 300 R 60 60 1 1 O
+X GND 111 -850 -3600 300 U 60 60 1 1 I
+X VAA 121 750 3600 300 D 60 60 1 1 I
+X VID3_C 131 -2050 500 300 R 60 60 1 1 I
+X VAA 141 1150 3600 300 D 60 60 1 1 I
+X GNDA 151 650 -3600 300 U 60 60 1 1 I
+X VCC 102 -1150 3600 300 D 60 60 1 1 I
+X VCC 112 -1050 3600 300 D 60 60 1 1 I
+X VAA 122 850 3600 300 D 60 60 1 1 I
+X VAA 132 1050 3600 300 D 60 60 1 1 I
+X VAA 142 1250 3600 300 D 60 60 1 1 I
+X VID2_Y 152 -2050 900 300 R 60 60 1 1 I
+X GND 103 -950 -3600 300 U 60 60 1 1 I
+X REFOUT 113 -2050 -800 300 R 60 60 1 1 O
+X VAA 123 950 3600 300 D 60 60 1 1 P
+X GNDA 143 350 -3600 300 U 60 60 1 1 I
+X GNDA 153 750 -3600 300 U 60 60 1 1 I
+X CLKX1 104 2050 -2400 300 L 60 60 1 1 O
+X CLEVEL 114 -2050 -300 300 R 60 60 1 1 I
+X GNDA 124 -450 -3600 300 U 60 60 1 1 I
+X GNDA 134 -50 -3600 300 U 60 60 1 1 I
+X YREF+ 144 -2050 0 300 R 60 60 1 1 I
+X VID1_Y 154 -2050 1200 300 R 60 60 1 1 I
+X CLKX2 105 2050 -2500 300 L 60 60 1 1 O
+X OUT_C 115 2050 -100 300 L 60 60 1 1 O
+X VID0_C 125 -2050 1400 300 R 60 60 1 1 I
+X R/2 135 -2050 -700 300 R 60 60 1 1 I
+X GNDA 145 450 -3600 300 U 60 60 1 1 I
+X GNDA 155 850 -3600 300 U 60 60 1 1 I
+X XTAL2_IN 106 -2050 2600 300 R 60 60 1 1 I
+X GNDA 116 -550 -3600 300 U 60 60 1 1 I
+X GNDA 126 -350 -3600 300 U 60 60 1 1 I
+X GNDA 136 50 -3600 300 U 60 60 1 1 I
+X VID0_Y 156 -2050 1500 300 R 60 60 1 1 I
+X XTAL2_OUT 107 -2050 2500 300 R 60 60 1 1 O
+X VIN_C 117 2050 -400 300 L 60 60 1 1 I
+X VID1_C 127 -2050 1100 300 R 60 60 1 1 I
+X CREF+ 137 -2050 -400 300 R 60 60 1 1 I
+X GNDA 147 550 -3600 300 U 60 60 1 1 I
+X GNDA 157 950 -3600 300 U 60 60 1 1 I
+X XTAL1_IN 108 -2050 2900 300 R 60 60 1 1 I
+X CREF- 118 -2050 -500 300 R 60 60 1 1 I
+X GNDA 128 -250 -3600 300 U 60 60 1 1 I
+X GNDA 138 150 -3600 300 U 60 60 1 1 I
+X VAA 158 1450 3600 300 D 60 60 1 1 I
+X XTAL1_OUT 109 -2050 2800 300 R 60 60 1 1 O
+X VAA 119 550 3600 300 D 60 60 1 1 I
+X VID2_C 129 -2050 800 300 R 60 60 1 1 I
+X GNDA 139 250 -3600 300 U 60 60 1 1 I
+X VAA 149 1350 3600 300 D 60 60 1 1 I
+X VAA 159 1550 3600 300 D 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_5
+#
+DEF CONN_5 P 0 40 Y Y 1 F N
+F0 "P" -50 0 50 V V C CNN
+F1 "CONN_5" 50 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 250 100 -250 0 1 0 f
+X ~ 1 -400 200 300 R 60 60 1 1 P I
+X ~ 2 -400 100 300 R 60 60 1 1 P I
+X ~ 3 -400 0 300 R 60 60 1 1 P I
+X ~ 4 -400 -100 300 R 60 60 1 1 P I
+X ~ 5 -400 -200 300 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CTRIM
+#
+DEF CTRIM C 0 10 Y Y 1 F N
+F0 "C" 130 -80 50 H V C CNN
+F1 "CTRIM" 150 -160 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 12 -100 -30 100 -30 N
+P 2 0 1 12 -100 30 100 30 N
+P 2 0 1 12 -90 -90 75 75 N
+P 3 0 1 0 50 100 100 100 100 50 F
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LIGNE_A_RETARD
+#
+DEF LIGNE_A_RETARD L 0 40 Y N 1 F N
+F0 "L" 0 100 70 H V C CNN
+F1 "LIGNE_A_RETARD" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 899 1 0 1 0 N 0 -100 50 -150
+A 0 -150 50 -1 -899 0 1 0 N 50 -150 0 -199
+A 0 -50 50 899 1 0 1 0 N 0 0 50 -50
+A 0 -50 50 -1 -899 0 1 0 N 50 -50 0 -99
+A 0 50 50 899 1 0 1 0 N 0 100 50 50
+A 0 50 50 -1 -899 0 1 0 N 50 50 0 1
+A 0 150 50 899 1 0 1 0 N 0 200 50 150
+A 0 150 50 -1 -899 0 1 0 N 50 150 0 101
+P 2 0 1 0 -100 200 -100 -200 N
+X 1 1 0 300 100 D 60 60 1 1 P
+X 2 2 0 -300 100 U 60 60 1 1 P
+X COMMUN 3 -200 0 100 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NPN
+#
+DEF NPN Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 50 H V R CNN
+F1 "NPN" 0 150 50 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PCI_CONUNIV
+#
+DEF PCI_CONUNIV J 0 30 Y Y 1 F N
+F0 "J" 0 3200 60 H V C CNN
+F1 "PCI_CONUNIV" 0 -3200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS BUSPCI-5V
+DRAW
+S -750 3150 750 -3150 0 1 0 N
+X TRST# A1 1100 3050 350 L 60 60 1 1 O I
+X -12V B1 -1100 3050 350 R 60 60 1 1 W
+X +12V A2 1100 2950 350 L 60 60 1 1 W
+X TCK B2 -1100 2950 350 R 60 60 1 1 O
+X TMS A3 1100 2850 350 L 60 60 1 1 O
+X GND B3 -1100 2850 350 R 60 60 1 1 I
+X TDI A4 1100 2750 350 L 60 60 1 1 O
+X TDO B4 -1100 2750 350 R 60 60 1 1 I
+X +5V A5 1100 2650 350 L 60 60 1 1 W
+X +5V B5 -1100 2650 350 R 60 60 1 1 W
+X INTA# A6 1100 2550 350 L 60 60 1 1 I I
+X +5V B6 -1100 2550 350 R 60 60 1 1 W
+X INTC# A7 1100 2450 350 L 60 60 1 1 I I
+X INTB# B7 -1100 2450 350 R 60 60 1 1 I I
+X +5V A8 1100 2350 350 L 60 60 1 1 W
+X INTD# B8 -1100 2350 350 R 60 60 1 1 I I
+X RESERVED A9 1100 2250 350 L 60 60 1 1 P
+X PRSNT1# B9 -1100 2250 350 R 60 60 1 1 I I
+X VIO A10 1100 2150 350 L 60 60 1 1 W
+X RESERVED B10 -1100 2150 350 R 60 60 1 1 P
+X AD[30] A20 1100 1150 350 L 60 60 1 1 B
+X AD[31] B20 -1100 1150 350 R 60 60 1 1 B
+X GND A30 1100 150 350 L 60 60 1 1 W
+X AD[19] B30 -1100 150 350 R 60 60 1 1 B
+X RESERVED A40 1100 -850 350 L 60 60 1 1 B
+X PERR# B40 -1100 -850 350 R 60 60 1 1 B I
+X REQ64# A60 1100 -2850 350 L 60 60 1 1 B I
+X ACK64# B60 -1100 -2850 350 R 60 60 1 1 B I
+X RESERVED A11 1100 2050 350 L 60 60 1 1 P
+X PRSNT2# B11 -1100 2050 350 R 60 60 1 1 I I
+X +3.3V A21 1100 1050 350 L 60 60 1 1 W
+X AD[29] B21 -1100 1050 350 R 60 60 1 1 B
+X AD[18] A31 1100 50 350 L 60 60 1 1 B
+X +3.3V B31 -1100 50 350 R 60 60 1 1 W
+X RESERVED A41 1100 -950 350 L 60 60 1 1 B
+X +3.3V B41 -1100 -950 350 R 60 60 1 1 W
+X +5V A61 1100 -2950 350 L 60 60 1 1 W
+X +5V B61 -1100 -2950 350 R 60 60 1 1 W
+X AD[28] A22 1100 950 350 L 60 60 1 1 B
+X GND B22 -1100 950 350 R 60 60 1 1 W
+X AD[16] A32 1100 -50 350 L 60 60 1 1 B
+X AD[17] B32 -1100 -50 350 R 60 60 1 1 B
+X GND A42 1100 -1050 350 L 60 60 1 1 W
+X SERR# B42 -1100 -1050 350 R 60 60 1 1 I I
+X C/BE#[0] A52 1100 -2050 350 L 60 60 1 1 B I
+X AD[08] B52 -1100 -2050 350 R 60 60 1 1 B
+X +5V A62 1100 -3050 350 L 60 60 1 1 W
+X +5V B62 -1100 -3050 350 R 60 60 1 1 W
+X AD[26] A23 1100 850 350 L 60 60 1 1 B
+X AD[27] B23 -1100 850 350 R 60 60 1 1 B
+X +3.3V A33 1100 -150 350 L 60 60 1 1 W
+X C/BE#[2] B33 -1100 -150 350 R 60 60 1 1 B I
+X PAR A43 1100 -1150 350 L 60 60 1 1 B
+X +3.3V B43 -1100 -1150 350 R 60 60 1 1 W
+X +3.3V A53 1100 -2150 350 L 60 60 1 1 W
+X AD[07] B53 -1100 -2150 350 R 60 60 1 1 B
+X 3.3VAUX A14 1100 1750 350 L 60 60 1 1 P
+X RESERVED B14 -1100 1750 350 R 60 60 1 1 P
+X GND A24 1100 750 350 L 60 60 1 1 W
+X AD[25] B24 -1100 750 350 R 60 60 1 1 B
+X FRAME# A34 1100 -250 350 L 60 60 1 1 B I
+X GND B34 -1100 -250 350 R 60 60 1 1 W
+X AD[15] A44 1100 -1250 350 L 60 60 1 1 B
+X C/BE#[1] B44 -1100 -1250 350 R 60 60 1 1 B I
+X AD[06] A54 1100 -2250 350 L 60 60 1 1 B
+X +3.3V B54 -1100 -2250 350 R 60 60 1 1 I
+X RST# A15 1100 1650 350 L 60 60 1 1 O I
+X GND B15 -1100 1650 350 R 60 60 1 1 W
+X AD[24] A25 1100 650 350 L 60 60 1 1 B
+X +3.3V B25 -1100 650 350 R 60 60 1 1 W
+X GND A35 1100 -350 350 L 60 60 1 1 W
+X IRDY# B35 -1100 -350 350 R 60 60 1 1 B I
+X +3.3V A45 1100 -1350 350 L 60 60 1 1 W
+X AD[14] B45 -1100 -1350 350 R 60 60 1 1 B
+X AD[04] A55 1100 -2350 350 L 60 60 1 1 B
+X AD[05] B55 -1100 -2350 350 R 60 60 1 1 B
+X VIO A16 1100 1550 350 L 60 60 1 1 W
+X CLK B16 -1100 1550 350 R 60 60 1 1 O
+X IDSEL A26 1100 550 350 L 60 60 1 1 O
+X C/BE#[3] B26 -1100 550 350 R 60 60 1 1 B
+X TRDY# A36 1100 -450 350 L 60 60 1 1 B I
+X +3.3V B36 -1100 -450 350 R 60 60 1 1 W
+X AD[13] A46 1100 -1450 350 L 60 60 1 1 B
+X GND B46 -1100 -1450 350 R 60 60 1 1 W
+X GND A56 1100 -2450 350 L 60 60 1 1 W
+X AD[03] B56 -1100 -2450 350 R 60 60 1 1 B
+X GNT# A17 1100 1450 350 L 60 60 1 1 B I
+X GND B17 -1100 1450 350 R 60 60 1 1 W
+X +3.3V A27 1100 450 350 L 60 60 1 1 W
+X AD[23] B27 -1100 450 350 R 60 60 1 1 B
+X GND A37 1100 -550 350 L 60 60 1 1 W
+X DEVSEL# B37 -1100 -550 350 R 60 60 1 1 B I
+X AD[11] A47 1100 -1550 350 L 60 60 1 1 B
+X AD[12] B47 -1100 -1550 350 R 60 60 1 1 B
+X AD[02] A57 1100 -2550 350 L 60 60 1 1 B
+X GND B57 -1100 -2550 350 R 60 60 1 1 W
+X GND A18 1100 1350 350 L 60 60 1 1 W
+X REQ# B18 -1100 1350 350 R 60 60 1 1 B I
+X AD[22] A28 1100 350 350 L 60 60 1 1 B
+X GND B28 -1100 350 350 R 60 60 1 1 W
+X STOP# A38 1100 -650 350 L 60 60 1 1 B I
+X GND B38 -1100 -650 350 R 60 60 1 1 W
+X GND A48 1100 -1650 350 L 60 60 1 1 W
+X AD[10] B48 -1100 -1650 350 R 60 60 1 1 B
+X AD[00] A58 1100 -2650 350 L 60 60 1 1 B
+X AD[01] B58 -1100 -2650 350 R 60 60 1 1 B
+X PME# A19 1100 1250 350 L 60 60 1 1 P
+X VIO B19 -1100 1250 350 R 60 60 1 1 W
+X AD[20] A29 1100 250 350 L 60 60 1 1 B
+X AD[21] B29 -1100 250 350 R 60 60 1 1 B
+X +3.3V A39 1100 -750 350 L 60 60 1 1 W
+X LOCK# B39 -1100 -750 350 R 60 60 1 1 B I
+X AD[09] A49 1100 -1750 350 L 60 60 1 1 B
+X M66EN B49 -1100 -1750 350 R 60 60 1 1 W
+X VIO A59 1100 -2750 350 L 60 60 1 1 W
+X VIO B59 -1100 -2750 350 R 60 60 1 1 W
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# RR8
+#
+DEF RR8 RR 0 40 Y N 1 F N
+F0 "RR" 50 550 70 H V C CNN
+F1 "RR8" 30 0 70 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 -400 -50 500 50 500 100 450 100 -400 -50 -400 N
+X COM 1 -350 450 300 R 60 60 1 1 P I
+X 2 2 -350 350 300 R 60 60 1 1 P I
+X 3 3 -350 250 300 R 60 60 1 1 P I
+X 4 4 -350 150 300 R 60 60 1 1 P I
+X 5 5 -350 50 300 R 60 60 1 1 P I
+X 6 6 -350 -50 300 R 60 60 1 1 P I
+X 7 7 -350 -150 300 R 60 60 1 1 P I
+X 8 8 -350 -250 300 R 60 60 1 1 P I
+X 9 9 -350 -350 300 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# S5933_PQ160
+#
+DEF S5933_PQ160 U 0 30 Y Y 1 F N
+F0 "U" 0 2250 60 H V C CNN
+F1 "S5933_PQ160" 450 -4150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VSS 10 -150 -4100 0 U 60 60 0 0 W N
+X VSS 30 -50 -4100 0 U 60 60 0 0 W N
+X VSS 50 150 -4100 0 U 60 60 0 0 W N
+X VSS 70 50 -4100 0 U 60 60 0 0 W N
+X VSS 90 250 -4100 0 U 60 60 0 0 W N
+X VCC 11 -300 4150 0 D 60 60 0 0 W N
+X VCC 31 -200 4150 0 D 60 60 0 0 W N
+X VCC 51 -100 4150 0 D 60 60 0 0 W N
+X VCC 71 0 4150 0 D 60 60 0 0 W N
+X VCC 91 100 4150 0 D 60 60 0 0 W N
+X VSS 110 350 -4100 0 U 60 60 0 0 W N
+X VSS 130 450 -4100 0 U 60 60 0 0 W N
+X VSS 150 -250 -4100 0 U 60 60 0 0 W N
+X VCC 111 200 4150 0 D 60 60 0 0 W N
+X VCC 131 300 4150 0 D 60 60 0 0 W N
+X VCC 151 400 4150 0 D 60 60 0 0 W N
+S -850 4100 850 -4100 0 1 0 N
+X EQ0 1 -1150 -3150 300 R 60 60 1 1 B
+X AD23 2 -1150 1750 300 R 60 60 1 1 B
+X AD22 3 -1150 1850 300 R 60 60 1 1 B
+X AD21 4 -1150 1950 300 R 60 60 1 1 B
+X DQ31 5 1150 950 300 L 60 60 1 1 B
+X AD20 6 -1150 2050 300 R 60 60 1 1 B
+X AD19 7 -1150 2150 300 R 60 60 1 1 B
+X AD18 8 -1150 2250 300 R 60 60 1 1 B
+X EQ1 9 -1150 -3250 300 R 60 60 1 1 B
+X DEVSEL# 20 -1150 -650 300 R 60 60 1 1 B
+X AD9 40 -1150 3150 300 R 60 60 1 1 B
+X BE3# 60 1150 -1150 300 L 60 60 1 1 I
+X DQ12 80 1150 2850 300 L 60 60 1 1 B
+X EQ3 21 -1150 -3450 300 R 60 60 1 1 B
+X EQ6/AMREN 41 -1150 -3750 300 R 60 60 1 1 B
+X EA1 61 -1150 -1650 300 R 60 60 1 1 B
+X EA4 81 -1150 -1950 300 R 60 60 1 1 B
+X AD17 12 -1150 2350 300 R 60 60 1 1 B
+X STOP# 22 -1150 -250 300 R 60 60 1 1 B
+X AD15 32 -1150 2550 300 R 60 60 1 1 B
+X AD8 42 -1150 3250 300 R 60 60 1 1 B
+X AD3 52 -1150 3750 300 R 60 60 1 1 B
+X BE2# 62 1150 -1050 300 L 60 60 1 1 I
+X RD# 72 1150 -1550 300 L 60 60 1 1 I
+X DQ11 82 1150 2950 300 L 60 60 1 1 B
+X DQ6 92 1150 3450 300 L 60 60 1 1 B
+X DQ30 13 1150 1050 300 L 60 60 1 1 B
+X LOCK# 23 -1150 -350 300 R 60 60 1 1 I
+X EQ5/FRC# 33 -1150 -3650 300 R 60 60 1 1 B
+X C/BE0# 43 -1150 850 300 R 60 60 1 1 B
+X DQ26 53 1150 1450 300 L 60 60 1 1 B
+X BE1# 63 1150 -950 300 L 60 60 1 1 I
+X EA3 73 -1150 -1850 300 R 60 60 1 1 B
+X DQ10 83 1150 3050 300 L 60 60 1 1 B
+X DQ22 93 1150 1850 300 L 60 60 1 1 B
+X AD16 14 -1150 2450 300 R 60 60 1 1 B
+X PERR# 24 -1150 -950 300 R 60 60 1 1 B
+X AD14 34 -1150 2650 300 R 60 60 1 1 B
+X AD7 44 -1150 3350 300 R 60 60 1 1 B
+X AD2 54 -1150 3850 300 R 60 60 1 1 B
+X ADR5 64 1150 -650 300 L 60 60 1 1 I
+X WR# 74 1150 -1450 300 L 60 60 1 1 I
+X DQ9 84 1150 3150 300 L 60 60 1 1 B
+X DQ5 94 1150 3550 300 L 60 60 1 1 B
+X C/BE2# 15 -1150 650 300 R 60 60 1 1 B
+X DQ29 25 1150 1150 300 L 60 60 1 1 B
+X AD13 35 -1150 2750 300 R 60 60 1 1 B
+X DQ27 45 1150 1350 300 L 60 60 1 1 B
+X AD1 55 -1150 3950 300 R 60 60 1 1 B
+X DQ25 65 1150 1550 300 L 60 60 1 1 B
+X SELECT# 75 1150 -1350 300 L 60 60 1 1 I
+X DQ23 85 1150 1750 300 L 60 60 1 1 B
+X DQ4 95 1150 3650 300 L 60 60 1 1 B
+X FRAME# 16 -1150 50 300 R 60 60 1 1 B
+X SERR# 26 -1150 -1050 300 R 60 60 1 1 O
+X AD12 36 -1150 2850 300 R 60 60 1 1 B
+X AD6 46 -1150 3450 300 R 60 60 1 1 B
+X AD0 56 -1150 4050 300 R 60 60 1 1 B
+X ADR4 66 1150 -550 300 L 60 60 1 1 I
+X DQ15 76 1150 2550 300 L 60 60 1 1 B
+X DQ8 86 1150 3250 300 L 60 60 1 1 B
+X DQ3 96 1150 3750 300 L 60 60 1 1 B
+X EQ2 17 -1150 -3350 300 R 60 60 1 1 B
+X PAR 27 -1150 450 300 R 60 60 1 1 B
+X DQ28 37 1150 1250 300 L 60 60 1 1 B
+X AD5 47 -1150 3550 300 R 60 60 1 1 B
+X EA0 57 -1150 -1550 300 R 60 60 1 1 B
+X ADR3 67 1150 -450 300 L 60 60 1 1 I
+X DQ24 77 1150 1650 300 L 60 60 1 1 B
+X BE0# 87 1150 -850 300 L 60 60 1 1 I
+X EA6 97 -1150 -2150 300 R 60 60 1 1 B
+X IRDY# 18 -1150 -50 300 R 60 60 1 1 B
+X C/BE1# 28 -1150 750 300 R 60 60 1 1 B
+X AD11 38 -1150 2950 300 R 60 60 1 1 B
+X AD4 48 -1150 3650 300 R 60 60 1 1 B
+X INTA# 58 -1150 -1250 300 R 60 60 1 1 O
+X ADR2 68 1150 -350 300 L 60 60 1 1 I
+X DQ14 78 1150 2650 300 L 60 60 1 1 B
+X DQ7 88 1150 3350 300 L 60 60 1 1 B
+X DQ2 98 1150 3850 300 L 60 60 1 1 B
+X TRDY# 19 -1150 -150 300 R 60 60 1 1 B
+X EQ4/FWC# 29 -1150 -3550 300 R 60 60 1 1 B
+X AD10 39 -1150 3050 300 R 60 60 1 1 B
+X EQ7/AMWEN 49 -1150 -3850 300 R 60 60 1 1 B
+X MODE_16/32 59 1150 -1250 300 L 60 60 1 1 I
+X EA2 69 -1150 -1750 300 R 60 60 1 1 B
+X DQ13 79 1150 2750 300 L 60 60 1 1 B
+X EA5 89 -1150 -2050 300 R 60 60 1 1 B
+X DQ1 99 1150 3950 300 L 60 60 1 1 B
+X DQ0 100 1150 4050 300 L 60 60 1 1 B
+X PTBE3# 120 1150 150 300 L 60 60 1 1 O
+X BPCLK 140 1150 -2550 300 L 60 60 1 1 O
+X IDSEL 160 -1150 -550 300 R 60 60 1 1 I
+X EA7 101 -1150 -2250 300 R 60 60 1 1 B
+X EA10 121 -1150 -2550 300 R 60 60 1 1 O
+X EA13 141 -1150 -2850 300 R 60 60 1 1 O
+X WRFIFO# 102 1150 -1750 300 L 60 60 1 1 I
+X PTBURST# 112 1150 -150 300 L 60 60 1 1 O
+X PTNUM1 122 1150 550 300 L 60 60 1 1 O
+X ADR6 132 1150 -750 300 L 60 60 1 1 I
+X CLK 142 -1150 350 300 R 60 60 1 1 I
+X AD28 152 -1150 1250 300 R 60 60 1 1 B
+X WRFULL 103 1150 -2050 300 L 60 60 1 1 O
+X EA9 113 -1150 -2450 300 R 60 60 1 1 O
+X PTNUM0 123 1150 650 300 L 60 60 1 1 O
+X DQ18 133 1150 2250 300 L 60 60 1 1 B
+X GNT# 143 -1150 -850 300 R 60 60 1 1 I
+X EA15/FRF 153 -1150 -3050 300 R 60 60 1 1 B
+X RDFIFO# 104 1150 -1850 300 L 60 60 1 1 I
+X PTATN# 114 1150 850 300 L 60 60 1 1 O
+X IRQ# 124 1150 -2450 300 L 60 60 1 1 O
+X REQ# 144 -1150 -750 300 R 60 60 1 1 O
+X AD27 154 -1150 1350 300 R 60 60 1 1 B
+X DQ21 105 1150 1950 300 L 60 60 1 1 B
+X PTRDY# 115 1150 750 300 L 60 60 1 1 I
+X DQ19 125 1150 2150 300 L 60 60 1 1 B
+X SNV 135 1150 -2350 300 L 60 60 1 1 I
+X DQ17 145 1150 2350 300 L 60 60 1 1 B
+X AD26 155 -1150 1450 300 R 60 60 1 1 B
+X RDEMPTY 106 1150 -2150 300 L 60 60 1 1 O
+X PTBE0# 116 1150 450 300 L 60 60 1 1 O
+X SYSRST# 126 1150 -2650 300 L 60 60 1 1 O
+X AD31 146 -1150 950 300 R 60 60 1 1 B
+X AD25 156 -1150 1550 300 R 60 60 1 1 B
+X PTADR# 107 1150 50 300 L 60 60 1 1 I
+X DQ20 117 1150 2050 300 L 60 60 1 1 B
+X EWR#/SDA 127 -1150 -4050 300 R 60 60 1 1 B
+X EA12 137 -1150 -2750 300 R 60 60 1 1 O
+X AD30 147 -1150 1050 300 R 60 60 1 1 B
+X DQ16 157 1150 2450 300 L 60 60 1 1 B
+X PTWR 108 1150 -50 300 L 60 60 1 1 O
+X PTBE1# 118 1150 350 300 L 60 60 1 1 O
+X ERD#/SCL 128 -1150 -3950 300 R 60 60 1 1 O
+X FLT# 138 1150 -2250 300 L 60 60 1 1 I
+X AD29 148 -1150 1150 300 R 60 60 1 1 B
+X AD24 158 -1150 1650 300 R 60 60 1 1 B
+X EA8 109 -1150 -2350 300 R 60 60 1 1 B
+X PTBE2# 119 1150 250 300 L 60 60 1 1 O
+X EA11 129 -1150 -2650 300 R 60 60 1 1 O
+X RST# 139 -1150 250 300 R 60 60 1 1 I
+X EA14/FWE 149 -1150 -2950 300 R 60 60 1 1 B
+X C/BE3# 159 -1150 550 300 R 60 60 1 1 B
+ENDDRAW
+ENDDEF
+#
+# SIM4X32
+#
+DEF SIM4X32 U 0 40 Y Y 1 F N
+F0 "U" 0 550 70 H V C CNN
+F1 "SIM4X32" 450 -2000 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 -1900 500 1900 0 1 0 N
+X GND 1 -100 -1900 0 U 60 60 1 1 W N
+X DQ0 2 800 1800 300 L 60 60 1 1 T
+X DQ16 3 800 0 300 L 60 60 1 1 T
+X DQ1 4 800 1700 300 L 60 60 1 1 T
+X DQ17 5 800 -100 300 L 60 60 1 1 T
+X DQ2 6 800 1600 300 L 60 60 1 1 T
+X DQ18 7 800 -200 300 L 60 60 1 1 T
+X DQ3 8 800 1500 300 L 60 60 1 1 T
+X DQ19 9 800 -300 300 L 60 60 1 1 T
+X VCC 10 -100 1900 0 D 60 60 1 1 W N
+X DQ4 20 800 1400 300 L 60 60 1 1 T
+X VCC 30 0 1900 0 D 60 60 1 1 W N
+X CAS0 40 -800 -200 300 R 60 60 1 1 I I
+X DQ24 50 800 -900 300 L 60 60 1 1 T
+X DQ29 60 800 -1400 300 L 60 60 1 1 T
+X PRD3 70 -800 -1200 300 R 60 60 1 1 I
+X DQ20 21 800 -400 300 L 60 60 1 1 T
+X A8 31 -800 1000 300 R 60 60 1 1 I
+X CAS1 41 -800 -300 300 R 60 60 1 1 I I
+X DQ9 51 800 800 300 L 60 60 1 1 T
+X DQ13 61 800 400 300 L 60 60 1 1 T
+X A0 12 -800 1800 300 R 60 60 1 1 I
+X DQ5 22 800 1300 300 L 60 60 1 1 T
+X A9 32 -800 900 300 R 60 60 1 1 I
+X CAS2 42 -800 -400 300 R 60 60 1 1 I I
+X DQ25 52 800 -1000 300 L 60 60 1 1 T
+X DQ30 62 800 -1500 300 L 60 60 1 1 T
+X GND 72 100 -1900 0 U 60 60 1 1 W N
+X A1 13 -800 1700 300 R 60 60 1 1 I
+X DQ21 23 800 -500 300 L 60 60 1 1 T
+X CAS3 43 -800 -500 300 R 60 60 1 1 I I
+X DQ10 53 800 700 300 L 60 60 1 1 T
+X DQ14 63 800 300 300 L 60 60 1 1 T
+X A2 14 -800 1600 300 R 60 60 1 1 I
+X DQ6 24 800 1200 300 L 60 60 1 1 T
+X RAS2 34 -800 100 300 R 60 60 1 1 I I
+X RAS0 44 -800 300 300 R 60 60 1 1 I I
+X DQ26 54 800 -1100 300 L 60 60 1 1 T
+X DQ31 64 800 -1600 300 L 60 60 1 1 T
+X A3 15 -800 1500 300 R 60 60 1 1 I
+X DQ22 25 800 -600 300 L 60 60 1 1 T
+X DQ11 55 800 600 300 L 60 60 1 1 T
+X DQ15 65 800 200 300 L 60 60 1 1 T
+X A4 16 -800 1400 300 R 60 60 1 1 I
+X DQ7 26 800 1100 300 L 60 60 1 1 T
+X DQ27 56 800 -1200 300 L 60 60 1 1 T
+X A5 17 -800 1300 300 R 60 60 1 1 I
+X DQ23 27 800 -700 300 L 60 60 1 1 T
+X R/W 47 -800 -700 300 R 60 60 1 1 I
+X DQ12 57 800 500 300 L 60 60 1 1 T
+X PRD0 67 -800 -900 300 R 60 60 1 1 I
+X A6 18 -800 1200 300 R 60 60 1 1 I
+X A7 28 -800 1100 300 R 60 60 1 1 I
+X DQ28 58 800 -1300 300 L 60 60 1 1 T
+X PRD1 68 -800 -1000 300 R 60 60 1 1 I
+X A10 19 -800 800 300 R 60 60 1 1 I
+X GND 39 0 -1950 0 U 60 60 1 1 W N
+X DQ8 49 800 900 300 L 60 60 1 1 T
+X VCC 59 100 1900 0 D 60 60 1 1 W N
+X PRD2 69 -800 -1100 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TDA8501
+#
+DEF TDA8501 U 0 30 Y Y 1 F N
+F0 "U" 350 950 60 H V C CNN
+F1 "TDA8501" 350 -850 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -600 850 600 -750 0 1 0 N
+X -R.Y 1 -900 600 300 R 60 60 1 1 I
+X MCTR 2 -900 100 300 R 60 60 1 1 I
+X -B.Y 3 -900 500 300 R 60 60 1 1 I
+X H/2 4 -900 400 300 R 60 60 1 1 B
+X Y 5 -900 300 300 R 60 60 1 1 I
+X UOFF 6 -900 200 300 R 60 60 1 1 O
+X R 7 -900 -100 300 R 60 60 1 1 I
+X VCC 8 0 1150 300 D 60 60 1 1 I
+X G 9 -900 -200 300 R 60 60 1 1 I
+X VSS 10 0 -1050 300 U 60 60 1 1 I
+X Y+SIN 20 900 700 300 L 60 60 1 1 I
+X B 11 -900 -300 300 R 60 60 1 1 I
+X B/ADJ 21 900 -200 300 L 60 60 1 1 P
+X VOFF 12 -900 -500 300 R 60 60 1 1 O
+X Y+SOUT 22 900 800 300 L 60 60 1 1 O
+X VREF 13 900 400 300 L 60 60 1 1 O
+X OSC 23 -900 -700 300 R 60 60 1 1 O
+X C/OUT 14 900 0 300 L 60 60 1 1 O
+X CS 24 -900 800 300 R 60 60 1 1 I
+X FLT 15 900 -500 300 L 60 60 1 1 P
+X CVBS 16 900 100 300 L 60 60 1 1 O
+X NTSC/PAL 17 900 -400 300 L 60 60 1 1 I
+X NOTCH 18 900 -300 300 L 60 60 1 1 I
+X Y/OUT 19 900 200 300 L 60 60 1 1 O
+ENDDRAW
+ENDDEF
+#
+# TEST
+#
+DEF TEST W 0 30 N N 1 F N
+F0 "W" 0 60 40 H V C CNN
+F1 "TEST" 0 -70 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C -70 0 30 0 1 0 N
+C 70 0 30 0 1 0 N
+X 1 1 -200 0 100 R 60 60 0 1 P
+X 2 2 200 0 100 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VSS
+#
+DEF VSS #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "VSS" 0 -70 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X VSS 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC1736APD8
+#
+DEF XC1736APD8 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC1736APD8" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -450 -450 450 450 0 1 0 N
+X DATA 1 750 150 300 L 60 60 1 1 T
+X CLK 2 -750 150 300 R 60 60 1 1 I C
+X RAZ/OE 3 -750 -50 300 R 60 60 1 1 I I
+X CE 4 -750 -250 300 R 60 60 1 1 I I
+X GND 5 -450 -450 0 U 60 60 1 1 W N
+X CEO 6 750 -150 300 L 60 60 1 1 O I
+X VPP 7 -750 350 300 R 60 60 1 1 I
+X VCC 8 -450 450 0 D 60 60 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC4003-VQ100
+#
+DEF XC4003-VQ100 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC4003-VQ100" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -650 -2350 650 2350 0 1 0 N
+X GND 1 -550 -2350 0 U 60 60 1 1 W N
+X PGCK1 2 -950 1150 300 R 60 60 1 1 P
+X P/A17 3 -950 1050 300 R 60 60 1 1 P
+X P/TDI 4 -950 950 300 R 60 60 1 1 P
+X P/TCK 5 -950 850 300 R 60 60 1 1 P
+X P/A3 6 -950 750 300 R 60 60 1 1 P
+X P7 7 -950 650 300 R 60 60 1 1 P
+X P8 8 -950 550 300 R 60 60 1 1 P
+X P/A15 9 -950 450 300 R 60 60 1 1 P
+X P/A4 10 -950 350 300 R 60 60 1 1 P
+X P20 20 -950 -550 300 R 60 60 1 1 P
+X P/LDC 30 -950 1250 300 R 60 60 1 1 P
+X P40 40 -950 -2150 300 R 60 60 1 1 P
+X DONE 50 -950 1750 300 R 60 60 1 1 C
+X P60 60 950 -750 300 L 60 60 1 1 P
+X P70 70 950 50 300 L 60 60 1 1 P
+X P80 80 950 550 300 L 60 60 1 1 P
+X P90 90 950 1350 300 L 60 60 1 1 B
+X GND 11 -450 -2350 0 U 60 60 1 1 W N
+X SGCK2 21 -950 -650 300 R 60 60 1 1 P
+X P31 31 -950 -1350 300 R 60 60 1 1 P
+X P41 41 950 -2250 300 L 60 60 1 1 P
+X VCC 51 -250 2350 0 D 60 60 1 1 W N
+X P61 61 950 -650 300 L 60 60 1 1 P
+X P71/RDY 71 950 150 300 L 60 60 1 1 P
+X P81 81 950 650 300 L 60 60 1 1 P
+X P91 91 950 1450 300 L 60 60 1 1 P
+X VCC 12 -550 2350 0 D 60 60 1 1 W N
+X M1/RD 22 -950 2150 300 R 60 60 1 1 I
+X P32 32 -950 -1450 300 R 60 60 1 1 P
+X P42 42 950 -2150 300 L 60 60 1 1 P
+X PROG 52 -950 1850 300 R 60 60 1 1 I I
+X P62 62 950 -550 300 L 60 60 1 1 P
+X DIN 72 -950 1650 300 R 60 60 1 1 P
+X P82 82 950 750 300 L 60 60 1 1 P
+X P92 92 950 1550 300 L 60 60 1 1 P
+X P13 13 -950 150 300 R 60 60 1 1 B
+X GND 23 -350 -2350 0 U 60 60 1 1 W N
+X P33 33 -950 -1550 300 R 60 60 1 1 P
+X P43 43 950 -2050 300 L 60 60 1 1 P
+X P53 53 950 -1450 300 L 60 60 1 1 B
+X VCC 63 -150 2350 0 D 60 60 1 1 W N
+X DOUT/SGCK4 73 -950 1550 300 R 60 60 1 1 P
+X P83 83 950 850 300 L 60 60 1 1 P
+X P93 93 950 1650 300 L 60 60 1 1 P
+X P14 14 -950 50 300 R 60 60 1 1 P
+X M0/RT 24 -950 2250 300 R 60 60 1 1 I
+X P34 34 -950 -1650 300 R 60 60 1 1 P
+X P44 44 950 -1950 300 L 60 60 1 1 P
+X PGCK3 54 950 -1350 300 L 60 60 1 1 B
+X GND 64 -50 -2350 0 U 60 60 1 1 W N
+X CCLK 74 -950 1450 300 R 60 60 1 1 I C
+X P84 84 950 950 300 L 60 60 1 1 P
+X P94 94 950 1750 300 L 60 60 1 1 P
+X P15 15 -950 -50 300 R 60 60 1 1 P
+X VCC 25 -450 2350 0 D 60 60 1 1 W N
+X P35 35 -950 -1750 300 R 60 60 1 1 P
+X P45 45 950 -1850 300 L 60 60 1 1 P
+X P55 55 950 -1250 300 L 60 60 1 1 P
+X P65 65 950 -450 300 L 60 60 1 1 P
+X VCC 75 -50 2350 0 D 60 60 1 1 W N
+X P85 85 950 1050 300 L 60 60 1 1 P
+X P91 95 950 1850 300 L 60 60 1 1 P
+X P16 16 -950 -150 300 R 60 60 1 1 P
+X M2 26 -950 2050 300 R 60 60 1 1 P
+X P36/INIT 36 -950 -1850 300 R 60 60 1 1 P
+X P46 46 950 -1750 300 L 60 60 1 1 P
+X P56 56 950 -1150 300 L 60 60 1 1 B
+X P66 66 950 -350 300 L 60 60 1 1 P
+X TDO 76 950 250 300 L 60 60 1 1 O
+X P86 86 950 1150 300 L 60 60 1 1 P
+X P96 96 950 1950 300 L 60 60 1 1 P
+X P17 17 -950 -250 300 R 60 60 1 1 P
+X PGCK2 27 -950 -950 300 R 60 60 1 1 P
+X VCC 37 -350 2350 0 D 60 60 1 1 W N
+X P47 47 950 -1650 300 L 60 60 1 1 P
+X P57 57 950 -1050 300 L 60 60 1 1 P
+X P67 67 950 -250 300 L 60 60 1 1 P
+X GND 77 50 -2350 0 U 60 60 1 1 W N
+X P87 87 950 1250 300 L 60 60 1 1 P
+X P97 97 950 2050 300 L 60 60 1 1 P
+X P18 18 -950 -350 300 R 60 60 1 1 P
+X P/HDC 28 -950 1350 300 R 60 60 1 1 P
+X GND 38 -250 -2350 0 U 60 60 1 1 W N
+X SGCK3 48 950 -1550 300 L 60 60 1 1 P
+X P58 58 950 -950 300 L 60 60 1 1 P
+X P68 68 950 -150 300 L 60 60 1 1 P
+X P78 78 950 350 300 L 60 60 1 1 P
+X GND 88 150 -2350 0 U 60 60 1 1 W N
+X P98 98 950 2150 300 L 60 60 1 1 B
+X P19 19 -950 -450 300 R 60 60 1 1 P
+X P29 29 -950 -1150 300 R 60 60 1 1 P
+X P39 39 -950 -2050 300 R 60 60 1 1 P
+X GND 49 -150 -2350 0 U 60 60 1 1 W N
+X P59 59 950 -850 300 L 60 60 1 1 P
+X P69 69 950 -50 300 L 60 60 1 1 P
+X PGCK4 79 950 450 300 L 60 60 1 1 P
+X VCC 89 50 2350 0 D 60 60 1 1 W N
+X SGCK1 99 950 2250 300 L 60 60 1 1 B
+X VCC 100 150 2350 0 D 60 60 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC4005-PQ100
+#
+DEF XC4005-PQ100 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC4005-PQ100" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -750 -2300 750 2300 0 1 0 N
+X P1 1 1050 2100 300 L 60 60 1 1 P
+X SGCK1 2 1050 2200 300 L 60 60 1 1 P
+X VCC 3 -400 2300 0 D 60 60 1 1 W N
+X GND 4 -400 -2300 0 U 60 60 1 1 W N
+X PGCK1 5 -1050 1000 300 R 60 60 1 1 P
+X P6 6 -1050 900 300 R 60 60 1 1 P
+X P7/TDI 7 -1050 800 300 R 60 60 1 1 P
+X P8/TCK 8 -1050 700 300 R 60 60 1 1 P
+X P9/TMS 9 -1050 600 300 R 60 60 1 1 P
+X P20 20 -1050 -200 300 R 60 60 1 1 P
+X PGCK2 30 -1050 -800 300 R 60 60 1 1 P
+X VCC 40 -100 2300 0 D 60 60 1 1 W N
+X P50 50 1050 -2000 300 L 60 60 1 1 P
+X P60 60 1050 -1200 300 L 60 60 1 1 P
+X P70 70 1050 -400 300 L 60 60 1 1 P
+X GND 80 200 -2300 0 U 60 60 1 1 W N
+X P90 90 1050 1200 300 L 60 60 1 1 P
+X P11 11 -1050 500 300 R 60 60 1 1 P
+X P21 21 -1050 -300 300 R 60 60 1 1 P
+X P31/HDC 31 -1050 1300 300 R 60 60 1 1 P
+X GND 41 -100 -2300 0 U 60 60 1 1 W N
+X SGCK3 51 1050 -1800 300 L 60 60 1 1 P
+X P61 61 1050 -1100 300 L 60 60 1 1 P
+X P71 71 1050 -300 300 L 60 60 1 1 P
+X P81 81 1050 200 300 L 60 60 1 1 P
+X GND 91 300 -2300 0 U 60 60 1 1 W N
+X P12 12 -1050 400 300 R 60 60 1 1 P
+X P22 22 -1050 -400 300 R 60 60 1 1 P
+X P32 32 -1050 -1000 300 R 60 60 1 1 P
+X P42 42 -1050 -1700 300 R 60 60 1 1 P
+X GND 52 0 -2300 0 U 60 60 1 1 W N
+X P62 62 1050 -1000 300 L 60 60 1 1 P
+X P72 72 1050 -200 300 L 60 60 1 1 P
+X PGCK4 82 1050 300 300 L 60 60 1 1 P
+X VCC 92 300 2300 0 D 60 60 1 1 W N
+X P13 13 -1050 300 300 R 60 60 1 1 P
+X P23 23 -1050 -500 300 R 60 60 1 1 P
+X P33/LDC 33 -1050 1200 300 R 60 60 1 1 P
+X P43 43 -1050 -1800 300 R 60 60 1 1 P
+X DONE 53 -1050 1800 300 R 60 60 1 1 C
+X P63 63 1050 -900 300 L 60 60 1 1 P
+X P73 73 1050 -100 300 L 60 60 1 1 P
+X P83 83 1050 500 300 L 60 60 1 1 P
+X P93 93 1050 1300 300 L 60 60 1 1 P
+X GND 14 -300 -2300 0 U 60 60 1 1 W N
+X SGCK2 24 -1050 -700 300 R 60 60 1 1 P
+X P34 34 -1050 -1100 300 R 60 60 1 1 P
+X P44 44 -1050 -1900 300 R 60 60 1 1 P
+X VCC 54 0 2300 0 D 60 60 1 1 W N
+X P64 64 1050 -800 300 L 60 60 1 1 P
+X P74/BUSY 74 1050 0 300 L 60 60 1 1 P
+X P84 84 1050 600 300 L 60 60 1 1 P
+X P94 94 1050 1400 300 L 60 60 1 1 P
+X VCC 15 -300 2300 0 D 60 60 1 1 W N
+X M1 25 -1050 2100 300 R 60 60 1 1 P
+X P35 35 -1050 -1200 300 R 60 60 1 1 P
+X P45 45 -1050 -2000 300 R 60 60 1 1 P
+X PROG 55 -1050 1900 300 R 60 60 1 1 I I
+X P65 65 1050 -700 300 L 60 60 1 1 P
+X DIN/D0 75 -1050 1700 300 R 60 60 1 1 P
+X P85 85 1050 700 300 L 60 60 1 1 P
+X P95 95 1050 1500 300 L 60 60 1 1 P
+X P16 16 -1050 200 300 R 60 60 1 1 P
+X GND 26 -200 -2300 0 U 60 60 1 1 W N
+X P36 36 -1050 -1300 300 R 60 60 1 1 P
+X P46 46 -1050 -2100 300 R 60 60 1 1 P
+X P56 56 1050 -1700 300 L 60 60 1 1 P
+X VCC 66 100 2300 0 D 60 60 1 1 W N
+X DOUT/SGCK4 76 -1050 1600 300 R 60 60 1 1 P
+X P86 86 1050 800 300 L 60 60 1 1 P
+X P96 96 1050 1600 300 L 60 60 1 1 P
+X P17 17 -1050 100 300 R 60 60 1 1 P
+X M0 27 -1050 2200 300 R 60 60 1 1 I
+X P37 37 -1050 -1400 300 R 60 60 1 1 P
+X P47 47 -1050 -2200 300 R 60 60 1 1 P
+X PGCK3 57 1050 -1600 300 L 60 60 1 1 P
+X GND 67 100 -2300 0 U 60 60 1 1 W N
+X CCLK 77 -1050 1500 300 R 60 60 1 1 I C
+X P87 87 1050 900 300 L 60 60 1 1 P
+X P97 97 1050 1700 300 L 60 60 1 1 P
+X P18 18 -1050 0 300 R 60 60 1 1 P
+X VCC 28 -200 2300 0 D 60 60 1 1 W N
+X P38 38 -1050 -1500 300 R 60 60 1 1 P
+X P48 48 1050 -2200 300 L 60 60 1 1 P
+X P58 58 1050 -1400 300 L 60 60 1 1 P
+X P68 68 1050 -600 300 L 60 60 1 1 P
+X VCC 78 200 2300 0 D 60 60 1 1 W N
+X P88 88 1050 1000 300 L 60 60 1 1 P
+X P98 98 1050 1800 300 L 60 60 1 1 P
+X P19 19 -1050 -100 300 R 60 60 1 1 P
+X M2 29 -1050 2000 300 R 60 60 1 1 I
+X P39/INIT 39 -1050 -1600 300 R 60 60 1 1 P
+X P49 49 1050 -2100 300 L 60 60 1 1 P
+X P59 59 1050 -1300 300 L 60 60 1 1 P
+X P69 69 1050 -500 300 L 60 60 1 1 P
+X TDO 79 1050 100 300 L 60 60 1 1 O
+X P89 89 1050 1100 300 L 60 60 1 1 P
+X P99 99 1050 1900 300 L 60 60 1 1 P
+X P100 100 1050 2000 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# XC4005-PQ160
+#
+DEF XC4005-PQ160 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC4005-PQ160" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -800 -3100 800 3100 0 1 0 N
+X GND 1 -800 -3100 0 U 60 60 1 1 W N
+X PGCK1 2 -1100 1700 300 R 60 60 1 1 B
+X P3 3 -1100 1600 300 R 60 60 1 1 P
+X P4 4 -1100 1500 300 R 60 60 1 1 P
+X P5 5 -1100 1400 300 R 60 60 1 1 P
+X TDI 6 -1100 1300 300 R 60 60 1 1 P
+X TCK 7 -1100 1200 300 R 60 60 1 1 P
+X GND 10 -700 -3100 0 U 60 60 1 1 W N
+X VCC 20 -200 3100 0 D 60 60 1 1 W N
+X M0 40 -1100 3000 300 R 60 60 1 1 I
+X VCC 60 -300 3100 0 D 60 60 1 1 W N
+X GND 70 -100 -3100 0 U 60 60 1 1 W N
+X DONE 80 -1100 2500 300 R 60 60 1 1 B
+X P11 11 -1100 1100 300 R 60 60 1 1 P
+X P21 21 -1100 300 300 R 60 60 1 1 P
+X VCC 41 -400 3100 0 D 60 60 1 1 W N
+X GND 51 -300 -3100 0 U 60 60 1 1 W N
+X GND 61 -200 -3100 0 U 60 60 1 1 W N
+X VCC 81 -100 3100 0 D 60 60 1 1 W N
+X GND 91 100 -3100 0 U 60 60 1 1 W N
+X P12 12 -1100 1000 300 R 60 60 1 1 P
+X P22 22 -1100 200 300 R 60 60 1 1 P
+X P32 32 -1100 -500 300 R 60 60 1 1 P
+X M2 42 -1100 2800 300 R 60 60 1 1 I
+X P52 52 -1100 -1500 300 R 60 60 1 1 P
+X P62 62 -1100 -2300 300 R 60 60 1 1 P
+X PROG 82 -1100 2600 300 R 60 60 1 1 I I
+X P92 92 1100 -1800 300 L 60 60 1 1 P
+X TMS 13 -1100 900 300 R 60 60 1 1 P
+X P23 23 -1100 100 300 R 60 60 1 1 P
+X P33 33 -1100 -600 300 R 60 60 1 1 P
+X PGCK2 43 -1100 -1100 300 R 60 60 1 1 P
+X P53 53 -1100 -1600 300 R 60 60 1 1 P
+X P63 63 -1100 -2400 300 R 60 60 1 1 P
+X P73 73 1100 -3000 300 L 60 60 1 1 P
+X P83 83 1100 -2400 300 L 60 60 1 1 P
+X P93 93 1100 -1700 300 L 60 60 1 1 P
+X P14 14 -1100 800 300 R 60 60 1 1 P
+X P24 24 -1100 0 300 R 60 60 1 1 P
+X P34 34 -1100 -700 300 R 60 60 1 1 P
+X HDC 44 -1100 2000 300 R 60 60 1 1 P
+X P54 54 -1100 -1700 300 R 60 60 1 1 P
+X P64 64 -1100 -2500 300 R 60 60 1 1 P
+X P74 74 1100 -2900 300 L 60 60 1 1 P
+X PGCK3 84 1100 -2300 300 L 60 60 1 1 P
+X P93 94 1100 -1600 300 L 60 60 1 1 P
+X P15 15 -1100 700 300 R 60 60 1 1 P
+X P25 25 -1100 -100 300 R 60 60 1 1 P
+X P35 35 -1100 -800 300 R 60 60 1 1 P
+X P45 45 -1100 -1200 300 R 60 60 1 1 P
+X P55 55 -1100 -1800 300 R 60 60 1 1 P
+X P65 65 -1100 -2600 300 R 60 60 1 1 P
+X P75 75 1100 -2800 300 L 60 60 1 1 P
+X P85 85 1100 -2200 300 L 60 60 1 1 P
+X P95 95 1100 -1500 300 L 60 60 1 1 P
+X P16 16 -1100 600 300 R 60 60 1 1 P
+X P26 26 -1100 -200 300 R 60 60 1 1 P
+X P36 36 -1100 -900 300 R 60 60 1 1 P
+X P46 46 -1100 -1300 300 R 60 60 1 1 P
+X P56 56 -1100 -1900 300 R 60 60 1 1 P
+X P66 66 -1100 -2700 300 R 60 60 1 1 P
+X P76 76 1100 -2700 300 L 60 60 1 1 P
+X P86 86 1100 -2100 300 L 60 60 1 1 P
+X P96 96 1100 -1400 300 L 60 60 1 1 P
+X P17 17 -1100 500 300 R 60 60 1 1 P
+X P27 27 -1100 -300 300 R 60 60 1 1 P
+X SGCK2 37 -1100 -1000 300 R 60 60 1 1 P
+X P47 47 -1100 -1400 300 R 60 60 1 1 P
+X P57 57 -1100 -2000 300 R 60 60 1 1 P
+X P67 67 -1100 -2800 300 R 60 60 1 1 P
+X P77 77 1100 -2600 300 L 60 60 1 1 P
+X P87 87 1100 -2000 300 L 60 60 1 1 P
+X P97 97 1100 -1300 300 L 60 60 1 1 P
+X P18 18 -1100 400 300 R 60 60 1 1 P
+X P28 28 -1100 -400 300 R 60 60 1 1 P
+X M1 38 -1100 2900 300 R 60 60 1 1 I
+X LDC 48 -1100 1900 300 R 60 60 1 1 P
+X P58 58 -1100 -2100 300 R 60 60 1 1 P
+X P68 68 -1100 -2900 300 R 60 60 1 1 B
+X SGCK3 78 1100 -2500 300 L 60 60 1 1 P
+X P88 88 1100 -1900 300 L 60 60 1 1 P
+X P98 98 1100 -1200 300 L 60 60 1 1 P
+X GND 19 -600 -3100 0 U 60 60 1 1 W N
+X GND 29 -500 -3100 0 U 60 60 1 1 W N
+X GND 39 -400 -3100 0 U 60 60 1 1 W N
+X P59-INIT 59 -1100 -2200 300 R 60 60 1 1 P
+X P69 69 -1100 -3000 300 R 60 60 1 1 P
+X GND 79 0 -3100 0 U 60 60 1 1 W N
+X P90 99 1100 -1100 300 L 60 60 1 1 P
+X VCC 100 0 3100 0 D 60 60 1 1 W N
+X GND 110 300 -3100 0 U 60 60 1 1 W N
+X VCC 120 100 3100 0 D 60 60 1 1 W N
+X P140 140 1100 1600 300 L 60 60 1 1 P
+X P150 150 1100 2400 300 L 60 60 1 1 P
+X VCC 160 300 3100 0 D 60 60 1 1 W N
+X GND 101 200 -3100 0 U 60 60 1 1 W N
+X TDO 121 1100 200 300 L 60 60 1 1 O
+X GND 131 500 -3100 0 U 60 60 1 1 W N
+X GND 141 600 -3100 0 U 60 60 1 1 W N
+X GND 151 700 -3100 0 U 60 60 1 1 W N
+X P102 102 1100 -1000 300 L 60 60 1 1 P
+X GND 122 400 -3100 0 U 60 60 1 1 W N
+X P132 132 1100 900 300 L 60 60 1 1 P
+X VCC 142 200 3100 0 D 60 60 1 1 W N
+X P103 103 1100 -900 300 L 60 60 1 1 P
+X P113 113 1100 -200 300 L 60 60 1 1 P
+X P123 123 1100 300 300 L 60 60 1 1 P
+X P133 133 1100 1000 300 L 60 60 1 1 P
+X P143 143 1100 1700 300 L 60 60 1 1 P
+X P104 104 1100 -800 300 L 60 60 1 1 P
+X P114-RDY 114 1100 -100 300 L 60 60 1 1 P
+X P124 124 1100 400 300 L 60 60 1 1 P
+X P134 134 1100 1100 300 L 60 60 1 1 P
+X P144 144 1100 1800 300 L 60 60 1 1 P
+X P154 154 1100 2500 300 L 60 60 1 1 P
+X P105 105 1100 -700 300 L 60 60 1 1 P
+X P115 115 1100 0 300 L 60 60 1 1 P
+X P125 125 1100 500 300 L 60 60 1 1 P
+X P135 135 1100 1200 300 L 60 60 1 1 P
+X P145 145 1100 1900 300 L 60 60 1 1 P
+X P155 155 1100 2600 300 L 60 60 1 1 P
+X P106 106 1100 -600 300 L 60 60 1 1 P
+X P116 116 1100 100 300 L 60 60 1 1 P
+X P126 126 1100 600 300 L 60 60 1 1 P
+X P146 146 1100 2000 300 L 60 60 1 1 P
+X P156 156 1100 2700 300 L 60 60 1 1 P
+X P107 107 1100 -500 300 L 60 60 1 1 P
+X DIN 117 -1100 2400 300 R 60 60 1 1 I
+X P127 127 1100 700 300 L 60 60 1 1 P
+X P137 137 1100 1300 300 L 60 60 1 1 P
+X P147 147 1100 2100 300 L 60 60 1 1 P
+X P157 157 1100 2800 300 L 60 60 1 1 P
+X P108 108 1100 -400 300 L 60 60 1 1 P
+X DOUT-SGI4 118 -1100 2300 300 R 60 60 1 1 P
+X P128 128 1100 800 300 L 60 60 1 1 P
+X P138 138 1100 1400 300 L 60 60 1 1 P
+X P148 148 1100 2200 300 L 60 60 1 1 P
+X P158 158 1100 2900 300 L 60 60 1 1 P
+X P109 109 1100 -300 300 L 60 60 1 1 P
+X CCLK 119 -1100 2200 300 R 60 60 1 1 P C
+X P139 139 1100 1500 300 L 60 60 1 1 P
+X P149 149 1100 2300 300 L 60 60 1 1 P
+X SGCK1 159 1100 3000 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/video/modul.sch b/demos/video/modul.sch
new file mode 100644
index 0000000..07705ae
--- /dev/null
+++ b/demos/video/modul.sch
@@ -0,0 +1,969 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 3 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 6900 1200 7300 1200
+$Comp
+L PWR_FLAG #FLG07
+U 1 1 4174D92E
+P 3500 1450
+F 0 "#FLG07" H 3500 1720 30 0001 C CNN
+F 1 "PWR_FLAG" H 3500 1680 30 0000 C CNN
+F 2 "" H 3500 1450 60 0001 C CNN
+F 3 "" H 3500 1450 60 0001 C CNN
+ 1 3500 1450
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG08
+U 1 1 4174D923
+P 6900 1200
+F 0 "#FLG08" H 6900 1470 30 0001 C CNN
+F 1 "PWR_FLAG" H 6900 1430 30 0000 C CNN
+F 2 "" H 6900 1200 60 0001 C CNN
+F 3 "" H 6900 1200 60 0001 C CNN
+ 1 6900 1200
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5950 2400 6900 2400
+Wire Wire Line
+ 5100 2400 5350 2400
+$Comp
+L GND #PWR09
+U 1 1 349FB5CD
+P 5650 2600
+F 0 "#PWR09" H 5650 2600 40 0001 C CNN
+F 1 "GND" H 5650 2530 40 0001 C CNN
+F 2 "" H 5650 2600 60 0001 C CNN
+F 3 "" H 5650 2600 60 0001 C CNN
+ 1 5650 2600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4400 2700 6900 2700
+$Comp
+L LIGNE_A_RETARD L6
+U 1 1 349FB562
+P 5650 2400
+F 0 "L6" V 5850 2400 50 0000 C CNN
+F 1 "470ns" V 5750 2400 50 0000 C CNN
+F 2 "footprints:LRTDK" H 5650 2400 60 0001 C CNN
+F 3 "" H 5650 2400 60 0001 C CNN
+ 1 5650 2400
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #PWR010
+U 1 1 33CF5737
+P 4450 3800
+F 0 "#PWR010" H 4450 3800 40 0001 C CNN
+F 1 "GND" H 4450 3700 40 0001 C CNN
+F 2 "" H 4450 3800 60 0001 C CNN
+F 3 "" H 4450 3800 60 0001 C CNN
+ 1 4450 3800
+ 0 -1 -1 0
+$EndComp
+NoConn ~ 2600 3000
+Text HLabel 1550 3700 0 60 Input ~ 0
+BLUE
+Text HLabel 1550 3600 0 60 Input ~ 0
+GREEN
+Text HLabel 1550 3500 0 60 Input ~ 0
+RED
+Wire Wire Line
+ 2100 3700 1550 3700
+Wire Wire Line
+ 1600 3600 1550 3600
+Wire Wire Line
+ 2100 3500 1550 3500
+Wire Wire Line
+ 2600 3700 2500 3700
+Wire Wire Line
+ 2600 3600 2000 3600
+Wire Wire Line
+ 2600 3500 2500 3500
+Wire Wire Line
+ 2500 3300 2600 3300
+Wire Wire Line
+ 1950 3300 2000 3300
+$Comp
+L VCC #PWR011
+U 1 1 33A51A5E
+P 1950 3300
+F 0 "#PWR011" H 1950 3500 40 0001 C CNN
+F 1 "VCC" V 1950 3450 40 0000 C CNN
+F 2 "" H 1950 3300 60 0001 C CNN
+F 3 "" H 1950 3300 60 0001 C CNN
+ 1 1950 3300
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R4
+U 1 1 33A51A4E
+P 2250 3300
+F 0 "R4" V 2330 3300 50 0000 C CNN
+F 1 "10K" V 2250 3300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2250 3300 60 0001 C CNN
+F 3 "" H 2250 3300 60 0001 C CNN
+F 4 "~" V 2250 3220 50 0001 C CNN "Champ7"
+ 1 2250 3300
+ 0 1 1 0
+$EndComp
+NoConn ~ 2600 3100
+NoConn ~ 2600 2900
+NoConn ~ 2600 2800
+Wire Wire Line
+ 2100 5150 2100 5100
+Text Label 4550 3300 0 60 ~ 0
+CVBS
+Wire Wire Line
+ 2500 2350 2500 2600
+Wire Wire Line
+ 6350 3750 6350 3850
+Wire Wire Line
+ 6350 3850 6800 3850
+Wire Wire Line
+ 3500 1450 3500 2250
+Wire Wire Line
+ 3500 1500 4000 1500
+Wire Wire Line
+ 1500 3950 1500 3900
+Wire Wire Line
+ 1500 3900 2600 3900
+Text Notes 1100 4900 0 60 ~ 0
+NTSC:
+Text Notes 1100 5000 0 60 ~ 0
+3.579545MHz
+$Comp
+L GND #GND012
+U 1 1 22760F6C
+P 3500 4500
+F 0 "#GND012" H 3500 4600 60 0001 C CNN
+F 1 "GND" H 3500 4400 60 0001 C CNN
+F 2 "" H 3500 4500 60 0001 C CNN
+F 3 "" H 3500 4500 60 0001 C CNN
+ 1 3500 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND013
+U 1 1 22760F7B
+P 3900 2050
+F 0 "#GND013" H 3900 2150 60 0001 C CNN
+F 1 "GND" H 3900 1950 60 0001 C CNN
+F 2 "" H 3900 2050 60 0001 C CNN
+F 3 "" H 3900 2050 60 0001 C CNN
+ 1 3900 2050
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND014
+U 1 1 22760F94
+P 1500 4400
+F 0 "#GND014" H 1500 4400 40 0001 C CNN
+F 1 "GND" H 1500 4330 40 0001 C CNN
+F 2 "" H 1500 4400 60 0001 C CNN
+F 3 "" H 1500 4400 60 0001 C CNN
+ 1 1500 4400
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND015
+U 1 1 22760F9E
+P 950 3900
+F 0 "#GND015" H 950 3900 40 0001 C CNN
+F 1 "GND" H 950 3830 40 0001 C CNN
+F 2 "" H 950 3900 60 0001 C CNN
+F 3 "" H 950 3900 60 0001 C CNN
+ 1 950 3900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND016
+U 1 1 22760FAD
+P 2100 5600
+F 0 "#GND016" H 2100 5700 60 0001 C CNN
+F 1 "GND" H 2100 5500 60 0001 C CNN
+F 2 "" H 2100 5600 60 0001 C CNN
+F 3 "" H 2100 5600 60 0001 C CNN
+ 1 2100 5600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND017
+U 1 1 22760FC6
+P 6300 3300
+F 0 "#GND017" H 6300 3400 60 0001 C CNN
+F 1 "GND" H 6300 3200 60 0000 C CNN
+F 2 "" H 6300 3300 60 0001 C CNN
+F 3 "" H 6300 3300 60 0001 C CNN
+ 1 6300 3300
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND018
+U 1 1 22760FD0
+P 5200 3500
+F 0 "#GND018" H 5200 3600 60 0001 C CNN
+F 1 "GND" H 5050 3450 60 0001 C CNN
+F 2 "" H 5200 3500 60 0001 C CNN
+F 3 "" H 5200 3500 60 0001 C CNN
+ 1 5200 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND019
+U 1 1 22760FDA
+P 4500 4450
+F 0 "#GND019" H 4500 4550 60 0001 C CNN
+F 1 "GND" H 4500 4350 60 0001 C CNN
+F 2 "" H 4500 4450 60 0001 C CNN
+F 3 "" H 4500 4450 60 0001 C CNN
+ 1 4500 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND020
+U 1 1 22760FE9
+P 3300 1850
+F 0 "#GND020" H 3300 1950 60 0001 C CNN
+F 1 "GND" H 3300 1750 60 0001 C CNN
+F 2 "" H 3300 1850 60 0001 C CNN
+F 3 "" H 3300 1850 60 0001 C CNN
+ 1 3300 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND021
+U 1 1 22761002
+P 5500 5150
+F 0 "#GND021" H 5500 5250 60 0001 C CNN
+F 1 "GND" H 5500 5050 60 0001 C CNN
+F 2 "" H 5500 5150 60 0001 C CNN
+F 3 "" H 5500 5150 60 0001 C CNN
+ 1 5500 5150
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND022
+U 1 1 22761007
+P 6200 5150
+F 0 "#GND022" H 6200 5250 60 0001 C CNN
+F 1 "GND" H 6200 5050 60 0001 C CNN
+F 2 "" H 6200 5150 60 0001 C CNN
+F 3 "" H 6200 5150 60 0001 C CNN
+ 1 6200 5150
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND023
+U 1 1 2276104D
+P 9800 2150
+F 0 "#GND023" H 9800 2250 60 0001 C CNN
+F 1 "GND" H 9800 2050 60 0001 C CNN
+F 2 "" H 9800 2150 60 0001 C CNN
+F 3 "" H 9800 2150 60 0001 C CNN
+ 1 9800 2150
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND024
+U 1 1 2276105C
+P 7200 1750
+F 0 "#GND024" H 7200 1850 60 0001 C CNN
+F 1 "GND" H 7200 1650 60 0001 C CNN
+F 2 "" H 7200 1750 60 0001 C CNN
+F 3 "" H 7200 1750 60 0001 C CNN
+ 1 7200 1750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND025
+U 1 1 2276106B
+P 9800 3750
+F 0 "#GND025" H 9800 3850 60 0001 C CNN
+F 1 "GND" H 9800 3650 60 0001 C CNN
+F 2 "" H 9800 3750 60 0001 C CNN
+F 3 "" H 9800 3750 60 0001 C CNN
+ 1 9800 3750
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND026
+U 1 1 22761084
+P 9800 5350
+F 0 "#GND026" H 9800 5450 60 0001 C CNN
+F 1 "GND" H 9800 5250 60 0001 C CNN
+F 2 "" H 9800 5350 60 0001 C CNN
+F 3 "" H 9800 5350 60 0001 C CNN
+ 1 9800 5350
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND027
+U 1 1 227610A2
+P 6800 3950
+F 0 "#GND027" H 6800 4050 60 0001 C CNN
+F 1 "GND" H 6800 3850 60 0001 C CNN
+F 2 "" H 6800 3950 60 0001 C CNN
+F 3 "" H 6800 3950 60 0001 C CNN
+ 1 6800 3950
+ 1 0 0 -1
+$EndComp
+Text Label 4500 3400 0 60 ~ 0
+CHROM
+Text Label 8400 1200 0 60 ~ 0
+CHROM
+Text Label 4600 3200 0 60 ~ 0
+LUM
+Text Label 8500 2800 0 60 ~ 0
+LUM
+Text Label 8500 4400 0 60 ~ 0
+CVBS
+$Comp
+L VCC #VCC028
+U 1 1 4BF036B3
+P 4700 1500
+F 0 "#VCC028" H 4700 1600 30 0001 C CNN
+F 1 "VCC" H 4700 1600 30 0000 C CNN
+F 2 "" H 4700 1500 60 0001 C CNN
+F 3 "" H 4700 1500 60 0001 C CNN
+ 1 4700 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5F #+029
+U 1 1 4BF036B2
+P 9800 900
+F 0 "#+029" H 9800 1100 40 0001 C CNN
+F 1 "+5F" H 9800 1050 40 0000 C CNN
+F 2 "" H 9800 900 60 0001 C CNN
+F 3 "" H 9800 900 60 0001 C CNN
+ 1 9800 900
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5F #+030
+U 1 1 4BF036B1
+P 7100 1100
+F 0 "#+030" H 7100 1300 40 0001 C CNN
+F 1 "+5F" H 7100 1250 40 0000 C CNN
+F 2 "" H 7100 1100 60 0001 C CNN
+F 3 "" H 7100 1100 60 0001 C CNN
+ 1 7100 1100
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5F #+031
+U 1 1 4BF036B0
+P 9800 2500
+F 0 "#+031" H 9800 2700 40 0001 C CNN
+F 1 "+5F" H 9800 2650 40 0000 C CNN
+F 2 "" H 9800 2500 60 0001 C CNN
+F 3 "" H 9800 2500 60 0001 C CNN
+ 1 9800 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L +5F #+032
+U 1 1 4BF0369E
+P 9800 4100
+F 0 "#+032" H 9800 4300 40 0001 C CNN
+F 1 "+5F" H 9800 4250 40 0000 C CNN
+F 2 "" H 9800 4100 60 0001 C CNN
+F 3 "" H 9800 4100 60 0001 C CNN
+ 1 9800 4100
+ 1 0 0 -1
+$EndComp
+Connection ~ 2500 1800
+Connection ~ 7100 1200
+Connection ~ 6900 2700
+Connection ~ 5200 3000
+Connection ~ 5800 3000
+Connection ~ 6800 3850
+Connection ~ 3900 1500
+Connection ~ 5500 4600
+Wire Wire Line
+ 2400 1800 2700 1800
+Wire Wire Line
+ 4600 2400 4500 2400
+Wire Wire Line
+ 4400 3000 6300 3000
+Wire Wire Line
+ 4400 3200 4900 3200
+Wire Wire Line
+ 4400 3300 4900 3300
+Wire Wire Line
+ 8400 1200 8900 1200
+Wire Wire Line
+ 9400 1200 9500 1200
+Wire Wire Line
+ 2600 3200 950 3200
+Wire Wire Line
+ 4400 3400 4900 3400
+Wire Wire Line
+ 4400 3600 5500 3600
+Wire Wire Line
+ 9800 1500 10000 1500
+Wire Wire Line
+ 4400 3700 5500 3700
+Wire Wire Line
+ 4400 3900 4500 3900
+Wire Wire Line
+ 2600 4100 2100 4100
+Wire Wire Line
+ 4600 1500 4700 1500
+Wire Wire Line
+ 8500 2800 8900 2800
+Wire Wire Line
+ 9400 2800 9500 2800
+Wire Wire Line
+ 9800 3100 10000 3100
+Wire Wire Line
+ 9400 4400 9500 4400
+Wire Wire Line
+ 9800 4700 10000 4700
+Wire Wire Line
+ 950 3200 950 3450
+Wire Wire Line
+ 2100 4100 2100 4500
+Wire Wire Line
+ 4500 3900 4500 4000
+Wire Wire Line
+ 5500 4500 5500 4700
+Wire Wire Line
+ 4500 2400 4500 2600
+Wire Wire Line
+ 5500 3700 5500 3900
+Wire Wire Line
+ 6200 4700 6200 4600
+Wire Wire Line
+ 5800 3000 5800 3300
+Wire Wire Line
+ 6800 3950 6800 3600
+Wire Wire Line
+ 6900 2400 6900 3000
+Wire Wire Line
+ 9800 900 9800 1000
+Wire Wire Line
+ 9800 1400 9800 1600
+Wire Wire Line
+ 9800 2500 9800 2600
+Wire Wire Line
+ 9800 3000 9800 3200
+Wire Wire Line
+ 9800 4100 9800 4200
+Wire Wire Line
+ 9800 4600 9800 4800
+Wire Wire Line
+ 6200 4600 5500 4600
+Wire Wire Line
+ 3900 1500 3900 1600
+Wire Wire Line
+ 2500 2600 2600 2600
+Wire Wire Line
+ 2500 1800 2500 1950
+Connection ~ 9800 4700
+Wire Wire Line
+ 6800 3600 6600 3600
+$Comp
+L POT POT1
+U 1 1 2276109D
+P 6350 3600
+F 0 "POT1" H 6150 3750 60 0000 C CNN
+F 1 "100K" H 6350 3500 60 0000 C CNN
+F 2 "lib_smd:POT_CMS" H 6350 3600 60 0001 C CNN
+F 3 "" H 6350 3600 60 0001 C CNN
+ 1 6350 3600
+ 1 0 0 1
+$EndComp
+Wire Wire Line
+ 6000 3600 6100 3600
+Wire Wire Line
+ 8400 4400 8900 4400
+Text HLabel 10600 4700 2 60 Output ~ 0
+CVBSOUT
+Wire Wire Line
+ 5200 3000 5200 3100
+Wire Wire Line
+ 5800 3300 5900 3300
+Wire Wire Line
+ 6900 3000 6800 3000
+Wire Wire Line
+ 4500 2600 4400 2600
+Text HLabel 10600 3100 2 60 Output ~ 0
+YOUT
+Connection ~ 9800 3100
+Text HLabel 10600 1500 2 60 Output ~ 0
+COUT
+$Comp
+L VCC #VCC033
+U 1 1 4BF0369D
+P 8000 1200
+F 0 "#VCC033" H 8000 1300 30 0001 C CNN
+F 1 "VCC" H 8000 1300 30 0000 C CNN
+F 2 "" H 8000 1200 60 0001 C CNN
+F 3 "" H 8000 1200 60 0001 C CNN
+ 1 8000 1200
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7900 1200 8000 1200
+$Comp
+L NPN Q1
+U 1 1 22761039
+P 9700 1200
+F 0 "Q1" H 9600 1450 50 0000 C CNN
+F 1 "BC848" H 9600 1350 50 0000 C CNN
+F 2 "lib_smd:SOT23EBC" H 9700 1200 60 0001 C CNN
+F 3 "" H 9700 1200 60 0001 C CNN
+ 1 9700 1200
+ 1 0 0 -1
+$EndComp
+$Comp
+L NPN Q2
+U 1 1 22761066
+P 9700 2800
+F 0 "Q2" H 9600 3050 50 0000 C CNN
+F 1 "BC848" H 9600 2950 50 0000 C CNN
+F 2 "lib_smd:SOT23EBC" H 9700 2800 60 0001 C CNN
+F 3 "" H 9700 2800 60 0001 C CNN
+ 1 9700 2800
+ 1 0 0 -1
+$EndComp
+$Comp
+L NPN Q3
+U 1 1 2276107F
+P 9700 4400
+F 0 "Q3" H 9600 4650 50 0000 C CNN
+F 1 "BC848" H 9600 4550 50 0000 C CNN
+F 2 "lib_smd:SOT23EBC" H 9700 4400 60 0001 C CNN
+F 3 "" H 9700 4400 60 0001 C CNN
+ 1 9700 4400
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C54
+U 1 1 22760F76
+P 3900 1800
+F 0 "C54" H 4050 1950 50 0000 C CNN
+F 1 "4.7uF" H 4050 1650 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3900 1800 60 0001 C CNN
+F 3 "" H 3900 1800 60 0001 C CNN
+ 1 3900 1800
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R39
+U 1 1 22761048
+P 10250 1500
+F 0 "R39" V 10330 1500 50 0000 C CNN
+F 1 "68" V 10250 1500 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 10250 1500 60 0001 C CNN
+F 3 "" H 10250 1500 60 0001 C CNN
+ 1 10250 1500
+ 0 1 1 0
+$EndComp
+$Comp
+L R R16
+U 1 1 2276103E
+P 9150 1200
+F 0 "R16" V 9230 1200 50 0000 C CNN
+F 1 "220" V 9150 1200 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9150 1200 60 0001 C CNN
+F 3 "" H 9150 1200 60 0001 C CNN
+ 1 9150 1200
+ 0 1 1 0
+$EndComp
+$Comp
+L R R17
+U 1 1 2276107A
+P 9150 2800
+F 0 "R17" V 9230 2800 50 0000 C CNN
+F 1 "220" V 9150 2800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9150 2800 60 0001 C CNN
+F 3 "" H 9150 2800 60 0001 C CNN
+ 1 9150 2800
+ 0 1 1 0
+$EndComp
+$Comp
+L R R40
+U 1 1 22761075
+P 10250 3100
+F 0 "R40" V 10350 3100 60 0000 C CNN
+F 1 "68" V 10250 3100 60 0000 C CNN
+F 2 "lib_smd:SM1206" H 10250 3100 60 0001 C CNN
+F 3 "" H 10250 3100 60 0001 C CNN
+ 1 10250 3100
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R18
+U 1 1 22761093
+P 9150 4400
+F 0 "R18" V 9230 4400 50 0000 C CNN
+F 1 "220" V 9150 4400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9150 4400 60 0001 C CNN
+F 3 "" H 9150 4400 60 0001 C CNN
+ 1 9150 4400
+ 0 1 1 0
+$EndComp
+$Comp
+L R R41
+U 1 1 2276108E
+P 10250 4700
+F 0 "R41" V 10330 4700 50 0000 C CNN
+F 1 "68" V 10250 4700 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 10250 4700 60 0001 C CNN
+F 3 "" H 10250 4700 60 0001 C CNN
+ 1 10250 4700
+ 0 1 1 0
+$EndComp
+Connection ~ 9800 1500
+$Comp
+L R R30
+U 1 1 22760FE4
+P 2150 1800
+F 0 "R30" V 2230 1800 50 0000 C CNN
+F 1 "3,3K" V 2150 1800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2150 1800 60 0001 C CNN
+F 3 "" H 2150 1800 60 0001 C CNN
+ 1 2150 1800
+ 0 1 1 0
+$EndComp
+$Comp
+L R R31
+U 1 1 22760FDF
+P 2950 1800
+F 0 "R31" V 3030 1800 50 0000 C CNN
+F 1 "470" V 2950 1800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2950 1800 60 0001 C CNN
+F 3 "" H 2950 1800 60 0001 C CNN
+ 1 2950 1800
+ 0 1 1 0
+$EndComp
+$Comp
+L R R10
+U 1 1 22760F80
+P 4850 2400
+F 0 "R10" V 4930 2400 50 0000 C CNN
+F 1 "1K" V 4850 2400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4850 2400 60 0001 C CNN
+F 3 "" H 4850 2400 60 0001 C CNN
+ 1 4850 2400
+ 0 1 1 0
+$EndComp
+$Comp
+L R R11
+U 1 1 22760FBC
+P 6550 3000
+F 0 "R11" V 6630 3000 50 0000 C CNN
+F 1 "1K" V 6550 3000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 6550 3000 60 0001 C CNN
+F 3 "" H 6550 3000 60 0001 C CNN
+ 1 6550 3000
+ 0 1 1 0
+$EndComp
+$Comp
+L R R9
+U 1 1 22761098
+P 5750 3600
+F 0 "R9" V 5830 3600 50 0000 C CNN
+F 1 "150K" V 5750 3600 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5750 3600 60 0001 C CNN
+F 3 "" H 5750 3600 60 0001 C CNN
+ 1 5750 3600
+ 0 1 1 0
+$EndComp
+$Comp
+L C C61
+U 1 1 22760F8A
+P 2500 2150
+F 0 "C61" H 2600 2250 50 0000 C CNN
+F 1 "47nF" H 2600 2050 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2500 2150 60 0001 C CNN
+F 3 "" H 2500 2150 60 0001 C CNN
+ 1 2500 2150
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C60
+U 1 1 22760F67
+P 2300 3500
+F 0 "C60" V 2350 3650 50 0000 C CNN
+F 1 "47nF" V 2350 3350 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2300 3500 60 0001 C CNN
+F 3 "" H 2300 3500 60 0001 C CNN
+ 1 2300 3500
+ 0 1 1 0
+$EndComp
+$Comp
+L C C43
+U 1 1 22760F8F
+P 1500 4150
+F 0 "C43" H 1650 4250 50 0000 C CNN
+F 1 "220nF" H 1650 4050 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 1500 4150 60 0001 C CNN
+F 3 "" H 1500 4150 60 0001 C CNN
+ 1 1500 4150
+ 1 0 0 -1
+$EndComp
+$Comp
+L CTRIM CV1
+U 1 1 22760FA8
+P 2100 5350
+F 0 "CV1" H 2230 5270 50 0000 C CNN
+F 1 "5/30pF" H 2250 5190 50 0000 C CNN
+F 2 "Discret:CV3-30PF" H 2100 5350 60 0001 C CNN
+F 3 "" H 2100 5350 60 0001 C CNN
+ 1 2100 5350
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C45
+U 1 1 22760FD5
+P 4500 4200
+F 0 "C45" H 4650 4300 50 0000 C CNN
+F 1 "220nF" H 4650 4050 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4500 4200 60 0001 C CNN
+F 3 "" H 4500 4200 60 0001 C CNN
+ 1 4500 4200
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C48
+U 1 1 22760FCB
+P 5200 3300
+F 0 "C48" H 5100 3200 50 0000 C CNN
+F 1 "22nF" H 5100 3400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5200 3300 60 0001 C CNN
+F 3 "" H 5200 3300 60 0001 C CNN
+ 1 5200 3300
+ -1 0 0 1
+$EndComp
+$Comp
+L CP C64
+U 1 1 22760FC1
+P 6100 3300
+F 0 "C64" V 6250 3450 50 0000 C CNN
+F 1 "6,8uF" V 6250 3150 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 6100 3300 60 0001 C CNN
+F 3 "" H 6100 3300 60 0001 C CNN
+ 1 6100 3300
+ 0 -1 -1 0
+$EndComp
+$Comp
+L C C44
+U 1 1 22760F99
+P 950 3650
+F 0 "C44" H 1100 3750 50 0000 C CNN
+F 1 "220nF" H 1100 3550 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 950 3650 60 0001 C CNN
+F 3 "" H 950 3650 60 0001 C CNN
+ 1 950 3650
+ 1 0 0 -1
+$EndComp
+Text HLabel 1900 1800 0 60 Input ~ 0
+CSYNC-OUT
+$Comp
+L C C53
+U 1 1 22760FF8
+P 5500 4900
+F 0 "C53" H 5550 5000 50 0000 L CNN
+F 1 "330pF" H 5550 4800 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 5500 4900 60 0001 C CNN
+F 3 "" H 5500 4900 60 0001 C CNN
+ 1 5500 4900
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L1
+U 1 1 22760FF3
+P 5500 4200
+F 0 "L1" V 5450 4200 40 0000 C CNN
+F 1 "2,2uH" V 5600 4200 40 0000 C CNN
+F 2 "lib_smd:SM1812" H 5500 4200 60 0001 C CNN
+F 3 "" H 5500 4200 60 0001 C CNN
+ 1 5500 4200
+ 1 0 0 -1
+$EndComp
+$Comp
+L INDUCTOR L3
+U 1 1 22761052
+P 7600 1200
+F 0 "L3" V 7800 1200 50 0000 C CNN
+F 1 "22uH" V 7700 1200 50 0000 C CNN
+F 2 "lib_smd:SM1812" H 7600 1200 60 0001 C CNN
+F 3 "" H 7600 1200 60 0001 C CNN
+ 1 7600 1200
+ 0 1 -1 0
+$EndComp
+$Comp
+L INDUCTOR L2
+U 1 1 22760F71
+P 4300 1500
+F 0 "L2" V 4500 1500 50 0000 C CNN
+F 1 "22uH" V 4400 1500 50 0000 C CNN
+F 2 "lib_smd:SM1812" H 4300 1500 60 0001 C CNN
+F 3 "" H 4300 1500 60 0001 C CNN
+ 1 4300 1500
+ 0 1 -1 0
+$EndComp
+$Comp
+L TDA8501 U20
+U 1 1 22760F4E
+P 3500 3400
+F 0 "U20" H 3500 3500 60 0000 C CNN
+F 1 "TDA8501" H 3500 3300 60 0000 C CNN
+F 2 "lib_smd:SO24E" H 3500 3400 60 0001 C CNN
+F 3 "" H 3500 3400 60 0001 C CNN
+ 1 3500 3400
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C46
+U 1 1 22760FFD
+P 6200 4900
+F 0 "C46" H 6250 5000 50 0000 L CNN
+F 1 "220pF" H 6250 4800 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 6200 4900 60 0001 C CNN
+F 3 "" H 6200 4900 60 0001 C CNN
+ 1 6200 4900
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R34
+U 1 1 22761089
+P 9800 5050
+F 0 "R34" V 9880 5050 50 0000 C CNN
+F 1 "470" V 9800 5050 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9800 5050 60 0001 C CNN
+F 3 "" H 9800 5050 60 0001 C CNN
+ 1 9800 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R33
+U 1 1 22761070
+P 9800 3450
+F 0 "R33" V 9880 3450 50 0000 C CNN
+F 1 "470" V 9800 3450 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9800 3450 60 0001 C CNN
+F 3 "" H 9800 3450 60 0001 C CNN
+ 1 9800 3450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R32
+U 1 1 22761043
+P 9800 1850
+F 0 "R32" V 9880 1850 50 0000 C CNN
+F 1 "470" V 9800 1850 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 9800 1850 60 0001 C CNN
+F 3 "" H 9800 1850 60 0001 C CNN
+ 1 9800 1850
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C55
+U 1 1 22761057
+P 7200 1500
+F 0 "C55" H 7350 1600 50 0000 C CNN
+F 1 "4.7uF" H 7350 1400 50 0000 C CNN
+F 2 "lib_smd:SM1210L" H 7200 1500 60 0001 C CNN
+F 3 "" H 7200 1500 60 0001 C CNN
+ 1 7200 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C59
+U 1 1 22760F62
+P 1800 3600
+F 0 "C59" V 1850 3750 50 0000 C CNN
+F 1 "47nF" V 1850 3450 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 1800 3600 60 0001 C CNN
+F 3 "" H 1800 3600 60 0001 C CNN
+ 1 1800 3600
+ 0 1 1 0
+$EndComp
+$Comp
+L C C58
+U 1 1 22760F53
+P 2300 3700
+F 0 "C58" V 2350 3850 50 0000 C CNN
+F 1 "47nF" V 2350 3550 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2300 3700 60 0001 C CNN
+F 3 "" H 2300 3700 60 0001 C CNN
+ 1 2300 3700
+ 0 1 1 0
+$EndComp
+$Comp
+L CRYSTAL X3
+U 1 1 22760FA3
+P 2100 4800
+F 0 "X3" V 2300 4900 60 0000 C CNN
+F 1 "4.433618MHz" V 1900 4450 60 0000 C CNN
+F 2 "Discret:HC-18UH" H 2100 4800 60 0001 C CNN
+F 3 "" H 2100 4800 60 0001 C CNN
+ 1 2100 4800
+ 0 -1 -1 0
+$EndComp
+Connection ~ 3500 1500
+Wire Wire Line
+ 7200 1200 7200 1300
+Connection ~ 7200 1200
+Wire Wire Line
+ 7100 1200 7100 1100
+Wire Wire Line
+ 3900 2050 3900 2000
+Wire Wire Line
+ 3300 1850 3300 1800
+Wire Wire Line
+ 3300 1800 3200 1800
+Wire Wire Line
+ 1500 4400 1500 4350
+Wire Wire Line
+ 950 3900 950 3850
+Wire Wire Line
+ 2100 5600 2100 5550
+Wire Wire Line
+ 3500 4500 3500 4450
+Wire Wire Line
+ 4500 4450 4500 4400
+Wire Wire Line
+ 4450 3800 4400 3800
+Wire Wire Line
+ 6200 5100 6200 5150
+Wire Wire Line
+ 5500 5150 5500 5100
+Wire Wire Line
+ 7200 1750 7200 1700
+Wire Wire Line
+ 9800 2150 9800 2100
+Wire Wire Line
+ 9800 3750 9800 3700
+Wire Wire Line
+ 9800 5350 9800 5300
+Wire Wire Line
+ 10600 1500 10500 1500
+Wire Wire Line
+ 10500 3100 10600 3100
+Wire Wire Line
+ 10500 4700 10600 4700
+$EndSCHEMATC
diff --git a/demos/video/muxdata.sch b/demos/video/muxdata.sch
new file mode 100644
index 0000000..4b310ca
--- /dev/null
+++ b/demos/video/muxdata.sch
@@ -0,0 +1,651 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 2 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+NoConn ~ 6100 4800
+Wire Wire Line
+ 6100 2400 5600 2400
+Text HLabel 6100 3200 0 60 Input ~ 0
+CLAMP
+Text HLabel 6100 3400 0 60 Input ~ 0
+CSYNC-OUT
+Text HLabel 6100 3300 0 60 Input ~ 0
+BLANK-
+Text HLabel 6100 3700 0 60 Input ~ 0
+ACQ_ON
+NoConn ~ 8000 4300
+NoConn ~ 8000 4200
+NoConn ~ 6100 3100
+Wire Wire Line
+ 6100 4500 5350 4500
+Text Label 5350 4500 0 60 ~ 0
+ACCES_RAM-
+Text HLabel 2400 5700 0 60 Input ~ 0
+ACCES_RAM-
+Text HLabel 2400 5600 0 60 Input ~ 0
+DATA_WR
+Text HLabel 2350 900 0 60 BiDi ~ 0
+DPC[0..31]
+Wire Wire Line
+ 2600 5400 2050 5400
+Wire Wire Line
+ 2600 5300 2050 5300
+Wire Wire Line
+ 2600 5200 2050 5200
+Wire Wire Line
+ 2600 5100 2050 5100
+Wire Wire Line
+ 2600 5000 2050 5000
+Wire Wire Line
+ 2600 4900 2050 4900
+Wire Wire Line
+ 2600 4800 2050 4800
+Wire Wire Line
+ 2600 4700 2050 4700
+Wire Wire Line
+ 2600 4200 2050 4200
+Wire Wire Line
+ 2600 4100 2050 4100
+Wire Wire Line
+ 2600 4000 2050 4000
+Wire Wire Line
+ 2600 3900 2050 3900
+Wire Wire Line
+ 2600 3800 2050 3800
+Wire Wire Line
+ 2600 3700 2050 3700
+Wire Wire Line
+ 2600 3600 2050 3600
+Wire Wire Line
+ 2600 3500 2050 3500
+Wire Wire Line
+ 2600 3000 2050 3000
+Wire Wire Line
+ 2600 2900 2050 2900
+Wire Wire Line
+ 2600 2800 2050 2800
+Wire Wire Line
+ 2600 2700 2050 2700
+Wire Wire Line
+ 2600 2600 2050 2600
+Wire Wire Line
+ 2600 2500 2050 2500
+Wire Wire Line
+ 2600 2400 2050 2400
+Wire Wire Line
+ 2600 2300 2050 2300
+Wire Wire Line
+ 2600 1800 2050 1800
+Wire Wire Line
+ 2600 1700 2050 1700
+Wire Wire Line
+ 2600 1600 2050 1600
+Wire Wire Line
+ 2600 1500 2050 1500
+Wire Wire Line
+ 2600 1400 2050 1400
+Wire Wire Line
+ 2600 1300 2050 1300
+Wire Wire Line
+ 2600 1200 2050 1200
+Wire Wire Line
+ 2600 1100 2050 1100
+Text Label 2100 5400 0 60 ~ 0
+DPC31
+Text Label 2100 5300 0 60 ~ 0
+DPC30
+Text Label 2100 5200 0 60 ~ 0
+DPC29
+Text Label 2100 5100 0 60 ~ 0
+DPC28
+Text Label 2100 5000 0 60 ~ 0
+DPC27
+Text Label 2100 4900 0 60 ~ 0
+DPC26
+Text Label 2100 4800 0 60 ~ 0
+DPC25
+Text Label 2100 4700 0 60 ~ 0
+DPC24
+Text Label 2100 4200 0 60 ~ 0
+DPC23
+Text Label 2100 4100 0 60 ~ 0
+DPC22
+Text Label 2100 4000 0 60 ~ 0
+DPC21
+Text Label 2100 3900 0 60 ~ 0
+DPC20
+Text Label 2100 3800 0 60 ~ 0
+DPC19
+Text Label 2100 3700 0 60 ~ 0
+DPC18
+Text Label 2100 3600 0 60 ~ 0
+DPC17
+Text Label 2100 3500 0 60 ~ 0
+DPC16
+Text Label 2100 3000 0 60 ~ 0
+DPC15
+Text Label 2100 2900 0 60 ~ 0
+DPC14
+Text Label 2100 2800 0 60 ~ 0
+DPC13
+Text Label 2100 2700 0 60 ~ 0
+DPC12
+Text Label 2100 2600 0 60 ~ 0
+DPC11
+Text Label 2100 2500 0 60 ~ 0
+DPC10
+Text Label 2100 2400 0 60 ~ 0
+DPC9
+Text Label 2100 2300 0 60 ~ 0
+DPC8
+Text Label 2100 1800 0 60 ~ 0
+DPC7
+Text Label 2100 1700 0 60 ~ 0
+DPC6
+Text Label 2100 1600 0 60 ~ 0
+DPC5
+Text Label 2100 1500 0 60 ~ 0
+DPC4
+Text Label 2100 1400 0 60 ~ 0
+DPC3
+Text Label 2100 1300 0 60 ~ 0
+DPC2
+Text Label 2100 1200 0 60 ~ 0
+DPC1
+Text Label 2100 1100 0 60 ~ 0
+DPC0
+Connection ~ 2500 3200
+Connection ~ 2550 3300
+Connection ~ 2550 4500
+Connection ~ 2500 4400
+Connection ~ 2500 5600
+Connection ~ 2550 5700
+Wire Wire Line
+ 2600 3300 2550 3300
+Wire Wire Line
+ 2600 4500 2550 4500
+Wire Wire Line
+ 2600 5700 2400 5700
+Wire Wire Line
+ 2550 5700 2550 2100
+Wire Wire Line
+ 2550 2100 2600 2100
+Wire Wire Line
+ 2600 3200 2500 3200
+Wire Wire Line
+ 2600 4400 2500 4400
+Wire Wire Line
+ 2400 5600 2600 5600
+Wire Wire Line
+ 2500 5600 2500 2000
+Wire Wire Line
+ 2500 2000 2600 2000
+Wire Wire Line
+ 4000 5400 4550 5400
+Wire Wire Line
+ 4000 5300 4550 5300
+Wire Wire Line
+ 4000 5200 4550 5200
+Wire Wire Line
+ 4000 5100 4550 5100
+Wire Wire Line
+ 4000 5000 4550 5000
+Wire Wire Line
+ 4000 4900 4550 4900
+Wire Wire Line
+ 4000 4800 4550 4800
+Wire Wire Line
+ 4000 4700 4550 4700
+Wire Wire Line
+ 4000 4200 4550 4200
+Wire Wire Line
+ 4000 4100 4550 4100
+Wire Wire Line
+ 4000 4000 4550 4000
+Wire Wire Line
+ 4000 3900 4550 3900
+Wire Wire Line
+ 4000 3800 4550 3800
+Wire Wire Line
+ 4000 3700 4550 3700
+Wire Wire Line
+ 4000 3600 4550 3600
+Wire Wire Line
+ 4000 3500 4550 3500
+Wire Wire Line
+ 4000 3000 4550 3000
+Wire Wire Line
+ 4000 2900 4550 2900
+Wire Wire Line
+ 4000 2800 4550 2800
+Wire Wire Line
+ 4000 2700 4550 2700
+Wire Wire Line
+ 4000 2600 4550 2600
+Wire Wire Line
+ 4000 2500 4550 2500
+Wire Wire Line
+ 4000 2400 4550 2400
+Wire Wire Line
+ 4000 2300 4550 2300
+Wire Wire Line
+ 4000 1800 4550 1800
+Wire Wire Line
+ 4000 1700 4550 1700
+Wire Wire Line
+ 4000 1600 4550 1600
+Wire Wire Line
+ 4000 1500 4550 1500
+Wire Wire Line
+ 4000 1400 4550 1400
+Wire Wire Line
+ 4000 1300 4550 1300
+Wire Wire Line
+ 4000 1200 4550 1200
+Wire Wire Line
+ 4000 1100 4550 1100
+Text Label 4100 5400 0 60 ~ 0
+VRAM31
+Text Label 4100 5300 0 60 ~ 0
+VRAM30
+Text Label 4100 5200 0 60 ~ 0
+VRAM29
+Text Label 4100 5100 0 60 ~ 0
+VRAM28
+Text Label 4100 5000 0 60 ~ 0
+VRAM27
+Text Label 4100 4900 0 60 ~ 0
+VRAM26
+Text Label 4100 4800 0 60 ~ 0
+VRAM25
+Text Label 4100 4700 0 60 ~ 0
+VRAM24
+Text Label 4100 4200 0 60 ~ 0
+VRAM23
+Text Label 4100 4100 0 60 ~ 0
+VRAM22
+Text Label 4100 4000 0 60 ~ 0
+VRAM21
+Text Label 4100 3900 0 60 ~ 0
+VRAM20
+Text Label 4100 3800 0 60 ~ 0
+VRAM19
+Text Label 4100 3700 0 60 ~ 0
+VRAM18
+Text Label 4100 3600 0 60 ~ 0
+VRAM17
+Text Label 4100 3500 0 60 ~ 0
+VRAM16
+Text Label 4100 3000 0 60 ~ 0
+VRAM15
+Text Label 4100 2900 0 60 ~ 0
+VRAM14
+Text Label 4100 2800 0 60 ~ 0
+VRAM13
+Text Label 4100 2700 0 60 ~ 0
+VRAM12
+Text Label 4100 2600 0 60 ~ 0
+VRAM11
+Text Label 4100 2500 0 60 ~ 0
+VRAM10
+Text Label 4100 2400 0 60 ~ 0
+VRAM9
+Text Label 4100 2300 0 60 ~ 0
+VRAM8
+Text Label 4100 1800 0 60 ~ 0
+VRAM7
+Text Label 4100 1700 0 60 ~ 0
+VRAM6
+Text Label 4100 1600 0 60 ~ 0
+VRAM5
+Text Label 4100 1500 0 60 ~ 0
+VRAM4
+Text Label 4100 1400 0 60 ~ 0
+VRAM3
+Text Label 4100 1300 0 60 ~ 0
+VRAM2
+Text Label 4100 1200 0 60 ~ 0
+VRAM1
+Text Label 4100 1100 0 60 ~ 0
+VRAM0
+$Comp
+L 74LS245 U6
+U 1 1 4BF036D5
+P 3300 5200
+F 0 "U6" H 3300 5000 60 0000 C CNN
+F 1 "74LS245" H 3300 4900 60 0000 C CNN
+F 2 "lib_smd:SO20L" H 3300 5200 60 0001 C CNN
+F 3 "" H 3300 5200 60 0001 C CNN
+ 1 3300 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS245 U5
+U 1 1 4BF036D6
+P 3300 4000
+F 0 "U5" H 3300 3800 60 0000 C CNN
+F 1 "74LS245" H 3300 3700 60 0000 C CNN
+F 2 "lib_smd:SO20L" H 3300 4000 60 0001 C CNN
+F 3 "" H 3300 4000 60 0001 C CNN
+ 1 3300 4000
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS245 U4
+U 1 1 4BF036D7
+P 3300 2800
+F 0 "U4" H 3300 2600 60 0000 C CNN
+F 1 "74LS245" H 3300 2500 60 0000 C CNN
+F 2 "lib_smd:SO20L" H 3300 2800 60 0001 C CNN
+F 3 "" H 3300 2800 60 0001 C CNN
+ 1 3300 2800
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74LS245 U3
+U 1 1 33A7E303
+P 3300 1600
+F 0 "U3" H 3300 1400 60 0000 C CNN
+F 1 "74LS245" H 3300 1300 60 0000 C CNN
+F 2 "lib_smd:SO20L" H 3300 1600 60 0001 C CNN
+F 3 "" H 3300 1600 60 0001 C CNN
+ 1 3300 1600
+ 1 0 0 -1
+$EndComp
+NoConn ~ 6100 2300
+NoConn ~ 6100 4000
+NoConn ~ 6100 3900
+NoConn ~ 6100 3800
+NoConn ~ 6100 3500
+NoConn ~ 6100 3000
+NoConn ~ 6100 2900
+NoConn ~ 6100 2800
+NoConn ~ 6100 2600
+Text HLabel 6100 2200 0 60 Input ~ 0
+X_DIN
+Text HLabel 5600 2400 0 60 Input ~ 0
+X_CLK
+Wire Wire Line
+ 8000 3400 8500 3400
+Text HLabel 8500 3400 2 60 Input ~ 0
+CLKCDA
+Text HLabel 6100 2700 0 60 Input ~ 0
+CLKCAD
+Wire Wire Line
+ 8600 4600 8000 4600
+Wire Wire Line
+ 8600 4500 8000 4500
+Wire Wire Line
+ 8600 5300 8000 5300
+Wire Wire Line
+ 8600 6100 8000 6100
+Wire Wire Line
+ 6100 5200 5650 5200
+Wire Wire Line
+ 8600 1700 8000 1700
+Wire Wire Line
+ 8600 3300 8000 3300
+Wire Wire Line
+ 8600 2500 8000 2500
+Wire Wire Line
+ 8600 4400 8000 4400
+Wire Wire Line
+ 8600 5200 8000 5200
+Wire Wire Line
+ 8600 6000 8000 6000
+Wire Wire Line
+ 6100 5300 5650 5300
+Wire Wire Line
+ 8600 1600 8000 1600
+Wire Wire Line
+ 8600 3200 8000 3200
+Wire Wire Line
+ 8600 2400 8000 2400
+NoConn ~ 8000 3600
+Wire Wire Line
+ 8000 5400 8450 5400
+Wire Wire Line
+ 5650 6000 6100 6000
+Wire Wire Line
+ 5650 5000 6100 5000
+Wire Wire Line
+ 8000 1800 8450 1800
+Wire Wire Line
+ 8000 3500 8450 3500
+Wire Wire Line
+ 8000 2600 8450 2600
+Wire Wire Line
+ 8000 4700 8450 4700
+Wire Wire Line
+ 8000 5500 8450 5500
+Wire Wire Line
+ 5650 5900 6100 5900
+Wire Wire Line
+ 5650 2500 6100 2500
+Wire Wire Line
+ 8000 1900 8450 1900
+Wire Wire Line
+ 8000 3700 8450 3700
+Wire Wire Line
+ 8000 2700 8450 2700
+Wire Wire Line
+ 8000 4800 8450 4800
+Wire Wire Line
+ 8000 5600 8450 5600
+Wire Wire Line
+ 5650 5700 6100 5700
+Wire Wire Line
+ 5650 4200 6100 4200
+Wire Wire Line
+ 8000 2000 8450 2000
+Wire Wire Line
+ 8000 3800 8450 3800
+Wire Wire Line
+ 8000 2800 8450 2800
+Wire Wire Line
+ 8000 4900 8450 4900
+Wire Wire Line
+ 8000 5700 8450 5700
+Wire Wire Line
+ 5650 5600 6100 5600
+Wire Wire Line
+ 5650 4400 6100 4400
+Wire Wire Line
+ 8000 2100 8450 2100
+Wire Wire Line
+ 8000 3900 8450 3900
+Wire Wire Line
+ 8000 2900 8450 2900
+Wire Wire Line
+ 8000 5000 8450 5000
+Wire Wire Line
+ 8000 5800 8450 5800
+Wire Wire Line
+ 5650 5500 6100 5500
+Wire Wire Line
+ 5650 4300 6100 4300
+Wire Wire Line
+ 8000 2200 8450 2200
+Wire Wire Line
+ 8000 4000 8450 4000
+Wire Wire Line
+ 8000 3000 8450 3000
+Wire Wire Line
+ 8000 5100 8450 5100
+Wire Wire Line
+ 8000 5900 8450 5900
+Wire Wire Line
+ 5650 5400 6100 5400
+Wire Wire Line
+ 5650 4100 6100 4100
+Wire Wire Line
+ 8000 2300 8450 2300
+Wire Wire Line
+ 8000 4100 8450 4100
+Wire Wire Line
+ 8000 3100 8450 3100
+Text Label 8100 4400 0 60 ~ 0
+VRAM31
+Text Label 8150 4500 0 60 ~ 0
+VRAM30
+Text Label 8150 4600 0 60 ~ 0
+VRAM29
+Text Label 8050 4700 0 60 ~ 0
+VRAM28
+Text Label 8050 4800 0 60 ~ 0
+VRAM27
+Text Label 8050 4900 0 60 ~ 0
+VRAM26
+Text Label 8050 5000 0 60 ~ 0
+VRAM25
+Text Label 8050 5100 0 60 ~ 0
+VRAM24
+Text Label 8100 5200 0 60 ~ 0
+VRAM23
+Text Label 8150 5300 0 60 ~ 0
+VRAM22
+Text Label 8050 5400 0 60 ~ 0
+VRAM21
+Text Label 8050 5500 0 60 ~ 0
+VRAM20
+Text Label 8050 5600 0 60 ~ 0
+VRAM19
+Text Label 8050 5700 0 60 ~ 0
+VRAM18
+Text Label 8050 5800 0 60 ~ 0
+VRAM17
+Text Label 8050 5900 0 60 ~ 0
+VRAM16
+Text Label 8100 6000 0 60 ~ 0
+VRAM15
+Text Label 8150 6100 0 60 ~ 0
+VRAM14
+Text Label 5700 6000 0 60 ~ 0
+VRAM13
+Text Label 5700 5900 0 60 ~ 0
+VRAM12
+Text Label 5700 5700 0 60 ~ 0
+VRAM11
+Text Label 5700 5600 0 60 ~ 0
+VRAM10
+Text Label 5700 5500 0 60 ~ 0
+VRAM9
+Text Label 5700 5400 0 60 ~ 0
+VRAM8
+Text Label 5650 5300 0 60 ~ 0
+VRAM7
+Text Label 5650 5200 0 60 ~ 0
+VRAM6
+Text Label 5700 5000 0 60 ~ 0
+VRAM5
+Text Label 5700 2500 0 60 ~ 0
+VRAM4
+Text Label 5700 4200 0 60 ~ 0
+VRAM3
+Text Label 5700 4400 0 60 ~ 0
+VRAM2
+Text Label 5700 4300 0 60 ~ 0
+VRAM1
+Text Label 5700 4100 0 60 ~ 0
+VRAM0
+Text Label 8150 1600 0 60 ~ 0
+TVB7
+Text Label 8150 1700 0 60 ~ 0
+TVB6
+Text Label 8100 1800 0 60 ~ 0
+TVB5
+Text Label 8100 1900 0 60 ~ 0
+TVB4
+Text Label 8100 2000 0 60 ~ 0
+TVB3
+Text Label 8100 2100 0 60 ~ 0
+TVB2
+Text Label 8100 2200 0 60 ~ 0
+TVB1
+Text Label 8100 2300 0 60 ~ 0
+TVB0
+Text Label 8150 3200 0 60 ~ 0
+TVG7
+Text Label 8150 3300 0 60 ~ 0
+TVG6
+Text Label 8100 3500 0 60 ~ 0
+TVG5
+Text Label 8100 3700 0 60 ~ 0
+TVG4
+Text Label 8100 3800 0 60 ~ 0
+TVG3
+Text Label 8100 3900 0 60 ~ 0
+TVG2
+Text Label 8100 4000 0 60 ~ 0
+TVG1
+Text Label 8100 4100 0 60 ~ 0
+TVG0
+Text Label 8150 2400 0 60 ~ 0
+TVR7
+Text Label 8150 2500 0 60 ~ 0
+TVR6
+Text Label 8100 2600 0 60 ~ 0
+TVR5
+Text Label 8100 2700 0 60 ~ 0
+TVR4
+Text Label 8100 2800 0 60 ~ 0
+TVR3
+Text Label 8100 2900 0 60 ~ 0
+TVR2
+Text Label 8100 3000 0 60 ~ 0
+TVR1
+Text Label 8100 3100 0 60 ~ 0
+TVR0
+Text HLabel 6100 2100 0 60 Output ~ 0
+X_DONE
+Text HLabel 6100 2000 0 60 Input ~ 0
+X_PROG-
+Text HLabel 9500 1300 2 60 BiDi ~ 0
+TVB[0..7]
+Text HLabel 9500 1200 2 60 BiDi ~ 0
+TVG[0..7]
+Text HLabel 9500 1100 2 60 BiDi ~ 0
+TVR[0..7]
+Text HLabel 9500 1000 2 60 BiDi ~ 0
+VRAM[0..31]
+$Comp
+L VCC #PWR06
+U 1 1 33A567E7
+P 6100 1550
+F 0 "#PWR06" H 6100 1750 40 0001 C CNN
+F 1 "VCC" H 6100 1700 40 0000 C CNN
+F 2 "" H 6100 1550 60 0001 C CNN
+F 3 "" H 6100 1550 60 0001 C CNN
+ 1 6100 1550
+ 1 0 0 -1
+$EndComp
+Connection ~ 6100 1700
+Connection ~ 6100 1600
+Wire Wire Line
+ 6100 1800 6100 1550
+$Comp
+L XC4003-VQ100 U22
+U 1 1 33A567B8
+P 7050 3850
+F 0 "U22" H 7050 3950 70 0000 C CNN
+F 1 "XC4003-VQ100" H 7050 3750 70 0000 C CNN
+F 2 "lib_smd:VQFP100" H 7050 3850 60 0001 C CNN
+F 3 "" H 7050 3850 60 0001 C CNN
+ 1 7050 3850
+ 1 0 0 -1
+$EndComp
+$EndSCHEMATC
diff --git a/demos/video/pal-ntsc.sch b/demos/video/pal-ntsc.sch
new file mode 100644
index 0000000..d8b4a2d
--- /dev/null
+++ b/demos/video/pal-ntsc.sch
@@ -0,0 +1,1325 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 4 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+NoConn ~ 10050 8600
+Wire Bus Line
+ 10800 4900 10650 4900
+Wire Bus Line
+ 10650 4900 10650 5600
+Wire Bus Line
+ 10800 4000 10650 4000
+Wire Bus Line
+ 10650 4000 10650 4700
+Entry Wire Line
+ 10550 5700 10650 5600
+Entry Wire Line
+ 10550 5600 10650 5500
+Entry Wire Line
+ 10550 5500 10650 5400
+Entry Wire Line
+ 10550 5400 10650 5300
+Entry Wire Line
+ 10550 5300 10650 5200
+Entry Wire Line
+ 10550 5200 10650 5100
+Entry Wire Line
+ 10550 5100 10650 5000
+Entry Wire Line
+ 10550 5000 10650 4900
+Entry Wire Line
+ 10550 4800 10650 4700
+Entry Wire Line
+ 10550 4700 10650 4600
+Entry Wire Line
+ 10550 4600 10650 4500
+Entry Wire Line
+ 10550 4500 10650 4400
+Entry Wire Line
+ 10550 4400 10650 4300
+Entry Wire Line
+ 10550 4300 10650 4200
+Entry Wire Line
+ 10550 4200 10650 4100
+Entry Wire Line
+ 10550 4100 10650 4000
+Entry Wire Line
+ 10550 3900 10650 3800
+Entry Wire Line
+ 10550 3800 10650 3700
+Entry Wire Line
+ 10550 3700 10650 3600
+Entry Wire Line
+ 10550 3600 10650 3500
+Entry Wire Line
+ 10550 3500 10650 3400
+Entry Wire Line
+ 10550 3400 10650 3300
+Entry Wire Line
+ 10550 3300 10650 3200
+Entry Wire Line
+ 10550 3200 10650 3100
+Wire Bus Line
+ 10800 3100 10650 3100
+Wire Bus Line
+ 10650 3100 10650 3800
+Wire Wire Line
+ 10050 8500 10150 8500
+Wire Wire Line
+ 10050 7600 10150 7600
+Wire Wire Line
+ 10050 7500 10150 7500
+Wire Wire Line
+ 5800 3800 5950 3800
+Connection ~ 5900 3800
+Wire Wire Line
+ 5950 3900 5900 3900
+Wire Wire Line
+ 5900 3900 5900 3800
+Text HLabel 5950 8600 0 60 Input ~ 0
+BT812_WR-
+Text HLabel 5950 8500 0 60 Input ~ 0
+BT812_RD-
+$Comp
+L VCC #VCC034
+U 1 1 4BF036C7
+P 6350 2300
+F 0 "#VCC034" H 6350 2500 40 0001 C CNN
+F 1 "VCC" H 6350 2450 40 0000 C CNN
+F 2 "" H 6350 2300 60 0001 C CNN
+F 3 "" H 6350 2300 60 0001 C CNN
+ 1 6350 2300
+ 1 0 0 -1
+$EndComp
+Connection ~ 6350 2400
+Connection ~ 6450 2400
+Connection ~ 6550 2400
+Connection ~ 6650 2400
+Connection ~ 6750 2400
+Connection ~ 6850 2400
+Wire Wire Line
+ 6350 2400 6950 2400
+Wire Wire Line
+ 6350 2300 6350 2500
+Wire Wire Line
+ 6450 2400 6450 2500
+Wire Wire Line
+ 6550 2400 6550 2500
+Wire Wire Line
+ 6650 2400 6650 2500
+Wire Wire Line
+ 6750 2400 6750 2500
+Wire Wire Line
+ 6850 2400 6850 2500
+Text HLabel 10800 4900 2 60 BiDi ~ 0
+TVB[0..7]
+Text HLabel 10800 4000 2 60 BiDi ~ 0
+TVG[0..7]
+Text Label 10150 5700 0 60 ~ 0
+TVB7
+Text Label 10150 5600 0 60 ~ 0
+TVB6
+Text Label 10150 5500 0 60 ~ 0
+TVB5
+Text Label 10150 5400 0 60 ~ 0
+TVB4
+Text Label 10150 5300 0 60 ~ 0
+TVB3
+Text Label 10150 5200 0 60 ~ 0
+TVB2
+Text Label 10150 5100 0 60 ~ 0
+TVB1
+Text Label 10150 5000 0 60 ~ 0
+TVB0
+Text Label 10150 4800 0 60 ~ 0
+TVG7
+Text Label 10150 4700 0 60 ~ 0
+TVG6
+Text Label 10150 4600 0 60 ~ 0
+TVG5
+Text Label 10150 4500 0 60 ~ 0
+TVG4
+Text Label 10150 4400 0 60 ~ 0
+TVG3
+Text Label 10150 4300 0 60 ~ 0
+TVG2
+Text Label 10150 4200 0 60 ~ 0
+TVG1
+Text Label 10150 4100 0 60 ~ 0
+TVG0
+Text Label 10150 3900 0 60 ~ 0
+TVR7
+Text Label 10150 3800 0 60 ~ 0
+TVR6
+Text Label 10150 3700 0 60 ~ 0
+TVR5
+Text Label 10150 3600 0 60 ~ 0
+TVR4
+Text Label 10150 3500 0 60 ~ 0
+TVR3
+Text Label 10150 3400 0 60 ~ 0
+TVR2
+Text Label 10150 3300 0 60 ~ 0
+TVR1
+Text Label 10150 3200 0 60 ~ 0
+TVR0
+Wire Wire Line
+ 11950 3450 11950 3600
+Wire Wire Line
+ 12650 3500 12650 3450
+Wire Wire Line
+ 13350 3500 13350 3450
+Wire Wire Line
+ 14050 3500 14050 3450
+Wire Wire Line
+ 14050 3000 14050 3050
+Wire Wire Line
+ 13350 3050 13350 3000
+Wire Wire Line
+ 12650 3050 12650 3000
+Wire Wire Line
+ 11950 3050 11950 3000
+NoConn ~ 10050 8100
+NoConn ~ 10050 8200
+NoConn ~ 10050 8300
+NoConn ~ 5950 5000
+NoConn ~ 5950 4900
+NoConn ~ 5950 5200
+NoConn ~ 5950 5300
+NoConn ~ 5950 5500
+NoConn ~ 5950 5600
+NoConn ~ 5950 4400
+NoConn ~ 10050 7900
+NoConn ~ 10050 6900
+NoConn ~ 10050 7000
+NoConn ~ 10050 7100
+NoConn ~ 10050 7200
+NoConn ~ 5950 3600
+NoConn ~ 5950 3500
+NoConn ~ 10050 7800
+NoConn ~ 10050 7700
+$Comp
+L INDUCTOR L4
+U 1 1 811D9080
+P 10150 1800
+F 0 "L4" V 10350 1800 50 0000 C CNN
+F 1 "22uF" V 10250 1800 50 0000 C CNN
+F 2 "lib_smd:SM1812" H 10150 1800 60 0001 C CNN
+F 3 "" H 10150 1800 60 0001 C CNN
+ 1 10150 1800
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND035
+U 1 1 821CDA95
+P 4000 7250
+F 0 "#GND035" H 4000 7350 60 0001 C CNN
+F 1 "GND" H 4000 7150 60 0001 C CNN
+F 2 "" H 4000 7250 60 0001 C CNN
+F 3 "" H 4000 7250 60 0001 C CNN
+ 1 4000 7250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND036
+U 1 1 821CDAA4
+P 3200 7050
+F 0 "#GND036" H 3200 7150 60 0001 C CNN
+F 1 "GND" H 3200 6950 60 0001 C CNN
+F 2 "" H 3200 7050 60 0001 C CNN
+F 3 "" H 3200 7050 60 0001 C CNN
+ 1 3200 7050
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R35
+U 1 1 821CDAB8
+P 2800 6500
+F 0 "R35" V 2880 6500 50 0000 C CNN
+F 1 "470" V 2800 6500 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 2800 6500 60 0001 C CNN
+F 3 "" H 2800 6500 60 0001 C CNN
+ 1 2800 6500
+ 0 1 1 0
+$EndComp
+$Comp
+L C C1
+U 1 1 821CDAC2
+P 3500 6500
+F 0 "C1" V 3550 6650 50 0000 C CNN
+F 1 "100nF" V 3550 6300 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3500 6500 60 0001 C CNN
+F 3 "" H 3500 6500 60 0001 C CNN
+ 1 3500 6500
+ 0 -1 -1 0
+$EndComp
+$Comp
+L GND #GND037
+U 1 1 A9C8254A
+P 6350 9900
+F 0 "#GND037" H 6350 10000 60 0001 C CNN
+F 1 "GND" H 6350 9800 60 0001 C CNN
+F 2 "" H 6350 9900 60 0001 C CNN
+F 3 "" H 6350 9900 60 0001 C CNN
+ 1 6350 9900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND038
+U 1 1 A9C8254F
+P 8950 9900
+F 0 "#GND038" H 8950 10000 60 0001 C CNN
+F 1 "GND" H 8950 9800 60 0001 C CNN
+F 2 "" H 8950 9900 60 0001 C CNN
+F 3 "" H 8950 9900 60 0001 C CNN
+ 1 8950 9900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND039
+U 1 1 A9C82559
+P 5950 6200
+F 0 "#GND039" H 5950 6300 60 0001 C CNN
+F 1 "GND" H 5950 6050 60 0001 C CNN
+F 2 "" H 5950 6200 60 0001 C CNN
+F 3 "" H 5950 6200 60 0001 C CNN
+ 1 5950 6200
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND040
+U 1 1 A9C8255E
+P 5950 6000
+F 0 "#GND040" H 5950 6100 60 0001 C CNN
+F 1 "GND" H 5950 5850 60 0001 C CNN
+F 2 "" H 5950 6000 60 0001 C CNN
+F 3 "" H 5950 6000 60 0001 C CNN
+ 1 5950 6000
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND041
+U 1 1 A9C82563
+P 5950 6600
+F 0 "#GND041" H 5950 6700 60 0001 C CNN
+F 1 "GND" H 5950 6450 60 0001 C CNN
+F 2 "" H 5950 6600 60 0001 C CNN
+F 3 "" H 5950 6600 60 0001 C CNN
+ 1 5950 6600
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND042
+U 1 1 A9CA7F70
+P 11950 3600
+F 0 "#GND042" H 11950 3700 60 0001 C CNN
+F 1 "GND" H 11950 3500 60 0001 C CNN
+F 2 "" H 11950 3600 60 0001 C CNN
+F 3 "" H 11950 3600 60 0001 C CNN
+ 1 11950 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C2
+U 1 1 A9CA7F6B
+P 11950 3250
+F 0 "C2" H 12000 3350 50 0000 L CNN
+F 1 "100nF" H 12000 3150 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 11950 3250 60 0001 C CNN
+F 3 "" H 11950 3250 60 0001 C CNN
+ 1 11950 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C3
+U 1 1 A9CA7F75
+P 3450 4200
+F 0 "C3" V 3300 4200 50 0000 C CNN
+F 1 "100nF" V 3600 4200 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3450 4200 60 0001 C CNN
+F 3 "" H 3450 4200 60 0001 C CNN
+ 1 3450 4200
+ 0 1 1 0
+$EndComp
+$Comp
+L C C4
+U 1 1 A9CA7F7A
+P 3450 5100
+F 0 "C4" V 3300 5100 50 0000 C CNN
+F 1 "100nF" V 3600 5100 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3450 5100 60 0001 C CNN
+F 3 "" H 3450 5100 60 0001 C CNN
+ 1 3450 5100
+ 0 1 1 0
+$EndComp
+$Comp
+L R R14
+U 1 1 821CDA9A
+P 4000 6950
+F 0 "R14" H 3900 7150 50 0000 C CNN
+F 1 "1M" V 4000 6950 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4000 6950 60 0001 C CNN
+F 3 "" H 4000 6950 60 0001 C CNN
+ 1 4000 6950
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R3
+U 1 1 8116F4AA
+P 4100 4200
+F 0 "R3" V 4180 4200 50 0000 C CNN
+F 1 "100" V 4100 4200 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4100 4200 60 0001 C CNN
+F 3 "" H 4100 4200 60 0001 C CNN
+ 1 4100 4200
+ 0 1 1 0
+$EndComp
+$Comp
+L R R2
+U 1 1 8116F4A5
+P 4100 5100
+F 0 "R2" V 4180 5100 50 0000 C CNN
+F 1 "100" V 4100 5100 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4100 5100 60 0001 C CNN
+F 3 "" H 4100 5100 60 0001 C CNN
+ 1 4100 5100
+ 0 1 1 0
+$EndComp
+$Comp
+L DIODESCH D1
+U 1 1 A9CA7F7F
+P 3850 3700
+F 0 "D1" H 3850 3800 50 0000 C CNN
+F 1 "BAT46" H 3850 3600 50 0000 C CNN
+F 2 "Discret:D3" H 3850 3700 60 0001 C CNN
+F 3 "" H 3850 3700 60 0001 C CNN
+ 1 3850 3700
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D2
+U 1 1 A9CA7F84
+P 3850 3300
+F 0 "D2" H 3850 3200 50 0000 C CNN
+F 1 "BAT46" H 3850 3400 50 0000 C CNN
+F 2 "Discret:D3" H 3850 3300 60 0001 C CNN
+F 3 "" H 3850 3300 60 0001 C CNN
+ 1 3850 3300
+ -1 0 0 1
+$EndComp
+$Comp
+L DIODESCH D3
+U 1 1 A9CA7F8E
+P 4050 6000
+F 0 "D3" H 4050 6100 60 0000 C CNN
+F 1 "BAT46" H 4050 5900 60 0000 C CNN
+F 2 "Discret:D3" H 4050 6000 60 0001 C CNN
+F 3 "" H 4050 6000 60 0001 C CNN
+ 1 4050 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIODESCH D4
+U 1 1 A9CA7F93
+P 4050 5600
+F 0 "D4" H 4050 5700 60 0000 C CNN
+F 1 "BAT46" H 4050 5500 60 0000 C CNN
+F 2 "Discret:D3" H 4050 5600 60 0001 C CNN
+F 3 "" H 4050 5600 60 0001 C CNN
+ 1 4050 5600
+ -1 0 0 -1
+$EndComp
+$Comp
+L GND #GND043
+U 1 1 A9CA7F9D
+P 3850 6000
+F 0 "#GND043" H 3850 6100 60 0001 C CNN
+F 1 "GND" H 3850 5900 60 0000 C CNN
+F 2 "" H 3850 6000 60 0001 C CNN
+F 3 "" H 3850 6000 60 0001 C CNN
+ 1 3850 6000
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND044
+U 1 1 A9CA7FA2
+P 3600 3700
+F 0 "#GND044" H 3600 3800 60 0001 C CNN
+F 1 "GND" H 3600 3600 60 0001 C CNN
+F 2 "" H 3600 3700 60 0001 C CNN
+F 3 "" H 3600 3700 60 0001 C CNN
+ 1 3600 3700
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND045
+U 1 1 A9CA7FBB
+P 5200 6100
+F 0 "#GND045" H 5200 6200 60 0001 C CNN
+F 1 "GND" H 5200 6000 60 0001 C CNN
+F 2 "" H 5200 6100 60 0001 C CNN
+F 3 "" H 5200 6100 60 0001 C CNN
+ 1 5200 6100
+ 0 1 1 0
+$EndComp
+$Comp
+L GND #GND046
+U 1 1 A9CA7FC0
+P 4650 6400
+F 0 "#GND046" H 4650 6500 60 0001 C CNN
+F 1 "GND" H 4650 6300 60 0001 C CNN
+F 2 "" H 4650 6400 60 0001 C CNN
+F 3 "" H 4650 6400 60 0001 C CNN
+ 1 4650 6400
+ 0 1 1 0
+$EndComp
+$Comp
+L R R27
+U 1 1 A9CA7FC5
+P 5500 6800
+F 0 "R27" V 5580 6800 50 0000 C CNN
+F 1 "27K" V 5500 6800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5500 6800 60 0001 C CNN
+F 3 "" H 5500 6800 60 0001 C CNN
+ 1 5500 6800
+ 0 1 1 0
+$EndComp
+$Comp
+L R R12
+U 1 1 A9CA7FCA
+P 5200 7100
+F 0 "R12" V 5280 7100 50 0000 C CNN
+F 1 "1K" V 5200 7100 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5200 7100 60 0001 C CNN
+F 3 "" H 5200 7100 60 0001 C CNN
+ 1 5200 7100
+ 0 1 1 0
+$EndComp
+$Comp
+L C C65
+U 1 1 B15DA8C5
+P 4850 1700
+F 0 "C65" H 5000 1800 50 0000 C CNN
+F 1 "22pF" H 5000 1600 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4850 1700 60 0001 C CNN
+F 3 "" H 4850 1700 60 0001 C CNN
+ 1 4850 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C66
+U 1 1 B15DA8CA
+P 5650 1700
+F 0 "C66" H 5800 1800 50 0000 C CNN
+F 1 "22pF" H 5800 1600 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5650 1700 60 0001 C CNN
+F 3 "" H 5650 1700 60 0001 C CNN
+ 1 5650 1700
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND047
+U 1 1 B15DA8CF
+P 4850 1450
+F 0 "#GND047" H 4850 1550 60 0001 C CNN
+F 1 "GND" H 4850 1350 60 0001 C CNN
+F 2 "" H 4850 1450 60 0001 C CNN
+F 3 "" H 4850 1450 60 0001 C CNN
+ 1 4850 1450
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #GND048
+U 1 1 B15DA8D4
+P 5650 1450
+F 0 "#GND048" H 5650 1550 60 0001 C CNN
+F 1 "GND" H 5650 1350 60 0001 C CNN
+F 2 "" H 5650 1450 60 0001 C CNN
+F 3 "" H 5650 1450 60 0001 C CNN
+ 1 5650 1450
+ -1 0 0 1
+$EndComp
+$Comp
+L GND #GND049
+U 1 1 B175430E
+P 5800 4100
+F 0 "#GND049" H 5800 4200 60 0001 C CNN
+F 1 "GND" H 5800 4000 60 0001 C CNN
+F 2 "" H 5800 4100 60 0001 C CNN
+F 3 "" H 5800 4100 60 0001 C CNN
+ 1 5800 4100
+ 0 1 1 0
+$EndComp
+$Comp
+L CRYSTAL X2
+U 1 1 B15DA8C0
+P 5250 2100
+F 0 "X2" H 5250 2250 60 0000 C CNN
+F 1 "30MHz" H 5250 1950 60 0000 C CNN
+F 2 "Discret:HC-18UV" H 5250 2100 60 0001 C CNN
+F 3 "" H 5250 2100 60 0001 C CNN
+ 1 5250 2100
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R19
+U 1 1 A9CA7FA7
+P 11050 6200
+F 0 "R19" V 11130 6200 50 0000 C CNN
+F 1 "220" V 11050 6200 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11050 6200 60 0001 C CNN
+F 3 "" H 11050 6200 60 0001 C CNN
+ 1 11050 6200
+ 0 1 1 0
+$EndComp
+$Comp
+L C C5
+U 1 1 A9CA7FAC
+P 11650 6200
+F 0 "C5" V 11550 6050 50 0000 C CNN
+F 1 "100nF" V 11550 6400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11650 6200 60 0001 C CNN
+F 3 "" H 11650 6200 60 0001 C CNN
+ 1 11650 6200
+ 0 1 1 0
+$EndComp
+$Comp
+L R R20
+U 1 1 B176B9C3
+P 11100 5800
+F 0 "R20" V 11180 5800 50 0000 C CNN
+F 1 "220" V 11100 5800 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11100 5800 60 0001 C CNN
+F 3 "" H 11100 5800 60 0001 C CNN
+ 1 11100 5800
+ 0 1 1 0
+$EndComp
+$Comp
+L C C8
+U 1 1 B176B9C8
+P 11650 5800
+F 0 "C8" V 11550 5650 50 0000 C CNN
+F 1 "100nF" V 11550 6000 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 11650 5800 60 0001 C CNN
+F 3 "" H 11650 5800 60 0001 C CNN
+ 1 11650 5800
+ 0 1 1 0
+$EndComp
+$Comp
+L C C6
+U 1 1 A9CA7FB1
+P 5450 6100
+F 0 "C6" V 5300 6100 50 0000 C CNN
+F 1 "100nF" V 5600 6100 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5450 6100 60 0001 C CNN
+F 3 "" H 5450 6100 60 0001 C CNN
+ 1 5450 6100
+ 0 1 1 0
+$EndComp
+$Comp
+L C C7
+U 1 1 A9CA7FB6
+P 4900 6400
+F 0 "C7" V 4750 6400 50 0000 C CNN
+F 1 "100nF" V 5050 6400 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 4900 6400 60 0001 C CNN
+F 3 "" H 4900 6400 60 0001 C CNN
+ 1 4900 6400
+ 0 1 1 0
+$EndComp
+$Comp
+L C C47
+U 1 1 821CDABD
+P 3200 6800
+F 0 "C47" H 3350 6900 50 0000 C CNN
+F 1 "220pF" H 3350 6700 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 3200 6800 60 0001 C CNN
+F 3 "" H 3200 6800 60 0001 C CNN
+ 1 3200 6800
+ 1 0 0 -1
+$EndComp
+$Comp
+L BT812 U10
+U 1 1 BECCB834
+P 8000 6100
+F 0 "U10" H 8000 6200 60 0000 C CNN
+F 1 "BT812" H 8000 6000 60 0000 C CNN
+F 2 "lib_smd:PQFP160" H 8000 6100 60 0001 C CNN
+F 3 "" H 8000 6100 60 0001 C CNN
+ 1 8000 6100
+ 1 0 0 -1
+$EndComp
+$Comp
+L CP C62
+U 1 1 811D9071
+P 10750 2300
+F 0 "C62" H 10800 2400 50 0000 L CNN
+F 1 "47uF" H 10800 2200 50 0000 L CNN
+F 2 "lib_smd:SM1210L" H 10750 2300 60 0001 C CNN
+F 3 "" H 10750 2300 60 0001 C CNN
+ 1 10750 2300
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND050
+U 1 1 BF69A158
+P 10750 2550
+F 0 "#GND050" H 10750 2550 30 0001 C CNN
+F 1 "GND" H 10750 2480 30 0001 C CNN
+F 2 "" H 10750 2550 60 0001 C CNN
+F 3 "" H 10750 2550 60 0001 C CNN
+ 1 10750 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND051
+U 1 1 BF69A16C
+P 13050 9200
+F 0 "#GND051" H 13050 9200 30 0001 C CNN
+F 1 "GND" H 13050 9130 30 0001 C CNN
+F 2 "" H 13050 9200 60 0001 C CNN
+F 3 "" H 13050 9200 60 0001 C CNN
+ 1 13050 9200
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C9
+U 1 1 BF69A15D
+P 13050 8850
+F 0 "C9" H 13100 8950 50 0000 L CNN
+F 1 "100nF" H 13100 8750 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 13050 8850 60 0001 C CNN
+F 3 "" H 13050 8850 60 0001 C CNN
+ 1 13050 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C10
+U 1 1 BF69A162
+P 13750 8850
+F 0 "C10" H 13800 8950 50 0000 L CNN
+F 1 "100nF" H 13800 8750 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 13750 8850 60 0001 C CNN
+F 3 "" H 13750 8850 60 0001 C CNN
+ 1 13750 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C11
+U 1 1 BF69A167
+P 14450 8850
+F 0 "C11" H 14500 8950 50 0000 L CNN
+F 1 "100nF" H 14500 8750 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 14450 8850 60 0001 C CNN
+F 3 "" H 14450 8850 60 0001 C CNN
+ 1 14450 8850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C14
+U 1 1 BF69A17B
+P 14050 3250
+F 0 "C14" H 14100 3350 50 0000 L CNN
+F 1 "100nF" H 14100 3150 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 14050 3250 60 0001 C CNN
+F 3 "" H 14050 3250 60 0001 C CNN
+ 1 14050 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C13
+U 1 1 BF69A176
+P 13350 3250
+F 0 "C13" H 13400 3350 50 0000 L CNN
+F 1 "100nF" H 13400 3150 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 13350 3250 60 0001 C CNN
+F 3 "" H 13350 3250 60 0001 C CNN
+ 1 13350 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C12
+U 1 1 BF69A171
+P 12650 3250
+F 0 "C12" H 12700 3350 50 0000 L CNN
+F 1 "100nF" H 12700 3150 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 12650 3250 60 0001 C CNN
+F 3 "" H 12650 3250 60 0001 C CNN
+ 1 12650 3250
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND052
+U 1 1 0F47DCBD
+P 10250 9600
+F 0 "#GND052" H 10250 9700 60 0001 C CNN
+F 1 "GND" H 10250 9500 60 0001 C CNN
+F 2 "" H 10250 9600 60 0001 C CNN
+F 3 "" H 10250 9600 60 0001 C CNN
+ 1 10250 9600
+ 1 0 0 -1
+$EndComp
+$Comp
+L C C16
+U 1 1 0F47DCB8
+P 10250 9350
+F 0 "C16" H 10400 9450 50 0000 C CNN
+F 1 "100nF" H 10400 9250 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 10250 9350 60 0001 C CNN
+F 3 "" H 10250 9350 60 0001 C CNN
+ 1 10250 9350
+ 1 0 0 -1
+$EndComp
+$Comp
+L R R25
+U 1 1 B1754313
+P 5300 2600
+F 0 "R25" V 5380 2600 50 0000 C CNN
+F 1 "220K" V 5300 2600 50 0000 C CNN
+F 2 "lib_smd:SM1206" H 5300 2600 60 0001 C CNN
+F 3 "" H 5300 2600 60 0001 C CNN
+ 1 5300 2600
+ 0 1 1 0
+$EndComp
+Text HLabel 10150 8500 2 60 Output ~ 0
+F_PALIN
+Text HLabel 10800 3100 2 60 BiDi ~ 0
+TVR[0..7]
+Text HLabel 2550 1500 0 60 BiDi ~ 0
+PC_D[0..7]
+Text HLabel 2550 1600 0 60 Input ~ 0
+PC_A[0..1]
+Text HLabel 5950 8800 0 60 Input ~ 0
+RESET-
+Text HLabel 2850 4200 0 60 Input ~ 0
+GREEN_IN
+Text HLabel 2850 5100 0 60 Input ~ 0
+RED_IN
+Text HLabel 5800 3800 0 60 Input ~ 0
+OE_PAL-
+Text HLabel 10150 7500 2 60 Output ~ 0
+HD_PAL-
+Text HLabel 10150 7600 2 60 Output ~ 0
+VD_PAL-
+Text Label 11350 1800 2 60 ~ 0
+VAF
+Text Label 5050 4600 0 60 ~ 0
+Y-VIDEO
+Text Label 5050 4700 0 60 ~ 0
+C-VIDEO
+Text Label 4650 7100 0 60 ~ 0
+VAF
+Text Label 10150 2400 2 60 ~ 0
+VAF
+Text Label 2050 6500 0 60 ~ 0
+Y_SYNC
+Text Label 10150 6100 0 60 ~ 0
+Y_SYNC
+Text Label 11550 3000 0 60 ~ 0
+VAF
+Text Label 5450 7300 0 60 ~ 0
+PC_D0
+Text Label 5450 7400 0 60 ~ 0
+PC_D1
+Text Label 5450 7500 0 60 ~ 0
+PC_D2
+Text Label 5450 7600 0 60 ~ 0
+PC_D3
+Text Label 5450 7700 0 60 ~ 0
+PC_D4
+Text Label 5450 7800 0 60 ~ 0
+PC_D5
+Text Label 5450 7900 0 60 ~ 0
+PC_D6
+Text Label 5450 8000 0 60 ~ 0
+PC_D7
+Text Label 5450 8200 0 60 ~ 0
+PC_A0
+Text Label 5450 8300 0 60 ~ 0
+PC_A1
+$Comp
+L VCC #VCC053
+U 1 1 4BF036C8
+P 13050 8500
+F 0 "#VCC053" H 13050 8600 30 0001 C CNN
+F 1 "VCC" H 13050 8600 30 0000 C CNN
+F 2 "" H 13050 8500 60 0001 C CNN
+F 3 "" H 13050 8500 60 0001 C CNN
+ 1 13050 8500
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #VCC054
+U 1 1 4BF036C9
+P 9750 1800
+F 0 "#VCC054" H 9750 1900 30 0001 C CNN
+F 1 "VCC" H 9750 1900 30 0000 C CNN
+F 2 "" H 9750 1800 60 0001 C CNN
+F 3 "" H 9750 1800 60 0001 C CNN
+ 1 9750 1800
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #VCC055
+U 1 1 4BF036CA
+P 3850 5600
+F 0 "#VCC055" H 3850 5800 40 0001 C CNN
+F 1 "VCC" H 3850 5750 40 0000 C CNN
+F 2 "" H 3850 5600 60 0001 C CNN
+F 3 "" H 3850 5600 60 0001 C CNN
+ 1 3850 5600
+ 1 0 0 -1
+$EndComp
+$Comp
+L VCC #VCC056
+U 1 1 00000000
+P 3600 3300
+F 0 "#VCC056" H 3600 3500 40 0001 C CNN
+F 1 "VCC" H 3600 3450 40 0000 C CNN
+F 2 "" H 3600 3300 60 0001 C CNN
+F 3 "" H 3600 3300 60 0001 C CNN
+ 1 3600 3300
+ 1 0 0 -1
+$EndComp
+Connection ~ 10750 1800
+Connection ~ 4850 2100
+Connection ~ 5650 2100
+Connection ~ 7450 2400
+Connection ~ 7550 2400
+Connection ~ 7650 2400
+Connection ~ 7750 2400
+Connection ~ 7850 2400
+Connection ~ 7950 2400
+Connection ~ 8050 2400
+Connection ~ 8150 2400
+Connection ~ 8250 2400
+Connection ~ 8350 2400
+Connection ~ 8450 2400
+Connection ~ 8550 2400
+Connection ~ 8650 2400
+Connection ~ 8750 2400
+Connection ~ 8850 2400
+Connection ~ 8950 2400
+Connection ~ 9050 2400
+Connection ~ 9150 2400
+Connection ~ 9250 2400
+Connection ~ 9350 2400
+Connection ~ 9450 2400
+Connection ~ 9550 2400
+Connection ~ 9650 2400
+Connection ~ 4850 2600
+Connection ~ 5650 2600
+Connection ~ 4450 3700
+Connection ~ 5900 4100
+Connection ~ 4450 4200
+Connection ~ 5900 4200
+Connection ~ 4450 5100
+Connection ~ 4450 5600
+Connection ~ 5850 6100
+Connection ~ 5150 6400
+Connection ~ 3200 6500
+Connection ~ 4000 6500
+Connection ~ 5850 6500
+Connection ~ 5850 6900
+Connection ~ 13050 8600
+Connection ~ 13750 8600
+Connection ~ 13050 9100
+Connection ~ 13750 9100
+Connection ~ 11950 3000
+Connection ~ 12650 3000
+Connection ~ 13350 3000
+Connection ~ 6350 9800
+Connection ~ 6450 9800
+Connection ~ 6550 9800
+Connection ~ 6650 9800
+Connection ~ 6750 9800
+Connection ~ 6850 9800
+Connection ~ 6950 9800
+Connection ~ 7050 9800
+Connection ~ 7450 9800
+Connection ~ 7550 9800
+Connection ~ 7650 9800
+Connection ~ 7750 9800
+Connection ~ 7850 9800
+Connection ~ 7950 9800
+Connection ~ 8050 9800
+Connection ~ 8150 9800
+Connection ~ 8250 9800
+Connection ~ 8350 9800
+Connection ~ 8450 9800
+Connection ~ 8550 9800
+Connection ~ 8650 9800
+Connection ~ 8750 9800
+Connection ~ 8850 9800
+Connection ~ 8950 9800
+Connection ~ 11950 3500
+Connection ~ 12650 3500
+Connection ~ 13350 3500
+Wire Wire Line
+ 9750 1800 9850 1800
+Wire Wire Line
+ 10450 1800 11350 1800
+Wire Wire Line
+ 4850 2100 4950 2100
+Wire Wire Line
+ 5550 2100 5650 2100
+Wire Wire Line
+ 7350 2400 10150 2400
+Wire Wire Line
+ 4850 2600 5050 2600
+Wire Wire Line
+ 5550 2600 5650 2600
+Wire Wire Line
+ 5650 3200 5950 3200
+Wire Wire Line
+ 10050 3200 10550 3200
+Wire Wire Line
+ 4050 3300 4450 3300
+Wire Wire Line
+ 4850 3300 5950 3300
+Wire Wire Line
+ 10050 3300 10550 3300
+Wire Wire Line
+ 10050 3400 10550 3400
+Wire Wire Line
+ 10050 3500 10550 3500
+Wire Wire Line
+ 10050 3600 10550 3600
+Wire Wire Line
+ 4050 3700 4450 3700
+Wire Wire Line
+ 10050 3700 10550 3700
+Wire Wire Line
+ 10050 3800 10550 3800
+Wire Wire Line
+ 10050 3900 10550 3900
+Wire Wire Line
+ 5800 4100 5950 4100
+Wire Wire Line
+ 10050 4100 10550 4100
+Wire Wire Line
+ 2850 4200 3250 4200
+Wire Wire Line
+ 3650 4200 3850 4200
+Wire Wire Line
+ 4350 4200 4450 4200
+Wire Wire Line
+ 5900 4200 5950 4200
+Wire Wire Line
+ 10050 4200 10550 4200
+Wire Wire Line
+ 5900 4300 5950 4300
+Wire Wire Line
+ 10050 4300 10550 4300
+Wire Wire Line
+ 10050 4400 10550 4400
+Wire Wire Line
+ 10050 4500 10550 4500
+Wire Wire Line
+ 4450 4600 5950 4600
+Wire Wire Line
+ 10050 4600 10550 4600
+Wire Wire Line
+ 5950 4700 4450 4700
+Wire Wire Line
+ 10050 4700 10550 4700
+Wire Wire Line
+ 10050 4800 10550 4800
+Wire Wire Line
+ 10050 5000 10550 5000
+Wire Wire Line
+ 2850 5100 3250 5100
+Wire Wire Line
+ 3650 5100 3850 5100
+Wire Wire Line
+ 4350 5100 4450 5100
+Wire Wire Line
+ 10050 5100 10550 5100
+Wire Wire Line
+ 10050 5200 10550 5200
+Wire Wire Line
+ 10050 5300 10550 5300
+Wire Wire Line
+ 10050 5400 10550 5400
+Wire Wire Line
+ 10050 5500 10550 5500
+Wire Wire Line
+ 4250 5600 4450 5600
+Wire Wire Line
+ 10050 5600 10550 5600
+Wire Wire Line
+ 10050 5700 10550 5700
+Wire Wire Line
+ 5950 5800 4550 5800
+Wire Wire Line
+ 11350 5800 11450 5800
+Wire Wire Line
+ 11850 5800 12100 5800
+Wire Wire Line
+ 4450 6000 4250 6000
+Wire Wire Line
+ 5650 6100 5950 6100
+Wire Wire Line
+ 10050 6100 10800 6100
+Wire Wire Line
+ 10050 6200 10800 6200
+Wire Wire Line
+ 11300 6200 11450 6200
+Wire Wire Line
+ 11850 6200 12000 6200
+Wire Wire Line
+ 5100 6400 5950 6400
+Wire Wire Line
+ 10050 6400 12100 6400
+Wire Wire Line
+ 2050 6500 2550 6500
+Wire Wire Line
+ 3050 6500 3300 6500
+Wire Wire Line
+ 3700 6500 4550 6500
+Wire Wire Line
+ 5850 6500 5950 6500
+Wire Wire Line
+ 10050 6500 12000 6500
+Wire Wire Line
+ 5750 6800 5950 6800
+Wire Wire Line
+ 5850 6900 5950 6900
+Wire Wire Line
+ 4650 7100 4950 7100
+Wire Wire Line
+ 5850 7100 5450 7100
+Wire Wire Line
+ 5450 7300 5950 7300
+Wire Wire Line
+ 5450 7400 5950 7400
+Wire Wire Line
+ 5450 7500 5950 7500
+Wire Wire Line
+ 5450 7600 5950 7600
+Wire Wire Line
+ 5450 7700 5950 7700
+Wire Wire Line
+ 5450 7800 5950 7800
+Wire Wire Line
+ 5450 7900 5950 7900
+Wire Wire Line
+ 5450 8000 5950 8000
+Wire Wire Line
+ 5450 8200 5950 8200
+Wire Wire Line
+ 5450 8300 5950 8300
+Wire Wire Line
+ 13050 8600 15150 8600
+Wire Wire Line
+ 10050 9000 10250 9000
+Wire Wire Line
+ 13050 9100 15150 9100
+Wire Wire Line
+ 11550 3000 14050 3000
+Wire Wire Line
+ 6350 9800 7150 9800
+Wire Wire Line
+ 7350 9800 8950 9800
+Wire Wire Line
+ 11950 3500 14050 3500
+Wire Wire Line
+ 3200 6500 3200 6600
+Wire Wire Line
+ 4000 6500 4000 6700
+Wire Wire Line
+ 4450 3300 4450 4600
+Wire Wire Line
+ 4450 4700 4450 6000
+Wire Wire Line
+ 4550 6500 4550 5800
+Wire Wire Line
+ 4850 1900 4850 3300
+Wire Wire Line
+ 5150 6400 5150 6800
+Wire Wire Line
+ 5650 1900 5650 3200
+Wire Wire Line
+ 5900 4100 5900 4300
+Wire Wire Line
+ 5850 6100 5850 7100
+Wire Wire Line
+ 6350 9700 6350 9900
+Wire Wire Line
+ 6450 9700 6450 9800
+Wire Wire Line
+ 6550 9700 6550 9800
+Wire Wire Line
+ 6650 9700 6650 9800
+Wire Wire Line
+ 6750 9700 6750 9800
+Wire Wire Line
+ 6850 9700 6850 9800
+Wire Wire Line
+ 6950 2400 6950 2500
+Wire Wire Line
+ 6950 9700 6950 9800
+Wire Wire Line
+ 7050 9700 7050 9800
+Wire Wire Line
+ 7150 9800 7150 9700
+Wire Wire Line
+ 7350 2400 7350 2500
+Wire Wire Line
+ 7350 9800 7350 9700
+Wire Wire Line
+ 7450 2400 7450 2500
+Wire Wire Line
+ 7450 9700 7450 9800
+Wire Wire Line
+ 7550 2400 7550 2500
+Wire Wire Line
+ 7550 9700 7550 9800
+Wire Wire Line
+ 7650 2400 7650 2500
+Wire Wire Line
+ 7650 9700 7650 9800
+Wire Wire Line
+ 7750 2400 7750 2500
+Wire Wire Line
+ 7750 9700 7750 9800
+Wire Wire Line
+ 7850 2400 7850 2500
+Wire Wire Line
+ 7850 9700 7850 9800
+Wire Wire Line
+ 7950 2400 7950 2500
+Wire Wire Line
+ 7950 9700 7950 9800
+Wire Wire Line
+ 8050 2400 8050 2500
+Wire Wire Line
+ 8050 9700 8050 9800
+Wire Wire Line
+ 8150 2400 8150 2500
+Wire Wire Line
+ 8150 9700 8150 9800
+Wire Wire Line
+ 8250 2400 8250 2500
+Wire Wire Line
+ 8250 9700 8250 9800
+Wire Wire Line
+ 8350 2400 8350 2500
+Wire Wire Line
+ 8350 9700 8350 9800
+Wire Wire Line
+ 8450 2400 8450 2500
+Wire Wire Line
+ 8450 9700 8450 9800
+Wire Wire Line
+ 8550 2400 8550 2500
+Wire Wire Line
+ 8550 9700 8550 9800
+Wire Wire Line
+ 8650 2400 8650 2500
+Wire Wire Line
+ 8650 9700 8650 9800
+Wire Wire Line
+ 8750 2400 8750 2500
+Wire Wire Line
+ 8750 9700 8750 9800
+Wire Wire Line
+ 8850 2400 8850 2500
+Wire Wire Line
+ 8850 9700 8850 9800
+Wire Wire Line
+ 8950 2400 8950 2500
+Wire Wire Line
+ 8950 9700 8950 9900
+Wire Wire Line
+ 9050 2400 9050 2500
+Wire Wire Line
+ 9150 2400 9150 2500
+Wire Wire Line
+ 9250 2400 9250 2500
+Wire Wire Line
+ 9350 2400 9350 2500
+Wire Wire Line
+ 9450 2400 9450 2500
+Wire Wire Line
+ 9550 2400 9550 2500
+Wire Wire Line
+ 9650 2400 9650 2500
+Wire Wire Line
+ 10250 9000 10250 9150
+Wire Wire Line
+ 10750 1800 10750 2100
+Wire Wire Line
+ 10800 6100 10800 5800
+Wire Wire Line
+ 12000 6500 12000 6200
+Wire Wire Line
+ 12100 6400 12100 5800
+Wire Wire Line
+ 13050 8500 13050 8650
+Wire Wire Line
+ 13050 9050 13050 9200
+Wire Wire Line
+ 13750 8600 13750 8650
+Wire Wire Line
+ 13750 9050 13750 9100
+Wire Wire Line
+ 14450 8600 14450 8650
+Wire Wire Line
+ 14450 9050 14450 9100
+Wire Wire Line
+ 5150 6800 5250 6800
+Wire Wire Line
+ 15150 8600 15150 8650
+Wire Wire Line
+ 15150 9100 15150 9050
+Connection ~ 14450 8600
+Connection ~ 14450 9100
+$Comp
+L C C15
+U 1 1 0939A342
+P 15150 8850
+F 0 "C15" H 15200 8950 50 0000 L CNN
+F 1 "100nF" H 15200 8750 50 0000 L CNN
+F 2 "lib_smd:SM1206" H 15150 8850 60 0001 C CNN
+F 3 "" H 15150 8850 60 0001 C CNN
+ 1 15150 8850
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 10250 9600 10250 9550
+Wire Wire Line
+ 10750 2550 10750 2500
+Wire Wire Line
+ 5650 1450 5650 1500
+Wire Wire Line
+ 4850 1500 4850 1450
+Wire Wire Line
+ 3600 3300 3650 3300
+Wire Wire Line
+ 3600 3700 3650 3700
+Wire Wire Line
+ 5200 6100 5250 6100
+Wire Wire Line
+ 4650 6400 4700 6400
+Wire Wire Line
+ 4000 7200 4000 7250
+Wire Wire Line
+ 3200 7000 3200 7050
+Wire Wire Line
+ 10800 5800 10850 5800
+$EndSCHEMATC
diff --git a/demos/video/rams.sch b/demos/video/rams.sch
new file mode 100644
index 0000000..cc47c98
--- /dev/null
+++ b/demos/video/rams.sch
@@ -0,0 +1,1753 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 6 8
+Title "Kicad EDA"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 "Rams Video"
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 4400 9050 5000 9050
+Wire Wire Line
+ 4400 8950 5000 8950
+Wire Wire Line
+ 4400 8850 5000 8850
+Wire Wire Line
+ 4400 8750 5000 8750
+Wire Wire Line
+ 4400 8650 5000 8650
+Wire Wire Line
+ 4400 8550 5000 8550
+Wire Wire Line
+ 4400 8450 5000 8450
+Wire Wire Line
+ 4400 8350 5000 8350
+Wire Wire Line
+ 4400 8150 5000 8150
+Wire Wire Line
+ 4400 8050 5000 8050
+Wire Wire Line
+ 4400 7950 5000 7950
+Wire Wire Line
+ 4400 7850 5000 7850
+Wire Wire Line
+ 4400 7750 5000 7750
+Wire Wire Line
+ 4400 7650 5000 7650
+Wire Wire Line
+ 4400 7550 5000 7550
+Wire Wire Line
+ 4400 7450 5000 7450
+Wire Wire Line
+ 4400 7250 5000 7250
+Wire Wire Line
+ 4400 7150 5000 7150
+Wire Wire Line
+ 4400 7050 5000 7050
+Wire Wire Line
+ 4400 6950 5000 6950
+Wire Wire Line
+ 4400 6850 5000 6850
+Wire Wire Line
+ 4400 6750 5000 6750
+Wire Wire Line
+ 4400 6650 5000 6650
+Wire Wire Line
+ 4400 6550 5000 6550
+Wire Wire Line
+ 4400 6350 5000 6350
+Wire Wire Line
+ 4400 6250 5000 6250
+Wire Wire Line
+ 4400 6150 5000 6150
+Wire Wire Line
+ 4400 6050 5000 6050
+Wire Wire Line
+ 4400 5950 5000 5950
+Wire Wire Line
+ 4400 5850 5000 5850
+Wire Wire Line
+ 4400 5750 5000 5750
+Wire Wire Line
+ 4400 5650 5000 5650
+Wire Wire Line
+ 4400 4600 5000 4600
+Wire Wire Line
+ 4400 4500 5000 4500
+Wire Wire Line
+ 4400 4400 5000 4400
+Wire Wire Line
+ 4400 4300 5000 4300
+Wire Wire Line
+ 4400 4200 5000 4200
+Wire Wire Line
+ 4400 4100 5000 4100
+Wire Wire Line
+ 4400 4000 5000 4000
+Wire Wire Line
+ 4400 3900 5000 3900
+Wire Wire Line
+ 4400 3700 5000 3700
+Wire Wire Line
+ 4400 3600 5000 3600
+Wire Wire Line
+ 4400 3500 5000 3500
+Wire Wire Line
+ 4400 3400 5000 3400
+Wire Wire Line
+ 4400 3300 5000 3300
+Wire Wire Line
+ 4400 3200 5000 3200
+Wire Wire Line
+ 4400 3100 5000 3100
+Wire Wire Line
+ 4400 3000 5000 3000
+Wire Wire Line
+ 4400 2800 5000 2800
+Wire Wire Line
+ 4400 2700 5000 2700
+Wire Wire Line
+ 4400 2600 5000 2600
+Wire Wire Line
+ 4400 2500 5000 2500
+Wire Wire Line
+ 4400 2400 5000 2400
+Wire Wire Line
+ 4400 2300 5000 2300
+Wire Wire Line
+ 4400 2200 5000 2200
+Wire Wire Line
+ 4400 2100 5000 2100
+Wire Wire Line
+ 4400 1900 5000 1900
+Wire Wire Line
+ 4400 1800 5000 1800
+Wire Wire Line
+ 4400 1700 5000 1700
+Wire Wire Line
+ 4400 1600 5000 1600
+Wire Wire Line
+ 4400 1500 5000 1500
+Wire Wire Line
+ 4400 1400 5000 1400
+Wire Wire Line
+ 4400 1300 5000 1300
+Wire Wire Line
+ 4400 1200 5000 1200
+Text Label 4400 9050 0 60 ~ 0
+TVRAM31
+Text Label 4400 8950 0 60 ~ 0
+TVRAM30
+Text Label 4400 8850 0 60 ~ 0
+TVRAM29
+Text Label 4400 8750 0 60 ~ 0
+TVRAM28
+Text Label 4400 8650 0 60 ~ 0
+TVRAM27
+Text Label 4400 8550 0 60 ~ 0
+TVRAM26
+Text Label 4400 8450 0 60 ~ 0
+TVRAM25
+Text Label 4400 8350 0 60 ~ 0
+TVRAM24
+Text Label 4400 8150 0 60 ~ 0
+TVRAM23
+Text Label 4400 8050 0 60 ~ 0
+TVRAM22
+Text Label 4400 7950 0 60 ~ 0
+TVRAM21
+Text Label 4400 7850 0 60 ~ 0
+TVRAM20
+Text Label 4400 7750 0 60 ~ 0
+TVRAM19
+Text Label 4400 7650 0 60 ~ 0
+TVRAM18
+Text Label 4400 7550 0 60 ~ 0
+TVRAM17
+Text Label 4400 7450 0 60 ~ 0
+TVRAM16
+Text Label 4400 7250 0 60 ~ 0
+TVRAM15
+Text Label 4400 7150 0 60 ~ 0
+TVRAM14
+Text Label 4400 7050 0 60 ~ 0
+TVRAM13
+Text Label 4400 6950 0 60 ~ 0
+TVRAM12
+Text Label 4400 6850 0 60 ~ 0
+TVRAM11
+Text Label 4400 6750 0 60 ~ 0
+TVRAM10
+Text Label 4400 6650 0 60 ~ 0
+TVRAM9
+Text Label 4400 6550 0 60 ~ 0
+TVRAM8
+Text Label 4400 6350 0 60 ~ 0
+TVRAM7
+Text Label 4400 6250 0 60 ~ 0
+TVRAM6
+Text Label 4400 6150 0 60 ~ 0
+TVRAM5
+Text Label 4400 6050 0 60 ~ 0
+TVRAM4
+Text Label 4400 5950 0 60 ~ 0
+TVRAM3
+Text Label 4400 5850 0 60 ~ 0
+TVRAM2
+Text Label 4400 5750 0 60 ~ 0
+TVRAM1
+Text Label 4400 5650 0 60 ~ 0
+TVRAM0
+Text Label 4400 4600 0 60 ~ 0
+TVRAM31
+Text Label 4400 4500 0 60 ~ 0
+TVRAM30
+Text Label 4400 4400 0 60 ~ 0
+TVRAM29
+Text Label 4400 4300 0 60 ~ 0
+TVRAM28
+Text Label 4400 4200 0 60 ~ 0
+TVRAM27
+Text Label 4400 4100 0 60 ~ 0
+TVRAM26
+Text Label 4400 4000 0 60 ~ 0
+TVRAM25
+Text Label 4400 3900 0 60 ~ 0
+TVRAM24
+Text Label 4400 3700 0 60 ~ 0
+TVRAM23
+Text Label 4400 3600 0 60 ~ 0
+TVRAM22
+Text Label 4400 3500 0 60 ~ 0
+TVRAM21
+Text Label 4400 3400 0 60 ~ 0
+TVRAM20
+Text Label 4400 3300 0 60 ~ 0
+TVRAM19
+Text Label 4400 3200 0 60 ~ 0
+TVRAM18
+Text Label 4400 3100 0 60 ~ 0
+TVRAM17
+Text Label 4400 3000 0 60 ~ 0
+TVRAM16
+Text Label 4400 2800 0 60 ~ 0
+TVRAM15
+Text Label 4400 2700 0 60 ~ 0
+TVRAM14
+Text Label 4400 2600 0 60 ~ 0
+TVRAM13
+Text Label 4400 2500 0 60 ~ 0
+TVRAM12
+Text Label 4400 2400 0 60 ~ 0
+TVRAM11
+Text Label 4400 2300 0 60 ~ 0
+TVRAM10
+Text Label 4400 2200 0 60 ~ 0
+TVRAM9
+Text Label 4400 2100 0 60 ~ 0
+TVRAM8
+Text Label 4400 1900 0 60 ~ 0
+TVRAM7
+Text Label 4400 1800 0 60 ~ 0
+TVRAM6
+Text Label 4400 1700 0 60 ~ 0
+TVRAM5
+Text Label 4400 1600 0 60 ~ 0
+TVRAM4
+Text Label 4400 1500 0 60 ~ 0
+TVRAM3
+Text Label 4400 1400 0 60 ~ 0
+TVRAM2
+Text Label 4400 1300 0 60 ~ 0
+TVRAM1
+Text Label 4400 1200 0 60 ~ 0
+TVRAM0
+Wire Wire Line
+ 7250 9050 7850 9050
+Wire Wire Line
+ 7250 8950 7850 8950
+Wire Wire Line
+ 7250 8850 7850 8850
+Wire Wire Line
+ 7250 8750 7850 8750
+Wire Wire Line
+ 7250 8650 7850 8650
+Wire Wire Line
+ 7250 8550 7850 8550
+Wire Wire Line
+ 7250 8450 7850 8450
+Wire Wire Line
+ 7250 8350 7850 8350
+Wire Wire Line
+ 7250 8150 7850 8150
+Wire Wire Line
+ 7250 8050 7850 8050
+Wire Wire Line
+ 7250 7950 7850 7950
+Wire Wire Line
+ 7250 7850 7850 7850
+Wire Wire Line
+ 7250 7750 7850 7750
+Wire Wire Line
+ 7250 7650 7850 7650
+Wire Wire Line
+ 7250 7550 7850 7550
+Wire Wire Line
+ 7250 7450 7850 7450
+Wire Wire Line
+ 7250 7250 7850 7250
+Wire Wire Line
+ 7250 7150 7850 7150
+Wire Wire Line
+ 7250 7050 7850 7050
+Wire Wire Line
+ 7250 6950 7850 6950
+Wire Wire Line
+ 7250 6850 7850 6850
+Wire Wire Line
+ 7250 6750 7850 6750
+Wire Wire Line
+ 7250 6650 7850 6650
+Wire Wire Line
+ 7250 6550 7850 6550
+Wire Wire Line
+ 7250 6350 7850 6350
+Wire Wire Line
+ 7250 6250 7850 6250
+Wire Wire Line
+ 7250 6150 7850 6150
+Wire Wire Line
+ 7250 6050 7850 6050
+Wire Wire Line
+ 7250 5950 7850 5950
+Wire Wire Line
+ 7250 5850 7850 5850
+Wire Wire Line
+ 7250 5750 7850 5750
+Wire Wire Line
+ 7250 5650 7850 5650
+Text Label 7300 9050 0 60 ~ 0
+TVRAM31
+Text Label 7300 8950 0 60 ~ 0
+TVRAM30
+Text Label 7300 8850 0 60 ~ 0
+TVRAM29
+Text Label 7300 8750 0 60 ~ 0
+TVRAM28
+Text Label 7300 8650 0 60 ~ 0
+TVRAM27
+Text Label 7300 8550 0 60 ~ 0
+TVRAM26
+Text Label 7300 8450 0 60 ~ 0
+TVRAM25
+Text Label 7300 8350 0 60 ~ 0
+TVRAM24
+Text Label 7300 8150 0 60 ~ 0
+TVRAM23
+Text Label 7300 8050 0 60 ~ 0
+TVRAM22
+Text Label 7300 7950 0 60 ~ 0
+TVRAM21
+Text Label 7300 7850 0 60 ~ 0
+TVRAM20
+Text Label 7300 7750 0 60 ~ 0
+TVRAM19
+Text Label 7300 7650 0 60 ~ 0
+TVRAM18
+Text Label 7300 7550 0 60 ~ 0
+TVRAM17
+Text Label 7300 7450 0 60 ~ 0
+TVRAM16
+Text Label 7300 7250 0 60 ~ 0
+TVRAM15
+Text Label 7300 7150 0 60 ~ 0
+TVRAM14
+Text Label 7300 7050 0 60 ~ 0
+TVRAM13
+Text Label 7300 6950 0 60 ~ 0
+TVRAM12
+Text Label 7300 6850 0 60 ~ 0
+TVRAM11
+Text Label 7300 6750 0 60 ~ 0
+TVRAM10
+Text Label 7300 6650 0 60 ~ 0
+TVRAM9
+Text Label 7300 6550 0 60 ~ 0
+TVRAM8
+Text Label 7300 6350 0 60 ~ 0
+TVRAM7
+Text Label 7300 6250 0 60 ~ 0
+TVRAM6
+Text Label 7300 6150 0 60 ~ 0
+TVRAM5
+Text Label 7300 6050 0 60 ~ 0
+TVRAM4
+Text Label 7300 5950 0 60 ~ 0
+TVRAM3
+Text Label 7300 5850 0 60 ~ 0
+TVRAM2
+Text Label 7300 5750 0 60 ~ 0
+TVRAM1
+Text Label 7300 5650 0 60 ~ 0
+TVRAM0
+Wire Wire Line
+ 7250 4600 7850 4600
+Wire Wire Line
+ 7250 4500 7850 4500
+Wire Wire Line
+ 7250 4400 7850 4400
+Wire Wire Line
+ 7250 4300 7850 4300
+Wire Wire Line
+ 7250 4200 7850 4200
+Wire Wire Line
+ 7250 4100 7850 4100
+Wire Wire Line
+ 7250 4000 7850 4000
+Wire Wire Line
+ 7250 3900 7850 3900
+Wire Wire Line
+ 7250 3700 7850 3700
+Wire Wire Line
+ 7250 3600 7850 3600
+Wire Wire Line
+ 7250 3500 7850 3500
+Wire Wire Line
+ 7250 3400 7850 3400
+Wire Wire Line
+ 7250 3300 7850 3300
+Wire Wire Line
+ 7250 3200 7850 3200
+Wire Wire Line
+ 7250 3100 7850 3100
+Wire Wire Line
+ 7250 3000 7850 3000
+Wire Wire Line
+ 7250 2800 7850 2800
+Wire Wire Line
+ 7250 2700 7850 2700
+Wire Wire Line
+ 7250 2600 7850 2600
+Wire Wire Line
+ 7250 2500 7850 2500
+Wire Wire Line
+ 7250 2400 7850 2400
+Wire Wire Line
+ 7250 2300 7850 2300
+Wire Wire Line
+ 7250 2200 7850 2200
+Wire Wire Line
+ 7250 2100 7850 2100
+Wire Wire Line
+ 7250 1900 7850 1900
+Wire Wire Line
+ 7250 1800 7850 1800
+Wire Wire Line
+ 7250 1700 7850 1700
+Wire Wire Line
+ 7250 1600 7850 1600
+Wire Wire Line
+ 7250 1500 7850 1500
+Wire Wire Line
+ 7250 1400 7850 1400
+Wire Wire Line
+ 7250 1300 7850 1300
+Wire Wire Line
+ 7250 1200 7850 1200
+Text Label 7300 4600 0 60 ~ 0
+TVRAM31
+Text Label 7300 4500 0 60 ~ 0
+TVRAM30
+Text Label 7300 4400 0 60 ~ 0
+TVRAM29
+Text Label 7300 4300 0 60 ~ 0
+TVRAM28
+Text Label 7300 4200 0 60 ~ 0
+TVRAM27
+Text Label 7300 4100 0 60 ~ 0
+TVRAM26
+Text Label 7300 4000 0 60 ~ 0
+TVRAM25
+Text Label 7300 3900 0 60 ~ 0
+TVRAM24
+Text Label 7300 3700 0 60 ~ 0
+TVRAM23
+Text Label 7300 3600 0 60 ~ 0
+TVRAM22
+Text Label 7300 3500 0 60 ~ 0
+TVRAM21
+Text Label 7300 3400 0 60 ~ 0
+TVRAM20
+Text Label 7300 3300 0 60 ~ 0
+TVRAM19
+Text Label 7300 3200 0 60 ~ 0
+TVRAM18
+Text Label 7300 3100 0 60 ~ 0
+TVRAM17
+Text Label 7300 3000 0 60 ~ 0
+TVRAM16
+Text Label 7300 2800 0 60 ~ 0
+TVRAM15
+Text Label 7300 2700 0 60 ~ 0
+TVRAM14
+Text Label 7300 2600 0 60 ~ 0
+TVRAM13
+Text Label 7300 2500 0 60 ~ 0
+TVRAM12
+Text Label 7300 2400 0 60 ~ 0
+TVRAM11
+Text Label 7300 2300 0 60 ~ 0
+TVRAM10
+Text Label 7300 2200 0 60 ~ 0
+TVRAM9
+Text Label 7300 2100 0 60 ~ 0
+TVRAM8
+Text Label 7300 1900 0 60 ~ 0
+TVRAM7
+Text Label 7300 1800 0 60 ~ 0
+TVRAM6
+Text Label 7300 1700 0 60 ~ 0
+TVRAM5
+Text Label 7300 1600 0 60 ~ 0
+TVRAM4
+Text Label 7300 1500 0 60 ~ 0
+TVRAM3
+Text Label 7300 1400 0 60 ~ 0
+TVRAM2
+Text Label 7300 1300 0 60 ~ 0
+TVRAM1
+Text Label 7300 1200 0 60 ~ 0
+TVRAM0
+Wire Wire Line
+ 10100 9050 10700 9050
+Wire Wire Line
+ 10100 8950 10700 8950
+Wire Wire Line
+ 10100 8850 10700 8850
+Wire Wire Line
+ 10100 8750 10700 8750
+Wire Wire Line
+ 10100 8650 10700 8650
+Wire Wire Line
+ 10100 8550 10700 8550
+Wire Wire Line
+ 10100 8450 10700 8450
+Wire Wire Line
+ 10100 8350 10700 8350
+Wire Wire Line
+ 10100 8150 10700 8150
+Wire Wire Line
+ 10100 8050 10700 8050
+Wire Wire Line
+ 10100 7950 10700 7950
+Wire Wire Line
+ 10100 7850 10700 7850
+Wire Wire Line
+ 10100 7750 10700 7750
+Wire Wire Line
+ 10100 7650 10700 7650
+Wire Wire Line
+ 10100 7550 10700 7550
+Wire Wire Line
+ 10100 7450 10700 7450
+Wire Wire Line
+ 10100 7250 10700 7250
+Wire Wire Line
+ 10100 7150 10700 7150
+Wire Wire Line
+ 10100 7050 10700 7050
+Wire Wire Line
+ 10100 6950 10700 6950
+Wire Wire Line
+ 10100 6850 10700 6850
+Wire Wire Line
+ 10100 6750 10700 6750
+Wire Wire Line
+ 10100 6650 10700 6650
+Wire Wire Line
+ 10100 6550 10700 6550
+Wire Wire Line
+ 10100 6350 10700 6350
+Wire Wire Line
+ 10100 6250 10700 6250
+Wire Wire Line
+ 10100 6150 10700 6150
+Wire Wire Line
+ 10100 6050 10700 6050
+Wire Wire Line
+ 10100 5950 10700 5950
+Wire Wire Line
+ 10100 5850 10700 5850
+Wire Wire Line
+ 10100 5750 10700 5750
+Wire Wire Line
+ 10100 5650 10700 5650
+Text Label 10150 9050 0 60 ~ 0
+TVRAM31
+Text Label 10150 8950 0 60 ~ 0
+TVRAM30
+Text Label 10150 8850 0 60 ~ 0
+TVRAM29
+Text Label 10150 8750 0 60 ~ 0
+TVRAM28
+Text Label 10150 8650 0 60 ~ 0
+TVRAM27
+Text Label 10150 8550 0 60 ~ 0
+TVRAM26
+Text Label 10150 8450 0 60 ~ 0
+TVRAM25
+Text Label 10150 8350 0 60 ~ 0
+TVRAM24
+Text Label 10150 8150 0 60 ~ 0
+TVRAM23
+Text Label 10150 8050 0 60 ~ 0
+TVRAM22
+Text Label 10150 7950 0 60 ~ 0
+TVRAM21
+Text Label 10150 7850 0 60 ~ 0
+TVRAM20
+Text Label 10150 7750 0 60 ~ 0
+TVRAM19
+Text Label 10150 7650 0 60 ~ 0
+TVRAM18
+Text Label 10150 7550 0 60 ~ 0
+TVRAM17
+Text Label 10150 7450 0 60 ~ 0
+TVRAM16
+Text Label 10150 7250 0 60 ~ 0
+TVRAM15
+Text Label 10150 7150 0 60 ~ 0
+TVRAM14
+Text Label 10150 7050 0 60 ~ 0
+TVRAM13
+Text Label 10150 6950 0 60 ~ 0
+TVRAM12
+Text Label 10150 6850 0 60 ~ 0
+TVRAM11
+Text Label 10150 6750 0 60 ~ 0
+TVRAM10
+Text Label 10150 6650 0 60 ~ 0
+TVRAM9
+Text Label 10150 6550 0 60 ~ 0
+TVRAM8
+Text Label 10150 6350 0 60 ~ 0
+TVRAM7
+Text Label 10150 6250 0 60 ~ 0
+TVRAM6
+Text Label 10150 6150 0 60 ~ 0
+TVRAM5
+Text Label 10150 6050 0 60 ~ 0
+TVRAM4
+Text Label 10150 5950 0 60 ~ 0
+TVRAM3
+Text Label 10150 5850 0 60 ~ 0
+TVRAM2
+Text Label 10150 5750 0 60 ~ 0
+TVRAM1
+Text Label 10150 5650 0 60 ~ 0
+TVRAM0
+Wire Wire Line
+ 12900 9050 13500 9050
+Wire Wire Line
+ 12900 8950 13500 8950
+Wire Wire Line
+ 12900 8850 13500 8850
+Wire Wire Line
+ 12900 8750 13500 8750
+Wire Wire Line
+ 12900 8650 13500 8650
+Wire Wire Line
+ 12900 8550 13500 8550
+Wire Wire Line
+ 12900 8450 13500 8450
+Wire Wire Line
+ 12900 8350 13500 8350
+Wire Wire Line
+ 12900 8150 13500 8150
+Wire Wire Line
+ 12900 8050 13500 8050
+Wire Wire Line
+ 12900 7950 13500 7950
+Wire Wire Line
+ 12900 7850 13500 7850
+Wire Wire Line
+ 12900 7750 13500 7750
+Wire Wire Line
+ 12900 7650 13500 7650
+Wire Wire Line
+ 12900 7550 13500 7550
+Wire Wire Line
+ 12900 7450 13500 7450
+Wire Wire Line
+ 12900 7250 13500 7250
+Wire Wire Line
+ 12900 7150 13500 7150
+Wire Wire Line
+ 12900 7050 13500 7050
+Wire Wire Line
+ 12900 6950 13500 6950
+Wire Wire Line
+ 12900 6850 13500 6850
+Wire Wire Line
+ 12900 6750 13500 6750
+Wire Wire Line
+ 12900 6650 13500 6650
+Wire Wire Line
+ 12900 6550 13500 6550
+Wire Wire Line
+ 12900 6350 13500 6350
+Wire Wire Line
+ 12900 6250 13500 6250
+Wire Wire Line
+ 12900 6150 13500 6150
+Wire Wire Line
+ 12900 6050 13500 6050
+Wire Wire Line
+ 12900 5950 13500 5950
+Wire Wire Line
+ 12900 5850 13500 5850
+Wire Wire Line
+ 12900 5750 13500 5750
+Wire Wire Line
+ 12900 5650 13500 5650
+Text Label 12950 9050 0 60 ~ 0
+TVRAM31
+Text Label 12950 8950 0 60 ~ 0
+TVRAM30
+Text Label 12950 8850 0 60 ~ 0
+TVRAM29
+Text Label 12950 8750 0 60 ~ 0
+TVRAM28
+Text Label 12950 8650 0 60 ~ 0
+TVRAM27
+Text Label 12950 8550 0 60 ~ 0
+TVRAM26
+Text Label 12950 8450 0 60 ~ 0
+TVRAM25
+Text Label 12950 8350 0 60 ~ 0
+TVRAM24
+Text Label 12950 8150 0 60 ~ 0
+TVRAM23
+Text Label 12950 8050 0 60 ~ 0
+TVRAM22
+Text Label 12950 7950 0 60 ~ 0
+TVRAM21
+Text Label 12950 7850 0 60 ~ 0
+TVRAM20
+Text Label 12950 7750 0 60 ~ 0
+TVRAM19
+Text Label 12950 7650 0 60 ~ 0
+TVRAM18
+Text Label 12950 7550 0 60 ~ 0
+TVRAM17
+Text Label 12950 7450 0 60 ~ 0
+TVRAM16
+Text Label 12950 7250 0 60 ~ 0
+TVRAM15
+Text Label 12950 7150 0 60 ~ 0
+TVRAM14
+Text Label 12950 7050 0 60 ~ 0
+TVRAM13
+Text Label 12950 6950 0 60 ~ 0
+TVRAM12
+Text Label 12950 6850 0 60 ~ 0
+TVRAM11
+Text Label 12950 6750 0 60 ~ 0
+TVRAM10
+Text Label 12950 6650 0 60 ~ 0
+TVRAM9
+Text Label 12950 6550 0 60 ~ 0
+TVRAM8
+Text Label 12950 6350 0 60 ~ 0
+TVRAM7
+Text Label 12950 6250 0 60 ~ 0
+TVRAM6
+Text Label 12950 6150 0 60 ~ 0
+TVRAM5
+Text Label 12950 6050 0 60 ~ 0
+TVRAM4
+Text Label 12950 5950 0 60 ~ 0
+TVRAM3
+Text Label 12950 5850 0 60 ~ 0
+TVRAM2
+Text Label 12950 5750 0 60 ~ 0
+TVRAM1
+Text Label 12950 5650 0 60 ~ 0
+TVRAM0
+Wire Wire Line
+ 10100 4600 10700 4600
+Wire Wire Line
+ 10100 4500 10700 4500
+Wire Wire Line
+ 10100 4400 10700 4400
+Wire Wire Line
+ 10100 4300 10700 4300
+Wire Wire Line
+ 10100 4200 10700 4200
+Wire Wire Line
+ 10100 4100 10700 4100
+Wire Wire Line
+ 10100 4000 10700 4000
+Wire Wire Line
+ 10100 3900 10700 3900
+Wire Wire Line
+ 10100 3700 10700 3700
+Wire Wire Line
+ 10100 3600 10700 3600
+Wire Wire Line
+ 10100 3500 10700 3500
+Wire Wire Line
+ 10100 3400 10700 3400
+Wire Wire Line
+ 10100 3300 10700 3300
+Wire Wire Line
+ 10100 3200 10700 3200
+Wire Wire Line
+ 10100 3100 10700 3100
+Wire Wire Line
+ 10100 3000 10700 3000
+Wire Wire Line
+ 10100 2800 10700 2800
+Wire Wire Line
+ 10100 2700 10700 2700
+Wire Wire Line
+ 10100 2600 10700 2600
+Wire Wire Line
+ 10100 2500 10700 2500
+Wire Wire Line
+ 10100 2400 10700 2400
+Wire Wire Line
+ 10100 2300 10700 2300
+Wire Wire Line
+ 10100 2200 10700 2200
+Wire Wire Line
+ 10100 2100 10700 2100
+Wire Wire Line
+ 10100 1900 10700 1900
+Wire Wire Line
+ 10100 1800 10700 1800
+Wire Wire Line
+ 10100 1700 10700 1700
+Wire Wire Line
+ 10100 1600 10700 1600
+Wire Wire Line
+ 10100 1500 10700 1500
+Wire Wire Line
+ 10100 1400 10700 1400
+Wire Wire Line
+ 10100 1300 10700 1300
+Wire Wire Line
+ 10100 1200 10700 1200
+Text Label 10150 4600 0 60 ~ 0
+TVRAM31
+Text Label 10150 4500 0 60 ~ 0
+TVRAM30
+Text Label 10150 4400 0 60 ~ 0
+TVRAM29
+Text Label 10150 4300 0 60 ~ 0
+TVRAM28
+Text Label 10150 4200 0 60 ~ 0
+TVRAM27
+Text Label 10150 4100 0 60 ~ 0
+TVRAM26
+Text Label 10150 4000 0 60 ~ 0
+TVRAM25
+Text Label 10150 3900 0 60 ~ 0
+TVRAM24
+Text Label 10150 3700 0 60 ~ 0
+TVRAM23
+Text Label 10150 3600 0 60 ~ 0
+TVRAM22
+Text Label 10150 3500 0 60 ~ 0
+TVRAM21
+Text Label 10150 3400 0 60 ~ 0
+TVRAM20
+Text Label 10150 3300 0 60 ~ 0
+TVRAM19
+Text Label 10150 3200 0 60 ~ 0
+TVRAM18
+Text Label 10150 3100 0 60 ~ 0
+TVRAM17
+Text Label 10150 3000 0 60 ~ 0
+TVRAM16
+Text Label 10150 2800 0 60 ~ 0
+TVRAM15
+Text Label 10150 2700 0 60 ~ 0
+TVRAM14
+Text Label 10150 2600 0 60 ~ 0
+TVRAM13
+Text Label 10150 2500 0 60 ~ 0
+TVRAM12
+Text Label 10150 2400 0 60 ~ 0
+TVRAM11
+Text Label 10150 2300 0 60 ~ 0
+TVRAM10
+Text Label 10150 2200 0 60 ~ 0
+TVRAM9
+Text Label 10150 2100 0 60 ~ 0
+TVRAM8
+Text Label 10150 1900 0 60 ~ 0
+TVRAM7
+Text Label 10150 1800 0 60 ~ 0
+TVRAM6
+Text Label 10150 1700 0 60 ~ 0
+TVRAM5
+Text Label 10150 1600 0 60 ~ 0
+TVRAM4
+Text Label 10150 1500 0 60 ~ 0
+TVRAM3
+Text Label 10150 1400 0 60 ~ 0
+TVRAM2
+Text Label 10150 1300 0 60 ~ 0
+TVRAM1
+Text Label 10150 1200 0 60 ~ 0
+TVRAM0
+Wire Wire Line
+ 12900 4600 13500 4600
+Wire Wire Line
+ 12900 4500 13500 4500
+Wire Wire Line
+ 12900 4400 13500 4400
+Wire Wire Line
+ 12900 4300 13500 4300
+Wire Wire Line
+ 12900 4200 13500 4200
+Wire Wire Line
+ 12900 4100 13500 4100
+Wire Wire Line
+ 12900 4000 13500 4000
+Wire Wire Line
+ 12900 3900 13500 3900
+Wire Wire Line
+ 12900 3700 13500 3700
+Wire Wire Line
+ 12900 3600 13500 3600
+Wire Wire Line
+ 12900 3500 13500 3500
+Wire Wire Line
+ 12900 3400 13500 3400
+Wire Wire Line
+ 12900 3300 13500 3300
+Wire Wire Line
+ 12900 3200 13500 3200
+Wire Wire Line
+ 12900 3100 13500 3100
+Wire Wire Line
+ 12900 3000 13500 3000
+Wire Wire Line
+ 12900 2800 13500 2800
+Wire Wire Line
+ 12900 2700 13500 2700
+Wire Wire Line
+ 12900 2600 13500 2600
+Wire Wire Line
+ 12900 2500 13500 2500
+Wire Wire Line
+ 12900 2400 13500 2400
+Wire Wire Line
+ 12900 2300 13500 2300
+Wire Wire Line
+ 12900 2200 13500 2200
+Wire Wire Line
+ 12900 2100 13500 2100
+Wire Wire Line
+ 12900 1900 13500 1900
+Wire Wire Line
+ 12900 1800 13500 1800
+Wire Wire Line
+ 12900 1700 13500 1700
+Wire Wire Line
+ 12900 1600 13500 1600
+Wire Wire Line
+ 12900 1500 13500 1500
+Wire Wire Line
+ 12900 1400 13500 1400
+Wire Wire Line
+ 12900 1300 13500 1300
+Wire Wire Line
+ 12900 1200 13500 1200
+Text Label 12950 4600 0 60 ~ 0
+TVRAM31
+Text Label 12950 4500 0 60 ~ 0
+TVRAM30
+Text Label 12950 4400 0 60 ~ 0
+TVRAM29
+Text Label 12950 4300 0 60 ~ 0
+TVRAM28
+Text Label 12950 4200 0 60 ~ 0
+TVRAM27
+Text Label 12950 4100 0 60 ~ 0
+TVRAM26
+Text Label 12950 4000 0 60 ~ 0
+TVRAM25
+Text Label 12950 3900 0 60 ~ 0
+TVRAM24
+Text Label 12950 3700 0 60 ~ 0
+TVRAM23
+Text Label 12950 3600 0 60 ~ 0
+TVRAM22
+Text Label 12950 3500 0 60 ~ 0
+TVRAM21
+Text Label 12950 3400 0 60 ~ 0
+TVRAM20
+Text Label 12950 3300 0 60 ~ 0
+TVRAM19
+Text Label 12950 3200 0 60 ~ 0
+TVRAM18
+Text Label 12950 3100 0 60 ~ 0
+TVRAM17
+Text Label 12950 3000 0 60 ~ 0
+TVRAM16
+Text Label 12950 2800 0 60 ~ 0
+TVRAM15
+Text Label 12950 2700 0 60 ~ 0
+TVRAM14
+Text Label 12950 2600 0 60 ~ 0
+TVRAM13
+Text Label 12950 2500 0 60 ~ 0
+TVRAM12
+Text Label 12950 2400 0 60 ~ 0
+TVRAM11
+Text Label 12950 2300 0 60 ~ 0
+TVRAM10
+Text Label 12950 2200 0 60 ~ 0
+TVRAM9
+Text Label 12950 2100 0 60 ~ 0
+TVRAM8
+Text Label 12950 1900 0 60 ~ 0
+TVRAM7
+Text Label 12950 1800 0 60 ~ 0
+TVRAM6
+Text Label 12950 1700 0 60 ~ 0
+TVRAM5
+Text Label 12950 1600 0 60 ~ 0
+TVRAM4
+Text Label 12950 1500 0 60 ~ 0
+TVRAM3
+Text Label 12950 1400 0 60 ~ 0
+TVRAM2
+Text Label 12950 1300 0 60 ~ 0
+TVRAM1
+Text Label 12950 1200 0 60 ~ 0
+TVRAM0
+Text HLabel 2200 10450 0 60 Input ~ 0
+WRAM-
+Text HLabel 2200 10250 0 60 Input ~ 0
+CAS3-
+Text HLabel 1450 10650 0 60 Input ~ 0
+RAS7-
+Text HLabel 1450 10550 0 60 Input ~ 0
+RAS6-
+Text HLabel 1450 10450 0 60 Input ~ 0
+RAS5-
+Text HLabel 1450 10350 0 60 Input ~ 0
+RAS4-
+Text HLabel 1450 10250 0 60 Input ~ 0
+RAS3-
+Text HLabel 1450 10150 0 60 Input ~ 0
+RAS2-
+Text HLabel 1450 10050 0 60 Input ~ 0
+RAS1-
+Text HLabel 1450 9950 0 60 Input ~ 0
+RAS0-
+Text HLabel 2200 10150 0 60 Input ~ 0
+CAS2-
+Text HLabel 2200 10050 0 60 Input ~ 0
+CAS1-
+Text HLabel 2200 9950 0 60 Input ~ 0
+CAS0-
+Text HLabel 1300 650 0 60 Input ~ 0
+MXA[0..10]
+Text HLabel 14900 1000 0 60 3State ~ 0
+TVRAM[0..31]
+Wire Wire Line
+ 11300 6650 10900 6650
+Wire Wire Line
+ 11300 6550 10900 6550
+Wire Wire Line
+ 11300 6450 10900 6450
+Wire Wire Line
+ 11300 6350 10900 6350
+Wire Wire Line
+ 11300 6250 10900 6250
+Wire Wire Line
+ 11300 6150 10900 6150
+Wire Wire Line
+ 11300 6050 10900 6050
+Wire Wire Line
+ 11300 5950 10900 5950
+Wire Wire Line
+ 11300 5850 10900 5850
+Wire Wire Line
+ 11300 5750 10900 5750
+Wire Wire Line
+ 11300 5650 10900 5650
+Wire Wire Line
+ 11300 8150 10900 8150
+Wire Wire Line
+ 11300 7950 10900 7950
+Wire Wire Line
+ 11300 7850 10900 7850
+Wire Wire Line
+ 11300 7750 10900 7750
+Wire Wire Line
+ 11300 7650 10900 7650
+Wire Wire Line
+ 10900 7150 11300 7150
+Wire Wire Line
+ 11300 7150 11300 7350
+NoConn ~ 11300 8650
+NoConn ~ 11300 8550
+NoConn ~ 11300 8450
+NoConn ~ 11300 8350
+Text Label 10950 8150 0 60 ~ 0
+WRAM-
+Text Label 10950 7950 0 60 ~ 0
+CAS3-
+Text Label 10950 7850 0 60 ~ 0
+CAS2-
+Text Label 10950 7750 0 60 ~ 0
+CAS1-
+Text Label 10950 7650 0 60 ~ 0
+CAS0-
+Text Label 10900 7150 0 60 ~ 0
+RAS7-
+Text Label 10950 6650 0 60 ~ 0
+MXA10
+Text Label 10950 6550 0 60 ~ 0
+MXA9
+Text Label 10950 6450 0 60 ~ 0
+MXA8
+Text Label 10950 6350 0 60 ~ 0
+MXA7
+Text Label 10950 6250 0 60 ~ 0
+MXA6
+Text Label 10950 6150 0 60 ~ 0
+MXA5
+Text Label 10950 6050 0 60 ~ 0
+MXA4
+Text Label 10950 5950 0 60 ~ 0
+MXA3
+Text Label 10950 5850 0 60 ~ 0
+MXA2
+Text Label 10950 5750 0 60 ~ 0
+MXA1
+Text Label 10950 5650 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U13
+U 1 1 32FA1E5B
+P 12100 7450
+F 0 "U13" H 12100 8000 70 0000 C CNN
+F 1 "SIM4X32" H 12550 5450 70 0000 C CNN
+F 2 "footprints:sim72" H 12100 7450 60 0001 C CNN
+F 3 "" H 12100 7450 60 0001 C CNN
+ 1 12100 7450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 8500 6650 8100 6650
+Wire Wire Line
+ 8500 6550 8100 6550
+Wire Wire Line
+ 8500 6450 8100 6450
+Wire Wire Line
+ 8500 6350 8100 6350
+Wire Wire Line
+ 8500 6250 8100 6250
+Wire Wire Line
+ 8500 6150 8100 6150
+Wire Wire Line
+ 8500 6050 8100 6050
+Wire Wire Line
+ 8500 5950 8100 5950
+Wire Wire Line
+ 8500 5850 8100 5850
+Wire Wire Line
+ 8500 5750 8100 5750
+Wire Wire Line
+ 8500 5650 8100 5650
+Wire Wire Line
+ 8500 8150 8100 8150
+Wire Wire Line
+ 8500 7950 8100 7950
+Wire Wire Line
+ 8500 7850 8100 7850
+Wire Wire Line
+ 8500 7750 8100 7750
+Wire Wire Line
+ 8500 7650 8100 7650
+Wire Wire Line
+ 8100 7150 8500 7150
+Wire Wire Line
+ 8500 7150 8500 7350
+NoConn ~ 8500 8650
+NoConn ~ 8500 8550
+NoConn ~ 8500 8450
+NoConn ~ 8500 8350
+Text Label 8150 8150 0 60 ~ 0
+WRAM-
+Text Label 8150 7950 0 60 ~ 0
+CAS3-
+Text Label 8150 7850 0 60 ~ 0
+CAS2-
+Text Label 8150 7750 0 60 ~ 0
+CAS1-
+Text Label 8150 7650 0 60 ~ 0
+CAS0-
+Text Label 8100 7150 0 60 ~ 0
+RAS6-
+Text Label 8150 6650 0 60 ~ 0
+MXA10
+Text Label 8150 6550 0 60 ~ 0
+MXA9
+Text Label 8150 6450 0 60 ~ 0
+MXA8
+Text Label 8150 6350 0 60 ~ 0
+MXA7
+Text Label 8150 6250 0 60 ~ 0
+MXA6
+Text Label 8150 6150 0 60 ~ 0
+MXA5
+Text Label 8150 6050 0 60 ~ 0
+MXA4
+Text Label 8150 5950 0 60 ~ 0
+MXA3
+Text Label 8150 5850 0 60 ~ 0
+MXA2
+Text Label 8150 5750 0 60 ~ 0
+MXA1
+Text Label 8150 5650 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U14
+U 1 1 4BF036CF
+P 9300 7450
+F 0 "U14" H 9300 8000 70 0000 C CNN
+F 1 "SIM4X32" H 9750 5450 70 0000 C CNN
+F 2 "footprints:sim72" H 9300 7450 60 0001 C CNN
+F 3 "" H 9300 7450 60 0001 C CNN
+ 1 9300 7450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5650 6650 5250 6650
+Wire Wire Line
+ 5650 6550 5250 6550
+Wire Wire Line
+ 5650 6450 5250 6450
+Wire Wire Line
+ 5650 6350 5250 6350
+Wire Wire Line
+ 5650 6250 5250 6250
+Wire Wire Line
+ 5650 6150 5250 6150
+Wire Wire Line
+ 5650 6050 5250 6050
+Wire Wire Line
+ 5650 5950 5250 5950
+Wire Wire Line
+ 5650 5850 5250 5850
+Wire Wire Line
+ 5650 5750 5250 5750
+Wire Wire Line
+ 5650 5650 5250 5650
+Wire Wire Line
+ 5650 8150 5250 8150
+Wire Wire Line
+ 5650 7950 5250 7950
+Wire Wire Line
+ 5650 7850 5250 7850
+Wire Wire Line
+ 5650 7750 5250 7750
+Wire Wire Line
+ 5650 7650 5250 7650
+Wire Wire Line
+ 5250 7150 5650 7150
+Wire Wire Line
+ 5650 7150 5650 7350
+NoConn ~ 5650 8650
+NoConn ~ 5650 8550
+NoConn ~ 5650 8450
+NoConn ~ 5650 8350
+Text Label 5300 8150 0 60 ~ 0
+WRAM-
+Text Label 5300 7950 0 60 ~ 0
+CAS3-
+Text Label 5300 7850 0 60 ~ 0
+CAS2-
+Text Label 5300 7750 0 60 ~ 0
+CAS1-
+Text Label 5300 7650 0 60 ~ 0
+CAS0-
+Text Label 5250 7150 0 60 ~ 0
+RAS5-
+Text Label 5300 6650 0 60 ~ 0
+MXA10
+Text Label 5300 6550 0 60 ~ 0
+MXA9
+Text Label 5300 6450 0 60 ~ 0
+MXA8
+Text Label 5300 6350 0 60 ~ 0
+MXA7
+Text Label 5300 6250 0 60 ~ 0
+MXA6
+Text Label 5300 6150 0 60 ~ 0
+MXA5
+Text Label 5300 6050 0 60 ~ 0
+MXA4
+Text Label 5300 5950 0 60 ~ 0
+MXA3
+Text Label 5300 5850 0 60 ~ 0
+MXA2
+Text Label 5300 5750 0 60 ~ 0
+MXA1
+Text Label 5300 5650 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U12
+U 1 1 4BF036CE
+P 6450 7450
+F 0 "U12" H 6450 8000 70 0000 C CNN
+F 1 "SIM4X32" H 6900 5450 70 0000 C CNN
+F 2 "footprints:sim72" H 6450 7450 60 0001 C CNN
+F 3 "" H 6450 7450 60 0001 C CNN
+ 1 6450 7450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2800 6650 2400 6650
+Wire Wire Line
+ 2800 6550 2400 6550
+Wire Wire Line
+ 2800 6450 2400 6450
+Wire Wire Line
+ 2800 6350 2400 6350
+Wire Wire Line
+ 2800 6250 2400 6250
+Wire Wire Line
+ 2800 6150 2400 6150
+Wire Wire Line
+ 2800 6050 2400 6050
+Wire Wire Line
+ 2800 5950 2400 5950
+Wire Wire Line
+ 2800 5850 2400 5850
+Wire Wire Line
+ 2800 5750 2400 5750
+Wire Wire Line
+ 2800 5650 2400 5650
+Wire Wire Line
+ 2800 8150 2400 8150
+Wire Wire Line
+ 2800 7950 2400 7950
+Wire Wire Line
+ 2800 7850 2400 7850
+Wire Wire Line
+ 2800 7750 2400 7750
+Wire Wire Line
+ 2800 7650 2400 7650
+Wire Wire Line
+ 2400 7150 2800 7150
+Wire Wire Line
+ 2800 7150 2800 7350
+NoConn ~ 2800 8650
+NoConn ~ 2800 8550
+NoConn ~ 2800 8450
+NoConn ~ 2800 8350
+Text Label 2450 8150 0 60 ~ 0
+WRAM-
+Text Label 2450 7950 0 60 ~ 0
+CAS3-
+Text Label 2450 7850 0 60 ~ 0
+CAS2-
+Text Label 2450 7750 0 60 ~ 0
+CAS1-
+Text Label 2450 7650 0 60 ~ 0
+CAS0-
+Text Label 2400 7150 0 60 ~ 0
+RAS4-
+Text Label 2450 6650 0 60 ~ 0
+MXA10
+Text Label 2450 6550 0 60 ~ 0
+MXA9
+Text Label 2450 6450 0 60 ~ 0
+MXA8
+Text Label 2450 6350 0 60 ~ 0
+MXA7
+Text Label 2450 6250 0 60 ~ 0
+MXA6
+Text Label 2450 6150 0 60 ~ 0
+MXA5
+Text Label 2450 6050 0 60 ~ 0
+MXA4
+Text Label 2450 5950 0 60 ~ 0
+MXA3
+Text Label 2450 5850 0 60 ~ 0
+MXA2
+Text Label 2450 5750 0 60 ~ 0
+MXA1
+Text Label 2450 5650 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U16
+U 1 1 4BF036D0
+P 3600 7450
+F 0 "U16" H 3600 8000 70 0000 C CNN
+F 1 "SIM4X32" H 4050 5450 70 0000 C CNN
+F 2 "footprints:sim72" H 3600 7450 60 0001 C CNN
+F 3 "" H 3600 7450 60 0001 C CNN
+ 1 3600 7450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 11300 2200 10900 2200
+Wire Wire Line
+ 11300 2100 10900 2100
+Wire Wire Line
+ 11300 2000 10900 2000
+Wire Wire Line
+ 11300 1900 10900 1900
+Wire Wire Line
+ 11300 1800 10900 1800
+Wire Wire Line
+ 11300 1700 10900 1700
+Wire Wire Line
+ 11300 1600 10900 1600
+Wire Wire Line
+ 11300 1500 10900 1500
+Wire Wire Line
+ 11300 1400 10900 1400
+Wire Wire Line
+ 11300 1300 10900 1300
+Wire Wire Line
+ 11300 1200 10900 1200
+Wire Wire Line
+ 11300 3700 10900 3700
+Wire Wire Line
+ 11300 3500 10900 3500
+Wire Wire Line
+ 11300 3400 10900 3400
+Wire Wire Line
+ 11300 3300 10900 3300
+Wire Wire Line
+ 11300 3200 10900 3200
+Wire Wire Line
+ 10900 2700 11300 2700
+Wire Wire Line
+ 11300 2700 11300 2900
+NoConn ~ 11300 4200
+NoConn ~ 11300 4100
+NoConn ~ 11300 4000
+NoConn ~ 11300 3900
+Text Label 10950 3700 0 60 ~ 0
+WRAM-
+Text Label 10950 3500 0 60 ~ 0
+CAS3-
+Text Label 10950 3400 0 60 ~ 0
+CAS2-
+Text Label 10950 3300 0 60 ~ 0
+CAS1-
+Text Label 10950 3200 0 60 ~ 0
+CAS0-
+Text Label 10900 2700 0 60 ~ 0
+RAS3-
+Text Label 10950 2200 0 60 ~ 0
+MXA10
+Text Label 10950 2100 0 60 ~ 0
+MXA9
+Text Label 10950 2000 0 60 ~ 0
+MXA8
+Text Label 10950 1900 0 60 ~ 0
+MXA7
+Text Label 10950 1800 0 60 ~ 0
+MXA6
+Text Label 10950 1700 0 60 ~ 0
+MXA5
+Text Label 10950 1600 0 60 ~ 0
+MXA4
+Text Label 10950 1500 0 60 ~ 0
+MXA3
+Text Label 10950 1400 0 60 ~ 0
+MXA2
+Text Label 10950 1300 0 60 ~ 0
+MXA1
+Text Label 10950 1200 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U15
+U 1 1 4BF036D1
+P 12100 3000
+F 0 "U15" H 12100 3550 70 0000 C CNN
+F 1 "SIM4X32" H 12550 1000 70 0000 C CNN
+F 2 "footprints:sim72" H 12100 3000 60 0001 C CNN
+F 3 "" H 12100 3000 60 0001 C CNN
+ 1 12100 3000
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 8500 2200 8100 2200
+Wire Wire Line
+ 8500 2100 8100 2100
+Wire Wire Line
+ 8500 2000 8100 2000
+Wire Wire Line
+ 8500 1900 8100 1900
+Wire Wire Line
+ 8500 1800 8100 1800
+Wire Wire Line
+ 8500 1700 8100 1700
+Wire Wire Line
+ 8500 1600 8100 1600
+Wire Wire Line
+ 8500 1500 8100 1500
+Wire Wire Line
+ 8500 1400 8100 1400
+Wire Wire Line
+ 8500 1300 8100 1300
+Wire Wire Line
+ 8500 1200 8100 1200
+Wire Wire Line
+ 8500 3700 8100 3700
+Wire Wire Line
+ 8500 3500 8100 3500
+Wire Wire Line
+ 8500 3400 8100 3400
+Wire Wire Line
+ 8500 3300 8100 3300
+Wire Wire Line
+ 8500 3200 8100 3200
+Wire Wire Line
+ 8100 2700 8500 2700
+Wire Wire Line
+ 8500 2700 8500 2900
+NoConn ~ 8500 4200
+NoConn ~ 8500 4100
+NoConn ~ 8500 4000
+NoConn ~ 8500 3900
+Text Label 8150 3700 0 60 ~ 0
+WRAM-
+Text Label 8150 3500 0 60 ~ 0
+CAS3-
+Text Label 8150 3400 0 60 ~ 0
+CAS2-
+Text Label 8150 3300 0 60 ~ 0
+CAS1-
+Text Label 8150 3200 0 60 ~ 0
+CAS0-
+Text Label 8100 2700 0 60 ~ 0
+RAS2-
+Text Label 8150 2200 0 60 ~ 0
+MXA10
+Text Label 8150 2100 0 60 ~ 0
+MXA9
+Text Label 8150 2000 0 60 ~ 0
+MXA8
+Text Label 8150 1900 0 60 ~ 0
+MXA7
+Text Label 8150 1800 0 60 ~ 0
+MXA6
+Text Label 8150 1700 0 60 ~ 0
+MXA5
+Text Label 8150 1600 0 60 ~ 0
+MXA4
+Text Label 8150 1500 0 60 ~ 0
+MXA3
+Text Label 8150 1400 0 60 ~ 0
+MXA2
+Text Label 8150 1300 0 60 ~ 0
+MXA1
+Text Label 8150 1200 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U17
+U 1 1 4BF036D2
+P 9300 3000
+F 0 "U17" H 9300 3550 70 0000 C CNN
+F 1 "SIM4X32" H 9750 1000 70 0000 C CNN
+F 2 "footprints:sim72" H 9300 3000 60 0001 C CNN
+F 3 "" H 9300 3000 60 0001 C CNN
+ 1 9300 3000
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5650 2200 5250 2200
+Wire Wire Line
+ 5650 2100 5250 2100
+Wire Wire Line
+ 5650 2000 5250 2000
+Wire Wire Line
+ 5650 1900 5250 1900
+Wire Wire Line
+ 5650 1800 5250 1800
+Wire Wire Line
+ 5650 1700 5250 1700
+Wire Wire Line
+ 5650 1600 5250 1600
+Wire Wire Line
+ 5650 1500 5250 1500
+Wire Wire Line
+ 5650 1400 5250 1400
+Wire Wire Line
+ 5650 1300 5250 1300
+Wire Wire Line
+ 5650 1200 5250 1200
+Wire Wire Line
+ 5650 3700 5250 3700
+Wire Wire Line
+ 5650 3500 5250 3500
+Wire Wire Line
+ 5650 3400 5250 3400
+Wire Wire Line
+ 5650 3300 5250 3300
+Wire Wire Line
+ 5650 3200 5250 3200
+Wire Wire Line
+ 5250 2700 5650 2700
+Wire Wire Line
+ 5650 2700 5650 2900
+NoConn ~ 5650 4200
+NoConn ~ 5650 4100
+NoConn ~ 5650 4000
+NoConn ~ 5650 3900
+Text Label 5300 3700 0 60 ~ 0
+WRAM-
+Text Label 5300 3500 0 60 ~ 0
+CAS3-
+Text Label 5300 3400 0 60 ~ 0
+CAS2-
+Text Label 5300 3300 0 60 ~ 0
+CAS1-
+Text Label 5300 3200 0 60 ~ 0
+CAS0-
+Text Label 5250 2700 0 60 ~ 0
+RAS1-
+Text Label 5300 2200 0 60 ~ 0
+MXA10
+Text Label 5300 2100 0 60 ~ 0
+MXA9
+Text Label 5300 2000 0 60 ~ 0
+MXA8
+Text Label 5300 1900 0 60 ~ 0
+MXA7
+Text Label 5300 1800 0 60 ~ 0
+MXA6
+Text Label 5300 1700 0 60 ~ 0
+MXA5
+Text Label 5300 1600 0 60 ~ 0
+MXA4
+Text Label 5300 1500 0 60 ~ 0
+MXA3
+Text Label 5300 1400 0 60 ~ 0
+MXA2
+Text Label 5300 1300 0 60 ~ 0
+MXA1
+Text Label 5300 1200 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U18
+U 1 1 4BF036D3
+P 6450 3000
+F 0 "U18" H 6450 3550 70 0000 C CNN
+F 1 "SIM4X32" H 6900 1000 70 0000 C CNN
+F 2 "footprints:sim72" H 6450 3000 60 0001 C CNN
+F 3 "" H 6450 3000 60 0001 C CNN
+ 1 6450 3000
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2800 2200 2400 2200
+Wire Wire Line
+ 2800 2100 2400 2100
+Wire Wire Line
+ 2800 2000 2400 2000
+Wire Wire Line
+ 2800 1900 2400 1900
+Wire Wire Line
+ 2800 1800 2400 1800
+Wire Wire Line
+ 2800 1700 2400 1700
+Wire Wire Line
+ 2800 1600 2400 1600
+Wire Wire Line
+ 2800 1500 2400 1500
+Wire Wire Line
+ 2800 1400 2400 1400
+Wire Wire Line
+ 2800 1300 2400 1300
+Wire Wire Line
+ 2800 1200 2400 1200
+Wire Wire Line
+ 2800 3700 2400 3700
+Wire Wire Line
+ 2800 3500 2400 3500
+Wire Wire Line
+ 2800 3400 2400 3400
+Wire Wire Line
+ 2800 3300 2400 3300
+Wire Wire Line
+ 2800 3200 2400 3200
+Wire Wire Line
+ 2400 2700 2800 2700
+Wire Wire Line
+ 2800 2700 2800 2900
+NoConn ~ 2800 4200
+NoConn ~ 2800 4100
+NoConn ~ 2800 4000
+NoConn ~ 2800 3900
+Text Label 2450 3700 0 60 ~ 0
+WRAM-
+Text Label 2450 3500 0 60 ~ 0
+CAS3-
+Text Label 2450 3400 0 60 ~ 0
+CAS2-
+Text Label 2450 3300 0 60 ~ 0
+CAS1-
+Text Label 2450 3200 0 60 ~ 0
+CAS0-
+Text Label 2400 2700 0 60 ~ 0
+RAS0-
+Text Label 2450 2200 0 60 ~ 0
+MXA10
+Text Label 2450 2100 0 60 ~ 0
+MXA9
+Text Label 2450 2000 0 60 ~ 0
+MXA8
+Text Label 2450 1900 0 60 ~ 0
+MXA7
+Text Label 2450 1800 0 60 ~ 0
+MXA6
+Text Label 2450 1700 0 60 ~ 0
+MXA5
+Text Label 2450 1600 0 60 ~ 0
+MXA4
+Text Label 2450 1500 0 60 ~ 0
+MXA3
+Text Label 2450 1400 0 60 ~ 0
+MXA2
+Text Label 2450 1300 0 60 ~ 0
+MXA1
+Text Label 2450 1200 0 60 ~ 0
+MXA0
+$Comp
+L SIM4X32 U19
+U 1 1 4BF036D4
+P 3600 3000
+F 0 "U19" H 3600 3550 70 0000 C CNN
+F 1 "SIM4X32" H 4050 1000 70 0000 C CNN
+F 2 "footprints:sim72" H 3600 3000 60 0001 C CNN
+F 3 "" H 3600 3000 60 0001 C CNN
+ 1 3600 3000
+ 1 0 0 -1
+$EndComp
+$EndSCHEMATC
diff --git a/demos/video/video-cache.lib b/demos/video/video-cache.lib
new file mode 100644
index 0000000..bee8d0b
--- /dev/null
+++ b/demos/video/video-cache.lib
@@ -0,0 +1,1720 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# +12V
+#
+DEF +12V #PWR 0 0 N Y 1 F P
+F0 "#PWR" 0 -50 20 H I C CNN
+F1 "+12V" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +12V 1 0 0 0 U 20 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# +3.3V
+#
+DEF +3.3V #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -40 30 H I C CNN
+F1 "+3.3V" 0 110 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS +3,3V
+DRAW
+X +3.3V 1 0 0 0 U 30 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# +5F
+#
+DEF +5F #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -50 20 H I C CNN
+F1 "+5F" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +5F 1 0 0 0 U 20 30 0 0 W N
+C 0 60 20 0 1 0 N
+P 3 0 1 0 0 0 0 40 0 40 N
+ENDDRAW
+ENDDEF
+#
+# +5V
+#
+DEF +5V #PWR 0 40 Y Y 1 F P
+F0 "#PWR" 0 90 20 H I C CNN
+F1 "+5V" 0 90 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X +5V 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 4 0 1 0 0 0 0 30 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# 24C16
+#
+DEF 24C16 U 0 30 Y Y 1 F N
+F0 "U" 150 350 60 H V C CNN
+F1 "24C16" 200 -350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS 24C512
+DRAW
+X GND 4 0 -500 200 U 60 60 0 0 W
+X VCC 8 0 500 200 D 60 60 0 0 W
+S -400 -300 400 300 1 1 0 N
+X A0 1 -700 200 300 R 60 60 1 1 I
+X A1 2 -700 100 300 R 60 60 1 1 I
+X A2 3 -700 0 300 R 60 60 1 1 I
+X SDA 5 700 -200 300 L 60 60 1 1 B
+X SCL 6 700 -100 300 L 60 60 1 1 I
+X WP 7 700 100 300 L 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# 4C4001
+#
+DEF 4C4001 U 0 40 Y Y 1 F N
+F0 "U" 50 0 70 H V C CNN
+F1 "4C4001" 50 -300 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -350 750 350 -750 0 1 0 N
+X D0 1 650 700 300 L 60 60 1 1 T
+X D1 2 650 600 300 L 60 60 1 1 T
+X WR 3 -650 -600 300 R 60 60 1 1 I I
+X RAS 4 -650 -400 300 R 60 60 1 1 I I
+X A9 5 -650 -200 300 R 60 60 1 1 I
+X A0 6 -650 700 300 R 60 60 1 1 I
+X A1 7 -650 600 300 R 60 60 1 1 I
+X A2 8 -650 500 300 R 60 60 1 1 I
+X A3 9 -650 400 300 R 60 60 1 1 I
+X VCC 10 -250 750 0 U 60 60 1 1 W N
+X GND 20 -250 -750 0 U 60 60 1 1 W N
+X A4 11 -650 300 300 R 60 60 1 1 I
+X A5 12 -650 200 300 R 60 60 1 1 I
+X A6 13 -650 100 300 R 60 60 1 1 I
+X A7 14 -650 0 300 R 60 60 1 1 I
+X A8 15 -650 -100 300 R 60 60 1 1 I
+X OE 16 -650 -700 300 R 60 60 1 1 I I
+X CAS 17 -650 -500 300 R 60 60 1 1 I I
+X D2 18 650 500 300 L 60 60 1 1 T
+X D3 19 650 400 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# 74LS245
+#
+DEF 74LS245 U 0 10 Y Y 1 F N
+F0 "U" 100 575 50 H V L BNN
+F1 "74LS245" 50 -575 50 H V L TNN
+F2 "" 50 -650 30 H V L CNN
+F3 "" 100 575 30 H V C CNN
+ALIAS 74HC245
+DRAW
+X GND 10 0 -550 0 U 60 60 0 0 W N
+X VCC 20 0 550 0 D 60 60 0 0 W N
+S -400 550 400 -550 0 1 0 N
+P 3 0 1 0 50 100 0 -100 -100 -100 N
+P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
+X A->B 1 -700 -400 300 R 60 60 1 1 I
+X A0 2 -700 500 300 R 60 60 1 1 T
+X A1 3 -700 400 300 R 60 60 1 1 T
+X A2 4 -700 300 300 R 60 60 1 1 T
+X A3 5 -700 200 300 R 60 60 1 1 T
+X A4 6 -700 100 300 R 60 60 1 1 T
+X A5 7 -700 0 300 R 60 60 1 1 T
+X A6 8 -700 -100 300 R 60 60 1 1 T
+X A7 9 -700 -200 300 R 60 60 1 1 T
+X B7 11 700 -200 300 L 60 60 1 1 T
+X B6 12 700 -100 300 L 60 60 1 1 T
+X B5 13 700 0 300 L 60 60 1 1 T
+X B4 14 700 100 300 L 60 60 1 1 T
+X B3 15 700 200 300 L 60 60 1 1 T
+X B2 16 700 300 300 L 60 60 1 1 T
+X B1 17 700 400 300 L 60 60 1 1 T
+X B0 18 700 500 300 L 60 60 1 1 T
+X CE 19 -700 -500 300 R 60 60 1 1 I I
+ENDDRAW
+ENDDEF
+#
+# AV9173
+#
+DEF AV9173 U 0 30 Y Y 1 F N
+F0 "U" 170 450 60 H V C CNN
+F1 "AV9173" 260 -450 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -650 350 650 -350 0 1 0 N
+X FSIGIN 1 -950 100 300 R 60 60 1 1 I
+X FREFIN 2 -950 300 300 R 60 60 1 1 I
+X GND 3 -50 -500 150 U 60 60 1 1 I
+X FS0 4 -950 -100 300 R 60 60 1 1 I
+X OE 5 -950 -300 300 R 60 60 1 1 I
+X CKKOUT 6 950 100 300 L 60 60 1 1 T
+X VCC 7 -50 500 150 D 60 60 1 1 I
+X CLK/2 8 950 -100 300 L 60 60 1 1 T
+ENDDRAW
+ENDDEF
+#
+# BNC
+#
+DEF BNC P 0 40 Y N 1 F N
+F0 "P" 10 120 60 H V C CNN
+F1 "BNC" 110 -60 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 20 0 1 8 N
+C 0 0 70 0 1 12 N
+X In 1 -150 0 130 R 40 40 1 1 P
+X Ext 2 0 -200 130 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# BT253
+#
+DEF BT253 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "BT253" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS BT254
+DRAW
+S -750 -2600 750 2600 0 1 0 N
+X VAA 1 -50 2900 300 D 60 60 1 1 I
+X GND 2 -150 -2900 300 U 60 60 1 1 I
+X GND 3 -50 -2900 300 U 60 60 1 1 I
+X SYNC0 4 -1050 300 300 R 60 60 1 1 I I
+X SYNC1 5 -1050 -200 300 R 60 60 1 1 I I
+X CEXT1 6 -1050 2400 300 R 60 60 1 1 O
+X CEXT2 7 -1050 2500 300 R 60 60 1 1 I
+X CSYNC 8 1050 2500 300 L 60 60 1 1 O I
+X D7 9 -1050 -1300 300 R 60 60 1 1 T
+X D6 10 -1050 -1200 300 R 60 60 1 1 T
+X RD 20 -1050 -1500 300 R 60 60 1 1 I I
+X B2 30 1050 -1800 300 L 60 60 1 1 T
+X RCLOCK 40 1050 600 300 L 60 60 1 1 I C
+X R6 50 1050 -400 300 L 60 60 1 1 T
+X GIN 60 1050 1700 300 L 60 60 1 1 I
+X GOUT 70 1050 1800 300 L 60 60 1 1 O
+X IOUT1 80 -1050 2000 300 R 60 60 1 1 P
+X D5 11 -1050 -1100 300 R 60 60 1 1 T
+X RREF- 21 -1050 1000 300 R 60 60 1 1 I
+X B1 31 1050 -1700 300 L 60 60 1 1 T
+X GND 41 50 -2900 300 U 60 60 1 1 I
+X R5 51 1050 -300 300 L 60 60 1 1 T
+X BLEVEL 61 1050 800 300 L 60 60 1 1 I
+X IOUT5 71 -1050 1600 300 R 60 60 1 1 P
+X RVID1 81 -1050 100 300 R 60 60 1 1 I
+X D4 12 -1050 -1000 300 R 60 60 1 1 T
+X GREF- 22 -1050 900 300 R 60 60 1 1 I
+X B0 32 1050 -1600 300 L 60 60 1 1 T
+X GND 42 150 -2900 300 U 60 60 1 1 I
+X R4 52 1050 -200 300 L 60 60 1 1 T
+X RIN 62 1050 2000 300 L 60 60 1 1 I
+X ROUT 72 1050 2100 300 L 60 60 1 1 O
+X IOUT0 82 -1050 2100 300 R 60 60 1 1 P
+X D3 13 -1050 -900 300 R 60 60 1 1 T
+X BREF- 23 -1050 800 300 R 60 60 1 1 I
+X G7 33 1050 -1400 300 L 60 60 1 1 T
+X VAA 43 50 2900 300 D 60 60 1 1 I
+X R3 53 1050 -100 300 L 60 60 1 1 T
+X GLEVEL 63 1050 900 300 L 60 60 1 1 I
+X IOUT4 73 -1050 1700 300 R 60 60 1 1 P
+X RVID0 83 -1050 600 300 R 60 60 1 1 I
+X D2 14 -1050 -800 300 R 60 60 1 1 T
+X WR 24 -1050 -1600 300 R 60 60 1 1 I I
+X G6 34 1050 -1300 300 L 60 60 1 1 T
+X VAA 44 150 2900 300 D 60 60 1 1 I
+X R2 54 1050 0 300 L 60 60 1 1 T
+X BREF+ 64 -1050 1200 300 R 60 60 1 1 I
+X BVID1 74 -1050 -100 300 R 60 60 1 1 I
+X VAA 84 -150 2900 300 D 60 60 1 1 I
+X D1 15 -1050 -700 300 R 60 60 1 1 T
+X B7 25 1050 -2300 300 L 60 60 1 1 T
+X G5 35 1050 -1200 300 L 60 60 1 1 T
+X G3 45 1050 -1000 300 L 60 60 1 1 T
+X R1 55 1050 100 300 L 60 60 1 1 T
+X GREF+ 65 -1050 1300 300 R 60 60 1 1 I
+X BVID0 75 -1050 400 300 R 60 60 1 1 I
+X D0 16 -1050 -600 300 R 60 60 1 1 T
+X B6 26 1050 -2200 300 L 60 60 1 1 T
+X G4 36 1050 -1100 300 L 60 60 1 1 T
+X G2 46 1050 -900 300 L 60 60 1 1 T
+X R0 56 1050 200 300 L 60 60 1 1 T
+X RREF+ 66 -1050 1400 300 R 60 60 1 1 I
+X IOUT3 76 -1050 1800 300 R 60 60 1 1 P
+X A0 17 -1050 -1800 300 R 60 60 1 1 I
+X B5 27 1050 -2100 300 L 60 60 1 1 T
+X ZERO 37 1050 1100 300 L 60 60 1 1 I
+X G1 47 1050 -800 300 L 60 60 1 1 T
+X OE 57 1050 -2500 300 L 60 60 1 1 I I
+X RLEVEL 67 1050 1000 300 L 60 60 1 1 I
+X GVID1 77 -1050 0 300 R 60 60 1 1 I
+X A1 18 -1050 -1900 300 R 60 60 1 1 I
+X B4 28 1050 -2000 300 L 60 60 1 1 T
+X BCLOCK 38 1050 400 300 L 60 60 1 1 I C
+X G0 48 1050 -700 300 L 60 60 1 1 T
+X BIN 58 1050 1400 300 L 60 60 1 1 I
+X BOUT 68 1050 1500 300 L 60 60 1 1 O
+X IOUT2 78 -1050 1900 300 R 60 60 1 1 P
+X A2 19 -1050 -2000 300 R 60 60 1 1 I
+X B3 29 1050 -1900 300 L 60 60 1 1 T
+X GCLOCK 39 1050 500 300 L 60 60 1 1 I C
+X R7 49 1050 -500 300 L 60 60 1 1 T
+X CLAMP 59 1050 1200 300 L 60 60 1 1 I
+X RSET 69 -1050 2300 300 R 60 60 1 1 I
+X GVID0 79 -1050 500 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BT473
+#
+DEF BT473 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "BT473" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -700 -2400 700 2400 0 1 0 N
+X VAA 1 -300 2700 300 D 60 60 1 1 I
+X VAA 2 -200 2700 300 D 60 60 1 1 I
+X GND 3 -200 -2700 300 U 60 60 1 1 I
+X GND 4 -100 -2700 300 U 60 60 1 1 I
+X S0 5 1000 -1500 300 L 60 60 1 1 I
+X S1 6 1000 -1600 300 L 60 60 1 1 I
+X BLANK 7 1000 -200 300 L 60 60 1 1 I I
+X SYNC 8 1000 0 300 L 60 60 1 1 I I
+X CLOCK 9 1000 -400 300 L 60 60 1 1 I C
+X OL0 10 -1000 -2000 300 R 60 60 1 1 I
+X D6 20 -1000 -1000 300 R 60 60 1 1 I
+X CR3 30 1000 -1100 300 L 60 60 1 1 O
+X IREF 40 1000 1200 300 L 60 60 1 1 I
+X R5 50 -1000 1800 300 R 60 60 1 1 I
+X G7 60 -1000 700 300 R 60 60 1 1 I
+X OL1 11 -1000 -2100 300 R 60 60 1 1 I
+X D7 21 -1000 -1100 300 R 60 60 1 1 I
+X GND 31 0 -2700 300 U 60 60 1 1 I
+X COMP 41 1000 800 300 L 60 60 1 1 I
+X R6 51 -1000 1700 300 R 60 60 1 1 I
+X B0 61 -1000 500 300 R 60 60 1 1 I
+X OL2 12 -1000 -2200 300 R 60 60 1 1 I
+X WR 22 -1000 -1700 300 R 60 60 1 1 I I
+X GND 32 100 -2700 300 U 60 60 1 1 I
+X OPA 42 1000 600 300 L 60 60 1 1 O
+X R7 52 -1000 1600 300 R 60 60 1 1 I
+X B1 62 -1000 400 300 R 60 60 1 1 I
+X OL3 13 -1000 -2300 300 R 60 60 1 1 I
+X RD 23 -1000 -1800 300 R 60 60 1 1 I I
+X VAA 33 -100 2700 300 D 60 60 1 1 I
+X VREF 43 1000 1000 300 L 60 60 1 1 I
+X G0 53 -1000 1400 300 R 60 60 1 1 I
+X B2 63 -1000 300 300 R 60 60 1 1 I
+X D0 14 -1000 -400 300 R 60 60 1 1 I
+X RS0 24 -1000 -1300 300 R 60 60 1 1 I
+X VAA 34 0 2700 300 D 60 60 1 1 I
+X VREFOUT 44 1000 400 300 L 60 60 1 1 O
+X G1 54 -1000 1300 300 R 60 60 1 1 I
+X B3 64 -1000 200 300 R 60 60 1 1 I
+X D1 15 -1000 -500 300 R 60 60 1 1 I
+X RS1 25 -1000 -1400 300 R 60 60 1 1 I
+X VAA 35 100 2700 300 D 60 60 1 1 I
+X R0 45 -1000 2300 300 R 60 60 1 1 I
+X G2 55 -1000 1200 300 R 60 60 1 1 I
+X B4 65 -1000 100 300 R 60 60 1 1 I
+X D2 16 -1000 -600 300 R 60 60 1 1 I
+X RS2 26 -1000 -1500 300 R 60 60 1 1 I
+X VAA 36 200 2700 300 D 60 60 1 1 I
+X R1 46 -1000 2200 300 R 60 60 1 1 I
+X G3 56 -1000 1100 300 R 60 60 1 1 I
+X B5 66 -1000 0 300 R 60 60 1 1 I
+X D3 17 -1000 -700 300 R 60 60 1 1 I
+X CR0 27 1000 -800 300 L 60 60 1 1 O
+X RED 37 1000 2000 300 L 60 60 1 1 O
+X R2 47 -1000 2100 300 R 60 60 1 1 I
+X G4 57 -1000 1000 300 R 60 60 1 1 I
+X B6 67 -1000 -100 300 R 60 60 1 1 I
+X D4 18 -1000 -800 300 R 60 60 1 1 I
+X CR1 28 1000 -900 300 L 60 60 1 1 O
+X GRE 38 1000 1800 300 L 60 60 1 1 O
+X R3 48 -1000 2000 300 R 60 60 1 1 I
+X G5 58 -1000 900 300 R 60 60 1 1 I
+X B7 68 -1000 -200 300 R 60 60 1 1 I
+X D5 19 -1000 -900 300 R 60 60 1 1 I
+X CR2 29 1000 -1000 300 L 60 60 1 1 O
+X BLU 39 1000 1600 300 L 60 60 1 1 O
+X R4 49 -1000 1900 300 R 60 60 1 1 I
+X G6 59 -1000 800 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BT812
+#
+DEF BT812 U 0 30 Y Y 1 F N
+F0 "U" 1870 3350 60 H V C CNN
+F1 "BT812" 1230 -3350 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -1750 -3300 1750 3300 0 1 0 N
+X VAA 1 -650 3600 300 D 60 60 1 1 I
+X VAA 2 -550 3600 300 D 60 60 1 1 I
+X YREF- 3 -2050 -100 300 R 60 60 1 1 I
+X VIN_Y/COMP. 4 2050 -300 300 L 60 60 1 1 I
+X GNDA 5 -650 -3600 300 U 60 60 1 1 I
+X OUT_Y 6 2050 0 300 L 60 60 1 1 O
+X YLEVEL 7 -2050 100 300 R 60 60 1 1 I
+X GND 30 -1550 -3600 300 U 60 60 1 1 I
+X VAA 40 -350 3600 300 D 60 60 1 1 I
+X B5 50 2050 600 300 L 60 60 1 1 T
+X R5 60 2050 2400 300 L 60 60 1 1 T
+X G4 70 2050 1600 300 L 60 60 1 1 T
+X VAA 80 250 3600 300 D 60 60 1 1 I
+X TCLK 90 -2050 2000 300 R 60 60 1 1 I
+X VCC 31 -1650 3600 300 D 60 60 1 1 I
+X VAA 41 -250 3600 300 D 60 60 1 1 I
+X B4 51 2050 700 300 L 60 60 1 1 T
+X R4 61 2050 2500 300 L 60 60 1 1 T
+X G3 71 2050 1700 300 L 60 60 1 1 T
+X VAA 81 350 3600 300 D 60 60 1 1 I
+X VCC 91 -1250 3600 300 D 60 60 1 1 P
+X ACTIVE 32 2050 -1800 300 L 60 60 1 1 O
+X VAA 42 -150 3600 300 D 60 60 1 1 I
+X B3 52 2050 800 300 L 60 60 1 1 T
+X R3 62 2050 2600 300 L 60 60 1 1 T
+X G2 72 2050 1800 300 L 60 60 1 1 T
+X VAA 82 450 3600 300 D 60 60 1 1 I
+X D0 92 -2050 -1200 300 R 60 60 1 1 T
+X VACTIVE 33 2050 -1700 300 L 60 60 1 1 O I
+X VAA 43 -50 3600 300 D 60 60 1 1 I
+X B2 53 2050 900 300 L 60 60 1 1 T
+X R2 63 2050 2700 300 L 60 60 1 1 T
+X G1 73 2050 1900 300 L 60 60 1 1 T
+X WR 83 -2050 -2500 300 R 60 60 1 1 I I
+X D1 93 -2050 -1300 300 R 60 60 1 1 T
+X VRESET 34 2050 -1500 300 L 60 60 1 1 O I
+X GND 44 -1450 -3600 300 U 60 60 1 1 I
+X B1 54 2050 1000 300 L 60 60 1 1 T
+X R1 64 2050 2800 300 L 60 60 1 1 T
+X G0 74 2050 2000 300 L 60 60 1 1 T
+X RS0 84 -2050 -2100 300 R 60 60 1 1 I
+X D2 94 -2050 -1400 300 R 60 60 1 1 T
+X FIELD_1 25 2050 -2100 300 L 60 60 1 1 B
+X HACTIVE 35 2050 -1600 300 L 60 60 1 1 O I
+X VCC 45 -1550 3600 300 D 60 60 1 1 I
+X B0 55 2050 1100 300 L 60 60 1 1 T
+X R0 65 2050 2900 300 L 60 60 1 1 T
+X GND 75 -1150 -3600 300 U 60 60 1 1 I
+X RS1 85 -2050 -2200 300 R 60 60 1 1 I
+X D3 95 -2050 -1500 300 R 60 60 1 1 T
+X GND 16 -1650 -3600 300 U 60 60 1 1 I
+X FIELD_0 26 2050 -2000 300 L 60 60 1 1 B
+X HRESET 36 2050 -1400 300 L 60 60 1 1 O I
+X VTU_EN 46 -2050 2300 300 R 60 60 1 1 I I
+X GND 56 -1350 -3600 300 U 60 60 1 1 I
+X GND 66 -1250 -3600 300 U 60 60 1 1 I
+X VCC 76 -1350 3600 300 D 60 60 1 1 I
+X RD 86 -2050 -2400 300 R 60 60 1 1 I I
+X D4 96 -2050 -1600 300 R 60 60 1 1 T
+X FIELD_2 27 2050 -2200 300 L 60 60 1 1 O
+X SERROR 37 2050 -1100 300 L 60 60 1 1 O
+X PIXEL_EN 47 -2050 2200 300 R 60 60 1 1 I I
+X VCC 57 -1450 3600 300 D 60 60 1 1 I
+X G7 67 2050 1300 300 L 60 60 1 1 T
+X RESET 87 -2050 -2700 300 R 60 60 1 1 I I
+X D5 97 -2050 -1700 300 R 60 60 1 1 T
+X CBFLAG 28 2050 -1000 300 L 60 60 1 1 O
+X CAPTURE 38 2050 -800 300 L 60 60 1 1 O
+X B7 48 2050 400 300 L 60 60 1 1 T
+X R7 58 2050 2200 300 L 60 60 1 1 T
+X G6 68 2050 1400 300 L 60 60 1 1 T
+X VAA 78 50 3600 300 D 60 60 1 1 I
+X TDI 88 -2050 1800 300 R 60 60 1 1 I
+X GND 98 -1050 -3600 300 U 60 60 1 1 I
+X VALID 29 2050 -900 300 L 60 60 1 1 O
+X VAA 39 -450 3600 300 D 60 60 1 1 I
+X B6 49 2050 500 300 L 60 60 1 1 T
+X R6 59 2050 2300 300 L 60 60 1 1 T
+X G5 69 2050 1500 300 L 60 60 1 1 T
+X VAA 79 150 3600 300 D 60 60 1 1 I
+X TMS 89 -2050 1900 300 R 60 60 1 1 I
+X D6 99 -2050 -1800 300 R 60 60 1 1 T
+X D7 100 -2050 -1900 300 R 60 60 1 1 T
+X N/C 110 2050 -2900 300 L 60 60 1 1 I
+X VAA 120 650 3600 300 D 60 60 1 1 I
+X GNDA 130 -150 -3600 300 U 60 60 1 1 I
+X SYNC_DET 140 -2050 300 300 R 60 60 1 1 I
+X VID3_Y 150 -2050 600 300 R 60 60 1 1 I
+X VAA 160 1650 3600 300 D 60 60 1 1 I
+X TDO 101 -2050 1700 300 R 60 60 1 1 O
+X GND 111 -850 -3600 300 U 60 60 1 1 I
+X VAA 121 750 3600 300 D 60 60 1 1 I
+X VID3_C 131 -2050 500 300 R 60 60 1 1 I
+X VAA 141 1150 3600 300 D 60 60 1 1 I
+X GNDA 151 650 -3600 300 U 60 60 1 1 I
+X VCC 102 -1150 3600 300 D 60 60 1 1 I
+X VCC 112 -1050 3600 300 D 60 60 1 1 I
+X VAA 122 850 3600 300 D 60 60 1 1 I
+X VAA 132 1050 3600 300 D 60 60 1 1 I
+X VAA 142 1250 3600 300 D 60 60 1 1 I
+X VID2_Y 152 -2050 900 300 R 60 60 1 1 I
+X GND 103 -950 -3600 300 U 60 60 1 1 I
+X REFOUT 113 -2050 -800 300 R 60 60 1 1 O
+X VAA 123 950 3600 300 D 60 60 1 1 P
+X GNDA 143 350 -3600 300 U 60 60 1 1 I
+X GNDA 153 750 -3600 300 U 60 60 1 1 I
+X CLKX1 104 2050 -2400 300 L 60 60 1 1 O
+X CLEVEL 114 -2050 -300 300 R 60 60 1 1 I
+X GNDA 124 -450 -3600 300 U 60 60 1 1 I
+X GNDA 134 -50 -3600 300 U 60 60 1 1 I
+X YREF+ 144 -2050 0 300 R 60 60 1 1 I
+X VID1_Y 154 -2050 1200 300 R 60 60 1 1 I
+X CLKX2 105 2050 -2500 300 L 60 60 1 1 O
+X OUT_C 115 2050 -100 300 L 60 60 1 1 O
+X VID0_C 125 -2050 1400 300 R 60 60 1 1 I
+X R/2 135 -2050 -700 300 R 60 60 1 1 I
+X GNDA 145 450 -3600 300 U 60 60 1 1 I
+X GNDA 155 850 -3600 300 U 60 60 1 1 I
+X XTAL2_IN 106 -2050 2600 300 R 60 60 1 1 I
+X GNDA 116 -550 -3600 300 U 60 60 1 1 I
+X GNDA 126 -350 -3600 300 U 60 60 1 1 I
+X GNDA 136 50 -3600 300 U 60 60 1 1 I
+X VID0_Y 156 -2050 1500 300 R 60 60 1 1 I
+X XTAL2_OUT 107 -2050 2500 300 R 60 60 1 1 O
+X VIN_C 117 2050 -400 300 L 60 60 1 1 I
+X VID1_C 127 -2050 1100 300 R 60 60 1 1 I
+X CREF+ 137 -2050 -400 300 R 60 60 1 1 I
+X GNDA 147 550 -3600 300 U 60 60 1 1 I
+X GNDA 157 950 -3600 300 U 60 60 1 1 I
+X XTAL1_IN 108 -2050 2900 300 R 60 60 1 1 I
+X CREF- 118 -2050 -500 300 R 60 60 1 1 I
+X GNDA 128 -250 -3600 300 U 60 60 1 1 I
+X GNDA 138 150 -3600 300 U 60 60 1 1 I
+X VAA 158 1450 3600 300 D 60 60 1 1 I
+X XTAL1_OUT 109 -2050 2800 300 R 60 60 1 1 O
+X VAA 119 550 3600 300 D 60 60 1 1 I
+X VID2_C 129 -2050 800 300 R 60 60 1 1 I
+X GNDA 139 250 -3600 300 U 60 60 1 1 I
+X VAA 149 1350 3600 300 D 60 60 1 1 I
+X VAA 159 1550 3600 300 D 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "" 38 -150 30 H V C CNN
+F3 "" 0 100 30 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_1
+#
+DEF ~CONN_1 P 0 30 N N 1 F N
+F0 "P" 80 0 40 H V L CNN
+F1 "CONN_1" 0 55 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 0 31 0 1 0 N
+P 2 0 1 0 -30 0 -50 0 N
+X 1 1 -150 0 100 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_2
+#
+DEF CONN_2 P 0 40 Y N 1 F N
+F0 "P" -50 0 40 V V C CNN
+F1 "CONN_2" 50 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 150 100 -150 0 1 0 N
+X P1 1 -350 100 250 R 60 60 1 1 P I
+X PM 2 -350 -100 250 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CONN_5
+#
+DEF CONN_5 P 0 40 Y Y 1 F N
+F0 "P" -50 0 50 V V C CNN
+F1 "CONN_5" 50 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -100 250 100 -250 0 1 0 f
+X ~ 1 -400 200 300 R 60 60 1 1 P I
+X ~ 2 -400 100 300 R 60 60 1 1 P I
+X ~ 3 -400 0 300 R 60 60 1 1 P I
+X ~ 4 -400 -100 300 R 60 60 1 1 P I
+X ~ 5 -400 -200 300 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# CP
+#
+DEF CP C 0 10 N N 1 F N
+F0 "C" 50 100 40 H V L CNN
+F1 "CP" 50 -100 40 H V L CNN
+F2 "" 100 -150 30 H V C CNN
+F3 "" 50 100 30 H V C CNN
+ALIAS CAPAPOL
+$FPLIST
+ CP*
+ SM*
+$ENDFPLIST
+DRAW
+P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
+P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
+X ~ 1 0 200 150 D 40 40 1 1 P
+X ~ 2 0 -200 150 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CRYSTAL
+#
+DEF CRYSTAL X 0 40 N N 1 F N
+F0 "X" 0 150 60 H V C CNN
+F1 "CRYSTAL" 0 -150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 16 -100 100 -100 -100 N
+P 2 0 1 16 100 100 100 -100 N
+P 5 0 1 12 -50 50 50 50 50 -50 -50 -50 -50 50 f
+X 1 1 -300 0 200 R 40 40 1 1 P
+X 2 2 300 0 200 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CTRIM
+#
+DEF CTRIM C 0 10 Y Y 1 F N
+F0 "C" 130 -80 50 H V C CNN
+F1 "CTRIM" 150 -160 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 2 0 1 12 -100 -30 100 -30 N
+P 2 0 1 12 -100 30 100 30 N
+P 2 0 1 12 -90 -90 75 75 N
+P 3 0 1 0 50 100 100 100 100 50 F
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DB9
+#
+DEF DB9 J 0 40 Y N 1 F N
+F0 "J" 0 550 70 H V C CNN
+F1 "DB9" 0 -550 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ DB9*
+$ENDFPLIST
+DRAW
+C -70 -400 30 0 1 0 N
+C -70 -200 30 0 1 0 N
+C -70 0 30 0 1 0 N
+C -70 200 30 0 1 0 N
+C -70 400 30 0 1 0 N
+C 50 -300 30 0 1 0 N
+C 50 -100 30 0 1 0 N
+C 50 100 30 0 1 0 N
+C 50 300 30 0 1 0 N
+P 2 0 1 8 -150 -460 -150 460 N
+P 2 0 1 8 -150 -459 -140 -470 N
+P 2 0 1 0 -150 -400 -100 -400 N
+P 2 0 1 0 -150 -300 20 -300 N
+P 2 0 1 0 -150 -200 -100 -200 N
+P 2 0 1 0 -150 -100 20 -100 N
+P 2 0 1 0 -150 0 -100 0 N
+P 2 0 1 0 -150 100 20 100 N
+P 2 0 1 0 -150 200 -100 200 N
+P 2 0 1 0 -150 300 20 300 N
+P 2 0 1 0 -150 400 -100 400 N
+P 2 0 1 8 -140 -470 -110 -490 N
+P 2 0 1 8 -140 470 -150 460 N
+P 2 0 1 8 -140 470 -100 490 N
+P 2 0 1 8 -110 -490 -50 -490 N
+P 2 0 1 8 -100 490 -70 490 N
+P 2 0 1 8 129 390 -70 490 N
+P 2 0 1 8 129 390 150 370 N
+P 2 0 1 8 140 -409 -50 -490 N
+P 2 0 1 8 150 -390 140 -409 N
+P 2 0 1 8 150 370 150 -390 N
+X 1 1 -450 -400 300 R 60 60 1 1 P
+X 2 2 -450 -200 300 R 60 60 1 1 P
+X 3 3 -450 0 300 R 60 60 1 1 P
+X 4 4 -450 200 300 R 60 60 1 1 P
+X 5 5 -450 400 300 R 60 60 1 1 P
+X P6 6 -450 -300 300 R 60 60 1 1 P
+X P7 7 -450 -100 300 R 60 60 1 1 P
+X P8 8 -450 100 300 R 60 60 1 1 P
+X P9 9 -450 300 300 R 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# DIODESCH
+#
+DEF DIODESCH D 0 40 N N 1 F N
+F0 "D" 0 100 40 H V C CNN
+F1 "DIODESCH" 0 -100 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ D?
+ S*
+$ENDFPLIST
+DRAW
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 6 0 1 8 75 25 75 50 50 50 50 -50 25 -50 25 -25 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# INDUCTOR
+#
+DEF INDUCTOR L 0 40 N N 1 F N
+F0 "L" -50 0 40 V V C CNN
+F1 "INDUCTOR" 100 0 40 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100
+A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2
+A 0 51 51 -889 889 0 1 0 N 1 1 1 102
+A 0 148 48 -889 889 0 1 0 N 1 101 1 196
+X 1 1 0 300 100 D 70 70 1 1 P
+X 2 2 0 -300 100 U 70 70 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LED
+#
+DEF LED D 0 40 Y N 1 F N
+F0 "D" 0 100 50 H V C CNN
+F1 "LED" 0 -100 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ LED-3MM
+ LED-5MM
+ LED-10MM
+ LED-0603
+ LED-0805
+ LED-1206
+ LEDV
+$ENDFPLIST
+DRAW
+P 2 0 1 0 50 50 50 -50 N
+P 3 0 1 0 -50 50 50 0 -50 -50 F
+P 3 0 1 0 65 -40 110 -80 105 -55 N
+P 3 0 1 0 80 -25 125 -65 120 -40 N
+X A 1 -200 0 150 R 40 40 1 1 P
+X K 2 200 0 150 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# LIGNE_A_RETARD
+#
+DEF LIGNE_A_RETARD L 0 40 Y N 1 F N
+F0 "L" 0 100 70 H V C CNN
+F1 "LIGNE_A_RETARD" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+A 0 -150 50 899 1 0 1 0 N 0 -100 50 -150
+A 0 -150 50 -1 -899 0 1 0 N 50 -150 0 -199
+A 0 -50 50 899 1 0 1 0 N 0 0 50 -50
+A 0 -50 50 -1 -899 0 1 0 N 50 -50 0 -99
+A 0 50 50 899 1 0 1 0 N 0 100 50 50
+A 0 50 50 -1 -899 0 1 0 N 50 50 0 1
+A 0 150 50 899 1 0 1 0 N 0 200 50 150
+A 0 150 50 -1 -899 0 1 0 N 50 150 0 101
+P 2 0 1 0 -100 200 -100 -200 N
+X 1 1 0 300 100 D 60 60 1 1 P
+X 2 2 0 -300 100 U 60 60 1 1 P
+X COMMUN 3 -200 0 100 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NPN
+#
+DEF NPN Q 0 0 Y Y 1 F N
+F0 "Q" 0 -150 50 H V R CNN
+F1 "NPN" 0 150 50 H V R CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 50 0 111 0 1 10 N
+P 2 0 1 0 0 0 100 100 N
+P 3 0 1 10 0 75 0 -75 0 -75 N
+P 3 0 1 0 50 -50 0 0 0 0 N
+P 3 0 1 0 90 -90 100 -100 100 -100 N
+P 5 0 1 0 90 -90 70 -30 30 -70 90 -90 90 -90 F
+X E 1 100 -200 100 U 40 40 1 1 P
+X B 2 -200 0 200 R 40 40 1 1 I
+X C 3 100 200 100 D 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PCI_CONUNIV
+#
+DEF PCI_CONUNIV J 0 30 Y Y 1 F N
+F0 "J" 0 3200 60 H V C CNN
+F1 "PCI_CONUNIV" 0 -3200 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+ALIAS BUSPCI-5V
+DRAW
+S -750 3150 750 -3150 0 1 0 N
+X TRST# A1 1100 3050 350 L 60 60 1 1 O I
+X -12V B1 -1100 3050 350 R 60 60 1 1 W
+X +12V A2 1100 2950 350 L 60 60 1 1 W
+X TCK B2 -1100 2950 350 R 60 60 1 1 O
+X TMS A3 1100 2850 350 L 60 60 1 1 O
+X GND B3 -1100 2850 350 R 60 60 1 1 I
+X TDI A4 1100 2750 350 L 60 60 1 1 O
+X TDO B4 -1100 2750 350 R 60 60 1 1 I
+X +5V A5 1100 2650 350 L 60 60 1 1 W
+X +5V B5 -1100 2650 350 R 60 60 1 1 W
+X INTA# A6 1100 2550 350 L 60 60 1 1 I I
+X +5V B6 -1100 2550 350 R 60 60 1 1 W
+X INTC# A7 1100 2450 350 L 60 60 1 1 I I
+X INTB# B7 -1100 2450 350 R 60 60 1 1 I I
+X +5V A8 1100 2350 350 L 60 60 1 1 W
+X INTD# B8 -1100 2350 350 R 60 60 1 1 I I
+X RESERVED A9 1100 2250 350 L 60 60 1 1 P
+X PRSNT1# B9 -1100 2250 350 R 60 60 1 1 I I
+X VIO A10 1100 2150 350 L 60 60 1 1 W
+X RESERVED B10 -1100 2150 350 R 60 60 1 1 P
+X AD[30] A20 1100 1150 350 L 60 60 1 1 B
+X AD[31] B20 -1100 1150 350 R 60 60 1 1 B
+X GND A30 1100 150 350 L 60 60 1 1 W
+X AD[19] B30 -1100 150 350 R 60 60 1 1 B
+X RESERVED A40 1100 -850 350 L 60 60 1 1 B
+X PERR# B40 -1100 -850 350 R 60 60 1 1 B I
+X REQ64# A60 1100 -2850 350 L 60 60 1 1 B I
+X ACK64# B60 -1100 -2850 350 R 60 60 1 1 B I
+X RESERVED A11 1100 2050 350 L 60 60 1 1 P
+X PRSNT2# B11 -1100 2050 350 R 60 60 1 1 I I
+X +3.3V A21 1100 1050 350 L 60 60 1 1 W
+X AD[29] B21 -1100 1050 350 R 60 60 1 1 B
+X AD[18] A31 1100 50 350 L 60 60 1 1 B
+X +3.3V B31 -1100 50 350 R 60 60 1 1 W
+X RESERVED A41 1100 -950 350 L 60 60 1 1 B
+X +3.3V B41 -1100 -950 350 R 60 60 1 1 W
+X +5V A61 1100 -2950 350 L 60 60 1 1 W
+X +5V B61 -1100 -2950 350 R 60 60 1 1 W
+X AD[28] A22 1100 950 350 L 60 60 1 1 B
+X GND B22 -1100 950 350 R 60 60 1 1 W
+X AD[16] A32 1100 -50 350 L 60 60 1 1 B
+X AD[17] B32 -1100 -50 350 R 60 60 1 1 B
+X GND A42 1100 -1050 350 L 60 60 1 1 W
+X SERR# B42 -1100 -1050 350 R 60 60 1 1 I I
+X C/BE#[0] A52 1100 -2050 350 L 60 60 1 1 B I
+X AD[08] B52 -1100 -2050 350 R 60 60 1 1 B
+X +5V A62 1100 -3050 350 L 60 60 1 1 W
+X +5V B62 -1100 -3050 350 R 60 60 1 1 W
+X AD[26] A23 1100 850 350 L 60 60 1 1 B
+X AD[27] B23 -1100 850 350 R 60 60 1 1 B
+X +3.3V A33 1100 -150 350 L 60 60 1 1 W
+X C/BE#[2] B33 -1100 -150 350 R 60 60 1 1 B I
+X PAR A43 1100 -1150 350 L 60 60 1 1 B
+X +3.3V B43 -1100 -1150 350 R 60 60 1 1 W
+X +3.3V A53 1100 -2150 350 L 60 60 1 1 W
+X AD[07] B53 -1100 -2150 350 R 60 60 1 1 B
+X 3.3VAUX A14 1100 1750 350 L 60 60 1 1 P
+X RESERVED B14 -1100 1750 350 R 60 60 1 1 P
+X GND A24 1100 750 350 L 60 60 1 1 W
+X AD[25] B24 -1100 750 350 R 60 60 1 1 B
+X FRAME# A34 1100 -250 350 L 60 60 1 1 B I
+X GND B34 -1100 -250 350 R 60 60 1 1 W
+X AD[15] A44 1100 -1250 350 L 60 60 1 1 B
+X C/BE#[1] B44 -1100 -1250 350 R 60 60 1 1 B I
+X AD[06] A54 1100 -2250 350 L 60 60 1 1 B
+X +3.3V B54 -1100 -2250 350 R 60 60 1 1 I
+X RST# A15 1100 1650 350 L 60 60 1 1 O I
+X GND B15 -1100 1650 350 R 60 60 1 1 W
+X AD[24] A25 1100 650 350 L 60 60 1 1 B
+X +3.3V B25 -1100 650 350 R 60 60 1 1 W
+X GND A35 1100 -350 350 L 60 60 1 1 W
+X IRDY# B35 -1100 -350 350 R 60 60 1 1 B I
+X +3.3V A45 1100 -1350 350 L 60 60 1 1 W
+X AD[14] B45 -1100 -1350 350 R 60 60 1 1 B
+X AD[04] A55 1100 -2350 350 L 60 60 1 1 B
+X AD[05] B55 -1100 -2350 350 R 60 60 1 1 B
+X VIO A16 1100 1550 350 L 60 60 1 1 W
+X CLK B16 -1100 1550 350 R 60 60 1 1 O
+X IDSEL A26 1100 550 350 L 60 60 1 1 O
+X C/BE#[3] B26 -1100 550 350 R 60 60 1 1 B
+X TRDY# A36 1100 -450 350 L 60 60 1 1 B I
+X +3.3V B36 -1100 -450 350 R 60 60 1 1 W
+X AD[13] A46 1100 -1450 350 L 60 60 1 1 B
+X GND B46 -1100 -1450 350 R 60 60 1 1 W
+X GND A56 1100 -2450 350 L 60 60 1 1 W
+X AD[03] B56 -1100 -2450 350 R 60 60 1 1 B
+X GNT# A17 1100 1450 350 L 60 60 1 1 B I
+X GND B17 -1100 1450 350 R 60 60 1 1 W
+X +3.3V A27 1100 450 350 L 60 60 1 1 W
+X AD[23] B27 -1100 450 350 R 60 60 1 1 B
+X GND A37 1100 -550 350 L 60 60 1 1 W
+X DEVSEL# B37 -1100 -550 350 R 60 60 1 1 B I
+X AD[11] A47 1100 -1550 350 L 60 60 1 1 B
+X AD[12] B47 -1100 -1550 350 R 60 60 1 1 B
+X AD[02] A57 1100 -2550 350 L 60 60 1 1 B
+X GND B57 -1100 -2550 350 R 60 60 1 1 W
+X GND A18 1100 1350 350 L 60 60 1 1 W
+X REQ# B18 -1100 1350 350 R 60 60 1 1 B I
+X AD[22] A28 1100 350 350 L 60 60 1 1 B
+X GND B28 -1100 350 350 R 60 60 1 1 W
+X STOP# A38 1100 -650 350 L 60 60 1 1 B I
+X GND B38 -1100 -650 350 R 60 60 1 1 W
+X GND A48 1100 -1650 350 L 60 60 1 1 W
+X AD[10] B48 -1100 -1650 350 R 60 60 1 1 B
+X AD[00] A58 1100 -2650 350 L 60 60 1 1 B
+X AD[01] B58 -1100 -2650 350 R 60 60 1 1 B
+X PME# A19 1100 1250 350 L 60 60 1 1 P
+X VIO B19 -1100 1250 350 R 60 60 1 1 W
+X AD[20] A29 1100 250 350 L 60 60 1 1 B
+X AD[21] B29 -1100 250 350 R 60 60 1 1 B
+X +3.3V A39 1100 -750 350 L 60 60 1 1 W
+X LOCK# B39 -1100 -750 350 R 60 60 1 1 B I
+X AD[09] A49 1100 -1750 350 L 60 60 1 1 B
+X M66EN B49 -1100 -1750 350 R 60 60 1 1 W
+X VIO A59 1100 -2750 350 L 60 60 1 1 W
+X VIO B59 -1100 -2750 350 R 60 60 1 1 W
+ENDDRAW
+ENDDEF
+#
+# POT
+#
+DEF POT RV 0 40 Y N 1 F N
+F0 "RV" 0 -100 50 H V C CNN
+F1 "POT" 0 0 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -150 50 150 -50 0 1 0 N
+P 3 0 1 0 0 50 -20 70 20 70 F
+X 1 1 -250 0 100 R 40 40 1 1 P
+X 2 2 0 150 80 D 40 40 1 1 P
+X 3 3 250 0 100 L 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 30 H I C CNN
+F1 "PWR_FLAG" 0 180 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "" -70 0 30 V V C CNN
+F3 "" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# RR8
+#
+DEF RR8 RR 0 40 Y N 1 F N
+F0 "RR" 50 550 70 H V C CNN
+F1 "RR8" 30 0 70 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 -400 -50 500 50 500 100 450 100 -400 -50 -400 N
+X COM 1 -350 450 300 R 60 60 1 1 P I
+X 2 2 -350 350 300 R 60 60 1 1 P I
+X 3 3 -350 250 300 R 60 60 1 1 P I
+X 4 4 -350 150 300 R 60 60 1 1 P I
+X 5 5 -350 50 300 R 60 60 1 1 P I
+X 6 6 -350 -50 300 R 60 60 1 1 P I
+X 7 7 -350 -150 300 R 60 60 1 1 P I
+X 8 8 -350 -250 300 R 60 60 1 1 P I
+X 9 9 -350 -350 300 R 60 60 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# S5933_PQ160
+#
+DEF S5933_PQ160 U 0 30 Y Y 1 F N
+F0 "U" 0 2250 60 H V C CNN
+F1 "S5933_PQ160" 450 -4150 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VSS 10 -150 -4100 0 U 60 60 0 0 W N
+X VSS 30 -50 -4100 0 U 60 60 0 0 W N
+X VSS 50 150 -4100 0 U 60 60 0 0 W N
+X VSS 70 50 -4100 0 U 60 60 0 0 W N
+X VSS 90 250 -4100 0 U 60 60 0 0 W N
+X VCC 11 -300 4150 0 D 60 60 0 0 W N
+X VCC 31 -200 4150 0 D 60 60 0 0 W N
+X VCC 51 -100 4150 0 D 60 60 0 0 W N
+X VCC 71 0 4150 0 D 60 60 0 0 W N
+X VCC 91 100 4150 0 D 60 60 0 0 W N
+X VSS 110 350 -4100 0 U 60 60 0 0 W N
+X VSS 130 450 -4100 0 U 60 60 0 0 W N
+X VSS 150 -250 -4100 0 U 60 60 0 0 W N
+X VCC 111 200 4150 0 D 60 60 0 0 W N
+X VCC 131 300 4150 0 D 60 60 0 0 W N
+X VCC 151 400 4150 0 D 60 60 0 0 W N
+S -850 4100 850 -4100 0 1 0 N
+X EQ0 1 -1150 -3150 300 R 60 60 1 1 B
+X AD23 2 -1150 1750 300 R 60 60 1 1 B
+X AD22 3 -1150 1850 300 R 60 60 1 1 B
+X AD21 4 -1150 1950 300 R 60 60 1 1 B
+X DQ31 5 1150 950 300 L 60 60 1 1 B
+X AD20 6 -1150 2050 300 R 60 60 1 1 B
+X AD19 7 -1150 2150 300 R 60 60 1 1 B
+X AD18 8 -1150 2250 300 R 60 60 1 1 B
+X EQ1 9 -1150 -3250 300 R 60 60 1 1 B
+X DEVSEL# 20 -1150 -650 300 R 60 60 1 1 B
+X AD9 40 -1150 3150 300 R 60 60 1 1 B
+X BE3# 60 1150 -1150 300 L 60 60 1 1 I
+X DQ12 80 1150 2850 300 L 60 60 1 1 B
+X EQ3 21 -1150 -3450 300 R 60 60 1 1 B
+X EQ6/AMREN 41 -1150 -3750 300 R 60 60 1 1 B
+X EA1 61 -1150 -1650 300 R 60 60 1 1 B
+X EA4 81 -1150 -1950 300 R 60 60 1 1 B
+X AD17 12 -1150 2350 300 R 60 60 1 1 B
+X STOP# 22 -1150 -250 300 R 60 60 1 1 B
+X AD15 32 -1150 2550 300 R 60 60 1 1 B
+X AD8 42 -1150 3250 300 R 60 60 1 1 B
+X AD3 52 -1150 3750 300 R 60 60 1 1 B
+X BE2# 62 1150 -1050 300 L 60 60 1 1 I
+X RD# 72 1150 -1550 300 L 60 60 1 1 I
+X DQ11 82 1150 2950 300 L 60 60 1 1 B
+X DQ6 92 1150 3450 300 L 60 60 1 1 B
+X DQ30 13 1150 1050 300 L 60 60 1 1 B
+X LOCK# 23 -1150 -350 300 R 60 60 1 1 I
+X EQ5/FRC# 33 -1150 -3650 300 R 60 60 1 1 B
+X C/BE0# 43 -1150 850 300 R 60 60 1 1 B
+X DQ26 53 1150 1450 300 L 60 60 1 1 B
+X BE1# 63 1150 -950 300 L 60 60 1 1 I
+X EA3 73 -1150 -1850 300 R 60 60 1 1 B
+X DQ10 83 1150 3050 300 L 60 60 1 1 B
+X DQ22 93 1150 1850 300 L 60 60 1 1 B
+X AD16 14 -1150 2450 300 R 60 60 1 1 B
+X PERR# 24 -1150 -950 300 R 60 60 1 1 B
+X AD14 34 -1150 2650 300 R 60 60 1 1 B
+X AD7 44 -1150 3350 300 R 60 60 1 1 B
+X AD2 54 -1150 3850 300 R 60 60 1 1 B
+X ADR5 64 1150 -650 300 L 60 60 1 1 I
+X WR# 74 1150 -1450 300 L 60 60 1 1 I
+X DQ9 84 1150 3150 300 L 60 60 1 1 B
+X DQ5 94 1150 3550 300 L 60 60 1 1 B
+X C/BE2# 15 -1150 650 300 R 60 60 1 1 B
+X DQ29 25 1150 1150 300 L 60 60 1 1 B
+X AD13 35 -1150 2750 300 R 60 60 1 1 B
+X DQ27 45 1150 1350 300 L 60 60 1 1 B
+X AD1 55 -1150 3950 300 R 60 60 1 1 B
+X DQ25 65 1150 1550 300 L 60 60 1 1 B
+X SELECT# 75 1150 -1350 300 L 60 60 1 1 I
+X DQ23 85 1150 1750 300 L 60 60 1 1 B
+X DQ4 95 1150 3650 300 L 60 60 1 1 B
+X FRAME# 16 -1150 50 300 R 60 60 1 1 B
+X SERR# 26 -1150 -1050 300 R 60 60 1 1 O
+X AD12 36 -1150 2850 300 R 60 60 1 1 B
+X AD6 46 -1150 3450 300 R 60 60 1 1 B
+X AD0 56 -1150 4050 300 R 60 60 1 1 B
+X ADR4 66 1150 -550 300 L 60 60 1 1 I
+X DQ15 76 1150 2550 300 L 60 60 1 1 B
+X DQ8 86 1150 3250 300 L 60 60 1 1 B
+X DQ3 96 1150 3750 300 L 60 60 1 1 B
+X EQ2 17 -1150 -3350 300 R 60 60 1 1 B
+X PAR 27 -1150 450 300 R 60 60 1 1 B
+X DQ28 37 1150 1250 300 L 60 60 1 1 B
+X AD5 47 -1150 3550 300 R 60 60 1 1 B
+X EA0 57 -1150 -1550 300 R 60 60 1 1 B
+X ADR3 67 1150 -450 300 L 60 60 1 1 I
+X DQ24 77 1150 1650 300 L 60 60 1 1 B
+X BE0# 87 1150 -850 300 L 60 60 1 1 I
+X EA6 97 -1150 -2150 300 R 60 60 1 1 B
+X IRDY# 18 -1150 -50 300 R 60 60 1 1 B
+X C/BE1# 28 -1150 750 300 R 60 60 1 1 B
+X AD11 38 -1150 2950 300 R 60 60 1 1 B
+X AD4 48 -1150 3650 300 R 60 60 1 1 B
+X INTA# 58 -1150 -1250 300 R 60 60 1 1 O
+X ADR2 68 1150 -350 300 L 60 60 1 1 I
+X DQ14 78 1150 2650 300 L 60 60 1 1 B
+X DQ7 88 1150 3350 300 L 60 60 1 1 B
+X DQ2 98 1150 3850 300 L 60 60 1 1 B
+X TRDY# 19 -1150 -150 300 R 60 60 1 1 B
+X EQ4/FWC# 29 -1150 -3550 300 R 60 60 1 1 B
+X AD10 39 -1150 3050 300 R 60 60 1 1 B
+X EQ7/AMWEN 49 -1150 -3850 300 R 60 60 1 1 B
+X MODE_16/32 59 1150 -1250 300 L 60 60 1 1 I
+X EA2 69 -1150 -1750 300 R 60 60 1 1 B
+X DQ13 79 1150 2750 300 L 60 60 1 1 B
+X EA5 89 -1150 -2050 300 R 60 60 1 1 B
+X DQ1 99 1150 3950 300 L 60 60 1 1 B
+X DQ0 100 1150 4050 300 L 60 60 1 1 B
+X PTBE3# 120 1150 150 300 L 60 60 1 1 O
+X BPCLK 140 1150 -2550 300 L 60 60 1 1 O
+X IDSEL 160 -1150 -550 300 R 60 60 1 1 I
+X EA7 101 -1150 -2250 300 R 60 60 1 1 B
+X EA10 121 -1150 -2550 300 R 60 60 1 1 O
+X EA13 141 -1150 -2850 300 R 60 60 1 1 O
+X WRFIFO# 102 1150 -1750 300 L 60 60 1 1 I
+X PTBURST# 112 1150 -150 300 L 60 60 1 1 O
+X PTNUM1 122 1150 550 300 L 60 60 1 1 O
+X ADR6 132 1150 -750 300 L 60 60 1 1 I
+X CLK 142 -1150 350 300 R 60 60 1 1 I
+X AD28 152 -1150 1250 300 R 60 60 1 1 B
+X WRFULL 103 1150 -2050 300 L 60 60 1 1 O
+X EA9 113 -1150 -2450 300 R 60 60 1 1 O
+X PTNUM0 123 1150 650 300 L 60 60 1 1 O
+X DQ18 133 1150 2250 300 L 60 60 1 1 B
+X GNT# 143 -1150 -850 300 R 60 60 1 1 I
+X EA15/FRF 153 -1150 -3050 300 R 60 60 1 1 B
+X RDFIFO# 104 1150 -1850 300 L 60 60 1 1 I
+X PTATN# 114 1150 850 300 L 60 60 1 1 O
+X IRQ# 124 1150 -2450 300 L 60 60 1 1 O
+X REQ# 144 -1150 -750 300 R 60 60 1 1 O
+X AD27 154 -1150 1350 300 R 60 60 1 1 B
+X DQ21 105 1150 1950 300 L 60 60 1 1 B
+X PTRDY# 115 1150 750 300 L 60 60 1 1 I
+X DQ19 125 1150 2150 300 L 60 60 1 1 B
+X SNV 135 1150 -2350 300 L 60 60 1 1 I
+X DQ17 145 1150 2350 300 L 60 60 1 1 B
+X AD26 155 -1150 1450 300 R 60 60 1 1 B
+X RDEMPTY 106 1150 -2150 300 L 60 60 1 1 O
+X PTBE0# 116 1150 450 300 L 60 60 1 1 O
+X SYSRST# 126 1150 -2650 300 L 60 60 1 1 O
+X AD31 146 -1150 950 300 R 60 60 1 1 B
+X AD25 156 -1150 1550 300 R 60 60 1 1 B
+X PTADR# 107 1150 50 300 L 60 60 1 1 I
+X DQ20 117 1150 2050 300 L 60 60 1 1 B
+X EWR#/SDA 127 -1150 -4050 300 R 60 60 1 1 B
+X EA12 137 -1150 -2750 300 R 60 60 1 1 O
+X AD30 147 -1150 1050 300 R 60 60 1 1 B
+X DQ16 157 1150 2450 300 L 60 60 1 1 B
+X PTWR 108 1150 -50 300 L 60 60 1 1 O
+X PTBE1# 118 1150 350 300 L 60 60 1 1 O
+X ERD#/SCL 128 -1150 -3950 300 R 60 60 1 1 O
+X FLT# 138 1150 -2250 300 L 60 60 1 1 I
+X AD29 148 -1150 1150 300 R 60 60 1 1 B
+X AD24 158 -1150 1650 300 R 60 60 1 1 B
+X EA8 109 -1150 -2350 300 R 60 60 1 1 B
+X PTBE2# 119 1150 250 300 L 60 60 1 1 O
+X EA11 129 -1150 -2650 300 R 60 60 1 1 O
+X RST# 139 -1150 250 300 R 60 60 1 1 I
+X EA14/FWE 149 -1150 -2950 300 R 60 60 1 1 B
+X C/BE3# 159 -1150 550 300 R 60 60 1 1 B
+ENDDRAW
+ENDDEF
+#
+# SIM4X32
+#
+DEF SIM4X32 U 0 40 Y Y 1 F N
+F0 "U" 0 550 70 H V C CNN
+F1 "SIM4X32" 450 -2000 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -500 -1900 500 1900 0 1 0 N
+X GND 1 -100 -1900 0 U 60 60 1 1 W N
+X DQ0 2 800 1800 300 L 60 60 1 1 T
+X DQ16 3 800 0 300 L 60 60 1 1 T
+X DQ1 4 800 1700 300 L 60 60 1 1 T
+X DQ17 5 800 -100 300 L 60 60 1 1 T
+X DQ2 6 800 1600 300 L 60 60 1 1 T
+X DQ18 7 800 -200 300 L 60 60 1 1 T
+X DQ3 8 800 1500 300 L 60 60 1 1 T
+X DQ19 9 800 -300 300 L 60 60 1 1 T
+X VCC 10 -100 1900 0 D 60 60 1 1 W N
+X DQ4 20 800 1400 300 L 60 60 1 1 T
+X VCC 30 0 1900 0 D 60 60 1 1 W N
+X CAS0 40 -800 -200 300 R 60 60 1 1 I I
+X DQ24 50 800 -900 300 L 60 60 1 1 T
+X DQ29 60 800 -1400 300 L 60 60 1 1 T
+X PRD3 70 -800 -1200 300 R 60 60 1 1 I
+X DQ20 21 800 -400 300 L 60 60 1 1 T
+X A8 31 -800 1000 300 R 60 60 1 1 I
+X CAS1 41 -800 -300 300 R 60 60 1 1 I I
+X DQ9 51 800 800 300 L 60 60 1 1 T
+X DQ13 61 800 400 300 L 60 60 1 1 T
+X A0 12 -800 1800 300 R 60 60 1 1 I
+X DQ5 22 800 1300 300 L 60 60 1 1 T
+X A9 32 -800 900 300 R 60 60 1 1 I
+X CAS2 42 -800 -400 300 R 60 60 1 1 I I
+X DQ25 52 800 -1000 300 L 60 60 1 1 T
+X DQ30 62 800 -1500 300 L 60 60 1 1 T
+X GND 72 100 -1900 0 U 60 60 1 1 W N
+X A1 13 -800 1700 300 R 60 60 1 1 I
+X DQ21 23 800 -500 300 L 60 60 1 1 T
+X CAS3 43 -800 -500 300 R 60 60 1 1 I I
+X DQ10 53 800 700 300 L 60 60 1 1 T
+X DQ14 63 800 300 300 L 60 60 1 1 T
+X A2 14 -800 1600 300 R 60 60 1 1 I
+X DQ6 24 800 1200 300 L 60 60 1 1 T
+X RAS2 34 -800 100 300 R 60 60 1 1 I I
+X RAS0 44 -800 300 300 R 60 60 1 1 I I
+X DQ26 54 800 -1100 300 L 60 60 1 1 T
+X DQ31 64 800 -1600 300 L 60 60 1 1 T
+X A3 15 -800 1500 300 R 60 60 1 1 I
+X DQ22 25 800 -600 300 L 60 60 1 1 T
+X DQ11 55 800 600 300 L 60 60 1 1 T
+X DQ15 65 800 200 300 L 60 60 1 1 T
+X A4 16 -800 1400 300 R 60 60 1 1 I
+X DQ7 26 800 1100 300 L 60 60 1 1 T
+X DQ27 56 800 -1200 300 L 60 60 1 1 T
+X A5 17 -800 1300 300 R 60 60 1 1 I
+X DQ23 27 800 -700 300 L 60 60 1 1 T
+X R/W 47 -800 -700 300 R 60 60 1 1 I
+X DQ12 57 800 500 300 L 60 60 1 1 T
+X PRD0 67 -800 -900 300 R 60 60 1 1 I
+X A6 18 -800 1200 300 R 60 60 1 1 I
+X A7 28 -800 1100 300 R 60 60 1 1 I
+X DQ28 58 800 -1300 300 L 60 60 1 1 T
+X PRD1 68 -800 -1000 300 R 60 60 1 1 I
+X A10 19 -800 800 300 R 60 60 1 1 I
+X GND 39 0 -1950 0 U 60 60 1 1 W N
+X DQ8 49 800 900 300 L 60 60 1 1 T
+X VCC 59 100 1900 0 D 60 60 1 1 W N
+X PRD2 69 -800 -1100 300 R 60 60 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TDA8501
+#
+DEF TDA8501 U 0 30 Y Y 1 F N
+F0 "U" 350 950 60 H V C CNN
+F1 "TDA8501" 350 -850 60 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -600 850 600 -750 0 1 0 N
+X -R.Y 1 -900 600 300 R 60 60 1 1 I
+X MCTR 2 -900 100 300 R 60 60 1 1 I
+X -B.Y 3 -900 500 300 R 60 60 1 1 I
+X H/2 4 -900 400 300 R 60 60 1 1 B
+X Y 5 -900 300 300 R 60 60 1 1 I
+X UOFF 6 -900 200 300 R 60 60 1 1 O
+X R 7 -900 -100 300 R 60 60 1 1 I
+X VCC 8 0 1150 300 D 60 60 1 1 I
+X G 9 -900 -200 300 R 60 60 1 1 I
+X VSS 10 0 -1050 300 U 60 60 1 1 I
+X Y+SIN 20 900 700 300 L 60 60 1 1 I
+X B 11 -900 -300 300 R 60 60 1 1 I
+X B/ADJ 21 900 -200 300 L 60 60 1 1 P
+X VOFF 12 -900 -500 300 R 60 60 1 1 O
+X Y+SOUT 22 900 800 300 L 60 60 1 1 O
+X VREF 13 900 400 300 L 60 60 1 1 O
+X OSC 23 -900 -700 300 R 60 60 1 1 O
+X C/OUT 14 900 0 300 L 60 60 1 1 O
+X CS 24 -900 800 300 R 60 60 1 1 I
+X FLT 15 900 -500 300 L 60 60 1 1 P
+X CVBS 16 900 100 300 L 60 60 1 1 O
+X NTSC/PAL 17 900 -400 300 L 60 60 1 1 I
+X NOTCH 18 900 -300 300 L 60 60 1 1 I
+X Y/OUT 19 900 200 300 L 60 60 1 1 O
+ENDDRAW
+ENDDEF
+#
+# TEST
+#
+DEF TEST W 0 30 N N 1 F N
+F0 "W" 0 60 40 H V C CNN
+F1 "TEST" 0 -70 40 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C -70 0 30 0 1 0 N
+C 70 0 30 0 1 0 N
+X 1 1 -200 0 100 R 60 60 0 1 P
+X 2 2 200 0 100 L 60 60 0 1 P
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+# VSS
+#
+DEF VSS #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "VSS" 0 -70 30 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X VSS 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC1736APD8
+#
+DEF XC1736APD8 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC1736APD8" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -450 -450 450 450 0 1 0 N
+X DATA 1 750 150 300 L 60 60 1 1 T
+X CLK 2 -750 150 300 R 60 60 1 1 I C
+X RAZ/OE 3 -750 -50 300 R 60 60 1 1 I I
+X CE 4 -750 -250 300 R 60 60 1 1 I I
+X GND 5 -450 -450 0 U 60 60 1 1 W N
+X CEO 6 750 -150 300 L 60 60 1 1 O I
+X VPP 7 -750 350 300 R 60 60 1 1 I
+X VCC 8 -450 450 0 D 60 60 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC4003-VQ100
+#
+DEF XC4003-VQ100 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC4003-VQ100" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -650 -2350 650 2350 0 1 0 N
+X GND 1 -550 -2350 0 U 60 60 1 1 W N
+X PGCK1 2 -950 1150 300 R 60 60 1 1 P
+X P/A17 3 -950 1050 300 R 60 60 1 1 P
+X P/TDI 4 -950 950 300 R 60 60 1 1 P
+X P/TCK 5 -950 850 300 R 60 60 1 1 P
+X P/A3 6 -950 750 300 R 60 60 1 1 P
+X P7 7 -950 650 300 R 60 60 1 1 P
+X P8 8 -950 550 300 R 60 60 1 1 P
+X P/A15 9 -950 450 300 R 60 60 1 1 P
+X P/A4 10 -950 350 300 R 60 60 1 1 P
+X P20 20 -950 -550 300 R 60 60 1 1 P
+X P/LDC 30 -950 1250 300 R 60 60 1 1 P
+X P40 40 -950 -2150 300 R 60 60 1 1 P
+X DONE 50 -950 1750 300 R 60 60 1 1 C
+X P60 60 950 -750 300 L 60 60 1 1 P
+X P70 70 950 50 300 L 60 60 1 1 P
+X P80 80 950 550 300 L 60 60 1 1 P
+X P90 90 950 1350 300 L 60 60 1 1 B
+X GND 11 -450 -2350 0 U 60 60 1 1 W N
+X SGCK2 21 -950 -650 300 R 60 60 1 1 P
+X P31 31 -950 -1350 300 R 60 60 1 1 P
+X P41 41 950 -2250 300 L 60 60 1 1 P
+X VCC 51 -250 2350 0 D 60 60 1 1 W N
+X P61 61 950 -650 300 L 60 60 1 1 P
+X P71/RDY 71 950 150 300 L 60 60 1 1 P
+X P81 81 950 650 300 L 60 60 1 1 P
+X P91 91 950 1450 300 L 60 60 1 1 P
+X VCC 12 -550 2350 0 D 60 60 1 1 W N
+X M1/RD 22 -950 2150 300 R 60 60 1 1 I
+X P32 32 -950 -1450 300 R 60 60 1 1 P
+X P42 42 950 -2150 300 L 60 60 1 1 P
+X PROG 52 -950 1850 300 R 60 60 1 1 I I
+X P62 62 950 -550 300 L 60 60 1 1 P
+X DIN 72 -950 1650 300 R 60 60 1 1 P
+X P82 82 950 750 300 L 60 60 1 1 P
+X P92 92 950 1550 300 L 60 60 1 1 P
+X P13 13 -950 150 300 R 60 60 1 1 B
+X GND 23 -350 -2350 0 U 60 60 1 1 W N
+X P33 33 -950 -1550 300 R 60 60 1 1 P
+X P43 43 950 -2050 300 L 60 60 1 1 P
+X P53 53 950 -1450 300 L 60 60 1 1 B
+X VCC 63 -150 2350 0 D 60 60 1 1 W N
+X DOUT/SGCK4 73 -950 1550 300 R 60 60 1 1 P
+X P83 83 950 850 300 L 60 60 1 1 P
+X P93 93 950 1650 300 L 60 60 1 1 P
+X P14 14 -950 50 300 R 60 60 1 1 P
+X M0/RT 24 -950 2250 300 R 60 60 1 1 I
+X P34 34 -950 -1650 300 R 60 60 1 1 P
+X P44 44 950 -1950 300 L 60 60 1 1 P
+X PGCK3 54 950 -1350 300 L 60 60 1 1 B
+X GND 64 -50 -2350 0 U 60 60 1 1 W N
+X CCLK 74 -950 1450 300 R 60 60 1 1 I C
+X P84 84 950 950 300 L 60 60 1 1 P
+X P94 94 950 1750 300 L 60 60 1 1 P
+X P15 15 -950 -50 300 R 60 60 1 1 P
+X VCC 25 -450 2350 0 D 60 60 1 1 W N
+X P35 35 -950 -1750 300 R 60 60 1 1 P
+X P45 45 950 -1850 300 L 60 60 1 1 P
+X P55 55 950 -1250 300 L 60 60 1 1 P
+X P65 65 950 -450 300 L 60 60 1 1 P
+X VCC 75 -50 2350 0 D 60 60 1 1 W N
+X P85 85 950 1050 300 L 60 60 1 1 P
+X P91 95 950 1850 300 L 60 60 1 1 P
+X P16 16 -950 -150 300 R 60 60 1 1 P
+X M2 26 -950 2050 300 R 60 60 1 1 P
+X P36/INIT 36 -950 -1850 300 R 60 60 1 1 P
+X P46 46 950 -1750 300 L 60 60 1 1 P
+X P56 56 950 -1150 300 L 60 60 1 1 B
+X P66 66 950 -350 300 L 60 60 1 1 P
+X TDO 76 950 250 300 L 60 60 1 1 O
+X P86 86 950 1150 300 L 60 60 1 1 P
+X P96 96 950 1950 300 L 60 60 1 1 P
+X P17 17 -950 -250 300 R 60 60 1 1 P
+X PGCK2 27 -950 -950 300 R 60 60 1 1 P
+X VCC 37 -350 2350 0 D 60 60 1 1 W N
+X P47 47 950 -1650 300 L 60 60 1 1 P
+X P57 57 950 -1050 300 L 60 60 1 1 P
+X P67 67 950 -250 300 L 60 60 1 1 P
+X GND 77 50 -2350 0 U 60 60 1 1 W N
+X P87 87 950 1250 300 L 60 60 1 1 P
+X P97 97 950 2050 300 L 60 60 1 1 P
+X P18 18 -950 -350 300 R 60 60 1 1 P
+X P/HDC 28 -950 1350 300 R 60 60 1 1 P
+X GND 38 -250 -2350 0 U 60 60 1 1 W N
+X SGCK3 48 950 -1550 300 L 60 60 1 1 P
+X P58 58 950 -950 300 L 60 60 1 1 P
+X P68 68 950 -150 300 L 60 60 1 1 P
+X P78 78 950 350 300 L 60 60 1 1 P
+X GND 88 150 -2350 0 U 60 60 1 1 W N
+X P98 98 950 2150 300 L 60 60 1 1 B
+X P19 19 -950 -450 300 R 60 60 1 1 P
+X P29 29 -950 -1150 300 R 60 60 1 1 P
+X P39 39 -950 -2050 300 R 60 60 1 1 P
+X GND 49 -150 -2350 0 U 60 60 1 1 W N
+X P59 59 950 -850 300 L 60 60 1 1 P
+X P69 69 950 -50 300 L 60 60 1 1 P
+X PGCK4 79 950 450 300 L 60 60 1 1 P
+X VCC 89 50 2350 0 D 60 60 1 1 W N
+X SGCK1 99 950 2250 300 L 60 60 1 1 B
+X VCC 100 150 2350 0 D 60 60 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# XC4005-PQ100
+#
+DEF XC4005-PQ100 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC4005-PQ100" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -750 -2300 750 2300 0 1 0 N
+X P1 1 1050 2100 300 L 60 60 1 1 P
+X SGCK1 2 1050 2200 300 L 60 60 1 1 P
+X VCC 3 -400 2300 0 D 60 60 1 1 W N
+X GND 4 -400 -2300 0 U 60 60 1 1 W N
+X PGCK1 5 -1050 1000 300 R 60 60 1 1 P
+X P6 6 -1050 900 300 R 60 60 1 1 P
+X P7/TDI 7 -1050 800 300 R 60 60 1 1 P
+X P8/TCK 8 -1050 700 300 R 60 60 1 1 P
+X P9/TMS 9 -1050 600 300 R 60 60 1 1 P
+X P20 20 -1050 -200 300 R 60 60 1 1 P
+X PGCK2 30 -1050 -800 300 R 60 60 1 1 P
+X VCC 40 -100 2300 0 D 60 60 1 1 W N
+X P50 50 1050 -2000 300 L 60 60 1 1 P
+X P60 60 1050 -1200 300 L 60 60 1 1 P
+X P70 70 1050 -400 300 L 60 60 1 1 P
+X GND 80 200 -2300 0 U 60 60 1 1 W N
+X P90 90 1050 1200 300 L 60 60 1 1 P
+X P11 11 -1050 500 300 R 60 60 1 1 P
+X P21 21 -1050 -300 300 R 60 60 1 1 P
+X P31/HDC 31 -1050 1300 300 R 60 60 1 1 P
+X GND 41 -100 -2300 0 U 60 60 1 1 W N
+X SGCK3 51 1050 -1800 300 L 60 60 1 1 P
+X P61 61 1050 -1100 300 L 60 60 1 1 P
+X P71 71 1050 -300 300 L 60 60 1 1 P
+X P81 81 1050 200 300 L 60 60 1 1 P
+X GND 91 300 -2300 0 U 60 60 1 1 W N
+X P12 12 -1050 400 300 R 60 60 1 1 P
+X P22 22 -1050 -400 300 R 60 60 1 1 P
+X P32 32 -1050 -1000 300 R 60 60 1 1 P
+X P42 42 -1050 -1700 300 R 60 60 1 1 P
+X GND 52 0 -2300 0 U 60 60 1 1 W N
+X P62 62 1050 -1000 300 L 60 60 1 1 P
+X P72 72 1050 -200 300 L 60 60 1 1 P
+X PGCK4 82 1050 300 300 L 60 60 1 1 P
+X VCC 92 300 2300 0 D 60 60 1 1 W N
+X P13 13 -1050 300 300 R 60 60 1 1 P
+X P23 23 -1050 -500 300 R 60 60 1 1 P
+X P33/LDC 33 -1050 1200 300 R 60 60 1 1 P
+X P43 43 -1050 -1800 300 R 60 60 1 1 P
+X DONE 53 -1050 1800 300 R 60 60 1 1 C
+X P63 63 1050 -900 300 L 60 60 1 1 P
+X P73 73 1050 -100 300 L 60 60 1 1 P
+X P83 83 1050 500 300 L 60 60 1 1 P
+X P93 93 1050 1300 300 L 60 60 1 1 P
+X GND 14 -300 -2300 0 U 60 60 1 1 W N
+X SGCK2 24 -1050 -700 300 R 60 60 1 1 P
+X P34 34 -1050 -1100 300 R 60 60 1 1 P
+X P44 44 -1050 -1900 300 R 60 60 1 1 P
+X VCC 54 0 2300 0 D 60 60 1 1 W N
+X P64 64 1050 -800 300 L 60 60 1 1 P
+X P74/BUSY 74 1050 0 300 L 60 60 1 1 P
+X P84 84 1050 600 300 L 60 60 1 1 P
+X P94 94 1050 1400 300 L 60 60 1 1 P
+X VCC 15 -300 2300 0 D 60 60 1 1 W N
+X M1 25 -1050 2100 300 R 60 60 1 1 P
+X P35 35 -1050 -1200 300 R 60 60 1 1 P
+X P45 45 -1050 -2000 300 R 60 60 1 1 P
+X PROG 55 -1050 1900 300 R 60 60 1 1 I I
+X P65 65 1050 -700 300 L 60 60 1 1 P
+X DIN/D0 75 -1050 1700 300 R 60 60 1 1 P
+X P85 85 1050 700 300 L 60 60 1 1 P
+X P95 95 1050 1500 300 L 60 60 1 1 P
+X P16 16 -1050 200 300 R 60 60 1 1 P
+X GND 26 -200 -2300 0 U 60 60 1 1 W N
+X P36 36 -1050 -1300 300 R 60 60 1 1 P
+X P46 46 -1050 -2100 300 R 60 60 1 1 P
+X P56 56 1050 -1700 300 L 60 60 1 1 P
+X VCC 66 100 2300 0 D 60 60 1 1 W N
+X DOUT/SGCK4 76 -1050 1600 300 R 60 60 1 1 P
+X P86 86 1050 800 300 L 60 60 1 1 P
+X P96 96 1050 1600 300 L 60 60 1 1 P
+X P17 17 -1050 100 300 R 60 60 1 1 P
+X M0 27 -1050 2200 300 R 60 60 1 1 I
+X P37 37 -1050 -1400 300 R 60 60 1 1 P
+X P47 47 -1050 -2200 300 R 60 60 1 1 P
+X PGCK3 57 1050 -1600 300 L 60 60 1 1 P
+X GND 67 100 -2300 0 U 60 60 1 1 W N
+X CCLK 77 -1050 1500 300 R 60 60 1 1 I C
+X P87 87 1050 900 300 L 60 60 1 1 P
+X P97 97 1050 1700 300 L 60 60 1 1 P
+X P18 18 -1050 0 300 R 60 60 1 1 P
+X VCC 28 -200 2300 0 D 60 60 1 1 W N
+X P38 38 -1050 -1500 300 R 60 60 1 1 P
+X P48 48 1050 -2200 300 L 60 60 1 1 P
+X P58 58 1050 -1400 300 L 60 60 1 1 P
+X P68 68 1050 -600 300 L 60 60 1 1 P
+X VCC 78 200 2300 0 D 60 60 1 1 W N
+X P88 88 1050 1000 300 L 60 60 1 1 P
+X P98 98 1050 1800 300 L 60 60 1 1 P
+X P19 19 -1050 -100 300 R 60 60 1 1 P
+X M2 29 -1050 2000 300 R 60 60 1 1 I
+X P39/INIT 39 -1050 -1600 300 R 60 60 1 1 P
+X P49 49 1050 -2100 300 L 60 60 1 1 P
+X P59 59 1050 -1300 300 L 60 60 1 1 P
+X P69 69 1050 -500 300 L 60 60 1 1 P
+X TDO 79 1050 100 300 L 60 60 1 1 O
+X P89 89 1050 1100 300 L 60 60 1 1 P
+X P99 99 1050 1900 300 L 60 60 1 1 P
+X P100 100 1050 2000 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# XC4005-PQ160
+#
+DEF XC4005-PQ160 U 0 40 Y Y 1 F N
+F0 "U" 0 100 70 H V C CNN
+F1 "XC4005-PQ160" 0 -100 70 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+S -800 -3100 800 3100 0 1 0 N
+X GND 1 -800 -3100 0 U 60 60 1 1 W N
+X PGCK1 2 -1100 1700 300 R 60 60 1 1 B
+X P3 3 -1100 1600 300 R 60 60 1 1 P
+X P4 4 -1100 1500 300 R 60 60 1 1 P
+X P5 5 -1100 1400 300 R 60 60 1 1 P
+X TDI 6 -1100 1300 300 R 60 60 1 1 P
+X TCK 7 -1100 1200 300 R 60 60 1 1 P
+X GND 10 -700 -3100 0 U 60 60 1 1 W N
+X VCC 20 -200 3100 0 D 60 60 1 1 W N
+X M0 40 -1100 3000 300 R 60 60 1 1 I
+X VCC 60 -300 3100 0 D 60 60 1 1 W N
+X GND 70 -100 -3100 0 U 60 60 1 1 W N
+X DONE 80 -1100 2500 300 R 60 60 1 1 B
+X P11 11 -1100 1100 300 R 60 60 1 1 P
+X P21 21 -1100 300 300 R 60 60 1 1 P
+X VCC 41 -400 3100 0 D 60 60 1 1 W N
+X GND 51 -300 -3100 0 U 60 60 1 1 W N
+X GND 61 -200 -3100 0 U 60 60 1 1 W N
+X VCC 81 -100 3100 0 D 60 60 1 1 W N
+X GND 91 100 -3100 0 U 60 60 1 1 W N
+X P12 12 -1100 1000 300 R 60 60 1 1 P
+X P22 22 -1100 200 300 R 60 60 1 1 P
+X P32 32 -1100 -500 300 R 60 60 1 1 P
+X M2 42 -1100 2800 300 R 60 60 1 1 I
+X P52 52 -1100 -1500 300 R 60 60 1 1 P
+X P62 62 -1100 -2300 300 R 60 60 1 1 P
+X PROG 82 -1100 2600 300 R 60 60 1 1 I I
+X P92 92 1100 -1800 300 L 60 60 1 1 P
+X TMS 13 -1100 900 300 R 60 60 1 1 P
+X P23 23 -1100 100 300 R 60 60 1 1 P
+X P33 33 -1100 -600 300 R 60 60 1 1 P
+X PGCK2 43 -1100 -1100 300 R 60 60 1 1 P
+X P53 53 -1100 -1600 300 R 60 60 1 1 P
+X P63 63 -1100 -2400 300 R 60 60 1 1 P
+X P73 73 1100 -3000 300 L 60 60 1 1 P
+X P83 83 1100 -2400 300 L 60 60 1 1 P
+X P93 93 1100 -1700 300 L 60 60 1 1 P
+X P14 14 -1100 800 300 R 60 60 1 1 P
+X P24 24 -1100 0 300 R 60 60 1 1 P
+X P34 34 -1100 -700 300 R 60 60 1 1 P
+X HDC 44 -1100 2000 300 R 60 60 1 1 P
+X P54 54 -1100 -1700 300 R 60 60 1 1 P
+X P64 64 -1100 -2500 300 R 60 60 1 1 P
+X P74 74 1100 -2900 300 L 60 60 1 1 P
+X PGCK3 84 1100 -2300 300 L 60 60 1 1 P
+X P93 94 1100 -1600 300 L 60 60 1 1 P
+X P15 15 -1100 700 300 R 60 60 1 1 P
+X P25 25 -1100 -100 300 R 60 60 1 1 P
+X P35 35 -1100 -800 300 R 60 60 1 1 P
+X P45 45 -1100 -1200 300 R 60 60 1 1 P
+X P55 55 -1100 -1800 300 R 60 60 1 1 P
+X P65 65 -1100 -2600 300 R 60 60 1 1 P
+X P75 75 1100 -2800 300 L 60 60 1 1 P
+X P85 85 1100 -2200 300 L 60 60 1 1 P
+X P95 95 1100 -1500 300 L 60 60 1 1 P
+X P16 16 -1100 600 300 R 60 60 1 1 P
+X P26 26 -1100 -200 300 R 60 60 1 1 P
+X P36 36 -1100 -900 300 R 60 60 1 1 P
+X P46 46 -1100 -1300 300 R 60 60 1 1 P
+X P56 56 -1100 -1900 300 R 60 60 1 1 P
+X P66 66 -1100 -2700 300 R 60 60 1 1 P
+X P76 76 1100 -2700 300 L 60 60 1 1 P
+X P86 86 1100 -2100 300 L 60 60 1 1 P
+X P96 96 1100 -1400 300 L 60 60 1 1 P
+X P17 17 -1100 500 300 R 60 60 1 1 P
+X P27 27 -1100 -300 300 R 60 60 1 1 P
+X SGCK2 37 -1100 -1000 300 R 60 60 1 1 P
+X P47 47 -1100 -1400 300 R 60 60 1 1 P
+X P57 57 -1100 -2000 300 R 60 60 1 1 P
+X P67 67 -1100 -2800 300 R 60 60 1 1 P
+X P77 77 1100 -2600 300 L 60 60 1 1 P
+X P87 87 1100 -2000 300 L 60 60 1 1 P
+X P97 97 1100 -1300 300 L 60 60 1 1 P
+X P18 18 -1100 400 300 R 60 60 1 1 P
+X P28 28 -1100 -400 300 R 60 60 1 1 P
+X M1 38 -1100 2900 300 R 60 60 1 1 I
+X LDC 48 -1100 1900 300 R 60 60 1 1 P
+X P58 58 -1100 -2100 300 R 60 60 1 1 P
+X P68 68 -1100 -2900 300 R 60 60 1 1 B
+X SGCK3 78 1100 -2500 300 L 60 60 1 1 P
+X P88 88 1100 -1900 300 L 60 60 1 1 P
+X P98 98 1100 -1200 300 L 60 60 1 1 P
+X GND 19 -600 -3100 0 U 60 60 1 1 W N
+X GND 29 -500 -3100 0 U 60 60 1 1 W N
+X GND 39 -400 -3100 0 U 60 60 1 1 W N
+X P59-INIT 59 -1100 -2200 300 R 60 60 1 1 P
+X P69 69 -1100 -3000 300 R 60 60 1 1 P
+X GND 79 0 -3100 0 U 60 60 1 1 W N
+X P90 99 1100 -1100 300 L 60 60 1 1 P
+X VCC 100 0 3100 0 D 60 60 1 1 W N
+X GND 110 300 -3100 0 U 60 60 1 1 W N
+X VCC 120 100 3100 0 D 60 60 1 1 W N
+X P140 140 1100 1600 300 L 60 60 1 1 P
+X P150 150 1100 2400 300 L 60 60 1 1 P
+X VCC 160 300 3100 0 D 60 60 1 1 W N
+X GND 101 200 -3100 0 U 60 60 1 1 W N
+X TDO 121 1100 200 300 L 60 60 1 1 O
+X GND 131 500 -3100 0 U 60 60 1 1 W N
+X GND 141 600 -3100 0 U 60 60 1 1 W N
+X GND 151 700 -3100 0 U 60 60 1 1 W N
+X P102 102 1100 -1000 300 L 60 60 1 1 P
+X GND 122 400 -3100 0 U 60 60 1 1 W N
+X P132 132 1100 900 300 L 60 60 1 1 P
+X VCC 142 200 3100 0 D 60 60 1 1 W N
+X P103 103 1100 -900 300 L 60 60 1 1 P
+X P113 113 1100 -200 300 L 60 60 1 1 P
+X P123 123 1100 300 300 L 60 60 1 1 P
+X P133 133 1100 1000 300 L 60 60 1 1 P
+X P143 143 1100 1700 300 L 60 60 1 1 P
+X P104 104 1100 -800 300 L 60 60 1 1 P
+X P114-RDY 114 1100 -100 300 L 60 60 1 1 P
+X P124 124 1100 400 300 L 60 60 1 1 P
+X P134 134 1100 1100 300 L 60 60 1 1 P
+X P144 144 1100 1800 300 L 60 60 1 1 P
+X P154 154 1100 2500 300 L 60 60 1 1 P
+X P105 105 1100 -700 300 L 60 60 1 1 P
+X P115 115 1100 0 300 L 60 60 1 1 P
+X P125 125 1100 500 300 L 60 60 1 1 P
+X P135 135 1100 1200 300 L 60 60 1 1 P
+X P145 145 1100 1900 300 L 60 60 1 1 P
+X P155 155 1100 2600 300 L 60 60 1 1 P
+X P106 106 1100 -600 300 L 60 60 1 1 P
+X P116 116 1100 100 300 L 60 60 1 1 P
+X P126 126 1100 600 300 L 60 60 1 1 P
+X P146 146 1100 2000 300 L 60 60 1 1 P
+X P156 156 1100 2700 300 L 60 60 1 1 P
+X P107 107 1100 -500 300 L 60 60 1 1 P
+X DIN 117 -1100 2400 300 R 60 60 1 1 I
+X P127 127 1100 700 300 L 60 60 1 1 P
+X P137 137 1100 1300 300 L 60 60 1 1 P
+X P147 147 1100 2100 300 L 60 60 1 1 P
+X P157 157 1100 2800 300 L 60 60 1 1 P
+X P108 108 1100 -400 300 L 60 60 1 1 P
+X DOUT-SGI4 118 -1100 2300 300 R 60 60 1 1 P
+X P128 128 1100 800 300 L 60 60 1 1 P
+X P138 138 1100 1400 300 L 60 60 1 1 P
+X P148 148 1100 2200 300 L 60 60 1 1 P
+X P158 158 1100 2900 300 L 60 60 1 1 P
+X P109 109 1100 -300 300 L 60 60 1 1 P
+X CCLK 119 -1100 2200 300 R 60 60 1 1 P C
+X P139 139 1100 1500 300 L 60 60 1 1 P
+X P149 149 1100 2300 300 L 60 60 1 1 P
+X SGCK1 159 1100 3000 300 L 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/demos/video/video.kicad_pcb b/demos/video/video.kicad_pcb
new file mode 100644
index 0000000..a9373bb
--- /dev/null
+++ b/demos/video/video.kicad_pcb
@@ -0,0 +1,30024 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-10-12 BZR 6266)-product")
+
+ (general
+ (links 1575)
+ (no_connects 0)
+ (area 40.893999 55.3974 365.734601 163.525201)
+ (thickness 1.6002)
+ (drawings 39)
+ (tracks 9218)
+ (zones 0)
+ (modules 189)
+ (nets 390)
+ )
+
+ (page A3)
+ (title_block
+ (title "KiCad demo")
+ (date 2015-10-14)
+ (rev 1.A)
+ )
+
+ (layers
+ (0 Composant signal)
+ (1 GND_layer signal)
+ (2 VCC_layer signal)
+ (31 Cuivre signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ )
+
+ (setup
+ (last_trace_width 0.2032)
+ (trace_clearance 0.2032)
+ (zone_clearance 0.4)
+ (zone_45_only no)
+ (trace_min 0.2032)
+ (segment_width 0.3048)
+ (edge_width 0.2032)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.2032)
+ (pcb_text_size 1.524 1.524)
+ (mod_edge_width 0.3048)
+ (mod_text_size 1.27 1.27)
+ (mod_text_width 0.2032)
+ (pad_size 3.81 5.08)
+ (pad_drill 3.048)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 40.9 173.1)
+ (visible_elements 7FFFFFFF)
+ (pcbplotparams
+ (layerselection 0x010fc_80000007)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (excludeedgelayer false)
+ (linewidth 0.150000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin true)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory plots))
+ )
+
+ (net 0 "")
+ (net 1 +12V)
+ (net 2 +3.3V)
+ (net 3 +5F)
+ (net 4 /ESVIDEO-RVB/BLUE)
+ (net 5 /ESVIDEO-RVB/BLUE_IN)
+ (net 6 /ESVIDEO-RVB/DPC0)
+ (net 7 /ESVIDEO-RVB/DPC1)
+ (net 8 /ESVIDEO-RVB/DPC2)
+ (net 9 /ESVIDEO-RVB/DPC4)
+ (net 10 /ESVIDEO-RVB/DPC5)
+ (net 11 /ESVIDEO-RVB/DPC7)
+ (net 12 /ESVIDEO-RVB/GREEN)
+ (net 13 /ESVIDEO-RVB/GREEN_IN)
+ (net 14 /ESVIDEO-RVB/OE_RVB-)
+ (net 15 /ESVIDEO-RVB/PCA0)
+ (net 16 /ESVIDEO-RVB/PCA2)
+ (net 17 /ESVIDEO-RVB/RDCDA-)
+ (net 18 /ESVIDEO-RVB/REF+)
+ (net 19 /ESVIDEO-RVB/TVB2)
+ (net 20 /ESVIDEO-RVB/TVB3)
+ (net 21 /ESVIDEO-RVB/TVG0)
+ (net 22 /ESVIDEO-RVB/TVG1)
+ (net 23 /ESVIDEO-RVB/TVG2)
+ (net 24 /ESVIDEO-RVB/TVG3)
+ (net 25 /ESVIDEO-RVB/TVG4)
+ (net 26 /ESVIDEO-RVB/TVG5)
+ (net 27 /ESVIDEO-RVB/TVR0)
+ (net 28 /ESVIDEO-RVB/TVR1)
+ (net 29 /ESVIDEO-RVB/TVR2)
+ (net 30 /ESVIDEO-RVB/TVR5)
+ (net 31 /ESVIDEO-RVB/TVR6)
+ (net 32 /ESVIDEO-RVB/TVR7)
+ (net 33 /ESVIDEO-RVB/VAA)
+ (net 34 /RAMS/CAS0-)
+ (net 35 /RAMS/CAS2-)
+ (net 36 /RAMS/CAS3-)
+ (net 37 /RAMS/MXA0)
+ (net 38 /RAMS/MXA1)
+ (net 39 /RAMS/MXA10)
+ (net 40 /RAMS/MXA2)
+ (net 41 /RAMS/MXA3)
+ (net 42 /RAMS/MXA4)
+ (net 43 /RAMS/MXA5)
+ (net 44 /RAMS/MXA6)
+ (net 45 /RAMS/MXA7)
+ (net 46 /RAMS/MXA8)
+ (net 47 /RAMS/MXA9)
+ (net 48 /RAMS/RAS3-)
+ (net 49 /RAMS/RAS5-)
+ (net 50 /RAMS/TVRAM0)
+ (net 51 /RAMS/TVRAM1)
+ (net 52 /RAMS/TVRAM10)
+ (net 53 /RAMS/TVRAM11)
+ (net 54 /RAMS/TVRAM12)
+ (net 55 /RAMS/TVRAM13)
+ (net 56 /RAMS/TVRAM14)
+ (net 57 /RAMS/TVRAM15)
+ (net 58 /RAMS/TVRAM16)
+ (net 59 /RAMS/TVRAM17)
+ (net 60 /RAMS/TVRAM18)
+ (net 61 /RAMS/TVRAM19)
+ (net 62 /RAMS/TVRAM2)
+ (net 63 /RAMS/TVRAM20)
+ (net 64 /RAMS/TVRAM21)
+ (net 65 /RAMS/TVRAM22)
+ (net 66 /RAMS/TVRAM23)
+ (net 67 /RAMS/TVRAM24)
+ (net 68 /RAMS/TVRAM25)
+ (net 69 /RAMS/TVRAM26)
+ (net 70 /RAMS/TVRAM27)
+ (net 71 /RAMS/TVRAM28)
+ (net 72 /RAMS/TVRAM29)
+ (net 73 /RAMS/TVRAM3)
+ (net 74 /RAMS/TVRAM30)
+ (net 75 /RAMS/TVRAM31)
+ (net 76 /RAMS/TVRAM4)
+ (net 77 /RAMS/TVRAM5)
+ (net 78 /RAMS/TVRAM6)
+ (net 79 /RAMS/TVRAM7)
+ (net 80 /RAMS/TVRAM8)
+ (net 81 /RAMS/TVRAM9)
+ (net 82 /RAMS/WRAM-)
+ (net 83 /buspci.sch/ADR6)
+ (net 84 /buspci.sch/BPCLK)
+ (net 85 /buspci.sch/EA1)
+ (net 86 /buspci.sch/EA10)
+ (net 87 /buspci.sch/EA11)
+ (net 88 /buspci.sch/EA12)
+ (net 89 /buspci.sch/EA13)
+ (net 90 /buspci.sch/EA14)
+ (net 91 /buspci.sch/EA15)
+ (net 92 /buspci.sch/EA2)
+ (net 93 /buspci.sch/EA3)
+ (net 94 /buspci.sch/EA4)
+ (net 95 /buspci.sch/EA5)
+ (net 96 /buspci.sch/EA6)
+ (net 97 /buspci.sch/EA7)
+ (net 98 /buspci.sch/EA9)
+ (net 99 /buspci.sch/EQ0)
+ (net 100 /buspci.sch/EQ1)
+ (net 101 /buspci.sch/EQ2)
+ (net 102 /buspci.sch/EQ3)
+ (net 103 /buspci.sch/EQ4)
+ (net 104 /buspci.sch/EQ5)
+ (net 105 /buspci.sch/EQ6)
+ (net 106 /buspci.sch/EQ7)
+ (net 107 /buspci.sch/PTATN-)
+ (net 108 /buspci.sch/PTBE-1)
+ (net 109 /buspci.sch/PTNUM0)
+ (net 110 /buspci.sch/PTRDY-)
+ (net 111 /buspci.sch/P_AD0)
+ (net 112 /buspci.sch/P_AD1)
+ (net 113 /buspci.sch/P_AD10)
+ (net 114 /buspci.sch/P_AD11)
+ (net 115 /buspci.sch/P_AD12)
+ (net 116 /buspci.sch/P_AD13)
+ (net 117 /buspci.sch/P_AD14)
+ (net 118 /buspci.sch/P_AD15)
+ (net 119 /buspci.sch/P_AD16)
+ (net 120 /buspci.sch/P_AD17)
+ (net 121 /buspci.sch/P_AD18)
+ (net 122 /buspci.sch/P_AD19)
+ (net 123 /buspci.sch/P_AD2)
+ (net 124 /buspci.sch/P_AD20)
+ (net 125 /buspci.sch/P_AD21)
+ (net 126 /buspci.sch/P_AD22)
+ (net 127 /buspci.sch/P_AD23)
+ (net 128 /buspci.sch/P_AD24)
+ (net 129 /buspci.sch/P_AD25)
+ (net 130 /buspci.sch/P_AD26)
+ (net 131 /buspci.sch/P_AD27)
+ (net 132 /buspci.sch/P_AD28)
+ (net 133 /buspci.sch/P_AD29)
+ (net 134 /buspci.sch/P_AD3)
+ (net 135 /buspci.sch/P_AD30)
+ (net 136 /buspci.sch/P_AD31)
+ (net 137 /buspci.sch/P_AD4)
+ (net 138 /buspci.sch/P_AD5)
+ (net 139 /buspci.sch/P_AD6)
+ (net 140 /buspci.sch/P_AD7)
+ (net 141 /buspci.sch/P_AD8)
+ (net 142 /buspci.sch/P_AD9)
+ (net 143 /buspci.sch/P_C/BE0#)
+ (net 144 /buspci.sch/P_C/BE1#)
+ (net 145 /buspci.sch/P_C/BE2#)
+ (net 146 /buspci.sch/P_C/BE3#)
+ (net 147 /buspci.sch/P_CLK)
+ (net 148 /buspci.sch/P_DEVSEL#)
+ (net 149 /buspci.sch/P_FRAME#)
+ (net 150 /buspci.sch/P_GNT#)
+ (net 151 /buspci.sch/P_IDSEL)
+ (net 152 /buspci.sch/P_INTA#)
+ (net 153 /buspci.sch/P_IRDY#)
+ (net 154 /buspci.sch/P_LOCK#)
+ (net 155 /buspci.sch/P_PAR)
+ (net 156 /buspci.sch/P_PERR#)
+ (net 157 /buspci.sch/P_REQ#)
+ (net 158 /buspci.sch/P_RST#)
+ (net 159 /buspci.sch/P_SERR#)
+ (net 160 /buspci.sch/P_STOP#)
+ (net 161 /buspci.sch/P_TRDY#)
+ (net 162 /buspci.sch/RDFIFO-)
+ (net 163 /buspci.sch/WRFIFO-)
+ (net 164 /buspci.sch/WRFULL)
+ (net 165 /buspci.sch/X_IRQ)
+ (net 166 /graphic/14MHZOUT)
+ (net 167 /graphic/BT812_RD-)
+ (net 168 /graphic/BT812_WR-)
+ (net 169 /graphic/CADCLK)
+ (net 170 /graphic/CCLK)
+ (net 171 /graphic/CDACLK)
+ (net 172 /graphic/CLK10MHz)
+ (net 173 /graphic/CSIO-)
+ (net 174 /graphic/DIN)
+ (net 175 /graphic/DONE)
+ (net 176 /graphic/HDOUT)
+ (net 177 /graphic/HDREFOUT)
+ (net 178 /graphic/IA0)
+ (net 179 /graphic/IA1)
+ (net 180 /graphic/IA2)
+ (net 181 /graphic/IA3)
+ (net 182 /graphic/IA4)
+ (net 183 /graphic/IA5)
+ (net 184 /graphic/IA6)
+ (net 185 /graphic/IA7)
+ (net 186 /graphic/IA8)
+ (net 187 /graphic/IA9)
+ (net 188 /graphic/ICAS-)
+ (net 189 /graphic/ID0)
+ (net 190 /graphic/ID1)
+ (net 191 /graphic/ID2)
+ (net 192 /graphic/ID3)
+ (net 193 /graphic/IOE-)
+ (net 194 /graphic/IRAS-)
+ (net 195 /graphic/IRQ_SLR)
+ (net 196 /graphic/IWR-)
+ (net 197 /graphic/LED)
+ (net 198 /graphic/PROG*)
+ (net 199 /graphic/RESERV1)
+ (net 200 /graphic/VOSC)
+ (net 201 /graphic/XTAL_I)
+ (net 202 /graphic/X_CLK)
+ (net 203 /graphic/X_DIN)
+ (net 204 /graphic/X_PROG-)
+ (net 205 /modul/BLEU)
+ (net 206 /modul/CHROM)
+ (net 207 /modul/COUT)
+ (net 208 /modul/CVBS)
+ (net 209 /modul/CVBSOUT)
+ (net 210 /modul/LUM)
+ (net 211 /modul/YOUT)
+ (net 212 /muxdata/DATA_WR)
+ (net 213 /muxdata/DPC10)
+ (net 214 /muxdata/DPC11)
+ (net 215 /muxdata/DPC12)
+ (net 216 /muxdata/DPC13)
+ (net 217 /muxdata/DPC14)
+ (net 218 /muxdata/DPC15)
+ (net 219 /muxdata/DPC16)
+ (net 220 /muxdata/DPC17)
+ (net 221 /muxdata/DPC18)
+ (net 222 /muxdata/DPC19)
+ (net 223 /muxdata/DPC20)
+ (net 224 /muxdata/DPC21)
+ (net 225 /muxdata/DPC22)
+ (net 226 /muxdata/DPC23)
+ (net 227 /muxdata/DPC24)
+ (net 228 /muxdata/DPC25)
+ (net 229 /muxdata/DPC26)
+ (net 230 /muxdata/DPC27)
+ (net 231 /muxdata/DPC28)
+ (net 232 /muxdata/DPC29)
+ (net 233 /muxdata/DPC30)
+ (net 234 /muxdata/DPC31)
+ (net 235 /muxdata/DPC8)
+ (net 236 /muxdata/DPC9)
+ (net 237 /muxdata/X_DIN)
+ (net 238 /pal-ntsc.sch/C-VIDEO)
+ (net 239 /pal-ntsc.sch/RESET-)
+ (net 240 /pal-ntsc.sch/VAF)
+ (net 241 /pal-ntsc.sch/Y-VIDEO)
+ (net 242 /pal-ntsc.sch/Y_SYNC)
+ (net 243 GND)
+ (net 244 "Net-(BUS1-PadB1)")
+ (net 245 "Net-(BUS1-PadB2)")
+ (net 246 "Net-(BUS1-PadA4)")
+ (net 247 VCC)
+ (net 248 "Net-(BUS1-PadB7)")
+ (net 249 "Net-(BUS1-PadB8)")
+ (net 250 "Net-(BUS1-PadB9)")
+ (net 251 "Net-(BUS1-PadB10)")
+ (net 252 "Net-(BUS1-PadB11)")
+ (net 253 "Net-(BUS1-PadB14)")
+ (net 254 "Net-(BUS1-PadB60)")
+ (net 255 "Net-(BUS1-PadA1)")
+ (net 256 "Net-(BUS1-PadA3)")
+ (net 257 "Net-(BUS1-PadA7)")
+ (net 258 "Net-(BUS1-PadA9)")
+ (net 259 "Net-(BUS1-PadA11)")
+ (net 260 "Net-(BUS1-PadA14)")
+ (net 261 "Net-(BUS1-PadA19)")
+ (net 262 "Net-(BUS1-PadA40)")
+ (net 263 "Net-(BUS1-PadA41)")
+ (net 264 "Net-(BUS1-PadA60)")
+ (net 265 "Net-(C1-Pad1)")
+ (net 266 "Net-(C1-Pad2)")
+ (net 267 "Net-(C3-Pad1)")
+ (net 268 "Net-(C4-Pad1)")
+ (net 269 /ESVIDEO-RVB/RED_IN)
+ (net 270 "Net-(C5-Pad1)")
+ (net 271 "Net-(C5-Pad2)")
+ (net 272 "Net-(C6-Pad1)")
+ (net 273 "Net-(C7-Pad1)")
+ (net 274 "Net-(C8-Pad1)")
+ (net 275 "Net-(C8-Pad2)")
+ (net 276 "Net-(C16-Pad1)")
+ (net 277 "Net-(C32-Pad2)")
+ (net 278 "Net-(C34-Pad2)")
+ (net 279 "Net-(C35-Pad2)")
+ (net 280 "Net-(C36-Pad1)")
+ (net 281 "Net-(C36-Pad2)")
+ (net 282 "Net-(C39-Pad1)")
+ (net 283 "Net-(C39-Pad2)")
+ (net 284 "Net-(C40-Pad1)")
+ (net 285 "Net-(C40-Pad2)")
+ (net 286 "Net-(C41-Pad1)")
+ (net 287 "Net-(C41-Pad2)")
+ (net 288 "Net-(C43-Pad1)")
+ (net 289 "Net-(C44-Pad1)")
+ (net 290 "Net-(C45-Pad1)")
+ (net 291 "Net-(C46-Pad1)")
+ (net 292 "Net-(C48-Pad2)")
+ (net 293 "Net-(C49-Pad1)")
+ (net 294 "Net-(C54-Pad1)")
+ (net 295 "Net-(C58-Pad1)")
+ (net 296 "Net-(C59-Pad1)")
+ (net 297 "Net-(C60-Pad1)")
+ (net 298 "Net-(C61-Pad1)")
+ (net 299 "Net-(C61-Pad2)")
+ (net 300 "Net-(C65-Pad2)")
+ (net 301 "Net-(C66-Pad2)")
+ (net 302 "Net-(CV1-Pad1)")
+ (net 303 "Net-(D6-Pad1)")
+ (net 304 "Net-(L1-Pad1)")
+ (net 305 "Net-(L6-Pad1)")
+ (net 306 "Net-(L6-Pad2)")
+ (net 307 "Net-(P4-Pad1)")
+ (net 308 "Net-(P9-Pad1)")
+ (net 309 "Net-(P10-Pad1)")
+ (net 310 "Net-(P11-Pad1)")
+ (net 311 "Net-(POT1-Pad1)")
+ (net 312 "Net-(Q1-Pad1)")
+ (net 313 "Net-(Q1-Pad2)")
+ (net 314 "Net-(Q2-Pad1)")
+ (net 315 "Net-(Q2-Pad2)")
+ (net 316 "Net-(Q3-Pad1)")
+ (net 317 "Net-(Q3-Pad2)")
+ (net 318 "Net-(R4-Pad1)")
+ (net 319 "Net-(R5-Pad1)")
+ (net 320 "Net-(R6-Pad1)")
+ (net 321 "Net-(R7-Pad1)")
+ (net 322 "Net-(R9-Pad2)")
+ (net 323 "Net-(R10-Pad2)")
+ (net 324 "Net-(R19-Pad2)")
+ (net 325 "Net-(R27-Pad1)")
+ (net 326 "Net-(R28-Pad2)")
+ (net 327 "Net-(R29-Pad2)")
+ (net 328 /graphic/CSYNC-OUT)
+ (net 329 "Net-(R36-Pad2)")
+ (net 330 "Net-(R38-Pad1)")
+ (net 331 /buspci.sch/SELECT-)
+ (net 332 /buspci.sch/WR-)
+ (net 333 /buspci.sch/RD-)
+ (net 334 /buspci.sch/PTADR-)
+ (net 335 /ESVIDEO-RVB/DPC3)
+ (net 336 /ESVIDEO-RVB/DPC6)
+ (net 337 /graphic/ACCES_RAM-)
+ (net 338 /ESVIDEO-RVB/CSYNCIN-)
+ (net 339 /ESVIDEO-RVB/PCA1)
+ (net 340 /ESVIDEO-RVB/RDCAD-)
+ (net 341 /ESVIDEO-RVB/WRCAD-)
+ (net 342 /ESVIDEO-RVB/TVB7)
+ (net 343 /ESVIDEO-RVB/TVB6)
+ (net 344 /ESVIDEO-RVB/TVB5)
+ (net 345 /ESVIDEO-RVB/TVB4)
+ (net 346 /ESVIDEO-RVB/TVB1)
+ (net 347 /ESVIDEO-RVB/TVB0)
+ (net 348 /ESVIDEO-RVB/TVG7)
+ (net 349 /ESVIDEO-RVB/TVG6)
+ (net 350 /ESVIDEO-RVB/CLAMP)
+ (net 351 /ESVIDEO-RVB/TVR4)
+ (net 352 /ESVIDEO-RVB/TVR3)
+ (net 353 "Net-(U8-Pad58)")
+ (net 354 "Net-(U8-Pad60)")
+ (net 355 "Net-(U8-Pad62)")
+ (net 356 /ESVIDEO-RVB/BLANK-)
+ (net 357 /ESVIDEO-RVB/TVI0)
+ (net 358 /ESVIDEO-RVB/TVI1)
+ (net 359 /ESVIDEO-RVB/WRCDA-)
+ (net 360 /ESVIDEO-RVB/OE_PAL-)
+ (net 361 /graphic/VD_PAL-)
+ (net 362 /graphic/HD_PAL-)
+ (net 363 /graphic/F_PALIN)
+ (net 364 /buspci.sch/BE-3)
+ (net 365 /buspci.sch/BE-2)
+ (net 366 /buspci.sch/BE-1)
+ (net 367 /buspci.sch/ADR5)
+ (net 368 /buspci.sch/ADR4)
+ (net 369 /buspci.sch/ADR3)
+ (net 370 /buspci.sch/ADR2)
+ (net 371 /buspci.sch/PTNUM1)
+ (net 372 /buspci.sch/IRQ-)
+ (net 373 /buspci.sch/BE-0)
+ (net 374 /buspci.sch/RDEMPTY)
+ (net 375 /buspci.sch/PTWR)
+ (net 376 /buspci.sch/PTBURST-)
+ (net 377 /buspci.sch/PTBE-0)
+ (net 378 /buspci.sch/PTBE-2)
+ (net 379 /buspci.sch/PTBE-3)
+ (net 380 /RAMS/CAS1-)
+ (net 381 /RAMS/RAS7-)
+ (net 382 /RAMS/RAS6-)
+ (net 383 /RAMS/RAS4-)
+ (net 384 /RAMS/RAS2-)
+ (net 385 /RAMS/RAS1-)
+ (net 386 /RAMS/RAS0-)
+ (net 387 "Net-(U20-Pad23)")
+ (net 388 /graphic/ACQ_ON)
+ (net 389 /graphic/X_DONE)
+
+ (net_class Default "This is the default net class."
+ (clearance 0.2032)
+ (trace_width 0.2032)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net /ESVIDEO-RVB/BLANK-)
+ (add_net /ESVIDEO-RVB/BLUE)
+ (add_net /ESVIDEO-RVB/BLUE_IN)
+ (add_net /ESVIDEO-RVB/CLAMP)
+ (add_net /ESVIDEO-RVB/CSYNCIN-)
+ (add_net /ESVIDEO-RVB/DPC0)
+ (add_net /ESVIDEO-RVB/DPC1)
+ (add_net /ESVIDEO-RVB/DPC2)
+ (add_net /ESVIDEO-RVB/DPC3)
+ (add_net /ESVIDEO-RVB/DPC4)
+ (add_net /ESVIDEO-RVB/DPC5)
+ (add_net /ESVIDEO-RVB/DPC6)
+ (add_net /ESVIDEO-RVB/DPC7)
+ (add_net /ESVIDEO-RVB/GREEN)
+ (add_net /ESVIDEO-RVB/GREEN_IN)
+ (add_net /ESVIDEO-RVB/OE_PAL-)
+ (add_net /ESVIDEO-RVB/OE_RVB-)
+ (add_net /ESVIDEO-RVB/PCA0)
+ (add_net /ESVIDEO-RVB/PCA1)
+ (add_net /ESVIDEO-RVB/PCA2)
+ (add_net /ESVIDEO-RVB/RDCAD-)
+ (add_net /ESVIDEO-RVB/RDCDA-)
+ (add_net /ESVIDEO-RVB/RED_IN)
+ (add_net /ESVIDEO-RVB/REF+)
+ (add_net /ESVIDEO-RVB/TVB0)
+ (add_net /ESVIDEO-RVB/TVB1)
+ (add_net /ESVIDEO-RVB/TVB2)
+ (add_net /ESVIDEO-RVB/TVB3)
+ (add_net /ESVIDEO-RVB/TVB4)
+ (add_net /ESVIDEO-RVB/TVB5)
+ (add_net /ESVIDEO-RVB/TVB6)
+ (add_net /ESVIDEO-RVB/TVB7)
+ (add_net /ESVIDEO-RVB/TVG0)
+ (add_net /ESVIDEO-RVB/TVG1)
+ (add_net /ESVIDEO-RVB/TVG2)
+ (add_net /ESVIDEO-RVB/TVG3)
+ (add_net /ESVIDEO-RVB/TVG4)
+ (add_net /ESVIDEO-RVB/TVG5)
+ (add_net /ESVIDEO-RVB/TVG6)
+ (add_net /ESVIDEO-RVB/TVG7)
+ (add_net /ESVIDEO-RVB/TVI0)
+ (add_net /ESVIDEO-RVB/TVI1)
+ (add_net /ESVIDEO-RVB/TVR0)
+ (add_net /ESVIDEO-RVB/TVR1)
+ (add_net /ESVIDEO-RVB/TVR2)
+ (add_net /ESVIDEO-RVB/TVR3)
+ (add_net /ESVIDEO-RVB/TVR4)
+ (add_net /ESVIDEO-RVB/TVR5)
+ (add_net /ESVIDEO-RVB/TVR6)
+ (add_net /ESVIDEO-RVB/TVR7)
+ (add_net /ESVIDEO-RVB/VAA)
+ (add_net /ESVIDEO-RVB/WRCAD-)
+ (add_net /ESVIDEO-RVB/WRCDA-)
+ (add_net /RAMS/CAS0-)
+ (add_net /RAMS/CAS1-)
+ (add_net /RAMS/CAS2-)
+ (add_net /RAMS/CAS3-)
+ (add_net /RAMS/MXA0)
+ (add_net /RAMS/MXA1)
+ (add_net /RAMS/MXA10)
+ (add_net /RAMS/MXA2)
+ (add_net /RAMS/MXA3)
+ (add_net /RAMS/MXA4)
+ (add_net /RAMS/MXA5)
+ (add_net /RAMS/MXA6)
+ (add_net /RAMS/MXA7)
+ (add_net /RAMS/MXA8)
+ (add_net /RAMS/MXA9)
+ (add_net /RAMS/RAS0-)
+ (add_net /RAMS/RAS1-)
+ (add_net /RAMS/RAS2-)
+ (add_net /RAMS/RAS3-)
+ (add_net /RAMS/RAS4-)
+ (add_net /RAMS/RAS5-)
+ (add_net /RAMS/RAS6-)
+ (add_net /RAMS/RAS7-)
+ (add_net /RAMS/TVRAM0)
+ (add_net /RAMS/TVRAM1)
+ (add_net /RAMS/TVRAM10)
+ (add_net /RAMS/TVRAM11)
+ (add_net /RAMS/TVRAM12)
+ (add_net /RAMS/TVRAM13)
+ (add_net /RAMS/TVRAM14)
+ (add_net /RAMS/TVRAM15)
+ (add_net /RAMS/TVRAM16)
+ (add_net /RAMS/TVRAM17)
+ (add_net /RAMS/TVRAM18)
+ (add_net /RAMS/TVRAM19)
+ (add_net /RAMS/TVRAM2)
+ (add_net /RAMS/TVRAM20)
+ (add_net /RAMS/TVRAM21)
+ (add_net /RAMS/TVRAM22)
+ (add_net /RAMS/TVRAM23)
+ (add_net /RAMS/TVRAM24)
+ (add_net /RAMS/TVRAM25)
+ (add_net /RAMS/TVRAM26)
+ (add_net /RAMS/TVRAM27)
+ (add_net /RAMS/TVRAM28)
+ (add_net /RAMS/TVRAM29)
+ (add_net /RAMS/TVRAM3)
+ (add_net /RAMS/TVRAM30)
+ (add_net /RAMS/TVRAM31)
+ (add_net /RAMS/TVRAM4)
+ (add_net /RAMS/TVRAM5)
+ (add_net /RAMS/TVRAM6)
+ (add_net /RAMS/TVRAM7)
+ (add_net /RAMS/TVRAM8)
+ (add_net /RAMS/TVRAM9)
+ (add_net /RAMS/WRAM-)
+ (add_net /buspci.sch/ADR2)
+ (add_net /buspci.sch/ADR3)
+ (add_net /buspci.sch/ADR4)
+ (add_net /buspci.sch/ADR5)
+ (add_net /buspci.sch/ADR6)
+ (add_net /buspci.sch/BE-0)
+ (add_net /buspci.sch/BE-1)
+ (add_net /buspci.sch/BE-2)
+ (add_net /buspci.sch/BE-3)
+ (add_net /buspci.sch/BPCLK)
+ (add_net /buspci.sch/EA1)
+ (add_net /buspci.sch/EA10)
+ (add_net /buspci.sch/EA11)
+ (add_net /buspci.sch/EA12)
+ (add_net /buspci.sch/EA13)
+ (add_net /buspci.sch/EA14)
+ (add_net /buspci.sch/EA15)
+ (add_net /buspci.sch/EA2)
+ (add_net /buspci.sch/EA3)
+ (add_net /buspci.sch/EA4)
+ (add_net /buspci.sch/EA5)
+ (add_net /buspci.sch/EA6)
+ (add_net /buspci.sch/EA7)
+ (add_net /buspci.sch/EA9)
+ (add_net /buspci.sch/EQ0)
+ (add_net /buspci.sch/EQ1)
+ (add_net /buspci.sch/EQ2)
+ (add_net /buspci.sch/EQ3)
+ (add_net /buspci.sch/EQ4)
+ (add_net /buspci.sch/EQ5)
+ (add_net /buspci.sch/EQ6)
+ (add_net /buspci.sch/EQ7)
+ (add_net /buspci.sch/IRQ-)
+ (add_net /buspci.sch/PTADR-)
+ (add_net /buspci.sch/PTATN-)
+ (add_net /buspci.sch/PTBE-0)
+ (add_net /buspci.sch/PTBE-1)
+ (add_net /buspci.sch/PTBE-2)
+ (add_net /buspci.sch/PTBE-3)
+ (add_net /buspci.sch/PTBURST-)
+ (add_net /buspci.sch/PTNUM0)
+ (add_net /buspci.sch/PTNUM1)
+ (add_net /buspci.sch/PTRDY-)
+ (add_net /buspci.sch/PTWR)
+ (add_net /buspci.sch/P_AD0)
+ (add_net /buspci.sch/P_AD1)
+ (add_net /buspci.sch/P_AD10)
+ (add_net /buspci.sch/P_AD11)
+ (add_net /buspci.sch/P_AD12)
+ (add_net /buspci.sch/P_AD13)
+ (add_net /buspci.sch/P_AD14)
+ (add_net /buspci.sch/P_AD15)
+ (add_net /buspci.sch/P_AD16)
+ (add_net /buspci.sch/P_AD17)
+ (add_net /buspci.sch/P_AD18)
+ (add_net /buspci.sch/P_AD19)
+ (add_net /buspci.sch/P_AD2)
+ (add_net /buspci.sch/P_AD20)
+ (add_net /buspci.sch/P_AD21)
+ (add_net /buspci.sch/P_AD22)
+ (add_net /buspci.sch/P_AD23)
+ (add_net /buspci.sch/P_AD24)
+ (add_net /buspci.sch/P_AD25)
+ (add_net /buspci.sch/P_AD26)
+ (add_net /buspci.sch/P_AD27)
+ (add_net /buspci.sch/P_AD28)
+ (add_net /buspci.sch/P_AD29)
+ (add_net /buspci.sch/P_AD3)
+ (add_net /buspci.sch/P_AD30)
+ (add_net /buspci.sch/P_AD31)
+ (add_net /buspci.sch/P_AD4)
+ (add_net /buspci.sch/P_AD5)
+ (add_net /buspci.sch/P_AD6)
+ (add_net /buspci.sch/P_AD7)
+ (add_net /buspci.sch/P_AD8)
+ (add_net /buspci.sch/P_AD9)
+ (add_net /buspci.sch/P_C/BE0#)
+ (add_net /buspci.sch/P_C/BE1#)
+ (add_net /buspci.sch/P_C/BE2#)
+ (add_net /buspci.sch/P_C/BE3#)
+ (add_net /buspci.sch/P_CLK)
+ (add_net /buspci.sch/P_DEVSEL#)
+ (add_net /buspci.sch/P_FRAME#)
+ (add_net /buspci.sch/P_GNT#)
+ (add_net /buspci.sch/P_IDSEL)
+ (add_net /buspci.sch/P_INTA#)
+ (add_net /buspci.sch/P_IRDY#)
+ (add_net /buspci.sch/P_LOCK#)
+ (add_net /buspci.sch/P_PAR)
+ (add_net /buspci.sch/P_PERR#)
+ (add_net /buspci.sch/P_REQ#)
+ (add_net /buspci.sch/P_RST#)
+ (add_net /buspci.sch/P_SERR#)
+ (add_net /buspci.sch/P_STOP#)
+ (add_net /buspci.sch/P_TRDY#)
+ (add_net /buspci.sch/RD-)
+ (add_net /buspci.sch/RDEMPTY)
+ (add_net /buspci.sch/RDFIFO-)
+ (add_net /buspci.sch/SELECT-)
+ (add_net /buspci.sch/WR-)
+ (add_net /buspci.sch/WRFIFO-)
+ (add_net /buspci.sch/WRFULL)
+ (add_net /buspci.sch/X_IRQ)
+ (add_net /graphic/14MHZOUT)
+ (add_net /graphic/ACCES_RAM-)
+ (add_net /graphic/ACQ_ON)
+ (add_net /graphic/BT812_RD-)
+ (add_net /graphic/BT812_WR-)
+ (add_net /graphic/CADCLK)
+ (add_net /graphic/CCLK)
+ (add_net /graphic/CDACLK)
+ (add_net /graphic/CLK10MHz)
+ (add_net /graphic/CSIO-)
+ (add_net /graphic/CSYNC-OUT)
+ (add_net /graphic/DIN)
+ (add_net /graphic/DONE)
+ (add_net /graphic/F_PALIN)
+ (add_net /graphic/HDOUT)
+ (add_net /graphic/HDREFOUT)
+ (add_net /graphic/HD_PAL-)
+ (add_net /graphic/IA0)
+ (add_net /graphic/IA1)
+ (add_net /graphic/IA2)
+ (add_net /graphic/IA3)
+ (add_net /graphic/IA4)
+ (add_net /graphic/IA5)
+ (add_net /graphic/IA6)
+ (add_net /graphic/IA7)
+ (add_net /graphic/IA8)
+ (add_net /graphic/IA9)
+ (add_net /graphic/ICAS-)
+ (add_net /graphic/ID0)
+ (add_net /graphic/ID1)
+ (add_net /graphic/ID2)
+ (add_net /graphic/ID3)
+ (add_net /graphic/IOE-)
+ (add_net /graphic/IRAS-)
+ (add_net /graphic/IRQ_SLR)
+ (add_net /graphic/IWR-)
+ (add_net /graphic/LED)
+ (add_net /graphic/PROG*)
+ (add_net /graphic/RESERV1)
+ (add_net /graphic/VD_PAL-)
+ (add_net /graphic/VOSC)
+ (add_net /graphic/XTAL_I)
+ (add_net /graphic/X_CLK)
+ (add_net /graphic/X_DIN)
+ (add_net /graphic/X_DONE)
+ (add_net /graphic/X_PROG-)
+ (add_net /modul/BLEU)
+ (add_net /modul/CHROM)
+ (add_net /modul/COUT)
+ (add_net /modul/CVBS)
+ (add_net /modul/CVBSOUT)
+ (add_net /modul/LUM)
+ (add_net /modul/YOUT)
+ (add_net /muxdata/DATA_WR)
+ (add_net /muxdata/DPC10)
+ (add_net /muxdata/DPC11)
+ (add_net /muxdata/DPC12)
+ (add_net /muxdata/DPC13)
+ (add_net /muxdata/DPC14)
+ (add_net /muxdata/DPC15)
+ (add_net /muxdata/DPC16)
+ (add_net /muxdata/DPC17)
+ (add_net /muxdata/DPC18)
+ (add_net /muxdata/DPC19)
+ (add_net /muxdata/DPC20)
+ (add_net /muxdata/DPC21)
+ (add_net /muxdata/DPC22)
+ (add_net /muxdata/DPC23)
+ (add_net /muxdata/DPC24)
+ (add_net /muxdata/DPC25)
+ (add_net /muxdata/DPC26)
+ (add_net /muxdata/DPC27)
+ (add_net /muxdata/DPC28)
+ (add_net /muxdata/DPC29)
+ (add_net /muxdata/DPC30)
+ (add_net /muxdata/DPC31)
+ (add_net /muxdata/DPC8)
+ (add_net /muxdata/DPC9)
+ (add_net /muxdata/X_DIN)
+ (add_net /pal-ntsc.sch/C-VIDEO)
+ (add_net /pal-ntsc.sch/RESET-)
+ (add_net /pal-ntsc.sch/VAF)
+ (add_net /pal-ntsc.sch/Y-VIDEO)
+ (add_net /pal-ntsc.sch/Y_SYNC)
+ (add_net GND)
+ (add_net "Net-(BUS1-PadA1)")
+ (add_net "Net-(BUS1-PadA11)")
+ (add_net "Net-(BUS1-PadA14)")
+ (add_net "Net-(BUS1-PadA19)")
+ (add_net "Net-(BUS1-PadA3)")
+ (add_net "Net-(BUS1-PadA4)")
+ (add_net "Net-(BUS1-PadA40)")
+ (add_net "Net-(BUS1-PadA41)")
+ (add_net "Net-(BUS1-PadA60)")
+ (add_net "Net-(BUS1-PadA7)")
+ (add_net "Net-(BUS1-PadA9)")
+ (add_net "Net-(BUS1-PadB1)")
+ (add_net "Net-(BUS1-PadB10)")
+ (add_net "Net-(BUS1-PadB11)")
+ (add_net "Net-(BUS1-PadB14)")
+ (add_net "Net-(BUS1-PadB2)")
+ (add_net "Net-(BUS1-PadB60)")
+ (add_net "Net-(BUS1-PadB7)")
+ (add_net "Net-(BUS1-PadB8)")
+ (add_net "Net-(BUS1-PadB9)")
+ (add_net "Net-(C1-Pad1)")
+ (add_net "Net-(C1-Pad2)")
+ (add_net "Net-(C16-Pad1)")
+ (add_net "Net-(C3-Pad1)")
+ (add_net "Net-(C32-Pad2)")
+ (add_net "Net-(C34-Pad2)")
+ (add_net "Net-(C35-Pad2)")
+ (add_net "Net-(C36-Pad1)")
+ (add_net "Net-(C36-Pad2)")
+ (add_net "Net-(C39-Pad1)")
+ (add_net "Net-(C39-Pad2)")
+ (add_net "Net-(C4-Pad1)")
+ (add_net "Net-(C40-Pad1)")
+ (add_net "Net-(C40-Pad2)")
+ (add_net "Net-(C41-Pad1)")
+ (add_net "Net-(C41-Pad2)")
+ (add_net "Net-(C43-Pad1)")
+ (add_net "Net-(C44-Pad1)")
+ (add_net "Net-(C45-Pad1)")
+ (add_net "Net-(C46-Pad1)")
+ (add_net "Net-(C48-Pad2)")
+ (add_net "Net-(C49-Pad1)")
+ (add_net "Net-(C5-Pad1)")
+ (add_net "Net-(C5-Pad2)")
+ (add_net "Net-(C54-Pad1)")
+ (add_net "Net-(C58-Pad1)")
+ (add_net "Net-(C59-Pad1)")
+ (add_net "Net-(C6-Pad1)")
+ (add_net "Net-(C60-Pad1)")
+ (add_net "Net-(C61-Pad1)")
+ (add_net "Net-(C61-Pad2)")
+ (add_net "Net-(C65-Pad2)")
+ (add_net "Net-(C66-Pad2)")
+ (add_net "Net-(C7-Pad1)")
+ (add_net "Net-(C8-Pad1)")
+ (add_net "Net-(C8-Pad2)")
+ (add_net "Net-(CV1-Pad1)")
+ (add_net "Net-(D6-Pad1)")
+ (add_net "Net-(L1-Pad1)")
+ (add_net "Net-(L6-Pad1)")
+ (add_net "Net-(L6-Pad2)")
+ (add_net "Net-(P10-Pad1)")
+ (add_net "Net-(P11-Pad1)")
+ (add_net "Net-(P4-Pad1)")
+ (add_net "Net-(P9-Pad1)")
+ (add_net "Net-(POT1-Pad1)")
+ (add_net "Net-(Q1-Pad1)")
+ (add_net "Net-(Q1-Pad2)")
+ (add_net "Net-(Q2-Pad1)")
+ (add_net "Net-(Q2-Pad2)")
+ (add_net "Net-(Q3-Pad1)")
+ (add_net "Net-(Q3-Pad2)")
+ (add_net "Net-(R10-Pad2)")
+ (add_net "Net-(R19-Pad2)")
+ (add_net "Net-(R27-Pad1)")
+ (add_net "Net-(R28-Pad2)")
+ (add_net "Net-(R29-Pad2)")
+ (add_net "Net-(R36-Pad2)")
+ (add_net "Net-(R38-Pad1)")
+ (add_net "Net-(R4-Pad1)")
+ (add_net "Net-(R5-Pad1)")
+ (add_net "Net-(R6-Pad1)")
+ (add_net "Net-(R7-Pad1)")
+ (add_net "Net-(R9-Pad2)")
+ (add_net "Net-(U20-Pad23)")
+ (add_net "Net-(U8-Pad58)")
+ (add_net "Net-(U8-Pad60)")
+ (add_net "Net-(U8-Pad62)")
+ (add_net VCC)
+ )
+
+ (net_class pwr ""
+ (clearance 0.2286)
+ (trace_width 0.2286)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net +12V)
+ (add_net +3.3V)
+ (add_net +5F)
+ )
+
+ (module connect:BUSPCI locked (layer Composant) (tedit 54017FA7) (tstamp 269C6109)
+ (at 158.115 158.75)
+ (descr "Connecteur Bus PCI")
+ (tags "PCI CONN")
+ (path /4BF03687/269C6109)
+ (fp_text reference BUS1 (at -35.941 -4.699) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BUSPCI_5V (at -5.842 -4.699) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -63.754 -3.81) (end -63.754 4.445) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -63.754 4.445) (end -0.889 4.445) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -0.889 4.445) (end -0.889 -3.81) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -0.889 -3.81) (end 0.889 -3.81) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 0.889 -3.81) (end 0.889 4.445) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 0.889 4.445) (end 15.494 4.445) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 15.494 4.445) (end 15.494 -3.81) (layer F.SilkS) (width 0.2032))
+ (pad B1 connect rect (at -62.865 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 244 "Net-(BUS1-PadB1)"))
+ (pad B2 connect rect (at -61.595 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 245 "Net-(BUS1-PadB2)"))
+ (pad B3 connect rect (at -60.325 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B4 connect rect (at -59.055 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 246 "Net-(BUS1-PadA4)"))
+ (pad B5 connect rect (at -57.785 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B6 connect rect (at -56.515 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B7 connect rect (at -55.245 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 248 "Net-(BUS1-PadB7)"))
+ (pad B8 connect rect (at -53.975 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 249 "Net-(BUS1-PadB8)"))
+ (pad B9 connect rect (at -52.705 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 250 "Net-(BUS1-PadB9)"))
+ (pad B10 connect rect (at -51.435 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 251 "Net-(BUS1-PadB10)"))
+ (pad B11 connect rect (at -50.165 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 252 "Net-(BUS1-PadB11)"))
+ (pad B12 connect rect (at -48.895 -0.254) (size 1.016 4.572) (layers Composant F.Mask))
+ (pad B13 connect rect (at -47.625 -0.254) (size 1.016 4.572) (layers Composant F.Mask))
+ (pad B14 connect rect (at -46.355 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 253 "Net-(BUS1-PadB14)"))
+ (pad B15 connect rect (at -45.085 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B16 connect rect (at -43.815 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 147 /buspci.sch/P_CLK))
+ (pad B17 connect rect (at -42.545 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B18 connect rect (at -41.275 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 157 /buspci.sch/P_REQ#))
+ (pad B19 connect rect (at -40.005 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B20 connect rect (at -38.735 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 136 /buspci.sch/P_AD31))
+ (pad B21 connect rect (at -37.465 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 133 /buspci.sch/P_AD29))
+ (pad B22 connect rect (at -36.195 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B23 connect rect (at -34.925 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 131 /buspci.sch/P_AD27))
+ (pad B24 connect rect (at -33.655 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 129 /buspci.sch/P_AD25))
+ (pad B25 connect rect (at -32.385 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B26 connect rect (at -31.115 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 146 /buspci.sch/P_C/BE3#))
+ (pad B27 connect rect (at -29.845 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 127 /buspci.sch/P_AD23))
+ (pad B28 connect rect (at -28.575 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B29 connect rect (at -27.305 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 125 /buspci.sch/P_AD21))
+ (pad B30 connect rect (at -26.035 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 122 /buspci.sch/P_AD19))
+ (pad B31 connect rect (at -24.765 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B32 connect rect (at -23.495 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 120 /buspci.sch/P_AD17))
+ (pad B33 connect rect (at -22.225 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 145 /buspci.sch/P_C/BE2#))
+ (pad B34 connect rect (at -20.955 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B35 connect rect (at -19.685 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 153 /buspci.sch/P_IRDY#))
+ (pad B36 connect rect (at -18.415 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B37 connect rect (at -17.145 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 148 /buspci.sch/P_DEVSEL#))
+ (pad B38 connect rect (at -15.875 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B39 connect rect (at -14.605 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 154 /buspci.sch/P_LOCK#))
+ (pad B40 connect rect (at -13.335 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 156 /buspci.sch/P_PERR#))
+ (pad B41 connect rect (at -12.065 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B42 connect rect (at -10.795 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 159 /buspci.sch/P_SERR#))
+ (pad B43 connect rect (at -9.525 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B44 connect rect (at -8.255 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 144 /buspci.sch/P_C/BE1#))
+ (pad B45 connect rect (at -6.985 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 117 /buspci.sch/P_AD14))
+ (pad B46 connect rect (at -5.715 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B47 connect rect (at -4.445 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 115 /buspci.sch/P_AD12))
+ (pad B48 connect rect (at -3.175 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 113 /buspci.sch/P_AD10))
+ (pad B49 connect rect (at -1.905 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B52 connect rect (at 1.905 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 141 /buspci.sch/P_AD8))
+ (pad B53 connect rect (at 3.175 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 140 /buspci.sch/P_AD7))
+ (pad B54 connect rect (at 4.445 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B55 connect rect (at 5.715 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 138 /buspci.sch/P_AD5))
+ (pad B56 connect rect (at 6.985 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 134 /buspci.sch/P_AD3))
+ (pad B57 connect rect (at 8.255 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B58 connect rect (at 9.525 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 112 /buspci.sch/P_AD1))
+ (pad B59 connect rect (at 10.795 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B60 connect rect (at 12.065 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 254 "Net-(BUS1-PadB60)"))
+ (pad B61 connect rect (at 13.335 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B62 connect rect (at 14.605 -0.254) (size 1.016 4.572) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad A1 connect rect (at -62.865 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 255 "Net-(BUS1-PadA1)"))
+ (pad A2 connect rect (at -61.595 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 1 +12V))
+ (pad A3 connect rect (at -60.325 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 256 "Net-(BUS1-PadA3)"))
+ (pad A4 connect rect (at -59.055 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 246 "Net-(BUS1-PadA4)"))
+ (pad A5 connect rect (at -57.785 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A6 connect rect (at -56.515 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 152 /buspci.sch/P_INTA#))
+ (pad A7 connect rect (at -55.245 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 257 "Net-(BUS1-PadA7)"))
+ (pad A8 connect rect (at -53.975 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A9 connect rect (at -52.705 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 258 "Net-(BUS1-PadA9)"))
+ (pad A10 connect rect (at -51.435 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A11 connect rect (at -50.165 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 259 "Net-(BUS1-PadA11)"))
+ (pad A12 connect rect (at -48.895 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask))
+ (pad A13 connect rect (at -47.625 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask))
+ (pad A14 connect rect (at -46.355 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 260 "Net-(BUS1-PadA14)"))
+ (pad A15 connect rect (at -45.085 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 158 /buspci.sch/P_RST#))
+ (pad A16 connect rect (at -43.815 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A17 connect rect (at -42.545 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 150 /buspci.sch/P_GNT#))
+ (pad A18 connect rect (at -41.275 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A19 connect rect (at -40.005 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 261 "Net-(BUS1-PadA19)"))
+ (pad A20 connect rect (at -38.735 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 135 /buspci.sch/P_AD30))
+ (pad A21 connect rect (at -37.465 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A22 connect rect (at -36.195 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 132 /buspci.sch/P_AD28))
+ (pad A23 connect rect (at -34.925 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 130 /buspci.sch/P_AD26))
+ (pad A24 connect rect (at -33.655 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A25 connect rect (at -32.385 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 128 /buspci.sch/P_AD24))
+ (pad A26 connect rect (at -31.115 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 151 /buspci.sch/P_IDSEL))
+ (pad A27 connect rect (at -29.845 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A28 connect rect (at -28.575 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 126 /buspci.sch/P_AD22))
+ (pad A29 connect rect (at -27.305 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 124 /buspci.sch/P_AD20))
+ (pad A30 connect rect (at -26.035 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A31 connect rect (at -24.765 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 121 /buspci.sch/P_AD18))
+ (pad A32 connect rect (at -23.495 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 119 /buspci.sch/P_AD16))
+ (pad A33 connect rect (at -22.225 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A34 connect rect (at -20.955 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 149 /buspci.sch/P_FRAME#))
+ (pad A35 connect rect (at -19.685 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A36 connect rect (at -18.415 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 161 /buspci.sch/P_TRDY#))
+ (pad A37 connect rect (at -17.145 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A38 connect rect (at -15.875 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 160 /buspci.sch/P_STOP#))
+ (pad A39 connect rect (at -14.605 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A40 connect rect (at -13.335 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 262 "Net-(BUS1-PadA40)"))
+ (pad A41 connect rect (at -12.065 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 263 "Net-(BUS1-PadA41)"))
+ (pad A42 connect rect (at -10.795 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A43 connect rect (at -9.525 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 155 /buspci.sch/P_PAR))
+ (pad A44 connect rect (at -8.255 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 118 /buspci.sch/P_AD15))
+ (pad A45 connect rect (at -6.985 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A46 connect rect (at -5.715 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 116 /buspci.sch/P_AD13))
+ (pad A47 connect rect (at -4.445 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 114 /buspci.sch/P_AD11))
+ (pad A48 connect rect (at -3.175 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A49 connect rect (at -1.905 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 142 /buspci.sch/P_AD9))
+ (pad A52 connect rect (at 1.905 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 143 /buspci.sch/P_C/BE0#))
+ (pad A53 connect rect (at 3.175 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A54 connect rect (at 4.445 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 139 /buspci.sch/P_AD6))
+ (pad A55 connect rect (at 5.715 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 137 /buspci.sch/P_AD4))
+ (pad A56 connect rect (at 6.985 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A57 connect rect (at 8.255 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 123 /buspci.sch/P_AD2))
+ (pad A58 connect rect (at 9.525 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 111 /buspci.sch/P_AD0))
+ (pad A59 connect rect (at 10.795 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A60 connect rect (at 12.065 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 264 "Net-(BUS1-PadA60)"))
+ (pad A61 connect rect (at 13.335 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A62 connect rect (at 14.605 -0.254) (size 1.016 4.572) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad B2 connect rect (at -61.595 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 245 "Net-(BUS1-PadB2)"))
+ (pad B3 connect rect (at -60.325 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B4 connect rect (at -59.055 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 246 "Net-(BUS1-PadA4)"))
+ (pad B5 connect rect (at -57.785 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B6 connect rect (at -56.515 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B7 connect rect (at -55.245 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 248 "Net-(BUS1-PadB7)"))
+ (pad B8 connect rect (at -53.975 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 249 "Net-(BUS1-PadB8)"))
+ (pad B9 connect rect (at -52.705 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 250 "Net-(BUS1-PadB9)"))
+ (pad B10 connect rect (at -51.435 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 251 "Net-(BUS1-PadB10)"))
+ (pad B11 connect rect (at -50.165 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 252 "Net-(BUS1-PadB11)"))
+ (pad B12 connect rect (at -48.895 2.413) (size 0.508 0.762) (layers Composant F.Mask))
+ (pad B13 connect rect (at -47.625 2.413) (size 0.508 0.762) (layers Composant F.Mask))
+ (pad B14 connect rect (at -46.355 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 253 "Net-(BUS1-PadB14)"))
+ (pad B15 connect rect (at -45.085 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B16 connect rect (at -43.815 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 147 /buspci.sch/P_CLK))
+ (pad B17 connect rect (at -42.545 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B18 connect rect (at -41.275 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 157 /buspci.sch/P_REQ#))
+ (pad B19 connect rect (at -40.005 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B20 connect rect (at -38.735 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 136 /buspci.sch/P_AD31))
+ (pad B21 connect rect (at -37.465 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 133 /buspci.sch/P_AD29))
+ (pad B22 connect rect (at -36.195 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B23 connect rect (at -34.925 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 131 /buspci.sch/P_AD27))
+ (pad B24 connect rect (at -33.655 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 129 /buspci.sch/P_AD25))
+ (pad B25 connect rect (at -32.385 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B26 connect rect (at -31.115 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 146 /buspci.sch/P_C/BE3#))
+ (pad B27 connect rect (at -29.845 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 127 /buspci.sch/P_AD23))
+ (pad B28 connect rect (at -28.575 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B29 connect rect (at -27.305 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 125 /buspci.sch/P_AD21))
+ (pad B30 connect rect (at -26.035 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 122 /buspci.sch/P_AD19))
+ (pad B31 connect rect (at -24.765 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B32 connect rect (at -23.495 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 120 /buspci.sch/P_AD17))
+ (pad B33 connect rect (at -22.225 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 145 /buspci.sch/P_C/BE2#))
+ (pad B34 connect rect (at -20.955 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B35 connect rect (at -19.685 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 153 /buspci.sch/P_IRDY#))
+ (pad B36 connect rect (at -18.415 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B37 connect rect (at -17.145 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 148 /buspci.sch/P_DEVSEL#))
+ (pad B38 connect rect (at -15.875 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B39 connect rect (at -14.605 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 154 /buspci.sch/P_LOCK#))
+ (pad B40 connect rect (at -13.335 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 156 /buspci.sch/P_PERR#))
+ (pad B41 connect rect (at -12.065 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B42 connect rect (at -10.795 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 159 /buspci.sch/P_SERR#))
+ (pad B43 connect rect (at -9.525 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B44 connect rect (at -8.255 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 144 /buspci.sch/P_C/BE1#))
+ (pad B45 connect rect (at -6.985 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 117 /buspci.sch/P_AD14))
+ (pad B46 connect rect (at -5.715 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B47 connect rect (at -4.445 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 115 /buspci.sch/P_AD12))
+ (pad B48 connect rect (at -3.175 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 113 /buspci.sch/P_AD10))
+ (pad B49 connect rect (at -1.905 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B52 connect rect (at 1.905 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 141 /buspci.sch/P_AD8))
+ (pad B53 connect rect (at 3.175 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 140 /buspci.sch/P_AD7))
+ (pad B54 connect rect (at 4.445 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 2 +3.3V))
+ (pad B55 connect rect (at 5.715 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 138 /buspci.sch/P_AD5))
+ (pad B56 connect rect (at 6.985 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 134 /buspci.sch/P_AD3))
+ (pad B57 connect rect (at 8.255 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 243 GND))
+ (pad B58 connect rect (at 9.525 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 112 /buspci.sch/P_AD1))
+ (pad B59 connect rect (at 10.795 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B60 connect rect (at 12.065 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 254 "Net-(BUS1-PadB60)"))
+ (pad B61 connect rect (at 13.335 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B62 connect rect (at 14.605 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 247 VCC))
+ (pad B1 connect rect (at -62.865 2.413) (size 0.508 0.762) (layers Composant F.Mask)
+ (net 244 "Net-(BUS1-PadB1)"))
+ (pad A1 connect rect (at -62.865 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 255 "Net-(BUS1-PadA1)"))
+ (pad A2 connect rect (at -61.595 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 1 +12V))
+ (pad A3 connect rect (at -60.325 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 256 "Net-(BUS1-PadA3)"))
+ (pad A4 connect rect (at -59.055 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 246 "Net-(BUS1-PadA4)"))
+ (pad A5 connect rect (at -57.785 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A6 connect rect (at -56.515 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 152 /buspci.sch/P_INTA#))
+ (pad A7 connect rect (at -55.245 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 257 "Net-(BUS1-PadA7)"))
+ (pad A8 connect rect (at -53.975 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A9 connect rect (at -52.705 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 258 "Net-(BUS1-PadA9)"))
+ (pad A10 connect rect (at -51.435 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A11 connect rect (at -50.165 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 259 "Net-(BUS1-PadA11)"))
+ (pad A12 connect rect (at -48.895 2.413) (size 0.508 0.762) (layers Cuivre B.Mask))
+ (pad A13 connect rect (at -47.625 2.413) (size 0.508 0.762) (layers Cuivre B.Mask))
+ (pad A14 connect rect (at -46.355 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 260 "Net-(BUS1-PadA14)"))
+ (pad A15 connect rect (at -45.085 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 158 /buspci.sch/P_RST#))
+ (pad A16 connect rect (at -43.815 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A17 connect rect (at -42.545 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 150 /buspci.sch/P_GNT#))
+ (pad A18 connect rect (at -41.275 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A19 connect rect (at -40.005 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 261 "Net-(BUS1-PadA19)"))
+ (pad A20 connect rect (at -38.735 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 135 /buspci.sch/P_AD30))
+ (pad A21 connect rect (at -37.465 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A22 connect rect (at -36.195 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 132 /buspci.sch/P_AD28))
+ (pad A23 connect rect (at -34.925 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 130 /buspci.sch/P_AD26))
+ (pad A24 connect rect (at -33.655 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A25 connect rect (at -32.385 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 128 /buspci.sch/P_AD24))
+ (pad A26 connect rect (at -31.115 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 151 /buspci.sch/P_IDSEL))
+ (pad A27 connect rect (at -29.845 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A28 connect rect (at -28.575 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 126 /buspci.sch/P_AD22))
+ (pad A29 connect rect (at -27.305 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 124 /buspci.sch/P_AD20))
+ (pad A30 connect rect (at -26.035 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A31 connect rect (at -24.765 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 121 /buspci.sch/P_AD18))
+ (pad A32 connect rect (at -23.495 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 119 /buspci.sch/P_AD16))
+ (pad A33 connect rect (at -22.225 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A34 connect rect (at -20.955 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 149 /buspci.sch/P_FRAME#))
+ (pad A35 connect rect (at -19.685 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A36 connect rect (at -18.415 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 161 /buspci.sch/P_TRDY#))
+ (pad A37 connect rect (at -17.145 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A38 connect rect (at -15.875 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 160 /buspci.sch/P_STOP#))
+ (pad A39 connect rect (at -14.605 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A40 connect rect (at -13.335 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 262 "Net-(BUS1-PadA40)"))
+ (pad A41 connect rect (at -12.065 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 263 "Net-(BUS1-PadA41)"))
+ (pad A42 connect rect (at -10.795 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A43 connect rect (at -9.525 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 155 /buspci.sch/P_PAR))
+ (pad A44 connect rect (at -8.255 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 118 /buspci.sch/P_AD15))
+ (pad A45 connect rect (at -6.985 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A46 connect rect (at -5.715 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 116 /buspci.sch/P_AD13))
+ (pad A47 connect rect (at -4.445 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 114 /buspci.sch/P_AD11))
+ (pad A48 connect rect (at -3.175 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A49 connect rect (at -1.905 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 142 /buspci.sch/P_AD9))
+ (pad A52 connect rect (at 1.905 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 143 /buspci.sch/P_C/BE0#))
+ (pad A53 connect rect (at 3.175 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 2 +3.3V))
+ (pad A54 connect rect (at 4.445 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 139 /buspci.sch/P_AD6))
+ (pad A55 connect rect (at 5.715 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 137 /buspci.sch/P_AD4))
+ (pad A56 connect rect (at 6.985 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 243 GND))
+ (pad A57 connect rect (at 8.255 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 123 /buspci.sch/P_AD2))
+ (pad A58 connect rect (at 9.525 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 111 /buspci.sch/P_AD0))
+ (pad A59 connect rect (at 10.795 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A60 connect rect (at 12.065 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 264 "Net-(BUS1-PadA60)"))
+ (pad A61 connect rect (at 13.335 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ (pad A62 connect rect (at 14.605 2.413) (size 0.508 0.762) (layers Cuivre B.Mask)
+ (net 247 VCC))
+ )
+
+ (module connect:DB9FC (layer Composant) (tedit 54019107) (tstamp 7FFFFFFF)
+ (at 69.215 138.684 90)
+ (descr "Connecteur DB9 femelle couche")
+ (tags "CONN DB9")
+ (path /84DFBB8F)
+ (fp_text reference J4 (at 1.27 -10.16 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value DB9FEM (at 1.27 -3.81 90) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 12.827 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -12.573 -1.27 90) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at -5.461 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 205 /modul/BLEU))
+ (pad 2 thru_hole circle (at -2.667 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /ESVIDEO-RVB/GREEN))
+ (pad 3 thru_hole circle (at 0 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /ESVIDEO-RVB/BLUE))
+ (pad 4 thru_hole circle (at 2.794 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 5 thru_hole circle (at 5.588 1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 6 thru_hole circle (at -4.064 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 7 thru_hole circle (at -1.27 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 8 thru_hole circle (at 1.397 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 207 /modul/COUT))
+ (pad 9 thru_hole circle (at 4.191 -1.27 90) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 211 /modul/YOUT))
+ (model Connect.3dshapes/DB9FC.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CAA6)
+ (at 358.521 58.293)
+ (path /4BF03681/821CDAC2)
+ (attr smd)
+ (fp_text reference C1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 100nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 265 "Net-(C1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 266 "Net-(C1-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CAB1)
+ (at 345.567 67.437 90)
+ (path /4BF03681/A9CA7F6B)
+ (attr smd)
+ (fp_text reference C2 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CABC)
+ (at 358.14 73.787 270)
+ (path /4BF03681/A9CA7F75)
+ (attr smd)
+ (fp_text reference C3 (at 0 0 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 100nF (at 0 0 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 267 "Net-(C3-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 13 /ESVIDEO-RVB/GREEN_IN))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CAC7)
+ (at 355.981 78.105)
+ (path /4BF03681/A9CA7F7A)
+ (attr smd)
+ (fp_text reference C4 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 268 "Net-(C4-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 269 /ESVIDEO-RVB/RED_IN))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CAD2)
+ (at 346.202 97.282 270)
+ (path /4BF03681/A9CA7FAC)
+ (attr smd)
+ (fp_text reference C5 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 270 "Net-(C5-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 271 "Net-(C5-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CADD)
+ (at 345.567 73.279 90)
+ (path /4BF03681/A9CA7FB1)
+ (attr smd)
+ (fp_text reference C6 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 272 "Net-(C6-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CAE8)
+ (at 338.201 87.757 180)
+ (path /4BF03681/A9CA7FB6)
+ (attr smd)
+ (fp_text reference C7 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 273 "Net-(C7-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CAF3)
+ (at 349.123 58.039 180)
+ (path /4BF03681/B176B9C8)
+ (attr smd)
+ (fp_text reference C8 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 274 "Net-(C8-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 275 "Net-(C8-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CAFE)
+ (at 333.883 64.897)
+ (path /4BF03681/BF69A15D)
+ (attr smd)
+ (fp_text reference C9 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB09)
+ (at 344.297 87.757)
+ (path /4BF03681/BF69A162)
+ (attr smd)
+ (fp_text reference C10 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB14)
+ (at 319.278 69.977 90)
+ (path /4BF03681/BF69A167)
+ (attr smd)
+ (fp_text reference C11 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB1F)
+ (at 345.567 80.391 90)
+ (path /4BF03681/BF69A171)
+ (attr smd)
+ (fp_text reference C12 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB2A)
+ (at 326.009 64.643)
+ (path /4BF03681/BF69A176)
+ (attr smd)
+ (fp_text reference C13 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB35)
+ (at 324.231 81.915 90)
+ (path /4BF03681/BF69A17B)
+ (attr smd)
+ (fp_text reference C14 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB40)
+ (at 325.755 87.249)
+ (path /4BF03681/0939A342)
+ (attr smd)
+ (fp_text reference C15 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB4B)
+ (at 338.201 84.709 180)
+ (path /4BF03681/0F47DCB8)
+ (attr smd)
+ (fp_text reference C16 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 276 "Net-(C16-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB56)
+ (at 155.194 85.344 90)
+ (path /4BF03683/BF805547)
+ (attr smd)
+ (fp_text reference C17 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB61)
+ (at 157.48 74.295 270)
+ (path /4BF03683/BF80554C)
+ (attr smd)
+ (fp_text reference C18 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB6C)
+ (at 140.97 73.66 180)
+ (path /4BF03683/BF805551)
+ (attr smd)
+ (fp_text reference C19 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB77)
+ (at 130.81 73.025)
+ (path /4BF03683/BF805556)
+ (attr smd)
+ (fp_text reference C20 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB82)
+ (at 124.714 90.805)
+ (path /4BF03683/268A4E83)
+ (attr smd)
+ (fp_text reference C21 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB8D)
+ (at 127 104.14)
+ (path /4BF03683/268A4E88)
+ (attr smd)
+ (fp_text reference C22 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CB98)
+ (at 130.175 61.595)
+ (path /4BF03683/33A7DC91)
+ (attr smd)
+ (fp_text reference C23 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 200 /graphic/VOSC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBA3)
+ (at 138.049 116.84)
+ (path /4BF03687/26B211D9)
+ (attr smd)
+ (fp_text reference C24 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBAE)
+ (at 146.431 114.935 180)
+ (path /4BF03687/26B211E3)
+ (attr smd)
+ (fp_text reference C25 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBB9)
+ (at 150.622 122.936 180)
+ (path /4BF03687/26B211ED)
+ (attr smd)
+ (fp_text reference C26 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBC4)
+ (at 132.334 123.19)
+ (path /4BF03687/26B211F7)
+ (attr smd)
+ (fp_text reference C27 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBCF)
+ (at 150.241 135.89 180)
+ (path /4BF03687/26B21201)
+ (attr smd)
+ (fp_text reference C28 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBDA)
+ (at 147.066 139.7 180)
+ (path /4BF03687/26B2120B)
+ (attr smd)
+ (fp_text reference C29 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBE5)
+ (at 136.779 139.7)
+ (path /4BF03687/26B21215)
+ (attr smd)
+ (fp_text reference C30 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBF0)
+ (at 132.334 136.525)
+ (path /4BF03687/26B2121F)
+ (attr smd)
+ (fp_text reference C31 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CBFB)
+ (at 357.759 127.635 180)
+ (path /4BF03689/335F5DF2)
+ (attr smd)
+ (fp_text reference C32 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 277 "Net-(C32-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC06)
+ (at 345.313 111.76)
+ (path /4BF03689/84DFBA31)
+ (attr smd)
+ (fp_text reference C33 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC11)
+ (at 343.789 117.602)
+ (path /4BF03689/84DFBA36)
+ (attr smd)
+ (fp_text reference C34 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 278 "Net-(C34-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC1C)
+ (at 353.949 131.699)
+ (path /4BF03689/84DFBB21)
+ (attr smd)
+ (fp_text reference C35 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 279 "Net-(C35-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC27)
+ (at 313.944 120.015 270)
+ (path /4BF03689/A44D9848)
+ (attr smd)
+ (fp_text reference C36 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 280 "Net-(C36-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 281 "Net-(C36-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC32)
+ (at 319.151 120.015 270)
+ (path /4BF03689/A44D984D)
+ (attr smd)
+ (fp_text reference C37 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100pF (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 281 "Net-(C36-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812L (layer Cuivre) (tedit 54019107) (tstamp 5402CC3D)
+ (at 149.225 132.08 180)
+ (tags "CMS SM")
+ (path /4BF03687/2820F08A)
+ (attr smd)
+ (fp_text reference C38 (at -0.62992 0 450) (layer B.SilkS)
+ (effects (font (size 0.889 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0.635 0 450) (layer B.SilkS)
+ (effects (font (size 0.889 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_circle (center -3.81 -2.032) (end -3.683 -1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.397 -1.905) (end 3.683 -1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start 3.683 -1.905) (end 3.683 1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start 3.683 1.905) (end 1.397 1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start -1.397 1.905) (end -3.683 1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start -3.683 1.905) (end -3.683 -1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start -3.683 -1.905) (end -1.397 -1.905) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.54 0 180) (size 2.032 3.556) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 2.54 0 180) (size 2.032 3.556) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.27 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Composant) (tedit 54019107) (tstamp 5402CC49)
+ (at 333.248 131.699)
+ (tags "CMS SM")
+ (path /4BF03689/A44C037F)
+ (attr smd)
+ (fp_text reference C39 (at 0.127 -0.762) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_text value 1uF (at 0 0.762) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_line (start -2.794 -1.524) (end -2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.524) (end 2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 0.889 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.762 -1.524) (end -2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.594 -1.524) (end -2.594 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.524) (end -0.762 1.524) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 282 "Net-(C39-Pad1)"))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 283 "Net-(C39-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Composant) (tedit 54019107) (tstamp 5402CC55)
+ (at 307.086 131.699)
+ (tags "CMS SM")
+ (path /4BF03689/A44C0384)
+ (attr smd)
+ (fp_text reference C40 (at 0.127 -0.762) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_text value 1uF (at 0 0.762) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_line (start -2.794 -1.524) (end -2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.524) (end 2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 0.889 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.762 -1.524) (end -2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.594 -1.524) (end -2.594 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.524) (end -0.762 1.524) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 284 "Net-(C40-Pad1)"))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 285 "Net-(C40-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Composant) (tedit 54019107) (tstamp 5402CC61)
+ (at 300.355 131.572 180)
+ (tags "CMS SM")
+ (path /4BF03689/A44C0389)
+ (attr smd)
+ (fp_text reference C41 (at 0.127 -0.762 180) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_text value 1uF (at 0 0.762 180) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_line (start -2.794 -1.524) (end -2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.524) (end 2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 0.889 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.762 -1.524) (end -2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.594 -1.524) (end -2.594 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.524) (end -0.762 1.524) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0 180) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 286 "Net-(C41-Pad1)"))
+ (pad 2 smd rect (at 1.778 0 180) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 287 "Net-(C41-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Cuivre) (tedit 54019107) (tstamp 5402CC6D)
+ (at 343.916 120.396)
+ (tags "CMS SM")
+ (path /4BF03689/84DFBAEF)
+ (attr smd)
+ (fp_text reference C42 (at 0.127 0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 2,2uF (at 0 -0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.794 1.524) (end -2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.524) (end 2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 0.889 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.762 1.524) (end -2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.594 1.524) (end -2.594 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.524) (end -0.762 -1.524) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 278 "Net-(C34-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC79)
+ (at 79.121 88.011)
+ (path /4BF0367F/22760F8F)
+ (attr smd)
+ (fp_text reference C43 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 288 "Net-(C43-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC84)
+ (at 74.041 85.344 90)
+ (path /4BF0367F/22760F99)
+ (attr smd)
+ (fp_text reference C44 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 289 "Net-(C44-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC8F)
+ (at 79.121 85.471)
+ (path /4BF0367F/22760FD5)
+ (attr smd)
+ (fp_text reference C45 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 290 "Net-(C45-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CC9A)
+ (at 80.391 114.935)
+ (path /4BF0367F/22760FFD)
+ (attr smd)
+ (fp_text reference C46 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220pF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 291 "Net-(C46-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CCA5)
+ (at 358.521 60.833)
+ (path /4BF03681/821CDABD)
+ (attr smd)
+ (fp_text reference C47 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 220pF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 265 "Net-(C1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CCB0)
+ (at 79.121 82.931)
+ (path /4BF0367F/22760FCB)
+ (attr smd)
+ (fp_text reference C48 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 22nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 292 "Net-(C48-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1 (layer Composant) (tedit 54019107) (tstamp 5402CCBB)
+ (at 115.189 64.643 180)
+ (descr "Condensateur e = 1 pas")
+ (tags C)
+ (path /4BF03683/B3BF4EDE)
+ (fp_text reference C49 (at 0.254 -2.286 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 22pF (at 0 -2.286 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -2.4892 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 -0.635) (end -1.905 -1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -1.27 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 293 "Net-(C49-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Discret.3dshapes/C1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:C1 (layer Composant) (tedit 54019107) (tstamp 5402CCC5)
+ (at 108.839 64.643)
+ (descr "Condensateur e = 1 pas")
+ (tags C)
+ (path /4BF03683/B3BF4EE8)
+ (fp_text reference C50 (at 0.254 -2.286) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 22pF (at 0 -2.286) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -2.4892 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 -0.635) (end -1.905 -1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 201 /graphic/XTAL_I))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Discret.3dshapes/C1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Cuivre) (tedit 54019107) (tstamp 5402CCCF)
+ (at 345.44 108.585)
+ (tags "CMS SM")
+ (path /4BF03689/28ED6A43)
+ (attr smd)
+ (fp_text reference C51 (at 0.127 0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 22uF (at 0 -0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.794 1.524) (end -2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.524) (end 2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 0.889 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.762 1.524) (end -2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.594 1.524) (end -2.594 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.524) (end -0.762 -1.524) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CCDB)
+ (at 310.261 117.729)
+ (path /4BF03689/84DFB9B9)
+ (attr smd)
+ (fp_text reference C52 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 22uF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CCE6)
+ (at 80.391 111.887)
+ (path /4BF0367F/22760FF8)
+ (attr smd)
+ (fp_text reference C53 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 330pF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 291 "Net-(C46-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CCF1)
+ (at 78.613 66.04 270)
+ (path /4BF0367F/22760F76)
+ (attr smd)
+ (fp_text reference C54 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 294 "Net-(C54-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Cuivre) (tedit 54019107) (tstamp 5402CCFC)
+ (at 75.946 100.457 270)
+ (tags "CMS SM")
+ (path /4BF0367F/22761057)
+ (attr smd)
+ (fp_text reference C55 (at 0.127 0.762 270) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0 -0.762 270) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.794 1.524) (end -2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.524) (end 2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 0.889 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.762 1.524) (end -2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.594 1.524) (end -2.594 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.524) (end -0.762 -1.524) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0 270) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 3 +5F))
+ (pad 2 smd rect (at 1.778 0 270) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812L (layer Cuivre) (tedit 54019107) (tstamp 5402CD08)
+ (at 125.73 85.09)
+ (tags "CMS SM")
+ (path /4BF03683/B9ED7AB0)
+ (attr smd)
+ (fp_text reference C56 (at -0.62992 0 270) (layer B.SilkS)
+ (effects (font (size 0.889 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0.635 0 270) (layer B.SilkS)
+ (effects (font (size 0.889 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_circle (center -3.81 -2.032) (end -3.683 -1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.397 -1.905) (end 3.683 -1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start 3.683 -1.905) (end 3.683 1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start 3.683 1.905) (end 1.397 1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start -1.397 1.905) (end -3.683 1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start -3.683 1.905) (end -3.683 -1.905) (layer B.SilkS) (width 0.127))
+ (fp_line (start -3.683 -1.905) (end -1.397 -1.905) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.54 0) (size 2.032 3.556) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 2.54 0) (size 2.032 3.556) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.27 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Cuivre) (tedit 54019107) (tstamp 5402CD14)
+ (at 148.59 61.341)
+ (tags "CMS SM")
+ (path /4BF03683/B9ED7AB5)
+ (attr smd)
+ (fp_text reference C57 (at 0.127 0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0 -0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.794 1.524) (end -2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.524) (end 2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 0.889 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.762 1.524) (end -2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.594 1.524) (end -2.594 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.524) (end -0.762 -1.524) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CD20)
+ (at 82.169 92.71)
+ (path /4BF0367F/22760F53)
+ (attr smd)
+ (fp_text reference C58 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 47nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 295 "Net-(C58-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 205 /modul/BLEU))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CD2B)
+ (at 82.169 96.647)
+ (path /4BF0367F/22760F62)
+ (attr smd)
+ (fp_text reference C59 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 47nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 296 "Net-(C59-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 12 /ESVIDEO-RVB/GREEN))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CD36)
+ (at 82.423 100.965)
+ (path /4BF0367F/22760F67)
+ (attr smd)
+ (fp_text reference C60 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 47nF (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 297 "Net-(C60-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 4 /ESVIDEO-RVB/BLUE))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CD41)
+ (at 68.707 102.235 180)
+ (path /4BF0367F/22760F8A)
+ (attr smd)
+ (fp_text reference C61 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 47nF (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 298 "Net-(C61-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 299 "Net-(C61-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Cuivre) (tedit 54019107) (tstamp 5402CD4C)
+ (at 356.235 66.167)
+ (tags "CMS SM")
+ (path /4BF03681/811D9071)
+ (attr smd)
+ (fp_text reference C62 (at 0.127 0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 47uF (at 0 -0.762) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.794 1.524) (end -2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.524) (end 2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 0.889 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.762 1.524) (end -2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.594 1.524) (end -2.594 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.524) (end -0.762 -1.524) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Composant) (tedit 54019107) (tstamp 5402CD58)
+ (at 123.825 60.325)
+ (tags "CMS SM")
+ (path /4BF03683/228C4700)
+ (attr smd)
+ (fp_text reference C63 (at 0.127 -0.762) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_text value 47uF (at 0 0.762) (layer F.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)))
+ )
+ (fp_line (start -2.794 -1.524) (end -2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.524) (end 2.794 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 0.889 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.762 -1.524) (end -2.794 -1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.594 -1.524) (end -2.594 1.524) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.794 1.524) (end -0.762 1.524) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 200 /graphic/VOSC))
+ (pad 2 smd rect (at 1.778 0) (size 1.778 2.794) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1210L (layer Cuivre) (tedit 54019107) (tstamp 5402CD64)
+ (at 84.201 88.519 270)
+ (tags "CMS SM")
+ (path /4BF0367F/22760FC1)
+ (attr smd)
+ (fp_text reference C64 (at 0.127 0.762 270) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 6,8uF (at 0 -0.762 270) (layer B.SilkS)
+ (effects (font (size 0.7 0.7) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.794 1.524) (end -2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.524) (end 2.794 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 -1.524) (end 2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.794 1.524) (end 0.889 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.762 1.524) (end -2.794 1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.594 1.524) (end -2.594 -1.524) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.794 -1.524) (end -0.762 -1.524) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.778 0 270) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 292 "Net-(C48-Pad2)"))
+ (pad 2 smd rect (at 1.778 0 270) (size 1.778 2.794) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.2 0.2 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CD70)
+ (at 351.409 93.091)
+ (path /4BF03681/B15DA8C5)
+ (attr smd)
+ (fp_text reference C65 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 22pF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 300 "Net-(C65-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CD7B)
+ (at 351.409 95.885)
+ (path /4BF03681/B15DA8CA)
+ (attr smd)
+ (fp_text reference C66 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 22pF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 301 "Net-(C66-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CD86)
+ (at 99.441 149.733 180)
+ (path /4BF03687/33AFD420)
+ (attr smd)
+ (fp_text reference C67 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CD91)
+ (at 117.983 148.463 180)
+ (path /4BF03687/4BF036D8)
+ (attr smd)
+ (fp_text reference C68 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 2 +3.3V))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CD9C)
+ (at 151.638 148.463)
+ (path /4BF03687/33AFD43A)
+ (attr smd)
+ (fp_text reference C69 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 4,7uF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 2 +3.3V))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CDA7)
+ (at 97.536 85.09 90)
+ (path /4BF03683/33AFD8AF)
+ (attr smd)
+ (fp_text reference C70 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CDB2)
+ (at 106.426 83.185 180)
+ (path /4BF03683/33AFD8E9)
+ (attr smd)
+ (fp_text reference C71 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CDBD)
+ (at 110.236 90.805 180)
+ (path /4BF03683/33AFD8ED)
+ (attr smd)
+ (fp_text reference C72 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CDC8)
+ (at 94.615 94.615)
+ (path /4BF03683/33AFD8EF)
+ (attr smd)
+ (fp_text reference C73 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100nF (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:CV3-30PF (layer Composant) (tedit 54019107) (tstamp 5402CDD3)
+ (at 84.455 69.215 180)
+ (descr "Condensateur ajustable miniature")
+ (tags "C DEV")
+ (path /4BF0367F/22760FA8)
+ (fp_text reference CV1 (at 0 4.445 180) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value 5/30pF (at 0 4.445 180) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_circle (center 0 0) (end 3.175 0) (layer F.SilkS) (width 0.381))
+ (fp_circle (center 0 0) (end 0.635 0.635) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at 2.54 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 302 "Net-(CV1-Pad1)"))
+ (pad 2 thru_hole circle (at -2.54 0 180) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 5402CDDA)
+ (at 314.833 60.833)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4BF03681/A9CA7F7F)
+ (fp_text reference D1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT46 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 241 /pal-ntsc.sch/Y-VIDEO))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 5402CDE9)
+ (at 314.833 58.801)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4BF03681/A9CA7F84)
+ (fp_text reference D2 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT46 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 241 /pal-ntsc.sch/Y-VIDEO))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 5402CDF8)
+ (at 357.759 84.455)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4BF03681/A9CA7F8E)
+ (fp_text reference D3 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT46 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 238 /pal-ntsc.sch/C-VIDEO))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:D3 (layer Composant) (tedit 538C4421) (tstamp 5402CE07)
+ (at 357.759 86.487)
+ (descr "Diode 3 pas")
+ (tags "DIODE DEV")
+ (path /4BF03681/A9CA7F93)
+ (fp_text reference D4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value BAT46 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 3.81 0) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 0) (end 3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 -1.016) (end -3.048 -1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 -1.016) (end -3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.81 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 0) (end -3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.048 1.016) (end 3.048 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.048 1.016) (end 3.048 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.016) (end 2.54 1.016) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.286 1.016) (end 2.286 -1.016) (layer F.SilkS) (width 0.3048))
+ (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 238 /pal-ntsc.sch/C-VIDEO))
+ (model Discret.3dshapes/D3.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.3 0.3 0.3))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:LEDV (layer Composant) (tedit 54019107) (tstamp 5402CE16)
+ (at 91.44 75.565)
+ (descr "Led verticale diam 6mm")
+ (tags "LED DEV")
+ (path /4BF03683/2D5AA041)
+ (fp_text reference D6 (at 0 -3.81) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value LED (at 0 -3.81) (layer F.SilkS) hide
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center 0 0) (end -2.54 0) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -0.635) (end 1.905 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 -0.635) (end 1.905 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 1.905 0.635) (end 2.54 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 303 "Net-(D6-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 197 /graphic/LED))
+ (model LEDs.3dshapes/LED-5MM.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812 (layer Composant) (tedit 54019107) (tstamp 5402CE1F)
+ (at 80.137 107.061)
+ (tags "CMS SM")
+ (path /4BF0367F/22760FF3)
+ (attr smd)
+ (fp_text reference L1 (at -0.74676 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value 2,2uH (at 0.762 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_circle (center -3.302 2.159) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 2.032) (end 3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 2.032) (end 3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 -2.032) (end 1.524 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -2.032) (end -3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 -2.032) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 2.032) (end -1.524 2.032) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.286 0) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 304 "Net-(L1-Pad1)"))
+ (pad 2 smd rect (at 2.286 0) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 291 "Net-(C46-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.21 0.3 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812 (layer Composant) (tedit 54019107) (tstamp 5402CE2B)
+ (at 84.455 61.341 180)
+ (tags "CMS SM")
+ (path /4BF0367F/22760F71)
+ (attr smd)
+ (fp_text reference L2 (at -0.74676 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value 22uH (at 0.762 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_circle (center -3.302 2.159) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 2.032) (end 3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 2.032) (end 3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 -2.032) (end 1.524 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -2.032) (end -3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 -2.032) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 2.032) (end -1.524 2.032) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.286 0 180) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 2.286 0 180) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 294 "Net-(C54-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.21 0.3 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812 (layer Composant) (tedit 54019107) (tstamp 5402CE37)
+ (at 70.866 106.934)
+ (tags "CMS SM")
+ (path /4BF0367F/22761052)
+ (attr smd)
+ (fp_text reference L3 (at -0.74676 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value 22uH (at 0.762 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_circle (center -3.302 2.159) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 2.032) (end 3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 2.032) (end 3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 -2.032) (end 1.524 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -2.032) (end -3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 -2.032) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 2.032) (end -1.524 2.032) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.286 0) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 2.286 0) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 3 +5F))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.21 0.3 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812 (layer Composant) (tedit 54019107) (tstamp 5402CE43)
+ (at 345.313 97.155)
+ (tags "CMS SM")
+ (path /4BF03681/811D9080)
+ (attr smd)
+ (fp_text reference L4 (at -0.74676 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value 22uF (at 0.762 0 90) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_circle (center -3.302 2.159) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 2.032) (end 3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 2.032) (end 3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 -2.032) (end 1.524 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -2.032) (end -3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 -2.032) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 2.032) (end -1.524 2.032) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.286 0) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 2.286 0) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.21 0.3 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1812 (layer Composant) (tedit 54019107) (tstamp 5402CE4F)
+ (at 326.009 131.572 180)
+ (tags "CMS SM")
+ (path /4BF03689/84DFBB99)
+ (attr smd)
+ (fp_text reference L5 (at -0.74676 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value 22uH (at 0.762 0 270) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_circle (center -3.302 2.159) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.524 2.032) (end 3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 2.032) (end 3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start 3.175 -2.032) (end 1.524 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.524 -2.032) (end -3.175 -2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 -2.032) (end -3.175 2.032) (layer F.SilkS) (width 0.127))
+ (fp_line (start -3.175 2.032) (end -1.524 2.032) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -2.286 0 180) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 2.286 0 180) (size 1.397 3.81) (layers Composant F.Paste F.Mask)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.21 0.3 0.2))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module footprints:LRTDK (layer Composant) (tedit 54018D02) (tstamp 5402CE5B)
+ (at 72.771 110.617 270)
+ (path /4BF0367F/349FB562)
+ (fp_text reference L6 (at -0.381 -5.08 450) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.254)))
+ )
+ (fp_text value 470nS (at 0.1 -8.3 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.254)))
+ )
+ (fp_line (start 12.7 -1.27) (end 12.7 0) (layer F.SilkS) (width 0.381))
+ (fp_line (start 7.62 -1.27) (end 7.62 0) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 0) (end -10.16 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -12.7 0) (end -12.7 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -15.24 -1.27) (end -15.24 -11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start -15.24 -11.43) (end 15.24 -11.43) (layer F.SilkS) (width 0.381))
+ (fp_line (start 15.24 -11.43) (end 15.24 -1.27) (layer F.SilkS) (width 0.381))
+ (fp_line (start -15.24 -1.27) (end 15.24 -1.27) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole circle (at -12.7 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 305 "Net-(L6-Pad1)"))
+ (pad 3 thru_hole circle (at -10.16 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 3 thru_hole circle (at 7.62 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 12.7 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 306 "Net-(L6-Pad2)"))
+ )
+
+ (module discret:SUBCLICK (layer Composant) (tedit 54019107) (tstamp 5402CE6A)
+ (at 59.055 104.775 180)
+ (descr "Connecteur Subclick")
+ (tags "CONN DEV")
+ (path /32F9F198)
+ (fp_text reference P1 (at 0 6.35 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value BNC (at -0.254 -6.35 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.27) (thickness 0.3048)))
+ )
+ (fp_line (start -2.54 -1.27) (end -1.27 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -2.54) (end 17.78 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 -2.54) (end 17.78 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 2.54) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -5.08) (end 3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -5.08) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 5.08) (end -3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 5.08) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at 0 0 180) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 269 /ESVIDEO-RVB/RED_IN))
+ (pad 2 thru_hole circle (at -2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at -2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Connect.3dshapes/SUBCLICK.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:SUBCLICK (layer Composant) (tedit 54019107) (tstamp 5402CE80)
+ (at 59.055 116.205 180)
+ (descr "Connecteur Subclick")
+ (tags "CONN DEV")
+ (path /32F9F1A3)
+ (fp_text reference P2 (at 0 6.35 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value BNC (at -0.254 -6.35 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.27) (thickness 0.3048)))
+ )
+ (fp_line (start -2.54 -1.27) (end -1.27 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -2.54) (end 17.78 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 -2.54) (end 17.78 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 2.54) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -5.08) (end 3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -5.08) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 5.08) (end -3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 5.08) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at 0 0 180) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 /ESVIDEO-RVB/GREEN_IN))
+ (pad 2 thru_hole circle (at -2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at -2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Connect.3dshapes/SUBCLICK.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:SUBCLICK (layer Composant) (tedit 54019107) (tstamp 5402CE96)
+ (at 59.055 93.345 180)
+ (descr "Connecteur Subclick")
+ (tags "CONN DEV")
+ (path /32F9F1AD)
+ (fp_text reference P3 (at 0 6.35 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value BNC (at -0.254 -6.35 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.27) (thickness 0.3048)))
+ )
+ (fp_line (start -2.54 -1.27) (end -1.27 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -2.54) (end 17.78 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 -2.54) (end 17.78 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 2.54) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -5.08) (end 3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -5.08) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 5.08) (end -3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 5.08) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at 0 0 180) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 /ESVIDEO-RVB/BLUE_IN))
+ (pad 2 thru_hole circle (at -2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at -2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Connect.3dshapes/SUBCLICK.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:SIL-2 (layer Composant) (tedit 54019107) (tstamp 5402CEAC)
+ (at 105.283 69.088 90)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4BF03683/33A7E0C8)
+ (fp_text reference P4 (at 0 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1.72974 1.08712) (thickness 0.3048)))
+ )
+ (fp_text value CONN_2 (at 0 -2.54 90) (layer F.SilkS) hide
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -1.27 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 307 "Net-(P4-Pad1)"))
+ (pad 2 thru_hole circle (at 1.27 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ )
+
+ (module pin_array:PIN_ARRAY_5x1 (layer Composant) (tedit 45976D86) (tstamp 5402CEB5)
+ (at 98.425 61.595)
+ (descr "Double rangee de contacts 2 x 5 pins")
+ (tags CONN)
+ (path /4BF03683/33A7DFAB)
+ (fp_text reference P5 (at 0 -2.54) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_text value CONN_5 (at 0 2.54) (layer F.SilkS) hide
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -6.35 -1.27) (end -6.35 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 1.27) (end 6.35 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 -1.27) (end 6.35 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 1.27) (end -6.35 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -5.08 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at -2.54 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 170 /graphic/CCLK))
+ (pad 3 thru_hole circle (at 0 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 174 /graphic/DIN))
+ (pad 4 thru_hole circle (at 2.54 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 175 /graphic/DONE))
+ (pad 5 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 198 /graphic/PROG*))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x05.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:SUBCLICK (layer Composant) (tedit 54019107) (tstamp 5402CEC1)
+ (at 59.055 81.915 180)
+ (descr "Connecteur Subclick")
+ (tags "CONN DEV")
+ (path /30705D02)
+ (fp_text reference P8 (at 0 6.35 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value BNC (at -0.254 -6.35 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.27) (thickness 0.3048)))
+ )
+ (fp_line (start -2.54 -1.27) (end -1.27 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 -2.54) (end 17.78 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 -2.54) (end 17.78 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 17.78 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -1.27 2.54) (end -2.54 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 -5.08) (end 3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 -5.08) (end 5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 -3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.08 3.81) (end 3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 3.81 5.08) (end -3.81 5.08) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -3.81 5.08) (end -5.08 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.08 -3.81) (end -3.81 -5.08) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at 0 0 180) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 209 /modul/CVBSOUT))
+ (pad 2 thru_hole circle (at -2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 -2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at -2.54 2.54 180) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Connect.3dshapes/SUBCLICK.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 54019107) (tstamp 5402CED7)
+ (at 114.3 74.93)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4BF03683/34E1718B)
+ (fp_text reference P9 (at 0 -1.26746) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 308 "Net-(P9-Pad1)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 54019107) (tstamp 5402CEDC)
+ (at 89.535 59.055)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4BF03683/4BF036D9)
+ (fp_text reference P10 (at 0 -1.26746) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 309 "Net-(P10-Pad1)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:PINTST (layer Composant) (tedit 54019107) (tstamp 5402CEE1)
+ (at 89.535 63.5)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /4BF03683/4BF036DA)
+ (fp_text reference P11 (at 0 -1.26746) (layer F.SilkS)
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_text value CONN_1 (at 0 1.27) (layer F.SilkS) hide
+ (effects (font (size 0.508 0.508) (thickness 0.127)))
+ )
+ (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 thru_hole circle (at 0 0) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)
+ (net 310 "Net-(P11-Pad1)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x01.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:TESTPOINT (layer Composant) (tedit 54019107) (tstamp 5402CEE6)
+ (at 82.423 57.912)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4BF03683/34E1751D)
+ (fp_text reference P12 (at 0 -1.524) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value CONN_1 (at 0.127 1.524) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -1.905 -0.889) (end 1.778 -0.889) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 1.778 -0.889) (end 2.286 -0.381) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.286 -0.381) (end 2.286 0.381) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 2.286 0.381) (end 1.778 0.889) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 1.778 0.889) (end -1.905 0.889) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -1.905 0.889) (end -2.413 0.381) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.413 0.381) (end -2.413 -0.381) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -2.413 -0.381) (end -1.905 -0.889) (layer F.SilkS) (width 0.2032))
+ (pad 1 thru_hole circle (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 1 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (model Connect.3dshapes/TESTPOINT.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:POT_CMS (layer Composant) (tedit 54019107) (tstamp 5402CEF3)
+ (at 84.455 81.915)
+ (descr "module CMS Potentiometre")
+ (tags "CMS POT")
+ (path /4BF0367F/2276109D)
+ (attr smd)
+ (fp_text reference POT1 (at 0 -0.88646) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 100K (at 0 0.635) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 3.556) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 3.556) (end 2.54 3.556) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 3.556) (end 2.54 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.778) (end -1.016 -3.556) (layer F.SilkS) (width 0.127))
+ (fp_line (start -1.016 -3.556) (end 1.016 -3.556) (layer F.SilkS) (width 0.127))
+ (fp_line (start 1.016 -3.556) (end 2.54 -1.778) (layer F.SilkS) (width 0.127))
+ (fp_circle (center 0 0) (end 0.254 -0.762) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.27 2.54) (size 1.27 1.524) (layers Composant F.Paste F.Mask)
+ (net 311 "Net-(POT1-Pad1)"))
+ (pad 2 smd rect (at 0 -2.54) (size 1.27 1.524) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 3 smd rect (at 1.27 2.54) (size 1.27 1.524) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ )
+
+ (module lib_smd:SOT23EBC (layer Cuivre) (tedit 54019107) (tstamp 5402CF00)
+ (at 79.629 128.397)
+ (descr "Module CMS SOT23 Transistore EBC")
+ (tags "CMS SOT")
+ (path /4BF0367F/22761039)
+ (attr smd)
+ (fp_text reference Q1 (at 0 2.413) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.2032)) (justify mirror))
+ )
+ (fp_text value BC848 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.2032)) (justify mirror))
+ )
+ (fp_line (start -1.524 0.381) (end 1.524 0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.381) (end 1.524 -0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.524 -0.381) (end -1.524 -0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.381) (end -1.524 0.381) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -0.889 1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 312 "Net-(Q1-Pad1)"))
+ (pad 2 smd rect (at 0.889 1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 313 "Net-(Q1-Pad2)"))
+ (pad 3 smd rect (at 0 -1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 3 +5F))
+ (model SMD_Packages.3dshapes/ST23AK#1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.13 0.15 0.15))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SOT23EBC (layer Cuivre) (tedit 54019107) (tstamp 5402CF0A)
+ (at 75.057 128.397)
+ (descr "Module CMS SOT23 Transistore EBC")
+ (tags "CMS SOT")
+ (path /4BF0367F/22761066)
+ (attr smd)
+ (fp_text reference Q2 (at 0 2.413) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.2032)) (justify mirror))
+ )
+ (fp_text value BC848 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.2032)) (justify mirror))
+ )
+ (fp_line (start -1.524 0.381) (end 1.524 0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.381) (end 1.524 -0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.524 -0.381) (end -1.524 -0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.381) (end -1.524 0.381) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -0.889 1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 314 "Net-(Q2-Pad1)"))
+ (pad 2 smd rect (at 0.889 1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 315 "Net-(Q2-Pad2)"))
+ (pad 3 smd rect (at 0 -1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 3 +5F))
+ (model SMD_Packages.3dshapes/ST23AK#1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.13 0.15 0.15))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SOT23EBC (layer Cuivre) (tedit 54019107) (tstamp 5402CF14)
+ (at 75.057 94.615)
+ (descr "Module CMS SOT23 Transistore EBC")
+ (tags "CMS SOT")
+ (path /4BF0367F/2276107F)
+ (attr smd)
+ (fp_text reference Q3 (at 0 2.413) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.2032)) (justify mirror))
+ )
+ (fp_text value BC848 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.2032)) (justify mirror))
+ )
+ (fp_line (start -1.524 0.381) (end 1.524 0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.524 0.381) (end 1.524 -0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start 1.524 -0.381) (end -1.524 -0.381) (layer B.SilkS) (width 0.127))
+ (fp_line (start -1.524 -0.381) (end -1.524 0.381) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -0.889 1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 316 "Net-(Q3-Pad1)"))
+ (pad 2 smd rect (at 0.889 1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 317 "Net-(Q3-Pad2)"))
+ (pad 3 smd rect (at 0 -1.016) (size 0.9144 0.9144) (layers Cuivre B.Paste B.Mask)
+ (net 3 +5F))
+ (model SMD_Packages.3dshapes/ST23AK#1.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.13 0.15 0.15))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CF1E)
+ (at 123.825 63.119)
+ (path /4BF03683/33A7DCE3)
+ (attr smd)
+ (fp_text reference R1 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 10 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 200 /graphic/VOSC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF29)
+ (at 355.981 81.153)
+ (path /4BF03681/8116F4A5)
+ (attr smd)
+ (fp_text reference R2 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 238 /pal-ntsc.sch/C-VIDEO))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 268 "Net-(C4-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF34)
+ (at 358.14 72.263 270)
+ (path /4BF03681/8116F4AA)
+ (attr smd)
+ (fp_text reference R3 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 100 (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 241 /pal-ntsc.sch/Y-VIDEO))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 267 "Net-(C3-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CF3F)
+ (at 67.945 111.887)
+ (path /4BF0367F/33A51A4E)
+ (attr smd)
+ (fp_text reference R4 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 10K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 318 "Net-(R4-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF4A)
+ (at 163.449 134.62)
+ (path /4BF03687/26A799E8)
+ (attr smd)
+ (fp_text reference R5 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 10K (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 319 "Net-(R5-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF55)
+ (at 114.935 123.19 180)
+ (path /4BF03687/26A79A01)
+ (attr smd)
+ (fp_text reference R6 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 10K (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 320 "Net-(R6-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF60)
+ (at 118.745 120.65 180)
+ (path /4BF03687/26A79A0B)
+ (attr smd)
+ (fp_text reference R7 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 10K (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 321 "Net-(R7-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CF6B)
+ (at 348.234 131.699 180)
+ (path /4BF03689/A4586827)
+ (attr smd)
+ (fp_text reference R8 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 150 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 278 "Net-(C34-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF76)
+ (at 67.945 85.217 270)
+ (path /4BF0367F/22761098)
+ (attr smd)
+ (fp_text reference R9 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 150K (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 311 "Net-(POT1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 322 "Net-(R9-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CF81)
+ (at 70.739 76.835 180)
+ (path /4BF0367F/22760F80)
+ (attr smd)
+ (fp_text reference R10 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 1K (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 305 "Net-(L6-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 323 "Net-(R10-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CF8C)
+ (at 77.343 76.835)
+ (path /4BF0367F/22760FBC)
+ (attr smd)
+ (fp_text reference R11 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 1K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 306 "Net-(L6-Pad2)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 292 "Net-(C48-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CF97)
+ (at 355.727 72.263 90)
+ (path /4BF03681/A9CA7FCA)
+ (attr smd)
+ (fp_text reference R12 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 1K (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 272 "Net-(C6-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFA2)
+ (at 86.233 75.565)
+ (path /4BF03683/2D5AA03C)
+ (attr smd)
+ (fp_text reference R13 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 1K (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 303 "Net-(D6-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402CFAD)
+ (at 358.521 63.627 180)
+ (path /4BF03681/821CDA9A)
+ (attr smd)
+ (fp_text reference R14 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 1M (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 266 "Net-(C1-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFB8)
+ (at 321.437 120.015 270)
+ (path /4BF03689/A44D982A)
+ (attr smd)
+ (fp_text reference R15 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 1M (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 280 "Net-(C36-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFC3)
+ (at 79.883 122.555 90)
+ (path /4BF0367F/2276103E)
+ (attr smd)
+ (fp_text reference R16 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220 (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 313 "Net-(Q1-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 206 /modul/CHROM))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFCE)
+ (at 75.565 122.555 90)
+ (path /4BF0367F/2276107A)
+ (attr smd)
+ (fp_text reference R17 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220 (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 315 "Net-(Q2-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 210 /modul/LUM))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFD9)
+ (at 70.739 85.217 270)
+ (path /4BF0367F/22761093)
+ (attr smd)
+ (fp_text reference R18 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220 (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 317 "Net-(Q3-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 208 /modul/CVBS))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFE4)
+ (at 343.408 97.282 90)
+ (path /4BF03681/A9CA7FA7)
+ (attr smd)
+ (fp_text reference R19 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220 (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 271 "Net-(C5-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 324 "Net-(R19-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFEF)
+ (at 343.027 58.039)
+ (path /4BF03681/B176B9C3)
+ (attr smd)
+ (fp_text reference R20 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 275 "Net-(C8-Pad2)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 242 /pal-ntsc.sch/Y_SYNC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402CFFA)
+ (at 109.22 67.564 180)
+ (path /4BF03683/525FE207)
+ (attr smd)
+ (fp_text reference R21 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 293 "Net-(C49-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 172 /graphic/CLK10MHz))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D005)
+ (at 294.767 131.572)
+ (path /4BF03689/A44C0334)
+ (attr smd)
+ (fp_text reference R22 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 220 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 5 /ESVIDEO-RVB/BLUE_IN))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 287 "Net-(C41-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D010)
+ (at 313.69 132.08 180)
+ (path /4BF03689/A44C0343)
+ (attr smd)
+ (fp_text reference R23 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 220 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 13 /ESVIDEO-RVB/GREEN_IN))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 285 "Net-(C40-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D01B)
+ (at 339.598 131.318 180)
+ (path /4BF03689/A44C034D)
+ (attr smd)
+ (fp_text reference R24 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 220 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 269 /ESVIDEO-RVB/RED_IN))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 283 "Net-(C39-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D026)
+ (at 355.346 94.615 90)
+ (path /4BF03681/B1754313)
+ (attr smd)
+ (fp_text reference R25 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220K (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 301 "Net-(C66-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 300 "Net-(C65-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D031)
+ (at 111.887 62.103)
+ (path /4BF03683/B3BF4ED9)
+ (attr smd)
+ (fp_text reference R26 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 220K (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 201 /graphic/XTAL_I))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 293 "Net-(C49-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D03C)
+ (at 344.297 84.709)
+ (path /4BF03681/A9CA7FC5)
+ (attr smd)
+ (fp_text reference R27 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 27K (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 325 "Net-(R27-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 273 "Net-(C7-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D047)
+ (at 111.76 114.935)
+ (path /4BF03687/26B211C0)
+ (attr smd)
+ (fp_text reference R28 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 2,2K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 326 "Net-(R28-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D052)
+ (at 114.3 111.76)
+ (path /4BF03687/26B211CF)
+ (attr smd)
+ (fp_text reference R29 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 2,2K (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 327 "Net-(R29-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D05D)
+ (at 81.407 99.441)
+ (path /4BF0367F/22760FE4)
+ (attr smd)
+ (fp_text reference R30 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 3,3K (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 298 "Net-(C61-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 328 /graphic/CSYNC-OUT))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D068)
+ (at 81.407 102.743 180)
+ (path /4BF0367F/22760FDF)
+ (attr smd)
+ (fp_text reference R31 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 470 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 298 "Net-(C61-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D073)
+ (at 80.391 136.779)
+ (path /4BF0367F/22761043)
+ (attr smd)
+ (fp_text reference R32 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 470 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 312 "Net-(Q1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D07E)
+ (at 80.391 133.731)
+ (path /4BF0367F/22761070)
+ (attr smd)
+ (fp_text reference R33 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 470 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 314 "Net-(Q2-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D089)
+ (at 68.707 98.933 180)
+ (path /4BF0367F/22761089)
+ (attr smd)
+ (fp_text reference R34 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 470 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 316 "Net-(Q3-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D094)
+ (at 352.679 60.833 180)
+ (path /4BF03681/821CDAB8)
+ (attr smd)
+ (fp_text reference R35 (at 0 0 180) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 470 (at 0 0 180) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 265 "Net-(C1-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 242 /pal-ntsc.sch/Y_SYNC))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D09F)
+ (at 316.357 120.015 90)
+ (path /4BF03689/A44D9843)
+ (attr smd)
+ (fp_text reference R36 (at 0 0 90) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 470 (at 0 0 90) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 281 "Net-(C36-Pad2)"))
+ (pad 2 smd rect (at 1.651 0 90) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 329 "Net-(R36-Pad2)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0AA)
+ (at 309.372 121.285 180)
+ (path /4BF03689/5D7688E4)
+ (attr smd)
+ (fp_text reference R37 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 510 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0B5)
+ (at 304.165 117.729)
+ (path /4BF03689/A44C03AC)
+ (attr smd)
+ (fp_text reference R38 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 510 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 330 "Net-(R38-Pad1)"))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0C0)
+ (at 75.057 136.779)
+ (path /4BF0367F/22761048)
+ (attr smd)
+ (fp_text reference R39 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 68 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 207 /modul/COUT))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 312 "Net-(Q1-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0CB)
+ (at 75.057 133.731 180)
+ (path /4BF0367F/22761075)
+ (attr smd)
+ (fp_text reference R40 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 68 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 314 "Net-(Q2-Pad1)"))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 211 /modul/YOUT))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0D6)
+ (at 68.707 95.631)
+ (path /4BF0367F/2276108E)
+ (attr smd)
+ (fp_text reference R41 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 68 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 209 /modul/CVBSOUT))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 316 "Net-(Q3-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0E1)
+ (at 75.057 145.923 180)
+ (path /4BF03689/84DFB9D2)
+ (attr smd)
+ (fp_text reference R42 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 75 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 205 /modul/BLEU))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0EC)
+ (at 75.057 142.875 180)
+ (path /4BF03689/84DFB9D7)
+ (attr smd)
+ (fp_text reference R43 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 75 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 12 /ESVIDEO-RVB/GREEN))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D0F7)
+ (at 75.057 139.827 180)
+ (path /4BF03689/84DFB9DC)
+ (attr smd)
+ (fp_text reference R44 (at 0 0 180) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 75 (at 0 0 180) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 1.651 0 180) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 4 /ESVIDEO-RVB/BLUE))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Composant) (tedit 54019107) (tstamp 5402D102)
+ (at 67.945 116.205)
+ (path /4BF03689/A44C032F)
+ (attr smd)
+ (fp_text reference R45 (at 0 0) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_text value 75 (at 0 0) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.54 1.143) (end -0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 0.889 1.143) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 13 /ESVIDEO-RVB/GREEN_IN))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D10D)
+ (at 66.548 107.696 270)
+ (path /4BF03689/A44C0339)
+ (attr smd)
+ (fp_text reference R46 (at 0 0 270) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 75 (at 0 0 270) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 5 /ESVIDEO-RVB/BLUE_IN))
+ (pad 2 smd rect (at 1.651 0 270) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D118)
+ (at 67.945 114.046)
+ (path /4BF03689/A44C0348)
+ (attr smd)
+ (fp_text reference R47 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 75 (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 269 /ESVIDEO-RVB/RED_IN))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SM1206 (layer Cuivre) (tedit 54019107) (tstamp 5402D123)
+ (at 108.331 86.741)
+ (path /4BF03683/33A7E0B2)
+ (attr smd)
+ (fp_text reference R48 (at 0 0) (layer B.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 10K (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.143) (end 2.54 1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.143) (end -2.54 1.143) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at -1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at 1.651 0) (size 1.524 2.032) (layers Cuivre B.Paste B.Mask)
+ (net 307 "Net-(P4-Pad1)"))
+ (model SMD_Packages.3dshapes/SMD-1206.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.17 0.16 0.16))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:SIL-9 (layer Composant) (tedit 54019107) (tstamp 5402D12E)
+ (at 178.435 142.621 180)
+ (descr "Connecteur 9 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/C8AF8090)
+ (fp_text reference RR1 (at -7.62 -2.54 180) (layer F.SilkS)
+ (effects (font (size 1.72974 1.08712) (thickness 0.3048)))
+ )
+ (fp_text value 8x10K (at 5.08 -2.54 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 99 /buspci.sch/EQ0))
+ (pad 3 thru_hole circle (at -5.08 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 234 /muxdata/DPC31))
+ (pad 4 thru_hole circle (at -2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 100 /buspci.sch/EQ1))
+ (pad 5 thru_hole circle (at 0 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 233 /muxdata/DPC30))
+ (pad 6 thru_hole circle (at 2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 101 /buspci.sch/EQ2))
+ (pad 7 thru_hole circle (at 5.08 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 102 /buspci.sch/EQ3))
+ (pad 8 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 232 /muxdata/DPC29))
+ (pad 9 thru_hole circle (at 10.16 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 103 /buspci.sch/EQ4))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:SIL-9 (layer Composant) (tedit 54019107) (tstamp 5402D13F)
+ (at 178.435 137.795 180)
+ (descr "Connecteur 9 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/C8B01EF2)
+ (fp_text reference RR2 (at -7.62 -2.54 180) (layer F.SilkS)
+ (effects (font (size 1.72974 1.08712) (thickness 0.3048)))
+ )
+ (fp_text value 8x10K (at 5.08 -2.54 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 105 /buspci.sch/EQ6))
+ (pad 3 thru_hole circle (at -5.08 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 231 /muxdata/DPC28))
+ (pad 4 thru_hole circle (at -2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 104 /buspci.sch/EQ5))
+ (pad 5 thru_hole circle (at 0 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 230 /muxdata/DPC27))
+ (pad 6 thru_hole circle (at 2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 85 /buspci.sch/EA1))
+ (pad 7 thru_hole circle (at 5.08 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 195 /graphic/IRQ_SLR))
+ (pad 8 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 229 /muxdata/DPC26))
+ (pad 9 thru_hole circle (at 10.16 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 106 /buspci.sch/EQ7))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:SIL-9 (layer Composant) (tedit 54019107) (tstamp 5402D150)
+ (at 178.435 134.747 180)
+ (descr "Connecteur 9 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/C8B23B9F)
+ (fp_text reference RR3 (at -7.62 -2.54 180) (layer F.SilkS)
+ (effects (font (size 1.72974 1.08712) (thickness 0.3048)))
+ )
+ (fp_text value 8x10K (at 5.08 -2.54 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 94 /buspci.sch/EA4))
+ (pad 3 thru_hole circle (at -5.08 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 227 /muxdata/DPC24))
+ (pad 4 thru_hole circle (at -2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 331 /buspci.sch/SELECT-))
+ (pad 5 thru_hole circle (at 0 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 332 /buspci.sch/WR-))
+ (pad 6 thru_hole circle (at 2.54 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 93 /buspci.sch/EA3))
+ (pad 7 thru_hole circle (at 5.08 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 333 /buspci.sch/RD-))
+ (pad 8 thru_hole circle (at 7.62 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 92 /buspci.sch/EA2))
+ (pad 9 thru_hole circle (at 10.16 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 228 /muxdata/DPC25))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:r_pack8 (layer Composant) (tedit 54019107) (tstamp 5402D161)
+ (at 95.25 142.875)
+ (descr "8 R pack")
+ (tags R)
+ (path /4BF03687/C8B2B4CE)
+ (fp_text reference RR4 (at -1.27 -2.794) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 8x10K (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 96 /buspci.sch/EA6))
+ (pad 3 thru_hole circle (at -5.08 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 225 /muxdata/DPC22))
+ (pad 4 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 95 /buspci.sch/EA5))
+ (pad 5 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 226 /muxdata/DPC23))
+ (pad 6 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 91 /buspci.sch/EA15))
+ (pad 7 thru_hole circle (at 5.08 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 219 /muxdata/DPC16))
+ (pad 8 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 90 /buspci.sch/EA14))
+ (pad 9 thru_hole circle (at 10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 220 /muxdata/DPC17))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:r_pack8 (layer Composant) (tedit 54019107) (tstamp 5402D172)
+ (at 95.25 135.89)
+ (descr "8 R pack")
+ (tags R)
+ (path /4BF03687/C8B2B4E3)
+ (fp_text reference RR5 (at -1.27 -2.794) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 8x10K (at 0 2.032) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 107 /buspci.sch/PTATN-))
+ (pad 3 thru_hole circle (at -5.08 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 98 /buspci.sch/EA9))
+ (pad 4 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 165 /buspci.sch/X_IRQ))
+ (pad 5 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 334 /buspci.sch/PTADR-))
+ (pad 6 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 224 /muxdata/DPC21))
+ (pad 7 thru_hole circle (at 5.08 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 162 /buspci.sch/RDFIFO-))
+ (pad 8 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 163 /buspci.sch/WRFIFO-))
+ (pad 9 thru_hole circle (at 10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 97 /buspci.sch/EA7))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:SIL-9 (layer Composant) (tedit 54019107) (tstamp 5402D183)
+ (at 95.25 127)
+ (descr "Connecteur 9 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/C93123CE)
+ (fp_text reference RR6 (at -7.62 -2.54) (layer F.SilkS)
+ (effects (font (size 1.72974 1.08712) (thickness 0.3048)))
+ )
+ (fp_text value 8x10K (at 5.08 -2.54) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 110 /buspci.sch/PTRDY-))
+ (pad 3 thru_hole circle (at -5.08 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 223 /muxdata/DPC20))
+ (pad 4 thru_hole circle (at -2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 89 /buspci.sch/EA13))
+ (pad 5 thru_hole circle (at 0 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 88 /buspci.sch/EA12))
+ (pad 6 thru_hole circle (at 2.54 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 221 /muxdata/DPC18))
+ (pad 7 thru_hole circle (at 5.08 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 87 /buspci.sch/EA11))
+ (pad 8 thru_hole circle (at 7.62 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 222 /muxdata/DPC19))
+ (pad 9 thru_hole circle (at 10.16 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 86 /buspci.sch/EA10))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:r_pack8 (layer Composant) (tedit 54019107) (tstamp 5402D194)
+ (at 92.075 109.855 90)
+ (descr "8 R pack")
+ (tags R)
+ (path /4BF03687/C931248E)
+ (fp_text reference RR7 (at -1.27 -2.794 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.27) (thickness 0.2032)))
+ )
+ (fp_text value 8x10K (at 0 2.032 90) (layer F.SilkS)
+ (effects (font (size 1.016 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 3 thru_hole circle (at -5.08 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 4 thru_hole circle (at -2.54 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 5 thru_hole circle (at 0 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 6 thru_hole circle (at 2.54 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 7 thru_hole circle (at 5.08 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 8 thru_hole circle (at 7.62 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 9 thru_hole circle (at 10.16 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:SIL-9 (layer Composant) (tedit 54019107) (tstamp 5402D1A5)
+ (at 88.265 89.535 270)
+ (descr "Connecteur 9 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/C9363A3F)
+ (fp_text reference RR8 (at -7.62 -2.54 270) (layer F.SilkS)
+ (effects (font (size 1.72974 1.08712) (thickness 0.3048)))
+ )
+ (fp_text value 8x10K (at 5.08 -2.54 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 11.43 -1.27) (end 11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 11.43 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole rect (at -10.16 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 2 thru_hole circle (at -7.62 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 218 /muxdata/DPC15))
+ (pad 3 thru_hole circle (at -5.08 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 217 /muxdata/DPC14))
+ (pad 4 thru_hole circle (at -2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 216 /muxdata/DPC13))
+ (pad 5 thru_hole circle (at 0 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 215 /muxdata/DPC12))
+ (pad 6 thru_hole circle (at 2.54 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 214 /muxdata/DPC11))
+ (pad 7 thru_hole circle (at 5.08 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 213 /muxdata/DPC10))
+ (pad 8 thru_hole circle (at 7.62 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 236 /muxdata/DPC9))
+ (pad 9 thru_hole circle (at 10.16 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 235 /muxdata/DPC8))
+ (model Socket_Strips.3dshapes/Socket_Strip_Straight_1x09.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300 (layer Composant) (tedit 54019107) (tstamp 5402D1B6)
+ (at 112.395 121.92)
+ (descr "8 pins DIL package, round pads")
+ (tags DIL)
+ (path /4BF03687/2F5F7E5C)
+ (fp_text reference U1 (at -6.35 0 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.143) (thickness 0.2032)))
+ )
+ (fp_text value 24C16 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.27 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.254))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.254))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.254))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.254))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.254))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.254))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.254))
+ (pad 1 thru_hole rect (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 3 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 4 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 5 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 327 "Net-(R29-Pad2)"))
+ (pad 6 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 326 "Net-(R28-Pad2)"))
+ (pad 7 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 8 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO28 (layer Composant) (tedit 54019107) (tstamp 5402D1C8)
+ (at 148.717 62.23)
+ (descr "Module CMS SO 28 pins large")
+ (tags "CMS SOJ SO SOIC")
+ (path /4BF03683/33A805F8)
+ (attr smd)
+ (fp_text reference U2 (at 0 -1.26492) (layer F.SilkS)
+ (effects (font (thickness 0.1524)))
+ )
+ (fp_text value 4C4001 (at 0 1.27) (layer F.SilkS)
+ (effects (font (thickness 0.1524)))
+ )
+ (fp_line (start 8.89 -2.54) (end 8.89 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 3.81) (end -8.89 3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 3.81) (end -8.89 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -3.81) (end 8.89 -3.81) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 8.89 -3.81) (end 8.89 -2.54) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 -0.635) (end -7.62 -0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 -0.635) (end -7.62 0.635) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -7.62 0.635) (end -8.89 0.635) (layer F.SilkS) (width 0.3048))
+ (pad 1 smd rect (at -8.255 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 189 /graphic/ID0))
+ (pad 2 smd rect (at -6.985 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 190 /graphic/ID1))
+ (pad 3 smd rect (at -5.715 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 196 /graphic/IWR-))
+ (pad 4 smd rect (at -4.445 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 194 /graphic/IRAS-))
+ (pad 5 smd rect (at -3.175 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 187 /graphic/IA9))
+ (pad 6 smd rect (at -1.905 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 178 /graphic/IA0))
+ (pad 7 smd rect (at -0.635 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 179 /graphic/IA1))
+ (pad 8 smd rect (at 0.635 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 180 /graphic/IA2))
+ (pad 9 smd rect (at 1.905 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 181 /graphic/IA3))
+ (pad 10 smd rect (at 3.175 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 11 smd rect (at 4.445 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 182 /graphic/IA4))
+ (pad 12 smd rect (at 5.715 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 183 /graphic/IA5))
+ (pad 13 smd rect (at 6.985 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 184 /graphic/IA6))
+ (pad 14 smd rect (at 8.255 4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 185 /graphic/IA7))
+ (pad 15 smd rect (at 8.255 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 186 /graphic/IA8))
+ (pad 16 smd rect (at 6.985 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 193 /graphic/IOE-))
+ (pad 17 smd rect (at 5.715 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 188 /graphic/ICAS-))
+ (pad 18 smd rect (at 4.445 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 191 /graphic/ID2))
+ (pad 19 smd rect (at 3.175 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 192 /graphic/ID3))
+ (pad 20 smd rect (at 1.905 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 21 smd rect (at 0.635 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 22 smd rect (at -0.635 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 23 smd rect (at -1.905 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 24 smd rect (at -3.175 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 25 smd rect (at -4.445 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 26 smd rect (at -5.715 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 27 smd rect (at -6.985 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (pad 28 smd rect (at -8.255 -4.572) (size 0.508 1.27) (layers Composant F.Paste F.Mask))
+ (model SMD_Packages.3dshapes/SO-28.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.55 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO20L (layer Cuivre) (tedit 54019107) (tstamp 5402D1EF)
+ (at 168.783 106.553 90)
+ (descr "Cms SOJ 20 pins large")
+ (tags "CMS SOJ")
+ (path /4BF0367D/33A7E303)
+ (attr smd)
+ (fp_text reference U3 (at 0 1.27 90) (layer B.SilkS)
+ (effects (font (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 74LS245 (at 0 -1.27 90) (layer B.SilkS)
+ (effects (font (size 1.524 1.27) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start 6.35 -3.683) (end 6.35 3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 3.683) (end -6.35 -3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start 6.35 -3.683) (end -6.35 -3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 3.683) (end 6.35 3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 0.635) (end -5.08 0.635) (layer B.SilkS) (width 0.127))
+ (fp_line (start -5.08 0.635) (end -5.08 -0.635) (layer B.SilkS) (width 0.127))
+ (fp_line (start -5.08 -0.635) (end -6.35 -0.635) (layer B.SilkS) (width 0.127))
+ (pad 11 smd rect (at 5.715 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 12 smd rect (at 4.445 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 13 smd rect (at 3.175 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 14 smd rect (at 1.905 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 15 smd rect (at 0.635 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 16 smd rect (at -0.635 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 17 smd rect (at -1.905 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 18 smd rect (at -3.175 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 19 smd rect (at -4.445 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 337 /graphic/ACCES_RAM-))
+ (pad 20 smd rect (at -5.715 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 1 smd rect (at -5.715 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 212 /muxdata/DATA_WR))
+ (pad 2 smd rect (at -4.445 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 3 smd rect (at -3.175 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 4 smd rect (at -1.905 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 5 smd rect (at -0.635 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 6 smd rect (at 0.635 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 7 smd rect (at 1.905 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 8 smd rect (at 3.175 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 9 smd rect (at 4.445 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 10 smd rect (at 5.715 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SO-20-L.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.6 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO20L (layer Cuivre) (tedit 54019107) (tstamp 5402D20D)
+ (at 168.783 91.567 90)
+ (descr "Cms SOJ 20 pins large")
+ (tags "CMS SOJ")
+ (path /4BF0367D/4BF036D7)
+ (attr smd)
+ (fp_text reference U4 (at 0 1.27 90) (layer B.SilkS)
+ (effects (font (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 74LS245 (at 0 -1.27 90) (layer B.SilkS)
+ (effects (font (size 1.524 1.27) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start 6.35 -3.683) (end 6.35 3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 3.683) (end -6.35 -3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start 6.35 -3.683) (end -6.35 -3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 3.683) (end 6.35 3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 0.635) (end -5.08 0.635) (layer B.SilkS) (width 0.127))
+ (fp_line (start -5.08 0.635) (end -5.08 -0.635) (layer B.SilkS) (width 0.127))
+ (fp_line (start -5.08 -0.635) (end -6.35 -0.635) (layer B.SilkS) (width 0.127))
+ (pad 11 smd rect (at 5.715 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 12 smd rect (at 4.445 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 13 smd rect (at 3.175 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 14 smd rect (at 1.905 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 15 smd rect (at 0.635 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 16 smd rect (at -0.635 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 17 smd rect (at -1.905 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 18 smd rect (at -3.175 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 19 smd rect (at -4.445 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 337 /graphic/ACCES_RAM-))
+ (pad 20 smd rect (at -5.715 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 1 smd rect (at -5.715 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 212 /muxdata/DATA_WR))
+ (pad 2 smd rect (at -4.445 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 235 /muxdata/DPC8))
+ (pad 3 smd rect (at -3.175 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 236 /muxdata/DPC9))
+ (pad 4 smd rect (at -1.905 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 213 /muxdata/DPC10))
+ (pad 5 smd rect (at -0.635 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 214 /muxdata/DPC11))
+ (pad 6 smd rect (at 0.635 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 215 /muxdata/DPC12))
+ (pad 7 smd rect (at 1.905 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 216 /muxdata/DPC13))
+ (pad 8 smd rect (at 3.175 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 217 /muxdata/DPC14))
+ (pad 9 smd rect (at 4.445 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 218 /muxdata/DPC15))
+ (pad 10 smd rect (at 5.715 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SO-20-L.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.6 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO20L (layer Cuivre) (tedit 54019107) (tstamp 5402D22B)
+ (at 168.783 121.031 90)
+ (descr "Cms SOJ 20 pins large")
+ (tags "CMS SOJ")
+ (path /4BF0367D/4BF036D6)
+ (attr smd)
+ (fp_text reference U5 (at 0 1.27 90) (layer B.SilkS)
+ (effects (font (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 74LS245 (at 0 -1.27 90) (layer B.SilkS)
+ (effects (font (size 1.524 1.27) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start 6.35 -3.683) (end 6.35 3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 3.683) (end -6.35 -3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start 6.35 -3.683) (end -6.35 -3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 3.683) (end 6.35 3.683) (layer B.SilkS) (width 0.127))
+ (fp_line (start -6.35 0.635) (end -5.08 0.635) (layer B.SilkS) (width 0.127))
+ (fp_line (start -5.08 0.635) (end -5.08 -0.635) (layer B.SilkS) (width 0.127))
+ (fp_line (start -5.08 -0.635) (end -6.35 -0.635) (layer B.SilkS) (width 0.127))
+ (pad 11 smd rect (at 5.715 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 12 smd rect (at 4.445 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 13 smd rect (at 3.175 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 14 smd rect (at 1.905 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 15 smd rect (at 0.635 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 16 smd rect (at -0.635 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 17 smd rect (at -1.905 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 18 smd rect (at -3.175 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 19 smd rect (at -4.445 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 337 /graphic/ACCES_RAM-))
+ (pad 20 smd rect (at -5.715 4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 247 VCC))
+ (pad 1 smd rect (at -5.715 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 212 /muxdata/DATA_WR))
+ (pad 2 smd rect (at -4.445 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 219 /muxdata/DPC16))
+ (pad 3 smd rect (at -3.175 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 220 /muxdata/DPC17))
+ (pad 4 smd rect (at -1.905 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 221 /muxdata/DPC18))
+ (pad 5 smd rect (at -0.635 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 222 /muxdata/DPC19))
+ (pad 6 smd rect (at 0.635 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 223 /muxdata/DPC20))
+ (pad 7 smd rect (at 1.905 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 224 /muxdata/DPC21))
+ (pad 8 smd rect (at 3.175 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 225 /muxdata/DPC22))
+ (pad 9 smd rect (at 4.445 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 226 /muxdata/DPC23))
+ (pad 10 smd rect (at 5.715 -4.826 90) (size 0.508 1.27) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SO-20-L.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.6 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO20L (layer Composant) (tedit 54019107) (tstamp 5402D249)
+ (at 197.739 138.811 270)
+ (descr "Cms SOJ 20 pins large")
+ (tags "CMS SOJ")
+ (path /4BF0367D/4BF036D5)
+ (attr smd)
+ (fp_text reference U6 (at 0 -1.27 270) (layer F.SilkS)
+ (effects (font (thickness 0.127)))
+ )
+ (fp_text value 74LS245 (at 0 1.27 270) (layer F.SilkS)
+ (effects (font (size 1.524 1.27) (thickness 0.127)))
+ )
+ (fp_line (start 6.35 3.683) (end 6.35 -3.683) (layer F.SilkS) (width 0.127))
+ (fp_line (start -6.35 -3.683) (end -6.35 3.683) (layer F.SilkS) (width 0.127))
+ (fp_line (start 6.35 3.683) (end -6.35 3.683) (layer F.SilkS) (width 0.127))
+ (fp_line (start -6.35 -3.683) (end 6.35 -3.683) (layer F.SilkS) (width 0.127))
+ (fp_line (start -6.35 -0.635) (end -5.08 -0.635) (layer F.SilkS) (width 0.127))
+ (fp_line (start -5.08 -0.635) (end -5.08 0.635) (layer F.SilkS) (width 0.127))
+ (fp_line (start -5.08 0.635) (end -6.35 0.635) (layer F.SilkS) (width 0.127))
+ (pad 11 smd rect (at 5.715 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 12 smd rect (at 4.445 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 13 smd rect (at 3.175 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 14 smd rect (at 1.905 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 15 smd rect (at 0.635 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 16 smd rect (at -0.635 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 17 smd rect (at -1.905 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 18 smd rect (at -3.175 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 19 smd rect (at -4.445 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 337 /graphic/ACCES_RAM-))
+ (pad 20 smd rect (at -5.715 -4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 1 smd rect (at -5.715 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 212 /muxdata/DATA_WR))
+ (pad 2 smd rect (at -4.445 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 227 /muxdata/DPC24))
+ (pad 3 smd rect (at -3.175 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 228 /muxdata/DPC25))
+ (pad 4 smd rect (at -1.905 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 229 /muxdata/DPC26))
+ (pad 5 smd rect (at -0.635 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 230 /muxdata/DPC27))
+ (pad 6 smd rect (at 0.635 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 231 /muxdata/DPC28))
+ (pad 7 smd rect (at 1.905 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 232 /muxdata/DPC29))
+ (pad 8 smd rect (at 3.175 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 233 /muxdata/DPC30))
+ (pad 9 smd rect (at 4.445 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 234 /muxdata/DPC31))
+ (pad 10 smd rect (at 5.715 4.826 270) (size 0.508 1.27) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/SO-20-L.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.6 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:SO8E (layer Composant) (tedit 54019107) (tstamp 5402D267)
+ (at 130.175 61.595)
+ (descr "module CMS SOJ 8 pins etroit")
+ (tags "CMS SOJ")
+ (path /4BF03683/2295D392)
+ (attr smd)
+ (fp_text reference U7 (at 0 -0.889) (layer F.SilkS)
+ (effects (font (size 1.143 1.143) (thickness 0.1524)))
+ )
+ (fp_text value AV9173 (at 0 1.016) (layer F.SilkS)
+ (effects (font (size 0.889 0.889) (thickness 0.1524)))
+ )
+ (fp_line (start -2.667 1.778) (end -2.667 1.905) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.667 1.905) (end 2.667 1.905) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.667 -1.905) (end -2.667 -1.905) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.667 -1.905) (end -2.667 1.778) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.667 -0.508) (end -2.159 -0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.159 -0.508) (end -2.159 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start -2.159 0.508) (end -2.667 0.508) (layer F.SilkS) (width 0.127))
+ (fp_line (start 2.667 -1.905) (end 2.667 1.905) (layer F.SilkS) (width 0.127))
+ (pad 8 smd rect (at -1.905 -2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask))
+ (pad 1 smd rect (at -1.905 2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 176 /graphic/HDOUT))
+ (pad 7 smd rect (at -0.635 -2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 200 /graphic/VOSC))
+ (pad 6 smd rect (at 0.635 -2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 166 /graphic/14MHZOUT))
+ (pad 5 smd rect (at 1.905 -2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 200 /graphic/VOSC))
+ (pad 2 smd rect (at -0.635 2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 177 /graphic/HDREFOUT))
+ (pad 3 smd rect (at 0.635 2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 4 smd rect (at 1.905 2.667) (size 0.59944 1.39954) (layers Composant F.Paste F.Mask)
+ (net 200 /graphic/VOSC))
+ (model SMD_Packages.3dshapes/SOIC-8-N.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.32 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module footprints:PLCC84 (layer Composant) (tedit 200000) (tstamp 5402D27A)
+ (at 311.277 112.649 90)
+ (descr "Support Plcc 84 pins, pads ronds")
+ (tags PLCC)
+ (path /4BF03689/32F9E7F1)
+ (fp_text reference U8 (at 0 -2.54 90) (layer F.SilkS)
+ (effects (font (size 3.33756 1.94818) (thickness 0.3048)))
+ )
+ (fp_text value BT253 (at 0 3.81 90) (layer F.SilkS)
+ (effects (font (size 2.90576 1.69672) (thickness 0.3048)))
+ )
+ (fp_line (start -10.16 6.35) (end -7.62 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.62 10.16) (end 10.16 10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 10.16) (end 10.16 -10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start 10.16 -10.16) (end -10.16 -10.16) (layer F.SilkS) (width 0.381))
+ (fp_line (start -16.51 -16.51) (end -16.51 16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start -16.51 16.51) (end 16.51 16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start 16.51 16.51) (end 16.51 -16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start 16.51 -16.51) (end -16.51 -16.51) (layer F.SilkS) (width 0.381))
+ (fp_line (start -10.16 -10.16) (end -10.16 6.35) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -15.24 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 thru_hole circle (at -12.7 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 3 thru_hole circle (at -15.24 2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 4 thru_hole circle (at -12.7 2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole circle (at -15.24 5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole circle (at -12.7 5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 329 "Net-(R36-Pad2)"))
+ (pad 7 thru_hole circle (at -15.24 7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 280 "Net-(C36-Pad1)"))
+ (pad 8 thru_hole circle (at -12.7 7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 338 /ESVIDEO-RVB/CSYNCIN-))
+ (pad 9 thru_hole circle (at -15.24 10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 10 thru_hole circle (at -12.7 10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 11 thru_hole circle (at -15.24 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 12 thru_hole circle (at -12.7 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 13 thru_hole circle (at -12.7 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 14 thru_hole circle (at -10.16 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 15 thru_hole circle (at -10.16 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 16 thru_hole circle (at -7.62 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 17 thru_hole circle (at -7.62 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /ESVIDEO-RVB/PCA0))
+ (pad 18 thru_hole circle (at -5.08 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 339 /ESVIDEO-RVB/PCA1))
+ (pad 19 thru_hole circle (at -5.08 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /ESVIDEO-RVB/PCA2))
+ (pad 20 thru_hole circle (at -2.54 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 340 /ESVIDEO-RVB/RDCAD-))
+ (pad 21 thru_hole circle (at -2.54 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 22 thru_hole circle (at 0 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 23 thru_hole circle (at 0 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 24 thru_hole circle (at 2.54 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 341 /ESVIDEO-RVB/WRCAD-))
+ (pad 25 thru_hole circle (at 2.54 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 342 /ESVIDEO-RVB/TVB7))
+ (pad 26 thru_hole circle (at 5.08 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 343 /ESVIDEO-RVB/TVB6))
+ (pad 27 thru_hole circle (at 5.08 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 344 /ESVIDEO-RVB/TVB5))
+ (pad 28 thru_hole circle (at 7.62 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 345 /ESVIDEO-RVB/TVB4))
+ (pad 29 thru_hole circle (at 7.62 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /ESVIDEO-RVB/TVB3))
+ (pad 30 thru_hole circle (at 10.16 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /ESVIDEO-RVB/TVB2))
+ (pad 31 thru_hole circle (at 10.16 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 346 /ESVIDEO-RVB/TVB1))
+ (pad 32 thru_hole circle (at 12.7 15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 347 /ESVIDEO-RVB/TVB0))
+ (pad 33 thru_hole circle (at 15.24 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 348 /ESVIDEO-RVB/TVG7))
+ (pad 34 thru_hole circle (at 12.7 12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 349 /ESVIDEO-RVB/TVG6))
+ (pad 35 thru_hole circle (at 15.24 10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /ESVIDEO-RVB/TVG5))
+ (pad 36 thru_hole circle (at 12.7 10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /ESVIDEO-RVB/TVG4))
+ (pad 37 thru_hole circle (at 15.24 7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 350 /ESVIDEO-RVB/CLAMP))
+ (pad 38 thru_hole circle (at 12.7 7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 169 /graphic/CADCLK))
+ (pad 39 thru_hole circle (at 15.24 5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 169 /graphic/CADCLK))
+ (pad 40 thru_hole circle (at 12.7 5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 169 /graphic/CADCLK))
+ (pad 41 thru_hole circle (at 15.24 2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 42 thru_hole circle (at 12.7 2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 43 thru_hole circle (at 15.24 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 44 thru_hole circle (at 12.7 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 45 thru_hole circle (at 15.24 -2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /ESVIDEO-RVB/TVG3))
+ (pad 46 thru_hole circle (at 12.7 -2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /ESVIDEO-RVB/TVG2))
+ (pad 47 thru_hole circle (at 15.24 -5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /ESVIDEO-RVB/TVG1))
+ (pad 48 thru_hole circle (at 12.7 -5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /ESVIDEO-RVB/TVG0))
+ (pad 49 thru_hole circle (at 15.24 -7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /ESVIDEO-RVB/TVR7))
+ (pad 50 thru_hole circle (at 12.7 -7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /ESVIDEO-RVB/TVR6))
+ (pad 51 thru_hole circle (at 15.24 -10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 /ESVIDEO-RVB/TVR5))
+ (pad 52 thru_hole circle (at 12.7 -10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 351 /ESVIDEO-RVB/TVR4))
+ (pad 53 thru_hole circle (at 15.24 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 352 /ESVIDEO-RVB/TVR3))
+ (pad 54 thru_hole circle (at 12.7 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /ESVIDEO-RVB/TVR2))
+ (pad 55 thru_hole circle (at 12.7 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /ESVIDEO-RVB/TVR1))
+ (pad 56 thru_hole circle (at 10.16 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /ESVIDEO-RVB/TVR0))
+ (pad 57 thru_hole circle (at 10.16 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /ESVIDEO-RVB/OE_RVB-))
+ (pad 58 thru_hole circle (at 7.62 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 353 "Net-(U8-Pad58)"))
+ (pad 59 thru_hole circle (at 7.62 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 350 /ESVIDEO-RVB/CLAMP))
+ (pad 60 thru_hole circle (at 5.08 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 354 "Net-(U8-Pad60)"))
+ (pad 61 thru_hole circle (at 5.08 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 62 thru_hole circle (at 2.54 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 355 "Net-(U8-Pad62)"))
+ (pad 63 thru_hole circle (at 2.54 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 64 thru_hole circle (at 0 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 65 thru_hole circle (at 0 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 66 thru_hole circle (at -2.54 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 67 thru_hole circle (at -2.54 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 68 thru_hole circle (at -5.08 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 353 "Net-(U8-Pad58)"))
+ (pad 69 thru_hole circle (at -5.08 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 330 "Net-(R38-Pad1)"))
+ (pad 70 thru_hole circle (at -7.62 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 354 "Net-(U8-Pad60)"))
+ (pad 71 thru_hole circle (at -7.62 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 72 thru_hole circle (at -10.16 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 355 "Net-(U8-Pad62)"))
+ (pad 73 thru_hole circle (at -10.16 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 74 thru_hole circle (at -12.7 -15.24 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 75 thru_hole circle (at -15.24 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 286 "Net-(C41-Pad1)"))
+ (pad 76 thru_hole circle (at -12.7 -12.7 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 77 thru_hole circle (at -15.24 -10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 78 thru_hole circle (at -12.7 -10.16 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 79 thru_hole circle (at -15.24 -7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 284 "Net-(C40-Pad1)"))
+ (pad 80 thru_hole circle (at -12.7 -7.62 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 81 thru_hole circle (at -15.24 -5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 82 thru_hole circle (at -12.7 -5.08 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 18 /ESVIDEO-RVB/REF+))
+ (pad 83 thru_hole circle (at -15.24 -2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 282 "Net-(C39-Pad1)"))
+ (pad 84 thru_hole circle (at -12.7 -2.54 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (model Sockets.3dshapes/PLCC68.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module footprints:PLCC68 (layer Composant) (tedit 200000) (tstamp 5402D2DA)
+ (at 343.535 114.935 270)
+ (descr "Support Plcc 68 pins, pads ronds")
+ (tags PLCC)
+ (path /4BF03689/32F9E902)
+ (fp_text reference U9 (at 0 -2.54 270) (layer F.SilkS)
+ (effects (font (size 2.56794 1.50622) (thickness 0.3048)))
+ )
+ (fp_text value BT473 (at 0 2.54 270) (layer F.SilkS)
+ (effects (font (size 2.55778 1.48844) (thickness 0.3048)))
+ )
+ (fp_line (start -13.97 -13.97) (end 13.97 -13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start 13.97 -13.97) (end 13.97 13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start 13.97 13.97) (end -13.97 13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start -13.97 13.97) (end -13.97 -13.97) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.62 -7.62) (end 7.62 -7.62) (layer F.SilkS) (width 0.381))
+ (fp_line (start 7.62 -7.62) (end 7.62 7.62) (layer F.SilkS) (width 0.381))
+ (fp_line (start 7.62 7.62) (end -5.08 7.62) (layer F.SilkS) (width 0.381))
+ (fp_line (start -5.08 7.62) (end -7.62 5.08) (layer F.SilkS) (width 0.381))
+ (fp_line (start -7.62 5.08) (end -7.62 -7.62) (layer F.SilkS) (width 0.381))
+ (pad 1 thru_hole rect (at -12.7 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 2 thru_hole circle (at -10.16 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 3 thru_hole circle (at -12.7 2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 4 thru_hole circle (at -10.16 2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 5 thru_hole circle (at -12.7 5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole circle (at -10.16 5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole circle (at -12.7 7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 356 /ESVIDEO-RVB/BLANK-))
+ (pad 8 thru_hole circle (at -10.16 7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 328 /graphic/CSYNC-OUT))
+ (pad 9 thru_hole circle (at -12.7 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 171 /graphic/CDACLK))
+ (pad 10 thru_hole circle (at -10.16 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 357 /ESVIDEO-RVB/TVI0))
+ (pad 11 thru_hole circle (at -10.16 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 358 /ESVIDEO-RVB/TVI1))
+ (pad 12 thru_hole circle (at -7.62 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 13 thru_hole circle (at -7.62 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 14 thru_hole circle (at -5.08 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 15 thru_hole circle (at -5.08 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 16 thru_hole circle (at -2.54 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 17 thru_hole circle (at -2.54 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 18 thru_hole circle (at 0 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 19 thru_hole circle (at 0 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 20 thru_hole circle (at 2.54 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 21 thru_hole circle (at 2.54 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 22 thru_hole circle (at 5.08 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 17 /ESVIDEO-RVB/RDCDA-))
+ (pad 23 thru_hole circle (at 5.08 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 359 /ESVIDEO-RVB/WRCDA-))
+ (pad 24 thru_hole circle (at 7.62 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 15 /ESVIDEO-RVB/PCA0))
+ (pad 25 thru_hole circle (at 7.62 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 339 /ESVIDEO-RVB/PCA1))
+ (pad 26 thru_hole circle (at 10.16 12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 16 /ESVIDEO-RVB/PCA2))
+ (pad 27 thru_hole circle (at 12.7 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 28 thru_hole circle (at 10.16 10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 360 /ESVIDEO-RVB/OE_PAL-))
+ (pad 29 thru_hole circle (at 12.7 7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 14 /ESVIDEO-RVB/OE_RVB-))
+ (pad 30 thru_hole circle (at 10.16 7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 31 thru_hole circle (at 12.7 5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 32 thru_hole circle (at 10.16 5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 33 thru_hole circle (at 12.7 2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 34 thru_hole circle (at 10.16 2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 35 thru_hole circle (at 12.7 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 36 thru_hole circle (at 10.16 0 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 33 /ESVIDEO-RVB/VAA))
+ (pad 37 thru_hole circle (at 12.7 -2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 205 /modul/BLEU))
+ (pad 38 thru_hole circle (at 10.16 -2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 12 /ESVIDEO-RVB/GREEN))
+ (pad 39 thru_hole circle (at 12.7 -5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 4 /ESVIDEO-RVB/BLUE))
+ (pad 40 thru_hole circle (at 10.16 -5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 278 "Net-(C34-Pad2)"))
+ (pad 41 thru_hole circle (at 12.7 -7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 279 "Net-(C35-Pad2)"))
+ (pad 42 thru_hole circle (at 10.16 -7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 279 "Net-(C35-Pad2)"))
+ (pad 43 thru_hole circle (at 12.7 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 277 "Net-(C32-Pad2)"))
+ (pad 44 thru_hole circle (at 10.16 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 277 "Net-(C32-Pad2)"))
+ (pad 45 thru_hole circle (at 10.16 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 27 /ESVIDEO-RVB/TVR0))
+ (pad 46 thru_hole circle (at 7.62 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 28 /ESVIDEO-RVB/TVR1))
+ (pad 47 thru_hole circle (at 7.62 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 29 /ESVIDEO-RVB/TVR2))
+ (pad 48 thru_hole circle (at 5.08 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 352 /ESVIDEO-RVB/TVR3))
+ (pad 49 thru_hole circle (at 5.08 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 351 /ESVIDEO-RVB/TVR4))
+ (pad 50 thru_hole circle (at 2.54 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 30 /ESVIDEO-RVB/TVR5))
+ (pad 51 thru_hole circle (at 2.54 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 31 /ESVIDEO-RVB/TVR6))
+ (pad 52 thru_hole circle (at 0 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 32 /ESVIDEO-RVB/TVR7))
+ (pad 53 thru_hole circle (at 0 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 21 /ESVIDEO-RVB/TVG0))
+ (pad 54 thru_hole circle (at -2.54 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 22 /ESVIDEO-RVB/TVG1))
+ (pad 55 thru_hole circle (at -2.54 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 23 /ESVIDEO-RVB/TVG2))
+ (pad 56 thru_hole circle (at -5.08 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 24 /ESVIDEO-RVB/TVG3))
+ (pad 57 thru_hole circle (at -5.08 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 25 /ESVIDEO-RVB/TVG4))
+ (pad 58 thru_hole circle (at -7.62 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 26 /ESVIDEO-RVB/TVG5))
+ (pad 59 thru_hole circle (at -7.62 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 349 /ESVIDEO-RVB/TVG6))
+ (pad 60 thru_hole circle (at -10.16 -12.7 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 348 /ESVIDEO-RVB/TVG7))
+ (pad 61 thru_hole circle (at -12.7 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 347 /ESVIDEO-RVB/TVB0))
+ (pad 62 thru_hole circle (at -10.16 -10.16 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 346 /ESVIDEO-RVB/TVB1))
+ (pad 63 thru_hole circle (at -12.7 -7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 19 /ESVIDEO-RVB/TVB2))
+ (pad 64 thru_hole circle (at -10.16 -7.62 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 20 /ESVIDEO-RVB/TVB3))
+ (pad 65 thru_hole circle (at -12.7 -5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 345 /ESVIDEO-RVB/TVB4))
+ (pad 66 thru_hole circle (at -10.16 -5.08 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 344 /ESVIDEO-RVB/TVB5))
+ (pad 67 thru_hole circle (at -12.7 -2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 343 /ESVIDEO-RVB/TVB6))
+ (pad 68 thru_hole circle (at -10.16 -2.54 270) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 342 /ESVIDEO-RVB/TVB7))
+ (model Sockets.3dshapes/PLCC68.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:PQFP160 (layer Composant) (tedit 54019107) (tstamp 5402D32A)
+ (at 335.407 76.327)
+ (descr "Module CMS Pqfp 160 pins")
+ (tags "CMS PQFP")
+ (path /4BF03681/BECCB834)
+ (attr smd)
+ (fp_text reference U10 (at 0 -2.54) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (fp_text value BT812 (at 0 2.54) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (fp_text user 1 (at 13.589 -15.494) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 12.827 -13.97) (end 14.097 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -14.0462 14.1732) (end 14.097 14.1732) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.827 -13.97) (end -14.0462 -13.97) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -14.0462 -13.97) (end -14.0462 14.1732) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 14.097 14.1732) (end 14.097 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_circle (center 12.192 -12.065) (end 12.192 -11.303) (layer F.SilkS) (width 0.3048))
+ (pad 1 smd rect (at 12.7 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 2 smd rect (at 12.065 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 3 smd rect (at 11.4046 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 4 smd rect (at 10.7696 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 274 "Net-(C8-Pad1)"))
+ (pad 5 smd rect (at 10.1092 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 6 smd rect (at 9.4488 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 242 /pal-ntsc.sch/Y_SYNC))
+ (pad 7 smd rect (at 8.8138 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 8 smd rect (at 8.1534 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 9 smd rect (at 7.5184 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 10 smd rect (at 6.858 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 11 smd rect (at 6.1976 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 12 smd rect (at 5.5626 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 13 smd rect (at 4.9022 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 14 smd rect (at 4.2672 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 15 smd rect (at 3.6068 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 16 smd rect (at 2.9464 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 17 smd rect (at 2.3114 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 18 smd rect (at 1.651 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 19 smd rect (at 1.016 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 20 smd rect (at 0.3556 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 21 smd rect (at -0.3048 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 22 smd rect (at -0.9398 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 23 smd rect (at -1.6002 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 24 smd rect (at -2.2352 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 25 smd rect (at -2.8956 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 26 smd rect (at -3.556 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 27 smd rect (at -4.191 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 28 smd rect (at -4.8514 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 29 smd rect (at -5.4864 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 30 smd rect (at -6.1468 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 31 smd rect (at -6.8072 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 32 smd rect (at -7.4422 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 33 smd rect (at -8.1026 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 34 smd rect (at -8.7376 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 361 /graphic/VD_PAL-))
+ (pad 35 smd rect (at -9.398 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 36 smd rect (at -10.0584 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 362 /graphic/HD_PAL-))
+ (pad 37 smd rect (at -10.6934 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 38 smd rect (at -11.3538 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 39 smd rect (at -11.9888 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 40 smd rect (at -12.6492 -15.494) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 41 smd rect (at -15.5702 -12.573) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 42 smd rect (at -15.5702 -11.938) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 43 smd rect (at -15.5702 -11.2776) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 44 smd rect (at -15.5702 -10.6426) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 45 smd rect (at -15.5702 -9.9822) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 46 smd rect (at -15.5702 -9.3218) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 360 /ESVIDEO-RVB/OE_PAL-))
+ (pad 47 smd rect (at -15.5702 -8.6868) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 360 /ESVIDEO-RVB/OE_PAL-))
+ (pad 48 smd rect (at -15.5702 -8.0264) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 342 /ESVIDEO-RVB/TVB7))
+ (pad 49 smd rect (at -15.5702 -7.3914) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 343 /ESVIDEO-RVB/TVB6))
+ (pad 50 smd rect (at -15.5702 -6.731) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 344 /ESVIDEO-RVB/TVB5))
+ (pad 51 smd rect (at -15.5702 -6.0706) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 345 /ESVIDEO-RVB/TVB4))
+ (pad 52 smd rect (at -15.5702 -5.4356) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 20 /ESVIDEO-RVB/TVB3))
+ (pad 53 smd rect (at -15.5702 -4.7752) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 19 /ESVIDEO-RVB/TVB2))
+ (pad 54 smd rect (at -15.5702 -4.1402) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 346 /ESVIDEO-RVB/TVB1))
+ (pad 55 smd rect (at -15.5702 -3.4798) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 347 /ESVIDEO-RVB/TVB0))
+ (pad 56 smd rect (at -15.5702 -2.8194) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 57 smd rect (at -15.5702 -2.1844) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 58 smd rect (at -15.5702 -1.524) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 32 /ESVIDEO-RVB/TVR7))
+ (pad 59 smd rect (at -15.5702 -0.889) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 31 /ESVIDEO-RVB/TVR6))
+ (pad 60 smd rect (at -15.5702 -0.2286) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 30 /ESVIDEO-RVB/TVR5))
+ (pad 61 smd rect (at -15.5702 0.4318) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 351 /ESVIDEO-RVB/TVR4))
+ (pad 62 smd rect (at -15.5702 1.0668) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 352 /ESVIDEO-RVB/TVR3))
+ (pad 63 smd rect (at -15.5702 1.7272) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 29 /ESVIDEO-RVB/TVR2))
+ (pad 64 smd rect (at -15.5702 2.3622) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 28 /ESVIDEO-RVB/TVR1))
+ (pad 65 smd rect (at -15.5702 3.0226) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 27 /ESVIDEO-RVB/TVR0))
+ (pad 66 smd rect (at -15.5702 3.683) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 67 smd rect (at -15.5702 4.318) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 348 /ESVIDEO-RVB/TVG7))
+ (pad 68 smd rect (at -15.5702 4.9784) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 349 /ESVIDEO-RVB/TVG6))
+ (pad 69 smd rect (at -15.5702 5.6134) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 26 /ESVIDEO-RVB/TVG5))
+ (pad 70 smd rect (at -15.5702 6.2738) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 25 /ESVIDEO-RVB/TVG4))
+ (pad 71 smd rect (at -15.5702 6.9342) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 24 /ESVIDEO-RVB/TVG3))
+ (pad 72 smd rect (at -15.5702 7.5692) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 23 /ESVIDEO-RVB/TVG2))
+ (pad 73 smd rect (at -15.5702 8.2296) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 22 /ESVIDEO-RVB/TVG1))
+ (pad 74 smd rect (at -15.5702 8.8646) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 21 /ESVIDEO-RVB/TVG0))
+ (pad 75 smd rect (at -15.5702 9.525) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 76 smd rect (at -15.5702 10.1854) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 77 smd rect (at -15.5702 10.8204) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 78 smd rect (at -15.5702 11.4808) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 79 smd rect (at -15.5702 12.1158) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 80 smd rect (at -15.5702 12.7762) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 121 smd rect (at 15.621 12.7762) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 122 smd rect (at 15.621 12.1158) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 123 smd rect (at 15.621 11.4808) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 124 smd rect (at 15.621 10.8204) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 125 smd rect (at 15.621 10.1854) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 238 /pal-ntsc.sch/C-VIDEO))
+ (pad 126 smd rect (at 15.621 9.525) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 127 smd rect (at 15.621 8.8646) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 128 smd rect (at 15.621 8.2296) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 129 smd rect (at 15.621 7.5692) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 130 smd rect (at 15.621 6.9342) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 131 smd rect (at 15.621 6.2738) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 132 smd rect (at 15.621 5.6134) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 133 smd rect (at 15.621 4.9784) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 134 smd rect (at 15.621 4.318) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 135 smd rect (at 15.621 3.683) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 325 "Net-(R27-Pad1)"))
+ (pad 136 smd rect (at 15.621 3.0226) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 137 smd rect (at 15.621 2.3622) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 272 "Net-(C6-Pad1)"))
+ (pad 138 smd rect (at 15.621 1.7272) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 139 smd rect (at 15.621 1.0668) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 140 smd rect (at 15.621 0.4318) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 266 "Net-(C1-Pad2)"))
+ (pad 141 smd rect (at 15.621 -0.2286) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 142 smd rect (at 15.621 -0.889) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 143 smd rect (at 15.621 -1.524) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 144 smd rect (at 15.621 -2.1844) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 272 "Net-(C6-Pad1)"))
+ (pad 145 smd rect (at 15.621 -2.8194) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 146 smd rect (at 15.621 -3.4798) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 147 smd rect (at 15.621 -4.1402) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 148 smd rect (at 15.621 -4.7752) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 149 smd rect (at 15.621 -5.4356) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 150 smd rect (at 15.621 -6.0706) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 151 smd rect (at 15.621 -6.731) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 152 smd rect (at 15.621 -7.3914) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 153 smd rect (at 15.621 -8.0264) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 154 smd rect (at 15.621 -8.6868) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 155 smd rect (at 15.621 -9.3218) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 156 smd rect (at 15.621 -9.9822) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 241 /pal-ntsc.sch/Y-VIDEO))
+ (pad 157 smd rect (at 15.621 -10.6426) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 158 smd rect (at 15.621 -11.2776) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 159 smd rect (at 15.621 -11.938) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 160 smd rect (at 15.621 -12.573) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 81 smd rect (at -12.6492 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 82 smd rect (at -11.9888 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 83 smd rect (at -11.3538 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 168 /graphic/BT812_WR-))
+ (pad 84 smd rect (at -10.6934 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 15 /ESVIDEO-RVB/PCA0))
+ (pad 85 smd rect (at -10.0584 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 339 /ESVIDEO-RVB/PCA1))
+ (pad 86 smd rect (at -9.398 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 167 /graphic/BT812_RD-))
+ (pad 87 smd rect (at -8.7376 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 239 /pal-ntsc.sch/RESET-))
+ (pad 88 smd rect (at -8.1026 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 89 smd rect (at -7.4422 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 90 smd rect (at -6.8072 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 91 smd rect (at -6.1468 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 92 smd rect (at -5.4864 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 93 smd rect (at -4.8514 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 94 smd rect (at -4.191 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 95 smd rect (at -3.556 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 96 smd rect (at -2.8956 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 97 smd rect (at -2.2352 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 98 smd rect (at -1.6002 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 99 smd rect (at -0.9398 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 100 smd rect (at -0.3048 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 101 smd rect (at 0.3556 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 102 smd rect (at 1.016 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 103 smd rect (at 1.651 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 104 smd rect (at 2.3114 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 363 /graphic/F_PALIN))
+ (pad 105 smd rect (at 2.9464 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 106 smd rect (at 3.6068 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 107 smd rect (at 4.2672 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 108 smd rect (at 4.9022 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 301 "Net-(C66-Pad2)"))
+ (pad 109 smd rect (at 5.5626 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 300 "Net-(C65-Pad2)"))
+ (pad 110 smd rect (at 6.1976 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 276 "Net-(C16-Pad1)"))
+ (pad 111 smd rect (at 6.858 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 112 smd rect (at 7.5184 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 113 smd rect (at 8.1534 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 272 "Net-(C6-Pad1)"))
+ (pad 114 smd rect (at 8.8138 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 273 "Net-(C7-Pad1)"))
+ (pad 115 smd rect (at 9.4488 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 324 "Net-(R19-Pad2)"))
+ (pad 116 smd rect (at 10.1092 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 117 smd rect (at 10.7696 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 270 "Net-(C5-Pad1)"))
+ (pad 118 smd rect (at 11.4046 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 119 smd rect (at 12.065 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (pad 120 smd rect (at 12.7 15.6972) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 240 /pal-ntsc.sch/VAF))
+ (model SMD_Packages.3dshapes/PQFP-160.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.512 0.512 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:PQFP160 (layer Composant) (tedit 54019107) (tstamp 5402D3D4)
+ (at 141.605 129.54 180)
+ (descr "Module CMS Pqfp 160 pins")
+ (tags "CMS PQFP")
+ (path /4BF03687/21FA8347)
+ (attr smd)
+ (fp_text reference U11 (at 0 -2.54 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (fp_text value S5933_PQ160 (at 0 2.54 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (fp_text user 1 (at 13.589 -15.494 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 12.827 -13.97) (end 14.097 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -14.0462 14.1732) (end 14.097 14.1732) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.827 -13.97) (end -14.0462 -13.97) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -14.0462 -13.97) (end -14.0462 14.1732) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 14.097 14.1732) (end 14.097 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_circle (center 12.192 -12.065) (end 12.192 -11.303) (layer F.SilkS) (width 0.3048))
+ (pad 1 smd rect (at 12.7 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 99 /buspci.sch/EQ0))
+ (pad 2 smd rect (at 12.065 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 127 /buspci.sch/P_AD23))
+ (pad 3 smd rect (at 11.4046 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 126 /buspci.sch/P_AD22))
+ (pad 4 smd rect (at 10.7696 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 125 /buspci.sch/P_AD21))
+ (pad 5 smd rect (at 10.1092 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 234 /muxdata/DPC31))
+ (pad 6 smd rect (at 9.4488 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 124 /buspci.sch/P_AD20))
+ (pad 7 smd rect (at 8.8138 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 122 /buspci.sch/P_AD19))
+ (pad 8 smd rect (at 8.1534 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 121 /buspci.sch/P_AD18))
+ (pad 9 smd rect (at 7.5184 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 100 /buspci.sch/EQ1))
+ (pad 10 smd rect (at 6.858 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 11 smd rect (at 6.1976 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 12 smd rect (at 5.5626 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 120 /buspci.sch/P_AD17))
+ (pad 13 smd rect (at 4.9022 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 233 /muxdata/DPC30))
+ (pad 14 smd rect (at 4.2672 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 119 /buspci.sch/P_AD16))
+ (pad 15 smd rect (at 3.6068 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 145 /buspci.sch/P_C/BE2#))
+ (pad 16 smd rect (at 2.9464 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 149 /buspci.sch/P_FRAME#))
+ (pad 17 smd rect (at 2.3114 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 101 /buspci.sch/EQ2))
+ (pad 18 smd rect (at 1.651 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 153 /buspci.sch/P_IRDY#))
+ (pad 19 smd rect (at 1.016 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 161 /buspci.sch/P_TRDY#))
+ (pad 20 smd rect (at 0.3556 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 148 /buspci.sch/P_DEVSEL#))
+ (pad 21 smd rect (at -0.3048 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 102 /buspci.sch/EQ3))
+ (pad 22 smd rect (at -0.9398 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 160 /buspci.sch/P_STOP#))
+ (pad 23 smd rect (at -1.6002 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 154 /buspci.sch/P_LOCK#))
+ (pad 24 smd rect (at -2.2352 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 156 /buspci.sch/P_PERR#))
+ (pad 25 smd rect (at -2.8956 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 232 /muxdata/DPC29))
+ (pad 26 smd rect (at -3.556 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 159 /buspci.sch/P_SERR#))
+ (pad 27 smd rect (at -4.191 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 155 /buspci.sch/P_PAR))
+ (pad 28 smd rect (at -4.8514 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 144 /buspci.sch/P_C/BE1#))
+ (pad 29 smd rect (at -5.4864 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 103 /buspci.sch/EQ4))
+ (pad 30 smd rect (at -6.1468 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 31 smd rect (at -6.8072 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 32 smd rect (at -7.4422 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 118 /buspci.sch/P_AD15))
+ (pad 33 smd rect (at -8.1026 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 104 /buspci.sch/EQ5))
+ (pad 34 smd rect (at -8.7376 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 117 /buspci.sch/P_AD14))
+ (pad 35 smd rect (at -9.398 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 116 /buspci.sch/P_AD13))
+ (pad 36 smd rect (at -10.0584 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 115 /buspci.sch/P_AD12))
+ (pad 37 smd rect (at -10.6934 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 231 /muxdata/DPC28))
+ (pad 38 smd rect (at -11.3538 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 114 /buspci.sch/P_AD11))
+ (pad 39 smd rect (at -11.9888 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 113 /buspci.sch/P_AD10))
+ (pad 40 smd rect (at -12.6492 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 142 /buspci.sch/P_AD9))
+ (pad 41 smd rect (at -15.5702 -12.573 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 105 /buspci.sch/EQ6))
+ (pad 42 smd rect (at -15.5702 -11.938 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 141 /buspci.sch/P_AD8))
+ (pad 43 smd rect (at -15.5702 -11.2776 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 143 /buspci.sch/P_C/BE0#))
+ (pad 44 smd rect (at -15.5702 -10.6426 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 140 /buspci.sch/P_AD7))
+ (pad 45 smd rect (at -15.5702 -9.9822 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 230 /muxdata/DPC27))
+ (pad 46 smd rect (at -15.5702 -9.3218 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 139 /buspci.sch/P_AD6))
+ (pad 47 smd rect (at -15.5702 -8.6868 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 138 /buspci.sch/P_AD5))
+ (pad 48 smd rect (at -15.5702 -8.0264 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 137 /buspci.sch/P_AD4))
+ (pad 49 smd rect (at -15.5702 -7.3914 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 106 /buspci.sch/EQ7))
+ (pad 50 smd rect (at -15.5702 -6.731 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 51 smd rect (at -15.5702 -6.0706 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 52 smd rect (at -15.5702 -5.4356 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 134 /buspci.sch/P_AD3))
+ (pad 53 smd rect (at -15.5702 -4.7752 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 229 /muxdata/DPC26))
+ (pad 54 smd rect (at -15.5702 -4.1402 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 123 /buspci.sch/P_AD2))
+ (pad 55 smd rect (at -15.5702 -3.4798 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 112 /buspci.sch/P_AD1))
+ (pad 56 smd rect (at -15.5702 -2.8194 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 111 /buspci.sch/P_AD0))
+ (pad 57 smd rect (at -15.5702 -2.1844 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 195 /graphic/IRQ_SLR))
+ (pad 58 smd rect (at -15.5702 -1.524 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 152 /buspci.sch/P_INTA#))
+ (pad 59 smd rect (at -15.5702 -0.889 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 319 "Net-(R5-Pad1)"))
+ (pad 60 smd rect (at -15.5702 -0.2286 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 364 /buspci.sch/BE-3))
+ (pad 61 smd rect (at -15.5702 0.4318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 85 /buspci.sch/EA1))
+ (pad 62 smd rect (at -15.5702 1.0668 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 365 /buspci.sch/BE-2))
+ (pad 63 smd rect (at -15.5702 1.7272 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 366 /buspci.sch/BE-1))
+ (pad 64 smd rect (at -15.5702 2.3622 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 367 /buspci.sch/ADR5))
+ (pad 65 smd rect (at -15.5702 3.0226 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 228 /muxdata/DPC25))
+ (pad 66 smd rect (at -15.5702 3.683 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 368 /buspci.sch/ADR4))
+ (pad 67 smd rect (at -15.5702 4.318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 369 /buspci.sch/ADR3))
+ (pad 68 smd rect (at -15.5702 4.9784 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 370 /buspci.sch/ADR2))
+ (pad 69 smd rect (at -15.5702 5.6134 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 92 /buspci.sch/EA2))
+ (pad 70 smd rect (at -15.5702 6.2738 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 71 smd rect (at -15.5702 6.9342 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 72 smd rect (at -15.5702 7.5692 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 333 /buspci.sch/RD-))
+ (pad 73 smd rect (at -15.5702 8.2296 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 93 /buspci.sch/EA3))
+ (pad 74 smd rect (at -15.5702 8.8646 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 332 /buspci.sch/WR-))
+ (pad 75 smd rect (at -15.5702 9.525 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 331 /buspci.sch/SELECT-))
+ (pad 76 smd rect (at -15.5702 10.1854 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 218 /muxdata/DPC15))
+ (pad 77 smd rect (at -15.5702 10.8204 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 227 /muxdata/DPC24))
+ (pad 78 smd rect (at -15.5702 11.4808 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 217 /muxdata/DPC14))
+ (pad 79 smd rect (at -15.5702 12.1158 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 216 /muxdata/DPC13))
+ (pad 80 smd rect (at -15.5702 12.7762 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 215 /muxdata/DPC12))
+ (pad 121 smd rect (at 15.621 12.7762 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 86 /buspci.sch/EA10))
+ (pad 122 smd rect (at 15.621 12.1158 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 371 /buspci.sch/PTNUM1))
+ (pad 123 smd rect (at 15.621 11.4808 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 109 /buspci.sch/PTNUM0))
+ (pad 124 smd rect (at 15.621 10.8204 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 372 /buspci.sch/IRQ-))
+ (pad 125 smd rect (at 15.621 10.1854 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 222 /muxdata/DPC19))
+ (pad 126 smd rect (at 15.621 9.525 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 239 /pal-ntsc.sch/RESET-))
+ (pad 127 smd rect (at 15.621 8.8646 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 327 "Net-(R29-Pad2)"))
+ (pad 128 smd rect (at 15.621 8.2296 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 326 "Net-(R28-Pad2)"))
+ (pad 129 smd rect (at 15.621 7.5692 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 87 /buspci.sch/EA11))
+ (pad 130 smd rect (at 15.621 6.9342 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 131 smd rect (at 15.621 6.2738 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 132 smd rect (at 15.621 5.6134 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 83 /buspci.sch/ADR6))
+ (pad 133 smd rect (at 15.621 4.9784 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 221 /muxdata/DPC18))
+ (pad 134 smd rect (at 15.621 4.318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 135 smd rect (at 15.621 3.683 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 321 "Net-(R7-Pad1)"))
+ (pad 136 smd rect (at 15.621 3.0226 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 137 smd rect (at 15.621 2.3622 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 88 /buspci.sch/EA12))
+ (pad 138 smd rect (at 15.621 1.7272 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 320 "Net-(R6-Pad1)"))
+ (pad 139 smd rect (at 15.621 1.0668 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 158 /buspci.sch/P_RST#))
+ (pad 140 smd rect (at 15.621 0.4318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 84 /buspci.sch/BPCLK))
+ (pad 141 smd rect (at 15.621 -0.2286 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 89 /buspci.sch/EA13))
+ (pad 142 smd rect (at 15.621 -0.889 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 147 /buspci.sch/P_CLK))
+ (pad 143 smd rect (at 15.621 -1.524 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 150 /buspci.sch/P_GNT#))
+ (pad 144 smd rect (at 15.621 -2.1844 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 157 /buspci.sch/P_REQ#))
+ (pad 145 smd rect (at 15.621 -2.8194 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 220 /muxdata/DPC17))
+ (pad 146 smd rect (at 15.621 -3.4798 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 136 /buspci.sch/P_AD31))
+ (pad 147 smd rect (at 15.621 -4.1402 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 135 /buspci.sch/P_AD30))
+ (pad 148 smd rect (at 15.621 -4.7752 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 133 /buspci.sch/P_AD29))
+ (pad 149 smd rect (at 15.621 -5.4356 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 90 /buspci.sch/EA14))
+ (pad 150 smd rect (at 15.621 -6.0706 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 151 smd rect (at 15.621 -6.731 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 152 smd rect (at 15.621 -7.3914 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 132 /buspci.sch/P_AD28))
+ (pad 153 smd rect (at 15.621 -8.0264 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 91 /buspci.sch/EA15))
+ (pad 154 smd rect (at 15.621 -8.6868 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 131 /buspci.sch/P_AD27))
+ (pad 155 smd rect (at 15.621 -9.3218 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 130 /buspci.sch/P_AD26))
+ (pad 156 smd rect (at 15.621 -9.9822 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 129 /buspci.sch/P_AD25))
+ (pad 157 smd rect (at 15.621 -10.6426 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 219 /muxdata/DPC16))
+ (pad 158 smd rect (at 15.621 -11.2776 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 128 /buspci.sch/P_AD24))
+ (pad 159 smd rect (at 15.621 -11.938 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 146 /buspci.sch/P_C/BE3#))
+ (pad 160 smd rect (at 15.621 -12.573 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 151 /buspci.sch/P_IDSEL))
+ (pad 81 smd rect (at -12.6492 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 94 /buspci.sch/EA4))
+ (pad 82 smd rect (at -11.9888 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 214 /muxdata/DPC11))
+ (pad 83 smd rect (at -11.3538 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 213 /muxdata/DPC10))
+ (pad 84 smd rect (at -10.6934 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 236 /muxdata/DPC9))
+ (pad 85 smd rect (at -10.0584 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 226 /muxdata/DPC23))
+ (pad 86 smd rect (at -9.398 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 235 /muxdata/DPC8))
+ (pad 87 smd rect (at -8.7376 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 373 /buspci.sch/BE-0))
+ (pad 88 smd rect (at -8.1026 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 89 smd rect (at -7.4422 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 95 /buspci.sch/EA5))
+ (pad 90 smd rect (at -6.8072 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 91 smd rect (at -6.1468 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 92 smd rect (at -5.4864 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 93 smd rect (at -4.8514 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 225 /muxdata/DPC22))
+ (pad 94 smd rect (at -4.191 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 95 smd rect (at -3.556 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 96 smd rect (at -2.8956 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 97 smd rect (at -2.2352 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 96 /buspci.sch/EA6))
+ (pad 98 smd rect (at -1.6002 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 99 smd rect (at -0.9398 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 100 smd rect (at -0.3048 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 101 smd rect (at 0.3556 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 97 /buspci.sch/EA7))
+ (pad 102 smd rect (at 1.016 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 163 /buspci.sch/WRFIFO-))
+ (pad 103 smd rect (at 1.651 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 164 /buspci.sch/WRFULL))
+ (pad 104 smd rect (at 2.3114 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 162 /buspci.sch/RDFIFO-))
+ (pad 105 smd rect (at 2.9464 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 224 /muxdata/DPC21))
+ (pad 106 smd rect (at 3.6068 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 374 /buspci.sch/RDEMPTY))
+ (pad 107 smd rect (at 4.2672 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 334 /buspci.sch/PTADR-))
+ (pad 108 smd rect (at 4.9022 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 375 /buspci.sch/PTWR))
+ (pad 109 smd rect (at 5.5626 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 165 /buspci.sch/X_IRQ))
+ (pad 110 smd rect (at 6.1976 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 111 smd rect (at 6.858 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 112 smd rect (at 7.5184 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 376 /buspci.sch/PTBURST-))
+ (pad 113 smd rect (at 8.1534 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 98 /buspci.sch/EA9))
+ (pad 114 smd rect (at 8.8138 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 107 /buspci.sch/PTATN-))
+ (pad 115 smd rect (at 9.4488 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 110 /buspci.sch/PTRDY-))
+ (pad 116 smd rect (at 10.1092 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 377 /buspci.sch/PTBE-0))
+ (pad 117 smd rect (at 10.7696 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 223 /muxdata/DPC20))
+ (pad 118 smd rect (at 11.4046 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 108 /buspci.sch/PTBE-1))
+ (pad 119 smd rect (at 12.065 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 378 /buspci.sch/PTBE-2))
+ (pad 120 smd rect (at 12.7 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 379 /buspci.sch/PTBE-3))
+ (model SMD_Packages.3dshapes/PQFP-160.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.512 0.512 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D47E)
+ (at 234.315 108.585)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036CE)
+ (fp_text reference U12 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 49 /RAMS/RAS5-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 49 /RAMS/RAS5-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D4D2)
+ (at 234.315 126.365)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/32FA1E5B)
+ (fp_text reference U13 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 381 /RAMS/RAS7-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 381 /RAMS/RAS7-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D526)
+ (at 234.315 117.475)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036CF)
+ (fp_text reference U14 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 382 /RAMS/RAS6-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 382 /RAMS/RAS6-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D57A)
+ (at 234.315 90.805)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036D1)
+ (fp_text reference U15 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 48 /RAMS/RAS3-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 48 /RAMS/RAS3-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D5CE)
+ (at 234.315 99.695)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036D0)
+ (fp_text reference U16 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 383 /RAMS/RAS4-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 383 /RAMS/RAS4-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D622)
+ (at 234.315 81.915)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036D2)
+ (fp_text reference U17 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 384 /RAMS/RAS2-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 384 /RAMS/RAS2-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D676)
+ (at 234.315 73.025)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036D3)
+ (fp_text reference U18 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 385 /RAMS/RAS1-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 385 /RAMS/RAS1-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module footprints:sim72 (layer Composant) (tedit 200000) (tstamp 5402D6CA)
+ (at 234.315 64.135)
+ (descr "Support 72 pins pour barettes SIMM 32 bits")
+ (tags SIMM)
+ (path /4BF03685/4BF036D4)
+ (fp_text reference U19 (at -18.542 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_text value SIM4X32 (at 11.176 -3.302) (layer F.SilkS)
+ (effects (font (size 2.032 2.032) (thickness 0.3048)))
+ )
+ (fp_line (start 57.785 -4.445) (end -57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 -4.445) (end -57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -57.785 3.175) (end 57.785 3.175) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 57.785 3.175) (end 57.785 -4.445) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 46.99 3.175) (end 47.625 1.905) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 47.625 1.905) (end 48.26 3.175) (layer F.SilkS) (width 0.3048))
+ (pad "" thru_hole circle (at 0 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at -55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad "" thru_hole circle (at 55.88 0) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS))
+ (pad 1 thru_hole rect (at 47.625 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 46.355 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 3 thru_hole circle (at 45.085 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 4 thru_hole circle (at 43.815 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 5 thru_hole circle (at 42.545 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 6 thru_hole circle (at 41.275 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 7 thru_hole circle (at 40.005 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 8 thru_hole circle (at 38.735 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 9 thru_hole circle (at 37.465 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 10 thru_hole circle (at 36.195 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 11 thru_hole circle (at 34.925 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 12 thru_hole circle (at 33.655 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 13 thru_hole circle (at 32.385 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 14 thru_hole circle (at 31.115 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 15 thru_hole circle (at 29.845 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 16 thru_hole circle (at 28.575 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 17 thru_hole circle (at 27.305 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 18 thru_hole circle (at 26.035 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 19 thru_hole circle (at 24.765 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 20 thru_hole circle (at 23.495 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 21 thru_hole circle (at 22.225 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 22 thru_hole circle (at 20.955 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 23 thru_hole circle (at 19.685 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 24 thru_hole circle (at 18.415 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 25 thru_hole circle (at 17.145 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 26 thru_hole circle (at 15.875 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 27 thru_hole circle (at 14.605 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 28 thru_hole circle (at 13.335 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 29 thru_hole circle (at 12.065 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 30 thru_hole circle (at 10.795 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 31 thru_hole circle (at 9.525 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 32 thru_hole circle (at 8.255 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 33 thru_hole circle (at 6.985 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 34 thru_hole circle (at 5.715 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 386 /RAMS/RAS0-))
+ (pad 35 thru_hole circle (at 4.445 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 36 thru_hole circle (at 3.175 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 37 thru_hole circle (at -3.175 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 38 thru_hole circle (at -4.445 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 39 thru_hole circle (at -5.715 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ (pad 40 thru_hole circle (at -6.985 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 41 thru_hole circle (at -8.255 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 42 thru_hole circle (at -9.525 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 43 thru_hole circle (at -10.795 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 44 thru_hole circle (at -12.065 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 386 /RAMS/RAS0-))
+ (pad 45 thru_hole circle (at -13.335 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 46 thru_hole circle (at -14.605 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 47 thru_hole circle (at -15.875 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 48 thru_hole circle (at -17.145 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 49 thru_hole circle (at -18.415 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 50 thru_hole circle (at -19.685 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 51 thru_hole circle (at -20.955 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 52 thru_hole circle (at -22.225 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 53 thru_hole circle (at -23.495 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 54 thru_hole circle (at -24.765 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 55 thru_hole circle (at -26.035 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 56 thru_hole circle (at -27.305 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 57 thru_hole circle (at -28.575 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 58 thru_hole circle (at -29.845 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 59 thru_hole circle (at -31.115 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 247 VCC))
+ (pad 60 thru_hole circle (at -32.385 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 thru_hole circle (at -33.655 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 62 thru_hole circle (at -34.925 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 63 thru_hole circle (at -36.195 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 64 thru_hole circle (at -37.465 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 65 thru_hole circle (at -38.735 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 66 thru_hole circle (at -40.005 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 67 thru_hole circle (at -41.275 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 68 thru_hole circle (at -42.545 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 69 thru_hole circle (at -43.815 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 70 thru_hole circle (at -45.085 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 71 thru_hole circle (at -46.355 1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask))
+ (pad 72 thru_hole circle (at -47.625 -1.27) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.SilkS *.Mask)
+ (net 243 GND))
+ )
+
+ (module lib_smd:SO24E (layer Composant) (tedit 54019107) (tstamp 5402D71E)
+ (at 73.914 85.09)
+ (path /4BF0367F/22760F4E)
+ (attr smd)
+ (fp_text reference U20 (at 0 -1.524) (layer F.SilkS)
+ (effects (font (thickness 0.127)))
+ )
+ (fp_text value TDA8501 (at 0 1.524) (layer F.SilkS) hide
+ (effects (font (thickness 0.127)))
+ )
+ (fp_line (start 7.62 -4.191) (end -7.62 -4.191) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -7.62 -4.191) (end -7.62 4.191) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -7.62 -0.635) (end -6.35 -0.635) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.35 -0.635) (end -6.35 0.635) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.35 0.635) (end -7.62 0.635) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 7.62 4.191) (end 7.62 -4.191) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -7.62 4.191) (end 7.62 4.191) (layer F.SilkS) (width 0.3048))
+ (pad 1 smd rect (at -6.985 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask))
+ (pad 2 smd rect (at -5.715 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 318 "Net-(R4-Pad1)"))
+ (pad 3 smd rect (at -4.445 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask))
+ (pad 4 smd rect (at -3.175 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask))
+ (pad 5 smd rect (at -1.905 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask))
+ (pad 6 smd rect (at -0.635 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 289 "Net-(C44-Pad1)"))
+ (pad 7 smd rect (at 0.635 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 297 "Net-(C60-Pad1)"))
+ (pad 8 smd rect (at 1.905 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 294 "Net-(C54-Pad1)"))
+ (pad 9 smd rect (at 3.175 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 296 "Net-(C59-Pad1)"))
+ (pad 10 smd rect (at 4.445 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 11 smd rect (at 5.715 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 295 "Net-(C58-Pad1)"))
+ (pad 12 smd rect (at 6.985 4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 288 "Net-(C43-Pad1)"))
+ (pad 24 smd rect (at -6.985 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 299 "Net-(C61-Pad2)"))
+ (pad 23 smd rect (at -5.715 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 387 "Net-(U20-Pad23)"))
+ (pad 22 smd rect (at -4.445 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 323 "Net-(R10-Pad2)"))
+ (pad 21 smd rect (at -3.175 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 322 "Net-(R9-Pad2)"))
+ (pad 20 smd rect (at -1.905 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 306 "Net-(L6-Pad2)"))
+ (pad 19 smd rect (at -0.635 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 210 /modul/LUM))
+ (pad 18 smd rect (at 0.635 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 304 "Net-(L1-Pad1)"))
+ (pad 17 smd rect (at 1.905 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 16 smd rect (at 3.175 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 208 /modul/CVBS))
+ (pad 15 smd rect (at 4.445 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 290 "Net-(C45-Pad1)"))
+ (pad 14 smd rect (at 5.715 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 206 /modul/CHROM))
+ (pad 13 smd rect (at 6.985 -4.826) (size 0.762 1.27) (layers Composant F.Paste F.Mask)
+ (net 292 "Net-(C48-Pad2)"))
+ (model SMD_Packages.3dshapes/SO-24-E.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.5 0.6 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module dip_sockets:DIP-8__300 (layer Composant) (tedit 54019107) (tstamp 5402D740)
+ (at 98.425 69.215)
+ (descr "8 pins DIL package, round pads")
+ (tags DIL)
+ (path /4BF03683/33A7DDDD)
+ (fp_text reference U21 (at -6.35 0 90) (layer F.SilkS)
+ (effects (font (size 1.27 1.143) (thickness 0.2032)))
+ )
+ (fp_text value XC1736APD8 (at 0 0) (layer F.SilkS)
+ (effects (font (size 1.27 1.016) (thickness 0.2032)))
+ )
+ (fp_line (start -5.08 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.254))
+ (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.254))
+ (fp_line (start -3.81 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.254))
+ (fp_line (start -5.08 -2.54) (end 5.08 -2.54) (layer F.SilkS) (width 0.254))
+ (fp_line (start 5.08 -2.54) (end 5.08 2.54) (layer F.SilkS) (width 0.254))
+ (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.254))
+ (fp_line (start -5.08 2.54) (end -5.08 -2.54) (layer F.SilkS) (width 0.254))
+ (pad 1 thru_hole rect (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 174 /graphic/DIN))
+ (pad 2 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 170 /graphic/CCLK))
+ (pad 3 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 198 /graphic/PROG*))
+ (pad 4 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 198 /graphic/PROG*))
+ (pad 5 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 6 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
+ (pad 7 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (pad 8 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 247 VCC))
+ (model Sockets_DIP.3dshapes/DIP-8__300.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:VQFP100 (layer Composant) (tedit 54019107) (tstamp 5402D752)
+ (at 304.927 74.422)
+ (descr "Module CMS Vqfp 100 pins")
+ (tags "CMS VQFP")
+ (path /4BF0367D/33A567B8)
+ (attr smd)
+ (fp_text reference U22 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_text value XC4003-VQ100 (at 0 2.54) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_circle (center 6.096 -6.477) (end 6.096 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.985 -6.35) (end 6.35 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.985 -6.731) (end -6.731 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.985 6.731) (end -6.731 6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.731 6.985) (end 6.985 6.731) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.35 -6.985) (end -6.731 -6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.985 -6.731) (end -6.985 6.731) (layer F.SilkS) (width 0.2032))
+ (fp_line (start -6.731 6.985) (end 6.731 6.985) (layer F.SilkS) (width 0.2032))
+ (fp_line (start 6.985 6.731) (end 6.985 -6.35) (layer F.SilkS) (width 0.2032))
+ (pad 100 smd rect (at 7.747 -5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 76 smd rect (at 7.747 5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask))
+ (pad 77 smd rect (at 7.747 5.4864) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 78 smd rect (at 7.747 5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 26 /ESVIDEO-RVB/TVG5))
+ (pad 79 smd rect (at 7.747 4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 171 /graphic/CDACLK))
+ (pad 80 smd rect (at 7.747 3.9878) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 349 /ESVIDEO-RVB/TVG6))
+ (pad 81 smd rect (at 7.747 3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 348 /ESVIDEO-RVB/TVG7))
+ (pad 82 smd rect (at 7.747 2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 27 /ESVIDEO-RVB/TVR0))
+ (pad 83 smd rect (at 7.747 2.4892) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 28 /ESVIDEO-RVB/TVR1))
+ (pad 84 smd rect (at 7.747 2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 29 /ESVIDEO-RVB/TVR2))
+ (pad 85 smd rect (at 7.747 1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 352 /ESVIDEO-RVB/TVR3))
+ (pad 86 smd rect (at 7.747 0.9906) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 351 /ESVIDEO-RVB/TVR4))
+ (pad 87 smd rect (at 7.747 0.4826) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 30 /ESVIDEO-RVB/TVR5))
+ (pad 88 smd rect (at 7.747 0) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 89 smd rect (at 7.747 -0.508) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 90 smd rect (at 7.747 -1.016) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 31 /ESVIDEO-RVB/TVR6))
+ (pad 91 smd rect (at 7.747 -1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 32 /ESVIDEO-RVB/TVR7))
+ (pad 92 smd rect (at 7.747 -2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 347 /ESVIDEO-RVB/TVB0))
+ (pad 93 smd rect (at 7.747 -2.5146) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 346 /ESVIDEO-RVB/TVB1))
+ (pad 94 smd rect (at 7.747 -2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 19 /ESVIDEO-RVB/TVB2))
+ (pad 95 smd rect (at 7.747 -3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 20 /ESVIDEO-RVB/TVB3))
+ (pad 96 smd rect (at 7.747 -4.0132) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 345 /ESVIDEO-RVB/TVB4))
+ (pad 97 smd rect (at 7.747 -4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 344 /ESVIDEO-RVB/TVB5))
+ (pad 98 smd rect (at 7.747 -5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 343 /ESVIDEO-RVB/TVB6))
+ (pad 99 smd rect (at 7.747 -5.5118) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 342 /ESVIDEO-RVB/TVB7))
+ (pad 75 smd rect (at 5.9944 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 51 smd rect (at -5.9944 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 52 smd rect (at -5.4864 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 204 /graphic/X_PROG-))
+ (pad 53 smd rect (at -5.0038 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 65 /RAMS/TVRAM22))
+ (pad 54 smd rect (at -4.4958 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 66 /RAMS/TVRAM23))
+ (pad 55 smd rect (at -3.9878 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 67 /RAMS/TVRAM24))
+ (pad 56 smd rect (at -3.5052 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 68 /RAMS/TVRAM25))
+ (pad 57 smd rect (at -2.9972 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 69 /RAMS/TVRAM26))
+ (pad 58 smd rect (at -2.4892 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 70 /RAMS/TVRAM27))
+ (pad 59 smd rect (at -2.0066 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 71 /RAMS/TVRAM28))
+ (pad 60 smd rect (at -1.4986 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 72 /RAMS/TVRAM29))
+ (pad 61 smd rect (at -0.9906 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 74 /RAMS/TVRAM30))
+ (pad 62 smd rect (at -0.4826 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 75 /RAMS/TVRAM31))
+ (pad 63 smd rect (at 0 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 64 smd rect (at 0.508 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 65 smd rect (at 1.016 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 66 smd rect (at 1.4986 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 67 smd rect (at 2.0066 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 21 /ESVIDEO-RVB/TVG0))
+ (pad 68 smd rect (at 2.5146 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 22 /ESVIDEO-RVB/TVG1))
+ (pad 69 smd rect (at 2.9972 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 23 /ESVIDEO-RVB/TVG2))
+ (pad 70 smd rect (at 3.5052 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 24 /ESVIDEO-RVB/TVG3))
+ (pad 71 smd rect (at 4.0132 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 25 /ESVIDEO-RVB/TVG4))
+ (pad 72 smd rect (at 4.4958 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 237 /muxdata/X_DIN))
+ (pad 73 smd rect (at 5.0038 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 74 smd rect (at 5.5118 7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 202 /graphic/X_CLK))
+ (pad 1 smd rect (at 5.9944 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 5.4864 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 169 /graphic/CADCLK))
+ (pad 3 smd rect (at 5.0038 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 4 smd rect (at 4.4958 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 5 smd rect (at 3.9878 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 6 smd rect (at 3.5052 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 7 smd rect (at 2.9972 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 350 /ESVIDEO-RVB/CLAMP))
+ (pad 8 smd rect (at 2.4892 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 356 /ESVIDEO-RVB/BLANK-))
+ (pad 9 smd rect (at 2.0066 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 328 /graphic/CSYNC-OUT))
+ (pad 10 smd rect (at 1.4986 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 11 smd rect (at 0.9906 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 12 smd rect (at 0.4826 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 13 smd rect (at 0 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 388 /graphic/ACQ_ON))
+ (pad 14 smd rect (at -0.508 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 15 smd rect (at -1.016 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 16 smd rect (at -1.4986 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask))
+ (pad 17 smd rect (at -2.0066 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 50 /RAMS/TVRAM0))
+ (pad 18 smd rect (at -2.5146 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 73 /RAMS/TVRAM3))
+ (pad 19 smd rect (at -2.9972 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 51 /RAMS/TVRAM1))
+ (pad 20 smd rect (at -3.5052 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 62 /RAMS/TVRAM2))
+ (pad 21 smd rect (at -4.0132 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 337 /graphic/ACCES_RAM-))
+ (pad 22 smd rect (at -4.4958 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 23 smd rect (at -5.0038 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 24 smd rect (at -5.5118 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 25 smd rect (at -5.9944 -7.747) (size 0.254 1.016) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 26 smd rect (at -7.747 -5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 27 smd rect (at -7.747 -5.4864) (size 1.016 0.254) (layers Composant F.Paste F.Mask))
+ (pad 28 smd rect (at -7.747 -5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 76 /RAMS/TVRAM4))
+ (pad 29 smd rect (at -7.747 -4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 77 /RAMS/TVRAM5))
+ (pad 30 smd rect (at -7.747 -3.9878) (size 1.016 0.254) (layers Composant F.Paste F.Mask))
+ (pad 31 smd rect (at -7.747 -3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 78 /RAMS/TVRAM6))
+ (pad 32 smd rect (at -7.747 -2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 79 /RAMS/TVRAM7))
+ (pad 33 smd rect (at -7.747 -2.4892) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 80 /RAMS/TVRAM8))
+ (pad 34 smd rect (at -7.747 -2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 81 /RAMS/TVRAM9))
+ (pad 35 smd rect (at -7.747 -1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 52 /RAMS/TVRAM10))
+ (pad 36 smd rect (at -7.747 -0.9906) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 53 /RAMS/TVRAM11))
+ (pad 37 smd rect (at -7.747 -0.4826) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 38 smd rect (at -7.747 0) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 39 smd rect (at -7.747 0.508) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 54 /RAMS/TVRAM12))
+ (pad 40 smd rect (at -7.747 1.016) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 55 /RAMS/TVRAM13))
+ (pad 41 smd rect (at -7.747 1.4986) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 56 /RAMS/TVRAM14))
+ (pad 42 smd rect (at -7.747 2.0066) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 57 /RAMS/TVRAM15))
+ (pad 43 smd rect (at -7.747 2.5146) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 58 /RAMS/TVRAM16))
+ (pad 44 smd rect (at -7.747 2.9972) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 59 /RAMS/TVRAM17))
+ (pad 45 smd rect (at -7.747 3.5052) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 60 /RAMS/TVRAM18))
+ (pad 46 smd rect (at -7.747 4.0132) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 61 /RAMS/TVRAM19))
+ (pad 47 smd rect (at -7.747 4.4958) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 63 /RAMS/TVRAM20))
+ (pad 48 smd rect (at -7.747 5.0038) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 64 /RAMS/TVRAM21))
+ (pad 49 smd rect (at -7.747 5.5118) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 50 smd rect (at -7.747 5.9944) (size 1.016 0.254) (layers Composant F.Paste F.Mask)
+ (net 389 /graphic/X_DONE))
+ (model SMD_Packages.3dshapes/VQFP-100.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.394 0.394 0.4))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:PQFP100 (layer Composant) (tedit 54019107) (tstamp 5402D7C2)
+ (at 103.505 86.868)
+ (descr "Module CMS Pqfp 100 pins")
+ (tags "CMS PQFP")
+ (path /4BF03683/33BA5628)
+ (attr smd)
+ (fp_text reference U23 (at 0 -2.54) (layer F.SilkS)
+ (effects (font (thickness 0.381)))
+ )
+ (fp_text value XC4003/PQ100 (at 0 2.54) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_circle (center -8.255 5.207) (end -8.255 5.842) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.525 -6.223) (end 9.525 -6.223) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.525 -6.223) (end 9.525 6.477) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 9.525 6.477) (end -8.89 6.477) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -8.89 6.477) (end -9.525 6.477) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -9.525 6.477) (end -9.525 -6.223) (layer F.SilkS) (width 0.3048))
+ (pad 65 smd rect (at 0.3302 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 15 /ESVIDEO-RVB/PCA0))
+ (pad 64 smd rect (at 0.9906 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 339 /ESVIDEO-RVB/PCA1))
+ (pad 63 smd rect (at 1.6256 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 16 /ESVIDEO-RVB/PCA2))
+ (pad 62 smd rect (at 2.286 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 61 smd rect (at 2.921 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 173 /graphic/CSIO-))
+ (pad 60 smd rect (at 3.5814 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 59 smd rect (at 4.2418 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 199 /graphic/RESERV1))
+ (pad 58 smd rect (at 4.8768 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 57 smd rect (at 5.5372 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 172 /graphic/CLK10MHz))
+ (pad 56 smd rect (at 6.1722 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 201 /graphic/XTAL_I))
+ (pad 55 smd rect (at 6.8326 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 198 /graphic/PROG*))
+ (pad 54 smd rect (at 7.4676 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 53 smd rect (at 8.128 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 175 /graphic/DONE))
+ (pad 52 smd rect (at 8.7884 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 51 smd rect (at 9.4234 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 308 "Net-(P9-Pad1)"))
+ (pad 16 smd rect (at 0.3302 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 375 /buspci.sch/PTWR))
+ (pad 17 smd rect (at 0.9906 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 376 /buspci.sch/PTBURST-))
+ (pad 18 smd rect (at 1.6256 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 107 /buspci.sch/PTATN-))
+ (pad 19 smd rect (at 2.286 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 110 /buspci.sch/PTRDY-))
+ (pad 20 smd rect (at 2.921 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 377 /buspci.sch/PTBE-0))
+ (pad 21 smd rect (at 3.5814 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 108 /buspci.sch/PTBE-1))
+ (pad 22 smd rect (at 4.2418 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 378 /buspci.sch/PTBE-2))
+ (pad 23 smd rect (at 4.8768 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 379 /buspci.sch/PTBE-3))
+ (pad 24 smd rect (at 5.5372 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 334 /buspci.sch/PTADR-))
+ (pad 25 smd rect (at 6.1722 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 307 "Net-(P4-Pad1)"))
+ (pad 26 smd rect (at 6.8326 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 27 smd rect (at 7.4676 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 307 "Net-(P4-Pad1)"))
+ (pad 28 smd rect (at 8.128 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 29 smd rect (at 8.7884 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 307 "Net-(P4-Pad1)"))
+ (pad 30 smd rect (at 9.4234 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 84 /buspci.sch/BPCLK))
+ (pad 66 smd rect (at -0.3302 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 67 smd rect (at -0.9652 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 68 smd rect (at -1.6256 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 69 smd rect (at -2.2606 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 341 /ESVIDEO-RVB/WRCAD-))
+ (pad 70 smd rect (at -2.921 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 168 /graphic/BT812_WR-))
+ (pad 71 smd rect (at -3.5814 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 167 /graphic/BT812_RD-))
+ (pad 72 smd rect (at -4.2164 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 17 /ESVIDEO-RVB/RDCDA-))
+ (pad 73 smd rect (at -4.8768 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 359 /ESVIDEO-RVB/WRCDA-))
+ (pad 74 smd rect (at -5.5118 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 340 /ESVIDEO-RVB/RDCAD-))
+ (pad 75 smd rect (at -6.1722 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 174 /graphic/DIN))
+ (pad 76 smd rect (at -6.8326 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 77 smd rect (at -7.4676 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 170 /graphic/CCLK))
+ (pad 78 smd rect (at -8.128 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 79 smd rect (at -8.763 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 80 smd rect (at -9.4234 -8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 15 smd rect (at -0.3302 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 14 smd rect (at -0.9652 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 13 smd rect (at -1.6256 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 12 smd rect (at -2.2606 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 11 smd rect (at -2.921 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 10 smd rect (at -3.5814 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 9 smd rect (at -4.2164 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 8 smd rect (at -4.8768 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 7 smd rect (at -5.5118 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 6 smd rect (at -6.1722 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 5 smd rect (at -6.8326 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 4 smd rect (at -7.4676 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 3 smd rect (at -8.128 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 2 smd rect (at -8.763 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask))
+ (pad 1 smd rect (at -9.4234 8.001) (size 0.3302 2.032) (layers Composant F.Paste F.Mask)
+ (net 239 /pal-ntsc.sch/RESET-))
+ (pad 100 smd rect (at -11.049 6.1722) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 99 smd rect (at -11.049 5.5372) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 98 smd rect (at -11.049 4.8768) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 97 smd rect (at -11.049 4.2164) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 235 /muxdata/DPC8))
+ (pad 96 smd rect (at -11.049 3.5814) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 236 /muxdata/DPC9))
+ (pad 95 smd rect (at -11.049 2.921) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 213 /muxdata/DPC10))
+ (pad 94 smd rect (at -11.049 2.286) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 214 /muxdata/DPC11))
+ (pad 93 smd rect (at -11.049 1.6256) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 215 /muxdata/DPC12))
+ (pad 92 smd rect (at -11.049 0.9652) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 91 smd rect (at -11.049 0.3302) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 31 smd rect (at 11.049 6.1722) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 32 smd rect (at 11.049 5.5372) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 371 /buspci.sch/PTNUM1))
+ (pad 33 smd rect (at 11.049 4.8768) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 34 smd rect (at 11.049 4.2164) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 109 /buspci.sch/PTNUM0))
+ (pad 35 smd rect (at 11.049 3.5814) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 364 /buspci.sch/BE-3))
+ (pad 36 smd rect (at 11.049 2.921) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 365 /buspci.sch/BE-2))
+ (pad 37 smd rect (at 11.049 2.286) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 366 /buspci.sch/BE-1))
+ (pad 38 smd rect (at 11.049 1.6256) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 373 /buspci.sch/BE-0))
+ (pad 39 smd rect (at 11.049 0.9652) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 83 /buspci.sch/ADR6))
+ (pad 40 smd rect (at 11.049 0.3302) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 90 smd rect (at -11.049 -0.3302) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 216 /muxdata/DPC13))
+ (pad 89 smd rect (at -11.049 -0.9652) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 218 /muxdata/DPC15))
+ (pad 88 smd rect (at -11.049 -1.6256) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 217 /muxdata/DPC14))
+ (pad 87 smd rect (at -11.049 -2.286) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 309 "Net-(P10-Pad1)"))
+ (pad 86 smd rect (at -11.049 -2.921) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 202 /graphic/X_CLK))
+ (pad 85 smd rect (at -11.049 -3.5814) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 203 /graphic/X_DIN))
+ (pad 84 smd rect (at -11.049 -4.2164) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 204 /graphic/X_PROG-))
+ (pad 83 smd rect (at -11.049 -4.8768) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 389 /graphic/X_DONE))
+ (pad 82 smd rect (at -11.049 -5.5372) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 310 "Net-(P11-Pad1)"))
+ (pad 81 smd rect (at -11.049 -6.1722) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 197 /graphic/LED))
+ (pad 50 smd rect (at 11.049 -6.1722) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 49 smd rect (at 11.049 -5.5372) (size 2.032 0.3302) (layers Composant F.Paste F.Mask))
+ (pad 48 smd rect (at 11.049 -4.8768) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 370 /buspci.sch/ADR2))
+ (pad 47 smd rect (at 11.049 -4.2164) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 332 /buspci.sch/WR-))
+ (pad 46 smd rect (at 11.049 -3.5814) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 333 /buspci.sch/RD-))
+ (pad 45 smd rect (at 11.049 -2.921) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 331 /buspci.sch/SELECT-))
+ (pad 44 smd rect (at 11.049 -2.286) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 369 /buspci.sch/ADR3))
+ (pad 43 smd rect (at 11.049 -1.6256) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 368 /buspci.sch/ADR4))
+ (pad 42 smd rect (at 11.049 -0.9652) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 367 /buspci.sch/ADR5))
+ (pad 41 smd rect (at 11.049 -0.3302) (size 2.032 0.3302) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (model SMD_Packages.3dshapes/PQFP-100.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.514 0.514 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module lib_smd:PQFP160 (layer Composant) (tedit 54019107) (tstamp 5402D82F)
+ (at 141.605 88.265 180)
+ (descr "Module CMS Pqfp 160 pins")
+ (tags "CMS PQFP")
+ (path /4BF03683/3366016A)
+ (attr smd)
+ (fp_text reference U24 (at 0 -2.54 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (fp_text value XC4005-PQ160 (at 0 2.54 180) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (fp_text user 1 (at 13.589 -15.494 180) (layer F.SilkS)
+ (effects (font (size 1.524 1.016) (thickness 0.3048)))
+ )
+ (fp_line (start 12.827 -13.97) (end 14.097 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -14.0462 14.1732) (end 14.097 14.1732) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 12.827 -13.97) (end -14.0462 -13.97) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -14.0462 -13.97) (end -14.0462 14.1732) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 14.097 14.1732) (end 14.097 -12.7) (layer F.SilkS) (width 0.3048))
+ (fp_circle (center 12.192 -12.065) (end 12.192 -11.303) (layer F.SilkS) (width 0.3048))
+ (pad 1 smd rect (at 12.7 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 12.065 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 172 /graphic/CLK10MHz))
+ (pad 3 smd rect (at 11.4046 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 110 /buspci.sch/PTRDY-))
+ (pad 4 smd rect (at 10.7696 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 107 /buspci.sch/PTATN-))
+ (pad 5 smd rect (at 10.1092 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 376 /buspci.sch/PTBURST-))
+ (pad 6 smd rect (at 9.4488 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 177 /graphic/HDREFOUT))
+ (pad 7 smd rect (at 8.8138 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 176 /graphic/HDOUT))
+ (pad 8 smd rect (at 8.1534 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 9 smd rect (at 7.5184 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 10 smd rect (at 6.858 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 11 smd rect (at 6.1976 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 165 /buspci.sch/X_IRQ))
+ (pad 12 smd rect (at 5.5626 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 375 /buspci.sch/PTWR))
+ (pad 13 smd rect (at 4.9022 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 328 /graphic/CSYNC-OUT))
+ (pad 14 smd rect (at 4.2672 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 334 /buspci.sch/PTADR-))
+ (pad 15 smd rect (at 3.6068 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 374 /buspci.sch/RDEMPTY))
+ (pad 16 smd rect (at 2.9464 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 162 /buspci.sch/RDFIFO-))
+ (pad 17 smd rect (at 2.3114 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 164 /buspci.sch/WRFULL))
+ (pad 18 smd rect (at 1.651 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 163 /buspci.sch/WRFIFO-))
+ (pad 19 smd rect (at 1.016 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 20 smd rect (at 0.3556 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 21 smd rect (at -0.3048 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 6 /ESVIDEO-RVB/DPC0))
+ (pad 22 smd rect (at -0.9398 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 7 /ESVIDEO-RVB/DPC1))
+ (pad 23 smd rect (at -1.6002 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 8 /ESVIDEO-RVB/DPC2))
+ (pad 24 smd rect (at -2.2352 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 335 /ESVIDEO-RVB/DPC3))
+ (pad 25 smd rect (at -2.8956 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 9 /ESVIDEO-RVB/DPC4))
+ (pad 26 smd rect (at -3.556 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 10 /ESVIDEO-RVB/DPC5))
+ (pad 27 smd rect (at -4.191 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 336 /ESVIDEO-RVB/DPC6))
+ (pad 28 smd rect (at -4.8514 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 11 /ESVIDEO-RVB/DPC7))
+ (pad 29 smd rect (at -5.4864 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 30 smd rect (at -6.1468 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 31 smd rect (at -6.8072 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 32 smd rect (at -7.4422 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 235 /muxdata/DPC8))
+ (pad 33 smd rect (at -8.1026 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 236 /muxdata/DPC9))
+ (pad 34 smd rect (at -8.7376 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 213 /muxdata/DPC10))
+ (pad 35 smd rect (at -9.398 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 214 /muxdata/DPC11))
+ (pad 36 smd rect (at -10.0584 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 215 /muxdata/DPC12))
+ (pad 37 smd rect (at -10.6934 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 361 /graphic/VD_PAL-))
+ (pad 38 smd rect (at -11.3538 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 39 smd rect (at -11.9888 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 40 smd rect (at -12.6492 -15.494 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 41 smd rect (at -15.5702 -12.573 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 42 smd rect (at -15.5702 -11.938 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 43 smd rect (at -15.5702 -11.2776 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 363 /graphic/F_PALIN))
+ (pad 44 smd rect (at -15.5702 -10.6426 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 199 /graphic/RESERV1))
+ (pad 45 smd rect (at -15.5702 -9.9822 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 216 /muxdata/DPC13))
+ (pad 46 smd rect (at -15.5702 -9.3218 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 217 /muxdata/DPC14))
+ (pad 47 smd rect (at -15.5702 -8.6868 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 218 /muxdata/DPC15))
+ (pad 48 smd rect (at -15.5702 -8.0264 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 388 /graphic/ACQ_ON))
+ (pad 49 smd rect (at -15.5702 -7.3914 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 50 smd rect (at -15.5702 -6.731 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 51 smd rect (at -15.5702 -6.0706 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 52 smd rect (at -15.5702 -5.4356 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 362 /graphic/HD_PAL-))
+ (pad 53 smd rect (at -15.5702 -4.7752 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 356 /ESVIDEO-RVB/BLANK-))
+ (pad 54 smd rect (at -15.5702 -4.1402 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 338 /ESVIDEO-RVB/CSYNCIN-))
+ (pad 55 smd rect (at -15.5702 -3.4798 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 212 /muxdata/DATA_WR))
+ (pad 56 smd rect (at -15.5702 -2.8194 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 337 /graphic/ACCES_RAM-))
+ (pad 57 smd rect (at -15.5702 -2.1844 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 34 /RAMS/CAS0-))
+ (pad 58 smd rect (at -15.5702 -1.524 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 380 /RAMS/CAS1-))
+ (pad 59 smd rect (at -15.5702 -0.889 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 35 /RAMS/CAS2-))
+ (pad 60 smd rect (at -15.5702 -0.2286 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 61 smd rect (at -15.5702 0.4318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 62 smd rect (at -15.5702 1.0668 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 36 /RAMS/CAS3-))
+ (pad 63 smd rect (at -15.5702 1.7272 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 82 /RAMS/WRAM-))
+ (pad 64 smd rect (at -15.5702 2.3622 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 381 /RAMS/RAS7-))
+ (pad 65 smd rect (at -15.5702 3.0226 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 382 /RAMS/RAS6-))
+ (pad 66 smd rect (at -15.5702 3.683 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 49 /RAMS/RAS5-))
+ (pad 67 smd rect (at -15.5702 4.318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 383 /RAMS/RAS4-))
+ (pad 68 smd rect (at -15.5702 4.9784 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 48 /RAMS/RAS3-))
+ (pad 69 smd rect (at -15.5702 5.6134 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 384 /RAMS/RAS2-))
+ (pad 70 smd rect (at -15.5702 6.2738 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 71 smd rect (at -15.5702 6.9342 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 72 smd rect (at -15.5702 7.5692 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 73 smd rect (at -15.5702 8.2296 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 385 /RAMS/RAS1-))
+ (pad 74 smd rect (at -15.5702 8.8646 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 386 /RAMS/RAS0-))
+ (pad 75 smd rect (at -15.5702 9.525 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 350 /ESVIDEO-RVB/CLAMP))
+ (pad 76 smd rect (at -15.5702 10.1854 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 171 /graphic/CDACLK))
+ (pad 77 smd rect (at -15.5702 10.8204 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 169 /graphic/CADCLK))
+ (pad 78 smd rect (at -15.5702 11.4808 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 185 /graphic/IA7))
+ (pad 79 smd rect (at -15.5702 12.1158 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 80 smd rect (at -15.5702 12.7762 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 389 /graphic/X_DONE))
+ (pad 121 smd rect (at 15.621 12.7762 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 122 smd rect (at 15.621 12.1158 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 123 smd rect (at 15.621 11.4808 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 43 /RAMS/MXA5))
+ (pad 124 smd rect (at 15.621 10.8204 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 42 /RAMS/MXA4))
+ (pad 125 smd rect (at 15.621 10.1854 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 41 /RAMS/MXA3))
+ (pad 126 smd rect (at 15.621 9.525 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 40 /RAMS/MXA2))
+ (pad 127 smd rect (at 15.621 8.8646 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 38 /RAMS/MXA1))
+ (pad 128 smd rect (at 15.621 8.2296 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 37 /RAMS/MXA0))
+ (pad 129 smd rect (at 15.621 7.5692 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 130 smd rect (at 15.621 6.9342 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 131 smd rect (at 15.621 6.2738 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 132 smd rect (at 15.621 5.6134 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 332 /buspci.sch/WR-))
+ (pad 133 smd rect (at 15.621 4.9784 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 333 /buspci.sch/RD-))
+ (pad 134 smd rect (at 15.621 4.318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 195 /graphic/IRQ_SLR))
+ (pad 135 smd rect (at 15.621 3.683 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 331 /buspci.sch/SELECT-))
+ (pad 136 smd rect (at 15.621 3.0226 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 137 smd rect (at 15.621 2.3622 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 370 /buspci.sch/ADR2))
+ (pad 138 smd rect (at 15.621 1.7272 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 369 /buspci.sch/ADR3))
+ (pad 139 smd rect (at 15.621 1.0668 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 368 /buspci.sch/ADR4))
+ (pad 140 smd rect (at 15.621 0.4318 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 367 /buspci.sch/ADR5))
+ (pad 141 smd rect (at 15.621 -0.2286 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 142 smd rect (at 15.621 -0.889 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 143 smd rect (at 15.621 -1.524 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 83 /buspci.sch/ADR6))
+ (pad 144 smd rect (at 15.621 -2.1844 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 373 /buspci.sch/BE-0))
+ (pad 145 smd rect (at 15.621 -2.8194 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 366 /buspci.sch/BE-1))
+ (pad 146 smd rect (at 15.621 -3.4798 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 365 /buspci.sch/BE-2))
+ (pad 147 smd rect (at 15.621 -4.1402 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 364 /buspci.sch/BE-3))
+ (pad 148 smd rect (at 15.621 -4.7752 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 239 /pal-ntsc.sch/RESET-))
+ (pad 149 smd rect (at 15.621 -5.4356 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 372 /buspci.sch/IRQ-))
+ (pad 150 smd rect (at 15.621 -6.0706 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 109 /buspci.sch/PTNUM0))
+ (pad 151 smd rect (at 15.621 -6.731 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 152 smd rect (at 15.621 -7.3914 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 153 smd rect (at 15.621 -8.0264 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask))
+ (pad 154 smd rect (at 15.621 -8.6868 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 371 /buspci.sch/PTNUM1))
+ (pad 155 smd rect (at 15.621 -9.3218 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 379 /buspci.sch/PTBE-3))
+ (pad 156 smd rect (at 15.621 -9.9822 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 378 /buspci.sch/PTBE-2))
+ (pad 157 smd rect (at 15.621 -10.6426 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 108 /buspci.sch/PTBE-1))
+ (pad 158 smd rect (at 15.621 -11.2776 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 377 /buspci.sch/PTBE-0))
+ (pad 159 smd rect (at 15.621 -11.938 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 173 /graphic/CSIO-))
+ (pad 160 smd rect (at 15.621 -12.573 180) (size 2.54 0.381) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 81 smd rect (at -12.6492 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 82 smd rect (at -11.9888 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 204 /graphic/X_PROG-))
+ (pad 83 smd rect (at -11.3538 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 184 /graphic/IA6))
+ (pad 84 smd rect (at -10.6934 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 85 smd rect (at -10.0584 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 183 /graphic/IA5))
+ (pad 86 smd rect (at -9.398 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 182 /graphic/IA4))
+ (pad 87 smd rect (at -8.7376 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 181 /graphic/IA3))
+ (pad 88 smd rect (at -8.1026 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 180 /graphic/IA2))
+ (pad 89 smd rect (at -7.4422 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 90 smd rect (at -6.8072 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 91 smd rect (at -6.1468 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 92 smd rect (at -5.4864 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 179 /graphic/IA1))
+ (pad 93 smd rect (at -4.8514 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 186 /graphic/IA8))
+ (pad 94 smd rect (at -4.191 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 178 /graphic/IA0))
+ (pad 95 smd rect (at -3.556 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 166 /graphic/14MHZOUT))
+ (pad 96 smd rect (at -2.8956 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 187 /graphic/IA9))
+ (pad 97 smd rect (at -2.2352 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 194 /graphic/IRAS-))
+ (pad 98 smd rect (at -1.6002 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 196 /graphic/IWR-))
+ (pad 99 smd rect (at -0.9398 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 190 /graphic/ID1))
+ (pad 100 smd rect (at -0.3048 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (pad 101 smd rect (at 0.3556 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 102 smd rect (at 1.016 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 189 /graphic/ID0))
+ (pad 103 smd rect (at 1.651 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 193 /graphic/IOE-))
+ (pad 104 smd rect (at 2.3114 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 188 /graphic/ICAS-))
+ (pad 105 smd rect (at 2.9464 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 191 /graphic/ID2))
+ (pad 106 smd rect (at 3.6068 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 192 /graphic/ID3))
+ (pad 107 smd rect (at 4.2672 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 358 /ESVIDEO-RVB/TVI1))
+ (pad 108 smd rect (at 4.9022 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 357 /ESVIDEO-RVB/TVI0))
+ (pad 109 smd rect (at 5.5626 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 39 /RAMS/MXA10))
+ (pad 110 smd rect (at 6.1976 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 111 smd rect (at 6.858 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 112 smd rect (at 7.5184 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask))
+ (pad 113 smd rect (at 8.1534 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 47 /RAMS/MXA9))
+ (pad 114 smd rect (at 8.8138 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 46 /RAMS/MXA8))
+ (pad 115 smd rect (at 9.4488 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 45 /RAMS/MXA7))
+ (pad 116 smd rect (at 10.1092 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 44 /RAMS/MXA6))
+ (pad 117 smd rect (at 10.7696 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 203 /graphic/X_DIN))
+ (pad 118 smd rect (at 11.4046 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 237 /muxdata/X_DIN))
+ (pad 119 smd rect (at 12.065 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 202 /graphic/X_CLK))
+ (pad 120 smd rect (at 12.7 15.6972 180) (size 0.381 2.54) (layers Composant F.Paste F.Mask)
+ (net 247 VCC))
+ (model SMD_Packages.3dshapes/PQFP-160.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 0.512 0.512 0.5))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module connect:GS2 (layer Cuivre) (tedit 54019107) (tstamp 5402D8D9)
+ (at 162.687 132.08 90)
+ (descr "Pontet Goute de soudure")
+ (path /4BF03687/26A799ED)
+ (attr virtual)
+ (fp_text reference W1 (at 1.778 0 360) (layer B.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_text value 16/32 (at 1.524 0 360) (layer B.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
+ )
+ (fp_line (start -0.889 1.27) (end -0.889 -1.27) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.27) (end 0.889 1.27) (layer B.SilkS) (width 0.127))
+ (fp_line (start 0.889 -1.27) (end -0.889 -1.27) (layer B.SilkS) (width 0.127))
+ (fp_line (start -0.889 1.27) (end 0.889 1.27) (layer B.SilkS) (width 0.127))
+ (pad 1 smd rect (at 0 0.635 90) (size 1.27 0.9652) (layers Cuivre B.Paste B.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 0 -0.635 90) (size 1.27 0.9652) (layers Cuivre B.Paste B.Mask)
+ (net 319 "Net-(R5-Pad1)"))
+ )
+
+ (module connect:GS2 (layer Composant) (tedit 54019107) (tstamp 5402D8E2)
+ (at 118.745 124.46 270)
+ (descr "Pontet Goute de soudure")
+ (path /4BF03687/26A799F7)
+ (attr virtual)
+ (fp_text reference W2 (at 1.778 0 360) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value FLOAT# (at 1.524 0 360) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -0.889 -1.27) (end -0.889 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.27) (end 0.889 -1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.27) (end -0.889 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.27) (end 0.889 -1.27) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at 0 -0.635 270) (size 1.27 0.9652) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 0 0.635 270) (size 1.27 0.9652) (layers Composant F.Paste F.Mask)
+ (net 320 "Net-(R6-Pad1)"))
+ )
+
+ (module connect:GS2 (layer Composant) (tedit 54019107) (tstamp 5402D8EB)
+ (at 121.285 124.46 270)
+ (descr "Pontet Goute de soudure")
+ (path /4BF03687/26A79A10)
+ (attr virtual)
+ (fp_text reference W3 (at 1.778 0 360) (layer F.SilkS)
+ (effects (font (size 1.016 0.762) (thickness 0.127)))
+ )
+ (fp_text value SERNV (at 1.524 0 360) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.127)))
+ )
+ (fp_line (start -0.889 -1.27) (end -0.889 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.27) (end 0.889 -1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start 0.889 1.27) (end -0.889 1.27) (layer F.SilkS) (width 0.127))
+ (fp_line (start -0.889 -1.27) (end 0.889 -1.27) (layer F.SilkS) (width 0.127))
+ (pad 1 smd rect (at 0 -0.635 270) (size 1.27 0.9652) (layers Composant F.Paste F.Mask)
+ (net 243 GND))
+ (pad 2 smd rect (at 0 0.635 270) (size 1.27 0.9652) (layers Composant F.Paste F.Mask)
+ (net 321 "Net-(R7-Pad1)"))
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 5402D8F4)
+ (at 109.22 144.145 270)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/2691B632)
+ (fp_text reference W4 (at 0 -1.905 270) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value TEST (at 0 -1.905 270) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 1.27 0 270) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 252 "Net-(BUS1-PadB11)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module pin_array:PIN_ARRAY_2X1 (layer Composant) (tedit 4565C520) (tstamp 5402D8FD)
+ (at 90.17 147.955)
+ (descr "Connecteurs 2 pins")
+ (tags "CONN DEV")
+ (path /4BF03687/2691B637)
+ (fp_text reference W5 (at 0 -1.905) (layer F.SilkS)
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_text value TEST (at 0 -1.905) (layer F.SilkS) hide
+ (effects (font (size 0.762 0.762) (thickness 0.1524)))
+ )
+ (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -2.54 -1.27) (end 2.54 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 -1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 2.54 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole rect (at -1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 243 GND))
+ (pad 2 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 250 "Net-(BUS1-PadB9)"))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:HC-18UV (layer Composant) (tedit 54019107) (tstamp 5402D906)
+ (at 112.014 60.198 180)
+ (descr "Quartz boitier HC-18U vertical")
+ (tags "QUARTZ DEV")
+ (path /4BF03683/B3BF4ED4)
+ (autoplace_cost180 10)
+ (fp_text reference X1 (at -0.127 -1.778 180) (layer F.SilkS)
+ (effects (font (size 1.143 1.27) (thickness 0.1524)))
+ )
+ (fp_text value 10MHz (at 0 1.651 180) (layer F.SilkS)
+ (effects (font (size 1.143 1.27) (thickness 0.1524)))
+ )
+ (fp_line (start -6.985 -1.27) (end -5.715 -2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 5.715 -2.54) (end 6.985 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 6.985 1.27) (end 5.715 2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -6.985 1.27) (end -5.715 2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -5.715 -2.54) (end 5.715 -2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -6.985 -1.27) (end -6.985 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -5.715 2.54) (end 5.715 2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 6.985 1.27) (end 6.985 -1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole circle (at -2.54 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 293 "Net-(C49-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 201 /graphic/XTAL_I))
+ (model Crystals.3dshapes/HC-18UV.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ (model Crystals.3dshapes/HC-18UV.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:HC-18UV (layer Composant) (tedit 54019107) (tstamp 5402D913)
+ (at 357.632 94.488 270)
+ (descr "Quartz boitier HC-18U vertical")
+ (tags "QUARTZ DEV")
+ (path /4BF03681/B15DA8C0)
+ (autoplace_cost180 10)
+ (fp_text reference X2 (at -0.127 -1.778 270) (layer F.SilkS)
+ (effects (font (size 1.143 1.27) (thickness 0.1524)))
+ )
+ (fp_text value 30MHz (at 0 1.651 270) (layer F.SilkS)
+ (effects (font (size 1.143 1.27) (thickness 0.1524)))
+ )
+ (fp_line (start -6.985 -1.27) (end -5.715 -2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 5.715 -2.54) (end 6.985 -1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 6.985 1.27) (end 5.715 2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -6.985 1.27) (end -5.715 2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -5.715 -2.54) (end 5.715 -2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -6.985 -1.27) (end -6.985 1.27) (layer F.SilkS) (width 0.1524))
+ (fp_line (start -5.715 2.54) (end 5.715 2.54) (layer F.SilkS) (width 0.1524))
+ (fp_line (start 6.985 1.27) (end 6.985 -1.27) (layer F.SilkS) (width 0.1524))
+ (pad 1 thru_hole circle (at -2.54 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 300 "Net-(C65-Pad2)"))
+ (pad 2 thru_hole circle (at 2.54 0 270) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 301 "Net-(C66-Pad2)"))
+ (model Crystals.3dshapes/HC-18UV.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ (model Crystals.3dshapes/HC-18UV.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module discret:HC-18UH (layer Composant) (tedit 54019107) (tstamp 5402D920)
+ (at 73.025 73.025 180)
+ (descr "Quartz boitier HC-18 horizontal")
+ (tags "QUARTZ DEV")
+ (path /4BF0367F/22760FA3)
+ (fp_text reference X3 (at 0 6.35 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_text value 4,433618MH (at 0 11.43 180) (layer F.SilkS)
+ (effects (font (thickness 0.3048)))
+ )
+ (fp_line (start 6.35 2.794) (end -6.35 2.794) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.842 2.794) (end 5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -6.35 2.794) (end -6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 2.794) (end 6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 6.35 2.032) (end -6.35 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -2.54 0) (end -2.54 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 2.54 0) (end 2.54 2.032) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.842 2.794) (end -5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.842 15.24) (end 5.334 15.748) (layer F.SilkS) (width 0.3048))
+ (fp_line (start 5.334 15.748) (end -5.334 15.748) (layer F.SilkS) (width 0.3048))
+ (fp_line (start -5.334 15.748) (end -5.842 15.24) (layer F.SilkS) (width 0.3048))
+ (pad 1 thru_hole circle (at -2.54 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 302 "Net-(CV1-Pad1)"))
+ (pad 2 thru_hole circle (at 2.54 0 180) (size 1.778 1.778) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
+ (net 387 "Net-(U20-Pad23)"))
+ (model Crystals.3dshapes/HC-18UH.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (gr_line (start 173.609 154.94) (end 185.42 154.94) (angle 90) (layer Edge.Cuts) (width 0.2032))
+ (gr_text TEXTE (at 59.5376 150.9776) (layer Cuivre)
+ (effects (font (thickness 0.2032)) (justify mirror))
+ )
+ (gr_line (start 204.851 145.542) (end 204.851 134.366) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 204.851 134.366) (end 216.027 134.366) (layer Edge.Cuts) (width 0.2032))
+ (dimension 0 (width 0.381) (layer Dwgs.User)
+ (gr_text 20.574mm (at 228.7524 144.653 90) (layer Dwgs.User)
+ (effects (font (thickness 0.4318)))
+ )
+ (feature1 (pts (xy 224.028 134.366) (xy 230.3018 134.366)))
+ (feature2 (pts (xy 224.028 154.94) (xy 230.3018 154.94)))
+ (crossbar (pts (xy 227.203 154.94) (xy 227.203 134.366)))
+ (arrow1a (pts (xy 227.203 134.366) (xy 227.7872 135.49122)))
+ (arrow1b (pts (xy 227.203 134.366) (xy 226.6188 135.49122)))
+ (arrow2a (pts (xy 227.203 154.94) (xy 227.7872 153.81478)))
+ (arrow2b (pts (xy 227.203 154.94) (xy 226.6188 153.81478)))
+ )
+ (gr_line (start 192.659 154.94) (end 224.028 154.94) (layer Dwgs.User) (width 0.381))
+ (dimension 0 (width 0.381) (layer Dwgs.User)
+ (gr_text 8.255mm (at 191.1604 159.0675 90) (layer Dwgs.User)
+ (effects (font (thickness 0.381)))
+ )
+ (feature1 (pts (xy 173.609 154.94) (xy 192.7098 154.94)))
+ (feature2 (pts (xy 173.609 163.195) (xy 192.7098 163.195)))
+ (crossbar (pts (xy 189.611 163.195) (xy 189.611 154.94)))
+ (arrow1a (pts (xy 189.611 154.94) (xy 190.1952 156.06522)))
+ (arrow1b (pts (xy 189.611 154.94) (xy 189.0268 156.06522)))
+ (arrow2a (pts (xy 189.611 163.195) (xy 190.1952 162.06978)))
+ (arrow2b (pts (xy 189.611 163.195) (xy 189.0268 162.06978)))
+ )
+ (gr_line (start 290.957 134.366) (end 216.027 134.366) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 360.553 66.675) (end 360.553 134.366) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 365.633 134.366) (end 365.633 56.515) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 360.553 134.366) (end 365.633 134.366) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 185.42 154.94) (end 194.818 145.542) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 194.818 145.542) (end 204.851 145.542) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 290.957 134.366) (end 360.553 134.366) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 224.155 56.515) (end 365.633 56.515) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 358.013 61.595) (end 363.093 61.595) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 360.553 59.055) (end 360.553 64.135) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 355.473 66.675) (end 360.553 66.675) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 355.473 66.675) (end 355.473 56.515) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 66.294 154.432) (end 53.594 154.432) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 66.294 76.962) (end 53.594 76.962) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 66.294 56.515) (end 66.294 76.962) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 58.674 76.962) (end 58.674 154.432) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 66.294 154.432) (end 66.294 163.195) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 61.087 160.909) (end 61.087 70.485) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 58.547 158.369) (end 63.627 158.369) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 58.547 73.025) (end 63.627 73.025) (layer Dwgs.User) (width 0.2032))
+ (gr_line (start 53.594 163.195) (end 68.58 163.195) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 53.594 56.515) (end 224.155 56.515) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 53.594 163.195) (end 53.594 56.515) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 68.58 154.94) (end 94.361 154.94) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 68.58 163.195) (end 68.58 154.94) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 173.609 163.195) (end 159.004 163.195) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 173.609 154.94) (end 173.609 163.195) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 94.361 163.195) (end 157.226 163.195) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 94.361 154.94) (end 94.361 163.195) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 159.004 154.94) (end 159.004 163.195) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 157.226 154.94) (end 159.004 154.94) (layer Edge.Cuts) (width 0.2032))
+ (gr_line (start 157.226 163.195) (end 157.226 154.94) (layer Edge.Cuts) (width 0.2032))
+
+ (segment (start 96.52 161.163) (end 96.52 158.496) (width 0.2286) (layer Cuivre) (net 1))
+ (segment (start 162.56 158.496) (end 162.56 154.94) (width 0.381) (layer Composant) (net 2) (status 800))
+ (segment (start 120.65 158.496) (end 120.65 154.94) (width 0.381) (layer Cuivre) (net 2) (status 800))
+ (segment (start 151.13 151.765) (end 150.876 151.765) (width 0.381) (layer Cuivre) (net 2))
+ (segment (start 120.65 154.94) (end 119.634 153.924) (width 0.381) (layer Cuivre) (net 2))
+ (segment (start 133.985 154.305) (end 133.985 151.765) (width 0.381) (layer Composant) (net 2))
+ (via (at 161.29 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 161.29 151.765) (end 151.13 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 163.195 151.765) (end 161.29 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 151.13 154.94) (end 150.114 153.924) (width 0.381) (layer Cuivre) (net 2))
+ (segment (start 148.59 158.496) (end 148.59 152.4) (width 0.381) (layer Composant) (net 2) (status 800))
+ (segment (start 145.415 154.305) (end 146.05 154.94) (width 0.381) (layer Composant) (net 2))
+ (segment (start 128.27 151.765) (end 133.985 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (via (at 151.13 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 147.32 151.765) (end 145.415 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 151.13 158.496) (end 151.13 154.94) (width 0.381) (layer Cuivre) (net 2) (status 800))
+ (segment (start 148.59 152.4) (end 147.955 151.765) (width 0.381) (layer Composant) (net 2))
+ (segment (start 120.65 151.765) (end 124.46 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 119.634 153.924) (end 119.634 152.527) (width 0.381) (layer Cuivre) (net 2))
+ (via (at 143.51 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 146.05 154.94) (end 146.05 158.496) (width 0.381) (layer Composant) (net 2) (status 400))
+ (segment (start 133.35 158.496) (end 133.35 154.94) (width 0.381) (layer Composant) (net 2) (status 800))
+ (segment (start 151.13 151.765) (end 147.32 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 124.46 151.765) (end 125.095 151.765) (width 0.381) (layer Composant) (net 2))
+ (segment (start 139.7 151.765) (end 135.89 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 162.56 154.94) (end 163.195 154.305) (width 0.381) (layer Composant) (net 2))
+ (via (at 135.89 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 145.415 151.765) (end 145.415 154.305) (width 0.381) (layer Composant) (net 2))
+ (segment (start 125.095 151.765) (end 125.73 152.4) (width 0.381) (layer Composant) (net 2))
+ (segment (start 161.29 158.496) (end 161.29 151.765) (width 0.381) (layer Cuivre) (net 2) (status 800))
+ (via (at 147.32 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (via (at 124.46 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (via (at 145.415 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 139.7 151.765) (end 139.7 158.496) (width 0.381) (layer Composant) (net 2) (status 400))
+ (segment (start 151.13 151.765) (end 150.114 150.749) (width 0.2032) (layer Cuivre) (net 2))
+ (segment (start 150.114 148.463) (end 150.114 150.749) (width 0.2032) (layer Cuivre) (net 2))
+ (segment (start 150.114 153.924) (end 150.114 152.527) (width 0.381) (layer Cuivre) (net 2))
+ (via (at 163.195 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 147.955 151.765) (end 147.32 151.765) (width 0.381) (layer Composant) (net 2))
+ (via (at 133.985 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 133.35 154.94) (end 133.985 154.305) (width 0.381) (layer Composant) (net 2))
+ (segment (start 143.51 151.765) (end 139.7 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 125.73 158.496) (end 125.73 152.4) (width 0.381) (layer Composant) (net 2) (status 800))
+ (segment (start 150.876 151.765) (end 150.114 152.527) (width 0.381) (layer Cuivre) (net 2))
+ (segment (start 143.51 151.765) (end 145.415 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (via (at 128.27 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 163.195 154.305) (end 163.195 151.765) (width 0.381) (layer Composant) (net 2))
+ (segment (start 120.396 151.765) (end 119.634 152.527) (width 0.381) (layer Cuivre) (net 2))
+ (via (at 120.65 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 135.89 158.496) (end 135.89 151.765) (width 0.381) (layer Cuivre) (net 2) (status 800))
+ (segment (start 120.65 151.765) (end 120.396 151.765) (width 0.381) (layer Cuivre) (net 2))
+ (segment (start 133.985 151.765) (end 135.89 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 143.51 158.496) (end 143.51 151.765) (width 0.381) (layer Cuivre) (net 2) (status 800))
+ (via (at 139.7 151.765) (size 0.889) (layers Composant Cuivre) (net 2))
+ (segment (start 124.46 151.765) (end 128.27 151.765) (width 0.762) (layer VCC_layer) (net 2))
+ (segment (start 128.27 158.496) (end 128.27 151.765) (width 0.381) (layer Cuivre) (net 2) (status 800))
+ (segment (start 119.634 151.257) (end 120.142 151.765) (width 0.2032) (layer Cuivre) (net 2))
+ (segment (start 120.142 151.765) (end 120.65 151.765) (width 0.2032) (layer Cuivre) (net 2))
+ (segment (start 119.634 148.463) (end 119.634 151.257) (width 0.2032) (layer Cuivre) (net 2) (status 800))
+ (segment (start 149.987 148.463) (end 150.114 148.463) (width 0.2032) (layer Cuivre) (net 2) (status 800))
+ (segment (start 135.89 158.496) (end 135.89 161.163) (width 0.3048) (layer Cuivre) (net 2) (status C00))
+ (segment (start 151.13 158.496) (end 151.13 161.163) (width 0.3048) (layer Cuivre) (net 2) (status C00))
+ (segment (start 120.65 158.496) (end 120.65 161.163) (width 0.3048) (layer Cuivre) (net 2) (status C00))
+ (segment (start 128.27 158.496) (end 128.27 161.163) (width 0.3048) (layer Cuivre) (net 2) (status C00))
+ (segment (start 143.51 158.496) (end 143.51 161.163) (width 0.3048) (layer Cuivre) (net 2) (status C00))
+ (segment (start 161.29 158.496) (end 161.29 161.163) (width 0.3048) (layer Cuivre) (net 2) (status C00))
+ (segment (start 125.73 161.163) (end 125.73 158.496) (width 0.3048) (layer Composant) (net 2) (status C00))
+ (segment (start 133.35 161.163) (end 133.35 158.496) (width 0.3048) (layer Composant) (net 2) (status C00))
+ (segment (start 139.7 161.163) (end 139.7 158.496) (width 0.3048) (layer Composant) (net 2) (status C00))
+ (segment (start 146.05 161.163) (end 146.05 158.496) (width 0.3048) (layer Composant) (net 2) (status C00))
+ (segment (start 148.59 161.163) (end 148.59 158.496) (width 0.3048) (layer Composant) (net 2) (status C00))
+ (segment (start 162.56 161.163) (end 162.56 158.496) (width 0.3048) (layer Composant) (net 2) (status C00))
+ (segment (start 73.025 102.743) (end 74.041 101.727) (width 0.2032) (layer Cuivre) (net 3))
+ (segment (start 74.295 98.679) (end 75.946 98.679) (width 0.2032) (layer Cuivre) (net 3) (status 400))
+ (segment (start 74.041 98.933) (end 74.295 98.679) (width 0.2032) (layer Cuivre) (net 3))
+ (segment (start 75.311 112.141) (end 73.406 112.141) (width 0.2032) (layer Composant) (net 3))
+ (segment (start 73.025 104.394) (end 73.025 103.759) (width 0.2032) (layer Composant) (net 3))
+ (segment (start 73.025 103.759) (end 73.025 102.743) (width 0.2032) (layer Cuivre) (net 3))
+ (segment (start 75.057 127.381) (end 77.597 127.381) (width 0.2032) (layer Cuivre) (net 3) (status 800))
+ (segment (start 75.946 97.282) (end 75.057 96.393) (width 0.2032) (layer Cuivre) (net 3))
+ (segment (start 75.057 96.393) (end 75.057 93.599) (width 0.2032) (layer Cuivre) (net 3) (status 400))
+ (segment (start 76.2 117.856) (end 76.2 113.03) (width 0.2032) (layer Composant) (net 3))
+ (via (at 73.025 103.759) (size 0.889) (layers Composant Cuivre) (net 3))
+ (segment (start 73.406 112.141) (end 73.152 111.887) (width 0.2032) (layer Composant) (net 3))
+ (via (at 77.597 127.381) (size 0.889) (layers Composant Cuivre) (net 3))
+ (segment (start 77.597 119.253) (end 76.2 117.856) (width 0.2032) (layer Composant) (net 3))
+ (segment (start 73.152 111.887) (end 73.152 106.934) (width 0.2032) (layer Composant) (net 3) (status 400))
+ (segment (start 75.946 98.679) (end 75.946 97.282) (width 0.2032) (layer Cuivre) (net 3) (status 800))
+ (segment (start 77.597 127.381) (end 77.597 119.253) (width 0.2032) (layer Composant) (net 3))
+ (segment (start 73.152 104.521) (end 73.025 104.394) (width 0.2032) (layer Composant) (net 3))
+ (segment (start 76.2 113.03) (end 75.311 112.141) (width 0.2032) (layer Composant) (net 3))
+ (segment (start 74.041 101.727) (end 74.041 98.933) (width 0.2032) (layer Cuivre) (net 3))
+ (segment (start 73.152 106.934) (end 73.152 104.521) (width 0.2032) (layer Composant) (net 3) (status 800))
+ (segment (start 77.597 127.381) (end 79.629 127.381) (width 0.2032) (layer Cuivre) (net 3) (status 400))
+ (segment (start 104.775 146.685) (end 94.361 146.685) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 156.083 148.717) (end 105.029 148.717) (width 0.2032) (layer VCC_layer) (net 4))
+ (segment (start 348.361 133.858) (end 204.216 133.858) (width 0.2032) (layer Composant) (net 4))
+ (segment (start 83.439 129.54) (end 82.677 128.778) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 105.029 148.717) (end 105.029 146.939) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 69.342 138.684) (end 70.485 138.684) (width 0.2032) (layer Cuivre) (net 4) (status 400))
+ (segment (start 163.83 149.479) (end 189.484 149.479) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 70.485 138.684) (end 70.485 138.811) (width 0.2032) (layer Cuivre) (net 4) (status 800))
+ (segment (start 94.361 146.685) (end 94.107 146.939) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 69.088 146.812) (end 69.088 138.938) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 94.107 146.939) (end 94.107 149.098) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 194.183 144.78) (end 189.484 149.479) (width 0.2032) (layer Cuivre) (net 4))
+ (via (at 156.083 148.717) (size 0.889) (layers Composant Cuivre) (net 4))
+ (segment (start 92.075 151.13) (end 73.406 151.13) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 70.485 138.811) (end 71.501 139.827) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 156.337 149.733) (end 163.576 149.733) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 163.576 149.733) (end 163.83 149.479) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 156.337 149.733) (end 156.083 149.479) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 203.962 134.112) (end 203.962 143.891) (width 0.2032) (layer Composant) (net 4))
+ (via (at 203.962 143.891) (size 0.889) (layers Composant Cuivre) (net 4))
+ (segment (start 203.962 143.891) (end 203.073 144.78) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 203.962 134.112) (end 204.216 133.858) (width 0.2032) (layer Composant) (net 4))
+ (segment (start 156.083 149.479) (end 156.083 148.717) (width 0.2032) (layer Cuivre) (net 4))
+ (via (at 105.029 148.717) (size 0.889) (layers Composant Cuivre) (net 4))
+ (segment (start 83.058 105.283) (end 85.217 103.124) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 82.677 128.778) (end 82.677 119.253) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 71.501 139.827) (end 73.406 139.827) (width 0.2032) (layer Cuivre) (net 4) (status 400))
+ (segment (start 85.217 103.124) (end 85.217 100.965) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 73.406 151.13) (end 69.088 146.812) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 203.073 144.78) (end 194.183 144.78) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 73.406 139.827) (end 74.93 141.351) (width 0.2032) (layer Cuivre) (net 4) (status 800))
+ (segment (start 80.01 116.586) (end 80.01 110.49) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 85.217 100.965) (end 84.074 100.965) (width 0.2032) (layer Composant) (net 4) (status 400))
+ (segment (start 94.107 149.098) (end 92.075 151.13) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 83.439 141.097) (end 83.439 129.54) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 74.93 141.351) (end 83.185 141.351) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 83.185 141.351) (end 83.439 141.097) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 83.058 107.442) (end 83.058 105.283) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 80.01 110.49) (end 83.058 107.442) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 82.677 119.253) (end 80.01 116.586) (width 0.2032) (layer Cuivre) (net 4))
+ (via (at 85.217 100.965) (size 0.889) (layers Composant Cuivre) (net 4))
+ (segment (start 69.088 138.938) (end 69.342 138.684) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 105.029 146.939) (end 104.775 146.685) (width 0.2032) (layer Cuivre) (net 4))
+ (segment (start 348.615 133.604) (end 348.361 133.858) (width 0.2032) (layer Composant) (net 4))
+ (segment (start 348.615 127.635) (end 348.615 133.604) (width 0.2032) (layer Composant) (net 4) (status 800))
+ (segment (start 59.309 98.806) (end 63.373 98.806) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 65.659 101.092) (end 65.659 104.14) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 66.548 106.045) (end 66.929 106.426) (width 0.2032) (layer Cuivre) (net 5) (status 800))
+ (segment (start 63.373 98.806) (end 65.659 101.092) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 87.503 123.444) (end 87.503 106.426) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 105.918 144.145) (end 87.122 144.145) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 86.614 143.637) (end 87.122 144.145) (width 0.2032) (layer Cuivre) (net 5))
+ (via (at 66.929 106.426) (size 0.889) (layers Composant Cuivre) (net 5))
+ (segment (start 59.055 93.345) (end 59.055 98.552) (width 0.2032) (layer Cuivre) (net 5) (status 800))
+ (segment (start 107.061 145.288) (end 105.918 144.145) (width 0.2032) (layer Cuivre) (net 5))
+ (via (at 107.061 145.288) (size 0.889) (layers Composant Cuivre) (net 5))
+ (segment (start 86.614 143.637) (end 86.614 124.333) (width 0.2032) (layer Cuivre) (net 5))
+ (via (at 87.503 106.426) (size 0.889) (layers Composant Cuivre) (net 5))
+ (segment (start 87.503 106.426) (end 66.929 106.426) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 86.614 124.333) (end 87.503 123.444) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 66.548 106.045) (end 66.548 105.029) (width 0.2032) (layer Cuivre) (net 5) (status 800))
+ (segment (start 162.941 147.447) (end 162.814 147.32) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 127.254 145.542) (end 126.365 146.431) (width 0.2032) (layer VCC_layer) (net 5))
+ (via (at 162.052 147.32) (size 0.889) (layers Composant Cuivre) (net 5))
+ (segment (start 291.211 132.334) (end 203.073 132.334) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 202.438 134.239) (end 202.819 133.858) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 129.54 145.669) (end 129.413 145.542) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 126.365 146.431) (end 112.776 146.431) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 291.973 131.572) (end 291.211 132.334) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 162.814 147.32) (end 162.052 147.32) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 191.516 142.494) (end 186.563 147.447) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 202.438 140.716) (end 202.438 134.239) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 200.66 142.494) (end 202.438 140.716) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 202.819 133.858) (end 202.819 132.588) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 202.819 132.588) (end 203.073 132.334) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 162.052 147.32) (end 160.782 146.05) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 200.66 142.494) (end 191.516 142.494) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 186.563 147.447) (end 162.941 147.447) (width 0.2032) (layer Cuivre) (net 5))
+ (via (at 291.973 131.572) (size 0.889) (layers Composant Cuivre) (net 5))
+ (segment (start 157.861 146.05) (end 157.48 145.669) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 160.782 146.05) (end 157.861 146.05) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 129.413 145.542) (end 127.254 145.542) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 157.48 145.669) (end 129.54 145.669) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 293.116 131.572) (end 291.973 131.572) (width 0.2032) (layer Composant) (net 5) (status 800))
+ (segment (start 66.548 105.029) (end 65.659 104.14) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 59.055 98.552) (end 59.309 98.806) (width 0.2032) (layer Cuivre) (net 5))
+ (segment (start 107.188 145.288) (end 108.331 144.145) (width 0.2032) (layer VCC_layer) (net 5) (tstamp 5402D9A8))
+ (segment (start 108.331 144.145) (end 110.49 144.145) (width 0.2032) (layer VCC_layer) (net 5) (tstamp 5402D9A9))
+ (segment (start 110.49 144.145) (end 112.776 146.431) (width 0.2032) (layer VCC_layer) (net 5) (tstamp 5402D9AB))
+ (segment (start 107.061 145.288) (end 107.188 145.288) (width 0.2032) (layer VCC_layer) (net 5))
+ (segment (start 94.869 111.506) (end 96.774 109.601) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 328.422 103.251) (end 329.819 101.854) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 327.533 110.617) (end 327.914 110.236) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 163.957 110.998) (end 156.083 110.998) (width 0.2032) (layer Cuivre) (net 6) (status 800))
+ (segment (start 138.303 99.695) (end 136.398 101.6) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 139.7 99.695) (end 140.97 99.695) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 141.9098 107.315) (end 141.9098 103.759) (width 0.2032) (layer Composant) (net 6) (status 400))
+ (segment (start 327.533 113.03) (end 327.533 110.617) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 142.494 111.633) (end 141.478 111.633) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 141.732 101.6) (end 141.9098 101.6) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 138.303 99.695) (end 139.7 99.695) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 141.732 100.457) (end 141.732 101.6) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 140.97 99.695) (end 141.732 100.457) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 329.819 101.854) (end 329.819 93.472) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 328.422 103.251) (end 328.422 103.886) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 167.386 111.633) (end 166.751 110.998) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 92.075 117.475) (end 94.615 117.475) (width 0.2032) (layer Cuivre) (net 6) (status 800))
+ (segment (start 107.696 102.87) (end 108.966 101.6) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 167.386 112.649) (end 167.386 111.633) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 329.9206 93.472) (end 329.819 93.472) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 141.9098 103.759) (end 141.9098 101.6) (width 0.2032) (layer Composant) (net 6) (status 800))
+ (segment (start 141.478 107.696) (end 141.9098 107.315) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 103.505 104.775) (end 105.41 102.87) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 105.41 102.87) (end 107.696 102.87) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 330.835 110.236) (end 330.835 109.855) (width 0.2032) (layer VCC_layer) (net 6) (status 400))
+ (via (at 156.083 110.998) (size 0.889) (layers Composant Cuivre) (net 6))
+ (segment (start 327.533 113.03) (end 327.533 104.775) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 141.9098 113.8428) (end 141.9098 112.014) (width 0.2032) (layer Composant) (net 6) (status 800))
+ (segment (start 168.783 114.046) (end 167.386 112.649) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 141.478 111.633) (end 141.478 107.696) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 94.869 117.221) (end 94.869 111.506) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 101.8794 94.869) (end 101.8794 101.8794) (width 0.2032) (layer Composant) (net 6) (status 800))
+ (segment (start 136.398 101.6) (end 108.966 101.6) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 328.422 103.886) (end 327.533 104.775) (width 0.2032) (layer Composant) (net 6))
+ (via (at 139.7 99.695) (size 0.889) (layers Composant Cuivre) (net 6))
+ (segment (start 94.615 117.475) (end 94.869 117.221) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 103.505 103.505) (end 101.8794 101.8794) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 327.787 114.3) (end 327.787 113.284) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 141.478 111.633) (end 141.9098 112.014) (width 0.2032) (layer Composant) (net 6))
+ (via (at 103.505 104.775) (size 0.889) (layers Composant Cuivre) (net 6))
+ (segment (start 96.774 109.601) (end 98.679 109.601) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 142.875 112.014) (end 142.494 111.633) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 327.025 114.173) (end 240.919 114.173) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 240.919 114.173) (end 240.665 113.919) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 240.665 113.919) (end 175.895 113.919) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 175.768 114.046) (end 168.783 114.046) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 327.787 114.3) (end 327.787 113.284) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 327.787 114.3) (end 327.787 119.761) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 98.679 109.601) (end 103.505 104.775) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 327.787 113.284) (end 327.533 113.03) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 329.9206 92.0242) (end 329.9206 93.472) (width 0.2032) (layer Composant) (net 6) (status 800))
+ (segment (start 327.279 120.269) (end 326.517 120.269) (width 0.2032) (layer Composant) (net 6) (status 400))
+ (segment (start 156.083 110.998) (end 155.067 112.014) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 327.914 110.236) (end 330.835 110.236) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 163.957 110.998) (end 166.751 110.998) (width 0.2032) (layer Cuivre) (net 6) (status 800))
+ (segment (start 155.067 112.014) (end 142.875 112.014) (width 0.2032) (layer VCC_layer) (net 6))
+ (segment (start 327.152 114.3) (end 327.025 114.173) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 175.895 113.919) (end 175.768 114.046) (width 0.2032) (layer Cuivre) (net 6))
+ (segment (start 327.152 114.3) (end 327.787 114.3) (width 0.2032) (layer Cuivre) (net 6))
+ (via (at 327.787 114.3) (size 0.889) (layers Composant Cuivre) (net 6))
+ (via (at 141.478 111.633) (size 0.889) (layers Composant Cuivre) (net 6))
+ (segment (start 103.505 104.775) (end 103.505 103.505) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 327.787 113.284) (end 327.533 113.03) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 327.787 119.761) (end 327.279 120.269) (width 0.2032) (layer Composant) (net 6))
+ (segment (start 94.234 111.252) (end 96.393 109.093) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 102.235 103.505) (end 101.2444 102.5144) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 153.67 111.506) (end 143.51 111.506) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 323.977 122.047) (end 323.977 122.809) (width 0.2032) (layer Composant) (net 7) (status 400))
+ (segment (start 330.327 111.379) (end 332.613 111.379) (width 0.2032) (layer VCC_layer) (net 7))
+ (via (at 139.7 98.425) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 328.168 111.633) (end 328.168 104.775) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 138.938 98.425) (end 136.271 101.092) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 166.624 109.728) (end 163.957 109.728) (width 0.2032) (layer Cuivre) (net 7) (status 400))
+ (segment (start 328.93 104.013) (end 328.168 104.775) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 102.235 104.775) (end 97.917 109.093) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 175.514 113.411) (end 175.387 113.538) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 97.917 109.093) (end 96.393 109.093) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.93 103.378) (end 328.93 104.013) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 101.2444 94.869) (end 101.2444 102.5144) (width 0.2032) (layer Composant) (net 7) (status 800))
+ (segment (start 329.819 112.268) (end 329.819 111.887) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 241.3 113.665) (end 241.046 113.411) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.168 111.633) (end 328.295 111.76) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 104.648 102.362) (end 107.569 102.362) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 139.7 98.425) (end 138.938 98.425) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 142.5448 103.759) (end 142.5448 100.6348) (width 0.2032) (layer Composant) (net 7) (status 800))
+ (segment (start 142.24 107.823) (end 142.5448 107.569) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 93.98 114.935) (end 94.234 114.681) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 327.152 113.665) (end 241.3 113.665) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.93 103.378) (end 330.327 101.981) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 330.327 101.981) (end 330.327 93.726) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 329.565 112.522) (end 329.819 112.268) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 142.5448 111.379) (end 142.5448 113.8428) (width 0.2032) (layer Composant) (net 7) (status 400))
+ (segment (start 328.295 112.522) (end 329.565 112.522) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 155.448 109.728) (end 153.67 111.506) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 329.819 111.887) (end 330.327 111.379) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 92.075 114.935) (end 93.98 114.935) (width 0.2032) (layer Cuivre) (net 7) (status 800))
+ (segment (start 102.235 104.775) (end 102.235 103.505) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 142.24 110.744) (end 142.24 111.125) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 168.021 112.395) (end 168.021 111.125) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 142.748 110.744) (end 142.24 110.744) (width 0.2032) (layer VCC_layer) (net 7))
+ (via (at 142.24 110.744) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 330.5048 92.075) (end 330.5048 93.599) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 241.046 113.411) (end 175.514 113.411) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 330.454 93.599) (end 330.327 93.726) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 330.5556 92.0242) (end 330.5048 92.075) (width 0.2032) (layer Composant) (net 7) (status 800))
+ (segment (start 140.335 98.425) (end 139.7 98.425) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 104.648 102.362) (end 102.235 104.775) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 142.24 111.125) (end 142.5448 111.379) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 328.295 115.189) (end 328.295 120.396) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 140.335 98.425) (end 142.5448 100.6348) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 108.839 101.092) (end 136.271 101.092) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 332.613 111.379) (end 333.375 110.617) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 333.375 110.617) (end 333.375 109.855) (width 0.2032) (layer VCC_layer) (net 7) (status 400))
+ (segment (start 94.234 114.681) (end 94.234 111.252) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.295 112.522) (end 327.152 113.665) (width 0.2032) (layer Cuivre) (net 7))
+ (via (at 156.083 109.728) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 143.51 111.506) (end 142.748 110.744) (width 0.2032) (layer VCC_layer) (net 7))
+ (via (at 102.235 104.775) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 142.24 107.823) (end 142.24 110.744) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 142.5448 103.759) (end 142.5448 107.569) (width 0.2032) (layer Composant) (net 7) (status 800))
+ (segment (start 175.387 113.538) (end 169.164 113.538) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.549 112.522) (end 328.295 112.522) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 107.569 102.362) (end 108.839 101.092) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 330.5048 93.599) (end 330.454 93.599) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 168.021 111.125) (end 166.624 109.728) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.295 112.522) (end 328.295 111.76) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 156.083 109.728) (end 155.448 109.728) (width 0.2032) (layer VCC_layer) (net 7))
+ (segment (start 326.898 121.793) (end 324.231 121.793) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 328.549 112.522) (end 328.549 114.935) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 163.957 109.728) (end 156.083 109.728) (width 0.2032) (layer Cuivre) (net 7) (status 800))
+ (segment (start 169.164 113.538) (end 168.021 112.395) (width 0.2032) (layer Cuivre) (net 7))
+ (segment (start 328.549 114.935) (end 328.295 115.189) (width 0.2032) (layer Composant) (net 7))
+ (via (at 328.295 112.522) (size 0.889) (layers Composant Cuivre) (net 7))
+ (segment (start 328.295 120.396) (end 326.898 121.793) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 324.231 121.793) (end 323.977 122.047) (width 0.2032) (layer Composant) (net 7))
+ (segment (start 328.676 104.902) (end 328.676 110.363) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 241.554 113.157) (end 241.3 112.903) (width 0.2032) (layer Cuivre) (net 8))
+ (via (at 156.083 108.458) (size 0.889) (layers Composant Cuivre) (net 8))
+ (segment (start 169.418 113.03) (end 168.529 112.141) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 326.517 122.809) (end 328.803 120.523) (width 0.2032) (layer Composant) (net 8) (status 800))
+ (segment (start 100.584 105.156) (end 103.886 101.854) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 281.686 113.157) (end 241.554 113.157) (width 0.2032) (layer Cuivre) (net 8))
+ (via (at 100.584 105.156) (size 0.889) (layers Composant Cuivre) (net 8))
+ (segment (start 140.97 97.79) (end 140.335 97.155) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 330.835 93.853) (end 331.089 93.599) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 292.989 112.903) (end 281.94 112.903) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 329.438 103.632) (end 329.438 104.14) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 107.442 101.854) (end 108.712 100.584) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 329.057 112.395) (end 329.057 110.744) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 143.002 109.728) (end 143.002 110.363) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 330.835 112.395) (end 329.946 111.506) (width 0.2032) (layer Cuivre) (net 8) (status 800))
+ (segment (start 93.599 112.141) (end 93.599 110.744) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 168.529 110.871) (end 166.116 108.458) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 327.66 111.633) (end 294.259 111.633) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 93.345 112.395) (end 93.599 112.141) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 331.089 92.075) (end 331.216 92.0242) (width 0.2032) (layer Composant) (net 8) (status 400))
+ (segment (start 142.875 107.823) (end 143.2052 107.823) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 143.2052 113.8428) (end 143.2052 110.617) (width 0.2032) (layer Composant) (net 8) (status 800))
+ (segment (start 95.758 108.585) (end 97.155 108.585) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 328.676 110.363) (end 329.057 110.744) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 143.2052 103.759) (end 143.2052 100.0252) (width 0.2032) (layer Composant) (net 8) (status 800))
+ (segment (start 294.259 111.633) (end 292.989 112.903) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 327.787 111.506) (end 327.66 111.633) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 241.3 112.903) (end 174.879 112.903) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 329.057 115.062) (end 329.057 112.395) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 100.584 94.869) (end 100.584 105.156) (width 0.2032) (layer Composant) (net 8) (status 800))
+ (segment (start 329.057 115.062) (end 328.803 115.316) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 329.946 111.506) (end 327.787 111.506) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 93.599 110.744) (end 95.758 108.585) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 142.875 109.601) (end 142.875 107.823) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 103.886 101.854) (end 107.442 101.854) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 92.075 112.395) (end 93.345 112.395) (width 0.2032) (layer Cuivre) (net 8) (status 800))
+ (segment (start 281.94 112.903) (end 281.686 113.157) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 329.438 104.14) (end 328.676 104.902) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 329.438 103.632) (end 330.835 102.235) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 330.835 102.235) (end 330.835 93.853) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 330.835 112.395) (end 329.057 112.395) (width 0.2032) (layer Composant) (net 8) (status 800))
+ (segment (start 139.446 97.155) (end 136.017 100.584) (width 0.2032) (layer Cuivre) (net 8))
+ (via (at 143.002 109.728) (size 0.889) (layers Composant Cuivre) (net 8))
+ (segment (start 174.879 112.903) (end 174.752 113.03) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 140.335 97.155) (end 139.446 97.155) (width 0.2032) (layer Cuivre) (net 8))
+ (via (at 140.97 97.79) (size 0.889) (layers Composant Cuivre) (net 8))
+ (segment (start 143.002 110.363) (end 143.2052 110.617) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 143.002 109.728) (end 142.875 109.601) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 97.155 108.585) (end 100.584 105.156) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 174.752 113.03) (end 169.418 113.03) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 154.94 108.458) (end 153.67 109.728) (width 0.2032) (layer VCC_layer) (net 8))
+ (segment (start 153.67 109.728) (end 143.002 109.728) (width 0.2032) (layer VCC_layer) (net 8))
+ (segment (start 163.957 108.458) (end 156.083 108.458) (width 0.2032) (layer Cuivre) (net 8) (status 800))
+ (segment (start 331.089 93.599) (end 331.089 92.075) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 143.2052 107.823) (end 143.2052 103.759) (width 0.2032) (layer Composant) (net 8) (status 400))
+ (segment (start 168.529 112.141) (end 168.529 110.871) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 328.803 115.316) (end 328.803 120.523) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 166.116 108.458) (end 163.957 108.458) (width 0.2032) (layer Cuivre) (net 8) (status 400))
+ (segment (start 140.97 97.79) (end 143.2052 100.0252) (width 0.2032) (layer Composant) (net 8))
+ (segment (start 156.083 108.458) (end 154.94 108.458) (width 0.2032) (layer VCC_layer) (net 8))
+ (segment (start 136.017 100.584) (end 108.712 100.584) (width 0.2032) (layer Cuivre) (net 8))
+ (segment (start 238.76 114.554) (end 238.633 114.427) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 332.486 93.726) (end 331.851 94.361) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 167.513 105.918) (end 163.957 105.918) (width 0.2032) (layer Cuivre) (net 9) (status 400))
+ (segment (start 257.556 121.285) (end 260.223 123.952) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 329.311 123.19) (end 328.549 123.952) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 241.173 117.856) (end 240.919 117.602) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 282.321 123.952) (end 260.223 123.952) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 168.021 114.554) (end 168.021 110.871) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 168.021 110.871) (end 167.513 110.363) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 326.263 126.365) (end 318.389 126.365) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 99.2886 94.869) (end 99.2886 102.108) (width 0.2032) (layer Composant) (net 9) (status 800))
+ (segment (start 143.51 97.79) (end 141.605 95.885) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 330.835 114.935) (end 331.851 113.919) (width 0.2032) (layer Composant) (net 9) (status 800))
+ (segment (start 332.486 92.583) (end 332.5114 92.0242) (width 0.2032) (layer Composant) (net 9) (status 400))
+ (segment (start 331.851 113.919) (end 331.851 94.361) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 99.7966 103.378) (end 99.822 103.378) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 107.061 100.838) (end 108.331 99.568) (width 0.2032) (layer Cuivre) (net 9))
+ (via (at 99.7966 103.378) (size 0.889) (layers Composant Cuivre) (net 9))
+ (segment (start 99.2886 102.108) (end 99.7966 102.616) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 144.653 110.363) (end 144.653 108.712) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 326.517 125.349) (end 328.041 125.349) (width 0.2032) (layer Composant) (net 9) (status 800))
+ (segment (start 240.919 114.808) (end 240.665 114.554) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 326.517 125.349) (end 326.517 126.111) (width 0.2032) (layer Cuivre) (net 9) (status 800))
+ (segment (start 317.754 125.73) (end 317.754 125.095) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 238.633 114.427) (end 176.022 114.427) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 252.095 117.856) (end 241.173 117.856) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 252.095 117.856) (end 252.476 118.237) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 240.919 117.602) (end 240.919 114.808) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 252.73 121.285) (end 252.476 121.031) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 328.041 125.349) (end 328.549 124.841) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 257.556 121.285) (end 252.73 121.285) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 252.476 121.031) (end 252.476 118.237) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 329.819 114.935) (end 330.835 114.935) (width 0.2032) (layer Composant) (net 9) (status 400))
+ (segment (start 329.311 115.443) (end 329.819 114.935) (width 0.2032) (layer Composant) (net 9))
+ (via (at 143.51 97.79) (size 0.889) (layers Composant Cuivre) (net 9))
+ (segment (start 135.509 99.568) (end 108.331 99.568) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 318.389 126.365) (end 317.754 125.73) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 240.665 114.554) (end 238.76 114.554) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 328.549 123.952) (end 328.549 124.841) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 162.052 105.918) (end 160.909 107.061) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 160.909 107.061) (end 160.655 107.061) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 316.992 124.333) (end 282.702 124.333) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 144.399 107.95) (end 144.399 105.41) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 160.655 107.061) (end 157.607 107.061) (width 0.2032) (layer VCC_layer) (net 9))
+ (segment (start 144.399 108.458) (end 144.653 108.712) (width 0.2032) (layer Composant) (net 9))
+ (via (at 160.655 107.061) (size 0.889) (layers Composant Cuivre) (net 9))
+ (segment (start 163.957 105.918) (end 162.052 105.918) (width 0.2032) (layer Cuivre) (net 9) (status 800))
+ (segment (start 152.146 108.585) (end 145.669 108.585) (width 0.2032) (layer VCC_layer) (net 9))
+ (segment (start 154.432 106.299) (end 152.146 108.585) (width 0.2032) (layer VCC_layer) (net 9))
+ (segment (start 92.075 107.315) (end 95.885 107.315) (width 0.2032) (layer Cuivre) (net 9) (status 800))
+ (segment (start 145.161 113.8428) (end 145.161 110.871) (width 0.2032) (layer Composant) (net 9) (status 800))
+ (segment (start 99.7966 102.616) (end 99.7966 103.378) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 144.399 105.41) (end 144.5006 105.41) (width 0.2032) (layer Composant) (net 9))
+ (via (at 167.513 105.918) (size 0.889) (layers Composant Cuivre) (net 9))
+ (segment (start 95.885 107.315) (end 99.822 103.378) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 145.034 107.95) (end 144.399 107.95) (width 0.2032) (layer VCC_layer) (net 9))
+ (via (at 168.021 114.554) (size 0.889) (layers Composant Cuivre) (net 9))
+ (segment (start 175.895 114.554) (end 176.022 114.427) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 145.669 108.585) (end 145.034 107.95) (width 0.2032) (layer VCC_layer) (net 9))
+ (segment (start 144.399 107.95) (end 144.399 108.458) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 102.362 100.838) (end 107.061 100.838) (width 0.2032) (layer Cuivre) (net 9))
+ (via (at 144.399 107.95) (size 0.889) (layers Composant Cuivre) (net 9))
+ (segment (start 168.021 114.554) (end 175.895 114.554) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 99.822 103.378) (end 102.362 100.838) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 144.5006 105.41) (end 144.5006 103.759) (width 0.2032) (layer Composant) (net 9) (status 400))
+ (segment (start 156.845 106.299) (end 154.432 106.299) (width 0.2032) (layer VCC_layer) (net 9))
+ (segment (start 143.51 97.79) (end 144.5006 98.7806) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 144.5006 103.759) (end 144.5006 98.7806) (width 0.2032) (layer Composant) (net 9) (status 800))
+ (segment (start 135.509 99.568) (end 139.192 95.885) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 332.486 92.583) (end 332.486 93.726) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 316.992 124.333) (end 317.754 125.095) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 329.311 123.19) (end 329.311 115.443) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 326.517 126.111) (end 326.263 126.365) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 141.605 95.885) (end 139.192 95.885) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 145.161 110.871) (end 144.653 110.363) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 157.607 107.061) (end 156.845 106.299) (width 0.2032) (layer VCC_layer) (net 9))
+ (segment (start 282.702 124.333) (end 282.321 123.952) (width 0.2032) (layer Cuivre) (net 9))
+ (segment (start 167.513 110.363) (end 167.513 105.918) (width 0.2032) (layer Composant) (net 9))
+ (segment (start 333.121 92.075) (end 333.1718 92.0242) (width 0.2032) (layer Composant) (net 10) (status 400))
+ (segment (start 144.78 97.79) (end 145.161 98.171) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 145.796 110.617) (end 145.161 109.982) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 158.115 104.648) (end 158.115 103.759) (width 0.2032) (layer VCC_layer) (net 10))
+ (segment (start 156.21 101.854) (end 145.415 101.854) (width 0.2032) (layer VCC_layer) (net 10))
+ (segment (start 169.037 100.838) (end 170.561 99.314) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 98.425 102.6922) (end 98.425 103.505) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 158.115 103.759) (end 156.21 101.854) (width 0.2032) (layer VCC_layer) (net 10))
+ (via (at 158.115 104.648) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 332.613 96.52) (end 330.2 96.52) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 98.6282 94.869) (end 98.6282 102.489) (width 0.2032) (layer Composant) (net 10) (status 800))
+ (segment (start 332.359 113.919) (end 332.359 97.663) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 312.166 96.393) (end 311.658 95.885) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 332.359 97.663) (end 332.613 97.409) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 169.037 104.648) (end 169.037 100.838) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 215.519 95.885) (end 217.297 95.885) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 218.313 94.869) (end 217.297 95.885) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 239.522 94.869) (end 218.313 94.869) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 240.538 95.885) (end 239.522 94.869) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 170.561 99.314) (end 175.26 99.314) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 92.075 104.775) (end 97.155 104.775) (width 0.2032) (layer Cuivre) (net 10) (status 800))
+ (segment (start 175.26 99.314) (end 179.07 95.504) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 145.161 103.759) (end 145.161 98.171) (width 0.2032) (layer Composant) (net 10) (status 800))
+ (segment (start 98.425 103.505) (end 101.6 100.33) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 240.538 95.885) (end 311.658 95.885) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 332.613 97.409) (end 332.613 96.52) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 333.375 114.935) (end 332.359 115.951) (width 0.2032) (layer Composant) (net 10) (status 800))
+ (segment (start 163.957 104.648) (end 169.037 104.648) (width 0.2032) (layer Cuivre) (net 10) (status 800))
+ (segment (start 144.78 101.219) (end 144.78 97.79) (width 0.2032) (layer VCC_layer) (net 10))
+ (segment (start 333.121 93.853) (end 333.121 92.075) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 332.613 96.52) (end 332.613 94.361) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 179.07 95.504) (end 215.138 95.504) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 145.796 113.8428) (end 145.796 110.617) (width 0.2032) (layer Composant) (net 10) (status 800))
+ (via (at 144.78 97.79) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 108.077 99.06) (end 135.255 99.06) (width 0.2032) (layer Cuivre) (net 10))
+ (via (at 332.613 96.52) (size 0.889) (layers Composant Cuivre) (net 10))
+ (via (at 169.037 100.838) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 323.977 127.889) (end 329.057 127.889) (width 0.2032) (layer Cuivre) (net 10) (status 800))
+ (segment (start 98.6282 102.489) (end 98.425 102.6922) (width 0.2032) (layer Composant) (net 10))
+ (via (at 98.425 103.505) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 106.807 100.33) (end 108.077 99.06) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 329.819 116.205) (end 329.819 123.317) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 329.057 124.079) (end 329.057 127.889) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 329.819 123.317) (end 329.057 124.079) (width 0.2032) (layer Composant) (net 10))
+ (via (at 329.057 127.889) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 330.2 96.52) (end 330.073 96.393) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 145.161 109.982) (end 145.161 103.759) (width 0.2032) (layer Composant) (net 10) (status 400))
+ (segment (start 97.155 104.775) (end 98.425 103.505) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 142.24 95.25) (end 139.065 95.25) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 163.957 104.648) (end 158.115 104.648) (width 0.2032) (layer Cuivre) (net 10) (status 800))
+ (segment (start 144.78 97.79) (end 142.24 95.25) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 135.255 99.06) (end 139.065 95.25) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 101.6 100.33) (end 106.807 100.33) (width 0.2032) (layer Cuivre) (net 10))
+ (via (at 169.037 104.648) (size 0.889) (layers Composant Cuivre) (net 10))
+ (segment (start 330.073 96.393) (end 312.166 96.393) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 215.138 95.504) (end 215.519 95.885) (width 0.2032) (layer Cuivre) (net 10))
+ (segment (start 333.121 93.853) (end 332.613 94.361) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 333.375 114.935) (end 332.359 113.919) (width 0.2032) (layer Composant) (net 10) (status 800))
+ (segment (start 145.415 101.854) (end 144.78 101.219) (width 0.2032) (layer VCC_layer) (net 10))
+ (segment (start 332.359 115.951) (end 330.073 115.951) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 330.073 115.951) (end 329.819 116.205) (width 0.2032) (layer Composant) (net 10))
+ (segment (start 318.643 94.615) (end 319.913 94.615) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 334.264 96.012) (end 334.264 98.044) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 217.678 93.853) (end 240.157 93.853) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 96.6724 94.869) (end 96.6724 96.647) (width 0.2032) (layer Composant) (net 11) (status 800))
+ (segment (start 335.026 94.234) (end 335.026 92.075) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 149.7076 110.617) (end 146.812 107.7214) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 332.613 94.234) (end 335.28 94.234) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 92.075 99.695) (end 95.1484 99.695) (width 0.2032) (layer Cuivre) (net 11) (status 800))
+ (segment (start 156.337 104.521) (end 158.75 102.108) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 163.957 102.108) (end 158.75 102.108) (width 0.2032) (layer Cuivre) (net 11) (status 800))
+ (segment (start 146.939 104.521) (end 146.558 104.902) (width 0.2032) (layer VCC_layer) (net 11))
+ (segment (start 335.28 94.234) (end 335.28 94.996) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 217.043 94.488) (end 217.678 93.853) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 335.026 92.075) (end 335.1022 92.0242) (width 0.2032) (layer Composant) (net 11) (status 400))
+ (segment (start 146.812 107.7214) (end 146.812 107.696) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 142.494 107.061) (end 145.796 107.061) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 146.812 107.696) (end 146.304 107.696) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 146.558 104.902) (end 146.558 107.696) (width 0.2032) (layer VCC_layer) (net 11))
+ (segment (start 335.28 94.234) (end 335.026 94.234) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 128.397 107.696) (end 105.029 107.696) (width 0.2032) (layer Cuivre) (net 11))
+ (via (at 146.812 107.696) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 95.1484 99.695) (end 95.1484 100.711) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 97.917 110.871) (end 95.377 108.331) (width 0.2032) (layer Composant) (net 11))
+ (via (at 335.28 94.234) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 335.28 94.996) (end 334.264 96.012) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 146.812 107.7214) (end 146.4564 107.3658) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 321.437 127.889) (end 322.453 128.905) (width 0.2032) (layer Cuivre) (net 11) (status 800))
+ (segment (start 163.957 102.108) (end 167.386 102.108) (width 0.2032) (layer Cuivre) (net 11) (status 800))
+ (via (at 167.386 98.298) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 174.371 98.298) (end 178.181 94.488) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 240.157 93.853) (end 241.046 94.742) (width 0.2032) (layer Cuivre) (net 11))
+ (via (at 95.1484 99.695) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 167.386 98.298) (end 174.371 98.298) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 331.343 127.889) (end 330.327 128.905) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 105.029 107.696) (end 101.854 110.871) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 128.905 108.204) (end 128.397 107.696) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 318.643 94.615) (end 318.516 94.742) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 141.351 108.204) (end 128.905 108.204) (width 0.2032) (layer Cuivre) (net 11))
+ (via (at 98.679 110.871) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 146.558 107.696) (end 146.812 107.696) (width 0.2032) (layer VCC_layer) (net 11))
+ (segment (start 146.4564 103.759) (end 146.4564 107.3658) (width 0.2032) (layer Composant) (net 11) (status 800))
+ (segment (start 334.391 117.221) (end 334.137 117.475) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 178.181 94.488) (end 217.043 94.488) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 319.913 94.615) (end 320.675 95.377) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 95.377 108.331) (end 95.377 100.711) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 320.675 95.377) (end 331.47 95.377) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 145.796 107.061) (end 146.304 107.696) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 322.453 128.905) (end 330.327 128.905) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 95.1484 98.171) (end 95.1484 99.695) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 334.264 98.044) (end 334.391 98.171) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 333.375 117.475) (end 331.851 118.999) (width 0.2032) (layer Composant) (net 11) (status 800))
+ (segment (start 241.046 94.742) (end 318.516 94.742) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 95.377 100.711) (end 95.1484 100.711) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 331.851 118.999) (end 331.851 127.381) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 141.351 108.204) (end 142.494 107.061) (width 0.2032) (layer Cuivre) (net 11))
+ (segment (start 331.851 127.381) (end 331.343 127.889) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 331.47 95.377) (end 332.613 94.234) (width 0.2032) (layer Cuivre) (net 11))
+ (via (at 331.343 127.889) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 334.137 117.475) (end 333.375 117.475) (width 0.2032) (layer Composant) (net 11) (status 400))
+ (segment (start 101.854 110.871) (end 98.679 110.871) (width 0.2032) (layer Cuivre) (net 11))
+ (via (at 156.337 104.521) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 156.337 104.521) (end 146.939 104.521) (width 0.2032) (layer VCC_layer) (net 11))
+ (via (at 167.386 102.108) (size 0.889) (layers Composant Cuivre) (net 11))
+ (segment (start 96.6724 96.647) (end 95.1484 98.171) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 149.7076 113.8428) (end 149.7076 110.617) (width 0.2032) (layer Composant) (net 11) (status 800))
+ (segment (start 334.391 98.171) (end 334.391 117.221) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 167.386 102.108) (end 167.386 98.298) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 98.679 110.871) (end 97.917 110.871) (width 0.2032) (layer Composant) (net 11))
+ (segment (start 83.947 144.272) (end 84.582 144.907) (width 0.2032) (layer Cuivre) (net 12))
+ (via (at 87.376 144.907) (size 0.889) (layers Composant Cuivre) (net 12))
+ (via (at 104.394 144.907) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 104.394 144.907) (end 87.376 144.907) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 106.299 144.145) (end 105.537 144.907) (width 0.2032) (layer VCC_layer) (net 12))
+ (segment (start 73.533 142.875) (end 72.009 141.351) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 83.82 96.647) (end 85.09 96.647) (width 0.2032) (layer Cuivre) (net 12) (status 800))
+ (via (at 85.09 96.647) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 85.09 96.647) (end 85.979 97.536) (width 0.2032) (layer Composant) (net 12))
+ (segment (start 80.645 116.332) (end 80.645 110.617) (width 0.2032) (layer Cuivre) (net 12))
+ (via (at 85.344 144.907) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 83.566 107.696) (end 83.566 106.299) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 105.537 144.907) (end 104.394 144.907) (width 0.2032) (layer VCC_layer) (net 12))
+ (segment (start 106.934 144.145) (end 106.299 144.145) (width 0.2032) (layer VCC_layer) (net 12) (tstamp 5402D99C))
+ (segment (start 85.344 144.907) (end 84.582 144.907) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 72.009 141.351) (end 70.485 141.351) (width 0.2032) (layer Cuivre) (net 12) (status 400))
+ (segment (start 83.185 128.397) (end 83.185 118.872) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 83.566 106.299) (end 85.09 104.775) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 83.947 129.159) (end 83.185 128.397) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 87.376 144.907) (end 85.344 144.907) (width 0.2032) (layer VCC_layer) (net 12))
+ (segment (start 80.645 110.617) (end 83.566 107.696) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 85.979 97.536) (end 85.979 103.886) (width 0.2032) (layer Composant) (net 12))
+ (segment (start 85.979 103.886) (end 85.09 104.775) (width 0.2032) (layer Composant) (net 12))
+ (via (at 85.09 104.775) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 73.406 142.875) (end 73.533 142.875) (width 0.2032) (layer Cuivre) (net 12) (status 800))
+ (segment (start 74.803 144.272) (end 83.947 144.272) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 83.947 129.159) (end 83.947 144.272) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 73.406 142.875) (end 74.803 144.272) (width 0.2032) (layer Cuivre) (net 12) (status 800))
+ (segment (start 83.185 118.872) (end 80.645 116.332) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 130.683 141.351) (end 134.366 141.351) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 200.406 141.986) (end 190.627 141.986) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 340.233 130.556) (end 333.248 130.556) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 333.248 130.556) (end 332.994 130.81) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 332.994 130.81) (end 332.994 131.826) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 155.575 142.621) (end 155.829 142.367) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 332.74 132.08) (end 329.057 132.08) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 346.075 125.095) (end 344.805 126.365) (width 0.2032) (layer Composant) (net 12) (status 800))
+ (segment (start 126.746 145.669) (end 117.094 145.669) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 130.048 141.986) (end 130.048 142.367) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 201.93 140.462) (end 201.93 134.112) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 130.683 141.351) (end 130.048 141.986) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 136.144 141.351) (end 147.32 141.351) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 147.955 142.367) (end 147.955 141.986) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 155.829 142.367) (end 167.005 142.367) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 290.83 130.683) (end 289.687 131.826) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 332.994 131.826) (end 332.74 132.08) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 324.866 132.334) (end 318.262 132.334) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 313.817 130.937) (end 316.865 130.937) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 329.057 132.08) (end 328.803 131.826) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 289.687 131.826) (end 202.565 131.826) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 312.42 132.334) (end 294.132 132.334) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 313.817 130.937) (end 312.42 132.334) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 318.262 132.334) (end 316.865 130.937) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 292.481 130.683) (end 290.83 130.683) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 325.12 132.08) (end 324.866 132.334) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 190.119 141.478) (end 167.894 141.478) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 325.12 131.191) (end 325.12 132.08) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 325.374 130.937) (end 325.12 131.191) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 328.803 131.826) (end 328.803 131.191) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 328.803 131.191) (end 328.549 130.937) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 167.894 141.478) (end 167.005 142.367) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 328.549 130.937) (end 325.374 130.937) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 294.132 132.334) (end 292.481 130.683) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 344.805 128.143) (end 343.789 129.159) (width 0.2032) (layer Composant) (net 12))
+ (via (at 117.094 145.669) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 148.209 142.621) (end 155.575 142.621) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 134.366 141.351) (end 134.747 141.732) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 201.93 134.112) (end 202.311 133.731) (width 0.2032) (layer Cuivre) (net 12))
+ (via (at 342.265 129.159) (size 0.889) (layers Composant Cuivre) (net 12))
+ (segment (start 135.763 141.732) (end 136.144 141.351) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 341.63 129.159) (end 340.233 130.556) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 343.789 129.159) (end 342.265 129.159) (width 0.2032) (layer Composant) (net 12))
+ (segment (start 148.209 142.621) (end 147.955 142.367) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 190.627 141.986) (end 190.119 141.478) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 117.094 145.669) (end 114.046 145.669) (width 0.2032) (layer VCC_layer) (net 12))
+ (segment (start 202.311 132.08) (end 202.565 131.826) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 202.311 133.731) (end 202.311 132.08) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 147.955 141.986) (end 147.32 141.351) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 200.406 141.986) (end 201.93 140.462) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 134.747 141.732) (end 135.763 141.732) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 130.048 142.367) (end 126.746 145.669) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 344.805 126.365) (end 344.805 128.143) (width 0.2032) (layer Composant) (net 12))
+ (segment (start 342.265 129.159) (end 341.63 129.159) (width 0.2032) (layer Cuivre) (net 12))
+ (segment (start 107.061 144.145) (end 107.696 143.51) (width 0.2032) (layer VCC_layer) (net 12) (tstamp 5402D99E))
+ (segment (start 107.696 143.51) (end 107.696 142.113) (width 0.2032) (layer VCC_layer) (net 12) (tstamp 5402D99F))
+ (segment (start 107.696 142.113) (end 108.204 141.605) (width 0.2032) (layer VCC_layer) (net 12) (tstamp 5402D9A0))
+ (segment (start 108.204 141.605) (end 109.982 141.605) (width 0.2032) (layer VCC_layer) (net 12) (tstamp 5402D9A1))
+ (segment (start 109.982 141.605) (end 114.046 145.669) (width 0.2032) (layer VCC_layer) (net 12) (tstamp 5402D9A2))
+ (segment (start 106.934 144.145) (end 107.061 144.145) (width 0.2032) (layer VCC_layer) (net 12))
+ (segment (start 203.962 141.097) (end 203.962 134.747) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 358.394 129.667) (end 358.394 132.969) (width 0.2032) (layer Composant) (net 13))
+ (via (at 358.394 132.969) (size 0.889) (layers Composant Cuivre) (net 13))
+ (segment (start 358.394 132.969) (end 357.505 133.858) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 358.775 90.805) (end 358.902 90.932) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 64.643 121.158) (end 64.643 116.459) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 64.643 116.459) (end 64.389 116.205) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 315.595 132.715) (end 315.595 132.08) (width 0.2032) (layer Composant) (net 13))
+ (via (at 315.595 132.715) (size 0.889) (layers Composant Cuivre) (net 13))
+ (segment (start 64.389 116.205) (end 59.055 116.205) (width 0.2032) (layer Cuivre) (net 13) (status 400))
+ (segment (start 96.266 148.336) (end 92.202 152.4) (width 0.2032) (layer Cuivre) (net 13))
+ (via (at 157.48 147.701) (size 0.889) (layers Composant Cuivre) (net 13))
+ (segment (start 102.362 148.336) (end 102.616 148.59) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 102.616 148.59) (end 102.616 149.098) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 72.771 152.4) (end 66.294 145.923) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 194.183 144.018) (end 189.23 148.971) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 130.175 146.685) (end 129.286 147.574) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 102.743 147.066) (end 105.791 147.066) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 157.48 147.701) (end 156.464 146.685) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 201.041 144.018) (end 203.962 141.097) (width 0.2032) (layer Cuivre) (net 13))
+ (via (at 102.616 149.098) (size 0.889) (layers Composant Cuivre) (net 13))
+ (segment (start 201.041 144.018) (end 194.183 144.018) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 358.775 80.01) (end 358.775 90.805) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 203.962 134.747) (end 204.343 134.366) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 204.343 134.366) (end 204.343 134.112) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 204.343 134.112) (end 204.597 133.858) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 102.362 148.336) (end 96.266 148.336) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 129.286 147.574) (end 106.299 147.574) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 105.791 147.066) (end 106.299 147.574) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 189.23 148.971) (end 163.322 148.971) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 92.202 152.4) (end 72.771 152.4) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 64.643 121.285) (end 63.5 122.428) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 63.5 122.428) (end 63.5 127.381) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 63.5 127.381) (end 66.294 130.175) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 64.643 121.158) (end 64.643 121.285) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 357.505 133.858) (end 315.595 133.858) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 59.055 116.205) (end 66.294 116.205) (width 0.2032) (layer Composant) (net 13) (status C00))
+ (segment (start 315.595 132.08) (end 315.341 132.08) (width 0.2032) (layer Composant) (net 13) (status 400))
+ (segment (start 358.14 75.438) (end 358.14 76.454) (width 0.2032) (layer Composant) (net 13) (status 800))
+ (segment (start 357.632 76.962) (end 357.632 78.867) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 358.14 76.454) (end 357.632 76.962) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 357.632 78.867) (end 358.775 80.01) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 358.902 90.932) (end 358.902 129.159) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 358.902 129.159) (end 358.394 129.667) (width 0.2032) (layer Composant) (net 13))
+ (segment (start 156.464 146.685) (end 130.175 146.685) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 157.734 149.225) (end 163.068 149.225) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 163.068 149.225) (end 163.322 148.971) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 157.734 149.225) (end 157.48 148.971) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 157.48 148.971) (end 157.48 147.701) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 66.294 145.923) (end 66.294 130.175) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 102.616 147.193) (end 102.743 147.066) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 315.595 133.858) (end 204.597 133.858) (width 0.2032) (layer Cuivre) (net 13))
+ (segment (start 102.616 149.098) (end 102.616 147.193) (width 0.2032) (layer VCC_layer) (net 13))
+ (segment (start 315.595 133.858) (end 315.595 132.715) (width 0.2032) (layer Cuivre) (net 13))
+ (via (at 296.926 127.508) (size 0.889) (layers Composant Cuivre) (net 14))
+ (segment (start 297.561 126.873) (end 297.561 102.743) (width 0.2032) (layer Composant) (net 14))
+ (segment (start 297.561 102.743) (end 297.815 102.489) (width 0.2032) (layer Composant) (net 14))
+ (segment (start 297.561 126.873) (end 296.926 127.508) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 317.373 128.143) (end 318.643 129.413) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 335.915 129.159) (end 335.661 129.413) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 335.661 129.413) (end 318.643 129.413) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 297.561 126.873) (end 316.992 126.873) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 297.815 102.489) (end 298.577 102.489) (width 0.2032) (layer Composant) (net 14) (status 400))
+ (segment (start 335.915 127.635) (end 335.915 129.159) (width 0.2032) (layer Cuivre) (net 14) (status 800))
+ (segment (start 317.373 128.143) (end 317.373 127.254) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 296.926 127.508) (end 297.561 126.873) (width 0.2032) (layer Composant) (net 14))
+ (segment (start 316.992 126.873) (end 317.373 127.254) (width 0.2032) (layer Cuivre) (net 14))
+ (segment (start 309.88 59.817) (end 319.786 59.817) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 309.626 59.563) (end 309.88 59.817) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 309.626 58.801) (end 309.626 59.563) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 308.991 58.166) (end 309.626 58.801) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 304.165 58.166) (end 308.991 58.166) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 293.878 58.547) (end 295.402 60.071) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 105.029 58.928) (end 106.172 57.785) (width 0.2032) (layer GND_layer) (net 15))
+ (via (at 320.294 60.325) (size 0.889) (layers Composant Cuivre) (net 15))
+ (segment (start 327.787 122.047) (end 329.438 122.047) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 168.783 63.373) (end 168.783 58.801) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 103.8352 74.676) (end 104.267 74.2442) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 329.438 122.047) (end 329.946 122.555) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 162.179 61.595) (end 162.687 62.103) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 104.267 62.738) (end 105.029 61.976) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 302.26 60.071) (end 304.165 58.166) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 324.993 94.107) (end 324.993 94.361) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 319.786 59.817) (end 320.294 60.325) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 106.172 57.785) (end 157.607 57.785) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 166.243 65.913) (end 168.783 63.373) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 105.029 61.976) (end 105.029 58.928) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 324.739 91.059) (end 323.723 90.043) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 323.723 90.043) (end 320.929 90.043) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 320.929 90.043) (end 319.913 89.027) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 324.993 94.361) (end 324.993 120.015) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 319.913 89.027) (end 319.913 61.214) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 320.294 60.833) (end 320.294 60.325) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 325.374 121.666) (end 327.406 121.666) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 324.739 120.269) (end 323.977 120.269) (width 0.2032) (layer Composant) (net 15) (status 400))
+ (segment (start 103.8352 78.867) (end 103.8352 74.676) (width 0.2032) (layer Composant) (net 15) (status 800))
+ (via (at 324.739 94.361) (size 0.889) (layers Composant Cuivre) (net 15))
+ (segment (start 329.946 122.555) (end 330.835 122.555) (width 0.2032) (layer VCC_layer) (net 15) (status 400))
+ (segment (start 104.267 74.2442) (end 104.267 62.738) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 324.866 93.98) (end 324.993 94.107) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 324.993 94.361) (end 324.739 94.361) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 324.739 94.361) (end 324.739 91.059) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 324.7136 92.0242) (end 324.7136 93.98) (width 0.2032) (layer Composant) (net 15) (status 800))
+ (segment (start 319.913 61.214) (end 320.294 60.833) (width 0.2032) (layer VCC_layer) (net 15))
+ (via (at 105.029 58.928) (size 0.889) (layers Composant Cuivre) (net 15))
+ (segment (start 295.402 60.071) (end 302.26 60.071) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 323.977 120.269) (end 325.374 121.666) (width 0.2032) (layer VCC_layer) (net 15) (status 800))
+ (segment (start 327.406 121.666) (end 327.787 122.047) (width 0.2032) (layer VCC_layer) (net 15))
+ (segment (start 324.993 120.015) (end 324.739 120.269) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 162.179 60.198) (end 162.179 61.595) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 169.037 58.547) (end 293.878 58.547) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 157.607 57.785) (end 158.75 58.928) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 158.75 58.928) (end 160.909 58.928) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 160.909 58.928) (end 162.179 60.198) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 163.322 65.913) (end 166.243 65.913) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 168.783 58.801) (end 169.037 58.547) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 162.687 65.278) (end 163.322 65.913) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 162.687 62.103) (end 162.687 65.278) (width 0.2032) (layer GND_layer) (net 15))
+ (segment (start 324.7136 93.98) (end 324.866 93.98) (width 0.2032) (layer Composant) (net 15))
+ (segment (start 181.737 80.137) (end 181.356 79.756) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 300.228 102.489) (end 299.212 103.505) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 299.212 103.505) (end 289.306 103.505) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 155.067 79.375) (end 154.559 78.867) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 155.067 79.375) (end 161.925 79.375) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 131.445 80.645) (end 127.254 80.645) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 288.798 102.997) (end 274.828 102.997) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 322.453 105.283) (end 320.421 105.283) (width 0.2032) (layer Cuivre) (net 16))
+ (via (at 322.453 105.283) (size 0.889) (layers Composant Cuivre) (net 16))
+ (segment (start 322.453 105.791) (end 322.453 105.283) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 318.135 104.521) (end 314.706 104.521) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 247.904 105.537) (end 186.309 105.537) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 322.961 116.713) (end 322.961 106.299) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 184.785 85.725) (end 183.388 84.328) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 323.469 123.825) (end 330.581 123.825) (width 0.2032) (layer VCC_layer) (net 16))
+ (segment (start 183.388 80.772) (end 182.753 80.137) (width 0.2032) (layer Composant) (net 16))
+ (via (at 182.753 80.137) (size 0.889) (layers Composant Cuivre) (net 16))
+ (segment (start 184.785 106.426) (end 183.896 105.537) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 165.227 80.772) (end 163.322 80.772) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 185.42 106.426) (end 184.785 106.426) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 184.785 104.648) (end 184.785 85.725) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 289.306 103.505) (end 288.798 102.997) (width 0.2032) (layer Cuivre) (net 16))
+ (via (at 105.156 80.391) (size 0.889) (layers Composant Cuivre) (net 16))
+ (segment (start 105.41 79.629) (end 105.156 79.883) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 182.753 80.137) (end 181.737 80.137) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 312.039 103.251) (end 311.277 102.489) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 181.356 79.756) (end 166.243 79.756) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 166.243 79.756) (end 165.227 80.772) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 313.436 103.251) (end 312.039 103.251) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 314.706 104.521) (end 313.436 103.251) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 186.309 105.537) (end 185.42 106.426) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 318.389 105.664) (end 318.389 104.775) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 318.643 105.918) (end 318.389 105.664) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 163.322 80.772) (end 161.925 79.375) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 320.421 105.283) (end 319.786 105.918) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 318.389 104.775) (end 318.135 104.521) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 322.961 106.299) (end 322.453 105.791) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 330.835 124.079) (end 330.835 125.095) (width 0.2032) (layer VCC_layer) (net 16) (status 400))
+ (segment (start 322.834 123.19) (end 323.469 123.825) (width 0.2032) (layer VCC_layer) (net 16))
+ (segment (start 330.581 123.825) (end 330.835 124.079) (width 0.2032) (layer VCC_layer) (net 16))
+ (segment (start 105.156 80.391) (end 105.156 78.994) (width 0.2032) (layer Composant) (net 16))
+ (via (at 183.896 105.537) (size 0.889) (layers Composant Cuivre) (net 16))
+ (segment (start 183.896 105.537) (end 184.785 104.648) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 132.969 79.121) (end 131.445 80.645) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 126.238 79.629) (end 105.41 79.629) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 105.156 79.883) (end 105.156 80.391) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 150.241 78.867) (end 149.987 78.613) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 319.786 105.918) (end 318.643 105.918) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 311.277 102.489) (end 300.228 102.489) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 183.388 84.328) (end 183.388 80.772) (width 0.2032) (layer Composant) (net 16))
+ (segment (start 127.254 80.645) (end 126.238 79.629) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 105.156 78.994) (end 105.1306 78.867) (width 0.2032) (layer Composant) (net 16) (status 400))
+ (segment (start 260.35 104.013) (end 258.445 105.918) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 248.285 105.918) (end 247.904 105.537) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 258.445 105.918) (end 248.285 105.918) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 323.977 117.729) (end 322.834 118.872) (width 0.2032) (layer VCC_layer) (net 16) (status 800))
+ (segment (start 154.559 78.867) (end 150.241 78.867) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 322.834 118.872) (end 322.834 123.19) (width 0.2032) (layer VCC_layer) (net 16))
+ (segment (start 149.987 78.613) (end 137.922 78.613) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 137.922 78.613) (end 137.414 79.121) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 137.414 79.121) (end 132.969 79.121) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 323.977 117.729) (end 322.961 116.713) (width 0.2032) (layer Composant) (net 16) (status 800))
+ (segment (start 274.828 102.997) (end 273.812 104.013) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 273.812 104.013) (end 260.35 104.013) (width 0.2032) (layer Cuivre) (net 16))
+ (segment (start 284.988 99.822) (end 283.21 99.822) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 105.918 80.899) (end 105.029 81.788) (width 0.2032) (layer Cuivre) (net 17))
+ (via (at 183.642 100.711) (size 0.889) (layers Composant Cuivre) (net 17))
+ (segment (start 105.029 81.788) (end 103.505 81.788) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 103.505 81.788) (end 103.251 82.042) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 103.251 82.042) (end 100.203 82.042) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 183.642 100.711) (end 183.642 99.949) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 183.642 99.949) (end 183.388 99.695) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 183.388 99.695) (end 183.388 88.265) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 162.814 81.28) (end 175.514 81.28) (width 0.2032) (layer Cuivre) (net 17))
+ (via (at 175.514 81.28) (size 0.889) (layers Composant Cuivre) (net 17))
+ (segment (start 321.818 115.443) (end 321.818 113.411) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 327.533 116.713) (end 323.088 116.713) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 323.088 116.713) (end 321.818 115.443) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 180.975 85.852) (end 177.8 85.852) (width 0.2032) (layer Composant) (net 17))
+ (via (at 318.389 109.347) (size 0.889) (layers Composant Cuivre) (net 17))
+ (segment (start 318.389 110.617) (end 318.389 109.347) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 321.437 113.03) (end 320.802 113.03) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 321.818 113.411) (end 321.437 113.03) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 187.071 100.076) (end 186.436 100.711) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 318.389 109.347) (end 311.404 109.347) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 231.648 100.076) (end 187.071 100.076) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 233.172 101.6) (end 231.648 100.076) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 235.077 101.6) (end 233.172 101.6) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 236.728 99.949) (end 235.077 101.6) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 283.083 99.949) (end 236.728 99.949) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 283.21 99.822) (end 283.083 99.949) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 161.417 79.883) (end 154.686 79.883) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 311.404 109.347) (end 311.15 109.093) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 186.436 100.711) (end 183.642 100.711) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 183.388 88.265) (end 180.975 85.852) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 320.802 113.03) (end 318.389 110.617) (width 0.2032) (layer VCC_layer) (net 17))
+ (segment (start 177.8 85.852) (end 175.514 83.566) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 133.223 79.629) (end 131.699 81.153) (width 0.2032) (layer Cuivre) (net 17))
+ (via (at 284.988 99.822) (size 0.889) (layers Composant Cuivre) (net 17))
+ (segment (start 284.988 110.744) (end 284.988 99.822) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 292.1 110.744) (end 284.988 110.744) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 99.695 81.534) (end 99.695 80.772) (width 0.2032) (layer Cuivre) (net 17))
+ (via (at 284.988 110.744) (size 0.889) (layers Composant Cuivre) (net 17))
+ (segment (start 154.686 79.883) (end 154.178 79.375) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 106.426 80.137) (end 105.918 80.645) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 105.918 80.645) (end 105.918 80.899) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 126.111 80.137) (end 106.426 80.137) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 127.127 81.153) (end 126.111 80.137) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 99.441 78.867) (end 99.2886 78.867) (width 0.2032) (layer Composant) (net 17) (status 400))
+ (segment (start 99.441 80.518) (end 99.441 78.867) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 99.695 80.772) (end 99.441 80.518) (width 0.2032) (layer Composant) (net 17))
+ (via (at 99.695 80.772) (size 0.889) (layers Composant Cuivre) (net 17))
+ (segment (start 137.541 79.629) (end 133.223 79.629) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 100.203 82.042) (end 99.695 81.534) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 311.15 109.093) (end 293.751 109.093) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 293.751 109.093) (end 292.1 110.744) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 175.514 81.28) (end 175.514 83.566) (width 0.2032) (layer Composant) (net 17))
+ (segment (start 330.835 120.015) (end 327.533 116.713) (width 0.2032) (layer VCC_layer) (net 17) (status 800))
+ (segment (start 131.699 81.153) (end 127.127 81.153) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 162.814 81.28) (end 161.417 79.883) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 154.178 79.375) (end 137.795 79.375) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 137.795 79.375) (end 137.541 79.629) (width 0.2032) (layer Cuivre) (net 17))
+ (segment (start 299.339 112.649) (end 298.577 112.649) (width 0.2032) (layer Composant) (net 18) (status 400))
+ (segment (start 298.577 125.349) (end 298.577 122.809) (width 0.2032) (layer Composant) (net 18) (status C00))
+ (segment (start 296.037 115.189) (end 296.037 112.649) (width 0.2032) (layer Composant) (net 18) (status C00))
+ (segment (start 298.577 122.809) (end 298.577 120.269) (width 0.2032) (layer Composant) (net 18) (status C00))
+ (segment (start 306.197 121.158) (end 306.451 120.904) (width 0.2032) (layer Cuivre) (net 18))
+ (segment (start 306.451 120.904) (end 307.721 120.904) (width 0.2032) (layer Cuivre) (net 18))
+ (segment (start 307.721 120.904) (end 307.721 121.285) (width 0.2032) (layer Cuivre) (net 18) (status 400))
+ (segment (start 306.197 121.539) (end 306.197 121.158) (width 0.2032) (layer Cuivre) (net 18))
+ (via (at 306.197 121.539) (size 0.889) (layers Composant Cuivre) (net 18))
+ (segment (start 303.657 125.349) (end 306.197 125.349) (width 0.2032) (layer Cuivre) (net 18) (status C00))
+ (segment (start 299.593 112.903) (end 299.339 112.649) (width 0.2032) (layer Composant) (net 18))
+ (segment (start 298.577 125.349) (end 301.117 125.349) (width 0.2032) (layer Cuivre) (net 18) (status C00))
+ (segment (start 306.197 125.349) (end 306.197 121.539) (width 0.2032) (layer Composant) (net 18) (status 800))
+ (segment (start 299.593 119.253) (end 299.593 112.903) (width 0.2032) (layer Composant) (net 18))
+ (segment (start 301.117 125.349) (end 303.657 125.349) (width 0.2032) (layer Cuivre) (net 18) (status C00))
+ (segment (start 298.577 120.269) (end 299.593 119.253) (width 0.2032) (layer Composant) (net 18) (status 800))
+ (segment (start 296.037 112.649) (end 298.577 112.649) (width 0.2032) (layer Cuivre) (net 18) (status C00))
+ (segment (start 339.979 100.838) (end 339.979 102.87) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 312.674 71.4248) (end 319.786 71.4248) (width 0.2032) (layer Composant) (net 19) (status 800))
+ (segment (start 326.517 102.489) (end 327.787 101.219) (width 0.2032) (layer Composant) (net 19) (status 800))
+ (segment (start 327.787 94.107) (end 327.787 89.535) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 327.406 85.598) (end 327.406 73.279) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 327.787 101.219) (end 327.787 94.107) (width 0.2032) (layer Composant) (net 19))
+ (segment (start 326.517 102.489) (end 327.406 102.489) (width 0.2032) (layer Cuivre) (net 19) (status 800))
+ (segment (start 327.787 89.535) (end 328.676 88.646) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 327.406 102.489) (end 329.311 100.584) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 319.786 71.628) (end 319.786 71.501) (width 0.2032) (layer Composant) (net 19))
+ (segment (start 329.311 100.584) (end 339.725 100.584) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 325.755 71.628) (end 327.406 73.279) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 350.901 103.251) (end 351.155 102.997) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 328.676 88.646) (end 328.676 85.979) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 324.866 71.628) (end 319.786 71.628) (width 0.2032) (layer Composant) (net 19))
+ (segment (start 325.755 71.628) (end 324.866 71.628) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 339.725 100.584) (end 339.979 100.838) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 351.155 102.997) (end 351.155 102.235) (width 0.2032) (layer Cuivre) (net 19) (status 400))
+ (segment (start 339.979 102.87) (end 340.36 103.251) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 328.549 85.852) (end 327.66 85.852) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 319.786 71.501) (end 319.8368 71.5518) (width 0.2032) (layer Composant) (net 19) (status 400))
+ (via (at 324.866 71.628) (size 0.889) (layers Composant Cuivre) (net 19))
+ (segment (start 340.36 103.251) (end 350.901 103.251) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 327.66 85.852) (end 327.406 85.598) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 328.676 85.979) (end 328.549 85.852) (width 0.2032) (layer Cuivre) (net 19))
+ (segment (start 319.786 71.4248) (end 319.8368 71.5518) (width 0.2032) (layer Composant) (net 19) (status 400))
+ (via (at 327.787 94.107) (size 0.889) (layers Composant Cuivre) (net 19))
+ (segment (start 339.471 104.267) (end 338.963 103.759) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 322.453 90.678) (end 322.199 90.424) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 316.484 74.93) (end 316.484 70.866) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 322.961 101.346) (end 322.453 100.838) (width 0.2032) (layer VCC_layer) (net 20))
+ (segment (start 339.471 105.41) (end 339.471 104.267) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 312.674 70.9168) (end 319.913 70.9168) (width 0.2032) (layer Composant) (net 20) (status 800))
+ (segment (start 323.977 105.029) (end 324.993 105.029) (width 0.2032) (layer Cuivre) (net 20) (status 800))
+ (segment (start 322.961 102.997) (end 322.961 101.346) (width 0.2032) (layer VCC_layer) (net 20))
+ (via (at 322.453 94.107) (size 0.889) (layers Composant Cuivre) (net 20))
+ (segment (start 326.009 106.045) (end 327.152 106.045) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 338.963 103.759) (end 329.438 103.759) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 320.167 89.662) (end 320.167 76.2) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 319.913 70.866) (end 319.8368 70.8914) (width 0.2032) (layer Composant) (net 20) (status 400))
+ (segment (start 340.36 106.299) (end 348.615 106.299) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 320.929 90.424) (end 320.167 89.662) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 320.802 70.358) (end 321.183 70.739) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 317.5 75.946) (end 316.484 74.93) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 322.072 70.739) (end 321.945 70.866) (width 0.2032) (layer Composant) (net 20))
+ (via (at 322.072 70.739) (size 0.889) (layers Composant Cuivre) (net 20))
+ (segment (start 316.992 70.358) (end 320.802 70.358) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 340.36 106.299) (end 339.471 105.41) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 319.913 75.946) (end 317.5 75.946) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 322.453 100.838) (end 322.453 94.107) (width 0.2032) (layer VCC_layer) (net 20))
+ (segment (start 321.945 70.866) (end 319.913 70.866) (width 0.2032) (layer Composant) (net 20))
+ (segment (start 316.484 70.866) (end 316.992 70.358) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 327.152 106.045) (end 329.438 103.759) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 319.913 70.9168) (end 319.8368 70.8914) (width 0.2032) (layer Composant) (net 20) (status 400))
+ (segment (start 321.183 70.739) (end 322.072 70.739) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 348.615 106.299) (end 349.123 106.807) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 322.453 94.107) (end 322.453 90.678) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 351.155 106.553) (end 351.155 104.775) (width 0.2032) (layer Cuivre) (net 20) (status 400))
+ (segment (start 350.901 106.807) (end 351.155 106.553) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 324.993 105.029) (end 326.009 106.045) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 323.977 105.029) (end 323.977 104.013) (width 0.2032) (layer VCC_layer) (net 20) (status 800))
+ (segment (start 320.167 76.2) (end 319.913 75.946) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 322.199 90.424) (end 320.929 90.424) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 323.977 104.013) (end 322.961 102.997) (width 0.2032) (layer VCC_layer) (net 20))
+ (segment (start 349.123 106.807) (end 350.901 106.807) (width 0.2032) (layer Cuivre) (net 20))
+ (segment (start 306.832 85.852) (end 306.832 93.091) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 306.197 115.189) (end 306.197 99.949) (width 0.2032) (layer Composant) (net 21) (status 400))
+ (segment (start 306.197 115.189) (end 306.578 114.808) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 342.265 114.173) (end 352.044 114.173) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 305.181 99.695) (end 305.435 99.949) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 319.786 85.09) (end 319.8368 85.1916) (width 0.2032) (layer Composant) (net 21) (status 400))
+ (segment (start 352.806 114.935) (end 353.695 114.935) (width 0.2032) (layer Cuivre) (net 21) (status 400))
+ (segment (start 306.9336 82.169) (end 306.9336 82.931) (width 0.2032) (layer Composant) (net 21) (status 800))
+ (segment (start 322.072 114.808) (end 323.469 116.205) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 316.23 85.852) (end 316.992 85.09) (width 0.2032) (layer Composant) (net 21))
+ (via (at 306.197 115.189) (size 0.889) (layers Composant Cuivre) (net 21))
+ (segment (start 316.992 85.09) (end 319.786 85.09) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 327.279 116.205) (end 330.073 113.411) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 323.469 116.205) (end 327.279 116.205) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 306.832 82.931) (end 306.832 85.852) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 306.9336 82.931) (end 306.832 82.931) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 352.044 114.173) (end 352.806 114.935) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 330.073 113.411) (end 341.503 113.411) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 341.503 113.411) (end 342.265 114.173) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 305.435 99.949) (end 306.197 99.949) (width 0.2032) (layer Composant) (net 21) (status 400))
+ (segment (start 306.832 93.091) (end 305.181 94.742) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 305.181 94.742) (end 305.181 99.695) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 306.578 114.808) (end 322.072 114.808) (width 0.2032) (layer Cuivre) (net 21))
+ (segment (start 316.23 85.852) (end 306.832 85.852) (width 0.2032) (layer Composant) (net 21))
+ (segment (start 355.219 108.712) (end 354.838 108.331) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 355.219 110.617) (end 355.219 108.712) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 307.213 97.79) (end 307.213 106.045) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 307.594 85.09) (end 307.594 86.741) (width 0.2032) (layer Cuivre) (net 22))
+ (via (at 307.594 86.741) (size 0.889) (layers Composant Cuivre) (net 22))
+ (segment (start 319.786 84.455) (end 319.8368 84.5566) (width 0.2032) (layer Composant) (net 22) (status 400))
+ (via (at 307.594 85.09) (size 0.889) (layers Composant Cuivre) (net 22))
+ (segment (start 313.055 106.045) (end 307.213 106.045) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 307.594 86.741) (end 307.594 93.218) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 355.473 110.871) (end 355.219 110.617) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 356.235 111.125) (end 355.981 110.871) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 355.981 110.871) (end 355.473 110.871) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 316.865 84.455) (end 319.786 84.455) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 307.4416 82.169) (end 307.4416 82.931) (width 0.2032) (layer Composant) (net 22) (status 800))
+ (segment (start 307.467 82.931) (end 307.467 84.328) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 315.976 85.344) (end 316.865 84.455) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 328.168 105.791) (end 339.09 105.791) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 313.055 106.045) (end 313.563 106.553) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 307.594 93.218) (end 306.197 94.615) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 307.4416 82.931) (end 307.467 82.931) (width 0.2032) (layer Composant) (net 22))
+ (via (at 307.213 106.045) (size 0.889) (layers Composant Cuivre) (net 22))
+ (segment (start 306.197 94.615) (end 306.197 97.409) (width 0.2032) (layer Composant) (net 22) (status 400))
+ (segment (start 354.838 108.331) (end 349.885 108.331) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 327.406 106.553) (end 328.168 105.791) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 306.832 97.409) (end 306.197 97.409) (width 0.2032) (layer Composant) (net 22) (status 400))
+ (segment (start 307.594 85.09) (end 307.594 84.455) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 315.976 85.344) (end 307.848 85.344) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 307.213 97.79) (end 306.832 97.409) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 327.406 106.553) (end 325.755 106.553) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 339.09 105.791) (end 340.106 106.807) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 348.361 106.807) (end 349.885 108.331) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 307.848 85.344) (end 307.594 85.09) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 356.235 112.395) (end 356.235 111.125) (width 0.2032) (layer Cuivre) (net 22) (status 800))
+ (segment (start 307.467 84.328) (end 307.594 84.455) (width 0.2032) (layer Composant) (net 22))
+ (segment (start 313.563 106.553) (end 322.834 106.553) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 322.834 106.553) (end 323.342 106.045) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 325.247 106.045) (end 323.342 106.045) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 325.755 106.553) (end 325.247 106.045) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 348.361 106.807) (end 340.106 106.807) (width 0.2032) (layer Cuivre) (net 22))
+ (segment (start 329.946 108.331) (end 330.327 108.712) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 342.011 112.268) (end 338.455 108.712) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 316.865 83.82) (end 319.786 83.82) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 353.695 112.395) (end 348.996 112.395) (width 0.2032) (layer Cuivre) (net 23) (status 800))
+ (segment (start 330.327 108.712) (end 338.455 108.712) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 308.229 93.218) (end 307.721 93.726) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 308.737 107.315) (end 308.737 99.949) (width 0.2032) (layer Composant) (net 23) (status 400))
+ (segment (start 307.721 93.726) (end 307.721 99.695) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 342.646 113.157) (end 342.011 112.522) (width 0.2032) (layer Cuivre) (net 23))
+ (via (at 308.61 84.455) (size 0.889) (layers Composant Cuivre) (net 23))
+ (segment (start 307.9242 82.931) (end 307.975 82.931) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 327.66 108.331) (end 329.946 108.331) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 308.229 87.757) (end 308.229 93.218) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 327.66 108.331) (end 327.406 108.585) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 307.975 82.931) (end 307.975 84.074) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 307.9242 82.169) (end 307.9242 82.931) (width 0.2032) (layer Composant) (net 23) (status 800))
+ (segment (start 348.234 113.157) (end 342.646 113.157) (width 0.2032) (layer Cuivre) (net 23))
+ (via (at 308.61 87.376) (size 0.889) (layers Composant Cuivre) (net 23))
+ (segment (start 308.991 84.836) (end 315.849 84.836) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 308.61 84.455) (end 308.991 84.836) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 342.011 112.522) (end 342.011 112.268) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 348.234 113.157) (end 348.996 112.395) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 307.721 99.695) (end 307.975 99.949) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 315.849 84.836) (end 316.865 83.82) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 310.007 108.585) (end 308.737 107.315) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 307.975 99.949) (end 308.737 99.949) (width 0.2032) (layer Composant) (net 23) (status 400))
+ (segment (start 308.61 84.455) (end 308.61 87.376) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 327.406 108.585) (end 310.007 108.585) (width 0.2032) (layer Cuivre) (net 23))
+ (segment (start 319.786 83.82) (end 319.8368 83.8962) (width 0.2032) (layer Composant) (net 23) (status 400))
+ (segment (start 308.356 84.455) (end 308.61 84.455) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 308.61 87.376) (end 308.229 87.757) (width 0.2032) (layer Composant) (net 23))
+ (via (at 308.737 107.315) (size 0.889) (layers Composant Cuivre) (net 23))
+ (segment (start 308.356 84.455) (end 307.975 84.074) (width 0.2032) (layer Composant) (net 23))
+ (segment (start 351.409 98.425) (end 351.155 98.679) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 315.976 83.947) (end 316.738 83.185) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 309.753 98.425) (end 320.802 98.425) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 348.361 98.679) (end 347.472 97.79) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 356.235 108.585) (end 355.981 108.331) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 309.88 83.947) (end 309.88 87.249) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 347.472 97.79) (end 340.614 97.79) (width 0.2032) (layer Cuivre) (net 24))
+ (via (at 309.88 87.249) (size 0.889) (layers Composant Cuivre) (net 24))
+ (segment (start 308.483 83.439) (end 308.483 82.296) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 354.711 98.679) (end 354.457 98.425) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 354.711 107.442) (end 354.711 98.679) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 316.738 83.185) (end 319.786 83.185) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 308.737 97.409) (end 309.753 98.425) (width 0.2032) (layer Cuivre) (net 24) (status 800))
+ (segment (start 355.981 108.331) (end 355.6 108.331) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 356.235 109.855) (end 356.235 108.585) (width 0.2032) (layer Cuivre) (net 24) (status 800))
+ (segment (start 309.626 83.947) (end 309.88 83.947) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 325.501 98.933) (end 321.31 98.933) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 354.457 98.425) (end 351.409 98.425) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 308.737 97.409) (end 308.737 88.392) (width 0.2032) (layer Composant) (net 24) (status 800))
+ (segment (start 326.009 98.425) (end 325.501 98.933) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 351.155 98.679) (end 348.361 98.679) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 309.88 83.947) (end 315.976 83.947) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 340.614 97.79) (end 339.979 98.425) (width 0.2032) (layer Cuivre) (net 24))
+ (via (at 309.88 83.947) (size 0.889) (layers Composant Cuivre) (net 24))
+ (segment (start 309.88 87.249) (end 308.737 88.392) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 309.372 83.693) (end 309.626 83.947) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 308.483 83.439) (end 308.737 83.693) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 339.979 98.425) (end 326.009 98.425) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 308.737 83.693) (end 309.372 83.693) (width 0.2032) (layer Composant) (net 24))
+ (segment (start 308.483 82.296) (end 308.4322 82.169) (width 0.2032) (layer Composant) (net 24) (status 400))
+ (segment (start 354.711 107.442) (end 355.6 108.331) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 320.802 98.425) (end 321.31 98.933) (width 0.2032) (layer Cuivre) (net 24))
+ (segment (start 319.786 83.185) (end 319.8368 83.2612) (width 0.2032) (layer Composant) (net 24) (status 400))
+ (segment (start 322.199 99.949) (end 323.723 101.473) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 315.849 90.297) (end 316.611 91.059) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 308.9402 82.169) (end 308.9402 83.058) (width 0.2032) (layer Composant) (net 25) (status 800))
+ (segment (start 320.167 94.996) (end 320.167 96.266) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 351.917 101.473) (end 352.171 101.727) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 319.913 82.55) (end 319.8368 82.6008) (width 0.2032) (layer Composant) (net 25) (status 400))
+ (via (at 351.917 100.584) (size 0.889) (layers Composant Cuivre) (net 25))
+ (segment (start 319.913 82.677) (end 319.913 82.55) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 341.376 101.092) (end 351.028 101.092) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 316.103 83.058) (end 316.484 82.677) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 316.611 91.44) (end 316.611 91.059) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 320.167 96.266) (end 320.421 96.52) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 352.425 109.855) (end 352.171 109.601) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 320.421 96.52) (end 320.421 98.933) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 315.849 83.058) (end 316.103 83.058) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 320.167 94.996) (end 316.611 91.44) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 315.849 82.423) (end 315.849 83.058) (width 0.2032) (layer Composant) (net 25))
+ (via (at 315.849 82.423) (size 0.889) (layers Composant Cuivre) (net 25))
+ (segment (start 328.676 100.076) (end 340.36 100.076) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 351.536 100.584) (end 351.917 100.584) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 315.849 90.297) (end 315.849 82.423) (width 0.2032) (layer Cuivre) (net 25))
+ (via (at 315.849 90.297) (size 0.889) (layers Composant Cuivre) (net 25))
+ (segment (start 351.917 100.584) (end 351.917 101.473) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 351.028 101.092) (end 351.536 100.584) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 352.171 101.727) (end 352.171 109.601) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 353.695 109.855) (end 352.425 109.855) (width 0.2032) (layer Composant) (net 25) (status 800))
+ (segment (start 308.9402 83.058) (end 315.849 83.058) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 327.279 101.473) (end 328.676 100.076) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 340.36 100.076) (end 341.376 101.092) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 316.484 82.677) (end 319.913 82.677) (width 0.2032) (layer Composant) (net 25))
+ (segment (start 321.437 99.949) (end 322.199 99.949) (width 0.2032) (layer Cuivre) (net 25) (status 800))
+ (segment (start 323.723 101.473) (end 327.279 101.473) (width 0.2032) (layer Cuivre) (net 25))
+ (segment (start 321.437 99.949) (end 320.421 98.933) (width 0.2032) (layer Composant) (net 25) (status 800))
+ (segment (start 320.675 96.012) (end 321.437 96.774) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 347.599 97.282) (end 348.488 98.171) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 317.5 81.915) (end 319.786 81.915) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 314.071 80.518) (end 315.468 80.518) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 339.725 97.917) (end 340.36 97.282) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 313.563 79.629) (end 313.563 80.01) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 351.028 98.171) (end 351.282 97.917) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 355.219 98.171) (end 355.219 106.299) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 317.5 91.567) (end 317.5 91.186) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 313.309 79.375) (end 312.674 79.375) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 320.675 94.742) (end 320.675 96.012) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 321.437 97.409) (end 321.437 98.171) (width 0.2032) (layer Cuivre) (net 26) (status 800))
+ (via (at 316.738 81.788) (size 0.889) (layers Composant Cuivre) (net 26))
+ (segment (start 321.437 98.171) (end 321.691 98.425) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 321.691 98.425) (end 325.12 98.425) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 354.965 97.917) (end 355.219 98.171) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 325.12 98.425) (end 325.628 97.917) (width 0.2032) (layer Cuivre) (net 26))
+ (via (at 316.738 89.535) (size 0.889) (layers Composant Cuivre) (net 26))
+ (segment (start 316.738 89.535) (end 316.738 81.788) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 316.738 90.424) (end 316.738 89.535) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 340.36 97.282) (end 347.599 97.282) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 319.786 81.915) (end 319.8368 81.9404) (width 0.2032) (layer Composant) (net 26) (status 400))
+ (segment (start 317.5 81.915) (end 317.373 81.788) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 316.738 81.788) (end 317.373 81.788) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 348.488 98.171) (end 351.028 98.171) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 316.738 81.788) (end 315.468 80.518) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 312.674 79.375) (end 312.674 79.4258) (width 0.2032) (layer Composant) (net 26) (status 400))
+ (segment (start 317.5 91.186) (end 316.738 90.424) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 351.282 97.917) (end 354.965 97.917) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 356.235 107.315) (end 355.219 106.299) (width 0.2032) (layer Cuivre) (net 26) (status 800))
+ (segment (start 321.437 96.774) (end 321.437 97.409) (width 0.2032) (layer Composant) (net 26) (status 400))
+ (segment (start 313.563 80.01) (end 314.071 80.518) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 320.675 94.742) (end 317.5 91.567) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 313.309 79.375) (end 313.563 79.629) (width 0.2032) (layer Composant) (net 26))
+ (segment (start 325.628 97.917) (end 339.725 97.917) (width 0.2032) (layer Cuivre) (net 26))
+ (segment (start 293.878 120.396) (end 293.878 102.743) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 312.674 77.47) (end 312.674 77.4192) (width 0.2032) (layer Composant) (net 27) (status 400))
+ (segment (start 319.786 79.375) (end 319.8368 79.3496) (width 0.2032) (layer Composant) (net 27) (status 400))
+ (segment (start 297.053 98.425) (end 296.672 98.044) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 318.135 126.873) (end 317.627 126.365) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 294.767 126.365) (end 294.767 121.285) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 297.053 101.473) (end 297.053 98.425) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 296.037 102.489) (end 297.053 101.473) (width 0.2032) (layer Composant) (net 27) (status 800))
+ (segment (start 317.627 126.365) (end 294.767 126.365) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 293.878 102.743) (end 294.132 102.489) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 300.609 91.313) (end 302.641 89.281) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 331.216 126.619) (end 330.962 126.873) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 353.695 125.095) (end 352.171 126.619) (width 0.2032) (layer Cuivre) (net 27) (status 800))
+ (segment (start 315.849 77.4192) (end 317.8048 79.375) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 303.022 77.724) (end 303.022 77.47) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 296.926 91.694) (end 297.307 91.313) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 296.672 91.948) (end 296.926 91.694) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 317.8048 79.375) (end 319.786 79.375) (width 0.2032) (layer Composant) (net 27))
+ (via (at 296.926 91.694) (size 0.889) (layers Composant Cuivre) (net 27))
+ (segment (start 303.022 77.47) (end 312.674 77.47) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 302.641 78.105) (end 303.022 77.724) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 302.641 89.281) (end 302.641 78.105) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 297.307 91.313) (end 300.609 91.313) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 294.132 102.489) (end 296.037 102.489) (width 0.2032) (layer Composant) (net 27) (status 400))
+ (via (at 294.767 126.365) (size 0.889) (layers Composant Cuivre) (net 27))
+ (segment (start 296.672 98.044) (end 296.672 91.948) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 294.767 121.285) (end 293.878 120.396) (width 0.2032) (layer Composant) (net 27))
+ (segment (start 312.674 77.4192) (end 315.849 77.4192) (width 0.2032) (layer Composant) (net 27) (status 800))
+ (segment (start 352.171 126.619) (end 331.216 126.619) (width 0.2032) (layer Cuivre) (net 27))
+ (segment (start 330.962 126.873) (end 318.135 126.873) (width 0.2032) (layer Cuivre) (net 27))
+ (via (at 303.022 77.47) (size 0.889) (layers Composant Cuivre) (net 27))
+ (segment (start 355.219 122.555) (end 354.203 121.539) (width 0.2032) (layer Cuivre) (net 28))
+ (via (at 298.069 92.075) (size 0.889) (layers Composant Cuivre) (net 28))
+ (segment (start 298.577 99.949) (end 298.577 99.187) (width 0.2032) (layer Composant) (net 28) (status 800))
+ (segment (start 298.069 92.075) (end 298.323 91.821) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 298.577 100.965) (end 300.228 102.616) (width 0.2032) (layer Composant) (net 28))
+ (via (at 304.292 76.708) (size 0.889) (layers Composant Cuivre) (net 28))
+ (segment (start 307.086 76.962) (end 312.674 76.962) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 306.832 76.708) (end 307.086 76.962) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 327.914 123.825) (end 328.168 123.571) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 298.323 91.821) (end 300.863 91.821) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 300.863 123.317) (end 300.228 122.682) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 318.008 123.317) (end 318.516 123.825) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 303.149 78.994) (end 304.292 77.851) (width 0.2032) (layer Cuivre) (net 28))
+ (via (at 300.228 122.682) (size 0.889) (layers Composant Cuivre) (net 28))
+ (segment (start 300.228 122.682) (end 300.228 102.616) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 319.532 78.74) (end 319.8368 78.6892) (width 0.2032) (layer Composant) (net 28) (status 400))
+ (segment (start 298.577 99.949) (end 298.577 100.965) (width 0.2032) (layer Composant) (net 28) (status 800))
+ (segment (start 356.235 122.555) (end 355.219 122.555) (width 0.2032) (layer Cuivre) (net 28) (status 800))
+ (segment (start 312.674 76.962) (end 312.674 76.9112) (width 0.2032) (layer Composant) (net 28) (status 400))
+ (segment (start 354.203 121.539) (end 353.187 121.539) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 353.187 121.539) (end 352.171 122.555) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 351.663 123.571) (end 352.171 123.063) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 297.561 98.171) (end 297.561 92.583) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 304.292 77.851) (end 304.292 76.708) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 316.103 76.9112) (end 317.9318 78.74) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 317.9318 78.74) (end 319.532 78.74) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 300.863 91.821) (end 303.149 89.535) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 318.008 123.317) (end 300.863 123.317) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 304.292 76.708) (end 306.832 76.708) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 303.149 89.535) (end 303.149 78.994) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 328.168 123.571) (end 351.663 123.571) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 318.516 123.825) (end 327.914 123.825) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 312.674 76.9112) (end 316.103 76.9112) (width 0.2032) (layer Composant) (net 28) (status 800))
+ (segment (start 298.577 99.187) (end 297.561 98.171) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 352.171 122.555) (end 352.171 123.063) (width 0.2032) (layer Cuivre) (net 28))
+ (segment (start 297.561 92.583) (end 298.069 92.075) (width 0.2032) (layer Composant) (net 28))
+ (segment (start 302.133 89.154) (end 302.133 76.454) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 293.116 100.203) (end 293.37 99.949) (width 0.2032) (layer Composant) (net 29))
+ (via (at 302.133 76.454) (size 0.889) (layers Composant Cuivre) (net 29))
+ (segment (start 305.054 76.2) (end 307.086 76.2) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 302.133 76.454) (end 302.641 75.946) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 317.627 123.825) (end 294.386 123.825) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 294.005 123.444) (end 293.116 123.444) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 353.695 122.555) (end 352.679 123.571) (width 0.2032) (layer Cuivre) (net 29) (status 800))
+ (segment (start 319.786 78.0796) (end 319.8368 78.0542) (width 0.2032) (layer Composant) (net 29) (status 400))
+ (segment (start 327.66 125.857) (end 327.66 124.968) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 316.357 76.4286) (end 318.008 78.0796) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 352.679 125.222) (end 351.79 126.111) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 307.086 76.2) (end 307.34 76.454) (width 0.2032) (layer Composant) (net 29))
+ (via (at 296.037 90.805) (size 0.889) (layers Composant Cuivre) (net 29))
+ (segment (start 294.386 123.825) (end 294.005 123.444) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 318.135 124.333) (end 317.627 123.825) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 307.34 76.454) (end 312.674 76.454) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 304.8 75.946) (end 302.641 75.946) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 296.037 90.805) (end 300.482 90.805) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 327.025 124.333) (end 327.66 124.968) (width 0.2032) (layer Cuivre) (net 29))
+ (via (at 293.116 123.444) (size 0.889) (layers Composant Cuivre) (net 29))
+ (segment (start 312.674 76.4286) (end 316.357 76.4286) (width 0.2032) (layer Composant) (net 29) (status 800))
+ (segment (start 318.008 78.0796) (end 319.786 78.0796) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 351.79 126.111) (end 327.914 126.111) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 327.914 126.111) (end 327.66 125.857) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 352.679 123.571) (end 352.679 125.222) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 293.37 99.949) (end 296.037 99.949) (width 0.2032) (layer Composant) (net 29) (status 400))
+ (segment (start 304.8 75.946) (end 305.054 76.2) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 296.037 99.949) (end 296.037 90.805) (width 0.2032) (layer Composant) (net 29) (status 800))
+ (segment (start 293.116 123.444) (end 293.116 100.203) (width 0.2032) (layer Composant) (net 29))
+ (segment (start 300.482 90.805) (end 302.133 89.154) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 312.674 76.454) (end 312.674 76.4286) (width 0.2032) (layer Composant) (net 29) (status 400))
+ (segment (start 327.025 124.333) (end 318.135 124.333) (width 0.2032) (layer Cuivre) (net 29))
+ (segment (start 307.975 74.168) (end 308.737 74.93) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 301.498 93.853) (end 301.498 93.345) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 302.133 111.76) (end 303.149 112.776) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 323.215 116.713) (end 321.818 115.316) (width 0.2032) (layer Cuivre) (net 30))
+ (via (at 301.498 93.853) (size 0.889) (layers Composant Cuivre) (net 30))
+ (segment (start 351.409 114.681) (end 342.011 114.681) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 307.086 76.454) (end 307.34 76.2) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 352.806 116.078) (end 351.409 114.681) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 304.673 90.17) (end 304.673 83.058) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 321.818 115.316) (end 307.213 115.316) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 355.981 116.078) (end 352.806 116.078) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 307.34 74.168) (end 307.975 74.168) (width 0.2032) (layer Composant) (net 30))
+ (via (at 307.34 74.168) (size 0.889) (layers Composant Cuivre) (net 30))
+ (segment (start 308.737 74.93) (end 312.674 74.93) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 312.674 74.93) (end 312.674 74.9046) (width 0.2032) (layer Composant) (net 30) (status 400))
+ (segment (start 327.406 116.713) (end 323.215 116.713) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 302.133 98.425) (end 302.133 111.76) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 301.498 93.345) (end 304.673 90.17) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 303.149 112.776) (end 303.149 115.189) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 301.117 97.409) (end 302.133 98.425) (width 0.2032) (layer Composant) (net 30) (status 800))
+ (segment (start 305.435 115.951) (end 304.673 115.189) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 312.674 74.9046) (end 316.738 74.9046) (width 0.2032) (layer Composant) (net 30) (status 800))
+ (segment (start 319.786 76.0476) (end 319.8368 76.0984) (width 0.2032) (layer Composant) (net 30) (status 400))
+ (segment (start 356.235 117.475) (end 356.235 116.332) (width 0.2032) (layer Cuivre) (net 30) (status 800))
+ (via (at 303.149 115.189) (size 0.889) (layers Composant Cuivre) (net 30))
+ (segment (start 356.235 116.332) (end 355.981 116.078) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 307.086 80.645) (end 307.086 76.454) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 304.673 83.058) (end 307.086 80.645) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 307.213 115.316) (end 306.578 115.951) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 307.34 76.2) (end 307.34 74.168) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 316.738 74.9046) (end 317.881 76.0476) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 317.881 76.0476) (end 319.786 76.0476) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 301.117 97.409) (end 301.117 94.234) (width 0.2032) (layer Composant) (net 30) (status 800))
+ (segment (start 342.011 114.681) (end 341.249 113.919) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 304.673 115.189) (end 303.149 115.189) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 306.578 115.951) (end 305.435 115.951) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 301.117 94.234) (end 301.498 93.853) (width 0.2032) (layer Composant) (net 30))
+ (segment (start 330.2 113.919) (end 327.406 116.713) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 341.249 113.919) (end 330.2 113.919) (width 0.2032) (layer Cuivre) (net 30))
+ (segment (start 307.467 72.517) (end 308.356 72.517) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 331.724 118.491) (end 328.168 118.491) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 304.038 119.634) (end 304.038 112.141) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 302.641 94.361) (end 303.149 93.853) (width 0.2032) (layer Composant) (net 31))
+ (via (at 303.149 93.853) (size 0.889) (layers Composant Cuivre) (net 31))
+ (segment (start 303.149 93.853) (end 303.149 92.456) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 303.149 92.456) (end 305.181 90.424) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 305.181 119.38) (end 312.293 119.38) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 312.293 119.38) (end 312.547 119.634) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 304.927 119.634) (end 305.181 119.38) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 307.594 80.899) (end 307.594 76.708) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 304.038 112.141) (end 303.657 111.76) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 307.594 76.708) (end 308.102 76.2) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 302.641 98.933) (end 302.641 94.361) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 308.356 72.517) (end 308.61 72.263) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 316.992 74.422) (end 315.341 74.422) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 315.341 74.422) (end 314.325 73.406) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 312.674 73.406) (end 314.325 73.406) (width 0.2032) (layer Composant) (net 31) (status 800))
+ (segment (start 316.992 74.422) (end 318.008 75.438) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 318.008 75.438) (end 319.8368 75.438) (width 0.2032) (layer Composant) (net 31) (status 400))
+ (segment (start 311.277 72.771) (end 310.769 72.263) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 303.657 99.949) (end 302.641 98.933) (width 0.2032) (layer Composant) (net 31) (status 800))
+ (segment (start 308.102 73.152) (end 308.102 76.2) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 311.277 73.279) (end 311.277 72.771) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 331.851 118.364) (end 331.724 118.491) (width 0.2032) (layer Cuivre) (net 31))
+ (via (at 307.467 72.517) (size 0.889) (layers Composant Cuivre) (net 31))
+ (segment (start 308.102 73.152) (end 307.467 72.517) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 305.181 90.424) (end 305.181 83.312) (width 0.2032) (layer Cuivre) (net 31))
+ (via (at 304.038 119.634) (size 0.889) (layers Composant Cuivre) (net 31))
+ (segment (start 311.658 73.279) (end 311.277 73.279) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 303.657 99.949) (end 303.657 111.76) (width 0.2032) (layer Composant) (net 31) (status 800))
+ (segment (start 305.181 83.312) (end 307.594 80.899) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 304.927 119.634) (end 304.038 119.634) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 334.899 115.316) (end 334.264 115.951) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 322.58 119.634) (end 312.547 119.634) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 331.851 116.205) (end 331.851 118.364) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 352.298 117.475) (end 350.139 115.316) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 350.139 115.316) (end 334.899 115.316) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 334.264 115.951) (end 332.105 115.951) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 353.695 117.475) (end 352.298 117.475) (width 0.2032) (layer Cuivre) (net 31) (status 800))
+ (segment (start 308.61 72.263) (end 310.769 72.263) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 332.105 115.951) (end 331.851 116.205) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 327.406 119.253) (end 322.961 119.253) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 311.658 73.279) (end 311.785 73.406) (width 0.2032) (layer Composant) (net 31))
+ (segment (start 328.168 118.491) (end 327.406 119.253) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 322.961 119.253) (end 322.58 119.634) (width 0.2032) (layer Cuivre) (net 31))
+ (segment (start 311.785 73.406) (end 312.674 73.406) (width 0.2032) (layer Composant) (net 31) (status 400))
+ (segment (start 315.468 73.9394) (end 314.452 72.9234) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 304.673 97.663) (end 304.419 97.409) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 304.419 91.948) (end 305.689 90.678) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 304.673 110.744) (end 305.435 110.744) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 354.711 113.411) (end 348.742 113.411) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 356.235 114.935) (end 354.711 113.411) (width 0.2032) (layer Cuivre) (net 32) (status 800))
+ (segment (start 348.488 113.665) (end 348.742 113.411) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 311.785 72.771) (end 311.912 72.898) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 318.1096 74.803) (end 319.8368 74.803) (width 0.2032) (layer Composant) (net 32) (status 400))
+ (via (at 304.419 93.98) (size 0.889) (layers Composant Cuivre) (net 32))
+ (segment (start 339.725 110.871) (end 327.66 110.871) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 317.246 73.9394) (end 318.1096 74.803) (width 0.2032) (layer Composant) (net 32))
+ (via (at 304.673 110.744) (size 0.889) (layers Composant Cuivre) (net 32))
+ (segment (start 317.246 73.9394) (end 315.468 73.9394) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 311.785 72.517) (end 310.388 71.12) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 312.674 72.898) (end 312.674 72.9234) (width 0.2032) (layer Composant) (net 32) (status 400))
+ (segment (start 305.689 90.678) (end 305.689 83.566) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 311.785 72.517) (end 311.785 72.771) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 307.594 71.12) (end 310.388 71.12) (width 0.2032) (layer Composant) (net 32))
+ (via (at 307.594 71.12) (size 0.889) (layers Composant Cuivre) (net 32))
+ (segment (start 308.61 72.136) (end 307.594 71.12) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 308.61 76.454) (end 308.61 72.136) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 308.102 76.962) (end 308.61 76.454) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 308.102 81.153) (end 308.102 76.962) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 305.689 83.566) (end 308.102 81.153) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 348.488 113.665) (end 342.519 113.665) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 304.419 93.98) (end 304.419 91.948) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 303.657 94.742) (end 304.419 93.98) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 303.657 97.409) (end 303.657 94.742) (width 0.2032) (layer Composant) (net 32) (status 800))
+ (segment (start 305.435 110.744) (end 305.816 111.125) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 304.673 110.744) (end 304.673 97.663) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 327.406 111.125) (end 305.816 111.125) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 327.66 110.871) (end 327.406 111.125) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 342.519 113.665) (end 339.725 110.871) (width 0.2032) (layer Cuivre) (net 32))
+ (segment (start 304.419 97.409) (end 303.657 97.409) (width 0.2032) (layer Composant) (net 32) (status 400))
+ (segment (start 311.912 72.898) (end 312.674 72.898) (width 0.2032) (layer Composant) (net 32))
+ (segment (start 312.674 72.9234) (end 314.452 72.9234) (width 0.2032) (layer Composant) (net 32) (status 800))
+ (segment (start 309.88 117.729) (end 309.88 113.411) (width 0.2032) (layer VCC_layer) (net 33))
+ (segment (start 311.277 99.949) (end 311.277 112.014) (width 0.2032) (layer VCC_layer) (net 33) (status 800))
+ (segment (start 311.277 112.014) (end 309.88 113.411) (width 0.2032) (layer VCC_layer) (net 33))
+ (segment (start 343.662 108.585) (end 343.662 111.76) (width 0.2032) (layer Cuivre) (net 33) (status C00))
+ (segment (start 343.789 129.159) (end 343.535 128.905) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 340.995 128.905) (end 340.995 127.635) (width 0.2032) (layer Cuivre) (net 33) (status 400))
+ (segment (start 323.723 130.302) (end 324.104 129.921) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 343.662 117.348) (end 343.662 116.967) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 340.995 121.285) (end 340.995 125.095) (width 0.2032) (layer VCC_layer) (net 33) (status 400))
+ (segment (start 308.737 125.349) (end 311.277 127.889) (width 0.2032) (layer Composant) (net 33) (status C00))
+ (via (at 342.138 121.031) (size 0.889) (layers Composant Cuivre) (net 33))
+ (segment (start 311.277 99.949) (end 311.277 97.409) (width 0.2032) (layer Composant) (net 33) (status C00))
+ (via (at 343.662 116.967) (size 0.889) (layers Composant Cuivre) (net 33))
+ (segment (start 343.535 102.235) (end 343.535 104.775) (width 0.2032) (layer Composant) (net 33) (status C00))
+ (segment (start 343.662 116.967) (end 343.662 107.696) (width 0.2032) (layer VCC_layer) (net 33))
+ (segment (start 342.138 117.602) (end 342.138 120.396) (width 0.2032) (layer Cuivre) (net 33) (status C00))
+ (segment (start 343.535 107.569) (end 343.535 104.775) (width 0.2032) (layer VCC_layer) (net 33) (status 400))
+ (segment (start 342.138 121.031) (end 341.249 121.031) (width 0.2032) (layer VCC_layer) (net 33))
+ (segment (start 352.298 130.048) (end 351.409 129.159) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 343.408 117.602) (end 343.662 117.348) (width 0.2032) (layer Cuivre) (net 33))
+ (via (at 309.88 117.729) (size 0.889) (layers Composant Cuivre) (net 33))
+ (segment (start 339.979 129.921) (end 340.995 128.905) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 308.61 117.729) (end 309.88 117.729) (width 0.2032) (layer Cuivre) (net 33) (status 800))
+ (segment (start 323.723 130.302) (end 323.723 131.572) (width 0.2032) (layer Composant) (net 33) (status 400))
+ (segment (start 343.535 128.905) (end 343.535 127.635) (width 0.2032) (layer Cuivre) (net 33) (status 400))
+ (segment (start 343.535 125.095) (end 343.535 127.635) (width 0.2032) (layer Composant) (net 33) (status C00))
+ (segment (start 340.995 127.635) (end 343.535 127.635) (width 0.2032) (layer Cuivre) (net 33) (status C00))
+ (segment (start 340.995 125.095) (end 343.535 125.095) (width 0.2032) (layer Cuivre) (net 33) (status C00))
+ (segment (start 343.662 107.696) (end 343.535 107.569) (width 0.2032) (layer VCC_layer) (net 33))
+ (via (at 323.723 130.302) (size 0.889) (layers Composant Cuivre) (net 33))
+ (segment (start 317.119 128.905) (end 318.516 130.302) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 341.249 121.031) (end 340.995 121.285) (width 0.2032) (layer VCC_layer) (net 33))
+ (segment (start 351.409 129.159) (end 343.789 129.159) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 324.104 129.921) (end 339.979 129.921) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 342.138 117.602) (end 343.408 117.602) (width 0.2032) (layer Cuivre) (net 33) (status 800))
+ (segment (start 312.293 128.905) (end 317.119 128.905) (width 0.2032) (layer Cuivre) (net 33))
+ (segment (start 318.516 130.302) (end 323.723 130.302) (width 0.2032) (layer Cuivre) (net 33))
+ (via (at 343.662 107.696) (size 0.889) (layers Composant Cuivre) (net 33))
+ (segment (start 308.737 125.349) (end 308.737 123.317) (width 0.2032) (layer Composant) (net 33) (status 800))
+ (segment (start 308.737 123.317) (end 309.118 122.936) (width 0.2032) (layer Composant) (net 33))
+ (segment (start 309.118 122.936) (end 309.118 118.491) (width 0.2032) (layer Composant) (net 33))
+ (segment (start 352.298 131.699) (end 352.298 130.048) (width 0.2032) (layer Cuivre) (net 33) (status 800))
+ (segment (start 311.277 127.889) (end 312.293 128.905) (width 0.2032) (layer Cuivre) (net 33) (status 800))
+ (segment (start 340.995 125.095) (end 340.995 127.635) (width 0.2032) (layer Composant) (net 33) (status C00))
+ (segment (start 343.662 108.585) (end 343.662 107.696) (width 0.2032) (layer Cuivre) (net 33) (status 800))
+ (segment (start 309.88 117.729) (end 309.118 118.491) (width 0.2032) (layer Composant) (net 33))
+ (segment (start 342.138 120.396) (end 342.138 121.031) (width 0.2032) (layer Cuivre) (net 33) (status 800))
+ (segment (start 227.33 80.645) (end 227.33 89.535) (width 0.2032) (layer Composant) (net 34) (status C00))
+ (segment (start 227.33 107.315) (end 227.33 101.473) (width 0.2032) (layer Composant) (net 34) (status 800))
+ (segment (start 168.275 91.313) (end 168.275 97.282) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 172.466 100.076) (end 175.514 100.076) (width 0.2032) (layer Cuivre) (net 34))
+ (segment (start 226.949 101.981) (end 177.419 101.981) (width 0.2032) (layer Cuivre) (net 34))
+ (segment (start 157.1752 90.4494) (end 159.512 90.4494) (width 0.2032) (layer Composant) (net 34) (status 800))
+ (segment (start 227.33 101.6) (end 227.33 101.473) (width 0.2032) (layer Cuivre) (net 34))
+ (segment (start 227.33 80.645) (end 227.33 71.755) (width 0.2032) (layer Composant) (net 34) (status C00))
+ (segment (start 227.33 101.6) (end 226.949 101.981) (width 0.2032) (layer Cuivre) (net 34))
+ (segment (start 227.33 101.473) (end 227.33 98.425) (width 0.2032) (layer Composant) (net 34) (status 400))
+ (segment (start 227.33 116.205) (end 227.33 107.315) (width 0.2032) (layer Composant) (net 34) (status C00))
+ (segment (start 165.862 88.9) (end 168.275 91.313) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 227.33 98.425) (end 227.33 89.535) (width 0.2032) (layer Composant) (net 34) (status C00))
+ (segment (start 227.33 116.205) (end 227.33 125.095) (width 0.2032) (layer Composant) (net 34) (status C00))
+ (segment (start 227.33 71.755) (end 227.33 62.865) (width 0.2032) (layer Composant) (net 34) (status C00))
+ (segment (start 172.085 100.457) (end 172.466 100.076) (width 0.2032) (layer Cuivre) (net 34))
+ (via (at 172.085 100.457) (size 0.889) (layers Composant Cuivre) (net 34))
+ (segment (start 171.45 100.457) (end 172.085 100.457) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 159.7914 90.17) (end 163.703 90.17) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 164.973 88.9) (end 165.862 88.9) (width 0.2032) (layer Composant) (net 34))
+ (via (at 227.33 101.473) (size 0.889) (layers Composant Cuivre) (net 34))
+ (segment (start 159.512 90.4494) (end 159.7914 90.17) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 164.973 88.9) (end 163.703 90.17) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 168.275 97.282) (end 171.45 100.457) (width 0.2032) (layer Composant) (net 34))
+ (segment (start 175.514 100.076) (end 177.419 101.981) (width 0.2032) (layer Cuivre) (net 34))
+ (segment (start 181.229 108.204) (end 181.229 89.535) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 181.229 89.535) (end 180.594 88.9) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 224.79 107.315) (end 224.79 116.205) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 162.814 89.154) (end 161.29 89.154) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 224.79 116.205) (end 224.79 125.095) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 157.226 89.027) (end 157.226 89.154) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 224.79 107.315) (end 223.901 108.204) (width 0.2032) (layer Cuivre) (net 35) (status 800))
+ (segment (start 224.79 71.755) (end 224.79 62.865) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 180.594 88.9) (end 167.894 88.9) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 224.79 98.425) (end 224.79 89.535) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 166.878 87.884) (end 167.894 88.9) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 164.084 87.884) (end 166.878 87.884) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 162.814 89.154) (end 164.084 87.884) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 223.901 108.204) (end 181.229 108.204) (width 0.2032) (layer Cuivre) (net 35))
+ (via (at 181.229 108.204) (size 0.889) (layers Composant Cuivre) (net 35))
+ (segment (start 161.163 89.027) (end 157.226 89.027) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 161.29 89.154) (end 161.163 89.027) (width 0.2032) (layer Composant) (net 35))
+ (segment (start 224.79 80.645) (end 224.79 71.755) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 224.79 80.645) (end 224.79 89.535) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 224.79 107.315) (end 224.79 98.425) (width 0.2032) (layer Composant) (net 35) (status C00))
+ (segment (start 157.226 89.154) (end 157.1752 89.154) (width 0.2032) (layer Composant) (net 35) (status 400))
+ (segment (start 181.483 82.55) (end 180.213 83.82) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 223.52 118.745) (end 223.52 109.855) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 160.02 85.979) (end 160.02 87.122) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 223.52 74.295) (end 223.52 65.405) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 164.973 82.169) (end 163.449 83.693) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 180.213 83.82) (end 168.656 83.82) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 223.52 83.185) (end 223.52 92.075) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 223.52 118.745) (end 223.52 127.635) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 223.52 83.185) (end 223.52 74.295) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 223.52 92.075) (end 223.52 100.965) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 167.005 82.169) (end 164.973 82.169) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 223.52 83.185) (end 222.504 82.169) (width 0.2032) (layer Cuivre) (net 36) (status 800))
+ (segment (start 160.02 87.122) (end 157.226 87.122) (width 0.2032) (layer Composant) (net 36))
+ (segment (start 223.52 109.855) (end 223.52 100.965) (width 0.2032) (layer Composant) (net 36) (status C00))
+ (segment (start 222.504 82.169) (end 199.771 82.169) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 163.449 83.693) (end 162.306 83.693) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 168.656 83.82) (end 167.005 82.169) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 187.452 81.788) (end 186.69 82.55) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 199.39 81.788) (end 187.452 81.788) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 199.771 82.169) (end 199.39 81.788) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 186.69 82.55) (end 181.483 82.55) (width 0.2032) (layer Cuivre) (net 36))
+ (via (at 160.02 87.122) (size 0.889) (layers Composant Cuivre) (net 36))
+ (segment (start 157.226 87.122) (end 157.1752 87.1982) (width 0.2032) (layer Composant) (net 36) (status 400))
+ (segment (start 162.306 83.693) (end 160.02 85.979) (width 0.2032) (layer Cuivre) (net 36))
+ (segment (start 122.936 65.913) (end 125.095 65.913) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 260.223 61.976) (end 267.716 61.976) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 122.428 79.756) (end 122.428 70.104) (width 0.2032) (layer Composant) (net 37))
+ (segment (start 267.97 89.535) (end 267.97 80.645) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 246.126 61.468) (end 246.634 61.976) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 267.97 89.535) (end 267.97 98.425) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 122.936 69.596) (end 122.936 65.913) (width 0.2032) (layer Composant) (net 37))
+ (segment (start 125.984 80.0354) (end 123.698 80.0354) (width 0.2032) (layer Composant) (net 37) (status 800))
+ (segment (start 122.428 70.104) (end 122.936 69.596) (width 0.2032) (layer Composant) (net 37))
+ (segment (start 123.698 80.137) (end 122.809 80.137) (width 0.2032) (layer Composant) (net 37))
+ (segment (start 133.604 64.643) (end 133.35 64.897) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 267.716 61.976) (end 267.97 62.23) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 248.666 61.976) (end 249.174 61.468) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 123.698 80.0354) (end 123.698 80.137) (width 0.2032) (layer Composant) (net 37))
+ (segment (start 267.97 62.23) (end 267.97 62.865) (width 0.2032) (layer Cuivre) (net 37) (status 400))
+ (segment (start 246.634 61.976) (end 248.666 61.976) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 133.35 64.897) (end 126.111 64.897) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 166.37 61.468) (end 246.126 61.468) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 267.97 116.205) (end 267.97 125.095) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 267.97 71.755) (end 267.97 80.645) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 267.97 71.755) (end 267.97 62.865) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 126.111 64.897) (end 125.095 65.913) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 249.174 61.468) (end 259.715 61.468) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 267.97 116.205) (end 267.97 107.315) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 163.195 64.643) (end 133.604 64.643) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 259.715 61.468) (end 260.223 61.976) (width 0.2032) (layer Cuivre) (net 37))
+ (segment (start 163.195 64.643) (end 166.37 61.468) (width 0.2032) (layer Cuivre) (net 37))
+ (via (at 122.936 65.913) (size 0.889) (layers Composant Cuivre) (net 37))
+ (segment (start 122.809 80.137) (end 122.428 79.756) (width 0.2032) (layer Composant) (net 37))
+ (segment (start 267.97 98.425) (end 267.97 107.315) (width 0.2032) (layer Composant) (net 37) (status C00))
+ (segment (start 123.317 79.502) (end 123.063 79.248) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 256.286 68.707) (end 256.032 68.453) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 123.063 79.248) (end 123.063 70.231) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 255.524 64.897) (end 256.413 64.008) (width 0.2032) (layer Composant) (net 38))
+ (via (at 256.413 64.008) (size 0.889) (layers Composant Cuivre) (net 38))
+ (via (at 123.825 68.58) (size 0.889) (layers Composant Cuivre) (net 38))
+ (segment (start 256.286 67.056) (end 255.524 66.294) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 133.35 69.977) (end 136.017 69.977) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 123.063 70.231) (end 123.825 69.469) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 123.825 69.469) (end 123.825 68.58) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 266.7 64.897) (end 266.7 65.405) (width 0.2032) (layer Cuivre) (net 38) (status 400))
+ (segment (start 244.729 70.104) (end 246.38 68.453) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 266.7 100.965) (end 266.7 92.075) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 123.825 79.4004) (end 123.825 79.502) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 266.7 118.745) (end 266.7 109.855) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 266.7 92.075) (end 266.7 83.185) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 266.7 109.855) (end 266.7 100.965) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 125.984 79.4004) (end 123.825 79.4004) (width 0.2032) (layer Composant) (net 38) (status 800))
+ (segment (start 123.825 79.502) (end 123.317 79.502) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 256.413 64.008) (end 256.921 64.516) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 256.921 64.516) (end 266.319 64.516) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 123.825 68.58) (end 131.953 68.58) (width 0.2032) (layer Cuivre) (net 38))
+ (via (at 256.286 68.707) (size 0.889) (layers Composant Cuivre) (net 38))
+ (segment (start 136.017 69.977) (end 136.144 70.104) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 266.7 74.295) (end 266.7 83.185) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 131.953 68.58) (end 133.35 69.977) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 136.144 70.104) (end 244.729 70.104) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 266.7 65.405) (end 266.7 74.295) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 246.38 68.453) (end 256.032 68.453) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 255.524 66.294) (end 255.524 64.897) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 266.7 127.635) (end 266.7 118.745) (width 0.2032) (layer Composant) (net 38) (status C00))
+ (segment (start 256.286 68.707) (end 256.286 67.056) (width 0.2032) (layer Composant) (net 38))
+ (segment (start 266.319 64.516) (end 266.7 64.897) (width 0.2032) (layer Cuivre) (net 38))
+ (segment (start 154.305 69.088) (end 154.051 68.834) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 259.08 74.295) (end 259.08 67.564) (width 0.2032) (layer Composant) (net 39) (status 800))
+ (segment (start 241.427 68.834) (end 241.554 68.961) (width 0.2032) (layer Cuivre) (net 39))
+ (via (at 136.0424 69.088) (size 0.889) (layers Composant Cuivre) (net 39))
+ (via (at 259.08 67.564) (size 0.889) (layers Composant Cuivre) (net 39))
+ (segment (start 136.0424 69.088) (end 136.5504 68.58) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 259.08 67.564) (end 259.08 65.405) (width 0.2032) (layer Composant) (net 39) (status 400))
+ (segment (start 259.08 92.075) (end 259.08 83.185) (width 0.2032) (layer Composant) (net 39) (status C00))
+ (segment (start 259.08 74.295) (end 259.08 83.185) (width 0.2032) (layer Composant) (net 39) (status C00))
+ (segment (start 136.0424 72.5678) (end 136.0424 69.088) (width 0.2032) (layer Composant) (net 39) (status 800))
+ (segment (start 241.554 68.961) (end 244.221 68.961) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 145.161 68.834) (end 154.051 68.834) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 136.5504 68.58) (end 144.907 68.58) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 144.907 68.58) (end 145.161 68.834) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 154.305 69.088) (end 160.02 69.088) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 244.221 68.961) (end 245.872 67.31) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 259.08 118.745) (end 259.08 109.855) (width 0.2032) (layer Composant) (net 39) (status C00))
+ (segment (start 160.274 68.834) (end 241.427 68.834) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 259.08 100.965) (end 259.08 92.075) (width 0.2032) (layer Composant) (net 39) (status C00))
+ (segment (start 259.08 109.855) (end 259.08 100.965) (width 0.2032) (layer Composant) (net 39) (status C00))
+ (segment (start 258.699 67.564) (end 259.08 67.564) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 245.872 67.31) (end 258.445 67.31) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 258.445 67.31) (end 258.699 67.564) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 259.08 118.745) (end 259.08 127.635) (width 0.2032) (layer Composant) (net 39) (status C00))
+ (segment (start 160.02 69.088) (end 160.274 68.834) (width 0.2032) (layer Cuivre) (net 39))
+ (segment (start 124.841 69.342) (end 123.571 70.612) (width 0.2032) (layer Composant) (net 40))
+ (segment (start 257.302 63.754) (end 256.794 63.246) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 231.775 64.389) (end 181.356 64.389) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 123.825 78.74) (end 125.984 78.74) (width 0.2032) (layer Composant) (net 40) (status 400))
+ (segment (start 124.841 66.929) (end 126.365 65.405) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 265.43 89.535) (end 265.43 98.425) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 123.571 78.486) (end 123.825 78.74) (width 0.2032) (layer Composant) (net 40))
+ (segment (start 232.156 65.659) (end 232.156 64.77) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 249.047 62.357) (end 249.047 63.627) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 123.571 70.612) (end 123.571 78.486) (width 0.2032) (layer Composant) (net 40))
+ (segment (start 124.841 67.564) (end 124.841 69.342) (width 0.2032) (layer Composant) (net 40))
+ (via (at 124.841 67.564) (size 0.889) (layers Composant Cuivre) (net 40))
+ (segment (start 124.841 66.929) (end 124.841 67.564) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 133.858 65.151) (end 133.604 65.405) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 181.356 64.389) (end 179.705 66.04) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 232.156 64.77) (end 231.775 64.389) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 265.43 71.755) (end 265.43 80.645) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 265.43 107.315) (end 265.43 98.425) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 264.541 63.754) (end 257.302 63.754) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 249.428 61.976) (end 249.047 62.357) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 256.032 61.976) (end 249.428 61.976) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 256.794 63.246) (end 256.794 62.738) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 256.794 62.738) (end 256.032 61.976) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 265.43 116.205) (end 265.43 107.315) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 162.306 65.151) (end 163.195 66.04) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 133.604 65.405) (end 126.365 65.405) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 265.43 116.205) (end 265.43 125.095) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 265.43 80.645) (end 265.43 89.535) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 248.92 63.754) (end 236.728 63.754) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 236.728 63.754) (end 236.347 64.135) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 236.347 64.135) (end 236.347 65.405) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 265.43 62.865) (end 264.541 63.754) (width 0.2032) (layer Cuivre) (net 40) (status 800))
+ (segment (start 236.347 65.405) (end 235.585 66.167) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 235.585 66.167) (end 232.664 66.167) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 232.664 66.167) (end 232.156 65.659) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 265.43 71.755) (end 265.43 62.865) (width 0.2032) (layer Composant) (net 40) (status C00))
+ (segment (start 162.306 65.151) (end 133.858 65.151) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 179.705 66.04) (end 163.195 66.04) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 249.047 63.627) (end 248.92 63.754) (width 0.2032) (layer Cuivre) (net 40))
+ (segment (start 264.16 74.295) (end 264.16 65.405) (width 0.2032) (layer Composant) (net 41) (status C00))
+ (segment (start 263.271 78.74) (end 263.017 78.486) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 151.765 76.327) (end 145.542 76.327) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 132.461 78.105) (end 131.445 79.121) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 128.143 78.105) (end 125.984 78.105) (width 0.2032) (layer Composant) (net 41))
+ (segment (start 128.397 78.359) (end 128.143 78.105) (width 0.2032) (layer Composant) (net 41))
+ (segment (start 125.984 78.105) (end 125.984 78.0796) (width 0.2032) (layer Composant) (net 41) (status 400))
+ (segment (start 131.445 79.121) (end 128.651 79.121) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 155.067 76.962) (end 152.4 76.962) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 264.16 118.745) (end 264.16 127.635) (width 0.2032) (layer Composant) (net 41) (status C00))
+ (segment (start 144.272 77.597) (end 137.287 77.597) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 264.16 78.74) (end 264.16 83.185) (width 0.2032) (layer Composant) (net 41) (status 400))
+ (segment (start 145.542 76.327) (end 144.272 77.597) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 137.287 77.597) (end 136.779 78.105) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 136.779 78.105) (end 132.461 78.105) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 184.404 76.962) (end 184.912 77.47) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 264.16 74.295) (end 264.16 78.74) (width 0.2032) (layer Composant) (net 41) (status 800))
+ (segment (start 264.16 92.075) (end 264.16 83.185) (width 0.2032) (layer Composant) (net 41) (status C00))
+ (segment (start 264.16 78.74) (end 263.271 78.74) (width 0.2032) (layer Cuivre) (net 41))
+ (via (at 128.397 79.375) (size 0.889) (layers Composant Cuivre) (net 41))
+ (segment (start 128.651 79.121) (end 128.397 79.375) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 264.16 100.965) (end 264.16 92.075) (width 0.2032) (layer Composant) (net 41) (status C00))
+ (via (at 264.16 78.74) (size 0.889) (layers Composant Cuivre) (net 41))
+ (segment (start 208.661 78.486) (end 207.645 77.47) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 152.4 76.962) (end 151.765 76.327) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 155.829 77.724) (end 161.417 77.724) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 161.417 77.724) (end 162.179 76.962) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 155.067 76.962) (end 155.829 77.724) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 264.16 100.965) (end 264.16 109.855) (width 0.2032) (layer Composant) (net 41) (status C00))
+ (segment (start 264.16 118.745) (end 264.16 109.855) (width 0.2032) (layer Composant) (net 41) (status C00))
+ (segment (start 162.179 76.962) (end 184.404 76.962) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 207.645 77.47) (end 184.912 77.47) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 128.397 79.375) (end 128.397 78.359) (width 0.2032) (layer Composant) (net 41))
+ (segment (start 263.017 78.486) (end 208.661 78.486) (width 0.2032) (layer Cuivre) (net 41))
+ (segment (start 262.89 71.755) (end 262.89 62.865) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 154.813 77.47) (end 151.257 77.47) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 184.15 77.47) (end 162.687 77.47) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 262.89 80.645) (end 261.239 78.994) (width 0.2032) (layer Cuivre) (net 42) (status 800))
+ (segment (start 208.407 78.994) (end 261.239 78.994) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 184.785 78.105) (end 184.15 77.47) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 208.407 78.994) (end 207.518 78.105) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 207.518 78.105) (end 184.785 78.105) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 262.89 89.535) (end 262.89 98.425) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 155.702 78.359) (end 161.798 78.359) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 161.798 78.359) (end 162.687 77.47) (width 0.2032) (layer Cuivre) (net 42))
+ (via (at 151.257 77.47) (size 0.889) (layers Composant Cuivre) (net 42))
+ (segment (start 262.89 116.205) (end 262.89 125.095) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 262.89 89.535) (end 262.89 80.645) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 262.89 80.645) (end 262.89 71.755) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 155.702 78.359) (end 154.813 77.47) (width 0.2032) (layer Cuivre) (net 42))
+ (segment (start 262.89 98.425) (end 262.89 107.315) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 262.89 107.315) (end 262.89 116.205) (width 0.2032) (layer Composant) (net 42) (status C00))
+ (segment (start 125.984 77.47) (end 125.984 77.4446) (width 0.2032) (layer Composant) (net 42) (status 400))
+ (segment (start 151.257 77.47) (end 125.984 77.47) (width 0.2032) (layer Composant) (net 42))
+ (segment (start 176.149 62.103) (end 175.895 62.357) (width 0.2032) (layer Composant) (net 43))
+ (via (at 231.902 63.627) (size 0.889) (layers Composant Cuivre) (net 43))
+ (segment (start 232.283 64.008) (end 231.902 63.627) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 231.902 63.627) (end 231.013 63.627) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 231.013 63.627) (end 230.886 63.754) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 230.886 63.754) (end 181.61 63.754) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 181.61 63.754) (end 180.975 63.119) (width 0.2032) (layer Cuivre) (net 43))
+ (via (at 253.873 63.754) (size 0.889) (layers Composant Cuivre) (net 43))
+ (via (at 175.895 71.882) (size 0.889) (layers Composant Cuivre) (net 43))
+ (segment (start 236.347 65.405) (end 235.712 66.04) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 175.895 62.357) (end 175.895 71.882) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 180.975 63.119) (end 179.959 62.103) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 256.794 63.246) (end 256.794 62.738) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 254.254 63.373) (end 253.873 63.754) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 254.508 61.976) (end 254.254 62.23) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 179.959 62.103) (end 176.149 62.103) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 235.712 66.04) (end 232.918 66.04) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 257.302 63.754) (end 256.794 63.246) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 236.347 64.897) (end 236.347 65.405) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 236.601 64.643) (end 236.347 64.897) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 261.62 65.405) (end 261.62 74.295) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 124.079 76.581) (end 124.333 76.835) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 162.56 70.739) (end 136.017 70.739) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 175.895 71.882) (end 163.703 71.882) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 135.763 70.485) (end 136.017 70.739) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 128.651 70.485) (end 135.763 70.485) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 256.032 61.976) (end 254.508 61.976) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 261.62 92.075) (end 261.62 83.185) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 237.49 64.389) (end 237.236 64.643) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 232.283 65.405) (end 232.283 64.008) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 254.254 62.23) (end 254.254 63.373) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 253.873 63.754) (end 249.555 63.754) (width 0.2032) (layer Cuivre) (net 43))
+ (via (at 180.975 63.119) (size 0.889) (layers Composant Cuivre) (net 43))
+ (segment (start 128.397 70.739) (end 128.651 70.485) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 124.333 76.835) (end 125.984 76.835) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 124.079 71.501) (end 124.079 76.581) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 261.62 100.965) (end 261.62 92.075) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 261.62 74.295) (end 261.62 83.185) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 261.62 109.855) (end 261.62 100.965) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 261.62 118.745) (end 261.62 127.635) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 125.984 76.835) (end 125.984 76.7842) (width 0.2032) (layer Composant) (net 43) (status 400))
+ (segment (start 124.841 70.739) (end 124.079 71.501) (width 0.2032) (layer Composant) (net 43))
+ (via (at 124.841 70.739) (size 0.889) (layers Composant Cuivre) (net 43))
+ (segment (start 128.397 70.739) (end 124.841 70.739) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 261.62 118.745) (end 261.62 109.855) (width 0.2032) (layer Composant) (net 43) (status C00))
+ (segment (start 261.62 64.008) (end 261.366 63.754) (width 0.2032) (layer VCC_layer) (net 43))
+ (via (at 237.236 64.643) (size 0.889) (layers Composant Cuivre) (net 43))
+ (segment (start 261.366 63.754) (end 257.302 63.754) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 163.703 71.882) (end 162.56 70.739) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 237.236 64.643) (end 236.601 64.643) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 232.918 66.04) (end 232.283 65.405) (width 0.2032) (layer Composant) (net 43))
+ (segment (start 248.92 64.389) (end 237.49 64.389) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 256.794 62.738) (end 256.032 61.976) (width 0.2032) (layer VCC_layer) (net 43))
+ (segment (start 249.555 63.754) (end 248.92 64.389) (width 0.2032) (layer Cuivre) (net 43))
+ (segment (start 261.62 65.405) (end 261.62 64.008) (width 0.2032) (layer VCC_layer) (net 43) (status 800))
+ (segment (start 248.285 61.468) (end 248.92 60.833) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 246.888 61.468) (end 248.285 61.468) (width 0.2032) (layer Cuivre) (net 44))
+ (via (at 260.35 60.833) (size 0.889) (layers Composant Cuivre) (net 44))
+ (segment (start 166.116 60.96) (end 246.38 60.96) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 162.941 64.135) (end 135.255 64.135) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 246.38 60.96) (end 246.888 61.468) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 135.128 64.008) (end 133.096 64.008) (width 0.2032) (layer Cuivre) (net 44))
+ (via (at 133.096 64.008) (size 0.889) (layers Composant Cuivre) (net 44))
+ (segment (start 260.35 71.755) (end 260.35 62.865) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 131.572 69.977) (end 131.572 68.072) (width 0.2032) (layer Composant) (net 44))
+ (segment (start 131.4958 69.977) (end 131.572 69.977) (width 0.2032) (layer Composant) (net 44))
+ (segment (start 131.4958 72.5678) (end 131.4958 69.977) (width 0.2032) (layer Composant) (net 44) (status 800))
+ (segment (start 260.35 116.205) (end 260.35 107.315) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 260.35 60.833) (end 260.35 62.865) (width 0.2032) (layer Composant) (net 44) (status 400))
+ (segment (start 133.096 64.008) (end 133.096 66.548) (width 0.2032) (layer Composant) (net 44))
+ (segment (start 162.941 64.135) (end 166.116 60.96) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 260.35 80.645) (end 260.35 89.535) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 260.35 98.425) (end 260.35 89.535) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 248.92 60.833) (end 260.35 60.833) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 260.35 71.755) (end 260.35 80.645) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 131.572 68.072) (end 133.096 66.548) (width 0.2032) (layer Composant) (net 44))
+ (segment (start 260.35 125.095) (end 260.35 116.205) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 135.255 64.135) (end 135.128 64.008) (width 0.2032) (layer Cuivre) (net 44))
+ (segment (start 260.35 107.315) (end 260.35 98.425) (width 0.2032) (layer Composant) (net 44) (status C00))
+ (segment (start 132.1562 72.5678) (end 132.1562 69.977) (width 0.2032) (layer Composant) (net 45) (status 800))
+ (segment (start 247.65 107.315) (end 247.65 98.425) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 247.65 60.706) (end 247.65 62.865) (width 0.2032) (layer Composant) (net 45) (status 400))
+ (via (at 247.65 60.706) (size 0.889) (layers Composant Cuivre) (net 45))
+ (segment (start 135.382 63.627) (end 134.747 62.992) (width 0.2032) (layer Cuivre) (net 45))
+ (segment (start 134.747 62.992) (end 133.858 62.992) (width 0.2032) (layer Cuivre) (net 45))
+ (segment (start 135.382 63.627) (end 162.56 63.627) (width 0.2032) (layer Cuivre) (net 45))
+ (segment (start 247.65 89.535) (end 247.65 98.425) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 247.65 71.755) (end 247.65 62.865) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 247.65 89.535) (end 247.65 80.645) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 132.1562 69.977) (end 132.207 69.977) (width 0.2032) (layer Composant) (net 45))
+ (segment (start 132.207 69.977) (end 132.207 68.453) (width 0.2032) (layer Composant) (net 45))
+ (segment (start 247.65 116.205) (end 247.65 125.095) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 247.396 60.452) (end 247.65 60.706) (width 0.2032) (layer Cuivre) (net 45))
+ (segment (start 247.65 71.755) (end 247.65 80.645) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 247.65 107.315) (end 247.65 116.205) (width 0.2032) (layer Composant) (net 45) (status C00))
+ (segment (start 133.858 66.802) (end 133.858 62.992) (width 0.2032) (layer Composant) (net 45))
+ (segment (start 165.735 60.452) (end 162.56 63.627) (width 0.2032) (layer Cuivre) (net 45))
+ (via (at 133.858 62.992) (size 0.889) (layers Composant Cuivre) (net 45))
+ (segment (start 165.735 60.452) (end 247.396 60.452) (width 0.2032) (layer Cuivre) (net 45))
+ (segment (start 132.207 68.453) (end 133.858 66.802) (width 0.2032) (layer Composant) (net 45))
+ (segment (start 132.842 68.961) (end 132.842 72.517) (width 0.2032) (layer Composant) (net 46))
+ (segment (start 133.985 67.818) (end 135.128 66.675) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 241.935 67.691) (end 162.56 67.691) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 243.84 67.564) (end 243.84 65.405) (width 0.2032) (layer Composant) (net 46) (status 400))
+ (segment (start 243.84 109.855) (end 243.84 118.745) (width 0.2032) (layer Composant) (net 46) (status C00))
+ (segment (start 242.316 67.31) (end 241.935 67.691) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 161.544 66.675) (end 162.56 67.691) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 243.84 92.075) (end 243.84 83.185) (width 0.2032) (layer Composant) (net 46) (status C00))
+ (segment (start 243.84 109.855) (end 243.84 100.965) (width 0.2032) (layer Composant) (net 46) (status C00))
+ (segment (start 243.84 74.295) (end 243.84 83.185) (width 0.2032) (layer Composant) (net 46) (status C00))
+ (via (at 133.985 67.818) (size 0.889) (layers Composant Cuivre) (net 46))
+ (segment (start 133.985 67.818) (end 132.842 68.961) (width 0.2032) (layer Composant) (net 46))
+ (via (at 243.84 67.564) (size 0.889) (layers Composant Cuivre) (net 46))
+ (segment (start 243.84 92.075) (end 243.84 100.965) (width 0.2032) (layer Composant) (net 46) (status C00))
+ (segment (start 243.459 67.31) (end 242.316 67.31) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 243.84 74.295) (end 243.84 67.564) (width 0.2032) (layer Composant) (net 46) (status 800))
+ (segment (start 243.84 118.745) (end 243.84 127.635) (width 0.2032) (layer Composant) (net 46) (status C00))
+ (segment (start 243.459 67.31) (end 243.84 67.564) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 132.842 72.517) (end 132.7912 72.5678) (width 0.2032) (layer Composant) (net 46) (status 400))
+ (segment (start 161.544 66.675) (end 135.128 66.675) (width 0.2032) (layer Cuivre) (net 46))
+ (segment (start 133.477 72.517) (end 133.4516 72.5678) (width 0.2032) (layer Composant) (net 47) (status 400))
+ (segment (start 133.858 69.088) (end 134.747 68.199) (width 0.2032) (layer Cuivre) (net 47))
+ (segment (start 242.57 71.755) (end 242.57 80.645) (width 0.2032) (layer Composant) (net 47) (status C00))
+ (segment (start 134.747 67.818) (end 135.382 67.183) (width 0.2032) (layer Cuivre) (net 47))
+ (segment (start 133.477 69.469) (end 133.477 72.517) (width 0.2032) (layer Composant) (net 47))
+ (segment (start 242.57 80.645) (end 242.57 89.535) (width 0.2032) (layer Composant) (net 47) (status C00))
+ (via (at 242.57 68.199) (size 0.889) (layers Composant Cuivre) (net 47))
+ (via (at 133.858 69.088) (size 0.889) (layers Composant Cuivre) (net 47))
+ (segment (start 133.858 69.088) (end 133.477 69.469) (width 0.2032) (layer Composant) (net 47))
+ (segment (start 242.57 71.755) (end 242.57 68.199) (width 0.2032) (layer Composant) (net 47) (status 800))
+ (segment (start 242.57 89.535) (end 242.57 98.425) (width 0.2032) (layer Composant) (net 47) (status C00))
+ (segment (start 161.29 67.183) (end 135.382 67.183) (width 0.2032) (layer Cuivre) (net 47))
+ (segment (start 134.747 68.199) (end 134.747 67.818) (width 0.2032) (layer Cuivre) (net 47))
+ (segment (start 242.57 68.199) (end 242.57 62.865) (width 0.2032) (layer Composant) (net 47) (status 400))
+ (segment (start 242.57 68.199) (end 162.306 68.199) (width 0.2032) (layer Cuivre) (net 47))
+ (segment (start 242.57 116.205) (end 242.57 107.315) (width 0.2032) (layer Composant) (net 47) (status C00))
+ (segment (start 242.57 107.315) (end 242.57 98.425) (width 0.2032) (layer Composant) (net 47) (status C00))
+ (segment (start 242.57 116.205) (end 242.57 125.095) (width 0.2032) (layer Composant) (net 47) (status C00))
+ (segment (start 161.29 67.183) (end 162.306 68.199) (width 0.2032) (layer Cuivre) (net 47))
+ (segment (start 208.407 80.391) (end 207.137 79.121) (width 0.2032) (layer Cuivre) (net 48))
+ (via (at 164.211 79.4766) (size 0.889) (layers Composant Cuivre) (net 48))
+ (segment (start 208.788 81.534) (end 220.472 81.534) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 221.615 81.28) (end 222.25 81.915) (width 0.2032) (layer Composant) (net 48))
+ (segment (start 208.788 81.534) (end 208.407 81.153) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 184.277 79.121) (end 207.137 79.121) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 220.726 81.28) (end 220.98 81.28) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 230.505 90.424) (end 222.504 90.424) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 235.204 88.773) (end 232.156 88.773) (width 0.2032) (layer Cuivre) (net 48))
+ (via (at 220.98 81.28) (size 0.889) (layers Composant Cuivre) (net 48))
+ (segment (start 236.855 90.424) (end 235.204 88.773) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 165.0746 78.613) (end 183.769 78.613) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 222.25 81.915) (end 222.25 89.535) (width 0.2032) (layer Composant) (net 48) (status 400))
+ (segment (start 232.156 88.773) (end 230.505 90.424) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 157.1752 83.2866) (end 160.528 83.2866) (width 0.2032) (layer Composant) (net 48) (status 800))
+ (segment (start 183.769 78.613) (end 184.277 79.121) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 222.25 90.17) (end 222.25 89.535) (width 0.2032) (layer Cuivre) (net 48) (status 400))
+ (segment (start 162.2806 80.899) (end 163.703 79.4766) (width 0.2032) (layer Composant) (net 48))
+ (segment (start 238.506 90.424) (end 236.855 90.424) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 163.703 79.4766) (end 164.211 79.4766) (width 0.2032) (layer Composant) (net 48))
+ (segment (start 239.395 89.535) (end 240.03 89.535) (width 0.2032) (layer Cuivre) (net 48) (status 400))
+ (segment (start 162.2806 81.534) (end 162.2806 80.899) (width 0.2032) (layer Composant) (net 48))
+ (segment (start 222.504 90.424) (end 222.25 90.17) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 208.407 81.153) (end 208.407 80.391) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 220.472 81.534) (end 220.726 81.28) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 160.528 83.2866) (end 162.2806 81.534) (width 0.2032) (layer Composant) (net 48))
+ (segment (start 164.211 79.4766) (end 165.0746 78.613) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 220.98 81.28) (end 221.615 81.28) (width 0.2032) (layer Composant) (net 48))
+ (segment (start 239.395 89.535) (end 238.506 90.424) (width 0.2032) (layer Cuivre) (net 48))
+ (segment (start 238.506 106.426) (end 239.395 107.315) (width 0.2032) (layer Cuivre) (net 49))
+ (segment (start 185.293 107.315) (end 186.182 106.426) (width 0.2032) (layer Cuivre) (net 49))
+ (segment (start 182.88 107.315) (end 182.88 89.281) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 157.1752 84.582) (end 159.004 84.582) (width 0.2032) (layer Composant) (net 49) (status 800))
+ (segment (start 221.361 106.426) (end 186.182 106.426) (width 0.2032) (layer Cuivre) (net 49))
+ (segment (start 169.799 86.233) (end 169.799 85.217) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 169.799 85.217) (end 169.037 84.455) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 180.086 86.487) (end 170.053 86.487) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 223.139 106.426) (end 238.506 106.426) (width 0.2032) (layer Cuivre) (net 49))
+ (segment (start 170.053 86.487) (end 169.799 86.233) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 182.88 89.281) (end 180.086 86.487) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 222.25 107.315) (end 223.139 106.426) (width 0.2032) (layer Cuivre) (net 49) (status 800))
+ (segment (start 185.293 107.315) (end 182.88 107.315) (width 0.2032) (layer Cuivre) (net 49))
+ (segment (start 239.395 107.315) (end 240.03 107.315) (width 0.2032) (layer Cuivre) (net 49) (status 400))
+ (segment (start 159.004 84.582) (end 159.004 84.455) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 169.037 84.455) (end 159.004 84.455) (width 0.2032) (layer Composant) (net 49))
+ (segment (start 222.25 107.315) (end 221.361 106.426) (width 0.2032) (layer Cuivre) (net 49) (status 800))
+ (via (at 182.88 107.315) (size 0.889) (layers Composant Cuivre) (net 49))
+ (via (at 304.546 63.754) (size 0.889) (layers Composant Cuivre) (net 50))
+ (via (at 280.67 111.76) (size 0.889) (layers Composant Cuivre) (net 50))
+ (segment (start 173.609 109.728) (end 175.26 109.728) (width 0.2032) (layer Cuivre) (net 50) (status 800))
+ (segment (start 302.9204 65.913) (end 303.403 65.4304) (width 0.2032) (layer Composant) (net 50))
+ (segment (start 303.403 65.405) (end 303.657 65.151) (width 0.2032) (layer Composant) (net 50))
+ (segment (start 304.546 63.754) (end 303.657 64.643) (width 0.2032) (layer Composant) (net 50))
+ (segment (start 177.292 111.76) (end 280.67 111.76) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 294.767 64.389) (end 303.911 64.389) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 280.67 111.506) (end 280.67 116.205) (width 0.2032) (layer Composant) (net 50) (status 400))
+ (segment (start 280.67 71.755) (end 280.67 80.645) (width 0.2032) (layer Composant) (net 50) (status C00))
+ (segment (start 303.911 64.389) (end 304.546 63.754) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 175.26 109.728) (end 177.292 111.76) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 280.67 116.205) (end 280.67 125.095) (width 0.2032) (layer Composant) (net 50) (status C00))
+ (segment (start 280.67 98.425) (end 280.67 107.315) (width 0.2032) (layer Composant) (net 50) (status C00))
+ (segment (start 280.67 98.425) (end 280.67 89.535) (width 0.2032) (layer Composant) (net 50) (status C00))
+ (segment (start 280.67 107.315) (end 280.67 111.506) (width 0.2032) (layer Composant) (net 50) (status 800))
+ (segment (start 303.657 64.643) (end 303.657 65.151) (width 0.2032) (layer Composant) (net 50))
+ (segment (start 287.528 62.865) (end 280.67 62.865) (width 0.2032) (layer Cuivre) (net 50) (status 400))
+ (segment (start 280.67 89.535) (end 280.67 80.645) (width 0.2032) (layer Composant) (net 50) (status C00))
+ (segment (start 280.67 111.76) (end 280.67 111.506) (width 0.2032) (layer Composant) (net 50))
+ (segment (start 287.528 62.865) (end 288.798 61.595) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 288.798 61.595) (end 291.973 61.595) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 291.973 61.595) (end 294.767 64.389) (width 0.2032) (layer Cuivre) (net 50))
+ (segment (start 280.67 71.755) (end 280.67 62.865) (width 0.2032) (layer Composant) (net 50) (status C00))
+ (segment (start 302.9204 66.675) (end 302.9204 65.913) (width 0.2032) (layer Composant) (net 50) (status 800))
+ (segment (start 303.403 65.4304) (end 303.403 65.405) (width 0.2032) (layer Composant) (net 50))
+ (segment (start 278.13 116.205) (end 278.13 110.744) (width 0.2032) (layer Composant) (net 51) (status 800))
+ (segment (start 295.021 63.881) (end 301.371 63.881) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 288.544 61.087) (end 292.227 61.087) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 301.752 63.5) (end 302.133 63.5) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 277.749 110.744) (end 278.13 110.744) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 177.546 111.252) (end 277.241 111.252) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 287.782 61.849) (end 288.544 61.087) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 278.13 62.865) (end 279.146 61.849) (width 0.2032) (layer Cuivre) (net 51) (status 800))
+ (segment (start 278.13 71.755) (end 278.13 62.865) (width 0.2032) (layer Composant) (net 51) (status C00))
+ (segment (start 302.133 63.5) (end 302.26 63.373) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 302.26 64.135) (end 301.879 64.516) (width 0.2032) (layer Composant) (net 51))
+ (segment (start 277.241 111.252) (end 277.749 110.744) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 302.26 63.373) (end 302.26 64.135) (width 0.2032) (layer Composant) (net 51))
+ (segment (start 173.609 108.458) (end 174.752 108.458) (width 0.2032) (layer Cuivre) (net 51) (status 800))
+ (segment (start 279.146 61.849) (end 287.782 61.849) (width 0.2032) (layer Cuivre) (net 51))
+ (via (at 278.13 110.744) (size 0.889) (layers Composant Cuivre) (net 51))
+ (segment (start 278.13 110.744) (end 278.13 107.315) (width 0.2032) (layer Composant) (net 51) (status 400))
+ (segment (start 301.879 64.516) (end 301.879 66.675) (width 0.2032) (layer Composant) (net 51))
+ (segment (start 278.13 125.095) (end 278.13 116.205) (width 0.2032) (layer Composant) (net 51) (status C00))
+ (segment (start 278.13 107.315) (end 278.13 98.425) (width 0.2032) (layer Composant) (net 51) (status C00))
+ (segment (start 278.13 71.755) (end 278.13 80.645) (width 0.2032) (layer Composant) (net 51) (status C00))
+ (segment (start 177.546 111.252) (end 174.752 108.458) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 301.879 66.675) (end 301.9298 66.675) (width 0.2032) (layer Composant) (net 51) (status 400))
+ (segment (start 301.371 63.881) (end 301.752 63.5) (width 0.2032) (layer Cuivre) (net 51))
+ (via (at 302.26 63.373) (size 0.889) (layers Composant Cuivre) (net 51))
+ (segment (start 278.13 89.535) (end 278.13 80.645) (width 0.2032) (layer Composant) (net 51) (status C00))
+ (segment (start 278.13 89.535) (end 278.13 98.425) (width 0.2032) (layer Composant) (net 51) (status C00))
+ (segment (start 292.227 61.087) (end 295.021 63.881) (width 0.2032) (layer Cuivre) (net 51))
+ (segment (start 173.609 92.202) (end 176.403 92.202) (width 0.2032) (layer Cuivre) (net 52) (status 800))
+ (segment (start 297.18 72.9234) (end 298.069 72.9234) (width 0.2032) (layer Composant) (net 52) (status 800))
+ (segment (start 176.403 92.202) (end 177.165 92.964) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 297.688 72.517) (end 297.307 72.898) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 210.82 74.295) (end 211.963 75.438) (width 0.2032) (layer Cuivre) (net 52) (status 800))
+ (via (at 298.45 72.517) (size 0.889) (layers Composant Cuivre) (net 52))
+ (segment (start 210.82 83.185) (end 210.82 92.075) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 298.45 72.517) (end 297.688 72.517) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 298.069 72.9234) (end 298.069 72.898) (width 0.2032) (layer Composant) (net 52))
+ (segment (start 177.165 92.964) (end 210.566 92.964) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 295.91 72.898) (end 295.275 73.533) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 297.307 72.898) (end 295.91 72.898) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 291.084 75.438) (end 292.989 73.533) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 210.82 100.965) (end 210.82 109.855) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 210.82 74.295) (end 210.82 83.185) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 291.084 75.438) (end 211.963 75.438) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 210.566 92.964) (end 210.82 92.71) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 295.275 73.533) (end 292.989 73.533) (width 0.2032) (layer Cuivre) (net 52))
+ (segment (start 210.82 118.745) (end 210.82 127.635) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 210.82 74.295) (end 210.82 65.405) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 210.82 118.745) (end 210.82 109.855) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 298.069 72.898) (end 298.45 72.517) (width 0.2032) (layer Composant) (net 52))
+ (segment (start 210.82 92.075) (end 210.82 100.965) (width 0.2032) (layer Composant) (net 52) (status C00))
+ (segment (start 210.82 92.71) (end 210.82 92.075) (width 0.2032) (layer Cuivre) (net 52) (status 400))
+ (via (at 207.772 86.741) (size 0.889) (layers Composant Cuivre) (net 53))
+ (segment (start 177.292 87.122) (end 201.676 87.122) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 208.28 92.075) (end 208.28 100.965) (width 0.2032) (layer Composant) (net 53) (status C00))
+ (segment (start 208.28 74.295) (end 208.28 83.185) (width 0.2032) (layer Composant) (net 53) (status C00))
+ (segment (start 208.28 65.405) (end 208.28 74.295) (width 0.2032) (layer Composant) (net 53) (status C00))
+ (via (at 299.339 73.279) (size 0.889) (layers Composant Cuivre) (net 53))
+ (segment (start 177.292 87.122) (end 176.784 87.63) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 208.28 109.855) (end 208.28 118.745) (width 0.2032) (layer Composant) (net 53) (status C00))
+ (segment (start 298.323 73.279) (end 299.339 73.279) (width 0.2032) (layer Composant) (net 53))
+ (segment (start 296.037 73.533) (end 295.529 74.041) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 208.28 109.855) (end 208.28 100.965) (width 0.2032) (layer Composant) (net 53) (status C00))
+ (segment (start 295.529 74.041) (end 293.116 74.041) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 291.211 75.946) (end 209.931 75.946) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 176.784 89.154) (end 176.784 87.63) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 208.28 83.185) (end 208.28 87.122) (width 0.2032) (layer Composant) (net 53) (status 800))
+ (segment (start 205.105 86.36) (end 205.486 86.741) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 173.609 90.932) (end 175.006 90.932) (width 0.2032) (layer Cuivre) (net 53) (status 800))
+ (segment (start 201.676 87.122) (end 202.438 86.36) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 299.085 73.533) (end 296.037 73.533) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 205.486 86.741) (end 207.772 86.741) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 202.438 86.36) (end 205.105 86.36) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 175.006 90.932) (end 176.784 89.154) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 207.772 86.741) (end 208.28 87.122) (width 0.2032) (layer Composant) (net 53))
+ (segment (start 293.116 74.041) (end 291.211 75.946) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 208.28 87.122) (end 208.28 92.075) (width 0.2032) (layer Composant) (net 53) (status 400))
+ (segment (start 299.339 73.279) (end 299.085 73.533) (width 0.2032) (layer Cuivre) (net 53))
+ (segment (start 298.323 73.4314) (end 298.323 73.279) (width 0.2032) (layer Composant) (net 53))
+ (segment (start 208.28 118.745) (end 208.28 127.635) (width 0.2032) (layer Composant) (net 53) (status C00))
+ (segment (start 297.18 73.4314) (end 298.323 73.4314) (width 0.2032) (layer Composant) (net 53) (status 800))
+ (segment (start 208.28 74.295) (end 209.931 75.946) (width 0.2032) (layer Cuivre) (net 53) (status 800))
+ (segment (start 205.994 75.438) (end 205.74 75.184) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 205.74 92.075) (end 205.74 100.965) (width 0.2032) (layer Composant) (net 54) (status C00))
+ (segment (start 205.74 83.185) (end 205.74 74.295) (width 0.2032) (layer Composant) (net 54) (status C00))
+ (segment (start 294.767 74.803) (end 292.989 74.803) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 205.74 85.852) (end 205.74 92.075) (width 0.2032) (layer Composant) (net 54) (status 400))
+ (segment (start 208.534 75.438) (end 209.55 76.454) (width 0.2032) (layer Cuivre) (net 54))
+ (via (at 294.767 74.803) (size 0.889) (layers Composant Cuivre) (net 54))
+ (via (at 205.74 85.852) (size 0.889) (layers Composant Cuivre) (net 54))
+ (segment (start 205.74 118.745) (end 205.74 127.635) (width 0.2032) (layer Composant) (net 54) (status C00))
+ (segment (start 292.989 74.803) (end 291.338 76.454) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 205.74 83.185) (end 205.74 85.852) (width 0.2032) (layer Composant) (net 54) (status 800))
+ (segment (start 201.93 85.852) (end 205.74 85.852) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 173.609 89.662) (end 175.133 89.662) (width 0.2032) (layer Cuivre) (net 54) (status 800))
+ (segment (start 175.133 89.662) (end 176.022 88.773) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 201.168 86.614) (end 201.93 85.852) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 177.038 86.614) (end 201.168 86.614) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 208.534 75.438) (end 205.994 75.438) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 205.74 100.965) (end 205.74 109.855) (width 0.2032) (layer Composant) (net 54) (status C00))
+ (segment (start 205.74 65.405) (end 205.74 74.295) (width 0.2032) (layer Composant) (net 54) (status C00))
+ (segment (start 291.338 76.454) (end 209.55 76.454) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 176.022 88.773) (end 176.022 87.63) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 205.74 118.745) (end 205.74 109.855) (width 0.2032) (layer Composant) (net 54) (status C00))
+ (segment (start 205.74 75.184) (end 205.74 74.295) (width 0.2032) (layer Cuivre) (net 54) (status 400))
+ (segment (start 296.037 74.93) (end 296.037 74.803) (width 0.2032) (layer Composant) (net 54))
+ (segment (start 177.038 86.614) (end 176.022 87.63) (width 0.2032) (layer Cuivre) (net 54))
+ (segment (start 296.037 74.803) (end 294.767 74.803) (width 0.2032) (layer Composant) (net 54))
+ (segment (start 297.18 74.93) (end 296.037 74.93) (width 0.2032) (layer Composant) (net 54) (status 800))
+ (segment (start 176.911 86.106) (end 175.26 87.757) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 200.66 85.852) (end 200.66 92.075) (width 0.2032) (layer Composant) (net 55) (status 400))
+ (segment (start 209.423 76.962) (end 208.407 75.946) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 200.66 75.692) (end 200.66 74.295) (width 0.2032) (layer Cuivre) (net 55) (status 400))
+ (segment (start 298.069 75.184) (end 295.529 75.184) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 298.323 75.438) (end 298.069 75.184) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 176.911 86.106) (end 199.898 86.106) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 200.66 83.185) (end 200.66 85.852) (width 0.2032) (layer Composant) (net 55) (status 800))
+ (segment (start 200.152 85.852) (end 200.66 85.852) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 199.898 86.106) (end 200.152 85.852) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 297.18 75.438) (end 298.323 75.438) (width 0.2032) (layer Composant) (net 55) (status 800))
+ (segment (start 208.407 75.946) (end 200.914 75.946) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 200.66 74.295) (end 200.66 65.405) (width 0.2032) (layer Composant) (net 55) (status C00))
+ (segment (start 200.914 75.946) (end 200.66 75.692) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 292.862 75.565) (end 291.465 76.962) (width 0.2032) (layer Cuivre) (net 55))
+ (via (at 298.323 75.438) (size 0.889) (layers Composant Cuivre) (net 55))
+ (segment (start 295.529 75.184) (end 295.148 75.565) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 200.66 92.075) (end 200.66 100.965) (width 0.2032) (layer Composant) (net 55) (status C00))
+ (segment (start 173.609 88.392) (end 175.006 88.392) (width 0.2032) (layer Cuivre) (net 55) (status 800))
+ (segment (start 200.66 118.745) (end 200.66 127.635) (width 0.2032) (layer Composant) (net 55) (status C00))
+ (segment (start 200.66 74.295) (end 200.66 83.185) (width 0.2032) (layer Composant) (net 55) (status C00))
+ (segment (start 175.26 88.138) (end 175.26 87.757) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 200.66 118.745) (end 200.66 109.855) (width 0.2032) (layer Composant) (net 55) (status C00))
+ (segment (start 175.006 88.392) (end 175.26 88.138) (width 0.2032) (layer Cuivre) (net 55))
+ (via (at 200.66 85.852) (size 0.889) (layers Composant Cuivre) (net 55))
+ (segment (start 200.66 100.965) (end 200.66 109.855) (width 0.2032) (layer Composant) (net 55) (status C00))
+ (segment (start 295.148 75.565) (end 292.862 75.565) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 291.465 76.962) (end 209.423 76.962) (width 0.2032) (layer Cuivre) (net 55))
+ (segment (start 174.879 84.836) (end 197.739 84.836) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 198.12 92.075) (end 198.12 83.185) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 198.12 109.855) (end 198.12 100.965) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 174.752 86.868) (end 174.752 84.963) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 198.12 74.295) (end 198.12 65.405) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 291.592 77.47) (end 209.169 77.47) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 295.91 75.946) (end 295.783 76.073) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 174.498 87.122) (end 174.752 86.868) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 174.752 84.963) (end 174.879 84.836) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 297.18 75.9206) (end 295.91 75.9206) (width 0.2032) (layer Composant) (net 56) (status 800))
+ (segment (start 198.12 74.295) (end 198.12 83.185) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 198.12 84.455) (end 198.12 83.185) (width 0.2032) (layer Cuivre) (net 56) (status 400))
+ (segment (start 197.739 84.836) (end 198.12 84.455) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 295.91 75.9206) (end 295.91 75.946) (width 0.2032) (layer Composant) (net 56))
+ (segment (start 208.153 76.454) (end 198.374 76.454) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 198.374 76.454) (end 198.12 76.2) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 173.609 87.122) (end 174.498 87.122) (width 0.2032) (layer Cuivre) (net 56) (status 800))
+ (segment (start 209.169 77.47) (end 208.153 76.454) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 198.12 118.745) (end 198.12 127.635) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 198.12 76.2) (end 198.12 74.295) (width 0.2032) (layer Cuivre) (net 56) (status 400))
+ (segment (start 198.12 100.965) (end 198.12 92.075) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 295.783 76.073) (end 292.989 76.073) (width 0.2032) (layer Cuivre) (net 56))
+ (via (at 295.91 75.946) (size 0.889) (layers Composant Cuivre) (net 56))
+ (segment (start 198.12 118.745) (end 198.12 109.855) (width 0.2032) (layer Composant) (net 56) (status C00))
+ (segment (start 292.989 76.073) (end 291.592 77.47) (width 0.2032) (layer Cuivre) (net 56))
+ (segment (start 294.132 76.835) (end 293.37 76.835) (width 0.2032) (layer Composant) (net 57))
+ (segment (start 195.58 92.075) (end 195.58 100.965) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (segment (start 294.132 76.708) (end 294.132 76.835) (width 0.2032) (layer Composant) (net 57))
+ (segment (start 291.846 77.978) (end 208.915 77.978) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 292.989 76.835) (end 291.846 77.978) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 195.58 118.745) (end 195.58 127.635) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (via (at 293.37 76.835) (size 0.889) (layers Composant Cuivre) (net 57))
+ (segment (start 195.834 76.962) (end 195.58 76.708) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 195.58 74.295) (end 195.58 83.185) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (segment (start 195.58 74.295) (end 195.58 65.405) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (segment (start 195.58 83.185) (end 195.58 92.075) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (segment (start 195.58 83.947) (end 195.58 83.185) (width 0.2032) (layer Cuivre) (net 57) (status 400))
+ (segment (start 297.18 76.4286) (end 296.545 76.4286) (width 0.2032) (layer Composant) (net 57) (status 800))
+ (segment (start 195.58 100.965) (end 195.58 109.855) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (segment (start 296.291 76.708) (end 294.132 76.708) (width 0.2032) (layer Composant) (net 57))
+ (segment (start 173.609 85.852) (end 173.609 84.836) (width 0.2032) (layer Cuivre) (net 57) (status 800))
+ (segment (start 174.117 84.328) (end 195.199 84.328) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 195.199 84.328) (end 195.58 83.947) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 207.899 76.962) (end 195.834 76.962) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 195.58 76.708) (end 195.58 74.295) (width 0.2032) (layer Cuivre) (net 57) (status 400))
+ (segment (start 293.37 76.835) (end 292.989 76.835) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 195.58 118.745) (end 195.58 109.855) (width 0.2032) (layer Composant) (net 57) (status C00))
+ (segment (start 296.545 76.4286) (end 296.545 76.454) (width 0.2032) (layer Composant) (net 57))
+ (segment (start 296.545 76.454) (end 296.291 76.708) (width 0.2032) (layer Composant) (net 57))
+ (segment (start 173.609 84.836) (end 174.117 84.328) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 208.915 77.978) (end 207.899 76.962) (width 0.2032) (layer Cuivre) (net 57))
+ (segment (start 279.4 74.295) (end 279.4 78.74) (width 0.2032) (layer Composant) (net 58) (status 800))
+ (segment (start 186.436 130.556) (end 279.146 130.556) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 279.4 100.965) (end 279.4 109.855) (width 0.2032) (layer Composant) (net 58) (status C00))
+ (segment (start 279.4 92.075) (end 279.4 100.965) (width 0.2032) (layer Composant) (net 58) (status C00))
+ (segment (start 279.4 78.74) (end 279.4 83.185) (width 0.2032) (layer Composant) (net 58) (status 400))
+ (segment (start 279.4 92.075) (end 279.4 83.185) (width 0.2032) (layer Composant) (net 58) (status C00))
+ (via (at 298.45 76.581) (size 0.889) (layers Composant Cuivre) (net 58))
+ (segment (start 296.418 76.581) (end 296.164 76.835) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 176.276 129.54) (end 185.42 129.54) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 279.4 118.745) (end 279.4 127.635) (width 0.2032) (layer Composant) (net 58) (status C00))
+ (segment (start 279.4 130.302) (end 279.4 127.635) (width 0.2032) (layer Cuivre) (net 58) (status 400))
+ (segment (start 293.624 77.724) (end 293.37 77.724) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 298.069 76.835) (end 298.323 76.581) (width 0.2032) (layer Composant) (net 58))
+ (segment (start 298.323 76.581) (end 298.45 76.581) (width 0.2032) (layer Composant) (net 58))
+ (segment (start 279.4 74.295) (end 279.4 65.405) (width 0.2032) (layer Composant) (net 58) (status C00))
+ (segment (start 298.069 76.9366) (end 298.069 76.835) (width 0.2032) (layer Composant) (net 58))
+ (segment (start 293.37 77.724) (end 292.608 78.486) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 298.45 76.581) (end 296.418 76.581) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 185.42 129.54) (end 186.436 130.556) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 279.146 130.556) (end 279.4 130.302) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 297.18 76.9366) (end 298.069 76.9366) (width 0.2032) (layer Composant) (net 58) (status 800))
+ (segment (start 279.4 78.74) (end 279.654 78.486) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 174.625 124.206) (end 175.387 124.968) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 292.608 78.486) (end 279.654 78.486) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 296.164 76.835) (end 294.513 76.835) (width 0.2032) (layer Cuivre) (net 58))
+ (via (at 279.4 78.74) (size 0.889) (layers Composant Cuivre) (net 58))
+ (segment (start 293.624 77.724) (end 294.513 76.835) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 175.387 128.651) (end 176.276 129.54) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 175.387 124.968) (end 175.387 128.651) (width 0.2032) (layer Cuivre) (net 58))
+ (segment (start 173.609 124.206) (end 174.625 124.206) (width 0.2032) (layer Cuivre) (net 58) (status 800))
+ (segment (start 279.4 118.745) (end 279.4 109.855) (width 0.2032) (layer Composant) (net 58) (status C00))
+ (via (at 299.72 77.089) (size 0.889) (layers Composant Cuivre) (net 59))
+ (segment (start 294.64 77.343) (end 292.989 78.994) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.86 118.745) (end 276.86 127.635) (width 0.2032) (layer Composant) (net 59) (status C00))
+ (segment (start 175.895 123.571) (end 175.895 128.524) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.86 100.965) (end 276.86 109.855) (width 0.2032) (layer Composant) (net 59) (status C00))
+ (segment (start 299.466 77.343) (end 294.64 77.343) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 299.72 77.089) (end 299.466 77.343) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.86 83.185) (end 276.86 78.74) (width 0.2032) (layer Composant) (net 59) (status 800))
+ (segment (start 276.86 83.185) (end 276.86 92.075) (width 0.2032) (layer Composant) (net 59) (status C00))
+ (segment (start 299.085 77.4192) (end 299.085 77.343) (width 0.2032) (layer Composant) (net 59))
+ (segment (start 276.86 92.075) (end 276.86 100.965) (width 0.2032) (layer Composant) (net 59) (status C00))
+ (segment (start 299.085 77.343) (end 299.339 77.089) (width 0.2032) (layer Composant) (net 59))
+ (segment (start 280.289 78.994) (end 279.781 79.502) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 175.895 128.524) (end 176.276 128.905) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.86 78.74) (end 276.86 74.295) (width 0.2032) (layer Composant) (net 59) (status 400))
+ (segment (start 292.989 78.994) (end 280.289 78.994) (width 0.2032) (layer Cuivre) (net 59))
+ (via (at 276.86 78.74) (size 0.889) (layers Composant Cuivre) (net 59))
+ (segment (start 297.18 77.4192) (end 299.085 77.4192) (width 0.2032) (layer Composant) (net 59) (status 800))
+ (segment (start 176.276 128.905) (end 185.801 128.905) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.86 129.794) (end 276.86 127.635) (width 0.2032) (layer Cuivre) (net 59) (status 400))
+ (segment (start 276.86 118.745) (end 276.86 109.855) (width 0.2032) (layer Composant) (net 59) (status C00))
+ (segment (start 278.892 79.502) (end 278.13 78.74) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 278.13 78.74) (end 276.86 78.74) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.606 130.048) (end 276.86 129.794) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 299.339 77.089) (end 299.72 77.089) (width 0.2032) (layer Composant) (net 59))
+ (segment (start 186.944 130.048) (end 276.606 130.048) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 185.801 128.905) (end 186.944 130.048) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 173.609 122.936) (end 175.26 122.936) (width 0.2032) (layer Cuivre) (net 59) (status 800))
+ (segment (start 279.781 79.502) (end 278.892 79.502) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 276.86 74.295) (end 276.86 65.405) (width 0.2032) (layer Composant) (net 59) (status C00))
+ (segment (start 175.26 122.936) (end 175.895 123.571) (width 0.2032) (layer Cuivre) (net 59))
+ (segment (start 186.817 129.286) (end 274.066 129.286) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 295.402 78.105) (end 294.513 78.105) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 274.32 129.032) (end 274.32 127.635) (width 0.2032) (layer Cuivre) (net 60) (status 400))
+ (segment (start 274.32 74.295) (end 274.32 65.405) (width 0.2032) (layer Composant) (net 60) (status C00))
+ (segment (start 278.511 79.756) (end 274.32 79.756) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 274.32 74.295) (end 274.32 79.756) (width 0.2032) (layer Composant) (net 60) (status 800))
+ (segment (start 179.197 121.666) (end 181.229 123.698) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 294.513 78.105) (end 293.116 79.502) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 295.402 77.9272) (end 295.402 78.105) (width 0.2032) (layer Composant) (net 60))
+ (segment (start 274.32 109.855) (end 274.32 118.745) (width 0.2032) (layer Composant) (net 60) (status C00))
+ (segment (start 280.416 79.502) (end 279.908 80.01) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 274.32 127.635) (end 274.32 118.745) (width 0.2032) (layer Composant) (net 60) (status C00))
+ (segment (start 297.18 77.9272) (end 295.402 77.9272) (width 0.2032) (layer Composant) (net 60) (status 800))
+ (segment (start 274.32 109.855) (end 274.32 100.965) (width 0.2032) (layer Composant) (net 60) (status C00))
+ (segment (start 274.32 100.965) (end 274.32 92.075) (width 0.2032) (layer Composant) (net 60) (status C00))
+ (segment (start 274.066 129.286) (end 274.32 129.032) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 274.32 79.756) (end 274.32 83.185) (width 0.2032) (layer Composant) (net 60) (status 400))
+ (segment (start 186.817 129.286) (end 185.928 128.397) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 293.116 79.502) (end 280.416 79.502) (width 0.2032) (layer Cuivre) (net 60))
+ (via (at 295.402 78.105) (size 0.889) (layers Composant Cuivre) (net 60))
+ (segment (start 173.609 121.666) (end 179.197 121.666) (width 0.2032) (layer Cuivre) (net 60) (status 800))
+ (via (at 274.32 79.756) (size 0.889) (layers Composant Cuivre) (net 60))
+ (segment (start 278.765 80.01) (end 278.511 79.756) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 181.229 123.698) (end 181.229 128.143) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 274.32 83.185) (end 274.32 92.075) (width 0.2032) (layer Composant) (net 60) (status C00))
+ (segment (start 279.908 80.01) (end 278.765 80.01) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 181.483 128.397) (end 181.229 128.143) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 185.928 128.397) (end 181.483 128.397) (width 0.2032) (layer Cuivre) (net 60))
+ (segment (start 271.78 100.965) (end 271.78 92.075) (width 0.2032) (layer Composant) (net 61) (status C00))
+ (segment (start 179.324 120.777) (end 175.26 120.777) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 296.291 78.359) (end 295.783 78.867) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 281.051 81.534) (end 272.288 81.534) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 272.288 81.534) (end 271.78 81.026) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 298.45 78.4352) (end 298.45 78.359) (width 0.2032) (layer Composant) (net 61))
+ (segment (start 181.737 123.19) (end 181.737 127.635) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 181.737 127.635) (end 181.991 127.889) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 298.45 78.359) (end 296.291 78.359) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 295.783 78.867) (end 294.386 78.867) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 294.386 78.867) (end 293.243 80.01) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 186.182 127.889) (end 187.071 128.778) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 271.78 128.524) (end 271.78 127.635) (width 0.2032) (layer Cuivre) (net 61) (status 400))
+ (segment (start 281.051 81.534) (end 282.575 80.01) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 271.78 109.855) (end 271.78 118.745) (width 0.2032) (layer Composant) (net 61) (status C00))
+ (segment (start 179.324 120.777) (end 181.737 123.19) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 271.78 118.745) (end 271.78 127.635) (width 0.2032) (layer Composant) (net 61) (status C00))
+ (segment (start 173.609 120.396) (end 174.879 120.396) (width 0.2032) (layer Cuivre) (net 61) (status 800))
+ (segment (start 293.243 80.01) (end 282.575 80.01) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 271.78 74.295) (end 271.78 81.026) (width 0.2032) (layer Composant) (net 61) (status 800))
+ (segment (start 271.78 83.185) (end 271.78 92.075) (width 0.2032) (layer Composant) (net 61) (status C00))
+ (segment (start 297.18 78.4352) (end 298.45 78.4352) (width 0.2032) (layer Composant) (net 61) (status 800))
+ (segment (start 271.78 81.026) (end 271.78 83.185) (width 0.2032) (layer Composant) (net 61) (status 400))
+ (segment (start 271.78 74.295) (end 271.78 65.405) (width 0.2032) (layer Composant) (net 61) (status C00))
+ (via (at 298.45 78.359) (size 0.889) (layers Composant Cuivre) (net 61))
+ (segment (start 181.991 127.889) (end 186.182 127.889) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 271.78 100.965) (end 271.78 109.855) (width 0.2032) (layer Composant) (net 61) (status C00))
+ (segment (start 187.071 128.778) (end 271.526 128.778) (width 0.2032) (layer Cuivre) (net 61))
+ (via (at 271.78 81.026) (size 0.889) (layers Composant Cuivre) (net 61))
+ (segment (start 271.526 128.778) (end 271.78 128.524) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 175.26 120.777) (end 174.879 120.396) (width 0.2032) (layer Cuivre) (net 61))
+ (segment (start 275.336 110.744) (end 275.59 110.49) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 275.59 71.755) (end 275.59 62.865) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (segment (start 287.909 61.087) (end 288.417 60.579) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 277.368 61.087) (end 287.909 61.087) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 299.974 63.373) (end 300.355 62.992) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 275.59 98.425) (end 275.59 89.535) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (via (at 301.117 62.992) (size 0.889) (layers Composant Cuivre) (net 62))
+ (segment (start 301.117 64.516) (end 301.117 62.992) (width 0.2032) (layer Composant) (net 62))
+ (segment (start 301.371 64.77) (end 301.371 65.786) (width 0.2032) (layer Composant) (net 62))
+ (segment (start 301.4218 66.675) (end 301.4218 65.786) (width 0.2032) (layer Composant) (net 62) (status 800))
+ (segment (start 301.371 64.77) (end 301.117 64.516) (width 0.2032) (layer Composant) (net 62))
+ (segment (start 301.4218 65.786) (end 301.371 65.786) (width 0.2032) (layer Composant) (net 62))
+ (segment (start 177.673 110.744) (end 174.117 107.188) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 275.59 110.49) (end 275.59 107.315) (width 0.2032) (layer Cuivre) (net 62) (status 400))
+ (segment (start 174.117 107.188) (end 173.609 107.188) (width 0.2032) (layer Cuivre) (net 62) (status 400))
+ (segment (start 275.59 107.315) (end 275.59 116.205) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (segment (start 295.402 63.373) (end 299.974 63.373) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 275.59 107.315) (end 275.59 98.425) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (segment (start 275.59 71.755) (end 275.59 80.645) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (segment (start 292.608 60.579) (end 295.402 63.373) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 275.59 80.645) (end 275.59 89.535) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (segment (start 275.59 62.865) (end 277.368 61.087) (width 0.2032) (layer Cuivre) (net 62) (status 800))
+ (segment (start 275.59 116.205) (end 275.59 125.095) (width 0.2032) (layer Composant) (net 62) (status C00))
+ (segment (start 177.673 110.744) (end 275.336 110.744) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 288.417 60.579) (end 292.608 60.579) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 301.117 62.992) (end 300.355 62.992) (width 0.2032) (layer Cuivre) (net 62))
+ (segment (start 256.54 74.295) (end 256.54 71.374) (width 0.2032) (layer Composant) (net 63) (status 800))
+ (segment (start 294.513 79.375) (end 292.1 81.788) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 253.238 123.571) (end 252.984 123.317) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 253.238 123.571) (end 256.54 123.571) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 292.1 83.566) (end 291.846 83.82) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 174.879 119.126) (end 175.768 120.015) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 295.91 79.375) (end 294.513 79.375) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 256.54 123.571) (end 256.54 127.635) (width 0.2032) (layer Composant) (net 63) (status 400))
+ (segment (start 256.54 65.405) (end 257.048 65.913) (width 0.2032) (layer Composant) (net 63) (status 800))
+ (segment (start 286.131 82.042) (end 256.794 82.042) (width 0.2032) (layer Cuivre) (net 63))
+ (via (at 256.54 123.571) (size 0.889) (layers Composant Cuivre) (net 63))
+ (segment (start 183.007 123.317) (end 252.984 123.317) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 257.048 70.866) (end 256.54 71.374) (width 0.2032) (layer Composant) (net 63))
+ (via (at 299.593 78.359) (size 0.889) (layers Composant Cuivre) (net 63))
+ (segment (start 256.54 118.745) (end 256.54 123.571) (width 0.2032) (layer Composant) (net 63) (status 800))
+ (segment (start 298.831 79.121) (end 296.164 79.121) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 179.705 120.015) (end 183.007 123.317) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 298.831 79.121) (end 299.593 78.359) (width 0.2032) (layer Composant) (net 63))
+ (segment (start 257.048 65.913) (end 257.048 70.866) (width 0.2032) (layer Composant) (net 63))
+ (segment (start 296.164 79.121) (end 295.91 79.375) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 297.942 79.121) (end 298.831 79.121) (width 0.2032) (layer Composant) (net 63))
+ (segment (start 256.54 109.855) (end 256.54 100.965) (width 0.2032) (layer Composant) (net 63) (status C00))
+ (segment (start 292.1 81.788) (end 292.1 83.566) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 297.942 78.9178) (end 297.942 79.121) (width 0.2032) (layer Composant) (net 63))
+ (segment (start 175.768 120.015) (end 179.705 120.015) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 297.18 78.9178) (end 297.942 78.9178) (width 0.2032) (layer Composant) (net 63) (status 800))
+ (segment (start 256.54 82.296) (end 256.54 83.185) (width 0.2032) (layer Cuivre) (net 63) (status 400))
+ (segment (start 291.846 83.82) (end 287.909 83.82) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 256.54 92.075) (end 256.54 100.965) (width 0.2032) (layer Composant) (net 63) (status C00))
+ (segment (start 173.609 119.126) (end 174.879 119.126) (width 0.2032) (layer Cuivre) (net 63) (status 800))
+ (segment (start 256.54 92.075) (end 256.54 83.185) (width 0.2032) (layer Composant) (net 63) (status C00))
+ (segment (start 256.54 118.745) (end 256.54 109.855) (width 0.2032) (layer Composant) (net 63) (status C00))
+ (segment (start 299.593 78.359) (end 298.831 79.121) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 287.909 83.82) (end 286.131 82.042) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 256.54 83.185) (end 256.54 74.295) (width 0.2032) (layer Composant) (net 63) (status C00))
+ (segment (start 256.794 82.042) (end 256.54 82.296) (width 0.2032) (layer Cuivre) (net 63))
+ (segment (start 296.291 79.502) (end 295.656 80.137) (width 0.2032) (layer Composant) (net 64))
+ (segment (start 254 118.745) (end 254 109.855) (width 0.2032) (layer Composant) (net 64) (status C00))
+ (via (at 295.656 80.137) (size 0.889) (layers Composant Cuivre) (net 64))
+ (segment (start 254 118.745) (end 254 122.555) (width 0.2032) (layer Composant) (net 64) (status 800))
+ (segment (start 297.18 79.4258) (end 296.291 79.4258) (width 0.2032) (layer Composant) (net 64) (status 800))
+ (segment (start 253.238 122.555) (end 254 122.555) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 254 100.965) (end 254 109.855) (width 0.2032) (layer Composant) (net 64) (status C00))
+ (segment (start 254 122.555) (end 254 127.635) (width 0.2032) (layer Composant) (net 64) (status 400))
+ (segment (start 173.609 117.856) (end 175.387 117.856) (width 0.2032) (layer Cuivre) (net 64) (status 800))
+ (segment (start 296.291 79.4258) (end 296.291 79.502) (width 0.2032) (layer Composant) (net 64))
+ (segment (start 254 92.075) (end 254 100.965) (width 0.2032) (layer Composant) (net 64) (status C00))
+ (segment (start 252.984 122.809) (end 253.238 122.555) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 179.959 119.38) (end 183.388 122.809) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 176.911 119.38) (end 179.959 119.38) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 292.608 83.693) (end 291.973 84.328) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 183.388 122.809) (end 252.984 122.809) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 287.401 84.074) (end 287.655 84.328) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 254 92.075) (end 254 83.185) (width 0.2032) (layer Composant) (net 64) (status C00))
+ (segment (start 254 65.405) (end 254 74.295) (width 0.2032) (layer Composant) (net 64) (status C00))
+ (segment (start 295.656 80.137) (end 294.513 80.137) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 254 84.074) (end 287.401 84.074) (width 0.2032) (layer Cuivre) (net 64))
+ (via (at 254 122.555) (size 0.889) (layers Composant Cuivre) (net 64))
+ (segment (start 254 84.074) (end 254 83.185) (width 0.2032) (layer Cuivre) (net 64) (status 400))
+ (segment (start 292.608 82.042) (end 292.608 83.693) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 254 74.295) (end 254 83.185) (width 0.2032) (layer Composant) (net 64) (status C00))
+ (segment (start 175.387 117.856) (end 176.911 119.38) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 291.973 84.328) (end 287.655 84.328) (width 0.2032) (layer Cuivre) (net 64))
+ (segment (start 294.513 80.137) (end 292.608 82.042) (width 0.2032) (layer Cuivre) (net 64))
+ (via (at 300.228 80.8482) (size 0.889) (layers Composant Cuivre) (net 65))
+ (segment (start 299.9232 81.153) (end 300.228 80.8482) (width 0.2032) (layer Composant) (net 65))
+ (segment (start 294.132 83.566) (end 292.354 85.344) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 292.354 85.344) (end 287.147 85.344) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 251.46 118.745) (end 251.46 109.855) (width 0.2032) (layer Composant) (net 65) (status C00))
+ (segment (start 297.5102 83.566) (end 294.132 83.566) (width 0.2032) (layer Cuivre) (net 65))
+ (via (at 251.46 84.836) (size 0.889) (layers Composant Cuivre) (net 65))
+ (segment (start 179.578 115.443) (end 186.436 122.301) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 253.111 84.836) (end 251.46 84.836) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 251.46 127.635) (end 251.46 118.745) (width 0.2032) (layer Composant) (net 65) (status C00))
+ (segment (start 251.46 109.855) (end 251.46 100.965) (width 0.2032) (layer Composant) (net 65) (status C00))
+ (segment (start 251.46 92.075) (end 251.46 84.836) (width 0.2032) (layer Composant) (net 65) (status 800))
+ (segment (start 251.46 100.965) (end 251.46 92.075) (width 0.2032) (layer Composant) (net 65) (status C00))
+ (segment (start 251.46 122.047) (end 251.46 118.745) (width 0.2032) (layer Cuivre) (net 65) (status 400))
+ (segment (start 176.022 116.586) (end 177.165 115.443) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 177.165 115.443) (end 179.578 115.443) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 286.893 85.09) (end 287.147 85.344) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 251.206 122.301) (end 251.46 122.047) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 186.436 122.301) (end 251.206 122.301) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 251.46 74.295) (end 251.46 83.185) (width 0.2032) (layer Composant) (net 65) (status C00))
+ (segment (start 251.46 84.836) (end 251.46 83.185) (width 0.2032) (layer Composant) (net 65) (status 400))
+ (segment (start 173.609 116.586) (end 176.022 116.586) (width 0.2032) (layer Cuivre) (net 65) (status 800))
+ (segment (start 253.365 85.09) (end 286.893 85.09) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 253.365 85.09) (end 253.111 84.836) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 299.9232 82.169) (end 299.9232 81.153) (width 0.2032) (layer Composant) (net 65) (status 800))
+ (segment (start 251.46 74.295) (end 251.46 65.405) (width 0.2032) (layer Composant) (net 65) (status C00))
+ (segment (start 300.228 80.8482) (end 297.5102 83.566) (width 0.2032) (layer Cuivre) (net 65))
+ (segment (start 248.92 92.075) (end 250.444 93.599) (width 0.2032) (layer Cuivre) (net 66) (status 800))
+ (segment (start 176.53 114.935) (end 179.959 114.935) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 248.92 109.855) (end 248.92 118.745) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 248.92 100.965) (end 248.92 92.075) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 186.69 121.666) (end 248.666 121.666) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 248.92 127.635) (end 248.92 118.745) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 248.92 65.405) (end 248.92 74.295) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 300.4312 83.058) (end 299.1612 84.328) (width 0.2032) (layer Composant) (net 66))
+ (segment (start 287.401 94.107) (end 292.735 94.107) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 248.92 121.412) (end 248.92 118.745) (width 0.2032) (layer Cuivre) (net 66) (status 400))
+ (segment (start 248.92 92.075) (end 248.92 83.185) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 248.92 109.855) (end 248.92 100.965) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 176.149 115.316) (end 176.53 114.935) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 179.959 114.935) (end 186.69 121.666) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 294.259 92.583) (end 294.259 91.567) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 300.4312 82.169) (end 300.4312 83.058) (width 0.2032) (layer Composant) (net 66) (status 800))
+ (segment (start 294.259 84.582) (end 294.513 84.328) (width 0.2032) (layer Composant) (net 66))
+ (segment (start 294.259 91.567) (end 294.259 84.582) (width 0.2032) (layer Composant) (net 66))
+ (via (at 294.259 91.567) (size 0.889) (layers Composant Cuivre) (net 66))
+ (segment (start 173.609 115.316) (end 176.149 115.316) (width 0.2032) (layer Cuivre) (net 66) (status 800))
+ (segment (start 248.92 74.295) (end 248.92 83.185) (width 0.2032) (layer Composant) (net 66) (status C00))
+ (segment (start 248.666 121.666) (end 248.92 121.412) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 294.513 84.328) (end 299.1612 84.328) (width 0.2032) (layer Composant) (net 66))
+ (segment (start 250.444 93.599) (end 286.893 93.599) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 286.893 93.599) (end 287.401 94.107) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 292.735 94.107) (end 294.259 92.583) (width 0.2032) (layer Cuivre) (net 66))
+ (segment (start 212.471 128.651) (end 214.376 128.651) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 214.63 107.315) (end 214.63 116.205) (width 0.2032) (layer Composant) (net 67) (status C00))
+ (segment (start 214.63 71.755) (end 214.63 62.865) (width 0.2032) (layer Composant) (net 67) (status C00))
+ (segment (start 214.63 89.535) (end 214.63 98.425) (width 0.2032) (layer Composant) (net 67) (status C00))
+ (segment (start 199.39 132.207) (end 199.644 131.953) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 214.63 128.397) (end 214.63 125.095) (width 0.2032) (layer Composant) (net 67) (status 400))
+ (segment (start 214.376 128.651) (end 214.63 128.397) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 210.82 130.302) (end 212.471 128.651) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 214.63 89.535) (end 214.63 85.344) (width 0.2032) (layer Composant) (net 67) (status 800))
+ (segment (start 214.63 98.425) (end 214.63 107.315) (width 0.2032) (layer Composant) (net 67) (status C00))
+ (segment (start 202.565 135.636) (end 199.644 135.636) (width 0.2032) (layer Composant) (net 67) (status 800))
+ (segment (start 214.63 116.205) (end 214.63 125.095) (width 0.2032) (layer Composant) (net 67) (status C00))
+ (segment (start 214.63 85.344) (end 214.884 85.09) (width 0.2032) (layer Cuivre) (net 67))
+ (via (at 214.63 85.344) (size 0.889) (layers Composant Cuivre) (net 67))
+ (segment (start 292.608 85.852) (end 286.893 85.852) (width 0.2032) (layer Cuivre) (net 67))
+ (segment (start 220.726 85.725) (end 286.766 85.725) (width 0.2032) (layer Cuivre) (net 67))
+ (segment (start 214.63 71.755) (end 214.63 80.645) (width 0.2032) (layer Composant) (net 67) (status C00))
+ (segment (start 206.629 131.953) (end 208.28 130.302) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 199.39 135.382) (end 199.39 132.207) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 220.091 85.09) (end 220.726 85.725) (width 0.2032) (layer Cuivre) (net 67))
+ (segment (start 199.644 135.636) (end 199.39 135.382) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 294.132 84.328) (end 292.608 85.852) (width 0.2032) (layer Cuivre) (net 67))
+ (segment (start 286.893 85.852) (end 286.766 85.725) (width 0.2032) (layer Cuivre) (net 67))
+ (segment (start 300.863 83.3882) (end 300.863 84.328) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 199.644 131.953) (end 206.629 131.953) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 300.863 84.328) (end 294.132 84.328) (width 0.2032) (layer Cuivre) (net 67))
+ (via (at 300.863 84.328) (size 0.889) (layers Composant Cuivre) (net 67))
+ (segment (start 300.9392 82.169) (end 300.9392 83.312) (width 0.2032) (layer Composant) (net 67) (status 800))
+ (segment (start 214.884 85.09) (end 220.091 85.09) (width 0.2032) (layer Cuivre) (net 67))
+ (segment (start 300.9392 83.312) (end 300.863 83.3882) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 214.63 85.344) (end 214.63 80.645) (width 0.2032) (layer Composant) (net 67) (status 400))
+ (segment (start 208.28 130.302) (end 210.82 130.302) (width 0.2032) (layer Composant) (net 67))
+ (segment (start 199.009 131.318) (end 205.74 131.318) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 212.09 98.425) (end 212.09 89.535) (width 0.2032) (layer Composant) (net 68) (status C00))
+ (segment (start 301.625 84.836) (end 301.244 85.217) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 292.735 86.487) (end 286.893 86.487) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 215.519 85.598) (end 219.837 85.598) (width 0.2032) (layer Cuivre) (net 68))
+ (via (at 299.847 85.217) (size 0.889) (layers Composant Cuivre) (net 68))
+ (segment (start 198.755 131.572) (end 199.009 131.318) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 212.09 71.755) (end 212.09 80.645) (width 0.2032) (layer Composant) (net 68) (status C00))
+ (segment (start 301.625 84.0232) (end 301.625 84.836) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 198.755 136.652) (end 198.755 131.572) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 212.09 107.315) (end 212.09 116.205) (width 0.2032) (layer Composant) (net 68) (status C00))
+ (segment (start 212.09 125.095) (end 212.09 116.205) (width 0.2032) (layer Composant) (net 68) (status C00))
+ (segment (start 294.005 85.217) (end 292.735 86.487) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 210.312 129.54) (end 211.963 127.889) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 299.847 85.217) (end 294.005 85.217) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 213.614 86.106) (end 213.36 85.852) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 215.011 86.106) (end 215.519 85.598) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 286.639 86.233) (end 220.472 86.233) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 219.837 85.598) (end 220.472 86.233) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 202.565 136.906) (end 199.009 136.906) (width 0.2032) (layer Composant) (net 68) (status 800))
+ (segment (start 301.244 85.217) (end 299.847 85.217) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 199.009 136.906) (end 198.755 136.652) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 212.09 107.315) (end 212.09 98.425) (width 0.2032) (layer Composant) (net 68) (status C00))
+ (segment (start 301.4218 83.82) (end 301.625 84.0232) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 211.963 127.889) (end 211.963 124.968) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 301.4218 82.169) (end 301.4218 83.82) (width 0.2032) (layer Composant) (net 68) (status 800))
+ (via (at 212.09 85.852) (size 0.889) (layers Composant Cuivre) (net 68))
+ (segment (start 213.614 86.106) (end 215.011 86.106) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 212.09 85.852) (end 213.36 85.852) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 212.09 71.755) (end 212.09 62.865) (width 0.2032) (layer Composant) (net 68) (status C00))
+ (segment (start 211.963 124.968) (end 212.09 125.095) (width 0.2032) (layer Composant) (net 68) (status 400))
+ (segment (start 212.09 85.852) (end 212.09 89.535) (width 0.2032) (layer Composant) (net 68) (status 400))
+ (segment (start 207.518 129.54) (end 210.312 129.54) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 212.09 80.645) (end 212.09 85.852) (width 0.2032) (layer Composant) (net 68) (status 800))
+ (segment (start 205.74 131.318) (end 207.518 129.54) (width 0.2032) (layer Composant) (net 68))
+ (segment (start 286.639 86.233) (end 286.893 86.487) (width 0.2032) (layer Cuivre) (net 68))
+ (segment (start 301.9298 83.693) (end 302.133 83.8962) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 205.359 130.81) (end 207.264 128.905) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 198.374 138.176) (end 198.12 137.922) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 209.55 98.425) (end 209.55 89.535) (width 0.2032) (layer Composant) (net 69) (status C00))
+ (segment (start 211.455 86.614) (end 215.265 86.614) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 198.12 137.922) (end 198.12 131.064) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 209.55 125.095) (end 209.55 116.205) (width 0.2032) (layer Composant) (net 69) (status C00))
+ (segment (start 198.374 130.81) (end 205.359 130.81) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 209.55 85.852) (end 209.55 89.535) (width 0.2032) (layer Composant) (net 69) (status 400))
+ (segment (start 209.55 116.205) (end 209.55 107.315) (width 0.2032) (layer Composant) (net 69) (status C00))
+ (segment (start 209.042 128.905) (end 209.55 128.397) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 202.565 138.176) (end 198.374 138.176) (width 0.2032) (layer Composant) (net 69) (status 800))
+ (segment (start 209.55 71.755) (end 209.55 62.865) (width 0.2032) (layer Composant) (net 69) (status C00))
+ (segment (start 302.133 85.471) (end 301.625 85.979) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 302.133 83.8962) (end 302.133 85.471) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 301.9298 82.169) (end 301.9298 83.693) (width 0.2032) (layer Composant) (net 69) (status 800))
+ (segment (start 209.55 80.645) (end 209.55 85.852) (width 0.2032) (layer Composant) (net 69) (status 800))
+ (segment (start 209.55 128.397) (end 209.55 125.095) (width 0.2032) (layer Composant) (net 69) (status 400))
+ (segment (start 210.693 85.852) (end 209.55 85.852) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 209.55 71.755) (end 209.55 80.645) (width 0.2032) (layer Composant) (net 69) (status C00))
+ (segment (start 207.264 128.905) (end 209.042 128.905) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 301.625 85.979) (end 300.863 85.979) (width 0.2032) (layer Composant) (net 69))
+ (via (at 300.863 85.979) (size 0.889) (layers Composant Cuivre) (net 69))
+ (segment (start 286.766 86.995) (end 286.512 86.741) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 209.55 107.315) (end 209.55 98.425) (width 0.2032) (layer Composant) (net 69) (status C00))
+ (segment (start 198.12 131.064) (end 198.374 130.81) (width 0.2032) (layer Composant) (net 69))
+ (segment (start 286.512 86.741) (end 220.345 86.741) (width 0.2032) (layer Cuivre) (net 69))
+ (via (at 209.55 85.852) (size 0.889) (layers Composant Cuivre) (net 69))
+ (segment (start 211.455 86.614) (end 210.693 85.852) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 292.862 86.995) (end 286.766 86.995) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 215.265 86.614) (end 215.773 86.106) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 215.773 86.106) (end 219.71 86.106) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 219.71 86.106) (end 220.345 86.741) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 300.863 85.979) (end 293.878 85.979) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 293.878 85.979) (end 292.862 86.995) (width 0.2032) (layer Cuivre) (net 69))
+ (segment (start 292.989 87.503) (end 286.639 87.503) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 215.519 87.122) (end 216.027 86.614) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 216.027 86.614) (end 219.583 86.614) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 219.583 86.614) (end 220.218 87.249) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 207.01 80.645) (end 207.01 85.852) (width 0.2032) (layer Composant) (net 70) (status 800))
+ (segment (start 302.641 85.725) (end 301.498 86.868) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 207.01 80.645) (end 207.01 71.755) (width 0.2032) (layer Composant) (net 70) (status C00))
+ (via (at 207.01 85.852) (size 0.889) (layers Composant Cuivre) (net 70))
+ (segment (start 302.641 83.7692) (end 302.641 85.725) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 299.72 86.868) (end 293.624 86.868) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 220.218 87.249) (end 286.385 87.249) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 197.866 130.175) (end 204.724 130.175) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 207.01 71.755) (end 207.01 62.865) (width 0.2032) (layer Composant) (net 70) (status C00))
+ (segment (start 207.01 127.889) (end 207.01 125.095) (width 0.2032) (layer Composant) (net 70) (status 400))
+ (segment (start 207.01 85.852) (end 207.01 89.535) (width 0.2032) (layer Composant) (net 70) (status 400))
+ (segment (start 286.385 87.249) (end 286.639 87.503) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 207.01 125.095) (end 207.01 116.205) (width 0.2032) (layer Composant) (net 70) (status C00))
+ (segment (start 207.01 116.205) (end 207.01 107.315) (width 0.2032) (layer Composant) (net 70) (status C00))
+ (segment (start 202.565 139.446) (end 197.866 139.446) (width 0.2032) (layer Composant) (net 70) (status 800))
+ (segment (start 197.866 139.446) (end 197.612 139.192) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 197.612 139.192) (end 197.612 130.429) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 204.724 130.175) (end 207.01 127.889) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 197.612 130.429) (end 197.866 130.175) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 210.693 86.614) (end 211.201 87.122) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 293.624 86.868) (end 292.989 87.503) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 211.201 87.122) (end 215.519 87.122) (width 0.2032) (layer Cuivre) (net 70))
+ (via (at 299.72 86.868) (size 0.889) (layers Composant Cuivre) (net 70))
+ (segment (start 301.498 86.868) (end 299.72 86.868) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 302.4378 82.169) (end 302.4378 83.566) (width 0.2032) (layer Composant) (net 70) (status 800))
+ (segment (start 208.28 85.852) (end 207.01 85.852) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 209.042 86.614) (end 210.693 86.614) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 207.01 89.535) (end 207.01 98.425) (width 0.2032) (layer Composant) (net 70) (status C00))
+ (segment (start 302.4378 83.566) (end 302.641 83.7692) (width 0.2032) (layer Composant) (net 70))
+ (segment (start 207.01 98.425) (end 207.01 107.315) (width 0.2032) (layer Composant) (net 70) (status C00))
+ (segment (start 209.042 86.614) (end 208.28 85.852) (width 0.2032) (layer Cuivre) (net 70))
+ (segment (start 204.47 98.425) (end 204.47 107.315) (width 0.2032) (layer Composant) (net 71) (status C00))
+ (segment (start 204.47 98.425) (end 204.47 89.535) (width 0.2032) (layer Composant) (net 71) (status C00))
+ (segment (start 197.104 140.462) (end 197.104 129.794) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 301.244 87.757) (end 300.863 87.757) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 303.149 85.852) (end 301.244 87.757) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 302.9204 82.169) (end 302.9204 83.439) (width 0.2032) (layer Composant) (net 71) (status 800))
+ (via (at 204.47 87.884) (size 0.889) (layers Composant Cuivre) (net 71))
+ (segment (start 293.243 88.011) (end 286.512 88.011) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 197.358 140.716) (end 197.104 140.462) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 197.231 129.667) (end 201.422 129.667) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 197.104 129.794) (end 197.231 129.667) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 203.835 128.651) (end 204.47 128.016) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 201.422 129.667) (end 202.438 128.651) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 293.497 87.757) (end 293.243 88.011) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 204.47 128.016) (end 204.47 125.095) (width 0.2032) (layer Composant) (net 71) (status 400))
+ (segment (start 286.512 88.011) (end 286.258 87.757) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 202.565 140.716) (end 197.358 140.716) (width 0.2032) (layer Composant) (net 71) (status 800))
+ (segment (start 204.47 80.645) (end 204.47 87.884) (width 0.2032) (layer Composant) (net 71) (status 800))
+ (segment (start 302.9204 83.439) (end 303.149 83.6676) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 204.47 125.095) (end 204.47 116.205) (width 0.2032) (layer Composant) (net 71) (status C00))
+ (via (at 300.863 87.757) (size 0.889) (layers Composant Cuivre) (net 71))
+ (segment (start 286.258 87.757) (end 231.267 87.757) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 204.47 62.865) (end 204.47 71.755) (width 0.2032) (layer Composant) (net 71) (status C00))
+ (segment (start 300.863 87.757) (end 293.497 87.757) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 230.886 88.138) (end 231.267 87.757) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 205.486 88.138) (end 230.886 88.138) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 205.232 87.884) (end 205.486 88.138) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 204.47 71.755) (end 204.47 80.645) (width 0.2032) (layer Composant) (net 71) (status C00))
+ (segment (start 303.149 83.6676) (end 303.149 85.852) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 205.232 87.884) (end 204.47 87.884) (width 0.2032) (layer Cuivre) (net 71))
+ (segment (start 204.47 116.205) (end 204.47 107.315) (width 0.2032) (layer Composant) (net 71) (status C00))
+ (segment (start 202.438 128.651) (end 203.835 128.651) (width 0.2032) (layer Composant) (net 71))
+ (segment (start 204.47 87.884) (end 204.47 89.535) (width 0.2032) (layer Composant) (net 71) (status 400))
+ (segment (start 286.131 88.519) (end 299.72 88.519) (width 0.2032) (layer Cuivre) (net 72))
+ (segment (start 196.723 141.986) (end 196.469 141.732) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 201.93 128.016) (end 201.93 125.095) (width 0.2032) (layer Composant) (net 72) (status 400))
+ (segment (start 303.657 83.5406) (end 303.657 86.106) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 202.565 141.986) (end 196.723 141.986) (width 0.2032) (layer Composant) (net 72) (status 800))
+ (segment (start 303.657 86.106) (end 301.244 88.519) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 231.394 88.646) (end 231.775 88.265) (width 0.2032) (layer Cuivre) (net 72))
+ (segment (start 201.93 107.315) (end 201.93 98.425) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 200.787 129.159) (end 201.93 128.016) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 201.93 80.645) (end 201.93 89.535) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 231.775 88.265) (end 285.877 88.265) (width 0.2032) (layer Cuivre) (net 72))
+ (segment (start 201.93 71.755) (end 201.93 62.865) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 201.93 107.315) (end 201.93 116.205) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 303.4284 83.312) (end 303.657 83.5406) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 201.93 125.095) (end 201.93 116.205) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 201.93 89.535) (end 201.93 98.425) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 196.469 129.667) (end 196.977 129.159) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 299.72 88.519) (end 301.244 88.519) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 196.977 129.159) (end 200.787 129.159) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 201.93 80.645) (end 201.93 71.755) (width 0.2032) (layer Composant) (net 72) (status C00))
+ (segment (start 196.469 141.732) (end 196.469 129.667) (width 0.2032) (layer Composant) (net 72))
+ (segment (start 201.93 88.9) (end 201.93 89.535) (width 0.2032) (layer Cuivre) (net 72) (status 400))
+ (segment (start 202.184 88.646) (end 201.93 88.9) (width 0.2032) (layer Cuivre) (net 72))
+ (via (at 299.72 88.519) (size 0.889) (layers Composant Cuivre) (net 72))
+ (segment (start 303.4284 82.169) (end 303.4284 83.312) (width 0.2032) (layer Composant) (net 72) (status 800))
+ (segment (start 231.394 88.646) (end 202.184 88.646) (width 0.2032) (layer Cuivre) (net 72))
+ (segment (start 285.877 88.265) (end 286.131 88.519) (width 0.2032) (layer Cuivre) (net 72))
+ (segment (start 299.847 62.103) (end 302.641 62.103) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 259.207 103.378) (end 259.969 102.616) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 299.466 62.484) (end 299.847 62.103) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 303.403 63.881) (end 302.641 64.643) (width 0.2032) (layer Composant) (net 73))
+ (segment (start 303.403 62.484) (end 303.403 63.881) (width 0.2032) (layer Composant) (net 73))
+ (via (at 303.403 62.484) (size 0.889) (layers Composant Cuivre) (net 73))
+ (segment (start 303.022 62.484) (end 303.403 62.484) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 273.05 62.865) (end 275.717 60.198) (width 0.2032) (layer Cuivre) (net 73) (status 800))
+ (segment (start 302.641 62.103) (end 303.022 62.484) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 302.4124 66.675) (end 302.4124 64.897) (width 0.2032) (layer Composant) (net 73) (status 800))
+ (segment (start 302.641 64.6684) (end 302.641 64.643) (width 0.2032) (layer Composant) (net 73))
+ (segment (start 302.4124 64.897) (end 302.641 64.6684) (width 0.2032) (layer Composant) (net 73))
+ (segment (start 273.05 107.315) (end 273.05 116.205) (width 0.2032) (layer Composant) (net 73) (status C00))
+ (segment (start 175.768 104.521) (end 174.371 105.918) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 275.717 60.198) (end 287.655 60.198) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 251.841 104.902) (end 252.349 104.394) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 255.905 104.394) (end 256.921 103.378) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 273.05 107.315) (end 273.05 102.616) (width 0.2032) (layer Composant) (net 73) (status 800))
+ (segment (start 273.05 71.755) (end 273.05 62.865) (width 0.2032) (layer Composant) (net 73) (status C00))
+ (segment (start 273.05 98.425) (end 273.05 89.535) (width 0.2032) (layer Composant) (net 73) (status C00))
+ (segment (start 287.655 60.198) (end 287.782 60.071) (width 0.2032) (layer Cuivre) (net 73))
+ (via (at 299.466 62.484) (size 0.889) (layers Composant Cuivre) (net 73))
+ (segment (start 295.275 62.484) (end 299.466 62.484) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 292.862 60.071) (end 287.782 60.071) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 295.275 62.484) (end 292.862 60.071) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 273.05 80.645) (end 273.05 71.755) (width 0.2032) (layer Composant) (net 73) (status C00))
+ (segment (start 249.047 104.902) (end 251.841 104.902) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 248.666 104.521) (end 249.047 104.902) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 173.609 105.918) (end 174.371 105.918) (width 0.2032) (layer Cuivre) (net 73) (status 800))
+ (segment (start 273.05 80.645) (end 273.05 89.535) (width 0.2032) (layer Composant) (net 73) (status C00))
+ (segment (start 175.768 104.521) (end 248.666 104.521) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 256.921 103.378) (end 259.207 103.378) (width 0.2032) (layer Cuivre) (net 73))
+ (via (at 273.05 102.616) (size 0.889) (layers Composant Cuivre) (net 73))
+ (segment (start 259.969 102.616) (end 273.05 102.616) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 252.349 104.394) (end 255.905 104.394) (width 0.2032) (layer Cuivre) (net 73))
+ (segment (start 273.05 102.616) (end 273.05 98.425) (width 0.2032) (layer Composant) (net 73) (status 400))
+ (segment (start 273.05 116.205) (end 273.05 125.095) (width 0.2032) (layer Composant) (net 73) (status C00))
+ (segment (start 199.39 71.755) (end 199.39 80.645) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 195.961 129.286) (end 196.723 128.524) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 303.9364 82.169) (end 303.9364 83.185) (width 0.2032) (layer Composant) (net 74) (status 800))
+ (segment (start 199.136 128.524) (end 199.39 128.27) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 196.215 143.256) (end 195.961 143.002) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 196.723 128.524) (end 199.136 128.524) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 199.39 80.645) (end 199.39 89.535) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 288.29 92.456) (end 288.29 90.805) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 238.76 90.932) (end 236.474 90.932) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 199.39 90.17) (end 199.39 89.535) (width 0.2032) (layer Cuivre) (net 74) (status 400))
+ (segment (start 199.644 90.424) (end 199.39 90.17) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 221.361 90.424) (end 199.644 90.424) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 221.996 91.059) (end 221.361 90.424) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 300.863 89.281) (end 292.735 89.281) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 232.537 92.71) (end 232.156 92.329) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 304.165 83.4136) (end 304.165 86.233) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 304.165 86.233) (end 301.117 89.281) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 235.966 92.71) (end 232.537 92.71) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 236.474 90.932) (end 236.22 91.186) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 232.156 92.329) (end 232.156 91.313) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 199.39 89.535) (end 199.39 98.425) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 199.39 128.27) (end 199.39 125.095) (width 0.2032) (layer Composant) (net 74) (status 400))
+ (segment (start 199.39 116.205) (end 199.39 107.315) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 202.565 143.256) (end 196.215 143.256) (width 0.2032) (layer Composant) (net 74) (status 800))
+ (segment (start 195.961 143.002) (end 195.961 129.286) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 288.544 92.71) (end 288.29 92.456) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 303.9364 83.185) (end 304.165 83.4136) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 199.39 62.865) (end 199.39 71.755) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 239.268 90.424) (end 238.76 90.932) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 292.735 89.281) (end 292.227 89.789) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 239.268 90.424) (end 287.909 90.424) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 291.338 92.71) (end 288.544 92.71) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 231.902 91.059) (end 232.156 91.313) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 236.22 91.186) (end 236.22 92.456) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 287.909 90.424) (end 288.29 90.805) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 292.227 89.789) (end 292.227 91.821) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 236.22 92.456) (end 235.966 92.71) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 291.338 92.71) (end 292.227 91.821) (width 0.2032) (layer Cuivre) (net 74))
+ (via (at 300.863 89.281) (size 0.889) (layers Composant Cuivre) (net 74))
+ (segment (start 199.39 116.205) (end 199.39 125.095) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 231.902 91.059) (end 221.996 91.059) (width 0.2032) (layer Cuivre) (net 74))
+ (segment (start 199.39 98.425) (end 199.39 107.315) (width 0.2032) (layer Composant) (net 74) (status C00))
+ (segment (start 301.117 89.281) (end 300.863 89.281) (width 0.2032) (layer Composant) (net 74))
+ (segment (start 221.996 91.694) (end 221.361 91.059) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 232.156 93.218) (end 231.902 92.964) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 292.735 92.075) (end 291.592 93.218) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 292.735 90.297) (end 292.735 92.075) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 196.85 71.755) (end 196.85 62.865) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 221.996 92.71) (end 221.996 91.694) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 304.673 83.2866) (end 304.673 86.36) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 196.85 125.095) (end 196.85 116.205) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 196.85 107.315) (end 196.85 98.425) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 196.85 98.425) (end 196.85 89.535) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 239.903 90.932) (end 239.649 91.186) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 236.22 93.218) (end 232.156 93.218) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 291.592 93.218) (end 288.417 93.218) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 288.417 93.218) (end 287.782 92.583) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 287.782 91.186) (end 287.528 90.932) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 239.649 92.71) (end 239.395 92.964) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 299.593 90.043) (end 292.989 90.043) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 196.85 89.535) (end 196.85 80.645) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 196.85 125.095) (end 196.85 127.635) (width 0.2032) (layer Composant) (net 75) (status 800))
+ (segment (start 304.673 86.36) (end 301.752 89.281) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 197.104 91.059) (end 196.85 90.805) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 292.989 90.043) (end 292.735 90.297) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 195.326 129.159) (end 196.85 127.635) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 231.902 92.964) (end 222.25 92.964) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 221.361 91.059) (end 197.104 91.059) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 222.25 92.964) (end 221.996 92.71) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 239.395 92.964) (end 236.474 92.964) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 196.85 116.205) (end 196.85 107.315) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 239.649 91.186) (end 239.649 92.71) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 304.4444 82.169) (end 304.4444 83.058) (width 0.2032) (layer Composant) (net 75) (status 800))
+ (segment (start 287.782 92.583) (end 287.782 91.186) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 196.85 71.755) (end 196.85 80.645) (width 0.2032) (layer Composant) (net 75) (status C00))
+ (segment (start 236.474 92.964) (end 236.22 93.218) (width 0.2032) (layer Cuivre) (net 75))
+ (segment (start 287.528 90.932) (end 239.903 90.932) (width 0.2032) (layer Cuivre) (net 75))
+ (via (at 299.593 90.043) (size 0.889) (layers Composant Cuivre) (net 75))
+ (segment (start 195.326 144.272) (end 195.326 129.159) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 301.498 90.043) (end 299.593 90.043) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 301.752 89.789) (end 301.498 90.043) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 196.85 90.805) (end 196.85 89.535) (width 0.2032) (layer Cuivre) (net 75) (status 400))
+ (segment (start 301.752 89.281) (end 301.752 89.789) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 202.565 144.526) (end 195.58 144.526) (width 0.2032) (layer Composant) (net 75) (status 800))
+ (segment (start 304.4444 83.058) (end 304.673 83.2866) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 195.58 144.526) (end 195.326 144.272) (width 0.2032) (layer Composant) (net 75))
+ (segment (start 257.81 89.535) (end 257.81 98.425) (width 0.2032) (layer Composant) (net 76) (status C00))
+ (via (at 295.783 69.4182) (size 0.889) (layers Composant Cuivre) (net 76))
+ (segment (start 175.641 104.013) (end 175.006 104.648) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 252.095 103.886) (end 251.587 104.394) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 295.148 69.4182) (end 295.148 69.215) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 257.81 68.834) (end 294.767 68.834) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 257.81 80.645) (end 257.81 71.755) (width 0.2032) (layer Composant) (net 76) (status C00))
+ (segment (start 248.793 104.013) (end 175.641 104.013) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 257.81 116.205) (end 257.81 125.095) (width 0.2032) (layer Composant) (net 76) (status C00))
+ (segment (start 257.81 89.535) (end 257.81 80.645) (width 0.2032) (layer Composant) (net 76) (status C00))
+ (segment (start 297.18 69.4182) (end 295.783 69.4182) (width 0.2032) (layer Composant) (net 76) (status 800))
+ (segment (start 257.81 102.616) (end 256.54 102.616) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 256.54 102.616) (end 255.27 103.886) (width 0.2032) (layer Cuivre) (net 76))
+ (via (at 257.81 68.834) (size 0.889) (layers Composant Cuivre) (net 76))
+ (segment (start 251.587 104.394) (end 249.174 104.394) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 173.609 104.648) (end 175.006 104.648) (width 0.2032) (layer Cuivre) (net 76) (status 800))
+ (segment (start 257.81 62.865) (end 257.81 68.834) (width 0.2032) (layer Composant) (net 76) (status 800))
+ (segment (start 257.81 116.205) (end 257.81 107.315) (width 0.2032) (layer Composant) (net 76) (status C00))
+ (via (at 257.81 102.616) (size 0.889) (layers Composant Cuivre) (net 76))
+ (segment (start 257.81 102.616) (end 257.81 98.425) (width 0.2032) (layer Composant) (net 76) (status 400))
+ (segment (start 295.148 69.215) (end 294.767 68.834) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 257.81 68.834) (end 257.81 71.755) (width 0.2032) (layer Composant) (net 76) (status 400))
+ (segment (start 255.27 103.886) (end 252.095 103.886) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 295.783 69.4182) (end 295.148 69.4182) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 257.81 107.315) (end 257.81 102.616) (width 0.2032) (layer Composant) (net 76) (status 800))
+ (segment (start 249.174 104.394) (end 248.793 104.013) (width 0.2032) (layer Cuivre) (net 76))
+ (segment (start 294.513 69.469) (end 258.826 69.469) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.27 116.205) (end 255.27 107.315) (width 0.2032) (layer Composant) (net 77) (status C00))
+ (segment (start 258.572 69.723) (end 255.651 69.723) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 295.275 69.977) (end 295.021 69.977) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.27 69.342) (end 255.27 68.707) (width 0.2032) (layer Composant) (net 77))
+ (segment (start 255.27 63.627) (end 255.27 62.865) (width 0.2032) (layer Composant) (net 77) (status 400))
+ (segment (start 258.826 69.469) (end 258.572 69.723) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 295.529 70.231) (end 295.275 69.977) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 249.047 103.505) (end 249.301 103.759) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.27 116.205) (end 255.27 125.095) (width 0.2032) (layer Composant) (net 77) (status C00))
+ (segment (start 255.27 98.425) (end 255.27 89.535) (width 0.2032) (layer Composant) (net 77) (status C00))
+ (segment (start 255.27 71.755) (end 255.27 69.342) (width 0.2032) (layer Composant) (net 77) (status 800))
+ (segment (start 296.545 69.9262) (end 296.2402 70.231) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 295.021 69.977) (end 294.513 69.469) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.27 68.707) (end 255.016 68.453) (width 0.2032) (layer Composant) (net 77))
+ (segment (start 255.27 102.489) (end 255.27 98.425) (width 0.2032) (layer Composant) (net 77) (status 400))
+ (segment (start 255.27 71.755) (end 255.27 80.645) (width 0.2032) (layer Composant) (net 77) (status C00))
+ (segment (start 255.27 89.535) (end 255.27 80.645) (width 0.2032) (layer Composant) (net 77) (status C00))
+ (segment (start 173.609 103.378) (end 175.514 103.378) (width 0.2032) (layer Cuivre) (net 77) (status 800))
+ (segment (start 255.27 102.616) (end 255.27 102.489) (width 0.2032) (layer Composant) (net 77))
+ (segment (start 298.323 69.9262) (end 296.545 69.9262) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 175.641 103.505) (end 249.047 103.505) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 296.2402 70.231) (end 295.529 70.231) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.27 69.342) (end 255.651 69.723) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.016 63.881) (end 255.27 63.627) (width 0.2032) (layer Composant) (net 77))
+ (segment (start 249.301 103.759) (end 251.206 103.759) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 254.508 102.616) (end 255.27 102.616) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 253.746 103.378) (end 254.508 102.616) (width 0.2032) (layer Cuivre) (net 77))
+ (via (at 255.27 102.616) (size 0.889) (layers Composant Cuivre) (net 77))
+ (segment (start 251.206 103.759) (end 251.587 103.378) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 251.587 103.378) (end 253.746 103.378) (width 0.2032) (layer Cuivre) (net 77))
+ (segment (start 255.016 68.453) (end 255.016 63.881) (width 0.2032) (layer Composant) (net 77))
+ (via (at 255.27 69.342) (size 0.889) (layers Composant Cuivre) (net 77))
+ (segment (start 297.18 69.9262) (end 298.323 69.9262) (width 0.2032) (layer Composant) (net 77) (status 800))
+ (segment (start 255.27 107.315) (end 255.27 102.489) (width 0.2032) (layer Composant) (net 77) (status 800))
+ (segment (start 175.514 103.378) (end 175.641 103.505) (width 0.2032) (layer Cuivre) (net 77))
+ (via (at 298.323 69.9262) (size 0.889) (layers Composant Cuivre) (net 77))
+ (segment (start 294.8432 70.739) (end 294.2082 70.104) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 249.809 103.251) (end 249.555 102.997) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 294.2082 70.104) (end 259.08 70.104) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 249.555 102.997) (end 176.276 102.997) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 253.492 70.231) (end 252.73 69.469) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 252.73 98.425) (end 252.73 102.616) (width 0.2032) (layer Composant) (net 78) (status 800))
+ (segment (start 252.73 89.535) (end 252.73 80.645) (width 0.2032) (layer Composant) (net 78) (status C00))
+ (segment (start 250.825 103.251) (end 251.46 102.616) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 259.08 70.104) (end 258.953 70.231) (width 0.2032) (layer Cuivre) (net 78))
+ (via (at 252.73 69.469) (size 0.889) (layers Composant Cuivre) (net 78))
+ (segment (start 252.73 116.205) (end 252.73 125.095) (width 0.2032) (layer Composant) (net 78) (status C00))
+ (segment (start 175.387 102.108) (end 176.276 102.997) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 249.809 103.251) (end 250.825 103.251) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 252.73 98.425) (end 252.73 89.535) (width 0.2032) (layer Composant) (net 78) (status C00))
+ (segment (start 251.46 102.616) (end 252.73 102.616) (width 0.2032) (layer Cuivre) (net 78))
+ (via (at 252.73 102.616) (size 0.889) (layers Composant Cuivre) (net 78))
+ (segment (start 252.73 102.616) (end 252.73 107.315) (width 0.2032) (layer Composant) (net 78) (status 400))
+ (segment (start 258.953 70.231) (end 253.492 70.231) (width 0.2032) (layer Cuivre) (net 78))
+ (segment (start 295.021 70.9168) (end 294.8432 70.739) (width 0.2032) (layer Composant) (net 78))
+ (segment (start 252.73 71.755) (end 252.73 69.469) (width 0.2032) (layer Composant) (net 78) (status 800))
+ (segment (start 252.73 69.469) (end 252.73 62.865) (width 0.2032) (layer Composant) (net 78) (status 400))
+ (segment (start 173.609 102.108) (end 175.387 102.108) (width 0.2032) (layer Cuivre) (net 78) (status 800))
+ (segment (start 252.73 107.315) (end 252.73 116.205) (width 0.2032) (layer Composant) (net 78) (status C00))
+ (segment (start 297.18 70.9168) (end 295.021 70.9168) (width 0.2032) (layer Composant) (net 78) (status 800))
+ (segment (start 252.73 71.755) (end 252.73 80.645) (width 0.2032) (layer Composant) (net 78) (status C00))
+ (via (at 294.8432 70.739) (size 0.889) (layers Composant Cuivre) (net 78))
+ (via (at 250.19 102.489) (size 0.889) (layers Composant Cuivre) (net 79))
+ (segment (start 287.401 70.739) (end 250.444 70.739) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 175.387 100.838) (end 177.038 102.489) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 295.656 71.12) (end 298.45 71.12) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 250.19 62.865) (end 250.19 71.755) (width 0.2032) (layer Composant) (net 79) (status C00))
+ (segment (start 297.18 71.4248) (end 298.45 71.4248) (width 0.2032) (layer Composant) (net 79) (status 800))
+ (segment (start 250.19 89.535) (end 250.19 80.645) (width 0.2032) (layer Composant) (net 79) (status C00))
+ (segment (start 294.005 71.501) (end 293.116 70.612) (width 0.2032) (layer Cuivre) (net 79))
+ (via (at 298.45 71.4248) (size 0.889) (layers Composant Cuivre) (net 79))
+ (segment (start 250.19 116.205) (end 250.19 125.095) (width 0.2032) (layer Composant) (net 79) (status C00))
+ (segment (start 250.19 80.645) (end 250.19 71.755) (width 0.2032) (layer Composant) (net 79) (status C00))
+ (segment (start 250.19 70.993) (end 250.19 71.755) (width 0.2032) (layer Cuivre) (net 79) (status 400))
+ (segment (start 250.19 102.489) (end 250.19 98.425) (width 0.2032) (layer Composant) (net 79) (status 400))
+ (segment (start 287.528 70.612) (end 287.401 70.739) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 250.19 116.205) (end 250.19 107.315) (width 0.2032) (layer Composant) (net 79) (status C00))
+ (segment (start 250.19 102.489) (end 250.19 107.315) (width 0.2032) (layer Composant) (net 79) (status 400))
+ (segment (start 295.275 71.501) (end 294.005 71.501) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 295.275 71.501) (end 295.656 71.12) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 250.19 98.425) (end 250.19 89.535) (width 0.2032) (layer Composant) (net 79) (status C00))
+ (segment (start 250.444 70.739) (end 250.19 70.993) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 293.116 70.612) (end 287.528 70.612) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 177.038 102.489) (end 250.19 102.489) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 298.45 71.4248) (end 298.45 71.12) (width 0.2032) (layer Cuivre) (net 79))
+ (segment (start 173.609 100.838) (end 175.387 100.838) (width 0.2032) (layer Cuivre) (net 79) (status 800))
+ (segment (start 286.639 72.771) (end 236.982 72.771) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 233.045 71.12) (end 231.394 72.771) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 215.9 109.855) (end 215.9 100.965) (width 0.2032) (layer Composant) (net 80) (status C00))
+ (segment (start 291.592 71.1708) (end 291.5412 71.12) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 231.394 72.771) (end 216.408 72.771) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 216.408 72.771) (end 215.9 72.263) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 215.9 100.965) (end 215.9 92.075) (width 0.2032) (layer Composant) (net 80) (status C00))
+ (segment (start 215.9 83.185) (end 215.9 74.295) (width 0.2032) (layer Composant) (net 80) (status C00))
+ (segment (start 176.149 93.98) (end 215.646 93.98) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 215.9 92.075) (end 215.9 83.185) (width 0.2032) (layer Composant) (net 80) (status C00))
+ (segment (start 215.9 74.295) (end 215.9 72.263) (width 0.2032) (layer Composant) (net 80) (status 800))
+ (segment (start 215.9 72.263) (end 215.9 65.405) (width 0.2032) (layer Composant) (net 80) (status 400))
+ (segment (start 175.387 94.742) (end 176.149 93.98) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 292.354 71.9328) (end 291.592 71.1708) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 173.609 94.742) (end 175.387 94.742) (width 0.2032) (layer Cuivre) (net 80) (status 800))
+ (segment (start 215.646 93.98) (end 215.9 93.726) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 215.9 118.745) (end 215.9 127.635) (width 0.2032) (layer Composant) (net 80) (status C00))
+ (via (at 215.9 72.263) (size 0.889) (layers Composant Cuivre) (net 80))
+ (segment (start 215.9 93.726) (end 215.9 92.075) (width 0.2032) (layer Cuivre) (net 80) (status 400))
+ (segment (start 291.5412 71.12) (end 288.29 71.12) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 215.9 118.745) (end 215.9 109.855) (width 0.2032) (layer Composant) (net 80) (status C00))
+ (segment (start 233.045 71.12) (end 235.331 71.12) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 236.982 72.771) (end 235.331 71.12) (width 0.2032) (layer Cuivre) (net 80))
+ (via (at 295.91 71.9328) (size 0.889) (layers Composant Cuivre) (net 80))
+ (segment (start 297.18 71.9328) (end 295.91 71.9328) (width 0.2032) (layer Composant) (net 80) (status 800))
+ (segment (start 293.5732 71.9328) (end 292.354 71.9328) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 295.91 71.9328) (end 293.5732 71.9328) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 288.29 71.12) (end 286.639 72.771) (width 0.2032) (layer Cuivre) (net 80))
+ (segment (start 296.545 72.4154) (end 296.545 72.517) (width 0.2032) (layer Composant) (net 81))
+ (segment (start 213.36 73.533) (end 213.36 74.295) (width 0.2032) (layer Cuivre) (net 81) (status 400))
+ (segment (start 288.036 73.406) (end 287.909 73.279) (width 0.2032) (layer Cuivre) (net 81))
+ (via (at 294.767 72.771) (size 0.889) (layers Composant Cuivre) (net 81))
+ (segment (start 213.36 83.185) (end 213.36 92.075) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 213.106 93.472) (end 213.36 93.218) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 296.164 72.771) (end 294.767 72.771) (width 0.2032) (layer Composant) (net 81))
+ (segment (start 297.18 72.4154) (end 296.545 72.4154) (width 0.2032) (layer Composant) (net 81) (status 800))
+ (segment (start 292.1 73.025) (end 292.1 73.787) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 296.545 72.517) (end 296.418 72.517) (width 0.2032) (layer Composant) (net 81))
+ (segment (start 296.418 72.517) (end 296.164 72.771) (width 0.2032) (layer Composant) (net 81))
+ (segment (start 236.728 73.279) (end 236.474 73.533) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 236.474 74.676) (end 236.22 74.93) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 173.609 93.472) (end 213.106 93.472) (width 0.2032) (layer Cuivre) (net 81) (status 800))
+ (segment (start 213.36 127.635) (end 213.36 118.745) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 213.36 109.855) (end 213.36 100.965) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 213.36 118.745) (end 213.36 109.855) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 213.36 93.218) (end 213.36 92.075) (width 0.2032) (layer Cuivre) (net 81) (status 400))
+ (segment (start 232.664 74.93) (end 232.41 74.676) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 213.36 92.075) (end 213.36 100.965) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 236.474 73.533) (end 236.474 74.676) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 287.909 73.279) (end 236.728 73.279) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 294.767 72.771) (end 292.354 72.771) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 213.614 73.279) (end 213.36 73.533) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 290.957 74.93) (end 288.29 74.93) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 290.957 74.93) (end 292.1 73.787) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 288.036 74.676) (end 288.036 73.406) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 213.36 74.295) (end 213.36 83.185) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 236.22 74.93) (end 232.664 74.93) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 232.41 74.676) (end 232.41 73.279) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 232.41 73.279) (end 213.614 73.279) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 292.354 72.771) (end 292.1 73.025) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 213.36 74.295) (end 213.36 65.405) (width 0.2032) (layer Composant) (net 81) (status C00))
+ (segment (start 288.29 74.93) (end 288.036 74.676) (width 0.2032) (layer Cuivre) (net 81))
+ (segment (start 167.259 87.376) (end 168.275 88.392) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 217.424 87.63) (end 217.678 87.376) (width 0.2032) (layer Cuivre) (net 82))
+ (via (at 177.546 88.138) (size 0.889) (layers Composant Cuivre) (net 82))
+ (segment (start 177.546 88.138) (end 178.054 87.63) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 203.327 86.995) (end 204.978 86.995) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 157.1752 86.5378) (end 159.385 86.5378) (width 0.2032) (layer Composant) (net 82) (status 800))
+ (segment (start 159.385 86.5378) (end 159.385 86.36) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 163.83 87.376) (end 167.259 87.376) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 159.385 86.36) (end 162.814 86.36) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 162.814 86.36) (end 163.83 87.376) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 218.44 92.075) (end 218.44 87.376) (width 0.2032) (layer Composant) (net 82) (status 800))
+ (segment (start 218.44 109.855) (end 218.44 100.965) (width 0.2032) (layer Composant) (net 82) (status C00))
+ (via (at 218.44 87.376) (size 0.889) (layers Composant Cuivre) (net 82))
+ (segment (start 218.44 87.376) (end 218.44 83.185) (width 0.2032) (layer Composant) (net 82) (status 400))
+ (segment (start 204.978 86.995) (end 205.613 87.63) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 168.275 88.392) (end 177.292 88.392) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 217.678 87.376) (end 218.44 87.376) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 178.054 87.63) (end 202.692 87.63) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 205.613 87.63) (end 217.424 87.63) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 218.44 100.965) (end 218.44 92.075) (width 0.2032) (layer Composant) (net 82) (status C00))
+ (segment (start 177.292 88.392) (end 177.546 88.138) (width 0.2032) (layer Composant) (net 82))
+ (segment (start 218.44 109.855) (end 218.44 118.745) (width 0.2032) (layer Composant) (net 82) (status C00))
+ (segment (start 218.44 118.745) (end 218.44 127.635) (width 0.2032) (layer Composant) (net 82) (status C00))
+ (segment (start 218.44 83.185) (end 218.44 74.295) (width 0.2032) (layer Composant) (net 82) (status C00))
+ (segment (start 218.44 74.295) (end 218.44 65.405) (width 0.2032) (layer Composant) (net 82) (status C00))
+ (segment (start 202.692 87.63) (end 203.327 86.995) (width 0.2032) (layer Cuivre) (net 82))
+ (segment (start 124.46 120.777) (end 124.46 123.19) (width 0.2032) (layer Cuivre) (net 83))
+ (segment (start 123.19 123.825) (end 123.825 123.825) (width 0.2032) (layer Cuivre) (net 83))
+ (segment (start 119.888 87.757) (end 121.539 89.408) (width 0.2032) (layer Composant) (net 83))
+ (segment (start 122.428 89.789) (end 125.984 89.789) (width 0.2032) (layer Composant) (net 83) (status 400))
+ (segment (start 122.428 89.408) (end 122.428 89.789) (width 0.2032) (layer Composant) (net 83))
+ (segment (start 115.951 87.8332) (end 115.951 87.757) (width 0.2032) (layer Composant) (net 83))
+ (via (at 117.856 117.856) (size 0.889) (layers Composant Cuivre) (net 83))
+ (segment (start 123.19 123.9266) (end 123.19 123.825) (width 0.2032) (layer Composant) (net 83))
+ (segment (start 115.951 87.757) (end 117.856 87.757) (width 0.2032) (layer Composant) (net 83))
+ (via (at 117.856 87.757) (size 0.889) (layers Composant Cuivre) (net 83))
+ (segment (start 117.856 87.757) (end 119.888 87.757) (width 0.2032) (layer Composant) (net 83))
+ (segment (start 125.984 123.9266) (end 123.19 123.9266) (width 0.2032) (layer Composant) (net 83) (status 800))
+ (segment (start 121.539 117.856) (end 117.856 117.856) (width 0.2032) (layer Cuivre) (net 83))
+ (segment (start 121.539 89.408) (end 122.428 89.408) (width 0.2032) (layer Composant) (net 83))
+ (segment (start 117.856 91.313) (end 117.856 87.757) (width 0.2032) (layer Cuivre) (net 83))
+ (via (at 123.19 123.825) (size 0.889) (layers Composant Cuivre) (net 83))
+ (segment (start 117.856 117.856) (end 117.856 91.313) (width 0.2032) (layer Composant) (net 83))
+ (segment (start 123.825 123.825) (end 124.46 123.19) (width 0.2032) (layer Cuivre) (net 83))
+ (segment (start 124.46 120.777) (end 121.539 117.856) (width 0.2032) (layer Cuivre) (net 83))
+ (segment (start 114.554 87.8332) (end 115.951 87.8332) (width 0.2032) (layer Composant) (net 83) (status 800))
+ (via (at 117.856 91.313) (size 0.889) (layers Composant Cuivre) (net 83))
+ (segment (start 115.443 100.203) (end 115.443 105.918) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 115.316 109.855) (end 115.824 109.347) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 112.9284 97.6884) (end 112.9284 94.869) (width 0.2032) (layer Composant) (net 84) (status 400))
+ (segment (start 115.824 106.299) (end 115.824 109.347) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 107.061 112.014) (end 107.061 126.9492) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 109.22 109.855) (end 115.316 109.855) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 115.824 106.299) (end 115.443 105.918) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 109.22 129.1082) (end 107.061 126.9492) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 115.443 100.203) (end 112.9284 97.6884) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 109.22 109.855) (end 107.061 112.014) (width 0.2032) (layer Composant) (net 84))
+ (segment (start 125.984 129.1082) (end 109.22 129.1082) (width 0.2032) (layer Composant) (net 84) (status 800))
+ (segment (start 174.752 136.652) (end 175.895 137.795) (width 0.2032) (layer Composant) (net 85) (status 400))
+ (segment (start 164.592 135.763) (end 164.592 135.001) (width 0.2032) (layer Composant) (net 85))
+ (segment (start 160.782 131.191) (end 160.782 130.15722) (width 0.2032) (layer Composant) (net 85))
+ (segment (start 164.592 135.001) (end 160.782 131.191) (width 0.2032) (layer Composant) (net 85))
+ (segment (start 157.1752 129.1082) (end 159.766 129.1082) (width 0.2032) (layer Composant) (net 85) (status 800))
+ (segment (start 165.481 136.652) (end 164.592 135.763) (width 0.2032) (layer Composant) (net 85))
+ (segment (start 160.782 130.15722) (end 159.766 129.1082) (width 0.2032) (layer Composant) (net 85))
+ (segment (start 165.481 136.652) (end 174.752 136.652) (width 0.2032) (layer Composant) (net 85))
+ (segment (start 122.301 127) (end 105.41 127) (width 0.2032) (layer Cuivre) (net 86) (status 400))
+ (segment (start 125.984 116.7638) (end 128.905 116.7638) (width 0.2032) (layer Composant) (net 86) (status 800))
+ (segment (start 128.905 116.84) (end 125.73 120.015) (width 0.2032) (layer Cuivre) (net 86))
+ (via (at 128.905 116.84) (size 0.889) (layers Composant Cuivre) (net 86))
+ (segment (start 128.905 116.7638) (end 128.905 116.84) (width 0.2032) (layer Composant) (net 86))
+ (segment (start 125.73 120.015) (end 125.73 123.571) (width 0.2032) (layer Cuivre) (net 86))
+ (segment (start 122.301 127) (end 125.73 123.571) (width 0.2032) (layer Cuivre) (net 86))
+ (segment (start 128.905 121.92) (end 122.047 128.778) (width 0.2032) (layer Cuivre) (net 87))
+ (segment (start 125.984 121.9708) (end 128.905 121.9708) (width 0.2032) (layer Composant) (net 87) (status 800))
+ (segment (start 122.047 128.778) (end 102.108 128.778) (width 0.2032) (layer Cuivre) (net 87))
+ (segment (start 102.108 128.778) (end 100.33 127) (width 0.2032) (layer Cuivre) (net 87) (status 400))
+ (segment (start 128.905 121.9708) (end 128.905 121.92) (width 0.2032) (layer Composant) (net 87))
+ (via (at 128.905 121.92) (size 0.889) (layers Composant Cuivre) (net 87))
+ (via (at 128.905 126.365) (size 0.889) (layers Composant Cuivre) (net 88))
+ (segment (start 125.984 127.1778) (end 128.5875 127.1778) (width 0.2032) (layer Composant) (net 88) (status 800))
+ (segment (start 98.044 129.794) (end 122.555 129.794) (width 0.2032) (layer Cuivre) (net 88))
+ (segment (start 95.25 127) (end 98.044 129.794) (width 0.2032) (layer Cuivre) (net 88) (status 800))
+ (segment (start 128.5875 127.1778) (end 128.905 126.8603) (width 0.2032) (layer Composant) (net 88))
+ (segment (start 128.905 126.8603) (end 128.905 126.365) (width 0.2032) (layer Composant) (net 88))
+ (segment (start 122.555 129.794) (end 125.984 126.365) (width 0.2032) (layer Cuivre) (net 88))
+ (segment (start 128.905 126.365) (end 125.984 126.365) (width 0.2032) (layer Cuivre) (net 88))
+ (segment (start 92.71 127) (end 95.4786 129.7686) (width 0.2032) (layer Composant) (net 89) (status 800))
+ (segment (start 125.984 129.7686) (end 95.4786 129.7686) (width 0.2032) (layer Composant) (net 89) (status 800))
+ (segment (start 125.984 134.9756) (end 129.2606 134.9756) (width 0.2032) (layer Composant) (net 90) (status 800))
+ (segment (start 130.175 135.89) (end 130.175 139.065) (width 0.2032) (layer Composant) (net 90))
+ (segment (start 130.175 139.065) (end 129.286 139.954) (width 0.2032) (layer Cuivre) (net 90))
+ (segment (start 129.286 139.954) (end 127.254 139.954) (width 0.2032) (layer Cuivre) (net 90))
+ (segment (start 126.365 140.843) (end 127.254 139.954) (width 0.2032) (layer Cuivre) (net 90))
+ (segment (start 104.902 140.843) (end 102.87 142.875) (width 0.2032) (layer Cuivre) (net 90) (status 400))
+ (via (at 130.175 139.065) (size 0.889) (layers Composant Cuivre) (net 90))
+ (segment (start 130.175 135.89) (end 129.2606 134.9756) (width 0.2032) (layer Composant) (net 90))
+ (segment (start 126.365 140.843) (end 104.902 140.843) (width 0.2032) (layer Cuivre) (net 90))
+ (via (at 128.905 137.795) (size 0.889) (layers Composant Cuivre) (net 91))
+ (segment (start 100.838 139.827) (end 125.603 139.827) (width 0.2032) (layer Cuivre) (net 91))
+ (segment (start 128.905 137.5664) (end 128.905 137.795) (width 0.2032) (layer Composant) (net 91))
+ (segment (start 125.603 139.827) (end 127.635 137.795) (width 0.2032) (layer Cuivre) (net 91))
+ (segment (start 125.984 137.5664) (end 128.905 137.5664) (width 0.2032) (layer Composant) (net 91) (status 800))
+ (segment (start 128.905 137.795) (end 127.635 137.795) (width 0.2032) (layer Cuivre) (net 91))
+ (segment (start 97.79 142.875) (end 100.838 139.827) (width 0.2032) (layer Cuivre) (net 91) (status 800))
+ (segment (start 161.925 129.286) (end 160.02 127.381) (width 0.2032) (layer Composant) (net 92))
+ (segment (start 160.02 127.381) (end 160.02 124.5616) (width 0.2032) (layer Composant) (net 92))
+ (segment (start 170.815 134.747) (end 169.037 132.969) (width 0.2032) (layer Composant) (net 92) (status 800))
+ (segment (start 159.385 123.9266) (end 160.02 124.5616) (width 0.2032) (layer Composant) (net 92))
+ (segment (start 169.037 132.969) (end 164.211 132.969) (width 0.2032) (layer Composant) (net 92))
+ (segment (start 157.1752 123.9266) (end 159.385 123.9266) (width 0.2032) (layer Composant) (net 92) (status 800))
+ (segment (start 164.211 132.969) (end 161.925 130.683) (width 0.2032) (layer Composant) (net 92))
+ (segment (start 161.925 130.683) (end 161.925 129.286) (width 0.2032) (layer Composant) (net 92))
+ (segment (start 162.941 128.778) (end 161.163 127) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 162.941 130.175) (end 162.941 128.778) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 161.29 123.825) (end 161.29 122.428) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 173.101 131.953) (end 164.719 131.953) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 161.163 123.952) (end 161.29 123.825) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 161.163 127) (end 161.163 123.952) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 164.719 131.953) (end 162.941 130.175) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 161.29 122.428) (end 160.147 121.3104) (width 0.2032) (layer Composant) (net 93))
+ (segment (start 157.1752 121.3104) (end 160.147 121.3104) (width 0.2032) (layer Composant) (net 93) (status 800))
+ (segment (start 175.895 134.747) (end 173.101 131.953) (width 0.2032) (layer Composant) (net 93) (status 800))
+ (segment (start 156.21 114.3) (end 159.131 114.3) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 162.814 128.143) (end 163.703 129.032) (width 0.2032) (layer Cuivre) (net 94))
+ (via (at 156.21 114.3) (size 0.889) (layers Composant Cuivre) (net 94))
+ (segment (start 186.055 134.747) (end 182.88 131.445) (width 0.2032) (layer Cuivre) (net 94) (status 800))
+ (segment (start 182.88 131.445) (end 172.847 131.445) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 154.2542 114.3) (end 156.21 114.3) (width 0.2032) (layer Composant) (net 94))
+ (segment (start 163.703 129.032) (end 170.434 129.032) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 162.814 121.412) (end 162.814 128.143) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 162.814 121.412) (end 162.179 120.777) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 162.179 120.777) (end 162.179 117.348) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 154.2542 113.8428) (end 154.2542 114.3) (width 0.2032) (layer Composant) (net 94) (status 800))
+ (segment (start 172.847 131.445) (end 170.434 129.032) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 162.179 117.348) (end 159.131 114.3) (width 0.2032) (layer Cuivre) (net 94))
+ (segment (start 145.415 118.364) (end 146.685 117.094) (width 0.2032) (layer Composant) (net 95))
+ (segment (start 145.415 118.364) (end 145.415 120.015) (width 0.2032) (layer Composant) (net 95))
+ (segment (start 128.651 134.112) (end 137.795 134.112) (width 0.2032) (layer Cuivre) (net 95))
+ (segment (start 146.685 117.094) (end 149.0472 117.094) (width 0.2032) (layer Composant) (net 95))
+ (via (at 145.415 120.015) (size 0.889) (layers Composant Cuivre) (net 95))
+ (segment (start 92.71 142.875) (end 96.774 138.811) (width 0.2032) (layer Cuivre) (net 95) (status 800))
+ (segment (start 145.415 125.984) (end 145.669 126.238) (width 0.2032) (layer Composant) (net 95))
+ (segment (start 149.0472 113.8428) (end 149.0472 117.094) (width 0.2032) (layer Composant) (net 95) (status 800))
+ (segment (start 128.651 134.112) (end 123.952 138.811) (width 0.2032) (layer Cuivre) (net 95))
+ (via (at 145.669 126.238) (size 0.889) (layers Composant Cuivre) (net 95))
+ (segment (start 145.415 120.015) (end 145.415 125.984) (width 0.2032) (layer Composant) (net 95))
+ (segment (start 145.669 126.238) (end 137.795 134.112) (width 0.2032) (layer Cuivre) (net 95))
+ (segment (start 96.774 138.811) (end 123.952 138.811) (width 0.2032) (layer Cuivre) (net 95))
+ (segment (start 142.875 118.4402) (end 142.875 120.015) (width 0.2032) (layer Composant) (net 96))
+ (segment (start 128.143 133.096) (end 123.444 137.795) (width 0.2032) (layer Cuivre) (net 96))
+ (segment (start 142.875 125.984) (end 143.129 126.238) (width 0.2032) (layer Composant) (net 96))
+ (segment (start 142.875 120.015) (end 142.875 125.984) (width 0.2032) (layer Composant) (net 96))
+ (segment (start 87.63 142.875) (end 92.71 137.795) (width 0.2032) (layer Cuivre) (net 96) (status 800))
+ (segment (start 123.444 137.795) (end 92.71 137.795) (width 0.2032) (layer Cuivre) (net 96))
+ (via (at 143.129 126.238) (size 0.889) (layers Composant Cuivre) (net 96))
+ (segment (start 136.271 133.096) (end 143.129 126.238) (width 0.2032) (layer Cuivre) (net 96))
+ (via (at 142.875 120.015) (size 0.889) (layers Composant Cuivre) (net 96))
+ (segment (start 143.8402 113.8428) (end 143.8402 117.475) (width 0.2032) (layer Composant) (net 96) (status 800))
+ (segment (start 143.8402 117.475) (end 142.875 118.4402) (width 0.2032) (layer Composant) (net 96))
+ (segment (start 128.143 133.096) (end 136.271 133.096) (width 0.2032) (layer Cuivre) (net 96))
+ (segment (start 141.605 120.015) (end 141.2494 119.6594) (width 0.2032) (layer Composant) (net 97))
+ (segment (start 124.968 135.001) (end 127.381 132.588) (width 0.2032) (layer Cuivre) (net 97))
+ (segment (start 105.41 135.89) (end 109.22 135.89) (width 0.2032) (layer Cuivre) (net 97) (status 800))
+ (segment (start 141.859 126.238) (end 141.859 126.619) (width 0.2032) (layer Cuivre) (net 97))
+ (segment (start 124.968 135.001) (end 110.109 135.001) (width 0.2032) (layer Cuivre) (net 97))
+ (via (at 141.859 126.238) (size 0.889) (layers Composant Cuivre) (net 97))
+ (segment (start 141.2494 113.8428) (end 141.2494 119.6594) (width 0.2032) (layer Composant) (net 97) (status 800))
+ (segment (start 141.605 120.015) (end 141.605 125.984) (width 0.2032) (layer Composant) (net 97))
+ (via (at 141.605 120.015) (size 0.889) (layers Composant Cuivre) (net 97))
+ (segment (start 135.89 132.588) (end 127.381 132.588) (width 0.2032) (layer Cuivre) (net 97))
+ (segment (start 109.22 135.89) (end 110.109 135.001) (width 0.2032) (layer Cuivre) (net 97))
+ (segment (start 141.605 125.984) (end 141.859 126.238) (width 0.2032) (layer Composant) (net 97))
+ (segment (start 135.89 132.588) (end 141.859 126.619) (width 0.2032) (layer Cuivre) (net 97))
+ (segment (start 133.985 123.825) (end 133.4516 123.2916) (width 0.2032) (layer Composant) (net 98))
+ (segment (start 133.985 123.825) (end 133.985 126.365) (width 0.2032) (layer Composant) (net 98))
+ (segment (start 133.985 127.635) (end 132.08 129.54) (width 0.2032) (layer Cuivre) (net 98))
+ (segment (start 90.17 132.715) (end 90.932 131.953) (width 0.2032) (layer Cuivre) (net 98))
+ (segment (start 90.17 132.715) (end 90.17 135.89) (width 0.2032) (layer Cuivre) (net 98) (status 400))
+ (segment (start 125.857 129.54) (end 123.444 131.953) (width 0.2032) (layer Cuivre) (net 98))
+ (segment (start 132.08 129.54) (end 125.857 129.54) (width 0.2032) (layer Cuivre) (net 98))
+ (via (at 133.985 126.365) (size 0.889) (layers Composant Cuivre) (net 98))
+ (segment (start 133.985 126.365) (end 133.985 127.635) (width 0.2032) (layer Cuivre) (net 98))
+ (segment (start 133.4516 113.8428) (end 133.4516 123.2916) (width 0.2032) (layer Composant) (net 98) (status 800))
+ (segment (start 90.932 131.953) (end 123.444 131.953) (width 0.2032) (layer Cuivre) (net 98))
+ (segment (start 181.864 146.812) (end 166.37 146.812) (width 0.2032) (layer Cuivre) (net 99))
+ (segment (start 186.055 142.621) (end 181.864 146.812) (width 0.2032) (layer Cuivre) (net 99) (status 800))
+ (via (at 128.524 146.812) (size 0.889) (layers Composant Cuivre) (net 99))
+ (segment (start 128.905 145.034) (end 128.905 146.431) (width 0.2032) (layer Composant) (net 99) (status 800))
+ (segment (start 157.226 146.812) (end 128.524 146.812) (width 0.2032) (layer Cuivre) (net 99))
+ (segment (start 157.607 146.431) (end 157.226 146.812) (width 0.2032) (layer Cuivre) (net 99))
+ (segment (start 165.989 146.431) (end 157.607 146.431) (width 0.2032) (layer Cuivre) (net 99))
+ (segment (start 166.37 146.812) (end 165.989 146.431) (width 0.2032) (layer Cuivre) (net 99))
+ (segment (start 128.905 146.431) (end 128.524 146.812) (width 0.2032) (layer Composant) (net 99))
+ (via (at 133.985 142.24) (size 0.889) (layers Composant Cuivre) (net 100))
+ (segment (start 157.226 145.415) (end 156.972 145.669) (width 0.2032) (layer Cuivre) (net 100))
+ (segment (start 180.975 142.621) (end 177.8 145.796) (width 0.2032) (layer Cuivre) (net 100) (status 800))
+ (segment (start 166.37 145.415) (end 157.226 145.415) (width 0.2032) (layer Cuivre) (net 100))
+ (segment (start 134.0866 142.24) (end 133.985 142.24) (width 0.2032) (layer Composant) (net 100))
+ (segment (start 156.972 145.669) (end 137.414 145.669) (width 0.2032) (layer Cuivre) (net 100))
+ (segment (start 166.751 145.796) (end 166.37 145.415) (width 0.2032) (layer Cuivre) (net 100))
+ (segment (start 177.8 145.796) (end 166.751 145.796) (width 0.2032) (layer Cuivre) (net 100))
+ (segment (start 133.985 142.24) (end 137.414 145.669) (width 0.2032) (layer Cuivre) (net 100))
+ (segment (start 134.0866 145.034) (end 134.0866 142.24) (width 0.2032) (layer Composant) (net 100) (status 800))
+ (segment (start 175.895 142.621) (end 173.736 144.78) (width 0.2032) (layer Cuivre) (net 101) (status 800))
+ (segment (start 166.751 144.399) (end 156.845 144.399) (width 0.2032) (layer Cuivre) (net 101))
+ (segment (start 156.845 144.399) (end 156.591 144.653) (width 0.2032) (layer Cuivre) (net 101))
+ (segment (start 167.132 144.78) (end 166.751 144.399) (width 0.2032) (layer Cuivre) (net 101))
+ (segment (start 139.2936 142.24) (end 139.065 142.24) (width 0.2032) (layer Composant) (net 101))
+ (segment (start 139.2936 145.034) (end 139.2936 142.24) (width 0.2032) (layer Composant) (net 101) (status 800))
+ (segment (start 156.591 144.653) (end 141.478 144.653) (width 0.2032) (layer Cuivre) (net 101))
+ (via (at 139.065 142.24) (size 0.889) (layers Composant Cuivre) (net 101))
+ (segment (start 139.065 142.24) (end 141.478 144.653) (width 0.2032) (layer Cuivre) (net 101))
+ (segment (start 173.736 144.78) (end 167.132 144.78) (width 0.2032) (layer Cuivre) (net 101))
+ (segment (start 167.005 143.891) (end 167.386 144.272) (width 0.2032) (layer Cuivre) (net 102))
+ (segment (start 141.9098 142.24) (end 142.24 142.24) (width 0.2032) (layer Composant) (net 102))
+ (segment (start 144.145 144.145) (end 156.337 144.145) (width 0.2032) (layer Cuivre) (net 102))
+ (segment (start 156.591 143.891) (end 167.005 143.891) (width 0.2032) (layer Cuivre) (net 102))
+ (segment (start 167.386 144.272) (end 171.704 144.272) (width 0.2032) (layer Cuivre) (net 102))
+ (segment (start 142.24 142.24) (end 144.145 144.145) (width 0.2032) (layer Cuivre) (net 102))
+ (segment (start 156.337 144.145) (end 156.591 143.891) (width 0.2032) (layer Cuivre) (net 102))
+ (segment (start 173.355 142.621) (end 171.704 144.272) (width 0.2032) (layer Cuivre) (net 102) (status 800))
+ (segment (start 141.9098 145.034) (end 141.9098 142.24) (width 0.2032) (layer Composant) (net 102) (status 800))
+ (via (at 142.24 142.24) (size 0.889) (layers Composant Cuivre) (net 102))
+ (via (at 147.066 142.494) (size 0.889) (layers Composant Cuivre) (net 103))
+ (segment (start 156.083 142.875) (end 167.132 142.875) (width 0.2032) (layer Cuivre) (net 103))
+ (segment (start 155.829 143.129) (end 156.083 142.875) (width 0.2032) (layer Cuivre) (net 103))
+ (segment (start 147.066 145.034) (end 147.0914 145.034) (width 0.2032) (layer Composant) (net 103) (status 400))
+ (segment (start 147.701 143.129) (end 147.066 142.494) (width 0.2032) (layer Cuivre) (net 103))
+ (segment (start 167.386 142.621) (end 168.275 142.621) (width 0.2032) (layer Cuivre) (net 103) (status 400))
+ (segment (start 147.066 142.494) (end 147.066 145.034) (width 0.2032) (layer Composant) (net 103))
+ (segment (start 147.701 143.129) (end 155.829 143.129) (width 0.2032) (layer Cuivre) (net 103))
+ (segment (start 167.132 142.875) (end 167.386 142.621) (width 0.2032) (layer Cuivre) (net 103))
+ (segment (start 150.622 141.605) (end 150.622 139.954) (width 0.2032) (layer Cuivre) (net 104))
+ (segment (start 167.767 139.7) (end 167.132 140.335) (width 0.2032) (layer Cuivre) (net 104))
+ (segment (start 153.035 139.954) (end 153.416 140.335) (width 0.2032) (layer Cuivre) (net 104))
+ (segment (start 149.7076 145.034) (end 149.7076 142.24) (width 0.2032) (layer Composant) (net 104) (status 800))
+ (segment (start 150.622 139.954) (end 153.035 139.954) (width 0.2032) (layer Cuivre) (net 104))
+ (via (at 150.622 141.605) (size 0.889) (layers Composant Cuivre) (net 104))
+ (segment (start 179.07 139.7) (end 167.767 139.7) (width 0.2032) (layer Cuivre) (net 104))
+ (segment (start 180.975 137.795) (end 179.07 139.7) (width 0.2032) (layer Cuivre) (net 104) (status 800))
+ (segment (start 153.416 140.335) (end 167.132 140.335) (width 0.2032) (layer Cuivre) (net 104))
+ (segment (start 150.114 141.605) (end 150.622 141.605) (width 0.2032) (layer Composant) (net 104))
+ (segment (start 149.7076 142.24) (end 150.114 141.605) (width 0.2032) (layer Composant) (net 104))
+ (segment (start 154.686 141.732) (end 167.005 141.732) (width 0.2032) (layer Cuivre) (net 105))
+ (segment (start 167.767 140.97) (end 167.005 141.732) (width 0.2032) (layer Cuivre) (net 105))
+ (segment (start 186.055 137.795) (end 182.88 140.97) (width 0.2032) (layer Cuivre) (net 105) (status 800))
+ (segment (start 155.067 142.113) (end 154.686 141.732) (width 0.2032) (layer Composant) (net 105))
+ (segment (start 157.1752 142.113) (end 155.067 142.113) (width 0.2032) (layer Composant) (net 105) (status 800))
+ (segment (start 167.767 140.97) (end 182.88 140.97) (width 0.2032) (layer Cuivre) (net 105))
+ (via (at 154.686 141.732) (size 0.889) (layers Composant Cuivre) (net 105))
+ (via (at 154.813 136.906) (size 0.889) (layers Composant Cuivre) (net 106))
+ (segment (start 154.813 136.906) (end 155.702 137.795) (width 0.2032) (layer Cuivre) (net 106))
+ (segment (start 155.702 137.795) (end 168.275 137.795) (width 0.2032) (layer Cuivre) (net 106) (status 400))
+ (segment (start 154.813 136.9314) (end 154.813 136.906) (width 0.2032) (layer Composant) (net 106))
+ (segment (start 157.1752 136.9314) (end 154.813 136.9314) (width 0.2032) (layer Composant) (net 106) (status 800))
+ (segment (start 131.445 109.855) (end 128.778 112.522) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 132.715 127.635) (end 131.318 129.032) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 131.445 109.855) (end 132.7912 111.2012) (width 0.2032) (layer Composant) (net 107))
+ (segment (start 130.8354 103.759) (end 130.8354 109.2454) (width 0.2032) (layer Composant) (net 107) (status 800))
+ (segment (start 132.7912 113.8428) (end 132.7912 126.365) (width 0.2032) (layer Composant) (net 107) (status 800))
+ (segment (start 132.7912 126.365) (end 132.715 126.365) (width 0.2032) (layer Composant) (net 107))
+ (segment (start 123.19 131.445) (end 88.9 131.445) (width 0.2032) (layer Cuivre) (net 107))
+ (via (at 132.715 126.365) (size 0.889) (layers Composant Cuivre) (net 107))
+ (segment (start 87.63 135.89) (end 87.63 132.715) (width 0.2032) (layer Cuivre) (net 107) (status 800))
+ (segment (start 125.603 129.032) (end 123.19 131.445) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 131.318 129.032) (end 125.603 129.032) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 128.778 112.522) (end 112.522 112.522) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 132.7912 111.2012) (end 132.7912 113.8428) (width 0.2032) (layer Composant) (net 107) (status 400))
+ (segment (start 108.585 103.505) (end 105.1306 100.0506) (width 0.2032) (layer Composant) (net 107))
+ (via (at 108.585 108.585) (size 0.889) (layers Composant Cuivre) (net 107))
+ (segment (start 105.1306 94.869) (end 105.1306 100.0506) (width 0.2032) (layer Composant) (net 107) (status 800))
+ (segment (start 108.585 108.585) (end 112.522 112.522) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 132.715 126.365) (end 132.715 127.635) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 131.445 109.855) (end 130.8354 109.2454) (width 0.2032) (layer Composant) (net 107))
+ (segment (start 87.63 132.715) (end 88.9 131.445) (width 0.2032) (layer Cuivre) (net 107))
+ (segment (start 108.585 108.585) (end 108.585 103.505) (width 0.2032) (layer Composant) (net 107))
+ (via (at 131.445 109.855) (size 0.889) (layers Composant Cuivre) (net 107))
+ (segment (start 126.365 108.585) (end 126.365 107.315) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 129.794 111.252) (end 130.2004 111.6584) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 123.317 99.441) (end 123.8504 98.9076) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 112.395 103.505) (end 107.0864 98.1964) (width 0.2032) (layer Composant) (net 108))
+ (via (at 112.395 108.585) (size 0.889) (layers Composant Cuivre) (net 108))
+ (via (at 126.365 108.585) (size 0.889) (layers Composant Cuivre) (net 108))
+ (segment (start 129.794 111.252) (end 127.762 111.252) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 107.0864 98.1964) (end 107.0864 94.869) (width 0.2032) (layer Composant) (net 108) (status 400))
+ (segment (start 126.365 108.585) (end 123.952 110.998) (width 0.2032) (layer Cuivre) (net 108))
+ (segment (start 112.395 108.585) (end 112.395 103.505) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 126.365 109.855) (end 127.762 111.252) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 114.808 110.998) (end 112.395 108.585) (width 0.2032) (layer Cuivre) (net 108))
+ (segment (start 123.317 99.441) (end 123.317 104.267) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 126.365 109.855) (end 126.365 108.585) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 125.984 98.9076) (end 123.8504 98.9076) (width 0.2032) (layer Composant) (net 108) (status 800))
+ (segment (start 130.2004 113.8428) (end 130.2004 111.6584) (width 0.2032) (layer Composant) (net 108) (status 800))
+ (segment (start 126.365 107.315) (end 123.317 104.267) (width 0.2032) (layer Composant) (net 108))
+ (segment (start 114.808 110.998) (end 123.952 110.998) (width 0.2032) (layer Cuivre) (net 108))
+ (segment (start 123.19 118.0592) (end 121.285 116.1542) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 116.459 91.0844) (end 116.967 91.5924) (width 0.2032) (layer Composant) (net 109))
+ (via (at 121.285 97.282) (size 0.889) (layers Composant Cuivre) (net 109))
+ (segment (start 121.285 100.584) (end 121.285 97.282) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 120.777 101.092) (end 120.777 106.172) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 116.967 97.282) (end 121.285 97.282) (width 0.2032) (layer Cuivre) (net 109))
+ (via (at 116.967 97.282) (size 0.889) (layers Composant Cuivre) (net 109))
+ (segment (start 114.554 91.0844) (end 116.459 91.0844) (width 0.2032) (layer Composant) (net 109) (status 800))
+ (segment (start 120.777 106.172) (end 121.285 106.68) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 121.285 116.1542) (end 121.285 106.68) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 116.967 91.5924) (end 116.967 97.282) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 121.285 97.282) (end 121.285 96.52) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 121.285 96.52) (end 123.4694 94.3356) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 121.285 100.584) (end 120.777 101.092) (width 0.2032) (layer Composant) (net 109))
+ (segment (start 125.984 118.0592) (end 123.19 118.0592) (width 0.2032) (layer Composant) (net 109) (status 800))
+ (segment (start 123.4694 94.3356) (end 125.984 94.3356) (width 0.2032) (layer Composant) (net 109) (status 400))
+ (segment (start 113.284 112.014) (end 128.016 112.014) (width 0.2032) (layer Cuivre) (net 110))
+ (segment (start 131.445 126.365) (end 131.445 127.635) (width 0.2032) (layer Cuivre) (net 110))
+ (segment (start 131.445 123.825) (end 131.445 126.365) (width 0.2032) (layer Composant) (net 110))
+ (segment (start 113.284 112.014) (end 109.855 108.585) (width 0.2032) (layer Cuivre) (net 110))
+ (segment (start 132.1562 111.8108) (end 132.1562 113.8428) (width 0.2032) (layer Composant) (net 110) (status 400))
+ (segment (start 105.791 99.441) (end 105.791 94.869) (width 0.2032) (layer Composant) (net 110) (status 400))
+ (segment (start 109.855 103.505) (end 105.791 99.441) (width 0.2032) (layer Composant) (net 110))
+ (segment (start 131.445 127.635) (end 130.556 128.524) (width 0.2032) (layer Cuivre) (net 110))
+ (via (at 131.445 126.365) (size 0.889) (layers Composant Cuivre) (net 110))
+ (segment (start 130.2004 109.855) (end 132.1562 111.8108) (width 0.2032) (layer Composant) (net 110))
+ (segment (start 130.175 109.855) (end 128.016 112.014) (width 0.2032) (layer Cuivre) (net 110))
+ (segment (start 130.2004 109.855) (end 130.175 109.855) (width 0.2032) (layer Composant) (net 110))
+ (segment (start 91.44 130.81) (end 123.063 130.81) (width 0.2032) (layer Cuivre) (net 110))
+ (segment (start 131.445 123.825) (end 132.1562 123.1138) (width 0.2032) (layer Composant) (net 110))
+ (segment (start 130.2004 103.759) (end 130.2004 109.855) (width 0.2032) (layer Composant) (net 110) (status 800))
+ (segment (start 132.1562 113.8428) (end 132.1562 123.1138) (width 0.2032) (layer Composant) (net 110) (status 800))
+ (segment (start 87.63 127) (end 91.44 130.81) (width 0.2032) (layer Cuivre) (net 110) (status 800))
+ (segment (start 109.855 108.585) (end 109.855 103.505) (width 0.2032) (layer Composant) (net 110))
+ (segment (start 123.063 130.81) (end 125.349 128.524) (width 0.2032) (layer Cuivre) (net 110))
+ (segment (start 130.556 128.524) (end 125.349 128.524) (width 0.2032) (layer Cuivre) (net 110))
+ (via (at 130.175 109.855) (size 0.889) (layers Composant Cuivre) (net 110))
+ (via (at 109.855 108.585) (size 0.889) (layers Composant Cuivre) (net 110))
+ (via (at 168.91 150.495) (size 0.889) (layers Composant Cuivre) (net 111))
+ (segment (start 168.021 154.559) (end 168.021 151.384) (width 0.2032) (layer Cuivre) (net 111))
+ (segment (start 168.91 150.495) (end 168.021 151.384) (width 0.2032) (layer Cuivre) (net 111))
+ (segment (start 163.449 135.509) (end 160.2994 132.3594) (width 0.2032) (layer Composant) (net 111))
+ (segment (start 167.005 147.193) (end 168.91 149.098) (width 0.2032) (layer Composant) (net 111))
+ (segment (start 163.449 135.509) (end 163.449 137.16) (width 0.2032) (layer Composant) (net 111))
+ (segment (start 168.91 150.495) (end 168.91 149.098) (width 0.2032) (layer Composant) (net 111))
+ (segment (start 167.64 158.496) (end 167.64 154.94) (width 0.2032) (layer Cuivre) (net 111) (status 800))
+ (segment (start 163.449 137.16) (end 167.005 140.716) (width 0.2032) (layer Composant) (net 111))
+ (segment (start 167.64 158.496) (end 167.64 161.163) (width 0.3048) (layer Cuivre) (net 111) (status C00))
+ (segment (start 167.005 140.716) (end 167.005 147.193) (width 0.2032) (layer Composant) (net 111))
+ (segment (start 167.64 154.94) (end 168.021 154.559) (width 0.2032) (layer Cuivre) (net 111))
+ (segment (start 160.2994 132.3594) (end 157.1752 132.3594) (width 0.2032) (layer Composant) (net 111) (status 400))
+ (segment (start 166.37 147.447) (end 168.021 149.098) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 167.64 154.94) (end 168.021 154.559) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 166.37 140.716) (end 166.37 147.447) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 167.64 158.496) (end 167.64 154.94) (width 0.2032) (layer Composant) (net 112) (status 800))
+ (segment (start 162.814 137.16) (end 166.37 140.716) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 167.64 161.163) (end 167.64 158.496) (width 0.3048) (layer Composant) (net 112) (status C00))
+ (segment (start 160.0708 133.0198) (end 157.1752 133.0198) (width 0.2032) (layer Composant) (net 112) (status 400))
+ (segment (start 168.021 154.559) (end 168.021 149.098) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 162.814 135.763) (end 162.814 137.16) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 162.814 135.763) (end 160.0708 133.0198) (width 0.2032) (layer Composant) (net 112))
+ (segment (start 153.924 153.924) (end 153.924 149.479) (width 0.2032) (layer Composant) (net 113))
+ (segment (start 153.924 149.479) (end 153.5938 149.1488) (width 0.2032) (layer Composant) (net 113))
+ (segment (start 154.94 161.163) (end 154.94 158.496) (width 0.3048) (layer Composant) (net 113) (status C00))
+ (segment (start 154.94 154.94) (end 153.924 153.924) (width 0.2032) (layer Composant) (net 113))
+ (segment (start 153.5938 145.034) (end 153.5938 149.1488) (width 0.2032) (layer Composant) (net 113) (status 800))
+ (segment (start 154.94 158.496) (end 154.94 154.94) (width 0.2032) (layer Composant) (net 113) (status 800))
+ (segment (start 153.67 151.13) (end 153.035 150.495) (width 0.2032) (layer Cuivre) (net 114))
+ (segment (start 153.67 158.496) (end 153.67 161.163) (width 0.3048) (layer Cuivre) (net 114) (status C00))
+ (segment (start 152.9588 145.034) (end 152.9588 150.495) (width 0.2032) (layer Composant) (net 114) (status 800))
+ (segment (start 152.9588 150.495) (end 153.035 150.495) (width 0.2032) (layer Composant) (net 114))
+ (via (at 153.035 150.495) (size 0.889) (layers Composant Cuivre) (net 114))
+ (segment (start 153.67 151.13) (end 153.67 158.496) (width 0.2032) (layer Cuivre) (net 114) (status 400))
+ (segment (start 152.146 149.479) (end 151.6634 148.9964) (width 0.2032) (layer Composant) (net 115))
+ (segment (start 152.146 149.479) (end 152.146 153.416) (width 0.2032) (layer Composant) (net 115))
+ (segment (start 153.67 154.94) (end 152.146 153.416) (width 0.2032) (layer Composant) (net 115))
+ (segment (start 153.67 161.163) (end 153.67 158.496) (width 0.3048) (layer Composant) (net 115) (status C00))
+ (segment (start 153.67 158.496) (end 153.67 154.94) (width 0.2032) (layer Composant) (net 115) (status 800))
+ (segment (start 151.6634 145.034) (end 151.6634 148.9964) (width 0.2032) (layer Composant) (net 115) (status 800))
+ (via (at 151.13 150.495) (size 0.889) (layers Composant Cuivre) (net 116))
+ (segment (start 152.4 158.496) (end 152.4 151.765) (width 0.2032) (layer Cuivre) (net 116) (status 800))
+ (segment (start 151.003 145.034) (end 151.003 150.495) (width 0.2032) (layer Composant) (net 116) (status 800))
+ (segment (start 152.4 158.496) (end 152.4 161.163) (width 0.3048) (layer Cuivre) (net 116) (status C00))
+ (segment (start 152.4 151.765) (end 151.13 150.495) (width 0.2032) (layer Cuivre) (net 116))
+ (segment (start 151.003 150.495) (end 151.13 150.495) (width 0.2032) (layer Composant) (net 116))
+ (segment (start 150.3426 145.034) (end 150.3426 149.2504) (width 0.2032) (layer Composant) (net 117) (status 800))
+ (segment (start 151.13 154.94) (end 151.13 158.496) (width 0.2032) (layer Composant) (net 117) (status 400))
+ (segment (start 150.114 153.924) (end 151.13 154.94) (width 0.2032) (layer Composant) (net 117))
+ (segment (start 151.13 161.163) (end 151.13 158.496) (width 0.3048) (layer Composant) (net 117) (status C00))
+ (segment (start 150.114 153.924) (end 150.114 149.479) (width 0.2032) (layer Composant) (net 117))
+ (segment (start 150.114 149.479) (end 150.3426 149.2504) (width 0.2032) (layer Composant) (net 117))
+ (segment (start 149.0472 145.034) (end 149.0472 150.495) (width 0.2032) (layer Composant) (net 118) (status 800))
+ (segment (start 149.0472 150.495) (end 149.225 150.495) (width 0.2032) (layer Composant) (net 118))
+ (segment (start 149.225 154.305) (end 149.225 150.495) (width 0.2032) (layer Cuivre) (net 118))
+ (via (at 149.225 150.495) (size 0.889) (layers Composant Cuivre) (net 118))
+ (segment (start 149.86 154.94) (end 149.86 158.496) (width 0.2032) (layer Cuivre) (net 118) (status 400))
+ (segment (start 149.86 154.94) (end 149.225 154.305) (width 0.2032) (layer Cuivre) (net 118))
+ (segment (start 149.86 158.496) (end 149.86 161.163) (width 0.3048) (layer Cuivre) (net 118) (status C00))
+ (via (at 135.89 150.495) (size 0.889) (layers Composant Cuivre) (net 119))
+ (segment (start 134.62 161.163) (end 134.62 158.496) (width 0.3048) (layer Cuivre) (net 119) (status C00))
+ (segment (start 134.62 154.94) (end 135.001 154.559) (width 0.2032) (layer Cuivre) (net 119))
+ (segment (start 137.3378 145.034) (end 137.3378 148.0312) (width 0.2032) (layer Composant) (net 119) (status 800))
+ (segment (start 135.89 149.479) (end 137.3378 148.0312) (width 0.2032) (layer Composant) (net 119))
+ (segment (start 134.62 154.94) (end 134.62 158.496) (width 0.2032) (layer Cuivre) (net 119) (status 400))
+ (segment (start 135.001 154.559) (end 135.001 151.384) (width 0.2032) (layer Cuivre) (net 119))
+ (segment (start 135.89 149.479) (end 135.89 150.495) (width 0.2032) (layer Composant) (net 119))
+ (segment (start 135.89 150.495) (end 135.001 151.384) (width 0.2032) (layer Cuivre) (net 119))
+ (segment (start 134.62 154.94) (end 134.62 158.496) (width 0.2032) (layer Composant) (net 120) (status 400))
+ (segment (start 135.001 149.479) (end 136.0424 148.4376) (width 0.2032) (layer Composant) (net 120))
+ (segment (start 134.62 154.94) (end 135.001 154.559) (width 0.2032) (layer Composant) (net 120))
+ (segment (start 134.62 161.163) (end 134.62 158.496) (width 0.3048) (layer Composant) (net 120) (status C00))
+ (segment (start 135.001 154.559) (end 135.001 149.479) (width 0.2032) (layer Composant) (net 120))
+ (segment (start 136.0424 145.034) (end 136.0424 148.4376) (width 0.2032) (layer Composant) (net 120) (status 800))
+ (via (at 133.985 150.495) (size 0.889) (layers Composant Cuivre) (net 121))
+ (segment (start 132.969 154.559) (end 132.969 151.511) (width 0.2032) (layer Cuivre) (net 121))
+ (segment (start 133.985 150.495) (end 132.969 151.511) (width 0.2032) (layer Cuivre) (net 121))
+ (segment (start 133.35 158.496) (end 133.35 161.163) (width 0.3048) (layer Cuivre) (net 121) (status C00))
+ (segment (start 133.4516 145.034) (end 133.4516 148.9456) (width 0.2032) (layer Composant) (net 121) (status 800))
+ (segment (start 133.35 154.94) (end 133.35 158.496) (width 0.2032) (layer Cuivre) (net 121) (status 400))
+ (segment (start 133.985 149.479) (end 133.4516 148.9456) (width 0.2032) (layer Composant) (net 121))
+ (segment (start 133.985 149.479) (end 133.985 150.495) (width 0.2032) (layer Composant) (net 121))
+ (segment (start 132.969 154.559) (end 133.35 154.94) (width 0.2032) (layer Cuivre) (net 121))
+ (segment (start 132.7912 145.034) (end 132.7912 149.1742) (width 0.2032) (layer Composant) (net 122) (status 800))
+ (segment (start 132.08 154.94) (end 133.096 153.924) (width 0.2032) (layer Composant) (net 122))
+ (segment (start 132.08 154.94) (end 132.08 158.496) (width 0.2032) (layer Composant) (net 122) (status 400))
+ (segment (start 133.096 149.479) (end 132.7912 149.1742) (width 0.2032) (layer Composant) (net 122))
+ (segment (start 132.08 161.163) (end 132.08 158.496) (width 0.3048) (layer Composant) (net 122) (status C00))
+ (segment (start 133.096 153.924) (end 133.096 149.479) (width 0.2032) (layer Composant) (net 122))
+ (segment (start 161.925 135.89) (end 161.925 137.16) (width 0.2032) (layer Composant) (net 123))
+ (segment (start 159.7152 133.6802) (end 157.1752 133.6802) (width 0.2032) (layer Composant) (net 123) (status 400))
+ (segment (start 161.925 135.89) (end 159.7152 133.6802) (width 0.2032) (layer Composant) (net 123))
+ (segment (start 166.37 158.496) (end 166.37 161.163) (width 0.3048) (layer Cuivre) (net 123) (status C00))
+ (segment (start 165.989 151.511) (end 167.005 150.495) (width 0.2032) (layer Cuivre) (net 123))
+ (via (at 167.005 150.495) (size 0.889) (layers Composant Cuivre) (net 123))
+ (segment (start 165.989 154.559) (end 165.989 151.511) (width 0.2032) (layer Cuivre) (net 123))
+ (segment (start 166.37 154.94) (end 165.989 154.559) (width 0.2032) (layer Cuivre) (net 123))
+ (segment (start 161.925 137.16) (end 165.735 140.97) (width 0.2032) (layer Composant) (net 123))
+ (segment (start 165.735 140.97) (end 165.735 147.701) (width 0.2032) (layer Composant) (net 123))
+ (segment (start 167.005 150.495) (end 167.005 148.971) (width 0.2032) (layer Composant) (net 123))
+ (segment (start 165.735 147.701) (end 167.005 148.971) (width 0.2032) (layer Composant) (net 123))
+ (segment (start 166.37 158.496) (end 166.37 154.94) (width 0.2032) (layer Cuivre) (net 123) (status 800))
+ (segment (start 130.81 154.94) (end 131.191 154.559) (width 0.2032) (layer Cuivre) (net 124))
+ (segment (start 132.08 150.495) (end 131.191 151.384) (width 0.2032) (layer Cuivre) (net 124))
+ (segment (start 132.1562 145.034) (end 132.1562 150.495) (width 0.2032) (layer Composant) (net 124) (status 800))
+ (via (at 132.08 150.495) (size 0.889) (layers Composant Cuivre) (net 124))
+ (segment (start 130.81 158.496) (end 130.81 154.94) (width 0.2032) (layer Cuivre) (net 124) (status 800))
+ (segment (start 130.81 161.163) (end 130.81 158.496) (width 0.3048) (layer Cuivre) (net 124) (status C00))
+ (segment (start 132.1562 150.495) (end 132.08 150.495) (width 0.2032) (layer Composant) (net 124))
+ (segment (start 131.191 154.559) (end 131.191 151.384) (width 0.2032) (layer Cuivre) (net 124))
+ (segment (start 130.81 154.94) (end 130.81 158.496) (width 0.2032) (layer Composant) (net 125) (status 400))
+ (segment (start 130.81 154.94) (end 131.191 154.559) (width 0.2032) (layer Composant) (net 125))
+ (segment (start 131.191 149.479) (end 130.8354 149.1234) (width 0.2032) (layer Composant) (net 125))
+ (segment (start 130.8354 145.034) (end 130.8354 149.1234) (width 0.2032) (layer Composant) (net 125) (status 800))
+ (segment (start 131.191 154.559) (end 131.191 149.479) (width 0.2032) (layer Composant) (net 125))
+ (segment (start 130.81 161.163) (end 130.81 158.496) (width 0.3048) (layer Composant) (net 125) (status C00))
+ (via (at 130.175 150.495) (size 0.889) (layers Composant Cuivre) (net 126))
+ (segment (start 129.54 154.94) (end 129.54 158.496) (width 0.2032) (layer Cuivre) (net 126) (status 400))
+ (segment (start 129.54 158.496) (end 129.54 161.163) (width 0.3048) (layer Cuivre) (net 126) (status C00))
+ (segment (start 129.159 154.559) (end 129.159 151.511) (width 0.2032) (layer Cuivre) (net 126))
+ (segment (start 130.2004 145.034) (end 130.2004 150.495) (width 0.2032) (layer Composant) (net 126) (status 800))
+ (segment (start 129.54 154.94) (end 129.159 154.559) (width 0.2032) (layer Cuivre) (net 126))
+ (segment (start 130.2004 150.495) (end 130.175 150.495) (width 0.2032) (layer Composant) (net 126))
+ (segment (start 130.175 150.495) (end 129.159 151.511) (width 0.2032) (layer Cuivre) (net 126))
+ (segment (start 129.159 149.479) (end 129.54 149.098) (width 0.2032) (layer Composant) (net 127))
+ (segment (start 129.159 154.051) (end 129.159 149.479) (width 0.2032) (layer Composant) (net 127))
+ (segment (start 129.54 145.034) (end 129.54 149.098) (width 0.2032) (layer Composant) (net 127) (status 800))
+ (segment (start 128.27 154.94) (end 129.159 154.051) (width 0.2032) (layer Composant) (net 127))
+ (segment (start 128.27 154.94) (end 128.27 158.496) (width 0.2032) (layer Composant) (net 127) (status 400))
+ (segment (start 128.27 161.163) (end 128.27 158.496) (width 0.3048) (layer Composant) (net 127) (status C00))
+ (segment (start 125.73 158.496) (end 125.73 151.765) (width 0.2032) (layer Cuivre) (net 128) (status 800))
+ (segment (start 125.73 158.496) (end 125.73 161.163) (width 0.3048) (layer Cuivre) (net 128) (status C00))
+ (segment (start 123.19 144.78) (end 124.46 146.05) (width 0.2032) (layer Composant) (net 128))
+ (segment (start 125.73 151.765) (end 124.46 150.495) (width 0.2032) (layer Cuivre) (net 128))
+ (via (at 124.46 150.495) (size 0.889) (layers Composant Cuivre) (net 128))
+ (segment (start 123.19 141.351) (end 123.19 144.78) (width 0.2032) (layer Composant) (net 128))
+ (segment (start 123.19 141.351) (end 123.7234 140.8176) (width 0.2032) (layer Composant) (net 128))
+ (segment (start 123.7234 140.8176) (end 125.984 140.8176) (width 0.2032) (layer Composant) (net 128) (status 400))
+ (segment (start 124.46 150.495) (end 124.46 146.05) (width 0.2032) (layer Composant) (net 128))
+ (segment (start 124.46 158.496) (end 124.46 154.94) (width 0.2032) (layer Composant) (net 129) (status 800))
+ (segment (start 122.555 140.97) (end 122.555 145.415) (width 0.2032) (layer Composant) (net 129))
+ (segment (start 123.444 153.924) (end 123.444 146.304) (width 0.2032) (layer Composant) (net 129))
+ (segment (start 124.0028 139.5222) (end 125.984 139.5222) (width 0.2032) (layer Composant) (net 129) (status 400))
+ (segment (start 122.555 140.97) (end 124.0028 139.5222) (width 0.2032) (layer Composant) (net 129))
+ (segment (start 124.46 154.94) (end 123.444 153.924) (width 0.2032) (layer Composant) (net 129))
+ (segment (start 124.46 161.163) (end 124.46 158.496) (width 0.3048) (layer Composant) (net 129) (status C00))
+ (segment (start 122.555 145.415) (end 123.444 146.304) (width 0.2032) (layer Composant) (net 129))
+ (segment (start 122.555 146.685) (end 121.92 146.05) (width 0.2032) (layer Composant) (net 130))
+ (segment (start 121.92 140.589) (end 123.6472 138.8618) (width 0.2032) (layer Composant) (net 130))
+ (segment (start 121.92 140.589) (end 121.92 146.05) (width 0.2032) (layer Composant) (net 130))
+ (segment (start 123.19 158.496) (end 123.19 161.163) (width 0.3048) (layer Cuivre) (net 130) (status C00))
+ (segment (start 123.19 158.496) (end 123.19 151.13) (width 0.2032) (layer Cuivre) (net 130) (status 800))
+ (segment (start 123.19 151.13) (end 122.555 150.495) (width 0.2032) (layer Cuivre) (net 130))
+ (segment (start 122.555 150.495) (end 122.555 146.685) (width 0.2032) (layer Composant) (net 130))
+ (segment (start 123.6472 138.8618) (end 125.984 138.8618) (width 0.2032) (layer Composant) (net 130) (status 400))
+ (via (at 122.555 150.495) (size 0.889) (layers Composant Cuivre) (net 130))
+ (segment (start 121.285 140.208) (end 123.2662 138.2268) (width 0.2032) (layer Composant) (net 131))
+ (segment (start 123.19 161.163) (end 123.19 158.496) (width 0.3048) (layer Composant) (net 131) (status C00))
+ (segment (start 121.285 140.208) (end 121.285 146.685) (width 0.2032) (layer Composant) (net 131))
+ (segment (start 121.285 146.685) (end 121.666 147.066) (width 0.2032) (layer Composant) (net 131))
+ (segment (start 123.19 154.94) (end 121.666 153.416) (width 0.2032) (layer Composant) (net 131))
+ (segment (start 123.2662 138.2268) (end 125.984 138.2268) (width 0.2032) (layer Composant) (net 131) (status 400))
+ (segment (start 121.666 153.416) (end 121.666 147.066) (width 0.2032) (layer Composant) (net 131))
+ (segment (start 123.19 158.496) (end 123.19 154.94) (width 0.2032) (layer Composant) (net 131) (status 800))
+ (segment (start 121.92 158.496) (end 121.92 161.163) (width 0.3048) (layer Cuivre) (net 132) (status C00))
+ (segment (start 125.984 136.9314) (end 123.5456 136.9314) (width 0.2032) (layer Composant) (net 132) (status 800))
+ (segment (start 120.65 139.827) (end 123.5456 136.9314) (width 0.2032) (layer Composant) (net 132))
+ (segment (start 120.65 139.827) (end 120.65 150.495) (width 0.2032) (layer Composant) (net 132))
+ (segment (start 121.92 158.496) (end 121.92 151.765) (width 0.2032) (layer Cuivre) (net 132) (status 800))
+ (segment (start 121.92 151.765) (end 120.65 150.495) (width 0.2032) (layer Cuivre) (net 132))
+ (via (at 120.65 150.495) (size 0.889) (layers Composant Cuivre) (net 132))
+ (segment (start 120.65 158.496) (end 120.65 154.94) (width 0.2032) (layer Composant) (net 133) (status 800))
+ (segment (start 120.65 154.94) (end 119.634 153.924) (width 0.2032) (layer Composant) (net 133))
+ (segment (start 119.634 137.795) (end 123.1138 134.3152) (width 0.2032) (layer Composant) (net 133))
+ (segment (start 120.65 161.163) (end 120.65 158.496) (width 0.3048) (layer Composant) (net 133) (status C00))
+ (segment (start 123.1138 134.3152) (end 125.984 134.3152) (width 0.2032) (layer Composant) (net 133) (status 400))
+ (segment (start 119.634 153.924) (end 119.634 137.795) (width 0.2032) (layer Composant) (net 133))
+ (segment (start 165.1 154.94) (end 165.989 154.051) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 164.973 147.828) (end 165.989 148.844) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 165.989 154.051) (end 165.989 148.844) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 159.9946 134.9756) (end 157.1752 134.9756) (width 0.2032) (layer Composant) (net 134) (status 400))
+ (segment (start 165.1 161.163) (end 165.1 158.496) (width 0.3048) (layer Composant) (net 134) (status C00))
+ (segment (start 165.1 158.496) (end 165.1 154.94) (width 0.2032) (layer Composant) (net 134) (status 800))
+ (segment (start 161.29 136.271) (end 161.29 137.287) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 161.29 137.287) (end 164.973 140.97) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 161.29 136.271) (end 159.9946 134.9756) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 164.973 140.97) (end 164.973 147.828) (width 0.2032) (layer Composant) (net 134))
+ (segment (start 118.745 154.305) (end 118.745 150.495) (width 0.2032) (layer Cuivre) (net 135))
+ (segment (start 122.8598 133.6802) (end 125.984 133.6802) (width 0.2032) (layer Composant) (net 135) (status 400))
+ (via (at 118.745 150.495) (size 0.889) (layers Composant Cuivre) (net 135))
+ (segment (start 119.38 154.94) (end 118.745 154.305) (width 0.2032) (layer Cuivre) (net 135))
+ (segment (start 118.745 137.795) (end 122.8598 133.6802) (width 0.2032) (layer Composant) (net 135))
+ (segment (start 119.38 158.496) (end 119.38 154.94) (width 0.2032) (layer Cuivre) (net 135) (status 800))
+ (segment (start 119.38 158.496) (end 119.38 161.163) (width 0.3048) (layer Cuivre) (net 135) (status C00))
+ (segment (start 118.745 150.495) (end 118.745 137.795) (width 0.2032) (layer Composant) (net 135))
+ (segment (start 122.5042 133.0198) (end 125.984 133.0198) (width 0.2032) (layer Composant) (net 136) (status 400))
+ (segment (start 117.729 137.795) (end 122.5042 133.0198) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 119.38 154.94) (end 118.745 154.305) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 117.983 144.145) (end 117.983 146.685) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 119.38 161.163) (end 119.38 158.496) (width 0.3048) (layer Composant) (net 136) (status C00))
+ (segment (start 119.38 158.496) (end 119.38 154.94) (width 0.2032) (layer Composant) (net 136) (status 800))
+ (segment (start 117.729 143.891) (end 117.983 144.145) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 118.745 154.305) (end 118.745 151.765) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 118.745 151.765) (end 117.729 150.749) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 117.729 150.749) (end 117.729 146.939) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 117.729 143.891) (end 117.729 137.795) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 117.983 146.685) (end 117.729 146.939) (width 0.2032) (layer Composant) (net 136))
+ (segment (start 160.4264 137.5664) (end 157.1752 137.5664) (width 0.2032) (layer Composant) (net 137) (status 400))
+ (segment (start 163.83 158.496) (end 163.83 161.163) (width 0.3048) (layer Cuivre) (net 137) (status C00))
+ (segment (start 163.83 154.94) (end 164.211 154.559) (width 0.2032) (layer Cuivre) (net 137))
+ (segment (start 164.338 141.478) (end 160.4264 137.5664) (width 0.2032) (layer Composant) (net 137))
+ (segment (start 163.83 158.496) (end 163.83 154.94) (width 0.2032) (layer Cuivre) (net 137) (status 800))
+ (segment (start 165.1 150.495) (end 164.211 151.384) (width 0.2032) (layer Cuivre) (net 137))
+ (segment (start 164.211 154.559) (end 164.211 151.384) (width 0.2032) (layer Cuivre) (net 137))
+ (segment (start 165.1 150.495) (end 165.1 148.971) (width 0.2032) (layer Composant) (net 137))
+ (segment (start 164.338 141.478) (end 164.338 148.209) (width 0.2032) (layer Composant) (net 137))
+ (segment (start 164.338 148.209) (end 165.1 148.971) (width 0.2032) (layer Composant) (net 137))
+ (via (at 165.1 150.495) (size 0.889) (layers Composant Cuivre) (net 137))
+ (segment (start 163.83 158.496) (end 163.83 154.94) (width 0.2032) (layer Composant) (net 138) (status 800))
+ (segment (start 160.1978 138.2268) (end 157.1752 138.2268) (width 0.2032) (layer Composant) (net 138) (status 400))
+ (segment (start 163.83 161.163) (end 163.83 158.496) (width 0.3048) (layer Composant) (net 138) (status C00))
+ (segment (start 164.211 154.559) (end 164.211 149.352) (width 0.2032) (layer Composant) (net 138))
+ (segment (start 163.83 148.971) (end 163.83 141.859) (width 0.2032) (layer Composant) (net 138))
+ (segment (start 163.83 148.971) (end 164.211 149.352) (width 0.2032) (layer Composant) (net 138))
+ (segment (start 163.83 141.859) (end 160.1978 138.2268) (width 0.2032) (layer Composant) (net 138))
+ (segment (start 163.83 154.94) (end 164.211 154.559) (width 0.2032) (layer Composant) (net 138))
+ (via (at 163.195 150.495) (size 0.889) (layers Composant Cuivre) (net 139))
+ (segment (start 163.322 142.367) (end 159.8168 138.8618) (width 0.2032) (layer Composant) (net 139))
+ (segment (start 163.322 149.606) (end 163.322 142.367) (width 0.2032) (layer Composant) (net 139))
+ (segment (start 159.8168 138.8618) (end 157.1752 138.8618) (width 0.2032) (layer Composant) (net 139) (status 400))
+ (segment (start 162.56 154.94) (end 162.179 154.559) (width 0.2032) (layer Cuivre) (net 139))
+ (segment (start 163.195 150.495) (end 163.195 149.733) (width 0.2032) (layer Composant) (net 139))
+ (segment (start 162.56 158.496) (end 162.56 161.163) (width 0.3048) (layer Cuivre) (net 139) (status C00))
+ (segment (start 163.195 150.495) (end 162.179 151.511) (width 0.2032) (layer Cuivre) (net 139))
+ (segment (start 163.195 149.733) (end 163.322 149.606) (width 0.2032) (layer Composant) (net 139))
+ (segment (start 162.56 158.496) (end 162.56 154.94) (width 0.2032) (layer Cuivre) (net 139) (status 800))
+ (segment (start 162.179 154.559) (end 162.179 151.511) (width 0.2032) (layer Cuivre) (net 139))
+ (segment (start 162.179 154.051) (end 162.179 149.86) (width 0.2032) (layer Composant) (net 140))
+ (segment (start 162.814 149.225) (end 162.814 142.875) (width 0.2032) (layer Composant) (net 140))
+ (segment (start 157.1752 140.1826) (end 160.1216 140.1826) (width 0.2032) (layer Composant) (net 140) (status 800))
+ (segment (start 161.29 154.94) (end 161.29 158.496) (width 0.2032) (layer Composant) (net 140) (status 400))
+ (segment (start 161.29 154.94) (end 162.179 154.051) (width 0.2032) (layer Composant) (net 140))
+ (segment (start 161.29 161.163) (end 161.29 158.496) (width 0.3048) (layer Composant) (net 140) (status C00))
+ (segment (start 162.814 142.875) (end 160.1216 140.1826) (width 0.2032) (layer Composant) (net 140))
+ (segment (start 162.179 149.86) (end 162.814 149.225) (width 0.2032) (layer Composant) (net 140))
+ (segment (start 160.02 142.24) (end 160.02 145.161) (width 0.2032) (layer Composant) (net 141))
+ (segment (start 160.02 142.24) (end 159.258 141.478) (width 0.2032) (layer Composant) (net 141))
+ (segment (start 159.512 151.765) (end 160.02 152.273) (width 0.2032) (layer Composant) (net 141))
+ (segment (start 157.1752 141.478) (end 159.258 141.478) (width 0.2032) (layer Composant) (net 141) (status 800))
+ (segment (start 160.02 152.273) (end 160.02 158.496) (width 0.2032) (layer Composant) (net 141) (status 400))
+ (segment (start 159.512 145.669) (end 159.512 151.765) (width 0.2032) (layer Composant) (net 141))
+ (segment (start 160.02 161.163) (end 160.02 158.496) (width 0.3048) (layer Composant) (net 141) (status C00))
+ (segment (start 159.512 145.669) (end 160.02 145.161) (width 0.2032) (layer Composant) (net 141))
+ (segment (start 154.94 150.495) (end 156.21 151.765) (width 0.2032) (layer Cuivre) (net 142))
+ (segment (start 154.2542 145.034) (end 154.2542 148.7932) (width 0.2032) (layer Composant) (net 142) (status 800))
+ (segment (start 156.21 151.765) (end 156.21 158.496) (width 0.2032) (layer Cuivre) (net 142) (status 400))
+ (via (at 154.94 150.495) (size 0.889) (layers Composant Cuivre) (net 142))
+ (segment (start 154.94 150.495) (end 154.94 149.479) (width 0.2032) (layer Composant) (net 142))
+ (segment (start 154.94 149.479) (end 154.2542 148.7932) (width 0.2032) (layer Composant) (net 142))
+ (segment (start 156.21 158.496) (end 156.21 161.163) (width 0.3048) (layer Cuivre) (net 142) (status C00))
+ (segment (start 160.02 158.496) (end 160.02 161.163) (width 0.3048) (layer Cuivre) (net 143) (status C00))
+ (segment (start 161.29 142.24) (end 161.29 144.526) (width 0.2032) (layer Composant) (net 143))
+ (segment (start 160.02 145.796) (end 161.29 144.526) (width 0.2032) (layer Composant) (net 143))
+ (via (at 161.29 150.495) (size 0.889) (layers Composant Cuivre) (net 143))
+ (segment (start 160.02 150.241) (end 160.274 150.495) (width 0.2032) (layer Composant) (net 143))
+ (segment (start 161.29 142.24) (end 159.8676 140.8176) (width 0.2032) (layer Composant) (net 143))
+ (segment (start 161.29 150.495) (end 160.02 151.765) (width 0.2032) (layer Cuivre) (net 143))
+ (segment (start 160.02 145.796) (end 160.02 150.241) (width 0.2032) (layer Composant) (net 143))
+ (segment (start 157.1752 140.8176) (end 159.8676 140.8176) (width 0.2032) (layer Composant) (net 143) (status 800))
+ (segment (start 160.02 151.765) (end 160.02 158.496) (width 0.2032) (layer Cuivre) (net 143) (status 400))
+ (segment (start 160.274 150.495) (end 161.29 150.495) (width 0.2032) (layer Composant) (net 143))
+ (segment (start 146.4564 145.034) (end 146.4564 147.9804) (width 0.2032) (layer Composant) (net 144) (status 800))
+ (segment (start 148.336 151.003) (end 148.336 149.86) (width 0.2032) (layer Composant) (net 144))
+ (segment (start 149.86 154.94) (end 149.225 154.305) (width 0.2032) (layer Composant) (net 144))
+ (segment (start 148.336 151.003) (end 149.225 151.892) (width 0.2032) (layer Composant) (net 144))
+ (segment (start 148.336 149.86) (end 146.4564 147.9804) (width 0.2032) (layer Composant) (net 144))
+ (segment (start 149.86 158.496) (end 149.86 154.94) (width 0.2032) (layer Composant) (net 144) (status 800))
+ (segment (start 149.225 154.305) (end 149.225 151.892) (width 0.2032) (layer Composant) (net 144))
+ (segment (start 149.86 161.163) (end 149.86 158.496) (width 0.3048) (layer Composant) (net 144) (status C00))
+ (segment (start 135.89 153.67) (end 135.89 158.496) (width 0.2032) (layer Composant) (net 145) (status 400))
+ (segment (start 135.89 153.67) (end 136.779 152.781) (width 0.2032) (layer Composant) (net 145))
+ (segment (start 136.779 149.479) (end 137.9982 148.2598) (width 0.2032) (layer Composant) (net 145))
+ (segment (start 135.89 161.163) (end 135.89 158.496) (width 0.3048) (layer Composant) (net 145) (status C00))
+ (segment (start 136.779 149.479) (end 136.779 152.781) (width 0.2032) (layer Composant) (net 145))
+ (segment (start 137.9982 145.034) (end 137.9982 148.2598) (width 0.2032) (layer Composant) (net 145) (status 800))
+ (segment (start 125.476 151.003) (end 127 152.527) (width 0.2032) (layer Composant) (net 146))
+ (segment (start 124.1425 141.478) (end 123.825 141.7955) (width 0.2032) (layer Composant) (net 146))
+ (segment (start 127 161.163) (end 127 158.496) (width 0.3048) (layer Composant) (net 146) (status C00))
+ (segment (start 125.476 151.003) (end 125.476 145.796) (width 0.2032) (layer Composant) (net 146))
+ (segment (start 123.825 141.7955) (end 123.825 144.145) (width 0.2032) (layer Composant) (net 146))
+ (segment (start 123.825 144.145) (end 125.476 145.796) (width 0.2032) (layer Composant) (net 146))
+ (segment (start 127 158.496) (end 127 152.527) (width 0.2032) (layer Composant) (net 146) (status 800))
+ (segment (start 125.984 141.478) (end 124.1425 141.478) (width 0.2032) (layer Composant) (net 146) (status 800))
+ (segment (start 114.3 158.496) (end 114.3 136.2075) (width 0.2032) (layer Composant) (net 147) (status 800))
+ (segment (start 112.0775 130.429) (end 125.984 130.429) (width 0.2032) (layer Composant) (net 147) (status 400))
+ (segment (start 113.03 145.7325) (end 113.03 136.2075) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 112.7125 146.05) (end 113.03 145.7325) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 113.03 136.2075) (end 113.3475 135.89) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 113.9825 135.89) (end 114.3 136.2075) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 111.76 145.7325) (end 112.0775 146.05) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 113.3475 135.89) (end 113.9825 135.89) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 111.76 130.7465) (end 111.76 145.7325) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 112.0775 146.05) (end 112.7125 146.05) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 112.0775 130.429) (end 111.76 130.7465) (width 0.2032) (layer Composant) (net 147))
+ (segment (start 114.3 158.496) (end 114.3 161.163) (width 0.3048) (layer Composant) (net 147) (status C00))
+ (segment (start 140.97 161.163) (end 140.97 158.496) (width 0.3048) (layer Composant) (net 148) (status C00))
+ (segment (start 140.97 158.496) (end 140.97 154.94) (width 0.2032) (layer Composant) (net 148) (status 800))
+ (segment (start 140.716 149.479) (end 141.2494 148.9456) (width 0.2032) (layer Composant) (net 148))
+ (segment (start 140.97 154.94) (end 140.716 154.686) (width 0.2032) (layer Composant) (net 148))
+ (segment (start 140.716 154.686) (end 140.716 149.479) (width 0.2032) (layer Composant) (net 148))
+ (segment (start 141.2494 145.034) (end 141.2494 148.9456) (width 0.2032) (layer Composant) (net 148) (status 800))
+ (segment (start 137.16 154.94) (end 136.779 154.559) (width 0.2032) (layer Cuivre) (net 149))
+ (segment (start 138.6586 145.034) (end 138.6586 148.6154) (width 0.2032) (layer Composant) (net 149) (status 800))
+ (segment (start 136.779 154.559) (end 136.779 151.511) (width 0.2032) (layer Cuivre) (net 149))
+ (via (at 137.795 150.495) (size 0.889) (layers Composant Cuivre) (net 149))
+ (segment (start 137.795 150.495) (end 137.795 149.479) (width 0.2032) (layer Composant) (net 149))
+ (segment (start 137.16 158.496) (end 137.16 161.163) (width 0.3048) (layer Cuivre) (net 149) (status C00))
+ (segment (start 137.795 150.495) (end 136.779 151.511) (width 0.2032) (layer Cuivre) (net 149))
+ (segment (start 137.795 149.479) (end 138.6586 148.6154) (width 0.2032) (layer Composant) (net 149))
+ (segment (start 137.16 154.94) (end 137.16 158.496) (width 0.2032) (layer Cuivre) (net 149) (status 400))
+ (segment (start 114.681 154.051) (end 114.681 151.384) (width 0.2032) (layer Cuivre) (net 150))
+ (via (at 115.57 150.495) (size 0.889) (layers Composant Cuivre) (net 150))
+ (segment (start 115.57 154.94) (end 114.681 154.051) (width 0.2032) (layer Cuivre) (net 150))
+ (segment (start 115.57 137.795) (end 122.301 131.064) (width 0.2032) (layer Composant) (net 150))
+ (segment (start 114.681 151.384) (end 115.57 150.495) (width 0.2032) (layer Cuivre) (net 150))
+ (segment (start 122.301 131.064) (end 125.984 131.064) (width 0.2032) (layer Composant) (net 150) (status 400))
+ (segment (start 115.57 158.496) (end 115.57 154.94) (width 0.2032) (layer Cuivre) (net 150) (status 800))
+ (segment (start 115.57 158.496) (end 115.57 161.163) (width 0.2032) (layer Cuivre) (net 150) (status C00))
+ (segment (start 115.57 150.495) (end 115.57 137.795) (width 0.2032) (layer Composant) (net 150))
+ (segment (start 127 158.496) (end 127 151.13) (width 0.2032) (layer Cuivre) (net 151) (status 800))
+ (via (at 126.365 150.495) (size 0.889) (layers Composant Cuivre) (net 151))
+ (segment (start 126.365 142.113) (end 125.984 142.113) (width 0.2032) (layer Composant) (net 151) (status 400))
+ (segment (start 126.365 150.495) (end 126.365 142.113) (width 0.2032) (layer Composant) (net 151))
+ (segment (start 127 151.13) (end 126.365 150.495) (width 0.2032) (layer Cuivre) (net 151))
+ (segment (start 127 161.163) (end 127 158.496) (width 0.3048) (layer Cuivre) (net 151) (status C00))
+ (segment (start 101.6 158.496) (end 101.6 153.67) (width 0.2032) (layer Cuivre) (net 152) (status 800))
+ (segment (start 130.175 140.97) (end 128.27 140.97) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 157.1752 131.064) (end 144.526 131.064) (width 0.2032) (layer Composant) (net 152) (status 800))
+ (segment (start 101.6 153.67) (end 106.68 148.59) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 125.73 143.51) (end 114.3 143.51) (width 0.2032) (layer Cuivre) (net 152))
+ (via (at 133.35 140.081) (size 0.889) (layers Composant Cuivre) (net 152))
+ (segment (start 130.175 140.97) (end 131.064 140.081) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 131.064 140.081) (end 133.35 140.081) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 133.35 140.081) (end 135.509 140.081) (width 0.2032) (layer Composant) (net 152))
+ (segment (start 135.509 140.081) (end 144.526 131.064) (width 0.2032) (layer Composant) (net 152))
+ (segment (start 109.22 148.59) (end 114.3 143.51) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 106.68 148.59) (end 109.22 148.59) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 101.6 158.496) (end 101.6 161.163) (width 0.3048) (layer Cuivre) (net 152) (status C00))
+ (segment (start 128.27 140.97) (end 125.73 143.51) (width 0.2032) (layer Cuivre) (net 152))
+ (segment (start 138.43 161.163) (end 138.43 158.496) (width 0.3048) (layer Composant) (net 153) (status C00))
+ (segment (start 139.954 145.034) (end 139.954 148.336) (width 0.2032) (layer Composant) (net 153) (status 800))
+ (segment (start 138.811 154.559) (end 138.43 154.94) (width 0.2032) (layer Composant) (net 153))
+ (segment (start 138.811 149.479) (end 139.954 148.336) (width 0.2032) (layer Composant) (net 153))
+ (segment (start 138.43 154.94) (end 138.43 158.496) (width 0.2032) (layer Composant) (net 153) (status 400))
+ (segment (start 138.811 154.559) (end 138.811 149.479) (width 0.2032) (layer Composant) (net 153))
+ (segment (start 142.621 154.051) (end 142.621 149.479) (width 0.2032) (layer Composant) (net 154))
+ (segment (start 143.51 154.94) (end 143.51 158.496) (width 0.2032) (layer Composant) (net 154) (status 400))
+ (segment (start 143.51 154.94) (end 142.621 154.051) (width 0.2032) (layer Composant) (net 154))
+ (segment (start 143.2052 145.034) (end 143.2052 148.8948) (width 0.2032) (layer Composant) (net 154) (status 800))
+ (segment (start 143.51 161.163) (end 143.51 158.496) (width 0.3048) (layer Composant) (net 154) (status C00))
+ (segment (start 142.621 149.479) (end 143.2052 148.8948) (width 0.2032) (layer Composant) (net 154))
+ (segment (start 145.796 145.034) (end 145.796 148.336) (width 0.2032) (layer Composant) (net 155) (status 800))
+ (segment (start 147.32 150.495) (end 148.59 151.765) (width 0.2032) (layer Cuivre) (net 155))
+ (segment (start 148.59 151.765) (end 148.59 158.496) (width 0.2032) (layer Cuivre) (net 155) (status 400))
+ (segment (start 147.32 149.86) (end 145.796 148.336) (width 0.2032) (layer Composant) (net 155))
+ (segment (start 147.32 150.495) (end 147.32 149.86) (width 0.2032) (layer Composant) (net 155))
+ (via (at 147.32 150.495) (size 0.889) (layers Composant Cuivre) (net 155))
+ (segment (start 148.59 161.163) (end 148.59 158.496) (width 0.3048) (layer Cuivre) (net 155) (status C00))
+ (segment (start 144.399 149.479) (end 143.8402 148.9202) (width 0.2032) (layer Composant) (net 156))
+ (segment (start 144.78 154.94) (end 144.78 158.496) (width 0.2032) (layer Composant) (net 156) (status 400))
+ (segment (start 144.78 154.94) (end 144.399 154.559) (width 0.2032) (layer Composant) (net 156))
+ (segment (start 143.8402 145.034) (end 143.8402 148.9202) (width 0.2032) (layer Composant) (net 156) (status 800))
+ (segment (start 144.78 161.163) (end 144.78 158.496) (width 0.3048) (layer Composant) (net 156) (status C00))
+ (segment (start 144.399 154.559) (end 144.399 149.479) (width 0.2032) (layer Composant) (net 156))
+ (segment (start 116.84 158.496) (end 116.84 154.94) (width 0.2032) (layer Composant) (net 157) (status 800))
+ (segment (start 116.078 144.272) (end 116.078 146.558) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 116.459 143.891) (end 116.078 144.272) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 116.078 146.558) (end 116.459 146.939) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 116.459 154.559) (end 116.459 146.939) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 116.84 154.94) (end 116.459 154.559) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 116.459 143.891) (end 116.459 137.922) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 116.459 137.922) (end 122.6566 131.7244) (width 0.2032) (layer Composant) (net 157))
+ (segment (start 122.6566 131.7244) (end 125.984 131.7244) (width 0.2032) (layer Composant) (net 157) (status 400))
+ (segment (start 116.84 161.163) (end 116.84 158.496) (width 0.3048) (layer Composant) (net 157) (status C00))
+ (segment (start 125.984 128.4732) (end 128.4732 128.4732) (width 0.2032) (layer Composant) (net 158) (status 800))
+ (segment (start 132.969 132.969) (end 128.4732 128.4732) (width 0.2032) (layer Composant) (net 158))
+ (via (at 128.905 142.24) (size 0.889) (layers Composant Cuivre) (net 158))
+ (segment (start 111.76 153.67) (end 111.76 148.59) (width 0.2032) (layer Cuivre) (net 158))
+ (segment (start 129.794 142.24) (end 128.905 142.24) (width 0.2032) (layer Composant) (net 158))
+ (segment (start 113.03 161.163) (end 113.03 158.496) (width 0.2032) (layer Cuivre) (net 158) (status C00))
+ (segment (start 111.76 148.59) (end 115.57 144.78) (width 0.2032) (layer Cuivre) (net 158))
+ (segment (start 113.03 154.94) (end 111.76 153.67) (width 0.2032) (layer Cuivre) (net 158))
+ (segment (start 113.03 158.496) (end 113.03 154.94) (width 0.2032) (layer Cuivre) (net 158) (status 800))
+ (segment (start 126.365 144.78) (end 115.57 144.78) (width 0.2032) (layer Cuivre) (net 158))
+ (segment (start 128.905 142.24) (end 126.365 144.78) (width 0.2032) (layer Cuivre) (net 158))
+ (segment (start 129.794 142.24) (end 132.969 139.065) (width 0.2032) (layer Composant) (net 158))
+ (segment (start 132.969 132.969) (end 132.969 139.065) (width 0.2032) (layer Composant) (net 158))
+ (segment (start 145.161 145.034) (end 145.161 148.717) (width 0.2032) (layer Composant) (net 159) (status 800))
+ (segment (start 146.304 153.924) (end 146.304 149.86) (width 0.2032) (layer Composant) (net 159))
+ (segment (start 146.304 149.86) (end 145.161 148.717) (width 0.2032) (layer Composant) (net 159))
+ (segment (start 147.32 154.94) (end 147.32 158.496) (width 0.2032) (layer Composant) (net 159) (status 400))
+ (segment (start 147.32 154.94) (end 146.304 153.924) (width 0.2032) (layer Composant) (net 159))
+ (segment (start 147.32 161.163) (end 147.32 158.496) (width 0.3048) (layer Composant) (net 159) (status C00))
+ (segment (start 141.605 150.495) (end 142.621 151.511) (width 0.2032) (layer Cuivre) (net 160))
+ (segment (start 142.621 154.559) (end 142.24 154.94) (width 0.2032) (layer Cuivre) (net 160))
+ (segment (start 142.5448 145.034) (end 142.5448 148.5392) (width 0.2032) (layer Composant) (net 160) (status 800))
+ (segment (start 141.605 149.479) (end 142.5448 148.5392) (width 0.2032) (layer Composant) (net 160))
+ (segment (start 142.24 158.496) (end 142.24 161.163) (width 0.3048) (layer Cuivre) (net 160) (status C00))
+ (via (at 141.605 150.495) (size 0.889) (layers Composant Cuivre) (net 160))
+ (segment (start 141.605 149.479) (end 141.605 150.495) (width 0.2032) (layer Composant) (net 160))
+ (segment (start 142.24 154.94) (end 142.24 158.496) (width 0.2032) (layer Cuivre) (net 160) (status 400))
+ (segment (start 142.621 154.559) (end 142.621 151.511) (width 0.2032) (layer Cuivre) (net 160))
+ (segment (start 138.811 151.384) (end 139.7 150.495) (width 0.2032) (layer Cuivre) (net 161))
+ (via (at 139.7 150.495) (size 0.889) (layers Composant Cuivre) (net 161))
+ (segment (start 139.7 161.163) (end 139.7 158.496) (width 0.3048) (layer Cuivre) (net 161) (status C00))
+ (segment (start 139.7 154.94) (end 138.811 154.051) (width 0.2032) (layer Cuivre) (net 161))
+ (segment (start 138.811 154.051) (end 138.811 151.384) (width 0.2032) (layer Cuivre) (net 161))
+ (segment (start 139.7 149.479) (end 139.7 150.495) (width 0.2032) (layer Composant) (net 161))
+ (segment (start 140.589 145.034) (end 140.589 148.59) (width 0.2032) (layer Composant) (net 161) (status 800))
+ (segment (start 139.7 154.94) (end 139.7 158.496) (width 0.2032) (layer Cuivre) (net 161) (status 400))
+ (segment (start 139.7 149.479) (end 140.589 148.59) (width 0.2032) (layer Composant) (net 161))
+ (segment (start 139.065 127.6096) (end 139.065 127.635) (width 0.2032) (layer Cuivre) (net 162))
+ (segment (start 139.2936 126.238) (end 139.2936 127.381) (width 0.2032) (layer Cuivre) (net 162))
+ (segment (start 139.2936 127.381) (end 139.065 127.6096) (width 0.2032) (layer Cuivre) (net 162))
+ (segment (start 139.2936 113.8428) (end 139.2936 126.238) (width 0.2032) (layer Composant) (net 162) (status 800))
+ (segment (start 138.6586 108.458) (end 138.6586 103.759) (width 0.2032) (layer Composant) (net 162) (status 400))
+ (segment (start 135.128 131.572) (end 126.873 131.572) (width 0.2032) (layer Cuivre) (net 162))
+ (via (at 139.2936 126.238) (size 0.889) (layers Composant Cuivre) (net 162))
+ (segment (start 124.46 133.985) (end 126.873 131.572) (width 0.2032) (layer Cuivre) (net 162))
+ (segment (start 139.065 127.635) (end 135.128 131.572) (width 0.2032) (layer Cuivre) (net 162))
+ (segment (start 100.33 135.89) (end 102.235 133.985) (width 0.2032) (layer Cuivre) (net 162) (status 800))
+ (segment (start 139.2936 109.093) (end 138.6586 108.458) (width 0.2032) (layer Composant) (net 162))
+ (segment (start 102.235 133.985) (end 124.46 133.985) (width 0.2032) (layer Cuivre) (net 162))
+ (segment (start 139.2936 113.8428) (end 139.2936 109.093) (width 0.2032) (layer Composant) (net 162) (status 800))
+ (segment (start 140.589 108.585) (end 139.954 107.95) (width 0.2032) (layer Composant) (net 163))
+ (segment (start 135.509 132.08) (end 140.589 127) (width 0.2032) (layer Cuivre) (net 163))
+ (segment (start 140.589 126.238) (end 140.589 127) (width 0.2032) (layer Cuivre) (net 163))
+ (segment (start 127.127 132.08) (end 135.509 132.08) (width 0.2032) (layer Cuivre) (net 163))
+ (segment (start 140.589 113.8428) (end 140.589 126.238) (width 0.2032) (layer Composant) (net 163) (status 800))
+ (via (at 140.589 126.238) (size 0.889) (layers Composant Cuivre) (net 163))
+ (segment (start 124.714 134.493) (end 104.267 134.493) (width 0.2032) (layer Cuivre) (net 163))
+ (segment (start 127.127 132.08) (end 124.714 134.493) (width 0.2032) (layer Cuivre) (net 163))
+ (segment (start 139.954 107.95) (end 139.954 103.759) (width 0.2032) (layer Composant) (net 163) (status 400))
+ (segment (start 102.87 135.89) (end 104.267 134.493) (width 0.2032) (layer Cuivre) (net 163) (status 800))
+ (segment (start 140.589 113.8428) (end 140.589 108.585) (width 0.2032) (layer Composant) (net 163) (status 800))
+ (segment (start 139.2936 108.1786) (end 139.2936 103.759) (width 0.2032) (layer Composant) (net 164) (status 400))
+ (segment (start 139.954 108.839) (end 139.2936 108.1786) (width 0.2032) (layer Composant) (net 164))
+ (segment (start 139.954 113.8428) (end 139.954 108.839) (width 0.2032) (layer Composant) (net 164) (status 800))
+ (segment (start 135.255 123.825) (end 135.89 123.19) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 134.747 105.537) (end 135.4074 105.537) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 133.985 106.299) (end 134.747 105.537) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 92.71 135.89) (end 96.139 132.461) (width 0.2032) (layer Cuivre) (net 165) (status 800))
+ (segment (start 136.144 119.634) (end 136.144 115.824) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 135.89 119.888) (end 136.144 119.634) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 133.985 109.855) (end 133.985 106.299) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 136.144 115.824) (end 136.0424 115.7224) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 135.4074 103.759) (end 135.4074 105.537) (width 0.2032) (layer Composant) (net 165) (status 800))
+ (segment (start 126.111 130.048) (end 123.698 132.461) (width 0.2032) (layer Cuivre) (net 165))
+ (segment (start 135.89 123.19) (end 135.89 119.888) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 136.0424 113.8428) (end 136.0424 115.7224) (width 0.2032) (layer Composant) (net 165) (status 800))
+ (segment (start 135.255 127.635) (end 132.842 130.048) (width 0.2032) (layer Cuivre) (net 165))
+ (segment (start 136.0424 111.9124) (end 133.985 109.855) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 136.0424 111.9124) (end 136.0424 113.8428) (width 0.2032) (layer Composant) (net 165) (status 400))
+ (segment (start 135.255 126.365) (end 135.255 127.635) (width 0.2032) (layer Cuivre) (net 165))
+ (via (at 135.255 126.365) (size 0.889) (layers Composant Cuivre) (net 165))
+ (segment (start 135.255 123.825) (end 135.255 126.365) (width 0.2032) (layer Composant) (net 165))
+ (segment (start 123.698 132.461) (end 96.139 132.461) (width 0.2032) (layer Cuivre) (net 165))
+ (segment (start 126.111 130.048) (end 132.842 130.048) (width 0.2032) (layer Cuivre) (net 165))
+ (via (at 135.636 68.072) (size 0.889) (layers Composant Cuivre) (net 166))
+ (segment (start 135.636 68.072) (end 135.128 67.564) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 145.415 69.723) (end 145.415 68.58) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 145.415 68.58) (end 145.923 68.072) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 130.81 57.912) (end 130.81 58.928) (width 0.2032) (layer Composant) (net 166) (status 400))
+ (segment (start 146.05 68.072) (end 135.636 68.072) (width 0.2032) (layer Cuivre) (net 166))
+ (segment (start 135.128 67.564) (end 135.128 57.912) (width 0.2032) (layer Composant) (net 166))
+ (via (at 146.05 68.072) (size 0.889) (layers Composant Cuivre) (net 166))
+ (segment (start 131.064 57.658) (end 130.81 57.912) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 145.161 69.977) (end 145.415 69.723) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 146.05 68.072) (end 145.923 68.072) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 135.128 57.912) (end 134.874 57.658) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 145.161 69.977) (end 145.161 72.5678) (width 0.2032) (layer Composant) (net 166) (status 400))
+ (segment (start 134.874 57.658) (end 131.064 57.658) (width 0.2032) (layer Composant) (net 166))
+ (segment (start 332.867 65.786) (end 332.867 68.453) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 332.867 69.469) (end 332.867 68.453) (width 0.2032) (layer Cuivre) (net 167))
+ (segment (start 332.613 69.723) (end 332.867 69.469) (width 0.2032) (layer Cuivre) (net 167))
+ (segment (start 326.009 92.0242) (end 326.009 90.297) (width 0.2032) (layer Composant) (net 167) (status 800))
+ (via (at 332.867 68.453) (size 0.889) (layers Composant Cuivre) (net 167))
+ (via (at 99.441 58.293) (size 0.889) (layers Composant Cuivre) (net 167))
+ (segment (start 326.898 69.723) (end 326.898 72.517) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 326.517 72.898) (end 326.517 85.598) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 325.755 86.36) (end 325.755 90.043) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 331.343 64.262) (end 332.867 65.786) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 300.228 57.023) (end 329.057 57.023) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 100.584 57.15) (end 300.101 57.15) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 331.597 59.563) (end 331.597 62.103) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 331.343 62.357) (end 331.343 64.262) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 326.898 72.517) (end 326.517 72.898) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 99.441 58.293) (end 100.584 57.15) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 331.597 62.103) (end 331.343 62.357) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 326.898 69.723) (end 332.613 69.723) (width 0.2032) (layer Cuivre) (net 167))
+ (segment (start 300.101 57.15) (end 300.228 57.023) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 99.949 76.073) (end 100.711 75.311) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 99.441 58.674) (end 99.441 58.293) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 99.695 62.865) (end 99.695 58.928) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 100.711 75.311) (end 100.711 63.881) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 326.009 90.297) (end 325.755 90.043) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 99.9236 78.867) (end 99.9236 76.708) (width 0.2032) (layer Composant) (net 167) (status 800))
+ (segment (start 100.711 63.881) (end 99.695 62.865) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 99.949 76.708) (end 99.949 76.073) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 99.9236 76.708) (end 99.949 76.708) (width 0.2032) (layer Composant) (net 167))
+ (segment (start 329.057 57.023) (end 331.597 59.563) (width 0.2032) (layer VCC_layer) (net 167))
+ (segment (start 99.695 58.928) (end 99.441 58.674) (width 0.2032) (layer Composant) (net 167))
+ (via (at 326.898 69.723) (size 0.889) (layers Composant Cuivre) (net 167))
+ (segment (start 326.517 85.598) (end 325.755 86.36) (width 0.2032) (layer Composant) (net 167))
+ (via (at 100.965 58.547) (size 0.889) (layers Composant Cuivre) (net 168))
+ (segment (start 100.965 58.547) (end 100.965 59.182) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 324.0532 90.043) (end 324.231 90.043) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 164.592 60.071) (end 165.227 59.436) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 325.882 66.675) (end 326.517 66.04) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 322.453 62.611) (end 322.199 62.865) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 295.021 61.468) (end 304.927 61.468) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 306.324 62.865) (end 304.927 61.468) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 100.584 76.2) (end 100.584 78.867) (width 0.2032) (layer Composant) (net 168) (status 400))
+ (segment (start 101.219 75.565) (end 100.584 76.2) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 157.988 59.055) (end 156.845 57.912) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 295.021 61.468) (end 292.989 59.436) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 101.219 64.262) (end 101.219 75.565) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 161.29 60.071) (end 160.274 59.055) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 292.989 59.436) (end 165.227 59.436) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 326.517 62.865) (end 326.263 62.611) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 322.199 62.865) (end 306.324 62.865) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 326.517 62.865) (end 326.517 66.04) (width 0.2032) (layer Cuivre) (net 168))
+ (via (at 325.882 66.675) (size 0.889) (layers Composant Cuivre) (net 168))
+ (segment (start 102.489 58.166) (end 102.108 58.547) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 122.174 58.166) (end 102.489 58.166) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 156.845 57.912) (end 122.428 57.912) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 102.108 58.547) (end 100.965 58.547) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 164.592 60.071) (end 161.29 60.071) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 100.965 59.182) (end 102.235 60.452) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 102.235 60.452) (end 102.235 63.246) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 102.235 63.246) (end 101.219 64.262) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 122.428 57.912) (end 122.174 58.166) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 326.263 62.611) (end 322.453 62.611) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 324.0532 92.0242) (end 324.0532 90.043) (width 0.2032) (layer Composant) (net 168) (status 800))
+ (segment (start 324.231 90.043) (end 324.231 75.819) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 325.882 74.168) (end 324.231 75.819) (width 0.2032) (layer Composant) (net 168))
+ (segment (start 160.274 59.055) (end 157.988 59.055) (width 0.2032) (layer Cuivre) (net 168))
+ (segment (start 325.882 74.168) (end 325.882 66.675) (width 0.2032) (layer Composant) (net 168))
+ (via (at 314.96 86.614) (size 0.889) (layers Composant Cuivre) (net 169))
+ (segment (start 316.357 99.949) (end 318.897 99.949) (width 0.2032) (layer Cuivre) (net 169) (status C00))
+ (via (at 310.261 64.643) (size 0.889) (layers Composant Cuivre) (net 169))
+ (segment (start 310.261 64.643) (end 315.087 64.643) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 310.261 64.643) (end 310.261 65.405) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 316.357 97.409) (end 316.357 94.615) (width 0.2032) (layer Composant) (net 169) (status 800))
+ (via (at 308.229 59.563) (size 0.889) (layers Composant Cuivre) (net 169))
+ (segment (start 160.655 77.216) (end 161.925 75.946) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 158.877 77.4446) (end 158.877 77.216) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 314.96 93.218) (end 316.357 94.615) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 315.722 65.278) (end 315.722 69.596) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 308.229 59.563) (end 308.229 62.611) (width 0.2032) (layer Composant) (net 169))
+ (via (at 161.925 58.674) (size 0.889) (layers Composant Cuivre) (net 169))
+ (segment (start 316.357 99.949) (end 316.357 97.409) (width 0.2032) (layer Composant) (net 169) (status C00))
+ (segment (start 161.925 58.674) (end 163.322 58.674) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 161.925 75.946) (end 161.925 58.674) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 310.388 65.532) (end 310.388 66.675) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 310.261 65.405) (end 310.388 65.532) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 158.877 77.216) (end 160.655 77.216) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 308.229 62.611) (end 310.261 64.643) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 307.34 60.452) (end 308.229 59.563) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 315.087 64.643) (end 315.722 65.278) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 157.1752 77.4446) (end 158.877 77.4446) (width 0.2032) (layer Composant) (net 169) (status 800))
+ (segment (start 295.402 60.452) (end 307.34 60.452) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 293.37 58.42) (end 295.402 60.452) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 314.96 93.218) (end 314.96 86.614) (width 0.2032) (layer Composant) (net 169))
+ (segment (start 315.341 81.153) (end 315.341 69.977) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 315.722 69.596) (end 315.341 69.977) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 163.576 58.42) (end 293.37 58.42) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 314.96 86.614) (end 314.96 81.534) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 314.96 81.534) (end 315.341 81.153) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 310.388 66.675) (end 310.4134 66.675) (width 0.2032) (layer Composant) (net 169) (status 400))
+ (segment (start 163.322 58.674) (end 163.576 58.42) (width 0.2032) (layer Cuivre) (net 169))
+ (segment (start 97.155 73.025) (end 97.155 73.787) (width 0.2032) (layer Composant) (net 170) (status 800))
+ (segment (start 97.155 73.787) (end 96.0374 74.93) (width 0.2032) (layer Composant) (net 170))
+ (segment (start 96.901 68.072) (end 96.139 68.072) (width 0.2032) (layer Composant) (net 170))
+ (segment (start 97.155 68.326) (end 96.901 68.072) (width 0.2032) (layer Composant) (net 170))
+ (segment (start 96.0374 78.867) (end 96.0374 74.93) (width 0.2032) (layer Composant) (net 170) (status 800))
+ (segment (start 96.139 68.072) (end 95.885 67.818) (width 0.2032) (layer Composant) (net 170))
+ (segment (start 95.885 67.818) (end 95.885 61.595) (width 0.2032) (layer Composant) (net 170) (status 400))
+ (segment (start 97.155 73.025) (end 97.155 68.326) (width 0.2032) (layer Composant) (net 170) (status 800))
+ (segment (start 293.243 58.928) (end 295.275 60.96) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 160.782 77.724) (end 162.433 76.073) (width 0.2032) (layer Composant) (net 171))
+ (via (at 312.42 65.405) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 314.833 79.121) (end 314.833 69.723) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 322.834 102.489) (end 322.834 102.997) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.452 85.725) (end 314.071 86.106) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.0202 79.375) (end 314.0202 79.502) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 164.211 58.928) (end 163.83 59.309) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.071 87.376) (end 314.071 93.218) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 314.071 93.218) (end 315.214 94.361) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 315.214 94.361) (end 315.214 100.711) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 315.214 100.711) (end 316.103 101.6) (width 0.2032) (layer Composant) (net 171))
+ (via (at 316.103 101.6) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 316.103 101.6) (end 321.945 101.6) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 321.945 101.6) (end 322.834 102.489) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 163.83 59.309) (end 162.687 59.309) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 312.42 65.405) (end 314.579 65.405) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 308.61 60.96) (end 309.499 61.849) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.0202 79.502) (end 314.452 79.502) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 162.433 59.563) (end 162.687 59.309) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 159.258 77.724) (end 160.782 77.724) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 293.243 58.928) (end 164.211 58.928) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.579 65.405) (end 315.214 66.04) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 159.258 78.0796) (end 159.258 77.724) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 327.406 104.013) (end 329.184 102.235) (width 0.2032) (layer Cuivre) (net 171))
+ (via (at 163.83 59.309) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 157.1752 78.0796) (end 159.258 78.0796) (width 0.2032) (layer Composant) (net 171) (status 800))
+ (via (at 314.071 87.376) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 295.275 60.96) (end 308.61 60.96) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.452 79.502) (end 314.452 85.725) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 313.563 78.9178) (end 314.0202 79.375) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 162.433 76.073) (end 162.433 59.563) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 312.42 65.405) (end 309.499 62.484) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 312.674 78.9178) (end 313.563 78.9178) (width 0.2032) (layer Composant) (net 171) (status 800))
+ (segment (start 323.85 104.013) (end 327.406 104.013) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 314.452 79.502) (end 314.833 79.121) (width 0.2032) (layer Cuivre) (net 171))
+ (via (at 314.452 79.502) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 329.184 102.235) (end 333.375 102.235) (width 0.2032) (layer Cuivre) (net 171) (status 400))
+ (segment (start 315.214 66.04) (end 315.214 69.342) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 315.214 69.342) (end 314.833 69.723) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 322.834 102.997) (end 323.85 104.013) (width 0.2032) (layer Cuivre) (net 171))
+ (segment (start 309.499 62.484) (end 309.499 61.849) (width 0.2032) (layer Composant) (net 171))
+ (segment (start 314.071 86.106) (end 314.071 87.376) (width 0.2032) (layer Cuivre) (net 171))
+ (via (at 309.499 61.849) (size 0.889) (layers Composant Cuivre) (net 171))
+ (segment (start 122.936 82.804) (end 122.301 82.169) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 122.301 82.169) (end 122.301 81.026) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 129.159 92.202) (end 129.159 90.043) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 129.667 83.058) (end 129.413 82.804) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 121.92 80.645) (end 121.92 69.342) (width 0.2032) (layer Composant) (net 172))
+ (segment (start 129.667 89.535) (end 129.667 83.058) (width 0.2032) (layer Cuivre) (net 172))
+ (via (at 121.92 69.342) (size 0.889) (layers Composant Cuivre) (net 172))
+ (segment (start 129.54 102.235) (end 129.413 102.235) (width 0.2032) (layer Composant) (net 172))
+ (segment (start 121.92 80.645) (end 122.301 81.026) (width 0.2032) (layer Composant) (net 172))
+ (segment (start 107.569 67.564) (end 107.696 67.564) (width 0.2032) (layer Cuivre) (net 172) (status 800))
+ (via (at 107.696 69.342) (size 0.889) (layers Composant Cuivre) (net 172))
+ (segment (start 129.159 90.043) (end 129.667 89.535) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 129.54 103.759) (end 129.54 102.235) (width 0.2032) (layer Composant) (net 172) (status 800))
+ (segment (start 121.92 69.342) (end 107.696 69.342) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 129.413 92.456) (end 129.159 92.202) (width 0.2032) (layer Composant) (net 172))
+ (via (at 122.301 81.026) (size 0.889) (layers Composant Cuivre) (net 172))
+ (segment (start 107.696 73.4568) (end 107.696 69.342) (width 0.2032) (layer Composant) (net 172))
+ (segment (start 129.413 82.804) (end 122.936 82.804) (width 0.2032) (layer Cuivre) (net 172))
+ (via (at 129.159 92.202) (size 0.889) (layers Composant Cuivre) (net 172))
+ (segment (start 107.696 69.342) (end 107.696 67.564) (width 0.2032) (layer Cuivre) (net 172))
+ (segment (start 109.0422 78.867) (end 109.0422 74.803) (width 0.2032) (layer Composant) (net 172) (status 800))
+ (segment (start 109.0422 74.803) (end 107.696 73.4568) (width 0.2032) (layer Composant) (net 172))
+ (segment (start 129.413 102.235) (end 129.413 92.456) (width 0.2032) (layer Composant) (net 172))
+ (via (at 124.587 102.362) (size 0.889) (layers Composant Cuivre) (net 173))
+ (segment (start 112.903 93.091) (end 112.903 88.9) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 124.587 100.203) (end 124.333 100.457) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 110.617 87.249) (end 110.617 81.153) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 124.587 102.362) (end 123.444 102.362) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 112.649 88.646) (end 111.379 88.646) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 112.903 93.091) (end 113.538 93.726) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 120.396 102.362) (end 120.65 102.108) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 111.379 88.646) (end 111.125 88.392) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 124.333 102.108) (end 124.587 102.362) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 113.538 93.726) (end 113.538 97.536) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 113.538 97.536) (end 116.205 100.203) (width 0.2032) (layer Composant) (net 173))
+ (via (at 110.617 81.153) (size 0.889) (layers Composant Cuivre) (net 173))
+ (segment (start 106.426 81.534) (end 106.807 81.153) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 112.903 88.9) (end 112.649 88.646) (width 0.2032) (layer Composant) (net 173))
+ (via (at 106.426 81.534) (size 0.889) (layers Composant Cuivre) (net 173))
+ (segment (start 111.125 87.757) (end 110.617 87.249) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 120.396 102.362) (end 116.205 102.362) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 111.125 88.392) (end 111.125 87.757) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 106.426 81.534) (end 106.426 78.867) (width 0.2032) (layer Composant) (net 173) (status 400))
+ (segment (start 125.984 100.203) (end 124.587 100.203) (width 0.2032) (layer Composant) (net 173) (status 800))
+ (via (at 116.205 102.362) (size 0.889) (layers Composant Cuivre) (net 173))
+ (segment (start 106.807 81.153) (end 110.617 81.153) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 120.65 102.108) (end 123.19 102.108) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 124.333 100.457) (end 124.333 102.108) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 116.205 102.362) (end 116.205 100.203) (width 0.2032) (layer Composant) (net 173))
+ (segment (start 123.19 102.108) (end 123.444 102.362) (width 0.2032) (layer Cuivre) (net 173))
+ (segment (start 98.425 69.85) (end 98.425 70.866) (width 0.2032) (layer Composant) (net 174))
+ (segment (start 98.044 75.35672) (end 97.409 76.073) (width 0.2032) (layer Composant) (net 174))
+ (segment (start 98.171 71.12) (end 98.425 70.866) (width 0.2032) (layer Composant) (net 174))
+ (segment (start 97.409 78.486) (end 97.3328 78.867) (width 0.2032) (layer Composant) (net 174) (status 400))
+ (segment (start 98.425 61.595) (end 98.425 69.85) (width 0.2032) (layer Composant) (net 174) (status 800))
+ (segment (start 97.409 76.073) (end 97.409 78.486) (width 0.2032) (layer Composant) (net 174))
+ (segment (start 98.171 75.21448) (end 98.171 71.12) (width 0.2032) (layer Composant) (net 174))
+ (segment (start 94.615 73.025) (end 94.615 70.485) (width 0.2032) (layer Cuivre) (net 174) (status 800))
+ (segment (start 98.171 75.21448) (end 98.044 75.35672) (width 0.2032) (layer Composant) (net 174))
+ (segment (start 95.25 69.85) (end 98.425 69.85) (width 0.2032) (layer Cuivre) (net 174))
+ (via (at 98.425 69.85) (size 0.889) (layers Composant Cuivre) (net 174))
+ (segment (start 94.615 70.485) (end 95.25 69.85) (width 0.2032) (layer Cuivre) (net 174))
+ (via (at 111.633 70.231) (size 0.889) (layers Composant Cuivre) (net 175))
+ (segment (start 106.045 68.961) (end 107.315 70.231) (width 0.2032) (layer Cuivre) (net 175))
+ (segment (start 107.315 70.231) (end 111.633 70.231) (width 0.2032) (layer Cuivre) (net 175))
+ (segment (start 111.633 78.867) (end 111.633 70.231) (width 0.2032) (layer Composant) (net 175) (status 800))
+ (segment (start 106.045 68.961) (end 101.727 68.961) (width 0.2032) (layer Cuivre) (net 175))
+ (segment (start 100.965 68.199) (end 100.965 61.595) (width 0.2032) (layer Cuivre) (net 175) (status 400))
+ (segment (start 100.965 68.199) (end 101.727 68.961) (width 0.2032) (layer Cuivre) (net 175))
+ (segment (start 132.7912 101.219) (end 132.969 101.219) (width 0.2032) (layer Composant) (net 176))
+ (via (at 136.144 88.9) (size 0.889) (layers Composant Cuivre) (net 176))
+ (segment (start 129.032 63.246) (end 130.048 63.246) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 132.969 101.219) (end 132.969 92.456) (width 0.2032) (layer Composant) (net 176))
+ (segment (start 128.27 64.262) (end 128.27 64.008) (width 0.2032) (layer Composant) (net 176) (status 800))
+ (segment (start 134.493 77.216) (end 134.493 71.247) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 136.144 78.867) (end 134.493 77.216) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 133.096 69.85) (end 133.096 65.151) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 130.683 63.881) (end 131.826 63.881) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 132.7912 103.759) (end 132.7912 101.219) (width 0.2032) (layer Composant) (net 176) (status 800))
+ (segment (start 130.048 63.246) (end 130.683 63.881) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 136.144 88.9) (end 136.144 78.867) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 134.493 71.247) (end 133.096 69.85) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 128.27 64.008) (end 129.032 63.246) (width 0.2032) (layer VCC_layer) (net 176))
+ (segment (start 132.969 92.456) (end 136.144 89.281) (width 0.2032) (layer Composant) (net 176))
+ (segment (start 133.096 65.151) (end 131.826 63.881) (width 0.2032) (layer VCC_layer) (net 176))
+ (via (at 128.27 64.008) (size 0.889) (layers Composant Cuivre) (net 176))
+ (segment (start 136.144 89.281) (end 136.144 88.9) (width 0.2032) (layer Composant) (net 176))
+ (segment (start 132.1562 100.838) (end 132.461 100.838) (width 0.2032) (layer Composant) (net 177))
+ (segment (start 132.588 65.405) (end 131.699 64.516) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 135.001 89.789) (end 135.001 88.9) (width 0.2032) (layer Composant) (net 177))
+ (segment (start 132.461 100.838) (end 132.461 92.329) (width 0.2032) (layer Composant) (net 177))
+ (segment (start 130.302 64.516) (end 129.794 64.008) (width 0.2032) (layer VCC_layer) (net 177))
+ (via (at 135.001 88.9) (size 0.889) (layers Composant Cuivre) (net 177))
+ (segment (start 132.461 92.329) (end 135.001 89.789) (width 0.2032) (layer Composant) (net 177))
+ (segment (start 133.985 77.724) (end 133.985 71.374) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 132.588 69.977) (end 132.588 65.405) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 135.001 88.9) (end 135.001 78.74) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 129.794 64.008) (end 129.54 64.008) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 135.001 78.74) (end 133.985 77.724) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 132.1562 103.759) (end 132.1562 100.838) (width 0.2032) (layer Composant) (net 177) (status 800))
+ (via (at 129.54 64.008) (size 0.889) (layers Composant Cuivre) (net 177))
+ (segment (start 130.302 64.516) (end 131.699 64.516) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 133.985 71.374) (end 132.588 69.977) (width 0.2032) (layer VCC_layer) (net 177))
+ (segment (start 129.54 64.008) (end 129.54 64.262) (width 0.2032) (layer Composant) (net 177) (status 400))
+ (segment (start 145.923 71.12) (end 145.923 69.469) (width 0.2032) (layer Composant) (net 178))
+ (segment (start 145.923 69.469) (end 146.812 68.58) (width 0.2032) (layer Composant) (net 178))
+ (segment (start 145.923 71.12) (end 145.796 71.247) (width 0.2032) (layer Composant) (net 178))
+ (segment (start 146.812 66.802) (end 146.812 68.58) (width 0.2032) (layer Composant) (net 178) (status 800))
+ (segment (start 145.796 71.247) (end 145.796 72.5678) (width 0.2032) (layer Composant) (net 178) (status 400))
+ (segment (start 148.082 70.1294) (end 148.082 66.802) (width 0.2032) (layer Composant) (net 179) (status 400))
+ (segment (start 147.0914 72.5678) (end 147.0914 71.12) (width 0.2032) (layer Composant) (net 179) (status 800))
+ (segment (start 147.0914 71.12) (end 148.082 70.1294) (width 0.2032) (layer Composant) (net 179))
+ (segment (start 149.7076 70.358) (end 149.352 70.0024) (width 0.2032) (layer Composant) (net 180))
+ (segment (start 149.7076 72.5678) (end 149.7076 70.358) (width 0.2032) (layer Composant) (net 180) (status 800))
+ (segment (start 149.352 70.0024) (end 149.352 66.802) (width 0.2032) (layer Composant) (net 180) (status 400))
+ (segment (start 150.622 70.0786) (end 150.622 66.802) (width 0.2032) (layer Composant) (net 181) (status 400))
+ (segment (start 150.3426 70.358) (end 150.622 70.0786) (width 0.2032) (layer Composant) (net 181))
+ (segment (start 150.3426 72.5678) (end 150.3426 70.358) (width 0.2032) (layer Composant) (net 181) (status 800))
+ (segment (start 151.003 70.231) (end 151.003 72.5678) (width 0.2032) (layer Composant) (net 182) (status 400))
+ (segment (start 153.162 66.802) (end 153.162 68.072) (width 0.2032) (layer Composant) (net 182) (status 800))
+ (segment (start 153.162 68.072) (end 151.003 70.231) (width 0.2032) (layer Composant) (net 182))
+ (segment (start 151.6634 70.485) (end 154.432 67.7164) (width 0.2032) (layer Composant) (net 183))
+ (segment (start 154.432 67.7164) (end 154.432 66.802) (width 0.2032) (layer Composant) (net 183) (status 400))
+ (segment (start 151.6634 72.5678) (end 151.6634 70.485) (width 0.2032) (layer Composant) (net 183) (status 800))
+ (segment (start 155.702 67.4878) (end 155.702 66.802) (width 0.2032) (layer Composant) (net 184) (status 400))
+ (segment (start 152.9588 70.231) (end 155.702 67.4878) (width 0.2032) (layer Composant) (net 184))
+ (segment (start 152.9588 72.5678) (end 152.9588 70.231) (width 0.2032) (layer Composant) (net 184) (status 800))
+ (segment (start 158.369 72.771) (end 158.369 71.12) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 158.75 70.739) (end 158.369 71.12) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 157.1752 76.7842) (end 155.575 76.7842) (width 0.2032) (layer Composant) (net 185) (status 800))
+ (segment (start 158.496 66.802) (end 158.75 67.056) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 155.575 76.7842) (end 155.575 75.057) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 156.464 74.676) (end 155.956 74.676) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 158.496 66.802) (end 156.972 66.802) (width 0.2032) (layer Composant) (net 185) (status 400))
+ (segment (start 155.575 75.057) (end 155.956 74.676) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 158.369 72.771) (end 156.464 74.676) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 158.75 67.056) (end 158.75 70.739) (width 0.2032) (layer Composant) (net 185))
+ (segment (start 147.828 64.897) (end 150.749 64.897) (width 0.2032) (layer Composant) (net 186))
+ (segment (start 156.972 58.674) (end 156.972 57.658) (width 0.2032) (layer Composant) (net 186) (status 400))
+ (segment (start 146.4564 72.5678) (end 146.4564 69.723) (width 0.2032) (layer Composant) (net 186) (status 800))
+ (segment (start 146.4564 69.723) (end 147.447 68.7324) (width 0.2032) (layer Composant) (net 186))
+ (segment (start 147.447 65.278) (end 147.828 64.897) (width 0.2032) (layer Composant) (net 186))
+ (segment (start 156.972 58.674) (end 150.749 64.897) (width 0.2032) (layer Composant) (net 186))
+ (segment (start 147.447 68.7324) (end 147.447 65.278) (width 0.2032) (layer Composant) (net 186))
+ (segment (start 145.542 67.183) (end 145.542 66.802) (width 0.2032) (layer Composant) (net 187) (status 400))
+ (segment (start 144.526 71.12) (end 144.526 72.136) (width 0.2032) (layer Composant) (net 187))
+ (segment (start 144.78 67.945) (end 145.542 67.183) (width 0.2032) (layer Composant) (net 187))
+ (segment (start 144.526 72.136) (end 144.5006 72.5678) (width 0.2032) (layer Composant) (net 187) (status 400))
+ (segment (start 144.272 70.866) (end 144.526 71.12) (width 0.2032) (layer Composant) (net 187))
+ (segment (start 144.78 69.596) (end 144.78 67.945) (width 0.2032) (layer Composant) (net 187))
+ (segment (start 144.272 70.104) (end 144.78 69.596) (width 0.2032) (layer Composant) (net 187))
+ (segment (start 144.272 70.104) (end 144.272 70.866) (width 0.2032) (layer Composant) (net 187))
+ (segment (start 138.811 67.8434) (end 138.811 61.849) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 139.2936 72.5678) (end 139.2936 68.326) (width 0.2032) (layer Composant) (net 188) (status 800))
+ (segment (start 154.305 58.674) (end 151.892 61.087) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 139.573 61.087) (end 138.811 61.849) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 154.432 57.658) (end 154.432 57.912) (width 0.2032) (layer Composant) (net 188) (status 800))
+ (segment (start 139.2936 68.326) (end 138.811 67.8434) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 154.305 58.674) (end 154.305 58.039) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 151.892 61.087) (end 139.573 61.087) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 154.305 58.039) (end 154.432 57.912) (width 0.2032) (layer Composant) (net 188))
+ (segment (start 140.589 69.596) (end 140.589 72.5678) (width 0.2032) (layer Composant) (net 189) (status 400))
+ (segment (start 140.462 69.469) (end 140.589 69.596) (width 0.2032) (layer Composant) (net 189))
+ (segment (start 140.462 66.802) (end 140.462 69.469) (width 0.2032) (layer Composant) (net 189) (status 800))
+ (segment (start 141.732 69.469) (end 142.621 70.358) (width 0.2032) (layer Composant) (net 190))
+ (segment (start 142.621 70.358) (end 142.621 72.136) (width 0.2032) (layer Composant) (net 190))
+ (segment (start 141.732 66.802) (end 141.732 69.469) (width 0.2032) (layer Composant) (net 190) (status 800))
+ (segment (start 142.621 72.136) (end 142.5448 72.5678) (width 0.2032) (layer Composant) (net 190) (status 400))
+ (segment (start 138.6586 72.5678) (end 138.6586 68.58) (width 0.2032) (layer Composant) (net 191) (status 800))
+ (segment (start 153.162 57.658) (end 153.162 57.912) (width 0.2032) (layer Composant) (net 191) (status 800))
+ (segment (start 153.035 59.055) (end 153.035 58.039) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 138.557 60.579) (end 151.511 60.579) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 153.035 58.039) (end 153.162 57.912) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 138.303 68.2244) (end 138.303 60.833) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 151.511 60.579) (end 153.035 59.055) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 138.303 60.833) (end 138.557 60.579) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 138.6586 68.58) (end 138.303 68.2244) (width 0.2032) (layer Composant) (net 191))
+ (segment (start 151.892 59.055) (end 151.892 57.658) (width 0.2032) (layer Composant) (net 192) (status 400))
+ (segment (start 137.9982 68.707) (end 137.4902 68.199) (width 0.2032) (layer Composant) (net 192))
+ (segment (start 137.4902 68.199) (end 137.4902 60.071) (width 0.2032) (layer Composant) (net 192))
+ (segment (start 137.4902 60.071) (end 137.7442 59.817) (width 0.2032) (layer Composant) (net 192))
+ (segment (start 137.9982 72.5678) (end 137.9982 68.707) (width 0.2032) (layer Composant) (net 192) (status 800))
+ (segment (start 137.7442 59.817) (end 151.257 59.817) (width 0.2032) (layer Composant) (net 192))
+ (segment (start 151.892 59.055) (end 151.257 59.817) (width 0.2032) (layer Composant) (net 192))
+ (segment (start 155.702 57.658) (end 155.702 57.912) (width 0.2032) (layer Composant) (net 193) (status 800))
+ (segment (start 139.573 67.691) (end 139.573 62.103) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 139.827 61.849) (end 152.273 61.849) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 139.573 62.103) (end 139.827 61.849) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 139.954 72.5678) (end 139.954 68.072) (width 0.2032) (layer Composant) (net 193) (status 800))
+ (segment (start 155.575 58.039) (end 155.702 57.912) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 139.954 68.072) (end 139.573 67.691) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 155.575 58.547) (end 152.273 61.849) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 155.575 58.547) (end 155.575 58.039) (width 0.2032) (layer Composant) (net 193))
+ (segment (start 143.764 71.755) (end 143.8402 72.5678) (width 0.2032) (layer Composant) (net 194) (status 400))
+ (segment (start 143.764 69.977) (end 143.764 71.755) (width 0.2032) (layer Composant) (net 194))
+ (segment (start 144.272 66.802) (end 144.272 69.469) (width 0.2032) (layer Composant) (net 194) (status 800))
+ (segment (start 144.272 69.469) (end 143.764 69.977) (width 0.2032) (layer Composant) (net 194))
+ (segment (start 153.416 112.141) (end 153.416 108.331) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 152.781 107.696) (end 152.781 85.09) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 153.797 114.935) (end 158.115 119.253) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 160.401 131.7244) (end 164.084 135.4074) (width 0.2032) (layer Composant) (net 195))
+ (segment (start 164.084 135.4074) (end 164.084 137.16) (width 0.2032) (layer Composant) (net 195))
+ (segment (start 134.112 84.582) (end 136.398 82.296) (width 0.2032) (layer Cuivre) (net 195))
+ (via (at 154.305 132.08) (size 0.889) (layers Composant Cuivre) (net 195))
+ (segment (start 157.1752 131.7244) (end 154.6606 131.7244) (width 0.2032) (layer Composant) (net 195) (status 800))
+ (segment (start 153.416 108.331) (end 152.781 107.696) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 149.987 82.296) (end 136.398 82.296) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 130.429 83.947) (end 125.984 83.947) (width 0.2032) (layer Composant) (net 195) (status 400))
+ (segment (start 158.115 119.253) (end 158.115 128.27) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 130.429 83.947) (end 131.064 84.582) (width 0.2032) (layer Composant) (net 195))
+ (via (at 131.064 84.582) (size 0.889) (layers Composant Cuivre) (net 195))
+ (segment (start 153.797 112.522) (end 153.416 112.141) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 152.781 85.09) (end 149.987 82.296) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 154.305 132.08) (end 158.115 128.27) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 153.797 114.935) (end 153.797 112.522) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 164.084 137.16) (end 166.497 139.573) (width 0.2032) (layer Composant) (net 195))
+ (segment (start 131.064 84.582) (end 134.112 84.582) (width 0.2032) (layer Cuivre) (net 195))
+ (segment (start 173.101 139.573) (end 173.355 139.319) (width 0.2032) (layer Composant) (net 195))
+ (segment (start 166.497 139.573) (end 173.101 139.573) (width 0.2032) (layer Composant) (net 195))
+ (segment (start 154.305 132.08) (end 154.6606 131.7244) (width 0.2032) (layer Composant) (net 195))
+ (segment (start 157.1752 131.7244) (end 160.401 131.7244) (width 0.2032) (layer Composant) (net 195) (status 800))
+ (segment (start 173.355 139.319) (end 173.355 137.795) (width 0.2032) (layer Composant) (net 195) (status 400))
+ (segment (start 143.256 72.136) (end 143.2052 72.5678) (width 0.2032) (layer Composant) (net 196) (status 400))
+ (segment (start 143.002 66.802) (end 143.002 69.469) (width 0.2032) (layer Composant) (net 196) (status 800))
+ (segment (start 143.002 69.469) (end 143.256 69.723) (width 0.2032) (layer Composant) (net 196))
+ (segment (start 143.256 69.723) (end 143.256 72.136) (width 0.2032) (layer Composant) (net 196))
+ (segment (start 92.71 75.565) (end 92.71 80.645) (width 0.2032) (layer Composant) (net 197) (status 800))
+ (segment (start 92.71 80.645) (end 92.456 80.6958) (width 0.2032) (layer Composant) (net 197) (status 400))
+ (segment (start 102.235 70.358) (end 102.489 70.104) (width 0.2032) (layer Composant) (net 198))
+ (segment (start 102.489 70.104) (end 103.251 70.104) (width 0.2032) (layer Composant) (net 198))
+ (segment (start 110.363 73.025) (end 110.363 76.835) (width 0.2032) (layer Composant) (net 198))
+ (segment (start 99.695 73.025) (end 102.235 73.025) (width 0.2032) (layer Cuivre) (net 198) (status C00))
+ (segment (start 102.235 73.025) (end 110.363 73.025) (width 0.2032) (layer Cuivre) (net 198) (status 800))
+ (segment (start 110.3376 78.867) (end 110.3376 76.8604) (width 0.2032) (layer Composant) (net 198) (status 800))
+ (via (at 110.363 73.025) (size 0.889) (layers Composant Cuivre) (net 198))
+ (segment (start 110.363 76.835) (end 110.3376 76.8604) (width 0.2032) (layer Composant) (net 198))
+ (segment (start 102.235 73.025) (end 102.235 70.358) (width 0.2032) (layer Composant) (net 198) (status 800))
+ (segment (start 103.251 70.104) (end 103.505 69.85) (width 0.2032) (layer Composant) (net 198))
+ (segment (start 103.505 69.85) (end 103.505 61.595) (width 0.2032) (layer Composant) (net 198) (status 400))
+ (segment (start 147.574 100.3046) (end 147.32 100.0506) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 157.1752 98.9076) (end 155.067 98.9076) (width 0.2032) (layer Composant) (net 199) (status 800))
+ (segment (start 131.826 75.057) (end 127.381 75.057) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 131.191 92.329) (end 131.064 92.202) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 109.601 76.327) (end 109.347 76.073) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 131.064 92.202) (end 131.064 90.424) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 132.969 75.946) (end 132.969 88.519) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 135.382 97.409) (end 131.191 97.409) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 143.637 93.98) (end 138.811 93.98) (width 0.2032) (layer Cuivre) (net 199))
+ (via (at 131.191 97.409) (size 0.889) (layers Composant Cuivre) (net 199))
+ (segment (start 127.381 75.057) (end 125.857 76.327) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 107.696 76.073) (end 107.696 78.867) (width 0.2032) (layer Composant) (net 199))
+ (segment (start 132.588 75.819) (end 131.826 75.057) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 109.347 76.073) (end 107.696 76.073) (width 0.2032) (layer Cuivre) (net 199))
+ (via (at 155.067 98.9076) (size 0.889) (layers Composant Cuivre) (net 199))
+ (segment (start 155.067 98.9076) (end 153.924 98.9076) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 131.191 97.409) (end 131.191 92.329) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 153.924 98.9076) (end 152.527 100.3046) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 132.588 75.819) (end 132.969 75.946) (width 0.2032) (layer VCC_layer) (net 199))
+ (via (at 132.588 75.819) (size 0.889) (layers Composant Cuivre) (net 199))
+ (segment (start 132.969 88.519) (end 131.064 90.424) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 152.527 100.3046) (end 147.574 100.3046) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 147.32 97.663) (end 143.637 93.98) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 147.32 98.425) (end 147.32 97.663) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 125.857 76.327) (end 109.601 76.327) (width 0.2032) (layer Cuivre) (net 199))
+ (via (at 107.696 76.073) (size 0.889) (layers Composant Cuivre) (net 199))
+ (via (at 147.32 98.425) (size 0.889) (layers Composant Cuivre) (net 199))
+ (segment (start 147.32 100.0506) (end 147.32 98.425) (width 0.2032) (layer VCC_layer) (net 199))
+ (segment (start 138.811 93.98) (end 135.382 97.409) (width 0.2032) (layer Cuivre) (net 199))
+ (segment (start 107.696 78.867) (end 107.7468 78.867) (width 0.2032) (layer Composant) (net 199) (status 400))
+ (segment (start 129.54 57.912) (end 129.54 58.928) (width 0.2032) (layer Composant) (net 200) (status 400))
+ (segment (start 129.54 58.928) (end 129.54 59.69) (width 0.2032) (layer Composant) (net 200) (status 800))
+ (segment (start 129.794 59.944) (end 130.175 59.944) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 122.047 60.325) (end 122.047 57.912) (width 0.2032) (layer Composant) (net 200) (status 800))
+ (segment (start 130.175 59.944) (end 131.826 59.944) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 131.826 59.944) (end 132.08 59.69) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 122.047 57.912) (end 122.301 57.658) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 132.08 64.262) (end 132.08 58.928) (width 0.2032) (layer Composant) (net 200) (status C00))
+ (segment (start 122.047 60.325) (end 122.047 62.738) (width 0.2032) (layer Composant) (net 200) (status 800))
+ (segment (start 122.301 57.658) (end 129.286 57.658) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 129.286 57.658) (end 129.54 57.912) (width 0.2032) (layer Composant) (net 200))
+ (via (at 130.175 61.595) (size 0.889) (layers Composant Cuivre) (net 200))
+ (segment (start 130.175 61.595) (end 130.175 59.944) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 128.524 61.595) (end 130.175 61.595) (width 0.2032) (layer Cuivre) (net 200) (status 800))
+ (segment (start 129.54 59.69) (end 129.794 59.944) (width 0.2032) (layer Composant) (net 200))
+ (segment (start 122.047 62.738) (end 122.174 63.119) (width 0.2032) (layer Composant) (net 200) (status 400))
+ (segment (start 132.08 59.69) (end 132.08 58.928) (width 0.2032) (layer Composant) (net 200) (status 400))
+ (segment (start 109.6772 74.295) (end 108.839 73.4568) (width 0.2032) (layer Composant) (net 201))
+ (segment (start 108.839 64.897) (end 108.585 64.643) (width 0.2032) (layer Composant) (net 201))
+ (segment (start 109.728 62.103) (end 109.474 61.849) (width 0.2032) (layer Cuivre) (net 201))
+ (segment (start 109.474 61.849) (end 109.474 60.198) (width 0.2032) (layer Cuivre) (net 201) (status 400))
+ (segment (start 109.474 60.198) (end 107.569 62.103) (width 0.2032) (layer Cuivre) (net 201) (status 800))
+ (segment (start 109.6772 78.867) (end 109.6772 74.295) (width 0.2032) (layer Composant) (net 201) (status 800))
+ (segment (start 108.839 73.4568) (end 108.839 64.897) (width 0.2032) (layer Composant) (net 201))
+ (segment (start 108.585 64.643) (end 107.569 64.643) (width 0.2032) (layer Composant) (net 201) (status 400))
+ (segment (start 107.569 62.103) (end 107.569 64.643) (width 0.2032) (layer Cuivre) (net 201) (status 400))
+ (segment (start 110.236 62.103) (end 109.728 62.103) (width 0.2032) (layer Cuivre) (net 201) (status 800))
+ (via (at 130.175 75.819) (size 0.889) (layers Composant Cuivre) (net 202))
+ (segment (start 91.059 83.947) (end 90.297 83.185) (width 0.2032) (layer Composant) (net 202))
+ (via (at 90.297 83.185) (size 0.889) (layers Composant Cuivre) (net 202))
+ (segment (start 91.059 83.947) (end 92.456 83.947) (width 0.2032) (layer Composant) (net 202) (status 400))
+ (via (at 310.388 80.899) (size 0.889) (layers Composant Cuivre) (net 202))
+ (segment (start 310.388 80.899) (end 310.388 82.169) (width 0.2032) (layer Composant) (net 202))
+ (segment (start 129.54 76.835) (end 93.98 76.835) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 134.366 66.167) (end 130.429 66.167) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 309.626 80.137) (end 309.626 66.548) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 130.175 76.2) (end 129.54 76.835) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 90.297 83.185) (end 91.694 81.788) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 130.429 66.167) (end 129.54 67.056) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 162.052 65.659) (end 163.068 66.675) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 241.3 66.675) (end 163.068 66.675) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 129.54 67.056) (end 129.54 67.437) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 241.681 66.294) (end 241.3 66.675) (width 0.2032) (layer Cuivre) (net 202))
+ (via (at 129.54 67.437) (size 0.889) (layers Composant Cuivre) (net 202))
+ (segment (start 130.175 75.819) (end 130.175 76.2) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 129.54 72.5678) (end 129.54 67.437) (width 0.2032) (layer Composant) (net 202) (status 800))
+ (segment (start 129.54 72.5678) (end 129.54 75.184) (width 0.2032) (layer Composant) (net 202) (status 800))
+ (segment (start 134.874 65.659) (end 162.052 65.659) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 134.366 66.167) (end 134.874 65.659) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 310.388 82.169) (end 310.4388 82.169) (width 0.2032) (layer Composant) (net 202) (status 400))
+ (segment (start 93.98 76.835) (end 91.694 79.121) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 309.626 66.548) (end 309.372 66.294) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 241.681 66.294) (end 309.372 66.294) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 130.175 75.819) (end 129.54 75.184) (width 0.2032) (layer Composant) (net 202))
+ (segment (start 91.694 79.121) (end 91.694 81.788) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 310.388 80.899) (end 309.626 80.137) (width 0.2032) (layer Cuivre) (net 202))
+ (segment (start 131.445 75.819) (end 131.445 76.2) (width 0.2032) (layer Cuivre) (net 203))
+ (via (at 131.445 75.819) (size 0.889) (layers Composant Cuivre) (net 203))
+ (segment (start 94.361 83.947) (end 93.726 83.312) (width 0.2032) (layer Composant) (net 203))
+ (segment (start 130.81 72.644) (end 130.8354 72.5678) (width 0.2032) (layer Composant) (net 203) (status 400))
+ (segment (start 130.175 77.47) (end 94.234 77.47) (width 0.2032) (layer Cuivre) (net 203))
+ (via (at 94.361 83.947) (size 0.889) (layers Composant Cuivre) (net 203))
+ (segment (start 94.234 77.47) (end 92.837 78.867) (width 0.2032) (layer Cuivre) (net 203))
+ (segment (start 131.445 75.819) (end 130.81 75.184) (width 0.2032) (layer Composant) (net 203))
+ (segment (start 92.71 83.312) (end 92.456 83.2866) (width 0.2032) (layer Composant) (net 203) (status 400))
+ (segment (start 130.81 75.184) (end 130.81 72.644) (width 0.2032) (layer Composant) (net 203))
+ (segment (start 92.837 78.867) (end 92.837 82.423) (width 0.2032) (layer Cuivre) (net 203))
+ (segment (start 131.445 76.2) (end 130.175 77.47) (width 0.2032) (layer Cuivre) (net 203))
+ (segment (start 93.726 83.312) (end 92.71 83.312) (width 0.2032) (layer Composant) (net 203))
+ (segment (start 94.361 83.947) (end 92.837 82.423) (width 0.2032) (layer Cuivre) (net 203))
+ (segment (start 294.259 66.929) (end 292.481 68.707) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 294.894 59.182) (end 295.656 59.182) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 94.361 82.804) (end 93.599 82.804) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 132.08 76.835) (end 136.525 76.835) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 143.51 76.581) (end 144.907 75.184) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 144.907 75.184) (end 152.146 75.184) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 152.146 75.184) (end 152.654 75.692) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 93.472 82.677) (end 92.964 82.677) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 92.964 82.677) (end 92.456 82.6516) (width 0.2032) (layer Composant) (net 204) (status 400))
+ (via (at 94.361 82.804) (size 0.889) (layers Composant Cuivre) (net 204))
+ (segment (start 153.035 75.692) (end 153.035 74.422) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 136.779 76.581) (end 143.51 76.581) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 93.345 82.169) (end 93.599 82.423) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 153.5938 72.5678) (end 153.5938 74.168) (width 0.2032) (layer Composant) (net 204) (status 800))
+ (segment (start 93.98 82.423) (end 93.599 82.423) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 299.466 82.169) (end 299.4406 82.169) (width 0.2032) (layer Composant) (net 204) (status 400))
+ (segment (start 156.083 67.945) (end 155.956 67.945) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 293.624 57.912) (end 294.894 59.182) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 158.877 57.912) (end 293.624 57.912) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 299.466 82.804) (end 299.466 82.169) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 298.577 83.312) (end 298.958 83.312) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 156.337 60.452) (end 158.877 57.912) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 130.81 78.105) (end 132.08 76.835) (width 0.2032) (layer Cuivre) (net 204))
+ (via (at 153.035 75.692) (size 0.889) (layers Composant Cuivre) (net 204))
+ (segment (start 292.481 68.707) (end 292.481 79.502) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 153.5938 72.5678) (end 153.5938 70.358) (width 0.2032) (layer Composant) (net 204) (status 800))
+ (segment (start 295.91 82.931) (end 298.196 82.931) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 153.035 74.422) (end 153.289 74.168) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 153.5938 74.168) (end 153.289 74.168) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 93.345 79.375) (end 93.345 82.169) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 94.361 82.804) (end 93.98 82.423) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 152.654 75.692) (end 153.035 75.692) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 93.599 82.804) (end 93.472 82.677) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 156.337 67.691) (end 156.083 67.945) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 136.525 76.835) (end 136.779 76.581) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 156.337 67.691) (end 156.337 60.452) (width 0.2032) (layer Composant) (net 204))
+ (via (at 295.656 59.182) (size 0.889) (layers Composant Cuivre) (net 204))
+ (segment (start 295.656 59.182) (end 294.259 60.579) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 298.196 82.931) (end 298.577 83.312) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 294.259 60.579) (end 294.259 66.929) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 298.958 83.312) (end 299.466 82.804) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 155.956 67.945) (end 153.5938 70.358) (width 0.2032) (layer Composant) (net 204))
+ (via (at 158.877 57.912) (size 0.889) (layers Composant Cuivre) (net 204))
+ (segment (start 94.615 78.105) (end 93.345 79.375) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 130.81 78.105) (end 94.615 78.105) (width 0.2032) (layer Cuivre) (net 204))
+ (segment (start 292.481 79.502) (end 295.91 82.931) (width 0.2032) (layer Composant) (net 204))
+ (segment (start 312.674 132.842) (end 314.071 131.445) (width 0.2032) (layer Cuivre) (net 205))
+ (via (at 160.782 147.955) (size 0.889) (layers Composant Cuivre) (net 205))
+ (segment (start 200.787 143.002) (end 202.946 140.843) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 73.406 145.923) (end 73.533 145.923) (width 0.2032) (layer Cuivre) (net 205) (status 800))
+ (segment (start 344.043 130.175) (end 341.503 130.175) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 200.787 143.002) (end 193.802 143.002) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 188.849 147.955) (end 162.941 147.955) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 202.946 134.366) (end 202.946 140.843) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 314.071 131.445) (end 316.611 131.445) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 312.674 132.842) (end 203.581 132.842) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 86.106 146.05) (end 83.185 146.05) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 86.487 95.377) (end 86.487 104.394) (width 0.2032) (layer Composant) (net 205))
+ (segment (start 341.249 130.429) (end 341.249 132.588) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 73.406 147.828) (end 73.66 148.082) (width 0.2032) (layer Cuivre) (net 205))
+ (via (at 86.233 104.902) (size 0.889) (layers Composant Cuivre) (net 205))
+ (segment (start 193.802 143.002) (end 188.849 147.955) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 86.106 146.05) (end 86.106 130.429) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 105.664 146.05) (end 86.106 146.05) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 71.755 144.145) (end 70.485 144.145) (width 0.2032) (layer Cuivre) (net 205) (status 400))
+ (segment (start 129.286 146.05) (end 127.635 146.05) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 83.693 128.016) (end 83.693 125.857) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 159.893 147.955) (end 160.782 147.955) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 73.66 148.082) (end 81.153 148.082) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 346.075 127.635) (end 344.043 129.667) (width 0.2032) (layer Composant) (net 205) (status 800))
+ (segment (start 203.327 133.096) (end 203.581 132.842) (width 0.2032) (layer Cuivre) (net 205))
+ (via (at 105.664 146.05) (size 0.889) (layers Composant Cuivre) (net 205))
+ (segment (start 86.487 104.394) (end 86.233 104.648) (width 0.2032) (layer Composant) (net 205))
+ (segment (start 159.893 147.955) (end 158.623 146.685) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 158.623 146.685) (end 157.861 146.685) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 157.861 146.685) (end 157.353 146.177) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 157.353 146.177) (end 129.413 146.177) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 129.413 146.177) (end 129.286 146.05) (width 0.2032) (layer VCC_layer) (net 205))
+ (via (at 344.043 130.175) (size 0.889) (layers Composant Cuivre) (net 205))
+ (segment (start 127.635 146.05) (end 126.746 146.939) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 81.153 148.082) (end 83.185 146.05) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 160.782 147.955) (end 161.036 148.209) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 106.553 146.939) (end 105.664 146.05) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 126.746 146.939) (end 106.553 146.939) (width 0.2032) (layer VCC_layer) (net 205))
+ (segment (start 344.043 129.667) (end 344.043 130.175) (width 0.2032) (layer Composant) (net 205))
+ (segment (start 316.611 131.445) (end 318.008 132.842) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 86.233 104.648) (end 86.233 104.902) (width 0.2032) (layer Composant) (net 205))
+ (segment (start 203.327 133.985) (end 203.327 133.096) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 341.249 132.588) (end 340.995 132.842) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 203.327 133.985) (end 202.946 134.366) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 73.533 145.923) (end 71.755 144.145) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 86.233 104.902) (end 86.233 123.317) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 162.687 148.209) (end 161.036 148.209) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 341.503 130.175) (end 341.249 130.429) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 340.995 132.842) (end 318.008 132.842) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 83.82 92.71) (end 86.487 95.377) (width 0.2032) (layer Composant) (net 205) (status 800))
+ (segment (start 86.106 130.429) (end 83.693 128.016) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 86.233 123.317) (end 83.693 125.857) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 73.406 145.923) (end 73.406 147.828) (width 0.2032) (layer Cuivre) (net 205) (status 800))
+ (segment (start 162.941 147.955) (end 162.687 148.209) (width 0.2032) (layer Cuivre) (net 205))
+ (segment (start 85.725 115.062) (end 85.725 106.553) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 86.995 105.283) (end 86.995 93.726) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 86.106 78.359) (end 85.344 77.597) (width 0.2032) (layer Composant) (net 206))
+ (via (at 79.883 119.634) (size 0.889) (layers Composant Cuivre) (net 206))
+ (segment (start 86.741 79.883) (end 86.106 79.248) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 86.741 93.472) (end 86.741 79.883) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 79.883 77.597) (end 79.629 77.851) (width 0.2032) (layer Cuivre) (net 206))
+ (segment (start 86.995 93.726) (end 86.741 93.472) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 82.677 77.597) (end 79.883 77.597) (width 0.2032) (layer Cuivre) (net 206))
+ (via (at 79.629 78.613) (size 0.889) (layers Composant Cuivre) (net 206))
+ (segment (start 86.995 105.283) (end 85.725 106.553) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 81.153 119.634) (end 85.725 115.062) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 79.629 80.264) (end 79.629 78.613) (width 0.2032) (layer Composant) (net 206) (status 800))
+ (segment (start 81.153 119.634) (end 79.883 119.634) (width 0.2032) (layer Composant) (net 206))
+ (via (at 82.677 77.597) (size 0.889) (layers Composant Cuivre) (net 206))
+ (segment (start 79.629 77.851) (end 79.629 78.613) (width 0.2032) (layer Cuivre) (net 206))
+ (segment (start 86.106 79.248) (end 86.106 78.359) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 85.344 77.597) (end 82.677 77.597) (width 0.2032) (layer Composant) (net 206))
+ (segment (start 79.883 119.634) (end 79.883 120.904) (width 0.2032) (layer Cuivre) (net 206) (status 400))
+ (segment (start 68.199 137.033) (end 71.247 137.033) (width 0.2032) (layer Cuivre) (net 207))
+ (segment (start 67.945 137.287) (end 68.199 137.033) (width 0.2032) (layer Cuivre) (net 207) (status 800))
+ (segment (start 71.247 137.033) (end 71.501 136.779) (width 0.2032) (layer Cuivre) (net 207))
+ (segment (start 71.501 136.779) (end 73.406 136.779) (width 0.2032) (layer Cuivre) (net 207) (status 400))
+ (segment (start 77.089 80.264) (end 77.089 85.344) (width 0.2032) (layer Composant) (net 208) (status 800))
+ (segment (start 72.263 86.868) (end 70.739 86.868) (width 0.2032) (layer Cuivre) (net 208) (status 400))
+ (via (at 72.263 86.868) (size 0.889) (layers Composant Cuivre) (net 208))
+ (segment (start 72.263 86.868) (end 73.533 85.598) (width 0.2032) (layer Composant) (net 208))
+ (segment (start 77.089 85.344) (end 76.835 85.598) (width 0.2032) (layer Composant) (net 208))
+ (segment (start 76.835 85.598) (end 73.533 85.598) (width 0.2032) (layer Composant) (net 208))
+ (segment (start 65.786 81.915) (end 59.055 81.915) (width 0.2032) (layer Cuivre) (net 209) (status 400))
+ (segment (start 67.056 89.535) (end 66.04 88.519) (width 0.2032) (layer Cuivre) (net 209))
+ (segment (start 66.04 82.169) (end 65.786 81.915) (width 0.2032) (layer Cuivre) (net 209))
+ (segment (start 67.056 95.631) (end 67.056 89.535) (width 0.2032) (layer Cuivre) (net 209) (status 800))
+ (segment (start 66.04 88.519) (end 66.04 82.169) (width 0.2032) (layer Cuivre) (net 209))
+ (segment (start 64.897 113.411) (end 65.151 113.665) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 68.326 101.219) (end 68.326 103.378) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 75.565 114.046) (end 75.184 113.665) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 65.151 113.665) (end 75.184 113.665) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 73.025 82.55) (end 73.279 82.296) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 68.326 86.487) (end 72.263 82.55) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 65.532 98.425) (end 68.326 101.219) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 75.565 119.761) (end 75.565 114.046) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 65.151 104.013) (end 67.691 104.013) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 64.897 104.267) (end 65.151 104.013) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 65.786 86.487) (end 65.532 86.741) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 65.532 86.741) (end 65.532 98.425) (width 0.2032) (layer Composant) (net 210))
+ (via (at 75.565 119.761) (size 0.889) (layers Composant Cuivre) (net 210))
+ (segment (start 75.565 120.904) (end 75.565 119.761) (width 0.2032) (layer Cuivre) (net 210) (status 800))
+ (segment (start 64.897 104.267) (end 64.897 113.411) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 72.263 82.55) (end 73.025 82.55) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 68.326 86.487) (end 65.786 86.487) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 68.326 103.378) (end 67.691 104.013) (width 0.2032) (layer Composant) (net 210))
+ (segment (start 73.279 82.296) (end 73.279 80.264) (width 0.2032) (layer Composant) (net 210) (status 400))
+ (segment (start 72.771 134.493) (end 67.945 134.493) (width 0.2032) (layer Cuivre) (net 211) (status 400))
+ (segment (start 73.533 133.731) (end 72.771 134.493) (width 0.2032) (layer Cuivre) (net 211))
+ (segment (start 73.406 133.731) (end 73.533 133.731) (width 0.2032) (layer Cuivre) (net 211) (status 800))
+ (segment (start 166.116 101.473) (end 166.37 101.219) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 157.1752 91.7448) (end 160.401 91.7448) (width 0.2032) (layer Composant) (net 212) (status 800))
+ (segment (start 160.401 91.7448) (end 160.8328 91.313) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.497 126.746) (end 166.497 112.268) (width 0.2032) (layer Composant) (net 212))
+ (via (at 185.801 132.588) (size 0.889) (layers Composant Cuivre) (net 212))
+ (segment (start 191.135 133.096) (end 190.627 132.588) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 170.561 128.143) (end 167.894 128.143) (width 0.2032) (layer Cuivre) (net 212))
+ (segment (start 163.957 126.746) (end 166.497 126.746) (width 0.2032) (layer Cuivre) (net 212) (status 800))
+ (segment (start 163.576 92.583) (end 165.989 92.583) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.243 92.837) (end 165.989 92.583) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 162.306 91.313) (end 163.576 92.583) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.497 126.746) (end 167.894 128.143) (width 0.2032) (layer Cuivre) (net 212))
+ (segment (start 184.023 130.81) (end 173.228 130.81) (width 0.2032) (layer Cuivre) (net 212))
+ (segment (start 160.8328 91.313) (end 162.306 91.313) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.37 101.219) (end 166.37 100.203) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.497 112.268) (end 163.957 112.268) (width 0.2032) (layer Cuivre) (net 212) (status 400))
+ (via (at 165.989 97.282) (size 0.889) (layers Composant Cuivre) (net 212))
+ (segment (start 190.627 132.588) (end 185.801 132.588) (width 0.2032) (layer Composant) (net 212))
+ (via (at 166.497 112.268) (size 0.889) (layers Composant Cuivre) (net 212))
+ (via (at 166.497 126.746) (size 0.889) (layers Composant Cuivre) (net 212))
+ (segment (start 166.116 111.887) (end 166.116 101.473) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 165.989 99.822) (end 165.989 97.282) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 185.801 132.588) (end 184.023 130.81) (width 0.2032) (layer Cuivre) (net 212))
+ (segment (start 173.228 130.81) (end 170.561 128.143) (width 0.2032) (layer Cuivre) (net 212))
+ (segment (start 165.989 97.282) (end 165.989 94.869) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.37 100.203) (end 165.989 99.822) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 192.913 133.096) (end 191.135 133.096) (width 0.2032) (layer Composant) (net 212) (status 800))
+ (segment (start 166.243 94.615) (end 166.243 92.837) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 166.497 112.268) (end 166.116 111.887) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 165.989 94.869) (end 166.243 94.615) (width 0.2032) (layer Composant) (net 212))
+ (segment (start 165.989 97.282) (end 163.957 97.282) (width 0.2032) (layer Cuivre) (net 212) (status 400))
+ (segment (start 99.06 90.805) (end 99.06 92.075) (width 0.2032) (layer Composant) (net 213))
+ (segment (start 149.987 93.472) (end 149.479 93.98) (width 0.2032) (layer VCC_layer) (net 213))
+ (segment (start 150.3426 108.5088) (end 150.3426 103.759) (width 0.2032) (layer Composant) (net 213) (status 400))
+ (segment (start 104.013 95.885) (end 102.87 95.885) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 91.567 90.678) (end 90.297 91.948) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 92.456 89.789) (end 98.044 89.789) (width 0.2032) (layer Composant) (net 213) (status 800))
+ (segment (start 99.06 90.805) (end 98.044 89.789) (width 0.2032) (layer Composant) (net 213))
+ (segment (start 99.06 92.075) (end 102.87 95.885) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 159.893 94.234) (end 157.734 94.234) (width 0.2032) (layer VCC_layer) (net 213))
+ (segment (start 157.734 94.234) (end 156.972 93.472) (width 0.2032) (layer VCC_layer) (net 213))
+ (segment (start 160.655 93.472) (end 159.893 94.234) (width 0.2032) (layer VCC_layer) (net 213))
+ (segment (start 114.173 95.504) (end 135.001 95.504) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 90.297 92.583) (end 90.297 91.948) (width 0.2032) (layer Cuivre) (net 213))
+ (via (at 161.925 93.472) (size 0.889) (layers Composant Cuivre) (net 213))
+ (via (at 99.06 92.075) (size 0.889) (layers Composant Cuivre) (net 213))
+ (segment (start 150.3426 103.759) (end 150.3426 95.7326) (width 0.2032) (layer Composant) (net 213) (status 800))
+ (segment (start 99.06 92.075) (end 97.663 90.678) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 152.9588 113.8428) (end 152.9588 111.125) (width 0.2032) (layer Composant) (net 213) (status 800))
+ (segment (start 147.32 93.98) (end 148.59 93.98) (width 0.2032) (layer Composant) (net 213))
+ (segment (start 148.59 93.98) (end 150.3426 95.7326) (width 0.2032) (layer Composant) (net 213))
+ (segment (start 152.9588 111.125) (end 150.3426 108.5088) (width 0.2032) (layer Composant) (net 213))
+ (segment (start 156.972 93.472) (end 149.987 93.472) (width 0.2032) (layer VCC_layer) (net 213))
+ (segment (start 147.32 93.98) (end 145.415 92.075) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 149.479 93.98) (end 147.32 93.98) (width 0.2032) (layer VCC_layer) (net 213))
+ (via (at 147.32 93.98) (size 0.889) (layers Composant Cuivre) (net 213))
+ (segment (start 97.663 90.678) (end 91.567 90.678) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 145.415 92.075) (end 138.43 92.075) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 163.957 93.472) (end 161.925 93.472) (width 0.2032) (layer Cuivre) (net 213) (status 800))
+ (segment (start 114.173 95.504) (end 113.665 96.012) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 104.013 95.885) (end 104.14 96.012) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 88.265 94.615) (end 90.297 92.583) (width 0.2032) (layer Cuivre) (net 213) (status 800))
+ (segment (start 113.665 96.012) (end 104.14 96.012) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 161.925 93.472) (end 160.655 93.472) (width 0.2032) (layer VCC_layer) (net 213))
+ (segment (start 135.001 95.504) (end 138.43 92.075) (width 0.2032) (layer Cuivre) (net 213))
+ (segment (start 146.05 91.44) (end 138.303 91.44) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 113.919 94.996) (end 113.411 95.504) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 103.632 95.377) (end 104.14 95.377) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 161.925 92.202) (end 149.86 92.202) (width 0.2032) (layer VCC_layer) (net 214))
+ (segment (start 104.267 95.504) (end 113.411 95.504) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 151.003 108.2802) (end 151.003 103.759) (width 0.2032) (layer Composant) (net 214) (status 400))
+ (segment (start 134.747 94.996) (end 138.303 91.44) (width 0.2032) (layer Cuivre) (net 214))
+ (via (at 100.33 92.075) (size 0.889) (layers Composant Cuivre) (net 214))
+ (segment (start 148.59 92.71) (end 151.003 95.123) (width 0.2032) (layer Composant) (net 214))
+ (segment (start 88.265 92.075) (end 90.17 90.17) (width 0.2032) (layer Cuivre) (net 214) (status 800))
+ (segment (start 104.14 95.377) (end 104.267 95.504) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 92.456 89.154) (end 98.679 89.154) (width 0.2032) (layer Composant) (net 214) (status 800))
+ (segment (start 149.86 92.202) (end 149.352 92.71) (width 0.2032) (layer VCC_layer) (net 214))
+ (segment (start 163.957 92.202) (end 161.925 92.202) (width 0.2032) (layer Cuivre) (net 214) (status 800))
+ (segment (start 100.33 90.805) (end 100.33 92.075) (width 0.2032) (layer Composant) (net 214))
+ (segment (start 90.17 90.17) (end 98.425 90.17) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 149.352 92.71) (end 147.32 92.71) (width 0.2032) (layer VCC_layer) (net 214))
+ (segment (start 151.003 103.759) (end 151.003 95.123) (width 0.2032) (layer Composant) (net 214) (status 800))
+ (segment (start 113.919 94.996) (end 134.747 94.996) (width 0.2032) (layer Cuivre) (net 214))
+ (via (at 147.32 92.71) (size 0.889) (layers Composant Cuivre) (net 214))
+ (segment (start 103.632 95.377) (end 100.33 92.075) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 147.32 92.71) (end 148.59 92.71) (width 0.2032) (layer Composant) (net 214))
+ (segment (start 147.32 92.71) (end 146.05 91.44) (width 0.2032) (layer Cuivre) (net 214))
+ (segment (start 100.33 90.805) (end 98.679 89.154) (width 0.2032) (layer Composant) (net 214))
+ (segment (start 153.5938 110.871) (end 151.003 108.2802) (width 0.2032) (layer Composant) (net 214))
+ (segment (start 100.33 92.075) (end 98.425 90.17) (width 0.2032) (layer Cuivre) (net 214))
+ (via (at 161.925 92.202) (size 0.889) (layers Composant Cuivre) (net 214))
+ (segment (start 153.5938 113.8428) (end 153.5938 110.871) (width 0.2032) (layer Composant) (net 214) (status 800))
+ (segment (start 113.665 94.488) (end 113.157 94.996) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 148.59 91.44) (end 151.6634 94.5134) (width 0.2032) (layer Composant) (net 215))
+ (segment (start 113.665 94.488) (end 134.493 94.488) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 157.48 113.792) (end 151.6634 107.9754) (width 0.2032) (layer Composant) (net 215))
+ (via (at 165.481 90.932) (size 0.889) (layers Composant Cuivre) (net 215))
+ (segment (start 134.493 94.488) (end 138.176 90.805) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 101.6 92.075) (end 104.521 94.996) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 113.157 94.996) (end 104.521 94.996) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 151.6634 103.759) (end 151.6634 107.9754) (width 0.2032) (layer Composant) (net 215) (status 800))
+ (segment (start 147.32 91.44) (end 148.59 91.44) (width 0.2032) (layer Composant) (net 215))
+ (segment (start 146.685 90.805) (end 138.176 90.805) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 151.6634 103.759) (end 151.6634 94.5134) (width 0.2032) (layer Composant) (net 215) (status 800))
+ (via (at 101.6 92.075) (size 0.889) (layers Composant Cuivre) (net 215))
+ (via (at 147.32 91.44) (size 0.889) (layers Composant Cuivre) (net 215))
+ (segment (start 165.481 90.932) (end 163.957 90.932) (width 0.2032) (layer Cuivre) (net 215) (status 400))
+ (segment (start 165.481 90.932) (end 149.86 90.932) (width 0.2032) (layer VCC_layer) (net 215))
+ (segment (start 157.48 113.792) (end 157.48 116.7638) (width 0.2032) (layer Composant) (net 215))
+ (segment (start 101.6 92.075) (end 99.187 89.662) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 149.352 91.44) (end 147.32 91.44) (width 0.2032) (layer VCC_layer) (net 215))
+ (segment (start 101.6 90.805) (end 99.2886 88.4936) (width 0.2032) (layer Composant) (net 215))
+ (segment (start 92.456 88.4936) (end 99.2886 88.4936) (width 0.2032) (layer Composant) (net 215) (status 800))
+ (segment (start 149.86 90.932) (end 149.352 91.44) (width 0.2032) (layer VCC_layer) (net 215))
+ (segment (start 88.265 89.535) (end 89.535 89.535) (width 0.2032) (layer Cuivre) (net 215) (status 800))
+ (segment (start 101.6 90.805) (end 101.6 92.075) (width 0.2032) (layer Composant) (net 215))
+ (segment (start 89.662 89.662) (end 99.187 89.662) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 89.535 89.535) (end 89.662 89.662) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 147.32 91.44) (end 146.685 90.805) (width 0.2032) (layer Cuivre) (net 215))
+ (segment (start 157.48 116.7638) (end 157.1752 116.7638) (width 0.2032) (layer Composant) (net 215) (status 400))
+ (segment (start 157.1752 98.2472) (end 155.575 98.2472) (width 0.2032) (layer Composant) (net 216) (status 800))
+ (segment (start 161.925 115.0112) (end 161.925 98.552) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 161.925 90.17) (end 162.433 89.662) (width 0.2032) (layer VCC_layer) (net 216))
+ (segment (start 159.3342 98.171) (end 161.544 98.171) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 102.87 92.075) (end 99.949 89.154) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 161.925 98.552) (end 161.544 98.171) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 100.33 86.614) (end 100.33 88.265) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 157.1752 98.2472) (end 159.258 98.2472) (width 0.2032) (layer Composant) (net 216) (status 800))
+ (segment (start 90.424 89.154) (end 99.949 89.154) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 152.4 96.647) (end 152.4 93.98) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 147.32 90.17) (end 161.925 90.17) (width 0.2032) (layer VCC_layer) (net 216))
+ (segment (start 157.1752 117.4242) (end 159.512 117.4242) (width 0.2032) (layer Composant) (net 216) (status 800))
+ (segment (start 155.575 98.2472) (end 155.575 98.044) (width 0.2032) (layer Composant) (net 216))
+ (via (at 102.87 92.075) (size 0.889) (layers Composant Cuivre) (net 216))
+ (via (at 165.481 89.662) (size 0.889) (layers Composant Cuivre) (net 216))
+ (segment (start 102.87 90.805) (end 100.33 88.265) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 105.283 94.488) (end 112.903 94.488) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 152.4 96.647) (end 153.797 98.044) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 159.512 117.4242) (end 161.925 115.0112) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 93.853 86.5632) (end 92.583 86.5632) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 159.258 98.2472) (end 159.3342 98.171) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 152.4 93.98) (end 148.59 90.17) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 92.583 86.5632) (end 92.456 86.5378) (width 0.2032) (layer Composant) (net 216) (status 400))
+ (segment (start 88.265 86.995) (end 90.424 89.154) (width 0.2032) (layer Cuivre) (net 216) (status 800))
+ (segment (start 93.853 86.5632) (end 94.0562 86.36) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 113.411 93.98) (end 134.239 93.98) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 113.411 93.98) (end 112.903 94.488) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 102.87 92.075) (end 105.283 94.488) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 94.0562 86.36) (end 100.076 86.36) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 165.481 89.662) (end 162.433 89.662) (width 0.2032) (layer VCC_layer) (net 216))
+ (segment (start 102.87 90.805) (end 102.87 92.075) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 134.239 93.98) (end 138.049 90.17) (width 0.2032) (layer Cuivre) (net 216))
+ (via (at 147.32 90.17) (size 0.889) (layers Composant Cuivre) (net 216))
+ (segment (start 163.957 89.662) (end 165.481 89.662) (width 0.2032) (layer Cuivre) (net 216) (status 800))
+ (segment (start 147.32 90.17) (end 138.049 90.17) (width 0.2032) (layer Cuivre) (net 216))
+ (segment (start 148.59 90.17) (end 147.32 90.17) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 100.076 86.36) (end 100.33 86.614) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 155.575 98.044) (end 153.797 98.044) (width 0.2032) (layer Composant) (net 216))
+ (segment (start 113.157 93.472) (end 112.649 93.98) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 157.1752 118.0592) (end 159.766 118.0592) (width 0.2032) (layer Composant) (net 217) (status 800))
+ (segment (start 104.14 92.075) (end 106.045 93.98) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 90.678 88.646) (end 100.711 88.646) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 89.027 85.852) (end 88.519 85.852) (width 0.2032) (layer Cuivre) (net 217))
+ (via (at 147.32 88.9) (size 0.889) (layers Composant Cuivre) (net 217))
+ (segment (start 146.685 89.535) (end 147.32 88.9) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 163.957 88.392) (end 162.433 88.392) (width 0.2032) (layer Cuivre) (net 217) (status 800))
+ (segment (start 148.59 88.9) (end 147.32 88.9) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 153.035 93.345) (end 148.59 88.9) (width 0.2032) (layer Composant) (net 217))
+ (via (at 162.433 88.392) (size 0.889) (layers Composant Cuivre) (net 217))
+ (segment (start 161.925 88.392) (end 162.433 88.392) (width 0.2032) (layer VCC_layer) (net 217))
+ (segment (start 148.971 89.662) (end 148.209 88.9) (width 0.2032) (layer VCC_layer) (net 217))
+ (segment (start 160.655 89.662) (end 148.971 89.662) (width 0.2032) (layer VCC_layer) (net 217))
+ (segment (start 113.157 93.472) (end 133.985 93.472) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 105.41 88.9) (end 101.727 85.217) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 93.218 85.217) (end 92.456 85.2424) (width 0.2032) (layer Composant) (net 217) (status 400))
+ (segment (start 157.1752 97.5868) (end 161.8488 97.5868) (width 0.2032) (layer Composant) (net 217) (status 800))
+ (segment (start 162.433 98.171) (end 161.8488 97.5868) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 162.433 98.171) (end 162.433 115.3922) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 112.649 93.98) (end 106.045 93.98) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 162.433 115.3922) (end 159.766 118.0592) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 89.408 87.376) (end 90.678 88.646) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 88.519 85.852) (end 88.265 85.598) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 153.035 96.266) (end 154.3558 97.5868) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 157.1752 97.5868) (end 154.3558 97.5868) (width 0.2032) (layer Composant) (net 217) (status 800))
+ (segment (start 148.209 88.9) (end 147.32 88.9) (width 0.2032) (layer VCC_layer) (net 217))
+ (via (at 104.14 92.075) (size 0.889) (layers Composant Cuivre) (net 217))
+ (segment (start 101.727 85.217) (end 93.218 85.217) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 89.408 86.233) (end 89.408 87.376) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 137.922 89.535) (end 146.685 89.535) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 104.14 92.075) (end 105.41 90.805) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 161.925 88.392) (end 160.655 89.662) (width 0.2032) (layer VCC_layer) (net 217))
+ (segment (start 104.14 92.075) (end 100.711 88.646) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 89.027 85.852) (end 89.408 86.233) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 88.265 85.598) (end 88.265 84.455) (width 0.2032) (layer Cuivre) (net 217) (status 400))
+ (segment (start 105.41 90.805) (end 105.41 88.9) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 133.985 93.472) (end 137.922 89.535) (width 0.2032) (layer Cuivre) (net 217))
+ (segment (start 153.035 96.266) (end 153.035 93.345) (width 0.2032) (layer Composant) (net 217))
+ (segment (start 89.916 87.249) (end 90.805 88.138) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 147.828 87.63) (end 147.32 87.63) (width 0.2032) (layer VCC_layer) (net 218))
+ (segment (start 104.14 90.805) (end 104.14 88.9) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 133.731 92.964) (end 112.903 92.964) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 159.893 89.154) (end 149.352 89.154) (width 0.2032) (layer VCC_layer) (net 218))
+ (segment (start 162.941 97.79) (end 162.1028 96.9518) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 157.1752 119.3546) (end 161.29 119.3546) (width 0.2032) (layer Composant) (net 218) (status 800))
+ (segment (start 137.795 88.9) (end 146.05 88.9) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 161.925 87.122) (end 162.433 87.122) (width 0.2032) (layer VCC_layer) (net 218))
+ (segment (start 161.925 87.122) (end 159.893 89.154) (width 0.2032) (layer VCC_layer) (net 218))
+ (via (at 162.433 87.122) (size 0.889) (layers Composant Cuivre) (net 218))
+ (segment (start 106.807 93.472) (end 112.395 93.472) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 89.916 87.249) (end 89.916 85.725) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 148.59 87.63) (end 147.32 87.63) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 104.14 90.805) (end 106.807 93.472) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 89.281 83.693) (end 89.281 85.09) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 147.32 87.63) (end 146.05 88.9) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 157.1752 96.9518) (end 162.1028 96.9518) (width 0.2032) (layer Composant) (net 218) (status 800))
+ (segment (start 133.731 92.964) (end 137.795 88.9) (width 0.2032) (layer Cuivre) (net 218))
+ (via (at 104.14 90.805) (size 0.889) (layers Composant Cuivre) (net 218))
+ (segment (start 104.14 90.805) (end 101.473 88.138) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 112.903 92.964) (end 112.395 93.472) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 149.352 89.154) (end 147.828 87.63) (width 0.2032) (layer VCC_layer) (net 218))
+ (segment (start 162.941 97.79) (end 162.941 117.729) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 89.281 83.693) (end 88.265 82.677) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 153.67 95.885) (end 154.7368 96.9518) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 163.957 87.122) (end 162.433 87.122) (width 0.2032) (layer Cuivre) (net 218) (status 800))
+ (segment (start 88.265 82.677) (end 88.265 81.915) (width 0.2032) (layer Cuivre) (net 218) (status 400))
+ (segment (start 161.29 119.3546) (end 162.941 117.729) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 101.1428 85.9028) (end 92.456 85.9028) (width 0.2032) (layer Composant) (net 218) (status 400))
+ (segment (start 153.67 95.885) (end 153.67 92.71) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 90.805 88.138) (end 101.473 88.138) (width 0.2032) (layer Cuivre) (net 218))
+ (segment (start 104.14 88.9) (end 101.1428 85.9028) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 153.67 92.71) (end 148.59 87.63) (width 0.2032) (layer Composant) (net 218))
+ (segment (start 157.1752 96.9518) (end 154.7368 96.9518) (width 0.2032) (layer Composant) (net 218) (status 800))
+ (segment (start 89.281 85.09) (end 89.916 85.725) (width 0.2032) (layer Cuivre) (net 218))
+ (via (at 147.32 87.63) (size 0.889) (layers Composant Cuivre) (net 218))
+ (segment (start 163.957 125.476) (end 165.354 125.476) (width 0.2032) (layer Cuivre) (net 219) (status 800))
+ (segment (start 128.905 139.8651) (end 128.905 139.065) (width 0.2032) (layer Composant) (net 219))
+ (segment (start 102.87 140.335) (end 125.984 140.335) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 128.5875 140.1826) (end 128.905 139.8651) (width 0.2032) (layer Composant) (net 219))
+ (segment (start 100.33 142.875) (end 102.87 140.335) (width 0.2032) (layer Cuivre) (net 219) (status 800))
+ (segment (start 128.905 139.065) (end 127.254 139.065) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 166.751 137.033) (end 166.751 138.557) (width 0.2032) (layer VCC_layer) (net 219))
+ (segment (start 129.794 138.176) (end 152.273 138.176) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 167.005 133.731) (end 165.354 132.08) (width 0.2032) (layer VCC_layer) (net 219))
+ (segment (start 167.005 133.731) (end 167.005 136.779) (width 0.2032) (layer VCC_layer) (net 219))
+ (segment (start 128.905 139.065) (end 129.794 138.176) (width 0.2032) (layer Cuivre) (net 219))
+ (via (at 165.354 125.476) (size 0.889) (layers Composant Cuivre) (net 219))
+ (segment (start 166.243 138.557) (end 166.751 138.557) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 165.354 125.476) (end 165.354 132.08) (width 0.2032) (layer VCC_layer) (net 219))
+ (via (at 128.905 139.065) (size 0.889) (layers Composant Cuivre) (net 219))
+ (via (at 166.751 138.557) (size 0.889) (layers Composant Cuivre) (net 219))
+ (segment (start 165.989 138.303) (end 166.243 138.557) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 125.984 140.1826) (end 128.5875 140.1826) (width 0.2032) (layer Composant) (net 219) (status 800))
+ (segment (start 125.984 140.335) (end 127.254 139.065) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 152.273 138.176) (end 152.4 138.303) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 152.4 138.303) (end 165.989 138.303) (width 0.2032) (layer Cuivre) (net 219))
+ (segment (start 167.005 136.779) (end 166.751 137.033) (width 0.2032) (layer VCC_layer) (net 219))
+ (via (at 132.207 135.763) (size 0.889) (layers Composant Cuivre) (net 220))
+ (segment (start 132.207 135.763) (end 132.842 135.128) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 131.445 139.065) (end 130.048 140.462) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 131.445 139.065) (end 131.953 138.557) (width 0.2032) (layer Composant) (net 220))
+ (segment (start 138.176 135.128) (end 144.526 128.778) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 130.048 140.462) (end 127.635 140.462) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 131.953 135.763) (end 128.5494 132.3594) (width 0.2032) (layer Composant) (net 220))
+ (via (at 131.445 139.065) (size 0.889) (layers Composant Cuivre) (net 220))
+ (segment (start 163.957 124.206) (end 165.354 124.206) (width 0.2032) (layer Cuivre) (net 220) (status 800))
+ (via (at 165.354 124.206) (size 0.889) (layers Composant Cuivre) (net 220))
+ (segment (start 165.354 124.206) (end 163.4236 124.206) (width 0.2032) (layer VCC_layer) (net 220))
+ (segment (start 106.934 141.351) (end 105.41 142.875) (width 0.2032) (layer Cuivre) (net 220) (status 400))
+ (via (at 150.114 128.778) (size 0.889) (layers Composant Cuivre) (net 220))
+ (segment (start 150.114 128.778) (end 148.717 128.778) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 127.635 140.462) (end 126.746 141.351) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 131.953 135.763) (end 131.953 138.557) (width 0.2032) (layer Composant) (net 220))
+ (segment (start 132.842 135.128) (end 138.176 135.128) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 126.746 141.351) (end 106.934 141.351) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 131.953 135.763) (end 132.207 135.763) (width 0.2032) (layer Composant) (net 220))
+ (segment (start 125.984 132.3594) (end 128.5494 132.3594) (width 0.2032) (layer Composant) (net 220) (status 800))
+ (segment (start 152.8826 125.2474) (end 162.3822 125.2474) (width 0.2032) (layer VCC_layer) (net 220))
+ (segment (start 162.3822 125.2474) (end 163.4236 124.206) (width 0.2032) (layer VCC_layer) (net 220))
+ (segment (start 150.114 128.016) (end 152.8826 125.2474) (width 0.2032) (layer VCC_layer) (net 220))
+ (segment (start 150.114 128.778) (end 150.114 128.016) (width 0.2032) (layer VCC_layer) (net 220))
+ (segment (start 144.526 128.778) (end 148.717 128.778) (width 0.2032) (layer Cuivre) (net 220))
+ (segment (start 122.301 129.286) (end 127.127 124.46) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 147.701 121.793) (end 148.209 121.285) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 147.701 122.555) (end 147.701 121.793) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 161.29 122.936) (end 165.354 122.936) (width 0.2032) (layer VCC_layer) (net 221))
+ (segment (start 128.905 124.46) (end 127.127 124.46) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 153.797 121.666) (end 153.416 121.285) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 97.79 127) (end 100.076 129.286) (width 0.2032) (layer Cuivre) (net 221) (status 800))
+ (segment (start 160.02 121.666) (end 161.29 122.936) (width 0.2032) (layer VCC_layer) (net 221))
+ (segment (start 128.905 124.46) (end 129.159 124.714) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 160.02 121.666) (end 153.797 121.666) (width 0.2032) (layer VCC_layer) (net 221))
+ (segment (start 128.905 124.5616) (end 128.905 124.46) (width 0.2032) (layer Composant) (net 221))
+ (segment (start 135.509 124.714) (end 135.763 124.46) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 145.796 124.46) (end 147.701 122.555) (width 0.2032) (layer Cuivre) (net 221))
+ (via (at 153.797 121.666) (size 0.889) (layers Composant Cuivre) (net 221))
+ (segment (start 135.763 124.46) (end 145.796 124.46) (width 0.2032) (layer Cuivre) (net 221))
+ (via (at 165.354 122.936) (size 0.889) (layers Composant Cuivre) (net 221))
+ (segment (start 129.159 124.714) (end 135.509 124.714) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 100.076 129.286) (end 122.301 129.286) (width 0.2032) (layer Cuivre) (net 221))
+ (segment (start 125.984 124.5616) (end 128.905 124.5616) (width 0.2032) (layer Composant) (net 221) (status 800))
+ (segment (start 163.957 122.936) (end 165.354 122.936) (width 0.2032) (layer Cuivre) (net 221) (status 800))
+ (segment (start 148.209 121.285) (end 153.416 121.285) (width 0.2032) (layer Cuivre) (net 221))
+ (via (at 128.905 124.46) (size 0.889) (layers Composant Cuivre) (net 221))
+ (segment (start 154.305 120.904) (end 147.447 120.904) (width 0.2032) (layer VCC_layer) (net 222))
+ (segment (start 128.905 119.3546) (end 128.905 119.38) (width 0.2032) (layer Composant) (net 222))
+ (segment (start 160.274 121.158) (end 154.559 121.158) (width 0.2032) (layer VCC_layer) (net 222))
+ (via (at 147.447 120.904) (size 0.889) (layers Composant Cuivre) (net 222))
+ (segment (start 163.957 121.666) (end 165.354 121.666) (width 0.2032) (layer Cuivre) (net 222) (status 800))
+ (segment (start 126.365 121.92) (end 126.365 123.698) (width 0.2032) (layer Cuivre) (net 222))
+ (via (at 165.354 121.666) (size 0.889) (layers Composant Cuivre) (net 222))
+ (segment (start 154.559 121.158) (end 154.305 120.904) (width 0.2032) (layer VCC_layer) (net 222))
+ (segment (start 104.14 128.27) (end 121.793 128.27) (width 0.2032) (layer Cuivre) (net 222))
+ (segment (start 165.354 121.666) (end 160.782 121.666) (width 0.2032) (layer VCC_layer) (net 222))
+ (segment (start 137.033 120.904) (end 135.509 119.38) (width 0.2032) (layer Cuivre) (net 222))
+ (segment (start 147.447 120.904) (end 137.033 120.904) (width 0.2032) (layer Cuivre) (net 222))
+ (via (at 128.905 119.38) (size 0.889) (layers Composant Cuivre) (net 222))
+ (segment (start 135.509 119.38) (end 128.905 119.38) (width 0.2032) (layer Cuivre) (net 222))
+ (segment (start 125.984 119.3546) (end 128.905 119.3546) (width 0.2032) (layer Composant) (net 222) (status 800))
+ (segment (start 160.782 121.666) (end 160.274 121.158) (width 0.2032) (layer VCC_layer) (net 222))
+ (segment (start 121.793 128.27) (end 126.365 123.698) (width 0.2032) (layer Cuivre) (net 222))
+ (segment (start 128.905 119.38) (end 126.365 121.92) (width 0.2032) (layer Cuivre) (net 222))
+ (segment (start 102.87 127) (end 104.14 128.27) (width 0.2032) (layer Cuivre) (net 222) (status 800))
+ (via (at 165.354 120.396) (size 0.889) (layers Composant Cuivre) (net 223))
+ (segment (start 130.175 127.635) (end 129.794 128.016) (width 0.2032) (layer Cuivre) (net 223))
+ (segment (start 90.17 127) (end 93.472 130.302) (width 0.2032) (layer Cuivre) (net 223) (status 800))
+ (segment (start 131.191 118.491) (end 131.191 123.19) (width 0.2032) (layer Composant) (net 223))
+ (segment (start 130.175 126.365) (end 130.175 127.635) (width 0.2032) (layer Cuivre) (net 223))
+ (segment (start 130.8354 113.8428) (end 130.8354 115.697) (width 0.2032) (layer Composant) (net 223) (status 800))
+ (via (at 130.175 126.365) (size 0.889) (layers Composant Cuivre) (net 223))
+ (segment (start 165.354 120.396) (end 165.354 119.507) (width 0.2032) (layer VCC_layer) (net 223))
+ (segment (start 93.472 130.302) (end 122.809 130.302) (width 0.2032) (layer Cuivre) (net 223))
+ (segment (start 165.354 119.507) (end 163.068 117.221) (width 0.2032) (layer VCC_layer) (net 223))
+ (segment (start 163.068 117.221) (end 154.051 117.221) (width 0.2032) (layer VCC_layer) (net 223))
+ (segment (start 122.809 130.302) (end 125.095 128.016) (width 0.2032) (layer Cuivre) (net 223))
+ (segment (start 131.191 123.19) (end 130.175 124.206) (width 0.2032) (layer Composant) (net 223))
+ (via (at 131.191 118.491) (size 0.889) (layers Composant Cuivre) (net 223))
+ (segment (start 130.175 124.206) (end 130.175 126.365) (width 0.2032) (layer Composant) (net 223))
+ (segment (start 147.447 118.491) (end 131.191 118.491) (width 0.2032) (layer Cuivre) (net 223))
+ (segment (start 125.095 128.016) (end 129.794 128.016) (width 0.2032) (layer Cuivre) (net 223))
+ (segment (start 130.8354 115.697) (end 131.191 116.0526) (width 0.2032) (layer Composant) (net 223))
+ (segment (start 152.781 118.491) (end 147.447 118.491) (width 0.2032) (layer VCC_layer) (net 223))
+ (via (at 147.447 118.491) (size 0.889) (layers Composant Cuivre) (net 223))
+ (segment (start 163.957 120.396) (end 165.354 120.396) (width 0.2032) (layer Cuivre) (net 223) (status 800))
+ (segment (start 131.191 118.491) (end 131.191 116.0526) (width 0.2032) (layer Composant) (net 223))
+ (segment (start 154.051 117.221) (end 152.781 118.491) (width 0.2032) (layer VCC_layer) (net 223))
+ (segment (start 138.684 119.126) (end 145.923 119.126) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 145.923 119.126) (end 146.558 119.761) (width 0.2032) (layer Cuivre) (net 224))
+ (via (at 137.795 126.365) (size 0.889) (layers Composant Cuivre) (net 224))
+ (via (at 137.795 120.015) (size 0.889) (layers Composant Cuivre) (net 224))
+ (segment (start 147.447 119.761) (end 146.558 119.761) (width 0.2032) (layer Cuivre) (net 224))
+ (via (at 147.447 119.761) (size 0.889) (layers Composant Cuivre) (net 224))
+ (segment (start 148.209 119.761) (end 148.844 119.126) (width 0.2032) (layer VCC_layer) (net 224))
+ (segment (start 138.6586 113.8428) (end 138.6586 116.8654) (width 0.2032) (layer Composant) (net 224) (status 800))
+ (segment (start 137.795 127.635) (end 134.366 131.064) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 137.795 120.015) (end 138.684 119.126) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 126.619 131.064) (end 124.206 133.477) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 97.79 135.89) (end 100.203 133.477) (width 0.2032) (layer Cuivre) (net 224) (status 800))
+ (segment (start 148.844 119.126) (end 162.941 119.126) (width 0.2032) (layer VCC_layer) (net 224))
+ (segment (start 137.795 126.365) (end 137.795 127.635) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 137.795 126.365) (end 137.795 120.015) (width 0.2032) (layer Composant) (net 224))
+ (segment (start 137.795 120.015) (end 137.795 117.729) (width 0.2032) (layer Composant) (net 224))
+ (segment (start 137.795 117.729) (end 138.6586 116.8654) (width 0.2032) (layer Composant) (net 224))
+ (via (at 162.941 119.126) (size 0.889) (layers Composant Cuivre) (net 224))
+ (segment (start 148.209 119.761) (end 147.447 119.761) (width 0.2032) (layer VCC_layer) (net 224))
+ (segment (start 124.206 133.477) (end 100.203 133.477) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 163.957 119.126) (end 162.941 119.126) (width 0.2032) (layer Cuivre) (net 224) (status 800))
+ (segment (start 126.619 131.064) (end 134.366 131.064) (width 0.2032) (layer Cuivre) (net 224))
+ (segment (start 166.37 114.554) (end 158.75 114.554) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 144.145 125.984) (end 144.399 126.238) (width 0.2032) (layer Composant) (net 225))
+ (segment (start 146.431 115.824) (end 145.415 116.84) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 123.698 138.303) (end 94.742 138.303) (width 0.2032) (layer Cuivre) (net 225))
+ (segment (start 157.607 113.411) (end 146.685 113.411) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 137.033 133.604) (end 128.397 133.604) (width 0.2032) (layer Cuivre) (net 225))
+ (segment (start 146.685 113.411) (end 146.431 113.665) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 144.145 120.015) (end 144.145 118.11) (width 0.2032) (layer Composant) (net 225))
+ (segment (start 144.399 126.238) (end 137.033 133.604) (width 0.2032) (layer Cuivre) (net 225))
+ (segment (start 146.431 113.665) (end 146.431 115.824) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 163.957 117.856) (end 165.608 117.856) (width 0.2032) (layer Cuivre) (net 225) (status 800))
+ (via (at 144.145 120.015) (size 0.889) (layers Composant Cuivre) (net 225))
+ (via (at 144.399 126.238) (size 0.889) (layers Composant Cuivre) (net 225))
+ (segment (start 144.145 118.11) (end 145.415 116.84) (width 0.2032) (layer Composant) (net 225))
+ (segment (start 90.17 142.875) (end 94.742 138.303) (width 0.2032) (layer Cuivre) (net 225) (status 800))
+ (segment (start 146.4564 113.8428) (end 146.4564 115.7986) (width 0.2032) (layer Composant) (net 225) (status 800))
+ (segment (start 145.415 116.84) (end 146.4564 115.7986) (width 0.2032) (layer Composant) (net 225))
+ (segment (start 123.698 138.303) (end 128.397 133.604) (width 0.2032) (layer Cuivre) (net 225))
+ (segment (start 166.624 114.808) (end 166.37 114.554) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 158.75 114.554) (end 157.607 113.411) (width 0.2032) (layer VCC_layer) (net 225))
+ (via (at 165.608 117.856) (size 0.889) (layers Composant Cuivre) (net 225))
+ (segment (start 166.37 117.856) (end 166.624 117.602) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 144.145 120.015) (end 144.145 125.984) (width 0.2032) (layer Composant) (net 225))
+ (via (at 145.415 116.84) (size 0.889) (layers Composant Cuivre) (net 225))
+ (segment (start 165.608 117.856) (end 166.37 117.856) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 166.624 117.602) (end 166.624 114.808) (width 0.2032) (layer VCC_layer) (net 225))
+ (segment (start 128.905 134.62) (end 124.206 139.319) (width 0.2032) (layer Cuivre) (net 226))
+ (segment (start 148.336 119.507) (end 149.606 118.11) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 137.922 134.62) (end 128.905 134.62) (width 0.2032) (layer Cuivre) (net 226))
+ (segment (start 150.241 118.11) (end 149.606 118.11) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 151.638 117.094) (end 151.638 117.348) (width 0.2032) (layer Composant) (net 226))
+ (via (at 151.892 117.729) (size 0.889) (layers Composant Cuivre) (net 226))
+ (segment (start 148.082 123.825) (end 148.336 123.571) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 150.241 118.11) (end 151.257 117.094) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 124.206 139.319) (end 98.806 139.319) (width 0.2032) (layer Cuivre) (net 226))
+ (via (at 148.082 127.889) (size 0.889) (layers Composant Cuivre) (net 226))
+ (via (at 165.608 116.586) (size 0.889) (layers Composant Cuivre) (net 226))
+ (segment (start 95.25 142.875) (end 98.806 139.319) (width 0.2032) (layer Cuivre) (net 226) (status 800))
+ (segment (start 148.336 123.571) (end 148.336 119.507) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 148.082 127.889) (end 148.082 123.825) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 151.638 117.348) (end 151.892 117.602) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 148.082 127.889) (end 144.653 127.889) (width 0.2032) (layer Cuivre) (net 226))
+ (segment (start 151.892 117.602) (end 151.892 117.729) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 152.4 117.729) (end 153.543 116.586) (width 0.2032) (layer VCC_layer) (net 226))
+ (segment (start 151.892 117.729) (end 152.4 117.729) (width 0.2032) (layer VCC_layer) (net 226))
+ (segment (start 151.257 117.094) (end 151.638 117.094) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 163.957 116.586) (end 165.608 116.586) (width 0.2032) (layer Cuivre) (net 226) (status 800))
+ (segment (start 151.6634 113.8428) (end 151.6634 117.0686) (width 0.2032) (layer Composant) (net 226) (status 800))
+ (segment (start 151.638 117.094) (end 151.6634 117.0686) (width 0.2032) (layer Composant) (net 226))
+ (segment (start 144.653 127.889) (end 137.922 134.62) (width 0.2032) (layer Cuivre) (net 226))
+ (segment (start 165.608 116.586) (end 153.543 116.586) (width 0.2032) (layer VCC_layer) (net 226))
+ (segment (start 163.322 129.54) (end 169.926 129.54) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 162.179 121.793) (end 162.179 128.397) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 172.466 132.08) (end 180.848 132.08) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 192.913 134.366) (end 190.754 134.366) (width 0.2032) (layer Composant) (net 227) (status 800))
+ (segment (start 161.29 118.11) (end 161.29 120.904) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 161.29 118.11) (end 160.6804 118.7196) (width 0.2032) (layer Composant) (net 227))
+ (segment (start 157.1752 118.7196) (end 160.6804 118.7196) (width 0.2032) (layer Composant) (net 227) (status 800))
+ (segment (start 190.754 134.366) (end 189.992 133.604) (width 0.2032) (layer Composant) (net 227))
+ (segment (start 183.515 134.747) (end 180.848 132.08) (width 0.2032) (layer Cuivre) (net 227) (status 800))
+ (segment (start 184.658 133.604) (end 189.992 133.604) (width 0.2032) (layer Composant) (net 227))
+ (via (at 161.29 118.11) (size 0.889) (layers Composant Cuivre) (net 227))
+ (segment (start 162.179 128.397) (end 163.322 129.54) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 161.29 120.904) (end 162.179 121.793) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 183.515 134.747) (end 184.658 133.604) (width 0.2032) (layer Composant) (net 227) (status 800))
+ (segment (start 169.926 129.54) (end 172.466 132.08) (width 0.2032) (layer Cuivre) (net 227))
+ (segment (start 192.913 135.636) (end 190.373 135.636) (width 0.2032) (layer Composant) (net 228) (status 800))
+ (segment (start 157.1752 126.5174) (end 158.75 126.5174) (width 0.2032) (layer Composant) (net 228) (status 800))
+ (segment (start 161.417 130.048) (end 159.385 128.016) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 168.275 134.747) (end 169.291 135.763) (width 0.2032) (layer Composant) (net 228) (status 800))
+ (segment (start 161.417 130.048) (end 161.417 131.064) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 167.005 133.477) (end 163.83 133.477) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 190.246 135.763) (end 169.291 135.763) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 158.75 126.5174) (end 159.385 127.127) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 168.275 134.747) (end 167.005 133.477) (width 0.2032) (layer Composant) (net 228) (status 800))
+ (segment (start 190.373 135.636) (end 190.246 135.763) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 159.385 128.016) (end 159.385 127.127) (width 0.2032) (layer Composant) (net 228))
+ (segment (start 161.417 131.064) (end 163.83 133.477) (width 0.2032) (layer Composant) (net 228))
+ (via (at 191.389 136.906) (size 0.889) (layers Composant Cuivre) (net 229))
+ (segment (start 191.008 136.525) (end 171.958 136.525) (width 0.2032) (layer Cuivre) (net 229))
+ (segment (start 191.389 136.906) (end 191.008 136.525) (width 0.2032) (layer Cuivre) (net 229))
+ (segment (start 158.369 137.287) (end 164.465 137.287) (width 0.2032) (layer Cuivre) (net 229))
+ (via (at 154.305 134.62) (size 0.889) (layers Composant Cuivre) (net 229))
+ (segment (start 164.465 137.287) (end 165.227 136.525) (width 0.2032) (layer Cuivre) (net 229))
+ (segment (start 169.545 136.525) (end 165.227 136.525) (width 0.2032) (layer Cuivre) (net 229))
+ (segment (start 170.815 137.795) (end 169.545 136.525) (width 0.2032) (layer Cuivre) (net 229) (status 800))
+ (segment (start 154.305 134.62) (end 155.702 134.62) (width 0.2032) (layer Cuivre) (net 229))
+ (segment (start 154.305 134.3152) (end 154.305 134.62) (width 0.2032) (layer Composant) (net 229))
+ (segment (start 155.702 134.62) (end 158.369 137.287) (width 0.2032) (layer Cuivre) (net 229))
+ (segment (start 192.913 136.906) (end 191.389 136.906) (width 0.2032) (layer Composant) (net 229) (status 800))
+ (segment (start 170.815 137.795) (end 171.958 136.525) (width 0.2032) (layer Cuivre) (net 229) (status 800))
+ (segment (start 157.1752 134.3152) (end 154.305 134.3152) (width 0.2032) (layer Composant) (net 229) (status 800))
+ (segment (start 154.94 139.446) (end 167.386 139.446) (width 0.2032) (layer Cuivre) (net 230))
+ (segment (start 178.435 136.779) (end 178.435 137.795) (width 0.2032) (layer Composant) (net 230) (status 400))
+ (segment (start 190.119 136.525) (end 178.689 136.525) (width 0.2032) (layer Composant) (net 230))
+ (segment (start 178.435 137.795) (end 177.165 139.065) (width 0.2032) (layer Cuivre) (net 230) (status 800))
+ (segment (start 192.913 138.176) (end 190.627 138.176) (width 0.2032) (layer Composant) (net 230) (status 800))
+ (segment (start 167.767 139.065) (end 177.165 139.065) (width 0.2032) (layer Cuivre) (net 230))
+ (segment (start 190.373 136.779) (end 190.119 136.525) (width 0.2032) (layer Composant) (net 230))
+ (segment (start 167.386 139.446) (end 167.767 139.065) (width 0.2032) (layer Cuivre) (net 230))
+ (segment (start 154.94 139.5222) (end 154.94 139.446) (width 0.2032) (layer Composant) (net 230))
+ (segment (start 190.627 138.176) (end 190.373 137.922) (width 0.2032) (layer Composant) (net 230))
+ (segment (start 157.1752 139.5222) (end 154.94 139.5222) (width 0.2032) (layer Composant) (net 230) (status 800))
+ (via (at 154.94 139.446) (size 0.889) (layers Composant Cuivre) (net 230))
+ (segment (start 178.689 136.525) (end 178.435 136.779) (width 0.2032) (layer Composant) (net 230))
+ (segment (start 190.373 137.922) (end 190.373 136.779) (width 0.2032) (layer Composant) (net 230))
+ (segment (start 183.769 139.446) (end 183.515 139.192) (width 0.2032) (layer Composant) (net 231))
+ (segment (start 152.2984 145.034) (end 152.2984 140.97) (width 0.2032) (layer Composant) (net 231) (status 800))
+ (segment (start 183.515 137.795) (end 180.975 140.335) (width 0.2032) (layer Cuivre) (net 231) (status 800))
+ (segment (start 192.913 139.446) (end 183.769 139.446) (width 0.2032) (layer Composant) (net 231) (status 800))
+ (segment (start 183.515 139.192) (end 183.515 137.795) (width 0.2032) (layer Composant) (net 231) (status 400))
+ (segment (start 180.975 140.335) (end 167.767 140.335) (width 0.2032) (layer Cuivre) (net 231))
+ (segment (start 167.767 140.335) (end 167.132 140.97) (width 0.2032) (layer Cuivre) (net 231))
+ (via (at 152.2984 140.97) (size 0.889) (layers Composant Cuivre) (net 231))
+ (segment (start 152.2984 140.97) (end 167.132 140.97) (width 0.2032) (layer Cuivre) (net 231))
+ (segment (start 167.767 143.764) (end 167.386 143.383) (width 0.2032) (layer Cuivre) (net 232))
+ (segment (start 171.069 140.716) (end 170.815 140.97) (width 0.2032) (layer Composant) (net 232))
+ (segment (start 169.672 143.764) (end 167.767 143.764) (width 0.2032) (layer Cuivre) (net 232))
+ (segment (start 144.5006 145.034) (end 144.5006 142.24) (width 0.2032) (layer Composant) (net 232) (status 800))
+ (segment (start 167.386 143.383) (end 156.464 143.383) (width 0.2032) (layer Cuivre) (net 232))
+ (segment (start 192.913 140.716) (end 171.069 140.716) (width 0.2032) (layer Composant) (net 232) (status 800))
+ (segment (start 170.815 142.621) (end 169.672 143.764) (width 0.2032) (layer Cuivre) (net 232) (status 800))
+ (segment (start 156.21 143.637) (end 146.177 143.637) (width 0.2032) (layer Cuivre) (net 232))
+ (segment (start 170.815 140.97) (end 170.815 142.621) (width 0.2032) (layer Composant) (net 232) (status 400))
+ (via (at 144.78 142.24) (size 0.889) (layers Composant Cuivre) (net 232))
+ (segment (start 156.464 143.383) (end 156.21 143.637) (width 0.2032) (layer Cuivre) (net 232))
+ (segment (start 144.78 142.24) (end 146.177 143.637) (width 0.2032) (layer Cuivre) (net 232))
+ (segment (start 144.5006 142.24) (end 144.78 142.24) (width 0.2032) (layer Composant) (net 232))
+ (segment (start 156.718 145.161) (end 156.972 144.907) (width 0.2032) (layer Cuivre) (net 233))
+ (segment (start 139.446 145.161) (end 156.718 145.161) (width 0.2032) (layer Cuivre) (net 233))
+ (segment (start 178.816 141.478) (end 178.562 141.732) (width 0.2032) (layer Composant) (net 233))
+ (segment (start 178.562 141.732) (end 178.562 142.494) (width 0.2032) (layer Composant) (net 233))
+ (segment (start 156.972 144.907) (end 166.497 144.907) (width 0.2032) (layer Cuivre) (net 233))
+ (segment (start 166.878 145.288) (end 175.768 145.288) (width 0.2032) (layer Cuivre) (net 233))
+ (segment (start 178.562 142.494) (end 178.435 142.621) (width 0.2032) (layer Composant) (net 233) (status 400))
+ (segment (start 166.497 144.907) (end 166.878 145.288) (width 0.2032) (layer Cuivre) (net 233))
+ (segment (start 136.525 142.24) (end 139.446 145.161) (width 0.2032) (layer Cuivre) (net 233))
+ (segment (start 178.435 142.621) (end 175.768 145.288) (width 0.2032) (layer Cuivre) (net 233) (status 800))
+ (segment (start 191.008 141.986) (end 190.5 141.478) (width 0.2032) (layer Composant) (net 233))
+ (segment (start 136.7028 145.034) (end 136.7028 142.24) (width 0.2032) (layer Composant) (net 233) (status 800))
+ (segment (start 136.7028 142.24) (end 136.525 142.24) (width 0.2032) (layer Composant) (net 233))
+ (segment (start 190.5 141.478) (end 178.816 141.478) (width 0.2032) (layer Composant) (net 233))
+ (segment (start 192.913 141.986) (end 191.008 141.986) (width 0.2032) (layer Composant) (net 233) (status 800))
+ (via (at 136.525 142.24) (size 0.889) (layers Composant Cuivre) (net 233))
+ (segment (start 131.4958 142.24) (end 131.445 142.24) (width 0.2032) (layer Composant) (net 234))
+ (segment (start 183.515 143.764) (end 183.515 142.621) (width 0.2032) (layer Composant) (net 234) (status 400))
+ (segment (start 189.992 144.018) (end 183.769 144.018) (width 0.2032) (layer Composant) (net 234))
+ (segment (start 190.754 143.256) (end 189.992 144.018) (width 0.2032) (layer Composant) (net 234))
+ (segment (start 166.116 145.923) (end 166.497 146.304) (width 0.2032) (layer Cuivre) (net 234))
+ (segment (start 135.382 146.177) (end 157.099 146.177) (width 0.2032) (layer Cuivre) (net 234))
+ (segment (start 183.769 144.018) (end 183.515 143.764) (width 0.2032) (layer Composant) (net 234))
+ (segment (start 157.099 146.177) (end 157.353 145.923) (width 0.2032) (layer Cuivre) (net 234))
+ (segment (start 157.353 145.923) (end 166.116 145.923) (width 0.2032) (layer Cuivre) (net 234))
+ (segment (start 183.515 142.621) (end 179.832 146.304) (width 0.2032) (layer Cuivre) (net 234) (status 800))
+ (via (at 131.445 142.24) (size 0.889) (layers Composant Cuivre) (net 234))
+ (segment (start 166.497 146.304) (end 179.832 146.304) (width 0.2032) (layer Cuivre) (net 234))
+ (segment (start 131.4958 145.034) (end 131.4958 142.24) (width 0.2032) (layer Composant) (net 234) (status 800))
+ (segment (start 192.913 143.256) (end 190.754 143.256) (width 0.2032) (layer Composant) (net 234) (status 800))
+ (segment (start 131.445 142.24) (end 135.382 146.177) (width 0.2032) (layer Cuivre) (net 234))
+ (segment (start 147.32 96.52) (end 144.145 93.345) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 150.114 96.52) (end 147.32 96.52) (width 0.2032) (layer VCC_layer) (net 235))
+ (segment (start 149.0472 103.759) (end 149.0472 96.9772) (width 0.2032) (layer Composant) (net 235) (status 800))
+ (segment (start 151.003 110.998) (end 149.0472 109.0422) (width 0.2032) (layer Composant) (net 235))
+ (segment (start 96.52 92.075) (end 95.5294 91.0844) (width 0.2032) (layer Composant) (net 235))
+ (segment (start 114.554 96.52) (end 114.046 97.028) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 91.694 92.329) (end 91.694 96.266) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 163.957 96.012) (end 162.941 96.012) (width 0.2032) (layer Cuivre) (net 235) (status 800))
+ (via (at 96.52 92.075) (size 0.889) (layers Composant Cuivre) (net 235))
+ (segment (start 135.509 96.52) (end 138.684 93.345) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 162.941 96.012) (end 162.687 96.266) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 103.886 97.028) (end 114.046 97.028) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 96.52 92.075) (end 101.346 96.901) (width 0.2032) (layer Cuivre) (net 235))
+ (via (at 147.32 96.52) (size 0.889) (layers Composant Cuivre) (net 235))
+ (segment (start 88.265 99.695) (end 91.694 96.266) (width 0.2032) (layer Cuivre) (net 235) (status 800))
+ (segment (start 150.368 96.266) (end 150.114 96.52) (width 0.2032) (layer VCC_layer) (net 235))
+ (segment (start 149.0472 109.0422) (end 149.0472 103.759) (width 0.2032) (layer Composant) (net 235) (status 400))
+ (segment (start 101.346 96.901) (end 103.759 96.901) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 148.59 96.52) (end 149.0472 96.9772) (width 0.2032) (layer Composant) (net 235))
+ (segment (start 114.554 96.52) (end 135.509 96.52) (width 0.2032) (layer Cuivre) (net 235))
+ (via (at 162.687 96.266) (size 0.889) (layers Composant Cuivre) (net 235))
+ (segment (start 162.687 96.266) (end 150.368 96.266) (width 0.2032) (layer VCC_layer) (net 235))
+ (segment (start 96.52 92.075) (end 91.948 92.075) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 147.32 96.52) (end 148.59 96.52) (width 0.2032) (layer Composant) (net 235))
+ (segment (start 144.145 93.345) (end 138.684 93.345) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 92.456 91.0844) (end 95.5294 91.0844) (width 0.2032) (layer Composant) (net 235) (status 800))
+ (segment (start 91.948 92.075) (end 91.694 92.329) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 151.003 113.8428) (end 151.003 110.998) (width 0.2032) (layer Composant) (net 235) (status 800))
+ (segment (start 103.759 96.901) (end 103.886 97.028) (width 0.2032) (layer Cuivre) (net 235))
+ (segment (start 144.78 92.71) (end 138.557 92.71) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 161.417 95.758) (end 150.368 95.758) (width 0.2032) (layer VCC_layer) (net 236))
+ (segment (start 104.013 96.52) (end 113.792 96.52) (width 0.2032) (layer Cuivre) (net 236))
+ (via (at 97.79 92.075) (size 0.889) (layers Composant Cuivre) (net 236))
+ (via (at 147.32 95.25) (size 0.889) (layers Composant Cuivre) (net 236))
+ (segment (start 135.255 96.012) (end 138.557 92.71) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 147.32 95.25) (end 148.59 95.25) (width 0.2032) (layer Composant) (net 236))
+ (segment (start 96.901 91.186) (end 91.694 91.186) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 88.265 97.155) (end 90.805 94.615) (width 0.2032) (layer Cuivre) (net 236) (status 800))
+ (segment (start 114.3 96.012) (end 135.255 96.012) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 147.32 95.25) (end 144.78 92.71) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 152.2984 113.8428) (end 152.2984 111.379) (width 0.2032) (layer Composant) (net 236) (status 800))
+ (segment (start 103.886 96.393) (end 104.013 96.52) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 149.7076 103.759) (end 149.7076 96.3676) (width 0.2032) (layer Composant) (net 236) (status 800))
+ (segment (start 152.2984 111.379) (end 149.7076 108.7882) (width 0.2032) (layer Composant) (net 236))
+ (segment (start 102.108 96.393) (end 103.886 96.393) (width 0.2032) (layer Cuivre) (net 236))
+ (via (at 161.925 95.25) (size 0.889) (layers Composant Cuivre) (net 236))
+ (segment (start 163.957 94.742) (end 162.56 94.742) (width 0.2032) (layer Cuivre) (net 236) (status 800))
+ (segment (start 92.456 90.4494) (end 97.4344 90.4494) (width 0.2032) (layer Composant) (net 236) (status 800))
+ (segment (start 97.79 90.805) (end 97.79 92.075) (width 0.2032) (layer Composant) (net 236))
+ (segment (start 162.052 95.25) (end 161.925 95.25) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 150.368 95.758) (end 149.86 95.25) (width 0.2032) (layer VCC_layer) (net 236))
+ (segment (start 114.3 96.012) (end 113.792 96.52) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 97.79 92.075) (end 102.108 96.393) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 149.7076 108.7882) (end 149.7076 103.759) (width 0.2032) (layer Composant) (net 236) (status 400))
+ (segment (start 97.79 92.075) (end 96.901 91.186) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 148.59 95.25) (end 149.7076 96.3676) (width 0.2032) (layer Composant) (net 236))
+ (segment (start 149.86 95.25) (end 147.32 95.25) (width 0.2032) (layer VCC_layer) (net 236))
+ (segment (start 97.79 90.805) (end 97.4344 90.4494) (width 0.2032) (layer Composant) (net 236))
+ (segment (start 162.56 94.742) (end 162.052 95.25) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 161.925 95.25) (end 161.417 95.758) (width 0.2032) (layer VCC_layer) (net 236))
+ (segment (start 90.805 94.615) (end 90.805 92.075) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 91.694 91.186) (end 90.805 92.075) (width 0.2032) (layer Cuivre) (net 236))
+ (segment (start 135.001 66.167) (end 161.798 66.167) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 130.2004 72.5678) (end 130.2004 70.993) (width 0.2032) (layer Composant) (net 237) (status 800))
+ (segment (start 309.4228 80.899) (end 309.118 80.899) (width 0.2032) (layer Composant) (net 237))
+ (via (at 131.191 66.929) (size 0.889) (layers Composant Cuivre) (net 237))
+ (segment (start 242.189 66.802) (end 241.808 67.183) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 309.118 67.056) (end 309.118 80.899) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 130.2004 70.993) (end 130.048 70.993) (width 0.2032) (layer Composant) (net 237))
+ (segment (start 309.118 67.056) (end 308.864 66.802) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 242.189 66.802) (end 308.864 66.802) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 309.4228 82.169) (end 309.4228 80.899) (width 0.2032) (layer Composant) (net 237) (status 800))
+ (segment (start 241.808 67.183) (end 162.814 67.183) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 134.239 66.929) (end 131.191 66.929) (width 0.2032) (layer Cuivre) (net 237))
+ (via (at 309.118 80.899) (size 0.889) (layers Composant Cuivre) (net 237))
+ (segment (start 131.191 66.929) (end 130.048 68.072) (width 0.2032) (layer Composant) (net 237))
+ (segment (start 130.048 70.993) (end 130.048 68.072) (width 0.2032) (layer Composant) (net 237))
+ (segment (start 134.239 66.929) (end 135.001 66.167) (width 0.2032) (layer Cuivre) (net 237))
+ (segment (start 161.798 66.167) (end 162.814 67.183) (width 0.2032) (layer Cuivre) (net 237))
+ (via (at 356.108 81.153) (size 0.889) (layers Composant Cuivre) (net 238))
+ (segment (start 356.362 84.455) (end 361.569 84.455) (width 0.2032) (layer Cuivre) (net 238) (status 400))
+ (segment (start 356.108 84.201) (end 356.362 84.455) (width 0.2032) (layer Cuivre) (net 238))
+ (segment (start 355.092 82.169) (end 356.108 81.153) (width 0.2032) (layer Composant) (net 238))
+ (segment (start 353.949 86.487) (end 354.838 86.487) (width 0.2032) (layer Composant) (net 238) (status 800))
+ (segment (start 354.838 86.487) (end 355.092 86.233) (width 0.2032) (layer Composant) (net 238))
+ (segment (start 355.092 86.233) (end 355.092 82.169) (width 0.2032) (layer Composant) (net 238))
+ (segment (start 351.028 86.5124) (end 353.949 86.5124) (width 0.2032) (layer Composant) (net 238) (status 800))
+ (segment (start 356.108 81.153) (end 354.33 81.153) (width 0.2032) (layer Cuivre) (net 238) (status 400))
+ (segment (start 353.949 86.5124) (end 353.949 86.487) (width 0.2032) (layer Composant) (net 238) (status 400))
+ (segment (start 356.108 81.153) (end 356.108 84.201) (width 0.2032) (layer Cuivre) (net 238))
+ (via (at 97.155 113.665) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 327.279 60.96) (end 325.374 59.055) (width 0.2032) (layer VCC_layer) (net 239))
+ (via (at 301.752 58.547) (size 0.889) (layers Composant Cuivre) (net 239))
+ (via (at 120.142 81.153) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 124.333 92.964) (end 124.333 93.0402) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 97.155 111.76) (end 94.0816 108.6866) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 320.294 59.055) (end 321.945 59.055) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 161.163 57.785) (end 160.147 58.801) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 309.753 59.817) (end 307.975 58.039) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 160.147 58.801) (end 157.099 58.801) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 165.481 58.039) (end 165.227 57.785) (width 0.2032) (layer VCC_layer) (net 239))
+ (via (at 327.279 66.548) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 301.752 58.547) (end 301.244 58.039) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 121.285 92.964) (end 119.888 91.567) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 122.682 93.218) (end 122.682 92.964) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 121.285 92.964) (end 122.682 92.964) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 157.099 58.801) (end 156.337 58.039) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 119.507 115.57) (end 119.761 115.57) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 122.682 92.964) (end 124.333 92.964) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 327.279 85.471) (end 327.279 73.152) (width 0.2032) (layer Composant) (net 239))
+ (via (at 119.507 115.57) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 120.142 58.547) (end 120.65 58.039) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 119.761 96.139) (end 122.682 93.218) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 302.26 58.039) (end 301.752 58.547) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 327.787 67.056) (end 327.787 72.644) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 165.227 57.785) (end 161.163 57.785) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 326.263 89.5096) (end 326.263 86.487) (width 0.2032) (layer Composant) (net 239))
+ (via (at 321.945 59.055) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 119.761 116.713) (end 123.063 120.015) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 326.263 86.487) (end 327.279 85.471) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 120.142 90.043) (end 120.142 81.153) (width 0.2032) (layer Cuivre) (net 239))
+ (segment (start 156.337 58.039) (end 120.65 58.039) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 120.142 58.547) (end 120.142 59.309) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 327.279 66.548) (end 327.279 60.96) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 97.155 113.665) (end 97.155 111.76) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 99.06 115.57) (end 119.507 115.57) (width 0.2032) (layer Cuivre) (net 239))
+ (segment (start 320.294 59.055) (end 319.532 59.817) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 319.532 59.817) (end 309.753 59.817) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 327.787 72.644) (end 327.279 73.152) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 327.279 66.548) (end 327.787 67.056) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 301.244 58.039) (end 165.481 58.039) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 94.0816 94.869) (end 94.0816 108.6866) (width 0.2032) (layer Composant) (net 239) (status 800))
+ (segment (start 307.975 58.039) (end 302.26 58.039) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 119.761 96.139) (end 119.761 115.57) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 125.984 120.015) (end 123.063 120.015) (width 0.2032) (layer Composant) (net 239) (status 800))
+ (segment (start 326.6694 92.0242) (end 326.6694 89.916) (width 0.2032) (layer Composant) (net 239) (status 800))
+ (segment (start 326.6694 89.916) (end 326.263 89.5096) (width 0.2032) (layer Composant) (net 239))
+ (via (at 120.142 59.309) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 119.888 90.297) (end 120.142 90.043) (width 0.2032) (layer Cuivre) (net 239))
+ (segment (start 119.888 91.567) (end 119.888 90.297) (width 0.2032) (layer Cuivre) (net 239))
+ (via (at 119.888 91.567) (size 0.889) (layers Composant Cuivre) (net 239))
+ (segment (start 321.945 59.055) (end 325.374 59.055) (width 0.2032) (layer VCC_layer) (net 239))
+ (segment (start 125.984 93.0402) (end 124.333 93.0402) (width 0.2032) (layer Composant) (net 239) (status 800))
+ (segment (start 97.155 113.665) (end 99.06 115.57) (width 0.2032) (layer Cuivre) (net 239))
+ (segment (start 119.761 115.57) (end 119.761 116.713) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 120.142 59.309) (end 120.142 81.153) (width 0.2032) (layer Composant) (net 239))
+ (segment (start 347.853 81.9404) (end 347.853 88.138) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 351.028 81.915) (end 351.028 81.9404) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (via (at 348.869 70.866) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 347.853 81.9404) (end 345.567 81.9404) (width 0.2032) (layer Cuivre) (net 240))
+ (segment (start 354.457 70.358) (end 354.711 70.612) (width 0.2032) (layer Cuivre) (net 240))
+ (segment (start 319.8368 63.754) (end 319.8368 64.389) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 347.472 92.0242) (end 348.107 92.0242) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 322.7578 64.135) (end 322.5038 64.389) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 322.5038 64.389) (end 322.072 64.389) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 325.628 67.691) (end 325.628 70.866) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 325.628 70.866) (end 325.628 83.566) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 324.358 64.389) (end 324.358 64.643) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 351.028 65.0494) (end 351.028 64.389) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 354.711 70.612) (end 355.727 70.612) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (via (at 354.457 63.754) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 353.187 70.8914) (end 354.0506 71.755) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 353.187 70.8914) (end 353.3394 70.739) (width 0.2032) (layer Cuivre) (net 240))
+ (segment (start 321.945 89.4334) (end 322.6816 90.17) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 319.8368 64.389) (end 322.072 64.389) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 322.199 88.4428) (end 322.199 88.519) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 351.028 75.438) (end 353.187 75.438) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 322.199 88.519) (end 325.12 88.519) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 325.628 88.011) (end 325.12 88.519) (width 0.2032) (layer VCC_layer) (net 240))
+ (via (at 353.187 75.438) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 353.3394 70.739) (end 355.6 70.739) (width 0.2032) (layer Cuivre) (net 240))
+ (segment (start 354.457 63.754) (end 354.457 66.167) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 322.7578 60.833) (end 323.4182 60.833) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 354.457 66.167) (end 354.457 70.358) (width 0.2032) (layer Cuivre) (net 240) (status 800))
+ (segment (start 351.028 88.4428) (end 351.028 87.8078) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 347.472 92.0242) (end 347.472 97.028) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 353.7966 75.438) (end 353.187 75.438) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 351.028 63.754) (end 348.107 60.833) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (via (at 325.628 83.566) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 351.028 70.8914) (end 353.187 70.8914) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 351.028 63.754) (end 354.457 63.754) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 322.707 91.948) (end 322.7578 92.0242) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (segment (start 348.107 88.392) (end 350.52 88.392) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 348.107 60.833) (end 347.472 60.833) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 347.472 97.028) (end 347.599 97.155) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (segment (start 319.8368 89.1032) (end 319.8368 88.4428) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 351.028 89.1032) (end 351.028 88.4428) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 345.567 81.9404) (end 345.567 82.042) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 322.7578 60.833) (end 322.7578 64.135) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 353.187 75.438) (end 353.187 82.931) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 351.028 64.389) (end 351.028 63.754) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 322.7578 92.0242) (end 323.4182 92.0242) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 351.028 70.8914) (end 348.869 70.8914) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (via (at 347.853 81.9404) (size 0.889) (layers Composant Cuivre) (net 240))
+ (via (at 322.199 88.519) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 354.0506 71.755) (end 354.0506 75.184) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 348.107 91.186) (end 348.107 92.0242) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (segment (start 352.933 81.915) (end 351.028 81.915) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 319.8368 88.4428) (end 322.199 88.4428) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 347.853 88.138) (end 348.107 88.392) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 350.52 88.392) (end 351.028 88.4428) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (segment (start 322.6816 91.948) (end 322.707 91.948) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 322.6816 90.17) (end 322.6816 91.948) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 320.167 89.4334) (end 319.8368 89.1032) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (via (at 322.072 64.389) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 322.072 64.389) (end 324.358 64.389) (width 0.2032) (layer Cuivre) (net 240))
+ (segment (start 351.028 81.9404) (end 347.853 81.9404) (width 0.2032) (layer Composant) (net 240) (status 800))
+ (segment (start 325.628 83.566) (end 324.231 83.566) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 348.107 91.186) (end 350.139 89.154) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 350.139 89.154) (end 351.028 89.154) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 351.028 89.154) (end 351.028 89.1032) (width 0.2032) (layer Composant) (net 240) (status 400))
+ (segment (start 325.628 67.691) (end 324.866 66.929) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 348.869 70.866) (end 325.628 70.866) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 319.8368 88.4428) (end 319.8368 87.8078) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (via (at 353.187 82.931) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 353.187 82.931) (end 353.187 82.169) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 353.187 82.169) (end 352.933 81.915) (width 0.2032) (layer Composant) (net 240))
+ (via (at 353.187 70.8914) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 355.6 70.739) (end 355.727 70.612) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 324.866 66.929) (end 324.866 64.643) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 325.628 83.566) (end 325.628 88.011) (width 0.2032) (layer VCC_layer) (net 240))
+ (via (at 324.866 64.643) (size 0.889) (layers Composant Cuivre) (net 240))
+ (segment (start 324.866 64.643) (end 324.358 64.643) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 320.167 89.4334) (end 321.945 89.4334) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 348.869 70.8914) (end 348.869 70.866) (width 0.2032) (layer Composant) (net 240))
+ (segment (start 347.091 69.088) (end 345.567 69.088) (width 0.2032) (layer Cuivre) (net 240) (status 400))
+ (segment (start 348.869 70.866) (end 347.091 69.088) (width 0.2032) (layer Cuivre) (net 240))
+ (segment (start 351.028 76.0984) (end 351.028 75.438) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 319.8368 64.389) (end 319.8368 65.0494) (width 0.2032) (layer Composant) (net 240) (status C00))
+ (segment (start 354.0506 75.184) (end 353.7966 75.438) (width 0.2032) (layer VCC_layer) (net 240))
+ (segment (start 338.582 61.341) (end 341.376 64.135) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 352.933 66.5988) (end 352.933 67.945) (width 0.2032) (layer Composant) (net 241))
+ (segment (start 318.643 60.833) (end 319.532 60.833) (width 0.2032) (layer Cuivre) (net 241) (status 800))
+ (segment (start 349.123 64.135) (end 341.376 64.135) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 356.87 71.882) (end 357.124 71.628) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 352.679 66.3448) (end 352.933 66.5988) (width 0.2032) (layer Composant) (net 241))
+ (segment (start 353.314 68.326) (end 349.123 64.135) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 357.378 70.612) (end 358.14 70.612) (width 0.2032) (layer Cuivre) (net 241) (status 400))
+ (segment (start 313.309 58.801) (end 315.341 60.833) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 311.023 58.801) (end 313.309 58.801) (width 0.2032) (layer Cuivre) (net 241) (status 800))
+ (segment (start 320.04 61.341) (end 319.532 60.833) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 352.171 69.469) (end 352.171 71.628) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 352.171 71.628) (end 352.425 71.882) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 352.425 71.882) (end 356.87 71.882) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 353.314 68.326) (end 352.171 69.469) (width 0.2032) (layer Cuivre) (net 241))
+ (via (at 353.314 68.326) (size 0.889) (layers Composant Cuivre) (net 241))
+ (segment (start 357.124 70.866) (end 357.378 70.612) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 320.04 61.341) (end 338.582 61.341) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 351.028 66.3448) (end 352.679 66.3448) (width 0.2032) (layer Composant) (net 241) (status 800))
+ (segment (start 315.341 60.833) (end 318.643 60.833) (width 0.2032) (layer Cuivre) (net 241) (status 400))
+ (segment (start 352.933 67.945) (end 353.314 68.326) (width 0.2032) (layer Composant) (net 241))
+ (segment (start 357.124 71.628) (end 357.124 70.866) (width 0.2032) (layer Cuivre) (net 241))
+ (segment (start 344.8558 60.833) (end 344.8558 59.182) (width 0.2032) (layer Composant) (net 242) (status 800))
+ (segment (start 350.901 57.4548) (end 350.901 60.833) (width 0.2032) (layer Composant) (net 242))
+ (segment (start 345.059 58.0898) (end 344.678 58.039) (width 0.2032) (layer Cuivre) (net 242) (status 400))
+ (segment (start 345.948 58.0898) (end 346.837 57.2008) (width 0.2032) (layer Composant) (net 242))
+ (segment (start 344.8558 59.182) (end 345.948 58.0898) (width 0.2032) (layer Composant) (net 242))
+ (segment (start 350.901 60.833) (end 351.028 60.833) (width 0.2032) (layer Composant) (net 242) (status 400))
+ (segment (start 345.948 58.0898) (end 345.059 58.0898) (width 0.2032) (layer Cuivre) (net 242))
+ (segment (start 346.837 57.2008) (end 350.647 57.2008) (width 0.2032) (layer Composant) (net 242))
+ (via (at 345.948 58.0898) (size 0.889) (layers Composant Cuivre) (net 242))
+ (segment (start 350.647 57.2008) (end 350.901 57.4548) (width 0.2032) (layer Composant) (net 242))
+ (segment (start 116.84 154.305) (end 116.84 158.496) (width 0.381) (layer Cuivre) (net 243) (status 400))
+ (segment (start 67.31 104.648) (end 67.056 104.394) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 102.743 84.455) (end 102.489 84.201) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 76.708 139.827) (end 78.486 139.827) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 359.156 63.627) (end 358.013 63.627) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 357.759 126.873) (end 357.759 127.635) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 82.042 114.935) (end 82.042 111.887) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 156.845 125.095) (end 149.225 125.095) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 123.19 122.555) (end 124.46 122.555) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 121.92 158.496) (end 121.92 154.94) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 67.056 98.933) (end 64.643 98.933) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 77.47 82.931) (end 79.121 82.931) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 80.772 85.471) (end 79.375 84.074) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 84.201 90.297) (end 83.058 90.297) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 79.121 82.931) (end 79.375 83.185) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 74.041 83.693) (end 72.517 83.693) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (via (at 72.517 83.693) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 72.517 83.693) (end 65.151 83.693) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 64.389 84.455) (end 61.595 84.455) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 64.389 84.455) (end 65.151 83.693) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 66.548 109.347) (end 61.849 109.347) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 61.849 109.347) (end 61.595 109.093) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 61.595 109.093) (end 61.595 107.315) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 67.818 109.347) (end 68.072 109.601) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 68.072 109.601) (end 68.072 113.792) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 66.548 109.347) (end 67.818 109.347) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 68.326 114.046) (end 69.596 114.046) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 69.596 114.046) (end 71.12 114.046) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (via (at 84.328 102.743) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 71.374 114.3) (end 71.374 115.189) (width 0.2032) (layer Cuivre) (net 243))
+ (via (at 71.374 115.189) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 71.374 115.189) (end 71.374 115.951) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 71.374 115.951) (end 71.12 116.205) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 71.12 116.205) (end 69.596 116.205) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 79.375 83.185) (end 79.375 84.074) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 82.042 136.779) (end 80.264 138.557) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 80.264 138.557) (end 79.756 138.557) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 78.486 139.827) (end 79.756 138.557) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.868 80.645) (end 86.995 80.645) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 85.725 81.788) (end 86.868 80.645) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 84.709 81.788) (end 84.455 81.534) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 85.725 81.788) (end 84.709 81.788) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 84.455 81.534) (end 84.455 79.375) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 115.57 153.035) (end 120.65 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 56.515 79.375) (end 61.595 79.375) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (via (at 134.62 147.955) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 74.422 82.931) (end 74.168 83.185) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 74.168 83.566) (end 74.041 83.693) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (via (at 127 60.325) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 68.072 113.792) (end 68.326 114.046) (width 0.2032) (layer Cuivre) (net 243))
+ (via (at 165.608 85.852) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 165.608 85.852) (end 163.957 85.852) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 165.608 100.838) (end 163.957 100.838) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (via (at 165.608 100.838) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 165.608 115.316) (end 163.957 115.316) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 120.65 153.035) (end 124.46 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 191.135 144.526) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 160.02 136.525) (end 163.322 136.525) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 163.576 136.271) (end 163.576 133.731) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 163.322 136.525) (end 163.576 136.271) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 228.6 127.635) (end 228.6 128.778) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 228.6 128.778) (end 228.854 129.032) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 228.854 129.032) (end 281.686 129.032) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 281.686 129.032) (end 281.94 128.778) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 281.94 128.778) (end 281.94 127.635) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 298.577 107.569) (end 298.577 110.109) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 299.72 110.363) (end 299.72 114.935) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 299.72 114.935) (end 299.466 115.189) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 299.466 115.189) (end 298.577 115.189) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 186.69 107.315) (end 186.69 116.205) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 352.806 79.629) (end 352.552 79.375) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 299.466 110.109) (end 299.72 110.363) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 128.905 103.505) (end 128.905 103.759) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 327.3044 92.0242) (end 327.9648 92.0242) (width 0.2032) (layer Composant) (net 243) (status C00))
+ (segment (start 127.254 103.505) (end 124.46 103.505) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 327.9648 92.0242) (end 328.5998 92.0242) (width 0.2032) (layer Composant) (net 243) (status C00))
+ (segment (start 71.12 114.046) (end 71.374 114.3) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.995 69.215) (end 90.551 69.215) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 83.058 102.743) (end 84.328 102.743) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 165.608 100.838) (end 165.608 106.045) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 166.37 158.496) (end 166.37 154.94) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 186.69 125.095) (end 186.69 130.937) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 186.69 130.937) (end 187.452 131.699) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 187.452 131.699) (end 187.452 144.272) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 187.452 144.272) (end 187.706 144.526) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 150.368 61.341) (end 150.368 59.055) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 187.706 144.526) (end 191.135 144.526) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 150.622 58.801) (end 150.622 57.658) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 150.368 59.055) (end 150.622 58.801) (width 0.2032) (layer Composant) (net 243))
+ (via (at 150.368 59.055) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 228.6 65.405) (end 228.6 74.295) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 108.585 92.075) (end 109.601 93.091) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 109.601 93.091) (end 109.601 103.505) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.02 76.2) (end 160.02 74.295) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 298.577 110.109) (end 299.466 110.109) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 311.277 125.349) (end 313.817 127.889) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 74.168 83.185) (end 74.168 83.566) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 356.87 63.627) (end 359.664 60.833) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 359.664 60.833) (end 360.172 60.833) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 358.013 66.167) (end 358.013 63.627) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (via (at 358.013 63.627) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 358.013 63.627) (end 356.87 63.627) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 351.028 79.3496) (end 347.853 79.3496) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 347.853 79.3496) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 347.853 79.3496) (end 345.567 79.3496) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 345.567 79.3496) (end 345.567 78.74) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 356.616 65.6844) (end 356.87 65.4304) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.028 65.6844) (end 356.616 65.6844) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 356.87 65.4304) (end 356.87 63.627) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 351.028 65.6844) (end 348.742 65.6844) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 348.742 65.6844) (end 348.742 67.0052) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.742 68.3006) (end 348.742 69.342) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.742 67.0052) (end 348.742 68.3006) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.742 69.342) (end 348.996 69.596) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.996 69.596) (end 351.028 69.596) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 351.028 67.0052) (end 348.742 67.0052) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 351.028 68.3006) (end 348.742 68.3006) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 349.758 93.091) (end 349.758 95.885) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 345.5162 92.0242) (end 345.5162 90.17) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 346.837 89.916) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 327.3044 92.0242) (end 327.3044 88.646) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 327.3044 88.646) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 80.772 88.011) (end 83.058 90.297) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 56.515 90.805) (end 61.595 90.805) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 337.058 92.0242) (end 337.058 89.154) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 337.058 89.154) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 129.54 158.496) (end 129.54 154.94) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 336.55 87.757) (end 336.55 84.709) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 336.55 88.9) (end 336.804 89.154) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 336.804 89.154) (end 337.058 89.154) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 345.948 87.757) (end 348.488 87.757) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 348.488 87.757) (end 349.123 87.122) (width 0.2032) (layer Cuivre) (net 243))
+ (via (at 349.123 87.122) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 350.012 87.122) (end 351.028 87.1474) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 311.912 117.729) (end 311.785 117.729) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 349.123 87.122) (end 349.123 85.852) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 349.123 85.852) (end 349.123 84.5566) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 349.123 84.5566) (end 349.123 83.185) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 349.123 83.185) (end 350.266 83.185) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 350.266 83.185) (end 351.028 83.2612) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 351.028 84.5566) (end 349.123 84.5566) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 351.028 85.852) (end 349.123 85.852) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 351.028 84.5566) (end 353.822 84.5566) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 84.328 101.473) (end 84.328 102.743) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 83.312 100.457) (end 84.328 101.473) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 72.771 100.457) (end 83.312 100.457) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 157.1752 87.8332) (end 157.099 87.757) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 141.605 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 123.19 135.6106) (end 123.19 135.89) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 108.585 125.73) (end 107.315 125.73) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 128.905 86.995) (end 128.905 88.9) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 132.08 153.035) (end 130.175 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 127.635 90.17) (end 127.635 102.235) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 113.03 84.455) (end 112.395 84.455) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 88.9 151.765) (end 88.9 147.955) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (via (at 130.175 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 130.175 154.305) (end 130.175 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 155.702 87.757) (end 155.067 87.122) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 298.196 74.549) (end 300.101 74.549) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 297.18 74.422) (end 298.196 74.422) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 300.355 74.295) (end 301.117 74.295) (width 0.2032) (layer Composant) (net 243))
+ (via (at 301.117 74.295) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 300.355 74.295) (end 300.101 74.549) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 298.196 74.422) (end 298.196 74.549) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 153.9113 106.045) (end 158.115 106.045) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 138.176 102.235) (end 138.176 100.965) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 165.1 158.496) (end 165.1 153.035) (width 0.381) (layer Cuivre) (net 243) (status 800))
+ (segment (start 153.5938 105.7275) (end 153.9113 106.045) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 120.396 103.505) (end 109.601 103.505) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 128.905 75.819) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 132.08 153.035) (end 137.795 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 113.665 125.73) (end 116.205 125.73) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (via (at 135.255 75.565) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 139.7 116.84) (end 142.875 116.84) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 135.4074 75.565) (end 135.255 75.565) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 113.03 88.9) (end 113.03 85.979) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 132.08 153.035) (end 132.08 158.496) (width 0.381) (layer Cuivre) (net 243) (status 400))
+ (segment (start 142.875 118.745) (end 142.875 116.84) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 137.795 153.035) (end 141.605 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 149.225 135.89) (end 146.685 135.89) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 125.984 88.4936) (end 128.4986 88.4936) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 125.984 76.1492) (end 128.3208 76.1492) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 142.875 116.84) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 143.51 139.7) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 72.771 100.457) (end 67.056 100.457) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 72.771 118.237) (end 69.596 118.237) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 113.03 153.035) (end 115.57 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 298.577 107.569) (end 303.53 107.569) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 75.946 102.235) (end 75.946 104.648) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 155.575 82.296) (end 155.067 82.804) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 155.575 81.9912) (end 155.575 82.296) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 86.995 80.645) (end 94.615 80.645) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 85.725 81.788) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 85.725 84.455) (end 85.725 81.788) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 84.201 90.297) (end 86.233 90.297) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 86.233 81.788) (end 85.725 81.788) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.487 82.042) (end 86.233 81.788) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.487 90.043) (end 86.487 82.042) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.233 90.297) (end 86.487 90.043) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 306.705 116.967) (end 307.467 116.205) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 310.388 116.205) (end 311.785 117.602) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 307.467 116.205) (end 310.388 116.205) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 349.123 87.122) (end 350.012 87.122) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 61.595 95.885) (end 56.515 95.885) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 56.515 95.885) (end 56.515 102.235) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 56.515 102.235) (end 61.595 102.235) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (via (at 75.819 81.788) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 104.775 83.185) (end 103.251 83.185) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 103.251 83.185) (end 103.251 83.566) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 97.536 83.439) (end 97.536 83.566) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 153.289 148.463) (end 154.559 148.463) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 78.613 67.691) (end 78.613 67.437) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 108.585 90.805) (end 108.585 92.075) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 126.365 90.805) (end 127.635 90.805) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 148.971 122.936) (end 148.971 123.952) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 148.971 123.952) (end 149.225 124.206) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 148.59 135.89) (end 146.685 135.89) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 311.023 121.285) (end 311.277 121.539) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 133.985 123.19) (end 133.985 121.92) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 132.461 73.152) (end 132.461 73.025) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 139.319 73.66) (end 139.319 74.803) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 113.03 85.979) (end 113.03 84.455) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 139.319 74.803) (end 139.446 74.803) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 145.415 139.7) (end 143.51 139.7) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 138.43 139.7) (end 140.335 139.7) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 96.266 94.615) (end 96.012 94.361) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 96.012 94.361) (end 96.012 93.091) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 298.069 79.9338) (end 298.3738 79.629) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 301.117 79.629) (end 301.117 80.01) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 298.3738 79.629) (end 301.117 79.629) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 155.067 85.09) (end 155.067 83.693) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 155.067 83.693) (end 155.194 83.693) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 116.84 161.163) (end 116.84 158.496) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 140.97 161.163) (end 140.97 158.496) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 134.62 121.666) (end 134.62 118.745) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 147.955 147.955) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 128.905 86.995) (end 123.19 86.995) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 107.315 125.73) (end 107.315 141.097) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 175.895 151.638) (end 178.308 149.225) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 128.905 75.819) (end 128.3208 76.1492) (width 0.2032) (layer Composant) (net 243))
+ (via (at 160.02 136.525) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 134.62 125.095) (end 134.62 121.666) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 128.905 95.885) (end 128.016 94.996) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 135.509 116.078) (end 135.509 119.126) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 128.905 88.9) (end 128.4986 88.4936) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 140.97 158.496) (end 140.97 154.94) (width 0.381) (layer Cuivre) (net 243) (status 800))
+ (segment (start 134.62 118.745) (end 142.875 118.745) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 125.984 135.6106) (end 123.19 135.6106) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 155.067 147.955) (end 147.955 147.955) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 135.4074 113.8428) (end 135.4074 115.9764) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 134.62 147.955) (end 147.955 147.955) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 154.94 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 156.21 158.496) (end 156.21 154.305) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 156.21 154.305) (end 154.94 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 94.0816 78.867) (end 94.0816 80.137) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 112.2934 84.455) (end 112.395 84.455) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 95.25 81.28) (end 94.0816 80.137) (width 0.2032) (layer Composant) (net 243))
+ (via (at 112.2934 84.455) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 160.02 123.19) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 112.2934 78.867) (end 112.2934 84.455) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 128.905 85.09) (end 128.27 85.09) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (via (at 158.115 106.045) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 146.685 139.7) (end 143.51 139.7) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 102.5398 78.867) (end 102.5398 81.28) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 102.5398 81.28) (end 102.489 81.28) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 102.5398 81.28) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 160.02 123.2662) (end 160.02 123.19) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 114.554 86.5378) (end 113.03 86.5378) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 113.03 86.5378) (end 112.4712 85.979) (width 0.2032) (layer Composant) (net 243))
+ (via (at 112.4712 85.979) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 124.46 135.89) (end 123.19 135.89) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 112.4712 85.979) (end 113.03 85.979) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 95.7834 92.837) (end 95.25 92.837) (width 0.2032) (layer Composant) (net 243))
+ (via (at 95.25 92.837) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 137.795 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 102.235 93.091) (end 102.489 93.345) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 102.489 93.345) (end 102.489 94.742) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 102.489 94.742) (end 102.5398 94.869) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 146.685 132.08) (end 146.685 135.89) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 160.02 136.525) (end 160.02 143.002) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 142.875 116.84) (end 142.875 112.522) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 146.685 135.89) (end 146.685 139.7) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 128.905 76.835) (end 135.255 76.835) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 135.255 75.565) (end 139.446 75.565) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 147.32 158.496) (end 147.32 161.163) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 97.79 158.496) (end 97.79 161.163) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 124.46 158.496) (end 124.46 161.163) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 132.08 158.496) (end 132.08 161.163) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 165.1 158.496) (end 165.1 161.163) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 154.94 158.496) (end 154.94 161.163) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 113.03 161.163) (end 113.03 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 115.57 161.163) (end 115.57 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 138.43 161.163) (end 138.43 158.496) (width 0.3048) (layer Cuivre) (net 243) (status C00))
+ (segment (start 121.92 161.163) (end 121.92 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 129.54 161.163) (end 129.54 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 137.16 161.163) (end 137.16 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 142.24 161.163) (end 142.24 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 152.4 161.163) (end 152.4 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 156.21 161.163) (end 156.21 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 166.37 161.163) (end 166.37 158.496) (width 0.3048) (layer Composant) (net 243) (status C00))
+ (segment (start 166.37 91.313) (end 166.37 86.106) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 147.828 74.422) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 148.59 74.422) (end 147.828 74.422) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 148.717 74.295) (end 148.59 74.422) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 139.446 74.803) (end 139.446 75.565) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 148.717 74.295) (end 160.02 74.295) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 124.46 158.496) (end 124.46 153.035) (width 0.381) (layer Cuivre) (net 243) (status 800))
+ (segment (start 147.32 153.035) (end 141.605 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 141.732 75.692) (end 143.129 75.692) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 141.605 75.565) (end 141.732 75.692) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 139.446 75.565) (end 141.605 75.565) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 97.79 151.765) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 139.446 74.803) (end 141.2494 74.803) (width 0.2032) (layer Composant) (net 243))
+ (via (at 139.446 74.803) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 86.995 69.215) (end 86.995 80.645) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 336.55 87.757) (end 336.55 88.9) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 131.826 61.849) (end 131.826 61.595) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 130.81 62.865) (end 131.826 61.849) (width 0.2032) (layer Cuivre) (net 243))
+ (via (at 130.81 62.865) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 127 62.865) (end 130.81 62.865) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 135.001 74.676) (end 133.985 74.676) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 135.255 74.93) (end 135.001 74.676) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 135.255 75.565) (end 135.255 74.93) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 338.074 66.421) (end 338.328 66.167) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 127 62.865) (end 127 60.325) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 123.19 147.955) (end 134.62 147.955) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 132.08 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 151.13 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 153.5938 103.759) (end 153.5938 105.7275) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 160.02 136.271) (end 160.02 136.525) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 157.1752 123.2662) (end 160.02 123.2662) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 147.7518 146.558) (end 147.7518 145.034) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 322.072 65.6844) (end 322.961 65.6844) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 132.461 73.152) (end 133.985 74.676) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 165.735 91.948) (end 166.37 91.313) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 164.084 93.345) (end 165.481 91.948) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 165.481 91.948) (end 165.735 91.948) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 164.084 94.361) (end 164.084 93.345) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 164.084 99.314) (end 164.084 94.361) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 165.608 100.838) (end 164.084 99.314) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 322.961 75.184) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 322.961 74.295) (end 322.961 75.184) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 321.945 73.279) (end 322.961 74.295) (width 0.2032) (layer Composant) (net 243))
+ (via (at 160.655 94.615) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 344.17 65.659) (end 345.567 64.262) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.072 66.04) (end 322.072 65.6844) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 319.532 66.04) (end 322.072 66.04) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 155.067 82.804) (end 155.067 85.09) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 134.747 101.2825) (end 135.0645 100.965) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 135.0645 100.965) (end 138.176 100.965) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 134.747 103.759) (end 134.747 101.2825) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 128.905 103.759) (end 128.905 95.885) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 125.984 94.996) (end 128.016 94.996) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 160.02 81.28) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 128.905 75.819) (end 128.905 76.835) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 149.225 125.095) (end 149.225 135.89) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 123.19 122.555) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 140.335 139.7) (end 143.51 139.7) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 124.46 122.555) (end 124.46 125.349) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.02 81.28) (end 159.3088 81.9912) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 157.1752 81.9912) (end 159.3088 81.9912) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 138.43 158.496) (end 138.43 154.94) (width 0.381) (layer Cuivre) (net 243) (status 800))
+ (segment (start 140.589 103.759) (end 140.589 100.965) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 123.19 81.788) (end 123.19 75.819) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 141.2494 72.5678) (end 141.2494 74.803) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 141.605 154.305) (end 141.605 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 115.57 158.496) (end 115.57 153.035) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 108.585 125.73) (end 111.125 125.73) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 151.13 153.67) (end 151.13 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 135.509 116.078) (end 135.4074 115.9764) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 110.49 153.035) (end 110.49 144.145) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 165.1 153.035) (end 154.94 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 334.518 64.897) (end 333.756 64.897) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 121.92 154.94) (end 120.65 153.67) (width 0.381) (layer Composant) (net 243))
+ (segment (start 165.608 85.852) (end 166.116 85.852) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 165.1 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 152.4 154.94) (end 151.13 153.67) (width 0.381) (layer Composant) (net 243))
+ (segment (start 134.747 145.034) (end 134.747 146.939) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 147.955 110.49) (end 147.955 106.68) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 167.005 154.305) (end 167.005 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 125.984 122.6058) (end 123.19 122.6058) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 140.335 139.7) (end 135.89 139.7) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 135.89 139.7) (end 135.89 136.525) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 135.89 136.525) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 133.985 136.525) (end 135.89 136.525) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 113.03 158.496) (end 113.03 153.035) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 138.43 154.94) (end 137.795 154.305) (width 0.381) (layer Cuivre) (net 243))
+ (segment (start 110.49 153.035) (end 109.22 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 142.24 158.496) (end 142.24 154.94) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 167.005 153.035) (end 165.1 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 137.795 154.305) (end 137.795 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 96.0374 93.091) (end 95.7834 92.837) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 160.02 123.19) (end 156.845 123.19) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 110.109 64.643) (end 113.919 64.643) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 96.0374 93.091) (end 102.235 93.091) (width 0.2032) (layer Composant) (net 243))
+ (via (at 120.65 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 155.067 147.955) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 155.067 147.955) (end 154.559 148.463) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 147.955 146.7612) (end 147.955 147.955) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 134.62 147.955) (end 134.62 147.066) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 147.7518 146.558) (end 147.955 146.7612) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 134.62 147.066) (end 134.747 146.939) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 95.25 92.837) (end 95.758 92.837) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 95.758 92.837) (end 96.012 93.091) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 95.25 81.28) (end 95.25 83.312) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 344.2208 60.833) (end 344.2208 62.357) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 147.32 158.496) (end 147.32 153.035) (width 0.381) (layer Cuivre) (net 243) (status 800))
+ (segment (start 141.605 154.305) (end 140.97 154.94) (width 0.381) (layer Cuivre) (net 243))
+ (via (at 147.32 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 61.595 107.315) (end 56.515 107.315) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 124.46 125.349) (end 124.46 135.89) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 128.905 88.9) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 125.984 81.9912) (end 124.46 81.9912) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 127.508 104.14) (end 127.254 103.886) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 128.651 104.14) (end 127.508 104.14) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 127.254 103.886) (end 127.254 103.505) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 147.955 110.49) (end 146.431 112.014) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 97.79 151.765) (end 88.9 151.765) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 157.1752 136.271) (end 160.02 136.271) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 116.459 149.987) (end 116.459 152.146) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 129.54 154.94) (end 130.175 154.305) (width 0.381) (layer Composant) (net 243))
+ (segment (start 156.845 123.19) (end 156.845 125.095) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 138.176 102.235) (end 127.635 102.235) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 56.515 84.455) (end 56.515 90.805) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 61.595 118.745) (end 56.515 118.745) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 56.515 113.665) (end 61.595 113.665) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 56.515 107.315) (end 56.515 113.665) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 311.277 121.666) (end 311.023 121.285) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 116.332 148.463) (end 116.332 149.86) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 116.332 149.86) (end 116.459 149.987) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 155.067 85.09) (end 155.067 87.122) (width 0.2032) (layer Composant) (net 243))
+ (via (at 155.067 85.09) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 157.099 87.757) (end 155.702 87.757) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 98.044 82.423) (end 102.489 82.423) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 96.901 81.28) (end 98.044 82.423) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 123.19 81.788) (end 123.952 81.788) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 123.952 81.788) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 124.333 81.788) (end 123.952 81.788) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 124.46 81.915) (end 124.333 81.788) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 124.46 81.9912) (end 124.46 81.915) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 102.489 82.423) (end 102.489 81.28) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 142.24 154.94) (end 141.605 154.305) (width 0.381) (layer Composant) (net 243))
+ (segment (start 95.504 83.566) (end 97.536 83.566) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 95.25 83.312) (end 95.504 83.566) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 95.25 81.28) (end 95.25 87.249) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 96.0374 94.869) (end 96.0374 93.091) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 95.25 87.249) (end 95.25 92.837) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 92.456 87.1982) (end 95.25 87.1982) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 95.25 87.1982) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 95.25 87.1982) (end 95.25 87.249) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 95.25 81.28) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 191.135 144.526) (end 192.913 144.526) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 141.605 153.035) (end 141.605 154.305) (width 0.381) (layer Cuivre) (net 243))
+ (segment (start 108.585 88.9) (end 113.03 88.9) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 102.489 93.345) (end 109.347 93.345) (width 0.2032) (layer Composant) (net 243))
+ (via (at 108.585 92.075) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 110.236 93.726) (end 110.236 94.742) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 137.16 154.94) (end 137.795 154.305) (width 0.381) (layer Composant) (net 243))
+ (segment (start 110.236 94.742) (end 110.3376 94.869) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (via (at 167.005 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 109.093 92.075) (end 109.347 92.329) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 109.347 92.329) (end 109.347 93.345) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 108.585 92.075) (end 108.585 88.9) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 165.608 106.045) (end 165.608 115.316) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 186.69 62.865) (end 186.69 71.755) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 186.69 71.755) (end 186.69 80.645) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 186.69 89.535) (end 186.69 80.645) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 186.69 89.535) (end 186.69 98.425) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 186.69 98.425) (end 186.69 107.315) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 147.32 153.035) (end 151.13 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 186.69 116.205) (end 186.69 125.095) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 108.585 92.075) (end 109.093 92.075) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 228.6 74.295) (end 228.6 83.185) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 228.6 83.185) (end 228.6 92.075) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 228.6 92.075) (end 228.6 100.965) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 228.6 100.965) (end 228.6 109.855) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 228.6 109.855) (end 228.6 118.745) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 228.6 118.745) (end 228.6 126.238) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 228.6 126.238) (end 228.6 127.635) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 281.94 65.405) (end 281.94 74.295) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 281.94 74.295) (end 281.94 83.185) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 281.94 83.185) (end 281.94 92.075) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 281.94 100.965) (end 281.94 109.855) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 281.94 92.075) (end 281.94 100.965) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 281.94 109.855) (end 281.94 118.745) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 281.94 118.745) (end 281.94 127.635) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 56.515 84.455) (end 61.595 84.455) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 166.37 154.94) (end 167.005 154.305) (width 0.381) (layer Composant) (net 243))
+ (segment (start 61.595 79.375) (end 61.595 84.455) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 155.575 81.9912) (end 157.1752 81.9912) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (via (at 149.225 125.095) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 151.13 153.035) (end 154.94 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 95.25 81.28) (end 96.901 81.28) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 137.16 154.94) (end 137.16 158.496) (width 0.381) (layer Composant) (net 243) (status 400))
+ (segment (start 61.595 102.235) (end 61.595 107.315) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 81.153 57.912) (end 83.693 57.912) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (via (at 146.685 135.89) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 113.03 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 61.595 113.665) (end 61.595 118.745) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 109.22 153.035) (end 109.22 151.384) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 70.485 133.096) (end 70.485 135.89) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 67.945 139.954) (end 67.945 142.875) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 67.945 142.875) (end 67.945 142.748) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 70.485 135.89) (end 69.215 137.16) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 67.945 139.7) (end 67.945 139.954) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 69.215 137.16) (end 69.215 138.43) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 69.215 138.43) (end 67.945 139.7) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 61.595 118.745) (end 61.595 142.5575) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 61.595 142.5575) (end 61.9125 142.875) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 124.46 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 128.905 75.819) (end 123.19 75.819) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 123.19 86.995) (end 123.19 81.788) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 111.125 125.73) (end 113.665 125.73) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 158.115 106.045) (end 165.608 106.045) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 319.278 66.294) (end 319.532 66.04) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 319.278 68.326) (end 319.278 66.294) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 127.635 90.805) (end 128.905 89.535) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 321.564 73.279) (end 321.945 73.279) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 321.437 73.406) (end 321.564 73.279) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 321.183 73.406) (end 321.437 73.406) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 321.183 73.5076) (end 321.183 73.406) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 313.182 105.029) (end 313.817 104.394) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 306.07 105.029) (end 313.182 105.029) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 303.53 107.569) (end 306.07 105.029) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 159.512 75.692) (end 157.48 75.692) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 160.02 76.2) (end 159.512 75.692) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.614 67.437) (end 86.995 67.818) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 86.995 67.818) (end 86.995 69.215) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 78.613 67.437) (end 86.614 67.437) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 90.805 61.849) (end 91.059 61.595) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 90.551 69.215) (end 90.805 68.961) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 93.345 61.595) (end 93.345 63.5) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 90.805 68.961) (end 90.805 61.849) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 91.059 61.595) (end 93.345 61.595) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 102.235 64.008) (end 102.235 65.405) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 101.981 63.754) (end 102.235 64.008) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 102.235 67.564) (end 102.489 67.818) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 102.489 67.818) (end 105.283 67.818) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 105.283 67.818) (end 109.855 67.818) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 93.599 63.754) (end 101.981 63.754) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 102.235 65.405) (end 102.235 67.564) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 353.822 84.5566) (end 353.822 84.582) (width 0.2032) (layer Composant) (net 243))
+ (via (at 78.486 139.827) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 109.855 67.818) (end 110.109 67.564) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 78.486 145.923) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 78.486 142.875) (end 78.486 145.923) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 78.486 145.923) (end 76.708 145.923) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 93.345 63.5) (end 93.599 63.754) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 61.595 95.885) (end 64.643 98.933) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 110.109 67.564) (end 110.109 64.643) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 69.342 118.745) (end 69.596 118.491) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 78.486 139.827) (end 78.486 142.875) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 109.855 93.345) (end 110.236 93.726) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 97.79 151.765) (end 97.79 149.733) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 82.042 136.779) (end 82.042 133.731) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 97.79 151.765) (end 98.933 150.622) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 78.486 142.875) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 67.056 98.933) (end 67.056 100.457) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 76.708 142.875) (end 78.486 142.875) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 75.946 104.648) (end 67.31 104.648) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 160.655 94.3356) (end 160.655 94.615) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 109.22 142.875) (end 107.315 141.097) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 88.9 146.177) (end 88.9 147.955) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 88.646 145.923) (end 88.9 146.177) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 78.486 145.923) (end 88.646 145.923) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 78.613 88.011) (end 79.375 88.011) (width 0.2032) (layer Composant) (net 243))
+ (via (at 79.375 88.011) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 79.375 88.011) (end 80.772 88.011) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 80.772 85.471) (end 80.772 88.011) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 77.47 82.931) (end 75.819 82.931) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 75.819 82.931) (end 74.422 82.931) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 109.22 142.875) (end 110.49 144.145) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 135.509 119.126) (end 135.255 119.38) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 108.458 150.622) (end 109.22 151.384) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 67.056 100.457) (end 67.056 104.394) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 130.81 64.262) (end 130.81 62.865) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 147.32 106.68) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 127 60.325) (end 125.603 60.325) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 116.459 152.146) (end 115.57 153.035) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 78.359 88.265) (end 78.613 88.011) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 135.4074 72.5678) (end 135.4074 75.565) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 112.395 84.455) (end 102.743 84.455) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 102.489 84.201) (end 102.489 82.423) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.326 60.706) (end 329.057 60.706) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 130.81 62.357) (end 130.81 62.865) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 131.064 62.103) (end 130.81 62.357) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 155.575 62.103) (end 131.064 62.103) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.02 61.341) (end 160.02 74.295) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 160.02 61.341) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 150.368 61.341) (end 160.02 61.341) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 316.357 61.976) (end 315.214 60.833) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 321.056 61.976) (end 316.357 61.976) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.326 60.706) (end 321.056 61.976) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 147.828 73.914) (end 147.7518 73.914) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 147.828 74.422) (end 147.828 73.914) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 147.7518 72.5678) (end 147.7518 73.914) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 332.994 132.08) (end 333.756 131.318) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 157.1752 76.1492) (end 160.02 76.1492) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 160.02 76.2) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 160.02 76.1492) (end 160.02 76.2) (width 0.2032) (layer Composant) (net 243))
+ (via (at 310.388 74.168) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 310.642 74.168) (end 310.388 74.168) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 310.388 74.168) (end 310.388 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 97.536 83.566) (end 103.251 83.566) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 305.435 80.01) (end 301.117 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 115.57 153.035) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 330.073 132.08) (end 332.994 132.08) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 310.896 74.422) (end 310.642 74.168) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 322.834 85.725) (end 322.834 81.661) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 329.311 131.318) (end 330.073 132.08) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 98.933 150.622) (end 108.458 150.622) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 313.817 104.394) (end 313.817 99.949) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (via (at 165.608 115.316) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 155.067 147.955) (end 160.02 143.002) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.909 81.534) (end 160.655 81.28) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 140.335 139.7) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 120.777 103.886) (end 124.079 103.886) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.961 81.534) (end 322.961 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 305.943 67.564) (end 306.324 67.945) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 120.396 103.505) (end 120.777 103.886) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 128.905 89.535) (end 128.905 88.9) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 160.655 81.28) (end 160.02 81.28) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 353.949 84.455) (end 359.41 89.916) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 338.455 131.318) (end 338.836 131.699) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.834 81.661) (end 322.961 81.534) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 157.48 75.692) (end 157.48 75.946) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 124.079 103.886) (end 124.46 103.505) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 128.905 88.9) (end 127.635 90.17) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 319.8368 85.852) (end 321.183 85.852) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 306.324 67.945) (end 306.324 67.818) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 306.324 67.945) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 312.674 74.422) (end 310.896 74.422) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 310.388 80.01) (end 305.435 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.15 80.01) (end 310.388 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 322.834 85.725) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 311.531 80.01) (end 311.15 80.01) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 311.531 79.9084) (end 311.531 80.01) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 312.674 79.9084) (end 311.531 79.9084) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 305.435 80.01) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 297.18 79.9338) (end 298.069 79.9338) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 305.435 82.169) (end 305.435 80.01) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 113.03 153.035) (end 110.49 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 115.57 153.035) (end 116.84 154.305) (width 0.381) (layer Cuivre) (net 243))
+ (segment (start 301.117 74.295) (end 301.117 67.818) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 301.117 80.01) (end 301.117 74.295) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 301.117 80.01) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 124.46 153.035) (end 130.175 153.035) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 322.961 80.01) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 321.31 85.725) (end 322.834 85.725) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 321.183 85.852) (end 321.31 85.725) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 120.65 153.67) (end 120.65 153.035) (width 0.381) (layer Composant) (net 243))
+ (segment (start 310.896 67.183) (end 311.023 67.056) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.023 67.056) (end 311.023 60.833) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 310.896 67.818) (end 310.896 67.183) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 310.896 66.675) (end 310.9214 66.675) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 310.896 67.818) (end 310.896 66.675) (width 0.2032) (layer Composant) (net 243))
+ (via (at 310.896 67.818) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 305.943 66.675) (end 305.9176 66.675) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 305.943 67.564) (end 305.943 66.675) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 310.896 67.818) (end 306.324 67.818) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 301.117 67.818) (end 306.324 67.818) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 299.9232 67.818) (end 301.117 67.818) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 299.9232 67.818) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 299.9232 66.675) (end 299.9232 67.818) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 322.961 75.184) (end 322.961 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.961 65.6844) (end 322.961 75.184) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 319.8368 73.5076) (end 321.183 73.5076) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 322.961 80.01) (end 336.55 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 324.231 80.01) (end 324.231 80.264) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 322.961 80.01) (end 324.231 80.01) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 97.79 158.496) (end 97.79 151.765) (width 0.381) (layer Composant) (net 243) (status 800))
+ (segment (start 319.8368 80.01) (end 322.961 80.01) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 305.816 117.221) (end 305.816 117.729) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 306.07 116.967) (end 305.816 117.221) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 306.705 116.967) (end 306.07 116.967) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 319.151 114.3) (end 323.977 114.3) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.785 114.3) (end 319.151 114.3) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 300.99 114.3) (end 311.785 114.3) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 300.101 115.189) (end 300.99 114.3) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.277 121.666) (end 311.277 121.539) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 311.277 121.666) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 319.151 118.364) (end 321.437 118.364) (width 0.2032) (layer Cuivre) (net 243) (status C00))
+ (segment (start 347.218 108.458) (end 345.948 108.458) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 347.218 108.585) (end 347.218 108.458) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 356.616 127.635) (end 357.759 127.635) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 356.362 127.889) (end 356.616 127.635) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 356.362 131.699) (end 356.362 127.889) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 358.013 127.635) (end 359.41 127.635) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (via (at 358.013 127.635) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 357.759 127.635) (end 358.013 127.635) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 359.41 89.916) (end 359.41 63.881) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 351.028 74.803) (end 349.377 74.803) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 109.347 93.345) (end 109.855 93.345) (width 0.2032) (layer Composant) (net 243))
+ (via (at 311.15 80.01) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 313.817 99.949) (end 313.817 97.409) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 160.02 123.19) (end 160.02 136.525) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 75.819 81.788) (end 75.819 82.931) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 75.819 80.264) (end 75.819 81.788) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 147.0914 103.759) (end 147.0914 105.537) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 128.905 88.9) (end 128.905 85.09) (width 0.2032) (layer Cuivre) (net 243))
+ (via (at 147.955 110.49) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 333.8068 88.646) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 333.8068 88.646) (end 333.756 88.646) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 333.8068 92.0242) (end 333.8068 88.646) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 187.833 126.238) (end 228.6 126.238) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 186.69 125.095) (end 187.833 126.238) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 348.615 71.628) (end 345.567 71.628) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 348.869 71.882) (end 348.615 71.628) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 348.869 72.1868) (end 348.869 71.882) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 345.567 65.659) (end 345.567 65.786) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 348.742 65.659) (end 345.567 65.659) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 345.567 64.262) (end 346.964 65.659) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 322.961 65.6844) (end 329.311 65.6844) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 329.311 65.6844) (end 329.311 64.643) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.55 84.709) (end 336.55 82.931) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (via (at 322.072 65.6844) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 319.8368 65.6844) (end 322.072 65.6844) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 342.265 93.599) (end 342.265 92.0242) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 342.011 93.853) (end 342.265 93.599) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 337.312 93.853) (end 342.011 93.853) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 337.058 93.599) (end 337.312 93.853) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 337.058 92.0242) (end 337.058 93.599) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 349.758 91.44) (end 349.758 93.091) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (via (at 349.758 91.44) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 349.758 90.17) (end 349.758 91.44) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 349.504 89.916) (end 349.758 90.17) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 346.837 89.916) (end 349.504 89.916) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 345.694 90.17) (end 345.948 89.916) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 345.694 90.17) (end 345.5162 90.17) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 346.837 91.948) (end 346.8116 92.0242) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 346.837 89.916) (end 345.948 89.916) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 346.837 89.916) (end 346.837 91.948) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 346.837 88.646) (end 346.837 89.916) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 345.948 87.757) (end 346.837 88.646) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 349.377 77.343) (end 351.028 77.343) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 349.123 77.089) (end 349.377 77.343) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 349.123 75.057) (end 349.123 77.089) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 349.377 74.803) (end 349.123 75.057) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.028 78.105) (end 351.028 78.0542) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 356.362 131.699) (end 344.805 131.699) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 347.853 79.3496) (end 347.472 78.9686) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 352.552 78.105) (end 351.028 78.105) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 352.806 78.359) (end 352.552 78.105) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 352.806 79.629) (end 352.806 78.359) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 347.98 69.596) (end 348.234 69.342) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.234 69.342) (end 348.742 69.342) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.234 72.136) (end 348.869 72.1868) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 347.98 71.882) (end 348.234 72.136) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 347.98 69.596) (end 347.98 71.882) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.028 77.343) (end 351.028 77.3938) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 351.028 78.0542) (end 351.028 77.343) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 347.853 72.4408) (end 347.853 79.3496) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 348.107 72.1868) (end 347.853 72.4408) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 348.869 72.1868) (end 348.107 72.1868) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 348.869 72.1868) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 351.028 72.1868) (end 348.869 72.1868) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 95.25 81.28) (end 94.615 80.645) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 61.9125 142.875) (end 67.945 142.875) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 327.3044 88.646) (end 327.3044 87.376) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 329.2602 60.833) (end 329.2602 62.992) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 156.337 61.341) (end 160.02 61.341) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 155.575 62.103) (end 156.337 61.341) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 84.328 104.013) (end 84.328 102.743) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 84.074 104.267) (end 84.328 104.013) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 84.074 111.379) (end 84.074 104.267) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 83.566 111.887) (end 84.074 111.379) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 83.566 111.887) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 82.042 111.887) (end 83.566 111.887) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 61.595 118.745) (end 69.342 118.745) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (via (at 123.19 135.89) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 149.225 125.095) (end 134.62 125.095) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.02 76.2) (end 160.02 81.28) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 178.308 149.225) (end 186.436 149.225) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 191.135 144.526) (end 186.436 149.225) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 167.005 153.035) (end 168.275 151.765) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 154.94 158.496) (end 154.94 153.035) (width 0.381) (layer Cuivre) (net 243) (status 800))
+ (segment (start 175.895 151.765) (end 168.275 151.765) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 175.895 151.638) (end 175.895 151.765) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 143.129 75.692) (end 144.399 74.422) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 144.399 74.422) (end 147.828 74.422) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 135.255 76.835) (end 135.255 75.565) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 144.78 114.935) (end 142.875 116.84) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 127.254 102.616) (end 127.635 102.235) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 127.254 103.505) (end 127.254 102.616) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 352.552 80.645) (end 352.806 80.391) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.155 73.406) (end 351.028 73.5076) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 352.552 73.406) (end 351.155 73.406) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 352.806 73.152) (end 352.552 73.406) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 352.806 72.4408) (end 352.806 73.152) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 352.552 72.1868) (end 352.806 72.4408) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.028 72.1868) (end 352.552 72.1868) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 347.472 78.9686) (end 336.55 78.9686) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 338.328 66.167) (end 338.328 64.897) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 359.41 63.881) (end 359.156 63.627) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.804 66.421) (end 338.074 66.421) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.55 66.675) (end 336.804 66.421) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.55 78.9686) (end 336.55 66.675) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.55 80.01) (end 336.55 78.9686) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.55 82.931) (end 336.55 80.01) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 336.55 82.931) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 329.311 60.96) (end 329.311 64.643) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 329.057 60.706) (end 329.311 60.96) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.023 60.833) (end 315.214 60.833) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 311.023 60.833) (end 286.512 60.833) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 281.94 65.405) (end 286.512 60.833) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 283.591 127.889) (end 283.337 127.635) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 283.337 127.635) (end 281.94 127.635) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 283.591 129.54) (end 283.591 127.889) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 283.845 129.794) (end 283.591 129.54) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.912 129.794) (end 283.845 129.794) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 313.817 127.889) (end 311.912 129.794) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 359.41 125.222) (end 357.759 126.873) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 69.596 118.491) (end 69.596 118.237) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 69.596 118.237) (end 69.596 116.205) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 359.41 89.916) (end 359.41 125.222) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 333.756 131.318) (end 338.455 131.318) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 317.246 131.318) (end 329.311 131.318) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 313.817 127.889) (end 317.246 131.318) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 344.17 90.551) (end 344.17 87.503) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 342.9 91.821) (end 344.17 90.551) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 342.9 98.298) (end 342.9 91.821) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 340.995 100.203) (end 342.9 98.298) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 340.995 102.235) (end 340.995 100.203) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 345.567 62.611) (end 345.567 64.262) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 345.567 62.611) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 345.5162 60.833) (end 345.5162 62.611) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 346.837 60.833) (end 346.8116 60.833) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 346.837 62.357) (end 346.837 60.833) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 346.583 62.611) (end 346.837 62.357) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 345.5162 62.611) (end 346.583 62.611) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 345.567 62.611) (end 345.5162 62.611) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 344.4748 62.611) (end 345.567 62.611) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 344.2208 62.357) (end 344.4748 62.611) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 147.955 106.68) (end 147.32 106.68) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 344.17 65.659) (end 339.09 65.659) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 348.742 65.659) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 348.742 65.659) (end 346.964 65.659) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 338.3534 60.833) (end 338.3534 62.865) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 338.328 62.865) (end 338.328 64.897) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 338.3534 62.865) (end 338.328 62.865) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 348.742 65.6844) (end 348.742 65.659) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 338.328 64.897) (end 339.09 65.659) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 338.328 64.897) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 335.534 64.897) (end 338.328 64.897) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 329.311 62.992) (end 329.311 64.643) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 329.2602 62.992) (end 329.311 62.992) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 327.3044 87.376) (end 327.406 87.249) (width 0.2032) (layer Cuivre) (net 243) (status 400))
+ (segment (start 333.502 64.643) (end 329.311 64.643) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 333.756 64.897) (end 333.502 64.643) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 137.795 154.305) (end 137.795 153.035) (width 0.381) (layer Cuivre) (net 243))
+ (via (at 334.518 64.897) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 335.534 64.897) (end 334.518 64.897) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (via (at 329.311 64.643) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 327.66 64.643) (end 329.311 64.643) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 351.79 84.455) (end 353.949 84.455) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 349.123 87.122) (end 351.79 84.455) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 347.98 87.122) (end 349.123 87.122) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 347.599 87.503) (end 347.98 87.122) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 344.17 87.503) (end 347.599 87.503) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 338.709 87.503) (end 344.17 87.503) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 337.058 89.154) (end 338.709 87.503) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 336.042 89.154) (end 337.058 89.154) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 335.534 88.646) (end 336.042 89.154) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 333.756 88.646) (end 335.534 88.646) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 327.3044 88.646) (end 333.756 88.646) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 345.948 109.474) (end 345.948 108.458) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 345.821 109.601) (end 345.948 109.474) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 345.821 111.76) (end 345.821 109.601) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 345.821 111.76) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 346.964 111.76) (end 345.821 111.76) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 344.805 131.699) (end 346.583 131.699) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (via (at 344.805 131.699) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 338.836 131.699) (end 344.805 131.699) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 338.455 127.635) (end 338.455 131.318) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 338.455 125.095) (end 338.455 127.635) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 311.277 120.269) (end 311.785 119.761) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.277 121.539) (end 311.277 120.269) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.785 117.602) (end 311.785 119.761) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.277 121.539) (end 311.277 125.349) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 319.151 117.348) (end 319.151 114.3) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 319.151 117.348) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 319.151 118.364) (end 319.151 117.348) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 311.785 117.602) (end 311.785 114.3) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 311.785 117.602) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 311.785 117.729) (end 311.785 117.602) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 298.577 115.189) (end 300.101 115.189) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 323.977 114.3) (end 323.977 115.189) (width 0.2032) (layer GND_layer) (net 243) (status 400))
+ (segment (start 323.977 112.649) (end 323.977 114.3) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 323.977 112.649) (end 326.517 112.649) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 333.375 107.315) (end 340.995 107.315) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 333.375 107.315) (end 330.835 107.315) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (via (at 345.948 108.458) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 341.249 108.458) (end 345.948 108.458) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 340.995 108.204) (end 341.249 108.458) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 340.995 107.315) (end 340.995 108.204) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 340.995 104.775) (end 340.995 107.315) (width 0.2032) (layer GND_layer) (net 243) (status 800))
+ (segment (start 340.995 102.235) (end 340.995 104.775) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (segment (start 78.359 89.916) (end 78.359 88.265) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 149.225 124.206) (end 149.225 125.095) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 61.595 90.805) (end 61.595 95.885) (width 0.2032) (layer GND_layer) (net 243) (status C00))
+ (via (at 127.254 103.505) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 127.254 103.505) (end 128.905 103.505) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 147.32 100.965) (end 140.589 100.965) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 130.556 125.349) (end 124.46 125.349) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 147.32 100.965) (end 147.32 106.68) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 130.81 125.095) (end 130.556 125.349) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 134.62 125.095) (end 130.81 125.095) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 166.116 85.852) (end 166.37 86.106) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 157.1752 94.3356) (end 160.655 94.3356) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 160.655 88.392) (end 160.909 88.138) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.909 81.534) (end 160.909 88.138) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.655 88.392) (end 160.655 94.615) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.909 94.361) (end 164.084 94.361) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 160.655 94.615) (end 160.909 94.361) (width 0.2032) (layer GND_layer) (net 243))
+ (via (at 138.176 100.965) (size 0.889) (layers Composant Cuivre) (net 243))
+ (via (at 140.589 100.965) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 140.589 100.965) (end 138.176 100.965) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 147.955 110.49) (end 148.4122 110.9472) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 123.19 135.89) (end 123.19 147.955) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 147.32 105.537) (end 147.0914 105.537) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 147.32 106.68) (end 147.32 105.537) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 142.875 112.522) (end 143.383 112.014) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 148.4122 113.8428) (end 148.4122 110.9472) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 146.431 112.014) (end 143.383 112.014) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 311.277 121.539) (end 311.277 121.666) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 147.955 106.68) (end 148.59 106.045) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 158.115 106.045) (end 148.59 106.045) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 152.4 154.94) (end 152.4 158.496) (width 0.381) (layer Composant) (net 243) (status 400))
+ (segment (start 135.255 121.031) (end 135.255 119.38) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 134.62 121.666) (end 135.255 121.031) (width 0.2032) (layer Composant) (net 243))
+ (via (at 134.62 121.666) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 134.239 121.666) (end 134.62 121.666) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 133.985 121.92) (end 134.239 121.666) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 123.19 122.6058) (end 123.19 122.555) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.409 79.375) (end 351.028 79.3496) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 352.552 79.375) (end 351.409 79.375) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 81.153 57.912) (end 75.692 57.912) (width 0.2032) (layer Cuivre) (net 243) (status 800))
+ (segment (start 75.692 57.912) (end 75.438 58.166) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 75.438 58.166) (end 75.438 67.183) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 75.438 67.183) (end 75.692 67.437) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 75.692 67.437) (end 78.613 67.437) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 352.806 80.391) (end 352.806 79.629) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 351.028 80.645) (end 352.552 80.645) (width 0.2032) (layer Composant) (net 243) (status 800))
+ (segment (start 353.822 84.582) (end 353.949 84.455) (width 0.2032) (layer Composant) (net 243) (status 400))
+ (segment (start 121.031 122.555) (end 117.856 125.73) (width 0.2032) (layer GND_layer) (net 243) (tstamp 5402D936))
+ (segment (start 117.856 125.73) (end 116.205 125.73) (width 0.2032) (layer GND_layer) (net 243) (tstamp 5402D938))
+ (segment (start 123.19 122.555) (end 121.031 122.555) (width 0.2032) (layer GND_layer) (net 243))
+ (segment (start 119.38 125.857) (end 119.38 124.46) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 119.507 125.984) (end 119.38 125.857) (width 0.2032) (layer Composant) (net 243) (tstamp 5402D957))
+ (via (at 119.507 125.984) (size 0.889) (layers Composant Cuivre) (net 243))
+ (segment (start 121.92 123.444) (end 122.809 122.555) (width 0.2032) (layer Composant) (net 243) (tstamp 5402D95E))
+ (segment (start 122.809 122.555) (end 123.19 122.555) (width 0.2032) (layer Composant) (net 243) (tstamp 5402D95F))
+ (segment (start 121.92 124.46) (end 121.92 123.444) (width 0.2032) (layer Composant) (net 243))
+ (segment (start 163.576 132.334) (end 163.322 132.08) (width 0.2032) (layer Cuivre) (net 243) (tstamp 5402D97D))
+ (segment (start 163.576 133.731) (end 163.576 132.334) (width 0.2032) (layer Cuivre) (net 243))
+ (segment (start 95.25 161.163) (end 95.25 158.496) (width 0.2032) (layer Composant) (net 244))
+ (segment (start 96.52 161.163) (end 96.52 158.496) (width 0.2032) (layer Composant) (net 245))
+ (segment (start 99.06 161.163) (end 99.06 158.496) (width 0.3048) (layer Cuivre) (net 246) (status C00))
+ (segment (start 99.06 158.496) (end 99.06 153.035) (width 0.2032) (layer Composant) (net 246) (status 800))
+ (segment (start 99.06 153.035) (end 99.06 158.496) (width 0.2032) (layer Cuivre) (net 246) (status 400))
+ (segment (start 99.06 161.163) (end 99.06 158.496) (width 0.3048) (layer Composant) (net 246) (status C00))
+ (via (at 99.06 153.035) (size 0.889) (layers Composant Cuivre) (net 246))
+ (segment (start 118.11 161.163) (end 118.11 158.496) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 104.14 161.163) (end 104.14 158.496) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 108.585 118.11) (end 111.125 118.11) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 171.45 150.114) (end 170.942 149.606) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 146.812 62.865) (end 146.812 61.341) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 170.942 149.606) (end 117.983 149.606) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 117.983 149.606) (end 117.475 149.987) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 342.9254 92.0242) (end 342.9254 94.615) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 148.59 142.24) (end 148.59 141.478) (width 0.2032) (layer Composant) (net 247))
+ (via (at 148.59 141.478) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 148.59 141.478) (end 148.59 143.51) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 148.59 141.478) (end 148.59 139.7) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 135.255 140.843) (end 135.255 139.7) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 114.554 87.1982) (end 111.76 87.1982) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 85.09 142.875) (end 84.328 143.637) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 84.328 143.637) (end 84.328 146.431) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 84.328 146.431) (end 85.09 147.193) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 342.9254 94.615) (end 342.9254 97.155) (width 0.2032) (layer Composant) (net 247))
+ (via (at 135.255 140.843) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 135.255 140.843) (end 135.255 139.065) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 327.025 132.08) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 135.4074 140.843) (end 135.255 140.843) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 328.295 131.572) (end 328.295 131.826) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 309.753 59.817) (end 316.992 59.817) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 336.423 92.0242) (end 336.423 93.726) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 306.451 80.772) (end 306.451 82.677) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 310.388 73.025) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 310.388 73.025) (end 311.15 73.787) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 311.15 73.787) (end 311.531 73.787) (width 0.2032) (layer Composant) (net 247))
+ (via (at 337.312 94.615) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 114.3 154.94) (end 114.3 158.496) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 245.11 80.645) (end 245.11 71.755) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 319.278 71.628) (end 319.278 73.406) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 319.278 73.406) (end 319.532 73.66) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 319.532 73.66) (end 321.437 73.66) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 321.437 73.66) (end 321.691 73.914) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 321.691 73.914) (end 321.691 74.1426) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 134.747 116.84) (end 134.62 116.84) (width 0.2032) (layer Composant) (net 247))
+ (via (at 329.2602 89.916) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 127.635 68.961) (end 127.635 72.009) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 111.76 92.71) (end 111.76 90.805) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 328.041 132.08) (end 327.025 132.08) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 332.105 66.167) (end 332.105 64.897) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 329.2602 92.0242) (end 329.2602 89.916) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 95.377 94.869) (end 95.377 96.52) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 88.265 79.375) (end 86.36 79.375) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 84.582 77.597) (end 86.36 79.375) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 75.819 118.491) (end 86.106 118.491) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 155.067 122.6058) (end 155.067 122.936) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 125.984 102.743) (end 125.984 100.838) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 127.635 72.771) (end 127.635 72.009) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 127.889 73.025) (end 127.635 72.771) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 135.255 71.755) (end 141.986 71.755) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 142.494 72.263) (end 142.494 73.66) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 141.986 71.755) (end 142.494 72.263) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 141.9098 74.803) (end 142.494 74.803) (width 0.2032) (layer Composant) (net 247))
+ (via (at 142.494 74.803) (size 0.889) (layers Composant Cuivre) (net 247))
+ (via (at 321.691 74.1426) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 198.628 134.747) (end 200.279 133.096) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 107.315 82.042) (end 107.95 82.042) (width 0.2032) (layer Composant) (net 247))
+ (via (at 107.95 82.042) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 107.95 82.042) (end 107.95 81.28) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 103.632 82.042) (end 104.013 82.423) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 104.013 82.423) (end 106.934 82.423) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 106.934 82.423) (end 107.315 82.042) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 301.879 77.597) (end 301.371 77.089) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 302.006 75.057) (end 302.006 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 301.371 75.692) (end 302.006 75.057) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 301.371 77.089) (end 301.371 75.692) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 301.879 79.375) (end 301.879 77.597) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 308.229 61.341) (end 309.753 59.817) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 318.643 58.801) (end 319.151 58.293) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 319.151 58.293) (end 328.5998 58.293) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 72.517 115.189) (end 75.819 118.491) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 245.11 98.425) (end 245.11 102.235) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 300.4312 65.913) (end 300.1772 65.659) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 298.704 73.9394) (end 298.704 74.041) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 141.9098 72.5678) (end 141.9098 74.803) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 270.51 116.205) (end 270.51 125.095) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 361.315 87.63) (end 361.569 87.376) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 270.51 71.755) (end 270.51 80.645) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 298.704 68.4276) (end 298.958 68.1736) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 323.85 86.487) (end 324.104 86.741) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 69.596 111.887) (end 69.596 109.982) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 69.596 109.982) (end 69.342 109.728) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 69.342 109.728) (end 68.834 109.728) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 68.834 109.728) (end 68.58 109.474) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 317.627 62.23) (end 317.246 62.23) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 68.58 109.474) (end 68.58 106.934) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 146.812 62.865) (end 147.447 63.5) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 146.812 62.865) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 310.007 72.644) (end 310.007 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 310.388 73.025) (end 310.007 72.644) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 95.377 96.52) (end 97.663 96.52) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 155.575 72.39) (end 155.829 72.644) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 154.686 72.39) (end 155.575 72.39) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 311.15 82.931) (end 311.912 82.169) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.686 72.39) (end 154.686 68.453) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.686 72.39) (end 154.686 73.025) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.686 72.39) (end 154.305 72.39) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 154.305 72.39) (end 154.2542 72.5678) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 93.218 65.405) (end 94.615 65.405) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 310.896 68.961) (end 311.404 68.453) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 323.977 69.469) (end 324.739 68.707) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 324.739 68.707) (end 331.851 68.707) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 331.851 68.707) (end 332.105 68.453) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 332.105 68.453) (end 332.105 66.167) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 86.741 61.341) (end 91.313 61.341) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 91.313 61.341) (end 91.948 61.976) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 91.948 61.976) (end 91.948 64.389) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 92.075 120.015) (end 92.075 121.92) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 91.948 64.389) (end 92.964 65.405) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 125.476 66.802) (end 127.635 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 312.674 68.4276) (end 312.674 68.453) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 327.025 132.08) (end 322.961 132.08) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 306.705 82.931) (end 311.15 82.931) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 311.912 82.169) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 101.6 152.4) (end 100.965 151.765) (width 0.2032) (layer Composant) (net 247))
+ (via (at 154.813 88.138) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 298.9326 82.169) (end 298.9326 80.772) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 157.1752 88.4936) (end 157.099 88.5698) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 103.1748 80.137) (end 103.632 80.5942) (width 0.2032) (layer Composant) (net 247))
+ (via (at 123.19 88.9) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 327.025 132.334) (end 327.025 132.08) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 327.279 132.588) (end 327.025 132.334) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 355.219 132.588) (end 327.279 132.588) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 361.569 126.238) (end 355.219 132.588) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.813 88.5698) (end 154.813 88.138) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 270.51 125.857) (end 270.51 125.095) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 270.764 126.111) (end 270.51 125.857) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 284.48 126.111) (end 270.764 126.111) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 288.036 129.667) (end 284.48 126.111) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 320.548 129.667) (end 288.036 129.667) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 322.961 132.08) (end 320.548 129.667) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 159.385 100.838) (end 160.401 100.838) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 336.423 90.17) (end 336.423 92.0242) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 126.365 123.19) (end 126.365 120.65) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 147.955 116.332) (end 147.955 114.935) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 106.68 153.035) (end 106.68 158.496) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 328.295 131.826) (end 328.041 132.08) (width 0.2032) (layer Composant) (net 247))
+ (via (at 172.72 153.035) (size 0.889) (layers Composant Cuivre) (net 247))
+ (via (at 310.896 68.961) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 314.071 65.786) (end 317.881 65.786) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 113.03 120.65) (end 112.141 119.761) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 113.03 120.65) (end 117.094 120.65) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 152.527 67.945) (end 154.178 67.945) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 113.03 120.65) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 113.284 121.666) (end 113.03 121.412) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 112.141 119.761) (end 111.125 119.761) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 100.965 153.035) (end 100.965 151.765) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 86.106 118.491) (end 86.36 118.745) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.2542 103.759) (end 155.448 103.759) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 88.265 70.358) (end 88.265 79.375) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 93.218 96.266) (end 93.218 96.012) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 157.48 134.62) (end 157.48 135.89) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 166.243 134.62) (end 157.48 134.62) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 157.48 135.89) (end 154.305 135.89) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 166.243 134.62) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 154.305 135.6106) (end 154.305 135.89) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 157.1752 135.6106) (end 154.305 135.6106) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 147.955 116.586) (end 147.955 116.332) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 88.265 70.358) (end 93.218 65.405) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 157.226 100.838) (end 157.1752 100.838) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 140.97 103.505) (end 140.97 105.918) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 103.1748 94.869) (end 103.1748 96.266) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 97.536 87.249) (end 96.647 88.138) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 96.647 88.138) (end 91.059 88.138) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 305.435 66.675) (end 305.4096 66.675) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 305.435 68.961) (end 305.435 66.675) (width 0.2032) (layer Composant) (net 247))
+ (via (at 305.435 68.961) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 302.006 68.961) (end 305.435 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 300.355 68.961) (end 302.006 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 151.892 67.945) (end 152.527 67.945) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 151.892 67.945) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 151.892 66.802) (end 151.892 67.945) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 172.339 136.144) (end 188.595 136.144) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 172.085 135.89) (end 172.339 136.144) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.831 126.746) (end 171.831 129.159) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 202.946 131.318) (end 201.803 131.318) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.323 97.282) (end 173.609 97.282) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 171.323 112.268) (end 173.609 112.268) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 171.831 126.746) (end 173.609 126.746) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (via (at 171.831 126.746) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 72.517 112.141) (end 72.517 115.189) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 72.263 111.887) (end 72.517 112.141) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 71.12 111.887) (end 72.263 111.887) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 201.549 131.572) (end 201.549 133.096) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 201.803 131.318) (end 201.549 131.572) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 203.2 131.064) (end 202.946 131.318) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 201.549 133.096) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 99.695 121.92) (end 103.378 118.11) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 201.549 133.096) (end 202.565 133.096) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 94.615 65.405) (end 92.964 65.405) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 200.279 133.096) (end 201.549 133.096) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 125.73 88.9) (end 125.73 102.743) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 69.596 111.887) (end 71.12 111.887) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 298.704 68.707) (end 298.704 68.4276) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 298.958 68.961) (end 298.704 68.707) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 300.355 68.961) (end 298.958 68.961) (width 0.2032) (layer Composant) (net 247))
+ (via (at 300.355 68.961) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 300.355 72.39) (end 300.355 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 188.595 134.747) (end 198.628 134.747) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 118.11 154.94) (end 117.475 154.305) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 100.33 152.4) (end 100.965 151.765) (width 0.2032) (layer Cuivre) (net 247))
+ (via (at 154.305 135.89) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 108.585 118.11) (end 103.378 118.11) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 125.984 123.2662) (end 128.905 123.2662) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 300.355 72.39) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 299.974 74.041) (end 300.355 73.66) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 300.355 73.66) (end 300.355 72.39) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 298.704 74.041) (end 299.974 74.041) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 270.51 98.425) (end 270.51 89.535) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 297.18 73.9394) (end 298.704 73.9394) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 298.9326 66.675) (end 299.4152 66.675) (width 0.2032) (layer Composant) (net 247) (status C00))
+ (segment (start 298.958 66.802) (end 298.9326 66.675) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 298.958 68.1736) (end 298.958 66.802) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 171.323 97.282) (end 171.323 85.09) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 297.18 68.4276) (end 298.704 68.4276) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 332.105 64.897) (end 332.232 64.897) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 102.489 97.155) (end 98.298 97.155) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 128.905 123.19) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 113.03 151.765) (end 106.68 151.765) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 128.905 123.2662) (end 128.905 123.19) (width 0.2032) (layer Composant) (net 247))
+ (via (at 168.91 153.035) (size 0.889) (layers Composant Cuivre) (net 247))
+ (via (at 147.955 116.332) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 103.632 66.802) (end 125.476 66.802) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 157.1752 100.203) (end 157.1752 100.838) (width 0.2032) (layer Composant) (net 247) (status C00))
+ (segment (start 147.193 134.493) (end 147.193 127.508) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 106.68 153.035) (size 0.889) (layers Composant Cuivre) (net 247))
+ (via (at 104.14 153.035) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 104.14 158.496) (end 104.14 153.035) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 270.51 71.755) (end 270.51 62.865) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 203.2 92.075) (end 203.2 100.965) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (via (at 71.12 111.887) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 245.11 116.205) (end 245.11 107.315) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 111.633 94.869) (end 111.633 92.71) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 324.104 86.741) (end 324.104 87.249) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 321.691 86.487) (end 323.85 86.487) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 319.913 86.487) (end 319.8368 86.5124) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 321.691 86.487) (end 319.913 86.487) (width 0.2032) (layer Composant) (net 247))
+ (via (at 321.691 86.487) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 106.68 83.439) (end 106.68 83.82) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 321.691 74.1426) (end 321.691 86.487) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 336.169 89.916) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 336.169 89.916) (end 336.423 90.17) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 329.2602 89.916) (end 336.169 89.916) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 328.5998 58.293) (end 330.835 60.4774) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 332.105 66.167) (end 330.835 64.897) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 330.835 64.897) (end 330.835 60.4774) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 332.105 66.167) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 341.63 94.615) (end 342.9254 94.615) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 245.11 116.205) (end 245.11 125.095) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 203.2 127.635) (end 203.2 118.745) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 245.745 107.315) (end 245.11 107.315) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 103.1748 78.867) (end 103.1748 80.137) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 125.476 64.389) (end 125.476 66.802) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 269.24 108.585) (end 247.015 108.585) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 85.09 142.875) (end 85.09 135.89) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 123.19 88.9) (end 123.19 90.805) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 203.2 109.855) (end 203.2 118.745) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 270.51 116.205) (end 270.51 107.315) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 203.835 100.965) (end 203.2 100.965) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (via (at 341.63 94.615) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 337.312 94.615) (end 341.63 94.615) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 111.633 92.71) (end 111.76 92.71) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 336.423 93.726) (end 337.312 94.615) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 318.643 58.801) (end 316.992 58.801) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 316.992 59.817) (end 316.992 58.801) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 316.992 61.976) (end 316.992 59.817) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 311.912 82.169) (end 310.9214 82.169) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 310.896 68.961) (end 314.071 65.786) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 304.546 80.772) (end 306.451 80.772) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 161.036 86.741) (end 161.671 86.106) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 161.671 86.106) (end 163.83 86.106) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 160.147 88.138) (end 161.036 87.249) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 161.036 87.249) (end 161.036 86.741) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 164.846 85.09) (end 171.323 85.09) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 163.83 86.106) (end 164.846 85.09) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.813 88.138) (end 160.147 88.138) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 303.276 80.772) (end 304.546 80.772) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 361.569 86.487) (end 361.569 126.238) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 270.51 62.865) (end 272.034 61.341) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (via (at 298.9326 80.772) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 311.531 73.914) (end 311.531 73.787) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 304.927 80.772) (end 304.927 82.169) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 304.546 80.772) (end 304.927 80.772) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 103.1748 96.266) (end 102.997 96.266) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 94.615 65.405) (end 97.155 65.405) (width 0.2032) (layer Cuivre) (net 247) (status C00))
+ (segment (start 125.73 104.14) (end 125.73 102.743) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 102.997 96.266) (end 102.997 97.663) (width 0.2032) (layer Composant) (net 247))
+ (via (at 102.997 97.663) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 97.663 96.52) (end 98.298 97.155) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 102.997 97.663) (end 103.759 96.901) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 95.377 96.52) (end 93.472 96.52) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 125.984 102.743) (end 125.73 102.743) (width 0.2032) (layer Composant) (net 247))
+ (via (at 125.73 102.743) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 111.506 111.76) (end 110.49 112.776) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 110.236 114.935) (end 110.236 113.792) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 110.236 113.792) (end 110.49 113.538) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 110.49 112.776) (end 110.49 113.538) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 102.997 97.663) (end 102.489 97.155) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 203.2 74.295) (end 203.2 83.185) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 203.2 74.295) (end 203.2 65.405) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 147.7518 113.8428) (end 147.7518 115.443) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 342.646 87.757) (end 344.297 87.757) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 344.297 87.757) (end 344.551 87.503) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 188.595 142.621) (end 188.595 137.795) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 108.966 86.995) (end 111.76 86.995) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 270.51 98.425) (end 270.51 107.315) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 203.2 100.965) (end 203.2 109.855) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 270.51 89.535) (end 270.51 80.645) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 245.11 102.235) (end 245.11 107.315) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 245.11 98.425) (end 245.11 89.535) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 245.11 80.645) (end 245.11 89.535) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 97.155 65.405) (end 97.155 67.056) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 134.62 116.84) (end 130.556 116.84) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 172.72 158.496) (end 172.72 153.035) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 245.11 71.755) (end 245.11 62.865) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (via (at 125.476 64.389) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 96.393 87.9602) (end 96.774 87.5792) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 96.774 87.5792) (end 97.536 87.5792) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 94.488 87.9602) (end 96.393 87.9602) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 92.456 87.8332) (end 94.361 87.8332) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 94.361 87.8332) (end 94.488 87.9602) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 97.536 87.5792) (end 97.536 87.249) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 157.099 88.5698) (end 154.813 88.5698) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 111.76 86.995) (end 121.285 86.995) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 111.76 87.1982) (end 111.76 86.995) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 148.59 135.89) (end 148.59 141.478) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 103.124 67.31) (end 103.632 66.802) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 91.059 93.853) (end 91.059 88.138) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 172.085 129.413) (end 172.085 135.89) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 97.155 67.056) (end 97.409 67.31) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 312.674 73.914) (end 311.531 73.914) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 86.36 118.745) (end 86.36 121.92) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 157.1752 122.6058) (end 155.067 122.6058) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 111.76 86.995) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 100.965 151.765) (end 100.965 149.733) (width 0.2032) (layer Cuivre) (net 247))
+ (via (at 171.45 153.035) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 104.14 153.035) (end 106.68 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 117.475 149.987) (end 117.475 151.765) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 125.984 89.154) (end 123.19 89.154) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 306.451 82.677) (end 306.705 82.931) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 113.665 151.765) (end 114.046 152.146) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 86.36 121.92) (end 92.075 121.92) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 93.218 96.012) (end 91.059 93.853) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 128.905 136.525) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 111.76 92.71) (end 111.76 86.995) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 272.034 61.341) (end 308.229 61.341) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 97.536 87.249) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 88.265 79.375) (end 90.805 79.375) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (via (at 111.76 92.71) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 103.632 80.5942) (end 103.632 82.042) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 117.475 151.765) (end 113.03 151.765) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 125.984 136.271) (end 128.905 136.271) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 123.19 88.9) (end 121.285 86.995) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 85.09 135.89) (end 85.09 127) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 172.72 153.035) (end 185.166 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.305 135.89) (end 151.765 135.89) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 151.765 135.89) (end 151.765 132.08) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (via (at 117.475 151.765) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 344.551 87.503) (end 344.551 86.741) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 345.059 86.233) (end 351.282 86.233) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 344.551 86.741) (end 345.059 86.233) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 328.5998 60.833) (end 328.5998 58.293) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 328.5998 58.293) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 319.8368 66.3448) (end 317.881 66.3448) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 317.881 66.3448) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 317.881 66.3448) (end 317.881 65.786) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 317.881 65.786) (end 317.881 62.484) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 317.881 62.484) (end 317.627 62.23) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 317.246 62.23) (end 316.992 61.976) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.323 112.268) (end 171.323 126.238) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 106.68 161.163) (end 106.68 158.496) (width 0.2032) (layer Cuivre) (net 247) (status C00))
+ (segment (start 100.33 161.163) (end 100.33 158.496) (width 0.2032) (layer Cuivre) (net 247) (status C00))
+ (segment (start 114.3 161.163) (end 114.3 158.496) (width 0.2032) (layer Cuivre) (net 247) (status C00))
+ (segment (start 172.72 161.163) (end 172.72 158.496) (width 0.3048) (layer Cuivre) (net 247) (status C00))
+ (segment (start 168.91 161.163) (end 168.91 158.496) (width 0.3048) (layer Cuivre) (net 247) (status C00))
+ (segment (start 100.33 161.163) (end 100.33 158.496) (width 0.3048) (layer Composant) (net 247) (status C00))
+ (segment (start 101.6 161.163) (end 101.6 158.496) (width 0.3048) (layer Composant) (net 247) (status C00))
+ (segment (start 171.45 161.163) (end 171.45 158.496) (width 0.3048) (layer Composant) (net 247) (status C00))
+ (segment (start 168.91 161.163) (end 168.91 158.496) (width 0.3048) (layer Composant) (net 247) (status C00))
+ (segment (start 172.72 161.163) (end 172.72 158.496) (width 0.3048) (layer Composant) (net 247) (status C00))
+ (segment (start 171.45 161.163) (end 171.45 158.496) (width 0.3048) (layer Cuivre) (net 247) (status C00))
+ (segment (start 106.68 151.765) (end 106.68 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 188.595 144.272) (end 188.595 142.621) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 185.166 147.701) (end 188.595 144.272) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 245.11 102.235) (end 205.105 102.235) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 188.595 136.144) (end 188.595 134.747) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 110.871 80.137) (end 110.871 79.629) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 107.95 85.979) (end 108.966 86.995) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 128.905 136.525) (end 130.683 136.525) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 111.125 118.11) (end 111.125 119.761) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 100.33 158.496) (end 100.33 152.4) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 111.76 92.71) (end 111.76 96.901) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 134.62 116.84) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 125.73 88.9) (end 123.19 88.9) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 107.95 82.042) (end 107.95 85.979) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 108.585 116.205) (end 109.982 116.205) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 110.236 115.951) (end 110.236 114.935) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 108.585 116.205) (end 108.585 118.11) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 109.982 116.205) (end 110.236 115.951) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 127.635 72.009) (end 127.635 88.9) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 342.9254 87.757) (end 342.646 87.757) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 168.91 158.496) (end 168.91 153.035) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 154.305 122.936) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 129.159 71.755) (end 129.413 71.501) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 129.413 71.501) (end 135.001 71.501) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 147.193 127.508) (end 146.558 126.873) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 146.558 122.936) (end 154.305 122.936) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.305 122.936) (end 152.273 122.936) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 146.558 126.873) (end 146.558 122.936) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 342.9254 89.916) (end 342.9254 87.757) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 148.59 135.89) (end 147.193 134.493) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 130.302 122.682) (end 130.302 117.094) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 130.302 117.094) (end 130.556 116.84) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 128.905 123.19) (end 129.794 123.19) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 129.794 123.19) (end 130.302 122.682) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 134.62 117.729) (end 134.62 116.84) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 146.558 117.983) (end 134.874 117.983) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 134.874 117.983) (end 134.62 117.729) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 160.401 100.838) (end 161.29 99.949) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 352.679 87.63) (end 361.315 87.63) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 351.282 86.233) (end 352.679 87.63) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 157.226 101.981) (end 157.226 100.838) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 203.2 127.635) (end 203.2 131.064) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 125.476 63.119) (end 125.476 64.389) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 342.9254 89.916) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 342.9254 92.0242) (end 342.9254 89.916) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 171.323 112.268) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 205.105 102.235) (end 203.835 100.965) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 361.569 87.376) (end 361.569 86.487) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 95.377 80.01) (end 97.409 82.042) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 95.377 78.867) (end 95.377 80.01) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 93.218 96.012) (size 0.889) (layers Composant Cuivre) (net 247))
+ (via (at 171.323 97.282) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 342.9254 97.155) (end 343.027 97.155) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 171.323 99.949) (end 171.323 97.282) (width 0.2032) (layer VCC_layer) (net 247))
+ (via (at 113.03 151.765) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 171.831 129.159) (end 172.085 129.413) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.831 126.746) (end 171.323 126.238) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 311.404 68.453) (end 312.674 68.453) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 171.323 112.268) (end 171.323 99.949) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 168.91 153.035) (end 168.91 158.496) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 142.494 73.66) (end 142.494 74.803) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 123.19 85.09) (end 123.19 88.9) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (via (at 100.965 151.765) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 140.97 105.918) (end 141.2494 105.918) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 104.14 153.035) (end 100.965 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 114.046 154.686) (end 114.046 152.146) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 92.075 121.92) (end 99.695 121.92) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 108.839 80.391) (end 110.617 80.391) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 128.905 72.263) (end 128.905 72.5678) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 128.651 72.009) (end 128.905 72.263) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 127.635 72.009) (end 128.651 72.009) (width 0.2032) (layer Composant) (net 247))
+ (via (at 127.635 72.009) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 100.33 158.496) (end 100.33 152.4) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 135.001 71.501) (end 135.255 71.755) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 129.159 73.025) (end 129.159 71.755) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 154.813 86.995) (end 154.813 88.138) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 155.194 86.995) (end 154.813 86.995) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 301.879 79.375) (end 303.276 80.772) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 300.482 79.2226) (end 301.879 79.2226) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 301.879 79.2226) (end 301.879 79.375) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 298.9326 80.772) (end 300.482 79.2226) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 125.349 104.14) (end 125.73 104.14) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 129.159 73.025) (end 127.889 73.025) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 92.964 95.25) (end 93.218 95.504) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 93.218 95.504) (end 93.218 96.012) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 92.964 94.615) (end 92.964 95.25) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 142.621 73.66) (end 142.494 73.66) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 130.683 123.19) (end 128.905 123.19) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 113.284 123.19) (end 113.284 121.666) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 135.128 139.7) (end 135.255 139.7) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 84.582 75.565) (end 84.582 77.597) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 151.892 135.89) (end 154.305 135.89) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 151.892 132.08) (end 151.765 132.08) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 151.892 135.89) (end 151.892 132.08) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 165.1 134.62) (end 166.243 134.62) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 148.082 114.935) (end 147.955 114.935) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 136.398 116.84) (end 134.62 116.84) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 123.063 90.805) (end 123.19 90.805) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 111.887 90.805) (end 111.76 90.805) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 101.092 149.733) (end 100.965 149.733) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 148.717 139.7) (end 148.59 139.7) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 157.48 72.644) (end 155.829 72.644) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 97.409 67.31) (end 103.124 67.31) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 106.934 83.185) (end 106.68 83.439) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 110.617 80.391) (end 110.871 80.137) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 107.95 81.28) (end 108.839 80.391) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 151.003 63.5) (end 147.447 63.5) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 110.871 79.629) (end 110.9726 78.867) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 134.747 113.8428) (end 134.747 116.84) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 113.665 151.765) (end 113.03 151.765) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 106.68 86.741) (end 106.68 83.82) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 106.934 83.312) (end 107.823 83.312) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 106.68 83.82) (end 106.68 83.566) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 107.823 83.312) (end 107.95 83.185) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 106.68 83.566) (end 106.934 83.312) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 86.36 127) (end 85.09 127) (width 0.2032) (layer VCC_layer) (net 247) (status 400))
+ (segment (start 114.3 154.94) (end 114.046 154.686) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 91.059 79.629) (end 90.805 79.375) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 151.003 63.5) (end 152.527 65.024) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 135.255 139.065) (end 133.985 139.065) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 152.527 65.024) (end 152.527 67.945) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 86.36 127) (end 86.36 121.92) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 91.059 88.138) (end 91.059 79.629) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 128.905 136.525) (end 133.985 136.525) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 133.985 139.065) (end 133.985 136.525) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 108.077 83.185) (end 106.934 83.185) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 107.95 83.185) (end 108.077 83.185) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 107.95 82.042) (end 107.95 83.185) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 97.536 86.741) (end 97.536 87.249) (width 0.2032) (layer Cuivre) (net 247) (status 800))
+ (segment (start 112.649 111.76) (end 111.506 111.76) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 110.109 114.935) (end 110.236 114.935) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 300.4312 66.675) (end 300.4312 65.913) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 111.76 96.901) (end 103.759 96.901) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 299.466 66.675) (end 299.4152 66.675) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 101.6 158.496) (end 101.6 152.4) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 299.466 65.913) (end 299.466 66.675) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 299.72 65.659) (end 299.466 65.913) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 300.1772 65.659) (end 299.72 65.659) (width 0.2032) (layer Composant) (net 247))
+ (via (at 154.686 72.39) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 135.4074 145.034) (end 135.4074 140.843) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 321.691 74.1426) (end 323.723 74.1426) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 155.956 103.251) (end 157.226 101.981) (width 0.2032) (layer Composant) (net 247))
+ (via (at 140.97 105.918) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 155.956 103.251) (end 155.448 103.759) (width 0.2032) (layer Composant) (net 247))
+ (via (at 155.956 103.251) (size 0.889) (layers Composant Cuivre) (net 247))
+ (via (at 95.377 96.52) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 155.702 103.505) (end 155.956 103.251) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 155.702 103.505) (end 140.97 103.505) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 141.2494 103.759) (end 141.2494 105.918) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 154.305 103.505) (end 154.2542 103.759) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 146.558 117.983) (end 147.955 116.586) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 152.9588 103.759) (end 152.9588 101.981) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (via (at 159.385 100.838) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 154.305 101.981) (end 154.305 103.505) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 154.051 101.727) (end 154.305 101.981) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 153.2128 101.727) (end 154.051 101.727) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 152.9588 101.981) (end 153.2128 101.727) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 154.305 135.89) (end 148.59 135.89) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 157.1752 100.838) (end 159.385 100.838) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 185.166 147.701) (end 185.166 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 247.015 108.585) (end 245.745 107.315) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 270.51 107.315) (end 269.24 108.585) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 148.4122 145.034) (end 148.4122 142.24) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 146.558 122.936) (end 146.558 117.983) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.305 122.936) (end 155.067 122.936) (width 0.2032) (layer Composant) (net 247))
+ (via (at 304.546 80.772) (size 0.889) (layers Composant Cuivre) (net 247))
+ (segment (start 203.2 83.185) (end 203.2 92.075) (width 0.2032) (layer VCC_layer) (net 247) (status C00))
+ (segment (start 97.409 82.042) (end 103.632 82.042) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 154.686 68.453) (end 154.178 67.945) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 100.33 152.4) (end 100.965 151.765) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 147.7518 115.443) (end 147.955 115.6462) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 168.91 153.035) (end 171.45 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.323 85.09) (end 171.323 73.279) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.069 73.025) (end 154.686 73.025) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.323 73.279) (end 171.069 73.025) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 323.977 73.8886) (end 323.977 69.469) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 323.723 74.1426) (end 323.977 73.8886) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 142.494 74.803) (end 144.272 73.025) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 154.686 73.025) (end 144.272 73.025) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.45 153.035) (end 171.45 158.496) (width 0.2032) (layer Cuivre) (net 247) (status 400))
+ (segment (start 171.45 153.035) (end 171.45 150.114) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 147.955 115.6462) (end 147.955 116.332) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 85.09 150.495) (end 85.09 147.193) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 100.965 151.765) (end 100.965 150.495) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 100.965 150.495) (end 85.09 150.495) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 148.4122 142.24) (end 148.59 142.24) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 305.435 68.961) (end 310.007 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 171.45 153.035) (end 172.72 153.035) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 128.905 136.271) (end 128.905 136.525) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 135.255 140.843) (end 135.255 143.51) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 135.255 143.51) (end 148.59 143.51) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 319.8368 74.1426) (end 321.691 74.1426) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 126.365 120.65) (end 113.03 120.65) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 161.29 99.949) (end 171.323 99.949) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 123.19 89.154) (end 123.19 88.9) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 128.905 123.19) (end 126.365 123.19) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 188.595 137.795) (end 188.595 136.144) (width 0.2032) (layer VCC_layer) (net 247) (status 800))
+ (segment (start 127.635 88.9) (end 125.73 88.9) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 118.11 158.496) (end 118.11 154.94) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 171.45 158.496) (end 171.45 153.035) (width 0.2032) (layer Composant) (net 247) (status 800))
+ (segment (start 117.475 154.305) (end 117.475 151.765) (width 0.2032) (layer Composant) (net 247))
+ (segment (start 93.472 96.52) (end 93.218 96.266) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 310.007 68.961) (end 310.896 68.961) (width 0.2032) (layer VCC_layer) (net 247))
+ (segment (start 113.03 120.65) (end 113.03 121.412) (width 0.2032) (layer Cuivre) (net 247))
+ (segment (start 172.72 153.035) (end 172.72 158.496) (width 0.2032) (layer Composant) (net 247) (status 400))
+ (segment (start 102.87 161.163) (end 102.87 158.496) (width 0.2032) (layer Composant) (net 248))
+ (segment (start 104.14 161.163) (end 104.14 158.496) (width 0.2032) (layer Composant) (net 249))
+ (segment (start 101.346 147.955) (end 91.44 147.955) (width 0.2032) (layer Composant) (net 250) (status 400))
+ (segment (start 101.6 151.003) (end 101.6 148.209) (width 0.2032) (layer Composant) (net 250))
+ (segment (start 105.41 158.496) (end 105.41 151.892) (width 0.2032) (layer Composant) (net 250) (status 800))
+ (segment (start 101.6 148.209) (end 101.346 147.955) (width 0.2032) (layer Composant) (net 250))
+ (segment (start 102.108 151.511) (end 101.6 151.003) (width 0.2032) (layer Composant) (net 250))
+ (segment (start 105.41 158.496) (end 105.41 161.163) (width 0.3048) (layer Composant) (net 250) (status C00))
+ (segment (start 105.029 151.511) (end 105.41 151.892) (width 0.2032) (layer Composant) (net 250))
+ (segment (start 105.029 151.511) (end 102.108 151.511) (width 0.2032) (layer Composant) (net 250))
+ (segment (start 106.68 161.163) (end 106.68 158.496) (width 0.2032) (layer Composant) (net 251))
+ (segment (start 107.95 150.495) (end 109.22 149.225) (width 0.2032) (layer Composant) (net 252))
+ (segment (start 107.95 158.496) (end 107.95 150.495) (width 0.2032) (layer Composant) (net 252) (status 800))
+ (segment (start 109.22 149.225) (end 109.22 145.415) (width 0.2032) (layer Composant) (net 252) (status 400))
+ (segment (start 107.95 161.163) (end 107.95 158.496) (width 0.2032) (layer Composant) (net 252) (status C00))
+ (segment (start 111.76 161.163) (end 111.76 158.496) (width 0.2032) (layer Composant) (net 253))
+ (segment (start 170.18 161.163) (end 170.18 158.496) (width 0.2032) (layer Composant) (net 254))
+ (segment (start 95.25 161.163) (end 95.25 158.496) (width 0.2032) (layer Cuivre) (net 255))
+ (segment (start 97.79 161.163) (end 97.79 158.496) (width 0.2032) (layer Cuivre) (net 256))
+ (segment (start 102.87 161.163) (end 102.87 158.496) (width 0.2032) (layer Cuivre) (net 257))
+ (segment (start 105.41 161.163) (end 105.41 158.496) (width 0.2032) (layer Cuivre) (net 258))
+ (segment (start 107.95 161.163) (end 107.95 158.496) (width 0.2032) (layer Cuivre) (net 259))
+ (segment (start 111.76 161.163) (end 111.76 158.496) (width 0.2032) (layer Cuivre) (net 260))
+ (segment (start 118.11 161.163) (end 118.11 158.496) (width 0.2032) (layer Cuivre) (net 261))
+ (segment (start 144.78 161.163) (end 144.78 158.496) (width 0.2032) (layer Cuivre) (net 262))
+ (segment (start 146.05 161.163) (end 146.05 158.496) (width 0.2032) (layer Cuivre) (net 263))
+ (segment (start 170.18 161.163) (end 170.18 158.496) (width 0.2032) (layer Cuivre) (net 264))
+ (segment (start 354.33 60.833) (end 356.87 60.833) (width 0.2032) (layer Composant) (net 265) (status C00))
+ (segment (start 356.87 60.833) (end 356.87 58.293) (width 0.2032) (layer Composant) (net 265) (status C00))
+ (segment (start 351.028 76.7588) (end 356.235 76.7588) (width 0.2032) (layer Composant) (net 266) (status 800))
+ (segment (start 360.172 58.293) (end 361.315 58.293) (width 0.2032) (layer Composant) (net 266) (status 800))
+ (segment (start 356.235 76.7588) (end 356.235 69.469) (width 0.2032) (layer Composant) (net 266))
+ (segment (start 361.569 63.373) (end 361.315 63.627) (width 0.2032) (layer Composant) (net 266))
+ (segment (start 361.569 58.547) (end 361.569 63.373) (width 0.2032) (layer Composant) (net 266))
+ (segment (start 361.315 58.293) (end 361.569 58.547) (width 0.2032) (layer Composant) (net 266))
+ (segment (start 356.235 69.469) (end 360.045 65.659) (width 0.2032) (layer Composant) (net 266))
+ (segment (start 360.045 63.627) (end 360.172 63.627) (width 0.2032) (layer Composant) (net 266) (status 400))
+ (segment (start 360.045 65.659) (end 360.045 63.627) (width 0.2032) (layer Composant) (net 266))
+ (segment (start 361.315 63.627) (end 360.172 63.627) (width 0.2032) (layer Composant) (net 266) (status 400))
+ (segment (start 358.14 73.914) (end 358.14 73.025) (width 0.2032) (layer Cuivre) (net 267) (status 800))
+ (segment (start 358.14 73.025) (end 358.14 72.136) (width 0.2032) (layer Composant) (net 267) (status 400))
+ (via (at 358.14 73.025) (size 0.889) (layers Composant Cuivre) (net 267))
+ (segment (start 357.378 81.153) (end 357.632 81.153) (width 0.2032) (layer Cuivre) (net 268) (status 400))
+ (segment (start 354.33 78.105) (end 357.378 81.153) (width 0.2032) (layer Cuivre) (net 268) (status 800))
+ (segment (start 59.055 110.49) (end 59.309 110.744) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 59.055 104.775) (end 59.055 110.49) (width 0.2032) (layer Cuivre) (net 269) (status 800))
+ (segment (start 342.392 130.937) (end 342.392 133.35) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 189.103 148.463) (end 194.056 143.51) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 341.249 130.937) (end 341.249 131.318) (width 0.2032) (layer Composant) (net 269) (status 400))
+ (segment (start 157.099 148.59) (end 155.702 147.193) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 103.759 148.336) (end 102.997 147.574) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 203.835 133.604) (end 204.089 133.35) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 203.835 134.112) (end 203.835 133.604) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 203.454 134.493) (end 203.835 134.112) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 203.454 140.97) (end 203.454 134.493) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 200.914 143.51) (end 203.454 140.97) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 158.369 148.336) (end 158.75 148.336) (width 0.2032) (layer VCC_layer) (net 269))
+ (via (at 158.75 148.336) (size 0.889) (layers Composant Cuivre) (net 269))
+ (segment (start 129.413 148.209) (end 105.918 148.209) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 162.941 148.717) (end 158.75 148.717) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 316.484 131.953) (end 317.881 133.35) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 155.702 147.193) (end 130.429 147.193) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 104.013 147.574) (end 103.759 147.828) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 96.266 147.574) (end 92.075 151.765) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 105.918 148.209) (end 105.283 147.574) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 72.898 151.765) (end 66.802 145.669) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 66.802 145.669) (end 66.802 129.54) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 92.075 151.765) (end 72.898 151.765) (width 0.2032) (layer Cuivre) (net 269))
+ (via (at 103.759 149.733) (size 0.889) (layers Composant Cuivre) (net 269))
+ (segment (start 59.309 110.744) (end 63.754 110.744) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 66.294 113.919) (end 66.294 114.046) (width 0.2032) (layer Cuivre) (net 269) (status 400))
+ (segment (start 65.151 113.919) (end 66.294 113.919) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 64.008 113.665) (end 64.262 113.919) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 342.392 130.937) (end 341.249 130.937) (width 0.2032) (layer Composant) (net 269))
+ (segment (start 64.262 113.919) (end 65.151 113.919) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 356.87 133.35) (end 342.392 133.35) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 342.392 133.35) (end 317.881 133.35) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 312.928 133.35) (end 204.089 133.35) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 312.928 133.35) (end 314.325 131.953) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 314.325 131.953) (end 316.484 131.953) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 130.429 147.193) (end 129.413 148.209) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 200.914 143.51) (end 194.056 143.51) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 189.103 148.463) (end 163.195 148.463) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 158.75 148.717) (end 158.75 148.336) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 64.008 110.998) (end 64.008 113.665) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 103.759 149.733) (end 103.759 148.336) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 63.754 110.744) (end 64.008 110.998) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 359.41 130.81) (end 359.41 78.867) (width 0.2032) (layer Composant) (net 269))
+ (segment (start 356.87 133.35) (end 359.41 130.81) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 358.648 78.105) (end 357.632 78.105) (width 0.2032) (layer Cuivre) (net 269) (status 400))
+ (segment (start 358.648 78.105) (end 359.41 78.867) (width 0.2032) (layer Composant) (net 269))
+ (via (at 358.648 78.105) (size 0.889) (layers Composant Cuivre) (net 269))
+ (via (at 359.41 130.81) (size 0.889) (layers Composant Cuivre) (net 269))
+ (segment (start 158.115 148.59) (end 157.099 148.59) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 158.369 148.336) (end 158.115 148.59) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 102.997 147.574) (end 96.266 147.574) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 65.151 122.174) (end 65.151 113.919) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 103.759 147.828) (end 103.759 149.733) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 162.941 148.717) (end 163.195 148.463) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 105.283 147.574) (end 104.013 147.574) (width 0.2032) (layer VCC_layer) (net 269))
+ (segment (start 65.278 128.016) (end 64.389 127.127) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 64.389 123.063) (end 65.151 122.301) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 65.151 122.301) (end 65.151 122.174) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 66.802 129.54) (end 65.278 128.016) (width 0.2032) (layer Cuivre) (net 269))
+ (segment (start 64.389 127.127) (end 64.389 123.063) (width 0.2032) (layer Cuivre) (net 269))
+ (via (at 342.392 130.937) (size 0.889) (layers Composant Cuivre) (net 269))
+ (segment (start 346.4306 93.726) (end 346.71 93.726) (width 0.2032) (layer Composant) (net 270))
+ (via (at 346.71 94.234) (size 0.889) (layers Composant Cuivre) (net 270))
+ (segment (start 346.71 93.726) (end 346.71 94.234) (width 0.2032) (layer Composant) (net 270))
+ (segment (start 346.71 94.234) (end 346.71 95.631) (width 0.2032) (layer Cuivre) (net 270))
+ (segment (start 346.1766 92.0242) (end 346.1766 93.472) (width 0.2032) (layer Composant) (net 270) (status 800))
+ (segment (start 346.71 95.631) (end 346.202 95.631) (width 0.2032) (layer Cuivre) (net 270) (status 400))
+ (segment (start 346.1766 93.472) (end 346.4306 93.726) (width 0.2032) (layer Composant) (net 270))
+ (segment (start 343.408 98.933) (end 346.202 98.933) (width 0.2032) (layer Cuivre) (net 271) (status C00))
+ (segment (start 345.821 74.168) (end 345.567 74.422) (width 0.2032) (layer Cuivre) (net 272))
+ (segment (start 349.123 78.613) (end 348.615 78.105) (width 0.2032) (layer Composant) (net 272))
+ (segment (start 343.916 74.93) (end 345.567 74.93) (width 0.2032) (layer Cuivre) (net 272) (status 400))
+ (segment (start 350.774 74.168) (end 351.028 74.1426) (width 0.2032) (layer Composant) (net 272) (status 400))
+ (segment (start 348.615 74.168) (end 350.774 74.168) (width 0.2032) (layer Composant) (net 272))
+ (via (at 353.187 74.1426) (size 0.889) (layers Composant Cuivre) (net 272))
+ (segment (start 351.028 74.1426) (end 353.187 74.1426) (width 0.2032) (layer Composant) (net 272) (status 800))
+ (via (at 343.916 74.93) (size 0.889) (layers Composant Cuivre) (net 272))
+ (segment (start 353.187 74.1426) (end 355.6 74.1426) (width 0.2032) (layer Cuivre) (net 272))
+ (segment (start 343.5604 92.0242) (end 343.5604 90.424) (width 0.2032) (layer Composant) (net 272) (status 800))
+ (segment (start 355.6 74.1426) (end 355.727 73.914) (width 0.2032) (layer Cuivre) (net 272) (status 400))
+ (segment (start 348.615 74.168) (end 345.821 74.168) (width 0.2032) (layer Cuivre) (net 272))
+ (segment (start 349.123 78.6892) (end 349.123 78.613) (width 0.2032) (layer Composant) (net 272))
+ (segment (start 345.567 74.422) (end 345.567 74.93) (width 0.2032) (layer Cuivre) (net 272) (status 400))
+ (segment (start 351.028 78.6892) (end 349.123 78.6892) (width 0.2032) (layer Composant) (net 272) (status 800))
+ (segment (start 348.615 78.105) (end 348.615 74.168) (width 0.2032) (layer Composant) (net 272))
+ (via (at 348.615 74.168) (size 0.889) (layers Composant Cuivre) (net 272))
+ (segment (start 343.5604 90.424) (end 343.916 90.0684) (width 0.2032) (layer Composant) (net 272))
+ (segment (start 343.916 90.0684) (end 343.916 74.93) (width 0.2032) (layer Composant) (net 272))
+ (segment (start 344.2208 90.551) (end 344.551 90.2208) (width 0.2032) (layer Composant) (net 273))
+ (segment (start 344.2208 92.0242) (end 344.2208 90.551) (width 0.2032) (layer Composant) (net 273) (status 800))
+ (segment (start 339.852 87.757) (end 339.852 86.487) (width 0.2032) (layer Cuivre) (net 273) (status 800))
+ (segment (start 344.551 84.709) (end 344.678 84.709) (width 0.2032) (layer Composant) (net 273))
+ (segment (start 344.678 84.709) (end 345.948 84.709) (width 0.2032) (layer Cuivre) (net 273) (status 400))
+ (segment (start 343.789 86.233) (end 344.678 85.344) (width 0.2032) (layer Cuivre) (net 273))
+ (segment (start 339.852 86.487) (end 340.106 86.233) (width 0.2032) (layer Cuivre) (net 273))
+ (segment (start 340.106 86.233) (end 343.789 86.233) (width 0.2032) (layer Cuivre) (net 273))
+ (segment (start 344.551 90.2208) (end 344.551 84.709) (width 0.2032) (layer Composant) (net 273))
+ (via (at 344.678 84.709) (size 0.889) (layers Composant Cuivre) (net 273))
+ (segment (start 344.678 85.344) (end 344.678 84.709) (width 0.2032) (layer Cuivre) (net 273))
+ (segment (start 346.1766 60.833) (end 346.1766 59.309) (width 0.2032) (layer Composant) (net 274) (status 800))
+ (via (at 349.25 58.0136) (size 0.889) (layers Composant Cuivre) (net 274))
+ (segment (start 350.647 58.0136) (end 350.774 58.039) (width 0.2032) (layer Cuivre) (net 274) (status 400))
+ (segment (start 347.472 58.0136) (end 349.25 58.0136) (width 0.2032) (layer Composant) (net 274))
+ (segment (start 349.25 58.0136) (end 350.647 58.0136) (width 0.2032) (layer Cuivre) (net 274))
+ (segment (start 346.1766 59.309) (end 347.472 58.0136) (width 0.2032) (layer Composant) (net 274))
+ (segment (start 347.218 59.436) (end 347.472 59.182) (width 0.2032) (layer Cuivre) (net 275))
+ (segment (start 341.63 59.436) (end 341.376 59.182) (width 0.2032) (layer Cuivre) (net 275))
+ (segment (start 341.63 59.436) (end 347.218 59.436) (width 0.2032) (layer Cuivre) (net 275))
+ (segment (start 347.472 59.182) (end 347.472 58.039) (width 0.2032) (layer Cuivre) (net 275) (status 400))
+ (segment (start 341.376 59.182) (end 341.376 58.039) (width 0.2032) (layer Cuivre) (net 275) (status 400))
+ (segment (start 340.995 84.709) (end 339.852 84.709) (width 0.2032) (layer Cuivre) (net 276) (status 400))
+ (segment (start 341.757 90.297) (end 341.757 84.963) (width 0.2032) (layer Composant) (net 276))
+ (segment (start 341.757 84.963) (end 341.503 84.709) (width 0.2032) (layer Composant) (net 276))
+ (segment (start 340.995 84.709) (end 341.503 84.709) (width 0.2032) (layer Composant) (net 276))
+ (segment (start 341.6046 90.297) (end 341.757 90.297) (width 0.2032) (layer Composant) (net 276))
+ (segment (start 341.6046 92.0242) (end 341.6046 90.297) (width 0.2032) (layer Composant) (net 276) (status 800))
+ (via (at 340.995 84.709) (size 0.889) (layers Composant Cuivre) (net 276))
+ (segment (start 353.695 127.635) (end 356.235 125.095) (width 0.2032) (layer Cuivre) (net 277) (status C00))
+ (segment (start 353.695 127.635) (end 356.108 127.635) (width 0.2032) (layer Cuivre) (net 277) (status C00))
+ (segment (start 349.885 125.349) (end 349.631 125.095) (width 0.2032) (layer Composant) (net 278))
+ (segment (start 349.885 131.699) (end 349.885 125.349) (width 0.2032) (layer Composant) (net 278) (status 800))
+ (segment (start 349.631 125.095) (end 348.615 125.095) (width 0.2032) (layer Composant) (net 278) (status 400))
+ (segment (start 345.44 120.396) (end 345.694 120.396) (width 0.2032) (layer Cuivre) (net 278) (status 400))
+ (segment (start 348.615 125.095) (end 348.615 120.396) (width 0.2032) (layer Composant) (net 278) (status 800))
+ (segment (start 345.44 117.602) (end 345.44 120.396) (width 0.2032) (layer Cuivre) (net 278) (status 800))
+ (via (at 348.615 120.396) (size 0.889) (layers Composant Cuivre) (net 278))
+ (segment (start 348.615 120.396) (end 345.694 120.396) (width 0.2032) (layer Cuivre) (net 278) (status 400))
+ (segment (start 355.346 130.048) (end 353.568 130.048) (width 0.2032) (layer Cuivre) (net 279))
+ (segment (start 351.155 127.635) (end 353.568 130.048) (width 0.2032) (layer Cuivre) (net 279) (status 800))
+ (segment (start 355.6 131.699) (end 355.6 130.302) (width 0.2032) (layer Cuivre) (net 279) (status 800))
+ (segment (start 351.155 127.635) (end 351.155 125.095) (width 0.2032) (layer Composant) (net 279) (status C00))
+ (segment (start 355.6 130.302) (end 355.346 130.048) (width 0.2032) (layer Cuivre) (net 279))
+ (via (at 321.437 122.047) (size 0.889) (layers Composant Cuivre) (net 280))
+ (segment (start 313.944 118.364) (end 313.944 117.348) (width 0.2032) (layer Cuivre) (net 280) (status 800))
+ (segment (start 318.008 116.459) (end 320.167 116.459) (width 0.2032) (layer Cuivre) (net 280))
+ (segment (start 314.452 116.84) (end 317.627 116.84) (width 0.2032) (layer Cuivre) (net 280))
+ (segment (start 320.167 116.459) (end 320.167 117.094) (width 0.2032) (layer Composant) (net 280))
+ (segment (start 313.944 117.348) (end 314.452 116.84) (width 0.2032) (layer Cuivre) (net 280))
+ (via (at 320.167 116.459) (size 0.889) (layers Composant Cuivre) (net 280))
+ (segment (start 320.294 123.19) (end 321.437 122.047) (width 0.2032) (layer Composant) (net 280))
+ (segment (start 320.167 117.094) (end 321.437 118.364) (width 0.2032) (layer Composant) (net 280))
+ (segment (start 320.294 126.492) (end 320.294 123.19) (width 0.2032) (layer Composant) (net 280))
+ (segment (start 321.437 118.364) (end 321.437 122.047) (width 0.2032) (layer Composant) (net 280))
+ (segment (start 318.897 127.889) (end 320.294 126.492) (width 0.2032) (layer Composant) (net 280) (status 800))
+ (segment (start 317.627 116.84) (end 318.008 116.459) (width 0.2032) (layer Cuivre) (net 280))
+ (segment (start 321.437 122.047) (end 321.437 121.666) (width 0.2032) (layer Cuivre) (net 280) (status 400))
+ (segment (start 316.357 121.666) (end 319.151 121.666) (width 0.2032) (layer Cuivre) (net 281) (status C00))
+ (segment (start 313.944 121.666) (end 316.357 121.666) (width 0.2032) (layer Cuivre) (net 281) (status C00))
+ (segment (start 324.739 130.429) (end 331.216 130.429) (width 0.2032) (layer Cuivre) (net 282))
+ (segment (start 331.216 130.429) (end 331.47 130.683) (width 0.2032) (layer Cuivre) (net 282))
+ (segment (start 316.992 129.413) (end 310.261 129.413) (width 0.2032) (layer Cuivre) (net 282))
+ (via (at 331.47 131.064) (size 0.889) (layers Composant Cuivre) (net 282))
+ (segment (start 331.47 131.064) (end 331.47 131.699) (width 0.2032) (layer Composant) (net 282) (status 400))
+ (segment (start 324.104 131.064) (end 324.739 130.429) (width 0.2032) (layer Cuivre) (net 282))
+ (segment (start 331.47 130.683) (end 331.47 131.064) (width 0.2032) (layer Cuivre) (net 282))
+ (segment (start 318.643 131.064) (end 324.104 131.064) (width 0.2032) (layer Cuivre) (net 282))
+ (segment (start 318.643 131.064) (end 316.992 129.413) (width 0.2032) (layer Cuivre) (net 282))
+ (segment (start 308.737 127.889) (end 310.261 129.413) (width 0.2032) (layer Cuivre) (net 282) (status 800))
+ (segment (start 335.026 131.318) (end 337.947 131.318) (width 0.2032) (layer Composant) (net 283) (status 400))
+ (segment (start 335.026 131.699) (end 335.026 131.318) (width 0.2032) (layer Composant) (net 283) (status 800))
+ (segment (start 303.657 131.445) (end 303.911 131.699) (width 0.2032) (layer Composant) (net 284))
+ (segment (start 303.911 131.699) (end 305.308 131.699) (width 0.2032) (layer Composant) (net 284) (status 400))
+ (segment (start 303.657 127.889) (end 303.657 131.445) (width 0.2032) (layer Composant) (net 284) (status 800))
+ (segment (start 312.039 131.699) (end 312.039 132.08) (width 0.2032) (layer Composant) (net 285) (status 400))
+ (segment (start 308.864 131.699) (end 312.039 131.699) (width 0.2032) (layer Composant) (net 285) (status 800))
+ (segment (start 298.577 129.413) (end 298.831 129.667) (width 0.2032) (layer Composant) (net 286))
+ (segment (start 298.831 129.667) (end 301.879 129.667) (width 0.2032) (layer Composant) (net 286))
+ (segment (start 302.133 129.921) (end 302.133 131.572) (width 0.2032) (layer Composant) (net 286) (status 400))
+ (segment (start 301.879 129.667) (end 302.133 129.921) (width 0.2032) (layer Composant) (net 286))
+ (segment (start 298.577 127.889) (end 298.577 129.413) (width 0.2032) (layer Composant) (net 286) (status 800))
+ (segment (start 296.418 131.572) (end 298.577 131.572) (width 0.2032) (layer Composant) (net 287) (status C00))
+ (via (at 79.121 86.868) (size 0.889) (layers Composant Cuivre) (net 288))
+ (segment (start 80.899 87.122) (end 80.645 86.868) (width 0.2032) (layer Composant) (net 288))
+ (segment (start 79.121 86.868) (end 77.978 88.011) (width 0.2032) (layer Cuivre) (net 288))
+ (segment (start 80.899 89.916) (end 80.899 87.122) (width 0.2032) (layer Composant) (net 288) (status 800))
+ (segment (start 80.645 86.868) (end 79.121 86.868) (width 0.2032) (layer Composant) (net 288))
+ (segment (start 77.978 88.011) (end 77.47 88.011) (width 0.2032) (layer Cuivre) (net 288) (status 400))
+ (segment (start 73.279 88.392) (end 73.279 89.916) (width 0.2032) (layer Composant) (net 289) (status 400))
+ (via (at 73.279 88.392) (size 0.889) (layers Composant Cuivre) (net 289))
+ (segment (start 74.041 86.995) (end 73.279 87.757) (width 0.2032) (layer Cuivre) (net 289) (status 800))
+ (segment (start 73.279 87.757) (end 73.279 88.392) (width 0.2032) (layer Cuivre) (net 289))
+ (segment (start 78.74 85.09) (end 78.74 83.185) (width 0.2032) (layer Composant) (net 290))
+ (segment (start 78.74 83.185) (end 78.359 82.804) (width 0.2032) (layer Composant) (net 290))
+ (via (at 78.74 85.09) (size 0.889) (layers Composant Cuivre) (net 290))
+ (segment (start 77.47 85.471) (end 77.851 85.09) (width 0.2032) (layer Cuivre) (net 290) (status 800))
+ (segment (start 78.359 82.804) (end 78.359 80.264) (width 0.2032) (layer Composant) (net 290) (status 400))
+ (segment (start 77.851 85.09) (end 78.74 85.09) (width 0.2032) (layer Cuivre) (net 290))
+ (segment (start 78.74 111.887) (end 78.74 110.363) (width 0.2032) (layer Cuivre) (net 291) (status 800))
+ (segment (start 82.169 110.109) (end 82.423 109.855) (width 0.2032) (layer Composant) (net 291))
+ (via (at 78.74 110.363) (size 0.889) (layers Composant Cuivre) (net 291))
+ (segment (start 78.74 110.363) (end 78.994 110.109) (width 0.2032) (layer Composant) (net 291))
+ (segment (start 78.74 114.935) (end 78.74 111.887) (width 0.2032) (layer Cuivre) (net 291) (status C00))
+ (segment (start 82.423 109.855) (end 82.423 107.061) (width 0.2032) (layer Composant) (net 291) (status 400))
+ (segment (start 78.994 110.109) (end 82.169 110.109) (width 0.2032) (layer Composant) (net 291))
+ (via (at 80.899 81.661) (size 0.889) (layers Composant Cuivre) (net 292))
+ (segment (start 80.899 81.661) (end 80.899 82.931) (width 0.2032) (layer Cuivre) (net 292))
+ (segment (start 84.201 83.185) (end 84.201 86.741) (width 0.2032) (layer Cuivre) (net 292) (status 400))
+ (segment (start 80.899 80.264) (end 80.899 81.026) (width 0.2032) (layer Composant) (net 292) (status 800))
+ (segment (start 80.899 77.089) (end 80.899 81.026) (width 0.2032) (layer Composant) (net 292))
+ (segment (start 80.645 76.835) (end 78.994 76.835) (width 0.2032) (layer Composant) (net 292) (status 400))
+ (segment (start 80.899 82.931) (end 80.772 82.931) (width 0.2032) (layer Cuivre) (net 292) (status 400))
+ (segment (start 80.899 81.026) (end 80.899 81.661) (width 0.2032) (layer Composant) (net 292))
+ (segment (start 83.947 82.931) (end 80.772 82.931) (width 0.2032) (layer Cuivre) (net 292) (status 400))
+ (segment (start 80.899 77.089) (end 80.645 76.835) (width 0.2032) (layer Composant) (net 292))
+ (segment (start 83.947 82.931) (end 84.201 83.185) (width 0.2032) (layer Cuivre) (net 292))
+ (segment (start 114.554 60.198) (end 113.792 60.198) (width 0.2032) (layer Cuivre) (net 293) (status 800))
+ (segment (start 114.554 60.198) (end 116.459 62.103) (width 0.2032) (layer Cuivre) (net 293) (status 800))
+ (segment (start 116.459 64.643) (end 116.459 67.564) (width 0.2032) (layer Cuivre) (net 293) (status 800))
+ (segment (start 116.459 67.564) (end 110.871 67.564) (width 0.2032) (layer Cuivre) (net 293) (status 400))
+ (segment (start 116.459 62.103) (end 116.459 64.643) (width 0.2032) (layer Cuivre) (net 293) (status 400))
+ (segment (start 113.792 60.198) (end 113.538 60.452) (width 0.2032) (layer Cuivre) (net 293))
+ (segment (start 113.538 60.452) (end 113.538 62.103) (width 0.2032) (layer Cuivre) (net 293) (status 400))
+ (segment (start 81.661 83.82) (end 81.661 72.39) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 78.613 64.389) (end 82.169 64.389) (width 0.2032) (layer Cuivre) (net 294) (status 800))
+ (segment (start 82.169 64.389) (end 82.169 61.341) (width 0.2032) (layer Composant) (net 294) (status 400))
+ (segment (start 80.264 68.326) (end 82.169 66.421) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 80.264 70.993) (end 80.264 68.326) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 81.661 83.82) (end 79.502 85.979) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 75.819 87.376) (end 77.216 85.979) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 79.502 85.979) (end 77.216 85.979) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 75.819 89.916) (end 75.819 87.376) (width 0.2032) (layer Composant) (net 294) (status 800))
+ (segment (start 82.169 66.421) (end 82.169 64.389) (width 0.2032) (layer Composant) (net 294))
+ (segment (start 81.661 72.39) (end 80.264 70.993) (width 0.2032) (layer Composant) (net 294))
+ (via (at 82.169 64.389) (size 0.889) (layers Composant Cuivre) (net 294))
+ (segment (start 80.518 92.71) (end 79.629 92.71) (width 0.2032) (layer Composant) (net 295) (status 800))
+ (segment (start 79.629 89.916) (end 79.629 92.71) (width 0.2032) (layer Composant) (net 295) (status 800))
+ (segment (start 77.089 90.932) (end 77.089 89.916) (width 0.2032) (layer Composant) (net 296) (status 400))
+ (segment (start 80.518 96.647) (end 80.518 95.631) (width 0.2032) (layer Cuivre) (net 296) (status 800))
+ (segment (start 77.978 91.821) (end 77.089 90.932) (width 0.2032) (layer Composant) (net 296))
+ (segment (start 80.518 95.631) (end 77.978 93.091) (width 0.2032) (layer Cuivre) (net 296))
+ (segment (start 77.978 93.091) (end 77.978 91.821) (width 0.2032) (layer Cuivre) (net 296))
+ (via (at 77.978 91.821) (size 0.889) (layers Composant Cuivre) (net 296))
+ (segment (start 80.772 100.965) (end 79.121 99.314) (width 0.2032) (layer Composant) (net 297) (status 800))
+ (segment (start 74.549 92.202) (end 74.803 92.456) (width 0.2032) (layer Composant) (net 297))
+ (segment (start 74.803 92.456) (end 76.2 92.456) (width 0.2032) (layer Composant) (net 297))
+ (segment (start 79.121 95.377) (end 79.121 99.314) (width 0.2032) (layer Composant) (net 297))
+ (segment (start 76.2 92.456) (end 79.121 95.377) (width 0.2032) (layer Composant) (net 297))
+ (segment (start 74.549 89.916) (end 74.549 92.202) (width 0.2032) (layer Composant) (net 297) (status 800))
+ (segment (start 70.358 102.235) (end 76.581 102.235) (width 0.2032) (layer Composant) (net 298) (status 800))
+ (segment (start 79.756 102.743) (end 79.756 99.441) (width 0.2032) (layer Cuivre) (net 298) (status C00))
+ (via (at 78.613 102.743) (size 0.889) (layers Composant Cuivre) (net 298))
+ (segment (start 78.613 102.743) (end 79.756 102.743) (width 0.2032) (layer Cuivre) (net 298) (status 400))
+ (segment (start 77.089 102.743) (end 78.613 102.743) (width 0.2032) (layer Composant) (net 298))
+ (segment (start 76.581 102.235) (end 77.089 102.743) (width 0.2032) (layer Composant) (net 298))
+ (segment (start 67.056 100.965) (end 67.056 102.235) (width 0.2032) (layer Composant) (net 299) (status 400))
+ (segment (start 65.151 80.391) (end 66.929 80.391) (width 0.2032) (layer Composant) (net 299))
+ (segment (start 64.897 80.645) (end 65.151 80.391) (width 0.2032) (layer Composant) (net 299))
+ (segment (start 64.897 98.806) (end 67.056 100.965) (width 0.2032) (layer Composant) (net 299))
+ (segment (start 66.929 80.264) (end 66.929 80.391) (width 0.2032) (layer Composant) (net 299) (status 800))
+ (segment (start 64.897 98.806) (end 64.897 80.645) (width 0.2032) (layer Composant) (net 299))
+ (segment (start 347.98 90.4494) (end 348.3864 90.043) (width 0.2032) (layer Cuivre) (net 300))
+ (segment (start 340.9696 89.662) (end 342.265 90.9574) (width 0.2032) (layer Cuivre) (net 300))
+ (segment (start 342.265 90.9574) (end 347.4974 90.9574) (width 0.2032) (layer Cuivre) (net 300))
+ (segment (start 353.06 92.964) (end 353.06 93.091) (width 0.2032) (layer Cuivre) (net 300) (status 400))
+ (segment (start 355.346 92.964) (end 357.378 92.964) (width 0.2032) (layer Cuivre) (net 300) (status 800))
+ (segment (start 347.98 90.4494) (end 347.4974 90.9574) (width 0.2032) (layer Cuivre) (net 300))
+ (segment (start 355.346 92.964) (end 353.06 92.964) (width 0.2032) (layer Cuivre) (net 300) (status 800))
+ (segment (start 353.06 90.043) (end 353.06 92.964) (width 0.2032) (layer Cuivre) (net 300))
+ (via (at 340.9696 89.662) (size 0.889) (layers Composant Cuivre) (net 300))
+ (segment (start 357.378 92.964) (end 357.632 92.71) (width 0.2032) (layer Cuivre) (net 300))
+ (segment (start 357.632 92.71) (end 357.632 91.948) (width 0.2032) (layer Cuivre) (net 300) (status 400))
+ (segment (start 348.3864 90.043) (end 353.06 90.043) (width 0.2032) (layer Cuivre) (net 300))
+ (segment (start 340.9696 92.0242) (end 340.9696 89.662) (width 0.2032) (layer Composant) (net 300) (status 800))
+ (segment (start 340.233 90.424) (end 339.471 89.662) (width 0.2032) (layer Composant) (net 301))
+ (via (at 339.471 89.662) (size 0.889) (layers Composant Cuivre) (net 301))
+ (segment (start 348.234 91.694) (end 349.25 90.678) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 339.471 89.662) (end 341.503 91.694) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 340.3092 90.424) (end 340.233 90.424) (width 0.2032) (layer Composant) (net 301))
+ (segment (start 349.25 90.678) (end 351.409 90.678) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 351.917 95.885) (end 351.663 95.631) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 353.06 95.885) (end 351.917 95.885) (width 0.2032) (layer Cuivre) (net 301) (status 800))
+ (segment (start 357.505 97.028) (end 357.632 97.028) (width 0.2032) (layer Cuivre) (net 301) (status 400))
+ (segment (start 357.251 96.266) (end 357.505 96.52) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 355.346 96.266) (end 353.06 96.266) (width 0.2032) (layer Cuivre) (net 301) (status 800))
+ (segment (start 353.06 96.266) (end 353.06 95.885) (width 0.2032) (layer Cuivre) (net 301) (status 400))
+ (segment (start 355.346 96.266) (end 357.251 96.266) (width 0.2032) (layer Cuivre) (net 301) (status 800))
+ (segment (start 357.505 96.52) (end 357.505 97.028) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 340.3092 92.0242) (end 340.3092 90.424) (width 0.2032) (layer Composant) (net 301) (status 800))
+ (segment (start 341.503 91.694) (end 348.234 91.694) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 351.409 90.678) (end 351.663 90.932) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 351.663 90.932) (end 351.663 95.631) (width 0.2032) (layer Cuivre) (net 301))
+ (segment (start 81.915 69.215) (end 75.819 69.215) (width 0.2032) (layer Cuivre) (net 302) (status 800))
+ (segment (start 75.565 69.469) (end 75.565 73.025) (width 0.2032) (layer Cuivre) (net 302) (status 400))
+ (segment (start 75.819 69.215) (end 75.565 69.469) (width 0.2032) (layer Cuivre) (net 302))
+ (segment (start 87.884 75.565) (end 90.17 75.565) (width 0.2032) (layer Cuivre) (net 303) (status C00))
+ (segment (start 75.946 83.947) (end 75.946 83.312) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 78.613 99.568) (end 78.613 96.52) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 76.327 84.328) (end 75.946 83.947) (width 0.2032) (layer Cuivre) (net 304))
+ (segment (start 78.994 107.061) (end 77.851 107.061) (width 0.2032) (layer Composant) (net 304) (status 400))
+ (segment (start 78.613 96.52) (end 77.597 95.504) (width 0.2032) (layer Composant) (net 304))
+ (via (at 77.597 95.504) (size 0.889) (layers Composant Cuivre) (net 304))
+ (via (at 75.946 83.947) (size 0.889) (layers Composant Cuivre) (net 304))
+ (segment (start 79.502 100.457) (end 79.502 104.013) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 74.549 81.915) (end 74.549 80.264) (width 0.2032) (layer Composant) (net 304) (status 400))
+ (segment (start 76.327 92.329) (end 76.327 84.328) (width 0.2032) (layer Cuivre) (net 304))
+ (segment (start 79.502 104.013) (end 79.248 104.267) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 79.502 100.457) (end 78.613 99.568) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 79.248 104.267) (end 79.248 106.807) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 76.327 92.329) (end 77.597 93.599) (width 0.2032) (layer Cuivre) (net 304))
+ (segment (start 79.248 106.807) (end 78.994 107.061) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 75.946 83.312) (end 74.549 81.915) (width 0.2032) (layer Composant) (net 304))
+ (segment (start 77.597 95.504) (end 77.597 93.599) (width 0.2032) (layer Cuivre) (net 304))
+ (segment (start 72.136 77.343) (end 72.39 77.089) (width 0.2032) (layer Composant) (net 305))
+ (segment (start 72.771 89.916) (end 71.247 88.392) (width 0.2032) (layer VCC_layer) (net 305))
+ (via (at 72.771 92.202) (size 0.889) (layers Composant Cuivre) (net 305))
+ (via (at 71.247 77.343) (size 0.889) (layers Composant Cuivre) (net 305))
+ (segment (start 72.771 92.202) (end 72.771 89.916) (width 0.2032) (layer VCC_layer) (net 305))
+ (segment (start 72.39 77.089) (end 72.39 76.835) (width 0.2032) (layer Composant) (net 305) (status 400))
+ (segment (start 71.247 88.392) (end 71.247 77.343) (width 0.2032) (layer VCC_layer) (net 305))
+ (segment (start 71.247 77.343) (end 72.136 77.343) (width 0.2032) (layer Composant) (net 305))
+ (segment (start 72.771 97.917) (end 72.771 92.202) (width 0.2032) (layer Composant) (net 305) (status 800))
+ (segment (start 72.009 79.248) (end 72.009 78.994) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 76.073 107.823) (end 76.073 105.664) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 77.851 103.886) (end 77.851 100.584) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 75.692 78.486) (end 75.692 76.835) (width 0.2032) (layer Composant) (net 306) (status 400))
+ (segment (start 72.009 80.264) (end 72.009 81.28) (width 0.2032) (layer Composant) (net 306) (status 800))
+ (segment (start 72.263 78.74) (end 75.438 78.74) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 72.009 78.994) (end 72.263 78.74) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 73.787 92.075) (end 73.787 93.218) (width 0.2032) (layer VCC_layer) (net 306))
+ (via (at 73.787 93.218) (size 0.889) (layers Composant Cuivre) (net 306))
+ (segment (start 72.771 123.317) (end 74.168 121.92) (width 0.2032) (layer Cuivre) (net 306) (status 800))
+ (segment (start 72.009 81.28) (end 72.009 81.788) (width 0.2032) (layer Composant) (net 306))
+ (via (at 72.009 81.788) (size 0.889) (layers Composant Cuivre) (net 306))
+ (segment (start 72.009 81.28) (end 72.009 79.248) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 72.009 81.788) (end 72.009 82.55) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 72.009 85.471) (end 72.898 85.471) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 73.787 93.218) (end 76.835 96.266) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 76.835 96.266) (end 76.835 96.774) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 77.724 96.774) (end 77.978 97.028) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 72.009 80.264) (end 72.009 79.248) (width 0.2032) (layer Composant) (net 306) (status 800))
+ (segment (start 72.009 82.55) (end 71.755 82.804) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 71.755 85.217) (end 72.009 85.471) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 74.168 121.92) (end 74.168 109.728) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 74.168 109.728) (end 76.073 107.823) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 77.978 100.457) (end 77.851 100.584) (width 0.2032) (layer Cuivre) (net 306))
+ (via (at 76.073 105.664) (size 0.889) (layers Composant Cuivre) (net 306))
+ (segment (start 76.835 96.774) (end 77.724 96.774) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 72.898 85.471) (end 73.152 85.725) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 77.978 97.028) (end 77.978 100.457) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 73.152 85.725) (end 73.152 86.868) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 73.152 86.868) (end 74.168 87.884) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 74.168 87.884) (end 74.168 91.694) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 74.168 91.694) (end 73.787 92.075) (width 0.2032) (layer VCC_layer) (net 306))
+ (segment (start 71.755 82.804) (end 71.755 85.217) (width 0.2032) (layer VCC_layer) (net 306))
+ (via (at 76.835 96.774) (size 0.889) (layers Composant Cuivre) (net 306))
+ (segment (start 76.073 105.664) (end 77.851 103.886) (width 0.2032) (layer Cuivre) (net 306))
+ (segment (start 75.438 78.74) (end 75.692 78.486) (width 0.2032) (layer Composant) (net 306))
+ (segment (start 110.236 88.138) (end 110.236 86.995) (width 0.2032) (layer Cuivre) (net 307))
+ (segment (start 109.9312 96.393) (end 110.9726 96.393) (width 0.2032) (layer Composant) (net 307))
+ (segment (start 110.998 94.488) (end 110.9726 94.869) (width 0.2032) (layer Composant) (net 307) (status 400))
+ (segment (start 109.347 70.612) (end 109.093 70.358) (width 0.2032) (layer VCC_layer) (net 307))
+ (segment (start 110.236 86.995) (end 109.982 86.741) (width 0.2032) (layer Cuivre) (net 307) (status 400))
+ (segment (start 110.236 92.837) (end 110.998 93.599) (width 0.2032) (layer Composant) (net 307))
+ (segment (start 109.093 70.358) (end 105.283 70.358) (width 0.2032) (layer VCC_layer) (net 307) (status 400))
+ (segment (start 112.014 96.393) (end 112.268 96.139) (width 0.2032) (layer Composant) (net 307))
+ (segment (start 109.347 85.344) (end 109.347 70.612) (width 0.2032) (layer VCC_layer) (net 307))
+ (segment (start 109.6772 94.869) (end 109.6772 96.139) (width 0.2032) (layer Composant) (net 307) (status 800))
+ (segment (start 112.268 95.377) (end 112.2934 94.869) (width 0.2032) (layer Composant) (net 307) (status 400))
+ (segment (start 109.982 86.741) (end 109.347 86.106) (width 0.2032) (layer Cuivre) (net 307) (status 800))
+ (segment (start 109.6772 96.139) (end 109.9312 96.393) (width 0.2032) (layer Composant) (net 307))
+ (segment (start 112.268 96.139) (end 112.268 95.377) (width 0.2032) (layer Composant) (net 307))
+ (segment (start 109.347 86.106) (end 109.347 85.344) (width 0.2032) (layer Cuivre) (net 307))
+ (segment (start 110.9726 94.869) (end 110.9726 96.393) (width 0.2032) (layer Composant) (net 307) (status 800))
+ (segment (start 110.236 92.837) (end 110.236 88.138) (width 0.2032) (layer Composant) (net 307))
+ (via (at 109.347 85.344) (size 0.889) (layers Composant Cuivre) (net 307))
+ (segment (start 110.998 93.599) (end 110.998 94.488) (width 0.2032) (layer Composant) (net 307))
+ (segment (start 110.9726 96.393) (end 112.014 96.393) (width 0.2032) (layer Composant) (net 307))
+ (via (at 110.236 88.138) (size 0.889) (layers Composant Cuivre) (net 307))
+ (segment (start 112.9284 78.867) (end 112.9284 75.184) (width 0.2032) (layer Composant) (net 308) (status 800))
+ (segment (start 113.1824 74.93) (end 114.3 74.93) (width 0.2032) (layer Composant) (net 308) (status 400))
+ (segment (start 112.9284 75.184) (end 113.1824 74.93) (width 0.2032) (layer Composant) (net 308))
+ (segment (start 84.963 64.77) (end 84.963 58.801) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 89.408 77.216) (end 88.519 76.327) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 85.217 65.024) (end 84.963 64.77) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 89.535 58.547) (end 89.535 59.055) (width 0.2032) (layer Composant) (net 309) (status 400))
+ (segment (start 89.535 65.024) (end 85.217 65.024) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 84.963 58.801) (end 85.217 58.547) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 85.217 58.547) (end 89.535 58.547) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 89.408 84.328) (end 89.408 77.216) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 88.519 70.612) (end 90.17 68.961) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 90.17 68.961) (end 90.17 65.659) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 88.519 76.327) (end 88.519 70.612) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 92.456 84.582) (end 89.662 84.582) (width 0.2032) (layer Composant) (net 309) (status 800))
+ (segment (start 90.17 65.659) (end 89.535 65.024) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 89.662 84.582) (end 89.408 84.328) (width 0.2032) (layer Composant) (net 309))
+ (segment (start 90.805 81.0768) (end 90.805 77.851) (width 0.2032) (layer Composant) (net 310))
+ (segment (start 91.059 81.3308) (end 90.805 81.0768) (width 0.2032) (layer Composant) (net 310))
+ (segment (start 89.535 63.5) (end 91.186 63.5) (width 0.2032) (layer Composant) (net 310) (status 800))
+ (segment (start 92.456 81.3308) (end 91.059 81.3308) (width 0.2032) (layer Composant) (net 310) (status 800))
+ (segment (start 90.805 77.851) (end 91.44 77.216) (width 0.2032) (layer Composant) (net 310))
+ (segment (start 91.186 63.5) (end 91.44 63.754) (width 0.2032) (layer Composant) (net 310))
+ (segment (start 91.44 63.754) (end 91.44 77.216) (width 0.2032) (layer Composant) (net 310))
+ (segment (start 70.739 76.454) (end 82.931 76.454) (width 0.2032) (layer Cuivre) (net 311))
+ (segment (start 83.185 84.455) (end 82.931 84.328) (width 0.2032) (layer Composant) (net 311) (status 800))
+ (segment (start 82.931 76.454) (end 83.566 77.089) (width 0.2032) (layer Cuivre) (net 311))
+ (segment (start 83.566 77.089) (end 83.566 78.74) (width 0.2032) (layer Cuivre) (net 311))
+ (segment (start 67.945 79.248) (end 67.945 83.566) (width 0.2032) (layer Cuivre) (net 311) (status 400))
+ (segment (start 67.945 79.248) (end 70.739 76.454) (width 0.2032) (layer Cuivre) (net 311))
+ (segment (start 82.931 79.375) (end 82.931 84.328) (width 0.2032) (layer Composant) (net 311))
+ (segment (start 82.931 79.375) (end 83.566 78.74) (width 0.2032) (layer Cuivre) (net 311))
+ (via (at 82.931 79.375) (size 0.889) (layers Composant Cuivre) (net 311))
+ (segment (start 78.74 136.779) (end 78.867 136.779) (width 0.2032) (layer Cuivre) (net 312) (status 800))
+ (segment (start 79.883 135.001) (end 79.883 132.08) (width 0.2032) (layer Cuivre) (net 312))
+ (segment (start 78.867 136.017) (end 79.883 135.001) (width 0.2032) (layer Cuivre) (net 312))
+ (segment (start 78.74 136.779) (end 76.708 136.779) (width 0.2032) (layer Cuivre) (net 312) (status C00))
+ (segment (start 79.883 132.08) (end 78.74 130.937) (width 0.2032) (layer Cuivre) (net 312))
+ (segment (start 78.74 130.937) (end 78.74 129.413) (width 0.2032) (layer Cuivre) (net 312) (status 400))
+ (segment (start 78.867 136.779) (end 78.867 136.017) (width 0.2032) (layer Cuivre) (net 312))
+ (segment (start 80.518 129.413) (end 80.518 125.984) (width 0.2032) (layer Cuivre) (net 313) (status 800))
+ (segment (start 79.883 125.349) (end 79.883 124.206) (width 0.2032) (layer Cuivre) (net 313) (status 400))
+ (segment (start 80.518 125.984) (end 79.883 125.349) (width 0.2032) (layer Cuivre) (net 313))
+ (segment (start 76.835 133.731) (end 74.168 131.064) (width 0.2032) (layer Cuivre) (net 314))
+ (segment (start 76.708 133.731) (end 76.835 133.731) (width 0.2032) (layer Cuivre) (net 314) (status 800))
+ (segment (start 74.168 129.413) (end 74.168 131.064) (width 0.2032) (layer Cuivre) (net 314) (status 800))
+ (segment (start 78.74 133.731) (end 76.708 133.731) (width 0.2032) (layer Cuivre) (net 314) (status C00))
+ (segment (start 75.565 124.206) (end 74.295 124.206) (width 0.2032) (layer Cuivre) (net 315) (status 800))
+ (segment (start 73.406 128.143) (end 73.66 128.397) (width 0.2032) (layer Cuivre) (net 315))
+ (segment (start 75.692 128.397) (end 75.946 128.651) (width 0.2032) (layer Cuivre) (net 315))
+ (segment (start 74.295 124.206) (end 73.406 125.095) (width 0.2032) (layer Cuivre) (net 315))
+ (segment (start 75.946 128.651) (end 75.946 129.413) (width 0.2032) (layer Cuivre) (net 315) (status 400))
+ (segment (start 73.406 125.095) (end 73.406 128.143) (width 0.2032) (layer Cuivre) (net 315))
+ (segment (start 73.66 128.397) (end 75.692 128.397) (width 0.2032) (layer Cuivre) (net 315))
+ (segment (start 70.358 98.933) (end 70.358 95.631) (width 0.2032) (layer Cuivre) (net 316) (status C00))
+ (segment (start 70.358 95.631) (end 74.168 95.631) (width 0.2032) (layer Cuivre) (net 316) (status C00))
+ (segment (start 75.438 84.836) (end 75.692 85.09) (width 0.2032) (layer Cuivre) (net 317))
+ (segment (start 75.692 85.09) (end 75.692 92.583) (width 0.2032) (layer Cuivre) (net 317))
+ (segment (start 71.882 84.836) (end 75.438 84.836) (width 0.2032) (layer Cuivre) (net 317))
+ (segment (start 75.946 95.631) (end 75.946 92.837) (width 0.2032) (layer Cuivre) (net 317) (status 800))
+ (segment (start 70.739 83.693) (end 70.739 83.566) (width 0.2032) (layer Cuivre) (net 317) (status 400))
+ (segment (start 71.882 84.836) (end 70.739 83.693) (width 0.2032) (layer Cuivre) (net 317))
+ (segment (start 75.946 92.837) (end 75.692 92.583) (width 0.2032) (layer Cuivre) (net 317))
+ (segment (start 68.961 93.726) (end 68.199 92.964) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 68.961 103.632) (end 68.961 93.726) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 67.945 104.648) (end 65.786 104.648) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 67.945 104.648) (end 68.961 103.632) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 65.786 104.648) (end 65.532 104.902) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 68.199 92.964) (end 68.199 89.916) (width 0.2032) (layer Composant) (net 318) (status 400))
+ (segment (start 65.532 104.902) (end 65.532 109.601) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 65.532 109.601) (end 66.294 110.363) (width 0.2032) (layer Composant) (net 318))
+ (segment (start 66.294 111.887) (end 66.294 110.363) (width 0.2032) (layer Composant) (net 318) (status 800))
+ (segment (start 162.052 132.334) (end 162.052 132.08) (width 0.2032) (layer Cuivre) (net 319) (status 400))
+ (segment (start 161.798 134.62) (end 161.798 132.588) (width 0.2032) (layer Cuivre) (net 319) (status 800))
+ (segment (start 159.131 130.429) (end 159.131 131.572) (width 0.2032) (layer Cuivre) (net 319))
+ (segment (start 157.1752 130.429) (end 159.131 130.429) (width 0.2032) (layer Composant) (net 319) (status 800))
+ (segment (start 159.639 132.08) (end 159.131 131.572) (width 0.2032) (layer Cuivre) (net 319))
+ (segment (start 161.798 132.588) (end 162.052 132.334) (width 0.2032) (layer Cuivre) (net 319))
+ (segment (start 162.052 132.08) (end 159.639 132.08) (width 0.2032) (layer Cuivre) (net 319) (status 800))
+ (via (at 159.131 130.429) (size 0.889) (layers Composant Cuivre) (net 319))
+ (segment (start 116.586 123.19) (end 116.586 123.317) (width 0.2032) (layer Cuivre) (net 320) (status 800))
+ (segment (start 118.11 122.936) (end 118.11 124.46) (width 0.2032) (layer Composant) (net 320) (tstamp 5402D944))
+ (via (at 118.11 122.936) (size 0.889) (layers Composant Cuivre) (net 320))
+ (segment (start 117.856 123.19) (end 118.11 122.936) (width 0.2032) (layer Cuivre) (net 320) (tstamp 5402D941))
+ (segment (start 116.586 123.19) (end 117.856 123.19) (width 0.2032) (layer Cuivre) (net 320))
+ (segment (start 119.0498 127.8128) (end 118.11 126.873) (width 0.2032) (layer Composant) (net 320) (tstamp 5402D951))
+ (segment (start 118.11 126.873) (end 118.11 124.46) (width 0.2032) (layer Composant) (net 320) (tstamp 5402D953))
+ (segment (start 125.984 127.8128) (end 119.0498 127.8128) (width 0.2032) (layer Composant) (net 320))
+ (segment (start 120.65 123.19) (end 119.888 122.428) (width 0.2032) (layer Composant) (net 321) (tstamp 5402D963))
+ (via (at 119.888 122.428) (size 0.889) (layers Composant Cuivre) (net 321))
+ (segment (start 119.888 122.428) (end 120.396 121.92) (width 0.2032) (layer Cuivre) (net 321) (tstamp 5402D966))
+ (segment (start 120.396 121.92) (end 120.396 120.65) (width 0.2032) (layer Cuivre) (net 321) (tstamp 5402D967))
+ (segment (start 120.65 124.46) (end 120.65 123.19) (width 0.2032) (layer Composant) (net 321))
+ (segment (start 121.285 125.857) (end 120.65 125.222) (width 0.2032) (layer Composant) (net 321) (tstamp 5402D96B))
+ (segment (start 120.65 125.222) (end 120.65 124.46) (width 0.2032) (layer Composant) (net 321) (tstamp 5402D96C))
+ (segment (start 125.984 125.857) (end 121.285 125.857) (width 0.2032) (layer Composant) (net 321))
+ (segment (start 67.945 85.471) (end 70.739 82.677) (width 0.2032) (layer Composant) (net 322))
+ (segment (start 70.739 80.264) (end 70.739 82.677) (width 0.2032) (layer Composant) (net 322) (status 800))
+ (via (at 67.945 85.471) (size 0.889) (layers Composant Cuivre) (net 322))
+ (segment (start 67.945 85.471) (end 67.945 86.868) (width 0.2032) (layer Cuivre) (net 322) (status 400))
+ (segment (start 69.469 77.089) (end 69.469 80.264) (width 0.2032) (layer Composant) (net 323) (status 400))
+ (segment (start 69.088 76.835) (end 69.215 76.835) (width 0.2032) (layer Composant) (net 323) (status 800))
+ (segment (start 69.215 76.835) (end 69.469 77.089) (width 0.2032) (layer Composant) (net 323))
+ (segment (start 344.805 92.075) (end 344.8558 92.0242) (width 0.2032) (layer Composant) (net 324) (status 400))
+ (segment (start 344.805 93.853) (end 344.805 92.075) (width 0.2032) (layer Composant) (net 324))
+ (segment (start 343.408 95.631) (end 343.408 94.488) (width 0.2032) (layer Cuivre) (net 324) (status 800))
+ (segment (start 344.17 94.488) (end 344.805 93.853) (width 0.2032) (layer Cuivre) (net 324))
+ (via (at 344.805 93.853) (size 0.889) (layers Composant Cuivre) (net 324))
+ (segment (start 343.408 94.488) (end 344.17 94.488) (width 0.2032) (layer Cuivre) (net 324))
+ (segment (start 342.646 84.709) (end 342.646 81.153) (width 0.2032) (layer Cuivre) (net 325) (status 800))
+ (segment (start 343.408 80.391) (end 342.646 81.153) (width 0.2032) (layer Cuivre) (net 325))
+ (via (at 348.615 80.137) (size 0.889) (layers Composant Cuivre) (net 325))
+ (segment (start 349.377 80.01) (end 351.028 80.01) (width 0.2032) (layer Composant) (net 325) (status 400))
+ (segment (start 343.408 80.391) (end 348.361 80.391) (width 0.2032) (layer Cuivre) (net 325))
+ (segment (start 348.615 80.137) (end 349.25 80.137) (width 0.2032) (layer Composant) (net 325))
+ (segment (start 349.25 80.137) (end 349.377 80.01) (width 0.2032) (layer Composant) (net 325))
+ (segment (start 348.361 80.391) (end 348.615 80.137) (width 0.2032) (layer Cuivre) (net 325))
+ (segment (start 123.698 121.539) (end 122.301 121.539) (width 0.2032) (layer Composant) (net 326))
+ (segment (start 123.698 121.539) (end 123.698 121.3104) (width 0.2032) (layer Composant) (net 326))
+ (segment (start 113.411 116.078) (end 113.665 116.332) (width 0.2032) (layer Composant) (net 326))
+ (segment (start 121.92 119.126) (end 113.919 119.126) (width 0.2032) (layer Cuivre) (net 326))
+ (segment (start 113.665 118.872) (end 113.665 118.11) (width 0.2032) (layer Cuivre) (net 326) (status 400))
+ (segment (start 113.919 119.126) (end 113.665 118.872) (width 0.2032) (layer Cuivre) (net 326))
+ (segment (start 113.411 114.935) (end 113.411 116.078) (width 0.2032) (layer Composant) (net 326) (status 800))
+ (segment (start 125.984 121.3104) (end 123.698 121.3104) (width 0.2032) (layer Composant) (net 326) (status 800))
+ (segment (start 121.92 119.126) (end 122.301 119.507) (width 0.2032) (layer Cuivre) (net 326))
+ (segment (start 122.301 119.507) (end 122.301 121.539) (width 0.2032) (layer Cuivre) (net 326))
+ (via (at 123.698 121.539) (size 0.889) (layers Composant Cuivre) (net 326))
+ (segment (start 113.665 118.11) (end 113.665 116.332) (width 0.2032) (layer Composant) (net 326) (status 800))
+ (via (at 122.301 121.539) (size 0.889) (layers Composant Cuivre) (net 326))
+ (segment (start 115.951 111.76) (end 115.951 113.03) (width 0.2032) (layer Composant) (net 327) (status 800))
+ (segment (start 125.984 120.6754) (end 118.7704 120.6754) (width 0.2032) (layer Composant) (net 327) (status 800))
+ (segment (start 116.205 118.11) (end 118.7704 120.6754) (width 0.2032) (layer Composant) (net 327) (status 800))
+ (segment (start 116.205 118.11) (end 116.205 113.284) (width 0.2032) (layer Composant) (net 327) (status 800))
+ (segment (start 115.951 113.03) (end 116.205 113.284) (width 0.2032) (layer Composant) (net 327))
+ (segment (start 102.997 99.06) (end 97.917 99.06) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 129.286 107.188) (end 128.778 106.68) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 135.001 107.188) (end 129.286 107.188) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 89.281 85.598) (end 87.503 85.598) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 116.332 106.68) (end 115.697 106.045) (width 0.2032) (layer Cuivre) (net 328))
+ (via (at 104.648 106.045) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 136.7028 103.759) (end 136.7028 106.045) (width 0.2032) (layer Composant) (net 328) (status 800))
+ (segment (start 306.959 59.055) (end 306.959 57.15) (width 0.2032) (layer Cuivre) (net 328))
+ (via (at 342.392 63.246) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 102.997 101.727) (end 102.997 99.06) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 89.281 101.092) (end 95.885 101.092) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 87.249 71.12) (end 89.027 69.342) (width 0.2032) (layer Composant) (net 328))
+ (via (at 89.281 101.092) (size 0.889) (layers Composant Cuivre) (net 328))
+ (via (at 340.106 64.135) (size 0.889) (layers Composant Cuivre) (net 328))
+ (via (at 306.959 59.055) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 306.9336 59.055) (end 306.959 59.055) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 128.778 106.68) (end 116.332 106.68) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 338.455 66.675) (end 340.106 65.024) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 136.144 106.045) (end 135.001 107.188) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 340.741 60.452) (end 337.439 57.15) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 340.106 64.135) (end 341.503 64.135) (width 0.2032) (layer Composant) (net 328))
+ (via (at 89.027 66.802) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 91.694 64.135) (end 91.694 59.182) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 91.694 59.182) (end 93.726 57.15) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 306.959 57.15) (end 93.726 57.15) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 89.027 66.802) (end 91.694 64.135) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 115.697 106.045) (end 104.648 106.045) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 337.439 96.393) (end 338.455 95.377) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 87.249 85.344) (end 87.249 71.12) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 337.439 103.251) (end 337.439 96.393) (width 0.2032) (layer Composant) (net 328))
+ (via (at 337.439 96.393) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 306.9336 66.675) (end 306.9336 59.055) (width 0.2032) (layer Composant) (net 328) (status 800))
+ (segment (start 89.281 85.598) (end 89.281 101.092) (width 0.2032) (layer Composant) (net 328))
+ (via (at 102.997 99.06) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 89.027 66.802) (end 89.027 69.342) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 338.455 95.377) (end 338.455 66.675) (width 0.2032) (layer Cuivre) (net 328))
+ (via (at 136.7028 106.045) (size 0.889) (layers Composant Cuivre) (net 328))
+ (segment (start 342.392 60.706) (end 342.138 60.452) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 104.648 103.378) (end 102.997 101.727) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 104.648 106.045) (end 104.648 103.378) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 89.281 101.092) (end 87.249 101.092) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 337.439 57.15) (end 306.959 57.15) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 95.885 101.092) (end 97.917 99.06) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 340.106 65.024) (end 340.106 64.135) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 83.058 99.441) (end 85.598 99.441) (width 0.2032) (layer Cuivre) (net 328) (status 800))
+ (segment (start 341.503 64.135) (end 342.392 63.246) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 335.915 104.775) (end 337.439 103.251) (width 0.2032) (layer Composant) (net 328) (status 800))
+ (segment (start 136.7028 106.045) (end 136.144 106.045) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 85.598 99.441) (end 87.249 101.092) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 342.392 63.246) (end 342.392 60.706) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 342.138 60.452) (end 340.741 60.452) (width 0.2032) (layer Cuivre) (net 328))
+ (segment (start 87.503 85.598) (end 87.249 85.344) (width 0.2032) (layer Composant) (net 328))
+ (segment (start 316.357 125.349) (end 316.357 118.745) (width 0.2032) (layer Composant) (net 329) (status 800))
+ (via (at 316.357 118.745) (size 0.889) (layers Composant Cuivre) (net 329))
+ (segment (start 316.357 118.364) (end 316.357 118.745) (width 0.2032) (layer Cuivre) (net 329) (status 800))
+ (segment (start 298.577 117.729) (end 302.514 117.729) (width 0.2032) (layer Cuivre) (net 330) (status C00))
+ (segment (start 161.417 120.015) (end 162.433 121.031) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 130.302 85.09) (end 130.556 85.344) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 130.302 84.582) (end 130.302 85.09) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 157.1752 120.015) (end 161.417 120.015) (width 0.2032) (layer Composant) (net 331) (status 800))
+ (segment (start 162.433 126.873) (end 164.084 128.524) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 141.732 85.725) (end 142.113 86.106) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 164.084 129.667) (end 164.084 128.524) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 151.257 116.586) (end 151.257 113.157) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 154.305 120.015) (end 154.305 118.999) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 152.146 116.84) (end 151.511 116.84) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 151.257 113.157) (end 150.876 112.776) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 165.227 130.81) (end 164.084 129.667) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 162.433 121.031) (end 162.433 126.873) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 175.514 130.81) (end 165.227 130.81) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 180.975 134.747) (end 178.054 131.826) (width 0.2032) (layer Composant) (net 331) (status 800))
+ (segment (start 145.288 84.836) (end 148.717 84.836) (width 0.2032) (layer Cuivre) (net 331))
+ (via (at 154.305 120.015) (size 0.889) (layers Composant Cuivre) (net 331))
+ (segment (start 119.888 83.947) (end 120.523 84.582) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 144.018 86.106) (end 145.288 84.836) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 142.113 86.106) (end 144.018 86.106) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 120.523 84.582) (end 125.984 84.582) (width 0.2032) (layer Composant) (net 331) (status 400))
+ (segment (start 176.53 131.826) (end 178.054 131.826) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 125.984 84.582) (end 130.302 84.582) (width 0.2032) (layer Composant) (net 331) (status 800))
+ (segment (start 148.717 84.836) (end 150.241 86.36) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 150.876 109.347) (end 150.241 108.712) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 175.514 130.81) (end 176.53 131.826) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 141.097 85.09) (end 141.732 85.725) (width 0.2032) (layer Composant) (net 331))
+ (via (at 141.732 85.725) (size 0.889) (layers Composant Cuivre) (net 331))
+ (segment (start 150.241 108.712) (end 150.241 86.36) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 152.146 116.84) (end 154.305 118.999) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 139.954 85.09) (end 141.097 85.09) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 157.1752 120.015) (end 154.305 120.015) (width 0.2032) (layer Composant) (net 331) (status 800))
+ (segment (start 119.888 83.947) (end 114.554 83.947) (width 0.2032) (layer Composant) (net 331) (status 400))
+ (segment (start 130.556 85.344) (end 139.7 85.344) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 139.7 85.344) (end 139.954 85.09) (width 0.2032) (layer Composant) (net 331))
+ (segment (start 151.511 116.84) (end 151.257 116.586) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 150.876 112.776) (end 150.876 109.347) (width 0.2032) (layer Cuivre) (net 331))
+ (segment (start 172.212 132.715) (end 176.403 132.715) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 154.813 114.427) (end 159.258 118.872) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 169.545 130.048) (end 172.212 132.715) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 136.017 81.28) (end 135.001 82.296) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 157.1752 120.6754) (end 160.274 120.6754) (width 0.2032) (layer Composant) (net 332) (status 800))
+ (segment (start 154.813 114.427) (end 154.813 112.268) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 120.904 82.423) (end 120.904 82.6516) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 175.133 131.445) (end 164.973 131.445) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 150.241 81.28) (end 136.017 81.28) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 114.554 82.6516) (end 116.459 82.6516) (width 0.2032) (layer Composant) (net 332) (status 800))
+ (segment (start 125.984 82.6516) (end 129.286 82.6516) (width 0.2032) (layer Composant) (net 332) (status 800))
+ (segment (start 133.858 82.296) (end 135.001 82.296) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 133.858 82.296) (end 129.286 82.296) (width 0.2032) (layer Composant) (net 332))
+ (via (at 133.858 82.296) (size 0.889) (layers Composant Cuivre) (net 332))
+ (segment (start 153.797 84.836) (end 150.241 81.28) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 116.459 82.423) (end 120.904 82.423) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 163.449 129.921) (end 163.449 128.651) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 161.925 127.127) (end 163.449 128.651) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 159.258 119.761) (end 161.671 122.174) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 161.671 122.174) (end 161.671 128.524) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 154.432 111.887) (end 154.432 107.95) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 116.459 82.6516) (end 116.459 82.423) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 178.435 134.747) (end 176.403 132.715) (width 0.2032) (layer Cuivre) (net 332) (status 800))
+ (segment (start 178.435 134.747) (end 175.133 131.445) (width 0.2032) (layer Composant) (net 332) (status 800))
+ (segment (start 161.925 122.301) (end 160.274 120.6754) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 125.984 82.6516) (end 120.904 82.6516) (width 0.2032) (layer Composant) (net 332) (status 800))
+ (segment (start 154.813 112.268) (end 154.432 111.887) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 129.286 82.296) (end 129.286 82.6516) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 163.195 130.048) (end 169.545 130.048) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 153.797 107.315) (end 153.797 84.836) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 161.671 128.524) (end 163.195 130.048) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 161.925 127.127) (end 161.925 122.301) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 159.258 118.872) (end 159.258 119.761) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 164.973 131.445) (end 163.449 129.921) (width 0.2032) (layer Composant) (net 332))
+ (segment (start 154.432 107.95) (end 153.797 107.315) (width 0.2032) (layer Cuivre) (net 332))
+ (segment (start 173.355 134.747) (end 169.291 130.683) (width 0.2032) (layer Cuivre) (net 333) (status 800))
+ (segment (start 120.523 83.2866) (end 120.523 82.931) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 162.433 130.302) (end 162.433 129.032) (width 0.2032) (layer Composant) (net 333))
+ (via (at 131.826 83.439) (size 0.889) (layers Composant Cuivre) (net 333))
+ (segment (start 150.114 81.788) (end 153.289 84.963) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 160.782 123.698) (end 160.782 122.809) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 153.289 84.963) (end 153.289 107.442) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 158.75 120.015) (end 158.75 119.126) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 161.163 128.905) (end 162.941 130.683) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 153.924 112.014) (end 154.305 112.395) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 136.271 81.788) (end 150.114 81.788) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 161.163 122.428) (end 161.163 128.905) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 134.62 83.439) (end 136.271 81.788) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 153.924 108.077) (end 153.924 112.014) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 160.655 127.254) (end 160.655 123.825) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 158.75 120.015) (end 161.163 122.428) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 154.305 114.681) (end 158.75 119.126) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 116.84 83.2866) (end 116.84 82.931) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 153.289 107.442) (end 153.924 108.077) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 125.984 83.2866) (end 120.523 83.2866) (width 0.2032) (layer Composant) (net 333) (status 800))
+ (segment (start 130.556 83.439) (end 131.826 83.439) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 130.556 83.2866) (end 130.556 83.439) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 162.433 129.032) (end 160.655 127.254) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 160.655 123.825) (end 160.782 123.698) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 131.826 83.439) (end 134.62 83.439) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 164.592 132.461) (end 162.433 130.302) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 114.554 83.2866) (end 116.84 83.2866) (width 0.2032) (layer Composant) (net 333) (status 800))
+ (segment (start 171.069 132.461) (end 164.592 132.461) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 116.84 82.931) (end 120.523 82.931) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 125.984 83.2866) (end 130.556 83.2866) (width 0.2032) (layer Composant) (net 333) (status 800))
+ (segment (start 173.355 134.747) (end 171.069 132.461) (width 0.2032) (layer Composant) (net 333) (status 800))
+ (segment (start 157.1752 121.9708) (end 160.02 121.9708) (width 0.2032) (layer Composant) (net 333) (status 800))
+ (segment (start 154.305 112.395) (end 154.305 114.681) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 162.941 130.683) (end 169.291 130.683) (width 0.2032) (layer Cuivre) (net 333))
+ (segment (start 160.782 122.809) (end 160.02 121.9708) (width 0.2032) (layer Composant) (net 333))
+ (segment (start 112.903 101.473) (end 113.919 101.473) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 135.89 107.315) (end 135.509 107.696) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 137.3378 113.8428) (end 137.3378 115.316) (width 0.2032) (layer Composant) (net 334) (status 800))
+ (segment (start 114.554 102.108) (end 113.919 101.473) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 104.648 107.188) (end 103.505 107.188) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 136.525 126.365) (end 136.525 127.635) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 136.779 115.824) (end 137.3378 115.316) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 137.541 106.934) (end 137.3378 106.934) (width 0.2032) (layer Composant) (net 334))
+ (via (at 103.505 107.188) (size 0.889) (layers Composant Cuivre) (net 334))
+ (segment (start 137.3378 113.8428) (end 137.3378 107.315) (width 0.2032) (layer Composant) (net 334) (status 800))
+ (segment (start 137.3378 107.315) (end 137.3378 106.934) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 136.525 127.635) (end 133.604 130.556) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 137.541 105.41) (end 137.541 106.934) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 137.541 105.41) (end 137.3378 105.41) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 136.525 119.888) (end 136.779 119.65178) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 123.952 132.969) (end 126.365 130.556) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 129.032 107.696) (end 128.524 107.188) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 133.604 130.556) (end 126.365 130.556) (width 0.2032) (layer Cuivre) (net 334))
+ (via (at 114.554 106.807) (size 0.889) (layers Composant Cuivre) (net 334))
+ (segment (start 114.554 106.807) (end 114.554 102.108) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 95.25 135.89) (end 98.171 132.969) (width 0.2032) (layer Cuivre) (net 334) (status 800))
+ (segment (start 91.948 131.318) (end 95.123 131.318) (width 0.2032) (layer Composant) (net 334))
+ (via (at 136.525 126.365) (size 0.889) (layers Composant Cuivre) (net 334))
+ (segment (start 137.3378 107.315) (end 137.033 107.315) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 137.033 107.315) (end 135.89 107.315) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 91.948 124.079) (end 91.694 124.333) (width 0.2032) (layer Composant) (net 334))
+ (via (at 137.033 107.315) (size 0.889) (layers Composant Cuivre) (net 334))
+ (segment (start 136.779 119.65178) (end 136.779 115.824) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 91.694 124.333) (end 91.694 131.064) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 105.029 106.807) (end 104.648 107.188) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 137.3378 103.759) (end 137.3378 105.41) (width 0.2032) (layer Composant) (net 334) (status 800))
+ (segment (start 98.171 132.969) (end 123.952 132.969) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 136.525 119.888) (end 136.525 126.365) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 103.251 124.079) (end 91.948 124.079) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 114.554 106.807) (end 105.029 106.807) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 103.505 123.825) (end 103.251 124.079) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 135.509 107.696) (end 129.032 107.696) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 128.524 107.188) (end 114.935 107.188) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 114.554 106.807) (end 114.935 107.188) (width 0.2032) (layer Cuivre) (net 334))
+ (segment (start 91.694 131.064) (end 91.948 131.318) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 109.0422 94.869) (end 109.0422 97.79) (width 0.2032) (layer Composant) (net 334) (status 800))
+ (segment (start 109.0422 97.79) (end 109.22 97.79) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 103.505 107.188) (end 103.505 123.825) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 95.377 135.763) (end 95.25 135.89) (width 0.2032) (layer Composant) (net 334) (status 400))
+ (segment (start 95.123 131.318) (end 95.377 131.572) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 109.22 97.79) (end 112.903 101.473) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 95.377 131.572) (end 95.377 135.763) (width 0.2032) (layer Composant) (net 334))
+ (segment (start 332.867 118.491) (end 332.359 117.983) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 168.783 110.109) (end 170.561 110.109) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 323.088 109.093) (end 322.072 110.109) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 322.072 110.109) (end 310.769 110.109) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 143.8402 105.537) (end 143.8402 103.759) (width 0.2032) (layer Composant) (net 335) (status 400))
+ (segment (start 175.387 110.998) (end 176.784 112.395) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 331.343 94.107) (end 331.851 93.599) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 334.391 126.111) (end 334.391 118.745) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 279.654 112.649) (end 281.432 112.649) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 135.763 100.076) (end 139.319 96.52) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 96.393 108.077) (end 95.25 108.077) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 107.188 101.346) (end 108.458 100.076) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 143.637 108.839) (end 143.891 109.093) (width 0.2032) (layer VCC_layer) (net 335))
+ (via (at 175.387 110.998) (size 0.889) (layers Composant Cuivre) (net 335))
+ (segment (start 103.124 101.346) (end 107.188 101.346) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 334.518 112.141) (end 334.264 112.395) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 331.343 102.362) (end 331.343 94.107) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 163.957 107.188) (end 165.862 107.188) (width 0.2032) (layer Cuivre) (net 335) (status 800))
+ (segment (start 92.075 109.855) (end 93.599 109.855) (width 0.2032) (layer Cuivre) (net 335) (status 800))
+ (segment (start 144.5006 111.125) (end 143.891 110.5154) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 154.686 107.188) (end 152.781 109.093) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 162.179 107.823) (end 162.814 107.188) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 142.24 97.79) (end 143.8402 99.3902) (width 0.2032) (layer Composant) (net 335))
+ (via (at 143.637 108.839) (size 0.889) (layers Composant Cuivre) (net 335))
+ (segment (start 279.4 112.395) (end 279.654 112.649) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 93.599 109.855) (end 95.25 108.077) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 323.977 125.349) (end 324.993 126.365) (width 0.2032) (layer VCC_layer) (net 335) (status 800))
+ (segment (start 324.993 126.365) (end 334.137 126.365) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 334.137 126.365) (end 334.391 126.111) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 334.391 118.745) (end 334.137 118.491) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 332.359 117.983) (end 332.359 113.411) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 152.781 109.093) (end 143.891 109.093) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 334.137 118.491) (end 332.867 118.491) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 329.565 109.093) (end 329.565 104.648) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 143.891 109.3978) (end 143.891 110.5154) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 143.637 105.537) (end 143.8402 105.537) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 323.088 109.093) (end 329.565 109.093) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 103.124 101.346) (end 97.663 106.807) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 331.851 93.599) (end 331.851 92.0242) (width 0.2032) (layer Composant) (net 335) (status 400))
+ (via (at 329.565 109.093) (size 0.889) (layers Composant Cuivre) (net 335))
+ (segment (start 329.565 109.093) (end 330.073 109.093) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 330.073 109.093) (end 330.327 108.839) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 330.327 108.839) (end 334.264 108.839) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 157.607 107.823) (end 162.179 107.823) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 334.518 109.093) (end 334.518 112.141) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 163.957 107.188) (end 162.814 107.188) (width 0.2032) (layer Cuivre) (net 335) (status 800))
+ (segment (start 334.264 112.395) (end 333.375 112.395) (width 0.2032) (layer VCC_layer) (net 335) (status 400))
+ (segment (start 333.375 112.395) (end 332.359 113.411) (width 0.2032) (layer VCC_layer) (net 335) (status 800))
+ (segment (start 294.005 111.125) (end 300.482 111.125) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 170.561 110.109) (end 174.498 110.109) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 310.769 110.109) (end 310.261 109.601) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 97.917 94.869) (end 97.9932 94.869) (width 0.2032) (layer Composant) (net 335) (status 400))
+ (segment (start 144.5006 113.8428) (end 144.5006 111.125) (width 0.2032) (layer Composant) (net 335) (status 800))
+ (via (at 170.561 110.109) (size 0.889) (layers Composant Cuivre) (net 335))
+ (segment (start 142.24 97.79) (end 140.97 96.52) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 139.319 96.52) (end 140.97 96.52) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 301.498 109.982) (end 300.482 111.125) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 143.637 109.1438) (end 143.637 108.839) (width 0.2032) (layer Composant) (net 335))
+ (via (at 142.24 97.79) (size 0.889) (layers Composant Cuivre) (net 335))
+ (via (at 156.083 107.188) (size 0.889) (layers Composant Cuivre) (net 335))
+ (segment (start 143.891 109.3978) (end 143.637 109.1438) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 281.432 112.649) (end 281.686 112.395) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 292.735 112.395) (end 294.005 111.125) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 165.862 107.188) (end 168.783 110.109) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 176.784 112.395) (end 279.4 112.395) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 174.498 110.109) (end 175.387 110.998) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 329.946 104.267) (end 329.565 104.648) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 329.946 103.759) (end 329.946 104.267) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 329.946 103.759) (end 331.343 102.362) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 156.972 107.188) (end 157.607 107.823) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 108.458 100.076) (end 135.763 100.076) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 143.8402 103.759) (end 143.8402 99.3902) (width 0.2032) (layer Composant) (net 335) (status 800))
+ (segment (start 301.498 109.982) (end 301.879 109.601) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 156.083 107.188) (end 154.686 107.188) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 156.972 107.188) (end 156.083 107.188) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 143.637 108.839) (end 143.637 105.537) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 281.686 112.395) (end 292.735 112.395) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 97.663 106.807) (end 96.393 108.077) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 334.264 108.839) (end 334.518 109.093) (width 0.2032) (layer VCC_layer) (net 335))
+ (segment (start 301.879 109.601) (end 310.261 109.601) (width 0.2032) (layer Cuivre) (net 335))
+ (segment (start 97.663 106.807) (end 97.663 102.235) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 97.917 101.981) (end 97.917 94.869) (width 0.2032) (layer Composant) (net 335))
+ (segment (start 97.663 102.235) (end 97.917 101.981) (width 0.2032) (layer Composant) (net 335))
+ (via (at 97.663 106.807) (size 0.889) (layers Composant Cuivre) (net 335))
+ (via (at 159.004 103.378) (size 0.889) (layers Composant Cuivre) (net 336))
+ (segment (start 321.437 125.349) (end 321.437 123.317) (width 0.2032) (layer Composant) (net 336) (status 800))
+ (segment (start 97.3328 94.869) (end 97.3328 98.171) (width 0.2032) (layer Composant) (net 336) (status 800))
+ (segment (start 328.295 117.475) (end 330.835 117.475) (width 0.2032) (layer Cuivre) (net 336) (status 400))
+ (segment (start 319.913 100.076) (end 319.913 96.774) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 168.148 103.378) (end 168.148 99.187) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 319.405 96.266) (end 319.913 96.774) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 135.001 98.552) (end 107.95 98.552) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 334.4672 93.98) (end 334.137 94.3102) (width 0.2032) (layer Composant) (net 336))
+ (via (at 168.148 99.187) (size 0.889) (layers Composant Cuivre) (net 336))
+ (segment (start 319.913 95.885) (end 319.405 95.377) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 332.74 94.996) (end 334.01 94.996) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 146.05 97.79) (end 142.875 94.615) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 174.879 98.806) (end 178.689 94.996) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 319.405 96.266) (end 319.405 95.377) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 334.4672 92.0242) (end 334.4672 93.98) (width 0.2032) (layer Composant) (net 336) (status 800))
+ (segment (start 322.199 122.555) (end 322.199 117.475) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 97.3328 98.171) (end 96.647 98.8568) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 142.875 94.615) (end 138.938 94.615) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 322.961 117.221) (end 322.453 116.713) (width 0.2032) (layer Cuivre) (net 336))
+ (via (at 334.01 94.996) (size 0.889) (layers Composant Cuivre) (net 336))
+ (segment (start 240.792 95.377) (end 319.405 95.377) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 145.796 97.79) (end 146.05 97.79) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 145.796 103.759) (end 145.796 97.79) (width 0.2032) (layer Composant) (net 336) (status 800))
+ (segment (start 135.001 98.552) (end 138.938 94.615) (width 0.2032) (layer Cuivre) (net 336))
+ (via (at 319.405 95.377) (size 0.889) (layers Composant Cuivre) (net 336))
+ (via (at 168.148 103.378) (size 0.889) (layers Composant Cuivre) (net 336))
+ (segment (start 321.437 101.6) (end 319.913 100.076) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 323.469 118.745) (end 322.961 118.237) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 146.431 100.965) (end 146.05 100.584) (width 0.2032) (layer VCC_layer) (net 336))
+ (segment (start 321.437 123.317) (end 322.199 122.555) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 146.05 100.584) (end 146.05 97.79) (width 0.2032) (layer VCC_layer) (net 336))
+ (segment (start 322.199 117.475) (end 321.437 116.713) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 327.025 118.745) (end 328.295 117.475) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 217.424 94.996) (end 218.059 94.361) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 218.059 94.361) (end 239.776 94.361) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 159.004 103.378) (end 156.591 100.965) (width 0.2032) (layer VCC_layer) (net 336))
+ (segment (start 147.0914 113.8428) (end 147.0914 110.998) (width 0.2032) (layer Composant) (net 336) (status 800))
+ (segment (start 168.529 98.806) (end 174.879 98.806) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 331.851 95.885) (end 319.913 95.885) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 239.776 94.361) (end 240.792 95.377) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 163.957 103.378) (end 168.148 103.378) (width 0.2032) (layer Cuivre) (net 336) (status 800))
+ (segment (start 332.74 94.996) (end 331.851 95.885) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 147.0914 110.998) (end 145.796 109.7026) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 321.437 116.713) (end 321.437 101.6) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 168.148 99.187) (end 168.529 98.806) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 322.961 117.221) (end 322.961 118.237) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 334.137 94.3102) (end 334.137 94.869) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 98.425 102.235) (end 100.838 99.822) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 156.591 100.965) (end 146.431 100.965) (width 0.2032) (layer VCC_layer) (net 336))
+ (segment (start 96.52 102.235) (end 98.425 102.235) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 145.796 109.7026) (end 145.796 103.759) (width 0.2032) (layer Composant) (net 336) (status 400))
+ (segment (start 96.647 98.8568) (end 96.647 102.235) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 163.957 103.378) (end 159.004 103.378) (width 0.2032) (layer Cuivre) (net 336) (status 800))
+ (segment (start 100.838 99.822) (end 106.68 99.822) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 322.453 116.713) (end 321.437 116.713) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 92.075 102.235) (end 96.52 102.235) (width 0.2032) (layer Cuivre) (net 336) (status 800))
+ (via (at 146.05 97.79) (size 0.889) (layers Composant Cuivre) (net 336))
+ (via (at 96.647 102.235) (size 0.889) (layers Composant Cuivre) (net 336))
+ (segment (start 217.424 94.996) (end 178.689 94.996) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 323.469 118.745) (end 327.025 118.745) (width 0.2032) (layer Cuivre) (net 336))
+ (via (at 321.437 116.713) (size 0.889) (layers Composant Cuivre) (net 336))
+ (segment (start 106.68 99.822) (end 107.95 98.552) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 334.01 94.996) (end 334.137 94.869) (width 0.2032) (layer Composant) (net 336))
+ (segment (start 96.647 102.235) (end 96.52 102.235) (width 0.2032) (layer Cuivre) (net 336))
+ (segment (start 172.339 90.678) (end 172.212 90.551) (width 0.2032) (layer VCC_layer) (net 337))
+ (segment (start 172.339 125.476) (end 172.339 110.998) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 174.879 128.905) (end 176.149 130.175) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 189.992 133.35) (end 187.833 133.35) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 184.658 130.175) (end 176.149 130.175) (width 0.2032) (layer Cuivre) (net 337))
+ (via (at 172.339 110.998) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 172.466 58.039) (end 299.847 58.039) (width 0.2032) (layer Composant) (net 337))
+ (via (at 200.279 134.366) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 200.279 134.366) (end 191.008 134.366) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 172.339 96.012) (end 173.609 96.012) (width 0.2032) (layer Cuivre) (net 337) (status 400))
+ (via (at 172.339 96.012) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 172.847 108.839) (end 172.593 109.093) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 172.847 96.52) (end 172.847 108.839) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 174.879 125.73) (end 174.879 128.905) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 172.339 96.012) (end 172.847 96.52) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 163.703 92.075) (end 166.116 92.075) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 159.766 91.0844) (end 160.0454 90.805) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 167.259 93.218) (end 167.259 96.012) (width 0.2032) (layer Composant) (net 337))
+ (via (at 172.339 109.093) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 172.593 109.093) (end 172.339 109.093) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 174.625 125.476) (end 174.879 125.73) (width 0.2032) (layer Cuivre) (net 337))
+ (via (at 167.259 96.012) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 167.259 96.012) (end 172.339 96.012) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 300.736 64.9732) (end 300.736 64.897) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 166.116 92.075) (end 167.259 93.218) (width 0.2032) (layer Composant) (net 337))
+ (via (at 172.339 125.476) (size 0.889) (layers Composant Cuivre) (net 337))
+ (via (at 172.212 84.709) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 157.1752 91.0844) (end 159.766 91.0844) (width 0.2032) (layer Composant) (net 337) (status 800))
+ (segment (start 172.212 58.293) (end 172.466 58.039) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 172.339 110.998) (end 172.339 109.093) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 162.433 90.805) (end 163.703 92.075) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 160.0454 90.805) (end 162.433 90.805) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 173.609 125.476) (end 174.625 125.476) (width 0.2032) (layer Cuivre) (net 337) (status 800))
+ (segment (start 172.339 110.998) (end 173.609 110.998) (width 0.2032) (layer Cuivre) (net 337) (status 400))
+ (segment (start 191.008 134.366) (end 189.992 133.35) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 300.9138 66.675) (end 300.9138 65.151) (width 0.2032) (layer Composant) (net 337) (status 800))
+ (segment (start 300.9138 65.151) (end 300.736 64.9732) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 300.736 64.897) (end 300.355 64.516) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 300.355 58.547) (end 299.847 58.039) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 172.212 89.789) (end 172.212 84.709) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 300.355 64.516) (end 300.355 58.547) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 202.565 134.366) (end 200.279 134.366) (width 0.2032) (layer Composant) (net 337) (status 800))
+ (segment (start 172.212 84.709) (end 172.212 58.293) (width 0.2032) (layer Composant) (net 337))
+ (segment (start 172.339 125.476) (end 173.609 125.476) (width 0.2032) (layer Cuivre) (net 337) (status 400))
+ (segment (start 172.339 96.012) (end 172.339 90.678) (width 0.2032) (layer VCC_layer) (net 337))
+ (segment (start 187.833 133.35) (end 184.658 130.175) (width 0.2032) (layer Cuivre) (net 337))
+ (segment (start 172.212 90.551) (end 172.212 89.789) (width 0.2032) (layer VCC_layer) (net 337))
+ (via (at 172.212 89.789) (size 0.889) (layers Composant Cuivre) (net 337))
+ (segment (start 236.728 125.984) (end 235.077 124.333) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 169.164 93.091) (end 165.862 93.091) (width 0.2032) (layer VCC_layer) (net 338))
+ (segment (start 232.41 124.333) (end 230.632 126.111) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 157.1752 92.4052) (end 159.004 92.4052) (width 0.2032) (layer Composant) (net 338) (status 800))
+ (segment (start 293.497 126.619) (end 291.719 128.397) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 177.165 105.029) (end 177.165 106.807) (width 0.2032) (layer Composant) (net 338))
+ (via (at 169.164 93.091) (size 0.889) (layers Composant Cuivre) (net 338))
+ (segment (start 174.117 93.091) (end 169.164 93.091) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 174.117 93.091) (end 175.387 94.361) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 175.387 94.361) (end 175.387 104.013) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 176.784 123.317) (end 183.007 123.317) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 235.077 124.333) (end 232.41 124.333) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 176.911 104.775) (end 177.165 105.029) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 176.149 104.775) (end 176.911 104.775) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 291.719 128.397) (end 289.179 128.397) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 177.165 106.807) (end 176.53 107.442) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 176.53 107.442) (end 176.53 123.063) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 317.881 124.333) (end 294.894 124.333) (width 0.2032) (layer VCC_layer) (net 338))
+ (segment (start 286.766 125.984) (end 236.728 125.984) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 230.632 126.111) (end 183.896 126.111) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 183.896 126.111) (end 183.896 124.206) (width 0.2032) (layer Composant) (net 338))
+ (via (at 183.896 126.111) (size 0.889) (layers Composant Cuivre) (net 338))
+ (segment (start 318.897 125.349) (end 317.881 124.333) (width 0.2032) (layer VCC_layer) (net 338) (status 800))
+ (segment (start 175.387 104.013) (end 176.149 104.775) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 162.433 94.361) (end 161.544 94.361) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 163.322 93.472) (end 162.433 94.361) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 161.036 93.853) (end 161.036 92.583) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 160.655 92.202) (end 161.036 92.583) (width 0.2032) (layer Composant) (net 338))
+ (via (at 293.497 125.222) (size 0.889) (layers Composant Cuivre) (net 338))
+ (segment (start 293.497 125.222) (end 293.497 126.619) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 289.179 128.397) (end 286.766 125.984) (width 0.2032) (layer Cuivre) (net 338))
+ (segment (start 294.005 125.222) (end 293.497 125.222) (width 0.2032) (layer VCC_layer) (net 338))
+ (segment (start 176.53 123.063) (end 176.784 123.317) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 159.004 92.4052) (end 159.004 92.202) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 161.544 94.361) (end 161.036 93.853) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 160.655 92.202) (end 159.004 92.202) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 165.481 93.472) (end 163.322 93.472) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 165.481 93.472) (end 165.862 93.091) (width 0.2032) (layer VCC_layer) (net 338))
+ (via (at 165.481 93.472) (size 0.889) (layers Composant Cuivre) (net 338))
+ (segment (start 294.894 124.333) (end 294.005 125.222) (width 0.2032) (layer VCC_layer) (net 338))
+ (segment (start 183.007 123.317) (end 183.896 124.206) (width 0.2032) (layer Composant) (net 338))
+ (segment (start 320.675 62.23) (end 321.437 61.468) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 104.648 77.216) (end 104.648 75.057) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 325.501 93.726) (end 325.501 117.475) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 330.327 121.539) (end 333.121 121.539) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 325.3486 93.726) (end 325.501 93.726) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 118.872 59.944) (end 119.126 60.198) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 106.426 65.532) (end 106.426 58.928) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 325.3486 92.0242) (end 325.3486 90.424) (width 0.2032) (layer Composant) (net 339) (status 800))
+ (via (at 106.426 58.928) (size 0.889) (layers Composant Cuivre) (net 339))
+ (segment (start 104.4956 77.216) (end 104.648 77.216) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 107.061 58.293) (end 118.618 58.293) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 106.426 58.928) (end 107.061 58.293) (width 0.2032) (layer VCC_layer) (net 339))
+ (via (at 324.993 89.535) (size 0.889) (layers Composant Cuivre) (net 339))
+ (segment (start 119.126 60.198) (end 121.031 60.198) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 293.751 58.801) (end 295.021 60.071) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 104.4956 78.867) (end 104.4956 77.216) (width 0.2032) (layer Composant) (net 339) (status 800))
+ (segment (start 121.031 60.198) (end 122.301 58.928) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 122.301 58.928) (end 148.59 58.928) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 148.59 58.928) (end 149.733 60.071) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 149.733 60.071) (end 165.481 60.071) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 333.121 121.539) (end 333.375 121.793) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 324.993 89.535) (end 321.31 89.535) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 324.993 90.17) (end 324.993 89.535) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 104.648 75.057) (end 106.68 73.025) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 325.3486 92.0242) (end 325.3486 93.726) (width 0.2032) (layer Composant) (net 339) (status 800))
+ (segment (start 325.755 117.729) (end 326.517 117.729) (width 0.2032) (layer Composant) (net 339) (status 400))
+ (segment (start 320.802 59.436) (end 321.437 60.071) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 320.802 57.785) (end 320.802 59.436) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 320.548 57.531) (end 320.802 57.785) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 325.247 90.424) (end 324.993 90.17) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 308.483 57.531) (end 320.548 57.531) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 326.517 117.729) (end 330.327 121.539) (width 0.2032) (layer VCC_layer) (net 339) (status 800))
+ (segment (start 320.675 88.9) (end 320.675 62.23) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 321.437 61.468) (end 321.437 60.071) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 106.68 65.786) (end 106.426 65.532) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 106.68 73.025) (end 106.68 65.786) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 321.31 89.535) (end 320.675 88.9) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 333.375 121.793) (end 333.375 122.555) (width 0.2032) (layer VCC_layer) (net 339) (status 400))
+ (segment (start 118.618 58.293) (end 118.872 58.547) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 308.229 57.785) (end 308.483 57.531) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 306.197 57.785) (end 308.229 57.785) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 295.021 60.071) (end 303.911 60.071) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 165.481 60.071) (end 166.751 58.801) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 166.751 58.801) (end 293.751 58.801) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 118.872 58.547) (end 118.872 59.944) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 325.501 117.475) (end 325.755 117.729) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 325.3486 90.424) (end 325.247 90.424) (width 0.2032) (layer Composant) (net 339))
+ (segment (start 303.911 60.071) (end 306.197 57.785) (width 0.2032) (layer VCC_layer) (net 339))
+ (segment (start 240.284 96.901) (end 239.268 95.885) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 126.238 72.39) (end 111.506 72.39) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 159.385 74.803) (end 152.527 74.803) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 100.203 71.501) (end 99.314 71.501) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 127.762 73.914) (end 127.762 74.295) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 128.016 74.549) (end 132.842 74.549) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 127.762 74.295) (end 128.016 74.549) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 143.256 76.073) (end 136.271 76.073) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 111.125 72.009) (end 100.711 72.009) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 127.762 73.914) (end 126.238 72.39) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 190.754 76.835) (end 186.817 76.835) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 191.008 76.581) (end 190.754 76.835) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 312.293 100.965) (end 307.975 100.965) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 320.294 109.982) (end 320.294 103.759) (width 0.2032) (layer VCC_layer) (net 340))
+ (segment (start 192.659 90.043) (end 192.659 84.582) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 192.659 84.582) (end 192.151 84.074) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 192.151 84.074) (end 192.151 81.661) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 192.151 81.661) (end 192.659 81.153) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 307.721 99.187) (end 307.467 98.933) (width 0.2032) (layer Cuivre) (net 340))
+ (via (at 192.659 76.581) (size 0.889) (layers Composant Cuivre) (net 340))
+ (segment (start 136.017 76.327) (end 134.62 76.327) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 100.711 72.009) (end 100.203 71.501) (width 0.2032) (layer Cuivre) (net 340))
+ (via (at 99.314 71.501) (size 0.889) (layers Composant Cuivre) (net 340))
+ (segment (start 99.314 71.501) (end 98.679 72.136) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 98.679 72.136) (end 98.679 75.438) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 98.679 75.438) (end 97.917 76.2) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 97.917 76.2) (end 97.917 78.867) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 152.527 74.803) (end 151.384 73.66) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 193.167 93.98) (end 192.151 92.964) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 185.928 75.946) (end 163.83 75.946) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 193.167 96.774) (end 193.167 93.98) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 217.805 96.901) (end 214.884 96.901) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 294.64 96.901) (end 240.284 96.901) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 296.672 98.933) (end 294.64 96.901) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 192.659 76.581) (end 191.008 76.581) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 192.151 92.964) (end 192.151 90.551) (width 0.2032) (layer Composant) (net 340))
+ (via (at 193.167 96.774) (size 0.889) (layers Composant Cuivre) (net 340))
+ (segment (start 193.167 96.774) (end 214.757 96.774) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 214.757 96.774) (end 214.884 96.901) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 312.928 101.6) (end 314.452 101.6) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 314.452 101.6) (end 314.706 101.854) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 314.706 101.854) (end 314.706 102.235) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 314.706 102.235) (end 315.468 102.997) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 315.468 102.997) (end 319.532 102.997) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 97.917 78.867) (end 97.9932 78.867) (width 0.2032) (layer Composant) (net 340) (status 400))
+ (segment (start 159.639 74.549) (end 159.385 74.803) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 325.501 114.173) (end 325.501 111.887) (width 0.2032) (layer VCC_layer) (net 340))
+ (segment (start 325.501 111.887) (end 325.247 111.633) (width 0.2032) (layer VCC_layer) (net 340))
+ (segment (start 326.517 115.189) (end 325.501 114.173) (width 0.2032) (layer VCC_layer) (net 340) (status 800))
+ (segment (start 307.975 100.965) (end 307.721 100.711) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 325.247 111.633) (end 321.945 111.633) (width 0.2032) (layer VCC_layer) (net 340))
+ (segment (start 312.928 101.6) (end 312.293 100.965) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 307.721 100.711) (end 307.721 99.187) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 136.271 76.073) (end 136.017 76.327) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 218.821 95.885) (end 217.805 96.901) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 239.268 95.885) (end 218.821 95.885) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 111.506 72.39) (end 111.125 72.009) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 162.433 74.549) (end 159.639 74.549) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 186.817 76.835) (end 185.928 75.946) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 192.151 90.551) (end 192.659 90.043) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 163.83 75.946) (end 162.433 74.549) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 321.945 111.633) (end 320.294 109.982) (width 0.2032) (layer VCC_layer) (net 340))
+ (segment (start 192.659 81.153) (end 192.659 76.581) (width 0.2032) (layer Composant) (net 340))
+ (segment (start 307.467 98.933) (end 296.672 98.933) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 151.384 73.66) (end 145.669 73.66) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 319.532 102.997) (end 319.913 103.378) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 145.669 73.66) (end 143.256 76.073) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 134.62 76.327) (end 132.842 74.549) (width 0.2032) (layer Cuivre) (net 340))
+ (segment (start 319.913 103.378) (end 320.294 103.759) (width 0.2032) (layer VCC_layer) (net 340))
+ (via (at 319.913 103.378) (size 0.889) (layers Composant Cuivre) (net 340))
+ (segment (start 325.501 111.125) (end 326.517 110.109) (width 0.2032) (layer VCC_layer) (net 341) (status 400))
+ (segment (start 322.326 111.125) (end 320.929 109.728) (width 0.2032) (layer VCC_layer) (net 341))
+ (segment (start 320.929 109.728) (end 320.929 102.743) (width 0.2032) (layer VCC_layer) (net 341))
+ (segment (start 191.389 91.059) (end 190.881 90.551) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 312.547 98.933) (end 309.372 98.933) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 312.801 100.838) (end 312.801 99.187) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 313.055 101.092) (end 312.801 100.838) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 158.75 73.787) (end 159.004 73.533) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 217.551 96.393) (end 215.265 96.393) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 312.801 99.187) (end 312.547 98.933) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 153.416 73.787) (end 150.876 71.247) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.389 92.71) (end 191.389 91.059) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 111.633 71.755) (end 111.252 71.374) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 217.551 96.393) (end 218.567 95.377) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 314.96 101.092) (end 313.055 101.092) (width 0.2032) (layer Cuivre) (net 341))
+ (via (at 320.675 102.489) (size 0.889) (layers Composant Cuivre) (net 341))
+ (segment (start 315.214 101.346) (end 315.214 101.981) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 315.214 101.981) (end 315.722 102.489) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 295.275 96.393) (end 240.411 96.393) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 297.307 98.425) (end 295.275 96.393) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.008 96.266) (end 191.77 96.266) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 320.675 102.489) (end 315.722 102.489) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.389 82.677) (end 190.881 82.169) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 190.881 77.216) (end 191.516 76.581) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 214.884 96.012) (end 215.265 96.393) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 192.024 96.012) (end 214.884 96.012) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.77 96.266) (end 192.024 96.012) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.516 76.581) (end 191.516 75.311) (width 0.2032) (layer Composant) (net 341))
+ (via (at 191.008 96.266) (size 0.889) (layers Composant Cuivre) (net 341))
+ (segment (start 162.941 73.533) (end 164.338 74.93) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 159.004 73.533) (end 162.941 73.533) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 218.567 95.377) (end 239.395 95.377) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 309.372 98.933) (end 308.864 98.425) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.008 96.266) (end 191.008 93.091) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 186.944 74.93) (end 164.338 74.93) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 308.864 98.425) (end 297.307 98.425) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 153.416 73.787) (end 158.75 73.787) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 125.984 71.247) (end 125.476 71.755) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 103.378 73.914) (end 101.727 75.565) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 101.727 75.819) (end 101.219 76.327) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 101.219 77.724) (end 101.219 76.327) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 101.2444 78.867) (end 101.2444 77.724) (width 0.2032) (layer Composant) (net 341) (status 800))
+ (segment (start 101.727 75.565) (end 101.727 75.819) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 314.96 101.092) (end 315.214 101.346) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 322.326 111.125) (end 325.501 111.125) (width 0.2032) (layer VCC_layer) (net 341))
+ (via (at 191.516 75.311) (size 0.889) (layers Composant Cuivre) (net 341))
+ (segment (start 239.395 95.377) (end 240.411 96.393) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 320.929 102.743) (end 320.675 102.489) (width 0.2032) (layer VCC_layer) (net 341))
+ (segment (start 190.881 82.169) (end 190.881 77.216) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 150.876 71.247) (end 135.636 71.247) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 190.881 90.551) (end 190.881 84.074) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 187.325 75.311) (end 186.944 74.93) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.389 83.566) (end 191.389 82.677) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 190.881 84.074) (end 191.389 83.566) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 191.516 75.311) (end 187.325 75.311) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 135.382 70.993) (end 135.636 71.247) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 128.651 71.247) (end 128.905 70.993) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 191.008 93.091) (end 191.389 92.71) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 125.476 71.755) (end 111.633 71.755) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 101.2444 77.724) (end 101.219 77.724) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 128.651 71.247) (end 125.984 71.247) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 128.905 70.993) (end 135.382 70.993) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 111.252 71.374) (end 103.886 71.374) (width 0.2032) (layer Cuivre) (net 341))
+ (segment (start 103.886 71.374) (end 103.378 70.866) (width 0.2032) (layer Cuivre) (net 341))
+ (via (at 103.378 70.866) (size 0.889) (layers Composant Cuivre) (net 341))
+ (segment (start 103.378 70.866) (end 103.378 73.914) (width 0.2032) (layer Composant) (net 341))
+ (segment (start 313.69 67.818) (end 317.5 67.818) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 312.674 68.9102) (end 313.69 68.9102) (width 0.2032) (layer Composant) (net 342) (status 800))
+ (segment (start 323.977 110.109) (end 325.247 108.839) (width 0.2032) (layer VCC_layer) (net 342) (status 800))
+ (segment (start 329.946 106.299) (end 342.265 106.299) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 313.055 67.818) (end 313.69 67.818) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 309.753 88.519) (end 311.023 87.249) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 312.039 79.502) (end 311.404 78.867) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 325.247 108.839) (end 325.247 106.934) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 319.786 68.326) (end 319.8368 68.3006) (width 0.2032) (layer Composant) (net 342) (status 400))
+ (segment (start 312.039 80.645) (end 312.039 79.502) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 311.404 69.723) (end 312.293 68.834) (width 0.2032) (layer Cuivre) (net 342))
+ (via (at 313.69 67.818) (size 0.889) (layers Composant Cuivre) (net 342))
+ (segment (start 309.499 100.838) (end 309.753 100.584) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 312.293 68.58) (end 312.293 68.834) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 311.023 81.661) (end 312.039 80.645) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 317.5 67.818) (end 317.754 68.072) (width 0.2032) (layer Composant) (net 342))
+ (via (at 308.991 110.363) (size 0.889) (layers Composant Cuivre) (net 342))
+ (segment (start 329.692 106.553) (end 329.946 106.299) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 310.642 71.882) (end 310.642 69.977) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 311.404 72.644) (end 310.642 71.882) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 317.754 68.072) (end 317.754 68.326) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 313.69 67.818) (end 313.69 68.9102) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 310.642 69.977) (end 310.896 69.723) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 309.753 100.584) (end 309.753 88.519) (width 0.2032) (layer Composant) (net 342))
+ (via (at 311.023 87.249) (size 0.889) (layers Composant Cuivre) (net 342))
+ (segment (start 317.754 68.326) (end 319.786 68.326) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 345.821 103.759) (end 346.075 104.013) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 342.773 103.759) (end 345.821 103.759) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 309.499 109.855) (end 309.499 100.838) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 308.991 110.363) (end 309.499 109.855) (width 0.2032) (layer Composant) (net 342))
+ (segment (start 309.245 110.617) (end 308.991 110.363) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 342.519 106.045) (end 342.519 104.013) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 323.469 110.617) (end 309.245 110.617) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 323.977 110.109) (end 323.469 110.617) (width 0.2032) (layer Cuivre) (net 342) (status 800))
+ (segment (start 342.265 106.299) (end 342.519 106.045) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 310.896 69.723) (end 311.404 69.723) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 313.055 67.818) (end 312.293 68.58) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 325.247 106.934) (end 325.628 106.553) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 325.628 106.553) (end 329.692 106.553) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 311.404 78.867) (end 311.404 72.644) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 346.075 104.013) (end 346.075 104.775) (width 0.2032) (layer VCC_layer) (net 342) (status 400))
+ (segment (start 342.519 104.013) (end 342.773 103.759) (width 0.2032) (layer VCC_layer) (net 342))
+ (segment (start 311.023 87.249) (end 311.023 81.661) (width 0.2032) (layer Cuivre) (net 342))
+ (segment (start 312.166 106.807) (end 313.055 106.807) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 314.452 68.707) (end 313.182 69.977) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 314.452 68.707) (end 314.452 69.4182) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 312.166 100.711) (end 312.293 100.584) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 341.757 106.934) (end 342.011 106.68) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 316.103 68.707) (end 316.103 68.961) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 341.757 109.474) (end 341.757 106.934) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 313.182 86.614) (end 313.182 69.977) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 330.2 106.299) (end 338.582 106.299) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 326.517 107.569) (end 328.93 107.569) (width 0.2032) (layer Cuivre) (net 343) (status 800))
+ (via (at 314.452 68.707) (size 0.889) (layers Composant Cuivre) (net 343))
+ (segment (start 312.293 100.584) (end 312.293 88.646) (width 0.2032) (layer Composant) (net 343))
+ (via (at 312.166 106.807) (size 0.889) (layers Composant Cuivre) (net 343))
+ (segment (start 342.011 106.68) (end 344.805 106.68) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 322.961 107.061) (end 313.309 107.061) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 312.166 106.807) (end 312.166 100.711) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 314.452 68.707) (end 316.103 68.707) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 313.309 107.061) (end 313.055 106.807) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 345.059 103.251) (end 345.059 106.426) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 338.582 106.299) (end 341.757 109.474) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 322.961 107.061) (end 323.469 106.553) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 346.075 102.235) (end 345.059 103.251) (width 0.2032) (layer Composant) (net 343) (status 800))
+ (segment (start 328.93 107.569) (end 330.2 106.299) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 316.103 68.961) (end 319.786 68.961) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 319.786 68.961) (end 319.8368 68.9356) (width 0.2032) (layer Composant) (net 343) (status 400))
+ (segment (start 324.612 106.553) (end 323.469 106.553) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 325.628 107.569) (end 324.612 106.553) (width 0.2032) (layer Cuivre) (net 343))
+ (segment (start 326.517 107.569) (end 325.628 107.569) (width 0.2032) (layer Cuivre) (net 343) (status 800))
+ (via (at 341.757 109.474) (size 0.889) (layers Composant Cuivre) (net 343))
+ (segment (start 312.293 88.646) (end 313.182 87.757) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 313.182 87.757) (end 313.182 86.614) (width 0.2032) (layer Composant) (net 343))
+ (segment (start 345.059 106.426) (end 344.805 106.68) (width 0.2032) (layer Composant) (net 343))
+ (via (at 313.182 86.614) (size 0.889) (layers Composant Cuivre) (net 343))
+ (segment (start 312.674 69.4182) (end 314.452 69.4182) (width 0.2032) (layer Composant) (net 343) (status 800))
+ (segment (start 310.388 107.569) (end 310.388 100.711) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 312.674 79.248) (end 312.039 78.613) (width 0.2032) (layer Cuivre) (net 344))
+ (segment (start 311.531 88.392) (end 312.166 87.757) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 325.501 106.045) (end 329.438 106.045) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 341.884 105.791) (end 342.011 105.664) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 312.166 87.757) (end 312.166 87.122) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 310.388 100.711) (end 310.261 100.584) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 342.011 105.664) (end 342.011 103.505) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 312.166 83.058) (end 312.674 82.55) (width 0.2032) (layer Cuivre) (net 344))
+ (via (at 311.404 70.866) (size 0.889) (layers Composant Cuivre) (net 344))
+ (segment (start 323.977 107.569) (end 310.388 107.569) (width 0.2032) (layer Cuivre) (net 344) (status 800))
+ (segment (start 312.674 82.55) (end 312.674 79.248) (width 0.2032) (layer Cuivre) (net 344))
+ (segment (start 312.674 69.9262) (end 314.579 69.9262) (width 0.2032) (layer Composant) (net 344) (status 800))
+ (segment (start 311.404 71.247) (end 311.404 70.866) (width 0.2032) (layer Cuivre) (net 344))
+ (segment (start 312.039 71.882) (end 311.404 71.247) (width 0.2032) (layer Cuivre) (net 344))
+ (segment (start 312.674 69.9262) (end 311.912 69.9262) (width 0.2032) (layer Composant) (net 344) (status 800))
+ (segment (start 311.912 69.9262) (end 311.912 69.85) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 310.261 100.584) (end 310.261 89.027) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 323.977 107.569) (end 325.501 106.045) (width 0.2032) (layer VCC_layer) (net 344) (status 800))
+ (segment (start 312.166 87.122) (end 312.166 83.058) (width 0.2032) (layer Cuivre) (net 344))
+ (segment (start 342.265 103.251) (end 348.361 103.251) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 310.896 88.392) (end 311.531 88.392) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 311.404 70.866) (end 311.404 70.104) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 329.438 106.045) (end 329.692 105.791) (width 0.2032) (layer VCC_layer) (net 344))
+ (via (at 310.388 107.569) (size 0.889) (layers Composant Cuivre) (net 344))
+ (segment (start 314.579 69.9262) (end 314.9092 69.596) (width 0.2032) (layer Composant) (net 344))
+ (via (at 312.166 87.122) (size 0.889) (layers Composant Cuivre) (net 344))
+ (segment (start 312.039 78.613) (end 312.039 71.882) (width 0.2032) (layer Cuivre) (net 344))
+ (segment (start 311.912 69.85) (end 311.658 69.85) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 314.9092 69.596) (end 319.8368 69.596) (width 0.2032) (layer Composant) (net 344) (status 400))
+ (segment (start 348.361 103.251) (end 348.615 103.505) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 310.261 89.027) (end 310.896 88.392) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 342.011 103.505) (end 342.265 103.251) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 348.615 103.505) (end 348.615 104.775) (width 0.2032) (layer VCC_layer) (net 344) (status 400))
+ (segment (start 329.692 105.791) (end 341.884 105.791) (width 0.2032) (layer VCC_layer) (net 344))
+ (segment (start 311.658 69.85) (end 311.404 70.104) (width 0.2032) (layer Composant) (net 344))
+ (segment (start 325.755 69.977) (end 324.739 69.977) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 314.833 70.4088) (end 315.0108 70.231) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 349.377 102.235) (end 348.615 102.235) (width 0.2032) (layer Composant) (net 345) (status 400))
+ (segment (start 329.184 88.519) (end 329.184 73.406) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 349.631 102.489) (end 349.377 102.235) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 327.914 103.632) (end 327.914 103.124) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 329.057 94.107) (end 329.057 91.44) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 315.0108 70.231) (end 319.786 70.231) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 312.674 70.4088) (end 314.833 70.4088) (width 0.2032) (layer Composant) (net 345) (status 800))
+ (segment (start 330.073 90.424) (end 330.073 89.408) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 349.631 105.791) (end 349.631 102.489) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 329.311 101.727) (end 329.311 94.107) (width 0.2032) (layer Composant) (net 345))
+ (via (at 329.057 94.107) (size 0.889) (layers Composant Cuivre) (net 345))
+ (segment (start 325.755 69.977) (end 329.184 73.406) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 329.311 94.107) (end 329.057 94.107) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 321.437 70.231) (end 319.786 70.231) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 339.979 105.283) (end 340.487 105.791) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 330.073 89.408) (end 329.184 88.519) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 339.09 103.251) (end 329.311 103.251) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 319.786 70.231) (end 319.8368 70.2564) (width 0.2032) (layer Composant) (net 345) (status 400))
+ (segment (start 327.914 103.124) (end 329.311 101.727) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 321.437 70.231) (end 321.437 69.977) (width 0.2032) (layer Composant) (net 345))
+ (segment (start 326.517 105.029) (end 327.914 103.632) (width 0.2032) (layer Composant) (net 345) (status 800))
+ (segment (start 339.979 104.14) (end 339.09 103.251) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 340.487 105.791) (end 349.631 105.791) (width 0.2032) (layer Cuivre) (net 345))
+ (via (at 324.739 69.977) (size 0.889) (layers Composant Cuivre) (net 345))
+ (segment (start 339.979 105.283) (end 339.979 104.14) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 329.057 91.44) (end 330.073 90.424) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 321.437 69.977) (end 324.739 69.977) (width 0.2032) (layer Composant) (net 345))
+ (via (at 349.631 105.791) (size 0.889) (layers Composant Cuivre) (net 345))
+ (segment (start 327.533 105.029) (end 329.311 103.251) (width 0.2032) (layer Cuivre) (net 345))
+ (segment (start 326.517 105.029) (end 327.533 105.029) (width 0.2032) (layer Cuivre) (net 345) (status 800))
+ (segment (start 317.5 72.136) (end 319.913 72.136) (width 0.2032) (layer Composant) (net 346))
+ (segment (start 318.008 75.184) (end 317.754 74.93) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 317.754 74.93) (end 317.754 72.771) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 317.754 72.771) (end 317.5 72.517) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 317.5 72.517) (end 317.5 72.136) (width 0.2032) (layer Composant) (net 346))
+ (via (at 323.596 94.107) (size 0.889) (layers Composant Cuivre) (net 346))
+ (segment (start 316.611 71.9074) (end 316.8396 72.136) (width 0.2032) (layer Composant) (net 346))
+ (segment (start 322.58 89.662) (end 321.183 89.662) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 339.471 102.997) (end 339.471 101.346) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 323.977 102.489) (end 324.993 103.505) (width 0.2032) (layer Cuivre) (net 346) (status 800))
+ (segment (start 339.471 102.997) (end 340.233 103.759) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 319.913 72.136) (end 319.8368 72.1868) (width 0.2032) (layer Composant) (net 346) (status 400))
+ (segment (start 323.596 94.107) (end 323.596 90.678) (width 0.2032) (layer Cuivre) (net 346))
+ (via (at 317.5 72.517) (size 0.889) (layers Composant Cuivre) (net 346))
+ (segment (start 353.441 103.759) (end 353.695 104.013) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 339.217 101.092) (end 329.565 101.092) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 340.233 103.759) (end 353.441 103.759) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 353.695 104.013) (end 353.695 104.775) (width 0.2032) (layer Cuivre) (net 346) (status 400))
+ (segment (start 324.993 103.505) (end 327.152 103.505) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 323.977 101.473) (end 322.961 100.457) (width 0.2032) (layer VCC_layer) (net 346))
+ (segment (start 320.929 75.438) (end 320.675 75.184) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 316.8396 72.136) (end 317.5 72.136) (width 0.2032) (layer Composant) (net 346))
+ (segment (start 321.183 89.662) (end 320.929 89.408) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 329.565 101.092) (end 327.152 103.505) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 320.929 89.408) (end 320.929 75.438) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 323.596 90.678) (end 322.58 89.662) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 322.961 96.012) (end 323.596 95.377) (width 0.2032) (layer VCC_layer) (net 346))
+ (segment (start 339.471 101.346) (end 339.217 101.092) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 322.961 100.457) (end 322.961 96.012) (width 0.2032) (layer VCC_layer) (net 346))
+ (segment (start 323.596 95.377) (end 323.596 94.107) (width 0.2032) (layer VCC_layer) (net 346))
+ (segment (start 312.674 71.9074) (end 316.611 71.9074) (width 0.2032) (layer Composant) (net 346) (status 800))
+ (segment (start 320.675 75.184) (end 318.008 75.184) (width 0.2032) (layer Cuivre) (net 346))
+ (segment (start 323.977 102.489) (end 323.977 101.473) (width 0.2032) (layer VCC_layer) (net 346) (status 800))
+ (segment (start 341.757 100.076) (end 350.52 100.076) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 323.977 72.771) (end 324.231 73.025) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 323.977 72.771) (end 320.04 72.771) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 340.741 99.06) (end 341.757 100.076) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 326.517 99.949) (end 326.517 94.107) (width 0.2032) (layer Composant) (net 347) (status 800))
+ (segment (start 320.04 72.771) (end 319.8368 72.8472) (width 0.2032) (layer Composant) (net 347) (status 400))
+ (segment (start 326.517 99.949) (end 327.406 99.06) (width 0.2032) (layer Cuivre) (net 347) (status 800))
+ (segment (start 312.674 72.4154) (end 314.579 72.4154) (width 0.2032) (layer Composant) (net 347) (status 800))
+ (segment (start 353.695 102.235) (end 353.695 99.187) (width 0.2032) (layer Cuivre) (net 347) (status 800))
+ (segment (start 324.231 73.025) (end 324.866 73.025) (width 0.2032) (layer Composant) (net 347))
+ (via (at 324.866 73.025) (size 0.889) (layers Composant Cuivre) (net 347))
+ (segment (start 325.501 73.025) (end 324.866 73.025) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 326.644 74.168) (end 325.501 73.025) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 326.644 84.074) (end 326.644 74.168) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 318.262 72.898) (end 317.754 73.406) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 326.644 84.074) (end 326.136 84.582) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 319.786 72.771) (end 319.8368 72.8472) (width 0.2032) (layer Composant) (net 347) (status 400))
+ (segment (start 317.754 73.406) (end 315.595 73.406) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 326.517 94.107) (end 326.517 89.027) (width 0.2032) (layer Cuivre) (net 347))
+ (via (at 326.517 94.107) (size 0.889) (layers Composant Cuivre) (net 347))
+ (segment (start 315.595 73.406) (end 314.579 72.4154) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 351.663 98.933) (end 353.441 98.933) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 326.136 88.646) (end 326.136 84.582) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 318.262 72.771) (end 318.262 72.898) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 327.406 99.06) (end 340.741 99.06) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 353.441 98.933) (end 353.695 99.187) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 350.52 100.076) (end 351.663 98.933) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 326.517 89.027) (end 326.136 88.646) (width 0.2032) (layer Cuivre) (net 347))
+ (segment (start 318.262 72.771) (end 319.786 72.771) (width 0.2032) (layer Composant) (net 347))
+ (segment (start 317.373 79.756) (end 317.881 80.264) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 312.674 77.9272) (end 313.944 77.9272) (width 0.2032) (layer Composant) (net 348) (status 800))
+ (segment (start 318.77 91.313) (end 318.77 90.17) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 321.691 94.234) (end 318.77 91.313) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 317.881 80.772) (end 318.262 81.153) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 317.881 80.264) (end 317.881 80.772) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 318.135 80.518) (end 317.881 80.264) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 314.96 77.978) (end 316.738 79.756) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 318.135 80.645) (end 318.135 80.518) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 321.691 94.234) (end 321.691 95.504) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 356.235 104.775) (end 356.235 97.917) (width 0.2032) (layer Cuivre) (net 348) (status 800))
+ (segment (start 347.726 96.774) (end 348.615 97.663) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 350.901 97.663) (end 351.155 97.409) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 339.471 97.409) (end 340.106 96.774) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 348.615 97.663) (end 350.901 97.663) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 340.106 96.774) (end 347.726 96.774) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 356.235 97.917) (end 355.727 97.409) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 323.977 97.409) (end 339.471 97.409) (width 0.2032) (layer Cuivre) (net 348) (status 800))
+ (segment (start 316.738 79.756) (end 317.373 79.756) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 313.944 77.978) (end 314.96 77.978) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 313.944 77.9272) (end 313.944 77.978) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 323.977 97.409) (end 323.215 97.409) (width 0.2032) (layer Composant) (net 348) (status 800))
+ (segment (start 318.77 90.17) (end 318.262 89.662) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 323.215 97.409) (end 322.961 97.155) (width 0.2032) (layer Composant) (net 348))
+ (via (at 317.881 80.264) (size 0.889) (layers Composant Cuivre) (net 348))
+ (segment (start 321.691 95.504) (end 322.961 96.774) (width 0.2032) (layer Composant) (net 348))
+ (segment (start 351.155 97.409) (end 355.727 97.409) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 318.262 89.662) (end 318.262 81.153) (width 0.2032) (layer Cuivre) (net 348))
+ (segment (start 319.8368 80.645) (end 318.135 80.645) (width 0.2032) (layer Composant) (net 348) (status 800))
+ (via (at 318.77 90.17) (size 0.889) (layers Composant Cuivre) (net 348))
+ (segment (start 322.961 97.155) (end 322.961 96.774) (width 0.2032) (layer Composant) (net 348))
+ (via (at 317.627 90.17) (size 0.889) (layers Composant Cuivre) (net 349))
+ (segment (start 318.262 81.3054) (end 318.262 81.407) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 316.738 80.645) (end 316.23 80.137) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 314.833 78.486) (end 316.23 79.883) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 321.183 94.488) (end 321.183 95.631) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 352.933 107.315) (end 353.695 107.315) (width 0.2032) (layer Composant) (net 349) (status 400))
+ (segment (start 312.674 78.4098) (end 313.69 78.4098) (width 0.2032) (layer Composant) (net 349) (status 800))
+ (segment (start 323.977 99.949) (end 323.215 99.949) (width 0.2032) (layer Composant) (net 349) (status 800))
+ (segment (start 321.183 95.631) (end 322.453 96.901) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 317.627 90.424) (end 317.627 90.17) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 318.008 90.805) (end 317.627 90.424) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 316.992 80.645) (end 316.738 80.645) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 313.69 78.486) (end 314.833 78.486) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 351.663 99.695) (end 352.806 99.695) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 322.961 99.695) (end 322.961 98.806) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 317.627 90.17) (end 317.627 81.534) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 317.754 81.407) (end 316.992 80.645) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 352.806 101.092) (end 352.679 101.219) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 317.627 81.534) (end 316.738 80.645) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 323.215 99.949) (end 322.961 99.695) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 316.23 79.883) (end 316.23 80.137) (width 0.2032) (layer Composant) (net 349))
+ (via (at 316.738 80.645) (size 0.889) (layers Composant Cuivre) (net 349))
+ (segment (start 323.977 99.949) (end 324.993 100.965) (width 0.2032) (layer Cuivre) (net 349) (status 800))
+ (segment (start 318.262 81.407) (end 317.754 81.407) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 322.961 98.806) (end 322.453 98.298) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 313.69 78.4098) (end 313.69 78.486) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 318.008 91.313) (end 318.008 90.805) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 321.183 94.488) (end 318.008 91.313) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 322.453 98.298) (end 322.453 96.901) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 328.422 99.568) (end 340.487 99.568) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 319.8368 81.3054) (end 318.262 81.3054) (width 0.2032) (layer Composant) (net 349) (status 800))
+ (segment (start 350.774 100.584) (end 351.663 99.695) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 352.806 99.695) (end 352.806 101.092) (width 0.2032) (layer Composant) (net 349))
+ (segment (start 352.679 107.061) (end 352.933 107.315) (width 0.2032) (layer Composant) (net 349))
+ (via (at 352.806 99.695) (size 0.889) (layers Composant Cuivre) (net 349))
+ (segment (start 341.503 100.584) (end 350.774 100.584) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 340.487 99.568) (end 341.503 100.584) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 327.025 100.965) (end 324.993 100.965) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 327.025 100.965) (end 328.422 99.568) (width 0.2032) (layer Cuivre) (net 349))
+ (segment (start 352.679 101.219) (end 352.679 107.061) (width 0.2032) (layer Composant) (net 349))
+ (via (at 287.528 68.072) (size 0.889) (layers Composant Cuivre) (net 350))
+ (segment (start 287.528 63.754) (end 272.415 63.754) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 272.415 63.754) (end 272.161 63.5) (width 0.2032) (layer Cuivre) (net 350))
+ (via (at 317.373 105.537) (size 0.889) (layers Composant Cuivre) (net 350))
+ (segment (start 308.356 105.537) (end 307.848 105.029) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 299.085 69.342) (end 299.085 69.977) (width 0.2032) (layer Cuivre) (net 350))
+ (via (at 287.528 63.754) (size 0.889) (layers Composant Cuivre) (net 350))
+ (segment (start 313.436 105.537) (end 308.356 105.537) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 287.528 68.072) (end 287.528 63.754) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 287.528 104.013) (end 287.528 68.072) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 163.195 76.073) (end 161.036 78.232) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 159.766 78.74) (end 157.1752 78.74) (width 0.2032) (layer Composant) (net 350) (status 400))
+ (segment (start 318.897 97.409) (end 317.881 98.425) (width 0.2032) (layer Composant) (net 350) (status 800))
+ (segment (start 307.9242 68.199) (end 307.9242 66.675) (width 0.2032) (layer Composant) (net 350) (status 400))
+ (via (at 306.197 70.739) (size 0.889) (layers Composant Cuivre) (net 350))
+ (segment (start 317.373 105.537) (end 317.881 105.029) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 297.561 104.013) (end 287.528 104.013) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 317.373 105.537) (end 316.738 105.537) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 298.577 105.029) (end 307.848 105.029) (width 0.2032) (layer Cuivre) (net 350) (status 800))
+ (segment (start 299.466 70.358) (end 305.562 70.358) (width 0.2032) (layer Cuivre) (net 350))
+ (via (at 287.528 104.013) (size 0.889) (layers Composant Cuivre) (net 350))
+ (segment (start 299.085 69.977) (end 299.466 70.358) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 313.69 105.791) (end 316.484 105.791) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 305.943 70.739) (end 306.197 70.739) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 307.721 69.215) (end 307.721 68.199) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 305.562 70.358) (end 305.943 70.739) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 317.881 98.425) (end 317.881 105.029) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 297.815 68.072) (end 299.085 69.342) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 307.9242 68.199) (end 307.721 68.199) (width 0.2032) (layer Composant) (net 350))
+ (via (at 163.195 60.96) (size 0.889) (layers Composant Cuivre) (net 350))
+ (segment (start 287.528 68.072) (end 297.815 68.072) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 306.197 70.739) (end 307.721 69.215) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 316.484 105.791) (end 316.738 105.537) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 165.481 59.944) (end 164.465 60.96) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 298.577 105.029) (end 297.561 104.013) (width 0.2032) (layer Cuivre) (net 350) (status 800))
+ (segment (start 163.195 60.96) (end 163.195 76.073) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 161.036 78.232) (end 160.02 78.232) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 271.907 59.944) (end 165.481 59.944) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 313.436 105.537) (end 313.69 105.791) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 164.465 60.96) (end 163.195 60.96) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 160.02 78.232) (end 159.766 78.486) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 272.161 60.198) (end 271.907 59.944) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 272.161 63.5) (end 272.161 60.198) (width 0.2032) (layer Cuivre) (net 350))
+ (segment (start 159.766 78.486) (end 159.766 78.74) (width 0.2032) (layer Composant) (net 350))
+ (segment (start 301.117 92.964) (end 304.165 89.916) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 307.848 74.93) (end 308.356 75.438) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 300.355 92.964) (end 301.117 92.964) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 322.834 122.682) (end 322.58 122.936) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 299.593 94.361) (end 300.101 93.853) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 322.58 122.936) (end 318.389 122.936) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 299.593 98.425) (end 299.593 94.361) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 334.645 121.539) (end 328.93 121.539) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 351.409 120.015) (end 348.742 122.682) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 301.117 99.949) (end 301.117 101.473) (width 0.2032) (layer Composant) (net 351) (status 800))
+ (segment (start 301.117 101.473) (end 301.498 101.854) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 323.088 121.793) (end 322.834 122.047) (width 0.2032) (layer Cuivre) (net 351))
+ (via (at 302.133 122.555) (size 0.889) (layers Composant Cuivre) (net 351))
+ (segment (start 304.165 82.677) (end 306.451 80.391) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 318.389 122.936) (end 318.262 122.809) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 306.451 80.391) (end 306.451 74.93) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 304.165 89.916) (end 304.165 82.677) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 302.133 122.555) (end 302.768 122.555) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 308.356 75.438) (end 312.674 75.438) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 335.788 122.682) (end 334.645 121.539) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 317.881 76.6826) (end 319.659 76.6826) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 302.133 122.555) (end 302.133 112.903) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 301.498 112.268) (end 301.498 101.854) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 328.676 121.793) (end 323.088 121.793) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 302.133 112.903) (end 301.498 112.268) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 300.101 93.218) (end 300.355 92.964) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 319.659 76.6826) (end 319.8368 76.7588) (width 0.2032) (layer Composant) (net 351) (status 400))
+ (segment (start 300.101 93.853) (end 300.101 93.218) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 306.451 74.93) (end 307.848 74.93) (width 0.2032) (layer Composant) (net 351))
+ (via (at 300.101 93.853) (size 0.889) (layers Composant Cuivre) (net 351))
+ (segment (start 353.695 120.015) (end 351.409 120.015) (width 0.2032) (layer Cuivre) (net 351) (status 800))
+ (segment (start 328.93 121.539) (end 328.676 121.793) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 302.768 122.555) (end 303.022 122.809) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 312.674 75.438) (end 312.674 75.4126) (width 0.2032) (layer Composant) (net 351) (status 400))
+ (via (at 306.451 74.93) (size 0.889) (layers Composant Cuivre) (net 351))
+ (segment (start 316.611 75.4126) (end 317.881 76.6826) (width 0.2032) (layer Composant) (net 351))
+ (segment (start 348.742 122.682) (end 335.788 122.682) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 312.674 75.4126) (end 316.611 75.4126) (width 0.2032) (layer Composant) (net 351) (status 800))
+ (segment (start 318.262 122.809) (end 303.022 122.809) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 301.117 99.949) (end 299.593 98.425) (width 0.2032) (layer Composant) (net 351) (status 800))
+ (segment (start 322.834 122.047) (end 322.834 122.682) (width 0.2032) (layer Cuivre) (net 351))
+ (segment (start 300.863 92.456) (end 303.657 89.662) (width 0.2032) (layer Cuivre) (net 352))
+ (via (at 301.371 120.777) (size 0.889) (layers Composant Cuivre) (net 352))
+ (segment (start 312.293 120.142) (end 322.199 120.142) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 299.593 99.441) (end 299.593 101.219) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 349.758 115.951) (end 335.153 115.951) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 352.298 118.491) (end 349.758 115.951) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 334.645 116.459) (end 332.613 116.459) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 305.308 119.888) (end 312.039 119.888) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 312.039 119.888) (end 312.293 120.142) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 332.359 118.745) (end 332.105 118.999) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 332.359 116.713) (end 332.359 118.745) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 305.689 75.692) (end 307.467 75.692) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 305.308 75.311) (end 305.689 75.692) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 298.577 93.726) (end 298.577 92.837) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 332.105 118.999) (end 328.676 118.999) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 328.676 118.999) (end 328.422 119.253) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 328.422 119.253) (end 328.422 121.031) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 328.422 121.031) (end 328.168 121.285) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 328.168 121.285) (end 323.342 121.285) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 305.308 119.888) (end 304.419 120.777) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 298.577 97.409) (end 298.577 98.425) (width 0.2032) (layer Composant) (net 352) (status 800))
+ (segment (start 304.419 120.777) (end 301.371 120.777) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 298.577 98.425) (end 299.593 99.441) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 300.863 119.761) (end 301.371 120.269) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 299.593 101.219) (end 300.863 102.489) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 300.863 102.489) (end 300.863 119.761) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 356.235 120.015) (end 354.711 118.491) (width 0.2032) (layer Cuivre) (net 352) (status 800))
+ (segment (start 301.371 120.269) (end 301.371 120.777) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 298.577 97.409) (end 298.577 93.726) (width 0.2032) (layer Composant) (net 352) (status 800))
+ (segment (start 316.484 75.9206) (end 317.881 77.3176) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 322.199 120.142) (end 323.342 121.285) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 312.674 75.9206) (end 316.484 75.9206) (width 0.2032) (layer Composant) (net 352) (status 800))
+ (segment (start 317.881 77.3176) (end 319.659 77.3176) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 354.711 118.491) (end 352.298 118.491) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 312.674 75.946) (end 312.674 75.9206) (width 0.2032) (layer Composant) (net 352) (status 400))
+ (segment (start 307.721 75.946) (end 312.674 75.946) (width 0.2032) (layer Composant) (net 352))
+ (segment (start 307.467 75.692) (end 307.721 75.946) (width 0.2032) (layer Composant) (net 352))
+ (via (at 298.577 93.726) (size 0.889) (layers Composant Cuivre) (net 352))
+ (segment (start 303.657 79.375) (end 305.308 77.724) (width 0.2032) (layer Cuivre) (net 352))
+ (via (at 305.308 75.311) (size 0.889) (layers Composant Cuivre) (net 352))
+ (segment (start 303.657 89.662) (end 303.657 79.375) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 305.308 77.724) (end 305.308 75.311) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 319.659 77.3176) (end 319.8368 77.3938) (width 0.2032) (layer Composant) (net 352) (status 400))
+ (segment (start 298.577 92.837) (end 298.958 92.456) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 298.958 92.456) (end 300.863 92.456) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 335.153 115.951) (end 334.645 116.459) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 332.613 116.459) (end 332.359 116.713) (width 0.2032) (layer Cuivre) (net 352))
+ (segment (start 296.799 105.029) (end 296.037 105.029) (width 0.2032) (layer Composant) (net 353) (status 400))
+ (segment (start 296.799 117.729) (end 297.053 117.475) (width 0.2032) (layer Composant) (net 353))
+ (segment (start 297.053 117.475) (end 297.053 105.283) (width 0.2032) (layer Composant) (net 353))
+ (segment (start 296.037 117.729) (end 296.799 117.729) (width 0.2032) (layer Composant) (net 353) (status 800))
+ (segment (start 297.053 105.283) (end 296.799 105.029) (width 0.2032) (layer Composant) (net 353))
+ (segment (start 296.037 120.269) (end 294.64 120.269) (width 0.2032) (layer Composant) (net 354) (status 800))
+ (segment (start 294.386 120.015) (end 294.386 107.823) (width 0.2032) (layer Composant) (net 354))
+ (segment (start 294.386 107.823) (end 294.64 107.569) (width 0.2032) (layer Composant) (net 354))
+ (segment (start 294.64 107.569) (end 296.037 107.569) (width 0.2032) (layer Composant) (net 354) (status 400))
+ (segment (start 294.64 120.269) (end 294.386 120.015) (width 0.2032) (layer Composant) (net 354))
+ (segment (start 295.275 110.109) (end 295.021 110.363) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 295.021 110.363) (end 295.021 118.364) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 297.053 119.126) (end 297.053 122.555) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 296.799 122.809) (end 296.037 122.809) (width 0.2032) (layer Composant) (net 355) (status 400))
+ (segment (start 295.402 118.745) (end 295.021 118.364) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 296.037 110.109) (end 295.275 110.109) (width 0.2032) (layer Composant) (net 355) (status 800))
+ (segment (start 295.402 118.745) (end 296.672 118.745) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 297.053 122.555) (end 296.799 122.809) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 297.053 119.126) (end 296.672 118.745) (width 0.2032) (layer Composant) (net 355))
+ (segment (start 330.962 67.056) (end 330.962 69.215) (width 0.2032) (layer VCC_layer) (net 356))
+ (via (at 165.354 82.931) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 160.782 90.805) (end 159.766 91.821) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 159.766 91.821) (end 159.766 92.964) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 157.1752 93.0402) (end 159.004 93.0402) (width 0.2032) (layer Composant) (net 356) (status 800))
+ (segment (start 159.004 93.0402) (end 158.9278 92.964) (width 0.2032) (layer Composant) (net 356))
+ (segment (start 158.9278 92.964) (end 159.766 92.964) (width 0.2032) (layer Composant) (net 356))
+ (segment (start 328.168 67.437) (end 328.93 66.675) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 324.993 67.183) (end 325.247 67.437) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 160.782 85.979) (end 160.782 90.805) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 335.153 66.675) (end 334.899 66.421) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 325.755 63.373) (end 325.755 65.659) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 335.026 96.774) (end 335.026 96.393) (width 0.2032) (layer Composant) (net 356))
+ (segment (start 165.354 63.881) (end 165.354 82.931) (width 0.2032) (layer Composant) (net 356))
+ (segment (start 332.867 85.471) (end 335.153 83.185) (width 0.2032) (layer Cuivre) (net 356))
+ (via (at 333.756 62.992) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 333.756 66.167) (end 333.756 62.992) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 334.01 66.421) (end 333.756 66.167) (width 0.2032) (layer Cuivre) (net 356))
+ (via (at 165.354 63.881) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 333.502 90.043) (end 332.867 89.408) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 335.153 83.185) (end 335.153 66.675) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 308.229 63.373) (end 322.961 63.373) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 333.502 69.469) (end 333.756 69.215) (width 0.2032) (layer VCC_layer) (net 356))
+ (segment (start 324.993 66.421) (end 325.755 65.659) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 335.915 102.235) (end 335.915 97.663) (width 0.2032) (layer Composant) (net 356) (status 800))
+ (segment (start 325.247 67.437) (end 328.168 67.437) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 328.93 66.675) (end 330.581 66.675) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 330.962 69.215) (end 331.216 69.469) (width 0.2032) (layer VCC_layer) (net 356))
+ (segment (start 167.259 58.166) (end 167.259 61.976) (width 0.2032) (layer GND_layer) (net 356))
+ (via (at 330.581 66.675) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 324.993 66.421) (end 324.993 67.183) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 330.581 66.675) (end 330.962 67.056) (width 0.2032) (layer VCC_layer) (net 356))
+ (segment (start 307.4162 66.675) (end 307.4162 65.405) (width 0.2032) (layer Composant) (net 356) (status 800))
+ (segment (start 332.867 89.408) (end 332.867 85.471) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 334.899 66.421) (end 334.01 66.421) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 168.021 57.404) (end 167.259 58.166) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 167.259 61.976) (end 165.354 63.881) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 333.756 62.992) (end 333.756 58.547) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 336.042 91.694) (end 334.391 90.043) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 325.501 63.119) (end 325.755 63.373) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 333.756 69.215) (end 333.756 62.992) (width 0.2032) (layer VCC_layer) (net 356))
+ (segment (start 307.848 63.754) (end 308.229 63.373) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 335.026 95.631) (end 336.042 94.615) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 323.215 63.119) (end 325.501 63.119) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 336.042 94.615) (end 336.042 91.694) (width 0.2032) (layer Cuivre) (net 356))
+ (via (at 159.766 92.964) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 335.026 96.393) (end 335.026 95.631) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 334.391 90.043) (end 333.502 90.043) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 307.848 65.405) (end 307.848 63.754) (width 0.2032) (layer Composant) (net 356))
+ (segment (start 335.915 97.663) (end 335.026 96.774) (width 0.2032) (layer Composant) (net 356))
+ (segment (start 162.56 84.201) (end 160.782 85.979) (width 0.2032) (layer Cuivre) (net 356))
+ (via (at 335.026 96.393) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 164.084 84.201) (end 162.56 84.201) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 165.354 82.931) (end 164.084 84.201) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 299.72 57.023) (end 299.466 57.404) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 299.72 57.023) (end 332.232 57.023) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 299.466 57.404) (end 168.021 57.404) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 332.232 57.023) (end 333.756 58.547) (width 0.2032) (layer GND_layer) (net 356))
+ (segment (start 307.4162 65.405) (end 307.848 65.405) (width 0.2032) (layer Composant) (net 356))
+ (via (at 307.848 63.754) (size 0.889) (layers Composant Cuivre) (net 356))
+ (segment (start 322.961 63.373) (end 323.215 63.119) (width 0.2032) (layer Cuivre) (net 356))
+ (segment (start 331.216 69.469) (end 333.502 69.469) (width 0.2032) (layer VCC_layer) (net 356))
+ (segment (start 311.658 69.85) (end 311.404 70.104) (width 0.2032) (layer GND_layer) (net 357))
+ (segment (start 154.178 69.596) (end 154.051 69.469) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 299.593 69.596) (end 299.593 68.834) (width 0.2032) (layer Cuivre) (net 357))
+ (via (at 308.229 70.104) (size 0.889) (layers Composant Cuivre) (net 357))
+ (segment (start 307.213 69.85) (end 307.467 70.104) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 245.999 67.945) (end 258.318 67.945) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 307.467 70.104) (end 308.229 70.104) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 328.041 62.103) (end 328.295 62.357) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 145.034 69.469) (end 154.051 69.469) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 258.318 67.945) (end 258.699 68.326) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 299.593 68.834) (end 298.069 67.31) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 328.295 62.865) (end 328.295 62.357) (width 0.2032) (layer Cuivre) (net 357))
+ (via (at 328.295 62.865) (size 0.889) (layers Composant Cuivre) (net 357))
+ (segment (start 330.835 92.964) (end 328.295 90.424) (width 0.2032) (layer VCC_layer) (net 357))
+ (segment (start 330.835 104.775) (end 330.835 92.964) (width 0.2032) (layer VCC_layer) (net 357) (status 800))
+ (segment (start 328.295 90.424) (end 328.295 84.963) (width 0.2032) (layer VCC_layer) (net 357))
+ (via (at 328.295 84.963) (size 0.889) (layers Composant Cuivre) (net 357))
+ (segment (start 311.404 70.104) (end 308.229 70.104) (width 0.2032) (layer GND_layer) (net 357))
+ (segment (start 136.7028 69.85) (end 136.7028 72.5678) (width 0.2032) (layer Composant) (net 357) (status 400))
+ (segment (start 144.653 69.088) (end 145.034 69.469) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 138.303 69.088) (end 144.653 69.088) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 137.16 69.596) (end 137.16 69.342) (width 0.2032) (layer Composant) (net 357))
+ (via (at 137.16 69.342) (size 0.889) (layers Composant Cuivre) (net 357))
+ (segment (start 328.041 62.103) (end 312.547 62.103) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 328.295 84.963) (end 328.295 62.865) (width 0.2032) (layer Composant) (net 357))
+ (segment (start 258.699 68.326) (end 259.715 68.326) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 299.593 69.596) (end 299.847 69.85) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 311.658 62.992) (end 311.658 69.85) (width 0.2032) (layer GND_layer) (net 357))
+ (segment (start 259.715 68.326) (end 260.731 67.31) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 138.049 69.342) (end 138.303 69.088) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 160.401 69.596) (end 160.528 69.469) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 154.178 69.596) (end 160.401 69.596) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 312.547 62.103) (end 311.658 62.992) (width 0.2032) (layer GND_layer) (net 357))
+ (segment (start 299.847 69.85) (end 307.213 69.85) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 137.16 69.342) (end 138.049 69.342) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 160.528 69.469) (end 244.475 69.469) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 298.069 67.31) (end 260.731 67.31) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 136.906 69.85) (end 137.16 69.596) (width 0.2032) (layer Composant) (net 357))
+ (via (at 312.547 62.103) (size 0.889) (layers Composant Cuivre) (net 357))
+ (segment (start 244.475 69.469) (end 245.999 67.945) (width 0.2032) (layer Cuivre) (net 357))
+ (segment (start 136.7028 69.85) (end 136.906 69.85) (width 0.2032) (layer Composant) (net 357))
+ (segment (start 153.162 74.295) (end 152.019 73.152) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 145.415 73.152) (end 143.002 75.565) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 152.019 73.152) (end 145.415 73.152) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 137.414 74.803) (end 138.176 75.565) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 190.119 76.073) (end 187.325 76.073) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 137.3378 74.295) (end 137.414 74.295) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 138.176 75.565) (end 143.002 75.565) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 313.944 102.108) (end 314.198 102.362) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 312.293 102.108) (end 313.944 102.108) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 190.119 93.218) (end 189.484 92.583) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 319.405 104.14) (end 322.453 104.14) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 187.325 76.073) (end 186.69 75.438) (width 0.2032) (layer Cuivre) (net 358))
+ (via (at 137.414 74.803) (size 0.889) (layers Composant Cuivre) (net 358))
+ (segment (start 189.484 81.661) (end 190.119 81.026) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 190.119 84.074) (end 189.484 83.439) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 186.69 75.438) (end 164.084 75.438) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 189.484 90.551) (end 190.119 89.916) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 329.565 104.013) (end 323.342 104.013) (width 0.2032) (layer GND_layer) (net 358))
+ (segment (start 333.375 104.775) (end 332.359 103.759) (width 0.2032) (layer GND_layer) (net 358) (status 800))
+ (segment (start 314.198 102.616) (end 315.087 103.505) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 314.198 102.362) (end 314.198 102.616) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 190.5 97.536) (end 190.119 97.155) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 193.675 97.536) (end 190.5 97.536) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 307.213 101.473) (end 306.705 100.965) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 190.119 81.026) (end 190.119 76.073) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 190.119 97.155) (end 190.119 93.218) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 189.484 92.583) (end 189.484 90.551) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 217.932 97.409) (end 218.948 96.393) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 218.948 96.393) (end 239.141 96.393) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 239.141 96.393) (end 240.03 97.409) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 291.084 97.409) (end 240.03 97.409) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 311.658 101.473) (end 307.213 101.473) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 159.004 74.295) (end 159.258 74.041) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 312.293 102.108) (end 311.658 101.473) (width 0.2032) (layer Cuivre) (net 358))
+ (via (at 322.453 104.14) (size 0.889) (layers Composant Cuivre) (net 358))
+ (segment (start 162.687 74.041) (end 164.084 75.438) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 322.453 104.14) (end 323.215 104.14) (width 0.2032) (layer GND_layer) (net 358))
+ (segment (start 137.3378 72.5678) (end 137.3378 74.295) (width 0.2032) (layer Composant) (net 358) (status 800))
+ (segment (start 193.802 97.409) (end 193.675 97.536) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 190.119 89.916) (end 190.119 84.074) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 159.258 74.041) (end 162.687 74.041) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 189.484 83.439) (end 189.484 81.661) (width 0.2032) (layer Composant) (net 358))
+ (via (at 190.119 76.073) (size 0.889) (layers Composant Cuivre) (net 358))
+ (segment (start 217.932 97.409) (end 193.802 97.409) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 137.414 74.295) (end 137.414 74.803) (width 0.2032) (layer Composant) (net 358))
+ (segment (start 306.705 100.965) (end 294.64 100.965) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 332.359 103.759) (end 329.819 103.759) (width 0.2032) (layer GND_layer) (net 358))
+ (via (at 190.119 97.155) (size 0.889) (layers Composant Cuivre) (net 358))
+ (segment (start 323.342 104.013) (end 323.215 104.14) (width 0.2032) (layer GND_layer) (net 358))
+ (segment (start 294.64 100.965) (end 291.084 97.409) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 315.087 103.505) (end 318.77 103.505) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 153.162 74.295) (end 159.004 74.295) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 329.819 103.759) (end 329.565 104.013) (width 0.2032) (layer GND_layer) (net 358))
+ (segment (start 319.405 104.14) (end 318.77 103.505) (width 0.2032) (layer Cuivre) (net 358))
+ (segment (start 183.388 79.248) (end 184.15 80.01) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 319.532 110.617) (end 319.532 106.172) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 185.293 85.344) (end 185.293 105.41) (width 0.2032) (layer Composant) (net 359))
+ (via (at 185.293 105.41) (size 0.889) (layers Composant Cuivre) (net 359))
+ (segment (start 294.767 101.473) (end 306.451 101.473) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 272.415 103.378) (end 273.558 103.378) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 256.286 104.902) (end 257.302 103.886) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 184.15 84.201) (end 185.293 85.344) (width 0.2032) (layer Composant) (net 359))
+ (segment (start 260.477 103.124) (end 272.161 103.124) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 319.278 105.918) (end 319.532 106.172) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 312.293 102.743) (end 313.69 102.743) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 248.285 105.029) (end 248.666 105.41) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 257.302 103.886) (end 259.715 103.886) (width 0.2032) (layer Cuivre) (net 359))
+ (via (at 184.15 80.01) (size 0.889) (layers Composant Cuivre) (net 359))
+ (segment (start 185.293 105.41) (end 185.674 105.029) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 333.375 120.015) (end 331.851 118.491) (width 0.2032) (layer VCC_layer) (net 359) (status 800))
+ (segment (start 314.96 104.013) (end 318.516 104.013) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 322.199 112.395) (end 321.31 112.395) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 294.64 101.6) (end 294.767 101.473) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 289.052 101.6) (end 294.64 101.6) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 252.222 105.41) (end 252.73 104.902) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 275.082 101.854) (end 288.798 101.854) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 184.15 80.01) (end 184.15 84.201) (width 0.2032) (layer Composant) (net 359))
+ (segment (start 306.959 101.981) (end 311.531 101.981) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 98.552 80.518) (end 98.552 79.375) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 162.687 78.867) (end 163.322 79.502) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 163.322 79.502) (end 163.322 80.01) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 273.558 103.378) (end 275.082 101.854) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 319.278 105.156) (end 319.278 105.918) (width 0.2032) (layer VCC_layer) (net 359))
+ (via (at 319.278 105.156) (size 0.889) (layers Composant Cuivre) (net 359))
+ (segment (start 318.516 104.013) (end 319.278 104.775) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 137.16 78.613) (end 137.668 78.105) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 129.667 79.629) (end 131.699 79.629) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 126.492 79.121) (end 127.508 80.137) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 132.715 78.613) (end 137.16 78.613) (width 0.2032) (layer Cuivre) (net 359))
+ (via (at 98.552 80.518) (size 0.889) (layers Composant Cuivre) (net 359))
+ (segment (start 98.6282 78.867) (end 98.6282 80.264) (width 0.2032) (layer Composant) (net 359) (status 800))
+ (segment (start 131.699 79.629) (end 132.715 78.613) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 259.715 103.886) (end 260.477 103.124) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 313.69 102.743) (end 314.96 104.013) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 98.6282 80.264) (end 98.552 80.264) (width 0.2032) (layer Composant) (net 359))
+ (segment (start 129.159 80.137) (end 129.667 79.629) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 150.495 78.359) (end 154.813 78.359) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 98.806 79.121) (end 126.492 79.121) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 98.552 80.264) (end 98.552 80.518) (width 0.2032) (layer Composant) (net 359))
+ (segment (start 98.552 79.375) (end 98.806 79.121) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 137.668 78.105) (end 150.241 78.105) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 150.241 78.105) (end 150.495 78.359) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 164.973 80.264) (end 165.989 79.248) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 163.322 80.01) (end 163.576 80.264) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 163.576 80.264) (end 164.973 80.264) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 165.989 79.248) (end 183.388 79.248) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 252.73 104.902) (end 256.286 104.902) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 323.469 116.205) (end 322.453 115.189) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 322.453 115.189) (end 322.453 112.649) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 185.674 105.029) (end 248.285 105.029) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 331.851 118.491) (end 330.073 118.491) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 127.508 80.137) (end 129.159 80.137) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 311.531 101.981) (end 312.293 102.743) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 330.073 118.491) (end 327.787 116.205) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 327.787 116.205) (end 323.469 116.205) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 306.451 101.473) (end 306.959 101.981) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 322.453 112.649) (end 322.199 112.395) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 248.666 105.41) (end 252.222 105.41) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 321.31 112.395) (end 319.532 110.617) (width 0.2032) (layer VCC_layer) (net 359))
+ (segment (start 319.278 104.775) (end 319.278 105.156) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 155.321 78.867) (end 162.687 78.867) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 155.321 78.867) (end 154.813 78.359) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 288.798 101.854) (end 289.052 101.6) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 272.161 103.124) (end 272.415 103.378) (width 0.2032) (layer Cuivre) (net 359))
+ (segment (start 334.899 86.36) (end 334.899 67.945) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 336.931 97.536) (end 336.296 96.901) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 336.296 96.901) (end 336.296 96.393) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 334.899 89.916) (end 334.899 86.36) (width 0.2032) (layer Cuivre) (net 360))
+ (segment (start 334.899 123.571) (end 334.899 104.267) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 336.55 96.139) (end 336.55 91.567) (width 0.2032) (layer Cuivre) (net 360))
+ (segment (start 336.296 96.393) (end 336.55 96.139) (width 0.2032) (layer Cuivre) (net 360))
+ (segment (start 319.8368 67.31) (end 319.8368 67.0052) (width 0.2032) (layer Composant) (net 360) (status 400))
+ (via (at 334.899 86.36) (size 0.889) (layers Composant Cuivre) (net 360))
+ (segment (start 321.818 67.31) (end 322.707 68.199) (width 0.2032) (layer Cuivre) (net 360))
+ (segment (start 336.931 102.997) (end 336.931 97.536) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 329.311 67.691) (end 328.803 68.199) (width 0.2032) (layer Cuivre) (net 360))
+ (via (at 329.311 67.691) (size 0.889) (layers Composant Cuivre) (net 360))
+ (segment (start 336.423 103.505) (end 336.931 102.997) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 334.645 67.691) (end 334.899 67.945) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 335.661 103.505) (end 336.423 103.505) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 333.375 125.095) (end 334.899 123.571) (width 0.2032) (layer Composant) (net 360) (status 800))
+ (segment (start 322.707 68.199) (end 328.803 68.199) (width 0.2032) (layer Cuivre) (net 360))
+ (segment (start 321.818 67.31) (end 319.8368 67.31) (width 0.2032) (layer Composant) (net 360))
+ (via (at 321.818 67.31) (size 0.889) (layers Composant Cuivre) (net 360))
+ (via (at 336.296 96.393) (size 0.889) (layers Composant Cuivre) (net 360))
+ (segment (start 334.899 104.267) (end 335.661 103.505) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 329.311 67.691) (end 334.645 67.691) (width 0.2032) (layer Composant) (net 360))
+ (segment (start 336.55 91.567) (end 334.899 89.916) (width 0.2032) (layer Cuivre) (net 360))
+ (segment (start 319.8368 67.6402) (end 319.8368 67.31) (width 0.2032) (layer Composant) (net 360) (status 800))
+ (segment (start 326.39 57.023) (end 326.644 57.277) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 153.289 77.089) (end 153.797 76.581) (width 0.2032) (layer Composant) (net 361))
+ (via (at 155.448 71.501) (size 0.889) (layers Composant Cuivre) (net 361))
+ (via (at 153.289 82.296) (size 0.889) (layers Composant Cuivre) (net 361))
+ (segment (start 159.258 58.928) (end 161.163 57.023) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 161.163 57.023) (end 326.39 57.023) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 154.559 100.203) (end 154.305 99.949) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 154.305 99.949) (end 154.305 90.551) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 152.2984 103.759) (end 152.2984 101.346) (width 0.2032) (layer Composant) (net 361) (status 800))
+ (segment (start 152.527 101.346) (end 153.67 100.203) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 152.2984 101.346) (end 152.527 101.346) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 153.67 100.203) (end 154.559 100.203) (width 0.2032) (layer Composant) (net 361))
+ (via (at 154.559 100.203) (size 0.889) (layers Composant Cuivre) (net 361))
+ (segment (start 326.644 57.277) (end 326.644 60.833) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 155.448 71.501) (end 159.258 71.501) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 153.289 82.296) (end 153.289 77.089) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 153.797 76.581) (end 153.797 74.93) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 155.448 73.279) (end 155.448 71.501) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 326.644 60.833) (end 326.6694 60.833) (width 0.2032) (layer Composant) (net 361) (status 400))
+ (segment (start 156.21 82.296) (end 156.718 82.804) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 156.718 82.804) (end 156.718 88.138) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 156.718 88.138) (end 154.305 90.551) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 153.289 82.296) (end 156.21 82.296) (width 0.2032) (layer Cuivre) (net 361))
+ (segment (start 159.258 71.501) (end 159.258 58.928) (width 0.2032) (layer Composant) (net 361))
+ (via (at 159.258 71.501) (size 0.889) (layers Composant Cuivre) (net 361))
+ (segment (start 155.448 73.279) (end 153.797 74.93) (width 0.2032) (layer Composant) (net 361))
+ (segment (start 325.12 57.531) (end 325.374 57.785) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 155.067 74.93) (end 157.861 72.136) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 155.067 94.234) (end 155.067 90.805) (width 0.2032) (layer Cuivre) (net 362))
+ (segment (start 155.575 93.853) (end 155.194 94.234) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 157.1752 93.7006) (end 155.575 93.7006) (width 0.2032) (layer Composant) (net 362) (status 800))
+ (segment (start 155.575 93.7006) (end 155.575 93.853) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 155.194 94.234) (end 155.067 94.234) (width 0.2032) (layer Composant) (net 362))
+ (via (at 155.067 94.234) (size 0.889) (layers Composant Cuivre) (net 362))
+ (segment (start 157.861 72.136) (end 157.861 68.453) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 156.21 81.407) (end 157.226 82.423) (width 0.2032) (layer Cuivre) (net 362))
+ (segment (start 155.067 81.407) (end 156.21 81.407) (width 0.2032) (layer Cuivre) (net 362))
+ (segment (start 157.226 82.423) (end 157.226 88.646) (width 0.2032) (layer Cuivre) (net 362))
+ (segment (start 157.226 88.646) (end 155.067 90.805) (width 0.2032) (layer Cuivre) (net 362))
+ (via (at 160.782 68.072) (size 0.889) (layers Composant Cuivre) (net 362))
+ (segment (start 157.988 68.326) (end 157.861 68.453) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 325.374 57.785) (end 325.374 60.833) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 325.374 60.833) (end 325.3486 60.833) (width 0.2032) (layer Composant) (net 362) (status 400))
+ (segment (start 161.417 57.531) (end 325.12 57.531) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 157.988 68.326) (end 160.528 68.326) (width 0.2032) (layer Cuivre) (net 362))
+ (segment (start 155.067 81.407) (end 155.067 74.93) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 160.782 68.072) (end 160.782 58.166) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 160.782 58.166) (end 161.417 57.531) (width 0.2032) (layer Composant) (net 362))
+ (segment (start 160.528 68.326) (end 160.782 68.072) (width 0.2032) (layer Cuivre) (net 362))
+ (via (at 157.988 68.326) (size 0.889) (layers Composant Cuivre) (net 362))
+ (via (at 155.067 81.407) (size 0.889) (layers Composant Cuivre) (net 362))
+ (segment (start 332.232 63.119) (end 332.867 63.754) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 159.766 94.107) (end 160.655 93.218) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 160.02 99.441) (end 160.02 95.377) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 337.947 90.17) (end 337.693 90.424) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 337.947 87.503) (end 337.947 90.17) (width 0.2032) (layer Composant) (net 363))
+ (via (at 332.232 63.119) (size 0.889) (layers Composant Cuivre) (net 363))
+ (segment (start 160.655 93.218) (end 160.655 91.821) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 331.089 57.531) (end 332.232 58.674) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 300.609 57.531) (end 331.089 57.531) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 157.1752 99.5426) (end 159.258 99.5426) (width 0.2032) (layer Composant) (net 363) (status 800))
+ (segment (start 332.867 66.802) (end 333.121 67.056) (width 0.2032) (layer Composant) (net 363))
+ (via (at 166.624 63.881) (size 0.889) (layers Composant Cuivre) (net 363))
+ (segment (start 168.275 57.912) (end 300.228 57.912) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 166.624 83.312) (end 166.624 82.931) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 337.693 91.948) (end 337.7184 92.0242) (width 0.2032) (layer Composant) (net 363) (status 400))
+ (segment (start 300.228 57.912) (end 300.609 57.531) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 335.407 67.31) (end 335.407 84.963) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 159.766 95.123) (end 159.766 94.107) (width 0.2032) (layer Cuivre) (net 363))
+ (via (at 166.624 82.931) (size 0.889) (layers Composant Cuivre) (net 363))
+ (segment (start 166.624 63.881) (end 167.894 62.611) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 332.867 63.754) (end 332.867 66.802) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 332.232 63.119) (end 332.232 58.674) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 160.655 91.821) (end 161.544 90.932) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 335.153 67.056) (end 335.407 67.31) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 337.693 90.424) (end 337.693 91.948) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 167.894 58.293) (end 168.275 57.912) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 167.894 62.611) (end 167.894 58.293) (width 0.2032) (layer GND_layer) (net 363))
+ (segment (start 160.02 95.377) (end 159.766 95.123) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 333.121 67.056) (end 335.153 67.056) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 335.407 84.963) (end 337.947 87.503) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 161.544 90.932) (end 161.544 86.233) (width 0.2032) (layer Cuivre) (net 363))
+ (via (at 160.02 99.441) (size 0.889) (layers Composant Cuivre) (net 363))
+ (segment (start 165.1 84.836) (end 166.624 83.312) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 166.624 82.931) (end 166.624 63.881) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 159.258 99.5426) (end 159.258 99.441) (width 0.2032) (layer Composant) (net 363))
+ (segment (start 165.1 84.836) (end 162.941 84.836) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 162.941 84.836) (end 161.544 86.233) (width 0.2032) (layer Cuivre) (net 363))
+ (segment (start 159.258 99.441) (end 160.02 99.441) (width 0.2032) (layer Composant) (net 363))
+ (via (at 130.175 91.567) (size 0.889) (layers Composant Cuivre) (net 364))
+ (segment (start 119.888 90.4494) (end 121.6406 92.202) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 149.86 82.804) (end 136.525 82.804) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 124.206 92.4052) (end 124.206 92.202) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 125.984 92.4052) (end 124.206 92.4052) (width 0.2032) (layer Composant) (net 364) (status 800))
+ (segment (start 149.86 82.804) (end 152.273 85.217) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 152.908 112.268) (end 153.289 112.649) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 128.016 92.202) (end 129.032 91.186) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 128.016 92.4052) (end 128.016 92.202) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 124.206 92.202) (end 121.6406 92.202) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 154.305 129.7686) (end 154.305 129.54) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 152.908 108.585) (end 152.908 112.268) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 154.305 129.54) (end 157.48 126.365) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 152.273 107.95) (end 152.908 108.585) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 157.1752 129.7686) (end 154.305 129.7686) (width 0.2032) (layer Composant) (net 364) (status 800))
+ (segment (start 153.289 115.189) (end 157.48 119.38) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 129.794 91.186) (end 130.175 91.567) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 157.48 119.38) (end 157.48 126.365) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 136.525 82.804) (end 130.175 89.154) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 152.273 85.217) (end 152.273 107.95) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 125.984 92.4052) (end 128.016 92.4052) (width 0.2032) (layer Composant) (net 364) (status 800))
+ (segment (start 130.175 89.154) (end 130.175 91.567) (width 0.2032) (layer Cuivre) (net 364))
+ (segment (start 153.289 112.649) (end 153.289 115.189) (width 0.2032) (layer Cuivre) (net 364))
+ (via (at 154.305 129.54) (size 0.889) (layers Composant Cuivre) (net 364))
+ (segment (start 114.554 90.4494) (end 119.888 90.4494) (width 0.2032) (layer Composant) (net 364) (status 800))
+ (segment (start 129.032 91.186) (end 129.794 91.186) (width 0.2032) (layer Composant) (net 364))
+ (segment (start 125.984 91.7448) (end 124.333 91.7448) (width 0.2032) (layer Composant) (net 365) (status 800))
+ (segment (start 127.889 91.7448) (end 127.889 91.567) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 152.781 112.776) (end 152.781 115.443) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 152.4 108.839) (end 152.4 112.395) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 153.035 128.905) (end 153.4668 128.4732) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 156.845 125.095) (end 156.845 119.507) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 123.825 91.567) (end 123.952 91.694) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 149.733 83.312) (end 136.906 83.312) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 136.906 83.312) (end 131.826 88.392) (width 0.2032) (layer Cuivre) (net 365))
+ (via (at 131.826 91.313) (size 0.889) (layers Composant Cuivre) (net 365))
+ (segment (start 151.765 85.344) (end 151.765 108.204) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 124.333 91.7448) (end 124.333 91.694) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 124.333 91.694) (end 123.952 91.694) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 131.191 90.678) (end 128.778 90.678) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 119.888 89.789) (end 121.666 91.567) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 131.826 88.392) (end 131.826 91.313) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 121.666 91.567) (end 123.825 91.567) (width 0.2032) (layer Composant) (net 365))
+ (via (at 153.035 128.905) (size 0.889) (layers Composant Cuivre) (net 365))
+ (segment (start 127.889 91.567) (end 128.778 90.678) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 151.765 108.204) (end 152.4 108.839) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 157.1752 128.4732) (end 153.4668 128.4732) (width 0.2032) (layer Composant) (net 365) (status 800))
+ (segment (start 114.554 89.789) (end 119.888 89.789) (width 0.2032) (layer Composant) (net 365) (status 800))
+ (segment (start 149.733 83.312) (end 151.765 85.344) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 152.4 112.395) (end 152.781 112.776) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 152.781 115.443) (end 156.845 119.507) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 127.889 91.7448) (end 125.984 91.7448) (width 0.2032) (layer Composant) (net 365) (status 400))
+ (segment (start 131.826 91.313) (end 131.191 90.678) (width 0.2032) (layer Composant) (net 365))
+ (segment (start 153.035 128.905) (end 156.845 125.095) (width 0.2032) (layer Cuivre) (net 365))
+ (segment (start 151.257 108.458) (end 151.257 85.471) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 132.715 88.519) (end 132.715 90.551) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 132.08 90.17) (end 132.461 90.551) (width 0.2032) (layer Composant) (net 366))
+ (segment (start 151.765 128.27) (end 156.21 123.825) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 151.765 128.27) (end 152.2222 127.8128) (width 0.2032) (layer Composant) (net 366))
+ (via (at 151.765 128.27) (size 0.889) (layers Composant Cuivre) (net 366))
+ (segment (start 119.888 89.154) (end 121.793 91.0844) (width 0.2032) (layer Composant) (net 366))
+ (segment (start 152.273 115.697) (end 156.21 119.634) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 121.793 91.0844) (end 125.984 91.0844) (width 0.2032) (layer Composant) (net 366) (status 400))
+ (via (at 132.715 90.551) (size 0.889) (layers Composant Cuivre) (net 366))
+ (segment (start 127.762 90.805) (end 128.397 90.17) (width 0.2032) (layer Composant) (net 366))
+ (segment (start 156.21 123.825) (end 156.21 119.634) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 128.397 90.17) (end 132.08 90.17) (width 0.2032) (layer Composant) (net 366))
+ (segment (start 152.273 115.697) (end 152.273 112.903) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 132.461 90.551) (end 132.715 90.551) (width 0.2032) (layer Composant) (net 366))
+ (segment (start 125.984 91.0844) (end 127.762 91.0844) (width 0.2032) (layer Composant) (net 366) (status 800))
+ (segment (start 151.892 112.522) (end 151.892 109.093) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 152.273 112.903) (end 151.892 112.522) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 137.414 83.82) (end 132.715 88.519) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 114.554 89.154) (end 119.888 89.154) (width 0.2032) (layer Composant) (net 366) (status 800))
+ (segment (start 157.1752 127.8128) (end 152.2222 127.8128) (width 0.2032) (layer Composant) (net 366) (status 800))
+ (segment (start 151.257 85.471) (end 149.606 83.82) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 127.762 91.0844) (end 127.762 90.805) (width 0.2032) (layer Composant) (net 366))
+ (segment (start 137.414 83.82) (end 149.606 83.82) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 151.892 109.093) (end 151.257 108.458) (width 0.2032) (layer Cuivre) (net 366))
+ (segment (start 148.209 109.22) (end 148.209 87.249) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 149.225 113.792) (end 148.844 113.411) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 157.1752 127.1778) (end 153.035 127.1778) (width 0.2032) (layer Composant) (net 367) (status 800))
+ (segment (start 149.225 123.3678) (end 149.225 120.015) (width 0.2032) (layer Composant) (net 367))
+ (via (at 149.225 120.015) (size 0.889) (layers Composant Cuivre) (net 367))
+ (segment (start 153.035 127.1778) (end 149.225 123.3678) (width 0.2032) (layer Composant) (net 367))
+ (segment (start 114.554 85.9028) (end 118.999 85.9028) (width 0.2032) (layer Composant) (net 367) (status 800))
+ (segment (start 147.828 86.868) (end 148.209 87.249) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 137.16 88.138) (end 129.159 88.138) (width 0.2032) (layer Composant) (net 367))
+ (segment (start 146.177 86.868) (end 147.828 86.868) (width 0.2032) (layer Cuivre) (net 367))
+ (via (at 137.16 88.138) (size 0.889) (layers Composant Cuivre) (net 367))
+ (segment (start 148.844 109.855) (end 148.844 113.411) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 144.907 88.138) (end 137.16 88.138) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 149.225 113.792) (end 149.225 120.015) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 121.666 87.63) (end 121.666 87.8332) (width 0.2032) (layer Composant) (net 367))
+ (segment (start 125.984 87.8332) (end 121.666 87.8332) (width 0.2032) (layer Composant) (net 367) (status 800))
+ (segment (start 118.999 85.9028) (end 120.7262 87.63) (width 0.2032) (layer Composant) (net 367))
+ (segment (start 148.209 109.22) (end 148.844 109.855) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 146.177 86.868) (end 144.907 88.138) (width 0.2032) (layer Cuivre) (net 367))
+ (segment (start 129.159 88.138) (end 129.159 87.8332) (width 0.2032) (layer Composant) (net 367))
+ (segment (start 125.984 87.8332) (end 129.159 87.8332) (width 0.2032) (layer Composant) (net 367) (status 800))
+ (segment (start 120.7262 87.63) (end 121.666 87.63) (width 0.2032) (layer Composant) (net 367))
+ (via (at 150.495 120.015) (size 0.889) (layers Composant Cuivre) (net 368))
+ (segment (start 121.793 87.122) (end 121.793 87.1982) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 129.667 87.63) (end 136.017 87.63) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 149.733 113.665) (end 149.352 113.284) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 149.733 119.253) (end 149.733 113.665) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 157.1752 125.857) (end 153.035 125.857) (width 0.2032) (layer Composant) (net 368) (status 800))
+ (segment (start 129.54 87.503) (end 129.667 87.63) (width 0.2032) (layer Composant) (net 368))
+ (via (at 138.049 87.249) (size 0.889) (layers Composant Cuivre) (net 368))
+ (segment (start 150.495 123.317) (end 150.495 120.015) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 150.495 120.015) (end 149.733 119.253) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 148.717 87.122) (end 147.955 86.36) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 148.717 109.093) (end 149.352 109.728) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 145.796 86.36) (end 144.526 87.63) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 114.554 85.2424) (end 119.126 85.2424) (width 0.2032) (layer Composant) (net 368) (status 800))
+ (segment (start 121.0056 87.122) (end 121.793 87.122) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 125.984 87.1982) (end 121.793 87.1982) (width 0.2032) (layer Composant) (net 368) (status 800))
+ (segment (start 153.035 125.857) (end 150.495 123.317) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 125.984 87.1982) (end 129.54 87.1982) (width 0.2032) (layer Composant) (net 368) (status 800))
+ (segment (start 144.526 87.63) (end 138.43 87.63) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 119.126 85.2424) (end 121.0056 87.122) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 129.54 87.1982) (end 129.54 87.503) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 138.43 87.63) (end 138.049 87.249) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 136.398 87.249) (end 138.049 87.249) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 147.955 86.36) (end 145.796 86.36) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 136.017 87.63) (end 136.398 87.249) (width 0.2032) (layer Composant) (net 368))
+ (segment (start 148.717 87.122) (end 148.717 109.093) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 149.352 109.728) (end 149.352 113.284) (width 0.2032) (layer Cuivre) (net 368))
+ (segment (start 150.876 119.126) (end 150.495 119.126) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 153.67 125.222) (end 151.765 123.317) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 125.984 86.5378) (end 129.794 86.5378) (width 0.2032) (layer Composant) (net 369) (status 800))
+ (segment (start 149.86 109.601) (end 149.225 108.966) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 144.399 87.122) (end 145.669 85.852) (width 0.2032) (layer Cuivre) (net 369))
+ (via (at 139.446 86.741) (size 0.889) (layers Composant Cuivre) (net 369))
+ (segment (start 145.669 85.852) (end 148.209 85.852) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 135.636 87.122) (end 136.271 86.487) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 139.446 86.741) (end 139.827 87.122) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 149.225 108.966) (end 149.225 86.868) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 148.209 85.852) (end 149.225 86.868) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 114.554 84.582) (end 119.253 84.582) (width 0.2032) (layer Composant) (net 369) (status 800))
+ (segment (start 150.241 113.411) (end 149.86 113.03) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 150.495 119.126) (end 150.241 118.872) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 150.241 118.872) (end 150.241 113.411) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 139.827 87.122) (end 144.399 87.122) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 129.794 86.5378) (end 130.048 86.7918) (width 0.2032) (layer Composant) (net 369))
+ (via (at 151.765 120.015) (size 0.889) (layers Composant Cuivre) (net 369))
+ (segment (start 149.86 113.03) (end 149.86 109.601) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 119.253 84.582) (end 121.158 86.5378) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 130.048 87.122) (end 135.636 87.122) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 151.765 120.015) (end 150.876 119.126) (width 0.2032) (layer Cuivre) (net 369))
+ (segment (start 151.765 123.317) (end 151.765 120.015) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 138.938 86.741) (end 139.446 86.741) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 121.158 86.5378) (end 125.984 86.5378) (width 0.2032) (layer Composant) (net 369) (status 400))
+ (segment (start 138.684 86.487) (end 138.938 86.741) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 136.271 86.487) (end 138.684 86.487) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 130.048 86.7918) (end 130.048 87.122) (width 0.2032) (layer Composant) (net 369))
+ (segment (start 157.1752 125.222) (end 153.67 125.222) (width 0.2032) (layer Composant) (net 369) (status 800))
+ (segment (start 135.128 86.487) (end 135.636 85.979) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 140.462 85.979) (end 141.097 86.614) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 130.429 85.9028) (end 130.429 86.233) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 145.415 85.344) (end 148.463 85.344) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 141.097 86.614) (end 144.145 86.614) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 150.368 112.903) (end 150.749 113.284) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 123.1392 85.471) (end 121.285 85.471) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 151.638 119.126) (end 152.146 119.126) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 125.984 85.9028) (end 123.571 85.9028) (width 0.2032) (layer Composant) (net 370) (status 800))
+ (segment (start 144.145 86.614) (end 145.415 85.344) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 150.749 113.284) (end 150.749 118.618) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 153.035 123.2916) (end 153.035 120.015) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 154.305 124.5616) (end 153.035 123.2916) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 153.035 120.015) (end 152.146 119.126) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 149.733 108.839) (end 150.368 109.474) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 123.571 85.9028) (end 123.1392 85.471) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 157.1752 124.5616) (end 154.305 124.5616) (width 0.2032) (layer Composant) (net 370) (status 800))
+ (segment (start 151.13 118.618) (end 151.638 119.126) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 116.332 81.9912) (end 116.4082 81.915) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 125.984 85.9028) (end 130.429 85.9028) (width 0.2032) (layer Composant) (net 370) (status 800))
+ (via (at 121.285 81.661) (size 0.889) (layers Composant Cuivre) (net 370))
+ (segment (start 121.285 85.471) (end 121.285 81.661) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 150.368 109.474) (end 150.368 112.903) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 149.733 86.614) (end 149.733 108.839) (width 0.2032) (layer Cuivre) (net 370))
+ (via (at 140.462 85.979) (size 0.889) (layers Composant Cuivre) (net 370))
+ (segment (start 135.636 85.979) (end 140.462 85.979) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 130.429 86.233) (end 130.683 86.487) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 130.683 86.487) (end 135.128 86.487) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 148.463 85.344) (end 149.733 86.614) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 151.13 118.618) (end 150.749 118.618) (width 0.2032) (layer Cuivre) (net 370))
+ (segment (start 114.554 81.9912) (end 116.332 81.9912) (width 0.2032) (layer Composant) (net 370) (status 800))
+ (segment (start 121.285 81.661) (end 121.031 81.661) (width 0.2032) (layer Composant) (net 370))
+ (via (at 121.285 85.471) (size 0.889) (layers Composant Cuivre) (net 370))
+ (via (at 153.035 120.015) (size 0.889) (layers Composant Cuivre) (net 370))
+ (segment (start 116.4082 81.915) (end 120.777 81.915) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 120.777 81.915) (end 121.031 81.661) (width 0.2032) (layer Composant) (net 370))
+ (segment (start 121.285 105.918) (end 122.555 107.188) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 122.682 98.044) (end 122.682 97.282) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 123.444 96.9518) (end 123.444 97.282) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 116.078 92.6592) (end 116.078 96.012) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 121.793 98.933) (end 121.793 100.711) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 125.984 117.4242) (end 123.825 117.4242) (width 0.2032) (layer Composant) (net 371) (status 800))
+ (segment (start 122.555 116.1542) (end 122.555 107.188) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 121.92 98.044) (end 122.682 97.282) (width 0.2032) (layer Cuivre) (net 371))
+ (segment (start 121.285 101.219) (end 121.285 105.918) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 123.444 96.9518) (end 125.984 96.9518) (width 0.2032) (layer Composant) (net 371) (status 400))
+ (segment (start 115.697 96.393) (end 115.697 97.282) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 122.682 97.282) (end 123.444 97.282) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 115.824 92.4052) (end 116.078 92.6592) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 121.793 98.933) (end 122.682 98.044) (width 0.2032) (layer Composant) (net 371))
+ (via (at 115.697 97.282) (size 0.889) (layers Composant Cuivre) (net 371))
+ (segment (start 121.793 100.711) (end 121.285 101.219) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 116.078 96.012) (end 115.697 96.393) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 115.697 97.282) (end 116.459 98.044) (width 0.2032) (layer Cuivre) (net 371))
+ (via (at 122.682 97.282) (size 0.889) (layers Composant Cuivre) (net 371))
+ (segment (start 123.825 117.4242) (end 122.555 116.1542) (width 0.2032) (layer Composant) (net 371))
+ (segment (start 116.459 98.044) (end 121.92 98.044) (width 0.2032) (layer Cuivre) (net 371))
+ (segment (start 114.554 92.4052) (end 115.824 92.4052) (width 0.2032) (layer Composant) (net 371) (status 800))
+ (segment (start 120.269 96.52) (end 123.0884 93.7006) (width 0.2032) (layer Composant) (net 372))
+ (segment (start 120.269 116.459) (end 120.269 96.52) (width 0.2032) (layer Composant) (net 372))
+ (segment (start 123.0884 93.7006) (end 125.984 93.7006) (width 0.2032) (layer Composant) (net 372) (status 400))
+ (segment (start 125.984 118.7196) (end 122.5296 118.7196) (width 0.2032) (layer Composant) (net 372) (status 800))
+ (segment (start 120.269 116.459) (end 122.5296 118.7196) (width 0.2032) (layer Composant) (net 372))
+ (segment (start 146.812 117.602) (end 149.987 117.602) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 149.479 84.328) (end 150.749 85.598) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 152.273 116.332) (end 152.019 116.332) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 151.765 113.03) (end 151.765 116.078) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 155.575 123.19) (end 155.575 119.634) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 133.985 89.662) (end 133.985 88.138) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 149.987 117.602) (end 150.3426 117.2464) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 151.384 109.22) (end 151.384 112.649) (width 0.2032) (layer Cuivre) (net 373))
+ (via (at 133.985 89.662) (size 0.889) (layers Composant Cuivre) (net 373))
+ (segment (start 146.177 125.222) (end 146.177 118.237) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 116.84 88.4936) (end 116.84 88.646) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 150.749 85.598) (end 150.749 108.585) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 151.384 112.649) (end 151.765 113.03) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 127.508 90.297) (end 128.143 89.662) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 152.4 126.365) (end 147.32 126.365) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 146.812 117.602) (end 146.177 118.237) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 152.019 116.332) (end 151.765 116.078) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 150.749 108.585) (end 151.384 109.22) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 128.143 89.662) (end 133.985 89.662) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 114.554 88.4936) (end 116.84 88.4936) (width 0.2032) (layer Composant) (net 373) (status 800))
+ (segment (start 120.015 88.646) (end 121.793 90.4494) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 149.479 84.328) (end 137.795 84.328) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 152.273 116.332) (end 155.575 119.634) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 125.984 90.4494) (end 127.508 90.4494) (width 0.2032) (layer Composant) (net 373) (status 800))
+ (segment (start 127.508 90.4494) (end 127.508 90.297) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 133.985 88.138) (end 137.795 84.328) (width 0.2032) (layer Cuivre) (net 373))
+ (via (at 147.32 126.365) (size 0.889) (layers Composant Cuivre) (net 373))
+ (segment (start 155.575 123.19) (end 152.4 126.365) (width 0.2032) (layer Cuivre) (net 373))
+ (segment (start 116.84 88.646) (end 120.015 88.646) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 150.3426 113.8428) (end 150.3426 117.2464) (width 0.2032) (layer Composant) (net 373) (status 800))
+ (segment (start 125.984 90.4494) (end 121.793 90.4494) (width 0.2032) (layer Composant) (net 373) (status 800))
+ (segment (start 147.32 126.365) (end 146.177 125.222) (width 0.2032) (layer Composant) (net 373))
+ (segment (start 137.9982 113.8428) (end 137.9982 103.759) (width 0.2032) (layer Composant) (net 374) (status C00))
+ (segment (start 106.045 108.585) (end 106.045 103.505) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 135.89 105.283) (end 135.89 106.045) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 135.255 109.855) (end 131.572 113.538) (width 0.2032) (layer Cuivre) (net 375))
+ (segment (start 135.255 109.855) (end 134.62 109.22) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 135.255 109.855) (end 136.7028 111.3028) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 134.62 109.22) (end 134.62 106.426) (width 0.2032) (layer Composant) (net 375))
+ (via (at 135.255 109.855) (size 0.889) (layers Composant Cuivre) (net 375))
+ (segment (start 106.045 103.505) (end 104.013 101.473) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 135.001 106.045) (end 135.89 106.045) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 134.62 106.426) (end 135.001 106.045) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 104.013 96.139) (end 104.013 101.473) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 110.998 113.538) (end 106.045 108.585) (width 0.2032) (layer Cuivre) (net 375))
+ (segment (start 103.8352 96.139) (end 104.013 96.139) (width 0.2032) (layer Composant) (net 375))
+ (via (at 106.045 108.585) (size 0.889) (layers Composant Cuivre) (net 375))
+ (segment (start 131.572 113.538) (end 110.998 113.538) (width 0.2032) (layer Cuivre) (net 375))
+ (segment (start 136.0424 105.283) (end 135.89 105.283) (width 0.2032) (layer Composant) (net 375))
+ (segment (start 136.0424 103.759) (end 136.0424 105.283) (width 0.2032) (layer Composant) (net 375) (status 800))
+ (segment (start 136.7028 111.3028) (end 136.7028 113.8428) (width 0.2032) (layer Composant) (net 375) (status 400))
+ (segment (start 103.8352 94.869) (end 103.8352 96.139) (width 0.2032) (layer Composant) (net 375) (status 800))
+ (segment (start 132.715 109.855) (end 129.54 113.03) (width 0.2032) (layer Cuivre) (net 376))
+ (segment (start 111.76 113.03) (end 129.54 113.03) (width 0.2032) (layer Cuivre) (net 376))
+ (segment (start 131.4958 103.759) (end 131.4958 108.6358) (width 0.2032) (layer Composant) (net 376) (status 800))
+ (segment (start 111.76 113.03) (end 107.315 108.585) (width 0.2032) (layer Cuivre) (net 376))
+ (segment (start 134.0866 111.2266) (end 134.0866 113.8428) (width 0.2032) (layer Composant) (net 376) (status 400))
+ (segment (start 107.315 108.585) (end 107.315 103.505) (width 0.2032) (layer Composant) (net 376))
+ (segment (start 107.315 103.505) (end 104.4956 100.6856) (width 0.2032) (layer Composant) (net 376))
+ (segment (start 132.715 109.855) (end 134.0866 111.2266) (width 0.2032) (layer Composant) (net 376))
+ (via (at 107.315 108.585) (size 0.889) (layers Composant Cuivre) (net 376))
+ (via (at 132.715 109.855) (size 0.889) (layers Composant Cuivre) (net 376))
+ (segment (start 104.4956 100.6856) (end 104.4956 94.869) (width 0.2032) (layer Composant) (net 376) (status 400))
+ (segment (start 132.715 109.855) (end 131.4958 108.6358) (width 0.2032) (layer Composant) (net 376))
+ (segment (start 127.635 109.855) (end 128.524 110.744) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 123.825 103.505) (end 123.825 99.822) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 127.635 107.315) (end 123.825 103.505) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 123.825 99.822) (end 124.1044 99.5426) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 127.635 109.855) (end 127.635 108.585) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 131.4958 113.8428) (end 131.4958 112.0648) (width 0.2032) (layer Composant) (net 377) (status 800))
+ (segment (start 111.125 103.505) (end 111.125 108.585) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 124.1044 99.5426) (end 125.984 99.5426) (width 0.2032) (layer Composant) (net 377) (status 400))
+ (segment (start 124.714 111.506) (end 114.046 111.506) (width 0.2032) (layer Cuivre) (net 377))
+ (via (at 127.635 108.585) (size 0.889) (layers Composant Cuivre) (net 377))
+ (segment (start 114.046 111.506) (end 111.125 108.585) (width 0.2032) (layer Cuivre) (net 377))
+ (via (at 111.125 108.585) (size 0.889) (layers Composant Cuivre) (net 377))
+ (segment (start 130.175 110.744) (end 131.4958 112.0648) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 130.175 110.744) (end 128.524 110.744) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 127.635 108.585) (end 124.714 111.506) (width 0.2032) (layer Cuivre) (net 377))
+ (segment (start 111.125 103.505) (end 106.426 98.806) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 106.426 94.869) (end 106.426 98.806) (width 0.2032) (layer Composant) (net 377) (status 800))
+ (segment (start 127.635 108.585) (end 127.635 107.315) (width 0.2032) (layer Composant) (net 377))
+ (segment (start 129.54 113.8428) (end 129.54 111.9632) (width 0.2032) (layer Composant) (net 378) (status 800))
+ (segment (start 122.936 99.18192) (end 123.825 98.2472) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 113.665 108.585) (end 115.57 110.49) (width 0.2032) (layer Cuivre) (net 378))
+ (via (at 125.095 108.585) (size 0.889) (layers Composant Cuivre) (net 378))
+ (segment (start 123.19 110.49) (end 115.57 110.49) (width 0.2032) (layer Cuivre) (net 378))
+ (segment (start 129.3368 111.76) (end 127 111.76) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 107.7468 94.869) (end 107.7468 98.171) (width 0.2032) (layer Composant) (net 378) (status 800))
+ (segment (start 125.095 108.585) (end 125.095 107.315) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 123.825 98.2472) (end 125.984 98.2472) (width 0.2032) (layer Composant) (net 378) (status 400))
+ (via (at 113.665 108.585) (size 0.889) (layers Composant Cuivre) (net 378))
+ (segment (start 127 111.76) (end 125.095 109.855) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 122.809 99.314) (end 122.936 99.18192) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 125.095 109.855) (end 125.095 108.585) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 129.3368 111.76) (end 129.54 111.9632) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 107.7468 98.171) (end 113.665 104.0892) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 125.095 107.315) (end 122.809 105.029) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 113.665 108.585) (end 113.665 104.0892) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 122.809 105.029) (end 122.809 99.314) (width 0.2032) (layer Composant) (net 378))
+ (segment (start 125.095 108.585) (end 123.19 110.49) (width 0.2032) (layer Cuivre) (net 378))
+ (segment (start 116.84 103.124) (end 115.57 103.124) (width 0.2032) (layer Cuivre) (net 379))
+ (segment (start 122.301 105.791) (end 122.301 102.87) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 122.047 102.87) (end 117.094 102.87) (width 0.2032) (layer Cuivre) (net 379))
+ (segment (start 122.301 99.06) (end 123.571 97.79) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 114.935 102.489) (end 115.57 103.124) (width 0.2032) (layer Cuivre) (net 379))
+ (segment (start 123.825 110.49) (end 127 113.665) (width 0.2032) (layer Composant) (net 379))
+ (via (at 122.047 102.87) (size 0.889) (layers Composant Cuivre) (net 379))
+ (segment (start 123.825 110.49) (end 123.825 107.315) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 128.905 113.8428) (end 128.905 113.665) (width 0.2032) (layer Composant) (net 379) (status 800))
+ (segment (start 123.571 97.79) (end 124.333 97.79) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 113.284 102.489) (end 114.935 102.489) (width 0.2032) (layer Cuivre) (net 379))
+ (segment (start 122.301 102.87) (end 122.301 99.06) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 108.458 98.171) (end 108.458 94.869) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 122.301 102.87) (end 122.047 102.87) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 117.094 102.87) (end 116.84 103.124) (width 0.2032) (layer Cuivre) (net 379))
+ (segment (start 124.333 97.79) (end 124.333 97.5868) (width 0.2032) (layer Composant) (net 379))
+ (via (at 113.284 102.489) (size 0.889) (layers Composant Cuivre) (net 379))
+ (segment (start 112.776 102.489) (end 113.284 102.489) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 124.333 97.5868) (end 125.984 97.5868) (width 0.2032) (layer Composant) (net 379) (status 400))
+ (segment (start 128.905 113.665) (end 127 113.665) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 108.458 94.869) (end 108.3818 94.869) (width 0.2032) (layer Composant) (net 379) (status 400))
+ (segment (start 108.458 98.171) (end 112.776 102.489) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 123.825 107.315) (end 122.301 105.791) (width 0.2032) (layer Composant) (net 379))
+ (segment (start 226.06 74.295) (end 226.06 65.405) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 180.467 106.299) (end 180.213 106.045) (width 0.2032) (layer Cuivre) (net 380))
+ (via (at 175.387 106.045) (size 0.889) (layers Composant Cuivre) (net 380))
+ (segment (start 226.06 100.965) (end 226.06 92.075) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 226.06 83.185) (end 226.06 92.075) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 226.06 109.855) (end 226.06 118.745) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 180.467 109.347) (end 180.467 106.299) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 226.06 83.185) (end 226.06 74.295) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 225.044 108.839) (end 186.563 108.839) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 174.879 105.537) (end 174.879 94.742) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 226.06 109.855) (end 225.044 108.839) (width 0.2032) (layer Cuivre) (net 380) (status 800))
+ (segment (start 226.06 109.855) (end 226.06 100.965) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 185.801 109.601) (end 180.721 109.601) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 163.322 89.662) (end 164.592 88.392) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 157.1752 89.789) (end 159.258 89.789) (width 0.2032) (layer Composant) (net 380) (status 800))
+ (segment (start 159.258 89.662) (end 163.322 89.662) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 226.06 127.635) (end 226.06 118.745) (width 0.2032) (layer Composant) (net 380) (status C00))
+ (segment (start 180.721 109.601) (end 180.467 109.347) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 186.563 108.839) (end 185.801 109.601) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 174.244 94.107) (end 170.18 94.107) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 170.18 94.107) (end 170.18 89.662) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 174.879 94.742) (end 174.244 94.107) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 166.37 88.392) (end 167.64 89.662) (width 0.2032) (layer Composant) (net 380))
+ (via (at 170.18 89.662) (size 0.889) (layers Composant Cuivre) (net 380))
+ (via (at 170.18 94.107) (size 0.889) (layers Composant Cuivre) (net 380))
+ (segment (start 175.387 106.045) (end 174.879 105.537) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 180.213 106.045) (end 175.387 106.045) (width 0.2032) (layer Cuivre) (net 380))
+ (segment (start 164.592 88.392) (end 166.37 88.392) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 159.258 89.789) (end 159.258 89.662) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 167.64 89.662) (end 170.18 89.662) (width 0.2032) (layer Composant) (net 380))
+ (segment (start 166.624 89.154) (end 166.624 94.615) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 159.131 85.852) (end 162.941 85.852) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 166.497 97.917) (end 167.259 97.155) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 222.25 123.825) (end 183.769 123.825) (width 0.2032) (layer Cuivre) (net 381))
+ (via (at 168.021 86.868) (size 0.889) (layers Composant Cuivre) (net 381))
+ (segment (start 167.259 111.125) (end 167.005 110.871) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 168.021 87.757) (end 166.624 89.154) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 167.005 106.934) (end 166.624 106.553) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 222.25 123.825) (end 239.776 123.825) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 166.624 101.727) (end 166.878 101.473) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 240.03 124.079) (end 240.03 125.095) (width 0.2032) (layer Cuivre) (net 381) (status 400))
+ (segment (start 166.878 101.473) (end 166.878 99.187) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 168.021 86.868) (end 168.021 87.757) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 157.1752 85.9028) (end 159.131 85.9028) (width 0.2032) (layer Composant) (net 381) (status 800))
+ (via (at 167.259 97.155) (size 0.889) (layers Composant Cuivre) (net 381))
+ (segment (start 166.878 99.187) (end 166.497 98.806) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 173.355 127.889) (end 168.402 127.889) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 166.497 98.806) (end 166.497 97.917) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 167.259 115.062) (end 167.259 111.125) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 168.402 127.889) (end 167.386 126.873) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 163.957 86.868) (end 168.021 86.868) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 167.386 126.873) (end 167.386 115.189) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 183.769 123.825) (end 182.88 124.714) (width 0.2032) (layer Cuivre) (net 381))
+ (via (at 182.88 124.714) (size 0.889) (layers Composant Cuivre) (net 381))
+ (segment (start 180.594 124.714) (end 180.086 124.206) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 182.88 124.714) (end 180.594 124.714) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 167.259 97.155) (end 166.37 96.266) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 166.624 94.615) (end 166.37 94.869) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 166.37 94.869) (end 166.37 96.266) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 167.386 115.189) (end 167.259 115.062) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 162.941 85.852) (end 163.957 86.868) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 222.25 123.825) (end 222.25 125.095) (width 0.2032) (layer Cuivre) (net 381) (status 400))
+ (segment (start 159.131 85.9028) (end 159.131 85.852) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 167.005 110.871) (end 167.005 106.934) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 180.086 124.206) (end 177.038 124.206) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 239.776 123.825) (end 240.03 124.079) (width 0.2032) (layer Cuivre) (net 381))
+ (segment (start 177.038 124.206) (end 173.355 127.889) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 166.624 106.553) (end 166.624 101.727) (width 0.2032) (layer Composant) (net 381))
+ (segment (start 169.164 85.217) (end 168.91 84.963) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 222.25 116.205) (end 220.98 114.935) (width 0.2032) (layer Cuivre) (net 382) (status 800))
+ (segment (start 168.91 84.963) (end 159.385 84.963) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 222.25 116.205) (end 223.52 114.935) (width 0.2032) (layer Cuivre) (net 382) (status 800))
+ (segment (start 239.395 116.205) (end 240.03 116.205) (width 0.2032) (layer Cuivre) (net 382) (status 400))
+ (segment (start 169.418 86.995) (end 169.164 86.741) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 157.1752 85.2424) (end 159.385 85.2424) (width 0.2032) (layer Composant) (net 382) (status 800))
+ (segment (start 181.991 89.408) (end 179.578 86.995) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 220.98 114.935) (end 182.372 114.935) (width 0.2032) (layer Cuivre) (net 382))
+ (segment (start 159.385 85.2424) (end 159.385 84.963) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 169.164 86.741) (end 169.164 85.217) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 179.578 86.995) (end 169.418 86.995) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 238.125 114.935) (end 239.395 116.205) (width 0.2032) (layer Cuivre) (net 382))
+ (segment (start 223.52 114.935) (end 238.125 114.935) (width 0.2032) (layer Cuivre) (net 382))
+ (via (at 181.991 115.316) (size 0.889) (layers Composant Cuivre) (net 382))
+ (segment (start 181.991 115.316) (end 181.991 89.408) (width 0.2032) (layer Composant) (net 382))
+ (segment (start 182.372 114.935) (end 181.991 115.316) (width 0.2032) (layer Cuivre) (net 382))
+ (segment (start 222.25 97.155) (end 222.25 98.425) (width 0.2032) (layer Composant) (net 383) (status 400))
+ (segment (start 221.361 90.424) (end 222.377 91.44) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 175.768 85.598) (end 199.517 85.598) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 222.25 98.425) (end 223.774 96.901) (width 0.2032) (layer Cuivre) (net 383) (status 800))
+ (segment (start 170.561 85.598) (end 170.307 85.344) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 220.345 84.582) (end 220.599 84.836) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 157.1752 83.947) (end 169.291 83.947) (width 0.2032) (layer Composant) (net 383) (status 800))
+ (via (at 221.107 84.836) (size 0.889) (layers Composant Cuivre) (net 383))
+ (segment (start 221.107 84.836) (end 220.599 84.836) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 200.025 85.09) (end 213.36 85.09) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 240.03 98.425) (end 238.506 96.901) (width 0.2032) (layer Cuivre) (net 383) (status 800))
+ (segment (start 170.307 84.963) (end 169.291 83.947) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 238.506 96.901) (end 223.774 96.901) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 222.377 97.155) (end 222.25 97.155) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 199.517 85.598) (end 200.025 85.09) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 222.377 97.155) (end 222.377 91.44) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 221.107 84.836) (end 221.361 85.09) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 170.307 85.344) (end 170.307 84.963) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 213.36 85.09) (end 213.868 84.582) (width 0.2032) (layer Cuivre) (net 383))
+ (segment (start 221.361 85.09) (end 221.361 90.424) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 175.768 85.598) (end 170.561 85.598) (width 0.2032) (layer Composant) (net 383))
+ (segment (start 213.868 84.582) (end 220.345 84.582) (width 0.2032) (layer Cuivre) (net 383))
+ (via (at 175.768 85.598) (size 0.889) (layers Composant Cuivre) (net 383))
+ (segment (start 161.29 80.772) (end 161.29 81.153) (width 0.2032) (layer Composant) (net 384))
+ (segment (start 159.893 82.55) (end 161.29 81.153) (width 0.2032) (layer Composant) (net 384))
+ (segment (start 240.03 79.502) (end 222.25 79.502) (width 0.2032) (layer Cuivre) (net 384))
+ (segment (start 184.531 78.613) (end 207.264 78.613) (width 0.2032) (layer Cuivre) (net 384))
+ (segment (start 222.25 80.645) (end 222.25 79.502) (width 0.2032) (layer Cuivre) (net 384) (status 800))
+ (segment (start 183.896 77.978) (end 184.531 78.613) (width 0.2032) (layer Cuivre) (net 384))
+ (segment (start 240.03 80.645) (end 240.03 79.502) (width 0.2032) (layer Cuivre) (net 384) (status 800))
+ (segment (start 159.893 82.55) (end 157.353 82.55) (width 0.2032) (layer Composant) (net 384))
+ (segment (start 208.153 79.502) (end 222.25 79.502) (width 0.2032) (layer Cuivre) (net 384))
+ (segment (start 161.29 80.772) (end 163.703 78.359) (width 0.2032) (layer Composant) (net 384))
+ (segment (start 163.703 78.359) (end 164.211 78.359) (width 0.2032) (layer Composant) (net 384))
+ (segment (start 164.592 77.978) (end 183.896 77.978) (width 0.2032) (layer Cuivre) (net 384))
+ (segment (start 157.353 82.55) (end 157.1752 82.6516) (width 0.2032) (layer Composant) (net 384) (status 400))
+ (segment (start 207.264 78.613) (end 208.153 79.502) (width 0.2032) (layer Cuivre) (net 384))
+ (via (at 164.211 78.359) (size 0.889) (layers Composant Cuivre) (net 384))
+ (segment (start 164.211 78.359) (end 164.592 77.978) (width 0.2032) (layer Cuivre) (net 384))
+ (segment (start 238.887 70.612) (end 224.028 70.612) (width 0.2032) (layer Cuivre) (net 385))
+ (segment (start 224.028 70.612) (end 222.885 71.755) (width 0.2032) (layer Cuivre) (net 385))
+ (segment (start 160.782 79.248) (end 160.147 79.883) (width 0.2032) (layer Composant) (net 385))
+ (segment (start 222.885 71.755) (end 222.25 71.755) (width 0.2032) (layer Cuivre) (net 385) (status 400))
+ (segment (start 221.361 70.866) (end 164.592 70.866) (width 0.2032) (layer Cuivre) (net 385))
+ (segment (start 157.1752 80.0354) (end 158.75 80.0354) (width 0.2032) (layer Composant) (net 385) (status 800))
+ (segment (start 158.75 80.0354) (end 158.75 79.883) (width 0.2032) (layer Composant) (net 385))
+ (segment (start 164.592 76.581) (end 161.925 79.248) (width 0.2032) (layer Composant) (net 385))
+ (segment (start 164.592 70.866) (end 164.592 76.581) (width 0.2032) (layer Composant) (net 385))
+ (segment (start 161.925 79.248) (end 160.782 79.248) (width 0.2032) (layer Composant) (net 385))
+ (segment (start 222.25 71.755) (end 221.361 70.866) (width 0.2032) (layer Cuivre) (net 385) (status 800))
+ (segment (start 240.03 71.755) (end 238.887 70.612) (width 0.2032) (layer Cuivre) (net 385) (status 800))
+ (segment (start 160.147 79.883) (end 158.75 79.883) (width 0.2032) (layer Composant) (net 385))
+ (via (at 164.592 70.866) (size 0.889) (layers Composant Cuivre) (net 385))
+ (segment (start 160.02 79.4004) (end 160.6804 78.74) (width 0.2032) (layer Composant) (net 386))
+ (segment (start 164.211 64.897) (end 163.703 65.405) (width 0.2032) (layer Composant) (net 386))
+ (segment (start 221.996 61.976) (end 222.25 62.23) (width 0.2032) (layer Cuivre) (net 386))
+ (segment (start 222.25 62.23) (end 222.25 62.865) (width 0.2032) (layer Cuivre) (net 386) (status 400))
+ (segment (start 176.403 61.976) (end 221.996 61.976) (width 0.2032) (layer Cuivre) (net 386))
+ (segment (start 161.544 78.74) (end 163.703 76.581) (width 0.2032) (layer Composant) (net 386))
+ (segment (start 164.211 64.897) (end 173.482 64.897) (width 0.2032) (layer Cuivre) (net 386))
+ (segment (start 163.703 76.581) (end 163.703 65.405) (width 0.2032) (layer Composant) (net 386))
+ (segment (start 238.506 61.976) (end 223.139 61.976) (width 0.2032) (layer Cuivre) (net 386))
+ (segment (start 160.6804 78.74) (end 161.544 78.74) (width 0.2032) (layer Composant) (net 386))
+ (segment (start 176.403 61.976) (end 173.482 64.897) (width 0.2032) (layer Cuivre) (net 386))
+ (segment (start 238.506 61.976) (end 239.395 62.865) (width 0.2032) (layer Cuivre) (net 386))
+ (segment (start 157.1752 79.4004) (end 160.02 79.4004) (width 0.2032) (layer Composant) (net 386) (status 800))
+ (segment (start 239.395 62.865) (end 240.03 62.865) (width 0.2032) (layer Cuivre) (net 386) (status 400))
+ (segment (start 222.25 62.865) (end 223.139 61.976) (width 0.2032) (layer Cuivre) (net 386) (status 800))
+ (via (at 164.211 64.897) (size 0.889) (layers Composant Cuivre) (net 386))
+ (segment (start 67.691 73.66) (end 67.691 78.359) (width 0.2032) (layer Composant) (net 387))
+ (segment (start 68.199 78.867) (end 68.199 80.264) (width 0.2032) (layer Composant) (net 387) (status 400))
+ (segment (start 68.326 73.025) (end 67.691 73.66) (width 0.2032) (layer Composant) (net 387))
+ (segment (start 67.691 78.359) (end 68.199 78.867) (width 0.2032) (layer Composant) (net 387))
+ (segment (start 70.485 73.025) (end 68.326 73.025) (width 0.2032) (layer Composant) (net 387) (status 800))
+ (segment (start 154.178 95.6564) (end 154.178 88.9) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 304.8 64.897) (end 304.419 65.278) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 304.419 65.278) (end 294.767 65.278) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 304.927 64.897) (end 304.927 66.675) (width 0.2032) (layer Composant) (net 388) (status 400))
+ (segment (start 269.24 64.008) (end 269.24 60.706) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 154.813 96.2914) (end 154.178 95.6564) (width 0.2032) (layer Composant) (net 388))
+ (via (at 304.927 64.897) (size 0.889) (layers Composant Cuivre) (net 388))
+ (segment (start 156.845 68.707) (end 156.845 68.326) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 156.972 62.738) (end 163.703 62.738) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 156.718 62.992) (end 156.972 62.738) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 156.845 68.326) (end 156.845 67.818) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 269.494 64.262) (end 269.24 64.008) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 294.767 65.278) (end 291.719 62.23) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 167.005 59.436) (end 163.703 62.738) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 304.8 64.897) (end 304.927 64.897) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 269.24 60.706) (end 267.97 59.436) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 154.305 82.677) (end 154.305 75.057) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 288.29 64.262) (end 288.036 64.516) (width 0.2032) (layer Cuivre) (net 388))
+ (via (at 269.24 60.706) (size 0.889) (layers Composant Cuivre) (net 388))
+ (segment (start 156.21 69.342) (end 156.845 68.707) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 157.1752 96.2914) (end 154.813 96.2914) (width 0.2032) (layer Composant) (net 388) (status 800))
+ (segment (start 156.21 73.152) (end 156.21 69.342) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 284.099 64.516) (end 283.845 64.262) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 288.29 62.992) (end 288.29 64.262) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 289.052 62.23) (end 288.29 62.992) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 291.719 62.23) (end 289.052 62.23) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 156.718 67.691) (end 156.718 62.992) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 283.845 64.262) (end 269.494 64.262) (width 0.2032) (layer Cuivre) (net 388))
+ (via (at 156.845 68.326) (size 0.889) (layers Composant Cuivre) (net 388))
+ (segment (start 156.845 67.818) (end 156.718 67.691) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 154.305 75.057) (end 156.21 73.152) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 267.97 59.436) (end 167.005 59.436) (width 0.2032) (layer VCC_layer) (net 388))
+ (segment (start 288.036 64.516) (end 284.099 64.516) (width 0.2032) (layer Cuivre) (net 388))
+ (segment (start 153.797 83.185) (end 154.305 82.677) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 153.797 88.519) (end 153.797 83.185) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 154.178 88.9) (end 153.797 88.519) (width 0.2032) (layer Composant) (net 388))
+ (segment (start 161.036 76.962) (end 161.036 75.438) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 293.116 82.296) (end 293.116 83.82) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 96.139 82.042) (end 96.139 80.01) (width 0.2032) (layer Cuivre) (net 389))
+ (via (at 96.139 82.042) (size 0.889) (layers Composant Cuivre) (net 389))
+ (segment (start 144.018 77.089) (end 145.288 75.819) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 92.456 81.9912) (end 94.742 81.9912) (width 0.2032) (layer Composant) (net 389) (status 800))
+ (segment (start 160.782 77.216) (end 161.036 76.962) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 155.321 76.454) (end 156.083 77.216) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 161.036 75.438) (end 157.226 75.438) (width 0.2032) (layer Composant) (net 389))
+ (via (at 185.293 76.708) (size 0.889) (layers Composant Cuivre) (net 389))
+ (segment (start 145.288 75.819) (end 152.019 75.819) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 199.009 83.82) (end 199.009 82.55) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 132.08 77.597) (end 131.064 78.613) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 131.064 78.613) (end 97.536 78.613) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 94.869 82.042) (end 96.139 82.042) (width 0.2032) (layer Composant) (net 389))
+ (segment (start 96.139 80.01) (end 97.536 78.613) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 94.742 81.9912) (end 94.869 82.042) (width 0.2032) (layer Composant) (net 389))
+ (segment (start 294.132 81.28) (end 293.116 82.296) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 137.033 77.089) (end 144.018 77.089) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 156.083 77.216) (end 160.782 77.216) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 186.436 83.439) (end 187.579 82.296) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 185.293 83.439) (end 186.436 83.439) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 292.1 84.836) (end 287.401 84.836) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 198.755 82.296) (end 187.579 82.296) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 199.009 82.55) (end 198.755 82.296) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 152.654 76.454) (end 155.321 76.454) (width 0.2032) (layer Cuivre) (net 389))
+ (via (at 185.293 83.439) (size 0.889) (layers Composant Cuivre) (net 389))
+ (segment (start 136.525 77.597) (end 132.08 77.597) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 184.785 76.708) (end 185.293 76.708) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 157.1752 75.4888) (end 157.226 75.438) (width 0.2032) (layer Composant) (net 389) (status 800))
+ (segment (start 185.293 76.708) (end 185.293 83.439) (width 0.2032) (layer Composant) (net 389))
+ (segment (start 162.179 75.438) (end 161.036 75.438) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 199.263 84.074) (end 199.009 83.82) (width 0.2032) (layer Cuivre) (net 389))
+ (via (at 295.6814 81.28) (size 0.889) (layers Composant Cuivre) (net 389))
+ (segment (start 287.401 84.836) (end 287.147 84.582) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 253.238 84.074) (end 199.263 84.074) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 296.545 80.4164) (end 295.6814 81.28) (width 0.2032) (layer Composant) (net 389))
+ (segment (start 293.116 83.82) (end 292.1 84.836) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 136.525 77.597) (end 137.033 77.089) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 297.18 80.4164) (end 296.545 80.4164) (width 0.2032) (layer Composant) (net 389) (status 800))
+ (segment (start 295.6814 81.28) (end 294.132 81.28) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 287.147 84.582) (end 253.746 84.582) (width 0.2032) (layer Cuivre) (net 389))
+ (via (at 161.036 75.438) (size 0.889) (layers Composant Cuivre) (net 389))
+ (segment (start 253.746 84.582) (end 253.238 84.074) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 152.019 75.819) (end 152.654 76.454) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 184.785 76.708) (end 184.531 76.454) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 184.531 76.454) (end 163.195 76.454) (width 0.2032) (layer Cuivre) (net 389))
+ (segment (start 163.195 76.454) (end 162.179 75.438) (width 0.2032) (layer Cuivre) (net 389))
+
+ (zone (net 247) (net_name VCC) (layer VCC_layer) (tstamp 4777D45C) (hatch edge 0.508)
+ (connect_pads (clearance 0.4))
+ (min_thickness 0.25)
+ (fill yes (arc_segments 16) (thermal_gap 0.4) (thermal_bridge_width 0.3))
+ (polygon
+ (pts
+ (xy 185.674 154.305) (xy 194.818 145.542) (xy 204.851 145.542) (xy 204.851 134.493) (xy 364.236 134.366)
+ (xy 364.236 56.515) (xy 91.313 56.515) (xy 91.313 73.406) (xy 81.20126 73.406) (xy 79.756 74.8411)
+ (xy 79.756 76.073) (xy 53.69306 76.073) (xy 53.594 153.797)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 326.6524 65.803621) (xy 326.516977 65.938808) (xy 326.431895 65.853577) (xy 326.075692 65.705668) (xy 325.690001 65.705332)
+ (xy 325.4926 65.786896) (xy 325.4926 65.387378) (xy 325.687423 65.192895) (xy 325.835332 64.836692) (xy 325.835668 64.451001)
+ (xy 325.688382 64.09454) (xy 325.415895 63.821577) (xy 325.059692 63.673668) (xy 324.674001 63.673332) (xy 324.31754 63.820618)
+ (xy 324.044577 64.093105) (xy 323.896668 64.449308) (xy 323.896332 64.834999) (xy 324.043618 65.19146) (xy 324.2394 65.387584)
+ (xy 324.2394 66.929) (xy 324.287097 67.16879) (xy 324.422927 67.372073) (xy 325.0014 67.950546) (xy 325.0014 69.036198)
+ (xy 324.932692 69.007668) (xy 324.547001 69.007332) (xy 324.19054 69.154618) (xy 323.917577 69.427105) (xy 323.769668 69.783308)
+ (xy 323.769332 70.168999) (xy 323.916618 70.52546) (xy 324.189105 70.798423) (xy 324.2849 70.8382) (xy 324.044577 71.078105)
+ (xy 323.896668 71.434308) (xy 323.896332 71.819999) (xy 324.043618 72.17646) (xy 324.193418 72.326522) (xy 324.044577 72.475105)
+ (xy 323.896668 72.831308) (xy 323.896332 73.216999) (xy 324.043618 73.57346) (xy 324.316105 73.846423) (xy 324.672308 73.994332)
+ (xy 325.0014 73.994618) (xy 325.0014 82.821621) (xy 324.806577 83.016105) (xy 324.658668 83.372308) (xy 324.658332 83.757999)
+ (xy 324.805618 84.11446) (xy 325.0014 84.310584) (xy 325.0014 87.751454) (xy 324.860454 87.8924) (xy 323.930668 87.8924)
+ (xy 323.930668 79.818001) (xy 323.930668 74.992001) (xy 323.783382 74.63554) (xy 323.510895 74.362577) (xy 323.154692 74.214668)
+ (xy 322.769001 74.214332) (xy 322.41254 74.361618) (xy 322.139577 74.634105) (xy 321.991668 74.990308) (xy 321.991332 75.375999)
+ (xy 322.138618 75.73246) (xy 322.411105 76.005423) (xy 322.767308 76.153332) (xy 323.152999 76.153668) (xy 323.50946 76.006382)
+ (xy 323.782423 75.733895) (xy 323.930332 75.377692) (xy 323.930668 74.992001) (xy 323.930668 79.818001) (xy 323.783382 79.46154)
+ (xy 323.510895 79.188577) (xy 323.154692 79.040668) (xy 322.769001 79.040332) (xy 322.41254 79.187618) (xy 322.139577 79.460105)
+ (xy 321.991668 79.816308) (xy 321.991332 80.201999) (xy 322.138618 80.55846) (xy 322.411105 80.831423) (xy 322.767308 80.979332)
+ (xy 323.152999 80.979668) (xy 323.50946 80.832382) (xy 323.782423 80.559895) (xy 323.930332 80.203692) (xy 323.930668 79.818001)
+ (xy 323.930668 87.8924) (xy 323.803668 87.8924) (xy 323.803668 85.533001) (xy 323.656382 85.17654) (xy 323.383895 84.903577)
+ (xy 323.027692 84.755668) (xy 322.642001 84.755332) (xy 322.28554 84.902618) (xy 322.012577 85.175105) (xy 321.864668 85.531308)
+ (xy 321.864332 85.916999) (xy 322.011618 86.27346) (xy 322.284105 86.546423) (xy 322.640308 86.694332) (xy 323.025999 86.694668)
+ (xy 323.38246 86.547382) (xy 323.655423 86.274895) (xy 323.803332 85.918692) (xy 323.803668 85.533001) (xy 323.803668 87.8924)
+ (xy 322.943378 87.8924) (xy 322.748895 87.697577) (xy 322.392692 87.549668) (xy 322.007001 87.549332) (xy 321.65054 87.696618)
+ (xy 321.377577 87.969105) (xy 321.3016 88.152077) (xy 321.3016 71.339532) (xy 321.522105 71.560423) (xy 321.878308 71.708332)
+ (xy 322.263999 71.708668) (xy 322.62046 71.561382) (xy 322.893423 71.288895) (xy 323.041332 70.932692) (xy 323.041668 70.547001)
+ (xy 322.894382 70.19054) (xy 322.621895 69.917577) (xy 322.265692 69.769668) (xy 321.880001 69.769332) (xy 321.52354 69.916618)
+ (xy 321.3016 70.13817) (xy 321.3016 68.145331) (xy 321.624308 68.279332) (xy 322.009999 68.279668) (xy 322.36646 68.132382)
+ (xy 322.639423 67.859895) (xy 322.787332 67.503692) (xy 322.787668 67.118001) (xy 322.640382 66.76154) (xy 322.454515 66.575348)
+ (xy 322.62046 66.506782) (xy 322.893423 66.234295) (xy 323.041332 65.878092) (xy 323.041668 65.492401) (xy 322.894382 65.13594)
+ (xy 322.79538 65.036766) (xy 322.893423 64.938895) (xy 323.041332 64.582692) (xy 323.041668 64.197001) (xy 322.894382 63.84054)
+ (xy 322.621895 63.567577) (xy 322.265692 63.419668) (xy 321.880001 63.419332) (xy 321.52354 63.566618) (xy 321.3016 63.78817)
+ (xy 321.3016 62.489546) (xy 321.880073 61.911073) (xy 322.015903 61.70779) (xy 322.015903 61.707789) (xy 322.0636 61.468)
+ (xy 322.0636 60.071) (xy 322.054369 60.024596) (xy 322.136999 60.024668) (xy 322.49346 59.877382) (xy 322.689584 59.6816)
+ (xy 325.114454 59.6816) (xy 326.6524 61.219546) (xy 326.6524 65.803621)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 364.111 133.7394) (xy 362.7925 133.7394) (xy 362.7925 87.289929) (xy 362.7925 87.081071) (xy 362.7925 86.64325)
+ (xy 362.7925 86.33075) (xy 362.7925 85.892929) (xy 362.7925 85.684071) (xy 362.712574 85.491111) (xy 362.692463 85.471)
+ (xy 362.712574 85.450889) (xy 362.7925 85.257929) (xy 362.7925 85.049071) (xy 362.7925 83.652071) (xy 362.712574 83.459111)
+ (xy 362.564889 83.311426) (xy 362.371929 83.2315) (xy 362.163071 83.2315) (xy 360.766071 83.2315) (xy 360.573111 83.311426)
+ (xy 360.425426 83.459111) (xy 360.3455 83.652071) (xy 360.3455 83.860929) (xy 360.3455 85.257929) (xy 360.425426 85.450889)
+ (xy 360.445537 85.471) (xy 360.425426 85.491111) (xy 360.3455 85.684071) (xy 360.3455 85.892929) (xy 360.3455 86.33075)
+ (xy 360.47675 86.462) (xy 361.544 86.462) (xy 361.544 86.442) (xy 361.594 86.442) (xy 361.594 86.462)
+ (xy 362.66125 86.462) (xy 362.7925 86.33075) (xy 362.7925 86.64325) (xy 362.66125 86.512) (xy 361.594 86.512)
+ (xy 361.594 87.57925) (xy 361.72525 87.7105) (xy 362.371929 87.7105) (xy 362.564889 87.630574) (xy 362.712574 87.482889)
+ (xy 362.7925 87.289929) (xy 362.7925 133.7394) (xy 361.544 133.7394) (xy 361.544 87.57925) (xy 361.544 86.512)
+ (xy 360.47675 86.512) (xy 360.3455 86.64325) (xy 360.3455 87.081071) (xy 360.3455 87.289929) (xy 360.425426 87.482889)
+ (xy 360.573111 87.630574) (xy 360.766071 87.7105) (xy 361.41275 87.7105) (xy 361.544 87.57925) (xy 361.544 133.7394)
+ (xy 360.553 133.7394) (xy 360.379668 133.7394) (xy 360.379668 130.618001) (xy 360.232382 130.26154) (xy 359.959895 129.988577)
+ (xy 359.617668 129.846471) (xy 359.617668 77.913001) (xy 359.470382 77.55654) (xy 359.197895 77.283577) (xy 359.109668 77.246941)
+ (xy 359.109668 72.833001) (xy 358.982668 72.525636) (xy 358.982668 63.435001) (xy 358.835382 63.07854) (xy 358.562895 62.805577)
+ (xy 358.206692 62.657668) (xy 357.821001 62.657332) (xy 357.46454 62.804618) (xy 357.191577 63.077105) (xy 357.043668 63.433308)
+ (xy 357.043332 63.818999) (xy 357.190618 64.17546) (xy 357.463105 64.448423) (xy 357.819308 64.596332) (xy 358.204999 64.596668)
+ (xy 358.56146 64.449382) (xy 358.834423 64.176895) (xy 358.982332 63.820692) (xy 358.982668 63.435001) (xy 358.982668 72.525636)
+ (xy 358.962382 72.47654) (xy 358.689895 72.203577) (xy 358.333692 72.055668) (xy 357.948001 72.055332) (xy 357.59154 72.202618)
+ (xy 357.318577 72.475105) (xy 357.170668 72.831308) (xy 357.170332 73.216999) (xy 357.317618 73.57346) (xy 357.590105 73.846423)
+ (xy 357.946308 73.994332) (xy 358.331999 73.994668) (xy 358.68846 73.847382) (xy 358.961423 73.574895) (xy 359.109332 73.218692)
+ (xy 359.109668 72.833001) (xy 359.109668 77.246941) (xy 358.841692 77.135668) (xy 358.456001 77.135332) (xy 358.09954 77.282618)
+ (xy 357.826577 77.555105) (xy 357.678668 77.911308) (xy 357.678332 78.296999) (xy 357.825618 78.65346) (xy 358.098105 78.926423)
+ (xy 358.454308 79.074332) (xy 358.839999 79.074668) (xy 359.19646 78.927382) (xy 359.469423 78.654895) (xy 359.617332 78.298692)
+ (xy 359.617668 77.913001) (xy 359.617668 129.846471) (xy 359.603692 129.840668) (xy 359.218001 129.840332) (xy 359.046245 129.911299)
+ (xy 359.046245 96.747972) (xy 359.046245 91.667972) (xy 358.83143 91.14808) (xy 358.434013 90.749968) (xy 357.914496 90.534246)
+ (xy 357.351972 90.533755) (xy 357.077668 90.647095) (xy 357.077668 80.961001) (xy 356.930382 80.60454) (xy 356.657895 80.331577)
+ (xy 356.301692 80.183668) (xy 355.916001 80.183332) (xy 355.55954 80.330618) (xy 355.426668 80.463258) (xy 355.426668 63.562001)
+ (xy 355.279382 63.20554) (xy 355.006895 62.932577) (xy 354.650692 62.784668) (xy 354.265001 62.784332) (xy 353.90854 62.931618)
+ (xy 353.635577 63.204105) (xy 353.487668 63.560308) (xy 353.487332 63.945999) (xy 353.634618 64.30246) (xy 353.907105 64.575423)
+ (xy 354.263308 64.723332) (xy 354.648999 64.723668) (xy 355.00546 64.576382) (xy 355.278423 64.303895) (xy 355.426332 63.947692)
+ (xy 355.426668 63.562001) (xy 355.426668 80.463258) (xy 355.286577 80.603105) (xy 355.138668 80.959308) (xy 355.138332 81.344999)
+ (xy 355.285618 81.70146) (xy 355.558105 81.974423) (xy 355.914308 82.122332) (xy 356.299999 82.122668) (xy 356.65646 81.975382)
+ (xy 356.929423 81.702895) (xy 357.077332 81.346692) (xy 357.077668 80.961001) (xy 357.077668 90.647095) (xy 356.83208 90.74857)
+ (xy 356.433968 91.145987) (xy 356.218246 91.665504) (xy 356.217755 92.228028) (xy 356.43257 92.74792) (xy 356.829987 93.146032)
+ (xy 357.349504 93.361754) (xy 357.912028 93.362245) (xy 358.43192 93.14743) (xy 358.830032 92.750013) (xy 359.045754 92.230496)
+ (xy 359.046245 91.667972) (xy 359.046245 96.747972) (xy 358.83143 96.22808) (xy 358.434013 95.829968) (xy 357.914496 95.614246)
+ (xy 357.351972 95.613755) (xy 356.83208 95.82857) (xy 356.433968 96.225987) (xy 356.218246 96.745504) (xy 356.217755 97.308028)
+ (xy 356.43257 97.82792) (xy 356.829987 98.226032) (xy 357.349504 98.441754) (xy 357.912028 98.442245) (xy 358.43192 98.22743)
+ (xy 358.830032 97.830013) (xy 359.045754 97.310496) (xy 359.046245 96.747972) (xy 359.046245 129.911299) (xy 358.982668 129.937569)
+ (xy 358.982668 127.443001) (xy 358.835382 127.08654) (xy 358.562895 126.813577) (xy 358.206692 126.665668) (xy 357.821001 126.665332)
+ (xy 357.46454 126.812618) (xy 357.458712 126.818435) (xy 357.458712 124.852698) (xy 357.458712 122.312698) (xy 357.458712 119.772698)
+ (xy 357.458712 117.232698) (xy 357.458712 114.692698) (xy 357.458712 112.152698) (xy 357.458712 109.612698) (xy 357.458712 107.072698)
+ (xy 357.458712 104.532698) (xy 357.272838 104.082848) (xy 356.928962 103.738372) (xy 356.479437 103.551713) (xy 355.992698 103.551288)
+ (xy 355.542848 103.737162) (xy 355.198372 104.081038) (xy 355.172712 104.142834) (xy 355.172712 86.244698) (xy 354.986838 85.794848)
+ (xy 354.663291 85.470737) (xy 354.985628 85.148962) (xy 355.172287 84.699437) (xy 355.172712 84.212698) (xy 354.986838 83.762848)
+ (xy 354.642962 83.418372) (xy 354.193437 83.231713) (xy 354.111922 83.231641) (xy 354.156332 83.124692) (xy 354.156668 82.739001)
+ (xy 354.009382 82.38254) (xy 353.8136 82.186415) (xy 353.8136 76.182378) (xy 353.965173 76.031068) (xy 353.965174 76.031068)
+ (xy 354.036389 76.016903) (xy 354.03639 76.016903) (xy 354.239673 75.881073) (xy 354.493673 75.627073) (xy 354.629502 75.42379)
+ (xy 354.629503 75.423789) (xy 354.6772 75.184) (xy 354.6772 71.755) (xy 354.629503 71.515211) (xy 354.629503 71.51521)
+ (xy 354.493673 71.311927) (xy 354.283668 71.101922) (xy 354.283668 68.134001) (xy 354.136382 67.77754) (xy 353.863895 67.504577)
+ (xy 353.507692 67.356668) (xy 353.122001 67.356332) (xy 352.76554 67.503618) (xy 352.492577 67.776105) (xy 352.344668 68.132308)
+ (xy 352.344332 68.517999) (xy 352.491618 68.87446) (xy 352.764105 69.147423) (xy 353.120308 69.295332) (xy 353.505999 69.295668)
+ (xy 353.86246 69.148382) (xy 354.135423 68.875895) (xy 354.283332 68.519692) (xy 354.283668 68.134001) (xy 354.283668 71.101922)
+ (xy 354.156428 70.974682) (xy 354.156668 70.699401) (xy 354.009382 70.34294) (xy 353.736895 70.069977) (xy 353.380692 69.922068)
+ (xy 352.995001 69.921732) (xy 352.63854 70.069018) (xy 352.365577 70.341505) (xy 352.217668 70.697708) (xy 352.217332 71.083399)
+ (xy 352.364618 71.43986) (xy 352.637105 71.712823) (xy 352.993308 71.860732) (xy 353.270427 71.860973) (xy 353.424 72.014546)
+ (xy 353.424 73.191251) (xy 353.380692 73.173268) (xy 352.995001 73.172932) (xy 352.63854 73.320218) (xy 352.365577 73.592705)
+ (xy 352.217668 73.948908) (xy 352.217332 74.334599) (xy 352.364618 74.69106) (xy 352.463619 74.790233) (xy 352.365577 74.888105)
+ (xy 352.217668 75.244308) (xy 352.217332 75.629999) (xy 352.364618 75.98646) (xy 352.5604 76.182584) (xy 352.5604 82.186621)
+ (xy 352.365577 82.381105) (xy 352.217668 82.737308) (xy 352.217332 83.122999) (xy 352.364618 83.47946) (xy 352.637105 83.752423)
+ (xy 352.874941 83.851181) (xy 352.725713 84.210563) (xy 352.725288 84.697302) (xy 352.911162 85.147152) (xy 353.234708 85.471262)
+ (xy 352.912372 85.793038) (xy 352.725713 86.242563) (xy 352.725288 86.729302) (xy 352.911162 87.179152) (xy 353.255038 87.523628)
+ (xy 353.704563 87.710287) (xy 354.191302 87.710712) (xy 354.641152 87.524838) (xy 354.985628 87.180962) (xy 355.172287 86.731437)
+ (xy 355.172712 86.244698) (xy 355.172712 104.142834) (xy 355.011713 104.530563) (xy 355.011288 105.017302) (xy 355.197162 105.467152)
+ (xy 355.541038 105.811628) (xy 355.990563 105.998287) (xy 356.477302 105.998712) (xy 356.927152 105.812838) (xy 357.271628 105.468962)
+ (xy 357.458287 105.019437) (xy 357.458712 104.532698) (xy 357.458712 107.072698) (xy 357.272838 106.622848) (xy 356.928962 106.278372)
+ (xy 356.479437 106.091713) (xy 355.992698 106.091288) (xy 355.542848 106.277162) (xy 355.198372 106.621038) (xy 355.011713 107.070563)
+ (xy 355.011288 107.557302) (xy 355.197162 108.007152) (xy 355.541038 108.351628) (xy 355.990563 108.538287) (xy 356.477302 108.538712)
+ (xy 356.927152 108.352838) (xy 357.271628 108.008962) (xy 357.458287 107.559437) (xy 357.458712 107.072698) (xy 357.458712 109.612698)
+ (xy 357.272838 109.162848) (xy 356.928962 108.818372) (xy 356.479437 108.631713) (xy 355.992698 108.631288) (xy 355.542848 108.817162)
+ (xy 355.198372 109.161038) (xy 355.011713 109.610563) (xy 355.011288 110.097302) (xy 355.197162 110.547152) (xy 355.541038 110.891628)
+ (xy 355.990563 111.078287) (xy 356.477302 111.078712) (xy 356.927152 110.892838) (xy 357.271628 110.548962) (xy 357.458287 110.099437)
+ (xy 357.458712 109.612698) (xy 357.458712 112.152698) (xy 357.272838 111.702848) (xy 356.928962 111.358372) (xy 356.479437 111.171713)
+ (xy 355.992698 111.171288) (xy 355.542848 111.357162) (xy 355.198372 111.701038) (xy 355.011713 112.150563) (xy 355.011288 112.637302)
+ (xy 355.197162 113.087152) (xy 355.541038 113.431628) (xy 355.990563 113.618287) (xy 356.477302 113.618712) (xy 356.927152 113.432838)
+ (xy 357.271628 113.088962) (xy 357.458287 112.639437) (xy 357.458712 112.152698) (xy 357.458712 114.692698) (xy 357.272838 114.242848)
+ (xy 356.928962 113.898372) (xy 356.479437 113.711713) (xy 355.992698 113.711288) (xy 355.542848 113.897162) (xy 355.198372 114.241038)
+ (xy 355.011713 114.690563) (xy 355.011288 115.177302) (xy 355.197162 115.627152) (xy 355.541038 115.971628) (xy 355.990563 116.158287)
+ (xy 356.477302 116.158712) (xy 356.927152 115.972838) (xy 357.271628 115.628962) (xy 357.458287 115.179437) (xy 357.458712 114.692698)
+ (xy 357.458712 117.232698) (xy 357.272838 116.782848) (xy 356.928962 116.438372) (xy 356.479437 116.251713) (xy 355.992698 116.251288)
+ (xy 355.542848 116.437162) (xy 355.198372 116.781038) (xy 355.011713 117.230563) (xy 355.011288 117.717302) (xy 355.197162 118.167152)
+ (xy 355.541038 118.511628) (xy 355.990563 118.698287) (xy 356.477302 118.698712) (xy 356.927152 118.512838) (xy 357.271628 118.168962)
+ (xy 357.458287 117.719437) (xy 357.458712 117.232698) (xy 357.458712 119.772698) (xy 357.272838 119.322848) (xy 356.928962 118.978372)
+ (xy 356.479437 118.791713) (xy 355.992698 118.791288) (xy 355.542848 118.977162) (xy 355.198372 119.321038) (xy 355.011713 119.770563)
+ (xy 355.011288 120.257302) (xy 355.197162 120.707152) (xy 355.541038 121.051628) (xy 355.990563 121.238287) (xy 356.477302 121.238712)
+ (xy 356.927152 121.052838) (xy 357.271628 120.708962) (xy 357.458287 120.259437) (xy 357.458712 119.772698) (xy 357.458712 122.312698)
+ (xy 357.272838 121.862848) (xy 356.928962 121.518372) (xy 356.479437 121.331713) (xy 355.992698 121.331288) (xy 355.542848 121.517162)
+ (xy 355.198372 121.861038) (xy 355.011713 122.310563) (xy 355.011288 122.797302) (xy 355.197162 123.247152) (xy 355.541038 123.591628)
+ (xy 355.990563 123.778287) (xy 356.477302 123.778712) (xy 356.927152 123.592838) (xy 357.271628 123.248962) (xy 357.458287 122.799437)
+ (xy 357.458712 122.312698) (xy 357.458712 124.852698) (xy 357.272838 124.402848) (xy 356.928962 124.058372) (xy 356.479437 123.871713)
+ (xy 355.992698 123.871288) (xy 355.542848 124.057162) (xy 355.198372 124.401038) (xy 355.011713 124.850563) (xy 355.011288 125.337302)
+ (xy 355.197162 125.787152) (xy 355.541038 126.131628) (xy 355.990563 126.318287) (xy 356.477302 126.318712) (xy 356.927152 126.132838)
+ (xy 357.271628 125.788962) (xy 357.458287 125.339437) (xy 357.458712 124.852698) (xy 357.458712 126.818435) (xy 357.191577 127.085105)
+ (xy 357.043668 127.441308) (xy 357.043332 127.826999) (xy 357.190618 128.18346) (xy 357.463105 128.456423) (xy 357.819308 128.604332)
+ (xy 358.204999 128.604668) (xy 358.56146 128.457382) (xy 358.834423 128.184895) (xy 358.982332 127.828692) (xy 358.982668 127.443001)
+ (xy 358.982668 129.937569) (xy 358.86154 129.987618) (xy 358.588577 130.260105) (xy 358.440668 130.616308) (xy 358.440332 131.001999)
+ (xy 358.587618 131.35846) (xy 358.860105 131.631423) (xy 359.216308 131.779332) (xy 359.601999 131.779668) (xy 359.95846 131.632382)
+ (xy 360.231423 131.359895) (xy 360.379332 131.003692) (xy 360.379668 130.618001) (xy 360.379668 133.7394) (xy 358.994532 133.7394)
+ (xy 359.215423 133.518895) (xy 359.363332 133.162692) (xy 359.363668 132.777001) (xy 359.216382 132.42054) (xy 358.943895 132.147577)
+ (xy 358.587692 131.999668) (xy 358.202001 131.999332) (xy 357.84554 132.146618) (xy 357.572577 132.419105) (xy 357.424668 132.775308)
+ (xy 357.424332 133.160999) (xy 357.571618 133.51746) (xy 357.79317 133.7394) (xy 354.918712 133.7394) (xy 354.918712 127.392698)
+ (xy 354.918712 124.852698) (xy 354.918712 122.312698) (xy 354.918712 119.772698) (xy 354.918712 117.232698) (xy 354.918712 114.692698)
+ (xy 354.918712 112.152698) (xy 354.918712 109.612698) (xy 354.918712 107.072698) (xy 354.918712 104.532698) (xy 354.918712 101.992698)
+ (xy 354.732838 101.542848) (xy 354.388962 101.198372) (xy 353.939437 101.011713) (xy 353.775668 101.01157) (xy 353.775668 99.503001)
+ (xy 353.628382 99.14654) (xy 353.355895 98.873577) (xy 352.999692 98.725668) (xy 352.614001 98.725332) (xy 352.25754 98.872618)
+ (xy 351.984577 99.145105) (xy 351.836668 99.501308) (xy 351.836569 99.614429) (xy 351.725001 99.614332) (xy 351.36854 99.761618)
+ (xy 351.095577 100.034105) (xy 350.947668 100.390308) (xy 350.947332 100.775999) (xy 351.044598 101.011403) (xy 350.912698 101.011288)
+ (xy 350.727668 101.08774) (xy 350.727668 91.248001) (xy 350.580382 90.89154) (xy 350.307895 90.618577) (xy 350.092668 90.529206)
+ (xy 350.092668 86.930001) (xy 349.945382 86.57354) (xy 349.672895 86.300577) (xy 349.584668 86.263941) (xy 349.584668 79.945001)
+ (xy 349.584668 73.976001) (xy 349.437382 73.61954) (xy 349.164895 73.346577) (xy 348.808692 73.198668) (xy 348.423001 73.198332)
+ (xy 348.06654 73.345618) (xy 347.793577 73.618105) (xy 347.645668 73.974308) (xy 347.645332 74.359999) (xy 347.792618 74.71646)
+ (xy 348.065105 74.989423) (xy 348.421308 75.137332) (xy 348.806999 75.137668) (xy 349.16346 74.990382) (xy 349.436423 74.717895)
+ (xy 349.584332 74.361692) (xy 349.584668 73.976001) (xy 349.584668 79.945001) (xy 349.437382 79.58854) (xy 349.164895 79.315577)
+ (xy 348.822654 79.173465) (xy 348.822668 79.157601) (xy 348.675382 78.80114) (xy 348.402895 78.528177) (xy 348.046692 78.380268)
+ (xy 347.661001 78.379932) (xy 347.30454 78.527218) (xy 347.031577 78.799705) (xy 346.883668 79.155908) (xy 346.883332 79.541599)
+ (xy 347.030618 79.89806) (xy 347.303105 80.171023) (xy 347.645345 80.313134) (xy 347.645332 80.328999) (xy 347.792618 80.68546)
+ (xy 348.065105 80.958423) (xy 348.421308 81.106332) (xy 348.806999 81.106668) (xy 349.16346 80.959382) (xy 349.436423 80.686895)
+ (xy 349.584332 80.330692) (xy 349.584668 79.945001) (xy 349.584668 86.263941) (xy 349.316692 86.152668) (xy 348.931001 86.152332)
+ (xy 348.822668 86.197094) (xy 348.822668 81.748401) (xy 348.675382 81.39194) (xy 348.402895 81.118977) (xy 348.046692 80.971068)
+ (xy 347.661001 80.970732) (xy 347.30454 81.118018) (xy 347.031577 81.390505) (xy 346.883668 81.746708) (xy 346.883332 82.132399)
+ (xy 347.030618 82.48886) (xy 347.303105 82.761823) (xy 347.659308 82.909732) (xy 348.044999 82.910068) (xy 348.40146 82.762782)
+ (xy 348.674423 82.490295) (xy 348.822332 82.134092) (xy 348.822668 81.748401) (xy 348.822668 86.197094) (xy 348.57454 86.299618)
+ (xy 348.301577 86.572105) (xy 348.153668 86.928308) (xy 348.153332 87.313999) (xy 348.300618 87.67046) (xy 348.573105 87.943423)
+ (xy 348.929308 88.091332) (xy 349.314999 88.091668) (xy 349.67146 87.944382) (xy 349.944423 87.671895) (xy 350.092332 87.315692)
+ (xy 350.092668 86.930001) (xy 350.092668 90.529206) (xy 349.951692 90.470668) (xy 349.566001 90.470332) (xy 349.20954 90.617618)
+ (xy 348.936577 90.890105) (xy 348.788668 91.246308) (xy 348.788332 91.631999) (xy 348.935618 91.98846) (xy 349.208105 92.261423)
+ (xy 349.564308 92.409332) (xy 349.949999 92.409668) (xy 350.30646 92.262382) (xy 350.579423 91.989895) (xy 350.727332 91.633692)
+ (xy 350.727668 91.248001) (xy 350.727668 101.08774) (xy 350.462848 101.197162) (xy 350.118372 101.541038) (xy 349.931713 101.990563)
+ (xy 349.931288 102.477302) (xy 350.117162 102.927152) (xy 350.461038 103.271628) (xy 350.910563 103.458287) (xy 351.397302 103.458712)
+ (xy 351.847152 103.272838) (xy 352.191628 102.928962) (xy 352.378287 102.479437) (xy 352.378712 101.992698) (xy 352.192838 101.542848)
+ (xy 352.176002 101.525982) (xy 352.46546 101.406382) (xy 352.738423 101.133895) (xy 352.886332 100.777692) (xy 352.88643 100.66457)
+ (xy 352.997999 100.664668) (xy 353.35446 100.517382) (xy 353.627423 100.244895) (xy 353.775332 99.888692) (xy 353.775668 99.503001)
+ (xy 353.775668 101.01157) (xy 353.452698 101.011288) (xy 353.002848 101.197162) (xy 352.658372 101.541038) (xy 352.471713 101.990563)
+ (xy 352.471288 102.477302) (xy 352.657162 102.927152) (xy 353.001038 103.271628) (xy 353.450563 103.458287) (xy 353.937302 103.458712)
+ (xy 354.387152 103.272838) (xy 354.731628 102.928962) (xy 354.918287 102.479437) (xy 354.918712 101.992698) (xy 354.918712 104.532698)
+ (xy 354.732838 104.082848) (xy 354.388962 103.738372) (xy 353.939437 103.551713) (xy 353.452698 103.551288) (xy 353.002848 103.737162)
+ (xy 352.658372 104.081038) (xy 352.471713 104.530563) (xy 352.471288 105.017302) (xy 352.657162 105.467152) (xy 353.001038 105.811628)
+ (xy 353.450563 105.998287) (xy 353.937302 105.998712) (xy 354.387152 105.812838) (xy 354.731628 105.468962) (xy 354.918287 105.019437)
+ (xy 354.918712 104.532698) (xy 354.918712 107.072698) (xy 354.732838 106.622848) (xy 354.388962 106.278372) (xy 353.939437 106.091713)
+ (xy 353.452698 106.091288) (xy 353.002848 106.277162) (xy 352.658372 106.621038) (xy 352.471713 107.070563) (xy 352.471288 107.557302)
+ (xy 352.657162 108.007152) (xy 353.001038 108.351628) (xy 353.450563 108.538287) (xy 353.937302 108.538712) (xy 354.387152 108.352838)
+ (xy 354.731628 108.008962) (xy 354.918287 107.559437) (xy 354.918712 107.072698) (xy 354.918712 109.612698) (xy 354.732838 109.162848)
+ (xy 354.388962 108.818372) (xy 353.939437 108.631713) (xy 353.452698 108.631288) (xy 353.002848 108.817162) (xy 352.658372 109.161038)
+ (xy 352.471713 109.610563) (xy 352.471288 110.097302) (xy 352.657162 110.547152) (xy 353.001038 110.891628) (xy 353.450563 111.078287)
+ (xy 353.937302 111.078712) (xy 354.387152 110.892838) (xy 354.731628 110.548962) (xy 354.918287 110.099437) (xy 354.918712 109.612698)
+ (xy 354.918712 112.152698) (xy 354.732838 111.702848) (xy 354.388962 111.358372) (xy 353.939437 111.171713) (xy 353.452698 111.171288)
+ (xy 353.002848 111.357162) (xy 352.658372 111.701038) (xy 352.471713 112.150563) (xy 352.471288 112.637302) (xy 352.657162 113.087152)
+ (xy 353.001038 113.431628) (xy 353.450563 113.618287) (xy 353.937302 113.618712) (xy 354.387152 113.432838) (xy 354.731628 113.088962)
+ (xy 354.918287 112.639437) (xy 354.918712 112.152698) (xy 354.918712 114.692698) (xy 354.732838 114.242848) (xy 354.388962 113.898372)
+ (xy 353.939437 113.711713) (xy 353.452698 113.711288) (xy 353.002848 113.897162) (xy 352.658372 114.241038) (xy 352.471713 114.690563)
+ (xy 352.471288 115.177302) (xy 352.657162 115.627152) (xy 353.001038 115.971628) (xy 353.450563 116.158287) (xy 353.937302 116.158712)
+ (xy 354.387152 115.972838) (xy 354.731628 115.628962) (xy 354.918287 115.179437) (xy 354.918712 114.692698) (xy 354.918712 117.232698)
+ (xy 354.732838 116.782848) (xy 354.388962 116.438372) (xy 353.939437 116.251713) (xy 353.452698 116.251288) (xy 353.002848 116.437162)
+ (xy 352.658372 116.781038) (xy 352.471713 117.230563) (xy 352.471288 117.717302) (xy 352.657162 118.167152) (xy 353.001038 118.511628)
+ (xy 353.450563 118.698287) (xy 353.937302 118.698712) (xy 354.387152 118.512838) (xy 354.731628 118.168962) (xy 354.918287 117.719437)
+ (xy 354.918712 117.232698) (xy 354.918712 119.772698) (xy 354.732838 119.322848) (xy 354.388962 118.978372) (xy 353.939437 118.791713)
+ (xy 353.452698 118.791288) (xy 353.002848 118.977162) (xy 352.658372 119.321038) (xy 352.471713 119.770563) (xy 352.471288 120.257302)
+ (xy 352.657162 120.707152) (xy 353.001038 121.051628) (xy 353.450563 121.238287) (xy 353.937302 121.238712) (xy 354.387152 121.052838)
+ (xy 354.731628 120.708962) (xy 354.918287 120.259437) (xy 354.918712 119.772698) (xy 354.918712 122.312698) (xy 354.732838 121.862848)
+ (xy 354.388962 121.518372) (xy 353.939437 121.331713) (xy 353.452698 121.331288) (xy 353.002848 121.517162) (xy 352.658372 121.861038)
+ (xy 352.471713 122.310563) (xy 352.471288 122.797302) (xy 352.657162 123.247152) (xy 353.001038 123.591628) (xy 353.450563 123.778287)
+ (xy 353.937302 123.778712) (xy 354.387152 123.592838) (xy 354.731628 123.248962) (xy 354.918287 122.799437) (xy 354.918712 122.312698)
+ (xy 354.918712 124.852698) (xy 354.732838 124.402848) (xy 354.388962 124.058372) (xy 353.939437 123.871713) (xy 353.452698 123.871288)
+ (xy 353.002848 124.057162) (xy 352.658372 124.401038) (xy 352.471713 124.850563) (xy 352.471288 125.337302) (xy 352.657162 125.787152)
+ (xy 353.001038 126.131628) (xy 353.450563 126.318287) (xy 353.937302 126.318712) (xy 354.387152 126.132838) (xy 354.731628 125.788962)
+ (xy 354.918287 125.339437) (xy 354.918712 124.852698) (xy 354.918712 127.392698) (xy 354.732838 126.942848) (xy 354.388962 126.598372)
+ (xy 353.939437 126.411713) (xy 353.452698 126.411288) (xy 353.002848 126.597162) (xy 352.658372 126.941038) (xy 352.471713 127.390563)
+ (xy 352.471288 127.877302) (xy 352.657162 128.327152) (xy 353.001038 128.671628) (xy 353.450563 128.858287) (xy 353.937302 128.858712)
+ (xy 354.387152 128.672838) (xy 354.731628 128.328962) (xy 354.918287 127.879437) (xy 354.918712 127.392698) (xy 354.918712 133.7394)
+ (xy 352.378712 133.7394) (xy 352.378712 127.392698) (xy 352.378712 124.852698) (xy 352.192838 124.402848) (xy 351.848962 124.058372)
+ (xy 351.399437 123.871713) (xy 350.912698 123.871288) (xy 350.462848 124.057162) (xy 350.118372 124.401038) (xy 349.931713 124.850563)
+ (xy 349.931288 125.337302) (xy 350.117162 125.787152) (xy 350.461038 126.131628) (xy 350.910563 126.318287) (xy 351.397302 126.318712)
+ (xy 351.847152 126.132838) (xy 352.191628 125.788962) (xy 352.378287 125.339437) (xy 352.378712 124.852698) (xy 352.378712 127.392698)
+ (xy 352.192838 126.942848) (xy 351.848962 126.598372) (xy 351.399437 126.411713) (xy 350.912698 126.411288) (xy 350.462848 126.597162)
+ (xy 350.118372 126.941038) (xy 349.931713 127.390563) (xy 349.931288 127.877302) (xy 350.117162 128.327152) (xy 350.461038 128.671628)
+ (xy 350.910563 128.858287) (xy 351.397302 128.858712) (xy 351.847152 128.672838) (xy 352.191628 128.328962) (xy 352.378287 127.879437)
+ (xy 352.378712 127.392698) (xy 352.378712 133.7394) (xy 349.838712 133.7394) (xy 349.838712 127.392698) (xy 349.838712 124.852698)
+ (xy 349.652838 124.402848) (xy 349.584668 124.334559) (xy 349.584668 120.204001) (xy 349.437382 119.84754) (xy 349.164895 119.574577)
+ (xy 348.808692 119.426668) (xy 348.423001 119.426332) (xy 348.06654 119.573618) (xy 347.793577 119.846105) (xy 347.645668 120.202308)
+ (xy 347.645332 120.587999) (xy 347.792618 120.94446) (xy 348.065105 121.217423) (xy 348.421308 121.365332) (xy 348.806999 121.365668)
+ (xy 349.16346 121.218382) (xy 349.436423 120.945895) (xy 349.584332 120.589692) (xy 349.584668 120.204001) (xy 349.584668 124.334559)
+ (xy 349.308962 124.058372) (xy 348.859437 123.871713) (xy 348.372698 123.871288) (xy 347.922848 124.057162) (xy 347.578372 124.401038)
+ (xy 347.391713 124.850563) (xy 347.391288 125.337302) (xy 347.577162 125.787152) (xy 347.921038 126.131628) (xy 348.370563 126.318287)
+ (xy 348.857302 126.318712) (xy 349.307152 126.132838) (xy 349.651628 125.788962) (xy 349.838287 125.339437) (xy 349.838712 124.852698)
+ (xy 349.838712 127.392698) (xy 349.652838 126.942848) (xy 349.308962 126.598372) (xy 348.859437 126.411713) (xy 348.372698 126.411288)
+ (xy 347.922848 126.597162) (xy 347.578372 126.941038) (xy 347.391713 127.390563) (xy 347.391288 127.877302) (xy 347.577162 128.327152)
+ (xy 347.921038 128.671628) (xy 348.370563 128.858287) (xy 348.857302 128.858712) (xy 349.307152 128.672838) (xy 349.651628 128.328962)
+ (xy 349.838287 127.879437) (xy 349.838712 127.392698) (xy 349.838712 133.7394) (xy 347.298712 133.7394) (xy 347.298712 127.392698)
+ (xy 347.298712 124.852698) (xy 347.112838 124.402848) (xy 346.917668 124.207337) (xy 346.917668 108.266001) (xy 346.770382 107.90954)
+ (xy 346.497895 107.636577) (xy 346.141692 107.488668) (xy 345.756001 107.488332) (xy 345.39954 107.635618) (xy 345.126577 107.908105)
+ (xy 344.978668 108.264308) (xy 344.978332 108.649999) (xy 345.125618 109.00646) (xy 345.398105 109.279423) (xy 345.754308 109.427332)
+ (xy 346.139999 109.427668) (xy 346.49646 109.280382) (xy 346.769423 109.007895) (xy 346.917332 108.651692) (xy 346.917668 108.266001)
+ (xy 346.917668 124.207337) (xy 346.790668 124.080115) (xy 346.790668 111.568001) (xy 346.643382 111.21154) (xy 346.370895 110.938577)
+ (xy 346.014692 110.790668) (xy 345.629001 110.790332) (xy 345.27254 110.937618) (xy 344.999577 111.210105) (xy 344.851668 111.566308)
+ (xy 344.851332 111.951999) (xy 344.998618 112.30846) (xy 345.271105 112.581423) (xy 345.627308 112.729332) (xy 346.012999 112.729668)
+ (xy 346.36946 112.582382) (xy 346.642423 112.309895) (xy 346.790332 111.953692) (xy 346.790668 111.568001) (xy 346.790668 124.080115)
+ (xy 346.768962 124.058372) (xy 346.319437 123.871713) (xy 345.832698 123.871288) (xy 345.382848 124.057162) (xy 345.038372 124.401038)
+ (xy 344.851713 124.850563) (xy 344.851288 125.337302) (xy 345.037162 125.787152) (xy 345.381038 126.131628) (xy 345.830563 126.318287)
+ (xy 346.317302 126.318712) (xy 346.767152 126.132838) (xy 347.111628 125.788962) (xy 347.298287 125.339437) (xy 347.298712 124.852698)
+ (xy 347.298712 127.392698) (xy 347.112838 126.942848) (xy 346.768962 126.598372) (xy 346.319437 126.411713) (xy 345.832698 126.411288)
+ (xy 345.382848 126.597162) (xy 345.038372 126.941038) (xy 344.851713 127.390563) (xy 344.851288 127.877302) (xy 345.037162 128.327152)
+ (xy 345.381038 128.671628) (xy 345.830563 128.858287) (xy 346.317302 128.858712) (xy 346.767152 128.672838) (xy 347.111628 128.328962)
+ (xy 347.298287 127.879437) (xy 347.298712 127.392698) (xy 347.298712 133.7394) (xy 345.774668 133.7394) (xy 345.774668 131.507001)
+ (xy 345.627382 131.15054) (xy 345.354895 130.877577) (xy 344.998692 130.729668) (xy 344.859762 130.729546) (xy 344.864423 130.724895)
+ (xy 345.012332 130.368692) (xy 345.012668 129.983001) (xy 344.865382 129.62654) (xy 344.592895 129.353577) (xy 344.236692 129.205668)
+ (xy 343.851001 129.205332) (xy 343.49454 129.352618) (xy 343.221577 129.625105) (xy 343.073668 129.981308) (xy 343.073436 130.247348)
+ (xy 342.941895 130.115577) (xy 342.715848 130.021713) (xy 342.81346 129.981382) (xy 343.086423 129.708895) (xy 343.234332 129.352692)
+ (xy 343.234668 128.967001) (xy 343.168869 128.807755) (xy 343.290563 128.858287) (xy 343.777302 128.858712) (xy 344.227152 128.672838)
+ (xy 344.571628 128.328962) (xy 344.758287 127.879437) (xy 344.758712 127.392698) (xy 344.758712 124.852698) (xy 344.572838 124.402848)
+ (xy 344.228962 124.058372) (xy 343.779437 123.871713) (xy 343.292698 123.871288) (xy 343.107668 123.94774) (xy 343.107668 120.839001)
+ (xy 342.960382 120.48254) (xy 342.687895 120.209577) (xy 342.331692 120.061668) (xy 341.946001 120.061332) (xy 341.58954 120.208618)
+ (xy 341.393415 120.4044) (xy 341.249 120.4044) (xy 341.009211 120.452097) (xy 340.805927 120.587927) (xy 340.551927 120.841927)
+ (xy 340.416097 121.04521) (xy 340.3684 121.285) (xy 340.3684 124.030076) (xy 340.302848 124.057162) (xy 339.958372 124.401038)
+ (xy 339.771713 124.850563) (xy 339.771288 125.337302) (xy 339.957162 125.787152) (xy 340.301038 126.131628) (xy 340.750563 126.318287)
+ (xy 341.237302 126.318712) (xy 341.687152 126.132838) (xy 342.031628 125.788962) (xy 342.218287 125.339437) (xy 342.218712 124.852698)
+ (xy 342.032838 124.402848) (xy 341.688962 124.058372) (xy 341.6216 124.0304) (xy 341.6216 121.866331) (xy 341.944308 122.000332)
+ (xy 342.329999 122.000668) (xy 342.68646 121.853382) (xy 342.959423 121.580895) (xy 343.107332 121.224692) (xy 343.107668 120.839001)
+ (xy 343.107668 123.94774) (xy 342.842848 124.057162) (xy 342.498372 124.401038) (xy 342.311713 124.850563) (xy 342.311288 125.337302)
+ (xy 342.497162 125.787152) (xy 342.841038 126.131628) (xy 343.290563 126.318287) (xy 343.777302 126.318712) (xy 344.227152 126.132838)
+ (xy 344.571628 125.788962) (xy 344.758287 125.339437) (xy 344.758712 124.852698) (xy 344.758712 127.392698) (xy 344.572838 126.942848)
+ (xy 344.228962 126.598372) (xy 343.779437 126.411713) (xy 343.292698 126.411288) (xy 342.842848 126.597162) (xy 342.498372 126.941038)
+ (xy 342.311713 127.390563) (xy 342.311288 127.877302) (xy 342.440348 128.189652) (xy 342.089601 128.189346) (xy 342.218287 127.879437)
+ (xy 342.218712 127.392698) (xy 342.032838 126.942848) (xy 341.688962 126.598372) (xy 341.239437 126.411713) (xy 340.752698 126.411288)
+ (xy 340.302848 126.597162) (xy 339.958372 126.941038) (xy 339.771713 127.390563) (xy 339.771288 127.877302) (xy 339.957162 128.327152)
+ (xy 340.301038 128.671628) (xy 340.750563 128.858287) (xy 341.237302 128.858712) (xy 341.361185 128.807524) (xy 341.295668 128.965308)
+ (xy 341.295332 129.350999) (xy 341.442618 129.70746) (xy 341.715105 129.980423) (xy 341.941151 130.074286) (xy 341.84354 130.114618)
+ (xy 341.570577 130.387105) (xy 341.422668 130.743308) (xy 341.422332 131.128999) (xy 341.569618 131.48546) (xy 341.842105 131.758423)
+ (xy 342.198308 131.906332) (xy 342.583999 131.906668) (xy 342.94046 131.759382) (xy 343.213423 131.486895) (xy 343.361332 131.130692)
+ (xy 343.361563 130.864651) (xy 343.493105 130.996423) (xy 343.849308 131.144332) (xy 343.988237 131.144453) (xy 343.983577 131.149105)
+ (xy 343.835668 131.505308) (xy 343.835332 131.890999) (xy 343.982618 132.24746) (xy 344.255105 132.520423) (xy 344.611308 132.668332)
+ (xy 344.996999 132.668668) (xy 345.35346 132.521382) (xy 345.626423 132.248895) (xy 345.774332 131.892692) (xy 345.774668 131.507001)
+ (xy 345.774668 133.7394) (xy 339.678712 133.7394) (xy 339.678712 127.392698) (xy 339.678712 124.852698) (xy 339.492838 124.402848)
+ (xy 339.148962 124.058372) (xy 338.699437 123.871713) (xy 338.212698 123.871288) (xy 337.762848 124.057162) (xy 337.418372 124.401038)
+ (xy 337.231713 124.850563) (xy 337.231288 125.337302) (xy 337.417162 125.787152) (xy 337.761038 126.131628) (xy 338.210563 126.318287)
+ (xy 338.697302 126.318712) (xy 339.147152 126.132838) (xy 339.491628 125.788962) (xy 339.678287 125.339437) (xy 339.678712 124.852698)
+ (xy 339.678712 127.392698) (xy 339.492838 126.942848) (xy 339.148962 126.598372) (xy 338.699437 126.411713) (xy 338.212698 126.411288)
+ (xy 337.762848 126.597162) (xy 337.418372 126.941038) (xy 337.231713 127.390563) (xy 337.231288 127.877302) (xy 337.417162 128.327152)
+ (xy 337.761038 128.671628) (xy 338.210563 128.858287) (xy 338.697302 128.858712) (xy 339.147152 128.672838) (xy 339.491628 128.328962)
+ (xy 339.678287 127.879437) (xy 339.678712 127.392698) (xy 339.678712 133.7394) (xy 337.138712 133.7394) (xy 337.138712 127.392698)
+ (xy 336.952838 126.942848) (xy 336.608962 126.598372) (xy 336.159437 126.411713) (xy 335.672698 126.411288) (xy 335.222848 126.597162)
+ (xy 334.878372 126.941038) (xy 334.691713 127.390563) (xy 334.691288 127.877302) (xy 334.877162 128.327152) (xy 335.221038 128.671628)
+ (xy 335.670563 128.858287) (xy 336.157302 128.858712) (xy 336.607152 128.672838) (xy 336.951628 128.328962) (xy 337.138287 127.879437)
+ (xy 337.138712 127.392698) (xy 337.138712 133.7394) (xy 332.439668 133.7394) (xy 332.439668 130.872001) (xy 332.292382 130.51554)
+ (xy 332.019895 130.242577) (xy 331.663692 130.094668) (xy 331.278001 130.094332) (xy 330.92154 130.241618) (xy 330.648577 130.514105)
+ (xy 330.500668 130.870308) (xy 330.500332 131.255999) (xy 330.647618 131.61246) (xy 330.920105 131.885423) (xy 331.276308 132.033332)
+ (xy 331.661999 132.033668) (xy 332.01846 131.886382) (xy 332.291423 131.613895) (xy 332.439332 131.257692) (xy 332.439668 130.872001)
+ (xy 332.439668 133.7394) (xy 324.692668 133.7394) (xy 324.692668 130.110001) (xy 324.545382 129.75354) (xy 324.272895 129.480577)
+ (xy 323.916692 129.332668) (xy 323.531001 129.332332) (xy 323.17454 129.479618) (xy 322.901577 129.752105) (xy 322.753668 130.108308)
+ (xy 322.753332 130.493999) (xy 322.900618 130.85046) (xy 323.173105 131.123423) (xy 323.529308 131.271332) (xy 323.914999 131.271668)
+ (xy 324.27146 131.124382) (xy 324.544423 130.851895) (xy 324.692332 130.495692) (xy 324.692668 130.110001) (xy 324.692668 133.7394)
+ (xy 322.660712 133.7394) (xy 322.660712 127.646698) (xy 322.660712 125.106698) (xy 322.474838 124.656848) (xy 322.130962 124.312372)
+ (xy 321.681437 124.125713) (xy 321.194698 124.125288) (xy 320.744848 124.311162) (xy 320.400372 124.655038) (xy 320.213713 125.104563)
+ (xy 320.213288 125.591302) (xy 320.399162 126.041152) (xy 320.743038 126.385628) (xy 321.192563 126.572287) (xy 321.679302 126.572712)
+ (xy 322.129152 126.386838) (xy 322.473628 126.042962) (xy 322.660287 125.593437) (xy 322.660712 125.106698) (xy 322.660712 127.646698)
+ (xy 322.474838 127.196848) (xy 322.130962 126.852372) (xy 321.681437 126.665713) (xy 321.194698 126.665288) (xy 320.744848 126.851162)
+ (xy 320.400372 127.195038) (xy 320.213713 127.644563) (xy 320.213288 128.131302) (xy 320.399162 128.581152) (xy 320.743038 128.925628)
+ (xy 321.192563 129.112287) (xy 321.679302 129.112712) (xy 322.129152 128.926838) (xy 322.473628 128.582962) (xy 322.660287 128.133437)
+ (xy 322.660712 127.646698) (xy 322.660712 133.7394) (xy 320.120712 133.7394) (xy 320.120712 127.646698) (xy 320.120712 125.106698)
+ (xy 319.934838 124.656848) (xy 319.590962 124.312372) (xy 319.141437 124.125713) (xy 318.654698 124.125288) (xy 318.587287 124.153141)
+ (xy 318.324073 123.889927) (xy 318.12079 123.754097) (xy 317.881 123.7064) (xy 317.326668 123.7064) (xy 317.326668 118.553001)
+ (xy 317.179382 118.19654) (xy 316.906895 117.923577) (xy 316.550692 117.775668) (xy 316.165001 117.775332) (xy 315.80854 117.922618)
+ (xy 315.535577 118.195105) (xy 315.387668 118.551308) (xy 315.387332 118.936999) (xy 315.534618 119.29346) (xy 315.807105 119.566423)
+ (xy 316.163308 119.714332) (xy 316.548999 119.714668) (xy 316.90546 119.567382) (xy 317.178423 119.294895) (xy 317.326332 118.938692)
+ (xy 317.326668 118.553001) (xy 317.326668 123.7064) (xy 315.040712 123.7064) (xy 315.040712 99.706698) (xy 315.040712 97.166698)
+ (xy 314.854838 96.716848) (xy 314.510962 96.372372) (xy 314.061437 96.185713) (xy 313.574698 96.185288) (xy 313.124848 96.371162)
+ (xy 312.780372 96.715038) (xy 312.593713 97.164563) (xy 312.593288 97.651302) (xy 312.779162 98.101152) (xy 313.123038 98.445628)
+ (xy 313.572563 98.632287) (xy 314.059302 98.632712) (xy 314.509152 98.446838) (xy 314.853628 98.102962) (xy 315.040287 97.653437)
+ (xy 315.040712 97.166698) (xy 315.040712 99.706698) (xy 314.854838 99.256848) (xy 314.510962 98.912372) (xy 314.061437 98.725713)
+ (xy 313.574698 98.725288) (xy 313.124848 98.911162) (xy 312.780372 99.255038) (xy 312.593713 99.704563) (xy 312.593288 100.191302)
+ (xy 312.779162 100.641152) (xy 313.123038 100.985628) (xy 313.572563 101.172287) (xy 314.059302 101.172712) (xy 314.509152 100.986838)
+ (xy 314.853628 100.642962) (xy 315.040287 100.193437) (xy 315.040712 99.706698) (xy 315.040712 123.7064) (xy 313.135668 123.7064)
+ (xy 313.135668 106.615001) (xy 312.988382 106.25854) (xy 312.715895 105.985577) (xy 312.359692 105.837668) (xy 311.974001 105.837332)
+ (xy 311.9036 105.86642) (xy 311.9036 101.013923) (xy 311.969152 100.986838) (xy 312.313628 100.642962) (xy 312.500287 100.193437)
+ (xy 312.500712 99.706698) (xy 312.500712 97.166698) (xy 312.314838 96.716848) (xy 311.970962 96.372372) (xy 311.521437 96.185713)
+ (xy 311.034698 96.185288) (xy 310.584848 96.371162) (xy 310.240372 96.715038) (xy 310.053713 97.164563) (xy 310.053288 97.651302)
+ (xy 310.239162 98.101152) (xy 310.583038 98.445628) (xy 311.032563 98.632287) (xy 311.519302 98.632712) (xy 311.969152 98.446838)
+ (xy 312.313628 98.102962) (xy 312.500287 97.653437) (xy 312.500712 97.166698) (xy 312.500712 99.706698) (xy 312.314838 99.256848)
+ (xy 311.970962 98.912372) (xy 311.521437 98.725713) (xy 311.034698 98.725288) (xy 310.584848 98.911162) (xy 310.240372 99.255038)
+ (xy 310.053713 99.704563) (xy 310.053288 100.191302) (xy 310.239162 100.641152) (xy 310.583038 100.985628) (xy 310.6504 101.013599)
+ (xy 310.6504 106.628198) (xy 310.581692 106.599668) (xy 310.196001 106.599332) (xy 309.960712 106.69655) (xy 309.960712 99.706698)
+ (xy 309.960712 97.166698) (xy 309.774838 96.716848) (xy 309.430962 96.372372) (xy 308.981437 96.185713) (xy 308.494698 96.185288)
+ (xy 308.044848 96.371162) (xy 307.700372 96.715038) (xy 307.513713 97.164563) (xy 307.513288 97.651302) (xy 307.699162 98.101152)
+ (xy 308.043038 98.445628) (xy 308.492563 98.632287) (xy 308.979302 98.632712) (xy 309.429152 98.446838) (xy 309.773628 98.102962)
+ (xy 309.960287 97.653437) (xy 309.960712 97.166698) (xy 309.960712 99.706698) (xy 309.774838 99.256848) (xy 309.430962 98.912372)
+ (xy 308.981437 98.725713) (xy 308.494698 98.725288) (xy 308.044848 98.911162) (xy 307.700372 99.255038) (xy 307.513713 99.704563)
+ (xy 307.513288 100.191302) (xy 307.699162 100.641152) (xy 308.043038 100.985628) (xy 308.492563 101.172287) (xy 308.979302 101.172712)
+ (xy 309.429152 100.986838) (xy 309.773628 100.642962) (xy 309.960287 100.193437) (xy 309.960712 99.706698) (xy 309.960712 106.69655)
+ (xy 309.83954 106.746618) (xy 309.635365 106.950436) (xy 309.559382 106.76654) (xy 309.286895 106.493577) (xy 308.930692 106.345668)
+ (xy 308.545001 106.345332) (xy 308.18854 106.492618) (xy 308.182668 106.498479) (xy 308.182668 105.853001) (xy 308.035382 105.49654)
+ (xy 307.762895 105.223577) (xy 307.420712 105.081489) (xy 307.420712 99.706698) (xy 307.420712 97.166698) (xy 307.234838 96.716848)
+ (xy 306.890962 96.372372) (xy 306.441437 96.185713) (xy 306.404668 96.18568) (xy 306.404668 79.818001) (xy 306.257382 79.46154)
+ (xy 305.984895 79.188577) (xy 305.628692 79.040668) (xy 305.243001 79.040332) (xy 304.88654 79.187618) (xy 304.613577 79.460105)
+ (xy 304.465668 79.816308) (xy 304.465332 80.201999) (xy 304.612618 80.55846) (xy 304.885105 80.831423) (xy 305.241308 80.979332)
+ (xy 305.626999 80.979668) (xy 305.98346 80.832382) (xy 306.256423 80.559895) (xy 306.404332 80.203692) (xy 306.404668 79.818001)
+ (xy 306.404668 96.18568) (xy 305.954698 96.185288) (xy 305.504848 96.371162) (xy 305.388668 96.487139) (xy 305.388668 93.788001)
+ (xy 305.241382 93.43154) (xy 304.968895 93.158577) (xy 304.612692 93.010668) (xy 304.227001 93.010332) (xy 303.87054 93.157618)
+ (xy 303.847588 93.180529) (xy 303.698895 93.031577) (xy 303.342692 92.883668) (xy 302.957001 92.883332) (xy 302.60054 93.030618)
+ (xy 302.327577 93.303105) (xy 302.323673 93.312505) (xy 302.320382 93.30454) (xy 302.086668 93.070417) (xy 302.086668 79.818001)
+ (xy 301.939382 79.46154) (xy 301.666895 79.188577) (xy 301.310692 79.040668) (xy 300.925001 79.040332) (xy 300.689668 79.137569)
+ (xy 300.689668 76.897001) (xy 300.542382 76.54054) (xy 300.269895 76.267577) (xy 299.913692 76.119668) (xy 299.528001 76.119332)
+ (xy 299.34029 76.196892) (xy 299.272382 76.03254) (xy 299.16892 75.928898) (xy 299.292332 75.631692) (xy 299.292668 75.246001)
+ (xy 299.145382 74.88954) (xy 298.872895 74.616577) (xy 298.516692 74.468668) (xy 298.131001 74.468332) (xy 297.77454 74.615618)
+ (xy 297.501577 74.888105) (xy 297.353668 75.244308) (xy 297.353332 75.629999) (xy 297.500618 75.98646) (xy 297.604079 76.090101)
+ (xy 297.480668 76.387308) (xy 297.480332 76.772999) (xy 297.627618 77.12946) (xy 297.900105 77.402423) (xy 298.062808 77.469983)
+ (xy 297.90154 77.536618) (xy 297.628577 77.809105) (xy 297.480668 78.165308) (xy 297.480332 78.550999) (xy 297.627618 78.90746)
+ (xy 297.900105 79.180423) (xy 298.256308 79.328332) (xy 298.641999 79.328668) (xy 298.99846 79.181382) (xy 299.0213 79.15858)
+ (xy 299.043105 79.180423) (xy 299.399308 79.328332) (xy 299.784999 79.328668) (xy 300.14146 79.181382) (xy 300.414423 78.908895)
+ (xy 300.562332 78.552692) (xy 300.562668 78.167001) (xy 300.415382 77.81054) (xy 300.39247 77.787588) (xy 300.541423 77.638895)
+ (xy 300.689332 77.282692) (xy 300.689668 76.897001) (xy 300.689668 79.137569) (xy 300.56854 79.187618) (xy 300.295577 79.460105)
+ (xy 300.147668 79.816308) (xy 300.147613 79.878629) (xy 300.036001 79.878532) (xy 299.67954 80.025818) (xy 299.406577 80.298305)
+ (xy 299.258668 80.654508) (xy 299.258332 81.040199) (xy 299.405618 81.39666) (xy 299.678105 81.669623) (xy 300.034308 81.817532)
+ (xy 300.419999 81.817868) (xy 300.77646 81.670582) (xy 301.049423 81.398095) (xy 301.197332 81.041892) (xy 301.197386 80.97957)
+ (xy 301.308999 80.979668) (xy 301.66546 80.832382) (xy 301.938423 80.559895) (xy 302.086332 80.203692) (xy 302.086668 79.818001)
+ (xy 302.086668 93.070417) (xy 302.047895 93.031577) (xy 301.832668 92.942206) (xy 301.832668 89.089001) (xy 301.685382 88.73254)
+ (xy 301.472081 88.518866) (xy 301.684423 88.306895) (xy 301.832332 87.950692) (xy 301.832668 87.565001) (xy 301.685382 87.20854)
+ (xy 301.412895 86.935577) (xy 301.250191 86.868016) (xy 301.41146 86.801382) (xy 301.684423 86.528895) (xy 301.832332 86.172692)
+ (xy 301.832668 85.787001) (xy 301.685382 85.43054) (xy 301.412895 85.157577) (xy 301.403494 85.153673) (xy 301.41146 85.150382)
+ (xy 301.684423 84.877895) (xy 301.832332 84.521692) (xy 301.832668 84.136001) (xy 301.685382 83.77954) (xy 301.412895 83.506577)
+ (xy 301.056692 83.358668) (xy 300.671001 83.358332) (xy 300.31454 83.505618) (xy 300.041577 83.778105) (xy 299.893668 84.134308)
+ (xy 299.893569 84.247539) (xy 299.655001 84.247332) (xy 299.29854 84.394618) (xy 299.025577 84.667105) (xy 298.877668 85.023308)
+ (xy 298.877332 85.408999) (xy 299.024618 85.76546) (xy 299.265522 86.006785) (xy 299.17154 86.045618) (xy 298.898577 86.318105)
+ (xy 298.750668 86.674308) (xy 298.750332 87.059999) (xy 298.897618 87.41646) (xy 299.170105 87.689423) (xy 299.179505 87.693326)
+ (xy 299.17154 87.696618) (xy 298.898577 87.969105) (xy 298.750668 88.325308) (xy 298.750332 88.710999) (xy 298.897618 89.06746)
+ (xy 299.048765 89.218871) (xy 299.04454 89.220618) (xy 298.771577 89.493105) (xy 298.623668 89.849308) (xy 298.623332 90.234999)
+ (xy 298.770618 90.59146) (xy 299.043105 90.864423) (xy 299.399308 91.012332) (xy 299.784999 91.012668) (xy 300.14146 90.865382)
+ (xy 300.414423 90.592895) (xy 300.562332 90.236692) (xy 300.562358 90.205922) (xy 300.669308 90.250332) (xy 301.054999 90.250668)
+ (xy 301.41146 90.103382) (xy 301.684423 89.830895) (xy 301.832332 89.474692) (xy 301.832668 89.089001) (xy 301.832668 92.942206)
+ (xy 301.691692 92.883668) (xy 301.306001 92.883332) (xy 300.94954 93.030618) (xy 300.799477 93.180418) (xy 300.650895 93.031577)
+ (xy 300.294692 92.883668) (xy 299.909001 92.883332) (xy 299.55254 93.030618) (xy 299.401128 93.181765) (xy 299.399382 93.17754)
+ (xy 299.126895 92.904577) (xy 298.770692 92.756668) (xy 298.75843 92.756657) (xy 298.890423 92.624895) (xy 299.038332 92.268692)
+ (xy 299.038668 91.883001) (xy 298.891382 91.52654) (xy 298.618895 91.253577) (xy 298.262692 91.105668) (xy 297.877001 91.105332)
+ (xy 297.752947 91.156589) (xy 297.748382 91.14554) (xy 297.475895 90.872577) (xy 297.119692 90.724668) (xy 297.00657 90.724569)
+ (xy 297.006668 90.613001) (xy 296.879668 90.305636) (xy 296.879668 75.754001) (xy 296.879668 71.740801) (xy 296.732382 71.38434)
+ (xy 296.459895 71.111377) (xy 296.103692 70.963468) (xy 295.799862 70.963203) (xy 295.812532 70.932692) (xy 295.812868 70.547001)
+ (xy 295.747033 70.387669) (xy 295.974999 70.387868) (xy 296.33146 70.240582) (xy 296.604423 69.968095) (xy 296.752332 69.611892)
+ (xy 296.752668 69.226201) (xy 296.605382 68.86974) (xy 296.332895 68.596777) (xy 295.976692 68.448868) (xy 295.591001 68.448532)
+ (xy 295.23454 68.595818) (xy 294.961577 68.868305) (xy 294.813668 69.224508) (xy 294.813332 69.610199) (xy 294.879166 69.76953)
+ (xy 294.651201 69.769332) (xy 294.29474 69.916618) (xy 294.021777 70.189105) (xy 293.873868 70.545308) (xy 293.873532 70.930999)
+ (xy 294.020818 71.28746) (xy 294.293305 71.560423) (xy 294.649508 71.708332) (xy 294.953337 71.708596) (xy 294.940668 71.739108)
+ (xy 294.940613 71.80165) (xy 294.575001 71.801332) (xy 294.21854 71.948618) (xy 293.945577 72.221105) (xy 293.797668 72.577308)
+ (xy 293.797332 72.962999) (xy 293.944618 73.31946) (xy 294.217105 73.592423) (xy 294.573308 73.740332) (xy 294.958999 73.740668)
+ (xy 295.31546 73.593382) (xy 295.588423 73.320895) (xy 295.736332 72.964692) (xy 295.736386 72.902149) (xy 296.101999 72.902468)
+ (xy 296.45846 72.755182) (xy 296.731423 72.482695) (xy 296.879332 72.126492) (xy 296.879668 71.740801) (xy 296.879668 75.754001)
+ (xy 296.732382 75.39754) (xy 296.459895 75.124577) (xy 296.103692 74.976668) (xy 295.736349 74.976347) (xy 295.736668 74.611001)
+ (xy 295.589382 74.25454) (xy 295.316895 73.981577) (xy 294.960692 73.833668) (xy 294.575001 73.833332) (xy 294.21854 73.980618)
+ (xy 293.945577 74.253105) (xy 293.797668 74.609308) (xy 293.797332 74.994999) (xy 293.944618 75.35146) (xy 294.217105 75.624423)
+ (xy 294.573308 75.772332) (xy 294.94065 75.772652) (xy 294.940332 76.137999) (xy 295.087618 76.49446) (xy 295.360105 76.767423)
+ (xy 295.716308 76.915332) (xy 296.101999 76.915668) (xy 296.45846 76.768382) (xy 296.731423 76.495895) (xy 296.879332 76.139692)
+ (xy 296.879668 75.754001) (xy 296.879668 90.305636) (xy 296.859382 90.25654) (xy 296.651068 90.047862) (xy 296.651068 81.088001)
+ (xy 296.503782 80.73154) (xy 296.468303 80.695999) (xy 296.477423 80.686895) (xy 296.625332 80.330692) (xy 296.625668 79.945001)
+ (xy 296.478382 79.58854) (xy 296.371668 79.481639) (xy 296.371668 77.913001) (xy 296.224382 77.55654) (xy 295.951895 77.283577)
+ (xy 295.595692 77.135668) (xy 295.210001 77.135332) (xy 294.85354 77.282618) (xy 294.580577 77.555105) (xy 294.432668 77.911308)
+ (xy 294.432332 78.296999) (xy 294.579618 78.65346) (xy 294.852105 78.926423) (xy 295.208308 79.074332) (xy 295.593999 79.074668)
+ (xy 295.95046 78.927382) (xy 296.223423 78.654895) (xy 296.371332 78.298692) (xy 296.371668 77.913001) (xy 296.371668 79.481639)
+ (xy 296.205895 79.315577) (xy 295.849692 79.167668) (xy 295.464001 79.167332) (xy 295.10754 79.314618) (xy 294.834577 79.587105)
+ (xy 294.686668 79.943308) (xy 294.686332 80.328999) (xy 294.833618 80.68546) (xy 294.869096 80.721) (xy 294.859977 80.730105)
+ (xy 294.712068 81.086308) (xy 294.711732 81.471999) (xy 294.859018 81.82846) (xy 295.131505 82.101423) (xy 295.487708 82.249332)
+ (xy 295.873399 82.249668) (xy 296.22986 82.102382) (xy 296.502823 81.829895) (xy 296.650732 81.473692) (xy 296.651068 81.088001)
+ (xy 296.651068 90.047862) (xy 296.586895 89.983577) (xy 296.230692 89.835668) (xy 295.845001 89.835332) (xy 295.48854 89.982618)
+ (xy 295.215577 90.255105) (xy 295.067668 90.611308) (xy 295.067332 90.996999) (xy 295.072595 91.009738) (xy 294.808895 90.745577)
+ (xy 294.452692 90.597668) (xy 294.339668 90.597569) (xy 294.339668 76.643001) (xy 294.192382 76.28654) (xy 293.919895 76.013577)
+ (xy 293.563692 75.865668) (xy 293.178001 75.865332) (xy 292.82154 76.012618) (xy 292.548577 76.285105) (xy 292.400668 76.641308)
+ (xy 292.400332 77.026999) (xy 292.547618 77.38346) (xy 292.820105 77.656423) (xy 293.176308 77.804332) (xy 293.561999 77.804668)
+ (xy 293.91846 77.657382) (xy 294.191423 77.384895) (xy 294.339332 77.028692) (xy 294.339668 76.643001) (xy 294.339668 90.597569)
+ (xy 294.067001 90.597332) (xy 293.71054 90.744618) (xy 293.437577 91.017105) (xy 293.289668 91.373308) (xy 293.289332 91.758999)
+ (xy 293.436618 92.11546) (xy 293.709105 92.388423) (xy 294.065308 92.536332) (xy 294.450999 92.536668) (xy 294.80746 92.389382)
+ (xy 295.080423 92.116895) (xy 295.228332 91.760692) (xy 295.228668 91.375001) (xy 295.223404 91.362261) (xy 295.487105 91.626423)
+ (xy 295.843308 91.774332) (xy 295.956429 91.77443) (xy 295.956332 91.885999) (xy 296.103618 92.24246) (xy 296.376105 92.515423)
+ (xy 296.732308 92.663332) (xy 297.117999 92.663668) (xy 297.242052 92.61241) (xy 297.246618 92.62346) (xy 297.519105 92.896423)
+ (xy 297.875308 93.044332) (xy 297.887569 93.044342) (xy 297.755577 93.176105) (xy 297.607668 93.532308) (xy 297.607332 93.917999)
+ (xy 297.754618 94.27446) (xy 298.027105 94.547423) (xy 298.383308 94.695332) (xy 298.768999 94.695668) (xy 299.12546 94.548382)
+ (xy 299.276871 94.397234) (xy 299.278618 94.40146) (xy 299.551105 94.674423) (xy 299.907308 94.822332) (xy 300.292999 94.822668)
+ (xy 300.64946 94.675382) (xy 300.799522 94.525581) (xy 300.948105 94.674423) (xy 301.304308 94.822332) (xy 301.689999 94.822668)
+ (xy 302.04646 94.675382) (xy 302.319423 94.402895) (xy 302.323326 94.393494) (xy 302.326618 94.40146) (xy 302.599105 94.674423)
+ (xy 302.955308 94.822332) (xy 303.340999 94.822668) (xy 303.69746 94.675382) (xy 303.720411 94.65247) (xy 303.869105 94.801423)
+ (xy 304.225308 94.949332) (xy 304.610999 94.949668) (xy 304.96746 94.802382) (xy 305.240423 94.529895) (xy 305.388332 94.173692)
+ (xy 305.388668 93.788001) (xy 305.388668 96.487139) (xy 305.160372 96.715038) (xy 304.973713 97.164563) (xy 304.973288 97.651302)
+ (xy 305.159162 98.101152) (xy 305.503038 98.445628) (xy 305.952563 98.632287) (xy 306.439302 98.632712) (xy 306.889152 98.446838)
+ (xy 307.233628 98.102962) (xy 307.420287 97.653437) (xy 307.420712 97.166698) (xy 307.420712 99.706698) (xy 307.234838 99.256848)
+ (xy 306.890962 98.912372) (xy 306.441437 98.725713) (xy 305.954698 98.725288) (xy 305.504848 98.911162) (xy 305.160372 99.255038)
+ (xy 304.973713 99.704563) (xy 304.973288 100.191302) (xy 305.159162 100.641152) (xy 305.503038 100.985628) (xy 305.952563 101.172287)
+ (xy 306.439302 101.172712) (xy 306.889152 100.986838) (xy 307.233628 100.642962) (xy 307.420287 100.193437) (xy 307.420712 99.706698)
+ (xy 307.420712 105.081489) (xy 307.406692 105.075668) (xy 307.021001 105.075332) (xy 306.66454 105.222618) (xy 306.391577 105.495105)
+ (xy 306.243668 105.851308) (xy 306.243332 106.236999) (xy 306.390618 106.59346) (xy 306.663105 106.866423) (xy 307.019308 107.014332)
+ (xy 307.404999 107.014668) (xy 307.76146 106.867382) (xy 308.034423 106.594895) (xy 308.182332 106.238692) (xy 308.182668 105.853001)
+ (xy 308.182668 106.498479) (xy 307.915577 106.765105) (xy 307.767668 107.121308) (xy 307.767332 107.506999) (xy 307.914618 107.86346)
+ (xy 308.187105 108.136423) (xy 308.543308 108.284332) (xy 308.928999 108.284668) (xy 309.28546 108.137382) (xy 309.489634 107.933563)
+ (xy 309.565618 108.11746) (xy 309.838105 108.390423) (xy 310.194308 108.538332) (xy 310.579999 108.538668) (xy 310.6504 108.509579)
+ (xy 310.6504 111.754454) (xy 309.960668 112.444186) (xy 309.960668 110.171001) (xy 309.813382 109.81454) (xy 309.540895 109.541577)
+ (xy 309.184692 109.393668) (xy 308.799001 109.393332) (xy 308.44254 109.540618) (xy 308.169577 109.813105) (xy 308.021668 110.169308)
+ (xy 308.021332 110.554999) (xy 308.168618 110.91146) (xy 308.441105 111.184423) (xy 308.797308 111.332332) (xy 309.182999 111.332668)
+ (xy 309.53946 111.185382) (xy 309.812423 110.912895) (xy 309.960332 110.556692) (xy 309.960668 110.171001) (xy 309.960668 112.444186)
+ (xy 309.436927 112.967927) (xy 309.301097 113.17121) (xy 309.2534 113.411) (xy 309.2534 116.984621) (xy 309.058577 117.179105)
+ (xy 308.910668 117.535308) (xy 308.910332 117.920999) (xy 309.057618 118.27746) (xy 309.330105 118.550423) (xy 309.686308 118.698332)
+ (xy 310.071999 118.698668) (xy 310.42846 118.551382) (xy 310.701423 118.278895) (xy 310.849332 117.922692) (xy 310.849372 117.876383)
+ (xy 310.962618 118.15046) (xy 311.235105 118.423423) (xy 311.591308 118.571332) (xy 311.976999 118.571668) (xy 312.33346 118.424382)
+ (xy 312.606423 118.151895) (xy 312.754332 117.795692) (xy 312.754668 117.410001) (xy 312.607382 117.05354) (xy 312.334895 116.780577)
+ (xy 311.978692 116.632668) (xy 311.593001 116.632332) (xy 311.23654 116.779618) (xy 310.963577 117.052105) (xy 310.815668 117.408308)
+ (xy 310.815627 117.454616) (xy 310.702382 117.18054) (xy 310.5066 116.984415) (xy 310.5066 113.670546) (xy 311.720073 112.457073)
+ (xy 311.855902 112.25379) (xy 311.855903 112.253789) (xy 311.9036 112.014) (xy 311.9036 107.747801) (xy 311.972308 107.776332)
+ (xy 312.357999 107.776668) (xy 312.71446 107.629382) (xy 312.987423 107.356895) (xy 313.135332 107.000692) (xy 313.135668 106.615001)
+ (xy 313.135668 123.7064) (xy 312.246668 123.7064) (xy 312.246668 121.474001) (xy 312.099382 121.11754) (xy 311.826895 120.844577)
+ (xy 311.470692 120.696668) (xy 311.085001 120.696332) (xy 310.72854 120.843618) (xy 310.455577 121.116105) (xy 310.307668 121.472308)
+ (xy 310.307332 121.857999) (xy 310.454618 122.21446) (xy 310.727105 122.487423) (xy 311.083308 122.635332) (xy 311.468999 122.635668)
+ (xy 311.82546 122.488382) (xy 312.098423 122.215895) (xy 312.246332 121.859692) (xy 312.246668 121.474001) (xy 312.246668 123.7064)
+ (xy 307.166668 123.7064) (xy 307.166668 121.347001) (xy 307.166668 114.997001) (xy 307.019382 114.64054) (xy 306.746895 114.367577)
+ (xy 306.390692 114.219668) (xy 306.005001 114.219332) (xy 305.64854 114.366618) (xy 305.642668 114.372479) (xy 305.642668 110.552001)
+ (xy 305.495382 110.19554) (xy 305.222895 109.922577) (xy 304.880712 109.780489) (xy 304.880712 99.706698) (xy 304.880712 97.166698)
+ (xy 304.694838 96.716848) (xy 304.350962 96.372372) (xy 303.901437 96.185713) (xy 303.414698 96.185288) (xy 302.964848 96.371162)
+ (xy 302.620372 96.715038) (xy 302.433713 97.164563) (xy 302.433288 97.651302) (xy 302.619162 98.101152) (xy 302.963038 98.445628)
+ (xy 303.412563 98.632287) (xy 303.899302 98.632712) (xy 304.349152 98.446838) (xy 304.693628 98.102962) (xy 304.880287 97.653437)
+ (xy 304.880712 97.166698) (xy 304.880712 99.706698) (xy 304.694838 99.256848) (xy 304.350962 98.912372) (xy 303.901437 98.725713)
+ (xy 303.414698 98.725288) (xy 302.964848 98.911162) (xy 302.620372 99.255038) (xy 302.433713 99.704563) (xy 302.433288 100.191302)
+ (xy 302.619162 100.641152) (xy 302.963038 100.985628) (xy 303.412563 101.172287) (xy 303.899302 101.172712) (xy 304.349152 100.986838)
+ (xy 304.693628 100.642962) (xy 304.880287 100.193437) (xy 304.880712 99.706698) (xy 304.880712 109.780489) (xy 304.866692 109.774668)
+ (xy 304.481001 109.774332) (xy 304.12454 109.921618) (xy 303.851577 110.194105) (xy 303.703668 110.550308) (xy 303.703332 110.935999)
+ (xy 303.850618 111.29246) (xy 304.123105 111.565423) (xy 304.479308 111.713332) (xy 304.864999 111.713668) (xy 305.22146 111.566382)
+ (xy 305.494423 111.293895) (xy 305.642332 110.937692) (xy 305.642668 110.552001) (xy 305.642668 114.372479) (xy 305.375577 114.639105)
+ (xy 305.227668 114.995308) (xy 305.227332 115.380999) (xy 305.374618 115.73746) (xy 305.647105 116.010423) (xy 306.003308 116.158332)
+ (xy 306.388999 116.158668) (xy 306.74546 116.011382) (xy 307.018423 115.738895) (xy 307.166332 115.382692) (xy 307.166668 114.997001)
+ (xy 307.166668 121.347001) (xy 307.019382 120.99054) (xy 306.746895 120.717577) (xy 306.390692 120.569668) (xy 306.005001 120.569332)
+ (xy 305.64854 120.716618) (xy 305.375577 120.989105) (xy 305.227668 121.345308) (xy 305.227332 121.730999) (xy 305.374618 122.08746)
+ (xy 305.647105 122.360423) (xy 306.003308 122.508332) (xy 306.388999 122.508668) (xy 306.74546 122.361382) (xy 307.018423 122.088895)
+ (xy 307.166332 121.732692) (xy 307.166668 121.347001) (xy 307.166668 123.7064) (xy 305.007668 123.7064) (xy 305.007668 119.442001)
+ (xy 304.860382 119.08554) (xy 304.587895 118.812577) (xy 304.231692 118.664668) (xy 304.118668 118.664569) (xy 304.118668 114.997001)
+ (xy 303.971382 114.64054) (xy 303.698895 114.367577) (xy 303.342692 114.219668) (xy 302.957001 114.219332) (xy 302.60054 114.366618)
+ (xy 302.340712 114.625992) (xy 302.340712 99.706698) (xy 302.340712 97.166698) (xy 302.154838 96.716848) (xy 301.810962 96.372372)
+ (xy 301.361437 96.185713) (xy 300.874698 96.185288) (xy 300.424848 96.371162) (xy 300.080372 96.715038) (xy 299.893713 97.164563)
+ (xy 299.893288 97.651302) (xy 300.079162 98.101152) (xy 300.423038 98.445628) (xy 300.872563 98.632287) (xy 301.359302 98.632712)
+ (xy 301.809152 98.446838) (xy 302.153628 98.102962) (xy 302.340287 97.653437) (xy 302.340712 97.166698) (xy 302.340712 99.706698)
+ (xy 302.154838 99.256848) (xy 301.810962 98.912372) (xy 301.361437 98.725713) (xy 300.874698 98.725288) (xy 300.424848 98.911162)
+ (xy 300.080372 99.255038) (xy 299.893713 99.704563) (xy 299.893288 100.191302) (xy 300.079162 100.641152) (xy 300.423038 100.985628)
+ (xy 300.872563 101.172287) (xy 301.359302 101.172712) (xy 301.809152 100.986838) (xy 302.153628 100.642962) (xy 302.340287 100.193437)
+ (xy 302.340712 99.706698) (xy 302.340712 114.625992) (xy 302.327577 114.639105) (xy 302.179668 114.995308) (xy 302.179332 115.380999)
+ (xy 302.326618 115.73746) (xy 302.599105 116.010423) (xy 302.955308 116.158332) (xy 303.340999 116.158668) (xy 303.69746 116.011382)
+ (xy 303.970423 115.738895) (xy 304.118332 115.382692) (xy 304.118668 114.997001) (xy 304.118668 118.664569) (xy 303.846001 118.664332)
+ (xy 303.48954 118.811618) (xy 303.216577 119.084105) (xy 303.068668 119.440308) (xy 303.068332 119.825999) (xy 303.215618 120.18246)
+ (xy 303.488105 120.455423) (xy 303.844308 120.603332) (xy 304.229999 120.603668) (xy 304.58646 120.456382) (xy 304.859423 120.183895)
+ (xy 305.007332 119.827692) (xy 305.007668 119.442001) (xy 305.007668 123.7064) (xy 299.409835 123.7064) (xy 299.613628 123.502962)
+ (xy 299.632433 123.457672) (xy 299.678105 123.503423) (xy 300.034308 123.651332) (xy 300.419999 123.651668) (xy 300.77646 123.504382)
+ (xy 301.049423 123.231895) (xy 301.197332 122.875692) (xy 301.197372 122.829383) (xy 301.310618 123.10346) (xy 301.583105 123.376423)
+ (xy 301.939308 123.524332) (xy 302.324999 123.524668) (xy 302.68146 123.377382) (xy 302.954423 123.104895) (xy 303.102332 122.748692)
+ (xy 303.102668 122.363001) (xy 302.955382 122.00654) (xy 302.682895 121.733577) (xy 302.326692 121.585668) (xy 301.941001 121.585332)
+ (xy 301.928261 121.590595) (xy 302.192423 121.326895) (xy 302.340332 120.970692) (xy 302.340668 120.585001) (xy 302.193382 120.22854)
+ (xy 301.920895 119.955577) (xy 301.564692 119.807668) (xy 301.179001 119.807332) (xy 300.82254 119.954618) (xy 300.549577 120.227105)
+ (xy 300.401668 120.583308) (xy 300.401332 120.968999) (xy 300.548618 121.32546) (xy 300.821105 121.598423) (xy 301.177308 121.746332)
+ (xy 301.562999 121.746668) (xy 301.575738 121.741404) (xy 301.311577 122.005105) (xy 301.163668 122.361308) (xy 301.163627 122.407616)
+ (xy 301.050382 122.13354) (xy 300.777895 121.860577) (xy 300.421692 121.712668) (xy 300.036001 121.712332) (xy 299.800712 121.80955)
+ (xy 299.800712 120.026698) (xy 299.800712 117.486698) (xy 299.800712 114.946698) (xy 299.800712 112.406698) (xy 299.800712 109.866698)
+ (xy 299.800712 107.326698) (xy 299.800712 104.786698) (xy 299.800712 102.246698) (xy 299.800712 99.706698) (xy 299.800712 97.166698)
+ (xy 299.614838 96.716848) (xy 299.270962 96.372372) (xy 298.821437 96.185713) (xy 298.334698 96.185288) (xy 297.884848 96.371162)
+ (xy 297.540372 96.715038) (xy 297.353713 97.164563) (xy 297.353288 97.651302) (xy 297.539162 98.101152) (xy 297.883038 98.445628)
+ (xy 298.332563 98.632287) (xy 298.819302 98.632712) (xy 299.269152 98.446838) (xy 299.613628 98.102962) (xy 299.800287 97.653437)
+ (xy 299.800712 97.166698) (xy 299.800712 99.706698) (xy 299.614838 99.256848) (xy 299.270962 98.912372) (xy 298.821437 98.725713)
+ (xy 298.334698 98.725288) (xy 297.884848 98.911162) (xy 297.540372 99.255038) (xy 297.353713 99.704563) (xy 297.353288 100.191302)
+ (xy 297.539162 100.641152) (xy 297.883038 100.985628) (xy 298.332563 101.172287) (xy 298.819302 101.172712) (xy 299.269152 100.986838)
+ (xy 299.613628 100.642962) (xy 299.800287 100.193437) (xy 299.800712 99.706698) (xy 299.800712 102.246698) (xy 299.614838 101.796848)
+ (xy 299.270962 101.452372) (xy 298.821437 101.265713) (xy 298.334698 101.265288) (xy 297.884848 101.451162) (xy 297.540372 101.795038)
+ (xy 297.353713 102.244563) (xy 297.353288 102.731302) (xy 297.539162 103.181152) (xy 297.883038 103.525628) (xy 298.332563 103.712287)
+ (xy 298.819302 103.712712) (xy 299.269152 103.526838) (xy 299.613628 103.182962) (xy 299.800287 102.733437) (xy 299.800712 102.246698)
+ (xy 299.800712 104.786698) (xy 299.614838 104.336848) (xy 299.270962 103.992372) (xy 298.821437 103.805713) (xy 298.334698 103.805288)
+ (xy 297.884848 103.991162) (xy 297.540372 104.335038) (xy 297.353713 104.784563) (xy 297.353288 105.271302) (xy 297.539162 105.721152)
+ (xy 297.883038 106.065628) (xy 298.332563 106.252287) (xy 298.819302 106.252712) (xy 299.269152 106.066838) (xy 299.613628 105.722962)
+ (xy 299.800287 105.273437) (xy 299.800712 104.786698) (xy 299.800712 107.326698) (xy 299.614838 106.876848) (xy 299.270962 106.532372)
+ (xy 298.821437 106.345713) (xy 298.334698 106.345288) (xy 297.884848 106.531162) (xy 297.540372 106.875038) (xy 297.353713 107.324563)
+ (xy 297.353288 107.811302) (xy 297.539162 108.261152) (xy 297.883038 108.605628) (xy 298.332563 108.792287) (xy 298.819302 108.792712)
+ (xy 299.269152 108.606838) (xy 299.613628 108.262962) (xy 299.800287 107.813437) (xy 299.800712 107.326698) (xy 299.800712 109.866698)
+ (xy 299.614838 109.416848) (xy 299.270962 109.072372) (xy 298.821437 108.885713) (xy 298.334698 108.885288) (xy 297.884848 109.071162)
+ (xy 297.540372 109.415038) (xy 297.353713 109.864563) (xy 297.353288 110.351302) (xy 297.539162 110.801152) (xy 297.883038 111.145628)
+ (xy 298.332563 111.332287) (xy 298.819302 111.332712) (xy 299.269152 111.146838) (xy 299.613628 110.802962) (xy 299.800287 110.353437)
+ (xy 299.800712 109.866698) (xy 299.800712 112.406698) (xy 299.614838 111.956848) (xy 299.270962 111.612372) (xy 298.821437 111.425713)
+ (xy 298.334698 111.425288) (xy 297.884848 111.611162) (xy 297.540372 111.955038) (xy 297.353713 112.404563) (xy 297.353288 112.891302)
+ (xy 297.539162 113.341152) (xy 297.883038 113.685628) (xy 298.332563 113.872287) (xy 298.819302 113.872712) (xy 299.269152 113.686838)
+ (xy 299.613628 113.342962) (xy 299.800287 112.893437) (xy 299.800712 112.406698) (xy 299.800712 114.946698) (xy 299.614838 114.496848)
+ (xy 299.270962 114.152372) (xy 298.821437 113.965713) (xy 298.334698 113.965288) (xy 297.884848 114.151162) (xy 297.540372 114.495038)
+ (xy 297.353713 114.944563) (xy 297.353288 115.431302) (xy 297.539162 115.881152) (xy 297.883038 116.225628) (xy 298.332563 116.412287)
+ (xy 298.819302 116.412712) (xy 299.269152 116.226838) (xy 299.613628 115.882962) (xy 299.800287 115.433437) (xy 299.800712 114.946698)
+ (xy 299.800712 117.486698) (xy 299.614838 117.036848) (xy 299.270962 116.692372) (xy 298.821437 116.505713) (xy 298.334698 116.505288)
+ (xy 297.884848 116.691162) (xy 297.540372 117.035038) (xy 297.353713 117.484563) (xy 297.353288 117.971302) (xy 297.539162 118.421152)
+ (xy 297.883038 118.765628) (xy 298.332563 118.952287) (xy 298.819302 118.952712) (xy 299.269152 118.766838) (xy 299.613628 118.422962)
+ (xy 299.800287 117.973437) (xy 299.800712 117.486698) (xy 299.800712 120.026698) (xy 299.614838 119.576848) (xy 299.270962 119.232372)
+ (xy 298.821437 119.045713) (xy 298.334698 119.045288) (xy 297.884848 119.231162) (xy 297.540372 119.575038) (xy 297.353713 120.024563)
+ (xy 297.353288 120.511302) (xy 297.539162 120.961152) (xy 297.883038 121.305628) (xy 298.332563 121.492287) (xy 298.819302 121.492712)
+ (xy 299.269152 121.306838) (xy 299.613628 120.962962) (xy 299.800287 120.513437) (xy 299.800712 120.026698) (xy 299.800712 121.80955)
+ (xy 299.67954 121.859618) (xy 299.518517 122.020359) (xy 299.270962 121.772372) (xy 298.821437 121.585713) (xy 298.334698 121.585288)
+ (xy 297.884848 121.771162) (xy 297.540372 122.115038) (xy 297.353713 122.564563) (xy 297.353288 123.051302) (xy 297.539162 123.501152)
+ (xy 297.744052 123.7064) (xy 296.869835 123.7064) (xy 297.073628 123.502962) (xy 297.260287 123.053437) (xy 297.260712 122.566698)
+ (xy 297.260712 120.026698) (xy 297.260712 117.486698) (xy 297.260712 114.946698) (xy 297.260712 112.406698) (xy 297.260712 109.866698)
+ (xy 297.260712 107.326698) (xy 297.260712 104.786698) (xy 297.260712 102.246698) (xy 297.260712 99.706698) (xy 297.074838 99.256848)
+ (xy 296.730962 98.912372) (xy 296.281437 98.725713) (xy 295.794698 98.725288) (xy 295.344848 98.911162) (xy 295.000372 99.255038)
+ (xy 294.813713 99.704563) (xy 294.813288 100.191302) (xy 294.999162 100.641152) (xy 295.343038 100.985628) (xy 295.792563 101.172287)
+ (xy 296.279302 101.172712) (xy 296.729152 100.986838) (xy 297.073628 100.642962) (xy 297.260287 100.193437) (xy 297.260712 99.706698)
+ (xy 297.260712 102.246698) (xy 297.074838 101.796848) (xy 296.730962 101.452372) (xy 296.281437 101.265713) (xy 295.794698 101.265288)
+ (xy 295.344848 101.451162) (xy 295.000372 101.795038) (xy 294.813713 102.244563) (xy 294.813288 102.731302) (xy 294.999162 103.181152)
+ (xy 295.343038 103.525628) (xy 295.792563 103.712287) (xy 296.279302 103.712712) (xy 296.729152 103.526838) (xy 297.073628 103.182962)
+ (xy 297.260287 102.733437) (xy 297.260712 102.246698) (xy 297.260712 104.786698) (xy 297.074838 104.336848) (xy 296.730962 103.992372)
+ (xy 296.281437 103.805713) (xy 295.794698 103.805288) (xy 295.344848 103.991162) (xy 295.000372 104.335038) (xy 294.813713 104.784563)
+ (xy 294.813288 105.271302) (xy 294.999162 105.721152) (xy 295.343038 106.065628) (xy 295.792563 106.252287) (xy 296.279302 106.252712)
+ (xy 296.729152 106.066838) (xy 297.073628 105.722962) (xy 297.260287 105.273437) (xy 297.260712 104.786698) (xy 297.260712 107.326698)
+ (xy 297.074838 106.876848) (xy 296.730962 106.532372) (xy 296.281437 106.345713) (xy 295.794698 106.345288) (xy 295.344848 106.531162)
+ (xy 295.000372 106.875038) (xy 294.813713 107.324563) (xy 294.813288 107.811302) (xy 294.999162 108.261152) (xy 295.343038 108.605628)
+ (xy 295.792563 108.792287) (xy 296.279302 108.792712) (xy 296.729152 108.606838) (xy 297.073628 108.262962) (xy 297.260287 107.813437)
+ (xy 297.260712 107.326698) (xy 297.260712 109.866698) (xy 297.074838 109.416848) (xy 296.730962 109.072372) (xy 296.281437 108.885713)
+ (xy 295.794698 108.885288) (xy 295.344848 109.071162) (xy 295.000372 109.415038) (xy 294.813713 109.864563) (xy 294.813288 110.351302)
+ (xy 294.999162 110.801152) (xy 295.343038 111.145628) (xy 295.792563 111.332287) (xy 296.279302 111.332712) (xy 296.729152 111.146838)
+ (xy 297.073628 110.802962) (xy 297.260287 110.353437) (xy 297.260712 109.866698) (xy 297.260712 112.406698) (xy 297.074838 111.956848)
+ (xy 296.730962 111.612372) (xy 296.281437 111.425713) (xy 295.794698 111.425288) (xy 295.344848 111.611162) (xy 295.000372 111.955038)
+ (xy 294.813713 112.404563) (xy 294.813288 112.891302) (xy 294.999162 113.341152) (xy 295.343038 113.685628) (xy 295.792563 113.872287)
+ (xy 296.279302 113.872712) (xy 296.729152 113.686838) (xy 297.073628 113.342962) (xy 297.260287 112.893437) (xy 297.260712 112.406698)
+ (xy 297.260712 114.946698) (xy 297.074838 114.496848) (xy 296.730962 114.152372) (xy 296.281437 113.965713) (xy 295.794698 113.965288)
+ (xy 295.344848 114.151162) (xy 295.000372 114.495038) (xy 294.813713 114.944563) (xy 294.813288 115.431302) (xy 294.999162 115.881152)
+ (xy 295.343038 116.225628) (xy 295.792563 116.412287) (xy 296.279302 116.412712) (xy 296.729152 116.226838) (xy 297.073628 115.882962)
+ (xy 297.260287 115.433437) (xy 297.260712 114.946698) (xy 297.260712 117.486698) (xy 297.074838 117.036848) (xy 296.730962 116.692372)
+ (xy 296.281437 116.505713) (xy 295.794698 116.505288) (xy 295.344848 116.691162) (xy 295.000372 117.035038) (xy 294.813713 117.484563)
+ (xy 294.813288 117.971302) (xy 294.999162 118.421152) (xy 295.343038 118.765628) (xy 295.792563 118.952287) (xy 296.279302 118.952712)
+ (xy 296.729152 118.766838) (xy 297.073628 118.422962) (xy 297.260287 117.973437) (xy 297.260712 117.486698) (xy 297.260712 120.026698)
+ (xy 297.074838 119.576848) (xy 296.730962 119.232372) (xy 296.281437 119.045713) (xy 295.794698 119.045288) (xy 295.344848 119.231162)
+ (xy 295.000372 119.575038) (xy 294.813713 120.024563) (xy 294.813288 120.511302) (xy 294.999162 120.961152) (xy 295.343038 121.305628)
+ (xy 295.792563 121.492287) (xy 296.279302 121.492712) (xy 296.729152 121.306838) (xy 297.073628 120.962962) (xy 297.260287 120.513437)
+ (xy 297.260712 120.026698) (xy 297.260712 122.566698) (xy 297.074838 122.116848) (xy 296.730962 121.772372) (xy 296.281437 121.585713)
+ (xy 295.794698 121.585288) (xy 295.344848 121.771162) (xy 295.000372 122.115038) (xy 294.813713 122.564563) (xy 294.813288 123.051302)
+ (xy 294.999162 123.501152) (xy 295.204052 123.7064) (xy 294.894 123.7064) (xy 294.65421 123.754097) (xy 294.450927 123.889927)
+ (xy 293.971559 124.369294) (xy 293.690692 124.252668) (xy 293.678208 124.252657) (xy 293.937423 123.993895) (xy 294.085332 123.637692)
+ (xy 294.085668 123.252001) (xy 293.938382 122.89554) (xy 293.665895 122.622577) (xy 293.309692 122.474668) (xy 292.924001 122.474332)
+ (xy 292.56754 122.621618) (xy 292.294577 122.894105) (xy 292.244355 123.015052) (xy 292.244355 117.069217) (xy 292.244355 108.179217)
+ (xy 292.244355 99.289217) (xy 292.244355 90.399217) (xy 292.244355 81.509217) (xy 292.244355 72.619217) (xy 292.244355 63.729217)
+ (xy 291.93307 62.975851) (xy 291.357181 62.398955) (xy 290.604359 62.086357) (xy 289.789217 62.085645) (xy 289.035851 62.39693)
+ (xy 288.458955 62.972819) (xy 288.356336 63.219951) (xy 288.350382 63.20554) (xy 288.077895 62.932577) (xy 287.721692 62.784668)
+ (xy 287.336001 62.784332) (xy 286.97954 62.931618) (xy 286.706577 63.204105) (xy 286.558668 63.560308) (xy 286.558332 63.945999)
+ (xy 286.705618 64.30246) (xy 286.978105 64.575423) (xy 287.334308 64.723332) (xy 287.719999 64.723668) (xy 288.07646 64.576382)
+ (xy 288.145674 64.507288) (xy 288.145645 64.540783) (xy 288.45693 65.294149) (xy 289.032819 65.871045) (xy 289.785641 66.183643)
+ (xy 290.600783 66.184355) (xy 291.354149 65.87307) (xy 291.931045 65.297181) (xy 292.243643 64.544359) (xy 292.244355 63.729217)
+ (xy 292.244355 72.619217) (xy 291.93307 71.865851) (xy 291.357181 71.288955) (xy 290.604359 70.976357) (xy 289.789217 70.975645)
+ (xy 289.035851 71.28693) (xy 288.497668 71.824173) (xy 288.497668 67.880001) (xy 288.350382 67.52354) (xy 288.077895 67.250577)
+ (xy 287.721692 67.102668) (xy 287.336001 67.102332) (xy 286.97954 67.249618) (xy 286.706577 67.522105) (xy 286.558668 67.878308)
+ (xy 286.558332 68.263999) (xy 286.705618 68.62046) (xy 286.978105 68.893423) (xy 287.334308 69.041332) (xy 287.719999 69.041668)
+ (xy 288.07646 68.894382) (xy 288.349423 68.621895) (xy 288.497332 68.265692) (xy 288.497668 67.880001) (xy 288.497668 71.824173)
+ (xy 288.458955 71.862819) (xy 288.146357 72.615641) (xy 288.145645 73.430783) (xy 288.45693 74.184149) (xy 289.032819 74.761045)
+ (xy 289.785641 75.073643) (xy 290.600783 75.074355) (xy 291.354149 74.76307) (xy 291.931045 74.187181) (xy 292.243643 73.434359)
+ (xy 292.244355 72.619217) (xy 292.244355 81.509217) (xy 291.93307 80.755851) (xy 291.357181 80.178955) (xy 290.604359 79.866357)
+ (xy 289.789217 79.865645) (xy 289.035851 80.17693) (xy 288.458955 80.752819) (xy 288.146357 81.505641) (xy 288.145645 82.320783)
+ (xy 288.45693 83.074149) (xy 289.032819 83.651045) (xy 289.785641 83.963643) (xy 290.600783 83.964355) (xy 291.354149 83.65307)
+ (xy 291.931045 83.077181) (xy 292.243643 82.324359) (xy 292.244355 81.509217) (xy 292.244355 90.399217) (xy 291.93307 89.645851)
+ (xy 291.357181 89.068955) (xy 290.604359 88.756357) (xy 289.789217 88.755645) (xy 289.035851 89.06693) (xy 288.458955 89.642819)
+ (xy 288.146357 90.395641) (xy 288.145645 91.210783) (xy 288.45693 91.964149) (xy 289.032819 92.541045) (xy 289.785641 92.853643)
+ (xy 290.600783 92.854355) (xy 291.354149 92.54307) (xy 291.931045 91.967181) (xy 292.243643 91.214359) (xy 292.244355 90.399217)
+ (xy 292.244355 99.289217) (xy 291.93307 98.535851) (xy 291.357181 97.958955) (xy 290.604359 97.646357) (xy 289.789217 97.645645)
+ (xy 289.035851 97.95693) (xy 288.458955 98.532819) (xy 288.146357 99.285641) (xy 288.145645 100.100783) (xy 288.45693 100.854149)
+ (xy 289.032819 101.431045) (xy 289.785641 101.743643) (xy 290.600783 101.744355) (xy 291.354149 101.43307) (xy 291.931045 100.857181)
+ (xy 292.243643 100.104359) (xy 292.244355 99.289217) (xy 292.244355 108.179217) (xy 291.93307 107.425851) (xy 291.357181 106.848955)
+ (xy 290.604359 106.536357) (xy 289.789217 106.535645) (xy 289.035851 106.84693) (xy 288.497668 107.384173) (xy 288.497668 103.821001)
+ (xy 288.350382 103.46454) (xy 288.077895 103.191577) (xy 287.721692 103.043668) (xy 287.336001 103.043332) (xy 286.97954 103.190618)
+ (xy 286.706577 103.463105) (xy 286.558668 103.819308) (xy 286.558332 104.204999) (xy 286.705618 104.56146) (xy 286.978105 104.834423)
+ (xy 287.334308 104.982332) (xy 287.719999 104.982668) (xy 288.07646 104.835382) (xy 288.349423 104.562895) (xy 288.497332 104.206692)
+ (xy 288.497668 103.821001) (xy 288.497668 107.384173) (xy 288.458955 107.422819) (xy 288.146357 108.175641) (xy 288.145645 108.990783)
+ (xy 288.45693 109.744149) (xy 289.032819 110.321045) (xy 289.785641 110.633643) (xy 290.600783 110.634355) (xy 291.354149 110.32307)
+ (xy 291.931045 109.747181) (xy 292.243643 108.994359) (xy 292.244355 108.179217) (xy 292.244355 117.069217) (xy 291.93307 116.315851)
+ (xy 291.357181 115.738955) (xy 290.604359 115.426357) (xy 289.789217 115.425645) (xy 289.035851 115.73693) (xy 288.458955 116.312819)
+ (xy 288.146357 117.065641) (xy 288.145645 117.880783) (xy 288.45693 118.634149) (xy 289.032819 119.211045) (xy 289.785641 119.523643)
+ (xy 290.600783 119.524355) (xy 291.354149 119.21307) (xy 291.931045 118.637181) (xy 292.243643 117.884359) (xy 292.244355 117.069217)
+ (xy 292.244355 123.015052) (xy 292.146668 123.250308) (xy 292.146332 123.635999) (xy 292.293618 123.99246) (xy 292.566105 124.265423)
+ (xy 292.922308 124.413332) (xy 292.934791 124.413342) (xy 292.675577 124.672105) (xy 292.527668 125.028308) (xy 292.527332 125.413999)
+ (xy 292.674618 125.77046) (xy 292.947105 126.043423) (xy 293.303308 126.191332) (xy 293.688999 126.191668) (xy 293.809968 126.141684)
+ (xy 293.797668 126.171308) (xy 293.797332 126.556999) (xy 293.944618 126.91346) (xy 294.217105 127.186423) (xy 294.573308 127.334332)
+ (xy 294.958999 127.334668) (xy 295.31546 127.187382) (xy 295.588423 126.914895) (xy 295.736332 126.558692) (xy 295.73634 126.548941)
+ (xy 295.792563 126.572287) (xy 296.279302 126.572712) (xy 296.729152 126.386838) (xy 297.073628 126.042962) (xy 297.260287 125.593437)
+ (xy 297.260712 125.106698) (xy 297.199932 124.9596) (xy 297.413906 124.9596) (xy 297.353713 125.104563) (xy 297.353288 125.591302)
+ (xy 297.539162 126.041152) (xy 297.883038 126.385628) (xy 298.332563 126.572287) (xy 298.819302 126.572712) (xy 299.269152 126.386838)
+ (xy 299.613628 126.042962) (xy 299.800287 125.593437) (xy 299.800712 125.106698) (xy 299.739932 124.9596) (xy 299.953906 124.9596)
+ (xy 299.893713 125.104563) (xy 299.893288 125.591302) (xy 300.079162 126.041152) (xy 300.423038 126.385628) (xy 300.872563 126.572287)
+ (xy 301.359302 126.572712) (xy 301.809152 126.386838) (xy 302.153628 126.042962) (xy 302.340287 125.593437) (xy 302.340712 125.106698)
+ (xy 302.279932 124.9596) (xy 302.493906 124.9596) (xy 302.433713 125.104563) (xy 302.433288 125.591302) (xy 302.619162 126.041152)
+ (xy 302.963038 126.385628) (xy 303.412563 126.572287) (xy 303.899302 126.572712) (xy 304.349152 126.386838) (xy 304.693628 126.042962)
+ (xy 304.880287 125.593437) (xy 304.880712 125.106698) (xy 304.819932 124.9596) (xy 305.033906 124.9596) (xy 304.973713 125.104563)
+ (xy 304.973288 125.591302) (xy 305.159162 126.041152) (xy 305.503038 126.385628) (xy 305.952563 126.572287) (xy 306.439302 126.572712)
+ (xy 306.889152 126.386838) (xy 307.233628 126.042962) (xy 307.420287 125.593437) (xy 307.420712 125.106698) (xy 307.359932 124.9596)
+ (xy 307.573906 124.9596) (xy 307.513713 125.104563) (xy 307.513288 125.591302) (xy 307.699162 126.041152) (xy 308.043038 126.385628)
+ (xy 308.492563 126.572287) (xy 308.979302 126.572712) (xy 309.429152 126.386838) (xy 309.773628 126.042962) (xy 309.960287 125.593437)
+ (xy 309.960712 125.106698) (xy 309.899932 124.9596) (xy 310.113906 124.9596) (xy 310.053713 125.104563) (xy 310.053288 125.591302)
+ (xy 310.239162 126.041152) (xy 310.583038 126.385628) (xy 311.032563 126.572287) (xy 311.519302 126.572712) (xy 311.969152 126.386838)
+ (xy 312.313628 126.042962) (xy 312.500287 125.593437) (xy 312.500712 125.106698) (xy 312.439932 124.9596) (xy 312.653906 124.9596)
+ (xy 312.593713 125.104563) (xy 312.593288 125.591302) (xy 312.779162 126.041152) (xy 313.123038 126.385628) (xy 313.572563 126.572287)
+ (xy 314.059302 126.572712) (xy 314.509152 126.386838) (xy 314.853628 126.042962) (xy 315.040287 125.593437) (xy 315.040712 125.106698)
+ (xy 314.979932 124.9596) (xy 315.193906 124.9596) (xy 315.133713 125.104563) (xy 315.133288 125.591302) (xy 315.319162 126.041152)
+ (xy 315.663038 126.385628) (xy 316.112563 126.572287) (xy 316.599302 126.572712) (xy 317.049152 126.386838) (xy 317.393628 126.042962)
+ (xy 317.580287 125.593437) (xy 317.580712 125.106698) (xy 317.519932 124.9596) (xy 317.621454 124.9596) (xy 317.700912 125.039058)
+ (xy 317.673713 125.104563) (xy 317.673288 125.591302) (xy 317.859162 126.041152) (xy 318.203038 126.385628) (xy 318.652563 126.572287)
+ (xy 319.139302 126.572712) (xy 319.589152 126.386838) (xy 319.933628 126.042962) (xy 320.120287 125.593437) (xy 320.120712 125.106698)
+ (xy 320.120712 127.646698) (xy 319.934838 127.196848) (xy 319.590962 126.852372) (xy 319.141437 126.665713) (xy 318.654698 126.665288)
+ (xy 318.204848 126.851162) (xy 317.860372 127.195038) (xy 317.673713 127.644563) (xy 317.673288 128.131302) (xy 317.859162 128.581152)
+ (xy 318.203038 128.925628) (xy 318.652563 129.112287) (xy 319.139302 129.112712) (xy 319.589152 128.926838) (xy 319.933628 128.582962)
+ (xy 320.120287 128.133437) (xy 320.120712 127.646698) (xy 320.120712 133.7394) (xy 317.580712 133.7394) (xy 317.580712 127.646698)
+ (xy 317.394838 127.196848) (xy 317.050962 126.852372) (xy 316.601437 126.665713) (xy 316.114698 126.665288) (xy 315.664848 126.851162)
+ (xy 315.320372 127.195038) (xy 315.133713 127.644563) (xy 315.133288 128.131302) (xy 315.319162 128.581152) (xy 315.663038 128.925628)
+ (xy 316.112563 129.112287) (xy 316.599302 129.112712) (xy 317.049152 128.926838) (xy 317.393628 128.582962) (xy 317.580287 128.133437)
+ (xy 317.580712 127.646698) (xy 317.580712 133.7394) (xy 316.564668 133.7394) (xy 316.564668 132.523001) (xy 316.417382 132.16654)
+ (xy 316.144895 131.893577) (xy 315.788692 131.745668) (xy 315.403001 131.745332) (xy 315.04654 131.892618) (xy 315.040712 131.898435)
+ (xy 315.040712 127.646698) (xy 314.854838 127.196848) (xy 314.510962 126.852372) (xy 314.061437 126.665713) (xy 313.574698 126.665288)
+ (xy 313.124848 126.851162) (xy 312.780372 127.195038) (xy 312.593713 127.644563) (xy 312.593288 128.131302) (xy 312.779162 128.581152)
+ (xy 313.123038 128.925628) (xy 313.572563 129.112287) (xy 314.059302 129.112712) (xy 314.509152 128.926838) (xy 314.853628 128.582962)
+ (xy 315.040287 128.133437) (xy 315.040712 127.646698) (xy 315.040712 131.898435) (xy 314.773577 132.165105) (xy 314.625668 132.521308)
+ (xy 314.625332 132.906999) (xy 314.772618 133.26346) (xy 315.045105 133.536423) (xy 315.401308 133.684332) (xy 315.786999 133.684668)
+ (xy 316.14346 133.537382) (xy 316.416423 133.264895) (xy 316.564332 132.908692) (xy 316.564668 132.523001) (xy 316.564668 133.7394)
+ (xy 312.5005 133.7394) (xy 312.5005 128.691929) (xy 312.5005 128.483071) (xy 312.5005 127.086071) (xy 312.420574 126.893111)
+ (xy 312.272889 126.745426) (xy 312.079929 126.6655) (xy 311.871071 126.6655) (xy 310.474071 126.6655) (xy 310.281111 126.745426)
+ (xy 310.133426 126.893111) (xy 310.0535 127.086071) (xy 310.0535 127.294929) (xy 310.0535 128.691929) (xy 310.133426 128.884889)
+ (xy 310.281111 129.032574) (xy 310.474071 129.1125) (xy 310.682929 129.1125) (xy 312.079929 129.1125) (xy 312.272889 129.032574)
+ (xy 312.420574 128.884889) (xy 312.5005 128.691929) (xy 312.5005 133.7394) (xy 309.960712 133.7394) (xy 309.960712 127.646698)
+ (xy 309.774838 127.196848) (xy 309.430962 126.852372) (xy 308.981437 126.665713) (xy 308.494698 126.665288) (xy 308.044848 126.851162)
+ (xy 307.700372 127.195038) (xy 307.513713 127.644563) (xy 307.513288 128.131302) (xy 307.699162 128.581152) (xy 308.043038 128.925628)
+ (xy 308.492563 129.112287) (xy 308.979302 129.112712) (xy 309.429152 128.926838) (xy 309.773628 128.582962) (xy 309.960287 128.133437)
+ (xy 309.960712 127.646698) (xy 309.960712 133.7394) (xy 307.420712 133.7394) (xy 307.420712 127.646698) (xy 307.234838 127.196848)
+ (xy 306.890962 126.852372) (xy 306.441437 126.665713) (xy 305.954698 126.665288) (xy 305.504848 126.851162) (xy 305.160372 127.195038)
+ (xy 304.973713 127.644563) (xy 304.973288 128.131302) (xy 305.159162 128.581152) (xy 305.503038 128.925628) (xy 305.952563 129.112287)
+ (xy 306.439302 129.112712) (xy 306.889152 128.926838) (xy 307.233628 128.582962) (xy 307.420287 128.133437) (xy 307.420712 127.646698)
+ (xy 307.420712 133.7394) (xy 304.880712 133.7394) (xy 304.880712 127.646698) (xy 304.694838 127.196848) (xy 304.350962 126.852372)
+ (xy 303.901437 126.665713) (xy 303.414698 126.665288) (xy 302.964848 126.851162) (xy 302.620372 127.195038) (xy 302.433713 127.644563)
+ (xy 302.433288 128.131302) (xy 302.619162 128.581152) (xy 302.963038 128.925628) (xy 303.412563 129.112287) (xy 303.899302 129.112712)
+ (xy 304.349152 128.926838) (xy 304.693628 128.582962) (xy 304.880287 128.133437) (xy 304.880712 127.646698) (xy 304.880712 133.7394)
+ (xy 302.340712 133.7394) (xy 302.340712 127.646698) (xy 302.154838 127.196848) (xy 301.810962 126.852372) (xy 301.361437 126.665713)
+ (xy 300.874698 126.665288) (xy 300.424848 126.851162) (xy 300.080372 127.195038) (xy 299.893713 127.644563) (xy 299.893288 128.131302)
+ (xy 300.079162 128.581152) (xy 300.423038 128.925628) (xy 300.872563 129.112287) (xy 301.359302 129.112712) (xy 301.809152 128.926838)
+ (xy 302.153628 128.582962) (xy 302.340287 128.133437) (xy 302.340712 127.646698) (xy 302.340712 133.7394) (xy 299.800712 133.7394)
+ (xy 299.800712 127.646698) (xy 299.614838 127.196848) (xy 299.270962 126.852372) (xy 298.821437 126.665713) (xy 298.334698 126.665288)
+ (xy 297.884848 126.851162) (xy 297.756529 126.979257) (xy 297.748382 126.95954) (xy 297.475895 126.686577) (xy 297.119692 126.538668)
+ (xy 296.734001 126.538332) (xy 296.37754 126.685618) (xy 296.104577 126.958105) (xy 295.956668 127.314308) (xy 295.956332 127.699999)
+ (xy 296.103618 128.05646) (xy 296.376105 128.329423) (xy 296.732308 128.477332) (xy 297.117999 128.477668) (xy 297.44122 128.344116)
+ (xy 297.539162 128.581152) (xy 297.883038 128.925628) (xy 298.332563 129.112287) (xy 298.819302 129.112712) (xy 299.269152 128.926838)
+ (xy 299.613628 128.582962) (xy 299.800287 128.133437) (xy 299.800712 127.646698) (xy 299.800712 133.7394) (xy 292.942668 133.7394)
+ (xy 292.942668 131.380001) (xy 292.795382 131.02354) (xy 292.522895 130.750577) (xy 292.244355 130.634916) (xy 292.244355 125.959217)
+ (xy 291.93307 125.205851) (xy 291.357181 124.628955) (xy 290.604359 124.316357) (xy 289.789217 124.315645) (xy 289.035851 124.62693)
+ (xy 288.458955 125.202819) (xy 288.146357 125.955641) (xy 288.145645 126.770783) (xy 288.45693 127.524149) (xy 289.032819 128.101045)
+ (xy 289.785641 128.413643) (xy 290.600783 128.414355) (xy 291.354149 128.10307) (xy 291.931045 127.527181) (xy 292.243643 126.774359)
+ (xy 292.244355 125.959217) (xy 292.244355 130.634916) (xy 292.166692 130.602668) (xy 291.781001 130.602332) (xy 291.42454 130.749618)
+ (xy 291.151577 131.022105) (xy 291.003668 131.378308) (xy 291.003332 131.763999) (xy 291.150618 132.12046) (xy 291.423105 132.393423)
+ (xy 291.779308 132.541332) (xy 292.164999 132.541668) (xy 292.52146 132.394382) (xy 292.794423 132.121895) (xy 292.942332 131.765692)
+ (xy 292.942668 131.380001) (xy 292.942668 133.7394) (xy 290.957 133.7394) (xy 285.957668 133.7394) (xy 285.957668 110.552001)
+ (xy 285.957668 99.630001) (xy 285.810382 99.27354) (xy 285.537895 99.000577) (xy 285.181692 98.852668) (xy 284.796001 98.852332)
+ (xy 284.43954 98.999618) (xy 284.166577 99.272105) (xy 284.018668 99.628308) (xy 284.018332 100.013999) (xy 284.165618 100.37046)
+ (xy 284.438105 100.643423) (xy 284.794308 100.791332) (xy 285.179999 100.791668) (xy 285.53646 100.644382) (xy 285.809423 100.371895)
+ (xy 285.957332 100.015692) (xy 285.957668 99.630001) (xy 285.957668 110.552001) (xy 285.810382 110.19554) (xy 285.537895 109.922577)
+ (xy 285.181692 109.774668) (xy 284.796001 109.774332) (xy 284.43954 109.921618) (xy 284.166577 110.194105) (xy 284.018668 110.550308)
+ (xy 284.018332 110.935999) (xy 284.165618 111.29246) (xy 284.438105 111.565423) (xy 284.794308 111.713332) (xy 285.179999 111.713668)
+ (xy 285.53646 111.566382) (xy 285.809423 111.293895) (xy 285.957332 110.937692) (xy 285.957668 110.552001) (xy 285.957668 133.7394)
+ (xy 283.0365 133.7394) (xy 283.0365 128.310929) (xy 283.0365 128.102071) (xy 283.0365 126.959071) (xy 283.0365 119.420929)
+ (xy 283.0365 119.212071) (xy 283.0365 118.069071) (xy 283.0365 110.530929) (xy 283.0365 110.322071) (xy 283.0365 109.179071)
+ (xy 283.0365 101.640929) (xy 283.0365 101.432071) (xy 283.0365 100.289071) (xy 283.0365 92.750929) (xy 283.0365 92.542071)
+ (xy 283.0365 91.399071) (xy 283.0365 83.860929) (xy 283.0365 83.652071) (xy 283.0365 82.509071) (xy 283.0365 74.970929)
+ (xy 283.0365 74.762071) (xy 283.0365 73.619071) (xy 283.0365 66.080929) (xy 283.0365 65.872071) (xy 283.0365 64.729071)
+ (xy 282.956574 64.536111) (xy 282.808889 64.388426) (xy 282.615929 64.3085) (xy 282.407071 64.3085) (xy 281.76669 64.3085)
+ (xy 281.76669 62.647849) (xy 281.60011 62.244694) (xy 281.291928 61.935974) (xy 280.889064 61.76869) (xy 280.452849 61.76831)
+ (xy 280.049694 61.93489) (xy 279.740974 62.243072) (xy 279.57369 62.645936) (xy 279.57331 63.082151) (xy 279.73989 63.485306)
+ (xy 280.048072 63.794026) (xy 280.450936 63.96131) (xy 280.887151 63.96169) (xy 281.290306 63.79511) (xy 281.599026 63.486928)
+ (xy 281.76631 63.084064) (xy 281.76669 62.647849) (xy 281.76669 64.3085) (xy 281.264071 64.3085) (xy 281.071111 64.388426)
+ (xy 280.923426 64.536111) (xy 280.8435 64.729071) (xy 280.8435 64.937929) (xy 280.8435 66.080929) (xy 280.923426 66.273889)
+ (xy 281.071111 66.421574) (xy 281.264071 66.5015) (xy 281.472929 66.5015) (xy 282.615929 66.5015) (xy 282.808889 66.421574)
+ (xy 282.956574 66.273889) (xy 283.0365 66.080929) (xy 283.0365 73.619071) (xy 282.956574 73.426111) (xy 282.808889 73.278426)
+ (xy 282.615929 73.1985) (xy 282.407071 73.1985) (xy 281.76669 73.1985) (xy 281.76669 71.537849) (xy 281.60011 71.134694)
+ (xy 281.291928 70.825974) (xy 280.889064 70.65869) (xy 280.49669 70.658348) (xy 280.49669 65.187849) (xy 280.33011 64.784694)
+ (xy 280.021928 64.475974) (xy 279.619064 64.30869) (xy 279.22669 64.308348) (xy 279.22669 62.647849) (xy 279.06011 62.244694)
+ (xy 278.751928 61.935974) (xy 278.349064 61.76869) (xy 277.912849 61.76831) (xy 277.509694 61.93489) (xy 277.200974 62.243072)
+ (xy 277.03369 62.645936) (xy 277.03331 63.082151) (xy 277.19989 63.485306) (xy 277.508072 63.794026) (xy 277.910936 63.96131)
+ (xy 278.347151 63.96169) (xy 278.750306 63.79511) (xy 279.059026 63.486928) (xy 279.22631 63.084064) (xy 279.22669 62.647849)
+ (xy 279.22669 64.308348) (xy 279.182849 64.30831) (xy 278.779694 64.47489) (xy 278.470974 64.783072) (xy 278.30369 65.185936)
+ (xy 278.30331 65.622151) (xy 278.46989 66.025306) (xy 278.778072 66.334026) (xy 279.180936 66.50131) (xy 279.617151 66.50169)
+ (xy 280.020306 66.33511) (xy 280.329026 66.026928) (xy 280.49631 65.624064) (xy 280.49669 65.187849) (xy 280.49669 70.658348)
+ (xy 280.452849 70.65831) (xy 280.049694 70.82489) (xy 279.740974 71.133072) (xy 279.57369 71.535936) (xy 279.57331 71.972151)
+ (xy 279.73989 72.375306) (xy 280.048072 72.684026) (xy 280.450936 72.85131) (xy 280.887151 72.85169) (xy 281.290306 72.68511)
+ (xy 281.599026 72.376928) (xy 281.76631 71.974064) (xy 281.76669 71.537849) (xy 281.76669 73.1985) (xy 281.264071 73.1985)
+ (xy 281.071111 73.278426) (xy 280.923426 73.426111) (xy 280.8435 73.619071) (xy 280.8435 73.827929) (xy 280.8435 74.970929)
+ (xy 280.923426 75.163889) (xy 281.071111 75.311574) (xy 281.264071 75.3915) (xy 281.472929 75.3915) (xy 282.615929 75.3915)
+ (xy 282.808889 75.311574) (xy 282.956574 75.163889) (xy 283.0365 74.970929) (xy 283.0365 82.509071) (xy 282.956574 82.316111)
+ (xy 282.808889 82.168426) (xy 282.615929 82.0885) (xy 282.407071 82.0885) (xy 281.76669 82.0885) (xy 281.76669 80.427849)
+ (xy 281.60011 80.024694) (xy 281.291928 79.715974) (xy 280.889064 79.54869) (xy 280.49669 79.548348) (xy 280.49669 74.077849)
+ (xy 280.33011 73.674694) (xy 280.021928 73.365974) (xy 279.619064 73.19869) (xy 279.22669 73.198348) (xy 279.22669 71.537849)
+ (xy 279.06011 71.134694) (xy 278.751928 70.825974) (xy 278.349064 70.65869) (xy 277.95669 70.658348) (xy 277.95669 65.187849)
+ (xy 277.79011 64.784694) (xy 277.481928 64.475974) (xy 277.079064 64.30869) (xy 276.68669 64.308348) (xy 276.68669 62.647849)
+ (xy 276.52011 62.244694) (xy 276.211928 61.935974) (xy 275.809064 61.76869) (xy 275.372849 61.76831) (xy 274.969694 61.93489)
+ (xy 274.660974 62.243072) (xy 274.49369 62.645936) (xy 274.49331 63.082151) (xy 274.65989 63.485306) (xy 274.968072 63.794026)
+ (xy 275.370936 63.96131) (xy 275.807151 63.96169) (xy 276.210306 63.79511) (xy 276.519026 63.486928) (xy 276.68631 63.084064)
+ (xy 276.68669 62.647849) (xy 276.68669 64.308348) (xy 276.642849 64.30831) (xy 276.239694 64.47489) (xy 275.930974 64.783072)
+ (xy 275.76369 65.185936) (xy 275.76331 65.622151) (xy 275.92989 66.025306) (xy 276.238072 66.334026) (xy 276.640936 66.50131)
+ (xy 277.077151 66.50169) (xy 277.480306 66.33511) (xy 277.789026 66.026928) (xy 277.95631 65.624064) (xy 277.95669 65.187849)
+ (xy 277.95669 70.658348) (xy 277.912849 70.65831) (xy 277.509694 70.82489) (xy 277.200974 71.133072) (xy 277.03369 71.535936)
+ (xy 277.03331 71.972151) (xy 277.19989 72.375306) (xy 277.508072 72.684026) (xy 277.910936 72.85131) (xy 278.347151 72.85169)
+ (xy 278.750306 72.68511) (xy 279.059026 72.376928) (xy 279.22631 71.974064) (xy 279.22669 71.537849) (xy 279.22669 73.198348)
+ (xy 279.182849 73.19831) (xy 278.779694 73.36489) (xy 278.470974 73.673072) (xy 278.30369 74.075936) (xy 278.30331 74.512151)
+ (xy 278.46989 74.915306) (xy 278.778072 75.224026) (xy 279.180936 75.39131) (xy 279.617151 75.39169) (xy 280.020306 75.22511)
+ (xy 280.329026 74.916928) (xy 280.49631 74.514064) (xy 280.49669 74.077849) (xy 280.49669 79.548348) (xy 280.452849 79.54831)
+ (xy 280.369668 79.582679) (xy 280.369668 78.548001) (xy 280.222382 78.19154) (xy 279.949895 77.918577) (xy 279.593692 77.770668)
+ (xy 279.208001 77.770332) (xy 278.85154 77.917618) (xy 278.578577 78.190105) (xy 278.430668 78.546308) (xy 278.430332 78.931999)
+ (xy 278.577618 79.28846) (xy 278.850105 79.561423) (xy 279.206308 79.709332) (xy 279.591999 79.709668) (xy 279.94846 79.562382)
+ (xy 280.221423 79.289895) (xy 280.369332 78.933692) (xy 280.369668 78.548001) (xy 280.369668 79.582679) (xy 280.049694 79.71489)
+ (xy 279.740974 80.023072) (xy 279.57369 80.425936) (xy 279.57331 80.862151) (xy 279.73989 81.265306) (xy 280.048072 81.574026)
+ (xy 280.450936 81.74131) (xy 280.887151 81.74169) (xy 281.290306 81.57511) (xy 281.599026 81.266928) (xy 281.76631 80.864064)
+ (xy 281.76669 80.427849) (xy 281.76669 82.0885) (xy 281.264071 82.0885) (xy 281.071111 82.168426) (xy 280.923426 82.316111)
+ (xy 280.8435 82.509071) (xy 280.8435 82.717929) (xy 280.8435 83.860929) (xy 280.923426 84.053889) (xy 281.071111 84.201574)
+ (xy 281.264071 84.2815) (xy 281.472929 84.2815) (xy 282.615929 84.2815) (xy 282.808889 84.201574) (xy 282.956574 84.053889)
+ (xy 283.0365 83.860929) (xy 283.0365 91.399071) (xy 282.956574 91.206111) (xy 282.808889 91.058426) (xy 282.615929 90.9785)
+ (xy 282.407071 90.9785) (xy 281.76669 90.9785) (xy 281.76669 89.317849) (xy 281.60011 88.914694) (xy 281.291928 88.605974)
+ (xy 280.889064 88.43869) (xy 280.49669 88.438348) (xy 280.49669 82.967849) (xy 280.33011 82.564694) (xy 280.021928 82.255974)
+ (xy 279.619064 82.08869) (xy 279.22669 82.088348) (xy 279.22669 80.427849) (xy 279.06011 80.024694) (xy 278.751928 79.715974)
+ (xy 278.349064 79.54869) (xy 277.95669 79.548348) (xy 277.95669 74.077849) (xy 277.79011 73.674694) (xy 277.481928 73.365974)
+ (xy 277.079064 73.19869) (xy 276.68669 73.198348) (xy 276.68669 71.537849) (xy 276.52011 71.134694) (xy 276.211928 70.825974)
+ (xy 275.809064 70.65869) (xy 275.41669 70.658348) (xy 275.41669 65.187849) (xy 275.25011 64.784694) (xy 274.941928 64.475974)
+ (xy 274.539064 64.30869) (xy 274.14669 64.308348) (xy 274.14669 62.647849) (xy 273.98011 62.244694) (xy 273.671928 61.935974)
+ (xy 273.269064 61.76869) (xy 272.832849 61.76831) (xy 272.429694 61.93489) (xy 272.120974 62.243072) (xy 271.95369 62.645936)
+ (xy 271.95331 63.082151) (xy 272.11989 63.485306) (xy 272.428072 63.794026) (xy 272.830936 63.96131) (xy 273.267151 63.96169)
+ (xy 273.670306 63.79511) (xy 273.979026 63.486928) (xy 274.14631 63.084064) (xy 274.14669 62.647849) (xy 274.14669 64.308348)
+ (xy 274.102849 64.30831) (xy 273.699694 64.47489) (xy 273.390974 64.783072) (xy 273.22369 65.185936) (xy 273.22331 65.622151)
+ (xy 273.38989 66.025306) (xy 273.698072 66.334026) (xy 274.100936 66.50131) (xy 274.537151 66.50169) (xy 274.940306 66.33511)
+ (xy 275.249026 66.026928) (xy 275.41631 65.624064) (xy 275.41669 65.187849) (xy 275.41669 70.658348) (xy 275.372849 70.65831)
+ (xy 274.969694 70.82489) (xy 274.660974 71.133072) (xy 274.49369 71.535936) (xy 274.49331 71.972151) (xy 274.65989 72.375306)
+ (xy 274.968072 72.684026) (xy 275.370936 72.85131) (xy 275.807151 72.85169) (xy 276.210306 72.68511) (xy 276.519026 72.376928)
+ (xy 276.68631 71.974064) (xy 276.68669 71.537849) (xy 276.68669 73.198348) (xy 276.642849 73.19831) (xy 276.239694 73.36489)
+ (xy 275.930974 73.673072) (xy 275.76369 74.075936) (xy 275.76331 74.512151) (xy 275.92989 74.915306) (xy 276.238072 75.224026)
+ (xy 276.640936 75.39131) (xy 277.077151 75.39169) (xy 277.480306 75.22511) (xy 277.789026 74.916928) (xy 277.95631 74.514064)
+ (xy 277.95669 74.077849) (xy 277.95669 79.548348) (xy 277.912849 79.54831) (xy 277.829668 79.582679) (xy 277.829668 78.548001)
+ (xy 277.682382 78.19154) (xy 277.409895 77.918577) (xy 277.053692 77.770668) (xy 276.668001 77.770332) (xy 276.31154 77.917618)
+ (xy 276.038577 78.190105) (xy 275.890668 78.546308) (xy 275.890332 78.931999) (xy 276.037618 79.28846) (xy 276.310105 79.561423)
+ (xy 276.666308 79.709332) (xy 277.051999 79.709668) (xy 277.40846 79.562382) (xy 277.681423 79.289895) (xy 277.829332 78.933692)
+ (xy 277.829668 78.548001) (xy 277.829668 79.582679) (xy 277.509694 79.71489) (xy 277.200974 80.023072) (xy 277.03369 80.425936)
+ (xy 277.03331 80.862151) (xy 277.19989 81.265306) (xy 277.508072 81.574026) (xy 277.910936 81.74131) (xy 278.347151 81.74169)
+ (xy 278.750306 81.57511) (xy 279.059026 81.266928) (xy 279.22631 80.864064) (xy 279.22669 80.427849) (xy 279.22669 82.088348)
+ (xy 279.182849 82.08831) (xy 278.779694 82.25489) (xy 278.470974 82.563072) (xy 278.30369 82.965936) (xy 278.30331 83.402151)
+ (xy 278.46989 83.805306) (xy 278.778072 84.114026) (xy 279.180936 84.28131) (xy 279.617151 84.28169) (xy 280.020306 84.11511)
+ (xy 280.329026 83.806928) (xy 280.49631 83.404064) (xy 280.49669 82.967849) (xy 280.49669 88.438348) (xy 280.452849 88.43831)
+ (xy 280.049694 88.60489) (xy 279.740974 88.913072) (xy 279.57369 89.315936) (xy 279.57331 89.752151) (xy 279.73989 90.155306)
+ (xy 280.048072 90.464026) (xy 280.450936 90.63131) (xy 280.887151 90.63169) (xy 281.290306 90.46511) (xy 281.599026 90.156928)
+ (xy 281.76631 89.754064) (xy 281.76669 89.317849) (xy 281.76669 90.9785) (xy 281.264071 90.9785) (xy 281.071111 91.058426)
+ (xy 280.923426 91.206111) (xy 280.8435 91.399071) (xy 280.8435 91.607929) (xy 280.8435 92.750929) (xy 280.923426 92.943889)
+ (xy 281.071111 93.091574) (xy 281.264071 93.1715) (xy 281.472929 93.1715) (xy 282.615929 93.1715) (xy 282.808889 93.091574)
+ (xy 282.956574 92.943889) (xy 283.0365 92.750929) (xy 283.0365 100.289071) (xy 282.956574 100.096111) (xy 282.808889 99.948426)
+ (xy 282.615929 99.8685) (xy 282.407071 99.8685) (xy 281.76669 99.8685) (xy 281.76669 98.207849) (xy 281.60011 97.804694)
+ (xy 281.291928 97.495974) (xy 280.889064 97.32869) (xy 280.49669 97.328348) (xy 280.49669 91.857849) (xy 280.33011 91.454694)
+ (xy 280.021928 91.145974) (xy 279.619064 90.97869) (xy 279.22669 90.978348) (xy 279.22669 89.317849) (xy 279.06011 88.914694)
+ (xy 278.751928 88.605974) (xy 278.349064 88.43869) (xy 277.95669 88.438348) (xy 277.95669 82.967849) (xy 277.79011 82.564694)
+ (xy 277.481928 82.255974) (xy 277.079064 82.08869) (xy 276.68669 82.088348) (xy 276.68669 80.427849) (xy 276.52011 80.024694)
+ (xy 276.211928 79.715974) (xy 275.809064 79.54869) (xy 275.41669 79.548348) (xy 275.41669 74.077849) (xy 275.25011 73.674694)
+ (xy 274.941928 73.365974) (xy 274.539064 73.19869) (xy 274.14669 73.198348) (xy 274.14669 71.537849) (xy 273.98011 71.134694)
+ (xy 273.671928 70.825974) (xy 273.269064 70.65869) (xy 272.87669 70.658348) (xy 272.87669 65.187849) (xy 272.71011 64.784694)
+ (xy 272.401928 64.475974) (xy 271.999064 64.30869) (xy 271.61003 64.308351) (xy 271.61003 62.665461) (xy 271.449934 62.259687)
+ (xy 271.428934 62.228257) (xy 271.225178 62.185177) (xy 271.189823 62.220532) (xy 271.189823 62.149822) (xy 271.146743 61.946066)
+ (xy 270.746613 61.772345) (xy 270.310461 61.76497) (xy 269.904687 61.925066) (xy 269.873257 61.946066) (xy 269.830177 62.149822)
+ (xy 270.51 62.829645) (xy 271.189823 62.149822) (xy 271.189823 62.220532) (xy 270.545355 62.865) (xy 271.225178 63.544823)
+ (xy 271.428934 63.501743) (xy 271.602655 63.101613) (xy 271.61003 62.665461) (xy 271.61003 64.308351) (xy 271.562849 64.30831)
+ (xy 271.189823 64.46244) (xy 271.189823 63.580178) (xy 270.51 62.900355) (xy 270.474645 62.93571) (xy 270.474645 62.865)
+ (xy 269.794822 62.185177) (xy 269.591066 62.228257) (xy 269.417345 62.628387) (xy 269.40997 63.064539) (xy 269.570066 63.470313)
+ (xy 269.591066 63.501743) (xy 269.794822 63.544823) (xy 270.474645 62.865) (xy 270.474645 62.93571) (xy 269.830177 63.580178)
+ (xy 269.873257 63.783934) (xy 270.273387 63.957655) (xy 270.709539 63.96503) (xy 271.115313 63.804934) (xy 271.146743 63.783934)
+ (xy 271.189823 63.580178) (xy 271.189823 64.46244) (xy 271.159694 64.47489) (xy 270.850974 64.783072) (xy 270.68369 65.185936)
+ (xy 270.68331 65.622151) (xy 270.84989 66.025306) (xy 271.158072 66.334026) (xy 271.560936 66.50131) (xy 271.997151 66.50169)
+ (xy 272.400306 66.33511) (xy 272.709026 66.026928) (xy 272.87631 65.624064) (xy 272.87669 65.187849) (xy 272.87669 70.658348)
+ (xy 272.832849 70.65831) (xy 272.429694 70.82489) (xy 272.120974 71.133072) (xy 271.95369 71.535936) (xy 271.95331 71.972151)
+ (xy 272.11989 72.375306) (xy 272.428072 72.684026) (xy 272.830936 72.85131) (xy 273.267151 72.85169) (xy 273.670306 72.68511)
+ (xy 273.979026 72.376928) (xy 274.14631 71.974064) (xy 274.14669 71.537849) (xy 274.14669 73.198348) (xy 274.102849 73.19831)
+ (xy 273.699694 73.36489) (xy 273.390974 73.673072) (xy 273.22369 74.075936) (xy 273.22331 74.512151) (xy 273.38989 74.915306)
+ (xy 273.698072 75.224026) (xy 274.100936 75.39131) (xy 274.537151 75.39169) (xy 274.940306 75.22511) (xy 275.249026 74.916928)
+ (xy 275.41631 74.514064) (xy 275.41669 74.077849) (xy 275.41669 79.548348) (xy 275.372849 79.54831) (xy 275.289651 79.582686)
+ (xy 275.289668 79.564001) (xy 275.142382 79.20754) (xy 274.869895 78.934577) (xy 274.513692 78.786668) (xy 274.128001 78.786332)
+ (xy 273.77154 78.933618) (xy 273.498577 79.206105) (xy 273.350668 79.562308) (xy 273.35065 79.582567) (xy 273.269064 79.54869)
+ (xy 272.87669 79.548348) (xy 272.87669 74.077849) (xy 272.71011 73.674694) (xy 272.401928 73.365974) (xy 271.999064 73.19869)
+ (xy 271.61003 73.198351) (xy 271.61003 71.555461) (xy 271.449934 71.149687) (xy 271.428934 71.118257) (xy 271.225178 71.075177)
+ (xy 271.189823 71.110532) (xy 271.189823 71.039822) (xy 271.146743 70.836066) (xy 270.746613 70.662345) (xy 270.33669 70.655413)
+ (xy 270.33669 65.187849) (xy 270.17011 64.784694) (xy 269.861928 64.475974) (xy 269.459064 64.30869) (xy 269.06669 64.308348)
+ (xy 269.06669 62.647849) (xy 268.90011 62.244694) (xy 268.591928 61.935974) (xy 268.189064 61.76869) (xy 267.752849 61.76831)
+ (xy 267.349694 61.93489) (xy 267.040974 62.243072) (xy 266.87369 62.645936) (xy 266.87331 63.082151) (xy 267.03989 63.485306)
+ (xy 267.348072 63.794026) (xy 267.750936 63.96131) (xy 268.187151 63.96169) (xy 268.590306 63.79511) (xy 268.899026 63.486928)
+ (xy 269.06631 63.084064) (xy 269.06669 62.647849) (xy 269.06669 64.308348) (xy 269.022849 64.30831) (xy 268.619694 64.47489)
+ (xy 268.310974 64.783072) (xy 268.14369 65.185936) (xy 268.14331 65.622151) (xy 268.30989 66.025306) (xy 268.618072 66.334026)
+ (xy 269.020936 66.50131) (xy 269.457151 66.50169) (xy 269.860306 66.33511) (xy 270.169026 66.026928) (xy 270.33631 65.624064)
+ (xy 270.33669 65.187849) (xy 270.33669 70.655413) (xy 270.310461 70.65497) (xy 269.904687 70.815066) (xy 269.873257 70.836066)
+ (xy 269.830177 71.039822) (xy 270.51 71.719645) (xy 271.189823 71.039822) (xy 271.189823 71.110532) (xy 270.545355 71.755)
+ (xy 271.225178 72.434823) (xy 271.428934 72.391743) (xy 271.602655 71.991613) (xy 271.61003 71.555461) (xy 271.61003 73.198351)
+ (xy 271.562849 73.19831) (xy 271.189823 73.35244) (xy 271.189823 72.470178) (xy 270.51 71.790355) (xy 270.474645 71.82571)
+ (xy 270.474645 71.755) (xy 269.794822 71.075177) (xy 269.591066 71.118257) (xy 269.417345 71.518387) (xy 269.40997 71.954539)
+ (xy 269.570066 72.360313) (xy 269.591066 72.391743) (xy 269.794822 72.434823) (xy 270.474645 71.755) (xy 270.474645 71.82571)
+ (xy 269.830177 72.470178) (xy 269.873257 72.673934) (xy 270.273387 72.847655) (xy 270.709539 72.85503) (xy 271.115313 72.694934)
+ (xy 271.146743 72.673934) (xy 271.189823 72.470178) (xy 271.189823 73.35244) (xy 271.159694 73.36489) (xy 270.850974 73.673072)
+ (xy 270.68369 74.075936) (xy 270.68331 74.512151) (xy 270.84989 74.915306) (xy 271.158072 75.224026) (xy 271.560936 75.39131)
+ (xy 271.997151 75.39169) (xy 272.400306 75.22511) (xy 272.709026 74.916928) (xy 272.87631 74.514064) (xy 272.87669 74.077849)
+ (xy 272.87669 79.548348) (xy 272.832849 79.54831) (xy 272.429694 79.71489) (xy 272.120974 80.023072) (xy 272.087415 80.10389)
+ (xy 271.973692 80.056668) (xy 271.588001 80.056332) (xy 271.474933 80.10305) (xy 271.449934 80.039687) (xy 271.428934 80.008257)
+ (xy 271.225178 79.965177) (xy 271.189823 80.000532) (xy 271.189823 79.929822) (xy 271.146743 79.726066) (xy 270.746613 79.552345)
+ (xy 270.33669 79.545413) (xy 270.33669 74.077849) (xy 270.17011 73.674694) (xy 269.861928 73.365974) (xy 269.459064 73.19869)
+ (xy 269.06669 73.198348) (xy 269.06669 71.537849) (xy 268.90011 71.134694) (xy 268.591928 70.825974) (xy 268.189064 70.65869)
+ (xy 267.79669 70.658348) (xy 267.79669 65.187849) (xy 267.63011 64.784694) (xy 267.321928 64.475974) (xy 266.919064 64.30869)
+ (xy 266.52669 64.308348) (xy 266.52669 62.647849) (xy 266.36011 62.244694) (xy 266.051928 61.935974) (xy 265.649064 61.76869)
+ (xy 265.212849 61.76831) (xy 264.809694 61.93489) (xy 264.500974 62.243072) (xy 264.33369 62.645936) (xy 264.33331 63.082151)
+ (xy 264.49989 63.485306) (xy 264.808072 63.794026) (xy 265.210936 63.96131) (xy 265.647151 63.96169) (xy 266.050306 63.79511)
+ (xy 266.359026 63.486928) (xy 266.52631 63.084064) (xy 266.52669 62.647849) (xy 266.52669 64.308348) (xy 266.482849 64.30831)
+ (xy 266.079694 64.47489) (xy 265.770974 64.783072) (xy 265.60369 65.185936) (xy 265.60331 65.622151) (xy 265.76989 66.025306)
+ (xy 266.078072 66.334026) (xy 266.480936 66.50131) (xy 266.917151 66.50169) (xy 267.320306 66.33511) (xy 267.629026 66.026928)
+ (xy 267.79631 65.624064) (xy 267.79669 65.187849) (xy 267.79669 70.658348) (xy 267.752849 70.65831) (xy 267.349694 70.82489)
+ (xy 267.040974 71.133072) (xy 266.87369 71.535936) (xy 266.87331 71.972151) (xy 267.03989 72.375306) (xy 267.348072 72.684026)
+ (xy 267.750936 72.85131) (xy 268.187151 72.85169) (xy 268.590306 72.68511) (xy 268.899026 72.376928) (xy 269.06631 71.974064)
+ (xy 269.06669 71.537849) (xy 269.06669 73.198348) (xy 269.022849 73.19831) (xy 268.619694 73.36489) (xy 268.310974 73.673072)
+ (xy 268.14369 74.075936) (xy 268.14331 74.512151) (xy 268.30989 74.915306) (xy 268.618072 75.224026) (xy 269.020936 75.39131)
+ (xy 269.457151 75.39169) (xy 269.860306 75.22511) (xy 270.169026 74.916928) (xy 270.33631 74.514064) (xy 270.33669 74.077849)
+ (xy 270.33669 79.545413) (xy 270.310461 79.54497) (xy 269.904687 79.705066) (xy 269.873257 79.726066) (xy 269.830177 79.929822)
+ (xy 270.51 80.609645) (xy 271.189823 79.929822) (xy 271.189823 80.000532) (xy 270.545355 80.645) (xy 270.559497 80.659142)
+ (xy 270.524142 80.694497) (xy 270.51 80.680355) (xy 270.474645 80.71571) (xy 270.474645 80.645) (xy 269.794822 79.965177)
+ (xy 269.591066 80.008257) (xy 269.417345 80.408387) (xy 269.40997 80.844539) (xy 269.570066 81.250313) (xy 269.591066 81.281743)
+ (xy 269.794822 81.324823) (xy 270.474645 80.645) (xy 270.474645 80.71571) (xy 269.830177 81.360178) (xy 269.873257 81.563934)
+ (xy 270.273387 81.737655) (xy 270.709539 81.74503) (xy 271.009678 81.626611) (xy 271.230105 81.847423) (xy 271.586308 81.995332)
+ (xy 271.971999 81.995668) (xy 272.32846 81.848382) (xy 272.55182 81.62541) (xy 272.830936 81.74131) (xy 273.267151 81.74169)
+ (xy 273.670306 81.57511) (xy 273.979026 81.266928) (xy 274.14631 80.864064) (xy 274.14643 80.725349) (xy 274.493428 80.725651)
+ (xy 274.49331 80.862151) (xy 274.65989 81.265306) (xy 274.968072 81.574026) (xy 275.370936 81.74131) (xy 275.807151 81.74169)
+ (xy 276.210306 81.57511) (xy 276.519026 81.266928) (xy 276.68631 80.864064) (xy 276.68669 80.427849) (xy 276.68669 82.088348)
+ (xy 276.642849 82.08831) (xy 276.239694 82.25489) (xy 275.930974 82.563072) (xy 275.76369 82.965936) (xy 275.76331 83.402151)
+ (xy 275.92989 83.805306) (xy 276.238072 84.114026) (xy 276.640936 84.28131) (xy 277.077151 84.28169) (xy 277.480306 84.11511)
+ (xy 277.789026 83.806928) (xy 277.95631 83.404064) (xy 277.95669 82.967849) (xy 277.95669 88.438348) (xy 277.912849 88.43831)
+ (xy 277.509694 88.60489) (xy 277.200974 88.913072) (xy 277.03369 89.315936) (xy 277.03331 89.752151) (xy 277.19989 90.155306)
+ (xy 277.508072 90.464026) (xy 277.910936 90.63131) (xy 278.347151 90.63169) (xy 278.750306 90.46511) (xy 279.059026 90.156928)
+ (xy 279.22631 89.754064) (xy 279.22669 89.317849) (xy 279.22669 90.978348) (xy 279.182849 90.97831) (xy 278.779694 91.14489)
+ (xy 278.470974 91.453072) (xy 278.30369 91.855936) (xy 278.30331 92.292151) (xy 278.46989 92.695306) (xy 278.778072 93.004026)
+ (xy 279.180936 93.17131) (xy 279.617151 93.17169) (xy 280.020306 93.00511) (xy 280.329026 92.696928) (xy 280.49631 92.294064)
+ (xy 280.49669 91.857849) (xy 280.49669 97.328348) (xy 280.452849 97.32831) (xy 280.049694 97.49489) (xy 279.740974 97.803072)
+ (xy 279.57369 98.205936) (xy 279.57331 98.642151) (xy 279.73989 99.045306) (xy 280.048072 99.354026) (xy 280.450936 99.52131)
+ (xy 280.887151 99.52169) (xy 281.290306 99.35511) (xy 281.599026 99.046928) (xy 281.76631 98.644064) (xy 281.76669 98.207849)
+ (xy 281.76669 99.8685) (xy 281.264071 99.8685) (xy 281.071111 99.948426) (xy 280.923426 100.096111) (xy 280.8435 100.289071)
+ (xy 280.8435 100.497929) (xy 280.8435 101.640929) (xy 280.923426 101.833889) (xy 281.071111 101.981574) (xy 281.264071 102.0615)
+ (xy 281.472929 102.0615) (xy 282.615929 102.0615) (xy 282.808889 101.981574) (xy 282.956574 101.833889) (xy 283.0365 101.640929)
+ (xy 283.0365 109.179071) (xy 282.956574 108.986111) (xy 282.808889 108.838426) (xy 282.615929 108.7585) (xy 282.407071 108.7585)
+ (xy 281.76669 108.7585) (xy 281.76669 107.097849) (xy 281.60011 106.694694) (xy 281.291928 106.385974) (xy 280.889064 106.21869)
+ (xy 280.49669 106.218348) (xy 280.49669 100.747849) (xy 280.33011 100.344694) (xy 280.021928 100.035974) (xy 279.619064 99.86869)
+ (xy 279.22669 99.868348) (xy 279.22669 98.207849) (xy 279.06011 97.804694) (xy 278.751928 97.495974) (xy 278.349064 97.32869)
+ (xy 277.95669 97.328348) (xy 277.95669 91.857849) (xy 277.79011 91.454694) (xy 277.481928 91.145974) (xy 277.079064 90.97869)
+ (xy 276.68669 90.978348) (xy 276.68669 89.317849) (xy 276.52011 88.914694) (xy 276.211928 88.605974) (xy 275.809064 88.43869)
+ (xy 275.41669 88.438348) (xy 275.41669 82.967849) (xy 275.25011 82.564694) (xy 274.941928 82.255974) (xy 274.539064 82.08869)
+ (xy 274.102849 82.08831) (xy 273.699694 82.25489) (xy 273.390974 82.563072) (xy 273.22369 82.965936) (xy 273.22331 83.402151)
+ (xy 273.38989 83.805306) (xy 273.698072 84.114026) (xy 274.100936 84.28131) (xy 274.537151 84.28169) (xy 274.940306 84.11511)
+ (xy 275.249026 83.806928) (xy 275.41631 83.404064) (xy 275.41669 82.967849) (xy 275.41669 88.438348) (xy 275.372849 88.43831)
+ (xy 274.969694 88.60489) (xy 274.660974 88.913072) (xy 274.49369 89.315936) (xy 274.49331 89.752151) (xy 274.65989 90.155306)
+ (xy 274.968072 90.464026) (xy 275.370936 90.63131) (xy 275.807151 90.63169) (xy 276.210306 90.46511) (xy 276.519026 90.156928)
+ (xy 276.68631 89.754064) (xy 276.68669 89.317849) (xy 276.68669 90.978348) (xy 276.642849 90.97831) (xy 276.239694 91.14489)
+ (xy 275.930974 91.453072) (xy 275.76369 91.855936) (xy 275.76331 92.292151) (xy 275.92989 92.695306) (xy 276.238072 93.004026)
+ (xy 276.640936 93.17131) (xy 277.077151 93.17169) (xy 277.480306 93.00511) (xy 277.789026 92.696928) (xy 277.95631 92.294064)
+ (xy 277.95669 91.857849) (xy 277.95669 97.328348) (xy 277.912849 97.32831) (xy 277.509694 97.49489) (xy 277.200974 97.803072)
+ (xy 277.03369 98.205936) (xy 277.03331 98.642151) (xy 277.19989 99.045306) (xy 277.508072 99.354026) (xy 277.910936 99.52131)
+ (xy 278.347151 99.52169) (xy 278.750306 99.35511) (xy 279.059026 99.046928) (xy 279.22631 98.644064) (xy 279.22669 98.207849)
+ (xy 279.22669 99.868348) (xy 279.182849 99.86831) (xy 278.779694 100.03489) (xy 278.470974 100.343072) (xy 278.30369 100.745936)
+ (xy 278.30331 101.182151) (xy 278.46989 101.585306) (xy 278.778072 101.894026) (xy 279.180936 102.06131) (xy 279.617151 102.06169)
+ (xy 280.020306 101.89511) (xy 280.329026 101.586928) (xy 280.49631 101.184064) (xy 280.49669 100.747849) (xy 280.49669 106.218348)
+ (xy 280.452849 106.21831) (xy 280.049694 106.38489) (xy 279.740974 106.693072) (xy 279.57369 107.095936) (xy 279.57331 107.532151)
+ (xy 279.73989 107.935306) (xy 280.048072 108.244026) (xy 280.450936 108.41131) (xy 280.887151 108.41169) (xy 281.290306 108.24511)
+ (xy 281.599026 107.936928) (xy 281.76631 107.534064) (xy 281.76669 107.097849) (xy 281.76669 108.7585) (xy 281.264071 108.7585)
+ (xy 281.071111 108.838426) (xy 280.923426 108.986111) (xy 280.8435 109.179071) (xy 280.8435 109.387929) (xy 280.8435 110.530929)
+ (xy 280.923426 110.723889) (xy 281.071111 110.871574) (xy 281.264071 110.9515) (xy 281.472929 110.9515) (xy 282.615929 110.9515)
+ (xy 282.808889 110.871574) (xy 282.956574 110.723889) (xy 283.0365 110.530929) (xy 283.0365 118.069071) (xy 282.956574 117.876111)
+ (xy 282.808889 117.728426) (xy 282.615929 117.6485) (xy 282.407071 117.6485) (xy 281.76669 117.6485) (xy 281.76669 115.987849)
+ (xy 281.639668 115.680431) (xy 281.639668 111.568001) (xy 281.492382 111.21154) (xy 281.219895 110.938577) (xy 280.863692 110.790668)
+ (xy 280.49669 110.790348) (xy 280.49669 109.637849) (xy 280.33011 109.234694) (xy 280.021928 108.925974) (xy 279.619064 108.75869)
+ (xy 279.22669 108.758348) (xy 279.22669 107.097849) (xy 279.06011 106.694694) (xy 278.751928 106.385974) (xy 278.349064 106.21869)
+ (xy 277.95669 106.218348) (xy 277.95669 100.747849) (xy 277.79011 100.344694) (xy 277.481928 100.035974) (xy 277.079064 99.86869)
+ (xy 276.68669 99.868348) (xy 276.68669 98.207849) (xy 276.52011 97.804694) (xy 276.211928 97.495974) (xy 275.809064 97.32869)
+ (xy 275.41669 97.328348) (xy 275.41669 91.857849) (xy 275.25011 91.454694) (xy 274.941928 91.145974) (xy 274.539064 90.97869)
+ (xy 274.14669 90.978348) (xy 274.14669 89.317849) (xy 273.98011 88.914694) (xy 273.671928 88.605974) (xy 273.269064 88.43869)
+ (xy 272.87669 88.438348) (xy 272.87669 82.967849) (xy 272.71011 82.564694) (xy 272.401928 82.255974) (xy 271.999064 82.08869)
+ (xy 271.562849 82.08831) (xy 271.159694 82.25489) (xy 270.850974 82.563072) (xy 270.68369 82.965936) (xy 270.68331 83.402151)
+ (xy 270.84989 83.805306) (xy 271.158072 84.114026) (xy 271.560936 84.28131) (xy 271.997151 84.28169) (xy 272.400306 84.11511)
+ (xy 272.709026 83.806928) (xy 272.87631 83.404064) (xy 272.87669 82.967849) (xy 272.87669 88.438348) (xy 272.832849 88.43831)
+ (xy 272.429694 88.60489) (xy 272.120974 88.913072) (xy 271.95369 89.315936) (xy 271.95331 89.752151) (xy 272.11989 90.155306)
+ (xy 272.428072 90.464026) (xy 272.830936 90.63131) (xy 273.267151 90.63169) (xy 273.670306 90.46511) (xy 273.979026 90.156928)
+ (xy 274.14631 89.754064) (xy 274.14669 89.317849) (xy 274.14669 90.978348) (xy 274.102849 90.97831) (xy 273.699694 91.14489)
+ (xy 273.390974 91.453072) (xy 273.22369 91.855936) (xy 273.22331 92.292151) (xy 273.38989 92.695306) (xy 273.698072 93.004026)
+ (xy 274.100936 93.17131) (xy 274.537151 93.17169) (xy 274.940306 93.00511) (xy 275.249026 92.696928) (xy 275.41631 92.294064)
+ (xy 275.41669 91.857849) (xy 275.41669 97.328348) (xy 275.372849 97.32831) (xy 274.969694 97.49489) (xy 274.660974 97.803072)
+ (xy 274.49369 98.205936) (xy 274.49331 98.642151) (xy 274.65989 99.045306) (xy 274.968072 99.354026) (xy 275.370936 99.52131)
+ (xy 275.807151 99.52169) (xy 276.210306 99.35511) (xy 276.519026 99.046928) (xy 276.68631 98.644064) (xy 276.68669 98.207849)
+ (xy 276.68669 99.868348) (xy 276.642849 99.86831) (xy 276.239694 100.03489) (xy 275.930974 100.343072) (xy 275.76369 100.745936)
+ (xy 275.76331 101.182151) (xy 275.92989 101.585306) (xy 276.238072 101.894026) (xy 276.640936 102.06131) (xy 277.077151 102.06169)
+ (xy 277.480306 101.89511) (xy 277.789026 101.586928) (xy 277.95631 101.184064) (xy 277.95669 100.747849) (xy 277.95669 106.218348)
+ (xy 277.912849 106.21831) (xy 277.509694 106.38489) (xy 277.200974 106.693072) (xy 277.03369 107.095936) (xy 277.03331 107.532151)
+ (xy 277.19989 107.935306) (xy 277.508072 108.244026) (xy 277.910936 108.41131) (xy 278.347151 108.41169) (xy 278.750306 108.24511)
+ (xy 279.059026 107.936928) (xy 279.22631 107.534064) (xy 279.22669 107.097849) (xy 279.22669 108.758348) (xy 279.182849 108.75831)
+ (xy 278.779694 108.92489) (xy 278.470974 109.233072) (xy 278.30369 109.635936) (xy 278.303569 109.77465) (xy 277.956571 109.774348)
+ (xy 277.95669 109.637849) (xy 277.79011 109.234694) (xy 277.481928 108.925974) (xy 277.079064 108.75869) (xy 276.68669 108.758348)
+ (xy 276.68669 107.097849) (xy 276.52011 106.694694) (xy 276.211928 106.385974) (xy 275.809064 106.21869) (xy 275.41669 106.218348)
+ (xy 275.41669 100.747849) (xy 275.25011 100.344694) (xy 274.941928 100.035974) (xy 274.539064 99.86869) (xy 274.14669 99.868348)
+ (xy 274.14669 98.207849) (xy 273.98011 97.804694) (xy 273.671928 97.495974) (xy 273.269064 97.32869) (xy 272.87669 97.328348)
+ (xy 272.87669 91.857849) (xy 272.71011 91.454694) (xy 272.401928 91.145974) (xy 271.999064 90.97869) (xy 271.61003 90.978351)
+ (xy 271.61003 89.335461) (xy 271.449934 88.929687) (xy 271.428934 88.898257) (xy 271.225178 88.855177) (xy 271.189823 88.890532)
+ (xy 271.189823 88.819822) (xy 271.146743 88.616066) (xy 270.746613 88.442345) (xy 270.33669 88.435413) (xy 270.33669 82.967849)
+ (xy 270.17011 82.564694) (xy 269.861928 82.255974) (xy 269.459064 82.08869) (xy 269.06669 82.088348) (xy 269.06669 80.427849)
+ (xy 268.90011 80.024694) (xy 268.591928 79.715974) (xy 268.189064 79.54869) (xy 267.79669 79.548348) (xy 267.79669 74.077849)
+ (xy 267.63011 73.674694) (xy 267.321928 73.365974) (xy 266.919064 73.19869) (xy 266.52669 73.198348) (xy 266.52669 71.537849)
+ (xy 266.36011 71.134694) (xy 266.051928 70.825974) (xy 265.649064 70.65869) (xy 265.25669 70.658348) (xy 265.25669 65.187849)
+ (xy 265.09011 64.784694) (xy 264.781928 64.475974) (xy 264.379064 64.30869) (xy 263.942849 64.30831) (xy 263.539694 64.47489)
+ (xy 263.230974 64.783072) (xy 263.06369 65.185936) (xy 263.06331 65.622151) (xy 263.22989 66.025306) (xy 263.538072 66.334026)
+ (xy 263.940936 66.50131) (xy 264.377151 66.50169) (xy 264.780306 66.33511) (xy 265.089026 66.026928) (xy 265.25631 65.624064)
+ (xy 265.25669 65.187849) (xy 265.25669 70.658348) (xy 265.212849 70.65831) (xy 264.809694 70.82489) (xy 264.500974 71.133072)
+ (xy 264.33369 71.535936) (xy 264.33331 71.972151) (xy 264.49989 72.375306) (xy 264.808072 72.684026) (xy 265.210936 72.85131)
+ (xy 265.647151 72.85169) (xy 266.050306 72.68511) (xy 266.359026 72.376928) (xy 266.52631 71.974064) (xy 266.52669 71.537849)
+ (xy 266.52669 73.198348) (xy 266.482849 73.19831) (xy 266.079694 73.36489) (xy 265.770974 73.673072) (xy 265.60369 74.075936)
+ (xy 265.60331 74.512151) (xy 265.76989 74.915306) (xy 266.078072 75.224026) (xy 266.480936 75.39131) (xy 266.917151 75.39169)
+ (xy 267.320306 75.22511) (xy 267.629026 74.916928) (xy 267.79631 74.514064) (xy 267.79669 74.077849) (xy 267.79669 79.548348)
+ (xy 267.752849 79.54831) (xy 267.349694 79.71489) (xy 267.040974 80.023072) (xy 266.87369 80.425936) (xy 266.87331 80.862151)
+ (xy 267.03989 81.265306) (xy 267.348072 81.574026) (xy 267.750936 81.74131) (xy 268.187151 81.74169) (xy 268.590306 81.57511)
+ (xy 268.899026 81.266928) (xy 269.06631 80.864064) (xy 269.06669 80.427849) (xy 269.06669 82.088348) (xy 269.022849 82.08831)
+ (xy 268.619694 82.25489) (xy 268.310974 82.563072) (xy 268.14369 82.965936) (xy 268.14331 83.402151) (xy 268.30989 83.805306)
+ (xy 268.618072 84.114026) (xy 269.020936 84.28131) (xy 269.457151 84.28169) (xy 269.860306 84.11511) (xy 270.169026 83.806928)
+ (xy 270.33631 83.404064) (xy 270.33669 82.967849) (xy 270.33669 88.435413) (xy 270.310461 88.43497) (xy 269.904687 88.595066)
+ (xy 269.873257 88.616066) (xy 269.830177 88.819822) (xy 270.51 89.499645) (xy 271.189823 88.819822) (xy 271.189823 88.890532)
+ (xy 270.545355 89.535) (xy 271.225178 90.214823) (xy 271.428934 90.171743) (xy 271.602655 89.771613) (xy 271.61003 89.335461)
+ (xy 271.61003 90.978351) (xy 271.562849 90.97831) (xy 271.189823 91.13244) (xy 271.189823 90.250178) (xy 270.51 89.570355)
+ (xy 270.474645 89.60571) (xy 270.474645 89.535) (xy 269.794822 88.855177) (xy 269.591066 88.898257) (xy 269.417345 89.298387)
+ (xy 269.40997 89.734539) (xy 269.570066 90.140313) (xy 269.591066 90.171743) (xy 269.794822 90.214823) (xy 270.474645 89.535)
+ (xy 270.474645 89.60571) (xy 269.830177 90.250178) (xy 269.873257 90.453934) (xy 270.273387 90.627655) (xy 270.709539 90.63503)
+ (xy 271.115313 90.474934) (xy 271.146743 90.453934) (xy 271.189823 90.250178) (xy 271.189823 91.13244) (xy 271.159694 91.14489)
+ (xy 270.850974 91.453072) (xy 270.68369 91.855936) (xy 270.68331 92.292151) (xy 270.84989 92.695306) (xy 271.158072 93.004026)
+ (xy 271.560936 93.17131) (xy 271.997151 93.17169) (xy 272.400306 93.00511) (xy 272.709026 92.696928) (xy 272.87631 92.294064)
+ (xy 272.87669 91.857849) (xy 272.87669 97.328348) (xy 272.832849 97.32831) (xy 272.429694 97.49489) (xy 272.120974 97.803072)
+ (xy 271.95369 98.205936) (xy 271.95331 98.642151) (xy 272.11989 99.045306) (xy 272.428072 99.354026) (xy 272.830936 99.52131)
+ (xy 273.267151 99.52169) (xy 273.670306 99.35511) (xy 273.979026 99.046928) (xy 274.14631 98.644064) (xy 274.14669 98.207849)
+ (xy 274.14669 99.868348) (xy 274.102849 99.86831) (xy 273.699694 100.03489) (xy 273.390974 100.343072) (xy 273.22369 100.745936)
+ (xy 273.22331 101.182151) (xy 273.38989 101.585306) (xy 273.598018 101.793797) (xy 273.243692 101.646668) (xy 272.858001 101.646332)
+ (xy 272.502282 101.793311) (xy 272.709026 101.586928) (xy 272.87631 101.184064) (xy 272.87669 100.747849) (xy 272.71011 100.344694)
+ (xy 272.401928 100.035974) (xy 271.999064 99.86869) (xy 271.61003 99.868351) (xy 271.61003 98.225461) (xy 271.449934 97.819687)
+ (xy 271.428934 97.788257) (xy 271.225178 97.745177) (xy 271.189823 97.780532) (xy 271.189823 97.709822) (xy 271.146743 97.506066)
+ (xy 270.746613 97.332345) (xy 270.33669 97.325413) (xy 270.33669 91.857849) (xy 270.17011 91.454694) (xy 269.861928 91.145974)
+ (xy 269.459064 90.97869) (xy 269.06669 90.978348) (xy 269.06669 89.317849) (xy 268.90011 88.914694) (xy 268.591928 88.605974)
+ (xy 268.189064 88.43869) (xy 267.79669 88.438348) (xy 267.79669 82.967849) (xy 267.63011 82.564694) (xy 267.321928 82.255974)
+ (xy 266.919064 82.08869) (xy 266.52669 82.088348) (xy 266.52669 80.427849) (xy 266.36011 80.024694) (xy 266.051928 79.715974)
+ (xy 265.649064 79.54869) (xy 265.25669 79.548348) (xy 265.25669 74.077849) (xy 265.09011 73.674694) (xy 264.781928 73.365974)
+ (xy 264.379064 73.19869) (xy 263.98669 73.198348) (xy 263.98669 71.537849) (xy 263.82011 71.134694) (xy 263.511928 70.825974)
+ (xy 263.109064 70.65869) (xy 262.672849 70.65831) (xy 262.269694 70.82489) (xy 261.960974 71.133072) (xy 261.79369 71.535936)
+ (xy 261.79331 71.972151) (xy 261.95989 72.375306) (xy 262.268072 72.684026) (xy 262.670936 72.85131) (xy 263.107151 72.85169)
+ (xy 263.510306 72.68511) (xy 263.819026 72.376928) (xy 263.98631 71.974064) (xy 263.98669 71.537849) (xy 263.98669 73.198348)
+ (xy 263.942849 73.19831) (xy 263.539694 73.36489) (xy 263.230974 73.673072) (xy 263.06369 74.075936) (xy 263.06331 74.512151)
+ (xy 263.22989 74.915306) (xy 263.538072 75.224026) (xy 263.940936 75.39131) (xy 264.377151 75.39169) (xy 264.780306 75.22511)
+ (xy 265.089026 74.916928) (xy 265.25631 74.514064) (xy 265.25669 74.077849) (xy 265.25669 79.548348) (xy 265.212849 79.54831)
+ (xy 265.129668 79.582679) (xy 265.129668 78.548001) (xy 264.982382 78.19154) (xy 264.709895 77.918577) (xy 264.353692 77.770668)
+ (xy 263.968001 77.770332) (xy 263.61154 77.917618) (xy 263.338577 78.190105) (xy 263.190668 78.546308) (xy 263.190332 78.931999)
+ (xy 263.337618 79.28846) (xy 263.610105 79.561423) (xy 263.966308 79.709332) (xy 264.351999 79.709668) (xy 264.70846 79.562382)
+ (xy 264.981423 79.289895) (xy 265.129332 78.933692) (xy 265.129668 78.548001) (xy 265.129668 79.582679) (xy 264.809694 79.71489)
+ (xy 264.500974 80.023072) (xy 264.33369 80.425936) (xy 264.33331 80.862151) (xy 264.49989 81.265306) (xy 264.808072 81.574026)
+ (xy 265.210936 81.74131) (xy 265.647151 81.74169) (xy 266.050306 81.57511) (xy 266.359026 81.266928) (xy 266.52631 80.864064)
+ (xy 266.52669 80.427849) (xy 266.52669 82.088348) (xy 266.482849 82.08831) (xy 266.079694 82.25489) (xy 265.770974 82.563072)
+ (xy 265.60369 82.965936) (xy 265.60331 83.402151) (xy 265.76989 83.805306) (xy 266.078072 84.114026) (xy 266.480936 84.28131)
+ (xy 266.917151 84.28169) (xy 267.320306 84.11511) (xy 267.629026 83.806928) (xy 267.79631 83.404064) (xy 267.79669 82.967849)
+ (xy 267.79669 88.438348) (xy 267.752849 88.43831) (xy 267.349694 88.60489) (xy 267.040974 88.913072) (xy 266.87369 89.315936)
+ (xy 266.87331 89.752151) (xy 267.03989 90.155306) (xy 267.348072 90.464026) (xy 267.750936 90.63131) (xy 268.187151 90.63169)
+ (xy 268.590306 90.46511) (xy 268.899026 90.156928) (xy 269.06631 89.754064) (xy 269.06669 89.317849) (xy 269.06669 90.978348)
+ (xy 269.022849 90.97831) (xy 268.619694 91.14489) (xy 268.310974 91.453072) (xy 268.14369 91.855936) (xy 268.14331 92.292151)
+ (xy 268.30989 92.695306) (xy 268.618072 93.004026) (xy 269.020936 93.17131) (xy 269.457151 93.17169) (xy 269.860306 93.00511)
+ (xy 270.169026 92.696928) (xy 270.33631 92.294064) (xy 270.33669 91.857849) (xy 270.33669 97.325413) (xy 270.310461 97.32497)
+ (xy 269.904687 97.485066) (xy 269.873257 97.506066) (xy 269.830177 97.709822) (xy 270.51 98.389645) (xy 271.189823 97.709822)
+ (xy 271.189823 97.780532) (xy 270.545355 98.425) (xy 271.225178 99.104823) (xy 271.428934 99.061743) (xy 271.602655 98.661613)
+ (xy 271.61003 98.225461) (xy 271.61003 99.868351) (xy 271.562849 99.86831) (xy 271.189823 100.02244) (xy 271.189823 99.140178)
+ (xy 270.51 98.460355) (xy 270.474645 98.49571) (xy 270.474645 98.425) (xy 269.794822 97.745177) (xy 269.591066 97.788257)
+ (xy 269.417345 98.188387) (xy 269.40997 98.624539) (xy 269.570066 99.030313) (xy 269.591066 99.061743) (xy 269.794822 99.104823)
+ (xy 270.474645 98.425) (xy 270.474645 98.49571) (xy 269.830177 99.140178) (xy 269.873257 99.343934) (xy 270.273387 99.517655)
+ (xy 270.709539 99.52503) (xy 271.115313 99.364934) (xy 271.146743 99.343934) (xy 271.189823 99.140178) (xy 271.189823 100.02244)
+ (xy 271.159694 100.03489) (xy 270.850974 100.343072) (xy 270.68369 100.745936) (xy 270.68331 101.182151) (xy 270.84989 101.585306)
+ (xy 271.158072 101.894026) (xy 271.560936 102.06131) (xy 271.997151 102.06169) (xy 272.399563 101.895416) (xy 272.228577 102.066105)
+ (xy 272.080668 102.422308) (xy 272.080332 102.807999) (xy 272.227618 103.16446) (xy 272.500105 103.437423) (xy 272.856308 103.585332)
+ (xy 273.241999 103.585668) (xy 273.59846 103.438382) (xy 273.871423 103.165895) (xy 274.019332 102.809692) (xy 274.019668 102.424001)
+ (xy 273.872382 102.06754) (xy 273.699948 101.894805) (xy 274.100936 102.06131) (xy 274.537151 102.06169) (xy 274.940306 101.89511)
+ (xy 275.249026 101.586928) (xy 275.41631 101.184064) (xy 275.41669 100.747849) (xy 275.41669 106.218348) (xy 275.372849 106.21831)
+ (xy 274.969694 106.38489) (xy 274.660974 106.693072) (xy 274.49369 107.095936) (xy 274.49331 107.532151) (xy 274.65989 107.935306)
+ (xy 274.968072 108.244026) (xy 275.370936 108.41131) (xy 275.807151 108.41169) (xy 276.210306 108.24511) (xy 276.519026 107.936928)
+ (xy 276.68631 107.534064) (xy 276.68669 107.097849) (xy 276.68669 108.758348) (xy 276.642849 108.75831) (xy 276.239694 108.92489)
+ (xy 275.930974 109.233072) (xy 275.76369 109.635936) (xy 275.76331 110.072151) (xy 275.92989 110.475306) (xy 276.238072 110.784026)
+ (xy 276.640936 110.95131) (xy 277.077151 110.95169) (xy 277.160348 110.917313) (xy 277.160332 110.935999) (xy 277.307618 111.29246)
+ (xy 277.580105 111.565423) (xy 277.936308 111.713332) (xy 278.321999 111.713668) (xy 278.67846 111.566382) (xy 278.951423 111.293895)
+ (xy 279.099332 110.937692) (xy 279.099349 110.917432) (xy 279.180936 110.95131) (xy 279.617151 110.95169) (xy 280.020306 110.78511)
+ (xy 280.329026 110.476928) (xy 280.49631 110.074064) (xy 280.49669 109.637849) (xy 280.49669 110.790348) (xy 280.478001 110.790332)
+ (xy 280.12154 110.937618) (xy 279.848577 111.210105) (xy 279.700668 111.566308) (xy 279.700332 111.951999) (xy 279.847618 112.30846)
+ (xy 280.120105 112.581423) (xy 280.476308 112.729332) (xy 280.861999 112.729668) (xy 281.21846 112.582382) (xy 281.491423 112.309895)
+ (xy 281.639332 111.953692) (xy 281.639668 111.568001) (xy 281.639668 115.680431) (xy 281.60011 115.584694) (xy 281.291928 115.275974)
+ (xy 280.889064 115.10869) (xy 280.452849 115.10831) (xy 280.049694 115.27489) (xy 279.740974 115.583072) (xy 279.57369 115.985936)
+ (xy 279.57331 116.422151) (xy 279.73989 116.825306) (xy 280.048072 117.134026) (xy 280.450936 117.30131) (xy 280.887151 117.30169)
+ (xy 281.290306 117.13511) (xy 281.599026 116.826928) (xy 281.76631 116.424064) (xy 281.76669 115.987849) (xy 281.76669 117.6485)
+ (xy 281.264071 117.6485) (xy 281.071111 117.728426) (xy 280.923426 117.876111) (xy 280.8435 118.069071) (xy 280.8435 118.277929)
+ (xy 280.8435 119.420929) (xy 280.923426 119.613889) (xy 281.071111 119.761574) (xy 281.264071 119.8415) (xy 281.472929 119.8415)
+ (xy 282.615929 119.8415) (xy 282.808889 119.761574) (xy 282.956574 119.613889) (xy 283.0365 119.420929) (xy 283.0365 126.959071)
+ (xy 282.956574 126.766111) (xy 282.808889 126.618426) (xy 282.615929 126.5385) (xy 282.407071 126.5385) (xy 281.76669 126.5385)
+ (xy 281.76669 124.877849) (xy 281.60011 124.474694) (xy 281.291928 124.165974) (xy 280.889064 123.99869) (xy 280.49669 123.998348)
+ (xy 280.49669 118.527849) (xy 280.33011 118.124694) (xy 280.021928 117.815974) (xy 279.619064 117.64869) (xy 279.22669 117.648348)
+ (xy 279.22669 115.987849) (xy 279.06011 115.584694) (xy 278.751928 115.275974) (xy 278.349064 115.10869) (xy 277.912849 115.10831)
+ (xy 277.509694 115.27489) (xy 277.200974 115.583072) (xy 277.03369 115.985936) (xy 277.03331 116.422151) (xy 277.19989 116.825306)
+ (xy 277.508072 117.134026) (xy 277.910936 117.30131) (xy 278.347151 117.30169) (xy 278.750306 117.13511) (xy 279.059026 116.826928)
+ (xy 279.22631 116.424064) (xy 279.22669 115.987849) (xy 279.22669 117.648348) (xy 279.182849 117.64831) (xy 278.779694 117.81489)
+ (xy 278.470974 118.123072) (xy 278.30369 118.525936) (xy 278.30331 118.962151) (xy 278.46989 119.365306) (xy 278.778072 119.674026)
+ (xy 279.180936 119.84131) (xy 279.617151 119.84169) (xy 280.020306 119.67511) (xy 280.329026 119.366928) (xy 280.49631 118.964064)
+ (xy 280.49669 118.527849) (xy 280.49669 123.998348) (xy 280.452849 123.99831) (xy 280.049694 124.16489) (xy 279.740974 124.473072)
+ (xy 279.57369 124.875936) (xy 279.57331 125.312151) (xy 279.73989 125.715306) (xy 280.048072 126.024026) (xy 280.450936 126.19131)
+ (xy 280.887151 126.19169) (xy 281.290306 126.02511) (xy 281.599026 125.716928) (xy 281.76631 125.314064) (xy 281.76669 124.877849)
+ (xy 281.76669 126.5385) (xy 281.264071 126.5385) (xy 281.071111 126.618426) (xy 280.923426 126.766111) (xy 280.8435 126.959071)
+ (xy 280.8435 127.167929) (xy 280.8435 128.310929) (xy 280.923426 128.503889) (xy 281.071111 128.651574) (xy 281.264071 128.7315)
+ (xy 281.472929 128.7315) (xy 282.615929 128.7315) (xy 282.808889 128.651574) (xy 282.956574 128.503889) (xy 283.0365 128.310929)
+ (xy 283.0365 133.7394) (xy 280.49669 133.7394) (xy 280.49669 127.417849) (xy 280.33011 127.014694) (xy 280.021928 126.705974)
+ (xy 279.619064 126.53869) (xy 279.22669 126.538348) (xy 279.22669 124.877849) (xy 279.06011 124.474694) (xy 278.751928 124.165974)
+ (xy 278.349064 123.99869) (xy 277.95669 123.998348) (xy 277.95669 118.527849) (xy 277.79011 118.124694) (xy 277.481928 117.815974)
+ (xy 277.079064 117.64869) (xy 276.68669 117.648348) (xy 276.68669 115.987849) (xy 276.52011 115.584694) (xy 276.211928 115.275974)
+ (xy 275.809064 115.10869) (xy 275.41669 115.108348) (xy 275.41669 109.637849) (xy 275.25011 109.234694) (xy 274.941928 108.925974)
+ (xy 274.539064 108.75869) (xy 274.14669 108.758348) (xy 274.14669 107.097849) (xy 273.98011 106.694694) (xy 273.671928 106.385974)
+ (xy 273.269064 106.21869) (xy 272.832849 106.21831) (xy 272.429694 106.38489) (xy 272.120974 106.693072) (xy 271.95369 107.095936)
+ (xy 271.95331 107.532151) (xy 272.11989 107.935306) (xy 272.428072 108.244026) (xy 272.830936 108.41131) (xy 273.267151 108.41169)
+ (xy 273.670306 108.24511) (xy 273.979026 107.936928) (xy 274.14631 107.534064) (xy 274.14669 107.097849) (xy 274.14669 108.758348)
+ (xy 274.102849 108.75831) (xy 273.699694 108.92489) (xy 273.390974 109.233072) (xy 273.22369 109.635936) (xy 273.22331 110.072151)
+ (xy 273.38989 110.475306) (xy 273.698072 110.784026) (xy 274.100936 110.95131) (xy 274.537151 110.95169) (xy 274.940306 110.78511)
+ (xy 275.249026 110.476928) (xy 275.41631 110.074064) (xy 275.41669 109.637849) (xy 275.41669 115.108348) (xy 275.372849 115.10831)
+ (xy 274.969694 115.27489) (xy 274.660974 115.583072) (xy 274.49369 115.985936) (xy 274.49331 116.422151) (xy 274.65989 116.825306)
+ (xy 274.968072 117.134026) (xy 275.370936 117.30131) (xy 275.807151 117.30169) (xy 276.210306 117.13511) (xy 276.519026 116.826928)
+ (xy 276.68631 116.424064) (xy 276.68669 115.987849) (xy 276.68669 117.648348) (xy 276.642849 117.64831) (xy 276.239694 117.81489)
+ (xy 275.930974 118.123072) (xy 275.76369 118.525936) (xy 275.76331 118.962151) (xy 275.92989 119.365306) (xy 276.238072 119.674026)
+ (xy 276.640936 119.84131) (xy 277.077151 119.84169) (xy 277.480306 119.67511) (xy 277.789026 119.366928) (xy 277.95631 118.964064)
+ (xy 277.95669 118.527849) (xy 277.95669 123.998348) (xy 277.912849 123.99831) (xy 277.509694 124.16489) (xy 277.200974 124.473072)
+ (xy 277.03369 124.875936) (xy 277.03331 125.312151) (xy 277.19989 125.715306) (xy 277.508072 126.024026) (xy 277.910936 126.19131)
+ (xy 278.347151 126.19169) (xy 278.750306 126.02511) (xy 279.059026 125.716928) (xy 279.22631 125.314064) (xy 279.22669 124.877849)
+ (xy 279.22669 126.538348) (xy 279.182849 126.53831) (xy 278.779694 126.70489) (xy 278.470974 127.013072) (xy 278.30369 127.415936)
+ (xy 278.30331 127.852151) (xy 278.46989 128.255306) (xy 278.778072 128.564026) (xy 279.180936 128.73131) (xy 279.617151 128.73169)
+ (xy 280.020306 128.56511) (xy 280.329026 128.256928) (xy 280.49631 127.854064) (xy 280.49669 127.417849) (xy 280.49669 133.7394)
+ (xy 277.95669 133.7394) (xy 277.95669 127.417849) (xy 277.79011 127.014694) (xy 277.481928 126.705974) (xy 277.079064 126.53869)
+ (xy 276.68669 126.538348) (xy 276.68669 124.877849) (xy 276.52011 124.474694) (xy 276.211928 124.165974) (xy 275.809064 123.99869)
+ (xy 275.41669 123.998348) (xy 275.41669 118.527849) (xy 275.25011 118.124694) (xy 274.941928 117.815974) (xy 274.539064 117.64869)
+ (xy 274.14669 117.648348) (xy 274.14669 115.987849) (xy 273.98011 115.584694) (xy 273.671928 115.275974) (xy 273.269064 115.10869)
+ (xy 272.87669 115.108348) (xy 272.87669 109.637849) (xy 272.71011 109.234694) (xy 272.401928 108.925974) (xy 271.999064 108.75869)
+ (xy 271.61003 108.758351) (xy 271.61003 107.115461) (xy 271.449934 106.709687) (xy 271.428934 106.678257) (xy 271.225178 106.635177)
+ (xy 271.189823 106.670532) (xy 271.189823 106.599822) (xy 271.146743 106.396066) (xy 270.746613 106.222345) (xy 270.33669 106.215413)
+ (xy 270.33669 100.747849) (xy 270.17011 100.344694) (xy 269.861928 100.035974) (xy 269.459064 99.86869) (xy 269.06669 99.868348)
+ (xy 269.06669 98.207849) (xy 268.90011 97.804694) (xy 268.591928 97.495974) (xy 268.189064 97.32869) (xy 267.79669 97.328348)
+ (xy 267.79669 91.857849) (xy 267.63011 91.454694) (xy 267.321928 91.145974) (xy 266.919064 90.97869) (xy 266.52669 90.978348)
+ (xy 266.52669 89.317849) (xy 266.36011 88.914694) (xy 266.051928 88.605974) (xy 265.649064 88.43869) (xy 265.25669 88.438348)
+ (xy 265.25669 82.967849) (xy 265.09011 82.564694) (xy 264.781928 82.255974) (xy 264.379064 82.08869) (xy 263.98669 82.088348)
+ (xy 263.98669 80.427849) (xy 263.82011 80.024694) (xy 263.511928 79.715974) (xy 263.109064 79.54869) (xy 262.71669 79.548348)
+ (xy 262.71669 74.077849) (xy 262.55011 73.674694) (xy 262.241928 73.365974) (xy 261.839064 73.19869) (xy 261.44669 73.198348)
+ (xy 261.44669 71.537849) (xy 261.28011 71.134694) (xy 260.971928 70.825974) (xy 260.569064 70.65869) (xy 260.132849 70.65831)
+ (xy 260.049668 70.692679) (xy 260.049668 67.372001) (xy 259.902382 67.01554) (xy 259.629895 66.742577) (xy 259.273692 66.594668)
+ (xy 258.888001 66.594332) (xy 258.53154 66.741618) (xy 258.258577 67.014105) (xy 258.110668 67.370308) (xy 258.110332 67.755999)
+ (xy 258.186617 67.940625) (xy 258.003692 67.864668) (xy 257.618001 67.864332) (xy 257.26154 68.011618) (xy 257.110128 68.162765)
+ (xy 257.108382 68.15854) (xy 256.835895 67.885577) (xy 256.479692 67.737668) (xy 256.094001 67.737332) (xy 255.73754 67.884618)
+ (xy 255.464577 68.157105) (xy 255.375099 68.37259) (xy 255.078001 68.372332) (xy 254.72154 68.519618) (xy 254.448577 68.792105)
+ (xy 254.300668 69.148308) (xy 254.300332 69.533999) (xy 254.447618 69.89046) (xy 254.720105 70.163423) (xy 255.076308 70.311332)
+ (xy 255.461999 70.311668) (xy 255.81846 70.164382) (xy 256.091423 69.891895) (xy 256.1809 69.676409) (xy 256.477999 69.676668)
+ (xy 256.83446 69.529382) (xy 256.985871 69.378234) (xy 256.987618 69.38246) (xy 257.260105 69.655423) (xy 257.616308 69.803332)
+ (xy 258.001999 69.803668) (xy 258.35846 69.656382) (xy 258.631423 69.383895) (xy 258.779332 69.027692) (xy 258.779668 68.642001)
+ (xy 258.703382 68.457374) (xy 258.886308 68.533332) (xy 259.271999 68.533668) (xy 259.62846 68.386382) (xy 259.901423 68.113895)
+ (xy 260.049332 67.757692) (xy 260.049668 67.372001) (xy 260.049668 70.692679) (xy 259.729694 70.82489) (xy 259.420974 71.133072)
+ (xy 259.25369 71.535936) (xy 259.25331 71.972151) (xy 259.41989 72.375306) (xy 259.728072 72.684026) (xy 260.130936 72.85131)
+ (xy 260.567151 72.85169) (xy 260.970306 72.68511) (xy 261.279026 72.376928) (xy 261.44631 71.974064) (xy 261.44669 71.537849)
+ (xy 261.44669 73.198348) (xy 261.402849 73.19831) (xy 260.999694 73.36489) (xy 260.690974 73.673072) (xy 260.52369 74.075936)
+ (xy 260.52331 74.512151) (xy 260.68989 74.915306) (xy 260.998072 75.224026) (xy 261.400936 75.39131) (xy 261.837151 75.39169)
+ (xy 262.240306 75.22511) (xy 262.549026 74.916928) (xy 262.71631 74.514064) (xy 262.71669 74.077849) (xy 262.71669 79.548348)
+ (xy 262.672849 79.54831) (xy 262.269694 79.71489) (xy 261.960974 80.023072) (xy 261.79369 80.425936) (xy 261.79331 80.862151)
+ (xy 261.95989 81.265306) (xy 262.268072 81.574026) (xy 262.670936 81.74131) (xy 263.107151 81.74169) (xy 263.510306 81.57511)
+ (xy 263.819026 81.266928) (xy 263.98631 80.864064) (xy 263.98669 80.427849) (xy 263.98669 82.088348) (xy 263.942849 82.08831)
+ (xy 263.539694 82.25489) (xy 263.230974 82.563072) (xy 263.06369 82.965936) (xy 263.06331 83.402151) (xy 263.22989 83.805306)
+ (xy 263.538072 84.114026) (xy 263.940936 84.28131) (xy 264.377151 84.28169) (xy 264.780306 84.11511) (xy 265.089026 83.806928)
+ (xy 265.25631 83.404064) (xy 265.25669 82.967849) (xy 265.25669 88.438348) (xy 265.212849 88.43831) (xy 264.809694 88.60489)
+ (xy 264.500974 88.913072) (xy 264.33369 89.315936) (xy 264.33331 89.752151) (xy 264.49989 90.155306) (xy 264.808072 90.464026)
+ (xy 265.210936 90.63131) (xy 265.647151 90.63169) (xy 266.050306 90.46511) (xy 266.359026 90.156928) (xy 266.52631 89.754064)
+ (xy 266.52669 89.317849) (xy 266.52669 90.978348) (xy 266.482849 90.97831) (xy 266.079694 91.14489) (xy 265.770974 91.453072)
+ (xy 265.60369 91.855936) (xy 265.60331 92.292151) (xy 265.76989 92.695306) (xy 266.078072 93.004026) (xy 266.480936 93.17131)
+ (xy 266.917151 93.17169) (xy 267.320306 93.00511) (xy 267.629026 92.696928) (xy 267.79631 92.294064) (xy 267.79669 91.857849)
+ (xy 267.79669 97.328348) (xy 267.752849 97.32831) (xy 267.349694 97.49489) (xy 267.040974 97.803072) (xy 266.87369 98.205936)
+ (xy 266.87331 98.642151) (xy 267.03989 99.045306) (xy 267.348072 99.354026) (xy 267.750936 99.52131) (xy 268.187151 99.52169)
+ (xy 268.590306 99.35511) (xy 268.899026 99.046928) (xy 269.06631 98.644064) (xy 269.06669 98.207849) (xy 269.06669 99.868348)
+ (xy 269.022849 99.86831) (xy 268.619694 100.03489) (xy 268.310974 100.343072) (xy 268.14369 100.745936) (xy 268.14331 101.182151)
+ (xy 268.30989 101.585306) (xy 268.618072 101.894026) (xy 269.020936 102.06131) (xy 269.457151 102.06169) (xy 269.860306 101.89511)
+ (xy 270.169026 101.586928) (xy 270.33631 101.184064) (xy 270.33669 100.747849) (xy 270.33669 106.215413) (xy 270.310461 106.21497)
+ (xy 269.904687 106.375066) (xy 269.873257 106.396066) (xy 269.830177 106.599822) (xy 270.51 107.279645) (xy 271.189823 106.599822)
+ (xy 271.189823 106.670532) (xy 270.545355 107.315) (xy 271.225178 107.994823) (xy 271.428934 107.951743) (xy 271.602655 107.551613)
+ (xy 271.61003 107.115461) (xy 271.61003 108.758351) (xy 271.562849 108.75831) (xy 271.189823 108.91244) (xy 271.189823 108.030178)
+ (xy 270.51 107.350355) (xy 270.474645 107.38571) (xy 270.474645 107.315) (xy 269.794822 106.635177) (xy 269.591066 106.678257)
+ (xy 269.417345 107.078387) (xy 269.40997 107.514539) (xy 269.570066 107.920313) (xy 269.591066 107.951743) (xy 269.794822 107.994823)
+ (xy 270.474645 107.315) (xy 270.474645 107.38571) (xy 269.830177 108.030178) (xy 269.873257 108.233934) (xy 270.273387 108.407655)
+ (xy 270.709539 108.41503) (xy 271.115313 108.254934) (xy 271.146743 108.233934) (xy 271.189823 108.030178) (xy 271.189823 108.91244)
+ (xy 271.159694 108.92489) (xy 270.850974 109.233072) (xy 270.68369 109.635936) (xy 270.68331 110.072151) (xy 270.84989 110.475306)
+ (xy 271.158072 110.784026) (xy 271.560936 110.95131) (xy 271.997151 110.95169) (xy 272.400306 110.78511) (xy 272.709026 110.476928)
+ (xy 272.87631 110.074064) (xy 272.87669 109.637849) (xy 272.87669 115.108348) (xy 272.832849 115.10831) (xy 272.429694 115.27489)
+ (xy 272.120974 115.583072) (xy 271.95369 115.985936) (xy 271.95331 116.422151) (xy 272.11989 116.825306) (xy 272.428072 117.134026)
+ (xy 272.830936 117.30131) (xy 273.267151 117.30169) (xy 273.670306 117.13511) (xy 273.979026 116.826928) (xy 274.14631 116.424064)
+ (xy 274.14669 115.987849) (xy 274.14669 117.648348) (xy 274.102849 117.64831) (xy 273.699694 117.81489) (xy 273.390974 118.123072)
+ (xy 273.22369 118.525936) (xy 273.22331 118.962151) (xy 273.38989 119.365306) (xy 273.698072 119.674026) (xy 274.100936 119.84131)
+ (xy 274.537151 119.84169) (xy 274.940306 119.67511) (xy 275.249026 119.366928) (xy 275.41631 118.964064) (xy 275.41669 118.527849)
+ (xy 275.41669 123.998348) (xy 275.372849 123.99831) (xy 274.969694 124.16489) (xy 274.660974 124.473072) (xy 274.49369 124.875936)
+ (xy 274.49331 125.312151) (xy 274.65989 125.715306) (xy 274.968072 126.024026) (xy 275.370936 126.19131) (xy 275.807151 126.19169)
+ (xy 276.210306 126.02511) (xy 276.519026 125.716928) (xy 276.68631 125.314064) (xy 276.68669 124.877849) (xy 276.68669 126.538348)
+ (xy 276.642849 126.53831) (xy 276.239694 126.70489) (xy 275.930974 127.013072) (xy 275.76369 127.415936) (xy 275.76331 127.852151)
+ (xy 275.92989 128.255306) (xy 276.238072 128.564026) (xy 276.640936 128.73131) (xy 277.077151 128.73169) (xy 277.480306 128.56511)
+ (xy 277.789026 128.256928) (xy 277.95631 127.854064) (xy 277.95669 127.417849) (xy 277.95669 133.7394) (xy 275.41669 133.7394)
+ (xy 275.41669 127.417849) (xy 275.25011 127.014694) (xy 274.941928 126.705974) (xy 274.539064 126.53869) (xy 274.14669 126.538348)
+ (xy 274.14669 124.877849) (xy 273.98011 124.474694) (xy 273.671928 124.165974) (xy 273.269064 123.99869) (xy 272.87669 123.998348)
+ (xy 272.87669 118.527849) (xy 272.71011 118.124694) (xy 272.401928 117.815974) (xy 271.999064 117.64869) (xy 271.61003 117.648351)
+ (xy 271.61003 116.005461) (xy 271.449934 115.599687) (xy 271.428934 115.568257) (xy 271.225178 115.525177) (xy 271.189823 115.560532)
+ (xy 271.189823 115.489822) (xy 271.146743 115.286066) (xy 270.746613 115.112345) (xy 270.33669 115.105413) (xy 270.33669 109.637849)
+ (xy 270.17011 109.234694) (xy 269.861928 108.925974) (xy 269.459064 108.75869) (xy 269.06669 108.758348) (xy 269.06669 107.097849)
+ (xy 268.90011 106.694694) (xy 268.591928 106.385974) (xy 268.189064 106.21869) (xy 267.79669 106.218348) (xy 267.79669 100.747849)
+ (xy 267.63011 100.344694) (xy 267.321928 100.035974) (xy 266.919064 99.86869) (xy 266.52669 99.868348) (xy 266.52669 98.207849)
+ (xy 266.36011 97.804694) (xy 266.051928 97.495974) (xy 265.649064 97.32869) (xy 265.25669 97.328348) (xy 265.25669 91.857849)
+ (xy 265.09011 91.454694) (xy 264.781928 91.145974) (xy 264.379064 90.97869) (xy 263.98669 90.978348) (xy 263.98669 89.317849)
+ (xy 263.82011 88.914694) (xy 263.511928 88.605974) (xy 263.109064 88.43869) (xy 262.71669 88.438348) (xy 262.71669 82.967849)
+ (xy 262.55011 82.564694) (xy 262.241928 82.255974) (xy 261.839064 82.08869) (xy 261.44669 82.088348) (xy 261.44669 80.427849)
+ (xy 261.28011 80.024694) (xy 260.971928 79.715974) (xy 260.569064 79.54869) (xy 260.17669 79.548348) (xy 260.17669 74.077849)
+ (xy 260.01011 73.674694) (xy 259.701928 73.365974) (xy 259.299064 73.19869) (xy 258.90669 73.198348) (xy 258.90669 71.537849)
+ (xy 258.74011 71.134694) (xy 258.431928 70.825974) (xy 258.029064 70.65869) (xy 257.592849 70.65831) (xy 257.189694 70.82489)
+ (xy 256.880974 71.133072) (xy 256.71369 71.535936) (xy 256.71331 71.972151) (xy 256.87989 72.375306) (xy 257.188072 72.684026)
+ (xy 257.590936 72.85131) (xy 258.027151 72.85169) (xy 258.430306 72.68511) (xy 258.739026 72.376928) (xy 258.90631 71.974064)
+ (xy 258.90669 71.537849) (xy 258.90669 73.198348) (xy 258.862849 73.19831) (xy 258.459694 73.36489) (xy 258.150974 73.673072)
+ (xy 257.98369 74.075936) (xy 257.98331 74.512151) (xy 258.14989 74.915306) (xy 258.458072 75.224026) (xy 258.860936 75.39131)
+ (xy 259.297151 75.39169) (xy 259.700306 75.22511) (xy 260.009026 74.916928) (xy 260.17631 74.514064) (xy 260.17669 74.077849)
+ (xy 260.17669 79.548348) (xy 260.132849 79.54831) (xy 259.729694 79.71489) (xy 259.420974 80.023072) (xy 259.25369 80.425936)
+ (xy 259.25331 80.862151) (xy 259.41989 81.265306) (xy 259.728072 81.574026) (xy 260.130936 81.74131) (xy 260.567151 81.74169)
+ (xy 260.970306 81.57511) (xy 261.279026 81.266928) (xy 261.44631 80.864064) (xy 261.44669 80.427849) (xy 261.44669 82.088348)
+ (xy 261.402849 82.08831) (xy 260.999694 82.25489) (xy 260.690974 82.563072) (xy 260.52369 82.965936) (xy 260.52331 83.402151)
+ (xy 260.68989 83.805306) (xy 260.998072 84.114026) (xy 261.400936 84.28131) (xy 261.837151 84.28169) (xy 262.240306 84.11511)
+ (xy 262.549026 83.806928) (xy 262.71631 83.404064) (xy 262.71669 82.967849) (xy 262.71669 88.438348) (xy 262.672849 88.43831)
+ (xy 262.269694 88.60489) (xy 261.960974 88.913072) (xy 261.79369 89.315936) (xy 261.79331 89.752151) (xy 261.95989 90.155306)
+ (xy 262.268072 90.464026) (xy 262.670936 90.63131) (xy 263.107151 90.63169) (xy 263.510306 90.46511) (xy 263.819026 90.156928)
+ (xy 263.98631 89.754064) (xy 263.98669 89.317849) (xy 263.98669 90.978348) (xy 263.942849 90.97831) (xy 263.539694 91.14489)
+ (xy 263.230974 91.453072) (xy 263.06369 91.855936) (xy 263.06331 92.292151) (xy 263.22989 92.695306) (xy 263.538072 93.004026)
+ (xy 263.940936 93.17131) (xy 264.377151 93.17169) (xy 264.780306 93.00511) (xy 265.089026 92.696928) (xy 265.25631 92.294064)
+ (xy 265.25669 91.857849) (xy 265.25669 97.328348) (xy 265.212849 97.32831) (xy 264.809694 97.49489) (xy 264.500974 97.803072)
+ (xy 264.33369 98.205936) (xy 264.33331 98.642151) (xy 264.49989 99.045306) (xy 264.808072 99.354026) (xy 265.210936 99.52131)
+ (xy 265.647151 99.52169) (xy 266.050306 99.35511) (xy 266.359026 99.046928) (xy 266.52631 98.644064) (xy 266.52669 98.207849)
+ (xy 266.52669 99.868348) (xy 266.482849 99.86831) (xy 266.079694 100.03489) (xy 265.770974 100.343072) (xy 265.60369 100.745936)
+ (xy 265.60331 101.182151) (xy 265.76989 101.585306) (xy 266.078072 101.894026) (xy 266.480936 102.06131) (xy 266.917151 102.06169)
+ (xy 267.320306 101.89511) (xy 267.629026 101.586928) (xy 267.79631 101.184064) (xy 267.79669 100.747849) (xy 267.79669 106.218348)
+ (xy 267.752849 106.21831) (xy 267.349694 106.38489) (xy 267.040974 106.693072) (xy 266.87369 107.095936) (xy 266.87331 107.532151)
+ (xy 267.03989 107.935306) (xy 267.348072 108.244026) (xy 267.750936 108.41131) (xy 268.187151 108.41169) (xy 268.590306 108.24511)
+ (xy 268.899026 107.936928) (xy 269.06631 107.534064) (xy 269.06669 107.097849) (xy 269.06669 108.758348) (xy 269.022849 108.75831)
+ (xy 268.619694 108.92489) (xy 268.310974 109.233072) (xy 268.14369 109.635936) (xy 268.14331 110.072151) (xy 268.30989 110.475306)
+ (xy 268.618072 110.784026) (xy 269.020936 110.95131) (xy 269.457151 110.95169) (xy 269.860306 110.78511) (xy 270.169026 110.476928)
+ (xy 270.33631 110.074064) (xy 270.33669 109.637849) (xy 270.33669 115.105413) (xy 270.310461 115.10497) (xy 269.904687 115.265066)
+ (xy 269.873257 115.286066) (xy 269.830177 115.489822) (xy 270.51 116.169645) (xy 271.189823 115.489822) (xy 271.189823 115.560532)
+ (xy 270.545355 116.205) (xy 271.225178 116.884823) (xy 271.428934 116.841743) (xy 271.602655 116.441613) (xy 271.61003 116.005461)
+ (xy 271.61003 117.648351) (xy 271.562849 117.64831) (xy 271.189823 117.80244) (xy 271.189823 116.920178) (xy 270.51 116.240355)
+ (xy 270.474645 116.27571) (xy 270.474645 116.205) (xy 269.794822 115.525177) (xy 269.591066 115.568257) (xy 269.417345 115.968387)
+ (xy 269.40997 116.404539) (xy 269.570066 116.810313) (xy 269.591066 116.841743) (xy 269.794822 116.884823) (xy 270.474645 116.205)
+ (xy 270.474645 116.27571) (xy 269.830177 116.920178) (xy 269.873257 117.123934) (xy 270.273387 117.297655) (xy 270.709539 117.30503)
+ (xy 271.115313 117.144934) (xy 271.146743 117.123934) (xy 271.189823 116.920178) (xy 271.189823 117.80244) (xy 271.159694 117.81489)
+ (xy 270.850974 118.123072) (xy 270.68369 118.525936) (xy 270.68331 118.962151) (xy 270.84989 119.365306) (xy 271.158072 119.674026)
+ (xy 271.560936 119.84131) (xy 271.997151 119.84169) (xy 272.400306 119.67511) (xy 272.709026 119.366928) (xy 272.87631 118.964064)
+ (xy 272.87669 118.527849) (xy 272.87669 123.998348) (xy 272.832849 123.99831) (xy 272.429694 124.16489) (xy 272.120974 124.473072)
+ (xy 271.95369 124.875936) (xy 271.95331 125.312151) (xy 272.11989 125.715306) (xy 272.428072 126.024026) (xy 272.830936 126.19131)
+ (xy 273.267151 126.19169) (xy 273.670306 126.02511) (xy 273.979026 125.716928) (xy 274.14631 125.314064) (xy 274.14669 124.877849)
+ (xy 274.14669 126.538348) (xy 274.102849 126.53831) (xy 273.699694 126.70489) (xy 273.390974 127.013072) (xy 273.22369 127.415936)
+ (xy 273.22331 127.852151) (xy 273.38989 128.255306) (xy 273.698072 128.564026) (xy 274.100936 128.73131) (xy 274.537151 128.73169)
+ (xy 274.940306 128.56511) (xy 275.249026 128.256928) (xy 275.41631 127.854064) (xy 275.41669 127.417849) (xy 275.41669 133.7394)
+ (xy 272.87669 133.7394) (xy 272.87669 127.417849) (xy 272.71011 127.014694) (xy 272.401928 126.705974) (xy 271.999064 126.53869)
+ (xy 271.61003 126.538351) (xy 271.61003 124.895461) (xy 271.449934 124.489687) (xy 271.428934 124.458257) (xy 271.225178 124.415177)
+ (xy 271.189823 124.450532) (xy 271.189823 124.379822) (xy 271.146743 124.176066) (xy 270.746613 124.002345) (xy 270.33669 123.995413)
+ (xy 270.33669 118.527849) (xy 270.17011 118.124694) (xy 269.861928 117.815974) (xy 269.459064 117.64869) (xy 269.06669 117.648348)
+ (xy 269.06669 115.987849) (xy 268.90011 115.584694) (xy 268.591928 115.275974) (xy 268.189064 115.10869) (xy 267.79669 115.108348)
+ (xy 267.79669 109.637849) (xy 267.63011 109.234694) (xy 267.321928 108.925974) (xy 266.919064 108.75869) (xy 266.52669 108.758348)
+ (xy 266.52669 107.097849) (xy 266.36011 106.694694) (xy 266.051928 106.385974) (xy 265.649064 106.21869) (xy 265.25669 106.218348)
+ (xy 265.25669 100.747849) (xy 265.09011 100.344694) (xy 264.781928 100.035974) (xy 264.379064 99.86869) (xy 263.98669 99.868348)
+ (xy 263.98669 98.207849) (xy 263.82011 97.804694) (xy 263.511928 97.495974) (xy 263.109064 97.32869) (xy 262.71669 97.328348)
+ (xy 262.71669 91.857849) (xy 262.55011 91.454694) (xy 262.241928 91.145974) (xy 261.839064 90.97869) (xy 261.44669 90.978348)
+ (xy 261.44669 89.317849) (xy 261.28011 88.914694) (xy 260.971928 88.605974) (xy 260.569064 88.43869) (xy 260.17669 88.438348)
+ (xy 260.17669 82.967849) (xy 260.01011 82.564694) (xy 259.701928 82.255974) (xy 259.299064 82.08869) (xy 258.90669 82.088348)
+ (xy 258.90669 80.427849) (xy 258.74011 80.024694) (xy 258.431928 79.715974) (xy 258.029064 79.54869) (xy 257.63669 79.548348)
+ (xy 257.63669 74.077849) (xy 257.47011 73.674694) (xy 257.161928 73.365974) (xy 256.759064 73.19869) (xy 256.36669 73.198348)
+ (xy 256.36669 71.537849) (xy 256.20011 71.134694) (xy 255.891928 70.825974) (xy 255.489064 70.65869) (xy 255.052849 70.65831)
+ (xy 254.649694 70.82489) (xy 254.340974 71.133072) (xy 254.17369 71.535936) (xy 254.17331 71.972151) (xy 254.33989 72.375306)
+ (xy 254.648072 72.684026) (xy 255.050936 72.85131) (xy 255.487151 72.85169) (xy 255.890306 72.68511) (xy 256.199026 72.376928)
+ (xy 256.36631 71.974064) (xy 256.36669 71.537849) (xy 256.36669 73.198348) (xy 256.322849 73.19831) (xy 255.919694 73.36489)
+ (xy 255.610974 73.673072) (xy 255.44369 74.075936) (xy 255.44331 74.512151) (xy 255.60989 74.915306) (xy 255.918072 75.224026)
+ (xy 256.320936 75.39131) (xy 256.757151 75.39169) (xy 257.160306 75.22511) (xy 257.469026 74.916928) (xy 257.63631 74.514064)
+ (xy 257.63669 74.077849) (xy 257.63669 79.548348) (xy 257.592849 79.54831) (xy 257.189694 79.71489) (xy 256.880974 80.023072)
+ (xy 256.71369 80.425936) (xy 256.71331 80.862151) (xy 256.87989 81.265306) (xy 257.188072 81.574026) (xy 257.590936 81.74131)
+ (xy 258.027151 81.74169) (xy 258.430306 81.57511) (xy 258.739026 81.266928) (xy 258.90631 80.864064) (xy 258.90669 80.427849)
+ (xy 258.90669 82.088348) (xy 258.862849 82.08831) (xy 258.459694 82.25489) (xy 258.150974 82.563072) (xy 257.98369 82.965936)
+ (xy 257.98331 83.402151) (xy 258.14989 83.805306) (xy 258.458072 84.114026) (xy 258.860936 84.28131) (xy 259.297151 84.28169)
+ (xy 259.700306 84.11511) (xy 260.009026 83.806928) (xy 260.17631 83.404064) (xy 260.17669 82.967849) (xy 260.17669 88.438348)
+ (xy 260.132849 88.43831) (xy 259.729694 88.60489) (xy 259.420974 88.913072) (xy 259.25369 89.315936) (xy 259.25331 89.752151)
+ (xy 259.41989 90.155306) (xy 259.728072 90.464026) (xy 260.130936 90.63131) (xy 260.567151 90.63169) (xy 260.970306 90.46511)
+ (xy 261.279026 90.156928) (xy 261.44631 89.754064) (xy 261.44669 89.317849) (xy 261.44669 90.978348) (xy 261.402849 90.97831)
+ (xy 260.999694 91.14489) (xy 260.690974 91.453072) (xy 260.52369 91.855936) (xy 260.52331 92.292151) (xy 260.68989 92.695306)
+ (xy 260.998072 93.004026) (xy 261.400936 93.17131) (xy 261.837151 93.17169) (xy 262.240306 93.00511) (xy 262.549026 92.696928)
+ (xy 262.71631 92.294064) (xy 262.71669 91.857849) (xy 262.71669 97.328348) (xy 262.672849 97.32831) (xy 262.269694 97.49489)
+ (xy 261.960974 97.803072) (xy 261.79369 98.205936) (xy 261.79331 98.642151) (xy 261.95989 99.045306) (xy 262.268072 99.354026)
+ (xy 262.670936 99.52131) (xy 263.107151 99.52169) (xy 263.510306 99.35511) (xy 263.819026 99.046928) (xy 263.98631 98.644064)
+ (xy 263.98669 98.207849) (xy 263.98669 99.868348) (xy 263.942849 99.86831) (xy 263.539694 100.03489) (xy 263.230974 100.343072)
+ (xy 263.06369 100.745936) (xy 263.06331 101.182151) (xy 263.22989 101.585306) (xy 263.538072 101.894026) (xy 263.940936 102.06131)
+ (xy 264.377151 102.06169) (xy 264.780306 101.89511) (xy 265.089026 101.586928) (xy 265.25631 101.184064) (xy 265.25669 100.747849)
+ (xy 265.25669 106.218348) (xy 265.212849 106.21831) (xy 264.809694 106.38489) (xy 264.500974 106.693072) (xy 264.33369 107.095936)
+ (xy 264.33331 107.532151) (xy 264.49989 107.935306) (xy 264.808072 108.244026) (xy 265.210936 108.41131) (xy 265.647151 108.41169)
+ (xy 266.050306 108.24511) (xy 266.359026 107.936928) (xy 266.52631 107.534064) (xy 266.52669 107.097849) (xy 266.52669 108.758348)
+ (xy 266.482849 108.75831) (xy 266.079694 108.92489) (xy 265.770974 109.233072) (xy 265.60369 109.635936) (xy 265.60331 110.072151)
+ (xy 265.76989 110.475306) (xy 266.078072 110.784026) (xy 266.480936 110.95131) (xy 266.917151 110.95169) (xy 267.320306 110.78511)
+ (xy 267.629026 110.476928) (xy 267.79631 110.074064) (xy 267.79669 109.637849) (xy 267.79669 115.108348) (xy 267.752849 115.10831)
+ (xy 267.349694 115.27489) (xy 267.040974 115.583072) (xy 266.87369 115.985936) (xy 266.87331 116.422151) (xy 267.03989 116.825306)
+ (xy 267.348072 117.134026) (xy 267.750936 117.30131) (xy 268.187151 117.30169) (xy 268.590306 117.13511) (xy 268.899026 116.826928)
+ (xy 269.06631 116.424064) (xy 269.06669 115.987849) (xy 269.06669 117.648348) (xy 269.022849 117.64831) (xy 268.619694 117.81489)
+ (xy 268.310974 118.123072) (xy 268.14369 118.525936) (xy 268.14331 118.962151) (xy 268.30989 119.365306) (xy 268.618072 119.674026)
+ (xy 269.020936 119.84131) (xy 269.457151 119.84169) (xy 269.860306 119.67511) (xy 270.169026 119.366928) (xy 270.33631 118.964064)
+ (xy 270.33669 118.527849) (xy 270.33669 123.995413) (xy 270.310461 123.99497) (xy 269.904687 124.155066) (xy 269.873257 124.176066)
+ (xy 269.830177 124.379822) (xy 270.51 125.059645) (xy 271.189823 124.379822) (xy 271.189823 124.450532) (xy 270.545355 125.095)
+ (xy 271.225178 125.774823) (xy 271.428934 125.731743) (xy 271.602655 125.331613) (xy 271.61003 124.895461) (xy 271.61003 126.538351)
+ (xy 271.562849 126.53831) (xy 271.189823 126.69244) (xy 271.189823 125.810178) (xy 270.51 125.130355) (xy 270.474645 125.16571)
+ (xy 270.474645 125.095) (xy 269.794822 124.415177) (xy 269.591066 124.458257) (xy 269.417345 124.858387) (xy 269.40997 125.294539)
+ (xy 269.570066 125.700313) (xy 269.591066 125.731743) (xy 269.794822 125.774823) (xy 270.474645 125.095) (xy 270.474645 125.16571)
+ (xy 269.830177 125.810178) (xy 269.873257 126.013934) (xy 270.273387 126.187655) (xy 270.709539 126.19503) (xy 271.115313 126.034934)
+ (xy 271.146743 126.013934) (xy 271.189823 125.810178) (xy 271.189823 126.69244) (xy 271.159694 126.70489) (xy 270.850974 127.013072)
+ (xy 270.68369 127.415936) (xy 270.68331 127.852151) (xy 270.84989 128.255306) (xy 271.158072 128.564026) (xy 271.560936 128.73131)
+ (xy 271.997151 128.73169) (xy 272.400306 128.56511) (xy 272.709026 128.256928) (xy 272.87631 127.854064) (xy 272.87669 127.417849)
+ (xy 272.87669 133.7394) (xy 270.33669 133.7394) (xy 270.33669 127.417849) (xy 270.17011 127.014694) (xy 269.861928 126.705974)
+ (xy 269.459064 126.53869) (xy 269.06669 126.538348) (xy 269.06669 124.877849) (xy 268.90011 124.474694) (xy 268.591928 124.165974)
+ (xy 268.189064 123.99869) (xy 267.79669 123.998348) (xy 267.79669 118.527849) (xy 267.63011 118.124694) (xy 267.321928 117.815974)
+ (xy 266.919064 117.64869) (xy 266.52669 117.648348) (xy 266.52669 115.987849) (xy 266.36011 115.584694) (xy 266.051928 115.275974)
+ (xy 265.649064 115.10869) (xy 265.25669 115.108348) (xy 265.25669 109.637849) (xy 265.09011 109.234694) (xy 264.781928 108.925974)
+ (xy 264.379064 108.75869) (xy 263.98669 108.758348) (xy 263.98669 107.097849) (xy 263.82011 106.694694) (xy 263.511928 106.385974)
+ (xy 263.109064 106.21869) (xy 262.71669 106.218348) (xy 262.71669 100.747849) (xy 262.55011 100.344694) (xy 262.241928 100.035974)
+ (xy 261.839064 99.86869) (xy 261.44669 99.868348) (xy 261.44669 98.207849) (xy 261.28011 97.804694) (xy 260.971928 97.495974)
+ (xy 260.569064 97.32869) (xy 260.17669 97.328348) (xy 260.17669 91.857849) (xy 260.01011 91.454694) (xy 259.701928 91.145974)
+ (xy 259.299064 90.97869) (xy 258.90669 90.978348) (xy 258.90669 89.317849) (xy 258.74011 88.914694) (xy 258.431928 88.605974)
+ (xy 258.029064 88.43869) (xy 257.63669 88.438348) (xy 257.63669 82.967849) (xy 257.47011 82.564694) (xy 257.161928 82.255974)
+ (xy 256.759064 82.08869) (xy 256.36669 82.088348) (xy 256.36669 80.427849) (xy 256.20011 80.024694) (xy 255.891928 79.715974)
+ (xy 255.489064 79.54869) (xy 255.09669 79.548348) (xy 255.09669 74.077849) (xy 254.93011 73.674694) (xy 254.621928 73.365974)
+ (xy 254.219064 73.19869) (xy 253.82669 73.198348) (xy 253.82669 71.537849) (xy 253.699668 71.230431) (xy 253.699668 69.277001)
+ (xy 253.552382 68.92054) (xy 253.279895 68.647577) (xy 252.923692 68.499668) (xy 252.55669 68.499348) (xy 252.55669 65.187849)
+ (xy 252.39011 64.784694) (xy 252.081928 64.475974) (xy 251.679064 64.30869) (xy 251.28669 64.308348) (xy 251.28669 62.647849)
+ (xy 251.12011 62.244694) (xy 250.811928 61.935974) (xy 250.409064 61.76869) (xy 249.972849 61.76831) (xy 249.569694 61.93489)
+ (xy 249.260974 62.243072) (xy 249.09369 62.645936) (xy 249.09331 63.082151) (xy 249.25989 63.485306) (xy 249.568072 63.794026)
+ (xy 249.970936 63.96131) (xy 250.407151 63.96169) (xy 250.810306 63.79511) (xy 251.119026 63.486928) (xy 251.28631 63.084064)
+ (xy 251.28669 62.647849) (xy 251.28669 64.308348) (xy 251.242849 64.30831) (xy 250.839694 64.47489) (xy 250.530974 64.783072)
+ (xy 250.36369 65.185936) (xy 250.36331 65.622151) (xy 250.52989 66.025306) (xy 250.838072 66.334026) (xy 251.240936 66.50131)
+ (xy 251.677151 66.50169) (xy 252.080306 66.33511) (xy 252.389026 66.026928) (xy 252.55631 65.624064) (xy 252.55669 65.187849)
+ (xy 252.55669 68.499348) (xy 252.538001 68.499332) (xy 252.18154 68.646618) (xy 251.908577 68.919105) (xy 251.760668 69.275308)
+ (xy 251.760332 69.660999) (xy 251.907618 70.01746) (xy 252.180105 70.290423) (xy 252.536308 70.438332) (xy 252.921999 70.438668)
+ (xy 253.27846 70.291382) (xy 253.551423 70.018895) (xy 253.699332 69.662692) (xy 253.699668 69.277001) (xy 253.699668 71.230431)
+ (xy 253.66011 71.134694) (xy 253.351928 70.825974) (xy 252.949064 70.65869) (xy 252.512849 70.65831) (xy 252.109694 70.82489)
+ (xy 251.800974 71.133072) (xy 251.63369 71.535936) (xy 251.63331 71.972151) (xy 251.79989 72.375306) (xy 252.108072 72.684026)
+ (xy 252.510936 72.85131) (xy 252.947151 72.85169) (xy 253.350306 72.68511) (xy 253.659026 72.376928) (xy 253.82631 71.974064)
+ (xy 253.82669 71.537849) (xy 253.82669 73.198348) (xy 253.782849 73.19831) (xy 253.379694 73.36489) (xy 253.070974 73.673072)
+ (xy 252.90369 74.075936) (xy 252.90331 74.512151) (xy 253.06989 74.915306) (xy 253.378072 75.224026) (xy 253.780936 75.39131)
+ (xy 254.217151 75.39169) (xy 254.620306 75.22511) (xy 254.929026 74.916928) (xy 255.09631 74.514064) (xy 255.09669 74.077849)
+ (xy 255.09669 79.548348) (xy 255.052849 79.54831) (xy 254.649694 79.71489) (xy 254.340974 80.023072) (xy 254.17369 80.425936)
+ (xy 254.17331 80.862151) (xy 254.33989 81.265306) (xy 254.648072 81.574026) (xy 255.050936 81.74131) (xy 255.487151 81.74169)
+ (xy 255.890306 81.57511) (xy 256.199026 81.266928) (xy 256.36631 80.864064) (xy 256.36669 80.427849) (xy 256.36669 82.088348)
+ (xy 256.322849 82.08831) (xy 255.919694 82.25489) (xy 255.610974 82.563072) (xy 255.44369 82.965936) (xy 255.44331 83.402151)
+ (xy 255.60989 83.805306) (xy 255.918072 84.114026) (xy 256.320936 84.28131) (xy 256.757151 84.28169) (xy 257.160306 84.11511)
+ (xy 257.469026 83.806928) (xy 257.63631 83.404064) (xy 257.63669 82.967849) (xy 257.63669 88.438348) (xy 257.592849 88.43831)
+ (xy 257.189694 88.60489) (xy 256.880974 88.913072) (xy 256.71369 89.315936) (xy 256.71331 89.752151) (xy 256.87989 90.155306)
+ (xy 257.188072 90.464026) (xy 257.590936 90.63131) (xy 258.027151 90.63169) (xy 258.430306 90.46511) (xy 258.739026 90.156928)
+ (xy 258.90631 89.754064) (xy 258.90669 89.317849) (xy 258.90669 90.978348) (xy 258.862849 90.97831) (xy 258.459694 91.14489)
+ (xy 258.150974 91.453072) (xy 257.98369 91.855936) (xy 257.98331 92.292151) (xy 258.14989 92.695306) (xy 258.458072 93.004026)
+ (xy 258.860936 93.17131) (xy 259.297151 93.17169) (xy 259.700306 93.00511) (xy 260.009026 92.696928) (xy 260.17631 92.294064)
+ (xy 260.17669 91.857849) (xy 260.17669 97.328348) (xy 260.132849 97.32831) (xy 259.729694 97.49489) (xy 259.420974 97.803072)
+ (xy 259.25369 98.205936) (xy 259.25331 98.642151) (xy 259.41989 99.045306) (xy 259.728072 99.354026) (xy 260.130936 99.52131)
+ (xy 260.567151 99.52169) (xy 260.970306 99.35511) (xy 261.279026 99.046928) (xy 261.44631 98.644064) (xy 261.44669 98.207849)
+ (xy 261.44669 99.868348) (xy 261.402849 99.86831) (xy 260.999694 100.03489) (xy 260.690974 100.343072) (xy 260.52369 100.745936)
+ (xy 260.52331 101.182151) (xy 260.68989 101.585306) (xy 260.998072 101.894026) (xy 261.400936 102.06131) (xy 261.837151 102.06169)
+ (xy 262.240306 101.89511) (xy 262.549026 101.586928) (xy 262.71631 101.184064) (xy 262.71669 100.747849) (xy 262.71669 106.218348)
+ (xy 262.672849 106.21831) (xy 262.269694 106.38489) (xy 261.960974 106.693072) (xy 261.79369 107.095936) (xy 261.79331 107.532151)
+ (xy 261.95989 107.935306) (xy 262.268072 108.244026) (xy 262.670936 108.41131) (xy 263.107151 108.41169) (xy 263.510306 108.24511)
+ (xy 263.819026 107.936928) (xy 263.98631 107.534064) (xy 263.98669 107.097849) (xy 263.98669 108.758348) (xy 263.942849 108.75831)
+ (xy 263.539694 108.92489) (xy 263.230974 109.233072) (xy 263.06369 109.635936) (xy 263.06331 110.072151) (xy 263.22989 110.475306)
+ (xy 263.538072 110.784026) (xy 263.940936 110.95131) (xy 264.377151 110.95169) (xy 264.780306 110.78511) (xy 265.089026 110.476928)
+ (xy 265.25631 110.074064) (xy 265.25669 109.637849) (xy 265.25669 115.108348) (xy 265.212849 115.10831) (xy 264.809694 115.27489)
+ (xy 264.500974 115.583072) (xy 264.33369 115.985936) (xy 264.33331 116.422151) (xy 264.49989 116.825306) (xy 264.808072 117.134026)
+ (xy 265.210936 117.30131) (xy 265.647151 117.30169) (xy 266.050306 117.13511) (xy 266.359026 116.826928) (xy 266.52631 116.424064)
+ (xy 266.52669 115.987849) (xy 266.52669 117.648348) (xy 266.482849 117.64831) (xy 266.079694 117.81489) (xy 265.770974 118.123072)
+ (xy 265.60369 118.525936) (xy 265.60331 118.962151) (xy 265.76989 119.365306) (xy 266.078072 119.674026) (xy 266.480936 119.84131)
+ (xy 266.917151 119.84169) (xy 267.320306 119.67511) (xy 267.629026 119.366928) (xy 267.79631 118.964064) (xy 267.79669 118.527849)
+ (xy 267.79669 123.998348) (xy 267.752849 123.99831) (xy 267.349694 124.16489) (xy 267.040974 124.473072) (xy 266.87369 124.875936)
+ (xy 266.87331 125.312151) (xy 267.03989 125.715306) (xy 267.348072 126.024026) (xy 267.750936 126.19131) (xy 268.187151 126.19169)
+ (xy 268.590306 126.02511) (xy 268.899026 125.716928) (xy 269.06631 125.314064) (xy 269.06669 124.877849) (xy 269.06669 126.538348)
+ (xy 269.022849 126.53831) (xy 268.619694 126.70489) (xy 268.310974 127.013072) (xy 268.14369 127.415936) (xy 268.14331 127.852151)
+ (xy 268.30989 128.255306) (xy 268.618072 128.564026) (xy 269.020936 128.73131) (xy 269.457151 128.73169) (xy 269.860306 128.56511)
+ (xy 270.169026 128.256928) (xy 270.33631 127.854064) (xy 270.33669 127.417849) (xy 270.33669 133.7394) (xy 267.79669 133.7394)
+ (xy 267.79669 127.417849) (xy 267.63011 127.014694) (xy 267.321928 126.705974) (xy 266.919064 126.53869) (xy 266.52669 126.538348)
+ (xy 266.52669 124.877849) (xy 266.36011 124.474694) (xy 266.051928 124.165974) (xy 265.649064 123.99869) (xy 265.25669 123.998348)
+ (xy 265.25669 118.527849) (xy 265.09011 118.124694) (xy 264.781928 117.815974) (xy 264.379064 117.64869) (xy 263.98669 117.648348)
+ (xy 263.98669 115.987849) (xy 263.82011 115.584694) (xy 263.511928 115.275974) (xy 263.109064 115.10869) (xy 262.71669 115.108348)
+ (xy 262.71669 109.637849) (xy 262.55011 109.234694) (xy 262.241928 108.925974) (xy 261.839064 108.75869) (xy 261.44669 108.758348)
+ (xy 261.44669 107.097849) (xy 261.28011 106.694694) (xy 260.971928 106.385974) (xy 260.569064 106.21869) (xy 260.17669 106.218348)
+ (xy 260.17669 100.747849) (xy 260.01011 100.344694) (xy 259.701928 100.035974) (xy 259.299064 99.86869) (xy 258.90669 99.868348)
+ (xy 258.90669 98.207849) (xy 258.74011 97.804694) (xy 258.431928 97.495974) (xy 258.029064 97.32869) (xy 257.63669 97.328348)
+ (xy 257.63669 91.857849) (xy 257.47011 91.454694) (xy 257.161928 91.145974) (xy 256.759064 90.97869) (xy 256.36669 90.978348)
+ (xy 256.36669 89.317849) (xy 256.20011 88.914694) (xy 255.891928 88.605974) (xy 255.489064 88.43869) (xy 255.09669 88.438348)
+ (xy 255.09669 82.967849) (xy 254.93011 82.564694) (xy 254.621928 82.255974) (xy 254.219064 82.08869) (xy 253.82669 82.088348)
+ (xy 253.82669 80.427849) (xy 253.66011 80.024694) (xy 253.351928 79.715974) (xy 252.949064 79.54869) (xy 252.55669 79.548348)
+ (xy 252.55669 74.077849) (xy 252.39011 73.674694) (xy 252.081928 73.365974) (xy 251.679064 73.19869) (xy 251.28669 73.198348)
+ (xy 251.28669 71.537849) (xy 251.12011 71.134694) (xy 250.811928 70.825974) (xy 250.409064 70.65869) (xy 250.01669 70.658348)
+ (xy 250.01669 65.187849) (xy 249.85011 64.784694) (xy 249.541928 64.475974) (xy 249.139064 64.30869) (xy 248.74669 64.308348)
+ (xy 248.74669 62.647849) (xy 248.58011 62.244694) (xy 248.271928 61.935974) (xy 247.869064 61.76869) (xy 247.432849 61.76831)
+ (xy 247.029694 61.93489) (xy 246.720974 62.243072) (xy 246.55369 62.645936) (xy 246.55331 63.082151) (xy 246.71989 63.485306)
+ (xy 247.028072 63.794026) (xy 247.430936 63.96131) (xy 247.867151 63.96169) (xy 248.270306 63.79511) (xy 248.579026 63.486928)
+ (xy 248.74631 63.084064) (xy 248.74669 62.647849) (xy 248.74669 64.308348) (xy 248.702849 64.30831) (xy 248.299694 64.47489)
+ (xy 247.990974 64.783072) (xy 247.82369 65.185936) (xy 247.82331 65.622151) (xy 247.98989 66.025306) (xy 248.298072 66.334026)
+ (xy 248.700936 66.50131) (xy 249.137151 66.50169) (xy 249.540306 66.33511) (xy 249.849026 66.026928) (xy 250.01631 65.624064)
+ (xy 250.01669 65.187849) (xy 250.01669 70.658348) (xy 249.972849 70.65831) (xy 249.569694 70.82489) (xy 249.260974 71.133072)
+ (xy 249.09369 71.535936) (xy 249.09331 71.972151) (xy 249.25989 72.375306) (xy 249.568072 72.684026) (xy 249.970936 72.85131)
+ (xy 250.407151 72.85169) (xy 250.810306 72.68511) (xy 251.119026 72.376928) (xy 251.28631 71.974064) (xy 251.28669 71.537849)
+ (xy 251.28669 73.198348) (xy 251.242849 73.19831) (xy 250.839694 73.36489) (xy 250.530974 73.673072) (xy 250.36369 74.075936)
+ (xy 250.36331 74.512151) (xy 250.52989 74.915306) (xy 250.838072 75.224026) (xy 251.240936 75.39131) (xy 251.677151 75.39169)
+ (xy 252.080306 75.22511) (xy 252.389026 74.916928) (xy 252.55631 74.514064) (xy 252.55669 74.077849) (xy 252.55669 79.548348)
+ (xy 252.512849 79.54831) (xy 252.109694 79.71489) (xy 251.800974 80.023072) (xy 251.63369 80.425936) (xy 251.63331 80.862151)
+ (xy 251.79989 81.265306) (xy 252.108072 81.574026) (xy 252.510936 81.74131) (xy 252.947151 81.74169) (xy 253.350306 81.57511)
+ (xy 253.659026 81.266928) (xy 253.82631 80.864064) (xy 253.82669 80.427849) (xy 253.82669 82.088348) (xy 253.782849 82.08831)
+ (xy 253.379694 82.25489) (xy 253.070974 82.563072) (xy 252.90369 82.965936) (xy 252.90331 83.402151) (xy 253.06989 83.805306)
+ (xy 253.378072 84.114026) (xy 253.780936 84.28131) (xy 254.217151 84.28169) (xy 254.620306 84.11511) (xy 254.929026 83.806928)
+ (xy 255.09631 83.404064) (xy 255.09669 82.967849) (xy 255.09669 88.438348) (xy 255.052849 88.43831) (xy 254.649694 88.60489)
+ (xy 254.340974 88.913072) (xy 254.17369 89.315936) (xy 254.17331 89.752151) (xy 254.33989 90.155306) (xy 254.648072 90.464026)
+ (xy 255.050936 90.63131) (xy 255.487151 90.63169) (xy 255.890306 90.46511) (xy 256.199026 90.156928) (xy 256.36631 89.754064)
+ (xy 256.36669 89.317849) (xy 256.36669 90.978348) (xy 256.322849 90.97831) (xy 255.919694 91.14489) (xy 255.610974 91.453072)
+ (xy 255.44369 91.855936) (xy 255.44331 92.292151) (xy 255.60989 92.695306) (xy 255.918072 93.004026) (xy 256.320936 93.17131)
+ (xy 256.757151 93.17169) (xy 257.160306 93.00511) (xy 257.469026 92.696928) (xy 257.63631 92.294064) (xy 257.63669 91.857849)
+ (xy 257.63669 97.328348) (xy 257.592849 97.32831) (xy 257.189694 97.49489) (xy 256.880974 97.803072) (xy 256.71369 98.205936)
+ (xy 256.71331 98.642151) (xy 256.87989 99.045306) (xy 257.188072 99.354026) (xy 257.590936 99.52131) (xy 258.027151 99.52169)
+ (xy 258.430306 99.35511) (xy 258.739026 99.046928) (xy 258.90631 98.644064) (xy 258.90669 98.207849) (xy 258.90669 99.868348)
+ (xy 258.862849 99.86831) (xy 258.459694 100.03489) (xy 258.150974 100.343072) (xy 257.98369 100.745936) (xy 257.98331 101.182151)
+ (xy 258.14989 101.585306) (xy 258.358018 101.793797) (xy 258.003692 101.646668) (xy 257.618001 101.646332) (xy 257.262282 101.793311)
+ (xy 257.469026 101.586928) (xy 257.63631 101.184064) (xy 257.63669 100.747849) (xy 257.47011 100.344694) (xy 257.161928 100.035974)
+ (xy 256.759064 99.86869) (xy 256.36669 99.868348) (xy 256.36669 98.207849) (xy 256.20011 97.804694) (xy 255.891928 97.495974)
+ (xy 255.489064 97.32869) (xy 255.09669 97.328348) (xy 255.09669 91.857849) (xy 254.93011 91.454694) (xy 254.621928 91.145974)
+ (xy 254.219064 90.97869) (xy 253.82669 90.978348) (xy 253.82669 89.317849) (xy 253.66011 88.914694) (xy 253.351928 88.605974)
+ (xy 252.949064 88.43869) (xy 252.55669 88.438348) (xy 252.55669 82.967849) (xy 252.39011 82.564694) (xy 252.081928 82.255974)
+ (xy 251.679064 82.08869) (xy 251.28669 82.088348) (xy 251.28669 80.427849) (xy 251.12011 80.024694) (xy 250.811928 79.715974)
+ (xy 250.409064 79.54869) (xy 250.01669 79.548348) (xy 250.01669 74.077849) (xy 249.85011 73.674694) (xy 249.541928 73.365974)
+ (xy 249.139064 73.19869) (xy 248.74669 73.198348) (xy 248.74669 71.537849) (xy 248.58011 71.134694) (xy 248.271928 70.825974)
+ (xy 247.869064 70.65869) (xy 247.47669 70.658348) (xy 247.47669 65.187849) (xy 247.31011 64.784694) (xy 247.001928 64.475974)
+ (xy 246.599064 64.30869) (xy 246.21003 64.308351) (xy 246.21003 62.665461) (xy 246.049934 62.259687) (xy 246.028934 62.228257)
+ (xy 245.825178 62.185177) (xy 245.789823 62.220532) (xy 245.789823 62.149822) (xy 245.746743 61.946066) (xy 245.346613 61.772345)
+ (xy 244.910461 61.76497) (xy 244.504687 61.925066) (xy 244.473257 61.946066) (xy 244.430177 62.149822) (xy 245.11 62.829645)
+ (xy 245.789823 62.149822) (xy 245.789823 62.220532) (xy 245.145355 62.865) (xy 245.825178 63.544823) (xy 246.028934 63.501743)
+ (xy 246.202655 63.101613) (xy 246.21003 62.665461) (xy 246.21003 64.308351) (xy 246.162849 64.30831) (xy 245.789823 64.46244)
+ (xy 245.789823 63.580178) (xy 245.11 62.900355) (xy 245.074645 62.93571) (xy 245.074645 62.865) (xy 244.394822 62.185177)
+ (xy 244.191066 62.228257) (xy 244.017345 62.628387) (xy 244.00997 63.064539) (xy 244.170066 63.470313) (xy 244.191066 63.501743)
+ (xy 244.394822 63.544823) (xy 245.074645 62.865) (xy 245.074645 62.93571) (xy 244.430177 63.580178) (xy 244.473257 63.783934)
+ (xy 244.873387 63.957655) (xy 245.309539 63.96503) (xy 245.715313 63.804934) (xy 245.746743 63.783934) (xy 245.789823 63.580178)
+ (xy 245.789823 64.46244) (xy 245.759694 64.47489) (xy 245.450974 64.783072) (xy 245.28369 65.185936) (xy 245.28331 65.622151)
+ (xy 245.44989 66.025306) (xy 245.758072 66.334026) (xy 246.160936 66.50131) (xy 246.597151 66.50169) (xy 247.000306 66.33511)
+ (xy 247.309026 66.026928) (xy 247.47631 65.624064) (xy 247.47669 65.187849) (xy 247.47669 70.658348) (xy 247.432849 70.65831)
+ (xy 247.029694 70.82489) (xy 246.720974 71.133072) (xy 246.55369 71.535936) (xy 246.55331 71.972151) (xy 246.71989 72.375306)
+ (xy 247.028072 72.684026) (xy 247.430936 72.85131) (xy 247.867151 72.85169) (xy 248.270306 72.68511) (xy 248.579026 72.376928)
+ (xy 248.74631 71.974064) (xy 248.74669 71.537849) (xy 248.74669 73.198348) (xy 248.702849 73.19831) (xy 248.299694 73.36489)
+ (xy 247.990974 73.673072) (xy 247.82369 74.075936) (xy 247.82331 74.512151) (xy 247.98989 74.915306) (xy 248.298072 75.224026)
+ (xy 248.700936 75.39131) (xy 249.137151 75.39169) (xy 249.540306 75.22511) (xy 249.849026 74.916928) (xy 250.01631 74.514064)
+ (xy 250.01669 74.077849) (xy 250.01669 79.548348) (xy 249.972849 79.54831) (xy 249.569694 79.71489) (xy 249.260974 80.023072)
+ (xy 249.09369 80.425936) (xy 249.09331 80.862151) (xy 249.25989 81.265306) (xy 249.568072 81.574026) (xy 249.970936 81.74131)
+ (xy 250.407151 81.74169) (xy 250.810306 81.57511) (xy 251.119026 81.266928) (xy 251.28631 80.864064) (xy 251.28669 80.427849)
+ (xy 251.28669 82.088348) (xy 251.242849 82.08831) (xy 250.839694 82.25489) (xy 250.530974 82.563072) (xy 250.36369 82.965936)
+ (xy 250.36331 83.402151) (xy 250.52989 83.805306) (xy 250.824537 84.100468) (xy 250.638577 84.286105) (xy 250.490668 84.642308)
+ (xy 250.490332 85.027999) (xy 250.637618 85.38446) (xy 250.910105 85.657423) (xy 251.266308 85.805332) (xy 251.651999 85.805668)
+ (xy 252.00846 85.658382) (xy 252.281423 85.385895) (xy 252.429332 85.029692) (xy 252.429668 84.644001) (xy 252.282382 84.28754)
+ (xy 252.095305 84.100136) (xy 252.389026 83.806928) (xy 252.55631 83.404064) (xy 252.55669 82.967849) (xy 252.55669 88.438348)
+ (xy 252.512849 88.43831) (xy 252.109694 88.60489) (xy 251.800974 88.913072) (xy 251.63369 89.315936) (xy 251.63331 89.752151)
+ (xy 251.79989 90.155306) (xy 252.108072 90.464026) (xy 252.510936 90.63131) (xy 252.947151 90.63169) (xy 253.350306 90.46511)
+ (xy 253.659026 90.156928) (xy 253.82631 89.754064) (xy 253.82669 89.317849) (xy 253.82669 90.978348) (xy 253.782849 90.97831)
+ (xy 253.379694 91.14489) (xy 253.070974 91.453072) (xy 252.90369 91.855936) (xy 252.90331 92.292151) (xy 253.06989 92.695306)
+ (xy 253.378072 93.004026) (xy 253.780936 93.17131) (xy 254.217151 93.17169) (xy 254.620306 93.00511) (xy 254.929026 92.696928)
+ (xy 255.09631 92.294064) (xy 255.09669 91.857849) (xy 255.09669 97.328348) (xy 255.052849 97.32831) (xy 254.649694 97.49489)
+ (xy 254.340974 97.803072) (xy 254.17369 98.205936) (xy 254.17331 98.642151) (xy 254.33989 99.045306) (xy 254.648072 99.354026)
+ (xy 255.050936 99.52131) (xy 255.487151 99.52169) (xy 255.890306 99.35511) (xy 256.199026 99.046928) (xy 256.36631 98.644064)
+ (xy 256.36669 98.207849) (xy 256.36669 99.868348) (xy 256.322849 99.86831) (xy 255.919694 100.03489) (xy 255.610974 100.343072)
+ (xy 255.44369 100.745936) (xy 255.44331 101.182151) (xy 255.60989 101.585306) (xy 255.818018 101.793797) (xy 255.463692 101.646668)
+ (xy 255.078001 101.646332) (xy 254.722282 101.793311) (xy 254.929026 101.586928) (xy 255.09631 101.184064) (xy 255.09669 100.747849)
+ (xy 254.93011 100.344694) (xy 254.621928 100.035974) (xy 254.219064 99.86869) (xy 253.82669 99.868348) (xy 253.82669 98.207849)
+ (xy 253.66011 97.804694) (xy 253.351928 97.495974) (xy 252.949064 97.32869) (xy 252.55669 97.328348) (xy 252.55669 91.857849)
+ (xy 252.39011 91.454694) (xy 252.081928 91.145974) (xy 251.679064 90.97869) (xy 251.28669 90.978348) (xy 251.28669 89.317849)
+ (xy 251.12011 88.914694) (xy 250.811928 88.605974) (xy 250.409064 88.43869) (xy 250.01669 88.438348) (xy 250.01669 82.967849)
+ (xy 249.85011 82.564694) (xy 249.541928 82.255974) (xy 249.139064 82.08869) (xy 248.74669 82.088348) (xy 248.74669 80.427849)
+ (xy 248.58011 80.024694) (xy 248.271928 79.715974) (xy 247.869064 79.54869) (xy 247.47669 79.548348) (xy 247.47669 74.077849)
+ (xy 247.31011 73.674694) (xy 247.001928 73.365974) (xy 246.599064 73.19869) (xy 246.21003 73.198351) (xy 246.21003 71.555461)
+ (xy 246.049934 71.149687) (xy 246.028934 71.118257) (xy 245.825178 71.075177) (xy 245.789823 71.110532) (xy 245.789823 71.039822)
+ (xy 245.746743 70.836066) (xy 245.346613 70.662345) (xy 244.93669 70.655413) (xy 244.93669 65.187849) (xy 244.77011 64.784694)
+ (xy 244.461928 64.475974) (xy 244.059064 64.30869) (xy 243.66669 64.308348) (xy 243.66669 62.647849) (xy 243.50011 62.244694)
+ (xy 243.191928 61.935974) (xy 242.789064 61.76869) (xy 242.352849 61.76831) (xy 241.949694 61.93489) (xy 241.640974 62.243072)
+ (xy 241.47369 62.645936) (xy 241.47331 63.082151) (xy 241.63989 63.485306) (xy 241.948072 63.794026) (xy 242.350936 63.96131)
+ (xy 242.787151 63.96169) (xy 243.190306 63.79511) (xy 243.499026 63.486928) (xy 243.66631 63.084064) (xy 243.66669 62.647849)
+ (xy 243.66669 64.308348) (xy 243.622849 64.30831) (xy 243.219694 64.47489) (xy 242.910974 64.783072) (xy 242.74369 65.185936)
+ (xy 242.74331 65.622151) (xy 242.90989 66.025306) (xy 243.218072 66.334026) (xy 243.620936 66.50131) (xy 244.057151 66.50169)
+ (xy 244.460306 66.33511) (xy 244.769026 66.026928) (xy 244.93631 65.624064) (xy 244.93669 65.187849) (xy 244.93669 70.655413)
+ (xy 244.910461 70.65497) (xy 244.809668 70.694737) (xy 244.809668 67.372001) (xy 244.662382 67.01554) (xy 244.389895 66.742577)
+ (xy 244.033692 66.594668) (xy 243.648001 66.594332) (xy 243.29154 66.741618) (xy 243.018577 67.014105) (xy 242.904746 67.288239)
+ (xy 242.763692 67.229668) (xy 242.39669 67.229348) (xy 242.39669 65.187849) (xy 242.23011 64.784694) (xy 241.921928 64.475974)
+ (xy 241.519064 64.30869) (xy 241.12669 64.308348) (xy 241.12669 62.647849) (xy 240.96011 62.244694) (xy 240.651928 61.935974)
+ (xy 240.249064 61.76869) (xy 239.812849 61.76831) (xy 239.409694 61.93489) (xy 239.100974 62.243072) (xy 238.93369 62.645936)
+ (xy 238.93331 63.082151) (xy 239.09989 63.485306) (xy 239.408072 63.794026) (xy 239.810936 63.96131) (xy 240.247151 63.96169)
+ (xy 240.650306 63.79511) (xy 240.959026 63.486928) (xy 241.12631 63.084064) (xy 241.12669 62.647849) (xy 241.12669 64.308348)
+ (xy 241.082849 64.30831) (xy 240.679694 64.47489) (xy 240.370974 64.783072) (xy 240.20369 65.185936) (xy 240.20331 65.622151)
+ (xy 240.36989 66.025306) (xy 240.678072 66.334026) (xy 241.080936 66.50131) (xy 241.517151 66.50169) (xy 241.920306 66.33511)
+ (xy 242.229026 66.026928) (xy 242.39631 65.624064) (xy 242.39669 65.187849) (xy 242.39669 67.229348) (xy 242.378001 67.229332)
+ (xy 242.02154 67.376618) (xy 241.748577 67.649105) (xy 241.600668 68.005308) (xy 241.600332 68.390999) (xy 241.747618 68.74746)
+ (xy 242.020105 69.020423) (xy 242.376308 69.168332) (xy 242.761999 69.168668) (xy 243.11846 69.021382) (xy 243.391423 68.748895)
+ (xy 243.505253 68.47476) (xy 243.646308 68.533332) (xy 244.031999 68.533668) (xy 244.38846 68.386382) (xy 244.661423 68.113895)
+ (xy 244.809332 67.757692) (xy 244.809668 67.372001) (xy 244.809668 70.694737) (xy 244.504687 70.815066) (xy 244.473257 70.836066)
+ (xy 244.430177 71.039822) (xy 245.11 71.719645) (xy 245.789823 71.039822) (xy 245.789823 71.110532) (xy 245.145355 71.755)
+ (xy 245.825178 72.434823) (xy 246.028934 72.391743) (xy 246.202655 71.991613) (xy 246.21003 71.555461) (xy 246.21003 73.198351)
+ (xy 246.162849 73.19831) (xy 245.789823 73.35244) (xy 245.789823 72.470178) (xy 245.11 71.790355) (xy 245.074645 71.82571)
+ (xy 245.074645 71.755) (xy 244.394822 71.075177) (xy 244.191066 71.118257) (xy 244.017345 71.518387) (xy 244.00997 71.954539)
+ (xy 244.170066 72.360313) (xy 244.191066 72.391743) (xy 244.394822 72.434823) (xy 245.074645 71.755) (xy 245.074645 71.82571)
+ (xy 244.430177 72.470178) (xy 244.473257 72.673934) (xy 244.873387 72.847655) (xy 245.309539 72.85503) (xy 245.715313 72.694934)
+ (xy 245.746743 72.673934) (xy 245.789823 72.470178) (xy 245.789823 73.35244) (xy 245.759694 73.36489) (xy 245.450974 73.673072)
+ (xy 245.28369 74.075936) (xy 245.28331 74.512151) (xy 245.44989 74.915306) (xy 245.758072 75.224026) (xy 246.160936 75.39131)
+ (xy 246.597151 75.39169) (xy 247.000306 75.22511) (xy 247.309026 74.916928) (xy 247.47631 74.514064) (xy 247.47669 74.077849)
+ (xy 247.47669 79.548348) (xy 247.432849 79.54831) (xy 247.029694 79.71489) (xy 246.720974 80.023072) (xy 246.55369 80.425936)
+ (xy 246.55331 80.862151) (xy 246.71989 81.265306) (xy 247.028072 81.574026) (xy 247.430936 81.74131) (xy 247.867151 81.74169)
+ (xy 248.270306 81.57511) (xy 248.579026 81.266928) (xy 248.74631 80.864064) (xy 248.74669 80.427849) (xy 248.74669 82.088348)
+ (xy 248.702849 82.08831) (xy 248.299694 82.25489) (xy 247.990974 82.563072) (xy 247.82369 82.965936) (xy 247.82331 83.402151)
+ (xy 247.98989 83.805306) (xy 248.298072 84.114026) (xy 248.700936 84.28131) (xy 249.137151 84.28169) (xy 249.540306 84.11511)
+ (xy 249.849026 83.806928) (xy 250.01631 83.404064) (xy 250.01669 82.967849) (xy 250.01669 88.438348) (xy 249.972849 88.43831)
+ (xy 249.569694 88.60489) (xy 249.260974 88.913072) (xy 249.09369 89.315936) (xy 249.09331 89.752151) (xy 249.25989 90.155306)
+ (xy 249.568072 90.464026) (xy 249.970936 90.63131) (xy 250.407151 90.63169) (xy 250.810306 90.46511) (xy 251.119026 90.156928)
+ (xy 251.28631 89.754064) (xy 251.28669 89.317849) (xy 251.28669 90.978348) (xy 251.242849 90.97831) (xy 250.839694 91.14489)
+ (xy 250.530974 91.453072) (xy 250.36369 91.855936) (xy 250.36331 92.292151) (xy 250.52989 92.695306) (xy 250.838072 93.004026)
+ (xy 251.240936 93.17131) (xy 251.677151 93.17169) (xy 252.080306 93.00511) (xy 252.389026 92.696928) (xy 252.55631 92.294064)
+ (xy 252.55669 91.857849) (xy 252.55669 97.328348) (xy 252.512849 97.32831) (xy 252.109694 97.49489) (xy 251.800974 97.803072)
+ (xy 251.63369 98.205936) (xy 251.63331 98.642151) (xy 251.79989 99.045306) (xy 252.108072 99.354026) (xy 252.510936 99.52131)
+ (xy 252.947151 99.52169) (xy 253.350306 99.35511) (xy 253.659026 99.046928) (xy 253.82631 98.644064) (xy 253.82669 98.207849)
+ (xy 253.82669 99.868348) (xy 253.782849 99.86831) (xy 253.379694 100.03489) (xy 253.070974 100.343072) (xy 252.90369 100.745936)
+ (xy 252.90331 101.182151) (xy 253.06989 101.585306) (xy 253.278018 101.793797) (xy 252.923692 101.646668) (xy 252.538001 101.646332)
+ (xy 252.182282 101.793311) (xy 252.389026 101.586928) (xy 252.55631 101.184064) (xy 252.55669 100.747849) (xy 252.39011 100.344694)
+ (xy 252.081928 100.035974) (xy 251.679064 99.86869) (xy 251.28669 99.868348) (xy 251.28669 98.207849) (xy 251.12011 97.804694)
+ (xy 250.811928 97.495974) (xy 250.409064 97.32869) (xy 250.01669 97.328348) (xy 250.01669 91.857849) (xy 249.85011 91.454694)
+ (xy 249.541928 91.145974) (xy 249.139064 90.97869) (xy 248.74669 90.978348) (xy 248.74669 89.317849) (xy 248.58011 88.914694)
+ (xy 248.271928 88.605974) (xy 247.869064 88.43869) (xy 247.47669 88.438348) (xy 247.47669 82.967849) (xy 247.31011 82.564694)
+ (xy 247.001928 82.255974) (xy 246.599064 82.08869) (xy 246.21003 82.088351) (xy 246.21003 80.445461) (xy 246.049934 80.039687)
+ (xy 246.028934 80.008257) (xy 245.825178 79.965177) (xy 245.789823 80.000532) (xy 245.789823 79.929822) (xy 245.746743 79.726066)
+ (xy 245.346613 79.552345) (xy 244.93669 79.545413) (xy 244.93669 74.077849) (xy 244.77011 73.674694) (xy 244.461928 73.365974)
+ (xy 244.059064 73.19869) (xy 243.66669 73.198348) (xy 243.66669 71.537849) (xy 243.50011 71.134694) (xy 243.191928 70.825974)
+ (xy 242.789064 70.65869) (xy 242.352849 70.65831) (xy 241.949694 70.82489) (xy 241.640974 71.133072) (xy 241.47369 71.535936)
+ (xy 241.47331 71.972151) (xy 241.63989 72.375306) (xy 241.948072 72.684026) (xy 242.350936 72.85131) (xy 242.787151 72.85169)
+ (xy 243.190306 72.68511) (xy 243.499026 72.376928) (xy 243.66631 71.974064) (xy 243.66669 71.537849) (xy 243.66669 73.198348)
+ (xy 243.622849 73.19831) (xy 243.219694 73.36489) (xy 242.910974 73.673072) (xy 242.74369 74.075936) (xy 242.74331 74.512151)
+ (xy 242.90989 74.915306) (xy 243.218072 75.224026) (xy 243.620936 75.39131) (xy 244.057151 75.39169) (xy 244.460306 75.22511)
+ (xy 244.769026 74.916928) (xy 244.93631 74.514064) (xy 244.93669 74.077849) (xy 244.93669 79.545413) (xy 244.910461 79.54497)
+ (xy 244.504687 79.705066) (xy 244.473257 79.726066) (xy 244.430177 79.929822) (xy 245.11 80.609645) (xy 245.789823 79.929822)
+ (xy 245.789823 80.000532) (xy 245.145355 80.645) (xy 245.825178 81.324823) (xy 246.028934 81.281743) (xy 246.202655 80.881613)
+ (xy 246.21003 80.445461) (xy 246.21003 82.088351) (xy 246.162849 82.08831) (xy 245.789823 82.24244) (xy 245.789823 81.360178)
+ (xy 245.11 80.680355) (xy 245.074645 80.71571) (xy 245.074645 80.645) (xy 244.394822 79.965177) (xy 244.191066 80.008257)
+ (xy 244.017345 80.408387) (xy 244.00997 80.844539) (xy 244.170066 81.250313) (xy 244.191066 81.281743) (xy 244.394822 81.324823)
+ (xy 245.074645 80.645) (xy 245.074645 80.71571) (xy 244.430177 81.360178) (xy 244.473257 81.563934) (xy 244.873387 81.737655)
+ (xy 245.309539 81.74503) (xy 245.715313 81.584934) (xy 245.746743 81.563934) (xy 245.789823 81.360178) (xy 245.789823 82.24244)
+ (xy 245.759694 82.25489) (xy 245.450974 82.563072) (xy 245.28369 82.965936) (xy 245.28331 83.402151) (xy 245.44989 83.805306)
+ (xy 245.758072 84.114026) (xy 246.160936 84.28131) (xy 246.597151 84.28169) (xy 247.000306 84.11511) (xy 247.309026 83.806928)
+ (xy 247.47631 83.404064) (xy 247.47669 82.967849) (xy 247.47669 88.438348) (xy 247.432849 88.43831) (xy 247.029694 88.60489)
+ (xy 246.720974 88.913072) (xy 246.55369 89.315936) (xy 246.55331 89.752151) (xy 246.71989 90.155306) (xy 247.028072 90.464026)
+ (xy 247.430936 90.63131) (xy 247.867151 90.63169) (xy 248.270306 90.46511) (xy 248.579026 90.156928) (xy 248.74631 89.754064)
+ (xy 248.74669 89.317849) (xy 248.74669 90.978348) (xy 248.702849 90.97831) (xy 248.299694 91.14489) (xy 247.990974 91.453072)
+ (xy 247.82369 91.855936) (xy 247.82331 92.292151) (xy 247.98989 92.695306) (xy 248.298072 93.004026) (xy 248.700936 93.17131)
+ (xy 249.137151 93.17169) (xy 249.540306 93.00511) (xy 249.849026 92.696928) (xy 250.01631 92.294064) (xy 250.01669 91.857849)
+ (xy 250.01669 97.328348) (xy 249.972849 97.32831) (xy 249.569694 97.49489) (xy 249.260974 97.803072) (xy 249.09369 98.205936)
+ (xy 249.09331 98.642151) (xy 249.25989 99.045306) (xy 249.568072 99.354026) (xy 249.970936 99.52131) (xy 250.407151 99.52169)
+ (xy 250.810306 99.35511) (xy 251.119026 99.046928) (xy 251.28631 98.644064) (xy 251.28669 98.207849) (xy 251.28669 99.868348)
+ (xy 251.242849 99.86831) (xy 250.839694 100.03489) (xy 250.530974 100.343072) (xy 250.36369 100.745936) (xy 250.36331 101.182151)
+ (xy 250.52743 101.579353) (xy 250.383692 101.519668) (xy 249.998001 101.519332) (xy 249.852053 101.579635) (xy 250.01631 101.184064)
+ (xy 250.01669 100.747849) (xy 249.85011 100.344694) (xy 249.541928 100.035974) (xy 249.139064 99.86869) (xy 248.74669 99.868348)
+ (xy 248.74669 98.207849) (xy 248.58011 97.804694) (xy 248.271928 97.495974) (xy 247.869064 97.32869) (xy 247.47669 97.328348)
+ (xy 247.47669 91.857849) (xy 247.31011 91.454694) (xy 247.001928 91.145974) (xy 246.599064 90.97869) (xy 246.21003 90.978351)
+ (xy 246.21003 89.335461) (xy 246.049934 88.929687) (xy 246.028934 88.898257) (xy 245.825178 88.855177) (xy 245.789823 88.890532)
+ (xy 245.789823 88.819822) (xy 245.746743 88.616066) (xy 245.346613 88.442345) (xy 244.93669 88.435413) (xy 244.93669 82.967849)
+ (xy 244.77011 82.564694) (xy 244.461928 82.255974) (xy 244.059064 82.08869) (xy 243.66669 82.088348) (xy 243.66669 80.427849)
+ (xy 243.50011 80.024694) (xy 243.191928 79.715974) (xy 242.789064 79.54869) (xy 242.39669 79.548348) (xy 242.39669 74.077849)
+ (xy 242.23011 73.674694) (xy 241.921928 73.365974) (xy 241.519064 73.19869) (xy 241.12669 73.198348) (xy 241.12669 71.537849)
+ (xy 240.96011 71.134694) (xy 240.651928 70.825974) (xy 240.249064 70.65869) (xy 239.85669 70.658348) (xy 239.85669 65.187849)
+ (xy 239.69011 64.784694) (xy 239.381928 64.475974) (xy 238.979064 64.30869) (xy 238.542849 64.30831) (xy 238.204478 64.448121)
+ (xy 238.058382 64.09454) (xy 237.861924 63.897739) (xy 238.110306 63.79511) (xy 238.419026 63.486928) (xy 238.58631 63.084064)
+ (xy 238.58669 62.647849) (xy 238.42011 62.244694) (xy 238.111928 61.935974) (xy 237.709064 61.76869) (xy 237.272849 61.76831)
+ (xy 236.869694 61.93489) (xy 236.560974 62.243072) (xy 236.39369 62.645936) (xy 236.39331 63.082151) (xy 236.55989 63.485306)
+ (xy 236.834146 63.760041) (xy 236.68754 63.820618) (xy 236.414577 64.093105) (xy 236.36393 64.215074) (xy 236.364355 63.729217)
+ (xy 236.05307 62.975851) (xy 235.477181 62.398955) (xy 234.724359 62.086357) (xy 233.909217 62.085645) (xy 233.155851 62.39693)
+ (xy 232.598935 62.952873) (xy 232.451895 62.805577) (xy 232.095692 62.657668) (xy 231.710001 62.657332) (xy 231.35354 62.804618)
+ (xy 231.080577 63.077105) (xy 230.96669 63.351374) (xy 230.96669 62.647849) (xy 230.80011 62.244694) (xy 230.491928 61.935974)
+ (xy 230.089064 61.76869) (xy 229.652849 61.76831) (xy 229.249694 61.93489) (xy 228.940974 62.243072) (xy 228.77369 62.645936)
+ (xy 228.77331 63.082151) (xy 228.93989 63.485306) (xy 229.248072 63.794026) (xy 229.650936 63.96131) (xy 230.087151 63.96169)
+ (xy 230.490306 63.79511) (xy 230.799026 63.486928) (xy 230.96631 63.084064) (xy 230.96669 62.647849) (xy 230.96669 63.351374)
+ (xy 230.932668 63.433308) (xy 230.932332 63.818999) (xy 231.079618 64.17546) (xy 231.212488 64.308562) (xy 230.922849 64.30831)
+ (xy 230.519694 64.47489) (xy 230.210974 64.783072) (xy 230.04369 65.185936) (xy 230.04331 65.622151) (xy 230.20989 66.025306)
+ (xy 230.518072 66.334026) (xy 230.920936 66.50131) (xy 231.357151 66.50169) (xy 231.760306 66.33511) (xy 232.069026 66.026928)
+ (xy 232.23631 65.624064) (xy 232.23669 65.187849) (xy 232.07011 64.784694) (xy 231.882227 64.596483) (xy 232.093999 64.596668)
+ (xy 232.265658 64.52574) (xy 232.265645 64.540783) (xy 232.57693 65.294149) (xy 233.152819 65.871045) (xy 233.905641 66.183643)
+ (xy 234.720783 66.184355) (xy 235.474149 65.87307) (xy 236.051045 65.297181) (xy 236.266381 64.778592) (xy 236.266332 64.834999)
+ (xy 236.413618 65.19146) (xy 236.686105 65.464423) (xy 237.042308 65.612332) (xy 237.427999 65.612668) (xy 237.663402 65.515401)
+ (xy 237.66331 65.622151) (xy 237.82989 66.025306) (xy 238.138072 66.334026) (xy 238.540936 66.50131) (xy 238.977151 66.50169)
+ (xy 239.380306 66.33511) (xy 239.689026 66.026928) (xy 239.85631 65.624064) (xy 239.85669 65.187849) (xy 239.85669 70.658348)
+ (xy 239.812849 70.65831) (xy 239.409694 70.82489) (xy 239.100974 71.133072) (xy 238.93369 71.535936) (xy 238.93331 71.972151)
+ (xy 239.09989 72.375306) (xy 239.408072 72.684026) (xy 239.810936 72.85131) (xy 240.247151 72.85169) (xy 240.650306 72.68511)
+ (xy 240.959026 72.376928) (xy 241.12631 71.974064) (xy 241.12669 71.537849) (xy 241.12669 73.198348) (xy 241.082849 73.19831)
+ (xy 240.679694 73.36489) (xy 240.370974 73.673072) (xy 240.20369 74.075936) (xy 240.20331 74.512151) (xy 240.36989 74.915306)
+ (xy 240.678072 75.224026) (xy 241.080936 75.39131) (xy 241.517151 75.39169) (xy 241.920306 75.22511) (xy 242.229026 74.916928)
+ (xy 242.39631 74.514064) (xy 242.39669 74.077849) (xy 242.39669 79.548348) (xy 242.352849 79.54831) (xy 241.949694 79.71489)
+ (xy 241.640974 80.023072) (xy 241.47369 80.425936) (xy 241.47331 80.862151) (xy 241.63989 81.265306) (xy 241.948072 81.574026)
+ (xy 242.350936 81.74131) (xy 242.787151 81.74169) (xy 243.190306 81.57511) (xy 243.499026 81.266928) (xy 243.66631 80.864064)
+ (xy 243.66669 80.427849) (xy 243.66669 82.088348) (xy 243.622849 82.08831) (xy 243.219694 82.25489) (xy 242.910974 82.563072)
+ (xy 242.74369 82.965936) (xy 242.74331 83.402151) (xy 242.90989 83.805306) (xy 243.218072 84.114026) (xy 243.620936 84.28131)
+ (xy 244.057151 84.28169) (xy 244.460306 84.11511) (xy 244.769026 83.806928) (xy 244.93631 83.404064) (xy 244.93669 82.967849)
+ (xy 244.93669 88.435413) (xy 244.910461 88.43497) (xy 244.504687 88.595066) (xy 244.473257 88.616066) (xy 244.430177 88.819822)
+ (xy 245.11 89.499645) (xy 245.789823 88.819822) (xy 245.789823 88.890532) (xy 245.145355 89.535) (xy 245.825178 90.214823)
+ (xy 246.028934 90.171743) (xy 246.202655 89.771613) (xy 246.21003 89.335461) (xy 246.21003 90.978351) (xy 246.162849 90.97831)
+ (xy 245.789823 91.13244) (xy 245.789823 90.250178) (xy 245.11 89.570355) (xy 245.074645 89.60571) (xy 245.074645 89.535)
+ (xy 244.394822 88.855177) (xy 244.191066 88.898257) (xy 244.017345 89.298387) (xy 244.00997 89.734539) (xy 244.170066 90.140313)
+ (xy 244.191066 90.171743) (xy 244.394822 90.214823) (xy 245.074645 89.535) (xy 245.074645 89.60571) (xy 244.430177 90.250178)
+ (xy 244.473257 90.453934) (xy 244.873387 90.627655) (xy 245.309539 90.63503) (xy 245.715313 90.474934) (xy 245.746743 90.453934)
+ (xy 245.789823 90.250178) (xy 245.789823 91.13244) (xy 245.759694 91.14489) (xy 245.450974 91.453072) (xy 245.28369 91.855936)
+ (xy 245.28331 92.292151) (xy 245.44989 92.695306) (xy 245.758072 93.004026) (xy 246.160936 93.17131) (xy 246.597151 93.17169)
+ (xy 247.000306 93.00511) (xy 247.309026 92.696928) (xy 247.47631 92.294064) (xy 247.47669 91.857849) (xy 247.47669 97.328348)
+ (xy 247.432849 97.32831) (xy 247.029694 97.49489) (xy 246.720974 97.803072) (xy 246.55369 98.205936) (xy 246.55331 98.642151)
+ (xy 246.71989 99.045306) (xy 247.028072 99.354026) (xy 247.430936 99.52131) (xy 247.867151 99.52169) (xy 248.270306 99.35511)
+ (xy 248.579026 99.046928) (xy 248.74631 98.644064) (xy 248.74669 98.207849) (xy 248.74669 99.868348) (xy 248.702849 99.86831)
+ (xy 248.299694 100.03489) (xy 247.990974 100.343072) (xy 247.82369 100.745936) (xy 247.82331 101.182151) (xy 247.98989 101.585306)
+ (xy 248.298072 101.894026) (xy 248.700936 102.06131) (xy 249.137151 102.06169) (xy 249.355062 101.97165) (xy 249.220668 102.295308)
+ (xy 249.220332 102.680999) (xy 249.367618 103.03746) (xy 249.640105 103.310423) (xy 249.996308 103.458332) (xy 250.381999 103.458668)
+ (xy 250.73846 103.311382) (xy 251.011423 103.038895) (xy 251.159332 102.682692) (xy 251.159668 102.297001) (xy 251.025282 101.971762)
+ (xy 251.240936 102.06131) (xy 251.677151 102.06169) (xy 252.079563 101.895416) (xy 251.908577 102.066105) (xy 251.760668 102.422308)
+ (xy 251.760332 102.807999) (xy 251.907618 103.16446) (xy 252.180105 103.437423) (xy 252.536308 103.585332) (xy 252.921999 103.585668)
+ (xy 253.27846 103.438382) (xy 253.551423 103.165895) (xy 253.699332 102.809692) (xy 253.699668 102.424001) (xy 253.552382 102.06754)
+ (xy 253.379948 101.894805) (xy 253.780936 102.06131) (xy 254.217151 102.06169) (xy 254.619563 101.895416) (xy 254.448577 102.066105)
+ (xy 254.300668 102.422308) (xy 254.300332 102.807999) (xy 254.447618 103.16446) (xy 254.720105 103.437423) (xy 255.076308 103.585332)
+ (xy 255.461999 103.585668) (xy 255.81846 103.438382) (xy 256.091423 103.165895) (xy 256.239332 102.809692) (xy 256.239668 102.424001)
+ (xy 256.092382 102.06754) (xy 255.919948 101.894805) (xy 256.320936 102.06131) (xy 256.757151 102.06169) (xy 257.159563 101.895416)
+ (xy 256.988577 102.066105) (xy 256.840668 102.422308) (xy 256.840332 102.807999) (xy 256.987618 103.16446) (xy 257.260105 103.437423)
+ (xy 257.616308 103.585332) (xy 258.001999 103.585668) (xy 258.35846 103.438382) (xy 258.631423 103.165895) (xy 258.779332 102.809692)
+ (xy 258.779668 102.424001) (xy 258.632382 102.06754) (xy 258.459948 101.894805) (xy 258.860936 102.06131) (xy 259.297151 102.06169)
+ (xy 259.700306 101.89511) (xy 260.009026 101.586928) (xy 260.17631 101.184064) (xy 260.17669 100.747849) (xy 260.17669 106.218348)
+ (xy 260.132849 106.21831) (xy 259.729694 106.38489) (xy 259.420974 106.693072) (xy 259.25369 107.095936) (xy 259.25331 107.532151)
+ (xy 259.41989 107.935306) (xy 259.728072 108.244026) (xy 260.130936 108.41131) (xy 260.567151 108.41169) (xy 260.970306 108.24511)
+ (xy 261.279026 107.936928) (xy 261.44631 107.534064) (xy 261.44669 107.097849) (xy 261.44669 108.758348) (xy 261.402849 108.75831)
+ (xy 260.999694 108.92489) (xy 260.690974 109.233072) (xy 260.52369 109.635936) (xy 260.52331 110.072151) (xy 260.68989 110.475306)
+ (xy 260.998072 110.784026) (xy 261.400936 110.95131) (xy 261.837151 110.95169) (xy 262.240306 110.78511) (xy 262.549026 110.476928)
+ (xy 262.71631 110.074064) (xy 262.71669 109.637849) (xy 262.71669 115.108348) (xy 262.672849 115.10831) (xy 262.269694 115.27489)
+ (xy 261.960974 115.583072) (xy 261.79369 115.985936) (xy 261.79331 116.422151) (xy 261.95989 116.825306) (xy 262.268072 117.134026)
+ (xy 262.670936 117.30131) (xy 263.107151 117.30169) (xy 263.510306 117.13511) (xy 263.819026 116.826928) (xy 263.98631 116.424064)
+ (xy 263.98669 115.987849) (xy 263.98669 117.648348) (xy 263.942849 117.64831) (xy 263.539694 117.81489) (xy 263.230974 118.123072)
+ (xy 263.06369 118.525936) (xy 263.06331 118.962151) (xy 263.22989 119.365306) (xy 263.538072 119.674026) (xy 263.940936 119.84131)
+ (xy 264.377151 119.84169) (xy 264.780306 119.67511) (xy 265.089026 119.366928) (xy 265.25631 118.964064) (xy 265.25669 118.527849)
+ (xy 265.25669 123.998348) (xy 265.212849 123.99831) (xy 264.809694 124.16489) (xy 264.500974 124.473072) (xy 264.33369 124.875936)
+ (xy 264.33331 125.312151) (xy 264.49989 125.715306) (xy 264.808072 126.024026) (xy 265.210936 126.19131) (xy 265.647151 126.19169)
+ (xy 266.050306 126.02511) (xy 266.359026 125.716928) (xy 266.52631 125.314064) (xy 266.52669 124.877849) (xy 266.52669 126.538348)
+ (xy 266.482849 126.53831) (xy 266.079694 126.70489) (xy 265.770974 127.013072) (xy 265.60369 127.415936) (xy 265.60331 127.852151)
+ (xy 265.76989 128.255306) (xy 266.078072 128.564026) (xy 266.480936 128.73131) (xy 266.917151 128.73169) (xy 267.320306 128.56511)
+ (xy 267.629026 128.256928) (xy 267.79631 127.854064) (xy 267.79669 127.417849) (xy 267.79669 133.7394) (xy 265.25669 133.7394)
+ (xy 265.25669 127.417849) (xy 265.09011 127.014694) (xy 264.781928 126.705974) (xy 264.379064 126.53869) (xy 263.98669 126.538348)
+ (xy 263.98669 124.877849) (xy 263.82011 124.474694) (xy 263.511928 124.165974) (xy 263.109064 123.99869) (xy 262.71669 123.998348)
+ (xy 262.71669 118.527849) (xy 262.55011 118.124694) (xy 262.241928 117.815974) (xy 261.839064 117.64869) (xy 261.44669 117.648348)
+ (xy 261.44669 115.987849) (xy 261.28011 115.584694) (xy 260.971928 115.275974) (xy 260.569064 115.10869) (xy 260.17669 115.108348)
+ (xy 260.17669 109.637849) (xy 260.01011 109.234694) (xy 259.701928 108.925974) (xy 259.299064 108.75869) (xy 258.90669 108.758348)
+ (xy 258.90669 107.097849) (xy 258.74011 106.694694) (xy 258.431928 106.385974) (xy 258.029064 106.21869) (xy 257.592849 106.21831)
+ (xy 257.189694 106.38489) (xy 256.880974 106.693072) (xy 256.71369 107.095936) (xy 256.71331 107.532151) (xy 256.87989 107.935306)
+ (xy 257.188072 108.244026) (xy 257.590936 108.41131) (xy 258.027151 108.41169) (xy 258.430306 108.24511) (xy 258.739026 107.936928)
+ (xy 258.90631 107.534064) (xy 258.90669 107.097849) (xy 258.90669 108.758348) (xy 258.862849 108.75831) (xy 258.459694 108.92489)
+ (xy 258.150974 109.233072) (xy 257.98369 109.635936) (xy 257.98331 110.072151) (xy 258.14989 110.475306) (xy 258.458072 110.784026)
+ (xy 258.860936 110.95131) (xy 259.297151 110.95169) (xy 259.700306 110.78511) (xy 260.009026 110.476928) (xy 260.17631 110.074064)
+ (xy 260.17669 109.637849) (xy 260.17669 115.108348) (xy 260.132849 115.10831) (xy 259.729694 115.27489) (xy 259.420974 115.583072)
+ (xy 259.25369 115.985936) (xy 259.25331 116.422151) (xy 259.41989 116.825306) (xy 259.728072 117.134026) (xy 260.130936 117.30131)
+ (xy 260.567151 117.30169) (xy 260.970306 117.13511) (xy 261.279026 116.826928) (xy 261.44631 116.424064) (xy 261.44669 115.987849)
+ (xy 261.44669 117.648348) (xy 261.402849 117.64831) (xy 260.999694 117.81489) (xy 260.690974 118.123072) (xy 260.52369 118.525936)
+ (xy 260.52331 118.962151) (xy 260.68989 119.365306) (xy 260.998072 119.674026) (xy 261.400936 119.84131) (xy 261.837151 119.84169)
+ (xy 262.240306 119.67511) (xy 262.549026 119.366928) (xy 262.71631 118.964064) (xy 262.71669 118.527849) (xy 262.71669 123.998348)
+ (xy 262.672849 123.99831) (xy 262.269694 124.16489) (xy 261.960974 124.473072) (xy 261.79369 124.875936) (xy 261.79331 125.312151)
+ (xy 261.95989 125.715306) (xy 262.268072 126.024026) (xy 262.670936 126.19131) (xy 263.107151 126.19169) (xy 263.510306 126.02511)
+ (xy 263.819026 125.716928) (xy 263.98631 125.314064) (xy 263.98669 124.877849) (xy 263.98669 126.538348) (xy 263.942849 126.53831)
+ (xy 263.539694 126.70489) (xy 263.230974 127.013072) (xy 263.06369 127.415936) (xy 263.06331 127.852151) (xy 263.22989 128.255306)
+ (xy 263.538072 128.564026) (xy 263.940936 128.73131) (xy 264.377151 128.73169) (xy 264.780306 128.56511) (xy 265.089026 128.256928)
+ (xy 265.25631 127.854064) (xy 265.25669 127.417849) (xy 265.25669 133.7394) (xy 262.71669 133.7394) (xy 262.71669 127.417849)
+ (xy 262.55011 127.014694) (xy 262.241928 126.705974) (xy 261.839064 126.53869) (xy 261.44669 126.538348) (xy 261.44669 124.877849)
+ (xy 261.28011 124.474694) (xy 260.971928 124.165974) (xy 260.569064 123.99869) (xy 260.17669 123.998348) (xy 260.17669 118.527849)
+ (xy 260.01011 118.124694) (xy 259.701928 117.815974) (xy 259.299064 117.64869) (xy 258.90669 117.648348) (xy 258.90669 115.987849)
+ (xy 258.74011 115.584694) (xy 258.431928 115.275974) (xy 258.029064 115.10869) (xy 257.63669 115.108348) (xy 257.63669 109.637849)
+ (xy 257.47011 109.234694) (xy 257.161928 108.925974) (xy 256.759064 108.75869) (xy 256.36669 108.758348) (xy 256.36669 107.097849)
+ (xy 256.20011 106.694694) (xy 255.891928 106.385974) (xy 255.489064 106.21869) (xy 255.052849 106.21831) (xy 254.649694 106.38489)
+ (xy 254.340974 106.693072) (xy 254.17369 107.095936) (xy 254.17331 107.532151) (xy 254.33989 107.935306) (xy 254.648072 108.244026)
+ (xy 255.050936 108.41131) (xy 255.487151 108.41169) (xy 255.890306 108.24511) (xy 256.199026 107.936928) (xy 256.36631 107.534064)
+ (xy 256.36669 107.097849) (xy 256.36669 108.758348) (xy 256.322849 108.75831) (xy 255.919694 108.92489) (xy 255.610974 109.233072)
+ (xy 255.44369 109.635936) (xy 255.44331 110.072151) (xy 255.60989 110.475306) (xy 255.918072 110.784026) (xy 256.320936 110.95131)
+ (xy 256.757151 110.95169) (xy 257.160306 110.78511) (xy 257.469026 110.476928) (xy 257.63631 110.074064) (xy 257.63669 109.637849)
+ (xy 257.63669 115.108348) (xy 257.592849 115.10831) (xy 257.189694 115.27489) (xy 256.880974 115.583072) (xy 256.71369 115.985936)
+ (xy 256.71331 116.422151) (xy 256.87989 116.825306) (xy 257.188072 117.134026) (xy 257.590936 117.30131) (xy 258.027151 117.30169)
+ (xy 258.430306 117.13511) (xy 258.739026 116.826928) (xy 258.90631 116.424064) (xy 258.90669 115.987849) (xy 258.90669 117.648348)
+ (xy 258.862849 117.64831) (xy 258.459694 117.81489) (xy 258.150974 118.123072) (xy 257.98369 118.525936) (xy 257.98331 118.962151)
+ (xy 258.14989 119.365306) (xy 258.458072 119.674026) (xy 258.860936 119.84131) (xy 259.297151 119.84169) (xy 259.700306 119.67511)
+ (xy 260.009026 119.366928) (xy 260.17631 118.964064) (xy 260.17669 118.527849) (xy 260.17669 123.998348) (xy 260.132849 123.99831)
+ (xy 259.729694 124.16489) (xy 259.420974 124.473072) (xy 259.25369 124.875936) (xy 259.25331 125.312151) (xy 259.41989 125.715306)
+ (xy 259.728072 126.024026) (xy 260.130936 126.19131) (xy 260.567151 126.19169) (xy 260.970306 126.02511) (xy 261.279026 125.716928)
+ (xy 261.44631 125.314064) (xy 261.44669 124.877849) (xy 261.44669 126.538348) (xy 261.402849 126.53831) (xy 260.999694 126.70489)
+ (xy 260.690974 127.013072) (xy 260.52369 127.415936) (xy 260.52331 127.852151) (xy 260.68989 128.255306) (xy 260.998072 128.564026)
+ (xy 261.400936 128.73131) (xy 261.837151 128.73169) (xy 262.240306 128.56511) (xy 262.549026 128.256928) (xy 262.71631 127.854064)
+ (xy 262.71669 127.417849) (xy 262.71669 133.7394) (xy 260.17669 133.7394) (xy 260.17669 127.417849) (xy 260.01011 127.014694)
+ (xy 259.701928 126.705974) (xy 259.299064 126.53869) (xy 258.90669 126.538348) (xy 258.90669 124.877849) (xy 258.74011 124.474694)
+ (xy 258.431928 124.165974) (xy 258.029064 123.99869) (xy 257.63669 123.998348) (xy 257.63669 118.527849) (xy 257.47011 118.124694)
+ (xy 257.161928 117.815974) (xy 256.759064 117.64869) (xy 256.36669 117.648348) (xy 256.36669 115.987849) (xy 256.20011 115.584694)
+ (xy 255.891928 115.275974) (xy 255.489064 115.10869) (xy 255.09669 115.108348) (xy 255.09669 109.637849) (xy 254.93011 109.234694)
+ (xy 254.621928 108.925974) (xy 254.219064 108.75869) (xy 253.82669 108.758348) (xy 253.82669 107.097849) (xy 253.66011 106.694694)
+ (xy 253.351928 106.385974) (xy 252.949064 106.21869) (xy 252.512849 106.21831) (xy 252.109694 106.38489) (xy 251.800974 106.693072)
+ (xy 251.63369 107.095936) (xy 251.63331 107.532151) (xy 251.79989 107.935306) (xy 252.108072 108.244026) (xy 252.510936 108.41131)
+ (xy 252.947151 108.41169) (xy 253.350306 108.24511) (xy 253.659026 107.936928) (xy 253.82631 107.534064) (xy 253.82669 107.097849)
+ (xy 253.82669 108.758348) (xy 253.782849 108.75831) (xy 253.379694 108.92489) (xy 253.070974 109.233072) (xy 252.90369 109.635936)
+ (xy 252.90331 110.072151) (xy 253.06989 110.475306) (xy 253.378072 110.784026) (xy 253.780936 110.95131) (xy 254.217151 110.95169)
+ (xy 254.620306 110.78511) (xy 254.929026 110.476928) (xy 255.09631 110.074064) (xy 255.09669 109.637849) (xy 255.09669 115.108348)
+ (xy 255.052849 115.10831) (xy 254.649694 115.27489) (xy 254.340974 115.583072) (xy 254.17369 115.985936) (xy 254.17331 116.422151)
+ (xy 254.33989 116.825306) (xy 254.648072 117.134026) (xy 255.050936 117.30131) (xy 255.487151 117.30169) (xy 255.890306 117.13511)
+ (xy 256.199026 116.826928) (xy 256.36631 116.424064) (xy 256.36669 115.987849) (xy 256.36669 117.648348) (xy 256.322849 117.64831)
+ (xy 255.919694 117.81489) (xy 255.610974 118.123072) (xy 255.44369 118.525936) (xy 255.44331 118.962151) (xy 255.60989 119.365306)
+ (xy 255.918072 119.674026) (xy 256.320936 119.84131) (xy 256.757151 119.84169) (xy 257.160306 119.67511) (xy 257.469026 119.366928)
+ (xy 257.63631 118.964064) (xy 257.63669 118.527849) (xy 257.63669 123.998348) (xy 257.592849 123.99831) (xy 257.374937 124.088349)
+ (xy 257.509332 123.764692) (xy 257.509668 123.379001) (xy 257.362382 123.02254) (xy 257.089895 122.749577) (xy 256.733692 122.601668)
+ (xy 256.348001 122.601332) (xy 255.99154 122.748618) (xy 255.718577 123.021105) (xy 255.570668 123.377308) (xy 255.570332 123.762999)
+ (xy 255.704717 124.088237) (xy 255.489064 123.99869) (xy 255.09669 123.998348) (xy 255.09669 118.527849) (xy 254.93011 118.124694)
+ (xy 254.621928 117.815974) (xy 254.219064 117.64869) (xy 253.82669 117.648348) (xy 253.82669 115.987849) (xy 253.66011 115.584694)
+ (xy 253.351928 115.275974) (xy 252.949064 115.10869) (xy 252.55669 115.108348) (xy 252.55669 109.637849) (xy 252.39011 109.234694)
+ (xy 252.081928 108.925974) (xy 251.679064 108.75869) (xy 251.28669 108.758348) (xy 251.28669 107.097849) (xy 251.12011 106.694694)
+ (xy 250.811928 106.385974) (xy 250.409064 106.21869) (xy 249.972849 106.21831) (xy 249.569694 106.38489) (xy 249.260974 106.693072)
+ (xy 249.09369 107.095936) (xy 249.09331 107.532151) (xy 249.25989 107.935306) (xy 249.568072 108.244026) (xy 249.970936 108.41131)
+ (xy 250.407151 108.41169) (xy 250.810306 108.24511) (xy 251.119026 107.936928) (xy 251.28631 107.534064) (xy 251.28669 107.097849)
+ (xy 251.28669 108.758348) (xy 251.242849 108.75831) (xy 250.839694 108.92489) (xy 250.530974 109.233072) (xy 250.36369 109.635936)
+ (xy 250.36331 110.072151) (xy 250.52989 110.475306) (xy 250.838072 110.784026) (xy 251.240936 110.95131) (xy 251.677151 110.95169)
+ (xy 252.080306 110.78511) (xy 252.389026 110.476928) (xy 252.55631 110.074064) (xy 252.55669 109.637849) (xy 252.55669 115.108348)
+ (xy 252.512849 115.10831) (xy 252.109694 115.27489) (xy 251.800974 115.583072) (xy 251.63369 115.985936) (xy 251.63331 116.422151)
+ (xy 251.79989 116.825306) (xy 252.108072 117.134026) (xy 252.510936 117.30131) (xy 252.947151 117.30169) (xy 253.350306 117.13511)
+ (xy 253.659026 116.826928) (xy 253.82631 116.424064) (xy 253.82669 115.987849) (xy 253.82669 117.648348) (xy 253.782849 117.64831)
+ (xy 253.379694 117.81489) (xy 253.070974 118.123072) (xy 252.90369 118.525936) (xy 252.90331 118.962151) (xy 253.06989 119.365306)
+ (xy 253.378072 119.674026) (xy 253.780936 119.84131) (xy 254.217151 119.84169) (xy 254.620306 119.67511) (xy 254.929026 119.366928)
+ (xy 255.09631 118.964064) (xy 255.09669 118.527849) (xy 255.09669 123.998348) (xy 255.052849 123.99831) (xy 254.969668 124.032679)
+ (xy 254.969668 122.363001) (xy 254.822382 122.00654) (xy 254.549895 121.733577) (xy 254.193692 121.585668) (xy 253.808001 121.585332)
+ (xy 253.45154 121.732618) (xy 253.178577 122.005105) (xy 253.030668 122.361308) (xy 253.030332 122.746999) (xy 253.177618 123.10346)
+ (xy 253.450105 123.376423) (xy 253.806308 123.524332) (xy 254.191999 123.524668) (xy 254.54846 123.377382) (xy 254.821423 123.104895)
+ (xy 254.969332 122.748692) (xy 254.969668 122.363001) (xy 254.969668 124.032679) (xy 254.649694 124.16489) (xy 254.340974 124.473072)
+ (xy 254.17369 124.875936) (xy 254.17331 125.312151) (xy 254.33989 125.715306) (xy 254.648072 126.024026) (xy 255.050936 126.19131)
+ (xy 255.487151 126.19169) (xy 255.890306 126.02511) (xy 256.199026 125.716928) (xy 256.36631 125.314064) (xy 256.36669 124.877849)
+ (xy 256.202569 124.480646) (xy 256.346308 124.540332) (xy 256.731999 124.540668) (xy 256.877946 124.480364) (xy 256.71369 124.875936)
+ (xy 256.71331 125.312151) (xy 256.87989 125.715306) (xy 257.188072 126.024026) (xy 257.590936 126.19131) (xy 258.027151 126.19169)
+ (xy 258.430306 126.02511) (xy 258.739026 125.716928) (xy 258.90631 125.314064) (xy 258.90669 124.877849) (xy 258.90669 126.538348)
+ (xy 258.862849 126.53831) (xy 258.459694 126.70489) (xy 258.150974 127.013072) (xy 257.98369 127.415936) (xy 257.98331 127.852151)
+ (xy 258.14989 128.255306) (xy 258.458072 128.564026) (xy 258.860936 128.73131) (xy 259.297151 128.73169) (xy 259.700306 128.56511)
+ (xy 260.009026 128.256928) (xy 260.17631 127.854064) (xy 260.17669 127.417849) (xy 260.17669 133.7394) (xy 257.63669 133.7394)
+ (xy 257.63669 127.417849) (xy 257.47011 127.014694) (xy 257.161928 126.705974) (xy 256.759064 126.53869) (xy 256.322849 126.53831)
+ (xy 255.919694 126.70489) (xy 255.610974 127.013072) (xy 255.44369 127.415936) (xy 255.44331 127.852151) (xy 255.60989 128.255306)
+ (xy 255.918072 128.564026) (xy 256.320936 128.73131) (xy 256.757151 128.73169) (xy 257.160306 128.56511) (xy 257.469026 128.256928)
+ (xy 257.63631 127.854064) (xy 257.63669 127.417849) (xy 257.63669 133.7394) (xy 255.09669 133.7394) (xy 255.09669 127.417849)
+ (xy 254.93011 127.014694) (xy 254.621928 126.705974) (xy 254.219064 126.53869) (xy 253.82669 126.538348) (xy 253.82669 124.877849)
+ (xy 253.66011 124.474694) (xy 253.351928 124.165974) (xy 252.949064 123.99869) (xy 252.55669 123.998348) (xy 252.55669 118.527849)
+ (xy 252.39011 118.124694) (xy 252.081928 117.815974) (xy 251.679064 117.64869) (xy 251.28669 117.648348) (xy 251.28669 115.987849)
+ (xy 251.12011 115.584694) (xy 250.811928 115.275974) (xy 250.409064 115.10869) (xy 250.01669 115.108348) (xy 250.01669 109.637849)
+ (xy 249.85011 109.234694) (xy 249.541928 108.925974) (xy 249.139064 108.75869) (xy 248.74669 108.758348) (xy 248.74669 107.097849)
+ (xy 248.58011 106.694694) (xy 248.271928 106.385974) (xy 247.869064 106.21869) (xy 247.47669 106.218348) (xy 247.47669 100.747849)
+ (xy 247.31011 100.344694) (xy 247.001928 100.035974) (xy 246.599064 99.86869) (xy 246.21003 99.868351) (xy 246.21003 98.225461)
+ (xy 246.049934 97.819687) (xy 246.028934 97.788257) (xy 245.825178 97.745177) (xy 245.789823 97.780532) (xy 245.789823 97.709822)
+ (xy 245.746743 97.506066) (xy 245.346613 97.332345) (xy 244.93669 97.325413) (xy 244.93669 91.857849) (xy 244.77011 91.454694)
+ (xy 244.461928 91.145974) (xy 244.059064 90.97869) (xy 243.66669 90.978348) (xy 243.66669 89.317849) (xy 243.50011 88.914694)
+ (xy 243.191928 88.605974) (xy 242.789064 88.43869) (xy 242.39669 88.438348) (xy 242.39669 82.967849) (xy 242.23011 82.564694)
+ (xy 241.921928 82.255974) (xy 241.519064 82.08869) (xy 241.12669 82.088348) (xy 241.12669 80.427849) (xy 240.96011 80.024694)
+ (xy 240.651928 79.715974) (xy 240.249064 79.54869) (xy 239.85669 79.548348) (xy 239.85669 74.077849) (xy 239.69011 73.674694)
+ (xy 239.381928 73.365974) (xy 238.979064 73.19869) (xy 238.58669 73.198348) (xy 238.58669 71.537849) (xy 238.42011 71.134694)
+ (xy 238.111928 70.825974) (xy 237.709064 70.65869) (xy 237.272849 70.65831) (xy 236.869694 70.82489) (xy 236.560974 71.133072)
+ (xy 236.39369 71.535936) (xy 236.39331 71.972151) (xy 236.55989 72.375306) (xy 236.868072 72.684026) (xy 237.270936 72.85131)
+ (xy 237.707151 72.85169) (xy 238.110306 72.68511) (xy 238.419026 72.376928) (xy 238.58631 71.974064) (xy 238.58669 71.537849)
+ (xy 238.58669 73.198348) (xy 238.542849 73.19831) (xy 238.139694 73.36489) (xy 237.830974 73.673072) (xy 237.66369 74.075936)
+ (xy 237.66331 74.512151) (xy 237.82989 74.915306) (xy 238.138072 75.224026) (xy 238.540936 75.39131) (xy 238.977151 75.39169)
+ (xy 239.380306 75.22511) (xy 239.689026 74.916928) (xy 239.85631 74.514064) (xy 239.85669 74.077849) (xy 239.85669 79.548348)
+ (xy 239.812849 79.54831) (xy 239.409694 79.71489) (xy 239.100974 80.023072) (xy 238.93369 80.425936) (xy 238.93331 80.862151)
+ (xy 239.09989 81.265306) (xy 239.408072 81.574026) (xy 239.810936 81.74131) (xy 240.247151 81.74169) (xy 240.650306 81.57511)
+ (xy 240.959026 81.266928) (xy 241.12631 80.864064) (xy 241.12669 80.427849) (xy 241.12669 82.088348) (xy 241.082849 82.08831)
+ (xy 240.679694 82.25489) (xy 240.370974 82.563072) (xy 240.20369 82.965936) (xy 240.20331 83.402151) (xy 240.36989 83.805306)
+ (xy 240.678072 84.114026) (xy 241.080936 84.28131) (xy 241.517151 84.28169) (xy 241.920306 84.11511) (xy 242.229026 83.806928)
+ (xy 242.39631 83.404064) (xy 242.39669 82.967849) (xy 242.39669 88.438348) (xy 242.352849 88.43831) (xy 241.949694 88.60489)
+ (xy 241.640974 88.913072) (xy 241.47369 89.315936) (xy 241.47331 89.752151) (xy 241.63989 90.155306) (xy 241.948072 90.464026)
+ (xy 242.350936 90.63131) (xy 242.787151 90.63169) (xy 243.190306 90.46511) (xy 243.499026 90.156928) (xy 243.66631 89.754064)
+ (xy 243.66669 89.317849) (xy 243.66669 90.978348) (xy 243.622849 90.97831) (xy 243.219694 91.14489) (xy 242.910974 91.453072)
+ (xy 242.74369 91.855936) (xy 242.74331 92.292151) (xy 242.90989 92.695306) (xy 243.218072 93.004026) (xy 243.620936 93.17131)
+ (xy 244.057151 93.17169) (xy 244.460306 93.00511) (xy 244.769026 92.696928) (xy 244.93631 92.294064) (xy 244.93669 91.857849)
+ (xy 244.93669 97.325413) (xy 244.910461 97.32497) (xy 244.504687 97.485066) (xy 244.473257 97.506066) (xy 244.430177 97.709822)
+ (xy 245.11 98.389645) (xy 245.789823 97.709822) (xy 245.789823 97.780532) (xy 245.145355 98.425) (xy 245.825178 99.104823)
+ (xy 246.028934 99.061743) (xy 246.202655 98.661613) (xy 246.21003 98.225461) (xy 246.21003 99.868351) (xy 246.162849 99.86831)
+ (xy 245.789823 100.02244) (xy 245.789823 99.140178) (xy 245.11 98.460355) (xy 245.074645 98.49571) (xy 245.074645 98.425)
+ (xy 244.394822 97.745177) (xy 244.191066 97.788257) (xy 244.017345 98.188387) (xy 244.00997 98.624539) (xy 244.170066 99.030313)
+ (xy 244.191066 99.061743) (xy 244.394822 99.104823) (xy 245.074645 98.425) (xy 245.074645 98.49571) (xy 244.430177 99.140178)
+ (xy 244.473257 99.343934) (xy 244.873387 99.517655) (xy 245.309539 99.52503) (xy 245.715313 99.364934) (xy 245.746743 99.343934)
+ (xy 245.789823 99.140178) (xy 245.789823 100.02244) (xy 245.759694 100.03489) (xy 245.450974 100.343072) (xy 245.28369 100.745936)
+ (xy 245.28331 101.182151) (xy 245.44989 101.585306) (xy 245.758072 101.894026) (xy 246.160936 102.06131) (xy 246.597151 102.06169)
+ (xy 247.000306 101.89511) (xy 247.309026 101.586928) (xy 247.47631 101.184064) (xy 247.47669 100.747849) (xy 247.47669 106.218348)
+ (xy 247.432849 106.21831) (xy 247.029694 106.38489) (xy 246.720974 106.693072) (xy 246.55369 107.095936) (xy 246.55331 107.532151)
+ (xy 246.71989 107.935306) (xy 247.028072 108.244026) (xy 247.430936 108.41131) (xy 247.867151 108.41169) (xy 248.270306 108.24511)
+ (xy 248.579026 107.936928) (xy 248.74631 107.534064) (xy 248.74669 107.097849) (xy 248.74669 108.758348) (xy 248.702849 108.75831)
+ (xy 248.299694 108.92489) (xy 247.990974 109.233072) (xy 247.82369 109.635936) (xy 247.82331 110.072151) (xy 247.98989 110.475306)
+ (xy 248.298072 110.784026) (xy 248.700936 110.95131) (xy 249.137151 110.95169) (xy 249.540306 110.78511) (xy 249.849026 110.476928)
+ (xy 250.01631 110.074064) (xy 250.01669 109.637849) (xy 250.01669 115.108348) (xy 249.972849 115.10831) (xy 249.569694 115.27489)
+ (xy 249.260974 115.583072) (xy 249.09369 115.985936) (xy 249.09331 116.422151) (xy 249.25989 116.825306) (xy 249.568072 117.134026)
+ (xy 249.970936 117.30131) (xy 250.407151 117.30169) (xy 250.810306 117.13511) (xy 251.119026 116.826928) (xy 251.28631 116.424064)
+ (xy 251.28669 115.987849) (xy 251.28669 117.648348) (xy 251.242849 117.64831) (xy 250.839694 117.81489) (xy 250.530974 118.123072)
+ (xy 250.36369 118.525936) (xy 250.36331 118.962151) (xy 250.52989 119.365306) (xy 250.838072 119.674026) (xy 251.240936 119.84131)
+ (xy 251.677151 119.84169) (xy 252.080306 119.67511) (xy 252.389026 119.366928) (xy 252.55631 118.964064) (xy 252.55669 118.527849)
+ (xy 252.55669 123.998348) (xy 252.512849 123.99831) (xy 252.109694 124.16489) (xy 251.800974 124.473072) (xy 251.63369 124.875936)
+ (xy 251.63331 125.312151) (xy 251.79989 125.715306) (xy 252.108072 126.024026) (xy 252.510936 126.19131) (xy 252.947151 126.19169)
+ (xy 253.350306 126.02511) (xy 253.659026 125.716928) (xy 253.82631 125.314064) (xy 253.82669 124.877849) (xy 253.82669 126.538348)
+ (xy 253.782849 126.53831) (xy 253.379694 126.70489) (xy 253.070974 127.013072) (xy 252.90369 127.415936) (xy 252.90331 127.852151)
+ (xy 253.06989 128.255306) (xy 253.378072 128.564026) (xy 253.780936 128.73131) (xy 254.217151 128.73169) (xy 254.620306 128.56511)
+ (xy 254.929026 128.256928) (xy 255.09631 127.854064) (xy 255.09669 127.417849) (xy 255.09669 133.7394) (xy 252.55669 133.7394)
+ (xy 252.55669 127.417849) (xy 252.39011 127.014694) (xy 252.081928 126.705974) (xy 251.679064 126.53869) (xy 251.28669 126.538348)
+ (xy 251.28669 124.877849) (xy 251.12011 124.474694) (xy 250.811928 124.165974) (xy 250.409064 123.99869) (xy 250.01669 123.998348)
+ (xy 250.01669 118.527849) (xy 249.85011 118.124694) (xy 249.541928 117.815974) (xy 249.139064 117.64869) (xy 248.74669 117.648348)
+ (xy 248.74669 115.987849) (xy 248.58011 115.584694) (xy 248.271928 115.275974) (xy 247.869064 115.10869) (xy 247.47669 115.108348)
+ (xy 247.47669 109.637849) (xy 247.31011 109.234694) (xy 247.001928 108.925974) (xy 246.599064 108.75869) (xy 246.21003 108.758351)
+ (xy 246.21003 107.115461) (xy 246.049934 106.709687) (xy 246.028934 106.678257) (xy 245.825178 106.635177) (xy 245.789823 106.670532)
+ (xy 245.789823 106.599822) (xy 245.746743 106.396066) (xy 245.346613 106.222345) (xy 244.93669 106.215413) (xy 244.93669 100.747849)
+ (xy 244.77011 100.344694) (xy 244.461928 100.035974) (xy 244.059064 99.86869) (xy 243.66669 99.868348) (xy 243.66669 98.207849)
+ (xy 243.50011 97.804694) (xy 243.191928 97.495974) (xy 242.789064 97.32869) (xy 242.39669 97.328348) (xy 242.39669 91.857849)
+ (xy 242.23011 91.454694) (xy 241.921928 91.145974) (xy 241.519064 90.97869) (xy 241.12669 90.978348) (xy 241.12669 89.317849)
+ (xy 240.96011 88.914694) (xy 240.651928 88.605974) (xy 240.249064 88.43869) (xy 239.85669 88.438348) (xy 239.85669 82.967849)
+ (xy 239.69011 82.564694) (xy 239.381928 82.255974) (xy 238.979064 82.08869) (xy 238.58669 82.088348) (xy 238.58669 80.427849)
+ (xy 238.42011 80.024694) (xy 238.111928 79.715974) (xy 237.709064 79.54869) (xy 237.272849 79.54831) (xy 236.869694 79.71489)
+ (xy 236.560974 80.023072) (xy 236.39369 80.425936) (xy 236.39331 80.862151) (xy 236.55989 81.265306) (xy 236.868072 81.574026)
+ (xy 237.270936 81.74131) (xy 237.707151 81.74169) (xy 238.110306 81.57511) (xy 238.419026 81.266928) (xy 238.58631 80.864064)
+ (xy 238.58669 80.427849) (xy 238.58669 82.088348) (xy 238.542849 82.08831) (xy 238.139694 82.25489) (xy 237.830974 82.563072)
+ (xy 237.66369 82.965936) (xy 237.66331 83.402151) (xy 237.82989 83.805306) (xy 238.138072 84.114026) (xy 238.540936 84.28131)
+ (xy 238.977151 84.28169) (xy 239.380306 84.11511) (xy 239.689026 83.806928) (xy 239.85631 83.404064) (xy 239.85669 82.967849)
+ (xy 239.85669 88.438348) (xy 239.812849 88.43831) (xy 239.409694 88.60489) (xy 239.100974 88.913072) (xy 238.93369 89.315936)
+ (xy 238.93331 89.752151) (xy 239.09989 90.155306) (xy 239.408072 90.464026) (xy 239.810936 90.63131) (xy 240.247151 90.63169)
+ (xy 240.650306 90.46511) (xy 240.959026 90.156928) (xy 241.12631 89.754064) (xy 241.12669 89.317849) (xy 241.12669 90.978348)
+ (xy 241.082849 90.97831) (xy 240.679694 91.14489) (xy 240.370974 91.453072) (xy 240.20369 91.855936) (xy 240.20331 92.292151)
+ (xy 240.36989 92.695306) (xy 240.678072 93.004026) (xy 241.080936 93.17131) (xy 241.517151 93.17169) (xy 241.920306 93.00511)
+ (xy 242.229026 92.696928) (xy 242.39631 92.294064) (xy 242.39669 91.857849) (xy 242.39669 97.328348) (xy 242.352849 97.32831)
+ (xy 241.949694 97.49489) (xy 241.640974 97.803072) (xy 241.47369 98.205936) (xy 241.47331 98.642151) (xy 241.63989 99.045306)
+ (xy 241.948072 99.354026) (xy 242.350936 99.52131) (xy 242.787151 99.52169) (xy 243.190306 99.35511) (xy 243.499026 99.046928)
+ (xy 243.66631 98.644064) (xy 243.66669 98.207849) (xy 243.66669 99.868348) (xy 243.622849 99.86831) (xy 243.219694 100.03489)
+ (xy 242.910974 100.343072) (xy 242.74369 100.745936) (xy 242.74331 101.182151) (xy 242.90989 101.585306) (xy 243.218072 101.894026)
+ (xy 243.620936 102.06131) (xy 244.057151 102.06169) (xy 244.460306 101.89511) (xy 244.769026 101.586928) (xy 244.93631 101.184064)
+ (xy 244.93669 100.747849) (xy 244.93669 106.215413) (xy 244.910461 106.21497) (xy 244.504687 106.375066) (xy 244.473257 106.396066)
+ (xy 244.430177 106.599822) (xy 245.11 107.279645) (xy 245.789823 106.599822) (xy 245.789823 106.670532) (xy 245.145355 107.315)
+ (xy 245.825178 107.994823) (xy 246.028934 107.951743) (xy 246.202655 107.551613) (xy 246.21003 107.115461) (xy 246.21003 108.758351)
+ (xy 246.162849 108.75831) (xy 245.789823 108.91244) (xy 245.789823 108.030178) (xy 245.11 107.350355) (xy 245.074645 107.38571)
+ (xy 245.074645 107.315) (xy 244.394822 106.635177) (xy 244.191066 106.678257) (xy 244.017345 107.078387) (xy 244.00997 107.514539)
+ (xy 244.170066 107.920313) (xy 244.191066 107.951743) (xy 244.394822 107.994823) (xy 245.074645 107.315) (xy 245.074645 107.38571)
+ (xy 244.430177 108.030178) (xy 244.473257 108.233934) (xy 244.873387 108.407655) (xy 245.309539 108.41503) (xy 245.715313 108.254934)
+ (xy 245.746743 108.233934) (xy 245.789823 108.030178) (xy 245.789823 108.91244) (xy 245.759694 108.92489) (xy 245.450974 109.233072)
+ (xy 245.28369 109.635936) (xy 245.28331 110.072151) (xy 245.44989 110.475306) (xy 245.758072 110.784026) (xy 246.160936 110.95131)
+ (xy 246.597151 110.95169) (xy 247.000306 110.78511) (xy 247.309026 110.476928) (xy 247.47631 110.074064) (xy 247.47669 109.637849)
+ (xy 247.47669 115.108348) (xy 247.432849 115.10831) (xy 247.029694 115.27489) (xy 246.720974 115.583072) (xy 246.55369 115.985936)
+ (xy 246.55331 116.422151) (xy 246.71989 116.825306) (xy 247.028072 117.134026) (xy 247.430936 117.30131) (xy 247.867151 117.30169)
+ (xy 248.270306 117.13511) (xy 248.579026 116.826928) (xy 248.74631 116.424064) (xy 248.74669 115.987849) (xy 248.74669 117.648348)
+ (xy 248.702849 117.64831) (xy 248.299694 117.81489) (xy 247.990974 118.123072) (xy 247.82369 118.525936) (xy 247.82331 118.962151)
+ (xy 247.98989 119.365306) (xy 248.298072 119.674026) (xy 248.700936 119.84131) (xy 249.137151 119.84169) (xy 249.540306 119.67511)
+ (xy 249.849026 119.366928) (xy 250.01631 118.964064) (xy 250.01669 118.527849) (xy 250.01669 123.998348) (xy 249.972849 123.99831)
+ (xy 249.569694 124.16489) (xy 249.260974 124.473072) (xy 249.09369 124.875936) (xy 249.09331 125.312151) (xy 249.25989 125.715306)
+ (xy 249.568072 126.024026) (xy 249.970936 126.19131) (xy 250.407151 126.19169) (xy 250.810306 126.02511) (xy 251.119026 125.716928)
+ (xy 251.28631 125.314064) (xy 251.28669 124.877849) (xy 251.28669 126.538348) (xy 251.242849 126.53831) (xy 250.839694 126.70489)
+ (xy 250.530974 127.013072) (xy 250.36369 127.415936) (xy 250.36331 127.852151) (xy 250.52989 128.255306) (xy 250.838072 128.564026)
+ (xy 251.240936 128.73131) (xy 251.677151 128.73169) (xy 252.080306 128.56511) (xy 252.389026 128.256928) (xy 252.55631 127.854064)
+ (xy 252.55669 127.417849) (xy 252.55669 133.7394) (xy 250.01669 133.7394) (xy 250.01669 127.417849) (xy 249.85011 127.014694)
+ (xy 249.541928 126.705974) (xy 249.139064 126.53869) (xy 248.74669 126.538348) (xy 248.74669 124.877849) (xy 248.58011 124.474694)
+ (xy 248.271928 124.165974) (xy 247.869064 123.99869) (xy 247.47669 123.998348) (xy 247.47669 118.527849) (xy 247.31011 118.124694)
+ (xy 247.001928 117.815974) (xy 246.599064 117.64869) (xy 246.21003 117.648351) (xy 246.21003 116.005461) (xy 246.049934 115.599687)
+ (xy 246.028934 115.568257) (xy 245.825178 115.525177) (xy 245.789823 115.560532) (xy 245.789823 115.489822) (xy 245.746743 115.286066)
+ (xy 245.346613 115.112345) (xy 244.93669 115.105413) (xy 244.93669 109.637849) (xy 244.77011 109.234694) (xy 244.461928 108.925974)
+ (xy 244.059064 108.75869) (xy 243.66669 108.758348) (xy 243.66669 107.097849) (xy 243.50011 106.694694) (xy 243.191928 106.385974)
+ (xy 242.789064 106.21869) (xy 242.39669 106.218348) (xy 242.39669 100.747849) (xy 242.23011 100.344694) (xy 241.921928 100.035974)
+ (xy 241.519064 99.86869) (xy 241.12669 99.868348) (xy 241.12669 98.207849) (xy 240.96011 97.804694) (xy 240.651928 97.495974)
+ (xy 240.249064 97.32869) (xy 239.85669 97.328348) (xy 239.85669 91.857849) (xy 239.69011 91.454694) (xy 239.381928 91.145974)
+ (xy 238.979064 90.97869) (xy 238.58669 90.978348) (xy 238.58669 89.317849) (xy 238.42011 88.914694) (xy 238.111928 88.605974)
+ (xy 237.709064 88.43869) (xy 237.272849 88.43831) (xy 236.869694 88.60489) (xy 236.560974 88.913072) (xy 236.39369 89.315936)
+ (xy 236.39331 89.752151) (xy 236.55989 90.155306) (xy 236.868072 90.464026) (xy 237.270936 90.63131) (xy 237.707151 90.63169)
+ (xy 238.110306 90.46511) (xy 238.419026 90.156928) (xy 238.58631 89.754064) (xy 238.58669 89.317849) (xy 238.58669 90.978348)
+ (xy 238.542849 90.97831) (xy 238.139694 91.14489) (xy 237.830974 91.453072) (xy 237.66369 91.855936) (xy 237.66331 92.292151)
+ (xy 237.82989 92.695306) (xy 238.138072 93.004026) (xy 238.540936 93.17131) (xy 238.977151 93.17169) (xy 239.380306 93.00511)
+ (xy 239.689026 92.696928) (xy 239.85631 92.294064) (xy 239.85669 91.857849) (xy 239.85669 97.328348) (xy 239.812849 97.32831)
+ (xy 239.409694 97.49489) (xy 239.100974 97.803072) (xy 238.93369 98.205936) (xy 238.93331 98.642151) (xy 239.09989 99.045306)
+ (xy 239.408072 99.354026) (xy 239.810936 99.52131) (xy 240.247151 99.52169) (xy 240.650306 99.35511) (xy 240.959026 99.046928)
+ (xy 241.12631 98.644064) (xy 241.12669 98.207849) (xy 241.12669 99.868348) (xy 241.082849 99.86831) (xy 240.679694 100.03489)
+ (xy 240.370974 100.343072) (xy 240.20369 100.745936) (xy 240.20331 101.182151) (xy 240.36989 101.585306) (xy 240.678072 101.894026)
+ (xy 241.080936 102.06131) (xy 241.517151 102.06169) (xy 241.920306 101.89511) (xy 242.229026 101.586928) (xy 242.39631 101.184064)
+ (xy 242.39669 100.747849) (xy 242.39669 106.218348) (xy 242.352849 106.21831) (xy 241.949694 106.38489) (xy 241.640974 106.693072)
+ (xy 241.47369 107.095936) (xy 241.47331 107.532151) (xy 241.63989 107.935306) (xy 241.948072 108.244026) (xy 242.350936 108.41131)
+ (xy 242.787151 108.41169) (xy 243.190306 108.24511) (xy 243.499026 107.936928) (xy 243.66631 107.534064) (xy 243.66669 107.097849)
+ (xy 243.66669 108.758348) (xy 243.622849 108.75831) (xy 243.219694 108.92489) (xy 242.910974 109.233072) (xy 242.74369 109.635936)
+ (xy 242.74331 110.072151) (xy 242.90989 110.475306) (xy 243.218072 110.784026) (xy 243.620936 110.95131) (xy 244.057151 110.95169)
+ (xy 244.460306 110.78511) (xy 244.769026 110.476928) (xy 244.93631 110.074064) (xy 244.93669 109.637849) (xy 244.93669 115.105413)
+ (xy 244.910461 115.10497) (xy 244.504687 115.265066) (xy 244.473257 115.286066) (xy 244.430177 115.489822) (xy 245.11 116.169645)
+ (xy 245.789823 115.489822) (xy 245.789823 115.560532) (xy 245.145355 116.205) (xy 245.825178 116.884823) (xy 246.028934 116.841743)
+ (xy 246.202655 116.441613) (xy 246.21003 116.005461) (xy 246.21003 117.648351) (xy 246.162849 117.64831) (xy 245.789823 117.80244)
+ (xy 245.789823 116.920178) (xy 245.11 116.240355) (xy 245.074645 116.27571) (xy 245.074645 116.205) (xy 244.394822 115.525177)
+ (xy 244.191066 115.568257) (xy 244.017345 115.968387) (xy 244.00997 116.404539) (xy 244.170066 116.810313) (xy 244.191066 116.841743)
+ (xy 244.394822 116.884823) (xy 245.074645 116.205) (xy 245.074645 116.27571) (xy 244.430177 116.920178) (xy 244.473257 117.123934)
+ (xy 244.873387 117.297655) (xy 245.309539 117.30503) (xy 245.715313 117.144934) (xy 245.746743 117.123934) (xy 245.789823 116.920178)
+ (xy 245.789823 117.80244) (xy 245.759694 117.81489) (xy 245.450974 118.123072) (xy 245.28369 118.525936) (xy 245.28331 118.962151)
+ (xy 245.44989 119.365306) (xy 245.758072 119.674026) (xy 246.160936 119.84131) (xy 246.597151 119.84169) (xy 247.000306 119.67511)
+ (xy 247.309026 119.366928) (xy 247.47631 118.964064) (xy 247.47669 118.527849) (xy 247.47669 123.998348) (xy 247.432849 123.99831)
+ (xy 247.029694 124.16489) (xy 246.720974 124.473072) (xy 246.55369 124.875936) (xy 246.55331 125.312151) (xy 246.71989 125.715306)
+ (xy 247.028072 126.024026) (xy 247.430936 126.19131) (xy 247.867151 126.19169) (xy 248.270306 126.02511) (xy 248.579026 125.716928)
+ (xy 248.74631 125.314064) (xy 248.74669 124.877849) (xy 248.74669 126.538348) (xy 248.702849 126.53831) (xy 248.299694 126.70489)
+ (xy 247.990974 127.013072) (xy 247.82369 127.415936) (xy 247.82331 127.852151) (xy 247.98989 128.255306) (xy 248.298072 128.564026)
+ (xy 248.700936 128.73131) (xy 249.137151 128.73169) (xy 249.540306 128.56511) (xy 249.849026 128.256928) (xy 250.01631 127.854064)
+ (xy 250.01669 127.417849) (xy 250.01669 133.7394) (xy 247.47669 133.7394) (xy 247.47669 127.417849) (xy 247.31011 127.014694)
+ (xy 247.001928 126.705974) (xy 246.599064 126.53869) (xy 246.21003 126.538351) (xy 246.21003 124.895461) (xy 246.049934 124.489687)
+ (xy 246.028934 124.458257) (xy 245.825178 124.415177) (xy 245.789823 124.450532) (xy 245.789823 124.379822) (xy 245.746743 124.176066)
+ (xy 245.346613 124.002345) (xy 244.93669 123.995413) (xy 244.93669 118.527849) (xy 244.77011 118.124694) (xy 244.461928 117.815974)
+ (xy 244.059064 117.64869) (xy 243.66669 117.648348) (xy 243.66669 115.987849) (xy 243.50011 115.584694) (xy 243.191928 115.275974)
+ (xy 242.789064 115.10869) (xy 242.39669 115.108348) (xy 242.39669 109.637849) (xy 242.23011 109.234694) (xy 241.921928 108.925974)
+ (xy 241.519064 108.75869) (xy 241.12669 108.758348) (xy 241.12669 107.097849) (xy 240.96011 106.694694) (xy 240.651928 106.385974)
+ (xy 240.249064 106.21869) (xy 239.85669 106.218348) (xy 239.85669 100.747849) (xy 239.69011 100.344694) (xy 239.381928 100.035974)
+ (xy 238.979064 99.86869) (xy 238.58669 99.868348) (xy 238.58669 98.207849) (xy 238.42011 97.804694) (xy 238.111928 97.495974)
+ (xy 237.709064 97.32869) (xy 237.272849 97.32831) (xy 236.869694 97.49489) (xy 236.560974 97.803072) (xy 236.39369 98.205936)
+ (xy 236.39331 98.642151) (xy 236.55989 99.045306) (xy 236.868072 99.354026) (xy 237.270936 99.52131) (xy 237.707151 99.52169)
+ (xy 238.110306 99.35511) (xy 238.419026 99.046928) (xy 238.58631 98.644064) (xy 238.58669 98.207849) (xy 238.58669 99.868348)
+ (xy 238.542849 99.86831) (xy 238.139694 100.03489) (xy 237.830974 100.343072) (xy 237.66369 100.745936) (xy 237.66331 101.182151)
+ (xy 237.82989 101.585306) (xy 238.138072 101.894026) (xy 238.540936 102.06131) (xy 238.977151 102.06169) (xy 239.380306 101.89511)
+ (xy 239.689026 101.586928) (xy 239.85631 101.184064) (xy 239.85669 100.747849) (xy 239.85669 106.218348) (xy 239.812849 106.21831)
+ (xy 239.409694 106.38489) (xy 239.100974 106.693072) (xy 238.93369 107.095936) (xy 238.93331 107.532151) (xy 239.09989 107.935306)
+ (xy 239.408072 108.244026) (xy 239.810936 108.41131) (xy 240.247151 108.41169) (xy 240.650306 108.24511) (xy 240.959026 107.936928)
+ (xy 241.12631 107.534064) (xy 241.12669 107.097849) (xy 241.12669 108.758348) (xy 241.082849 108.75831) (xy 240.679694 108.92489)
+ (xy 240.370974 109.233072) (xy 240.20369 109.635936) (xy 240.20331 110.072151) (xy 240.36989 110.475306) (xy 240.678072 110.784026)
+ (xy 241.080936 110.95131) (xy 241.517151 110.95169) (xy 241.920306 110.78511) (xy 242.229026 110.476928) (xy 242.39631 110.074064)
+ (xy 242.39669 109.637849) (xy 242.39669 115.108348) (xy 242.352849 115.10831) (xy 241.949694 115.27489) (xy 241.640974 115.583072)
+ (xy 241.47369 115.985936) (xy 241.47331 116.422151) (xy 241.63989 116.825306) (xy 241.948072 117.134026) (xy 242.350936 117.30131)
+ (xy 242.787151 117.30169) (xy 243.190306 117.13511) (xy 243.499026 116.826928) (xy 243.66631 116.424064) (xy 243.66669 115.987849)
+ (xy 243.66669 117.648348) (xy 243.622849 117.64831) (xy 243.219694 117.81489) (xy 242.910974 118.123072) (xy 242.74369 118.525936)
+ (xy 242.74331 118.962151) (xy 242.90989 119.365306) (xy 243.218072 119.674026) (xy 243.620936 119.84131) (xy 244.057151 119.84169)
+ (xy 244.460306 119.67511) (xy 244.769026 119.366928) (xy 244.93631 118.964064) (xy 244.93669 118.527849) (xy 244.93669 123.995413)
+ (xy 244.910461 123.99497) (xy 244.504687 124.155066) (xy 244.473257 124.176066) (xy 244.430177 124.379822) (xy 245.11 125.059645)
+ (xy 245.789823 124.379822) (xy 245.789823 124.450532) (xy 245.145355 125.095) (xy 245.825178 125.774823) (xy 246.028934 125.731743)
+ (xy 246.202655 125.331613) (xy 246.21003 124.895461) (xy 246.21003 126.538351) (xy 246.162849 126.53831) (xy 245.789823 126.69244)
+ (xy 245.789823 125.810178) (xy 245.11 125.130355) (xy 245.074645 125.16571) (xy 245.074645 125.095) (xy 244.394822 124.415177)
+ (xy 244.191066 124.458257) (xy 244.017345 124.858387) (xy 244.00997 125.294539) (xy 244.170066 125.700313) (xy 244.191066 125.731743)
+ (xy 244.394822 125.774823) (xy 245.074645 125.095) (xy 245.074645 125.16571) (xy 244.430177 125.810178) (xy 244.473257 126.013934)
+ (xy 244.873387 126.187655) (xy 245.309539 126.19503) (xy 245.715313 126.034934) (xy 245.746743 126.013934) (xy 245.789823 125.810178)
+ (xy 245.789823 126.69244) (xy 245.759694 126.70489) (xy 245.450974 127.013072) (xy 245.28369 127.415936) (xy 245.28331 127.852151)
+ (xy 245.44989 128.255306) (xy 245.758072 128.564026) (xy 246.160936 128.73131) (xy 246.597151 128.73169) (xy 247.000306 128.56511)
+ (xy 247.309026 128.256928) (xy 247.47631 127.854064) (xy 247.47669 127.417849) (xy 247.47669 133.7394) (xy 244.93669 133.7394)
+ (xy 244.93669 127.417849) (xy 244.77011 127.014694) (xy 244.461928 126.705974) (xy 244.059064 126.53869) (xy 243.66669 126.538348)
+ (xy 243.66669 124.877849) (xy 243.50011 124.474694) (xy 243.191928 124.165974) (xy 242.789064 123.99869) (xy 242.39669 123.998348)
+ (xy 242.39669 118.527849) (xy 242.23011 118.124694) (xy 241.921928 117.815974) (xy 241.519064 117.64869) (xy 241.12669 117.648348)
+ (xy 241.12669 115.987849) (xy 240.96011 115.584694) (xy 240.651928 115.275974) (xy 240.249064 115.10869) (xy 239.85669 115.108348)
+ (xy 239.85669 109.637849) (xy 239.69011 109.234694) (xy 239.381928 108.925974) (xy 238.979064 108.75869) (xy 238.58669 108.758348)
+ (xy 238.58669 107.097849) (xy 238.42011 106.694694) (xy 238.111928 106.385974) (xy 237.709064 106.21869) (xy 237.272849 106.21831)
+ (xy 236.869694 106.38489) (xy 236.560974 106.693072) (xy 236.39369 107.095936) (xy 236.39331 107.532151) (xy 236.55989 107.935306)
+ (xy 236.868072 108.244026) (xy 237.270936 108.41131) (xy 237.707151 108.41169) (xy 238.110306 108.24511) (xy 238.419026 107.936928)
+ (xy 238.58631 107.534064) (xy 238.58669 107.097849) (xy 238.58669 108.758348) (xy 238.542849 108.75831) (xy 238.139694 108.92489)
+ (xy 237.830974 109.233072) (xy 237.66369 109.635936) (xy 237.66331 110.072151) (xy 237.82989 110.475306) (xy 238.138072 110.784026)
+ (xy 238.540936 110.95131) (xy 238.977151 110.95169) (xy 239.380306 110.78511) (xy 239.689026 110.476928) (xy 239.85631 110.074064)
+ (xy 239.85669 109.637849) (xy 239.85669 115.108348) (xy 239.812849 115.10831) (xy 239.409694 115.27489) (xy 239.100974 115.583072)
+ (xy 238.93369 115.985936) (xy 238.93331 116.422151) (xy 239.09989 116.825306) (xy 239.408072 117.134026) (xy 239.810936 117.30131)
+ (xy 240.247151 117.30169) (xy 240.650306 117.13511) (xy 240.959026 116.826928) (xy 241.12631 116.424064) (xy 241.12669 115.987849)
+ (xy 241.12669 117.648348) (xy 241.082849 117.64831) (xy 240.679694 117.81489) (xy 240.370974 118.123072) (xy 240.20369 118.525936)
+ (xy 240.20331 118.962151) (xy 240.36989 119.365306) (xy 240.678072 119.674026) (xy 241.080936 119.84131) (xy 241.517151 119.84169)
+ (xy 241.920306 119.67511) (xy 242.229026 119.366928) (xy 242.39631 118.964064) (xy 242.39669 118.527849) (xy 242.39669 123.998348)
+ (xy 242.352849 123.99831) (xy 241.949694 124.16489) (xy 241.640974 124.473072) (xy 241.47369 124.875936) (xy 241.47331 125.312151)
+ (xy 241.63989 125.715306) (xy 241.948072 126.024026) (xy 242.350936 126.19131) (xy 242.787151 126.19169) (xy 243.190306 126.02511)
+ (xy 243.499026 125.716928) (xy 243.66631 125.314064) (xy 243.66669 124.877849) (xy 243.66669 126.538348) (xy 243.622849 126.53831)
+ (xy 243.219694 126.70489) (xy 242.910974 127.013072) (xy 242.74369 127.415936) (xy 242.74331 127.852151) (xy 242.90989 128.255306)
+ (xy 243.218072 128.564026) (xy 243.620936 128.73131) (xy 244.057151 128.73169) (xy 244.460306 128.56511) (xy 244.769026 128.256928)
+ (xy 244.93631 127.854064) (xy 244.93669 127.417849) (xy 244.93669 133.7394) (xy 242.39669 133.7394) (xy 242.39669 127.417849)
+ (xy 242.23011 127.014694) (xy 241.921928 126.705974) (xy 241.519064 126.53869) (xy 241.12669 126.538348) (xy 241.12669 124.877849)
+ (xy 240.96011 124.474694) (xy 240.651928 124.165974) (xy 240.249064 123.99869) (xy 239.85669 123.998348) (xy 239.85669 118.527849)
+ (xy 239.69011 118.124694) (xy 239.381928 117.815974) (xy 238.979064 117.64869) (xy 238.58669 117.648348) (xy 238.58669 115.987849)
+ (xy 238.42011 115.584694) (xy 238.111928 115.275974) (xy 237.709064 115.10869) (xy 237.272849 115.10831) (xy 236.869694 115.27489)
+ (xy 236.560974 115.583072) (xy 236.39369 115.985936) (xy 236.39331 116.422151) (xy 236.55989 116.825306) (xy 236.868072 117.134026)
+ (xy 237.270936 117.30131) (xy 237.707151 117.30169) (xy 238.110306 117.13511) (xy 238.419026 116.826928) (xy 238.58631 116.424064)
+ (xy 238.58669 115.987849) (xy 238.58669 117.648348) (xy 238.542849 117.64831) (xy 238.139694 117.81489) (xy 237.830974 118.123072)
+ (xy 237.66369 118.525936) (xy 237.66331 118.962151) (xy 237.82989 119.365306) (xy 238.138072 119.674026) (xy 238.540936 119.84131)
+ (xy 238.977151 119.84169) (xy 239.380306 119.67511) (xy 239.689026 119.366928) (xy 239.85631 118.964064) (xy 239.85669 118.527849)
+ (xy 239.85669 123.998348) (xy 239.812849 123.99831) (xy 239.409694 124.16489) (xy 239.100974 124.473072) (xy 238.93369 124.875936)
+ (xy 238.93331 125.312151) (xy 239.09989 125.715306) (xy 239.408072 126.024026) (xy 239.810936 126.19131) (xy 240.247151 126.19169)
+ (xy 240.650306 126.02511) (xy 240.959026 125.716928) (xy 241.12631 125.314064) (xy 241.12669 124.877849) (xy 241.12669 126.538348)
+ (xy 241.082849 126.53831) (xy 240.679694 126.70489) (xy 240.370974 127.013072) (xy 240.20369 127.415936) (xy 240.20331 127.852151)
+ (xy 240.36989 128.255306) (xy 240.678072 128.564026) (xy 241.080936 128.73131) (xy 241.517151 128.73169) (xy 241.920306 128.56511)
+ (xy 242.229026 128.256928) (xy 242.39631 127.854064) (xy 242.39669 127.417849) (xy 242.39669 133.7394) (xy 239.85669 133.7394)
+ (xy 239.85669 127.417849) (xy 239.69011 127.014694) (xy 239.381928 126.705974) (xy 238.979064 126.53869) (xy 238.58669 126.538348)
+ (xy 238.58669 124.877849) (xy 238.42011 124.474694) (xy 238.111928 124.165974) (xy 237.709064 123.99869) (xy 237.272849 123.99831)
+ (xy 236.869694 124.16489) (xy 236.560974 124.473072) (xy 236.39369 124.875936) (xy 236.39331 125.312151) (xy 236.55989 125.715306)
+ (xy 236.868072 126.024026) (xy 237.270936 126.19131) (xy 237.707151 126.19169) (xy 238.110306 126.02511) (xy 238.419026 125.716928)
+ (xy 238.58631 125.314064) (xy 238.58669 124.877849) (xy 238.58669 126.538348) (xy 238.542849 126.53831) (xy 238.139694 126.70489)
+ (xy 237.830974 127.013072) (xy 237.66369 127.415936) (xy 237.66331 127.852151) (xy 237.82989 128.255306) (xy 238.138072 128.564026)
+ (xy 238.540936 128.73131) (xy 238.977151 128.73169) (xy 239.380306 128.56511) (xy 239.689026 128.256928) (xy 239.85631 127.854064)
+ (xy 239.85669 127.417849) (xy 239.85669 133.7394) (xy 236.364355 133.7394) (xy 236.364355 125.959217) (xy 236.364355 117.069217)
+ (xy 236.364355 108.179217) (xy 236.364355 99.289217) (xy 236.364355 90.399217) (xy 236.364355 81.509217) (xy 236.364355 72.619217)
+ (xy 236.05307 71.865851) (xy 235.477181 71.288955) (xy 234.724359 70.976357) (xy 233.909217 70.975645) (xy 233.155851 71.28693)
+ (xy 232.578955 71.862819) (xy 232.266357 72.615641) (xy 232.265645 73.430783) (xy 232.57693 74.184149) (xy 233.152819 74.761045)
+ (xy 233.905641 75.073643) (xy 234.720783 75.074355) (xy 235.474149 74.76307) (xy 236.051045 74.187181) (xy 236.363643 73.434359)
+ (xy 236.364355 72.619217) (xy 236.364355 81.509217) (xy 236.05307 80.755851) (xy 235.477181 80.178955) (xy 234.724359 79.866357)
+ (xy 233.909217 79.865645) (xy 233.155851 80.17693) (xy 232.578955 80.752819) (xy 232.266357 81.505641) (xy 232.265645 82.320783)
+ (xy 232.57693 83.074149) (xy 233.152819 83.651045) (xy 233.905641 83.963643) (xy 234.720783 83.964355) (xy 235.474149 83.65307)
+ (xy 236.051045 83.077181) (xy 236.363643 82.324359) (xy 236.364355 81.509217) (xy 236.364355 90.399217) (xy 236.05307 89.645851)
+ (xy 235.477181 89.068955) (xy 234.724359 88.756357) (xy 233.909217 88.755645) (xy 233.155851 89.06693) (xy 232.578955 89.642819)
+ (xy 232.266357 90.395641) (xy 232.265645 91.210783) (xy 232.57693 91.964149) (xy 233.152819 92.541045) (xy 233.905641 92.853643)
+ (xy 234.720783 92.854355) (xy 235.474149 92.54307) (xy 236.051045 91.967181) (xy 236.363643 91.214359) (xy 236.364355 90.399217)
+ (xy 236.364355 99.289217) (xy 236.05307 98.535851) (xy 235.477181 97.958955) (xy 234.724359 97.646357) (xy 233.909217 97.645645)
+ (xy 233.155851 97.95693) (xy 232.578955 98.532819) (xy 232.266357 99.285641) (xy 232.265645 100.100783) (xy 232.57693 100.854149)
+ (xy 233.152819 101.431045) (xy 233.905641 101.743643) (xy 234.720783 101.744355) (xy 235.474149 101.43307) (xy 236.051045 100.857181)
+ (xy 236.363643 100.104359) (xy 236.364355 99.289217) (xy 236.364355 108.179217) (xy 236.05307 107.425851) (xy 235.477181 106.848955)
+ (xy 234.724359 106.536357) (xy 233.909217 106.535645) (xy 233.155851 106.84693) (xy 232.578955 107.422819) (xy 232.266357 108.175641)
+ (xy 232.265645 108.990783) (xy 232.57693 109.744149) (xy 233.152819 110.321045) (xy 233.905641 110.633643) (xy 234.720783 110.634355)
+ (xy 235.474149 110.32307) (xy 236.051045 109.747181) (xy 236.363643 108.994359) (xy 236.364355 108.179217) (xy 236.364355 117.069217)
+ (xy 236.05307 116.315851) (xy 235.477181 115.738955) (xy 234.724359 115.426357) (xy 233.909217 115.425645) (xy 233.155851 115.73693)
+ (xy 232.578955 116.312819) (xy 232.266357 117.065641) (xy 232.265645 117.880783) (xy 232.57693 118.634149) (xy 233.152819 119.211045)
+ (xy 233.905641 119.523643) (xy 234.720783 119.524355) (xy 235.474149 119.21307) (xy 236.051045 118.637181) (xy 236.363643 117.884359)
+ (xy 236.364355 117.069217) (xy 236.364355 125.959217) (xy 236.05307 125.205851) (xy 235.477181 124.628955) (xy 234.724359 124.316357)
+ (xy 233.909217 124.315645) (xy 233.155851 124.62693) (xy 232.578955 125.202819) (xy 232.266357 125.955641) (xy 232.265645 126.770783)
+ (xy 232.57693 127.524149) (xy 233.152819 128.101045) (xy 233.905641 128.413643) (xy 234.720783 128.414355) (xy 235.474149 128.10307)
+ (xy 236.051045 127.527181) (xy 236.363643 126.774359) (xy 236.364355 125.959217) (xy 236.364355 133.7394) (xy 232.23669 133.7394)
+ (xy 232.23669 127.417849) (xy 232.23669 118.527849) (xy 232.23669 109.637849) (xy 232.23669 100.747849) (xy 232.23669 91.857849)
+ (xy 232.23669 82.967849) (xy 232.23669 74.077849) (xy 232.07011 73.674694) (xy 231.761928 73.365974) (xy 231.359064 73.19869)
+ (xy 230.96669 73.198348) (xy 230.96669 71.537849) (xy 230.80011 71.134694) (xy 230.491928 70.825974) (xy 230.089064 70.65869)
+ (xy 229.69669 70.658348) (xy 229.69669 65.187849) (xy 229.53011 64.784694) (xy 229.221928 64.475974) (xy 228.819064 64.30869)
+ (xy 228.42669 64.308348) (xy 228.42669 62.647849) (xy 228.26011 62.244694) (xy 227.951928 61.935974) (xy 227.549064 61.76869)
+ (xy 227.112849 61.76831) (xy 226.709694 61.93489) (xy 226.400974 62.243072) (xy 226.23369 62.645936) (xy 226.23331 63.082151)
+ (xy 226.39989 63.485306) (xy 226.708072 63.794026) (xy 227.110936 63.96131) (xy 227.547151 63.96169) (xy 227.950306 63.79511)
+ (xy 228.259026 63.486928) (xy 228.42631 63.084064) (xy 228.42669 62.647849) (xy 228.42669 64.308348) (xy 228.382849 64.30831)
+ (xy 227.979694 64.47489) (xy 227.670974 64.783072) (xy 227.50369 65.185936) (xy 227.50331 65.622151) (xy 227.66989 66.025306)
+ (xy 227.978072 66.334026) (xy 228.380936 66.50131) (xy 228.817151 66.50169) (xy 229.220306 66.33511) (xy 229.529026 66.026928)
+ (xy 229.69631 65.624064) (xy 229.69669 65.187849) (xy 229.69669 70.658348) (xy 229.652849 70.65831) (xy 229.249694 70.82489)
+ (xy 228.940974 71.133072) (xy 228.77369 71.535936) (xy 228.77331 71.972151) (xy 228.93989 72.375306) (xy 229.248072 72.684026)
+ (xy 229.650936 72.85131) (xy 230.087151 72.85169) (xy 230.490306 72.68511) (xy 230.799026 72.376928) (xy 230.96631 71.974064)
+ (xy 230.96669 71.537849) (xy 230.96669 73.198348) (xy 230.922849 73.19831) (xy 230.519694 73.36489) (xy 230.210974 73.673072)
+ (xy 230.04369 74.075936) (xy 230.04331 74.512151) (xy 230.20989 74.915306) (xy 230.518072 75.224026) (xy 230.920936 75.39131)
+ (xy 231.357151 75.39169) (xy 231.760306 75.22511) (xy 232.069026 74.916928) (xy 232.23631 74.514064) (xy 232.23669 74.077849)
+ (xy 232.23669 82.967849) (xy 232.07011 82.564694) (xy 231.761928 82.255974) (xy 231.359064 82.08869) (xy 230.96669 82.088348)
+ (xy 230.96669 80.427849) (xy 230.80011 80.024694) (xy 230.491928 79.715974) (xy 230.089064 79.54869) (xy 229.69669 79.548348)
+ (xy 229.69669 74.077849) (xy 229.53011 73.674694) (xy 229.221928 73.365974) (xy 228.819064 73.19869) (xy 228.42669 73.198348)
+ (xy 228.42669 71.537849) (xy 228.26011 71.134694) (xy 227.951928 70.825974) (xy 227.549064 70.65869) (xy 227.15669 70.658348)
+ (xy 227.15669 65.187849) (xy 226.99011 64.784694) (xy 226.681928 64.475974) (xy 226.279064 64.30869) (xy 225.88669 64.308348)
+ (xy 225.88669 62.647849) (xy 225.72011 62.244694) (xy 225.411928 61.935974) (xy 225.009064 61.76869) (xy 224.572849 61.76831)
+ (xy 224.169694 61.93489) (xy 223.860974 62.243072) (xy 223.69369 62.645936) (xy 223.69331 63.082151) (xy 223.85989 63.485306)
+ (xy 224.168072 63.794026) (xy 224.570936 63.96131) (xy 225.007151 63.96169) (xy 225.410306 63.79511) (xy 225.719026 63.486928)
+ (xy 225.88631 63.084064) (xy 225.88669 62.647849) (xy 225.88669 64.308348) (xy 225.842849 64.30831) (xy 225.439694 64.47489)
+ (xy 225.130974 64.783072) (xy 224.96369 65.185936) (xy 224.96331 65.622151) (xy 225.12989 66.025306) (xy 225.438072 66.334026)
+ (xy 225.840936 66.50131) (xy 226.277151 66.50169) (xy 226.680306 66.33511) (xy 226.989026 66.026928) (xy 227.15631 65.624064)
+ (xy 227.15669 65.187849) (xy 227.15669 70.658348) (xy 227.112849 70.65831) (xy 226.709694 70.82489) (xy 226.400974 71.133072)
+ (xy 226.23369 71.535936) (xy 226.23331 71.972151) (xy 226.39989 72.375306) (xy 226.708072 72.684026) (xy 227.110936 72.85131)
+ (xy 227.547151 72.85169) (xy 227.950306 72.68511) (xy 228.259026 72.376928) (xy 228.42631 71.974064) (xy 228.42669 71.537849)
+ (xy 228.42669 73.198348) (xy 228.382849 73.19831) (xy 227.979694 73.36489) (xy 227.670974 73.673072) (xy 227.50369 74.075936)
+ (xy 227.50331 74.512151) (xy 227.66989 74.915306) (xy 227.978072 75.224026) (xy 228.380936 75.39131) (xy 228.817151 75.39169)
+ (xy 229.220306 75.22511) (xy 229.529026 74.916928) (xy 229.69631 74.514064) (xy 229.69669 74.077849) (xy 229.69669 79.548348)
+ (xy 229.652849 79.54831) (xy 229.249694 79.71489) (xy 228.940974 80.023072) (xy 228.77369 80.425936) (xy 228.77331 80.862151)
+ (xy 228.93989 81.265306) (xy 229.248072 81.574026) (xy 229.650936 81.74131) (xy 230.087151 81.74169) (xy 230.490306 81.57511)
+ (xy 230.799026 81.266928) (xy 230.96631 80.864064) (xy 230.96669 80.427849) (xy 230.96669 82.088348) (xy 230.922849 82.08831)
+ (xy 230.519694 82.25489) (xy 230.210974 82.563072) (xy 230.04369 82.965936) (xy 230.04331 83.402151) (xy 230.20989 83.805306)
+ (xy 230.518072 84.114026) (xy 230.920936 84.28131) (xy 231.357151 84.28169) (xy 231.760306 84.11511) (xy 232.069026 83.806928)
+ (xy 232.23631 83.404064) (xy 232.23669 82.967849) (xy 232.23669 91.857849) (xy 232.07011 91.454694) (xy 231.761928 91.145974)
+ (xy 231.359064 90.97869) (xy 230.96669 90.978348) (xy 230.96669 89.317849) (xy 230.80011 88.914694) (xy 230.491928 88.605974)
+ (xy 230.089064 88.43869) (xy 229.69669 88.438348) (xy 229.69669 82.967849) (xy 229.53011 82.564694) (xy 229.221928 82.255974)
+ (xy 228.819064 82.08869) (xy 228.42669 82.088348) (xy 228.42669 80.427849) (xy 228.26011 80.024694) (xy 227.951928 79.715974)
+ (xy 227.549064 79.54869) (xy 227.15669 79.548348) (xy 227.15669 74.077849) (xy 226.99011 73.674694) (xy 226.681928 73.365974)
+ (xy 226.279064 73.19869) (xy 225.88669 73.198348) (xy 225.88669 71.537849) (xy 225.72011 71.134694) (xy 225.411928 70.825974)
+ (xy 225.009064 70.65869) (xy 224.61669 70.658348) (xy 224.61669 65.187849) (xy 224.45011 64.784694) (xy 224.141928 64.475974)
+ (xy 223.739064 64.30869) (xy 223.34669 64.308348) (xy 223.34669 62.647849) (xy 223.18011 62.244694) (xy 222.871928 61.935974)
+ (xy 222.469064 61.76869) (xy 222.032849 61.76831) (xy 221.629694 61.93489) (xy 221.320974 62.243072) (xy 221.15369 62.645936)
+ (xy 221.15331 63.082151) (xy 221.31989 63.485306) (xy 221.628072 63.794026) (xy 222.030936 63.96131) (xy 222.467151 63.96169)
+ (xy 222.870306 63.79511) (xy 223.179026 63.486928) (xy 223.34631 63.084064) (xy 223.34669 62.647849) (xy 223.34669 64.308348)
+ (xy 223.302849 64.30831) (xy 222.899694 64.47489) (xy 222.590974 64.783072) (xy 222.42369 65.185936) (xy 222.42331 65.622151)
+ (xy 222.58989 66.025306) (xy 222.898072 66.334026) (xy 223.300936 66.50131) (xy 223.737151 66.50169) (xy 224.140306 66.33511)
+ (xy 224.449026 66.026928) (xy 224.61631 65.624064) (xy 224.61669 65.187849) (xy 224.61669 70.658348) (xy 224.572849 70.65831)
+ (xy 224.169694 70.82489) (xy 223.860974 71.133072) (xy 223.69369 71.535936) (xy 223.69331 71.972151) (xy 223.85989 72.375306)
+ (xy 224.168072 72.684026) (xy 224.570936 72.85131) (xy 225.007151 72.85169) (xy 225.410306 72.68511) (xy 225.719026 72.376928)
+ (xy 225.88631 71.974064) (xy 225.88669 71.537849) (xy 225.88669 73.198348) (xy 225.842849 73.19831) (xy 225.439694 73.36489)
+ (xy 225.130974 73.673072) (xy 224.96369 74.075936) (xy 224.96331 74.512151) (xy 225.12989 74.915306) (xy 225.438072 75.224026)
+ (xy 225.840936 75.39131) (xy 226.277151 75.39169) (xy 226.680306 75.22511) (xy 226.989026 74.916928) (xy 227.15631 74.514064)
+ (xy 227.15669 74.077849) (xy 227.15669 79.548348) (xy 227.112849 79.54831) (xy 226.709694 79.71489) (xy 226.400974 80.023072)
+ (xy 226.23369 80.425936) (xy 226.23331 80.862151) (xy 226.39989 81.265306) (xy 226.708072 81.574026) (xy 227.110936 81.74131)
+ (xy 227.547151 81.74169) (xy 227.950306 81.57511) (xy 228.259026 81.266928) (xy 228.42631 80.864064) (xy 228.42669 80.427849)
+ (xy 228.42669 82.088348) (xy 228.382849 82.08831) (xy 227.979694 82.25489) (xy 227.670974 82.563072) (xy 227.50369 82.965936)
+ (xy 227.50331 83.402151) (xy 227.66989 83.805306) (xy 227.978072 84.114026) (xy 228.380936 84.28131) (xy 228.817151 84.28169)
+ (xy 229.220306 84.11511) (xy 229.529026 83.806928) (xy 229.69631 83.404064) (xy 229.69669 82.967849) (xy 229.69669 88.438348)
+ (xy 229.652849 88.43831) (xy 229.249694 88.60489) (xy 228.940974 88.913072) (xy 228.77369 89.315936) (xy 228.77331 89.752151)
+ (xy 228.93989 90.155306) (xy 229.248072 90.464026) (xy 229.650936 90.63131) (xy 230.087151 90.63169) (xy 230.490306 90.46511)
+ (xy 230.799026 90.156928) (xy 230.96631 89.754064) (xy 230.96669 89.317849) (xy 230.96669 90.978348) (xy 230.922849 90.97831)
+ (xy 230.519694 91.14489) (xy 230.210974 91.453072) (xy 230.04369 91.855936) (xy 230.04331 92.292151) (xy 230.20989 92.695306)
+ (xy 230.518072 93.004026) (xy 230.920936 93.17131) (xy 231.357151 93.17169) (xy 231.760306 93.00511) (xy 232.069026 92.696928)
+ (xy 232.23631 92.294064) (xy 232.23669 91.857849) (xy 232.23669 100.747849) (xy 232.07011 100.344694) (xy 231.761928 100.035974)
+ (xy 231.359064 99.86869) (xy 230.96669 99.868348) (xy 230.96669 98.207849) (xy 230.80011 97.804694) (xy 230.491928 97.495974)
+ (xy 230.089064 97.32869) (xy 229.69669 97.328348) (xy 229.69669 91.857849) (xy 229.53011 91.454694) (xy 229.221928 91.145974)
+ (xy 228.819064 90.97869) (xy 228.42669 90.978348) (xy 228.42669 89.317849) (xy 228.26011 88.914694) (xy 227.951928 88.605974)
+ (xy 227.549064 88.43869) (xy 227.15669 88.438348) (xy 227.15669 82.967849) (xy 226.99011 82.564694) (xy 226.681928 82.255974)
+ (xy 226.279064 82.08869) (xy 225.88669 82.088348) (xy 225.88669 80.427849) (xy 225.72011 80.024694) (xy 225.411928 79.715974)
+ (xy 225.009064 79.54869) (xy 224.61669 79.548348) (xy 224.61669 74.077849) (xy 224.45011 73.674694) (xy 224.141928 73.365974)
+ (xy 223.739064 73.19869) (xy 223.34669 73.198348) (xy 223.34669 71.537849) (xy 223.18011 71.134694) (xy 222.871928 70.825974)
+ (xy 222.469064 70.65869) (xy 222.07669 70.658348) (xy 222.07669 65.187849) (xy 221.91011 64.784694) (xy 221.601928 64.475974)
+ (xy 221.199064 64.30869) (xy 220.80669 64.308348) (xy 220.80669 62.647849) (xy 220.64011 62.244694) (xy 220.331928 61.935974)
+ (xy 219.929064 61.76869) (xy 219.492849 61.76831) (xy 219.089694 61.93489) (xy 218.780974 62.243072) (xy 218.61369 62.645936)
+ (xy 218.61331 63.082151) (xy 218.77989 63.485306) (xy 219.088072 63.794026) (xy 219.490936 63.96131) (xy 219.927151 63.96169)
+ (xy 220.330306 63.79511) (xy 220.639026 63.486928) (xy 220.80631 63.084064) (xy 220.80669 62.647849) (xy 220.80669 64.308348)
+ (xy 220.762849 64.30831) (xy 220.359694 64.47489) (xy 220.050974 64.783072) (xy 219.88369 65.185936) (xy 219.88331 65.622151)
+ (xy 220.04989 66.025306) (xy 220.358072 66.334026) (xy 220.760936 66.50131) (xy 221.197151 66.50169) (xy 221.600306 66.33511)
+ (xy 221.909026 66.026928) (xy 222.07631 65.624064) (xy 222.07669 65.187849) (xy 222.07669 70.658348) (xy 222.032849 70.65831)
+ (xy 221.629694 70.82489) (xy 221.320974 71.133072) (xy 221.15369 71.535936) (xy 221.15331 71.972151) (xy 221.31989 72.375306)
+ (xy 221.628072 72.684026) (xy 222.030936 72.85131) (xy 222.467151 72.85169) (xy 222.870306 72.68511) (xy 223.179026 72.376928)
+ (xy 223.34631 71.974064) (xy 223.34669 71.537849) (xy 223.34669 73.198348) (xy 223.302849 73.19831) (xy 222.899694 73.36489)
+ (xy 222.590974 73.673072) (xy 222.42369 74.075936) (xy 222.42331 74.512151) (xy 222.58989 74.915306) (xy 222.898072 75.224026)
+ (xy 223.300936 75.39131) (xy 223.737151 75.39169) (xy 224.140306 75.22511) (xy 224.449026 74.916928) (xy 224.61631 74.514064)
+ (xy 224.61669 74.077849) (xy 224.61669 79.548348) (xy 224.572849 79.54831) (xy 224.169694 79.71489) (xy 223.860974 80.023072)
+ (xy 223.69369 80.425936) (xy 223.69331 80.862151) (xy 223.85989 81.265306) (xy 224.168072 81.574026) (xy 224.570936 81.74131)
+ (xy 225.007151 81.74169) (xy 225.410306 81.57511) (xy 225.719026 81.266928) (xy 225.88631 80.864064) (xy 225.88669 80.427849)
+ (xy 225.88669 82.088348) (xy 225.842849 82.08831) (xy 225.439694 82.25489) (xy 225.130974 82.563072) (xy 224.96369 82.965936)
+ (xy 224.96331 83.402151) (xy 225.12989 83.805306) (xy 225.438072 84.114026) (xy 225.840936 84.28131) (xy 226.277151 84.28169)
+ (xy 226.680306 84.11511) (xy 226.989026 83.806928) (xy 227.15631 83.404064) (xy 227.15669 82.967849) (xy 227.15669 88.438348)
+ (xy 227.112849 88.43831) (xy 226.709694 88.60489) (xy 226.400974 88.913072) (xy 226.23369 89.315936) (xy 226.23331 89.752151)
+ (xy 226.39989 90.155306) (xy 226.708072 90.464026) (xy 227.110936 90.63131) (xy 227.547151 90.63169) (xy 227.950306 90.46511)
+ (xy 228.259026 90.156928) (xy 228.42631 89.754064) (xy 228.42669 89.317849) (xy 228.42669 90.978348) (xy 228.382849 90.97831)
+ (xy 227.979694 91.14489) (xy 227.670974 91.453072) (xy 227.50369 91.855936) (xy 227.50331 92.292151) (xy 227.66989 92.695306)
+ (xy 227.978072 93.004026) (xy 228.380936 93.17131) (xy 228.817151 93.17169) (xy 229.220306 93.00511) (xy 229.529026 92.696928)
+ (xy 229.69631 92.294064) (xy 229.69669 91.857849) (xy 229.69669 97.328348) (xy 229.652849 97.32831) (xy 229.249694 97.49489)
+ (xy 228.940974 97.803072) (xy 228.77369 98.205936) (xy 228.77331 98.642151) (xy 228.93989 99.045306) (xy 229.248072 99.354026)
+ (xy 229.650936 99.52131) (xy 230.087151 99.52169) (xy 230.490306 99.35511) (xy 230.799026 99.046928) (xy 230.96631 98.644064)
+ (xy 230.96669 98.207849) (xy 230.96669 99.868348) (xy 230.922849 99.86831) (xy 230.519694 100.03489) (xy 230.210974 100.343072)
+ (xy 230.04369 100.745936) (xy 230.04331 101.182151) (xy 230.20989 101.585306) (xy 230.518072 101.894026) (xy 230.920936 102.06131)
+ (xy 231.357151 102.06169) (xy 231.760306 101.89511) (xy 232.069026 101.586928) (xy 232.23631 101.184064) (xy 232.23669 100.747849)
+ (xy 232.23669 109.637849) (xy 232.07011 109.234694) (xy 231.761928 108.925974) (xy 231.359064 108.75869) (xy 230.96669 108.758348)
+ (xy 230.96669 107.097849) (xy 230.80011 106.694694) (xy 230.491928 106.385974) (xy 230.089064 106.21869) (xy 229.69669 106.218348)
+ (xy 229.69669 100.747849) (xy 229.53011 100.344694) (xy 229.221928 100.035974) (xy 228.819064 99.86869) (xy 228.42669 99.868348)
+ (xy 228.42669 98.207849) (xy 228.26011 97.804694) (xy 227.951928 97.495974) (xy 227.549064 97.32869) (xy 227.15669 97.328348)
+ (xy 227.15669 91.857849) (xy 226.99011 91.454694) (xy 226.681928 91.145974) (xy 226.279064 90.97869) (xy 225.88669 90.978348)
+ (xy 225.88669 89.317849) (xy 225.72011 88.914694) (xy 225.411928 88.605974) (xy 225.009064 88.43869) (xy 224.61669 88.438348)
+ (xy 224.61669 82.967849) (xy 224.45011 82.564694) (xy 224.141928 82.255974) (xy 223.739064 82.08869) (xy 223.34669 82.088348)
+ (xy 223.34669 80.427849) (xy 223.18011 80.024694) (xy 222.871928 79.715974) (xy 222.469064 79.54869) (xy 222.07669 79.548348)
+ (xy 222.07669 74.077849) (xy 221.91011 73.674694) (xy 221.601928 73.365974) (xy 221.199064 73.19869) (xy 220.80669 73.198348)
+ (xy 220.80669 71.537849) (xy 220.64011 71.134694) (xy 220.331928 70.825974) (xy 219.929064 70.65869) (xy 219.53669 70.658348)
+ (xy 219.53669 65.187849) (xy 219.37011 64.784694) (xy 219.061928 64.475974) (xy 218.659064 64.30869) (xy 218.26669 64.308348)
+ (xy 218.26669 62.647849) (xy 218.10011 62.244694) (xy 217.791928 61.935974) (xy 217.389064 61.76869) (xy 216.952849 61.76831)
+ (xy 216.549694 61.93489) (xy 216.240974 62.243072) (xy 216.07369 62.645936) (xy 216.07331 63.082151) (xy 216.23989 63.485306)
+ (xy 216.548072 63.794026) (xy 216.950936 63.96131) (xy 217.387151 63.96169) (xy 217.790306 63.79511) (xy 218.099026 63.486928)
+ (xy 218.26631 63.084064) (xy 218.26669 62.647849) (xy 218.26669 64.308348) (xy 218.222849 64.30831) (xy 217.819694 64.47489)
+ (xy 217.510974 64.783072) (xy 217.34369 65.185936) (xy 217.34331 65.622151) (xy 217.50989 66.025306) (xy 217.818072 66.334026)
+ (xy 218.220936 66.50131) (xy 218.657151 66.50169) (xy 219.060306 66.33511) (xy 219.369026 66.026928) (xy 219.53631 65.624064)
+ (xy 219.53669 65.187849) (xy 219.53669 70.658348) (xy 219.492849 70.65831) (xy 219.089694 70.82489) (xy 218.780974 71.133072)
+ (xy 218.61369 71.535936) (xy 218.61331 71.972151) (xy 218.77989 72.375306) (xy 219.088072 72.684026) (xy 219.490936 72.85131)
+ (xy 219.927151 72.85169) (xy 220.330306 72.68511) (xy 220.639026 72.376928) (xy 220.80631 71.974064) (xy 220.80669 71.537849)
+ (xy 220.80669 73.198348) (xy 220.762849 73.19831) (xy 220.359694 73.36489) (xy 220.050974 73.673072) (xy 219.88369 74.075936)
+ (xy 219.88331 74.512151) (xy 220.04989 74.915306) (xy 220.358072 75.224026) (xy 220.760936 75.39131) (xy 221.197151 75.39169)
+ (xy 221.600306 75.22511) (xy 221.909026 74.916928) (xy 222.07631 74.514064) (xy 222.07669 74.077849) (xy 222.07669 79.548348)
+ (xy 222.032849 79.54831) (xy 221.629694 79.71489) (xy 221.320974 80.023072) (xy 221.197456 80.320535) (xy 221.173692 80.310668)
+ (xy 220.788001 80.310332) (xy 220.762488 80.320873) (xy 220.64011 80.024694) (xy 220.331928 79.715974) (xy 219.929064 79.54869)
+ (xy 219.53669 79.548348) (xy 219.53669 74.077849) (xy 219.37011 73.674694) (xy 219.061928 73.365974) (xy 218.659064 73.19869)
+ (xy 218.26669 73.198348) (xy 218.26669 71.537849) (xy 218.10011 71.134694) (xy 217.791928 70.825974) (xy 217.389064 70.65869)
+ (xy 216.99669 70.658348) (xy 216.99669 65.187849) (xy 216.83011 64.784694) (xy 216.521928 64.475974) (xy 216.119064 64.30869)
+ (xy 215.72669 64.308348) (xy 215.72669 62.647849) (xy 215.56011 62.244694) (xy 215.251928 61.935974) (xy 214.849064 61.76869)
+ (xy 214.412849 61.76831) (xy 214.009694 61.93489) (xy 213.700974 62.243072) (xy 213.53369 62.645936) (xy 213.53331 63.082151)
+ (xy 213.69989 63.485306) (xy 214.008072 63.794026) (xy 214.410936 63.96131) (xy 214.847151 63.96169) (xy 215.250306 63.79511)
+ (xy 215.559026 63.486928) (xy 215.72631 63.084064) (xy 215.72669 62.647849) (xy 215.72669 64.308348) (xy 215.682849 64.30831)
+ (xy 215.279694 64.47489) (xy 214.970974 64.783072) (xy 214.80369 65.185936) (xy 214.80331 65.622151) (xy 214.96989 66.025306)
+ (xy 215.278072 66.334026) (xy 215.680936 66.50131) (xy 216.117151 66.50169) (xy 216.520306 66.33511) (xy 216.829026 66.026928)
+ (xy 216.99631 65.624064) (xy 216.99669 65.187849) (xy 216.99669 70.658348) (xy 216.952849 70.65831) (xy 216.549694 70.82489)
+ (xy 216.240974 71.133072) (xy 216.162435 71.322212) (xy 216.093692 71.293668) (xy 215.708001 71.293332) (xy 215.637665 71.322393)
+ (xy 215.56011 71.134694) (xy 215.251928 70.825974) (xy 214.849064 70.65869) (xy 214.45669 70.658348) (xy 214.45669 65.187849)
+ (xy 214.29011 64.784694) (xy 213.981928 64.475974) (xy 213.579064 64.30869) (xy 213.18669 64.308348) (xy 213.18669 62.647849)
+ (xy 213.02011 62.244694) (xy 212.711928 61.935974) (xy 212.309064 61.76869) (xy 211.872849 61.76831) (xy 211.469694 61.93489)
+ (xy 211.160974 62.243072) (xy 210.99369 62.645936) (xy 210.99331 63.082151) (xy 211.15989 63.485306) (xy 211.468072 63.794026)
+ (xy 211.870936 63.96131) (xy 212.307151 63.96169) (xy 212.710306 63.79511) (xy 213.019026 63.486928) (xy 213.18631 63.084064)
+ (xy 213.18669 62.647849) (xy 213.18669 64.308348) (xy 213.142849 64.30831) (xy 212.739694 64.47489) (xy 212.430974 64.783072)
+ (xy 212.26369 65.185936) (xy 212.26331 65.622151) (xy 212.42989 66.025306) (xy 212.738072 66.334026) (xy 213.140936 66.50131)
+ (xy 213.577151 66.50169) (xy 213.980306 66.33511) (xy 214.289026 66.026928) (xy 214.45631 65.624064) (xy 214.45669 65.187849)
+ (xy 214.45669 70.658348) (xy 214.412849 70.65831) (xy 214.009694 70.82489) (xy 213.700974 71.133072) (xy 213.53369 71.535936)
+ (xy 213.53331 71.972151) (xy 213.69989 72.375306) (xy 214.008072 72.684026) (xy 214.410936 72.85131) (xy 214.847151 72.85169)
+ (xy 215.058207 72.764483) (xy 215.077618 72.81146) (xy 215.350105 73.084423) (xy 215.653539 73.21042) (xy 215.279694 73.36489)
+ (xy 214.970974 73.673072) (xy 214.80369 74.075936) (xy 214.80331 74.512151) (xy 214.96989 74.915306) (xy 215.278072 75.224026)
+ (xy 215.680936 75.39131) (xy 216.117151 75.39169) (xy 216.520306 75.22511) (xy 216.829026 74.916928) (xy 216.99631 74.514064)
+ (xy 216.99669 74.077849) (xy 216.83011 73.674694) (xy 216.521928 73.365974) (xy 216.14658 73.210115) (xy 216.44846 73.085382)
+ (xy 216.721423 72.812895) (xy 216.74157 72.764373) (xy 216.950936 72.85131) (xy 217.387151 72.85169) (xy 217.790306 72.68511)
+ (xy 218.099026 72.376928) (xy 218.26631 71.974064) (xy 218.26669 71.537849) (xy 218.26669 73.198348) (xy 218.222849 73.19831)
+ (xy 217.819694 73.36489) (xy 217.510974 73.673072) (xy 217.34369 74.075936) (xy 217.34331 74.512151) (xy 217.50989 74.915306)
+ (xy 217.818072 75.224026) (xy 218.220936 75.39131) (xy 218.657151 75.39169) (xy 219.060306 75.22511) (xy 219.369026 74.916928)
+ (xy 219.53631 74.514064) (xy 219.53669 74.077849) (xy 219.53669 79.548348) (xy 219.492849 79.54831) (xy 219.089694 79.71489)
+ (xy 218.780974 80.023072) (xy 218.61369 80.425936) (xy 218.61331 80.862151) (xy 218.77989 81.265306) (xy 219.088072 81.574026)
+ (xy 219.490936 81.74131) (xy 219.927151 81.74169) (xy 220.093385 81.673003) (xy 220.157618 81.82846) (xy 220.430105 82.101423)
+ (xy 220.580237 82.163763) (xy 220.359694 82.25489) (xy 220.050974 82.563072) (xy 219.88369 82.965936) (xy 219.88331 83.402151)
+ (xy 220.04989 83.805306) (xy 220.358072 84.114026) (xy 220.428613 84.143317) (xy 220.285577 84.286105) (xy 220.137668 84.642308)
+ (xy 220.137332 85.027999) (xy 220.284618 85.38446) (xy 220.557105 85.657423) (xy 220.913308 85.805332) (xy 221.298999 85.805668)
+ (xy 221.65546 85.658382) (xy 221.928423 85.385895) (xy 222.076332 85.029692) (xy 222.076668 84.644001) (xy 221.929382 84.28754)
+ (xy 221.678916 84.036636) (xy 221.909026 83.806928) (xy 222.07631 83.404064) (xy 222.07669 82.967849) (xy 221.91011 82.564694)
+ (xy 221.601928 82.255974) (xy 221.379882 82.163772) (xy 221.52846 82.102382) (xy 221.801423 81.829895) (xy 221.86655 81.673051)
+ (xy 222.030936 81.74131) (xy 222.467151 81.74169) (xy 222.870306 81.57511) (xy 223.179026 81.266928) (xy 223.34631 80.864064)
+ (xy 223.34669 80.427849) (xy 223.34669 82.088348) (xy 223.302849 82.08831) (xy 222.899694 82.25489) (xy 222.590974 82.563072)
+ (xy 222.42369 82.965936) (xy 222.42331 83.402151) (xy 222.58989 83.805306) (xy 222.898072 84.114026) (xy 223.300936 84.28131)
+ (xy 223.737151 84.28169) (xy 224.140306 84.11511) (xy 224.449026 83.806928) (xy 224.61631 83.404064) (xy 224.61669 82.967849)
+ (xy 224.61669 88.438348) (xy 224.572849 88.43831) (xy 224.169694 88.60489) (xy 223.860974 88.913072) (xy 223.69369 89.315936)
+ (xy 223.69331 89.752151) (xy 223.85989 90.155306) (xy 224.168072 90.464026) (xy 224.570936 90.63131) (xy 225.007151 90.63169)
+ (xy 225.410306 90.46511) (xy 225.719026 90.156928) (xy 225.88631 89.754064) (xy 225.88669 89.317849) (xy 225.88669 90.978348)
+ (xy 225.842849 90.97831) (xy 225.439694 91.14489) (xy 225.130974 91.453072) (xy 224.96369 91.855936) (xy 224.96331 92.292151)
+ (xy 225.12989 92.695306) (xy 225.438072 93.004026) (xy 225.840936 93.17131) (xy 226.277151 93.17169) (xy 226.680306 93.00511)
+ (xy 226.989026 92.696928) (xy 227.15631 92.294064) (xy 227.15669 91.857849) (xy 227.15669 97.328348) (xy 227.112849 97.32831)
+ (xy 226.709694 97.49489) (xy 226.400974 97.803072) (xy 226.23369 98.205936) (xy 226.23331 98.642151) (xy 226.39989 99.045306)
+ (xy 226.708072 99.354026) (xy 227.110936 99.52131) (xy 227.547151 99.52169) (xy 227.950306 99.35511) (xy 228.259026 99.046928)
+ (xy 228.42631 98.644064) (xy 228.42669 98.207849) (xy 228.42669 99.868348) (xy 228.382849 99.86831) (xy 227.979694 100.03489)
+ (xy 227.670974 100.343072) (xy 227.592435 100.532212) (xy 227.523692 100.503668) (xy 227.138001 100.503332) (xy 227.067665 100.532393)
+ (xy 226.99011 100.344694) (xy 226.681928 100.035974) (xy 226.279064 99.86869) (xy 225.88669 99.868348) (xy 225.88669 98.207849)
+ (xy 225.72011 97.804694) (xy 225.411928 97.495974) (xy 225.009064 97.32869) (xy 224.61669 97.328348) (xy 224.61669 91.857849)
+ (xy 224.45011 91.454694) (xy 224.141928 91.145974) (xy 223.739064 90.97869) (xy 223.34669 90.978348) (xy 223.34669 89.317849)
+ (xy 223.18011 88.914694) (xy 222.871928 88.605974) (xy 222.469064 88.43869) (xy 222.032849 88.43831) (xy 221.629694 88.60489)
+ (xy 221.320974 88.913072) (xy 221.15369 89.315936) (xy 221.15331 89.752151) (xy 221.31989 90.155306) (xy 221.628072 90.464026)
+ (xy 222.030936 90.63131) (xy 222.467151 90.63169) (xy 222.870306 90.46511) (xy 223.179026 90.156928) (xy 223.34631 89.754064)
+ (xy 223.34669 89.317849) (xy 223.34669 90.978348) (xy 223.302849 90.97831) (xy 222.899694 91.14489) (xy 222.590974 91.453072)
+ (xy 222.42369 91.855936) (xy 222.42331 92.292151) (xy 222.58989 92.695306) (xy 222.898072 93.004026) (xy 223.300936 93.17131)
+ (xy 223.737151 93.17169) (xy 224.140306 93.00511) (xy 224.449026 92.696928) (xy 224.61631 92.294064) (xy 224.61669 91.857849)
+ (xy 224.61669 97.328348) (xy 224.572849 97.32831) (xy 224.169694 97.49489) (xy 223.860974 97.803072) (xy 223.69369 98.205936)
+ (xy 223.69331 98.642151) (xy 223.85989 99.045306) (xy 224.168072 99.354026) (xy 224.570936 99.52131) (xy 225.007151 99.52169)
+ (xy 225.410306 99.35511) (xy 225.719026 99.046928) (xy 225.88631 98.644064) (xy 225.88669 98.207849) (xy 225.88669 99.868348)
+ (xy 225.842849 99.86831) (xy 225.439694 100.03489) (xy 225.130974 100.343072) (xy 224.96369 100.745936) (xy 224.96331 101.182151)
+ (xy 225.12989 101.585306) (xy 225.438072 101.894026) (xy 225.840936 102.06131) (xy 226.277151 102.06169) (xy 226.488207 101.974483)
+ (xy 226.507618 102.02146) (xy 226.780105 102.294423) (xy 227.136308 102.442332) (xy 227.521999 102.442668) (xy 227.87846 102.295382)
+ (xy 228.151423 102.022895) (xy 228.17157 101.974373) (xy 228.380936 102.06131) (xy 228.817151 102.06169) (xy 229.220306 101.89511)
+ (xy 229.529026 101.586928) (xy 229.69631 101.184064) (xy 229.69669 100.747849) (xy 229.69669 106.218348) (xy 229.652849 106.21831)
+ (xy 229.249694 106.38489) (xy 228.940974 106.693072) (xy 228.77369 107.095936) (xy 228.77331 107.532151) (xy 228.93989 107.935306)
+ (xy 229.248072 108.244026) (xy 229.650936 108.41131) (xy 230.087151 108.41169) (xy 230.490306 108.24511) (xy 230.799026 107.936928)
+ (xy 230.96631 107.534064) (xy 230.96669 107.097849) (xy 230.96669 108.758348) (xy 230.922849 108.75831) (xy 230.519694 108.92489)
+ (xy 230.210974 109.233072) (xy 230.04369 109.635936) (xy 230.04331 110.072151) (xy 230.20989 110.475306) (xy 230.518072 110.784026)
+ (xy 230.920936 110.95131) (xy 231.357151 110.95169) (xy 231.760306 110.78511) (xy 232.069026 110.476928) (xy 232.23631 110.074064)
+ (xy 232.23669 109.637849) (xy 232.23669 118.527849) (xy 232.07011 118.124694) (xy 231.761928 117.815974) (xy 231.359064 117.64869)
+ (xy 230.96669 117.648348) (xy 230.96669 115.987849) (xy 230.80011 115.584694) (xy 230.491928 115.275974) (xy 230.089064 115.10869)
+ (xy 229.69669 115.108348) (xy 229.69669 109.637849) (xy 229.53011 109.234694) (xy 229.221928 108.925974) (xy 228.819064 108.75869)
+ (xy 228.42669 108.758348) (xy 228.42669 107.097849) (xy 228.26011 106.694694) (xy 227.951928 106.385974) (xy 227.549064 106.21869)
+ (xy 227.112849 106.21831) (xy 226.709694 106.38489) (xy 226.400974 106.693072) (xy 226.23369 107.095936) (xy 226.23331 107.532151)
+ (xy 226.39989 107.935306) (xy 226.708072 108.244026) (xy 227.110936 108.41131) (xy 227.547151 108.41169) (xy 227.950306 108.24511)
+ (xy 228.259026 107.936928) (xy 228.42631 107.534064) (xy 228.42669 107.097849) (xy 228.42669 108.758348) (xy 228.382849 108.75831)
+ (xy 227.979694 108.92489) (xy 227.670974 109.233072) (xy 227.50369 109.635936) (xy 227.50331 110.072151) (xy 227.66989 110.475306)
+ (xy 227.978072 110.784026) (xy 228.380936 110.95131) (xy 228.817151 110.95169) (xy 229.220306 110.78511) (xy 229.529026 110.476928)
+ (xy 229.69631 110.074064) (xy 229.69669 109.637849) (xy 229.69669 115.108348) (xy 229.652849 115.10831) (xy 229.249694 115.27489)
+ (xy 228.940974 115.583072) (xy 228.77369 115.985936) (xy 228.77331 116.422151) (xy 228.93989 116.825306) (xy 229.248072 117.134026)
+ (xy 229.650936 117.30131) (xy 230.087151 117.30169) (xy 230.490306 117.13511) (xy 230.799026 116.826928) (xy 230.96631 116.424064)
+ (xy 230.96669 115.987849) (xy 230.96669 117.648348) (xy 230.922849 117.64831) (xy 230.519694 117.81489) (xy 230.210974 118.123072)
+ (xy 230.04369 118.525936) (xy 230.04331 118.962151) (xy 230.20989 119.365306) (xy 230.518072 119.674026) (xy 230.920936 119.84131)
+ (xy 231.357151 119.84169) (xy 231.760306 119.67511) (xy 232.069026 119.366928) (xy 232.23631 118.964064) (xy 232.23669 118.527849)
+ (xy 232.23669 127.417849) (xy 232.07011 127.014694) (xy 231.761928 126.705974) (xy 231.359064 126.53869) (xy 230.96669 126.538348)
+ (xy 230.96669 124.877849) (xy 230.80011 124.474694) (xy 230.491928 124.165974) (xy 230.089064 123.99869) (xy 229.69669 123.998348)
+ (xy 229.69669 118.527849) (xy 229.53011 118.124694) (xy 229.221928 117.815974) (xy 228.819064 117.64869) (xy 228.42669 117.648348)
+ (xy 228.42669 115.987849) (xy 228.26011 115.584694) (xy 227.951928 115.275974) (xy 227.549064 115.10869) (xy 227.15669 115.108348)
+ (xy 227.15669 109.637849) (xy 226.99011 109.234694) (xy 226.681928 108.925974) (xy 226.279064 108.75869) (xy 225.88669 108.758348)
+ (xy 225.88669 107.097849) (xy 225.72011 106.694694) (xy 225.411928 106.385974) (xy 225.009064 106.21869) (xy 224.61669 106.218348)
+ (xy 224.61669 100.747849) (xy 224.45011 100.344694) (xy 224.141928 100.035974) (xy 223.739064 99.86869) (xy 223.34669 99.868348)
+ (xy 223.34669 98.207849) (xy 223.18011 97.804694) (xy 222.871928 97.495974) (xy 222.469064 97.32869) (xy 222.07669 97.328348)
+ (xy 222.07669 91.857849) (xy 221.91011 91.454694) (xy 221.601928 91.145974) (xy 221.199064 90.97869) (xy 220.80669 90.978348)
+ (xy 220.80669 89.317849) (xy 220.64011 88.914694) (xy 220.331928 88.605974) (xy 219.929064 88.43869) (xy 219.53669 88.438348)
+ (xy 219.53669 82.967849) (xy 219.37011 82.564694) (xy 219.061928 82.255974) (xy 218.659064 82.08869) (xy 218.26669 82.088348)
+ (xy 218.26669 80.427849) (xy 218.10011 80.024694) (xy 217.791928 79.715974) (xy 217.389064 79.54869) (xy 216.952849 79.54831)
+ (xy 216.549694 79.71489) (xy 216.240974 80.023072) (xy 216.07369 80.425936) (xy 216.07331 80.862151) (xy 216.23989 81.265306)
+ (xy 216.548072 81.574026) (xy 216.950936 81.74131) (xy 217.387151 81.74169) (xy 217.790306 81.57511) (xy 218.099026 81.266928)
+ (xy 218.26631 80.864064) (xy 218.26669 80.427849) (xy 218.26669 82.088348) (xy 218.222849 82.08831) (xy 217.819694 82.25489)
+ (xy 217.510974 82.563072) (xy 217.34369 82.965936) (xy 217.34331 83.402151) (xy 217.50989 83.805306) (xy 217.818072 84.114026)
+ (xy 218.220936 84.28131) (xy 218.657151 84.28169) (xy 219.060306 84.11511) (xy 219.369026 83.806928) (xy 219.53631 83.404064)
+ (xy 219.53669 82.967849) (xy 219.53669 88.438348) (xy 219.492849 88.43831) (xy 219.409668 88.472679) (xy 219.409668 87.184001)
+ (xy 219.262382 86.82754) (xy 218.989895 86.554577) (xy 218.633692 86.406668) (xy 218.248001 86.406332) (xy 217.89154 86.553618)
+ (xy 217.618577 86.826105) (xy 217.470668 87.182308) (xy 217.470332 87.567999) (xy 217.617618 87.92446) (xy 217.890105 88.197423)
+ (xy 218.246308 88.345332) (xy 218.631999 88.345668) (xy 218.98846 88.198382) (xy 219.261423 87.925895) (xy 219.409332 87.569692)
+ (xy 219.409668 87.184001) (xy 219.409668 88.472679) (xy 219.089694 88.60489) (xy 218.780974 88.913072) (xy 218.61369 89.315936)
+ (xy 218.61331 89.752151) (xy 218.77989 90.155306) (xy 219.088072 90.464026) (xy 219.490936 90.63131) (xy 219.927151 90.63169)
+ (xy 220.330306 90.46511) (xy 220.639026 90.156928) (xy 220.80631 89.754064) (xy 220.80669 89.317849) (xy 220.80669 90.978348)
+ (xy 220.762849 90.97831) (xy 220.359694 91.14489) (xy 220.050974 91.453072) (xy 219.88369 91.855936) (xy 219.88331 92.292151)
+ (xy 220.04989 92.695306) (xy 220.358072 93.004026) (xy 220.760936 93.17131) (xy 221.197151 93.17169) (xy 221.600306 93.00511)
+ (xy 221.909026 92.696928) (xy 222.07631 92.294064) (xy 222.07669 91.857849) (xy 222.07669 97.328348) (xy 222.032849 97.32831)
+ (xy 221.629694 97.49489) (xy 221.320974 97.803072) (xy 221.15369 98.205936) (xy 221.15331 98.642151) (xy 221.31989 99.045306)
+ (xy 221.628072 99.354026) (xy 222.030936 99.52131) (xy 222.467151 99.52169) (xy 222.870306 99.35511) (xy 223.179026 99.046928)
+ (xy 223.34631 98.644064) (xy 223.34669 98.207849) (xy 223.34669 99.868348) (xy 223.302849 99.86831) (xy 222.899694 100.03489)
+ (xy 222.590974 100.343072) (xy 222.42369 100.745936) (xy 222.42331 101.182151) (xy 222.58989 101.585306) (xy 222.898072 101.894026)
+ (xy 223.300936 102.06131) (xy 223.737151 102.06169) (xy 224.140306 101.89511) (xy 224.449026 101.586928) (xy 224.61631 101.184064)
+ (xy 224.61669 100.747849) (xy 224.61669 106.218348) (xy 224.572849 106.21831) (xy 224.169694 106.38489) (xy 223.860974 106.693072)
+ (xy 223.69369 107.095936) (xy 223.69331 107.532151) (xy 223.85989 107.935306) (xy 224.168072 108.244026) (xy 224.570936 108.41131)
+ (xy 225.007151 108.41169) (xy 225.410306 108.24511) (xy 225.719026 107.936928) (xy 225.88631 107.534064) (xy 225.88669 107.097849)
+ (xy 225.88669 108.758348) (xy 225.842849 108.75831) (xy 225.439694 108.92489) (xy 225.130974 109.233072) (xy 224.96369 109.635936)
+ (xy 224.96331 110.072151) (xy 225.12989 110.475306) (xy 225.438072 110.784026) (xy 225.840936 110.95131) (xy 226.277151 110.95169)
+ (xy 226.680306 110.78511) (xy 226.989026 110.476928) (xy 227.15631 110.074064) (xy 227.15669 109.637849) (xy 227.15669 115.108348)
+ (xy 227.112849 115.10831) (xy 226.709694 115.27489) (xy 226.400974 115.583072) (xy 226.23369 115.985936) (xy 226.23331 116.422151)
+ (xy 226.39989 116.825306) (xy 226.708072 117.134026) (xy 227.110936 117.30131) (xy 227.547151 117.30169) (xy 227.950306 117.13511)
+ (xy 228.259026 116.826928) (xy 228.42631 116.424064) (xy 228.42669 115.987849) (xy 228.42669 117.648348) (xy 228.382849 117.64831)
+ (xy 227.979694 117.81489) (xy 227.670974 118.123072) (xy 227.50369 118.525936) (xy 227.50331 118.962151) (xy 227.66989 119.365306)
+ (xy 227.978072 119.674026) (xy 228.380936 119.84131) (xy 228.817151 119.84169) (xy 229.220306 119.67511) (xy 229.529026 119.366928)
+ (xy 229.69631 118.964064) (xy 229.69669 118.527849) (xy 229.69669 123.998348) (xy 229.652849 123.99831) (xy 229.249694 124.16489)
+ (xy 228.940974 124.473072) (xy 228.77369 124.875936) (xy 228.77331 125.312151) (xy 228.93989 125.715306) (xy 229.248072 126.024026)
+ (xy 229.650936 126.19131) (xy 230.087151 126.19169) (xy 230.490306 126.02511) (xy 230.799026 125.716928) (xy 230.96631 125.314064)
+ (xy 230.96669 124.877849) (xy 230.96669 126.538348) (xy 230.922849 126.53831) (xy 230.519694 126.70489) (xy 230.210974 127.013072)
+ (xy 230.04369 127.415936) (xy 230.04331 127.852151) (xy 230.20989 128.255306) (xy 230.518072 128.564026) (xy 230.920936 128.73131)
+ (xy 231.357151 128.73169) (xy 231.760306 128.56511) (xy 232.069026 128.256928) (xy 232.23631 127.854064) (xy 232.23669 127.417849)
+ (xy 232.23669 133.7394) (xy 229.69669 133.7394) (xy 229.69669 127.417849) (xy 229.53011 127.014694) (xy 229.221928 126.705974)
+ (xy 228.819064 126.53869) (xy 228.42669 126.538348) (xy 228.42669 124.877849) (xy 228.26011 124.474694) (xy 227.951928 124.165974)
+ (xy 227.549064 123.99869) (xy 227.15669 123.998348) (xy 227.15669 118.527849) (xy 226.99011 118.124694) (xy 226.681928 117.815974)
+ (xy 226.279064 117.64869) (xy 225.88669 117.648348) (xy 225.88669 115.987849) (xy 225.72011 115.584694) (xy 225.411928 115.275974)
+ (xy 225.009064 115.10869) (xy 224.61669 115.108348) (xy 224.61669 109.637849) (xy 224.45011 109.234694) (xy 224.141928 108.925974)
+ (xy 223.739064 108.75869) (xy 223.34669 108.758348) (xy 223.34669 107.097849) (xy 223.18011 106.694694) (xy 222.871928 106.385974)
+ (xy 222.469064 106.21869) (xy 222.07669 106.218348) (xy 222.07669 100.747849) (xy 221.91011 100.344694) (xy 221.601928 100.035974)
+ (xy 221.199064 99.86869) (xy 220.80669 99.868348) (xy 220.80669 98.207849) (xy 220.64011 97.804694) (xy 220.331928 97.495974)
+ (xy 219.929064 97.32869) (xy 219.53669 97.328348) (xy 219.53669 91.857849) (xy 219.37011 91.454694) (xy 219.061928 91.145974)
+ (xy 218.659064 90.97869) (xy 218.26669 90.978348) (xy 218.26669 89.317849) (xy 218.10011 88.914694) (xy 217.791928 88.605974)
+ (xy 217.389064 88.43869) (xy 216.99669 88.438348) (xy 216.99669 82.967849) (xy 216.83011 82.564694) (xy 216.521928 82.255974)
+ (xy 216.119064 82.08869) (xy 215.72669 82.088348) (xy 215.72669 80.427849) (xy 215.56011 80.024694) (xy 215.251928 79.715974)
+ (xy 214.849064 79.54869) (xy 214.45669 79.548348) (xy 214.45669 74.077849) (xy 214.29011 73.674694) (xy 213.981928 73.365974)
+ (xy 213.579064 73.19869) (xy 213.18669 73.198348) (xy 213.18669 71.537849) (xy 213.02011 71.134694) (xy 212.711928 70.825974)
+ (xy 212.309064 70.65869) (xy 211.91669 70.658348) (xy 211.91669 65.187849) (xy 211.75011 64.784694) (xy 211.441928 64.475974)
+ (xy 211.039064 64.30869) (xy 210.64669 64.308348) (xy 210.64669 62.647849) (xy 210.48011 62.244694) (xy 210.171928 61.935974)
+ (xy 209.769064 61.76869) (xy 209.332849 61.76831) (xy 208.929694 61.93489) (xy 208.620974 62.243072) (xy 208.45369 62.645936)
+ (xy 208.45331 63.082151) (xy 208.61989 63.485306) (xy 208.928072 63.794026) (xy 209.330936 63.96131) (xy 209.767151 63.96169)
+ (xy 210.170306 63.79511) (xy 210.479026 63.486928) (xy 210.64631 63.084064) (xy 210.64669 62.647849) (xy 210.64669 64.308348)
+ (xy 210.602849 64.30831) (xy 210.199694 64.47489) (xy 209.890974 64.783072) (xy 209.72369 65.185936) (xy 209.72331 65.622151)
+ (xy 209.88989 66.025306) (xy 210.198072 66.334026) (xy 210.600936 66.50131) (xy 211.037151 66.50169) (xy 211.440306 66.33511)
+ (xy 211.749026 66.026928) (xy 211.91631 65.624064) (xy 211.91669 65.187849) (xy 211.91669 70.658348) (xy 211.872849 70.65831)
+ (xy 211.469694 70.82489) (xy 211.160974 71.133072) (xy 210.99369 71.535936) (xy 210.99331 71.972151) (xy 211.15989 72.375306)
+ (xy 211.468072 72.684026) (xy 211.870936 72.85131) (xy 212.307151 72.85169) (xy 212.710306 72.68511) (xy 213.019026 72.376928)
+ (xy 213.18631 71.974064) (xy 213.18669 71.537849) (xy 213.18669 73.198348) (xy 213.142849 73.19831) (xy 212.739694 73.36489)
+ (xy 212.430974 73.673072) (xy 212.26369 74.075936) (xy 212.26331 74.512151) (xy 212.42989 74.915306) (xy 212.738072 75.224026)
+ (xy 213.140936 75.39131) (xy 213.577151 75.39169) (xy 213.980306 75.22511) (xy 214.289026 74.916928) (xy 214.45631 74.514064)
+ (xy 214.45669 74.077849) (xy 214.45669 79.548348) (xy 214.412849 79.54831) (xy 214.009694 79.71489) (xy 213.700974 80.023072)
+ (xy 213.53369 80.425936) (xy 213.53331 80.862151) (xy 213.69989 81.265306) (xy 214.008072 81.574026) (xy 214.410936 81.74131)
+ (xy 214.847151 81.74169) (xy 215.250306 81.57511) (xy 215.559026 81.266928) (xy 215.72631 80.864064) (xy 215.72669 80.427849)
+ (xy 215.72669 82.088348) (xy 215.682849 82.08831) (xy 215.279694 82.25489) (xy 214.970974 82.563072) (xy 214.80369 82.965936)
+ (xy 214.80331 83.402151) (xy 214.96989 83.805306) (xy 215.278072 84.114026) (xy 215.680936 84.28131) (xy 216.117151 84.28169)
+ (xy 216.520306 84.11511) (xy 216.829026 83.806928) (xy 216.99631 83.404064) (xy 216.99669 82.967849) (xy 216.99669 88.438348)
+ (xy 216.952849 88.43831) (xy 216.549694 88.60489) (xy 216.240974 88.913072) (xy 216.07369 89.315936) (xy 216.07331 89.752151)
+ (xy 216.23989 90.155306) (xy 216.548072 90.464026) (xy 216.950936 90.63131) (xy 217.387151 90.63169) (xy 217.790306 90.46511)
+ (xy 218.099026 90.156928) (xy 218.26631 89.754064) (xy 218.26669 89.317849) (xy 218.26669 90.978348) (xy 218.222849 90.97831)
+ (xy 217.819694 91.14489) (xy 217.510974 91.453072) (xy 217.34369 91.855936) (xy 217.34331 92.292151) (xy 217.50989 92.695306)
+ (xy 217.818072 93.004026) (xy 218.220936 93.17131) (xy 218.657151 93.17169) (xy 219.060306 93.00511) (xy 219.369026 92.696928)
+ (xy 219.53631 92.294064) (xy 219.53669 91.857849) (xy 219.53669 97.328348) (xy 219.492849 97.32831) (xy 219.089694 97.49489)
+ (xy 218.780974 97.803072) (xy 218.61369 98.205936) (xy 218.61331 98.642151) (xy 218.77989 99.045306) (xy 219.088072 99.354026)
+ (xy 219.490936 99.52131) (xy 219.927151 99.52169) (xy 220.330306 99.35511) (xy 220.639026 99.046928) (xy 220.80631 98.644064)
+ (xy 220.80669 98.207849) (xy 220.80669 99.868348) (xy 220.762849 99.86831) (xy 220.359694 100.03489) (xy 220.050974 100.343072)
+ (xy 219.88369 100.745936) (xy 219.88331 101.182151) (xy 220.04989 101.585306) (xy 220.358072 101.894026) (xy 220.760936 102.06131)
+ (xy 221.197151 102.06169) (xy 221.600306 101.89511) (xy 221.909026 101.586928) (xy 222.07631 101.184064) (xy 222.07669 100.747849)
+ (xy 222.07669 106.218348) (xy 222.032849 106.21831) (xy 221.629694 106.38489) (xy 221.320974 106.693072) (xy 221.15369 107.095936)
+ (xy 221.15331 107.532151) (xy 221.31989 107.935306) (xy 221.628072 108.244026) (xy 222.030936 108.41131) (xy 222.467151 108.41169)
+ (xy 222.870306 108.24511) (xy 223.179026 107.936928) (xy 223.34631 107.534064) (xy 223.34669 107.097849) (xy 223.34669 108.758348)
+ (xy 223.302849 108.75831) (xy 222.899694 108.92489) (xy 222.590974 109.233072) (xy 222.42369 109.635936) (xy 222.42331 110.072151)
+ (xy 222.58989 110.475306) (xy 222.898072 110.784026) (xy 223.300936 110.95131) (xy 223.737151 110.95169) (xy 224.140306 110.78511)
+ (xy 224.449026 110.476928) (xy 224.61631 110.074064) (xy 224.61669 109.637849) (xy 224.61669 115.108348) (xy 224.572849 115.10831)
+ (xy 224.169694 115.27489) (xy 223.860974 115.583072) (xy 223.69369 115.985936) (xy 223.69331 116.422151) (xy 223.85989 116.825306)
+ (xy 224.168072 117.134026) (xy 224.570936 117.30131) (xy 225.007151 117.30169) (xy 225.410306 117.13511) (xy 225.719026 116.826928)
+ (xy 225.88631 116.424064) (xy 225.88669 115.987849) (xy 225.88669 117.648348) (xy 225.842849 117.64831) (xy 225.439694 117.81489)
+ (xy 225.130974 118.123072) (xy 224.96369 118.525936) (xy 224.96331 118.962151) (xy 225.12989 119.365306) (xy 225.438072 119.674026)
+ (xy 225.840936 119.84131) (xy 226.277151 119.84169) (xy 226.680306 119.67511) (xy 226.989026 119.366928) (xy 227.15631 118.964064)
+ (xy 227.15669 118.527849) (xy 227.15669 123.998348) (xy 227.112849 123.99831) (xy 226.709694 124.16489) (xy 226.400974 124.473072)
+ (xy 226.23369 124.875936) (xy 226.23331 125.312151) (xy 226.39989 125.715306) (xy 226.708072 126.024026) (xy 227.110936 126.19131)
+ (xy 227.547151 126.19169) (xy 227.950306 126.02511) (xy 228.259026 125.716928) (xy 228.42631 125.314064) (xy 228.42669 124.877849)
+ (xy 228.42669 126.538348) (xy 228.382849 126.53831) (xy 227.979694 126.70489) (xy 227.670974 127.013072) (xy 227.50369 127.415936)
+ (xy 227.50331 127.852151) (xy 227.66989 128.255306) (xy 227.978072 128.564026) (xy 228.380936 128.73131) (xy 228.817151 128.73169)
+ (xy 229.220306 128.56511) (xy 229.529026 128.256928) (xy 229.69631 127.854064) (xy 229.69669 127.417849) (xy 229.69669 133.7394)
+ (xy 227.15669 133.7394) (xy 227.15669 127.417849) (xy 226.99011 127.014694) (xy 226.681928 126.705974) (xy 226.279064 126.53869)
+ (xy 225.88669 126.538348) (xy 225.88669 124.877849) (xy 225.72011 124.474694) (xy 225.411928 124.165974) (xy 225.009064 123.99869)
+ (xy 224.61669 123.998348) (xy 224.61669 118.527849) (xy 224.45011 118.124694) (xy 224.141928 117.815974) (xy 223.739064 117.64869)
+ (xy 223.34669 117.648348) (xy 223.34669 115.987849) (xy 223.18011 115.584694) (xy 222.871928 115.275974) (xy 222.469064 115.10869)
+ (xy 222.07669 115.108348) (xy 222.07669 109.637849) (xy 221.91011 109.234694) (xy 221.601928 108.925974) (xy 221.199064 108.75869)
+ (xy 220.80669 108.758348) (xy 220.80669 107.097849) (xy 220.64011 106.694694) (xy 220.331928 106.385974) (xy 219.929064 106.21869)
+ (xy 219.53669 106.218348) (xy 219.53669 100.747849) (xy 219.37011 100.344694) (xy 219.061928 100.035974) (xy 218.659064 99.86869)
+ (xy 218.26669 99.868348) (xy 218.26669 98.207849) (xy 218.10011 97.804694) (xy 217.791928 97.495974) (xy 217.389064 97.32869)
+ (xy 216.99669 97.328348) (xy 216.99669 91.857849) (xy 216.83011 91.454694) (xy 216.521928 91.145974) (xy 216.119064 90.97869)
+ (xy 215.72669 90.978348) (xy 215.72669 89.317849) (xy 215.599668 89.010431) (xy 215.599668 85.152001) (xy 215.452382 84.79554)
+ (xy 215.179895 84.522577) (xy 214.823692 84.374668) (xy 214.45669 84.374348) (xy 214.45669 82.967849) (xy 214.29011 82.564694)
+ (xy 213.981928 82.255974) (xy 213.579064 82.08869) (xy 213.18669 82.088348) (xy 213.18669 80.427849) (xy 213.02011 80.024694)
+ (xy 212.711928 79.715974) (xy 212.309064 79.54869) (xy 211.91669 79.548348) (xy 211.91669 74.077849) (xy 211.75011 73.674694)
+ (xy 211.441928 73.365974) (xy 211.039064 73.19869) (xy 210.64669 73.198348) (xy 210.64669 71.537849) (xy 210.48011 71.134694)
+ (xy 210.171928 70.825974) (xy 209.769064 70.65869) (xy 209.37669 70.658348) (xy 209.37669 65.187849) (xy 209.21011 64.784694)
+ (xy 208.901928 64.475974) (xy 208.499064 64.30869) (xy 208.10669 64.308348) (xy 208.10669 62.647849) (xy 207.94011 62.244694)
+ (xy 207.631928 61.935974) (xy 207.229064 61.76869) (xy 206.792849 61.76831) (xy 206.389694 61.93489) (xy 206.080974 62.243072)
+ (xy 205.91369 62.645936) (xy 205.91331 63.082151) (xy 206.07989 63.485306) (xy 206.388072 63.794026) (xy 206.790936 63.96131)
+ (xy 207.227151 63.96169) (xy 207.630306 63.79511) (xy 207.939026 63.486928) (xy 208.10631 63.084064) (xy 208.10669 62.647849)
+ (xy 208.10669 64.308348) (xy 208.062849 64.30831) (xy 207.659694 64.47489) (xy 207.350974 64.783072) (xy 207.18369 65.185936)
+ (xy 207.18331 65.622151) (xy 207.34989 66.025306) (xy 207.658072 66.334026) (xy 208.060936 66.50131) (xy 208.497151 66.50169)
+ (xy 208.900306 66.33511) (xy 209.209026 66.026928) (xy 209.37631 65.624064) (xy 209.37669 65.187849) (xy 209.37669 70.658348)
+ (xy 209.332849 70.65831) (xy 208.929694 70.82489) (xy 208.620974 71.133072) (xy 208.45369 71.535936) (xy 208.45331 71.972151)
+ (xy 208.61989 72.375306) (xy 208.928072 72.684026) (xy 209.330936 72.85131) (xy 209.767151 72.85169) (xy 210.170306 72.68511)
+ (xy 210.479026 72.376928) (xy 210.64631 71.974064) (xy 210.64669 71.537849) (xy 210.64669 73.198348) (xy 210.602849 73.19831)
+ (xy 210.199694 73.36489) (xy 209.890974 73.673072) (xy 209.72369 74.075936) (xy 209.72331 74.512151) (xy 209.88989 74.915306)
+ (xy 210.198072 75.224026) (xy 210.600936 75.39131) (xy 211.037151 75.39169) (xy 211.440306 75.22511) (xy 211.749026 74.916928)
+ (xy 211.91631 74.514064) (xy 211.91669 74.077849) (xy 211.91669 79.548348) (xy 211.872849 79.54831) (xy 211.469694 79.71489)
+ (xy 211.160974 80.023072) (xy 210.99369 80.425936) (xy 210.99331 80.862151) (xy 211.15989 81.265306) (xy 211.468072 81.574026)
+ (xy 211.870936 81.74131) (xy 212.307151 81.74169) (xy 212.710306 81.57511) (xy 213.019026 81.266928) (xy 213.18631 80.864064)
+ (xy 213.18669 80.427849) (xy 213.18669 82.088348) (xy 213.142849 82.08831) (xy 212.739694 82.25489) (xy 212.430974 82.563072)
+ (xy 212.26369 82.965936) (xy 212.26331 83.402151) (xy 212.42989 83.805306) (xy 212.738072 84.114026) (xy 213.140936 84.28131)
+ (xy 213.577151 84.28169) (xy 213.980306 84.11511) (xy 214.289026 83.806928) (xy 214.45631 83.404064) (xy 214.45669 82.967849)
+ (xy 214.45669 84.374348) (xy 214.438001 84.374332) (xy 214.08154 84.521618) (xy 213.808577 84.794105) (xy 213.660668 85.150308)
+ (xy 213.660332 85.535999) (xy 213.807618 85.89246) (xy 214.080105 86.165423) (xy 214.436308 86.313332) (xy 214.821999 86.313668)
+ (xy 215.17846 86.166382) (xy 215.451423 85.893895) (xy 215.599332 85.537692) (xy 215.599668 85.152001) (xy 215.599668 89.010431)
+ (xy 215.56011 88.914694) (xy 215.251928 88.605974) (xy 214.849064 88.43869) (xy 214.412849 88.43831) (xy 214.009694 88.60489)
+ (xy 213.700974 88.913072) (xy 213.53369 89.315936) (xy 213.53331 89.752151) (xy 213.69989 90.155306) (xy 214.008072 90.464026)
+ (xy 214.410936 90.63131) (xy 214.847151 90.63169) (xy 215.250306 90.46511) (xy 215.559026 90.156928) (xy 215.72631 89.754064)
+ (xy 215.72669 89.317849) (xy 215.72669 90.978348) (xy 215.682849 90.97831) (xy 215.279694 91.14489) (xy 214.970974 91.453072)
+ (xy 214.80369 91.855936) (xy 214.80331 92.292151) (xy 214.96989 92.695306) (xy 215.278072 93.004026) (xy 215.680936 93.17131)
+ (xy 216.117151 93.17169) (xy 216.520306 93.00511) (xy 216.829026 92.696928) (xy 216.99631 92.294064) (xy 216.99669 91.857849)
+ (xy 216.99669 97.328348) (xy 216.952849 97.32831) (xy 216.549694 97.49489) (xy 216.240974 97.803072) (xy 216.07369 98.205936)
+ (xy 216.07331 98.642151) (xy 216.23989 99.045306) (xy 216.548072 99.354026) (xy 216.950936 99.52131) (xy 217.387151 99.52169)
+ (xy 217.790306 99.35511) (xy 218.099026 99.046928) (xy 218.26631 98.644064) (xy 218.26669 98.207849) (xy 218.26669 99.868348)
+ (xy 218.222849 99.86831) (xy 217.819694 100.03489) (xy 217.510974 100.343072) (xy 217.34369 100.745936) (xy 217.34331 101.182151)
+ (xy 217.50989 101.585306) (xy 217.818072 101.894026) (xy 218.220936 102.06131) (xy 218.657151 102.06169) (xy 219.060306 101.89511)
+ (xy 219.369026 101.586928) (xy 219.53631 101.184064) (xy 219.53669 100.747849) (xy 219.53669 106.218348) (xy 219.492849 106.21831)
+ (xy 219.089694 106.38489) (xy 218.780974 106.693072) (xy 218.61369 107.095936) (xy 218.61331 107.532151) (xy 218.77989 107.935306)
+ (xy 219.088072 108.244026) (xy 219.490936 108.41131) (xy 219.927151 108.41169) (xy 220.330306 108.24511) (xy 220.639026 107.936928)
+ (xy 220.80631 107.534064) (xy 220.80669 107.097849) (xy 220.80669 108.758348) (xy 220.762849 108.75831) (xy 220.359694 108.92489)
+ (xy 220.050974 109.233072) (xy 219.88369 109.635936) (xy 219.88331 110.072151) (xy 220.04989 110.475306) (xy 220.358072 110.784026)
+ (xy 220.760936 110.95131) (xy 221.197151 110.95169) (xy 221.600306 110.78511) (xy 221.909026 110.476928) (xy 222.07631 110.074064)
+ (xy 222.07669 109.637849) (xy 222.07669 115.108348) (xy 222.032849 115.10831) (xy 221.629694 115.27489) (xy 221.320974 115.583072)
+ (xy 221.15369 115.985936) (xy 221.15331 116.422151) (xy 221.31989 116.825306) (xy 221.628072 117.134026) (xy 222.030936 117.30131)
+ (xy 222.467151 117.30169) (xy 222.870306 117.13511) (xy 223.179026 116.826928) (xy 223.34631 116.424064) (xy 223.34669 115.987849)
+ (xy 223.34669 117.648348) (xy 223.302849 117.64831) (xy 222.899694 117.81489) (xy 222.590974 118.123072) (xy 222.42369 118.525936)
+ (xy 222.42331 118.962151) (xy 222.58989 119.365306) (xy 222.898072 119.674026) (xy 223.300936 119.84131) (xy 223.737151 119.84169)
+ (xy 224.140306 119.67511) (xy 224.449026 119.366928) (xy 224.61631 118.964064) (xy 224.61669 118.527849) (xy 224.61669 123.998348)
+ (xy 224.572849 123.99831) (xy 224.169694 124.16489) (xy 223.860974 124.473072) (xy 223.69369 124.875936) (xy 223.69331 125.312151)
+ (xy 223.85989 125.715306) (xy 224.168072 126.024026) (xy 224.570936 126.19131) (xy 225.007151 126.19169) (xy 225.410306 126.02511)
+ (xy 225.719026 125.716928) (xy 225.88631 125.314064) (xy 225.88669 124.877849) (xy 225.88669 126.538348) (xy 225.842849 126.53831)
+ (xy 225.439694 126.70489) (xy 225.130974 127.013072) (xy 224.96369 127.415936) (xy 224.96331 127.852151) (xy 225.12989 128.255306)
+ (xy 225.438072 128.564026) (xy 225.840936 128.73131) (xy 226.277151 128.73169) (xy 226.680306 128.56511) (xy 226.989026 128.256928)
+ (xy 227.15631 127.854064) (xy 227.15669 127.417849) (xy 227.15669 133.7394) (xy 224.61669 133.7394) (xy 224.61669 127.417849)
+ (xy 224.45011 127.014694) (xy 224.141928 126.705974) (xy 223.739064 126.53869) (xy 223.34669 126.538348) (xy 223.34669 124.877849)
+ (xy 223.18011 124.474694) (xy 222.871928 124.165974) (xy 222.469064 123.99869) (xy 222.07669 123.998348) (xy 222.07669 118.527849)
+ (xy 221.91011 118.124694) (xy 221.601928 117.815974) (xy 221.199064 117.64869) (xy 220.80669 117.648348) (xy 220.80669 115.987849)
+ (xy 220.64011 115.584694) (xy 220.331928 115.275974) (xy 219.929064 115.10869) (xy 219.53669 115.108348) (xy 219.53669 109.637849)
+ (xy 219.37011 109.234694) (xy 219.061928 108.925974) (xy 218.659064 108.75869) (xy 218.26669 108.758348) (xy 218.26669 107.097849)
+ (xy 218.10011 106.694694) (xy 217.791928 106.385974) (xy 217.389064 106.21869) (xy 216.99669 106.218348) (xy 216.99669 100.747849)
+ (xy 216.83011 100.344694) (xy 216.521928 100.035974) (xy 216.119064 99.86869) (xy 215.72669 99.868348) (xy 215.72669 98.207849)
+ (xy 215.56011 97.804694) (xy 215.251928 97.495974) (xy 214.849064 97.32869) (xy 214.45669 97.328348) (xy 214.45669 91.857849)
+ (xy 214.29011 91.454694) (xy 213.981928 91.145974) (xy 213.579064 90.97869) (xy 213.18669 90.978348) (xy 213.18669 89.317849)
+ (xy 213.059668 89.010431) (xy 213.059668 85.660001) (xy 212.912382 85.30354) (xy 212.639895 85.030577) (xy 212.283692 84.882668)
+ (xy 211.91669 84.882348) (xy 211.91669 82.967849) (xy 211.75011 82.564694) (xy 211.441928 82.255974) (xy 211.039064 82.08869)
+ (xy 210.64669 82.088348) (xy 210.64669 80.427849) (xy 210.48011 80.024694) (xy 210.171928 79.715974) (xy 209.769064 79.54869)
+ (xy 209.37669 79.548348) (xy 209.37669 74.077849) (xy 209.21011 73.674694) (xy 208.901928 73.365974) (xy 208.499064 73.19869)
+ (xy 208.10669 73.198348) (xy 208.10669 71.537849) (xy 207.94011 71.134694) (xy 207.631928 70.825974) (xy 207.229064 70.65869)
+ (xy 206.83669 70.658348) (xy 206.83669 65.187849) (xy 206.67011 64.784694) (xy 206.361928 64.475974) (xy 205.959064 64.30869)
+ (xy 205.56669 64.308348) (xy 205.56669 62.647849) (xy 205.40011 62.244694) (xy 205.091928 61.935974) (xy 204.689064 61.76869)
+ (xy 204.252849 61.76831) (xy 203.849694 61.93489) (xy 203.540974 62.243072) (xy 203.37369 62.645936) (xy 203.37331 63.082151)
+ (xy 203.53989 63.485306) (xy 203.848072 63.794026) (xy 204.250936 63.96131) (xy 204.687151 63.96169) (xy 205.090306 63.79511)
+ (xy 205.399026 63.486928) (xy 205.56631 63.084064) (xy 205.56669 62.647849) (xy 205.56669 64.308348) (xy 205.522849 64.30831)
+ (xy 205.119694 64.47489) (xy 204.810974 64.783072) (xy 204.64369 65.185936) (xy 204.64331 65.622151) (xy 204.80989 66.025306)
+ (xy 205.118072 66.334026) (xy 205.520936 66.50131) (xy 205.957151 66.50169) (xy 206.360306 66.33511) (xy 206.669026 66.026928)
+ (xy 206.83631 65.624064) (xy 206.83669 65.187849) (xy 206.83669 70.658348) (xy 206.792849 70.65831) (xy 206.389694 70.82489)
+ (xy 206.080974 71.133072) (xy 205.91369 71.535936) (xy 205.91331 71.972151) (xy 206.07989 72.375306) (xy 206.388072 72.684026)
+ (xy 206.790936 72.85131) (xy 207.227151 72.85169) (xy 207.630306 72.68511) (xy 207.939026 72.376928) (xy 208.10631 71.974064)
+ (xy 208.10669 71.537849) (xy 208.10669 73.198348) (xy 208.062849 73.19831) (xy 207.659694 73.36489) (xy 207.350974 73.673072)
+ (xy 207.18369 74.075936) (xy 207.18331 74.512151) (xy 207.34989 74.915306) (xy 207.658072 75.224026) (xy 208.060936 75.39131)
+ (xy 208.497151 75.39169) (xy 208.900306 75.22511) (xy 209.209026 74.916928) (xy 209.37631 74.514064) (xy 209.37669 74.077849)
+ (xy 209.37669 79.548348) (xy 209.332849 79.54831) (xy 208.929694 79.71489) (xy 208.620974 80.023072) (xy 208.45369 80.425936)
+ (xy 208.45331 80.862151) (xy 208.61989 81.265306) (xy 208.928072 81.574026) (xy 209.330936 81.74131) (xy 209.767151 81.74169)
+ (xy 210.170306 81.57511) (xy 210.479026 81.266928) (xy 210.64631 80.864064) (xy 210.64669 80.427849) (xy 210.64669 82.088348)
+ (xy 210.602849 82.08831) (xy 210.199694 82.25489) (xy 209.890974 82.563072) (xy 209.72369 82.965936) (xy 209.72331 83.402151)
+ (xy 209.88989 83.805306) (xy 210.198072 84.114026) (xy 210.600936 84.28131) (xy 211.037151 84.28169) (xy 211.440306 84.11511)
+ (xy 211.749026 83.806928) (xy 211.91631 83.404064) (xy 211.91669 82.967849) (xy 211.91669 84.882348) (xy 211.898001 84.882332)
+ (xy 211.54154 85.029618) (xy 211.268577 85.302105) (xy 211.120668 85.658308) (xy 211.120332 86.043999) (xy 211.267618 86.40046)
+ (xy 211.540105 86.673423) (xy 211.896308 86.821332) (xy 212.281999 86.821668) (xy 212.63846 86.674382) (xy 212.911423 86.401895)
+ (xy 213.059332 86.045692) (xy 213.059668 85.660001) (xy 213.059668 89.010431) (xy 213.02011 88.914694) (xy 212.711928 88.605974)
+ (xy 212.309064 88.43869) (xy 211.872849 88.43831) (xy 211.469694 88.60489) (xy 211.160974 88.913072) (xy 210.99369 89.315936)
+ (xy 210.99331 89.752151) (xy 211.15989 90.155306) (xy 211.468072 90.464026) (xy 211.870936 90.63131) (xy 212.307151 90.63169)
+ (xy 212.710306 90.46511) (xy 213.019026 90.156928) (xy 213.18631 89.754064) (xy 213.18669 89.317849) (xy 213.18669 90.978348)
+ (xy 213.142849 90.97831) (xy 212.739694 91.14489) (xy 212.430974 91.453072) (xy 212.26369 91.855936) (xy 212.26331 92.292151)
+ (xy 212.42989 92.695306) (xy 212.738072 93.004026) (xy 213.140936 93.17131) (xy 213.577151 93.17169) (xy 213.980306 93.00511)
+ (xy 214.289026 92.696928) (xy 214.45631 92.294064) (xy 214.45669 91.857849) (xy 214.45669 97.328348) (xy 214.412849 97.32831)
+ (xy 214.009694 97.49489) (xy 213.700974 97.803072) (xy 213.53369 98.205936) (xy 213.53331 98.642151) (xy 213.69989 99.045306)
+ (xy 214.008072 99.354026) (xy 214.410936 99.52131) (xy 214.847151 99.52169) (xy 215.250306 99.35511) (xy 215.559026 99.046928)
+ (xy 215.72631 98.644064) (xy 215.72669 98.207849) (xy 215.72669 99.868348) (xy 215.682849 99.86831) (xy 215.279694 100.03489)
+ (xy 214.970974 100.343072) (xy 214.80369 100.745936) (xy 214.80331 101.182151) (xy 214.96989 101.585306) (xy 215.278072 101.894026)
+ (xy 215.680936 102.06131) (xy 216.117151 102.06169) (xy 216.520306 101.89511) (xy 216.829026 101.586928) (xy 216.99631 101.184064)
+ (xy 216.99669 100.747849) (xy 216.99669 106.218348) (xy 216.952849 106.21831) (xy 216.549694 106.38489) (xy 216.240974 106.693072)
+ (xy 216.07369 107.095936) (xy 216.07331 107.532151) (xy 216.23989 107.935306) (xy 216.548072 108.244026) (xy 216.950936 108.41131)
+ (xy 217.387151 108.41169) (xy 217.790306 108.24511) (xy 218.099026 107.936928) (xy 218.26631 107.534064) (xy 218.26669 107.097849)
+ (xy 218.26669 108.758348) (xy 218.222849 108.75831) (xy 217.819694 108.92489) (xy 217.510974 109.233072) (xy 217.34369 109.635936)
+ (xy 217.34331 110.072151) (xy 217.50989 110.475306) (xy 217.818072 110.784026) (xy 218.220936 110.95131) (xy 218.657151 110.95169)
+ (xy 219.060306 110.78511) (xy 219.369026 110.476928) (xy 219.53631 110.074064) (xy 219.53669 109.637849) (xy 219.53669 115.108348)
+ (xy 219.492849 115.10831) (xy 219.089694 115.27489) (xy 218.780974 115.583072) (xy 218.61369 115.985936) (xy 218.61331 116.422151)
+ (xy 218.77989 116.825306) (xy 219.088072 117.134026) (xy 219.490936 117.30131) (xy 219.927151 117.30169) (xy 220.330306 117.13511)
+ (xy 220.639026 116.826928) (xy 220.80631 116.424064) (xy 220.80669 115.987849) (xy 220.80669 117.648348) (xy 220.762849 117.64831)
+ (xy 220.359694 117.81489) (xy 220.050974 118.123072) (xy 219.88369 118.525936) (xy 219.88331 118.962151) (xy 220.04989 119.365306)
+ (xy 220.358072 119.674026) (xy 220.760936 119.84131) (xy 221.197151 119.84169) (xy 221.600306 119.67511) (xy 221.909026 119.366928)
+ (xy 222.07631 118.964064) (xy 222.07669 118.527849) (xy 222.07669 123.998348) (xy 222.032849 123.99831) (xy 221.629694 124.16489)
+ (xy 221.320974 124.473072) (xy 221.15369 124.875936) (xy 221.15331 125.312151) (xy 221.31989 125.715306) (xy 221.628072 126.024026)
+ (xy 222.030936 126.19131) (xy 222.467151 126.19169) (xy 222.870306 126.02511) (xy 223.179026 125.716928) (xy 223.34631 125.314064)
+ (xy 223.34669 124.877849) (xy 223.34669 126.538348) (xy 223.302849 126.53831) (xy 222.899694 126.70489) (xy 222.590974 127.013072)
+ (xy 222.42369 127.415936) (xy 222.42331 127.852151) (xy 222.58989 128.255306) (xy 222.898072 128.564026) (xy 223.300936 128.73131)
+ (xy 223.737151 128.73169) (xy 224.140306 128.56511) (xy 224.449026 128.256928) (xy 224.61631 127.854064) (xy 224.61669 127.417849)
+ (xy 224.61669 133.7394) (xy 222.07669 133.7394) (xy 222.07669 127.417849) (xy 221.91011 127.014694) (xy 221.601928 126.705974)
+ (xy 221.199064 126.53869) (xy 220.80669 126.538348) (xy 220.80669 124.877849) (xy 220.64011 124.474694) (xy 220.331928 124.165974)
+ (xy 219.929064 123.99869) (xy 219.53669 123.998348) (xy 219.53669 118.527849) (xy 219.37011 118.124694) (xy 219.061928 117.815974)
+ (xy 218.659064 117.64869) (xy 218.26669 117.648348) (xy 218.26669 115.987849) (xy 218.10011 115.584694) (xy 217.791928 115.275974)
+ (xy 217.389064 115.10869) (xy 216.99669 115.108348) (xy 216.99669 109.637849) (xy 216.83011 109.234694) (xy 216.521928 108.925974)
+ (xy 216.119064 108.75869) (xy 215.72669 108.758348) (xy 215.72669 107.097849) (xy 215.56011 106.694694) (xy 215.251928 106.385974)
+ (xy 214.849064 106.21869) (xy 214.45669 106.218348) (xy 214.45669 100.747849) (xy 214.29011 100.344694) (xy 213.981928 100.035974)
+ (xy 213.579064 99.86869) (xy 213.18669 99.868348) (xy 213.18669 98.207849) (xy 213.02011 97.804694) (xy 212.711928 97.495974)
+ (xy 212.309064 97.32869) (xy 211.91669 97.328348) (xy 211.91669 91.857849) (xy 211.75011 91.454694) (xy 211.441928 91.145974)
+ (xy 211.039064 90.97869) (xy 210.64669 90.978348) (xy 210.64669 89.317849) (xy 210.519668 89.010431) (xy 210.519668 85.660001)
+ (xy 210.372382 85.30354) (xy 210.099895 85.030577) (xy 209.743692 84.882668) (xy 209.37669 84.882348) (xy 209.37669 82.967849)
+ (xy 209.21011 82.564694) (xy 208.901928 82.255974) (xy 208.499064 82.08869) (xy 208.10669 82.088348) (xy 208.10669 80.427849)
+ (xy 207.94011 80.024694) (xy 207.631928 79.715974) (xy 207.229064 79.54869) (xy 206.83669 79.548348) (xy 206.83669 74.077849)
+ (xy 206.67011 73.674694) (xy 206.361928 73.365974) (xy 205.959064 73.19869) (xy 205.56669 73.198348) (xy 205.56669 71.537849)
+ (xy 205.40011 71.134694) (xy 205.091928 70.825974) (xy 204.689064 70.65869) (xy 204.30003 70.658351) (xy 204.30003 65.205461)
+ (xy 204.139934 64.799687) (xy 204.118934 64.768257) (xy 203.915178 64.725177) (xy 203.879823 64.760532) (xy 203.879823 64.689822)
+ (xy 203.836743 64.486066) (xy 203.436613 64.312345) (xy 203.02669 64.305413) (xy 203.02669 62.647849) (xy 202.86011 62.244694)
+ (xy 202.551928 61.935974) (xy 202.149064 61.76869) (xy 201.712849 61.76831) (xy 201.309694 61.93489) (xy 201.000974 62.243072)
+ (xy 200.83369 62.645936) (xy 200.83331 63.082151) (xy 200.99989 63.485306) (xy 201.308072 63.794026) (xy 201.710936 63.96131)
+ (xy 202.147151 63.96169) (xy 202.550306 63.79511) (xy 202.859026 63.486928) (xy 203.02631 63.084064) (xy 203.02669 62.647849)
+ (xy 203.02669 64.305413) (xy 203.000461 64.30497) (xy 202.594687 64.465066) (xy 202.563257 64.486066) (xy 202.520177 64.689822)
+ (xy 203.2 65.369645) (xy 203.879823 64.689822) (xy 203.879823 64.760532) (xy 203.235355 65.405) (xy 203.915178 66.084823)
+ (xy 204.118934 66.041743) (xy 204.292655 65.641613) (xy 204.30003 65.205461) (xy 204.30003 70.658351) (xy 204.252849 70.65831)
+ (xy 203.879823 70.81244) (xy 203.879823 66.120178) (xy 203.2 65.440355) (xy 203.164645 65.47571) (xy 203.164645 65.405)
+ (xy 202.484822 64.725177) (xy 202.281066 64.768257) (xy 202.107345 65.168387) (xy 202.09997 65.604539) (xy 202.260066 66.010313)
+ (xy 202.281066 66.041743) (xy 202.484822 66.084823) (xy 203.164645 65.405) (xy 203.164645 65.47571) (xy 202.520177 66.120178)
+ (xy 202.563257 66.323934) (xy 202.963387 66.497655) (xy 203.399539 66.50503) (xy 203.805313 66.344934) (xy 203.836743 66.323934)
+ (xy 203.879823 66.120178) (xy 203.879823 70.81244) (xy 203.849694 70.82489) (xy 203.540974 71.133072) (xy 203.37369 71.535936)
+ (xy 203.37331 71.972151) (xy 203.53989 72.375306) (xy 203.848072 72.684026) (xy 204.250936 72.85131) (xy 204.687151 72.85169)
+ (xy 205.090306 72.68511) (xy 205.399026 72.376928) (xy 205.56631 71.974064) (xy 205.56669 71.537849) (xy 205.56669 73.198348)
+ (xy 205.522849 73.19831) (xy 205.119694 73.36489) (xy 204.810974 73.673072) (xy 204.64369 74.075936) (xy 204.64331 74.512151)
+ (xy 204.80989 74.915306) (xy 205.118072 75.224026) (xy 205.520936 75.39131) (xy 205.957151 75.39169) (xy 206.360306 75.22511)
+ (xy 206.669026 74.916928) (xy 206.83631 74.514064) (xy 206.83669 74.077849) (xy 206.83669 79.548348) (xy 206.792849 79.54831)
+ (xy 206.389694 79.71489) (xy 206.080974 80.023072) (xy 205.91369 80.425936) (xy 205.91331 80.862151) (xy 206.07989 81.265306)
+ (xy 206.388072 81.574026) (xy 206.790936 81.74131) (xy 207.227151 81.74169) (xy 207.630306 81.57511) (xy 207.939026 81.266928)
+ (xy 208.10631 80.864064) (xy 208.10669 80.427849) (xy 208.10669 82.088348) (xy 208.062849 82.08831) (xy 207.659694 82.25489)
+ (xy 207.350974 82.563072) (xy 207.18369 82.965936) (xy 207.18331 83.402151) (xy 207.34989 83.805306) (xy 207.658072 84.114026)
+ (xy 208.060936 84.28131) (xy 208.497151 84.28169) (xy 208.900306 84.11511) (xy 209.209026 83.806928) (xy 209.37631 83.404064)
+ (xy 209.37669 82.967849) (xy 209.37669 84.882348) (xy 209.358001 84.882332) (xy 209.00154 85.029618) (xy 208.728577 85.302105)
+ (xy 208.580668 85.658308) (xy 208.580332 86.043999) (xy 208.727618 86.40046) (xy 209.000105 86.673423) (xy 209.356308 86.821332)
+ (xy 209.741999 86.821668) (xy 210.09846 86.674382) (xy 210.371423 86.401895) (xy 210.519332 86.045692) (xy 210.519668 85.660001)
+ (xy 210.519668 89.010431) (xy 210.48011 88.914694) (xy 210.171928 88.605974) (xy 209.769064 88.43869) (xy 209.332849 88.43831)
+ (xy 208.929694 88.60489) (xy 208.741668 88.792588) (xy 208.741668 86.549001) (xy 208.594382 86.19254) (xy 208.321895 85.919577)
+ (xy 207.979565 85.777428) (xy 207.979668 85.660001) (xy 207.832382 85.30354) (xy 207.559895 85.030577) (xy 207.203692 84.882668)
+ (xy 206.83669 84.882348) (xy 206.83669 82.967849) (xy 206.67011 82.564694) (xy 206.361928 82.255974) (xy 205.959064 82.08869)
+ (xy 205.56669 82.088348) (xy 205.56669 80.427849) (xy 205.40011 80.024694) (xy 205.091928 79.715974) (xy 204.689064 79.54869)
+ (xy 204.30003 79.548351) (xy 204.30003 74.095461) (xy 204.139934 73.689687) (xy 204.118934 73.658257) (xy 203.915178 73.615177)
+ (xy 203.879823 73.650532) (xy 203.879823 73.579822) (xy 203.836743 73.376066) (xy 203.436613 73.202345) (xy 203.02669 73.195413)
+ (xy 203.02669 71.537849) (xy 202.86011 71.134694) (xy 202.551928 70.825974) (xy 202.149064 70.65869) (xy 201.75669 70.658348)
+ (xy 201.75669 65.187849) (xy 201.59011 64.784694) (xy 201.281928 64.475974) (xy 200.879064 64.30869) (xy 200.48669 64.308348)
+ (xy 200.48669 62.647849) (xy 200.32011 62.244694) (xy 200.011928 61.935974) (xy 199.609064 61.76869) (xy 199.172849 61.76831)
+ (xy 198.769694 61.93489) (xy 198.460974 62.243072) (xy 198.29369 62.645936) (xy 198.29331 63.082151) (xy 198.45989 63.485306)
+ (xy 198.768072 63.794026) (xy 199.170936 63.96131) (xy 199.607151 63.96169) (xy 200.010306 63.79511) (xy 200.319026 63.486928)
+ (xy 200.48631 63.084064) (xy 200.48669 62.647849) (xy 200.48669 64.308348) (xy 200.442849 64.30831) (xy 200.039694 64.47489)
+ (xy 199.730974 64.783072) (xy 199.56369 65.185936) (xy 199.56331 65.622151) (xy 199.72989 66.025306) (xy 200.038072 66.334026)
+ (xy 200.440936 66.50131) (xy 200.877151 66.50169) (xy 201.280306 66.33511) (xy 201.589026 66.026928) (xy 201.75631 65.624064)
+ (xy 201.75669 65.187849) (xy 201.75669 70.658348) (xy 201.712849 70.65831) (xy 201.309694 70.82489) (xy 201.000974 71.133072)
+ (xy 200.83369 71.535936) (xy 200.83331 71.972151) (xy 200.99989 72.375306) (xy 201.308072 72.684026) (xy 201.710936 72.85131)
+ (xy 202.147151 72.85169) (xy 202.550306 72.68511) (xy 202.859026 72.376928) (xy 203.02631 71.974064) (xy 203.02669 71.537849)
+ (xy 203.02669 73.195413) (xy 203.000461 73.19497) (xy 202.594687 73.355066) (xy 202.563257 73.376066) (xy 202.520177 73.579822)
+ (xy 203.2 74.259645) (xy 203.879823 73.579822) (xy 203.879823 73.650532) (xy 203.235355 74.295) (xy 203.915178 74.974823)
+ (xy 204.118934 74.931743) (xy 204.292655 74.531613) (xy 204.30003 74.095461) (xy 204.30003 79.548351) (xy 204.252849 79.54831)
+ (xy 203.879823 79.70244) (xy 203.879823 75.010178) (xy 203.2 74.330355) (xy 203.164645 74.36571) (xy 203.164645 74.295)
+ (xy 202.484822 73.615177) (xy 202.281066 73.658257) (xy 202.107345 74.058387) (xy 202.09997 74.494539) (xy 202.260066 74.900313)
+ (xy 202.281066 74.931743) (xy 202.484822 74.974823) (xy 203.164645 74.295) (xy 203.164645 74.36571) (xy 202.520177 75.010178)
+ (xy 202.563257 75.213934) (xy 202.963387 75.387655) (xy 203.399539 75.39503) (xy 203.805313 75.234934) (xy 203.836743 75.213934)
+ (xy 203.879823 75.010178) (xy 203.879823 79.70244) (xy 203.849694 79.71489) (xy 203.540974 80.023072) (xy 203.37369 80.425936)
+ (xy 203.37331 80.862151) (xy 203.53989 81.265306) (xy 203.848072 81.574026) (xy 204.250936 81.74131) (xy 204.687151 81.74169)
+ (xy 205.090306 81.57511) (xy 205.399026 81.266928) (xy 205.56631 80.864064) (xy 205.56669 80.427849) (xy 205.56669 82.088348)
+ (xy 205.522849 82.08831) (xy 205.119694 82.25489) (xy 204.810974 82.563072) (xy 204.64369 82.965936) (xy 204.64331 83.402151)
+ (xy 204.80989 83.805306) (xy 205.118072 84.114026) (xy 205.520936 84.28131) (xy 205.957151 84.28169) (xy 206.360306 84.11511)
+ (xy 206.669026 83.806928) (xy 206.83631 83.404064) (xy 206.83669 82.967849) (xy 206.83669 84.882348) (xy 206.818001 84.882332)
+ (xy 206.46154 85.029618) (xy 206.375088 85.115919) (xy 206.289895 85.030577) (xy 205.933692 84.882668) (xy 205.548001 84.882332)
+ (xy 205.19154 85.029618) (xy 204.918577 85.302105) (xy 204.770668 85.658308) (xy 204.770332 86.043999) (xy 204.917618 86.40046)
+ (xy 205.190105 86.673423) (xy 205.546308 86.821332) (xy 205.931999 86.821668) (xy 206.28846 86.674382) (xy 206.374911 86.58808)
+ (xy 206.460105 86.673423) (xy 206.802434 86.815571) (xy 206.802332 86.932999) (xy 206.949618 87.28946) (xy 207.222105 87.562423)
+ (xy 207.578308 87.710332) (xy 207.963999 87.710668) (xy 208.32046 87.563382) (xy 208.593423 87.290895) (xy 208.741332 86.934692)
+ (xy 208.741668 86.549001) (xy 208.741668 88.792588) (xy 208.620974 88.913072) (xy 208.45369 89.315936) (xy 208.45331 89.752151)
+ (xy 208.61989 90.155306) (xy 208.928072 90.464026) (xy 209.330936 90.63131) (xy 209.767151 90.63169) (xy 210.170306 90.46511)
+ (xy 210.479026 90.156928) (xy 210.64631 89.754064) (xy 210.64669 89.317849) (xy 210.64669 90.978348) (xy 210.602849 90.97831)
+ (xy 210.199694 91.14489) (xy 209.890974 91.453072) (xy 209.72369 91.855936) (xy 209.72331 92.292151) (xy 209.88989 92.695306)
+ (xy 210.198072 93.004026) (xy 210.600936 93.17131) (xy 211.037151 93.17169) (xy 211.440306 93.00511) (xy 211.749026 92.696928)
+ (xy 211.91631 92.294064) (xy 211.91669 91.857849) (xy 211.91669 97.328348) (xy 211.872849 97.32831) (xy 211.469694 97.49489)
+ (xy 211.160974 97.803072) (xy 210.99369 98.205936) (xy 210.99331 98.642151) (xy 211.15989 99.045306) (xy 211.468072 99.354026)
+ (xy 211.870936 99.52131) (xy 212.307151 99.52169) (xy 212.710306 99.35511) (xy 213.019026 99.046928) (xy 213.18631 98.644064)
+ (xy 213.18669 98.207849) (xy 213.18669 99.868348) (xy 213.142849 99.86831) (xy 212.739694 100.03489) (xy 212.430974 100.343072)
+ (xy 212.26369 100.745936) (xy 212.26331 101.182151) (xy 212.42989 101.585306) (xy 212.738072 101.894026) (xy 213.140936 102.06131)
+ (xy 213.577151 102.06169) (xy 213.980306 101.89511) (xy 214.289026 101.586928) (xy 214.45631 101.184064) (xy 214.45669 100.747849)
+ (xy 214.45669 106.218348) (xy 214.412849 106.21831) (xy 214.009694 106.38489) (xy 213.700974 106.693072) (xy 213.53369 107.095936)
+ (xy 213.53331 107.532151) (xy 213.69989 107.935306) (xy 214.008072 108.244026) (xy 214.410936 108.41131) (xy 214.847151 108.41169)
+ (xy 215.250306 108.24511) (xy 215.559026 107.936928) (xy 215.72631 107.534064) (xy 215.72669 107.097849) (xy 215.72669 108.758348)
+ (xy 215.682849 108.75831) (xy 215.279694 108.92489) (xy 214.970974 109.233072) (xy 214.80369 109.635936) (xy 214.80331 110.072151)
+ (xy 214.96989 110.475306) (xy 215.278072 110.784026) (xy 215.680936 110.95131) (xy 216.117151 110.95169) (xy 216.520306 110.78511)
+ (xy 216.829026 110.476928) (xy 216.99631 110.074064) (xy 216.99669 109.637849) (xy 216.99669 115.108348) (xy 216.952849 115.10831)
+ (xy 216.549694 115.27489) (xy 216.240974 115.583072) (xy 216.07369 115.985936) (xy 216.07331 116.422151) (xy 216.23989 116.825306)
+ (xy 216.548072 117.134026) (xy 216.950936 117.30131) (xy 217.387151 117.30169) (xy 217.790306 117.13511) (xy 218.099026 116.826928)
+ (xy 218.26631 116.424064) (xy 218.26669 115.987849) (xy 218.26669 117.648348) (xy 218.222849 117.64831) (xy 217.819694 117.81489)
+ (xy 217.510974 118.123072) (xy 217.34369 118.525936) (xy 217.34331 118.962151) (xy 217.50989 119.365306) (xy 217.818072 119.674026)
+ (xy 218.220936 119.84131) (xy 218.657151 119.84169) (xy 219.060306 119.67511) (xy 219.369026 119.366928) (xy 219.53631 118.964064)
+ (xy 219.53669 118.527849) (xy 219.53669 123.998348) (xy 219.492849 123.99831) (xy 219.089694 124.16489) (xy 218.780974 124.473072)
+ (xy 218.61369 124.875936) (xy 218.61331 125.312151) (xy 218.77989 125.715306) (xy 219.088072 126.024026) (xy 219.490936 126.19131)
+ (xy 219.927151 126.19169) (xy 220.330306 126.02511) (xy 220.639026 125.716928) (xy 220.80631 125.314064) (xy 220.80669 124.877849)
+ (xy 220.80669 126.538348) (xy 220.762849 126.53831) (xy 220.359694 126.70489) (xy 220.050974 127.013072) (xy 219.88369 127.415936)
+ (xy 219.88331 127.852151) (xy 220.04989 128.255306) (xy 220.358072 128.564026) (xy 220.760936 128.73131) (xy 221.197151 128.73169)
+ (xy 221.600306 128.56511) (xy 221.909026 128.256928) (xy 222.07631 127.854064) (xy 222.07669 127.417849) (xy 222.07669 133.7394)
+ (xy 219.53669 133.7394) (xy 219.53669 127.417849) (xy 219.37011 127.014694) (xy 219.061928 126.705974) (xy 218.659064 126.53869)
+ (xy 218.26669 126.538348) (xy 218.26669 124.877849) (xy 218.10011 124.474694) (xy 217.791928 124.165974) (xy 217.389064 123.99869)
+ (xy 216.99669 123.998348) (xy 216.99669 118.527849) (xy 216.83011 118.124694) (xy 216.521928 117.815974) (xy 216.119064 117.64869)
+ (xy 215.72669 117.648348) (xy 215.72669 115.987849) (xy 215.56011 115.584694) (xy 215.251928 115.275974) (xy 214.849064 115.10869)
+ (xy 214.45669 115.108348) (xy 214.45669 109.637849) (xy 214.29011 109.234694) (xy 213.981928 108.925974) (xy 213.579064 108.75869)
+ (xy 213.18669 108.758348) (xy 213.18669 107.097849) (xy 213.02011 106.694694) (xy 212.711928 106.385974) (xy 212.309064 106.21869)
+ (xy 211.91669 106.218348) (xy 211.91669 100.747849) (xy 211.75011 100.344694) (xy 211.441928 100.035974) (xy 211.039064 99.86869)
+ (xy 210.64669 99.868348) (xy 210.64669 98.207849) (xy 210.48011 97.804694) (xy 210.171928 97.495974) (xy 209.769064 97.32869)
+ (xy 209.37669 97.328348) (xy 209.37669 91.857849) (xy 209.21011 91.454694) (xy 208.901928 91.145974) (xy 208.499064 90.97869)
+ (xy 208.10669 90.978348) (xy 208.10669 89.317849) (xy 207.94011 88.914694) (xy 207.631928 88.605974) (xy 207.229064 88.43869)
+ (xy 206.792849 88.43831) (xy 206.389694 88.60489) (xy 206.080974 88.913072) (xy 205.91369 89.315936) (xy 205.91331 89.752151)
+ (xy 206.07989 90.155306) (xy 206.388072 90.464026) (xy 206.790936 90.63131) (xy 207.227151 90.63169) (xy 207.630306 90.46511)
+ (xy 207.939026 90.156928) (xy 208.10631 89.754064) (xy 208.10669 89.317849) (xy 208.10669 90.978348) (xy 208.062849 90.97831)
+ (xy 207.659694 91.14489) (xy 207.350974 91.453072) (xy 207.18369 91.855936) (xy 207.18331 92.292151) (xy 207.34989 92.695306)
+ (xy 207.658072 93.004026) (xy 208.060936 93.17131) (xy 208.497151 93.17169) (xy 208.900306 93.00511) (xy 209.209026 92.696928)
+ (xy 209.37631 92.294064) (xy 209.37669 91.857849) (xy 209.37669 97.328348) (xy 209.332849 97.32831) (xy 208.929694 97.49489)
+ (xy 208.620974 97.803072) (xy 208.45369 98.205936) (xy 208.45331 98.642151) (xy 208.61989 99.045306) (xy 208.928072 99.354026)
+ (xy 209.330936 99.52131) (xy 209.767151 99.52169) (xy 210.170306 99.35511) (xy 210.479026 99.046928) (xy 210.64631 98.644064)
+ (xy 210.64669 98.207849) (xy 210.64669 99.868348) (xy 210.602849 99.86831) (xy 210.199694 100.03489) (xy 209.890974 100.343072)
+ (xy 209.72369 100.745936) (xy 209.72331 101.182151) (xy 209.88989 101.585306) (xy 210.198072 101.894026) (xy 210.600936 102.06131)
+ (xy 211.037151 102.06169) (xy 211.440306 101.89511) (xy 211.749026 101.586928) (xy 211.91631 101.184064) (xy 211.91669 100.747849)
+ (xy 211.91669 106.218348) (xy 211.872849 106.21831) (xy 211.469694 106.38489) (xy 211.160974 106.693072) (xy 210.99369 107.095936)
+ (xy 210.99331 107.532151) (xy 211.15989 107.935306) (xy 211.468072 108.244026) (xy 211.870936 108.41131) (xy 212.307151 108.41169)
+ (xy 212.710306 108.24511) (xy 213.019026 107.936928) (xy 213.18631 107.534064) (xy 213.18669 107.097849) (xy 213.18669 108.758348)
+ (xy 213.142849 108.75831) (xy 212.739694 108.92489) (xy 212.430974 109.233072) (xy 212.26369 109.635936) (xy 212.26331 110.072151)
+ (xy 212.42989 110.475306) (xy 212.738072 110.784026) (xy 213.140936 110.95131) (xy 213.577151 110.95169) (xy 213.980306 110.78511)
+ (xy 214.289026 110.476928) (xy 214.45631 110.074064) (xy 214.45669 109.637849) (xy 214.45669 115.108348) (xy 214.412849 115.10831)
+ (xy 214.009694 115.27489) (xy 213.700974 115.583072) (xy 213.53369 115.985936) (xy 213.53331 116.422151) (xy 213.69989 116.825306)
+ (xy 214.008072 117.134026) (xy 214.410936 117.30131) (xy 214.847151 117.30169) (xy 215.250306 117.13511) (xy 215.559026 116.826928)
+ (xy 215.72631 116.424064) (xy 215.72669 115.987849) (xy 215.72669 117.648348) (xy 215.682849 117.64831) (xy 215.279694 117.81489)
+ (xy 214.970974 118.123072) (xy 214.80369 118.525936) (xy 214.80331 118.962151) (xy 214.96989 119.365306) (xy 215.278072 119.674026)
+ (xy 215.680936 119.84131) (xy 216.117151 119.84169) (xy 216.520306 119.67511) (xy 216.829026 119.366928) (xy 216.99631 118.964064)
+ (xy 216.99669 118.527849) (xy 216.99669 123.998348) (xy 216.952849 123.99831) (xy 216.549694 124.16489) (xy 216.240974 124.473072)
+ (xy 216.07369 124.875936) (xy 216.07331 125.312151) (xy 216.23989 125.715306) (xy 216.548072 126.024026) (xy 216.950936 126.19131)
+ (xy 217.387151 126.19169) (xy 217.790306 126.02511) (xy 218.099026 125.716928) (xy 218.26631 125.314064) (xy 218.26669 124.877849)
+ (xy 218.26669 126.538348) (xy 218.222849 126.53831) (xy 217.819694 126.70489) (xy 217.510974 127.013072) (xy 217.34369 127.415936)
+ (xy 217.34331 127.852151) (xy 217.50989 128.255306) (xy 217.818072 128.564026) (xy 218.220936 128.73131) (xy 218.657151 128.73169)
+ (xy 219.060306 128.56511) (xy 219.369026 128.256928) (xy 219.53631 127.854064) (xy 219.53669 127.417849) (xy 219.53669 133.7394)
+ (xy 216.99669 133.7394) (xy 216.99669 127.417849) (xy 216.83011 127.014694) (xy 216.521928 126.705974) (xy 216.119064 126.53869)
+ (xy 215.72669 126.538348) (xy 215.72669 124.877849) (xy 215.56011 124.474694) (xy 215.251928 124.165974) (xy 214.849064 123.99869)
+ (xy 214.45669 123.998348) (xy 214.45669 118.527849) (xy 214.29011 118.124694) (xy 213.981928 117.815974) (xy 213.579064 117.64869)
+ (xy 213.18669 117.648348) (xy 213.18669 115.987849) (xy 213.02011 115.584694) (xy 212.711928 115.275974) (xy 212.309064 115.10869)
+ (xy 211.91669 115.108348) (xy 211.91669 109.637849) (xy 211.75011 109.234694) (xy 211.441928 108.925974) (xy 211.039064 108.75869)
+ (xy 210.64669 108.758348) (xy 210.64669 107.097849) (xy 210.48011 106.694694) (xy 210.171928 106.385974) (xy 209.769064 106.21869)
+ (xy 209.37669 106.218348) (xy 209.37669 100.747849) (xy 209.21011 100.344694) (xy 208.901928 100.035974) (xy 208.499064 99.86869)
+ (xy 208.10669 99.868348) (xy 208.10669 98.207849) (xy 207.94011 97.804694) (xy 207.631928 97.495974) (xy 207.229064 97.32869)
+ (xy 206.83669 97.328348) (xy 206.83669 91.857849) (xy 206.67011 91.454694) (xy 206.361928 91.145974) (xy 205.959064 90.97869)
+ (xy 205.56669 90.978348) (xy 205.56669 89.317849) (xy 205.40011 88.914694) (xy 205.105462 88.619531) (xy 205.291423 88.433895)
+ (xy 205.439332 88.077692) (xy 205.439668 87.692001) (xy 205.292382 87.33554) (xy 205.019895 87.062577) (xy 204.663692 86.914668)
+ (xy 204.30003 86.914351) (xy 204.30003 82.985461) (xy 204.139934 82.579687) (xy 204.118934 82.548257) (xy 203.915178 82.505177)
+ (xy 203.879823 82.540532) (xy 203.879823 82.469822) (xy 203.836743 82.266066) (xy 203.436613 82.092345) (xy 203.02669 82.085413)
+ (xy 203.02669 80.427849) (xy 202.86011 80.024694) (xy 202.551928 79.715974) (xy 202.149064 79.54869) (xy 201.75669 79.548348)
+ (xy 201.75669 74.077849) (xy 201.59011 73.674694) (xy 201.281928 73.365974) (xy 200.879064 73.19869) (xy 200.48669 73.198348)
+ (xy 200.48669 71.537849) (xy 200.32011 71.134694) (xy 200.011928 70.825974) (xy 199.609064 70.65869) (xy 199.21669 70.658348)
+ (xy 199.21669 65.187849) (xy 199.05011 64.784694) (xy 198.741928 64.475974) (xy 198.339064 64.30869) (xy 197.94669 64.308348)
+ (xy 197.94669 62.647849) (xy 197.78011 62.244694) (xy 197.471928 61.935974) (xy 197.069064 61.76869) (xy 196.632849 61.76831)
+ (xy 196.229694 61.93489) (xy 195.920974 62.243072) (xy 195.75369 62.645936) (xy 195.75331 63.082151) (xy 195.91989 63.485306)
+ (xy 196.228072 63.794026) (xy 196.630936 63.96131) (xy 197.067151 63.96169) (xy 197.470306 63.79511) (xy 197.779026 63.486928)
+ (xy 197.94631 63.084064) (xy 197.94669 62.647849) (xy 197.94669 64.308348) (xy 197.902849 64.30831) (xy 197.499694 64.47489)
+ (xy 197.190974 64.783072) (xy 197.02369 65.185936) (xy 197.02331 65.622151) (xy 197.18989 66.025306) (xy 197.498072 66.334026)
+ (xy 197.900936 66.50131) (xy 198.337151 66.50169) (xy 198.740306 66.33511) (xy 199.049026 66.026928) (xy 199.21631 65.624064)
+ (xy 199.21669 65.187849) (xy 199.21669 70.658348) (xy 199.172849 70.65831) (xy 198.769694 70.82489) (xy 198.460974 71.133072)
+ (xy 198.29369 71.535936) (xy 198.29331 71.972151) (xy 198.45989 72.375306) (xy 198.768072 72.684026) (xy 199.170936 72.85131)
+ (xy 199.607151 72.85169) (xy 200.010306 72.68511) (xy 200.319026 72.376928) (xy 200.48631 71.974064) (xy 200.48669 71.537849)
+ (xy 200.48669 73.198348) (xy 200.442849 73.19831) (xy 200.039694 73.36489) (xy 199.730974 73.673072) (xy 199.56369 74.075936)
+ (xy 199.56331 74.512151) (xy 199.72989 74.915306) (xy 200.038072 75.224026) (xy 200.440936 75.39131) (xy 200.877151 75.39169)
+ (xy 201.280306 75.22511) (xy 201.589026 74.916928) (xy 201.75631 74.514064) (xy 201.75669 74.077849) (xy 201.75669 79.548348)
+ (xy 201.712849 79.54831) (xy 201.309694 79.71489) (xy 201.000974 80.023072) (xy 200.83369 80.425936) (xy 200.83331 80.862151)
+ (xy 200.99989 81.265306) (xy 201.308072 81.574026) (xy 201.710936 81.74131) (xy 202.147151 81.74169) (xy 202.550306 81.57511)
+ (xy 202.859026 81.266928) (xy 203.02631 80.864064) (xy 203.02669 80.427849) (xy 203.02669 82.085413) (xy 203.000461 82.08497)
+ (xy 202.594687 82.245066) (xy 202.563257 82.266066) (xy 202.520177 82.469822) (xy 203.2 83.149645) (xy 203.879823 82.469822)
+ (xy 203.879823 82.540532) (xy 203.235355 83.185) (xy 203.915178 83.864823) (xy 204.118934 83.821743) (xy 204.292655 83.421613)
+ (xy 204.30003 82.985461) (xy 204.30003 86.914351) (xy 204.278001 86.914332) (xy 203.92154 87.061618) (xy 203.879823 87.103262)
+ (xy 203.879823 83.900178) (xy 203.2 83.220355) (xy 203.164645 83.25571) (xy 203.164645 83.185) (xy 202.484822 82.505177)
+ (xy 202.281066 82.548257) (xy 202.107345 82.948387) (xy 202.09997 83.384539) (xy 202.260066 83.790313) (xy 202.281066 83.821743)
+ (xy 202.484822 83.864823) (xy 203.164645 83.185) (xy 203.164645 83.25571) (xy 202.520177 83.900178) (xy 202.563257 84.103934)
+ (xy 202.963387 84.277655) (xy 203.399539 84.28503) (xy 203.805313 84.124934) (xy 203.836743 84.103934) (xy 203.879823 83.900178)
+ (xy 203.879823 87.103262) (xy 203.648577 87.334105) (xy 203.500668 87.690308) (xy 203.500332 88.075999) (xy 203.647618 88.43246)
+ (xy 203.834694 88.619863) (xy 203.540974 88.913072) (xy 203.37369 89.315936) (xy 203.37331 89.752151) (xy 203.53989 90.155306)
+ (xy 203.848072 90.464026) (xy 204.250936 90.63131) (xy 204.687151 90.63169) (xy 205.090306 90.46511) (xy 205.399026 90.156928)
+ (xy 205.56631 89.754064) (xy 205.56669 89.317849) (xy 205.56669 90.978348) (xy 205.522849 90.97831) (xy 205.119694 91.14489)
+ (xy 204.810974 91.453072) (xy 204.64369 91.855936) (xy 204.64331 92.292151) (xy 204.80989 92.695306) (xy 205.118072 93.004026)
+ (xy 205.520936 93.17131) (xy 205.957151 93.17169) (xy 206.360306 93.00511) (xy 206.669026 92.696928) (xy 206.83631 92.294064)
+ (xy 206.83669 91.857849) (xy 206.83669 97.328348) (xy 206.792849 97.32831) (xy 206.389694 97.49489) (xy 206.080974 97.803072)
+ (xy 205.91369 98.205936) (xy 205.91331 98.642151) (xy 206.07989 99.045306) (xy 206.388072 99.354026) (xy 206.790936 99.52131)
+ (xy 207.227151 99.52169) (xy 207.630306 99.35511) (xy 207.939026 99.046928) (xy 208.10631 98.644064) (xy 208.10669 98.207849)
+ (xy 208.10669 99.868348) (xy 208.062849 99.86831) (xy 207.659694 100.03489) (xy 207.350974 100.343072) (xy 207.18369 100.745936)
+ (xy 207.18331 101.182151) (xy 207.34989 101.585306) (xy 207.658072 101.894026) (xy 208.060936 102.06131) (xy 208.497151 102.06169)
+ (xy 208.900306 101.89511) (xy 209.209026 101.586928) (xy 209.37631 101.184064) (xy 209.37669 100.747849) (xy 209.37669 106.218348)
+ (xy 209.332849 106.21831) (xy 208.929694 106.38489) (xy 208.620974 106.693072) (xy 208.45369 107.095936) (xy 208.45331 107.532151)
+ (xy 208.61989 107.935306) (xy 208.928072 108.244026) (xy 209.330936 108.41131) (xy 209.767151 108.41169) (xy 210.170306 108.24511)
+ (xy 210.479026 107.936928) (xy 210.64631 107.534064) (xy 210.64669 107.097849) (xy 210.64669 108.758348) (xy 210.602849 108.75831)
+ (xy 210.199694 108.92489) (xy 209.890974 109.233072) (xy 209.72369 109.635936) (xy 209.72331 110.072151) (xy 209.88989 110.475306)
+ (xy 210.198072 110.784026) (xy 210.600936 110.95131) (xy 211.037151 110.95169) (xy 211.440306 110.78511) (xy 211.749026 110.476928)
+ (xy 211.91631 110.074064) (xy 211.91669 109.637849) (xy 211.91669 115.108348) (xy 211.872849 115.10831) (xy 211.469694 115.27489)
+ (xy 211.160974 115.583072) (xy 210.99369 115.985936) (xy 210.99331 116.422151) (xy 211.15989 116.825306) (xy 211.468072 117.134026)
+ (xy 211.870936 117.30131) (xy 212.307151 117.30169) (xy 212.710306 117.13511) (xy 213.019026 116.826928) (xy 213.18631 116.424064)
+ (xy 213.18669 115.987849) (xy 213.18669 117.648348) (xy 213.142849 117.64831) (xy 212.739694 117.81489) (xy 212.430974 118.123072)
+ (xy 212.26369 118.525936) (xy 212.26331 118.962151) (xy 212.42989 119.365306) (xy 212.738072 119.674026) (xy 213.140936 119.84131)
+ (xy 213.577151 119.84169) (xy 213.980306 119.67511) (xy 214.289026 119.366928) (xy 214.45631 118.964064) (xy 214.45669 118.527849)
+ (xy 214.45669 123.998348) (xy 214.412849 123.99831) (xy 214.009694 124.16489) (xy 213.700974 124.473072) (xy 213.53369 124.875936)
+ (xy 213.53331 125.312151) (xy 213.69989 125.715306) (xy 214.008072 126.024026) (xy 214.410936 126.19131) (xy 214.847151 126.19169)
+ (xy 215.250306 126.02511) (xy 215.559026 125.716928) (xy 215.72631 125.314064) (xy 215.72669 124.877849) (xy 215.72669 126.538348)
+ (xy 215.682849 126.53831) (xy 215.279694 126.70489) (xy 214.970974 127.013072) (xy 214.80369 127.415936) (xy 214.80331 127.852151)
+ (xy 214.96989 128.255306) (xy 215.278072 128.564026) (xy 215.680936 128.73131) (xy 216.117151 128.73169) (xy 216.520306 128.56511)
+ (xy 216.829026 128.256928) (xy 216.99631 127.854064) (xy 216.99669 127.417849) (xy 216.99669 133.7394) (xy 216.027 133.7394)
+ (xy 214.45669 133.7394) (xy 214.45669 127.417849) (xy 214.29011 127.014694) (xy 213.981928 126.705974) (xy 213.579064 126.53869)
+ (xy 213.18669 126.538348) (xy 213.18669 124.877849) (xy 213.02011 124.474694) (xy 212.711928 124.165974) (xy 212.309064 123.99869)
+ (xy 211.91669 123.998348) (xy 211.91669 118.527849) (xy 211.75011 118.124694) (xy 211.441928 117.815974) (xy 211.039064 117.64869)
+ (xy 210.64669 117.648348) (xy 210.64669 115.987849) (xy 210.48011 115.584694) (xy 210.171928 115.275974) (xy 209.769064 115.10869)
+ (xy 209.37669 115.108348) (xy 209.37669 109.637849) (xy 209.21011 109.234694) (xy 208.901928 108.925974) (xy 208.499064 108.75869)
+ (xy 208.10669 108.758348) (xy 208.10669 107.097849) (xy 207.94011 106.694694) (xy 207.631928 106.385974) (xy 207.229064 106.21869)
+ (xy 206.83669 106.218348) (xy 206.83669 100.747849) (xy 206.67011 100.344694) (xy 206.361928 100.035974) (xy 205.959064 99.86869)
+ (xy 205.56669 99.868348) (xy 205.56669 98.207849) (xy 205.40011 97.804694) (xy 205.091928 97.495974) (xy 204.689064 97.32869)
+ (xy 204.30003 97.328351) (xy 204.30003 91.875461) (xy 204.139934 91.469687) (xy 204.118934 91.438257) (xy 203.915178 91.395177)
+ (xy 203.879823 91.430532) (xy 203.879823 91.359822) (xy 203.836743 91.156066) (xy 203.436613 90.982345) (xy 203.02669 90.975413)
+ (xy 203.02669 89.317849) (xy 202.86011 88.914694) (xy 202.551928 88.605974) (xy 202.149064 88.43869) (xy 201.75669 88.438348)
+ (xy 201.75669 82.967849) (xy 201.59011 82.564694) (xy 201.281928 82.255974) (xy 200.879064 82.08869) (xy 200.48669 82.088348)
+ (xy 200.48669 80.427849) (xy 200.32011 80.024694) (xy 200.011928 79.715974) (xy 199.609064 79.54869) (xy 199.21669 79.548348)
+ (xy 199.21669 74.077849) (xy 199.05011 73.674694) (xy 198.741928 73.365974) (xy 198.339064 73.19869) (xy 197.94669 73.198348)
+ (xy 197.94669 71.537849) (xy 197.78011 71.134694) (xy 197.471928 70.825974) (xy 197.069064 70.65869) (xy 196.67669 70.658348)
+ (xy 196.67669 65.187849) (xy 196.51011 64.784694) (xy 196.201928 64.475974) (xy 195.799064 64.30869) (xy 195.40669 64.308348)
+ (xy 195.40669 62.647849) (xy 195.24011 62.244694) (xy 194.931928 61.935974) (xy 194.529064 61.76869) (xy 194.092849 61.76831)
+ (xy 193.689694 61.93489) (xy 193.380974 62.243072) (xy 193.21369 62.645936) (xy 193.21331 63.082151) (xy 193.37989 63.485306)
+ (xy 193.688072 63.794026) (xy 194.090936 63.96131) (xy 194.527151 63.96169) (xy 194.930306 63.79511) (xy 195.239026 63.486928)
+ (xy 195.40631 63.084064) (xy 195.40669 62.647849) (xy 195.40669 64.308348) (xy 195.362849 64.30831) (xy 194.959694 64.47489)
+ (xy 194.650974 64.783072) (xy 194.48369 65.185936) (xy 194.48331 65.622151) (xy 194.64989 66.025306) (xy 194.958072 66.334026)
+ (xy 195.360936 66.50131) (xy 195.797151 66.50169) (xy 196.200306 66.33511) (xy 196.509026 66.026928) (xy 196.67631 65.624064)
+ (xy 196.67669 65.187849) (xy 196.67669 70.658348) (xy 196.632849 70.65831) (xy 196.229694 70.82489) (xy 195.920974 71.133072)
+ (xy 195.75369 71.535936) (xy 195.75331 71.972151) (xy 195.91989 72.375306) (xy 196.228072 72.684026) (xy 196.630936 72.85131)
+ (xy 197.067151 72.85169) (xy 197.470306 72.68511) (xy 197.779026 72.376928) (xy 197.94631 71.974064) (xy 197.94669 71.537849)
+ (xy 197.94669 73.198348) (xy 197.902849 73.19831) (xy 197.499694 73.36489) (xy 197.190974 73.673072) (xy 197.02369 74.075936)
+ (xy 197.02331 74.512151) (xy 197.18989 74.915306) (xy 197.498072 75.224026) (xy 197.900936 75.39131) (xy 198.337151 75.39169)
+ (xy 198.740306 75.22511) (xy 199.049026 74.916928) (xy 199.21631 74.514064) (xy 199.21669 74.077849) (xy 199.21669 79.548348)
+ (xy 199.172849 79.54831) (xy 198.769694 79.71489) (xy 198.460974 80.023072) (xy 198.29369 80.425936) (xy 198.29331 80.862151)
+ (xy 198.45989 81.265306) (xy 198.768072 81.574026) (xy 199.170936 81.74131) (xy 199.607151 81.74169) (xy 200.010306 81.57511)
+ (xy 200.319026 81.266928) (xy 200.48631 80.864064) (xy 200.48669 80.427849) (xy 200.48669 82.088348) (xy 200.442849 82.08831)
+ (xy 200.039694 82.25489) (xy 199.730974 82.563072) (xy 199.56369 82.965936) (xy 199.56331 83.402151) (xy 199.72989 83.805306)
+ (xy 200.038072 84.114026) (xy 200.440936 84.28131) (xy 200.877151 84.28169) (xy 201.280306 84.11511) (xy 201.589026 83.806928)
+ (xy 201.75631 83.404064) (xy 201.75669 82.967849) (xy 201.75669 88.438348) (xy 201.712849 88.43831) (xy 201.629668 88.472679)
+ (xy 201.629668 85.660001) (xy 201.482382 85.30354) (xy 201.209895 85.030577) (xy 200.853692 84.882668) (xy 200.468001 84.882332)
+ (xy 200.11154 85.029618) (xy 199.838577 85.302105) (xy 199.690668 85.658308) (xy 199.690332 86.043999) (xy 199.837618 86.40046)
+ (xy 200.110105 86.673423) (xy 200.466308 86.821332) (xy 200.851999 86.821668) (xy 201.20846 86.674382) (xy 201.481423 86.401895)
+ (xy 201.629332 86.045692) (xy 201.629668 85.660001) (xy 201.629668 88.472679) (xy 201.309694 88.60489) (xy 201.000974 88.913072)
+ (xy 200.83369 89.315936) (xy 200.83331 89.752151) (xy 200.99989 90.155306) (xy 201.308072 90.464026) (xy 201.710936 90.63131)
+ (xy 202.147151 90.63169) (xy 202.550306 90.46511) (xy 202.859026 90.156928) (xy 203.02631 89.754064) (xy 203.02669 89.317849)
+ (xy 203.02669 90.975413) (xy 203.000461 90.97497) (xy 202.594687 91.135066) (xy 202.563257 91.156066) (xy 202.520177 91.359822)
+ (xy 203.2 92.039645) (xy 203.879823 91.359822) (xy 203.879823 91.430532) (xy 203.235355 92.075) (xy 203.915178 92.754823)
+ (xy 204.118934 92.711743) (xy 204.292655 92.311613) (xy 204.30003 91.875461) (xy 204.30003 97.328351) (xy 204.252849 97.32831)
+ (xy 203.879823 97.48244) (xy 203.879823 92.790178) (xy 203.2 92.110355) (xy 203.164645 92.14571) (xy 203.164645 92.075)
+ (xy 202.484822 91.395177) (xy 202.281066 91.438257) (xy 202.107345 91.838387) (xy 202.09997 92.274539) (xy 202.260066 92.680313)
+ (xy 202.281066 92.711743) (xy 202.484822 92.754823) (xy 203.164645 92.075) (xy 203.164645 92.14571) (xy 202.520177 92.790178)
+ (xy 202.563257 92.993934) (xy 202.963387 93.167655) (xy 203.399539 93.17503) (xy 203.805313 93.014934) (xy 203.836743 92.993934)
+ (xy 203.879823 92.790178) (xy 203.879823 97.48244) (xy 203.849694 97.49489) (xy 203.540974 97.803072) (xy 203.37369 98.205936)
+ (xy 203.37331 98.642151) (xy 203.53989 99.045306) (xy 203.848072 99.354026) (xy 204.250936 99.52131) (xy 204.687151 99.52169)
+ (xy 205.090306 99.35511) (xy 205.399026 99.046928) (xy 205.56631 98.644064) (xy 205.56669 98.207849) (xy 205.56669 99.868348)
+ (xy 205.522849 99.86831) (xy 205.119694 100.03489) (xy 204.810974 100.343072) (xy 204.64369 100.745936) (xy 204.64331 101.182151)
+ (xy 204.80989 101.585306) (xy 205.118072 101.894026) (xy 205.520936 102.06131) (xy 205.957151 102.06169) (xy 206.360306 101.89511)
+ (xy 206.669026 101.586928) (xy 206.83631 101.184064) (xy 206.83669 100.747849) (xy 206.83669 106.218348) (xy 206.792849 106.21831)
+ (xy 206.389694 106.38489) (xy 206.080974 106.693072) (xy 205.91369 107.095936) (xy 205.91331 107.532151) (xy 206.07989 107.935306)
+ (xy 206.388072 108.244026) (xy 206.790936 108.41131) (xy 207.227151 108.41169) (xy 207.630306 108.24511) (xy 207.939026 107.936928)
+ (xy 208.10631 107.534064) (xy 208.10669 107.097849) (xy 208.10669 108.758348) (xy 208.062849 108.75831) (xy 207.659694 108.92489)
+ (xy 207.350974 109.233072) (xy 207.18369 109.635936) (xy 207.18331 110.072151) (xy 207.34989 110.475306) (xy 207.658072 110.784026)
+ (xy 208.060936 110.95131) (xy 208.497151 110.95169) (xy 208.900306 110.78511) (xy 209.209026 110.476928) (xy 209.37631 110.074064)
+ (xy 209.37669 109.637849) (xy 209.37669 115.108348) (xy 209.332849 115.10831) (xy 208.929694 115.27489) (xy 208.620974 115.583072)
+ (xy 208.45369 115.985936) (xy 208.45331 116.422151) (xy 208.61989 116.825306) (xy 208.928072 117.134026) (xy 209.330936 117.30131)
+ (xy 209.767151 117.30169) (xy 210.170306 117.13511) (xy 210.479026 116.826928) (xy 210.64631 116.424064) (xy 210.64669 115.987849)
+ (xy 210.64669 117.648348) (xy 210.602849 117.64831) (xy 210.199694 117.81489) (xy 209.890974 118.123072) (xy 209.72369 118.525936)
+ (xy 209.72331 118.962151) (xy 209.88989 119.365306) (xy 210.198072 119.674026) (xy 210.600936 119.84131) (xy 211.037151 119.84169)
+ (xy 211.440306 119.67511) (xy 211.749026 119.366928) (xy 211.91631 118.964064) (xy 211.91669 118.527849) (xy 211.91669 123.998348)
+ (xy 211.872849 123.99831) (xy 211.469694 124.16489) (xy 211.160974 124.473072) (xy 210.99369 124.875936) (xy 210.99331 125.312151)
+ (xy 211.15989 125.715306) (xy 211.468072 126.024026) (xy 211.870936 126.19131) (xy 212.307151 126.19169) (xy 212.710306 126.02511)
+ (xy 213.019026 125.716928) (xy 213.18631 125.314064) (xy 213.18669 124.877849) (xy 213.18669 126.538348) (xy 213.142849 126.53831)
+ (xy 212.739694 126.70489) (xy 212.430974 127.013072) (xy 212.26369 127.415936) (xy 212.26331 127.852151) (xy 212.42989 128.255306)
+ (xy 212.738072 128.564026) (xy 213.140936 128.73131) (xy 213.577151 128.73169) (xy 213.980306 128.56511) (xy 214.289026 128.256928)
+ (xy 214.45631 127.854064) (xy 214.45669 127.417849) (xy 214.45669 133.7394) (xy 211.91669 133.7394) (xy 211.91669 127.417849)
+ (xy 211.75011 127.014694) (xy 211.441928 126.705974) (xy 211.039064 126.53869) (xy 210.64669 126.538348) (xy 210.64669 124.877849)
+ (xy 210.48011 124.474694) (xy 210.171928 124.165974) (xy 209.769064 123.99869) (xy 209.37669 123.998348) (xy 209.37669 118.527849)
+ (xy 209.21011 118.124694) (xy 208.901928 117.815974) (xy 208.499064 117.64869) (xy 208.10669 117.648348) (xy 208.10669 115.987849)
+ (xy 207.94011 115.584694) (xy 207.631928 115.275974) (xy 207.229064 115.10869) (xy 206.83669 115.108348) (xy 206.83669 109.637849)
+ (xy 206.67011 109.234694) (xy 206.361928 108.925974) (xy 205.959064 108.75869) (xy 205.56669 108.758348) (xy 205.56669 107.097849)
+ (xy 205.40011 106.694694) (xy 205.091928 106.385974) (xy 204.689064 106.21869) (xy 204.30003 106.218351) (xy 204.30003 100.765461)
+ (xy 204.139934 100.359687) (xy 204.118934 100.328257) (xy 203.915178 100.285177) (xy 203.879823 100.320532) (xy 203.879823 100.249822)
+ (xy 203.836743 100.046066) (xy 203.436613 99.872345) (xy 203.02669 99.865413) (xy 203.02669 98.207849) (xy 202.86011 97.804694)
+ (xy 202.551928 97.495974) (xy 202.149064 97.32869) (xy 201.75669 97.328348) (xy 201.75669 91.857849) (xy 201.59011 91.454694)
+ (xy 201.281928 91.145974) (xy 200.879064 90.97869) (xy 200.48669 90.978348) (xy 200.48669 89.317849) (xy 200.32011 88.914694)
+ (xy 200.011928 88.605974) (xy 199.609064 88.43869) (xy 199.21669 88.438348) (xy 199.21669 82.967849) (xy 199.05011 82.564694)
+ (xy 198.741928 82.255974) (xy 198.339064 82.08869) (xy 197.94669 82.088348) (xy 197.94669 80.427849) (xy 197.78011 80.024694)
+ (xy 197.471928 79.715974) (xy 197.069064 79.54869) (xy 196.67669 79.548348) (xy 196.67669 74.077849) (xy 196.51011 73.674694)
+ (xy 196.201928 73.365974) (xy 195.799064 73.19869) (xy 195.40669 73.198348) (xy 195.40669 71.537849) (xy 195.24011 71.134694)
+ (xy 194.931928 70.825974) (xy 194.529064 70.65869) (xy 194.13669 70.658348) (xy 194.13669 65.187849) (xy 193.97011 64.784694)
+ (xy 193.661928 64.475974) (xy 193.259064 64.30869) (xy 192.86669 64.308348) (xy 192.86669 62.647849) (xy 192.70011 62.244694)
+ (xy 192.391928 61.935974) (xy 191.989064 61.76869) (xy 191.552849 61.76831) (xy 191.149694 61.93489) (xy 190.840974 62.243072)
+ (xy 190.67369 62.645936) (xy 190.67331 63.082151) (xy 190.83989 63.485306) (xy 191.148072 63.794026) (xy 191.550936 63.96131)
+ (xy 191.987151 63.96169) (xy 192.390306 63.79511) (xy 192.699026 63.486928) (xy 192.86631 63.084064) (xy 192.86669 62.647849)
+ (xy 192.86669 64.308348) (xy 192.822849 64.30831) (xy 192.419694 64.47489) (xy 192.110974 64.783072) (xy 191.94369 65.185936)
+ (xy 191.94331 65.622151) (xy 192.10989 66.025306) (xy 192.418072 66.334026) (xy 192.820936 66.50131) (xy 193.257151 66.50169)
+ (xy 193.660306 66.33511) (xy 193.969026 66.026928) (xy 194.13631 65.624064) (xy 194.13669 65.187849) (xy 194.13669 70.658348)
+ (xy 194.092849 70.65831) (xy 193.689694 70.82489) (xy 193.380974 71.133072) (xy 193.21369 71.535936) (xy 193.21331 71.972151)
+ (xy 193.37989 72.375306) (xy 193.688072 72.684026) (xy 194.090936 72.85131) (xy 194.527151 72.85169) (xy 194.930306 72.68511)
+ (xy 195.239026 72.376928) (xy 195.40631 71.974064) (xy 195.40669 71.537849) (xy 195.40669 73.198348) (xy 195.362849 73.19831)
+ (xy 194.959694 73.36489) (xy 194.650974 73.673072) (xy 194.48369 74.075936) (xy 194.48331 74.512151) (xy 194.64989 74.915306)
+ (xy 194.958072 75.224026) (xy 195.360936 75.39131) (xy 195.797151 75.39169) (xy 196.200306 75.22511) (xy 196.509026 74.916928)
+ (xy 196.67631 74.514064) (xy 196.67669 74.077849) (xy 196.67669 79.548348) (xy 196.632849 79.54831) (xy 196.229694 79.71489)
+ (xy 195.920974 80.023072) (xy 195.75369 80.425936) (xy 195.75331 80.862151) (xy 195.91989 81.265306) (xy 196.228072 81.574026)
+ (xy 196.630936 81.74131) (xy 197.067151 81.74169) (xy 197.470306 81.57511) (xy 197.779026 81.266928) (xy 197.94631 80.864064)
+ (xy 197.94669 80.427849) (xy 197.94669 82.088348) (xy 197.902849 82.08831) (xy 197.499694 82.25489) (xy 197.190974 82.563072)
+ (xy 197.02369 82.965936) (xy 197.02331 83.402151) (xy 197.18989 83.805306) (xy 197.498072 84.114026) (xy 197.900936 84.28131)
+ (xy 198.337151 84.28169) (xy 198.740306 84.11511) (xy 199.049026 83.806928) (xy 199.21631 83.404064) (xy 199.21669 82.967849)
+ (xy 199.21669 88.438348) (xy 199.172849 88.43831) (xy 198.769694 88.60489) (xy 198.460974 88.913072) (xy 198.29369 89.315936)
+ (xy 198.29331 89.752151) (xy 198.45989 90.155306) (xy 198.768072 90.464026) (xy 199.170936 90.63131) (xy 199.607151 90.63169)
+ (xy 200.010306 90.46511) (xy 200.319026 90.156928) (xy 200.48631 89.754064) (xy 200.48669 89.317849) (xy 200.48669 90.978348)
+ (xy 200.442849 90.97831) (xy 200.039694 91.14489) (xy 199.730974 91.453072) (xy 199.56369 91.855936) (xy 199.56331 92.292151)
+ (xy 199.72989 92.695306) (xy 200.038072 93.004026) (xy 200.440936 93.17131) (xy 200.877151 93.17169) (xy 201.280306 93.00511)
+ (xy 201.589026 92.696928) (xy 201.75631 92.294064) (xy 201.75669 91.857849) (xy 201.75669 97.328348) (xy 201.712849 97.32831)
+ (xy 201.309694 97.49489) (xy 201.000974 97.803072) (xy 200.83369 98.205936) (xy 200.83331 98.642151) (xy 200.99989 99.045306)
+ (xy 201.308072 99.354026) (xy 201.710936 99.52131) (xy 202.147151 99.52169) (xy 202.550306 99.35511) (xy 202.859026 99.046928)
+ (xy 203.02631 98.644064) (xy 203.02669 98.207849) (xy 203.02669 99.865413) (xy 203.000461 99.86497) (xy 202.594687 100.025066)
+ (xy 202.563257 100.046066) (xy 202.520177 100.249822) (xy 203.2 100.929645) (xy 203.879823 100.249822) (xy 203.879823 100.320532)
+ (xy 203.235355 100.965) (xy 203.915178 101.644823) (xy 204.118934 101.601743) (xy 204.292655 101.201613) (xy 204.30003 100.765461)
+ (xy 204.30003 106.218351) (xy 204.252849 106.21831) (xy 203.879823 106.37244) (xy 203.879823 101.680178) (xy 203.2 101.000355)
+ (xy 203.164645 101.03571) (xy 203.164645 100.965) (xy 202.484822 100.285177) (xy 202.281066 100.328257) (xy 202.107345 100.728387)
+ (xy 202.09997 101.164539) (xy 202.260066 101.570313) (xy 202.281066 101.601743) (xy 202.484822 101.644823) (xy 203.164645 100.965)
+ (xy 203.164645 101.03571) (xy 202.520177 101.680178) (xy 202.563257 101.883934) (xy 202.963387 102.057655) (xy 203.399539 102.06503)
+ (xy 203.805313 101.904934) (xy 203.836743 101.883934) (xy 203.879823 101.680178) (xy 203.879823 106.37244) (xy 203.849694 106.38489)
+ (xy 203.540974 106.693072) (xy 203.37369 107.095936) (xy 203.37331 107.532151) (xy 203.53989 107.935306) (xy 203.848072 108.244026)
+ (xy 204.250936 108.41131) (xy 204.687151 108.41169) (xy 205.090306 108.24511) (xy 205.399026 107.936928) (xy 205.56631 107.534064)
+ (xy 205.56669 107.097849) (xy 205.56669 108.758348) (xy 205.522849 108.75831) (xy 205.119694 108.92489) (xy 204.810974 109.233072)
+ (xy 204.64369 109.635936) (xy 204.64331 110.072151) (xy 204.80989 110.475306) (xy 205.118072 110.784026) (xy 205.520936 110.95131)
+ (xy 205.957151 110.95169) (xy 206.360306 110.78511) (xy 206.669026 110.476928) (xy 206.83631 110.074064) (xy 206.83669 109.637849)
+ (xy 206.83669 115.108348) (xy 206.792849 115.10831) (xy 206.389694 115.27489) (xy 206.080974 115.583072) (xy 205.91369 115.985936)
+ (xy 205.91331 116.422151) (xy 206.07989 116.825306) (xy 206.388072 117.134026) (xy 206.790936 117.30131) (xy 207.227151 117.30169)
+ (xy 207.630306 117.13511) (xy 207.939026 116.826928) (xy 208.10631 116.424064) (xy 208.10669 115.987849) (xy 208.10669 117.648348)
+ (xy 208.062849 117.64831) (xy 207.659694 117.81489) (xy 207.350974 118.123072) (xy 207.18369 118.525936) (xy 207.18331 118.962151)
+ (xy 207.34989 119.365306) (xy 207.658072 119.674026) (xy 208.060936 119.84131) (xy 208.497151 119.84169) (xy 208.900306 119.67511)
+ (xy 209.209026 119.366928) (xy 209.37631 118.964064) (xy 209.37669 118.527849) (xy 209.37669 123.998348) (xy 209.332849 123.99831)
+ (xy 208.929694 124.16489) (xy 208.620974 124.473072) (xy 208.45369 124.875936) (xy 208.45331 125.312151) (xy 208.61989 125.715306)
+ (xy 208.928072 126.024026) (xy 209.330936 126.19131) (xy 209.767151 126.19169) (xy 210.170306 126.02511) (xy 210.479026 125.716928)
+ (xy 210.64631 125.314064) (xy 210.64669 124.877849) (xy 210.64669 126.538348) (xy 210.602849 126.53831) (xy 210.199694 126.70489)
+ (xy 209.890974 127.013072) (xy 209.72369 127.415936) (xy 209.72331 127.852151) (xy 209.88989 128.255306) (xy 210.198072 128.564026)
+ (xy 210.600936 128.73131) (xy 211.037151 128.73169) (xy 211.440306 128.56511) (xy 211.749026 128.256928) (xy 211.91631 127.854064)
+ (xy 211.91669 127.417849) (xy 211.91669 133.7394) (xy 209.37669 133.7394) (xy 209.37669 127.417849) (xy 209.21011 127.014694)
+ (xy 208.901928 126.705974) (xy 208.499064 126.53869) (xy 208.10669 126.538348) (xy 208.10669 124.877849) (xy 207.94011 124.474694)
+ (xy 207.631928 124.165974) (xy 207.229064 123.99869) (xy 206.83669 123.998348) (xy 206.83669 118.527849) (xy 206.67011 118.124694)
+ (xy 206.361928 117.815974) (xy 205.959064 117.64869) (xy 205.56669 117.648348) (xy 205.56669 115.987849) (xy 205.40011 115.584694)
+ (xy 205.091928 115.275974) (xy 204.689064 115.10869) (xy 204.30003 115.108351) (xy 204.30003 109.655461) (xy 204.139934 109.249687)
+ (xy 204.118934 109.218257) (xy 203.915178 109.175177) (xy 203.879823 109.210532) (xy 203.879823 109.139822) (xy 203.836743 108.936066)
+ (xy 203.436613 108.762345) (xy 203.02669 108.755413) (xy 203.02669 107.097849) (xy 202.86011 106.694694) (xy 202.551928 106.385974)
+ (xy 202.149064 106.21869) (xy 201.75669 106.218348) (xy 201.75669 100.747849) (xy 201.59011 100.344694) (xy 201.281928 100.035974)
+ (xy 200.879064 99.86869) (xy 200.48669 99.868348) (xy 200.48669 98.207849) (xy 200.32011 97.804694) (xy 200.011928 97.495974)
+ (xy 199.609064 97.32869) (xy 199.21669 97.328348) (xy 199.21669 91.857849) (xy 199.05011 91.454694) (xy 198.741928 91.145974)
+ (xy 198.339064 90.97869) (xy 197.94669 90.978348) (xy 197.94669 89.317849) (xy 197.78011 88.914694) (xy 197.471928 88.605974)
+ (xy 197.069064 88.43869) (xy 196.67669 88.438348) (xy 196.67669 82.967849) (xy 196.51011 82.564694) (xy 196.201928 82.255974)
+ (xy 195.799064 82.08869) (xy 195.40669 82.088348) (xy 195.40669 80.427849) (xy 195.24011 80.024694) (xy 194.931928 79.715974)
+ (xy 194.529064 79.54869) (xy 194.13669 79.548348) (xy 194.13669 74.077849) (xy 193.97011 73.674694) (xy 193.661928 73.365974)
+ (xy 193.259064 73.19869) (xy 192.86669 73.198348) (xy 192.86669 71.537849) (xy 192.70011 71.134694) (xy 192.391928 70.825974)
+ (xy 191.989064 70.65869) (xy 191.59669 70.658348) (xy 191.59669 65.187849) (xy 191.43011 64.784694) (xy 191.121928 64.475974)
+ (xy 190.719064 64.30869) (xy 190.32669 64.308348) (xy 190.32669 62.647849) (xy 190.16011 62.244694) (xy 189.851928 61.935974)
+ (xy 189.449064 61.76869) (xy 189.012849 61.76831) (xy 188.609694 61.93489) (xy 188.300974 62.243072) (xy 188.13369 62.645936)
+ (xy 188.13331 63.082151) (xy 188.29989 63.485306) (xy 188.608072 63.794026) (xy 189.010936 63.96131) (xy 189.447151 63.96169)
+ (xy 189.850306 63.79511) (xy 190.159026 63.486928) (xy 190.32631 63.084064) (xy 190.32669 62.647849) (xy 190.32669 64.308348)
+ (xy 190.282849 64.30831) (xy 189.879694 64.47489) (xy 189.570974 64.783072) (xy 189.40369 65.185936) (xy 189.40331 65.622151)
+ (xy 189.56989 66.025306) (xy 189.878072 66.334026) (xy 190.280936 66.50131) (xy 190.717151 66.50169) (xy 191.120306 66.33511)
+ (xy 191.429026 66.026928) (xy 191.59631 65.624064) (xy 191.59669 65.187849) (xy 191.59669 70.658348) (xy 191.552849 70.65831)
+ (xy 191.149694 70.82489) (xy 190.840974 71.133072) (xy 190.67369 71.535936) (xy 190.67331 71.972151) (xy 190.83989 72.375306)
+ (xy 191.148072 72.684026) (xy 191.550936 72.85131) (xy 191.987151 72.85169) (xy 192.390306 72.68511) (xy 192.699026 72.376928)
+ (xy 192.86631 71.974064) (xy 192.86669 71.537849) (xy 192.86669 73.198348) (xy 192.822849 73.19831) (xy 192.419694 73.36489)
+ (xy 192.110974 73.673072) (xy 191.94369 74.075936) (xy 191.943373 74.438701) (xy 191.709692 74.341668) (xy 191.59646 74.341569)
+ (xy 191.59669 74.077849) (xy 191.43011 73.674694) (xy 191.121928 73.365974) (xy 190.719064 73.19869) (xy 190.32669 73.198348)
+ (xy 190.32669 71.537849) (xy 190.16011 71.134694) (xy 189.851928 70.825974) (xy 189.449064 70.65869) (xy 189.05669 70.658348)
+ (xy 189.05669 65.187849) (xy 188.89011 64.784694) (xy 188.581928 64.475974) (xy 188.179064 64.30869) (xy 187.78669 64.308348)
+ (xy 187.78669 62.647849) (xy 187.62011 62.244694) (xy 187.311928 61.935974) (xy 186.909064 61.76869) (xy 186.472849 61.76831)
+ (xy 186.069694 61.93489) (xy 185.760974 62.243072) (xy 185.59369 62.645936) (xy 185.59331 63.082151) (xy 185.75989 63.485306)
+ (xy 186.068072 63.794026) (xy 186.470936 63.96131) (xy 186.907151 63.96169) (xy 187.310306 63.79511) (xy 187.619026 63.486928)
+ (xy 187.78631 63.084064) (xy 187.78669 62.647849) (xy 187.78669 64.308348) (xy 187.742849 64.30831) (xy 187.339694 64.47489)
+ (xy 187.030974 64.783072) (xy 186.86369 65.185936) (xy 186.86331 65.622151) (xy 187.02989 66.025306) (xy 187.338072 66.334026)
+ (xy 187.740936 66.50131) (xy 188.177151 66.50169) (xy 188.580306 66.33511) (xy 188.889026 66.026928) (xy 189.05631 65.624064)
+ (xy 189.05669 65.187849) (xy 189.05669 70.658348) (xy 189.012849 70.65831) (xy 188.609694 70.82489) (xy 188.300974 71.133072)
+ (xy 188.13369 71.535936) (xy 188.13331 71.972151) (xy 188.29989 72.375306) (xy 188.608072 72.684026) (xy 189.010936 72.85131)
+ (xy 189.447151 72.85169) (xy 189.850306 72.68511) (xy 190.159026 72.376928) (xy 190.32631 71.974064) (xy 190.32669 71.537849)
+ (xy 190.32669 73.198348) (xy 190.282849 73.19831) (xy 189.879694 73.36489) (xy 189.570974 73.673072) (xy 189.40369 74.075936)
+ (xy 189.40331 74.512151) (xy 189.56989 74.915306) (xy 189.80706 75.15289) (xy 189.57054 75.250618) (xy 189.297577 75.523105)
+ (xy 189.149668 75.879308) (xy 189.149332 76.264999) (xy 189.296618 76.62146) (xy 189.569105 76.894423) (xy 189.925308 77.042332)
+ (xy 190.310999 77.042668) (xy 190.66746 76.895382) (xy 190.940423 76.622895) (xy 191.088332 76.266692) (xy 191.088404 76.183206)
+ (xy 191.322308 76.280332) (xy 191.707999 76.280668) (xy 191.739323 76.267725) (xy 191.689668 76.387308) (xy 191.689332 76.772999)
+ (xy 191.836618 77.12946) (xy 192.109105 77.402423) (xy 192.465308 77.550332) (xy 192.850999 77.550668) (xy 193.20746 77.403382)
+ (xy 193.480423 77.130895) (xy 193.628332 76.774692) (xy 193.628668 76.389001) (xy 193.481382 76.03254) (xy 193.208895 75.759577)
+ (xy 192.852692 75.611668) (xy 192.467001 75.611332) (xy 192.435676 75.624274) (xy 192.485332 75.504692) (xy 192.485552 75.252046)
+ (xy 192.820936 75.39131) (xy 193.257151 75.39169) (xy 193.660306 75.22511) (xy 193.969026 74.916928) (xy 194.13631 74.514064)
+ (xy 194.13669 74.077849) (xy 194.13669 79.548348) (xy 194.092849 79.54831) (xy 193.689694 79.71489) (xy 193.380974 80.023072)
+ (xy 193.21369 80.425936) (xy 193.21331 80.862151) (xy 193.37989 81.265306) (xy 193.688072 81.574026) (xy 194.090936 81.74131)
+ (xy 194.527151 81.74169) (xy 194.930306 81.57511) (xy 195.239026 81.266928) (xy 195.40631 80.864064) (xy 195.40669 80.427849)
+ (xy 195.40669 82.088348) (xy 195.362849 82.08831) (xy 194.959694 82.25489) (xy 194.650974 82.563072) (xy 194.48369 82.965936)
+ (xy 194.48331 83.402151) (xy 194.64989 83.805306) (xy 194.958072 84.114026) (xy 195.360936 84.28131) (xy 195.797151 84.28169)
+ (xy 196.200306 84.11511) (xy 196.509026 83.806928) (xy 196.67631 83.404064) (xy 196.67669 82.967849) (xy 196.67669 88.438348)
+ (xy 196.632849 88.43831) (xy 196.229694 88.60489) (xy 195.920974 88.913072) (xy 195.75369 89.315936) (xy 195.75331 89.752151)
+ (xy 195.91989 90.155306) (xy 196.228072 90.464026) (xy 196.630936 90.63131) (xy 197.067151 90.63169) (xy 197.470306 90.46511)
+ (xy 197.779026 90.156928) (xy 197.94631 89.754064) (xy 197.94669 89.317849) (xy 197.94669 90.978348) (xy 197.902849 90.97831)
+ (xy 197.499694 91.14489) (xy 197.190974 91.453072) (xy 197.02369 91.855936) (xy 197.02331 92.292151) (xy 197.18989 92.695306)
+ (xy 197.498072 93.004026) (xy 197.900936 93.17131) (xy 198.337151 93.17169) (xy 198.740306 93.00511) (xy 199.049026 92.696928)
+ (xy 199.21631 92.294064) (xy 199.21669 91.857849) (xy 199.21669 97.328348) (xy 199.172849 97.32831) (xy 198.769694 97.49489)
+ (xy 198.460974 97.803072) (xy 198.29369 98.205936) (xy 198.29331 98.642151) (xy 198.45989 99.045306) (xy 198.768072 99.354026)
+ (xy 199.170936 99.52131) (xy 199.607151 99.52169) (xy 200.010306 99.35511) (xy 200.319026 99.046928) (xy 200.48631 98.644064)
+ (xy 200.48669 98.207849) (xy 200.48669 99.868348) (xy 200.442849 99.86831) (xy 200.039694 100.03489) (xy 199.730974 100.343072)
+ (xy 199.56369 100.745936) (xy 199.56331 101.182151) (xy 199.72989 101.585306) (xy 200.038072 101.894026) (xy 200.440936 102.06131)
+ (xy 200.877151 102.06169) (xy 201.280306 101.89511) (xy 201.589026 101.586928) (xy 201.75631 101.184064) (xy 201.75669 100.747849)
+ (xy 201.75669 106.218348) (xy 201.712849 106.21831) (xy 201.309694 106.38489) (xy 201.000974 106.693072) (xy 200.83369 107.095936)
+ (xy 200.83331 107.532151) (xy 200.99989 107.935306) (xy 201.308072 108.244026) (xy 201.710936 108.41131) (xy 202.147151 108.41169)
+ (xy 202.550306 108.24511) (xy 202.859026 107.936928) (xy 203.02631 107.534064) (xy 203.02669 107.097849) (xy 203.02669 108.755413)
+ (xy 203.000461 108.75497) (xy 202.594687 108.915066) (xy 202.563257 108.936066) (xy 202.520177 109.139822) (xy 203.2 109.819645)
+ (xy 203.879823 109.139822) (xy 203.879823 109.210532) (xy 203.235355 109.855) (xy 203.915178 110.534823) (xy 204.118934 110.491743)
+ (xy 204.292655 110.091613) (xy 204.30003 109.655461) (xy 204.30003 115.108351) (xy 204.252849 115.10831) (xy 203.879823 115.26244)
+ (xy 203.879823 110.570178) (xy 203.2 109.890355) (xy 203.164645 109.92571) (xy 203.164645 109.855) (xy 202.484822 109.175177)
+ (xy 202.281066 109.218257) (xy 202.107345 109.618387) (xy 202.09997 110.054539) (xy 202.260066 110.460313) (xy 202.281066 110.491743)
+ (xy 202.484822 110.534823) (xy 203.164645 109.855) (xy 203.164645 109.92571) (xy 202.520177 110.570178) (xy 202.563257 110.773934)
+ (xy 202.963387 110.947655) (xy 203.399539 110.95503) (xy 203.805313 110.794934) (xy 203.836743 110.773934) (xy 203.879823 110.570178)
+ (xy 203.879823 115.26244) (xy 203.849694 115.27489) (xy 203.540974 115.583072) (xy 203.37369 115.985936) (xy 203.37331 116.422151)
+ (xy 203.53989 116.825306) (xy 203.848072 117.134026) (xy 204.250936 117.30131) (xy 204.687151 117.30169) (xy 205.090306 117.13511)
+ (xy 205.399026 116.826928) (xy 205.56631 116.424064) (xy 205.56669 115.987849) (xy 205.56669 117.648348) (xy 205.522849 117.64831)
+ (xy 205.119694 117.81489) (xy 204.810974 118.123072) (xy 204.64369 118.525936) (xy 204.64331 118.962151) (xy 204.80989 119.365306)
+ (xy 205.118072 119.674026) (xy 205.520936 119.84131) (xy 205.957151 119.84169) (xy 206.360306 119.67511) (xy 206.669026 119.366928)
+ (xy 206.83631 118.964064) (xy 206.83669 118.527849) (xy 206.83669 123.998348) (xy 206.792849 123.99831) (xy 206.389694 124.16489)
+ (xy 206.080974 124.473072) (xy 205.91369 124.875936) (xy 205.91331 125.312151) (xy 206.07989 125.715306) (xy 206.388072 126.024026)
+ (xy 206.790936 126.19131) (xy 207.227151 126.19169) (xy 207.630306 126.02511) (xy 207.939026 125.716928) (xy 208.10631 125.314064)
+ (xy 208.10669 124.877849) (xy 208.10669 126.538348) (xy 208.062849 126.53831) (xy 207.659694 126.70489) (xy 207.350974 127.013072)
+ (xy 207.18369 127.415936) (xy 207.18331 127.852151) (xy 207.34989 128.255306) (xy 207.658072 128.564026) (xy 208.060936 128.73131)
+ (xy 208.497151 128.73169) (xy 208.900306 128.56511) (xy 209.209026 128.256928) (xy 209.37631 127.854064) (xy 209.37669 127.417849)
+ (xy 209.37669 133.7394) (xy 206.83669 133.7394) (xy 206.83669 127.417849) (xy 206.67011 127.014694) (xy 206.361928 126.705974)
+ (xy 205.959064 126.53869) (xy 205.56669 126.538348) (xy 205.56669 124.877849) (xy 205.40011 124.474694) (xy 205.091928 124.165974)
+ (xy 204.689064 123.99869) (xy 204.30003 123.998351) (xy 204.30003 118.545461) (xy 204.139934 118.139687) (xy 204.118934 118.108257)
+ (xy 203.915178 118.065177) (xy 203.879823 118.100532) (xy 203.879823 118.029822) (xy 203.836743 117.826066) (xy 203.436613 117.652345)
+ (xy 203.02669 117.645413) (xy 203.02669 115.987849) (xy 202.86011 115.584694) (xy 202.551928 115.275974) (xy 202.149064 115.10869)
+ (xy 201.75669 115.108348) (xy 201.75669 109.637849) (xy 201.59011 109.234694) (xy 201.281928 108.925974) (xy 200.879064 108.75869)
+ (xy 200.48669 108.758348) (xy 200.48669 107.097849) (xy 200.32011 106.694694) (xy 200.011928 106.385974) (xy 199.609064 106.21869)
+ (xy 199.21669 106.218348) (xy 199.21669 100.747849) (xy 199.05011 100.344694) (xy 198.741928 100.035974) (xy 198.339064 99.86869)
+ (xy 197.94669 99.868348) (xy 197.94669 98.207849) (xy 197.78011 97.804694) (xy 197.471928 97.495974) (xy 197.069064 97.32869)
+ (xy 196.67669 97.328348) (xy 196.67669 91.857849) (xy 196.51011 91.454694) (xy 196.201928 91.145974) (xy 195.799064 90.97869)
+ (xy 195.40669 90.978348) (xy 195.40669 89.317849) (xy 195.24011 88.914694) (xy 194.931928 88.605974) (xy 194.529064 88.43869)
+ (xy 194.13669 88.438348) (xy 194.13669 82.967849) (xy 193.97011 82.564694) (xy 193.661928 82.255974) (xy 193.259064 82.08869)
+ (xy 192.86669 82.088348) (xy 192.86669 80.427849) (xy 192.70011 80.024694) (xy 192.391928 79.715974) (xy 191.989064 79.54869)
+ (xy 191.552849 79.54831) (xy 191.149694 79.71489) (xy 190.840974 80.023072) (xy 190.67369 80.425936) (xy 190.67331 80.862151)
+ (xy 190.83989 81.265306) (xy 191.148072 81.574026) (xy 191.550936 81.74131) (xy 191.987151 81.74169) (xy 192.390306 81.57511)
+ (xy 192.699026 81.266928) (xy 192.86631 80.864064) (xy 192.86669 80.427849) (xy 192.86669 82.088348) (xy 192.822849 82.08831)
+ (xy 192.419694 82.25489) (xy 192.110974 82.563072) (xy 191.94369 82.965936) (xy 191.94331 83.402151) (xy 192.10989 83.805306)
+ (xy 192.418072 84.114026) (xy 192.820936 84.28131) (xy 193.257151 84.28169) (xy 193.660306 84.11511) (xy 193.969026 83.806928)
+ (xy 194.13631 83.404064) (xy 194.13669 82.967849) (xy 194.13669 88.438348) (xy 194.092849 88.43831) (xy 193.689694 88.60489)
+ (xy 193.380974 88.913072) (xy 193.21369 89.315936) (xy 193.21331 89.752151) (xy 193.37989 90.155306) (xy 193.688072 90.464026)
+ (xy 194.090936 90.63131) (xy 194.527151 90.63169) (xy 194.930306 90.46511) (xy 195.239026 90.156928) (xy 195.40631 89.754064)
+ (xy 195.40669 89.317849) (xy 195.40669 90.978348) (xy 195.362849 90.97831) (xy 194.959694 91.14489) (xy 194.650974 91.453072)
+ (xy 194.48369 91.855936) (xy 194.48331 92.292151) (xy 194.64989 92.695306) (xy 194.958072 93.004026) (xy 195.360936 93.17131)
+ (xy 195.797151 93.17169) (xy 196.200306 93.00511) (xy 196.509026 92.696928) (xy 196.67631 92.294064) (xy 196.67669 91.857849)
+ (xy 196.67669 97.328348) (xy 196.632849 97.32831) (xy 196.229694 97.49489) (xy 195.920974 97.803072) (xy 195.75369 98.205936)
+ (xy 195.75331 98.642151) (xy 195.91989 99.045306) (xy 196.228072 99.354026) (xy 196.630936 99.52131) (xy 197.067151 99.52169)
+ (xy 197.470306 99.35511) (xy 197.779026 99.046928) (xy 197.94631 98.644064) (xy 197.94669 98.207849) (xy 197.94669 99.868348)
+ (xy 197.902849 99.86831) (xy 197.499694 100.03489) (xy 197.190974 100.343072) (xy 197.02369 100.745936) (xy 197.02331 101.182151)
+ (xy 197.18989 101.585306) (xy 197.498072 101.894026) (xy 197.900936 102.06131) (xy 198.337151 102.06169) (xy 198.740306 101.89511)
+ (xy 199.049026 101.586928) (xy 199.21631 101.184064) (xy 199.21669 100.747849) (xy 199.21669 106.218348) (xy 199.172849 106.21831)
+ (xy 198.769694 106.38489) (xy 198.460974 106.693072) (xy 198.29369 107.095936) (xy 198.29331 107.532151) (xy 198.45989 107.935306)
+ (xy 198.768072 108.244026) (xy 199.170936 108.41131) (xy 199.607151 108.41169) (xy 200.010306 108.24511) (xy 200.319026 107.936928)
+ (xy 200.48631 107.534064) (xy 200.48669 107.097849) (xy 200.48669 108.758348) (xy 200.442849 108.75831) (xy 200.039694 108.92489)
+ (xy 199.730974 109.233072) (xy 199.56369 109.635936) (xy 199.56331 110.072151) (xy 199.72989 110.475306) (xy 200.038072 110.784026)
+ (xy 200.440936 110.95131) (xy 200.877151 110.95169) (xy 201.280306 110.78511) (xy 201.589026 110.476928) (xy 201.75631 110.074064)
+ (xy 201.75669 109.637849) (xy 201.75669 115.108348) (xy 201.712849 115.10831) (xy 201.309694 115.27489) (xy 201.000974 115.583072)
+ (xy 200.83369 115.985936) (xy 200.83331 116.422151) (xy 200.99989 116.825306) (xy 201.308072 117.134026) (xy 201.710936 117.30131)
+ (xy 202.147151 117.30169) (xy 202.550306 117.13511) (xy 202.859026 116.826928) (xy 203.02631 116.424064) (xy 203.02669 115.987849)
+ (xy 203.02669 117.645413) (xy 203.000461 117.64497) (xy 202.594687 117.805066) (xy 202.563257 117.826066) (xy 202.520177 118.029822)
+ (xy 203.2 118.709645) (xy 203.879823 118.029822) (xy 203.879823 118.100532) (xy 203.235355 118.745) (xy 203.915178 119.424823)
+ (xy 204.118934 119.381743) (xy 204.292655 118.981613) (xy 204.30003 118.545461) (xy 204.30003 123.998351) (xy 204.252849 123.99831)
+ (xy 203.879823 124.15244) (xy 203.879823 119.460178) (xy 203.2 118.780355) (xy 203.164645 118.81571) (xy 203.164645 118.745)
+ (xy 202.484822 118.065177) (xy 202.281066 118.108257) (xy 202.107345 118.508387) (xy 202.09997 118.944539) (xy 202.260066 119.350313)
+ (xy 202.281066 119.381743) (xy 202.484822 119.424823) (xy 203.164645 118.745) (xy 203.164645 118.81571) (xy 202.520177 119.460178)
+ (xy 202.563257 119.663934) (xy 202.963387 119.837655) (xy 203.399539 119.84503) (xy 203.805313 119.684934) (xy 203.836743 119.663934)
+ (xy 203.879823 119.460178) (xy 203.879823 124.15244) (xy 203.849694 124.16489) (xy 203.540974 124.473072) (xy 203.37369 124.875936)
+ (xy 203.37331 125.312151) (xy 203.53989 125.715306) (xy 203.848072 126.024026) (xy 204.250936 126.19131) (xy 204.687151 126.19169)
+ (xy 205.090306 126.02511) (xy 205.399026 125.716928) (xy 205.56631 125.314064) (xy 205.56669 124.877849) (xy 205.56669 126.538348)
+ (xy 205.522849 126.53831) (xy 205.119694 126.70489) (xy 204.810974 127.013072) (xy 204.64369 127.415936) (xy 204.64331 127.852151)
+ (xy 204.80989 128.255306) (xy 205.118072 128.564026) (xy 205.520936 128.73131) (xy 205.957151 128.73169) (xy 206.360306 128.56511)
+ (xy 206.669026 128.256928) (xy 206.83631 127.854064) (xy 206.83669 127.417849) (xy 206.83669 133.7394) (xy 204.851 133.7394)
+ (xy 204.611211 133.787097) (xy 204.407927 133.922927) (xy 204.30003 134.084406) (xy 204.30003 127.435461) (xy 204.139934 127.029687)
+ (xy 204.118934 126.998257) (xy 203.915178 126.955177) (xy 203.879823 126.990532) (xy 203.879823 126.919822) (xy 203.836743 126.716066)
+ (xy 203.436613 126.542345) (xy 203.02669 126.535413) (xy 203.02669 124.877849) (xy 202.86011 124.474694) (xy 202.551928 124.165974)
+ (xy 202.149064 123.99869) (xy 201.75669 123.998348) (xy 201.75669 118.527849) (xy 201.59011 118.124694) (xy 201.281928 117.815974)
+ (xy 200.879064 117.64869) (xy 200.48669 117.648348) (xy 200.48669 115.987849) (xy 200.32011 115.584694) (xy 200.011928 115.275974)
+ (xy 199.609064 115.10869) (xy 199.21669 115.108348) (xy 199.21669 109.637849) (xy 199.05011 109.234694) (xy 198.741928 108.925974)
+ (xy 198.339064 108.75869) (xy 197.94669 108.758348) (xy 197.94669 107.097849) (xy 197.78011 106.694694) (xy 197.471928 106.385974)
+ (xy 197.069064 106.21869) (xy 196.67669 106.218348) (xy 196.67669 100.747849) (xy 196.51011 100.344694) (xy 196.201928 100.035974)
+ (xy 195.799064 99.86869) (xy 195.40669 99.868348) (xy 195.40669 98.207849) (xy 195.24011 97.804694) (xy 194.931928 97.495974)
+ (xy 194.529064 97.32869) (xy 194.13669 97.328348) (xy 194.13669 91.857849) (xy 193.97011 91.454694) (xy 193.661928 91.145974)
+ (xy 193.259064 90.97869) (xy 192.86669 90.978348) (xy 192.86669 89.317849) (xy 192.70011 88.914694) (xy 192.391928 88.605974)
+ (xy 191.989064 88.43869) (xy 191.59669 88.438348) (xy 191.59669 82.967849) (xy 191.43011 82.564694) (xy 191.121928 82.255974)
+ (xy 190.719064 82.08869) (xy 190.32669 82.088348) (xy 190.32669 80.427849) (xy 190.16011 80.024694) (xy 189.851928 79.715974)
+ (xy 189.449064 79.54869) (xy 189.05669 79.548348) (xy 189.05669 74.077849) (xy 188.89011 73.674694) (xy 188.581928 73.365974)
+ (xy 188.179064 73.19869) (xy 187.78669 73.198348) (xy 187.78669 71.537849) (xy 187.62011 71.134694) (xy 187.311928 70.825974)
+ (xy 186.909064 70.65869) (xy 186.472849 70.65831) (xy 186.069694 70.82489) (xy 185.760974 71.133072) (xy 185.59369 71.535936)
+ (xy 185.59331 71.972151) (xy 185.75989 72.375306) (xy 186.068072 72.684026) (xy 186.470936 72.85131) (xy 186.907151 72.85169)
+ (xy 187.310306 72.68511) (xy 187.619026 72.376928) (xy 187.78631 71.974064) (xy 187.78669 71.537849) (xy 187.78669 73.198348)
+ (xy 187.742849 73.19831) (xy 187.339694 73.36489) (xy 187.030974 73.673072) (xy 186.86369 74.075936) (xy 186.86331 74.512151)
+ (xy 187.02989 74.915306) (xy 187.338072 75.224026) (xy 187.740936 75.39131) (xy 188.177151 75.39169) (xy 188.580306 75.22511)
+ (xy 188.889026 74.916928) (xy 189.05631 74.514064) (xy 189.05669 74.077849) (xy 189.05669 79.548348) (xy 189.012849 79.54831)
+ (xy 188.609694 79.71489) (xy 188.300974 80.023072) (xy 188.13369 80.425936) (xy 188.13331 80.862151) (xy 188.29989 81.265306)
+ (xy 188.608072 81.574026) (xy 189.010936 81.74131) (xy 189.447151 81.74169) (xy 189.850306 81.57511) (xy 190.159026 81.266928)
+ (xy 190.32631 80.864064) (xy 190.32669 80.427849) (xy 190.32669 82.088348) (xy 190.282849 82.08831) (xy 189.879694 82.25489)
+ (xy 189.570974 82.563072) (xy 189.40369 82.965936) (xy 189.40331 83.402151) (xy 189.56989 83.805306) (xy 189.878072 84.114026)
+ (xy 190.280936 84.28131) (xy 190.717151 84.28169) (xy 191.120306 84.11511) (xy 191.429026 83.806928) (xy 191.59631 83.404064)
+ (xy 191.59669 82.967849) (xy 191.59669 88.438348) (xy 191.552849 88.43831) (xy 191.149694 88.60489) (xy 190.840974 88.913072)
+ (xy 190.67369 89.315936) (xy 190.67331 89.752151) (xy 190.83989 90.155306) (xy 191.148072 90.464026) (xy 191.550936 90.63131)
+ (xy 191.987151 90.63169) (xy 192.390306 90.46511) (xy 192.699026 90.156928) (xy 192.86631 89.754064) (xy 192.86669 89.317849)
+ (xy 192.86669 90.978348) (xy 192.822849 90.97831) (xy 192.419694 91.14489) (xy 192.110974 91.453072) (xy 191.94369 91.855936)
+ (xy 191.94331 92.292151) (xy 192.10989 92.695306) (xy 192.418072 93.004026) (xy 192.820936 93.17131) (xy 193.257151 93.17169)
+ (xy 193.660306 93.00511) (xy 193.969026 92.696928) (xy 194.13631 92.294064) (xy 194.13669 91.857849) (xy 194.13669 97.328348)
+ (xy 194.092849 97.32831) (xy 193.907127 97.405048) (xy 193.988423 97.323895) (xy 194.136332 96.967692) (xy 194.136668 96.582001)
+ (xy 193.989382 96.22554) (xy 193.716895 95.952577) (xy 193.360692 95.804668) (xy 192.975001 95.804332) (xy 192.61854 95.951618)
+ (xy 192.345577 96.224105) (xy 192.197668 96.580308) (xy 192.197332 96.965999) (xy 192.344618 97.32246) (xy 192.617105 97.595423)
+ (xy 192.973308 97.743332) (xy 193.358999 97.743668) (xy 193.498026 97.686223) (xy 193.380974 97.803072) (xy 193.21369 98.205936)
+ (xy 193.21331 98.642151) (xy 193.37989 99.045306) (xy 193.688072 99.354026) (xy 194.090936 99.52131) (xy 194.527151 99.52169)
+ (xy 194.930306 99.35511) (xy 195.239026 99.046928) (xy 195.40631 98.644064) (xy 195.40669 98.207849) (xy 195.40669 99.868348)
+ (xy 195.362849 99.86831) (xy 194.959694 100.03489) (xy 194.650974 100.343072) (xy 194.48369 100.745936) (xy 194.48331 101.182151)
+ (xy 194.64989 101.585306) (xy 194.958072 101.894026) (xy 195.360936 102.06131) (xy 195.797151 102.06169) (xy 196.200306 101.89511)
+ (xy 196.509026 101.586928) (xy 196.67631 101.184064) (xy 196.67669 100.747849) (xy 196.67669 106.218348) (xy 196.632849 106.21831)
+ (xy 196.229694 106.38489) (xy 195.920974 106.693072) (xy 195.75369 107.095936) (xy 195.75331 107.532151) (xy 195.91989 107.935306)
+ (xy 196.228072 108.244026) (xy 196.630936 108.41131) (xy 197.067151 108.41169) (xy 197.470306 108.24511) (xy 197.779026 107.936928)
+ (xy 197.94631 107.534064) (xy 197.94669 107.097849) (xy 197.94669 108.758348) (xy 197.902849 108.75831) (xy 197.499694 108.92489)
+ (xy 197.190974 109.233072) (xy 197.02369 109.635936) (xy 197.02331 110.072151) (xy 197.18989 110.475306) (xy 197.498072 110.784026)
+ (xy 197.900936 110.95131) (xy 198.337151 110.95169) (xy 198.740306 110.78511) (xy 199.049026 110.476928) (xy 199.21631 110.074064)
+ (xy 199.21669 109.637849) (xy 199.21669 115.108348) (xy 199.172849 115.10831) (xy 198.769694 115.27489) (xy 198.460974 115.583072)
+ (xy 198.29369 115.985936) (xy 198.29331 116.422151) (xy 198.45989 116.825306) (xy 198.768072 117.134026) (xy 199.170936 117.30131)
+ (xy 199.607151 117.30169) (xy 200.010306 117.13511) (xy 200.319026 116.826928) (xy 200.48631 116.424064) (xy 200.48669 115.987849)
+ (xy 200.48669 117.648348) (xy 200.442849 117.64831) (xy 200.039694 117.81489) (xy 199.730974 118.123072) (xy 199.56369 118.525936)
+ (xy 199.56331 118.962151) (xy 199.72989 119.365306) (xy 200.038072 119.674026) (xy 200.440936 119.84131) (xy 200.877151 119.84169)
+ (xy 201.280306 119.67511) (xy 201.589026 119.366928) (xy 201.75631 118.964064) (xy 201.75669 118.527849) (xy 201.75669 123.998348)
+ (xy 201.712849 123.99831) (xy 201.309694 124.16489) (xy 201.000974 124.473072) (xy 200.83369 124.875936) (xy 200.83331 125.312151)
+ (xy 200.99989 125.715306) (xy 201.308072 126.024026) (xy 201.710936 126.19131) (xy 202.147151 126.19169) (xy 202.550306 126.02511)
+ (xy 202.859026 125.716928) (xy 203.02631 125.314064) (xy 203.02669 124.877849) (xy 203.02669 126.535413) (xy 203.000461 126.53497)
+ (xy 202.594687 126.695066) (xy 202.563257 126.716066) (xy 202.520177 126.919822) (xy 203.2 127.599645) (xy 203.879823 126.919822)
+ (xy 203.879823 126.990532) (xy 203.235355 127.635) (xy 203.915178 128.314823) (xy 204.118934 128.271743) (xy 204.292655 127.871613)
+ (xy 204.30003 127.435461) (xy 204.30003 134.084406) (xy 204.272097 134.126211) (xy 204.2244 134.366) (xy 204.2244 142.950198)
+ (xy 204.155692 142.921668) (xy 203.879823 142.921427) (xy 203.879823 128.350178) (xy 203.2 127.670355) (xy 203.164645 127.70571)
+ (xy 203.164645 127.635) (xy 202.484822 126.955177) (xy 202.281066 126.998257) (xy 202.107345 127.398387) (xy 202.09997 127.834539)
+ (xy 202.260066 128.240313) (xy 202.281066 128.271743) (xy 202.484822 128.314823) (xy 203.164645 127.635) (xy 203.164645 127.70571)
+ (xy 202.520177 128.350178) (xy 202.563257 128.553934) (xy 202.963387 128.727655) (xy 203.399539 128.73503) (xy 203.805313 128.574934)
+ (xy 203.836743 128.553934) (xy 203.879823 128.350178) (xy 203.879823 142.921427) (xy 203.770001 142.921332) (xy 203.41354 143.068618)
+ (xy 203.140577 143.341105) (xy 202.992668 143.697308) (xy 202.992332 144.082999) (xy 203.139618 144.43946) (xy 203.412105 144.712423)
+ (xy 203.768308 144.860332) (xy 204.153999 144.860668) (xy 204.2244 144.831579) (xy 204.2244 144.9154) (xy 201.75669 144.9154)
+ (xy 201.75669 127.417849) (xy 201.59011 127.014694) (xy 201.281928 126.705974) (xy 200.879064 126.53869) (xy 200.48669 126.538348)
+ (xy 200.48669 124.877849) (xy 200.32011 124.474694) (xy 200.011928 124.165974) (xy 199.609064 123.99869) (xy 199.21669 123.998348)
+ (xy 199.21669 118.527849) (xy 199.05011 118.124694) (xy 198.741928 117.815974) (xy 198.339064 117.64869) (xy 197.94669 117.648348)
+ (xy 197.94669 115.987849) (xy 197.78011 115.584694) (xy 197.471928 115.275974) (xy 197.069064 115.10869) (xy 196.67669 115.108348)
+ (xy 196.67669 109.637849) (xy 196.51011 109.234694) (xy 196.201928 108.925974) (xy 195.799064 108.75869) (xy 195.40669 108.758348)
+ (xy 195.40669 107.097849) (xy 195.24011 106.694694) (xy 194.931928 106.385974) (xy 194.529064 106.21869) (xy 194.13669 106.218348)
+ (xy 194.13669 100.747849) (xy 193.97011 100.344694) (xy 193.661928 100.035974) (xy 193.259064 99.86869) (xy 192.86669 99.868348)
+ (xy 192.86669 98.207849) (xy 192.70011 97.804694) (xy 192.391928 97.495974) (xy 191.989064 97.32869) (xy 191.552849 97.32831)
+ (xy 191.149694 97.49489) (xy 190.941202 97.703018) (xy 191.088332 97.348692) (xy 191.08843 97.23557) (xy 191.199999 97.235668)
+ (xy 191.55646 97.088382) (xy 191.829423 96.815895) (xy 191.977332 96.459692) (xy 191.977668 96.074001) (xy 191.830382 95.71754)
+ (xy 191.59669 95.483439) (xy 191.59669 91.857849) (xy 191.43011 91.454694) (xy 191.121928 91.145974) (xy 190.719064 90.97869)
+ (xy 190.32669 90.978348) (xy 190.32669 89.317849) (xy 190.16011 88.914694) (xy 189.851928 88.605974) (xy 189.449064 88.43869)
+ (xy 189.05669 88.438348) (xy 189.05669 82.967849) (xy 188.89011 82.564694) (xy 188.581928 82.255974) (xy 188.179064 82.08869)
+ (xy 187.78669 82.088348) (xy 187.78669 80.427849) (xy 187.62011 80.024694) (xy 187.311928 79.715974) (xy 186.909064 79.54869)
+ (xy 186.472849 79.54831) (xy 186.262668 79.635154) (xy 186.262668 76.516001) (xy 186.115382 76.15954) (xy 185.842895 75.886577)
+ (xy 185.486692 75.738668) (xy 185.101001 75.738332) (xy 184.74454 75.885618) (xy 184.471577 76.158105) (xy 184.323668 76.514308)
+ (xy 184.323332 76.899999) (xy 184.470618 77.25646) (xy 184.743105 77.529423) (xy 185.099308 77.677332) (xy 185.484999 77.677668)
+ (xy 185.84146 77.530382) (xy 186.114423 77.257895) (xy 186.262332 76.901692) (xy 186.262668 76.516001) (xy 186.262668 79.635154)
+ (xy 186.069694 79.71489) (xy 185.760974 80.023072) (xy 185.59369 80.425936) (xy 185.59331 80.862151) (xy 185.75989 81.265306)
+ (xy 186.068072 81.574026) (xy 186.470936 81.74131) (xy 186.907151 81.74169) (xy 187.310306 81.57511) (xy 187.619026 81.266928)
+ (xy 187.78631 80.864064) (xy 187.78669 80.427849) (xy 187.78669 82.088348) (xy 187.742849 82.08831) (xy 187.339694 82.25489)
+ (xy 187.030974 82.563072) (xy 186.86369 82.965936) (xy 186.86331 83.402151) (xy 187.02989 83.805306) (xy 187.338072 84.114026)
+ (xy 187.740936 84.28131) (xy 188.177151 84.28169) (xy 188.580306 84.11511) (xy 188.889026 83.806928) (xy 189.05631 83.404064)
+ (xy 189.05669 82.967849) (xy 189.05669 88.438348) (xy 189.012849 88.43831) (xy 188.609694 88.60489) (xy 188.300974 88.913072)
+ (xy 188.13369 89.315936) (xy 188.13331 89.752151) (xy 188.29989 90.155306) (xy 188.608072 90.464026) (xy 189.010936 90.63131)
+ (xy 189.447151 90.63169) (xy 189.850306 90.46511) (xy 190.159026 90.156928) (xy 190.32631 89.754064) (xy 190.32669 89.317849)
+ (xy 190.32669 90.978348) (xy 190.282849 90.97831) (xy 189.879694 91.14489) (xy 189.570974 91.453072) (xy 189.40369 91.855936)
+ (xy 189.40331 92.292151) (xy 189.56989 92.695306) (xy 189.878072 93.004026) (xy 190.280936 93.17131) (xy 190.717151 93.17169)
+ (xy 191.120306 93.00511) (xy 191.429026 92.696928) (xy 191.59631 92.294064) (xy 191.59669 91.857849) (xy 191.59669 95.483439)
+ (xy 191.557895 95.444577) (xy 191.201692 95.296668) (xy 190.816001 95.296332) (xy 190.45954 95.443618) (xy 190.186577 95.716105)
+ (xy 190.038668 96.072308) (xy 190.038569 96.185429) (xy 189.927001 96.185332) (xy 189.57054 96.332618) (xy 189.297577 96.605105)
+ (xy 189.149668 96.961308) (xy 189.149348 97.328428) (xy 189.05669 97.328347) (xy 189.05669 91.857849) (xy 188.89011 91.454694)
+ (xy 188.581928 91.145974) (xy 188.179064 90.97869) (xy 187.78669 90.978348) (xy 187.78669 89.317849) (xy 187.62011 88.914694)
+ (xy 187.311928 88.605974) (xy 186.909064 88.43869) (xy 186.472849 88.43831) (xy 186.262668 88.525154) (xy 186.262668 83.247001)
+ (xy 186.115382 82.89054) (xy 185.842895 82.617577) (xy 185.486692 82.469668) (xy 185.119668 82.469348) (xy 185.119668 79.818001)
+ (xy 184.972382 79.46154) (xy 184.699895 79.188577) (xy 184.343692 79.040668) (xy 183.958001 79.040332) (xy 183.60154 79.187618)
+ (xy 183.387977 79.400808) (xy 183.302895 79.315577) (xy 182.946692 79.167668) (xy 182.561001 79.167332) (xy 182.20454 79.314618)
+ (xy 181.944668 79.574036) (xy 181.944668 62.927001) (xy 181.797382 62.57054) (xy 181.524895 62.297577) (xy 181.168692 62.149668)
+ (xy 180.783001 62.149332) (xy 180.42654 62.296618) (xy 180.153577 62.569105) (xy 180.040023 62.842571) (xy 179.597181 62.398955)
+ (xy 178.844359 62.086357) (xy 178.029217 62.085645) (xy 177.275851 62.39693) (xy 176.698955 62.972819) (xy 176.386357 63.725641)
+ (xy 176.385645 64.540783) (xy 176.69693 65.294149) (xy 177.272819 65.871045) (xy 178.025641 66.183643) (xy 178.840783 66.184355)
+ (xy 179.594149 65.87307) (xy 180.171045 65.297181) (xy 180.483643 64.544359) (xy 180.484149 63.96494) (xy 180.781308 64.088332)
+ (xy 181.166999 64.088668) (xy 181.52346 63.941382) (xy 181.796423 63.668895) (xy 181.944332 63.312692) (xy 181.944668 62.927001)
+ (xy 181.944668 79.574036) (xy 181.931577 79.587105) (xy 181.783668 79.943308) (xy 181.783332 80.328999) (xy 181.930618 80.68546)
+ (xy 182.203105 80.958423) (xy 182.559308 81.106332) (xy 182.944999 81.106668) (xy 183.30146 80.959382) (xy 183.515022 80.746191)
+ (xy 183.600105 80.831423) (xy 183.956308 80.979332) (xy 184.341999 80.979668) (xy 184.69846 80.832382) (xy 184.971423 80.559895)
+ (xy 185.119332 80.203692) (xy 185.119668 79.818001) (xy 185.119668 82.469348) (xy 185.101001 82.469332) (xy 184.74454 82.616618)
+ (xy 184.471577 82.889105) (xy 184.323668 83.245308) (xy 184.323332 83.630999) (xy 184.470618 83.98746) (xy 184.743105 84.260423)
+ (xy 185.099308 84.408332) (xy 185.484999 84.408668) (xy 185.84146 84.261382) (xy 186.114423 83.988895) (xy 186.262332 83.632692)
+ (xy 186.262668 83.247001) (xy 186.262668 88.525154) (xy 186.069694 88.60489) (xy 185.760974 88.913072) (xy 185.59369 89.315936)
+ (xy 185.59331 89.752151) (xy 185.75989 90.155306) (xy 186.068072 90.464026) (xy 186.470936 90.63131) (xy 186.907151 90.63169)
+ (xy 187.310306 90.46511) (xy 187.619026 90.156928) (xy 187.78631 89.754064) (xy 187.78669 89.317849) (xy 187.78669 90.978348)
+ (xy 187.742849 90.97831) (xy 187.339694 91.14489) (xy 187.030974 91.453072) (xy 186.86369 91.855936) (xy 186.86331 92.292151)
+ (xy 187.02989 92.695306) (xy 187.338072 93.004026) (xy 187.740936 93.17131) (xy 188.177151 93.17169) (xy 188.580306 93.00511)
+ (xy 188.889026 92.696928) (xy 189.05631 92.294064) (xy 189.05669 91.857849) (xy 189.05669 97.328347) (xy 189.012849 97.32831)
+ (xy 188.609694 97.49489) (xy 188.300974 97.803072) (xy 188.13369 98.205936) (xy 188.13331 98.642151) (xy 188.29989 99.045306)
+ (xy 188.608072 99.354026) (xy 189.010936 99.52131) (xy 189.447151 99.52169) (xy 189.850306 99.35511) (xy 190.159026 99.046928)
+ (xy 190.32631 98.644064) (xy 190.32669 98.207849) (xy 190.292313 98.124651) (xy 190.310999 98.124668) (xy 190.66746 97.977382)
+ (xy 190.840194 97.804948) (xy 190.67369 98.205936) (xy 190.67331 98.642151) (xy 190.83989 99.045306) (xy 191.148072 99.354026)
+ (xy 191.550936 99.52131) (xy 191.987151 99.52169) (xy 192.390306 99.35511) (xy 192.699026 99.046928) (xy 192.86631 98.644064)
+ (xy 192.86669 98.207849) (xy 192.86669 99.868348) (xy 192.822849 99.86831) (xy 192.419694 100.03489) (xy 192.110974 100.343072)
+ (xy 191.94369 100.745936) (xy 191.94331 101.182151) (xy 192.10989 101.585306) (xy 192.418072 101.894026) (xy 192.820936 102.06131)
+ (xy 193.257151 102.06169) (xy 193.660306 101.89511) (xy 193.969026 101.586928) (xy 194.13631 101.184064) (xy 194.13669 100.747849)
+ (xy 194.13669 106.218348) (xy 194.092849 106.21831) (xy 193.689694 106.38489) (xy 193.380974 106.693072) (xy 193.21369 107.095936)
+ (xy 193.21331 107.532151) (xy 193.37989 107.935306) (xy 193.688072 108.244026) (xy 194.090936 108.41131) (xy 194.527151 108.41169)
+ (xy 194.930306 108.24511) (xy 195.239026 107.936928) (xy 195.40631 107.534064) (xy 195.40669 107.097849) (xy 195.40669 108.758348)
+ (xy 195.362849 108.75831) (xy 194.959694 108.92489) (xy 194.650974 109.233072) (xy 194.48369 109.635936) (xy 194.48331 110.072151)
+ (xy 194.64989 110.475306) (xy 194.958072 110.784026) (xy 195.360936 110.95131) (xy 195.797151 110.95169) (xy 196.200306 110.78511)
+ (xy 196.509026 110.476928) (xy 196.67631 110.074064) (xy 196.67669 109.637849) (xy 196.67669 115.108348) (xy 196.632849 115.10831)
+ (xy 196.229694 115.27489) (xy 195.920974 115.583072) (xy 195.75369 115.985936) (xy 195.75331 116.422151) (xy 195.91989 116.825306)
+ (xy 196.228072 117.134026) (xy 196.630936 117.30131) (xy 197.067151 117.30169) (xy 197.470306 117.13511) (xy 197.779026 116.826928)
+ (xy 197.94631 116.424064) (xy 197.94669 115.987849) (xy 197.94669 117.648348) (xy 197.902849 117.64831) (xy 197.499694 117.81489)
+ (xy 197.190974 118.123072) (xy 197.02369 118.525936) (xy 197.02331 118.962151) (xy 197.18989 119.365306) (xy 197.498072 119.674026)
+ (xy 197.900936 119.84131) (xy 198.337151 119.84169) (xy 198.740306 119.67511) (xy 199.049026 119.366928) (xy 199.21631 118.964064)
+ (xy 199.21669 118.527849) (xy 199.21669 123.998348) (xy 199.172849 123.99831) (xy 198.769694 124.16489) (xy 198.460974 124.473072)
+ (xy 198.29369 124.875936) (xy 198.29331 125.312151) (xy 198.45989 125.715306) (xy 198.768072 126.024026) (xy 199.170936 126.19131)
+ (xy 199.607151 126.19169) (xy 200.010306 126.02511) (xy 200.319026 125.716928) (xy 200.48631 125.314064) (xy 200.48669 124.877849)
+ (xy 200.48669 126.538348) (xy 200.442849 126.53831) (xy 200.039694 126.70489) (xy 199.730974 127.013072) (xy 199.56369 127.415936)
+ (xy 199.56331 127.852151) (xy 199.72989 128.255306) (xy 200.038072 128.564026) (xy 200.440936 128.73131) (xy 200.877151 128.73169)
+ (xy 201.280306 128.56511) (xy 201.589026 128.256928) (xy 201.75631 127.854064) (xy 201.75669 127.417849) (xy 201.75669 144.9154)
+ (xy 201.248668 144.9154) (xy 201.248668 134.174001) (xy 201.101382 133.81754) (xy 200.828895 133.544577) (xy 200.472692 133.396668)
+ (xy 200.087001 133.396332) (xy 199.73054 133.543618) (xy 199.457577 133.816105) (xy 199.309668 134.172308) (xy 199.309332 134.557999)
+ (xy 199.456618 134.91446) (xy 199.729105 135.187423) (xy 200.085308 135.335332) (xy 200.470999 135.335668) (xy 200.82746 135.188382)
+ (xy 201.100423 134.915895) (xy 201.248332 134.559692) (xy 201.248668 134.174001) (xy 201.248668 144.9154) (xy 199.21669 144.9154)
+ (xy 199.21669 127.417849) (xy 199.05011 127.014694) (xy 198.741928 126.705974) (xy 198.339064 126.53869) (xy 197.94669 126.538348)
+ (xy 197.94669 124.877849) (xy 197.78011 124.474694) (xy 197.471928 124.165974) (xy 197.069064 123.99869) (xy 196.67669 123.998348)
+ (xy 196.67669 118.527849) (xy 196.51011 118.124694) (xy 196.201928 117.815974) (xy 195.799064 117.64869) (xy 195.40669 117.648348)
+ (xy 195.40669 115.987849) (xy 195.24011 115.584694) (xy 194.931928 115.275974) (xy 194.529064 115.10869) (xy 194.13669 115.108348)
+ (xy 194.13669 109.637849) (xy 193.97011 109.234694) (xy 193.661928 108.925974) (xy 193.259064 108.75869) (xy 192.86669 108.758348)
+ (xy 192.86669 107.097849) (xy 192.70011 106.694694) (xy 192.391928 106.385974) (xy 191.989064 106.21869) (xy 191.59669 106.218348)
+ (xy 191.59669 100.747849) (xy 191.43011 100.344694) (xy 191.121928 100.035974) (xy 190.719064 99.86869) (xy 190.282849 99.86831)
+ (xy 189.879694 100.03489) (xy 189.570974 100.343072) (xy 189.40369 100.745936) (xy 189.40331 101.182151) (xy 189.56989 101.585306)
+ (xy 189.878072 101.894026) (xy 190.280936 102.06131) (xy 190.717151 102.06169) (xy 191.120306 101.89511) (xy 191.429026 101.586928)
+ (xy 191.59631 101.184064) (xy 191.59669 100.747849) (xy 191.59669 106.218348) (xy 191.552849 106.21831) (xy 191.149694 106.38489)
+ (xy 190.840974 106.693072) (xy 190.67369 107.095936) (xy 190.67331 107.532151) (xy 190.83989 107.935306) (xy 191.148072 108.244026)
+ (xy 191.550936 108.41131) (xy 191.987151 108.41169) (xy 192.390306 108.24511) (xy 192.699026 107.936928) (xy 192.86631 107.534064)
+ (xy 192.86669 107.097849) (xy 192.86669 108.758348) (xy 192.822849 108.75831) (xy 192.419694 108.92489) (xy 192.110974 109.233072)
+ (xy 191.94369 109.635936) (xy 191.94331 110.072151) (xy 192.10989 110.475306) (xy 192.418072 110.784026) (xy 192.820936 110.95131)
+ (xy 193.257151 110.95169) (xy 193.660306 110.78511) (xy 193.969026 110.476928) (xy 194.13631 110.074064) (xy 194.13669 109.637849)
+ (xy 194.13669 115.108348) (xy 194.092849 115.10831) (xy 193.689694 115.27489) (xy 193.380974 115.583072) (xy 193.21369 115.985936)
+ (xy 193.21331 116.422151) (xy 193.37989 116.825306) (xy 193.688072 117.134026) (xy 194.090936 117.30131) (xy 194.527151 117.30169)
+ (xy 194.930306 117.13511) (xy 195.239026 116.826928) (xy 195.40631 116.424064) (xy 195.40669 115.987849) (xy 195.40669 117.648348)
+ (xy 195.362849 117.64831) (xy 194.959694 117.81489) (xy 194.650974 118.123072) (xy 194.48369 118.525936) (xy 194.48331 118.962151)
+ (xy 194.64989 119.365306) (xy 194.958072 119.674026) (xy 195.360936 119.84131) (xy 195.797151 119.84169) (xy 196.200306 119.67511)
+ (xy 196.509026 119.366928) (xy 196.67631 118.964064) (xy 196.67669 118.527849) (xy 196.67669 123.998348) (xy 196.632849 123.99831)
+ (xy 196.229694 124.16489) (xy 195.920974 124.473072) (xy 195.75369 124.875936) (xy 195.75331 125.312151) (xy 195.91989 125.715306)
+ (xy 196.228072 126.024026) (xy 196.630936 126.19131) (xy 197.067151 126.19169) (xy 197.470306 126.02511) (xy 197.779026 125.716928)
+ (xy 197.94631 125.314064) (xy 197.94669 124.877849) (xy 197.94669 126.538348) (xy 197.902849 126.53831) (xy 197.499694 126.70489)
+ (xy 197.190974 127.013072) (xy 197.02369 127.415936) (xy 197.02331 127.852151) (xy 197.18989 128.255306) (xy 197.498072 128.564026)
+ (xy 197.900936 128.73131) (xy 198.337151 128.73169) (xy 198.740306 128.56511) (xy 199.049026 128.256928) (xy 199.21631 127.854064)
+ (xy 199.21669 127.417849) (xy 199.21669 144.9154) (xy 196.67669 144.9154) (xy 196.67669 127.417849) (xy 196.51011 127.014694)
+ (xy 196.201928 126.705974) (xy 195.799064 126.53869) (xy 195.40669 126.538348) (xy 195.40669 124.877849) (xy 195.24011 124.474694)
+ (xy 194.931928 124.165974) (xy 194.529064 123.99869) (xy 194.13669 123.998348) (xy 194.13669 118.527849) (xy 193.97011 118.124694)
+ (xy 193.661928 117.815974) (xy 193.259064 117.64869) (xy 192.86669 117.648348) (xy 192.86669 115.987849) (xy 192.70011 115.584694)
+ (xy 192.391928 115.275974) (xy 191.989064 115.10869) (xy 191.59669 115.108348) (xy 191.59669 109.637849) (xy 191.43011 109.234694)
+ (xy 191.121928 108.925974) (xy 190.719064 108.75869) (xy 190.32669 108.758348) (xy 190.32669 107.097849) (xy 190.16011 106.694694)
+ (xy 189.851928 106.385974) (xy 189.449064 106.21869) (xy 189.05669 106.218348) (xy 189.05669 100.747849) (xy 188.89011 100.344694)
+ (xy 188.581928 100.035974) (xy 188.179064 99.86869) (xy 187.78669 99.868348) (xy 187.78669 98.207849) (xy 187.62011 97.804694)
+ (xy 187.311928 97.495974) (xy 186.909064 97.32869) (xy 186.472849 97.32831) (xy 186.069694 97.49489) (xy 185.760974 97.803072)
+ (xy 185.59369 98.205936) (xy 185.59331 98.642151) (xy 185.75989 99.045306) (xy 186.068072 99.354026) (xy 186.470936 99.52131)
+ (xy 186.907151 99.52169) (xy 187.310306 99.35511) (xy 187.619026 99.046928) (xy 187.78631 98.644064) (xy 187.78669 98.207849)
+ (xy 187.78669 99.868348) (xy 187.742849 99.86831) (xy 187.339694 100.03489) (xy 187.030974 100.343072) (xy 186.86369 100.745936)
+ (xy 186.86331 101.182151) (xy 187.02989 101.585306) (xy 187.338072 101.894026) (xy 187.740936 102.06131) (xy 188.177151 102.06169)
+ (xy 188.580306 101.89511) (xy 188.889026 101.586928) (xy 189.05631 101.184064) (xy 189.05669 100.747849) (xy 189.05669 106.218348)
+ (xy 189.012849 106.21831) (xy 188.609694 106.38489) (xy 188.300974 106.693072) (xy 188.13369 107.095936) (xy 188.13331 107.532151)
+ (xy 188.29989 107.935306) (xy 188.608072 108.244026) (xy 189.010936 108.41131) (xy 189.447151 108.41169) (xy 189.850306 108.24511)
+ (xy 190.159026 107.936928) (xy 190.32631 107.534064) (xy 190.32669 107.097849) (xy 190.32669 108.758348) (xy 190.282849 108.75831)
+ (xy 189.879694 108.92489) (xy 189.570974 109.233072) (xy 189.40369 109.635936) (xy 189.40331 110.072151) (xy 189.56989 110.475306)
+ (xy 189.878072 110.784026) (xy 190.280936 110.95131) (xy 190.717151 110.95169) (xy 191.120306 110.78511) (xy 191.429026 110.476928)
+ (xy 191.59631 110.074064) (xy 191.59669 109.637849) (xy 191.59669 115.108348) (xy 191.552849 115.10831) (xy 191.149694 115.27489)
+ (xy 190.840974 115.583072) (xy 190.67369 115.985936) (xy 190.67331 116.422151) (xy 190.83989 116.825306) (xy 191.148072 117.134026)
+ (xy 191.550936 117.30131) (xy 191.987151 117.30169) (xy 192.390306 117.13511) (xy 192.699026 116.826928) (xy 192.86631 116.424064)
+ (xy 192.86669 115.987849) (xy 192.86669 117.648348) (xy 192.822849 117.64831) (xy 192.419694 117.81489) (xy 192.110974 118.123072)
+ (xy 191.94369 118.525936) (xy 191.94331 118.962151) (xy 192.10989 119.365306) (xy 192.418072 119.674026) (xy 192.820936 119.84131)
+ (xy 193.257151 119.84169) (xy 193.660306 119.67511) (xy 193.969026 119.366928) (xy 194.13631 118.964064) (xy 194.13669 118.527849)
+ (xy 194.13669 123.998348) (xy 194.092849 123.99831) (xy 193.689694 124.16489) (xy 193.380974 124.473072) (xy 193.21369 124.875936)
+ (xy 193.21331 125.312151) (xy 193.37989 125.715306) (xy 193.688072 126.024026) (xy 194.090936 126.19131) (xy 194.527151 126.19169)
+ (xy 194.930306 126.02511) (xy 195.239026 125.716928) (xy 195.40631 125.314064) (xy 195.40669 124.877849) (xy 195.40669 126.538348)
+ (xy 195.362849 126.53831) (xy 194.959694 126.70489) (xy 194.650974 127.013072) (xy 194.48369 127.415936) (xy 194.48331 127.852151)
+ (xy 194.64989 128.255306) (xy 194.958072 128.564026) (xy 195.360936 128.73131) (xy 195.797151 128.73169) (xy 196.200306 128.56511)
+ (xy 196.509026 128.256928) (xy 196.67631 127.854064) (xy 196.67669 127.417849) (xy 196.67669 144.9154) (xy 194.818 144.9154)
+ (xy 194.57821 144.963097) (xy 194.374927 145.098927) (xy 194.13669 145.337163) (xy 194.13669 127.417849) (xy 193.97011 127.014694)
+ (xy 193.661928 126.705974) (xy 193.259064 126.53869) (xy 192.86669 126.538348) (xy 192.86669 124.877849) (xy 192.70011 124.474694)
+ (xy 192.391928 124.165974) (xy 191.989064 123.99869) (xy 191.59669 123.998348) (xy 191.59669 118.527849) (xy 191.43011 118.124694)
+ (xy 191.121928 117.815974) (xy 190.719064 117.64869) (xy 190.32669 117.648348) (xy 190.32669 115.987849) (xy 190.16011 115.584694)
+ (xy 189.851928 115.275974) (xy 189.449064 115.10869) (xy 189.05669 115.108348) (xy 189.05669 109.637849) (xy 188.89011 109.234694)
+ (xy 188.581928 108.925974) (xy 188.179064 108.75869) (xy 187.78669 108.758348) (xy 187.78669 107.097849) (xy 187.62011 106.694694)
+ (xy 187.311928 106.385974) (xy 186.909064 106.21869) (xy 186.472849 106.21831) (xy 186.262668 106.305154) (xy 186.262668 105.218001)
+ (xy 186.115382 104.86154) (xy 185.842895 104.588577) (xy 185.486692 104.440668) (xy 185.101001 104.440332) (xy 184.74454 104.587618)
+ (xy 184.611668 104.720257) (xy 184.611668 100.519001) (xy 184.464382 100.16254) (xy 184.191895 99.889577) (xy 183.835692 99.741668)
+ (xy 183.450001 99.741332) (xy 183.09354 99.888618) (xy 182.820577 100.161105) (xy 182.672668 100.517308) (xy 182.672332 100.902999)
+ (xy 182.819618 101.25946) (xy 183.092105 101.532423) (xy 183.448308 101.680332) (xy 183.833999 101.680668) (xy 184.19046 101.533382)
+ (xy 184.463423 101.260895) (xy 184.611332 100.904692) (xy 184.611668 100.519001) (xy 184.611668 104.720257) (xy 184.530977 104.800808)
+ (xy 184.445895 104.715577) (xy 184.089692 104.567668) (xy 183.704001 104.567332) (xy 183.34754 104.714618) (xy 183.074577 104.987105)
+ (xy 182.926668 105.343308) (xy 182.926332 105.728999) (xy 183.073618 106.08546) (xy 183.346105 106.358423) (xy 183.702308 106.506332)
+ (xy 184.087999 106.506668) (xy 184.44446 106.359382) (xy 184.658022 106.146191) (xy 184.743105 106.231423) (xy 185.099308 106.379332)
+ (xy 185.484999 106.379668) (xy 185.84146 106.232382) (xy 186.114423 105.959895) (xy 186.262332 105.603692) (xy 186.262668 105.218001)
+ (xy 186.262668 106.305154) (xy 186.069694 106.38489) (xy 185.760974 106.693072) (xy 185.59369 107.095936) (xy 185.59331 107.532151)
+ (xy 185.75989 107.935306) (xy 186.068072 108.244026) (xy 186.470936 108.41131) (xy 186.907151 108.41169) (xy 187.310306 108.24511)
+ (xy 187.619026 107.936928) (xy 187.78631 107.534064) (xy 187.78669 107.097849) (xy 187.78669 108.758348) (xy 187.742849 108.75831)
+ (xy 187.339694 108.92489) (xy 187.030974 109.233072) (xy 186.86369 109.635936) (xy 186.86331 110.072151) (xy 187.02989 110.475306)
+ (xy 187.338072 110.784026) (xy 187.740936 110.95131) (xy 188.177151 110.95169) (xy 188.580306 110.78511) (xy 188.889026 110.476928)
+ (xy 189.05631 110.074064) (xy 189.05669 109.637849) (xy 189.05669 115.108348) (xy 189.012849 115.10831) (xy 188.609694 115.27489)
+ (xy 188.300974 115.583072) (xy 188.13369 115.985936) (xy 188.13331 116.422151) (xy 188.29989 116.825306) (xy 188.608072 117.134026)
+ (xy 189.010936 117.30131) (xy 189.447151 117.30169) (xy 189.850306 117.13511) (xy 190.159026 116.826928) (xy 190.32631 116.424064)
+ (xy 190.32669 115.987849) (xy 190.32669 117.648348) (xy 190.282849 117.64831) (xy 189.879694 117.81489) (xy 189.570974 118.123072)
+ (xy 189.40369 118.525936) (xy 189.40331 118.962151) (xy 189.56989 119.365306) (xy 189.878072 119.674026) (xy 190.280936 119.84131)
+ (xy 190.717151 119.84169) (xy 191.120306 119.67511) (xy 191.429026 119.366928) (xy 191.59631 118.964064) (xy 191.59669 118.527849)
+ (xy 191.59669 123.998348) (xy 191.552849 123.99831) (xy 191.149694 124.16489) (xy 190.840974 124.473072) (xy 190.67369 124.875936)
+ (xy 190.67331 125.312151) (xy 190.83989 125.715306) (xy 191.148072 126.024026) (xy 191.550936 126.19131) (xy 191.987151 126.19169)
+ (xy 192.390306 126.02511) (xy 192.699026 125.716928) (xy 192.86631 125.314064) (xy 192.86669 124.877849) (xy 192.86669 126.538348)
+ (xy 192.822849 126.53831) (xy 192.419694 126.70489) (xy 192.110974 127.013072) (xy 191.94369 127.415936) (xy 191.94331 127.852151)
+ (xy 192.10989 128.255306) (xy 192.418072 128.564026) (xy 192.820936 128.73131) (xy 193.257151 128.73169) (xy 193.660306 128.56511)
+ (xy 193.969026 128.256928) (xy 194.13631 127.854064) (xy 194.13669 127.417849) (xy 194.13669 145.337163) (xy 192.358668 147.115185)
+ (xy 192.358668 136.714001) (xy 192.211382 136.35754) (xy 191.938895 136.084577) (xy 191.59669 135.94248) (xy 191.59669 127.417849)
+ (xy 191.43011 127.014694) (xy 191.121928 126.705974) (xy 190.719064 126.53869) (xy 190.32669 126.538348) (xy 190.32669 124.877849)
+ (xy 190.16011 124.474694) (xy 189.851928 124.165974) (xy 189.449064 123.99869) (xy 189.05669 123.998348) (xy 189.05669 118.527849)
+ (xy 188.89011 118.124694) (xy 188.581928 117.815974) (xy 188.179064 117.64869) (xy 187.78669 117.648348) (xy 187.78669 115.987849)
+ (xy 187.62011 115.584694) (xy 187.311928 115.275974) (xy 186.909064 115.10869) (xy 186.472849 115.10831) (xy 186.069694 115.27489)
+ (xy 185.760974 115.583072) (xy 185.59369 115.985936) (xy 185.59331 116.422151) (xy 185.75989 116.825306) (xy 186.068072 117.134026)
+ (xy 186.470936 117.30131) (xy 186.907151 117.30169) (xy 187.310306 117.13511) (xy 187.619026 116.826928) (xy 187.78631 116.424064)
+ (xy 187.78669 115.987849) (xy 187.78669 117.648348) (xy 187.742849 117.64831) (xy 187.339694 117.81489) (xy 187.030974 118.123072)
+ (xy 186.86369 118.525936) (xy 186.86331 118.962151) (xy 187.02989 119.365306) (xy 187.338072 119.674026) (xy 187.740936 119.84131)
+ (xy 188.177151 119.84169) (xy 188.580306 119.67511) (xy 188.889026 119.366928) (xy 189.05631 118.964064) (xy 189.05669 118.527849)
+ (xy 189.05669 123.998348) (xy 189.012849 123.99831) (xy 188.609694 124.16489) (xy 188.300974 124.473072) (xy 188.13369 124.875936)
+ (xy 188.13331 125.312151) (xy 188.29989 125.715306) (xy 188.608072 126.024026) (xy 189.010936 126.19131) (xy 189.447151 126.19169)
+ (xy 189.850306 126.02511) (xy 190.159026 125.716928) (xy 190.32631 125.314064) (xy 190.32669 124.877849) (xy 190.32669 126.538348)
+ (xy 190.282849 126.53831) (xy 189.879694 126.70489) (xy 189.570974 127.013072) (xy 189.40369 127.415936) (xy 189.40331 127.852151)
+ (xy 189.56989 128.255306) (xy 189.878072 128.564026) (xy 190.280936 128.73131) (xy 190.717151 128.73169) (xy 191.120306 128.56511)
+ (xy 191.429026 128.256928) (xy 191.59631 127.854064) (xy 191.59669 127.417849) (xy 191.59669 135.94248) (xy 191.582692 135.936668)
+ (xy 191.197001 135.936332) (xy 190.84054 136.083618) (xy 190.567577 136.356105) (xy 190.419668 136.712308) (xy 190.419332 137.097999)
+ (xy 190.566618 137.45446) (xy 190.839105 137.727423) (xy 191.195308 137.875332) (xy 191.580999 137.875668) (xy 191.93746 137.728382)
+ (xy 192.210423 137.455895) (xy 192.358332 137.099692) (xy 192.358668 136.714001) (xy 192.358668 147.115185) (xy 192.104668 147.369185)
+ (xy 192.104668 144.334001) (xy 191.957382 143.97754) (xy 191.684895 143.704577) (xy 191.328692 143.556668) (xy 190.943001 143.556332)
+ (xy 190.58654 143.703618) (xy 190.313577 143.976105) (xy 190.165668 144.332308) (xy 190.165332 144.717999) (xy 190.312618 145.07446)
+ (xy 190.585105 145.347423) (xy 190.941308 145.495332) (xy 191.326999 145.495668) (xy 191.68346 145.348382) (xy 191.956423 145.075895)
+ (xy 192.104332 144.719692) (xy 192.104668 144.334001) (xy 192.104668 147.369185) (xy 189.8185 149.655353) (xy 189.8185 143.423929)
+ (xy 189.8185 143.215071) (xy 189.8185 142.77725) (xy 189.8185 142.46475) (xy 189.8185 142.026929) (xy 189.8185 141.818071)
+ (xy 189.8185 138.597929) (xy 189.8185 138.389071) (xy 189.8185 137.95125) (xy 189.8185 137.63875) (xy 189.8185 137.200929)
+ (xy 189.8185 136.992071) (xy 189.8185 135.549929) (xy 189.8185 135.341071) (xy 189.8185 134.90325) (xy 189.8185 134.59075)
+ (xy 189.8185 134.152929) (xy 189.8185 133.944071) (xy 189.738574 133.751111) (xy 189.590889 133.603426) (xy 189.397929 133.5235)
+ (xy 189.05669 133.5235) (xy 189.05669 127.417849) (xy 188.89011 127.014694) (xy 188.581928 126.705974) (xy 188.179064 126.53869)
+ (xy 187.78669 126.538348) (xy 187.78669 124.877849) (xy 187.62011 124.474694) (xy 187.311928 124.165974) (xy 186.909064 123.99869)
+ (xy 186.472849 123.99831) (xy 186.069694 124.16489) (xy 185.760974 124.473072) (xy 185.59369 124.875936) (xy 185.59331 125.312151)
+ (xy 185.75989 125.715306) (xy 186.068072 126.024026) (xy 186.470936 126.19131) (xy 186.907151 126.19169) (xy 187.310306 126.02511)
+ (xy 187.619026 125.716928) (xy 187.78631 125.314064) (xy 187.78669 124.877849) (xy 187.78669 126.538348) (xy 187.742849 126.53831)
+ (xy 187.339694 126.70489) (xy 187.030974 127.013072) (xy 186.86369 127.415936) (xy 186.86331 127.852151) (xy 187.02989 128.255306)
+ (xy 187.338072 128.564026) (xy 187.740936 128.73131) (xy 188.177151 128.73169) (xy 188.580306 128.56511) (xy 188.889026 128.256928)
+ (xy 189.05631 127.854064) (xy 189.05669 127.417849) (xy 189.05669 133.5235) (xy 188.75125 133.5235) (xy 188.62 133.65475)
+ (xy 188.62 134.722) (xy 189.68725 134.722) (xy 189.8185 134.59075) (xy 189.8185 134.90325) (xy 189.68725 134.772)
+ (xy 188.62 134.772) (xy 188.62 135.83925) (xy 188.75125 135.9705) (xy 189.397929 135.9705) (xy 189.590889 135.890574)
+ (xy 189.738574 135.742889) (xy 189.8185 135.549929) (xy 189.8185 136.992071) (xy 189.738574 136.799111) (xy 189.590889 136.651426)
+ (xy 189.397929 136.5715) (xy 188.75125 136.5715) (xy 188.62 136.70275) (xy 188.62 137.77) (xy 189.68725 137.77)
+ (xy 189.8185 137.63875) (xy 189.8185 137.95125) (xy 189.68725 137.82) (xy 188.62 137.82) (xy 188.62 138.88725)
+ (xy 188.75125 139.0185) (xy 189.397929 139.0185) (xy 189.590889 138.938574) (xy 189.738574 138.790889) (xy 189.8185 138.597929)
+ (xy 189.8185 141.818071) (xy 189.738574 141.625111) (xy 189.590889 141.477426) (xy 189.397929 141.3975) (xy 188.75125 141.3975)
+ (xy 188.62 141.52875) (xy 188.62 142.596) (xy 189.68725 142.596) (xy 189.8185 142.46475) (xy 189.8185 142.77725)
+ (xy 189.68725 142.646) (xy 188.62 142.646) (xy 188.62 143.71325) (xy 188.75125 143.8445) (xy 189.397929 143.8445)
+ (xy 189.590889 143.764574) (xy 189.738574 143.616889) (xy 189.8185 143.423929) (xy 189.8185 149.655353) (xy 188.57 150.903853)
+ (xy 188.57 143.71325) (xy 188.57 142.646) (xy 188.57 142.596) (xy 188.57 141.52875) (xy 188.57 138.88725)
+ (xy 188.57 137.82) (xy 188.57 137.77) (xy 188.57 136.70275) (xy 188.57 135.83925) (xy 188.57 134.772)
+ (xy 188.57 134.722) (xy 188.57 133.65475) (xy 188.43875 133.5235) (xy 187.792071 133.5235) (xy 187.599111 133.603426)
+ (xy 187.451426 133.751111) (xy 187.3715 133.944071) (xy 187.3715 134.152929) (xy 187.3715 134.59075) (xy 187.50275 134.722)
+ (xy 188.57 134.722) (xy 188.57 134.772) (xy 187.50275 134.772) (xy 187.3715 134.90325) (xy 187.3715 135.341071)
+ (xy 187.3715 135.549929) (xy 187.451426 135.742889) (xy 187.599111 135.890574) (xy 187.792071 135.9705) (xy 188.43875 135.9705)
+ (xy 188.57 135.83925) (xy 188.57 136.70275) (xy 188.43875 136.5715) (xy 187.792071 136.5715) (xy 187.599111 136.651426)
+ (xy 187.451426 136.799111) (xy 187.3715 136.992071) (xy 187.3715 137.200929) (xy 187.3715 137.63875) (xy 187.50275 137.77)
+ (xy 188.57 137.77) (xy 188.57 137.82) (xy 187.50275 137.82) (xy 187.3715 137.95125) (xy 187.3715 138.389071)
+ (xy 187.3715 138.597929) (xy 187.451426 138.790889) (xy 187.599111 138.938574) (xy 187.792071 139.0185) (xy 188.43875 139.0185)
+ (xy 188.57 138.88725) (xy 188.57 141.52875) (xy 188.43875 141.3975) (xy 187.792071 141.3975) (xy 187.599111 141.477426)
+ (xy 187.451426 141.625111) (xy 187.3715 141.818071) (xy 187.3715 142.026929) (xy 187.3715 142.46475) (xy 187.50275 142.596)
+ (xy 188.57 142.596) (xy 188.57 142.646) (xy 187.50275 142.646) (xy 187.3715 142.77725) (xy 187.3715 143.215071)
+ (xy 187.3715 143.423929) (xy 187.451426 143.616889) (xy 187.599111 143.764574) (xy 187.792071 143.8445) (xy 188.43875 143.8445)
+ (xy 188.57 143.71325) (xy 188.57 150.903853) (xy 187.278712 152.195141) (xy 187.278712 142.378698) (xy 187.278712 137.552698)
+ (xy 187.278712 134.504698) (xy 187.092838 134.054848) (xy 186.748962 133.710372) (xy 186.299437 133.523713) (xy 186.075649 133.523517)
+ (xy 186.34946 133.410382) (xy 186.622423 133.137895) (xy 186.770332 132.781692) (xy 186.770668 132.396001) (xy 186.623382 132.03954)
+ (xy 186.350895 131.766577) (xy 185.994692 131.618668) (xy 185.609001 131.618332) (xy 185.25254 131.765618) (xy 184.979577 132.038105)
+ (xy 184.865668 132.312427) (xy 184.865668 125.919001) (xy 184.718382 125.56254) (xy 184.445895 125.289577) (xy 184.089692 125.141668)
+ (xy 183.752298 125.141374) (xy 183.849332 124.907692) (xy 183.849668 124.522001) (xy 183.849668 107.123001) (xy 183.702382 106.76654)
+ (xy 183.429895 106.493577) (xy 183.073692 106.345668) (xy 182.688001 106.345332) (xy 182.33154 106.492618) (xy 182.058577 106.765105)
+ (xy 181.910668 107.121308) (xy 181.910332 107.506999) (xy 181.915439 107.519359) (xy 181.778895 107.382577) (xy 181.422692 107.234668)
+ (xy 181.037001 107.234332) (xy 180.68054 107.381618) (xy 180.484355 107.57746) (xy 180.484355 99.289217) (xy 180.484355 90.399217)
+ (xy 180.484355 81.509217) (xy 180.484355 72.619217) (xy 180.17307 71.865851) (xy 179.597181 71.288955) (xy 178.844359 70.976357)
+ (xy 178.029217 70.975645) (xy 177.275851 71.28693) (xy 176.864661 71.697401) (xy 176.864668 71.690001) (xy 176.717382 71.33354)
+ (xy 176.444895 71.060577) (xy 176.088692 70.912668) (xy 175.703001 70.912332) (xy 175.34654 71.059618) (xy 175.073577 71.332105)
+ (xy 174.925668 71.688308) (xy 174.925332 72.073999) (xy 175.072618 72.43046) (xy 175.345105 72.703423) (xy 175.701308 72.851332)
+ (xy 176.086999 72.851668) (xy 176.386258 72.728016) (xy 176.385645 73.430783) (xy 176.69693 74.184149) (xy 177.272819 74.761045)
+ (xy 178.025641 75.073643) (xy 178.840783 75.074355) (xy 179.594149 74.76307) (xy 180.171045 74.187181) (xy 180.483643 73.434359)
+ (xy 180.484355 72.619217) (xy 180.484355 81.509217) (xy 180.17307 80.755851) (xy 179.597181 80.178955) (xy 178.844359 79.866357)
+ (xy 178.029217 79.865645) (xy 177.275851 80.17693) (xy 176.698955 80.752819) (xy 176.483507 81.271674) (xy 176.483668 81.088001)
+ (xy 176.336382 80.73154) (xy 176.063895 80.458577) (xy 175.707692 80.310668) (xy 175.322001 80.310332) (xy 174.96554 80.457618)
+ (xy 174.692577 80.730105) (xy 174.544668 81.086308) (xy 174.544332 81.471999) (xy 174.691618 81.82846) (xy 174.964105 82.101423)
+ (xy 175.320308 82.249332) (xy 175.705999 82.249668) (xy 176.06246 82.102382) (xy 176.335423 81.829895) (xy 176.38618 81.707657)
+ (xy 176.385645 82.320783) (xy 176.69693 83.074149) (xy 177.272819 83.651045) (xy 178.025641 83.963643) (xy 178.840783 83.964355)
+ (xy 179.594149 83.65307) (xy 180.171045 83.077181) (xy 180.483643 82.324359) (xy 180.484355 81.509217) (xy 180.484355 90.399217)
+ (xy 180.17307 89.645851) (xy 179.597181 89.068955) (xy 178.844359 88.756357) (xy 178.299318 88.75588) (xy 178.367423 88.687895)
+ (xy 178.515332 88.331692) (xy 178.515668 87.946001) (xy 178.368382 87.58954) (xy 178.095895 87.316577) (xy 177.739692 87.168668)
+ (xy 177.354001 87.168332) (xy 176.99754 87.315618) (xy 176.737668 87.575036) (xy 176.737668 85.406001) (xy 176.590382 85.04954)
+ (xy 176.317895 84.776577) (xy 175.961692 84.628668) (xy 175.576001 84.628332) (xy 175.21954 84.775618) (xy 174.946577 85.048105)
+ (xy 174.798668 85.404308) (xy 174.798332 85.789999) (xy 174.945618 86.14646) (xy 175.218105 86.419423) (xy 175.574308 86.567332)
+ (xy 175.959999 86.567668) (xy 176.31646 86.420382) (xy 176.589423 86.147895) (xy 176.737332 85.791692) (xy 176.737668 85.406001)
+ (xy 176.737668 87.575036) (xy 176.724577 87.588105) (xy 176.576668 87.944308) (xy 176.576332 88.329999) (xy 176.723618 88.68646)
+ (xy 176.996105 88.959423) (xy 177.269728 89.073041) (xy 176.698955 89.642819) (xy 176.386357 90.395641) (xy 176.385645 91.210783)
+ (xy 176.69693 91.964149) (xy 177.272819 92.541045) (xy 178.025641 92.853643) (xy 178.840783 92.854355) (xy 179.594149 92.54307)
+ (xy 180.171045 91.967181) (xy 180.483643 91.214359) (xy 180.484355 90.399217) (xy 180.484355 99.289217) (xy 180.17307 98.535851)
+ (xy 179.597181 97.958955) (xy 178.844359 97.646357) (xy 178.029217 97.645645) (xy 177.275851 97.95693) (xy 176.698955 98.532819)
+ (xy 176.386357 99.285641) (xy 176.385645 100.100783) (xy 176.69693 100.854149) (xy 177.272819 101.431045) (xy 178.025641 101.743643)
+ (xy 178.840783 101.744355) (xy 179.594149 101.43307) (xy 180.171045 100.857181) (xy 180.483643 100.104359) (xy 180.484355 99.289217)
+ (xy 180.484355 107.57746) (xy 180.407577 107.654105) (xy 180.337306 107.823333) (xy 180.17307 107.425851) (xy 179.597181 106.848955)
+ (xy 178.844359 106.536357) (xy 178.029217 106.535645) (xy 177.275851 106.84693) (xy 176.698955 107.422819) (xy 176.386357 108.175641)
+ (xy 176.385645 108.990783) (xy 176.69693 109.744149) (xy 177.272819 110.321045) (xy 178.025641 110.633643) (xy 178.840783 110.634355)
+ (xy 179.594149 110.32307) (xy 180.171045 109.747181) (xy 180.483643 108.994359) (xy 180.483786 108.829763) (xy 180.679105 109.025423)
+ (xy 181.035308 109.173332) (xy 181.420999 109.173668) (xy 181.77746 109.026382) (xy 182.050423 108.753895) (xy 182.198332 108.397692)
+ (xy 182.198668 108.012001) (xy 182.19356 107.99964) (xy 182.330105 108.136423) (xy 182.686308 108.284332) (xy 183.071999 108.284668)
+ (xy 183.42846 108.137382) (xy 183.701423 107.864895) (xy 183.849332 107.508692) (xy 183.849668 107.123001) (xy 183.849668 124.522001)
+ (xy 183.702382 124.16554) (xy 183.429895 123.892577) (xy 183.073692 123.744668) (xy 182.960668 123.744569) (xy 182.960668 115.124001)
+ (xy 182.813382 114.76754) (xy 182.540895 114.494577) (xy 182.184692 114.346668) (xy 181.799001 114.346332) (xy 181.44254 114.493618)
+ (xy 181.169577 114.766105) (xy 181.021668 115.122308) (xy 181.021332 115.507999) (xy 181.168618 115.86446) (xy 181.441105 116.137423)
+ (xy 181.797308 116.285332) (xy 182.182999 116.285668) (xy 182.53946 116.138382) (xy 182.812423 115.865895) (xy 182.960332 115.509692)
+ (xy 182.960668 115.124001) (xy 182.960668 123.744569) (xy 182.688001 123.744332) (xy 182.33154 123.891618) (xy 182.058577 124.164105)
+ (xy 181.910668 124.520308) (xy 181.910332 124.905999) (xy 182.057618 125.26246) (xy 182.330105 125.535423) (xy 182.686308 125.683332)
+ (xy 183.023701 125.683625) (xy 182.926668 125.917308) (xy 182.926332 126.302999) (xy 183.073618 126.65946) (xy 183.346105 126.932423)
+ (xy 183.702308 127.080332) (xy 184.087999 127.080668) (xy 184.44446 126.933382) (xy 184.717423 126.660895) (xy 184.865332 126.304692)
+ (xy 184.865668 125.919001) (xy 184.865668 132.312427) (xy 184.831668 132.394308) (xy 184.831332 132.779999) (xy 184.978618 133.13646)
+ (xy 185.251105 133.409423) (xy 185.607308 133.557332) (xy 185.730046 133.557438) (xy 185.362848 133.709162) (xy 185.018372 134.053038)
+ (xy 184.831713 134.502563) (xy 184.831288 134.989302) (xy 185.017162 135.439152) (xy 185.361038 135.783628) (xy 185.810563 135.970287)
+ (xy 186.297302 135.970712) (xy 186.747152 135.784838) (xy 187.091628 135.440962) (xy 187.278287 134.991437) (xy 187.278712 134.504698)
+ (xy 187.278712 137.552698) (xy 187.092838 137.102848) (xy 186.748962 136.758372) (xy 186.299437 136.571713) (xy 185.812698 136.571288)
+ (xy 185.362848 136.757162) (xy 185.018372 137.101038) (xy 184.831713 137.550563) (xy 184.831288 138.037302) (xy 185.017162 138.487152)
+ (xy 185.361038 138.831628) (xy 185.810563 139.018287) (xy 186.297302 139.018712) (xy 186.747152 138.832838) (xy 187.091628 138.488962)
+ (xy 187.278287 138.039437) (xy 187.278712 137.552698) (xy 187.278712 142.378698) (xy 187.092838 141.928848) (xy 186.748962 141.584372)
+ (xy 186.299437 141.397713) (xy 185.812698 141.397288) (xy 185.362848 141.583162) (xy 185.018372 141.927038) (xy 184.831713 142.376563)
+ (xy 184.831288 142.863302) (xy 185.017162 143.313152) (xy 185.361038 143.657628) (xy 185.810563 143.844287) (xy 186.297302 143.844712)
+ (xy 186.747152 143.658838) (xy 187.091628 143.314962) (xy 187.278287 142.865437) (xy 187.278712 142.378698) (xy 187.278712 152.195141)
+ (xy 185.295311 154.178542) (xy 184.738712 154.176401) (xy 184.738712 142.378698) (xy 184.738712 137.552698) (xy 184.738712 134.504698)
+ (xy 184.552838 134.054848) (xy 184.208962 133.710372) (xy 183.759437 133.523713) (xy 183.272698 133.523288) (xy 182.822848 133.709162)
+ (xy 182.478372 134.053038) (xy 182.291713 134.502563) (xy 182.291288 134.989302) (xy 182.477162 135.439152) (xy 182.821038 135.783628)
+ (xy 183.270563 135.970287) (xy 183.757302 135.970712) (xy 184.207152 135.784838) (xy 184.551628 135.440962) (xy 184.738287 134.991437)
+ (xy 184.738712 134.504698) (xy 184.738712 137.552698) (xy 184.552838 137.102848) (xy 184.208962 136.758372) (xy 183.759437 136.571713)
+ (xy 183.272698 136.571288) (xy 182.822848 136.757162) (xy 182.478372 137.101038) (xy 182.291713 137.550563) (xy 182.291288 138.037302)
+ (xy 182.477162 138.487152) (xy 182.821038 138.831628) (xy 183.270563 139.018287) (xy 183.757302 139.018712) (xy 184.207152 138.832838)
+ (xy 184.551628 138.488962) (xy 184.738287 138.039437) (xy 184.738712 137.552698) (xy 184.738712 142.378698) (xy 184.552838 141.928848)
+ (xy 184.208962 141.584372) (xy 183.759437 141.397713) (xy 183.272698 141.397288) (xy 182.822848 141.583162) (xy 182.478372 141.927038)
+ (xy 182.291713 142.376563) (xy 182.291288 142.863302) (xy 182.477162 143.313152) (xy 182.821038 143.657628) (xy 183.270563 143.844287)
+ (xy 183.757302 143.844712) (xy 184.207152 143.658838) (xy 184.551628 143.314962) (xy 184.738287 142.865437) (xy 184.738712 142.378698)
+ (xy 184.738712 154.176401) (xy 182.198712 154.166632) (xy 182.198712 142.378698) (xy 182.198712 137.552698) (xy 182.198712 134.504698)
+ (xy 182.012838 134.054848) (xy 181.668962 133.710372) (xy 181.219437 133.523713) (xy 180.732698 133.523288) (xy 180.484355 133.625901)
+ (xy 180.484355 125.959217) (xy 180.484355 117.069217) (xy 180.17307 116.315851) (xy 179.597181 115.738955) (xy 178.844359 115.426357)
+ (xy 178.029217 115.425645) (xy 177.275851 115.73693) (xy 176.698955 116.312819) (xy 176.386357 117.065641) (xy 176.385645 117.880783)
+ (xy 176.69693 118.634149) (xy 177.272819 119.211045) (xy 178.025641 119.523643) (xy 178.840783 119.524355) (xy 179.594149 119.21307)
+ (xy 180.171045 118.637181) (xy 180.483643 117.884359) (xy 180.484355 117.069217) (xy 180.484355 125.959217) (xy 180.17307 125.205851)
+ (xy 179.597181 124.628955) (xy 178.844359 124.316357) (xy 178.029217 124.315645) (xy 177.275851 124.62693) (xy 176.698955 125.202819)
+ (xy 176.386357 125.955641) (xy 176.385645 126.770783) (xy 176.69693 127.524149) (xy 177.272819 128.101045) (xy 178.025641 128.413643)
+ (xy 178.840783 128.414355) (xy 179.594149 128.10307) (xy 180.171045 127.527181) (xy 180.483643 126.774359) (xy 180.484355 125.959217)
+ (xy 180.484355 133.625901) (xy 180.282848 133.709162) (xy 179.938372 134.053038) (xy 179.751713 134.502563) (xy 179.751288 134.989302)
+ (xy 179.937162 135.439152) (xy 180.281038 135.783628) (xy 180.730563 135.970287) (xy 181.217302 135.970712) (xy 181.667152 135.784838)
+ (xy 182.011628 135.440962) (xy 182.198287 134.991437) (xy 182.198712 134.504698) (xy 182.198712 137.552698) (xy 182.012838 137.102848)
+ (xy 181.668962 136.758372) (xy 181.219437 136.571713) (xy 180.732698 136.571288) (xy 180.282848 136.757162) (xy 179.938372 137.101038)
+ (xy 179.751713 137.550563) (xy 179.751288 138.037302) (xy 179.937162 138.487152) (xy 180.281038 138.831628) (xy 180.730563 139.018287)
+ (xy 181.217302 139.018712) (xy 181.667152 138.832838) (xy 182.011628 138.488962) (xy 182.198287 138.039437) (xy 182.198712 137.552698)
+ (xy 182.198712 142.378698) (xy 182.012838 141.928848) (xy 181.668962 141.584372) (xy 181.219437 141.397713) (xy 180.732698 141.397288)
+ (xy 180.282848 141.583162) (xy 179.938372 141.927038) (xy 179.751713 142.376563) (xy 179.751288 142.863302) (xy 179.937162 143.313152)
+ (xy 180.281038 143.657628) (xy 180.730563 143.844287) (xy 181.217302 143.844712) (xy 181.667152 143.658838) (xy 182.011628 143.314962)
+ (xy 182.198287 142.865437) (xy 182.198712 142.378698) (xy 182.198712 154.166632) (xy 179.658712 154.156862) (xy 179.658712 142.378698)
+ (xy 179.658712 137.552698) (xy 179.658712 134.504698) (xy 179.472838 134.054848) (xy 179.128962 133.710372) (xy 178.679437 133.523713)
+ (xy 178.192698 133.523288) (xy 177.742848 133.709162) (xy 177.398372 134.053038) (xy 177.211713 134.502563) (xy 177.211288 134.989302)
+ (xy 177.397162 135.439152) (xy 177.741038 135.783628) (xy 178.190563 135.970287) (xy 178.677302 135.970712) (xy 179.127152 135.784838)
+ (xy 179.471628 135.440962) (xy 179.658287 134.991437) (xy 179.658712 134.504698) (xy 179.658712 137.552698) (xy 179.472838 137.102848)
+ (xy 179.128962 136.758372) (xy 178.679437 136.571713) (xy 178.192698 136.571288) (xy 177.742848 136.757162) (xy 177.398372 137.101038)
+ (xy 177.211713 137.550563) (xy 177.211288 138.037302) (xy 177.397162 138.487152) (xy 177.741038 138.831628) (xy 178.190563 139.018287)
+ (xy 178.677302 139.018712) (xy 179.127152 138.832838) (xy 179.471628 138.488962) (xy 179.658287 138.039437) (xy 179.658712 137.552698)
+ (xy 179.658712 142.378698) (xy 179.472838 141.928848) (xy 179.128962 141.584372) (xy 178.679437 141.397713) (xy 178.192698 141.397288)
+ (xy 177.742848 141.583162) (xy 177.398372 141.927038) (xy 177.211713 142.376563) (xy 177.211288 142.863302) (xy 177.397162 143.313152)
+ (xy 177.741038 143.657628) (xy 178.190563 143.844287) (xy 178.677302 143.844712) (xy 179.127152 143.658838) (xy 179.471628 143.314962)
+ (xy 179.658287 142.865437) (xy 179.658712 142.378698) (xy 179.658712 154.156862) (xy 177.118712 154.147093) (xy 177.118712 142.378698)
+ (xy 177.118712 137.552698) (xy 177.118712 134.504698) (xy 176.932838 134.054848) (xy 176.588962 133.710372) (xy 176.356668 133.613915)
+ (xy 176.356668 110.806001) (xy 176.356668 105.853001) (xy 176.209382 105.49654) (xy 175.936895 105.223577) (xy 175.580692 105.075668)
+ (xy 175.195001 105.075332) (xy 174.83854 105.222618) (xy 174.565577 105.495105) (xy 174.417668 105.851308) (xy 174.417332 106.236999)
+ (xy 174.564618 106.59346) (xy 174.837105 106.866423) (xy 175.193308 107.014332) (xy 175.578999 107.014668) (xy 175.93546 106.867382)
+ (xy 176.208423 106.594895) (xy 176.356332 106.238692) (xy 176.356668 105.853001) (xy 176.356668 110.806001) (xy 176.209382 110.44954)
+ (xy 175.936895 110.176577) (xy 175.580692 110.028668) (xy 175.195001 110.028332) (xy 174.83854 110.175618) (xy 174.565577 110.448105)
+ (xy 174.417668 110.804308) (xy 174.417332 111.189999) (xy 174.564618 111.54646) (xy 174.837105 111.819423) (xy 175.193308 111.967332)
+ (xy 175.578999 111.967668) (xy 175.93546 111.820382) (xy 176.208423 111.547895) (xy 176.356332 111.191692) (xy 176.356668 110.806001)
+ (xy 176.356668 133.613915) (xy 176.139437 133.523713) (xy 175.652698 133.523288) (xy 175.202848 133.709162) (xy 174.858372 134.053038)
+ (xy 174.671713 134.502563) (xy 174.671288 134.989302) (xy 174.857162 135.439152) (xy 175.201038 135.783628) (xy 175.650563 135.970287)
+ (xy 176.137302 135.970712) (xy 176.587152 135.784838) (xy 176.931628 135.440962) (xy 177.118287 134.991437) (xy 177.118712 134.504698)
+ (xy 177.118712 137.552698) (xy 176.932838 137.102848) (xy 176.588962 136.758372) (xy 176.139437 136.571713) (xy 175.652698 136.571288)
+ (xy 175.202848 136.757162) (xy 174.858372 137.101038) (xy 174.671713 137.550563) (xy 174.671288 138.037302) (xy 174.857162 138.487152)
+ (xy 175.201038 138.831628) (xy 175.650563 139.018287) (xy 176.137302 139.018712) (xy 176.587152 138.832838) (xy 176.931628 138.488962)
+ (xy 177.118287 138.039437) (xy 177.118712 137.552698) (xy 177.118712 142.378698) (xy 176.932838 141.928848) (xy 176.588962 141.584372)
+ (xy 176.139437 141.397713) (xy 175.652698 141.397288) (xy 175.202848 141.583162) (xy 174.858372 141.927038) (xy 174.671713 142.376563)
+ (xy 174.671288 142.863302) (xy 174.857162 143.313152) (xy 175.201038 143.657628) (xy 175.650563 143.844287) (xy 176.137302 143.844712)
+ (xy 176.587152 143.658838) (xy 176.931628 143.314962) (xy 177.118287 142.865437) (xy 177.118712 142.378698) (xy 177.118712 154.147093)
+ (xy 174.578712 154.137324) (xy 174.578712 142.378698) (xy 174.578712 137.552698) (xy 174.578712 134.504698) (xy 174.392838 134.054848)
+ (xy 174.048962 133.710372) (xy 173.599437 133.523713) (xy 173.308668 133.523459) (xy 173.308668 125.284001) (xy 173.308668 110.806001)
+ (xy 173.161382 110.44954) (xy 172.888895 110.176577) (xy 172.572889 110.045359) (xy 172.88746 109.915382) (xy 173.160423 109.642895)
+ (xy 173.308332 109.286692) (xy 173.308668 108.901001) (xy 173.308668 95.820001) (xy 173.161382 95.46354) (xy 172.9656 95.267415)
+ (xy 172.9656 90.678) (xy 172.920558 90.451562) (xy 173.033423 90.338895) (xy 173.181332 89.982692) (xy 173.181668 89.597001)
+ (xy 173.181668 84.517001) (xy 173.034382 84.16054) (xy 172.761895 83.887577) (xy 172.405692 83.739668) (xy 172.020001 83.739332)
+ (xy 171.66354 83.886618) (xy 171.390577 84.159105) (xy 171.242668 84.515308) (xy 171.242332 84.900999) (xy 171.389618 85.25746)
+ (xy 171.662105 85.530423) (xy 172.018308 85.678332) (xy 172.403999 85.678668) (xy 172.76046 85.531382) (xy 173.033423 85.258895)
+ (xy 173.181332 84.902692) (xy 173.181668 84.517001) (xy 173.181668 89.597001) (xy 173.034382 89.24054) (xy 172.761895 88.967577)
+ (xy 172.405692 88.819668) (xy 172.020001 88.819332) (xy 171.66354 88.966618) (xy 171.390577 89.239105) (xy 171.242668 89.595308)
+ (xy 171.242332 89.980999) (xy 171.389618 90.33746) (xy 171.5854 90.533584) (xy 171.5854 90.551) (xy 171.633097 90.79079)
+ (xy 171.7124 90.909474) (xy 171.7124 95.267621) (xy 171.517577 95.462105) (xy 171.369668 95.818308) (xy 171.369332 96.203999)
+ (xy 171.516618 96.56046) (xy 171.789105 96.833423) (xy 172.145308 96.981332) (xy 172.530999 96.981668) (xy 172.88746 96.834382)
+ (xy 173.160423 96.561895) (xy 173.308332 96.205692) (xy 173.308668 95.820001) (xy 173.308668 108.901001) (xy 173.161382 108.54454)
+ (xy 173.054668 108.437639) (xy 173.054668 100.265001) (xy 172.907382 99.90854) (xy 172.634895 99.635577) (xy 172.278692 99.487668)
+ (xy 171.893001 99.487332) (xy 171.53654 99.634618) (xy 171.263577 99.907105) (xy 171.149668 100.181427) (xy 171.149668 93.915001)
+ (xy 171.149668 89.470001) (xy 171.002382 89.11354) (xy 170.729895 88.840577) (xy 170.373692 88.692668) (xy 169.988001 88.692332)
+ (xy 169.63154 88.839618) (xy 169.358577 89.112105) (xy 169.210668 89.468308) (xy 169.210332 89.853999) (xy 169.357618 90.21046)
+ (xy 169.630105 90.483423) (xy 169.986308 90.631332) (xy 170.371999 90.631668) (xy 170.72846 90.484382) (xy 171.001423 90.211895)
+ (xy 171.149332 89.855692) (xy 171.149668 89.470001) (xy 171.149668 93.915001) (xy 171.002382 93.55854) (xy 170.729895 93.285577)
+ (xy 170.373692 93.137668) (xy 170.13346 93.137458) (xy 170.133668 92.899001) (xy 169.986382 92.54254) (xy 169.713895 92.269577)
+ (xy 169.357692 92.121668) (xy 168.990668 92.121348) (xy 168.990668 86.676001) (xy 168.843382 86.31954) (xy 168.570895 86.046577)
+ (xy 168.214692 85.898668) (xy 167.829001 85.898332) (xy 167.593668 85.995569) (xy 167.593668 82.739001) (xy 167.593668 63.689001)
+ (xy 167.446382 63.33254) (xy 167.173895 63.059577) (xy 166.817692 62.911668) (xy 166.432001 62.911332) (xy 166.07554 63.058618)
+ (xy 165.989088 63.144919) (xy 165.903895 63.059577) (xy 165.547692 62.911668) (xy 165.162001 62.911332) (xy 164.80554 63.058618)
+ (xy 164.532577 63.331105) (xy 164.384668 63.687308) (xy 164.384458 63.92765) (xy 164.019001 63.927332) (xy 163.66254 64.074618)
+ (xy 163.389577 64.347105) (xy 163.241668 64.703308) (xy 163.241332 65.088999) (xy 163.388618 65.44546) (xy 163.661105 65.718423)
+ (xy 164.017308 65.866332) (xy 164.402999 65.866668) (xy 164.75946 65.719382) (xy 165.032423 65.446895) (xy 165.180332 65.090692)
+ (xy 165.180541 64.850349) (xy 165.545999 64.850668) (xy 165.90246 64.703382) (xy 165.988911 64.61708) (xy 166.074105 64.702423)
+ (xy 166.430308 64.850332) (xy 166.815999 64.850668) (xy 167.17246 64.703382) (xy 167.445423 64.430895) (xy 167.593332 64.074692)
+ (xy 167.593668 63.689001) (xy 167.593668 82.739001) (xy 167.446382 82.38254) (xy 167.173895 82.109577) (xy 166.817692 81.961668)
+ (xy 166.432001 81.961332) (xy 166.07554 82.108618) (xy 165.989088 82.194919) (xy 165.903895 82.109577) (xy 165.561668 81.967471)
+ (xy 165.561668 70.674001) (xy 165.414382 70.31754) (xy 165.141895 70.044577) (xy 164.785692 69.896668) (xy 164.400001 69.896332)
+ (xy 164.04354 70.043618) (xy 163.770577 70.316105) (xy 163.622668 70.672308) (xy 163.622332 71.057999) (xy 163.769618 71.41446)
+ (xy 164.042105 71.687423) (xy 164.398308 71.835332) (xy 164.783999 71.835668) (xy 165.14046 71.688382) (xy 165.413423 71.415895)
+ (xy 165.561332 71.059692) (xy 165.561668 70.674001) (xy 165.561668 81.967471) (xy 165.547692 81.961668) (xy 165.180668 81.961348)
+ (xy 165.180668 79.284601) (xy 165.033382 78.92814) (xy 165.02328 78.918021) (xy 165.032423 78.908895) (xy 165.180332 78.552692)
+ (xy 165.180668 78.167001) (xy 165.033382 77.81054) (xy 164.760895 77.537577) (xy 164.404692 77.389668) (xy 164.019001 77.389332)
+ (xy 163.66254 77.536618) (xy 163.389577 77.809105) (xy 163.241668 78.165308) (xy 163.241332 78.550999) (xy 163.388618 78.90746)
+ (xy 163.398719 78.917578) (xy 163.389577 78.926705) (xy 163.241668 79.282908) (xy 163.241332 79.668599) (xy 163.388618 80.02506)
+ (xy 163.661105 80.298023) (xy 164.017308 80.445932) (xy 164.402999 80.446268) (xy 164.75946 80.298982) (xy 165.032423 80.026495)
+ (xy 165.180332 79.670292) (xy 165.180668 79.284601) (xy 165.180668 81.961348) (xy 165.162001 81.961332) (xy 164.80554 82.108618)
+ (xy 164.532577 82.381105) (xy 164.384668 82.737308) (xy 164.384332 83.122999) (xy 164.531618 83.47946) (xy 164.804105 83.752423)
+ (xy 165.160308 83.900332) (xy 165.545999 83.900668) (xy 165.90246 83.753382) (xy 165.988911 83.66708) (xy 166.074105 83.752423)
+ (xy 166.430308 83.900332) (xy 166.815999 83.900668) (xy 167.17246 83.753382) (xy 167.445423 83.480895) (xy 167.593332 83.124692)
+ (xy 167.593668 82.739001) (xy 167.593668 85.995569) (xy 167.47254 86.045618) (xy 167.199577 86.318105) (xy 167.051668 86.674308)
+ (xy 167.051332 87.059999) (xy 167.198618 87.41646) (xy 167.471105 87.689423) (xy 167.827308 87.837332) (xy 168.212999 87.837668)
+ (xy 168.56946 87.690382) (xy 168.842423 87.417895) (xy 168.990332 87.061692) (xy 168.990668 86.676001) (xy 168.990668 92.121348)
+ (xy 168.972001 92.121332) (xy 168.61554 92.268618) (xy 168.419415 92.4644) (xy 166.577668 92.4644) (xy 166.577668 85.660001)
+ (xy 166.430382 85.30354) (xy 166.157895 85.030577) (xy 165.801692 84.882668) (xy 165.416001 84.882332) (xy 165.05954 85.029618)
+ (xy 164.786577 85.302105) (xy 164.638668 85.658308) (xy 164.638332 86.043999) (xy 164.785618 86.40046) (xy 165.058105 86.673423)
+ (xy 165.414308 86.821332) (xy 165.799999 86.821668) (xy 166.15646 86.674382) (xy 166.429423 86.401895) (xy 166.577332 86.045692)
+ (xy 166.577668 85.660001) (xy 166.577668 92.4644) (xy 166.450668 92.4644) (xy 166.450668 90.740001) (xy 166.303382 90.38354)
+ (xy 166.21708 90.297088) (xy 166.302423 90.211895) (xy 166.450332 89.855692) (xy 166.450668 89.470001) (xy 166.303382 89.11354)
+ (xy 166.030895 88.840577) (xy 165.674692 88.692668) (xy 165.289001 88.692332) (xy 164.93254 88.839618) (xy 164.736415 89.0354)
+ (xy 163.160754 89.0354) (xy 163.254423 88.941895) (xy 163.402332 88.585692) (xy 163.402668 88.200001) (xy 163.255382 87.84354)
+ (xy 163.16908 87.757088) (xy 163.254423 87.671895) (xy 163.402332 87.315692) (xy 163.402668 86.930001) (xy 163.255382 86.57354)
+ (xy 162.982895 86.300577) (xy 162.626692 86.152668) (xy 162.241001 86.152332) (xy 162.005668 86.249569) (xy 162.005668 75.246001)
+ (xy 161.858382 74.88954) (xy 161.751668 74.782639) (xy 161.751668 67.880001) (xy 161.604382 67.52354) (xy 161.331895 67.250577)
+ (xy 160.975692 67.102668) (xy 160.590001 67.102332) (xy 160.23354 67.249618) (xy 159.960577 67.522105) (xy 159.812668 67.878308)
+ (xy 159.812332 68.263999) (xy 159.959618 68.62046) (xy 160.232105 68.893423) (xy 160.588308 69.041332) (xy 160.973999 69.041668)
+ (xy 161.33046 68.894382) (xy 161.603423 68.621895) (xy 161.751332 68.265692) (xy 161.751668 67.880001) (xy 161.751668 74.782639)
+ (xy 161.585895 74.616577) (xy 161.229692 74.468668) (xy 160.844001 74.468332) (xy 160.48754 74.615618) (xy 160.227668 74.875036)
+ (xy 160.227668 71.309001) (xy 160.080382 70.95254) (xy 159.807895 70.679577) (xy 159.451692 70.531668) (xy 159.066001 70.531332)
+ (xy 158.70954 70.678618) (xy 158.436577 70.951105) (xy 158.288668 71.307308) (xy 158.288332 71.692999) (xy 158.435618 72.04946)
+ (xy 158.708105 72.322423) (xy 159.064308 72.470332) (xy 159.449999 72.470668) (xy 159.80646 72.323382) (xy 160.079423 72.050895)
+ (xy 160.227332 71.694692) (xy 160.227668 71.309001) (xy 160.227668 74.875036) (xy 160.214577 74.888105) (xy 160.072382 75.230544)
+ (xy 159.828001 75.230332) (xy 159.47154 75.377618) (xy 159.198577 75.650105) (xy 159.050668 76.006308) (xy 159.050332 76.391999)
+ (xy 159.197618 76.74846) (xy 159.470105 77.021423) (xy 159.826308 77.169332) (xy 160.211999 77.169668) (xy 160.56846 77.022382)
+ (xy 160.841423 76.749895) (xy 160.983617 76.407455) (xy 161.227999 76.407668) (xy 161.58446 76.260382) (xy 161.857423 75.987895)
+ (xy 162.005332 75.631692) (xy 162.005668 75.246001) (xy 162.005668 86.249569) (xy 161.88454 86.299618) (xy 161.611577 86.572105)
+ (xy 161.599972 86.60005) (xy 161.599972 86.600051) (xy 161.481927 86.678927) (xy 160.989457 87.171396) (xy 160.989668 86.930001)
+ (xy 160.989668 81.088001) (xy 160.842382 80.73154) (xy 160.569895 80.458577) (xy 160.213692 80.310668) (xy 159.828001 80.310332)
+ (xy 159.47154 80.457618) (xy 159.198577 80.730105) (xy 159.050668 81.086308) (xy 159.050332 81.471999) (xy 159.197618 81.82846)
+ (xy 159.470105 82.101423) (xy 159.826308 82.249332) (xy 160.211999 82.249668) (xy 160.56846 82.102382) (xy 160.841423 81.829895)
+ (xy 160.989332 81.473692) (xy 160.989668 81.088001) (xy 160.989668 86.930001) (xy 160.842382 86.57354) (xy 160.569895 86.300577)
+ (xy 160.213692 86.152668) (xy 159.828001 86.152332) (xy 159.47154 86.299618) (xy 159.198577 86.572105) (xy 159.050668 86.928308)
+ (xy 159.050332 87.313999) (xy 159.197618 87.67046) (xy 159.470105 87.943423) (xy 159.826308 88.091332) (xy 160.06931 88.091543)
+ (xy 159.633454 88.5274) (xy 156.417668 88.5274) (xy 156.417668 71.309001) (xy 156.270382 70.95254) (xy 155.997895 70.679577)
+ (xy 155.641692 70.531668) (xy 155.256001 70.531332) (xy 154.89954 70.678618) (xy 154.626577 70.951105) (xy 154.478668 71.307308)
+ (xy 154.478332 71.692999) (xy 154.625618 72.04946) (xy 154.898105 72.322423) (xy 155.254308 72.470332) (xy 155.639999 72.470668)
+ (xy 155.99646 72.323382) (xy 156.269423 72.050895) (xy 156.417332 71.694692) (xy 156.417668 71.309001) (xy 156.417668 88.5274)
+ (xy 156.036668 88.5274) (xy 156.036668 84.898001) (xy 156.036668 81.215001) (xy 155.889382 80.85854) (xy 155.616895 80.585577)
+ (xy 155.260692 80.437668) (xy 154.875001 80.437332) (xy 154.51854 80.584618) (xy 154.245577 80.857105) (xy 154.097668 81.213308)
+ (xy 154.097332 81.598999) (xy 154.244618 81.95546) (xy 154.517105 82.228423) (xy 154.873308 82.376332) (xy 155.258999 82.376668)
+ (xy 155.61546 82.229382) (xy 155.888423 81.956895) (xy 156.036332 81.600692) (xy 156.036668 81.215001) (xy 156.036668 84.898001)
+ (xy 155.889382 84.54154) (xy 155.616895 84.268577) (xy 155.260692 84.120668) (xy 154.875001 84.120332) (xy 154.51854 84.267618)
+ (xy 154.258668 84.527036) (xy 154.258668 82.104001) (xy 154.111382 81.74754) (xy 154.004668 81.640639) (xy 154.004668 75.500001)
+ (xy 153.857382 75.14354) (xy 153.584895 74.870577) (xy 153.228692 74.722668) (xy 152.843001 74.722332) (xy 152.48654 74.869618)
+ (xy 152.213577 75.142105) (xy 152.065668 75.498308) (xy 152.065332 75.883999) (xy 152.212618 76.24046) (xy 152.485105 76.513423)
+ (xy 152.841308 76.661332) (xy 153.226999 76.661668) (xy 153.58346 76.514382) (xy 153.856423 76.241895) (xy 154.004332 75.885692)
+ (xy 154.004668 75.500001) (xy 154.004668 81.640639) (xy 153.838895 81.474577) (xy 153.482692 81.326668) (xy 153.097001 81.326332)
+ (xy 152.74054 81.473618) (xy 152.467577 81.746105) (xy 152.319668 82.102308) (xy 152.319332 82.487999) (xy 152.466618 82.84446)
+ (xy 152.739105 83.117423) (xy 153.095308 83.265332) (xy 153.480999 83.265668) (xy 153.83746 83.118382) (xy 154.110423 82.845895)
+ (xy 154.258332 82.489692) (xy 154.258668 82.104001) (xy 154.258668 84.527036) (xy 154.245577 84.540105) (xy 154.097668 84.896308)
+ (xy 154.097332 85.281999) (xy 154.244618 85.63846) (xy 154.517105 85.911423) (xy 154.873308 86.059332) (xy 155.258999 86.059668)
+ (xy 155.61546 85.912382) (xy 155.888423 85.639895) (xy 156.036332 85.283692) (xy 156.036668 84.898001) (xy 156.036668 88.5274)
+ (xy 152.226668 88.5274) (xy 152.226668 77.278001) (xy 152.079382 76.92154) (xy 151.806895 76.648577) (xy 151.450692 76.500668)
+ (xy 151.065001 76.500332) (xy 150.70854 76.647618) (xy 150.435577 76.920105) (xy 150.287668 77.276308) (xy 150.287332 77.661999)
+ (xy 150.434618 78.01846) (xy 150.707105 78.291423) (xy 151.063308 78.439332) (xy 151.448999 78.439668) (xy 151.80546 78.292382)
+ (xy 152.078423 78.019895) (xy 152.226332 77.663692) (xy 152.226668 77.278001) (xy 152.226668 88.5274) (xy 149.611546 88.5274)
+ (xy 148.797668 87.713522) (xy 148.797668 74.230001) (xy 148.650382 73.87354) (xy 148.377895 73.600577) (xy 148.021692 73.452668)
+ (xy 147.636001 73.452332) (xy 147.27954 73.599618) (xy 147.019668 73.859036) (xy 147.019668 67.880001) (xy 146.872382 67.52354)
+ (xy 146.599895 67.250577) (xy 146.243692 67.102668) (xy 145.858001 67.102332) (xy 145.50154 67.249618) (xy 145.228577 67.522105)
+ (xy 145.080668 67.878308) (xy 145.080332 68.263999) (xy 145.227618 68.62046) (xy 145.500105 68.893423) (xy 145.856308 69.041332)
+ (xy 146.241999 69.041668) (xy 146.59846 68.894382) (xy 146.871423 68.621895) (xy 147.019332 68.265692) (xy 147.019668 67.880001)
+ (xy 147.019668 73.859036) (xy 147.006577 73.872105) (xy 146.858668 74.228308) (xy 146.858332 74.613999) (xy 147.005618 74.97046)
+ (xy 147.278105 75.243423) (xy 147.634308 75.391332) (xy 148.019999 75.391668) (xy 148.37646 75.244382) (xy 148.649423 74.971895)
+ (xy 148.797332 74.615692) (xy 148.797668 74.230001) (xy 148.797668 87.713522) (xy 148.271073 87.186927) (xy 148.153454 87.108336)
+ (xy 148.153453 87.108336) (xy 148.142382 87.08154) (xy 147.869895 86.808577) (xy 147.513692 86.660668) (xy 147.128001 86.660332)
+ (xy 146.77154 86.807618) (xy 146.498577 87.080105) (xy 146.350668 87.436308) (xy 146.350332 87.821999) (xy 146.497618 88.17846)
+ (xy 146.583919 88.264911) (xy 146.498577 88.350105) (xy 146.350668 88.706308) (xy 146.350332 89.091999) (xy 146.497618 89.44846)
+ (xy 146.583919 89.534911) (xy 146.498577 89.620105) (xy 146.350668 89.976308) (xy 146.350332 90.361999) (xy 146.497618 90.71846)
+ (xy 146.583919 90.804911) (xy 146.498577 90.890105) (xy 146.350668 91.246308) (xy 146.350332 91.631999) (xy 146.497618 91.98846)
+ (xy 146.583919 92.074911) (xy 146.498577 92.160105) (xy 146.350668 92.516308) (xy 146.350332 92.901999) (xy 146.497618 93.25846)
+ (xy 146.583919 93.344911) (xy 146.498577 93.430105) (xy 146.350668 93.786308) (xy 146.350332 94.171999) (xy 146.497618 94.52846)
+ (xy 146.583919 94.614911) (xy 146.498577 94.700105) (xy 146.350668 95.056308) (xy 146.350332 95.441999) (xy 146.497618 95.79846)
+ (xy 146.583919 95.884911) (xy 146.498577 95.970105) (xy 146.350668 96.326308) (xy 146.350332 96.711999) (xy 146.426617 96.896625)
+ (xy 146.243692 96.820668) (xy 145.858001 96.820332) (xy 145.50154 96.967618) (xy 145.415088 97.053919) (xy 145.329895 96.968577)
+ (xy 144.973692 96.820668) (xy 144.588001 96.820332) (xy 144.23154 96.967618) (xy 144.145088 97.053919) (xy 144.059895 96.968577)
+ (xy 143.703692 96.820668) (xy 143.318001 96.820332) (xy 142.96154 96.967618) (xy 142.875088 97.053919) (xy 142.789895 96.968577)
+ (xy 142.701668 96.931941) (xy 142.701668 85.533001) (xy 142.554382 85.17654) (xy 142.281895 84.903577) (xy 141.925692 84.755668)
+ (xy 141.540001 84.755332) (xy 141.18354 84.902618) (xy 140.952741 85.133014) (xy 140.655692 85.009668) (xy 140.415668 85.009458)
+ (xy 140.415668 74.611001) (xy 140.268382 74.25454) (xy 139.995895 73.981577) (xy 139.639692 73.833668) (xy 139.254001 73.833332)
+ (xy 138.89754 73.980618) (xy 138.624577 74.253105) (xy 138.476668 74.609308) (xy 138.476332 74.994999) (xy 138.623618 75.35146)
+ (xy 138.896105 75.624423) (xy 139.252308 75.772332) (xy 139.637999 75.772668) (xy 139.99446 75.625382) (xy 140.267423 75.352895)
+ (xy 140.415332 74.996692) (xy 140.415668 74.611001) (xy 140.415668 85.009458) (xy 140.270001 85.009332) (xy 139.91354 85.156618)
+ (xy 139.640577 85.429105) (xy 139.498382 85.771544) (xy 139.254001 85.771332) (xy 138.89754 85.918618) (xy 138.624577 86.191105)
+ (xy 138.537048 86.401896) (xy 138.383668 86.338206) (xy 138.383668 74.611001) (xy 138.236382 74.25454) (xy 137.963895 73.981577)
+ (xy 137.607692 73.833668) (xy 137.222001 73.833332) (xy 136.86554 73.980618) (xy 136.592577 74.253105) (xy 136.444668 74.609308)
+ (xy 136.444332 74.994999) (xy 136.591618 75.35146) (xy 136.864105 75.624423) (xy 137.220308 75.772332) (xy 137.605999 75.772668)
+ (xy 137.96246 75.625382) (xy 138.235423 75.352895) (xy 138.383332 74.996692) (xy 138.383668 74.611001) (xy 138.383668 86.338206)
+ (xy 138.242692 86.279668) (xy 137.857001 86.279332) (xy 137.50054 86.426618) (xy 137.227577 86.699105) (xy 137.079668 87.055308)
+ (xy 137.079569 87.168429) (xy 136.968001 87.168332) (xy 136.7706 87.249896) (xy 136.7706 78.867) (xy 136.722903 78.627211)
+ (xy 136.722903 78.62721) (xy 136.587073 78.423927) (xy 135.1196 76.956454) (xy 135.1196 76.534382) (xy 135.446999 76.534668)
+ (xy 135.80346 76.387382) (xy 136.076423 76.114895) (xy 136.224332 75.758692) (xy 136.224668 75.373001) (xy 136.077382 75.01654)
+ (xy 135.804895 74.743577) (xy 135.448692 74.595668) (xy 135.1196 74.595381) (xy 135.1196 71.247) (xy 135.071903 71.007211)
+ (xy 135.071902 71.00721) (xy 134.936073 70.803927) (xy 134.148934 70.016788) (xy 134.40646 69.910382) (xy 134.679423 69.637895)
+ (xy 134.827332 69.281692) (xy 134.827668 68.896001) (xy 134.680382 68.53954) (xy 134.65747 68.516588) (xy 134.737634 68.436563)
+ (xy 134.813618 68.62046) (xy 135.077157 68.884459) (xy 135.073068 68.894308) (xy 135.072732 69.279999) (xy 135.220018 69.63646)
+ (xy 135.492505 69.909423) (xy 135.848708 70.057332) (xy 136.234399 70.057668) (xy 136.425649 69.978645) (xy 136.610105 70.163423)
+ (xy 136.966308 70.311332) (xy 137.351999 70.311668) (xy 137.70846 70.164382) (xy 137.981423 69.891895) (xy 138.129332 69.535692)
+ (xy 138.129668 69.150001) (xy 137.982382 68.79354) (xy 137.709895 68.520577) (xy 137.353692 68.372668) (xy 136.968001 68.372332)
+ (xy 136.77675 68.451354) (xy 136.601242 68.27554) (xy 136.605332 68.265692) (xy 136.605668 67.880001) (xy 136.458382 67.52354)
+ (xy 136.185895 67.250577) (xy 135.829692 67.102668) (xy 135.444001 67.102332) (xy 135.08754 67.249618) (xy 134.883365 67.453436)
+ (xy 134.807382 67.26954) (xy 134.534895 66.996577) (xy 134.178692 66.848668) (xy 133.793001 66.848332) (xy 133.7226 66.87742)
+ (xy 133.7226 65.151) (xy 133.674903 64.911211) (xy 133.674903 64.91121) (xy 133.625993 64.838012) (xy 133.64446 64.830382)
+ (xy 133.917423 64.557895) (xy 134.065332 64.201692) (xy 134.065546 63.955243) (xy 134.40646 63.814382) (xy 134.679423 63.541895)
+ (xy 134.827332 63.185692) (xy 134.827668 62.800001) (xy 134.680382 62.44354) (xy 134.407895 62.170577) (xy 134.051692 62.022668)
+ (xy 133.666001 62.022332) (xy 133.30954 62.169618) (xy 133.036577 62.442105) (xy 132.888668 62.798308) (xy 132.888453 63.044756)
+ (xy 132.54754 63.185618) (xy 132.28192 63.450774) (xy 132.269073 63.437927) (xy 132.06579 63.302097) (xy 131.826 63.2544)
+ (xy 131.698066 63.2544) (xy 131.779332 63.058692) (xy 131.779668 62.673001) (xy 131.632382 62.31654) (xy 131.359895 62.043577)
+ (xy 131.08576 61.929746) (xy 131.144332 61.788692) (xy 131.144668 61.403001) (xy 130.997382 61.04654) (xy 130.724895 60.773577)
+ (xy 130.368692 60.625668) (xy 129.983001 60.625332) (xy 129.62654 60.772618) (xy 129.353577 61.045105) (xy 129.205668 61.401308)
+ (xy 129.205332 61.786999) (xy 129.352618 62.14346) (xy 129.625105 62.416423) (xy 129.899239 62.530253) (xy 129.862222 62.6194)
+ (xy 129.032 62.6194) (xy 128.79221 62.667097) (xy 128.588927 62.802927) (xy 128.353282 63.038571) (xy 128.078001 63.038332)
+ (xy 127.72154 63.185618) (xy 127.448577 63.458105) (xy 127.300668 63.814308) (xy 127.300332 64.199999) (xy 127.447618 64.55646)
+ (xy 127.720105 64.829423) (xy 128.076308 64.977332) (xy 128.461999 64.977668) (xy 128.81846 64.830382) (xy 128.904911 64.74408)
+ (xy 128.990105 64.829423) (xy 129.346308 64.977332) (xy 129.731999 64.977668) (xy 129.834973 64.935119) (xy 129.858927 64.959073)
+ (xy 130.06221 65.094902) (xy 130.062211 65.094903) (xy 130.302 65.1426) (xy 131.439454 65.1426) (xy 131.9614 65.664546)
+ (xy 131.9614 66.328467) (xy 131.740895 66.107577) (xy 131.384692 65.959668) (xy 130.999001 65.959332) (xy 130.64254 66.106618)
+ (xy 130.369577 66.379105) (xy 130.221668 66.735308) (xy 130.221657 66.747569) (xy 130.089895 66.615577) (xy 129.733692 66.467668)
+ (xy 129.348001 66.467332) (xy 128.99154 66.614618) (xy 128.718577 66.887105) (xy 128.570668 67.243308) (xy 128.570332 67.628999)
+ (xy 128.717618 67.98546) (xy 128.990105 68.258423) (xy 129.346308 68.406332) (xy 129.731999 68.406668) (xy 130.08846 68.259382)
+ (xy 130.361423 67.986895) (xy 130.509332 67.630692) (xy 130.509342 67.61843) (xy 130.641105 67.750423) (xy 130.997308 67.898332)
+ (xy 131.382999 67.898668) (xy 131.73946 67.751382) (xy 131.9614 67.529829) (xy 131.9614 69.977) (xy 132.009097 70.21679)
+ (xy 132.144927 70.420073) (xy 133.3584 71.633546) (xy 133.3584 75.218467) (xy 133.137895 74.997577) (xy 132.781692 74.849668)
+ (xy 132.396001 74.849332) (xy 132.03954 74.996618) (xy 132.016699 75.019419) (xy 131.994895 74.997577) (xy 131.638692 74.849668)
+ (xy 131.253001 74.849332) (xy 130.89654 74.996618) (xy 130.810088 75.082919) (xy 130.724895 74.997577) (xy 130.368692 74.849668)
+ (xy 129.983001 74.849332) (xy 129.62654 74.996618) (xy 129.540088 75.082919) (xy 129.454895 74.997577) (xy 129.098692 74.849668)
+ (xy 128.713001 74.849332) (xy 128.35654 74.996618) (xy 128.083577 75.269105) (xy 127.935668 75.625308) (xy 127.935332 76.010999)
+ (xy 128.082618 76.36746) (xy 128.355105 76.640423) (xy 128.711308 76.788332) (xy 129.096999 76.788668) (xy 129.45346 76.641382)
+ (xy 129.539911 76.55508) (xy 129.625105 76.640423) (xy 129.981308 76.788332) (xy 130.366999 76.788668) (xy 130.72346 76.641382)
+ (xy 130.809911 76.55508) (xy 130.895105 76.640423) (xy 131.251308 76.788332) (xy 131.636999 76.788668) (xy 131.99346 76.641382)
+ (xy 132.0163 76.61858) (xy 132.038105 76.640423) (xy 132.3424 76.766777) (xy 132.3424 82.603668) (xy 132.019692 82.469668)
+ (xy 131.634001 82.469332) (xy 131.27754 82.616618) (xy 131.004577 82.889105) (xy 130.856668 83.245308) (xy 130.856342 83.618801)
+ (xy 130.51554 83.759618) (xy 130.242577 84.032105) (xy 130.094668 84.388308) (xy 130.094332 84.773999) (xy 130.241618 85.13046)
+ (xy 130.514105 85.403423) (xy 130.870308 85.551332) (xy 131.255999 85.551668) (xy 131.61246 85.404382) (xy 131.885423 85.131895)
+ (xy 132.033332 84.775692) (xy 132.033657 84.402198) (xy 132.3424 84.274628) (xy 132.3424 88.259454) (xy 130.620927 89.980927)
+ (xy 130.485097 90.18421) (xy 130.4374 90.424) (xy 130.4374 90.626198) (xy 130.368692 90.597668) (xy 129.983001 90.597332)
+ (xy 129.874668 90.642094) (xy 129.874668 88.708001) (xy 129.727382 88.35154) (xy 129.454895 88.078577) (xy 129.366668 88.041941)
+ (xy 129.366668 79.183001) (xy 129.219382 78.82654) (xy 128.946895 78.553577) (xy 128.590692 78.405668) (xy 128.205001 78.405332)
+ (xy 127.84854 78.552618) (xy 127.575577 78.825105) (xy 127.427668 79.181308) (xy 127.427332 79.566999) (xy 127.574618 79.92346)
+ (xy 127.847105 80.196423) (xy 128.203308 80.344332) (xy 128.588999 80.344668) (xy 128.94546 80.197382) (xy 129.218423 79.924895)
+ (xy 129.366332 79.568692) (xy 129.366668 79.183001) (xy 129.366668 88.041941) (xy 129.098692 87.930668) (xy 128.713001 87.930332)
+ (xy 128.35654 88.077618) (xy 128.083577 88.350105) (xy 127.935668 88.706308) (xy 127.935332 89.091999) (xy 128.082618 89.44846)
+ (xy 128.355105 89.721423) (xy 128.711308 89.869332) (xy 129.096999 89.869668) (xy 129.45346 89.722382) (xy 129.726423 89.449895)
+ (xy 129.874332 89.093692) (xy 129.874668 88.708001) (xy 129.874668 90.642094) (xy 129.62654 90.744618) (xy 129.353577 91.017105)
+ (xy 129.264099 91.23259) (xy 128.967001 91.232332) (xy 128.61054 91.379618) (xy 128.337577 91.652105) (xy 128.189668 92.008308)
+ (xy 128.189332 92.393999) (xy 128.336618 92.75046) (xy 128.609105 93.023423) (xy 128.965308 93.171332) (xy 129.350999 93.171668)
+ (xy 129.70746 93.024382) (xy 129.980423 92.751895) (xy 130.0699 92.536409) (xy 130.366999 92.536668) (xy 130.509225 92.477901)
+ (xy 130.509226 92.477901) (xy 130.5644 92.560474) (xy 130.5644 96.664621) (xy 130.369577 96.859105) (xy 130.221668 97.215308)
+ (xy 130.221332 97.600999) (xy 130.368618 97.95746) (xy 130.641105 98.230423) (xy 130.997308 98.378332) (xy 131.382999 98.378668)
+ (xy 131.73946 98.231382) (xy 132.012423 97.958895) (xy 132.160332 97.602692) (xy 132.160668 97.217001) (xy 132.013382 96.86054)
+ (xy 131.8176 96.664415) (xy 131.8176 92.329) (xy 131.808347 92.282485) (xy 132.017999 92.282668) (xy 132.37446 92.135382)
+ (xy 132.647423 91.862895) (xy 132.789571 91.520565) (xy 132.906999 91.520668) (xy 133.26346 91.373382) (xy 133.536423 91.100895)
+ (xy 133.684332 90.744692) (xy 133.684469 90.586968) (xy 133.791308 90.631332) (xy 134.176999 90.631668) (xy 134.53346 90.484382)
+ (xy 134.806423 90.211895) (xy 134.948617 89.869455) (xy 135.192999 89.869668) (xy 135.54946 89.722382) (xy 135.5723 89.69958)
+ (xy 135.594105 89.721423) (xy 135.950308 89.869332) (xy 136.335999 89.869668) (xy 136.69246 89.722382) (xy 136.965423 89.449895)
+ (xy 137.107617 89.107455) (xy 137.351999 89.107668) (xy 137.70846 88.960382) (xy 137.981423 88.687895) (xy 138.129332 88.331692)
+ (xy 138.12943 88.21857) (xy 138.240999 88.218668) (xy 138.59746 88.071382) (xy 138.870423 87.798895) (xy 138.957951 87.588103)
+ (xy 139.252308 87.710332) (xy 139.637999 87.710668) (xy 139.99446 87.563382) (xy 140.267423 87.290895) (xy 140.409617 86.948455)
+ (xy 140.653999 86.948668) (xy 141.01046 86.801382) (xy 141.241258 86.570985) (xy 141.538308 86.694332) (xy 141.923999 86.694668)
+ (xy 142.28046 86.547382) (xy 142.553423 86.274895) (xy 142.701332 85.918692) (xy 142.701668 85.533001) (xy 142.701668 96.931941)
+ (xy 142.433692 96.820668) (xy 142.048001 96.820332) (xy 141.69154 96.967618) (xy 141.605088 97.053919) (xy 141.519895 96.968577)
+ (xy 141.163692 96.820668) (xy 140.778001 96.820332) (xy 140.42154 96.967618) (xy 140.148577 97.240105) (xy 140.034746 97.514239)
+ (xy 139.893692 97.455668) (xy 139.508001 97.455332) (xy 139.15154 97.602618) (xy 138.878577 97.875105) (xy 138.730668 98.231308)
+ (xy 138.730332 98.616999) (xy 138.877618 98.97346) (xy 138.963919 99.059911) (xy 138.878577 99.145105) (xy 138.730668 99.501308)
+ (xy 138.730332 99.886999) (xy 138.877618 100.24346) (xy 139.150105 100.516423) (xy 139.506308 100.664332) (xy 139.664031 100.664469)
+ (xy 139.619668 100.771308) (xy 139.619332 101.156999) (xy 139.766618 101.51346) (xy 140.039105 101.786423) (xy 140.395308 101.934332)
+ (xy 140.780999 101.934668) (xy 141.13746 101.787382) (xy 141.410423 101.514895) (xy 141.558332 101.158692) (xy 141.558668 100.773001)
+ (xy 141.411382 100.41654) (xy 141.138895 100.143577) (xy 140.782692 99.995668) (xy 140.624968 99.99553) (xy 140.669332 99.888692)
+ (xy 140.669668 99.503001) (xy 140.522382 99.14654) (xy 140.43608 99.060088) (xy 140.521423 98.974895) (xy 140.635253 98.70076)
+ (xy 140.776308 98.759332) (xy 141.161999 98.759668) (xy 141.51846 98.612382) (xy 141.604911 98.52608) (xy 141.690105 98.611423)
+ (xy 142.046308 98.759332) (xy 142.431999 98.759668) (xy 142.78846 98.612382) (xy 142.874911 98.52608) (xy 142.960105 98.611423)
+ (xy 143.316308 98.759332) (xy 143.701999 98.759668) (xy 144.05846 98.612382) (xy 144.144911 98.52608) (xy 144.1534 98.534584)
+ (xy 144.1534 101.219) (xy 144.201097 101.45879) (xy 144.336927 101.662073) (xy 144.971927 102.297073) (xy 145.17521 102.432903)
+ (xy 145.175211 102.432903) (xy 145.415 102.4806) (xy 155.950454 102.4806) (xy 157.430887 103.961033) (xy 157.293577 104.098105)
+ (xy 157.252318 104.197465) (xy 157.159382 103.97254) (xy 156.886895 103.699577) (xy 156.530692 103.551668) (xy 156.145001 103.551332)
+ (xy 155.78854 103.698618) (xy 155.592415 103.8944) (xy 146.939 103.8944) (xy 146.699211 103.942097) (xy 146.495927 104.077927)
+ (xy 146.114927 104.458927) (xy 145.979097 104.66221) (xy 145.9314 104.902) (xy 145.9314 107.288618) (xy 145.842668 107.502308)
+ (xy 145.842345 107.872199) (xy 145.477073 107.506927) (xy 145.27379 107.371097) (xy 145.170478 107.350547) (xy 145.170477 107.350547)
+ (xy 144.948895 107.128577) (xy 144.592692 106.980668) (xy 144.207001 106.980332) (xy 143.85054 107.127618) (xy 143.577577 107.400105)
+ (xy 143.429668 107.756308) (xy 143.429563 107.87571) (xy 143.08854 108.016618) (xy 142.815577 108.289105) (xy 142.667668 108.645308)
+ (xy 142.667518 108.817204) (xy 142.45354 108.905618) (xy 142.180577 109.178105) (xy 142.032668 109.534308) (xy 142.032453 109.780756)
+ (xy 141.69154 109.921618) (xy 141.418577 110.194105) (xy 141.270668 110.550308) (xy 141.270563 110.66971) (xy 140.92954 110.810618)
+ (xy 140.656577 111.083105) (xy 140.508668 111.439308) (xy 140.508332 111.824999) (xy 140.655618 112.18146) (xy 140.928105 112.454423)
+ (xy 141.284308 112.602332) (xy 141.669999 112.602668) (xy 142.02646 112.455382) (xy 142.222584 112.2596) (xy 142.234454 112.2596)
+ (xy 142.431927 112.457073) (xy 142.63521 112.592902) (xy 142.635211 112.592903) (xy 142.875 112.6406) (xy 155.067 112.6406)
+ (xy 155.306789 112.592903) (xy 155.30679 112.592903) (xy 155.510073 112.457073) (xy 155.999717 111.967428) (xy 156.274999 111.967668)
+ (xy 156.63146 111.820382) (xy 156.904423 111.547895) (xy 157.052332 111.191692) (xy 157.052668 110.806001) (xy 156.905382 110.44954)
+ (xy 156.81908 110.363088) (xy 156.904423 110.277895) (xy 157.052332 109.921692) (xy 157.052668 109.536001) (xy 156.905382 109.17954)
+ (xy 156.81908 109.093088) (xy 156.904423 109.007895) (xy 157.052332 108.651692) (xy 157.052668 108.266001) (xy 156.905382 107.90954)
+ (xy 156.81908 107.823088) (xy 156.904423 107.737895) (xy 157.049167 107.389313) (xy 157.163927 107.504073) (xy 157.36721 107.639903)
+ (xy 157.367211 107.639903) (xy 157.607 107.6876) (xy 159.910621 107.6876) (xy 160.105105 107.882423) (xy 160.461308 108.030332)
+ (xy 160.846999 108.030668) (xy 161.20346 107.883382) (xy 161.476423 107.610895) (xy 161.624332 107.254692) (xy 161.624668 106.869001)
+ (xy 161.477382 106.51254) (xy 161.204895 106.239577) (xy 160.989668 106.150206) (xy 160.989668 99.249001) (xy 160.842382 98.89254)
+ (xy 160.569895 98.619577) (xy 160.213692 98.471668) (xy 159.828001 98.471332) (xy 159.47154 98.618618) (xy 159.198577 98.891105)
+ (xy 159.050668 99.247308) (xy 159.050332 99.632999) (xy 159.197618 99.98946) (xy 159.470105 100.262423) (xy 159.826308 100.410332)
+ (xy 160.211999 100.410668) (xy 160.56846 100.263382) (xy 160.841423 99.990895) (xy 160.989332 99.634692) (xy 160.989668 99.249001)
+ (xy 160.989668 106.150206) (xy 160.848692 106.091668) (xy 160.463001 106.091332) (xy 160.10654 106.238618) (xy 159.910415 106.4344)
+ (xy 159.003066 106.4344) (xy 159.084332 106.238692) (xy 159.084668 105.853001) (xy 158.937382 105.49654) (xy 158.787581 105.346477)
+ (xy 158.936423 105.197895) (xy 159.084332 104.841692) (xy 159.084668 104.456001) (xy 159.039849 104.347531) (xy 159.195999 104.347668)
+ (xy 159.55246 104.200382) (xy 159.825423 103.927895) (xy 159.973332 103.571692) (xy 159.973668 103.186001) (xy 159.826382 102.82954)
+ (xy 159.553895 102.556577) (xy 159.197692 102.408668) (xy 158.920572 102.408426) (xy 157.034073 100.521927) (xy 156.83079 100.386097)
+ (xy 156.591 100.3384) (xy 155.528382 100.3384) (xy 155.528668 100.011001) (xy 155.442143 99.801594) (xy 155.61546 99.729982)
+ (xy 155.888423 99.457495) (xy 156.036332 99.101292) (xy 156.036668 98.715601) (xy 155.889382 98.35914) (xy 155.616895 98.086177)
+ (xy 155.260692 97.938268) (xy 154.875001 97.937932) (xy 154.51854 98.085218) (xy 154.322415 98.281) (xy 153.924 98.281)
+ (xy 153.684211 98.328697) (xy 153.480927 98.464527) (xy 152.267454 99.678) (xy 147.9466 99.678) (xy 147.9466 99.169378)
+ (xy 148.141423 98.974895) (xy 148.289332 98.618692) (xy 148.289668 98.233001) (xy 148.142382 97.87654) (xy 147.869895 97.603577)
+ (xy 147.553889 97.472359) (xy 147.86846 97.342382) (xy 148.064584 97.1466) (xy 150.114 97.1466) (xy 150.353789 97.098903)
+ (xy 150.35379 97.098903) (xy 150.557073 96.963073) (xy 150.627546 96.8926) (xy 161.942621 96.8926) (xy 162.137105 97.087423)
+ (xy 162.493308 97.235332) (xy 162.878999 97.235668) (xy 163.23546 97.088382) (xy 163.508423 96.815895) (xy 163.656332 96.459692)
+ (xy 163.656668 96.074001) (xy 163.509382 95.71754) (xy 163.236895 95.444577) (xy 162.894455 95.302382) (xy 162.894668 95.058001)
+ (xy 162.747382 94.70154) (xy 162.474895 94.428577) (xy 162.312191 94.361016) (xy 162.47346 94.294382) (xy 162.746423 94.021895)
+ (xy 162.894332 93.665692) (xy 162.894668 93.280001) (xy 162.747382 92.92354) (xy 162.66108 92.837088) (xy 162.746423 92.751895)
+ (xy 162.894332 92.395692) (xy 162.894668 92.010001) (xy 162.747382 91.65354) (xy 162.652607 91.5586) (xy 164.736621 91.5586)
+ (xy 164.931105 91.753423) (xy 165.287308 91.901332) (xy 165.672999 91.901668) (xy 166.02946 91.754382) (xy 166.302423 91.481895)
+ (xy 166.450332 91.125692) (xy 166.450668 90.740001) (xy 166.450668 92.4644) (xy 165.862 92.4644) (xy 165.669635 92.502663)
+ (xy 165.289001 92.502332) (xy 164.93254 92.649618) (xy 164.659577 92.922105) (xy 164.511668 93.278308) (xy 164.511332 93.663999)
+ (xy 164.658618 94.02046) (xy 164.931105 94.293423) (xy 165.287308 94.441332) (xy 165.672999 94.441668) (xy 166.02946 94.294382)
+ (xy 166.302423 94.021895) (xy 166.428777 93.7176) (xy 168.419621 93.7176) (xy 168.614105 93.912423) (xy 168.970308 94.060332)
+ (xy 169.210539 94.060541) (xy 169.210332 94.298999) (xy 169.357618 94.65546) (xy 169.630105 94.928423) (xy 169.986308 95.076332)
+ (xy 170.371999 95.076668) (xy 170.72846 94.929382) (xy 171.001423 94.656895) (xy 171.149332 94.300692) (xy 171.149668 93.915001)
+ (xy 171.149668 100.181427) (xy 171.115668 100.263308) (xy 171.115332 100.648999) (xy 171.262618 101.00546) (xy 171.535105 101.278423)
+ (xy 171.891308 101.426332) (xy 172.276999 101.426668) (xy 172.63346 101.279382) (xy 172.906423 101.006895) (xy 173.054332 100.650692)
+ (xy 173.054668 100.265001) (xy 173.054668 108.437639) (xy 172.888895 108.271577) (xy 172.532692 108.123668) (xy 172.147001 108.123332)
+ (xy 171.79054 108.270618) (xy 171.517577 108.543105) (xy 171.369668 108.899308) (xy 171.369332 109.284999) (xy 171.516618 109.64146)
+ (xy 171.789105 109.914423) (xy 172.10511 110.04564) (xy 171.79054 110.175618) (xy 171.530668 110.435036) (xy 171.530668 109.917001)
+ (xy 171.383382 109.56054) (xy 171.110895 109.287577) (xy 170.754692 109.139668) (xy 170.369001 109.139332) (xy 170.01254 109.286618)
+ (xy 170.006668 109.292479) (xy 170.006668 104.456001) (xy 170.006668 100.646001) (xy 169.859382 100.28954) (xy 169.586895 100.016577)
+ (xy 169.230692 99.868668) (xy 168.845001 99.868332) (xy 168.83264 99.873439) (xy 168.969423 99.736895) (xy 169.117332 99.380692)
+ (xy 169.117668 98.995001) (xy 168.970382 98.63854) (xy 168.697895 98.365577) (xy 168.355565 98.223428) (xy 168.355668 98.106001)
+ (xy 168.208382 97.74954) (xy 168.10492 97.645898) (xy 168.228332 97.348692) (xy 168.228668 96.963001) (xy 168.081382 96.60654)
+ (xy 168.05858 96.583699) (xy 168.080423 96.561895) (xy 168.228332 96.205692) (xy 168.228668 95.820001) (xy 168.081382 95.46354)
+ (xy 167.808895 95.190577) (xy 167.452692 95.042668) (xy 167.067001 95.042332) (xy 166.71054 95.189618) (xy 166.437577 95.462105)
+ (xy 166.289668 95.818308) (xy 166.289332 96.203999) (xy 166.365617 96.388625) (xy 166.182692 96.312668) (xy 165.797001 96.312332)
+ (xy 165.44054 96.459618) (xy 165.167577 96.732105) (xy 165.019668 97.088308) (xy 165.019332 97.473999) (xy 165.166618 97.83046)
+ (xy 165.439105 98.103423) (xy 165.795308 98.251332) (xy 166.180999 98.251668) (xy 166.416624 98.15431) (xy 166.416332 98.489999)
+ (xy 166.563618 98.84646) (xy 166.836105 99.119423) (xy 167.178434 99.261571) (xy 167.178332 99.378999) (xy 167.325618 99.73546)
+ (xy 167.598105 100.008423) (xy 167.954308 100.156332) (xy 168.339999 100.156668) (xy 168.352359 100.15156) (xy 168.215577 100.288105)
+ (xy 168.067668 100.644308) (xy 168.067332 101.029999) (xy 168.214618 101.38646) (xy 168.487105 101.659423) (xy 168.843308 101.807332)
+ (xy 169.228999 101.807668) (xy 169.58546 101.660382) (xy 169.858423 101.387895) (xy 170.006332 101.031692) (xy 170.006668 100.646001)
+ (xy 170.006668 104.456001) (xy 169.859382 104.09954) (xy 169.586895 103.826577) (xy 169.230692 103.678668) (xy 169.072968 103.67853)
+ (xy 169.117332 103.571692) (xy 169.117668 103.186001) (xy 168.970382 102.82954) (xy 168.697895 102.556577) (xy 168.341692 102.408668)
+ (xy 168.310922 102.408641) (xy 168.355332 102.301692) (xy 168.355668 101.916001) (xy 168.208382 101.55954) (xy 167.935895 101.286577)
+ (xy 167.579692 101.138668) (xy 167.194001 101.138332) (xy 166.83754 101.285618) (xy 166.577668 101.545036) (xy 166.577668 100.646001)
+ (xy 166.430382 100.28954) (xy 166.157895 100.016577) (xy 165.801692 99.868668) (xy 165.416001 99.868332) (xy 165.05954 100.015618)
+ (xy 164.786577 100.288105) (xy 164.638668 100.644308) (xy 164.638332 101.029999) (xy 164.785618 101.38646) (xy 165.058105 101.659423)
+ (xy 165.414308 101.807332) (xy 165.799999 101.807668) (xy 166.15646 101.660382) (xy 166.429423 101.387895) (xy 166.577332 101.031692)
+ (xy 166.577668 100.646001) (xy 166.577668 101.545036) (xy 166.564577 101.558105) (xy 166.416668 101.914308) (xy 166.416332 102.299999)
+ (xy 166.563618 102.65646) (xy 166.836105 102.929423) (xy 167.192308 103.077332) (xy 167.223077 103.077358) (xy 167.178668 103.184308)
+ (xy 167.178332 103.569999) (xy 167.325618 103.92646) (xy 167.598105 104.199423) (xy 167.954308 104.347332) (xy 168.112031 104.347469)
+ (xy 168.067668 104.454308) (xy 168.067332 104.839999) (xy 168.214618 105.19646) (xy 168.487105 105.469423) (xy 168.843308 105.617332)
+ (xy 169.228999 105.617668) (xy 169.58546 105.470382) (xy 169.858423 105.197895) (xy 170.006332 104.841692) (xy 170.006668 104.456001)
+ (xy 170.006668 109.292479) (xy 169.739577 109.559105) (xy 169.591668 109.915308) (xy 169.591332 110.300999) (xy 169.738618 110.65746)
+ (xy 170.011105 110.930423) (xy 170.367308 111.078332) (xy 170.752999 111.078668) (xy 171.10946 110.931382) (xy 171.382423 110.658895)
+ (xy 171.530332 110.302692) (xy 171.530668 109.917001) (xy 171.530668 110.435036) (xy 171.517577 110.448105) (xy 171.369668 110.804308)
+ (xy 171.369332 111.189999) (xy 171.516618 111.54646) (xy 171.789105 111.819423) (xy 172.145308 111.967332) (xy 172.530999 111.967668)
+ (xy 172.88746 111.820382) (xy 173.160423 111.547895) (xy 173.308332 111.191692) (xy 173.308668 110.806001) (xy 173.308668 125.284001)
+ (xy 173.161382 124.92754) (xy 172.888895 124.654577) (xy 172.532692 124.506668) (xy 172.147001 124.506332) (xy 171.79054 124.653618)
+ (xy 171.517577 124.926105) (xy 171.369668 125.282308) (xy 171.369332 125.667999) (xy 171.516618 126.02446) (xy 171.789105 126.297423)
+ (xy 172.145308 126.445332) (xy 172.530999 126.445668) (xy 172.88746 126.298382) (xy 173.160423 126.025895) (xy 173.308332 125.669692)
+ (xy 173.308668 125.284001) (xy 173.308668 133.523459) (xy 173.112698 133.523288) (xy 172.662848 133.709162) (xy 172.318372 134.053038)
+ (xy 172.131713 134.502563) (xy 172.131288 134.989302) (xy 172.317162 135.439152) (xy 172.661038 135.783628) (xy 173.110563 135.970287)
+ (xy 173.597302 135.970712) (xy 174.047152 135.784838) (xy 174.391628 135.440962) (xy 174.578287 134.991437) (xy 174.578712 134.504698)
+ (xy 174.578712 137.552698) (xy 174.392838 137.102848) (xy 174.048962 136.758372) (xy 173.599437 136.571713) (xy 173.112698 136.571288)
+ (xy 172.662848 136.757162) (xy 172.318372 137.101038) (xy 172.131713 137.550563) (xy 172.131288 138.037302) (xy 172.317162 138.487152)
+ (xy 172.661038 138.831628) (xy 173.110563 139.018287) (xy 173.597302 139.018712) (xy 174.047152 138.832838) (xy 174.391628 138.488962)
+ (xy 174.578287 138.039437) (xy 174.578712 137.552698) (xy 174.578712 142.378698) (xy 174.392838 141.928848) (xy 174.048962 141.584372)
+ (xy 173.599437 141.397713) (xy 173.112698 141.397288) (xy 172.662848 141.583162) (xy 172.318372 141.927038) (xy 172.131713 142.376563)
+ (xy 172.131288 142.863302) (xy 172.317162 143.313152) (xy 172.661038 143.657628) (xy 173.110563 143.844287) (xy 173.597302 143.844712)
+ (xy 174.047152 143.658838) (xy 174.391628 143.314962) (xy 174.578287 142.865437) (xy 174.578712 142.378698) (xy 174.578712 154.137324)
+ (xy 172.038712 154.127555) (xy 172.038712 142.378698) (xy 172.038712 137.552698) (xy 172.038712 134.504698) (xy 171.852838 134.054848)
+ (xy 171.508962 133.710372) (xy 171.059437 133.523713) (xy 170.572698 133.523288) (xy 170.122848 133.709162) (xy 169.778372 134.053038)
+ (xy 169.591713 134.502563) (xy 169.591288 134.989302) (xy 169.777162 135.439152) (xy 170.121038 135.783628) (xy 170.570563 135.970287)
+ (xy 171.057302 135.970712) (xy 171.507152 135.784838) (xy 171.851628 135.440962) (xy 172.038287 134.991437) (xy 172.038712 134.504698)
+ (xy 172.038712 137.552698) (xy 171.852838 137.102848) (xy 171.508962 136.758372) (xy 171.059437 136.571713) (xy 170.572698 136.571288)
+ (xy 170.122848 136.757162) (xy 169.778372 137.101038) (xy 169.591713 137.550563) (xy 169.591288 138.037302) (xy 169.777162 138.487152)
+ (xy 170.121038 138.831628) (xy 170.570563 139.018287) (xy 171.057302 139.018712) (xy 171.507152 138.832838) (xy 171.851628 138.488962)
+ (xy 172.038287 138.039437) (xy 172.038712 137.552698) (xy 172.038712 142.378698) (xy 171.852838 141.928848) (xy 171.508962 141.584372)
+ (xy 171.059437 141.397713) (xy 170.572698 141.397288) (xy 170.122848 141.583162) (xy 169.778372 141.927038) (xy 169.591713 142.376563)
+ (xy 169.591288 142.863302) (xy 169.777162 143.313152) (xy 170.121038 143.657628) (xy 170.570563 143.844287) (xy 171.057302 143.844712)
+ (xy 171.507152 143.658838) (xy 171.851628 143.314962) (xy 172.038287 142.865437) (xy 172.038712 142.378698) (xy 172.038712 154.127555)
+ (xy 167.974668 154.111924) (xy 167.974668 152.843001) (xy 167.827382 152.48654) (xy 167.554895 152.213577) (xy 167.198692 152.065668)
+ (xy 166.813001 152.065332) (xy 166.45654 152.212618) (xy 166.183577 152.485105) (xy 166.052359 152.80111) (xy 165.922382 152.48654)
+ (xy 165.649895 152.213577) (xy 165.293692 152.065668) (xy 164.908001 152.065332) (xy 164.55154 152.212618) (xy 164.278577 152.485105)
+ (xy 164.130668 152.841308) (xy 164.130332 153.226999) (xy 164.277618 153.58346) (xy 164.550105 153.856423) (xy 164.906308 154.004332)
+ (xy 165.291999 154.004668) (xy 165.64846 153.857382) (xy 165.921423 153.584895) (xy 166.05264 153.268889) (xy 166.182618 153.58346)
+ (xy 166.455105 153.856423) (xy 166.811308 154.004332) (xy 167.196999 154.004668) (xy 167.55346 153.857382) (xy 167.826423 153.584895)
+ (xy 167.974332 153.228692) (xy 167.974668 152.843001) (xy 167.974668 154.111924) (xy 138.006374 153.996662) (xy 138.34346 153.857382)
+ (xy 138.616423 153.584895) (xy 138.764332 153.228692) (xy 138.764668 152.843001) (xy 138.693598 152.671) (xy 139.353788 152.671)
+ (xy 139.506308 152.734332) (xy 139.891999 152.734668) (xy 140.046088 152.671) (xy 140.706386 152.671) (xy 140.635668 152.841308)
+ (xy 140.635332 153.226999) (xy 140.782618 153.58346) (xy 141.055105 153.856423) (xy 141.411308 154.004332) (xy 141.796999 154.004668)
+ (xy 142.15346 153.857382) (xy 142.426423 153.584895) (xy 142.574332 153.228692) (xy 142.574668 152.843001) (xy 142.503598 152.671)
+ (xy 143.163788 152.671) (xy 143.316308 152.734332) (xy 143.701999 152.734668) (xy 143.856088 152.671) (xy 145.068788 152.671)
+ (xy 145.221308 152.734332) (xy 145.606999 152.734668) (xy 145.761088 152.671) (xy 146.421386 152.671) (xy 146.350668 152.841308)
+ (xy 146.350332 153.226999) (xy 146.497618 153.58346) (xy 146.770105 153.856423) (xy 147.126308 154.004332) (xy 147.511999 154.004668)
+ (xy 147.86846 153.857382) (xy 148.141423 153.584895) (xy 148.289332 153.228692) (xy 148.289668 152.843001) (xy 148.218598 152.671)
+ (xy 150.231386 152.671) (xy 150.160668 152.841308) (xy 150.160332 153.226999) (xy 150.307618 153.58346) (xy 150.580105 153.856423)
+ (xy 150.936308 154.004332) (xy 151.321999 154.004668) (xy 151.67846 153.857382) (xy 151.951423 153.584895) (xy 152.099332 153.228692)
+ (xy 152.099668 152.843001) (xy 152.028598 152.671) (xy 154.041386 152.671) (xy 153.970668 152.841308) (xy 153.970332 153.226999)
+ (xy 154.117618 153.58346) (xy 154.390105 153.856423) (xy 154.746308 154.004332) (xy 155.131999 154.004668) (xy 155.48846 153.857382)
+ (xy 155.761423 153.584895) (xy 155.909332 153.228692) (xy 155.909668 152.843001) (xy 155.838598 152.671) (xy 160.943788 152.671)
+ (xy 161.096308 152.734332) (xy 161.481999 152.734668) (xy 161.636088 152.671) (xy 162.848788 152.671) (xy 163.001308 152.734332)
+ (xy 163.386999 152.734668) (xy 163.74346 152.587382) (xy 164.016423 152.314895) (xy 164.164332 151.958692) (xy 164.164668 151.573001)
+ (xy 164.017382 151.21654) (xy 163.93108 151.130088) (xy 164.016423 151.044895) (xy 164.14764 150.728889) (xy 164.277618 151.04346)
+ (xy 164.550105 151.316423) (xy 164.906308 151.464332) (xy 165.291999 151.464668) (xy 165.64846 151.317382) (xy 165.921423 151.044895)
+ (xy 166.05264 150.728889) (xy 166.182618 151.04346) (xy 166.455105 151.316423) (xy 166.811308 151.464332) (xy 167.196999 151.464668)
+ (xy 167.55346 151.317382) (xy 167.826423 151.044895) (xy 167.95764 150.728889) (xy 168.087618 151.04346) (xy 168.360105 151.316423)
+ (xy 168.716308 151.464332) (xy 169.101999 151.464668) (xy 169.45846 151.317382) (xy 169.731423 151.044895) (xy 169.879332 150.688692)
+ (xy 169.879668 150.303001) (xy 169.732382 149.94654) (xy 169.498712 149.712461) (xy 169.498712 142.378698) (xy 169.498712 137.552698)
+ (xy 169.312838 137.102848) (xy 168.968962 136.758372) (xy 168.519437 136.571713) (xy 168.032698 136.571288) (xy 167.6316 136.737018)
+ (xy 167.6316 135.804623) (xy 168.030563 135.970287) (xy 168.517302 135.970712) (xy 168.967152 135.784838) (xy 169.311628 135.440962)
+ (xy 169.498287 134.991437) (xy 169.498712 134.504698) (xy 169.312838 134.054848) (xy 168.968962 133.710372) (xy 168.519437 133.523713)
+ (xy 168.032698 133.523288) (xy 167.623883 133.692206) (xy 167.583903 133.491211) (xy 167.583903 133.49121) (xy 167.448073 133.287927)
+ (xy 165.9806 131.820454) (xy 165.9806 127.581331) (xy 166.303308 127.715332) (xy 166.688999 127.715668) (xy 167.04546 127.568382)
+ (xy 167.318423 127.295895) (xy 167.466332 126.939692) (xy 167.466668 126.554001) (xy 167.319382 126.19754) (xy 167.046895 125.924577)
+ (xy 166.690692 125.776668) (xy 166.305001 125.776332) (xy 166.273676 125.789274) (xy 166.323332 125.669692) (xy 166.323668 125.284001)
+ (xy 166.176382 124.92754) (xy 166.09008 124.841088) (xy 166.175423 124.755895) (xy 166.323332 124.399692) (xy 166.323668 124.014001)
+ (xy 166.176382 123.65754) (xy 166.09008 123.571088) (xy 166.175423 123.485895) (xy 166.323332 123.129692) (xy 166.323668 122.744001)
+ (xy 166.176382 122.38754) (xy 166.09008 122.301088) (xy 166.175423 122.215895) (xy 166.323332 121.859692) (xy 166.323668 121.474001)
+ (xy 166.176382 121.11754) (xy 166.09008 121.031088) (xy 166.175423 120.945895) (xy 166.323332 120.589692) (xy 166.323668 120.204001)
+ (xy 166.176382 119.84754) (xy 165.9806 119.651415) (xy 165.9806 119.507) (xy 165.932903 119.267211) (xy 165.932903 119.26721)
+ (xy 165.797073 119.063927) (xy 165.558603 118.825457) (xy 165.799999 118.825668) (xy 166.15646 118.678382) (xy 166.352584 118.4826)
+ (xy 166.37 118.4826) (xy 166.609789 118.434903) (xy 166.60979 118.434903) (xy 166.813073 118.299073) (xy 167.067073 118.045073)
+ (xy 167.202902 117.84179) (xy 167.202903 117.841789) (xy 167.2506 117.602) (xy 167.2506 115.154532) (xy 167.471105 115.375423)
+ (xy 167.827308 115.523332) (xy 168.212999 115.523668) (xy 168.56946 115.376382) (xy 168.842423 115.103895) (xy 168.990332 114.747692)
+ (xy 168.990668 114.362001) (xy 168.843382 114.00554) (xy 168.570895 113.732577) (xy 168.482668 113.695941) (xy 168.482668 105.726001)
+ (xy 168.335382 105.36954) (xy 168.062895 105.096577) (xy 167.706692 104.948668) (xy 167.321001 104.948332) (xy 166.96454 105.095618)
+ (xy 166.691577 105.368105) (xy 166.543668 105.724308) (xy 166.543332 106.109999) (xy 166.690618 106.46646) (xy 166.963105 106.739423)
+ (xy 167.319308 106.887332) (xy 167.704999 106.887668) (xy 168.06146 106.740382) (xy 168.334423 106.467895) (xy 168.482332 106.111692)
+ (xy 168.482668 105.726001) (xy 168.482668 113.695941) (xy 168.214692 113.584668) (xy 167.829001 113.584332) (xy 167.47254 113.731618)
+ (xy 167.466668 113.737479) (xy 167.466668 112.076001) (xy 167.319382 111.71954) (xy 167.046895 111.446577) (xy 166.690692 111.298668)
+ (xy 166.305001 111.298332) (xy 165.94854 111.445618) (xy 165.675577 111.718105) (xy 165.527668 112.074308) (xy 165.527332 112.459999)
+ (xy 165.674618 112.81646) (xy 165.947105 113.089423) (xy 166.303308 113.237332) (xy 166.688999 113.237668) (xy 167.04546 113.090382)
+ (xy 167.318423 112.817895) (xy 167.466332 112.461692) (xy 167.466668 112.076001) (xy 167.466668 113.737479) (xy 167.199577 114.004105)
+ (xy 167.054832 114.352686) (xy 166.813073 114.110927) (xy 166.60979 113.975097) (xy 166.37 113.9274) (xy 159.009546 113.9274)
+ (xy 158.050073 112.967927) (xy 157.84679 112.832097) (xy 157.607 112.7844) (xy 146.685 112.7844) (xy 146.445211 112.832097)
+ (xy 146.241927 112.967927) (xy 145.987927 113.221927) (xy 145.852097 113.42521) (xy 145.8044 113.665) (xy 145.8044 115.564454)
+ (xy 145.498282 115.870571) (xy 145.223001 115.870332) (xy 144.86654 116.017618) (xy 144.593577 116.290105) (xy 144.445668 116.646308)
+ (xy 144.445332 117.031999) (xy 144.592618 117.38846) (xy 144.865105 117.661423) (xy 145.221308 117.809332) (xy 145.606999 117.809668)
+ (xy 145.96346 117.662382) (xy 146.236423 117.389895) (xy 146.384332 117.033692) (xy 146.384573 116.756572) (xy 146.874073 116.267073)
+ (xy 147.009903 116.06379) (xy 147.009903 116.063789) (xy 147.0576 115.824) (xy 147.0576 114.0376) (xy 155.269198 114.0376)
+ (xy 155.240668 114.106308) (xy 155.240332 114.491999) (xy 155.387618 114.84846) (xy 155.660105 115.121423) (xy 156.016308 115.269332)
+ (xy 156.401999 115.269668) (xy 156.75846 115.122382) (xy 157.031423 114.849895) (xy 157.179332 114.493692) (xy 157.179668 114.108001)
+ (xy 157.150579 114.0376) (xy 157.347454 114.0376) (xy 158.306927 114.997073) (xy 158.51021 115.132903) (xy 158.510211 115.132903)
+ (xy 158.75 115.1806) (xy 164.638617 115.1806) (xy 164.638332 115.507999) (xy 164.785618 115.86446) (xy 164.871919 115.950911)
+ (xy 164.863415 115.9594) (xy 153.543 115.9594) (xy 153.30321 116.007097) (xy 153.099927 116.142927) (xy 152.366559 116.876294)
+ (xy 152.085692 116.759668) (xy 151.700001 116.759332) (xy 151.34354 116.906618) (xy 151.070577 117.179105) (xy 150.922668 117.535308)
+ (xy 150.922381 117.8644) (xy 148.191378 117.8644) (xy 147.996895 117.669577) (xy 147.640692 117.521668) (xy 147.255001 117.521332)
+ (xy 146.89854 117.668618) (xy 146.625577 117.941105) (xy 146.477668 118.297308) (xy 146.477332 118.682999) (xy 146.624618 119.03946)
+ (xy 146.710919 119.125911) (xy 146.625577 119.211105) (xy 146.477668 119.567308) (xy 146.477332 119.952999) (xy 146.624618 120.30946)
+ (xy 146.647419 120.3323) (xy 146.625577 120.354105) (xy 146.477668 120.710308) (xy 146.477332 121.095999) (xy 146.624618 121.45246)
+ (xy 146.897105 121.725423) (xy 147.253308 121.873332) (xy 147.638999 121.873668) (xy 147.99546 121.726382) (xy 148.191584 121.5306)
+ (xy 152.827617 121.5306) (xy 152.827332 121.857999) (xy 152.974618 122.21446) (xy 153.247105 122.487423) (xy 153.603308 122.635332)
+ (xy 153.988999 122.635668) (xy 154.34546 122.488382) (xy 154.541584 122.2926) (xy 159.653098 122.2926) (xy 159.47154 122.367618)
+ (xy 159.198577 122.640105) (xy 159.050668 122.996308) (xy 159.050332 123.381999) (xy 159.197618 123.73846) (xy 159.470105 124.011423)
+ (xy 159.826308 124.159332) (xy 160.211999 124.159668) (xy 160.56846 124.012382) (xy 160.841423 123.739895) (xy 160.959904 123.454562)
+ (xy 161.05021 123.514903) (xy 161.050211 123.514903) (xy 161.29 123.5626) (xy 164.609621 123.5626) (xy 164.617919 123.570911)
+ (xy 164.609415 123.5794) (xy 163.4236 123.5794) (xy 163.18381 123.627097) (xy 162.980527 123.762927) (xy 162.122654 124.6208)
+ (xy 152.8826 124.6208) (xy 152.64281 124.668497) (xy 152.439527 124.804327) (xy 150.194668 127.049186) (xy 150.194668 124.903001)
+ (xy 150.047382 124.54654) (xy 149.774895 124.273577) (xy 149.418692 124.125668) (xy 149.033001 124.125332) (xy 148.67654 124.272618)
+ (xy 148.403577 124.545105) (xy 148.255668 124.901308) (xy 148.255332 125.286999) (xy 148.402618 125.64346) (xy 148.675105 125.916423)
+ (xy 149.031308 126.064332) (xy 149.416999 126.064668) (xy 149.77346 125.917382) (xy 150.046423 125.644895) (xy 150.194332 125.288692)
+ (xy 150.194668 124.903001) (xy 150.194668 127.049186) (xy 149.670927 127.572927) (xy 149.535097 127.77621) (xy 149.4874 128.016)
+ (xy 149.4874 128.033621) (xy 149.292577 128.228105) (xy 149.144668 128.584308) (xy 149.144332 128.969999) (xy 149.291618 129.32646)
+ (xy 149.564105 129.599423) (xy 149.920308 129.747332) (xy 150.305999 129.747668) (xy 150.66246 129.600382) (xy 150.935423 129.327895)
+ (xy 151.083332 128.971692) (xy 151.083342 128.95943) (xy 151.215105 129.091423) (xy 151.571308 129.239332) (xy 151.956999 129.239668)
+ (xy 152.099886 129.180628) (xy 152.212618 129.45346) (xy 152.485105 129.726423) (xy 152.841308 129.874332) (xy 153.226999 129.874668)
+ (xy 153.369886 129.815628) (xy 153.482618 130.08846) (xy 153.755105 130.361423) (xy 154.111308 130.509332) (xy 154.496999 130.509668)
+ (xy 154.85346 130.362382) (xy 155.126423 130.089895) (xy 155.274332 129.733692) (xy 155.274668 129.348001) (xy 155.127382 128.99154)
+ (xy 154.854895 128.718577) (xy 154.498692 128.570668) (xy 154.113001 128.570332) (xy 153.970113 128.629371) (xy 153.857382 128.35654)
+ (xy 153.584895 128.083577) (xy 153.228692 127.935668) (xy 152.843001 127.935332) (xy 152.700113 127.994371) (xy 152.587382 127.72154)
+ (xy 152.314895 127.448577) (xy 151.958692 127.300668) (xy 151.715689 127.300456) (xy 153.142146 125.874) (xy 162.3822 125.874)
+ (xy 162.621989 125.826303) (xy 162.62199 125.826303) (xy 162.825273 125.690473) (xy 163.683146 124.8326) (xy 164.609621 124.8326)
+ (xy 164.617919 124.840911) (xy 164.532577 124.926105) (xy 164.384668 125.282308) (xy 164.384332 125.667999) (xy 164.531618 126.02446)
+ (xy 164.7274 126.220584) (xy 164.7274 132.08) (xy 164.775097 132.31979) (xy 164.910927 132.523073) (xy 166.3784 133.990546)
+ (xy 166.3784 136.519454) (xy 166.307927 136.589927) (xy 166.172097 136.79321) (xy 166.1244 137.033) (xy 166.1244 137.812621)
+ (xy 165.929577 138.007105) (xy 165.781668 138.363308) (xy 165.781332 138.748999) (xy 165.928618 139.10546) (xy 166.201105 139.378423)
+ (xy 166.557308 139.526332) (xy 166.942999 139.526668) (xy 167.29946 139.379382) (xy 167.572423 139.106895) (xy 167.671181 138.869058)
+ (xy 168.030563 139.018287) (xy 168.517302 139.018712) (xy 168.967152 138.832838) (xy 169.311628 138.488962) (xy 169.498287 138.039437)
+ (xy 169.498712 137.552698) (xy 169.498712 142.378698) (xy 169.312838 141.928848) (xy 168.968962 141.584372) (xy 168.519437 141.397713)
+ (xy 168.032698 141.397288) (xy 167.582848 141.583162) (xy 167.238372 141.927038) (xy 167.051713 142.376563) (xy 167.051288 142.863302)
+ (xy 167.237162 143.313152) (xy 167.581038 143.657628) (xy 168.030563 143.844287) (xy 168.517302 143.844712) (xy 168.967152 143.658838)
+ (xy 169.311628 143.314962) (xy 169.498287 142.865437) (xy 169.498712 142.378698) (xy 169.498712 149.712461) (xy 169.459895 149.673577)
+ (xy 169.103692 149.525668) (xy 168.718001 149.525332) (xy 168.36154 149.672618) (xy 168.088577 149.945105) (xy 167.957359 150.26111)
+ (xy 167.827382 149.94654) (xy 167.554895 149.673577) (xy 167.198692 149.525668) (xy 166.813001 149.525332) (xy 166.45654 149.672618)
+ (xy 166.183577 149.945105) (xy 166.052359 150.26111) (xy 165.922382 149.94654) (xy 165.649895 149.673577) (xy 165.293692 149.525668)
+ (xy 164.908001 149.525332) (xy 164.55154 149.672618) (xy 164.278577 149.945105) (xy 164.147359 150.26111) (xy 164.017382 149.94654)
+ (xy 163.744895 149.673577) (xy 163.388692 149.525668) (xy 163.021668 149.525348) (xy 163.021668 147.128001) (xy 162.874382 146.77154)
+ (xy 162.601895 146.498577) (xy 162.245692 146.350668) (xy 161.968572 146.350426) (xy 161.225073 145.606927) (xy 161.02179 145.471097)
+ (xy 160.989668 145.464707) (xy 160.989668 136.333001) (xy 160.842382 135.97654) (xy 160.569895 135.703577) (xy 160.213692 135.555668)
+ (xy 160.100668 135.555569) (xy 160.100668 130.237001) (xy 159.953382 129.88054) (xy 159.680895 129.607577) (xy 159.324692 129.459668)
+ (xy 158.939001 129.459332) (xy 158.58254 129.606618) (xy 158.309577 129.879105) (xy 158.161668 130.235308) (xy 158.161332 130.620999)
+ (xy 158.308618 130.97746) (xy 158.581105 131.250423) (xy 158.937308 131.398332) (xy 159.322999 131.398668) (xy 159.67946 131.251382)
+ (xy 159.952423 130.978895) (xy 160.100332 130.622692) (xy 160.100668 130.237001) (xy 160.100668 135.555569) (xy 159.828001 135.555332)
+ (xy 159.47154 135.702618) (xy 159.198577 135.975105) (xy 159.050668 136.331308) (xy 159.050332 136.716999) (xy 159.197618 137.07346)
+ (xy 159.470105 137.346423) (xy 159.826308 137.494332) (xy 160.211999 137.494668) (xy 160.56846 137.347382) (xy 160.841423 137.074895)
+ (xy 160.989332 136.718692) (xy 160.989668 136.333001) (xy 160.989668 145.464707) (xy 160.782 145.4234) (xy 158.120546 145.4234)
+ (xy 157.923073 145.225927) (xy 157.71979 145.090097) (xy 157.48 145.0424) (xy 155.909668 145.0424) (xy 155.909668 139.254001)
+ (xy 155.782668 138.946636) (xy 155.782668 136.714001) (xy 155.635382 136.35754) (xy 155.362895 136.084577) (xy 155.274668 136.047941)
+ (xy 155.274668 134.428001) (xy 155.274668 131.888001) (xy 155.127382 131.53154) (xy 154.854895 131.258577) (xy 154.498692 131.110668)
+ (xy 154.113001 131.110332) (xy 153.75654 131.257618) (xy 153.483577 131.530105) (xy 153.335668 131.886308) (xy 153.335332 132.271999)
+ (xy 153.482618 132.62846) (xy 153.755105 132.901423) (xy 154.111308 133.049332) (xy 154.496999 133.049668) (xy 154.85346 132.902382)
+ (xy 155.126423 132.629895) (xy 155.274332 132.273692) (xy 155.274668 131.888001) (xy 155.274668 134.428001) (xy 155.127382 134.07154)
+ (xy 154.854895 133.798577) (xy 154.498692 133.650668) (xy 154.113001 133.650332) (xy 153.75654 133.797618) (xy 153.483577 134.070105)
+ (xy 153.335668 134.426308) (xy 153.335332 134.811999) (xy 153.482618 135.16846) (xy 153.755105 135.441423) (xy 154.111308 135.589332)
+ (xy 154.496999 135.589668) (xy 154.85346 135.442382) (xy 155.126423 135.169895) (xy 155.274332 134.813692) (xy 155.274668 134.428001)
+ (xy 155.274668 136.047941) (xy 155.006692 135.936668) (xy 154.621001 135.936332) (xy 154.26454 136.083618) (xy 153.991577 136.356105)
+ (xy 153.843668 136.712308) (xy 153.843332 137.097999) (xy 153.990618 137.45446) (xy 154.263105 137.727423) (xy 154.619308 137.875332)
+ (xy 155.004999 137.875668) (xy 155.36146 137.728382) (xy 155.634423 137.455895) (xy 155.782332 137.099692) (xy 155.782668 136.714001)
+ (xy 155.782668 138.946636) (xy 155.762382 138.89754) (xy 155.489895 138.624577) (xy 155.133692 138.476668) (xy 154.748001 138.476332)
+ (xy 154.39154 138.623618) (xy 154.118577 138.896105) (xy 153.970668 139.252308) (xy 153.970332 139.637999) (xy 154.117618 139.99446)
+ (xy 154.390105 140.267423) (xy 154.746308 140.415332) (xy 155.131999 140.415668) (xy 155.48846 140.268382) (xy 155.761423 139.995895)
+ (xy 155.909332 139.639692) (xy 155.909668 139.254001) (xy 155.909668 145.0424) (xy 155.655668 145.0424) (xy 155.655668 141.540001)
+ (xy 155.508382 141.18354) (xy 155.235895 140.910577) (xy 154.879692 140.762668) (xy 154.494001 140.762332) (xy 154.13754 140.909618)
+ (xy 153.864577 141.182105) (xy 153.716668 141.538308) (xy 153.716332 141.923999) (xy 153.863618 142.28046) (xy 154.136105 142.553423)
+ (xy 154.492308 142.701332) (xy 154.877999 142.701668) (xy 155.23446 142.554382) (xy 155.507423 142.281895) (xy 155.655332 141.925692)
+ (xy 155.655668 141.540001) (xy 155.655668 145.0424) (xy 153.268068 145.0424) (xy 153.268068 140.778001) (xy 153.120782 140.42154)
+ (xy 152.848295 140.148577) (xy 152.492092 140.000668) (xy 152.106401 140.000332) (xy 151.74994 140.147618) (xy 151.476977 140.420105)
+ (xy 151.329068 140.776308) (xy 151.328924 140.94088) (xy 151.171895 140.783577) (xy 150.815692 140.635668) (xy 150.430001 140.635332)
+ (xy 150.07354 140.782618) (xy 149.800577 141.055105) (xy 149.652668 141.411308) (xy 149.652332 141.796999) (xy 149.799618 142.15346)
+ (xy 150.072105 142.426423) (xy 150.428308 142.574332) (xy 150.813999 142.574668) (xy 151.17046 142.427382) (xy 151.443423 142.154895)
+ (xy 151.591332 141.798692) (xy 151.591475 141.634119) (xy 151.748505 141.791423) (xy 152.104708 141.939332) (xy 152.490399 141.939668)
+ (xy 152.84686 141.792382) (xy 153.119823 141.519895) (xy 153.267732 141.163692) (xy 153.268068 140.778001) (xy 153.268068 145.0424)
+ (xy 149.051668 145.0424) (xy 149.051668 127.697001) (xy 148.904382 127.34054) (xy 148.631895 127.067577) (xy 148.275692 126.919668)
+ (xy 148.136762 126.919546) (xy 148.141423 126.914895) (xy 148.289332 126.558692) (xy 148.289668 126.173001) (xy 148.142382 125.81654)
+ (xy 147.869895 125.543577) (xy 147.513692 125.395668) (xy 147.128001 125.395332) (xy 146.77154 125.542618) (xy 146.530214 125.783522)
+ (xy 146.491382 125.68954) (xy 146.384668 125.582639) (xy 146.384668 119.823001) (xy 146.237382 119.46654) (xy 145.964895 119.193577)
+ (xy 145.608692 119.045668) (xy 145.223001 119.045332) (xy 144.86654 119.192618) (xy 144.780088 119.278919) (xy 144.694895 119.193577)
+ (xy 144.338692 119.045668) (xy 143.953001 119.045332) (xy 143.844668 119.090094) (xy 143.844668 116.648001) (xy 143.697382 116.29154)
+ (xy 143.424895 116.018577) (xy 143.068692 115.870668) (xy 142.683001 115.870332) (xy 142.32654 116.017618) (xy 142.053577 116.290105)
+ (xy 141.905668 116.646308) (xy 141.905332 117.031999) (xy 142.052618 117.38846) (xy 142.325105 117.661423) (xy 142.681308 117.809332)
+ (xy 143.066999 117.809668) (xy 143.42346 117.662382) (xy 143.696423 117.389895) (xy 143.844332 117.033692) (xy 143.844668 116.648001)
+ (xy 143.844668 119.090094) (xy 143.59654 119.192618) (xy 143.510088 119.278919) (xy 143.424895 119.193577) (xy 143.068692 119.045668)
+ (xy 142.683001 119.045332) (xy 142.32654 119.192618) (xy 142.240088 119.278919) (xy 142.154895 119.193577) (xy 141.798692 119.045668)
+ (xy 141.413001 119.045332) (xy 141.05654 119.192618) (xy 140.783577 119.465105) (xy 140.635668 119.821308) (xy 140.635332 120.206999)
+ (xy 140.782618 120.56346) (xy 141.055105 120.836423) (xy 141.411308 120.984332) (xy 141.796999 120.984668) (xy 142.15346 120.837382)
+ (xy 142.239911 120.75108) (xy 142.325105 120.836423) (xy 142.681308 120.984332) (xy 143.066999 120.984668) (xy 143.42346 120.837382)
+ (xy 143.509911 120.75108) (xy 143.595105 120.836423) (xy 143.951308 120.984332) (xy 144.336999 120.984668) (xy 144.69346 120.837382)
+ (xy 144.779911 120.75108) (xy 144.865105 120.836423) (xy 145.221308 120.984332) (xy 145.606999 120.984668) (xy 145.96346 120.837382)
+ (xy 146.236423 120.564895) (xy 146.384332 120.208692) (xy 146.384668 119.823001) (xy 146.384668 125.582639) (xy 146.218895 125.416577)
+ (xy 145.862692 125.268668) (xy 145.477001 125.268332) (xy 145.12054 125.415618) (xy 145.034088 125.501919) (xy 144.948895 125.416577)
+ (xy 144.592692 125.268668) (xy 144.207001 125.268332) (xy 143.85054 125.415618) (xy 143.764088 125.501919) (xy 143.678895 125.416577)
+ (xy 143.322692 125.268668) (xy 142.937001 125.268332) (xy 142.58054 125.415618) (xy 142.494088 125.501919) (xy 142.408895 125.416577)
+ (xy 142.052692 125.268668) (xy 141.667001 125.268332) (xy 141.31054 125.415618) (xy 141.224088 125.501919) (xy 141.138895 125.416577)
+ (xy 140.782692 125.268668) (xy 140.397001 125.268332) (xy 140.04054 125.415618) (xy 139.941366 125.514619) (xy 139.843495 125.416577)
+ (xy 139.487292 125.268668) (xy 139.145668 125.26837) (xy 139.145668 100.773001) (xy 138.998382 100.41654) (xy 138.725895 100.143577)
+ (xy 138.369692 99.995668) (xy 137.984001 99.995332) (xy 137.62754 100.142618) (xy 137.354577 100.415105) (xy 137.206668 100.771308)
+ (xy 137.206332 101.156999) (xy 137.353618 101.51346) (xy 137.626105 101.786423) (xy 137.982308 101.934332) (xy 138.367999 101.934668)
+ (xy 138.72446 101.787382) (xy 138.997423 101.514895) (xy 139.145332 101.158692) (xy 139.145668 100.773001) (xy 139.145668 125.26837)
+ (xy 139.101601 125.268332) (xy 138.764668 125.407549) (xy 138.764668 119.823001) (xy 138.617382 119.46654) (xy 138.344895 119.193577)
+ (xy 138.002668 119.051471) (xy 138.002668 107.123001) (xy 137.855382 106.76654) (xy 137.582895 106.493577) (xy 137.568735 106.487697)
+ (xy 137.672132 106.238692) (xy 137.672468 105.853001) (xy 137.525182 105.49654) (xy 137.252695 105.223577) (xy 136.896492 105.075668)
+ (xy 136.510801 105.075332) (xy 136.15434 105.222618) (xy 135.881377 105.495105) (xy 135.733468 105.851308) (xy 135.733132 106.236999)
+ (xy 135.880418 106.59346) (xy 136.152905 106.866423) (xy 136.167064 106.872302) (xy 136.063668 107.121308) (xy 136.063332 107.506999)
+ (xy 136.210618 107.86346) (xy 136.483105 108.136423) (xy 136.839308 108.284332) (xy 137.224999 108.284668) (xy 137.58146 108.137382)
+ (xy 137.854423 107.864895) (xy 138.002332 107.508692) (xy 138.002668 107.123001) (xy 138.002668 119.051471) (xy 137.988692 119.045668)
+ (xy 137.603001 119.045332) (xy 137.24654 119.192618) (xy 136.973577 119.465105) (xy 136.825668 119.821308) (xy 136.825332 120.206999)
+ (xy 136.972618 120.56346) (xy 137.245105 120.836423) (xy 137.601308 120.984332) (xy 137.986999 120.984668) (xy 138.34346 120.837382)
+ (xy 138.616423 120.564895) (xy 138.764332 120.208692) (xy 138.764668 119.823001) (xy 138.764668 125.407549) (xy 138.74514 125.415618)
+ (xy 138.480688 125.679608) (xy 138.344895 125.543577) (xy 137.988692 125.395668) (xy 137.603001 125.395332) (xy 137.24654 125.542618)
+ (xy 137.160088 125.628919) (xy 137.074895 125.543577) (xy 136.718692 125.395668) (xy 136.333001 125.395332) (xy 136.224668 125.440094)
+ (xy 136.224668 109.663001) (xy 136.077382 109.30654) (xy 135.804895 109.033577) (xy 135.448692 108.885668) (xy 135.063001 108.885332)
+ (xy 134.70654 109.032618) (xy 134.433577 109.305105) (xy 134.285668 109.661308) (xy 134.285332 110.046999) (xy 134.432618 110.40346)
+ (xy 134.705105 110.676423) (xy 135.061308 110.824332) (xy 135.446999 110.824668) (xy 135.80346 110.677382) (xy 136.076423 110.404895)
+ (xy 136.224332 110.048692) (xy 136.224668 109.663001) (xy 136.224668 125.440094) (xy 135.97654 125.542618) (xy 135.890088 125.628919)
+ (xy 135.804895 125.543577) (xy 135.589668 125.454206) (xy 135.589668 121.474001) (xy 135.442382 121.11754) (xy 135.169895 120.844577)
+ (xy 134.813692 120.696668) (xy 134.428001 120.696332) (xy 134.07154 120.843618) (xy 133.798577 121.116105) (xy 133.684668 121.390427)
+ (xy 133.684668 109.663001) (xy 133.537382 109.30654) (xy 133.264895 109.033577) (xy 132.908692 108.885668) (xy 132.523001 108.885332)
+ (xy 132.16654 109.032618) (xy 132.080088 109.118919) (xy 131.994895 109.033577) (xy 131.638692 108.885668) (xy 131.253001 108.885332)
+ (xy 130.89654 109.032618) (xy 130.810088 109.118919) (xy 130.724895 109.033577) (xy 130.368692 108.885668) (xy 129.983001 108.885332)
+ (xy 129.62654 109.032618) (xy 129.353577 109.305105) (xy 129.205668 109.661308) (xy 129.205332 110.046999) (xy 129.352618 110.40346)
+ (xy 129.625105 110.676423) (xy 129.981308 110.824332) (xy 130.366999 110.824668) (xy 130.72346 110.677382) (xy 130.809911 110.59108)
+ (xy 130.895105 110.676423) (xy 131.251308 110.824332) (xy 131.636999 110.824668) (xy 131.99346 110.677382) (xy 132.079911 110.59108)
+ (xy 132.165105 110.676423) (xy 132.521308 110.824332) (xy 132.906999 110.824668) (xy 133.26346 110.677382) (xy 133.536423 110.404895)
+ (xy 133.684332 110.048692) (xy 133.684668 109.663001) (xy 133.684668 121.390427) (xy 133.650668 121.472308) (xy 133.650332 121.857999)
+ (xy 133.797618 122.21446) (xy 134.070105 122.487423) (xy 134.426308 122.635332) (xy 134.811999 122.635668) (xy 135.16846 122.488382)
+ (xy 135.441423 122.215895) (xy 135.589332 121.859692) (xy 135.589668 121.474001) (xy 135.589668 125.454206) (xy 135.448692 125.395668)
+ (xy 135.063001 125.395332) (xy 134.70654 125.542618) (xy 134.620088 125.628919) (xy 134.534895 125.543577) (xy 134.178692 125.395668)
+ (xy 133.793001 125.395332) (xy 133.43654 125.542618) (xy 133.350088 125.628919) (xy 133.264895 125.543577) (xy 132.908692 125.395668)
+ (xy 132.523001 125.395332) (xy 132.16654 125.542618) (xy 132.160668 125.548479) (xy 132.160668 118.299001) (xy 132.013382 117.94254)
+ (xy 131.740895 117.669577) (xy 131.384692 117.521668) (xy 130.999001 117.521332) (xy 130.64254 117.668618) (xy 130.369577 117.941105)
+ (xy 130.221668 118.297308) (xy 130.221332 118.682999) (xy 130.368618 119.03946) (xy 130.641105 119.312423) (xy 130.997308 119.460332)
+ (xy 131.382999 119.460668) (xy 131.73946 119.313382) (xy 132.012423 119.040895) (xy 132.160332 118.684692) (xy 132.160668 118.299001)
+ (xy 132.160668 125.548479) (xy 132.080088 125.628919) (xy 131.994895 125.543577) (xy 131.638692 125.395668) (xy 131.253001 125.395332)
+ (xy 130.89654 125.542618) (xy 130.810088 125.628919) (xy 130.724895 125.543577) (xy 130.368692 125.395668) (xy 129.983001 125.395332)
+ (xy 129.62654 125.542618) (xy 129.540088 125.628919) (xy 129.454895 125.543577) (xy 129.138889 125.412359) (xy 129.45346 125.282382)
+ (xy 129.726423 125.009895) (xy 129.874332 124.653692) (xy 129.874668 124.268001) (xy 129.874668 121.728001) (xy 129.874668 119.188001)
+ (xy 129.874668 116.648001) (xy 129.727382 116.29154) (xy 129.454895 116.018577) (xy 129.098692 115.870668) (xy 128.713001 115.870332)
+ (xy 128.604668 115.915094) (xy 128.604668 108.393001) (xy 128.457382 108.03654) (xy 128.223668 107.802417) (xy 128.223668 103.313001)
+ (xy 128.076382 102.95654) (xy 127.803895 102.683577) (xy 127.447692 102.535668) (xy 127.062001 102.535332) (xy 126.70554 102.682618)
+ (xy 126.432577 102.955105) (xy 126.284668 103.311308) (xy 126.284332 103.696999) (xy 126.431618 104.05346) (xy 126.704105 104.326423)
+ (xy 127.060308 104.474332) (xy 127.445999 104.474668) (xy 127.80246 104.327382) (xy 128.075423 104.054895) (xy 128.223332 103.698692)
+ (xy 128.223668 103.313001) (xy 128.223668 107.802417) (xy 128.184895 107.763577) (xy 127.828692 107.615668) (xy 127.443001 107.615332)
+ (xy 127.08654 107.762618) (xy 127.000088 107.848919) (xy 126.914895 107.763577) (xy 126.558692 107.615668) (xy 126.173001 107.615332)
+ (xy 125.81654 107.762618) (xy 125.810668 107.768479) (xy 125.810668 70.547001) (xy 125.810668 67.372001) (xy 125.663382 67.01554)
+ (xy 125.390895 66.742577) (xy 125.034692 66.594668) (xy 124.649001 66.594332) (xy 124.29254 66.741618) (xy 124.019577 67.014105)
+ (xy 123.905668 67.288427) (xy 123.905668 65.721001) (xy 123.758382 65.36454) (xy 123.485895 65.091577) (xy 123.129692 64.943668)
+ (xy 122.744001 64.943332) (xy 122.38754 65.090618) (xy 122.114577 65.363105) (xy 121.966668 65.719308) (xy 121.966332 66.104999)
+ (xy 122.113618 66.46146) (xy 122.386105 66.734423) (xy 122.742308 66.882332) (xy 123.127999 66.882668) (xy 123.48446 66.735382)
+ (xy 123.757423 66.462895) (xy 123.905332 66.106692) (xy 123.905668 65.721001) (xy 123.905668 67.288427) (xy 123.871668 67.370308)
+ (xy 123.871458 67.610539) (xy 123.633001 67.610332) (xy 123.27654 67.757618) (xy 123.003577 68.030105) (xy 122.855668 68.386308)
+ (xy 122.855332 68.771999) (xy 123.002618 69.12846) (xy 123.275105 69.401423) (xy 123.631308 69.549332) (xy 124.016999 69.549668)
+ (xy 124.37346 69.402382) (xy 124.646423 69.129895) (xy 124.794332 68.773692) (xy 124.794541 68.53346) (xy 125.032999 68.533668)
+ (xy 125.38946 68.386382) (xy 125.662423 68.113895) (xy 125.810332 67.757692) (xy 125.810668 67.372001) (xy 125.810668 70.547001)
+ (xy 125.663382 70.19054) (xy 125.390895 69.917577) (xy 125.034692 69.769668) (xy 124.649001 69.769332) (xy 124.29254 69.916618)
+ (xy 124.019577 70.189105) (xy 123.871668 70.545308) (xy 123.871332 70.930999) (xy 124.018618 71.28746) (xy 124.291105 71.560423)
+ (xy 124.647308 71.708332) (xy 125.032999 71.708668) (xy 125.38946 71.561382) (xy 125.662423 71.288895) (xy 125.810332 70.932692)
+ (xy 125.810668 70.547001) (xy 125.810668 107.768479) (xy 125.730088 107.848919) (xy 125.644895 107.763577) (xy 125.556668 107.726941)
+ (xy 125.556668 102.170001) (xy 125.409382 101.81354) (xy 125.136895 101.540577) (xy 124.921668 101.451206) (xy 124.921668 81.596001)
+ (xy 124.774382 81.23954) (xy 124.501895 80.966577) (xy 124.145692 80.818668) (xy 123.760001 80.818332) (xy 123.40354 80.965618)
+ (xy 123.270437 81.098488) (xy 123.270668 80.834001) (xy 123.123382 80.47754) (xy 122.889668 80.243417) (xy 122.889668 69.150001)
+ (xy 122.742382 68.79354) (xy 122.469895 68.520577) (xy 122.113692 68.372668) (xy 121.728001 68.372332) (xy 121.37154 68.519618)
+ (xy 121.098577 68.792105) (xy 120.950668 69.148308) (xy 120.950332 69.533999) (xy 121.097618 69.89046) (xy 121.370105 70.163423)
+ (xy 121.726308 70.311332) (xy 122.111999 70.311668) (xy 122.46846 70.164382) (xy 122.741423 69.891895) (xy 122.889332 69.535692)
+ (xy 122.889668 69.150001) (xy 122.889668 80.243417) (xy 122.850895 80.204577) (xy 122.494692 80.056668) (xy 122.109001 80.056332)
+ (xy 121.75254 80.203618) (xy 121.479577 80.476105) (xy 121.390099 80.69159) (xy 121.093001 80.691332) (xy 121.01377 80.724069)
+ (xy 120.964382 80.60454) (xy 120.691895 80.331577) (xy 120.335692 80.183668) (xy 119.950001 80.183332) (xy 119.59354 80.330618)
+ (xy 119.320577 80.603105) (xy 119.172668 80.959308) (xy 119.172332 81.344999) (xy 119.319618 81.70146) (xy 119.592105 81.974423)
+ (xy 119.948308 82.122332) (xy 120.333999 82.122668) (xy 120.413229 82.08993) (xy 120.462618 82.20946) (xy 120.735105 82.482423)
+ (xy 121.091308 82.630332) (xy 121.476999 82.630668) (xy 121.83346 82.483382) (xy 122.106423 82.210895) (xy 122.1959 81.995409)
+ (xy 122.492999 81.995668) (xy 122.84946 81.848382) (xy 122.982562 81.715511) (xy 122.982332 81.979999) (xy 123.129618 82.33646)
+ (xy 123.402105 82.609423) (xy 123.758308 82.757332) (xy 124.143999 82.757668) (xy 124.50046 82.610382) (xy 124.773423 82.337895)
+ (xy 124.921332 81.981692) (xy 124.921668 81.596001) (xy 124.921668 101.451206) (xy 124.780692 101.392668) (xy 124.395001 101.392332)
+ (xy 124.03854 101.539618) (xy 123.765577 101.812105) (xy 123.651668 102.086427) (xy 123.651668 97.090001) (xy 123.504382 96.73354)
+ (xy 123.231895 96.460577) (xy 122.875692 96.312668) (xy 122.490001 96.312332) (xy 122.254668 96.409569) (xy 122.254668 85.279001)
+ (xy 122.107382 84.92254) (xy 121.834895 84.649577) (xy 121.478692 84.501668) (xy 121.093001 84.501332) (xy 120.73654 84.648618)
+ (xy 120.463577 84.921105) (xy 120.315668 85.277308) (xy 120.315332 85.662999) (xy 120.462618 86.01946) (xy 120.735105 86.292423)
+ (xy 121.091308 86.440332) (xy 121.476999 86.440668) (xy 121.83346 86.293382) (xy 122.106423 86.020895) (xy 122.254332 85.664692)
+ (xy 122.254668 85.279001) (xy 122.254668 96.409569) (xy 122.13354 96.459618) (xy 121.983477 96.609418) (xy 121.834895 96.460577)
+ (xy 121.478692 96.312668) (xy 121.093001 96.312332) (xy 120.857668 96.409569) (xy 120.857668 91.375001) (xy 120.710382 91.01854)
+ (xy 120.437895 90.745577) (xy 120.081692 90.597668) (xy 119.696001 90.597332) (xy 119.33954 90.744618) (xy 119.066577 91.017105)
+ (xy 118.918668 91.373308) (xy 118.918332 91.758999) (xy 119.065618 92.11546) (xy 119.338105 92.388423) (xy 119.694308 92.536332)
+ (xy 120.079999 92.536668) (xy 120.43646 92.389382) (xy 120.709423 92.116895) (xy 120.857332 91.760692) (xy 120.857668 91.375001)
+ (xy 120.857668 96.409569) (xy 120.73654 96.459618) (xy 120.463577 96.732105) (xy 120.315668 97.088308) (xy 120.315332 97.473999)
+ (xy 120.462618 97.83046) (xy 120.735105 98.103423) (xy 121.091308 98.251332) (xy 121.476999 98.251668) (xy 121.83346 98.104382)
+ (xy 121.983522 97.954581) (xy 122.132105 98.103423) (xy 122.488308 98.251332) (xy 122.873999 98.251668) (xy 123.23046 98.104382)
+ (xy 123.503423 97.831895) (xy 123.651332 97.475692) (xy 123.651668 97.090001) (xy 123.651668 102.086427) (xy 123.617668 102.168308)
+ (xy 123.617332 102.553999) (xy 123.764618 102.91046) (xy 124.037105 103.183423) (xy 124.393308 103.331332) (xy 124.778999 103.331668)
+ (xy 125.13546 103.184382) (xy 125.408423 102.911895) (xy 125.556332 102.555692) (xy 125.556668 102.170001) (xy 125.556668 107.726941)
+ (xy 125.288692 107.615668) (xy 124.903001 107.615332) (xy 124.54654 107.762618) (xy 124.273577 108.035105) (xy 124.125668 108.391308)
+ (xy 124.125332 108.776999) (xy 124.272618 109.13346) (xy 124.545105 109.406423) (xy 124.901308 109.554332) (xy 125.286999 109.554668)
+ (xy 125.64346 109.407382) (xy 125.729911 109.32108) (xy 125.815105 109.406423) (xy 126.171308 109.554332) (xy 126.556999 109.554668)
+ (xy 126.91346 109.407382) (xy 126.999911 109.32108) (xy 127.085105 109.406423) (xy 127.441308 109.554332) (xy 127.826999 109.554668)
+ (xy 128.18346 109.407382) (xy 128.456423 109.134895) (xy 128.604332 108.778692) (xy 128.604668 108.393001) (xy 128.604668 115.915094)
+ (xy 128.35654 116.017618) (xy 128.083577 116.290105) (xy 127.935668 116.646308) (xy 127.935332 117.031999) (xy 128.082618 117.38846)
+ (xy 128.355105 117.661423) (xy 128.711308 117.809332) (xy 129.096999 117.809668) (xy 129.45346 117.662382) (xy 129.726423 117.389895)
+ (xy 129.874332 117.033692) (xy 129.874668 116.648001) (xy 129.874668 119.188001) (xy 129.727382 118.83154) (xy 129.454895 118.558577)
+ (xy 129.098692 118.410668) (xy 128.713001 118.410332) (xy 128.35654 118.557618) (xy 128.083577 118.830105) (xy 127.935668 119.186308)
+ (xy 127.935332 119.571999) (xy 128.082618 119.92846) (xy 128.355105 120.201423) (xy 128.711308 120.349332) (xy 129.096999 120.349668)
+ (xy 129.45346 120.202382) (xy 129.726423 119.929895) (xy 129.874332 119.573692) (xy 129.874668 119.188001) (xy 129.874668 121.728001)
+ (xy 129.727382 121.37154) (xy 129.454895 121.098577) (xy 129.098692 120.950668) (xy 128.713001 120.950332) (xy 128.35654 121.097618)
+ (xy 128.083577 121.370105) (xy 127.935668 121.726308) (xy 127.935332 122.111999) (xy 128.082618 122.46846) (xy 128.355105 122.741423)
+ (xy 128.711308 122.889332) (xy 129.096999 122.889668) (xy 129.45346 122.742382) (xy 129.726423 122.469895) (xy 129.874332 122.113692)
+ (xy 129.874668 121.728001) (xy 129.874668 124.268001) (xy 129.727382 123.91154) (xy 129.454895 123.638577) (xy 129.098692 123.490668)
+ (xy 128.713001 123.490332) (xy 128.35654 123.637618) (xy 128.083577 123.910105) (xy 127.935668 124.266308) (xy 127.935332 124.651999)
+ (xy 128.082618 125.00846) (xy 128.355105 125.281423) (xy 128.67111 125.41264) (xy 128.35654 125.542618) (xy 128.083577 125.815105)
+ (xy 127.935668 126.171308) (xy 127.935332 126.556999) (xy 128.082618 126.91346) (xy 128.355105 127.186423) (xy 128.711308 127.334332)
+ (xy 129.096999 127.334668) (xy 129.45346 127.187382) (xy 129.539911 127.10108) (xy 129.625105 127.186423) (xy 129.981308 127.334332)
+ (xy 130.366999 127.334668) (xy 130.72346 127.187382) (xy 130.809911 127.10108) (xy 130.895105 127.186423) (xy 131.251308 127.334332)
+ (xy 131.636999 127.334668) (xy 131.99346 127.187382) (xy 132.079911 127.10108) (xy 132.165105 127.186423) (xy 132.521308 127.334332)
+ (xy 132.906999 127.334668) (xy 133.26346 127.187382) (xy 133.349911 127.10108) (xy 133.435105 127.186423) (xy 133.791308 127.334332)
+ (xy 134.176999 127.334668) (xy 134.53346 127.187382) (xy 134.619911 127.10108) (xy 134.705105 127.186423) (xy 135.061308 127.334332)
+ (xy 135.446999 127.334668) (xy 135.80346 127.187382) (xy 135.889911 127.10108) (xy 135.975105 127.186423) (xy 136.331308 127.334332)
+ (xy 136.716999 127.334668) (xy 137.07346 127.187382) (xy 137.159911 127.10108) (xy 137.245105 127.186423) (xy 137.601308 127.334332)
+ (xy 137.986999 127.334668) (xy 138.34346 127.187382) (xy 138.607911 126.923391) (xy 138.743705 127.059423) (xy 139.099908 127.207332)
+ (xy 139.485599 127.207668) (xy 139.84206 127.060382) (xy 139.941233 126.96138) (xy 140.039105 127.059423) (xy 140.395308 127.207332)
+ (xy 140.780999 127.207668) (xy 141.13746 127.060382) (xy 141.223911 126.97408) (xy 141.309105 127.059423) (xy 141.665308 127.207332)
+ (xy 142.050999 127.207668) (xy 142.40746 127.060382) (xy 142.493911 126.97408) (xy 142.579105 127.059423) (xy 142.935308 127.207332)
+ (xy 143.320999 127.207668) (xy 143.67746 127.060382) (xy 143.763911 126.97408) (xy 143.849105 127.059423) (xy 144.205308 127.207332)
+ (xy 144.590999 127.207668) (xy 144.94746 127.060382) (xy 145.033911 126.97408) (xy 145.119105 127.059423) (xy 145.475308 127.207332)
+ (xy 145.860999 127.207668) (xy 146.21746 127.060382) (xy 146.458785 126.819477) (xy 146.497618 126.91346) (xy 146.770105 127.186423)
+ (xy 147.126308 127.334332) (xy 147.265237 127.334453) (xy 147.260577 127.339105) (xy 147.112668 127.695308) (xy 147.112332 128.080999)
+ (xy 147.259618 128.43746) (xy 147.532105 128.710423) (xy 147.888308 128.858332) (xy 148.273999 128.858668) (xy 148.63046 128.711382)
+ (xy 148.903423 128.438895) (xy 149.051332 128.082692) (xy 149.051668 127.697001) (xy 149.051668 145.0424) (xy 148.035668 145.0424)
+ (xy 148.035668 142.302001) (xy 147.888382 141.94554) (xy 147.654668 141.711417) (xy 147.654668 135.698001) (xy 147.507382 135.34154)
+ (xy 147.234895 135.068577) (xy 146.878692 134.920668) (xy 146.493001 134.920332) (xy 146.13654 135.067618) (xy 145.863577 135.340105)
+ (xy 145.715668 135.696308) (xy 145.715332 136.081999) (xy 145.862618 136.43846) (xy 146.135105 136.711423) (xy 146.491308 136.859332)
+ (xy 146.876999 136.859668) (xy 147.23346 136.712382) (xy 147.506423 136.439895) (xy 147.654332 136.083692) (xy 147.654668 135.698001)
+ (xy 147.654668 141.711417) (xy 147.615895 141.672577) (xy 147.259692 141.524668) (xy 146.874001 141.524332) (xy 146.51754 141.671618)
+ (xy 146.244577 141.944105) (xy 146.096668 142.300308) (xy 146.096332 142.685999) (xy 146.243618 143.04246) (xy 146.516105 143.315423)
+ (xy 146.872308 143.463332) (xy 147.257999 143.463668) (xy 147.61446 143.316382) (xy 147.887423 143.043895) (xy 148.035332 142.687692)
+ (xy 148.035668 142.302001) (xy 148.035668 145.0424) (xy 145.749668 145.0424) (xy 145.749668 142.048001) (xy 145.602382 141.69154)
+ (xy 145.329895 141.418577) (xy 144.973692 141.270668) (xy 144.588001 141.270332) (xy 144.479668 141.315094) (xy 144.479668 139.508001)
+ (xy 144.332382 139.15154) (xy 144.059895 138.878577) (xy 143.703692 138.730668) (xy 143.318001 138.730332) (xy 142.96154 138.877618)
+ (xy 142.688577 139.150105) (xy 142.540668 139.506308) (xy 142.540332 139.891999) (xy 142.687618 140.24846) (xy 142.960105 140.521423)
+ (xy 143.316308 140.669332) (xy 143.701999 140.669668) (xy 144.05846 140.522382) (xy 144.331423 140.249895) (xy 144.479332 139.893692)
+ (xy 144.479668 139.508001) (xy 144.479668 141.315094) (xy 144.23154 141.417618) (xy 143.958577 141.690105) (xy 143.810668 142.046308)
+ (xy 143.810332 142.431999) (xy 143.957618 142.78846) (xy 144.230105 143.061423) (xy 144.586308 143.209332) (xy 144.971999 143.209668)
+ (xy 145.32846 143.062382) (xy 145.601423 142.789895) (xy 145.749332 142.433692) (xy 145.749668 142.048001) (xy 145.749668 145.0424)
+ (xy 143.209668 145.0424) (xy 143.209668 142.048001) (xy 143.062382 141.69154) (xy 142.789895 141.418577) (xy 142.433692 141.270668)
+ (xy 142.048001 141.270332) (xy 141.69154 141.417618) (xy 141.418577 141.690105) (xy 141.304668 141.964427) (xy 141.304668 139.508001)
+ (xy 141.157382 139.15154) (xy 140.884895 138.878577) (xy 140.528692 138.730668) (xy 140.143001 138.730332) (xy 139.78654 138.877618)
+ (xy 139.513577 139.150105) (xy 139.365668 139.506308) (xy 139.365332 139.891999) (xy 139.512618 140.24846) (xy 139.785105 140.521423)
+ (xy 140.141308 140.669332) (xy 140.526999 140.669668) (xy 140.88346 140.522382) (xy 141.156423 140.249895) (xy 141.304332 139.893692)
+ (xy 141.304668 139.508001) (xy 141.304668 141.964427) (xy 141.270668 142.046308) (xy 141.270332 142.431999) (xy 141.417618 142.78846)
+ (xy 141.690105 143.061423) (xy 142.046308 143.209332) (xy 142.431999 143.209668) (xy 142.78846 143.062382) (xy 143.061423 142.789895)
+ (xy 143.209332 142.433692) (xy 143.209668 142.048001) (xy 143.209668 145.0424) (xy 140.034668 145.0424) (xy 140.034668 142.048001)
+ (xy 139.887382 141.69154) (xy 139.614895 141.418577) (xy 139.258692 141.270668) (xy 138.873001 141.270332) (xy 138.51654 141.417618)
+ (xy 138.243577 141.690105) (xy 138.095668 142.046308) (xy 138.095332 142.431999) (xy 138.242618 142.78846) (xy 138.515105 143.061423)
+ (xy 138.871308 143.209332) (xy 139.256999 143.209668) (xy 139.61346 143.062382) (xy 139.886423 142.789895) (xy 140.034332 142.433692)
+ (xy 140.034668 142.048001) (xy 140.034668 145.0424) (xy 137.494668 145.0424) (xy 137.494668 142.048001) (xy 137.347382 141.69154)
+ (xy 137.074895 141.418577) (xy 136.859668 141.329206) (xy 136.859668 136.333001) (xy 136.712382 135.97654) (xy 136.439895 135.703577)
+ (xy 136.083692 135.555668) (xy 135.698001 135.555332) (xy 135.34154 135.702618) (xy 135.068577 135.975105) (xy 134.920668 136.331308)
+ (xy 134.920332 136.716999) (xy 135.067618 137.07346) (xy 135.340105 137.346423) (xy 135.696308 137.494332) (xy 136.081999 137.494668)
+ (xy 136.43846 137.347382) (xy 136.711423 137.074895) (xy 136.859332 136.718692) (xy 136.859668 136.333001) (xy 136.859668 141.329206)
+ (xy 136.718692 141.270668) (xy 136.333001 141.270332) (xy 135.97654 141.417618) (xy 135.703577 141.690105) (xy 135.555668 142.046308)
+ (xy 135.555332 142.431999) (xy 135.702618 142.78846) (xy 135.975105 143.061423) (xy 136.331308 143.209332) (xy 136.716999 143.209668)
+ (xy 137.07346 143.062382) (xy 137.346423 142.789895) (xy 137.494332 142.433692) (xy 137.494668 142.048001) (xy 137.494668 145.0424)
+ (xy 134.954668 145.0424) (xy 134.954668 142.048001) (xy 134.807382 141.69154) (xy 134.534895 141.418577) (xy 134.319668 141.329206)
+ (xy 134.319668 139.889001) (xy 134.172382 139.53254) (xy 133.899895 139.259577) (xy 133.543692 139.111668) (xy 133.176668 139.111348)
+ (xy 133.176668 135.571001) (xy 133.029382 135.21454) (xy 132.756895 134.941577) (xy 132.400692 134.793668) (xy 132.015001 134.793332)
+ (xy 131.65854 134.940618) (xy 131.385577 135.213105) (xy 131.237668 135.569308) (xy 131.237332 135.954999) (xy 131.384618 136.31146)
+ (xy 131.657105 136.584423) (xy 132.013308 136.732332) (xy 132.398999 136.732668) (xy 132.75546 136.585382) (xy 133.028423 136.312895)
+ (xy 133.176332 135.956692) (xy 133.176668 135.571001) (xy 133.176668 139.111348) (xy 133.158001 139.111332) (xy 132.80154 139.258618)
+ (xy 132.528577 139.531105) (xy 132.414668 139.805427) (xy 132.414668 138.873001) (xy 132.267382 138.51654) (xy 131.994895 138.243577)
+ (xy 131.638692 138.095668) (xy 131.253001 138.095332) (xy 130.89654 138.242618) (xy 130.810088 138.328919) (xy 130.724895 138.243577)
+ (xy 130.368692 138.095668) (xy 129.983001 138.095332) (xy 129.798374 138.171617) (xy 129.874332 137.988692) (xy 129.874668 137.603001)
+ (xy 129.727382 137.24654) (xy 129.454895 136.973577) (xy 129.098692 136.825668) (xy 128.713001 136.825332) (xy 128.35654 136.972618)
+ (xy 128.083577 137.245105) (xy 127.935668 137.601308) (xy 127.935332 137.986999) (xy 128.082618 138.34346) (xy 128.168919 138.429911)
+ (xy 128.083577 138.515105) (xy 127.935668 138.871308) (xy 127.935332 139.256999) (xy 128.082618 139.61346) (xy 128.355105 139.886423)
+ (xy 128.711308 140.034332) (xy 129.096999 140.034668) (xy 129.45346 139.887382) (xy 129.539911 139.80108) (xy 129.625105 139.886423)
+ (xy 129.981308 140.034332) (xy 130.366999 140.034668) (xy 130.72346 139.887382) (xy 130.809911 139.80108) (xy 130.895105 139.886423)
+ (xy 131.251308 140.034332) (xy 131.636999 140.034668) (xy 131.99346 139.887382) (xy 132.266423 139.614895) (xy 132.414332 139.258692)
+ (xy 132.414668 138.873001) (xy 132.414668 139.805427) (xy 132.380668 139.887308) (xy 132.380332 140.272999) (xy 132.527618 140.62946)
+ (xy 132.800105 140.902423) (xy 133.156308 141.050332) (xy 133.541999 141.050668) (xy 133.89846 140.903382) (xy 134.171423 140.630895)
+ (xy 134.319332 140.274692) (xy 134.319668 139.889001) (xy 134.319668 141.329206) (xy 134.178692 141.270668) (xy 133.793001 141.270332)
+ (xy 133.43654 141.417618) (xy 133.163577 141.690105) (xy 133.015668 142.046308) (xy 133.015332 142.431999) (xy 133.162618 142.78846)
+ (xy 133.435105 143.061423) (xy 133.791308 143.209332) (xy 134.176999 143.209668) (xy 134.53346 143.062382) (xy 134.806423 142.789895)
+ (xy 134.954332 142.433692) (xy 134.954668 142.048001) (xy 134.954668 145.0424) (xy 132.414668 145.0424) (xy 132.414668 142.048001)
+ (xy 132.267382 141.69154) (xy 131.994895 141.418577) (xy 131.638692 141.270668) (xy 131.253001 141.270332) (xy 130.89654 141.417618)
+ (xy 130.623577 141.690105) (xy 130.475668 142.046308) (xy 130.475332 142.431999) (xy 130.622618 142.78846) (xy 130.895105 143.061423)
+ (xy 131.251308 143.209332) (xy 131.636999 143.209668) (xy 131.99346 143.062382) (xy 132.266423 142.789895) (xy 132.414332 142.433692)
+ (xy 132.414668 142.048001) (xy 132.414668 145.0424) (xy 129.874668 145.0424) (xy 129.874668 142.048001) (xy 129.727382 141.69154)
+ (xy 129.454895 141.418577) (xy 129.098692 141.270668) (xy 128.713001 141.270332) (xy 128.35654 141.417618) (xy 128.083577 141.690105)
+ (xy 127.935668 142.046308) (xy 127.935332 142.431999) (xy 128.082618 142.78846) (xy 128.355105 143.061423) (xy 128.711308 143.209332)
+ (xy 129.096999 143.209668) (xy 129.45346 143.062382) (xy 129.726423 142.789895) (xy 129.874332 142.433692) (xy 129.874668 142.048001)
+ (xy 129.874668 145.0424) (xy 129.771474 145.0424) (xy 129.65279 144.963097) (xy 129.413 144.9154) (xy 127.254 144.9154)
+ (xy 127.01421 144.963097) (xy 126.810927 145.098927) (xy 126.105454 145.8044) (xy 124.667668 145.8044) (xy 124.667668 121.347001)
+ (xy 124.520382 120.99054) (xy 124.247895 120.717577) (xy 123.891692 120.569668) (xy 123.506001 120.569332) (xy 123.14954 120.716618)
+ (xy 123.016668 120.849257) (xy 123.016668 102.678001) (xy 122.869382 102.32154) (xy 122.596895 102.048577) (xy 122.240692 101.900668)
+ (xy 121.855001 101.900332) (xy 121.49854 102.047618) (xy 121.225577 102.320105) (xy 121.077668 102.676308) (xy 121.077332 103.061999)
+ (xy 121.224618 103.41846) (xy 121.497105 103.691423) (xy 121.853308 103.839332) (xy 122.238999 103.839668) (xy 122.59546 103.692382)
+ (xy 122.868423 103.419895) (xy 123.016332 103.063692) (xy 123.016668 102.678001) (xy 123.016668 120.849257) (xy 122.999477 120.866418)
+ (xy 122.850895 120.717577) (xy 122.494692 120.569668) (xy 122.109001 120.569332) (xy 121.75254 120.716618) (xy 121.479577 120.989105)
+ (xy 121.331668 121.345308) (xy 121.331332 121.730999) (xy 121.478618 122.08746) (xy 121.751105 122.360423) (xy 122.107308 122.508332)
+ (xy 122.220539 122.50843) (xy 122.220332 122.746999) (xy 122.367618 123.10346) (xy 122.453919 123.189911) (xy 122.368577 123.275105)
+ (xy 122.220668 123.631308) (xy 122.220332 124.016999) (xy 122.367618 124.37346) (xy 122.640105 124.646423) (xy 122.996308 124.794332)
+ (xy 123.381999 124.794668) (xy 123.73846 124.647382) (xy 124.011423 124.374895) (xy 124.159332 124.018692) (xy 124.159668 123.633001)
+ (xy 124.012382 123.27654) (xy 123.92608 123.190088) (xy 124.011423 123.104895) (xy 124.159332 122.748692) (xy 124.159638 122.397255)
+ (xy 124.24646 122.361382) (xy 124.519423 122.088895) (xy 124.667332 121.732692) (xy 124.667668 121.347001) (xy 124.667668 145.8044)
+ (xy 124.159668 145.8044) (xy 124.159668 135.698001) (xy 124.012382 135.34154) (xy 123.739895 135.068577) (xy 123.383692 134.920668)
+ (xy 122.998001 134.920332) (xy 122.64154 135.067618) (xy 122.368577 135.340105) (xy 122.220668 135.696308) (xy 122.220332 136.081999)
+ (xy 122.367618 136.43846) (xy 122.640105 136.711423) (xy 122.996308 136.859332) (xy 123.381999 136.859668) (xy 123.73846 136.712382)
+ (xy 124.011423 136.439895) (xy 124.159332 136.083692) (xy 124.159668 135.698001) (xy 124.159668 145.8044) (xy 120.857668 145.8044)
+ (xy 120.857668 122.236001) (xy 120.710382 121.87954) (xy 120.476668 121.645417) (xy 120.476668 115.378001) (xy 120.329382 115.02154)
+ (xy 120.056895 114.748577) (xy 119.700692 114.600668) (xy 119.315001 114.600332) (xy 118.95854 114.747618) (xy 118.825668 114.880258)
+ (xy 118.825668 91.121001) (xy 118.825668 87.565001) (xy 118.678382 87.20854) (xy 118.405895 86.935577) (xy 118.049692 86.787668)
+ (xy 117.682712 86.787348) (xy 117.682712 64.400698) (xy 117.496838 63.950848) (xy 117.152962 63.606372) (xy 116.703437 63.419713)
+ (xy 116.216698 63.419288) (xy 115.766848 63.605162) (xy 115.422372 63.949038) (xy 115.235713 64.398563) (xy 115.235288 64.885302)
+ (xy 115.421162 65.335152) (xy 115.765038 65.679628) (xy 116.214563 65.866287) (xy 116.701302 65.866712) (xy 117.151152 65.680838)
+ (xy 117.495628 65.336962) (xy 117.682287 64.887437) (xy 117.682712 64.400698) (xy 117.682712 86.787348) (xy 117.664001 86.787332)
+ (xy 117.30754 86.934618) (xy 117.034577 87.207105) (xy 116.886668 87.563308) (xy 116.886332 87.948999) (xy 117.033618 88.30546)
+ (xy 117.306105 88.578423) (xy 117.662308 88.726332) (xy 118.047999 88.726668) (xy 118.40446 88.579382) (xy 118.677423 88.306895)
+ (xy 118.825332 87.950692) (xy 118.825668 87.565001) (xy 118.825668 91.121001) (xy 118.678382 90.76454) (xy 118.405895 90.491577)
+ (xy 118.049692 90.343668) (xy 117.664001 90.343332) (xy 117.30754 90.490618) (xy 117.034577 90.763105) (xy 116.886668 91.119308)
+ (xy 116.886332 91.504999) (xy 117.033618 91.86146) (xy 117.306105 92.134423) (xy 117.662308 92.282332) (xy 118.047999 92.282668)
+ (xy 118.40446 92.135382) (xy 118.677423 91.862895) (xy 118.825332 91.506692) (xy 118.825668 91.121001) (xy 118.825668 114.880258)
+ (xy 118.685577 115.020105) (xy 118.537668 115.376308) (xy 118.537332 115.761999) (xy 118.684618 116.11846) (xy 118.957105 116.391423)
+ (xy 119.313308 116.539332) (xy 119.698999 116.539668) (xy 120.05546 116.392382) (xy 120.328423 116.119895) (xy 120.476332 115.763692)
+ (xy 120.476668 115.378001) (xy 120.476668 121.645417) (xy 120.437895 121.606577) (xy 120.081692 121.458668) (xy 119.696001 121.458332)
+ (xy 119.33954 121.605618) (xy 119.066577 121.878105) (xy 118.918668 122.234308) (xy 118.918546 122.37368) (xy 118.825668 122.280639)
+ (xy 118.825668 117.664001) (xy 118.678382 117.30754) (xy 118.405895 117.034577) (xy 118.049692 116.886668) (xy 117.936668 116.886569)
+ (xy 117.936668 97.090001) (xy 117.789382 96.73354) (xy 117.516895 96.460577) (xy 117.160692 96.312668) (xy 116.775001 96.312332)
+ (xy 116.41854 96.459618) (xy 116.332088 96.545919) (xy 116.246895 96.460577) (xy 115.890692 96.312668) (xy 115.505001 96.312332)
+ (xy 115.39669 96.357084) (xy 115.39669 74.712849) (xy 115.23011 74.309694) (xy 115.142712 74.222143) (xy 115.142712 64.400698)
+ (xy 114.956838 63.950848) (xy 114.612962 63.606372) (xy 114.163437 63.419713) (xy 113.676698 63.419288) (xy 113.226848 63.605162)
+ (xy 112.882372 63.949038) (xy 112.695713 64.398563) (xy 112.695288 64.885302) (xy 112.881162 65.335152) (xy 113.225038 65.679628)
+ (xy 113.674563 65.866287) (xy 114.161302 65.866712) (xy 114.611152 65.680838) (xy 114.955628 65.336962) (xy 115.142287 64.887437)
+ (xy 115.142712 64.400698) (xy 115.142712 74.222143) (xy 114.921928 74.000974) (xy 114.519064 73.83369) (xy 114.082849 73.83331)
+ (xy 113.679694 73.99989) (xy 113.370974 74.308072) (xy 113.20369 74.710936) (xy 113.20331 75.147151) (xy 113.36989 75.550306)
+ (xy 113.678072 75.859026) (xy 114.080936 76.02631) (xy 114.517151 76.02669) (xy 114.920306 75.86011) (xy 115.229026 75.551928)
+ (xy 115.39631 75.149064) (xy 115.39669 74.712849) (xy 115.39669 96.357084) (xy 115.14854 96.459618) (xy 114.875577 96.732105)
+ (xy 114.727668 97.088308) (xy 114.727332 97.473999) (xy 114.874618 97.83046) (xy 115.147105 98.103423) (xy 115.503308 98.251332)
+ (xy 115.888999 98.251668) (xy 116.24546 98.104382) (xy 116.331911 98.01808) (xy 116.417105 98.103423) (xy 116.773308 98.251332)
+ (xy 117.158999 98.251668) (xy 117.51546 98.104382) (xy 117.788423 97.831895) (xy 117.936332 97.475692) (xy 117.936668 97.090001)
+ (xy 117.936668 116.886569) (xy 117.664001 116.886332) (xy 117.30754 117.033618) (xy 117.174668 117.166257) (xy 117.174668 102.170001)
+ (xy 117.027382 101.81354) (xy 116.754895 101.540577) (xy 116.398692 101.392668) (xy 116.013001 101.392332) (xy 115.65654 101.539618)
+ (xy 115.383577 101.812105) (xy 115.235668 102.168308) (xy 115.235332 102.553999) (xy 115.382618 102.91046) (xy 115.655105 103.183423)
+ (xy 116.011308 103.331332) (xy 116.396999 103.331668) (xy 116.75346 103.184382) (xy 117.026423 102.911895) (xy 117.174332 102.555692)
+ (xy 117.174668 102.170001) (xy 117.174668 117.166257) (xy 117.083017 117.257748) (xy 116.898962 117.073372) (xy 116.449437 116.886713)
+ (xy 115.962698 116.886288) (xy 115.523668 117.067691) (xy 115.523668 106.615001) (xy 115.376382 106.25854) (xy 115.103895 105.985577)
+ (xy 114.747692 105.837668) (xy 114.362001 105.837332) (xy 114.253668 105.882094) (xy 114.253668 102.297001) (xy 114.106382 101.94054)
+ (xy 113.833895 101.667577) (xy 113.477692 101.519668) (xy 113.440868 101.519635) (xy 113.440868 85.787001) (xy 113.293582 85.43054)
+ (xy 113.021095 85.157577) (xy 112.979271 85.14021) (xy 113.114823 85.004895) (xy 113.262732 84.648692) (xy 113.263068 84.263001)
+ (xy 113.115782 83.90654) (xy 112.843295 83.633577) (xy 112.602668 83.533659) (xy 112.602668 70.039001) (xy 112.455382 69.68254)
+ (xy 112.182895 69.409577) (xy 111.826692 69.261668) (xy 111.441001 69.261332) (xy 111.332712 69.306075) (xy 111.332712 64.400698)
+ (xy 111.146838 63.950848) (xy 110.802962 63.606372) (xy 110.353437 63.419713) (xy 109.866698 63.419288) (xy 109.416848 63.605162)
+ (xy 109.072372 63.949038) (xy 108.885713 64.398563) (xy 108.885288 64.885302) (xy 109.071162 65.335152) (xy 109.415038 65.679628)
+ (xy 109.864563 65.866287) (xy 110.351302 65.866712) (xy 110.801152 65.680838) (xy 111.145628 65.336962) (xy 111.332287 64.887437)
+ (xy 111.332712 64.400698) (xy 111.332712 69.306075) (xy 111.08454 69.408618) (xy 110.811577 69.681105) (xy 110.663668 70.037308)
+ (xy 110.663332 70.422999) (xy 110.810618 70.77946) (xy 111.083105 71.052423) (xy 111.439308 71.200332) (xy 111.824999 71.200668)
+ (xy 112.18146 71.053382) (xy 112.454423 70.780895) (xy 112.602332 70.424692) (xy 112.602668 70.039001) (xy 112.602668 83.533659)
+ (xy 112.487092 83.485668) (xy 112.101401 83.485332) (xy 111.74494 83.632618) (xy 111.586668 83.790614) (xy 111.586668 80.961001)
+ (xy 111.439382 80.60454) (xy 111.166895 80.331577) (xy 110.810692 80.183668) (xy 110.425001 80.183332) (xy 110.06854 80.330618)
+ (xy 109.9736 80.425392) (xy 109.9736 73.913066) (xy 110.169308 73.994332) (xy 110.554999 73.994668) (xy 110.91146 73.847382)
+ (xy 111.184423 73.574895) (xy 111.332332 73.218692) (xy 111.332668 72.833001) (xy 111.185382 72.47654) (xy 110.912895 72.203577)
+ (xy 110.556692 72.055668) (xy 110.171001 72.055332) (xy 109.9736 72.136896) (xy 109.9736 70.612) (xy 109.925903 70.372211)
+ (xy 109.925902 70.37221) (xy 109.790073 70.168927) (xy 109.536073 69.914927) (xy 109.33279 69.779097) (xy 109.093 69.7314)
+ (xy 108.792712 69.7314) (xy 108.792712 64.400698) (xy 108.606838 63.950848) (xy 108.262962 63.606372) (xy 107.813437 63.419713)
+ (xy 107.326698 63.419288) (xy 106.876848 63.605162) (xy 106.532372 63.949038) (xy 106.345713 64.398563) (xy 106.345288 64.885302)
+ (xy 106.531162 65.335152) (xy 106.875038 65.679628) (xy 107.324563 65.866287) (xy 107.811302 65.866712) (xy 108.261152 65.680838)
+ (xy 108.605628 65.336962) (xy 108.792287 64.887437) (xy 108.792712 64.400698) (xy 108.792712 69.7314) (xy 108.584066 69.7314)
+ (xy 108.665332 69.535692) (xy 108.665668 69.150001) (xy 108.518382 68.79354) (xy 108.245895 68.520577) (xy 107.889692 68.372668)
+ (xy 107.504001 68.372332) (xy 107.14754 68.519618) (xy 106.874577 68.792105) (xy 106.726668 69.148308) (xy 106.726332 69.533999)
+ (xy 106.807896 69.7314) (xy 106.506712 69.7314) (xy 106.506712 67.575698) (xy 106.320838 67.125848) (xy 105.976962 66.781372)
+ (xy 105.527437 66.594713) (xy 105.040698 66.594288) (xy 104.792223 66.696955) (xy 104.792223 61.340123) (xy 104.596702 60.866925)
+ (xy 104.234979 60.504571) (xy 103.762123 60.308224) (xy 103.250123 60.307777) (xy 102.776925 60.503298) (xy 102.414571 60.865021)
+ (xy 102.2348 61.297956) (xy 102.056702 60.866925) (xy 101.694979 60.504571) (xy 101.222123 60.308224) (xy 100.710123 60.307777)
+ (xy 100.236925 60.503298) (xy 99.874571 60.865021) (xy 99.6948 61.297956) (xy 99.516702 60.866925) (xy 99.154979 60.504571)
+ (xy 98.682123 60.308224) (xy 98.170123 60.307777) (xy 97.696925 60.503298) (xy 97.334571 60.865021) (xy 97.1548 61.297956)
+ (xy 96.976702 60.866925) (xy 96.614979 60.504571) (xy 96.142123 60.308224) (xy 95.630123 60.307777) (xy 95.156925 60.503298)
+ (xy 94.794571 60.865021) (xy 94.632 61.256535) (xy 94.632 60.728571) (xy 94.552074 60.535611) (xy 94.404389 60.387926)
+ (xy 94.211429 60.308) (xy 94.002571 60.308) (xy 92.478571 60.308) (xy 92.285611 60.387926) (xy 92.137926 60.535611)
+ (xy 92.058 60.728571) (xy 92.058 60.937429) (xy 92.058 62.461429) (xy 92.137926 62.654389) (xy 92.285611 62.802074)
+ (xy 92.478571 62.882) (xy 92.687429 62.882) (xy 94.211429 62.882) (xy 94.404389 62.802074) (xy 94.552074 62.654389)
+ (xy 94.632 62.461429) (xy 94.632 62.252571) (xy 94.632 61.932703) (xy 94.793298 62.323075) (xy 95.155021 62.685429)
+ (xy 95.627877 62.881776) (xy 96.139877 62.882223) (xy 96.613075 62.686702) (xy 96.975429 62.324979) (xy 97.155199 61.892043)
+ (xy 97.333298 62.323075) (xy 97.695021 62.685429) (xy 98.167877 62.881776) (xy 98.679877 62.882223) (xy 99.153075 62.686702)
+ (xy 99.515429 62.324979) (xy 99.695199 61.892043) (xy 99.873298 62.323075) (xy 100.235021 62.685429) (xy 100.707877 62.881776)
+ (xy 101.219877 62.882223) (xy 101.693075 62.686702) (xy 102.055429 62.324979) (xy 102.235199 61.892043) (xy 102.413298 62.323075)
+ (xy 102.775021 62.685429) (xy 103.247877 62.881776) (xy 103.759877 62.882223) (xy 104.233075 62.686702) (xy 104.595429 62.324979)
+ (xy 104.791776 61.852123) (xy 104.792223 61.340123) (xy 104.792223 66.696955) (xy 104.590848 66.780162) (xy 104.246372 67.124038)
+ (xy 104.059713 67.573563) (xy 104.059288 68.060302) (xy 104.245162 68.510152) (xy 104.589038 68.854628) (xy 105.038563 69.041287)
+ (xy 105.525302 69.041712) (xy 105.975152 68.855838) (xy 106.319628 68.511962) (xy 106.506287 68.062437) (xy 106.506712 67.575698)
+ (xy 106.506712 69.7314) (xy 106.5065 69.7314) (xy 106.5065 69.555071) (xy 106.426574 69.362111) (xy 106.278889 69.214426)
+ (xy 106.085929 69.1345) (xy 105.877071 69.1345) (xy 104.480071 69.1345) (xy 104.287111 69.214426) (xy 104.139426 69.362111)
+ (xy 104.0595 69.555071) (xy 104.0595 69.763929) (xy 104.0595 70.176411) (xy 103.927895 70.044577) (xy 103.571692 69.896668)
+ (xy 103.458712 69.896569) (xy 103.458712 65.162698) (xy 103.272838 64.712848) (xy 102.928962 64.368372) (xy 102.479437 64.181713)
+ (xy 101.992698 64.181288) (xy 101.542848 64.367162) (xy 101.198372 64.711038) (xy 101.011713 65.160563) (xy 101.011288 65.647302)
+ (xy 101.197162 66.097152) (xy 101.541038 66.441628) (xy 101.990563 66.628287) (xy 102.477302 66.628712) (xy 102.927152 66.442838)
+ (xy 103.271628 66.098962) (xy 103.458287 65.649437) (xy 103.458712 65.162698) (xy 103.458712 69.896569) (xy 103.186001 69.896332)
+ (xy 102.82954 70.043618) (xy 102.556577 70.316105) (xy 102.408668 70.672308) (xy 102.408332 71.057999) (xy 102.555618 71.41446)
+ (xy 102.828105 71.687423) (xy 103.184308 71.835332) (xy 103.569999 71.835668) (xy 103.92646 71.688382) (xy 104.199423 71.415895)
+ (xy 104.200012 71.414475) (xy 104.287111 71.501574) (xy 104.480071 71.5815) (xy 104.688929 71.5815) (xy 106.085929 71.5815)
+ (xy 106.278889 71.501574) (xy 106.426574 71.353889) (xy 106.5065 71.160929) (xy 106.5065 70.9846) (xy 108.7204 70.9846)
+ (xy 108.7204 84.599621) (xy 108.665668 84.654257) (xy 108.665668 75.881001) (xy 108.518382 75.52454) (xy 108.245895 75.251577)
+ (xy 107.889692 75.103668) (xy 107.504001 75.103332) (xy 107.14754 75.250618) (xy 106.874577 75.523105) (xy 106.726668 75.879308)
+ (xy 106.726332 76.264999) (xy 106.873618 76.62146) (xy 107.146105 76.894423) (xy 107.502308 77.042332) (xy 107.887999 77.042668)
+ (xy 108.24446 76.895382) (xy 108.517423 76.622895) (xy 108.665332 76.266692) (xy 108.665668 75.881001) (xy 108.665668 84.654257)
+ (xy 108.525577 84.794105) (xy 108.377668 85.150308) (xy 108.377332 85.535999) (xy 108.524618 85.89246) (xy 108.797105 86.165423)
+ (xy 109.153308 86.313332) (xy 109.538999 86.313668) (xy 109.89546 86.166382) (xy 110.168423 85.893895) (xy 110.316332 85.537692)
+ (xy 110.316668 85.152001) (xy 110.169382 84.79554) (xy 109.9736 84.599415) (xy 109.9736 81.880754) (xy 110.067105 81.974423)
+ (xy 110.423308 82.122332) (xy 110.808999 82.122668) (xy 111.16546 81.975382) (xy 111.438423 81.702895) (xy 111.586332 81.346692)
+ (xy 111.586668 80.961001) (xy 111.586668 83.790614) (xy 111.471977 83.905105) (xy 111.324068 84.261308) (xy 111.323732 84.646999)
+ (xy 111.471018 85.00346) (xy 111.743505 85.276423) (xy 111.785328 85.293789) (xy 111.649777 85.429105) (xy 111.501868 85.785308)
+ (xy 111.501532 86.170999) (xy 111.648818 86.52746) (xy 111.921305 86.800423) (xy 112.277508 86.948332) (xy 112.663199 86.948668)
+ (xy 113.01966 86.801382) (xy 113.292623 86.528895) (xy 113.440532 86.172692) (xy 113.440868 85.787001) (xy 113.440868 101.519635)
+ (xy 113.092001 101.519332) (xy 112.73554 101.666618) (xy 112.462577 101.939105) (xy 112.314668 102.295308) (xy 112.314332 102.680999)
+ (xy 112.461618 103.03746) (xy 112.734105 103.310423) (xy 113.090308 103.458332) (xy 113.475999 103.458668) (xy 113.83246 103.311382)
+ (xy 114.105423 103.038895) (xy 114.253332 102.682692) (xy 114.253668 102.297001) (xy 114.253668 105.882094) (xy 114.00554 105.984618)
+ (xy 113.732577 106.257105) (xy 113.584668 106.613308) (xy 113.584332 106.998999) (xy 113.731618 107.35546) (xy 114.004105 107.628423)
+ (xy 114.360308 107.776332) (xy 114.745999 107.776668) (xy 115.10246 107.629382) (xy 115.375423 107.356895) (xy 115.523332 107.000692)
+ (xy 115.523668 106.615001) (xy 115.523668 117.067691) (xy 115.512848 117.072162) (xy 115.168372 117.416038) (xy 114.981713 117.865563)
+ (xy 114.981288 118.352302) (xy 115.167162 118.802152) (xy 115.511038 119.146628) (xy 115.960563 119.333287) (xy 116.447302 119.333712)
+ (xy 116.897152 119.147838) (xy 117.241628 118.803962) (xy 117.297677 118.66898) (xy 117.306105 118.677423) (xy 117.662308 118.825332)
+ (xy 118.047999 118.825668) (xy 118.40446 118.678382) (xy 118.677423 118.405895) (xy 118.825332 118.049692) (xy 118.825668 117.664001)
+ (xy 118.825668 122.280639) (xy 118.659895 122.114577) (xy 118.303692 121.966668) (xy 117.918001 121.966332) (xy 117.56154 122.113618)
+ (xy 117.288577 122.386105) (xy 117.140668 122.742308) (xy 117.140332 123.127999) (xy 117.287618 123.48446) (xy 117.560105 123.757423)
+ (xy 117.916308 123.905332) (xy 118.301999 123.905668) (xy 118.65846 123.758382) (xy 118.931423 123.485895) (xy 119.079332 123.129692)
+ (xy 119.079453 122.990319) (xy 119.338105 123.249423) (xy 119.694308 123.397332) (xy 120.079999 123.397668) (xy 120.43646 123.250382)
+ (xy 120.709423 122.977895) (xy 120.857332 122.621692) (xy 120.857668 122.236001) (xy 120.857668 145.8044) (xy 120.476668 145.8044)
+ (xy 120.476668 125.792001) (xy 120.329382 125.43554) (xy 120.056895 125.162577) (xy 119.700692 125.014668) (xy 119.315001 125.014332)
+ (xy 118.95854 125.161618) (xy 118.685577 125.434105) (xy 118.537668 125.790308) (xy 118.537332 126.175999) (xy 118.684618 126.53246)
+ (xy 118.957105 126.805423) (xy 119.313308 126.953332) (xy 119.698999 126.953668) (xy 120.05546 126.806382) (xy 120.328423 126.533895)
+ (xy 120.476332 126.177692) (xy 120.476668 125.792001) (xy 120.476668 145.8044) (xy 118.063382 145.8044) (xy 118.063668 145.477001)
+ (xy 117.916382 145.12054) (xy 117.643895 144.847577) (xy 117.428712 144.758224) (xy 117.428712 125.487698) (xy 117.242838 125.037848)
+ (xy 116.898962 124.693372) (xy 116.449437 124.506713) (xy 115.962698 124.506288) (xy 115.512848 124.692162) (xy 115.168372 125.036038)
+ (xy 114.981713 125.485563) (xy 114.981288 125.972302) (xy 115.167162 126.422152) (xy 115.511038 126.766628) (xy 115.960563 126.953287)
+ (xy 116.447302 126.953712) (xy 116.897152 126.767838) (xy 117.241628 126.423962) (xy 117.428287 125.974437) (xy 117.428712 125.487698)
+ (xy 117.428712 144.758224) (xy 117.287692 144.699668) (xy 116.902001 144.699332) (xy 116.54554 144.846618) (xy 116.349415 145.0424)
+ (xy 114.888712 145.0424) (xy 114.888712 125.487698) (xy 114.888712 117.867698) (xy 114.702838 117.417848) (xy 114.634668 117.349559)
+ (xy 114.634668 108.393001) (xy 114.487382 108.03654) (xy 114.214895 107.763577) (xy 113.858692 107.615668) (xy 113.473001 107.615332)
+ (xy 113.11654 107.762618) (xy 113.030088 107.848919) (xy 112.944895 107.763577) (xy 112.588692 107.615668) (xy 112.203001 107.615332)
+ (xy 111.84654 107.762618) (xy 111.760088 107.848919) (xy 111.674895 107.763577) (xy 111.318692 107.615668) (xy 111.205668 107.615569)
+ (xy 111.205668 87.946001) (xy 111.058382 87.58954) (xy 110.785895 87.316577) (xy 110.429692 87.168668) (xy 110.044001 87.168332)
+ (xy 109.68754 87.315618) (xy 109.414577 87.588105) (xy 109.266668 87.944308) (xy 109.266332 88.329999) (xy 109.413618 88.68646)
+ (xy 109.686105 88.959423) (xy 110.042308 89.107332) (xy 110.427999 89.107668) (xy 110.78446 88.960382) (xy 111.057423 88.687895)
+ (xy 111.205332 88.331692) (xy 111.205668 87.946001) (xy 111.205668 107.615569) (xy 110.933001 107.615332) (xy 110.57654 107.762618)
+ (xy 110.490088 107.848919) (xy 110.404895 107.763577) (xy 110.048692 107.615668) (xy 109.663001 107.615332) (xy 109.554668 107.660094)
+ (xy 109.554668 91.883001) (xy 109.407382 91.52654) (xy 109.134895 91.253577) (xy 108.778692 91.105668) (xy 108.393001 91.105332)
+ (xy 108.03654 91.252618) (xy 107.763577 91.525105) (xy 107.615668 91.881308) (xy 107.615332 92.266999) (xy 107.762618 92.62346)
+ (xy 108.035105 92.896423) (xy 108.391308 93.044332) (xy 108.776999 93.044668) (xy 109.13346 92.897382) (xy 109.406423 92.624895)
+ (xy 109.554332 92.268692) (xy 109.554668 91.883001) (xy 109.554668 107.660094) (xy 109.30654 107.762618) (xy 109.220088 107.848919)
+ (xy 109.134895 107.763577) (xy 108.778692 107.615668) (xy 108.393001 107.615332) (xy 108.03654 107.762618) (xy 107.950088 107.848919)
+ (xy 107.864895 107.763577) (xy 107.508692 107.615668) (xy 107.395668 107.615569) (xy 107.395668 81.342001) (xy 107.248382 80.98554)
+ (xy 106.975895 80.712577) (xy 106.619692 80.564668) (xy 106.234001 80.564332) (xy 106.113031 80.614315) (xy 106.125332 80.584692)
+ (xy 106.125668 80.199001) (xy 105.978382 79.84254) (xy 105.705895 79.569577) (xy 105.349692 79.421668) (xy 104.964001 79.421332)
+ (xy 104.60754 79.568618) (xy 104.334577 79.841105) (xy 104.186668 80.197308) (xy 104.186332 80.582999) (xy 104.333618 80.93946)
+ (xy 104.606105 81.212423) (xy 104.962308 81.360332) (xy 105.347999 81.360668) (xy 105.468968 81.310684) (xy 105.456668 81.340308)
+ (xy 105.456332 81.725999) (xy 105.603618 82.08246) (xy 105.876105 82.355423) (xy 106.232308 82.503332) (xy 106.617999 82.503668)
+ (xy 106.97446 82.356382) (xy 107.247423 82.083895) (xy 107.395332 81.727692) (xy 107.395668 81.342001) (xy 107.395668 107.615569)
+ (xy 107.123001 107.615332) (xy 106.76654 107.762618) (xy 106.680088 107.848919) (xy 106.594895 107.763577) (xy 106.238692 107.615668)
+ (xy 105.853001 107.615332) (xy 105.617668 107.712569) (xy 105.617668 105.853001) (xy 105.470382 105.49654) (xy 105.197895 105.223577)
+ (xy 105.109668 105.186941) (xy 105.109668 91.883001) (xy 104.962382 91.52654) (xy 104.87608 91.440088) (xy 104.961423 91.354895)
+ (xy 105.109332 90.998692) (xy 105.109668 90.613001) (xy 104.962382 90.25654) (xy 104.689895 89.983577) (xy 104.333692 89.835668)
+ (xy 103.948001 89.835332) (xy 103.59154 89.982618) (xy 103.509468 90.064546) (xy 103.509468 81.088001) (xy 103.458712 80.965161)
+ (xy 103.458712 72.782698) (xy 103.272838 72.332848) (xy 102.928962 71.988372) (xy 102.479437 71.801713) (xy 101.992698 71.801288)
+ (xy 101.542848 71.987162) (xy 101.198372 72.331038) (xy 101.011713 72.780563) (xy 101.011288 73.267302) (xy 101.197162 73.717152)
+ (xy 101.541038 74.061628) (xy 101.990563 74.248287) (xy 102.477302 74.248712) (xy 102.927152 74.062838) (xy 103.271628 73.718962)
+ (xy 103.458287 73.269437) (xy 103.458712 72.782698) (xy 103.458712 80.965161) (xy 103.362182 80.73154) (xy 103.089695 80.458577)
+ (xy 102.733492 80.310668) (xy 102.347801 80.310332) (xy 101.99134 80.457618) (xy 101.718377 80.730105) (xy 101.570468 81.086308)
+ (xy 101.570132 81.471999) (xy 101.717418 81.82846) (xy 101.989905 82.101423) (xy 102.346108 82.249332) (xy 102.731799 82.249668)
+ (xy 103.08826 82.102382) (xy 103.361223 81.829895) (xy 103.509132 81.473692) (xy 103.509468 81.088001) (xy 103.509468 90.064546)
+ (xy 103.318577 90.255105) (xy 103.170668 90.611308) (xy 103.170332 90.996999) (xy 103.246617 91.181625) (xy 103.063692 91.105668)
+ (xy 102.678001 91.105332) (xy 102.32154 91.252618) (xy 102.235088 91.338919) (xy 102.149895 91.253577) (xy 101.793692 91.105668)
+ (xy 101.408001 91.105332) (xy 101.05154 91.252618) (xy 100.965088 91.338919) (xy 100.918712 91.292461) (xy 100.918712 72.782698)
+ (xy 100.918712 65.162698) (xy 100.732838 64.712848) (xy 100.388962 64.368372) (xy 99.939437 64.181713) (xy 99.452698 64.181288)
+ (xy 99.002848 64.367162) (xy 98.658372 64.711038) (xy 98.471713 65.160563) (xy 98.471288 65.647302) (xy 98.657162 66.097152)
+ (xy 99.001038 66.441628) (xy 99.450563 66.628287) (xy 99.937302 66.628712) (xy 100.387152 66.442838) (xy 100.731628 66.098962)
+ (xy 100.918287 65.649437) (xy 100.918712 65.162698) (xy 100.918712 72.782698) (xy 100.732838 72.332848) (xy 100.388962 71.988372)
+ (xy 100.194853 71.907771) (xy 100.283332 71.694692) (xy 100.283668 71.309001) (xy 100.136382 70.95254) (xy 99.863895 70.679577)
+ (xy 99.507692 70.531668) (xy 99.122001 70.531332) (xy 99.10964 70.536439) (xy 99.246423 70.399895) (xy 99.394332 70.043692)
+ (xy 99.394668 69.658001) (xy 99.247382 69.30154) (xy 98.974895 69.028577) (xy 98.618692 68.880668) (xy 98.382953 68.880462)
+ (xy 98.382953 65.1852) (xy 98.205368 64.732014) (xy 98.178716 64.692128) (xy 97.961766 64.633589) (xy 97.926411 64.668944)
+ (xy 97.926411 64.598234) (xy 97.867872 64.381284) (xy 97.421849 64.186405) (xy 96.9352 64.177047) (xy 96.482014 64.354632)
+ (xy 96.442128 64.381284) (xy 96.383589 64.598234) (xy 97.155 65.369645) (xy 97.926411 64.598234) (xy 97.926411 64.668944)
+ (xy 97.190355 65.405) (xy 97.961766 66.176411) (xy 98.178716 66.117872) (xy 98.373595 65.671849) (xy 98.382953 65.1852)
+ (xy 98.382953 68.880462) (xy 98.233001 68.880332) (xy 97.926411 69.007011) (xy 97.926411 66.211766) (xy 97.155 65.440355)
+ (xy 97.119645 65.47571) (xy 97.119645 65.405) (xy 96.348234 64.633589) (xy 96.131284 64.692128) (xy 95.936405 65.138151)
+ (xy 95.927047 65.6248) (xy 96.104632 66.077986) (xy 96.131284 66.117872) (xy 96.348234 66.176411) (xy 97.119645 65.405)
+ (xy 97.119645 65.47571) (xy 96.383589 66.211766) (xy 96.442128 66.428716) (xy 96.888151 66.623595) (xy 97.3748 66.632953)
+ (xy 97.827986 66.455368) (xy 97.867872 66.428716) (xy 97.926411 66.211766) (xy 97.926411 69.007011) (xy 97.87654 69.027618)
+ (xy 97.603577 69.300105) (xy 97.455668 69.656308) (xy 97.455332 70.041999) (xy 97.602618 70.39846) (xy 97.875105 70.671423)
+ (xy 98.231308 70.819332) (xy 98.616999 70.819668) (xy 98.629359 70.81456) (xy 98.492577 70.951105) (xy 98.344668 71.307308)
+ (xy 98.344332 71.692999) (xy 98.491618 72.04946) (xy 98.715638 72.273871) (xy 98.658372 72.331038) (xy 98.471713 72.780563)
+ (xy 98.471288 73.267302) (xy 98.657162 73.717152) (xy 99.001038 74.061628) (xy 99.450563 74.248287) (xy 99.937302 74.248712)
+ (xy 100.387152 74.062838) (xy 100.731628 73.718962) (xy 100.918287 73.269437) (xy 100.918712 72.782698) (xy 100.918712 91.292461)
+ (xy 100.879895 91.253577) (xy 100.664668 91.164206) (xy 100.664668 80.580001) (xy 100.517382 80.22354) (xy 100.244895 79.950577)
+ (xy 99.888692 79.802668) (xy 99.503001 79.802332) (xy 99.293767 79.888784) (xy 99.101895 79.696577) (xy 98.745692 79.548668)
+ (xy 98.378712 79.548348) (xy 98.378712 72.782698) (xy 98.192838 72.332848) (xy 97.848962 71.988372) (xy 97.399437 71.801713)
+ (xy 96.912698 71.801288) (xy 96.462848 71.987162) (xy 96.118372 72.331038) (xy 95.931713 72.780563) (xy 95.931288 73.267302)
+ (xy 96.117162 73.717152) (xy 96.461038 74.061628) (xy 96.910563 74.248287) (xy 97.397302 74.248712) (xy 97.847152 74.062838)
+ (xy 98.191628 73.718962) (xy 98.378287 73.269437) (xy 98.378712 72.782698) (xy 98.378712 79.548348) (xy 98.360001 79.548332)
+ (xy 98.00354 79.695618) (xy 97.730577 79.968105) (xy 97.582668 80.324308) (xy 97.582332 80.709999) (xy 97.729618 81.06646)
+ (xy 98.002105 81.339423) (xy 98.358308 81.487332) (xy 98.743999 81.487668) (xy 98.953232 81.401215) (xy 99.145105 81.593423)
+ (xy 99.501308 81.741332) (xy 99.886999 81.741668) (xy 100.24346 81.594382) (xy 100.516423 81.321895) (xy 100.664332 80.965692)
+ (xy 100.664668 80.580001) (xy 100.664668 91.164206) (xy 100.523692 91.105668) (xy 100.138001 91.105332) (xy 99.78154 91.252618)
+ (xy 99.695088 91.338919) (xy 99.609895 91.253577) (xy 99.253692 91.105668) (xy 98.868001 91.105332) (xy 98.51154 91.252618)
+ (xy 98.425088 91.338919) (xy 98.339895 91.253577) (xy 97.983692 91.105668) (xy 97.598001 91.105332) (xy 97.24154 91.252618)
+ (xy 97.155088 91.338919) (xy 97.108668 91.292417) (xy 97.108668 81.850001) (xy 96.961382 81.49354) (xy 96.688895 81.220577)
+ (xy 96.332692 81.072668) (xy 96.213289 81.072563) (xy 96.072382 80.73154) (xy 95.842953 80.50171) (xy 95.842953 65.1852)
+ (xy 95.665368 64.732014) (xy 95.638716 64.692128) (xy 95.421766 64.633589) (xy 95.386411 64.668944) (xy 95.386411 64.598234)
+ (xy 95.327872 64.381284) (xy 94.881849 64.186405) (xy 94.3952 64.177047) (xy 93.942014 64.354632) (xy 93.902128 64.381284)
+ (xy 93.843589 64.598234) (xy 94.615 65.369645) (xy 95.386411 64.598234) (xy 95.386411 64.668944) (xy 94.650355 65.405)
+ (xy 95.421766 66.176411) (xy 95.638716 66.117872) (xy 95.833595 65.671849) (xy 95.842953 65.1852) (xy 95.842953 80.50171)
+ (xy 95.8385 80.497249) (xy 95.8385 73.827929) (xy 95.8385 73.619071) (xy 95.8385 72.222071) (xy 95.758574 72.029111)
+ (xy 95.610889 71.881426) (xy 95.417929 71.8015) (xy 95.386411 71.8015) (xy 95.386411 66.211766) (xy 94.615 65.440355)
+ (xy 94.579645 65.47571) (xy 94.579645 65.405) (xy 93.808234 64.633589) (xy 93.591284 64.692128) (xy 93.396405 65.138151)
+ (xy 93.387047 65.6248) (xy 93.564632 66.077986) (xy 93.591284 66.117872) (xy 93.808234 66.176411) (xy 94.579645 65.405)
+ (xy 94.579645 65.47571) (xy 93.843589 66.211766) (xy 93.902128 66.428716) (xy 94.348151 66.623595) (xy 94.8348 66.632953)
+ (xy 95.287986 66.455368) (xy 95.327872 66.428716) (xy 95.386411 66.211766) (xy 95.386411 71.8015) (xy 95.209071 71.8015)
+ (xy 93.812071 71.8015) (xy 93.619111 71.881426) (xy 93.471426 72.029111) (xy 93.3915 72.222071) (xy 93.3915 72.430929)
+ (xy 93.3915 73.827929) (xy 93.471426 74.020889) (xy 93.619111 74.168574) (xy 93.812071 74.2485) (xy 94.020929 74.2485)
+ (xy 95.417929 74.2485) (xy 95.610889 74.168574) (xy 95.758574 74.020889) (xy 95.8385 73.827929) (xy 95.8385 80.497249)
+ (xy 95.799895 80.458577) (xy 95.443692 80.310668) (xy 95.058001 80.310332) (xy 94.70154 80.457618) (xy 94.428577 80.730105)
+ (xy 94.280668 81.086308) (xy 94.280332 81.471999) (xy 94.427618 81.82846) (xy 94.433709 81.834562) (xy 94.169001 81.834332)
+ (xy 93.933712 81.93155) (xy 93.933712 75.322698) (xy 93.747838 74.872848) (xy 93.403962 74.528372) (xy 92.954437 74.341713)
+ (xy 92.467698 74.341288) (xy 92.017848 74.527162) (xy 91.673372 74.871038) (xy 91.486713 75.320563) (xy 91.486288 75.807302)
+ (xy 91.672162 76.257152) (xy 92.016038 76.601628) (xy 92.465563 76.788287) (xy 92.952302 76.788712) (xy 93.402152 76.602838)
+ (xy 93.746628 76.258962) (xy 93.933287 75.809437) (xy 93.933712 75.322698) (xy 93.933712 81.93155) (xy 93.81254 81.981618)
+ (xy 93.539577 82.254105) (xy 93.391668 82.610308) (xy 93.391332 82.995999) (xy 93.538618 83.35246) (xy 93.561419 83.3753)
+ (xy 93.539577 83.397105) (xy 93.391668 83.753308) (xy 93.391332 84.138999) (xy 93.538618 84.49546) (xy 93.811105 84.768423)
+ (xy 94.167308 84.916332) (xy 94.552999 84.916668) (xy 94.90946 84.769382) (xy 95.182423 84.496895) (xy 95.330332 84.140692)
+ (xy 95.330668 83.755001) (xy 95.183382 83.39854) (xy 95.16058 83.375699) (xy 95.182423 83.353895) (xy 95.330332 82.997692)
+ (xy 95.330668 82.612001) (xy 95.325404 82.599261) (xy 95.589105 82.863423) (xy 95.945308 83.011332) (xy 96.330999 83.011668)
+ (xy 96.68746 82.864382) (xy 96.960423 82.591895) (xy 97.108332 82.235692) (xy 97.108668 81.850001) (xy 97.108668 91.292417)
+ (xy 97.069895 91.253577) (xy 96.713692 91.105668) (xy 96.328001 91.105332) (xy 96.219668 91.150094) (xy 96.219668 87.006201)
+ (xy 96.072382 86.64974) (xy 95.799895 86.376777) (xy 95.443692 86.228868) (xy 95.058001 86.228532) (xy 94.70154 86.375818)
+ (xy 94.428577 86.648305) (xy 94.280668 87.004508) (xy 94.280332 87.390199) (xy 94.427618 87.74666) (xy 94.700105 88.019623)
+ (xy 95.056308 88.167532) (xy 95.441999 88.167868) (xy 95.79846 88.020582) (xy 96.071423 87.748095) (xy 96.219332 87.391892)
+ (xy 96.219668 87.006201) (xy 96.219668 91.150094) (xy 95.97154 91.252618) (xy 95.698577 91.525105) (xy 95.550668 91.881308)
+ (xy 95.550641 91.912077) (xy 95.443692 91.867668) (xy 95.058001 91.867332) (xy 94.70154 92.014618) (xy 94.428577 92.287105)
+ (xy 94.280668 92.643308) (xy 94.280332 93.028999) (xy 94.427618 93.38546) (xy 94.700105 93.658423) (xy 95.056308 93.806332)
+ (xy 95.441999 93.806668) (xy 95.79846 93.659382) (xy 96.071423 93.386895) (xy 96.219332 93.030692) (xy 96.219358 92.999922)
+ (xy 96.326308 93.044332) (xy 96.711999 93.044668) (xy 97.06846 92.897382) (xy 97.154911 92.81108) (xy 97.240105 92.896423)
+ (xy 97.596308 93.044332) (xy 97.981999 93.044668) (xy 98.33846 92.897382) (xy 98.424911 92.81108) (xy 98.510105 92.896423)
+ (xy 98.866308 93.044332) (xy 99.251999 93.044668) (xy 99.60846 92.897382) (xy 99.694911 92.81108) (xy 99.780105 92.896423)
+ (xy 100.136308 93.044332) (xy 100.521999 93.044668) (xy 100.87846 92.897382) (xy 100.964911 92.81108) (xy 101.050105 92.896423)
+ (xy 101.406308 93.044332) (xy 101.791999 93.044668) (xy 102.14846 92.897382) (xy 102.234911 92.81108) (xy 102.320105 92.896423)
+ (xy 102.676308 93.044332) (xy 103.061999 93.044668) (xy 103.41846 92.897382) (xy 103.504911 92.81108) (xy 103.590105 92.896423)
+ (xy 103.946308 93.044332) (xy 104.331999 93.044668) (xy 104.68846 92.897382) (xy 104.961423 92.624895) (xy 105.109332 92.268692)
+ (xy 105.109668 91.883001) (xy 105.109668 105.186941) (xy 104.841692 105.075668) (xy 104.456001 105.075332) (xy 104.424676 105.088274)
+ (xy 104.474332 104.968692) (xy 104.474668 104.583001) (xy 104.327382 104.22654) (xy 104.054895 103.953577) (xy 103.966668 103.916941)
+ (xy 103.966668 98.868001) (xy 103.819382 98.51154) (xy 103.546895 98.238577) (xy 103.190692 98.090668) (xy 102.805001 98.090332)
+ (xy 102.44854 98.237618) (xy 102.175577 98.510105) (xy 102.027668 98.866308) (xy 102.027332 99.251999) (xy 102.174618 99.60846)
+ (xy 102.447105 99.881423) (xy 102.803308 100.029332) (xy 103.188999 100.029668) (xy 103.54546 99.882382) (xy 103.818423 99.609895)
+ (xy 103.966332 99.253692) (xy 103.966668 98.868001) (xy 103.966668 103.916941) (xy 103.698692 103.805668) (xy 103.313001 103.805332)
+ (xy 102.95654 103.952618) (xy 102.870088 104.038919) (xy 102.784895 103.953577) (xy 102.428692 103.805668) (xy 102.043001 103.805332)
+ (xy 101.68654 103.952618) (xy 101.413577 104.225105) (xy 101.299312 104.500283) (xy 101.133895 104.334577) (xy 100.777692 104.186668)
+ (xy 100.766268 104.186658) (xy 100.766268 103.186001) (xy 100.618982 102.82954) (xy 100.346495 102.556577) (xy 99.990292 102.408668)
+ (xy 99.604601 102.408332) (xy 99.24814 102.555618) (xy 99.047299 102.756108) (xy 98.974895 102.683577) (xy 98.618692 102.535668)
+ (xy 98.233001 102.535332) (xy 97.87654 102.682618) (xy 97.616668 102.942036) (xy 97.616668 102.043001) (xy 97.469382 101.68654)
+ (xy 97.196895 101.413577) (xy 96.840692 101.265668) (xy 96.455001 101.265332) (xy 96.118068 101.404549) (xy 96.118068 99.503001)
+ (xy 95.970782 99.14654) (xy 95.698295 98.873577) (xy 95.342092 98.725668) (xy 94.956401 98.725332) (xy 94.59994 98.872618)
+ (xy 94.326977 99.145105) (xy 94.179068 99.501308) (xy 94.178732 99.886999) (xy 94.326018 100.24346) (xy 94.598505 100.516423)
+ (xy 94.954708 100.664332) (xy 95.340399 100.664668) (xy 95.69686 100.517382) (xy 95.969823 100.244895) (xy 96.117732 99.888692)
+ (xy 96.118068 99.503001) (xy 96.118068 101.404549) (xy 96.09854 101.412618) (xy 95.825577 101.685105) (xy 95.677668 102.041308)
+ (xy 95.677332 102.426999) (xy 95.824618 102.78346) (xy 96.097105 103.056423) (xy 96.453308 103.204332) (xy 96.838999 103.204668)
+ (xy 97.19546 103.057382) (xy 97.468423 102.784895) (xy 97.616332 102.428692) (xy 97.616668 102.043001) (xy 97.616668 102.942036)
+ (xy 97.603577 102.955105) (xy 97.455668 103.311308) (xy 97.455332 103.696999) (xy 97.602618 104.05346) (xy 97.875105 104.326423)
+ (xy 98.231308 104.474332) (xy 98.616999 104.474668) (xy 98.97346 104.327382) (xy 99.1743 104.126891) (xy 99.246705 104.199423)
+ (xy 99.602908 104.347332) (xy 99.988599 104.347668) (xy 100.34506 104.200382) (xy 100.618023 103.927895) (xy 100.765932 103.571692)
+ (xy 100.766268 103.186001) (xy 100.766268 104.186658) (xy 100.392001 104.186332) (xy 100.03554 104.333618) (xy 99.762577 104.606105)
+ (xy 99.614668 104.962308) (xy 99.614332 105.347999) (xy 99.761618 105.70446) (xy 100.034105 105.977423) (xy 100.390308 106.125332)
+ (xy 100.775999 106.125668) (xy 101.13246 105.978382) (xy 101.405423 105.705895) (xy 101.519687 105.430716) (xy 101.685105 105.596423)
+ (xy 102.041308 105.744332) (xy 102.426999 105.744668) (xy 102.78346 105.597382) (xy 102.869911 105.51108) (xy 102.955105 105.596423)
+ (xy 103.311308 105.744332) (xy 103.696999 105.744668) (xy 103.728323 105.731725) (xy 103.678668 105.851308) (xy 103.678347 106.21865)
+ (xy 103.313001 106.218332) (xy 102.95654 106.365618) (xy 102.683577 106.638105) (xy 102.535668 106.994308) (xy 102.535332 107.379999)
+ (xy 102.682618 107.73646) (xy 102.955105 108.009423) (xy 103.311308 108.157332) (xy 103.696999 108.157668) (xy 104.05346 108.010382)
+ (xy 104.326423 107.737895) (xy 104.474332 107.381692) (xy 104.474652 107.014349) (xy 104.839999 107.014668) (xy 105.19646 106.867382)
+ (xy 105.469423 106.594895) (xy 105.617332 106.238692) (xy 105.617668 105.853001) (xy 105.617668 107.712569) (xy 105.49654 107.762618)
+ (xy 105.223577 108.035105) (xy 105.075668 108.391308) (xy 105.075332 108.776999) (xy 105.222618 109.13346) (xy 105.495105 109.406423)
+ (xy 105.851308 109.554332) (xy 106.236999 109.554668) (xy 106.59346 109.407382) (xy 106.679911 109.32108) (xy 106.765105 109.406423)
+ (xy 107.121308 109.554332) (xy 107.506999 109.554668) (xy 107.86346 109.407382) (xy 107.949911 109.32108) (xy 108.035105 109.406423)
+ (xy 108.391308 109.554332) (xy 108.776999 109.554668) (xy 109.13346 109.407382) (xy 109.219911 109.32108) (xy 109.305105 109.406423)
+ (xy 109.661308 109.554332) (xy 110.046999 109.554668) (xy 110.40346 109.407382) (xy 110.489911 109.32108) (xy 110.575105 109.406423)
+ (xy 110.931308 109.554332) (xy 111.316999 109.554668) (xy 111.67346 109.407382) (xy 111.759911 109.32108) (xy 111.845105 109.406423)
+ (xy 112.201308 109.554332) (xy 112.586999 109.554668) (xy 112.94346 109.407382) (xy 113.029911 109.32108) (xy 113.115105 109.406423)
+ (xy 113.471308 109.554332) (xy 113.856999 109.554668) (xy 114.21346 109.407382) (xy 114.486423 109.134895) (xy 114.634332 108.778692)
+ (xy 114.634668 108.393001) (xy 114.634668 117.349559) (xy 114.358962 117.073372) (xy 113.909437 116.886713) (xy 113.422698 116.886288)
+ (xy 112.972848 117.072162) (xy 112.628372 117.416038) (xy 112.441713 117.865563) (xy 112.441288 118.352302) (xy 112.627162 118.802152)
+ (xy 112.971038 119.146628) (xy 113.420563 119.333287) (xy 113.907302 119.333712) (xy 114.357152 119.147838) (xy 114.701628 118.803962)
+ (xy 114.888287 118.354437) (xy 114.888712 117.867698) (xy 114.888712 125.487698) (xy 114.702838 125.037848) (xy 114.358962 124.693372)
+ (xy 113.909437 124.506713) (xy 113.422698 124.506288) (xy 112.972848 124.692162) (xy 112.628372 125.036038) (xy 112.441713 125.485563)
+ (xy 112.441288 125.972302) (xy 112.627162 126.422152) (xy 112.971038 126.766628) (xy 113.420563 126.953287) (xy 113.907302 126.953712)
+ (xy 114.357152 126.767838) (xy 114.701628 126.423962) (xy 114.888287 125.974437) (xy 114.888712 125.487698) (xy 114.888712 145.0424)
+ (xy 114.305546 145.0424) (xy 112.352953 143.089807) (xy 112.352953 117.8902) (xy 112.175368 117.437014) (xy 112.148716 117.397128)
+ (xy 111.931766 117.338589) (xy 111.896411 117.373944) (xy 111.896411 117.303234) (xy 111.837872 117.086284) (xy 111.391849 116.891405)
+ (xy 110.9052 116.882047) (xy 110.452014 117.059632) (xy 110.412128 117.086284) (xy 110.353589 117.303234) (xy 111.125 118.074645)
+ (xy 111.896411 117.303234) (xy 111.896411 117.373944) (xy 111.160355 118.11) (xy 111.931766 118.881411) (xy 112.148716 118.822872)
+ (xy 112.343595 118.376849) (xy 112.352953 117.8902) (xy 112.352953 143.089807) (xy 112.348712 143.085566) (xy 112.348712 125.487698)
+ (xy 112.162838 125.037848) (xy 111.896411 124.770956) (xy 111.896411 118.916766) (xy 111.125 118.145355) (xy 111.089645 118.18071)
+ (xy 111.089645 118.11) (xy 110.318234 117.338589) (xy 110.101284 117.397128) (xy 109.906405 117.843151) (xy 109.897047 118.3298)
+ (xy 110.074632 118.782986) (xy 110.101284 118.822872) (xy 110.318234 118.881411) (xy 111.089645 118.11) (xy 111.089645 118.18071)
+ (xy 110.353589 118.916766) (xy 110.412128 119.133716) (xy 110.858151 119.328595) (xy 111.3448 119.337953) (xy 111.797986 119.160368)
+ (xy 111.837872 119.133716) (xy 111.896411 118.916766) (xy 111.896411 124.770956) (xy 111.818962 124.693372) (xy 111.369437 124.506713)
+ (xy 110.882698 124.506288) (xy 110.432848 124.692162) (xy 110.088372 125.036038) (xy 109.901713 125.485563) (xy 109.901288 125.972302)
+ (xy 110.087162 126.422152) (xy 110.431038 126.766628) (xy 110.880563 126.953287) (xy 111.367302 126.953712) (xy 111.817152 126.767838)
+ (xy 112.161628 126.423962) (xy 112.348287 125.974437) (xy 112.348712 125.487698) (xy 112.348712 143.085566) (xy 110.425073 141.161927)
+ (xy 110.22179 141.026097) (xy 109.982 140.9784) (xy 109.812953 140.9784) (xy 109.812953 117.8902) (xy 109.635368 117.437014)
+ (xy 109.608716 117.397128) (xy 109.391766 117.338589) (xy 109.356411 117.373944) (xy 109.356411 117.303234) (xy 109.297872 117.086284)
+ (xy 108.851849 116.891405) (xy 108.3652 116.882047) (xy 107.912014 117.059632) (xy 107.872128 117.086284) (xy 107.813589 117.303234)
+ (xy 108.585 118.074645) (xy 109.356411 117.303234) (xy 109.356411 117.373944) (xy 108.620355 118.11) (xy 109.391766 118.881411)
+ (xy 109.608716 118.822872) (xy 109.803595 118.376849) (xy 109.812953 117.8902) (xy 109.812953 140.9784) (xy 109.8085 140.9784)
+ (xy 109.8085 126.532929) (xy 109.8085 126.324071) (xy 109.8085 124.927071) (xy 109.728574 124.734111) (xy 109.580889 124.586426)
+ (xy 109.387929 124.5065) (xy 109.356411 124.5065) (xy 109.356411 118.916766) (xy 108.585 118.145355) (xy 108.549645 118.18071)
+ (xy 108.549645 118.11) (xy 107.778234 117.338589) (xy 107.561284 117.397128) (xy 107.366405 117.843151) (xy 107.357047 118.3298)
+ (xy 107.534632 118.782986) (xy 107.561284 118.822872) (xy 107.778234 118.881411) (xy 108.549645 118.11) (xy 108.549645 118.18071)
+ (xy 107.813589 118.916766) (xy 107.872128 119.133716) (xy 108.318151 119.328595) (xy 108.8048 119.337953) (xy 109.257986 119.160368)
+ (xy 109.297872 119.133716) (xy 109.356411 118.916766) (xy 109.356411 124.5065) (xy 109.179071 124.5065) (xy 107.782071 124.5065)
+ (xy 107.589111 124.586426) (xy 107.441426 124.734111) (xy 107.3615 124.927071) (xy 107.3615 125.135929) (xy 107.3615 126.532929)
+ (xy 107.441426 126.725889) (xy 107.589111 126.873574) (xy 107.782071 126.9535) (xy 107.990929 126.9535) (xy 109.387929 126.9535)
+ (xy 109.580889 126.873574) (xy 109.728574 126.725889) (xy 109.8085 126.532929) (xy 109.8085 140.9784) (xy 108.204 140.9784)
+ (xy 107.964211 141.026097) (xy 107.760927 141.161927) (xy 107.252927 141.669927) (xy 107.117097 141.87321) (xy 107.0694 142.113)
+ (xy 107.0694 143.250454) (xy 106.801454 143.5184) (xy 106.467623 143.5184) (xy 106.633287 143.119437) (xy 106.633712 142.632698)
+ (xy 106.633712 135.647698) (xy 106.633712 126.757698) (xy 106.447838 126.307848) (xy 106.103962 125.963372) (xy 105.654437 125.776713)
+ (xy 105.167698 125.776288) (xy 104.717848 125.962162) (xy 104.373372 126.306038) (xy 104.186713 126.755563) (xy 104.186288 127.242302)
+ (xy 104.372162 127.692152) (xy 104.716038 128.036628) (xy 105.165563 128.223287) (xy 105.652302 128.223712) (xy 106.102152 128.037838)
+ (xy 106.446628 127.693962) (xy 106.633287 127.244437) (xy 106.633712 126.757698) (xy 106.633712 135.647698) (xy 106.447838 135.197848)
+ (xy 106.103962 134.853372) (xy 105.654437 134.666713) (xy 105.167698 134.666288) (xy 104.717848 134.852162) (xy 104.373372 135.196038)
+ (xy 104.186713 135.645563) (xy 104.186288 136.132302) (xy 104.372162 136.582152) (xy 104.716038 136.926628) (xy 105.165563 137.113287)
+ (xy 105.652302 137.113712) (xy 106.102152 136.927838) (xy 106.446628 136.583962) (xy 106.633287 136.134437) (xy 106.633712 135.647698)
+ (xy 106.633712 142.632698) (xy 106.447838 142.182848) (xy 106.103962 141.838372) (xy 105.654437 141.651713) (xy 105.167698 141.651288)
+ (xy 104.717848 141.837162) (xy 104.373372 142.181038) (xy 104.186713 142.630563) (xy 104.186288 143.117302) (xy 104.372162 143.567152)
+ (xy 104.716038 143.911628) (xy 105.165563 144.098287) (xy 105.45931 144.098543) (xy 105.277454 144.2804) (xy 105.138378 144.2804)
+ (xy 104.943895 144.085577) (xy 104.587692 143.937668) (xy 104.202001 143.937332) (xy 104.093712 143.982075) (xy 104.093712 142.632698)
+ (xy 104.093712 135.647698) (xy 104.093712 126.757698) (xy 103.907838 126.307848) (xy 103.563962 125.963372) (xy 103.114437 125.776713)
+ (xy 102.627698 125.776288) (xy 102.177848 125.962162) (xy 101.833372 126.306038) (xy 101.646713 126.755563) (xy 101.646288 127.242302)
+ (xy 101.832162 127.692152) (xy 102.176038 128.036628) (xy 102.625563 128.223287) (xy 103.112302 128.223712) (xy 103.562152 128.037838)
+ (xy 103.906628 127.693962) (xy 104.093287 127.244437) (xy 104.093712 126.757698) (xy 104.093712 135.647698) (xy 103.907838 135.197848)
+ (xy 103.563962 134.853372) (xy 103.114437 134.666713) (xy 102.627698 134.666288) (xy 102.177848 134.852162) (xy 101.833372 135.196038)
+ (xy 101.646713 135.645563) (xy 101.646288 136.132302) (xy 101.832162 136.582152) (xy 102.176038 136.926628) (xy 102.625563 137.113287)
+ (xy 103.112302 137.113712) (xy 103.562152 136.927838) (xy 103.906628 136.583962) (xy 104.093287 136.134437) (xy 104.093712 135.647698)
+ (xy 104.093712 142.632698) (xy 103.907838 142.182848) (xy 103.563962 141.838372) (xy 103.114437 141.651713) (xy 102.627698 141.651288)
+ (xy 102.177848 141.837162) (xy 101.833372 142.181038) (xy 101.646713 142.630563) (xy 101.646288 143.117302) (xy 101.832162 143.567152)
+ (xy 102.176038 143.911628) (xy 102.625563 144.098287) (xy 103.112302 144.098712) (xy 103.562152 143.912838) (xy 103.906628 143.568962)
+ (xy 104.093287 143.119437) (xy 104.093712 142.632698) (xy 104.093712 143.982075) (xy 103.84554 144.084618) (xy 103.572577 144.357105)
+ (xy 103.424668 144.713308) (xy 103.424332 145.098999) (xy 103.571618 145.45546) (xy 103.844105 145.728423) (xy 104.200308 145.876332)
+ (xy 104.585999 145.876668) (xy 104.706968 145.826684) (xy 104.694668 145.856308) (xy 104.694332 146.241999) (xy 104.775896 146.4394)
+ (xy 102.743 146.4394) (xy 102.50321 146.487097) (xy 102.299927 146.622927) (xy 102.172927 146.749927) (xy 102.037097 146.95321)
+ (xy 101.9894 147.193) (xy 101.9894 148.353621) (xy 101.794577 148.548105) (xy 101.646668 148.904308) (xy 101.646332 149.289999)
+ (xy 101.793618 149.64646) (xy 102.066105 149.919423) (xy 102.422308 150.067332) (xy 102.807999 150.067668) (xy 102.842407 150.05345)
+ (xy 102.936618 150.28146) (xy 103.209105 150.554423) (xy 103.565308 150.702332) (xy 103.950999 150.702668) (xy 104.30746 150.555382)
+ (xy 104.580423 150.282895) (xy 104.728332 149.926692) (xy 104.72858 149.642014) (xy 104.835308 149.686332) (xy 105.220999 149.686668)
+ (xy 105.57746 149.539382) (xy 105.773584 149.3436) (xy 155.338621 149.3436) (xy 155.533105 149.538423) (xy 155.889308 149.686332)
+ (xy 156.274999 149.686668) (xy 156.63146 149.539382) (xy 156.904423 149.266895) (xy 156.938559 149.184686) (xy 157.099 149.2166)
+ (xy 158.115 149.2166) (xy 158.268896 149.185988) (xy 158.268897 149.185988) (xy 158.556308 149.305332) (xy 158.941999 149.305668)
+ (xy 159.29846 149.158382) (xy 159.571423 148.885895) (xy 159.712672 148.54573) (xy 159.893 148.5816) (xy 160.037621 148.5816)
+ (xy 160.232105 148.776423) (xy 160.588308 148.924332) (xy 160.973999 148.924668) (xy 161.33046 148.777382) (xy 161.603423 148.504895)
+ (xy 161.717253 148.23076) (xy 161.858308 148.289332) (xy 162.243999 148.289668) (xy 162.60046 148.142382) (xy 162.873423 147.869895)
+ (xy 163.021332 147.513692) (xy 163.021668 147.128001) (xy 163.021668 149.525348) (xy 163.003001 149.525332) (xy 162.64654 149.672618)
+ (xy 162.373577 149.945105) (xy 162.242359 150.26111) (xy 162.112382 149.94654) (xy 161.839895 149.673577) (xy 161.483692 149.525668)
+ (xy 161.098001 149.525332) (xy 160.74154 149.672618) (xy 160.468577 149.945105) (xy 160.320668 150.301308) (xy 160.320332 150.686999)
+ (xy 160.391401 150.859) (xy 155.838613 150.859) (xy 155.909332 150.688692) (xy 155.909668 150.303001) (xy 155.762382 149.94654)
+ (xy 155.489895 149.673577) (xy 155.133692 149.525668) (xy 154.748001 149.525332) (xy 154.39154 149.672618) (xy 154.118577 149.945105)
+ (xy 153.987359 150.26111) (xy 153.857382 149.94654) (xy 153.584895 149.673577) (xy 153.228692 149.525668) (xy 152.843001 149.525332)
+ (xy 152.48654 149.672618) (xy 152.213577 149.945105) (xy 152.082359 150.26111) (xy 151.952382 149.94654) (xy 151.679895 149.673577)
+ (xy 151.323692 149.525668) (xy 150.938001 149.525332) (xy 150.58154 149.672618) (xy 150.308577 149.945105) (xy 150.177359 150.26111)
+ (xy 150.047382 149.94654) (xy 149.774895 149.673577) (xy 149.418692 149.525668) (xy 149.033001 149.525332) (xy 148.67654 149.672618)
+ (xy 148.403577 149.945105) (xy 148.272359 150.26111) (xy 148.142382 149.94654) (xy 147.869895 149.673577) (xy 147.513692 149.525668)
+ (xy 147.128001 149.525332) (xy 146.77154 149.672618) (xy 146.498577 149.945105) (xy 146.350668 150.301308) (xy 146.350332 150.686999)
+ (xy 146.421401 150.859) (xy 145.761211 150.859) (xy 145.608692 150.795668) (xy 145.223001 150.795332) (xy 145.068911 150.859)
+ (xy 143.856211 150.859) (xy 143.703692 150.795668) (xy 143.318001 150.795332) (xy 143.163911 150.859) (xy 142.503613 150.859)
+ (xy 142.574332 150.688692) (xy 142.574668 150.303001) (xy 142.427382 149.94654) (xy 142.154895 149.673577) (xy 141.798692 149.525668)
+ (xy 141.413001 149.525332) (xy 141.05654 149.672618) (xy 140.783577 149.945105) (xy 140.652359 150.26111) (xy 140.522382 149.94654)
+ (xy 140.249895 149.673577) (xy 139.893692 149.525668) (xy 139.508001 149.525332) (xy 139.15154 149.672618) (xy 138.878577 149.945105)
+ (xy 138.747359 150.26111) (xy 138.617382 149.94654) (xy 138.344895 149.673577) (xy 137.988692 149.525668) (xy 137.603001 149.525332)
+ (xy 137.24654 149.672618) (xy 136.973577 149.945105) (xy 136.842359 150.26111) (xy 136.712382 149.94654) (xy 136.439895 149.673577)
+ (xy 136.083692 149.525668) (xy 135.698001 149.525332) (xy 135.34154 149.672618) (xy 135.068577 149.945105) (xy 134.937359 150.26111)
+ (xy 134.807382 149.94654) (xy 134.534895 149.673577) (xy 134.178692 149.525668) (xy 133.793001 149.525332) (xy 133.43654 149.672618)
+ (xy 133.163577 149.945105) (xy 133.032359 150.26111) (xy 132.902382 149.94654) (xy 132.629895 149.673577) (xy 132.273692 149.525668)
+ (xy 131.888001 149.525332) (xy 131.53154 149.672618) (xy 131.258577 149.945105) (xy 131.127359 150.26111) (xy 130.997382 149.94654)
+ (xy 130.724895 149.673577) (xy 130.368692 149.525668) (xy 129.983001 149.525332) (xy 129.62654 149.672618) (xy 129.353577 149.945105)
+ (xy 129.205668 150.301308) (xy 129.205332 150.686999) (xy 129.276401 150.859) (xy 128.616211 150.859) (xy 128.463692 150.795668)
+ (xy 128.078001 150.795332) (xy 127.923911 150.859) (xy 127.263613 150.859) (xy 127.334332 150.688692) (xy 127.334668 150.303001)
+ (xy 127.187382 149.94654) (xy 126.914895 149.673577) (xy 126.558692 149.525668) (xy 126.173001 149.525332) (xy 125.81654 149.672618)
+ (xy 125.543577 149.945105) (xy 125.412359 150.26111) (xy 125.282382 149.94654) (xy 125.009895 149.673577) (xy 124.653692 149.525668)
+ (xy 124.268001 149.525332) (xy 123.91154 149.672618) (xy 123.638577 149.945105) (xy 123.507359 150.26111) (xy 123.377382 149.94654)
+ (xy 123.104895 149.673577) (xy 122.748692 149.525668) (xy 122.363001 149.525332) (xy 122.00654 149.672618) (xy 121.733577 149.945105)
+ (xy 121.602359 150.26111) (xy 121.472382 149.94654) (xy 121.199895 149.673577) (xy 120.843692 149.525668) (xy 120.458001 149.525332)
+ (xy 120.10154 149.672618) (xy 119.828577 149.945105) (xy 119.697359 150.26111) (xy 119.567382 149.94654) (xy 119.294895 149.673577)
+ (xy 118.938692 149.525668) (xy 118.553001 149.525332) (xy 118.19654 149.672618) (xy 117.923577 149.945105) (xy 117.775668 150.301308)
+ (xy 117.775332 150.686999) (xy 117.922618 151.04346) (xy 118.195105 151.316423) (xy 118.551308 151.464332) (xy 118.936999 151.464668)
+ (xy 119.29346 151.317382) (xy 119.566423 151.044895) (xy 119.69764 150.728889) (xy 119.827618 151.04346) (xy 119.913919 151.129911)
+ (xy 119.828577 151.215105) (xy 119.680668 151.571308) (xy 119.680332 151.956999) (xy 119.827618 152.31346) (xy 119.913919 152.399911)
+ (xy 119.828577 152.485105) (xy 119.680668 152.841308) (xy 119.680332 153.226999) (xy 119.827618 153.58346) (xy 120.100105 153.856423)
+ (xy 120.273586 153.928458) (xy 115.986347 153.911969) (xy 116.11846 153.857382) (xy 116.391423 153.584895) (xy 116.539332 153.228692)
+ (xy 116.539668 152.843001) (xy 116.539668 150.303001) (xy 116.392382 149.94654) (xy 116.119895 149.673577) (xy 115.763692 149.525668)
+ (xy 115.378001 149.525332) (xy 115.02154 149.672618) (xy 114.748577 149.945105) (xy 114.600668 150.301308) (xy 114.600332 150.686999)
+ (xy 114.747618 151.04346) (xy 115.020105 151.316423) (xy 115.376308 151.464332) (xy 115.761999 151.464668) (xy 116.11846 151.317382)
+ (xy 116.391423 151.044895) (xy 116.539332 150.688692) (xy 116.539668 150.303001) (xy 116.539668 152.843001) (xy 116.392382 152.48654)
+ (xy 116.119895 152.213577) (xy 115.763692 152.065668) (xy 115.378001 152.065332) (xy 115.02154 152.212618) (xy 114.748577 152.485105)
+ (xy 114.600668 152.841308) (xy 114.600332 153.226999) (xy 114.747618 153.58346) (xy 115.020105 153.856423) (xy 115.146092 153.908737)
+ (xy 113.469772 153.90229) (xy 113.57846 153.857382) (xy 113.851423 153.584895) (xy 113.999332 153.228692) (xy 113.999668 152.843001)
+ (xy 113.852382 152.48654) (xy 113.579895 152.213577) (xy 113.223692 152.065668) (xy 112.838001 152.065332) (xy 112.48154 152.212618)
+ (xy 112.208577 152.485105) (xy 112.060668 152.841308) (xy 112.060332 153.226999) (xy 112.207618 153.58346) (xy 112.480105 153.856423)
+ (xy 112.582345 153.898877) (xy 101.553712 153.856458) (xy 101.553712 142.632698) (xy 101.553712 135.647698) (xy 101.553712 126.757698)
+ (xy 101.367838 126.307848) (xy 101.023962 125.963372) (xy 100.574437 125.776713) (xy 100.087698 125.776288) (xy 99.648668 125.957691)
+ (xy 99.648668 110.679001) (xy 99.501382 110.32254) (xy 99.228895 110.049577) (xy 98.872692 109.901668) (xy 98.632668 109.901458)
+ (xy 98.632668 106.615001) (xy 98.485382 106.25854) (xy 98.212895 105.985577) (xy 97.856692 105.837668) (xy 97.471001 105.837332)
+ (xy 97.11454 105.984618) (xy 96.841577 106.257105) (xy 96.693668 106.613308) (xy 96.693332 106.998999) (xy 96.840618 107.35546)
+ (xy 97.113105 107.628423) (xy 97.469308 107.776332) (xy 97.854999 107.776668) (xy 98.21146 107.629382) (xy 98.484423 107.356895)
+ (xy 98.632332 107.000692) (xy 98.632668 106.615001) (xy 98.632668 109.901458) (xy 98.487001 109.901332) (xy 98.13054 110.048618)
+ (xy 97.857577 110.321105) (xy 97.709668 110.677308) (xy 97.709332 111.062999) (xy 97.856618 111.41946) (xy 98.129105 111.692423)
+ (xy 98.485308 111.840332) (xy 98.870999 111.840668) (xy 99.22746 111.693382) (xy 99.500423 111.420895) (xy 99.648332 111.064692)
+ (xy 99.648668 110.679001) (xy 99.648668 125.957691) (xy 99.637848 125.962162) (xy 99.293372 126.306038) (xy 99.106713 126.755563)
+ (xy 99.106288 127.242302) (xy 99.292162 127.692152) (xy 99.636038 128.036628) (xy 100.085563 128.223287) (xy 100.572302 128.223712)
+ (xy 101.022152 128.037838) (xy 101.366628 127.693962) (xy 101.553287 127.244437) (xy 101.553712 126.757698) (xy 101.553712 135.647698)
+ (xy 101.367838 135.197848) (xy 101.023962 134.853372) (xy 100.574437 134.666713) (xy 100.087698 134.666288) (xy 99.637848 134.852162)
+ (xy 99.293372 135.196038) (xy 99.106713 135.645563) (xy 99.106288 136.132302) (xy 99.292162 136.582152) (xy 99.636038 136.926628)
+ (xy 100.085563 137.113287) (xy 100.572302 137.113712) (xy 101.022152 136.927838) (xy 101.366628 136.583962) (xy 101.553287 136.134437)
+ (xy 101.553712 135.647698) (xy 101.553712 142.632698) (xy 101.367838 142.182848) (xy 101.023962 141.838372) (xy 100.574437 141.651713)
+ (xy 100.087698 141.651288) (xy 99.637848 141.837162) (xy 99.293372 142.181038) (xy 99.106713 142.630563) (xy 99.106288 143.117302)
+ (xy 99.292162 143.567152) (xy 99.636038 143.911628) (xy 100.085563 144.098287) (xy 100.572302 144.098712) (xy 101.022152 143.912838)
+ (xy 101.366628 143.568962) (xy 101.553287 143.119437) (xy 101.553712 142.632698) (xy 101.553712 153.856458) (xy 99.616846 153.849009)
+ (xy 99.881423 153.584895) (xy 100.029332 153.228692) (xy 100.029668 152.843001) (xy 99.882382 152.48654) (xy 99.609895 152.213577)
+ (xy 99.253692 152.065668) (xy 99.013712 152.065458) (xy 99.013712 142.632698) (xy 99.013712 135.647698) (xy 99.013712 126.757698)
+ (xy 98.827838 126.307848) (xy 98.483962 125.963372) (xy 98.124668 125.81418) (xy 98.124668 113.473001) (xy 97.977382 113.11654)
+ (xy 97.704895 112.843577) (xy 97.348692 112.695668) (xy 96.963001 112.695332) (xy 96.60654 112.842618) (xy 96.333577 113.115105)
+ (xy 96.185668 113.471308) (xy 96.185332 113.856999) (xy 96.332618 114.21346) (xy 96.605105 114.486423) (xy 96.961308 114.634332)
+ (xy 97.346999 114.634668) (xy 97.70346 114.487382) (xy 97.976423 114.214895) (xy 98.124332 113.858692) (xy 98.124668 113.473001)
+ (xy 98.124668 125.81418) (xy 98.034437 125.776713) (xy 97.547698 125.776288) (xy 97.097848 125.962162) (xy 96.753372 126.306038)
+ (xy 96.566713 126.755563) (xy 96.566288 127.242302) (xy 96.752162 127.692152) (xy 97.096038 128.036628) (xy 97.545563 128.223287)
+ (xy 98.032302 128.223712) (xy 98.482152 128.037838) (xy 98.826628 127.693962) (xy 99.013287 127.244437) (xy 99.013712 126.757698)
+ (xy 99.013712 135.647698) (xy 98.827838 135.197848) (xy 98.483962 134.853372) (xy 98.034437 134.666713) (xy 97.547698 134.666288)
+ (xy 97.097848 134.852162) (xy 96.753372 135.196038) (xy 96.566713 135.645563) (xy 96.566288 136.132302) (xy 96.752162 136.582152)
+ (xy 97.096038 136.926628) (xy 97.545563 137.113287) (xy 98.032302 137.113712) (xy 98.482152 136.927838) (xy 98.826628 136.583962)
+ (xy 99.013287 136.134437) (xy 99.013712 135.647698) (xy 99.013712 142.632698) (xy 98.827838 142.182848) (xy 98.483962 141.838372)
+ (xy 98.034437 141.651713) (xy 97.547698 141.651288) (xy 97.097848 141.837162) (xy 96.753372 142.181038) (xy 96.566713 142.630563)
+ (xy 96.566288 143.117302) (xy 96.752162 143.567152) (xy 97.096038 143.911628) (xy 97.545563 144.098287) (xy 98.032302 144.098712)
+ (xy 98.482152 143.912838) (xy 98.826628 143.568962) (xy 99.013287 143.119437) (xy 99.013712 142.632698) (xy 99.013712 152.065458)
+ (xy 98.868001 152.065332) (xy 98.683374 152.141617) (xy 98.759332 151.958692) (xy 98.759668 151.573001) (xy 98.612382 151.21654)
+ (xy 98.339895 150.943577) (xy 97.983692 150.795668) (xy 97.598001 150.795332) (xy 97.24154 150.942618) (xy 96.968577 151.215105)
+ (xy 96.820668 151.571308) (xy 96.820332 151.956999) (xy 96.967618 152.31346) (xy 97.240105 152.586423) (xy 97.596308 152.734332)
+ (xy 97.981999 152.734668) (xy 98.166625 152.658382) (xy 98.090668 152.841308) (xy 98.090332 153.226999) (xy 98.237618 153.58346)
+ (xy 98.49841 153.844708) (xy 96.473712 153.83692) (xy 96.473712 142.632698) (xy 96.473712 135.647698) (xy 96.473712 126.757698)
+ (xy 96.287838 126.307848) (xy 95.943962 125.963372) (xy 95.494437 125.776713) (xy 95.007698 125.776288) (xy 94.557848 125.962162)
+ (xy 94.213372 126.306038) (xy 94.026713 126.755563) (xy 94.026288 127.242302) (xy 94.212162 127.692152) (xy 94.556038 128.036628)
+ (xy 95.005563 128.223287) (xy 95.492302 128.223712) (xy 95.942152 128.037838) (xy 96.286628 127.693962) (xy 96.473287 127.244437)
+ (xy 96.473712 126.757698) (xy 96.473712 135.647698) (xy 96.287838 135.197848) (xy 95.943962 134.853372) (xy 95.494437 134.666713)
+ (xy 95.007698 134.666288) (xy 94.557848 134.852162) (xy 94.213372 135.196038) (xy 94.026713 135.645563) (xy 94.026288 136.132302)
+ (xy 94.212162 136.582152) (xy 94.556038 136.926628) (xy 95.005563 137.113287) (xy 95.492302 137.113712) (xy 95.942152 136.927838)
+ (xy 96.286628 136.583962) (xy 96.473287 136.134437) (xy 96.473712 135.647698) (xy 96.473712 142.632698) (xy 96.287838 142.182848)
+ (xy 95.943962 141.838372) (xy 95.494437 141.651713) (xy 95.007698 141.651288) (xy 94.557848 141.837162) (xy 94.213372 142.181038)
+ (xy 94.026713 142.630563) (xy 94.026288 143.117302) (xy 94.212162 143.567152) (xy 94.556038 143.911628) (xy 95.005563 144.098287)
+ (xy 95.492302 144.098712) (xy 95.942152 143.912838) (xy 96.286628 143.568962) (xy 96.473287 143.119437) (xy 96.473712 142.632698)
+ (xy 96.473712 153.83692) (xy 93.933712 153.827151) (xy 93.933712 142.632698) (xy 93.933712 135.647698) (xy 93.933712 126.757698)
+ (xy 93.747838 126.307848) (xy 93.403962 125.963372) (xy 93.298712 125.919668) (xy 93.298712 117.232698) (xy 93.298712 114.692698)
+ (xy 93.298712 112.152698) (xy 93.298712 109.612698) (xy 93.298712 107.072698) (xy 93.298712 104.532698) (xy 93.298712 101.992698)
+ (xy 93.298712 99.452698) (xy 93.112838 99.002848) (xy 92.768962 98.658372) (xy 92.319437 98.471713) (xy 91.832698 98.471288)
+ (xy 91.3935 98.65276) (xy 91.3935 76.367929) (xy 91.3935 76.159071) (xy 91.3935 74.762071) (xy 91.313574 74.569111)
+ (xy 91.165889 74.421426) (xy 90.972929 74.3415) (xy 90.764071 74.3415) (xy 89.367071 74.3415) (xy 89.174111 74.421426)
+ (xy 89.026426 74.569111) (xy 88.9465 74.762071) (xy 88.9465 74.970929) (xy 88.9465 76.367929) (xy 89.026426 76.560889)
+ (xy 89.174111 76.708574) (xy 89.367071 76.7885) (xy 89.575929 76.7885) (xy 90.972929 76.7885) (xy 91.165889 76.708574)
+ (xy 91.313574 76.560889) (xy 91.3935 76.367929) (xy 91.3935 98.65276) (xy 91.382848 98.657162) (xy 91.266668 98.773139)
+ (xy 91.266668 82.993001) (xy 91.119382 82.63654) (xy 90.846895 82.363577) (xy 90.490692 82.215668) (xy 90.105001 82.215332)
+ (xy 89.74854 82.362618) (xy 89.488712 82.621992) (xy 89.488712 81.672698) (xy 89.4885 81.672184) (xy 89.4885 80.177929)
+ (xy 89.4885 79.53125) (xy 89.4885 79.21875) (xy 89.4885 78.572071) (xy 89.408574 78.379111) (xy 89.260889 78.231426)
+ (xy 89.067929 78.1515) (xy 88.859071 78.1515) (xy 88.42125 78.1515) (xy 88.29 78.28275) (xy 88.29 79.35)
+ (xy 89.35725 79.35) (xy 89.4885 79.21875) (xy 89.4885 79.53125) (xy 89.35725 79.4) (xy 88.29 79.4)
+ (xy 88.29 80.46725) (xy 88.42125 80.5985) (xy 88.859071 80.5985) (xy 89.067929 80.5985) (xy 89.260889 80.518574)
+ (xy 89.408574 80.370889) (xy 89.4885 80.177929) (xy 89.4885 81.672184) (xy 89.302838 81.222848) (xy 88.958962 80.878372)
+ (xy 88.509437 80.691713) (xy 88.24 80.691477) (xy 88.24 80.46725) (xy 88.24 79.4) (xy 88.24 79.35)
+ (xy 88.24 78.28275) (xy 88.10875 78.1515) (xy 87.670929 78.1515) (xy 87.462071 78.1515) (xy 87.269111 78.231426)
+ (xy 87.121426 78.379111) (xy 87.0415 78.572071) (xy 87.0415 79.21875) (xy 87.17275 79.35) (xy 88.24 79.35)
+ (xy 88.24 79.4) (xy 87.17275 79.4) (xy 87.0415 79.53125) (xy 87.0415 80.177929) (xy 87.121426 80.370889)
+ (xy 87.269111 80.518574) (xy 87.462071 80.5985) (xy 87.670929 80.5985) (xy 88.10875 80.5985) (xy 88.24 80.46725)
+ (xy 88.24 80.691477) (xy 88.022698 80.691288) (xy 87.572848 80.877162) (xy 87.228372 81.221038) (xy 87.041713 81.670563)
+ (xy 87.041288 82.157302) (xy 87.227162 82.607152) (xy 87.571038 82.951628) (xy 88.020563 83.138287) (xy 88.507302 83.138712)
+ (xy 88.957152 82.952838) (xy 89.301628 82.608962) (xy 89.488287 82.159437) (xy 89.488712 81.672698) (xy 89.488712 82.621992)
+ (xy 89.475577 82.635105) (xy 89.327668 82.991308) (xy 89.327332 83.376999) (xy 89.474618 83.73346) (xy 89.747105 84.006423)
+ (xy 90.103308 84.154332) (xy 90.488999 84.154668) (xy 90.84546 84.007382) (xy 91.118423 83.734895) (xy 91.266332 83.378692)
+ (xy 91.266668 82.993001) (xy 91.266668 98.773139) (xy 91.038372 99.001038) (xy 90.851713 99.450563) (xy 90.851288 99.937302)
+ (xy 91.037162 100.387152) (xy 91.381038 100.731628) (xy 91.830563 100.918287) (xy 92.317302 100.918712) (xy 92.767152 100.732838)
+ (xy 93.111628 100.388962) (xy 93.298287 99.939437) (xy 93.298712 99.452698) (xy 93.298712 101.992698) (xy 93.112838 101.542848)
+ (xy 92.768962 101.198372) (xy 92.319437 101.011713) (xy 91.832698 101.011288) (xy 91.382848 101.197162) (xy 91.038372 101.541038)
+ (xy 90.851713 101.990563) (xy 90.851288 102.477302) (xy 91.037162 102.927152) (xy 91.381038 103.271628) (xy 91.830563 103.458287)
+ (xy 92.317302 103.458712) (xy 92.767152 103.272838) (xy 93.111628 102.928962) (xy 93.298287 102.479437) (xy 93.298712 101.992698)
+ (xy 93.298712 104.532698) (xy 93.112838 104.082848) (xy 92.768962 103.738372) (xy 92.319437 103.551713) (xy 91.832698 103.551288)
+ (xy 91.382848 103.737162) (xy 91.038372 104.081038) (xy 90.851713 104.530563) (xy 90.851288 105.017302) (xy 91.037162 105.467152)
+ (xy 91.381038 105.811628) (xy 91.830563 105.998287) (xy 92.317302 105.998712) (xy 92.767152 105.812838) (xy 93.111628 105.468962)
+ (xy 93.298287 105.019437) (xy 93.298712 104.532698) (xy 93.298712 107.072698) (xy 93.112838 106.622848) (xy 92.768962 106.278372)
+ (xy 92.319437 106.091713) (xy 91.832698 106.091288) (xy 91.382848 106.277162) (xy 91.038372 106.621038) (xy 90.851713 107.070563)
+ (xy 90.851288 107.557302) (xy 91.037162 108.007152) (xy 91.381038 108.351628) (xy 91.830563 108.538287) (xy 92.317302 108.538712)
+ (xy 92.767152 108.352838) (xy 93.111628 108.008962) (xy 93.298287 107.559437) (xy 93.298712 107.072698) (xy 93.298712 109.612698)
+ (xy 93.112838 109.162848) (xy 92.768962 108.818372) (xy 92.319437 108.631713) (xy 91.832698 108.631288) (xy 91.382848 108.817162)
+ (xy 91.038372 109.161038) (xy 90.851713 109.610563) (xy 90.851288 110.097302) (xy 91.037162 110.547152) (xy 91.381038 110.891628)
+ (xy 91.830563 111.078287) (xy 92.317302 111.078712) (xy 92.767152 110.892838) (xy 93.111628 110.548962) (xy 93.298287 110.099437)
+ (xy 93.298712 109.612698) (xy 93.298712 112.152698) (xy 93.112838 111.702848) (xy 92.768962 111.358372) (xy 92.319437 111.171713)
+ (xy 91.832698 111.171288) (xy 91.382848 111.357162) (xy 91.038372 111.701038) (xy 90.851713 112.150563) (xy 90.851288 112.637302)
+ (xy 91.037162 113.087152) (xy 91.381038 113.431628) (xy 91.830563 113.618287) (xy 92.317302 113.618712) (xy 92.767152 113.432838)
+ (xy 93.111628 113.088962) (xy 93.298287 112.639437) (xy 93.298712 112.152698) (xy 93.298712 114.692698) (xy 93.112838 114.242848)
+ (xy 92.768962 113.898372) (xy 92.319437 113.711713) (xy 91.832698 113.711288) (xy 91.382848 113.897162) (xy 91.038372 114.241038)
+ (xy 90.851713 114.690563) (xy 90.851288 115.177302) (xy 91.037162 115.627152) (xy 91.381038 115.971628) (xy 91.830563 116.158287)
+ (xy 92.317302 116.158712) (xy 92.767152 115.972838) (xy 93.111628 115.628962) (xy 93.298287 115.179437) (xy 93.298712 114.692698)
+ (xy 93.298712 117.232698) (xy 93.112838 116.782848) (xy 92.768962 116.438372) (xy 92.319437 116.251713) (xy 91.832698 116.251288)
+ (xy 91.382848 116.437162) (xy 91.038372 116.781038) (xy 90.851713 117.230563) (xy 90.851288 117.717302) (xy 91.037162 118.167152)
+ (xy 91.381038 118.511628) (xy 91.830563 118.698287) (xy 92.317302 118.698712) (xy 92.767152 118.512838) (xy 93.111628 118.168962)
+ (xy 93.298287 117.719437) (xy 93.298712 117.232698) (xy 93.298712 125.919668) (xy 93.2985 125.91958) (xy 93.2985 120.817929)
+ (xy 93.2985 120.17125) (xy 93.2985 119.85875) (xy 93.2985 119.212071) (xy 93.218574 119.019111) (xy 93.070889 118.871426)
+ (xy 92.877929 118.7915) (xy 92.669071 118.7915) (xy 92.23125 118.7915) (xy 92.1 118.92275) (xy 92.1 119.99)
+ (xy 93.16725 119.99) (xy 93.2985 119.85875) (xy 93.2985 120.17125) (xy 93.16725 120.04) (xy 92.1 120.04)
+ (xy 92.1 121.10725) (xy 92.23125 121.2385) (xy 92.669071 121.2385) (xy 92.877929 121.2385) (xy 93.070889 121.158574)
+ (xy 93.218574 121.010889) (xy 93.2985 120.817929) (xy 93.2985 125.91958) (xy 92.954437 125.776713) (xy 92.467698 125.776288)
+ (xy 92.05 125.948877) (xy 92.05 121.10725) (xy 92.05 120.04) (xy 92.05 119.99) (xy 92.05 118.92275)
+ (xy 91.91875 118.7915) (xy 91.480929 118.7915) (xy 91.272071 118.7915) (xy 91.079111 118.871426) (xy 90.931426 119.019111)
+ (xy 90.8515 119.212071) (xy 90.8515 119.85875) (xy 90.98275 119.99) (xy 92.05 119.99) (xy 92.05 120.04)
+ (xy 90.98275 120.04) (xy 90.8515 120.17125) (xy 90.8515 120.817929) (xy 90.931426 121.010889) (xy 91.079111 121.158574)
+ (xy 91.272071 121.2385) (xy 91.480929 121.2385) (xy 91.91875 121.2385) (xy 92.05 121.10725) (xy 92.05 125.948877)
+ (xy 92.017848 125.962162) (xy 91.673372 126.306038) (xy 91.486713 126.755563) (xy 91.486288 127.242302) (xy 91.672162 127.692152)
+ (xy 92.016038 128.036628) (xy 92.465563 128.223287) (xy 92.952302 128.223712) (xy 93.402152 128.037838) (xy 93.746628 127.693962)
+ (xy 93.933287 127.244437) (xy 93.933712 126.757698) (xy 93.933712 135.647698) (xy 93.747838 135.197848) (xy 93.403962 134.853372)
+ (xy 92.954437 134.666713) (xy 92.467698 134.666288) (xy 92.017848 134.852162) (xy 91.673372 135.196038) (xy 91.486713 135.645563)
+ (xy 91.486288 136.132302) (xy 91.672162 136.582152) (xy 92.016038 136.926628) (xy 92.465563 137.113287) (xy 92.952302 137.113712)
+ (xy 93.402152 136.927838) (xy 93.746628 136.583962) (xy 93.933287 136.134437) (xy 93.933712 135.647698) (xy 93.933712 142.632698)
+ (xy 93.747838 142.182848) (xy 93.403962 141.838372) (xy 92.954437 141.651713) (xy 92.467698 141.651288) (xy 92.017848 141.837162)
+ (xy 91.673372 142.181038) (xy 91.486713 142.630563) (xy 91.486288 143.117302) (xy 91.672162 143.567152) (xy 92.016038 143.911628)
+ (xy 92.465563 144.098287) (xy 92.952302 144.098712) (xy 93.402152 143.912838) (xy 93.746628 143.568962) (xy 93.933287 143.119437)
+ (xy 93.933712 142.632698) (xy 93.933712 153.827151) (xy 92.727223 153.822511) (xy 92.727223 147.700123) (xy 92.531702 147.226925)
+ (xy 92.169979 146.864571) (xy 91.697123 146.668224) (xy 91.393712 146.667959) (xy 91.393712 142.632698) (xy 91.393712 135.647698)
+ (xy 91.393712 126.757698) (xy 91.207838 126.307848) (xy 90.863962 125.963372) (xy 90.414437 125.776713) (xy 90.250668 125.77657)
+ (xy 90.250668 100.900001) (xy 90.103382 100.54354) (xy 89.830895 100.270577) (xy 89.474692 100.122668) (xy 89.412225 100.122613)
+ (xy 89.488287 99.939437) (xy 89.488712 99.452698) (xy 89.488712 96.912698) (xy 89.488712 94.372698) (xy 89.488712 91.832698)
+ (xy 89.488712 89.292698) (xy 89.488712 86.752698) (xy 89.488712 84.212698) (xy 89.302838 83.762848) (xy 88.958962 83.418372)
+ (xy 88.509437 83.231713) (xy 88.022698 83.231288) (xy 87.572848 83.417162) (xy 87.228372 83.761038) (xy 87.041713 84.210563)
+ (xy 87.041288 84.697302) (xy 87.227162 85.147152) (xy 87.571038 85.491628) (xy 88.020563 85.678287) (xy 88.507302 85.678712)
+ (xy 88.957152 85.492838) (xy 89.301628 85.148962) (xy 89.488287 84.699437) (xy 89.488712 84.212698) (xy 89.488712 86.752698)
+ (xy 89.302838 86.302848) (xy 88.958962 85.958372) (xy 88.509437 85.771713) (xy 88.022698 85.771288) (xy 87.572848 85.957162)
+ (xy 87.228372 86.301038) (xy 87.041713 86.750563) (xy 87.041288 87.237302) (xy 87.227162 87.687152) (xy 87.571038 88.031628)
+ (xy 88.020563 88.218287) (xy 88.507302 88.218712) (xy 88.957152 88.032838) (xy 89.301628 87.688962) (xy 89.488287 87.239437)
+ (xy 89.488712 86.752698) (xy 89.488712 89.292698) (xy 89.302838 88.842848) (xy 88.958962 88.498372) (xy 88.509437 88.311713)
+ (xy 88.022698 88.311288) (xy 87.572848 88.497162) (xy 87.228372 88.841038) (xy 87.041713 89.290563) (xy 87.041288 89.777302)
+ (xy 87.227162 90.227152) (xy 87.571038 90.571628) (xy 88.020563 90.758287) (xy 88.507302 90.758712) (xy 88.957152 90.572838)
+ (xy 89.301628 90.228962) (xy 89.488287 89.779437) (xy 89.488712 89.292698) (xy 89.488712 91.832698) (xy 89.302838 91.382848)
+ (xy 88.958962 91.038372) (xy 88.509437 90.851713) (xy 88.022698 90.851288) (xy 87.572848 91.037162) (xy 87.228372 91.381038)
+ (xy 87.041713 91.830563) (xy 87.041288 92.317302) (xy 87.227162 92.767152) (xy 87.571038 93.111628) (xy 88.020563 93.298287)
+ (xy 88.507302 93.298712) (xy 88.957152 93.112838) (xy 89.301628 92.768962) (xy 89.488287 92.319437) (xy 89.488712 91.832698)
+ (xy 89.488712 94.372698) (xy 89.302838 93.922848) (xy 88.958962 93.578372) (xy 88.509437 93.391713) (xy 88.022698 93.391288)
+ (xy 87.572848 93.577162) (xy 87.228372 93.921038) (xy 87.041713 94.370563) (xy 87.041288 94.857302) (xy 87.227162 95.307152)
+ (xy 87.571038 95.651628) (xy 88.020563 95.838287) (xy 88.507302 95.838712) (xy 88.957152 95.652838) (xy 89.301628 95.308962)
+ (xy 89.488287 94.859437) (xy 89.488712 94.372698) (xy 89.488712 96.912698) (xy 89.302838 96.462848) (xy 88.958962 96.118372)
+ (xy 88.509437 95.931713) (xy 88.022698 95.931288) (xy 87.572848 96.117162) (xy 87.228372 96.461038) (xy 87.041713 96.910563)
+ (xy 87.041288 97.397302) (xy 87.227162 97.847152) (xy 87.571038 98.191628) (xy 88.020563 98.378287) (xy 88.507302 98.378712)
+ (xy 88.957152 98.192838) (xy 89.301628 97.848962) (xy 89.488287 97.399437) (xy 89.488712 96.912698) (xy 89.488712 99.452698)
+ (xy 89.302838 99.002848) (xy 88.958962 98.658372) (xy 88.509437 98.471713) (xy 88.022698 98.471288) (xy 87.572848 98.657162)
+ (xy 87.228372 99.001038) (xy 87.041713 99.450563) (xy 87.041288 99.937302) (xy 87.227162 100.387152) (xy 87.571038 100.731628)
+ (xy 88.020563 100.918287) (xy 88.31165 100.918541) (xy 88.311332 101.283999) (xy 88.458618 101.64046) (xy 88.731105 101.913423)
+ (xy 89.087308 102.061332) (xy 89.472999 102.061668) (xy 89.82946 101.914382) (xy 90.102423 101.641895) (xy 90.250332 101.285692)
+ (xy 90.250668 100.900001) (xy 90.250668 125.77657) (xy 89.927698 125.776288) (xy 89.477848 125.962162) (xy 89.133372 126.306038)
+ (xy 88.946713 126.755563) (xy 88.946288 127.242302) (xy 89.132162 127.692152) (xy 89.476038 128.036628) (xy 89.925563 128.223287)
+ (xy 90.412302 128.223712) (xy 90.862152 128.037838) (xy 91.206628 127.693962) (xy 91.393287 127.244437) (xy 91.393712 126.757698)
+ (xy 91.393712 135.647698) (xy 91.207838 135.197848) (xy 90.863962 134.853372) (xy 90.414437 134.666713) (xy 89.927698 134.666288)
+ (xy 89.477848 134.852162) (xy 89.133372 135.196038) (xy 88.946713 135.645563) (xy 88.946288 136.132302) (xy 89.132162 136.582152)
+ (xy 89.476038 136.926628) (xy 89.925563 137.113287) (xy 90.412302 137.113712) (xy 90.862152 136.927838) (xy 91.206628 136.583962)
+ (xy 91.393287 136.134437) (xy 91.393712 135.647698) (xy 91.393712 142.632698) (xy 91.207838 142.182848) (xy 90.863962 141.838372)
+ (xy 90.414437 141.651713) (xy 89.927698 141.651288) (xy 89.477848 141.837162) (xy 89.133372 142.181038) (xy 88.946713 142.630563)
+ (xy 88.946288 143.117302) (xy 89.132162 143.567152) (xy 89.476038 143.911628) (xy 89.925563 144.098287) (xy 90.412302 144.098712)
+ (xy 90.862152 143.912838) (xy 91.206628 143.568962) (xy 91.393287 143.119437) (xy 91.393712 142.632698) (xy 91.393712 146.667959)
+ (xy 91.185123 146.667777) (xy 90.711925 146.863298) (xy 90.349571 147.225021) (xy 90.187 147.616535) (xy 90.187 147.088571)
+ (xy 90.107074 146.895611) (xy 89.959389 146.747926) (xy 89.766429 146.668) (xy 89.557571 146.668) (xy 88.853712 146.668)
+ (xy 88.853712 142.632698) (xy 88.853712 135.647698) (xy 88.853712 126.757698) (xy 88.667838 126.307848) (xy 88.472668 126.112337)
+ (xy 88.472668 106.234001) (xy 88.325382 105.87754) (xy 88.052895 105.604577) (xy 87.696692 105.456668) (xy 87.311001 105.456332)
+ (xy 86.95454 105.603618) (xy 86.758415 105.7994) (xy 86.599901 105.7994) (xy 86.78146 105.724382) (xy 87.054423 105.451895)
+ (xy 87.202332 105.095692) (xy 87.202668 104.710001) (xy 87.055382 104.35354) (xy 86.782895 104.080577) (xy 86.694668 104.043941)
+ (xy 86.694668 81.596001) (xy 86.547382 81.23954) (xy 86.274895 80.966577) (xy 85.918692 80.818668) (xy 85.533001 80.818332)
+ (xy 85.17654 80.965618) (xy 84.903577 81.238105) (xy 84.755668 81.594308) (xy 84.755332 81.979999) (xy 84.902618 82.33646)
+ (xy 85.175105 82.609423) (xy 85.531308 82.757332) (xy 85.916999 82.757668) (xy 86.27346 82.610382) (xy 86.546423 82.337895)
+ (xy 86.694332 81.981692) (xy 86.694668 81.596001) (xy 86.694668 104.043941) (xy 86.426692 103.932668) (xy 86.186668 103.932458)
+ (xy 86.186668 100.773001) (xy 86.059668 100.465636) (xy 86.059668 96.455001) (xy 85.912382 96.09854) (xy 85.639895 95.825577)
+ (xy 85.283692 95.677668) (xy 84.898001 95.677332) (xy 84.54154 95.824618) (xy 84.268577 96.097105) (xy 84.120668 96.453308)
+ (xy 84.120332 96.838999) (xy 84.267618 97.19546) (xy 84.540105 97.468423) (xy 84.896308 97.616332) (xy 85.281999 97.616668)
+ (xy 85.63846 97.469382) (xy 85.911423 97.196895) (xy 86.059332 96.840692) (xy 86.059668 96.455001) (xy 86.059668 100.465636)
+ (xy 86.039382 100.41654) (xy 85.766895 100.143577) (xy 85.410692 99.995668) (xy 85.025001 99.995332) (xy 84.66854 100.142618)
+ (xy 84.395577 100.415105) (xy 84.247668 100.771308) (xy 84.247332 101.156999) (xy 84.394618 101.51346) (xy 84.667105 101.786423)
+ (xy 85.023308 101.934332) (xy 85.408999 101.934668) (xy 85.76546 101.787382) (xy 86.038423 101.514895) (xy 86.186332 101.158692)
+ (xy 86.186668 100.773001) (xy 86.186668 103.932458) (xy 86.041001 103.932332) (xy 85.742011 104.055871) (xy 85.639895 103.953577)
+ (xy 85.297668 103.811471) (xy 85.297668 102.551001) (xy 85.150382 102.19454) (xy 84.877895 101.921577) (xy 84.521692 101.773668)
+ (xy 84.136001 101.773332) (xy 83.900668 101.870569) (xy 83.900668 79.183001) (xy 83.753382 78.82654) (xy 83.480895 78.553577)
+ (xy 83.191505 78.433411) (xy 83.22546 78.419382) (xy 83.498423 78.146895) (xy 83.646332 77.790692) (xy 83.646668 77.405001)
+ (xy 83.499382 77.04854) (xy 83.226895 76.775577) (xy 82.870692 76.627668) (xy 82.485001 76.627332) (xy 82.12854 76.774618)
+ (xy 81.855577 77.047105) (xy 81.707668 77.403308) (xy 81.707332 77.788999) (xy 81.854618 78.14546) (xy 82.127105 78.418423)
+ (xy 82.416494 78.538588) (xy 82.38254 78.552618) (xy 82.109577 78.825105) (xy 81.961668 79.181308) (xy 81.961332 79.566999)
+ (xy 82.108618 79.92346) (xy 82.381105 80.196423) (xy 82.737308 80.344332) (xy 83.122999 80.344668) (xy 83.47946 80.197382)
+ (xy 83.752423 79.924895) (xy 83.900332 79.568692) (xy 83.900668 79.183001) (xy 83.900668 101.870569) (xy 83.77954 101.920618)
+ (xy 83.506577 102.193105) (xy 83.358668 102.549308) (xy 83.358332 102.934999) (xy 83.505618 103.29146) (xy 83.778105 103.564423)
+ (xy 84.134308 103.712332) (xy 84.519999 103.712668) (xy 84.87646 103.565382) (xy 85.149423 103.292895) (xy 85.297332 102.936692)
+ (xy 85.297668 102.551001) (xy 85.297668 103.811471) (xy 85.283692 103.805668) (xy 84.898001 103.805332) (xy 84.54154 103.952618)
+ (xy 84.268577 104.225105) (xy 84.120668 104.581308) (xy 84.120332 104.966999) (xy 84.267618 105.32346) (xy 84.540105 105.596423)
+ (xy 84.896308 105.744332) (xy 85.281999 105.744668) (xy 85.580988 105.621128) (xy 85.683105 105.723423) (xy 85.866077 105.7994)
+ (xy 81.868668 105.7994) (xy 81.868668 81.469001) (xy 81.721382 81.11254) (xy 81.448895 80.839577) (xy 81.092692 80.691668)
+ (xy 80.707001 80.691332) (xy 80.598668 80.736094) (xy 80.598668 78.421001) (xy 80.451382 78.06454) (xy 80.178895 77.791577)
+ (xy 79.822692 77.643668) (xy 79.437001 77.643332) (xy 79.08054 77.790618) (xy 78.807577 78.063105) (xy 78.659668 78.419308)
+ (xy 78.659332 78.804999) (xy 78.806618 79.16146) (xy 79.079105 79.434423) (xy 79.435308 79.582332) (xy 79.820999 79.582668)
+ (xy 80.17746 79.435382) (xy 80.450423 79.162895) (xy 80.598332 78.806692) (xy 80.598668 78.421001) (xy 80.598668 80.736094)
+ (xy 80.35054 80.838618) (xy 80.077577 81.111105) (xy 79.929668 81.467308) (xy 79.929332 81.852999) (xy 80.076618 82.20946)
+ (xy 80.349105 82.482423) (xy 80.705308 82.630332) (xy 81.090999 82.630668) (xy 81.44746 82.483382) (xy 81.720423 82.210895)
+ (xy 81.868332 81.854692) (xy 81.868668 81.469001) (xy 81.868668 105.7994) (xy 80.344668 105.7994) (xy 80.344668 87.819001)
+ (xy 80.197382 87.46254) (xy 80.004229 87.269049) (xy 80.090332 87.061692) (xy 80.090668 86.676001) (xy 79.943382 86.31954)
+ (xy 79.670895 86.046577) (xy 79.314692 85.898668) (xy 79.302208 85.898657) (xy 79.561423 85.639895) (xy 79.709332 85.283692)
+ (xy 79.709668 84.898001) (xy 79.562382 84.54154) (xy 79.289895 84.268577) (xy 78.933692 84.120668) (xy 78.548001 84.120332)
+ (xy 78.19154 84.267618) (xy 77.918577 84.540105) (xy 77.770668 84.896308) (xy 77.770332 85.281999) (xy 77.917618 85.63846)
+ (xy 78.190105 85.911423) (xy 78.546308 86.059332) (xy 78.558791 86.059342) (xy 78.299577 86.318105) (xy 78.151668 86.674308)
+ (xy 78.151332 87.059999) (xy 78.298618 87.41646) (xy 78.49177 87.60995) (xy 78.405668 87.817308) (xy 78.405332 88.202999)
+ (xy 78.552618 88.55946) (xy 78.825105 88.832423) (xy 79.181308 88.980332) (xy 79.566999 88.980668) (xy 79.92346 88.833382)
+ (xy 80.196423 88.560895) (xy 80.344332 88.204692) (xy 80.344668 87.819001) (xy 80.344668 105.7994) (xy 79.582668 105.7994)
+ (xy 79.582668 102.551001) (xy 79.435382 102.19454) (xy 79.162895 101.921577) (xy 78.947668 101.832206) (xy 78.947668 91.629001)
+ (xy 78.800382 91.27254) (xy 78.527895 90.999577) (xy 78.171692 90.851668) (xy 77.786001 90.851332) (xy 77.42954 90.998618)
+ (xy 77.156577 91.271105) (xy 77.008668 91.627308) (xy 77.008332 92.012999) (xy 77.155618 92.36946) (xy 77.428105 92.642423)
+ (xy 77.784308 92.790332) (xy 78.169999 92.790668) (xy 78.52646 92.643382) (xy 78.799423 92.370895) (xy 78.947332 92.014692)
+ (xy 78.947668 91.629001) (xy 78.947668 101.832206) (xy 78.806692 101.773668) (xy 78.566668 101.773458) (xy 78.566668 95.312001)
+ (xy 78.419382 94.95554) (xy 78.146895 94.682577) (xy 77.790692 94.534668) (xy 77.405001 94.534332) (xy 77.04854 94.681618)
+ (xy 76.915668 94.814258) (xy 76.915668 83.755001) (xy 76.788668 83.447636) (xy 76.788668 81.596001) (xy 76.641382 81.23954)
+ (xy 76.368895 80.966577) (xy 76.012692 80.818668) (xy 75.627001 80.818332) (xy 75.27054 80.965618) (xy 74.997577 81.238105)
+ (xy 74.849668 81.594308) (xy 74.849332 81.979999) (xy 74.996618 82.33646) (xy 75.269105 82.609423) (xy 75.625308 82.757332)
+ (xy 76.010999 82.757668) (xy 76.36746 82.610382) (xy 76.640423 82.337895) (xy 76.788332 81.981692) (xy 76.788668 81.596001)
+ (xy 76.788668 83.447636) (xy 76.768382 83.39854) (xy 76.495895 83.125577) (xy 76.139692 82.977668) (xy 75.754001 82.977332)
+ (xy 75.39754 83.124618) (xy 75.124577 83.397105) (xy 74.976668 83.753308) (xy 74.976332 84.138999) (xy 75.123618 84.49546)
+ (xy 75.396105 84.768423) (xy 75.752308 84.916332) (xy 76.137999 84.916668) (xy 76.49446 84.769382) (xy 76.767423 84.496895)
+ (xy 76.915332 84.140692) (xy 76.915668 83.755001) (xy 76.915668 94.814258) (xy 76.775577 94.954105) (xy 76.627668 95.310308)
+ (xy 76.627332 95.695999) (xy 76.672104 95.804357) (xy 76.643001 95.804332) (xy 76.28654 95.951618) (xy 76.013577 96.224105)
+ (xy 75.865668 96.580308) (xy 75.865332 96.965999) (xy 76.012618 97.32246) (xy 76.285105 97.595423) (xy 76.641308 97.743332)
+ (xy 77.026999 97.743668) (xy 77.38346 97.596382) (xy 77.656423 97.323895) (xy 77.804332 96.967692) (xy 77.804668 96.582001)
+ (xy 77.759895 96.473642) (xy 77.788999 96.473668) (xy 78.14546 96.326382) (xy 78.418423 96.053895) (xy 78.566332 95.697692)
+ (xy 78.566668 95.312001) (xy 78.566668 101.773458) (xy 78.421001 101.773332) (xy 78.06454 101.920618) (xy 77.791577 102.193105)
+ (xy 77.643668 102.549308) (xy 77.643332 102.934999) (xy 77.790618 103.29146) (xy 78.063105 103.564423) (xy 78.419308 103.712332)
+ (xy 78.804999 103.712668) (xy 79.16146 103.565382) (xy 79.434423 103.292895) (xy 79.582332 102.936692) (xy 79.582668 102.551001)
+ (xy 79.582668 105.7994) (xy 77.042382 105.7994) (xy 77.042668 105.472001) (xy 76.895382 105.11554) (xy 76.622895 104.842577)
+ (xy 76.266692 104.694668) (xy 75.881001 104.694332) (xy 75.52454 104.841618) (xy 75.251577 105.114105) (xy 75.103668 105.470308)
+ (xy 75.103381 105.7994) (xy 74.7946 105.7994) (xy 74.7946 91.694) (xy 74.7946 87.884) (xy 74.746903 87.644211)
+ (xy 74.746903 87.64421) (xy 74.611073 87.440927) (xy 73.7786 86.608454) (xy 73.7786 85.725) (xy 73.730903 85.485211)
+ (xy 73.730902 85.48521) (xy 73.595073 85.281927) (xy 73.341073 85.027927) (xy 73.13779 84.892097) (xy 72.898 84.8444)
+ (xy 72.3816 84.8444) (xy 72.3816 84.662382) (xy 72.708999 84.662668) (xy 73.06546 84.515382) (xy 73.338423 84.242895)
+ (xy 73.486332 83.886692) (xy 73.486668 83.501001) (xy 73.339382 83.14454) (xy 73.066895 82.871577) (xy 72.710692 82.723668)
+ (xy 72.601074 82.723572) (xy 72.6356 82.55) (xy 72.6356 82.532378) (xy 72.830423 82.337895) (xy 72.978332 81.981692)
+ (xy 72.978668 81.596001) (xy 72.831382 81.23954) (xy 72.558895 80.966577) (xy 72.202692 80.818668) (xy 71.8736 80.818381)
+ (xy 71.8736 78.087378) (xy 72.068423 77.892895) (xy 72.216332 77.536692) (xy 72.216668 77.151001) (xy 72.069382 76.79454)
+ (xy 71.796895 76.521577) (xy 71.440692 76.373668) (xy 71.055001 76.373332) (xy 70.69854 76.520618) (xy 70.425577 76.793105)
+ (xy 70.277668 77.149308) (xy 70.277332 77.534999) (xy 70.424618 77.89146) (xy 70.6204 78.087584) (xy 70.6204 88.392)
+ (xy 70.668097 88.63179) (xy 70.803927 88.835073) (xy 72.1444 90.175546) (xy 72.1444 91.457621) (xy 71.949577 91.652105)
+ (xy 71.801668 92.008308) (xy 71.801332 92.393999) (xy 71.948618 92.75046) (xy 72.221105 93.023423) (xy 72.577308 93.171332)
+ (xy 72.817539 93.171541) (xy 72.817332 93.409999) (xy 72.964618 93.76646) (xy 73.237105 94.039423) (xy 73.593308 94.187332)
+ (xy 73.978999 94.187668) (xy 74.33546 94.040382) (xy 74.608423 93.767895) (xy 74.756332 93.411692) (xy 74.756668 93.026001)
+ (xy 74.609382 92.66954) (xy 74.4136 92.473415) (xy 74.4136 92.334546) (xy 74.611073 92.137073) (xy 74.746902 91.93379)
+ (xy 74.746903 91.933789) (xy 74.7946 91.694) (xy 74.7946 105.7994) (xy 74.058223 105.7994) (xy 74.058223 100.202123)
+ (xy 73.862702 99.728925) (xy 73.500979 99.366571) (xy 73.068043 99.1868) (xy 73.499075 99.008702) (xy 73.861429 98.646979)
+ (xy 74.057776 98.174123) (xy 74.058223 97.662123) (xy 73.862702 97.188925) (xy 73.500979 96.826571) (xy 73.028123 96.630224)
+ (xy 72.516123 96.629777) (xy 72.042925 96.825298) (xy 71.680571 97.187021) (xy 71.484224 97.659877) (xy 71.483777 98.171877)
+ (xy 71.679298 98.645075) (xy 72.041021 99.007429) (xy 72.473956 99.187199) (xy 72.042925 99.365298) (xy 71.680571 99.727021)
+ (xy 71.484224 100.199877) (xy 71.483777 100.711877) (xy 71.679298 101.185075) (xy 72.041021 101.547429) (xy 72.513877 101.743776)
+ (xy 73.025877 101.744223) (xy 73.499075 101.548702) (xy 73.861429 101.186979) (xy 74.057776 100.714123) (xy 74.058223 100.202123)
+ (xy 74.058223 105.7994) (xy 73.994668 105.7994) (xy 73.994668 103.567001) (xy 73.847382 103.21054) (xy 73.574895 102.937577)
+ (xy 73.218692 102.789668) (xy 72.833001 102.789332) (xy 72.47654 102.936618) (xy 72.203577 103.209105) (xy 72.055668 103.565308)
+ (xy 72.055332 103.950999) (xy 72.202618 104.30746) (xy 72.475105 104.580423) (xy 72.831308 104.728332) (xy 73.216999 104.728668)
+ (xy 73.57346 104.581382) (xy 73.846423 104.308895) (xy 73.994332 103.952692) (xy 73.994668 103.567001) (xy 73.994668 105.7994)
+ (xy 68.914668 105.7994) (xy 68.914668 85.279001) (xy 68.767382 84.92254) (xy 68.494895 84.649577) (xy 68.138692 84.501668)
+ (xy 67.753001 84.501332) (xy 67.39654 84.648618) (xy 67.123577 84.921105) (xy 66.975668 85.277308) (xy 66.975332 85.662999)
+ (xy 67.122618 86.01946) (xy 67.395105 86.292423) (xy 67.751308 86.440332) (xy 68.136999 86.440668) (xy 68.49346 86.293382)
+ (xy 68.766423 86.020895) (xy 68.914332 85.664692) (xy 68.914668 85.279001) (xy 68.914668 105.7994) (xy 67.673378 105.7994)
+ (xy 67.478895 105.604577) (xy 67.122692 105.456668) (xy 66.737001 105.456332) (xy 66.38054 105.603618) (xy 66.107577 105.876105)
+ (xy 65.959668 106.232308) (xy 65.959332 106.617999) (xy 66.106618 106.97446) (xy 66.379105 107.247423) (xy 66.735308 107.395332)
+ (xy 67.120999 107.395668) (xy 67.47746 107.248382) (xy 67.673584 107.0526) (xy 86.758621 107.0526) (xy 86.953105 107.247423)
+ (xy 87.309308 107.395332) (xy 87.694999 107.395668) (xy 88.05146 107.248382) (xy 88.324423 106.975895) (xy 88.472332 106.619692)
+ (xy 88.472668 106.234001) (xy 88.472668 126.112337) (xy 88.323962 125.963372) (xy 87.874437 125.776713) (xy 87.387698 125.776288)
+ (xy 86.937848 125.962162) (xy 86.593372 126.306038) (xy 86.406713 126.755563) (xy 86.406288 127.242302) (xy 86.592162 127.692152)
+ (xy 86.936038 128.036628) (xy 87.385563 128.223287) (xy 87.872302 128.223712) (xy 88.322152 128.037838) (xy 88.666628 127.693962)
+ (xy 88.853287 127.244437) (xy 88.853712 126.757698) (xy 88.853712 135.647698) (xy 88.667838 135.197848) (xy 88.323962 134.853372)
+ (xy 87.874437 134.666713) (xy 87.387698 134.666288) (xy 86.937848 134.852162) (xy 86.593372 135.196038) (xy 86.406713 135.645563)
+ (xy 86.406288 136.132302) (xy 86.592162 136.582152) (xy 86.936038 136.926628) (xy 87.385563 137.113287) (xy 87.872302 137.113712)
+ (xy 88.322152 136.927838) (xy 88.666628 136.583962) (xy 88.853287 136.134437) (xy 88.853712 135.647698) (xy 88.853712 142.632698)
+ (xy 88.667838 142.182848) (xy 88.323962 141.838372) (xy 87.874437 141.651713) (xy 87.387698 141.651288) (xy 86.937848 141.837162)
+ (xy 86.593372 142.181038) (xy 86.406713 142.630563) (xy 86.406288 143.117302) (xy 86.592162 143.567152) (xy 86.936038 143.911628)
+ (xy 87.09074 143.975866) (xy 86.82754 144.084618) (xy 86.631415 144.2804) (xy 86.088378 144.2804) (xy 85.902739 144.094436)
+ (xy 86.085889 144.018574) (xy 86.233574 143.870889) (xy 86.3135 143.677929) (xy 86.3135 143.469071) (xy 86.3135 143.03125)
+ (xy 86.3135 142.71875) (xy 86.3135 142.280929) (xy 86.3135 142.072071) (xy 86.3135 136.692929) (xy 86.3135 136.484071)
+ (xy 86.3135 136.04625) (xy 86.3135 135.73375) (xy 86.3135 135.295929) (xy 86.3135 135.087071) (xy 86.3135 127.802929)
+ (xy 86.3135 127.594071) (xy 86.3135 127.15625) (xy 86.3135 126.84375) (xy 86.3135 126.405929) (xy 86.3135 126.197071)
+ (xy 86.233574 126.004111) (xy 86.085889 125.856426) (xy 85.892929 125.7765) (xy 85.24625 125.7765) (xy 85.115 125.90775)
+ (xy 85.115 126.975) (xy 86.18225 126.975) (xy 86.3135 126.84375) (xy 86.3135 127.15625) (xy 86.18225 127.025)
+ (xy 85.115 127.025) (xy 85.115 128.09225) (xy 85.24625 128.2235) (xy 85.892929 128.2235) (xy 86.085889 128.143574)
+ (xy 86.233574 127.995889) (xy 86.3135 127.802929) (xy 86.3135 135.087071) (xy 86.233574 134.894111) (xy 86.085889 134.746426)
+ (xy 85.892929 134.6665) (xy 85.24625 134.6665) (xy 85.115 134.79775) (xy 85.115 135.865) (xy 86.18225 135.865)
+ (xy 86.3135 135.73375) (xy 86.3135 136.04625) (xy 86.18225 135.915) (xy 85.115 135.915) (xy 85.115 136.98225)
+ (xy 85.24625 137.1135) (xy 85.892929 137.1135) (xy 86.085889 137.033574) (xy 86.233574 136.885889) (xy 86.3135 136.692929)
+ (xy 86.3135 142.072071) (xy 86.233574 141.879111) (xy 86.085889 141.731426) (xy 85.892929 141.6515) (xy 85.24625 141.6515)
+ (xy 85.115 141.78275) (xy 85.115 142.85) (xy 86.18225 142.85) (xy 86.3135 142.71875) (xy 86.3135 143.03125)
+ (xy 86.18225 142.9) (xy 85.115 142.9) (xy 85.115 142.92) (xy 85.065 142.92) (xy 85.065 142.9)
+ (xy 85.065 142.85) (xy 85.065 141.78275) (xy 85.065 136.98225) (xy 85.065 135.915) (xy 85.065 135.865)
+ (xy 85.065 134.79775) (xy 85.065 128.09225) (xy 85.065 127.025) (xy 85.065 126.975) (xy 85.065 125.90775)
+ (xy 84.93375 125.7765) (xy 84.535668 125.7765) (xy 84.535668 111.695001) (xy 84.388382 111.33854) (xy 84.115895 111.065577)
+ (xy 83.759692 110.917668) (xy 83.374001 110.917332) (xy 83.01754 111.064618) (xy 82.744577 111.337105) (xy 82.596668 111.693308)
+ (xy 82.596332 112.078999) (xy 82.743618 112.43546) (xy 83.016105 112.708423) (xy 83.372308 112.856332) (xy 83.757999 112.856668)
+ (xy 84.11446 112.709382) (xy 84.387423 112.436895) (xy 84.535332 112.080692) (xy 84.535668 111.695001) (xy 84.535668 125.7765)
+ (xy 84.287071 125.7765) (xy 84.094111 125.856426) (xy 83.946426 126.004111) (xy 83.8665 126.197071) (xy 83.8665 126.405929)
+ (xy 83.8665 126.84375) (xy 83.99775 126.975) (xy 85.065 126.975) (xy 85.065 127.025) (xy 83.99775 127.025)
+ (xy 83.8665 127.15625) (xy 83.8665 127.594071) (xy 83.8665 127.802929) (xy 83.946426 127.995889) (xy 84.094111 128.143574)
+ (xy 84.287071 128.2235) (xy 84.93375 128.2235) (xy 85.065 128.09225) (xy 85.065 134.79775) (xy 84.93375 134.6665)
+ (xy 84.287071 134.6665) (xy 84.094111 134.746426) (xy 83.946426 134.894111) (xy 83.8665 135.087071) (xy 83.8665 135.295929)
+ (xy 83.8665 135.73375) (xy 83.99775 135.865) (xy 85.065 135.865) (xy 85.065 135.915) (xy 83.99775 135.915)
+ (xy 83.8665 136.04625) (xy 83.8665 136.484071) (xy 83.8665 136.692929) (xy 83.946426 136.885889) (xy 84.094111 137.033574)
+ (xy 84.287071 137.1135) (xy 84.93375 137.1135) (xy 85.065 136.98225) (xy 85.065 141.78275) (xy 84.93375 141.6515)
+ (xy 84.287071 141.6515) (xy 84.094111 141.731426) (xy 83.946426 141.879111) (xy 83.8665 142.072071) (xy 83.8665 142.280929)
+ (xy 83.8665 142.71875) (xy 83.99775 142.85) (xy 85.065 142.85) (xy 85.065 142.9) (xy 83.99775 142.9)
+ (xy 83.8665 143.03125) (xy 83.8665 143.469071) (xy 83.8665 143.677929) (xy 83.946426 143.870889) (xy 84.094111 144.018574)
+ (xy 84.287071 144.0985) (xy 84.781633 144.0985) (xy 84.522577 144.357105) (xy 84.374668 144.713308) (xy 84.374332 145.098999)
+ (xy 84.521618 145.45546) (xy 84.794105 145.728423) (xy 85.150308 145.876332) (xy 85.535999 145.876668) (xy 85.89246 145.729382)
+ (xy 86.088584 145.5336) (xy 86.631621 145.5336) (xy 86.826105 145.728423) (xy 87.182308 145.876332) (xy 87.567999 145.876668)
+ (xy 87.92446 145.729382) (xy 88.197423 145.456895) (xy 88.345332 145.100692) (xy 88.345668 144.715001) (xy 88.198382 144.35854)
+ (xy 87.925895 144.085577) (xy 87.91502 144.081061) (xy 88.322152 143.912838) (xy 88.666628 143.568962) (xy 88.853287 143.119437)
+ (xy 88.853712 142.632698) (xy 88.853712 146.668) (xy 88.033571 146.668) (xy 87.840611 146.747926) (xy 87.692926 146.895611)
+ (xy 87.613 147.088571) (xy 87.613 147.297429) (xy 87.613 148.821429) (xy 87.692926 149.014389) (xy 87.840611 149.162074)
+ (xy 88.033571 149.242) (xy 88.242429 149.242) (xy 89.766429 149.242) (xy 89.959389 149.162074) (xy 90.107074 149.014389)
+ (xy 90.187 148.821429) (xy 90.187 148.612571) (xy 90.187 148.292703) (xy 90.348298 148.683075) (xy 90.710021 149.045429)
+ (xy 91.182877 149.241776) (xy 91.694877 149.242223) (xy 92.168075 149.046702) (xy 92.530429 148.684979) (xy 92.726776 148.212123)
+ (xy 92.727223 147.700123) (xy 92.727223 153.822511) (xy 80.852668 153.776839) (xy 80.852668 119.442001) (xy 80.705382 119.08554)
+ (xy 80.432895 118.812577) (xy 80.076692 118.664668) (xy 79.709668 118.664348) (xy 79.709668 110.171001) (xy 79.562382 109.81454)
+ (xy 79.289895 109.541577) (xy 78.933692 109.393668) (xy 78.548001 109.393332) (xy 78.19154 109.540618) (xy 77.918577 109.813105)
+ (xy 77.770668 110.169308) (xy 77.770332 110.554999) (xy 77.917618 110.91146) (xy 78.190105 111.184423) (xy 78.546308 111.332332)
+ (xy 78.931999 111.332668) (xy 79.28846 111.185382) (xy 79.561423 110.912895) (xy 79.709332 110.556692) (xy 79.709668 110.171001)
+ (xy 79.709668 118.664348) (xy 79.691001 118.664332) (xy 79.33454 118.811618) (xy 79.061577 119.084105) (xy 78.913668 119.440308)
+ (xy 78.913332 119.825999) (xy 79.060618 120.18246) (xy 79.333105 120.455423) (xy 79.689308 120.603332) (xy 80.074999 120.603668)
+ (xy 80.43146 120.456382) (xy 80.704423 120.183895) (xy 80.852332 119.827692) (xy 80.852668 119.442001) (xy 80.852668 153.776839)
+ (xy 79.455668 153.771466) (xy 79.455668 145.731001) (xy 79.455668 142.683001) (xy 79.455668 139.635001) (xy 79.308382 139.27854)
+ (xy 79.035895 139.005577) (xy 78.679692 138.857668) (xy 78.566668 138.857569) (xy 78.566668 127.189001) (xy 78.419382 126.83254)
+ (xy 78.146895 126.559577) (xy 77.790692 126.411668) (xy 77.405001 126.411332) (xy 77.04854 126.558618) (xy 76.775577 126.831105)
+ (xy 76.627668 127.187308) (xy 76.627332 127.572999) (xy 76.774618 127.92946) (xy 77.047105 128.202423) (xy 77.403308 128.350332)
+ (xy 77.788999 128.350668) (xy 78.14546 128.203382) (xy 78.418423 127.930895) (xy 78.566332 127.574692) (xy 78.566668 127.189001)
+ (xy 78.566668 138.857569) (xy 78.294001 138.857332) (xy 77.93754 139.004618) (xy 77.664577 139.277105) (xy 77.516668 139.633308)
+ (xy 77.516332 140.018999) (xy 77.663618 140.37546) (xy 77.936105 140.648423) (xy 78.292308 140.796332) (xy 78.677999 140.796668)
+ (xy 79.03446 140.649382) (xy 79.307423 140.376895) (xy 79.455332 140.020692) (xy 79.455668 139.635001) (xy 79.455668 142.683001)
+ (xy 79.308382 142.32654) (xy 79.035895 142.053577) (xy 78.679692 141.905668) (xy 78.294001 141.905332) (xy 77.93754 142.052618)
+ (xy 77.664577 142.325105) (xy 77.516668 142.681308) (xy 77.516332 143.066999) (xy 77.663618 143.42346) (xy 77.936105 143.696423)
+ (xy 78.292308 143.844332) (xy 78.677999 143.844668) (xy 79.03446 143.697382) (xy 79.307423 143.424895) (xy 79.455332 143.068692)
+ (xy 79.455668 142.683001) (xy 79.455668 145.731001) (xy 79.308382 145.37454) (xy 79.035895 145.101577) (xy 78.679692 144.953668)
+ (xy 78.294001 144.953332) (xy 77.93754 145.100618) (xy 77.664577 145.373105) (xy 77.516668 145.729308) (xy 77.516332 146.114999)
+ (xy 77.663618 146.47146) (xy 77.936105 146.744423) (xy 78.292308 146.892332) (xy 78.677999 146.892668) (xy 79.03446 146.745382)
+ (xy 79.307423 146.472895) (xy 79.455332 146.116692) (xy 79.455668 145.731001) (xy 79.455668 153.771466) (xy 76.534668 153.760231)
+ (xy 76.534668 119.569001) (xy 76.387382 119.21254) (xy 76.114895 118.939577) (xy 75.758692 118.791668) (xy 75.373001 118.791332)
+ (xy 75.01654 118.938618) (xy 74.743577 119.211105) (xy 74.595668 119.567308) (xy 74.595332 119.952999) (xy 74.742618 120.30946)
+ (xy 75.015105 120.582423) (xy 75.371308 120.730332) (xy 75.756999 120.730668) (xy 76.11346 120.583382) (xy 76.386423 120.310895)
+ (xy 76.534332 119.954692) (xy 76.534668 119.569001) (xy 76.534668 153.760231) (xy 74.058223 153.750706) (xy 74.058223 123.062123)
+ (xy 74.058223 117.982123) (xy 73.862702 117.508925) (xy 73.500979 117.146571) (xy 73.028123 116.950224) (xy 72.516123 116.949777)
+ (xy 72.343668 117.021033) (xy 72.343668 114.997001) (xy 72.196382 114.64054) (xy 71.923895 114.367577) (xy 71.567692 114.219668)
+ (xy 71.182001 114.219332) (xy 70.82554 114.366618) (xy 70.552577 114.639105) (xy 70.404668 114.995308) (xy 70.404332 115.380999)
+ (xy 70.551618 115.73746) (xy 70.824105 116.010423) (xy 71.180308 116.158332) (xy 71.565999 116.158668) (xy 71.92246 116.011382)
+ (xy 72.195423 115.738895) (xy 72.343332 115.382692) (xy 72.343668 114.997001) (xy 72.343668 117.021033) (xy 72.042925 117.145298)
+ (xy 71.680571 117.507021) (xy 71.484224 117.979877) (xy 71.483777 118.491877) (xy 71.679298 118.965075) (xy 72.041021 119.327429)
+ (xy 72.513877 119.523776) (xy 73.025877 119.524223) (xy 73.499075 119.328702) (xy 73.861429 118.966979) (xy 74.057776 118.494123)
+ (xy 74.058223 117.982123) (xy 74.058223 123.062123) (xy 73.862702 122.588925) (xy 73.500979 122.226571) (xy 73.028123 122.030224)
+ (xy 72.516123 122.029777) (xy 72.042925 122.225298) (xy 71.680571 122.587021) (xy 71.484224 123.059877) (xy 71.483777 123.571877)
+ (xy 71.679298 124.045075) (xy 72.041021 124.407429) (xy 72.513877 124.603776) (xy 73.025877 124.604223) (xy 73.499075 124.408702)
+ (xy 73.861429 124.046979) (xy 74.057776 123.574123) (xy 74.058223 123.062123) (xy 74.058223 153.750706) (xy 71.772223 153.741914)
+ (xy 71.772223 141.096123) (xy 71.772223 138.429123) (xy 71.772223 135.635123) (xy 71.772223 132.841123) (xy 71.576702 132.367925)
+ (xy 71.214979 132.005571) (xy 70.742123 131.809224) (xy 70.375421 131.808903) (xy 70.375421 125.375764) (xy 70.006255 124.482314)
+ (xy 69.323282 123.798147) (xy 68.430478 123.427422) (xy 67.463764 123.426579) (xy 66.570314 123.795745) (xy 65.886147 124.478718)
+ (xy 65.515422 125.371522) (xy 65.514579 126.338236) (xy 65.883745 127.231686) (xy 66.566718 127.915853) (xy 67.459522 128.286578)
+ (xy 68.426236 128.287421) (xy 69.319686 127.918255) (xy 70.003853 127.235282) (xy 70.374578 126.342478) (xy 70.375421 125.375764)
+ (xy 70.375421 131.808903) (xy 70.230123 131.808777) (xy 69.756925 132.004298) (xy 69.394571 132.366021) (xy 69.198224 132.838877)
+ (xy 69.197777 133.350877) (xy 69.393298 133.824075) (xy 69.755021 134.186429) (xy 70.227877 134.382776) (xy 70.739877 134.383223)
+ (xy 71.213075 134.187702) (xy 71.575429 133.825979) (xy 71.771776 133.353123) (xy 71.772223 132.841123) (xy 71.772223 135.635123)
+ (xy 71.576702 135.161925) (xy 71.214979 134.799571) (xy 70.742123 134.603224) (xy 70.230123 134.602777) (xy 69.756925 134.798298)
+ (xy 69.394571 135.160021) (xy 69.232223 135.550998) (xy 69.232223 134.238123) (xy 69.036702 133.764925) (xy 68.674979 133.402571)
+ (xy 68.202123 133.206224) (xy 67.690123 133.205777) (xy 67.216925 133.401298) (xy 66.854571 133.763021) (xy 66.658224 134.235877)
+ (xy 66.657777 134.747877) (xy 66.853298 135.221075) (xy 67.215021 135.583429) (xy 67.687877 135.779776) (xy 68.199877 135.780223)
+ (xy 68.673075 135.584702) (xy 69.035429 135.222979) (xy 69.231776 134.750123) (xy 69.232223 134.238123) (xy 69.232223 135.550998)
+ (xy 69.198224 135.632877) (xy 69.197777 136.144877) (xy 69.393298 136.618075) (xy 69.755021 136.980429) (xy 70.227877 137.176776)
+ (xy 70.739877 137.177223) (xy 71.213075 136.981702) (xy 71.575429 136.619979) (xy 71.771776 136.147123) (xy 71.772223 135.635123)
+ (xy 71.772223 138.429123) (xy 71.576702 137.955925) (xy 71.214979 137.593571) (xy 70.742123 137.397224) (xy 70.230123 137.396777)
+ (xy 69.756925 137.592298) (xy 69.394571 137.954021) (xy 69.232223 138.344998) (xy 69.232223 137.032123) (xy 69.036702 136.558925)
+ (xy 68.674979 136.196571) (xy 68.202123 136.000224) (xy 67.690123 135.999777) (xy 67.216925 136.195298) (xy 66.854571 136.557021)
+ (xy 66.658224 137.029877) (xy 66.657777 137.541877) (xy 66.853298 138.015075) (xy 67.215021 138.377429) (xy 67.687877 138.573776)
+ (xy 68.199877 138.574223) (xy 68.673075 138.378702) (xy 69.035429 138.016979) (xy 69.231776 137.544123) (xy 69.232223 137.032123)
+ (xy 69.232223 138.344998) (xy 69.198224 138.426877) (xy 69.197777 138.938877) (xy 69.393298 139.412075) (xy 69.755021 139.774429)
+ (xy 70.227877 139.970776) (xy 70.739877 139.971223) (xy 71.213075 139.775702) (xy 71.575429 139.413979) (xy 71.771776 138.941123)
+ (xy 71.772223 138.429123) (xy 71.772223 141.096123) (xy 71.576702 140.622925) (xy 71.214979 140.260571) (xy 70.742123 140.064224)
+ (xy 70.230123 140.063777) (xy 69.756925 140.259298) (xy 69.394571 140.621021) (xy 69.232223 141.011998) (xy 69.232223 139.699123)
+ (xy 69.036702 139.225925) (xy 68.674979 138.863571) (xy 68.202123 138.667224) (xy 67.690123 138.666777) (xy 67.216925 138.862298)
+ (xy 66.854571 139.224021) (xy 66.658224 139.696877) (xy 66.657777 140.208877) (xy 66.853298 140.682075) (xy 67.215021 141.044429)
+ (xy 67.687877 141.240776) (xy 68.199877 141.241223) (xy 68.673075 141.045702) (xy 69.035429 140.683979) (xy 69.231776 140.211123)
+ (xy 69.232223 139.699123) (xy 69.232223 141.011998) (xy 69.198224 141.093877) (xy 69.197777 141.605877) (xy 69.393298 142.079075)
+ (xy 69.755021 142.441429) (xy 70.227877 142.637776) (xy 70.739877 142.638223) (xy 71.213075 142.442702) (xy 71.575429 142.080979)
+ (xy 71.771776 141.608123) (xy 71.772223 141.096123) (xy 71.772223 153.741914) (xy 71.772 153.741913) (xy 71.772 145.011429)
+ (xy 71.772 144.802571) (xy 71.772 143.278571) (xy 71.692074 143.085611) (xy 71.544389 142.937926) (xy 71.351429 142.858)
+ (xy 71.142571 142.858) (xy 69.618571 142.858) (xy 69.425611 142.937926) (xy 69.277926 143.085611) (xy 69.232223 143.195948)
+ (xy 69.232223 142.493123) (xy 69.036702 142.019925) (xy 68.674979 141.657571) (xy 68.202123 141.461224) (xy 67.690123 141.460777)
+ (xy 67.216925 141.656298) (xy 66.854571 142.018021) (xy 66.658224 142.490877) (xy 66.657777 143.002877) (xy 66.853298 143.476075)
+ (xy 67.215021 143.838429) (xy 67.687877 144.034776) (xy 68.199877 144.035223) (xy 68.673075 143.839702) (xy 69.035429 143.477979)
+ (xy 69.231776 143.005123) (xy 69.232223 142.493123) (xy 69.232223 143.195948) (xy 69.198 143.278571) (xy 69.198 143.487429)
+ (xy 69.198 145.011429) (xy 69.277926 145.204389) (xy 69.425611 145.352074) (xy 69.618571 145.432) (xy 69.827429 145.432)
+ (xy 71.351429 145.432) (xy 71.544389 145.352074) (xy 71.692074 145.204389) (xy 71.772 145.011429) (xy 71.772 153.741913)
+ (xy 70.375421 153.736542) (xy 70.375421 150.775764) (xy 70.006255 149.882314) (xy 69.323282 149.198147) (xy 68.430478 148.827422)
+ (xy 67.463764 148.826579) (xy 66.570314 149.195745) (xy 65.886147 149.878718) (xy 65.515422 150.771522) (xy 65.514579 151.738236)
+ (xy 65.883745 152.631686) (xy 66.566718 153.315853) (xy 67.459522 153.686578) (xy 68.426236 153.687421) (xy 69.319686 153.318255)
+ (xy 70.003853 152.635282) (xy 70.374578 151.742478) (xy 70.375421 150.775764) (xy 70.375421 153.736542) (xy 63.644355 153.710653)
+ (xy 63.644355 118.339217) (xy 63.644355 113.259217) (xy 63.644355 106.909217) (xy 63.644355 101.829217) (xy 63.644355 95.479217)
+ (xy 63.644355 90.399217) (xy 63.644355 84.049217) (xy 63.644355 78.969217) (xy 63.33307 78.215851) (xy 62.757181 77.638955)
+ (xy 62.004359 77.326357) (xy 61.189217 77.325645) (xy 60.435851 77.63693) (xy 59.858955 78.212819) (xy 59.546357 78.965641)
+ (xy 59.545645 79.780783) (xy 59.85693 80.534149) (xy 60.432819 81.111045) (xy 61.185641 81.423643) (xy 62.000783 81.424355)
+ (xy 62.754149 81.11307) (xy 63.331045 80.537181) (xy 63.643643 79.784359) (xy 63.644355 78.969217) (xy 63.644355 84.049217)
+ (xy 63.33307 83.295851) (xy 62.757181 82.718955) (xy 62.004359 82.406357) (xy 61.189217 82.405645) (xy 60.469245 82.703131)
+ (xy 60.469245 81.634972) (xy 60.25443 81.11508) (xy 59.857013 80.716968) (xy 59.337496 80.501246) (xy 58.774972 80.500755)
+ (xy 58.564355 80.58778) (xy 58.564355 78.969217) (xy 58.25307 78.215851) (xy 57.677181 77.638955) (xy 56.924359 77.326357)
+ (xy 56.109217 77.325645) (xy 55.355851 77.63693) (xy 54.778955 78.212819) (xy 54.466357 78.965641) (xy 54.465645 79.780783)
+ (xy 54.77693 80.534149) (xy 55.352819 81.111045) (xy 56.105641 81.423643) (xy 56.920783 81.424355) (xy 57.674149 81.11307)
+ (xy 58.251045 80.537181) (xy 58.563643 79.784359) (xy 58.564355 78.969217) (xy 58.564355 80.58778) (xy 58.25508 80.71557)
+ (xy 57.856968 81.112987) (xy 57.641246 81.632504) (xy 57.640755 82.195028) (xy 57.85557 82.71492) (xy 58.252987 83.113032)
+ (xy 58.772504 83.328754) (xy 59.335028 83.329245) (xy 59.85492 83.11443) (xy 60.253032 82.717013) (xy 60.468754 82.197496)
+ (xy 60.469245 81.634972) (xy 60.469245 82.703131) (xy 60.435851 82.71693) (xy 59.858955 83.292819) (xy 59.546357 84.045641)
+ (xy 59.545645 84.860783) (xy 59.85693 85.614149) (xy 60.432819 86.191045) (xy 61.185641 86.503643) (xy 62.000783 86.504355)
+ (xy 62.754149 86.19307) (xy 63.331045 85.617181) (xy 63.643643 84.864359) (xy 63.644355 84.049217) (xy 63.644355 90.399217)
+ (xy 63.33307 89.645851) (xy 62.757181 89.068955) (xy 62.004359 88.756357) (xy 61.189217 88.755645) (xy 60.435851 89.06693)
+ (xy 59.858955 89.642819) (xy 59.546357 90.395641) (xy 59.545645 91.210783) (xy 59.85693 91.964149) (xy 60.432819 92.541045)
+ (xy 61.185641 92.853643) (xy 62.000783 92.854355) (xy 62.754149 92.54307) (xy 63.331045 91.967181) (xy 63.643643 91.214359)
+ (xy 63.644355 90.399217) (xy 63.644355 95.479217) (xy 63.33307 94.725851) (xy 62.757181 94.148955) (xy 62.004359 93.836357)
+ (xy 61.189217 93.835645) (xy 60.469245 94.133131) (xy 60.469245 93.064972) (xy 60.25443 92.54508) (xy 59.857013 92.146968)
+ (xy 59.337496 91.931246) (xy 58.774972 91.930755) (xy 58.564355 92.01778) (xy 58.564355 90.399217) (xy 58.564355 84.049217)
+ (xy 58.25307 83.295851) (xy 57.677181 82.718955) (xy 56.924359 82.406357) (xy 56.109217 82.405645) (xy 55.355851 82.71693)
+ (xy 54.778955 83.292819) (xy 54.466357 84.045641) (xy 54.465645 84.860783) (xy 54.77693 85.614149) (xy 55.352819 86.191045)
+ (xy 56.105641 86.503643) (xy 56.920783 86.504355) (xy 57.674149 86.19307) (xy 58.251045 85.617181) (xy 58.563643 84.864359)
+ (xy 58.564355 84.049217) (xy 58.564355 90.399217) (xy 58.25307 89.645851) (xy 57.677181 89.068955) (xy 56.924359 88.756357)
+ (xy 56.109217 88.755645) (xy 55.355851 89.06693) (xy 54.778955 89.642819) (xy 54.466357 90.395641) (xy 54.465645 91.210783)
+ (xy 54.77693 91.964149) (xy 55.352819 92.541045) (xy 56.105641 92.853643) (xy 56.920783 92.854355) (xy 57.674149 92.54307)
+ (xy 58.251045 91.967181) (xy 58.563643 91.214359) (xy 58.564355 90.399217) (xy 58.564355 92.01778) (xy 58.25508 92.14557)
+ (xy 57.856968 92.542987) (xy 57.641246 93.062504) (xy 57.640755 93.625028) (xy 57.85557 94.14492) (xy 58.252987 94.543032)
+ (xy 58.772504 94.758754) (xy 59.335028 94.759245) (xy 59.85492 94.54443) (xy 60.253032 94.147013) (xy 60.468754 93.627496)
+ (xy 60.469245 93.064972) (xy 60.469245 94.133131) (xy 60.435851 94.14693) (xy 59.858955 94.722819) (xy 59.546357 95.475641)
+ (xy 59.545645 96.290783) (xy 59.85693 97.044149) (xy 60.432819 97.621045) (xy 61.185641 97.933643) (xy 62.000783 97.934355)
+ (xy 62.754149 97.62307) (xy 63.331045 97.047181) (xy 63.643643 96.294359) (xy 63.644355 95.479217) (xy 63.644355 101.829217)
+ (xy 63.33307 101.075851) (xy 62.757181 100.498955) (xy 62.004359 100.186357) (xy 61.189217 100.185645) (xy 60.435851 100.49693)
+ (xy 59.858955 101.072819) (xy 59.546357 101.825641) (xy 59.545645 102.640783) (xy 59.85693 103.394149) (xy 60.432819 103.971045)
+ (xy 61.185641 104.283643) (xy 62.000783 104.284355) (xy 62.754149 103.97307) (xy 63.331045 103.397181) (xy 63.643643 102.644359)
+ (xy 63.644355 101.829217) (xy 63.644355 106.909217) (xy 63.33307 106.155851) (xy 62.757181 105.578955) (xy 62.004359 105.266357)
+ (xy 61.189217 105.265645) (xy 60.469245 105.563131) (xy 60.469245 104.494972) (xy 60.25443 103.97508) (xy 59.857013 103.576968)
+ (xy 59.337496 103.361246) (xy 58.774972 103.360755) (xy 58.564355 103.44778) (xy 58.564355 101.829217) (xy 58.564355 95.479217)
+ (xy 58.25307 94.725851) (xy 57.677181 94.148955) (xy 56.924359 93.836357) (xy 56.109217 93.835645) (xy 55.355851 94.14693)
+ (xy 54.778955 94.722819) (xy 54.466357 95.475641) (xy 54.465645 96.290783) (xy 54.77693 97.044149) (xy 55.352819 97.621045)
+ (xy 56.105641 97.933643) (xy 56.920783 97.934355) (xy 57.674149 97.62307) (xy 58.251045 97.047181) (xy 58.563643 96.294359)
+ (xy 58.564355 95.479217) (xy 58.564355 101.829217) (xy 58.25307 101.075851) (xy 57.677181 100.498955) (xy 56.924359 100.186357)
+ (xy 56.109217 100.185645) (xy 55.355851 100.49693) (xy 54.778955 101.072819) (xy 54.466357 101.825641) (xy 54.465645 102.640783)
+ (xy 54.77693 103.394149) (xy 55.352819 103.971045) (xy 56.105641 104.283643) (xy 56.920783 104.284355) (xy 57.674149 103.97307)
+ (xy 58.251045 103.397181) (xy 58.563643 102.644359) (xy 58.564355 101.829217) (xy 58.564355 103.44778) (xy 58.25508 103.57557)
+ (xy 57.856968 103.972987) (xy 57.641246 104.492504) (xy 57.640755 105.055028) (xy 57.85557 105.57492) (xy 58.252987 105.973032)
+ (xy 58.772504 106.188754) (xy 59.335028 106.189245) (xy 59.85492 105.97443) (xy 60.253032 105.577013) (xy 60.468754 105.057496)
+ (xy 60.469245 104.494972) (xy 60.469245 105.563131) (xy 60.435851 105.57693) (xy 59.858955 106.152819) (xy 59.546357 106.905641)
+ (xy 59.545645 107.720783) (xy 59.85693 108.474149) (xy 60.432819 109.051045) (xy 61.185641 109.363643) (xy 62.000783 109.364355)
+ (xy 62.754149 109.05307) (xy 63.331045 108.477181) (xy 63.643643 107.724359) (xy 63.644355 106.909217) (xy 63.644355 113.259217)
+ (xy 63.33307 112.505851) (xy 62.757181 111.928955) (xy 62.004359 111.616357) (xy 61.189217 111.615645) (xy 60.435851 111.92693)
+ (xy 59.858955 112.502819) (xy 59.546357 113.255641) (xy 59.545645 114.070783) (xy 59.85693 114.824149) (xy 60.432819 115.401045)
+ (xy 61.185641 115.713643) (xy 62.000783 115.714355) (xy 62.754149 115.40307) (xy 63.331045 114.827181) (xy 63.643643 114.074359)
+ (xy 63.644355 113.259217) (xy 63.644355 118.339217) (xy 63.33307 117.585851) (xy 62.757181 117.008955) (xy 62.004359 116.696357)
+ (xy 61.189217 116.695645) (xy 60.469245 116.993131) (xy 60.469245 115.924972) (xy 60.25443 115.40508) (xy 59.857013 115.006968)
+ (xy 59.337496 114.791246) (xy 58.774972 114.790755) (xy 58.564355 114.87778) (xy 58.564355 113.259217) (xy 58.564355 106.909217)
+ (xy 58.25307 106.155851) (xy 57.677181 105.578955) (xy 56.924359 105.266357) (xy 56.109217 105.265645) (xy 55.355851 105.57693)
+ (xy 54.778955 106.152819) (xy 54.466357 106.905641) (xy 54.465645 107.720783) (xy 54.77693 108.474149) (xy 55.352819 109.051045)
+ (xy 56.105641 109.363643) (xy 56.920783 109.364355) (xy 57.674149 109.05307) (xy 58.251045 108.477181) (xy 58.563643 107.724359)
+ (xy 58.564355 106.909217) (xy 58.564355 113.259217) (xy 58.25307 112.505851) (xy 57.677181 111.928955) (xy 56.924359 111.616357)
+ (xy 56.109217 111.615645) (xy 55.355851 111.92693) (xy 54.778955 112.502819) (xy 54.466357 113.255641) (xy 54.465645 114.070783)
+ (xy 54.77693 114.824149) (xy 55.352819 115.401045) (xy 56.105641 115.713643) (xy 56.920783 115.714355) (xy 57.674149 115.40307)
+ (xy 58.251045 114.827181) (xy 58.563643 114.074359) (xy 58.564355 113.259217) (xy 58.564355 114.87778) (xy 58.25508 115.00557)
+ (xy 57.856968 115.402987) (xy 57.641246 115.922504) (xy 57.640755 116.485028) (xy 57.85557 117.00492) (xy 58.252987 117.403032)
+ (xy 58.772504 117.618754) (xy 59.335028 117.619245) (xy 59.85492 117.40443) (xy 60.253032 117.007013) (xy 60.468754 116.487496)
+ (xy 60.469245 115.924972) (xy 60.469245 116.993131) (xy 60.435851 117.00693) (xy 59.858955 117.582819) (xy 59.546357 118.335641)
+ (xy 59.545645 119.150783) (xy 59.85693 119.904149) (xy 60.432819 120.481045) (xy 61.185641 120.793643) (xy 62.000783 120.794355)
+ (xy 62.754149 120.48307) (xy 63.331045 119.907181) (xy 63.643643 119.154359) (xy 63.644355 118.339217) (xy 63.644355 153.710653)
+ (xy 58.564355 153.691114) (xy 58.564355 118.339217) (xy 58.25307 117.585851) (xy 57.677181 117.008955) (xy 56.924359 116.696357)
+ (xy 56.109217 116.695645) (xy 55.355851 117.00693) (xy 54.778955 117.582819) (xy 54.466357 118.335641) (xy 54.465645 119.150783)
+ (xy 54.77693 119.904149) (xy 55.352819 120.481045) (xy 56.105641 120.793643) (xy 56.920783 120.794355) (xy 57.674149 120.48307)
+ (xy 58.251045 119.907181) (xy 58.563643 119.154359) (xy 58.564355 118.339217) (xy 58.564355 153.691114) (xy 54.2206 153.674408)
+ (xy 54.2206 76.198) (xy 79.881 76.198) (xy 79.881 74.893135) (xy 81.252779 73.531) (xy 91.438 73.531)
+ (xy 91.438 57.1416) (xy 99.706254 57.1416) (xy 99.524282 57.323571) (xy 99.249001 57.323332) (xy 98.89254 57.470618)
+ (xy 98.619577 57.743105) (xy 98.471668 58.099308) (xy 98.471332 58.484999) (xy 98.618618 58.84146) (xy 98.891105 59.114423)
+ (xy 99.247308 59.262332) (xy 99.632999 59.262668) (xy 99.98946 59.115382) (xy 100.10372 59.00132) (xy 100.142618 59.09546)
+ (xy 100.415105 59.368423) (xy 100.771308 59.516332) (xy 101.156999 59.516668) (xy 101.51346 59.369382) (xy 101.786423 59.096895)
+ (xy 101.934332 58.740692) (xy 101.934668 58.355001) (xy 101.787382 57.99854) (xy 101.565829 57.7766) (xy 106.727668 57.7766)
+ (xy 106.617927 57.849927) (xy 106.509282 57.958571) (xy 106.234001 57.958332) (xy 105.87754 58.105618) (xy 105.727477 58.255418)
+ (xy 105.578895 58.106577) (xy 105.222692 57.958668) (xy 104.837001 57.958332) (xy 104.48054 58.105618) (xy 104.207577 58.378105)
+ (xy 104.059668 58.734308) (xy 104.059332 59.119999) (xy 104.206618 59.47646) (xy 104.479105 59.749423) (xy 104.835308 59.897332)
+ (xy 105.220999 59.897668) (xy 105.57746 59.750382) (xy 105.727522 59.600581) (xy 105.876105 59.749423) (xy 106.232308 59.897332)
+ (xy 106.617999 59.897668) (xy 106.97446 59.750382) (xy 107.247423 59.477895) (xy 107.395332 59.121692) (xy 107.395508 58.9196)
+ (xy 108.865201 58.9196) (xy 108.67408 58.99857) (xy 108.275968 59.395987) (xy 108.060246 59.915504) (xy 108.059755 60.478028)
+ (xy 108.27457 60.99792) (xy 108.671987 61.396032) (xy 109.191504 61.611754) (xy 109.754028 61.612245) (xy 110.27392 61.39743)
+ (xy 110.672032 61.000013) (xy 110.887754 60.480496) (xy 110.888245 59.917972) (xy 110.67343 59.39808) (xy 110.276013 58.999968)
+ (xy 110.082465 58.9196) (xy 113.945201 58.9196) (xy 113.75408 58.99857) (xy 113.355968 59.395987) (xy 113.140246 59.915504)
+ (xy 113.139755 60.478028) (xy 113.35457 60.99792) (xy 113.751987 61.396032) (xy 114.271504 61.611754) (xy 114.834028 61.612245)
+ (xy 115.35392 61.39743) (xy 115.752032 61.000013) (xy 115.967754 60.480496) (xy 115.968245 59.917972) (xy 115.75343 59.39808)
+ (xy 115.356013 58.999968) (xy 115.162465 58.9196) (xy 118.2454 58.9196) (xy 118.2454 59.944) (xy 118.293097 60.18379)
+ (xy 118.428927 60.387073) (xy 118.682927 60.641073) (xy 118.88621 60.776902) (xy 118.886211 60.776903) (xy 119.126 60.8246)
+ (xy 121.031 60.8246) (xy 121.270789 60.776903) (xy 121.27079 60.776903) (xy 121.474073 60.641073) (xy 122.560546 59.5546)
+ (xy 126.399467 59.5546) (xy 126.178577 59.775105) (xy 126.030668 60.131308) (xy 126.030332 60.516999) (xy 126.177618 60.87346)
+ (xy 126.450105 61.146423) (xy 126.806308 61.294332) (xy 127.191999 61.294668) (xy 127.54846 61.147382) (xy 127.821423 60.874895)
+ (xy 127.969332 60.518692) (xy 127.969668 60.133001) (xy 127.822382 59.77654) (xy 127.600829 59.5546) (xy 148.330454 59.5546)
+ (xy 149.289927 60.514073) (xy 149.49321 60.649903) (xy 149.493211 60.649903) (xy 149.733 60.6976) (xy 159.292245 60.6976)
+ (xy 159.198577 60.791105) (xy 159.050668 61.147308) (xy 159.050332 61.532999) (xy 159.197618 61.88946) (xy 159.41917 62.1114)
+ (xy 156.972 62.1114) (xy 156.732211 62.159097) (xy 156.528927 62.294927) (xy 156.274927 62.548927) (xy 156.139097 62.75221)
+ (xy 156.0914 62.992) (xy 156.0914 67.691) (xy 156.094287 67.705517) (xy 156.023577 67.776105) (xy 155.875668 68.132308)
+ (xy 155.875332 68.517999) (xy 156.022618 68.87446) (xy 156.295105 69.147423) (xy 156.651308 69.295332) (xy 157.036999 69.295668)
+ (xy 157.39346 69.148382) (xy 157.4163 69.12558) (xy 157.438105 69.147423) (xy 157.794308 69.295332) (xy 158.179999 69.295668)
+ (xy 158.53646 69.148382) (xy 158.809423 68.875895) (xy 158.957332 68.519692) (xy 158.957668 68.134001) (xy 158.810382 67.77754)
+ (xy 158.537895 67.504577) (xy 158.181692 67.356668) (xy 157.796001 67.356332) (xy 157.43954 67.503618) (xy 157.416699 67.526419)
+ (xy 157.394895 67.504577) (xy 157.366949 67.492972) (xy 157.366948 67.492972) (xy 157.3446 67.459525) (xy 157.3446 63.3646)
+ (xy 163.703 63.3646) (xy 163.942789 63.316903) (xy 163.94279 63.316903) (xy 164.146073 63.181073) (xy 167.264546 60.0626)
+ (xy 246.922245 60.0626) (xy 246.828577 60.156105) (xy 246.680668 60.512308) (xy 246.680332 60.897999) (xy 246.827618 61.25446)
+ (xy 247.100105 61.527423) (xy 247.456308 61.675332) (xy 247.841999 61.675668) (xy 248.19846 61.528382) (xy 248.471423 61.255895)
+ (xy 248.619332 60.899692) (xy 248.619668 60.514001) (xy 248.472382 60.15754) (xy 248.377607 60.0626) (xy 259.749467 60.0626)
+ (xy 259.528577 60.283105) (xy 259.380668 60.639308) (xy 259.380332 61.024999) (xy 259.527618 61.38146) (xy 259.800105 61.654423)
+ (xy 260.103539 61.78042) (xy 259.729694 61.93489) (xy 259.420974 62.243072) (xy 259.25369 62.645936) (xy 259.25331 63.082151)
+ (xy 259.272006 63.1274) (xy 258.888315 63.1274) (xy 258.90631 63.084064) (xy 258.90669 62.647849) (xy 258.74011 62.244694)
+ (xy 258.431928 61.935974) (xy 258.029064 61.76869) (xy 257.592849 61.76831) (xy 257.189694 61.93489) (xy 257.033228 62.091082)
+ (xy 256.475073 61.532927) (xy 256.27179 61.397097) (xy 256.032 61.3494) (xy 254.508 61.3494) (xy 254.268211 61.397097)
+ (xy 254.064927 61.532927) (xy 253.810927 61.786927) (xy 253.675097 61.99021) (xy 253.630397 62.214929) (xy 253.351928 61.935974)
+ (xy 252.949064 61.76869) (xy 252.512849 61.76831) (xy 252.109694 61.93489) (xy 251.800974 62.243072) (xy 251.63369 62.645936)
+ (xy 251.63331 63.082151) (xy 251.79989 63.485306) (xy 252.108072 63.794026) (xy 252.510936 63.96131) (xy 252.909801 63.961657)
+ (xy 253.050618 64.30246) (xy 253.301083 64.553363) (xy 253.070974 64.783072) (xy 252.90369 65.185936) (xy 252.90331 65.622151)
+ (xy 253.06989 66.025306) (xy 253.378072 66.334026) (xy 253.780936 66.50131) (xy 254.217151 66.50169) (xy 254.620306 66.33511)
+ (xy 254.929026 66.026928) (xy 255.09631 65.624064) (xy 255.09669 65.187849) (xy 254.93011 64.784694) (xy 254.621928 64.475974)
+ (xy 254.551386 64.446682) (xy 254.694423 64.303895) (xy 254.842332 63.947692) (xy 254.842395 63.874716) (xy 255.050936 63.96131)
+ (xy 255.443539 63.961652) (xy 255.443332 64.199999) (xy 255.590618 64.55646) (xy 255.714084 64.680141) (xy 255.610974 64.783072)
+ (xy 255.44369 65.185936) (xy 255.44331 65.622151) (xy 255.60989 66.025306) (xy 255.918072 66.334026) (xy 256.320936 66.50131)
+ (xy 256.757151 66.50169) (xy 257.160306 66.33511) (xy 257.469026 66.026928) (xy 257.63631 65.624064) (xy 257.63669 65.187849)
+ (xy 257.47011 64.784694) (xy 257.23715 64.551327) (xy 257.308042 64.3806) (xy 258.687893 64.3806) (xy 258.459694 64.47489)
+ (xy 258.150974 64.783072) (xy 257.98369 65.185936) (xy 257.98331 65.622151) (xy 258.14989 66.025306) (xy 258.458072 66.334026)
+ (xy 258.860936 66.50131) (xy 259.297151 66.50169) (xy 259.700306 66.33511) (xy 260.009026 66.026928) (xy 260.17631 65.624064)
+ (xy 260.17669 65.187849) (xy 260.01011 64.784694) (xy 259.701928 64.475974) (xy 259.472242 64.3806) (xy 260.9934 64.3806)
+ (xy 260.9934 64.481173) (xy 260.690974 64.783072) (xy 260.52369 65.185936) (xy 260.52331 65.622151) (xy 260.68989 66.025306)
+ (xy 260.998072 66.334026) (xy 261.400936 66.50131) (xy 261.837151 66.50169) (xy 262.240306 66.33511) (xy 262.549026 66.026928)
+ (xy 262.71631 65.624064) (xy 262.71669 65.187849) (xy 262.55011 64.784694) (xy 262.2466 64.480654) (xy 262.2466 64.008)
+ (xy 262.198903 63.768211) (xy 262.198902 63.76821) (xy 262.11105 63.63673) (xy 262.268072 63.794026) (xy 262.670936 63.96131)
+ (xy 263.107151 63.96169) (xy 263.510306 63.79511) (xy 263.819026 63.486928) (xy 263.98631 63.084064) (xy 263.98669 62.647849)
+ (xy 263.82011 62.244694) (xy 263.511928 61.935974) (xy 263.109064 61.76869) (xy 262.672849 61.76831) (xy 262.269694 61.93489)
+ (xy 261.960974 62.243072) (xy 261.79369 62.645936) (xy 261.79331 63.082151) (xy 261.943299 63.445153) (xy 261.809073 63.310927)
+ (xy 261.60579 63.175097) (xy 261.423561 63.138849) (xy 261.44631 63.084064) (xy 261.44669 62.647849) (xy 261.28011 62.244694)
+ (xy 260.971928 61.935974) (xy 260.59658 61.780115) (xy 260.89846 61.655382) (xy 261.171423 61.382895) (xy 261.319332 61.026692)
+ (xy 261.319668 60.641001) (xy 261.172382 60.28454) (xy 260.950829 60.0626) (xy 267.710453 60.0626) (xy 268.270571 60.622717)
+ (xy 268.270332 60.897999) (xy 268.417618 61.25446) (xy 268.690105 61.527423) (xy 269.046308 61.675332) (xy 269.431999 61.675668)
+ (xy 269.78846 61.528382) (xy 270.061423 61.255895) (xy 270.209332 60.899692) (xy 270.209668 60.514001) (xy 270.062382 60.15754)
+ (xy 269.789895 59.884577) (xy 269.433692 59.736668) (xy 269.156572 59.736426) (xy 268.847746 59.4276) (xy 293.491454 59.4276)
+ (xy 294.577927 60.514073) (xy 294.78121 60.649903) (xy 294.781211 60.649903) (xy 295.021 60.6976) (xy 303.911 60.6976)
+ (xy 304.150789 60.649903) (xy 304.15079 60.649903) (xy 304.354073 60.514073) (xy 305.989653 58.878492) (xy 305.989332 59.246999)
+ (xy 306.136618 59.60346) (xy 306.409105 59.876423) (xy 306.765308 60.024332) (xy 307.150999 60.024668) (xy 307.338709 59.947107)
+ (xy 307.406618 60.11146) (xy 307.679105 60.384423) (xy 308.035308 60.532332) (xy 308.420999 60.532668) (xy 308.77746 60.385382)
+ (xy 309.050423 60.112895) (xy 309.198332 59.756692) (xy 309.198668 59.371001) (xy 309.051382 59.01454) (xy 308.778895 58.741577)
+ (xy 308.422692 58.593668) (xy 308.037001 58.593332) (xy 307.84929 58.670892) (xy 307.781382 58.50654) (xy 307.686607 58.4116)
+ (xy 308.229 58.4116) (xy 308.468789 58.363903) (xy 308.46879 58.363903) (xy 308.672073 58.228073) (xy 308.742546 58.1576)
+ (xy 309.965376 58.1576) (xy 309.799713 58.556563) (xy 309.799288 59.043302) (xy 309.985162 59.493152) (xy 310.308708 59.817262)
+ (xy 309.986372 60.139038) (xy 309.799713 60.588563) (xy 309.79942 60.923985) (xy 309.692692 60.879668) (xy 309.307001 60.879332)
+ (xy 308.95054 61.026618) (xy 308.677577 61.299105) (xy 308.529668 61.655308) (xy 308.529332 62.040999) (xy 308.676618 62.39746)
+ (xy 308.949105 62.670423) (xy 309.305308 62.818332) (xy 309.690999 62.818668) (xy 310.04746 62.671382) (xy 310.320423 62.398895)
+ (xy 310.468332 62.042692) (xy 310.468432 61.927509) (xy 310.778563 62.056287) (xy 311.265302 62.056712) (xy 311.577652 61.927651)
+ (xy 311.577332 62.294999) (xy 311.724618 62.65146) (xy 311.997105 62.924423) (xy 312.353308 63.072332) (xy 312.738999 63.072668)
+ (xy 313.09546 62.925382) (xy 313.368423 62.652895) (xy 313.516332 62.296692) (xy 313.516668 61.911001) (xy 313.369382 61.55454)
+ (xy 313.096895 61.281577) (xy 312.740692 61.133668) (xy 312.355001 61.133332) (xy 312.195755 61.19913) (xy 312.246287 61.077437)
+ (xy 312.246712 60.590698) (xy 312.060838 60.140848) (xy 311.737291 59.816737) (xy 312.059628 59.494962) (xy 312.246287 59.045437)
+ (xy 312.246712 58.558698) (xy 312.080981 58.1576) (xy 317.4195 58.1576) (xy 317.4195 58.206929) (xy 317.4195 58.64475)
+ (xy 317.55075 58.776) (xy 318.618 58.776) (xy 318.618 58.756) (xy 318.668 58.756) (xy 318.668 58.776)
+ (xy 319.73525 58.776) (xy 319.8665 58.64475) (xy 319.8665 58.206929) (xy 319.8665 58.1576) (xy 320.1754 58.1576)
+ (xy 320.1754 59.355395) (xy 320.102001 59.355332) (xy 319.8665 59.452638) (xy 319.8665 59.395071) (xy 319.8665 58.95725)
+ (xy 319.73525 58.826) (xy 318.668 58.826) (xy 318.668 58.846) (xy 318.618 58.846) (xy 318.618 58.826)
+ (xy 317.55075 58.826) (xy 317.4195 58.95725) (xy 317.4195 59.395071) (xy 317.4195 59.603929) (xy 317.499426 59.796889)
+ (xy 317.519537 59.817) (xy 317.499426 59.837111) (xy 317.4195 60.030071) (xy 317.4195 60.238929) (xy 317.4195 61.635929)
+ (xy 317.499426 61.828889) (xy 317.647111 61.976574) (xy 317.840071 62.0565) (xy 318.048929 62.0565) (xy 319.2864 62.0565)
+ (xy 319.2864 89.027) (xy 319.334097 89.26679) (xy 319.469927 89.470073) (xy 320.485927 90.486073) (xy 320.68921 90.621903)
+ (xy 320.689211 90.621903) (xy 320.929 90.6696) (xy 323.463454 90.6696) (xy 324.1124 91.318546) (xy 324.1124 93.271668)
+ (xy 323.789692 93.137668) (xy 323.404001 93.137332) (xy 323.04754 93.284618) (xy 323.024699 93.307419) (xy 323.002895 93.285577)
+ (xy 322.646692 93.137668) (xy 322.261001 93.137332) (xy 321.90454 93.284618) (xy 321.631577 93.557105) (xy 321.483668 93.913308)
+ (xy 321.483332 94.298999) (xy 321.630618 94.65546) (xy 321.8264 94.851584) (xy 321.8264 96.245906) (xy 321.681437 96.185713)
+ (xy 321.194698 96.185288) (xy 320.744848 96.371162) (xy 320.400372 96.715038) (xy 320.374668 96.77694) (xy 320.374668 95.185001)
+ (xy 320.227382 94.82854) (xy 319.954895 94.555577) (xy 319.739668 94.466206) (xy 319.739668 89.978001) (xy 319.592382 89.62154)
+ (xy 319.319895 89.348577) (xy 318.963692 89.200668) (xy 318.850668 89.200569) (xy 318.850668 80.072001) (xy 318.703382 79.71554)
+ (xy 318.469668 79.481417) (xy 318.469668 72.325001) (xy 318.322382 71.96854) (xy 318.049895 71.695577) (xy 317.693692 71.547668)
+ (xy 317.308001 71.547332) (xy 316.95154 71.694618) (xy 316.678577 71.967105) (xy 316.530668 72.323308) (xy 316.530332 72.708999)
+ (xy 316.677618 73.06546) (xy 316.950105 73.338423) (xy 317.306308 73.486332) (xy 317.691999 73.486668) (xy 318.04846 73.339382)
+ (xy 318.321423 73.066895) (xy 318.469332 72.710692) (xy 318.469668 72.325001) (xy 318.469668 79.481417) (xy 318.430895 79.442577)
+ (xy 318.074692 79.294668) (xy 317.689001 79.294332) (xy 317.33254 79.441618) (xy 317.059577 79.714105) (xy 317.054382 79.726613)
+ (xy 316.931692 79.675668) (xy 316.546001 79.675332) (xy 316.18954 79.822618) (xy 315.916577 80.095105) (xy 315.768668 80.451308)
+ (xy 315.768332 80.836999) (xy 315.915618 81.19346) (xy 315.938419 81.2163) (xy 315.916577 81.238105) (xy 315.827145 81.45348)
+ (xy 315.657001 81.453332) (xy 315.421668 81.550569) (xy 315.421668 79.310001) (xy 315.421668 68.515001) (xy 315.274382 68.15854)
+ (xy 315.001895 67.885577) (xy 314.659565 67.743428) (xy 314.659668 67.626001) (xy 314.512382 67.26954) (xy 314.239895 66.996577)
+ (xy 313.883692 66.848668) (xy 313.498001 66.848332) (xy 313.389668 66.893094) (xy 313.389668 65.213001) (xy 313.242382 64.85654)
+ (xy 312.969895 64.583577) (xy 312.613692 64.435668) (xy 312.228001 64.435332) (xy 311.87154 64.582618) (xy 311.598577 64.855105)
+ (xy 311.450668 65.211308) (xy 311.450332 65.596999) (xy 311.597618 65.95346) (xy 311.870105 66.226423) (xy 312.226308 66.374332)
+ (xy 312.611999 66.374668) (xy 312.96846 66.227382) (xy 313.241423 65.954895) (xy 313.389332 65.598692) (xy 313.389668 65.213001)
+ (xy 313.389668 66.893094) (xy 313.14154 66.995618) (xy 312.868577 67.268105) (xy 312.720668 67.624308) (xy 312.720332 68.009999)
+ (xy 312.867618 68.36646) (xy 313.140105 68.639423) (xy 313.482434 68.781571) (xy 313.482332 68.898999) (xy 313.629618 69.25546)
+ (xy 313.902105 69.528423) (xy 314.258308 69.676332) (xy 314.643999 69.676668) (xy 315.00046 69.529382) (xy 315.273423 69.256895)
+ (xy 315.421332 68.900692) (xy 315.421668 68.515001) (xy 315.421668 79.310001) (xy 315.274382 78.95354) (xy 315.001895 78.680577)
+ (xy 314.645692 78.532668) (xy 314.260001 78.532332) (xy 313.90354 78.679618) (xy 313.630577 78.952105) (xy 313.482668 79.308308)
+ (xy 313.482332 79.693999) (xy 313.629618 80.05046) (xy 313.902105 80.323423) (xy 314.258308 80.471332) (xy 314.643999 80.471668)
+ (xy 315.00046 80.324382) (xy 315.273423 80.051895) (xy 315.421332 79.695692) (xy 315.421668 79.310001) (xy 315.421668 81.550569)
+ (xy 315.30054 81.600618) (xy 315.027577 81.873105) (xy 314.879668 82.229308) (xy 314.879332 82.614999) (xy 315.026618 82.97146)
+ (xy 315.299105 83.244423) (xy 315.655308 83.392332) (xy 316.040999 83.392668) (xy 316.39746 83.245382) (xy 316.670423 82.972895)
+ (xy 316.759854 82.757519) (xy 316.929999 82.757668) (xy 317.28646 82.610382) (xy 317.559423 82.337895) (xy 317.707332 81.981692)
+ (xy 317.707668 81.596001) (xy 317.560382 81.23954) (xy 317.53758 81.216699) (xy 317.559423 81.194895) (xy 317.564617 81.182386)
+ (xy 317.687308 81.233332) (xy 318.072999 81.233668) (xy 318.42946 81.086382) (xy 318.702423 80.813895) (xy 318.850332 80.457692)
+ (xy 318.850668 80.072001) (xy 318.850668 89.200569) (xy 318.578001 89.200332) (xy 318.22154 89.347618) (xy 318.198699 89.370419)
+ (xy 318.176895 89.348577) (xy 317.820692 89.200668) (xy 317.648795 89.200518) (xy 317.560382 88.98654) (xy 317.287895 88.713577)
+ (xy 316.931692 88.565668) (xy 316.546001 88.565332) (xy 316.18954 88.712618) (xy 315.929668 88.972036) (xy 315.929668 86.422001)
+ (xy 315.782382 86.06554) (xy 315.509895 85.792577) (xy 315.153692 85.644668) (xy 314.768001 85.644332) (xy 314.41154 85.791618)
+ (xy 314.138577 86.064105) (xy 314.071016 86.226808) (xy 314.004382 86.06554) (xy 313.731895 85.792577) (xy 313.375692 85.644668)
+ (xy 312.990001 85.644332) (xy 312.63354 85.791618) (xy 312.373668 86.051036) (xy 312.373668 70.674001) (xy 312.226382 70.31754)
+ (xy 311.953895 70.044577) (xy 311.865668 70.007941) (xy 311.865668 67.626001) (xy 311.718382 67.26954) (xy 311.445895 66.996577)
+ (xy 311.230668 66.907206) (xy 311.230668 64.451001) (xy 311.083382 64.09454) (xy 310.810895 63.821577) (xy 310.454692 63.673668)
+ (xy 310.069001 63.673332) (xy 309.71254 63.820618) (xy 309.439577 64.093105) (xy 309.291668 64.449308) (xy 309.291332 64.834999)
+ (xy 309.438618 65.19146) (xy 309.711105 65.464423) (xy 310.067308 65.612332) (xy 310.452999 65.612668) (xy 310.80946 65.465382)
+ (xy 311.082423 65.192895) (xy 311.230332 64.836692) (xy 311.230668 64.451001) (xy 311.230668 66.907206) (xy 311.089692 66.848668)
+ (xy 310.704001 66.848332) (xy 310.34754 66.995618) (xy 310.074577 67.268105) (xy 309.926668 67.624308) (xy 309.926332 68.009999)
+ (xy 310.073618 68.36646) (xy 310.346105 68.639423) (xy 310.702308 68.787332) (xy 311.087999 68.787668) (xy 311.44446 68.640382)
+ (xy 311.717423 68.367895) (xy 311.865332 68.011692) (xy 311.865668 67.626001) (xy 311.865668 70.007941) (xy 311.597692 69.896668)
+ (xy 311.212001 69.896332) (xy 310.85554 70.043618) (xy 310.582577 70.316105) (xy 310.434668 70.672308) (xy 310.434332 71.057999)
+ (xy 310.581618 71.41446) (xy 310.854105 71.687423) (xy 311.210308 71.835332) (xy 311.595999 71.835668) (xy 311.95246 71.688382)
+ (xy 312.225423 71.415895) (xy 312.373332 71.059692) (xy 312.373668 70.674001) (xy 312.373668 86.051036) (xy 312.360577 86.064105)
+ (xy 312.323815 86.152636) (xy 312.119668 86.152458) (xy 312.119668 79.818001) (xy 311.972382 79.46154) (xy 311.699895 79.188577)
+ (xy 311.357668 79.046471) (xy 311.357668 73.976001) (xy 311.210382 73.61954) (xy 310.937895 73.346577) (xy 310.581692 73.198668)
+ (xy 310.196001 73.198332) (xy 309.83954 73.345618) (xy 309.566577 73.618105) (xy 309.418668 73.974308) (xy 309.418332 74.359999)
+ (xy 309.565618 74.71646) (xy 309.838105 74.989423) (xy 310.194308 75.137332) (xy 310.579999 75.137668) (xy 310.93646 74.990382)
+ (xy 311.209423 74.717895) (xy 311.357332 74.361692) (xy 311.357668 73.976001) (xy 311.357668 79.046471) (xy 311.343692 79.040668)
+ (xy 310.958001 79.040332) (xy 310.60154 79.187618) (xy 310.328577 79.460105) (xy 310.180668 79.816308) (xy 310.180563 79.93571)
+ (xy 309.83954 80.076618) (xy 309.753088 80.162919) (xy 309.667895 80.077577) (xy 309.311692 79.929668) (xy 309.198668 79.929569)
+ (xy 309.198668 69.912001) (xy 309.051382 69.55554) (xy 308.817668 69.321417) (xy 308.817668 63.562001) (xy 308.670382 63.20554)
+ (xy 308.397895 62.932577) (xy 308.041692 62.784668) (xy 307.656001 62.784332) (xy 307.29954 62.931618) (xy 307.026577 63.204105)
+ (xy 306.878668 63.560308) (xy 306.878332 63.945999) (xy 307.025618 64.30246) (xy 307.298105 64.575423) (xy 307.654308 64.723332)
+ (xy 308.039999 64.723668) (xy 308.39646 64.576382) (xy 308.669423 64.303895) (xy 308.817332 63.947692) (xy 308.817668 63.562001)
+ (xy 308.817668 69.321417) (xy 308.778895 69.282577) (xy 308.422692 69.134668) (xy 308.037001 69.134332) (xy 307.68054 69.281618)
+ (xy 307.407577 69.554105) (xy 307.293668 69.828427) (xy 307.293668 67.753001) (xy 307.146382 67.39654) (xy 306.873895 67.123577)
+ (xy 306.517692 66.975668) (xy 306.132001 66.975332) (xy 305.896668 67.072569) (xy 305.896668 64.705001) (xy 305.749382 64.34854)
+ (xy 305.476895 64.075577) (xy 305.464386 64.070382) (xy 305.515332 63.947692) (xy 305.515668 63.562001) (xy 305.368382 63.20554)
+ (xy 305.095895 62.932577) (xy 304.739692 62.784668) (xy 304.354001 62.784332) (xy 304.322676 62.797274) (xy 304.372332 62.677692)
+ (xy 304.372668 62.292001) (xy 304.225382 61.93554) (xy 303.952895 61.662577) (xy 303.596692 61.514668) (xy 303.211001 61.514332)
+ (xy 302.85454 61.661618) (xy 302.581577 61.934105) (xy 302.433668 62.290308) (xy 302.433569 62.40365) (xy 302.068001 62.403332)
+ (xy 301.943947 62.454589) (xy 301.939382 62.44354) (xy 301.666895 62.170577) (xy 301.310692 62.022668) (xy 300.925001 62.022332)
+ (xy 300.56854 62.169618) (xy 300.435659 62.302267) (xy 300.435668 62.292001) (xy 300.288382 61.93554) (xy 300.015895 61.662577)
+ (xy 299.659692 61.514668) (xy 299.274001 61.514332) (xy 298.91754 61.661618) (xy 298.644577 61.934105) (xy 298.496668 62.290308)
+ (xy 298.496332 62.675999) (xy 298.643618 63.03246) (xy 298.916105 63.305423) (xy 299.272308 63.453332) (xy 299.657999 63.453668)
+ (xy 300.01446 63.306382) (xy 300.14734 63.173732) (xy 300.147332 63.183999) (xy 300.294618 63.54046) (xy 300.567105 63.813423)
+ (xy 300.923308 63.961332) (xy 301.308999 63.961668) (xy 301.433052 63.91041) (xy 301.437618 63.92146) (xy 301.710105 64.194423)
+ (xy 302.066308 64.342332) (xy 302.451999 64.342668) (xy 302.80846 64.195382) (xy 303.081423 63.922895) (xy 303.229332 63.566692)
+ (xy 303.22943 63.453349) (xy 303.594999 63.453668) (xy 303.626323 63.440725) (xy 303.576668 63.560308) (xy 303.576332 63.945999)
+ (xy 303.723618 64.30246) (xy 303.996105 64.575423) (xy 304.008613 64.580617) (xy 303.957668 64.703308) (xy 303.957332 65.088999)
+ (xy 304.104618 65.44546) (xy 304.377105 65.718423) (xy 304.733308 65.866332) (xy 305.118999 65.866668) (xy 305.47546 65.719382)
+ (xy 305.748423 65.446895) (xy 305.896332 65.090692) (xy 305.896668 64.705001) (xy 305.896668 67.072569) (xy 305.77554 67.122618)
+ (xy 305.502577 67.395105) (xy 305.354668 67.751308) (xy 305.354332 68.136999) (xy 305.501618 68.49346) (xy 305.774105 68.766423)
+ (xy 306.130308 68.914332) (xy 306.515999 68.914668) (xy 306.87246 68.767382) (xy 307.145423 68.494895) (xy 307.293332 68.138692)
+ (xy 307.293668 67.753001) (xy 307.293668 69.828427) (xy 307.259668 69.910308) (xy 307.259407 70.20925) (xy 307.060988 70.291234)
+ (xy 307.019382 70.19054) (xy 306.746895 69.917577) (xy 306.390692 69.769668) (xy 306.005001 69.769332) (xy 305.64854 69.916618)
+ (xy 305.375577 70.189105) (xy 305.227668 70.545308) (xy 305.227332 70.930999) (xy 305.374618 71.28746) (xy 305.647105 71.560423)
+ (xy 306.003308 71.708332) (xy 306.388999 71.708668) (xy 306.730011 71.567765) (xy 306.771618 71.66846) (xy 306.858029 71.755022)
+ (xy 306.645577 71.967105) (xy 306.497668 72.323308) (xy 306.497332 72.708999) (xy 306.644618 73.06546) (xy 306.885522 73.306785)
+ (xy 306.79154 73.345618) (xy 306.518577 73.618105) (xy 306.376428 73.960434) (xy 306.259001 73.960332) (xy 305.90254 74.107618)
+ (xy 305.629577 74.380105) (xy 305.624382 74.392613) (xy 305.501692 74.341668) (xy 305.116001 74.341332) (xy 304.75954 74.488618)
+ (xy 304.486577 74.761105) (xy 304.338668 75.117308) (xy 304.338332 75.502999) (xy 304.435689 75.738624) (xy 304.100001 75.738332)
+ (xy 303.74354 75.885618) (xy 303.470577 76.158105) (xy 303.322668 76.514308) (xy 303.322641 76.545077) (xy 303.215692 76.500668)
+ (xy 303.10246 76.500569) (xy 303.102668 76.262001) (xy 302.955382 75.90554) (xy 302.682895 75.632577) (xy 302.326692 75.484668)
+ (xy 302.086668 75.484458) (xy 302.086668 74.103001) (xy 301.939382 73.74654) (xy 301.666895 73.473577) (xy 301.310692 73.325668)
+ (xy 300.925001 73.325332) (xy 300.892868 73.338609) (xy 300.892868 67.626001) (xy 300.745582 67.26954) (xy 300.473095 66.996577)
+ (xy 300.116892 66.848668) (xy 299.731201 66.848332) (xy 299.37474 66.995618) (xy 299.101777 67.268105) (xy 298.953868 67.624308)
+ (xy 298.953532 68.009999) (xy 299.100818 68.36646) (xy 299.373305 68.639423) (xy 299.729508 68.787332) (xy 300.115199 68.787668)
+ (xy 300.47166 68.640382) (xy 300.744623 68.367895) (xy 300.892532 68.011692) (xy 300.892868 67.626001) (xy 300.892868 73.338609)
+ (xy 300.56854 73.472618) (xy 300.308668 73.732036) (xy 300.308668 73.087001) (xy 300.161382 72.73054) (xy 299.888895 72.457577)
+ (xy 299.532692 72.309668) (xy 299.413289 72.309563) (xy 299.273178 71.970467) (xy 299.419332 71.618492) (xy 299.419668 71.232801)
+ (xy 299.272382 70.87634) (xy 299.008391 70.611888) (xy 299.144423 70.476095) (xy 299.292332 70.119892) (xy 299.292668 69.734201)
+ (xy 299.145382 69.37774) (xy 298.872895 69.104777) (xy 298.516692 68.956868) (xy 298.131001 68.956532) (xy 297.77454 69.103818)
+ (xy 297.501577 69.376305) (xy 297.353668 69.732508) (xy 297.353332 70.118199) (xy 297.500618 70.47466) (xy 297.764608 70.739111)
+ (xy 297.628577 70.874905) (xy 297.480668 71.231108) (xy 297.480332 71.616799) (xy 297.626821 71.971332) (xy 297.480668 72.323308)
+ (xy 297.480332 72.708999) (xy 297.627618 73.06546) (xy 297.900105 73.338423) (xy 298.256308 73.486332) (xy 298.37571 73.486436)
+ (xy 298.516618 73.82746) (xy 298.789105 74.100423) (xy 299.145308 74.248332) (xy 299.530999 74.248668) (xy 299.88746 74.101382)
+ (xy 300.160423 73.828895) (xy 300.308332 73.472692) (xy 300.308668 73.087001) (xy 300.308668 73.732036) (xy 300.295577 73.745105)
+ (xy 300.147668 74.101308) (xy 300.147332 74.486999) (xy 300.294618 74.84346) (xy 300.567105 75.116423) (xy 300.923308 75.264332)
+ (xy 301.308999 75.264668) (xy 301.66546 75.117382) (xy 301.938423 74.844895) (xy 302.086332 74.488692) (xy 302.086668 74.103001)
+ (xy 302.086668 75.484458) (xy 301.941001 75.484332) (xy 301.58454 75.631618) (xy 301.311577 75.904105) (xy 301.163668 76.260308)
+ (xy 301.163332 76.645999) (xy 301.310618 77.00246) (xy 301.583105 77.275423) (xy 301.939308 77.423332) (xy 302.052539 77.42343)
+ (xy 302.052332 77.661999) (xy 302.199618 78.01846) (xy 302.472105 78.291423) (xy 302.828308 78.439332) (xy 303.213999 78.439668)
+ (xy 303.57046 78.292382) (xy 303.843423 78.019895) (xy 303.991332 77.663692) (xy 303.991358 77.632922) (xy 304.098308 77.677332)
+ (xy 304.483999 77.677668) (xy 304.84046 77.530382) (xy 305.113423 77.257895) (xy 305.261332 76.901692) (xy 305.261668 76.516001)
+ (xy 305.16431 76.280375) (xy 305.499999 76.280668) (xy 305.85646 76.133382) (xy 306.129423 75.860895) (xy 306.134617 75.848386)
+ (xy 306.257308 75.899332) (xy 306.642999 75.899668) (xy 306.99946 75.752382) (xy 307.272423 75.479895) (xy 307.414571 75.137565)
+ (xy 307.531999 75.137668) (xy 307.88846 74.990382) (xy 308.161423 74.717895) (xy 308.309332 74.361692) (xy 308.309668 73.976001)
+ (xy 308.162382 73.61954) (xy 307.921477 73.378214) (xy 308.01546 73.339382) (xy 308.288423 73.066895) (xy 308.436332 72.710692)
+ (xy 308.436668 72.325001) (xy 308.289382 71.96854) (xy 308.20297 71.881977) (xy 308.415423 71.669895) (xy 308.563332 71.313692)
+ (xy 308.563592 71.014749) (xy 308.77746 70.926382) (xy 309.050423 70.653895) (xy 309.198332 70.297692) (xy 309.198668 69.912001)
+ (xy 309.198668 79.929569) (xy 308.926001 79.929332) (xy 308.56954 80.076618) (xy 308.296577 80.349105) (xy 308.148668 80.705308)
+ (xy 308.148332 81.090999) (xy 308.295618 81.44746) (xy 308.568105 81.720423) (xy 308.924308 81.868332) (xy 309.309999 81.868668)
+ (xy 309.66646 81.721382) (xy 309.752911 81.63508) (xy 309.838105 81.720423) (xy 310.194308 81.868332) (xy 310.579999 81.868668)
+ (xy 310.93646 81.721382) (xy 311.209423 81.448895) (xy 311.357332 81.092692) (xy 311.357436 80.973289) (xy 311.69846 80.832382)
+ (xy 311.971423 80.559895) (xy 312.119332 80.203692) (xy 312.119668 79.818001) (xy 312.119668 86.152458) (xy 311.974001 86.152332)
+ (xy 311.61754 86.299618) (xy 311.513898 86.403079) (xy 311.216692 86.279668) (xy 310.831001 86.279332) (xy 310.47454 86.426618)
+ (xy 310.451699 86.449419) (xy 310.429895 86.427577) (xy 310.073692 86.279668) (xy 309.688001 86.279332) (xy 309.33154 86.426618)
+ (xy 309.181588 86.576308) (xy 309.159895 86.554577) (xy 308.803692 86.406668) (xy 308.504749 86.406407) (xy 308.416382 86.19254)
+ (xy 308.143895 85.919577) (xy 308.134494 85.915673) (xy 308.14246 85.912382) (xy 308.415423 85.639895) (xy 308.5049 85.424409)
+ (xy 308.801999 85.424668) (xy 309.15846 85.277382) (xy 309.431423 85.004895) (xy 309.500274 84.839083) (xy 309.686308 84.916332)
+ (xy 310.071999 84.916668) (xy 310.42846 84.769382) (xy 310.701423 84.496895) (xy 310.849332 84.140692) (xy 310.849668 83.755001)
+ (xy 310.702382 83.39854) (xy 310.429895 83.125577) (xy 310.073692 82.977668) (xy 309.688001 82.977332) (xy 309.33154 83.124618)
+ (xy 309.058577 83.397105) (xy 308.989725 83.562916) (xy 308.803692 83.485668) (xy 308.418001 83.485332) (xy 308.06154 83.632618)
+ (xy 307.788577 83.905105) (xy 307.699099 84.12059) (xy 307.402001 84.120332) (xy 307.04554 84.267618) (xy 306.772577 84.540105)
+ (xy 306.624668 84.896308) (xy 306.624332 85.281999) (xy 306.771618 85.63846) (xy 307.044105 85.911423) (xy 307.053505 85.915326)
+ (xy 307.04554 85.918618) (xy 306.772577 86.191105) (xy 306.624668 86.547308) (xy 306.624332 86.932999) (xy 306.771618 87.28946)
+ (xy 307.044105 87.562423) (xy 307.400308 87.710332) (xy 307.69925 87.710592) (xy 307.787618 87.92446) (xy 308.060105 88.197423)
+ (xy 308.416308 88.345332) (xy 308.801999 88.345668) (xy 309.15846 88.198382) (xy 309.308411 88.048691) (xy 309.330105 88.070423)
+ (xy 309.686308 88.218332) (xy 310.071999 88.218668) (xy 310.42846 88.071382) (xy 310.4513 88.04858) (xy 310.473105 88.070423)
+ (xy 310.829308 88.218332) (xy 311.214999 88.218668) (xy 311.57146 88.071382) (xy 311.675101 87.96792) (xy 311.972308 88.091332)
+ (xy 312.357999 88.091668) (xy 312.71446 87.944382) (xy 312.987423 87.671895) (xy 313.024184 87.583363) (xy 313.10771 87.583436)
+ (xy 313.248618 87.92446) (xy 313.521105 88.197423) (xy 313.877308 88.345332) (xy 314.262999 88.345668) (xy 314.61946 88.198382)
+ (xy 314.892423 87.925895) (xy 315.034571 87.583565) (xy 315.151999 87.583668) (xy 315.50846 87.436382) (xy 315.781423 87.163895)
+ (xy 315.929332 86.807692) (xy 315.929668 86.422001) (xy 315.929668 88.972036) (xy 315.916577 88.985105) (xy 315.774428 89.327434)
+ (xy 315.657001 89.327332) (xy 315.30054 89.474618) (xy 315.027577 89.747105) (xy 314.879668 90.103308) (xy 314.879332 90.488999)
+ (xy 315.026618 90.84546) (xy 315.299105 91.118423) (xy 315.655308 91.266332) (xy 316.040999 91.266668) (xy 316.39746 91.119382)
+ (xy 316.670423 90.846895) (xy 316.764286 90.620848) (xy 316.804618 90.71846) (xy 317.077105 90.991423) (xy 317.433308 91.139332)
+ (xy 317.818999 91.139668) (xy 318.17546 90.992382) (xy 318.1983 90.96958) (xy 318.220105 90.991423) (xy 318.576308 91.139332)
+ (xy 318.961999 91.139668) (xy 319.31846 90.992382) (xy 319.591423 90.719895) (xy 319.739332 90.363692) (xy 319.739668 89.978001)
+ (xy 319.739668 94.466206) (xy 319.598692 94.407668) (xy 319.213001 94.407332) (xy 318.85654 94.554618) (xy 318.583577 94.827105)
+ (xy 318.435668 95.183308) (xy 318.435332 95.568999) (xy 318.582618 95.92546) (xy 318.842156 96.185451) (xy 318.654698 96.185288)
+ (xy 318.204848 96.371162) (xy 317.860372 96.715038) (xy 317.673713 97.164563) (xy 317.673288 97.651302) (xy 317.859162 98.101152)
+ (xy 318.203038 98.445628) (xy 318.652563 98.632287) (xy 319.139302 98.632712) (xy 319.589152 98.446838) (xy 319.933628 98.102962)
+ (xy 320.120287 97.653437) (xy 320.120712 97.166698) (xy 319.934838 96.716848) (xy 319.590962 96.372372) (xy 319.528917 96.346608)
+ (xy 319.596999 96.346668) (xy 319.95346 96.199382) (xy 320.226423 95.926895) (xy 320.374332 95.570692) (xy 320.374668 95.185001)
+ (xy 320.374668 96.77694) (xy 320.213713 97.164563) (xy 320.213288 97.651302) (xy 320.399162 98.101152) (xy 320.743038 98.445628)
+ (xy 321.192563 98.632287) (xy 321.679302 98.632712) (xy 321.8264 98.571932) (xy 321.8264 98.785906) (xy 321.681437 98.725713)
+ (xy 321.194698 98.725288) (xy 320.744848 98.911162) (xy 320.400372 99.255038) (xy 320.213713 99.704563) (xy 320.213288 100.191302)
+ (xy 320.399162 100.641152) (xy 320.743038 100.985628) (xy 321.192563 101.172287) (xy 321.679302 101.172712) (xy 321.881655 101.089101)
+ (xy 322.009927 101.281073) (xy 322.3344 101.605546) (xy 322.3344 102.997) (xy 322.368896 103.170425) (xy 322.261001 103.170332)
+ (xy 321.90454 103.317618) (xy 321.631577 103.590105) (xy 321.5556 103.773077) (xy 321.5556 102.896381) (xy 321.644332 102.682692)
+ (xy 321.644668 102.297001) (xy 321.497382 101.94054) (xy 321.224895 101.667577) (xy 320.868692 101.519668) (xy 320.483001 101.519332)
+ (xy 320.12654 101.666618) (xy 320.120712 101.672435) (xy 320.120712 99.706698) (xy 319.934838 99.256848) (xy 319.590962 98.912372)
+ (xy 319.141437 98.725713) (xy 318.654698 98.725288) (xy 318.204848 98.911162) (xy 317.860372 99.255038) (xy 317.673713 99.704563)
+ (xy 317.673288 100.191302) (xy 317.859162 100.641152) (xy 318.203038 100.985628) (xy 318.652563 101.172287) (xy 319.139302 101.172712)
+ (xy 319.589152 100.986838) (xy 319.933628 100.642962) (xy 320.120287 100.193437) (xy 320.120712 99.706698) (xy 320.120712 101.672435)
+ (xy 319.853577 101.939105) (xy 319.705668 102.295308) (xy 319.705563 102.41471) (xy 319.36454 102.555618) (xy 319.091577 102.828105)
+ (xy 318.943668 103.184308) (xy 318.943332 103.569999) (xy 319.090618 103.92646) (xy 319.350266 104.186562) (xy 319.086001 104.186332)
+ (xy 318.72954 104.333618) (xy 318.456577 104.606105) (xy 318.308668 104.962308) (xy 318.308406 105.262082) (xy 318.195382 104.98854)
+ (xy 317.922895 104.715577) (xy 317.580712 104.573489) (xy 317.580712 99.706698) (xy 317.580712 97.166698) (xy 317.394838 96.716848)
+ (xy 317.050962 96.372372) (xy 316.601437 96.185713) (xy 316.114698 96.185288) (xy 315.664848 96.371162) (xy 315.320372 96.715038)
+ (xy 315.133713 97.164563) (xy 315.133288 97.651302) (xy 315.319162 98.101152) (xy 315.663038 98.445628) (xy 316.112563 98.632287)
+ (xy 316.599302 98.632712) (xy 317.049152 98.446838) (xy 317.393628 98.102962) (xy 317.580287 97.653437) (xy 317.580712 97.166698)
+ (xy 317.580712 99.706698) (xy 317.394838 99.256848) (xy 317.050962 98.912372) (xy 316.601437 98.725713) (xy 316.114698 98.725288)
+ (xy 315.664848 98.911162) (xy 315.320372 99.255038) (xy 315.133713 99.704563) (xy 315.133288 100.191302) (xy 315.319162 100.641152)
+ (xy 315.504878 100.827192) (xy 315.281577 101.050105) (xy 315.133668 101.406308) (xy 315.133332 101.791999) (xy 315.280618 102.14846)
+ (xy 315.553105 102.421423) (xy 315.909308 102.569332) (xy 316.294999 102.569668) (xy 316.65146 102.422382) (xy 316.924423 102.149895)
+ (xy 317.072332 101.793692) (xy 317.072668 101.408001) (xy 316.925382 101.05154) (xy 316.915797 101.041938) (xy 317.049152 100.986838)
+ (xy 317.393628 100.642962) (xy 317.580287 100.193437) (xy 317.580712 99.706698) (xy 317.580712 104.573489) (xy 317.566692 104.567668)
+ (xy 317.181001 104.567332) (xy 316.82454 104.714618) (xy 316.551577 104.987105) (xy 316.403668 105.343308) (xy 316.403332 105.728999)
+ (xy 316.550618 106.08546) (xy 316.823105 106.358423) (xy 317.179308 106.506332) (xy 317.564999 106.506668) (xy 317.92146 106.359382)
+ (xy 318.194423 106.086895) (xy 318.342332 105.730692) (xy 318.342593 105.430917) (xy 318.455618 105.70446) (xy 318.6514 105.900584)
+ (xy 318.6514 105.918) (xy 318.699097 106.15779) (xy 318.834927 106.361073) (xy 318.9054 106.431546) (xy 318.9054 108.511668)
+ (xy 318.582692 108.377668) (xy 318.197001 108.377332) (xy 317.84054 108.524618) (xy 317.567577 108.797105) (xy 317.419668 109.153308)
+ (xy 317.419332 109.538999) (xy 317.566618 109.89546) (xy 317.7624 110.091584) (xy 317.7624 110.617) (xy 317.810097 110.85679)
+ (xy 317.945927 111.060073) (xy 320.358927 113.473073) (xy 320.56221 113.608902) (xy 320.562211 113.608903) (xy 320.802 113.6566)
+ (xy 321.177454 113.6566) (xy 321.1914 113.670546) (xy 321.1914 115.443) (xy 321.239097 115.68279) (xy 321.27957 115.743362)
+ (xy 321.245001 115.743332) (xy 320.945854 115.866936) (xy 320.716895 115.637577) (xy 320.360692 115.489668) (xy 319.975001 115.489332)
+ (xy 319.61854 115.636618) (xy 319.345577 115.909105) (xy 319.197668 116.265308) (xy 319.197569 116.378539) (xy 318.959001 116.378332)
+ (xy 318.60254 116.525618) (xy 318.329577 116.798105) (xy 318.181668 117.154308) (xy 318.181332 117.539999) (xy 318.328618 117.89646)
+ (xy 318.601105 118.169423) (xy 318.957308 118.317332) (xy 319.342999 118.317668) (xy 319.69946 118.170382) (xy 319.972423 117.897895)
+ (xy 320.120332 117.541692) (xy 320.12043 117.42846) (xy 320.358999 117.428668) (xy 320.658145 117.305063) (xy 320.887105 117.534423)
+ (xy 321.243308 117.682332) (xy 321.628999 117.682668) (xy 321.98546 117.535382) (xy 322.258423 117.262895) (xy 322.403167 116.914313)
+ (xy 322.644927 117.156073) (xy 322.836861 117.284319) (xy 322.753713 117.484563) (xy 322.753288 117.971302) (xy 322.781141 118.038712)
+ (xy 322.390927 118.428927) (xy 322.255097 118.63221) (xy 322.2074 118.872) (xy 322.2074 121.446467) (xy 321.986895 121.225577)
+ (xy 321.630692 121.077668) (xy 321.245001 121.077332) (xy 320.88854 121.224618) (xy 320.615577 121.497105) (xy 320.467668 121.853308)
+ (xy 320.467332 122.238999) (xy 320.614618 122.59546) (xy 320.887105 122.868423) (xy 321.243308 123.016332) (xy 321.628999 123.016668)
+ (xy 321.98546 122.869382) (xy 322.2074 122.647829) (xy 322.2074 123.19) (xy 322.255097 123.42979) (xy 322.390927 123.633073)
+ (xy 323.025927 124.268073) (xy 323.206887 124.388987) (xy 322.940372 124.655038) (xy 322.753713 125.104563) (xy 322.753288 125.591302)
+ (xy 322.939162 126.041152) (xy 323.283038 126.385628) (xy 323.732563 126.572287) (xy 324.219302 126.572712) (xy 324.286712 126.544858)
+ (xy 324.539736 126.797882) (xy 324.221437 126.665713) (xy 323.734698 126.665288) (xy 323.284848 126.851162) (xy 322.940372 127.195038)
+ (xy 322.753713 127.644563) (xy 322.753288 128.131302) (xy 322.939162 128.581152) (xy 323.283038 128.925628) (xy 323.732563 129.112287)
+ (xy 324.219302 129.112712) (xy 324.669152 128.926838) (xy 325.013628 128.582962) (xy 325.200287 128.133437) (xy 325.200712 127.646698)
+ (xy 325.014838 127.196848) (xy 324.764594 126.946167) (xy 324.993 126.9916) (xy 328.690098 126.9916) (xy 328.50854 127.066618)
+ (xy 328.235577 127.339105) (xy 328.087668 127.695308) (xy 328.087332 128.080999) (xy 328.234618 128.43746) (xy 328.507105 128.710423)
+ (xy 328.863308 128.858332) (xy 329.248999 128.858668) (xy 329.60546 128.711382) (xy 329.878423 128.438895) (xy 330.026332 128.082692)
+ (xy 330.026668 127.697001) (xy 329.879382 127.34054) (xy 329.606895 127.067577) (xy 329.423922 126.9916) (xy 330.976098 126.9916)
+ (xy 330.79454 127.066618) (xy 330.521577 127.339105) (xy 330.373668 127.695308) (xy 330.373332 128.080999) (xy 330.520618 128.43746)
+ (xy 330.793105 128.710423) (xy 331.149308 128.858332) (xy 331.534999 128.858668) (xy 331.89146 128.711382) (xy 332.164423 128.438895)
+ (xy 332.274148 128.174647) (xy 332.337162 128.327152) (xy 332.681038 128.671628) (xy 333.130563 128.858287) (xy 333.617302 128.858712)
+ (xy 334.067152 128.672838) (xy 334.411628 128.328962) (xy 334.598287 127.879437) (xy 334.598712 127.392698) (xy 334.412838 126.942848)
+ (xy 334.399046 126.929031) (xy 334.580073 126.808073) (xy 334.834073 126.554073) (xy 334.969902 126.35079) (xy 334.969903 126.350789)
+ (xy 335.0176 126.111) (xy 335.0176 125.927835) (xy 335.221038 126.131628) (xy 335.670563 126.318287) (xy 336.157302 126.318712)
+ (xy 336.607152 126.132838) (xy 336.951628 125.788962) (xy 337.138287 125.339437) (xy 337.138712 124.852698) (xy 336.952838 124.402848)
+ (xy 336.608962 124.058372) (xy 336.159437 123.871713) (xy 335.672698 123.871288) (xy 335.222848 124.057162) (xy 335.0176 124.262052)
+ (xy 335.0176 118.745) (xy 334.969903 118.505211) (xy 334.969902 118.50521) (xy 334.834073 118.301927) (xy 334.580073 118.047927)
+ (xy 334.487555 117.986108) (xy 334.598287 117.719437) (xy 334.598712 117.232698) (xy 334.412838 116.782848) (xy 334.068962 116.438372)
+ (xy 333.619437 116.251713) (xy 333.132698 116.251288) (xy 332.9856 116.312067) (xy 332.9856 116.098093) (xy 333.130563 116.158287)
+ (xy 333.617302 116.158712) (xy 334.067152 115.972838) (xy 334.411628 115.628962) (xy 334.598287 115.179437) (xy 334.598712 114.692698)
+ (xy 334.412838 114.242848) (xy 334.068962 113.898372) (xy 333.619437 113.711713) (xy 333.132698 113.711288) (xy 332.9856 113.772067)
+ (xy 332.9856 113.670546) (xy 333.065058 113.591087) (xy 333.130563 113.618287) (xy 333.617302 113.618712) (xy 334.067152 113.432838)
+ (xy 334.411628 113.088962) (xy 334.455408 112.983526) (xy 334.503789 112.973903) (xy 334.50379 112.973903) (xy 334.707073 112.838073)
+ (xy 334.961073 112.584073) (xy 335.096902 112.38079) (xy 335.096903 112.380789) (xy 335.1446 112.141) (xy 335.1446 109.093)
+ (xy 335.096903 108.853211) (xy 335.096902 108.85321) (xy 334.961073 108.649927) (xy 334.707073 108.395927) (xy 334.50379 108.260097)
+ (xy 334.264 108.2124) (xy 334.207835 108.2124) (xy 334.411628 108.008962) (xy 334.598287 107.559437) (xy 334.598712 107.072698)
+ (xy 334.537932 106.9256) (xy 342.265 106.9256) (xy 342.504789 106.877903) (xy 342.50479 106.877903) (xy 342.708073 106.742073)
+ (xy 342.9084 106.541746) (xy 342.9084 107.0784) (xy 342.840577 107.146105) (xy 342.692668 107.502308) (xy 342.692332 107.887999)
+ (xy 342.839618 108.24446) (xy 343.0354 108.440584) (xy 343.0354 116.222621) (xy 342.840577 116.417105) (xy 342.726668 116.691427)
+ (xy 342.726668 109.282001) (xy 342.579382 108.92554) (xy 342.306895 108.652577) (xy 341.950692 108.504668) (xy 341.565001 108.504332)
+ (xy 341.20854 108.651618) (xy 340.935577 108.924105) (xy 340.787668 109.280308) (xy 340.787332 109.665999) (xy 340.934618 110.02246)
+ (xy 341.207105 110.295423) (xy 341.563308 110.443332) (xy 341.948999 110.443668) (xy 342.30546 110.296382) (xy 342.578423 110.023895)
+ (xy 342.726332 109.667692) (xy 342.726668 109.282001) (xy 342.726668 116.691427) (xy 342.692668 116.773308) (xy 342.692332 117.158999)
+ (xy 342.839618 117.51546) (xy 343.112105 117.788423) (xy 343.468308 117.936332) (xy 343.853999 117.936668) (xy 344.21046 117.789382)
+ (xy 344.483423 117.516895) (xy 344.631332 117.160692) (xy 344.631668 116.775001) (xy 344.484382 116.41854) (xy 344.2886 116.222415)
+ (xy 344.2886 108.440378) (xy 344.483423 108.245895) (xy 344.631332 107.889692) (xy 344.631668 107.504001) (xy 344.484382 107.14754)
+ (xy 344.211895 106.874577) (xy 344.1616 106.853692) (xy 344.1616 105.839923) (xy 344.227152 105.812838) (xy 344.571628 105.468962)
+ (xy 344.758287 105.019437) (xy 344.758712 104.532698) (xy 344.697932 104.3856) (xy 344.911906 104.3856) (xy 344.851713 104.530563)
+ (xy 344.851288 105.017302) (xy 345.037162 105.467152) (xy 345.381038 105.811628) (xy 345.830563 105.998287) (xy 346.317302 105.998712)
+ (xy 346.767152 105.812838) (xy 347.111628 105.468962) (xy 347.298287 105.019437) (xy 347.298712 104.532698) (xy 347.112838 104.082848)
+ (xy 346.907947 103.8776) (xy 347.782164 103.8776) (xy 347.578372 104.081038) (xy 347.391713 104.530563) (xy 347.391288 105.017302)
+ (xy 347.577162 105.467152) (xy 347.921038 105.811628) (xy 348.370563 105.998287) (xy 348.667756 105.998546) (xy 348.808618 106.33946)
+ (xy 349.081105 106.612423) (xy 349.437308 106.760332) (xy 349.822999 106.760668) (xy 350.17946 106.613382) (xy 350.452423 106.340895)
+ (xy 350.600332 105.984692) (xy 350.600432 105.869509) (xy 350.910563 105.998287) (xy 351.397302 105.998712) (xy 351.847152 105.812838)
+ (xy 352.191628 105.468962) (xy 352.378287 105.019437) (xy 352.378712 104.532698) (xy 352.192838 104.082848) (xy 351.848962 103.738372)
+ (xy 351.399437 103.551713) (xy 350.912698 103.551288) (xy 350.462848 103.737162) (xy 350.118372 104.081038) (xy 349.931713 104.530563)
+ (xy 349.93142 104.865985) (xy 349.838454 104.827382) (xy 349.838712 104.532698) (xy 349.652838 104.082848) (xy 349.308962 103.738372)
+ (xy 349.2416 103.7104) (xy 349.2416 103.505) (xy 349.203905 103.315498) (xy 349.307152 103.272838) (xy 349.651628 102.928962)
+ (xy 349.838287 102.479437) (xy 349.838712 101.992698) (xy 349.652838 101.542848) (xy 349.308962 101.198372) (xy 348.859437 101.011713)
+ (xy 348.372698 101.011288) (xy 347.922848 101.197162) (xy 347.806668 101.313139) (xy 347.806668 89.724001) (xy 347.659382 89.36754)
+ (xy 347.386895 89.094577) (xy 347.030692 88.946668) (xy 346.645001 88.946332) (xy 346.28854 89.093618) (xy 346.015577 89.366105)
+ (xy 345.867668 89.722308) (xy 345.867332 90.107999) (xy 346.014618 90.46446) (xy 346.287105 90.737423) (xy 346.643308 90.885332)
+ (xy 347.028999 90.885668) (xy 347.38546 90.738382) (xy 347.658423 90.465895) (xy 347.806332 90.109692) (xy 347.806668 89.724001)
+ (xy 347.806668 101.313139) (xy 347.679668 101.439918) (xy 347.679668 94.042001) (xy 347.532382 93.68554) (xy 347.259895 93.412577)
+ (xy 346.903692 93.264668) (xy 346.518001 93.264332) (xy 346.16154 93.411618) (xy 345.888577 93.684105) (xy 345.774408 93.959052)
+ (xy 345.774668 93.661001) (xy 345.647668 93.353636) (xy 345.647668 84.517001) (xy 345.500382 84.16054) (xy 345.227895 83.887577)
+ (xy 344.885668 83.745471) (xy 344.885668 74.738001) (xy 344.738382 74.38154) (xy 344.465895 74.108577) (xy 344.109692 73.960668)
+ (xy 343.724001 73.960332) (xy 343.36754 74.107618) (xy 343.094577 74.380105) (xy 342.946668 74.736308) (xy 342.946332 75.121999)
+ (xy 343.093618 75.47846) (xy 343.366105 75.751423) (xy 343.722308 75.899332) (xy 344.107999 75.899668) (xy 344.46446 75.752382)
+ (xy 344.737423 75.479895) (xy 344.885332 75.123692) (xy 344.885668 74.738001) (xy 344.885668 83.745471) (xy 344.871692 83.739668)
+ (xy 344.486001 83.739332) (xy 344.12954 83.886618) (xy 343.856577 84.159105) (xy 343.708668 84.515308) (xy 343.708332 84.900999)
+ (xy 343.855618 85.25746) (xy 344.128105 85.530423) (xy 344.484308 85.678332) (xy 344.869999 85.678668) (xy 345.22646 85.531382)
+ (xy 345.499423 85.258895) (xy 345.647332 84.902692) (xy 345.647668 84.517001) (xy 345.647668 93.353636) (xy 345.627382 93.30454)
+ (xy 345.354895 93.031577) (xy 344.998692 92.883668) (xy 344.613001 92.883332) (xy 344.25654 93.030618) (xy 343.983577 93.303105)
+ (xy 343.835668 93.659308) (xy 343.835332 94.044999) (xy 343.982618 94.40146) (xy 344.255105 94.674423) (xy 344.611308 94.822332)
+ (xy 344.996999 94.822668) (xy 345.35346 94.675382) (xy 345.626423 94.402895) (xy 345.740591 94.127947) (xy 345.740332 94.425999)
+ (xy 345.887618 94.78246) (xy 346.160105 95.055423) (xy 346.516308 95.203332) (xy 346.901999 95.203668) (xy 347.25846 95.056382)
+ (xy 347.531423 94.783895) (xy 347.679332 94.427692) (xy 347.679668 94.042001) (xy 347.679668 101.439918) (xy 347.578372 101.541038)
+ (xy 347.391713 101.990563) (xy 347.391288 102.477302) (xy 347.452067 102.6244) (xy 347.238093 102.6244) (xy 347.298287 102.479437)
+ (xy 347.298712 101.992698) (xy 347.112838 101.542848) (xy 346.768962 101.198372) (xy 346.319437 101.011713) (xy 345.832698 101.011288)
+ (xy 345.382848 101.197162) (xy 345.038372 101.541038) (xy 344.851713 101.990563) (xy 344.851288 102.477302) (xy 344.912067 102.6244)
+ (xy 344.7585 102.6244) (xy 344.7585 101.432071) (xy 344.678574 101.239111) (xy 344.530889 101.091426) (xy 344.337929 101.0115)
+ (xy 344.129071 101.0115) (xy 342.732071 101.0115) (xy 342.539111 101.091426) (xy 342.391426 101.239111) (xy 342.3115 101.432071)
+ (xy 342.3115 101.640929) (xy 342.3115 102.6244) (xy 342.265 102.6244) (xy 342.148468 102.647579) (xy 342.218287 102.479437)
+ (xy 342.218712 101.992698) (xy 342.032838 101.542848) (xy 341.964668 101.474559) (xy 341.964668 84.517001) (xy 341.817382 84.16054)
+ (xy 341.544895 83.887577) (xy 341.188692 83.739668) (xy 340.803001 83.739332) (xy 340.44654 83.886618) (xy 340.173577 84.159105)
+ (xy 340.025668 84.515308) (xy 340.025332 84.900999) (xy 340.172618 85.25746) (xy 340.445105 85.530423) (xy 340.801308 85.678332)
+ (xy 341.186999 85.678668) (xy 341.54346 85.531382) (xy 341.816423 85.258895) (xy 341.964332 84.902692) (xy 341.964668 84.517001)
+ (xy 341.964668 101.474559) (xy 341.939268 101.449114) (xy 341.939268 89.470001) (xy 341.791982 89.11354) (xy 341.519495 88.840577)
+ (xy 341.163292 88.692668) (xy 340.777601 88.692332) (xy 340.42114 88.839618) (xy 340.220188 89.040218) (xy 340.020895 88.840577)
+ (xy 339.664692 88.692668) (xy 339.279001 88.692332) (xy 338.92254 88.839618) (xy 338.649577 89.112105) (xy 338.501668 89.468308)
+ (xy 338.501332 89.853999) (xy 338.648618 90.21046) (xy 338.921105 90.483423) (xy 339.277308 90.631332) (xy 339.662999 90.631668)
+ (xy 340.01946 90.484382) (xy 340.220411 90.283781) (xy 340.419705 90.483423) (xy 340.775908 90.631332) (xy 341.161599 90.631668)
+ (xy 341.51806 90.484382) (xy 341.791023 90.211895) (xy 341.938932 89.855692) (xy 341.939268 89.470001) (xy 341.939268 101.449114)
+ (xy 341.688962 101.198372) (xy 341.239437 101.011713) (xy 340.752698 101.011288) (xy 340.302848 101.197162) (xy 339.958372 101.541038)
+ (xy 339.771713 101.990563) (xy 339.771288 102.477302) (xy 339.957162 102.927152) (xy 340.301038 103.271628) (xy 340.750563 103.458287)
+ (xy 341.237302 103.458712) (xy 341.407604 103.388344) (xy 341.3844 103.505) (xy 341.3844 103.611906) (xy 341.239437 103.551713)
+ (xy 340.752698 103.551288) (xy 340.302848 103.737162) (xy 339.958372 104.081038) (xy 339.771713 104.530563) (xy 339.771288 105.017302)
+ (xy 339.832067 105.1644) (xy 339.618093 105.1644) (xy 339.678287 105.019437) (xy 339.678712 104.532698) (xy 339.678712 101.992698)
+ (xy 339.492838 101.542848) (xy 339.148962 101.198372) (xy 338.699437 101.011713) (xy 338.408668 101.011459) (xy 338.408668 96.201001)
+ (xy 338.261382 95.84454) (xy 338.027668 95.610417) (xy 338.027668 88.962001) (xy 337.880382 88.60554) (xy 337.607895 88.332577)
+ (xy 337.519668 88.295941) (xy 337.519668 82.739001) (xy 337.372382 82.38254) (xy 337.099895 82.109577) (xy 336.743692 81.961668)
+ (xy 336.358001 81.961332) (xy 336.00154 82.108618) (xy 335.728577 82.381105) (xy 335.580668 82.737308) (xy 335.580332 83.122999)
+ (xy 335.727618 83.47946) (xy 336.000105 83.752423) (xy 336.356308 83.900332) (xy 336.741999 83.900668) (xy 337.09846 83.753382)
+ (xy 337.371423 83.480895) (xy 337.519332 83.124692) (xy 337.519668 82.739001) (xy 337.519668 88.295941) (xy 337.251692 88.184668)
+ (xy 336.866001 88.184332) (xy 336.50954 88.331618) (xy 336.236577 88.604105) (xy 336.088668 88.960308) (xy 336.088332 89.345999)
+ (xy 336.235618 89.70246) (xy 336.508105 89.975423) (xy 336.864308 90.123332) (xy 337.249999 90.123668) (xy 337.60646 89.976382)
+ (xy 337.879423 89.703895) (xy 338.027332 89.347692) (xy 338.027668 88.962001) (xy 338.027668 95.610417) (xy 337.988895 95.571577)
+ (xy 337.632692 95.423668) (xy 337.247001 95.423332) (xy 336.89054 95.570618) (xy 336.867699 95.593419) (xy 336.845895 95.571577)
+ (xy 336.489692 95.423668) (xy 336.104001 95.423332) (xy 335.74754 95.570618) (xy 335.661088 95.656919) (xy 335.575895 95.571577)
+ (xy 335.219692 95.423668) (xy 334.882298 95.423374) (xy 334.979332 95.189692) (xy 334.979358 95.158922) (xy 335.086308 95.203332)
+ (xy 335.471999 95.203668) (xy 335.82846 95.056382) (xy 336.101423 94.783895) (xy 336.249332 94.427692) (xy 336.249668 94.042001)
+ (xy 336.102382 93.68554) (xy 335.868668 93.451417) (xy 335.868668 86.168001) (xy 335.721382 85.81154) (xy 335.448895 85.538577)
+ (xy 335.092692 85.390668) (xy 334.707001 85.390332) (xy 334.35054 85.537618) (xy 334.077577 85.810105) (xy 333.929668 86.166308)
+ (xy 333.929332 86.551999) (xy 334.076618 86.90846) (xy 334.349105 87.181423) (xy 334.705308 87.329332) (xy 335.090999 87.329668)
+ (xy 335.44746 87.182382) (xy 335.720423 86.909895) (xy 335.868332 86.553692) (xy 335.868668 86.168001) (xy 335.868668 93.451417)
+ (xy 335.829895 93.412577) (xy 335.473692 93.264668) (xy 335.088001 93.264332) (xy 334.776468 93.393054) (xy 334.776468 88.454001)
+ (xy 334.629182 88.09754) (xy 334.356695 87.824577) (xy 334.000492 87.676668) (xy 333.614801 87.676332) (xy 333.25834 87.823618)
+ (xy 332.985377 88.096105) (xy 332.837468 88.452308) (xy 332.837132 88.837999) (xy 332.984418 89.19446) (xy 333.256905 89.467423)
+ (xy 333.613108 89.615332) (xy 333.998799 89.615668) (xy 334.35526 89.468382) (xy 334.628223 89.195895) (xy 334.776132 88.839692)
+ (xy 334.776468 88.454001) (xy 334.776468 93.393054) (xy 334.73154 93.411618) (xy 334.458577 93.684105) (xy 334.310668 94.040308)
+ (xy 334.310641 94.071077) (xy 334.203692 94.026668) (xy 333.818001 94.026332) (xy 333.46154 94.173618) (xy 333.188577 94.446105)
+ (xy 333.040668 94.802308) (xy 333.040332 95.187999) (xy 333.187618 95.54446) (xy 333.460105 95.817423) (xy 333.816308 95.965332)
+ (xy 334.153701 95.965625) (xy 334.056668 96.199308) (xy 334.056332 96.584999) (xy 334.203618 96.94146) (xy 334.476105 97.214423)
+ (xy 334.832308 97.362332) (xy 335.217999 97.362668) (xy 335.57446 97.215382) (xy 335.660911 97.12908) (xy 335.746105 97.214423)
+ (xy 336.102308 97.362332) (xy 336.487999 97.362668) (xy 336.84446 97.215382) (xy 336.8673 97.19258) (xy 336.889105 97.214423)
+ (xy 337.245308 97.362332) (xy 337.630999 97.362668) (xy 337.98746 97.215382) (xy 338.260423 96.942895) (xy 338.408332 96.586692)
+ (xy 338.408668 96.201001) (xy 338.408668 101.011459) (xy 338.212698 101.011288) (xy 337.762848 101.197162) (xy 337.418372 101.541038)
+ (xy 337.231713 101.990563) (xy 337.231288 102.477302) (xy 337.417162 102.927152) (xy 337.761038 103.271628) (xy 338.210563 103.458287)
+ (xy 338.697302 103.458712) (xy 339.147152 103.272838) (xy 339.491628 102.928962) (xy 339.678287 102.479437) (xy 339.678712 101.992698)
+ (xy 339.678712 104.532698) (xy 339.492838 104.082848) (xy 339.148962 103.738372) (xy 338.699437 103.551713) (xy 338.212698 103.551288)
+ (xy 337.762848 103.737162) (xy 337.418372 104.081038) (xy 337.231713 104.530563) (xy 337.231288 105.017302) (xy 337.292067 105.1644)
+ (xy 337.078093 105.1644) (xy 337.138287 105.019437) (xy 337.138712 104.532698) (xy 337.138712 101.992698) (xy 336.952838 101.542848)
+ (xy 336.608962 101.198372) (xy 336.159437 101.011713) (xy 335.672698 101.011288) (xy 335.222848 101.197162) (xy 334.878372 101.541038)
+ (xy 334.691713 101.990563) (xy 334.691288 102.477302) (xy 334.877162 102.927152) (xy 335.221038 103.271628) (xy 335.670563 103.458287)
+ (xy 336.157302 103.458712) (xy 336.607152 103.272838) (xy 336.951628 102.928962) (xy 337.138287 102.479437) (xy 337.138712 101.992698)
+ (xy 337.138712 104.532698) (xy 336.952838 104.082848) (xy 336.608962 103.738372) (xy 336.159437 103.551713) (xy 335.672698 103.551288)
+ (xy 335.222848 103.737162) (xy 334.878372 104.081038) (xy 334.691713 104.530563) (xy 334.691288 105.017302) (xy 334.752067 105.1644)
+ (xy 334.538093 105.1644) (xy 334.598287 105.019437) (xy 334.598712 104.532698) (xy 334.598712 101.992698) (xy 334.412838 101.542848)
+ (xy 334.068962 101.198372) (xy 333.619437 101.011713) (xy 333.582668 101.01168) (xy 333.582668 96.328001) (xy 333.435382 95.97154)
+ (xy 333.162895 95.698577) (xy 332.806692 95.550668) (xy 332.421001 95.550332) (xy 332.06454 95.697618) (xy 331.791577 95.970105)
+ (xy 331.643668 96.326308) (xy 331.643332 96.711999) (xy 331.790618 97.06846) (xy 332.063105 97.341423) (xy 332.419308 97.489332)
+ (xy 332.804999 97.489668) (xy 333.16146 97.342382) (xy 333.434423 97.069895) (xy 333.582332 96.713692) (xy 333.582668 96.328001)
+ (xy 333.582668 101.01168) (xy 333.132698 101.011288) (xy 332.682848 101.197162) (xy 332.338372 101.541038) (xy 332.151713 101.990563)
+ (xy 332.151288 102.477302) (xy 332.337162 102.927152) (xy 332.681038 103.271628) (xy 333.130563 103.458287) (xy 333.617302 103.458712)
+ (xy 334.067152 103.272838) (xy 334.411628 102.928962) (xy 334.598287 102.479437) (xy 334.598712 101.992698) (xy 334.598712 104.532698)
+ (xy 334.412838 104.082848) (xy 334.068962 103.738372) (xy 333.619437 103.551713) (xy 333.132698 103.551288) (xy 332.682848 103.737162)
+ (xy 332.338372 104.081038) (xy 332.151713 104.530563) (xy 332.151288 105.017302) (xy 332.212067 105.1644) (xy 331.998093 105.1644)
+ (xy 332.058287 105.019437) (xy 332.058712 104.532698) (xy 331.872838 104.082848) (xy 331.528962 103.738372) (xy 331.4616 103.7104)
+ (xy 331.4616 92.964) (xy 331.413903 92.724211) (xy 331.413902 92.72421) (xy 331.278073 92.520927) (xy 328.9216 90.164454)
+ (xy 328.9216 85.707378) (xy 329.116423 85.512895) (xy 329.264332 85.156692) (xy 329.264668 84.771001) (xy 329.117382 84.41454)
+ (xy 328.844895 84.141577) (xy 328.488692 83.993668) (xy 328.103001 83.993332) (xy 327.74654 84.140618) (xy 327.473577 84.413105)
+ (xy 327.325668 84.769308) (xy 327.325332 85.154999) (xy 327.472618 85.51146) (xy 327.6684 85.707584) (xy 327.6684 87.747386)
+ (xy 327.498092 87.676668) (xy 327.112401 87.676332) (xy 326.75594 87.823618) (xy 326.482977 88.096105) (xy 326.335068 88.452308)
+ (xy 326.334732 88.837999) (xy 326.482018 89.19446) (xy 326.754505 89.467423) (xy 327.110708 89.615332) (xy 327.496399 89.615668)
+ (xy 327.6684 89.544598) (xy 327.6684 90.424) (xy 327.716097 90.66379) (xy 327.851927 90.867073) (xy 330.2084 93.223546)
+ (xy 330.2084 103.710076) (xy 330.142848 103.737162) (xy 329.798372 104.081038) (xy 329.611713 104.530563) (xy 329.611288 105.017302)
+ (xy 329.673581 105.168063) (xy 329.452211 105.212097) (xy 329.248927 105.347927) (xy 329.178454 105.4184) (xy 327.680093 105.4184)
+ (xy 327.740287 105.273437) (xy 327.740712 104.786698) (xy 327.740712 102.246698) (xy 327.740712 99.706698) (xy 327.554838 99.256848)
+ (xy 327.210962 98.912372) (xy 326.761437 98.725713) (xy 326.274698 98.725288) (xy 325.824848 98.911162) (xy 325.480372 99.255038)
+ (xy 325.293713 99.704563) (xy 325.293288 100.191302) (xy 325.479162 100.641152) (xy 325.823038 100.985628) (xy 326.272563 101.172287)
+ (xy 326.759302 101.172712) (xy 327.209152 100.986838) (xy 327.553628 100.642962) (xy 327.740287 100.193437) (xy 327.740712 99.706698)
+ (xy 327.740712 102.246698) (xy 327.554838 101.796848) (xy 327.210962 101.452372) (xy 326.761437 101.265713) (xy 326.274698 101.265288)
+ (xy 325.824848 101.451162) (xy 325.480372 101.795038) (xy 325.293713 102.244563) (xy 325.293288 102.731302) (xy 325.479162 103.181152)
+ (xy 325.823038 103.525628) (xy 326.272563 103.712287) (xy 326.759302 103.712712) (xy 327.209152 103.526838) (xy 327.553628 103.182962)
+ (xy 327.740287 102.733437) (xy 327.740712 102.246698) (xy 327.740712 104.786698) (xy 327.554838 104.336848) (xy 327.210962 103.992372)
+ (xy 326.761437 103.805713) (xy 326.274698 103.805288) (xy 325.824848 103.991162) (xy 325.480372 104.335038) (xy 325.293713 104.784563)
+ (xy 325.293288 105.271302) (xy 325.365226 105.445407) (xy 325.261211 105.466097) (xy 325.066174 105.596416) (xy 325.200287 105.273437)
+ (xy 325.200712 104.786698) (xy 325.014838 104.336848) (xy 324.670962 103.992372) (xy 324.593062 103.960025) (xy 324.555903 103.773211)
+ (xy 324.555903 103.77321) (xy 324.4514 103.616811) (xy 324.669152 103.526838) (xy 325.013628 103.182962) (xy 325.200287 102.733437)
+ (xy 325.200712 102.246698) (xy 325.014838 101.796848) (xy 324.670962 101.452372) (xy 324.593062 101.420025) (xy 324.555903 101.233211)
+ (xy 324.555903 101.23321) (xy 324.4514 101.076811) (xy 324.669152 100.986838) (xy 325.013628 100.642962) (xy 325.200287 100.193437)
+ (xy 325.200712 99.706698) (xy 325.014838 99.256848) (xy 324.670962 98.912372) (xy 324.221437 98.725713) (xy 323.734698 98.725288)
+ (xy 323.5876 98.786067) (xy 323.5876 98.572093) (xy 323.732563 98.632287) (xy 324.219302 98.632712) (xy 324.669152 98.446838)
+ (xy 325.013628 98.102962) (xy 325.200287 97.653437) (xy 325.200712 97.166698) (xy 325.014838 96.716848) (xy 324.670962 96.372372)
+ (xy 324.221437 96.185713) (xy 323.734698 96.185288) (xy 323.631018 96.228127) (xy 324.039073 95.820073) (xy 324.174903 95.61679)
+ (xy 324.174903 95.616789) (xy 324.2226 95.377) (xy 324.2226 95.196331) (xy 324.545308 95.330332) (xy 324.930999 95.330668)
+ (xy 325.28746 95.183382) (xy 325.560423 94.910895) (xy 325.680588 94.621505) (xy 325.694618 94.65546) (xy 325.967105 94.928423)
+ (xy 326.323308 95.076332) (xy 326.708999 95.076668) (xy 327.06546 94.929382) (xy 327.151911 94.84308) (xy 327.237105 94.928423)
+ (xy 327.593308 95.076332) (xy 327.978999 95.076668) (xy 328.33546 94.929382) (xy 328.421911 94.84308) (xy 328.507105 94.928423)
+ (xy 328.863308 95.076332) (xy 329.248999 95.076668) (xy 329.60546 94.929382) (xy 329.878423 94.656895) (xy 330.026332 94.300692)
+ (xy 330.026668 93.915001) (xy 329.879382 93.55854) (xy 329.606895 93.285577) (xy 329.250692 93.137668) (xy 328.865001 93.137332)
+ (xy 328.50854 93.284618) (xy 328.422088 93.370919) (xy 328.336895 93.285577) (xy 327.980692 93.137668) (xy 327.595001 93.137332)
+ (xy 327.23854 93.284618) (xy 327.152088 93.370919) (xy 327.066895 93.285577) (xy 326.710692 93.137668) (xy 326.325001 93.137332)
+ (xy 325.96854 93.284618) (xy 325.695577 93.557105) (xy 325.575411 93.846494) (xy 325.561382 93.81254) (xy 325.3656 93.616415)
+ (xy 325.3656 91.059) (xy 325.317903 90.819211) (xy 325.317903 90.81921) (xy 325.182073 90.615927) (xy 325.070714 90.504568)
+ (xy 325.184999 90.504668) (xy 325.54146 90.357382) (xy 325.814423 90.084895) (xy 325.962332 89.728692) (xy 325.962668 89.343001)
+ (xy 325.815382 88.98654) (xy 325.677114 88.848031) (xy 326.071073 88.454073) (xy 326.206902 88.25079) (xy 326.206903 88.250789)
+ (xy 326.254599 88.011) (xy 326.2546 88.011) (xy 326.2546 84.310378) (xy 326.449423 84.115895) (xy 326.597332 83.759692)
+ (xy 326.597668 83.374001) (xy 326.450382 83.01754) (xy 326.2546 82.821415) (xy 326.2546 71.4926) (xy 348.124621 71.4926)
+ (xy 348.158318 71.526356) (xy 348.047577 71.636905) (xy 347.899668 71.993108) (xy 347.899332 72.378799) (xy 348.046618 72.73526)
+ (xy 348.319105 73.008223) (xy 348.675308 73.156132) (xy 349.060999 73.156468) (xy 349.41746 73.009182) (xy 349.690423 72.736695)
+ (xy 349.838332 72.380492) (xy 349.838668 71.994801) (xy 349.691382 71.63834) (xy 349.579681 71.526443) (xy 349.690423 71.415895)
+ (xy 349.838332 71.059692) (xy 349.838668 70.674001) (xy 349.711668 70.366636) (xy 349.711668 65.467001) (xy 349.564382 65.11054)
+ (xy 349.291895 64.837577) (xy 348.935692 64.689668) (xy 348.550001 64.689332) (xy 348.19354 64.836618) (xy 347.920577 65.109105)
+ (xy 347.772668 65.465308) (xy 347.772332 65.850999) (xy 347.919618 66.20746) (xy 348.192105 66.480423) (xy 348.548308 66.628332)
+ (xy 348.933999 66.628668) (xy 349.29046 66.481382) (xy 349.563423 66.208895) (xy 349.711332 65.852692) (xy 349.711668 65.467001)
+ (xy 349.711668 70.366636) (xy 349.691382 70.31754) (xy 349.418895 70.044577) (xy 349.062692 69.896668) (xy 348.677001 69.896332)
+ (xy 348.32054 70.043618) (xy 348.124415 70.2394) (xy 346.536668 70.2394) (xy 346.536668 62.419001) (xy 346.389382 62.06254)
+ (xy 346.116895 61.789577) (xy 345.760692 61.641668) (xy 345.375001 61.641332) (xy 345.01854 61.788618) (xy 344.745577 62.061105)
+ (xy 344.597668 62.417308) (xy 344.597332 62.802999) (xy 344.744618 63.15946) (xy 345.017105 63.432423) (xy 345.373308 63.580332)
+ (xy 345.758999 63.580668) (xy 346.11546 63.433382) (xy 346.388423 63.160895) (xy 346.536332 62.804692) (xy 346.536668 62.419001)
+ (xy 346.536668 70.2394) (xy 343.361668 70.2394) (xy 343.361668 63.054001) (xy 343.214382 62.69754) (xy 342.941895 62.424577)
+ (xy 342.585692 62.276668) (xy 342.200001 62.276332) (xy 341.84354 62.423618) (xy 341.570577 62.696105) (xy 341.422668 63.052308)
+ (xy 341.422332 63.437999) (xy 341.569618 63.79446) (xy 341.842105 64.067423) (xy 342.198308 64.215332) (xy 342.583999 64.215668)
+ (xy 342.94046 64.068382) (xy 343.213423 63.795895) (xy 343.361332 63.439692) (xy 343.361668 63.054001) (xy 343.361668 70.2394)
+ (xy 341.075668 70.2394) (xy 341.075668 63.943001) (xy 340.928382 63.58654) (xy 340.655895 63.313577) (xy 340.299692 63.165668)
+ (xy 339.914001 63.165332) (xy 339.55754 63.312618) (xy 339.284577 63.585105) (xy 339.136668 63.941308) (xy 339.136332 64.326999)
+ (xy 339.141595 64.339738) (xy 338.877895 64.075577) (xy 338.521692 63.927668) (xy 338.136001 63.927332) (xy 337.77954 64.074618)
+ (xy 337.506577 64.347105) (xy 337.358668 64.703308) (xy 337.358332 65.088999) (xy 337.505618 65.44546) (xy 337.778105 65.718423)
+ (xy 338.134308 65.866332) (xy 338.519999 65.866668) (xy 338.87646 65.719382) (xy 339.149423 65.446895) (xy 339.297332 65.090692)
+ (xy 339.297668 64.705001) (xy 339.292404 64.692261) (xy 339.556105 64.956423) (xy 339.912308 65.104332) (xy 340.297999 65.104668)
+ (xy 340.65446 64.957382) (xy 340.927423 64.684895) (xy 341.075332 64.328692) (xy 341.075668 63.943001) (xy 341.075668 70.2394)
+ (xy 327.733331 70.2394) (xy 327.867332 69.916692) (xy 327.867668 69.531001) (xy 327.720382 69.17454) (xy 327.447895 68.901577)
+ (xy 327.091692 68.753668) (xy 326.706001 68.753332) (xy 326.34954 68.900618) (xy 326.2546 68.995392) (xy 326.2546 67.691)
+ (xy 326.232367 67.579231) (xy 326.43046 67.497382) (xy 326.644022 67.284191) (xy 326.729105 67.369423) (xy 327.085308 67.517332)
+ (xy 327.470999 67.517668) (xy 327.82746 67.370382) (xy 328.100423 67.097895) (xy 328.248332 66.741692) (xy 328.248668 66.356001)
+ (xy 328.101382 65.99954) (xy 327.9056 65.803415) (xy 327.9056 63.753066) (xy 328.101308 63.834332) (xy 328.486999 63.834668)
+ (xy 328.84346 63.687382) (xy 329.116423 63.414895) (xy 329.264332 63.058692) (xy 329.264668 62.673001) (xy 329.117382 62.31654)
+ (xy 328.844895 62.043577) (xy 328.488692 61.895668) (xy 328.103001 61.895332) (xy 327.9056 61.976896) (xy 327.9056 60.96)
+ (xy 327.857903 60.720211) (xy 327.857903 60.72021) (xy 327.722073 60.516927) (xy 325.817073 58.611927) (xy 325.61379 58.476097)
+ (xy 325.374 58.4284) (xy 322.689378 58.4284) (xy 322.494895 58.233577) (xy 322.138692 58.085668) (xy 321.753001 58.085332)
+ (xy 321.4286 58.219371) (xy 321.4286 57.785) (xy 321.401667 57.6496) (xy 328.797454 57.6496) (xy 330.9704 59.822546)
+ (xy 330.9704 61.843454) (xy 330.899927 61.913927) (xy 330.764097 62.11721) (xy 330.7164 62.357) (xy 330.7164 64.262)
+ (xy 330.764097 64.50179) (xy 330.899927 64.705073) (xy 332.2404 66.045546) (xy 332.2404 67.708621) (xy 332.045577 67.903105)
+ (xy 331.897668 68.259308) (xy 331.897332 68.644999) (xy 331.978896 68.8424) (xy 331.5886 68.8424) (xy 331.5886 67.056)
+ (xy 331.550336 66.863635) (xy 331.550668 66.483001) (xy 331.403382 66.12654) (xy 331.130895 65.853577) (xy 330.774692 65.705668)
+ (xy 330.389001 65.705332) (xy 330.280668 65.750094) (xy 330.280668 64.451001) (xy 330.133382 64.09454) (xy 329.860895 63.821577)
+ (xy 329.504692 63.673668) (xy 329.119001 63.673332) (xy 328.76254 63.820618) (xy 328.489577 64.093105) (xy 328.341668 64.449308)
+ (xy 328.341332 64.834999) (xy 328.488618 65.19146) (xy 328.761105 65.464423) (xy 329.117308 65.612332) (xy 329.502999 65.612668)
+ (xy 329.85946 65.465382) (xy 330.132423 65.192895) (xy 330.280332 64.836692) (xy 330.280668 64.451001) (xy 330.280668 65.750094)
+ (xy 330.03254 65.852618) (xy 329.759577 66.125105) (xy 329.611668 66.481308) (xy 329.611419 66.765985) (xy 329.504692 66.721668)
+ (xy 329.119001 66.721332) (xy 328.76254 66.868618) (xy 328.489577 67.141105) (xy 328.341668 67.497308) (xy 328.341332 67.882999)
+ (xy 328.488618 68.23946) (xy 328.761105 68.512423) (xy 329.117308 68.660332) (xy 329.502999 68.660668) (xy 329.85946 68.513382)
+ (xy 330.132423 68.240895) (xy 330.280332 67.884692) (xy 330.28058 67.600014) (xy 330.3354 67.622777) (xy 330.3354 69.215)
+ (xy 330.383097 69.45479) (xy 330.518927 69.658073) (xy 330.772927 69.912073) (xy 330.97621 70.047902) (xy 330.976211 70.047903)
+ (xy 331.216 70.0956) (xy 333.502 70.0956) (xy 333.741789 70.047903) (xy 333.74179 70.047903) (xy 333.945073 69.912073)
+ (xy 334.199073 69.658073) (xy 334.334902 69.45479) (xy 334.334903 69.454789) (xy 334.3826 69.215) (xy 334.3826 65.866382)
+ (xy 334.709999 65.866668) (xy 335.06646 65.719382) (xy 335.339423 65.446895) (xy 335.487332 65.090692) (xy 335.487668 64.705001)
+ (xy 335.340382 64.34854) (xy 335.067895 64.075577) (xy 334.711692 63.927668) (xy 334.3826 63.927381) (xy 334.3826 63.736378)
+ (xy 334.577423 63.541895) (xy 334.725332 63.185692) (xy 334.725668 62.800001) (xy 334.578382 62.44354) (xy 334.305895 62.170577)
+ (xy 333.949692 62.022668) (xy 333.564001 62.022332) (xy 333.20754 62.169618) (xy 332.934577 62.442105) (xy 332.932107 62.448051)
+ (xy 332.781895 62.297577) (xy 332.425692 62.149668) (xy 332.214353 62.149483) (xy 332.2236 62.103) (xy 332.2236 59.563)
+ (xy 332.175903 59.323211) (xy 332.175902 59.32321) (xy 332.040073 59.119927) (xy 330.061746 57.1416) (xy 345.704044 57.1416)
+ (xy 345.39954 57.267418) (xy 345.126577 57.539905) (xy 344.978668 57.896108) (xy 344.978332 58.281799) (xy 345.125618 58.63826)
+ (xy 345.398105 58.911223) (xy 345.754308 59.059132) (xy 346.139999 59.059468) (xy 346.49646 58.912182) (xy 346.769423 58.639695)
+ (xy 346.917332 58.283492) (xy 346.917668 57.897801) (xy 346.770382 57.54134) (xy 346.497895 57.268377) (xy 346.192583 57.1416)
+ (xy 348.821625 57.1416) (xy 348.70154 57.191218) (xy 348.428577 57.463705) (xy 348.280668 57.819908) (xy 348.280332 58.205599)
+ (xy 348.427618 58.56206) (xy 348.700105 58.835023) (xy 349.056308 58.982932) (xy 349.441999 58.983268) (xy 349.79846 58.835982)
+ (xy 350.071423 58.563495) (xy 350.219332 58.207292) (xy 350.219668 57.821601) (xy 350.072382 57.46514) (xy 349.799895 57.192177)
+ (xy 349.678092 57.1416) (xy 364.111 57.1416) (xy 364.111 133.7394)
+ )
+ )
+ )
+ (zone (net 243) (net_name GND) (layer GND_layer) (tstamp 5402D98E) (hatch edge 0.508)
+ (connect_pads (clearance 0.4))
+ (min_thickness 0.25)
+ (fill yes (arc_segments 16) (thermal_gap 0.4) (thermal_bridge_width 0.3))
+ (polygon
+ (pts
+ (xy 55 58) (xy 365 57.5) (xy 365 134) (xy 204.5 134) (xy 204.5 145)
+ (xy 195 145) (xy 185.5 154.5) (xy 95 155) (xy 95 154.5) (xy 55 154)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 311.072497 60.847142) (xy 311.037142 60.882497) (xy 311.023 60.868355) (xy 311.008857 60.882497) (xy 310.973502 60.847142)
+ (xy 310.987645 60.833) (xy 310.973502 60.818857) (xy 311.008857 60.783502) (xy 311.023 60.797645) (xy 311.037142 60.783502)
+ (xy 311.072497 60.818857) (xy 311.058355 60.833) (xy 311.072497 60.847142)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 364.875 133.7394) (xy 362.7925 133.7394) (xy 362.7925 87.289929) (xy 362.7925 87.081071) (xy 362.7925 85.684071)
+ (xy 362.712574 85.491111) (xy 362.692463 85.471) (xy 362.712574 85.450889) (xy 362.7925 85.257929) (xy 362.7925 85.049071)
+ (xy 362.7925 83.652071) (xy 362.712574 83.459111) (xy 362.564889 83.311426) (xy 362.371929 83.2315) (xy 362.163071 83.2315)
+ (xy 360.766071 83.2315) (xy 360.573111 83.311426) (xy 360.425426 83.459111) (xy 360.3455 83.652071) (xy 360.3455 83.860929)
+ (xy 360.3455 85.257929) (xy 360.425426 85.450889) (xy 360.445537 85.471) (xy 360.425426 85.491111) (xy 360.3455 85.684071)
+ (xy 360.3455 85.892929) (xy 360.3455 87.289929) (xy 360.425426 87.482889) (xy 360.573111 87.630574) (xy 360.766071 87.7105)
+ (xy 360.974929 87.7105) (xy 362.371929 87.7105) (xy 362.564889 87.630574) (xy 362.712574 87.482889) (xy 362.7925 87.289929)
+ (xy 362.7925 133.7394) (xy 360.553 133.7394) (xy 360.379668 133.7394) (xy 360.379668 130.618001) (xy 360.232382 130.26154)
+ (xy 359.959895 129.988577) (xy 359.617668 129.846471) (xy 359.617668 77.913001) (xy 359.470382 77.55654) (xy 359.197895 77.283577)
+ (xy 359.109668 77.246941) (xy 359.109668 72.833001) (xy 358.962382 72.47654) (xy 358.689895 72.203577) (xy 358.333692 72.055668)
+ (xy 357.948001 72.055332) (xy 357.59154 72.202618) (xy 357.318577 72.475105) (xy 357.170668 72.831308) (xy 357.170332 73.216999)
+ (xy 357.317618 73.57346) (xy 357.590105 73.846423) (xy 357.946308 73.994332) (xy 358.331999 73.994668) (xy 358.68846 73.847382)
+ (xy 358.961423 73.574895) (xy 359.109332 73.218692) (xy 359.109668 72.833001) (xy 359.109668 77.246941) (xy 358.841692 77.135668)
+ (xy 358.456001 77.135332) (xy 358.09954 77.282618) (xy 357.826577 77.555105) (xy 357.678668 77.911308) (xy 357.678332 78.296999)
+ (xy 357.825618 78.65346) (xy 358.098105 78.926423) (xy 358.454308 79.074332) (xy 358.839999 79.074668) (xy 359.19646 78.927382)
+ (xy 359.469423 78.654895) (xy 359.617332 78.298692) (xy 359.617668 77.913001) (xy 359.617668 129.846471) (xy 359.603692 129.840668)
+ (xy 359.218001 129.840332) (xy 359.046245 129.911299) (xy 359.046245 96.747972) (xy 359.046245 91.667972) (xy 358.83143 91.14808)
+ (xy 358.434013 90.749968) (xy 357.914496 90.534246) (xy 357.351972 90.533755) (xy 357.077668 90.647095) (xy 357.077668 80.961001)
+ (xy 356.930382 80.60454) (xy 356.657895 80.331577) (xy 356.301692 80.183668) (xy 355.916001 80.183332) (xy 355.55954 80.330618)
+ (xy 355.426668 80.463258) (xy 355.426668 63.562001) (xy 355.279382 63.20554) (xy 355.006895 62.932577) (xy 354.650692 62.784668)
+ (xy 354.265001 62.784332) (xy 353.90854 62.931618) (xy 353.635577 63.204105) (xy 353.487668 63.560308) (xy 353.487332 63.945999)
+ (xy 353.634618 64.30246) (xy 353.907105 64.575423) (xy 354.263308 64.723332) (xy 354.648999 64.723668) (xy 355.00546 64.576382)
+ (xy 355.278423 64.303895) (xy 355.426332 63.947692) (xy 355.426668 63.562001) (xy 355.426668 80.463258) (xy 355.286577 80.603105)
+ (xy 355.138668 80.959308) (xy 355.138332 81.344999) (xy 355.285618 81.70146) (xy 355.558105 81.974423) (xy 355.914308 82.122332)
+ (xy 356.299999 82.122668) (xy 356.65646 81.975382) (xy 356.929423 81.702895) (xy 357.077332 81.346692) (xy 357.077668 80.961001)
+ (xy 357.077668 90.647095) (xy 356.83208 90.74857) (xy 356.433968 91.145987) (xy 356.218246 91.665504) (xy 356.217755 92.228028)
+ (xy 356.43257 92.74792) (xy 356.829987 93.146032) (xy 357.349504 93.361754) (xy 357.912028 93.362245) (xy 358.43192 93.14743)
+ (xy 358.830032 92.750013) (xy 359.045754 92.230496) (xy 359.046245 91.667972) (xy 359.046245 96.747972) (xy 358.83143 96.22808)
+ (xy 358.434013 95.829968) (xy 357.914496 95.614246) (xy 357.351972 95.613755) (xy 356.83208 95.82857) (xy 356.433968 96.225987)
+ (xy 356.218246 96.745504) (xy 356.217755 97.308028) (xy 356.43257 97.82792) (xy 356.829987 98.226032) (xy 357.349504 98.441754)
+ (xy 357.912028 98.442245) (xy 358.43192 98.22743) (xy 358.830032 97.830013) (xy 359.045754 97.310496) (xy 359.046245 96.747972)
+ (xy 359.046245 129.911299) (xy 358.86154 129.987618) (xy 358.588577 130.260105) (xy 358.440668 130.616308) (xy 358.440332 131.001999)
+ (xy 358.587618 131.35846) (xy 358.860105 131.631423) (xy 359.216308 131.779332) (xy 359.601999 131.779668) (xy 359.95846 131.632382)
+ (xy 360.231423 131.359895) (xy 360.379332 131.003692) (xy 360.379668 130.618001) (xy 360.379668 133.7394) (xy 358.994532 133.7394)
+ (xy 359.215423 133.518895) (xy 359.363332 133.162692) (xy 359.363668 132.777001) (xy 359.216382 132.42054) (xy 358.943895 132.147577)
+ (xy 358.587692 131.999668) (xy 358.202001 131.999332) (xy 357.84554 132.146618) (xy 357.572577 132.419105) (xy 357.458712 132.693321)
+ (xy 357.458712 124.852698) (xy 357.458712 122.312698) (xy 357.458712 119.772698) (xy 357.458712 117.232698) (xy 357.458712 114.692698)
+ (xy 357.458712 112.152698) (xy 357.458712 109.612698) (xy 357.458712 107.072698) (xy 357.458712 104.532698) (xy 357.272838 104.082848)
+ (xy 356.928962 103.738372) (xy 356.479437 103.551713) (xy 355.992698 103.551288) (xy 355.542848 103.737162) (xy 355.198372 104.081038)
+ (xy 355.176953 104.13262) (xy 355.176953 84.2352) (xy 354.999368 83.782014) (xy 354.972716 83.742128) (xy 354.755766 83.683589)
+ (xy 354.720411 83.718944) (xy 354.720411 83.648234) (xy 354.661872 83.431284) (xy 354.283668 83.266036) (xy 354.283668 68.134001)
+ (xy 354.136382 67.77754) (xy 353.863895 67.504577) (xy 353.507692 67.356668) (xy 353.122001 67.356332) (xy 352.76554 67.503618)
+ (xy 352.492577 67.776105) (xy 352.344668 68.132308) (xy 352.344332 68.517999) (xy 352.491618 68.87446) (xy 352.764105 69.147423)
+ (xy 353.120308 69.295332) (xy 353.505999 69.295668) (xy 353.86246 69.148382) (xy 354.135423 68.875895) (xy 354.283332 68.519692)
+ (xy 354.283668 68.134001) (xy 354.283668 83.266036) (xy 354.215849 83.236405) (xy 354.110783 83.234384) (xy 354.156332 83.124692)
+ (xy 354.156668 82.739001) (xy 354.156668 75.246001) (xy 354.009382 74.88954) (xy 353.91038 74.790366) (xy 354.008423 74.692495)
+ (xy 354.156332 74.336292) (xy 354.156668 73.950601) (xy 354.156668 70.699401) (xy 354.009382 70.34294) (xy 353.736895 70.069977)
+ (xy 353.380692 69.922068) (xy 352.995001 69.921732) (xy 352.63854 70.069018) (xy 352.365577 70.341505) (xy 352.217668 70.697708)
+ (xy 352.217332 71.083399) (xy 352.364618 71.43986) (xy 352.637105 71.712823) (xy 352.993308 71.860732) (xy 353.378999 71.861068)
+ (xy 353.73546 71.713782) (xy 354.008423 71.441295) (xy 354.156332 71.085092) (xy 354.156668 70.699401) (xy 354.156668 73.950601)
+ (xy 354.009382 73.59414) (xy 353.736895 73.321177) (xy 353.380692 73.173268) (xy 352.995001 73.172932) (xy 352.63854 73.320218)
+ (xy 352.365577 73.592705) (xy 352.217668 73.948908) (xy 352.217332 74.334599) (xy 352.364618 74.69106) (xy 352.463619 74.790233)
+ (xy 352.365577 74.888105) (xy 352.217668 75.244308) (xy 352.217332 75.629999) (xy 352.364618 75.98646) (xy 352.637105 76.259423)
+ (xy 352.993308 76.407332) (xy 353.378999 76.407668) (xy 353.73546 76.260382) (xy 354.008423 75.987895) (xy 354.156332 75.631692)
+ (xy 354.156668 75.246001) (xy 354.156668 82.739001) (xy 354.009382 82.38254) (xy 353.736895 82.109577) (xy 353.380692 81.961668)
+ (xy 352.995001 81.961332) (xy 352.63854 82.108618) (xy 352.365577 82.381105) (xy 352.217668 82.737308) (xy 352.217332 83.122999)
+ (xy 352.364618 83.47946) (xy 352.637105 83.752423) (xy 352.877221 83.852128) (xy 352.730405 84.188151) (xy 352.721047 84.6748)
+ (xy 352.898632 85.127986) (xy 352.925284 85.167872) (xy 353.142234 85.226411) (xy 353.913645 84.455) (xy 353.899502 84.440857)
+ (xy 353.934857 84.405502) (xy 353.949 84.419645) (xy 354.720411 83.648234) (xy 354.720411 83.718944) (xy 353.984355 84.455)
+ (xy 354.755766 85.226411) (xy 354.972716 85.167872) (xy 355.167595 84.721849) (xy 355.176953 84.2352) (xy 355.176953 104.13262)
+ (xy 355.172712 104.142834) (xy 355.172712 86.244698) (xy 354.986838 85.794848) (xy 354.663868 85.471315) (xy 354.720411 85.261766)
+ (xy 353.949 84.490355) (xy 353.177589 85.261766) (xy 353.234242 85.471728) (xy 352.912372 85.793038) (xy 352.725713 86.242563)
+ (xy 352.725288 86.729302) (xy 352.911162 87.179152) (xy 353.255038 87.523628) (xy 353.704563 87.710287) (xy 354.191302 87.710712)
+ (xy 354.641152 87.524838) (xy 354.985628 87.180962) (xy 355.172287 86.731437) (xy 355.172712 86.244698) (xy 355.172712 104.142834)
+ (xy 355.011713 104.530563) (xy 355.011288 105.017302) (xy 355.197162 105.467152) (xy 355.541038 105.811628) (xy 355.990563 105.998287)
+ (xy 356.477302 105.998712) (xy 356.927152 105.812838) (xy 357.271628 105.468962) (xy 357.458287 105.019437) (xy 357.458712 104.532698)
+ (xy 357.458712 107.072698) (xy 357.272838 106.622848) (xy 356.928962 106.278372) (xy 356.479437 106.091713) (xy 355.992698 106.091288)
+ (xy 355.542848 106.277162) (xy 355.198372 106.621038) (xy 355.011713 107.070563) (xy 355.011288 107.557302) (xy 355.197162 108.007152)
+ (xy 355.541038 108.351628) (xy 355.990563 108.538287) (xy 356.477302 108.538712) (xy 356.927152 108.352838) (xy 357.271628 108.008962)
+ (xy 357.458287 107.559437) (xy 357.458712 107.072698) (xy 357.458712 109.612698) (xy 357.272838 109.162848) (xy 356.928962 108.818372)
+ (xy 356.479437 108.631713) (xy 355.992698 108.631288) (xy 355.542848 108.817162) (xy 355.198372 109.161038) (xy 355.011713 109.610563)
+ (xy 355.011288 110.097302) (xy 355.197162 110.547152) (xy 355.541038 110.891628) (xy 355.990563 111.078287) (xy 356.477302 111.078712)
+ (xy 356.927152 110.892838) (xy 357.271628 110.548962) (xy 357.458287 110.099437) (xy 357.458712 109.612698) (xy 357.458712 112.152698)
+ (xy 357.272838 111.702848) (xy 356.928962 111.358372) (xy 356.479437 111.171713) (xy 355.992698 111.171288) (xy 355.542848 111.357162)
+ (xy 355.198372 111.701038) (xy 355.011713 112.150563) (xy 355.011288 112.637302) (xy 355.197162 113.087152) (xy 355.541038 113.431628)
+ (xy 355.990563 113.618287) (xy 356.477302 113.618712) (xy 356.927152 113.432838) (xy 357.271628 113.088962) (xy 357.458287 112.639437)
+ (xy 357.458712 112.152698) (xy 357.458712 114.692698) (xy 357.272838 114.242848) (xy 356.928962 113.898372) (xy 356.479437 113.711713)
+ (xy 355.992698 113.711288) (xy 355.542848 113.897162) (xy 355.198372 114.241038) (xy 355.011713 114.690563) (xy 355.011288 115.177302)
+ (xy 355.197162 115.627152) (xy 355.541038 115.971628) (xy 355.990563 116.158287) (xy 356.477302 116.158712) (xy 356.927152 115.972838)
+ (xy 357.271628 115.628962) (xy 357.458287 115.179437) (xy 357.458712 114.692698) (xy 357.458712 117.232698) (xy 357.272838 116.782848)
+ (xy 356.928962 116.438372) (xy 356.479437 116.251713) (xy 355.992698 116.251288) (xy 355.542848 116.437162) (xy 355.198372 116.781038)
+ (xy 355.011713 117.230563) (xy 355.011288 117.717302) (xy 355.197162 118.167152) (xy 355.541038 118.511628) (xy 355.990563 118.698287)
+ (xy 356.477302 118.698712) (xy 356.927152 118.512838) (xy 357.271628 118.168962) (xy 357.458287 117.719437) (xy 357.458712 117.232698)
+ (xy 357.458712 119.772698) (xy 357.272838 119.322848) (xy 356.928962 118.978372) (xy 356.479437 118.791713) (xy 355.992698 118.791288)
+ (xy 355.542848 118.977162) (xy 355.198372 119.321038) (xy 355.011713 119.770563) (xy 355.011288 120.257302) (xy 355.197162 120.707152)
+ (xy 355.541038 121.051628) (xy 355.990563 121.238287) (xy 356.477302 121.238712) (xy 356.927152 121.052838) (xy 357.271628 120.708962)
+ (xy 357.458287 120.259437) (xy 357.458712 119.772698) (xy 357.458712 122.312698) (xy 357.272838 121.862848) (xy 356.928962 121.518372)
+ (xy 356.479437 121.331713) (xy 355.992698 121.331288) (xy 355.542848 121.517162) (xy 355.198372 121.861038) (xy 355.011713 122.310563)
+ (xy 355.011288 122.797302) (xy 355.197162 123.247152) (xy 355.541038 123.591628) (xy 355.990563 123.778287) (xy 356.477302 123.778712)
+ (xy 356.927152 123.592838) (xy 357.271628 123.248962) (xy 357.458287 122.799437) (xy 357.458712 122.312698) (xy 357.458712 124.852698)
+ (xy 357.272838 124.402848) (xy 356.928962 124.058372) (xy 356.479437 123.871713) (xy 355.992698 123.871288) (xy 355.542848 124.057162)
+ (xy 355.198372 124.401038) (xy 355.011713 124.850563) (xy 355.011288 125.337302) (xy 355.197162 125.787152) (xy 355.541038 126.131628)
+ (xy 355.990563 126.318287) (xy 356.477302 126.318712) (xy 356.927152 126.132838) (xy 357.271628 125.788962) (xy 357.458287 125.339437)
+ (xy 357.458712 124.852698) (xy 357.458712 132.693321) (xy 357.424668 132.775308) (xy 357.424332 133.160999) (xy 357.571618 133.51746)
+ (xy 357.79317 133.7394) (xy 354.918712 133.7394) (xy 354.918712 127.392698) (xy 354.918712 124.852698) (xy 354.918712 122.312698)
+ (xy 354.918712 119.772698) (xy 354.918712 117.232698) (xy 354.918712 114.692698) (xy 354.918712 112.152698) (xy 354.918712 109.612698)
+ (xy 354.918712 107.072698) (xy 354.918712 104.532698) (xy 354.918712 101.992698) (xy 354.732838 101.542848) (xy 354.388962 101.198372)
+ (xy 353.939437 101.011713) (xy 353.775668 101.01157) (xy 353.775668 99.503001) (xy 353.628382 99.14654) (xy 353.355895 98.873577)
+ (xy 352.999692 98.725668) (xy 352.614001 98.725332) (xy 352.25754 98.872618) (xy 351.984577 99.145105) (xy 351.836668 99.501308)
+ (xy 351.836569 99.614429) (xy 351.725001 99.614332) (xy 351.36854 99.761618) (xy 351.095577 100.034105) (xy 350.947668 100.390308)
+ (xy 350.947332 100.775999) (xy 351.044598 101.011403) (xy 350.912698 101.011288) (xy 350.462848 101.197162) (xy 350.118372 101.541038)
+ (xy 349.931713 101.990563) (xy 349.931288 102.477302) (xy 350.117162 102.927152) (xy 350.461038 103.271628) (xy 350.910563 103.458287)
+ (xy 351.397302 103.458712) (xy 351.847152 103.272838) (xy 352.191628 102.928962) (xy 352.378287 102.479437) (xy 352.378712 101.992698)
+ (xy 352.192838 101.542848) (xy 352.176002 101.525982) (xy 352.46546 101.406382) (xy 352.738423 101.133895) (xy 352.886332 100.777692)
+ (xy 352.88643 100.66457) (xy 352.997999 100.664668) (xy 353.35446 100.517382) (xy 353.627423 100.244895) (xy 353.775332 99.888692)
+ (xy 353.775668 99.503001) (xy 353.775668 101.01157) (xy 353.452698 101.011288) (xy 353.002848 101.197162) (xy 352.658372 101.541038)
+ (xy 352.471713 101.990563) (xy 352.471288 102.477302) (xy 352.657162 102.927152) (xy 353.001038 103.271628) (xy 353.450563 103.458287)
+ (xy 353.937302 103.458712) (xy 354.387152 103.272838) (xy 354.731628 102.928962) (xy 354.918287 102.479437) (xy 354.918712 101.992698)
+ (xy 354.918712 104.532698) (xy 354.732838 104.082848) (xy 354.388962 103.738372) (xy 353.939437 103.551713) (xy 353.452698 103.551288)
+ (xy 353.002848 103.737162) (xy 352.658372 104.081038) (xy 352.471713 104.530563) (xy 352.471288 105.017302) (xy 352.657162 105.467152)
+ (xy 353.001038 105.811628) (xy 353.450563 105.998287) (xy 353.937302 105.998712) (xy 354.387152 105.812838) (xy 354.731628 105.468962)
+ (xy 354.918287 105.019437) (xy 354.918712 104.532698) (xy 354.918712 107.072698) (xy 354.732838 106.622848) (xy 354.388962 106.278372)
+ (xy 353.939437 106.091713) (xy 353.452698 106.091288) (xy 353.002848 106.277162) (xy 352.658372 106.621038) (xy 352.471713 107.070563)
+ (xy 352.471288 107.557302) (xy 352.657162 108.007152) (xy 353.001038 108.351628) (xy 353.450563 108.538287) (xy 353.937302 108.538712)
+ (xy 354.387152 108.352838) (xy 354.731628 108.008962) (xy 354.918287 107.559437) (xy 354.918712 107.072698) (xy 354.918712 109.612698)
+ (xy 354.732838 109.162848) (xy 354.388962 108.818372) (xy 353.939437 108.631713) (xy 353.452698 108.631288) (xy 353.002848 108.817162)
+ (xy 352.658372 109.161038) (xy 352.471713 109.610563) (xy 352.471288 110.097302) (xy 352.657162 110.547152) (xy 353.001038 110.891628)
+ (xy 353.450563 111.078287) (xy 353.937302 111.078712) (xy 354.387152 110.892838) (xy 354.731628 110.548962) (xy 354.918287 110.099437)
+ (xy 354.918712 109.612698) (xy 354.918712 112.152698) (xy 354.732838 111.702848) (xy 354.388962 111.358372) (xy 353.939437 111.171713)
+ (xy 353.452698 111.171288) (xy 353.002848 111.357162) (xy 352.658372 111.701038) (xy 352.471713 112.150563) (xy 352.471288 112.637302)
+ (xy 352.657162 113.087152) (xy 353.001038 113.431628) (xy 353.450563 113.618287) (xy 353.937302 113.618712) (xy 354.387152 113.432838)
+ (xy 354.731628 113.088962) (xy 354.918287 112.639437) (xy 354.918712 112.152698) (xy 354.918712 114.692698) (xy 354.732838 114.242848)
+ (xy 354.388962 113.898372) (xy 353.939437 113.711713) (xy 353.452698 113.711288) (xy 353.002848 113.897162) (xy 352.658372 114.241038)
+ (xy 352.471713 114.690563) (xy 352.471288 115.177302) (xy 352.657162 115.627152) (xy 353.001038 115.971628) (xy 353.450563 116.158287)
+ (xy 353.937302 116.158712) (xy 354.387152 115.972838) (xy 354.731628 115.628962) (xy 354.918287 115.179437) (xy 354.918712 114.692698)
+ (xy 354.918712 117.232698) (xy 354.732838 116.782848) (xy 354.388962 116.438372) (xy 353.939437 116.251713) (xy 353.452698 116.251288)
+ (xy 353.002848 116.437162) (xy 352.658372 116.781038) (xy 352.471713 117.230563) (xy 352.471288 117.717302) (xy 352.657162 118.167152)
+ (xy 353.001038 118.511628) (xy 353.450563 118.698287) (xy 353.937302 118.698712) (xy 354.387152 118.512838) (xy 354.731628 118.168962)
+ (xy 354.918287 117.719437) (xy 354.918712 117.232698) (xy 354.918712 119.772698) (xy 354.732838 119.322848) (xy 354.388962 118.978372)
+ (xy 353.939437 118.791713) (xy 353.452698 118.791288) (xy 353.002848 118.977162) (xy 352.658372 119.321038) (xy 352.471713 119.770563)
+ (xy 352.471288 120.257302) (xy 352.657162 120.707152) (xy 353.001038 121.051628) (xy 353.450563 121.238287) (xy 353.937302 121.238712)
+ (xy 354.387152 121.052838) (xy 354.731628 120.708962) (xy 354.918287 120.259437) (xy 354.918712 119.772698) (xy 354.918712 122.312698)
+ (xy 354.732838 121.862848) (xy 354.388962 121.518372) (xy 353.939437 121.331713) (xy 353.452698 121.331288) (xy 353.002848 121.517162)
+ (xy 352.658372 121.861038) (xy 352.471713 122.310563) (xy 352.471288 122.797302) (xy 352.657162 123.247152) (xy 353.001038 123.591628)
+ (xy 353.450563 123.778287) (xy 353.937302 123.778712) (xy 354.387152 123.592838) (xy 354.731628 123.248962) (xy 354.918287 122.799437)
+ (xy 354.918712 122.312698) (xy 354.918712 124.852698) (xy 354.732838 124.402848) (xy 354.388962 124.058372) (xy 353.939437 123.871713)
+ (xy 353.452698 123.871288) (xy 353.002848 124.057162) (xy 352.658372 124.401038) (xy 352.471713 124.850563) (xy 352.471288 125.337302)
+ (xy 352.657162 125.787152) (xy 353.001038 126.131628) (xy 353.450563 126.318287) (xy 353.937302 126.318712) (xy 354.387152 126.132838)
+ (xy 354.731628 125.788962) (xy 354.918287 125.339437) (xy 354.918712 124.852698) (xy 354.918712 127.392698) (xy 354.732838 126.942848)
+ (xy 354.388962 126.598372) (xy 353.939437 126.411713) (xy 353.452698 126.411288) (xy 353.002848 126.597162) (xy 352.658372 126.941038)
+ (xy 352.471713 127.390563) (xy 352.471288 127.877302) (xy 352.657162 128.327152) (xy 353.001038 128.671628) (xy 353.450563 128.858287)
+ (xy 353.937302 128.858712) (xy 354.387152 128.672838) (xy 354.731628 128.328962) (xy 354.918287 127.879437) (xy 354.918712 127.392698)
+ (xy 354.918712 133.7394) (xy 352.378712 133.7394) (xy 352.378712 127.392698) (xy 352.378712 124.852698) (xy 352.378712 104.532698)
+ (xy 352.192838 104.082848) (xy 351.848962 103.738372) (xy 351.399437 103.551713) (xy 350.912698 103.551288) (xy 350.462848 103.737162)
+ (xy 350.118372 104.081038) (xy 349.931713 104.530563) (xy 349.93142 104.865985) (xy 349.838454 104.827382) (xy 349.838712 104.532698)
+ (xy 349.838712 101.992698) (xy 349.838668 101.992591) (xy 349.838668 70.674001) (xy 349.691382 70.31754) (xy 349.418895 70.044577)
+ (xy 349.062692 69.896668) (xy 348.677001 69.896332) (xy 348.32054 70.043618) (xy 348.047577 70.316105) (xy 347.899668 70.672308)
+ (xy 347.899332 71.057999) (xy 348.046618 71.41446) (xy 348.319105 71.687423) (xy 348.675308 71.835332) (xy 349.060999 71.835668)
+ (xy 349.41746 71.688382) (xy 349.690423 71.415895) (xy 349.838332 71.059692) (xy 349.838668 70.674001) (xy 349.838668 101.992591)
+ (xy 349.652838 101.542848) (xy 349.584668 101.474559) (xy 349.584668 79.945001) (xy 349.584668 73.976001) (xy 349.437382 73.61954)
+ (xy 349.164895 73.346577) (xy 348.808692 73.198668) (xy 348.423001 73.198332) (xy 348.06654 73.345618) (xy 347.793577 73.618105)
+ (xy 347.645668 73.974308) (xy 347.645332 74.359999) (xy 347.792618 74.71646) (xy 348.065105 74.989423) (xy 348.421308 75.137332)
+ (xy 348.806999 75.137668) (xy 349.16346 74.990382) (xy 349.436423 74.717895) (xy 349.584332 74.361692) (xy 349.584668 73.976001)
+ (xy 349.584668 79.945001) (xy 349.437382 79.58854) (xy 349.164895 79.315577) (xy 348.808692 79.167668) (xy 348.423001 79.167332)
+ (xy 348.06654 79.314618) (xy 347.793577 79.587105) (xy 347.645668 79.943308) (xy 347.645332 80.328999) (xy 347.792618 80.68546)
+ (xy 348.065105 80.958423) (xy 348.421308 81.106332) (xy 348.806999 81.106668) (xy 349.16346 80.959382) (xy 349.436423 80.686895)
+ (xy 349.584332 80.330692) (xy 349.584668 79.945001) (xy 349.584668 101.474559) (xy 349.308962 101.198372) (xy 348.859437 101.011713)
+ (xy 348.822668 101.01168) (xy 348.822668 81.748401) (xy 348.675382 81.39194) (xy 348.402895 81.118977) (xy 348.046692 80.971068)
+ (xy 347.661001 80.970732) (xy 347.30454 81.118018) (xy 347.031577 81.390505) (xy 346.883668 81.746708) (xy 346.883332 82.132399)
+ (xy 347.030618 82.48886) (xy 347.303105 82.761823) (xy 347.659308 82.909732) (xy 348.044999 82.910068) (xy 348.40146 82.762782)
+ (xy 348.674423 82.490295) (xy 348.822332 82.134092) (xy 348.822668 81.748401) (xy 348.822668 101.01168) (xy 348.372698 101.011288)
+ (xy 347.922848 101.197162) (xy 347.679668 101.439918) (xy 347.679668 94.042001) (xy 347.532382 93.68554) (xy 347.259895 93.412577)
+ (xy 346.903692 93.264668) (xy 346.518001 93.264332) (xy 346.16154 93.411618) (xy 345.888577 93.684105) (xy 345.774408 93.959052)
+ (xy 345.774668 93.661001) (xy 345.647668 93.353636) (xy 345.647668 84.517001) (xy 345.500382 84.16054) (xy 345.227895 83.887577)
+ (xy 344.885668 83.745471) (xy 344.885668 74.738001) (xy 344.738382 74.38154) (xy 344.465895 74.108577) (xy 344.109692 73.960668)
+ (xy 343.724001 73.960332) (xy 343.36754 74.107618) (xy 343.361668 74.113479) (xy 343.361668 63.054001) (xy 343.214382 62.69754)
+ (xy 342.941895 62.424577) (xy 342.585692 62.276668) (xy 342.200001 62.276332) (xy 341.84354 62.423618) (xy 341.570577 62.696105)
+ (xy 341.422668 63.052308) (xy 341.422332 63.437999) (xy 341.569618 63.79446) (xy 341.842105 64.067423) (xy 342.198308 64.215332)
+ (xy 342.583999 64.215668) (xy 342.94046 64.068382) (xy 343.213423 63.795895) (xy 343.361332 63.439692) (xy 343.361668 63.054001)
+ (xy 343.361668 74.113479) (xy 343.094577 74.380105) (xy 342.946668 74.736308) (xy 342.946332 75.121999) (xy 343.093618 75.47846)
+ (xy 343.366105 75.751423) (xy 343.722308 75.899332) (xy 344.107999 75.899668) (xy 344.46446 75.752382) (xy 344.737423 75.479895)
+ (xy 344.885332 75.123692) (xy 344.885668 74.738001) (xy 344.885668 83.745471) (xy 344.871692 83.739668) (xy 344.486001 83.739332)
+ (xy 344.12954 83.886618) (xy 343.856577 84.159105) (xy 343.708668 84.515308) (xy 343.708332 84.900999) (xy 343.855618 85.25746)
+ (xy 344.128105 85.530423) (xy 344.484308 85.678332) (xy 344.869999 85.678668) (xy 345.22646 85.531382) (xy 345.499423 85.258895)
+ (xy 345.647332 84.902692) (xy 345.647668 84.517001) (xy 345.647668 93.353636) (xy 345.627382 93.30454) (xy 345.354895 93.031577)
+ (xy 344.998692 92.883668) (xy 344.613001 92.883332) (xy 344.25654 93.030618) (xy 343.983577 93.303105) (xy 343.895068 93.516257)
+ (xy 343.895068 89.724001) (xy 343.747782 89.36754) (xy 343.475295 89.094577) (xy 343.119092 88.946668) (xy 342.733401 88.946332)
+ (xy 342.37694 89.093618) (xy 342.103977 89.366105) (xy 341.964668 89.701596) (xy 341.964668 84.517001) (xy 341.817382 84.16054)
+ (xy 341.544895 83.887577) (xy 341.188692 83.739668) (xy 341.075668 83.739569) (xy 341.075668 63.943001) (xy 340.928382 63.58654)
+ (xy 340.655895 63.313577) (xy 340.299692 63.165668) (xy 339.914001 63.165332) (xy 339.55754 63.312618) (xy 339.284577 63.585105)
+ (xy 339.136668 63.941308) (xy 339.136332 64.326999) (xy 339.283618 64.68346) (xy 339.556105 64.956423) (xy 339.912308 65.104332)
+ (xy 340.297999 65.104668) (xy 340.65446 64.957382) (xy 340.927423 64.684895) (xy 341.075332 64.328692) (xy 341.075668 63.943001)
+ (xy 341.075668 83.739569) (xy 340.803001 83.739332) (xy 340.44654 83.886618) (xy 340.173577 84.159105) (xy 340.025668 84.515308)
+ (xy 340.025332 84.900999) (xy 340.172618 85.25746) (xy 340.445105 85.530423) (xy 340.801308 85.678332) (xy 341.186999 85.678668)
+ (xy 341.54346 85.531382) (xy 341.816423 85.258895) (xy 341.964332 84.902692) (xy 341.964668 84.517001) (xy 341.964668 89.701596)
+ (xy 341.956068 89.722308) (xy 341.955732 90.107999) (xy 342.103018 90.46446) (xy 342.375505 90.737423) (xy 342.731708 90.885332)
+ (xy 343.117399 90.885668) (xy 343.47386 90.738382) (xy 343.746823 90.465895) (xy 343.894732 90.109692) (xy 343.895068 89.724001)
+ (xy 343.895068 93.516257) (xy 343.835668 93.659308) (xy 343.835332 94.044999) (xy 343.982618 94.40146) (xy 344.255105 94.674423)
+ (xy 344.611308 94.822332) (xy 344.996999 94.822668) (xy 345.35346 94.675382) (xy 345.626423 94.402895) (xy 345.740591 94.127947)
+ (xy 345.740332 94.425999) (xy 345.887618 94.78246) (xy 346.160105 95.055423) (xy 346.516308 95.203332) (xy 346.901999 95.203668)
+ (xy 347.25846 95.056382) (xy 347.531423 94.783895) (xy 347.679332 94.427692) (xy 347.679668 94.042001) (xy 347.679668 101.439918)
+ (xy 347.578372 101.541038) (xy 347.391713 101.990563) (xy 347.391288 102.477302) (xy 347.577162 102.927152) (xy 347.921038 103.271628)
+ (xy 348.370563 103.458287) (xy 348.857302 103.458712) (xy 349.307152 103.272838) (xy 349.651628 102.928962) (xy 349.838287 102.479437)
+ (xy 349.838712 101.992698) (xy 349.838712 104.532698) (xy 349.652838 104.082848) (xy 349.308962 103.738372) (xy 348.859437 103.551713)
+ (xy 348.372698 103.551288) (xy 347.922848 103.737162) (xy 347.578372 104.081038) (xy 347.391713 104.530563) (xy 347.391288 105.017302)
+ (xy 347.577162 105.467152) (xy 347.921038 105.811628) (xy 348.370563 105.998287) (xy 348.667756 105.998546) (xy 348.808618 106.33946)
+ (xy 349.081105 106.612423) (xy 349.437308 106.760332) (xy 349.822999 106.760668) (xy 350.17946 106.613382) (xy 350.452423 106.340895)
+ (xy 350.600332 105.984692) (xy 350.600432 105.869509) (xy 350.910563 105.998287) (xy 351.397302 105.998712) (xy 351.847152 105.812838)
+ (xy 352.191628 105.468962) (xy 352.378287 105.019437) (xy 352.378712 104.532698) (xy 352.378712 124.852698) (xy 352.192838 124.402848)
+ (xy 351.848962 124.058372) (xy 351.399437 123.871713) (xy 350.912698 123.871288) (xy 350.462848 124.057162) (xy 350.118372 124.401038)
+ (xy 349.931713 124.850563) (xy 349.931288 125.337302) (xy 350.117162 125.787152) (xy 350.461038 126.131628) (xy 350.910563 126.318287)
+ (xy 351.397302 126.318712) (xy 351.847152 126.132838) (xy 352.191628 125.788962) (xy 352.378287 125.339437) (xy 352.378712 124.852698)
+ (xy 352.378712 127.392698) (xy 352.192838 126.942848) (xy 351.848962 126.598372) (xy 351.399437 126.411713) (xy 350.912698 126.411288)
+ (xy 350.462848 126.597162) (xy 350.118372 126.941038) (xy 349.931713 127.390563) (xy 349.931288 127.877302) (xy 350.117162 128.327152)
+ (xy 350.461038 128.671628) (xy 350.910563 128.858287) (xy 351.397302 128.858712) (xy 351.847152 128.672838) (xy 352.191628 128.328962)
+ (xy 352.378287 127.879437) (xy 352.378712 127.392698) (xy 352.378712 133.7394) (xy 349.838712 133.7394) (xy 349.838712 127.392698)
+ (xy 349.838712 124.852698) (xy 349.652838 124.402848) (xy 349.584668 124.334559) (xy 349.584668 120.204001) (xy 349.437382 119.84754)
+ (xy 349.164895 119.574577) (xy 348.808692 119.426668) (xy 348.423001 119.426332) (xy 348.06654 119.573618) (xy 347.793577 119.846105)
+ (xy 347.645668 120.202308) (xy 347.645332 120.587999) (xy 347.792618 120.94446) (xy 348.065105 121.217423) (xy 348.421308 121.365332)
+ (xy 348.806999 121.365668) (xy 349.16346 121.218382) (xy 349.436423 120.945895) (xy 349.584332 120.589692) (xy 349.584668 120.204001)
+ (xy 349.584668 124.334559) (xy 349.308962 124.058372) (xy 348.859437 123.871713) (xy 348.372698 123.871288) (xy 347.922848 124.057162)
+ (xy 347.578372 124.401038) (xy 347.391713 124.850563) (xy 347.391288 125.337302) (xy 347.577162 125.787152) (xy 347.921038 126.131628)
+ (xy 348.370563 126.318287) (xy 348.857302 126.318712) (xy 349.307152 126.132838) (xy 349.651628 125.788962) (xy 349.838287 125.339437)
+ (xy 349.838712 124.852698) (xy 349.838712 127.392698) (xy 349.652838 126.942848) (xy 349.308962 126.598372) (xy 348.859437 126.411713)
+ (xy 348.372698 126.411288) (xy 347.922848 126.597162) (xy 347.578372 126.941038) (xy 347.391713 127.390563) (xy 347.391288 127.877302)
+ (xy 347.577162 128.327152) (xy 347.921038 128.671628) (xy 348.370563 128.858287) (xy 348.857302 128.858712) (xy 349.307152 128.672838)
+ (xy 349.651628 128.328962) (xy 349.838287 127.879437) (xy 349.838712 127.392698) (xy 349.838712 133.7394) (xy 347.298712 133.7394)
+ (xy 347.298712 127.392698) (xy 347.298712 124.852698) (xy 347.298712 104.532698) (xy 347.298712 101.992698) (xy 347.112838 101.542848)
+ (xy 346.768962 101.198372) (xy 346.319437 101.011713) (xy 345.832698 101.011288) (xy 345.382848 101.197162) (xy 345.038372 101.541038)
+ (xy 344.851713 101.990563) (xy 344.851288 102.477302) (xy 345.037162 102.927152) (xy 345.381038 103.271628) (xy 345.830563 103.458287)
+ (xy 346.317302 103.458712) (xy 346.767152 103.272838) (xy 347.111628 102.928962) (xy 347.298287 102.479437) (xy 347.298712 101.992698)
+ (xy 347.298712 104.532698) (xy 347.112838 104.082848) (xy 346.768962 103.738372) (xy 346.319437 103.551713) (xy 345.832698 103.551288)
+ (xy 345.382848 103.737162) (xy 345.038372 104.081038) (xy 344.851713 104.530563) (xy 344.851288 105.017302) (xy 345.037162 105.467152)
+ (xy 345.381038 105.811628) (xy 345.830563 105.998287) (xy 346.317302 105.998712) (xy 346.767152 105.812838) (xy 347.111628 105.468962)
+ (xy 347.298287 105.019437) (xy 347.298712 104.532698) (xy 347.298712 124.852698) (xy 347.112838 124.402848) (xy 346.768962 124.058372)
+ (xy 346.319437 123.871713) (xy 345.832698 123.871288) (xy 345.382848 124.057162) (xy 345.038372 124.401038) (xy 344.851713 124.850563)
+ (xy 344.851288 125.337302) (xy 345.037162 125.787152) (xy 345.381038 126.131628) (xy 345.830563 126.318287) (xy 346.317302 126.318712)
+ (xy 346.767152 126.132838) (xy 347.111628 125.788962) (xy 347.298287 125.339437) (xy 347.298712 124.852698) (xy 347.298712 127.392698)
+ (xy 347.112838 126.942848) (xy 346.768962 126.598372) (xy 346.319437 126.411713) (xy 345.832698 126.411288) (xy 345.382848 126.597162)
+ (xy 345.038372 126.941038) (xy 344.851713 127.390563) (xy 344.851288 127.877302) (xy 345.037162 128.327152) (xy 345.381038 128.671628)
+ (xy 345.830563 128.858287) (xy 346.317302 128.858712) (xy 346.767152 128.672838) (xy 347.111628 128.328962) (xy 347.298287 127.879437)
+ (xy 347.298712 127.392698) (xy 347.298712 133.7394) (xy 345.012668 133.7394) (xy 345.012668 129.983001) (xy 344.865382 129.62654)
+ (xy 344.592895 129.353577) (xy 344.236692 129.205668) (xy 343.851001 129.205332) (xy 343.49454 129.352618) (xy 343.221577 129.625105)
+ (xy 343.073668 129.981308) (xy 343.073436 130.247348) (xy 342.941895 130.115577) (xy 342.715848 130.021713) (xy 342.81346 129.981382)
+ (xy 343.086423 129.708895) (xy 343.234332 129.352692) (xy 343.234668 128.967001) (xy 343.168869 128.807755) (xy 343.290563 128.858287)
+ (xy 343.777302 128.858712) (xy 344.227152 128.672838) (xy 344.571628 128.328962) (xy 344.758287 127.879437) (xy 344.758712 127.392698)
+ (xy 344.758712 124.852698) (xy 344.758712 104.532698) (xy 344.7585 104.532184) (xy 344.7585 103.037929) (xy 344.7585 102.829071)
+ (xy 344.7585 101.432071) (xy 344.678574 101.239111) (xy 344.530889 101.091426) (xy 344.337929 101.0115) (xy 344.129071 101.0115)
+ (xy 342.732071 101.0115) (xy 342.599668 101.066342) (xy 342.599668 94.423001) (xy 342.452382 94.06654) (xy 342.179895 93.793577)
+ (xy 341.939268 93.693659) (xy 341.939268 89.470001) (xy 341.791982 89.11354) (xy 341.519495 88.840577) (xy 341.163292 88.692668)
+ (xy 340.777601 88.692332) (xy 340.42114 88.839618) (xy 340.220188 89.040218) (xy 340.020895 88.840577) (xy 339.664692 88.692668)
+ (xy 339.279001 88.692332) (xy 338.92254 88.839618) (xy 338.649577 89.112105) (xy 338.501668 89.468308) (xy 338.501332 89.853999)
+ (xy 338.648618 90.21046) (xy 338.921105 90.483423) (xy 339.277308 90.631332) (xy 339.662999 90.631668) (xy 340.01946 90.484382)
+ (xy 340.220411 90.283781) (xy 340.419705 90.483423) (xy 340.775908 90.631332) (xy 341.161599 90.631668) (xy 341.51806 90.484382)
+ (xy 341.791023 90.211895) (xy 341.938932 89.855692) (xy 341.939268 89.470001) (xy 341.939268 93.693659) (xy 341.823692 93.645668)
+ (xy 341.438001 93.645332) (xy 341.08154 93.792618) (xy 340.808577 94.065105) (xy 340.660668 94.421308) (xy 340.660332 94.806999)
+ (xy 340.807618 95.16346) (xy 341.080105 95.436423) (xy 341.436308 95.584332) (xy 341.821999 95.584668) (xy 342.17846 95.437382)
+ (xy 342.451423 95.164895) (xy 342.599332 94.808692) (xy 342.599668 94.423001) (xy 342.599668 101.066342) (xy 342.539111 101.091426)
+ (xy 342.391426 101.239111) (xy 342.3115 101.432071) (xy 342.3115 101.640929) (xy 342.3115 103.037929) (xy 342.391426 103.230889)
+ (xy 342.539111 103.378574) (xy 342.732071 103.4585) (xy 342.940929 103.4585) (xy 344.337929 103.4585) (xy 344.530889 103.378574)
+ (xy 344.678574 103.230889) (xy 344.7585 103.037929) (xy 344.7585 104.532184) (xy 344.572838 104.082848) (xy 344.228962 103.738372)
+ (xy 343.779437 103.551713) (xy 343.292698 103.551288) (xy 342.842848 103.737162) (xy 342.498372 104.081038) (xy 342.311713 104.530563)
+ (xy 342.311288 105.017302) (xy 342.497162 105.467152) (xy 342.841038 105.811628) (xy 343.290563 105.998287) (xy 343.777302 105.998712)
+ (xy 344.227152 105.812838) (xy 344.571628 105.468962) (xy 344.758287 105.019437) (xy 344.758712 104.532698) (xy 344.758712 124.852698)
+ (xy 344.631668 124.545227) (xy 344.631668 116.775001) (xy 344.631668 107.504001) (xy 344.484382 107.14754) (xy 344.211895 106.874577)
+ (xy 343.855692 106.726668) (xy 343.470001 106.726332) (xy 343.11354 106.873618) (xy 342.840577 107.146105) (xy 342.692668 107.502308)
+ (xy 342.692332 107.887999) (xy 342.839618 108.24446) (xy 343.112105 108.517423) (xy 343.468308 108.665332) (xy 343.853999 108.665668)
+ (xy 344.21046 108.518382) (xy 344.483423 108.245895) (xy 344.631332 107.889692) (xy 344.631668 107.504001) (xy 344.631668 116.775001)
+ (xy 344.484382 116.41854) (xy 344.211895 116.145577) (xy 343.855692 115.997668) (xy 343.470001 115.997332) (xy 343.11354 116.144618)
+ (xy 342.840577 116.417105) (xy 342.726668 116.691427) (xy 342.726668 109.282001) (xy 342.579382 108.92554) (xy 342.306895 108.652577)
+ (xy 342.222953 108.617721) (xy 342.222953 104.5552) (xy 342.222953 102.0152) (xy 342.045368 101.562014) (xy 342.018716 101.522128)
+ (xy 341.801766 101.463589) (xy 341.766411 101.498944) (xy 341.766411 101.428234) (xy 341.707872 101.211284) (xy 341.261849 101.016405)
+ (xy 340.7752 101.007047) (xy 340.322014 101.184632) (xy 340.282128 101.211284) (xy 340.223589 101.428234) (xy 340.995 102.199645)
+ (xy 341.766411 101.428234) (xy 341.766411 101.498944) (xy 341.030355 102.235) (xy 341.801766 103.006411) (xy 342.018716 102.947872)
+ (xy 342.213595 102.501849) (xy 342.222953 102.0152) (xy 342.222953 104.5552) (xy 342.045368 104.102014) (xy 342.018716 104.062128)
+ (xy 341.801766 104.003589) (xy 341.766411 104.038944) (xy 341.766411 103.968234) (xy 341.766411 103.041766) (xy 340.995 102.270355)
+ (xy 340.959645 102.30571) (xy 340.959645 102.235) (xy 340.188234 101.463589) (xy 339.971284 101.522128) (xy 339.776405 101.968151)
+ (xy 339.767047 102.4548) (xy 339.944632 102.907986) (xy 339.971284 102.947872) (xy 340.188234 103.006411) (xy 340.959645 102.235)
+ (xy 340.959645 102.30571) (xy 340.223589 103.041766) (xy 340.282128 103.258716) (xy 340.728151 103.453595) (xy 341.2148 103.462953)
+ (xy 341.667986 103.285368) (xy 341.707872 103.258716) (xy 341.766411 103.041766) (xy 341.766411 103.968234) (xy 341.707872 103.751284)
+ (xy 341.261849 103.556405) (xy 340.7752 103.547047) (xy 340.322014 103.724632) (xy 340.282128 103.751284) (xy 340.223589 103.968234)
+ (xy 340.995 104.739645) (xy 341.766411 103.968234) (xy 341.766411 104.038944) (xy 341.030355 104.775) (xy 341.801766 105.546411)
+ (xy 342.018716 105.487872) (xy 342.213595 105.041849) (xy 342.222953 104.5552) (xy 342.222953 108.617721) (xy 341.950692 108.504668)
+ (xy 341.766411 108.504507) (xy 341.766411 105.581766) (xy 340.995 104.810355) (xy 340.959645 104.84571) (xy 340.959645 104.775)
+ (xy 340.188234 104.003589) (xy 339.971284 104.062128) (xy 339.776405 104.508151) (xy 339.767047 104.9948) (xy 339.944632 105.447986)
+ (xy 339.971284 105.487872) (xy 340.188234 105.546411) (xy 340.959645 104.775) (xy 340.959645 104.84571) (xy 340.223589 105.581766)
+ (xy 340.282128 105.798716) (xy 340.728151 105.993595) (xy 341.2148 106.002953) (xy 341.667986 105.825368) (xy 341.707872 105.798716)
+ (xy 341.766411 105.581766) (xy 341.766411 108.504507) (xy 341.565001 108.504332) (xy 341.20854 108.651618) (xy 340.935577 108.924105)
+ (xy 340.787668 109.280308) (xy 340.787332 109.665999) (xy 340.934618 110.02246) (xy 341.207105 110.295423) (xy 341.563308 110.443332)
+ (xy 341.948999 110.443668) (xy 342.30546 110.296382) (xy 342.578423 110.023895) (xy 342.726332 109.667692) (xy 342.726668 109.282001)
+ (xy 342.726668 116.691427) (xy 342.692668 116.773308) (xy 342.692332 117.158999) (xy 342.839618 117.51546) (xy 343.112105 117.788423)
+ (xy 343.468308 117.936332) (xy 343.853999 117.936668) (xy 344.21046 117.789382) (xy 344.483423 117.516895) (xy 344.631332 117.160692)
+ (xy 344.631668 116.775001) (xy 344.631668 124.545227) (xy 344.572838 124.402848) (xy 344.228962 124.058372) (xy 343.779437 123.871713)
+ (xy 343.292698 123.871288) (xy 343.107668 123.94774) (xy 343.107668 120.839001) (xy 342.960382 120.48254) (xy 342.687895 120.209577)
+ (xy 342.331692 120.061668) (xy 341.946001 120.061332) (xy 341.58954 120.208618) (xy 341.316577 120.481105) (xy 341.168668 120.837308)
+ (xy 341.168332 121.222999) (xy 341.315618 121.57946) (xy 341.588105 121.852423) (xy 341.944308 122.000332) (xy 342.329999 122.000668)
+ (xy 342.68646 121.853382) (xy 342.959423 121.580895) (xy 343.107332 121.224692) (xy 343.107668 120.839001) (xy 343.107668 123.94774)
+ (xy 342.842848 124.057162) (xy 342.498372 124.401038) (xy 342.311713 124.850563) (xy 342.311288 125.337302) (xy 342.497162 125.787152)
+ (xy 342.841038 126.131628) (xy 343.290563 126.318287) (xy 343.777302 126.318712) (xy 344.227152 126.132838) (xy 344.571628 125.788962)
+ (xy 344.758287 125.339437) (xy 344.758712 124.852698) (xy 344.758712 127.392698) (xy 344.572838 126.942848) (xy 344.228962 126.598372)
+ (xy 343.779437 126.411713) (xy 343.292698 126.411288) (xy 342.842848 126.597162) (xy 342.498372 126.941038) (xy 342.311713 127.390563)
+ (xy 342.311288 127.877302) (xy 342.440348 128.189652) (xy 342.089601 128.189346) (xy 342.218287 127.879437) (xy 342.218712 127.392698)
+ (xy 342.218712 124.852698) (xy 342.032838 124.402848) (xy 341.688962 124.058372) (xy 341.239437 123.871713) (xy 340.752698 123.871288)
+ (xy 340.302848 124.057162) (xy 339.958372 124.401038) (xy 339.771713 124.850563) (xy 339.771288 125.337302) (xy 339.957162 125.787152)
+ (xy 340.301038 126.131628) (xy 340.750563 126.318287) (xy 341.237302 126.318712) (xy 341.687152 126.132838) (xy 342.031628 125.788962)
+ (xy 342.218287 125.339437) (xy 342.218712 124.852698) (xy 342.218712 127.392698) (xy 342.032838 126.942848) (xy 341.688962 126.598372)
+ (xy 341.239437 126.411713) (xy 340.752698 126.411288) (xy 340.302848 126.597162) (xy 339.958372 126.941038) (xy 339.771713 127.390563)
+ (xy 339.771288 127.877302) (xy 339.957162 128.327152) (xy 340.301038 128.671628) (xy 340.750563 128.858287) (xy 341.237302 128.858712)
+ (xy 341.361185 128.807524) (xy 341.295668 128.965308) (xy 341.295332 129.350999) (xy 341.442618 129.70746) (xy 341.715105 129.980423)
+ (xy 341.941151 130.074286) (xy 341.84354 130.114618) (xy 341.570577 130.387105) (xy 341.422668 130.743308) (xy 341.422332 131.128999)
+ (xy 341.569618 131.48546) (xy 341.842105 131.758423) (xy 342.198308 131.906332) (xy 342.583999 131.906668) (xy 342.94046 131.759382)
+ (xy 343.213423 131.486895) (xy 343.361332 131.130692) (xy 343.361563 130.864651) (xy 343.493105 130.996423) (xy 343.849308 131.144332)
+ (xy 344.234999 131.144668) (xy 344.59146 130.997382) (xy 344.864423 130.724895) (xy 345.012332 130.368692) (xy 345.012668 129.983001)
+ (xy 345.012668 133.7394) (xy 339.682953 133.7394) (xy 339.682953 127.4152) (xy 339.682953 124.8752) (xy 339.678712 124.864377)
+ (xy 339.678712 104.532698) (xy 339.678712 101.992698) (xy 339.492838 101.542848) (xy 339.148962 101.198372) (xy 338.699437 101.011713)
+ (xy 338.408668 101.011459) (xy 338.408668 96.201001) (xy 338.261382 95.84454) (xy 337.988895 95.571577) (xy 337.762848 95.477713)
+ (xy 337.86046 95.437382) (xy 338.133423 95.164895) (xy 338.281332 94.808692) (xy 338.281668 94.423001) (xy 338.134382 94.06654)
+ (xy 337.861895 93.793577) (xy 337.505692 93.645668) (xy 337.138668 93.645348) (xy 337.138668 89.724001) (xy 336.991382 89.36754)
+ (xy 336.718895 89.094577) (xy 336.362692 88.946668) (xy 335.977001 88.946332) (xy 335.868668 88.991094) (xy 335.868668 86.168001)
+ (xy 335.721382 85.81154) (xy 335.448895 85.538577) (xy 335.092692 85.390668) (xy 334.707001 85.390332) (xy 334.35054 85.537618)
+ (xy 334.077577 85.810105) (xy 333.929668 86.166308) (xy 333.929332 86.551999) (xy 334.076618 86.90846) (xy 334.349105 87.181423)
+ (xy 334.705308 87.329332) (xy 335.090999 87.329668) (xy 335.44746 87.182382) (xy 335.720423 86.909895) (xy 335.868332 86.553692)
+ (xy 335.868668 86.168001) (xy 335.868668 88.991094) (xy 335.62054 89.093618) (xy 335.347577 89.366105) (xy 335.199668 89.722308)
+ (xy 335.199332 90.107999) (xy 335.346618 90.46446) (xy 335.619105 90.737423) (xy 335.975308 90.885332) (xy 336.360999 90.885668)
+ (xy 336.71746 90.738382) (xy 336.990423 90.465895) (xy 337.138332 90.109692) (xy 337.138668 89.724001) (xy 337.138668 93.645348)
+ (xy 337.120001 93.645332) (xy 336.76354 93.792618) (xy 336.490577 94.065105) (xy 336.342668 94.421308) (xy 336.342332 94.806999)
+ (xy 336.489618 95.16346) (xy 336.762105 95.436423) (xy 336.988151 95.530286) (xy 336.89054 95.570618) (xy 336.867699 95.593419)
+ (xy 336.845895 95.571577) (xy 336.489692 95.423668) (xy 336.104001 95.423332) (xy 335.74754 95.570618) (xy 335.661088 95.656919)
+ (xy 335.575895 95.571577) (xy 335.219692 95.423668) (xy 334.882298 95.423374) (xy 334.979332 95.189692) (xy 334.979358 95.158922)
+ (xy 335.086308 95.203332) (xy 335.471999 95.203668) (xy 335.82846 95.056382) (xy 336.101423 94.783895) (xy 336.249332 94.427692)
+ (xy 336.249668 94.042001) (xy 336.102382 93.68554) (xy 335.829895 93.412577) (xy 335.473692 93.264668) (xy 335.088001 93.264332)
+ (xy 334.73154 93.411618) (xy 334.458577 93.684105) (xy 334.310668 94.040308) (xy 334.310641 94.071077) (xy 334.203692 94.026668)
+ (xy 333.836668 94.026348) (xy 333.836668 68.261001) (xy 333.689382 67.90454) (xy 333.416895 67.631577) (xy 333.074668 67.489471)
+ (xy 333.074668 65.975001) (xy 332.927382 65.61854) (xy 332.654895 65.345577) (xy 332.298692 65.197668) (xy 331.913001 65.197332)
+ (xy 331.55654 65.344618) (xy 331.283577 65.617105) (xy 331.169377 65.892126) (xy 331.130895 65.853577) (xy 330.774692 65.705668)
+ (xy 330.389001 65.705332) (xy 330.03254 65.852618) (xy 329.759577 66.125105) (xy 329.611668 66.481308) (xy 329.611419 66.765985)
+ (xy 329.504692 66.721668) (xy 329.264668 66.721458) (xy 329.264668 62.673001) (xy 329.117382 62.31654) (xy 328.844895 62.043577)
+ (xy 328.488692 61.895668) (xy 328.103001 61.895332) (xy 327.74654 62.042618) (xy 327.473577 62.315105) (xy 327.325668 62.671308)
+ (xy 327.325332 63.056999) (xy 327.472618 63.41346) (xy 327.745105 63.686423) (xy 328.101308 63.834332) (xy 328.486999 63.834668)
+ (xy 328.84346 63.687382) (xy 329.116423 63.414895) (xy 329.264332 63.058692) (xy 329.264668 62.673001) (xy 329.264668 66.721458)
+ (xy 329.119001 66.721332) (xy 328.76254 66.868618) (xy 328.489577 67.141105) (xy 328.341668 67.497308) (xy 328.341332 67.882999)
+ (xy 328.488618 68.23946) (xy 328.761105 68.512423) (xy 329.117308 68.660332) (xy 329.502999 68.660668) (xy 329.85946 68.513382)
+ (xy 330.132423 68.240895) (xy 330.280332 67.884692) (xy 330.28058 67.600014) (xy 330.387308 67.644332) (xy 330.772999 67.644668)
+ (xy 331.12946 67.497382) (xy 331.402423 67.224895) (xy 331.516622 66.949873) (xy 331.555105 66.988423) (xy 331.911308 67.136332)
+ (xy 332.296999 67.136668) (xy 332.65346 66.989382) (xy 332.926423 66.716895) (xy 333.074332 66.360692) (xy 333.074668 65.975001)
+ (xy 333.074668 67.489471) (xy 333.060692 67.483668) (xy 332.675001 67.483332) (xy 332.31854 67.630618) (xy 332.045577 67.903105)
+ (xy 331.897668 68.259308) (xy 331.897332 68.644999) (xy 332.044618 69.00146) (xy 332.317105 69.274423) (xy 332.673308 69.422332)
+ (xy 333.058999 69.422668) (xy 333.41546 69.275382) (xy 333.688423 69.002895) (xy 333.836332 68.646692) (xy 333.836668 68.261001)
+ (xy 333.836668 94.026348) (xy 333.818001 94.026332) (xy 333.46154 94.173618) (xy 333.188577 94.446105) (xy 333.040668 94.802308)
+ (xy 333.040332 95.187999) (xy 333.187618 95.54446) (xy 333.460105 95.817423) (xy 333.816308 95.965332) (xy 334.153701 95.965625)
+ (xy 334.056668 96.199308) (xy 334.056332 96.584999) (xy 334.203618 96.94146) (xy 334.476105 97.214423) (xy 334.832308 97.362332)
+ (xy 335.217999 97.362668) (xy 335.57446 97.215382) (xy 335.660911 97.12908) (xy 335.746105 97.214423) (xy 336.102308 97.362332)
+ (xy 336.487999 97.362668) (xy 336.84446 97.215382) (xy 336.8673 97.19258) (xy 336.889105 97.214423) (xy 337.245308 97.362332)
+ (xy 337.630999 97.362668) (xy 337.98746 97.215382) (xy 338.260423 96.942895) (xy 338.408332 96.586692) (xy 338.408668 96.201001)
+ (xy 338.408668 101.011459) (xy 338.212698 101.011288) (xy 337.762848 101.197162) (xy 337.418372 101.541038) (xy 337.231713 101.990563)
+ (xy 337.231288 102.477302) (xy 337.417162 102.927152) (xy 337.761038 103.271628) (xy 338.210563 103.458287) (xy 338.697302 103.458712)
+ (xy 339.147152 103.272838) (xy 339.491628 102.928962) (xy 339.678287 102.479437) (xy 339.678712 101.992698) (xy 339.678712 104.532698)
+ (xy 339.492838 104.082848) (xy 339.148962 103.738372) (xy 338.699437 103.551713) (xy 338.212698 103.551288) (xy 337.762848 103.737162)
+ (xy 337.418372 104.081038) (xy 337.231713 104.530563) (xy 337.231288 105.017302) (xy 337.417162 105.467152) (xy 337.761038 105.811628)
+ (xy 338.210563 105.998287) (xy 338.697302 105.998712) (xy 339.147152 105.812838) (xy 339.491628 105.468962) (xy 339.678287 105.019437)
+ (xy 339.678712 104.532698) (xy 339.678712 124.864377) (xy 339.505368 124.422014) (xy 339.478716 124.382128) (xy 339.261766 124.323589)
+ (xy 339.226411 124.358944) (xy 339.226411 124.288234) (xy 339.167872 124.071284) (xy 338.721849 123.876405) (xy 338.2352 123.867047)
+ (xy 337.782014 124.044632) (xy 337.742128 124.071284) (xy 337.683589 124.288234) (xy 338.455 125.059645) (xy 339.226411 124.288234)
+ (xy 339.226411 124.358944) (xy 338.490355 125.095) (xy 339.261766 125.866411) (xy 339.478716 125.807872) (xy 339.673595 125.361849)
+ (xy 339.682953 124.8752) (xy 339.682953 127.4152) (xy 339.505368 126.962014) (xy 339.478716 126.922128) (xy 339.261766 126.863589)
+ (xy 339.226411 126.898944) (xy 339.226411 126.828234) (xy 339.226411 125.901766) (xy 338.455 125.130355) (xy 338.419645 125.16571)
+ (xy 338.419645 125.095) (xy 337.648234 124.323589) (xy 337.431284 124.382128) (xy 337.236405 124.828151) (xy 337.227047 125.3148)
+ (xy 337.404632 125.767986) (xy 337.431284 125.807872) (xy 337.648234 125.866411) (xy 338.419645 125.095) (xy 338.419645 125.16571)
+ (xy 337.683589 125.901766) (xy 337.742128 126.118716) (xy 338.188151 126.313595) (xy 338.6748 126.322953) (xy 339.127986 126.145368)
+ (xy 339.167872 126.118716) (xy 339.226411 125.901766) (xy 339.226411 126.828234) (xy 339.167872 126.611284) (xy 338.721849 126.416405)
+ (xy 338.2352 126.407047) (xy 337.782014 126.584632) (xy 337.742128 126.611284) (xy 337.683589 126.828234) (xy 338.455 127.599645)
+ (xy 339.226411 126.828234) (xy 339.226411 126.898944) (xy 338.490355 127.635) (xy 339.261766 128.406411) (xy 339.478716 128.347872)
+ (xy 339.673595 127.901849) (xy 339.682953 127.4152) (xy 339.682953 133.7394) (xy 339.226411 133.7394) (xy 339.226411 128.441766)
+ (xy 338.455 127.670355) (xy 338.419645 127.70571) (xy 338.419645 127.635) (xy 337.648234 126.863589) (xy 337.431284 126.922128)
+ (xy 337.236405 127.368151) (xy 337.227047 127.8548) (xy 337.404632 128.307986) (xy 337.431284 128.347872) (xy 337.648234 128.406411)
+ (xy 338.419645 127.635) (xy 338.419645 127.70571) (xy 337.683589 128.441766) (xy 337.742128 128.658716) (xy 338.188151 128.853595)
+ (xy 338.6748 128.862953) (xy 339.127986 128.685368) (xy 339.167872 128.658716) (xy 339.226411 128.441766) (xy 339.226411 133.7394)
+ (xy 337.138712 133.7394) (xy 337.138712 127.392698) (xy 337.138712 124.852698) (xy 337.138712 104.532698) (xy 337.138712 101.992698)
+ (xy 336.952838 101.542848) (xy 336.608962 101.198372) (xy 336.159437 101.011713) (xy 335.672698 101.011288) (xy 335.222848 101.197162)
+ (xy 334.878372 101.541038) (xy 334.691713 101.990563) (xy 334.691288 102.477302) (xy 334.877162 102.927152) (xy 335.221038 103.271628)
+ (xy 335.670563 103.458287) (xy 336.157302 103.458712) (xy 336.607152 103.272838) (xy 336.951628 102.928962) (xy 337.138287 102.479437)
+ (xy 337.138712 101.992698) (xy 337.138712 104.532698) (xy 336.952838 104.082848) (xy 336.608962 103.738372) (xy 336.159437 103.551713)
+ (xy 335.672698 103.551288) (xy 335.222848 103.737162) (xy 334.878372 104.081038) (xy 334.691713 104.530563) (xy 334.691288 105.017302)
+ (xy 334.877162 105.467152) (xy 335.221038 105.811628) (xy 335.670563 105.998287) (xy 336.157302 105.998712) (xy 336.607152 105.812838)
+ (xy 336.951628 105.468962) (xy 337.138287 105.019437) (xy 337.138712 104.532698) (xy 337.138712 124.852698) (xy 336.952838 124.402848)
+ (xy 336.608962 124.058372) (xy 336.159437 123.871713) (xy 335.672698 123.871288) (xy 335.222848 124.057162) (xy 334.878372 124.401038)
+ (xy 334.691713 124.850563) (xy 334.691288 125.337302) (xy 334.877162 125.787152) (xy 335.221038 126.131628) (xy 335.670563 126.318287)
+ (xy 336.157302 126.318712) (xy 336.607152 126.132838) (xy 336.951628 125.788962) (xy 337.138287 125.339437) (xy 337.138712 124.852698)
+ (xy 337.138712 127.392698) (xy 336.952838 126.942848) (xy 336.608962 126.598372) (xy 336.159437 126.411713) (xy 335.672698 126.411288)
+ (xy 335.222848 126.597162) (xy 334.878372 126.941038) (xy 334.691713 127.390563) (xy 334.691288 127.877302) (xy 334.877162 128.327152)
+ (xy 335.221038 128.671628) (xy 335.670563 128.858287) (xy 336.157302 128.858712) (xy 336.607152 128.672838) (xy 336.951628 128.328962)
+ (xy 337.138287 127.879437) (xy 337.138712 127.392698) (xy 337.138712 133.7394) (xy 334.602953 133.7394) (xy 334.602953 107.0952)
+ (xy 334.598712 107.084377) (xy 334.598712 104.532698) (xy 334.412838 104.082848) (xy 334.068962 103.738372) (xy 333.619437 103.551713)
+ (xy 333.132698 103.551288) (xy 333.065287 103.579141) (xy 332.812263 103.326117) (xy 333.130563 103.458287) (xy 333.617302 103.458712)
+ (xy 334.067152 103.272838) (xy 334.411628 102.928962) (xy 334.598287 102.479437) (xy 334.598712 101.992698) (xy 334.412838 101.542848)
+ (xy 334.068962 101.198372) (xy 333.619437 101.011713) (xy 333.582668 101.01168) (xy 333.582668 96.328001) (xy 333.435382 95.97154)
+ (xy 333.162895 95.698577) (xy 332.806692 95.550668) (xy 332.421001 95.550332) (xy 332.06454 95.697618) (xy 331.791577 95.970105)
+ (xy 331.643668 96.326308) (xy 331.643332 96.711999) (xy 331.790618 97.06846) (xy 332.063105 97.341423) (xy 332.419308 97.489332)
+ (xy 332.804999 97.489668) (xy 333.16146 97.342382) (xy 333.434423 97.069895) (xy 333.582332 96.713692) (xy 333.582668 96.328001)
+ (xy 333.582668 101.01168) (xy 333.132698 101.011288) (xy 332.682848 101.197162) (xy 332.338372 101.541038) (xy 332.151713 101.990563)
+ (xy 332.151288 102.477302) (xy 332.337162 102.927152) (xy 332.587405 103.177832) (xy 332.359 103.1324) (xy 330.229868 103.1324)
+ (xy 330.229868 89.724001) (xy 330.082582 89.36754) (xy 329.810095 89.094577) (xy 329.453892 88.946668) (xy 329.264668 88.946503)
+ (xy 329.264668 84.771001) (xy 329.117382 84.41454) (xy 328.844895 84.141577) (xy 328.488692 83.993668) (xy 328.248668 83.993458)
+ (xy 328.248668 66.356001) (xy 328.101382 65.99954) (xy 327.828895 65.726577) (xy 327.472692 65.578668) (xy 327.087001 65.578332)
+ (xy 326.73054 65.725618) (xy 326.516977 65.938808) (xy 326.431895 65.853577) (xy 326.075692 65.705668) (xy 325.835668 65.705458)
+ (xy 325.835668 64.451001) (xy 325.688382 64.09454) (xy 325.415895 63.821577) (xy 325.059692 63.673668) (xy 324.674001 63.673332)
+ (xy 324.31754 63.820618) (xy 324.044577 64.093105) (xy 323.896668 64.449308) (xy 323.896332 64.834999) (xy 324.043618 65.19146)
+ (xy 324.316105 65.464423) (xy 324.672308 65.612332) (xy 325.057999 65.612668) (xy 325.41446 65.465382) (xy 325.687423 65.192895)
+ (xy 325.835332 64.836692) (xy 325.835668 64.451001) (xy 325.835668 65.705458) (xy 325.690001 65.705332) (xy 325.33354 65.852618)
+ (xy 325.060577 66.125105) (xy 324.912668 66.481308) (xy 324.912332 66.866999) (xy 325.059618 67.22346) (xy 325.332105 67.496423)
+ (xy 325.688308 67.644332) (xy 326.073999 67.644668) (xy 326.43046 67.497382) (xy 326.644022 67.284191) (xy 326.729105 67.369423)
+ (xy 327.085308 67.517332) (xy 327.470999 67.517668) (xy 327.82746 67.370382) (xy 328.100423 67.097895) (xy 328.248332 66.741692)
+ (xy 328.248668 66.356001) (xy 328.248668 83.993458) (xy 328.103001 83.993332) (xy 327.867668 84.090569) (xy 327.867668 69.531001)
+ (xy 327.720382 69.17454) (xy 327.447895 68.901577) (xy 327.091692 68.753668) (xy 326.706001 68.753332) (xy 326.34954 68.900618)
+ (xy 326.076577 69.173105) (xy 325.928668 69.529308) (xy 325.928332 69.914999) (xy 326.075618 70.27146) (xy 326.348105 70.544423)
+ (xy 326.704308 70.692332) (xy 327.089999 70.692668) (xy 327.44646 70.545382) (xy 327.719423 70.272895) (xy 327.867332 69.916692)
+ (xy 327.867668 69.531001) (xy 327.867668 84.090569) (xy 327.74654 84.140618) (xy 327.473577 84.413105) (xy 327.325668 84.769308)
+ (xy 327.325332 85.154999) (xy 327.472618 85.51146) (xy 327.745105 85.784423) (xy 328.101308 85.932332) (xy 328.486999 85.932668)
+ (xy 328.84346 85.785382) (xy 329.116423 85.512895) (xy 329.264332 85.156692) (xy 329.264668 84.771001) (xy 329.264668 88.946503)
+ (xy 329.068201 88.946332) (xy 328.71174 89.093618) (xy 328.438777 89.366105) (xy 328.290868 89.722308) (xy 328.290532 90.107999)
+ (xy 328.437818 90.46446) (xy 328.710305 90.737423) (xy 329.066508 90.885332) (xy 329.452199 90.885668) (xy 329.80866 90.738382)
+ (xy 330.081623 90.465895) (xy 330.229532 90.109692) (xy 330.229868 89.724001) (xy 330.229868 103.1324) (xy 330.026668 103.1324)
+ (xy 330.026668 93.915001) (xy 329.879382 93.55854) (xy 329.606895 93.285577) (xy 329.250692 93.137668) (xy 328.865001 93.137332)
+ (xy 328.50854 93.284618) (xy 328.422088 93.370919) (xy 328.336895 93.285577) (xy 327.980692 93.137668) (xy 327.595001 93.137332)
+ (xy 327.23854 93.284618) (xy 327.152088 93.370919) (xy 327.066895 93.285577) (xy 326.710692 93.137668) (xy 326.597668 93.137569)
+ (xy 326.597668 83.374001) (xy 326.450382 83.01754) (xy 326.177895 82.744577) (xy 325.835668 82.602471) (xy 325.835668 72.833001)
+ (xy 325.688382 72.47654) (xy 325.538581 72.326477) (xy 325.687423 72.177895) (xy 325.835332 71.821692) (xy 325.835668 71.436001)
+ (xy 325.688382 71.07954) (xy 325.415895 70.806577) (xy 325.320099 70.766799) (xy 325.560423 70.526895) (xy 325.708332 70.170692)
+ (xy 325.708668 69.785001) (xy 325.561382 69.42854) (xy 325.288895 69.155577) (xy 324.932692 69.007668) (xy 324.547001 69.007332)
+ (xy 324.19054 69.154618) (xy 323.917577 69.427105) (xy 323.769668 69.783308) (xy 323.769332 70.168999) (xy 323.916618 70.52546)
+ (xy 324.189105 70.798423) (xy 324.2849 70.8382) (xy 324.044577 71.078105) (xy 323.896668 71.434308) (xy 323.896332 71.819999)
+ (xy 324.043618 72.17646) (xy 324.193418 72.326522) (xy 324.044577 72.475105) (xy 323.896668 72.831308) (xy 323.896332 73.216999)
+ (xy 324.043618 73.57346) (xy 324.316105 73.846423) (xy 324.672308 73.994332) (xy 325.057999 73.994668) (xy 325.41446 73.847382)
+ (xy 325.687423 73.574895) (xy 325.835332 73.218692) (xy 325.835668 72.833001) (xy 325.835668 82.602471) (xy 325.821692 82.596668)
+ (xy 325.436001 82.596332) (xy 325.07954 82.743618) (xy 324.806577 83.016105) (xy 324.658668 83.372308) (xy 324.658332 83.757999)
+ (xy 324.805618 84.11446) (xy 325.078105 84.387423) (xy 325.434308 84.535332) (xy 325.819999 84.535668) (xy 326.17646 84.388382)
+ (xy 326.449423 84.115895) (xy 326.597332 83.759692) (xy 326.597668 83.374001) (xy 326.597668 93.137569) (xy 326.325001 93.137332)
+ (xy 325.96854 93.284618) (xy 325.962668 93.290479) (xy 325.962668 89.343001) (xy 325.815382 88.98654) (xy 325.542895 88.713577)
+ (xy 325.186692 88.565668) (xy 324.801001 88.565332) (xy 324.44454 88.712618) (xy 324.171577 88.985105) (xy 324.023668 89.341308)
+ (xy 324.023332 89.726999) (xy 324.170618 90.08346) (xy 324.443105 90.356423) (xy 324.799308 90.504332) (xy 325.184999 90.504668)
+ (xy 325.54146 90.357382) (xy 325.814423 90.084895) (xy 325.962332 89.728692) (xy 325.962668 89.343001) (xy 325.962668 93.290479)
+ (xy 325.695577 93.557105) (xy 325.575411 93.846494) (xy 325.561382 93.81254) (xy 325.288895 93.539577) (xy 324.932692 93.391668)
+ (xy 324.547001 93.391332) (xy 324.337767 93.477784) (xy 324.145895 93.285577) (xy 323.789692 93.137668) (xy 323.404001 93.137332)
+ (xy 323.168668 93.234569) (xy 323.168668 88.327001) (xy 323.041668 88.019636) (xy 323.041668 70.547001) (xy 323.041668 64.197001)
+ (xy 322.894382 63.84054) (xy 322.621895 63.567577) (xy 322.265692 63.419668) (xy 321.880001 63.419332) (xy 321.52354 63.566618)
+ (xy 321.250577 63.839105) (xy 321.102668 64.195308) (xy 321.102332 64.580999) (xy 321.249618 64.93746) (xy 321.522105 65.210423)
+ (xy 321.878308 65.358332) (xy 322.263999 65.358668) (xy 322.62046 65.211382) (xy 322.893423 64.938895) (xy 323.041332 64.582692)
+ (xy 323.041668 64.197001) (xy 323.041668 70.547001) (xy 322.894382 70.19054) (xy 322.787668 70.083639) (xy 322.787668 67.118001)
+ (xy 322.640382 66.76154) (xy 322.367895 66.488577) (xy 322.011692 66.340668) (xy 321.626001 66.340332) (xy 321.26954 66.487618)
+ (xy 320.996577 66.760105) (xy 320.848668 67.116308) (xy 320.848332 67.501999) (xy 320.995618 67.85846) (xy 321.268105 68.131423)
+ (xy 321.624308 68.279332) (xy 322.009999 68.279668) (xy 322.36646 68.132382) (xy 322.639423 67.859895) (xy 322.787332 67.503692)
+ (xy 322.787668 67.118001) (xy 322.787668 70.083639) (xy 322.621895 69.917577) (xy 322.265692 69.769668) (xy 321.880001 69.769332)
+ (xy 321.52354 69.916618) (xy 321.250577 70.189105) (xy 321.102668 70.545308) (xy 321.102332 70.930999) (xy 321.249618 71.28746)
+ (xy 321.522105 71.560423) (xy 321.878308 71.708332) (xy 322.263999 71.708668) (xy 322.62046 71.561382) (xy 322.893423 71.288895)
+ (xy 323.041332 70.932692) (xy 323.041668 70.547001) (xy 323.041668 88.019636) (xy 323.021382 87.97054) (xy 322.748895 87.697577)
+ (xy 322.660668 87.660941) (xy 322.660668 86.295001) (xy 322.660668 73.950601) (xy 322.513382 73.59414) (xy 322.240895 73.321177)
+ (xy 321.884692 73.173268) (xy 321.499001 73.172932) (xy 321.14254 73.320218) (xy 320.869577 73.592705) (xy 320.721668 73.948908)
+ (xy 320.721332 74.334599) (xy 320.868618 74.69106) (xy 321.141105 74.964023) (xy 321.497308 75.111932) (xy 321.882999 75.112268)
+ (xy 322.23946 74.964982) (xy 322.512423 74.692495) (xy 322.660332 74.336292) (xy 322.660668 73.950601) (xy 322.660668 86.295001)
+ (xy 322.513382 85.93854) (xy 322.240895 85.665577) (xy 321.884692 85.517668) (xy 321.499001 85.517332) (xy 321.14254 85.664618)
+ (xy 320.869577 85.937105) (xy 320.721668 86.293308) (xy 320.721332 86.678999) (xy 320.868618 87.03546) (xy 321.141105 87.308423)
+ (xy 321.497308 87.456332) (xy 321.882999 87.456668) (xy 322.23946 87.309382) (xy 322.512423 87.036895) (xy 322.660332 86.680692)
+ (xy 322.660668 86.295001) (xy 322.660668 87.660941) (xy 322.392692 87.549668) (xy 322.007001 87.549332) (xy 321.65054 87.696618)
+ (xy 321.377577 87.969105) (xy 321.229668 88.325308) (xy 321.229332 88.710999) (xy 321.376618 89.06746) (xy 321.649105 89.340423)
+ (xy 322.005308 89.488332) (xy 322.390999 89.488668) (xy 322.74746 89.341382) (xy 323.020423 89.068895) (xy 323.168332 88.712692)
+ (xy 323.168668 88.327001) (xy 323.168668 93.234569) (xy 323.04754 93.284618) (xy 323.024699 93.307419) (xy 323.002895 93.285577)
+ (xy 322.646692 93.137668) (xy 322.261001 93.137332) (xy 321.90454 93.284618) (xy 321.631577 93.557105) (xy 321.483668 93.913308)
+ (xy 321.483332 94.298999) (xy 321.630618 94.65546) (xy 321.903105 94.928423) (xy 322.259308 95.076332) (xy 322.644999 95.076668)
+ (xy 323.00146 94.929382) (xy 323.0243 94.90658) (xy 323.046105 94.928423) (xy 323.402308 95.076332) (xy 323.787999 95.076668)
+ (xy 323.997232 94.990215) (xy 324.189105 95.182423) (xy 324.545308 95.330332) (xy 324.930999 95.330668) (xy 325.28746 95.183382)
+ (xy 325.560423 94.910895) (xy 325.680588 94.621505) (xy 325.694618 94.65546) (xy 325.967105 94.928423) (xy 326.323308 95.076332)
+ (xy 326.708999 95.076668) (xy 327.06546 94.929382) (xy 327.151911 94.84308) (xy 327.237105 94.928423) (xy 327.593308 95.076332)
+ (xy 327.978999 95.076668) (xy 328.33546 94.929382) (xy 328.421911 94.84308) (xy 328.507105 94.928423) (xy 328.863308 95.076332)
+ (xy 329.248999 95.076668) (xy 329.60546 94.929382) (xy 329.878423 94.656895) (xy 330.026332 94.300692) (xy 330.026668 93.915001)
+ (xy 330.026668 103.1324) (xy 329.819 103.1324) (xy 329.579211 103.180097) (xy 329.375927 103.315927) (xy 329.305454 103.3864)
+ (xy 327.349835 103.3864) (xy 327.553628 103.182962) (xy 327.740287 102.733437) (xy 327.740712 102.246698) (xy 327.740712 99.706698)
+ (xy 327.554838 99.256848) (xy 327.210962 98.912372) (xy 326.761437 98.725713) (xy 326.274698 98.725288) (xy 325.824848 98.911162)
+ (xy 325.480372 99.255038) (xy 325.293713 99.704563) (xy 325.293288 100.191302) (xy 325.479162 100.641152) (xy 325.823038 100.985628)
+ (xy 326.272563 101.172287) (xy 326.759302 101.172712) (xy 327.209152 100.986838) (xy 327.553628 100.642962) (xy 327.740287 100.193437)
+ (xy 327.740712 99.706698) (xy 327.740712 102.246698) (xy 327.554838 101.796848) (xy 327.210962 101.452372) (xy 326.761437 101.265713)
+ (xy 326.274698 101.265288) (xy 325.824848 101.451162) (xy 325.480372 101.795038) (xy 325.293713 102.244563) (xy 325.293288 102.731302)
+ (xy 325.479162 103.181152) (xy 325.684052 103.3864) (xy 324.809835 103.3864) (xy 325.013628 103.182962) (xy 325.200287 102.733437)
+ (xy 325.200712 102.246698) (xy 325.200712 99.706698) (xy 325.200712 97.166698) (xy 325.014838 96.716848) (xy 324.670962 96.372372)
+ (xy 324.221437 96.185713) (xy 323.734698 96.185288) (xy 323.284848 96.371162) (xy 322.940372 96.715038) (xy 322.753713 97.164563)
+ (xy 322.753288 97.651302) (xy 322.939162 98.101152) (xy 323.283038 98.445628) (xy 323.732563 98.632287) (xy 324.219302 98.632712)
+ (xy 324.669152 98.446838) (xy 325.013628 98.102962) (xy 325.200287 97.653437) (xy 325.200712 97.166698) (xy 325.200712 99.706698)
+ (xy 325.014838 99.256848) (xy 324.670962 98.912372) (xy 324.221437 98.725713) (xy 323.734698 98.725288) (xy 323.284848 98.911162)
+ (xy 322.940372 99.255038) (xy 322.753713 99.704563) (xy 322.753288 100.191302) (xy 322.939162 100.641152) (xy 323.283038 100.985628)
+ (xy 323.732563 101.172287) (xy 324.219302 101.172712) (xy 324.669152 100.986838) (xy 325.013628 100.642962) (xy 325.200287 100.193437)
+ (xy 325.200712 99.706698) (xy 325.200712 102.246698) (xy 325.014838 101.796848) (xy 324.670962 101.452372) (xy 324.221437 101.265713)
+ (xy 323.734698 101.265288) (xy 323.284848 101.451162) (xy 322.940372 101.795038) (xy 322.753713 102.244563) (xy 322.753288 102.731302)
+ (xy 322.939162 103.181152) (xy 323.176846 103.41925) (xy 323.176846 103.419251) (xy 323.115562 103.431441) (xy 323.002895 103.318577)
+ (xy 322.660712 103.176489) (xy 322.660712 99.706698) (xy 322.660712 97.166698) (xy 322.474838 96.716848) (xy 322.130962 96.372372)
+ (xy 321.681437 96.185713) (xy 321.194698 96.185288) (xy 320.744848 96.371162) (xy 320.400372 96.715038) (xy 320.374668 96.77694)
+ (xy 320.374668 95.185001) (xy 320.227382 94.82854) (xy 319.954895 94.555577) (xy 319.739668 94.466206) (xy 319.739668 89.978001)
+ (xy 319.592382 89.62154) (xy 319.319895 89.348577) (xy 318.963692 89.200668) (xy 318.850668 89.200569) (xy 318.850668 80.072001)
+ (xy 318.850668 66.152801) (xy 318.703382 65.79634) (xy 318.430895 65.523377) (xy 318.074692 65.375468) (xy 317.689001 65.375132)
+ (xy 317.33254 65.522418) (xy 317.059577 65.794905) (xy 316.911668 66.151108) (xy 316.911332 66.536799) (xy 317.058618 66.89326)
+ (xy 317.331105 67.166223) (xy 317.687308 67.314132) (xy 318.072999 67.314468) (xy 318.42946 67.167182) (xy 318.702423 66.894695)
+ (xy 318.850332 66.538492) (xy 318.850668 66.152801) (xy 318.850668 80.072001) (xy 318.703382 79.71554) (xy 318.469668 79.481417)
+ (xy 318.469668 72.325001) (xy 318.322382 71.96854) (xy 318.049895 71.695577) (xy 317.693692 71.547668) (xy 317.308001 71.547332)
+ (xy 316.95154 71.694618) (xy 316.678577 71.967105) (xy 316.530668 72.323308) (xy 316.530332 72.708999) (xy 316.677618 73.06546)
+ (xy 316.950105 73.338423) (xy 317.306308 73.486332) (xy 317.691999 73.486668) (xy 318.04846 73.339382) (xy 318.321423 73.066895)
+ (xy 318.469332 72.710692) (xy 318.469668 72.325001) (xy 318.469668 79.481417) (xy 318.430895 79.442577) (xy 318.074692 79.294668)
+ (xy 317.689001 79.294332) (xy 317.33254 79.441618) (xy 317.059577 79.714105) (xy 317.054382 79.726613) (xy 316.931692 79.675668)
+ (xy 316.546001 79.675332) (xy 316.18954 79.822618) (xy 315.916577 80.095105) (xy 315.768668 80.451308) (xy 315.768332 80.836999)
+ (xy 315.915618 81.19346) (xy 315.938419 81.2163) (xy 315.916577 81.238105) (xy 315.827145 81.45348) (xy 315.657001 81.453332)
+ (xy 315.421668 81.550569) (xy 315.421668 79.310001) (xy 315.421668 68.515001) (xy 315.274382 68.15854) (xy 315.001895 67.885577)
+ (xy 314.659565 67.743428) (xy 314.659668 67.626001) (xy 314.512382 67.26954) (xy 314.239895 66.996577) (xy 313.883692 66.848668)
+ (xy 313.498001 66.848332) (xy 313.14154 66.995618) (xy 312.868577 67.268105) (xy 312.720668 67.624308) (xy 312.720332 68.009999)
+ (xy 312.867618 68.36646) (xy 313.140105 68.639423) (xy 313.482434 68.781571) (xy 313.482332 68.898999) (xy 313.629618 69.25546)
+ (xy 313.902105 69.528423) (xy 314.258308 69.676332) (xy 314.643999 69.676668) (xy 315.00046 69.529382) (xy 315.273423 69.256895)
+ (xy 315.421332 68.900692) (xy 315.421668 68.515001) (xy 315.421668 79.310001) (xy 315.274382 78.95354) (xy 315.001895 78.680577)
+ (xy 314.645692 78.532668) (xy 314.260001 78.532332) (xy 313.90354 78.679618) (xy 313.630577 78.952105) (xy 313.482668 79.308308)
+ (xy 313.482332 79.693999) (xy 313.629618 80.05046) (xy 313.902105 80.323423) (xy 314.258308 80.471332) (xy 314.643999 80.471668)
+ (xy 315.00046 80.324382) (xy 315.273423 80.051895) (xy 315.421332 79.695692) (xy 315.421668 79.310001) (xy 315.421668 81.550569)
+ (xy 315.30054 81.600618) (xy 315.027577 81.873105) (xy 314.879668 82.229308) (xy 314.879332 82.614999) (xy 315.026618 82.97146)
+ (xy 315.299105 83.244423) (xy 315.655308 83.392332) (xy 316.040999 83.392668) (xy 316.39746 83.245382) (xy 316.670423 82.972895)
+ (xy 316.759854 82.757519) (xy 316.929999 82.757668) (xy 317.28646 82.610382) (xy 317.559423 82.337895) (xy 317.707332 81.981692)
+ (xy 317.707668 81.596001) (xy 317.560382 81.23954) (xy 317.53758 81.216699) (xy 317.559423 81.194895) (xy 317.564617 81.182386)
+ (xy 317.687308 81.233332) (xy 318.072999 81.233668) (xy 318.42946 81.086382) (xy 318.702423 80.813895) (xy 318.850332 80.457692)
+ (xy 318.850668 80.072001) (xy 318.850668 89.200569) (xy 318.578001 89.200332) (xy 318.22154 89.347618) (xy 318.198699 89.370419)
+ (xy 318.176895 89.348577) (xy 317.820692 89.200668) (xy 317.648795 89.200518) (xy 317.560382 88.98654) (xy 317.287895 88.713577)
+ (xy 316.931692 88.565668) (xy 316.546001 88.565332) (xy 316.18954 88.712618) (xy 315.929668 88.972036) (xy 315.929668 86.422001)
+ (xy 315.782382 86.06554) (xy 315.509895 85.792577) (xy 315.153692 85.644668) (xy 314.768001 85.644332) (xy 314.41154 85.791618)
+ (xy 314.138577 86.064105) (xy 314.071016 86.226808) (xy 314.004382 86.06554) (xy 313.731895 85.792577) (xy 313.375692 85.644668)
+ (xy 312.990001 85.644332) (xy 312.881668 85.689094) (xy 312.881668 81.977001) (xy 312.734382 81.62054) (xy 312.461895 81.347577)
+ (xy 312.105692 81.199668) (xy 311.720001 81.199332) (xy 311.36354 81.346618) (xy 311.357668 81.352479) (xy 311.357668 80.707001)
+ (xy 311.357668 72.833001) (xy 311.210382 72.47654) (xy 310.937895 72.203577) (xy 310.581692 72.055668) (xy 310.196001 72.055332)
+ (xy 309.83954 72.202618) (xy 309.566577 72.475105) (xy 309.418668 72.831308) (xy 309.418332 73.216999) (xy 309.565618 73.57346)
+ (xy 309.838105 73.846423) (xy 310.194308 73.994332) (xy 310.579999 73.994668) (xy 310.93646 73.847382) (xy 311.209423 73.574895)
+ (xy 311.357332 73.218692) (xy 311.357668 72.833001) (xy 311.357668 80.707001) (xy 311.210382 80.35054) (xy 310.937895 80.077577)
+ (xy 310.581692 79.929668) (xy 310.196001 79.929332) (xy 309.83954 80.076618) (xy 309.753088 80.162919) (xy 309.667895 80.077577)
+ (xy 309.311692 79.929668) (xy 308.926001 79.929332) (xy 308.56954 80.076618) (xy 308.296577 80.349105) (xy 308.148668 80.705308)
+ (xy 308.148332 81.090999) (xy 308.295618 81.44746) (xy 308.568105 81.720423) (xy 308.924308 81.868332) (xy 309.309999 81.868668)
+ (xy 309.66646 81.721382) (xy 309.752911 81.63508) (xy 309.838105 81.720423) (xy 310.194308 81.868332) (xy 310.579999 81.868668)
+ (xy 310.93646 81.721382) (xy 311.209423 81.448895) (xy 311.357332 81.092692) (xy 311.357668 80.707001) (xy 311.357668 81.352479)
+ (xy 311.090577 81.619105) (xy 310.942668 81.975308) (xy 310.942332 82.360999) (xy 311.089618 82.71746) (xy 311.362105 82.990423)
+ (xy 311.718308 83.138332) (xy 312.103999 83.138668) (xy 312.46046 82.991382) (xy 312.733423 82.718895) (xy 312.881332 82.362692)
+ (xy 312.881668 81.977001) (xy 312.881668 85.689094) (xy 312.63354 85.791618) (xy 312.360577 86.064105) (xy 312.323815 86.152636)
+ (xy 311.974001 86.152332) (xy 311.61754 86.299618) (xy 311.513898 86.403079) (xy 311.216692 86.279668) (xy 310.831001 86.279332)
+ (xy 310.47454 86.426618) (xy 310.451699 86.449419) (xy 310.429895 86.427577) (xy 310.073692 86.279668) (xy 309.688001 86.279332)
+ (xy 309.33154 86.426618) (xy 309.181588 86.576308) (xy 309.159895 86.554577) (xy 308.803692 86.406668) (xy 308.504749 86.406407)
+ (xy 308.416382 86.19254) (xy 308.143895 85.919577) (xy 308.134494 85.915673) (xy 308.14246 85.912382) (xy 308.415423 85.639895)
+ (xy 308.5049 85.424409) (xy 308.801999 85.424668) (xy 309.15846 85.277382) (xy 309.431423 85.004895) (xy 309.500274 84.839083)
+ (xy 309.686308 84.916332) (xy 310.071999 84.916668) (xy 310.42846 84.769382) (xy 310.701423 84.496895) (xy 310.849332 84.140692)
+ (xy 310.849668 83.755001) (xy 310.702382 83.39854) (xy 310.429895 83.125577) (xy 310.073692 82.977668) (xy 309.688001 82.977332)
+ (xy 309.33154 83.124618) (xy 309.058577 83.397105) (xy 308.989725 83.562916) (xy 308.803692 83.485668) (xy 308.418001 83.485332)
+ (xy 308.06154 83.632618) (xy 307.788577 83.905105) (xy 307.699099 84.12059) (xy 307.402001 84.120332) (xy 307.04554 84.267618)
+ (xy 306.772577 84.540105) (xy 306.624668 84.896308) (xy 306.624332 85.281999) (xy 306.771618 85.63846) (xy 307.044105 85.911423)
+ (xy 307.053505 85.915326) (xy 307.04554 85.918618) (xy 306.772577 86.191105) (xy 306.624668 86.547308) (xy 306.624332 86.932999)
+ (xy 306.771618 87.28946) (xy 307.044105 87.562423) (xy 307.400308 87.710332) (xy 307.69925 87.710592) (xy 307.787618 87.92446)
+ (xy 308.060105 88.197423) (xy 308.416308 88.345332) (xy 308.801999 88.345668) (xy 309.15846 88.198382) (xy 309.308411 88.048691)
+ (xy 309.330105 88.070423) (xy 309.686308 88.218332) (xy 310.071999 88.218668) (xy 310.42846 88.071382) (xy 310.4513 88.04858)
+ (xy 310.473105 88.070423) (xy 310.829308 88.218332) (xy 311.214999 88.218668) (xy 311.57146 88.071382) (xy 311.675101 87.96792)
+ (xy 311.972308 88.091332) (xy 312.357999 88.091668) (xy 312.71446 87.944382) (xy 312.987423 87.671895) (xy 313.024184 87.583363)
+ (xy 313.10771 87.583436) (xy 313.248618 87.92446) (xy 313.521105 88.197423) (xy 313.877308 88.345332) (xy 314.262999 88.345668)
+ (xy 314.61946 88.198382) (xy 314.892423 87.925895) (xy 315.034571 87.583565) (xy 315.151999 87.583668) (xy 315.50846 87.436382)
+ (xy 315.781423 87.163895) (xy 315.929332 86.807692) (xy 315.929668 86.422001) (xy 315.929668 88.972036) (xy 315.916577 88.985105)
+ (xy 315.774428 89.327434) (xy 315.657001 89.327332) (xy 315.30054 89.474618) (xy 315.027577 89.747105) (xy 314.879668 90.103308)
+ (xy 314.879332 90.488999) (xy 315.026618 90.84546) (xy 315.299105 91.118423) (xy 315.655308 91.266332) (xy 316.040999 91.266668)
+ (xy 316.39746 91.119382) (xy 316.670423 90.846895) (xy 316.764286 90.620848) (xy 316.804618 90.71846) (xy 317.077105 90.991423)
+ (xy 317.433308 91.139332) (xy 317.818999 91.139668) (xy 318.17546 90.992382) (xy 318.1983 90.96958) (xy 318.220105 90.991423)
+ (xy 318.576308 91.139332) (xy 318.961999 91.139668) (xy 319.31846 90.992382) (xy 319.591423 90.719895) (xy 319.739332 90.363692)
+ (xy 319.739668 89.978001) (xy 319.739668 94.466206) (xy 319.598692 94.407668) (xy 319.213001 94.407332) (xy 318.85654 94.554618)
+ (xy 318.583577 94.827105) (xy 318.435668 95.183308) (xy 318.435332 95.568999) (xy 318.582618 95.92546) (xy 318.842156 96.185451)
+ (xy 318.654698 96.185288) (xy 318.204848 96.371162) (xy 317.860372 96.715038) (xy 317.673713 97.164563) (xy 317.673288 97.651302)
+ (xy 317.859162 98.101152) (xy 318.203038 98.445628) (xy 318.652563 98.632287) (xy 319.139302 98.632712) (xy 319.589152 98.446838)
+ (xy 319.933628 98.102962) (xy 320.120287 97.653437) (xy 320.120712 97.166698) (xy 319.934838 96.716848) (xy 319.590962 96.372372)
+ (xy 319.528917 96.346608) (xy 319.596999 96.346668) (xy 319.95346 96.199382) (xy 320.226423 95.926895) (xy 320.374332 95.570692)
+ (xy 320.374668 95.185001) (xy 320.374668 96.77694) (xy 320.213713 97.164563) (xy 320.213288 97.651302) (xy 320.399162 98.101152)
+ (xy 320.743038 98.445628) (xy 321.192563 98.632287) (xy 321.679302 98.632712) (xy 322.129152 98.446838) (xy 322.473628 98.102962)
+ (xy 322.660287 97.653437) (xy 322.660712 97.166698) (xy 322.660712 99.706698) (xy 322.474838 99.256848) (xy 322.130962 98.912372)
+ (xy 321.681437 98.725713) (xy 321.194698 98.725288) (xy 320.744848 98.911162) (xy 320.400372 99.255038) (xy 320.213713 99.704563)
+ (xy 320.213288 100.191302) (xy 320.399162 100.641152) (xy 320.743038 100.985628) (xy 321.192563 101.172287) (xy 321.679302 101.172712)
+ (xy 322.129152 100.986838) (xy 322.473628 100.642962) (xy 322.660287 100.193437) (xy 322.660712 99.706698) (xy 322.660712 103.176489)
+ (xy 322.646692 103.170668) (xy 322.261001 103.170332) (xy 321.90454 103.317618) (xy 321.644668 103.577036) (xy 321.644668 102.297001)
+ (xy 321.497382 101.94054) (xy 321.224895 101.667577) (xy 320.868692 101.519668) (xy 320.483001 101.519332) (xy 320.12654 101.666618)
+ (xy 320.120712 101.672435) (xy 320.120712 99.706698) (xy 319.934838 99.256848) (xy 319.590962 98.912372) (xy 319.141437 98.725713)
+ (xy 318.654698 98.725288) (xy 318.204848 98.911162) (xy 317.860372 99.255038) (xy 317.673713 99.704563) (xy 317.673288 100.191302)
+ (xy 317.859162 100.641152) (xy 318.203038 100.985628) (xy 318.652563 101.172287) (xy 319.139302 101.172712) (xy 319.589152 100.986838)
+ (xy 319.933628 100.642962) (xy 320.120287 100.193437) (xy 320.120712 99.706698) (xy 320.120712 101.672435) (xy 319.853577 101.939105)
+ (xy 319.705668 102.295308) (xy 319.705563 102.41471) (xy 319.36454 102.555618) (xy 319.091577 102.828105) (xy 318.943668 103.184308)
+ (xy 318.943332 103.569999) (xy 319.090618 103.92646) (xy 319.350266 104.186562) (xy 319.086001 104.186332) (xy 318.72954 104.333618)
+ (xy 318.456577 104.606105) (xy 318.308668 104.962308) (xy 318.308406 105.262082) (xy 318.195382 104.98854) (xy 317.922895 104.715577)
+ (xy 317.580712 104.573489) (xy 317.580712 99.706698) (xy 317.580712 97.166698) (xy 317.394838 96.716848) (xy 317.050962 96.372372)
+ (xy 316.601437 96.185713) (xy 316.114698 96.185288) (xy 315.664848 96.371162) (xy 315.320372 96.715038) (xy 315.133713 97.164563)
+ (xy 315.133288 97.651302) (xy 315.319162 98.101152) (xy 315.663038 98.445628) (xy 316.112563 98.632287) (xy 316.599302 98.632712)
+ (xy 317.049152 98.446838) (xy 317.393628 98.102962) (xy 317.580287 97.653437) (xy 317.580712 97.166698) (xy 317.580712 99.706698)
+ (xy 317.394838 99.256848) (xy 317.050962 98.912372) (xy 316.601437 98.725713) (xy 316.114698 98.725288) (xy 315.664848 98.911162)
+ (xy 315.320372 99.255038) (xy 315.133713 99.704563) (xy 315.133288 100.191302) (xy 315.319162 100.641152) (xy 315.504878 100.827192)
+ (xy 315.281577 101.050105) (xy 315.133668 101.406308) (xy 315.133332 101.791999) (xy 315.280618 102.14846) (xy 315.553105 102.421423)
+ (xy 315.909308 102.569332) (xy 316.294999 102.569668) (xy 316.65146 102.422382) (xy 316.924423 102.149895) (xy 317.072332 101.793692)
+ (xy 317.072668 101.408001) (xy 316.925382 101.05154) (xy 316.915797 101.041938) (xy 317.049152 100.986838) (xy 317.393628 100.642962)
+ (xy 317.580287 100.193437) (xy 317.580712 99.706698) (xy 317.580712 104.573489) (xy 317.566692 104.567668) (xy 317.181001 104.567332)
+ (xy 316.82454 104.714618) (xy 316.551577 104.987105) (xy 316.403668 105.343308) (xy 316.403332 105.728999) (xy 316.550618 106.08546)
+ (xy 316.823105 106.358423) (xy 317.179308 106.506332) (xy 317.564999 106.506668) (xy 317.92146 106.359382) (xy 318.194423 106.086895)
+ (xy 318.342332 105.730692) (xy 318.342593 105.430917) (xy 318.455618 105.70446) (xy 318.728105 105.977423) (xy 319.084308 106.125332)
+ (xy 319.469999 106.125668) (xy 319.82646 105.978382) (xy 320.099423 105.705895) (xy 320.247332 105.349692) (xy 320.247668 104.964001)
+ (xy 320.100382 104.60754) (xy 319.840733 104.347437) (xy 320.104999 104.347668) (xy 320.46146 104.200382) (xy 320.734423 103.927895)
+ (xy 320.882332 103.571692) (xy 320.882436 103.452289) (xy 321.22346 103.311382) (xy 321.496423 103.038895) (xy 321.644332 102.682692)
+ (xy 321.644668 102.297001) (xy 321.644668 103.577036) (xy 321.631577 103.590105) (xy 321.483668 103.946308) (xy 321.483332 104.331999)
+ (xy 321.630618 104.68846) (xy 321.653419 104.7113) (xy 321.631577 104.733105) (xy 321.483668 105.089308) (xy 321.483332 105.474999)
+ (xy 321.630618 105.83146) (xy 321.903105 106.104423) (xy 322.259308 106.252332) (xy 322.644999 106.252668) (xy 323.00146 106.105382)
+ (xy 323.162371 105.944751) (xy 323.283038 106.065628) (xy 323.732563 106.252287) (xy 324.219302 106.252712) (xy 324.669152 106.066838)
+ (xy 325.013628 105.722962) (xy 325.200287 105.273437) (xy 325.200712 104.786698) (xy 325.139932 104.6396) (xy 325.353906 104.6396)
+ (xy 325.293713 104.784563) (xy 325.293288 105.271302) (xy 325.479162 105.721152) (xy 325.823038 106.065628) (xy 326.272563 106.252287)
+ (xy 326.759302 106.252712) (xy 327.209152 106.066838) (xy 327.553628 105.722962) (xy 327.740287 105.273437) (xy 327.740712 104.786698)
+ (xy 327.679932 104.6396) (xy 329.565 104.6396) (xy 329.611625 104.630325) (xy 329.611288 105.017302) (xy 329.797162 105.467152)
+ (xy 330.141038 105.811628) (xy 330.590563 105.998287) (xy 331.077302 105.998712) (xy 331.527152 105.812838) (xy 331.871628 105.468962)
+ (xy 332.058287 105.019437) (xy 332.058712 104.532698) (xy 331.997932 104.3856) (xy 332.099454 104.3856) (xy 332.178912 104.465058)
+ (xy 332.151713 104.530563) (xy 332.151288 105.017302) (xy 332.337162 105.467152) (xy 332.681038 105.811628) (xy 333.130563 105.998287)
+ (xy 333.617302 105.998712) (xy 334.067152 105.812838) (xy 334.411628 105.468962) (xy 334.598287 105.019437) (xy 334.598712 104.532698)
+ (xy 334.598712 107.084377) (xy 334.425368 106.642014) (xy 334.398716 106.602128) (xy 334.181766 106.543589) (xy 334.146411 106.578944)
+ (xy 334.146411 106.508234) (xy 334.087872 106.291284) (xy 333.641849 106.096405) (xy 333.1552 106.087047) (xy 332.702014 106.264632)
+ (xy 332.662128 106.291284) (xy 332.603589 106.508234) (xy 333.375 107.279645) (xy 334.146411 106.508234) (xy 334.146411 106.578944)
+ (xy 333.410355 107.315) (xy 334.181766 108.086411) (xy 334.398716 108.027872) (xy 334.593595 107.581849) (xy 334.602953 107.0952)
+ (xy 334.602953 133.7394) (xy 334.598712 133.7394) (xy 334.598712 127.392698) (xy 334.598712 124.852698) (xy 334.598712 122.312698)
+ (xy 334.598712 119.772698) (xy 334.598712 117.232698) (xy 334.598712 114.692698) (xy 334.598712 112.152698) (xy 334.598712 109.612698)
+ (xy 334.412838 109.162848) (xy 334.146411 108.895956) (xy 334.146411 108.121766) (xy 333.375 107.350355) (xy 333.339645 107.38571)
+ (xy 333.339645 107.315) (xy 332.568234 106.543589) (xy 332.351284 106.602128) (xy 332.156405 107.048151) (xy 332.147047 107.5348)
+ (xy 332.324632 107.987986) (xy 332.351284 108.027872) (xy 332.568234 108.086411) (xy 333.339645 107.315) (xy 333.339645 107.38571)
+ (xy 332.603589 108.121766) (xy 332.662128 108.338716) (xy 333.108151 108.533595) (xy 333.5948 108.542953) (xy 334.047986 108.365368)
+ (xy 334.087872 108.338716) (xy 334.146411 108.121766) (xy 334.146411 108.895956) (xy 334.068962 108.818372) (xy 333.619437 108.631713)
+ (xy 333.132698 108.631288) (xy 332.682848 108.817162) (xy 332.338372 109.161038) (xy 332.151713 109.610563) (xy 332.151288 110.097302)
+ (xy 332.337162 110.547152) (xy 332.681038 110.891628) (xy 333.130563 111.078287) (xy 333.617302 111.078712) (xy 334.067152 110.892838)
+ (xy 334.411628 110.548962) (xy 334.598287 110.099437) (xy 334.598712 109.612698) (xy 334.598712 112.152698) (xy 334.412838 111.702848)
+ (xy 334.068962 111.358372) (xy 333.619437 111.171713) (xy 333.132698 111.171288) (xy 332.682848 111.357162) (xy 332.338372 111.701038)
+ (xy 332.151713 112.150563) (xy 332.151288 112.637302) (xy 332.337162 113.087152) (xy 332.681038 113.431628) (xy 333.130563 113.618287)
+ (xy 333.617302 113.618712) (xy 334.067152 113.432838) (xy 334.411628 113.088962) (xy 334.598287 112.639437) (xy 334.598712 112.152698)
+ (xy 334.598712 114.692698) (xy 334.412838 114.242848) (xy 334.068962 113.898372) (xy 333.619437 113.711713) (xy 333.132698 113.711288)
+ (xy 332.682848 113.897162) (xy 332.338372 114.241038) (xy 332.151713 114.690563) (xy 332.151288 115.177302) (xy 332.337162 115.627152)
+ (xy 332.681038 115.971628) (xy 333.130563 116.158287) (xy 333.617302 116.158712) (xy 334.067152 115.972838) (xy 334.411628 115.628962)
+ (xy 334.598287 115.179437) (xy 334.598712 114.692698) (xy 334.598712 117.232698) (xy 334.412838 116.782848) (xy 334.068962 116.438372)
+ (xy 333.619437 116.251713) (xy 333.132698 116.251288) (xy 332.682848 116.437162) (xy 332.338372 116.781038) (xy 332.151713 117.230563)
+ (xy 332.151288 117.717302) (xy 332.337162 118.167152) (xy 332.681038 118.511628) (xy 333.130563 118.698287) (xy 333.617302 118.698712)
+ (xy 334.067152 118.512838) (xy 334.411628 118.168962) (xy 334.598287 117.719437) (xy 334.598712 117.232698) (xy 334.598712 119.772698)
+ (xy 334.412838 119.322848) (xy 334.068962 118.978372) (xy 333.619437 118.791713) (xy 333.132698 118.791288) (xy 332.682848 118.977162)
+ (xy 332.338372 119.321038) (xy 332.151713 119.770563) (xy 332.151288 120.257302) (xy 332.337162 120.707152) (xy 332.681038 121.051628)
+ (xy 333.130563 121.238287) (xy 333.617302 121.238712) (xy 334.067152 121.052838) (xy 334.411628 120.708962) (xy 334.598287 120.259437)
+ (xy 334.598712 119.772698) (xy 334.598712 122.312698) (xy 334.412838 121.862848) (xy 334.068962 121.518372) (xy 333.619437 121.331713)
+ (xy 333.132698 121.331288) (xy 332.682848 121.517162) (xy 332.338372 121.861038) (xy 332.151713 122.310563) (xy 332.151288 122.797302)
+ (xy 332.337162 123.247152) (xy 332.681038 123.591628) (xy 333.130563 123.778287) (xy 333.617302 123.778712) (xy 334.067152 123.592838)
+ (xy 334.411628 123.248962) (xy 334.598287 122.799437) (xy 334.598712 122.312698) (xy 334.598712 124.852698) (xy 334.412838 124.402848)
+ (xy 334.068962 124.058372) (xy 333.619437 123.871713) (xy 333.132698 123.871288) (xy 332.682848 124.057162) (xy 332.338372 124.401038)
+ (xy 332.151713 124.850563) (xy 332.151288 125.337302) (xy 332.337162 125.787152) (xy 332.681038 126.131628) (xy 333.130563 126.318287)
+ (xy 333.617302 126.318712) (xy 334.067152 126.132838) (xy 334.411628 125.788962) (xy 334.598287 125.339437) (xy 334.598712 124.852698)
+ (xy 334.598712 127.392698) (xy 334.412838 126.942848) (xy 334.068962 126.598372) (xy 333.619437 126.411713) (xy 333.132698 126.411288)
+ (xy 332.682848 126.597162) (xy 332.338372 126.941038) (xy 332.168924 127.349113) (xy 332.165382 127.34054) (xy 332.062953 127.237932)
+ (xy 332.062953 107.0952) (xy 331.885368 106.642014) (xy 331.858716 106.602128) (xy 331.641766 106.543589) (xy 331.606411 106.578944)
+ (xy 331.606411 106.508234) (xy 331.547872 106.291284) (xy 331.101849 106.096405) (xy 330.6152 106.087047) (xy 330.162014 106.264632)
+ (xy 330.122128 106.291284) (xy 330.063589 106.508234) (xy 330.835 107.279645) (xy 331.606411 106.508234) (xy 331.606411 106.578944)
+ (xy 330.870355 107.315) (xy 331.641766 108.086411) (xy 331.858716 108.027872) (xy 332.053595 107.581849) (xy 332.062953 107.0952)
+ (xy 332.062953 127.237932) (xy 332.058712 127.233683) (xy 332.058712 124.852698) (xy 332.058712 122.312698) (xy 332.058712 119.772698)
+ (xy 332.058712 117.232698) (xy 332.058712 114.692698) (xy 332.058712 112.152698) (xy 332.058712 109.612698) (xy 331.872838 109.162848)
+ (xy 331.528962 108.818372) (xy 331.079437 108.631713) (xy 330.592698 108.631288) (xy 330.447939 108.6911) (xy 330.387382 108.54454)
+ (xy 330.228167 108.385047) (xy 330.568151 108.533595) (xy 331.0548 108.542953) (xy 331.507986 108.365368) (xy 331.547872 108.338716)
+ (xy 331.606411 108.121766) (xy 330.835 107.350355) (xy 330.799645 107.38571) (xy 330.799645 107.315) (xy 330.028234 106.543589)
+ (xy 329.811284 106.602128) (xy 329.616405 107.048151) (xy 329.607047 107.5348) (xy 329.784632 107.987986) (xy 329.811284 108.027872)
+ (xy 330.028234 108.086411) (xy 330.799645 107.315) (xy 330.799645 107.38571) (xy 330.063589 108.121766) (xy 330.102638 108.266487)
+ (xy 329.758692 108.123668) (xy 329.373001 108.123332) (xy 329.01654 108.270618) (xy 328.743577 108.543105) (xy 328.595668 108.899308)
+ (xy 328.595332 109.284999) (xy 328.742618 109.64146) (xy 329.015105 109.914423) (xy 329.371308 110.062332) (xy 329.611318 110.062541)
+ (xy 329.611288 110.097302) (xy 329.797162 110.547152) (xy 330.141038 110.891628) (xy 330.590563 111.078287) (xy 331.077302 111.078712)
+ (xy 331.527152 110.892838) (xy 331.871628 110.548962) (xy 332.058287 110.099437) (xy 332.058712 109.612698) (xy 332.058712 112.152698)
+ (xy 331.872838 111.702848) (xy 331.528962 111.358372) (xy 331.079437 111.171713) (xy 330.592698 111.171288) (xy 330.142848 111.357162)
+ (xy 329.798372 111.701038) (xy 329.611713 112.150563) (xy 329.611288 112.637302) (xy 329.797162 113.087152) (xy 330.141038 113.431628)
+ (xy 330.590563 113.618287) (xy 331.077302 113.618712) (xy 331.527152 113.432838) (xy 331.871628 113.088962) (xy 332.058287 112.639437)
+ (xy 332.058712 112.152698) (xy 332.058712 114.692698) (xy 331.872838 114.242848) (xy 331.528962 113.898372) (xy 331.079437 113.711713)
+ (xy 330.592698 113.711288) (xy 330.142848 113.897162) (xy 329.798372 114.241038) (xy 329.611713 114.690563) (xy 329.611288 115.177302)
+ (xy 329.797162 115.627152) (xy 330.141038 115.971628) (xy 330.590563 116.158287) (xy 331.077302 116.158712) (xy 331.527152 115.972838)
+ (xy 331.871628 115.628962) (xy 332.058287 115.179437) (xy 332.058712 114.692698) (xy 332.058712 117.232698) (xy 331.872838 116.782848)
+ (xy 331.528962 116.438372) (xy 331.079437 116.251713) (xy 330.592698 116.251288) (xy 330.142848 116.437162) (xy 329.798372 116.781038)
+ (xy 329.611713 117.230563) (xy 329.611288 117.717302) (xy 329.797162 118.167152) (xy 330.141038 118.511628) (xy 330.590563 118.698287)
+ (xy 331.077302 118.698712) (xy 331.527152 118.512838) (xy 331.871628 118.168962) (xy 332.058287 117.719437) (xy 332.058712 117.232698)
+ (xy 332.058712 119.772698) (xy 331.872838 119.322848) (xy 331.528962 118.978372) (xy 331.079437 118.791713) (xy 330.592698 118.791288)
+ (xy 330.142848 118.977162) (xy 329.798372 119.321038) (xy 329.611713 119.770563) (xy 329.611288 120.257302) (xy 329.797162 120.707152)
+ (xy 330.141038 121.051628) (xy 330.590563 121.238287) (xy 331.077302 121.238712) (xy 331.527152 121.052838) (xy 331.871628 120.708962)
+ (xy 332.058287 120.259437) (xy 332.058712 119.772698) (xy 332.058712 122.312698) (xy 331.872838 121.862848) (xy 331.528962 121.518372)
+ (xy 331.079437 121.331713) (xy 330.592698 121.331288) (xy 330.142848 121.517162) (xy 329.798372 121.861038) (xy 329.611713 122.310563)
+ (xy 329.611288 122.797302) (xy 329.797162 123.247152) (xy 330.141038 123.591628) (xy 330.590563 123.778287) (xy 331.077302 123.778712)
+ (xy 331.527152 123.592838) (xy 331.871628 123.248962) (xy 332.058287 122.799437) (xy 332.058712 122.312698) (xy 332.058712 124.852698)
+ (xy 331.872838 124.402848) (xy 331.528962 124.058372) (xy 331.079437 123.871713) (xy 330.592698 123.871288) (xy 330.142848 124.057162)
+ (xy 329.798372 124.401038) (xy 329.611713 124.850563) (xy 329.611288 125.337302) (xy 329.797162 125.787152) (xy 330.141038 126.131628)
+ (xy 330.590563 126.318287) (xy 331.077302 126.318712) (xy 331.527152 126.132838) (xy 331.871628 125.788962) (xy 332.058287 125.339437)
+ (xy 332.058712 124.852698) (xy 332.058712 127.233683) (xy 331.892895 127.067577) (xy 331.536692 126.919668) (xy 331.151001 126.919332)
+ (xy 330.79454 127.066618) (xy 330.521577 127.339105) (xy 330.373668 127.695308) (xy 330.373332 128.080999) (xy 330.520618 128.43746)
+ (xy 330.793105 128.710423) (xy 331.149308 128.858332) (xy 331.534999 128.858668) (xy 331.89146 128.711382) (xy 332.164423 128.438895)
+ (xy 332.274148 128.174647) (xy 332.337162 128.327152) (xy 332.681038 128.671628) (xy 333.130563 128.858287) (xy 333.617302 128.858712)
+ (xy 334.067152 128.672838) (xy 334.411628 128.328962) (xy 334.598287 127.879437) (xy 334.598712 127.392698) (xy 334.598712 133.7394)
+ (xy 332.439668 133.7394) (xy 332.439668 130.872001) (xy 332.292382 130.51554) (xy 332.019895 130.242577) (xy 331.663692 130.094668)
+ (xy 331.278001 130.094332) (xy 330.92154 130.241618) (xy 330.648577 130.514105) (xy 330.500668 130.870308) (xy 330.500332 131.255999)
+ (xy 330.647618 131.61246) (xy 330.920105 131.885423) (xy 331.276308 132.033332) (xy 331.661999 132.033668) (xy 332.01846 131.886382)
+ (xy 332.291423 131.613895) (xy 332.439332 131.257692) (xy 332.439668 130.872001) (xy 332.439668 133.7394) (xy 330.026668 133.7394)
+ (xy 330.026668 127.697001) (xy 329.879382 127.34054) (xy 329.606895 127.067577) (xy 329.264668 126.925471) (xy 329.264668 112.330001)
+ (xy 329.117382 111.97354) (xy 328.844895 111.700577) (xy 328.488692 111.552668) (xy 328.103001 111.552332) (xy 327.74654 111.699618)
+ (xy 327.740712 111.705435) (xy 327.740712 109.866698) (xy 327.740712 107.326698) (xy 327.554838 106.876848) (xy 327.210962 106.532372)
+ (xy 326.761437 106.345713) (xy 326.274698 106.345288) (xy 325.824848 106.531162) (xy 325.480372 106.875038) (xy 325.293713 107.324563)
+ (xy 325.293288 107.811302) (xy 325.479162 108.261152) (xy 325.823038 108.605628) (xy 326.272563 108.792287) (xy 326.759302 108.792712)
+ (xy 327.209152 108.606838) (xy 327.553628 108.262962) (xy 327.740287 107.813437) (xy 327.740712 107.326698) (xy 327.740712 109.866698)
+ (xy 327.554838 109.416848) (xy 327.210962 109.072372) (xy 326.761437 108.885713) (xy 326.274698 108.885288) (xy 325.824848 109.071162)
+ (xy 325.480372 109.415038) (xy 325.293713 109.864563) (xy 325.293288 110.351302) (xy 325.479162 110.801152) (xy 325.823038 111.145628)
+ (xy 326.272563 111.332287) (xy 326.759302 111.332712) (xy 327.209152 111.146838) (xy 327.553628 110.802962) (xy 327.740287 110.353437)
+ (xy 327.740712 109.866698) (xy 327.740712 111.705435) (xy 327.516234 111.929522) (xy 327.323766 111.877589) (xy 327.288411 111.912944)
+ (xy 327.288411 111.842234) (xy 327.229872 111.625284) (xy 326.783849 111.430405) (xy 326.2972 111.421047) (xy 325.844014 111.598632)
+ (xy 325.804128 111.625284) (xy 325.745589 111.842234) (xy 326.517 112.613645) (xy 327.288411 111.842234) (xy 327.288411 111.912944)
+ (xy 326.552355 112.649) (xy 326.566497 112.663142) (xy 326.531142 112.698497) (xy 326.517 112.684355) (xy 326.481645 112.71971)
+ (xy 326.481645 112.649) (xy 325.710234 111.877589) (xy 325.493284 111.936128) (xy 325.298405 112.382151) (xy 325.289047 112.8688)
+ (xy 325.466632 113.321986) (xy 325.493284 113.361872) (xy 325.710234 113.420411) (xy 326.481645 112.649) (xy 326.481645 112.71971)
+ (xy 325.745589 113.455766) (xy 325.804128 113.672716) (xy 326.250151 113.867595) (xy 326.7368 113.876953) (xy 326.947128 113.794533)
+ (xy 326.859193 114.006304) (xy 326.761437 113.965713) (xy 326.274698 113.965288) (xy 325.824848 114.151162) (xy 325.480372 114.495038)
+ (xy 325.293713 114.944563) (xy 325.293288 115.431302) (xy 325.479162 115.881152) (xy 325.823038 116.225628) (xy 326.272563 116.412287)
+ (xy 326.759302 116.412712) (xy 327.209152 116.226838) (xy 327.553628 115.882962) (xy 327.740287 115.433437) (xy 327.74043 115.26946)
+ (xy 327.978999 115.269668) (xy 328.33546 115.122382) (xy 328.608423 114.849895) (xy 328.756332 114.493692) (xy 328.756668 114.108001)
+ (xy 328.609382 113.75154) (xy 328.349843 113.491548) (xy 328.486999 113.491668) (xy 328.84346 113.344382) (xy 329.116423 113.071895)
+ (xy 329.264332 112.715692) (xy 329.264668 112.330001) (xy 329.264668 126.925471) (xy 329.250692 126.919668) (xy 328.865001 126.919332)
+ (xy 328.50854 127.066618) (xy 328.235577 127.339105) (xy 328.087668 127.695308) (xy 328.087332 128.080999) (xy 328.234618 128.43746)
+ (xy 328.507105 128.710423) (xy 328.863308 128.858332) (xy 329.248999 128.858668) (xy 329.60546 128.711382) (xy 329.878423 128.438895)
+ (xy 330.026332 128.082692) (xy 330.026668 127.697001) (xy 330.026668 133.7394) (xy 327.994668 133.7394) (xy 327.994668 131.888001)
+ (xy 327.847382 131.53154) (xy 327.740712 131.424683) (xy 327.740712 125.106698) (xy 327.740712 122.566698) (xy 327.740712 120.026698)
+ (xy 327.740712 117.486698) (xy 327.554838 117.036848) (xy 327.210962 116.692372) (xy 326.761437 116.505713) (xy 326.274698 116.505288)
+ (xy 325.824848 116.691162) (xy 325.480372 117.035038) (xy 325.293713 117.484563) (xy 325.293288 117.971302) (xy 325.479162 118.421152)
+ (xy 325.823038 118.765628) (xy 326.272563 118.952287) (xy 326.759302 118.952712) (xy 327.209152 118.766838) (xy 327.553628 118.422962)
+ (xy 327.740287 117.973437) (xy 327.740712 117.486698) (xy 327.740712 120.026698) (xy 327.554838 119.576848) (xy 327.210962 119.232372)
+ (xy 326.761437 119.045713) (xy 326.274698 119.045288) (xy 325.824848 119.231162) (xy 325.480372 119.575038) (xy 325.293713 120.024563)
+ (xy 325.293288 120.511302) (xy 325.479162 120.961152) (xy 325.823038 121.305628) (xy 326.272563 121.492287) (xy 326.759302 121.492712)
+ (xy 327.209152 121.306838) (xy 327.553628 120.962962) (xy 327.740287 120.513437) (xy 327.740712 120.026698) (xy 327.740712 122.566698)
+ (xy 327.554838 122.116848) (xy 327.210962 121.772372) (xy 326.761437 121.585713) (xy 326.274698 121.585288) (xy 325.824848 121.771162)
+ (xy 325.480372 122.115038) (xy 325.293713 122.564563) (xy 325.293288 123.051302) (xy 325.479162 123.501152) (xy 325.823038 123.845628)
+ (xy 326.272563 124.032287) (xy 326.759302 124.032712) (xy 327.209152 123.846838) (xy 327.553628 123.502962) (xy 327.740287 123.053437)
+ (xy 327.740712 122.566698) (xy 327.740712 125.106698) (xy 327.554838 124.656848) (xy 327.210962 124.312372) (xy 326.761437 124.125713)
+ (xy 326.274698 124.125288) (xy 325.824848 124.311162) (xy 325.480372 124.655038) (xy 325.293713 125.104563) (xy 325.293288 125.591302)
+ (xy 325.479162 126.041152) (xy 325.823038 126.385628) (xy 326.272563 126.572287) (xy 326.759302 126.572712) (xy 327.209152 126.386838)
+ (xy 327.553628 126.042962) (xy 327.740287 125.593437) (xy 327.740712 125.106698) (xy 327.740712 131.424683) (xy 327.574895 131.258577)
+ (xy 327.218692 131.110668) (xy 326.833001 131.110332) (xy 326.47654 131.257618) (xy 326.203577 131.530105) (xy 326.055668 131.886308)
+ (xy 326.055332 132.271999) (xy 326.202618 132.62846) (xy 326.475105 132.901423) (xy 326.831308 133.049332) (xy 327.216999 133.049668)
+ (xy 327.57346 132.902382) (xy 327.846423 132.629895) (xy 327.994332 132.273692) (xy 327.994668 131.888001) (xy 327.994668 133.7394)
+ (xy 325.204953 133.7394) (xy 325.204953 114.9692) (xy 325.204953 112.4292) (xy 325.200712 112.418377) (xy 325.200712 109.866698)
+ (xy 325.200712 107.326698) (xy 325.014838 106.876848) (xy 324.670962 106.532372) (xy 324.221437 106.345713) (xy 323.734698 106.345288)
+ (xy 323.284848 106.531162) (xy 322.940372 106.875038) (xy 322.753713 107.324563) (xy 322.753288 107.811302) (xy 322.939162 108.261152)
+ (xy 323.283038 108.605628) (xy 323.732563 108.792287) (xy 324.219302 108.792712) (xy 324.669152 108.606838) (xy 325.013628 108.262962)
+ (xy 325.200287 107.813437) (xy 325.200712 107.326698) (xy 325.200712 109.866698) (xy 325.014838 109.416848) (xy 324.670962 109.072372)
+ (xy 324.221437 108.885713) (xy 323.734698 108.885288) (xy 323.284848 109.071162) (xy 322.940372 109.415038) (xy 322.753713 109.864563)
+ (xy 322.753288 110.351302) (xy 322.939162 110.801152) (xy 323.283038 111.145628) (xy 323.732563 111.332287) (xy 324.219302 111.332712)
+ (xy 324.669152 111.146838) (xy 325.013628 110.802962) (xy 325.200287 110.353437) (xy 325.200712 109.866698) (xy 325.200712 112.418377)
+ (xy 325.027368 111.976014) (xy 325.000716 111.936128) (xy 324.783766 111.877589) (xy 324.748411 111.912944) (xy 324.748411 111.842234)
+ (xy 324.689872 111.625284) (xy 324.243849 111.430405) (xy 323.7572 111.421047) (xy 323.304014 111.598632) (xy 323.264128 111.625284)
+ (xy 323.205589 111.842234) (xy 323.977 112.613645) (xy 324.748411 111.842234) (xy 324.748411 111.912944) (xy 324.012355 112.649)
+ (xy 324.783766 113.420411) (xy 325.000716 113.361872) (xy 325.195595 112.915849) (xy 325.204953 112.4292) (xy 325.204953 114.9692)
+ (xy 325.027368 114.516014) (xy 325.000716 114.476128) (xy 324.783766 114.417589) (xy 324.748411 114.452944) (xy 324.748411 114.382234)
+ (xy 324.748411 113.455766) (xy 323.977 112.684355) (xy 323.941645 112.71971) (xy 323.941645 112.649) (xy 323.170234 111.877589)
+ (xy 322.953284 111.936128) (xy 322.758405 112.382151) (xy 322.749047 112.8688) (xy 322.926632 113.321986) (xy 322.953284 113.361872)
+ (xy 323.170234 113.420411) (xy 323.941645 112.649) (xy 323.941645 112.71971) (xy 323.205589 113.455766) (xy 323.264128 113.672716)
+ (xy 323.710151 113.867595) (xy 324.1968 113.876953) (xy 324.649986 113.699368) (xy 324.689872 113.672716) (xy 324.748411 113.455766)
+ (xy 324.748411 114.382234) (xy 324.689872 114.165284) (xy 324.243849 113.970405) (xy 323.7572 113.961047) (xy 323.304014 114.138632)
+ (xy 323.264128 114.165284) (xy 323.205589 114.382234) (xy 323.977 115.153645) (xy 324.748411 114.382234) (xy 324.748411 114.452944)
+ (xy 324.012355 115.189) (xy 324.783766 115.960411) (xy 325.000716 115.901872) (xy 325.195595 115.455849) (xy 325.204953 114.9692)
+ (xy 325.204953 133.7394) (xy 325.200712 133.7394) (xy 325.200712 127.646698) (xy 325.200712 125.106698) (xy 325.200712 122.566698)
+ (xy 325.200712 120.026698) (xy 325.200712 117.486698) (xy 325.014838 117.036848) (xy 324.748411 116.769956) (xy 324.748411 115.995766)
+ (xy 323.977 115.224355) (xy 323.941645 115.25971) (xy 323.941645 115.189) (xy 323.170234 114.417589) (xy 322.953284 114.476128)
+ (xy 322.758405 114.922151) (xy 322.749047 115.4088) (xy 322.926632 115.861986) (xy 322.953284 115.901872) (xy 323.170234 115.960411)
+ (xy 323.941645 115.189) (xy 323.941645 115.25971) (xy 323.205589 115.995766) (xy 323.264128 116.212716) (xy 323.710151 116.407595)
+ (xy 324.1968 116.416953) (xy 324.649986 116.239368) (xy 324.689872 116.212716) (xy 324.748411 115.995766) (xy 324.748411 116.769956)
+ (xy 324.670962 116.692372) (xy 324.221437 116.505713) (xy 323.734698 116.505288) (xy 323.284848 116.691162) (xy 322.940372 117.035038)
+ (xy 322.753713 117.484563) (xy 322.753288 117.971302) (xy 322.939162 118.421152) (xy 323.283038 118.765628) (xy 323.732563 118.952287)
+ (xy 324.219302 118.952712) (xy 324.669152 118.766838) (xy 325.013628 118.422962) (xy 325.200287 117.973437) (xy 325.200712 117.486698)
+ (xy 325.200712 120.026698) (xy 325.014838 119.576848) (xy 324.670962 119.232372) (xy 324.221437 119.045713) (xy 323.734698 119.045288)
+ (xy 323.284848 119.231162) (xy 322.940372 119.575038) (xy 322.753713 120.024563) (xy 322.753288 120.511302) (xy 322.939162 120.961152)
+ (xy 323.283038 121.305628) (xy 323.732563 121.492287) (xy 324.219302 121.492712) (xy 324.669152 121.306838) (xy 325.013628 120.962962)
+ (xy 325.200287 120.513437) (xy 325.200712 120.026698) (xy 325.200712 122.566698) (xy 325.014838 122.116848) (xy 324.670962 121.772372)
+ (xy 324.221437 121.585713) (xy 323.734698 121.585288) (xy 323.284848 121.771162) (xy 322.940372 122.115038) (xy 322.753713 122.564563)
+ (xy 322.753288 123.051302) (xy 322.939162 123.501152) (xy 323.283038 123.845628) (xy 323.732563 124.032287) (xy 324.219302 124.032712)
+ (xy 324.669152 123.846838) (xy 325.013628 123.502962) (xy 325.200287 123.053437) (xy 325.200712 122.566698) (xy 325.200712 125.106698)
+ (xy 325.014838 124.656848) (xy 324.670962 124.312372) (xy 324.221437 124.125713) (xy 323.734698 124.125288) (xy 323.284848 124.311162)
+ (xy 322.940372 124.655038) (xy 322.753713 125.104563) (xy 322.753288 125.591302) (xy 322.939162 126.041152) (xy 323.283038 126.385628)
+ (xy 323.732563 126.572287) (xy 324.219302 126.572712) (xy 324.669152 126.386838) (xy 325.013628 126.042962) (xy 325.200287 125.593437)
+ (xy 325.200712 125.106698) (xy 325.200712 127.646698) (xy 325.014838 127.196848) (xy 324.670962 126.852372) (xy 324.221437 126.665713)
+ (xy 323.734698 126.665288) (xy 323.284848 126.851162) (xy 322.940372 127.195038) (xy 322.753713 127.644563) (xy 322.753288 128.131302)
+ (xy 322.939162 128.581152) (xy 323.283038 128.925628) (xy 323.732563 129.112287) (xy 324.219302 129.112712) (xy 324.669152 128.926838)
+ (xy 325.013628 128.582962) (xy 325.200287 128.133437) (xy 325.200712 127.646698) (xy 325.200712 133.7394) (xy 324.692668 133.7394)
+ (xy 324.692668 130.110001) (xy 324.545382 129.75354) (xy 324.272895 129.480577) (xy 323.916692 129.332668) (xy 323.531001 129.332332)
+ (xy 323.17454 129.479618) (xy 322.901577 129.752105) (xy 322.753668 130.108308) (xy 322.753332 130.493999) (xy 322.900618 130.85046)
+ (xy 323.173105 131.123423) (xy 323.529308 131.271332) (xy 323.914999 131.271668) (xy 324.27146 131.124382) (xy 324.544423 130.851895)
+ (xy 324.692332 130.495692) (xy 324.692668 130.110001) (xy 324.692668 133.7394) (xy 322.660712 133.7394) (xy 322.660712 127.646698)
+ (xy 322.660712 125.106698) (xy 322.474838 124.656848) (xy 322.406668 124.588559) (xy 322.406668 121.855001) (xy 322.406668 116.521001)
+ (xy 322.259382 116.16454) (xy 321.986895 115.891577) (xy 321.630692 115.743668) (xy 321.245001 115.743332) (xy 320.945854 115.866936)
+ (xy 320.716895 115.637577) (xy 320.360692 115.489668) (xy 319.975001 115.489332) (xy 319.61854 115.636618) (xy 319.358668 115.896036)
+ (xy 319.358668 109.155001) (xy 319.211382 108.79854) (xy 318.938895 108.525577) (xy 318.582692 108.377668) (xy 318.197001 108.377332)
+ (xy 317.84054 108.524618) (xy 317.567577 108.797105) (xy 317.419668 109.153308) (xy 317.419332 109.538999) (xy 317.566618 109.89546)
+ (xy 317.839105 110.168423) (xy 318.195308 110.316332) (xy 318.580999 110.316668) (xy 318.93746 110.169382) (xy 319.210423 109.896895)
+ (xy 319.358332 109.540692) (xy 319.358668 109.155001) (xy 319.358668 115.896036) (xy 319.345577 115.909105) (xy 319.197668 116.265308)
+ (xy 319.197332 116.650999) (xy 319.344618 117.00746) (xy 319.617105 117.280423) (xy 319.973308 117.428332) (xy 320.358999 117.428668)
+ (xy 320.658145 117.305063) (xy 320.887105 117.534423) (xy 321.243308 117.682332) (xy 321.628999 117.682668) (xy 321.98546 117.535382)
+ (xy 322.258423 117.262895) (xy 322.406332 116.906692) (xy 322.406668 116.521001) (xy 322.406668 121.855001) (xy 322.259382 121.49854)
+ (xy 321.986895 121.225577) (xy 321.630692 121.077668) (xy 321.245001 121.077332) (xy 320.88854 121.224618) (xy 320.615577 121.497105)
+ (xy 320.467668 121.853308) (xy 320.467332 122.238999) (xy 320.614618 122.59546) (xy 320.887105 122.868423) (xy 321.243308 123.016332)
+ (xy 321.628999 123.016668) (xy 321.98546 122.869382) (xy 322.258423 122.596895) (xy 322.406332 122.240692) (xy 322.406668 121.855001)
+ (xy 322.406668 124.588559) (xy 322.130962 124.312372) (xy 321.681437 124.125713) (xy 321.194698 124.125288) (xy 320.744848 124.311162)
+ (xy 320.400372 124.655038) (xy 320.213713 125.104563) (xy 320.213288 125.591302) (xy 320.399162 126.041152) (xy 320.743038 126.385628)
+ (xy 321.192563 126.572287) (xy 321.679302 126.572712) (xy 322.129152 126.386838) (xy 322.473628 126.042962) (xy 322.660287 125.593437)
+ (xy 322.660712 125.106698) (xy 322.660712 127.646698) (xy 322.474838 127.196848) (xy 322.130962 126.852372) (xy 321.681437 126.665713)
+ (xy 321.194698 126.665288) (xy 320.744848 126.851162) (xy 320.400372 127.195038) (xy 320.213713 127.644563) (xy 320.213288 128.131302)
+ (xy 320.399162 128.581152) (xy 320.743038 128.925628) (xy 321.192563 129.112287) (xy 321.679302 129.112712) (xy 322.129152 128.926838)
+ (xy 322.473628 128.582962) (xy 322.660287 128.133437) (xy 322.660712 127.646698) (xy 322.660712 133.7394) (xy 320.120712 133.7394)
+ (xy 320.120712 127.646698) (xy 320.120712 125.106698) (xy 319.934838 124.656848) (xy 319.590962 124.312372) (xy 319.141437 124.125713)
+ (xy 318.654698 124.125288) (xy 318.204848 124.311162) (xy 317.860372 124.655038) (xy 317.673713 125.104563) (xy 317.673288 125.591302)
+ (xy 317.859162 126.041152) (xy 318.203038 126.385628) (xy 318.652563 126.572287) (xy 319.139302 126.572712) (xy 319.589152 126.386838)
+ (xy 319.933628 126.042962) (xy 320.120287 125.593437) (xy 320.120712 125.106698) (xy 320.120712 127.646698) (xy 319.934838 127.196848)
+ (xy 319.590962 126.852372) (xy 319.141437 126.665713) (xy 318.654698 126.665288) (xy 318.204848 126.851162) (xy 317.860372 127.195038)
+ (xy 317.673713 127.644563) (xy 317.673288 128.131302) (xy 317.859162 128.581152) (xy 318.203038 128.925628) (xy 318.652563 129.112287)
+ (xy 319.139302 129.112712) (xy 319.589152 128.926838) (xy 319.933628 128.582962) (xy 320.120287 128.133437) (xy 320.120712 127.646698)
+ (xy 320.120712 133.7394) (xy 317.580712 133.7394) (xy 317.580712 127.646698) (xy 317.580712 125.106698) (xy 317.394838 124.656848)
+ (xy 317.326668 124.588559) (xy 317.326668 118.553001) (xy 317.179382 118.19654) (xy 316.906895 117.923577) (xy 316.550692 117.775668)
+ (xy 316.165001 117.775332) (xy 315.80854 117.922618) (xy 315.535577 118.195105) (xy 315.387668 118.551308) (xy 315.387332 118.936999)
+ (xy 315.534618 119.29346) (xy 315.807105 119.566423) (xy 316.163308 119.714332) (xy 316.548999 119.714668) (xy 316.90546 119.567382)
+ (xy 317.178423 119.294895) (xy 317.326332 118.938692) (xy 317.326668 118.553001) (xy 317.326668 124.588559) (xy 317.050962 124.312372)
+ (xy 316.601437 124.125713) (xy 316.114698 124.125288) (xy 315.664848 124.311162) (xy 315.320372 124.655038) (xy 315.133713 125.104563)
+ (xy 315.133288 125.591302) (xy 315.319162 126.041152) (xy 315.663038 126.385628) (xy 316.112563 126.572287) (xy 316.599302 126.572712)
+ (xy 317.049152 126.386838) (xy 317.393628 126.042962) (xy 317.580287 125.593437) (xy 317.580712 125.106698) (xy 317.580712 127.646698)
+ (xy 317.394838 127.196848) (xy 317.050962 126.852372) (xy 316.601437 126.665713) (xy 316.114698 126.665288) (xy 315.664848 126.851162)
+ (xy 315.320372 127.195038) (xy 315.133713 127.644563) (xy 315.133288 128.131302) (xy 315.319162 128.581152) (xy 315.663038 128.925628)
+ (xy 316.112563 129.112287) (xy 316.599302 129.112712) (xy 317.049152 128.926838) (xy 317.393628 128.582962) (xy 317.580287 128.133437)
+ (xy 317.580712 127.646698) (xy 317.580712 133.7394) (xy 316.564668 133.7394) (xy 316.564668 132.523001) (xy 316.417382 132.16654)
+ (xy 316.144895 131.893577) (xy 315.788692 131.745668) (xy 315.403001 131.745332) (xy 315.04654 131.892618) (xy 315.044953 131.894202)
+ (xy 315.044953 127.6692) (xy 315.044953 99.7292) (xy 315.044953 97.1892) (xy 314.867368 96.736014) (xy 314.840716 96.696128)
+ (xy 314.623766 96.637589) (xy 314.588411 96.672944) (xy 314.588411 96.602234) (xy 314.529872 96.385284) (xy 314.083849 96.190405)
+ (xy 313.5972 96.181047) (xy 313.144014 96.358632) (xy 313.104128 96.385284) (xy 313.045589 96.602234) (xy 313.817 97.373645)
+ (xy 314.588411 96.602234) (xy 314.588411 96.672944) (xy 313.852355 97.409) (xy 314.623766 98.180411) (xy 314.840716 98.121872)
+ (xy 315.035595 97.675849) (xy 315.044953 97.1892) (xy 315.044953 99.7292) (xy 314.867368 99.276014) (xy 314.840716 99.236128)
+ (xy 314.623766 99.177589) (xy 314.588411 99.212944) (xy 314.588411 99.142234) (xy 314.588411 98.215766) (xy 313.817 97.444355)
+ (xy 313.781645 97.47971) (xy 313.781645 97.409) (xy 313.010234 96.637589) (xy 312.793284 96.696128) (xy 312.598405 97.142151)
+ (xy 312.589047 97.6288) (xy 312.766632 98.081986) (xy 312.793284 98.121872) (xy 313.010234 98.180411) (xy 313.781645 97.409)
+ (xy 313.781645 97.47971) (xy 313.045589 98.215766) (xy 313.104128 98.432716) (xy 313.550151 98.627595) (xy 314.0368 98.636953)
+ (xy 314.489986 98.459368) (xy 314.529872 98.432716) (xy 314.588411 98.215766) (xy 314.588411 99.142234) (xy 314.529872 98.925284)
+ (xy 314.083849 98.730405) (xy 313.5972 98.721047) (xy 313.144014 98.898632) (xy 313.104128 98.925284) (xy 313.045589 99.142234)
+ (xy 313.817 99.913645) (xy 314.588411 99.142234) (xy 314.588411 99.212944) (xy 313.852355 99.949) (xy 314.623766 100.720411)
+ (xy 314.840716 100.661872) (xy 315.035595 100.215849) (xy 315.044953 99.7292) (xy 315.044953 127.6692) (xy 315.040712 127.658377)
+ (xy 315.040712 125.106698) (xy 314.854838 124.656848) (xy 314.588411 124.389956) (xy 314.588411 100.755766) (xy 313.817 99.984355)
+ (xy 313.781645 100.01971) (xy 313.781645 99.949) (xy 313.010234 99.177589) (xy 312.793284 99.236128) (xy 312.598405 99.682151)
+ (xy 312.589047 100.1688) (xy 312.766632 100.621986) (xy 312.793284 100.661872) (xy 313.010234 100.720411) (xy 313.781645 99.949)
+ (xy 313.781645 100.01971) (xy 313.045589 100.755766) (xy 313.104128 100.972716) (xy 313.550151 101.167595) (xy 314.0368 101.176953)
+ (xy 314.489986 100.999368) (xy 314.529872 100.972716) (xy 314.588411 100.755766) (xy 314.588411 124.389956) (xy 314.510962 124.312372)
+ (xy 314.061437 124.125713) (xy 313.574698 124.125288) (xy 313.135668 124.306691) (xy 313.135668 106.615001) (xy 312.988382 106.25854)
+ (xy 312.715895 105.985577) (xy 312.500712 105.896224) (xy 312.500712 99.706698) (xy 312.500712 97.166698) (xy 312.314838 96.716848)
+ (xy 311.970962 96.372372) (xy 311.521437 96.185713) (xy 311.034698 96.185288) (xy 310.584848 96.371162) (xy 310.240372 96.715038)
+ (xy 310.053713 97.164563) (xy 310.053288 97.651302) (xy 310.239162 98.101152) (xy 310.583038 98.445628) (xy 311.032563 98.632287)
+ (xy 311.519302 98.632712) (xy 311.969152 98.446838) (xy 312.313628 98.102962) (xy 312.500287 97.653437) (xy 312.500712 97.166698)
+ (xy 312.500712 99.706698) (xy 312.314838 99.256848) (xy 311.970962 98.912372) (xy 311.521437 98.725713) (xy 311.034698 98.725288)
+ (xy 310.584848 98.911162) (xy 310.240372 99.255038) (xy 310.053713 99.704563) (xy 310.053288 100.191302) (xy 310.239162 100.641152)
+ (xy 310.583038 100.985628) (xy 311.032563 101.172287) (xy 311.519302 101.172712) (xy 311.969152 100.986838) (xy 312.313628 100.642962)
+ (xy 312.500287 100.193437) (xy 312.500712 99.706698) (xy 312.500712 105.896224) (xy 312.359692 105.837668) (xy 311.974001 105.837332)
+ (xy 311.61754 105.984618) (xy 311.344577 106.257105) (xy 311.196668 106.613308) (xy 311.196332 106.998999) (xy 311.201595 107.011738)
+ (xy 310.937895 106.747577) (xy 310.581692 106.599668) (xy 310.196001 106.599332) (xy 309.960712 106.69655) (xy 309.960712 99.706698)
+ (xy 309.960712 97.166698) (xy 309.774838 96.716848) (xy 309.430962 96.372372) (xy 308.981437 96.185713) (xy 308.494698 96.185288)
+ (xy 308.044848 96.371162) (xy 307.700372 96.715038) (xy 307.513713 97.164563) (xy 307.513288 97.651302) (xy 307.699162 98.101152)
+ (xy 308.043038 98.445628) (xy 308.492563 98.632287) (xy 308.979302 98.632712) (xy 309.429152 98.446838) (xy 309.773628 98.102962)
+ (xy 309.960287 97.653437) (xy 309.960712 97.166698) (xy 309.960712 99.706698) (xy 309.774838 99.256848) (xy 309.430962 98.912372)
+ (xy 308.981437 98.725713) (xy 308.494698 98.725288) (xy 308.044848 98.911162) (xy 307.700372 99.255038) (xy 307.513713 99.704563)
+ (xy 307.513288 100.191302) (xy 307.699162 100.641152) (xy 308.043038 100.985628) (xy 308.492563 101.172287) (xy 308.979302 101.172712)
+ (xy 309.429152 100.986838) (xy 309.773628 100.642962) (xy 309.960287 100.193437) (xy 309.960712 99.706698) (xy 309.960712 106.69655)
+ (xy 309.83954 106.746618) (xy 309.635365 106.950436) (xy 309.559382 106.76654) (xy 309.286895 106.493577) (xy 308.930692 106.345668)
+ (xy 308.545001 106.345332) (xy 308.18854 106.492618) (xy 308.182668 106.498479) (xy 308.182668 105.853001) (xy 308.035382 105.49654)
+ (xy 307.762895 105.223577) (xy 307.420712 105.081489) (xy 307.420712 99.706698) (xy 307.420712 97.166698) (xy 307.234838 96.716848)
+ (xy 306.890962 96.372372) (xy 306.441437 96.185713) (xy 305.954698 96.185288) (xy 305.515668 96.366691) (xy 305.515668 80.580001)
+ (xy 305.368382 80.22354) (xy 305.095895 79.950577) (xy 304.739692 79.802668) (xy 304.354001 79.802332) (xy 303.99754 79.949618)
+ (xy 303.724577 80.222105) (xy 303.576668 80.578308) (xy 303.576332 80.963999) (xy 303.723618 81.32046) (xy 303.996105 81.593423)
+ (xy 304.352308 81.741332) (xy 304.737999 81.741668) (xy 305.09446 81.594382) (xy 305.367423 81.321895) (xy 305.515332 80.965692)
+ (xy 305.515668 80.580001) (xy 305.515668 96.366691) (xy 305.504848 96.371162) (xy 305.388668 96.487139) (xy 305.388668 93.788001)
+ (xy 305.241382 93.43154) (xy 304.968895 93.158577) (xy 304.612692 93.010668) (xy 304.227001 93.010332) (xy 303.87054 93.157618)
+ (xy 303.847588 93.180529) (xy 303.698895 93.031577) (xy 303.342692 92.883668) (xy 302.957001 92.883332) (xy 302.60054 93.030618)
+ (xy 302.327577 93.303105) (xy 302.323673 93.312505) (xy 302.320382 93.30454) (xy 302.047895 93.031577) (xy 301.832668 92.942206)
+ (xy 301.832668 89.089001) (xy 301.685382 88.73254) (xy 301.472081 88.518866) (xy 301.684423 88.306895) (xy 301.832332 87.950692)
+ (xy 301.832668 87.565001) (xy 301.685382 87.20854) (xy 301.412895 86.935577) (xy 301.250191 86.868016) (xy 301.41146 86.801382)
+ (xy 301.684423 86.528895) (xy 301.832332 86.172692) (xy 301.832668 85.787001) (xy 301.685382 85.43054) (xy 301.412895 85.157577)
+ (xy 301.403494 85.153673) (xy 301.41146 85.150382) (xy 301.684423 84.877895) (xy 301.832332 84.521692) (xy 301.832668 84.136001)
+ (xy 301.685382 83.77954) (xy 301.412895 83.506577) (xy 301.197668 83.417206) (xy 301.197668 80.656201) (xy 301.050382 80.29974)
+ (xy 300.777895 80.026777) (xy 300.689668 79.990141) (xy 300.689668 76.897001) (xy 300.542382 76.54054) (xy 300.269895 76.267577)
+ (xy 299.913692 76.119668) (xy 299.528001 76.119332) (xy 299.34029 76.196892) (xy 299.272382 76.03254) (xy 299.16892 75.928898)
+ (xy 299.292332 75.631692) (xy 299.292668 75.246001) (xy 299.145382 74.88954) (xy 298.872895 74.616577) (xy 298.516692 74.468668)
+ (xy 298.131001 74.468332) (xy 297.77454 74.615618) (xy 297.501577 74.888105) (xy 297.353668 75.244308) (xy 297.353332 75.629999)
+ (xy 297.500618 75.98646) (xy 297.604079 76.090101) (xy 297.480668 76.387308) (xy 297.480332 76.772999) (xy 297.627618 77.12946)
+ (xy 297.900105 77.402423) (xy 298.062808 77.469983) (xy 297.90154 77.536618) (xy 297.628577 77.809105) (xy 297.480668 78.165308)
+ (xy 297.480332 78.550999) (xy 297.627618 78.90746) (xy 297.900105 79.180423) (xy 298.256308 79.328332) (xy 298.641999 79.328668)
+ (xy 298.99846 79.181382) (xy 299.0213 79.15858) (xy 299.043105 79.180423) (xy 299.399308 79.328332) (xy 299.784999 79.328668)
+ (xy 300.14146 79.181382) (xy 300.414423 78.908895) (xy 300.562332 78.552692) (xy 300.562668 78.167001) (xy 300.415382 77.81054)
+ (xy 300.39247 77.787588) (xy 300.541423 77.638895) (xy 300.689332 77.282692) (xy 300.689668 76.897001) (xy 300.689668 79.990141)
+ (xy 300.421692 79.878868) (xy 300.036001 79.878532) (xy 299.67954 80.025818) (xy 299.618465 80.086785) (xy 299.482495 79.950577)
+ (xy 299.126292 79.802668) (xy 298.740601 79.802332) (xy 298.38414 79.949618) (xy 298.111177 80.222105) (xy 297.963268 80.578308)
+ (xy 297.962932 80.963999) (xy 298.110218 81.32046) (xy 298.382705 81.593423) (xy 298.738908 81.741332) (xy 299.124599 81.741668)
+ (xy 299.48106 81.594382) (xy 299.542134 81.533414) (xy 299.678105 81.669623) (xy 300.034308 81.817532) (xy 300.419999 81.817868)
+ (xy 300.77646 81.670582) (xy 301.049423 81.398095) (xy 301.197332 81.041892) (xy 301.197668 80.656201) (xy 301.197668 83.417206)
+ (xy 301.056692 83.358668) (xy 300.671001 83.358332) (xy 300.31454 83.505618) (xy 300.041577 83.778105) (xy 299.893668 84.134308)
+ (xy 299.893569 84.247539) (xy 299.655001 84.247332) (xy 299.29854 84.394618) (xy 299.025577 84.667105) (xy 298.877668 85.023308)
+ (xy 298.877332 85.408999) (xy 299.024618 85.76546) (xy 299.265522 86.006785) (xy 299.17154 86.045618) (xy 298.898577 86.318105)
+ (xy 298.750668 86.674308) (xy 298.750332 87.059999) (xy 298.897618 87.41646) (xy 299.170105 87.689423) (xy 299.179505 87.693326)
+ (xy 299.17154 87.696618) (xy 298.898577 87.969105) (xy 298.750668 88.325308) (xy 298.750332 88.710999) (xy 298.897618 89.06746)
+ (xy 299.048765 89.218871) (xy 299.04454 89.220618) (xy 298.771577 89.493105) (xy 298.623668 89.849308) (xy 298.623332 90.234999)
+ (xy 298.770618 90.59146) (xy 299.043105 90.864423) (xy 299.399308 91.012332) (xy 299.784999 91.012668) (xy 300.14146 90.865382)
+ (xy 300.414423 90.592895) (xy 300.562332 90.236692) (xy 300.562358 90.205922) (xy 300.669308 90.250332) (xy 301.054999 90.250668)
+ (xy 301.41146 90.103382) (xy 301.684423 89.830895) (xy 301.832332 89.474692) (xy 301.832668 89.089001) (xy 301.832668 92.942206)
+ (xy 301.691692 92.883668) (xy 301.306001 92.883332) (xy 300.94954 93.030618) (xy 300.799477 93.180418) (xy 300.650895 93.031577)
+ (xy 300.294692 92.883668) (xy 299.909001 92.883332) (xy 299.55254 93.030618) (xy 299.401128 93.181765) (xy 299.399382 93.17754)
+ (xy 299.126895 92.904577) (xy 298.770692 92.756668) (xy 298.75843 92.756657) (xy 298.890423 92.624895) (xy 299.038332 92.268692)
+ (xy 299.038668 91.883001) (xy 298.891382 91.52654) (xy 298.618895 91.253577) (xy 298.262692 91.105668) (xy 297.877001 91.105332)
+ (xy 297.752947 91.156589) (xy 297.748382 91.14554) (xy 297.475895 90.872577) (xy 297.119692 90.724668) (xy 297.00657 90.724569)
+ (xy 297.006668 90.613001) (xy 296.879668 90.305636) (xy 296.879668 75.754001) (xy 296.879668 71.740801) (xy 296.732382 71.38434)
+ (xy 296.459895 71.111377) (xy 296.103692 70.963468) (xy 295.799862 70.963203) (xy 295.812532 70.932692) (xy 295.812868 70.547001)
+ (xy 295.747033 70.387669) (xy 295.974999 70.387868) (xy 296.33146 70.240582) (xy 296.604423 69.968095) (xy 296.752332 69.611892)
+ (xy 296.752668 69.226201) (xy 296.605382 68.86974) (xy 296.332895 68.596777) (xy 295.976692 68.448868) (xy 295.591001 68.448532)
+ (xy 295.23454 68.595818) (xy 294.961577 68.868305) (xy 294.813668 69.224508) (xy 294.813332 69.610199) (xy 294.879166 69.76953)
+ (xy 294.651201 69.769332) (xy 294.29474 69.916618) (xy 294.021777 70.189105) (xy 293.873868 70.545308) (xy 293.873532 70.930999)
+ (xy 294.020818 71.28746) (xy 294.293305 71.560423) (xy 294.649508 71.708332) (xy 294.953337 71.708596) (xy 294.940668 71.739108)
+ (xy 294.940613 71.80165) (xy 294.575001 71.801332) (xy 294.21854 71.948618) (xy 293.945577 72.221105) (xy 293.797668 72.577308)
+ (xy 293.797332 72.962999) (xy 293.944618 73.31946) (xy 294.217105 73.592423) (xy 294.573308 73.740332) (xy 294.958999 73.740668)
+ (xy 295.31546 73.593382) (xy 295.588423 73.320895) (xy 295.736332 72.964692) (xy 295.736386 72.902149) (xy 296.101999 72.902468)
+ (xy 296.45846 72.755182) (xy 296.731423 72.482695) (xy 296.879332 72.126492) (xy 296.879668 71.740801) (xy 296.879668 75.754001)
+ (xy 296.732382 75.39754) (xy 296.459895 75.124577) (xy 296.103692 74.976668) (xy 295.736349 74.976347) (xy 295.736668 74.611001)
+ (xy 295.589382 74.25454) (xy 295.316895 73.981577) (xy 294.960692 73.833668) (xy 294.575001 73.833332) (xy 294.21854 73.980618)
+ (xy 293.945577 74.253105) (xy 293.797668 74.609308) (xy 293.797332 74.994999) (xy 293.944618 75.35146) (xy 294.217105 75.624423)
+ (xy 294.573308 75.772332) (xy 294.94065 75.772652) (xy 294.940332 76.137999) (xy 295.087618 76.49446) (xy 295.360105 76.767423)
+ (xy 295.716308 76.915332) (xy 296.101999 76.915668) (xy 296.45846 76.768382) (xy 296.731423 76.495895) (xy 296.879332 76.139692)
+ (xy 296.879668 75.754001) (xy 296.879668 90.305636) (xy 296.859382 90.25654) (xy 296.651068 90.047862) (xy 296.651068 81.088001)
+ (xy 296.503782 80.73154) (xy 296.468303 80.695999) (xy 296.477423 80.686895) (xy 296.625332 80.330692) (xy 296.625668 79.945001)
+ (xy 296.478382 79.58854) (xy 296.371668 79.481639) (xy 296.371668 77.913001) (xy 296.224382 77.55654) (xy 295.951895 77.283577)
+ (xy 295.595692 77.135668) (xy 295.210001 77.135332) (xy 294.85354 77.282618) (xy 294.580577 77.555105) (xy 294.432668 77.911308)
+ (xy 294.432332 78.296999) (xy 294.579618 78.65346) (xy 294.852105 78.926423) (xy 295.208308 79.074332) (xy 295.593999 79.074668)
+ (xy 295.95046 78.927382) (xy 296.223423 78.654895) (xy 296.371332 78.298692) (xy 296.371668 77.913001) (xy 296.371668 79.481639)
+ (xy 296.205895 79.315577) (xy 295.849692 79.167668) (xy 295.464001 79.167332) (xy 295.10754 79.314618) (xy 294.834577 79.587105)
+ (xy 294.686668 79.943308) (xy 294.686332 80.328999) (xy 294.833618 80.68546) (xy 294.869096 80.721) (xy 294.859977 80.730105)
+ (xy 294.712068 81.086308) (xy 294.711732 81.471999) (xy 294.859018 81.82846) (xy 295.131505 82.101423) (xy 295.487708 82.249332)
+ (xy 295.873399 82.249668) (xy 296.22986 82.102382) (xy 296.502823 81.829895) (xy 296.650732 81.473692) (xy 296.651068 81.088001)
+ (xy 296.651068 90.047862) (xy 296.586895 89.983577) (xy 296.230692 89.835668) (xy 295.845001 89.835332) (xy 295.48854 89.982618)
+ (xy 295.215577 90.255105) (xy 295.067668 90.611308) (xy 295.067332 90.996999) (xy 295.072595 91.009738) (xy 294.808895 90.745577)
+ (xy 294.452692 90.597668) (xy 294.339668 90.597569) (xy 294.339668 76.643001) (xy 294.192382 76.28654) (xy 293.919895 76.013577)
+ (xy 293.563692 75.865668) (xy 293.178001 75.865332) (xy 292.82154 76.012618) (xy 292.548577 76.285105) (xy 292.400668 76.641308)
+ (xy 292.400332 77.026999) (xy 292.547618 77.38346) (xy 292.820105 77.656423) (xy 293.176308 77.804332) (xy 293.561999 77.804668)
+ (xy 293.91846 77.657382) (xy 294.191423 77.384895) (xy 294.339332 77.028692) (xy 294.339668 76.643001) (xy 294.339668 90.597569)
+ (xy 294.067001 90.597332) (xy 293.71054 90.744618) (xy 293.437577 91.017105) (xy 293.289668 91.373308) (xy 293.289332 91.758999)
+ (xy 293.436618 92.11546) (xy 293.709105 92.388423) (xy 294.065308 92.536332) (xy 294.450999 92.536668) (xy 294.80746 92.389382)
+ (xy 295.080423 92.116895) (xy 295.228332 91.760692) (xy 295.228668 91.375001) (xy 295.223404 91.362261) (xy 295.487105 91.626423)
+ (xy 295.843308 91.774332) (xy 295.956429 91.77443) (xy 295.956332 91.885999) (xy 296.103618 92.24246) (xy 296.376105 92.515423)
+ (xy 296.732308 92.663332) (xy 297.117999 92.663668) (xy 297.242052 92.61241) (xy 297.246618 92.62346) (xy 297.519105 92.896423)
+ (xy 297.875308 93.044332) (xy 297.887569 93.044342) (xy 297.755577 93.176105) (xy 297.607668 93.532308) (xy 297.607332 93.917999)
+ (xy 297.754618 94.27446) (xy 298.027105 94.547423) (xy 298.383308 94.695332) (xy 298.768999 94.695668) (xy 299.12546 94.548382)
+ (xy 299.276871 94.397234) (xy 299.278618 94.40146) (xy 299.551105 94.674423) (xy 299.907308 94.822332) (xy 300.292999 94.822668)
+ (xy 300.64946 94.675382) (xy 300.799522 94.525581) (xy 300.948105 94.674423) (xy 301.304308 94.822332) (xy 301.689999 94.822668)
+ (xy 302.04646 94.675382) (xy 302.319423 94.402895) (xy 302.323326 94.393494) (xy 302.326618 94.40146) (xy 302.599105 94.674423)
+ (xy 302.955308 94.822332) (xy 303.340999 94.822668) (xy 303.69746 94.675382) (xy 303.720411 94.65247) (xy 303.869105 94.801423)
+ (xy 304.225308 94.949332) (xy 304.610999 94.949668) (xy 304.96746 94.802382) (xy 305.240423 94.529895) (xy 305.388332 94.173692)
+ (xy 305.388668 93.788001) (xy 305.388668 96.487139) (xy 305.160372 96.715038) (xy 304.973713 97.164563) (xy 304.973288 97.651302)
+ (xy 305.159162 98.101152) (xy 305.503038 98.445628) (xy 305.952563 98.632287) (xy 306.439302 98.632712) (xy 306.889152 98.446838)
+ (xy 307.233628 98.102962) (xy 307.420287 97.653437) (xy 307.420712 97.166698) (xy 307.420712 99.706698) (xy 307.234838 99.256848)
+ (xy 306.890962 98.912372) (xy 306.441437 98.725713) (xy 305.954698 98.725288) (xy 305.504848 98.911162) (xy 305.160372 99.255038)
+ (xy 304.973713 99.704563) (xy 304.973288 100.191302) (xy 305.159162 100.641152) (xy 305.503038 100.985628) (xy 305.952563 101.172287)
+ (xy 306.439302 101.172712) (xy 306.889152 100.986838) (xy 307.233628 100.642962) (xy 307.420287 100.193437) (xy 307.420712 99.706698)
+ (xy 307.420712 105.081489) (xy 307.406692 105.075668) (xy 307.021001 105.075332) (xy 306.66454 105.222618) (xy 306.391577 105.495105)
+ (xy 306.243668 105.851308) (xy 306.243332 106.236999) (xy 306.390618 106.59346) (xy 306.663105 106.866423) (xy 307.019308 107.014332)
+ (xy 307.404999 107.014668) (xy 307.76146 106.867382) (xy 308.034423 106.594895) (xy 308.182332 106.238692) (xy 308.182668 105.853001)
+ (xy 308.182668 106.498479) (xy 307.915577 106.765105) (xy 307.767668 107.121308) (xy 307.767332 107.506999) (xy 307.914618 107.86346)
+ (xy 308.187105 108.136423) (xy 308.543308 108.284332) (xy 308.928999 108.284668) (xy 309.28546 108.137382) (xy 309.489634 107.933563)
+ (xy 309.565618 108.11746) (xy 309.838105 108.390423) (xy 310.194308 108.538332) (xy 310.579999 108.538668) (xy 310.93646 108.391382)
+ (xy 311.209423 108.118895) (xy 311.357332 107.762692) (xy 311.357668 107.377001) (xy 311.352404 107.364261) (xy 311.616105 107.628423)
+ (xy 311.972308 107.776332) (xy 312.357999 107.776668) (xy 312.71446 107.629382) (xy 312.987423 107.356895) (xy 313.135332 107.000692)
+ (xy 313.135668 106.615001) (xy 313.135668 124.306691) (xy 313.124848 124.311162) (xy 312.780372 124.655038) (xy 312.593713 125.104563)
+ (xy 312.593288 125.591302) (xy 312.779162 126.041152) (xy 313.123038 126.385628) (xy 313.572563 126.572287) (xy 314.059302 126.572712)
+ (xy 314.509152 126.386838) (xy 314.853628 126.042962) (xy 315.040287 125.593437) (xy 315.040712 125.106698) (xy 315.040712 127.658377)
+ (xy 314.867368 127.216014) (xy 314.840716 127.176128) (xy 314.623766 127.117589) (xy 314.588411 127.152944) (xy 314.588411 127.082234)
+ (xy 314.529872 126.865284) (xy 314.083849 126.670405) (xy 313.5972 126.661047) (xy 313.144014 126.838632) (xy 313.104128 126.865284)
+ (xy 313.045589 127.082234) (xy 313.817 127.853645) (xy 314.588411 127.082234) (xy 314.588411 127.152944) (xy 313.852355 127.889)
+ (xy 314.623766 128.660411) (xy 314.840716 128.601872) (xy 315.035595 128.155849) (xy 315.044953 127.6692) (xy 315.044953 131.894202)
+ (xy 314.773577 132.165105) (xy 314.625668 132.521308) (xy 314.625332 132.906999) (xy 314.772618 133.26346) (xy 315.045105 133.536423)
+ (xy 315.401308 133.684332) (xy 315.786999 133.684668) (xy 316.14346 133.537382) (xy 316.416423 133.264895) (xy 316.564332 132.908692)
+ (xy 316.564668 132.523001) (xy 316.564668 133.7394) (xy 314.588411 133.7394) (xy 314.588411 128.695766) (xy 313.817 127.924355)
+ (xy 313.781645 127.95971) (xy 313.781645 127.889) (xy 313.010234 127.117589) (xy 312.793284 127.176128) (xy 312.598405 127.622151)
+ (xy 312.589047 128.1088) (xy 312.766632 128.561986) (xy 312.793284 128.601872) (xy 313.010234 128.660411) (xy 313.781645 127.889)
+ (xy 313.781645 127.95971) (xy 313.045589 128.695766) (xy 313.104128 128.912716) (xy 313.550151 129.107595) (xy 314.0368 129.116953)
+ (xy 314.489986 128.939368) (xy 314.529872 128.912716) (xy 314.588411 128.695766) (xy 314.588411 133.7394) (xy 312.504953 133.7394)
+ (xy 312.504953 125.1292) (xy 312.327368 124.676014) (xy 312.300716 124.636128) (xy 312.083766 124.577589) (xy 312.048411 124.612944)
+ (xy 312.048411 124.542234) (xy 311.989872 124.325284) (xy 311.543849 124.130405) (xy 311.0572 124.121047) (xy 310.849668 124.20237)
+ (xy 310.849668 117.537001) (xy 310.702382 117.18054) (xy 310.429895 116.907577) (xy 310.073692 116.759668) (xy 309.960668 116.759569)
+ (xy 309.960668 110.171001) (xy 309.813382 109.81454) (xy 309.540895 109.541577) (xy 309.184692 109.393668) (xy 308.799001 109.393332)
+ (xy 308.44254 109.540618) (xy 308.169577 109.813105) (xy 308.021668 110.169308) (xy 308.021332 110.554999) (xy 308.168618 110.91146)
+ (xy 308.441105 111.184423) (xy 308.797308 111.332332) (xy 309.182999 111.332668) (xy 309.53946 111.185382) (xy 309.812423 110.912895)
+ (xy 309.960332 110.556692) (xy 309.960668 110.171001) (xy 309.960668 116.759569) (xy 309.688001 116.759332) (xy 309.33154 116.906618)
+ (xy 309.058577 117.179105) (xy 308.910668 117.535308) (xy 308.910332 117.920999) (xy 309.057618 118.27746) (xy 309.330105 118.550423)
+ (xy 309.686308 118.698332) (xy 310.071999 118.698668) (xy 310.42846 118.551382) (xy 310.701423 118.278895) (xy 310.849332 117.922692)
+ (xy 310.849668 117.537001) (xy 310.849668 124.20237) (xy 310.604014 124.298632) (xy 310.564128 124.325284) (xy 310.505589 124.542234)
+ (xy 311.277 125.313645) (xy 312.048411 124.542234) (xy 312.048411 124.612944) (xy 311.312355 125.349) (xy 312.083766 126.120411)
+ (xy 312.300716 126.061872) (xy 312.495595 125.615849) (xy 312.504953 125.1292) (xy 312.504953 133.7394) (xy 312.5005 133.7394)
+ (xy 312.5005 128.691929) (xy 312.5005 128.483071) (xy 312.5005 127.086071) (xy 312.420574 126.893111) (xy 312.272889 126.745426)
+ (xy 312.079929 126.6655) (xy 312.048411 126.6655) (xy 312.048411 126.155766) (xy 311.277 125.384355) (xy 311.241645 125.41971)
+ (xy 311.241645 125.349) (xy 310.470234 124.577589) (xy 310.253284 124.636128) (xy 310.058405 125.082151) (xy 310.049047 125.5688)
+ (xy 310.226632 126.021986) (xy 310.253284 126.061872) (xy 310.470234 126.120411) (xy 311.241645 125.349) (xy 311.241645 125.41971)
+ (xy 310.505589 126.155766) (xy 310.564128 126.372716) (xy 311.010151 126.567595) (xy 311.4968 126.576953) (xy 311.949986 126.399368)
+ (xy 311.989872 126.372716) (xy 312.048411 126.155766) (xy 312.048411 126.6655) (xy 311.871071 126.6655) (xy 310.474071 126.6655)
+ (xy 310.281111 126.745426) (xy 310.133426 126.893111) (xy 310.0535 127.086071) (xy 310.0535 127.294929) (xy 310.0535 128.691929)
+ (xy 310.133426 128.884889) (xy 310.281111 129.032574) (xy 310.474071 129.1125) (xy 310.682929 129.1125) (xy 312.079929 129.1125)
+ (xy 312.272889 129.032574) (xy 312.420574 128.884889) (xy 312.5005 128.691929) (xy 312.5005 133.7394) (xy 309.960712 133.7394)
+ (xy 309.960712 127.646698) (xy 309.960712 125.106698) (xy 309.774838 124.656848) (xy 309.430962 124.312372) (xy 308.981437 124.125713)
+ (xy 308.494698 124.125288) (xy 308.044848 124.311162) (xy 307.700372 124.655038) (xy 307.513713 125.104563) (xy 307.513288 125.591302)
+ (xy 307.699162 126.041152) (xy 308.043038 126.385628) (xy 308.492563 126.572287) (xy 308.979302 126.572712) (xy 309.429152 126.386838)
+ (xy 309.773628 126.042962) (xy 309.960287 125.593437) (xy 309.960712 125.106698) (xy 309.960712 127.646698) (xy 309.774838 127.196848)
+ (xy 309.430962 126.852372) (xy 308.981437 126.665713) (xy 308.494698 126.665288) (xy 308.044848 126.851162) (xy 307.700372 127.195038)
+ (xy 307.513713 127.644563) (xy 307.513288 128.131302) (xy 307.699162 128.581152) (xy 308.043038 128.925628) (xy 308.492563 129.112287)
+ (xy 308.979302 129.112712) (xy 309.429152 128.926838) (xy 309.773628 128.582962) (xy 309.960287 128.133437) (xy 309.960712 127.646698)
+ (xy 309.960712 133.7394) (xy 307.420712 133.7394) (xy 307.420712 127.646698) (xy 307.420712 125.106698) (xy 307.234838 124.656848)
+ (xy 307.166668 124.588559) (xy 307.166668 121.347001) (xy 307.166668 114.997001) (xy 307.019382 114.64054) (xy 306.746895 114.367577)
+ (xy 306.390692 114.219668) (xy 306.005001 114.219332) (xy 305.64854 114.366618) (xy 305.642668 114.372479) (xy 305.642668 110.552001)
+ (xy 305.495382 110.19554) (xy 305.222895 109.922577) (xy 304.880712 109.780489) (xy 304.880712 99.706698) (xy 304.880712 97.166698)
+ (xy 304.694838 96.716848) (xy 304.350962 96.372372) (xy 303.901437 96.185713) (xy 303.414698 96.185288) (xy 302.964848 96.371162)
+ (xy 302.620372 96.715038) (xy 302.433713 97.164563) (xy 302.433288 97.651302) (xy 302.619162 98.101152) (xy 302.963038 98.445628)
+ (xy 303.412563 98.632287) (xy 303.899302 98.632712) (xy 304.349152 98.446838) (xy 304.693628 98.102962) (xy 304.880287 97.653437)
+ (xy 304.880712 97.166698) (xy 304.880712 99.706698) (xy 304.694838 99.256848) (xy 304.350962 98.912372) (xy 303.901437 98.725713)
+ (xy 303.414698 98.725288) (xy 302.964848 98.911162) (xy 302.620372 99.255038) (xy 302.433713 99.704563) (xy 302.433288 100.191302)
+ (xy 302.619162 100.641152) (xy 302.963038 100.985628) (xy 303.412563 101.172287) (xy 303.899302 101.172712) (xy 304.349152 100.986838)
+ (xy 304.693628 100.642962) (xy 304.880287 100.193437) (xy 304.880712 99.706698) (xy 304.880712 109.780489) (xy 304.866692 109.774668)
+ (xy 304.481001 109.774332) (xy 304.12454 109.921618) (xy 303.851577 110.194105) (xy 303.703668 110.550308) (xy 303.703332 110.935999)
+ (xy 303.850618 111.29246) (xy 304.123105 111.565423) (xy 304.479308 111.713332) (xy 304.864999 111.713668) (xy 305.22146 111.566382)
+ (xy 305.494423 111.293895) (xy 305.642332 110.937692) (xy 305.642668 110.552001) (xy 305.642668 114.372479) (xy 305.375577 114.639105)
+ (xy 305.227668 114.995308) (xy 305.227332 115.380999) (xy 305.374618 115.73746) (xy 305.647105 116.010423) (xy 306.003308 116.158332)
+ (xy 306.388999 116.158668) (xy 306.74546 116.011382) (xy 307.018423 115.738895) (xy 307.166332 115.382692) (xy 307.166668 114.997001)
+ (xy 307.166668 121.347001) (xy 307.019382 120.99054) (xy 306.746895 120.717577) (xy 306.390692 120.569668) (xy 306.005001 120.569332)
+ (xy 305.64854 120.716618) (xy 305.375577 120.989105) (xy 305.227668 121.345308) (xy 305.227332 121.730999) (xy 305.374618 122.08746)
+ (xy 305.647105 122.360423) (xy 306.003308 122.508332) (xy 306.388999 122.508668) (xy 306.74546 122.361382) (xy 307.018423 122.088895)
+ (xy 307.166332 121.732692) (xy 307.166668 121.347001) (xy 307.166668 124.588559) (xy 306.890962 124.312372) (xy 306.441437 124.125713)
+ (xy 305.954698 124.125288) (xy 305.504848 124.311162) (xy 305.160372 124.655038) (xy 305.007668 125.02279) (xy 305.007668 119.442001)
+ (xy 304.860382 119.08554) (xy 304.587895 118.812577) (xy 304.231692 118.664668) (xy 304.118668 118.664569) (xy 304.118668 114.997001)
+ (xy 303.971382 114.64054) (xy 303.698895 114.367577) (xy 303.342692 114.219668) (xy 302.957001 114.219332) (xy 302.60054 114.366618)
+ (xy 302.340712 114.625992) (xy 302.340712 99.706698) (xy 302.340712 97.166698) (xy 302.154838 96.716848) (xy 301.810962 96.372372)
+ (xy 301.361437 96.185713) (xy 300.874698 96.185288) (xy 300.424848 96.371162) (xy 300.080372 96.715038) (xy 299.893713 97.164563)
+ (xy 299.893288 97.651302) (xy 300.079162 98.101152) (xy 300.423038 98.445628) (xy 300.872563 98.632287) (xy 301.359302 98.632712)
+ (xy 301.809152 98.446838) (xy 302.153628 98.102962) (xy 302.340287 97.653437) (xy 302.340712 97.166698) (xy 302.340712 99.706698)
+ (xy 302.154838 99.256848) (xy 301.810962 98.912372) (xy 301.361437 98.725713) (xy 300.874698 98.725288) (xy 300.424848 98.911162)
+ (xy 300.080372 99.255038) (xy 299.893713 99.704563) (xy 299.893288 100.191302) (xy 300.079162 100.641152) (xy 300.423038 100.985628)
+ (xy 300.872563 101.172287) (xy 301.359302 101.172712) (xy 301.809152 100.986838) (xy 302.153628 100.642962) (xy 302.340287 100.193437)
+ (xy 302.340712 99.706698) (xy 302.340712 114.625992) (xy 302.327577 114.639105) (xy 302.179668 114.995308) (xy 302.179332 115.380999)
+ (xy 302.326618 115.73746) (xy 302.599105 116.010423) (xy 302.955308 116.158332) (xy 303.340999 116.158668) (xy 303.69746 116.011382)
+ (xy 303.970423 115.738895) (xy 304.118332 115.382692) (xy 304.118668 114.997001) (xy 304.118668 118.664569) (xy 303.846001 118.664332)
+ (xy 303.48954 118.811618) (xy 303.216577 119.084105) (xy 303.068668 119.440308) (xy 303.068332 119.825999) (xy 303.215618 120.18246)
+ (xy 303.488105 120.455423) (xy 303.844308 120.603332) (xy 304.229999 120.603668) (xy 304.58646 120.456382) (xy 304.859423 120.183895)
+ (xy 305.007332 119.827692) (xy 305.007668 119.442001) (xy 305.007668 125.02279) (xy 304.973713 125.104563) (xy 304.973288 125.591302)
+ (xy 305.159162 126.041152) (xy 305.503038 126.385628) (xy 305.952563 126.572287) (xy 306.439302 126.572712) (xy 306.889152 126.386838)
+ (xy 307.233628 126.042962) (xy 307.420287 125.593437) (xy 307.420712 125.106698) (xy 307.420712 127.646698) (xy 307.234838 127.196848)
+ (xy 306.890962 126.852372) (xy 306.441437 126.665713) (xy 305.954698 126.665288) (xy 305.504848 126.851162) (xy 305.160372 127.195038)
+ (xy 304.973713 127.644563) (xy 304.973288 128.131302) (xy 305.159162 128.581152) (xy 305.503038 128.925628) (xy 305.952563 129.112287)
+ (xy 306.439302 129.112712) (xy 306.889152 128.926838) (xy 307.233628 128.582962) (xy 307.420287 128.133437) (xy 307.420712 127.646698)
+ (xy 307.420712 133.7394) (xy 304.880712 133.7394) (xy 304.880712 127.646698) (xy 304.880712 125.106698) (xy 304.694838 124.656848)
+ (xy 304.350962 124.312372) (xy 303.901437 124.125713) (xy 303.414698 124.125288) (xy 303.102668 124.254216) (xy 303.102668 122.363001)
+ (xy 302.955382 122.00654) (xy 302.682895 121.733577) (xy 302.326692 121.585668) (xy 301.941001 121.585332) (xy 301.928261 121.590595)
+ (xy 302.192423 121.326895) (xy 302.340332 120.970692) (xy 302.340668 120.585001) (xy 302.193382 120.22854) (xy 301.920895 119.955577)
+ (xy 301.564692 119.807668) (xy 301.179001 119.807332) (xy 300.82254 119.954618) (xy 300.549577 120.227105) (xy 300.401668 120.583308)
+ (xy 300.401332 120.968999) (xy 300.548618 121.32546) (xy 300.821105 121.598423) (xy 301.177308 121.746332) (xy 301.562999 121.746668)
+ (xy 301.575738 121.741404) (xy 301.311577 122.005105) (xy 301.163668 122.361308) (xy 301.163627 122.407616) (xy 301.050382 122.13354)
+ (xy 300.777895 121.860577) (xy 300.421692 121.712668) (xy 300.036001 121.712332) (xy 299.804953 121.807798) (xy 299.804953 114.9692)
+ (xy 299.804953 109.8892) (xy 299.804953 107.3492) (xy 299.800712 107.338377) (xy 299.800712 104.786698) (xy 299.800712 102.246698)
+ (xy 299.800712 99.706698) (xy 299.800712 97.166698) (xy 299.614838 96.716848) (xy 299.270962 96.372372) (xy 298.821437 96.185713)
+ (xy 298.334698 96.185288) (xy 297.884848 96.371162) (xy 297.540372 96.715038) (xy 297.353713 97.164563) (xy 297.353288 97.651302)
+ (xy 297.539162 98.101152) (xy 297.883038 98.445628) (xy 298.332563 98.632287) (xy 298.819302 98.632712) (xy 299.269152 98.446838)
+ (xy 299.613628 98.102962) (xy 299.800287 97.653437) (xy 299.800712 97.166698) (xy 299.800712 99.706698) (xy 299.614838 99.256848)
+ (xy 299.270962 98.912372) (xy 298.821437 98.725713) (xy 298.334698 98.725288) (xy 297.884848 98.911162) (xy 297.540372 99.255038)
+ (xy 297.353713 99.704563) (xy 297.353288 100.191302) (xy 297.539162 100.641152) (xy 297.883038 100.985628) (xy 298.332563 101.172287)
+ (xy 298.819302 101.172712) (xy 299.269152 100.986838) (xy 299.613628 100.642962) (xy 299.800287 100.193437) (xy 299.800712 99.706698)
+ (xy 299.800712 102.246698) (xy 299.614838 101.796848) (xy 299.270962 101.452372) (xy 298.821437 101.265713) (xy 298.334698 101.265288)
+ (xy 297.884848 101.451162) (xy 297.540372 101.795038) (xy 297.353713 102.244563) (xy 297.353288 102.731302) (xy 297.539162 103.181152)
+ (xy 297.883038 103.525628) (xy 298.332563 103.712287) (xy 298.819302 103.712712) (xy 299.269152 103.526838) (xy 299.613628 103.182962)
+ (xy 299.800287 102.733437) (xy 299.800712 102.246698) (xy 299.800712 104.786698) (xy 299.614838 104.336848) (xy 299.270962 103.992372)
+ (xy 298.821437 103.805713) (xy 298.334698 103.805288) (xy 297.884848 103.991162) (xy 297.540372 104.335038) (xy 297.353713 104.784563)
+ (xy 297.353288 105.271302) (xy 297.539162 105.721152) (xy 297.883038 106.065628) (xy 298.332563 106.252287) (xy 298.819302 106.252712)
+ (xy 299.269152 106.066838) (xy 299.613628 105.722962) (xy 299.800287 105.273437) (xy 299.800712 104.786698) (xy 299.800712 107.338377)
+ (xy 299.627368 106.896014) (xy 299.600716 106.856128) (xy 299.383766 106.797589) (xy 299.348411 106.832944) (xy 299.348411 106.762234)
+ (xy 299.289872 106.545284) (xy 298.843849 106.350405) (xy 298.3572 106.341047) (xy 297.904014 106.518632) (xy 297.864128 106.545284)
+ (xy 297.805589 106.762234) (xy 298.577 107.533645) (xy 299.348411 106.762234) (xy 299.348411 106.832944) (xy 298.612355 107.569)
+ (xy 299.383766 108.340411) (xy 299.600716 108.281872) (xy 299.795595 107.835849) (xy 299.804953 107.3492) (xy 299.804953 109.8892)
+ (xy 299.627368 109.436014) (xy 299.600716 109.396128) (xy 299.383766 109.337589) (xy 299.348411 109.372944) (xy 299.348411 109.302234)
+ (xy 299.348411 108.375766) (xy 298.577 107.604355) (xy 298.541645 107.63971) (xy 298.541645 107.569) (xy 297.770234 106.797589)
+ (xy 297.553284 106.856128) (xy 297.358405 107.302151) (xy 297.349047 107.7888) (xy 297.526632 108.241986) (xy 297.553284 108.281872)
+ (xy 297.770234 108.340411) (xy 298.541645 107.569) (xy 298.541645 107.63971) (xy 297.805589 108.375766) (xy 297.864128 108.592716)
+ (xy 298.310151 108.787595) (xy 298.7968 108.796953) (xy 299.249986 108.619368) (xy 299.289872 108.592716) (xy 299.348411 108.375766)
+ (xy 299.348411 109.302234) (xy 299.289872 109.085284) (xy 298.843849 108.890405) (xy 298.3572 108.881047) (xy 297.904014 109.058632)
+ (xy 297.864128 109.085284) (xy 297.805589 109.302234) (xy 298.577 110.073645) (xy 299.348411 109.302234) (xy 299.348411 109.372944)
+ (xy 298.612355 110.109) (xy 299.383766 110.880411) (xy 299.600716 110.821872) (xy 299.795595 110.375849) (xy 299.804953 109.8892)
+ (xy 299.804953 114.9692) (xy 299.800712 114.958377) (xy 299.800712 112.406698) (xy 299.614838 111.956848) (xy 299.348411 111.689956)
+ (xy 299.348411 110.915766) (xy 298.577 110.144355) (xy 298.541645 110.17971) (xy 298.541645 110.109) (xy 297.770234 109.337589)
+ (xy 297.553284 109.396128) (xy 297.358405 109.842151) (xy 297.349047 110.3288) (xy 297.526632 110.781986) (xy 297.553284 110.821872)
+ (xy 297.770234 110.880411) (xy 298.541645 110.109) (xy 298.541645 110.17971) (xy 297.805589 110.915766) (xy 297.864128 111.132716)
+ (xy 298.310151 111.327595) (xy 298.7968 111.336953) (xy 299.249986 111.159368) (xy 299.289872 111.132716) (xy 299.348411 110.915766)
+ (xy 299.348411 111.689956) (xy 299.270962 111.612372) (xy 298.821437 111.425713) (xy 298.334698 111.425288) (xy 297.884848 111.611162)
+ (xy 297.540372 111.955038) (xy 297.353713 112.404563) (xy 297.353288 112.891302) (xy 297.539162 113.341152) (xy 297.883038 113.685628)
+ (xy 298.332563 113.872287) (xy 298.819302 113.872712) (xy 299.269152 113.686838) (xy 299.613628 113.342962) (xy 299.800287 112.893437)
+ (xy 299.800712 112.406698) (xy 299.800712 114.958377) (xy 299.627368 114.516014) (xy 299.600716 114.476128) (xy 299.383766 114.417589)
+ (xy 299.348411 114.452944) (xy 299.348411 114.382234) (xy 299.289872 114.165284) (xy 298.843849 113.970405) (xy 298.3572 113.961047)
+ (xy 297.904014 114.138632) (xy 297.864128 114.165284) (xy 297.805589 114.382234) (xy 298.577 115.153645) (xy 299.348411 114.382234)
+ (xy 299.348411 114.452944) (xy 298.612355 115.189) (xy 299.383766 115.960411) (xy 299.600716 115.901872) (xy 299.795595 115.455849)
+ (xy 299.804953 114.9692) (xy 299.804953 121.807798) (xy 299.800712 121.80955) (xy 299.800712 120.026698) (xy 299.800712 117.486698)
+ (xy 299.614838 117.036848) (xy 299.348411 116.769956) (xy 299.348411 115.995766) (xy 298.577 115.224355) (xy 298.541645 115.25971)
+ (xy 298.541645 115.189) (xy 297.770234 114.417589) (xy 297.553284 114.476128) (xy 297.358405 114.922151) (xy 297.349047 115.4088)
+ (xy 297.526632 115.861986) (xy 297.553284 115.901872) (xy 297.770234 115.960411) (xy 298.541645 115.189) (xy 298.541645 115.25971)
+ (xy 297.805589 115.995766) (xy 297.864128 116.212716) (xy 298.310151 116.407595) (xy 298.7968 116.416953) (xy 299.249986 116.239368)
+ (xy 299.289872 116.212716) (xy 299.348411 115.995766) (xy 299.348411 116.769956) (xy 299.270962 116.692372) (xy 298.821437 116.505713)
+ (xy 298.334698 116.505288) (xy 297.884848 116.691162) (xy 297.540372 117.035038) (xy 297.353713 117.484563) (xy 297.353288 117.971302)
+ (xy 297.539162 118.421152) (xy 297.883038 118.765628) (xy 298.332563 118.952287) (xy 298.819302 118.952712) (xy 299.269152 118.766838)
+ (xy 299.613628 118.422962) (xy 299.800287 117.973437) (xy 299.800712 117.486698) (xy 299.800712 120.026698) (xy 299.614838 119.576848)
+ (xy 299.270962 119.232372) (xy 298.821437 119.045713) (xy 298.334698 119.045288) (xy 297.884848 119.231162) (xy 297.540372 119.575038)
+ (xy 297.353713 120.024563) (xy 297.353288 120.511302) (xy 297.539162 120.961152) (xy 297.883038 121.305628) (xy 298.332563 121.492287)
+ (xy 298.819302 121.492712) (xy 299.269152 121.306838) (xy 299.613628 120.962962) (xy 299.800287 120.513437) (xy 299.800712 120.026698)
+ (xy 299.800712 121.80955) (xy 299.67954 121.859618) (xy 299.518517 122.020359) (xy 299.270962 121.772372) (xy 298.821437 121.585713)
+ (xy 298.334698 121.585288) (xy 297.884848 121.771162) (xy 297.540372 122.115038) (xy 297.353713 122.564563) (xy 297.353288 123.051302)
+ (xy 297.539162 123.501152) (xy 297.883038 123.845628) (xy 298.332563 124.032287) (xy 298.819302 124.032712) (xy 299.269152 123.846838)
+ (xy 299.613628 123.502962) (xy 299.632433 123.457672) (xy 299.678105 123.503423) (xy 300.034308 123.651332) (xy 300.419999 123.651668)
+ (xy 300.77646 123.504382) (xy 301.049423 123.231895) (xy 301.197332 122.875692) (xy 301.197372 122.829383) (xy 301.310618 123.10346)
+ (xy 301.583105 123.376423) (xy 301.939308 123.524332) (xy 302.324999 123.524668) (xy 302.68146 123.377382) (xy 302.954423 123.104895)
+ (xy 303.102332 122.748692) (xy 303.102668 122.363001) (xy 303.102668 124.254216) (xy 302.964848 124.311162) (xy 302.620372 124.655038)
+ (xy 302.433713 125.104563) (xy 302.433288 125.591302) (xy 302.619162 126.041152) (xy 302.963038 126.385628) (xy 303.412563 126.572287)
+ (xy 303.899302 126.572712) (xy 304.349152 126.386838) (xy 304.693628 126.042962) (xy 304.880287 125.593437) (xy 304.880712 125.106698)
+ (xy 304.880712 127.646698) (xy 304.694838 127.196848) (xy 304.350962 126.852372) (xy 303.901437 126.665713) (xy 303.414698 126.665288)
+ (xy 302.964848 126.851162) (xy 302.620372 127.195038) (xy 302.433713 127.644563) (xy 302.433288 128.131302) (xy 302.619162 128.581152)
+ (xy 302.963038 128.925628) (xy 303.412563 129.112287) (xy 303.899302 129.112712) (xy 304.349152 128.926838) (xy 304.693628 128.582962)
+ (xy 304.880287 128.133437) (xy 304.880712 127.646698) (xy 304.880712 133.7394) (xy 302.340712 133.7394) (xy 302.340712 127.646698)
+ (xy 302.340712 125.106698) (xy 302.154838 124.656848) (xy 301.810962 124.312372) (xy 301.361437 124.125713) (xy 300.874698 124.125288)
+ (xy 300.424848 124.311162) (xy 300.080372 124.655038) (xy 299.893713 125.104563) (xy 299.893288 125.591302) (xy 300.079162 126.041152)
+ (xy 300.423038 126.385628) (xy 300.872563 126.572287) (xy 301.359302 126.572712) (xy 301.809152 126.386838) (xy 302.153628 126.042962)
+ (xy 302.340287 125.593437) (xy 302.340712 125.106698) (xy 302.340712 127.646698) (xy 302.154838 127.196848) (xy 301.810962 126.852372)
+ (xy 301.361437 126.665713) (xy 300.874698 126.665288) (xy 300.424848 126.851162) (xy 300.080372 127.195038) (xy 299.893713 127.644563)
+ (xy 299.893288 128.131302) (xy 300.079162 128.581152) (xy 300.423038 128.925628) (xy 300.872563 129.112287) (xy 301.359302 129.112712)
+ (xy 301.809152 128.926838) (xy 302.153628 128.582962) (xy 302.340287 128.133437) (xy 302.340712 127.646698) (xy 302.340712 133.7394)
+ (xy 299.800712 133.7394) (xy 299.800712 127.646698) (xy 299.800712 125.106698) (xy 299.614838 124.656848) (xy 299.270962 124.312372)
+ (xy 298.821437 124.125713) (xy 298.334698 124.125288) (xy 297.884848 124.311162) (xy 297.540372 124.655038) (xy 297.353713 125.104563)
+ (xy 297.353288 125.591302) (xy 297.539162 126.041152) (xy 297.883038 126.385628) (xy 298.332563 126.572287) (xy 298.819302 126.572712)
+ (xy 299.269152 126.386838) (xy 299.613628 126.042962) (xy 299.800287 125.593437) (xy 299.800712 125.106698) (xy 299.800712 127.646698)
+ (xy 299.614838 127.196848) (xy 299.270962 126.852372) (xy 298.821437 126.665713) (xy 298.334698 126.665288) (xy 297.884848 126.851162)
+ (xy 297.756529 126.979257) (xy 297.748382 126.95954) (xy 297.475895 126.686577) (xy 297.260712 126.597224) (xy 297.260712 125.106698)
+ (xy 297.260712 122.566698) (xy 297.260712 120.026698) (xy 297.260712 117.486698) (xy 297.260712 114.946698) (xy 297.260712 112.406698)
+ (xy 297.260712 109.866698) (xy 297.260712 107.326698) (xy 297.260712 104.786698) (xy 297.260712 102.246698) (xy 297.260712 99.706698)
+ (xy 297.074838 99.256848) (xy 296.730962 98.912372) (xy 296.281437 98.725713) (xy 295.794698 98.725288) (xy 295.344848 98.911162)
+ (xy 295.000372 99.255038) (xy 294.813713 99.704563) (xy 294.813288 100.191302) (xy 294.999162 100.641152) (xy 295.343038 100.985628)
+ (xy 295.792563 101.172287) (xy 296.279302 101.172712) (xy 296.729152 100.986838) (xy 297.073628 100.642962) (xy 297.260287 100.193437)
+ (xy 297.260712 99.706698) (xy 297.260712 102.246698) (xy 297.074838 101.796848) (xy 296.730962 101.452372) (xy 296.281437 101.265713)
+ (xy 295.794698 101.265288) (xy 295.344848 101.451162) (xy 295.000372 101.795038) (xy 294.813713 102.244563) (xy 294.813288 102.731302)
+ (xy 294.999162 103.181152) (xy 295.343038 103.525628) (xy 295.792563 103.712287) (xy 296.279302 103.712712) (xy 296.729152 103.526838)
+ (xy 297.073628 103.182962) (xy 297.260287 102.733437) (xy 297.260712 102.246698) (xy 297.260712 104.786698) (xy 297.074838 104.336848)
+ (xy 296.730962 103.992372) (xy 296.281437 103.805713) (xy 295.794698 103.805288) (xy 295.344848 103.991162) (xy 295.000372 104.335038)
+ (xy 294.813713 104.784563) (xy 294.813288 105.271302) (xy 294.999162 105.721152) (xy 295.343038 106.065628) (xy 295.792563 106.252287)
+ (xy 296.279302 106.252712) (xy 296.729152 106.066838) (xy 297.073628 105.722962) (xy 297.260287 105.273437) (xy 297.260712 104.786698)
+ (xy 297.260712 107.326698) (xy 297.074838 106.876848) (xy 296.730962 106.532372) (xy 296.281437 106.345713) (xy 295.794698 106.345288)
+ (xy 295.344848 106.531162) (xy 295.000372 106.875038) (xy 294.813713 107.324563) (xy 294.813288 107.811302) (xy 294.999162 108.261152)
+ (xy 295.343038 108.605628) (xy 295.792563 108.792287) (xy 296.279302 108.792712) (xy 296.729152 108.606838) (xy 297.073628 108.262962)
+ (xy 297.260287 107.813437) (xy 297.260712 107.326698) (xy 297.260712 109.866698) (xy 297.074838 109.416848) (xy 296.730962 109.072372)
+ (xy 296.281437 108.885713) (xy 295.794698 108.885288) (xy 295.344848 109.071162) (xy 295.000372 109.415038) (xy 294.813713 109.864563)
+ (xy 294.813288 110.351302) (xy 294.999162 110.801152) (xy 295.343038 111.145628) (xy 295.792563 111.332287) (xy 296.279302 111.332712)
+ (xy 296.729152 111.146838) (xy 297.073628 110.802962) (xy 297.260287 110.353437) (xy 297.260712 109.866698) (xy 297.260712 112.406698)
+ (xy 297.074838 111.956848) (xy 296.730962 111.612372) (xy 296.281437 111.425713) (xy 295.794698 111.425288) (xy 295.344848 111.611162)
+ (xy 295.000372 111.955038) (xy 294.813713 112.404563) (xy 294.813288 112.891302) (xy 294.999162 113.341152) (xy 295.343038 113.685628)
+ (xy 295.792563 113.872287) (xy 296.279302 113.872712) (xy 296.729152 113.686838) (xy 297.073628 113.342962) (xy 297.260287 112.893437)
+ (xy 297.260712 112.406698) (xy 297.260712 114.946698) (xy 297.074838 114.496848) (xy 296.730962 114.152372) (xy 296.281437 113.965713)
+ (xy 295.794698 113.965288) (xy 295.344848 114.151162) (xy 295.000372 114.495038) (xy 294.813713 114.944563) (xy 294.813288 115.431302)
+ (xy 294.999162 115.881152) (xy 295.343038 116.225628) (xy 295.792563 116.412287) (xy 296.279302 116.412712) (xy 296.729152 116.226838)
+ (xy 297.073628 115.882962) (xy 297.260287 115.433437) (xy 297.260712 114.946698) (xy 297.260712 117.486698) (xy 297.074838 117.036848)
+ (xy 296.730962 116.692372) (xy 296.281437 116.505713) (xy 295.794698 116.505288) (xy 295.344848 116.691162) (xy 295.000372 117.035038)
+ (xy 294.813713 117.484563) (xy 294.813288 117.971302) (xy 294.999162 118.421152) (xy 295.343038 118.765628) (xy 295.792563 118.952287)
+ (xy 296.279302 118.952712) (xy 296.729152 118.766838) (xy 297.073628 118.422962) (xy 297.260287 117.973437) (xy 297.260712 117.486698)
+ (xy 297.260712 120.026698) (xy 297.074838 119.576848) (xy 296.730962 119.232372) (xy 296.281437 119.045713) (xy 295.794698 119.045288)
+ (xy 295.344848 119.231162) (xy 295.000372 119.575038) (xy 294.813713 120.024563) (xy 294.813288 120.511302) (xy 294.999162 120.961152)
+ (xy 295.343038 121.305628) (xy 295.792563 121.492287) (xy 296.279302 121.492712) (xy 296.729152 121.306838) (xy 297.073628 120.962962)
+ (xy 297.260287 120.513437) (xy 297.260712 120.026698) (xy 297.260712 122.566698) (xy 297.074838 122.116848) (xy 296.730962 121.772372)
+ (xy 296.281437 121.585713) (xy 295.794698 121.585288) (xy 295.344848 121.771162) (xy 295.000372 122.115038) (xy 294.813713 122.564563)
+ (xy 294.813288 123.051302) (xy 294.999162 123.501152) (xy 295.343038 123.845628) (xy 295.792563 124.032287) (xy 296.279302 124.032712)
+ (xy 296.729152 123.846838) (xy 297.073628 123.502962) (xy 297.260287 123.053437) (xy 297.260712 122.566698) (xy 297.260712 125.106698)
+ (xy 297.074838 124.656848) (xy 296.730962 124.312372) (xy 296.281437 124.125713) (xy 295.794698 124.125288) (xy 295.344848 124.311162)
+ (xy 295.000372 124.655038) (xy 294.813713 125.104563) (xy 294.813458 125.395539) (xy 294.575001 125.395332) (xy 294.454031 125.445315)
+ (xy 294.466332 125.415692) (xy 294.466668 125.030001) (xy 294.319382 124.67354) (xy 294.046895 124.400577) (xy 293.690692 124.252668)
+ (xy 293.678208 124.252657) (xy 293.937423 123.993895) (xy 294.085332 123.637692) (xy 294.085668 123.252001) (xy 293.938382 122.89554)
+ (xy 293.665895 122.622577) (xy 293.309692 122.474668) (xy 292.924001 122.474332) (xy 292.56754 122.621618) (xy 292.294577 122.894105)
+ (xy 292.244355 123.015052) (xy 292.244355 117.069217) (xy 292.244355 108.179217) (xy 292.244355 99.289217) (xy 292.244355 90.399217)
+ (xy 292.244355 81.509217) (xy 292.244355 72.619217) (xy 292.244355 63.729217) (xy 291.93307 62.975851) (xy 291.357181 62.398955)
+ (xy 290.604359 62.086357) (xy 289.789217 62.085645) (xy 289.035851 62.39693) (xy 288.458955 62.972819) (xy 288.356336 63.219951)
+ (xy 288.350382 63.20554) (xy 288.077895 62.932577) (xy 287.721692 62.784668) (xy 287.336001 62.784332) (xy 286.97954 62.931618)
+ (xy 286.706577 63.204105) (xy 286.558668 63.560308) (xy 286.558332 63.945999) (xy 286.705618 64.30246) (xy 286.978105 64.575423)
+ (xy 287.334308 64.723332) (xy 287.719999 64.723668) (xy 288.07646 64.576382) (xy 288.145674 64.507288) (xy 288.145645 64.540783)
+ (xy 288.45693 65.294149) (xy 289.032819 65.871045) (xy 289.785641 66.183643) (xy 290.600783 66.184355) (xy 291.354149 65.87307)
+ (xy 291.931045 65.297181) (xy 292.243643 64.544359) (xy 292.244355 63.729217) (xy 292.244355 72.619217) (xy 291.93307 71.865851)
+ (xy 291.357181 71.288955) (xy 290.604359 70.976357) (xy 289.789217 70.975645) (xy 289.035851 71.28693) (xy 288.497668 71.824173)
+ (xy 288.497668 67.880001) (xy 288.350382 67.52354) (xy 288.077895 67.250577) (xy 287.721692 67.102668) (xy 287.336001 67.102332)
+ (xy 286.97954 67.249618) (xy 286.706577 67.522105) (xy 286.558668 67.878308) (xy 286.558332 68.263999) (xy 286.705618 68.62046)
+ (xy 286.978105 68.893423) (xy 287.334308 69.041332) (xy 287.719999 69.041668) (xy 288.07646 68.894382) (xy 288.349423 68.621895)
+ (xy 288.497332 68.265692) (xy 288.497668 67.880001) (xy 288.497668 71.824173) (xy 288.458955 71.862819) (xy 288.146357 72.615641)
+ (xy 288.145645 73.430783) (xy 288.45693 74.184149) (xy 289.032819 74.761045) (xy 289.785641 75.073643) (xy 290.600783 75.074355)
+ (xy 291.354149 74.76307) (xy 291.931045 74.187181) (xy 292.243643 73.434359) (xy 292.244355 72.619217) (xy 292.244355 81.509217)
+ (xy 291.93307 80.755851) (xy 291.357181 80.178955) (xy 290.604359 79.866357) (xy 289.789217 79.865645) (xy 289.035851 80.17693)
+ (xy 288.458955 80.752819) (xy 288.146357 81.505641) (xy 288.145645 82.320783) (xy 288.45693 83.074149) (xy 289.032819 83.651045)
+ (xy 289.785641 83.963643) (xy 290.600783 83.964355) (xy 291.354149 83.65307) (xy 291.931045 83.077181) (xy 292.243643 82.324359)
+ (xy 292.244355 81.509217) (xy 292.244355 90.399217) (xy 291.93307 89.645851) (xy 291.357181 89.068955) (xy 290.604359 88.756357)
+ (xy 289.789217 88.755645) (xy 289.035851 89.06693) (xy 288.458955 89.642819) (xy 288.146357 90.395641) (xy 288.145645 91.210783)
+ (xy 288.45693 91.964149) (xy 289.032819 92.541045) (xy 289.785641 92.853643) (xy 290.600783 92.854355) (xy 291.354149 92.54307)
+ (xy 291.931045 91.967181) (xy 292.243643 91.214359) (xy 292.244355 90.399217) (xy 292.244355 99.289217) (xy 291.93307 98.535851)
+ (xy 291.357181 97.958955) (xy 290.604359 97.646357) (xy 289.789217 97.645645) (xy 289.035851 97.95693) (xy 288.458955 98.532819)
+ (xy 288.146357 99.285641) (xy 288.145645 100.100783) (xy 288.45693 100.854149) (xy 289.032819 101.431045) (xy 289.785641 101.743643)
+ (xy 290.600783 101.744355) (xy 291.354149 101.43307) (xy 291.931045 100.857181) (xy 292.243643 100.104359) (xy 292.244355 99.289217)
+ (xy 292.244355 108.179217) (xy 291.93307 107.425851) (xy 291.357181 106.848955) (xy 290.604359 106.536357) (xy 289.789217 106.535645)
+ (xy 289.035851 106.84693) (xy 288.497668 107.384173) (xy 288.497668 103.821001) (xy 288.350382 103.46454) (xy 288.077895 103.191577)
+ (xy 287.721692 103.043668) (xy 287.336001 103.043332) (xy 286.97954 103.190618) (xy 286.706577 103.463105) (xy 286.558668 103.819308)
+ (xy 286.558332 104.204999) (xy 286.705618 104.56146) (xy 286.978105 104.834423) (xy 287.334308 104.982332) (xy 287.719999 104.982668)
+ (xy 288.07646 104.835382) (xy 288.349423 104.562895) (xy 288.497332 104.206692) (xy 288.497668 103.821001) (xy 288.497668 107.384173)
+ (xy 288.458955 107.422819) (xy 288.146357 108.175641) (xy 288.145645 108.990783) (xy 288.45693 109.744149) (xy 289.032819 110.321045)
+ (xy 289.785641 110.633643) (xy 290.600783 110.634355) (xy 291.354149 110.32307) (xy 291.931045 109.747181) (xy 292.243643 108.994359)
+ (xy 292.244355 108.179217) (xy 292.244355 117.069217) (xy 291.93307 116.315851) (xy 291.357181 115.738955) (xy 290.604359 115.426357)
+ (xy 289.789217 115.425645) (xy 289.035851 115.73693) (xy 288.458955 116.312819) (xy 288.146357 117.065641) (xy 288.145645 117.880783)
+ (xy 288.45693 118.634149) (xy 289.032819 119.211045) (xy 289.785641 119.523643) (xy 290.600783 119.524355) (xy 291.354149 119.21307)
+ (xy 291.931045 118.637181) (xy 292.243643 117.884359) (xy 292.244355 117.069217) (xy 292.244355 123.015052) (xy 292.146668 123.250308)
+ (xy 292.146332 123.635999) (xy 292.293618 123.99246) (xy 292.566105 124.265423) (xy 292.922308 124.413332) (xy 292.934791 124.413342)
+ (xy 292.675577 124.672105) (xy 292.527668 125.028308) (xy 292.527332 125.413999) (xy 292.674618 125.77046) (xy 292.947105 126.043423)
+ (xy 293.303308 126.191332) (xy 293.688999 126.191668) (xy 293.809968 126.141684) (xy 293.797668 126.171308) (xy 293.797332 126.556999)
+ (xy 293.944618 126.91346) (xy 294.217105 127.186423) (xy 294.573308 127.334332) (xy 294.958999 127.334668) (xy 295.31546 127.187382)
+ (xy 295.588423 126.914895) (xy 295.736332 126.558692) (xy 295.73634 126.548941) (xy 295.792563 126.572287) (xy 296.279302 126.572712)
+ (xy 296.729152 126.386838) (xy 297.073628 126.042962) (xy 297.260287 125.593437) (xy 297.260712 125.106698) (xy 297.260712 126.597224)
+ (xy 297.119692 126.538668) (xy 296.734001 126.538332) (xy 296.37754 126.685618) (xy 296.104577 126.958105) (xy 295.956668 127.314308)
+ (xy 295.956332 127.699999) (xy 296.103618 128.05646) (xy 296.376105 128.329423) (xy 296.732308 128.477332) (xy 297.117999 128.477668)
+ (xy 297.44122 128.344116) (xy 297.539162 128.581152) (xy 297.883038 128.925628) (xy 298.332563 129.112287) (xy 298.819302 129.112712)
+ (xy 299.269152 128.926838) (xy 299.613628 128.582962) (xy 299.800287 128.133437) (xy 299.800712 127.646698) (xy 299.800712 133.7394)
+ (xy 292.942668 133.7394) (xy 292.942668 131.380001) (xy 292.795382 131.02354) (xy 292.522895 130.750577) (xy 292.244355 130.634916)
+ (xy 292.244355 125.959217) (xy 291.93307 125.205851) (xy 291.357181 124.628955) (xy 290.604359 124.316357) (xy 289.789217 124.315645)
+ (xy 289.035851 124.62693) (xy 288.458955 125.202819) (xy 288.146357 125.955641) (xy 288.145645 126.770783) (xy 288.45693 127.524149)
+ (xy 289.032819 128.101045) (xy 289.785641 128.413643) (xy 290.600783 128.414355) (xy 291.354149 128.10307) (xy 291.931045 127.527181)
+ (xy 292.243643 126.774359) (xy 292.244355 125.959217) (xy 292.244355 130.634916) (xy 292.166692 130.602668) (xy 291.781001 130.602332)
+ (xy 291.42454 130.749618) (xy 291.151577 131.022105) (xy 291.003668 131.378308) (xy 291.003332 131.763999) (xy 291.150618 132.12046)
+ (xy 291.423105 132.393423) (xy 291.779308 132.541332) (xy 292.164999 132.541668) (xy 292.52146 132.394382) (xy 292.794423 132.121895)
+ (xy 292.942332 131.765692) (xy 292.942668 131.380001) (xy 292.942668 133.7394) (xy 290.957 133.7394) (xy 285.957668 133.7394)
+ (xy 285.957668 110.552001) (xy 285.957668 99.630001) (xy 285.810382 99.27354) (xy 285.537895 99.000577) (xy 285.181692 98.852668)
+ (xy 284.796001 98.852332) (xy 284.43954 98.999618) (xy 284.166577 99.272105) (xy 284.018668 99.628308) (xy 284.018332 100.013999)
+ (xy 284.165618 100.37046) (xy 284.438105 100.643423) (xy 284.794308 100.791332) (xy 285.179999 100.791668) (xy 285.53646 100.644382)
+ (xy 285.809423 100.371895) (xy 285.957332 100.015692) (xy 285.957668 99.630001) (xy 285.957668 110.552001) (xy 285.810382 110.19554)
+ (xy 285.537895 109.922577) (xy 285.181692 109.774668) (xy 284.796001 109.774332) (xy 284.43954 109.921618) (xy 284.166577 110.194105)
+ (xy 284.018668 110.550308) (xy 284.018332 110.935999) (xy 284.165618 111.29246) (xy 284.438105 111.565423) (xy 284.794308 111.713332)
+ (xy 285.179999 111.713668) (xy 285.53646 111.566382) (xy 285.809423 111.293895) (xy 285.957332 110.937692) (xy 285.957668 110.552001)
+ (xy 285.957668 133.7394) (xy 283.0365 133.7394) (xy 283.0365 128.310929) (xy 283.0365 128.102071) (xy 283.0365 127.79125)
+ (xy 283.0365 127.47875) (xy 283.0365 127.167929) (xy 283.0365 126.959071) (xy 283.0365 119.420929) (xy 283.0365 119.212071)
+ (xy 283.0365 118.90125) (xy 283.0365 118.58875) (xy 283.0365 118.277929) (xy 283.0365 118.069071) (xy 283.0365 110.530929)
+ (xy 283.0365 110.322071) (xy 283.0365 110.01125) (xy 283.0365 109.69875) (xy 283.0365 109.387929) (xy 283.0365 109.179071)
+ (xy 283.0365 101.640929) (xy 283.0365 101.432071) (xy 283.0365 101.12125) (xy 283.0365 100.80875) (xy 283.0365 100.497929)
+ (xy 283.0365 100.289071) (xy 283.0365 92.750929) (xy 283.0365 92.542071) (xy 283.0365 92.23125) (xy 283.0365 91.91875)
+ (xy 283.0365 91.607929) (xy 283.0365 91.399071) (xy 283.0365 83.860929) (xy 283.0365 83.652071) (xy 283.0365 83.34125)
+ (xy 283.0365 83.02875) (xy 283.0365 82.717929) (xy 283.0365 82.509071) (xy 283.0365 74.970929) (xy 283.0365 74.762071)
+ (xy 283.0365 74.45125) (xy 283.0365 74.13875) (xy 283.0365 73.827929) (xy 283.0365 73.619071) (xy 283.0365 66.080929)
+ (xy 283.0365 65.872071) (xy 283.0365 65.56125) (xy 283.0365 65.24875) (xy 283.0365 64.937929) (xy 283.0365 64.729071)
+ (xy 282.956574 64.536111) (xy 282.808889 64.388426) (xy 282.615929 64.3085) (xy 282.09625 64.3085) (xy 281.965 64.43975)
+ (xy 281.965 65.38) (xy 282.90525 65.38) (xy 283.0365 65.24875) (xy 283.0365 65.56125) (xy 282.90525 65.43)
+ (xy 281.965 65.43) (xy 281.965 66.37025) (xy 282.09625 66.5015) (xy 282.615929 66.5015) (xy 282.808889 66.421574)
+ (xy 282.956574 66.273889) (xy 283.0365 66.080929) (xy 283.0365 73.619071) (xy 282.956574 73.426111) (xy 282.808889 73.278426)
+ (xy 282.615929 73.1985) (xy 282.09625 73.1985) (xy 281.965 73.32975) (xy 281.965 74.27) (xy 282.90525 74.27)
+ (xy 283.0365 74.13875) (xy 283.0365 74.45125) (xy 282.90525 74.32) (xy 281.965 74.32) (xy 281.965 75.26025)
+ (xy 282.09625 75.3915) (xy 282.615929 75.3915) (xy 282.808889 75.311574) (xy 282.956574 75.163889) (xy 283.0365 74.970929)
+ (xy 283.0365 82.509071) (xy 282.956574 82.316111) (xy 282.808889 82.168426) (xy 282.615929 82.0885) (xy 282.09625 82.0885)
+ (xy 281.965 82.21975) (xy 281.965 83.16) (xy 282.90525 83.16) (xy 283.0365 83.02875) (xy 283.0365 83.34125)
+ (xy 282.90525 83.21) (xy 281.965 83.21) (xy 281.965 84.15025) (xy 282.09625 84.2815) (xy 282.615929 84.2815)
+ (xy 282.808889 84.201574) (xy 282.956574 84.053889) (xy 283.0365 83.860929) (xy 283.0365 91.399071) (xy 282.956574 91.206111)
+ (xy 282.808889 91.058426) (xy 282.615929 90.9785) (xy 282.09625 90.9785) (xy 281.965 91.10975) (xy 281.965 92.05)
+ (xy 282.90525 92.05) (xy 283.0365 91.91875) (xy 283.0365 92.23125) (xy 282.90525 92.1) (xy 281.965 92.1)
+ (xy 281.965 93.04025) (xy 282.09625 93.1715) (xy 282.615929 93.1715) (xy 282.808889 93.091574) (xy 282.956574 92.943889)
+ (xy 283.0365 92.750929) (xy 283.0365 100.289071) (xy 282.956574 100.096111) (xy 282.808889 99.948426) (xy 282.615929 99.8685)
+ (xy 282.09625 99.8685) (xy 281.965 99.99975) (xy 281.965 100.94) (xy 282.90525 100.94) (xy 283.0365 100.80875)
+ (xy 283.0365 101.12125) (xy 282.90525 100.99) (xy 281.965 100.99) (xy 281.965 101.93025) (xy 282.09625 102.0615)
+ (xy 282.615929 102.0615) (xy 282.808889 101.981574) (xy 282.956574 101.833889) (xy 283.0365 101.640929) (xy 283.0365 109.179071)
+ (xy 282.956574 108.986111) (xy 282.808889 108.838426) (xy 282.615929 108.7585) (xy 282.09625 108.7585) (xy 281.965 108.88975)
+ (xy 281.965 109.83) (xy 282.90525 109.83) (xy 283.0365 109.69875) (xy 283.0365 110.01125) (xy 282.90525 109.88)
+ (xy 281.965 109.88) (xy 281.965 110.82025) (xy 282.09625 110.9515) (xy 282.615929 110.9515) (xy 282.808889 110.871574)
+ (xy 282.956574 110.723889) (xy 283.0365 110.530929) (xy 283.0365 118.069071) (xy 282.956574 117.876111) (xy 282.808889 117.728426)
+ (xy 282.615929 117.6485) (xy 282.09625 117.6485) (xy 281.965 117.77975) (xy 281.965 118.72) (xy 282.90525 118.72)
+ (xy 283.0365 118.58875) (xy 283.0365 118.90125) (xy 282.90525 118.77) (xy 281.965 118.77) (xy 281.965 119.71025)
+ (xy 282.09625 119.8415) (xy 282.615929 119.8415) (xy 282.808889 119.761574) (xy 282.956574 119.613889) (xy 283.0365 119.420929)
+ (xy 283.0365 126.959071) (xy 282.956574 126.766111) (xy 282.808889 126.618426) (xy 282.615929 126.5385) (xy 282.09625 126.5385)
+ (xy 281.965 126.66975) (xy 281.965 127.61) (xy 282.90525 127.61) (xy 283.0365 127.47875) (xy 283.0365 127.79125)
+ (xy 282.90525 127.66) (xy 281.965 127.66) (xy 281.965 128.60025) (xy 282.09625 128.7315) (xy 282.615929 128.7315)
+ (xy 282.808889 128.651574) (xy 282.956574 128.503889) (xy 283.0365 128.310929) (xy 283.0365 133.7394) (xy 281.915 133.7394)
+ (xy 281.915 128.60025) (xy 281.915 127.66) (xy 281.915 127.61) (xy 281.915 126.66975) (xy 281.915 119.71025)
+ (xy 281.915 118.77) (xy 281.915 118.72) (xy 281.915 117.77975) (xy 281.915 110.82025) (xy 281.915 109.88)
+ (xy 281.915 109.83) (xy 281.915 108.88975) (xy 281.915 101.93025) (xy 281.915 100.99) (xy 281.915 100.94)
+ (xy 281.915 99.99975) (xy 281.915 93.04025) (xy 281.915 92.1) (xy 281.915 92.05) (xy 281.915 91.10975)
+ (xy 281.915 84.15025) (xy 281.915 83.21) (xy 281.915 83.16) (xy 281.915 82.21975) (xy 281.915 75.26025)
+ (xy 281.915 74.32) (xy 281.915 74.27) (xy 281.915 73.32975) (xy 281.915 66.37025) (xy 281.915 65.43)
+ (xy 281.915 65.38) (xy 281.915 64.43975) (xy 281.78375 64.3085) (xy 281.76669 64.3085) (xy 281.76669 62.647849)
+ (xy 281.60011 62.244694) (xy 281.291928 61.935974) (xy 280.889064 61.76869) (xy 280.452849 61.76831) (xy 280.049694 61.93489)
+ (xy 279.740974 62.243072) (xy 279.57369 62.645936) (xy 279.57331 63.082151) (xy 279.73989 63.485306) (xy 280.048072 63.794026)
+ (xy 280.450936 63.96131) (xy 280.887151 63.96169) (xy 281.290306 63.79511) (xy 281.599026 63.486928) (xy 281.76631 63.084064)
+ (xy 281.76669 62.647849) (xy 281.76669 64.3085) (xy 281.264071 64.3085) (xy 281.071111 64.388426) (xy 280.923426 64.536111)
+ (xy 280.8435 64.729071) (xy 280.8435 64.937929) (xy 280.8435 65.24875) (xy 280.97475 65.38) (xy 281.915 65.38)
+ (xy 281.915 65.43) (xy 280.97475 65.43) (xy 280.8435 65.56125) (xy 280.8435 65.872071) (xy 280.8435 66.080929)
+ (xy 280.923426 66.273889) (xy 281.071111 66.421574) (xy 281.264071 66.5015) (xy 281.78375 66.5015) (xy 281.915 66.37025)
+ (xy 281.915 73.32975) (xy 281.78375 73.1985) (xy 281.76669 73.1985) (xy 281.76669 71.537849) (xy 281.60011 71.134694)
+ (xy 281.291928 70.825974) (xy 280.889064 70.65869) (xy 280.49669 70.658348) (xy 280.49669 65.187849) (xy 280.33011 64.784694)
+ (xy 280.021928 64.475974) (xy 279.619064 64.30869) (xy 279.22669 64.308348) (xy 279.22669 62.647849) (xy 279.06011 62.244694)
+ (xy 278.751928 61.935974) (xy 278.349064 61.76869) (xy 277.912849 61.76831) (xy 277.509694 61.93489) (xy 277.200974 62.243072)
+ (xy 277.03369 62.645936) (xy 277.03331 63.082151) (xy 277.19989 63.485306) (xy 277.508072 63.794026) (xy 277.910936 63.96131)
+ (xy 278.347151 63.96169) (xy 278.750306 63.79511) (xy 279.059026 63.486928) (xy 279.22631 63.084064) (xy 279.22669 62.647849)
+ (xy 279.22669 64.308348) (xy 279.182849 64.30831) (xy 278.779694 64.47489) (xy 278.470974 64.783072) (xy 278.30369 65.185936)
+ (xy 278.30331 65.622151) (xy 278.46989 66.025306) (xy 278.778072 66.334026) (xy 279.180936 66.50131) (xy 279.617151 66.50169)
+ (xy 280.020306 66.33511) (xy 280.329026 66.026928) (xy 280.49631 65.624064) (xy 280.49669 65.187849) (xy 280.49669 70.658348)
+ (xy 280.452849 70.65831) (xy 280.049694 70.82489) (xy 279.740974 71.133072) (xy 279.57369 71.535936) (xy 279.57331 71.972151)
+ (xy 279.73989 72.375306) (xy 280.048072 72.684026) (xy 280.450936 72.85131) (xy 280.887151 72.85169) (xy 281.290306 72.68511)
+ (xy 281.599026 72.376928) (xy 281.76631 71.974064) (xy 281.76669 71.537849) (xy 281.76669 73.1985) (xy 281.264071 73.1985)
+ (xy 281.071111 73.278426) (xy 280.923426 73.426111) (xy 280.8435 73.619071) (xy 280.8435 73.827929) (xy 280.8435 74.13875)
+ (xy 280.97475 74.27) (xy 281.915 74.27) (xy 281.915 74.32) (xy 280.97475 74.32) (xy 280.8435 74.45125)
+ (xy 280.8435 74.762071) (xy 280.8435 74.970929) (xy 280.923426 75.163889) (xy 281.071111 75.311574) (xy 281.264071 75.3915)
+ (xy 281.78375 75.3915) (xy 281.915 75.26025) (xy 281.915 82.21975) (xy 281.78375 82.0885) (xy 281.76669 82.0885)
+ (xy 281.76669 80.427849) (xy 281.60011 80.024694) (xy 281.291928 79.715974) (xy 280.889064 79.54869) (xy 280.49669 79.548348)
+ (xy 280.49669 74.077849) (xy 280.33011 73.674694) (xy 280.021928 73.365974) (xy 279.619064 73.19869) (xy 279.22669 73.198348)
+ (xy 279.22669 71.537849) (xy 279.06011 71.134694) (xy 278.751928 70.825974) (xy 278.349064 70.65869) (xy 277.95669 70.658348)
+ (xy 277.95669 65.187849) (xy 277.79011 64.784694) (xy 277.481928 64.475974) (xy 277.079064 64.30869) (xy 276.68669 64.308348)
+ (xy 276.68669 62.647849) (xy 276.52011 62.244694) (xy 276.211928 61.935974) (xy 275.809064 61.76869) (xy 275.372849 61.76831)
+ (xy 274.969694 61.93489) (xy 274.660974 62.243072) (xy 274.49369 62.645936) (xy 274.49331 63.082151) (xy 274.65989 63.485306)
+ (xy 274.968072 63.794026) (xy 275.370936 63.96131) (xy 275.807151 63.96169) (xy 276.210306 63.79511) (xy 276.519026 63.486928)
+ (xy 276.68631 63.084064) (xy 276.68669 62.647849) (xy 276.68669 64.308348) (xy 276.642849 64.30831) (xy 276.239694 64.47489)
+ (xy 275.930974 64.783072) (xy 275.76369 65.185936) (xy 275.76331 65.622151) (xy 275.92989 66.025306) (xy 276.238072 66.334026)
+ (xy 276.640936 66.50131) (xy 277.077151 66.50169) (xy 277.480306 66.33511) (xy 277.789026 66.026928) (xy 277.95631 65.624064)
+ (xy 277.95669 65.187849) (xy 277.95669 70.658348) (xy 277.912849 70.65831) (xy 277.509694 70.82489) (xy 277.200974 71.133072)
+ (xy 277.03369 71.535936) (xy 277.03331 71.972151) (xy 277.19989 72.375306) (xy 277.508072 72.684026) (xy 277.910936 72.85131)
+ (xy 278.347151 72.85169) (xy 278.750306 72.68511) (xy 279.059026 72.376928) (xy 279.22631 71.974064) (xy 279.22669 71.537849)
+ (xy 279.22669 73.198348) (xy 279.182849 73.19831) (xy 278.779694 73.36489) (xy 278.470974 73.673072) (xy 278.30369 74.075936)
+ (xy 278.30331 74.512151) (xy 278.46989 74.915306) (xy 278.778072 75.224026) (xy 279.180936 75.39131) (xy 279.617151 75.39169)
+ (xy 280.020306 75.22511) (xy 280.329026 74.916928) (xy 280.49631 74.514064) (xy 280.49669 74.077849) (xy 280.49669 79.548348)
+ (xy 280.452849 79.54831) (xy 280.369668 79.582679) (xy 280.369668 78.548001) (xy 280.222382 78.19154) (xy 279.949895 77.918577)
+ (xy 279.593692 77.770668) (xy 279.208001 77.770332) (xy 278.85154 77.917618) (xy 278.578577 78.190105) (xy 278.430668 78.546308)
+ (xy 278.430332 78.931999) (xy 278.577618 79.28846) (xy 278.850105 79.561423) (xy 279.206308 79.709332) (xy 279.591999 79.709668)
+ (xy 279.94846 79.562382) (xy 280.221423 79.289895) (xy 280.369332 78.933692) (xy 280.369668 78.548001) (xy 280.369668 79.582679)
+ (xy 280.049694 79.71489) (xy 279.740974 80.023072) (xy 279.57369 80.425936) (xy 279.57331 80.862151) (xy 279.73989 81.265306)
+ (xy 280.048072 81.574026) (xy 280.450936 81.74131) (xy 280.887151 81.74169) (xy 281.290306 81.57511) (xy 281.599026 81.266928)
+ (xy 281.76631 80.864064) (xy 281.76669 80.427849) (xy 281.76669 82.0885) (xy 281.264071 82.0885) (xy 281.071111 82.168426)
+ (xy 280.923426 82.316111) (xy 280.8435 82.509071) (xy 280.8435 82.717929) (xy 280.8435 83.02875) (xy 280.97475 83.16)
+ (xy 281.915 83.16) (xy 281.915 83.21) (xy 280.97475 83.21) (xy 280.8435 83.34125) (xy 280.8435 83.652071)
+ (xy 280.8435 83.860929) (xy 280.923426 84.053889) (xy 281.071111 84.201574) (xy 281.264071 84.2815) (xy 281.78375 84.2815)
+ (xy 281.915 84.15025) (xy 281.915 91.10975) (xy 281.78375 90.9785) (xy 281.76669 90.9785) (xy 281.76669 89.317849)
+ (xy 281.60011 88.914694) (xy 281.291928 88.605974) (xy 280.889064 88.43869) (xy 280.49669 88.438348) (xy 280.49669 82.967849)
+ (xy 280.33011 82.564694) (xy 280.021928 82.255974) (xy 279.619064 82.08869) (xy 279.22669 82.088348) (xy 279.22669 80.427849)
+ (xy 279.06011 80.024694) (xy 278.751928 79.715974) (xy 278.349064 79.54869) (xy 277.95669 79.548348) (xy 277.95669 74.077849)
+ (xy 277.79011 73.674694) (xy 277.481928 73.365974) (xy 277.079064 73.19869) (xy 276.68669 73.198348) (xy 276.68669 71.537849)
+ (xy 276.52011 71.134694) (xy 276.211928 70.825974) (xy 275.809064 70.65869) (xy 275.41669 70.658348) (xy 275.41669 65.187849)
+ (xy 275.25011 64.784694) (xy 274.941928 64.475974) (xy 274.539064 64.30869) (xy 274.14669 64.308348) (xy 274.14669 62.647849)
+ (xy 273.98011 62.244694) (xy 273.671928 61.935974) (xy 273.269064 61.76869) (xy 272.832849 61.76831) (xy 272.429694 61.93489)
+ (xy 272.120974 62.243072) (xy 271.95369 62.645936) (xy 271.95331 63.082151) (xy 272.11989 63.485306) (xy 272.428072 63.794026)
+ (xy 272.830936 63.96131) (xy 273.267151 63.96169) (xy 273.670306 63.79511) (xy 273.979026 63.486928) (xy 274.14631 63.084064)
+ (xy 274.14669 62.647849) (xy 274.14669 64.308348) (xy 274.102849 64.30831) (xy 273.699694 64.47489) (xy 273.390974 64.783072)
+ (xy 273.22369 65.185936) (xy 273.22331 65.622151) (xy 273.38989 66.025306) (xy 273.698072 66.334026) (xy 274.100936 66.50131)
+ (xy 274.537151 66.50169) (xy 274.940306 66.33511) (xy 275.249026 66.026928) (xy 275.41631 65.624064) (xy 275.41669 65.187849)
+ (xy 275.41669 70.658348) (xy 275.372849 70.65831) (xy 274.969694 70.82489) (xy 274.660974 71.133072) (xy 274.49369 71.535936)
+ (xy 274.49331 71.972151) (xy 274.65989 72.375306) (xy 274.968072 72.684026) (xy 275.370936 72.85131) (xy 275.807151 72.85169)
+ (xy 276.210306 72.68511) (xy 276.519026 72.376928) (xy 276.68631 71.974064) (xy 276.68669 71.537849) (xy 276.68669 73.198348)
+ (xy 276.642849 73.19831) (xy 276.239694 73.36489) (xy 275.930974 73.673072) (xy 275.76369 74.075936) (xy 275.76331 74.512151)
+ (xy 275.92989 74.915306) (xy 276.238072 75.224026) (xy 276.640936 75.39131) (xy 277.077151 75.39169) (xy 277.480306 75.22511)
+ (xy 277.789026 74.916928) (xy 277.95631 74.514064) (xy 277.95669 74.077849) (xy 277.95669 79.548348) (xy 277.912849 79.54831)
+ (xy 277.829668 79.582679) (xy 277.829668 78.548001) (xy 277.682382 78.19154) (xy 277.409895 77.918577) (xy 277.053692 77.770668)
+ (xy 276.668001 77.770332) (xy 276.31154 77.917618) (xy 276.038577 78.190105) (xy 275.890668 78.546308) (xy 275.890332 78.931999)
+ (xy 276.037618 79.28846) (xy 276.310105 79.561423) (xy 276.666308 79.709332) (xy 277.051999 79.709668) (xy 277.40846 79.562382)
+ (xy 277.681423 79.289895) (xy 277.829332 78.933692) (xy 277.829668 78.548001) (xy 277.829668 79.582679) (xy 277.509694 79.71489)
+ (xy 277.200974 80.023072) (xy 277.03369 80.425936) (xy 277.03331 80.862151) (xy 277.19989 81.265306) (xy 277.508072 81.574026)
+ (xy 277.910936 81.74131) (xy 278.347151 81.74169) (xy 278.750306 81.57511) (xy 279.059026 81.266928) (xy 279.22631 80.864064)
+ (xy 279.22669 80.427849) (xy 279.22669 82.088348) (xy 279.182849 82.08831) (xy 278.779694 82.25489) (xy 278.470974 82.563072)
+ (xy 278.30369 82.965936) (xy 278.30331 83.402151) (xy 278.46989 83.805306) (xy 278.778072 84.114026) (xy 279.180936 84.28131)
+ (xy 279.617151 84.28169) (xy 280.020306 84.11511) (xy 280.329026 83.806928) (xy 280.49631 83.404064) (xy 280.49669 82.967849)
+ (xy 280.49669 88.438348) (xy 280.452849 88.43831) (xy 280.049694 88.60489) (xy 279.740974 88.913072) (xy 279.57369 89.315936)
+ (xy 279.57331 89.752151) (xy 279.73989 90.155306) (xy 280.048072 90.464026) (xy 280.450936 90.63131) (xy 280.887151 90.63169)
+ (xy 281.290306 90.46511) (xy 281.599026 90.156928) (xy 281.76631 89.754064) (xy 281.76669 89.317849) (xy 281.76669 90.9785)
+ (xy 281.264071 90.9785) (xy 281.071111 91.058426) (xy 280.923426 91.206111) (xy 280.8435 91.399071) (xy 280.8435 91.607929)
+ (xy 280.8435 91.91875) (xy 280.97475 92.05) (xy 281.915 92.05) (xy 281.915 92.1) (xy 280.97475 92.1)
+ (xy 280.8435 92.23125) (xy 280.8435 92.542071) (xy 280.8435 92.750929) (xy 280.923426 92.943889) (xy 281.071111 93.091574)
+ (xy 281.264071 93.1715) (xy 281.78375 93.1715) (xy 281.915 93.04025) (xy 281.915 99.99975) (xy 281.78375 99.8685)
+ (xy 281.76669 99.8685) (xy 281.76669 98.207849) (xy 281.60011 97.804694) (xy 281.291928 97.495974) (xy 280.889064 97.32869)
+ (xy 280.49669 97.328348) (xy 280.49669 91.857849) (xy 280.33011 91.454694) (xy 280.021928 91.145974) (xy 279.619064 90.97869)
+ (xy 279.22669 90.978348) (xy 279.22669 89.317849) (xy 279.06011 88.914694) (xy 278.751928 88.605974) (xy 278.349064 88.43869)
+ (xy 277.95669 88.438348) (xy 277.95669 82.967849) (xy 277.79011 82.564694) (xy 277.481928 82.255974) (xy 277.079064 82.08869)
+ (xy 276.68669 82.088348) (xy 276.68669 80.427849) (xy 276.52011 80.024694) (xy 276.211928 79.715974) (xy 275.809064 79.54869)
+ (xy 275.41669 79.548348) (xy 275.41669 74.077849) (xy 275.25011 73.674694) (xy 274.941928 73.365974) (xy 274.539064 73.19869)
+ (xy 274.14669 73.198348) (xy 274.14669 71.537849) (xy 273.98011 71.134694) (xy 273.671928 70.825974) (xy 273.269064 70.65869)
+ (xy 272.87669 70.658348) (xy 272.87669 65.187849) (xy 272.71011 64.784694) (xy 272.401928 64.475974) (xy 271.999064 64.30869)
+ (xy 271.60669 64.308348) (xy 271.60669 62.647849) (xy 271.44011 62.244694) (xy 271.131928 61.935974) (xy 270.729064 61.76869)
+ (xy 270.292849 61.76831) (xy 270.209668 61.802679) (xy 270.209668 60.514001) (xy 270.062382 60.15754) (xy 269.789895 59.884577)
+ (xy 269.433692 59.736668) (xy 269.048001 59.736332) (xy 268.69154 59.883618) (xy 268.418577 60.156105) (xy 268.270668 60.512308)
+ (xy 268.270332 60.897999) (xy 268.417618 61.25446) (xy 268.690105 61.527423) (xy 269.046308 61.675332) (xy 269.431999 61.675668)
+ (xy 269.78846 61.528382) (xy 270.061423 61.255895) (xy 270.209332 60.899692) (xy 270.209668 60.514001) (xy 270.209668 61.802679)
+ (xy 269.889694 61.93489) (xy 269.580974 62.243072) (xy 269.41369 62.645936) (xy 269.41331 63.082151) (xy 269.57989 63.485306)
+ (xy 269.888072 63.794026) (xy 270.290936 63.96131) (xy 270.727151 63.96169) (xy 271.130306 63.79511) (xy 271.439026 63.486928)
+ (xy 271.60631 63.084064) (xy 271.60669 62.647849) (xy 271.60669 64.308348) (xy 271.562849 64.30831) (xy 271.159694 64.47489)
+ (xy 270.850974 64.783072) (xy 270.68369 65.185936) (xy 270.68331 65.622151) (xy 270.84989 66.025306) (xy 271.158072 66.334026)
+ (xy 271.560936 66.50131) (xy 271.997151 66.50169) (xy 272.400306 66.33511) (xy 272.709026 66.026928) (xy 272.87631 65.624064)
+ (xy 272.87669 65.187849) (xy 272.87669 70.658348) (xy 272.832849 70.65831) (xy 272.429694 70.82489) (xy 272.120974 71.133072)
+ (xy 271.95369 71.535936) (xy 271.95331 71.972151) (xy 272.11989 72.375306) (xy 272.428072 72.684026) (xy 272.830936 72.85131)
+ (xy 273.267151 72.85169) (xy 273.670306 72.68511) (xy 273.979026 72.376928) (xy 274.14631 71.974064) (xy 274.14669 71.537849)
+ (xy 274.14669 73.198348) (xy 274.102849 73.19831) (xy 273.699694 73.36489) (xy 273.390974 73.673072) (xy 273.22369 74.075936)
+ (xy 273.22331 74.512151) (xy 273.38989 74.915306) (xy 273.698072 75.224026) (xy 274.100936 75.39131) (xy 274.537151 75.39169)
+ (xy 274.940306 75.22511) (xy 275.249026 74.916928) (xy 275.41631 74.514064) (xy 275.41669 74.077849) (xy 275.41669 79.548348)
+ (xy 275.372849 79.54831) (xy 275.289651 79.582686) (xy 275.289668 79.564001) (xy 275.142382 79.20754) (xy 274.869895 78.934577)
+ (xy 274.513692 78.786668) (xy 274.128001 78.786332) (xy 273.77154 78.933618) (xy 273.498577 79.206105) (xy 273.350668 79.562308)
+ (xy 273.35065 79.582567) (xy 273.269064 79.54869) (xy 272.87669 79.548348) (xy 272.87669 74.077849) (xy 272.71011 73.674694)
+ (xy 272.401928 73.365974) (xy 271.999064 73.19869) (xy 271.60669 73.198348) (xy 271.60669 71.537849) (xy 271.44011 71.134694)
+ (xy 271.131928 70.825974) (xy 270.729064 70.65869) (xy 270.33669 70.658348) (xy 270.33669 65.187849) (xy 270.17011 64.784694)
+ (xy 269.861928 64.475974) (xy 269.459064 64.30869) (xy 269.06669 64.308348) (xy 269.06669 62.647849) (xy 268.90011 62.244694)
+ (xy 268.591928 61.935974) (xy 268.189064 61.76869) (xy 267.752849 61.76831) (xy 267.349694 61.93489) (xy 267.040974 62.243072)
+ (xy 266.87369 62.645936) (xy 266.87331 63.082151) (xy 267.03989 63.485306) (xy 267.348072 63.794026) (xy 267.750936 63.96131)
+ (xy 268.187151 63.96169) (xy 268.590306 63.79511) (xy 268.899026 63.486928) (xy 269.06631 63.084064) (xy 269.06669 62.647849)
+ (xy 269.06669 64.308348) (xy 269.022849 64.30831) (xy 268.619694 64.47489) (xy 268.310974 64.783072) (xy 268.14369 65.185936)
+ (xy 268.14331 65.622151) (xy 268.30989 66.025306) (xy 268.618072 66.334026) (xy 269.020936 66.50131) (xy 269.457151 66.50169)
+ (xy 269.860306 66.33511) (xy 270.169026 66.026928) (xy 270.33631 65.624064) (xy 270.33669 65.187849) (xy 270.33669 70.658348)
+ (xy 270.292849 70.65831) (xy 269.889694 70.82489) (xy 269.580974 71.133072) (xy 269.41369 71.535936) (xy 269.41331 71.972151)
+ (xy 269.57989 72.375306) (xy 269.888072 72.684026) (xy 270.290936 72.85131) (xy 270.727151 72.85169) (xy 271.130306 72.68511)
+ (xy 271.439026 72.376928) (xy 271.60631 71.974064) (xy 271.60669 71.537849) (xy 271.60669 73.198348) (xy 271.562849 73.19831)
+ (xy 271.159694 73.36489) (xy 270.850974 73.673072) (xy 270.68369 74.075936) (xy 270.68331 74.512151) (xy 270.84989 74.915306)
+ (xy 271.158072 75.224026) (xy 271.560936 75.39131) (xy 271.997151 75.39169) (xy 272.400306 75.22511) (xy 272.709026 74.916928)
+ (xy 272.87631 74.514064) (xy 272.87669 74.077849) (xy 272.87669 79.548348) (xy 272.832849 79.54831) (xy 272.429694 79.71489)
+ (xy 272.120974 80.023072) (xy 272.087415 80.10389) (xy 271.973692 80.056668) (xy 271.588001 80.056332) (xy 271.472843 80.103914)
+ (xy 271.44011 80.024694) (xy 271.131928 79.715974) (xy 270.729064 79.54869) (xy 270.33669 79.548348) (xy 270.33669 74.077849)
+ (xy 270.17011 73.674694) (xy 269.861928 73.365974) (xy 269.459064 73.19869) (xy 269.06669 73.198348) (xy 269.06669 71.537849)
+ (xy 268.90011 71.134694) (xy 268.591928 70.825974) (xy 268.189064 70.65869) (xy 267.79669 70.658348) (xy 267.79669 65.187849)
+ (xy 267.63011 64.784694) (xy 267.321928 64.475974) (xy 266.919064 64.30869) (xy 266.52669 64.308348) (xy 266.52669 62.647849)
+ (xy 266.36011 62.244694) (xy 266.051928 61.935974) (xy 265.649064 61.76869) (xy 265.212849 61.76831) (xy 264.809694 61.93489)
+ (xy 264.500974 62.243072) (xy 264.33369 62.645936) (xy 264.33331 63.082151) (xy 264.49989 63.485306) (xy 264.808072 63.794026)
+ (xy 265.210936 63.96131) (xy 265.647151 63.96169) (xy 266.050306 63.79511) (xy 266.359026 63.486928) (xy 266.52631 63.084064)
+ (xy 266.52669 62.647849) (xy 266.52669 64.308348) (xy 266.482849 64.30831) (xy 266.079694 64.47489) (xy 265.770974 64.783072)
+ (xy 265.60369 65.185936) (xy 265.60331 65.622151) (xy 265.76989 66.025306) (xy 266.078072 66.334026) (xy 266.480936 66.50131)
+ (xy 266.917151 66.50169) (xy 267.320306 66.33511) (xy 267.629026 66.026928) (xy 267.79631 65.624064) (xy 267.79669 65.187849)
+ (xy 267.79669 70.658348) (xy 267.752849 70.65831) (xy 267.349694 70.82489) (xy 267.040974 71.133072) (xy 266.87369 71.535936)
+ (xy 266.87331 71.972151) (xy 267.03989 72.375306) (xy 267.348072 72.684026) (xy 267.750936 72.85131) (xy 268.187151 72.85169)
+ (xy 268.590306 72.68511) (xy 268.899026 72.376928) (xy 269.06631 71.974064) (xy 269.06669 71.537849) (xy 269.06669 73.198348)
+ (xy 269.022849 73.19831) (xy 268.619694 73.36489) (xy 268.310974 73.673072) (xy 268.14369 74.075936) (xy 268.14331 74.512151)
+ (xy 268.30989 74.915306) (xy 268.618072 75.224026) (xy 269.020936 75.39131) (xy 269.457151 75.39169) (xy 269.860306 75.22511)
+ (xy 270.169026 74.916928) (xy 270.33631 74.514064) (xy 270.33669 74.077849) (xy 270.33669 79.548348) (xy 270.292849 79.54831)
+ (xy 269.889694 79.71489) (xy 269.580974 80.023072) (xy 269.41369 80.425936) (xy 269.41331 80.862151) (xy 269.57989 81.265306)
+ (xy 269.888072 81.574026) (xy 270.290936 81.74131) (xy 270.727151 81.74169) (xy 271.008505 81.625436) (xy 271.230105 81.847423)
+ (xy 271.586308 81.995332) (xy 271.971999 81.995668) (xy 272.32846 81.848382) (xy 272.55182 81.62541) (xy 272.830936 81.74131)
+ (xy 273.267151 81.74169) (xy 273.670306 81.57511) (xy 273.979026 81.266928) (xy 274.14631 80.864064) (xy 274.14643 80.725349)
+ (xy 274.493428 80.725651) (xy 274.49331 80.862151) (xy 274.65989 81.265306) (xy 274.968072 81.574026) (xy 275.370936 81.74131)
+ (xy 275.807151 81.74169) (xy 276.210306 81.57511) (xy 276.519026 81.266928) (xy 276.68631 80.864064) (xy 276.68669 80.427849)
+ (xy 276.68669 82.088348) (xy 276.642849 82.08831) (xy 276.239694 82.25489) (xy 275.930974 82.563072) (xy 275.76369 82.965936)
+ (xy 275.76331 83.402151) (xy 275.92989 83.805306) (xy 276.238072 84.114026) (xy 276.640936 84.28131) (xy 277.077151 84.28169)
+ (xy 277.480306 84.11511) (xy 277.789026 83.806928) (xy 277.95631 83.404064) (xy 277.95669 82.967849) (xy 277.95669 88.438348)
+ (xy 277.912849 88.43831) (xy 277.509694 88.60489) (xy 277.200974 88.913072) (xy 277.03369 89.315936) (xy 277.03331 89.752151)
+ (xy 277.19989 90.155306) (xy 277.508072 90.464026) (xy 277.910936 90.63131) (xy 278.347151 90.63169) (xy 278.750306 90.46511)
+ (xy 279.059026 90.156928) (xy 279.22631 89.754064) (xy 279.22669 89.317849) (xy 279.22669 90.978348) (xy 279.182849 90.97831)
+ (xy 278.779694 91.14489) (xy 278.470974 91.453072) (xy 278.30369 91.855936) (xy 278.30331 92.292151) (xy 278.46989 92.695306)
+ (xy 278.778072 93.004026) (xy 279.180936 93.17131) (xy 279.617151 93.17169) (xy 280.020306 93.00511) (xy 280.329026 92.696928)
+ (xy 280.49631 92.294064) (xy 280.49669 91.857849) (xy 280.49669 97.328348) (xy 280.452849 97.32831) (xy 280.049694 97.49489)
+ (xy 279.740974 97.803072) (xy 279.57369 98.205936) (xy 279.57331 98.642151) (xy 279.73989 99.045306) (xy 280.048072 99.354026)
+ (xy 280.450936 99.52131) (xy 280.887151 99.52169) (xy 281.290306 99.35511) (xy 281.599026 99.046928) (xy 281.76631 98.644064)
+ (xy 281.76669 98.207849) (xy 281.76669 99.8685) (xy 281.264071 99.8685) (xy 281.071111 99.948426) (xy 280.923426 100.096111)
+ (xy 280.8435 100.289071) (xy 280.8435 100.497929) (xy 280.8435 100.80875) (xy 280.97475 100.94) (xy 281.915 100.94)
+ (xy 281.915 100.99) (xy 280.97475 100.99) (xy 280.8435 101.12125) (xy 280.8435 101.432071) (xy 280.8435 101.640929)
+ (xy 280.923426 101.833889) (xy 281.071111 101.981574) (xy 281.264071 102.0615) (xy 281.78375 102.0615) (xy 281.915 101.93025)
+ (xy 281.915 108.88975) (xy 281.78375 108.7585) (xy 281.76669 108.7585) (xy 281.76669 107.097849) (xy 281.60011 106.694694)
+ (xy 281.291928 106.385974) (xy 280.889064 106.21869) (xy 280.49669 106.218348) (xy 280.49669 100.747849) (xy 280.33011 100.344694)
+ (xy 280.021928 100.035974) (xy 279.619064 99.86869) (xy 279.22669 99.868348) (xy 279.22669 98.207849) (xy 279.06011 97.804694)
+ (xy 278.751928 97.495974) (xy 278.349064 97.32869) (xy 277.95669 97.328348) (xy 277.95669 91.857849) (xy 277.79011 91.454694)
+ (xy 277.481928 91.145974) (xy 277.079064 90.97869) (xy 276.68669 90.978348) (xy 276.68669 89.317849) (xy 276.52011 88.914694)
+ (xy 276.211928 88.605974) (xy 275.809064 88.43869) (xy 275.41669 88.438348) (xy 275.41669 82.967849) (xy 275.25011 82.564694)
+ (xy 274.941928 82.255974) (xy 274.539064 82.08869) (xy 274.102849 82.08831) (xy 273.699694 82.25489) (xy 273.390974 82.563072)
+ (xy 273.22369 82.965936) (xy 273.22331 83.402151) (xy 273.38989 83.805306) (xy 273.698072 84.114026) (xy 274.100936 84.28131)
+ (xy 274.537151 84.28169) (xy 274.940306 84.11511) (xy 275.249026 83.806928) (xy 275.41631 83.404064) (xy 275.41669 82.967849)
+ (xy 275.41669 88.438348) (xy 275.372849 88.43831) (xy 274.969694 88.60489) (xy 274.660974 88.913072) (xy 274.49369 89.315936)
+ (xy 274.49331 89.752151) (xy 274.65989 90.155306) (xy 274.968072 90.464026) (xy 275.370936 90.63131) (xy 275.807151 90.63169)
+ (xy 276.210306 90.46511) (xy 276.519026 90.156928) (xy 276.68631 89.754064) (xy 276.68669 89.317849) (xy 276.68669 90.978348)
+ (xy 276.642849 90.97831) (xy 276.239694 91.14489) (xy 275.930974 91.453072) (xy 275.76369 91.855936) (xy 275.76331 92.292151)
+ (xy 275.92989 92.695306) (xy 276.238072 93.004026) (xy 276.640936 93.17131) (xy 277.077151 93.17169) (xy 277.480306 93.00511)
+ (xy 277.789026 92.696928) (xy 277.95631 92.294064) (xy 277.95669 91.857849) (xy 277.95669 97.328348) (xy 277.912849 97.32831)
+ (xy 277.509694 97.49489) (xy 277.200974 97.803072) (xy 277.03369 98.205936) (xy 277.03331 98.642151) (xy 277.19989 99.045306)
+ (xy 277.508072 99.354026) (xy 277.910936 99.52131) (xy 278.347151 99.52169) (xy 278.750306 99.35511) (xy 279.059026 99.046928)
+ (xy 279.22631 98.644064) (xy 279.22669 98.207849) (xy 279.22669 99.868348) (xy 279.182849 99.86831) (xy 278.779694 100.03489)
+ (xy 278.470974 100.343072) (xy 278.30369 100.745936) (xy 278.30331 101.182151) (xy 278.46989 101.585306) (xy 278.778072 101.894026)
+ (xy 279.180936 102.06131) (xy 279.617151 102.06169) (xy 280.020306 101.89511) (xy 280.329026 101.586928) (xy 280.49631 101.184064)
+ (xy 280.49669 100.747849) (xy 280.49669 106.218348) (xy 280.452849 106.21831) (xy 280.049694 106.38489) (xy 279.740974 106.693072)
+ (xy 279.57369 107.095936) (xy 279.57331 107.532151) (xy 279.73989 107.935306) (xy 280.048072 108.244026) (xy 280.450936 108.41131)
+ (xy 280.887151 108.41169) (xy 281.290306 108.24511) (xy 281.599026 107.936928) (xy 281.76631 107.534064) (xy 281.76669 107.097849)
+ (xy 281.76669 108.7585) (xy 281.264071 108.7585) (xy 281.071111 108.838426) (xy 280.923426 108.986111) (xy 280.8435 109.179071)
+ (xy 280.8435 109.387929) (xy 280.8435 109.69875) (xy 280.97475 109.83) (xy 281.915 109.83) (xy 281.915 109.88)
+ (xy 280.97475 109.88) (xy 280.8435 110.01125) (xy 280.8435 110.322071) (xy 280.8435 110.530929) (xy 280.923426 110.723889)
+ (xy 281.071111 110.871574) (xy 281.264071 110.9515) (xy 281.78375 110.9515) (xy 281.915 110.82025) (xy 281.915 117.77975)
+ (xy 281.78375 117.6485) (xy 281.76669 117.6485) (xy 281.76669 115.987849) (xy 281.639668 115.680431) (xy 281.639668 111.568001)
+ (xy 281.492382 111.21154) (xy 281.219895 110.938577) (xy 280.863692 110.790668) (xy 280.49669 110.790348) (xy 280.49669 109.637849)
+ (xy 280.33011 109.234694) (xy 280.021928 108.925974) (xy 279.619064 108.75869) (xy 279.22669 108.758348) (xy 279.22669 107.097849)
+ (xy 279.06011 106.694694) (xy 278.751928 106.385974) (xy 278.349064 106.21869) (xy 277.95669 106.218348) (xy 277.95669 100.747849)
+ (xy 277.79011 100.344694) (xy 277.481928 100.035974) (xy 277.079064 99.86869) (xy 276.68669 99.868348) (xy 276.68669 98.207849)
+ (xy 276.52011 97.804694) (xy 276.211928 97.495974) (xy 275.809064 97.32869) (xy 275.41669 97.328348) (xy 275.41669 91.857849)
+ (xy 275.25011 91.454694) (xy 274.941928 91.145974) (xy 274.539064 90.97869) (xy 274.14669 90.978348) (xy 274.14669 89.317849)
+ (xy 273.98011 88.914694) (xy 273.671928 88.605974) (xy 273.269064 88.43869) (xy 272.87669 88.438348) (xy 272.87669 82.967849)
+ (xy 272.71011 82.564694) (xy 272.401928 82.255974) (xy 271.999064 82.08869) (xy 271.562849 82.08831) (xy 271.159694 82.25489)
+ (xy 270.850974 82.563072) (xy 270.68369 82.965936) (xy 270.68331 83.402151) (xy 270.84989 83.805306) (xy 271.158072 84.114026)
+ (xy 271.560936 84.28131) (xy 271.997151 84.28169) (xy 272.400306 84.11511) (xy 272.709026 83.806928) (xy 272.87631 83.404064)
+ (xy 272.87669 82.967849) (xy 272.87669 88.438348) (xy 272.832849 88.43831) (xy 272.429694 88.60489) (xy 272.120974 88.913072)
+ (xy 271.95369 89.315936) (xy 271.95331 89.752151) (xy 272.11989 90.155306) (xy 272.428072 90.464026) (xy 272.830936 90.63131)
+ (xy 273.267151 90.63169) (xy 273.670306 90.46511) (xy 273.979026 90.156928) (xy 274.14631 89.754064) (xy 274.14669 89.317849)
+ (xy 274.14669 90.978348) (xy 274.102849 90.97831) (xy 273.699694 91.14489) (xy 273.390974 91.453072) (xy 273.22369 91.855936)
+ (xy 273.22331 92.292151) (xy 273.38989 92.695306) (xy 273.698072 93.004026) (xy 274.100936 93.17131) (xy 274.537151 93.17169)
+ (xy 274.940306 93.00511) (xy 275.249026 92.696928) (xy 275.41631 92.294064) (xy 275.41669 91.857849) (xy 275.41669 97.328348)
+ (xy 275.372849 97.32831) (xy 274.969694 97.49489) (xy 274.660974 97.803072) (xy 274.49369 98.205936) (xy 274.49331 98.642151)
+ (xy 274.65989 99.045306) (xy 274.968072 99.354026) (xy 275.370936 99.52131) (xy 275.807151 99.52169) (xy 276.210306 99.35511)
+ (xy 276.519026 99.046928) (xy 276.68631 98.644064) (xy 276.68669 98.207849) (xy 276.68669 99.868348) (xy 276.642849 99.86831)
+ (xy 276.239694 100.03489) (xy 275.930974 100.343072) (xy 275.76369 100.745936) (xy 275.76331 101.182151) (xy 275.92989 101.585306)
+ (xy 276.238072 101.894026) (xy 276.640936 102.06131) (xy 277.077151 102.06169) (xy 277.480306 101.89511) (xy 277.789026 101.586928)
+ (xy 277.95631 101.184064) (xy 277.95669 100.747849) (xy 277.95669 106.218348) (xy 277.912849 106.21831) (xy 277.509694 106.38489)
+ (xy 277.200974 106.693072) (xy 277.03369 107.095936) (xy 277.03331 107.532151) (xy 277.19989 107.935306) (xy 277.508072 108.244026)
+ (xy 277.910936 108.41131) (xy 278.347151 108.41169) (xy 278.750306 108.24511) (xy 279.059026 107.936928) (xy 279.22631 107.534064)
+ (xy 279.22669 107.097849) (xy 279.22669 108.758348) (xy 279.182849 108.75831) (xy 278.779694 108.92489) (xy 278.470974 109.233072)
+ (xy 278.30369 109.635936) (xy 278.303569 109.77465) (xy 277.956571 109.774348) (xy 277.95669 109.637849) (xy 277.79011 109.234694)
+ (xy 277.481928 108.925974) (xy 277.079064 108.75869) (xy 276.68669 108.758348) (xy 276.68669 107.097849) (xy 276.52011 106.694694)
+ (xy 276.211928 106.385974) (xy 275.809064 106.21869) (xy 275.41669 106.218348) (xy 275.41669 100.747849) (xy 275.25011 100.344694)
+ (xy 274.941928 100.035974) (xy 274.539064 99.86869) (xy 274.14669 99.868348) (xy 274.14669 98.207849) (xy 273.98011 97.804694)
+ (xy 273.671928 97.495974) (xy 273.269064 97.32869) (xy 272.87669 97.328348) (xy 272.87669 91.857849) (xy 272.71011 91.454694)
+ (xy 272.401928 91.145974) (xy 271.999064 90.97869) (xy 271.60669 90.978348) (xy 271.60669 89.317849) (xy 271.44011 88.914694)
+ (xy 271.131928 88.605974) (xy 270.729064 88.43869) (xy 270.33669 88.438348) (xy 270.33669 82.967849) (xy 270.17011 82.564694)
+ (xy 269.861928 82.255974) (xy 269.459064 82.08869) (xy 269.06669 82.088348) (xy 269.06669 80.427849) (xy 268.90011 80.024694)
+ (xy 268.591928 79.715974) (xy 268.189064 79.54869) (xy 267.79669 79.548348) (xy 267.79669 74.077849) (xy 267.63011 73.674694)
+ (xy 267.321928 73.365974) (xy 266.919064 73.19869) (xy 266.52669 73.198348) (xy 266.52669 71.537849) (xy 266.36011 71.134694)
+ (xy 266.051928 70.825974) (xy 265.649064 70.65869) (xy 265.25669 70.658348) (xy 265.25669 65.187849) (xy 265.09011 64.784694)
+ (xy 264.781928 64.475974) (xy 264.379064 64.30869) (xy 263.98669 64.308348) (xy 263.98669 62.647849) (xy 263.82011 62.244694)
+ (xy 263.511928 61.935974) (xy 263.109064 61.76869) (xy 262.672849 61.76831) (xy 262.269694 61.93489) (xy 261.960974 62.243072)
+ (xy 261.79369 62.645936) (xy 261.79331 63.082151) (xy 261.95989 63.485306) (xy 262.268072 63.794026) (xy 262.670936 63.96131)
+ (xy 263.107151 63.96169) (xy 263.510306 63.79511) (xy 263.819026 63.486928) (xy 263.98631 63.084064) (xy 263.98669 62.647849)
+ (xy 263.98669 64.308348) (xy 263.942849 64.30831) (xy 263.539694 64.47489) (xy 263.230974 64.783072) (xy 263.06369 65.185936)
+ (xy 263.06331 65.622151) (xy 263.22989 66.025306) (xy 263.538072 66.334026) (xy 263.940936 66.50131) (xy 264.377151 66.50169)
+ (xy 264.780306 66.33511) (xy 265.089026 66.026928) (xy 265.25631 65.624064) (xy 265.25669 65.187849) (xy 265.25669 70.658348)
+ (xy 265.212849 70.65831) (xy 264.809694 70.82489) (xy 264.500974 71.133072) (xy 264.33369 71.535936) (xy 264.33331 71.972151)
+ (xy 264.49989 72.375306) (xy 264.808072 72.684026) (xy 265.210936 72.85131) (xy 265.647151 72.85169) (xy 266.050306 72.68511)
+ (xy 266.359026 72.376928) (xy 266.52631 71.974064) (xy 266.52669 71.537849) (xy 266.52669 73.198348) (xy 266.482849 73.19831)
+ (xy 266.079694 73.36489) (xy 265.770974 73.673072) (xy 265.60369 74.075936) (xy 265.60331 74.512151) (xy 265.76989 74.915306)
+ (xy 266.078072 75.224026) (xy 266.480936 75.39131) (xy 266.917151 75.39169) (xy 267.320306 75.22511) (xy 267.629026 74.916928)
+ (xy 267.79631 74.514064) (xy 267.79669 74.077849) (xy 267.79669 79.548348) (xy 267.752849 79.54831) (xy 267.349694 79.71489)
+ (xy 267.040974 80.023072) (xy 266.87369 80.425936) (xy 266.87331 80.862151) (xy 267.03989 81.265306) (xy 267.348072 81.574026)
+ (xy 267.750936 81.74131) (xy 268.187151 81.74169) (xy 268.590306 81.57511) (xy 268.899026 81.266928) (xy 269.06631 80.864064)
+ (xy 269.06669 80.427849) (xy 269.06669 82.088348) (xy 269.022849 82.08831) (xy 268.619694 82.25489) (xy 268.310974 82.563072)
+ (xy 268.14369 82.965936) (xy 268.14331 83.402151) (xy 268.30989 83.805306) (xy 268.618072 84.114026) (xy 269.020936 84.28131)
+ (xy 269.457151 84.28169) (xy 269.860306 84.11511) (xy 270.169026 83.806928) (xy 270.33631 83.404064) (xy 270.33669 82.967849)
+ (xy 270.33669 88.438348) (xy 270.292849 88.43831) (xy 269.889694 88.60489) (xy 269.580974 88.913072) (xy 269.41369 89.315936)
+ (xy 269.41331 89.752151) (xy 269.57989 90.155306) (xy 269.888072 90.464026) (xy 270.290936 90.63131) (xy 270.727151 90.63169)
+ (xy 271.130306 90.46511) (xy 271.439026 90.156928) (xy 271.60631 89.754064) (xy 271.60669 89.317849) (xy 271.60669 90.978348)
+ (xy 271.562849 90.97831) (xy 271.159694 91.14489) (xy 270.850974 91.453072) (xy 270.68369 91.855936) (xy 270.68331 92.292151)
+ (xy 270.84989 92.695306) (xy 271.158072 93.004026) (xy 271.560936 93.17131) (xy 271.997151 93.17169) (xy 272.400306 93.00511)
+ (xy 272.709026 92.696928) (xy 272.87631 92.294064) (xy 272.87669 91.857849) (xy 272.87669 97.328348) (xy 272.832849 97.32831)
+ (xy 272.429694 97.49489) (xy 272.120974 97.803072) (xy 271.95369 98.205936) (xy 271.95331 98.642151) (xy 272.11989 99.045306)
+ (xy 272.428072 99.354026) (xy 272.830936 99.52131) (xy 273.267151 99.52169) (xy 273.670306 99.35511) (xy 273.979026 99.046928)
+ (xy 274.14631 98.644064) (xy 274.14669 98.207849) (xy 274.14669 99.868348) (xy 274.102849 99.86831) (xy 273.699694 100.03489)
+ (xy 273.390974 100.343072) (xy 273.22369 100.745936) (xy 273.22331 101.182151) (xy 273.38989 101.585306) (xy 273.598018 101.793797)
+ (xy 273.243692 101.646668) (xy 272.858001 101.646332) (xy 272.502282 101.793311) (xy 272.709026 101.586928) (xy 272.87631 101.184064)
+ (xy 272.87669 100.747849) (xy 272.71011 100.344694) (xy 272.401928 100.035974) (xy 271.999064 99.86869) (xy 271.60669 99.868348)
+ (xy 271.60669 98.207849) (xy 271.44011 97.804694) (xy 271.131928 97.495974) (xy 270.729064 97.32869) (xy 270.33669 97.328348)
+ (xy 270.33669 91.857849) (xy 270.17011 91.454694) (xy 269.861928 91.145974) (xy 269.459064 90.97869) (xy 269.06669 90.978348)
+ (xy 269.06669 89.317849) (xy 268.90011 88.914694) (xy 268.591928 88.605974) (xy 268.189064 88.43869) (xy 267.79669 88.438348)
+ (xy 267.79669 82.967849) (xy 267.63011 82.564694) (xy 267.321928 82.255974) (xy 266.919064 82.08869) (xy 266.52669 82.088348)
+ (xy 266.52669 80.427849) (xy 266.36011 80.024694) (xy 266.051928 79.715974) (xy 265.649064 79.54869) (xy 265.25669 79.548348)
+ (xy 265.25669 74.077849) (xy 265.09011 73.674694) (xy 264.781928 73.365974) (xy 264.379064 73.19869) (xy 263.98669 73.198348)
+ (xy 263.98669 71.537849) (xy 263.82011 71.134694) (xy 263.511928 70.825974) (xy 263.109064 70.65869) (xy 262.71669 70.658348)
+ (xy 262.71669 65.187849) (xy 262.55011 64.784694) (xy 262.241928 64.475974) (xy 261.839064 64.30869) (xy 261.44669 64.308348)
+ (xy 261.44669 62.647849) (xy 261.28011 62.244694) (xy 260.971928 61.935974) (xy 260.59658 61.780115) (xy 260.89846 61.655382)
+ (xy 261.171423 61.382895) (xy 261.319332 61.026692) (xy 261.319668 60.641001) (xy 261.172382 60.28454) (xy 260.899895 60.011577)
+ (xy 260.543692 59.863668) (xy 260.158001 59.863332) (xy 259.80154 60.010618) (xy 259.528577 60.283105) (xy 259.380668 60.639308)
+ (xy 259.380332 61.024999) (xy 259.527618 61.38146) (xy 259.800105 61.654423) (xy 260.103539 61.78042) (xy 259.729694 61.93489)
+ (xy 259.420974 62.243072) (xy 259.25369 62.645936) (xy 259.25331 63.082151) (xy 259.41989 63.485306) (xy 259.728072 63.794026)
+ (xy 260.130936 63.96131) (xy 260.567151 63.96169) (xy 260.970306 63.79511) (xy 261.279026 63.486928) (xy 261.44631 63.084064)
+ (xy 261.44669 62.647849) (xy 261.44669 64.308348) (xy 261.402849 64.30831) (xy 260.999694 64.47489) (xy 260.690974 64.783072)
+ (xy 260.52369 65.185936) (xy 260.52331 65.622151) (xy 260.68989 66.025306) (xy 260.998072 66.334026) (xy 261.400936 66.50131)
+ (xy 261.837151 66.50169) (xy 262.240306 66.33511) (xy 262.549026 66.026928) (xy 262.71631 65.624064) (xy 262.71669 65.187849)
+ (xy 262.71669 70.658348) (xy 262.672849 70.65831) (xy 262.269694 70.82489) (xy 261.960974 71.133072) (xy 261.79369 71.535936)
+ (xy 261.79331 71.972151) (xy 261.95989 72.375306) (xy 262.268072 72.684026) (xy 262.670936 72.85131) (xy 263.107151 72.85169)
+ (xy 263.510306 72.68511) (xy 263.819026 72.376928) (xy 263.98631 71.974064) (xy 263.98669 71.537849) (xy 263.98669 73.198348)
+ (xy 263.942849 73.19831) (xy 263.539694 73.36489) (xy 263.230974 73.673072) (xy 263.06369 74.075936) (xy 263.06331 74.512151)
+ (xy 263.22989 74.915306) (xy 263.538072 75.224026) (xy 263.940936 75.39131) (xy 264.377151 75.39169) (xy 264.780306 75.22511)
+ (xy 265.089026 74.916928) (xy 265.25631 74.514064) (xy 265.25669 74.077849) (xy 265.25669 79.548348) (xy 265.212849 79.54831)
+ (xy 265.129668 79.582679) (xy 265.129668 78.548001) (xy 264.982382 78.19154) (xy 264.709895 77.918577) (xy 264.353692 77.770668)
+ (xy 263.968001 77.770332) (xy 263.61154 77.917618) (xy 263.338577 78.190105) (xy 263.190668 78.546308) (xy 263.190332 78.931999)
+ (xy 263.337618 79.28846) (xy 263.610105 79.561423) (xy 263.966308 79.709332) (xy 264.351999 79.709668) (xy 264.70846 79.562382)
+ (xy 264.981423 79.289895) (xy 265.129332 78.933692) (xy 265.129668 78.548001) (xy 265.129668 79.582679) (xy 264.809694 79.71489)
+ (xy 264.500974 80.023072) (xy 264.33369 80.425936) (xy 264.33331 80.862151) (xy 264.49989 81.265306) (xy 264.808072 81.574026)
+ (xy 265.210936 81.74131) (xy 265.647151 81.74169) (xy 266.050306 81.57511) (xy 266.359026 81.266928) (xy 266.52631 80.864064)
+ (xy 266.52669 80.427849) (xy 266.52669 82.088348) (xy 266.482849 82.08831) (xy 266.079694 82.25489) (xy 265.770974 82.563072)
+ (xy 265.60369 82.965936) (xy 265.60331 83.402151) (xy 265.76989 83.805306) (xy 266.078072 84.114026) (xy 266.480936 84.28131)
+ (xy 266.917151 84.28169) (xy 267.320306 84.11511) (xy 267.629026 83.806928) (xy 267.79631 83.404064) (xy 267.79669 82.967849)
+ (xy 267.79669 88.438348) (xy 267.752849 88.43831) (xy 267.349694 88.60489) (xy 267.040974 88.913072) (xy 266.87369 89.315936)
+ (xy 266.87331 89.752151) (xy 267.03989 90.155306) (xy 267.348072 90.464026) (xy 267.750936 90.63131) (xy 268.187151 90.63169)
+ (xy 268.590306 90.46511) (xy 268.899026 90.156928) (xy 269.06631 89.754064) (xy 269.06669 89.317849) (xy 269.06669 90.978348)
+ (xy 269.022849 90.97831) (xy 268.619694 91.14489) (xy 268.310974 91.453072) (xy 268.14369 91.855936) (xy 268.14331 92.292151)
+ (xy 268.30989 92.695306) (xy 268.618072 93.004026) (xy 269.020936 93.17131) (xy 269.457151 93.17169) (xy 269.860306 93.00511)
+ (xy 270.169026 92.696928) (xy 270.33631 92.294064) (xy 270.33669 91.857849) (xy 270.33669 97.328348) (xy 270.292849 97.32831)
+ (xy 269.889694 97.49489) (xy 269.580974 97.803072) (xy 269.41369 98.205936) (xy 269.41331 98.642151) (xy 269.57989 99.045306)
+ (xy 269.888072 99.354026) (xy 270.290936 99.52131) (xy 270.727151 99.52169) (xy 271.130306 99.35511) (xy 271.439026 99.046928)
+ (xy 271.60631 98.644064) (xy 271.60669 98.207849) (xy 271.60669 99.868348) (xy 271.562849 99.86831) (xy 271.159694 100.03489)
+ (xy 270.850974 100.343072) (xy 270.68369 100.745936) (xy 270.68331 101.182151) (xy 270.84989 101.585306) (xy 271.158072 101.894026)
+ (xy 271.560936 102.06131) (xy 271.997151 102.06169) (xy 272.399563 101.895416) (xy 272.228577 102.066105) (xy 272.080668 102.422308)
+ (xy 272.080332 102.807999) (xy 272.227618 103.16446) (xy 272.500105 103.437423) (xy 272.856308 103.585332) (xy 273.241999 103.585668)
+ (xy 273.59846 103.438382) (xy 273.871423 103.165895) (xy 274.019332 102.809692) (xy 274.019668 102.424001) (xy 273.872382 102.06754)
+ (xy 273.699948 101.894805) (xy 274.100936 102.06131) (xy 274.537151 102.06169) (xy 274.940306 101.89511) (xy 275.249026 101.586928)
+ (xy 275.41631 101.184064) (xy 275.41669 100.747849) (xy 275.41669 106.218348) (xy 275.372849 106.21831) (xy 274.969694 106.38489)
+ (xy 274.660974 106.693072) (xy 274.49369 107.095936) (xy 274.49331 107.532151) (xy 274.65989 107.935306) (xy 274.968072 108.244026)
+ (xy 275.370936 108.41131) (xy 275.807151 108.41169) (xy 276.210306 108.24511) (xy 276.519026 107.936928) (xy 276.68631 107.534064)
+ (xy 276.68669 107.097849) (xy 276.68669 108.758348) (xy 276.642849 108.75831) (xy 276.239694 108.92489) (xy 275.930974 109.233072)
+ (xy 275.76369 109.635936) (xy 275.76331 110.072151) (xy 275.92989 110.475306) (xy 276.238072 110.784026) (xy 276.640936 110.95131)
+ (xy 277.077151 110.95169) (xy 277.160348 110.917313) (xy 277.160332 110.935999) (xy 277.307618 111.29246) (xy 277.580105 111.565423)
+ (xy 277.936308 111.713332) (xy 278.321999 111.713668) (xy 278.67846 111.566382) (xy 278.951423 111.293895) (xy 279.099332 110.937692)
+ (xy 279.099349 110.917432) (xy 279.180936 110.95131) (xy 279.617151 110.95169) (xy 280.020306 110.78511) (xy 280.329026 110.476928)
+ (xy 280.49631 110.074064) (xy 280.49669 109.637849) (xy 280.49669 110.790348) (xy 280.478001 110.790332) (xy 280.12154 110.937618)
+ (xy 279.848577 111.210105) (xy 279.700668 111.566308) (xy 279.700332 111.951999) (xy 279.847618 112.30846) (xy 280.120105 112.581423)
+ (xy 280.476308 112.729332) (xy 280.861999 112.729668) (xy 281.21846 112.582382) (xy 281.491423 112.309895) (xy 281.639332 111.953692)
+ (xy 281.639668 111.568001) (xy 281.639668 115.680431) (xy 281.60011 115.584694) (xy 281.291928 115.275974) (xy 280.889064 115.10869)
+ (xy 280.452849 115.10831) (xy 280.049694 115.27489) (xy 279.740974 115.583072) (xy 279.57369 115.985936) (xy 279.57331 116.422151)
+ (xy 279.73989 116.825306) (xy 280.048072 117.134026) (xy 280.450936 117.30131) (xy 280.887151 117.30169) (xy 281.290306 117.13511)
+ (xy 281.599026 116.826928) (xy 281.76631 116.424064) (xy 281.76669 115.987849) (xy 281.76669 117.6485) (xy 281.264071 117.6485)
+ (xy 281.071111 117.728426) (xy 280.923426 117.876111) (xy 280.8435 118.069071) (xy 280.8435 118.277929) (xy 280.8435 118.58875)
+ (xy 280.97475 118.72) (xy 281.915 118.72) (xy 281.915 118.77) (xy 280.97475 118.77) (xy 280.8435 118.90125)
+ (xy 280.8435 119.212071) (xy 280.8435 119.420929) (xy 280.923426 119.613889) (xy 281.071111 119.761574) (xy 281.264071 119.8415)
+ (xy 281.78375 119.8415) (xy 281.915 119.71025) (xy 281.915 126.66975) (xy 281.78375 126.5385) (xy 281.76669 126.5385)
+ (xy 281.76669 124.877849) (xy 281.60011 124.474694) (xy 281.291928 124.165974) (xy 280.889064 123.99869) (xy 280.49669 123.998348)
+ (xy 280.49669 118.527849) (xy 280.33011 118.124694) (xy 280.021928 117.815974) (xy 279.619064 117.64869) (xy 279.22669 117.648348)
+ (xy 279.22669 115.987849) (xy 279.06011 115.584694) (xy 278.751928 115.275974) (xy 278.349064 115.10869) (xy 277.912849 115.10831)
+ (xy 277.509694 115.27489) (xy 277.200974 115.583072) (xy 277.03369 115.985936) (xy 277.03331 116.422151) (xy 277.19989 116.825306)
+ (xy 277.508072 117.134026) (xy 277.910936 117.30131) (xy 278.347151 117.30169) (xy 278.750306 117.13511) (xy 279.059026 116.826928)
+ (xy 279.22631 116.424064) (xy 279.22669 115.987849) (xy 279.22669 117.648348) (xy 279.182849 117.64831) (xy 278.779694 117.81489)
+ (xy 278.470974 118.123072) (xy 278.30369 118.525936) (xy 278.30331 118.962151) (xy 278.46989 119.365306) (xy 278.778072 119.674026)
+ (xy 279.180936 119.84131) (xy 279.617151 119.84169) (xy 280.020306 119.67511) (xy 280.329026 119.366928) (xy 280.49631 118.964064)
+ (xy 280.49669 118.527849) (xy 280.49669 123.998348) (xy 280.452849 123.99831) (xy 280.049694 124.16489) (xy 279.740974 124.473072)
+ (xy 279.57369 124.875936) (xy 279.57331 125.312151) (xy 279.73989 125.715306) (xy 280.048072 126.024026) (xy 280.450936 126.19131)
+ (xy 280.887151 126.19169) (xy 281.290306 126.02511) (xy 281.599026 125.716928) (xy 281.76631 125.314064) (xy 281.76669 124.877849)
+ (xy 281.76669 126.5385) (xy 281.264071 126.5385) (xy 281.071111 126.618426) (xy 280.923426 126.766111) (xy 280.8435 126.959071)
+ (xy 280.8435 127.167929) (xy 280.8435 127.47875) (xy 280.97475 127.61) (xy 281.915 127.61) (xy 281.915 127.66)
+ (xy 280.97475 127.66) (xy 280.8435 127.79125) (xy 280.8435 128.102071) (xy 280.8435 128.310929) (xy 280.923426 128.503889)
+ (xy 281.071111 128.651574) (xy 281.264071 128.7315) (xy 281.78375 128.7315) (xy 281.915 128.60025) (xy 281.915 133.7394)
+ (xy 280.49669 133.7394) (xy 280.49669 127.417849) (xy 280.33011 127.014694) (xy 280.021928 126.705974) (xy 279.619064 126.53869)
+ (xy 279.22669 126.538348) (xy 279.22669 124.877849) (xy 279.06011 124.474694) (xy 278.751928 124.165974) (xy 278.349064 123.99869)
+ (xy 277.95669 123.998348) (xy 277.95669 118.527849) (xy 277.79011 118.124694) (xy 277.481928 117.815974) (xy 277.079064 117.64869)
+ (xy 276.68669 117.648348) (xy 276.68669 115.987849) (xy 276.52011 115.584694) (xy 276.211928 115.275974) (xy 275.809064 115.10869)
+ (xy 275.41669 115.108348) (xy 275.41669 109.637849) (xy 275.25011 109.234694) (xy 274.941928 108.925974) (xy 274.539064 108.75869)
+ (xy 274.14669 108.758348) (xy 274.14669 107.097849) (xy 273.98011 106.694694) (xy 273.671928 106.385974) (xy 273.269064 106.21869)
+ (xy 272.832849 106.21831) (xy 272.429694 106.38489) (xy 272.120974 106.693072) (xy 271.95369 107.095936) (xy 271.95331 107.532151)
+ (xy 272.11989 107.935306) (xy 272.428072 108.244026) (xy 272.830936 108.41131) (xy 273.267151 108.41169) (xy 273.670306 108.24511)
+ (xy 273.979026 107.936928) (xy 274.14631 107.534064) (xy 274.14669 107.097849) (xy 274.14669 108.758348) (xy 274.102849 108.75831)
+ (xy 273.699694 108.92489) (xy 273.390974 109.233072) (xy 273.22369 109.635936) (xy 273.22331 110.072151) (xy 273.38989 110.475306)
+ (xy 273.698072 110.784026) (xy 274.100936 110.95131) (xy 274.537151 110.95169) (xy 274.940306 110.78511) (xy 275.249026 110.476928)
+ (xy 275.41631 110.074064) (xy 275.41669 109.637849) (xy 275.41669 115.108348) (xy 275.372849 115.10831) (xy 274.969694 115.27489)
+ (xy 274.660974 115.583072) (xy 274.49369 115.985936) (xy 274.49331 116.422151) (xy 274.65989 116.825306) (xy 274.968072 117.134026)
+ (xy 275.370936 117.30131) (xy 275.807151 117.30169) (xy 276.210306 117.13511) (xy 276.519026 116.826928) (xy 276.68631 116.424064)
+ (xy 276.68669 115.987849) (xy 276.68669 117.648348) (xy 276.642849 117.64831) (xy 276.239694 117.81489) (xy 275.930974 118.123072)
+ (xy 275.76369 118.525936) (xy 275.76331 118.962151) (xy 275.92989 119.365306) (xy 276.238072 119.674026) (xy 276.640936 119.84131)
+ (xy 277.077151 119.84169) (xy 277.480306 119.67511) (xy 277.789026 119.366928) (xy 277.95631 118.964064) (xy 277.95669 118.527849)
+ (xy 277.95669 123.998348) (xy 277.912849 123.99831) (xy 277.509694 124.16489) (xy 277.200974 124.473072) (xy 277.03369 124.875936)
+ (xy 277.03331 125.312151) (xy 277.19989 125.715306) (xy 277.508072 126.024026) (xy 277.910936 126.19131) (xy 278.347151 126.19169)
+ (xy 278.750306 126.02511) (xy 279.059026 125.716928) (xy 279.22631 125.314064) (xy 279.22669 124.877849) (xy 279.22669 126.538348)
+ (xy 279.182849 126.53831) (xy 278.779694 126.70489) (xy 278.470974 127.013072) (xy 278.30369 127.415936) (xy 278.30331 127.852151)
+ (xy 278.46989 128.255306) (xy 278.778072 128.564026) (xy 279.180936 128.73131) (xy 279.617151 128.73169) (xy 280.020306 128.56511)
+ (xy 280.329026 128.256928) (xy 280.49631 127.854064) (xy 280.49669 127.417849) (xy 280.49669 133.7394) (xy 277.95669 133.7394)
+ (xy 277.95669 127.417849) (xy 277.79011 127.014694) (xy 277.481928 126.705974) (xy 277.079064 126.53869) (xy 276.68669 126.538348)
+ (xy 276.68669 124.877849) (xy 276.52011 124.474694) (xy 276.211928 124.165974) (xy 275.809064 123.99869) (xy 275.41669 123.998348)
+ (xy 275.41669 118.527849) (xy 275.25011 118.124694) (xy 274.941928 117.815974) (xy 274.539064 117.64869) (xy 274.14669 117.648348)
+ (xy 274.14669 115.987849) (xy 273.98011 115.584694) (xy 273.671928 115.275974) (xy 273.269064 115.10869) (xy 272.87669 115.108348)
+ (xy 272.87669 109.637849) (xy 272.71011 109.234694) (xy 272.401928 108.925974) (xy 271.999064 108.75869) (xy 271.60669 108.758348)
+ (xy 271.60669 107.097849) (xy 271.44011 106.694694) (xy 271.131928 106.385974) (xy 270.729064 106.21869) (xy 270.33669 106.218348)
+ (xy 270.33669 100.747849) (xy 270.17011 100.344694) (xy 269.861928 100.035974) (xy 269.459064 99.86869) (xy 269.06669 99.868348)
+ (xy 269.06669 98.207849) (xy 268.90011 97.804694) (xy 268.591928 97.495974) (xy 268.189064 97.32869) (xy 267.79669 97.328348)
+ (xy 267.79669 91.857849) (xy 267.63011 91.454694) (xy 267.321928 91.145974) (xy 266.919064 90.97869) (xy 266.52669 90.978348)
+ (xy 266.52669 89.317849) (xy 266.36011 88.914694) (xy 266.051928 88.605974) (xy 265.649064 88.43869) (xy 265.25669 88.438348)
+ (xy 265.25669 82.967849) (xy 265.09011 82.564694) (xy 264.781928 82.255974) (xy 264.379064 82.08869) (xy 263.98669 82.088348)
+ (xy 263.98669 80.427849) (xy 263.82011 80.024694) (xy 263.511928 79.715974) (xy 263.109064 79.54869) (xy 262.71669 79.548348)
+ (xy 262.71669 74.077849) (xy 262.55011 73.674694) (xy 262.241928 73.365974) (xy 261.839064 73.19869) (xy 261.44669 73.198348)
+ (xy 261.44669 71.537849) (xy 261.28011 71.134694) (xy 260.971928 70.825974) (xy 260.569064 70.65869) (xy 260.17669 70.658348)
+ (xy 260.17669 65.187849) (xy 260.01011 64.784694) (xy 259.701928 64.475974) (xy 259.299064 64.30869) (xy 258.90669 64.308348)
+ (xy 258.90669 62.647849) (xy 258.74011 62.244694) (xy 258.431928 61.935974) (xy 258.029064 61.76869) (xy 257.592849 61.76831)
+ (xy 257.189694 61.93489) (xy 256.880974 62.243072) (xy 256.71369 62.645936) (xy 256.71331 63.082151) (xy 256.713703 63.083103)
+ (xy 256.606692 63.038668) (xy 256.366349 63.038458) (xy 256.36669 62.647849) (xy 256.20011 62.244694) (xy 255.891928 61.935974)
+ (xy 255.489064 61.76869) (xy 255.052849 61.76831) (xy 254.649694 61.93489) (xy 254.340974 62.243072) (xy 254.17369 62.645936)
+ (xy 254.17353 62.829031) (xy 254.066692 62.784668) (xy 253.82657 62.784458) (xy 253.82669 62.647849) (xy 253.66011 62.244694)
+ (xy 253.351928 61.935974) (xy 252.949064 61.76869) (xy 252.512849 61.76831) (xy 252.109694 61.93489) (xy 251.800974 62.243072)
+ (xy 251.63369 62.645936) (xy 251.63331 63.082151) (xy 251.79989 63.485306) (xy 252.108072 63.794026) (xy 252.510936 63.96131)
+ (xy 252.909801 63.961657) (xy 253.050618 64.30246) (xy 253.301083 64.553363) (xy 253.070974 64.783072) (xy 252.90369 65.185936)
+ (xy 252.90331 65.622151) (xy 253.06989 66.025306) (xy 253.378072 66.334026) (xy 253.780936 66.50131) (xy 254.217151 66.50169)
+ (xy 254.620306 66.33511) (xy 254.929026 66.026928) (xy 255.09631 65.624064) (xy 255.09669 65.187849) (xy 254.93011 64.784694)
+ (xy 254.621928 64.475974) (xy 254.551386 64.446682) (xy 254.694423 64.303895) (xy 254.842332 63.947692) (xy 254.842395 63.874716)
+ (xy 255.050936 63.96131) (xy 255.443539 63.961652) (xy 255.443332 64.199999) (xy 255.590618 64.55646) (xy 255.714084 64.680141)
+ (xy 255.610974 64.783072) (xy 255.44369 65.185936) (xy 255.44331 65.622151) (xy 255.60989 66.025306) (xy 255.918072 66.334026)
+ (xy 256.320936 66.50131) (xy 256.757151 66.50169) (xy 257.160306 66.33511) (xy 257.469026 66.026928) (xy 257.63631 65.624064)
+ (xy 257.63669 65.187849) (xy 257.47011 64.784694) (xy 257.23715 64.551327) (xy 257.382332 64.201692) (xy 257.382616 63.874808)
+ (xy 257.590936 63.96131) (xy 258.027151 63.96169) (xy 258.430306 63.79511) (xy 258.739026 63.486928) (xy 258.90631 63.084064)
+ (xy 258.90669 62.647849) (xy 258.90669 64.308348) (xy 258.862849 64.30831) (xy 258.459694 64.47489) (xy 258.150974 64.783072)
+ (xy 257.98369 65.185936) (xy 257.98331 65.622151) (xy 258.14989 66.025306) (xy 258.458072 66.334026) (xy 258.860936 66.50131)
+ (xy 259.297151 66.50169) (xy 259.700306 66.33511) (xy 260.009026 66.026928) (xy 260.17631 65.624064) (xy 260.17669 65.187849)
+ (xy 260.17669 70.658348) (xy 260.132849 70.65831) (xy 260.049668 70.692679) (xy 260.049668 67.372001) (xy 259.902382 67.01554)
+ (xy 259.629895 66.742577) (xy 259.273692 66.594668) (xy 258.888001 66.594332) (xy 258.53154 66.741618) (xy 258.258577 67.014105)
+ (xy 258.110668 67.370308) (xy 258.110332 67.755999) (xy 258.186617 67.940625) (xy 258.003692 67.864668) (xy 257.618001 67.864332)
+ (xy 257.26154 68.011618) (xy 257.110128 68.162765) (xy 257.108382 68.15854) (xy 256.835895 67.885577) (xy 256.479692 67.737668)
+ (xy 256.094001 67.737332) (xy 255.73754 67.884618) (xy 255.464577 68.157105) (xy 255.375099 68.37259) (xy 255.078001 68.372332)
+ (xy 254.72154 68.519618) (xy 254.448577 68.792105) (xy 254.300668 69.148308) (xy 254.300332 69.533999) (xy 254.447618 69.89046)
+ (xy 254.720105 70.163423) (xy 255.076308 70.311332) (xy 255.461999 70.311668) (xy 255.81846 70.164382) (xy 256.091423 69.891895)
+ (xy 256.1809 69.676409) (xy 256.477999 69.676668) (xy 256.83446 69.529382) (xy 256.985871 69.378234) (xy 256.987618 69.38246)
+ (xy 257.260105 69.655423) (xy 257.616308 69.803332) (xy 258.001999 69.803668) (xy 258.35846 69.656382) (xy 258.631423 69.383895)
+ (xy 258.779332 69.027692) (xy 258.779668 68.642001) (xy 258.703382 68.457374) (xy 258.886308 68.533332) (xy 259.271999 68.533668)
+ (xy 259.62846 68.386382) (xy 259.901423 68.113895) (xy 260.049332 67.757692) (xy 260.049668 67.372001) (xy 260.049668 70.692679)
+ (xy 259.729694 70.82489) (xy 259.420974 71.133072) (xy 259.25369 71.535936) (xy 259.25331 71.972151) (xy 259.41989 72.375306)
+ (xy 259.728072 72.684026) (xy 260.130936 72.85131) (xy 260.567151 72.85169) (xy 260.970306 72.68511) (xy 261.279026 72.376928)
+ (xy 261.44631 71.974064) (xy 261.44669 71.537849) (xy 261.44669 73.198348) (xy 261.402849 73.19831) (xy 260.999694 73.36489)
+ (xy 260.690974 73.673072) (xy 260.52369 74.075936) (xy 260.52331 74.512151) (xy 260.68989 74.915306) (xy 260.998072 75.224026)
+ (xy 261.400936 75.39131) (xy 261.837151 75.39169) (xy 262.240306 75.22511) (xy 262.549026 74.916928) (xy 262.71631 74.514064)
+ (xy 262.71669 74.077849) (xy 262.71669 79.548348) (xy 262.672849 79.54831) (xy 262.269694 79.71489) (xy 261.960974 80.023072)
+ (xy 261.79369 80.425936) (xy 261.79331 80.862151) (xy 261.95989 81.265306) (xy 262.268072 81.574026) (xy 262.670936 81.74131)
+ (xy 263.107151 81.74169) (xy 263.510306 81.57511) (xy 263.819026 81.266928) (xy 263.98631 80.864064) (xy 263.98669 80.427849)
+ (xy 263.98669 82.088348) (xy 263.942849 82.08831) (xy 263.539694 82.25489) (xy 263.230974 82.563072) (xy 263.06369 82.965936)
+ (xy 263.06331 83.402151) (xy 263.22989 83.805306) (xy 263.538072 84.114026) (xy 263.940936 84.28131) (xy 264.377151 84.28169)
+ (xy 264.780306 84.11511) (xy 265.089026 83.806928) (xy 265.25631 83.404064) (xy 265.25669 82.967849) (xy 265.25669 88.438348)
+ (xy 265.212849 88.43831) (xy 264.809694 88.60489) (xy 264.500974 88.913072) (xy 264.33369 89.315936) (xy 264.33331 89.752151)
+ (xy 264.49989 90.155306) (xy 264.808072 90.464026) (xy 265.210936 90.63131) (xy 265.647151 90.63169) (xy 266.050306 90.46511)
+ (xy 266.359026 90.156928) (xy 266.52631 89.754064) (xy 266.52669 89.317849) (xy 266.52669 90.978348) (xy 266.482849 90.97831)
+ (xy 266.079694 91.14489) (xy 265.770974 91.453072) (xy 265.60369 91.855936) (xy 265.60331 92.292151) (xy 265.76989 92.695306)
+ (xy 266.078072 93.004026) (xy 266.480936 93.17131) (xy 266.917151 93.17169) (xy 267.320306 93.00511) (xy 267.629026 92.696928)
+ (xy 267.79631 92.294064) (xy 267.79669 91.857849) (xy 267.79669 97.328348) (xy 267.752849 97.32831) (xy 267.349694 97.49489)
+ (xy 267.040974 97.803072) (xy 266.87369 98.205936) (xy 266.87331 98.642151) (xy 267.03989 99.045306) (xy 267.348072 99.354026)
+ (xy 267.750936 99.52131) (xy 268.187151 99.52169) (xy 268.590306 99.35511) (xy 268.899026 99.046928) (xy 269.06631 98.644064)
+ (xy 269.06669 98.207849) (xy 269.06669 99.868348) (xy 269.022849 99.86831) (xy 268.619694 100.03489) (xy 268.310974 100.343072)
+ (xy 268.14369 100.745936) (xy 268.14331 101.182151) (xy 268.30989 101.585306) (xy 268.618072 101.894026) (xy 269.020936 102.06131)
+ (xy 269.457151 102.06169) (xy 269.860306 101.89511) (xy 270.169026 101.586928) (xy 270.33631 101.184064) (xy 270.33669 100.747849)
+ (xy 270.33669 106.218348) (xy 270.292849 106.21831) (xy 269.889694 106.38489) (xy 269.580974 106.693072) (xy 269.41369 107.095936)
+ (xy 269.41331 107.532151) (xy 269.57989 107.935306) (xy 269.888072 108.244026) (xy 270.290936 108.41131) (xy 270.727151 108.41169)
+ (xy 271.130306 108.24511) (xy 271.439026 107.936928) (xy 271.60631 107.534064) (xy 271.60669 107.097849) (xy 271.60669 108.758348)
+ (xy 271.562849 108.75831) (xy 271.159694 108.92489) (xy 270.850974 109.233072) (xy 270.68369 109.635936) (xy 270.68331 110.072151)
+ (xy 270.84989 110.475306) (xy 271.158072 110.784026) (xy 271.560936 110.95131) (xy 271.997151 110.95169) (xy 272.400306 110.78511)
+ (xy 272.709026 110.476928) (xy 272.87631 110.074064) (xy 272.87669 109.637849) (xy 272.87669 115.108348) (xy 272.832849 115.10831)
+ (xy 272.429694 115.27489) (xy 272.120974 115.583072) (xy 271.95369 115.985936) (xy 271.95331 116.422151) (xy 272.11989 116.825306)
+ (xy 272.428072 117.134026) (xy 272.830936 117.30131) (xy 273.267151 117.30169) (xy 273.670306 117.13511) (xy 273.979026 116.826928)
+ (xy 274.14631 116.424064) (xy 274.14669 115.987849) (xy 274.14669 117.648348) (xy 274.102849 117.64831) (xy 273.699694 117.81489)
+ (xy 273.390974 118.123072) (xy 273.22369 118.525936) (xy 273.22331 118.962151) (xy 273.38989 119.365306) (xy 273.698072 119.674026)
+ (xy 274.100936 119.84131) (xy 274.537151 119.84169) (xy 274.940306 119.67511) (xy 275.249026 119.366928) (xy 275.41631 118.964064)
+ (xy 275.41669 118.527849) (xy 275.41669 123.998348) (xy 275.372849 123.99831) (xy 274.969694 124.16489) (xy 274.660974 124.473072)
+ (xy 274.49369 124.875936) (xy 274.49331 125.312151) (xy 274.65989 125.715306) (xy 274.968072 126.024026) (xy 275.370936 126.19131)
+ (xy 275.807151 126.19169) (xy 276.210306 126.02511) (xy 276.519026 125.716928) (xy 276.68631 125.314064) (xy 276.68669 124.877849)
+ (xy 276.68669 126.538348) (xy 276.642849 126.53831) (xy 276.239694 126.70489) (xy 275.930974 127.013072) (xy 275.76369 127.415936)
+ (xy 275.76331 127.852151) (xy 275.92989 128.255306) (xy 276.238072 128.564026) (xy 276.640936 128.73131) (xy 277.077151 128.73169)
+ (xy 277.480306 128.56511) (xy 277.789026 128.256928) (xy 277.95631 127.854064) (xy 277.95669 127.417849) (xy 277.95669 133.7394)
+ (xy 275.41669 133.7394) (xy 275.41669 127.417849) (xy 275.25011 127.014694) (xy 274.941928 126.705974) (xy 274.539064 126.53869)
+ (xy 274.14669 126.538348) (xy 274.14669 124.877849) (xy 273.98011 124.474694) (xy 273.671928 124.165974) (xy 273.269064 123.99869)
+ (xy 272.87669 123.998348) (xy 272.87669 118.527849) (xy 272.71011 118.124694) (xy 272.401928 117.815974) (xy 271.999064 117.64869)
+ (xy 271.60669 117.648348) (xy 271.60669 115.987849) (xy 271.44011 115.584694) (xy 271.131928 115.275974) (xy 270.729064 115.10869)
+ (xy 270.33669 115.108348) (xy 270.33669 109.637849) (xy 270.17011 109.234694) (xy 269.861928 108.925974) (xy 269.459064 108.75869)
+ (xy 269.06669 108.758348) (xy 269.06669 107.097849) (xy 268.90011 106.694694) (xy 268.591928 106.385974) (xy 268.189064 106.21869)
+ (xy 267.79669 106.218348) (xy 267.79669 100.747849) (xy 267.63011 100.344694) (xy 267.321928 100.035974) (xy 266.919064 99.86869)
+ (xy 266.52669 99.868348) (xy 266.52669 98.207849) (xy 266.36011 97.804694) (xy 266.051928 97.495974) (xy 265.649064 97.32869)
+ (xy 265.25669 97.328348) (xy 265.25669 91.857849) (xy 265.09011 91.454694) (xy 264.781928 91.145974) (xy 264.379064 90.97869)
+ (xy 263.98669 90.978348) (xy 263.98669 89.317849) (xy 263.82011 88.914694) (xy 263.511928 88.605974) (xy 263.109064 88.43869)
+ (xy 262.71669 88.438348) (xy 262.71669 82.967849) (xy 262.55011 82.564694) (xy 262.241928 82.255974) (xy 261.839064 82.08869)
+ (xy 261.44669 82.088348) (xy 261.44669 80.427849) (xy 261.28011 80.024694) (xy 260.971928 79.715974) (xy 260.569064 79.54869)
+ (xy 260.17669 79.548348) (xy 260.17669 74.077849) (xy 260.01011 73.674694) (xy 259.701928 73.365974) (xy 259.299064 73.19869)
+ (xy 258.90669 73.198348) (xy 258.90669 71.537849) (xy 258.74011 71.134694) (xy 258.431928 70.825974) (xy 258.029064 70.65869)
+ (xy 257.592849 70.65831) (xy 257.189694 70.82489) (xy 256.880974 71.133072) (xy 256.71369 71.535936) (xy 256.71331 71.972151)
+ (xy 256.87989 72.375306) (xy 257.188072 72.684026) (xy 257.590936 72.85131) (xy 258.027151 72.85169) (xy 258.430306 72.68511)
+ (xy 258.739026 72.376928) (xy 258.90631 71.974064) (xy 258.90669 71.537849) (xy 258.90669 73.198348) (xy 258.862849 73.19831)
+ (xy 258.459694 73.36489) (xy 258.150974 73.673072) (xy 257.98369 74.075936) (xy 257.98331 74.512151) (xy 258.14989 74.915306)
+ (xy 258.458072 75.224026) (xy 258.860936 75.39131) (xy 259.297151 75.39169) (xy 259.700306 75.22511) (xy 260.009026 74.916928)
+ (xy 260.17631 74.514064) (xy 260.17669 74.077849) (xy 260.17669 79.548348) (xy 260.132849 79.54831) (xy 259.729694 79.71489)
+ (xy 259.420974 80.023072) (xy 259.25369 80.425936) (xy 259.25331 80.862151) (xy 259.41989 81.265306) (xy 259.728072 81.574026)
+ (xy 260.130936 81.74131) (xy 260.567151 81.74169) (xy 260.970306 81.57511) (xy 261.279026 81.266928) (xy 261.44631 80.864064)
+ (xy 261.44669 80.427849) (xy 261.44669 82.088348) (xy 261.402849 82.08831) (xy 260.999694 82.25489) (xy 260.690974 82.563072)
+ (xy 260.52369 82.965936) (xy 260.52331 83.402151) (xy 260.68989 83.805306) (xy 260.998072 84.114026) (xy 261.400936 84.28131)
+ (xy 261.837151 84.28169) (xy 262.240306 84.11511) (xy 262.549026 83.806928) (xy 262.71631 83.404064) (xy 262.71669 82.967849)
+ (xy 262.71669 88.438348) (xy 262.672849 88.43831) (xy 262.269694 88.60489) (xy 261.960974 88.913072) (xy 261.79369 89.315936)
+ (xy 261.79331 89.752151) (xy 261.95989 90.155306) (xy 262.268072 90.464026) (xy 262.670936 90.63131) (xy 263.107151 90.63169)
+ (xy 263.510306 90.46511) (xy 263.819026 90.156928) (xy 263.98631 89.754064) (xy 263.98669 89.317849) (xy 263.98669 90.978348)
+ (xy 263.942849 90.97831) (xy 263.539694 91.14489) (xy 263.230974 91.453072) (xy 263.06369 91.855936) (xy 263.06331 92.292151)
+ (xy 263.22989 92.695306) (xy 263.538072 93.004026) (xy 263.940936 93.17131) (xy 264.377151 93.17169) (xy 264.780306 93.00511)
+ (xy 265.089026 92.696928) (xy 265.25631 92.294064) (xy 265.25669 91.857849) (xy 265.25669 97.328348) (xy 265.212849 97.32831)
+ (xy 264.809694 97.49489) (xy 264.500974 97.803072) (xy 264.33369 98.205936) (xy 264.33331 98.642151) (xy 264.49989 99.045306)
+ (xy 264.808072 99.354026) (xy 265.210936 99.52131) (xy 265.647151 99.52169) (xy 266.050306 99.35511) (xy 266.359026 99.046928)
+ (xy 266.52631 98.644064) (xy 266.52669 98.207849) (xy 266.52669 99.868348) (xy 266.482849 99.86831) (xy 266.079694 100.03489)
+ (xy 265.770974 100.343072) (xy 265.60369 100.745936) (xy 265.60331 101.182151) (xy 265.76989 101.585306) (xy 266.078072 101.894026)
+ (xy 266.480936 102.06131) (xy 266.917151 102.06169) (xy 267.320306 101.89511) (xy 267.629026 101.586928) (xy 267.79631 101.184064)
+ (xy 267.79669 100.747849) (xy 267.79669 106.218348) (xy 267.752849 106.21831) (xy 267.349694 106.38489) (xy 267.040974 106.693072)
+ (xy 266.87369 107.095936) (xy 266.87331 107.532151) (xy 267.03989 107.935306) (xy 267.348072 108.244026) (xy 267.750936 108.41131)
+ (xy 268.187151 108.41169) (xy 268.590306 108.24511) (xy 268.899026 107.936928) (xy 269.06631 107.534064) (xy 269.06669 107.097849)
+ (xy 269.06669 108.758348) (xy 269.022849 108.75831) (xy 268.619694 108.92489) (xy 268.310974 109.233072) (xy 268.14369 109.635936)
+ (xy 268.14331 110.072151) (xy 268.30989 110.475306) (xy 268.618072 110.784026) (xy 269.020936 110.95131) (xy 269.457151 110.95169)
+ (xy 269.860306 110.78511) (xy 270.169026 110.476928) (xy 270.33631 110.074064) (xy 270.33669 109.637849) (xy 270.33669 115.108348)
+ (xy 270.292849 115.10831) (xy 269.889694 115.27489) (xy 269.580974 115.583072) (xy 269.41369 115.985936) (xy 269.41331 116.422151)
+ (xy 269.57989 116.825306) (xy 269.888072 117.134026) (xy 270.290936 117.30131) (xy 270.727151 117.30169) (xy 271.130306 117.13511)
+ (xy 271.439026 116.826928) (xy 271.60631 116.424064) (xy 271.60669 115.987849) (xy 271.60669 117.648348) (xy 271.562849 117.64831)
+ (xy 271.159694 117.81489) (xy 270.850974 118.123072) (xy 270.68369 118.525936) (xy 270.68331 118.962151) (xy 270.84989 119.365306)
+ (xy 271.158072 119.674026) (xy 271.560936 119.84131) (xy 271.997151 119.84169) (xy 272.400306 119.67511) (xy 272.709026 119.366928)
+ (xy 272.87631 118.964064) (xy 272.87669 118.527849) (xy 272.87669 123.998348) (xy 272.832849 123.99831) (xy 272.429694 124.16489)
+ (xy 272.120974 124.473072) (xy 271.95369 124.875936) (xy 271.95331 125.312151) (xy 272.11989 125.715306) (xy 272.428072 126.024026)
+ (xy 272.830936 126.19131) (xy 273.267151 126.19169) (xy 273.670306 126.02511) (xy 273.979026 125.716928) (xy 274.14631 125.314064)
+ (xy 274.14669 124.877849) (xy 274.14669 126.538348) (xy 274.102849 126.53831) (xy 273.699694 126.70489) (xy 273.390974 127.013072)
+ (xy 273.22369 127.415936) (xy 273.22331 127.852151) (xy 273.38989 128.255306) (xy 273.698072 128.564026) (xy 274.100936 128.73131)
+ (xy 274.537151 128.73169) (xy 274.940306 128.56511) (xy 275.249026 128.256928) (xy 275.41631 127.854064) (xy 275.41669 127.417849)
+ (xy 275.41669 133.7394) (xy 272.87669 133.7394) (xy 272.87669 127.417849) (xy 272.71011 127.014694) (xy 272.401928 126.705974)
+ (xy 271.999064 126.53869) (xy 271.60669 126.538348) (xy 271.60669 124.877849) (xy 271.44011 124.474694) (xy 271.131928 124.165974)
+ (xy 270.729064 123.99869) (xy 270.33669 123.998348) (xy 270.33669 118.527849) (xy 270.17011 118.124694) (xy 269.861928 117.815974)
+ (xy 269.459064 117.64869) (xy 269.06669 117.648348) (xy 269.06669 115.987849) (xy 268.90011 115.584694) (xy 268.591928 115.275974)
+ (xy 268.189064 115.10869) (xy 267.79669 115.108348) (xy 267.79669 109.637849) (xy 267.63011 109.234694) (xy 267.321928 108.925974)
+ (xy 266.919064 108.75869) (xy 266.52669 108.758348) (xy 266.52669 107.097849) (xy 266.36011 106.694694) (xy 266.051928 106.385974)
+ (xy 265.649064 106.21869) (xy 265.25669 106.218348) (xy 265.25669 100.747849) (xy 265.09011 100.344694) (xy 264.781928 100.035974)
+ (xy 264.379064 99.86869) (xy 263.98669 99.868348) (xy 263.98669 98.207849) (xy 263.82011 97.804694) (xy 263.511928 97.495974)
+ (xy 263.109064 97.32869) (xy 262.71669 97.328348) (xy 262.71669 91.857849) (xy 262.55011 91.454694) (xy 262.241928 91.145974)
+ (xy 261.839064 90.97869) (xy 261.44669 90.978348) (xy 261.44669 89.317849) (xy 261.28011 88.914694) (xy 260.971928 88.605974)
+ (xy 260.569064 88.43869) (xy 260.17669 88.438348) (xy 260.17669 82.967849) (xy 260.01011 82.564694) (xy 259.701928 82.255974)
+ (xy 259.299064 82.08869) (xy 258.90669 82.088348) (xy 258.90669 80.427849) (xy 258.74011 80.024694) (xy 258.431928 79.715974)
+ (xy 258.029064 79.54869) (xy 257.63669 79.548348) (xy 257.63669 74.077849) (xy 257.47011 73.674694) (xy 257.161928 73.365974)
+ (xy 256.759064 73.19869) (xy 256.36669 73.198348) (xy 256.36669 71.537849) (xy 256.20011 71.134694) (xy 255.891928 70.825974)
+ (xy 255.489064 70.65869) (xy 255.052849 70.65831) (xy 254.649694 70.82489) (xy 254.340974 71.133072) (xy 254.17369 71.535936)
+ (xy 254.17331 71.972151) (xy 254.33989 72.375306) (xy 254.648072 72.684026) (xy 255.050936 72.85131) (xy 255.487151 72.85169)
+ (xy 255.890306 72.68511) (xy 256.199026 72.376928) (xy 256.36631 71.974064) (xy 256.36669 71.537849) (xy 256.36669 73.198348)
+ (xy 256.322849 73.19831) (xy 255.919694 73.36489) (xy 255.610974 73.673072) (xy 255.44369 74.075936) (xy 255.44331 74.512151)
+ (xy 255.60989 74.915306) (xy 255.918072 75.224026) (xy 256.320936 75.39131) (xy 256.757151 75.39169) (xy 257.160306 75.22511)
+ (xy 257.469026 74.916928) (xy 257.63631 74.514064) (xy 257.63669 74.077849) (xy 257.63669 79.548348) (xy 257.592849 79.54831)
+ (xy 257.189694 79.71489) (xy 256.880974 80.023072) (xy 256.71369 80.425936) (xy 256.71331 80.862151) (xy 256.87989 81.265306)
+ (xy 257.188072 81.574026) (xy 257.590936 81.74131) (xy 258.027151 81.74169) (xy 258.430306 81.57511) (xy 258.739026 81.266928)
+ (xy 258.90631 80.864064) (xy 258.90669 80.427849) (xy 258.90669 82.088348) (xy 258.862849 82.08831) (xy 258.459694 82.25489)
+ (xy 258.150974 82.563072) (xy 257.98369 82.965936) (xy 257.98331 83.402151) (xy 258.14989 83.805306) (xy 258.458072 84.114026)
+ (xy 258.860936 84.28131) (xy 259.297151 84.28169) (xy 259.700306 84.11511) (xy 260.009026 83.806928) (xy 260.17631 83.404064)
+ (xy 260.17669 82.967849) (xy 260.17669 88.438348) (xy 260.132849 88.43831) (xy 259.729694 88.60489) (xy 259.420974 88.913072)
+ (xy 259.25369 89.315936) (xy 259.25331 89.752151) (xy 259.41989 90.155306) (xy 259.728072 90.464026) (xy 260.130936 90.63131)
+ (xy 260.567151 90.63169) (xy 260.970306 90.46511) (xy 261.279026 90.156928) (xy 261.44631 89.754064) (xy 261.44669 89.317849)
+ (xy 261.44669 90.978348) (xy 261.402849 90.97831) (xy 260.999694 91.14489) (xy 260.690974 91.453072) (xy 260.52369 91.855936)
+ (xy 260.52331 92.292151) (xy 260.68989 92.695306) (xy 260.998072 93.004026) (xy 261.400936 93.17131) (xy 261.837151 93.17169)
+ (xy 262.240306 93.00511) (xy 262.549026 92.696928) (xy 262.71631 92.294064) (xy 262.71669 91.857849) (xy 262.71669 97.328348)
+ (xy 262.672849 97.32831) (xy 262.269694 97.49489) (xy 261.960974 97.803072) (xy 261.79369 98.205936) (xy 261.79331 98.642151)
+ (xy 261.95989 99.045306) (xy 262.268072 99.354026) (xy 262.670936 99.52131) (xy 263.107151 99.52169) (xy 263.510306 99.35511)
+ (xy 263.819026 99.046928) (xy 263.98631 98.644064) (xy 263.98669 98.207849) (xy 263.98669 99.868348) (xy 263.942849 99.86831)
+ (xy 263.539694 100.03489) (xy 263.230974 100.343072) (xy 263.06369 100.745936) (xy 263.06331 101.182151) (xy 263.22989 101.585306)
+ (xy 263.538072 101.894026) (xy 263.940936 102.06131) (xy 264.377151 102.06169) (xy 264.780306 101.89511) (xy 265.089026 101.586928)
+ (xy 265.25631 101.184064) (xy 265.25669 100.747849) (xy 265.25669 106.218348) (xy 265.212849 106.21831) (xy 264.809694 106.38489)
+ (xy 264.500974 106.693072) (xy 264.33369 107.095936) (xy 264.33331 107.532151) (xy 264.49989 107.935306) (xy 264.808072 108.244026)
+ (xy 265.210936 108.41131) (xy 265.647151 108.41169) (xy 266.050306 108.24511) (xy 266.359026 107.936928) (xy 266.52631 107.534064)
+ (xy 266.52669 107.097849) (xy 266.52669 108.758348) (xy 266.482849 108.75831) (xy 266.079694 108.92489) (xy 265.770974 109.233072)
+ (xy 265.60369 109.635936) (xy 265.60331 110.072151) (xy 265.76989 110.475306) (xy 266.078072 110.784026) (xy 266.480936 110.95131)
+ (xy 266.917151 110.95169) (xy 267.320306 110.78511) (xy 267.629026 110.476928) (xy 267.79631 110.074064) (xy 267.79669 109.637849)
+ (xy 267.79669 115.108348) (xy 267.752849 115.10831) (xy 267.349694 115.27489) (xy 267.040974 115.583072) (xy 266.87369 115.985936)
+ (xy 266.87331 116.422151) (xy 267.03989 116.825306) (xy 267.348072 117.134026) (xy 267.750936 117.30131) (xy 268.187151 117.30169)
+ (xy 268.590306 117.13511) (xy 268.899026 116.826928) (xy 269.06631 116.424064) (xy 269.06669 115.987849) (xy 269.06669 117.648348)
+ (xy 269.022849 117.64831) (xy 268.619694 117.81489) (xy 268.310974 118.123072) (xy 268.14369 118.525936) (xy 268.14331 118.962151)
+ (xy 268.30989 119.365306) (xy 268.618072 119.674026) (xy 269.020936 119.84131) (xy 269.457151 119.84169) (xy 269.860306 119.67511)
+ (xy 270.169026 119.366928) (xy 270.33631 118.964064) (xy 270.33669 118.527849) (xy 270.33669 123.998348) (xy 270.292849 123.99831)
+ (xy 269.889694 124.16489) (xy 269.580974 124.473072) (xy 269.41369 124.875936) (xy 269.41331 125.312151) (xy 269.57989 125.715306)
+ (xy 269.888072 126.024026) (xy 270.290936 126.19131) (xy 270.727151 126.19169) (xy 271.130306 126.02511) (xy 271.439026 125.716928)
+ (xy 271.60631 125.314064) (xy 271.60669 124.877849) (xy 271.60669 126.538348) (xy 271.562849 126.53831) (xy 271.159694 126.70489)
+ (xy 270.850974 127.013072) (xy 270.68369 127.415936) (xy 270.68331 127.852151) (xy 270.84989 128.255306) (xy 271.158072 128.564026)
+ (xy 271.560936 128.73131) (xy 271.997151 128.73169) (xy 272.400306 128.56511) (xy 272.709026 128.256928) (xy 272.87631 127.854064)
+ (xy 272.87669 127.417849) (xy 272.87669 133.7394) (xy 270.33669 133.7394) (xy 270.33669 127.417849) (xy 270.17011 127.014694)
+ (xy 269.861928 126.705974) (xy 269.459064 126.53869) (xy 269.06669 126.538348) (xy 269.06669 124.877849) (xy 268.90011 124.474694)
+ (xy 268.591928 124.165974) (xy 268.189064 123.99869) (xy 267.79669 123.998348) (xy 267.79669 118.527849) (xy 267.63011 118.124694)
+ (xy 267.321928 117.815974) (xy 266.919064 117.64869) (xy 266.52669 117.648348) (xy 266.52669 115.987849) (xy 266.36011 115.584694)
+ (xy 266.051928 115.275974) (xy 265.649064 115.10869) (xy 265.25669 115.108348) (xy 265.25669 109.637849) (xy 265.09011 109.234694)
+ (xy 264.781928 108.925974) (xy 264.379064 108.75869) (xy 263.98669 108.758348) (xy 263.98669 107.097849) (xy 263.82011 106.694694)
+ (xy 263.511928 106.385974) (xy 263.109064 106.21869) (xy 262.71669 106.218348) (xy 262.71669 100.747849) (xy 262.55011 100.344694)
+ (xy 262.241928 100.035974) (xy 261.839064 99.86869) (xy 261.44669 99.868348) (xy 261.44669 98.207849) (xy 261.28011 97.804694)
+ (xy 260.971928 97.495974) (xy 260.569064 97.32869) (xy 260.17669 97.328348) (xy 260.17669 91.857849) (xy 260.01011 91.454694)
+ (xy 259.701928 91.145974) (xy 259.299064 90.97869) (xy 258.90669 90.978348) (xy 258.90669 89.317849) (xy 258.74011 88.914694)
+ (xy 258.431928 88.605974) (xy 258.029064 88.43869) (xy 257.63669 88.438348) (xy 257.63669 82.967849) (xy 257.47011 82.564694)
+ (xy 257.161928 82.255974) (xy 256.759064 82.08869) (xy 256.36669 82.088348) (xy 256.36669 80.427849) (xy 256.20011 80.024694)
+ (xy 255.891928 79.715974) (xy 255.489064 79.54869) (xy 255.09669 79.548348) (xy 255.09669 74.077849) (xy 254.93011 73.674694)
+ (xy 254.621928 73.365974) (xy 254.219064 73.19869) (xy 253.82669 73.198348) (xy 253.82669 71.537849) (xy 253.699668 71.230431)
+ (xy 253.699668 69.277001) (xy 253.552382 68.92054) (xy 253.279895 68.647577) (xy 252.923692 68.499668) (xy 252.55669 68.499348)
+ (xy 252.55669 65.187849) (xy 252.39011 64.784694) (xy 252.081928 64.475974) (xy 251.679064 64.30869) (xy 251.28669 64.308348)
+ (xy 251.28669 62.647849) (xy 251.12011 62.244694) (xy 250.811928 61.935974) (xy 250.409064 61.76869) (xy 249.972849 61.76831)
+ (xy 249.569694 61.93489) (xy 249.260974 62.243072) (xy 249.09369 62.645936) (xy 249.09331 63.082151) (xy 249.25989 63.485306)
+ (xy 249.568072 63.794026) (xy 249.970936 63.96131) (xy 250.407151 63.96169) (xy 250.810306 63.79511) (xy 251.119026 63.486928)
+ (xy 251.28631 63.084064) (xy 251.28669 62.647849) (xy 251.28669 64.308348) (xy 251.242849 64.30831) (xy 250.839694 64.47489)
+ (xy 250.530974 64.783072) (xy 250.36369 65.185936) (xy 250.36331 65.622151) (xy 250.52989 66.025306) (xy 250.838072 66.334026)
+ (xy 251.240936 66.50131) (xy 251.677151 66.50169) (xy 252.080306 66.33511) (xy 252.389026 66.026928) (xy 252.55631 65.624064)
+ (xy 252.55669 65.187849) (xy 252.55669 68.499348) (xy 252.538001 68.499332) (xy 252.18154 68.646618) (xy 251.908577 68.919105)
+ (xy 251.760668 69.275308) (xy 251.760332 69.660999) (xy 251.907618 70.01746) (xy 252.180105 70.290423) (xy 252.536308 70.438332)
+ (xy 252.921999 70.438668) (xy 253.27846 70.291382) (xy 253.551423 70.018895) (xy 253.699332 69.662692) (xy 253.699668 69.277001)
+ (xy 253.699668 71.230431) (xy 253.66011 71.134694) (xy 253.351928 70.825974) (xy 252.949064 70.65869) (xy 252.512849 70.65831)
+ (xy 252.109694 70.82489) (xy 251.800974 71.133072) (xy 251.63369 71.535936) (xy 251.63331 71.972151) (xy 251.79989 72.375306)
+ (xy 252.108072 72.684026) (xy 252.510936 72.85131) (xy 252.947151 72.85169) (xy 253.350306 72.68511) (xy 253.659026 72.376928)
+ (xy 253.82631 71.974064) (xy 253.82669 71.537849) (xy 253.82669 73.198348) (xy 253.782849 73.19831) (xy 253.379694 73.36489)
+ (xy 253.070974 73.673072) (xy 252.90369 74.075936) (xy 252.90331 74.512151) (xy 253.06989 74.915306) (xy 253.378072 75.224026)
+ (xy 253.780936 75.39131) (xy 254.217151 75.39169) (xy 254.620306 75.22511) (xy 254.929026 74.916928) (xy 255.09631 74.514064)
+ (xy 255.09669 74.077849) (xy 255.09669 79.548348) (xy 255.052849 79.54831) (xy 254.649694 79.71489) (xy 254.340974 80.023072)
+ (xy 254.17369 80.425936) (xy 254.17331 80.862151) (xy 254.33989 81.265306) (xy 254.648072 81.574026) (xy 255.050936 81.74131)
+ (xy 255.487151 81.74169) (xy 255.890306 81.57511) (xy 256.199026 81.266928) (xy 256.36631 80.864064) (xy 256.36669 80.427849)
+ (xy 256.36669 82.088348) (xy 256.322849 82.08831) (xy 255.919694 82.25489) (xy 255.610974 82.563072) (xy 255.44369 82.965936)
+ (xy 255.44331 83.402151) (xy 255.60989 83.805306) (xy 255.918072 84.114026) (xy 256.320936 84.28131) (xy 256.757151 84.28169)
+ (xy 257.160306 84.11511) (xy 257.469026 83.806928) (xy 257.63631 83.404064) (xy 257.63669 82.967849) (xy 257.63669 88.438348)
+ (xy 257.592849 88.43831) (xy 257.189694 88.60489) (xy 256.880974 88.913072) (xy 256.71369 89.315936) (xy 256.71331 89.752151)
+ (xy 256.87989 90.155306) (xy 257.188072 90.464026) (xy 257.590936 90.63131) (xy 258.027151 90.63169) (xy 258.430306 90.46511)
+ (xy 258.739026 90.156928) (xy 258.90631 89.754064) (xy 258.90669 89.317849) (xy 258.90669 90.978348) (xy 258.862849 90.97831)
+ (xy 258.459694 91.14489) (xy 258.150974 91.453072) (xy 257.98369 91.855936) (xy 257.98331 92.292151) (xy 258.14989 92.695306)
+ (xy 258.458072 93.004026) (xy 258.860936 93.17131) (xy 259.297151 93.17169) (xy 259.700306 93.00511) (xy 260.009026 92.696928)
+ (xy 260.17631 92.294064) (xy 260.17669 91.857849) (xy 260.17669 97.328348) (xy 260.132849 97.32831) (xy 259.729694 97.49489)
+ (xy 259.420974 97.803072) (xy 259.25369 98.205936) (xy 259.25331 98.642151) (xy 259.41989 99.045306) (xy 259.728072 99.354026)
+ (xy 260.130936 99.52131) (xy 260.567151 99.52169) (xy 260.970306 99.35511) (xy 261.279026 99.046928) (xy 261.44631 98.644064)
+ (xy 261.44669 98.207849) (xy 261.44669 99.868348) (xy 261.402849 99.86831) (xy 260.999694 100.03489) (xy 260.690974 100.343072)
+ (xy 260.52369 100.745936) (xy 260.52331 101.182151) (xy 260.68989 101.585306) (xy 260.998072 101.894026) (xy 261.400936 102.06131)
+ (xy 261.837151 102.06169) (xy 262.240306 101.89511) (xy 262.549026 101.586928) (xy 262.71631 101.184064) (xy 262.71669 100.747849)
+ (xy 262.71669 106.218348) (xy 262.672849 106.21831) (xy 262.269694 106.38489) (xy 261.960974 106.693072) (xy 261.79369 107.095936)
+ (xy 261.79331 107.532151) (xy 261.95989 107.935306) (xy 262.268072 108.244026) (xy 262.670936 108.41131) (xy 263.107151 108.41169)
+ (xy 263.510306 108.24511) (xy 263.819026 107.936928) (xy 263.98631 107.534064) (xy 263.98669 107.097849) (xy 263.98669 108.758348)
+ (xy 263.942849 108.75831) (xy 263.539694 108.92489) (xy 263.230974 109.233072) (xy 263.06369 109.635936) (xy 263.06331 110.072151)
+ (xy 263.22989 110.475306) (xy 263.538072 110.784026) (xy 263.940936 110.95131) (xy 264.377151 110.95169) (xy 264.780306 110.78511)
+ (xy 265.089026 110.476928) (xy 265.25631 110.074064) (xy 265.25669 109.637849) (xy 265.25669 115.108348) (xy 265.212849 115.10831)
+ (xy 264.809694 115.27489) (xy 264.500974 115.583072) (xy 264.33369 115.985936) (xy 264.33331 116.422151) (xy 264.49989 116.825306)
+ (xy 264.808072 117.134026) (xy 265.210936 117.30131) (xy 265.647151 117.30169) (xy 266.050306 117.13511) (xy 266.359026 116.826928)
+ (xy 266.52631 116.424064) (xy 266.52669 115.987849) (xy 266.52669 117.648348) (xy 266.482849 117.64831) (xy 266.079694 117.81489)
+ (xy 265.770974 118.123072) (xy 265.60369 118.525936) (xy 265.60331 118.962151) (xy 265.76989 119.365306) (xy 266.078072 119.674026)
+ (xy 266.480936 119.84131) (xy 266.917151 119.84169) (xy 267.320306 119.67511) (xy 267.629026 119.366928) (xy 267.79631 118.964064)
+ (xy 267.79669 118.527849) (xy 267.79669 123.998348) (xy 267.752849 123.99831) (xy 267.349694 124.16489) (xy 267.040974 124.473072)
+ (xy 266.87369 124.875936) (xy 266.87331 125.312151) (xy 267.03989 125.715306) (xy 267.348072 126.024026) (xy 267.750936 126.19131)
+ (xy 268.187151 126.19169) (xy 268.590306 126.02511) (xy 268.899026 125.716928) (xy 269.06631 125.314064) (xy 269.06669 124.877849)
+ (xy 269.06669 126.538348) (xy 269.022849 126.53831) (xy 268.619694 126.70489) (xy 268.310974 127.013072) (xy 268.14369 127.415936)
+ (xy 268.14331 127.852151) (xy 268.30989 128.255306) (xy 268.618072 128.564026) (xy 269.020936 128.73131) (xy 269.457151 128.73169)
+ (xy 269.860306 128.56511) (xy 270.169026 128.256928) (xy 270.33631 127.854064) (xy 270.33669 127.417849) (xy 270.33669 133.7394)
+ (xy 267.79669 133.7394) (xy 267.79669 127.417849) (xy 267.63011 127.014694) (xy 267.321928 126.705974) (xy 266.919064 126.53869)
+ (xy 266.52669 126.538348) (xy 266.52669 124.877849) (xy 266.36011 124.474694) (xy 266.051928 124.165974) (xy 265.649064 123.99869)
+ (xy 265.25669 123.998348) (xy 265.25669 118.527849) (xy 265.09011 118.124694) (xy 264.781928 117.815974) (xy 264.379064 117.64869)
+ (xy 263.98669 117.648348) (xy 263.98669 115.987849) (xy 263.82011 115.584694) (xy 263.511928 115.275974) (xy 263.109064 115.10869)
+ (xy 262.71669 115.108348) (xy 262.71669 109.637849) (xy 262.55011 109.234694) (xy 262.241928 108.925974) (xy 261.839064 108.75869)
+ (xy 261.44669 108.758348) (xy 261.44669 107.097849) (xy 261.28011 106.694694) (xy 260.971928 106.385974) (xy 260.569064 106.21869)
+ (xy 260.17669 106.218348) (xy 260.17669 100.747849) (xy 260.01011 100.344694) (xy 259.701928 100.035974) (xy 259.299064 99.86869)
+ (xy 258.90669 99.868348) (xy 258.90669 98.207849) (xy 258.74011 97.804694) (xy 258.431928 97.495974) (xy 258.029064 97.32869)
+ (xy 257.63669 97.328348) (xy 257.63669 91.857849) (xy 257.47011 91.454694) (xy 257.161928 91.145974) (xy 256.759064 90.97869)
+ (xy 256.36669 90.978348) (xy 256.36669 89.317849) (xy 256.20011 88.914694) (xy 255.891928 88.605974) (xy 255.489064 88.43869)
+ (xy 255.09669 88.438348) (xy 255.09669 82.967849) (xy 254.93011 82.564694) (xy 254.621928 82.255974) (xy 254.219064 82.08869)
+ (xy 253.82669 82.088348) (xy 253.82669 80.427849) (xy 253.66011 80.024694) (xy 253.351928 79.715974) (xy 252.949064 79.54869)
+ (xy 252.55669 79.548348) (xy 252.55669 74.077849) (xy 252.39011 73.674694) (xy 252.081928 73.365974) (xy 251.679064 73.19869)
+ (xy 251.28669 73.198348) (xy 251.28669 71.537849) (xy 251.12011 71.134694) (xy 250.811928 70.825974) (xy 250.409064 70.65869)
+ (xy 250.01669 70.658348) (xy 250.01669 65.187849) (xy 249.85011 64.784694) (xy 249.541928 64.475974) (xy 249.139064 64.30869)
+ (xy 248.74669 64.308348) (xy 248.74669 62.647849) (xy 248.619668 62.340431) (xy 248.619668 60.514001) (xy 248.472382 60.15754)
+ (xy 248.199895 59.884577) (xy 247.843692 59.736668) (xy 247.458001 59.736332) (xy 247.10154 59.883618) (xy 246.828577 60.156105)
+ (xy 246.680668 60.512308) (xy 246.680332 60.897999) (xy 246.827618 61.25446) (xy 247.100105 61.527423) (xy 247.456308 61.675332)
+ (xy 247.841999 61.675668) (xy 248.19846 61.528382) (xy 248.471423 61.255895) (xy 248.619332 60.899692) (xy 248.619668 60.514001)
+ (xy 248.619668 62.340431) (xy 248.58011 62.244694) (xy 248.271928 61.935974) (xy 247.869064 61.76869) (xy 247.432849 61.76831)
+ (xy 247.029694 61.93489) (xy 246.720974 62.243072) (xy 246.55369 62.645936) (xy 246.55331 63.082151) (xy 246.71989 63.485306)
+ (xy 247.028072 63.794026) (xy 247.430936 63.96131) (xy 247.867151 63.96169) (xy 248.270306 63.79511) (xy 248.579026 63.486928)
+ (xy 248.74631 63.084064) (xy 248.74669 62.647849) (xy 248.74669 64.308348) (xy 248.702849 64.30831) (xy 248.299694 64.47489)
+ (xy 247.990974 64.783072) (xy 247.82369 65.185936) (xy 247.82331 65.622151) (xy 247.98989 66.025306) (xy 248.298072 66.334026)
+ (xy 248.700936 66.50131) (xy 249.137151 66.50169) (xy 249.540306 66.33511) (xy 249.849026 66.026928) (xy 250.01631 65.624064)
+ (xy 250.01669 65.187849) (xy 250.01669 70.658348) (xy 249.972849 70.65831) (xy 249.569694 70.82489) (xy 249.260974 71.133072)
+ (xy 249.09369 71.535936) (xy 249.09331 71.972151) (xy 249.25989 72.375306) (xy 249.568072 72.684026) (xy 249.970936 72.85131)
+ (xy 250.407151 72.85169) (xy 250.810306 72.68511) (xy 251.119026 72.376928) (xy 251.28631 71.974064) (xy 251.28669 71.537849)
+ (xy 251.28669 73.198348) (xy 251.242849 73.19831) (xy 250.839694 73.36489) (xy 250.530974 73.673072) (xy 250.36369 74.075936)
+ (xy 250.36331 74.512151) (xy 250.52989 74.915306) (xy 250.838072 75.224026) (xy 251.240936 75.39131) (xy 251.677151 75.39169)
+ (xy 252.080306 75.22511) (xy 252.389026 74.916928) (xy 252.55631 74.514064) (xy 252.55669 74.077849) (xy 252.55669 79.548348)
+ (xy 252.512849 79.54831) (xy 252.109694 79.71489) (xy 251.800974 80.023072) (xy 251.63369 80.425936) (xy 251.63331 80.862151)
+ (xy 251.79989 81.265306) (xy 252.108072 81.574026) (xy 252.510936 81.74131) (xy 252.947151 81.74169) (xy 253.350306 81.57511)
+ (xy 253.659026 81.266928) (xy 253.82631 80.864064) (xy 253.82669 80.427849) (xy 253.82669 82.088348) (xy 253.782849 82.08831)
+ (xy 253.379694 82.25489) (xy 253.070974 82.563072) (xy 252.90369 82.965936) (xy 252.90331 83.402151) (xy 253.06989 83.805306)
+ (xy 253.378072 84.114026) (xy 253.780936 84.28131) (xy 254.217151 84.28169) (xy 254.620306 84.11511) (xy 254.929026 83.806928)
+ (xy 255.09631 83.404064) (xy 255.09669 82.967849) (xy 255.09669 88.438348) (xy 255.052849 88.43831) (xy 254.649694 88.60489)
+ (xy 254.340974 88.913072) (xy 254.17369 89.315936) (xy 254.17331 89.752151) (xy 254.33989 90.155306) (xy 254.648072 90.464026)
+ (xy 255.050936 90.63131) (xy 255.487151 90.63169) (xy 255.890306 90.46511) (xy 256.199026 90.156928) (xy 256.36631 89.754064)
+ (xy 256.36669 89.317849) (xy 256.36669 90.978348) (xy 256.322849 90.97831) (xy 255.919694 91.14489) (xy 255.610974 91.453072)
+ (xy 255.44369 91.855936) (xy 255.44331 92.292151) (xy 255.60989 92.695306) (xy 255.918072 93.004026) (xy 256.320936 93.17131)
+ (xy 256.757151 93.17169) (xy 257.160306 93.00511) (xy 257.469026 92.696928) (xy 257.63631 92.294064) (xy 257.63669 91.857849)
+ (xy 257.63669 97.328348) (xy 257.592849 97.32831) (xy 257.189694 97.49489) (xy 256.880974 97.803072) (xy 256.71369 98.205936)
+ (xy 256.71331 98.642151) (xy 256.87989 99.045306) (xy 257.188072 99.354026) (xy 257.590936 99.52131) (xy 258.027151 99.52169)
+ (xy 258.430306 99.35511) (xy 258.739026 99.046928) (xy 258.90631 98.644064) (xy 258.90669 98.207849) (xy 258.90669 99.868348)
+ (xy 258.862849 99.86831) (xy 258.459694 100.03489) (xy 258.150974 100.343072) (xy 257.98369 100.745936) (xy 257.98331 101.182151)
+ (xy 258.14989 101.585306) (xy 258.358018 101.793797) (xy 258.003692 101.646668) (xy 257.618001 101.646332) (xy 257.262282 101.793311)
+ (xy 257.469026 101.586928) (xy 257.63631 101.184064) (xy 257.63669 100.747849) (xy 257.47011 100.344694) (xy 257.161928 100.035974)
+ (xy 256.759064 99.86869) (xy 256.36669 99.868348) (xy 256.36669 98.207849) (xy 256.20011 97.804694) (xy 255.891928 97.495974)
+ (xy 255.489064 97.32869) (xy 255.09669 97.328348) (xy 255.09669 91.857849) (xy 254.93011 91.454694) (xy 254.621928 91.145974)
+ (xy 254.219064 90.97869) (xy 253.82669 90.978348) (xy 253.82669 89.317849) (xy 253.66011 88.914694) (xy 253.351928 88.605974)
+ (xy 252.949064 88.43869) (xy 252.55669 88.438348) (xy 252.55669 82.967849) (xy 252.39011 82.564694) (xy 252.081928 82.255974)
+ (xy 251.679064 82.08869) (xy 251.28669 82.088348) (xy 251.28669 80.427849) (xy 251.12011 80.024694) (xy 250.811928 79.715974)
+ (xy 250.409064 79.54869) (xy 250.01669 79.548348) (xy 250.01669 74.077849) (xy 249.85011 73.674694) (xy 249.541928 73.365974)
+ (xy 249.139064 73.19869) (xy 248.74669 73.198348) (xy 248.74669 71.537849) (xy 248.58011 71.134694) (xy 248.271928 70.825974)
+ (xy 247.869064 70.65869) (xy 247.47669 70.658348) (xy 247.47669 65.187849) (xy 247.31011 64.784694) (xy 247.001928 64.475974)
+ (xy 246.599064 64.30869) (xy 246.20669 64.308348) (xy 246.20669 62.647849) (xy 246.04011 62.244694) (xy 245.731928 61.935974)
+ (xy 245.329064 61.76869) (xy 244.892849 61.76831) (xy 244.489694 61.93489) (xy 244.180974 62.243072) (xy 244.01369 62.645936)
+ (xy 244.01331 63.082151) (xy 244.17989 63.485306) (xy 244.488072 63.794026) (xy 244.890936 63.96131) (xy 245.327151 63.96169)
+ (xy 245.730306 63.79511) (xy 246.039026 63.486928) (xy 246.20631 63.084064) (xy 246.20669 62.647849) (xy 246.20669 64.308348)
+ (xy 246.162849 64.30831) (xy 245.759694 64.47489) (xy 245.450974 64.783072) (xy 245.28369 65.185936) (xy 245.28331 65.622151)
+ (xy 245.44989 66.025306) (xy 245.758072 66.334026) (xy 246.160936 66.50131) (xy 246.597151 66.50169) (xy 247.000306 66.33511)
+ (xy 247.309026 66.026928) (xy 247.47631 65.624064) (xy 247.47669 65.187849) (xy 247.47669 70.658348) (xy 247.432849 70.65831)
+ (xy 247.029694 70.82489) (xy 246.720974 71.133072) (xy 246.55369 71.535936) (xy 246.55331 71.972151) (xy 246.71989 72.375306)
+ (xy 247.028072 72.684026) (xy 247.430936 72.85131) (xy 247.867151 72.85169) (xy 248.270306 72.68511) (xy 248.579026 72.376928)
+ (xy 248.74631 71.974064) (xy 248.74669 71.537849) (xy 248.74669 73.198348) (xy 248.702849 73.19831) (xy 248.299694 73.36489)
+ (xy 247.990974 73.673072) (xy 247.82369 74.075936) (xy 247.82331 74.512151) (xy 247.98989 74.915306) (xy 248.298072 75.224026)
+ (xy 248.700936 75.39131) (xy 249.137151 75.39169) (xy 249.540306 75.22511) (xy 249.849026 74.916928) (xy 250.01631 74.514064)
+ (xy 250.01669 74.077849) (xy 250.01669 79.548348) (xy 249.972849 79.54831) (xy 249.569694 79.71489) (xy 249.260974 80.023072)
+ (xy 249.09369 80.425936) (xy 249.09331 80.862151) (xy 249.25989 81.265306) (xy 249.568072 81.574026) (xy 249.970936 81.74131)
+ (xy 250.407151 81.74169) (xy 250.810306 81.57511) (xy 251.119026 81.266928) (xy 251.28631 80.864064) (xy 251.28669 80.427849)
+ (xy 251.28669 82.088348) (xy 251.242849 82.08831) (xy 250.839694 82.25489) (xy 250.530974 82.563072) (xy 250.36369 82.965936)
+ (xy 250.36331 83.402151) (xy 250.52989 83.805306) (xy 250.824537 84.100468) (xy 250.638577 84.286105) (xy 250.490668 84.642308)
+ (xy 250.490332 85.027999) (xy 250.637618 85.38446) (xy 250.910105 85.657423) (xy 251.266308 85.805332) (xy 251.651999 85.805668)
+ (xy 252.00846 85.658382) (xy 252.281423 85.385895) (xy 252.429332 85.029692) (xy 252.429668 84.644001) (xy 252.282382 84.28754)
+ (xy 252.095305 84.100136) (xy 252.389026 83.806928) (xy 252.55631 83.404064) (xy 252.55669 82.967849) (xy 252.55669 88.438348)
+ (xy 252.512849 88.43831) (xy 252.109694 88.60489) (xy 251.800974 88.913072) (xy 251.63369 89.315936) (xy 251.63331 89.752151)
+ (xy 251.79989 90.155306) (xy 252.108072 90.464026) (xy 252.510936 90.63131) (xy 252.947151 90.63169) (xy 253.350306 90.46511)
+ (xy 253.659026 90.156928) (xy 253.82631 89.754064) (xy 253.82669 89.317849) (xy 253.82669 90.978348) (xy 253.782849 90.97831)
+ (xy 253.379694 91.14489) (xy 253.070974 91.453072) (xy 252.90369 91.855936) (xy 252.90331 92.292151) (xy 253.06989 92.695306)
+ (xy 253.378072 93.004026) (xy 253.780936 93.17131) (xy 254.217151 93.17169) (xy 254.620306 93.00511) (xy 254.929026 92.696928)
+ (xy 255.09631 92.294064) (xy 255.09669 91.857849) (xy 255.09669 97.328348) (xy 255.052849 97.32831) (xy 254.649694 97.49489)
+ (xy 254.340974 97.803072) (xy 254.17369 98.205936) (xy 254.17331 98.642151) (xy 254.33989 99.045306) (xy 254.648072 99.354026)
+ (xy 255.050936 99.52131) (xy 255.487151 99.52169) (xy 255.890306 99.35511) (xy 256.199026 99.046928) (xy 256.36631 98.644064)
+ (xy 256.36669 98.207849) (xy 256.36669 99.868348) (xy 256.322849 99.86831) (xy 255.919694 100.03489) (xy 255.610974 100.343072)
+ (xy 255.44369 100.745936) (xy 255.44331 101.182151) (xy 255.60989 101.585306) (xy 255.818018 101.793797) (xy 255.463692 101.646668)
+ (xy 255.078001 101.646332) (xy 254.722282 101.793311) (xy 254.929026 101.586928) (xy 255.09631 101.184064) (xy 255.09669 100.747849)
+ (xy 254.93011 100.344694) (xy 254.621928 100.035974) (xy 254.219064 99.86869) (xy 253.82669 99.868348) (xy 253.82669 98.207849)
+ (xy 253.66011 97.804694) (xy 253.351928 97.495974) (xy 252.949064 97.32869) (xy 252.55669 97.328348) (xy 252.55669 91.857849)
+ (xy 252.39011 91.454694) (xy 252.081928 91.145974) (xy 251.679064 90.97869) (xy 251.28669 90.978348) (xy 251.28669 89.317849)
+ (xy 251.12011 88.914694) (xy 250.811928 88.605974) (xy 250.409064 88.43869) (xy 250.01669 88.438348) (xy 250.01669 82.967849)
+ (xy 249.85011 82.564694) (xy 249.541928 82.255974) (xy 249.139064 82.08869) (xy 248.74669 82.088348) (xy 248.74669 80.427849)
+ (xy 248.58011 80.024694) (xy 248.271928 79.715974) (xy 247.869064 79.54869) (xy 247.47669 79.548348) (xy 247.47669 74.077849)
+ (xy 247.31011 73.674694) (xy 247.001928 73.365974) (xy 246.599064 73.19869) (xy 246.20669 73.198348) (xy 246.20669 71.537849)
+ (xy 246.04011 71.134694) (xy 245.731928 70.825974) (xy 245.329064 70.65869) (xy 244.93669 70.658348) (xy 244.93669 65.187849)
+ (xy 244.77011 64.784694) (xy 244.461928 64.475974) (xy 244.059064 64.30869) (xy 243.66669 64.308348) (xy 243.66669 62.647849)
+ (xy 243.50011 62.244694) (xy 243.191928 61.935974) (xy 242.789064 61.76869) (xy 242.352849 61.76831) (xy 241.949694 61.93489)
+ (xy 241.640974 62.243072) (xy 241.47369 62.645936) (xy 241.47331 63.082151) (xy 241.63989 63.485306) (xy 241.948072 63.794026)
+ (xy 242.350936 63.96131) (xy 242.787151 63.96169) (xy 243.190306 63.79511) (xy 243.499026 63.486928) (xy 243.66631 63.084064)
+ (xy 243.66669 62.647849) (xy 243.66669 64.308348) (xy 243.622849 64.30831) (xy 243.219694 64.47489) (xy 242.910974 64.783072)
+ (xy 242.74369 65.185936) (xy 242.74331 65.622151) (xy 242.90989 66.025306) (xy 243.218072 66.334026) (xy 243.620936 66.50131)
+ (xy 244.057151 66.50169) (xy 244.460306 66.33511) (xy 244.769026 66.026928) (xy 244.93631 65.624064) (xy 244.93669 65.187849)
+ (xy 244.93669 70.658348) (xy 244.892849 70.65831) (xy 244.809668 70.692679) (xy 244.809668 67.372001) (xy 244.662382 67.01554)
+ (xy 244.389895 66.742577) (xy 244.033692 66.594668) (xy 243.648001 66.594332) (xy 243.29154 66.741618) (xy 243.018577 67.014105)
+ (xy 242.904746 67.288239) (xy 242.763692 67.229668) (xy 242.39669 67.229348) (xy 242.39669 65.187849) (xy 242.23011 64.784694)
+ (xy 241.921928 64.475974) (xy 241.519064 64.30869) (xy 241.12669 64.308348) (xy 241.12669 62.647849) (xy 240.96011 62.244694)
+ (xy 240.651928 61.935974) (xy 240.249064 61.76869) (xy 239.812849 61.76831) (xy 239.409694 61.93489) (xy 239.100974 62.243072)
+ (xy 238.93369 62.645936) (xy 238.93331 63.082151) (xy 239.09989 63.485306) (xy 239.408072 63.794026) (xy 239.810936 63.96131)
+ (xy 240.247151 63.96169) (xy 240.650306 63.79511) (xy 240.959026 63.486928) (xy 241.12631 63.084064) (xy 241.12669 62.647849)
+ (xy 241.12669 64.308348) (xy 241.082849 64.30831) (xy 240.679694 64.47489) (xy 240.370974 64.783072) (xy 240.20369 65.185936)
+ (xy 240.20331 65.622151) (xy 240.36989 66.025306) (xy 240.678072 66.334026) (xy 241.080936 66.50131) (xy 241.517151 66.50169)
+ (xy 241.920306 66.33511) (xy 242.229026 66.026928) (xy 242.39631 65.624064) (xy 242.39669 65.187849) (xy 242.39669 67.229348)
+ (xy 242.378001 67.229332) (xy 242.02154 67.376618) (xy 241.748577 67.649105) (xy 241.600668 68.005308) (xy 241.600332 68.390999)
+ (xy 241.747618 68.74746) (xy 242.020105 69.020423) (xy 242.376308 69.168332) (xy 242.761999 69.168668) (xy 243.11846 69.021382)
+ (xy 243.391423 68.748895) (xy 243.505253 68.47476) (xy 243.646308 68.533332) (xy 244.031999 68.533668) (xy 244.38846 68.386382)
+ (xy 244.661423 68.113895) (xy 244.809332 67.757692) (xy 244.809668 67.372001) (xy 244.809668 70.692679) (xy 244.489694 70.82489)
+ (xy 244.180974 71.133072) (xy 244.01369 71.535936) (xy 244.01331 71.972151) (xy 244.17989 72.375306) (xy 244.488072 72.684026)
+ (xy 244.890936 72.85131) (xy 245.327151 72.85169) (xy 245.730306 72.68511) (xy 246.039026 72.376928) (xy 246.20631 71.974064)
+ (xy 246.20669 71.537849) (xy 246.20669 73.198348) (xy 246.162849 73.19831) (xy 245.759694 73.36489) (xy 245.450974 73.673072)
+ (xy 245.28369 74.075936) (xy 245.28331 74.512151) (xy 245.44989 74.915306) (xy 245.758072 75.224026) (xy 246.160936 75.39131)
+ (xy 246.597151 75.39169) (xy 247.000306 75.22511) (xy 247.309026 74.916928) (xy 247.47631 74.514064) (xy 247.47669 74.077849)
+ (xy 247.47669 79.548348) (xy 247.432849 79.54831) (xy 247.029694 79.71489) (xy 246.720974 80.023072) (xy 246.55369 80.425936)
+ (xy 246.55331 80.862151) (xy 246.71989 81.265306) (xy 247.028072 81.574026) (xy 247.430936 81.74131) (xy 247.867151 81.74169)
+ (xy 248.270306 81.57511) (xy 248.579026 81.266928) (xy 248.74631 80.864064) (xy 248.74669 80.427849) (xy 248.74669 82.088348)
+ (xy 248.702849 82.08831) (xy 248.299694 82.25489) (xy 247.990974 82.563072) (xy 247.82369 82.965936) (xy 247.82331 83.402151)
+ (xy 247.98989 83.805306) (xy 248.298072 84.114026) (xy 248.700936 84.28131) (xy 249.137151 84.28169) (xy 249.540306 84.11511)
+ (xy 249.849026 83.806928) (xy 250.01631 83.404064) (xy 250.01669 82.967849) (xy 250.01669 88.438348) (xy 249.972849 88.43831)
+ (xy 249.569694 88.60489) (xy 249.260974 88.913072) (xy 249.09369 89.315936) (xy 249.09331 89.752151) (xy 249.25989 90.155306)
+ (xy 249.568072 90.464026) (xy 249.970936 90.63131) (xy 250.407151 90.63169) (xy 250.810306 90.46511) (xy 251.119026 90.156928)
+ (xy 251.28631 89.754064) (xy 251.28669 89.317849) (xy 251.28669 90.978348) (xy 251.242849 90.97831) (xy 250.839694 91.14489)
+ (xy 250.530974 91.453072) (xy 250.36369 91.855936) (xy 250.36331 92.292151) (xy 250.52989 92.695306) (xy 250.838072 93.004026)
+ (xy 251.240936 93.17131) (xy 251.677151 93.17169) (xy 252.080306 93.00511) (xy 252.389026 92.696928) (xy 252.55631 92.294064)
+ (xy 252.55669 91.857849) (xy 252.55669 97.328348) (xy 252.512849 97.32831) (xy 252.109694 97.49489) (xy 251.800974 97.803072)
+ (xy 251.63369 98.205936) (xy 251.63331 98.642151) (xy 251.79989 99.045306) (xy 252.108072 99.354026) (xy 252.510936 99.52131)
+ (xy 252.947151 99.52169) (xy 253.350306 99.35511) (xy 253.659026 99.046928) (xy 253.82631 98.644064) (xy 253.82669 98.207849)
+ (xy 253.82669 99.868348) (xy 253.782849 99.86831) (xy 253.379694 100.03489) (xy 253.070974 100.343072) (xy 252.90369 100.745936)
+ (xy 252.90331 101.182151) (xy 253.06989 101.585306) (xy 253.278018 101.793797) (xy 252.923692 101.646668) (xy 252.538001 101.646332)
+ (xy 252.182282 101.793311) (xy 252.389026 101.586928) (xy 252.55631 101.184064) (xy 252.55669 100.747849) (xy 252.39011 100.344694)
+ (xy 252.081928 100.035974) (xy 251.679064 99.86869) (xy 251.28669 99.868348) (xy 251.28669 98.207849) (xy 251.12011 97.804694)
+ (xy 250.811928 97.495974) (xy 250.409064 97.32869) (xy 250.01669 97.328348) (xy 250.01669 91.857849) (xy 249.85011 91.454694)
+ (xy 249.541928 91.145974) (xy 249.139064 90.97869) (xy 248.74669 90.978348) (xy 248.74669 89.317849) (xy 248.58011 88.914694)
+ (xy 248.271928 88.605974) (xy 247.869064 88.43869) (xy 247.47669 88.438348) (xy 247.47669 82.967849) (xy 247.31011 82.564694)
+ (xy 247.001928 82.255974) (xy 246.599064 82.08869) (xy 246.20669 82.088348) (xy 246.20669 80.427849) (xy 246.04011 80.024694)
+ (xy 245.731928 79.715974) (xy 245.329064 79.54869) (xy 244.93669 79.548348) (xy 244.93669 74.077849) (xy 244.77011 73.674694)
+ (xy 244.461928 73.365974) (xy 244.059064 73.19869) (xy 243.66669 73.198348) (xy 243.66669 71.537849) (xy 243.50011 71.134694)
+ (xy 243.191928 70.825974) (xy 242.789064 70.65869) (xy 242.352849 70.65831) (xy 241.949694 70.82489) (xy 241.640974 71.133072)
+ (xy 241.47369 71.535936) (xy 241.47331 71.972151) (xy 241.63989 72.375306) (xy 241.948072 72.684026) (xy 242.350936 72.85131)
+ (xy 242.787151 72.85169) (xy 243.190306 72.68511) (xy 243.499026 72.376928) (xy 243.66631 71.974064) (xy 243.66669 71.537849)
+ (xy 243.66669 73.198348) (xy 243.622849 73.19831) (xy 243.219694 73.36489) (xy 242.910974 73.673072) (xy 242.74369 74.075936)
+ (xy 242.74331 74.512151) (xy 242.90989 74.915306) (xy 243.218072 75.224026) (xy 243.620936 75.39131) (xy 244.057151 75.39169)
+ (xy 244.460306 75.22511) (xy 244.769026 74.916928) (xy 244.93631 74.514064) (xy 244.93669 74.077849) (xy 244.93669 79.548348)
+ (xy 244.892849 79.54831) (xy 244.489694 79.71489) (xy 244.180974 80.023072) (xy 244.01369 80.425936) (xy 244.01331 80.862151)
+ (xy 244.17989 81.265306) (xy 244.488072 81.574026) (xy 244.890936 81.74131) (xy 245.327151 81.74169) (xy 245.730306 81.57511)
+ (xy 246.039026 81.266928) (xy 246.20631 80.864064) (xy 246.20669 80.427849) (xy 246.20669 82.088348) (xy 246.162849 82.08831)
+ (xy 245.759694 82.25489) (xy 245.450974 82.563072) (xy 245.28369 82.965936) (xy 245.28331 83.402151) (xy 245.44989 83.805306)
+ (xy 245.758072 84.114026) (xy 246.160936 84.28131) (xy 246.597151 84.28169) (xy 247.000306 84.11511) (xy 247.309026 83.806928)
+ (xy 247.47631 83.404064) (xy 247.47669 82.967849) (xy 247.47669 88.438348) (xy 247.432849 88.43831) (xy 247.029694 88.60489)
+ (xy 246.720974 88.913072) (xy 246.55369 89.315936) (xy 246.55331 89.752151) (xy 246.71989 90.155306) (xy 247.028072 90.464026)
+ (xy 247.430936 90.63131) (xy 247.867151 90.63169) (xy 248.270306 90.46511) (xy 248.579026 90.156928) (xy 248.74631 89.754064)
+ (xy 248.74669 89.317849) (xy 248.74669 90.978348) (xy 248.702849 90.97831) (xy 248.299694 91.14489) (xy 247.990974 91.453072)
+ (xy 247.82369 91.855936) (xy 247.82331 92.292151) (xy 247.98989 92.695306) (xy 248.298072 93.004026) (xy 248.700936 93.17131)
+ (xy 249.137151 93.17169) (xy 249.540306 93.00511) (xy 249.849026 92.696928) (xy 250.01631 92.294064) (xy 250.01669 91.857849)
+ (xy 250.01669 97.328348) (xy 249.972849 97.32831) (xy 249.569694 97.49489) (xy 249.260974 97.803072) (xy 249.09369 98.205936)
+ (xy 249.09331 98.642151) (xy 249.25989 99.045306) (xy 249.568072 99.354026) (xy 249.970936 99.52131) (xy 250.407151 99.52169)
+ (xy 250.810306 99.35511) (xy 251.119026 99.046928) (xy 251.28631 98.644064) (xy 251.28669 98.207849) (xy 251.28669 99.868348)
+ (xy 251.242849 99.86831) (xy 250.839694 100.03489) (xy 250.530974 100.343072) (xy 250.36369 100.745936) (xy 250.36331 101.182151)
+ (xy 250.52743 101.579353) (xy 250.383692 101.519668) (xy 249.998001 101.519332) (xy 249.852053 101.579635) (xy 250.01631 101.184064)
+ (xy 250.01669 100.747849) (xy 249.85011 100.344694) (xy 249.541928 100.035974) (xy 249.139064 99.86869) (xy 248.74669 99.868348)
+ (xy 248.74669 98.207849) (xy 248.58011 97.804694) (xy 248.271928 97.495974) (xy 247.869064 97.32869) (xy 247.47669 97.328348)
+ (xy 247.47669 91.857849) (xy 247.31011 91.454694) (xy 247.001928 91.145974) (xy 246.599064 90.97869) (xy 246.20669 90.978348)
+ (xy 246.20669 89.317849) (xy 246.04011 88.914694) (xy 245.731928 88.605974) (xy 245.329064 88.43869) (xy 244.93669 88.438348)
+ (xy 244.93669 82.967849) (xy 244.77011 82.564694) (xy 244.461928 82.255974) (xy 244.059064 82.08869) (xy 243.66669 82.088348)
+ (xy 243.66669 80.427849) (xy 243.50011 80.024694) (xy 243.191928 79.715974) (xy 242.789064 79.54869) (xy 242.39669 79.548348)
+ (xy 242.39669 74.077849) (xy 242.23011 73.674694) (xy 241.921928 73.365974) (xy 241.519064 73.19869) (xy 241.12669 73.198348)
+ (xy 241.12669 71.537849) (xy 240.96011 71.134694) (xy 240.651928 70.825974) (xy 240.249064 70.65869) (xy 239.85669 70.658348)
+ (xy 239.85669 65.187849) (xy 239.69011 64.784694) (xy 239.381928 64.475974) (xy 238.979064 64.30869) (xy 238.542849 64.30831)
+ (xy 238.204478 64.448121) (xy 238.058382 64.09454) (xy 237.861924 63.897739) (xy 238.110306 63.79511) (xy 238.419026 63.486928)
+ (xy 238.58631 63.084064) (xy 238.58669 62.647849) (xy 238.42011 62.244694) (xy 238.111928 61.935974) (xy 237.709064 61.76869)
+ (xy 237.272849 61.76831) (xy 236.869694 61.93489) (xy 236.560974 62.243072) (xy 236.39369 62.645936) (xy 236.39331 63.082151)
+ (xy 236.55989 63.485306) (xy 236.834146 63.760041) (xy 236.68754 63.820618) (xy 236.414577 64.093105) (xy 236.36393 64.215074)
+ (xy 236.364355 63.729217) (xy 236.05307 62.975851) (xy 235.477181 62.398955) (xy 234.724359 62.086357) (xy 233.909217 62.085645)
+ (xy 233.155851 62.39693) (xy 232.598935 62.952873) (xy 232.451895 62.805577) (xy 232.095692 62.657668) (xy 231.710001 62.657332)
+ (xy 231.35354 62.804618) (xy 231.080577 63.077105) (xy 230.96669 63.351374) (xy 230.96669 62.647849) (xy 230.80011 62.244694)
+ (xy 230.491928 61.935974) (xy 230.089064 61.76869) (xy 229.652849 61.76831) (xy 229.249694 61.93489) (xy 228.940974 62.243072)
+ (xy 228.77369 62.645936) (xy 228.77331 63.082151) (xy 228.93989 63.485306) (xy 229.248072 63.794026) (xy 229.650936 63.96131)
+ (xy 230.087151 63.96169) (xy 230.490306 63.79511) (xy 230.799026 63.486928) (xy 230.96631 63.084064) (xy 230.96669 62.647849)
+ (xy 230.96669 63.351374) (xy 230.932668 63.433308) (xy 230.932332 63.818999) (xy 231.079618 64.17546) (xy 231.212488 64.308562)
+ (xy 230.922849 64.30831) (xy 230.519694 64.47489) (xy 230.210974 64.783072) (xy 230.04369 65.185936) (xy 230.04331 65.622151)
+ (xy 230.20989 66.025306) (xy 230.518072 66.334026) (xy 230.920936 66.50131) (xy 231.357151 66.50169) (xy 231.760306 66.33511)
+ (xy 232.069026 66.026928) (xy 232.23631 65.624064) (xy 232.23669 65.187849) (xy 232.07011 64.784694) (xy 231.882227 64.596483)
+ (xy 232.093999 64.596668) (xy 232.265658 64.52574) (xy 232.265645 64.540783) (xy 232.57693 65.294149) (xy 233.152819 65.871045)
+ (xy 233.905641 66.183643) (xy 234.720783 66.184355) (xy 235.474149 65.87307) (xy 236.051045 65.297181) (xy 236.266381 64.778592)
+ (xy 236.266332 64.834999) (xy 236.413618 65.19146) (xy 236.686105 65.464423) (xy 237.042308 65.612332) (xy 237.427999 65.612668)
+ (xy 237.663402 65.515401) (xy 237.66331 65.622151) (xy 237.82989 66.025306) (xy 238.138072 66.334026) (xy 238.540936 66.50131)
+ (xy 238.977151 66.50169) (xy 239.380306 66.33511) (xy 239.689026 66.026928) (xy 239.85631 65.624064) (xy 239.85669 65.187849)
+ (xy 239.85669 70.658348) (xy 239.812849 70.65831) (xy 239.409694 70.82489) (xy 239.100974 71.133072) (xy 238.93369 71.535936)
+ (xy 238.93331 71.972151) (xy 239.09989 72.375306) (xy 239.408072 72.684026) (xy 239.810936 72.85131) (xy 240.247151 72.85169)
+ (xy 240.650306 72.68511) (xy 240.959026 72.376928) (xy 241.12631 71.974064) (xy 241.12669 71.537849) (xy 241.12669 73.198348)
+ (xy 241.082849 73.19831) (xy 240.679694 73.36489) (xy 240.370974 73.673072) (xy 240.20369 74.075936) (xy 240.20331 74.512151)
+ (xy 240.36989 74.915306) (xy 240.678072 75.224026) (xy 241.080936 75.39131) (xy 241.517151 75.39169) (xy 241.920306 75.22511)
+ (xy 242.229026 74.916928) (xy 242.39631 74.514064) (xy 242.39669 74.077849) (xy 242.39669 79.548348) (xy 242.352849 79.54831)
+ (xy 241.949694 79.71489) (xy 241.640974 80.023072) (xy 241.47369 80.425936) (xy 241.47331 80.862151) (xy 241.63989 81.265306)
+ (xy 241.948072 81.574026) (xy 242.350936 81.74131) (xy 242.787151 81.74169) (xy 243.190306 81.57511) (xy 243.499026 81.266928)
+ (xy 243.66631 80.864064) (xy 243.66669 80.427849) (xy 243.66669 82.088348) (xy 243.622849 82.08831) (xy 243.219694 82.25489)
+ (xy 242.910974 82.563072) (xy 242.74369 82.965936) (xy 242.74331 83.402151) (xy 242.90989 83.805306) (xy 243.218072 84.114026)
+ (xy 243.620936 84.28131) (xy 244.057151 84.28169) (xy 244.460306 84.11511) (xy 244.769026 83.806928) (xy 244.93631 83.404064)
+ (xy 244.93669 82.967849) (xy 244.93669 88.438348) (xy 244.892849 88.43831) (xy 244.489694 88.60489) (xy 244.180974 88.913072)
+ (xy 244.01369 89.315936) (xy 244.01331 89.752151) (xy 244.17989 90.155306) (xy 244.488072 90.464026) (xy 244.890936 90.63131)
+ (xy 245.327151 90.63169) (xy 245.730306 90.46511) (xy 246.039026 90.156928) (xy 246.20631 89.754064) (xy 246.20669 89.317849)
+ (xy 246.20669 90.978348) (xy 246.162849 90.97831) (xy 245.759694 91.14489) (xy 245.450974 91.453072) (xy 245.28369 91.855936)
+ (xy 245.28331 92.292151) (xy 245.44989 92.695306) (xy 245.758072 93.004026) (xy 246.160936 93.17131) (xy 246.597151 93.17169)
+ (xy 247.000306 93.00511) (xy 247.309026 92.696928) (xy 247.47631 92.294064) (xy 247.47669 91.857849) (xy 247.47669 97.328348)
+ (xy 247.432849 97.32831) (xy 247.029694 97.49489) (xy 246.720974 97.803072) (xy 246.55369 98.205936) (xy 246.55331 98.642151)
+ (xy 246.71989 99.045306) (xy 247.028072 99.354026) (xy 247.430936 99.52131) (xy 247.867151 99.52169) (xy 248.270306 99.35511)
+ (xy 248.579026 99.046928) (xy 248.74631 98.644064) (xy 248.74669 98.207849) (xy 248.74669 99.868348) (xy 248.702849 99.86831)
+ (xy 248.299694 100.03489) (xy 247.990974 100.343072) (xy 247.82369 100.745936) (xy 247.82331 101.182151) (xy 247.98989 101.585306)
+ (xy 248.298072 101.894026) (xy 248.700936 102.06131) (xy 249.137151 102.06169) (xy 249.355062 101.97165) (xy 249.220668 102.295308)
+ (xy 249.220332 102.680999) (xy 249.367618 103.03746) (xy 249.640105 103.310423) (xy 249.996308 103.458332) (xy 250.381999 103.458668)
+ (xy 250.73846 103.311382) (xy 251.011423 103.038895) (xy 251.159332 102.682692) (xy 251.159668 102.297001) (xy 251.025282 101.971762)
+ (xy 251.240936 102.06131) (xy 251.677151 102.06169) (xy 252.079563 101.895416) (xy 251.908577 102.066105) (xy 251.760668 102.422308)
+ (xy 251.760332 102.807999) (xy 251.907618 103.16446) (xy 252.180105 103.437423) (xy 252.536308 103.585332) (xy 252.921999 103.585668)
+ (xy 253.27846 103.438382) (xy 253.551423 103.165895) (xy 253.699332 102.809692) (xy 253.699668 102.424001) (xy 253.552382 102.06754)
+ (xy 253.379948 101.894805) (xy 253.780936 102.06131) (xy 254.217151 102.06169) (xy 254.619563 101.895416) (xy 254.448577 102.066105)
+ (xy 254.300668 102.422308) (xy 254.300332 102.807999) (xy 254.447618 103.16446) (xy 254.720105 103.437423) (xy 255.076308 103.585332)
+ (xy 255.461999 103.585668) (xy 255.81846 103.438382) (xy 256.091423 103.165895) (xy 256.239332 102.809692) (xy 256.239668 102.424001)
+ (xy 256.092382 102.06754) (xy 255.919948 101.894805) (xy 256.320936 102.06131) (xy 256.757151 102.06169) (xy 257.159563 101.895416)
+ (xy 256.988577 102.066105) (xy 256.840668 102.422308) (xy 256.840332 102.807999) (xy 256.987618 103.16446) (xy 257.260105 103.437423)
+ (xy 257.616308 103.585332) (xy 258.001999 103.585668) (xy 258.35846 103.438382) (xy 258.631423 103.165895) (xy 258.779332 102.809692)
+ (xy 258.779668 102.424001) (xy 258.632382 102.06754) (xy 258.459948 101.894805) (xy 258.860936 102.06131) (xy 259.297151 102.06169)
+ (xy 259.700306 101.89511) (xy 260.009026 101.586928) (xy 260.17631 101.184064) (xy 260.17669 100.747849) (xy 260.17669 106.218348)
+ (xy 260.132849 106.21831) (xy 259.729694 106.38489) (xy 259.420974 106.693072) (xy 259.25369 107.095936) (xy 259.25331 107.532151)
+ (xy 259.41989 107.935306) (xy 259.728072 108.244026) (xy 260.130936 108.41131) (xy 260.567151 108.41169) (xy 260.970306 108.24511)
+ (xy 261.279026 107.936928) (xy 261.44631 107.534064) (xy 261.44669 107.097849) (xy 261.44669 108.758348) (xy 261.402849 108.75831)
+ (xy 260.999694 108.92489) (xy 260.690974 109.233072) (xy 260.52369 109.635936) (xy 260.52331 110.072151) (xy 260.68989 110.475306)
+ (xy 260.998072 110.784026) (xy 261.400936 110.95131) (xy 261.837151 110.95169) (xy 262.240306 110.78511) (xy 262.549026 110.476928)
+ (xy 262.71631 110.074064) (xy 262.71669 109.637849) (xy 262.71669 115.108348) (xy 262.672849 115.10831) (xy 262.269694 115.27489)
+ (xy 261.960974 115.583072) (xy 261.79369 115.985936) (xy 261.79331 116.422151) (xy 261.95989 116.825306) (xy 262.268072 117.134026)
+ (xy 262.670936 117.30131) (xy 263.107151 117.30169) (xy 263.510306 117.13511) (xy 263.819026 116.826928) (xy 263.98631 116.424064)
+ (xy 263.98669 115.987849) (xy 263.98669 117.648348) (xy 263.942849 117.64831) (xy 263.539694 117.81489) (xy 263.230974 118.123072)
+ (xy 263.06369 118.525936) (xy 263.06331 118.962151) (xy 263.22989 119.365306) (xy 263.538072 119.674026) (xy 263.940936 119.84131)
+ (xy 264.377151 119.84169) (xy 264.780306 119.67511) (xy 265.089026 119.366928) (xy 265.25631 118.964064) (xy 265.25669 118.527849)
+ (xy 265.25669 123.998348) (xy 265.212849 123.99831) (xy 264.809694 124.16489) (xy 264.500974 124.473072) (xy 264.33369 124.875936)
+ (xy 264.33331 125.312151) (xy 264.49989 125.715306) (xy 264.808072 126.024026) (xy 265.210936 126.19131) (xy 265.647151 126.19169)
+ (xy 266.050306 126.02511) (xy 266.359026 125.716928) (xy 266.52631 125.314064) (xy 266.52669 124.877849) (xy 266.52669 126.538348)
+ (xy 266.482849 126.53831) (xy 266.079694 126.70489) (xy 265.770974 127.013072) (xy 265.60369 127.415936) (xy 265.60331 127.852151)
+ (xy 265.76989 128.255306) (xy 266.078072 128.564026) (xy 266.480936 128.73131) (xy 266.917151 128.73169) (xy 267.320306 128.56511)
+ (xy 267.629026 128.256928) (xy 267.79631 127.854064) (xy 267.79669 127.417849) (xy 267.79669 133.7394) (xy 265.25669 133.7394)
+ (xy 265.25669 127.417849) (xy 265.09011 127.014694) (xy 264.781928 126.705974) (xy 264.379064 126.53869) (xy 263.98669 126.538348)
+ (xy 263.98669 124.877849) (xy 263.82011 124.474694) (xy 263.511928 124.165974) (xy 263.109064 123.99869) (xy 262.71669 123.998348)
+ (xy 262.71669 118.527849) (xy 262.55011 118.124694) (xy 262.241928 117.815974) (xy 261.839064 117.64869) (xy 261.44669 117.648348)
+ (xy 261.44669 115.987849) (xy 261.28011 115.584694) (xy 260.971928 115.275974) (xy 260.569064 115.10869) (xy 260.17669 115.108348)
+ (xy 260.17669 109.637849) (xy 260.01011 109.234694) (xy 259.701928 108.925974) (xy 259.299064 108.75869) (xy 258.90669 108.758348)
+ (xy 258.90669 107.097849) (xy 258.74011 106.694694) (xy 258.431928 106.385974) (xy 258.029064 106.21869) (xy 257.592849 106.21831)
+ (xy 257.189694 106.38489) (xy 256.880974 106.693072) (xy 256.71369 107.095936) (xy 256.71331 107.532151) (xy 256.87989 107.935306)
+ (xy 257.188072 108.244026) (xy 257.590936 108.41131) (xy 258.027151 108.41169) (xy 258.430306 108.24511) (xy 258.739026 107.936928)
+ (xy 258.90631 107.534064) (xy 258.90669 107.097849) (xy 258.90669 108.758348) (xy 258.862849 108.75831) (xy 258.459694 108.92489)
+ (xy 258.150974 109.233072) (xy 257.98369 109.635936) (xy 257.98331 110.072151) (xy 258.14989 110.475306) (xy 258.458072 110.784026)
+ (xy 258.860936 110.95131) (xy 259.297151 110.95169) (xy 259.700306 110.78511) (xy 260.009026 110.476928) (xy 260.17631 110.074064)
+ (xy 260.17669 109.637849) (xy 260.17669 115.108348) (xy 260.132849 115.10831) (xy 259.729694 115.27489) (xy 259.420974 115.583072)
+ (xy 259.25369 115.985936) (xy 259.25331 116.422151) (xy 259.41989 116.825306) (xy 259.728072 117.134026) (xy 260.130936 117.30131)
+ (xy 260.567151 117.30169) (xy 260.970306 117.13511) (xy 261.279026 116.826928) (xy 261.44631 116.424064) (xy 261.44669 115.987849)
+ (xy 261.44669 117.648348) (xy 261.402849 117.64831) (xy 260.999694 117.81489) (xy 260.690974 118.123072) (xy 260.52369 118.525936)
+ (xy 260.52331 118.962151) (xy 260.68989 119.365306) (xy 260.998072 119.674026) (xy 261.400936 119.84131) (xy 261.837151 119.84169)
+ (xy 262.240306 119.67511) (xy 262.549026 119.366928) (xy 262.71631 118.964064) (xy 262.71669 118.527849) (xy 262.71669 123.998348)
+ (xy 262.672849 123.99831) (xy 262.269694 124.16489) (xy 261.960974 124.473072) (xy 261.79369 124.875936) (xy 261.79331 125.312151)
+ (xy 261.95989 125.715306) (xy 262.268072 126.024026) (xy 262.670936 126.19131) (xy 263.107151 126.19169) (xy 263.510306 126.02511)
+ (xy 263.819026 125.716928) (xy 263.98631 125.314064) (xy 263.98669 124.877849) (xy 263.98669 126.538348) (xy 263.942849 126.53831)
+ (xy 263.539694 126.70489) (xy 263.230974 127.013072) (xy 263.06369 127.415936) (xy 263.06331 127.852151) (xy 263.22989 128.255306)
+ (xy 263.538072 128.564026) (xy 263.940936 128.73131) (xy 264.377151 128.73169) (xy 264.780306 128.56511) (xy 265.089026 128.256928)
+ (xy 265.25631 127.854064) (xy 265.25669 127.417849) (xy 265.25669 133.7394) (xy 262.71669 133.7394) (xy 262.71669 127.417849)
+ (xy 262.55011 127.014694) (xy 262.241928 126.705974) (xy 261.839064 126.53869) (xy 261.44669 126.538348) (xy 261.44669 124.877849)
+ (xy 261.28011 124.474694) (xy 260.971928 124.165974) (xy 260.569064 123.99869) (xy 260.17669 123.998348) (xy 260.17669 118.527849)
+ (xy 260.01011 118.124694) (xy 259.701928 117.815974) (xy 259.299064 117.64869) (xy 258.90669 117.648348) (xy 258.90669 115.987849)
+ (xy 258.74011 115.584694) (xy 258.431928 115.275974) (xy 258.029064 115.10869) (xy 257.63669 115.108348) (xy 257.63669 109.637849)
+ (xy 257.47011 109.234694) (xy 257.161928 108.925974) (xy 256.759064 108.75869) (xy 256.36669 108.758348) (xy 256.36669 107.097849)
+ (xy 256.20011 106.694694) (xy 255.891928 106.385974) (xy 255.489064 106.21869) (xy 255.052849 106.21831) (xy 254.649694 106.38489)
+ (xy 254.340974 106.693072) (xy 254.17369 107.095936) (xy 254.17331 107.532151) (xy 254.33989 107.935306) (xy 254.648072 108.244026)
+ (xy 255.050936 108.41131) (xy 255.487151 108.41169) (xy 255.890306 108.24511) (xy 256.199026 107.936928) (xy 256.36631 107.534064)
+ (xy 256.36669 107.097849) (xy 256.36669 108.758348) (xy 256.322849 108.75831) (xy 255.919694 108.92489) (xy 255.610974 109.233072)
+ (xy 255.44369 109.635936) (xy 255.44331 110.072151) (xy 255.60989 110.475306) (xy 255.918072 110.784026) (xy 256.320936 110.95131)
+ (xy 256.757151 110.95169) (xy 257.160306 110.78511) (xy 257.469026 110.476928) (xy 257.63631 110.074064) (xy 257.63669 109.637849)
+ (xy 257.63669 115.108348) (xy 257.592849 115.10831) (xy 257.189694 115.27489) (xy 256.880974 115.583072) (xy 256.71369 115.985936)
+ (xy 256.71331 116.422151) (xy 256.87989 116.825306) (xy 257.188072 117.134026) (xy 257.590936 117.30131) (xy 258.027151 117.30169)
+ (xy 258.430306 117.13511) (xy 258.739026 116.826928) (xy 258.90631 116.424064) (xy 258.90669 115.987849) (xy 258.90669 117.648348)
+ (xy 258.862849 117.64831) (xy 258.459694 117.81489) (xy 258.150974 118.123072) (xy 257.98369 118.525936) (xy 257.98331 118.962151)
+ (xy 258.14989 119.365306) (xy 258.458072 119.674026) (xy 258.860936 119.84131) (xy 259.297151 119.84169) (xy 259.700306 119.67511)
+ (xy 260.009026 119.366928) (xy 260.17631 118.964064) (xy 260.17669 118.527849) (xy 260.17669 123.998348) (xy 260.132849 123.99831)
+ (xy 259.729694 124.16489) (xy 259.420974 124.473072) (xy 259.25369 124.875936) (xy 259.25331 125.312151) (xy 259.41989 125.715306)
+ (xy 259.728072 126.024026) (xy 260.130936 126.19131) (xy 260.567151 126.19169) (xy 260.970306 126.02511) (xy 261.279026 125.716928)
+ (xy 261.44631 125.314064) (xy 261.44669 124.877849) (xy 261.44669 126.538348) (xy 261.402849 126.53831) (xy 260.999694 126.70489)
+ (xy 260.690974 127.013072) (xy 260.52369 127.415936) (xy 260.52331 127.852151) (xy 260.68989 128.255306) (xy 260.998072 128.564026)
+ (xy 261.400936 128.73131) (xy 261.837151 128.73169) (xy 262.240306 128.56511) (xy 262.549026 128.256928) (xy 262.71631 127.854064)
+ (xy 262.71669 127.417849) (xy 262.71669 133.7394) (xy 260.17669 133.7394) (xy 260.17669 127.417849) (xy 260.01011 127.014694)
+ (xy 259.701928 126.705974) (xy 259.299064 126.53869) (xy 258.90669 126.538348) (xy 258.90669 124.877849) (xy 258.74011 124.474694)
+ (xy 258.431928 124.165974) (xy 258.029064 123.99869) (xy 257.63669 123.998348) (xy 257.63669 118.527849) (xy 257.47011 118.124694)
+ (xy 257.161928 117.815974) (xy 256.759064 117.64869) (xy 256.36669 117.648348) (xy 256.36669 115.987849) (xy 256.20011 115.584694)
+ (xy 255.891928 115.275974) (xy 255.489064 115.10869) (xy 255.09669 115.108348) (xy 255.09669 109.637849) (xy 254.93011 109.234694)
+ (xy 254.621928 108.925974) (xy 254.219064 108.75869) (xy 253.82669 108.758348) (xy 253.82669 107.097849) (xy 253.66011 106.694694)
+ (xy 253.351928 106.385974) (xy 252.949064 106.21869) (xy 252.512849 106.21831) (xy 252.109694 106.38489) (xy 251.800974 106.693072)
+ (xy 251.63369 107.095936) (xy 251.63331 107.532151) (xy 251.79989 107.935306) (xy 252.108072 108.244026) (xy 252.510936 108.41131)
+ (xy 252.947151 108.41169) (xy 253.350306 108.24511) (xy 253.659026 107.936928) (xy 253.82631 107.534064) (xy 253.82669 107.097849)
+ (xy 253.82669 108.758348) (xy 253.782849 108.75831) (xy 253.379694 108.92489) (xy 253.070974 109.233072) (xy 252.90369 109.635936)
+ (xy 252.90331 110.072151) (xy 253.06989 110.475306) (xy 253.378072 110.784026) (xy 253.780936 110.95131) (xy 254.217151 110.95169)
+ (xy 254.620306 110.78511) (xy 254.929026 110.476928) (xy 255.09631 110.074064) (xy 255.09669 109.637849) (xy 255.09669 115.108348)
+ (xy 255.052849 115.10831) (xy 254.649694 115.27489) (xy 254.340974 115.583072) (xy 254.17369 115.985936) (xy 254.17331 116.422151)
+ (xy 254.33989 116.825306) (xy 254.648072 117.134026) (xy 255.050936 117.30131) (xy 255.487151 117.30169) (xy 255.890306 117.13511)
+ (xy 256.199026 116.826928) (xy 256.36631 116.424064) (xy 256.36669 115.987849) (xy 256.36669 117.648348) (xy 256.322849 117.64831)
+ (xy 255.919694 117.81489) (xy 255.610974 118.123072) (xy 255.44369 118.525936) (xy 255.44331 118.962151) (xy 255.60989 119.365306)
+ (xy 255.918072 119.674026) (xy 256.320936 119.84131) (xy 256.757151 119.84169) (xy 257.160306 119.67511) (xy 257.469026 119.366928)
+ (xy 257.63631 118.964064) (xy 257.63669 118.527849) (xy 257.63669 123.998348) (xy 257.592849 123.99831) (xy 257.374937 124.088349)
+ (xy 257.509332 123.764692) (xy 257.509668 123.379001) (xy 257.362382 123.02254) (xy 257.089895 122.749577) (xy 256.733692 122.601668)
+ (xy 256.348001 122.601332) (xy 255.99154 122.748618) (xy 255.718577 123.021105) (xy 255.570668 123.377308) (xy 255.570332 123.762999)
+ (xy 255.704717 124.088237) (xy 255.489064 123.99869) (xy 255.09669 123.998348) (xy 255.09669 118.527849) (xy 254.93011 118.124694)
+ (xy 254.621928 117.815974) (xy 254.219064 117.64869) (xy 253.82669 117.648348) (xy 253.82669 115.987849) (xy 253.66011 115.584694)
+ (xy 253.351928 115.275974) (xy 252.949064 115.10869) (xy 252.55669 115.108348) (xy 252.55669 109.637849) (xy 252.39011 109.234694)
+ (xy 252.081928 108.925974) (xy 251.679064 108.75869) (xy 251.28669 108.758348) (xy 251.28669 107.097849) (xy 251.12011 106.694694)
+ (xy 250.811928 106.385974) (xy 250.409064 106.21869) (xy 249.972849 106.21831) (xy 249.569694 106.38489) (xy 249.260974 106.693072)
+ (xy 249.09369 107.095936) (xy 249.09331 107.532151) (xy 249.25989 107.935306) (xy 249.568072 108.244026) (xy 249.970936 108.41131)
+ (xy 250.407151 108.41169) (xy 250.810306 108.24511) (xy 251.119026 107.936928) (xy 251.28631 107.534064) (xy 251.28669 107.097849)
+ (xy 251.28669 108.758348) (xy 251.242849 108.75831) (xy 250.839694 108.92489) (xy 250.530974 109.233072) (xy 250.36369 109.635936)
+ (xy 250.36331 110.072151) (xy 250.52989 110.475306) (xy 250.838072 110.784026) (xy 251.240936 110.95131) (xy 251.677151 110.95169)
+ (xy 252.080306 110.78511) (xy 252.389026 110.476928) (xy 252.55631 110.074064) (xy 252.55669 109.637849) (xy 252.55669 115.108348)
+ (xy 252.512849 115.10831) (xy 252.109694 115.27489) (xy 251.800974 115.583072) (xy 251.63369 115.985936) (xy 251.63331 116.422151)
+ (xy 251.79989 116.825306) (xy 252.108072 117.134026) (xy 252.510936 117.30131) (xy 252.947151 117.30169) (xy 253.350306 117.13511)
+ (xy 253.659026 116.826928) (xy 253.82631 116.424064) (xy 253.82669 115.987849) (xy 253.82669 117.648348) (xy 253.782849 117.64831)
+ (xy 253.379694 117.81489) (xy 253.070974 118.123072) (xy 252.90369 118.525936) (xy 252.90331 118.962151) (xy 253.06989 119.365306)
+ (xy 253.378072 119.674026) (xy 253.780936 119.84131) (xy 254.217151 119.84169) (xy 254.620306 119.67511) (xy 254.929026 119.366928)
+ (xy 255.09631 118.964064) (xy 255.09669 118.527849) (xy 255.09669 123.998348) (xy 255.052849 123.99831) (xy 254.969668 124.032679)
+ (xy 254.969668 122.363001) (xy 254.822382 122.00654) (xy 254.549895 121.733577) (xy 254.193692 121.585668) (xy 253.808001 121.585332)
+ (xy 253.45154 121.732618) (xy 253.178577 122.005105) (xy 253.030668 122.361308) (xy 253.030332 122.746999) (xy 253.177618 123.10346)
+ (xy 253.450105 123.376423) (xy 253.806308 123.524332) (xy 254.191999 123.524668) (xy 254.54846 123.377382) (xy 254.821423 123.104895)
+ (xy 254.969332 122.748692) (xy 254.969668 122.363001) (xy 254.969668 124.032679) (xy 254.649694 124.16489) (xy 254.340974 124.473072)
+ (xy 254.17369 124.875936) (xy 254.17331 125.312151) (xy 254.33989 125.715306) (xy 254.648072 126.024026) (xy 255.050936 126.19131)
+ (xy 255.487151 126.19169) (xy 255.890306 126.02511) (xy 256.199026 125.716928) (xy 256.36631 125.314064) (xy 256.36669 124.877849)
+ (xy 256.202569 124.480646) (xy 256.346308 124.540332) (xy 256.731999 124.540668) (xy 256.877946 124.480364) (xy 256.71369 124.875936)
+ (xy 256.71331 125.312151) (xy 256.87989 125.715306) (xy 257.188072 126.024026) (xy 257.590936 126.19131) (xy 258.027151 126.19169)
+ (xy 258.430306 126.02511) (xy 258.739026 125.716928) (xy 258.90631 125.314064) (xy 258.90669 124.877849) (xy 258.90669 126.538348)
+ (xy 258.862849 126.53831) (xy 258.459694 126.70489) (xy 258.150974 127.013072) (xy 257.98369 127.415936) (xy 257.98331 127.852151)
+ (xy 258.14989 128.255306) (xy 258.458072 128.564026) (xy 258.860936 128.73131) (xy 259.297151 128.73169) (xy 259.700306 128.56511)
+ (xy 260.009026 128.256928) (xy 260.17631 127.854064) (xy 260.17669 127.417849) (xy 260.17669 133.7394) (xy 257.63669 133.7394)
+ (xy 257.63669 127.417849) (xy 257.47011 127.014694) (xy 257.161928 126.705974) (xy 256.759064 126.53869) (xy 256.322849 126.53831)
+ (xy 255.919694 126.70489) (xy 255.610974 127.013072) (xy 255.44369 127.415936) (xy 255.44331 127.852151) (xy 255.60989 128.255306)
+ (xy 255.918072 128.564026) (xy 256.320936 128.73131) (xy 256.757151 128.73169) (xy 257.160306 128.56511) (xy 257.469026 128.256928)
+ (xy 257.63631 127.854064) (xy 257.63669 127.417849) (xy 257.63669 133.7394) (xy 255.09669 133.7394) (xy 255.09669 127.417849)
+ (xy 254.93011 127.014694) (xy 254.621928 126.705974) (xy 254.219064 126.53869) (xy 253.82669 126.538348) (xy 253.82669 124.877849)
+ (xy 253.66011 124.474694) (xy 253.351928 124.165974) (xy 252.949064 123.99869) (xy 252.55669 123.998348) (xy 252.55669 118.527849)
+ (xy 252.39011 118.124694) (xy 252.081928 117.815974) (xy 251.679064 117.64869) (xy 251.28669 117.648348) (xy 251.28669 115.987849)
+ (xy 251.12011 115.584694) (xy 250.811928 115.275974) (xy 250.409064 115.10869) (xy 250.01669 115.108348) (xy 250.01669 109.637849)
+ (xy 249.85011 109.234694) (xy 249.541928 108.925974) (xy 249.139064 108.75869) (xy 248.74669 108.758348) (xy 248.74669 107.097849)
+ (xy 248.58011 106.694694) (xy 248.271928 106.385974) (xy 247.869064 106.21869) (xy 247.47669 106.218348) (xy 247.47669 100.747849)
+ (xy 247.31011 100.344694) (xy 247.001928 100.035974) (xy 246.599064 99.86869) (xy 246.20669 99.868348) (xy 246.20669 98.207849)
+ (xy 246.04011 97.804694) (xy 245.731928 97.495974) (xy 245.329064 97.32869) (xy 244.93669 97.328348) (xy 244.93669 91.857849)
+ (xy 244.77011 91.454694) (xy 244.461928 91.145974) (xy 244.059064 90.97869) (xy 243.66669 90.978348) (xy 243.66669 89.317849)
+ (xy 243.50011 88.914694) (xy 243.191928 88.605974) (xy 242.789064 88.43869) (xy 242.39669 88.438348) (xy 242.39669 82.967849)
+ (xy 242.23011 82.564694) (xy 241.921928 82.255974) (xy 241.519064 82.08869) (xy 241.12669 82.088348) (xy 241.12669 80.427849)
+ (xy 240.96011 80.024694) (xy 240.651928 79.715974) (xy 240.249064 79.54869) (xy 239.85669 79.548348) (xy 239.85669 74.077849)
+ (xy 239.69011 73.674694) (xy 239.381928 73.365974) (xy 238.979064 73.19869) (xy 238.58669 73.198348) (xy 238.58669 71.537849)
+ (xy 238.42011 71.134694) (xy 238.111928 70.825974) (xy 237.709064 70.65869) (xy 237.272849 70.65831) (xy 236.869694 70.82489)
+ (xy 236.560974 71.133072) (xy 236.39369 71.535936) (xy 236.39331 71.972151) (xy 236.55989 72.375306) (xy 236.868072 72.684026)
+ (xy 237.270936 72.85131) (xy 237.707151 72.85169) (xy 238.110306 72.68511) (xy 238.419026 72.376928) (xy 238.58631 71.974064)
+ (xy 238.58669 71.537849) (xy 238.58669 73.198348) (xy 238.542849 73.19831) (xy 238.139694 73.36489) (xy 237.830974 73.673072)
+ (xy 237.66369 74.075936) (xy 237.66331 74.512151) (xy 237.82989 74.915306) (xy 238.138072 75.224026) (xy 238.540936 75.39131)
+ (xy 238.977151 75.39169) (xy 239.380306 75.22511) (xy 239.689026 74.916928) (xy 239.85631 74.514064) (xy 239.85669 74.077849)
+ (xy 239.85669 79.548348) (xy 239.812849 79.54831) (xy 239.409694 79.71489) (xy 239.100974 80.023072) (xy 238.93369 80.425936)
+ (xy 238.93331 80.862151) (xy 239.09989 81.265306) (xy 239.408072 81.574026) (xy 239.810936 81.74131) (xy 240.247151 81.74169)
+ (xy 240.650306 81.57511) (xy 240.959026 81.266928) (xy 241.12631 80.864064) (xy 241.12669 80.427849) (xy 241.12669 82.088348)
+ (xy 241.082849 82.08831) (xy 240.679694 82.25489) (xy 240.370974 82.563072) (xy 240.20369 82.965936) (xy 240.20331 83.402151)
+ (xy 240.36989 83.805306) (xy 240.678072 84.114026) (xy 241.080936 84.28131) (xy 241.517151 84.28169) (xy 241.920306 84.11511)
+ (xy 242.229026 83.806928) (xy 242.39631 83.404064) (xy 242.39669 82.967849) (xy 242.39669 88.438348) (xy 242.352849 88.43831)
+ (xy 241.949694 88.60489) (xy 241.640974 88.913072) (xy 241.47369 89.315936) (xy 241.47331 89.752151) (xy 241.63989 90.155306)
+ (xy 241.948072 90.464026) (xy 242.350936 90.63131) (xy 242.787151 90.63169) (xy 243.190306 90.46511) (xy 243.499026 90.156928)
+ (xy 243.66631 89.754064) (xy 243.66669 89.317849) (xy 243.66669 90.978348) (xy 243.622849 90.97831) (xy 243.219694 91.14489)
+ (xy 242.910974 91.453072) (xy 242.74369 91.855936) (xy 242.74331 92.292151) (xy 242.90989 92.695306) (xy 243.218072 93.004026)
+ (xy 243.620936 93.17131) (xy 244.057151 93.17169) (xy 244.460306 93.00511) (xy 244.769026 92.696928) (xy 244.93631 92.294064)
+ (xy 244.93669 91.857849) (xy 244.93669 97.328348) (xy 244.892849 97.32831) (xy 244.489694 97.49489) (xy 244.180974 97.803072)
+ (xy 244.01369 98.205936) (xy 244.01331 98.642151) (xy 244.17989 99.045306) (xy 244.488072 99.354026) (xy 244.890936 99.52131)
+ (xy 245.327151 99.52169) (xy 245.730306 99.35511) (xy 246.039026 99.046928) (xy 246.20631 98.644064) (xy 246.20669 98.207849)
+ (xy 246.20669 99.868348) (xy 246.162849 99.86831) (xy 245.759694 100.03489) (xy 245.450974 100.343072) (xy 245.28369 100.745936)
+ (xy 245.28331 101.182151) (xy 245.44989 101.585306) (xy 245.758072 101.894026) (xy 246.160936 102.06131) (xy 246.597151 102.06169)
+ (xy 247.000306 101.89511) (xy 247.309026 101.586928) (xy 247.47631 101.184064) (xy 247.47669 100.747849) (xy 247.47669 106.218348)
+ (xy 247.432849 106.21831) (xy 247.029694 106.38489) (xy 246.720974 106.693072) (xy 246.55369 107.095936) (xy 246.55331 107.532151)
+ (xy 246.71989 107.935306) (xy 247.028072 108.244026) (xy 247.430936 108.41131) (xy 247.867151 108.41169) (xy 248.270306 108.24511)
+ (xy 248.579026 107.936928) (xy 248.74631 107.534064) (xy 248.74669 107.097849) (xy 248.74669 108.758348) (xy 248.702849 108.75831)
+ (xy 248.299694 108.92489) (xy 247.990974 109.233072) (xy 247.82369 109.635936) (xy 247.82331 110.072151) (xy 247.98989 110.475306)
+ (xy 248.298072 110.784026) (xy 248.700936 110.95131) (xy 249.137151 110.95169) (xy 249.540306 110.78511) (xy 249.849026 110.476928)
+ (xy 250.01631 110.074064) (xy 250.01669 109.637849) (xy 250.01669 115.108348) (xy 249.972849 115.10831) (xy 249.569694 115.27489)
+ (xy 249.260974 115.583072) (xy 249.09369 115.985936) (xy 249.09331 116.422151) (xy 249.25989 116.825306) (xy 249.568072 117.134026)
+ (xy 249.970936 117.30131) (xy 250.407151 117.30169) (xy 250.810306 117.13511) (xy 251.119026 116.826928) (xy 251.28631 116.424064)
+ (xy 251.28669 115.987849) (xy 251.28669 117.648348) (xy 251.242849 117.64831) (xy 250.839694 117.81489) (xy 250.530974 118.123072)
+ (xy 250.36369 118.525936) (xy 250.36331 118.962151) (xy 250.52989 119.365306) (xy 250.838072 119.674026) (xy 251.240936 119.84131)
+ (xy 251.677151 119.84169) (xy 252.080306 119.67511) (xy 252.389026 119.366928) (xy 252.55631 118.964064) (xy 252.55669 118.527849)
+ (xy 252.55669 123.998348) (xy 252.512849 123.99831) (xy 252.109694 124.16489) (xy 251.800974 124.473072) (xy 251.63369 124.875936)
+ (xy 251.63331 125.312151) (xy 251.79989 125.715306) (xy 252.108072 126.024026) (xy 252.510936 126.19131) (xy 252.947151 126.19169)
+ (xy 253.350306 126.02511) (xy 253.659026 125.716928) (xy 253.82631 125.314064) (xy 253.82669 124.877849) (xy 253.82669 126.538348)
+ (xy 253.782849 126.53831) (xy 253.379694 126.70489) (xy 253.070974 127.013072) (xy 252.90369 127.415936) (xy 252.90331 127.852151)
+ (xy 253.06989 128.255306) (xy 253.378072 128.564026) (xy 253.780936 128.73131) (xy 254.217151 128.73169) (xy 254.620306 128.56511)
+ (xy 254.929026 128.256928) (xy 255.09631 127.854064) (xy 255.09669 127.417849) (xy 255.09669 133.7394) (xy 252.55669 133.7394)
+ (xy 252.55669 127.417849) (xy 252.39011 127.014694) (xy 252.081928 126.705974) (xy 251.679064 126.53869) (xy 251.28669 126.538348)
+ (xy 251.28669 124.877849) (xy 251.12011 124.474694) (xy 250.811928 124.165974) (xy 250.409064 123.99869) (xy 250.01669 123.998348)
+ (xy 250.01669 118.527849) (xy 249.85011 118.124694) (xy 249.541928 117.815974) (xy 249.139064 117.64869) (xy 248.74669 117.648348)
+ (xy 248.74669 115.987849) (xy 248.58011 115.584694) (xy 248.271928 115.275974) (xy 247.869064 115.10869) (xy 247.47669 115.108348)
+ (xy 247.47669 109.637849) (xy 247.31011 109.234694) (xy 247.001928 108.925974) (xy 246.599064 108.75869) (xy 246.20669 108.758348)
+ (xy 246.20669 107.097849) (xy 246.04011 106.694694) (xy 245.731928 106.385974) (xy 245.329064 106.21869) (xy 244.93669 106.218348)
+ (xy 244.93669 100.747849) (xy 244.77011 100.344694) (xy 244.461928 100.035974) (xy 244.059064 99.86869) (xy 243.66669 99.868348)
+ (xy 243.66669 98.207849) (xy 243.50011 97.804694) (xy 243.191928 97.495974) (xy 242.789064 97.32869) (xy 242.39669 97.328348)
+ (xy 242.39669 91.857849) (xy 242.23011 91.454694) (xy 241.921928 91.145974) (xy 241.519064 90.97869) (xy 241.12669 90.978348)
+ (xy 241.12669 89.317849) (xy 240.96011 88.914694) (xy 240.651928 88.605974) (xy 240.249064 88.43869) (xy 239.85669 88.438348)
+ (xy 239.85669 82.967849) (xy 239.69011 82.564694) (xy 239.381928 82.255974) (xy 238.979064 82.08869) (xy 238.58669 82.088348)
+ (xy 238.58669 80.427849) (xy 238.42011 80.024694) (xy 238.111928 79.715974) (xy 237.709064 79.54869) (xy 237.272849 79.54831)
+ (xy 236.869694 79.71489) (xy 236.560974 80.023072) (xy 236.39369 80.425936) (xy 236.39331 80.862151) (xy 236.55989 81.265306)
+ (xy 236.868072 81.574026) (xy 237.270936 81.74131) (xy 237.707151 81.74169) (xy 238.110306 81.57511) (xy 238.419026 81.266928)
+ (xy 238.58631 80.864064) (xy 238.58669 80.427849) (xy 238.58669 82.088348) (xy 238.542849 82.08831) (xy 238.139694 82.25489)
+ (xy 237.830974 82.563072) (xy 237.66369 82.965936) (xy 237.66331 83.402151) (xy 237.82989 83.805306) (xy 238.138072 84.114026)
+ (xy 238.540936 84.28131) (xy 238.977151 84.28169) (xy 239.380306 84.11511) (xy 239.689026 83.806928) (xy 239.85631 83.404064)
+ (xy 239.85669 82.967849) (xy 239.85669 88.438348) (xy 239.812849 88.43831) (xy 239.409694 88.60489) (xy 239.100974 88.913072)
+ (xy 238.93369 89.315936) (xy 238.93331 89.752151) (xy 239.09989 90.155306) (xy 239.408072 90.464026) (xy 239.810936 90.63131)
+ (xy 240.247151 90.63169) (xy 240.650306 90.46511) (xy 240.959026 90.156928) (xy 241.12631 89.754064) (xy 241.12669 89.317849)
+ (xy 241.12669 90.978348) (xy 241.082849 90.97831) (xy 240.679694 91.14489) (xy 240.370974 91.453072) (xy 240.20369 91.855936)
+ (xy 240.20331 92.292151) (xy 240.36989 92.695306) (xy 240.678072 93.004026) (xy 241.080936 93.17131) (xy 241.517151 93.17169)
+ (xy 241.920306 93.00511) (xy 242.229026 92.696928) (xy 242.39631 92.294064) (xy 242.39669 91.857849) (xy 242.39669 97.328348)
+ (xy 242.352849 97.32831) (xy 241.949694 97.49489) (xy 241.640974 97.803072) (xy 241.47369 98.205936) (xy 241.47331 98.642151)
+ (xy 241.63989 99.045306) (xy 241.948072 99.354026) (xy 242.350936 99.52131) (xy 242.787151 99.52169) (xy 243.190306 99.35511)
+ (xy 243.499026 99.046928) (xy 243.66631 98.644064) (xy 243.66669 98.207849) (xy 243.66669 99.868348) (xy 243.622849 99.86831)
+ (xy 243.219694 100.03489) (xy 242.910974 100.343072) (xy 242.74369 100.745936) (xy 242.74331 101.182151) (xy 242.90989 101.585306)
+ (xy 243.218072 101.894026) (xy 243.620936 102.06131) (xy 244.057151 102.06169) (xy 244.460306 101.89511) (xy 244.769026 101.586928)
+ (xy 244.93631 101.184064) (xy 244.93669 100.747849) (xy 244.93669 106.218348) (xy 244.892849 106.21831) (xy 244.489694 106.38489)
+ (xy 244.180974 106.693072) (xy 244.01369 107.095936) (xy 244.01331 107.532151) (xy 244.17989 107.935306) (xy 244.488072 108.244026)
+ (xy 244.890936 108.41131) (xy 245.327151 108.41169) (xy 245.730306 108.24511) (xy 246.039026 107.936928) (xy 246.20631 107.534064)
+ (xy 246.20669 107.097849) (xy 246.20669 108.758348) (xy 246.162849 108.75831) (xy 245.759694 108.92489) (xy 245.450974 109.233072)
+ (xy 245.28369 109.635936) (xy 245.28331 110.072151) (xy 245.44989 110.475306) (xy 245.758072 110.784026) (xy 246.160936 110.95131)
+ (xy 246.597151 110.95169) (xy 247.000306 110.78511) (xy 247.309026 110.476928) (xy 247.47631 110.074064) (xy 247.47669 109.637849)
+ (xy 247.47669 115.108348) (xy 247.432849 115.10831) (xy 247.029694 115.27489) (xy 246.720974 115.583072) (xy 246.55369 115.985936)
+ (xy 246.55331 116.422151) (xy 246.71989 116.825306) (xy 247.028072 117.134026) (xy 247.430936 117.30131) (xy 247.867151 117.30169)
+ (xy 248.270306 117.13511) (xy 248.579026 116.826928) (xy 248.74631 116.424064) (xy 248.74669 115.987849) (xy 248.74669 117.648348)
+ (xy 248.702849 117.64831) (xy 248.299694 117.81489) (xy 247.990974 118.123072) (xy 247.82369 118.525936) (xy 247.82331 118.962151)
+ (xy 247.98989 119.365306) (xy 248.298072 119.674026) (xy 248.700936 119.84131) (xy 249.137151 119.84169) (xy 249.540306 119.67511)
+ (xy 249.849026 119.366928) (xy 250.01631 118.964064) (xy 250.01669 118.527849) (xy 250.01669 123.998348) (xy 249.972849 123.99831)
+ (xy 249.569694 124.16489) (xy 249.260974 124.473072) (xy 249.09369 124.875936) (xy 249.09331 125.312151) (xy 249.25989 125.715306)
+ (xy 249.568072 126.024026) (xy 249.970936 126.19131) (xy 250.407151 126.19169) (xy 250.810306 126.02511) (xy 251.119026 125.716928)
+ (xy 251.28631 125.314064) (xy 251.28669 124.877849) (xy 251.28669 126.538348) (xy 251.242849 126.53831) (xy 250.839694 126.70489)
+ (xy 250.530974 127.013072) (xy 250.36369 127.415936) (xy 250.36331 127.852151) (xy 250.52989 128.255306) (xy 250.838072 128.564026)
+ (xy 251.240936 128.73131) (xy 251.677151 128.73169) (xy 252.080306 128.56511) (xy 252.389026 128.256928) (xy 252.55631 127.854064)
+ (xy 252.55669 127.417849) (xy 252.55669 133.7394) (xy 250.01669 133.7394) (xy 250.01669 127.417849) (xy 249.85011 127.014694)
+ (xy 249.541928 126.705974) (xy 249.139064 126.53869) (xy 248.74669 126.538348) (xy 248.74669 124.877849) (xy 248.58011 124.474694)
+ (xy 248.271928 124.165974) (xy 247.869064 123.99869) (xy 247.47669 123.998348) (xy 247.47669 118.527849) (xy 247.31011 118.124694)
+ (xy 247.001928 117.815974) (xy 246.599064 117.64869) (xy 246.20669 117.648348) (xy 246.20669 115.987849) (xy 246.04011 115.584694)
+ (xy 245.731928 115.275974) (xy 245.329064 115.10869) (xy 244.93669 115.108348) (xy 244.93669 109.637849) (xy 244.77011 109.234694)
+ (xy 244.461928 108.925974) (xy 244.059064 108.75869) (xy 243.66669 108.758348) (xy 243.66669 107.097849) (xy 243.50011 106.694694)
+ (xy 243.191928 106.385974) (xy 242.789064 106.21869) (xy 242.39669 106.218348) (xy 242.39669 100.747849) (xy 242.23011 100.344694)
+ (xy 241.921928 100.035974) (xy 241.519064 99.86869) (xy 241.12669 99.868348) (xy 241.12669 98.207849) (xy 240.96011 97.804694)
+ (xy 240.651928 97.495974) (xy 240.249064 97.32869) (xy 239.85669 97.328348) (xy 239.85669 91.857849) (xy 239.69011 91.454694)
+ (xy 239.381928 91.145974) (xy 238.979064 90.97869) (xy 238.58669 90.978348) (xy 238.58669 89.317849) (xy 238.42011 88.914694)
+ (xy 238.111928 88.605974) (xy 237.709064 88.43869) (xy 237.272849 88.43831) (xy 236.869694 88.60489) (xy 236.560974 88.913072)
+ (xy 236.39369 89.315936) (xy 236.39331 89.752151) (xy 236.55989 90.155306) (xy 236.868072 90.464026) (xy 237.270936 90.63131)
+ (xy 237.707151 90.63169) (xy 238.110306 90.46511) (xy 238.419026 90.156928) (xy 238.58631 89.754064) (xy 238.58669 89.317849)
+ (xy 238.58669 90.978348) (xy 238.542849 90.97831) (xy 238.139694 91.14489) (xy 237.830974 91.453072) (xy 237.66369 91.855936)
+ (xy 237.66331 92.292151) (xy 237.82989 92.695306) (xy 238.138072 93.004026) (xy 238.540936 93.17131) (xy 238.977151 93.17169)
+ (xy 239.380306 93.00511) (xy 239.689026 92.696928) (xy 239.85631 92.294064) (xy 239.85669 91.857849) (xy 239.85669 97.328348)
+ (xy 239.812849 97.32831) (xy 239.409694 97.49489) (xy 239.100974 97.803072) (xy 238.93369 98.205936) (xy 238.93331 98.642151)
+ (xy 239.09989 99.045306) (xy 239.408072 99.354026) (xy 239.810936 99.52131) (xy 240.247151 99.52169) (xy 240.650306 99.35511)
+ (xy 240.959026 99.046928) (xy 241.12631 98.644064) (xy 241.12669 98.207849) (xy 241.12669 99.868348) (xy 241.082849 99.86831)
+ (xy 240.679694 100.03489) (xy 240.370974 100.343072) (xy 240.20369 100.745936) (xy 240.20331 101.182151) (xy 240.36989 101.585306)
+ (xy 240.678072 101.894026) (xy 241.080936 102.06131) (xy 241.517151 102.06169) (xy 241.920306 101.89511) (xy 242.229026 101.586928)
+ (xy 242.39631 101.184064) (xy 242.39669 100.747849) (xy 242.39669 106.218348) (xy 242.352849 106.21831) (xy 241.949694 106.38489)
+ (xy 241.640974 106.693072) (xy 241.47369 107.095936) (xy 241.47331 107.532151) (xy 241.63989 107.935306) (xy 241.948072 108.244026)
+ (xy 242.350936 108.41131) (xy 242.787151 108.41169) (xy 243.190306 108.24511) (xy 243.499026 107.936928) (xy 243.66631 107.534064)
+ (xy 243.66669 107.097849) (xy 243.66669 108.758348) (xy 243.622849 108.75831) (xy 243.219694 108.92489) (xy 242.910974 109.233072)
+ (xy 242.74369 109.635936) (xy 242.74331 110.072151) (xy 242.90989 110.475306) (xy 243.218072 110.784026) (xy 243.620936 110.95131)
+ (xy 244.057151 110.95169) (xy 244.460306 110.78511) (xy 244.769026 110.476928) (xy 244.93631 110.074064) (xy 244.93669 109.637849)
+ (xy 244.93669 115.108348) (xy 244.892849 115.10831) (xy 244.489694 115.27489) (xy 244.180974 115.583072) (xy 244.01369 115.985936)
+ (xy 244.01331 116.422151) (xy 244.17989 116.825306) (xy 244.488072 117.134026) (xy 244.890936 117.30131) (xy 245.327151 117.30169)
+ (xy 245.730306 117.13511) (xy 246.039026 116.826928) (xy 246.20631 116.424064) (xy 246.20669 115.987849) (xy 246.20669 117.648348)
+ (xy 246.162849 117.64831) (xy 245.759694 117.81489) (xy 245.450974 118.123072) (xy 245.28369 118.525936) (xy 245.28331 118.962151)
+ (xy 245.44989 119.365306) (xy 245.758072 119.674026) (xy 246.160936 119.84131) (xy 246.597151 119.84169) (xy 247.000306 119.67511)
+ (xy 247.309026 119.366928) (xy 247.47631 118.964064) (xy 247.47669 118.527849) (xy 247.47669 123.998348) (xy 247.432849 123.99831)
+ (xy 247.029694 124.16489) (xy 246.720974 124.473072) (xy 246.55369 124.875936) (xy 246.55331 125.312151) (xy 246.71989 125.715306)
+ (xy 247.028072 126.024026) (xy 247.430936 126.19131) (xy 247.867151 126.19169) (xy 248.270306 126.02511) (xy 248.579026 125.716928)
+ (xy 248.74631 125.314064) (xy 248.74669 124.877849) (xy 248.74669 126.538348) (xy 248.702849 126.53831) (xy 248.299694 126.70489)
+ (xy 247.990974 127.013072) (xy 247.82369 127.415936) (xy 247.82331 127.852151) (xy 247.98989 128.255306) (xy 248.298072 128.564026)
+ (xy 248.700936 128.73131) (xy 249.137151 128.73169) (xy 249.540306 128.56511) (xy 249.849026 128.256928) (xy 250.01631 127.854064)
+ (xy 250.01669 127.417849) (xy 250.01669 133.7394) (xy 247.47669 133.7394) (xy 247.47669 127.417849) (xy 247.31011 127.014694)
+ (xy 247.001928 126.705974) (xy 246.599064 126.53869) (xy 246.20669 126.538348) (xy 246.20669 124.877849) (xy 246.04011 124.474694)
+ (xy 245.731928 124.165974) (xy 245.329064 123.99869) (xy 244.93669 123.998348) (xy 244.93669 118.527849) (xy 244.77011 118.124694)
+ (xy 244.461928 117.815974) (xy 244.059064 117.64869) (xy 243.66669 117.648348) (xy 243.66669 115.987849) (xy 243.50011 115.584694)
+ (xy 243.191928 115.275974) (xy 242.789064 115.10869) (xy 242.39669 115.108348) (xy 242.39669 109.637849) (xy 242.23011 109.234694)
+ (xy 241.921928 108.925974) (xy 241.519064 108.75869) (xy 241.12669 108.758348) (xy 241.12669 107.097849) (xy 240.96011 106.694694)
+ (xy 240.651928 106.385974) (xy 240.249064 106.21869) (xy 239.85669 106.218348) (xy 239.85669 100.747849) (xy 239.69011 100.344694)
+ (xy 239.381928 100.035974) (xy 238.979064 99.86869) (xy 238.58669 99.868348) (xy 238.58669 98.207849) (xy 238.42011 97.804694)
+ (xy 238.111928 97.495974) (xy 237.709064 97.32869) (xy 237.272849 97.32831) (xy 236.869694 97.49489) (xy 236.560974 97.803072)
+ (xy 236.39369 98.205936) (xy 236.39331 98.642151) (xy 236.55989 99.045306) (xy 236.868072 99.354026) (xy 237.270936 99.52131)
+ (xy 237.707151 99.52169) (xy 238.110306 99.35511) (xy 238.419026 99.046928) (xy 238.58631 98.644064) (xy 238.58669 98.207849)
+ (xy 238.58669 99.868348) (xy 238.542849 99.86831) (xy 238.139694 100.03489) (xy 237.830974 100.343072) (xy 237.66369 100.745936)
+ (xy 237.66331 101.182151) (xy 237.82989 101.585306) (xy 238.138072 101.894026) (xy 238.540936 102.06131) (xy 238.977151 102.06169)
+ (xy 239.380306 101.89511) (xy 239.689026 101.586928) (xy 239.85631 101.184064) (xy 239.85669 100.747849) (xy 239.85669 106.218348)
+ (xy 239.812849 106.21831) (xy 239.409694 106.38489) (xy 239.100974 106.693072) (xy 238.93369 107.095936) (xy 238.93331 107.532151)
+ (xy 239.09989 107.935306) (xy 239.408072 108.244026) (xy 239.810936 108.41131) (xy 240.247151 108.41169) (xy 240.650306 108.24511)
+ (xy 240.959026 107.936928) (xy 241.12631 107.534064) (xy 241.12669 107.097849) (xy 241.12669 108.758348) (xy 241.082849 108.75831)
+ (xy 240.679694 108.92489) (xy 240.370974 109.233072) (xy 240.20369 109.635936) (xy 240.20331 110.072151) (xy 240.36989 110.475306)
+ (xy 240.678072 110.784026) (xy 241.080936 110.95131) (xy 241.517151 110.95169) (xy 241.920306 110.78511) (xy 242.229026 110.476928)
+ (xy 242.39631 110.074064) (xy 242.39669 109.637849) (xy 242.39669 115.108348) (xy 242.352849 115.10831) (xy 241.949694 115.27489)
+ (xy 241.640974 115.583072) (xy 241.47369 115.985936) (xy 241.47331 116.422151) (xy 241.63989 116.825306) (xy 241.948072 117.134026)
+ (xy 242.350936 117.30131) (xy 242.787151 117.30169) (xy 243.190306 117.13511) (xy 243.499026 116.826928) (xy 243.66631 116.424064)
+ (xy 243.66669 115.987849) (xy 243.66669 117.648348) (xy 243.622849 117.64831) (xy 243.219694 117.81489) (xy 242.910974 118.123072)
+ (xy 242.74369 118.525936) (xy 242.74331 118.962151) (xy 242.90989 119.365306) (xy 243.218072 119.674026) (xy 243.620936 119.84131)
+ (xy 244.057151 119.84169) (xy 244.460306 119.67511) (xy 244.769026 119.366928) (xy 244.93631 118.964064) (xy 244.93669 118.527849)
+ (xy 244.93669 123.998348) (xy 244.892849 123.99831) (xy 244.489694 124.16489) (xy 244.180974 124.473072) (xy 244.01369 124.875936)
+ (xy 244.01331 125.312151) (xy 244.17989 125.715306) (xy 244.488072 126.024026) (xy 244.890936 126.19131) (xy 245.327151 126.19169)
+ (xy 245.730306 126.02511) (xy 246.039026 125.716928) (xy 246.20631 125.314064) (xy 246.20669 124.877849) (xy 246.20669 126.538348)
+ (xy 246.162849 126.53831) (xy 245.759694 126.70489) (xy 245.450974 127.013072) (xy 245.28369 127.415936) (xy 245.28331 127.852151)
+ (xy 245.44989 128.255306) (xy 245.758072 128.564026) (xy 246.160936 128.73131) (xy 246.597151 128.73169) (xy 247.000306 128.56511)
+ (xy 247.309026 128.256928) (xy 247.47631 127.854064) (xy 247.47669 127.417849) (xy 247.47669 133.7394) (xy 244.93669 133.7394)
+ (xy 244.93669 127.417849) (xy 244.77011 127.014694) (xy 244.461928 126.705974) (xy 244.059064 126.53869) (xy 243.66669 126.538348)
+ (xy 243.66669 124.877849) (xy 243.50011 124.474694) (xy 243.191928 124.165974) (xy 242.789064 123.99869) (xy 242.39669 123.998348)
+ (xy 242.39669 118.527849) (xy 242.23011 118.124694) (xy 241.921928 117.815974) (xy 241.519064 117.64869) (xy 241.12669 117.648348)
+ (xy 241.12669 115.987849) (xy 240.96011 115.584694) (xy 240.651928 115.275974) (xy 240.249064 115.10869) (xy 239.85669 115.108348)
+ (xy 239.85669 109.637849) (xy 239.69011 109.234694) (xy 239.381928 108.925974) (xy 238.979064 108.75869) (xy 238.58669 108.758348)
+ (xy 238.58669 107.097849) (xy 238.42011 106.694694) (xy 238.111928 106.385974) (xy 237.709064 106.21869) (xy 237.272849 106.21831)
+ (xy 236.869694 106.38489) (xy 236.560974 106.693072) (xy 236.39369 107.095936) (xy 236.39331 107.532151) (xy 236.55989 107.935306)
+ (xy 236.868072 108.244026) (xy 237.270936 108.41131) (xy 237.707151 108.41169) (xy 238.110306 108.24511) (xy 238.419026 107.936928)
+ (xy 238.58631 107.534064) (xy 238.58669 107.097849) (xy 238.58669 108.758348) (xy 238.542849 108.75831) (xy 238.139694 108.92489)
+ (xy 237.830974 109.233072) (xy 237.66369 109.635936) (xy 237.66331 110.072151) (xy 237.82989 110.475306) (xy 238.138072 110.784026)
+ (xy 238.540936 110.95131) (xy 238.977151 110.95169) (xy 239.380306 110.78511) (xy 239.689026 110.476928) (xy 239.85631 110.074064)
+ (xy 239.85669 109.637849) (xy 239.85669 115.108348) (xy 239.812849 115.10831) (xy 239.409694 115.27489) (xy 239.100974 115.583072)
+ (xy 238.93369 115.985936) (xy 238.93331 116.422151) (xy 239.09989 116.825306) (xy 239.408072 117.134026) (xy 239.810936 117.30131)
+ (xy 240.247151 117.30169) (xy 240.650306 117.13511) (xy 240.959026 116.826928) (xy 241.12631 116.424064) (xy 241.12669 115.987849)
+ (xy 241.12669 117.648348) (xy 241.082849 117.64831) (xy 240.679694 117.81489) (xy 240.370974 118.123072) (xy 240.20369 118.525936)
+ (xy 240.20331 118.962151) (xy 240.36989 119.365306) (xy 240.678072 119.674026) (xy 241.080936 119.84131) (xy 241.517151 119.84169)
+ (xy 241.920306 119.67511) (xy 242.229026 119.366928) (xy 242.39631 118.964064) (xy 242.39669 118.527849) (xy 242.39669 123.998348)
+ (xy 242.352849 123.99831) (xy 241.949694 124.16489) (xy 241.640974 124.473072) (xy 241.47369 124.875936) (xy 241.47331 125.312151)
+ (xy 241.63989 125.715306) (xy 241.948072 126.024026) (xy 242.350936 126.19131) (xy 242.787151 126.19169) (xy 243.190306 126.02511)
+ (xy 243.499026 125.716928) (xy 243.66631 125.314064) (xy 243.66669 124.877849) (xy 243.66669 126.538348) (xy 243.622849 126.53831)
+ (xy 243.219694 126.70489) (xy 242.910974 127.013072) (xy 242.74369 127.415936) (xy 242.74331 127.852151) (xy 242.90989 128.255306)
+ (xy 243.218072 128.564026) (xy 243.620936 128.73131) (xy 244.057151 128.73169) (xy 244.460306 128.56511) (xy 244.769026 128.256928)
+ (xy 244.93631 127.854064) (xy 244.93669 127.417849) (xy 244.93669 133.7394) (xy 242.39669 133.7394) (xy 242.39669 127.417849)
+ (xy 242.23011 127.014694) (xy 241.921928 126.705974) (xy 241.519064 126.53869) (xy 241.12669 126.538348) (xy 241.12669 124.877849)
+ (xy 240.96011 124.474694) (xy 240.651928 124.165974) (xy 240.249064 123.99869) (xy 239.85669 123.998348) (xy 239.85669 118.527849)
+ (xy 239.69011 118.124694) (xy 239.381928 117.815974) (xy 238.979064 117.64869) (xy 238.58669 117.648348) (xy 238.58669 115.987849)
+ (xy 238.42011 115.584694) (xy 238.111928 115.275974) (xy 237.709064 115.10869) (xy 237.272849 115.10831) (xy 236.869694 115.27489)
+ (xy 236.560974 115.583072) (xy 236.39369 115.985936) (xy 236.39331 116.422151) (xy 236.55989 116.825306) (xy 236.868072 117.134026)
+ (xy 237.270936 117.30131) (xy 237.707151 117.30169) (xy 238.110306 117.13511) (xy 238.419026 116.826928) (xy 238.58631 116.424064)
+ (xy 238.58669 115.987849) (xy 238.58669 117.648348) (xy 238.542849 117.64831) (xy 238.139694 117.81489) (xy 237.830974 118.123072)
+ (xy 237.66369 118.525936) (xy 237.66331 118.962151) (xy 237.82989 119.365306) (xy 238.138072 119.674026) (xy 238.540936 119.84131)
+ (xy 238.977151 119.84169) (xy 239.380306 119.67511) (xy 239.689026 119.366928) (xy 239.85631 118.964064) (xy 239.85669 118.527849)
+ (xy 239.85669 123.998348) (xy 239.812849 123.99831) (xy 239.409694 124.16489) (xy 239.100974 124.473072) (xy 238.93369 124.875936)
+ (xy 238.93331 125.312151) (xy 239.09989 125.715306) (xy 239.408072 126.024026) (xy 239.810936 126.19131) (xy 240.247151 126.19169)
+ (xy 240.650306 126.02511) (xy 240.959026 125.716928) (xy 241.12631 125.314064) (xy 241.12669 124.877849) (xy 241.12669 126.538348)
+ (xy 241.082849 126.53831) (xy 240.679694 126.70489) (xy 240.370974 127.013072) (xy 240.20369 127.415936) (xy 240.20331 127.852151)
+ (xy 240.36989 128.255306) (xy 240.678072 128.564026) (xy 241.080936 128.73131) (xy 241.517151 128.73169) (xy 241.920306 128.56511)
+ (xy 242.229026 128.256928) (xy 242.39631 127.854064) (xy 242.39669 127.417849) (xy 242.39669 133.7394) (xy 239.85669 133.7394)
+ (xy 239.85669 127.417849) (xy 239.69011 127.014694) (xy 239.381928 126.705974) (xy 238.979064 126.53869) (xy 238.58669 126.538348)
+ (xy 238.58669 124.877849) (xy 238.42011 124.474694) (xy 238.111928 124.165974) (xy 237.709064 123.99869) (xy 237.272849 123.99831)
+ (xy 236.869694 124.16489) (xy 236.560974 124.473072) (xy 236.39369 124.875936) (xy 236.39331 125.312151) (xy 236.55989 125.715306)
+ (xy 236.868072 126.024026) (xy 237.270936 126.19131) (xy 237.707151 126.19169) (xy 238.110306 126.02511) (xy 238.419026 125.716928)
+ (xy 238.58631 125.314064) (xy 238.58669 124.877849) (xy 238.58669 126.538348) (xy 238.542849 126.53831) (xy 238.139694 126.70489)
+ (xy 237.830974 127.013072) (xy 237.66369 127.415936) (xy 237.66331 127.852151) (xy 237.82989 128.255306) (xy 238.138072 128.564026)
+ (xy 238.540936 128.73131) (xy 238.977151 128.73169) (xy 239.380306 128.56511) (xy 239.689026 128.256928) (xy 239.85631 127.854064)
+ (xy 239.85669 127.417849) (xy 239.85669 133.7394) (xy 236.364355 133.7394) (xy 236.364355 125.959217) (xy 236.364355 117.069217)
+ (xy 236.364355 108.179217) (xy 236.364355 99.289217) (xy 236.364355 90.399217) (xy 236.364355 81.509217) (xy 236.364355 72.619217)
+ (xy 236.05307 71.865851) (xy 235.477181 71.288955) (xy 234.724359 70.976357) (xy 233.909217 70.975645) (xy 233.155851 71.28693)
+ (xy 232.578955 71.862819) (xy 232.266357 72.615641) (xy 232.265645 73.430783) (xy 232.57693 74.184149) (xy 233.152819 74.761045)
+ (xy 233.905641 75.073643) (xy 234.720783 75.074355) (xy 235.474149 74.76307) (xy 236.051045 74.187181) (xy 236.363643 73.434359)
+ (xy 236.364355 72.619217) (xy 236.364355 81.509217) (xy 236.05307 80.755851) (xy 235.477181 80.178955) (xy 234.724359 79.866357)
+ (xy 233.909217 79.865645) (xy 233.155851 80.17693) (xy 232.578955 80.752819) (xy 232.266357 81.505641) (xy 232.265645 82.320783)
+ (xy 232.57693 83.074149) (xy 233.152819 83.651045) (xy 233.905641 83.963643) (xy 234.720783 83.964355) (xy 235.474149 83.65307)
+ (xy 236.051045 83.077181) (xy 236.363643 82.324359) (xy 236.364355 81.509217) (xy 236.364355 90.399217) (xy 236.05307 89.645851)
+ (xy 235.477181 89.068955) (xy 234.724359 88.756357) (xy 233.909217 88.755645) (xy 233.155851 89.06693) (xy 232.578955 89.642819)
+ (xy 232.266357 90.395641) (xy 232.265645 91.210783) (xy 232.57693 91.964149) (xy 233.152819 92.541045) (xy 233.905641 92.853643)
+ (xy 234.720783 92.854355) (xy 235.474149 92.54307) (xy 236.051045 91.967181) (xy 236.363643 91.214359) (xy 236.364355 90.399217)
+ (xy 236.364355 99.289217) (xy 236.05307 98.535851) (xy 235.477181 97.958955) (xy 234.724359 97.646357) (xy 233.909217 97.645645)
+ (xy 233.155851 97.95693) (xy 232.578955 98.532819) (xy 232.266357 99.285641) (xy 232.265645 100.100783) (xy 232.57693 100.854149)
+ (xy 233.152819 101.431045) (xy 233.905641 101.743643) (xy 234.720783 101.744355) (xy 235.474149 101.43307) (xy 236.051045 100.857181)
+ (xy 236.363643 100.104359) (xy 236.364355 99.289217) (xy 236.364355 108.179217) (xy 236.05307 107.425851) (xy 235.477181 106.848955)
+ (xy 234.724359 106.536357) (xy 233.909217 106.535645) (xy 233.155851 106.84693) (xy 232.578955 107.422819) (xy 232.266357 108.175641)
+ (xy 232.265645 108.990783) (xy 232.57693 109.744149) (xy 233.152819 110.321045) (xy 233.905641 110.633643) (xy 234.720783 110.634355)
+ (xy 235.474149 110.32307) (xy 236.051045 109.747181) (xy 236.363643 108.994359) (xy 236.364355 108.179217) (xy 236.364355 117.069217)
+ (xy 236.05307 116.315851) (xy 235.477181 115.738955) (xy 234.724359 115.426357) (xy 233.909217 115.425645) (xy 233.155851 115.73693)
+ (xy 232.578955 116.312819) (xy 232.266357 117.065641) (xy 232.265645 117.880783) (xy 232.57693 118.634149) (xy 233.152819 119.211045)
+ (xy 233.905641 119.523643) (xy 234.720783 119.524355) (xy 235.474149 119.21307) (xy 236.051045 118.637181) (xy 236.363643 117.884359)
+ (xy 236.364355 117.069217) (xy 236.364355 125.959217) (xy 236.05307 125.205851) (xy 235.477181 124.628955) (xy 234.724359 124.316357)
+ (xy 233.909217 124.315645) (xy 233.155851 124.62693) (xy 232.578955 125.202819) (xy 232.266357 125.955641) (xy 232.265645 126.770783)
+ (xy 232.57693 127.524149) (xy 233.152819 128.101045) (xy 233.905641 128.413643) (xy 234.720783 128.414355) (xy 235.474149 128.10307)
+ (xy 236.051045 127.527181) (xy 236.363643 126.774359) (xy 236.364355 125.959217) (xy 236.364355 133.7394) (xy 232.23669 133.7394)
+ (xy 232.23669 127.417849) (xy 232.23669 118.527849) (xy 232.23669 109.637849) (xy 232.23669 100.747849) (xy 232.23669 91.857849)
+ (xy 232.23669 82.967849) (xy 232.23669 74.077849) (xy 232.07011 73.674694) (xy 231.761928 73.365974) (xy 231.359064 73.19869)
+ (xy 230.96669 73.198348) (xy 230.96669 71.537849) (xy 230.80011 71.134694) (xy 230.491928 70.825974) (xy 230.089064 70.65869)
+ (xy 229.70003 70.658351) (xy 229.70003 65.205461) (xy 229.539934 64.799687) (xy 229.518934 64.768257) (xy 229.315178 64.725177)
+ (xy 229.279823 64.760532) (xy 229.279823 64.689822) (xy 229.236743 64.486066) (xy 228.836613 64.312345) (xy 228.42669 64.305413)
+ (xy 228.42669 62.647849) (xy 228.26011 62.244694) (xy 227.951928 61.935974) (xy 227.549064 61.76869) (xy 227.112849 61.76831)
+ (xy 226.709694 61.93489) (xy 226.400974 62.243072) (xy 226.23369 62.645936) (xy 226.23331 63.082151) (xy 226.39989 63.485306)
+ (xy 226.708072 63.794026) (xy 227.110936 63.96131) (xy 227.547151 63.96169) (xy 227.950306 63.79511) (xy 228.259026 63.486928)
+ (xy 228.42631 63.084064) (xy 228.42669 62.647849) (xy 228.42669 64.305413) (xy 228.400461 64.30497) (xy 227.994687 64.465066)
+ (xy 227.963257 64.486066) (xy 227.920177 64.689822) (xy 228.6 65.369645) (xy 229.279823 64.689822) (xy 229.279823 64.760532)
+ (xy 228.635355 65.405) (xy 229.315178 66.084823) (xy 229.518934 66.041743) (xy 229.692655 65.641613) (xy 229.70003 65.205461)
+ (xy 229.70003 70.658351) (xy 229.652849 70.65831) (xy 229.279823 70.81244) (xy 229.279823 66.120178) (xy 228.6 65.440355)
+ (xy 228.564645 65.47571) (xy 228.564645 65.405) (xy 227.884822 64.725177) (xy 227.681066 64.768257) (xy 227.507345 65.168387)
+ (xy 227.49997 65.604539) (xy 227.660066 66.010313) (xy 227.681066 66.041743) (xy 227.884822 66.084823) (xy 228.564645 65.405)
+ (xy 228.564645 65.47571) (xy 227.920177 66.120178) (xy 227.963257 66.323934) (xy 228.363387 66.497655) (xy 228.799539 66.50503)
+ (xy 229.205313 66.344934) (xy 229.236743 66.323934) (xy 229.279823 66.120178) (xy 229.279823 70.81244) (xy 229.249694 70.82489)
+ (xy 228.940974 71.133072) (xy 228.77369 71.535936) (xy 228.77331 71.972151) (xy 228.93989 72.375306) (xy 229.248072 72.684026)
+ (xy 229.650936 72.85131) (xy 230.087151 72.85169) (xy 230.490306 72.68511) (xy 230.799026 72.376928) (xy 230.96631 71.974064)
+ (xy 230.96669 71.537849) (xy 230.96669 73.198348) (xy 230.922849 73.19831) (xy 230.519694 73.36489) (xy 230.210974 73.673072)
+ (xy 230.04369 74.075936) (xy 230.04331 74.512151) (xy 230.20989 74.915306) (xy 230.518072 75.224026) (xy 230.920936 75.39131)
+ (xy 231.357151 75.39169) (xy 231.760306 75.22511) (xy 232.069026 74.916928) (xy 232.23631 74.514064) (xy 232.23669 74.077849)
+ (xy 232.23669 82.967849) (xy 232.07011 82.564694) (xy 231.761928 82.255974) (xy 231.359064 82.08869) (xy 230.96669 82.088348)
+ (xy 230.96669 80.427849) (xy 230.80011 80.024694) (xy 230.491928 79.715974) (xy 230.089064 79.54869) (xy 229.70003 79.548351)
+ (xy 229.70003 74.095461) (xy 229.539934 73.689687) (xy 229.518934 73.658257) (xy 229.315178 73.615177) (xy 229.279823 73.650532)
+ (xy 229.279823 73.579822) (xy 229.236743 73.376066) (xy 228.836613 73.202345) (xy 228.42669 73.195413) (xy 228.42669 71.537849)
+ (xy 228.26011 71.134694) (xy 227.951928 70.825974) (xy 227.549064 70.65869) (xy 227.15669 70.658348) (xy 227.15669 65.187849)
+ (xy 226.99011 64.784694) (xy 226.681928 64.475974) (xy 226.279064 64.30869) (xy 225.88669 64.308348) (xy 225.88669 62.647849)
+ (xy 225.72011 62.244694) (xy 225.411928 61.935974) (xy 225.009064 61.76869) (xy 224.572849 61.76831) (xy 224.169694 61.93489)
+ (xy 223.860974 62.243072) (xy 223.69369 62.645936) (xy 223.69331 63.082151) (xy 223.85989 63.485306) (xy 224.168072 63.794026)
+ (xy 224.570936 63.96131) (xy 225.007151 63.96169) (xy 225.410306 63.79511) (xy 225.719026 63.486928) (xy 225.88631 63.084064)
+ (xy 225.88669 62.647849) (xy 225.88669 64.308348) (xy 225.842849 64.30831) (xy 225.439694 64.47489) (xy 225.130974 64.783072)
+ (xy 224.96369 65.185936) (xy 224.96331 65.622151) (xy 225.12989 66.025306) (xy 225.438072 66.334026) (xy 225.840936 66.50131)
+ (xy 226.277151 66.50169) (xy 226.680306 66.33511) (xy 226.989026 66.026928) (xy 227.15631 65.624064) (xy 227.15669 65.187849)
+ (xy 227.15669 70.658348) (xy 227.112849 70.65831) (xy 226.709694 70.82489) (xy 226.400974 71.133072) (xy 226.23369 71.535936)
+ (xy 226.23331 71.972151) (xy 226.39989 72.375306) (xy 226.708072 72.684026) (xy 227.110936 72.85131) (xy 227.547151 72.85169)
+ (xy 227.950306 72.68511) (xy 228.259026 72.376928) (xy 228.42631 71.974064) (xy 228.42669 71.537849) (xy 228.42669 73.195413)
+ (xy 228.400461 73.19497) (xy 227.994687 73.355066) (xy 227.963257 73.376066) (xy 227.920177 73.579822) (xy 228.6 74.259645)
+ (xy 229.279823 73.579822) (xy 229.279823 73.650532) (xy 228.635355 74.295) (xy 229.315178 74.974823) (xy 229.518934 74.931743)
+ (xy 229.692655 74.531613) (xy 229.70003 74.095461) (xy 229.70003 79.548351) (xy 229.652849 79.54831) (xy 229.279823 79.70244)
+ (xy 229.279823 75.010178) (xy 228.6 74.330355) (xy 228.564645 74.36571) (xy 228.564645 74.295) (xy 227.884822 73.615177)
+ (xy 227.681066 73.658257) (xy 227.507345 74.058387) (xy 227.49997 74.494539) (xy 227.660066 74.900313) (xy 227.681066 74.931743)
+ (xy 227.884822 74.974823) (xy 228.564645 74.295) (xy 228.564645 74.36571) (xy 227.920177 75.010178) (xy 227.963257 75.213934)
+ (xy 228.363387 75.387655) (xy 228.799539 75.39503) (xy 229.205313 75.234934) (xy 229.236743 75.213934) (xy 229.279823 75.010178)
+ (xy 229.279823 79.70244) (xy 229.249694 79.71489) (xy 228.940974 80.023072) (xy 228.77369 80.425936) (xy 228.77331 80.862151)
+ (xy 228.93989 81.265306) (xy 229.248072 81.574026) (xy 229.650936 81.74131) (xy 230.087151 81.74169) (xy 230.490306 81.57511)
+ (xy 230.799026 81.266928) (xy 230.96631 80.864064) (xy 230.96669 80.427849) (xy 230.96669 82.088348) (xy 230.922849 82.08831)
+ (xy 230.519694 82.25489) (xy 230.210974 82.563072) (xy 230.04369 82.965936) (xy 230.04331 83.402151) (xy 230.20989 83.805306)
+ (xy 230.518072 84.114026) (xy 230.920936 84.28131) (xy 231.357151 84.28169) (xy 231.760306 84.11511) (xy 232.069026 83.806928)
+ (xy 232.23631 83.404064) (xy 232.23669 82.967849) (xy 232.23669 91.857849) (xy 232.07011 91.454694) (xy 231.761928 91.145974)
+ (xy 231.359064 90.97869) (xy 230.96669 90.978348) (xy 230.96669 89.317849) (xy 230.80011 88.914694) (xy 230.491928 88.605974)
+ (xy 230.089064 88.43869) (xy 229.70003 88.438351) (xy 229.70003 82.985461) (xy 229.539934 82.579687) (xy 229.518934 82.548257)
+ (xy 229.315178 82.505177) (xy 229.279823 82.540532) (xy 229.279823 82.469822) (xy 229.236743 82.266066) (xy 228.836613 82.092345)
+ (xy 228.42669 82.085413) (xy 228.42669 80.427849) (xy 228.26011 80.024694) (xy 227.951928 79.715974) (xy 227.549064 79.54869)
+ (xy 227.15669 79.548348) (xy 227.15669 74.077849) (xy 226.99011 73.674694) (xy 226.681928 73.365974) (xy 226.279064 73.19869)
+ (xy 225.88669 73.198348) (xy 225.88669 71.537849) (xy 225.72011 71.134694) (xy 225.411928 70.825974) (xy 225.009064 70.65869)
+ (xy 224.61669 70.658348) (xy 224.61669 65.187849) (xy 224.45011 64.784694) (xy 224.141928 64.475974) (xy 223.739064 64.30869)
+ (xy 223.34669 64.308348) (xy 223.34669 62.647849) (xy 223.18011 62.244694) (xy 222.871928 61.935974) (xy 222.469064 61.76869)
+ (xy 222.032849 61.76831) (xy 221.629694 61.93489) (xy 221.320974 62.243072) (xy 221.15369 62.645936) (xy 221.15331 63.082151)
+ (xy 221.31989 63.485306) (xy 221.628072 63.794026) (xy 222.030936 63.96131) (xy 222.467151 63.96169) (xy 222.870306 63.79511)
+ (xy 223.179026 63.486928) (xy 223.34631 63.084064) (xy 223.34669 62.647849) (xy 223.34669 64.308348) (xy 223.302849 64.30831)
+ (xy 222.899694 64.47489) (xy 222.590974 64.783072) (xy 222.42369 65.185936) (xy 222.42331 65.622151) (xy 222.58989 66.025306)
+ (xy 222.898072 66.334026) (xy 223.300936 66.50131) (xy 223.737151 66.50169) (xy 224.140306 66.33511) (xy 224.449026 66.026928)
+ (xy 224.61631 65.624064) (xy 224.61669 65.187849) (xy 224.61669 70.658348) (xy 224.572849 70.65831) (xy 224.169694 70.82489)
+ (xy 223.860974 71.133072) (xy 223.69369 71.535936) (xy 223.69331 71.972151) (xy 223.85989 72.375306) (xy 224.168072 72.684026)
+ (xy 224.570936 72.85131) (xy 225.007151 72.85169) (xy 225.410306 72.68511) (xy 225.719026 72.376928) (xy 225.88631 71.974064)
+ (xy 225.88669 71.537849) (xy 225.88669 73.198348) (xy 225.842849 73.19831) (xy 225.439694 73.36489) (xy 225.130974 73.673072)
+ (xy 224.96369 74.075936) (xy 224.96331 74.512151) (xy 225.12989 74.915306) (xy 225.438072 75.224026) (xy 225.840936 75.39131)
+ (xy 226.277151 75.39169) (xy 226.680306 75.22511) (xy 226.989026 74.916928) (xy 227.15631 74.514064) (xy 227.15669 74.077849)
+ (xy 227.15669 79.548348) (xy 227.112849 79.54831) (xy 226.709694 79.71489) (xy 226.400974 80.023072) (xy 226.23369 80.425936)
+ (xy 226.23331 80.862151) (xy 226.39989 81.265306) (xy 226.708072 81.574026) (xy 227.110936 81.74131) (xy 227.547151 81.74169)
+ (xy 227.950306 81.57511) (xy 228.259026 81.266928) (xy 228.42631 80.864064) (xy 228.42669 80.427849) (xy 228.42669 82.085413)
+ (xy 228.400461 82.08497) (xy 227.994687 82.245066) (xy 227.963257 82.266066) (xy 227.920177 82.469822) (xy 228.6 83.149645)
+ (xy 229.279823 82.469822) (xy 229.279823 82.540532) (xy 228.635355 83.185) (xy 229.315178 83.864823) (xy 229.518934 83.821743)
+ (xy 229.692655 83.421613) (xy 229.70003 82.985461) (xy 229.70003 88.438351) (xy 229.652849 88.43831) (xy 229.279823 88.59244)
+ (xy 229.279823 83.900178) (xy 228.6 83.220355) (xy 228.564645 83.25571) (xy 228.564645 83.185) (xy 227.884822 82.505177)
+ (xy 227.681066 82.548257) (xy 227.507345 82.948387) (xy 227.49997 83.384539) (xy 227.660066 83.790313) (xy 227.681066 83.821743)
+ (xy 227.884822 83.864823) (xy 228.564645 83.185) (xy 228.564645 83.25571) (xy 227.920177 83.900178) (xy 227.963257 84.103934)
+ (xy 228.363387 84.277655) (xy 228.799539 84.28503) (xy 229.205313 84.124934) (xy 229.236743 84.103934) (xy 229.279823 83.900178)
+ (xy 229.279823 88.59244) (xy 229.249694 88.60489) (xy 228.940974 88.913072) (xy 228.77369 89.315936) (xy 228.77331 89.752151)
+ (xy 228.93989 90.155306) (xy 229.248072 90.464026) (xy 229.650936 90.63131) (xy 230.087151 90.63169) (xy 230.490306 90.46511)
+ (xy 230.799026 90.156928) (xy 230.96631 89.754064) (xy 230.96669 89.317849) (xy 230.96669 90.978348) (xy 230.922849 90.97831)
+ (xy 230.519694 91.14489) (xy 230.210974 91.453072) (xy 230.04369 91.855936) (xy 230.04331 92.292151) (xy 230.20989 92.695306)
+ (xy 230.518072 93.004026) (xy 230.920936 93.17131) (xy 231.357151 93.17169) (xy 231.760306 93.00511) (xy 232.069026 92.696928)
+ (xy 232.23631 92.294064) (xy 232.23669 91.857849) (xy 232.23669 100.747849) (xy 232.07011 100.344694) (xy 231.761928 100.035974)
+ (xy 231.359064 99.86869) (xy 230.96669 99.868348) (xy 230.96669 98.207849) (xy 230.80011 97.804694) (xy 230.491928 97.495974)
+ (xy 230.089064 97.32869) (xy 229.70003 97.328351) (xy 229.70003 91.875461) (xy 229.539934 91.469687) (xy 229.518934 91.438257)
+ (xy 229.315178 91.395177) (xy 229.279823 91.430532) (xy 229.279823 91.359822) (xy 229.236743 91.156066) (xy 228.836613 90.982345)
+ (xy 228.42669 90.975413) (xy 228.42669 89.317849) (xy 228.26011 88.914694) (xy 227.951928 88.605974) (xy 227.549064 88.43869)
+ (xy 227.15669 88.438348) (xy 227.15669 82.967849) (xy 226.99011 82.564694) (xy 226.681928 82.255974) (xy 226.279064 82.08869)
+ (xy 225.88669 82.088348) (xy 225.88669 80.427849) (xy 225.72011 80.024694) (xy 225.411928 79.715974) (xy 225.009064 79.54869)
+ (xy 224.61669 79.548348) (xy 224.61669 74.077849) (xy 224.45011 73.674694) (xy 224.141928 73.365974) (xy 223.739064 73.19869)
+ (xy 223.34669 73.198348) (xy 223.34669 71.537849) (xy 223.18011 71.134694) (xy 222.871928 70.825974) (xy 222.469064 70.65869)
+ (xy 222.07669 70.658348) (xy 222.07669 65.187849) (xy 221.91011 64.784694) (xy 221.601928 64.475974) (xy 221.199064 64.30869)
+ (xy 220.80669 64.308348) (xy 220.80669 62.647849) (xy 220.64011 62.244694) (xy 220.331928 61.935974) (xy 219.929064 61.76869)
+ (xy 219.492849 61.76831) (xy 219.089694 61.93489) (xy 218.780974 62.243072) (xy 218.61369 62.645936) (xy 218.61331 63.082151)
+ (xy 218.77989 63.485306) (xy 219.088072 63.794026) (xy 219.490936 63.96131) (xy 219.927151 63.96169) (xy 220.330306 63.79511)
+ (xy 220.639026 63.486928) (xy 220.80631 63.084064) (xy 220.80669 62.647849) (xy 220.80669 64.308348) (xy 220.762849 64.30831)
+ (xy 220.359694 64.47489) (xy 220.050974 64.783072) (xy 219.88369 65.185936) (xy 219.88331 65.622151) (xy 220.04989 66.025306)
+ (xy 220.358072 66.334026) (xy 220.760936 66.50131) (xy 221.197151 66.50169) (xy 221.600306 66.33511) (xy 221.909026 66.026928)
+ (xy 222.07631 65.624064) (xy 222.07669 65.187849) (xy 222.07669 70.658348) (xy 222.032849 70.65831) (xy 221.629694 70.82489)
+ (xy 221.320974 71.133072) (xy 221.15369 71.535936) (xy 221.15331 71.972151) (xy 221.31989 72.375306) (xy 221.628072 72.684026)
+ (xy 222.030936 72.85131) (xy 222.467151 72.85169) (xy 222.870306 72.68511) (xy 223.179026 72.376928) (xy 223.34631 71.974064)
+ (xy 223.34669 71.537849) (xy 223.34669 73.198348) (xy 223.302849 73.19831) (xy 222.899694 73.36489) (xy 222.590974 73.673072)
+ (xy 222.42369 74.075936) (xy 222.42331 74.512151) (xy 222.58989 74.915306) (xy 222.898072 75.224026) (xy 223.300936 75.39131)
+ (xy 223.737151 75.39169) (xy 224.140306 75.22511) (xy 224.449026 74.916928) (xy 224.61631 74.514064) (xy 224.61669 74.077849)
+ (xy 224.61669 79.548348) (xy 224.572849 79.54831) (xy 224.169694 79.71489) (xy 223.860974 80.023072) (xy 223.69369 80.425936)
+ (xy 223.69331 80.862151) (xy 223.85989 81.265306) (xy 224.168072 81.574026) (xy 224.570936 81.74131) (xy 225.007151 81.74169)
+ (xy 225.410306 81.57511) (xy 225.719026 81.266928) (xy 225.88631 80.864064) (xy 225.88669 80.427849) (xy 225.88669 82.088348)
+ (xy 225.842849 82.08831) (xy 225.439694 82.25489) (xy 225.130974 82.563072) (xy 224.96369 82.965936) (xy 224.96331 83.402151)
+ (xy 225.12989 83.805306) (xy 225.438072 84.114026) (xy 225.840936 84.28131) (xy 226.277151 84.28169) (xy 226.680306 84.11511)
+ (xy 226.989026 83.806928) (xy 227.15631 83.404064) (xy 227.15669 82.967849) (xy 227.15669 88.438348) (xy 227.112849 88.43831)
+ (xy 226.709694 88.60489) (xy 226.400974 88.913072) (xy 226.23369 89.315936) (xy 226.23331 89.752151) (xy 226.39989 90.155306)
+ (xy 226.708072 90.464026) (xy 227.110936 90.63131) (xy 227.547151 90.63169) (xy 227.950306 90.46511) (xy 228.259026 90.156928)
+ (xy 228.42631 89.754064) (xy 228.42669 89.317849) (xy 228.42669 90.975413) (xy 228.400461 90.97497) (xy 227.994687 91.135066)
+ (xy 227.963257 91.156066) (xy 227.920177 91.359822) (xy 228.6 92.039645) (xy 229.279823 91.359822) (xy 229.279823 91.430532)
+ (xy 228.635355 92.075) (xy 229.315178 92.754823) (xy 229.518934 92.711743) (xy 229.692655 92.311613) (xy 229.70003 91.875461)
+ (xy 229.70003 97.328351) (xy 229.652849 97.32831) (xy 229.279823 97.48244) (xy 229.279823 92.790178) (xy 228.6 92.110355)
+ (xy 228.564645 92.14571) (xy 228.564645 92.075) (xy 227.884822 91.395177) (xy 227.681066 91.438257) (xy 227.507345 91.838387)
+ (xy 227.49997 92.274539) (xy 227.660066 92.680313) (xy 227.681066 92.711743) (xy 227.884822 92.754823) (xy 228.564645 92.075)
+ (xy 228.564645 92.14571) (xy 227.920177 92.790178) (xy 227.963257 92.993934) (xy 228.363387 93.167655) (xy 228.799539 93.17503)
+ (xy 229.205313 93.014934) (xy 229.236743 92.993934) (xy 229.279823 92.790178) (xy 229.279823 97.48244) (xy 229.249694 97.49489)
+ (xy 228.940974 97.803072) (xy 228.77369 98.205936) (xy 228.77331 98.642151) (xy 228.93989 99.045306) (xy 229.248072 99.354026)
+ (xy 229.650936 99.52131) (xy 230.087151 99.52169) (xy 230.490306 99.35511) (xy 230.799026 99.046928) (xy 230.96631 98.644064)
+ (xy 230.96669 98.207849) (xy 230.96669 99.868348) (xy 230.922849 99.86831) (xy 230.519694 100.03489) (xy 230.210974 100.343072)
+ (xy 230.04369 100.745936) (xy 230.04331 101.182151) (xy 230.20989 101.585306) (xy 230.518072 101.894026) (xy 230.920936 102.06131)
+ (xy 231.357151 102.06169) (xy 231.760306 101.89511) (xy 232.069026 101.586928) (xy 232.23631 101.184064) (xy 232.23669 100.747849)
+ (xy 232.23669 109.637849) (xy 232.07011 109.234694) (xy 231.761928 108.925974) (xy 231.359064 108.75869) (xy 230.96669 108.758348)
+ (xy 230.96669 107.097849) (xy 230.80011 106.694694) (xy 230.491928 106.385974) (xy 230.089064 106.21869) (xy 229.70003 106.218351)
+ (xy 229.70003 100.765461) (xy 229.539934 100.359687) (xy 229.518934 100.328257) (xy 229.315178 100.285177) (xy 229.279823 100.320532)
+ (xy 229.279823 100.249822) (xy 229.236743 100.046066) (xy 228.836613 99.872345) (xy 228.42669 99.865413) (xy 228.42669 98.207849)
+ (xy 228.26011 97.804694) (xy 227.951928 97.495974) (xy 227.549064 97.32869) (xy 227.15669 97.328348) (xy 227.15669 91.857849)
+ (xy 226.99011 91.454694) (xy 226.681928 91.145974) (xy 226.279064 90.97869) (xy 225.88669 90.978348) (xy 225.88669 89.317849)
+ (xy 225.72011 88.914694) (xy 225.411928 88.605974) (xy 225.009064 88.43869) (xy 224.61669 88.438348) (xy 224.61669 82.967849)
+ (xy 224.45011 82.564694) (xy 224.141928 82.255974) (xy 223.739064 82.08869) (xy 223.34669 82.088348) (xy 223.34669 80.427849)
+ (xy 223.18011 80.024694) (xy 222.871928 79.715974) (xy 222.469064 79.54869) (xy 222.07669 79.548348) (xy 222.07669 74.077849)
+ (xy 221.91011 73.674694) (xy 221.601928 73.365974) (xy 221.199064 73.19869) (xy 220.80669 73.198348) (xy 220.80669 71.537849)
+ (xy 220.64011 71.134694) (xy 220.331928 70.825974) (xy 219.929064 70.65869) (xy 219.53669 70.658348) (xy 219.53669 65.187849)
+ (xy 219.37011 64.784694) (xy 219.061928 64.475974) (xy 218.659064 64.30869) (xy 218.26669 64.308348) (xy 218.26669 62.647849)
+ (xy 218.10011 62.244694) (xy 217.791928 61.935974) (xy 217.389064 61.76869) (xy 216.952849 61.76831) (xy 216.549694 61.93489)
+ (xy 216.240974 62.243072) (xy 216.07369 62.645936) (xy 216.07331 63.082151) (xy 216.23989 63.485306) (xy 216.548072 63.794026)
+ (xy 216.950936 63.96131) (xy 217.387151 63.96169) (xy 217.790306 63.79511) (xy 218.099026 63.486928) (xy 218.26631 63.084064)
+ (xy 218.26669 62.647849) (xy 218.26669 64.308348) (xy 218.222849 64.30831) (xy 217.819694 64.47489) (xy 217.510974 64.783072)
+ (xy 217.34369 65.185936) (xy 217.34331 65.622151) (xy 217.50989 66.025306) (xy 217.818072 66.334026) (xy 218.220936 66.50131)
+ (xy 218.657151 66.50169) (xy 219.060306 66.33511) (xy 219.369026 66.026928) (xy 219.53631 65.624064) (xy 219.53669 65.187849)
+ (xy 219.53669 70.658348) (xy 219.492849 70.65831) (xy 219.089694 70.82489) (xy 218.780974 71.133072) (xy 218.61369 71.535936)
+ (xy 218.61331 71.972151) (xy 218.77989 72.375306) (xy 219.088072 72.684026) (xy 219.490936 72.85131) (xy 219.927151 72.85169)
+ (xy 220.330306 72.68511) (xy 220.639026 72.376928) (xy 220.80631 71.974064) (xy 220.80669 71.537849) (xy 220.80669 73.198348)
+ (xy 220.762849 73.19831) (xy 220.359694 73.36489) (xy 220.050974 73.673072) (xy 219.88369 74.075936) (xy 219.88331 74.512151)
+ (xy 220.04989 74.915306) (xy 220.358072 75.224026) (xy 220.760936 75.39131) (xy 221.197151 75.39169) (xy 221.600306 75.22511)
+ (xy 221.909026 74.916928) (xy 222.07631 74.514064) (xy 222.07669 74.077849) (xy 222.07669 79.548348) (xy 222.032849 79.54831)
+ (xy 221.629694 79.71489) (xy 221.320974 80.023072) (xy 221.197456 80.320535) (xy 221.173692 80.310668) (xy 220.788001 80.310332)
+ (xy 220.762488 80.320873) (xy 220.64011 80.024694) (xy 220.331928 79.715974) (xy 219.929064 79.54869) (xy 219.53669 79.548348)
+ (xy 219.53669 74.077849) (xy 219.37011 73.674694) (xy 219.061928 73.365974) (xy 218.659064 73.19869) (xy 218.26669 73.198348)
+ (xy 218.26669 71.537849) (xy 218.10011 71.134694) (xy 217.791928 70.825974) (xy 217.389064 70.65869) (xy 216.99669 70.658348)
+ (xy 216.99669 65.187849) (xy 216.83011 64.784694) (xy 216.521928 64.475974) (xy 216.119064 64.30869) (xy 215.72669 64.308348)
+ (xy 215.72669 62.647849) (xy 215.56011 62.244694) (xy 215.251928 61.935974) (xy 214.849064 61.76869) (xy 214.412849 61.76831)
+ (xy 214.009694 61.93489) (xy 213.700974 62.243072) (xy 213.53369 62.645936) (xy 213.53331 63.082151) (xy 213.69989 63.485306)
+ (xy 214.008072 63.794026) (xy 214.410936 63.96131) (xy 214.847151 63.96169) (xy 215.250306 63.79511) (xy 215.559026 63.486928)
+ (xy 215.72631 63.084064) (xy 215.72669 62.647849) (xy 215.72669 64.308348) (xy 215.682849 64.30831) (xy 215.279694 64.47489)
+ (xy 214.970974 64.783072) (xy 214.80369 65.185936) (xy 214.80331 65.622151) (xy 214.96989 66.025306) (xy 215.278072 66.334026)
+ (xy 215.680936 66.50131) (xy 216.117151 66.50169) (xy 216.520306 66.33511) (xy 216.829026 66.026928) (xy 216.99631 65.624064)
+ (xy 216.99669 65.187849) (xy 216.99669 70.658348) (xy 216.952849 70.65831) (xy 216.549694 70.82489) (xy 216.240974 71.133072)
+ (xy 216.162435 71.322212) (xy 216.093692 71.293668) (xy 215.708001 71.293332) (xy 215.637665 71.322393) (xy 215.56011 71.134694)
+ (xy 215.251928 70.825974) (xy 214.849064 70.65869) (xy 214.45669 70.658348) (xy 214.45669 65.187849) (xy 214.29011 64.784694)
+ (xy 213.981928 64.475974) (xy 213.579064 64.30869) (xy 213.18669 64.308348) (xy 213.18669 62.647849) (xy 213.02011 62.244694)
+ (xy 212.711928 61.935974) (xy 212.309064 61.76869) (xy 211.872849 61.76831) (xy 211.469694 61.93489) (xy 211.160974 62.243072)
+ (xy 210.99369 62.645936) (xy 210.99331 63.082151) (xy 211.15989 63.485306) (xy 211.468072 63.794026) (xy 211.870936 63.96131)
+ (xy 212.307151 63.96169) (xy 212.710306 63.79511) (xy 213.019026 63.486928) (xy 213.18631 63.084064) (xy 213.18669 62.647849)
+ (xy 213.18669 64.308348) (xy 213.142849 64.30831) (xy 212.739694 64.47489) (xy 212.430974 64.783072) (xy 212.26369 65.185936)
+ (xy 212.26331 65.622151) (xy 212.42989 66.025306) (xy 212.738072 66.334026) (xy 213.140936 66.50131) (xy 213.577151 66.50169)
+ (xy 213.980306 66.33511) (xy 214.289026 66.026928) (xy 214.45631 65.624064) (xy 214.45669 65.187849) (xy 214.45669 70.658348)
+ (xy 214.412849 70.65831) (xy 214.009694 70.82489) (xy 213.700974 71.133072) (xy 213.53369 71.535936) (xy 213.53331 71.972151)
+ (xy 213.69989 72.375306) (xy 214.008072 72.684026) (xy 214.410936 72.85131) (xy 214.847151 72.85169) (xy 215.058207 72.764483)
+ (xy 215.077618 72.81146) (xy 215.350105 73.084423) (xy 215.653539 73.21042) (xy 215.279694 73.36489) (xy 214.970974 73.673072)
+ (xy 214.80369 74.075936) (xy 214.80331 74.512151) (xy 214.96989 74.915306) (xy 215.278072 75.224026) (xy 215.680936 75.39131)
+ (xy 216.117151 75.39169) (xy 216.520306 75.22511) (xy 216.829026 74.916928) (xy 216.99631 74.514064) (xy 216.99669 74.077849)
+ (xy 216.83011 73.674694) (xy 216.521928 73.365974) (xy 216.14658 73.210115) (xy 216.44846 73.085382) (xy 216.721423 72.812895)
+ (xy 216.74157 72.764373) (xy 216.950936 72.85131) (xy 217.387151 72.85169) (xy 217.790306 72.68511) (xy 218.099026 72.376928)
+ (xy 218.26631 71.974064) (xy 218.26669 71.537849) (xy 218.26669 73.198348) (xy 218.222849 73.19831) (xy 217.819694 73.36489)
+ (xy 217.510974 73.673072) (xy 217.34369 74.075936) (xy 217.34331 74.512151) (xy 217.50989 74.915306) (xy 217.818072 75.224026)
+ (xy 218.220936 75.39131) (xy 218.657151 75.39169) (xy 219.060306 75.22511) (xy 219.369026 74.916928) (xy 219.53631 74.514064)
+ (xy 219.53669 74.077849) (xy 219.53669 79.548348) (xy 219.492849 79.54831) (xy 219.089694 79.71489) (xy 218.780974 80.023072)
+ (xy 218.61369 80.425936) (xy 218.61331 80.862151) (xy 218.77989 81.265306) (xy 219.088072 81.574026) (xy 219.490936 81.74131)
+ (xy 219.927151 81.74169) (xy 220.093385 81.673003) (xy 220.157618 81.82846) (xy 220.430105 82.101423) (xy 220.580237 82.163763)
+ (xy 220.359694 82.25489) (xy 220.050974 82.563072) (xy 219.88369 82.965936) (xy 219.88331 83.402151) (xy 220.04989 83.805306)
+ (xy 220.358072 84.114026) (xy 220.428613 84.143317) (xy 220.285577 84.286105) (xy 220.137668 84.642308) (xy 220.137332 85.027999)
+ (xy 220.284618 85.38446) (xy 220.557105 85.657423) (xy 220.913308 85.805332) (xy 221.298999 85.805668) (xy 221.65546 85.658382)
+ (xy 221.928423 85.385895) (xy 222.076332 85.029692) (xy 222.076668 84.644001) (xy 221.929382 84.28754) (xy 221.678916 84.036636)
+ (xy 221.909026 83.806928) (xy 222.07631 83.404064) (xy 222.07669 82.967849) (xy 221.91011 82.564694) (xy 221.601928 82.255974)
+ (xy 221.379882 82.163772) (xy 221.52846 82.102382) (xy 221.801423 81.829895) (xy 221.86655 81.673051) (xy 222.030936 81.74131)
+ (xy 222.467151 81.74169) (xy 222.870306 81.57511) (xy 223.179026 81.266928) (xy 223.34631 80.864064) (xy 223.34669 80.427849)
+ (xy 223.34669 82.088348) (xy 223.302849 82.08831) (xy 222.899694 82.25489) (xy 222.590974 82.563072) (xy 222.42369 82.965936)
+ (xy 222.42331 83.402151) (xy 222.58989 83.805306) (xy 222.898072 84.114026) (xy 223.300936 84.28131) (xy 223.737151 84.28169)
+ (xy 224.140306 84.11511) (xy 224.449026 83.806928) (xy 224.61631 83.404064) (xy 224.61669 82.967849) (xy 224.61669 88.438348)
+ (xy 224.572849 88.43831) (xy 224.169694 88.60489) (xy 223.860974 88.913072) (xy 223.69369 89.315936) (xy 223.69331 89.752151)
+ (xy 223.85989 90.155306) (xy 224.168072 90.464026) (xy 224.570936 90.63131) (xy 225.007151 90.63169) (xy 225.410306 90.46511)
+ (xy 225.719026 90.156928) (xy 225.88631 89.754064) (xy 225.88669 89.317849) (xy 225.88669 90.978348) (xy 225.842849 90.97831)
+ (xy 225.439694 91.14489) (xy 225.130974 91.453072) (xy 224.96369 91.855936) (xy 224.96331 92.292151) (xy 225.12989 92.695306)
+ (xy 225.438072 93.004026) (xy 225.840936 93.17131) (xy 226.277151 93.17169) (xy 226.680306 93.00511) (xy 226.989026 92.696928)
+ (xy 227.15631 92.294064) (xy 227.15669 91.857849) (xy 227.15669 97.328348) (xy 227.112849 97.32831) (xy 226.709694 97.49489)
+ (xy 226.400974 97.803072) (xy 226.23369 98.205936) (xy 226.23331 98.642151) (xy 226.39989 99.045306) (xy 226.708072 99.354026)
+ (xy 227.110936 99.52131) (xy 227.547151 99.52169) (xy 227.950306 99.35511) (xy 228.259026 99.046928) (xy 228.42631 98.644064)
+ (xy 228.42669 98.207849) (xy 228.42669 99.865413) (xy 228.400461 99.86497) (xy 227.994687 100.025066) (xy 227.963257 100.046066)
+ (xy 227.920177 100.249822) (xy 228.6 100.929645) (xy 229.279823 100.249822) (xy 229.279823 100.320532) (xy 228.635355 100.965)
+ (xy 229.315178 101.644823) (xy 229.518934 101.601743) (xy 229.692655 101.201613) (xy 229.70003 100.765461) (xy 229.70003 106.218351)
+ (xy 229.652849 106.21831) (xy 229.279823 106.37244) (xy 229.279823 101.680178) (xy 228.6 101.000355) (xy 228.585857 101.014497)
+ (xy 228.550502 100.979142) (xy 228.564645 100.965) (xy 227.884822 100.285177) (xy 227.681066 100.328257) (xy 227.592503 100.532241)
+ (xy 227.523692 100.503668) (xy 227.138001 100.503332) (xy 227.067665 100.532393) (xy 226.99011 100.344694) (xy 226.681928 100.035974)
+ (xy 226.279064 99.86869) (xy 225.88669 99.868348) (xy 225.88669 98.207849) (xy 225.72011 97.804694) (xy 225.411928 97.495974)
+ (xy 225.009064 97.32869) (xy 224.61669 97.328348) (xy 224.61669 91.857849) (xy 224.45011 91.454694) (xy 224.141928 91.145974)
+ (xy 223.739064 90.97869) (xy 223.34669 90.978348) (xy 223.34669 89.317849) (xy 223.18011 88.914694) (xy 222.871928 88.605974)
+ (xy 222.469064 88.43869) (xy 222.032849 88.43831) (xy 221.629694 88.60489) (xy 221.320974 88.913072) (xy 221.15369 89.315936)
+ (xy 221.15331 89.752151) (xy 221.31989 90.155306) (xy 221.628072 90.464026) (xy 222.030936 90.63131) (xy 222.467151 90.63169)
+ (xy 222.870306 90.46511) (xy 223.179026 90.156928) (xy 223.34631 89.754064) (xy 223.34669 89.317849) (xy 223.34669 90.978348)
+ (xy 223.302849 90.97831) (xy 222.899694 91.14489) (xy 222.590974 91.453072) (xy 222.42369 91.855936) (xy 222.42331 92.292151)
+ (xy 222.58989 92.695306) (xy 222.898072 93.004026) (xy 223.300936 93.17131) (xy 223.737151 93.17169) (xy 224.140306 93.00511)
+ (xy 224.449026 92.696928) (xy 224.61631 92.294064) (xy 224.61669 91.857849) (xy 224.61669 97.328348) (xy 224.572849 97.32831)
+ (xy 224.169694 97.49489) (xy 223.860974 97.803072) (xy 223.69369 98.205936) (xy 223.69331 98.642151) (xy 223.85989 99.045306)
+ (xy 224.168072 99.354026) (xy 224.570936 99.52131) (xy 225.007151 99.52169) (xy 225.410306 99.35511) (xy 225.719026 99.046928)
+ (xy 225.88631 98.644064) (xy 225.88669 98.207849) (xy 225.88669 99.868348) (xy 225.842849 99.86831) (xy 225.439694 100.03489)
+ (xy 225.130974 100.343072) (xy 224.96369 100.745936) (xy 224.96331 101.182151) (xy 225.12989 101.585306) (xy 225.438072 101.894026)
+ (xy 225.840936 102.06131) (xy 226.277151 102.06169) (xy 226.488207 101.974483) (xy 226.507618 102.02146) (xy 226.780105 102.294423)
+ (xy 227.136308 102.442332) (xy 227.521999 102.442668) (xy 227.87846 102.295382) (xy 228.151423 102.022895) (xy 228.17157 101.974375)
+ (xy 228.363387 102.057655) (xy 228.799539 102.06503) (xy 229.205313 101.904934) (xy 229.236743 101.883934) (xy 229.279823 101.680178)
+ (xy 229.279823 106.37244) (xy 229.249694 106.38489) (xy 228.940974 106.693072) (xy 228.77369 107.095936) (xy 228.77331 107.532151)
+ (xy 228.93989 107.935306) (xy 229.248072 108.244026) (xy 229.650936 108.41131) (xy 230.087151 108.41169) (xy 230.490306 108.24511)
+ (xy 230.799026 107.936928) (xy 230.96631 107.534064) (xy 230.96669 107.097849) (xy 230.96669 108.758348) (xy 230.922849 108.75831)
+ (xy 230.519694 108.92489) (xy 230.210974 109.233072) (xy 230.04369 109.635936) (xy 230.04331 110.072151) (xy 230.20989 110.475306)
+ (xy 230.518072 110.784026) (xy 230.920936 110.95131) (xy 231.357151 110.95169) (xy 231.760306 110.78511) (xy 232.069026 110.476928)
+ (xy 232.23631 110.074064) (xy 232.23669 109.637849) (xy 232.23669 118.527849) (xy 232.07011 118.124694) (xy 231.761928 117.815974)
+ (xy 231.359064 117.64869) (xy 230.96669 117.648348) (xy 230.96669 115.987849) (xy 230.80011 115.584694) (xy 230.491928 115.275974)
+ (xy 230.089064 115.10869) (xy 229.70003 115.108351) (xy 229.70003 109.655461) (xy 229.539934 109.249687) (xy 229.518934 109.218257)
+ (xy 229.315178 109.175177) (xy 229.279823 109.210532) (xy 229.279823 109.139822) (xy 229.236743 108.936066) (xy 228.836613 108.762345)
+ (xy 228.42669 108.755413) (xy 228.42669 107.097849) (xy 228.26011 106.694694) (xy 227.951928 106.385974) (xy 227.549064 106.21869)
+ (xy 227.112849 106.21831) (xy 226.709694 106.38489) (xy 226.400974 106.693072) (xy 226.23369 107.095936) (xy 226.23331 107.532151)
+ (xy 226.39989 107.935306) (xy 226.708072 108.244026) (xy 227.110936 108.41131) (xy 227.547151 108.41169) (xy 227.950306 108.24511)
+ (xy 228.259026 107.936928) (xy 228.42631 107.534064) (xy 228.42669 107.097849) (xy 228.42669 108.755413) (xy 228.400461 108.75497)
+ (xy 227.994687 108.915066) (xy 227.963257 108.936066) (xy 227.920177 109.139822) (xy 228.6 109.819645) (xy 229.279823 109.139822)
+ (xy 229.279823 109.210532) (xy 228.635355 109.855) (xy 229.315178 110.534823) (xy 229.518934 110.491743) (xy 229.692655 110.091613)
+ (xy 229.70003 109.655461) (xy 229.70003 115.108351) (xy 229.652849 115.10831) (xy 229.279823 115.26244) (xy 229.279823 110.570178)
+ (xy 228.6 109.890355) (xy 228.564645 109.92571) (xy 228.564645 109.855) (xy 227.884822 109.175177) (xy 227.681066 109.218257)
+ (xy 227.507345 109.618387) (xy 227.49997 110.054539) (xy 227.660066 110.460313) (xy 227.681066 110.491743) (xy 227.884822 110.534823)
+ (xy 228.564645 109.855) (xy 228.564645 109.92571) (xy 227.920177 110.570178) (xy 227.963257 110.773934) (xy 228.363387 110.947655)
+ (xy 228.799539 110.95503) (xy 229.205313 110.794934) (xy 229.236743 110.773934) (xy 229.279823 110.570178) (xy 229.279823 115.26244)
+ (xy 229.249694 115.27489) (xy 228.940974 115.583072) (xy 228.77369 115.985936) (xy 228.77331 116.422151) (xy 228.93989 116.825306)
+ (xy 229.248072 117.134026) (xy 229.650936 117.30131) (xy 230.087151 117.30169) (xy 230.490306 117.13511) (xy 230.799026 116.826928)
+ (xy 230.96631 116.424064) (xy 230.96669 115.987849) (xy 230.96669 117.648348) (xy 230.922849 117.64831) (xy 230.519694 117.81489)
+ (xy 230.210974 118.123072) (xy 230.04369 118.525936) (xy 230.04331 118.962151) (xy 230.20989 119.365306) (xy 230.518072 119.674026)
+ (xy 230.920936 119.84131) (xy 231.357151 119.84169) (xy 231.760306 119.67511) (xy 232.069026 119.366928) (xy 232.23631 118.964064)
+ (xy 232.23669 118.527849) (xy 232.23669 127.417849) (xy 232.07011 127.014694) (xy 231.761928 126.705974) (xy 231.359064 126.53869)
+ (xy 230.96669 126.538348) (xy 230.96669 124.877849) (xy 230.80011 124.474694) (xy 230.491928 124.165974) (xy 230.089064 123.99869)
+ (xy 229.70003 123.998351) (xy 229.70003 118.545461) (xy 229.539934 118.139687) (xy 229.518934 118.108257) (xy 229.315178 118.065177)
+ (xy 229.279823 118.100532) (xy 229.279823 118.029822) (xy 229.236743 117.826066) (xy 228.836613 117.652345) (xy 228.42669 117.645413)
+ (xy 228.42669 115.987849) (xy 228.26011 115.584694) (xy 227.951928 115.275974) (xy 227.549064 115.10869) (xy 227.15669 115.108348)
+ (xy 227.15669 109.637849) (xy 226.99011 109.234694) (xy 226.681928 108.925974) (xy 226.279064 108.75869) (xy 225.88669 108.758348)
+ (xy 225.88669 107.097849) (xy 225.72011 106.694694) (xy 225.411928 106.385974) (xy 225.009064 106.21869) (xy 224.61669 106.218348)
+ (xy 224.61669 100.747849) (xy 224.45011 100.344694) (xy 224.141928 100.035974) (xy 223.739064 99.86869) (xy 223.34669 99.868348)
+ (xy 223.34669 98.207849) (xy 223.18011 97.804694) (xy 222.871928 97.495974) (xy 222.469064 97.32869) (xy 222.07669 97.328348)
+ (xy 222.07669 91.857849) (xy 221.91011 91.454694) (xy 221.601928 91.145974) (xy 221.199064 90.97869) (xy 220.80669 90.978348)
+ (xy 220.80669 89.317849) (xy 220.64011 88.914694) (xy 220.331928 88.605974) (xy 219.929064 88.43869) (xy 219.53669 88.438348)
+ (xy 219.53669 82.967849) (xy 219.37011 82.564694) (xy 219.061928 82.255974) (xy 218.659064 82.08869) (xy 218.26669 82.088348)
+ (xy 218.26669 80.427849) (xy 218.10011 80.024694) (xy 217.791928 79.715974) (xy 217.389064 79.54869) (xy 216.952849 79.54831)
+ (xy 216.549694 79.71489) (xy 216.240974 80.023072) (xy 216.07369 80.425936) (xy 216.07331 80.862151) (xy 216.23989 81.265306)
+ (xy 216.548072 81.574026) (xy 216.950936 81.74131) (xy 217.387151 81.74169) (xy 217.790306 81.57511) (xy 218.099026 81.266928)
+ (xy 218.26631 80.864064) (xy 218.26669 80.427849) (xy 218.26669 82.088348) (xy 218.222849 82.08831) (xy 217.819694 82.25489)
+ (xy 217.510974 82.563072) (xy 217.34369 82.965936) (xy 217.34331 83.402151) (xy 217.50989 83.805306) (xy 217.818072 84.114026)
+ (xy 218.220936 84.28131) (xy 218.657151 84.28169) (xy 219.060306 84.11511) (xy 219.369026 83.806928) (xy 219.53631 83.404064)
+ (xy 219.53669 82.967849) (xy 219.53669 88.438348) (xy 219.492849 88.43831) (xy 219.409668 88.472679) (xy 219.409668 87.184001)
+ (xy 219.262382 86.82754) (xy 218.989895 86.554577) (xy 218.633692 86.406668) (xy 218.248001 86.406332) (xy 217.89154 86.553618)
+ (xy 217.618577 86.826105) (xy 217.470668 87.182308) (xy 217.470332 87.567999) (xy 217.617618 87.92446) (xy 217.890105 88.197423)
+ (xy 218.246308 88.345332) (xy 218.631999 88.345668) (xy 218.98846 88.198382) (xy 219.261423 87.925895) (xy 219.409332 87.569692)
+ (xy 219.409668 87.184001) (xy 219.409668 88.472679) (xy 219.089694 88.60489) (xy 218.780974 88.913072) (xy 218.61369 89.315936)
+ (xy 218.61331 89.752151) (xy 218.77989 90.155306) (xy 219.088072 90.464026) (xy 219.490936 90.63131) (xy 219.927151 90.63169)
+ (xy 220.330306 90.46511) (xy 220.639026 90.156928) (xy 220.80631 89.754064) (xy 220.80669 89.317849) (xy 220.80669 90.978348)
+ (xy 220.762849 90.97831) (xy 220.359694 91.14489) (xy 220.050974 91.453072) (xy 219.88369 91.855936) (xy 219.88331 92.292151)
+ (xy 220.04989 92.695306) (xy 220.358072 93.004026) (xy 220.760936 93.17131) (xy 221.197151 93.17169) (xy 221.600306 93.00511)
+ (xy 221.909026 92.696928) (xy 222.07631 92.294064) (xy 222.07669 91.857849) (xy 222.07669 97.328348) (xy 222.032849 97.32831)
+ (xy 221.629694 97.49489) (xy 221.320974 97.803072) (xy 221.15369 98.205936) (xy 221.15331 98.642151) (xy 221.31989 99.045306)
+ (xy 221.628072 99.354026) (xy 222.030936 99.52131) (xy 222.467151 99.52169) (xy 222.870306 99.35511) (xy 223.179026 99.046928)
+ (xy 223.34631 98.644064) (xy 223.34669 98.207849) (xy 223.34669 99.868348) (xy 223.302849 99.86831) (xy 222.899694 100.03489)
+ (xy 222.590974 100.343072) (xy 222.42369 100.745936) (xy 222.42331 101.182151) (xy 222.58989 101.585306) (xy 222.898072 101.894026)
+ (xy 223.300936 102.06131) (xy 223.737151 102.06169) (xy 224.140306 101.89511) (xy 224.449026 101.586928) (xy 224.61631 101.184064)
+ (xy 224.61669 100.747849) (xy 224.61669 106.218348) (xy 224.572849 106.21831) (xy 224.169694 106.38489) (xy 223.860974 106.693072)
+ (xy 223.69369 107.095936) (xy 223.69331 107.532151) (xy 223.85989 107.935306) (xy 224.168072 108.244026) (xy 224.570936 108.41131)
+ (xy 225.007151 108.41169) (xy 225.410306 108.24511) (xy 225.719026 107.936928) (xy 225.88631 107.534064) (xy 225.88669 107.097849)
+ (xy 225.88669 108.758348) (xy 225.842849 108.75831) (xy 225.439694 108.92489) (xy 225.130974 109.233072) (xy 224.96369 109.635936)
+ (xy 224.96331 110.072151) (xy 225.12989 110.475306) (xy 225.438072 110.784026) (xy 225.840936 110.95131) (xy 226.277151 110.95169)
+ (xy 226.680306 110.78511) (xy 226.989026 110.476928) (xy 227.15631 110.074064) (xy 227.15669 109.637849) (xy 227.15669 115.108348)
+ (xy 227.112849 115.10831) (xy 226.709694 115.27489) (xy 226.400974 115.583072) (xy 226.23369 115.985936) (xy 226.23331 116.422151)
+ (xy 226.39989 116.825306) (xy 226.708072 117.134026) (xy 227.110936 117.30131) (xy 227.547151 117.30169) (xy 227.950306 117.13511)
+ (xy 228.259026 116.826928) (xy 228.42631 116.424064) (xy 228.42669 115.987849) (xy 228.42669 117.645413) (xy 228.400461 117.64497)
+ (xy 227.994687 117.805066) (xy 227.963257 117.826066) (xy 227.920177 118.029822) (xy 228.6 118.709645) (xy 229.279823 118.029822)
+ (xy 229.279823 118.100532) (xy 228.635355 118.745) (xy 229.315178 119.424823) (xy 229.518934 119.381743) (xy 229.692655 118.981613)
+ (xy 229.70003 118.545461) (xy 229.70003 123.998351) (xy 229.652849 123.99831) (xy 229.279823 124.15244) (xy 229.279823 119.460178)
+ (xy 228.6 118.780355) (xy 228.564645 118.81571) (xy 228.564645 118.745) (xy 227.884822 118.065177) (xy 227.681066 118.108257)
+ (xy 227.507345 118.508387) (xy 227.49997 118.944539) (xy 227.660066 119.350313) (xy 227.681066 119.381743) (xy 227.884822 119.424823)
+ (xy 228.564645 118.745) (xy 228.564645 118.81571) (xy 227.920177 119.460178) (xy 227.963257 119.663934) (xy 228.363387 119.837655)
+ (xy 228.799539 119.84503) (xy 229.205313 119.684934) (xy 229.236743 119.663934) (xy 229.279823 119.460178) (xy 229.279823 124.15244)
+ (xy 229.249694 124.16489) (xy 228.940974 124.473072) (xy 228.77369 124.875936) (xy 228.77331 125.312151) (xy 228.93989 125.715306)
+ (xy 229.248072 126.024026) (xy 229.650936 126.19131) (xy 230.087151 126.19169) (xy 230.490306 126.02511) (xy 230.799026 125.716928)
+ (xy 230.96631 125.314064) (xy 230.96669 124.877849) (xy 230.96669 126.538348) (xy 230.922849 126.53831) (xy 230.519694 126.70489)
+ (xy 230.210974 127.013072) (xy 230.04369 127.415936) (xy 230.04331 127.852151) (xy 230.20989 128.255306) (xy 230.518072 128.564026)
+ (xy 230.920936 128.73131) (xy 231.357151 128.73169) (xy 231.760306 128.56511) (xy 232.069026 128.256928) (xy 232.23631 127.854064)
+ (xy 232.23669 127.417849) (xy 232.23669 133.7394) (xy 229.70003 133.7394) (xy 229.70003 127.435461) (xy 229.539934 127.029687)
+ (xy 229.518934 126.998257) (xy 229.315178 126.955177) (xy 229.279823 126.990532) (xy 229.279823 126.919822) (xy 229.236743 126.716066)
+ (xy 228.836613 126.542345) (xy 228.42669 126.535413) (xy 228.42669 124.877849) (xy 228.26011 124.474694) (xy 227.951928 124.165974)
+ (xy 227.549064 123.99869) (xy 227.15669 123.998348) (xy 227.15669 118.527849) (xy 226.99011 118.124694) (xy 226.681928 117.815974)
+ (xy 226.279064 117.64869) (xy 225.88669 117.648348) (xy 225.88669 115.987849) (xy 225.72011 115.584694) (xy 225.411928 115.275974)
+ (xy 225.009064 115.10869) (xy 224.61669 115.108348) (xy 224.61669 109.637849) (xy 224.45011 109.234694) (xy 224.141928 108.925974)
+ (xy 223.739064 108.75869) (xy 223.34669 108.758348) (xy 223.34669 107.097849) (xy 223.18011 106.694694) (xy 222.871928 106.385974)
+ (xy 222.469064 106.21869) (xy 222.07669 106.218348) (xy 222.07669 100.747849) (xy 221.91011 100.344694) (xy 221.601928 100.035974)
+ (xy 221.199064 99.86869) (xy 220.80669 99.868348) (xy 220.80669 98.207849) (xy 220.64011 97.804694) (xy 220.331928 97.495974)
+ (xy 219.929064 97.32869) (xy 219.53669 97.328348) (xy 219.53669 91.857849) (xy 219.37011 91.454694) (xy 219.061928 91.145974)
+ (xy 218.659064 90.97869) (xy 218.26669 90.978348) (xy 218.26669 89.317849) (xy 218.10011 88.914694) (xy 217.791928 88.605974)
+ (xy 217.389064 88.43869) (xy 216.99669 88.438348) (xy 216.99669 82.967849) (xy 216.83011 82.564694) (xy 216.521928 82.255974)
+ (xy 216.119064 82.08869) (xy 215.72669 82.088348) (xy 215.72669 80.427849) (xy 215.56011 80.024694) (xy 215.251928 79.715974)
+ (xy 214.849064 79.54869) (xy 214.45669 79.548348) (xy 214.45669 74.077849) (xy 214.29011 73.674694) (xy 213.981928 73.365974)
+ (xy 213.579064 73.19869) (xy 213.18669 73.198348) (xy 213.18669 71.537849) (xy 213.02011 71.134694) (xy 212.711928 70.825974)
+ (xy 212.309064 70.65869) (xy 211.91669 70.658348) (xy 211.91669 65.187849) (xy 211.75011 64.784694) (xy 211.441928 64.475974)
+ (xy 211.039064 64.30869) (xy 210.64669 64.308348) (xy 210.64669 62.647849) (xy 210.48011 62.244694) (xy 210.171928 61.935974)
+ (xy 209.769064 61.76869) (xy 209.332849 61.76831) (xy 208.929694 61.93489) (xy 208.620974 62.243072) (xy 208.45369 62.645936)
+ (xy 208.45331 63.082151) (xy 208.61989 63.485306) (xy 208.928072 63.794026) (xy 209.330936 63.96131) (xy 209.767151 63.96169)
+ (xy 210.170306 63.79511) (xy 210.479026 63.486928) (xy 210.64631 63.084064) (xy 210.64669 62.647849) (xy 210.64669 64.308348)
+ (xy 210.602849 64.30831) (xy 210.199694 64.47489) (xy 209.890974 64.783072) (xy 209.72369 65.185936) (xy 209.72331 65.622151)
+ (xy 209.88989 66.025306) (xy 210.198072 66.334026) (xy 210.600936 66.50131) (xy 211.037151 66.50169) (xy 211.440306 66.33511)
+ (xy 211.749026 66.026928) (xy 211.91631 65.624064) (xy 211.91669 65.187849) (xy 211.91669 70.658348) (xy 211.872849 70.65831)
+ (xy 211.469694 70.82489) (xy 211.160974 71.133072) (xy 210.99369 71.535936) (xy 210.99331 71.972151) (xy 211.15989 72.375306)
+ (xy 211.468072 72.684026) (xy 211.870936 72.85131) (xy 212.307151 72.85169) (xy 212.710306 72.68511) (xy 213.019026 72.376928)
+ (xy 213.18631 71.974064) (xy 213.18669 71.537849) (xy 213.18669 73.198348) (xy 213.142849 73.19831) (xy 212.739694 73.36489)
+ (xy 212.430974 73.673072) (xy 212.26369 74.075936) (xy 212.26331 74.512151) (xy 212.42989 74.915306) (xy 212.738072 75.224026)
+ (xy 213.140936 75.39131) (xy 213.577151 75.39169) (xy 213.980306 75.22511) (xy 214.289026 74.916928) (xy 214.45631 74.514064)
+ (xy 214.45669 74.077849) (xy 214.45669 79.548348) (xy 214.412849 79.54831) (xy 214.009694 79.71489) (xy 213.700974 80.023072)
+ (xy 213.53369 80.425936) (xy 213.53331 80.862151) (xy 213.69989 81.265306) (xy 214.008072 81.574026) (xy 214.410936 81.74131)
+ (xy 214.847151 81.74169) (xy 215.250306 81.57511) (xy 215.559026 81.266928) (xy 215.72631 80.864064) (xy 215.72669 80.427849)
+ (xy 215.72669 82.088348) (xy 215.682849 82.08831) (xy 215.279694 82.25489) (xy 214.970974 82.563072) (xy 214.80369 82.965936)
+ (xy 214.80331 83.402151) (xy 214.96989 83.805306) (xy 215.278072 84.114026) (xy 215.680936 84.28131) (xy 216.117151 84.28169)
+ (xy 216.520306 84.11511) (xy 216.829026 83.806928) (xy 216.99631 83.404064) (xy 216.99669 82.967849) (xy 216.99669 88.438348)
+ (xy 216.952849 88.43831) (xy 216.549694 88.60489) (xy 216.240974 88.913072) (xy 216.07369 89.315936) (xy 216.07331 89.752151)
+ (xy 216.23989 90.155306) (xy 216.548072 90.464026) (xy 216.950936 90.63131) (xy 217.387151 90.63169) (xy 217.790306 90.46511)
+ (xy 218.099026 90.156928) (xy 218.26631 89.754064) (xy 218.26669 89.317849) (xy 218.26669 90.978348) (xy 218.222849 90.97831)
+ (xy 217.819694 91.14489) (xy 217.510974 91.453072) (xy 217.34369 91.855936) (xy 217.34331 92.292151) (xy 217.50989 92.695306)
+ (xy 217.818072 93.004026) (xy 218.220936 93.17131) (xy 218.657151 93.17169) (xy 219.060306 93.00511) (xy 219.369026 92.696928)
+ (xy 219.53631 92.294064) (xy 219.53669 91.857849) (xy 219.53669 97.328348) (xy 219.492849 97.32831) (xy 219.089694 97.49489)
+ (xy 218.780974 97.803072) (xy 218.61369 98.205936) (xy 218.61331 98.642151) (xy 218.77989 99.045306) (xy 219.088072 99.354026)
+ (xy 219.490936 99.52131) (xy 219.927151 99.52169) (xy 220.330306 99.35511) (xy 220.639026 99.046928) (xy 220.80631 98.644064)
+ (xy 220.80669 98.207849) (xy 220.80669 99.868348) (xy 220.762849 99.86831) (xy 220.359694 100.03489) (xy 220.050974 100.343072)
+ (xy 219.88369 100.745936) (xy 219.88331 101.182151) (xy 220.04989 101.585306) (xy 220.358072 101.894026) (xy 220.760936 102.06131)
+ (xy 221.197151 102.06169) (xy 221.600306 101.89511) (xy 221.909026 101.586928) (xy 222.07631 101.184064) (xy 222.07669 100.747849)
+ (xy 222.07669 106.218348) (xy 222.032849 106.21831) (xy 221.629694 106.38489) (xy 221.320974 106.693072) (xy 221.15369 107.095936)
+ (xy 221.15331 107.532151) (xy 221.31989 107.935306) (xy 221.628072 108.244026) (xy 222.030936 108.41131) (xy 222.467151 108.41169)
+ (xy 222.870306 108.24511) (xy 223.179026 107.936928) (xy 223.34631 107.534064) (xy 223.34669 107.097849) (xy 223.34669 108.758348)
+ (xy 223.302849 108.75831) (xy 222.899694 108.92489) (xy 222.590974 109.233072) (xy 222.42369 109.635936) (xy 222.42331 110.072151)
+ (xy 222.58989 110.475306) (xy 222.898072 110.784026) (xy 223.300936 110.95131) (xy 223.737151 110.95169) (xy 224.140306 110.78511)
+ (xy 224.449026 110.476928) (xy 224.61631 110.074064) (xy 224.61669 109.637849) (xy 224.61669 115.108348) (xy 224.572849 115.10831)
+ (xy 224.169694 115.27489) (xy 223.860974 115.583072) (xy 223.69369 115.985936) (xy 223.69331 116.422151) (xy 223.85989 116.825306)
+ (xy 224.168072 117.134026) (xy 224.570936 117.30131) (xy 225.007151 117.30169) (xy 225.410306 117.13511) (xy 225.719026 116.826928)
+ (xy 225.88631 116.424064) (xy 225.88669 115.987849) (xy 225.88669 117.648348) (xy 225.842849 117.64831) (xy 225.439694 117.81489)
+ (xy 225.130974 118.123072) (xy 224.96369 118.525936) (xy 224.96331 118.962151) (xy 225.12989 119.365306) (xy 225.438072 119.674026)
+ (xy 225.840936 119.84131) (xy 226.277151 119.84169) (xy 226.680306 119.67511) (xy 226.989026 119.366928) (xy 227.15631 118.964064)
+ (xy 227.15669 118.527849) (xy 227.15669 123.998348) (xy 227.112849 123.99831) (xy 226.709694 124.16489) (xy 226.400974 124.473072)
+ (xy 226.23369 124.875936) (xy 226.23331 125.312151) (xy 226.39989 125.715306) (xy 226.708072 126.024026) (xy 227.110936 126.19131)
+ (xy 227.547151 126.19169) (xy 227.950306 126.02511) (xy 228.259026 125.716928) (xy 228.42631 125.314064) (xy 228.42669 124.877849)
+ (xy 228.42669 126.535413) (xy 228.400461 126.53497) (xy 227.994687 126.695066) (xy 227.963257 126.716066) (xy 227.920177 126.919822)
+ (xy 228.6 127.599645) (xy 229.279823 126.919822) (xy 229.279823 126.990532) (xy 228.635355 127.635) (xy 229.315178 128.314823)
+ (xy 229.518934 128.271743) (xy 229.692655 127.871613) (xy 229.70003 127.435461) (xy 229.70003 133.7394) (xy 229.279823 133.7394)
+ (xy 229.279823 128.350178) (xy 228.6 127.670355) (xy 228.564645 127.70571) (xy 228.564645 127.635) (xy 227.884822 126.955177)
+ (xy 227.681066 126.998257) (xy 227.507345 127.398387) (xy 227.49997 127.834539) (xy 227.660066 128.240313) (xy 227.681066 128.271743)
+ (xy 227.884822 128.314823) (xy 228.564645 127.635) (xy 228.564645 127.70571) (xy 227.920177 128.350178) (xy 227.963257 128.553934)
+ (xy 228.363387 128.727655) (xy 228.799539 128.73503) (xy 229.205313 128.574934) (xy 229.236743 128.553934) (xy 229.279823 128.350178)
+ (xy 229.279823 133.7394) (xy 227.15669 133.7394) (xy 227.15669 127.417849) (xy 226.99011 127.014694) (xy 226.681928 126.705974)
+ (xy 226.279064 126.53869) (xy 225.88669 126.538348) (xy 225.88669 124.877849) (xy 225.72011 124.474694) (xy 225.411928 124.165974)
+ (xy 225.009064 123.99869) (xy 224.61669 123.998348) (xy 224.61669 118.527849) (xy 224.45011 118.124694) (xy 224.141928 117.815974)
+ (xy 223.739064 117.64869) (xy 223.34669 117.648348) (xy 223.34669 115.987849) (xy 223.18011 115.584694) (xy 222.871928 115.275974)
+ (xy 222.469064 115.10869) (xy 222.07669 115.108348) (xy 222.07669 109.637849) (xy 221.91011 109.234694) (xy 221.601928 108.925974)
+ (xy 221.199064 108.75869) (xy 220.80669 108.758348) (xy 220.80669 107.097849) (xy 220.64011 106.694694) (xy 220.331928 106.385974)
+ (xy 219.929064 106.21869) (xy 219.53669 106.218348) (xy 219.53669 100.747849) (xy 219.37011 100.344694) (xy 219.061928 100.035974)
+ (xy 218.659064 99.86869) (xy 218.26669 99.868348) (xy 218.26669 98.207849) (xy 218.10011 97.804694) (xy 217.791928 97.495974)
+ (xy 217.389064 97.32869) (xy 216.99669 97.328348) (xy 216.99669 91.857849) (xy 216.83011 91.454694) (xy 216.521928 91.145974)
+ (xy 216.119064 90.97869) (xy 215.72669 90.978348) (xy 215.72669 89.317849) (xy 215.599668 89.010431) (xy 215.599668 85.152001)
+ (xy 215.452382 84.79554) (xy 215.179895 84.522577) (xy 214.823692 84.374668) (xy 214.45669 84.374348) (xy 214.45669 82.967849)
+ (xy 214.29011 82.564694) (xy 213.981928 82.255974) (xy 213.579064 82.08869) (xy 213.18669 82.088348) (xy 213.18669 80.427849)
+ (xy 213.02011 80.024694) (xy 212.711928 79.715974) (xy 212.309064 79.54869) (xy 211.91669 79.548348) (xy 211.91669 74.077849)
+ (xy 211.75011 73.674694) (xy 211.441928 73.365974) (xy 211.039064 73.19869) (xy 210.64669 73.198348) (xy 210.64669 71.537849)
+ (xy 210.48011 71.134694) (xy 210.171928 70.825974) (xy 209.769064 70.65869) (xy 209.37669 70.658348) (xy 209.37669 65.187849)
+ (xy 209.21011 64.784694) (xy 208.901928 64.475974) (xy 208.499064 64.30869) (xy 208.10669 64.308348) (xy 208.10669 62.647849)
+ (xy 207.94011 62.244694) (xy 207.631928 61.935974) (xy 207.229064 61.76869) (xy 206.792849 61.76831) (xy 206.389694 61.93489)
+ (xy 206.080974 62.243072) (xy 205.91369 62.645936) (xy 205.91331 63.082151) (xy 206.07989 63.485306) (xy 206.388072 63.794026)
+ (xy 206.790936 63.96131) (xy 207.227151 63.96169) (xy 207.630306 63.79511) (xy 207.939026 63.486928) (xy 208.10631 63.084064)
+ (xy 208.10669 62.647849) (xy 208.10669 64.308348) (xy 208.062849 64.30831) (xy 207.659694 64.47489) (xy 207.350974 64.783072)
+ (xy 207.18369 65.185936) (xy 207.18331 65.622151) (xy 207.34989 66.025306) (xy 207.658072 66.334026) (xy 208.060936 66.50131)
+ (xy 208.497151 66.50169) (xy 208.900306 66.33511) (xy 209.209026 66.026928) (xy 209.37631 65.624064) (xy 209.37669 65.187849)
+ (xy 209.37669 70.658348) (xy 209.332849 70.65831) (xy 208.929694 70.82489) (xy 208.620974 71.133072) (xy 208.45369 71.535936)
+ (xy 208.45331 71.972151) (xy 208.61989 72.375306) (xy 208.928072 72.684026) (xy 209.330936 72.85131) (xy 209.767151 72.85169)
+ (xy 210.170306 72.68511) (xy 210.479026 72.376928) (xy 210.64631 71.974064) (xy 210.64669 71.537849) (xy 210.64669 73.198348)
+ (xy 210.602849 73.19831) (xy 210.199694 73.36489) (xy 209.890974 73.673072) (xy 209.72369 74.075936) (xy 209.72331 74.512151)
+ (xy 209.88989 74.915306) (xy 210.198072 75.224026) (xy 210.600936 75.39131) (xy 211.037151 75.39169) (xy 211.440306 75.22511)
+ (xy 211.749026 74.916928) (xy 211.91631 74.514064) (xy 211.91669 74.077849) (xy 211.91669 79.548348) (xy 211.872849 79.54831)
+ (xy 211.469694 79.71489) (xy 211.160974 80.023072) (xy 210.99369 80.425936) (xy 210.99331 80.862151) (xy 211.15989 81.265306)
+ (xy 211.468072 81.574026) (xy 211.870936 81.74131) (xy 212.307151 81.74169) (xy 212.710306 81.57511) (xy 213.019026 81.266928)
+ (xy 213.18631 80.864064) (xy 213.18669 80.427849) (xy 213.18669 82.088348) (xy 213.142849 82.08831) (xy 212.739694 82.25489)
+ (xy 212.430974 82.563072) (xy 212.26369 82.965936) (xy 212.26331 83.402151) (xy 212.42989 83.805306) (xy 212.738072 84.114026)
+ (xy 213.140936 84.28131) (xy 213.577151 84.28169) (xy 213.980306 84.11511) (xy 214.289026 83.806928) (xy 214.45631 83.404064)
+ (xy 214.45669 82.967849) (xy 214.45669 84.374348) (xy 214.438001 84.374332) (xy 214.08154 84.521618) (xy 213.808577 84.794105)
+ (xy 213.660668 85.150308) (xy 213.660332 85.535999) (xy 213.807618 85.89246) (xy 214.080105 86.165423) (xy 214.436308 86.313332)
+ (xy 214.821999 86.313668) (xy 215.17846 86.166382) (xy 215.451423 85.893895) (xy 215.599332 85.537692) (xy 215.599668 85.152001)
+ (xy 215.599668 89.010431) (xy 215.56011 88.914694) (xy 215.251928 88.605974) (xy 214.849064 88.43869) (xy 214.412849 88.43831)
+ (xy 214.009694 88.60489) (xy 213.700974 88.913072) (xy 213.53369 89.315936) (xy 213.53331 89.752151) (xy 213.69989 90.155306)
+ (xy 214.008072 90.464026) (xy 214.410936 90.63131) (xy 214.847151 90.63169) (xy 215.250306 90.46511) (xy 215.559026 90.156928)
+ (xy 215.72631 89.754064) (xy 215.72669 89.317849) (xy 215.72669 90.978348) (xy 215.682849 90.97831) (xy 215.279694 91.14489)
+ (xy 214.970974 91.453072) (xy 214.80369 91.855936) (xy 214.80331 92.292151) (xy 214.96989 92.695306) (xy 215.278072 93.004026)
+ (xy 215.680936 93.17131) (xy 216.117151 93.17169) (xy 216.520306 93.00511) (xy 216.829026 92.696928) (xy 216.99631 92.294064)
+ (xy 216.99669 91.857849) (xy 216.99669 97.328348) (xy 216.952849 97.32831) (xy 216.549694 97.49489) (xy 216.240974 97.803072)
+ (xy 216.07369 98.205936) (xy 216.07331 98.642151) (xy 216.23989 99.045306) (xy 216.548072 99.354026) (xy 216.950936 99.52131)
+ (xy 217.387151 99.52169) (xy 217.790306 99.35511) (xy 218.099026 99.046928) (xy 218.26631 98.644064) (xy 218.26669 98.207849)
+ (xy 218.26669 99.868348) (xy 218.222849 99.86831) (xy 217.819694 100.03489) (xy 217.510974 100.343072) (xy 217.34369 100.745936)
+ (xy 217.34331 101.182151) (xy 217.50989 101.585306) (xy 217.818072 101.894026) (xy 218.220936 102.06131) (xy 218.657151 102.06169)
+ (xy 219.060306 101.89511) (xy 219.369026 101.586928) (xy 219.53631 101.184064) (xy 219.53669 100.747849) (xy 219.53669 106.218348)
+ (xy 219.492849 106.21831) (xy 219.089694 106.38489) (xy 218.780974 106.693072) (xy 218.61369 107.095936) (xy 218.61331 107.532151)
+ (xy 218.77989 107.935306) (xy 219.088072 108.244026) (xy 219.490936 108.41131) (xy 219.927151 108.41169) (xy 220.330306 108.24511)
+ (xy 220.639026 107.936928) (xy 220.80631 107.534064) (xy 220.80669 107.097849) (xy 220.80669 108.758348) (xy 220.762849 108.75831)
+ (xy 220.359694 108.92489) (xy 220.050974 109.233072) (xy 219.88369 109.635936) (xy 219.88331 110.072151) (xy 220.04989 110.475306)
+ (xy 220.358072 110.784026) (xy 220.760936 110.95131) (xy 221.197151 110.95169) (xy 221.600306 110.78511) (xy 221.909026 110.476928)
+ (xy 222.07631 110.074064) (xy 222.07669 109.637849) (xy 222.07669 115.108348) (xy 222.032849 115.10831) (xy 221.629694 115.27489)
+ (xy 221.320974 115.583072) (xy 221.15369 115.985936) (xy 221.15331 116.422151) (xy 221.31989 116.825306) (xy 221.628072 117.134026)
+ (xy 222.030936 117.30131) (xy 222.467151 117.30169) (xy 222.870306 117.13511) (xy 223.179026 116.826928) (xy 223.34631 116.424064)
+ (xy 223.34669 115.987849) (xy 223.34669 117.648348) (xy 223.302849 117.64831) (xy 222.899694 117.81489) (xy 222.590974 118.123072)
+ (xy 222.42369 118.525936) (xy 222.42331 118.962151) (xy 222.58989 119.365306) (xy 222.898072 119.674026) (xy 223.300936 119.84131)
+ (xy 223.737151 119.84169) (xy 224.140306 119.67511) (xy 224.449026 119.366928) (xy 224.61631 118.964064) (xy 224.61669 118.527849)
+ (xy 224.61669 123.998348) (xy 224.572849 123.99831) (xy 224.169694 124.16489) (xy 223.860974 124.473072) (xy 223.69369 124.875936)
+ (xy 223.69331 125.312151) (xy 223.85989 125.715306) (xy 224.168072 126.024026) (xy 224.570936 126.19131) (xy 225.007151 126.19169)
+ (xy 225.410306 126.02511) (xy 225.719026 125.716928) (xy 225.88631 125.314064) (xy 225.88669 124.877849) (xy 225.88669 126.538348)
+ (xy 225.842849 126.53831) (xy 225.439694 126.70489) (xy 225.130974 127.013072) (xy 224.96369 127.415936) (xy 224.96331 127.852151)
+ (xy 225.12989 128.255306) (xy 225.438072 128.564026) (xy 225.840936 128.73131) (xy 226.277151 128.73169) (xy 226.680306 128.56511)
+ (xy 226.989026 128.256928) (xy 227.15631 127.854064) (xy 227.15669 127.417849) (xy 227.15669 133.7394) (xy 224.61669 133.7394)
+ (xy 224.61669 127.417849) (xy 224.45011 127.014694) (xy 224.141928 126.705974) (xy 223.739064 126.53869) (xy 223.34669 126.538348)
+ (xy 223.34669 124.877849) (xy 223.18011 124.474694) (xy 222.871928 124.165974) (xy 222.469064 123.99869) (xy 222.07669 123.998348)
+ (xy 222.07669 118.527849) (xy 221.91011 118.124694) (xy 221.601928 117.815974) (xy 221.199064 117.64869) (xy 220.80669 117.648348)
+ (xy 220.80669 115.987849) (xy 220.64011 115.584694) (xy 220.331928 115.275974) (xy 219.929064 115.10869) (xy 219.53669 115.108348)
+ (xy 219.53669 109.637849) (xy 219.37011 109.234694) (xy 219.061928 108.925974) (xy 218.659064 108.75869) (xy 218.26669 108.758348)
+ (xy 218.26669 107.097849) (xy 218.10011 106.694694) (xy 217.791928 106.385974) (xy 217.389064 106.21869) (xy 216.99669 106.218348)
+ (xy 216.99669 100.747849) (xy 216.83011 100.344694) (xy 216.521928 100.035974) (xy 216.119064 99.86869) (xy 215.72669 99.868348)
+ (xy 215.72669 98.207849) (xy 215.56011 97.804694) (xy 215.251928 97.495974) (xy 214.849064 97.32869) (xy 214.45669 97.328348)
+ (xy 214.45669 91.857849) (xy 214.29011 91.454694) (xy 213.981928 91.145974) (xy 213.579064 90.97869) (xy 213.18669 90.978348)
+ (xy 213.18669 89.317849) (xy 213.059668 89.010431) (xy 213.059668 85.660001) (xy 212.912382 85.30354) (xy 212.639895 85.030577)
+ (xy 212.283692 84.882668) (xy 211.91669 84.882348) (xy 211.91669 82.967849) (xy 211.75011 82.564694) (xy 211.441928 82.255974)
+ (xy 211.039064 82.08869) (xy 210.64669 82.088348) (xy 210.64669 80.427849) (xy 210.48011 80.024694) (xy 210.171928 79.715974)
+ (xy 209.769064 79.54869) (xy 209.37669 79.548348) (xy 209.37669 74.077849) (xy 209.21011 73.674694) (xy 208.901928 73.365974)
+ (xy 208.499064 73.19869) (xy 208.10669 73.198348) (xy 208.10669 71.537849) (xy 207.94011 71.134694) (xy 207.631928 70.825974)
+ (xy 207.229064 70.65869) (xy 206.83669 70.658348) (xy 206.83669 65.187849) (xy 206.67011 64.784694) (xy 206.361928 64.475974)
+ (xy 205.959064 64.30869) (xy 205.56669 64.308348) (xy 205.56669 62.647849) (xy 205.40011 62.244694) (xy 205.091928 61.935974)
+ (xy 204.689064 61.76869) (xy 204.252849 61.76831) (xy 203.849694 61.93489) (xy 203.540974 62.243072) (xy 203.37369 62.645936)
+ (xy 203.37331 63.082151) (xy 203.53989 63.485306) (xy 203.848072 63.794026) (xy 204.250936 63.96131) (xy 204.687151 63.96169)
+ (xy 205.090306 63.79511) (xy 205.399026 63.486928) (xy 205.56631 63.084064) (xy 205.56669 62.647849) (xy 205.56669 64.308348)
+ (xy 205.522849 64.30831) (xy 205.119694 64.47489) (xy 204.810974 64.783072) (xy 204.64369 65.185936) (xy 204.64331 65.622151)
+ (xy 204.80989 66.025306) (xy 205.118072 66.334026) (xy 205.520936 66.50131) (xy 205.957151 66.50169) (xy 206.360306 66.33511)
+ (xy 206.669026 66.026928) (xy 206.83631 65.624064) (xy 206.83669 65.187849) (xy 206.83669 70.658348) (xy 206.792849 70.65831)
+ (xy 206.389694 70.82489) (xy 206.080974 71.133072) (xy 205.91369 71.535936) (xy 205.91331 71.972151) (xy 206.07989 72.375306)
+ (xy 206.388072 72.684026) (xy 206.790936 72.85131) (xy 207.227151 72.85169) (xy 207.630306 72.68511) (xy 207.939026 72.376928)
+ (xy 208.10631 71.974064) (xy 208.10669 71.537849) (xy 208.10669 73.198348) (xy 208.062849 73.19831) (xy 207.659694 73.36489)
+ (xy 207.350974 73.673072) (xy 207.18369 74.075936) (xy 207.18331 74.512151) (xy 207.34989 74.915306) (xy 207.658072 75.224026)
+ (xy 208.060936 75.39131) (xy 208.497151 75.39169) (xy 208.900306 75.22511) (xy 209.209026 74.916928) (xy 209.37631 74.514064)
+ (xy 209.37669 74.077849) (xy 209.37669 79.548348) (xy 209.332849 79.54831) (xy 208.929694 79.71489) (xy 208.620974 80.023072)
+ (xy 208.45369 80.425936) (xy 208.45331 80.862151) (xy 208.61989 81.265306) (xy 208.928072 81.574026) (xy 209.330936 81.74131)
+ (xy 209.767151 81.74169) (xy 210.170306 81.57511) (xy 210.479026 81.266928) (xy 210.64631 80.864064) (xy 210.64669 80.427849)
+ (xy 210.64669 82.088348) (xy 210.602849 82.08831) (xy 210.199694 82.25489) (xy 209.890974 82.563072) (xy 209.72369 82.965936)
+ (xy 209.72331 83.402151) (xy 209.88989 83.805306) (xy 210.198072 84.114026) (xy 210.600936 84.28131) (xy 211.037151 84.28169)
+ (xy 211.440306 84.11511) (xy 211.749026 83.806928) (xy 211.91631 83.404064) (xy 211.91669 82.967849) (xy 211.91669 84.882348)
+ (xy 211.898001 84.882332) (xy 211.54154 85.029618) (xy 211.268577 85.302105) (xy 211.120668 85.658308) (xy 211.120332 86.043999)
+ (xy 211.267618 86.40046) (xy 211.540105 86.673423) (xy 211.896308 86.821332) (xy 212.281999 86.821668) (xy 212.63846 86.674382)
+ (xy 212.911423 86.401895) (xy 213.059332 86.045692) (xy 213.059668 85.660001) (xy 213.059668 89.010431) (xy 213.02011 88.914694)
+ (xy 212.711928 88.605974) (xy 212.309064 88.43869) (xy 211.872849 88.43831) (xy 211.469694 88.60489) (xy 211.160974 88.913072)
+ (xy 210.99369 89.315936) (xy 210.99331 89.752151) (xy 211.15989 90.155306) (xy 211.468072 90.464026) (xy 211.870936 90.63131)
+ (xy 212.307151 90.63169) (xy 212.710306 90.46511) (xy 213.019026 90.156928) (xy 213.18631 89.754064) (xy 213.18669 89.317849)
+ (xy 213.18669 90.978348) (xy 213.142849 90.97831) (xy 212.739694 91.14489) (xy 212.430974 91.453072) (xy 212.26369 91.855936)
+ (xy 212.26331 92.292151) (xy 212.42989 92.695306) (xy 212.738072 93.004026) (xy 213.140936 93.17131) (xy 213.577151 93.17169)
+ (xy 213.980306 93.00511) (xy 214.289026 92.696928) (xy 214.45631 92.294064) (xy 214.45669 91.857849) (xy 214.45669 97.328348)
+ (xy 214.412849 97.32831) (xy 214.009694 97.49489) (xy 213.700974 97.803072) (xy 213.53369 98.205936) (xy 213.53331 98.642151)
+ (xy 213.69989 99.045306) (xy 214.008072 99.354026) (xy 214.410936 99.52131) (xy 214.847151 99.52169) (xy 215.250306 99.35511)
+ (xy 215.559026 99.046928) (xy 215.72631 98.644064) (xy 215.72669 98.207849) (xy 215.72669 99.868348) (xy 215.682849 99.86831)
+ (xy 215.279694 100.03489) (xy 214.970974 100.343072) (xy 214.80369 100.745936) (xy 214.80331 101.182151) (xy 214.96989 101.585306)
+ (xy 215.278072 101.894026) (xy 215.680936 102.06131) (xy 216.117151 102.06169) (xy 216.520306 101.89511) (xy 216.829026 101.586928)
+ (xy 216.99631 101.184064) (xy 216.99669 100.747849) (xy 216.99669 106.218348) (xy 216.952849 106.21831) (xy 216.549694 106.38489)
+ (xy 216.240974 106.693072) (xy 216.07369 107.095936) (xy 216.07331 107.532151) (xy 216.23989 107.935306) (xy 216.548072 108.244026)
+ (xy 216.950936 108.41131) (xy 217.387151 108.41169) (xy 217.790306 108.24511) (xy 218.099026 107.936928) (xy 218.26631 107.534064)
+ (xy 218.26669 107.097849) (xy 218.26669 108.758348) (xy 218.222849 108.75831) (xy 217.819694 108.92489) (xy 217.510974 109.233072)
+ (xy 217.34369 109.635936) (xy 217.34331 110.072151) (xy 217.50989 110.475306) (xy 217.818072 110.784026) (xy 218.220936 110.95131)
+ (xy 218.657151 110.95169) (xy 219.060306 110.78511) (xy 219.369026 110.476928) (xy 219.53631 110.074064) (xy 219.53669 109.637849)
+ (xy 219.53669 115.108348) (xy 219.492849 115.10831) (xy 219.089694 115.27489) (xy 218.780974 115.583072) (xy 218.61369 115.985936)
+ (xy 218.61331 116.422151) (xy 218.77989 116.825306) (xy 219.088072 117.134026) (xy 219.490936 117.30131) (xy 219.927151 117.30169)
+ (xy 220.330306 117.13511) (xy 220.639026 116.826928) (xy 220.80631 116.424064) (xy 220.80669 115.987849) (xy 220.80669 117.648348)
+ (xy 220.762849 117.64831) (xy 220.359694 117.81489) (xy 220.050974 118.123072) (xy 219.88369 118.525936) (xy 219.88331 118.962151)
+ (xy 220.04989 119.365306) (xy 220.358072 119.674026) (xy 220.760936 119.84131) (xy 221.197151 119.84169) (xy 221.600306 119.67511)
+ (xy 221.909026 119.366928) (xy 222.07631 118.964064) (xy 222.07669 118.527849) (xy 222.07669 123.998348) (xy 222.032849 123.99831)
+ (xy 221.629694 124.16489) (xy 221.320974 124.473072) (xy 221.15369 124.875936) (xy 221.15331 125.312151) (xy 221.31989 125.715306)
+ (xy 221.628072 126.024026) (xy 222.030936 126.19131) (xy 222.467151 126.19169) (xy 222.870306 126.02511) (xy 223.179026 125.716928)
+ (xy 223.34631 125.314064) (xy 223.34669 124.877849) (xy 223.34669 126.538348) (xy 223.302849 126.53831) (xy 222.899694 126.70489)
+ (xy 222.590974 127.013072) (xy 222.42369 127.415936) (xy 222.42331 127.852151) (xy 222.58989 128.255306) (xy 222.898072 128.564026)
+ (xy 223.300936 128.73131) (xy 223.737151 128.73169) (xy 224.140306 128.56511) (xy 224.449026 128.256928) (xy 224.61631 127.854064)
+ (xy 224.61669 127.417849) (xy 224.61669 133.7394) (xy 222.07669 133.7394) (xy 222.07669 127.417849) (xy 221.91011 127.014694)
+ (xy 221.601928 126.705974) (xy 221.199064 126.53869) (xy 220.80669 126.538348) (xy 220.80669 124.877849) (xy 220.64011 124.474694)
+ (xy 220.331928 124.165974) (xy 219.929064 123.99869) (xy 219.53669 123.998348) (xy 219.53669 118.527849) (xy 219.37011 118.124694)
+ (xy 219.061928 117.815974) (xy 218.659064 117.64869) (xy 218.26669 117.648348) (xy 218.26669 115.987849) (xy 218.10011 115.584694)
+ (xy 217.791928 115.275974) (xy 217.389064 115.10869) (xy 216.99669 115.108348) (xy 216.99669 109.637849) (xy 216.83011 109.234694)
+ (xy 216.521928 108.925974) (xy 216.119064 108.75869) (xy 215.72669 108.758348) (xy 215.72669 107.097849) (xy 215.56011 106.694694)
+ (xy 215.251928 106.385974) (xy 214.849064 106.21869) (xy 214.45669 106.218348) (xy 214.45669 100.747849) (xy 214.29011 100.344694)
+ (xy 213.981928 100.035974) (xy 213.579064 99.86869) (xy 213.18669 99.868348) (xy 213.18669 98.207849) (xy 213.02011 97.804694)
+ (xy 212.711928 97.495974) (xy 212.309064 97.32869) (xy 211.91669 97.328348) (xy 211.91669 91.857849) (xy 211.75011 91.454694)
+ (xy 211.441928 91.145974) (xy 211.039064 90.97869) (xy 210.64669 90.978348) (xy 210.64669 89.317849) (xy 210.519668 89.010431)
+ (xy 210.519668 85.660001) (xy 210.372382 85.30354) (xy 210.099895 85.030577) (xy 209.743692 84.882668) (xy 209.37669 84.882348)
+ (xy 209.37669 82.967849) (xy 209.21011 82.564694) (xy 208.901928 82.255974) (xy 208.499064 82.08869) (xy 208.10669 82.088348)
+ (xy 208.10669 80.427849) (xy 207.94011 80.024694) (xy 207.631928 79.715974) (xy 207.229064 79.54869) (xy 206.83669 79.548348)
+ (xy 206.83669 74.077849) (xy 206.67011 73.674694) (xy 206.361928 73.365974) (xy 205.959064 73.19869) (xy 205.56669 73.198348)
+ (xy 205.56669 71.537849) (xy 205.40011 71.134694) (xy 205.091928 70.825974) (xy 204.689064 70.65869) (xy 204.29669 70.658348)
+ (xy 204.29669 65.187849) (xy 204.13011 64.784694) (xy 203.821928 64.475974) (xy 203.419064 64.30869) (xy 203.02669 64.308348)
+ (xy 203.02669 62.647849) (xy 202.86011 62.244694) (xy 202.551928 61.935974) (xy 202.149064 61.76869) (xy 201.712849 61.76831)
+ (xy 201.309694 61.93489) (xy 201.000974 62.243072) (xy 200.83369 62.645936) (xy 200.83331 63.082151) (xy 200.99989 63.485306)
+ (xy 201.308072 63.794026) (xy 201.710936 63.96131) (xy 202.147151 63.96169) (xy 202.550306 63.79511) (xy 202.859026 63.486928)
+ (xy 203.02631 63.084064) (xy 203.02669 62.647849) (xy 203.02669 64.308348) (xy 202.982849 64.30831) (xy 202.579694 64.47489)
+ (xy 202.270974 64.783072) (xy 202.10369 65.185936) (xy 202.10331 65.622151) (xy 202.26989 66.025306) (xy 202.578072 66.334026)
+ (xy 202.980936 66.50131) (xy 203.417151 66.50169) (xy 203.820306 66.33511) (xy 204.129026 66.026928) (xy 204.29631 65.624064)
+ (xy 204.29669 65.187849) (xy 204.29669 70.658348) (xy 204.252849 70.65831) (xy 203.849694 70.82489) (xy 203.540974 71.133072)
+ (xy 203.37369 71.535936) (xy 203.37331 71.972151) (xy 203.53989 72.375306) (xy 203.848072 72.684026) (xy 204.250936 72.85131)
+ (xy 204.687151 72.85169) (xy 205.090306 72.68511) (xy 205.399026 72.376928) (xy 205.56631 71.974064) (xy 205.56669 71.537849)
+ (xy 205.56669 73.198348) (xy 205.522849 73.19831) (xy 205.119694 73.36489) (xy 204.810974 73.673072) (xy 204.64369 74.075936)
+ (xy 204.64331 74.512151) (xy 204.80989 74.915306) (xy 205.118072 75.224026) (xy 205.520936 75.39131) (xy 205.957151 75.39169)
+ (xy 206.360306 75.22511) (xy 206.669026 74.916928) (xy 206.83631 74.514064) (xy 206.83669 74.077849) (xy 206.83669 79.548348)
+ (xy 206.792849 79.54831) (xy 206.389694 79.71489) (xy 206.080974 80.023072) (xy 205.91369 80.425936) (xy 205.91331 80.862151)
+ (xy 206.07989 81.265306) (xy 206.388072 81.574026) (xy 206.790936 81.74131) (xy 207.227151 81.74169) (xy 207.630306 81.57511)
+ (xy 207.939026 81.266928) (xy 208.10631 80.864064) (xy 208.10669 80.427849) (xy 208.10669 82.088348) (xy 208.062849 82.08831)
+ (xy 207.659694 82.25489) (xy 207.350974 82.563072) (xy 207.18369 82.965936) (xy 207.18331 83.402151) (xy 207.34989 83.805306)
+ (xy 207.658072 84.114026) (xy 208.060936 84.28131) (xy 208.497151 84.28169) (xy 208.900306 84.11511) (xy 209.209026 83.806928)
+ (xy 209.37631 83.404064) (xy 209.37669 82.967849) (xy 209.37669 84.882348) (xy 209.358001 84.882332) (xy 209.00154 85.029618)
+ (xy 208.728577 85.302105) (xy 208.580668 85.658308) (xy 208.580332 86.043999) (xy 208.727618 86.40046) (xy 209.000105 86.673423)
+ (xy 209.356308 86.821332) (xy 209.741999 86.821668) (xy 210.09846 86.674382) (xy 210.371423 86.401895) (xy 210.519332 86.045692)
+ (xy 210.519668 85.660001) (xy 210.519668 89.010431) (xy 210.48011 88.914694) (xy 210.171928 88.605974) (xy 209.769064 88.43869)
+ (xy 209.332849 88.43831) (xy 208.929694 88.60489) (xy 208.741668 88.792588) (xy 208.741668 86.549001) (xy 208.594382 86.19254)
+ (xy 208.321895 85.919577) (xy 207.979565 85.777428) (xy 207.979668 85.660001) (xy 207.832382 85.30354) (xy 207.559895 85.030577)
+ (xy 207.203692 84.882668) (xy 206.83669 84.882348) (xy 206.83669 82.967849) (xy 206.67011 82.564694) (xy 206.361928 82.255974)
+ (xy 205.959064 82.08869) (xy 205.56669 82.088348) (xy 205.56669 80.427849) (xy 205.40011 80.024694) (xy 205.091928 79.715974)
+ (xy 204.689064 79.54869) (xy 204.29669 79.548348) (xy 204.29669 74.077849) (xy 204.13011 73.674694) (xy 203.821928 73.365974)
+ (xy 203.419064 73.19869) (xy 203.02669 73.198348) (xy 203.02669 71.537849) (xy 202.86011 71.134694) (xy 202.551928 70.825974)
+ (xy 202.149064 70.65869) (xy 201.75669 70.658348) (xy 201.75669 65.187849) (xy 201.59011 64.784694) (xy 201.281928 64.475974)
+ (xy 200.879064 64.30869) (xy 200.48669 64.308348) (xy 200.48669 62.647849) (xy 200.32011 62.244694) (xy 200.011928 61.935974)
+ (xy 199.609064 61.76869) (xy 199.172849 61.76831) (xy 198.769694 61.93489) (xy 198.460974 62.243072) (xy 198.29369 62.645936)
+ (xy 198.29331 63.082151) (xy 198.45989 63.485306) (xy 198.768072 63.794026) (xy 199.170936 63.96131) (xy 199.607151 63.96169)
+ (xy 200.010306 63.79511) (xy 200.319026 63.486928) (xy 200.48631 63.084064) (xy 200.48669 62.647849) (xy 200.48669 64.308348)
+ (xy 200.442849 64.30831) (xy 200.039694 64.47489) (xy 199.730974 64.783072) (xy 199.56369 65.185936) (xy 199.56331 65.622151)
+ (xy 199.72989 66.025306) (xy 200.038072 66.334026) (xy 200.440936 66.50131) (xy 200.877151 66.50169) (xy 201.280306 66.33511)
+ (xy 201.589026 66.026928) (xy 201.75631 65.624064) (xy 201.75669 65.187849) (xy 201.75669 70.658348) (xy 201.712849 70.65831)
+ (xy 201.309694 70.82489) (xy 201.000974 71.133072) (xy 200.83369 71.535936) (xy 200.83331 71.972151) (xy 200.99989 72.375306)
+ (xy 201.308072 72.684026) (xy 201.710936 72.85131) (xy 202.147151 72.85169) (xy 202.550306 72.68511) (xy 202.859026 72.376928)
+ (xy 203.02631 71.974064) (xy 203.02669 71.537849) (xy 203.02669 73.198348) (xy 202.982849 73.19831) (xy 202.579694 73.36489)
+ (xy 202.270974 73.673072) (xy 202.10369 74.075936) (xy 202.10331 74.512151) (xy 202.26989 74.915306) (xy 202.578072 75.224026)
+ (xy 202.980936 75.39131) (xy 203.417151 75.39169) (xy 203.820306 75.22511) (xy 204.129026 74.916928) (xy 204.29631 74.514064)
+ (xy 204.29669 74.077849) (xy 204.29669 79.548348) (xy 204.252849 79.54831) (xy 203.849694 79.71489) (xy 203.540974 80.023072)
+ (xy 203.37369 80.425936) (xy 203.37331 80.862151) (xy 203.53989 81.265306) (xy 203.848072 81.574026) (xy 204.250936 81.74131)
+ (xy 204.687151 81.74169) (xy 205.090306 81.57511) (xy 205.399026 81.266928) (xy 205.56631 80.864064) (xy 205.56669 80.427849)
+ (xy 205.56669 82.088348) (xy 205.522849 82.08831) (xy 205.119694 82.25489) (xy 204.810974 82.563072) (xy 204.64369 82.965936)
+ (xy 204.64331 83.402151) (xy 204.80989 83.805306) (xy 205.118072 84.114026) (xy 205.520936 84.28131) (xy 205.957151 84.28169)
+ (xy 206.360306 84.11511) (xy 206.669026 83.806928) (xy 206.83631 83.404064) (xy 206.83669 82.967849) (xy 206.83669 84.882348)
+ (xy 206.818001 84.882332) (xy 206.46154 85.029618) (xy 206.375088 85.115919) (xy 206.289895 85.030577) (xy 205.933692 84.882668)
+ (xy 205.548001 84.882332) (xy 205.19154 85.029618) (xy 204.918577 85.302105) (xy 204.770668 85.658308) (xy 204.770332 86.043999)
+ (xy 204.917618 86.40046) (xy 205.190105 86.673423) (xy 205.546308 86.821332) (xy 205.931999 86.821668) (xy 206.28846 86.674382)
+ (xy 206.374911 86.58808) (xy 206.460105 86.673423) (xy 206.802434 86.815571) (xy 206.802332 86.932999) (xy 206.949618 87.28946)
+ (xy 207.222105 87.562423) (xy 207.578308 87.710332) (xy 207.963999 87.710668) (xy 208.32046 87.563382) (xy 208.593423 87.290895)
+ (xy 208.741332 86.934692) (xy 208.741668 86.549001) (xy 208.741668 88.792588) (xy 208.620974 88.913072) (xy 208.45369 89.315936)
+ (xy 208.45331 89.752151) (xy 208.61989 90.155306) (xy 208.928072 90.464026) (xy 209.330936 90.63131) (xy 209.767151 90.63169)
+ (xy 210.170306 90.46511) (xy 210.479026 90.156928) (xy 210.64631 89.754064) (xy 210.64669 89.317849) (xy 210.64669 90.978348)
+ (xy 210.602849 90.97831) (xy 210.199694 91.14489) (xy 209.890974 91.453072) (xy 209.72369 91.855936) (xy 209.72331 92.292151)
+ (xy 209.88989 92.695306) (xy 210.198072 93.004026) (xy 210.600936 93.17131) (xy 211.037151 93.17169) (xy 211.440306 93.00511)
+ (xy 211.749026 92.696928) (xy 211.91631 92.294064) (xy 211.91669 91.857849) (xy 211.91669 97.328348) (xy 211.872849 97.32831)
+ (xy 211.469694 97.49489) (xy 211.160974 97.803072) (xy 210.99369 98.205936) (xy 210.99331 98.642151) (xy 211.15989 99.045306)
+ (xy 211.468072 99.354026) (xy 211.870936 99.52131) (xy 212.307151 99.52169) (xy 212.710306 99.35511) (xy 213.019026 99.046928)
+ (xy 213.18631 98.644064) (xy 213.18669 98.207849) (xy 213.18669 99.868348) (xy 213.142849 99.86831) (xy 212.739694 100.03489)
+ (xy 212.430974 100.343072) (xy 212.26369 100.745936) (xy 212.26331 101.182151) (xy 212.42989 101.585306) (xy 212.738072 101.894026)
+ (xy 213.140936 102.06131) (xy 213.577151 102.06169) (xy 213.980306 101.89511) (xy 214.289026 101.586928) (xy 214.45631 101.184064)
+ (xy 214.45669 100.747849) (xy 214.45669 106.218348) (xy 214.412849 106.21831) (xy 214.009694 106.38489) (xy 213.700974 106.693072)
+ (xy 213.53369 107.095936) (xy 213.53331 107.532151) (xy 213.69989 107.935306) (xy 214.008072 108.244026) (xy 214.410936 108.41131)
+ (xy 214.847151 108.41169) (xy 215.250306 108.24511) (xy 215.559026 107.936928) (xy 215.72631 107.534064) (xy 215.72669 107.097849)
+ (xy 215.72669 108.758348) (xy 215.682849 108.75831) (xy 215.279694 108.92489) (xy 214.970974 109.233072) (xy 214.80369 109.635936)
+ (xy 214.80331 110.072151) (xy 214.96989 110.475306) (xy 215.278072 110.784026) (xy 215.680936 110.95131) (xy 216.117151 110.95169)
+ (xy 216.520306 110.78511) (xy 216.829026 110.476928) (xy 216.99631 110.074064) (xy 216.99669 109.637849) (xy 216.99669 115.108348)
+ (xy 216.952849 115.10831) (xy 216.549694 115.27489) (xy 216.240974 115.583072) (xy 216.07369 115.985936) (xy 216.07331 116.422151)
+ (xy 216.23989 116.825306) (xy 216.548072 117.134026) (xy 216.950936 117.30131) (xy 217.387151 117.30169) (xy 217.790306 117.13511)
+ (xy 218.099026 116.826928) (xy 218.26631 116.424064) (xy 218.26669 115.987849) (xy 218.26669 117.648348) (xy 218.222849 117.64831)
+ (xy 217.819694 117.81489) (xy 217.510974 118.123072) (xy 217.34369 118.525936) (xy 217.34331 118.962151) (xy 217.50989 119.365306)
+ (xy 217.818072 119.674026) (xy 218.220936 119.84131) (xy 218.657151 119.84169) (xy 219.060306 119.67511) (xy 219.369026 119.366928)
+ (xy 219.53631 118.964064) (xy 219.53669 118.527849) (xy 219.53669 123.998348) (xy 219.492849 123.99831) (xy 219.089694 124.16489)
+ (xy 218.780974 124.473072) (xy 218.61369 124.875936) (xy 218.61331 125.312151) (xy 218.77989 125.715306) (xy 219.088072 126.024026)
+ (xy 219.490936 126.19131) (xy 219.927151 126.19169) (xy 220.330306 126.02511) (xy 220.639026 125.716928) (xy 220.80631 125.314064)
+ (xy 220.80669 124.877849) (xy 220.80669 126.538348) (xy 220.762849 126.53831) (xy 220.359694 126.70489) (xy 220.050974 127.013072)
+ (xy 219.88369 127.415936) (xy 219.88331 127.852151) (xy 220.04989 128.255306) (xy 220.358072 128.564026) (xy 220.760936 128.73131)
+ (xy 221.197151 128.73169) (xy 221.600306 128.56511) (xy 221.909026 128.256928) (xy 222.07631 127.854064) (xy 222.07669 127.417849)
+ (xy 222.07669 133.7394) (xy 219.53669 133.7394) (xy 219.53669 127.417849) (xy 219.37011 127.014694) (xy 219.061928 126.705974)
+ (xy 218.659064 126.53869) (xy 218.26669 126.538348) (xy 218.26669 124.877849) (xy 218.10011 124.474694) (xy 217.791928 124.165974)
+ (xy 217.389064 123.99869) (xy 216.99669 123.998348) (xy 216.99669 118.527849) (xy 216.83011 118.124694) (xy 216.521928 117.815974)
+ (xy 216.119064 117.64869) (xy 215.72669 117.648348) (xy 215.72669 115.987849) (xy 215.56011 115.584694) (xy 215.251928 115.275974)
+ (xy 214.849064 115.10869) (xy 214.45669 115.108348) (xy 214.45669 109.637849) (xy 214.29011 109.234694) (xy 213.981928 108.925974)
+ (xy 213.579064 108.75869) (xy 213.18669 108.758348) (xy 213.18669 107.097849) (xy 213.02011 106.694694) (xy 212.711928 106.385974)
+ (xy 212.309064 106.21869) (xy 211.91669 106.218348) (xy 211.91669 100.747849) (xy 211.75011 100.344694) (xy 211.441928 100.035974)
+ (xy 211.039064 99.86869) (xy 210.64669 99.868348) (xy 210.64669 98.207849) (xy 210.48011 97.804694) (xy 210.171928 97.495974)
+ (xy 209.769064 97.32869) (xy 209.37669 97.328348) (xy 209.37669 91.857849) (xy 209.21011 91.454694) (xy 208.901928 91.145974)
+ (xy 208.499064 90.97869) (xy 208.10669 90.978348) (xy 208.10669 89.317849) (xy 207.94011 88.914694) (xy 207.631928 88.605974)
+ (xy 207.229064 88.43869) (xy 206.792849 88.43831) (xy 206.389694 88.60489) (xy 206.080974 88.913072) (xy 205.91369 89.315936)
+ (xy 205.91331 89.752151) (xy 206.07989 90.155306) (xy 206.388072 90.464026) (xy 206.790936 90.63131) (xy 207.227151 90.63169)
+ (xy 207.630306 90.46511) (xy 207.939026 90.156928) (xy 208.10631 89.754064) (xy 208.10669 89.317849) (xy 208.10669 90.978348)
+ (xy 208.062849 90.97831) (xy 207.659694 91.14489) (xy 207.350974 91.453072) (xy 207.18369 91.855936) (xy 207.18331 92.292151)
+ (xy 207.34989 92.695306) (xy 207.658072 93.004026) (xy 208.060936 93.17131) (xy 208.497151 93.17169) (xy 208.900306 93.00511)
+ (xy 209.209026 92.696928) (xy 209.37631 92.294064) (xy 209.37669 91.857849) (xy 209.37669 97.328348) (xy 209.332849 97.32831)
+ (xy 208.929694 97.49489) (xy 208.620974 97.803072) (xy 208.45369 98.205936) (xy 208.45331 98.642151) (xy 208.61989 99.045306)
+ (xy 208.928072 99.354026) (xy 209.330936 99.52131) (xy 209.767151 99.52169) (xy 210.170306 99.35511) (xy 210.479026 99.046928)
+ (xy 210.64631 98.644064) (xy 210.64669 98.207849) (xy 210.64669 99.868348) (xy 210.602849 99.86831) (xy 210.199694 100.03489)
+ (xy 209.890974 100.343072) (xy 209.72369 100.745936) (xy 209.72331 101.182151) (xy 209.88989 101.585306) (xy 210.198072 101.894026)
+ (xy 210.600936 102.06131) (xy 211.037151 102.06169) (xy 211.440306 101.89511) (xy 211.749026 101.586928) (xy 211.91631 101.184064)
+ (xy 211.91669 100.747849) (xy 211.91669 106.218348) (xy 211.872849 106.21831) (xy 211.469694 106.38489) (xy 211.160974 106.693072)
+ (xy 210.99369 107.095936) (xy 210.99331 107.532151) (xy 211.15989 107.935306) (xy 211.468072 108.244026) (xy 211.870936 108.41131)
+ (xy 212.307151 108.41169) (xy 212.710306 108.24511) (xy 213.019026 107.936928) (xy 213.18631 107.534064) (xy 213.18669 107.097849)
+ (xy 213.18669 108.758348) (xy 213.142849 108.75831) (xy 212.739694 108.92489) (xy 212.430974 109.233072) (xy 212.26369 109.635936)
+ (xy 212.26331 110.072151) (xy 212.42989 110.475306) (xy 212.738072 110.784026) (xy 213.140936 110.95131) (xy 213.577151 110.95169)
+ (xy 213.980306 110.78511) (xy 214.289026 110.476928) (xy 214.45631 110.074064) (xy 214.45669 109.637849) (xy 214.45669 115.108348)
+ (xy 214.412849 115.10831) (xy 214.009694 115.27489) (xy 213.700974 115.583072) (xy 213.53369 115.985936) (xy 213.53331 116.422151)
+ (xy 213.69989 116.825306) (xy 214.008072 117.134026) (xy 214.410936 117.30131) (xy 214.847151 117.30169) (xy 215.250306 117.13511)
+ (xy 215.559026 116.826928) (xy 215.72631 116.424064) (xy 215.72669 115.987849) (xy 215.72669 117.648348) (xy 215.682849 117.64831)
+ (xy 215.279694 117.81489) (xy 214.970974 118.123072) (xy 214.80369 118.525936) (xy 214.80331 118.962151) (xy 214.96989 119.365306)
+ (xy 215.278072 119.674026) (xy 215.680936 119.84131) (xy 216.117151 119.84169) (xy 216.520306 119.67511) (xy 216.829026 119.366928)
+ (xy 216.99631 118.964064) (xy 216.99669 118.527849) (xy 216.99669 123.998348) (xy 216.952849 123.99831) (xy 216.549694 124.16489)
+ (xy 216.240974 124.473072) (xy 216.07369 124.875936) (xy 216.07331 125.312151) (xy 216.23989 125.715306) (xy 216.548072 126.024026)
+ (xy 216.950936 126.19131) (xy 217.387151 126.19169) (xy 217.790306 126.02511) (xy 218.099026 125.716928) (xy 218.26631 125.314064)
+ (xy 218.26669 124.877849) (xy 218.26669 126.538348) (xy 218.222849 126.53831) (xy 217.819694 126.70489) (xy 217.510974 127.013072)
+ (xy 217.34369 127.415936) (xy 217.34331 127.852151) (xy 217.50989 128.255306) (xy 217.818072 128.564026) (xy 218.220936 128.73131)
+ (xy 218.657151 128.73169) (xy 219.060306 128.56511) (xy 219.369026 128.256928) (xy 219.53631 127.854064) (xy 219.53669 127.417849)
+ (xy 219.53669 133.7394) (xy 216.99669 133.7394) (xy 216.99669 127.417849) (xy 216.83011 127.014694) (xy 216.521928 126.705974)
+ (xy 216.119064 126.53869) (xy 215.72669 126.538348) (xy 215.72669 124.877849) (xy 215.56011 124.474694) (xy 215.251928 124.165974)
+ (xy 214.849064 123.99869) (xy 214.45669 123.998348) (xy 214.45669 118.527849) (xy 214.29011 118.124694) (xy 213.981928 117.815974)
+ (xy 213.579064 117.64869) (xy 213.18669 117.648348) (xy 213.18669 115.987849) (xy 213.02011 115.584694) (xy 212.711928 115.275974)
+ (xy 212.309064 115.10869) (xy 211.91669 115.108348) (xy 211.91669 109.637849) (xy 211.75011 109.234694) (xy 211.441928 108.925974)
+ (xy 211.039064 108.75869) (xy 210.64669 108.758348) (xy 210.64669 107.097849) (xy 210.48011 106.694694) (xy 210.171928 106.385974)
+ (xy 209.769064 106.21869) (xy 209.37669 106.218348) (xy 209.37669 100.747849) (xy 209.21011 100.344694) (xy 208.901928 100.035974)
+ (xy 208.499064 99.86869) (xy 208.10669 99.868348) (xy 208.10669 98.207849) (xy 207.94011 97.804694) (xy 207.631928 97.495974)
+ (xy 207.229064 97.32869) (xy 206.83669 97.328348) (xy 206.83669 91.857849) (xy 206.67011 91.454694) (xy 206.361928 91.145974)
+ (xy 205.959064 90.97869) (xy 205.56669 90.978348) (xy 205.56669 89.317849) (xy 205.40011 88.914694) (xy 205.105462 88.619531)
+ (xy 205.291423 88.433895) (xy 205.439332 88.077692) (xy 205.439668 87.692001) (xy 205.292382 87.33554) (xy 205.019895 87.062577)
+ (xy 204.663692 86.914668) (xy 204.29669 86.914348) (xy 204.29669 82.967849) (xy 204.13011 82.564694) (xy 203.821928 82.255974)
+ (xy 203.419064 82.08869) (xy 203.02669 82.088348) (xy 203.02669 80.427849) (xy 202.86011 80.024694) (xy 202.551928 79.715974)
+ (xy 202.149064 79.54869) (xy 201.75669 79.548348) (xy 201.75669 74.077849) (xy 201.59011 73.674694) (xy 201.281928 73.365974)
+ (xy 200.879064 73.19869) (xy 200.48669 73.198348) (xy 200.48669 71.537849) (xy 200.32011 71.134694) (xy 200.011928 70.825974)
+ (xy 199.609064 70.65869) (xy 199.21669 70.658348) (xy 199.21669 65.187849) (xy 199.05011 64.784694) (xy 198.741928 64.475974)
+ (xy 198.339064 64.30869) (xy 197.94669 64.308348) (xy 197.94669 62.647849) (xy 197.78011 62.244694) (xy 197.471928 61.935974)
+ (xy 197.069064 61.76869) (xy 196.632849 61.76831) (xy 196.229694 61.93489) (xy 195.920974 62.243072) (xy 195.75369 62.645936)
+ (xy 195.75331 63.082151) (xy 195.91989 63.485306) (xy 196.228072 63.794026) (xy 196.630936 63.96131) (xy 197.067151 63.96169)
+ (xy 197.470306 63.79511) (xy 197.779026 63.486928) (xy 197.94631 63.084064) (xy 197.94669 62.647849) (xy 197.94669 64.308348)
+ (xy 197.902849 64.30831) (xy 197.499694 64.47489) (xy 197.190974 64.783072) (xy 197.02369 65.185936) (xy 197.02331 65.622151)
+ (xy 197.18989 66.025306) (xy 197.498072 66.334026) (xy 197.900936 66.50131) (xy 198.337151 66.50169) (xy 198.740306 66.33511)
+ (xy 199.049026 66.026928) (xy 199.21631 65.624064) (xy 199.21669 65.187849) (xy 199.21669 70.658348) (xy 199.172849 70.65831)
+ (xy 198.769694 70.82489) (xy 198.460974 71.133072) (xy 198.29369 71.535936) (xy 198.29331 71.972151) (xy 198.45989 72.375306)
+ (xy 198.768072 72.684026) (xy 199.170936 72.85131) (xy 199.607151 72.85169) (xy 200.010306 72.68511) (xy 200.319026 72.376928)
+ (xy 200.48631 71.974064) (xy 200.48669 71.537849) (xy 200.48669 73.198348) (xy 200.442849 73.19831) (xy 200.039694 73.36489)
+ (xy 199.730974 73.673072) (xy 199.56369 74.075936) (xy 199.56331 74.512151) (xy 199.72989 74.915306) (xy 200.038072 75.224026)
+ (xy 200.440936 75.39131) (xy 200.877151 75.39169) (xy 201.280306 75.22511) (xy 201.589026 74.916928) (xy 201.75631 74.514064)
+ (xy 201.75669 74.077849) (xy 201.75669 79.548348) (xy 201.712849 79.54831) (xy 201.309694 79.71489) (xy 201.000974 80.023072)
+ (xy 200.83369 80.425936) (xy 200.83331 80.862151) (xy 200.99989 81.265306) (xy 201.308072 81.574026) (xy 201.710936 81.74131)
+ (xy 202.147151 81.74169) (xy 202.550306 81.57511) (xy 202.859026 81.266928) (xy 203.02631 80.864064) (xy 203.02669 80.427849)
+ (xy 203.02669 82.088348) (xy 202.982849 82.08831) (xy 202.579694 82.25489) (xy 202.270974 82.563072) (xy 202.10369 82.965936)
+ (xy 202.10331 83.402151) (xy 202.26989 83.805306) (xy 202.578072 84.114026) (xy 202.980936 84.28131) (xy 203.417151 84.28169)
+ (xy 203.820306 84.11511) (xy 204.129026 83.806928) (xy 204.29631 83.404064) (xy 204.29669 82.967849) (xy 204.29669 86.914348)
+ (xy 204.278001 86.914332) (xy 203.92154 87.061618) (xy 203.648577 87.334105) (xy 203.500668 87.690308) (xy 203.500332 88.075999)
+ (xy 203.647618 88.43246) (xy 203.834694 88.619863) (xy 203.540974 88.913072) (xy 203.37369 89.315936) (xy 203.37331 89.752151)
+ (xy 203.53989 90.155306) (xy 203.848072 90.464026) (xy 204.250936 90.63131) (xy 204.687151 90.63169) (xy 205.090306 90.46511)
+ (xy 205.399026 90.156928) (xy 205.56631 89.754064) (xy 205.56669 89.317849) (xy 205.56669 90.978348) (xy 205.522849 90.97831)
+ (xy 205.119694 91.14489) (xy 204.810974 91.453072) (xy 204.64369 91.855936) (xy 204.64331 92.292151) (xy 204.80989 92.695306)
+ (xy 205.118072 93.004026) (xy 205.520936 93.17131) (xy 205.957151 93.17169) (xy 206.360306 93.00511) (xy 206.669026 92.696928)
+ (xy 206.83631 92.294064) (xy 206.83669 91.857849) (xy 206.83669 97.328348) (xy 206.792849 97.32831) (xy 206.389694 97.49489)
+ (xy 206.080974 97.803072) (xy 205.91369 98.205936) (xy 205.91331 98.642151) (xy 206.07989 99.045306) (xy 206.388072 99.354026)
+ (xy 206.790936 99.52131) (xy 207.227151 99.52169) (xy 207.630306 99.35511) (xy 207.939026 99.046928) (xy 208.10631 98.644064)
+ (xy 208.10669 98.207849) (xy 208.10669 99.868348) (xy 208.062849 99.86831) (xy 207.659694 100.03489) (xy 207.350974 100.343072)
+ (xy 207.18369 100.745936) (xy 207.18331 101.182151) (xy 207.34989 101.585306) (xy 207.658072 101.894026) (xy 208.060936 102.06131)
+ (xy 208.497151 102.06169) (xy 208.900306 101.89511) (xy 209.209026 101.586928) (xy 209.37631 101.184064) (xy 209.37669 100.747849)
+ (xy 209.37669 106.218348) (xy 209.332849 106.21831) (xy 208.929694 106.38489) (xy 208.620974 106.693072) (xy 208.45369 107.095936)
+ (xy 208.45331 107.532151) (xy 208.61989 107.935306) (xy 208.928072 108.244026) (xy 209.330936 108.41131) (xy 209.767151 108.41169)
+ (xy 210.170306 108.24511) (xy 210.479026 107.936928) (xy 210.64631 107.534064) (xy 210.64669 107.097849) (xy 210.64669 108.758348)
+ (xy 210.602849 108.75831) (xy 210.199694 108.92489) (xy 209.890974 109.233072) (xy 209.72369 109.635936) (xy 209.72331 110.072151)
+ (xy 209.88989 110.475306) (xy 210.198072 110.784026) (xy 210.600936 110.95131) (xy 211.037151 110.95169) (xy 211.440306 110.78511)
+ (xy 211.749026 110.476928) (xy 211.91631 110.074064) (xy 211.91669 109.637849) (xy 211.91669 115.108348) (xy 211.872849 115.10831)
+ (xy 211.469694 115.27489) (xy 211.160974 115.583072) (xy 210.99369 115.985936) (xy 210.99331 116.422151) (xy 211.15989 116.825306)
+ (xy 211.468072 117.134026) (xy 211.870936 117.30131) (xy 212.307151 117.30169) (xy 212.710306 117.13511) (xy 213.019026 116.826928)
+ (xy 213.18631 116.424064) (xy 213.18669 115.987849) (xy 213.18669 117.648348) (xy 213.142849 117.64831) (xy 212.739694 117.81489)
+ (xy 212.430974 118.123072) (xy 212.26369 118.525936) (xy 212.26331 118.962151) (xy 212.42989 119.365306) (xy 212.738072 119.674026)
+ (xy 213.140936 119.84131) (xy 213.577151 119.84169) (xy 213.980306 119.67511) (xy 214.289026 119.366928) (xy 214.45631 118.964064)
+ (xy 214.45669 118.527849) (xy 214.45669 123.998348) (xy 214.412849 123.99831) (xy 214.009694 124.16489) (xy 213.700974 124.473072)
+ (xy 213.53369 124.875936) (xy 213.53331 125.312151) (xy 213.69989 125.715306) (xy 214.008072 126.024026) (xy 214.410936 126.19131)
+ (xy 214.847151 126.19169) (xy 215.250306 126.02511) (xy 215.559026 125.716928) (xy 215.72631 125.314064) (xy 215.72669 124.877849)
+ (xy 215.72669 126.538348) (xy 215.682849 126.53831) (xy 215.279694 126.70489) (xy 214.970974 127.013072) (xy 214.80369 127.415936)
+ (xy 214.80331 127.852151) (xy 214.96989 128.255306) (xy 215.278072 128.564026) (xy 215.680936 128.73131) (xy 216.117151 128.73169)
+ (xy 216.520306 128.56511) (xy 216.829026 128.256928) (xy 216.99631 127.854064) (xy 216.99669 127.417849) (xy 216.99669 133.7394)
+ (xy 216.027 133.7394) (xy 214.45669 133.7394) (xy 214.45669 127.417849) (xy 214.29011 127.014694) (xy 213.981928 126.705974)
+ (xy 213.579064 126.53869) (xy 213.18669 126.538348) (xy 213.18669 124.877849) (xy 213.02011 124.474694) (xy 212.711928 124.165974)
+ (xy 212.309064 123.99869) (xy 211.91669 123.998348) (xy 211.91669 118.527849) (xy 211.75011 118.124694) (xy 211.441928 117.815974)
+ (xy 211.039064 117.64869) (xy 210.64669 117.648348) (xy 210.64669 115.987849) (xy 210.48011 115.584694) (xy 210.171928 115.275974)
+ (xy 209.769064 115.10869) (xy 209.37669 115.108348) (xy 209.37669 109.637849) (xy 209.21011 109.234694) (xy 208.901928 108.925974)
+ (xy 208.499064 108.75869) (xy 208.10669 108.758348) (xy 208.10669 107.097849) (xy 207.94011 106.694694) (xy 207.631928 106.385974)
+ (xy 207.229064 106.21869) (xy 206.83669 106.218348) (xy 206.83669 100.747849) (xy 206.67011 100.344694) (xy 206.361928 100.035974)
+ (xy 205.959064 99.86869) (xy 205.56669 99.868348) (xy 205.56669 98.207849) (xy 205.40011 97.804694) (xy 205.091928 97.495974)
+ (xy 204.689064 97.32869) (xy 204.29669 97.328348) (xy 204.29669 91.857849) (xy 204.13011 91.454694) (xy 203.821928 91.145974)
+ (xy 203.419064 90.97869) (xy 203.02669 90.978348) (xy 203.02669 89.317849) (xy 202.86011 88.914694) (xy 202.551928 88.605974)
+ (xy 202.149064 88.43869) (xy 201.75669 88.438348) (xy 201.75669 82.967849) (xy 201.59011 82.564694) (xy 201.281928 82.255974)
+ (xy 200.879064 82.08869) (xy 200.48669 82.088348) (xy 200.48669 80.427849) (xy 200.32011 80.024694) (xy 200.011928 79.715974)
+ (xy 199.609064 79.54869) (xy 199.21669 79.548348) (xy 199.21669 74.077849) (xy 199.05011 73.674694) (xy 198.741928 73.365974)
+ (xy 198.339064 73.19869) (xy 197.94669 73.198348) (xy 197.94669 71.537849) (xy 197.78011 71.134694) (xy 197.471928 70.825974)
+ (xy 197.069064 70.65869) (xy 196.67669 70.658348) (xy 196.67669 65.187849) (xy 196.51011 64.784694) (xy 196.201928 64.475974)
+ (xy 195.799064 64.30869) (xy 195.40669 64.308348) (xy 195.40669 62.647849) (xy 195.24011 62.244694) (xy 194.931928 61.935974)
+ (xy 194.529064 61.76869) (xy 194.092849 61.76831) (xy 193.689694 61.93489) (xy 193.380974 62.243072) (xy 193.21369 62.645936)
+ (xy 193.21331 63.082151) (xy 193.37989 63.485306) (xy 193.688072 63.794026) (xy 194.090936 63.96131) (xy 194.527151 63.96169)
+ (xy 194.930306 63.79511) (xy 195.239026 63.486928) (xy 195.40631 63.084064) (xy 195.40669 62.647849) (xy 195.40669 64.308348)
+ (xy 195.362849 64.30831) (xy 194.959694 64.47489) (xy 194.650974 64.783072) (xy 194.48369 65.185936) (xy 194.48331 65.622151)
+ (xy 194.64989 66.025306) (xy 194.958072 66.334026) (xy 195.360936 66.50131) (xy 195.797151 66.50169) (xy 196.200306 66.33511)
+ (xy 196.509026 66.026928) (xy 196.67631 65.624064) (xy 196.67669 65.187849) (xy 196.67669 70.658348) (xy 196.632849 70.65831)
+ (xy 196.229694 70.82489) (xy 195.920974 71.133072) (xy 195.75369 71.535936) (xy 195.75331 71.972151) (xy 195.91989 72.375306)
+ (xy 196.228072 72.684026) (xy 196.630936 72.85131) (xy 197.067151 72.85169) (xy 197.470306 72.68511) (xy 197.779026 72.376928)
+ (xy 197.94631 71.974064) (xy 197.94669 71.537849) (xy 197.94669 73.198348) (xy 197.902849 73.19831) (xy 197.499694 73.36489)
+ (xy 197.190974 73.673072) (xy 197.02369 74.075936) (xy 197.02331 74.512151) (xy 197.18989 74.915306) (xy 197.498072 75.224026)
+ (xy 197.900936 75.39131) (xy 198.337151 75.39169) (xy 198.740306 75.22511) (xy 199.049026 74.916928) (xy 199.21631 74.514064)
+ (xy 199.21669 74.077849) (xy 199.21669 79.548348) (xy 199.172849 79.54831) (xy 198.769694 79.71489) (xy 198.460974 80.023072)
+ (xy 198.29369 80.425936) (xy 198.29331 80.862151) (xy 198.45989 81.265306) (xy 198.768072 81.574026) (xy 199.170936 81.74131)
+ (xy 199.607151 81.74169) (xy 200.010306 81.57511) (xy 200.319026 81.266928) (xy 200.48631 80.864064) (xy 200.48669 80.427849)
+ (xy 200.48669 82.088348) (xy 200.442849 82.08831) (xy 200.039694 82.25489) (xy 199.730974 82.563072) (xy 199.56369 82.965936)
+ (xy 199.56331 83.402151) (xy 199.72989 83.805306) (xy 200.038072 84.114026) (xy 200.440936 84.28131) (xy 200.877151 84.28169)
+ (xy 201.280306 84.11511) (xy 201.589026 83.806928) (xy 201.75631 83.404064) (xy 201.75669 82.967849) (xy 201.75669 88.438348)
+ (xy 201.712849 88.43831) (xy 201.629668 88.472679) (xy 201.629668 85.660001) (xy 201.482382 85.30354) (xy 201.209895 85.030577)
+ (xy 200.853692 84.882668) (xy 200.468001 84.882332) (xy 200.11154 85.029618) (xy 199.838577 85.302105) (xy 199.690668 85.658308)
+ (xy 199.690332 86.043999) (xy 199.837618 86.40046) (xy 200.110105 86.673423) (xy 200.466308 86.821332) (xy 200.851999 86.821668)
+ (xy 201.20846 86.674382) (xy 201.481423 86.401895) (xy 201.629332 86.045692) (xy 201.629668 85.660001) (xy 201.629668 88.472679)
+ (xy 201.309694 88.60489) (xy 201.000974 88.913072) (xy 200.83369 89.315936) (xy 200.83331 89.752151) (xy 200.99989 90.155306)
+ (xy 201.308072 90.464026) (xy 201.710936 90.63131) (xy 202.147151 90.63169) (xy 202.550306 90.46511) (xy 202.859026 90.156928)
+ (xy 203.02631 89.754064) (xy 203.02669 89.317849) (xy 203.02669 90.978348) (xy 202.982849 90.97831) (xy 202.579694 91.14489)
+ (xy 202.270974 91.453072) (xy 202.10369 91.855936) (xy 202.10331 92.292151) (xy 202.26989 92.695306) (xy 202.578072 93.004026)
+ (xy 202.980936 93.17131) (xy 203.417151 93.17169) (xy 203.820306 93.00511) (xy 204.129026 92.696928) (xy 204.29631 92.294064)
+ (xy 204.29669 91.857849) (xy 204.29669 97.328348) (xy 204.252849 97.32831) (xy 203.849694 97.49489) (xy 203.540974 97.803072)
+ (xy 203.37369 98.205936) (xy 203.37331 98.642151) (xy 203.53989 99.045306) (xy 203.848072 99.354026) (xy 204.250936 99.52131)
+ (xy 204.687151 99.52169) (xy 205.090306 99.35511) (xy 205.399026 99.046928) (xy 205.56631 98.644064) (xy 205.56669 98.207849)
+ (xy 205.56669 99.868348) (xy 205.522849 99.86831) (xy 205.119694 100.03489) (xy 204.810974 100.343072) (xy 204.64369 100.745936)
+ (xy 204.64331 101.182151) (xy 204.80989 101.585306) (xy 205.118072 101.894026) (xy 205.520936 102.06131) (xy 205.957151 102.06169)
+ (xy 206.360306 101.89511) (xy 206.669026 101.586928) (xy 206.83631 101.184064) (xy 206.83669 100.747849) (xy 206.83669 106.218348)
+ (xy 206.792849 106.21831) (xy 206.389694 106.38489) (xy 206.080974 106.693072) (xy 205.91369 107.095936) (xy 205.91331 107.532151)
+ (xy 206.07989 107.935306) (xy 206.388072 108.244026) (xy 206.790936 108.41131) (xy 207.227151 108.41169) (xy 207.630306 108.24511)
+ (xy 207.939026 107.936928) (xy 208.10631 107.534064) (xy 208.10669 107.097849) (xy 208.10669 108.758348) (xy 208.062849 108.75831)
+ (xy 207.659694 108.92489) (xy 207.350974 109.233072) (xy 207.18369 109.635936) (xy 207.18331 110.072151) (xy 207.34989 110.475306)
+ (xy 207.658072 110.784026) (xy 208.060936 110.95131) (xy 208.497151 110.95169) (xy 208.900306 110.78511) (xy 209.209026 110.476928)
+ (xy 209.37631 110.074064) (xy 209.37669 109.637849) (xy 209.37669 115.108348) (xy 209.332849 115.10831) (xy 208.929694 115.27489)
+ (xy 208.620974 115.583072) (xy 208.45369 115.985936) (xy 208.45331 116.422151) (xy 208.61989 116.825306) (xy 208.928072 117.134026)
+ (xy 209.330936 117.30131) (xy 209.767151 117.30169) (xy 210.170306 117.13511) (xy 210.479026 116.826928) (xy 210.64631 116.424064)
+ (xy 210.64669 115.987849) (xy 210.64669 117.648348) (xy 210.602849 117.64831) (xy 210.199694 117.81489) (xy 209.890974 118.123072)
+ (xy 209.72369 118.525936) (xy 209.72331 118.962151) (xy 209.88989 119.365306) (xy 210.198072 119.674026) (xy 210.600936 119.84131)
+ (xy 211.037151 119.84169) (xy 211.440306 119.67511) (xy 211.749026 119.366928) (xy 211.91631 118.964064) (xy 211.91669 118.527849)
+ (xy 211.91669 123.998348) (xy 211.872849 123.99831) (xy 211.469694 124.16489) (xy 211.160974 124.473072) (xy 210.99369 124.875936)
+ (xy 210.99331 125.312151) (xy 211.15989 125.715306) (xy 211.468072 126.024026) (xy 211.870936 126.19131) (xy 212.307151 126.19169)
+ (xy 212.710306 126.02511) (xy 213.019026 125.716928) (xy 213.18631 125.314064) (xy 213.18669 124.877849) (xy 213.18669 126.538348)
+ (xy 213.142849 126.53831) (xy 212.739694 126.70489) (xy 212.430974 127.013072) (xy 212.26369 127.415936) (xy 212.26331 127.852151)
+ (xy 212.42989 128.255306) (xy 212.738072 128.564026) (xy 213.140936 128.73131) (xy 213.577151 128.73169) (xy 213.980306 128.56511)
+ (xy 214.289026 128.256928) (xy 214.45631 127.854064) (xy 214.45669 127.417849) (xy 214.45669 133.7394) (xy 211.91669 133.7394)
+ (xy 211.91669 127.417849) (xy 211.75011 127.014694) (xy 211.441928 126.705974) (xy 211.039064 126.53869) (xy 210.64669 126.538348)
+ (xy 210.64669 124.877849) (xy 210.48011 124.474694) (xy 210.171928 124.165974) (xy 209.769064 123.99869) (xy 209.37669 123.998348)
+ (xy 209.37669 118.527849) (xy 209.21011 118.124694) (xy 208.901928 117.815974) (xy 208.499064 117.64869) (xy 208.10669 117.648348)
+ (xy 208.10669 115.987849) (xy 207.94011 115.584694) (xy 207.631928 115.275974) (xy 207.229064 115.10869) (xy 206.83669 115.108348)
+ (xy 206.83669 109.637849) (xy 206.67011 109.234694) (xy 206.361928 108.925974) (xy 205.959064 108.75869) (xy 205.56669 108.758348)
+ (xy 205.56669 107.097849) (xy 205.40011 106.694694) (xy 205.091928 106.385974) (xy 204.689064 106.21869) (xy 204.29669 106.218348)
+ (xy 204.29669 100.747849) (xy 204.13011 100.344694) (xy 203.821928 100.035974) (xy 203.419064 99.86869) (xy 203.02669 99.868348)
+ (xy 203.02669 98.207849) (xy 202.86011 97.804694) (xy 202.551928 97.495974) (xy 202.149064 97.32869) (xy 201.75669 97.328348)
+ (xy 201.75669 91.857849) (xy 201.59011 91.454694) (xy 201.281928 91.145974) (xy 200.879064 90.97869) (xy 200.48669 90.978348)
+ (xy 200.48669 89.317849) (xy 200.32011 88.914694) (xy 200.011928 88.605974) (xy 199.609064 88.43869) (xy 199.21669 88.438348)
+ (xy 199.21669 82.967849) (xy 199.05011 82.564694) (xy 198.741928 82.255974) (xy 198.339064 82.08869) (xy 197.94669 82.088348)
+ (xy 197.94669 80.427849) (xy 197.78011 80.024694) (xy 197.471928 79.715974) (xy 197.069064 79.54869) (xy 196.67669 79.548348)
+ (xy 196.67669 74.077849) (xy 196.51011 73.674694) (xy 196.201928 73.365974) (xy 195.799064 73.19869) (xy 195.40669 73.198348)
+ (xy 195.40669 71.537849) (xy 195.24011 71.134694) (xy 194.931928 70.825974) (xy 194.529064 70.65869) (xy 194.13669 70.658348)
+ (xy 194.13669 65.187849) (xy 193.97011 64.784694) (xy 193.661928 64.475974) (xy 193.259064 64.30869) (xy 192.86669 64.308348)
+ (xy 192.86669 62.647849) (xy 192.70011 62.244694) (xy 192.391928 61.935974) (xy 191.989064 61.76869) (xy 191.552849 61.76831)
+ (xy 191.149694 61.93489) (xy 190.840974 62.243072) (xy 190.67369 62.645936) (xy 190.67331 63.082151) (xy 190.83989 63.485306)
+ (xy 191.148072 63.794026) (xy 191.550936 63.96131) (xy 191.987151 63.96169) (xy 192.390306 63.79511) (xy 192.699026 63.486928)
+ (xy 192.86631 63.084064) (xy 192.86669 62.647849) (xy 192.86669 64.308348) (xy 192.822849 64.30831) (xy 192.419694 64.47489)
+ (xy 192.110974 64.783072) (xy 191.94369 65.185936) (xy 191.94331 65.622151) (xy 192.10989 66.025306) (xy 192.418072 66.334026)
+ (xy 192.820936 66.50131) (xy 193.257151 66.50169) (xy 193.660306 66.33511) (xy 193.969026 66.026928) (xy 194.13631 65.624064)
+ (xy 194.13669 65.187849) (xy 194.13669 70.658348) (xy 194.092849 70.65831) (xy 193.689694 70.82489) (xy 193.380974 71.133072)
+ (xy 193.21369 71.535936) (xy 193.21331 71.972151) (xy 193.37989 72.375306) (xy 193.688072 72.684026) (xy 194.090936 72.85131)
+ (xy 194.527151 72.85169) (xy 194.930306 72.68511) (xy 195.239026 72.376928) (xy 195.40631 71.974064) (xy 195.40669 71.537849)
+ (xy 195.40669 73.198348) (xy 195.362849 73.19831) (xy 194.959694 73.36489) (xy 194.650974 73.673072) (xy 194.48369 74.075936)
+ (xy 194.48331 74.512151) (xy 194.64989 74.915306) (xy 194.958072 75.224026) (xy 195.360936 75.39131) (xy 195.797151 75.39169)
+ (xy 196.200306 75.22511) (xy 196.509026 74.916928) (xy 196.67631 74.514064) (xy 196.67669 74.077849) (xy 196.67669 79.548348)
+ (xy 196.632849 79.54831) (xy 196.229694 79.71489) (xy 195.920974 80.023072) (xy 195.75369 80.425936) (xy 195.75331 80.862151)
+ (xy 195.91989 81.265306) (xy 196.228072 81.574026) (xy 196.630936 81.74131) (xy 197.067151 81.74169) (xy 197.470306 81.57511)
+ (xy 197.779026 81.266928) (xy 197.94631 80.864064) (xy 197.94669 80.427849) (xy 197.94669 82.088348) (xy 197.902849 82.08831)
+ (xy 197.499694 82.25489) (xy 197.190974 82.563072) (xy 197.02369 82.965936) (xy 197.02331 83.402151) (xy 197.18989 83.805306)
+ (xy 197.498072 84.114026) (xy 197.900936 84.28131) (xy 198.337151 84.28169) (xy 198.740306 84.11511) (xy 199.049026 83.806928)
+ (xy 199.21631 83.404064) (xy 199.21669 82.967849) (xy 199.21669 88.438348) (xy 199.172849 88.43831) (xy 198.769694 88.60489)
+ (xy 198.460974 88.913072) (xy 198.29369 89.315936) (xy 198.29331 89.752151) (xy 198.45989 90.155306) (xy 198.768072 90.464026)
+ (xy 199.170936 90.63131) (xy 199.607151 90.63169) (xy 200.010306 90.46511) (xy 200.319026 90.156928) (xy 200.48631 89.754064)
+ (xy 200.48669 89.317849) (xy 200.48669 90.978348) (xy 200.442849 90.97831) (xy 200.039694 91.14489) (xy 199.730974 91.453072)
+ (xy 199.56369 91.855936) (xy 199.56331 92.292151) (xy 199.72989 92.695306) (xy 200.038072 93.004026) (xy 200.440936 93.17131)
+ (xy 200.877151 93.17169) (xy 201.280306 93.00511) (xy 201.589026 92.696928) (xy 201.75631 92.294064) (xy 201.75669 91.857849)
+ (xy 201.75669 97.328348) (xy 201.712849 97.32831) (xy 201.309694 97.49489) (xy 201.000974 97.803072) (xy 200.83369 98.205936)
+ (xy 200.83331 98.642151) (xy 200.99989 99.045306) (xy 201.308072 99.354026) (xy 201.710936 99.52131) (xy 202.147151 99.52169)
+ (xy 202.550306 99.35511) (xy 202.859026 99.046928) (xy 203.02631 98.644064) (xy 203.02669 98.207849) (xy 203.02669 99.868348)
+ (xy 202.982849 99.86831) (xy 202.579694 100.03489) (xy 202.270974 100.343072) (xy 202.10369 100.745936) (xy 202.10331 101.182151)
+ (xy 202.26989 101.585306) (xy 202.578072 101.894026) (xy 202.980936 102.06131) (xy 203.417151 102.06169) (xy 203.820306 101.89511)
+ (xy 204.129026 101.586928) (xy 204.29631 101.184064) (xy 204.29669 100.747849) (xy 204.29669 106.218348) (xy 204.252849 106.21831)
+ (xy 203.849694 106.38489) (xy 203.540974 106.693072) (xy 203.37369 107.095936) (xy 203.37331 107.532151) (xy 203.53989 107.935306)
+ (xy 203.848072 108.244026) (xy 204.250936 108.41131) (xy 204.687151 108.41169) (xy 205.090306 108.24511) (xy 205.399026 107.936928)
+ (xy 205.56631 107.534064) (xy 205.56669 107.097849) (xy 205.56669 108.758348) (xy 205.522849 108.75831) (xy 205.119694 108.92489)
+ (xy 204.810974 109.233072) (xy 204.64369 109.635936) (xy 204.64331 110.072151) (xy 204.80989 110.475306) (xy 205.118072 110.784026)
+ (xy 205.520936 110.95131) (xy 205.957151 110.95169) (xy 206.360306 110.78511) (xy 206.669026 110.476928) (xy 206.83631 110.074064)
+ (xy 206.83669 109.637849) (xy 206.83669 115.108348) (xy 206.792849 115.10831) (xy 206.389694 115.27489) (xy 206.080974 115.583072)
+ (xy 205.91369 115.985936) (xy 205.91331 116.422151) (xy 206.07989 116.825306) (xy 206.388072 117.134026) (xy 206.790936 117.30131)
+ (xy 207.227151 117.30169) (xy 207.630306 117.13511) (xy 207.939026 116.826928) (xy 208.10631 116.424064) (xy 208.10669 115.987849)
+ (xy 208.10669 117.648348) (xy 208.062849 117.64831) (xy 207.659694 117.81489) (xy 207.350974 118.123072) (xy 207.18369 118.525936)
+ (xy 207.18331 118.962151) (xy 207.34989 119.365306) (xy 207.658072 119.674026) (xy 208.060936 119.84131) (xy 208.497151 119.84169)
+ (xy 208.900306 119.67511) (xy 209.209026 119.366928) (xy 209.37631 118.964064) (xy 209.37669 118.527849) (xy 209.37669 123.998348)
+ (xy 209.332849 123.99831) (xy 208.929694 124.16489) (xy 208.620974 124.473072) (xy 208.45369 124.875936) (xy 208.45331 125.312151)
+ (xy 208.61989 125.715306) (xy 208.928072 126.024026) (xy 209.330936 126.19131) (xy 209.767151 126.19169) (xy 210.170306 126.02511)
+ (xy 210.479026 125.716928) (xy 210.64631 125.314064) (xy 210.64669 124.877849) (xy 210.64669 126.538348) (xy 210.602849 126.53831)
+ (xy 210.199694 126.70489) (xy 209.890974 127.013072) (xy 209.72369 127.415936) (xy 209.72331 127.852151) (xy 209.88989 128.255306)
+ (xy 210.198072 128.564026) (xy 210.600936 128.73131) (xy 211.037151 128.73169) (xy 211.440306 128.56511) (xy 211.749026 128.256928)
+ (xy 211.91631 127.854064) (xy 211.91669 127.417849) (xy 211.91669 133.7394) (xy 209.37669 133.7394) (xy 209.37669 127.417849)
+ (xy 209.21011 127.014694) (xy 208.901928 126.705974) (xy 208.499064 126.53869) (xy 208.10669 126.538348) (xy 208.10669 124.877849)
+ (xy 207.94011 124.474694) (xy 207.631928 124.165974) (xy 207.229064 123.99869) (xy 206.83669 123.998348) (xy 206.83669 118.527849)
+ (xy 206.67011 118.124694) (xy 206.361928 117.815974) (xy 205.959064 117.64869) (xy 205.56669 117.648348) (xy 205.56669 115.987849)
+ (xy 205.40011 115.584694) (xy 205.091928 115.275974) (xy 204.689064 115.10869) (xy 204.29669 115.108348) (xy 204.29669 109.637849)
+ (xy 204.13011 109.234694) (xy 203.821928 108.925974) (xy 203.419064 108.75869) (xy 203.02669 108.758348) (xy 203.02669 107.097849)
+ (xy 202.86011 106.694694) (xy 202.551928 106.385974) (xy 202.149064 106.21869) (xy 201.75669 106.218348) (xy 201.75669 100.747849)
+ (xy 201.59011 100.344694) (xy 201.281928 100.035974) (xy 200.879064 99.86869) (xy 200.48669 99.868348) (xy 200.48669 98.207849)
+ (xy 200.32011 97.804694) (xy 200.011928 97.495974) (xy 199.609064 97.32869) (xy 199.21669 97.328348) (xy 199.21669 91.857849)
+ (xy 199.05011 91.454694) (xy 198.741928 91.145974) (xy 198.339064 90.97869) (xy 197.94669 90.978348) (xy 197.94669 89.317849)
+ (xy 197.78011 88.914694) (xy 197.471928 88.605974) (xy 197.069064 88.43869) (xy 196.67669 88.438348) (xy 196.67669 82.967849)
+ (xy 196.51011 82.564694) (xy 196.201928 82.255974) (xy 195.799064 82.08869) (xy 195.40669 82.088348) (xy 195.40669 80.427849)
+ (xy 195.24011 80.024694) (xy 194.931928 79.715974) (xy 194.529064 79.54869) (xy 194.13669 79.548348) (xy 194.13669 74.077849)
+ (xy 193.97011 73.674694) (xy 193.661928 73.365974) (xy 193.259064 73.19869) (xy 192.86669 73.198348) (xy 192.86669 71.537849)
+ (xy 192.70011 71.134694) (xy 192.391928 70.825974) (xy 191.989064 70.65869) (xy 191.59669 70.658348) (xy 191.59669 65.187849)
+ (xy 191.43011 64.784694) (xy 191.121928 64.475974) (xy 190.719064 64.30869) (xy 190.32669 64.308348) (xy 190.32669 62.647849)
+ (xy 190.16011 62.244694) (xy 189.851928 61.935974) (xy 189.449064 61.76869) (xy 189.012849 61.76831) (xy 188.609694 61.93489)
+ (xy 188.300974 62.243072) (xy 188.13369 62.645936) (xy 188.13331 63.082151) (xy 188.29989 63.485306) (xy 188.608072 63.794026)
+ (xy 189.010936 63.96131) (xy 189.447151 63.96169) (xy 189.850306 63.79511) (xy 190.159026 63.486928) (xy 190.32631 63.084064)
+ (xy 190.32669 62.647849) (xy 190.32669 64.308348) (xy 190.282849 64.30831) (xy 189.879694 64.47489) (xy 189.570974 64.783072)
+ (xy 189.40369 65.185936) (xy 189.40331 65.622151) (xy 189.56989 66.025306) (xy 189.878072 66.334026) (xy 190.280936 66.50131)
+ (xy 190.717151 66.50169) (xy 191.120306 66.33511) (xy 191.429026 66.026928) (xy 191.59631 65.624064) (xy 191.59669 65.187849)
+ (xy 191.59669 70.658348) (xy 191.552849 70.65831) (xy 191.149694 70.82489) (xy 190.840974 71.133072) (xy 190.67369 71.535936)
+ (xy 190.67331 71.972151) (xy 190.83989 72.375306) (xy 191.148072 72.684026) (xy 191.550936 72.85131) (xy 191.987151 72.85169)
+ (xy 192.390306 72.68511) (xy 192.699026 72.376928) (xy 192.86631 71.974064) (xy 192.86669 71.537849) (xy 192.86669 73.198348)
+ (xy 192.822849 73.19831) (xy 192.419694 73.36489) (xy 192.110974 73.673072) (xy 191.94369 74.075936) (xy 191.943373 74.438701)
+ (xy 191.709692 74.341668) (xy 191.59646 74.341569) (xy 191.59669 74.077849) (xy 191.43011 73.674694) (xy 191.121928 73.365974)
+ (xy 190.719064 73.19869) (xy 190.32669 73.198348) (xy 190.32669 71.537849) (xy 190.16011 71.134694) (xy 189.851928 70.825974)
+ (xy 189.449064 70.65869) (xy 189.05669 70.658348) (xy 189.05669 65.187849) (xy 188.89011 64.784694) (xy 188.581928 64.475974)
+ (xy 188.179064 64.30869) (xy 187.79003 64.308351) (xy 187.79003 62.665461) (xy 187.629934 62.259687) (xy 187.608934 62.228257)
+ (xy 187.405178 62.185177) (xy 187.369823 62.220532) (xy 187.369823 62.149822) (xy 187.326743 61.946066) (xy 186.926613 61.772345)
+ (xy 186.490461 61.76497) (xy 186.084687 61.925066) (xy 186.053257 61.946066) (xy 186.010177 62.149822) (xy 186.69 62.829645)
+ (xy 187.369823 62.149822) (xy 187.369823 62.220532) (xy 186.725355 62.865) (xy 187.405178 63.544823) (xy 187.608934 63.501743)
+ (xy 187.782655 63.101613) (xy 187.79003 62.665461) (xy 187.79003 64.308351) (xy 187.742849 64.30831) (xy 187.369823 64.46244)
+ (xy 187.369823 63.580178) (xy 186.69 62.900355) (xy 186.654645 62.93571) (xy 186.654645 62.865) (xy 185.974822 62.185177)
+ (xy 185.771066 62.228257) (xy 185.597345 62.628387) (xy 185.58997 63.064539) (xy 185.750066 63.470313) (xy 185.771066 63.501743)
+ (xy 185.974822 63.544823) (xy 186.654645 62.865) (xy 186.654645 62.93571) (xy 186.010177 63.580178) (xy 186.053257 63.783934)
+ (xy 186.453387 63.957655) (xy 186.889539 63.96503) (xy 187.295313 63.804934) (xy 187.326743 63.783934) (xy 187.369823 63.580178)
+ (xy 187.369823 64.46244) (xy 187.339694 64.47489) (xy 187.030974 64.783072) (xy 186.86369 65.185936) (xy 186.86331 65.622151)
+ (xy 187.02989 66.025306) (xy 187.338072 66.334026) (xy 187.740936 66.50131) (xy 188.177151 66.50169) (xy 188.580306 66.33511)
+ (xy 188.889026 66.026928) (xy 189.05631 65.624064) (xy 189.05669 65.187849) (xy 189.05669 70.658348) (xy 189.012849 70.65831)
+ (xy 188.609694 70.82489) (xy 188.300974 71.133072) (xy 188.13369 71.535936) (xy 188.13331 71.972151) (xy 188.29989 72.375306)
+ (xy 188.608072 72.684026) (xy 189.010936 72.85131) (xy 189.447151 72.85169) (xy 189.850306 72.68511) (xy 190.159026 72.376928)
+ (xy 190.32631 71.974064) (xy 190.32669 71.537849) (xy 190.32669 73.198348) (xy 190.282849 73.19831) (xy 189.879694 73.36489)
+ (xy 189.570974 73.673072) (xy 189.40369 74.075936) (xy 189.40331 74.512151) (xy 189.56989 74.915306) (xy 189.80706 75.15289)
+ (xy 189.57054 75.250618) (xy 189.297577 75.523105) (xy 189.149668 75.879308) (xy 189.149332 76.264999) (xy 189.296618 76.62146)
+ (xy 189.569105 76.894423) (xy 189.925308 77.042332) (xy 190.310999 77.042668) (xy 190.66746 76.895382) (xy 190.940423 76.622895)
+ (xy 191.088332 76.266692) (xy 191.088404 76.183206) (xy 191.322308 76.280332) (xy 191.707999 76.280668) (xy 191.739323 76.267725)
+ (xy 191.689668 76.387308) (xy 191.689332 76.772999) (xy 191.836618 77.12946) (xy 192.109105 77.402423) (xy 192.465308 77.550332)
+ (xy 192.850999 77.550668) (xy 193.20746 77.403382) (xy 193.480423 77.130895) (xy 193.628332 76.774692) (xy 193.628668 76.389001)
+ (xy 193.481382 76.03254) (xy 193.208895 75.759577) (xy 192.852692 75.611668) (xy 192.467001 75.611332) (xy 192.435676 75.624274)
+ (xy 192.485332 75.504692) (xy 192.485552 75.252046) (xy 192.820936 75.39131) (xy 193.257151 75.39169) (xy 193.660306 75.22511)
+ (xy 193.969026 74.916928) (xy 194.13631 74.514064) (xy 194.13669 74.077849) (xy 194.13669 79.548348) (xy 194.092849 79.54831)
+ (xy 193.689694 79.71489) (xy 193.380974 80.023072) (xy 193.21369 80.425936) (xy 193.21331 80.862151) (xy 193.37989 81.265306)
+ (xy 193.688072 81.574026) (xy 194.090936 81.74131) (xy 194.527151 81.74169) (xy 194.930306 81.57511) (xy 195.239026 81.266928)
+ (xy 195.40631 80.864064) (xy 195.40669 80.427849) (xy 195.40669 82.088348) (xy 195.362849 82.08831) (xy 194.959694 82.25489)
+ (xy 194.650974 82.563072) (xy 194.48369 82.965936) (xy 194.48331 83.402151) (xy 194.64989 83.805306) (xy 194.958072 84.114026)
+ (xy 195.360936 84.28131) (xy 195.797151 84.28169) (xy 196.200306 84.11511) (xy 196.509026 83.806928) (xy 196.67631 83.404064)
+ (xy 196.67669 82.967849) (xy 196.67669 88.438348) (xy 196.632849 88.43831) (xy 196.229694 88.60489) (xy 195.920974 88.913072)
+ (xy 195.75369 89.315936) (xy 195.75331 89.752151) (xy 195.91989 90.155306) (xy 196.228072 90.464026) (xy 196.630936 90.63131)
+ (xy 197.067151 90.63169) (xy 197.470306 90.46511) (xy 197.779026 90.156928) (xy 197.94631 89.754064) (xy 197.94669 89.317849)
+ (xy 197.94669 90.978348) (xy 197.902849 90.97831) (xy 197.499694 91.14489) (xy 197.190974 91.453072) (xy 197.02369 91.855936)
+ (xy 197.02331 92.292151) (xy 197.18989 92.695306) (xy 197.498072 93.004026) (xy 197.900936 93.17131) (xy 198.337151 93.17169)
+ (xy 198.740306 93.00511) (xy 199.049026 92.696928) (xy 199.21631 92.294064) (xy 199.21669 91.857849) (xy 199.21669 97.328348)
+ (xy 199.172849 97.32831) (xy 198.769694 97.49489) (xy 198.460974 97.803072) (xy 198.29369 98.205936) (xy 198.29331 98.642151)
+ (xy 198.45989 99.045306) (xy 198.768072 99.354026) (xy 199.170936 99.52131) (xy 199.607151 99.52169) (xy 200.010306 99.35511)
+ (xy 200.319026 99.046928) (xy 200.48631 98.644064) (xy 200.48669 98.207849) (xy 200.48669 99.868348) (xy 200.442849 99.86831)
+ (xy 200.039694 100.03489) (xy 199.730974 100.343072) (xy 199.56369 100.745936) (xy 199.56331 101.182151) (xy 199.72989 101.585306)
+ (xy 200.038072 101.894026) (xy 200.440936 102.06131) (xy 200.877151 102.06169) (xy 201.280306 101.89511) (xy 201.589026 101.586928)
+ (xy 201.75631 101.184064) (xy 201.75669 100.747849) (xy 201.75669 106.218348) (xy 201.712849 106.21831) (xy 201.309694 106.38489)
+ (xy 201.000974 106.693072) (xy 200.83369 107.095936) (xy 200.83331 107.532151) (xy 200.99989 107.935306) (xy 201.308072 108.244026)
+ (xy 201.710936 108.41131) (xy 202.147151 108.41169) (xy 202.550306 108.24511) (xy 202.859026 107.936928) (xy 203.02631 107.534064)
+ (xy 203.02669 107.097849) (xy 203.02669 108.758348) (xy 202.982849 108.75831) (xy 202.579694 108.92489) (xy 202.270974 109.233072)
+ (xy 202.10369 109.635936) (xy 202.10331 110.072151) (xy 202.26989 110.475306) (xy 202.578072 110.784026) (xy 202.980936 110.95131)
+ (xy 203.417151 110.95169) (xy 203.820306 110.78511) (xy 204.129026 110.476928) (xy 204.29631 110.074064) (xy 204.29669 109.637849)
+ (xy 204.29669 115.108348) (xy 204.252849 115.10831) (xy 203.849694 115.27489) (xy 203.540974 115.583072) (xy 203.37369 115.985936)
+ (xy 203.37331 116.422151) (xy 203.53989 116.825306) (xy 203.848072 117.134026) (xy 204.250936 117.30131) (xy 204.687151 117.30169)
+ (xy 205.090306 117.13511) (xy 205.399026 116.826928) (xy 205.56631 116.424064) (xy 205.56669 115.987849) (xy 205.56669 117.648348)
+ (xy 205.522849 117.64831) (xy 205.119694 117.81489) (xy 204.810974 118.123072) (xy 204.64369 118.525936) (xy 204.64331 118.962151)
+ (xy 204.80989 119.365306) (xy 205.118072 119.674026) (xy 205.520936 119.84131) (xy 205.957151 119.84169) (xy 206.360306 119.67511)
+ (xy 206.669026 119.366928) (xy 206.83631 118.964064) (xy 206.83669 118.527849) (xy 206.83669 123.998348) (xy 206.792849 123.99831)
+ (xy 206.389694 124.16489) (xy 206.080974 124.473072) (xy 205.91369 124.875936) (xy 205.91331 125.312151) (xy 206.07989 125.715306)
+ (xy 206.388072 126.024026) (xy 206.790936 126.19131) (xy 207.227151 126.19169) (xy 207.630306 126.02511) (xy 207.939026 125.716928)
+ (xy 208.10631 125.314064) (xy 208.10669 124.877849) (xy 208.10669 126.538348) (xy 208.062849 126.53831) (xy 207.659694 126.70489)
+ (xy 207.350974 127.013072) (xy 207.18369 127.415936) (xy 207.18331 127.852151) (xy 207.34989 128.255306) (xy 207.658072 128.564026)
+ (xy 208.060936 128.73131) (xy 208.497151 128.73169) (xy 208.900306 128.56511) (xy 209.209026 128.256928) (xy 209.37631 127.854064)
+ (xy 209.37669 127.417849) (xy 209.37669 133.7394) (xy 206.83669 133.7394) (xy 206.83669 127.417849) (xy 206.67011 127.014694)
+ (xy 206.361928 126.705974) (xy 205.959064 126.53869) (xy 205.56669 126.538348) (xy 205.56669 124.877849) (xy 205.40011 124.474694)
+ (xy 205.091928 124.165974) (xy 204.689064 123.99869) (xy 204.29669 123.998348) (xy 204.29669 118.527849) (xy 204.13011 118.124694)
+ (xy 203.821928 117.815974) (xy 203.419064 117.64869) (xy 203.02669 117.648348) (xy 203.02669 115.987849) (xy 202.86011 115.584694)
+ (xy 202.551928 115.275974) (xy 202.149064 115.10869) (xy 201.75669 115.108348) (xy 201.75669 109.637849) (xy 201.59011 109.234694)
+ (xy 201.281928 108.925974) (xy 200.879064 108.75869) (xy 200.48669 108.758348) (xy 200.48669 107.097849) (xy 200.32011 106.694694)
+ (xy 200.011928 106.385974) (xy 199.609064 106.21869) (xy 199.21669 106.218348) (xy 199.21669 100.747849) (xy 199.05011 100.344694)
+ (xy 198.741928 100.035974) (xy 198.339064 99.86869) (xy 197.94669 99.868348) (xy 197.94669 98.207849) (xy 197.78011 97.804694)
+ (xy 197.471928 97.495974) (xy 197.069064 97.32869) (xy 196.67669 97.328348) (xy 196.67669 91.857849) (xy 196.51011 91.454694)
+ (xy 196.201928 91.145974) (xy 195.799064 90.97869) (xy 195.40669 90.978348) (xy 195.40669 89.317849) (xy 195.24011 88.914694)
+ (xy 194.931928 88.605974) (xy 194.529064 88.43869) (xy 194.13669 88.438348) (xy 194.13669 82.967849) (xy 193.97011 82.564694)
+ (xy 193.661928 82.255974) (xy 193.259064 82.08869) (xy 192.86669 82.088348) (xy 192.86669 80.427849) (xy 192.70011 80.024694)
+ (xy 192.391928 79.715974) (xy 191.989064 79.54869) (xy 191.552849 79.54831) (xy 191.149694 79.71489) (xy 190.840974 80.023072)
+ (xy 190.67369 80.425936) (xy 190.67331 80.862151) (xy 190.83989 81.265306) (xy 191.148072 81.574026) (xy 191.550936 81.74131)
+ (xy 191.987151 81.74169) (xy 192.390306 81.57511) (xy 192.699026 81.266928) (xy 192.86631 80.864064) (xy 192.86669 80.427849)
+ (xy 192.86669 82.088348) (xy 192.822849 82.08831) (xy 192.419694 82.25489) (xy 192.110974 82.563072) (xy 191.94369 82.965936)
+ (xy 191.94331 83.402151) (xy 192.10989 83.805306) (xy 192.418072 84.114026) (xy 192.820936 84.28131) (xy 193.257151 84.28169)
+ (xy 193.660306 84.11511) (xy 193.969026 83.806928) (xy 194.13631 83.404064) (xy 194.13669 82.967849) (xy 194.13669 88.438348)
+ (xy 194.092849 88.43831) (xy 193.689694 88.60489) (xy 193.380974 88.913072) (xy 193.21369 89.315936) (xy 193.21331 89.752151)
+ (xy 193.37989 90.155306) (xy 193.688072 90.464026) (xy 194.090936 90.63131) (xy 194.527151 90.63169) (xy 194.930306 90.46511)
+ (xy 195.239026 90.156928) (xy 195.40631 89.754064) (xy 195.40669 89.317849) (xy 195.40669 90.978348) (xy 195.362849 90.97831)
+ (xy 194.959694 91.14489) (xy 194.650974 91.453072) (xy 194.48369 91.855936) (xy 194.48331 92.292151) (xy 194.64989 92.695306)
+ (xy 194.958072 93.004026) (xy 195.360936 93.17131) (xy 195.797151 93.17169) (xy 196.200306 93.00511) (xy 196.509026 92.696928)
+ (xy 196.67631 92.294064) (xy 196.67669 91.857849) (xy 196.67669 97.328348) (xy 196.632849 97.32831) (xy 196.229694 97.49489)
+ (xy 195.920974 97.803072) (xy 195.75369 98.205936) (xy 195.75331 98.642151) (xy 195.91989 99.045306) (xy 196.228072 99.354026)
+ (xy 196.630936 99.52131) (xy 197.067151 99.52169) (xy 197.470306 99.35511) (xy 197.779026 99.046928) (xy 197.94631 98.644064)
+ (xy 197.94669 98.207849) (xy 197.94669 99.868348) (xy 197.902849 99.86831) (xy 197.499694 100.03489) (xy 197.190974 100.343072)
+ (xy 197.02369 100.745936) (xy 197.02331 101.182151) (xy 197.18989 101.585306) (xy 197.498072 101.894026) (xy 197.900936 102.06131)
+ (xy 198.337151 102.06169) (xy 198.740306 101.89511) (xy 199.049026 101.586928) (xy 199.21631 101.184064) (xy 199.21669 100.747849)
+ (xy 199.21669 106.218348) (xy 199.172849 106.21831) (xy 198.769694 106.38489) (xy 198.460974 106.693072) (xy 198.29369 107.095936)
+ (xy 198.29331 107.532151) (xy 198.45989 107.935306) (xy 198.768072 108.244026) (xy 199.170936 108.41131) (xy 199.607151 108.41169)
+ (xy 200.010306 108.24511) (xy 200.319026 107.936928) (xy 200.48631 107.534064) (xy 200.48669 107.097849) (xy 200.48669 108.758348)
+ (xy 200.442849 108.75831) (xy 200.039694 108.92489) (xy 199.730974 109.233072) (xy 199.56369 109.635936) (xy 199.56331 110.072151)
+ (xy 199.72989 110.475306) (xy 200.038072 110.784026) (xy 200.440936 110.95131) (xy 200.877151 110.95169) (xy 201.280306 110.78511)
+ (xy 201.589026 110.476928) (xy 201.75631 110.074064) (xy 201.75669 109.637849) (xy 201.75669 115.108348) (xy 201.712849 115.10831)
+ (xy 201.309694 115.27489) (xy 201.000974 115.583072) (xy 200.83369 115.985936) (xy 200.83331 116.422151) (xy 200.99989 116.825306)
+ (xy 201.308072 117.134026) (xy 201.710936 117.30131) (xy 202.147151 117.30169) (xy 202.550306 117.13511) (xy 202.859026 116.826928)
+ (xy 203.02631 116.424064) (xy 203.02669 115.987849) (xy 203.02669 117.648348) (xy 202.982849 117.64831) (xy 202.579694 117.81489)
+ (xy 202.270974 118.123072) (xy 202.10369 118.525936) (xy 202.10331 118.962151) (xy 202.26989 119.365306) (xy 202.578072 119.674026)
+ (xy 202.980936 119.84131) (xy 203.417151 119.84169) (xy 203.820306 119.67511) (xy 204.129026 119.366928) (xy 204.29631 118.964064)
+ (xy 204.29669 118.527849) (xy 204.29669 123.998348) (xy 204.252849 123.99831) (xy 203.849694 124.16489) (xy 203.540974 124.473072)
+ (xy 203.37369 124.875936) (xy 203.37331 125.312151) (xy 203.53989 125.715306) (xy 203.848072 126.024026) (xy 204.250936 126.19131)
+ (xy 204.687151 126.19169) (xy 205.090306 126.02511) (xy 205.399026 125.716928) (xy 205.56631 125.314064) (xy 205.56669 124.877849)
+ (xy 205.56669 126.538348) (xy 205.522849 126.53831) (xy 205.119694 126.70489) (xy 204.810974 127.013072) (xy 204.64369 127.415936)
+ (xy 204.64331 127.852151) (xy 204.80989 128.255306) (xy 205.118072 128.564026) (xy 205.520936 128.73131) (xy 205.957151 128.73169)
+ (xy 206.360306 128.56511) (xy 206.669026 128.256928) (xy 206.83631 127.854064) (xy 206.83669 127.417849) (xy 206.83669 133.7394)
+ (xy 204.851 133.7394) (xy 204.611211 133.787097) (xy 204.479654 133.875) (xy 204.375 133.875) (xy 204.375 133.972205)
+ (xy 204.29669 134.089404) (xy 204.29669 127.417849) (xy 204.13011 127.014694) (xy 203.821928 126.705974) (xy 203.419064 126.53869)
+ (xy 203.02669 126.538348) (xy 203.02669 124.877849) (xy 202.86011 124.474694) (xy 202.551928 124.165974) (xy 202.149064 123.99869)
+ (xy 201.75669 123.998348) (xy 201.75669 118.527849) (xy 201.59011 118.124694) (xy 201.281928 117.815974) (xy 200.879064 117.64869)
+ (xy 200.48669 117.648348) (xy 200.48669 115.987849) (xy 200.32011 115.584694) (xy 200.011928 115.275974) (xy 199.609064 115.10869)
+ (xy 199.21669 115.108348) (xy 199.21669 109.637849) (xy 199.05011 109.234694) (xy 198.741928 108.925974) (xy 198.339064 108.75869)
+ (xy 197.94669 108.758348) (xy 197.94669 107.097849) (xy 197.78011 106.694694) (xy 197.471928 106.385974) (xy 197.069064 106.21869)
+ (xy 196.67669 106.218348) (xy 196.67669 100.747849) (xy 196.51011 100.344694) (xy 196.201928 100.035974) (xy 195.799064 99.86869)
+ (xy 195.40669 99.868348) (xy 195.40669 98.207849) (xy 195.24011 97.804694) (xy 194.931928 97.495974) (xy 194.529064 97.32869)
+ (xy 194.13669 97.328348) (xy 194.13669 91.857849) (xy 193.97011 91.454694) (xy 193.661928 91.145974) (xy 193.259064 90.97869)
+ (xy 192.86669 90.978348) (xy 192.86669 89.317849) (xy 192.70011 88.914694) (xy 192.391928 88.605974) (xy 191.989064 88.43869)
+ (xy 191.59669 88.438348) (xy 191.59669 82.967849) (xy 191.43011 82.564694) (xy 191.121928 82.255974) (xy 190.719064 82.08869)
+ (xy 190.32669 82.088348) (xy 190.32669 80.427849) (xy 190.16011 80.024694) (xy 189.851928 79.715974) (xy 189.449064 79.54869)
+ (xy 189.05669 79.548348) (xy 189.05669 74.077849) (xy 188.89011 73.674694) (xy 188.581928 73.365974) (xy 188.179064 73.19869)
+ (xy 187.79003 73.198351) (xy 187.79003 71.555461) (xy 187.629934 71.149687) (xy 187.608934 71.118257) (xy 187.405178 71.075177)
+ (xy 187.369823 71.110532) (xy 187.369823 71.039822) (xy 187.326743 70.836066) (xy 186.926613 70.662345) (xy 186.490461 70.65497)
+ (xy 186.084687 70.815066) (xy 186.053257 70.836066) (xy 186.010177 71.039822) (xy 186.69 71.719645) (xy 187.369823 71.039822)
+ (xy 187.369823 71.110532) (xy 186.725355 71.755) (xy 187.405178 72.434823) (xy 187.608934 72.391743) (xy 187.782655 71.991613)
+ (xy 187.79003 71.555461) (xy 187.79003 73.198351) (xy 187.742849 73.19831) (xy 187.369823 73.35244) (xy 187.369823 72.470178)
+ (xy 186.69 71.790355) (xy 186.654645 71.82571) (xy 186.654645 71.755) (xy 185.974822 71.075177) (xy 185.771066 71.118257)
+ (xy 185.597345 71.518387) (xy 185.58997 71.954539) (xy 185.750066 72.360313) (xy 185.771066 72.391743) (xy 185.974822 72.434823)
+ (xy 186.654645 71.755) (xy 186.654645 71.82571) (xy 186.010177 72.470178) (xy 186.053257 72.673934) (xy 186.453387 72.847655)
+ (xy 186.889539 72.85503) (xy 187.295313 72.694934) (xy 187.326743 72.673934) (xy 187.369823 72.470178) (xy 187.369823 73.35244)
+ (xy 187.339694 73.36489) (xy 187.030974 73.673072) (xy 186.86369 74.075936) (xy 186.86331 74.512151) (xy 187.02989 74.915306)
+ (xy 187.338072 75.224026) (xy 187.740936 75.39131) (xy 188.177151 75.39169) (xy 188.580306 75.22511) (xy 188.889026 74.916928)
+ (xy 189.05631 74.514064) (xy 189.05669 74.077849) (xy 189.05669 79.548348) (xy 189.012849 79.54831) (xy 188.609694 79.71489)
+ (xy 188.300974 80.023072) (xy 188.13369 80.425936) (xy 188.13331 80.862151) (xy 188.29989 81.265306) (xy 188.608072 81.574026)
+ (xy 189.010936 81.74131) (xy 189.447151 81.74169) (xy 189.850306 81.57511) (xy 190.159026 81.266928) (xy 190.32631 80.864064)
+ (xy 190.32669 80.427849) (xy 190.32669 82.088348) (xy 190.282849 82.08831) (xy 189.879694 82.25489) (xy 189.570974 82.563072)
+ (xy 189.40369 82.965936) (xy 189.40331 83.402151) (xy 189.56989 83.805306) (xy 189.878072 84.114026) (xy 190.280936 84.28131)
+ (xy 190.717151 84.28169) (xy 191.120306 84.11511) (xy 191.429026 83.806928) (xy 191.59631 83.404064) (xy 191.59669 82.967849)
+ (xy 191.59669 88.438348) (xy 191.552849 88.43831) (xy 191.149694 88.60489) (xy 190.840974 88.913072) (xy 190.67369 89.315936)
+ (xy 190.67331 89.752151) (xy 190.83989 90.155306) (xy 191.148072 90.464026) (xy 191.550936 90.63131) (xy 191.987151 90.63169)
+ (xy 192.390306 90.46511) (xy 192.699026 90.156928) (xy 192.86631 89.754064) (xy 192.86669 89.317849) (xy 192.86669 90.978348)
+ (xy 192.822849 90.97831) (xy 192.419694 91.14489) (xy 192.110974 91.453072) (xy 191.94369 91.855936) (xy 191.94331 92.292151)
+ (xy 192.10989 92.695306) (xy 192.418072 93.004026) (xy 192.820936 93.17131) (xy 193.257151 93.17169) (xy 193.660306 93.00511)
+ (xy 193.969026 92.696928) (xy 194.13631 92.294064) (xy 194.13669 91.857849) (xy 194.13669 97.328348) (xy 194.092849 97.32831)
+ (xy 193.907127 97.405048) (xy 193.988423 97.323895) (xy 194.136332 96.967692) (xy 194.136668 96.582001) (xy 193.989382 96.22554)
+ (xy 193.716895 95.952577) (xy 193.360692 95.804668) (xy 192.975001 95.804332) (xy 192.61854 95.951618) (xy 192.345577 96.224105)
+ (xy 192.197668 96.580308) (xy 192.197332 96.965999) (xy 192.344618 97.32246) (xy 192.617105 97.595423) (xy 192.973308 97.743332)
+ (xy 193.358999 97.743668) (xy 193.498026 97.686223) (xy 193.380974 97.803072) (xy 193.21369 98.205936) (xy 193.21331 98.642151)
+ (xy 193.37989 99.045306) (xy 193.688072 99.354026) (xy 194.090936 99.52131) (xy 194.527151 99.52169) (xy 194.930306 99.35511)
+ (xy 195.239026 99.046928) (xy 195.40631 98.644064) (xy 195.40669 98.207849) (xy 195.40669 99.868348) (xy 195.362849 99.86831)
+ (xy 194.959694 100.03489) (xy 194.650974 100.343072) (xy 194.48369 100.745936) (xy 194.48331 101.182151) (xy 194.64989 101.585306)
+ (xy 194.958072 101.894026) (xy 195.360936 102.06131) (xy 195.797151 102.06169) (xy 196.200306 101.89511) (xy 196.509026 101.586928)
+ (xy 196.67631 101.184064) (xy 196.67669 100.747849) (xy 196.67669 106.218348) (xy 196.632849 106.21831) (xy 196.229694 106.38489)
+ (xy 195.920974 106.693072) (xy 195.75369 107.095936) (xy 195.75331 107.532151) (xy 195.91989 107.935306) (xy 196.228072 108.244026)
+ (xy 196.630936 108.41131) (xy 197.067151 108.41169) (xy 197.470306 108.24511) (xy 197.779026 107.936928) (xy 197.94631 107.534064)
+ (xy 197.94669 107.097849) (xy 197.94669 108.758348) (xy 197.902849 108.75831) (xy 197.499694 108.92489) (xy 197.190974 109.233072)
+ (xy 197.02369 109.635936) (xy 197.02331 110.072151) (xy 197.18989 110.475306) (xy 197.498072 110.784026) (xy 197.900936 110.95131)
+ (xy 198.337151 110.95169) (xy 198.740306 110.78511) (xy 199.049026 110.476928) (xy 199.21631 110.074064) (xy 199.21669 109.637849)
+ (xy 199.21669 115.108348) (xy 199.172849 115.10831) (xy 198.769694 115.27489) (xy 198.460974 115.583072) (xy 198.29369 115.985936)
+ (xy 198.29331 116.422151) (xy 198.45989 116.825306) (xy 198.768072 117.134026) (xy 199.170936 117.30131) (xy 199.607151 117.30169)
+ (xy 200.010306 117.13511) (xy 200.319026 116.826928) (xy 200.48631 116.424064) (xy 200.48669 115.987849) (xy 200.48669 117.648348)
+ (xy 200.442849 117.64831) (xy 200.039694 117.81489) (xy 199.730974 118.123072) (xy 199.56369 118.525936) (xy 199.56331 118.962151)
+ (xy 199.72989 119.365306) (xy 200.038072 119.674026) (xy 200.440936 119.84131) (xy 200.877151 119.84169) (xy 201.280306 119.67511)
+ (xy 201.589026 119.366928) (xy 201.75631 118.964064) (xy 201.75669 118.527849) (xy 201.75669 123.998348) (xy 201.712849 123.99831)
+ (xy 201.309694 124.16489) (xy 201.000974 124.473072) (xy 200.83369 124.875936) (xy 200.83331 125.312151) (xy 200.99989 125.715306)
+ (xy 201.308072 126.024026) (xy 201.710936 126.19131) (xy 202.147151 126.19169) (xy 202.550306 126.02511) (xy 202.859026 125.716928)
+ (xy 203.02631 125.314064) (xy 203.02669 124.877849) (xy 203.02669 126.538348) (xy 202.982849 126.53831) (xy 202.579694 126.70489)
+ (xy 202.270974 127.013072) (xy 202.10369 127.415936) (xy 202.10331 127.852151) (xy 202.26989 128.255306) (xy 202.578072 128.564026)
+ (xy 202.980936 128.73131) (xy 203.417151 128.73169) (xy 203.820306 128.56511) (xy 204.129026 128.256928) (xy 204.29631 127.854064)
+ (xy 204.29669 127.417849) (xy 204.29669 134.089404) (xy 204.272097 134.126211) (xy 204.2244 134.366) (xy 204.2244 142.950198)
+ (xy 204.155692 142.921668) (xy 203.770001 142.921332) (xy 203.41354 143.068618) (xy 203.140577 143.341105) (xy 202.992668 143.697308)
+ (xy 202.992332 144.082999) (xy 203.139618 144.43946) (xy 203.412105 144.712423) (xy 203.768308 144.860332) (xy 204.153999 144.860668)
+ (xy 204.2244 144.831579) (xy 204.2244 144.875) (xy 202.518668 144.875) (xy 202.518668 132.904001) (xy 202.371382 132.54754)
+ (xy 202.098895 132.274577) (xy 201.75669 132.13248) (xy 201.75669 127.417849) (xy 201.59011 127.014694) (xy 201.281928 126.705974)
+ (xy 200.879064 126.53869) (xy 200.48669 126.538348) (xy 200.48669 124.877849) (xy 200.32011 124.474694) (xy 200.011928 124.165974)
+ (xy 199.609064 123.99869) (xy 199.21669 123.998348) (xy 199.21669 118.527849) (xy 199.05011 118.124694) (xy 198.741928 117.815974)
+ (xy 198.339064 117.64869) (xy 197.94669 117.648348) (xy 197.94669 115.987849) (xy 197.78011 115.584694) (xy 197.471928 115.275974)
+ (xy 197.069064 115.10869) (xy 196.67669 115.108348) (xy 196.67669 109.637849) (xy 196.51011 109.234694) (xy 196.201928 108.925974)
+ (xy 195.799064 108.75869) (xy 195.40669 108.758348) (xy 195.40669 107.097849) (xy 195.24011 106.694694) (xy 194.931928 106.385974)
+ (xy 194.529064 106.21869) (xy 194.13669 106.218348) (xy 194.13669 100.747849) (xy 193.97011 100.344694) (xy 193.661928 100.035974)
+ (xy 193.259064 99.86869) (xy 192.86669 99.868348) (xy 192.86669 98.207849) (xy 192.70011 97.804694) (xy 192.391928 97.495974)
+ (xy 191.989064 97.32869) (xy 191.552849 97.32831) (xy 191.149694 97.49489) (xy 190.941202 97.703018) (xy 191.088332 97.348692)
+ (xy 191.08843 97.23557) (xy 191.199999 97.235668) (xy 191.55646 97.088382) (xy 191.829423 96.815895) (xy 191.977332 96.459692)
+ (xy 191.977668 96.074001) (xy 191.830382 95.71754) (xy 191.59669 95.483439) (xy 191.59669 91.857849) (xy 191.43011 91.454694)
+ (xy 191.121928 91.145974) (xy 190.719064 90.97869) (xy 190.32669 90.978348) (xy 190.32669 89.317849) (xy 190.16011 88.914694)
+ (xy 189.851928 88.605974) (xy 189.449064 88.43869) (xy 189.05669 88.438348) (xy 189.05669 82.967849) (xy 188.89011 82.564694)
+ (xy 188.581928 82.255974) (xy 188.179064 82.08869) (xy 187.79003 82.088351) (xy 187.79003 80.445461) (xy 187.629934 80.039687)
+ (xy 187.608934 80.008257) (xy 187.405178 79.965177) (xy 187.369823 80.000532) (xy 187.369823 79.929822) (xy 187.326743 79.726066)
+ (xy 186.926613 79.552345) (xy 186.490461 79.54497) (xy 186.262668 79.634844) (xy 186.262668 76.516001) (xy 186.115382 76.15954)
+ (xy 185.842895 75.886577) (xy 185.486692 75.738668) (xy 185.101001 75.738332) (xy 184.74454 75.885618) (xy 184.471577 76.158105)
+ (xy 184.323668 76.514308) (xy 184.323332 76.899999) (xy 184.470618 77.25646) (xy 184.743105 77.529423) (xy 185.099308 77.677332)
+ (xy 185.484999 77.677668) (xy 185.84146 77.530382) (xy 186.114423 77.257895) (xy 186.262332 76.901692) (xy 186.262668 76.516001)
+ (xy 186.262668 79.634844) (xy 186.084687 79.705066) (xy 186.053257 79.726066) (xy 186.010177 79.929822) (xy 186.69 80.609645)
+ (xy 187.369823 79.929822) (xy 187.369823 80.000532) (xy 186.725355 80.645) (xy 187.405178 81.324823) (xy 187.608934 81.281743)
+ (xy 187.782655 80.881613) (xy 187.79003 80.445461) (xy 187.79003 82.088351) (xy 187.742849 82.08831) (xy 187.369823 82.24244)
+ (xy 187.369823 81.360178) (xy 186.69 80.680355) (xy 186.654645 80.71571) (xy 186.654645 80.645) (xy 185.974822 79.965177)
+ (xy 185.771066 80.008257) (xy 185.597345 80.408387) (xy 185.58997 80.844539) (xy 185.750066 81.250313) (xy 185.771066 81.281743)
+ (xy 185.974822 81.324823) (xy 186.654645 80.645) (xy 186.654645 80.71571) (xy 186.010177 81.360178) (xy 186.053257 81.563934)
+ (xy 186.453387 81.737655) (xy 186.889539 81.74503) (xy 187.295313 81.584934) (xy 187.326743 81.563934) (xy 187.369823 81.360178)
+ (xy 187.369823 82.24244) (xy 187.339694 82.25489) (xy 187.030974 82.563072) (xy 186.86369 82.965936) (xy 186.86331 83.402151)
+ (xy 187.02989 83.805306) (xy 187.338072 84.114026) (xy 187.740936 84.28131) (xy 188.177151 84.28169) (xy 188.580306 84.11511)
+ (xy 188.889026 83.806928) (xy 189.05631 83.404064) (xy 189.05669 82.967849) (xy 189.05669 88.438348) (xy 189.012849 88.43831)
+ (xy 188.609694 88.60489) (xy 188.300974 88.913072) (xy 188.13369 89.315936) (xy 188.13331 89.752151) (xy 188.29989 90.155306)
+ (xy 188.608072 90.464026) (xy 189.010936 90.63131) (xy 189.447151 90.63169) (xy 189.850306 90.46511) (xy 190.159026 90.156928)
+ (xy 190.32631 89.754064) (xy 190.32669 89.317849) (xy 190.32669 90.978348) (xy 190.282849 90.97831) (xy 189.879694 91.14489)
+ (xy 189.570974 91.453072) (xy 189.40369 91.855936) (xy 189.40331 92.292151) (xy 189.56989 92.695306) (xy 189.878072 93.004026)
+ (xy 190.280936 93.17131) (xy 190.717151 93.17169) (xy 191.120306 93.00511) (xy 191.429026 92.696928) (xy 191.59631 92.294064)
+ (xy 191.59669 91.857849) (xy 191.59669 95.483439) (xy 191.557895 95.444577) (xy 191.201692 95.296668) (xy 190.816001 95.296332)
+ (xy 190.45954 95.443618) (xy 190.186577 95.716105) (xy 190.038668 96.072308) (xy 190.038569 96.185429) (xy 189.927001 96.185332)
+ (xy 189.57054 96.332618) (xy 189.297577 96.605105) (xy 189.149668 96.961308) (xy 189.149348 97.328428) (xy 189.05669 97.328347)
+ (xy 189.05669 91.857849) (xy 188.89011 91.454694) (xy 188.581928 91.145974) (xy 188.179064 90.97869) (xy 187.79003 90.978351)
+ (xy 187.79003 89.335461) (xy 187.629934 88.929687) (xy 187.608934 88.898257) (xy 187.405178 88.855177) (xy 187.369823 88.890532)
+ (xy 187.369823 88.819822) (xy 187.326743 88.616066) (xy 186.926613 88.442345) (xy 186.490461 88.43497) (xy 186.262668 88.524844)
+ (xy 186.262668 83.247001) (xy 186.115382 82.89054) (xy 185.842895 82.617577) (xy 185.486692 82.469668) (xy 185.119668 82.469348)
+ (xy 185.119668 79.818001) (xy 184.972382 79.46154) (xy 184.699895 79.188577) (xy 184.343692 79.040668) (xy 183.958001 79.040332)
+ (xy 183.60154 79.187618) (xy 183.387977 79.400808) (xy 183.302895 79.315577) (xy 182.946692 79.167668) (xy 182.561001 79.167332)
+ (xy 182.20454 79.314618) (xy 181.944668 79.574036) (xy 181.944668 62.927001) (xy 181.797382 62.57054) (xy 181.524895 62.297577)
+ (xy 181.168692 62.149668) (xy 180.783001 62.149332) (xy 180.42654 62.296618) (xy 180.153577 62.569105) (xy 180.040023 62.842571)
+ (xy 179.597181 62.398955) (xy 178.844359 62.086357) (xy 178.029217 62.085645) (xy 177.275851 62.39693) (xy 176.698955 62.972819)
+ (xy 176.386357 63.725641) (xy 176.385645 64.540783) (xy 176.69693 65.294149) (xy 177.272819 65.871045) (xy 178.025641 66.183643)
+ (xy 178.840783 66.184355) (xy 179.594149 65.87307) (xy 180.171045 65.297181) (xy 180.483643 64.544359) (xy 180.484149 63.96494)
+ (xy 180.781308 64.088332) (xy 181.166999 64.088668) (xy 181.52346 63.941382) (xy 181.796423 63.668895) (xy 181.944332 63.312692)
+ (xy 181.944668 62.927001) (xy 181.944668 79.574036) (xy 181.931577 79.587105) (xy 181.783668 79.943308) (xy 181.783332 80.328999)
+ (xy 181.930618 80.68546) (xy 182.203105 80.958423) (xy 182.559308 81.106332) (xy 182.944999 81.106668) (xy 183.30146 80.959382)
+ (xy 183.515022 80.746191) (xy 183.600105 80.831423) (xy 183.956308 80.979332) (xy 184.341999 80.979668) (xy 184.69846 80.832382)
+ (xy 184.971423 80.559895) (xy 185.119332 80.203692) (xy 185.119668 79.818001) (xy 185.119668 82.469348) (xy 185.101001 82.469332)
+ (xy 184.74454 82.616618) (xy 184.471577 82.889105) (xy 184.323668 83.245308) (xy 184.323332 83.630999) (xy 184.470618 83.98746)
+ (xy 184.743105 84.260423) (xy 185.099308 84.408332) (xy 185.484999 84.408668) (xy 185.84146 84.261382) (xy 186.114423 83.988895)
+ (xy 186.262332 83.632692) (xy 186.262668 83.247001) (xy 186.262668 88.524844) (xy 186.084687 88.595066) (xy 186.053257 88.616066)
+ (xy 186.010177 88.819822) (xy 186.69 89.499645) (xy 187.369823 88.819822) (xy 187.369823 88.890532) (xy 186.725355 89.535)
+ (xy 187.405178 90.214823) (xy 187.608934 90.171743) (xy 187.782655 89.771613) (xy 187.79003 89.335461) (xy 187.79003 90.978351)
+ (xy 187.742849 90.97831) (xy 187.369823 91.13244) (xy 187.369823 90.250178) (xy 186.69 89.570355) (xy 186.654645 89.60571)
+ (xy 186.654645 89.535) (xy 185.974822 88.855177) (xy 185.771066 88.898257) (xy 185.597345 89.298387) (xy 185.58997 89.734539)
+ (xy 185.750066 90.140313) (xy 185.771066 90.171743) (xy 185.974822 90.214823) (xy 186.654645 89.535) (xy 186.654645 89.60571)
+ (xy 186.010177 90.250178) (xy 186.053257 90.453934) (xy 186.453387 90.627655) (xy 186.889539 90.63503) (xy 187.295313 90.474934)
+ (xy 187.326743 90.453934) (xy 187.369823 90.250178) (xy 187.369823 91.13244) (xy 187.339694 91.14489) (xy 187.030974 91.453072)
+ (xy 186.86369 91.855936) (xy 186.86331 92.292151) (xy 187.02989 92.695306) (xy 187.338072 93.004026) (xy 187.740936 93.17131)
+ (xy 188.177151 93.17169) (xy 188.580306 93.00511) (xy 188.889026 92.696928) (xy 189.05631 92.294064) (xy 189.05669 91.857849)
+ (xy 189.05669 97.328347) (xy 189.012849 97.32831) (xy 188.609694 97.49489) (xy 188.300974 97.803072) (xy 188.13369 98.205936)
+ (xy 188.13331 98.642151) (xy 188.29989 99.045306) (xy 188.608072 99.354026) (xy 189.010936 99.52131) (xy 189.447151 99.52169)
+ (xy 189.850306 99.35511) (xy 190.159026 99.046928) (xy 190.32631 98.644064) (xy 190.32669 98.207849) (xy 190.292313 98.124651)
+ (xy 190.310999 98.124668) (xy 190.66746 97.977382) (xy 190.840194 97.804948) (xy 190.67369 98.205936) (xy 190.67331 98.642151)
+ (xy 190.83989 99.045306) (xy 191.148072 99.354026) (xy 191.550936 99.52131) (xy 191.987151 99.52169) (xy 192.390306 99.35511)
+ (xy 192.699026 99.046928) (xy 192.86631 98.644064) (xy 192.86669 98.207849) (xy 192.86669 99.868348) (xy 192.822849 99.86831)
+ (xy 192.419694 100.03489) (xy 192.110974 100.343072) (xy 191.94369 100.745936) (xy 191.94331 101.182151) (xy 192.10989 101.585306)
+ (xy 192.418072 101.894026) (xy 192.820936 102.06131) (xy 193.257151 102.06169) (xy 193.660306 101.89511) (xy 193.969026 101.586928)
+ (xy 194.13631 101.184064) (xy 194.13669 100.747849) (xy 194.13669 106.218348) (xy 194.092849 106.21831) (xy 193.689694 106.38489)
+ (xy 193.380974 106.693072) (xy 193.21369 107.095936) (xy 193.21331 107.532151) (xy 193.37989 107.935306) (xy 193.688072 108.244026)
+ (xy 194.090936 108.41131) (xy 194.527151 108.41169) (xy 194.930306 108.24511) (xy 195.239026 107.936928) (xy 195.40631 107.534064)
+ (xy 195.40669 107.097849) (xy 195.40669 108.758348) (xy 195.362849 108.75831) (xy 194.959694 108.92489) (xy 194.650974 109.233072)
+ (xy 194.48369 109.635936) (xy 194.48331 110.072151) (xy 194.64989 110.475306) (xy 194.958072 110.784026) (xy 195.360936 110.95131)
+ (xy 195.797151 110.95169) (xy 196.200306 110.78511) (xy 196.509026 110.476928) (xy 196.67631 110.074064) (xy 196.67669 109.637849)
+ (xy 196.67669 115.108348) (xy 196.632849 115.10831) (xy 196.229694 115.27489) (xy 195.920974 115.583072) (xy 195.75369 115.985936)
+ (xy 195.75331 116.422151) (xy 195.91989 116.825306) (xy 196.228072 117.134026) (xy 196.630936 117.30131) (xy 197.067151 117.30169)
+ (xy 197.470306 117.13511) (xy 197.779026 116.826928) (xy 197.94631 116.424064) (xy 197.94669 115.987849) (xy 197.94669 117.648348)
+ (xy 197.902849 117.64831) (xy 197.499694 117.81489) (xy 197.190974 118.123072) (xy 197.02369 118.525936) (xy 197.02331 118.962151)
+ (xy 197.18989 119.365306) (xy 197.498072 119.674026) (xy 197.900936 119.84131) (xy 198.337151 119.84169) (xy 198.740306 119.67511)
+ (xy 199.049026 119.366928) (xy 199.21631 118.964064) (xy 199.21669 118.527849) (xy 199.21669 123.998348) (xy 199.172849 123.99831)
+ (xy 198.769694 124.16489) (xy 198.460974 124.473072) (xy 198.29369 124.875936) (xy 198.29331 125.312151) (xy 198.45989 125.715306)
+ (xy 198.768072 126.024026) (xy 199.170936 126.19131) (xy 199.607151 126.19169) (xy 200.010306 126.02511) (xy 200.319026 125.716928)
+ (xy 200.48631 125.314064) (xy 200.48669 124.877849) (xy 200.48669 126.538348) (xy 200.442849 126.53831) (xy 200.039694 126.70489)
+ (xy 199.730974 127.013072) (xy 199.56369 127.415936) (xy 199.56331 127.852151) (xy 199.72989 128.255306) (xy 200.038072 128.564026)
+ (xy 200.440936 128.73131) (xy 200.877151 128.73169) (xy 201.280306 128.56511) (xy 201.589026 128.256928) (xy 201.75631 127.854064)
+ (xy 201.75669 127.417849) (xy 201.75669 132.13248) (xy 201.742692 132.126668) (xy 201.357001 132.126332) (xy 201.00054 132.273618)
+ (xy 200.727577 132.546105) (xy 200.579668 132.902308) (xy 200.579332 133.287999) (xy 200.655617 133.472625) (xy 200.472692 133.396668)
+ (xy 200.087001 133.396332) (xy 199.73054 133.543618) (xy 199.457577 133.816105) (xy 199.309668 134.172308) (xy 199.309332 134.557999)
+ (xy 199.456618 134.91446) (xy 199.729105 135.187423) (xy 200.085308 135.335332) (xy 200.470999 135.335668) (xy 200.82746 135.188382)
+ (xy 201.100423 134.915895) (xy 201.248332 134.559692) (xy 201.248668 134.174001) (xy 201.172382 133.989374) (xy 201.355308 134.065332)
+ (xy 201.740999 134.065668) (xy 202.09746 133.918382) (xy 202.370423 133.645895) (xy 202.518332 133.289692) (xy 202.518668 132.904001)
+ (xy 202.518668 144.875) (xy 199.21669 144.875) (xy 199.21669 127.417849) (xy 199.05011 127.014694) (xy 198.741928 126.705974)
+ (xy 198.339064 126.53869) (xy 197.94669 126.538348) (xy 197.94669 124.877849) (xy 197.78011 124.474694) (xy 197.471928 124.165974)
+ (xy 197.069064 123.99869) (xy 196.67669 123.998348) (xy 196.67669 118.527849) (xy 196.51011 118.124694) (xy 196.201928 117.815974)
+ (xy 195.799064 117.64869) (xy 195.40669 117.648348) (xy 195.40669 115.987849) (xy 195.24011 115.584694) (xy 194.931928 115.275974)
+ (xy 194.529064 115.10869) (xy 194.13669 115.108348) (xy 194.13669 109.637849) (xy 193.97011 109.234694) (xy 193.661928 108.925974)
+ (xy 193.259064 108.75869) (xy 192.86669 108.758348) (xy 192.86669 107.097849) (xy 192.70011 106.694694) (xy 192.391928 106.385974)
+ (xy 191.989064 106.21869) (xy 191.59669 106.218348) (xy 191.59669 100.747849) (xy 191.43011 100.344694) (xy 191.121928 100.035974)
+ (xy 190.719064 99.86869) (xy 190.282849 99.86831) (xy 189.879694 100.03489) (xy 189.570974 100.343072) (xy 189.40369 100.745936)
+ (xy 189.40331 101.182151) (xy 189.56989 101.585306) (xy 189.878072 101.894026) (xy 190.280936 102.06131) (xy 190.717151 102.06169)
+ (xy 191.120306 101.89511) (xy 191.429026 101.586928) (xy 191.59631 101.184064) (xy 191.59669 100.747849) (xy 191.59669 106.218348)
+ (xy 191.552849 106.21831) (xy 191.149694 106.38489) (xy 190.840974 106.693072) (xy 190.67369 107.095936) (xy 190.67331 107.532151)
+ (xy 190.83989 107.935306) (xy 191.148072 108.244026) (xy 191.550936 108.41131) (xy 191.987151 108.41169) (xy 192.390306 108.24511)
+ (xy 192.699026 107.936928) (xy 192.86631 107.534064) (xy 192.86669 107.097849) (xy 192.86669 108.758348) (xy 192.822849 108.75831)
+ (xy 192.419694 108.92489) (xy 192.110974 109.233072) (xy 191.94369 109.635936) (xy 191.94331 110.072151) (xy 192.10989 110.475306)
+ (xy 192.418072 110.784026) (xy 192.820936 110.95131) (xy 193.257151 110.95169) (xy 193.660306 110.78511) (xy 193.969026 110.476928)
+ (xy 194.13631 110.074064) (xy 194.13669 109.637849) (xy 194.13669 115.108348) (xy 194.092849 115.10831) (xy 193.689694 115.27489)
+ (xy 193.380974 115.583072) (xy 193.21369 115.985936) (xy 193.21331 116.422151) (xy 193.37989 116.825306) (xy 193.688072 117.134026)
+ (xy 194.090936 117.30131) (xy 194.527151 117.30169) (xy 194.930306 117.13511) (xy 195.239026 116.826928) (xy 195.40631 116.424064)
+ (xy 195.40669 115.987849) (xy 195.40669 117.648348) (xy 195.362849 117.64831) (xy 194.959694 117.81489) (xy 194.650974 118.123072)
+ (xy 194.48369 118.525936) (xy 194.48331 118.962151) (xy 194.64989 119.365306) (xy 194.958072 119.674026) (xy 195.360936 119.84131)
+ (xy 195.797151 119.84169) (xy 196.200306 119.67511) (xy 196.509026 119.366928) (xy 196.67631 118.964064) (xy 196.67669 118.527849)
+ (xy 196.67669 123.998348) (xy 196.632849 123.99831) (xy 196.229694 124.16489) (xy 195.920974 124.473072) (xy 195.75369 124.875936)
+ (xy 195.75331 125.312151) (xy 195.91989 125.715306) (xy 196.228072 126.024026) (xy 196.630936 126.19131) (xy 197.067151 126.19169)
+ (xy 197.470306 126.02511) (xy 197.779026 125.716928) (xy 197.94631 125.314064) (xy 197.94669 124.877849) (xy 197.94669 126.538348)
+ (xy 197.902849 126.53831) (xy 197.499694 126.70489) (xy 197.190974 127.013072) (xy 197.02369 127.415936) (xy 197.02331 127.852151)
+ (xy 197.18989 128.255306) (xy 197.498072 128.564026) (xy 197.900936 128.73131) (xy 198.337151 128.73169) (xy 198.740306 128.56511)
+ (xy 199.049026 128.256928) (xy 199.21631 127.854064) (xy 199.21669 127.417849) (xy 199.21669 144.875) (xy 196.67669 144.875)
+ (xy 196.67669 127.417849) (xy 196.51011 127.014694) (xy 196.201928 126.705974) (xy 195.799064 126.53869) (xy 195.40669 126.538348)
+ (xy 195.40669 124.877849) (xy 195.24011 124.474694) (xy 194.931928 124.165974) (xy 194.529064 123.99869) (xy 194.13669 123.998348)
+ (xy 194.13669 118.527849) (xy 193.97011 118.124694) (xy 193.661928 117.815974) (xy 193.259064 117.64869) (xy 192.86669 117.648348)
+ (xy 192.86669 115.987849) (xy 192.70011 115.584694) (xy 192.391928 115.275974) (xy 191.989064 115.10869) (xy 191.59669 115.108348)
+ (xy 191.59669 109.637849) (xy 191.43011 109.234694) (xy 191.121928 108.925974) (xy 190.719064 108.75869) (xy 190.32669 108.758348)
+ (xy 190.32669 107.097849) (xy 190.16011 106.694694) (xy 189.851928 106.385974) (xy 189.449064 106.21869) (xy 189.05669 106.218348)
+ (xy 189.05669 100.747849) (xy 188.89011 100.344694) (xy 188.581928 100.035974) (xy 188.179064 99.86869) (xy 187.79003 99.868351)
+ (xy 187.79003 98.225461) (xy 187.629934 97.819687) (xy 187.608934 97.788257) (xy 187.405178 97.745177) (xy 187.369823 97.780532)
+ (xy 187.369823 97.709822) (xy 187.326743 97.506066) (xy 186.926613 97.332345) (xy 186.490461 97.32497) (xy 186.084687 97.485066)
+ (xy 186.053257 97.506066) (xy 186.010177 97.709822) (xy 186.69 98.389645) (xy 187.369823 97.709822) (xy 187.369823 97.780532)
+ (xy 186.725355 98.425) (xy 187.405178 99.104823) (xy 187.608934 99.061743) (xy 187.782655 98.661613) (xy 187.79003 98.225461)
+ (xy 187.79003 99.868351) (xy 187.742849 99.86831) (xy 187.369823 100.02244) (xy 187.369823 99.140178) (xy 186.69 98.460355)
+ (xy 186.654645 98.49571) (xy 186.654645 98.425) (xy 185.974822 97.745177) (xy 185.771066 97.788257) (xy 185.597345 98.188387)
+ (xy 185.58997 98.624539) (xy 185.750066 99.030313) (xy 185.771066 99.061743) (xy 185.974822 99.104823) (xy 186.654645 98.425)
+ (xy 186.654645 98.49571) (xy 186.010177 99.140178) (xy 186.053257 99.343934) (xy 186.453387 99.517655) (xy 186.889539 99.52503)
+ (xy 187.295313 99.364934) (xy 187.326743 99.343934) (xy 187.369823 99.140178) (xy 187.369823 100.02244) (xy 187.339694 100.03489)
+ (xy 187.030974 100.343072) (xy 186.86369 100.745936) (xy 186.86331 101.182151) (xy 187.02989 101.585306) (xy 187.338072 101.894026)
+ (xy 187.740936 102.06131) (xy 188.177151 102.06169) (xy 188.580306 101.89511) (xy 188.889026 101.586928) (xy 189.05631 101.184064)
+ (xy 189.05669 100.747849) (xy 189.05669 106.218348) (xy 189.012849 106.21831) (xy 188.609694 106.38489) (xy 188.300974 106.693072)
+ (xy 188.13369 107.095936) (xy 188.13331 107.532151) (xy 188.29989 107.935306) (xy 188.608072 108.244026) (xy 189.010936 108.41131)
+ (xy 189.447151 108.41169) (xy 189.850306 108.24511) (xy 190.159026 107.936928) (xy 190.32631 107.534064) (xy 190.32669 107.097849)
+ (xy 190.32669 108.758348) (xy 190.282849 108.75831) (xy 189.879694 108.92489) (xy 189.570974 109.233072) (xy 189.40369 109.635936)
+ (xy 189.40331 110.072151) (xy 189.56989 110.475306) (xy 189.878072 110.784026) (xy 190.280936 110.95131) (xy 190.717151 110.95169)
+ (xy 191.120306 110.78511) (xy 191.429026 110.476928) (xy 191.59631 110.074064) (xy 191.59669 109.637849) (xy 191.59669 115.108348)
+ (xy 191.552849 115.10831) (xy 191.149694 115.27489) (xy 190.840974 115.583072) (xy 190.67369 115.985936) (xy 190.67331 116.422151)
+ (xy 190.83989 116.825306) (xy 191.148072 117.134026) (xy 191.550936 117.30131) (xy 191.987151 117.30169) (xy 192.390306 117.13511)
+ (xy 192.699026 116.826928) (xy 192.86631 116.424064) (xy 192.86669 115.987849) (xy 192.86669 117.648348) (xy 192.822849 117.64831)
+ (xy 192.419694 117.81489) (xy 192.110974 118.123072) (xy 191.94369 118.525936) (xy 191.94331 118.962151) (xy 192.10989 119.365306)
+ (xy 192.418072 119.674026) (xy 192.820936 119.84131) (xy 193.257151 119.84169) (xy 193.660306 119.67511) (xy 193.969026 119.366928)
+ (xy 194.13631 118.964064) (xy 194.13669 118.527849) (xy 194.13669 123.998348) (xy 194.092849 123.99831) (xy 193.689694 124.16489)
+ (xy 193.380974 124.473072) (xy 193.21369 124.875936) (xy 193.21331 125.312151) (xy 193.37989 125.715306) (xy 193.688072 126.024026)
+ (xy 194.090936 126.19131) (xy 194.527151 126.19169) (xy 194.930306 126.02511) (xy 195.239026 125.716928) (xy 195.40631 125.314064)
+ (xy 195.40669 124.877849) (xy 195.40669 126.538348) (xy 195.362849 126.53831) (xy 194.959694 126.70489) (xy 194.650974 127.013072)
+ (xy 194.48369 127.415936) (xy 194.48331 127.852151) (xy 194.64989 128.255306) (xy 194.958072 128.564026) (xy 195.360936 128.73131)
+ (xy 195.797151 128.73169) (xy 196.200306 128.56511) (xy 196.509026 128.256928) (xy 196.67631 127.854064) (xy 196.67669 127.417849)
+ (xy 196.67669 144.875) (xy 194.948223 144.875) (xy 194.907823 144.9154) (xy 194.818 144.9154) (xy 194.57821 144.963097)
+ (xy 194.374927 145.098927) (xy 194.13669 145.337163) (xy 194.13669 127.417849) (xy 193.97011 127.014694) (xy 193.661928 126.705974)
+ (xy 193.259064 126.53869) (xy 192.86669 126.538348) (xy 192.86669 124.877849) (xy 192.70011 124.474694) (xy 192.391928 124.165974)
+ (xy 191.989064 123.99869) (xy 191.59669 123.998348) (xy 191.59669 118.527849) (xy 191.43011 118.124694) (xy 191.121928 117.815974)
+ (xy 190.719064 117.64869) (xy 190.32669 117.648348) (xy 190.32669 115.987849) (xy 190.16011 115.584694) (xy 189.851928 115.275974)
+ (xy 189.449064 115.10869) (xy 189.05669 115.108348) (xy 189.05669 109.637849) (xy 188.89011 109.234694) (xy 188.581928 108.925974)
+ (xy 188.179064 108.75869) (xy 187.79003 108.758351) (xy 187.79003 107.115461) (xy 187.629934 106.709687) (xy 187.608934 106.678257)
+ (xy 187.405178 106.635177) (xy 187.369823 106.670532) (xy 187.369823 106.599822) (xy 187.326743 106.396066) (xy 186.926613 106.222345)
+ (xy 186.490461 106.21497) (xy 186.262668 106.304844) (xy 186.262668 105.218001) (xy 186.115382 104.86154) (xy 185.842895 104.588577)
+ (xy 185.486692 104.440668) (xy 185.101001 104.440332) (xy 184.74454 104.587618) (xy 184.611668 104.720257) (xy 184.611668 100.519001)
+ (xy 184.464382 100.16254) (xy 184.191895 99.889577) (xy 183.835692 99.741668) (xy 183.450001 99.741332) (xy 183.09354 99.888618)
+ (xy 182.820577 100.161105) (xy 182.672668 100.517308) (xy 182.672332 100.902999) (xy 182.819618 101.25946) (xy 183.092105 101.532423)
+ (xy 183.448308 101.680332) (xy 183.833999 101.680668) (xy 184.19046 101.533382) (xy 184.463423 101.260895) (xy 184.611332 100.904692)
+ (xy 184.611668 100.519001) (xy 184.611668 104.720257) (xy 184.530977 104.800808) (xy 184.445895 104.715577) (xy 184.089692 104.567668)
+ (xy 183.704001 104.567332) (xy 183.34754 104.714618) (xy 183.074577 104.987105) (xy 182.926668 105.343308) (xy 182.926332 105.728999)
+ (xy 183.073618 106.08546) (xy 183.346105 106.358423) (xy 183.702308 106.506332) (xy 184.087999 106.506668) (xy 184.44446 106.359382)
+ (xy 184.658022 106.146191) (xy 184.743105 106.231423) (xy 185.099308 106.379332) (xy 185.484999 106.379668) (xy 185.84146 106.232382)
+ (xy 186.114423 105.959895) (xy 186.262332 105.603692) (xy 186.262668 105.218001) (xy 186.262668 106.304844) (xy 186.084687 106.375066)
+ (xy 186.053257 106.396066) (xy 186.010177 106.599822) (xy 186.69 107.279645) (xy 187.369823 106.599822) (xy 187.369823 106.670532)
+ (xy 186.725355 107.315) (xy 187.405178 107.994823) (xy 187.608934 107.951743) (xy 187.782655 107.551613) (xy 187.79003 107.115461)
+ (xy 187.79003 108.758351) (xy 187.742849 108.75831) (xy 187.369823 108.91244) (xy 187.369823 108.030178) (xy 186.69 107.350355)
+ (xy 186.654645 107.38571) (xy 186.654645 107.315) (xy 185.974822 106.635177) (xy 185.771066 106.678257) (xy 185.597345 107.078387)
+ (xy 185.58997 107.514539) (xy 185.750066 107.920313) (xy 185.771066 107.951743) (xy 185.974822 107.994823) (xy 186.654645 107.315)
+ (xy 186.654645 107.38571) (xy 186.010177 108.030178) (xy 186.053257 108.233934) (xy 186.453387 108.407655) (xy 186.889539 108.41503)
+ (xy 187.295313 108.254934) (xy 187.326743 108.233934) (xy 187.369823 108.030178) (xy 187.369823 108.91244) (xy 187.339694 108.92489)
+ (xy 187.030974 109.233072) (xy 186.86369 109.635936) (xy 186.86331 110.072151) (xy 187.02989 110.475306) (xy 187.338072 110.784026)
+ (xy 187.740936 110.95131) (xy 188.177151 110.95169) (xy 188.580306 110.78511) (xy 188.889026 110.476928) (xy 189.05631 110.074064)
+ (xy 189.05669 109.637849) (xy 189.05669 115.108348) (xy 189.012849 115.10831) (xy 188.609694 115.27489) (xy 188.300974 115.583072)
+ (xy 188.13369 115.985936) (xy 188.13331 116.422151) (xy 188.29989 116.825306) (xy 188.608072 117.134026) (xy 189.010936 117.30131)
+ (xy 189.447151 117.30169) (xy 189.850306 117.13511) (xy 190.159026 116.826928) (xy 190.32631 116.424064) (xy 190.32669 115.987849)
+ (xy 190.32669 117.648348) (xy 190.282849 117.64831) (xy 189.879694 117.81489) (xy 189.570974 118.123072) (xy 189.40369 118.525936)
+ (xy 189.40331 118.962151) (xy 189.56989 119.365306) (xy 189.878072 119.674026) (xy 190.280936 119.84131) (xy 190.717151 119.84169)
+ (xy 191.120306 119.67511) (xy 191.429026 119.366928) (xy 191.59631 118.964064) (xy 191.59669 118.527849) (xy 191.59669 123.998348)
+ (xy 191.552849 123.99831) (xy 191.149694 124.16489) (xy 190.840974 124.473072) (xy 190.67369 124.875936) (xy 190.67331 125.312151)
+ (xy 190.83989 125.715306) (xy 191.148072 126.024026) (xy 191.550936 126.19131) (xy 191.987151 126.19169) (xy 192.390306 126.02511)
+ (xy 192.699026 125.716928) (xy 192.86631 125.314064) (xy 192.86669 124.877849) (xy 192.86669 126.538348) (xy 192.822849 126.53831)
+ (xy 192.419694 126.70489) (xy 192.110974 127.013072) (xy 191.94369 127.415936) (xy 191.94331 127.852151) (xy 192.10989 128.255306)
+ (xy 192.418072 128.564026) (xy 192.820936 128.73131) (xy 193.257151 128.73169) (xy 193.660306 128.56511) (xy 193.969026 128.256928)
+ (xy 194.13631 127.854064) (xy 194.13669 127.417849) (xy 194.13669 145.337163) (xy 192.358668 147.115185) (xy 192.358668 136.714001)
+ (xy 192.211382 136.35754) (xy 191.938895 136.084577) (xy 191.59669 135.94248) (xy 191.59669 127.417849) (xy 191.43011 127.014694)
+ (xy 191.121928 126.705974) (xy 190.719064 126.53869) (xy 190.32669 126.538348) (xy 190.32669 124.877849) (xy 190.16011 124.474694)
+ (xy 189.851928 124.165974) (xy 189.449064 123.99869) (xy 189.05669 123.998348) (xy 189.05669 118.527849) (xy 188.89011 118.124694)
+ (xy 188.581928 117.815974) (xy 188.179064 117.64869) (xy 187.79003 117.648351) (xy 187.79003 116.005461) (xy 187.629934 115.599687)
+ (xy 187.608934 115.568257) (xy 187.405178 115.525177) (xy 187.369823 115.560532) (xy 187.369823 115.489822) (xy 187.326743 115.286066)
+ (xy 186.926613 115.112345) (xy 186.490461 115.10497) (xy 186.084687 115.265066) (xy 186.053257 115.286066) (xy 186.010177 115.489822)
+ (xy 186.69 116.169645) (xy 187.369823 115.489822) (xy 187.369823 115.560532) (xy 186.725355 116.205) (xy 187.405178 116.884823)
+ (xy 187.608934 116.841743) (xy 187.782655 116.441613) (xy 187.79003 116.005461) (xy 187.79003 117.648351) (xy 187.742849 117.64831)
+ (xy 187.369823 117.80244) (xy 187.369823 116.920178) (xy 186.69 116.240355) (xy 186.654645 116.27571) (xy 186.654645 116.205)
+ (xy 185.974822 115.525177) (xy 185.771066 115.568257) (xy 185.597345 115.968387) (xy 185.58997 116.404539) (xy 185.750066 116.810313)
+ (xy 185.771066 116.841743) (xy 185.974822 116.884823) (xy 186.654645 116.205) (xy 186.654645 116.27571) (xy 186.010177 116.920178)
+ (xy 186.053257 117.123934) (xy 186.453387 117.297655) (xy 186.889539 117.30503) (xy 187.295313 117.144934) (xy 187.326743 117.123934)
+ (xy 187.369823 116.920178) (xy 187.369823 117.80244) (xy 187.339694 117.81489) (xy 187.030974 118.123072) (xy 186.86369 118.525936)
+ (xy 186.86331 118.962151) (xy 187.02989 119.365306) (xy 187.338072 119.674026) (xy 187.740936 119.84131) (xy 188.177151 119.84169)
+ (xy 188.580306 119.67511) (xy 188.889026 119.366928) (xy 189.05631 118.964064) (xy 189.05669 118.527849) (xy 189.05669 123.998348)
+ (xy 189.012849 123.99831) (xy 188.609694 124.16489) (xy 188.300974 124.473072) (xy 188.13369 124.875936) (xy 188.13331 125.312151)
+ (xy 188.29989 125.715306) (xy 188.608072 126.024026) (xy 189.010936 126.19131) (xy 189.447151 126.19169) (xy 189.850306 126.02511)
+ (xy 190.159026 125.716928) (xy 190.32631 125.314064) (xy 190.32669 124.877849) (xy 190.32669 126.538348) (xy 190.282849 126.53831)
+ (xy 189.879694 126.70489) (xy 189.570974 127.013072) (xy 189.40369 127.415936) (xy 189.40331 127.852151) (xy 189.56989 128.255306)
+ (xy 189.878072 128.564026) (xy 190.280936 128.73131) (xy 190.717151 128.73169) (xy 191.120306 128.56511) (xy 191.429026 128.256928)
+ (xy 191.59631 127.854064) (xy 191.59669 127.417849) (xy 191.59669 135.94248) (xy 191.582692 135.936668) (xy 191.197001 135.936332)
+ (xy 190.84054 136.083618) (xy 190.567577 136.356105) (xy 190.419668 136.712308) (xy 190.419332 137.097999) (xy 190.566618 137.45446)
+ (xy 190.839105 137.727423) (xy 191.195308 137.875332) (xy 191.580999 137.875668) (xy 191.93746 137.728382) (xy 192.210423 137.455895)
+ (xy 192.358332 137.099692) (xy 192.358668 136.714001) (xy 192.358668 147.115185) (xy 189.8185 149.655353) (xy 189.8185 143.423929)
+ (xy 189.8185 143.215071) (xy 189.8185 141.818071) (xy 189.8185 138.597929) (xy 189.8185 138.389071) (xy 189.8185 136.992071)
+ (xy 189.8185 135.549929) (xy 189.8185 135.341071) (xy 189.8185 133.944071) (xy 189.738574 133.751111) (xy 189.590889 133.603426)
+ (xy 189.397929 133.5235) (xy 189.189071 133.5235) (xy 189.05669 133.5235) (xy 189.05669 127.417849) (xy 188.89011 127.014694)
+ (xy 188.581928 126.705974) (xy 188.179064 126.53869) (xy 187.79003 126.538351) (xy 187.79003 124.895461) (xy 187.629934 124.489687)
+ (xy 187.608934 124.458257) (xy 187.405178 124.415177) (xy 187.369823 124.450532) (xy 187.369823 124.379822) (xy 187.326743 124.176066)
+ (xy 186.926613 124.002345) (xy 186.490461 123.99497) (xy 186.084687 124.155066) (xy 186.053257 124.176066) (xy 186.010177 124.379822)
+ (xy 186.69 125.059645) (xy 187.369823 124.379822) (xy 187.369823 124.450532) (xy 186.725355 125.095) (xy 187.405178 125.774823)
+ (xy 187.608934 125.731743) (xy 187.782655 125.331613) (xy 187.79003 124.895461) (xy 187.79003 126.538351) (xy 187.742849 126.53831)
+ (xy 187.369823 126.69244) (xy 187.369823 125.810178) (xy 186.69 125.130355) (xy 186.654645 125.16571) (xy 186.654645 125.095)
+ (xy 185.974822 124.415177) (xy 185.771066 124.458257) (xy 185.597345 124.858387) (xy 185.58997 125.294539) (xy 185.750066 125.700313)
+ (xy 185.771066 125.731743) (xy 185.974822 125.774823) (xy 186.654645 125.095) (xy 186.654645 125.16571) (xy 186.010177 125.810178)
+ (xy 186.053257 126.013934) (xy 186.453387 126.187655) (xy 186.889539 126.19503) (xy 187.295313 126.034934) (xy 187.326743 126.013934)
+ (xy 187.369823 125.810178) (xy 187.369823 126.69244) (xy 187.339694 126.70489) (xy 187.030974 127.013072) (xy 186.86369 127.415936)
+ (xy 186.86331 127.852151) (xy 187.02989 128.255306) (xy 187.338072 128.564026) (xy 187.740936 128.73131) (xy 188.177151 128.73169)
+ (xy 188.580306 128.56511) (xy 188.889026 128.256928) (xy 189.05631 127.854064) (xy 189.05669 127.417849) (xy 189.05669 133.5235)
+ (xy 187.792071 133.5235) (xy 187.599111 133.603426) (xy 187.451426 133.751111) (xy 187.3715 133.944071) (xy 187.3715 134.152929)
+ (xy 187.3715 135.549929) (xy 187.451426 135.742889) (xy 187.599111 135.890574) (xy 187.792071 135.9705) (xy 188.000929 135.9705)
+ (xy 189.397929 135.9705) (xy 189.590889 135.890574) (xy 189.738574 135.742889) (xy 189.8185 135.549929) (xy 189.8185 136.992071)
+ (xy 189.738574 136.799111) (xy 189.590889 136.651426) (xy 189.397929 136.5715) (xy 189.189071 136.5715) (xy 187.792071 136.5715)
+ (xy 187.599111 136.651426) (xy 187.451426 136.799111) (xy 187.3715 136.992071) (xy 187.3715 137.200929) (xy 187.3715 138.597929)
+ (xy 187.451426 138.790889) (xy 187.599111 138.938574) (xy 187.792071 139.0185) (xy 188.000929 139.0185) (xy 189.397929 139.0185)
+ (xy 189.590889 138.938574) (xy 189.738574 138.790889) (xy 189.8185 138.597929) (xy 189.8185 141.818071) (xy 189.738574 141.625111)
+ (xy 189.590889 141.477426) (xy 189.397929 141.3975) (xy 189.189071 141.3975) (xy 187.792071 141.3975) (xy 187.599111 141.477426)
+ (xy 187.451426 141.625111) (xy 187.3715 141.818071) (xy 187.3715 142.026929) (xy 187.3715 143.423929) (xy 187.451426 143.616889)
+ (xy 187.599111 143.764574) (xy 187.792071 143.8445) (xy 188.000929 143.8445) (xy 189.397929 143.8445) (xy 189.590889 143.764574)
+ (xy 189.738574 143.616889) (xy 189.8185 143.423929) (xy 189.8185 149.655353) (xy 187.278712 152.195141) (xy 187.278712 142.378698)
+ (xy 187.278712 137.552698) (xy 187.278712 134.504698) (xy 187.092838 134.054848) (xy 186.748962 133.710372) (xy 186.299437 133.523713)
+ (xy 186.075649 133.523517) (xy 186.34946 133.410382) (xy 186.622423 133.137895) (xy 186.770332 132.781692) (xy 186.770668 132.396001)
+ (xy 186.623382 132.03954) (xy 186.350895 131.766577) (xy 185.994692 131.618668) (xy 185.609001 131.618332) (xy 185.25254 131.765618)
+ (xy 184.979577 132.038105) (xy 184.865668 132.312427) (xy 184.865668 125.919001) (xy 184.718382 125.56254) (xy 184.445895 125.289577)
+ (xy 184.089692 125.141668) (xy 183.752298 125.141374) (xy 183.849332 124.907692) (xy 183.849668 124.522001) (xy 183.849668 107.123001)
+ (xy 183.702382 106.76654) (xy 183.429895 106.493577) (xy 183.073692 106.345668) (xy 182.688001 106.345332) (xy 182.33154 106.492618)
+ (xy 182.058577 106.765105) (xy 181.910668 107.121308) (xy 181.910332 107.506999) (xy 181.915439 107.519359) (xy 181.778895 107.382577)
+ (xy 181.422692 107.234668) (xy 181.037001 107.234332) (xy 180.68054 107.381618) (xy 180.484355 107.57746) (xy 180.484355 99.289217)
+ (xy 180.484355 90.399217) (xy 180.484355 81.509217) (xy 180.484355 72.619217) (xy 180.17307 71.865851) (xy 179.597181 71.288955)
+ (xy 178.844359 70.976357) (xy 178.029217 70.975645) (xy 177.275851 71.28693) (xy 176.864661 71.697401) (xy 176.864668 71.690001)
+ (xy 176.717382 71.33354) (xy 176.444895 71.060577) (xy 176.088692 70.912668) (xy 175.703001 70.912332) (xy 175.34654 71.059618)
+ (xy 175.073577 71.332105) (xy 174.925668 71.688308) (xy 174.925332 72.073999) (xy 175.072618 72.43046) (xy 175.345105 72.703423)
+ (xy 175.701308 72.851332) (xy 176.086999 72.851668) (xy 176.386258 72.728016) (xy 176.385645 73.430783) (xy 176.69693 74.184149)
+ (xy 177.272819 74.761045) (xy 178.025641 75.073643) (xy 178.840783 75.074355) (xy 179.594149 74.76307) (xy 180.171045 74.187181)
+ (xy 180.483643 73.434359) (xy 180.484355 72.619217) (xy 180.484355 81.509217) (xy 180.17307 80.755851) (xy 179.597181 80.178955)
+ (xy 178.844359 79.866357) (xy 178.029217 79.865645) (xy 177.275851 80.17693) (xy 176.698955 80.752819) (xy 176.483507 81.271674)
+ (xy 176.483668 81.088001) (xy 176.336382 80.73154) (xy 176.063895 80.458577) (xy 175.707692 80.310668) (xy 175.322001 80.310332)
+ (xy 174.96554 80.457618) (xy 174.692577 80.730105) (xy 174.544668 81.086308) (xy 174.544332 81.471999) (xy 174.691618 81.82846)
+ (xy 174.964105 82.101423) (xy 175.320308 82.249332) (xy 175.705999 82.249668) (xy 176.06246 82.102382) (xy 176.335423 81.829895)
+ (xy 176.38618 81.707657) (xy 176.385645 82.320783) (xy 176.69693 83.074149) (xy 177.272819 83.651045) (xy 178.025641 83.963643)
+ (xy 178.840783 83.964355) (xy 179.594149 83.65307) (xy 180.171045 83.077181) (xy 180.483643 82.324359) (xy 180.484355 81.509217)
+ (xy 180.484355 90.399217) (xy 180.17307 89.645851) (xy 179.597181 89.068955) (xy 178.844359 88.756357) (xy 178.299318 88.75588)
+ (xy 178.367423 88.687895) (xy 178.515332 88.331692) (xy 178.515668 87.946001) (xy 178.368382 87.58954) (xy 178.095895 87.316577)
+ (xy 177.739692 87.168668) (xy 177.354001 87.168332) (xy 176.99754 87.315618) (xy 176.737668 87.575036) (xy 176.737668 85.406001)
+ (xy 176.590382 85.04954) (xy 176.317895 84.776577) (xy 175.961692 84.628668) (xy 175.576001 84.628332) (xy 175.21954 84.775618)
+ (xy 174.946577 85.048105) (xy 174.798668 85.404308) (xy 174.798332 85.789999) (xy 174.945618 86.14646) (xy 175.218105 86.419423)
+ (xy 175.574308 86.567332) (xy 175.959999 86.567668) (xy 176.31646 86.420382) (xy 176.589423 86.147895) (xy 176.737332 85.791692)
+ (xy 176.737668 85.406001) (xy 176.737668 87.575036) (xy 176.724577 87.588105) (xy 176.576668 87.944308) (xy 176.576332 88.329999)
+ (xy 176.723618 88.68646) (xy 176.996105 88.959423) (xy 177.269728 89.073041) (xy 176.698955 89.642819) (xy 176.386357 90.395641)
+ (xy 176.385645 91.210783) (xy 176.69693 91.964149) (xy 177.272819 92.541045) (xy 178.025641 92.853643) (xy 178.840783 92.854355)
+ (xy 179.594149 92.54307) (xy 180.171045 91.967181) (xy 180.483643 91.214359) (xy 180.484355 90.399217) (xy 180.484355 99.289217)
+ (xy 180.17307 98.535851) (xy 179.597181 97.958955) (xy 178.844359 97.646357) (xy 178.029217 97.645645) (xy 177.275851 97.95693)
+ (xy 176.698955 98.532819) (xy 176.386357 99.285641) (xy 176.385645 100.100783) (xy 176.69693 100.854149) (xy 177.272819 101.431045)
+ (xy 178.025641 101.743643) (xy 178.840783 101.744355) (xy 179.594149 101.43307) (xy 180.171045 100.857181) (xy 180.483643 100.104359)
+ (xy 180.484355 99.289217) (xy 180.484355 107.57746) (xy 180.407577 107.654105) (xy 180.337306 107.823333) (xy 180.17307 107.425851)
+ (xy 179.597181 106.848955) (xy 178.844359 106.536357) (xy 178.029217 106.535645) (xy 177.275851 106.84693) (xy 176.698955 107.422819)
+ (xy 176.386357 108.175641) (xy 176.385645 108.990783) (xy 176.69693 109.744149) (xy 177.272819 110.321045) (xy 178.025641 110.633643)
+ (xy 178.840783 110.634355) (xy 179.594149 110.32307) (xy 180.171045 109.747181) (xy 180.483643 108.994359) (xy 180.483786 108.829763)
+ (xy 180.679105 109.025423) (xy 181.035308 109.173332) (xy 181.420999 109.173668) (xy 181.77746 109.026382) (xy 182.050423 108.753895)
+ (xy 182.198332 108.397692) (xy 182.198668 108.012001) (xy 182.19356 107.99964) (xy 182.330105 108.136423) (xy 182.686308 108.284332)
+ (xy 183.071999 108.284668) (xy 183.42846 108.137382) (xy 183.701423 107.864895) (xy 183.849332 107.508692) (xy 183.849668 107.123001)
+ (xy 183.849668 124.522001) (xy 183.702382 124.16554) (xy 183.429895 123.892577) (xy 183.073692 123.744668) (xy 182.960668 123.744569)
+ (xy 182.960668 115.124001) (xy 182.813382 114.76754) (xy 182.540895 114.494577) (xy 182.184692 114.346668) (xy 181.799001 114.346332)
+ (xy 181.44254 114.493618) (xy 181.169577 114.766105) (xy 181.021668 115.122308) (xy 181.021332 115.507999) (xy 181.168618 115.86446)
+ (xy 181.441105 116.137423) (xy 181.797308 116.285332) (xy 182.182999 116.285668) (xy 182.53946 116.138382) (xy 182.812423 115.865895)
+ (xy 182.960332 115.509692) (xy 182.960668 115.124001) (xy 182.960668 123.744569) (xy 182.688001 123.744332) (xy 182.33154 123.891618)
+ (xy 182.058577 124.164105) (xy 181.910668 124.520308) (xy 181.910332 124.905999) (xy 182.057618 125.26246) (xy 182.330105 125.535423)
+ (xy 182.686308 125.683332) (xy 183.023701 125.683625) (xy 182.926668 125.917308) (xy 182.926332 126.302999) (xy 183.073618 126.65946)
+ (xy 183.346105 126.932423) (xy 183.702308 127.080332) (xy 184.087999 127.080668) (xy 184.44446 126.933382) (xy 184.717423 126.660895)
+ (xy 184.865332 126.304692) (xy 184.865668 125.919001) (xy 184.865668 132.312427) (xy 184.831668 132.394308) (xy 184.831332 132.779999)
+ (xy 184.978618 133.13646) (xy 185.251105 133.409423) (xy 185.607308 133.557332) (xy 185.730046 133.557438) (xy 185.362848 133.709162)
+ (xy 185.018372 134.053038) (xy 184.831713 134.502563) (xy 184.831288 134.989302) (xy 185.017162 135.439152) (xy 185.361038 135.783628)
+ (xy 185.810563 135.970287) (xy 186.297302 135.970712) (xy 186.747152 135.784838) (xy 187.091628 135.440962) (xy 187.278287 134.991437)
+ (xy 187.278712 134.504698) (xy 187.278712 137.552698) (xy 187.092838 137.102848) (xy 186.748962 136.758372) (xy 186.299437 136.571713)
+ (xy 185.812698 136.571288) (xy 185.362848 136.757162) (xy 185.018372 137.101038) (xy 184.831713 137.550563) (xy 184.831288 138.037302)
+ (xy 185.017162 138.487152) (xy 185.361038 138.831628) (xy 185.810563 139.018287) (xy 186.297302 139.018712) (xy 186.747152 138.832838)
+ (xy 187.091628 138.488962) (xy 187.278287 138.039437) (xy 187.278712 137.552698) (xy 187.278712 142.378698) (xy 187.092838 141.928848)
+ (xy 186.748962 141.584372) (xy 186.299437 141.397713) (xy 185.812698 141.397288) (xy 185.362848 141.583162) (xy 185.018372 141.927038)
+ (xy 184.831713 142.376563) (xy 184.831288 142.863302) (xy 185.017162 143.313152) (xy 185.361038 143.657628) (xy 185.810563 143.844287)
+ (xy 186.297302 143.844712) (xy 186.747152 143.658838) (xy 187.091628 143.314962) (xy 187.278287 142.865437) (xy 187.278712 142.378698)
+ (xy 187.278712 152.195141) (xy 185.160453 154.3134) (xy 184.738712 154.3134) (xy 184.738712 142.378698) (xy 184.738712 137.552698)
+ (xy 184.738712 134.504698) (xy 184.552838 134.054848) (xy 184.208962 133.710372) (xy 183.759437 133.523713) (xy 183.272698 133.523288)
+ (xy 182.822848 133.709162) (xy 182.478372 134.053038) (xy 182.291713 134.502563) (xy 182.291288 134.989302) (xy 182.477162 135.439152)
+ (xy 182.821038 135.783628) (xy 183.270563 135.970287) (xy 183.757302 135.970712) (xy 184.207152 135.784838) (xy 184.551628 135.440962)
+ (xy 184.738287 134.991437) (xy 184.738712 134.504698) (xy 184.738712 137.552698) (xy 184.552838 137.102848) (xy 184.208962 136.758372)
+ (xy 183.759437 136.571713) (xy 183.272698 136.571288) (xy 182.822848 136.757162) (xy 182.478372 137.101038) (xy 182.291713 137.550563)
+ (xy 182.291288 138.037302) (xy 182.477162 138.487152) (xy 182.821038 138.831628) (xy 183.270563 139.018287) (xy 183.757302 139.018712)
+ (xy 184.207152 138.832838) (xy 184.551628 138.488962) (xy 184.738287 138.039437) (xy 184.738712 137.552698) (xy 184.738712 142.378698)
+ (xy 184.552838 141.928848) (xy 184.208962 141.584372) (xy 183.759437 141.397713) (xy 183.272698 141.397288) (xy 182.822848 141.583162)
+ (xy 182.478372 141.927038) (xy 182.291713 142.376563) (xy 182.291288 142.863302) (xy 182.477162 143.313152) (xy 182.821038 143.657628)
+ (xy 183.270563 143.844287) (xy 183.757302 143.844712) (xy 184.207152 143.658838) (xy 184.551628 143.314962) (xy 184.738287 142.865437)
+ (xy 184.738712 142.378698) (xy 184.738712 154.3134) (xy 182.198712 154.3134) (xy 182.198712 142.378698) (xy 182.198712 137.552698)
+ (xy 182.198712 134.504698) (xy 182.012838 134.054848) (xy 181.668962 133.710372) (xy 181.219437 133.523713) (xy 180.732698 133.523288)
+ (xy 180.484355 133.625901) (xy 180.484355 125.959217) (xy 180.484355 117.069217) (xy 180.17307 116.315851) (xy 179.597181 115.738955)
+ (xy 178.844359 115.426357) (xy 178.029217 115.425645) (xy 177.275851 115.73693) (xy 176.698955 116.312819) (xy 176.386357 117.065641)
+ (xy 176.385645 117.880783) (xy 176.69693 118.634149) (xy 177.272819 119.211045) (xy 178.025641 119.523643) (xy 178.840783 119.524355)
+ (xy 179.594149 119.21307) (xy 180.171045 118.637181) (xy 180.483643 117.884359) (xy 180.484355 117.069217) (xy 180.484355 125.959217)
+ (xy 180.17307 125.205851) (xy 179.597181 124.628955) (xy 178.844359 124.316357) (xy 178.029217 124.315645) (xy 177.275851 124.62693)
+ (xy 176.698955 125.202819) (xy 176.386357 125.955641) (xy 176.385645 126.770783) (xy 176.69693 127.524149) (xy 177.272819 128.101045)
+ (xy 178.025641 128.413643) (xy 178.840783 128.414355) (xy 179.594149 128.10307) (xy 180.171045 127.527181) (xy 180.483643 126.774359)
+ (xy 180.484355 125.959217) (xy 180.484355 133.625901) (xy 180.282848 133.709162) (xy 179.938372 134.053038) (xy 179.751713 134.502563)
+ (xy 179.751288 134.989302) (xy 179.937162 135.439152) (xy 180.281038 135.783628) (xy 180.730563 135.970287) (xy 181.217302 135.970712)
+ (xy 181.667152 135.784838) (xy 182.011628 135.440962) (xy 182.198287 134.991437) (xy 182.198712 134.504698) (xy 182.198712 137.552698)
+ (xy 182.012838 137.102848) (xy 181.668962 136.758372) (xy 181.219437 136.571713) (xy 180.732698 136.571288) (xy 180.282848 136.757162)
+ (xy 179.938372 137.101038) (xy 179.751713 137.550563) (xy 179.751288 138.037302) (xy 179.937162 138.487152) (xy 180.281038 138.831628)
+ (xy 180.730563 139.018287) (xy 181.217302 139.018712) (xy 181.667152 138.832838) (xy 182.011628 138.488962) (xy 182.198287 138.039437)
+ (xy 182.198712 137.552698) (xy 182.198712 142.378698) (xy 182.012838 141.928848) (xy 181.668962 141.584372) (xy 181.219437 141.397713)
+ (xy 180.732698 141.397288) (xy 180.282848 141.583162) (xy 179.938372 141.927038) (xy 179.751713 142.376563) (xy 179.751288 142.863302)
+ (xy 179.937162 143.313152) (xy 180.281038 143.657628) (xy 180.730563 143.844287) (xy 181.217302 143.844712) (xy 181.667152 143.658838)
+ (xy 182.011628 143.314962) (xy 182.198287 142.865437) (xy 182.198712 142.378698) (xy 182.198712 154.3134) (xy 179.658712 154.3134)
+ (xy 179.658712 142.378698) (xy 179.658712 137.552698) (xy 179.658712 134.504698) (xy 179.472838 134.054848) (xy 179.128962 133.710372)
+ (xy 178.679437 133.523713) (xy 178.192698 133.523288) (xy 177.742848 133.709162) (xy 177.398372 134.053038) (xy 177.211713 134.502563)
+ (xy 177.211288 134.989302) (xy 177.397162 135.439152) (xy 177.741038 135.783628) (xy 178.190563 135.970287) (xy 178.677302 135.970712)
+ (xy 179.127152 135.784838) (xy 179.471628 135.440962) (xy 179.658287 134.991437) (xy 179.658712 134.504698) (xy 179.658712 137.552698)
+ (xy 179.472838 137.102848) (xy 179.128962 136.758372) (xy 178.679437 136.571713) (xy 178.192698 136.571288) (xy 177.742848 136.757162)
+ (xy 177.398372 137.101038) (xy 177.211713 137.550563) (xy 177.211288 138.037302) (xy 177.397162 138.487152) (xy 177.741038 138.831628)
+ (xy 178.190563 139.018287) (xy 178.677302 139.018712) (xy 179.127152 138.832838) (xy 179.471628 138.488962) (xy 179.658287 138.039437)
+ (xy 179.658712 137.552698) (xy 179.658712 142.378698) (xy 179.472838 141.928848) (xy 179.128962 141.584372) (xy 178.679437 141.397713)
+ (xy 178.192698 141.397288) (xy 177.742848 141.583162) (xy 177.398372 141.927038) (xy 177.211713 142.376563) (xy 177.211288 142.863302)
+ (xy 177.397162 143.313152) (xy 177.741038 143.657628) (xy 178.190563 143.844287) (xy 178.677302 143.844712) (xy 179.127152 143.658838)
+ (xy 179.471628 143.314962) (xy 179.658287 142.865437) (xy 179.658712 142.378698) (xy 179.658712 154.3134) (xy 177.118712 154.3134)
+ (xy 177.118712 142.378698) (xy 177.118712 137.552698) (xy 177.118712 134.504698) (xy 176.932838 134.054848) (xy 176.588962 133.710372)
+ (xy 176.356668 133.613915) (xy 176.356668 110.806001) (xy 176.356668 105.853001) (xy 176.209382 105.49654) (xy 175.936895 105.223577)
+ (xy 175.580692 105.075668) (xy 175.195001 105.075332) (xy 174.83854 105.222618) (xy 174.565577 105.495105) (xy 174.417668 105.851308)
+ (xy 174.417332 106.236999) (xy 174.564618 106.59346) (xy 174.837105 106.866423) (xy 175.193308 107.014332) (xy 175.578999 107.014668)
+ (xy 175.93546 106.867382) (xy 176.208423 106.594895) (xy 176.356332 106.238692) (xy 176.356668 105.853001) (xy 176.356668 110.806001)
+ (xy 176.209382 110.44954) (xy 175.936895 110.176577) (xy 175.580692 110.028668) (xy 175.195001 110.028332) (xy 174.83854 110.175618)
+ (xy 174.565577 110.448105) (xy 174.417668 110.804308) (xy 174.417332 111.189999) (xy 174.564618 111.54646) (xy 174.837105 111.819423)
+ (xy 175.193308 111.967332) (xy 175.578999 111.967668) (xy 175.93546 111.820382) (xy 176.208423 111.547895) (xy 176.356332 111.191692)
+ (xy 176.356668 110.806001) (xy 176.356668 133.613915) (xy 176.139437 133.523713) (xy 175.652698 133.523288) (xy 175.202848 133.709162)
+ (xy 174.858372 134.053038) (xy 174.671713 134.502563) (xy 174.671288 134.989302) (xy 174.857162 135.439152) (xy 175.201038 135.783628)
+ (xy 175.650563 135.970287) (xy 176.137302 135.970712) (xy 176.587152 135.784838) (xy 176.931628 135.440962) (xy 177.118287 134.991437)
+ (xy 177.118712 134.504698) (xy 177.118712 137.552698) (xy 176.932838 137.102848) (xy 176.588962 136.758372) (xy 176.139437 136.571713)
+ (xy 175.652698 136.571288) (xy 175.202848 136.757162) (xy 174.858372 137.101038) (xy 174.671713 137.550563) (xy 174.671288 138.037302)
+ (xy 174.857162 138.487152) (xy 175.201038 138.831628) (xy 175.650563 139.018287) (xy 176.137302 139.018712) (xy 176.587152 138.832838)
+ (xy 176.931628 138.488962) (xy 177.118287 138.039437) (xy 177.118712 137.552698) (xy 177.118712 142.378698) (xy 176.932838 141.928848)
+ (xy 176.588962 141.584372) (xy 176.139437 141.397713) (xy 175.652698 141.397288) (xy 175.202848 141.583162) (xy 174.858372 141.927038)
+ (xy 174.671713 142.376563) (xy 174.671288 142.863302) (xy 174.857162 143.313152) (xy 175.201038 143.657628) (xy 175.650563 143.844287)
+ (xy 176.137302 143.844712) (xy 176.587152 143.658838) (xy 176.931628 143.314962) (xy 177.118287 142.865437) (xy 177.118712 142.378698)
+ (xy 177.118712 154.3134) (xy 174.578712 154.3134) (xy 174.578712 142.378698) (xy 174.578712 137.552698) (xy 174.578712 134.504698)
+ (xy 174.392838 134.054848) (xy 174.048962 133.710372) (xy 173.599437 133.523713) (xy 173.308668 133.523459) (xy 173.308668 125.284001)
+ (xy 173.308668 110.806001) (xy 173.161382 110.44954) (xy 172.888895 110.176577) (xy 172.572889 110.045359) (xy 172.88746 109.915382)
+ (xy 173.160423 109.642895) (xy 173.308332 109.286692) (xy 173.308668 108.901001) (xy 173.308668 95.820001) (xy 173.181668 95.512636)
+ (xy 173.181668 89.597001) (xy 173.181668 84.517001) (xy 173.034382 84.16054) (xy 172.761895 83.887577) (xy 172.405692 83.739668)
+ (xy 172.020001 83.739332) (xy 171.66354 83.886618) (xy 171.390577 84.159105) (xy 171.242668 84.515308) (xy 171.242332 84.900999)
+ (xy 171.389618 85.25746) (xy 171.662105 85.530423) (xy 172.018308 85.678332) (xy 172.403999 85.678668) (xy 172.76046 85.531382)
+ (xy 173.033423 85.258895) (xy 173.181332 84.902692) (xy 173.181668 84.517001) (xy 173.181668 89.597001) (xy 173.034382 89.24054)
+ (xy 172.761895 88.967577) (xy 172.405692 88.819668) (xy 172.020001 88.819332) (xy 171.66354 88.966618) (xy 171.390577 89.239105)
+ (xy 171.242668 89.595308) (xy 171.242332 89.980999) (xy 171.389618 90.33746) (xy 171.662105 90.610423) (xy 172.018308 90.758332)
+ (xy 172.403999 90.758668) (xy 172.76046 90.611382) (xy 173.033423 90.338895) (xy 173.181332 89.982692) (xy 173.181668 89.597001)
+ (xy 173.181668 95.512636) (xy 173.161382 95.46354) (xy 172.888895 95.190577) (xy 172.532692 95.042668) (xy 172.147001 95.042332)
+ (xy 171.79054 95.189618) (xy 171.517577 95.462105) (xy 171.369668 95.818308) (xy 171.369332 96.203999) (xy 171.414196 96.312578)
+ (xy 171.149668 96.312348) (xy 171.149668 93.915001) (xy 171.149668 89.470001) (xy 171.002382 89.11354) (xy 170.729895 88.840577)
+ (xy 170.373692 88.692668) (xy 169.988001 88.692332) (xy 169.63154 88.839618) (xy 169.358577 89.112105) (xy 169.210668 89.468308)
+ (xy 169.210332 89.853999) (xy 169.357618 90.21046) (xy 169.630105 90.483423) (xy 169.986308 90.631332) (xy 170.371999 90.631668)
+ (xy 170.72846 90.484382) (xy 171.001423 90.211895) (xy 171.149332 89.855692) (xy 171.149668 89.470001) (xy 171.149668 93.915001)
+ (xy 171.002382 93.55854) (xy 170.729895 93.285577) (xy 170.373692 93.137668) (xy 170.13346 93.137458) (xy 170.133668 92.899001)
+ (xy 169.986382 92.54254) (xy 169.713895 92.269577) (xy 169.357692 92.121668) (xy 168.990668 92.121348) (xy 168.990668 86.676001)
+ (xy 168.843382 86.31954) (xy 168.570895 86.046577) (xy 168.214692 85.898668) (xy 167.829001 85.898332) (xy 167.593668 85.995569)
+ (xy 167.593668 82.739001) (xy 167.446382 82.38254) (xy 167.173895 82.109577) (xy 166.817692 81.961668) (xy 166.432001 81.961332)
+ (xy 166.07554 82.108618) (xy 165.989088 82.194919) (xy 165.903895 82.109577) (xy 165.561668 81.967471) (xy 165.561668 70.674001)
+ (xy 165.414382 70.31754) (xy 165.141895 70.044577) (xy 164.785692 69.896668) (xy 164.400001 69.896332) (xy 164.04354 70.043618)
+ (xy 163.770577 70.316105) (xy 163.622668 70.672308) (xy 163.622332 71.057999) (xy 163.769618 71.41446) (xy 164.042105 71.687423)
+ (xy 164.398308 71.835332) (xy 164.783999 71.835668) (xy 165.14046 71.688382) (xy 165.413423 71.415895) (xy 165.561332 71.059692)
+ (xy 165.561668 70.674001) (xy 165.561668 81.967471) (xy 165.547692 81.961668) (xy 165.180668 81.961348) (xy 165.180668 79.284601)
+ (xy 165.033382 78.92814) (xy 165.02328 78.918021) (xy 165.032423 78.908895) (xy 165.180332 78.552692) (xy 165.180668 78.167001)
+ (xy 165.033382 77.81054) (xy 164.760895 77.537577) (xy 164.404692 77.389668) (xy 164.019001 77.389332) (xy 163.66254 77.536618)
+ (xy 163.389577 77.809105) (xy 163.241668 78.165308) (xy 163.241332 78.550999) (xy 163.388618 78.90746) (xy 163.398719 78.917578)
+ (xy 163.389577 78.926705) (xy 163.241668 79.282908) (xy 163.241332 79.668599) (xy 163.388618 80.02506) (xy 163.661105 80.298023)
+ (xy 164.017308 80.445932) (xy 164.402999 80.446268) (xy 164.75946 80.298982) (xy 165.032423 80.026495) (xy 165.180332 79.670292)
+ (xy 165.180668 79.284601) (xy 165.180668 81.961348) (xy 165.162001 81.961332) (xy 164.80554 82.108618) (xy 164.532577 82.381105)
+ (xy 164.384668 82.737308) (xy 164.384332 83.122999) (xy 164.531618 83.47946) (xy 164.804105 83.752423) (xy 165.160308 83.900332)
+ (xy 165.545999 83.900668) (xy 165.90246 83.753382) (xy 165.988911 83.66708) (xy 166.074105 83.752423) (xy 166.430308 83.900332)
+ (xy 166.815999 83.900668) (xy 167.17246 83.753382) (xy 167.445423 83.480895) (xy 167.593332 83.124692) (xy 167.593668 82.739001)
+ (xy 167.593668 85.995569) (xy 167.47254 86.045618) (xy 167.199577 86.318105) (xy 167.051668 86.674308) (xy 167.051332 87.059999)
+ (xy 167.198618 87.41646) (xy 167.471105 87.689423) (xy 167.827308 87.837332) (xy 168.212999 87.837668) (xy 168.56946 87.690382)
+ (xy 168.842423 87.417895) (xy 168.990332 87.061692) (xy 168.990668 86.676001) (xy 168.990668 92.121348) (xy 168.972001 92.121332)
+ (xy 168.61554 92.268618) (xy 168.342577 92.541105) (xy 168.194668 92.897308) (xy 168.194332 93.282999) (xy 168.341618 93.63946)
+ (xy 168.614105 93.912423) (xy 168.970308 94.060332) (xy 169.210539 94.060541) (xy 169.210332 94.298999) (xy 169.357618 94.65546)
+ (xy 169.630105 94.928423) (xy 169.986308 95.076332) (xy 170.371999 95.076668) (xy 170.72846 94.929382) (xy 171.001423 94.656895)
+ (xy 171.149332 94.300692) (xy 171.149668 93.915001) (xy 171.149668 96.312348) (xy 171.131001 96.312332) (xy 170.77454 96.459618)
+ (xy 170.501577 96.732105) (xy 170.353668 97.088308) (xy 170.353332 97.473999) (xy 170.500618 97.83046) (xy 170.773105 98.103423)
+ (xy 171.129308 98.251332) (xy 171.514999 98.251668) (xy 171.87146 98.104382) (xy 172.144423 97.831895) (xy 172.292332 97.475692)
+ (xy 172.292668 97.090001) (xy 172.247803 96.981421) (xy 172.530999 96.981668) (xy 172.88746 96.834382) (xy 173.160423 96.561895)
+ (xy 173.308332 96.205692) (xy 173.308668 95.820001) (xy 173.308668 108.901001) (xy 173.161382 108.54454) (xy 173.054668 108.437639)
+ (xy 173.054668 100.265001) (xy 172.907382 99.90854) (xy 172.634895 99.635577) (xy 172.278692 99.487668) (xy 171.893001 99.487332)
+ (xy 171.53654 99.634618) (xy 171.263577 99.907105) (xy 171.115668 100.263308) (xy 171.115332 100.648999) (xy 171.262618 101.00546)
+ (xy 171.535105 101.278423) (xy 171.891308 101.426332) (xy 172.276999 101.426668) (xy 172.63346 101.279382) (xy 172.906423 101.006895)
+ (xy 173.054332 100.650692) (xy 173.054668 100.265001) (xy 173.054668 108.437639) (xy 172.888895 108.271577) (xy 172.532692 108.123668)
+ (xy 172.147001 108.123332) (xy 171.79054 108.270618) (xy 171.517577 108.543105) (xy 171.369668 108.899308) (xy 171.369332 109.284999)
+ (xy 171.516618 109.64146) (xy 171.789105 109.914423) (xy 172.10511 110.04564) (xy 171.79054 110.175618) (xy 171.530668 110.435036)
+ (xy 171.530668 109.917001) (xy 171.383382 109.56054) (xy 171.110895 109.287577) (xy 170.754692 109.139668) (xy 170.369001 109.139332)
+ (xy 170.01254 109.286618) (xy 170.006668 109.292479) (xy 170.006668 104.456001) (xy 170.006668 100.646001) (xy 169.859382 100.28954)
+ (xy 169.586895 100.016577) (xy 169.230692 99.868668) (xy 168.845001 99.868332) (xy 168.83264 99.873439) (xy 168.969423 99.736895)
+ (xy 169.117332 99.380692) (xy 169.117668 98.995001) (xy 168.970382 98.63854) (xy 168.697895 98.365577) (xy 168.355565 98.223428)
+ (xy 168.355668 98.106001) (xy 168.208382 97.74954) (xy 168.10492 97.645898) (xy 168.228332 97.348692) (xy 168.228668 96.963001)
+ (xy 168.081382 96.60654) (xy 168.05858 96.583699) (xy 168.080423 96.561895) (xy 168.228332 96.205692) (xy 168.228668 95.820001)
+ (xy 168.081382 95.46354) (xy 167.808895 95.190577) (xy 167.452692 95.042668) (xy 167.067001 95.042332) (xy 166.71054 95.189618)
+ (xy 166.450668 95.449036) (xy 166.450668 93.280001) (xy 166.450668 90.740001) (xy 166.303382 90.38354) (xy 166.21708 90.297088)
+ (xy 166.302423 90.211895) (xy 166.450332 89.855692) (xy 166.450668 89.470001) (xy 166.303382 89.11354) (xy 166.030895 88.840577)
+ (xy 165.674692 88.692668) (xy 165.289001 88.692332) (xy 164.93254 88.839618) (xy 164.659577 89.112105) (xy 164.511668 89.468308)
+ (xy 164.511332 89.853999) (xy 164.658618 90.21046) (xy 164.744919 90.296911) (xy 164.659577 90.382105) (xy 164.511668 90.738308)
+ (xy 164.511332 91.123999) (xy 164.658618 91.48046) (xy 164.931105 91.753423) (xy 165.287308 91.901332) (xy 165.672999 91.901668)
+ (xy 166.02946 91.754382) (xy 166.302423 91.481895) (xy 166.450332 91.125692) (xy 166.450668 90.740001) (xy 166.450668 93.280001)
+ (xy 166.303382 92.92354) (xy 166.030895 92.650577) (xy 165.674692 92.502668) (xy 165.289001 92.502332) (xy 164.93254 92.649618)
+ (xy 164.659577 92.922105) (xy 164.511668 93.278308) (xy 164.511332 93.663999) (xy 164.658618 94.02046) (xy 164.931105 94.293423)
+ (xy 165.287308 94.441332) (xy 165.672999 94.441668) (xy 166.02946 94.294382) (xy 166.302423 94.021895) (xy 166.450332 93.665692)
+ (xy 166.450668 93.280001) (xy 166.450668 95.449036) (xy 166.437577 95.462105) (xy 166.289668 95.818308) (xy 166.289332 96.203999)
+ (xy 166.365617 96.388625) (xy 166.182692 96.312668) (xy 165.797001 96.312332) (xy 165.44054 96.459618) (xy 165.167577 96.732105)
+ (xy 165.019668 97.088308) (xy 165.019332 97.473999) (xy 165.166618 97.83046) (xy 165.439105 98.103423) (xy 165.795308 98.251332)
+ (xy 166.180999 98.251668) (xy 166.416624 98.15431) (xy 166.416332 98.489999) (xy 166.563618 98.84646) (xy 166.836105 99.119423)
+ (xy 167.178434 99.261571) (xy 167.178332 99.378999) (xy 167.325618 99.73546) (xy 167.598105 100.008423) (xy 167.954308 100.156332)
+ (xy 168.339999 100.156668) (xy 168.352359 100.15156) (xy 168.215577 100.288105) (xy 168.067668 100.644308) (xy 168.067332 101.029999)
+ (xy 168.214618 101.38646) (xy 168.487105 101.659423) (xy 168.843308 101.807332) (xy 169.228999 101.807668) (xy 169.58546 101.660382)
+ (xy 169.858423 101.387895) (xy 170.006332 101.031692) (xy 170.006668 100.646001) (xy 170.006668 104.456001) (xy 169.859382 104.09954)
+ (xy 169.586895 103.826577) (xy 169.230692 103.678668) (xy 169.072968 103.67853) (xy 169.117332 103.571692) (xy 169.117668 103.186001)
+ (xy 168.970382 102.82954) (xy 168.697895 102.556577) (xy 168.341692 102.408668) (xy 168.310922 102.408641) (xy 168.355332 102.301692)
+ (xy 168.355668 101.916001) (xy 168.208382 101.55954) (xy 167.935895 101.286577) (xy 167.579692 101.138668) (xy 167.194001 101.138332)
+ (xy 166.83754 101.285618) (xy 166.564577 101.558105) (xy 166.416668 101.914308) (xy 166.416332 102.299999) (xy 166.563618 102.65646)
+ (xy 166.836105 102.929423) (xy 167.192308 103.077332) (xy 167.223077 103.077358) (xy 167.178668 103.184308) (xy 167.178332 103.569999)
+ (xy 167.325618 103.92646) (xy 167.598105 104.199423) (xy 167.954308 104.347332) (xy 168.112031 104.347469) (xy 168.067668 104.454308)
+ (xy 168.067332 104.839999) (xy 168.214618 105.19646) (xy 168.487105 105.469423) (xy 168.843308 105.617332) (xy 169.228999 105.617668)
+ (xy 169.58546 105.470382) (xy 169.858423 105.197895) (xy 170.006332 104.841692) (xy 170.006668 104.456001) (xy 170.006668 109.292479)
+ (xy 169.739577 109.559105) (xy 169.591668 109.915308) (xy 169.591332 110.300999) (xy 169.738618 110.65746) (xy 170.011105 110.930423)
+ (xy 170.367308 111.078332) (xy 170.752999 111.078668) (xy 171.10946 110.931382) (xy 171.382423 110.658895) (xy 171.530332 110.302692)
+ (xy 171.530668 109.917001) (xy 171.530668 110.435036) (xy 171.517577 110.448105) (xy 171.369668 110.804308) (xy 171.369332 111.189999)
+ (xy 171.414196 111.298578) (xy 171.131001 111.298332) (xy 170.77454 111.445618) (xy 170.501577 111.718105) (xy 170.353668 112.074308)
+ (xy 170.353332 112.459999) (xy 170.500618 112.81646) (xy 170.773105 113.089423) (xy 171.129308 113.237332) (xy 171.514999 113.237668)
+ (xy 171.87146 113.090382) (xy 172.144423 112.817895) (xy 172.292332 112.461692) (xy 172.292668 112.076001) (xy 172.247803 111.967421)
+ (xy 172.530999 111.967668) (xy 172.88746 111.820382) (xy 173.160423 111.547895) (xy 173.308332 111.191692) (xy 173.308668 110.806001)
+ (xy 173.308668 125.284001) (xy 173.161382 124.92754) (xy 172.888895 124.654577) (xy 172.532692 124.506668) (xy 172.147001 124.506332)
+ (xy 171.79054 124.653618) (xy 171.517577 124.926105) (xy 171.369668 125.282308) (xy 171.369332 125.667999) (xy 171.446892 125.855709)
+ (xy 171.28254 125.923618) (xy 171.009577 126.196105) (xy 170.861668 126.552308) (xy 170.861332 126.937999) (xy 171.008618 127.29446)
+ (xy 171.281105 127.567423) (xy 171.637308 127.715332) (xy 172.022999 127.715668) (xy 172.37946 127.568382) (xy 172.652423 127.295895)
+ (xy 172.800332 126.939692) (xy 172.800668 126.554001) (xy 172.723107 126.36629) (xy 172.88746 126.298382) (xy 173.160423 126.025895)
+ (xy 173.308332 125.669692) (xy 173.308668 125.284001) (xy 173.308668 133.523459) (xy 173.112698 133.523288) (xy 172.662848 133.709162)
+ (xy 172.318372 134.053038) (xy 172.131713 134.502563) (xy 172.131288 134.989302) (xy 172.317162 135.439152) (xy 172.661038 135.783628)
+ (xy 173.110563 135.970287) (xy 173.597302 135.970712) (xy 174.047152 135.784838) (xy 174.391628 135.440962) (xy 174.578287 134.991437)
+ (xy 174.578712 134.504698) (xy 174.578712 137.552698) (xy 174.392838 137.102848) (xy 174.048962 136.758372) (xy 173.599437 136.571713)
+ (xy 173.112698 136.571288) (xy 172.662848 136.757162) (xy 172.318372 137.101038) (xy 172.131713 137.550563) (xy 172.131288 138.037302)
+ (xy 172.317162 138.487152) (xy 172.661038 138.831628) (xy 173.110563 139.018287) (xy 173.597302 139.018712) (xy 174.047152 138.832838)
+ (xy 174.391628 138.488962) (xy 174.578287 138.039437) (xy 174.578712 137.552698) (xy 174.578712 142.378698) (xy 174.392838 141.928848)
+ (xy 174.048962 141.584372) (xy 173.599437 141.397713) (xy 173.112698 141.397288) (xy 172.662848 141.583162) (xy 172.318372 141.927038)
+ (xy 172.131713 142.376563) (xy 172.131288 142.863302) (xy 172.317162 143.313152) (xy 172.661038 143.657628) (xy 173.110563 143.844287)
+ (xy 173.597302 143.844712) (xy 174.047152 143.658838) (xy 174.391628 143.314962) (xy 174.578287 142.865437) (xy 174.578712 142.378698)
+ (xy 174.578712 154.3134) (xy 173.689668 154.3134) (xy 173.689668 152.843001) (xy 173.542382 152.48654) (xy 173.269895 152.213577)
+ (xy 172.913692 152.065668) (xy 172.528001 152.065332) (xy 172.17154 152.212618) (xy 172.085088 152.298919) (xy 172.038712 152.252461)
+ (xy 172.038712 142.378698) (xy 172.038712 137.552698) (xy 172.038712 134.504698) (xy 171.852838 134.054848) (xy 171.508962 133.710372)
+ (xy 171.059437 133.523713) (xy 170.572698 133.523288) (xy 170.122848 133.709162) (xy 169.778372 134.053038) (xy 169.591713 134.502563)
+ (xy 169.591288 134.989302) (xy 169.777162 135.439152) (xy 170.121038 135.783628) (xy 170.570563 135.970287) (xy 171.057302 135.970712)
+ (xy 171.507152 135.784838) (xy 171.851628 135.440962) (xy 172.038287 134.991437) (xy 172.038712 134.504698) (xy 172.038712 137.552698)
+ (xy 171.852838 137.102848) (xy 171.508962 136.758372) (xy 171.059437 136.571713) (xy 170.572698 136.571288) (xy 170.122848 136.757162)
+ (xy 169.778372 137.101038) (xy 169.591713 137.550563) (xy 169.591288 138.037302) (xy 169.777162 138.487152) (xy 170.121038 138.831628)
+ (xy 170.570563 139.018287) (xy 171.057302 139.018712) (xy 171.507152 138.832838) (xy 171.851628 138.488962) (xy 172.038287 138.039437)
+ (xy 172.038712 137.552698) (xy 172.038712 142.378698) (xy 171.852838 141.928848) (xy 171.508962 141.584372) (xy 171.059437 141.397713)
+ (xy 170.572698 141.397288) (xy 170.122848 141.583162) (xy 169.778372 141.927038) (xy 169.591713 142.376563) (xy 169.591288 142.863302)
+ (xy 169.777162 143.313152) (xy 170.121038 143.657628) (xy 170.570563 143.844287) (xy 171.057302 143.844712) (xy 171.507152 143.658838)
+ (xy 171.851628 143.314962) (xy 172.038287 142.865437) (xy 172.038712 142.378698) (xy 172.038712 152.252461) (xy 171.999895 152.213577)
+ (xy 171.643692 152.065668) (xy 171.258001 152.065332) (xy 170.90154 152.212618) (xy 170.628577 152.485105) (xy 170.480668 152.841308)
+ (xy 170.480332 153.226999) (xy 170.627618 153.58346) (xy 170.900105 153.856423) (xy 171.256308 154.004332) (xy 171.641999 154.004668)
+ (xy 171.99846 153.857382) (xy 172.084911 153.77108) (xy 172.170105 153.856423) (xy 172.526308 154.004332) (xy 172.911999 154.004668)
+ (xy 173.26846 153.857382) (xy 173.541423 153.584895) (xy 173.689332 153.228692) (xy 173.689668 152.843001) (xy 173.689668 154.3134)
+ (xy 173.609 154.3134) (xy 173.369211 154.361097) (xy 173.247092 154.442693) (xy 169.879668 154.461297) (xy 169.879668 152.843001)
+ (xy 169.879668 150.303001) (xy 169.732382 149.94654) (xy 169.498712 149.712461) (xy 169.498712 142.378698) (xy 169.498712 137.552698)
+ (xy 169.498712 134.504698) (xy 169.312838 134.054848) (xy 168.990668 133.732115) (xy 168.990668 114.362001) (xy 168.843382 114.00554)
+ (xy 168.570895 113.732577) (xy 168.482668 113.695941) (xy 168.482668 105.726001) (xy 168.335382 105.36954) (xy 168.062895 105.096577)
+ (xy 167.706692 104.948668) (xy 167.321001 104.948332) (xy 166.96454 105.095618) (xy 166.691577 105.368105) (xy 166.543668 105.724308)
+ (xy 166.543332 106.109999) (xy 166.690618 106.46646) (xy 166.963105 106.739423) (xy 167.319308 106.887332) (xy 167.704999 106.887668)
+ (xy 168.06146 106.740382) (xy 168.334423 106.467895) (xy 168.482332 106.111692) (xy 168.482668 105.726001) (xy 168.482668 113.695941)
+ (xy 168.214692 113.584668) (xy 167.829001 113.584332) (xy 167.47254 113.731618) (xy 167.466668 113.737479) (xy 167.466668 112.076001)
+ (xy 167.319382 111.71954) (xy 167.046895 111.446577) (xy 166.690692 111.298668) (xy 166.305001 111.298332) (xy 165.94854 111.445618)
+ (xy 165.675577 111.718105) (xy 165.527668 112.074308) (xy 165.527332 112.459999) (xy 165.674618 112.81646) (xy 165.947105 113.089423)
+ (xy 166.303308 113.237332) (xy 166.688999 113.237668) (xy 167.04546 113.090382) (xy 167.318423 112.817895) (xy 167.466332 112.461692)
+ (xy 167.466668 112.076001) (xy 167.466668 113.737479) (xy 167.199577 114.004105) (xy 167.051668 114.360308) (xy 167.051332 114.745999)
+ (xy 167.198618 115.10246) (xy 167.471105 115.375423) (xy 167.827308 115.523332) (xy 168.212999 115.523668) (xy 168.56946 115.376382)
+ (xy 168.842423 115.103895) (xy 168.990332 114.747692) (xy 168.990668 114.362001) (xy 168.990668 133.732115) (xy 168.968962 133.710372)
+ (xy 168.519437 133.523713) (xy 168.032698 133.523288) (xy 167.582848 133.709162) (xy 167.466668 133.825139) (xy 167.466668 126.554001)
+ (xy 167.319382 126.19754) (xy 167.046895 125.924577) (xy 166.690692 125.776668) (xy 166.577668 125.776569) (xy 166.577668 117.664001)
+ (xy 166.430382 117.30754) (xy 166.34408 117.221088) (xy 166.429423 117.135895) (xy 166.577332 116.779692) (xy 166.577668 116.394001)
+ (xy 166.430382 116.03754) (xy 166.157895 115.764577) (xy 165.801692 115.616668) (xy 165.416001 115.616332) (xy 165.05954 115.763618)
+ (xy 164.786577 116.036105) (xy 164.638668 116.392308) (xy 164.638332 116.777999) (xy 164.785618 117.13446) (xy 164.871919 117.220911)
+ (xy 164.786577 117.306105) (xy 164.638668 117.662308) (xy 164.638332 118.047999) (xy 164.785618 118.40446) (xy 165.058105 118.677423)
+ (xy 165.414308 118.825332) (xy 165.799999 118.825668) (xy 166.15646 118.678382) (xy 166.429423 118.405895) (xy 166.577332 118.049692)
+ (xy 166.577668 117.664001) (xy 166.577668 125.776569) (xy 166.305001 125.776332) (xy 166.273676 125.789274) (xy 166.323332 125.669692)
+ (xy 166.323668 125.284001) (xy 166.176382 124.92754) (xy 166.09008 124.841088) (xy 166.175423 124.755895) (xy 166.323332 124.399692)
+ (xy 166.323668 124.014001) (xy 166.176382 123.65754) (xy 166.09008 123.571088) (xy 166.175423 123.485895) (xy 166.323332 123.129692)
+ (xy 166.323668 122.744001) (xy 166.176382 122.38754) (xy 166.09008 122.301088) (xy 166.175423 122.215895) (xy 166.323332 121.859692)
+ (xy 166.323668 121.474001) (xy 166.176382 121.11754) (xy 166.09008 121.031088) (xy 166.175423 120.945895) (xy 166.323332 120.589692)
+ (xy 166.323668 120.204001) (xy 166.176382 119.84754) (xy 165.903895 119.574577) (xy 165.547692 119.426668) (xy 165.162001 119.426332)
+ (xy 164.80554 119.573618) (xy 164.532577 119.846105) (xy 164.384668 120.202308) (xy 164.384332 120.587999) (xy 164.531618 120.94446)
+ (xy 164.617919 121.030911) (xy 164.532577 121.116105) (xy 164.384668 121.472308) (xy 164.384332 121.857999) (xy 164.531618 122.21446)
+ (xy 164.617919 122.300911) (xy 164.532577 122.386105) (xy 164.384668 122.742308) (xy 164.384332 123.127999) (xy 164.531618 123.48446)
+ (xy 164.617919 123.570911) (xy 164.532577 123.656105) (xy 164.384668 124.012308) (xy 164.384332 124.397999) (xy 164.531618 124.75446)
+ (xy 164.617919 124.840911) (xy 164.532577 124.926105) (xy 164.384668 125.282308) (xy 164.384332 125.667999) (xy 164.531618 126.02446)
+ (xy 164.804105 126.297423) (xy 165.160308 126.445332) (xy 165.545999 126.445668) (xy 165.577323 126.432725) (xy 165.527668 126.552308)
+ (xy 165.527332 126.937999) (xy 165.674618 127.29446) (xy 165.947105 127.567423) (xy 166.303308 127.715332) (xy 166.688999 127.715668)
+ (xy 167.04546 127.568382) (xy 167.318423 127.295895) (xy 167.466332 126.939692) (xy 167.466668 126.554001) (xy 167.466668 133.825139)
+ (xy 167.238372 134.053038) (xy 167.147831 134.271083) (xy 167.065382 134.07154) (xy 166.792895 133.798577) (xy 166.436692 133.650668)
+ (xy 166.051001 133.650332) (xy 165.69454 133.797618) (xy 165.421577 134.070105) (xy 165.273668 134.426308) (xy 165.273332 134.811999)
+ (xy 165.420618 135.16846) (xy 165.693105 135.441423) (xy 166.049308 135.589332) (xy 166.434999 135.589668) (xy 166.79146 135.442382)
+ (xy 167.064423 135.169895) (xy 167.095241 135.095676) (xy 167.237162 135.439152) (xy 167.581038 135.783628) (xy 168.030563 135.970287)
+ (xy 168.517302 135.970712) (xy 168.967152 135.784838) (xy 169.311628 135.440962) (xy 169.498287 134.991437) (xy 169.498712 134.504698)
+ (xy 169.498712 137.552698) (xy 169.312838 137.102848) (xy 168.968962 136.758372) (xy 168.519437 136.571713) (xy 168.032698 136.571288)
+ (xy 167.582848 136.757162) (xy 167.238372 137.101038) (xy 167.051713 137.550563) (xy 167.051641 137.632077) (xy 166.944692 137.587668)
+ (xy 166.559001 137.587332) (xy 166.20254 137.734618) (xy 165.929577 138.007105) (xy 165.781668 138.363308) (xy 165.781332 138.748999)
+ (xy 165.928618 139.10546) (xy 166.201105 139.378423) (xy 166.557308 139.526332) (xy 166.942999 139.526668) (xy 167.29946 139.379382)
+ (xy 167.572423 139.106895) (xy 167.671181 138.869058) (xy 168.030563 139.018287) (xy 168.517302 139.018712) (xy 168.967152 138.832838)
+ (xy 169.311628 138.488962) (xy 169.498287 138.039437) (xy 169.498712 137.552698) (xy 169.498712 142.378698) (xy 169.312838 141.928848)
+ (xy 168.968962 141.584372) (xy 168.519437 141.397713) (xy 168.032698 141.397288) (xy 167.582848 141.583162) (xy 167.238372 141.927038)
+ (xy 167.051713 142.376563) (xy 167.051288 142.863302) (xy 167.237162 143.313152) (xy 167.581038 143.657628) (xy 168.030563 143.844287)
+ (xy 168.517302 143.844712) (xy 168.967152 143.658838) (xy 169.311628 143.314962) (xy 169.498287 142.865437) (xy 169.498712 142.378698)
+ (xy 169.498712 149.712461) (xy 169.459895 149.673577) (xy 169.103692 149.525668) (xy 168.718001 149.525332) (xy 168.36154 149.672618)
+ (xy 168.088577 149.945105) (xy 167.957359 150.26111) (xy 167.827382 149.94654) (xy 167.554895 149.673577) (xy 167.198692 149.525668)
+ (xy 166.813001 149.525332) (xy 166.45654 149.672618) (xy 166.183577 149.945105) (xy 166.052359 150.26111) (xy 165.922382 149.94654)
+ (xy 165.649895 149.673577) (xy 165.293692 149.525668) (xy 164.908001 149.525332) (xy 164.55154 149.672618) (xy 164.278577 149.945105)
+ (xy 164.147359 150.26111) (xy 164.017382 149.94654) (xy 163.910668 149.839639) (xy 163.910668 118.934001) (xy 163.763382 118.57754)
+ (xy 163.656668 118.470639) (xy 163.656668 96.074001) (xy 163.509382 95.71754) (xy 163.402668 95.610639) (xy 163.402668 88.200001)
+ (xy 163.255382 87.84354) (xy 163.16908 87.757088) (xy 163.254423 87.671895) (xy 163.402332 87.315692) (xy 163.402668 86.930001)
+ (xy 163.255382 86.57354) (xy 162.982895 86.300577) (xy 162.626692 86.152668) (xy 162.241001 86.152332) (xy 162.005668 86.249569)
+ (xy 162.005668 75.246001) (xy 161.858382 74.88954) (xy 161.751668 74.782639) (xy 161.751668 67.880001) (xy 161.604382 67.52354)
+ (xy 161.331895 67.250577) (xy 160.975692 67.102668) (xy 160.590001 67.102332) (xy 160.23354 67.249618) (xy 159.960577 67.522105)
+ (xy 159.812668 67.878308) (xy 159.812332 68.263999) (xy 159.959618 68.62046) (xy 160.232105 68.893423) (xy 160.588308 69.041332)
+ (xy 160.973999 69.041668) (xy 161.33046 68.894382) (xy 161.603423 68.621895) (xy 161.751332 68.265692) (xy 161.751668 67.880001)
+ (xy 161.751668 74.782639) (xy 161.585895 74.616577) (xy 161.229692 74.468668) (xy 160.844001 74.468332) (xy 160.48754 74.615618)
+ (xy 160.227668 74.875036) (xy 160.227668 71.309001) (xy 160.080382 70.95254) (xy 159.807895 70.679577) (xy 159.451692 70.531668)
+ (xy 159.066001 70.531332) (xy 158.957668 70.576094) (xy 158.957668 68.134001) (xy 158.810382 67.77754) (xy 158.537895 67.504577)
+ (xy 158.181692 67.356668) (xy 157.796001 67.356332) (xy 157.43954 67.503618) (xy 157.416699 67.526419) (xy 157.394895 67.504577)
+ (xy 157.038692 67.356668) (xy 156.653001 67.356332) (xy 156.29654 67.503618) (xy 156.023577 67.776105) (xy 155.875668 68.132308)
+ (xy 155.875332 68.517999) (xy 156.022618 68.87446) (xy 156.295105 69.147423) (xy 156.651308 69.295332) (xy 157.036999 69.295668)
+ (xy 157.39346 69.148382) (xy 157.4163 69.12558) (xy 157.438105 69.147423) (xy 157.794308 69.295332) (xy 158.179999 69.295668)
+ (xy 158.53646 69.148382) (xy 158.809423 68.875895) (xy 158.957332 68.519692) (xy 158.957668 68.134001) (xy 158.957668 70.576094)
+ (xy 158.70954 70.678618) (xy 158.436577 70.951105) (xy 158.288668 71.307308) (xy 158.288332 71.692999) (xy 158.435618 72.04946)
+ (xy 158.708105 72.322423) (xy 159.064308 72.470332) (xy 159.449999 72.470668) (xy 159.80646 72.323382) (xy 160.079423 72.050895)
+ (xy 160.227332 71.694692) (xy 160.227668 71.309001) (xy 160.227668 74.875036) (xy 160.214577 74.888105) (xy 160.066668 75.244308)
+ (xy 160.066332 75.629999) (xy 160.213618 75.98646) (xy 160.486105 76.259423) (xy 160.842308 76.407332) (xy 161.227999 76.407668)
+ (xy 161.58446 76.260382) (xy 161.857423 75.987895) (xy 162.005332 75.631692) (xy 162.005668 75.246001) (xy 162.005668 86.249569)
+ (xy 161.88454 86.299618) (xy 161.611577 86.572105) (xy 161.463668 86.928308) (xy 161.463332 87.313999) (xy 161.610618 87.67046)
+ (xy 161.696919 87.756911) (xy 161.611577 87.842105) (xy 161.463668 88.198308) (xy 161.463332 88.583999) (xy 161.610618 88.94046)
+ (xy 161.883105 89.213423) (xy 162.239308 89.361332) (xy 162.624999 89.361668) (xy 162.98146 89.214382) (xy 163.254423 88.941895)
+ (xy 163.402332 88.585692) (xy 163.402668 88.200001) (xy 163.402668 95.610639) (xy 163.236895 95.444577) (xy 162.894455 95.302382)
+ (xy 162.894668 95.058001) (xy 162.747382 94.70154) (xy 162.474895 94.428577) (xy 162.312191 94.361016) (xy 162.47346 94.294382)
+ (xy 162.746423 94.021895) (xy 162.894332 93.665692) (xy 162.894668 93.280001) (xy 162.747382 92.92354) (xy 162.66108 92.837088)
+ (xy 162.746423 92.751895) (xy 162.894332 92.395692) (xy 162.894668 92.010001) (xy 162.747382 91.65354) (xy 162.474895 91.380577)
+ (xy 162.118692 91.232668) (xy 161.733001 91.232332) (xy 161.37654 91.379618) (xy 161.103577 91.652105) (xy 160.989668 91.926427)
+ (xy 160.989668 86.930001) (xy 160.842382 86.57354) (xy 160.569895 86.300577) (xy 160.213692 86.152668) (xy 159.828001 86.152332)
+ (xy 159.47154 86.299618) (xy 159.198577 86.572105) (xy 159.050668 86.928308) (xy 159.050332 87.313999) (xy 159.197618 87.67046)
+ (xy 159.470105 87.943423) (xy 159.826308 88.091332) (xy 160.211999 88.091668) (xy 160.56846 87.944382) (xy 160.841423 87.671895)
+ (xy 160.989332 87.315692) (xy 160.989668 86.930001) (xy 160.989668 91.926427) (xy 160.955668 92.008308) (xy 160.955332 92.393999)
+ (xy 161.102618 92.75046) (xy 161.188919 92.836911) (xy 161.103577 92.922105) (xy 160.955668 93.278308) (xy 160.955332 93.663999)
+ (xy 161.102618 94.02046) (xy 161.375105 94.293423) (xy 161.537808 94.360983) (xy 161.37654 94.427618) (xy 161.103577 94.700105)
+ (xy 160.955668 95.056308) (xy 160.955332 95.441999) (xy 161.102618 95.79846) (xy 161.375105 96.071423) (xy 161.717544 96.213617)
+ (xy 161.717332 96.457999) (xy 161.864618 96.81446) (xy 162.137105 97.087423) (xy 162.493308 97.235332) (xy 162.878999 97.235668)
+ (xy 163.23546 97.088382) (xy 163.508423 96.815895) (xy 163.656332 96.459692) (xy 163.656668 96.074001) (xy 163.656668 118.470639)
+ (xy 163.490895 118.304577) (xy 163.134692 118.156668) (xy 162.749001 118.156332) (xy 162.39254 118.303618) (xy 162.165075 118.530685)
+ (xy 162.259332 118.303692) (xy 162.259668 117.918001) (xy 162.112382 117.56154) (xy 161.839895 117.288577) (xy 161.624668 117.199206)
+ (xy 161.624668 106.869001) (xy 161.477382 106.51254) (xy 161.204895 106.239577) (xy 160.989668 106.150206) (xy 160.989668 99.249001)
+ (xy 160.842382 98.89254) (xy 160.735668 98.785639) (xy 160.735668 92.772001) (xy 160.588382 92.41554) (xy 160.315895 92.142577)
+ (xy 159.959692 91.994668) (xy 159.574001 91.994332) (xy 159.21754 92.141618) (xy 158.944577 92.414105) (xy 158.796668 92.770308)
+ (xy 158.796332 93.155999) (xy 158.943618 93.51246) (xy 159.216105 93.785423) (xy 159.572308 93.933332) (xy 159.957999 93.933668)
+ (xy 160.31446 93.786382) (xy 160.587423 93.513895) (xy 160.735332 93.157692) (xy 160.735668 92.772001) (xy 160.735668 98.785639)
+ (xy 160.569895 98.619577) (xy 160.213692 98.471668) (xy 159.828001 98.471332) (xy 159.47154 98.618618) (xy 159.198577 98.891105)
+ (xy 159.050668 99.247308) (xy 159.050332 99.632999) (xy 159.154194 99.884366) (xy 158.83654 100.015618) (xy 158.563577 100.288105)
+ (xy 158.415668 100.644308) (xy 158.415332 101.029999) (xy 158.562618 101.38646) (xy 158.835105 101.659423) (xy 159.191308 101.807332)
+ (xy 159.576999 101.807668) (xy 159.93346 101.660382) (xy 160.206423 101.387895) (xy 160.354332 101.031692) (xy 160.354668 100.646001)
+ (xy 160.250805 100.394633) (xy 160.56846 100.263382) (xy 160.841423 99.990895) (xy 160.989332 99.634692) (xy 160.989668 99.249001)
+ (xy 160.989668 106.150206) (xy 160.848692 106.091668) (xy 160.463001 106.091332) (xy 160.10654 106.238618) (xy 159.973668 106.371258)
+ (xy 159.973668 103.186001) (xy 159.826382 102.82954) (xy 159.553895 102.556577) (xy 159.197692 102.408668) (xy 158.812001 102.408332)
+ (xy 158.45554 102.555618) (xy 158.182577 102.828105) (xy 158.034668 103.184308) (xy 158.034332 103.569999) (xy 158.07915 103.678468)
+ (xy 157.923001 103.678332) (xy 157.56654 103.825618) (xy 157.293577 104.098105) (xy 157.252318 104.197465) (xy 157.159382 103.97254)
+ (xy 156.886895 103.699577) (xy 156.829406 103.675705) (xy 156.925332 103.444692) (xy 156.925668 103.059001) (xy 156.778382 102.70254)
+ (xy 156.505895 102.429577) (xy 156.417668 102.392941) (xy 156.417668 71.309001) (xy 156.270382 70.95254) (xy 155.997895 70.679577)
+ (xy 155.641692 70.531668) (xy 155.256001 70.531332) (xy 154.89954 70.678618) (xy 154.626577 70.951105) (xy 154.478668 71.307308)
+ (xy 154.478563 71.42671) (xy 154.13754 71.567618) (xy 153.864577 71.840105) (xy 153.716668 72.196308) (xy 153.716332 72.581999)
+ (xy 153.863618 72.93846) (xy 154.136105 73.211423) (xy 154.492308 73.359332) (xy 154.877999 73.359668) (xy 155.23446 73.212382)
+ (xy 155.507423 72.939895) (xy 155.655332 72.583692) (xy 155.655436 72.464289) (xy 155.99646 72.323382) (xy 156.269423 72.050895)
+ (xy 156.417332 71.694692) (xy 156.417668 71.309001) (xy 156.417668 102.392941) (xy 156.149692 102.281668) (xy 156.036668 102.281569)
+ (xy 156.036668 98.715601) (xy 156.036668 94.042001) (xy 156.036668 81.215001) (xy 155.889382 80.85854) (xy 155.616895 80.585577)
+ (xy 155.260692 80.437668) (xy 154.875001 80.437332) (xy 154.51854 80.584618) (xy 154.245577 80.857105) (xy 154.097668 81.213308)
+ (xy 154.097332 81.598999) (xy 154.244618 81.95546) (xy 154.517105 82.228423) (xy 154.873308 82.376332) (xy 155.258999 82.376668)
+ (xy 155.61546 82.229382) (xy 155.888423 81.956895) (xy 156.036332 81.600692) (xy 156.036668 81.215001) (xy 156.036668 94.042001)
+ (xy 155.889382 93.68554) (xy 155.782668 93.578639) (xy 155.782668 87.946001) (xy 155.635382 87.58954) (xy 155.362895 87.316577)
+ (xy 155.006692 87.168668) (xy 154.621001 87.168332) (xy 154.26454 87.315618) (xy 154.258668 87.321479) (xy 154.258668 82.104001)
+ (xy 154.111382 81.74754) (xy 154.004668 81.640639) (xy 154.004668 75.500001) (xy 153.857382 75.14354) (xy 153.584895 74.870577)
+ (xy 153.228692 74.722668) (xy 152.861668 74.722348) (xy 152.861668 67.753001) (xy 152.714382 67.39654) (xy 152.441895 67.123577)
+ (xy 152.085692 66.975668) (xy 151.700001 66.975332) (xy 151.34354 67.122618) (xy 151.070577 67.395105) (xy 150.922668 67.751308)
+ (xy 150.922332 68.136999) (xy 151.069618 68.49346) (xy 151.342105 68.766423) (xy 151.698308 68.914332) (xy 152.083999 68.914668)
+ (xy 152.44046 68.767382) (xy 152.713423 68.494895) (xy 152.861332 68.138692) (xy 152.861668 67.753001) (xy 152.861668 74.722348)
+ (xy 152.843001 74.722332) (xy 152.48654 74.869618) (xy 152.213577 75.142105) (xy 152.065668 75.498308) (xy 152.065332 75.883999)
+ (xy 152.212618 76.24046) (xy 152.485105 76.513423) (xy 152.841308 76.661332) (xy 153.226999 76.661668) (xy 153.58346 76.514382)
+ (xy 153.856423 76.241895) (xy 154.004332 75.885692) (xy 154.004668 75.500001) (xy 154.004668 81.640639) (xy 153.838895 81.474577)
+ (xy 153.482692 81.326668) (xy 153.097001 81.326332) (xy 152.74054 81.473618) (xy 152.467577 81.746105) (xy 152.319668 82.102308)
+ (xy 152.319332 82.487999) (xy 152.466618 82.84446) (xy 152.739105 83.117423) (xy 153.095308 83.265332) (xy 153.480999 83.265668)
+ (xy 153.83746 83.118382) (xy 154.110423 82.845895) (xy 154.258332 82.489692) (xy 154.258668 82.104001) (xy 154.258668 87.321479)
+ (xy 153.991577 87.588105) (xy 153.843668 87.944308) (xy 153.843332 88.329999) (xy 153.990618 88.68646) (xy 154.263105 88.959423)
+ (xy 154.619308 89.107332) (xy 155.004999 89.107668) (xy 155.36146 88.960382) (xy 155.634423 88.687895) (xy 155.782332 88.331692)
+ (xy 155.782668 87.946001) (xy 155.782668 93.578639) (xy 155.616895 93.412577) (xy 155.260692 93.264668) (xy 154.875001 93.264332)
+ (xy 154.51854 93.411618) (xy 154.245577 93.684105) (xy 154.097668 94.040308) (xy 154.097332 94.425999) (xy 154.244618 94.78246)
+ (xy 154.517105 95.055423) (xy 154.873308 95.203332) (xy 155.258999 95.203668) (xy 155.61546 95.056382) (xy 155.888423 94.783895)
+ (xy 156.036332 94.427692) (xy 156.036668 94.042001) (xy 156.036668 98.715601) (xy 155.889382 98.35914) (xy 155.616895 98.086177)
+ (xy 155.260692 97.938268) (xy 154.875001 97.937932) (xy 154.51854 98.085218) (xy 154.245577 98.357705) (xy 154.097668 98.713908)
+ (xy 154.097332 99.099599) (xy 154.183856 99.309005) (xy 154.01054 99.380618) (xy 153.737577 99.653105) (xy 153.589668 100.009308)
+ (xy 153.589332 100.394999) (xy 153.736618 100.75146) (xy 154.009105 101.024423) (xy 154.365308 101.172332) (xy 154.750999 101.172668)
+ (xy 155.10746 101.025382) (xy 155.380423 100.752895) (xy 155.528332 100.396692) (xy 155.528668 100.011001) (xy 155.442143 99.801594)
+ (xy 155.61546 99.729982) (xy 155.888423 99.457495) (xy 156.036332 99.101292) (xy 156.036668 98.715601) (xy 156.036668 102.281569)
+ (xy 155.764001 102.281332) (xy 155.40754 102.428618) (xy 155.134577 102.701105) (xy 154.986668 103.057308) (xy 154.986332 103.442999)
+ (xy 155.133618 103.79946) (xy 155.406105 104.072423) (xy 155.463593 104.096294) (xy 155.367668 104.327308) (xy 155.367332 104.712999)
+ (xy 155.514618 105.06946) (xy 155.787105 105.342423) (xy 156.143308 105.490332) (xy 156.528999 105.490668) (xy 156.88546 105.343382)
+ (xy 157.158423 105.070895) (xy 157.199681 104.971534) (xy 157.292618 105.19646) (xy 157.565105 105.469423) (xy 157.921308 105.617332)
+ (xy 158.306999 105.617668) (xy 158.66346 105.470382) (xy 158.936423 105.197895) (xy 159.084332 104.841692) (xy 159.084668 104.456001)
+ (xy 159.039849 104.347531) (xy 159.195999 104.347668) (xy 159.55246 104.200382) (xy 159.825423 103.927895) (xy 159.973332 103.571692)
+ (xy 159.973668 103.186001) (xy 159.973668 106.371258) (xy 159.833577 106.511105) (xy 159.685668 106.867308) (xy 159.685332 107.252999)
+ (xy 159.832618 107.60946) (xy 160.105105 107.882423) (xy 160.461308 108.030332) (xy 160.846999 108.030668) (xy 161.20346 107.883382)
+ (xy 161.476423 107.610895) (xy 161.624332 107.254692) (xy 161.624668 106.869001) (xy 161.624668 117.199206) (xy 161.483692 117.140668)
+ (xy 161.098001 117.140332) (xy 160.74154 117.287618) (xy 160.468577 117.560105) (xy 160.320668 117.916308) (xy 160.320332 118.301999)
+ (xy 160.467618 118.65846) (xy 160.740105 118.931423) (xy 161.096308 119.079332) (xy 161.481999 119.079668) (xy 161.83846 118.932382)
+ (xy 162.065924 118.705314) (xy 161.971668 118.932308) (xy 161.971332 119.317999) (xy 162.118618 119.67446) (xy 162.391105 119.947423)
+ (xy 162.747308 120.095332) (xy 163.132999 120.095668) (xy 163.48946 119.948382) (xy 163.762423 119.675895) (xy 163.910332 119.319692)
+ (xy 163.910668 118.934001) (xy 163.910668 149.839639) (xy 163.744895 149.673577) (xy 163.388692 149.525668) (xy 163.021668 149.525348)
+ (xy 163.021668 147.128001) (xy 162.874382 146.77154) (xy 162.601895 146.498577) (xy 162.245692 146.350668) (xy 161.860001 146.350332)
+ (xy 161.50354 146.497618) (xy 161.230577 146.770105) (xy 161.116746 147.044239) (xy 160.975692 146.985668) (xy 160.590001 146.985332)
+ (xy 160.23354 147.132618) (xy 160.100668 147.265258) (xy 160.100668 130.237001) (xy 159.953382 129.88054) (xy 159.680895 129.607577)
+ (xy 159.324692 129.459668) (xy 158.939001 129.459332) (xy 158.58254 129.606618) (xy 158.309577 129.879105) (xy 158.161668 130.235308)
+ (xy 158.161332 130.620999) (xy 158.308618 130.97746) (xy 158.581105 131.250423) (xy 158.937308 131.398332) (xy 159.322999 131.398668)
+ (xy 159.67946 131.251382) (xy 159.952423 130.978895) (xy 160.100332 130.622692) (xy 160.100668 130.237001) (xy 160.100668 147.265258)
+ (xy 159.960577 147.405105) (xy 159.812668 147.761308) (xy 159.812332 148.146999) (xy 159.959618 148.50346) (xy 160.232105 148.776423)
+ (xy 160.588308 148.924332) (xy 160.973999 148.924668) (xy 161.33046 148.777382) (xy 161.603423 148.504895) (xy 161.717253 148.23076)
+ (xy 161.858308 148.289332) (xy 162.243999 148.289668) (xy 162.60046 148.142382) (xy 162.873423 147.869895) (xy 163.021332 147.513692)
+ (xy 163.021668 147.128001) (xy 163.021668 149.525348) (xy 163.003001 149.525332) (xy 162.64654 149.672618) (xy 162.373577 149.945105)
+ (xy 162.242359 150.26111) (xy 162.112382 149.94654) (xy 161.839895 149.673577) (xy 161.483692 149.525668) (xy 161.098001 149.525332)
+ (xy 160.74154 149.672618) (xy 160.468577 149.945105) (xy 160.320668 150.301308) (xy 160.320332 150.686999) (xy 160.467618 151.04346)
+ (xy 160.553919 151.129911) (xy 160.468577 151.215105) (xy 160.320668 151.571308) (xy 160.320332 151.956999) (xy 160.467618 152.31346)
+ (xy 160.740105 152.586423) (xy 161.096308 152.734332) (xy 161.481999 152.734668) (xy 161.83846 152.587382) (xy 162.111423 152.314895)
+ (xy 162.24264 151.998889) (xy 162.372618 152.31346) (xy 162.645105 152.586423) (xy 163.001308 152.734332) (xy 163.386999 152.734668)
+ (xy 163.74346 152.587382) (xy 164.016423 152.314895) (xy 164.164332 151.958692) (xy 164.164668 151.573001) (xy 164.017382 151.21654)
+ (xy 163.93108 151.130088) (xy 164.016423 151.044895) (xy 164.14764 150.728889) (xy 164.277618 151.04346) (xy 164.550105 151.316423)
+ (xy 164.906308 151.464332) (xy 165.291999 151.464668) (xy 165.64846 151.317382) (xy 165.921423 151.044895) (xy 166.05264 150.728889)
+ (xy 166.182618 151.04346) (xy 166.455105 151.316423) (xy 166.811308 151.464332) (xy 167.196999 151.464668) (xy 167.55346 151.317382)
+ (xy 167.826423 151.044895) (xy 167.95764 150.728889) (xy 168.087618 151.04346) (xy 168.360105 151.316423) (xy 168.716308 151.464332)
+ (xy 169.101999 151.464668) (xy 169.45846 151.317382) (xy 169.731423 151.044895) (xy 169.879332 150.688692) (xy 169.879668 150.303001)
+ (xy 169.879668 152.843001) (xy 169.732382 152.48654) (xy 169.459895 152.213577) (xy 169.103692 152.065668) (xy 168.718001 152.065332)
+ (xy 168.36154 152.212618) (xy 168.088577 152.485105) (xy 167.940668 152.841308) (xy 167.940332 153.226999) (xy 168.087618 153.58346)
+ (xy 168.360105 153.856423) (xy 168.716308 154.004332) (xy 169.101999 154.004668) (xy 169.45846 153.857382) (xy 169.731423 153.584895)
+ (xy 169.879332 153.228692) (xy 169.879668 152.843001) (xy 169.879668 154.461297) (xy 159.719668 154.51743) (xy 159.719668 148.144001)
+ (xy 159.572382 147.78754) (xy 159.299895 147.514577) (xy 158.943692 147.366668) (xy 158.558001 147.366332) (xy 158.415113 147.425371)
+ (xy 158.302382 147.15254) (xy 158.029895 146.879577) (xy 157.673692 146.731668) (xy 157.288001 146.731332) (xy 157.179668 146.776094)
+ (xy 157.179668 114.108001) (xy 157.052668 113.800636) (xy 157.052668 110.806001) (xy 156.905382 110.44954) (xy 156.81908 110.363088)
+ (xy 156.904423 110.277895) (xy 157.052332 109.921692) (xy 157.052668 109.536001) (xy 156.905382 109.17954) (xy 156.81908 109.093088)
+ (xy 156.904423 109.007895) (xy 157.052332 108.651692) (xy 157.052668 108.266001) (xy 156.905382 107.90954) (xy 156.81908 107.823088)
+ (xy 156.904423 107.737895) (xy 157.052332 107.381692) (xy 157.052668 106.996001) (xy 156.905382 106.63954) (xy 156.632895 106.366577)
+ (xy 156.276692 106.218668) (xy 155.891001 106.218332) (xy 155.53454 106.365618) (xy 155.261577 106.638105) (xy 155.113668 106.994308)
+ (xy 155.113332 107.379999) (xy 155.260618 107.73646) (xy 155.346919 107.822911) (xy 155.261577 107.908105) (xy 155.113668 108.264308)
+ (xy 155.113332 108.649999) (xy 155.260618 109.00646) (xy 155.346919 109.092911) (xy 155.261577 109.178105) (xy 155.113668 109.534308)
+ (xy 155.113332 109.919999) (xy 155.260618 110.27646) (xy 155.346919 110.362911) (xy 155.261577 110.448105) (xy 155.113668 110.804308)
+ (xy 155.113332 111.189999) (xy 155.260618 111.54646) (xy 155.533105 111.819423) (xy 155.889308 111.967332) (xy 156.274999 111.967668)
+ (xy 156.63146 111.820382) (xy 156.904423 111.547895) (xy 157.052332 111.191692) (xy 157.052668 110.806001) (xy 157.052668 113.800636)
+ (xy 157.032382 113.75154) (xy 156.759895 113.478577) (xy 156.403692 113.330668) (xy 156.018001 113.330332) (xy 155.66154 113.477618)
+ (xy 155.388577 113.750105) (xy 155.240668 114.106308) (xy 155.240332 114.491999) (xy 155.387618 114.84846) (xy 155.660105 115.121423)
+ (xy 156.016308 115.269332) (xy 156.401999 115.269668) (xy 156.75846 115.122382) (xy 157.031423 114.849895) (xy 157.179332 114.493692)
+ (xy 157.179668 114.108001) (xy 157.179668 146.776094) (xy 156.93154 146.878618) (xy 156.658577 147.151105) (xy 156.510668 147.507308)
+ (xy 156.510374 147.844701) (xy 156.276692 147.747668) (xy 155.909668 147.747348) (xy 155.909668 139.254001) (xy 155.782668 138.946636)
+ (xy 155.782668 136.714001) (xy 155.635382 136.35754) (xy 155.362895 136.084577) (xy 155.274363 136.047815) (xy 155.274668 135.698001)
+ (xy 155.127382 135.34154) (xy 155.04108 135.255088) (xy 155.126423 135.169895) (xy 155.274332 134.813692) (xy 155.274668 134.428001)
+ (xy 155.274668 131.888001) (xy 155.274668 129.348001) (xy 155.274668 122.744001) (xy 155.127382 122.38754) (xy 154.854895 122.114577)
+ (xy 154.689083 122.045725) (xy 154.766332 121.859692) (xy 154.766668 121.474001) (xy 154.619382 121.11754) (xy 154.486732 120.984659)
+ (xy 154.496999 120.984668) (xy 154.85346 120.837382) (xy 155.126423 120.564895) (xy 155.274332 120.208692) (xy 155.274668 119.823001)
+ (xy 155.127382 119.46654) (xy 154.854895 119.193577) (xy 154.498692 119.045668) (xy 154.113001 119.045332) (xy 153.75654 119.192618)
+ (xy 153.670088 119.278919) (xy 153.584895 119.193577) (xy 153.228692 119.045668) (xy 152.861668 119.045348) (xy 152.861668 117.537001)
+ (xy 152.714382 117.18054) (xy 152.441895 116.907577) (xy 152.226668 116.818206) (xy 152.226668 77.278001) (xy 152.079382 76.92154)
+ (xy 151.806895 76.648577) (xy 151.450692 76.500668) (xy 151.065001 76.500332) (xy 150.70854 76.647618) (xy 150.435577 76.920105)
+ (xy 150.287668 77.276308) (xy 150.287332 77.661999) (xy 150.434618 78.01846) (xy 150.707105 78.291423) (xy 151.063308 78.439332)
+ (xy 151.448999 78.439668) (xy 151.80546 78.292382) (xy 152.078423 78.019895) (xy 152.226332 77.663692) (xy 152.226668 77.278001)
+ (xy 152.226668 116.818206) (xy 152.085692 116.759668) (xy 151.700001 116.759332) (xy 151.34354 116.906618) (xy 151.070577 117.179105)
+ (xy 150.922668 117.535308) (xy 150.922332 117.920999) (xy 151.069618 118.27746) (xy 151.342105 118.550423) (xy 151.698308 118.698332)
+ (xy 152.083999 118.698668) (xy 152.44046 118.551382) (xy 152.713423 118.278895) (xy 152.861332 117.922692) (xy 152.861668 117.537001)
+ (xy 152.861668 119.045348) (xy 152.843001 119.045332) (xy 152.48654 119.192618) (xy 152.400088 119.278919) (xy 152.314895 119.193577)
+ (xy 151.958692 119.045668) (xy 151.573001 119.045332) (xy 151.21654 119.192618) (xy 151.130088 119.278919) (xy 151.044895 119.193577)
+ (xy 150.688692 119.045668) (xy 150.303001 119.045332) (xy 149.94654 119.192618) (xy 149.860088 119.278919) (xy 149.774895 119.193577)
+ (xy 149.418692 119.045668) (xy 149.033001 119.045332) (xy 148.924668 119.090094) (xy 148.924668 116.140001) (xy 148.777382 115.78354)
+ (xy 148.504895 115.510577) (xy 148.289668 115.421206) (xy 148.289668 98.233001) (xy 148.142382 97.87654) (xy 147.869895 97.603577)
+ (xy 147.553889 97.472359) (xy 147.86846 97.342382) (xy 148.141423 97.069895) (xy 148.289332 96.713692) (xy 148.289668 96.328001)
+ (xy 148.142382 95.97154) (xy 148.05608 95.885088) (xy 148.141423 95.799895) (xy 148.289332 95.443692) (xy 148.289668 95.058001)
+ (xy 148.142382 94.70154) (xy 148.05608 94.615088) (xy 148.141423 94.529895) (xy 148.289332 94.173692) (xy 148.289668 93.788001)
+ (xy 148.142382 93.43154) (xy 148.05608 93.345088) (xy 148.141423 93.259895) (xy 148.289332 92.903692) (xy 148.289668 92.518001)
+ (xy 148.142382 92.16154) (xy 148.05608 92.075088) (xy 148.141423 91.989895) (xy 148.289332 91.633692) (xy 148.289668 91.248001)
+ (xy 148.142382 90.89154) (xy 148.05608 90.805088) (xy 148.141423 90.719895) (xy 148.289332 90.363692) (xy 148.289668 89.978001)
+ (xy 148.142382 89.62154) (xy 148.05608 89.535088) (xy 148.141423 89.449895) (xy 148.289332 89.093692) (xy 148.289668 88.708001)
+ (xy 148.142382 88.35154) (xy 148.05608 88.265088) (xy 148.141423 88.179895) (xy 148.289332 87.823692) (xy 148.289668 87.438001)
+ (xy 148.142382 87.08154) (xy 147.869895 86.808577) (xy 147.781668 86.771941) (xy 147.781668 62.673001) (xy 147.634382 62.31654)
+ (xy 147.361895 62.043577) (xy 147.005692 61.895668) (xy 146.620001 61.895332) (xy 146.26354 62.042618) (xy 145.990577 62.315105)
+ (xy 145.842668 62.671308) (xy 145.842332 63.056999) (xy 145.989618 63.41346) (xy 146.262105 63.686423) (xy 146.618308 63.834332)
+ (xy 147.003999 63.834668) (xy 147.36046 63.687382) (xy 147.633423 63.414895) (xy 147.781332 63.058692) (xy 147.781668 62.673001)
+ (xy 147.781668 86.771941) (xy 147.513692 86.660668) (xy 147.128001 86.660332) (xy 147.019668 86.705094) (xy 147.019668 67.880001)
+ (xy 146.872382 67.52354) (xy 146.599895 67.250577) (xy 146.243692 67.102668) (xy 145.858001 67.102332) (xy 145.50154 67.249618)
+ (xy 145.228577 67.522105) (xy 145.080668 67.878308) (xy 145.080332 68.263999) (xy 145.227618 68.62046) (xy 145.500105 68.893423)
+ (xy 145.856308 69.041332) (xy 146.241999 69.041668) (xy 146.59846 68.894382) (xy 146.871423 68.621895) (xy 147.019332 68.265692)
+ (xy 147.019668 67.880001) (xy 147.019668 86.705094) (xy 146.77154 86.807618) (xy 146.498577 87.080105) (xy 146.350668 87.436308)
+ (xy 146.350332 87.821999) (xy 146.497618 88.17846) (xy 146.583919 88.264911) (xy 146.498577 88.350105) (xy 146.350668 88.706308)
+ (xy 146.350332 89.091999) (xy 146.497618 89.44846) (xy 146.583919 89.534911) (xy 146.498577 89.620105) (xy 146.350668 89.976308)
+ (xy 146.350332 90.361999) (xy 146.497618 90.71846) (xy 146.583919 90.804911) (xy 146.498577 90.890105) (xy 146.350668 91.246308)
+ (xy 146.350332 91.631999) (xy 146.497618 91.98846) (xy 146.583919 92.074911) (xy 146.498577 92.160105) (xy 146.350668 92.516308)
+ (xy 146.350332 92.901999) (xy 146.497618 93.25846) (xy 146.583919 93.344911) (xy 146.498577 93.430105) (xy 146.350668 93.786308)
+ (xy 146.350332 94.171999) (xy 146.497618 94.52846) (xy 146.583919 94.614911) (xy 146.498577 94.700105) (xy 146.350668 95.056308)
+ (xy 146.350332 95.441999) (xy 146.497618 95.79846) (xy 146.583919 95.884911) (xy 146.498577 95.970105) (xy 146.350668 96.326308)
+ (xy 146.350332 96.711999) (xy 146.426617 96.896625) (xy 146.243692 96.820668) (xy 145.858001 96.820332) (xy 145.50154 96.967618)
+ (xy 145.415088 97.053919) (xy 145.329895 96.968577) (xy 144.973692 96.820668) (xy 144.588001 96.820332) (xy 144.23154 96.967618)
+ (xy 144.145088 97.053919) (xy 144.059895 96.968577) (xy 143.703692 96.820668) (xy 143.463668 96.820458) (xy 143.463668 74.611001)
+ (xy 143.316382 74.25454) (xy 143.043895 73.981577) (xy 142.687692 73.833668) (xy 142.302001 73.833332) (xy 141.94554 73.980618)
+ (xy 141.672577 74.253105) (xy 141.524668 74.609308) (xy 141.524332 74.994999) (xy 141.671618 75.35146) (xy 141.944105 75.624423)
+ (xy 142.300308 75.772332) (xy 142.685999 75.772668) (xy 143.04246 75.625382) (xy 143.315423 75.352895) (xy 143.463332 74.996692)
+ (xy 143.463668 74.611001) (xy 143.463668 96.820458) (xy 143.318001 96.820332) (xy 142.96154 96.967618) (xy 142.875088 97.053919)
+ (xy 142.789895 96.968577) (xy 142.701668 96.931941) (xy 142.701668 85.533001) (xy 142.554382 85.17654) (xy 142.281895 84.903577)
+ (xy 141.925692 84.755668) (xy 141.540001 84.755332) (xy 141.18354 84.902618) (xy 140.952741 85.133014) (xy 140.655692 85.009668)
+ (xy 140.270001 85.009332) (xy 139.91354 85.156618) (xy 139.640577 85.429105) (xy 139.498382 85.771544) (xy 139.254001 85.771332)
+ (xy 138.89754 85.918618) (xy 138.624577 86.191105) (xy 138.537048 86.401896) (xy 138.383668 86.338206) (xy 138.383668 74.611001)
+ (xy 138.236382 74.25454) (xy 138.129668 74.147639) (xy 138.129668 69.150001) (xy 137.982382 68.79354) (xy 137.709895 68.520577)
+ (xy 137.353692 68.372668) (xy 136.968001 68.372332) (xy 136.77675 68.451354) (xy 136.601242 68.27554) (xy 136.605332 68.265692)
+ (xy 136.605668 67.880001) (xy 136.458382 67.52354) (xy 136.185895 67.250577) (xy 135.829692 67.102668) (xy 135.444001 67.102332)
+ (xy 135.08754 67.249618) (xy 134.883365 67.453436) (xy 134.827668 67.318636) (xy 134.827668 62.800001) (xy 134.680382 62.44354)
+ (xy 134.407895 62.170577) (xy 134.051692 62.022668) (xy 133.666001 62.022332) (xy 133.30954 62.169618) (xy 133.036577 62.442105)
+ (xy 132.888668 62.798308) (xy 132.888453 63.044756) (xy 132.54754 63.185618) (xy 132.274577 63.458105) (xy 132.126668 63.814308)
+ (xy 132.126332 64.199999) (xy 132.273618 64.55646) (xy 132.546105 64.829423) (xy 132.902308 64.977332) (xy 133.287999 64.977668)
+ (xy 133.64446 64.830382) (xy 133.917423 64.557895) (xy 134.065332 64.201692) (xy 134.065546 63.955243) (xy 134.40646 63.814382)
+ (xy 134.679423 63.541895) (xy 134.827332 63.185692) (xy 134.827668 62.800001) (xy 134.827668 67.318636) (xy 134.807382 67.26954)
+ (xy 134.534895 66.996577) (xy 134.178692 66.848668) (xy 133.793001 66.848332) (xy 133.43654 66.995618) (xy 133.163577 67.268105)
+ (xy 133.015668 67.624308) (xy 133.015332 68.009999) (xy 133.162618 68.36646) (xy 133.185529 68.389411) (xy 133.036577 68.538105)
+ (xy 132.888668 68.894308) (xy 132.888332 69.279999) (xy 133.035618 69.63646) (xy 133.308105 69.909423) (xy 133.664308 70.057332)
+ (xy 134.049999 70.057668) (xy 134.40646 69.910382) (xy 134.679423 69.637895) (xy 134.827332 69.281692) (xy 134.827668 68.896001)
+ (xy 134.680382 68.53954) (xy 134.65747 68.516588) (xy 134.737634 68.436563) (xy 134.813618 68.62046) (xy 135.077157 68.884459)
+ (xy 135.073068 68.894308) (xy 135.072732 69.279999) (xy 135.220018 69.63646) (xy 135.492505 69.909423) (xy 135.848708 70.057332)
+ (xy 136.234399 70.057668) (xy 136.425649 69.978645) (xy 136.610105 70.163423) (xy 136.966308 70.311332) (xy 137.351999 70.311668)
+ (xy 137.70846 70.164382) (xy 137.981423 69.891895) (xy 138.129332 69.535692) (xy 138.129668 69.150001) (xy 138.129668 74.147639)
+ (xy 137.963895 73.981577) (xy 137.607692 73.833668) (xy 137.222001 73.833332) (xy 136.86554 73.980618) (xy 136.592577 74.253105)
+ (xy 136.444668 74.609308) (xy 136.444332 74.994999) (xy 136.591618 75.35146) (xy 136.864105 75.624423) (xy 137.220308 75.772332)
+ (xy 137.605999 75.772668) (xy 137.96246 75.625382) (xy 138.235423 75.352895) (xy 138.383332 74.996692) (xy 138.383668 74.611001)
+ (xy 138.383668 86.338206) (xy 138.242692 86.279668) (xy 137.857001 86.279332) (xy 137.50054 86.426618) (xy 137.227577 86.699105)
+ (xy 137.079668 87.055308) (xy 137.079569 87.168429) (xy 136.968001 87.168332) (xy 136.61154 87.315618) (xy 136.338577 87.588105)
+ (xy 136.196382 87.930544) (xy 135.952001 87.930332) (xy 135.59554 88.077618) (xy 135.572699 88.100419) (xy 135.550895 88.078577)
+ (xy 135.194692 87.930668) (xy 134.827668 87.930348) (xy 134.827668 82.104001) (xy 134.680382 81.74754) (xy 134.407895 81.474577)
+ (xy 134.051692 81.326668) (xy 133.666001 81.326332) (xy 133.557668 81.371094) (xy 133.557668 75.627001) (xy 133.410382 75.27054)
+ (xy 133.137895 74.997577) (xy 132.781692 74.849668) (xy 132.396001 74.849332) (xy 132.160668 74.946569) (xy 132.160668 66.737001)
+ (xy 132.013382 66.38054) (xy 131.740895 66.107577) (xy 131.384692 65.959668) (xy 131.144668 65.959458) (xy 131.144668 61.403001)
+ (xy 130.997382 61.04654) (xy 130.724895 60.773577) (xy 130.368692 60.625668) (xy 129.983001 60.625332) (xy 129.62654 60.772618)
+ (xy 129.353577 61.045105) (xy 129.205668 61.401308) (xy 129.205332 61.786999) (xy 129.352618 62.14346) (xy 129.625105 62.416423)
+ (xy 129.981308 62.564332) (xy 130.366999 62.564668) (xy 130.72346 62.417382) (xy 130.996423 62.144895) (xy 131.144332 61.788692)
+ (xy 131.144668 61.403001) (xy 131.144668 65.959458) (xy 130.999001 65.959332) (xy 130.64254 66.106618) (xy 130.509668 66.239258)
+ (xy 130.509668 63.816001) (xy 130.362382 63.45954) (xy 130.089895 63.186577) (xy 129.733692 63.038668) (xy 129.348001 63.038332)
+ (xy 128.99154 63.185618) (xy 128.905088 63.271919) (xy 128.819895 63.186577) (xy 128.463692 63.038668) (xy 128.078001 63.038332)
+ (xy 127.72154 63.185618) (xy 127.448577 63.458105) (xy 127.300668 63.814308) (xy 127.300332 64.199999) (xy 127.447618 64.55646)
+ (xy 127.720105 64.829423) (xy 128.076308 64.977332) (xy 128.461999 64.977668) (xy 128.81846 64.830382) (xy 128.904911 64.74408)
+ (xy 128.990105 64.829423) (xy 129.346308 64.977332) (xy 129.731999 64.977668) (xy 130.08846 64.830382) (xy 130.361423 64.557895)
+ (xy 130.509332 64.201692) (xy 130.509668 63.816001) (xy 130.509668 66.239258) (xy 130.369577 66.379105) (xy 130.221668 66.735308)
+ (xy 130.221657 66.747569) (xy 130.089895 66.615577) (xy 129.733692 66.467668) (xy 129.348001 66.467332) (xy 128.99154 66.614618)
+ (xy 128.718577 66.887105) (xy 128.570668 67.243308) (xy 128.570332 67.628999) (xy 128.717618 67.98546) (xy 128.990105 68.258423)
+ (xy 129.346308 68.406332) (xy 129.731999 68.406668) (xy 130.08846 68.259382) (xy 130.361423 67.986895) (xy 130.509332 67.630692)
+ (xy 130.509342 67.61843) (xy 130.641105 67.750423) (xy 130.997308 67.898332) (xy 131.382999 67.898668) (xy 131.73946 67.751382)
+ (xy 132.012423 67.478895) (xy 132.160332 67.122692) (xy 132.160668 66.737001) (xy 132.160668 74.946569) (xy 132.03954 74.996618)
+ (xy 132.016699 75.019419) (xy 131.994895 74.997577) (xy 131.638692 74.849668) (xy 131.253001 74.849332) (xy 130.89654 74.996618)
+ (xy 130.810088 75.082919) (xy 130.724895 74.997577) (xy 130.368692 74.849668) (xy 129.983001 74.849332) (xy 129.62654 74.996618)
+ (xy 129.353577 75.269105) (xy 129.205668 75.625308) (xy 129.205332 76.010999) (xy 129.352618 76.36746) (xy 129.625105 76.640423)
+ (xy 129.981308 76.788332) (xy 130.366999 76.788668) (xy 130.72346 76.641382) (xy 130.809911 76.55508) (xy 130.895105 76.640423)
+ (xy 131.251308 76.788332) (xy 131.636999 76.788668) (xy 131.99346 76.641382) (xy 132.0163 76.61858) (xy 132.038105 76.640423)
+ (xy 132.394308 76.788332) (xy 132.779999 76.788668) (xy 133.13646 76.641382) (xy 133.409423 76.368895) (xy 133.557332 76.012692)
+ (xy 133.557668 75.627001) (xy 133.557668 81.371094) (xy 133.30954 81.473618) (xy 133.036577 81.746105) (xy 132.888668 82.102308)
+ (xy 132.888332 82.487999) (xy 133.035618 82.84446) (xy 133.308105 83.117423) (xy 133.664308 83.265332) (xy 134.049999 83.265668)
+ (xy 134.40646 83.118382) (xy 134.679423 82.845895) (xy 134.827332 82.489692) (xy 134.827668 82.104001) (xy 134.827668 87.930348)
+ (xy 134.809001 87.930332) (xy 134.45254 88.077618) (xy 134.179577 88.350105) (xy 134.037382 88.692544) (xy 133.793001 88.692332)
+ (xy 133.43654 88.839618) (xy 133.163577 89.112105) (xy 133.015668 89.468308) (xy 133.01553 89.626031) (xy 132.908692 89.581668)
+ (xy 132.795668 89.581569) (xy 132.795668 83.247001) (xy 132.648382 82.89054) (xy 132.375895 82.617577) (xy 132.019692 82.469668)
+ (xy 131.634001 82.469332) (xy 131.27754 82.616618) (xy 131.004577 82.889105) (xy 130.856668 83.245308) (xy 130.856342 83.618801)
+ (xy 130.51554 83.759618) (xy 130.242577 84.032105) (xy 130.094668 84.388308) (xy 130.094332 84.773999) (xy 130.241618 85.13046)
+ (xy 130.514105 85.403423) (xy 130.870308 85.551332) (xy 131.255999 85.551668) (xy 131.61246 85.404382) (xy 131.885423 85.131895)
+ (xy 132.033332 84.775692) (xy 132.033657 84.402198) (xy 132.37446 84.261382) (xy 132.647423 83.988895) (xy 132.795332 83.632692)
+ (xy 132.795668 83.247001) (xy 132.795668 89.581569) (xy 132.523001 89.581332) (xy 132.16654 89.728618) (xy 131.893577 90.001105)
+ (xy 131.751428 90.343434) (xy 131.634001 90.343332) (xy 131.27754 90.490618) (xy 131.004577 90.763105) (xy 130.927555 90.948591)
+ (xy 130.724895 90.745577) (xy 130.368692 90.597668) (xy 129.983001 90.597332) (xy 129.62654 90.744618) (xy 129.366668 91.004036)
+ (xy 129.366668 79.183001) (xy 129.219382 78.82654) (xy 128.946895 78.553577) (xy 128.604668 78.411471) (xy 128.604668 71.817001)
+ (xy 128.457382 71.46054) (xy 128.184895 71.187577) (xy 127.828692 71.039668) (xy 127.443001 71.039332) (xy 127.08654 71.186618)
+ (xy 126.813577 71.459105) (xy 126.665668 71.815308) (xy 126.665332 72.200999) (xy 126.812618 72.55746) (xy 127.085105 72.830423)
+ (xy 127.441308 72.978332) (xy 127.826999 72.978668) (xy 128.18346 72.831382) (xy 128.456423 72.558895) (xy 128.604332 72.202692)
+ (xy 128.604668 71.817001) (xy 128.604668 78.411471) (xy 128.590692 78.405668) (xy 128.205001 78.405332) (xy 127.84854 78.552618)
+ (xy 127.575577 78.825105) (xy 127.427668 79.181308) (xy 127.427332 79.566999) (xy 127.574618 79.92346) (xy 127.847105 80.196423)
+ (xy 128.203308 80.344332) (xy 128.588999 80.344668) (xy 128.94546 80.197382) (xy 129.218423 79.924895) (xy 129.366332 79.568692)
+ (xy 129.366668 79.183001) (xy 129.366668 91.004036) (xy 129.353577 91.017105) (xy 129.264099 91.23259) (xy 128.967001 91.232332)
+ (xy 128.61054 91.379618) (xy 128.337577 91.652105) (xy 128.189668 92.008308) (xy 128.189332 92.393999) (xy 128.336618 92.75046)
+ (xy 128.609105 93.023423) (xy 128.965308 93.171332) (xy 129.350999 93.171668) (xy 129.70746 93.024382) (xy 129.980423 92.751895)
+ (xy 130.0699 92.536409) (xy 130.366999 92.536668) (xy 130.72346 92.389382) (xy 130.996423 92.116895) (xy 131.073444 91.931408)
+ (xy 131.276105 92.134423) (xy 131.632308 92.282332) (xy 132.017999 92.282668) (xy 132.37446 92.135382) (xy 132.647423 91.862895)
+ (xy 132.789571 91.520565) (xy 132.906999 91.520668) (xy 133.26346 91.373382) (xy 133.536423 91.100895) (xy 133.684332 90.744692)
+ (xy 133.684469 90.586968) (xy 133.791308 90.631332) (xy 134.176999 90.631668) (xy 134.53346 90.484382) (xy 134.806423 90.211895)
+ (xy 134.948617 89.869455) (xy 135.192999 89.869668) (xy 135.54946 89.722382) (xy 135.5723 89.69958) (xy 135.594105 89.721423)
+ (xy 135.950308 89.869332) (xy 136.335999 89.869668) (xy 136.69246 89.722382) (xy 136.965423 89.449895) (xy 137.107617 89.107455)
+ (xy 137.351999 89.107668) (xy 137.70846 88.960382) (xy 137.981423 88.687895) (xy 138.129332 88.331692) (xy 138.12943 88.21857)
+ (xy 138.240999 88.218668) (xy 138.59746 88.071382) (xy 138.870423 87.798895) (xy 138.957951 87.588103) (xy 139.252308 87.710332)
+ (xy 139.637999 87.710668) (xy 139.99446 87.563382) (xy 140.267423 87.290895) (xy 140.409617 86.948455) (xy 140.653999 86.948668)
+ (xy 141.01046 86.801382) (xy 141.241258 86.570985) (xy 141.538308 86.694332) (xy 141.923999 86.694668) (xy 142.28046 86.547382)
+ (xy 142.553423 86.274895) (xy 142.701332 85.918692) (xy 142.701668 85.533001) (xy 142.701668 96.931941) (xy 142.433692 96.820668)
+ (xy 142.048001 96.820332) (xy 141.69154 96.967618) (xy 141.605088 97.053919) (xy 141.519895 96.968577) (xy 141.163692 96.820668)
+ (xy 140.778001 96.820332) (xy 140.42154 96.967618) (xy 140.148577 97.240105) (xy 140.034746 97.514239) (xy 139.893692 97.455668)
+ (xy 139.508001 97.455332) (xy 139.15154 97.602618) (xy 138.878577 97.875105) (xy 138.730668 98.231308) (xy 138.730332 98.616999)
+ (xy 138.877618 98.97346) (xy 138.963919 99.059911) (xy 138.878577 99.145105) (xy 138.730668 99.501308) (xy 138.730332 99.886999)
+ (xy 138.877618 100.24346) (xy 139.150105 100.516423) (xy 139.506308 100.664332) (xy 139.891999 100.664668) (xy 140.24846 100.517382)
+ (xy 140.521423 100.244895) (xy 140.669332 99.888692) (xy 140.669668 99.503001) (xy 140.522382 99.14654) (xy 140.43608 99.060088)
+ (xy 140.521423 98.974895) (xy 140.635253 98.70076) (xy 140.776308 98.759332) (xy 141.161999 98.759668) (xy 141.51846 98.612382)
+ (xy 141.604911 98.52608) (xy 141.690105 98.611423) (xy 142.046308 98.759332) (xy 142.431999 98.759668) (xy 142.78846 98.612382)
+ (xy 142.874911 98.52608) (xy 142.960105 98.611423) (xy 143.316308 98.759332) (xy 143.701999 98.759668) (xy 144.05846 98.612382)
+ (xy 144.144911 98.52608) (xy 144.230105 98.611423) (xy 144.586308 98.759332) (xy 144.971999 98.759668) (xy 145.32846 98.612382)
+ (xy 145.414911 98.52608) (xy 145.500105 98.611423) (xy 145.856308 98.759332) (xy 146.241999 98.759668) (xy 146.384886 98.700628)
+ (xy 146.497618 98.97346) (xy 146.770105 99.246423) (xy 147.126308 99.394332) (xy 147.511999 99.394668) (xy 147.86846 99.247382)
+ (xy 148.141423 98.974895) (xy 148.289332 98.618692) (xy 148.289668 98.233001) (xy 148.289668 115.421206) (xy 148.148692 115.362668)
+ (xy 147.781668 115.362348) (xy 147.781668 107.504001) (xy 147.634382 107.14754) (xy 147.361895 106.874577) (xy 147.005692 106.726668)
+ (xy 146.620001 106.726332) (xy 146.26354 106.873618) (xy 145.990577 107.146105) (xy 145.842668 107.502308) (xy 145.842332 107.887999)
+ (xy 145.989618 108.24446) (xy 146.262105 108.517423) (xy 146.618308 108.665332) (xy 147.003999 108.665668) (xy 147.36046 108.518382)
+ (xy 147.633423 108.245895) (xy 147.781332 107.889692) (xy 147.781668 107.504001) (xy 147.781668 115.362348) (xy 147.763001 115.362332)
+ (xy 147.40654 115.509618) (xy 147.133577 115.782105) (xy 146.985668 116.138308) (xy 146.985332 116.523999) (xy 147.132618 116.88046)
+ (xy 147.405105 117.153423) (xy 147.761308 117.301332) (xy 148.146999 117.301668) (xy 148.50346 117.154382) (xy 148.776423 116.881895)
+ (xy 148.924332 116.525692) (xy 148.924668 116.140001) (xy 148.924668 119.090094) (xy 148.67654 119.192618) (xy 148.403577 119.465105)
+ (xy 148.388621 119.501122) (xy 148.269382 119.21254) (xy 148.18308 119.126088) (xy 148.268423 119.040895) (xy 148.416332 118.684692)
+ (xy 148.416668 118.299001) (xy 148.269382 117.94254) (xy 147.996895 117.669577) (xy 147.640692 117.521668) (xy 147.255001 117.521332)
+ (xy 146.89854 117.668618) (xy 146.625577 117.941105) (xy 146.477668 118.297308) (xy 146.477332 118.682999) (xy 146.624618 119.03946)
+ (xy 146.710919 119.125911) (xy 146.625577 119.211105) (xy 146.477668 119.567308) (xy 146.477332 119.952999) (xy 146.624618 120.30946)
+ (xy 146.647419 120.3323) (xy 146.625577 120.354105) (xy 146.477668 120.710308) (xy 146.477332 121.095999) (xy 146.624618 121.45246)
+ (xy 146.897105 121.725423) (xy 147.253308 121.873332) (xy 147.638999 121.873668) (xy 147.99546 121.726382) (xy 148.268423 121.453895)
+ (xy 148.416332 121.097692) (xy 148.416668 120.712001) (xy 148.269382 120.35554) (xy 148.24658 120.332699) (xy 148.268423 120.310895)
+ (xy 148.283378 120.274877) (xy 148.402618 120.56346) (xy 148.675105 120.836423) (xy 149.031308 120.984332) (xy 149.416999 120.984668)
+ (xy 149.77346 120.837382) (xy 149.859911 120.75108) (xy 149.945105 120.836423) (xy 150.301308 120.984332) (xy 150.686999 120.984668)
+ (xy 151.04346 120.837382) (xy 151.129911 120.75108) (xy 151.215105 120.836423) (xy 151.571308 120.984332) (xy 151.956999 120.984668)
+ (xy 152.31346 120.837382) (xy 152.399911 120.75108) (xy 152.485105 120.836423) (xy 152.841308 120.984332) (xy 153.107348 120.984563)
+ (xy 152.975577 121.116105) (xy 152.827668 121.472308) (xy 152.827332 121.857999) (xy 152.974618 122.21446) (xy 153.247105 122.487423)
+ (xy 153.412916 122.556274) (xy 153.335668 122.742308) (xy 153.335332 123.127999) (xy 153.482618 123.48446) (xy 153.755105 123.757423)
+ (xy 154.111308 123.905332) (xy 154.496999 123.905668) (xy 154.85346 123.758382) (xy 155.126423 123.485895) (xy 155.274332 123.129692)
+ (xy 155.274668 122.744001) (xy 155.274668 129.348001) (xy 155.127382 128.99154) (xy 154.854895 128.718577) (xy 154.498692 128.570668)
+ (xy 154.113001 128.570332) (xy 153.970113 128.629371) (xy 153.857382 128.35654) (xy 153.584895 128.083577) (xy 153.228692 127.935668)
+ (xy 152.843001 127.935332) (xy 152.700113 127.994371) (xy 152.587382 127.72154) (xy 152.314895 127.448577) (xy 151.958692 127.300668)
+ (xy 151.573001 127.300332) (xy 151.21654 127.447618) (xy 150.943577 127.720105) (xy 150.795668 128.076308) (xy 150.795657 128.088569)
+ (xy 150.663895 127.956577) (xy 150.307692 127.808668) (xy 149.922001 127.808332) (xy 149.56554 127.955618) (xy 149.292577 128.228105)
+ (xy 149.144668 128.584308) (xy 149.144332 128.969999) (xy 149.291618 129.32646) (xy 149.564105 129.599423) (xy 149.920308 129.747332)
+ (xy 150.305999 129.747668) (xy 150.66246 129.600382) (xy 150.935423 129.327895) (xy 151.083332 128.971692) (xy 151.083342 128.95943)
+ (xy 151.215105 129.091423) (xy 151.571308 129.239332) (xy 151.956999 129.239668) (xy 152.099886 129.180628) (xy 152.212618 129.45346)
+ (xy 152.485105 129.726423) (xy 152.841308 129.874332) (xy 153.226999 129.874668) (xy 153.369886 129.815628) (xy 153.482618 130.08846)
+ (xy 153.755105 130.361423) (xy 154.111308 130.509332) (xy 154.496999 130.509668) (xy 154.85346 130.362382) (xy 155.126423 130.089895)
+ (xy 155.274332 129.733692) (xy 155.274668 129.348001) (xy 155.274668 131.888001) (xy 155.127382 131.53154) (xy 154.854895 131.258577)
+ (xy 154.498692 131.110668) (xy 154.113001 131.110332) (xy 153.75654 131.257618) (xy 153.483577 131.530105) (xy 153.335668 131.886308)
+ (xy 153.335332 132.271999) (xy 153.482618 132.62846) (xy 153.755105 132.901423) (xy 154.111308 133.049332) (xy 154.496999 133.049668)
+ (xy 154.85346 132.902382) (xy 155.126423 132.629895) (xy 155.274332 132.273692) (xy 155.274668 131.888001) (xy 155.274668 134.428001)
+ (xy 155.127382 134.07154) (xy 154.854895 133.798577) (xy 154.498692 133.650668) (xy 154.113001 133.650332) (xy 153.75654 133.797618)
+ (xy 153.483577 134.070105) (xy 153.335668 134.426308) (xy 153.335332 134.811999) (xy 153.482618 135.16846) (xy 153.568919 135.254911)
+ (xy 153.483577 135.340105) (xy 153.335668 135.696308) (xy 153.335332 136.081999) (xy 153.482618 136.43846) (xy 153.755105 136.711423)
+ (xy 153.843636 136.748184) (xy 153.843332 137.097999) (xy 153.990618 137.45446) (xy 154.263105 137.727423) (xy 154.619308 137.875332)
+ (xy 155.004999 137.875668) (xy 155.36146 137.728382) (xy 155.634423 137.455895) (xy 155.782332 137.099692) (xy 155.782668 136.714001)
+ (xy 155.782668 138.946636) (xy 155.762382 138.89754) (xy 155.489895 138.624577) (xy 155.133692 138.476668) (xy 154.748001 138.476332)
+ (xy 154.39154 138.623618) (xy 154.118577 138.896105) (xy 153.970668 139.252308) (xy 153.970332 139.637999) (xy 154.117618 139.99446)
+ (xy 154.390105 140.267423) (xy 154.746308 140.415332) (xy 155.131999 140.415668) (xy 155.48846 140.268382) (xy 155.761423 139.995895)
+ (xy 155.909332 139.639692) (xy 155.909668 139.254001) (xy 155.909668 147.747348) (xy 155.891001 147.747332) (xy 155.655668 147.844569)
+ (xy 155.655668 141.540001) (xy 155.508382 141.18354) (xy 155.235895 140.910577) (xy 154.879692 140.762668) (xy 154.494001 140.762332)
+ (xy 154.13754 140.909618) (xy 153.864577 141.182105) (xy 153.716668 141.538308) (xy 153.716332 141.923999) (xy 153.863618 142.28046)
+ (xy 154.136105 142.553423) (xy 154.492308 142.701332) (xy 154.877999 142.701668) (xy 155.23446 142.554382) (xy 155.507423 142.281895)
+ (xy 155.655332 141.925692) (xy 155.655668 141.540001) (xy 155.655668 147.844569) (xy 155.53454 147.894618) (xy 155.261577 148.167105)
+ (xy 155.113668 148.523308) (xy 155.113332 148.908999) (xy 155.260618 149.26546) (xy 155.533105 149.538423) (xy 155.889308 149.686332)
+ (xy 156.274999 149.686668) (xy 156.63146 149.539382) (xy 156.904423 149.266895) (xy 157.052332 148.910692) (xy 157.052625 148.573298)
+ (xy 157.286308 148.670332) (xy 157.671999 148.670668) (xy 157.814886 148.611628) (xy 157.927618 148.88446) (xy 158.200105 149.157423)
+ (xy 158.556308 149.305332) (xy 158.941999 149.305668) (xy 159.29846 149.158382) (xy 159.571423 148.885895) (xy 159.719332 148.529692)
+ (xy 159.719668 148.144001) (xy 159.719668 154.51743) (xy 159.461725 154.518856) (xy 159.447073 154.496927) (xy 159.243789 154.361097)
+ (xy 159.004 154.3134) (xy 157.226 154.3134) (xy 156.986211 154.361097) (xy 156.782927 154.496927) (xy 156.758294 154.533792)
+ (xy 155.909668 154.53848) (xy 155.909668 150.303001) (xy 155.762382 149.94654) (xy 155.489895 149.673577) (xy 155.133692 149.525668)
+ (xy 154.748001 149.525332) (xy 154.39154 149.672618) (xy 154.118577 149.945105) (xy 153.987359 150.26111) (xy 153.857382 149.94654)
+ (xy 153.584895 149.673577) (xy 153.268068 149.542018) (xy 153.268068 140.778001) (xy 153.120782 140.42154) (xy 152.848295 140.148577)
+ (xy 152.492092 140.000668) (xy 152.106401 140.000332) (xy 151.74994 140.147618) (xy 151.476977 140.420105) (xy 151.329068 140.776308)
+ (xy 151.328924 140.94088) (xy 151.171895 140.783577) (xy 150.815692 140.635668) (xy 150.430001 140.635332) (xy 150.07354 140.782618)
+ (xy 149.800577 141.055105) (xy 149.652668 141.411308) (xy 149.652332 141.796999) (xy 149.799618 142.15346) (xy 150.072105 142.426423)
+ (xy 150.428308 142.574332) (xy 150.813999 142.574668) (xy 151.17046 142.427382) (xy 151.443423 142.154895) (xy 151.591332 141.798692)
+ (xy 151.591475 141.634119) (xy 151.748505 141.791423) (xy 152.104708 141.939332) (xy 152.490399 141.939668) (xy 152.84686 141.792382)
+ (xy 153.119823 141.519895) (xy 153.267732 141.163692) (xy 153.268068 140.778001) (xy 153.268068 149.542018) (xy 153.228692 149.525668)
+ (xy 152.843001 149.525332) (xy 152.48654 149.672618) (xy 152.213577 149.945105) (xy 152.082359 150.26111) (xy 151.952382 149.94654)
+ (xy 151.679895 149.673577) (xy 151.323692 149.525668) (xy 150.938001 149.525332) (xy 150.58154 149.672618) (xy 150.308577 149.945105)
+ (xy 150.177359 150.26111) (xy 150.047382 149.94654) (xy 149.774895 149.673577) (xy 149.559668 149.584206) (xy 149.559668 141.286001)
+ (xy 149.412382 140.92954) (xy 149.139895 140.656577) (xy 149.051668 140.619941) (xy 149.051668 127.697001) (xy 148.904382 127.34054)
+ (xy 148.631895 127.067577) (xy 148.275692 126.919668) (xy 148.136762 126.919546) (xy 148.141423 126.914895) (xy 148.289332 126.558692)
+ (xy 148.289668 126.173001) (xy 148.142382 125.81654) (xy 147.869895 125.543577) (xy 147.513692 125.395668) (xy 147.128001 125.395332)
+ (xy 146.77154 125.542618) (xy 146.530214 125.783522) (xy 146.491382 125.68954) (xy 146.384668 125.582639) (xy 146.384668 119.823001)
+ (xy 146.384668 116.648001) (xy 146.237382 116.29154) (xy 145.964895 116.018577) (xy 145.608692 115.870668) (xy 145.368668 115.870458)
+ (xy 145.368668 107.758001) (xy 145.221382 107.40154) (xy 144.948895 107.128577) (xy 144.592692 106.980668) (xy 144.207001 106.980332)
+ (xy 143.85054 107.127618) (xy 143.577577 107.400105) (xy 143.429668 107.756308) (xy 143.429563 107.87571) (xy 143.08854 108.016618)
+ (xy 142.815577 108.289105) (xy 142.667668 108.645308) (xy 142.667518 108.817204) (xy 142.45354 108.905618) (xy 142.180577 109.178105)
+ (xy 142.032668 109.534308) (xy 142.032453 109.780756) (xy 141.939668 109.819093) (xy 141.939668 105.726001) (xy 141.792382 105.36954)
+ (xy 141.519895 105.096577) (xy 141.163692 104.948668) (xy 140.778001 104.948332) (xy 140.42154 105.095618) (xy 140.148577 105.368105)
+ (xy 140.000668 105.724308) (xy 140.000332 106.109999) (xy 140.147618 106.46646) (xy 140.420105 106.739423) (xy 140.776308 106.887332)
+ (xy 141.161999 106.887668) (xy 141.51846 106.740382) (xy 141.791423 106.467895) (xy 141.939332 106.111692) (xy 141.939668 105.726001)
+ (xy 141.939668 109.819093) (xy 141.69154 109.921618) (xy 141.418577 110.194105) (xy 141.270668 110.550308) (xy 141.270563 110.66971)
+ (xy 140.92954 110.810618) (xy 140.656577 111.083105) (xy 140.508668 111.439308) (xy 140.508332 111.824999) (xy 140.655618 112.18146)
+ (xy 140.928105 112.454423) (xy 141.284308 112.602332) (xy 141.669999 112.602668) (xy 142.02646 112.455382) (xy 142.299423 112.182895)
+ (xy 142.447332 111.826692) (xy 142.447436 111.707289) (xy 142.78846 111.566382) (xy 143.061423 111.293895) (xy 143.209332 110.937692)
+ (xy 143.209546 110.691243) (xy 143.55046 110.550382) (xy 143.823423 110.277895) (xy 143.971332 109.921692) (xy 143.971481 109.749795)
+ (xy 144.18546 109.661382) (xy 144.458423 109.388895) (xy 144.606332 109.032692) (xy 144.606436 108.913289) (xy 144.94746 108.772382)
+ (xy 145.220423 108.499895) (xy 145.368332 108.143692) (xy 145.368668 107.758001) (xy 145.368668 115.870458) (xy 145.223001 115.870332)
+ (xy 144.86654 116.017618) (xy 144.593577 116.290105) (xy 144.445668 116.646308) (xy 144.445332 117.031999) (xy 144.592618 117.38846)
+ (xy 144.865105 117.661423) (xy 145.221308 117.809332) (xy 145.606999 117.809668) (xy 145.96346 117.662382) (xy 146.236423 117.389895)
+ (xy 146.384332 117.033692) (xy 146.384668 116.648001) (xy 146.384668 119.823001) (xy 146.237382 119.46654) (xy 145.964895 119.193577)
+ (xy 145.608692 119.045668) (xy 145.223001 119.045332) (xy 144.86654 119.192618) (xy 144.780088 119.278919) (xy 144.694895 119.193577)
+ (xy 144.338692 119.045668) (xy 143.953001 119.045332) (xy 143.59654 119.192618) (xy 143.510088 119.278919) (xy 143.424895 119.193577)
+ (xy 143.068692 119.045668) (xy 142.683001 119.045332) (xy 142.32654 119.192618) (xy 142.240088 119.278919) (xy 142.154895 119.193577)
+ (xy 141.798692 119.045668) (xy 141.413001 119.045332) (xy 141.05654 119.192618) (xy 140.783577 119.465105) (xy 140.635668 119.821308)
+ (xy 140.635332 120.206999) (xy 140.782618 120.56346) (xy 141.055105 120.836423) (xy 141.411308 120.984332) (xy 141.796999 120.984668)
+ (xy 142.15346 120.837382) (xy 142.239911 120.75108) (xy 142.325105 120.836423) (xy 142.681308 120.984332) (xy 143.066999 120.984668)
+ (xy 143.42346 120.837382) (xy 143.509911 120.75108) (xy 143.595105 120.836423) (xy 143.951308 120.984332) (xy 144.336999 120.984668)
+ (xy 144.69346 120.837382) (xy 144.779911 120.75108) (xy 144.865105 120.836423) (xy 145.221308 120.984332) (xy 145.606999 120.984668)
+ (xy 145.96346 120.837382) (xy 146.236423 120.564895) (xy 146.384332 120.208692) (xy 146.384668 119.823001) (xy 146.384668 125.582639)
+ (xy 146.218895 125.416577) (xy 145.862692 125.268668) (xy 145.477001 125.268332) (xy 145.12054 125.415618) (xy 145.034088 125.501919)
+ (xy 144.948895 125.416577) (xy 144.592692 125.268668) (xy 144.207001 125.268332) (xy 143.85054 125.415618) (xy 143.764088 125.501919)
+ (xy 143.678895 125.416577) (xy 143.322692 125.268668) (xy 142.937001 125.268332) (xy 142.58054 125.415618) (xy 142.494088 125.501919)
+ (xy 142.408895 125.416577) (xy 142.052692 125.268668) (xy 141.667001 125.268332) (xy 141.31054 125.415618) (xy 141.224088 125.501919)
+ (xy 141.138895 125.416577) (xy 140.782692 125.268668) (xy 140.397001 125.268332) (xy 140.04054 125.415618) (xy 139.941366 125.514619)
+ (xy 139.843495 125.416577) (xy 139.487292 125.268668) (xy 139.101601 125.268332) (xy 138.764668 125.407549) (xy 138.764668 119.823001)
+ (xy 138.617382 119.46654) (xy 138.344895 119.193577) (xy 138.002668 119.051471) (xy 138.002668 107.123001) (xy 137.855382 106.76654)
+ (xy 137.582895 106.493577) (xy 137.568735 106.487697) (xy 137.672132 106.238692) (xy 137.672468 105.853001) (xy 137.525182 105.49654)
+ (xy 137.252695 105.223577) (xy 136.896492 105.075668) (xy 136.510801 105.075332) (xy 136.15434 105.222618) (xy 135.881377 105.495105)
+ (xy 135.733468 105.851308) (xy 135.733132 106.236999) (xy 135.880418 106.59346) (xy 136.152905 106.866423) (xy 136.167064 106.872302)
+ (xy 136.063668 107.121308) (xy 136.063332 107.506999) (xy 136.210618 107.86346) (xy 136.483105 108.136423) (xy 136.839308 108.284332)
+ (xy 137.224999 108.284668) (xy 137.58146 108.137382) (xy 137.854423 107.864895) (xy 138.002332 107.508692) (xy 138.002668 107.123001)
+ (xy 138.002668 119.051471) (xy 137.988692 119.045668) (xy 137.603001 119.045332) (xy 137.24654 119.192618) (xy 136.973577 119.465105)
+ (xy 136.825668 119.821308) (xy 136.825332 120.206999) (xy 136.972618 120.56346) (xy 137.245105 120.836423) (xy 137.601308 120.984332)
+ (xy 137.986999 120.984668) (xy 138.34346 120.837382) (xy 138.616423 120.564895) (xy 138.764332 120.208692) (xy 138.764668 119.823001)
+ (xy 138.764668 125.407549) (xy 138.74514 125.415618) (xy 138.480688 125.679608) (xy 138.344895 125.543577) (xy 137.988692 125.395668)
+ (xy 137.603001 125.395332) (xy 137.24654 125.542618) (xy 137.160088 125.628919) (xy 137.074895 125.543577) (xy 136.718692 125.395668)
+ (xy 136.333001 125.395332) (xy 136.224668 125.440094) (xy 136.224668 109.663001) (xy 136.077382 109.30654) (xy 135.804895 109.033577)
+ (xy 135.448692 108.885668) (xy 135.063001 108.885332) (xy 134.70654 109.032618) (xy 134.433577 109.305105) (xy 134.285668 109.661308)
+ (xy 134.285332 110.046999) (xy 134.432618 110.40346) (xy 134.705105 110.676423) (xy 135.061308 110.824332) (xy 135.446999 110.824668)
+ (xy 135.80346 110.677382) (xy 136.076423 110.404895) (xy 136.224332 110.048692) (xy 136.224668 109.663001) (xy 136.224668 125.440094)
+ (xy 135.97654 125.542618) (xy 135.890088 125.628919) (xy 135.804895 125.543577) (xy 135.589668 125.454206) (xy 135.589668 116.648001)
+ (xy 135.442382 116.29154) (xy 135.169895 116.018577) (xy 134.813692 115.870668) (xy 134.428001 115.870332) (xy 134.07154 116.017618)
+ (xy 133.798577 116.290105) (xy 133.684668 116.564427) (xy 133.684668 109.663001) (xy 133.537382 109.30654) (xy 133.264895 109.033577)
+ (xy 132.908692 108.885668) (xy 132.523001 108.885332) (xy 132.16654 109.032618) (xy 132.160668 109.038479) (xy 132.160668 97.217001)
+ (xy 132.013382 96.86054) (xy 131.740895 96.587577) (xy 131.384692 96.439668) (xy 130.999001 96.439332) (xy 130.64254 96.586618)
+ (xy 130.369577 96.859105) (xy 130.221668 97.215308) (xy 130.221332 97.600999) (xy 130.368618 97.95746) (xy 130.641105 98.230423)
+ (xy 130.997308 98.378332) (xy 131.382999 98.378668) (xy 131.73946 98.231382) (xy 132.012423 97.958895) (xy 132.160332 97.602692)
+ (xy 132.160668 97.217001) (xy 132.160668 109.038479) (xy 132.080088 109.118919) (xy 131.994895 109.033577) (xy 131.638692 108.885668)
+ (xy 131.253001 108.885332) (xy 130.89654 109.032618) (xy 130.810088 109.118919) (xy 130.724895 109.033577) (xy 130.368692 108.885668)
+ (xy 129.983001 108.885332) (xy 129.62654 109.032618) (xy 129.353577 109.305105) (xy 129.205668 109.661308) (xy 129.205332 110.046999)
+ (xy 129.352618 110.40346) (xy 129.625105 110.676423) (xy 129.981308 110.824332) (xy 130.366999 110.824668) (xy 130.72346 110.677382)
+ (xy 130.809911 110.59108) (xy 130.895105 110.676423) (xy 131.251308 110.824332) (xy 131.636999 110.824668) (xy 131.99346 110.677382)
+ (xy 132.079911 110.59108) (xy 132.165105 110.676423) (xy 132.521308 110.824332) (xy 132.906999 110.824668) (xy 133.26346 110.677382)
+ (xy 133.536423 110.404895) (xy 133.684332 110.048692) (xy 133.684668 109.663001) (xy 133.684668 116.564427) (xy 133.650668 116.646308)
+ (xy 133.650332 117.031999) (xy 133.797618 117.38846) (xy 134.070105 117.661423) (xy 134.426308 117.809332) (xy 134.811999 117.809668)
+ (xy 135.16846 117.662382) (xy 135.441423 117.389895) (xy 135.589332 117.033692) (xy 135.589668 116.648001) (xy 135.589668 125.454206)
+ (xy 135.448692 125.395668) (xy 135.063001 125.395332) (xy 134.70654 125.542618) (xy 134.620088 125.628919) (xy 134.534895 125.543577)
+ (xy 134.178692 125.395668) (xy 133.793001 125.395332) (xy 133.43654 125.542618) (xy 133.350088 125.628919) (xy 133.264895 125.543577)
+ (xy 132.908692 125.395668) (xy 132.523001 125.395332) (xy 132.16654 125.542618) (xy 132.160668 125.548479) (xy 132.160668 118.299001)
+ (xy 132.013382 117.94254) (xy 131.740895 117.669577) (xy 131.384692 117.521668) (xy 130.999001 117.521332) (xy 130.64254 117.668618)
+ (xy 130.369577 117.941105) (xy 130.221668 118.297308) (xy 130.221332 118.682999) (xy 130.368618 119.03946) (xy 130.641105 119.312423)
+ (xy 130.997308 119.460332) (xy 131.382999 119.460668) (xy 131.73946 119.313382) (xy 132.012423 119.040895) (xy 132.160332 118.684692)
+ (xy 132.160668 118.299001) (xy 132.160668 125.548479) (xy 132.080088 125.628919) (xy 131.994895 125.543577) (xy 131.638692 125.395668)
+ (xy 131.253001 125.395332) (xy 130.89654 125.542618) (xy 130.810088 125.628919) (xy 130.724895 125.543577) (xy 130.368692 125.395668)
+ (xy 129.983001 125.395332) (xy 129.62654 125.542618) (xy 129.540088 125.628919) (xy 129.454895 125.543577) (xy 129.138889 125.412359)
+ (xy 129.45346 125.282382) (xy 129.726423 125.009895) (xy 129.874332 124.653692) (xy 129.874668 124.268001) (xy 129.727382 123.91154)
+ (xy 129.64108 123.825088) (xy 129.726423 123.739895) (xy 129.874332 123.383692) (xy 129.874668 122.998001) (xy 129.727382 122.64154)
+ (xy 129.64108 122.555088) (xy 129.726423 122.469895) (xy 129.874332 122.113692) (xy 129.874668 121.728001) (xy 129.874668 119.188001)
+ (xy 129.874668 116.648001) (xy 129.727382 116.29154) (xy 129.454895 116.018577) (xy 129.098692 115.870668) (xy 128.713001 115.870332)
+ (xy 128.604668 115.915094) (xy 128.604668 108.393001) (xy 128.457382 108.03654) (xy 128.184895 107.763577) (xy 127.828692 107.615668)
+ (xy 127.443001 107.615332) (xy 127.08654 107.762618) (xy 127.000088 107.848919) (xy 126.914895 107.763577) (xy 126.699668 107.674206)
+ (xy 126.699668 102.551001) (xy 126.552382 102.19454) (xy 126.445668 102.087639) (xy 126.445668 64.197001) (xy 126.298382 63.84054)
+ (xy 126.025895 63.567577) (xy 125.669692 63.419668) (xy 125.284001 63.419332) (xy 124.92754 63.566618) (xy 124.654577 63.839105)
+ (xy 124.506668 64.195308) (xy 124.506332 64.580999) (xy 124.653618 64.93746) (xy 124.926105 65.210423) (xy 125.282308 65.358332)
+ (xy 125.667999 65.358668) (xy 126.02446 65.211382) (xy 126.297423 64.938895) (xy 126.445332 64.582692) (xy 126.445668 64.197001)
+ (xy 126.445668 102.087639) (xy 126.279895 101.921577) (xy 125.923692 101.773668) (xy 125.810668 101.773569) (xy 125.810668 70.547001)
+ (xy 125.810668 67.372001) (xy 125.663382 67.01554) (xy 125.390895 66.742577) (xy 125.034692 66.594668) (xy 124.649001 66.594332)
+ (xy 124.29254 66.741618) (xy 124.019577 67.014105) (xy 123.905668 67.288427) (xy 123.905668 65.721001) (xy 123.758382 65.36454)
+ (xy 123.485895 65.091577) (xy 123.129692 64.943668) (xy 122.744001 64.943332) (xy 122.38754 65.090618) (xy 122.114577 65.363105)
+ (xy 121.966668 65.719308) (xy 121.966332 66.104999) (xy 122.113618 66.46146) (xy 122.386105 66.734423) (xy 122.742308 66.882332)
+ (xy 123.127999 66.882668) (xy 123.48446 66.735382) (xy 123.757423 66.462895) (xy 123.905332 66.106692) (xy 123.905668 65.721001)
+ (xy 123.905668 67.288427) (xy 123.871668 67.370308) (xy 123.871458 67.610539) (xy 123.633001 67.610332) (xy 123.27654 67.757618)
+ (xy 123.003577 68.030105) (xy 122.855668 68.386308) (xy 122.855332 68.771999) (xy 123.002618 69.12846) (xy 123.275105 69.401423)
+ (xy 123.631308 69.549332) (xy 124.016999 69.549668) (xy 124.37346 69.402382) (xy 124.646423 69.129895) (xy 124.794332 68.773692)
+ (xy 124.794541 68.53346) (xy 125.032999 68.533668) (xy 125.38946 68.386382) (xy 125.662423 68.113895) (xy 125.810332 67.757692)
+ (xy 125.810668 67.372001) (xy 125.810668 70.547001) (xy 125.663382 70.19054) (xy 125.390895 69.917577) (xy 125.034692 69.769668)
+ (xy 124.649001 69.769332) (xy 124.29254 69.916618) (xy 124.019577 70.189105) (xy 123.871668 70.545308) (xy 123.871332 70.930999)
+ (xy 124.018618 71.28746) (xy 124.291105 71.560423) (xy 124.647308 71.708332) (xy 125.032999 71.708668) (xy 125.38946 71.561382)
+ (xy 125.662423 71.288895) (xy 125.810332 70.932692) (xy 125.810668 70.547001) (xy 125.810668 101.773569) (xy 125.538001 101.773332)
+ (xy 125.413947 101.824589) (xy 125.409382 101.81354) (xy 125.136895 101.540577) (xy 124.780692 101.392668) (xy 124.395001 101.392332)
+ (xy 124.159668 101.489569) (xy 124.159668 88.708001) (xy 124.012382 88.35154) (xy 123.739895 88.078577) (xy 123.383692 87.930668)
+ (xy 123.270668 87.930569) (xy 123.270668 80.834001) (xy 123.123382 80.47754) (xy 122.889668 80.243417) (xy 122.889668 69.150001)
+ (xy 122.742382 68.79354) (xy 122.469895 68.520577) (xy 122.113692 68.372668) (xy 121.728001 68.372332) (xy 121.37154 68.519618)
+ (xy 121.098577 68.792105) (xy 120.950668 69.148308) (xy 120.950332 69.533999) (xy 121.097618 69.89046) (xy 121.370105 70.163423)
+ (xy 121.726308 70.311332) (xy 122.111999 70.311668) (xy 122.46846 70.164382) (xy 122.741423 69.891895) (xy 122.889332 69.535692)
+ (xy 122.889668 69.150001) (xy 122.889668 80.243417) (xy 122.850895 80.204577) (xy 122.494692 80.056668) (xy 122.109001 80.056332)
+ (xy 121.75254 80.203618) (xy 121.479577 80.476105) (xy 121.390099 80.69159) (xy 121.093001 80.691332) (xy 121.01377 80.724069)
+ (xy 120.964382 80.60454) (xy 120.691895 80.331577) (xy 120.335692 80.183668) (xy 119.950001 80.183332) (xy 119.59354 80.330618)
+ (xy 119.320577 80.603105) (xy 119.172668 80.959308) (xy 119.172332 81.344999) (xy 119.319618 81.70146) (xy 119.592105 81.974423)
+ (xy 119.948308 82.122332) (xy 120.333999 82.122668) (xy 120.413229 82.08993) (xy 120.462618 82.20946) (xy 120.735105 82.482423)
+ (xy 121.091308 82.630332) (xy 121.476999 82.630668) (xy 121.83346 82.483382) (xy 122.106423 82.210895) (xy 122.1959 81.995409)
+ (xy 122.492999 81.995668) (xy 122.84946 81.848382) (xy 123.122423 81.575895) (xy 123.270332 81.219692) (xy 123.270668 80.834001)
+ (xy 123.270668 87.930569) (xy 122.998001 87.930332) (xy 122.64154 88.077618) (xy 122.368577 88.350105) (xy 122.254668 88.624427)
+ (xy 122.254668 85.279001) (xy 122.107382 84.92254) (xy 121.834895 84.649577) (xy 121.478692 84.501668) (xy 121.093001 84.501332)
+ (xy 120.73654 84.648618) (xy 120.463577 84.921105) (xy 120.315668 85.277308) (xy 120.315332 85.662999) (xy 120.462618 86.01946)
+ (xy 120.735105 86.292423) (xy 121.091308 86.440332) (xy 121.476999 86.440668) (xy 121.83346 86.293382) (xy 122.106423 86.020895)
+ (xy 122.254332 85.664692) (xy 122.254668 85.279001) (xy 122.254668 88.624427) (xy 122.220668 88.706308) (xy 122.220332 89.091999)
+ (xy 122.367618 89.44846) (xy 122.640105 89.721423) (xy 122.996308 89.869332) (xy 123.381999 89.869668) (xy 123.73846 89.722382)
+ (xy 124.011423 89.449895) (xy 124.159332 89.093692) (xy 124.159668 88.708001) (xy 124.159668 101.489569) (xy 124.03854 101.539618)
+ (xy 123.765577 101.812105) (xy 123.651668 102.086427) (xy 123.651668 97.090001) (xy 123.504382 96.73354) (xy 123.231895 96.460577)
+ (xy 122.875692 96.312668) (xy 122.490001 96.312332) (xy 122.13354 96.459618) (xy 121.983477 96.609418) (xy 121.834895 96.460577)
+ (xy 121.478692 96.312668) (xy 121.093001 96.312332) (xy 120.857668 96.409569) (xy 120.857668 91.375001) (xy 120.710382 91.01854)
+ (xy 120.437895 90.745577) (xy 120.081692 90.597668) (xy 119.696001 90.597332) (xy 119.33954 90.744618) (xy 119.066577 91.017105)
+ (xy 118.918668 91.373308) (xy 118.918332 91.758999) (xy 119.065618 92.11546) (xy 119.338105 92.388423) (xy 119.694308 92.536332)
+ (xy 120.079999 92.536668) (xy 120.43646 92.389382) (xy 120.709423 92.116895) (xy 120.857332 91.760692) (xy 120.857668 91.375001)
+ (xy 120.857668 96.409569) (xy 120.73654 96.459618) (xy 120.463577 96.732105) (xy 120.315668 97.088308) (xy 120.315332 97.473999)
+ (xy 120.462618 97.83046) (xy 120.735105 98.103423) (xy 121.091308 98.251332) (xy 121.476999 98.251668) (xy 121.83346 98.104382)
+ (xy 121.983522 97.954581) (xy 122.132105 98.103423) (xy 122.488308 98.251332) (xy 122.873999 98.251668) (xy 123.23046 98.104382)
+ (xy 123.503423 97.831895) (xy 123.651332 97.475692) (xy 123.651668 97.090001) (xy 123.651668 102.086427) (xy 123.617668 102.168308)
+ (xy 123.617332 102.553999) (xy 123.764618 102.91046) (xy 124.037105 103.183423) (xy 124.393308 103.331332) (xy 124.778999 103.331668)
+ (xy 124.903052 103.28041) (xy 124.907618 103.29146) (xy 125.180105 103.564423) (xy 125.536308 103.712332) (xy 125.921999 103.712668)
+ (xy 126.27846 103.565382) (xy 126.551423 103.292895) (xy 126.699332 102.936692) (xy 126.699668 102.551001) (xy 126.699668 107.674206)
+ (xy 126.558692 107.615668) (xy 126.173001 107.615332) (xy 125.81654 107.762618) (xy 125.730088 107.848919) (xy 125.644895 107.763577)
+ (xy 125.288692 107.615668) (xy 124.903001 107.615332) (xy 124.54654 107.762618) (xy 124.273577 108.035105) (xy 124.125668 108.391308)
+ (xy 124.125332 108.776999) (xy 124.272618 109.13346) (xy 124.545105 109.406423) (xy 124.901308 109.554332) (xy 125.286999 109.554668)
+ (xy 125.64346 109.407382) (xy 125.729911 109.32108) (xy 125.815105 109.406423) (xy 126.171308 109.554332) (xy 126.556999 109.554668)
+ (xy 126.91346 109.407382) (xy 126.999911 109.32108) (xy 127.085105 109.406423) (xy 127.441308 109.554332) (xy 127.826999 109.554668)
+ (xy 128.18346 109.407382) (xy 128.456423 109.134895) (xy 128.604332 108.778692) (xy 128.604668 108.393001) (xy 128.604668 115.915094)
+ (xy 128.35654 116.017618) (xy 128.083577 116.290105) (xy 127.935668 116.646308) (xy 127.935332 117.031999) (xy 128.082618 117.38846)
+ (xy 128.355105 117.661423) (xy 128.711308 117.809332) (xy 129.096999 117.809668) (xy 129.45346 117.662382) (xy 129.726423 117.389895)
+ (xy 129.874332 117.033692) (xy 129.874668 116.648001) (xy 129.874668 119.188001) (xy 129.727382 118.83154) (xy 129.454895 118.558577)
+ (xy 129.098692 118.410668) (xy 128.713001 118.410332) (xy 128.35654 118.557618) (xy 128.083577 118.830105) (xy 127.935668 119.186308)
+ (xy 127.935332 119.571999) (xy 128.082618 119.92846) (xy 128.355105 120.201423) (xy 128.711308 120.349332) (xy 129.096999 120.349668)
+ (xy 129.45346 120.202382) (xy 129.726423 119.929895) (xy 129.874332 119.573692) (xy 129.874668 119.188001) (xy 129.874668 121.728001)
+ (xy 129.727382 121.37154) (xy 129.454895 121.098577) (xy 129.098692 120.950668) (xy 128.713001 120.950332) (xy 128.35654 121.097618)
+ (xy 128.083577 121.370105) (xy 127.935668 121.726308) (xy 127.935332 122.111999) (xy 128.082618 122.46846) (xy 128.168919 122.554911)
+ (xy 128.083577 122.640105) (xy 127.935668 122.996308) (xy 127.935332 123.381999) (xy 128.082618 123.73846) (xy 128.168919 123.824911)
+ (xy 128.083577 123.910105) (xy 127.935668 124.266308) (xy 127.935332 124.651999) (xy 128.082618 125.00846) (xy 128.355105 125.281423)
+ (xy 128.67111 125.41264) (xy 128.35654 125.542618) (xy 128.083577 125.815105) (xy 127.935668 126.171308) (xy 127.935332 126.556999)
+ (xy 128.082618 126.91346) (xy 128.355105 127.186423) (xy 128.711308 127.334332) (xy 129.096999 127.334668) (xy 129.45346 127.187382)
+ (xy 129.539911 127.10108) (xy 129.625105 127.186423) (xy 129.981308 127.334332) (xy 130.366999 127.334668) (xy 130.72346 127.187382)
+ (xy 130.809911 127.10108) (xy 130.895105 127.186423) (xy 131.251308 127.334332) (xy 131.636999 127.334668) (xy 131.99346 127.187382)
+ (xy 132.079911 127.10108) (xy 132.165105 127.186423) (xy 132.521308 127.334332) (xy 132.906999 127.334668) (xy 133.26346 127.187382)
+ (xy 133.349911 127.10108) (xy 133.435105 127.186423) (xy 133.791308 127.334332) (xy 134.176999 127.334668) (xy 134.53346 127.187382)
+ (xy 134.619911 127.10108) (xy 134.705105 127.186423) (xy 135.061308 127.334332) (xy 135.446999 127.334668) (xy 135.80346 127.187382)
+ (xy 135.889911 127.10108) (xy 135.975105 127.186423) (xy 136.331308 127.334332) (xy 136.716999 127.334668) (xy 137.07346 127.187382)
+ (xy 137.159911 127.10108) (xy 137.245105 127.186423) (xy 137.601308 127.334332) (xy 137.986999 127.334668) (xy 138.34346 127.187382)
+ (xy 138.607911 126.923391) (xy 138.743705 127.059423) (xy 139.099908 127.207332) (xy 139.485599 127.207668) (xy 139.84206 127.060382)
+ (xy 139.941233 126.96138) (xy 140.039105 127.059423) (xy 140.395308 127.207332) (xy 140.780999 127.207668) (xy 141.13746 127.060382)
+ (xy 141.223911 126.97408) (xy 141.309105 127.059423) (xy 141.665308 127.207332) (xy 142.050999 127.207668) (xy 142.40746 127.060382)
+ (xy 142.493911 126.97408) (xy 142.579105 127.059423) (xy 142.935308 127.207332) (xy 143.320999 127.207668) (xy 143.67746 127.060382)
+ (xy 143.763911 126.97408) (xy 143.849105 127.059423) (xy 144.205308 127.207332) (xy 144.590999 127.207668) (xy 144.94746 127.060382)
+ (xy 145.033911 126.97408) (xy 145.119105 127.059423) (xy 145.475308 127.207332) (xy 145.860999 127.207668) (xy 146.21746 127.060382)
+ (xy 146.458785 126.819477) (xy 146.497618 126.91346) (xy 146.770105 127.186423) (xy 147.126308 127.334332) (xy 147.265237 127.334453)
+ (xy 147.260577 127.339105) (xy 147.112668 127.695308) (xy 147.112332 128.080999) (xy 147.259618 128.43746) (xy 147.532105 128.710423)
+ (xy 147.888308 128.858332) (xy 148.273999 128.858668) (xy 148.63046 128.711382) (xy 148.903423 128.438895) (xy 149.051332 128.082692)
+ (xy 149.051668 127.697001) (xy 149.051668 140.619941) (xy 148.783692 140.508668) (xy 148.398001 140.508332) (xy 148.04154 140.655618)
+ (xy 147.768577 140.928105) (xy 147.620668 141.284308) (xy 147.620332 141.669999) (xy 147.625283 141.681981) (xy 147.615895 141.672577)
+ (xy 147.259692 141.524668) (xy 146.874001 141.524332) (xy 146.51754 141.671618) (xy 146.244577 141.944105) (xy 146.096668 142.300308)
+ (xy 146.096332 142.685999) (xy 146.243618 143.04246) (xy 146.516105 143.315423) (xy 146.872308 143.463332) (xy 147.257999 143.463668)
+ (xy 147.61446 143.316382) (xy 147.887423 143.043895) (xy 148.035332 142.687692) (xy 148.035668 142.302001) (xy 148.030716 142.290018)
+ (xy 148.040105 142.299423) (xy 148.396308 142.447332) (xy 148.781999 142.447668) (xy 149.13846 142.300382) (xy 149.411423 142.027895)
+ (xy 149.559332 141.671692) (xy 149.559668 141.286001) (xy 149.559668 149.584206) (xy 149.418692 149.525668) (xy 149.033001 149.525332)
+ (xy 148.67654 149.672618) (xy 148.403577 149.945105) (xy 148.272359 150.26111) (xy 148.142382 149.94654) (xy 147.869895 149.673577)
+ (xy 147.513692 149.525668) (xy 147.128001 149.525332) (xy 146.77154 149.672618) (xy 146.498577 149.945105) (xy 146.350668 150.301308)
+ (xy 146.350332 150.686999) (xy 146.497618 151.04346) (xy 146.583919 151.129911) (xy 146.498577 151.215105) (xy 146.367359 151.53111)
+ (xy 146.237382 151.21654) (xy 145.964895 150.943577) (xy 145.749668 150.854206) (xy 145.749668 142.048001) (xy 145.602382 141.69154)
+ (xy 145.329895 141.418577) (xy 144.973692 141.270668) (xy 144.588001 141.270332) (xy 144.23154 141.417618) (xy 143.958577 141.690105)
+ (xy 143.810668 142.046308) (xy 143.810332 142.431999) (xy 143.957618 142.78846) (xy 144.230105 143.061423) (xy 144.586308 143.209332)
+ (xy 144.971999 143.209668) (xy 145.32846 143.062382) (xy 145.601423 142.789895) (xy 145.749332 142.433692) (xy 145.749668 142.048001)
+ (xy 145.749668 150.854206) (xy 145.608692 150.795668) (xy 145.223001 150.795332) (xy 144.86654 150.942618) (xy 144.593577 151.215105)
+ (xy 144.462359 151.53111) (xy 144.332382 151.21654) (xy 144.059895 150.943577) (xy 143.703692 150.795668) (xy 143.318001 150.795332)
+ (xy 143.209668 150.840094) (xy 143.209668 142.048001) (xy 143.062382 141.69154) (xy 142.789895 141.418577) (xy 142.433692 141.270668)
+ (xy 142.048001 141.270332) (xy 141.69154 141.417618) (xy 141.418577 141.690105) (xy 141.270668 142.046308) (xy 141.270332 142.431999)
+ (xy 141.417618 142.78846) (xy 141.690105 143.061423) (xy 142.046308 143.209332) (xy 142.431999 143.209668) (xy 142.78846 143.062382)
+ (xy 143.061423 142.789895) (xy 143.209332 142.433692) (xy 143.209668 142.048001) (xy 143.209668 150.840094) (xy 142.96154 150.942618)
+ (xy 142.688577 151.215105) (xy 142.574668 151.489427) (xy 142.574668 150.303001) (xy 142.427382 149.94654) (xy 142.154895 149.673577)
+ (xy 141.798692 149.525668) (xy 141.413001 149.525332) (xy 141.05654 149.672618) (xy 140.783577 149.945105) (xy 140.652359 150.26111)
+ (xy 140.522382 149.94654) (xy 140.249895 149.673577) (xy 140.034668 149.584206) (xy 140.034668 142.048001) (xy 139.887382 141.69154)
+ (xy 139.614895 141.418577) (xy 139.258692 141.270668) (xy 138.873001 141.270332) (xy 138.51654 141.417618) (xy 138.243577 141.690105)
+ (xy 138.095668 142.046308) (xy 138.095332 142.431999) (xy 138.242618 142.78846) (xy 138.515105 143.061423) (xy 138.871308 143.209332)
+ (xy 139.256999 143.209668) (xy 139.61346 143.062382) (xy 139.886423 142.789895) (xy 140.034332 142.433692) (xy 140.034668 142.048001)
+ (xy 140.034668 149.584206) (xy 139.893692 149.525668) (xy 139.508001 149.525332) (xy 139.15154 149.672618) (xy 138.878577 149.945105)
+ (xy 138.747359 150.26111) (xy 138.617382 149.94654) (xy 138.344895 149.673577) (xy 137.988692 149.525668) (xy 137.603001 149.525332)
+ (xy 137.494668 149.570094) (xy 137.494668 142.048001) (xy 137.347382 141.69154) (xy 137.074895 141.418577) (xy 136.718692 141.270668)
+ (xy 136.333001 141.270332) (xy 136.084717 141.37292) (xy 136.224332 141.036692) (xy 136.224668 140.651001) (xy 136.077382 140.29454)
+ (xy 135.804895 140.021577) (xy 135.448692 139.873668) (xy 135.063001 139.873332) (xy 134.70654 140.020618) (xy 134.433577 140.293105)
+ (xy 134.319668 140.567427) (xy 134.319668 139.889001) (xy 134.172382 139.53254) (xy 133.899895 139.259577) (xy 133.543692 139.111668)
+ (xy 133.176668 139.111348) (xy 133.176668 135.571001) (xy 133.029382 135.21454) (xy 132.756895 134.941577) (xy 132.400692 134.793668)
+ (xy 132.015001 134.793332) (xy 131.65854 134.940618) (xy 131.385577 135.213105) (xy 131.237668 135.569308) (xy 131.237332 135.954999)
+ (xy 131.384618 136.31146) (xy 131.657105 136.584423) (xy 132.013308 136.732332) (xy 132.398999 136.732668) (xy 132.75546 136.585382)
+ (xy 133.028423 136.312895) (xy 133.176332 135.956692) (xy 133.176668 135.571001) (xy 133.176668 139.111348) (xy 133.158001 139.111332)
+ (xy 132.80154 139.258618) (xy 132.528577 139.531105) (xy 132.414668 139.805427) (xy 132.414668 138.873001) (xy 132.267382 138.51654)
+ (xy 131.994895 138.243577) (xy 131.638692 138.095668) (xy 131.253001 138.095332) (xy 130.89654 138.242618) (xy 130.810088 138.328919)
+ (xy 130.724895 138.243577) (xy 130.368692 138.095668) (xy 129.983001 138.095332) (xy 129.798374 138.171617) (xy 129.874332 137.988692)
+ (xy 129.874668 137.603001) (xy 129.727382 137.24654) (xy 129.64108 137.160088) (xy 129.726423 137.074895) (xy 129.874332 136.718692)
+ (xy 129.874668 136.333001) (xy 129.727382 135.97654) (xy 129.454895 135.703577) (xy 129.098692 135.555668) (xy 128.713001 135.555332)
+ (xy 128.35654 135.702618) (xy 128.083577 135.975105) (xy 127.935668 136.331308) (xy 127.935332 136.716999) (xy 128.082618 137.07346)
+ (xy 128.168919 137.159911) (xy 128.083577 137.245105) (xy 127.935668 137.601308) (xy 127.935332 137.986999) (xy 128.082618 138.34346)
+ (xy 128.168919 138.429911) (xy 128.083577 138.515105) (xy 127.935668 138.871308) (xy 127.935332 139.256999) (xy 128.082618 139.61346)
+ (xy 128.355105 139.886423) (xy 128.711308 140.034332) (xy 129.096999 140.034668) (xy 129.45346 139.887382) (xy 129.539911 139.80108)
+ (xy 129.625105 139.886423) (xy 129.981308 140.034332) (xy 130.366999 140.034668) (xy 130.72346 139.887382) (xy 130.809911 139.80108)
+ (xy 130.895105 139.886423) (xy 131.251308 140.034332) (xy 131.636999 140.034668) (xy 131.99346 139.887382) (xy 132.266423 139.614895)
+ (xy 132.414332 139.258692) (xy 132.414668 138.873001) (xy 132.414668 139.805427) (xy 132.380668 139.887308) (xy 132.380332 140.272999)
+ (xy 132.527618 140.62946) (xy 132.800105 140.902423) (xy 133.156308 141.050332) (xy 133.541999 141.050668) (xy 133.89846 140.903382)
+ (xy 134.171423 140.630895) (xy 134.319332 140.274692) (xy 134.319668 139.889001) (xy 134.319668 140.567427) (xy 134.285668 140.649308)
+ (xy 134.285332 141.034999) (xy 134.42496 141.372928) (xy 134.178692 141.270668) (xy 133.793001 141.270332) (xy 133.43654 141.417618)
+ (xy 133.163577 141.690105) (xy 133.015668 142.046308) (xy 133.015332 142.431999) (xy 133.162618 142.78846) (xy 133.435105 143.061423)
+ (xy 133.791308 143.209332) (xy 134.176999 143.209668) (xy 134.53346 143.062382) (xy 134.806423 142.789895) (xy 134.954332 142.433692)
+ (xy 134.954668 142.048001) (xy 134.815039 141.710071) (xy 135.061308 141.812332) (xy 135.446999 141.812668) (xy 135.695282 141.710079)
+ (xy 135.555668 142.046308) (xy 135.555332 142.431999) (xy 135.702618 142.78846) (xy 135.975105 143.061423) (xy 136.331308 143.209332)
+ (xy 136.716999 143.209668) (xy 137.07346 143.062382) (xy 137.346423 142.789895) (xy 137.494332 142.433692) (xy 137.494668 142.048001)
+ (xy 137.494668 149.570094) (xy 137.24654 149.672618) (xy 136.973577 149.945105) (xy 136.842359 150.26111) (xy 136.712382 149.94654)
+ (xy 136.439895 149.673577) (xy 136.083692 149.525668) (xy 135.698001 149.525332) (xy 135.34154 149.672618) (xy 135.068577 149.945105)
+ (xy 134.937359 150.26111) (xy 134.807382 149.94654) (xy 134.534895 149.673577) (xy 134.178692 149.525668) (xy 133.793001 149.525332)
+ (xy 133.43654 149.672618) (xy 133.163577 149.945105) (xy 133.032359 150.26111) (xy 132.902382 149.94654) (xy 132.629895 149.673577)
+ (xy 132.414668 149.584206) (xy 132.414668 142.048001) (xy 132.267382 141.69154) (xy 131.994895 141.418577) (xy 131.638692 141.270668)
+ (xy 131.253001 141.270332) (xy 130.89654 141.417618) (xy 130.623577 141.690105) (xy 130.475668 142.046308) (xy 130.475332 142.431999)
+ (xy 130.622618 142.78846) (xy 130.895105 143.061423) (xy 131.251308 143.209332) (xy 131.636999 143.209668) (xy 131.99346 143.062382)
+ (xy 132.266423 142.789895) (xy 132.414332 142.433692) (xy 132.414668 142.048001) (xy 132.414668 149.584206) (xy 132.273692 149.525668)
+ (xy 131.888001 149.525332) (xy 131.53154 149.672618) (xy 131.258577 149.945105) (xy 131.127359 150.26111) (xy 130.997382 149.94654)
+ (xy 130.724895 149.673577) (xy 130.368692 149.525668) (xy 129.983001 149.525332) (xy 129.874668 149.570094) (xy 129.874668 142.048001)
+ (xy 129.727382 141.69154) (xy 129.454895 141.418577) (xy 129.098692 141.270668) (xy 128.713001 141.270332) (xy 128.35654 141.417618)
+ (xy 128.083577 141.690105) (xy 127.935668 142.046308) (xy 127.935332 142.431999) (xy 128.082618 142.78846) (xy 128.355105 143.061423)
+ (xy 128.711308 143.209332) (xy 129.096999 143.209668) (xy 129.45346 143.062382) (xy 129.726423 142.789895) (xy 129.874332 142.433692)
+ (xy 129.874668 142.048001) (xy 129.874668 149.570094) (xy 129.62654 149.672618) (xy 129.493668 149.805258) (xy 129.493668 146.620001)
+ (xy 129.346382 146.26354) (xy 129.073895 145.990577) (xy 128.717692 145.842668) (xy 128.332001 145.842332) (xy 127.97554 145.989618)
+ (xy 127.702577 146.262105) (xy 127.554668 146.618308) (xy 127.554332 147.003999) (xy 127.701618 147.36046) (xy 127.974105 147.633423)
+ (xy 128.330308 147.781332) (xy 128.715999 147.781668) (xy 129.07246 147.634382) (xy 129.345423 147.361895) (xy 129.493332 147.005692)
+ (xy 129.493668 146.620001) (xy 129.493668 149.805258) (xy 129.353577 149.945105) (xy 129.205668 150.301308) (xy 129.205332 150.686999)
+ (xy 129.352618 151.04346) (xy 129.625105 151.316423) (xy 129.981308 151.464332) (xy 130.366999 151.464668) (xy 130.72346 151.317382)
+ (xy 130.996423 151.044895) (xy 131.12764 150.728889) (xy 131.257618 151.04346) (xy 131.530105 151.316423) (xy 131.886308 151.464332)
+ (xy 132.271999 151.464668) (xy 132.62846 151.317382) (xy 132.901423 151.044895) (xy 133.03264 150.728889) (xy 133.162618 151.04346)
+ (xy 133.248919 151.129911) (xy 133.163577 151.215105) (xy 133.015668 151.571308) (xy 133.015332 151.956999) (xy 133.162618 152.31346)
+ (xy 133.435105 152.586423) (xy 133.791308 152.734332) (xy 134.176999 152.734668) (xy 134.53346 152.587382) (xy 134.806423 152.314895)
+ (xy 134.93764 151.998889) (xy 135.067618 152.31346) (xy 135.340105 152.586423) (xy 135.696308 152.734332) (xy 136.081999 152.734668)
+ (xy 136.43846 152.587382) (xy 136.711423 152.314895) (xy 136.859332 151.958692) (xy 136.859668 151.573001) (xy 136.712382 151.21654)
+ (xy 136.62608 151.130088) (xy 136.711423 151.044895) (xy 136.84264 150.728889) (xy 136.972618 151.04346) (xy 137.245105 151.316423)
+ (xy 137.601308 151.464332) (xy 137.986999 151.464668) (xy 138.34346 151.317382) (xy 138.616423 151.044895) (xy 138.74764 150.728889)
+ (xy 138.877618 151.04346) (xy 138.963919 151.129911) (xy 138.878577 151.215105) (xy 138.730668 151.571308) (xy 138.730332 151.956999)
+ (xy 138.877618 152.31346) (xy 139.150105 152.586423) (xy 139.506308 152.734332) (xy 139.891999 152.734668) (xy 140.24846 152.587382)
+ (xy 140.521423 152.314895) (xy 140.669332 151.958692) (xy 140.669668 151.573001) (xy 140.522382 151.21654) (xy 140.43608 151.130088)
+ (xy 140.521423 151.044895) (xy 140.65264 150.728889) (xy 140.782618 151.04346) (xy 141.055105 151.316423) (xy 141.411308 151.464332)
+ (xy 141.796999 151.464668) (xy 142.15346 151.317382) (xy 142.426423 151.044895) (xy 142.574332 150.688692) (xy 142.574668 150.303001)
+ (xy 142.574668 151.489427) (xy 142.540668 151.571308) (xy 142.540332 151.956999) (xy 142.687618 152.31346) (xy 142.960105 152.586423)
+ (xy 143.316308 152.734332) (xy 143.701999 152.734668) (xy 144.05846 152.587382) (xy 144.331423 152.314895) (xy 144.46264 151.998889)
+ (xy 144.592618 152.31346) (xy 144.865105 152.586423) (xy 145.221308 152.734332) (xy 145.606999 152.734668) (xy 145.96346 152.587382)
+ (xy 146.236423 152.314895) (xy 146.36764 151.998889) (xy 146.497618 152.31346) (xy 146.770105 152.586423) (xy 147.126308 152.734332)
+ (xy 147.511999 152.734668) (xy 147.86846 152.587382) (xy 148.141423 152.314895) (xy 148.289332 151.958692) (xy 148.289668 151.573001)
+ (xy 148.142382 151.21654) (xy 148.05608 151.130088) (xy 148.141423 151.044895) (xy 148.27264 150.728889) (xy 148.402618 151.04346)
+ (xy 148.675105 151.316423) (xy 149.031308 151.464332) (xy 149.416999 151.464668) (xy 149.77346 151.317382) (xy 150.046423 151.044895)
+ (xy 150.17764 150.728889) (xy 150.307618 151.04346) (xy 150.393919 151.129911) (xy 150.308577 151.215105) (xy 150.160668 151.571308)
+ (xy 150.160332 151.956999) (xy 150.307618 152.31346) (xy 150.580105 152.586423) (xy 150.936308 152.734332) (xy 151.321999 152.734668)
+ (xy 151.67846 152.587382) (xy 151.951423 152.314895) (xy 152.099332 151.958692) (xy 152.099668 151.573001) (xy 151.952382 151.21654)
+ (xy 151.86608 151.130088) (xy 151.951423 151.044895) (xy 152.08264 150.728889) (xy 152.212618 151.04346) (xy 152.485105 151.316423)
+ (xy 152.841308 151.464332) (xy 153.226999 151.464668) (xy 153.58346 151.317382) (xy 153.856423 151.044895) (xy 153.98764 150.728889)
+ (xy 154.117618 151.04346) (xy 154.390105 151.316423) (xy 154.746308 151.464332) (xy 155.131999 151.464668) (xy 155.48846 151.317382)
+ (xy 155.761423 151.044895) (xy 155.909332 150.688692) (xy 155.909668 150.303001) (xy 155.909668 154.53848) (xy 129.239668 154.685828)
+ (xy 129.239668 151.573001) (xy 129.092382 151.21654) (xy 128.819895 150.943577) (xy 128.463692 150.795668) (xy 128.078001 150.795332)
+ (xy 127.72154 150.942618) (xy 127.448577 151.215105) (xy 127.334668 151.489427) (xy 127.334668 150.303001) (xy 127.187382 149.94654)
+ (xy 126.914895 149.673577) (xy 126.558692 149.525668) (xy 126.173001 149.525332) (xy 125.81654 149.672618) (xy 125.543577 149.945105)
+ (xy 125.412359 150.26111) (xy 125.282382 149.94654) (xy 125.009895 149.673577) (xy 124.667668 149.531471) (xy 124.667668 121.347001)
+ (xy 124.520382 120.99054) (xy 124.247895 120.717577) (xy 123.891692 120.569668) (xy 123.506001 120.569332) (xy 123.14954 120.716618)
+ (xy 123.016668 120.849257) (xy 123.016668 102.678001) (xy 122.869382 102.32154) (xy 122.596895 102.048577) (xy 122.240692 101.900668)
+ (xy 121.855001 101.900332) (xy 121.49854 102.047618) (xy 121.225577 102.320105) (xy 121.077668 102.676308) (xy 121.077332 103.061999)
+ (xy 121.224618 103.41846) (xy 121.497105 103.691423) (xy 121.853308 103.839332) (xy 122.238999 103.839668) (xy 122.59546 103.692382)
+ (xy 122.868423 103.419895) (xy 123.016332 103.063692) (xy 123.016668 102.678001) (xy 123.016668 120.849257) (xy 122.999477 120.866418)
+ (xy 122.850895 120.717577) (xy 122.494692 120.569668) (xy 122.109001 120.569332) (xy 121.75254 120.716618) (xy 121.479577 120.989105)
+ (xy 121.331668 121.345308) (xy 121.331332 121.730999) (xy 121.478618 122.08746) (xy 121.751105 122.360423) (xy 122.107308 122.508332)
+ (xy 122.492999 122.508668) (xy 122.84946 122.361382) (xy 122.999522 122.211581) (xy 123.148105 122.360423) (xy 123.504308 122.508332)
+ (xy 123.889999 122.508668) (xy 124.24646 122.361382) (xy 124.519423 122.088895) (xy 124.667332 121.732692) (xy 124.667668 121.347001)
+ (xy 124.667668 149.531471) (xy 124.653692 149.525668) (xy 124.268001 149.525332) (xy 124.159668 149.570094) (xy 124.159668 123.633001)
+ (xy 124.012382 123.27654) (xy 123.739895 123.003577) (xy 123.383692 122.855668) (xy 122.998001 122.855332) (xy 122.64154 123.002618)
+ (xy 122.368577 123.275105) (xy 122.220668 123.631308) (xy 122.220332 124.016999) (xy 122.367618 124.37346) (xy 122.640105 124.646423)
+ (xy 122.996308 124.794332) (xy 123.381999 124.794668) (xy 123.73846 124.647382) (xy 124.011423 124.374895) (xy 124.159332 124.018692)
+ (xy 124.159668 123.633001) (xy 124.159668 149.570094) (xy 123.91154 149.672618) (xy 123.638577 149.945105) (xy 123.507359 150.26111)
+ (xy 123.377382 149.94654) (xy 123.104895 149.673577) (xy 122.748692 149.525668) (xy 122.363001 149.525332) (xy 122.00654 149.672618)
+ (xy 121.733577 149.945105) (xy 121.602359 150.26111) (xy 121.472382 149.94654) (xy 121.199895 149.673577) (xy 120.857668 149.531471)
+ (xy 120.857668 122.236001) (xy 120.710382 121.87954) (xy 120.476668 121.645417) (xy 120.476668 115.378001) (xy 120.329382 115.02154)
+ (xy 120.056895 114.748577) (xy 119.700692 114.600668) (xy 119.315001 114.600332) (xy 118.95854 114.747618) (xy 118.825668 114.880258)
+ (xy 118.825668 91.121001) (xy 118.825668 87.565001) (xy 118.678382 87.20854) (xy 118.405895 86.935577) (xy 118.049692 86.787668)
+ (xy 117.682712 86.787348) (xy 117.682712 64.400698) (xy 117.496838 63.950848) (xy 117.152962 63.606372) (xy 116.703437 63.419713)
+ (xy 116.216698 63.419288) (xy 115.968245 63.521946) (xy 115.968245 59.917972) (xy 115.75343 59.39808) (xy 115.356013 58.999968)
+ (xy 114.836496 58.784246) (xy 114.273972 58.783755) (xy 113.75408 58.99857) (xy 113.355968 59.395987) (xy 113.140246 59.915504)
+ (xy 113.139755 60.478028) (xy 113.35457 60.99792) (xy 113.751987 61.396032) (xy 114.271504 61.611754) (xy 114.834028 61.612245)
+ (xy 115.35392 61.39743) (xy 115.752032 61.000013) (xy 115.967754 60.480496) (xy 115.968245 59.917972) (xy 115.968245 63.521946)
+ (xy 115.766848 63.605162) (xy 115.422372 63.949038) (xy 115.235713 64.398563) (xy 115.235288 64.885302) (xy 115.421162 65.335152)
+ (xy 115.765038 65.679628) (xy 116.214563 65.866287) (xy 116.701302 65.866712) (xy 117.151152 65.680838) (xy 117.495628 65.336962)
+ (xy 117.682287 64.887437) (xy 117.682712 64.400698) (xy 117.682712 86.787348) (xy 117.664001 86.787332) (xy 117.30754 86.934618)
+ (xy 117.034577 87.207105) (xy 116.886668 87.563308) (xy 116.886332 87.948999) (xy 117.033618 88.30546) (xy 117.306105 88.578423)
+ (xy 117.662308 88.726332) (xy 118.047999 88.726668) (xy 118.40446 88.579382) (xy 118.677423 88.306895) (xy 118.825332 87.950692)
+ (xy 118.825668 87.565001) (xy 118.825668 91.121001) (xy 118.678382 90.76454) (xy 118.405895 90.491577) (xy 118.049692 90.343668)
+ (xy 117.664001 90.343332) (xy 117.30754 90.490618) (xy 117.034577 90.763105) (xy 116.886668 91.119308) (xy 116.886332 91.504999)
+ (xy 117.033618 91.86146) (xy 117.306105 92.134423) (xy 117.662308 92.282332) (xy 118.047999 92.282668) (xy 118.40446 92.135382)
+ (xy 118.677423 91.862895) (xy 118.825332 91.506692) (xy 118.825668 91.121001) (xy 118.825668 114.880258) (xy 118.685577 115.020105)
+ (xy 118.537668 115.376308) (xy 118.537332 115.761999) (xy 118.684618 116.11846) (xy 118.957105 116.391423) (xy 119.313308 116.539332)
+ (xy 119.698999 116.539668) (xy 120.05546 116.392382) (xy 120.328423 116.119895) (xy 120.476332 115.763692) (xy 120.476668 115.378001)
+ (xy 120.476668 121.645417) (xy 120.437895 121.606577) (xy 120.081692 121.458668) (xy 119.696001 121.458332) (xy 119.33954 121.605618)
+ (xy 119.066577 121.878105) (xy 118.918668 122.234308) (xy 118.918546 122.37368) (xy 118.825668 122.280639) (xy 118.825668 117.664001)
+ (xy 118.678382 117.30754) (xy 118.405895 117.034577) (xy 118.049692 116.886668) (xy 117.936668 116.886569) (xy 117.936668 97.090001)
+ (xy 117.789382 96.73354) (xy 117.516895 96.460577) (xy 117.160692 96.312668) (xy 116.775001 96.312332) (xy 116.41854 96.459618)
+ (xy 116.332088 96.545919) (xy 116.246895 96.460577) (xy 115.890692 96.312668) (xy 115.505001 96.312332) (xy 115.39669 96.357084)
+ (xy 115.39669 74.712849) (xy 115.23011 74.309694) (xy 115.146953 74.226391) (xy 115.146953 64.4232) (xy 114.969368 63.970014)
+ (xy 114.942716 63.930128) (xy 114.725766 63.871589) (xy 114.690411 63.906944) (xy 114.690411 63.836234) (xy 114.631872 63.619284)
+ (xy 114.185849 63.424405) (xy 113.6992 63.415047) (xy 113.246014 63.592632) (xy 113.206128 63.619284) (xy 113.147589 63.836234)
+ (xy 113.919 64.607645) (xy 114.690411 63.836234) (xy 114.690411 63.906944) (xy 113.954355 64.643) (xy 114.725766 65.414411)
+ (xy 114.942716 65.355872) (xy 115.137595 64.909849) (xy 115.146953 64.4232) (xy 115.146953 74.226391) (xy 114.921928 74.000974)
+ (xy 114.690411 73.904839) (xy 114.690411 65.449766) (xy 113.919 64.678355) (xy 113.883645 64.71371) (xy 113.883645 64.643)
+ (xy 113.112234 63.871589) (xy 112.895284 63.930128) (xy 112.700405 64.376151) (xy 112.691047 64.8628) (xy 112.868632 65.315986)
+ (xy 112.895284 65.355872) (xy 113.112234 65.414411) (xy 113.883645 64.643) (xy 113.883645 64.71371) (xy 113.147589 65.449766)
+ (xy 113.206128 65.666716) (xy 113.652151 65.861595) (xy 114.1388 65.870953) (xy 114.591986 65.693368) (xy 114.631872 65.666716)
+ (xy 114.690411 65.449766) (xy 114.690411 73.904839) (xy 114.519064 73.83369) (xy 114.082849 73.83331) (xy 113.679694 73.99989)
+ (xy 113.370974 74.308072) (xy 113.20369 74.710936) (xy 113.20331 75.147151) (xy 113.36989 75.550306) (xy 113.678072 75.859026)
+ (xy 114.080936 76.02631) (xy 114.517151 76.02669) (xy 114.920306 75.86011) (xy 115.229026 75.551928) (xy 115.39631 75.149064)
+ (xy 115.39669 74.712849) (xy 115.39669 96.357084) (xy 115.14854 96.459618) (xy 114.875577 96.732105) (xy 114.727668 97.088308)
+ (xy 114.727332 97.473999) (xy 114.874618 97.83046) (xy 115.147105 98.103423) (xy 115.503308 98.251332) (xy 115.888999 98.251668)
+ (xy 116.24546 98.104382) (xy 116.331911 98.01808) (xy 116.417105 98.103423) (xy 116.773308 98.251332) (xy 117.158999 98.251668)
+ (xy 117.51546 98.104382) (xy 117.788423 97.831895) (xy 117.936332 97.475692) (xy 117.936668 97.090001) (xy 117.936668 116.886569)
+ (xy 117.664001 116.886332) (xy 117.30754 117.033618) (xy 117.174668 117.166257) (xy 117.174668 102.170001) (xy 117.027382 101.81354)
+ (xy 116.754895 101.540577) (xy 116.398692 101.392668) (xy 116.013001 101.392332) (xy 115.65654 101.539618) (xy 115.383577 101.812105)
+ (xy 115.235668 102.168308) (xy 115.235332 102.553999) (xy 115.382618 102.91046) (xy 115.655105 103.183423) (xy 116.011308 103.331332)
+ (xy 116.396999 103.331668) (xy 116.75346 103.184382) (xy 117.026423 102.911895) (xy 117.174332 102.555692) (xy 117.174668 102.170001)
+ (xy 117.174668 117.166257) (xy 117.083017 117.257748) (xy 116.898962 117.073372) (xy 116.449437 116.886713) (xy 115.962698 116.886288)
+ (xy 115.523668 117.067691) (xy 115.523668 106.615001) (xy 115.376382 106.25854) (xy 115.103895 105.985577) (xy 114.747692 105.837668)
+ (xy 114.362001 105.837332) (xy 114.253668 105.882094) (xy 114.253668 102.297001) (xy 114.106382 101.94054) (xy 113.833895 101.667577)
+ (xy 113.477692 101.519668) (xy 113.092001 101.519332) (xy 112.73554 101.666618) (xy 112.729668 101.672479) (xy 112.729668 92.518001)
+ (xy 112.729668 86.803001) (xy 112.602668 86.495636) (xy 112.602668 70.039001) (xy 112.455382 69.68254) (xy 112.182895 69.409577)
+ (xy 111.826692 69.261668) (xy 111.441001 69.261332) (xy 111.336953 69.304323) (xy 111.336953 64.4232) (xy 111.159368 63.970014)
+ (xy 111.132716 63.930128) (xy 110.915766 63.871589) (xy 110.888245 63.89911) (xy 110.888245 59.917972) (xy 110.67343 59.39808)
+ (xy 110.276013 58.999968) (xy 109.756496 58.784246) (xy 109.193972 58.783755) (xy 108.67408 58.99857) (xy 108.275968 59.395987)
+ (xy 108.060246 59.915504) (xy 108.059755 60.478028) (xy 108.27457 60.99792) (xy 108.671987 61.396032) (xy 109.191504 61.611754)
+ (xy 109.754028 61.612245) (xy 110.27392 61.39743) (xy 110.672032 61.000013) (xy 110.887754 60.480496) (xy 110.888245 59.917972)
+ (xy 110.888245 63.89911) (xy 110.880411 63.906944) (xy 110.880411 63.836234) (xy 110.821872 63.619284) (xy 110.375849 63.424405)
+ (xy 109.8892 63.415047) (xy 109.436014 63.592632) (xy 109.396128 63.619284) (xy 109.337589 63.836234) (xy 110.109 64.607645)
+ (xy 110.880411 63.836234) (xy 110.880411 63.906944) (xy 110.144355 64.643) (xy 110.915766 65.414411) (xy 111.132716 65.355872)
+ (xy 111.327595 64.909849) (xy 111.336953 64.4232) (xy 111.336953 69.304323) (xy 111.08454 69.408618) (xy 110.880411 69.612391)
+ (xy 110.880411 65.449766) (xy 110.109 64.678355) (xy 110.073645 64.71371) (xy 110.073645 64.643) (xy 109.302234 63.871589)
+ (xy 109.085284 63.930128) (xy 108.890405 64.376151) (xy 108.881047 64.8628) (xy 109.058632 65.315986) (xy 109.085284 65.355872)
+ (xy 109.302234 65.414411) (xy 110.073645 64.643) (xy 110.073645 64.71371) (xy 109.337589 65.449766) (xy 109.396128 65.666716)
+ (xy 109.842151 65.861595) (xy 110.3288 65.870953) (xy 110.781986 65.693368) (xy 110.821872 65.666716) (xy 110.880411 65.449766)
+ (xy 110.880411 69.612391) (xy 110.811577 69.681105) (xy 110.663668 70.037308) (xy 110.663332 70.422999) (xy 110.810618 70.77946)
+ (xy 111.083105 71.052423) (xy 111.439308 71.200332) (xy 111.824999 71.200668) (xy 112.18146 71.053382) (xy 112.454423 70.780895)
+ (xy 112.602332 70.424692) (xy 112.602668 70.039001) (xy 112.602668 86.495636) (xy 112.582382 86.44654) (xy 112.309895 86.173577)
+ (xy 111.953692 86.025668) (xy 111.586668 86.025348) (xy 111.586668 80.961001) (xy 111.439382 80.60454) (xy 111.332668 80.497639)
+ (xy 111.332668 72.833001) (xy 111.185382 72.47654) (xy 110.912895 72.203577) (xy 110.556692 72.055668) (xy 110.171001 72.055332)
+ (xy 109.81454 72.202618) (xy 109.541577 72.475105) (xy 109.393668 72.831308) (xy 109.393332 73.216999) (xy 109.540618 73.57346)
+ (xy 109.813105 73.846423) (xy 110.169308 73.994332) (xy 110.554999 73.994668) (xy 110.91146 73.847382) (xy 111.184423 73.574895)
+ (xy 111.332332 73.218692) (xy 111.332668 72.833001) (xy 111.332668 80.497639) (xy 111.166895 80.331577) (xy 110.810692 80.183668)
+ (xy 110.425001 80.183332) (xy 110.06854 80.330618) (xy 109.795577 80.603105) (xy 109.647668 80.959308) (xy 109.647332 81.344999)
+ (xy 109.794618 81.70146) (xy 110.067105 81.974423) (xy 110.423308 82.122332) (xy 110.808999 82.122668) (xy 111.16546 81.975382)
+ (xy 111.438423 81.702895) (xy 111.586332 81.346692) (xy 111.586668 80.961001) (xy 111.586668 86.025348) (xy 111.568001 86.025332)
+ (xy 111.21154 86.172618) (xy 110.938577 86.445105) (xy 110.790668 86.801308) (xy 110.790332 87.186999) (xy 110.884817 87.415672)
+ (xy 110.785895 87.316577) (xy 110.429692 87.168668) (xy 110.316668 87.168569) (xy 110.316668 85.152001) (xy 110.169382 84.79554)
+ (xy 109.896895 84.522577) (xy 109.540692 84.374668) (xy 109.155001 84.374332) (xy 108.919668 84.471569) (xy 108.919668 81.850001)
+ (xy 108.792712 81.542742) (xy 108.792712 64.400698) (xy 108.606838 63.950848) (xy 108.262962 63.606372) (xy 107.813437 63.419713)
+ (xy 107.326698 63.419288) (xy 106.876848 63.605162) (xy 106.532372 63.949038) (xy 106.345713 64.398563) (xy 106.345288 64.885302)
+ (xy 106.531162 65.335152) (xy 106.875038 65.679628) (xy 107.324563 65.866287) (xy 107.811302 65.866712) (xy 108.261152 65.680838)
+ (xy 108.605628 65.336962) (xy 108.792287 64.887437) (xy 108.792712 64.400698) (xy 108.792712 81.542742) (xy 108.772382 81.49354)
+ (xy 108.665668 81.386639) (xy 108.665668 75.881001) (xy 108.665668 69.150001) (xy 108.518382 68.79354) (xy 108.245895 68.520577)
+ (xy 107.889692 68.372668) (xy 107.504001 68.372332) (xy 107.14754 68.519618) (xy 106.874577 68.792105) (xy 106.726668 69.148308)
+ (xy 106.726332 69.533999) (xy 106.873618 69.89046) (xy 107.146105 70.163423) (xy 107.502308 70.311332) (xy 107.887999 70.311668)
+ (xy 108.24446 70.164382) (xy 108.517423 69.891895) (xy 108.665332 69.535692) (xy 108.665668 69.150001) (xy 108.665668 75.881001)
+ (xy 108.518382 75.52454) (xy 108.245895 75.251577) (xy 107.889692 75.103668) (xy 107.504001 75.103332) (xy 107.14754 75.250618)
+ (xy 106.874577 75.523105) (xy 106.726668 75.879308) (xy 106.726332 76.264999) (xy 106.873618 76.62146) (xy 107.146105 76.894423)
+ (xy 107.502308 77.042332) (xy 107.887999 77.042668) (xy 108.24446 76.895382) (xy 108.517423 76.622895) (xy 108.665332 76.266692)
+ (xy 108.665668 75.881001) (xy 108.665668 81.386639) (xy 108.499895 81.220577) (xy 108.143692 81.072668) (xy 107.758001 81.072332)
+ (xy 107.40154 81.219618) (xy 107.361582 81.259506) (xy 107.248382 80.98554) (xy 106.975895 80.712577) (xy 106.619692 80.564668)
+ (xy 106.510953 80.564573) (xy 106.510953 67.5982) (xy 106.333368 67.145014) (xy 106.306716 67.105128) (xy 106.089766 67.046589)
+ (xy 106.054411 67.081944) (xy 106.054411 67.011234) (xy 105.995872 66.794284) (xy 105.549849 66.599405) (xy 105.0632 66.590047)
+ (xy 104.792223 66.696231) (xy 104.792223 61.340123) (xy 104.596702 60.866925) (xy 104.234979 60.504571) (xy 103.762123 60.308224)
+ (xy 103.250123 60.307777) (xy 102.776925 60.503298) (xy 102.414571 60.865021) (xy 102.2348 61.297956) (xy 102.056702 60.866925)
+ (xy 101.694979 60.504571) (xy 101.222123 60.308224) (xy 100.710123 60.307777) (xy 100.236925 60.503298) (xy 99.874571 60.865021)
+ (xy 99.6948 61.297956) (xy 99.516702 60.866925) (xy 99.154979 60.504571) (xy 98.682123 60.308224) (xy 98.170123 60.307777)
+ (xy 97.696925 60.503298) (xy 97.334571 60.865021) (xy 97.1548 61.297956) (xy 96.976702 60.866925) (xy 96.614979 60.504571)
+ (xy 96.142123 60.308224) (xy 95.630123 60.307777) (xy 95.156925 60.503298) (xy 94.794571 60.865021) (xy 94.632 61.256535)
+ (xy 94.632 60.937429) (xy 94.632 60.728571) (xy 94.552074 60.535611) (xy 94.404389 60.387926) (xy 94.211429 60.308)
+ (xy 93.50125 60.308) (xy 93.37 60.43925) (xy 93.37 61.57) (xy 93.39 61.57) (xy 93.39 61.62)
+ (xy 93.37 61.62) (xy 93.37 62.75075) (xy 93.50125 62.882) (xy 94.211429 62.882) (xy 94.404389 62.802074)
+ (xy 94.552074 62.654389) (xy 94.632 62.461429) (xy 94.632 62.252571) (xy 94.632 61.932703) (xy 94.793298 62.323075)
+ (xy 95.155021 62.685429) (xy 95.627877 62.881776) (xy 96.139877 62.882223) (xy 96.613075 62.686702) (xy 96.975429 62.324979)
+ (xy 97.155199 61.892043) (xy 97.333298 62.323075) (xy 97.695021 62.685429) (xy 98.167877 62.881776) (xy 98.679877 62.882223)
+ (xy 99.153075 62.686702) (xy 99.515429 62.324979) (xy 99.695199 61.892043) (xy 99.873298 62.323075) (xy 100.235021 62.685429)
+ (xy 100.707877 62.881776) (xy 101.219877 62.882223) (xy 101.693075 62.686702) (xy 102.055429 62.324979) (xy 102.235199 61.892043)
+ (xy 102.413298 62.323075) (xy 102.775021 62.685429) (xy 103.247877 62.881776) (xy 103.759877 62.882223) (xy 104.233075 62.686702)
+ (xy 104.595429 62.324979) (xy 104.791776 61.852123) (xy 104.792223 61.340123) (xy 104.792223 66.696231) (xy 104.610014 66.767632)
+ (xy 104.570128 66.794284) (xy 104.511589 67.011234) (xy 105.283 67.782645) (xy 106.054411 67.011234) (xy 106.054411 67.081944)
+ (xy 105.318355 67.818) (xy 106.089766 68.589411) (xy 106.306716 68.530872) (xy 106.501595 68.084849) (xy 106.510953 67.5982)
+ (xy 106.510953 80.564573) (xy 106.5065 80.564569) (xy 106.5065 71.160929) (xy 106.5065 70.952071) (xy 106.5065 69.555071)
+ (xy 106.426574 69.362111) (xy 106.278889 69.214426) (xy 106.085929 69.1345) (xy 106.054411 69.1345) (xy 106.054411 68.624766)
+ (xy 105.283 67.853355) (xy 105.247645 67.88871) (xy 105.247645 67.818) (xy 104.476234 67.046589) (xy 104.259284 67.105128)
+ (xy 104.064405 67.551151) (xy 104.055047 68.0378) (xy 104.232632 68.490986) (xy 104.259284 68.530872) (xy 104.476234 68.589411)
+ (xy 105.247645 67.818) (xy 105.247645 67.88871) (xy 104.511589 68.624766) (xy 104.570128 68.841716) (xy 105.016151 69.036595)
+ (xy 105.5028 69.045953) (xy 105.955986 68.868368) (xy 105.995872 68.841716) (xy 106.054411 68.624766) (xy 106.054411 69.1345)
+ (xy 105.877071 69.1345) (xy 104.480071 69.1345) (xy 104.287111 69.214426) (xy 104.139426 69.362111) (xy 104.0595 69.555071)
+ (xy 104.0595 69.763929) (xy 104.0595 70.176411) (xy 103.927895 70.044577) (xy 103.571692 69.896668) (xy 103.462953 69.896573)
+ (xy 103.462953 65.1852) (xy 103.285368 64.732014) (xy 103.258716 64.692128) (xy 103.041766 64.633589) (xy 103.006411 64.668944)
+ (xy 103.006411 64.598234) (xy 102.947872 64.381284) (xy 102.501849 64.186405) (xy 102.0152 64.177047) (xy 101.562014 64.354632)
+ (xy 101.522128 64.381284) (xy 101.463589 64.598234) (xy 102.235 65.369645) (xy 103.006411 64.598234) (xy 103.006411 64.668944)
+ (xy 102.270355 65.405) (xy 103.041766 66.176411) (xy 103.258716 66.117872) (xy 103.453595 65.671849) (xy 103.462953 65.1852)
+ (xy 103.462953 69.896573) (xy 103.186001 69.896332) (xy 103.006411 69.970536) (xy 103.006411 66.211766) (xy 102.235 65.440355)
+ (xy 102.199645 65.47571) (xy 102.199645 65.405) (xy 101.428234 64.633589) (xy 101.211284 64.692128) (xy 101.016405 65.138151)
+ (xy 101.007047 65.6248) (xy 101.184632 66.077986) (xy 101.211284 66.117872) (xy 101.428234 66.176411) (xy 102.199645 65.405)
+ (xy 102.199645 65.47571) (xy 101.463589 66.211766) (xy 101.522128 66.428716) (xy 101.968151 66.623595) (xy 102.4548 66.632953)
+ (xy 102.907986 66.455368) (xy 102.947872 66.428716) (xy 103.006411 66.211766) (xy 103.006411 69.970536) (xy 102.82954 70.043618)
+ (xy 102.556577 70.316105) (xy 102.408668 70.672308) (xy 102.408332 71.057999) (xy 102.555618 71.41446) (xy 102.828105 71.687423)
+ (xy 103.184308 71.835332) (xy 103.569999 71.835668) (xy 103.92646 71.688382) (xy 104.199423 71.415895) (xy 104.200012 71.414475)
+ (xy 104.287111 71.501574) (xy 104.480071 71.5815) (xy 104.688929 71.5815) (xy 106.085929 71.5815) (xy 106.278889 71.501574)
+ (xy 106.426574 71.353889) (xy 106.5065 71.160929) (xy 106.5065 80.564569) (xy 106.234001 80.564332) (xy 106.113031 80.614315)
+ (xy 106.125332 80.584692) (xy 106.125668 80.199001) (xy 105.978382 79.84254) (xy 105.705895 79.569577) (xy 105.349692 79.421668)
+ (xy 104.964001 79.421332) (xy 104.60754 79.568618) (xy 104.334577 79.841105) (xy 104.186668 80.197308) (xy 104.186332 80.582999)
+ (xy 104.333618 80.93946) (xy 104.606105 81.212423) (xy 104.962308 81.360332) (xy 105.347999 81.360668) (xy 105.468968 81.310684)
+ (xy 105.456668 81.340308) (xy 105.456332 81.725999) (xy 105.603618 82.08246) (xy 105.876105 82.355423) (xy 106.232308 82.503332)
+ (xy 106.617999 82.503668) (xy 106.97446 82.356382) (xy 107.014417 82.316493) (xy 107.127618 82.59046) (xy 107.400105 82.863423)
+ (xy 107.756308 83.011332) (xy 108.141999 83.011668) (xy 108.49846 82.864382) (xy 108.771423 82.591895) (xy 108.919332 82.235692)
+ (xy 108.919668 81.850001) (xy 108.919668 84.471569) (xy 108.79854 84.521618) (xy 108.525577 84.794105) (xy 108.377668 85.150308)
+ (xy 108.377332 85.535999) (xy 108.524618 85.89246) (xy 108.797105 86.165423) (xy 109.153308 86.313332) (xy 109.538999 86.313668)
+ (xy 109.89546 86.166382) (xy 110.168423 85.893895) (xy 110.316332 85.537692) (xy 110.316668 85.152001) (xy 110.316668 87.168569)
+ (xy 110.044001 87.168332) (xy 109.68754 87.315618) (xy 109.414577 87.588105) (xy 109.266668 87.944308) (xy 109.266332 88.329999)
+ (xy 109.413618 88.68646) (xy 109.686105 88.959423) (xy 110.042308 89.107332) (xy 110.427999 89.107668) (xy 110.78446 88.960382)
+ (xy 111.057423 88.687895) (xy 111.205332 88.331692) (xy 111.205668 87.946001) (xy 111.111182 87.717327) (xy 111.210105 87.816423)
+ (xy 111.566308 87.964332) (xy 111.951999 87.964668) (xy 112.30846 87.817382) (xy 112.581423 87.544895) (xy 112.729332 87.188692)
+ (xy 112.729668 86.803001) (xy 112.729668 92.518001) (xy 112.582382 92.16154) (xy 112.309895 91.888577) (xy 111.953692 91.740668)
+ (xy 111.568001 91.740332) (xy 111.21154 91.887618) (xy 110.938577 92.160105) (xy 110.790668 92.516308) (xy 110.790332 92.901999)
+ (xy 110.937618 93.25846) (xy 111.210105 93.531423) (xy 111.566308 93.679332) (xy 111.951999 93.679668) (xy 112.30846 93.532382)
+ (xy 112.581423 93.259895) (xy 112.729332 92.903692) (xy 112.729668 92.518001) (xy 112.729668 101.672479) (xy 112.462577 101.939105)
+ (xy 112.314668 102.295308) (xy 112.314332 102.680999) (xy 112.461618 103.03746) (xy 112.734105 103.310423) (xy 113.090308 103.458332)
+ (xy 113.475999 103.458668) (xy 113.83246 103.311382) (xy 114.105423 103.038895) (xy 114.253332 102.682692) (xy 114.253668 102.297001)
+ (xy 114.253668 105.882094) (xy 114.00554 105.984618) (xy 113.732577 106.257105) (xy 113.584668 106.613308) (xy 113.584332 106.998999)
+ (xy 113.731618 107.35546) (xy 114.004105 107.628423) (xy 114.360308 107.776332) (xy 114.745999 107.776668) (xy 115.10246 107.629382)
+ (xy 115.375423 107.356895) (xy 115.523332 107.000692) (xy 115.523668 106.615001) (xy 115.523668 117.067691) (xy 115.512848 117.072162)
+ (xy 115.168372 117.416038) (xy 114.981713 117.865563) (xy 114.981288 118.352302) (xy 115.167162 118.802152) (xy 115.511038 119.146628)
+ (xy 115.960563 119.333287) (xy 116.447302 119.333712) (xy 116.897152 119.147838) (xy 117.241628 118.803962) (xy 117.297677 118.66898)
+ (xy 117.306105 118.677423) (xy 117.662308 118.825332) (xy 118.047999 118.825668) (xy 118.40446 118.678382) (xy 118.677423 118.405895)
+ (xy 118.825332 118.049692) (xy 118.825668 117.664001) (xy 118.825668 122.280639) (xy 118.659895 122.114577) (xy 118.303692 121.966668)
+ (xy 117.918001 121.966332) (xy 117.56154 122.113618) (xy 117.288577 122.386105) (xy 117.140668 122.742308) (xy 117.140332 123.127999)
+ (xy 117.287618 123.48446) (xy 117.560105 123.757423) (xy 117.916308 123.905332) (xy 118.301999 123.905668) (xy 118.65846 123.758382)
+ (xy 118.931423 123.485895) (xy 119.079332 123.129692) (xy 119.079453 122.990319) (xy 119.338105 123.249423) (xy 119.694308 123.397332)
+ (xy 120.079999 123.397668) (xy 120.43646 123.250382) (xy 120.709423 122.977895) (xy 120.857332 122.621692) (xy 120.857668 122.236001)
+ (xy 120.857668 149.531471) (xy 120.843692 149.525668) (xy 120.458001 149.525332) (xy 120.10154 149.672618) (xy 119.828577 149.945105)
+ (xy 119.697359 150.26111) (xy 119.567382 149.94654) (xy 119.294895 149.673577) (xy 118.938692 149.525668) (xy 118.553001 149.525332)
+ (xy 118.19654 149.672618) (xy 118.063668 149.805258) (xy 118.063668 145.477001) (xy 117.916382 145.12054) (xy 117.643895 144.847577)
+ (xy 117.432953 144.759985) (xy 117.432953 125.5102) (xy 117.255368 125.057014) (xy 117.228716 125.017128) (xy 117.011766 124.958589)
+ (xy 116.976411 124.993944) (xy 116.976411 124.923234) (xy 116.917872 124.706284) (xy 116.471849 124.511405) (xy 115.9852 124.502047)
+ (xy 115.532014 124.679632) (xy 115.492128 124.706284) (xy 115.433589 124.923234) (xy 116.205 125.694645) (xy 116.976411 124.923234)
+ (xy 116.976411 124.993944) (xy 116.240355 125.73) (xy 117.011766 126.501411) (xy 117.228716 126.442872) (xy 117.423595 125.996849)
+ (xy 117.432953 125.5102) (xy 117.432953 144.759985) (xy 117.287692 144.699668) (xy 116.976411 144.699396) (xy 116.976411 126.536766)
+ (xy 116.205 125.765355) (xy 116.169645 125.80071) (xy 116.169645 125.73) (xy 115.398234 124.958589) (xy 115.181284 125.017128)
+ (xy 114.986405 125.463151) (xy 114.977047 125.9498) (xy 115.154632 126.402986) (xy 115.181284 126.442872) (xy 115.398234 126.501411)
+ (xy 116.169645 125.73) (xy 116.169645 125.80071) (xy 115.433589 126.536766) (xy 115.492128 126.753716) (xy 115.938151 126.948595)
+ (xy 116.4248 126.957953) (xy 116.877986 126.780368) (xy 116.917872 126.753716) (xy 116.976411 126.536766) (xy 116.976411 144.699396)
+ (xy 116.902001 144.699332) (xy 116.54554 144.846618) (xy 116.272577 145.119105) (xy 116.124668 145.475308) (xy 116.124332 145.860999)
+ (xy 116.271618 146.21746) (xy 116.544105 146.490423) (xy 116.900308 146.638332) (xy 117.285999 146.638668) (xy 117.64246 146.491382)
+ (xy 117.915423 146.218895) (xy 118.063332 145.862692) (xy 118.063668 145.477001) (xy 118.063668 149.805258) (xy 117.923577 149.945105)
+ (xy 117.775668 150.301308) (xy 117.775332 150.686999) (xy 117.851617 150.871625) (xy 117.668692 150.795668) (xy 117.283001 150.795332)
+ (xy 116.92654 150.942618) (xy 116.653577 151.215105) (xy 116.539668 151.489427) (xy 116.539668 150.303001) (xy 116.392382 149.94654)
+ (xy 116.119895 149.673577) (xy 115.763692 149.525668) (xy 115.378001 149.525332) (xy 115.02154 149.672618) (xy 114.892953 149.80098)
+ (xy 114.892953 125.5102) (xy 114.888712 125.499377) (xy 114.888712 117.867698) (xy 114.702838 117.417848) (xy 114.634668 117.349559)
+ (xy 114.634668 108.393001) (xy 114.487382 108.03654) (xy 114.214895 107.763577) (xy 113.858692 107.615668) (xy 113.473001 107.615332)
+ (xy 113.11654 107.762618) (xy 113.030088 107.848919) (xy 112.944895 107.763577) (xy 112.588692 107.615668) (xy 112.203001 107.615332)
+ (xy 111.84654 107.762618) (xy 111.760088 107.848919) (xy 111.674895 107.763577) (xy 111.318692 107.615668) (xy 110.933001 107.615332)
+ (xy 110.57654 107.762618) (xy 110.490088 107.848919) (xy 110.404895 107.763577) (xy 110.048692 107.615668) (xy 109.663001 107.615332)
+ (xy 109.30654 107.762618) (xy 109.220088 107.848919) (xy 109.134895 107.763577) (xy 108.778692 107.615668) (xy 108.393001 107.615332)
+ (xy 108.03654 107.762618) (xy 107.950088 107.848919) (xy 107.864895 107.763577) (xy 107.508692 107.615668) (xy 107.123001 107.615332)
+ (xy 106.76654 107.762618) (xy 106.680088 107.848919) (xy 106.594895 107.763577) (xy 106.238692 107.615668) (xy 105.853001 107.615332)
+ (xy 105.617668 107.712569) (xy 105.617668 105.853001) (xy 105.470382 105.49654) (xy 105.197895 105.223577) (xy 105.109668 105.186941)
+ (xy 105.109668 91.883001) (xy 104.962382 91.52654) (xy 104.87608 91.440088) (xy 104.961423 91.354895) (xy 105.109332 90.998692)
+ (xy 105.109668 90.613001) (xy 104.962382 90.25654) (xy 104.689895 89.983577) (xy 104.333692 89.835668) (xy 103.948001 89.835332)
+ (xy 103.59154 89.982618) (xy 103.458712 90.115214) (xy 103.458712 72.782698) (xy 103.272838 72.332848) (xy 102.928962 71.988372)
+ (xy 102.479437 71.801713) (xy 101.992698 71.801288) (xy 101.542848 71.987162) (xy 101.198372 72.331038) (xy 101.011713 72.780563)
+ (xy 101.011288 73.267302) (xy 101.197162 73.717152) (xy 101.541038 74.061628) (xy 101.990563 74.248287) (xy 102.477302 74.248712)
+ (xy 102.927152 74.062838) (xy 103.271628 73.718962) (xy 103.458287 73.269437) (xy 103.458712 72.782698) (xy 103.458712 90.115214)
+ (xy 103.318577 90.255105) (xy 103.170668 90.611308) (xy 103.170332 90.996999) (xy 103.246617 91.181625) (xy 103.063692 91.105668)
+ (xy 102.678001 91.105332) (xy 102.32154 91.252618) (xy 102.235088 91.338919) (xy 102.149895 91.253577) (xy 101.793692 91.105668)
+ (xy 101.408001 91.105332) (xy 101.05154 91.252618) (xy 100.965088 91.338919) (xy 100.918712 91.292461) (xy 100.918712 72.782698)
+ (xy 100.918712 65.162698) (xy 100.732838 64.712848) (xy 100.388962 64.368372) (xy 99.939437 64.181713) (xy 99.452698 64.181288)
+ (xy 99.002848 64.367162) (xy 98.658372 64.711038) (xy 98.471713 65.160563) (xy 98.471288 65.647302) (xy 98.657162 66.097152)
+ (xy 99.001038 66.441628) (xy 99.450563 66.628287) (xy 99.937302 66.628712) (xy 100.387152 66.442838) (xy 100.731628 66.098962)
+ (xy 100.918287 65.649437) (xy 100.918712 65.162698) (xy 100.918712 72.782698) (xy 100.732838 72.332848) (xy 100.388962 71.988372)
+ (xy 100.194853 71.907771) (xy 100.283332 71.694692) (xy 100.283668 71.309001) (xy 100.136382 70.95254) (xy 99.863895 70.679577)
+ (xy 99.507692 70.531668) (xy 99.122001 70.531332) (xy 99.10964 70.536439) (xy 99.246423 70.399895) (xy 99.394332 70.043692)
+ (xy 99.394668 69.658001) (xy 99.247382 69.30154) (xy 98.974895 69.028577) (xy 98.618692 68.880668) (xy 98.378712 68.880458)
+ (xy 98.378712 65.162698) (xy 98.192838 64.712848) (xy 97.848962 64.368372) (xy 97.399437 64.181713) (xy 96.912698 64.181288)
+ (xy 96.462848 64.367162) (xy 96.118372 64.711038) (xy 95.931713 65.160563) (xy 95.931288 65.647302) (xy 96.117162 66.097152)
+ (xy 96.461038 66.441628) (xy 96.910563 66.628287) (xy 97.397302 66.628712) (xy 97.847152 66.442838) (xy 98.191628 66.098962)
+ (xy 98.378287 65.649437) (xy 98.378712 65.162698) (xy 98.378712 68.880458) (xy 98.233001 68.880332) (xy 97.87654 69.027618)
+ (xy 97.603577 69.300105) (xy 97.455668 69.656308) (xy 97.455332 70.041999) (xy 97.602618 70.39846) (xy 97.875105 70.671423)
+ (xy 98.231308 70.819332) (xy 98.616999 70.819668) (xy 98.629359 70.81456) (xy 98.492577 70.951105) (xy 98.344668 71.307308)
+ (xy 98.344332 71.692999) (xy 98.491618 72.04946) (xy 98.715638 72.273871) (xy 98.658372 72.331038) (xy 98.471713 72.780563)
+ (xy 98.471288 73.267302) (xy 98.657162 73.717152) (xy 99.001038 74.061628) (xy 99.450563 74.248287) (xy 99.937302 74.248712)
+ (xy 100.387152 74.062838) (xy 100.731628 73.718962) (xy 100.918287 73.269437) (xy 100.918712 72.782698) (xy 100.918712 91.292461)
+ (xy 100.879895 91.253577) (xy 100.664668 91.164206) (xy 100.664668 80.580001) (xy 100.517382 80.22354) (xy 100.244895 79.950577)
+ (xy 99.888692 79.802668) (xy 99.503001 79.802332) (xy 99.293767 79.888784) (xy 99.101895 79.696577) (xy 98.745692 79.548668)
+ (xy 98.378712 79.548348) (xy 98.378712 72.782698) (xy 98.192838 72.332848) (xy 97.848962 71.988372) (xy 97.399437 71.801713)
+ (xy 96.912698 71.801288) (xy 96.462848 71.987162) (xy 96.118372 72.331038) (xy 95.931713 72.780563) (xy 95.931288 73.267302)
+ (xy 96.117162 73.717152) (xy 96.461038 74.061628) (xy 96.910563 74.248287) (xy 97.397302 74.248712) (xy 97.847152 74.062838)
+ (xy 98.191628 73.718962) (xy 98.378287 73.269437) (xy 98.378712 72.782698) (xy 98.378712 79.548348) (xy 98.360001 79.548332)
+ (xy 98.00354 79.695618) (xy 97.730577 79.968105) (xy 97.582668 80.324308) (xy 97.582332 80.709999) (xy 97.729618 81.06646)
+ (xy 98.002105 81.339423) (xy 98.358308 81.487332) (xy 98.743999 81.487668) (xy 98.953232 81.401215) (xy 99.145105 81.593423)
+ (xy 99.501308 81.741332) (xy 99.886999 81.741668) (xy 100.24346 81.594382) (xy 100.516423 81.321895) (xy 100.664332 80.965692)
+ (xy 100.664668 80.580001) (xy 100.664668 91.164206) (xy 100.523692 91.105668) (xy 100.138001 91.105332) (xy 99.78154 91.252618)
+ (xy 99.695088 91.338919) (xy 99.609895 91.253577) (xy 99.253692 91.105668) (xy 98.868001 91.105332) (xy 98.51154 91.252618)
+ (xy 98.505668 91.258479) (xy 98.505668 87.057001) (xy 98.358382 86.70054) (xy 98.085895 86.427577) (xy 97.729692 86.279668)
+ (xy 97.344001 86.279332) (xy 97.108668 86.376569) (xy 97.108668 81.850001) (xy 96.961382 81.49354) (xy 96.688895 81.220577)
+ (xy 96.332692 81.072668) (xy 95.947001 81.072332) (xy 95.838712 81.117075) (xy 95.838712 65.162698) (xy 95.652838 64.712848)
+ (xy 95.308962 64.368372) (xy 94.859437 64.181713) (xy 94.372698 64.181288) (xy 93.922848 64.367162) (xy 93.578372 64.711038)
+ (xy 93.391713 65.160563) (xy 93.391288 65.647302) (xy 93.577162 66.097152) (xy 93.921038 66.441628) (xy 94.370563 66.628287)
+ (xy 94.857302 66.628712) (xy 95.307152 66.442838) (xy 95.651628 66.098962) (xy 95.838287 65.649437) (xy 95.838712 65.162698)
+ (xy 95.838712 81.117075) (xy 95.8385 81.117163) (xy 95.8385 73.827929) (xy 95.8385 73.619071) (xy 95.8385 72.222071)
+ (xy 95.758574 72.029111) (xy 95.610889 71.881426) (xy 95.417929 71.8015) (xy 95.209071 71.8015) (xy 93.812071 71.8015)
+ (xy 93.619111 71.881426) (xy 93.471426 72.029111) (xy 93.3915 72.222071) (xy 93.3915 72.430929) (xy 93.3915 73.827929)
+ (xy 93.471426 74.020889) (xy 93.619111 74.168574) (xy 93.812071 74.2485) (xy 94.020929 74.2485) (xy 95.417929 74.2485)
+ (xy 95.610889 74.168574) (xy 95.758574 74.020889) (xy 95.8385 73.827929) (xy 95.8385 81.117163) (xy 95.59054 81.219618)
+ (xy 95.317577 81.492105) (xy 95.169668 81.848308) (xy 95.169332 82.233999) (xy 95.174595 82.246738) (xy 94.910895 81.982577)
+ (xy 94.554692 81.834668) (xy 94.169001 81.834332) (xy 93.933712 81.93155) (xy 93.933712 75.322698) (xy 93.747838 74.872848)
+ (xy 93.403962 74.528372) (xy 93.32 74.493507) (xy 93.32 62.75075) (xy 93.32 61.62) (xy 93.32 61.57)
+ (xy 93.32 60.43925) (xy 93.18875 60.308) (xy 92.478571 60.308) (xy 92.285611 60.387926) (xy 92.137926 60.535611)
+ (xy 92.058 60.728571) (xy 92.058 60.937429) (xy 92.058 61.43875) (xy 92.18925 61.57) (xy 93.32 61.57)
+ (xy 93.32 61.62) (xy 92.18925 61.62) (xy 92.058 61.75125) (xy 92.058 62.252571) (xy 92.058 62.461429)
+ (xy 92.137926 62.654389) (xy 92.285611 62.802074) (xy 92.478571 62.882) (xy 93.18875 62.882) (xy 93.32 62.75075)
+ (xy 93.32 74.493507) (xy 92.954437 74.341713) (xy 92.467698 74.341288) (xy 92.017848 74.527162) (xy 91.673372 74.871038)
+ (xy 91.486713 75.320563) (xy 91.486288 75.807302) (xy 91.672162 76.257152) (xy 92.016038 76.601628) (xy 92.465563 76.788287)
+ (xy 92.952302 76.788712) (xy 93.402152 76.602838) (xy 93.746628 76.258962) (xy 93.933287 75.809437) (xy 93.933712 75.322698)
+ (xy 93.933712 81.93155) (xy 93.81254 81.981618) (xy 93.539577 82.254105) (xy 93.391668 82.610308) (xy 93.391332 82.995999)
+ (xy 93.538618 83.35246) (xy 93.561419 83.3753) (xy 93.539577 83.397105) (xy 93.391668 83.753308) (xy 93.391332 84.138999)
+ (xy 93.538618 84.49546) (xy 93.811105 84.768423) (xy 94.167308 84.916332) (xy 94.552999 84.916668) (xy 94.90946 84.769382)
+ (xy 95.182423 84.496895) (xy 95.330332 84.140692) (xy 95.330668 83.755001) (xy 95.183382 83.39854) (xy 95.16058 83.375699)
+ (xy 95.182423 83.353895) (xy 95.330332 82.997692) (xy 95.330668 82.612001) (xy 95.325404 82.599261) (xy 95.589105 82.863423)
+ (xy 95.945308 83.011332) (xy 96.330999 83.011668) (xy 96.68746 82.864382) (xy 96.960423 82.591895) (xy 97.108332 82.235692)
+ (xy 97.108668 81.850001) (xy 97.108668 86.376569) (xy 96.98754 86.426618) (xy 96.714577 86.699105) (xy 96.566668 87.055308)
+ (xy 96.566332 87.440999) (xy 96.713618 87.79746) (xy 96.986105 88.070423) (xy 97.342308 88.218332) (xy 97.727999 88.218668)
+ (xy 98.08446 88.071382) (xy 98.357423 87.798895) (xy 98.505332 87.442692) (xy 98.505668 87.057001) (xy 98.505668 91.258479)
+ (xy 98.425088 91.338919) (xy 98.339895 91.253577) (xy 97.983692 91.105668) (xy 97.598001 91.105332) (xy 97.24154 91.252618)
+ (xy 97.155088 91.338919) (xy 97.069895 91.253577) (xy 96.713692 91.105668) (xy 96.328001 91.105332) (xy 95.97154 91.252618)
+ (xy 95.698577 91.525105) (xy 95.550668 91.881308) (xy 95.550332 92.266999) (xy 95.697618 92.62346) (xy 95.970105 92.896423)
+ (xy 96.326308 93.044332) (xy 96.711999 93.044668) (xy 97.06846 92.897382) (xy 97.154911 92.81108) (xy 97.240105 92.896423)
+ (xy 97.596308 93.044332) (xy 97.981999 93.044668) (xy 98.33846 92.897382) (xy 98.424911 92.81108) (xy 98.510105 92.896423)
+ (xy 98.866308 93.044332) (xy 99.251999 93.044668) (xy 99.60846 92.897382) (xy 99.694911 92.81108) (xy 99.780105 92.896423)
+ (xy 100.136308 93.044332) (xy 100.521999 93.044668) (xy 100.87846 92.897382) (xy 100.964911 92.81108) (xy 101.050105 92.896423)
+ (xy 101.406308 93.044332) (xy 101.791999 93.044668) (xy 102.14846 92.897382) (xy 102.234911 92.81108) (xy 102.320105 92.896423)
+ (xy 102.676308 93.044332) (xy 103.061999 93.044668) (xy 103.41846 92.897382) (xy 103.504911 92.81108) (xy 103.590105 92.896423)
+ (xy 103.946308 93.044332) (xy 104.331999 93.044668) (xy 104.68846 92.897382) (xy 104.961423 92.624895) (xy 105.109332 92.268692)
+ (xy 105.109668 91.883001) (xy 105.109668 105.186941) (xy 104.841692 105.075668) (xy 104.456001 105.075332) (xy 104.424676 105.088274)
+ (xy 104.474332 104.968692) (xy 104.474668 104.583001) (xy 104.327382 104.22654) (xy 104.054895 103.953577) (xy 103.966668 103.916941)
+ (xy 103.966668 98.868001) (xy 103.819382 98.51154) (xy 103.669581 98.361477) (xy 103.818423 98.212895) (xy 103.966332 97.856692)
+ (xy 103.966668 97.471001) (xy 103.819382 97.11454) (xy 103.546895 96.841577) (xy 103.190692 96.693668) (xy 102.805001 96.693332)
+ (xy 102.44854 96.840618) (xy 102.175577 97.113105) (xy 102.027668 97.469308) (xy 102.027332 97.854999) (xy 102.174618 98.21146)
+ (xy 102.324418 98.361522) (xy 102.175577 98.510105) (xy 102.027668 98.866308) (xy 102.027332 99.251999) (xy 102.174618 99.60846)
+ (xy 102.447105 99.881423) (xy 102.803308 100.029332) (xy 103.188999 100.029668) (xy 103.54546 99.882382) (xy 103.818423 99.609895)
+ (xy 103.966332 99.253692) (xy 103.966668 98.868001) (xy 103.966668 103.916941) (xy 103.698692 103.805668) (xy 103.313001 103.805332)
+ (xy 102.95654 103.952618) (xy 102.870088 104.038919) (xy 102.784895 103.953577) (xy 102.428692 103.805668) (xy 102.043001 103.805332)
+ (xy 101.68654 103.952618) (xy 101.413577 104.225105) (xy 101.299312 104.500283) (xy 101.133895 104.334577) (xy 100.777692 104.186668)
+ (xy 100.766268 104.186658) (xy 100.766268 103.186001) (xy 100.618982 102.82954) (xy 100.346495 102.556577) (xy 99.990292 102.408668)
+ (xy 99.604601 102.408332) (xy 99.24814 102.555618) (xy 99.047299 102.756108) (xy 98.974895 102.683577) (xy 98.618692 102.535668)
+ (xy 98.233001 102.535332) (xy 97.87654 102.682618) (xy 97.616668 102.942036) (xy 97.616668 102.043001) (xy 97.469382 101.68654)
+ (xy 97.196895 101.413577) (xy 96.840692 101.265668) (xy 96.455001 101.265332) (xy 96.346668 101.310094) (xy 96.346668 96.328001)
+ (xy 96.199382 95.97154) (xy 95.926895 95.698577) (xy 95.570692 95.550668) (xy 95.185001 95.550332) (xy 94.82854 95.697618)
+ (xy 94.555577 95.970105) (xy 94.407668 96.326308) (xy 94.407332 96.711999) (xy 94.554618 97.06846) (xy 94.827105 97.341423)
+ (xy 95.183308 97.489332) (xy 95.568999 97.489668) (xy 95.92546 97.342382) (xy 96.198423 97.069895) (xy 96.346332 96.713692)
+ (xy 96.346668 96.328001) (xy 96.346668 101.310094) (xy 96.118068 101.404549) (xy 96.118068 99.503001) (xy 95.970782 99.14654)
+ (xy 95.698295 98.873577) (xy 95.342092 98.725668) (xy 94.956401 98.725332) (xy 94.59994 98.872618) (xy 94.326977 99.145105)
+ (xy 94.187668 99.480596) (xy 94.187668 95.820001) (xy 94.040382 95.46354) (xy 93.767895 95.190577) (xy 93.411692 95.042668)
+ (xy 93.026001 95.042332) (xy 92.66954 95.189618) (xy 92.396577 95.462105) (xy 92.248668 95.818308) (xy 92.248332 96.203999)
+ (xy 92.395618 96.56046) (xy 92.668105 96.833423) (xy 93.024308 96.981332) (xy 93.409999 96.981668) (xy 93.76646 96.834382)
+ (xy 94.039423 96.561895) (xy 94.187332 96.205692) (xy 94.187668 95.820001) (xy 94.187668 99.480596) (xy 94.179068 99.501308)
+ (xy 94.178732 99.886999) (xy 94.326018 100.24346) (xy 94.598505 100.516423) (xy 94.954708 100.664332) (xy 95.340399 100.664668)
+ (xy 95.69686 100.517382) (xy 95.969823 100.244895) (xy 96.117732 99.888692) (xy 96.118068 99.503001) (xy 96.118068 101.404549)
+ (xy 96.09854 101.412618) (xy 95.825577 101.685105) (xy 95.677668 102.041308) (xy 95.677332 102.426999) (xy 95.824618 102.78346)
+ (xy 96.097105 103.056423) (xy 96.453308 103.204332) (xy 96.838999 103.204668) (xy 97.19546 103.057382) (xy 97.468423 102.784895)
+ (xy 97.616332 102.428692) (xy 97.616668 102.043001) (xy 97.616668 102.942036) (xy 97.603577 102.955105) (xy 97.455668 103.311308)
+ (xy 97.455332 103.696999) (xy 97.602618 104.05346) (xy 97.875105 104.326423) (xy 98.231308 104.474332) (xy 98.616999 104.474668)
+ (xy 98.97346 104.327382) (xy 99.1743 104.126891) (xy 99.246705 104.199423) (xy 99.602908 104.347332) (xy 99.988599 104.347668)
+ (xy 100.34506 104.200382) (xy 100.618023 103.927895) (xy 100.765932 103.571692) (xy 100.766268 103.186001) (xy 100.766268 104.186658)
+ (xy 100.392001 104.186332) (xy 100.03554 104.333618) (xy 99.762577 104.606105) (xy 99.614668 104.962308) (xy 99.614332 105.347999)
+ (xy 99.761618 105.70446) (xy 100.034105 105.977423) (xy 100.390308 106.125332) (xy 100.775999 106.125668) (xy 101.13246 105.978382)
+ (xy 101.405423 105.705895) (xy 101.519687 105.430716) (xy 101.685105 105.596423) (xy 102.041308 105.744332) (xy 102.426999 105.744668)
+ (xy 102.78346 105.597382) (xy 102.869911 105.51108) (xy 102.955105 105.596423) (xy 103.311308 105.744332) (xy 103.696999 105.744668)
+ (xy 103.728323 105.731725) (xy 103.678668 105.851308) (xy 103.678347 106.21865) (xy 103.313001 106.218332) (xy 102.95654 106.365618)
+ (xy 102.683577 106.638105) (xy 102.535668 106.994308) (xy 102.535332 107.379999) (xy 102.682618 107.73646) (xy 102.955105 108.009423)
+ (xy 103.311308 108.157332) (xy 103.696999 108.157668) (xy 104.05346 108.010382) (xy 104.326423 107.737895) (xy 104.474332 107.381692)
+ (xy 104.474652 107.014349) (xy 104.839999 107.014668) (xy 105.19646 106.867382) (xy 105.469423 106.594895) (xy 105.617332 106.238692)
+ (xy 105.617668 105.853001) (xy 105.617668 107.712569) (xy 105.49654 107.762618) (xy 105.223577 108.035105) (xy 105.075668 108.391308)
+ (xy 105.075332 108.776999) (xy 105.222618 109.13346) (xy 105.495105 109.406423) (xy 105.851308 109.554332) (xy 106.236999 109.554668)
+ (xy 106.59346 109.407382) (xy 106.679911 109.32108) (xy 106.765105 109.406423) (xy 107.121308 109.554332) (xy 107.506999 109.554668)
+ (xy 107.86346 109.407382) (xy 107.949911 109.32108) (xy 108.035105 109.406423) (xy 108.391308 109.554332) (xy 108.776999 109.554668)
+ (xy 109.13346 109.407382) (xy 109.219911 109.32108) (xy 109.305105 109.406423) (xy 109.661308 109.554332) (xy 110.046999 109.554668)
+ (xy 110.40346 109.407382) (xy 110.489911 109.32108) (xy 110.575105 109.406423) (xy 110.931308 109.554332) (xy 111.316999 109.554668)
+ (xy 111.67346 109.407382) (xy 111.759911 109.32108) (xy 111.845105 109.406423) (xy 112.201308 109.554332) (xy 112.586999 109.554668)
+ (xy 112.94346 109.407382) (xy 113.029911 109.32108) (xy 113.115105 109.406423) (xy 113.471308 109.554332) (xy 113.856999 109.554668)
+ (xy 114.21346 109.407382) (xy 114.486423 109.134895) (xy 114.634332 108.778692) (xy 114.634668 108.393001) (xy 114.634668 117.349559)
+ (xy 114.358962 117.073372) (xy 113.909437 116.886713) (xy 113.422698 116.886288) (xy 112.972848 117.072162) (xy 112.628372 117.416038)
+ (xy 112.441713 117.865563) (xy 112.441288 118.352302) (xy 112.627162 118.802152) (xy 112.971038 119.146628) (xy 113.420563 119.333287)
+ (xy 113.907302 119.333712) (xy 114.357152 119.147838) (xy 114.701628 118.803962) (xy 114.888287 118.354437) (xy 114.888712 117.867698)
+ (xy 114.888712 125.499377) (xy 114.715368 125.057014) (xy 114.688716 125.017128) (xy 114.471766 124.958589) (xy 114.436411 124.993944)
+ (xy 114.436411 124.923234) (xy 114.377872 124.706284) (xy 113.999668 124.541036) (xy 113.999668 120.458001) (xy 113.852382 120.10154)
+ (xy 113.579895 119.828577) (xy 113.223692 119.680668) (xy 112.838001 119.680332) (xy 112.48154 119.827618) (xy 112.348712 119.960214)
+ (xy 112.348712 117.867698) (xy 112.162838 117.417848) (xy 111.818962 117.073372) (xy 111.369437 116.886713) (xy 110.882698 116.886288)
+ (xy 110.432848 117.072162) (xy 110.088372 117.416038) (xy 109.901713 117.865563) (xy 109.901288 118.352302) (xy 110.087162 118.802152)
+ (xy 110.431038 119.146628) (xy 110.880563 119.333287) (xy 111.367302 119.333712) (xy 111.817152 119.147838) (xy 112.161628 118.803962)
+ (xy 112.348287 118.354437) (xy 112.348712 117.867698) (xy 112.348712 119.960214) (xy 112.208577 120.100105) (xy 112.060668 120.456308)
+ (xy 112.060332 120.841999) (xy 112.207618 121.19846) (xy 112.480105 121.471423) (xy 112.836308 121.619332) (xy 113.221999 121.619668)
+ (xy 113.57846 121.472382) (xy 113.851423 121.199895) (xy 113.999332 120.843692) (xy 113.999668 120.458001) (xy 113.999668 124.541036)
+ (xy 113.931849 124.511405) (xy 113.4452 124.502047) (xy 112.992014 124.679632) (xy 112.952128 124.706284) (xy 112.893589 124.923234)
+ (xy 113.665 125.694645) (xy 114.436411 124.923234) (xy 114.436411 124.993944) (xy 113.700355 125.73) (xy 114.471766 126.501411)
+ (xy 114.688716 126.442872) (xy 114.883595 125.996849) (xy 114.892953 125.5102) (xy 114.892953 149.80098) (xy 114.748577 149.945105)
+ (xy 114.600668 150.301308) (xy 114.600332 150.686999) (xy 114.747618 151.04346) (xy 115.020105 151.316423) (xy 115.376308 151.464332)
+ (xy 115.761999 151.464668) (xy 116.11846 151.317382) (xy 116.391423 151.044895) (xy 116.539332 150.688692) (xy 116.539668 150.303001)
+ (xy 116.539668 151.489427) (xy 116.505668 151.571308) (xy 116.505332 151.956999) (xy 116.652618 152.31346) (xy 116.925105 152.586423)
+ (xy 117.281308 152.734332) (xy 117.666999 152.734668) (xy 118.02346 152.587382) (xy 118.296423 152.314895) (xy 118.444332 151.958692)
+ (xy 118.444668 151.573001) (xy 118.368382 151.388374) (xy 118.551308 151.464332) (xy 118.936999 151.464668) (xy 119.29346 151.317382)
+ (xy 119.566423 151.044895) (xy 119.69764 150.728889) (xy 119.827618 151.04346) (xy 119.913919 151.129911) (xy 119.828577 151.215105)
+ (xy 119.680668 151.571308) (xy 119.680332 151.956999) (xy 119.827618 152.31346) (xy 120.100105 152.586423) (xy 120.456308 152.734332)
+ (xy 120.841999 152.734668) (xy 121.19846 152.587382) (xy 121.471423 152.314895) (xy 121.619332 151.958692) (xy 121.619668 151.573001)
+ (xy 121.472382 151.21654) (xy 121.38608 151.130088) (xy 121.471423 151.044895) (xy 121.60264 150.728889) (xy 121.732618 151.04346)
+ (xy 122.005105 151.316423) (xy 122.361308 151.464332) (xy 122.746999 151.464668) (xy 123.10346 151.317382) (xy 123.376423 151.044895)
+ (xy 123.50764 150.728889) (xy 123.637618 151.04346) (xy 123.723919 151.129911) (xy 123.638577 151.215105) (xy 123.490668 151.571308)
+ (xy 123.490332 151.956999) (xy 123.637618 152.31346) (xy 123.910105 152.586423) (xy 124.266308 152.734332) (xy 124.651999 152.734668)
+ (xy 125.00846 152.587382) (xy 125.281423 152.314895) (xy 125.429332 151.958692) (xy 125.429668 151.573001) (xy 125.282382 151.21654)
+ (xy 125.19608 151.130088) (xy 125.281423 151.044895) (xy 125.41264 150.728889) (xy 125.542618 151.04346) (xy 125.815105 151.316423)
+ (xy 126.171308 151.464332) (xy 126.556999 151.464668) (xy 126.91346 151.317382) (xy 127.186423 151.044895) (xy 127.334332 150.688692)
+ (xy 127.334668 150.303001) (xy 127.334668 151.489427) (xy 127.300668 151.571308) (xy 127.300332 151.956999) (xy 127.447618 152.31346)
+ (xy 127.720105 152.586423) (xy 128.076308 152.734332) (xy 128.461999 152.734668) (xy 128.81846 152.587382) (xy 129.091423 152.314895)
+ (xy 129.239332 151.958692) (xy 129.239668 151.573001) (xy 129.239668 154.685828) (xy 114.436411 154.767614) (xy 114.436411 126.536766)
+ (xy 113.665 125.765355) (xy 113.629645 125.80071) (xy 113.629645 125.73) (xy 112.858234 124.958589) (xy 112.641284 125.017128)
+ (xy 112.446405 125.463151) (xy 112.437047 125.9498) (xy 112.614632 126.402986) (xy 112.641284 126.442872) (xy 112.858234 126.501411)
+ (xy 113.629645 125.73) (xy 113.629645 125.80071) (xy 112.893589 126.536766) (xy 112.952128 126.753716) (xy 113.398151 126.948595)
+ (xy 113.8848 126.957953) (xy 114.337986 126.780368) (xy 114.377872 126.753716) (xy 114.436411 126.536766) (xy 114.436411 154.767614)
+ (xy 113.999668 154.770027) (xy 113.999668 151.573001) (xy 113.852382 151.21654) (xy 113.579895 150.943577) (xy 113.223692 150.795668)
+ (xy 112.838001 150.795332) (xy 112.48154 150.942618) (xy 112.352953 151.07098) (xy 112.352953 125.5102) (xy 112.175368 125.057014)
+ (xy 112.148716 125.017128) (xy 111.931766 124.958589) (xy 111.896411 124.993944) (xy 111.896411 124.923234) (xy 111.837872 124.706284)
+ (xy 111.391849 124.511405) (xy 110.9052 124.502047) (xy 110.452014 124.679632) (xy 110.412128 124.706284) (xy 110.353589 124.923234)
+ (xy 111.125 125.694645) (xy 111.896411 124.923234) (xy 111.896411 124.993944) (xy 111.160355 125.73) (xy 111.931766 126.501411)
+ (xy 112.148716 126.442872) (xy 112.343595 125.996849) (xy 112.352953 125.5102) (xy 112.352953 151.07098) (xy 112.208577 151.215105)
+ (xy 112.060668 151.571308) (xy 112.060332 151.956999) (xy 112.207618 152.31346) (xy 112.480105 152.586423) (xy 112.836308 152.734332)
+ (xy 113.221999 152.734668) (xy 113.57846 152.587382) (xy 113.851423 152.314895) (xy 113.999332 151.958692) (xy 113.999668 151.573001)
+ (xy 113.999668 154.770027) (xy 111.896411 154.781647) (xy 111.896411 126.536766) (xy 111.125 125.765355) (xy 111.089645 125.80071)
+ (xy 111.089645 125.73) (xy 110.318234 124.958589) (xy 110.101284 125.017128) (xy 109.906405 125.463151) (xy 109.897047 125.9498)
+ (xy 110.074632 126.402986) (xy 110.101284 126.442872) (xy 110.318234 126.501411) (xy 111.089645 125.73) (xy 111.089645 125.80071)
+ (xy 110.353589 126.536766) (xy 110.412128 126.753716) (xy 110.858151 126.948595) (xy 111.3448 126.957953) (xy 111.797986 126.780368)
+ (xy 111.837872 126.753716) (xy 111.896411 126.536766) (xy 111.896411 154.781647) (xy 110.507223 154.789322) (xy 110.507223 145.160123)
+ (xy 110.311702 144.686925) (xy 109.949979 144.324571) (xy 109.558464 144.162) (xy 109.877571 144.162) (xy 110.086429 144.162)
+ (xy 110.279389 144.082074) (xy 110.427074 143.934389) (xy 110.507 143.741429) (xy 110.507 143.03125) (xy 110.507 142.71875)
+ (xy 110.507 142.008571) (xy 110.427074 141.815611) (xy 110.279389 141.667926) (xy 110.086429 141.588) (xy 109.877571 141.588)
+ (xy 109.808712 141.588) (xy 109.808712 117.867698) (xy 109.622838 117.417848) (xy 109.278962 117.073372) (xy 108.829437 116.886713)
+ (xy 108.342698 116.886288) (xy 107.892848 117.072162) (xy 107.548372 117.416038) (xy 107.361713 117.865563) (xy 107.361288 118.352302)
+ (xy 107.547162 118.802152) (xy 107.891038 119.146628) (xy 108.340563 119.333287) (xy 108.827302 119.333712) (xy 109.277152 119.147838)
+ (xy 109.621628 118.803962) (xy 109.808287 118.354437) (xy 109.808712 117.867698) (xy 109.808712 141.588) (xy 109.8085 141.588)
+ (xy 109.8085 126.532929) (xy 109.8085 126.324071) (xy 109.8085 125.88625) (xy 109.8085 125.57375) (xy 109.8085 125.135929)
+ (xy 109.8085 124.927071) (xy 109.728574 124.734111) (xy 109.580889 124.586426) (xy 109.387929 124.5065) (xy 108.74125 124.5065)
+ (xy 108.61 124.63775) (xy 108.61 125.705) (xy 109.67725 125.705) (xy 109.8085 125.57375) (xy 109.8085 125.88625)
+ (xy 109.67725 125.755) (xy 108.61 125.755) (xy 108.61 126.82225) (xy 108.74125 126.9535) (xy 109.387929 126.9535)
+ (xy 109.580889 126.873574) (xy 109.728574 126.725889) (xy 109.8085 126.532929) (xy 109.8085 141.588) (xy 109.37625 141.588)
+ (xy 109.245 141.71925) (xy 109.245 142.85) (xy 110.37575 142.85) (xy 110.507 142.71875) (xy 110.507 143.03125)
+ (xy 110.37575 142.9) (xy 109.245 142.9) (xy 109.245 142.92) (xy 109.195 142.92) (xy 109.195 142.9)
+ (xy 109.195 142.85) (xy 109.195 141.71925) (xy 109.06375 141.588) (xy 108.562429 141.588) (xy 108.56 141.588)
+ (xy 108.56 126.82225) (xy 108.56 125.755) (xy 108.56 125.705) (xy 108.56 124.63775) (xy 108.42875 124.5065)
+ (xy 107.782071 124.5065) (xy 107.589111 124.586426) (xy 107.441426 124.734111) (xy 107.3615 124.927071) (xy 107.3615 125.135929)
+ (xy 107.3615 125.57375) (xy 107.49275 125.705) (xy 108.56 125.705) (xy 108.56 125.755) (xy 107.49275 125.755)
+ (xy 107.3615 125.88625) (xy 107.3615 126.324071) (xy 107.3615 126.532929) (xy 107.441426 126.725889) (xy 107.589111 126.873574)
+ (xy 107.782071 126.9535) (xy 108.42875 126.9535) (xy 108.56 126.82225) (xy 108.56 141.588) (xy 108.353571 141.588)
+ (xy 108.160611 141.667926) (xy 108.012926 141.815611) (xy 107.933 142.008571) (xy 107.933 142.71875) (xy 108.06425 142.85)
+ (xy 109.195 142.85) (xy 109.195 142.9) (xy 108.06425 142.9) (xy 107.933 143.03125) (xy 107.933 143.741429)
+ (xy 108.012926 143.934389) (xy 108.160611 144.082074) (xy 108.353571 144.162) (xy 108.562429 144.162) (xy 108.882296 144.162)
+ (xy 108.491925 144.323298) (xy 108.129571 144.685021) (xy 107.994881 145.009389) (xy 107.883382 144.73954) (xy 107.610895 144.466577)
+ (xy 107.254692 144.318668) (xy 106.869001 144.318332) (xy 106.633712 144.41555) (xy 106.633712 142.632698) (xy 106.633712 135.647698)
+ (xy 106.633712 126.757698) (xy 106.447838 126.307848) (xy 106.103962 125.963372) (xy 105.654437 125.776713) (xy 105.167698 125.776288)
+ (xy 104.717848 125.962162) (xy 104.373372 126.306038) (xy 104.186713 126.755563) (xy 104.186288 127.242302) (xy 104.372162 127.692152)
+ (xy 104.716038 128.036628) (xy 105.165563 128.223287) (xy 105.652302 128.223712) (xy 106.102152 128.037838) (xy 106.446628 127.693962)
+ (xy 106.633287 127.244437) (xy 106.633712 126.757698) (xy 106.633712 135.647698) (xy 106.447838 135.197848) (xy 106.103962 134.853372)
+ (xy 105.654437 134.666713) (xy 105.167698 134.666288) (xy 104.717848 134.852162) (xy 104.373372 135.196038) (xy 104.186713 135.645563)
+ (xy 104.186288 136.132302) (xy 104.372162 136.582152) (xy 104.716038 136.926628) (xy 105.165563 137.113287) (xy 105.652302 137.113712)
+ (xy 106.102152 136.927838) (xy 106.446628 136.583962) (xy 106.633287 136.134437) (xy 106.633712 135.647698) (xy 106.633712 142.632698)
+ (xy 106.447838 142.182848) (xy 106.103962 141.838372) (xy 105.654437 141.651713) (xy 105.167698 141.651288) (xy 104.717848 141.837162)
+ (xy 104.373372 142.181038) (xy 104.186713 142.630563) (xy 104.186288 143.117302) (xy 104.372162 143.567152) (xy 104.716038 143.911628)
+ (xy 105.165563 144.098287) (xy 105.652302 144.098712) (xy 106.102152 143.912838) (xy 106.446628 143.568962) (xy 106.633287 143.119437)
+ (xy 106.633712 142.632698) (xy 106.633712 144.41555) (xy 106.51254 144.465618) (xy 106.239577 144.738105) (xy 106.091668 145.094308)
+ (xy 106.091595 145.177793) (xy 105.857692 145.080668) (xy 105.472001 145.080332) (xy 105.351031 145.130315) (xy 105.363332 145.100692)
+ (xy 105.363668 144.715001) (xy 105.216382 144.35854) (xy 104.943895 144.085577) (xy 104.587692 143.937668) (xy 104.202001 143.937332)
+ (xy 104.093712 143.982075) (xy 104.093712 142.632698) (xy 104.093712 135.647698) (xy 104.093712 126.757698) (xy 103.907838 126.307848)
+ (xy 103.563962 125.963372) (xy 103.114437 125.776713) (xy 102.627698 125.776288) (xy 102.177848 125.962162) (xy 101.833372 126.306038)
+ (xy 101.646713 126.755563) (xy 101.646288 127.242302) (xy 101.832162 127.692152) (xy 102.176038 128.036628) (xy 102.625563 128.223287)
+ (xy 103.112302 128.223712) (xy 103.562152 128.037838) (xy 103.906628 127.693962) (xy 104.093287 127.244437) (xy 104.093712 126.757698)
+ (xy 104.093712 135.647698) (xy 103.907838 135.197848) (xy 103.563962 134.853372) (xy 103.114437 134.666713) (xy 102.627698 134.666288)
+ (xy 102.177848 134.852162) (xy 101.833372 135.196038) (xy 101.646713 135.645563) (xy 101.646288 136.132302) (xy 101.832162 136.582152)
+ (xy 102.176038 136.926628) (xy 102.625563 137.113287) (xy 103.112302 137.113712) (xy 103.562152 136.927838) (xy 103.906628 136.583962)
+ (xy 104.093287 136.134437) (xy 104.093712 135.647698) (xy 104.093712 142.632698) (xy 103.907838 142.182848) (xy 103.563962 141.838372)
+ (xy 103.114437 141.651713) (xy 102.627698 141.651288) (xy 102.177848 141.837162) (xy 101.833372 142.181038) (xy 101.646713 142.630563)
+ (xy 101.646288 143.117302) (xy 101.832162 143.567152) (xy 102.176038 143.911628) (xy 102.625563 144.098287) (xy 103.112302 144.098712)
+ (xy 103.562152 143.912838) (xy 103.906628 143.568962) (xy 104.093287 143.119437) (xy 104.093712 142.632698) (xy 104.093712 143.982075)
+ (xy 103.84554 144.084618) (xy 103.572577 144.357105) (xy 103.424668 144.713308) (xy 103.424332 145.098999) (xy 103.571618 145.45546)
+ (xy 103.844105 145.728423) (xy 104.200308 145.876332) (xy 104.585999 145.876668) (xy 104.706968 145.826684) (xy 104.694668 145.856308)
+ (xy 104.694332 146.241999) (xy 104.841618 146.59846) (xy 105.114105 146.871423) (xy 105.470308 147.019332) (xy 105.855999 147.019668)
+ (xy 106.21246 146.872382) (xy 106.485423 146.599895) (xy 106.633332 146.243692) (xy 106.633404 146.160206) (xy 106.867308 146.257332)
+ (xy 107.252999 146.257668) (xy 107.60946 146.110382) (xy 107.882423 145.837895) (xy 107.942459 145.693311) (xy 108.128298 146.143075)
+ (xy 108.490021 146.505429) (xy 108.962877 146.701776) (xy 109.474877 146.702223) (xy 109.948075 146.506702) (xy 110.310429 146.144979)
+ (xy 110.506776 145.672123) (xy 110.507223 145.160123) (xy 110.507223 154.789322) (xy 107.649668 154.80511) (xy 107.649668 152.843001)
+ (xy 107.502382 152.48654) (xy 107.229895 152.213577) (xy 106.873692 152.065668) (xy 106.488001 152.065332) (xy 106.13154 152.212618)
+ (xy 105.998668 152.345258) (xy 105.998668 148.525001) (xy 105.851382 148.16854) (xy 105.578895 147.895577) (xy 105.222692 147.747668)
+ (xy 104.837001 147.747332) (xy 104.48054 147.894618) (xy 104.207577 148.167105) (xy 104.059668 148.523308) (xy 104.059419 148.807985)
+ (xy 103.952692 148.763668) (xy 103.567001 148.763332) (xy 103.532592 148.777549) (xy 103.438382 148.54954) (xy 103.165895 148.276577)
+ (xy 102.809692 148.128668) (xy 102.424001 148.128332) (xy 102.06754 148.275618) (xy 101.794577 148.548105) (xy 101.646668 148.904308)
+ (xy 101.646332 149.289999) (xy 101.793618 149.64646) (xy 102.066105 149.919423) (xy 102.422308 150.067332) (xy 102.807999 150.067668)
+ (xy 102.842407 150.05345) (xy 102.936618 150.28146) (xy 103.209105 150.554423) (xy 103.565308 150.702332) (xy 103.950999 150.702668)
+ (xy 104.30746 150.555382) (xy 104.580423 150.282895) (xy 104.728332 149.926692) (xy 104.72858 149.642014) (xy 104.835308 149.686332)
+ (xy 105.220999 149.686668) (xy 105.57746 149.539382) (xy 105.850423 149.266895) (xy 105.998332 148.910692) (xy 105.998668 148.525001)
+ (xy 105.998668 152.345258) (xy 105.858577 152.485105) (xy 105.710668 152.841308) (xy 105.710332 153.226999) (xy 105.857618 153.58346)
+ (xy 106.130105 153.856423) (xy 106.486308 154.004332) (xy 106.871999 154.004668) (xy 107.22846 153.857382) (xy 107.501423 153.584895)
+ (xy 107.649332 153.228692) (xy 107.649668 152.843001) (xy 107.649668 154.80511) (xy 105.109668 154.819143) (xy 105.109668 152.843001)
+ (xy 104.962382 152.48654) (xy 104.689895 152.213577) (xy 104.333692 152.065668) (xy 103.948001 152.065332) (xy 103.59154 152.212618)
+ (xy 103.318577 152.485105) (xy 103.170668 152.841308) (xy 103.170332 153.226999) (xy 103.317618 153.58346) (xy 103.590105 153.856423)
+ (xy 103.946308 154.004332) (xy 104.331999 154.004668) (xy 104.68846 153.857382) (xy 104.961423 153.584895) (xy 105.109332 153.228692)
+ (xy 105.109668 152.843001) (xy 105.109668 154.819143) (xy 101.934668 154.836684) (xy 101.934668 151.573001) (xy 101.787382 151.21654)
+ (xy 101.553712 150.982461) (xy 101.553712 142.632698) (xy 101.553712 135.647698) (xy 101.553712 126.757698) (xy 101.367838 126.307848)
+ (xy 101.023962 125.963372) (xy 100.574437 125.776713) (xy 100.087698 125.776288) (xy 99.648668 125.957691) (xy 99.648668 110.679001)
+ (xy 99.501382 110.32254) (xy 99.228895 110.049577) (xy 98.872692 109.901668) (xy 98.632668 109.901458) (xy 98.632668 106.615001)
+ (xy 98.485382 106.25854) (xy 98.212895 105.985577) (xy 97.856692 105.837668) (xy 97.471001 105.837332) (xy 97.11454 105.984618)
+ (xy 96.841577 106.257105) (xy 96.693668 106.613308) (xy 96.693332 106.998999) (xy 96.840618 107.35546) (xy 97.113105 107.628423)
+ (xy 97.469308 107.776332) (xy 97.854999 107.776668) (xy 98.21146 107.629382) (xy 98.484423 107.356895) (xy 98.632332 107.000692)
+ (xy 98.632668 106.615001) (xy 98.632668 109.901458) (xy 98.487001 109.901332) (xy 98.13054 110.048618) (xy 97.857577 110.321105)
+ (xy 97.709668 110.677308) (xy 97.709332 111.062999) (xy 97.856618 111.41946) (xy 98.129105 111.692423) (xy 98.485308 111.840332)
+ (xy 98.870999 111.840668) (xy 99.22746 111.693382) (xy 99.500423 111.420895) (xy 99.648332 111.064692) (xy 99.648668 110.679001)
+ (xy 99.648668 125.957691) (xy 99.637848 125.962162) (xy 99.293372 126.306038) (xy 99.106713 126.755563) (xy 99.106288 127.242302)
+ (xy 99.292162 127.692152) (xy 99.636038 128.036628) (xy 100.085563 128.223287) (xy 100.572302 128.223712) (xy 101.022152 128.037838)
+ (xy 101.366628 127.693962) (xy 101.553287 127.244437) (xy 101.553712 126.757698) (xy 101.553712 135.647698) (xy 101.367838 135.197848)
+ (xy 101.023962 134.853372) (xy 100.574437 134.666713) (xy 100.087698 134.666288) (xy 99.637848 134.852162) (xy 99.293372 135.196038)
+ (xy 99.106713 135.645563) (xy 99.106288 136.132302) (xy 99.292162 136.582152) (xy 99.636038 136.926628) (xy 100.085563 137.113287)
+ (xy 100.572302 137.113712) (xy 101.022152 136.927838) (xy 101.366628 136.583962) (xy 101.553287 136.134437) (xy 101.553712 135.647698)
+ (xy 101.553712 142.632698) (xy 101.367838 142.182848) (xy 101.023962 141.838372) (xy 100.574437 141.651713) (xy 100.087698 141.651288)
+ (xy 99.637848 141.837162) (xy 99.293372 142.181038) (xy 99.106713 142.630563) (xy 99.106288 143.117302) (xy 99.292162 143.567152)
+ (xy 99.636038 143.911628) (xy 100.085563 144.098287) (xy 100.572302 144.098712) (xy 101.022152 143.912838) (xy 101.366628 143.568962)
+ (xy 101.553287 143.119437) (xy 101.553712 142.632698) (xy 101.553712 150.982461) (xy 101.514895 150.943577) (xy 101.158692 150.795668)
+ (xy 100.773001 150.795332) (xy 100.41654 150.942618) (xy 100.143577 151.215105) (xy 99.995668 151.571308) (xy 99.995332 151.956999)
+ (xy 100.142618 152.31346) (xy 100.415105 152.586423) (xy 100.771308 152.734332) (xy 101.156999 152.734668) (xy 101.51346 152.587382)
+ (xy 101.786423 152.314895) (xy 101.934332 151.958692) (xy 101.934668 151.573001) (xy 101.934668 154.836684) (xy 100.029668 154.847209)
+ (xy 100.029668 152.843001) (xy 99.882382 152.48654) (xy 99.609895 152.213577) (xy 99.253692 152.065668) (xy 99.013712 152.065458)
+ (xy 99.013712 142.632698) (xy 99.013712 135.647698) (xy 99.013712 126.757698) (xy 98.827838 126.307848) (xy 98.483962 125.963372)
+ (xy 98.124668 125.81418) (xy 98.124668 113.473001) (xy 97.977382 113.11654) (xy 97.704895 112.843577) (xy 97.348692 112.695668)
+ (xy 96.963001 112.695332) (xy 96.60654 112.842618) (xy 96.333577 113.115105) (xy 96.185668 113.471308) (xy 96.185332 113.856999)
+ (xy 96.332618 114.21346) (xy 96.605105 114.486423) (xy 96.961308 114.634332) (xy 97.346999 114.634668) (xy 97.70346 114.487382)
+ (xy 97.976423 114.214895) (xy 98.124332 113.858692) (xy 98.124668 113.473001) (xy 98.124668 125.81418) (xy 98.034437 125.776713)
+ (xy 97.547698 125.776288) (xy 97.097848 125.962162) (xy 96.753372 126.306038) (xy 96.566713 126.755563) (xy 96.566288 127.242302)
+ (xy 96.752162 127.692152) (xy 97.096038 128.036628) (xy 97.545563 128.223287) (xy 98.032302 128.223712) (xy 98.482152 128.037838)
+ (xy 98.826628 127.693962) (xy 99.013287 127.244437) (xy 99.013712 126.757698) (xy 99.013712 135.647698) (xy 98.827838 135.197848)
+ (xy 98.483962 134.853372) (xy 98.034437 134.666713) (xy 97.547698 134.666288) (xy 97.097848 134.852162) (xy 96.753372 135.196038)
+ (xy 96.566713 135.645563) (xy 96.566288 136.132302) (xy 96.752162 136.582152) (xy 97.096038 136.926628) (xy 97.545563 137.113287)
+ (xy 98.032302 137.113712) (xy 98.482152 136.927838) (xy 98.826628 136.583962) (xy 99.013287 136.134437) (xy 99.013712 135.647698)
+ (xy 99.013712 142.632698) (xy 98.827838 142.182848) (xy 98.483962 141.838372) (xy 98.034437 141.651713) (xy 97.547698 141.651288)
+ (xy 97.097848 141.837162) (xy 96.753372 142.181038) (xy 96.566713 142.630563) (xy 96.566288 143.117302) (xy 96.752162 143.567152)
+ (xy 97.096038 143.911628) (xy 97.545563 144.098287) (xy 98.032302 144.098712) (xy 98.482152 143.912838) (xy 98.826628 143.568962)
+ (xy 99.013287 143.119437) (xy 99.013712 142.632698) (xy 99.013712 152.065458) (xy 98.868001 152.065332) (xy 98.51154 152.212618)
+ (xy 98.238577 152.485105) (xy 98.090668 152.841308) (xy 98.090332 153.226999) (xy 98.237618 153.58346) (xy 98.510105 153.856423)
+ (xy 98.866308 154.004332) (xy 99.251999 154.004668) (xy 99.60846 153.857382) (xy 99.881423 153.584895) (xy 100.029332 153.228692)
+ (xy 100.029668 152.843001) (xy 100.029668 154.847209) (xy 96.473712 154.866855) (xy 96.473712 142.632698) (xy 96.473712 135.647698)
+ (xy 96.473712 126.757698) (xy 96.287838 126.307848) (xy 95.943962 125.963372) (xy 95.494437 125.776713) (xy 95.007698 125.776288)
+ (xy 94.557848 125.962162) (xy 94.213372 126.306038) (xy 94.026713 126.755563) (xy 94.026288 127.242302) (xy 94.212162 127.692152)
+ (xy 94.556038 128.036628) (xy 95.005563 128.223287) (xy 95.492302 128.223712) (xy 95.942152 128.037838) (xy 96.286628 127.693962)
+ (xy 96.473287 127.244437) (xy 96.473712 126.757698) (xy 96.473712 135.647698) (xy 96.287838 135.197848) (xy 95.943962 134.853372)
+ (xy 95.494437 134.666713) (xy 95.007698 134.666288) (xy 94.557848 134.852162) (xy 94.213372 135.196038) (xy 94.026713 135.645563)
+ (xy 94.026288 136.132302) (xy 94.212162 136.582152) (xy 94.556038 136.926628) (xy 95.005563 137.113287) (xy 95.492302 137.113712)
+ (xy 95.942152 136.927838) (xy 96.286628 136.583962) (xy 96.473287 136.134437) (xy 96.473712 135.647698) (xy 96.473712 142.632698)
+ (xy 96.287838 142.182848) (xy 95.943962 141.838372) (xy 95.494437 141.651713) (xy 95.007698 141.651288) (xy 94.557848 141.837162)
+ (xy 94.213372 142.181038) (xy 94.026713 142.630563) (xy 94.026288 143.117302) (xy 94.212162 143.567152) (xy 94.556038 143.911628)
+ (xy 95.005563 144.098287) (xy 95.492302 144.098712) (xy 95.942152 143.912838) (xy 96.286628 143.568962) (xy 96.473287 143.119437)
+ (xy 96.473712 142.632698) (xy 96.473712 154.866855) (xy 95.125 154.874307) (xy 95.125 154.376553) (xy 94.614367 154.37017)
+ (xy 94.600789 154.361097) (xy 94.361 154.3134) (xy 93.933712 154.3134) (xy 93.933712 142.632698) (xy 93.933712 135.647698)
+ (xy 93.933712 126.757698) (xy 93.747838 126.307848) (xy 93.403962 125.963372) (xy 93.298712 125.919668) (xy 93.298712 117.232698)
+ (xy 93.298712 114.692698) (xy 93.298712 112.152698) (xy 93.298712 109.612698) (xy 93.298712 107.072698) (xy 93.298712 104.532698)
+ (xy 93.298712 101.992698) (xy 93.298712 99.452698) (xy 93.112838 99.002848) (xy 92.768962 98.658372) (xy 92.319437 98.471713)
+ (xy 91.832698 98.471288) (xy 91.3935 98.65276) (xy 91.3935 76.367929) (xy 91.3935 76.159071) (xy 91.3935 74.762071)
+ (xy 91.313574 74.569111) (xy 91.165889 74.421426) (xy 90.972929 74.3415) (xy 90.764071 74.3415) (xy 90.63169 74.3415)
+ (xy 90.63169 63.282849) (xy 90.46511 62.879694) (xy 90.156928 62.570974) (xy 89.754064 62.40369) (xy 89.317849 62.40331)
+ (xy 88.914694 62.56989) (xy 88.605974 62.878072) (xy 88.43869 63.280936) (xy 88.43831 63.717151) (xy 88.60489 64.120306)
+ (xy 88.913072 64.429026) (xy 89.315936 64.59631) (xy 89.752151 64.59669) (xy 90.155306 64.43011) (xy 90.464026 64.121928)
+ (xy 90.63131 63.719064) (xy 90.63169 63.282849) (xy 90.63169 74.3415) (xy 89.996668 74.3415) (xy 89.996668 66.610001)
+ (xy 89.849382 66.25354) (xy 89.576895 65.980577) (xy 89.220692 65.832668) (xy 88.835001 65.832332) (xy 88.47854 65.979618)
+ (xy 88.205577 66.252105) (xy 88.057668 66.608308) (xy 88.057332 66.993999) (xy 88.204618 67.35046) (xy 88.477105 67.623423)
+ (xy 88.833308 67.771332) (xy 89.218999 67.771668) (xy 89.57546 67.624382) (xy 89.848423 67.351895) (xy 89.996332 66.995692)
+ (xy 89.996668 66.610001) (xy 89.996668 74.3415) (xy 89.367071 74.3415) (xy 89.174111 74.421426) (xy 89.026426 74.569111)
+ (xy 88.9465 74.762071) (xy 88.9465 74.970929) (xy 88.9465 76.367929) (xy 89.026426 76.560889) (xy 89.174111 76.708574)
+ (xy 89.367071 76.7885) (xy 89.575929 76.7885) (xy 90.972929 76.7885) (xy 91.165889 76.708574) (xy 91.313574 76.560889)
+ (xy 91.3935 76.367929) (xy 91.3935 98.65276) (xy 91.382848 98.657162) (xy 91.266668 98.773139) (xy 91.266668 82.993001)
+ (xy 91.119382 82.63654) (xy 90.846895 82.363577) (xy 90.490692 82.215668) (xy 90.105001 82.215332) (xy 89.74854 82.362618)
+ (xy 89.488712 82.621992) (xy 89.488712 81.672698) (xy 89.4885 81.672184) (xy 89.4885 80.177929) (xy 89.4885 79.969071)
+ (xy 89.4885 78.572071) (xy 89.408574 78.379111) (xy 89.260889 78.231426) (xy 89.067929 78.1515) (xy 88.859071 78.1515)
+ (xy 88.286913 78.1515) (xy 88.286913 68.985071) (xy 88.100582 68.50818) (xy 88.071106 68.464065) (xy 87.847558 68.397797)
+ (xy 87.812203 68.433152) (xy 87.812203 68.362442) (xy 87.745935 68.138894) (xy 87.276967 67.933438) (xy 86.765071 67.923087)
+ (xy 86.28818 68.109418) (xy 86.244065 68.138894) (xy 86.177797 68.362442) (xy 86.995 69.179645) (xy 87.812203 68.362442)
+ (xy 87.812203 68.433152) (xy 87.030355 69.215) (xy 87.847558 70.032203) (xy 88.071106 69.965935) (xy 88.276562 69.496967)
+ (xy 88.286913 68.985071) (xy 88.286913 78.1515) (xy 87.812203 78.1515) (xy 87.812203 70.067558) (xy 86.995 69.250355)
+ (xy 86.959645 69.28571) (xy 86.959645 69.215) (xy 86.142442 68.397797) (xy 85.918894 68.464065) (xy 85.713438 68.933033)
+ (xy 85.703087 69.444929) (xy 85.889418 69.92182) (xy 85.918894 69.965935) (xy 86.142442 70.032203) (xy 86.959645 69.215)
+ (xy 86.959645 69.28571) (xy 86.177797 70.067558) (xy 86.244065 70.291106) (xy 86.713033 70.496562) (xy 87.224929 70.506913)
+ (xy 87.70182 70.320582) (xy 87.745935 70.291106) (xy 87.812203 70.067558) (xy 87.812203 78.1515) (xy 87.462071 78.1515)
+ (xy 87.269111 78.231426) (xy 87.121426 78.379111) (xy 87.0415 78.572071) (xy 87.0415 78.780929) (xy 87.0415 80.177929)
+ (xy 87.121426 80.370889) (xy 87.269111 80.518574) (xy 87.462071 80.5985) (xy 87.670929 80.5985) (xy 89.067929 80.5985)
+ (xy 89.260889 80.518574) (xy 89.408574 80.370889) (xy 89.4885 80.177929) (xy 89.4885 81.672184) (xy 89.302838 81.222848)
+ (xy 88.958962 80.878372) (xy 88.509437 80.691713) (xy 88.022698 80.691288) (xy 87.572848 80.877162) (xy 87.228372 81.221038)
+ (xy 87.041713 81.670563) (xy 87.041288 82.157302) (xy 87.227162 82.607152) (xy 87.571038 82.951628) (xy 88.020563 83.138287)
+ (xy 88.507302 83.138712) (xy 88.957152 82.952838) (xy 89.301628 82.608962) (xy 89.488287 82.159437) (xy 89.488712 81.672698)
+ (xy 89.488712 82.621992) (xy 89.475577 82.635105) (xy 89.327668 82.991308) (xy 89.327332 83.376999) (xy 89.474618 83.73346)
+ (xy 89.747105 84.006423) (xy 90.103308 84.154332) (xy 90.488999 84.154668) (xy 90.84546 84.007382) (xy 91.118423 83.734895)
+ (xy 91.266332 83.378692) (xy 91.266668 82.993001) (xy 91.266668 98.773139) (xy 91.038372 99.001038) (xy 90.851713 99.450563)
+ (xy 90.851288 99.937302) (xy 91.037162 100.387152) (xy 91.381038 100.731628) (xy 91.830563 100.918287) (xy 92.317302 100.918712)
+ (xy 92.767152 100.732838) (xy 93.111628 100.388962) (xy 93.298287 99.939437) (xy 93.298712 99.452698) (xy 93.298712 101.992698)
+ (xy 93.112838 101.542848) (xy 92.768962 101.198372) (xy 92.319437 101.011713) (xy 91.832698 101.011288) (xy 91.382848 101.197162)
+ (xy 91.038372 101.541038) (xy 90.851713 101.990563) (xy 90.851288 102.477302) (xy 91.037162 102.927152) (xy 91.381038 103.271628)
+ (xy 91.830563 103.458287) (xy 92.317302 103.458712) (xy 92.767152 103.272838) (xy 93.111628 102.928962) (xy 93.298287 102.479437)
+ (xy 93.298712 101.992698) (xy 93.298712 104.532698) (xy 93.112838 104.082848) (xy 92.768962 103.738372) (xy 92.319437 103.551713)
+ (xy 91.832698 103.551288) (xy 91.382848 103.737162) (xy 91.038372 104.081038) (xy 90.851713 104.530563) (xy 90.851288 105.017302)
+ (xy 91.037162 105.467152) (xy 91.381038 105.811628) (xy 91.830563 105.998287) (xy 92.317302 105.998712) (xy 92.767152 105.812838)
+ (xy 93.111628 105.468962) (xy 93.298287 105.019437) (xy 93.298712 104.532698) (xy 93.298712 107.072698) (xy 93.112838 106.622848)
+ (xy 92.768962 106.278372) (xy 92.319437 106.091713) (xy 91.832698 106.091288) (xy 91.382848 106.277162) (xy 91.038372 106.621038)
+ (xy 90.851713 107.070563) (xy 90.851288 107.557302) (xy 91.037162 108.007152) (xy 91.381038 108.351628) (xy 91.830563 108.538287)
+ (xy 92.317302 108.538712) (xy 92.767152 108.352838) (xy 93.111628 108.008962) (xy 93.298287 107.559437) (xy 93.298712 107.072698)
+ (xy 93.298712 109.612698) (xy 93.112838 109.162848) (xy 92.768962 108.818372) (xy 92.319437 108.631713) (xy 91.832698 108.631288)
+ (xy 91.382848 108.817162) (xy 91.038372 109.161038) (xy 90.851713 109.610563) (xy 90.851288 110.097302) (xy 91.037162 110.547152)
+ (xy 91.381038 110.891628) (xy 91.830563 111.078287) (xy 92.317302 111.078712) (xy 92.767152 110.892838) (xy 93.111628 110.548962)
+ (xy 93.298287 110.099437) (xy 93.298712 109.612698) (xy 93.298712 112.152698) (xy 93.112838 111.702848) (xy 92.768962 111.358372)
+ (xy 92.319437 111.171713) (xy 91.832698 111.171288) (xy 91.382848 111.357162) (xy 91.038372 111.701038) (xy 90.851713 112.150563)
+ (xy 90.851288 112.637302) (xy 91.037162 113.087152) (xy 91.381038 113.431628) (xy 91.830563 113.618287) (xy 92.317302 113.618712)
+ (xy 92.767152 113.432838) (xy 93.111628 113.088962) (xy 93.298287 112.639437) (xy 93.298712 112.152698) (xy 93.298712 114.692698)
+ (xy 93.112838 114.242848) (xy 92.768962 113.898372) (xy 92.319437 113.711713) (xy 91.832698 113.711288) (xy 91.382848 113.897162)
+ (xy 91.038372 114.241038) (xy 90.851713 114.690563) (xy 90.851288 115.177302) (xy 91.037162 115.627152) (xy 91.381038 115.971628)
+ (xy 91.830563 116.158287) (xy 92.317302 116.158712) (xy 92.767152 115.972838) (xy 93.111628 115.628962) (xy 93.298287 115.179437)
+ (xy 93.298712 114.692698) (xy 93.298712 117.232698) (xy 93.112838 116.782848) (xy 92.768962 116.438372) (xy 92.319437 116.251713)
+ (xy 91.832698 116.251288) (xy 91.382848 116.437162) (xy 91.038372 116.781038) (xy 90.851713 117.230563) (xy 90.851288 117.717302)
+ (xy 91.037162 118.167152) (xy 91.381038 118.511628) (xy 91.830563 118.698287) (xy 92.317302 118.698712) (xy 92.767152 118.512838)
+ (xy 93.111628 118.168962) (xy 93.298287 117.719437) (xy 93.298712 117.232698) (xy 93.298712 125.919668) (xy 93.2985 125.91958)
+ (xy 93.2985 120.817929) (xy 93.2985 120.609071) (xy 93.2985 119.212071) (xy 93.218574 119.019111) (xy 93.070889 118.871426)
+ (xy 92.877929 118.7915) (xy 92.669071 118.7915) (xy 91.272071 118.7915) (xy 91.079111 118.871426) (xy 90.931426 119.019111)
+ (xy 90.8515 119.212071) (xy 90.8515 119.420929) (xy 90.8515 120.817929) (xy 90.931426 121.010889) (xy 91.079111 121.158574)
+ (xy 91.272071 121.2385) (xy 91.480929 121.2385) (xy 92.877929 121.2385) (xy 93.070889 121.158574) (xy 93.218574 121.010889)
+ (xy 93.2985 120.817929) (xy 93.2985 125.91958) (xy 92.954437 125.776713) (xy 92.467698 125.776288) (xy 92.017848 125.962162)
+ (xy 91.673372 126.306038) (xy 91.486713 126.755563) (xy 91.486288 127.242302) (xy 91.672162 127.692152) (xy 92.016038 128.036628)
+ (xy 92.465563 128.223287) (xy 92.952302 128.223712) (xy 93.402152 128.037838) (xy 93.746628 127.693962) (xy 93.933287 127.244437)
+ (xy 93.933712 126.757698) (xy 93.933712 135.647698) (xy 93.747838 135.197848) (xy 93.403962 134.853372) (xy 92.954437 134.666713)
+ (xy 92.467698 134.666288) (xy 92.017848 134.852162) (xy 91.673372 135.196038) (xy 91.486713 135.645563) (xy 91.486288 136.132302)
+ (xy 91.672162 136.582152) (xy 92.016038 136.926628) (xy 92.465563 137.113287) (xy 92.952302 137.113712) (xy 93.402152 136.927838)
+ (xy 93.746628 136.583962) (xy 93.933287 136.134437) (xy 93.933712 135.647698) (xy 93.933712 142.632698) (xy 93.747838 142.182848)
+ (xy 93.403962 141.838372) (xy 92.954437 141.651713) (xy 92.467698 141.651288) (xy 92.017848 141.837162) (xy 91.673372 142.181038)
+ (xy 91.486713 142.630563) (xy 91.486288 143.117302) (xy 91.672162 143.567152) (xy 92.016038 143.911628) (xy 92.465563 144.098287)
+ (xy 92.952302 144.098712) (xy 93.402152 143.912838) (xy 93.746628 143.568962) (xy 93.933287 143.119437) (xy 93.933712 142.632698)
+ (xy 93.933712 154.3134) (xy 92.727223 154.3134) (xy 92.727223 147.700123) (xy 92.531702 147.226925) (xy 92.169979 146.864571)
+ (xy 91.697123 146.668224) (xy 91.393712 146.667959) (xy 91.393712 142.632698) (xy 91.393712 135.647698) (xy 91.393712 126.757698)
+ (xy 91.207838 126.307848) (xy 90.863962 125.963372) (xy 90.414437 125.776713) (xy 90.250668 125.77657) (xy 90.250668 100.900001)
+ (xy 90.103382 100.54354) (xy 89.830895 100.270577) (xy 89.474692 100.122668) (xy 89.412225 100.122613) (xy 89.488287 99.939437)
+ (xy 89.488712 99.452698) (xy 89.488712 96.912698) (xy 89.488712 94.372698) (xy 89.488712 91.832698) (xy 89.488712 89.292698)
+ (xy 89.488712 86.752698) (xy 89.488712 84.212698) (xy 89.302838 83.762848) (xy 88.958962 83.418372) (xy 88.509437 83.231713)
+ (xy 88.022698 83.231288) (xy 87.572848 83.417162) (xy 87.228372 83.761038) (xy 87.041713 84.210563) (xy 87.041288 84.697302)
+ (xy 87.227162 85.147152) (xy 87.571038 85.491628) (xy 88.020563 85.678287) (xy 88.507302 85.678712) (xy 88.957152 85.492838)
+ (xy 89.301628 85.148962) (xy 89.488287 84.699437) (xy 89.488712 84.212698) (xy 89.488712 86.752698) (xy 89.302838 86.302848)
+ (xy 88.958962 85.958372) (xy 88.509437 85.771713) (xy 88.022698 85.771288) (xy 87.572848 85.957162) (xy 87.228372 86.301038)
+ (xy 87.041713 86.750563) (xy 87.041288 87.237302) (xy 87.227162 87.687152) (xy 87.571038 88.031628) (xy 88.020563 88.218287)
+ (xy 88.507302 88.218712) (xy 88.957152 88.032838) (xy 89.301628 87.688962) (xy 89.488287 87.239437) (xy 89.488712 86.752698)
+ (xy 89.488712 89.292698) (xy 89.302838 88.842848) (xy 88.958962 88.498372) (xy 88.509437 88.311713) (xy 88.022698 88.311288)
+ (xy 87.572848 88.497162) (xy 87.228372 88.841038) (xy 87.041713 89.290563) (xy 87.041288 89.777302) (xy 87.227162 90.227152)
+ (xy 87.571038 90.571628) (xy 88.020563 90.758287) (xy 88.507302 90.758712) (xy 88.957152 90.572838) (xy 89.301628 90.228962)
+ (xy 89.488287 89.779437) (xy 89.488712 89.292698) (xy 89.488712 91.832698) (xy 89.302838 91.382848) (xy 88.958962 91.038372)
+ (xy 88.509437 90.851713) (xy 88.022698 90.851288) (xy 87.572848 91.037162) (xy 87.228372 91.381038) (xy 87.041713 91.830563)
+ (xy 87.041288 92.317302) (xy 87.227162 92.767152) (xy 87.571038 93.111628) (xy 88.020563 93.298287) (xy 88.507302 93.298712)
+ (xy 88.957152 93.112838) (xy 89.301628 92.768962) (xy 89.488287 92.319437) (xy 89.488712 91.832698) (xy 89.488712 94.372698)
+ (xy 89.302838 93.922848) (xy 88.958962 93.578372) (xy 88.509437 93.391713) (xy 88.022698 93.391288) (xy 87.572848 93.577162)
+ (xy 87.228372 93.921038) (xy 87.041713 94.370563) (xy 87.041288 94.857302) (xy 87.227162 95.307152) (xy 87.571038 95.651628)
+ (xy 88.020563 95.838287) (xy 88.507302 95.838712) (xy 88.957152 95.652838) (xy 89.301628 95.308962) (xy 89.488287 94.859437)
+ (xy 89.488712 94.372698) (xy 89.488712 96.912698) (xy 89.302838 96.462848) (xy 88.958962 96.118372) (xy 88.509437 95.931713)
+ (xy 88.022698 95.931288) (xy 87.572848 96.117162) (xy 87.228372 96.461038) (xy 87.041713 96.910563) (xy 87.041288 97.397302)
+ (xy 87.227162 97.847152) (xy 87.571038 98.191628) (xy 88.020563 98.378287) (xy 88.507302 98.378712) (xy 88.957152 98.192838)
+ (xy 89.301628 97.848962) (xy 89.488287 97.399437) (xy 89.488712 96.912698) (xy 89.488712 99.452698) (xy 89.302838 99.002848)
+ (xy 88.958962 98.658372) (xy 88.509437 98.471713) (xy 88.022698 98.471288) (xy 87.572848 98.657162) (xy 87.228372 99.001038)
+ (xy 87.041713 99.450563) (xy 87.041288 99.937302) (xy 87.227162 100.387152) (xy 87.571038 100.731628) (xy 88.020563 100.918287)
+ (xy 88.31165 100.918541) (xy 88.311332 101.283999) (xy 88.458618 101.64046) (xy 88.731105 101.913423) (xy 89.087308 102.061332)
+ (xy 89.472999 102.061668) (xy 89.82946 101.914382) (xy 90.102423 101.641895) (xy 90.250332 101.285692) (xy 90.250668 100.900001)
+ (xy 90.250668 125.77657) (xy 89.927698 125.776288) (xy 89.477848 125.962162) (xy 89.133372 126.306038) (xy 88.946713 126.755563)
+ (xy 88.946288 127.242302) (xy 89.132162 127.692152) (xy 89.476038 128.036628) (xy 89.925563 128.223287) (xy 90.412302 128.223712)
+ (xy 90.862152 128.037838) (xy 91.206628 127.693962) (xy 91.393287 127.244437) (xy 91.393712 126.757698) (xy 91.393712 135.647698)
+ (xy 91.207838 135.197848) (xy 90.863962 134.853372) (xy 90.414437 134.666713) (xy 89.927698 134.666288) (xy 89.477848 134.852162)
+ (xy 89.133372 135.196038) (xy 88.946713 135.645563) (xy 88.946288 136.132302) (xy 89.132162 136.582152) (xy 89.476038 136.926628)
+ (xy 89.925563 137.113287) (xy 90.412302 137.113712) (xy 90.862152 136.927838) (xy 91.206628 136.583962) (xy 91.393287 136.134437)
+ (xy 91.393712 135.647698) (xy 91.393712 142.632698) (xy 91.207838 142.182848) (xy 90.863962 141.838372) (xy 90.414437 141.651713)
+ (xy 89.927698 141.651288) (xy 89.477848 141.837162) (xy 89.133372 142.181038) (xy 88.946713 142.630563) (xy 88.946288 143.117302)
+ (xy 89.132162 143.567152) (xy 89.476038 143.911628) (xy 89.925563 144.098287) (xy 90.412302 144.098712) (xy 90.862152 143.912838)
+ (xy 91.206628 143.568962) (xy 91.393287 143.119437) (xy 91.393712 142.632698) (xy 91.393712 146.667959) (xy 91.185123 146.667777)
+ (xy 90.711925 146.863298) (xy 90.349571 147.225021) (xy 90.187 147.616535) (xy 90.187 147.297429) (xy 90.187 147.088571)
+ (xy 90.107074 146.895611) (xy 89.959389 146.747926) (xy 89.766429 146.668) (xy 89.05625 146.668) (xy 88.925 146.79925)
+ (xy 88.925 147.93) (xy 88.945 147.93) (xy 88.945 147.98) (xy 88.925 147.98) (xy 88.925 149.11075)
+ (xy 89.05625 149.242) (xy 89.766429 149.242) (xy 89.959389 149.162074) (xy 90.107074 149.014389) (xy 90.187 148.821429)
+ (xy 90.187 148.612571) (xy 90.187 148.292703) (xy 90.348298 148.683075) (xy 90.710021 149.045429) (xy 91.182877 149.241776)
+ (xy 91.694877 149.242223) (xy 92.168075 149.046702) (xy 92.530429 148.684979) (xy 92.726776 148.212123) (xy 92.727223 147.700123)
+ (xy 92.727223 154.3134) (xy 90.07276 154.3134) (xy 88.875 154.298428) (xy 88.875 149.11075) (xy 88.875 147.98)
+ (xy 88.875 147.93) (xy 88.875 146.79925) (xy 88.853712 146.777962) (xy 88.853712 142.632698) (xy 88.853712 135.647698)
+ (xy 88.853712 126.757698) (xy 88.667838 126.307848) (xy 88.472668 126.112337) (xy 88.472668 106.234001) (xy 88.325382 105.87754)
+ (xy 88.052895 105.604577) (xy 87.696692 105.456668) (xy 87.311001 105.456332) (xy 87.202668 105.501094) (xy 87.202668 104.710001)
+ (xy 87.055382 104.35354) (xy 86.782895 104.080577) (xy 86.426692 103.932668) (xy 86.186668 103.932458) (xy 86.186668 100.773001)
+ (xy 86.059668 100.465636) (xy 86.059668 96.455001) (xy 85.912382 96.09854) (xy 85.639895 95.825577) (xy 85.283692 95.677668)
+ (xy 84.898001 95.677332) (xy 84.54154 95.824618) (xy 84.268577 96.097105) (xy 84.120668 96.453308) (xy 84.120332 96.838999)
+ (xy 84.267618 97.19546) (xy 84.540105 97.468423) (xy 84.896308 97.616332) (xy 85.281999 97.616668) (xy 85.63846 97.469382)
+ (xy 85.911423 97.196895) (xy 86.059332 96.840692) (xy 86.059668 96.455001) (xy 86.059668 100.465636) (xy 86.039382 100.41654)
+ (xy 85.766895 100.143577) (xy 85.410692 99.995668) (xy 85.025001 99.995332) (xy 84.66854 100.142618) (xy 84.395577 100.415105)
+ (xy 84.247668 100.771308) (xy 84.247332 101.156999) (xy 84.394618 101.51346) (xy 84.667105 101.786423) (xy 85.023308 101.934332)
+ (xy 85.408999 101.934668) (xy 85.76546 101.787382) (xy 86.038423 101.514895) (xy 86.186332 101.158692) (xy 86.186668 100.773001)
+ (xy 86.186668 103.932458) (xy 86.041001 103.932332) (xy 85.742011 104.055871) (xy 85.639895 103.953577) (xy 85.283692 103.805668)
+ (xy 84.898001 103.805332) (xy 84.54154 103.952618) (xy 84.268577 104.225105) (xy 84.120668 104.581308) (xy 84.120332 104.966999)
+ (xy 84.267618 105.32346) (xy 84.540105 105.596423) (xy 84.896308 105.744332) (xy 85.281999 105.744668) (xy 85.580988 105.621128)
+ (xy 85.683105 105.723423) (xy 86.039308 105.871332) (xy 86.424999 105.871668) (xy 86.78146 105.724382) (xy 87.054423 105.451895)
+ (xy 87.202332 105.095692) (xy 87.202668 104.710001) (xy 87.202668 105.501094) (xy 86.95454 105.603618) (xy 86.681577 105.876105)
+ (xy 86.533668 106.232308) (xy 86.533332 106.617999) (xy 86.680618 106.97446) (xy 86.953105 107.247423) (xy 87.309308 107.395332)
+ (xy 87.694999 107.395668) (xy 88.05146 107.248382) (xy 88.324423 106.975895) (xy 88.472332 106.619692) (xy 88.472668 106.234001)
+ (xy 88.472668 126.112337) (xy 88.323962 125.963372) (xy 87.874437 125.776713) (xy 87.387698 125.776288) (xy 86.937848 125.962162)
+ (xy 86.593372 126.306038) (xy 86.406713 126.755563) (xy 86.406288 127.242302) (xy 86.592162 127.692152) (xy 86.936038 128.036628)
+ (xy 87.385563 128.223287) (xy 87.872302 128.223712) (xy 88.322152 128.037838) (xy 88.666628 127.693962) (xy 88.853287 127.244437)
+ (xy 88.853712 126.757698) (xy 88.853712 135.647698) (xy 88.667838 135.197848) (xy 88.323962 134.853372) (xy 87.874437 134.666713)
+ (xy 87.387698 134.666288) (xy 86.937848 134.852162) (xy 86.593372 135.196038) (xy 86.406713 135.645563) (xy 86.406288 136.132302)
+ (xy 86.592162 136.582152) (xy 86.936038 136.926628) (xy 87.385563 137.113287) (xy 87.872302 137.113712) (xy 88.322152 136.927838)
+ (xy 88.666628 136.583962) (xy 88.853287 136.134437) (xy 88.853712 135.647698) (xy 88.853712 142.632698) (xy 88.667838 142.182848)
+ (xy 88.323962 141.838372) (xy 87.874437 141.651713) (xy 87.387698 141.651288) (xy 86.937848 141.837162) (xy 86.593372 142.181038)
+ (xy 86.406713 142.630563) (xy 86.406288 143.117302) (xy 86.592162 143.567152) (xy 86.936038 143.911628) (xy 87.09074 143.975866)
+ (xy 86.82754 144.084618) (xy 86.554577 144.357105) (xy 86.406668 144.713308) (xy 86.406332 145.098999) (xy 86.553618 145.45546)
+ (xy 86.826105 145.728423) (xy 87.182308 145.876332) (xy 87.567999 145.876668) (xy 87.92446 145.729382) (xy 88.197423 145.456895)
+ (xy 88.345332 145.100692) (xy 88.345668 144.715001) (xy 88.198382 144.35854) (xy 87.925895 144.085577) (xy 87.91502 144.081061)
+ (xy 88.322152 143.912838) (xy 88.666628 143.568962) (xy 88.853287 143.119437) (xy 88.853712 142.632698) (xy 88.853712 146.777962)
+ (xy 88.74375 146.668) (xy 88.033571 146.668) (xy 87.840611 146.747926) (xy 87.692926 146.895611) (xy 87.613 147.088571)
+ (xy 87.613 147.297429) (xy 87.613 147.79875) (xy 87.74425 147.93) (xy 88.875 147.93) (xy 88.875 147.98)
+ (xy 87.74425 147.98) (xy 87.613 148.11125) (xy 87.613 148.612571) (xy 87.613 148.821429) (xy 87.692926 149.014389)
+ (xy 87.840611 149.162074) (xy 88.033571 149.242) (xy 88.74375 149.242) (xy 88.875 149.11075) (xy 88.875 154.298428)
+ (xy 86.313668 154.266411) (xy 86.313668 144.715001) (xy 86.166382 144.35854) (xy 85.902739 144.094436) (xy 86.085889 144.018574)
+ (xy 86.233574 143.870889) (xy 86.3135 143.677929) (xy 86.3135 143.469071) (xy 86.3135 142.072071) (xy 86.3135 136.692929)
+ (xy 86.3135 136.484071) (xy 86.3135 135.087071) (xy 86.3135 127.802929) (xy 86.3135 127.594071) (xy 86.3135 126.197071)
+ (xy 86.233574 126.004111) (xy 86.085889 125.856426) (xy 85.892929 125.7765) (xy 85.684071 125.7765) (xy 84.287071 125.7765)
+ (xy 84.094111 125.856426) (xy 83.946426 126.004111) (xy 83.900668 126.114581) (xy 83.900668 79.183001) (xy 83.753382 78.82654)
+ (xy 83.480895 78.553577) (xy 83.191505 78.433411) (xy 83.22546 78.419382) (xy 83.498423 78.146895) (xy 83.646332 77.790692)
+ (xy 83.646668 77.405001) (xy 83.499382 77.04854) (xy 83.226895 76.775577) (xy 83.202223 76.765332) (xy 83.202223 68.960123)
+ (xy 83.138668 68.806307) (xy 83.138668 64.197001) (xy 82.991382 63.84054) (xy 82.718895 63.567577) (xy 82.362692 63.419668)
+ (xy 81.977001 63.419332) (xy 81.62054 63.566618) (xy 81.347577 63.839105) (xy 81.199668 64.195308) (xy 81.199332 64.580999)
+ (xy 81.346618 64.93746) (xy 81.619105 65.210423) (xy 81.975308 65.358332) (xy 82.360999 65.358668) (xy 82.71746 65.211382)
+ (xy 82.990423 64.938895) (xy 83.138332 64.582692) (xy 83.138668 64.197001) (xy 83.138668 68.806307) (xy 83.006702 68.486925)
+ (xy 82.644979 68.124571) (xy 82.172123 67.928224) (xy 81.660123 67.927777) (xy 81.186925 68.123298) (xy 80.824571 68.485021)
+ (xy 80.628224 68.957877) (xy 80.627777 69.469877) (xy 80.823298 69.943075) (xy 81.185021 70.305429) (xy 81.657877 70.501776)
+ (xy 82.169877 70.502223) (xy 82.643075 70.306702) (xy 83.005429 69.944979) (xy 83.201776 69.472123) (xy 83.202223 68.960123)
+ (xy 83.202223 76.765332) (xy 82.870692 76.627668) (xy 82.485001 76.627332) (xy 82.12854 76.774618) (xy 81.855577 77.047105)
+ (xy 81.707668 77.403308) (xy 81.707332 77.788999) (xy 81.854618 78.14546) (xy 82.127105 78.418423) (xy 82.416494 78.538588)
+ (xy 82.38254 78.552618) (xy 82.109577 78.825105) (xy 81.961668 79.181308) (xy 81.961332 79.566999) (xy 82.108618 79.92346)
+ (xy 82.381105 80.196423) (xy 82.737308 80.344332) (xy 83.122999 80.344668) (xy 83.47946 80.197382) (xy 83.752423 79.924895)
+ (xy 83.900332 79.568692) (xy 83.900668 79.183001) (xy 83.900668 126.114581) (xy 83.8665 126.197071) (xy 83.8665 126.405929)
+ (xy 83.8665 127.802929) (xy 83.946426 127.995889) (xy 84.094111 128.143574) (xy 84.287071 128.2235) (xy 84.495929 128.2235)
+ (xy 85.892929 128.2235) (xy 86.085889 128.143574) (xy 86.233574 127.995889) (xy 86.3135 127.802929) (xy 86.3135 135.087071)
+ (xy 86.233574 134.894111) (xy 86.085889 134.746426) (xy 85.892929 134.6665) (xy 85.684071 134.6665) (xy 84.287071 134.6665)
+ (xy 84.094111 134.746426) (xy 83.946426 134.894111) (xy 83.8665 135.087071) (xy 83.8665 135.295929) (xy 83.8665 136.692929)
+ (xy 83.946426 136.885889) (xy 84.094111 137.033574) (xy 84.287071 137.1135) (xy 84.495929 137.1135) (xy 85.892929 137.1135)
+ (xy 86.085889 137.033574) (xy 86.233574 136.885889) (xy 86.3135 136.692929) (xy 86.3135 142.072071) (xy 86.233574 141.879111)
+ (xy 86.085889 141.731426) (xy 85.892929 141.6515) (xy 85.684071 141.6515) (xy 84.287071 141.6515) (xy 84.094111 141.731426)
+ (xy 83.946426 141.879111) (xy 83.8665 142.072071) (xy 83.8665 142.280929) (xy 83.8665 143.677929) (xy 83.946426 143.870889)
+ (xy 84.094111 144.018574) (xy 84.287071 144.0985) (xy 84.495929 144.0985) (xy 84.781633 144.0985) (xy 84.522577 144.357105)
+ (xy 84.374668 144.713308) (xy 84.374332 145.098999) (xy 84.521618 145.45546) (xy 84.794105 145.728423) (xy 85.150308 145.876332)
+ (xy 85.535999 145.876668) (xy 85.89246 145.729382) (xy 86.165423 145.456895) (xy 86.313332 145.100692) (xy 86.313668 144.715001)
+ (xy 86.313668 154.266411) (xy 81.868668 154.210848) (xy 81.868668 81.469001) (xy 81.721382 81.11254) (xy 81.448895 80.839577)
+ (xy 81.092692 80.691668) (xy 80.707001 80.691332) (xy 80.598668 80.736094) (xy 80.598668 78.421001) (xy 80.451382 78.06454)
+ (xy 80.178895 77.791577) (xy 79.822692 77.643668) (xy 79.437001 77.643332) (xy 79.08054 77.790618) (xy 78.807577 78.063105)
+ (xy 78.659668 78.419308) (xy 78.659332 78.804999) (xy 78.806618 79.16146) (xy 79.079105 79.434423) (xy 79.435308 79.582332)
+ (xy 79.820999 79.582668) (xy 80.17746 79.435382) (xy 80.450423 79.162895) (xy 80.598332 78.806692) (xy 80.598668 78.421001)
+ (xy 80.598668 80.736094) (xy 80.35054 80.838618) (xy 80.077577 81.111105) (xy 79.929668 81.467308) (xy 79.929332 81.852999)
+ (xy 80.076618 82.20946) (xy 80.349105 82.482423) (xy 80.705308 82.630332) (xy 81.090999 82.630668) (xy 81.44746 82.483382)
+ (xy 81.720423 82.210895) (xy 81.868332 81.854692) (xy 81.868668 81.469001) (xy 81.868668 154.210848) (xy 80.852668 154.198148)
+ (xy 80.852668 119.442001) (xy 80.705382 119.08554) (xy 80.432895 118.812577) (xy 80.090668 118.670471) (xy 80.090668 86.676001)
+ (xy 79.943382 86.31954) (xy 79.670895 86.046577) (xy 79.314692 85.898668) (xy 79.302208 85.898657) (xy 79.561423 85.639895)
+ (xy 79.709332 85.283692) (xy 79.709668 84.898001) (xy 79.562382 84.54154) (xy 79.289895 84.268577) (xy 78.933692 84.120668)
+ (xy 78.548001 84.120332) (xy 78.19154 84.267618) (xy 77.918577 84.540105) (xy 77.770668 84.896308) (xy 77.770332 85.281999)
+ (xy 77.917618 85.63846) (xy 78.190105 85.911423) (xy 78.546308 86.059332) (xy 78.558791 86.059342) (xy 78.299577 86.318105)
+ (xy 78.151668 86.674308) (xy 78.151332 87.059999) (xy 78.298618 87.41646) (xy 78.571105 87.689423) (xy 78.927308 87.837332)
+ (xy 79.312999 87.837668) (xy 79.66946 87.690382) (xy 79.942423 87.417895) (xy 80.090332 87.061692) (xy 80.090668 86.676001)
+ (xy 80.090668 118.670471) (xy 80.076692 118.664668) (xy 79.709668 118.664348) (xy 79.709668 110.171001) (xy 79.582668 109.863636)
+ (xy 79.582668 102.551001) (xy 79.435382 102.19454) (xy 79.162895 101.921577) (xy 78.947668 101.832206) (xy 78.947668 91.629001)
+ (xy 78.800382 91.27254) (xy 78.527895 90.999577) (xy 78.171692 90.851668) (xy 77.786001 90.851332) (xy 77.42954 90.998618)
+ (xy 77.156577 91.271105) (xy 77.008668 91.627308) (xy 77.008332 92.012999) (xy 77.155618 92.36946) (xy 77.428105 92.642423)
+ (xy 77.784308 92.790332) (xy 78.169999 92.790668) (xy 78.52646 92.643382) (xy 78.799423 92.370895) (xy 78.947332 92.014692)
+ (xy 78.947668 91.629001) (xy 78.947668 101.832206) (xy 78.806692 101.773668) (xy 78.566668 101.773458) (xy 78.566668 95.312001)
+ (xy 78.419382 94.95554) (xy 78.146895 94.682577) (xy 77.790692 94.534668) (xy 77.405001 94.534332) (xy 77.04854 94.681618)
+ (xy 76.979245 94.750792) (xy 76.979245 72.744972) (xy 76.76443 72.22508) (xy 76.367013 71.826968) (xy 75.847496 71.611246)
+ (xy 75.284972 71.610755) (xy 74.76508 71.82557) (xy 74.366968 72.222987) (xy 74.151246 72.742504) (xy 74.150755 73.305028)
+ (xy 74.36557 73.82492) (xy 74.762987 74.223032) (xy 75.282504 74.438754) (xy 75.845028 74.439245) (xy 76.36492 74.22443)
+ (xy 76.763032 73.827013) (xy 76.978754 73.307496) (xy 76.979245 72.744972) (xy 76.979245 94.750792) (xy 76.915668 94.814258)
+ (xy 76.915668 83.755001) (xy 76.768382 83.39854) (xy 76.495895 83.125577) (xy 76.139692 82.977668) (xy 75.754001 82.977332)
+ (xy 75.39754 83.124618) (xy 75.124577 83.397105) (xy 74.976668 83.753308) (xy 74.976332 84.138999) (xy 75.123618 84.49546)
+ (xy 75.396105 84.768423) (xy 75.752308 84.916332) (xy 76.137999 84.916668) (xy 76.49446 84.769382) (xy 76.767423 84.496895)
+ (xy 76.915332 84.140692) (xy 76.915668 83.755001) (xy 76.915668 94.814258) (xy 76.775577 94.954105) (xy 76.627668 95.310308)
+ (xy 76.627332 95.695999) (xy 76.672104 95.804357) (xy 76.643001 95.804332) (xy 76.28654 95.951618) (xy 76.013577 96.224105)
+ (xy 75.865668 96.580308) (xy 75.865332 96.965999) (xy 76.012618 97.32246) (xy 76.285105 97.595423) (xy 76.641308 97.743332)
+ (xy 77.026999 97.743668) (xy 77.38346 97.596382) (xy 77.656423 97.323895) (xy 77.804332 96.967692) (xy 77.804668 96.582001)
+ (xy 77.759895 96.473642) (xy 77.788999 96.473668) (xy 78.14546 96.326382) (xy 78.418423 96.053895) (xy 78.566332 95.697692)
+ (xy 78.566668 95.312001) (xy 78.566668 101.773458) (xy 78.421001 101.773332) (xy 78.06454 101.920618) (xy 77.791577 102.193105)
+ (xy 77.643668 102.549308) (xy 77.643332 102.934999) (xy 77.790618 103.29146) (xy 78.063105 103.564423) (xy 78.419308 103.712332)
+ (xy 78.804999 103.712668) (xy 79.16146 103.565382) (xy 79.434423 103.292895) (xy 79.582332 102.936692) (xy 79.582668 102.551001)
+ (xy 79.582668 109.863636) (xy 79.562382 109.81454) (xy 79.289895 109.541577) (xy 78.933692 109.393668) (xy 78.548001 109.393332)
+ (xy 78.19154 109.540618) (xy 77.918577 109.813105) (xy 77.770668 110.169308) (xy 77.770332 110.554999) (xy 77.917618 110.91146)
+ (xy 78.190105 111.184423) (xy 78.546308 111.332332) (xy 78.931999 111.332668) (xy 79.28846 111.185382) (xy 79.561423 110.912895)
+ (xy 79.709332 110.556692) (xy 79.709668 110.171001) (xy 79.709668 118.664348) (xy 79.691001 118.664332) (xy 79.33454 118.811618)
+ (xy 79.061577 119.084105) (xy 78.913668 119.440308) (xy 78.913332 119.825999) (xy 79.060618 120.18246) (xy 79.333105 120.455423)
+ (xy 79.689308 120.603332) (xy 80.074999 120.603668) (xy 80.43146 120.456382) (xy 80.704423 120.183895) (xy 80.852332 119.827692)
+ (xy 80.852668 119.442001) (xy 80.852668 154.198148) (xy 78.566668 154.169573) (xy 78.566668 127.189001) (xy 78.419382 126.83254)
+ (xy 78.146895 126.559577) (xy 77.790692 126.411668) (xy 77.405001 126.411332) (xy 77.04854 126.558618) (xy 77.042668 126.564479)
+ (xy 77.042668 105.472001) (xy 76.895382 105.11554) (xy 76.622895 104.842577) (xy 76.266692 104.694668) (xy 75.881001 104.694332)
+ (xy 75.52454 104.841618) (xy 75.251577 105.114105) (xy 75.103668 105.470308) (xy 75.103332 105.855999) (xy 75.250618 106.21246)
+ (xy 75.523105 106.485423) (xy 75.879308 106.633332) (xy 76.264999 106.633668) (xy 76.62146 106.486382) (xy 76.894423 106.213895)
+ (xy 77.042332 105.857692) (xy 77.042668 105.472001) (xy 77.042668 126.564479) (xy 76.775577 126.831105) (xy 76.627668 127.187308)
+ (xy 76.627332 127.572999) (xy 76.774618 127.92946) (xy 77.047105 128.202423) (xy 77.403308 128.350332) (xy 77.788999 128.350668)
+ (xy 78.14546 128.203382) (xy 78.418423 127.930895) (xy 78.566332 127.574692) (xy 78.566668 127.189001) (xy 78.566668 154.169573)
+ (xy 76.534668 154.144173) (xy 76.534668 119.569001) (xy 76.387382 119.21254) (xy 76.114895 118.939577) (xy 75.758692 118.791668)
+ (xy 75.373001 118.791332) (xy 75.01654 118.938618) (xy 74.756668 119.198036) (xy 74.756668 93.026001) (xy 74.609382 92.66954)
+ (xy 74.336895 92.396577) (xy 74.248668 92.359941) (xy 74.248668 88.200001) (xy 74.101382 87.84354) (xy 73.828895 87.570577)
+ (xy 73.472692 87.422668) (xy 73.087001 87.422332) (xy 73.075018 87.427283) (xy 73.084423 87.417895) (xy 73.232332 87.061692)
+ (xy 73.232668 86.676001) (xy 73.085382 86.31954) (xy 72.978668 86.212639) (xy 72.978668 81.596001) (xy 72.831382 81.23954)
+ (xy 72.558895 80.966577) (xy 72.216668 80.824471) (xy 72.216668 77.151001) (xy 72.069382 76.79454) (xy 71.899245 76.624105)
+ (xy 71.899245 72.744972) (xy 71.68443 72.22508) (xy 71.287013 71.826968) (xy 70.767496 71.611246) (xy 70.204972 71.610755)
+ (xy 69.68508 71.82557) (xy 69.286968 72.222987) (xy 69.071246 72.742504) (xy 69.070755 73.305028) (xy 69.28557 73.82492)
+ (xy 69.682987 74.223032) (xy 70.202504 74.438754) (xy 70.765028 74.439245) (xy 71.28492 74.22443) (xy 71.683032 73.827013)
+ (xy 71.898754 73.307496) (xy 71.899245 72.744972) (xy 71.899245 76.624105) (xy 71.796895 76.521577) (xy 71.440692 76.373668)
+ (xy 71.055001 76.373332) (xy 70.69854 76.520618) (xy 70.425577 76.793105) (xy 70.277668 77.149308) (xy 70.277332 77.534999)
+ (xy 70.424618 77.89146) (xy 70.697105 78.164423) (xy 71.053308 78.312332) (xy 71.438999 78.312668) (xy 71.79546 78.165382)
+ (xy 72.068423 77.892895) (xy 72.216332 77.536692) (xy 72.216668 77.151001) (xy 72.216668 80.824471) (xy 72.202692 80.818668)
+ (xy 71.817001 80.818332) (xy 71.46054 80.965618) (xy 71.187577 81.238105) (xy 71.039668 81.594308) (xy 71.039332 81.979999)
+ (xy 71.186618 82.33646) (xy 71.459105 82.609423) (xy 71.815308 82.757332) (xy 72.200999 82.757668) (xy 72.55746 82.610382)
+ (xy 72.830423 82.337895) (xy 72.978332 81.981692) (xy 72.978668 81.596001) (xy 72.978668 86.212639) (xy 72.812895 86.046577)
+ (xy 72.456692 85.898668) (xy 72.071001 85.898332) (xy 71.71454 86.045618) (xy 71.441577 86.318105) (xy 71.293668 86.674308)
+ (xy 71.293332 87.059999) (xy 71.440618 87.41646) (xy 71.713105 87.689423) (xy 72.069308 87.837332) (xy 72.454999 87.837668)
+ (xy 72.466981 87.832716) (xy 72.457577 87.842105) (xy 72.309668 88.198308) (xy 72.309332 88.583999) (xy 72.456618 88.94046)
+ (xy 72.729105 89.213423) (xy 73.085308 89.361332) (xy 73.470999 89.361668) (xy 73.82746 89.214382) (xy 74.100423 88.941895)
+ (xy 74.248332 88.585692) (xy 74.248668 88.200001) (xy 74.248668 92.359941) (xy 73.980692 92.248668) (xy 73.74046 92.248458)
+ (xy 73.740668 92.010001) (xy 73.593382 91.65354) (xy 73.320895 91.380577) (xy 72.964692 91.232668) (xy 72.579001 91.232332)
+ (xy 72.22254 91.379618) (xy 71.949577 91.652105) (xy 71.801668 92.008308) (xy 71.801332 92.393999) (xy 71.948618 92.75046)
+ (xy 72.221105 93.023423) (xy 72.577308 93.171332) (xy 72.817539 93.171541) (xy 72.817332 93.409999) (xy 72.964618 93.76646)
+ (xy 73.237105 94.039423) (xy 73.593308 94.187332) (xy 73.978999 94.187668) (xy 74.33546 94.040382) (xy 74.608423 93.767895)
+ (xy 74.756332 93.411692) (xy 74.756668 93.026001) (xy 74.756668 119.198036) (xy 74.743577 119.211105) (xy 74.595668 119.567308)
+ (xy 74.595332 119.952999) (xy 74.742618 120.30946) (xy 75.015105 120.582423) (xy 75.371308 120.730332) (xy 75.756999 120.730668)
+ (xy 76.11346 120.583382) (xy 76.386423 120.310895) (xy 76.534332 119.954692) (xy 76.534668 119.569001) (xy 76.534668 154.144173)
+ (xy 74.062913 154.113276) (xy 74.062913 118.007071) (xy 74.062913 100.227071) (xy 74.058223 100.215067) (xy 74.058223 97.662123)
+ (xy 73.862702 97.188925) (xy 73.500979 96.826571) (xy 73.028123 96.630224) (xy 72.516123 96.629777) (xy 72.042925 96.825298)
+ (xy 71.680571 97.187021) (xy 71.484224 97.659877) (xy 71.483777 98.171877) (xy 71.679298 98.645075) (xy 72.041021 99.007429)
+ (xy 72.479056 99.189317) (xy 72.06418 99.351418) (xy 72.020065 99.380894) (xy 71.953797 99.604442) (xy 72.771 100.421645)
+ (xy 73.588203 99.604442) (xy 73.521935 99.380894) (xy 73.073631 99.184491) (xy 73.499075 99.008702) (xy 73.861429 98.646979)
+ (xy 74.057776 98.174123) (xy 74.058223 97.662123) (xy 74.058223 100.215067) (xy 73.876582 99.75018) (xy 73.847106 99.706065)
+ (xy 73.623558 99.639797) (xy 72.806355 100.457) (xy 73.623558 101.274203) (xy 73.847106 101.207935) (xy 74.052562 100.738967)
+ (xy 74.062913 100.227071) (xy 74.062913 118.007071) (xy 73.994668 117.832406) (xy 73.994668 103.567001) (xy 73.847382 103.21054)
+ (xy 73.588203 102.950908) (xy 73.588203 101.309558) (xy 72.771 100.492355) (xy 72.735645 100.52771) (xy 72.735645 100.457)
+ (xy 71.918442 99.639797) (xy 71.694894 99.706065) (xy 71.489438 100.175033) (xy 71.479087 100.686929) (xy 71.665418 101.16382)
+ (xy 71.694894 101.207935) (xy 71.918442 101.274203) (xy 72.735645 100.457) (xy 72.735645 100.52771) (xy 71.953797 101.309558)
+ (xy 72.020065 101.533106) (xy 72.489033 101.738562) (xy 73.000929 101.748913) (xy 73.47782 101.562582) (xy 73.521935 101.533106)
+ (xy 73.588203 101.309558) (xy 73.588203 102.950908) (xy 73.574895 102.937577) (xy 73.218692 102.789668) (xy 72.833001 102.789332)
+ (xy 72.47654 102.936618) (xy 72.203577 103.209105) (xy 72.055668 103.565308) (xy 72.055332 103.950999) (xy 72.202618 104.30746)
+ (xy 72.475105 104.580423) (xy 72.831308 104.728332) (xy 73.216999 104.728668) (xy 73.57346 104.581382) (xy 73.846423 104.308895)
+ (xy 73.994332 103.952692) (xy 73.994668 103.567001) (xy 73.994668 117.832406) (xy 73.876582 117.53018) (xy 73.847106 117.486065)
+ (xy 73.623558 117.419797) (xy 73.588203 117.455152) (xy 73.588203 117.384442) (xy 73.521935 117.160894) (xy 73.052967 116.955438)
+ (xy 72.541071 116.945087) (xy 72.089668 117.121459) (xy 72.089668 111.695001) (xy 71.942382 111.33854) (xy 71.669895 111.065577)
+ (xy 71.313692 110.917668) (xy 70.928001 110.917332) (xy 70.57154 111.064618) (xy 70.298577 111.337105) (xy 70.150668 111.693308)
+ (xy 70.150332 112.078999) (xy 70.297618 112.43546) (xy 70.570105 112.708423) (xy 70.926308 112.856332) (xy 71.311999 112.856668)
+ (xy 71.66846 112.709382) (xy 71.941423 112.436895) (xy 72.089332 112.080692) (xy 72.089668 111.695001) (xy 72.089668 117.121459)
+ (xy 72.06418 117.131418) (xy 72.020065 117.160894) (xy 71.953797 117.384442) (xy 72.771 118.201645) (xy 73.588203 117.384442)
+ (xy 73.588203 117.455152) (xy 72.806355 118.237) (xy 73.623558 119.054203) (xy 73.847106 118.987935) (xy 74.052562 118.518967)
+ (xy 74.062913 118.007071) (xy 74.062913 154.113276) (xy 74.058223 154.113218) (xy 74.058223 123.062123) (xy 73.862702 122.588925)
+ (xy 73.588203 122.313947) (xy 73.588203 119.089558) (xy 72.771 118.272355) (xy 72.735645 118.30771) (xy 72.735645 118.237)
+ (xy 71.918442 117.419797) (xy 71.694894 117.486065) (xy 71.489438 117.955033) (xy 71.479087 118.466929) (xy 71.665418 118.94382)
+ (xy 71.694894 118.987935) (xy 71.918442 119.054203) (xy 72.735645 118.237) (xy 72.735645 118.30771) (xy 71.953797 119.089558)
+ (xy 72.020065 119.313106) (xy 72.489033 119.518562) (xy 73.000929 119.528913) (xy 73.47782 119.342582) (xy 73.521935 119.313106)
+ (xy 73.588203 119.089558) (xy 73.588203 122.313947) (xy 73.500979 122.226571) (xy 73.028123 122.030224) (xy 72.516123 122.029777)
+ (xy 72.042925 122.225298) (xy 71.680571 122.587021) (xy 71.484224 123.059877) (xy 71.483777 123.571877) (xy 71.679298 124.045075)
+ (xy 72.041021 124.407429) (xy 72.513877 124.603776) (xy 73.025877 124.604223) (xy 73.499075 124.408702) (xy 73.861429 124.046979)
+ (xy 74.057776 123.574123) (xy 74.058223 123.062123) (xy 74.058223 154.113218) (xy 71.776913 154.084701) (xy 71.776913 135.660071)
+ (xy 71.776913 132.866071) (xy 71.590582 132.38918) (xy 71.561106 132.345065) (xy 71.337558 132.278797) (xy 71.302203 132.314152)
+ (xy 71.302203 132.243442) (xy 71.235935 132.019894) (xy 70.766967 131.814438) (xy 70.375421 131.80652) (xy 70.375421 125.375764)
+ (xy 70.006255 124.482314) (xy 69.323282 123.798147) (xy 68.914668 123.628475) (xy 68.914668 85.279001) (xy 68.767382 84.92254)
+ (xy 68.494895 84.649577) (xy 68.138692 84.501668) (xy 67.753001 84.501332) (xy 67.39654 84.648618) (xy 67.123577 84.921105)
+ (xy 66.975668 85.277308) (xy 66.975332 85.662999) (xy 67.122618 86.01946) (xy 67.395105 86.292423) (xy 67.751308 86.440332)
+ (xy 68.136999 86.440668) (xy 68.49346 86.293382) (xy 68.766423 86.020895) (xy 68.914332 85.664692) (xy 68.914668 85.279001)
+ (xy 68.914668 123.628475) (xy 68.430478 123.427422) (xy 67.898668 123.426958) (xy 67.898668 106.234001) (xy 67.751382 105.87754)
+ (xy 67.478895 105.604577) (xy 67.122692 105.456668) (xy 66.737001 105.456332) (xy 66.38054 105.603618) (xy 66.107577 105.876105)
+ (xy 65.959668 106.232308) (xy 65.959332 106.617999) (xy 66.106618 106.97446) (xy 66.379105 107.247423) (xy 66.735308 107.395332)
+ (xy 67.120999 107.395668) (xy 67.47746 107.248382) (xy 67.750423 106.975895) (xy 67.898332 106.619692) (xy 67.898668 106.234001)
+ (xy 67.898668 123.426958) (xy 67.463764 123.426579) (xy 66.570314 123.795745) (xy 65.886147 124.478718) (xy 65.515422 125.371522)
+ (xy 65.514579 126.338236) (xy 65.883745 127.231686) (xy 66.566718 127.915853) (xy 67.459522 128.286578) (xy 68.426236 128.287421)
+ (xy 69.319686 127.918255) (xy 70.003853 127.235282) (xy 70.374578 126.342478) (xy 70.375421 125.375764) (xy 70.375421 131.80652)
+ (xy 70.255071 131.804087) (xy 69.77818 131.990418) (xy 69.734065 132.019894) (xy 69.667797 132.243442) (xy 70.485 133.060645)
+ (xy 71.302203 132.243442) (xy 71.302203 132.314152) (xy 70.520355 133.096) (xy 71.337558 133.913203) (xy 71.561106 133.846935)
+ (xy 71.766562 133.377967) (xy 71.776913 132.866071) (xy 71.776913 135.660071) (xy 71.590582 135.18318) (xy 71.561106 135.139065)
+ (xy 71.337558 135.072797) (xy 71.302203 135.108152) (xy 71.302203 135.037442) (xy 71.302203 133.948558) (xy 70.485 133.131355)
+ (xy 70.449645 133.16671) (xy 70.449645 133.096) (xy 69.632442 132.278797) (xy 69.408894 132.345065) (xy 69.203438 132.814033)
+ (xy 69.193087 133.325929) (xy 69.379418 133.80282) (xy 69.408894 133.846935) (xy 69.632442 133.913203) (xy 70.449645 133.096)
+ (xy 70.449645 133.16671) (xy 69.667797 133.948558) (xy 69.734065 134.172106) (xy 70.203033 134.377562) (xy 70.714929 134.387913)
+ (xy 71.19182 134.201582) (xy 71.235935 134.172106) (xy 71.302203 133.948558) (xy 71.302203 135.037442) (xy 71.235935 134.813894)
+ (xy 70.766967 134.608438) (xy 70.255071 134.598087) (xy 69.77818 134.784418) (xy 69.734065 134.813894) (xy 69.667797 135.037442)
+ (xy 70.485 135.854645) (xy 71.302203 135.037442) (xy 71.302203 135.108152) (xy 70.520355 135.89) (xy 71.337558 136.707203)
+ (xy 71.561106 136.640935) (xy 71.766562 136.171967) (xy 71.776913 135.660071) (xy 71.776913 154.084701) (xy 71.772223 154.084643)
+ (xy 71.772223 141.096123) (xy 71.772223 138.429123) (xy 71.576702 137.955925) (xy 71.302203 137.680947) (xy 71.302203 136.742558)
+ (xy 70.485 135.925355) (xy 70.449645 135.96071) (xy 70.449645 135.89) (xy 69.632442 135.072797) (xy 69.408894 135.139065)
+ (xy 69.232223 135.542329) (xy 69.232223 134.238123) (xy 69.036702 133.764925) (xy 68.674979 133.402571) (xy 68.202123 133.206224)
+ (xy 67.690123 133.205777) (xy 67.216925 133.401298) (xy 66.854571 133.763021) (xy 66.658224 134.235877) (xy 66.657777 134.747877)
+ (xy 66.853298 135.221075) (xy 67.215021 135.583429) (xy 67.687877 135.779776) (xy 68.199877 135.780223) (xy 68.673075 135.584702)
+ (xy 69.035429 135.222979) (xy 69.231776 134.750123) (xy 69.232223 134.238123) (xy 69.232223 135.542329) (xy 69.203438 135.608033)
+ (xy 69.193087 136.119929) (xy 69.379418 136.59682) (xy 69.408894 136.640935) (xy 69.632442 136.707203) (xy 70.449645 135.89)
+ (xy 70.449645 135.96071) (xy 69.667797 136.742558) (xy 69.734065 136.966106) (xy 70.203033 137.171562) (xy 70.714929 137.181913)
+ (xy 71.19182 136.995582) (xy 71.235935 136.966106) (xy 71.302203 136.742558) (xy 71.302203 137.680947) (xy 71.214979 137.593571)
+ (xy 70.742123 137.397224) (xy 70.230123 137.396777) (xy 69.756925 137.592298) (xy 69.394571 137.954021) (xy 69.232223 138.344998)
+ (xy 69.232223 137.032123) (xy 69.036702 136.558925) (xy 68.674979 136.196571) (xy 68.202123 136.000224) (xy 67.690123 135.999777)
+ (xy 67.216925 136.195298) (xy 66.854571 136.557021) (xy 66.658224 137.029877) (xy 66.657777 137.541877) (xy 66.853298 138.015075)
+ (xy 67.215021 138.377429) (xy 67.687877 138.573776) (xy 68.199877 138.574223) (xy 68.673075 138.378702) (xy 69.035429 138.016979)
+ (xy 69.231776 137.544123) (xy 69.232223 137.032123) (xy 69.232223 138.344998) (xy 69.198224 138.426877) (xy 69.197777 138.938877)
+ (xy 69.393298 139.412075) (xy 69.755021 139.774429) (xy 70.227877 139.970776) (xy 70.739877 139.971223) (xy 71.213075 139.775702)
+ (xy 71.575429 139.413979) (xy 71.771776 138.941123) (xy 71.772223 138.429123) (xy 71.772223 141.096123) (xy 71.576702 140.622925)
+ (xy 71.214979 140.260571) (xy 70.742123 140.064224) (xy 70.230123 140.063777) (xy 69.756925 140.259298) (xy 69.394571 140.621021)
+ (xy 69.236913 141.000703) (xy 69.236913 139.724071) (xy 69.050582 139.24718) (xy 69.021106 139.203065) (xy 68.797558 139.136797)
+ (xy 68.762203 139.172152) (xy 68.762203 139.101442) (xy 68.695935 138.877894) (xy 68.226967 138.672438) (xy 67.715071 138.662087)
+ (xy 67.23818 138.848418) (xy 67.194065 138.877894) (xy 67.127797 139.101442) (xy 67.945 139.918645) (xy 68.762203 139.101442)
+ (xy 68.762203 139.172152) (xy 67.980355 139.954) (xy 68.797558 140.771203) (xy 69.021106 140.704935) (xy 69.226562 140.235967)
+ (xy 69.236913 139.724071) (xy 69.236913 141.000703) (xy 69.198224 141.093877) (xy 69.197777 141.605877) (xy 69.393298 142.079075)
+ (xy 69.755021 142.441429) (xy 70.227877 142.637776) (xy 70.739877 142.638223) (xy 71.213075 142.442702) (xy 71.575429 142.080979)
+ (xy 71.771776 141.608123) (xy 71.772223 141.096123) (xy 71.772223 154.084643) (xy 71.772 154.08464) (xy 71.772 145.011429)
+ (xy 71.772 144.802571) (xy 71.772 143.278571) (xy 71.692074 143.085611) (xy 71.544389 142.937926) (xy 71.351429 142.858)
+ (xy 71.142571 142.858) (xy 69.618571 142.858) (xy 69.425611 142.937926) (xy 69.277926 143.085611) (xy 69.236913 143.184625)
+ (xy 69.236913 142.518071) (xy 69.050582 142.04118) (xy 69.021106 141.997065) (xy 68.797558 141.930797) (xy 68.762203 141.966152)
+ (xy 68.762203 141.895442) (xy 68.762203 140.806558) (xy 67.945 139.989355) (xy 67.909645 140.02471) (xy 67.909645 139.954)
+ (xy 67.092442 139.136797) (xy 66.868894 139.203065) (xy 66.663438 139.672033) (xy 66.653087 140.183929) (xy 66.839418 140.66082)
+ (xy 66.868894 140.704935) (xy 67.092442 140.771203) (xy 67.909645 139.954) (xy 67.909645 140.02471) (xy 67.127797 140.806558)
+ (xy 67.194065 141.030106) (xy 67.663033 141.235562) (xy 68.174929 141.245913) (xy 68.65182 141.059582) (xy 68.695935 141.030106)
+ (xy 68.762203 140.806558) (xy 68.762203 141.895442) (xy 68.695935 141.671894) (xy 68.226967 141.466438) (xy 67.715071 141.456087)
+ (xy 67.23818 141.642418) (xy 67.194065 141.671894) (xy 67.127797 141.895442) (xy 67.945 142.712645) (xy 68.762203 141.895442)
+ (xy 68.762203 141.966152) (xy 67.980355 142.748) (xy 68.797558 143.565203) (xy 69.021106 143.498935) (xy 69.226562 143.029967)
+ (xy 69.236913 142.518071) (xy 69.236913 143.184625) (xy 69.198 143.278571) (xy 69.198 143.487429) (xy 69.198 145.011429)
+ (xy 69.277926 145.204389) (xy 69.425611 145.352074) (xy 69.618571 145.432) (xy 69.827429 145.432) (xy 71.351429 145.432)
+ (xy 71.544389 145.352074) (xy 71.692074 145.204389) (xy 71.772 145.011429) (xy 71.772 154.08464) (xy 70.375421 154.067183)
+ (xy 70.375421 150.775764) (xy 70.006255 149.882314) (xy 69.323282 149.198147) (xy 68.762203 148.965166) (xy 68.762203 143.600558)
+ (xy 67.945 142.783355) (xy 67.909645 142.81871) (xy 67.909645 142.748) (xy 67.092442 141.930797) (xy 66.868894 141.997065)
+ (xy 66.663438 142.466033) (xy 66.653087 142.977929) (xy 66.839418 143.45482) (xy 66.868894 143.498935) (xy 67.092442 143.565203)
+ (xy 67.909645 142.748) (xy 67.909645 142.81871) (xy 67.127797 143.600558) (xy 67.194065 143.824106) (xy 67.663033 144.029562)
+ (xy 68.174929 144.039913) (xy 68.65182 143.853582) (xy 68.695935 143.824106) (xy 68.762203 143.600558) (xy 68.762203 148.965166)
+ (xy 68.430478 148.827422) (xy 67.463764 148.826579) (xy 66.570314 149.195745) (xy 65.886147 149.878718) (xy 65.515422 150.771522)
+ (xy 65.514579 151.738236) (xy 65.883745 152.631686) (xy 66.566718 153.315853) (xy 67.459522 153.686578) (xy 68.426236 153.687421)
+ (xy 69.319686 153.318255) (xy 70.003853 152.635282) (xy 70.374578 151.742478) (xy 70.375421 150.775764) (xy 70.375421 154.067183)
+ (xy 63.654362 153.98317) (xy 63.654362 118.393517) (xy 63.654362 113.313517) (xy 63.654362 106.963517) (xy 63.654362 101.883517)
+ (xy 63.654362 95.533517) (xy 63.654362 90.453517) (xy 63.654362 84.103517) (xy 63.654362 79.023517) (xy 63.363096 78.262189)
+ (xy 63.299725 78.167347) (xy 62.997003 78.008352) (xy 62.961648 78.043707) (xy 62.961648 77.972997) (xy 62.802653 77.670275)
+ (xy 62.058356 77.33789) (xy 61.243517 77.315638) (xy 60.482189 77.606904) (xy 60.387347 77.670275) (xy 60.228352 77.972997)
+ (xy 61.595 79.339645) (xy 62.961648 77.972997) (xy 62.961648 78.043707) (xy 61.630355 79.375) (xy 62.997003 80.741648)
+ (xy 63.299725 80.582653) (xy 63.63211 79.838356) (xy 63.654362 79.023517) (xy 63.654362 84.103517) (xy 63.363096 83.342189)
+ (xy 63.299725 83.247347) (xy 62.997003 83.088352) (xy 62.961648 83.123707) (xy 62.961648 83.052997) (xy 62.961648 80.777003)
+ (xy 61.595 79.410355) (xy 61.559645 79.44571) (xy 61.559645 79.375) (xy 60.192997 78.008352) (xy 59.890275 78.167347)
+ (xy 59.55789 78.911644) (xy 59.535638 79.726483) (xy 59.826904 80.487811) (xy 59.890275 80.582653) (xy 60.192997 80.741648)
+ (xy 61.559645 79.375) (xy 61.559645 79.44571) (xy 60.228352 80.777003) (xy 60.387347 81.079725) (xy 61.131644 81.41211)
+ (xy 61.946483 81.434362) (xy 62.707811 81.143096) (xy 62.802653 81.079725) (xy 62.961648 80.777003) (xy 62.961648 83.052997)
+ (xy 62.802653 82.750275) (xy 62.058356 82.41789) (xy 61.243517 82.395638) (xy 60.482189 82.686904) (xy 60.469245 82.695552)
+ (xy 60.469245 81.634972) (xy 60.25443 81.11508) (xy 59.857013 80.716968) (xy 59.337496 80.501246) (xy 58.774972 80.500755)
+ (xy 58.574362 80.583645) (xy 58.574362 79.023517) (xy 58.283096 78.262189) (xy 58.219725 78.167347) (xy 57.917003 78.008352)
+ (xy 57.881648 78.043707) (xy 56.550355 79.375) (xy 57.917003 80.741648) (xy 58.219725 80.582653) (xy 58.55211 79.838356)
+ (xy 58.574362 79.023517) (xy 58.574362 80.583645) (xy 58.25508 80.71557) (xy 57.881648 81.08835) (xy 57.856968 81.112987)
+ (xy 57.641246 81.632504) (xy 57.640755 82.195028) (xy 57.85557 82.71492) (xy 58.252987 83.113032) (xy 58.772504 83.328754)
+ (xy 59.335028 83.329245) (xy 59.85492 83.11443) (xy 60.253032 82.717013) (xy 60.468754 82.197496) (xy 60.469245 81.634972)
+ (xy 60.469245 82.695552) (xy 60.387347 82.750275) (xy 60.228352 83.052997) (xy 61.595 84.419645) (xy 62.961648 83.052997)
+ (xy 62.961648 83.123707) (xy 61.630355 84.455) (xy 62.997003 85.821648) (xy 63.299725 85.662653) (xy 63.63211 84.918356)
+ (xy 63.654362 84.103517) (xy 63.654362 90.453517) (xy 63.363096 89.692189) (xy 63.299725 89.597347) (xy 62.997003 89.438352)
+ (xy 62.961648 89.473707) (xy 62.961648 89.402997) (xy 62.961648 85.857003) (xy 61.595 84.490355) (xy 61.559645 84.52571)
+ (xy 61.559645 84.455) (xy 60.192997 83.088352) (xy 59.890275 83.247347) (xy 59.55789 83.991644) (xy 59.535638 84.806483)
+ (xy 59.826904 85.567811) (xy 59.890275 85.662653) (xy 60.192997 85.821648) (xy 61.559645 84.455) (xy 61.559645 84.52571)
+ (xy 60.228352 85.857003) (xy 60.387347 86.159725) (xy 61.131644 86.49211) (xy 61.946483 86.514362) (xy 62.707811 86.223096)
+ (xy 62.802653 86.159725) (xy 62.961648 85.857003) (xy 62.961648 89.402997) (xy 62.802653 89.100275) (xy 62.058356 88.76789)
+ (xy 61.243517 88.745638) (xy 60.482189 89.036904) (xy 60.387347 89.100275) (xy 60.228352 89.402997) (xy 61.595 90.769645)
+ (xy 62.961648 89.402997) (xy 62.961648 89.473707) (xy 61.630355 90.805) (xy 62.997003 92.171648) (xy 63.299725 92.012653)
+ (xy 63.63211 91.268356) (xy 63.654362 90.453517) (xy 63.654362 95.533517) (xy 63.363096 94.772189) (xy 63.299725 94.677347)
+ (xy 62.997003 94.518352) (xy 62.961648 94.553707) (xy 62.961648 94.482997) (xy 62.961648 92.207003) (xy 61.595 90.840355)
+ (xy 61.559645 90.87571) (xy 61.559645 90.805) (xy 60.192997 89.438352) (xy 59.890275 89.597347) (xy 59.55789 90.341644)
+ (xy 59.535638 91.156483) (xy 59.826904 91.917811) (xy 59.890275 92.012653) (xy 60.192997 92.171648) (xy 61.559645 90.805)
+ (xy 61.559645 90.87571) (xy 60.228352 92.207003) (xy 60.387347 92.509725) (xy 61.131644 92.84211) (xy 61.946483 92.864362)
+ (xy 62.707811 92.573096) (xy 62.802653 92.509725) (xy 62.961648 92.207003) (xy 62.961648 94.482997) (xy 62.802653 94.180275)
+ (xy 62.058356 93.84789) (xy 61.243517 93.825638) (xy 60.482189 94.116904) (xy 60.469245 94.125552) (xy 60.469245 93.064972)
+ (xy 60.25443 92.54508) (xy 59.857013 92.146968) (xy 59.337496 91.931246) (xy 58.774972 91.930755) (xy 58.574362 92.013645)
+ (xy 58.574362 90.453517) (xy 58.574362 84.103517) (xy 58.283096 83.342189) (xy 58.219725 83.247347) (xy 57.917003 83.088352)
+ (xy 57.881648 83.123707) (xy 56.550355 84.455) (xy 57.917003 85.821648) (xy 58.219725 85.662653) (xy 58.55211 84.918356)
+ (xy 58.574362 84.103517) (xy 58.574362 90.453517) (xy 58.283096 89.692189) (xy 58.219725 89.597347) (xy 57.917003 89.438352)
+ (xy 57.881648 89.473707) (xy 56.550355 90.805) (xy 57.917003 92.171648) (xy 58.219725 92.012653) (xy 58.55211 91.268356)
+ (xy 58.574362 90.453517) (xy 58.574362 92.013645) (xy 58.25508 92.14557) (xy 57.881648 92.51835) (xy 57.856968 92.542987)
+ (xy 57.641246 93.062504) (xy 57.640755 93.625028) (xy 57.85557 94.14492) (xy 58.252987 94.543032) (xy 58.772504 94.758754)
+ (xy 59.335028 94.759245) (xy 59.85492 94.54443) (xy 60.253032 94.147013) (xy 60.468754 93.627496) (xy 60.469245 93.064972)
+ (xy 60.469245 94.125552) (xy 60.387347 94.180275) (xy 60.228352 94.482997) (xy 61.595 95.849645) (xy 62.961648 94.482997)
+ (xy 62.961648 94.553707) (xy 61.630355 95.885) (xy 62.997003 97.251648) (xy 63.299725 97.092653) (xy 63.63211 96.348356)
+ (xy 63.654362 95.533517) (xy 63.654362 101.883517) (xy 63.363096 101.122189) (xy 63.299725 101.027347) (xy 62.997003 100.868352)
+ (xy 62.961648 100.903707) (xy 62.961648 100.832997) (xy 62.961648 97.287003) (xy 61.595 95.920355) (xy 61.559645 95.95571)
+ (xy 61.559645 95.885) (xy 60.192997 94.518352) (xy 59.890275 94.677347) (xy 59.55789 95.421644) (xy 59.535638 96.236483)
+ (xy 59.826904 96.997811) (xy 59.890275 97.092653) (xy 60.192997 97.251648) (xy 61.559645 95.885) (xy 61.559645 95.95571)
+ (xy 60.228352 97.287003) (xy 60.387347 97.589725) (xy 61.131644 97.92211) (xy 61.946483 97.944362) (xy 62.707811 97.653096)
+ (xy 62.802653 97.589725) (xy 62.961648 97.287003) (xy 62.961648 100.832997) (xy 62.802653 100.530275) (xy 62.058356 100.19789)
+ (xy 61.243517 100.175638) (xy 60.482189 100.466904) (xy 60.387347 100.530275) (xy 60.228352 100.832997) (xy 61.595 102.199645)
+ (xy 62.961648 100.832997) (xy 62.961648 100.903707) (xy 61.630355 102.235) (xy 62.997003 103.601648) (xy 63.299725 103.442653)
+ (xy 63.63211 102.698356) (xy 63.654362 101.883517) (xy 63.654362 106.963517) (xy 63.363096 106.202189) (xy 63.299725 106.107347)
+ (xy 62.997003 105.948352) (xy 62.961648 105.983707) (xy 62.961648 105.912997) (xy 62.961648 103.637003) (xy 61.595 102.270355)
+ (xy 61.559645 102.30571) (xy 61.559645 102.235) (xy 60.192997 100.868352) (xy 59.890275 101.027347) (xy 59.55789 101.771644)
+ (xy 59.535638 102.586483) (xy 59.826904 103.347811) (xy 59.890275 103.442653) (xy 60.192997 103.601648) (xy 61.559645 102.235)
+ (xy 61.559645 102.30571) (xy 60.228352 103.637003) (xy 60.387347 103.939725) (xy 61.131644 104.27211) (xy 61.946483 104.294362)
+ (xy 62.707811 104.003096) (xy 62.802653 103.939725) (xy 62.961648 103.637003) (xy 62.961648 105.912997) (xy 62.802653 105.610275)
+ (xy 62.058356 105.27789) (xy 61.243517 105.255638) (xy 60.482189 105.546904) (xy 60.469245 105.555552) (xy 60.469245 104.494972)
+ (xy 60.25443 103.97508) (xy 59.857013 103.576968) (xy 59.337496 103.361246) (xy 58.774972 103.360755) (xy 58.574362 103.443645)
+ (xy 58.574362 101.883517) (xy 58.574362 95.533517) (xy 58.283096 94.772189) (xy 58.219725 94.677347) (xy 57.917003 94.518352)
+ (xy 57.881648 94.553707) (xy 56.550355 95.885) (xy 57.917003 97.251648) (xy 58.219725 97.092653) (xy 58.55211 96.348356)
+ (xy 58.574362 95.533517) (xy 58.574362 101.883517) (xy 58.283096 101.122189) (xy 58.219725 101.027347) (xy 57.917003 100.868352)
+ (xy 57.881648 100.903707) (xy 56.550355 102.235) (xy 57.917003 103.601648) (xy 58.219725 103.442653) (xy 58.55211 102.698356)
+ (xy 58.574362 101.883517) (xy 58.574362 103.443645) (xy 58.25508 103.57557) (xy 57.881648 103.94835) (xy 57.856968 103.972987)
+ (xy 57.641246 104.492504) (xy 57.640755 105.055028) (xy 57.85557 105.57492) (xy 58.252987 105.973032) (xy 58.772504 106.188754)
+ (xy 59.335028 106.189245) (xy 59.85492 105.97443) (xy 60.253032 105.577013) (xy 60.468754 105.057496) (xy 60.469245 104.494972)
+ (xy 60.469245 105.555552) (xy 60.387347 105.610275) (xy 60.228352 105.912997) (xy 61.595 107.279645) (xy 62.961648 105.912997)
+ (xy 62.961648 105.983707) (xy 61.630355 107.315) (xy 62.997003 108.681648) (xy 63.299725 108.522653) (xy 63.63211 107.778356)
+ (xy 63.654362 106.963517) (xy 63.654362 113.313517) (xy 63.363096 112.552189) (xy 63.299725 112.457347) (xy 62.997003 112.298352)
+ (xy 62.961648 112.333707) (xy 62.961648 112.262997) (xy 62.961648 108.717003) (xy 61.595 107.350355) (xy 61.559645 107.38571)
+ (xy 61.559645 107.315) (xy 60.192997 105.948352) (xy 59.890275 106.107347) (xy 59.55789 106.851644) (xy 59.535638 107.666483)
+ (xy 59.826904 108.427811) (xy 59.890275 108.522653) (xy 60.192997 108.681648) (xy 61.559645 107.315) (xy 61.559645 107.38571)
+ (xy 60.228352 108.717003) (xy 60.387347 109.019725) (xy 61.131644 109.35211) (xy 61.946483 109.374362) (xy 62.707811 109.083096)
+ (xy 62.802653 109.019725) (xy 62.961648 108.717003) (xy 62.961648 112.262997) (xy 62.802653 111.960275) (xy 62.058356 111.62789)
+ (xy 61.243517 111.605638) (xy 60.482189 111.896904) (xy 60.387347 111.960275) (xy 60.228352 112.262997) (xy 61.595 113.629645)
+ (xy 62.961648 112.262997) (xy 62.961648 112.333707) (xy 61.630355 113.665) (xy 62.997003 115.031648) (xy 63.299725 114.872653)
+ (xy 63.63211 114.128356) (xy 63.654362 113.313517) (xy 63.654362 118.393517) (xy 63.363096 117.632189) (xy 63.299725 117.537347)
+ (xy 62.997003 117.378352) (xy 62.961648 117.413707) (xy 62.961648 117.342997) (xy 62.961648 115.067003) (xy 61.595 113.700355)
+ (xy 61.559645 113.73571) (xy 61.559645 113.665) (xy 60.192997 112.298352) (xy 59.890275 112.457347) (xy 59.55789 113.201644)
+ (xy 59.535638 114.016483) (xy 59.826904 114.777811) (xy 59.890275 114.872653) (xy 60.192997 115.031648) (xy 61.559645 113.665)
+ (xy 61.559645 113.73571) (xy 60.228352 115.067003) (xy 60.387347 115.369725) (xy 61.131644 115.70211) (xy 61.946483 115.724362)
+ (xy 62.707811 115.433096) (xy 62.802653 115.369725) (xy 62.961648 115.067003) (xy 62.961648 117.342997) (xy 62.802653 117.040275)
+ (xy 62.058356 116.70789) (xy 61.243517 116.685638) (xy 60.482189 116.976904) (xy 60.469245 116.985552) (xy 60.469245 115.924972)
+ (xy 60.25443 115.40508) (xy 59.857013 115.006968) (xy 59.337496 114.791246) (xy 58.774972 114.790755) (xy 58.574362 114.873645)
+ (xy 58.574362 113.313517) (xy 58.574362 106.963517) (xy 58.283096 106.202189) (xy 58.219725 106.107347) (xy 57.917003 105.948352)
+ (xy 57.881648 105.983707) (xy 56.550355 107.315) (xy 57.917003 108.681648) (xy 58.219725 108.522653) (xy 58.55211 107.778356)
+ (xy 58.574362 106.963517) (xy 58.574362 113.313517) (xy 58.283096 112.552189) (xy 58.219725 112.457347) (xy 57.917003 112.298352)
+ (xy 57.881648 112.333707) (xy 56.550355 113.665) (xy 57.917003 115.031648) (xy 58.219725 114.872653) (xy 58.55211 114.128356)
+ (xy 58.574362 113.313517) (xy 58.574362 114.873645) (xy 58.25508 115.00557) (xy 57.881648 115.37835) (xy 57.856968 115.402987)
+ (xy 57.641246 115.922504) (xy 57.640755 116.485028) (xy 57.85557 117.00492) (xy 58.252987 117.403032) (xy 58.772504 117.618754)
+ (xy 59.335028 117.619245) (xy 59.85492 117.40443) (xy 60.253032 117.007013) (xy 60.468754 116.487496) (xy 60.469245 115.924972)
+ (xy 60.469245 116.985552) (xy 60.387347 117.040275) (xy 60.228352 117.342997) (xy 61.595 118.709645) (xy 62.961648 117.342997)
+ (xy 62.961648 117.413707) (xy 61.630355 118.745) (xy 62.997003 120.111648) (xy 63.299725 119.952653) (xy 63.63211 119.208356)
+ (xy 63.654362 118.393517) (xy 63.654362 153.98317) (xy 62.961648 153.974511) (xy 62.961648 120.147003) (xy 61.595 118.780355)
+ (xy 61.559645 118.81571) (xy 61.559645 118.745) (xy 60.192997 117.378352) (xy 59.890275 117.537347) (xy 59.55789 118.281644)
+ (xy 59.535638 119.096483) (xy 59.826904 119.857811) (xy 59.890275 119.952653) (xy 60.192997 120.111648) (xy 61.559645 118.745)
+ (xy 61.559645 118.81571) (xy 60.228352 120.147003) (xy 60.387347 120.449725) (xy 61.131644 120.78211) (xy 61.946483 120.804362)
+ (xy 62.707811 120.513096) (xy 62.802653 120.449725) (xy 62.961648 120.147003) (xy 62.961648 153.974511) (xy 58.574362 153.91967)
+ (xy 58.574362 118.393517) (xy 58.283096 117.632189) (xy 58.219725 117.537347) (xy 57.917003 117.378352) (xy 57.881648 117.413707)
+ (xy 56.550355 118.745) (xy 57.917003 120.111648) (xy 58.219725 119.952653) (xy 58.55211 119.208356) (xy 58.574362 118.393517)
+ (xy 58.574362 153.91967) (xy 57.881648 153.911011) (xy 55.125 153.876553) (xy 55.125 120.170358) (xy 55.148353 120.147004)
+ (xy 55.307347 120.449725) (xy 56.051644 120.78211) (xy 56.866483 120.804362) (xy 57.627811 120.513096) (xy 57.722653 120.449725)
+ (xy 57.881648 120.147003) (xy 56.515 118.780355) (xy 56.500857 118.794497) (xy 56.465502 118.759142) (xy 56.479645 118.745)
+ (xy 56.465502 118.730857) (xy 56.500857 118.695502) (xy 56.515 118.709645) (xy 57.881648 117.342997) (xy 57.722653 117.040275)
+ (xy 56.978356 116.70789) (xy 56.163517 116.685638) (xy 55.402189 116.976904) (xy 55.307347 117.040275) (xy 55.148353 117.342995)
+ (xy 55.125 117.319642) (xy 55.125 115.090358) (xy 55.148353 115.067004) (xy 55.307347 115.369725) (xy 56.051644 115.70211)
+ (xy 56.866483 115.724362) (xy 57.627811 115.433096) (xy 57.722653 115.369725) (xy 57.881648 115.067003) (xy 56.515 113.700355)
+ (xy 56.500857 113.714497) (xy 56.465502 113.679142) (xy 56.479645 113.665) (xy 56.465502 113.650857) (xy 56.500857 113.615502)
+ (xy 56.515 113.629645) (xy 57.881648 112.262997) (xy 57.722653 111.960275) (xy 56.978356 111.62789) (xy 56.163517 111.605638)
+ (xy 55.402189 111.896904) (xy 55.307347 111.960275) (xy 55.148353 112.262995) (xy 55.125 112.239642) (xy 55.125 108.740358)
+ (xy 55.148353 108.717004) (xy 55.307347 109.019725) (xy 56.051644 109.35211) (xy 56.866483 109.374362) (xy 57.627811 109.083096)
+ (xy 57.722653 109.019725) (xy 57.881648 108.717003) (xy 56.515 107.350355) (xy 56.500857 107.364497) (xy 56.465502 107.329142)
+ (xy 56.479645 107.315) (xy 56.465502 107.300857) (xy 56.500857 107.265502) (xy 56.515 107.279645) (xy 57.881648 105.912997)
+ (xy 57.722653 105.610275) (xy 56.978356 105.27789) (xy 56.163517 105.255638) (xy 55.402189 105.546904) (xy 55.307347 105.610275)
+ (xy 55.148353 105.912995) (xy 55.125 105.889642) (xy 55.125 103.660358) (xy 55.148353 103.637004) (xy 55.307347 103.939725)
+ (xy 56.051644 104.27211) (xy 56.866483 104.294362) (xy 57.627811 104.003096) (xy 57.722653 103.939725) (xy 57.881648 103.637003)
+ (xy 56.515 102.270355) (xy 56.500857 102.284497) (xy 56.465502 102.249142) (xy 56.479645 102.235) (xy 56.465502 102.220857)
+ (xy 56.500857 102.185502) (xy 56.515 102.199645) (xy 57.881648 100.832997) (xy 57.722653 100.530275) (xy 56.978356 100.19789)
+ (xy 56.163517 100.175638) (xy 55.402189 100.466904) (xy 55.307347 100.530275) (xy 55.148353 100.832995) (xy 55.125 100.809642)
+ (xy 55.125 97.310358) (xy 55.148353 97.287004) (xy 55.307347 97.589725) (xy 56.051644 97.92211) (xy 56.866483 97.944362)
+ (xy 57.627811 97.653096) (xy 57.722653 97.589725) (xy 57.881648 97.287003) (xy 56.515 95.920355) (xy 56.500857 95.934497)
+ (xy 56.465502 95.899142) (xy 56.479645 95.885) (xy 56.465502 95.870857) (xy 56.500857 95.835502) (xy 56.515 95.849645)
+ (xy 57.881648 94.482997) (xy 57.722653 94.180275) (xy 56.978356 93.84789) (xy 56.163517 93.825638) (xy 55.402189 94.116904)
+ (xy 55.307347 94.180275) (xy 55.148353 94.482995) (xy 55.125 94.459642) (xy 55.125 92.230358) (xy 55.148353 92.207004)
+ (xy 55.307347 92.509725) (xy 56.051644 92.84211) (xy 56.866483 92.864362) (xy 57.627811 92.573096) (xy 57.722653 92.509725)
+ (xy 57.881648 92.207003) (xy 56.515 90.840355) (xy 56.500857 90.854497) (xy 56.465502 90.819142) (xy 56.479645 90.805)
+ (xy 56.465502 90.790857) (xy 56.500857 90.755502) (xy 56.515 90.769645) (xy 57.881648 89.402997) (xy 57.722653 89.100275)
+ (xy 56.978356 88.76789) (xy 56.163517 88.745638) (xy 55.402189 89.036904) (xy 55.307347 89.100275) (xy 55.148353 89.402995)
+ (xy 55.125 89.379642) (xy 55.125 85.880358) (xy 55.148353 85.857004) (xy 55.307347 86.159725) (xy 56.051644 86.49211)
+ (xy 56.866483 86.514362) (xy 57.627811 86.223096) (xy 57.722653 86.159725) (xy 57.881648 85.857003) (xy 56.515 84.490355)
+ (xy 56.500857 84.504497) (xy 56.465502 84.469142) (xy 56.479645 84.455) (xy 56.465502 84.440857) (xy 56.500857 84.405502)
+ (xy 56.515 84.419645) (xy 57.881648 83.052997) (xy 57.722653 82.750275) (xy 56.978356 82.41789) (xy 56.163517 82.395638)
+ (xy 55.402189 82.686904) (xy 55.307347 82.750275) (xy 55.148353 83.052995) (xy 55.125 83.029642) (xy 55.125 80.800358)
+ (xy 55.148353 80.777004) (xy 55.307347 81.079725) (xy 56.051644 81.41211) (xy 56.866483 81.434362) (xy 57.627811 81.143096)
+ (xy 57.722653 81.079725) (xy 57.881648 80.777003) (xy 56.515 79.410355) (xy 56.500857 79.424497) (xy 56.465502 79.389142)
+ (xy 56.479645 79.375) (xy 56.465502 79.360857) (xy 56.500857 79.325502) (xy 56.515 79.339645) (xy 57.881648 77.972997)
+ (xy 57.722653 77.670275) (xy 56.978356 77.33789) (xy 56.163517 77.315638) (xy 55.402189 77.606904) (xy 55.307347 77.670275)
+ (xy 55.148353 77.972995) (xy 55.125 77.949642) (xy 55.125 58.124799) (xy 79.92595 58.084797) (xy 79.925047 58.1318)
+ (xy 80.102632 58.584986) (xy 80.129284 58.624872) (xy 80.346234 58.683411) (xy 80.946493 58.083151) (xy 81.017317 58.083037)
+ (xy 80.381589 58.718766) (xy 80.440128 58.935716) (xy 80.886151 59.130595) (xy 81.3728 59.139953) (xy 81.825986 58.962368)
+ (xy 81.865872 58.935716) (xy 81.924411 58.718766) (xy 81.288245 58.0826) (xy 81.358841 58.082486) (xy 81.959766 58.683411)
+ (xy 82.176716 58.624872) (xy 82.371595 58.178849) (xy 82.373479 58.080849) (xy 82.466029 58.0807) (xy 82.465047 58.1318)
+ (xy 82.642632 58.584986) (xy 82.669284 58.624872) (xy 82.886234 58.683411) (xy 83.490596 58.079048) (xy 83.561421 58.078933)
+ (xy 82.921589 58.718766) (xy 82.980128 58.935716) (xy 83.426151 59.130595) (xy 83.9128 59.139953) (xy 84.365986 58.962368)
+ (xy 84.405872 58.935716) (xy 84.464411 58.718766) (xy 83.824155 58.07851) (xy 83.894751 58.078396) (xy 84.499766 58.683411)
+ (xy 84.716716 58.624872) (xy 84.911595 58.178849) (xy 84.913558 58.076752) (xy 89.047331 58.070085) (xy 88.914694 58.12489)
+ (xy 88.605974 58.433072) (xy 88.43869 58.835936) (xy 88.43831 59.272151) (xy 88.60489 59.675306) (xy 88.913072 59.984026)
+ (xy 89.315936 60.15131) (xy 89.752151 60.15169) (xy 90.155306 59.98511) (xy 90.464026 59.676928) (xy 90.63131 59.274064)
+ (xy 90.63169 58.837849) (xy 90.46511 58.434694) (xy 90.156928 58.125974) (xy 90.018561 58.068519) (xy 98.490126 58.054855)
+ (xy 98.471668 58.099308) (xy 98.471332 58.484999) (xy 98.618618 58.84146) (xy 98.891105 59.114423) (xy 99.247308 59.262332)
+ (xy 99.632999 59.262668) (xy 99.98946 59.115382) (xy 100.10372 59.00132) (xy 100.142618 59.09546) (xy 100.415105 59.368423)
+ (xy 100.771308 59.516332) (xy 101.156999 59.516668) (xy 101.51346 59.369382) (xy 101.786423 59.096895) (xy 101.934332 58.740692)
+ (xy 101.934668 58.355001) (xy 101.808439 58.049503) (xy 104.627352 58.044956) (xy 104.48054 58.105618) (xy 104.207577 58.378105)
+ (xy 104.059668 58.734308) (xy 104.059332 59.119999) (xy 104.206618 59.47646) (xy 104.479105 59.749423) (xy 104.835308 59.897332)
+ (xy 105.220999 59.897668) (xy 105.57746 59.750382) (xy 105.727522 59.600581) (xy 105.876105 59.749423) (xy 106.232308 59.897332)
+ (xy 106.617999 59.897668) (xy 106.97446 59.750382) (xy 107.247423 59.477895) (xy 107.395332 59.121692) (xy 107.395668 58.736001)
+ (xy 107.261628 58.4116) (xy 119.775098 58.4116) (xy 119.59354 58.486618) (xy 119.320577 58.759105) (xy 119.172668 59.115308)
+ (xy 119.172332 59.500999) (xy 119.319618 59.85746) (xy 119.592105 60.130423) (xy 119.948308 60.278332) (xy 120.333999 60.278668)
+ (xy 120.69046 60.131382) (xy 120.963423 59.858895) (xy 121.111332 59.502692) (xy 121.111668 59.117001) (xy 120.964382 58.76054)
+ (xy 120.691895 58.487577) (xy 120.508922 58.4116) (xy 157.347454 58.4116) (xy 158.306927 59.371073) (xy 158.51021 59.506903)
+ (xy 158.510211 59.506903) (xy 158.75 59.5546) (xy 160.649454 59.5546) (xy 161.5524 60.457546) (xy 161.5524 61.595)
+ (xy 161.600097 61.83479) (xy 161.735927 62.038073) (xy 162.0604 62.362546) (xy 162.0604 65.278) (xy 162.108097 65.51779)
+ (xy 162.243927 65.721073) (xy 162.878927 66.356073) (xy 163.08221 66.491903) (xy 163.082211 66.491903) (xy 163.322 66.5396)
+ (xy 166.243 66.5396) (xy 166.482789 66.491903) (xy 166.48279 66.491903) (xy 166.686073 66.356073) (xy 169.226073 63.816073)
+ (xy 169.361902 63.61279) (xy 169.361903 63.612789) (xy 169.4096 63.373) (xy 169.4096 59.1736) (xy 293.618454 59.1736)
+ (xy 294.958927 60.514073) (xy 295.16221 60.649902) (xy 295.162211 60.649903) (xy 295.402 60.6976) (xy 302.26 60.6976)
+ (xy 302.499789 60.649903) (xy 302.49979 60.649903) (xy 302.703073 60.514073) (xy 304.424545 58.7926) (xy 306.018198 58.7926)
+ (xy 305.989668 58.861308) (xy 305.989332 59.246999) (xy 306.136618 59.60346) (xy 306.409105 59.876423) (xy 306.765308 60.024332)
+ (xy 307.150999 60.024668) (xy 307.338709 59.947107) (xy 307.406618 60.11146) (xy 307.679105 60.384423) (xy 308.035308 60.532332)
+ (xy 308.420999 60.532668) (xy 308.77746 60.385382) (xy 309.050423 60.112895) (xy 309.128563 59.924712) (xy 309.182927 60.006073)
+ (xy 309.436927 60.260073) (xy 309.64021 60.395902) (xy 309.640211 60.395903) (xy 309.859713 60.439564) (xy 309.804405 60.566151)
+ (xy 309.797539 60.923204) (xy 309.692692 60.879668) (xy 309.307001 60.879332) (xy 308.95054 61.026618) (xy 308.677577 61.299105)
+ (xy 308.529668 61.655308) (xy 308.529332 62.040999) (xy 308.676618 62.39746) (xy 308.949105 62.670423) (xy 309.305308 62.818332)
+ (xy 309.690999 62.818668) (xy 310.04746 62.671382) (xy 310.320423 62.398895) (xy 310.468332 62.042692) (xy 310.468433 61.925883)
+ (xy 310.756151 62.051595) (xy 311.2428 62.060953) (xy 311.57765 61.929738) (xy 311.577426 62.186427) (xy 311.214927 62.548927)
+ (xy 311.079097 62.75221) (xy 311.0314 62.992) (xy 311.0314 64.042467) (xy 310.810895 63.821577) (xy 310.454692 63.673668)
+ (xy 310.069001 63.673332) (xy 309.71254 63.820618) (xy 309.439577 64.093105) (xy 309.291668 64.449308) (xy 309.291332 64.834999)
+ (xy 309.438618 65.19146) (xy 309.711105 65.464423) (xy 310.067308 65.612332) (xy 310.452999 65.612668) (xy 310.80946 65.465382)
+ (xy 311.0314 65.243829) (xy 311.0314 67.991617) (xy 310.704001 67.991332) (xy 310.34754 68.138618) (xy 310.074577 68.411105)
+ (xy 309.926668 68.767308) (xy 309.926332 69.152999) (xy 310.060371 69.4774) (xy 308.973378 69.4774) (xy 308.817668 69.321417)
+ (xy 308.817668 63.562001) (xy 308.670382 63.20554) (xy 308.397895 62.932577) (xy 308.041692 62.784668) (xy 307.656001 62.784332)
+ (xy 307.29954 62.931618) (xy 307.026577 63.204105) (xy 306.878668 63.560308) (xy 306.878332 63.945999) (xy 307.025618 64.30246)
+ (xy 307.298105 64.575423) (xy 307.654308 64.723332) (xy 308.039999 64.723668) (xy 308.39646 64.576382) (xy 308.669423 64.303895)
+ (xy 308.817332 63.947692) (xy 308.817668 63.562001) (xy 308.817668 69.321417) (xy 308.778895 69.282577) (xy 308.422692 69.134668)
+ (xy 308.037001 69.134332) (xy 307.68054 69.281618) (xy 307.407577 69.554105) (xy 307.259668 69.910308) (xy 307.259407 70.20925)
+ (xy 307.060988 70.291234) (xy 307.019382 70.19054) (xy 306.746895 69.917577) (xy 306.390692 69.769668) (xy 306.005001 69.769332)
+ (xy 305.992261 69.774595) (xy 306.256423 69.510895) (xy 306.404332 69.154692) (xy 306.404668 68.769001) (xy 306.257382 68.41254)
+ (xy 305.984895 68.139577) (xy 305.896668 68.102941) (xy 305.896668 64.705001) (xy 305.749382 64.34854) (xy 305.476895 64.075577)
+ (xy 305.464386 64.070382) (xy 305.515332 63.947692) (xy 305.515668 63.562001) (xy 305.368382 63.20554) (xy 305.095895 62.932577)
+ (xy 304.739692 62.784668) (xy 304.354001 62.784332) (xy 304.322676 62.797274) (xy 304.372332 62.677692) (xy 304.372668 62.292001)
+ (xy 304.225382 61.93554) (xy 303.952895 61.662577) (xy 303.596692 61.514668) (xy 303.211001 61.514332) (xy 302.85454 61.661618)
+ (xy 302.581577 61.934105) (xy 302.433668 62.290308) (xy 302.433569 62.40365) (xy 302.068001 62.403332) (xy 301.943947 62.454589)
+ (xy 301.939382 62.44354) (xy 301.666895 62.170577) (xy 301.310692 62.022668) (xy 300.925001 62.022332) (xy 300.56854 62.169618)
+ (xy 300.435659 62.302267) (xy 300.435668 62.292001) (xy 300.288382 61.93554) (xy 300.015895 61.662577) (xy 299.659692 61.514668)
+ (xy 299.274001 61.514332) (xy 298.91754 61.661618) (xy 298.644577 61.934105) (xy 298.496668 62.290308) (xy 298.496332 62.675999)
+ (xy 298.643618 63.03246) (xy 298.916105 63.305423) (xy 299.272308 63.453332) (xy 299.657999 63.453668) (xy 300.01446 63.306382)
+ (xy 300.14734 63.173732) (xy 300.147332 63.183999) (xy 300.294618 63.54046) (xy 300.567105 63.813423) (xy 300.923308 63.961332)
+ (xy 301.308999 63.961668) (xy 301.433052 63.91041) (xy 301.437618 63.92146) (xy 301.710105 64.194423) (xy 302.066308 64.342332)
+ (xy 302.451999 64.342668) (xy 302.80846 64.195382) (xy 303.081423 63.922895) (xy 303.229332 63.566692) (xy 303.22943 63.453349)
+ (xy 303.594999 63.453668) (xy 303.626323 63.440725) (xy 303.576668 63.560308) (xy 303.576332 63.945999) (xy 303.723618 64.30246)
+ (xy 303.996105 64.575423) (xy 304.008613 64.580617) (xy 303.957668 64.703308) (xy 303.957332 65.088999) (xy 304.104618 65.44546)
+ (xy 304.377105 65.718423) (xy 304.733308 65.866332) (xy 305.118999 65.866668) (xy 305.47546 65.719382) (xy 305.748423 65.446895)
+ (xy 305.896332 65.090692) (xy 305.896668 64.705001) (xy 305.896668 68.102941) (xy 305.628692 67.991668) (xy 305.243001 67.991332)
+ (xy 304.88654 68.138618) (xy 304.613577 68.411105) (xy 304.465668 68.767308) (xy 304.465332 69.152999) (xy 304.612618 69.50946)
+ (xy 304.885105 69.782423) (xy 305.241308 69.930332) (xy 305.626999 69.930668) (xy 305.639738 69.925404) (xy 305.375577 70.189105)
+ (xy 305.227668 70.545308) (xy 305.227332 70.930999) (xy 305.374618 71.28746) (xy 305.647105 71.560423) (xy 306.003308 71.708332)
+ (xy 306.388999 71.708668) (xy 306.730011 71.567765) (xy 306.771618 71.66846) (xy 306.858029 71.755022) (xy 306.645577 71.967105)
+ (xy 306.497668 72.323308) (xy 306.497332 72.708999) (xy 306.644618 73.06546) (xy 306.885522 73.306785) (xy 306.79154 73.345618)
+ (xy 306.518577 73.618105) (xy 306.376428 73.960434) (xy 306.259001 73.960332) (xy 305.90254 74.107618) (xy 305.629577 74.380105)
+ (xy 305.624382 74.392613) (xy 305.501692 74.341668) (xy 305.116001 74.341332) (xy 304.75954 74.488618) (xy 304.486577 74.761105)
+ (xy 304.338668 75.117308) (xy 304.338332 75.502999) (xy 304.435689 75.738624) (xy 304.100001 75.738332) (xy 303.74354 75.885618)
+ (xy 303.470577 76.158105) (xy 303.322668 76.514308) (xy 303.322641 76.545077) (xy 303.215692 76.500668) (xy 303.10246 76.500569)
+ (xy 303.102668 76.262001) (xy 302.955382 75.90554) (xy 302.682895 75.632577) (xy 302.326692 75.484668) (xy 301.941001 75.484332)
+ (xy 301.58454 75.631618) (xy 301.324668 75.891036) (xy 301.324668 72.198001) (xy 301.324668 68.769001) (xy 301.177382 68.41254)
+ (xy 300.904895 68.139577) (xy 300.548692 67.991668) (xy 300.163001 67.991332) (xy 299.80654 68.138618) (xy 299.533577 68.411105)
+ (xy 299.385668 68.767308) (xy 299.385332 69.152999) (xy 299.532618 69.50946) (xy 299.805105 69.782423) (xy 300.161308 69.930332)
+ (xy 300.546999 69.930668) (xy 300.90346 69.783382) (xy 301.176423 69.510895) (xy 301.324332 69.154692) (xy 301.324668 68.769001)
+ (xy 301.324668 72.198001) (xy 301.177382 71.84154) (xy 300.904895 71.568577) (xy 300.548692 71.420668) (xy 300.163001 71.420332)
+ (xy 299.80654 71.567618) (xy 299.533577 71.840105) (xy 299.385668 72.196308) (xy 299.385627 72.242616) (xy 299.273178 71.970467)
+ (xy 299.419332 71.618492) (xy 299.419668 71.232801) (xy 299.272382 70.87634) (xy 299.008391 70.611888) (xy 299.144423 70.476095)
+ (xy 299.292332 70.119892) (xy 299.292668 69.734201) (xy 299.145382 69.37774) (xy 298.872895 69.104777) (xy 298.516692 68.956868)
+ (xy 298.131001 68.956532) (xy 297.77454 69.103818) (xy 297.501577 69.376305) (xy 297.353668 69.732508) (xy 297.353332 70.118199)
+ (xy 297.500618 70.47466) (xy 297.764608 70.739111) (xy 297.628577 70.874905) (xy 297.480668 71.231108) (xy 297.480332 71.616799)
+ (xy 297.626821 71.971332) (xy 297.480668 72.323308) (xy 297.480332 72.708999) (xy 297.627618 73.06546) (xy 297.900105 73.338423)
+ (xy 298.256308 73.486332) (xy 298.37571 73.486436) (xy 298.516618 73.82746) (xy 298.789105 74.100423) (xy 299.145308 74.248332)
+ (xy 299.530999 74.248668) (xy 299.88746 74.101382) (xy 300.160423 73.828895) (xy 300.308332 73.472692) (xy 300.30843 73.35946)
+ (xy 300.546999 73.359668) (xy 300.90346 73.212382) (xy 301.176423 72.939895) (xy 301.324332 72.583692) (xy 301.324668 72.198001)
+ (xy 301.324668 75.891036) (xy 301.311577 75.904105) (xy 301.163668 76.260308) (xy 301.163332 76.645999) (xy 301.310618 77.00246)
+ (xy 301.583105 77.275423) (xy 301.939308 77.423332) (xy 302.052539 77.42343) (xy 302.052332 77.661999) (xy 302.199618 78.01846)
+ (xy 302.472105 78.291423) (xy 302.828308 78.439332) (xy 303.213999 78.439668) (xy 303.57046 78.292382) (xy 303.843423 78.019895)
+ (xy 303.991332 77.663692) (xy 303.991358 77.632922) (xy 304.098308 77.677332) (xy 304.483999 77.677668) (xy 304.84046 77.530382)
+ (xy 305.113423 77.257895) (xy 305.261332 76.901692) (xy 305.261668 76.516001) (xy 305.16431 76.280375) (xy 305.499999 76.280668)
+ (xy 305.85646 76.133382) (xy 306.129423 75.860895) (xy 306.134617 75.848386) (xy 306.257308 75.899332) (xy 306.642999 75.899668)
+ (xy 306.99946 75.752382) (xy 307.272423 75.479895) (xy 307.414571 75.137565) (xy 307.531999 75.137668) (xy 307.88846 74.990382)
+ (xy 308.161423 74.717895) (xy 308.309332 74.361692) (xy 308.309668 73.976001) (xy 308.162382 73.61954) (xy 307.921477 73.378214)
+ (xy 308.01546 73.339382) (xy 308.288423 73.066895) (xy 308.436332 72.710692) (xy 308.436668 72.325001) (xy 308.289382 71.96854)
+ (xy 308.20297 71.881977) (xy 308.415423 71.669895) (xy 308.563332 71.313692) (xy 308.563592 71.014749) (xy 308.77746 70.926382)
+ (xy 308.973584 70.7306) (xy 310.434617 70.7306) (xy 310.434332 71.057999) (xy 310.581618 71.41446) (xy 310.854105 71.687423)
+ (xy 311.210308 71.835332) (xy 311.595999 71.835668) (xy 311.95246 71.688382) (xy 312.225423 71.415895) (xy 312.373332 71.059692)
+ (xy 312.373668 70.674001) (xy 312.226382 70.31754) (xy 312.141524 70.232533) (xy 312.236902 70.08979) (xy 312.236903 70.089789)
+ (xy 312.2846 69.85) (xy 312.2846 66.374382) (xy 312.611999 66.374668) (xy 312.96846 66.227382) (xy 313.241423 65.954895)
+ (xy 313.389332 65.598692) (xy 313.389668 65.213001) (xy 313.242382 64.85654) (xy 312.969895 64.583577) (xy 312.613692 64.435668)
+ (xy 312.2846 64.435381) (xy 312.2846 63.251546) (xy 312.463717 63.072428) (xy 312.738999 63.072668) (xy 313.09546 62.925382)
+ (xy 313.368423 62.652895) (xy 313.516332 62.296692) (xy 313.516668 61.911001) (xy 313.369382 61.55454) (xy 313.096895 61.281577)
+ (xy 312.740692 61.133668) (xy 312.355001 61.133332) (xy 312.198758 61.197889) (xy 312.241595 61.099849) (xy 312.250953 60.6132)
+ (xy 312.184493 60.4436) (xy 317.4195 60.4436) (xy 317.4195 61.635929) (xy 317.499426 61.828889) (xy 317.647111 61.976574)
+ (xy 317.840071 62.0565) (xy 318.048929 62.0565) (xy 319.445929 62.0565) (xy 319.638889 61.976574) (xy 319.786574 61.828889)
+ (xy 319.8665 61.635929) (xy 319.8665 61.427071) (xy 319.8665 61.197246) (xy 320.100308 61.294332) (xy 320.485999 61.294668)
+ (xy 320.84246 61.147382) (xy 321.115423 60.874895) (xy 321.263332 60.518692) (xy 321.263668 60.133001) (xy 321.116382 59.77654)
+ (xy 320.843895 59.503577) (xy 320.487692 59.355668) (xy 320.201373 59.355418) (xy 320.02579 59.238097) (xy 319.8665 59.206412)
+ (xy 319.8665 58.1576) (xy 321.578098 58.1576) (xy 321.39654 58.232618) (xy 321.123577 58.505105) (xy 320.975668 58.861308)
+ (xy 320.975332 59.246999) (xy 321.122618 59.60346) (xy 321.395105 59.876423) (xy 321.751308 60.024332) (xy 322.136999 60.024668)
+ (xy 322.49346 59.877382) (xy 322.766423 59.604895) (xy 322.914332 59.248692) (xy 322.914668 58.863001) (xy 322.767382 58.50654)
+ (xy 322.494895 58.233577) (xy 322.311922 58.1576) (xy 327.630417 58.1576) (xy 327.630132 58.484999) (xy 327.777418 58.84146)
+ (xy 328.049905 59.114423) (xy 328.406108 59.262332) (xy 328.791799 59.262668) (xy 329.14826 59.115382) (xy 329.421223 58.842895)
+ (xy 329.569132 58.486692) (xy 329.569418 58.1576) (xy 330.829454 58.1576) (xy 331.6054 58.933546) (xy 331.6054 62.374621)
+ (xy 331.410577 62.569105) (xy 331.262668 62.925308) (xy 331.262332 63.310999) (xy 331.409618 63.66746) (xy 331.682105 63.940423)
+ (xy 332.038308 64.088332) (xy 332.423999 64.088668) (xy 332.78046 63.941382) (xy 333.053423 63.668895) (xy 333.055892 63.662948)
+ (xy 333.206105 63.813423) (xy 333.562308 63.961332) (xy 333.947999 63.961668) (xy 334.30446 63.814382) (xy 334.577423 63.541895)
+ (xy 334.725332 63.185692) (xy 334.725668 62.800001) (xy 334.578382 62.44354) (xy 334.3826 62.247415) (xy 334.3826 58.547)
+ (xy 334.334903 58.307211) (xy 334.334902 58.30721) (xy 334.199073 58.103927) (xy 333.770516 57.67537) (xy 345.077899 57.657132)
+ (xy 344.978668 57.896108) (xy 344.978332 58.281799) (xy 345.125618 58.63826) (xy 345.398105 58.911223) (xy 345.754308 59.059132)
+ (xy 346.139999 59.059468) (xy 346.49646 58.912182) (xy 346.769423 58.639695) (xy 346.917332 58.283492) (xy 346.917668 57.897801)
+ (xy 346.817067 57.654327) (xy 348.35045 57.651854) (xy 348.280668 57.819908) (xy 348.280332 58.205599) (xy 348.427618 58.56206)
+ (xy 348.700105 58.835023) (xy 349.056308 58.982932) (xy 349.441999 58.983268) (xy 349.79846 58.835982) (xy 350.071423 58.563495)
+ (xy 350.219332 58.207292) (xy 350.219668 57.821601) (xy 350.148332 57.648954) (xy 364.875 57.625202) (xy 364.875 133.7394)
+ )
+ )
+ )
+)
diff --git a/demos/video/video.net b/demos/video/video.net
new file mode 100644
index 0000000..cdfd673
--- /dev/null
+++ b/demos/video/video.net
@@ -0,0 +1,4910 @@
+(export (version D)
+ (design
+ (source F:/kicad-launchpad/testing/demos/video/video.sch)
+ (date "30/08/2014 20:23:52")
+ (tool "Eeschema (2014-08-26 BZR 5101)-product"))
+ (components
+ (comp (ref J4)
+ (value DB9FEM)
+ (footprint connect:DB9FC)
+ (libsource (lib conn) (part DB9))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 84DFBB8F))
+ (comp (ref P8)
+ (value BNC)
+ (footprint discret:SUBCLICK)
+ (libsource (lib device) (part BNC))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 30705D02))
+ (comp (ref P3)
+ (value BNC)
+ (footprint discret:SUBCLICK)
+ (libsource (lib device) (part BNC))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32F9F1AD))
+ (comp (ref P2)
+ (value BNC)
+ (footprint discret:SUBCLICK)
+ (libsource (lib device) (part BNC))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32F9F1A3))
+ (comp (ref P1)
+ (value BNC)
+ (footprint discret:SUBCLICK)
+ (libsource (lib device) (part BNC))
+ (sheetpath (names /) (tstamps /))
+ (tstamp 32F9F198))
+ (comp (ref U6)
+ (value 74LS245)
+ (footprint lib_smd:SO20L)
+ (libsource (lib 74xx) (part 74LS245))
+ (sheetpath (names /muxdata/) (tstamps /4BF0367D/))
+ (tstamp 4BF036D5))
+ (comp (ref U5)
+ (value 74LS245)
+ (footprint lib_smd:SO20L)
+ (libsource (lib 74xx) (part 74LS245))
+ (sheetpath (names /muxdata/) (tstamps /4BF0367D/))
+ (tstamp 4BF036D6))
+ (comp (ref U4)
+ (value 74LS245)
+ (footprint lib_smd:SO20L)
+ (libsource (lib 74xx) (part 74LS245))
+ (sheetpath (names /muxdata/) (tstamps /4BF0367D/))
+ (tstamp 4BF036D7))
+ (comp (ref U3)
+ (value 74LS245)
+ (footprint lib_smd:SO20L)
+ (libsource (lib 74xx) (part 74LS245))
+ (sheetpath (names /muxdata/) (tstamps /4BF0367D/))
+ (tstamp 33A7E303))
+ (comp (ref U22)
+ (value XC4003-VQ100)
+ (footprint lib_smd:VQFP100)
+ (libsource (lib xilinx) (part XC4003-VQ100))
+ (sheetpath (names /muxdata/) (tstamps /4BF0367D/))
+ (tstamp 33A567B8))
+ (comp (ref L6)
+ (value 470nS)
+ (footprint footprints:LRTDK)
+ (libsource (lib special) (part LIGNE_A_RETARD))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 349FB562))
+ (comp (ref R4)
+ (value 10K)
+ (footprint lib_smd:SM1206)
+ (fields)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 33A51A4E))
+ (comp (ref POT1)
+ (value 100K)
+ (footprint lib_smd:POT_CMS)
+ (libsource (lib device) (part POT))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 2276109D))
+ (comp (ref Q1)
+ (value BC848)
+ (footprint lib_smd:SOT23EBC)
+ (libsource (lib device) (part NPN))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761039))
+ (comp (ref Q2)
+ (value BC848)
+ (footprint lib_smd:SOT23EBC)
+ (libsource (lib device) (part NPN))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761066))
+ (comp (ref Q3)
+ (value BC848)
+ (footprint lib_smd:SOT23EBC)
+ (libsource (lib device) (part NPN))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 2276107F))
+ (comp (ref C54)
+ (value 4,7uF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F76))
+ (comp (ref R39)
+ (value 68)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761048))
+ (comp (ref R16)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 2276103E))
+ (comp (ref R17)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 2276107A))
+ (comp (ref R40)
+ (value 68)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761075))
+ (comp (ref R18)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761093))
+ (comp (ref R41)
+ (value 68)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 2276108E))
+ (comp (ref R30)
+ (value 3,3K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FE4))
+ (comp (ref R31)
+ (value 470)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FDF))
+ (comp (ref R10)
+ (value 1K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F80))
+ (comp (ref R11)
+ (value 1K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FBC))
+ (comp (ref R9)
+ (value 150K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761098))
+ (comp (ref C61)
+ (value 47nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F8A))
+ (comp (ref C60)
+ (value 47nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F67))
+ (comp (ref C43)
+ (value 220nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F8F))
+ (comp (ref CV1)
+ (value 5/30pF)
+ (footprint discret:CV3-30PF)
+ (libsource (lib device) (part CTRIM))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FA8))
+ (comp (ref C45)
+ (value 220nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FD5))
+ (comp (ref C48)
+ (value 22nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FCB))
+ (comp (ref C64)
+ (value 6,8uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FC1))
+ (comp (ref C44)
+ (value 220nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F99))
+ (comp (ref C53)
+ (value 330pF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FF8))
+ (comp (ref L1)
+ (value 2,2uH)
+ (footprint lib_smd:SM1812)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FF3))
+ (comp (ref L3)
+ (value 22uH)
+ (footprint lib_smd:SM1812)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761052))
+ (comp (ref L2)
+ (value 22uH)
+ (footprint lib_smd:SM1812)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F71))
+ (comp (ref U20)
+ (value TDA8501)
+ (footprint lib_smd:SO24E)
+ (libsource (lib philips) (part TDA8501))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F4E))
+ (comp (ref C46)
+ (value 220pF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FFD))
+ (comp (ref R34)
+ (value 470)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761089))
+ (comp (ref R33)
+ (value 470)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761070))
+ (comp (ref R32)
+ (value 470)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761043))
+ (comp (ref C55)
+ (value 4,7uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22761057))
+ (comp (ref C59)
+ (value 47nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F62))
+ (comp (ref C58)
+ (value 47nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760F53))
+ (comp (ref X3)
+ (value 4,433618MH)
+ (footprint discret:HC-18UH)
+ (libsource (lib device) (part CRYSTAL))
+ (sheetpath (names /modul/) (tstamps /4BF0367F/))
+ (tstamp 22760FA3))
+ (comp (ref L4)
+ (value 22uF)
+ (footprint lib_smd:SM1812)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 811D9080))
+ (comp (ref R35)
+ (value 470)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 821CDAB8))
+ (comp (ref C1)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 821CDAC2))
+ (comp (ref C2)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F6B))
+ (comp (ref C3)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F75))
+ (comp (ref C4)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F7A))
+ (comp (ref R14)
+ (value 1M)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 821CDA9A))
+ (comp (ref R3)
+ (value 100)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 8116F4AA))
+ (comp (ref R2)
+ (value 100)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 8116F4A5))
+ (comp (ref D1)
+ (value BAT46)
+ (footprint discret:D3)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F7F))
+ (comp (ref D2)
+ (value BAT46)
+ (footprint discret:D3)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F84))
+ (comp (ref D3)
+ (value BAT46)
+ (footprint discret:D3)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F8E))
+ (comp (ref D4)
+ (value BAT46)
+ (footprint discret:D3)
+ (libsource (lib device) (part DIODESCH))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7F93))
+ (comp (ref R27)
+ (value 27K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7FC5))
+ (comp (ref R12)
+ (value 1K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7FCA))
+ (comp (ref C65)
+ (value 22pF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp B15DA8C5))
+ (comp (ref C66)
+ (value 22pF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp B15DA8CA))
+ (comp (ref X2)
+ (value 30MHz)
+ (footprint discret:HC-18UV)
+ (libsource (lib device) (part CRYSTAL))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp B15DA8C0))
+ (comp (ref R19)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7FA7))
+ (comp (ref C5)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7FAC))
+ (comp (ref R20)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp B176B9C3))
+ (comp (ref C8)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp B176B9C8))
+ (comp (ref C6)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7FB1))
+ (comp (ref C7)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp A9CA7FB6))
+ (comp (ref C47)
+ (value 220pF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 821CDABD))
+ (comp (ref U10)
+ (value BT812)
+ (footprint lib_smd:PQFP160)
+ (libsource (lib video-cache) (part BT812))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BECCB834))
+ (comp (ref C62)
+ (value 47uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 811D9071))
+ (comp (ref C9)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BF69A15D))
+ (comp (ref C10)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BF69A162))
+ (comp (ref C11)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BF69A167))
+ (comp (ref C14)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BF69A17B))
+ (comp (ref C13)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BF69A176))
+ (comp (ref C12)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp BF69A171))
+ (comp (ref C16)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 0F47DCB8))
+ (comp (ref R25)
+ (value 220K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp B1754313))
+ (comp (ref C15)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /pal-ntsc.sch/) (tstamps /4BF03681/))
+ (tstamp 0939A342))
+ (comp (ref P12)
+ (value CONN_1)
+ (footprint connect:TESTPOINT)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 34E1751D))
+ (comp (ref P9)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 34E1718B))
+ (comp (ref P11)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 4BF036DA))
+ (comp (ref P10)
+ (value CONN_1)
+ (footprint connect:PINTST)
+ (libsource (lib conn) (part CONN_1))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 4BF036D9))
+ (comp (ref U23)
+ (value XC4003/PQ100)
+ (footprint lib_smd:PQFP100)
+ (libsource (lib xilinx) (part XC4005-PQ100))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33BA5628))
+ (comp (ref C73)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33AFD8EF))
+ (comp (ref C72)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33AFD8ED))
+ (comp (ref C71)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33AFD8E9))
+ (comp (ref C70)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33AFD8AF))
+ (comp (ref U2)
+ (value 4C4001)
+ (footprint lib_smd:SO28)
+ (libsource (lib memory) (part 4C4001))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A805F8))
+ (comp (ref P4)
+ (value CONN_2)
+ (footprint connect:SIL-2)
+ (libsource (lib conn) (part CONN_2))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A7E0C8))
+ (comp (ref R48)
+ (value 10K)
+ (footprint lib_smd:SM1206)
+ (fields)
+ (libsource (lib device) (part R))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A7E0B2))
+ (comp (ref P5)
+ (value CONN_5)
+ (footprint pin_array:PIN_ARRAY_5x1)
+ (libsource (lib conn) (part CONN_5))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A7DFAB))
+ (comp (ref U21)
+ (value XC1736APD8)
+ (footprint dip_sockets:DIP-8__300)
+ (libsource (lib xilinx) (part XC1736APD8))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A7DDDD))
+ (comp (ref R1)
+ (value 10)
+ (footprint lib_smd:SM1206)
+ (fields)
+ (libsource (lib device) (part R))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A7DCE3))
+ (comp (ref C23)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 33A7DC91))
+ (comp (ref U24)
+ (value XC4005-PQ160)
+ (footprint lib_smd:PQFP160)
+ (libsource (lib xilinx) (part XC4005-PQ160))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 3366016A))
+ (comp (ref R13)
+ (value 1K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 2D5AA03C))
+ (comp (ref D6)
+ (value LED)
+ (footprint discret:LEDV)
+ (libsource (lib device) (part LED))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 2D5AA041))
+ (comp (ref C49)
+ (value 22pF)
+ (footprint discret:C1)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp B3BF4EDE))
+ (comp (ref C50)
+ (value 22pF)
+ (footprint discret:C1)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp B3BF4EE8))
+ (comp (ref X1)
+ (value 10MHz)
+ (footprint discret:HC-18UV)
+ (libsource (lib device) (part CRYSTAL))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp B3BF4ED4))
+ (comp (ref R26)
+ (value 220K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp B3BF4ED9))
+ (comp (ref C17)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp BF805547))
+ (comp (ref C18)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp BF80554C))
+ (comp (ref C19)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp BF805551))
+ (comp (ref C20)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp BF805556))
+ (comp (ref C56)
+ (value 4,7uF)
+ (footprint lib_smd:SM1812L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp B9ED7AB0))
+ (comp (ref C57)
+ (value 4,7uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp B9ED7AB5))
+ (comp (ref C63)
+ (value 47uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 228C4700))
+ (comp (ref U7)
+ (value AV9173)
+ (footprint lib_smd:SO8E)
+ (libsource (lib special) (part AV9173))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 2295D392))
+ (comp (ref C22)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 268A4E88))
+ (comp (ref C21)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 268A4E83))
+ (comp (ref R21)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /graphic/) (tstamps /4BF03683/))
+ (tstamp 525FE207))
+ (comp (ref U13)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 32FA1E5B))
+ (comp (ref U14)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036CF))
+ (comp (ref U12)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036CE))
+ (comp (ref U16)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036D0))
+ (comp (ref U15)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036D1))
+ (comp (ref U17)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036D2))
+ (comp (ref U18)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036D3))
+ (comp (ref U19)
+ (value SIM4X32)
+ (footprint footprints:sim72)
+ (libsource (lib memory) (part SIM4X32))
+ (sheetpath (names /RAMS/) (tstamps /4BF03685/))
+ (tstamp 4BF036D4))
+ (comp (ref C69)
+ (value 4,7uF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 33AFD43A))
+ (comp (ref C68)
+ (value 4,7uF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 4BF036D8))
+ (comp (ref C67)
+ (value 4,7uF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 33AFD420))
+ (comp (ref U11)
+ (value S5933_PQ160)
+ (footprint lib_smd:PQFP160)
+ (libsource (lib special) (part S5933_PQ160))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 21FA8347))
+ (comp (ref W4)
+ (value TEST)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib conn) (part TEST))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 2691B632))
+ (comp (ref W5)
+ (value TEST)
+ (footprint pin_array:PIN_ARRAY_2X1)
+ (libsource (lib conn) (part TEST))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 2691B637))
+ (comp (ref R5)
+ (value 10K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26A799E8))
+ (comp (ref R6)
+ (value 10K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26A79A01))
+ (comp (ref R7)
+ (value 10K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26A79A0B))
+ (comp (ref R28)
+ (value 2,2K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B211C0))
+ (comp (ref R29)
+ (value 2,2K)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B211CF))
+ (comp (ref C24)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B211D9))
+ (comp (ref C25)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B211E3))
+ (comp (ref C26)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B211ED))
+ (comp (ref C27)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B211F7))
+ (comp (ref C28)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B21201))
+ (comp (ref C29)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B2120B))
+ (comp (ref C30)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B21215))
+ (comp (ref C31)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26B2121F))
+ (comp (ref C38)
+ (value 4,7uF)
+ (footprint lib_smd:SM1812L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 2820F08A))
+ (comp (ref BUS1)
+ (value BUSPCI_5V)
+ (footprint connect:BUSPCI)
+ (libsource (lib conn) (part BUSPCI-5V))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 269C6109))
+ (comp (ref U1)
+ (value 24C16)
+ (footprint dip_sockets:DIP-8__300)
+ (libsource (lib memory) (part 24C16))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 2F5F7E5C))
+ (comp (ref RR1)
+ (value 8x10K)
+ (footprint connect:SIL-9)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C8AF8090))
+ (comp (ref RR2)
+ (value 8x10K)
+ (footprint connect:SIL-9)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C8B01EF2))
+ (comp (ref RR3)
+ (value 8x10K)
+ (footprint connect:SIL-9)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C8B23B9F))
+ (comp (ref RR4)
+ (value 8x10K)
+ (footprint discret:r_pack8)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C8B2B4CE))
+ (comp (ref RR5)
+ (value 8x10K)
+ (footprint discret:r_pack8)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C8B2B4E3))
+ (comp (ref RR6)
+ (value 8x10K)
+ (footprint connect:SIL-9)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C93123CE))
+ (comp (ref RR7)
+ (value 8x10K)
+ (footprint discret:r_pack8)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C931248E))
+ (comp (ref RR8)
+ (value 8x10K)
+ (footprint connect:SIL-9)
+ (libsource (lib device) (part RR8))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp C9363A3F))
+ (comp (ref W2)
+ (value FLOAT#)
+ (footprint connect:GS2)
+ (libsource (lib conn) (part TEST))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26A799F7))
+ (comp (ref W3)
+ (value SERNV)
+ (footprint connect:GS2)
+ (libsource (lib conn) (part TEST))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26A79A10))
+ (comp (ref W1)
+ (value 16/32)
+ (footprint connect:GS2)
+ (libsource (lib conn) (part TEST))
+ (sheetpath (names /buspci.sch/) (tstamps /4BF03687/))
+ (tstamp 26A799ED))
+ (comp (ref C32)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 335F5DF2))
+ (comp (ref R8)
+ (value 150)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A4586827))
+ (comp (ref U9)
+ (value BT473)
+ (footprint footprints:PLCC68)
+ (libsource (lib video-cache) (part BT473))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 32F9E902))
+ (comp (ref U8)
+ (value BT253)
+ (footprint footprints:PLCC84)
+ (libsource (lib video-cache) (part BT253))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 32F9E7F1))
+ (comp (ref R42)
+ (value 75)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFB9D2))
+ (comp (ref R43)
+ (value 75)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFB9D7))
+ (comp (ref R44)
+ (value 75)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFB9DC))
+ (comp (ref C33)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFBA31))
+ (comp (ref C34)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFBA36))
+ (comp (ref C42)
+ (value 2,2uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFBAEF))
+ (comp (ref C35)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFBB21))
+ (comp (ref R47)
+ (value 75)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C0348))
+ (comp (ref R45)
+ (value 75)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C032F))
+ (comp (ref R46)
+ (value 75)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C0339))
+ (comp (ref R38)
+ (value 510)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C03AC))
+ (comp (ref R15)
+ (value 1M)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44D982A))
+ (comp (ref C36)
+ (value 100nF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44D9848))
+ (comp (ref R36)
+ (value 470)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44D9843))
+ (comp (ref C37)
+ (value 100pF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44D984D))
+ (comp (ref R24)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C034D))
+ (comp (ref R23)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C0343))
+ (comp (ref R22)
+ (value 220)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C0334))
+ (comp (ref C39)
+ (value 1uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C037F))
+ (comp (ref C40)
+ (value 1uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C0384))
+ (comp (ref C41)
+ (value 1uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part C))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp A44C0389))
+ (comp (ref C52)
+ (value 22uF)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFB9B9))
+ (comp (ref C51)
+ (value 22uF)
+ (footprint lib_smd:SM1210L)
+ (libsource (lib device) (part CP))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 28ED6A43))
+ (comp (ref L5)
+ (value 22uH)
+ (footprint lib_smd:SM1812)
+ (libsource (lib device) (part INDUCTOR))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 84DFBB99))
+ (comp (ref R37)
+ (value 510)
+ (footprint lib_smd:SM1206)
+ (libsource (lib device) (part R))
+ (sheetpath (names /ESVIDEO-RVB/) (tstamps /4BF03689/))
+ (tstamp 5D7688E4)))
+ (libparts
+ (libpart (lib device) (part BNC)
+ (fields
+ (field (name Reference) P)
+ (field (name Value) BNC))
+ (pins
+ (pin (num 1) (name In) (type passive))
+ (pin (num 2) (name Ext) (type passive))))
+ (libpart (lib device) (part C)
+ (description "Condensateur non polarise")
+ (footprints
+ (fp SM*)
+ (fp C?)
+ (fp C1-1))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) C))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CP)
+ (aliases
+ (alias CAPAPOL))
+ (description "Condensateur polarise")
+ (footprints
+ (fp CP*)
+ (fp SM*))
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CP))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part CRYSTAL)
+ (fields
+ (field (name Reference) X)
+ (field (name Value) CRYSTAL))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part CTRIM)
+ (fields
+ (field (name Reference) C)
+ (field (name Value) CTRIM))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part DIODESCH)
+ (description "Diode schottky")
+ (footprints
+ (fp D?)
+ (fp S*))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) DIODESCH))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part INDUCTOR)
+ (fields
+ (field (name Reference) L)
+ (field (name Value) INDUCTOR))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib device) (part LED)
+ (footprints
+ (fp LED-3MM)
+ (fp LED-5MM)
+ (fp LED-10MM)
+ (fp LED-0603)
+ (fp LED-0805)
+ (fp LED-1206)
+ (fp LEDV))
+ (fields
+ (field (name Reference) D)
+ (field (name Value) LED))
+ (pins
+ (pin (num 1) (name A) (type passive))
+ (pin (num 2) (name K) (type passive))))
+ (libpart (lib device) (part NPN)
+ (docs transistors/bipolar/*.*)
+ (fields
+ (field (name Reference) Q)
+ (field (name Value) NPN))
+ (pins
+ (pin (num 1) (name E) (type passive))
+ (pin (num 2) (name B) (type input))
+ (pin (num 3) (name C) (type passive))))
+ (libpart (lib device) (part POT)
+ (description Potentionmetre)
+ (fields
+ (field (name Reference) RV)
+ (field (name Value) POT))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))))
+ (libpart (lib device) (part R)
+ (description Resistance)
+ (footprints
+ (fp R?)
+ (fp SM0603)
+ (fp SM0805)
+ (fp R?-*)
+ (fp SM1206))
+ (fields
+ (field (name Reference) R)
+ (field (name Value) R))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))))
+ (libpart (lib device) (part RR8)
+ (description "8 resistors")
+ (fields
+ (field (name Reference) RR)
+ (field (name Value) RR8))
+ (pins
+ (pin (num 1) (name COM) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name 6) (type passive))
+ (pin (num 7) (name 7) (type passive))
+ (pin (num 8) (name 8) (type passive))
+ (pin (num 9) (name 9) (type passive))))
+ (libpart (lib conn) (part CONN_1)
+ (description "1 pin")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_1))
+ (pins
+ (pin (num 1) (name 1) (type passive))))
+ (libpart (lib conn) (part CONN_2)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_2))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name PM) (type passive))))
+ (libpart (lib conn) (part CONN_5)
+ (description "Symbole general de connecteur")
+ (fields
+ (field (name Reference) P)
+ (field (name Value) CONN_5))
+ (pins
+ (pin (num 1) (name ~) (type passive))
+ (pin (num 2) (name ~) (type passive))
+ (pin (num 3) (name ~) (type passive))
+ (pin (num 4) (name ~) (type passive))
+ (pin (num 5) (name ~) (type passive))))
+ (libpart (lib conn) (part DB9)
+ (footprints
+ (fp DB9*))
+ (fields
+ (field (name Reference) J)
+ (field (name Value) DB9))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name 3) (type passive))
+ (pin (num 4) (name 4) (type passive))
+ (pin (num 5) (name 5) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P9) (type passive))))
+ (libpart (lib conn) (part PCI_CONUNIV)
+ (aliases
+ (alias BUSPCI-5V))
+ (description "Connecteur BUS PCI")
+ (fields
+ (field (name Reference) J)
+ (field (name Value) PCI_CONUNIV))
+ (pins
+ (pin (num A1) (name TRST#) (type output))
+ (pin (num A2) (name +12V) (type power_in))
+ (pin (num A3) (name TMS) (type output))
+ (pin (num A4) (name TDI) (type output))
+ (pin (num A5) (name +5V) (type power_in))
+ (pin (num A6) (name INTA#) (type input))
+ (pin (num A7) (name INTC#) (type input))
+ (pin (num A8) (name +5V) (type power_in))
+ (pin (num A9) (name RESERVED) (type passive))
+ (pin (num A10) (name VIO) (type power_in))
+ (pin (num A11) (name RESERVED) (type passive))
+ (pin (num A14) (name 3.3VAUX) (type passive))
+ (pin (num A15) (name RST#) (type output))
+ (pin (num A16) (name VIO) (type power_in))
+ (pin (num A17) (name GNT#) (type BiDi))
+ (pin (num A18) (name GND) (type power_in))
+ (pin (num A19) (name PME#) (type passive))
+ (pin (num A20) (name AD[30]) (type BiDi))
+ (pin (num A21) (name +3.3V) (type power_in))
+ (pin (num A22) (name AD[28]) (type BiDi))
+ (pin (num A23) (name AD[26]) (type BiDi))
+ (pin (num A24) (name GND) (type power_in))
+ (pin (num A25) (name AD[24]) (type BiDi))
+ (pin (num A26) (name IDSEL) (type output))
+ (pin (num A27) (name +3.3V) (type power_in))
+ (pin (num A28) (name AD[22]) (type BiDi))
+ (pin (num A29) (name AD[20]) (type BiDi))
+ (pin (num A30) (name GND) (type power_in))
+ (pin (num A31) (name AD[18]) (type BiDi))
+ (pin (num A32) (name AD[16]) (type BiDi))
+ (pin (num A33) (name +3.3V) (type power_in))
+ (pin (num A34) (name FRAME#) (type BiDi))
+ (pin (num A35) (name GND) (type power_in))
+ (pin (num A36) (name TRDY#) (type BiDi))
+ (pin (num A37) (name GND) (type power_in))
+ (pin (num A38) (name STOP#) (type BiDi))
+ (pin (num A39) (name +3.3V) (type power_in))
+ (pin (num A40) (name RESERVED) (type BiDi))
+ (pin (num A41) (name RESERVED) (type BiDi))
+ (pin (num A42) (name GND) (type power_in))
+ (pin (num A43) (name PAR) (type BiDi))
+ (pin (num A44) (name AD[15]) (type BiDi))
+ (pin (num A45) (name +3.3V) (type power_in))
+ (pin (num A46) (name AD[13]) (type BiDi))
+ (pin (num A47) (name AD[11]) (type BiDi))
+ (pin (num A48) (name GND) (type power_in))
+ (pin (num A49) (name AD[09]) (type BiDi))
+ (pin (num A52) (name C/BE#[0]) (type BiDi))
+ (pin (num A53) (name +3.3V) (type power_in))
+ (pin (num A54) (name AD[06]) (type BiDi))
+ (pin (num A55) (name AD[04]) (type BiDi))
+ (pin (num A56) (name GND) (type power_in))
+ (pin (num A57) (name AD[02]) (type BiDi))
+ (pin (num A58) (name AD[00]) (type BiDi))
+ (pin (num A59) (name VIO) (type power_in))
+ (pin (num A60) (name REQ64#) (type BiDi))
+ (pin (num A61) (name +5V) (type power_in))
+ (pin (num A62) (name +5V) (type power_in))
+ (pin (num B1) (name -12V) (type power_in))
+ (pin (num B2) (name TCK) (type output))
+ (pin (num B3) (name GND) (type input))
+ (pin (num B4) (name TDO) (type input))
+ (pin (num B5) (name +5V) (type power_in))
+ (pin (num B6) (name +5V) (type power_in))
+ (pin (num B7) (name INTB#) (type input))
+ (pin (num B8) (name INTD#) (type input))
+ (pin (num B9) (name PRSNT1#) (type input))
+ (pin (num B10) (name RESERVED) (type passive))
+ (pin (num B11) (name PRSNT2#) (type input))
+ (pin (num B14) (name RESERVED) (type passive))
+ (pin (num B15) (name GND) (type power_in))
+ (pin (num B16) (name CLK) (type output))
+ (pin (num B17) (name GND) (type power_in))
+ (pin (num B18) (name REQ#) (type BiDi))
+ (pin (num B19) (name VIO) (type power_in))
+ (pin (num B20) (name AD[31]) (type BiDi))
+ (pin (num B21) (name AD[29]) (type BiDi))
+ (pin (num B22) (name GND) (type power_in))
+ (pin (num B23) (name AD[27]) (type BiDi))
+ (pin (num B24) (name AD[25]) (type BiDi))
+ (pin (num B25) (name +3.3V) (type power_in))
+ (pin (num B26) (name C/BE#[3]) (type BiDi))
+ (pin (num B27) (name AD[23]) (type BiDi))
+ (pin (num B28) (name GND) (type power_in))
+ (pin (num B29) (name AD[21]) (type BiDi))
+ (pin (num B30) (name AD[19]) (type BiDi))
+ (pin (num B31) (name +3.3V) (type power_in))
+ (pin (num B32) (name AD[17]) (type BiDi))
+ (pin (num B33) (name C/BE#[2]) (type BiDi))
+ (pin (num B34) (name GND) (type power_in))
+ (pin (num B35) (name IRDY#) (type BiDi))
+ (pin (num B36) (name +3.3V) (type power_in))
+ (pin (num B37) (name DEVSEL#) (type BiDi))
+ (pin (num B38) (name GND) (type power_in))
+ (pin (num B39) (name LOCK#) (type BiDi))
+ (pin (num B40) (name PERR#) (type BiDi))
+ (pin (num B41) (name +3.3V) (type power_in))
+ (pin (num B42) (name SERR#) (type input))
+ (pin (num B43) (name +3.3V) (type power_in))
+ (pin (num B44) (name C/BE#[1]) (type BiDi))
+ (pin (num B45) (name AD[14]) (type BiDi))
+ (pin (num B46) (name GND) (type power_in))
+ (pin (num B47) (name AD[12]) (type BiDi))
+ (pin (num B48) (name AD[10]) (type BiDi))
+ (pin (num B49) (name M66EN) (type power_in))
+ (pin (num B52) (name AD[08]) (type BiDi))
+ (pin (num B53) (name AD[07]) (type BiDi))
+ (pin (num B54) (name +3.3V) (type input))
+ (pin (num B55) (name AD[05]) (type BiDi))
+ (pin (num B56) (name AD[03]) (type BiDi))
+ (pin (num B57) (name GND) (type power_in))
+ (pin (num B58) (name AD[01]) (type BiDi))
+ (pin (num B59) (name VIO) (type power_in))
+ (pin (num B60) (name ACK64#) (type BiDi))
+ (pin (num B61) (name +5V) (type power_in))
+ (pin (num B62) (name +5V) (type power_in))))
+ (libpart (lib conn) (part TEST)
+ (fields
+ (field (name Reference) W)
+ (field (name Value) TEST))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))))
+ (libpart (lib 74xx) (part 74LS245)
+ (aliases
+ (alias 74HC245))
+ (description "Octal BUS Transceivers, 3 State out")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 74LS245))
+ (pins
+ (pin (num 1) (name A->B) (type input))
+ (pin (num 2) (name A0) (type 3state))
+ (pin (num 3) (name A1) (type 3state))
+ (pin (num 4) (name A2) (type 3state))
+ (pin (num 5) (name A3) (type 3state))
+ (pin (num 6) (name A4) (type 3state))
+ (pin (num 7) (name A5) (type 3state))
+ (pin (num 8) (name A6) (type 3state))
+ (pin (num 9) (name A7) (type 3state))
+ (pin (num 10) (name GND) (type power_in))
+ (pin (num 11) (name B7) (type 3state))
+ (pin (num 12) (name B6) (type 3state))
+ (pin (num 13) (name B5) (type 3state))
+ (pin (num 14) (name B4) (type 3state))
+ (pin (num 15) (name B3) (type 3state))
+ (pin (num 16) (name B2) (type 3state))
+ (pin (num 17) (name B1) (type 3state))
+ (pin (num 18) (name B0) (type 3state))
+ (pin (num 19) (name CE) (type input))
+ (pin (num 20) (name VCC) (type power_in))))
+ (libpart (lib memory) (part 24C16)
+ (aliases
+ (alias 24C512))
+ (description "I2C Serial EEPROM")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 24C16))
+ (pins
+ (pin (num 1) (name A0) (type input))
+ (pin (num 2) (name A1) (type input))
+ (pin (num 3) (name A2) (type input))
+ (pin (num 4) (name GND) (type power_in))
+ (pin (num 5) (name SDA) (type BiDi))
+ (pin (num 6) (name SCL) (type input))
+ (pin (num 7) (name WP) (type input))
+ (pin (num 8) (name VCC) (type power_in))))
+ (libpart (lib memory) (part 4C4001)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) 4C4001))
+ (pins
+ (pin (num 1) (name D0) (type 3state))
+ (pin (num 2) (name D1) (type 3state))
+ (pin (num 3) (name WR) (type input))
+ (pin (num 4) (name RAS) (type input))
+ (pin (num 5) (name A9) (type input))
+ (pin (num 6) (name A0) (type input))
+ (pin (num 7) (name A1) (type input))
+ (pin (num 8) (name A2) (type input))
+ (pin (num 9) (name A3) (type input))
+ (pin (num 10) (name VCC) (type power_in))
+ (pin (num 11) (name A4) (type input))
+ (pin (num 12) (name A5) (type input))
+ (pin (num 13) (name A6) (type input))
+ (pin (num 14) (name A7) (type input))
+ (pin (num 15) (name A8) (type input))
+ (pin (num 16) (name OE) (type input))
+ (pin (num 17) (name CAS) (type input))
+ (pin (num 18) (name D2) (type 3state))
+ (pin (num 19) (name D3) (type 3state))
+ (pin (num 20) (name GND) (type power_in))))
+ (libpart (lib memory) (part SIM4X32)
+ (description "Barrette SIMM 4Mo (1M x 32bits)")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) SIM4X32))
+ (pins
+ (pin (num 1) (name GND) (type power_in))
+ (pin (num 2) (name DQ0) (type 3state))
+ (pin (num 3) (name DQ16) (type 3state))
+ (pin (num 4) (name DQ1) (type 3state))
+ (pin (num 5) (name DQ17) (type 3state))
+ (pin (num 6) (name DQ2) (type 3state))
+ (pin (num 7) (name DQ18) (type 3state))
+ (pin (num 8) (name DQ3) (type 3state))
+ (pin (num 9) (name DQ19) (type 3state))
+ (pin (num 10) (name VCC) (type power_in))
+ (pin (num 12) (name A0) (type input))
+ (pin (num 13) (name A1) (type input))
+ (pin (num 14) (name A2) (type input))
+ (pin (num 15) (name A3) (type input))
+ (pin (num 16) (name A4) (type input))
+ (pin (num 17) (name A5) (type input))
+ (pin (num 18) (name A6) (type input))
+ (pin (num 19) (name A10) (type input))
+ (pin (num 20) (name DQ4) (type 3state))
+ (pin (num 21) (name DQ20) (type 3state))
+ (pin (num 22) (name DQ5) (type 3state))
+ (pin (num 23) (name DQ21) (type 3state))
+ (pin (num 24) (name DQ6) (type 3state))
+ (pin (num 25) (name DQ22) (type 3state))
+ (pin (num 26) (name DQ7) (type 3state))
+ (pin (num 27) (name DQ23) (type 3state))
+ (pin (num 28) (name A7) (type input))
+ (pin (num 30) (name VCC) (type power_in))
+ (pin (num 31) (name A8) (type input))
+ (pin (num 32) (name A9) (type input))
+ (pin (num 34) (name RAS2) (type input))
+ (pin (num 39) (name GND) (type power_in))
+ (pin (num 40) (name CAS0) (type input))
+ (pin (num 41) (name CAS1) (type input))
+ (pin (num 42) (name CAS2) (type input))
+ (pin (num 43) (name CAS3) (type input))
+ (pin (num 44) (name RAS0) (type input))
+ (pin (num 47) (name R/W) (type input))
+ (pin (num 49) (name DQ8) (type 3state))
+ (pin (num 50) (name DQ24) (type 3state))
+ (pin (num 51) (name DQ9) (type 3state))
+ (pin (num 52) (name DQ25) (type 3state))
+ (pin (num 53) (name DQ10) (type 3state))
+ (pin (num 54) (name DQ26) (type 3state))
+ (pin (num 55) (name DQ11) (type 3state))
+ (pin (num 56) (name DQ27) (type 3state))
+ (pin (num 57) (name DQ12) (type 3state))
+ (pin (num 58) (name DQ28) (type 3state))
+ (pin (num 59) (name VCC) (type power_in))
+ (pin (num 60) (name DQ29) (type 3state))
+ (pin (num 61) (name DQ13) (type 3state))
+ (pin (num 62) (name DQ30) (type 3state))
+ (pin (num 63) (name DQ14) (type 3state))
+ (pin (num 64) (name DQ31) (type 3state))
+ (pin (num 65) (name DQ15) (type 3state))
+ (pin (num 67) (name PRD0) (type input))
+ (pin (num 68) (name PRD1) (type input))
+ (pin (num 69) (name PRD2) (type input))
+ (pin (num 70) (name PRD3) (type input))
+ (pin (num 72) (name GND) (type power_in))))
+ (libpart (lib xilinx) (part XC1736APD8)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) XC1736APD8))
+ (pins
+ (pin (num 1) (name DATA) (type 3state))
+ (pin (num 2) (name CLK) (type input))
+ (pin (num 3) (name RAZ/OE) (type input))
+ (pin (num 4) (name CE) (type input))
+ (pin (num 5) (name GND) (type power_in))
+ (pin (num 6) (name CEO) (type output))
+ (pin (num 7) (name VPP) (type input))
+ (pin (num 8) (name VCC) (type power_in))))
+ (libpart (lib xilinx) (part XC4003-VQ100)
+ (docs xilinx/xc400x-pinout.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) XC4003-VQ100))
+ (pins
+ (pin (num 1) (name GND) (type power_in))
+ (pin (num 2) (name PGCK1) (type passive))
+ (pin (num 3) (name P/A17) (type passive))
+ (pin (num 4) (name P/TDI) (type passive))
+ (pin (num 5) (name P/TCK) (type passive))
+ (pin (num 6) (name P/A3) (type passive))
+ (pin (num 7) (name P7) (type passive))
+ (pin (num 8) (name P8) (type passive))
+ (pin (num 9) (name P/A15) (type passive))
+ (pin (num 10) (name P/A4) (type passive))
+ (pin (num 11) (name GND) (type power_in))
+ (pin (num 12) (name VCC) (type power_in))
+ (pin (num 13) (name P13) (type BiDi))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name SGCK2) (type passive))
+ (pin (num 22) (name M1/RD) (type input))
+ (pin (num 23) (name GND) (type power_in))
+ (pin (num 24) (name M0/RT) (type input))
+ (pin (num 25) (name VCC) (type power_in))
+ (pin (num 26) (name M2) (type passive))
+ (pin (num 27) (name PGCK2) (type passive))
+ (pin (num 28) (name P/HDC) (type passive))
+ (pin (num 29) (name P29) (type passive))
+ (pin (num 30) (name P/LDC) (type passive))
+ (pin (num 31) (name P31) (type passive))
+ (pin (num 32) (name P32) (type passive))
+ (pin (num 33) (name P33) (type passive))
+ (pin (num 34) (name P34) (type passive))
+ (pin (num 35) (name P35) (type passive))
+ (pin (num 36) (name P36/INIT) (type passive))
+ (pin (num 37) (name VCC) (type power_in))
+ (pin (num 38) (name GND) (type power_in))
+ (pin (num 39) (name P39) (type passive))
+ (pin (num 40) (name P40) (type passive))
+ (pin (num 41) (name P41) (type passive))
+ (pin (num 42) (name P42) (type passive))
+ (pin (num 43) (name P43) (type passive))
+ (pin (num 44) (name P44) (type passive))
+ (pin (num 45) (name P45) (type passive))
+ (pin (num 46) (name P46) (type passive))
+ (pin (num 47) (name P47) (type passive))
+ (pin (num 48) (name SGCK3) (type passive))
+ (pin (num 49) (name GND) (type power_in))
+ (pin (num 50) (name DONE) (type openCol))
+ (pin (num 51) (name VCC) (type power_in))
+ (pin (num 52) (name PROG) (type input))
+ (pin (num 53) (name P53) (type BiDi))
+ (pin (num 54) (name PGCK3) (type BiDi))
+ (pin (num 55) (name P55) (type passive))
+ (pin (num 56) (name P56) (type BiDi))
+ (pin (num 57) (name P57) (type passive))
+ (pin (num 58) (name P58) (type passive))
+ (pin (num 59) (name P59) (type passive))
+ (pin (num 60) (name P60) (type passive))
+ (pin (num 61) (name P61) (type passive))
+ (pin (num 62) (name P62) (type passive))
+ (pin (num 63) (name VCC) (type power_in))
+ (pin (num 64) (name GND) (type power_in))
+ (pin (num 65) (name P65) (type passive))
+ (pin (num 66) (name P66) (type passive))
+ (pin (num 67) (name P67) (type passive))
+ (pin (num 68) (name P68) (type passive))
+ (pin (num 69) (name P69) (type passive))
+ (pin (num 70) (name P70) (type passive))
+ (pin (num 71) (name P71/RDY) (type passive))
+ (pin (num 72) (name DIN) (type passive))
+ (pin (num 73) (name DOUT/SGCK4) (type passive))
+ (pin (num 74) (name CCLK) (type input))
+ (pin (num 75) (name VCC) (type power_in))
+ (pin (num 76) (name TDO) (type output))
+ (pin (num 77) (name GND) (type power_in))
+ (pin (num 78) (name P78) (type passive))
+ (pin (num 79) (name PGCK4) (type passive))
+ (pin (num 80) (name P80) (type passive))
+ (pin (num 81) (name P81) (type passive))
+ (pin (num 82) (name P82) (type passive))
+ (pin (num 83) (name P83) (type passive))
+ (pin (num 84) (name P84) (type passive))
+ (pin (num 85) (name P85) (type passive))
+ (pin (num 86) (name P86) (type passive))
+ (pin (num 87) (name P87) (type passive))
+ (pin (num 88) (name GND) (type power_in))
+ (pin (num 89) (name VCC) (type power_in))
+ (pin (num 90) (name P90) (type BiDi))
+ (pin (num 91) (name P91) (type passive))
+ (pin (num 92) (name P92) (type passive))
+ (pin (num 93) (name P93) (type passive))
+ (pin (num 94) (name P94) (type passive))
+ (pin (num 95) (name P91) (type passive))
+ (pin (num 96) (name P96) (type passive))
+ (pin (num 97) (name P97) (type passive))
+ (pin (num 98) (name P98) (type BiDi))
+ (pin (num 99) (name SGCK1) (type BiDi))
+ (pin (num 100) (name VCC) (type power_in))))
+ (libpart (lib xilinx) (part XC4005-PQ100)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) XC4005-PQ100))
+ (pins
+ (pin (num 1) (name P1) (type passive))
+ (pin (num 2) (name SGCK1) (type passive))
+ (pin (num 3) (name VCC) (type power_in))
+ (pin (num 4) (name GND) (type power_in))
+ (pin (num 5) (name PGCK1) (type passive))
+ (pin (num 6) (name P6) (type passive))
+ (pin (num 7) (name P7/TDI) (type passive))
+ (pin (num 8) (name P8/TCK) (type passive))
+ (pin (num 9) (name P9/TMS) (type passive))
+ (pin (num 11) (name P11) (type passive))
+ (pin (num 12) (name P12) (type passive))
+ (pin (num 13) (name P13) (type passive))
+ (pin (num 14) (name GND) (type power_in))
+ (pin (num 15) (name VCC) (type power_in))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name P19) (type passive))
+ (pin (num 20) (name P20) (type passive))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name SGCK2) (type passive))
+ (pin (num 25) (name M1) (type passive))
+ (pin (num 26) (name GND) (type power_in))
+ (pin (num 27) (name M0) (type input))
+ (pin (num 28) (name VCC) (type power_in))
+ (pin (num 29) (name M2) (type input))
+ (pin (num 30) (name PGCK2) (type passive))
+ (pin (num 31) (name P31/HDC) (type passive))
+ (pin (num 32) (name P32) (type passive))
+ (pin (num 33) (name P33/LDC) (type passive))
+ (pin (num 34) (name P34) (type passive))
+ (pin (num 35) (name P35) (type passive))
+ (pin (num 36) (name P36) (type passive))
+ (pin (num 37) (name P37) (type passive))
+ (pin (num 38) (name P38) (type passive))
+ (pin (num 39) (name P39/INIT) (type passive))
+ (pin (num 40) (name VCC) (type power_in))
+ (pin (num 41) (name GND) (type power_in))
+ (pin (num 42) (name P42) (type passive))
+ (pin (num 43) (name P43) (type passive))
+ (pin (num 44) (name P44) (type passive))
+ (pin (num 45) (name P45) (type passive))
+ (pin (num 46) (name P46) (type passive))
+ (pin (num 47) (name P47) (type passive))
+ (pin (num 48) (name P48) (type passive))
+ (pin (num 49) (name P49) (type passive))
+ (pin (num 50) (name P50) (type passive))
+ (pin (num 51) (name SGCK3) (type passive))
+ (pin (num 52) (name GND) (type power_in))
+ (pin (num 53) (name DONE) (type openCol))
+ (pin (num 54) (name VCC) (type power_in))
+ (pin (num 55) (name PROG) (type input))
+ (pin (num 56) (name P56) (type passive))
+ (pin (num 57) (name PGCK3) (type passive))
+ (pin (num 58) (name P58) (type passive))
+ (pin (num 59) (name P59) (type passive))
+ (pin (num 60) (name P60) (type passive))
+ (pin (num 61) (name P61) (type passive))
+ (pin (num 62) (name P62) (type passive))
+ (pin (num 63) (name P63) (type passive))
+ (pin (num 64) (name P64) (type passive))
+ (pin (num 65) (name P65) (type passive))
+ (pin (num 66) (name VCC) (type power_in))
+ (pin (num 67) (name GND) (type power_in))
+ (pin (num 68) (name P68) (type passive))
+ (pin (num 69) (name P69) (type passive))
+ (pin (num 70) (name P70) (type passive))
+ (pin (num 71) (name P71) (type passive))
+ (pin (num 72) (name P72) (type passive))
+ (pin (num 73) (name P73) (type passive))
+ (pin (num 74) (name P74/BUSY) (type passive))
+ (pin (num 75) (name DIN/D0) (type passive))
+ (pin (num 76) (name DOUT/SGCK4) (type passive))
+ (pin (num 77) (name CCLK) (type input))
+ (pin (num 78) (name VCC) (type power_in))
+ (pin (num 79) (name TDO) (type output))
+ (pin (num 80) (name GND) (type power_in))
+ (pin (num 81) (name P81) (type passive))
+ (pin (num 82) (name PGCK4) (type passive))
+ (pin (num 83) (name P83) (type passive))
+ (pin (num 84) (name P84) (type passive))
+ (pin (num 85) (name P85) (type passive))
+ (pin (num 86) (name P86) (type passive))
+ (pin (num 87) (name P87) (type passive))
+ (pin (num 88) (name P88) (type passive))
+ (pin (num 89) (name P89) (type passive))
+ (pin (num 90) (name P90) (type passive))
+ (pin (num 91) (name GND) (type power_in))
+ (pin (num 92) (name VCC) (type power_in))
+ (pin (num 93) (name P93) (type passive))
+ (pin (num 94) (name P94) (type passive))
+ (pin (num 95) (name P95) (type passive))
+ (pin (num 96) (name P96) (type passive))
+ (pin (num 97) (name P97) (type passive))
+ (pin (num 98) (name P98) (type passive))
+ (pin (num 99) (name P99) (type passive))
+ (pin (num 100) (name P100) (type passive))))
+ (libpart (lib xilinx) (part XC4005-PQ160)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) XC4005-PQ160))
+ (pins
+ (pin (num 1) (name GND) (type power_in))
+ (pin (num 2) (name PGCK1) (type BiDi))
+ (pin (num 3) (name P3) (type passive))
+ (pin (num 4) (name P4) (type passive))
+ (pin (num 5) (name P5) (type passive))
+ (pin (num 6) (name TDI) (type passive))
+ (pin (num 7) (name TCK) (type passive))
+ (pin (num 10) (name GND) (type power_in))
+ (pin (num 11) (name P11) (type passive))
+ (pin (num 12) (name P12) (type passive))
+ (pin (num 13) (name TMS) (type passive))
+ (pin (num 14) (name P14) (type passive))
+ (pin (num 15) (name P15) (type passive))
+ (pin (num 16) (name P16) (type passive))
+ (pin (num 17) (name P17) (type passive))
+ (pin (num 18) (name P18) (type passive))
+ (pin (num 19) (name GND) (type power_in))
+ (pin (num 20) (name VCC) (type power_in))
+ (pin (num 21) (name P21) (type passive))
+ (pin (num 22) (name P22) (type passive))
+ (pin (num 23) (name P23) (type passive))
+ (pin (num 24) (name P24) (type passive))
+ (pin (num 25) (name P25) (type passive))
+ (pin (num 26) (name P26) (type passive))
+ (pin (num 27) (name P27) (type passive))
+ (pin (num 28) (name P28) (type passive))
+ (pin (num 29) (name GND) (type power_in))
+ (pin (num 32) (name P32) (type passive))
+ (pin (num 33) (name P33) (type passive))
+ (pin (num 34) (name P34) (type passive))
+ (pin (num 35) (name P35) (type passive))
+ (pin (num 36) (name P36) (type passive))
+ (pin (num 37) (name SGCK2) (type passive))
+ (pin (num 38) (name M1) (type input))
+ (pin (num 39) (name GND) (type power_in))
+ (pin (num 40) (name M0) (type input))
+ (pin (num 41) (name VCC) (type power_in))
+ (pin (num 42) (name M2) (type input))
+ (pin (num 43) (name PGCK2) (type passive))
+ (pin (num 44) (name HDC) (type passive))
+ (pin (num 45) (name P45) (type passive))
+ (pin (num 46) (name P46) (type passive))
+ (pin (num 47) (name P47) (type passive))
+ (pin (num 48) (name LDC) (type passive))
+ (pin (num 51) (name GND) (type power_in))
+ (pin (num 52) (name P52) (type passive))
+ (pin (num 53) (name P53) (type passive))
+ (pin (num 54) (name P54) (type passive))
+ (pin (num 55) (name P55) (type passive))
+ (pin (num 56) (name P56) (type passive))
+ (pin (num 57) (name P57) (type passive))
+ (pin (num 58) (name P58) (type passive))
+ (pin (num 59) (name P59-INIT) (type passive))
+ (pin (num 60) (name VCC) (type power_in))
+ (pin (num 61) (name GND) (type power_in))
+ (pin (num 62) (name P62) (type passive))
+ (pin (num 63) (name P63) (type passive))
+ (pin (num 64) (name P64) (type passive))
+ (pin (num 65) (name P65) (type passive))
+ (pin (num 66) (name P66) (type passive))
+ (pin (num 67) (name P67) (type passive))
+ (pin (num 68) (name P68) (type BiDi))
+ (pin (num 69) (name P69) (type passive))
+ (pin (num 70) (name GND) (type power_in))
+ (pin (num 73) (name P73) (type passive))
+ (pin (num 74) (name P74) (type passive))
+ (pin (num 75) (name P75) (type passive))
+ (pin (num 76) (name P76) (type passive))
+ (pin (num 77) (name P77) (type passive))
+ (pin (num 78) (name SGCK3) (type passive))
+ (pin (num 79) (name GND) (type power_in))
+ (pin (num 80) (name DONE) (type BiDi))
+ (pin (num 81) (name VCC) (type power_in))
+ (pin (num 82) (name PROG) (type input))
+ (pin (num 83) (name P83) (type passive))
+ (pin (num 84) (name PGCK3) (type passive))
+ (pin (num 85) (name P85) (type passive))
+ (pin (num 86) (name P86) (type passive))
+ (pin (num 87) (name P87) (type passive))
+ (pin (num 88) (name P88) (type passive))
+ (pin (num 91) (name GND) (type power_in))
+ (pin (num 92) (name P92) (type passive))
+ (pin (num 93) (name P93) (type passive))
+ (pin (num 94) (name P93) (type passive))
+ (pin (num 95) (name P95) (type passive))
+ (pin (num 96) (name P96) (type passive))
+ (pin (num 97) (name P97) (type passive))
+ (pin (num 98) (name P98) (type passive))
+ (pin (num 99) (name P90) (type passive))
+ (pin (num 100) (name VCC) (type power_in))
+ (pin (num 101) (name GND) (type power_in))
+ (pin (num 102) (name P102) (type passive))
+ (pin (num 103) (name P103) (type passive))
+ (pin (num 104) (name P104) (type passive))
+ (pin (num 105) (name P105) (type passive))
+ (pin (num 106) (name P106) (type passive))
+ (pin (num 107) (name P107) (type passive))
+ (pin (num 108) (name P108) (type passive))
+ (pin (num 109) (name P109) (type passive))
+ (pin (num 110) (name GND) (type power_in))
+ (pin (num 113) (name P113) (type passive))
+ (pin (num 114) (name P114-RDY) (type passive))
+ (pin (num 115) (name P115) (type passive))
+ (pin (num 116) (name P116) (type passive))
+ (pin (num 117) (name DIN) (type input))
+ (pin (num 118) (name DOUT-SGI4) (type passive))
+ (pin (num 119) (name CCLK) (type passive))
+ (pin (num 120) (name VCC) (type power_in))
+ (pin (num 121) (name TDO) (type output))
+ (pin (num 122) (name GND) (type power_in))
+ (pin (num 123) (name P123) (type passive))
+ (pin (num 124) (name P124) (type passive))
+ (pin (num 125) (name P125) (type passive))
+ (pin (num 126) (name P126) (type passive))
+ (pin (num 127) (name P127) (type passive))
+ (pin (num 128) (name P128) (type passive))
+ (pin (num 131) (name GND) (type power_in))
+ (pin (num 132) (name P132) (type passive))
+ (pin (num 133) (name P133) (type passive))
+ (pin (num 134) (name P134) (type passive))
+ (pin (num 135) (name P135) (type passive))
+ (pin (num 137) (name P137) (type passive))
+ (pin (num 138) (name P138) (type passive))
+ (pin (num 139) (name P139) (type passive))
+ (pin (num 140) (name P140) (type passive))
+ (pin (num 141) (name GND) (type power_in))
+ (pin (num 142) (name VCC) (type power_in))
+ (pin (num 143) (name P143) (type passive))
+ (pin (num 144) (name P144) (type passive))
+ (pin (num 145) (name P145) (type passive))
+ (pin (num 146) (name P146) (type passive))
+ (pin (num 147) (name P147) (type passive))
+ (pin (num 148) (name P148) (type passive))
+ (pin (num 149) (name P149) (type passive))
+ (pin (num 150) (name P150) (type passive))
+ (pin (num 151) (name GND) (type power_in))
+ (pin (num 154) (name P154) (type passive))
+ (pin (num 155) (name P155) (type passive))
+ (pin (num 156) (name P156) (type passive))
+ (pin (num 157) (name P157) (type passive))
+ (pin (num 158) (name P158) (type passive))
+ (pin (num 159) (name SGCK1) (type passive))
+ (pin (num 160) (name VCC) (type power_in))))
+ (libpart (lib special) (part AV9173)
+ (description "Pll Video")
+ (docs video/av9173.pdf)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) AV9173))
+ (pins
+ (pin (num 1) (name FSIGIN) (type input))
+ (pin (num 2) (name FREFIN) (type input))
+ (pin (num 3) (name GND) (type input))
+ (pin (num 4) (name FS0) (type input))
+ (pin (num 5) (name OE) (type input))
+ (pin (num 6) (name CKKOUT) (type 3state))
+ (pin (num 7) (name VCC) (type input))
+ (pin (num 8) (name CLK/2) (type 3state))))
+ (libpart (lib special) (part LIGNE_A_RETARD)
+ (fields
+ (field (name Reference) L)
+ (field (name Value) LIGNE_A_RETARD))
+ (pins
+ (pin (num 1) (name 1) (type passive))
+ (pin (num 2) (name 2) (type passive))
+ (pin (num 3) (name COMMUN) (type input))))
+ (libpart (lib special) (part S5933_PQ160)
+ (description "Controlleur de bus PCI")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) S5933_PQ160))
+ (pins
+ (pin (num 1) (name EQ0) (type BiDi))
+ (pin (num 2) (name AD23) (type BiDi))
+ (pin (num 3) (name AD22) (type BiDi))
+ (pin (num 4) (name AD21) (type BiDi))
+ (pin (num 5) (name DQ31) (type BiDi))
+ (pin (num 6) (name AD20) (type BiDi))
+ (pin (num 7) (name AD19) (type BiDi))
+ (pin (num 8) (name AD18) (type BiDi))
+ (pin (num 9) (name EQ1) (type BiDi))
+ (pin (num 10) (name VSS) (type power_in))
+ (pin (num 11) (name VCC) (type power_in))
+ (pin (num 12) (name AD17) (type BiDi))
+ (pin (num 13) (name DQ30) (type BiDi))
+ (pin (num 14) (name AD16) (type BiDi))
+ (pin (num 15) (name C/BE2#) (type BiDi))
+ (pin (num 16) (name FRAME#) (type BiDi))
+ (pin (num 17) (name EQ2) (type BiDi))
+ (pin (num 18) (name IRDY#) (type BiDi))
+ (pin (num 19) (name TRDY#) (type BiDi))
+ (pin (num 20) (name DEVSEL#) (type BiDi))
+ (pin (num 21) (name EQ3) (type BiDi))
+ (pin (num 22) (name STOP#) (type BiDi))
+ (pin (num 23) (name LOCK#) (type input))
+ (pin (num 24) (name PERR#) (type BiDi))
+ (pin (num 25) (name DQ29) (type BiDi))
+ (pin (num 26) (name SERR#) (type output))
+ (pin (num 27) (name PAR) (type BiDi))
+ (pin (num 28) (name C/BE1#) (type BiDi))
+ (pin (num 29) (name EQ4/FWC#) (type BiDi))
+ (pin (num 30) (name VSS) (type power_in))
+ (pin (num 31) (name VCC) (type power_in))
+ (pin (num 32) (name AD15) (type BiDi))
+ (pin (num 33) (name EQ5/FRC#) (type BiDi))
+ (pin (num 34) (name AD14) (type BiDi))
+ (pin (num 35) (name AD13) (type BiDi))
+ (pin (num 36) (name AD12) (type BiDi))
+ (pin (num 37) (name DQ28) (type BiDi))
+ (pin (num 38) (name AD11) (type BiDi))
+ (pin (num 39) (name AD10) (type BiDi))
+ (pin (num 40) (name AD9) (type BiDi))
+ (pin (num 41) (name EQ6/AMREN) (type BiDi))
+ (pin (num 42) (name AD8) (type BiDi))
+ (pin (num 43) (name C/BE0#) (type BiDi))
+ (pin (num 44) (name AD7) (type BiDi))
+ (pin (num 45) (name DQ27) (type BiDi))
+ (pin (num 46) (name AD6) (type BiDi))
+ (pin (num 47) (name AD5) (type BiDi))
+ (pin (num 48) (name AD4) (type BiDi))
+ (pin (num 49) (name EQ7/AMWEN) (type BiDi))
+ (pin (num 50) (name VSS) (type power_in))
+ (pin (num 51) (name VCC) (type power_in))
+ (pin (num 52) (name AD3) (type BiDi))
+ (pin (num 53) (name DQ26) (type BiDi))
+ (pin (num 54) (name AD2) (type BiDi))
+ (pin (num 55) (name AD1) (type BiDi))
+ (pin (num 56) (name AD0) (type BiDi))
+ (pin (num 57) (name EA0) (type BiDi))
+ (pin (num 58) (name INTA#) (type output))
+ (pin (num 59) (name MODE_16/32) (type input))
+ (pin (num 60) (name BE3#) (type input))
+ (pin (num 61) (name EA1) (type BiDi))
+ (pin (num 62) (name BE2#) (type input))
+ (pin (num 63) (name BE1#) (type input))
+ (pin (num 64) (name ADR5) (type input))
+ (pin (num 65) (name DQ25) (type BiDi))
+ (pin (num 66) (name ADR4) (type input))
+ (pin (num 67) (name ADR3) (type input))
+ (pin (num 68) (name ADR2) (type input))
+ (pin (num 69) (name EA2) (type BiDi))
+ (pin (num 70) (name VSS) (type power_in))
+ (pin (num 71) (name VCC) (type power_in))
+ (pin (num 72) (name RD#) (type input))
+ (pin (num 73) (name EA3) (type BiDi))
+ (pin (num 74) (name WR#) (type input))
+ (pin (num 75) (name SELECT#) (type input))
+ (pin (num 76) (name DQ15) (type BiDi))
+ (pin (num 77) (name DQ24) (type BiDi))
+ (pin (num 78) (name DQ14) (type BiDi))
+ (pin (num 79) (name DQ13) (type BiDi))
+ (pin (num 80) (name DQ12) (type BiDi))
+ (pin (num 81) (name EA4) (type BiDi))
+ (pin (num 82) (name DQ11) (type BiDi))
+ (pin (num 83) (name DQ10) (type BiDi))
+ (pin (num 84) (name DQ9) (type BiDi))
+ (pin (num 85) (name DQ23) (type BiDi))
+ (pin (num 86) (name DQ8) (type BiDi))
+ (pin (num 87) (name BE0#) (type input))
+ (pin (num 88) (name DQ7) (type BiDi))
+ (pin (num 89) (name EA5) (type BiDi))
+ (pin (num 90) (name VSS) (type power_in))
+ (pin (num 91) (name VCC) (type power_in))
+ (pin (num 92) (name DQ6) (type BiDi))
+ (pin (num 93) (name DQ22) (type BiDi))
+ (pin (num 94) (name DQ5) (type BiDi))
+ (pin (num 95) (name DQ4) (type BiDi))
+ (pin (num 96) (name DQ3) (type BiDi))
+ (pin (num 97) (name EA6) (type BiDi))
+ (pin (num 98) (name DQ2) (type BiDi))
+ (pin (num 99) (name DQ1) (type BiDi))
+ (pin (num 100) (name DQ0) (type BiDi))
+ (pin (num 101) (name EA7) (type BiDi))
+ (pin (num 102) (name WRFIFO#) (type input))
+ (pin (num 103) (name WRFULL) (type output))
+ (pin (num 104) (name RDFIFO#) (type input))
+ (pin (num 105) (name DQ21) (type BiDi))
+ (pin (num 106) (name RDEMPTY) (type output))
+ (pin (num 107) (name PTADR#) (type input))
+ (pin (num 108) (name PTWR) (type output))
+ (pin (num 109) (name EA8) (type BiDi))
+ (pin (num 110) (name VSS) (type power_in))
+ (pin (num 111) (name VCC) (type power_in))
+ (pin (num 112) (name PTBURST#) (type output))
+ (pin (num 113) (name EA9) (type output))
+ (pin (num 114) (name PTATN#) (type output))
+ (pin (num 115) (name PTRDY#) (type input))
+ (pin (num 116) (name PTBE0#) (type output))
+ (pin (num 117) (name DQ20) (type BiDi))
+ (pin (num 118) (name PTBE1#) (type output))
+ (pin (num 119) (name PTBE2#) (type output))
+ (pin (num 120) (name PTBE3#) (type output))
+ (pin (num 121) (name EA10) (type output))
+ (pin (num 122) (name PTNUM1) (type output))
+ (pin (num 123) (name PTNUM0) (type output))
+ (pin (num 124) (name IRQ#) (type output))
+ (pin (num 125) (name DQ19) (type BiDi))
+ (pin (num 126) (name SYSRST#) (type output))
+ (pin (num 127) (name EWR#/SDA) (type BiDi))
+ (pin (num 128) (name ERD#/SCL) (type output))
+ (pin (num 129) (name EA11) (type output))
+ (pin (num 130) (name VSS) (type power_in))
+ (pin (num 131) (name VCC) (type power_in))
+ (pin (num 132) (name ADR6) (type input))
+ (pin (num 133) (name DQ18) (type BiDi))
+ (pin (num 135) (name SNV) (type input))
+ (pin (num 137) (name EA12) (type output))
+ (pin (num 138) (name FLT#) (type input))
+ (pin (num 139) (name RST#) (type input))
+ (pin (num 140) (name BPCLK) (type output))
+ (pin (num 141) (name EA13) (type output))
+ (pin (num 142) (name CLK) (type input))
+ (pin (num 143) (name GNT#) (type input))
+ (pin (num 144) (name REQ#) (type output))
+ (pin (num 145) (name DQ17) (type BiDi))
+ (pin (num 146) (name AD31) (type BiDi))
+ (pin (num 147) (name AD30) (type BiDi))
+ (pin (num 148) (name AD29) (type BiDi))
+ (pin (num 149) (name EA14/FWE) (type BiDi))
+ (pin (num 150) (name VSS) (type power_in))
+ (pin (num 151) (name VCC) (type power_in))
+ (pin (num 152) (name AD28) (type BiDi))
+ (pin (num 153) (name EA15/FRF) (type BiDi))
+ (pin (num 154) (name AD27) (type BiDi))
+ (pin (num 155) (name AD26) (type BiDi))
+ (pin (num 156) (name AD25) (type BiDi))
+ (pin (num 157) (name DQ16) (type BiDi))
+ (pin (num 158) (name AD24) (type BiDi))
+ (pin (num 159) (name C/BE3#) (type BiDi))
+ (pin (num 160) (name IDSEL) (type input))))
+ (libpart (lib philips) (part TDA8501)
+ (description "Modulateur Pal/NTSC, entree RGB ou Y,Y-R,Y-B")
+ (fields
+ (field (name Reference) U)
+ (field (name Value) TDA8501))
+ (pins
+ (pin (num 1) (name -R.Y) (type input))
+ (pin (num 2) (name MCTR) (type input))
+ (pin (num 3) (name -B.Y) (type input))
+ (pin (num 4) (name H/2) (type BiDi))
+ (pin (num 5) (name Y) (type input))
+ (pin (num 6) (name UOFF) (type output))
+ (pin (num 7) (name R) (type input))
+ (pin (num 8) (name VCC) (type input))
+ (pin (num 9) (name G) (type input))
+ (pin (num 10) (name VSS) (type input))
+ (pin (num 11) (name B) (type input))
+ (pin (num 12) (name VOFF) (type output))
+ (pin (num 13) (name VREF) (type output))
+ (pin (num 14) (name C/OUT) (type output))
+ (pin (num 15) (name FLT) (type passive))
+ (pin (num 16) (name CVBS) (type output))
+ (pin (num 17) (name NTSC/PAL) (type input))
+ (pin (num 18) (name NOTCH) (type input))
+ (pin (num 19) (name Y/OUT) (type output))
+ (pin (num 20) (name Y+SIN) (type input))
+ (pin (num 21) (name B/ADJ) (type passive))
+ (pin (num 22) (name Y+SOUT) (type output))
+ (pin (num 23) (name OSC) (type output))
+ (pin (num 24) (name CS) (type input))))
+ (libpart (lib video-cache) (part BT253)
+ (aliases
+ (alias BT254))
+ (fields
+ (field (name Reference) U)
+ (field (name Value) BT253))
+ (pins
+ (pin (num 1) (name VAA) (type input))
+ (pin (num 2) (name GND) (type input))
+ (pin (num 3) (name GND) (type input))
+ (pin (num 4) (name SYNC0) (type input))
+ (pin (num 5) (name SYNC1) (type input))
+ (pin (num 6) (name CEXT1) (type output))
+ (pin (num 7) (name CEXT2) (type input))
+ (pin (num 8) (name CSYNC) (type output))
+ (pin (num 9) (name D7) (type 3state))
+ (pin (num 10) (name D6) (type 3state))
+ (pin (num 11) (name D5) (type 3state))
+ (pin (num 12) (name D4) (type 3state))
+ (pin (num 13) (name D3) (type 3state))
+ (pin (num 14) (name D2) (type 3state))
+ (pin (num 15) (name D1) (type 3state))
+ (pin (num 16) (name D0) (type 3state))
+ (pin (num 17) (name A0) (type input))
+ (pin (num 18) (name A1) (type input))
+ (pin (num 19) (name A2) (type input))
+ (pin (num 20) (name RD) (type input))
+ (pin (num 21) (name RREF-) (type input))
+ (pin (num 22) (name GREF-) (type input))
+ (pin (num 23) (name BREF-) (type input))
+ (pin (num 24) (name WR) (type input))
+ (pin (num 25) (name B7) (type 3state))
+ (pin (num 26) (name B6) (type 3state))
+ (pin (num 27) (name B5) (type 3state))
+ (pin (num 28) (name B4) (type 3state))
+ (pin (num 29) (name B3) (type 3state))
+ (pin (num 30) (name B2) (type 3state))
+ (pin (num 31) (name B1) (type 3state))
+ (pin (num 32) (name B0) (type 3state))
+ (pin (num 33) (name G7) (type 3state))
+ (pin (num 34) (name G6) (type 3state))
+ (pin (num 35) (name G5) (type 3state))
+ (pin (num 36) (name G4) (type 3state))
+ (pin (num 37) (name ZERO) (type input))
+ (pin (num 38) (name BCLOCK) (type input))
+ (pin (num 39) (name GCLOCK) (type input))
+ (pin (num 40) (name RCLOCK) (type input))
+ (pin (num 41) (name GND) (type input))
+ (pin (num 42) (name GND) (type input))
+ (pin (num 43) (name VAA) (type input))
+ (pin (num 44) (name VAA) (type input))
+ (pin (num 45) (name G3) (type 3state))
+ (pin (num 46) (name G2) (type 3state))
+ (pin (num 47) (name G1) (type 3state))
+ (pin (num 48) (name G0) (type 3state))
+ (pin (num 49) (name R7) (type 3state))
+ (pin (num 50) (name R6) (type 3state))
+ (pin (num 51) (name R5) (type 3state))
+ (pin (num 52) (name R4) (type 3state))
+ (pin (num 53) (name R3) (type 3state))
+ (pin (num 54) (name R2) (type 3state))
+ (pin (num 55) (name R1) (type 3state))
+ (pin (num 56) (name R0) (type 3state))
+ (pin (num 57) (name OE) (type input))
+ (pin (num 58) (name BIN) (type input))
+ (pin (num 59) (name CLAMP) (type input))
+ (pin (num 60) (name GIN) (type input))
+ (pin (num 61) (name BLEVEL) (type input))
+ (pin (num 62) (name RIN) (type input))
+ (pin (num 63) (name GLEVEL) (type input))
+ (pin (num 64) (name BREF+) (type input))
+ (pin (num 65) (name GREF+) (type input))
+ (pin (num 66) (name RREF+) (type input))
+ (pin (num 67) (name RLEVEL) (type input))
+ (pin (num 68) (name BOUT) (type output))
+ (pin (num 69) (name RSET) (type input))
+ (pin (num 70) (name GOUT) (type output))
+ (pin (num 71) (name IOUT5) (type passive))
+ (pin (num 72) (name ROUT) (type output))
+ (pin (num 73) (name IOUT4) (type passive))
+ (pin (num 74) (name BVID1) (type input))
+ (pin (num 75) (name BVID0) (type input))
+ (pin (num 76) (name IOUT3) (type passive))
+ (pin (num 77) (name GVID1) (type input))
+ (pin (num 78) (name IOUT2) (type passive))
+ (pin (num 79) (name GVID0) (type input))
+ (pin (num 80) (name IOUT1) (type passive))
+ (pin (num 81) (name RVID1) (type input))
+ (pin (num 82) (name IOUT0) (type passive))
+ (pin (num 83) (name RVID0) (type input))
+ (pin (num 84) (name VAA) (type input))))
+ (libpart (lib video-cache) (part BT473)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) BT473))
+ (pins
+ (pin (num 1) (name VAA) (type input))
+ (pin (num 2) (name VAA) (type input))
+ (pin (num 3) (name GND) (type input))
+ (pin (num 4) (name GND) (type input))
+ (pin (num 5) (name S0) (type input))
+ (pin (num 6) (name S1) (type input))
+ (pin (num 7) (name BLANK) (type input))
+ (pin (num 8) (name SYNC) (type input))
+ (pin (num 9) (name CLOCK) (type input))
+ (pin (num 10) (name OL0) (type input))
+ (pin (num 11) (name OL1) (type input))
+ (pin (num 12) (name OL2) (type input))
+ (pin (num 13) (name OL3) (type input))
+ (pin (num 14) (name D0) (type input))
+ (pin (num 15) (name D1) (type input))
+ (pin (num 16) (name D2) (type input))
+ (pin (num 17) (name D3) (type input))
+ (pin (num 18) (name D4) (type input))
+ (pin (num 19) (name D5) (type input))
+ (pin (num 20) (name D6) (type input))
+ (pin (num 21) (name D7) (type input))
+ (pin (num 22) (name WR) (type input))
+ (pin (num 23) (name RD) (type input))
+ (pin (num 24) (name RS0) (type input))
+ (pin (num 25) (name RS1) (type input))
+ (pin (num 26) (name RS2) (type input))
+ (pin (num 27) (name CR0) (type output))
+ (pin (num 28) (name CR1) (type output))
+ (pin (num 29) (name CR2) (type output))
+ (pin (num 30) (name CR3) (type output))
+ (pin (num 31) (name GND) (type input))
+ (pin (num 32) (name GND) (type input))
+ (pin (num 33) (name VAA) (type input))
+ (pin (num 34) (name VAA) (type input))
+ (pin (num 35) (name VAA) (type input))
+ (pin (num 36) (name VAA) (type input))
+ (pin (num 37) (name RED) (type output))
+ (pin (num 38) (name GRE) (type output))
+ (pin (num 39) (name BLU) (type output))
+ (pin (num 40) (name IREF) (type input))
+ (pin (num 41) (name COMP) (type input))
+ (pin (num 42) (name OPA) (type output))
+ (pin (num 43) (name VREF) (type input))
+ (pin (num 44) (name VREFOUT) (type output))
+ (pin (num 45) (name R0) (type input))
+ (pin (num 46) (name R1) (type input))
+ (pin (num 47) (name R2) (type input))
+ (pin (num 48) (name R3) (type input))
+ (pin (num 49) (name R4) (type input))
+ (pin (num 50) (name R5) (type input))
+ (pin (num 51) (name R6) (type input))
+ (pin (num 52) (name R7) (type input))
+ (pin (num 53) (name G0) (type input))
+ (pin (num 54) (name G1) (type input))
+ (pin (num 55) (name G2) (type input))
+ (pin (num 56) (name G3) (type input))
+ (pin (num 57) (name G4) (type input))
+ (pin (num 58) (name G5) (type input))
+ (pin (num 59) (name G6) (type input))
+ (pin (num 60) (name G7) (type input))
+ (pin (num 61) (name B0) (type input))
+ (pin (num 62) (name B1) (type input))
+ (pin (num 63) (name B2) (type input))
+ (pin (num 64) (name B3) (type input))
+ (pin (num 65) (name B4) (type input))
+ (pin (num 66) (name B5) (type input))
+ (pin (num 67) (name B6) (type input))
+ (pin (num 68) (name B7) (type input))))
+ (libpart (lib video-cache) (part BT812)
+ (fields
+ (field (name Reference) U)
+ (field (name Value) BT812))
+ (pins
+ (pin (num 1) (name VAA) (type input))
+ (pin (num 2) (name VAA) (type input))
+ (pin (num 3) (name YREF-) (type input))
+ (pin (num 4) (name VIN_Y/COMP.) (type input))
+ (pin (num 5) (name GNDA) (type input))
+ (pin (num 6) (name OUT_Y) (type output))
+ (pin (num 7) (name YLEVEL) (type input))
+ (pin (num 16) (name GND) (type input))
+ (pin (num 25) (name FIELD_1) (type BiDi))
+ (pin (num 26) (name FIELD_0) (type BiDi))
+ (pin (num 27) (name FIELD_2) (type output))
+ (pin (num 28) (name CBFLAG) (type output))
+ (pin (num 29) (name VALID) (type output))
+ (pin (num 30) (name GND) (type input))
+ (pin (num 31) (name VCC) (type input))
+ (pin (num 32) (name ACTIVE) (type output))
+ (pin (num 33) (name VACTIVE) (type output))
+ (pin (num 34) (name VRESET) (type output))
+ (pin (num 35) (name HACTIVE) (type output))
+ (pin (num 36) (name HRESET) (type output))
+ (pin (num 37) (name SERROR) (type output))
+ (pin (num 38) (name CAPTURE) (type output))
+ (pin (num 39) (name VAA) (type input))
+ (pin (num 40) (name VAA) (type input))
+ (pin (num 41) (name VAA) (type input))
+ (pin (num 42) (name VAA) (type input))
+ (pin (num 43) (name VAA) (type input))
+ (pin (num 44) (name GND) (type input))
+ (pin (num 45) (name VCC) (type input))
+ (pin (num 46) (name VTU_EN) (type input))
+ (pin (num 47) (name PIXEL_EN) (type input))
+ (pin (num 48) (name B7) (type 3state))
+ (pin (num 49) (name B6) (type 3state))
+ (pin (num 50) (name B5) (type 3state))
+ (pin (num 51) (name B4) (type 3state))
+ (pin (num 52) (name B3) (type 3state))
+ (pin (num 53) (name B2) (type 3state))
+ (pin (num 54) (name B1) (type 3state))
+ (pin (num 55) (name B0) (type 3state))
+ (pin (num 56) (name GND) (type input))
+ (pin (num 57) (name VCC) (type input))
+ (pin (num 58) (name R7) (type 3state))
+ (pin (num 59) (name R6) (type 3state))
+ (pin (num 60) (name R5) (type 3state))
+ (pin (num 61) (name R4) (type 3state))
+ (pin (num 62) (name R3) (type 3state))
+ (pin (num 63) (name R2) (type 3state))
+ (pin (num 64) (name R1) (type 3state))
+ (pin (num 65) (name R0) (type 3state))
+ (pin (num 66) (name GND) (type input))
+ (pin (num 67) (name G7) (type 3state))
+ (pin (num 68) (name G6) (type 3state))
+ (pin (num 69) (name G5) (type 3state))
+ (pin (num 70) (name G4) (type 3state))
+ (pin (num 71) (name G3) (type 3state))
+ (pin (num 72) (name G2) (type 3state))
+ (pin (num 73) (name G1) (type 3state))
+ (pin (num 74) (name G0) (type 3state))
+ (pin (num 75) (name GND) (type input))
+ (pin (num 76) (name VCC) (type input))
+ (pin (num 78) (name VAA) (type input))
+ (pin (num 79) (name VAA) (type input))
+ (pin (num 80) (name VAA) (type input))
+ (pin (num 81) (name VAA) (type input))
+ (pin (num 82) (name VAA) (type input))
+ (pin (num 83) (name WR) (type input))
+ (pin (num 84) (name RS0) (type input))
+ (pin (num 85) (name RS1) (type input))
+ (pin (num 86) (name RD) (type input))
+ (pin (num 87) (name RESET) (type input))
+ (pin (num 88) (name TDI) (type input))
+ (pin (num 89) (name TMS) (type input))
+ (pin (num 90) (name TCLK) (type input))
+ (pin (num 91) (name VCC) (type passive))
+ (pin (num 92) (name D0) (type 3state))
+ (pin (num 93) (name D1) (type 3state))
+ (pin (num 94) (name D2) (type 3state))
+ (pin (num 95) (name D3) (type 3state))
+ (pin (num 96) (name D4) (type 3state))
+ (pin (num 97) (name D5) (type 3state))
+ (pin (num 98) (name GND) (type input))
+ (pin (num 99) (name D6) (type 3state))
+ (pin (num 100) (name D7) (type 3state))
+ (pin (num 101) (name TDO) (type output))
+ (pin (num 102) (name VCC) (type input))
+ (pin (num 103) (name GND) (type input))
+ (pin (num 104) (name CLKX1) (type output))
+ (pin (num 105) (name CLKX2) (type output))
+ (pin (num 106) (name XTAL2_IN) (type input))
+ (pin (num 107) (name XTAL2_OUT) (type output))
+ (pin (num 108) (name XTAL1_IN) (type input))
+ (pin (num 109) (name XTAL1_OUT) (type output))
+ (pin (num 110) (name N/C) (type input))
+ (pin (num 111) (name GND) (type input))
+ (pin (num 112) (name VCC) (type input))
+ (pin (num 113) (name REFOUT) (type output))
+ (pin (num 114) (name CLEVEL) (type input))
+ (pin (num 115) (name OUT_C) (type output))
+ (pin (num 116) (name GNDA) (type input))
+ (pin (num 117) (name VIN_C) (type input))
+ (pin (num 118) (name CREF-) (type input))
+ (pin (num 119) (name VAA) (type input))
+ (pin (num 120) (name VAA) (type input))
+ (pin (num 121) (name VAA) (type input))
+ (pin (num 122) (name VAA) (type input))
+ (pin (num 123) (name VAA) (type passive))
+ (pin (num 124) (name GNDA) (type input))
+ (pin (num 125) (name VID0_C) (type input))
+ (pin (num 126) (name GNDA) (type input))
+ (pin (num 127) (name VID1_C) (type input))
+ (pin (num 128) (name GNDA) (type input))
+ (pin (num 129) (name VID2_C) (type input))
+ (pin (num 130) (name GNDA) (type input))
+ (pin (num 131) (name VID3_C) (type input))
+ (pin (num 132) (name VAA) (type input))
+ (pin (num 134) (name GNDA) (type input))
+ (pin (num 135) (name R/2) (type input))
+ (pin (num 136) (name GNDA) (type input))
+ (pin (num 137) (name CREF+) (type input))
+ (pin (num 138) (name GNDA) (type input))
+ (pin (num 139) (name GNDA) (type input))
+ (pin (num 140) (name SYNC_DET) (type input))
+ (pin (num 141) (name VAA) (type input))
+ (pin (num 142) (name VAA) (type input))
+ (pin (num 143) (name GNDA) (type input))
+ (pin (num 144) (name YREF+) (type input))
+ (pin (num 145) (name GNDA) (type input))
+ (pin (num 147) (name GNDA) (type input))
+ (pin (num 149) (name VAA) (type input))
+ (pin (num 150) (name VID3_Y) (type input))
+ (pin (num 151) (name GNDA) (type input))
+ (pin (num 152) (name VID2_Y) (type input))
+ (pin (num 153) (name GNDA) (type input))
+ (pin (num 154) (name VID1_Y) (type input))
+ (pin (num 155) (name GNDA) (type input))
+ (pin (num 156) (name VID0_Y) (type input))
+ (pin (num 157) (name GNDA) (type input))
+ (pin (num 158) (name VAA) (type input))
+ (pin (num 159) (name VAA) (type input))
+ (pin (num 160) (name VAA) (type input)))))
+ (libraries
+ (library (logical device)
+ (uri f:\kicad\share\library\device.lib))
+ (library (logical conn)
+ (uri f:\kicad\share\library\conn.lib))
+ (library (logical 74xx)
+ (uri f:\kicad\share\library\74xx.lib))
+ (library (logical memory)
+ (uri f:\kicad\share\library\memory.lib))
+ (library (logical xilinx)
+ (uri f:\kicad\share\library\xilinx.lib))
+ (library (logical special)
+ (uri f:\kicad\share\library\special.lib))
+ (library (logical philips)
+ (uri f:\kicad\share\library\philips.lib))
+ (library (logical video-cache)
+ (uri F:\kicad-launchpad\testing\demos\video\video-cache.lib)))
+ (nets
+ (net (code 1) (name /buspci.sch/PTATN-)
+ (node (ref U11) (pin 114))
+ (node (ref U24) (pin 4))
+ (node (ref U23) (pin 18))
+ (node (ref RR5) (pin 2)))
+ (net (code 2) (name /buspci.sch/WR-)
+ (node (ref U23) (pin 47))
+ (node (ref U24) (pin 132))
+ (node (ref U11) (pin 74))
+ (node (ref RR3) (pin 5)))
+ (net (code 3) (name /graphic/CDACLK)
+ (node (ref U9) (pin 9))
+ (node (ref U22) (pin 79))
+ (node (ref U24) (pin 76)))
+ (net (code 4) (name /graphic/CADCLK)
+ (node (ref U8) (pin 38))
+ (node (ref U8) (pin 39))
+ (node (ref U24) (pin 77))
+ (node (ref U22) (pin 2))
+ (node (ref U8) (pin 40)))
+ (net (code 5) (name /buspci.sch/BPCLK)
+ (node (ref U11) (pin 140))
+ (node (ref U23) (pin 30)))
+ (net (code 6) (name /RAMS/RAS6-)
+ (node (ref U14) (pin 44))
+ (node (ref U24) (pin 65))
+ (node (ref U14) (pin 34)))
+ (net (code 7) (name /RAMS/CAS2-)
+ (node (ref U13) (pin 42))
+ (node (ref U14) (pin 42))
+ (node (ref U19) (pin 42))
+ (node (ref U15) (pin 42))
+ (node (ref U16) (pin 42))
+ (node (ref U18) (pin 42))
+ (node (ref U24) (pin 59))
+ (node (ref U12) (pin 42))
+ (node (ref U17) (pin 42)))
+ (net (code 8) (name /RAMS/CAS3-)
+ (node (ref U12) (pin 43))
+ (node (ref U19) (pin 43))
+ (node (ref U18) (pin 43))
+ (node (ref U16) (pin 43))
+ (node (ref U13) (pin 43))
+ (node (ref U15) (pin 43))
+ (node (ref U14) (pin 43))
+ (node (ref U24) (pin 62))
+ (node (ref U17) (pin 43)))
+ (net (code 9) (name /RAMS/RAS0-)
+ (node (ref U19) (pin 44))
+ (node (ref U24) (pin 74))
+ (node (ref U19) (pin 34)))
+ (net (code 10) (name /RAMS/RAS1-)
+ (node (ref U18) (pin 44))
+ (node (ref U24) (pin 73))
+ (node (ref U18) (pin 34)))
+ (net (code 11) (name /RAMS/RAS2-)
+ (node (ref U17) (pin 44))
+ (node (ref U17) (pin 34))
+ (node (ref U24) (pin 69)))
+ (net (code 12) (name /RAMS/RAS3-)
+ (node (ref U24) (pin 68))
+ (node (ref U15) (pin 34))
+ (node (ref U15) (pin 44)))
+ (net (code 13) (name /RAMS/RAS4-)
+ (node (ref U16) (pin 34))
+ (node (ref U16) (pin 44))
+ (node (ref U24) (pin 67)))
+ (net (code 14) (name /RAMS/RAS5-)
+ (node (ref U12) (pin 44))
+ (node (ref U12) (pin 34))
+ (node (ref U24) (pin 66)))
+ (net (code 15) (name /RAMS/CAS1-)
+ (node (ref U17) (pin 41))
+ (node (ref U15) (pin 41))
+ (node (ref U18) (pin 41))
+ (node (ref U19) (pin 41))
+ (node (ref U12) (pin 41))
+ (node (ref U16) (pin 41))
+ (node (ref U13) (pin 41))
+ (node (ref U24) (pin 58))
+ (node (ref U14) (pin 41)))
+ (net (code 16) (name /RAMS/CAS0-)
+ (node (ref U17) (pin 40))
+ (node (ref U12) (pin 40))
+ (node (ref U15) (pin 40))
+ (node (ref U19) (pin 40))
+ (node (ref U24) (pin 57))
+ (node (ref U13) (pin 40))
+ (node (ref U18) (pin 40))
+ (node (ref U14) (pin 40))
+ (node (ref U16) (pin 40)))
+ (net (code 17) (name /RAMS/RAS7-)
+ (node (ref U13) (pin 44))
+ (node (ref U13) (pin 34))
+ (node (ref U24) (pin 64)))
+ (net (code 18) (name /RAMS/WRAM-)
+ (node (ref U14) (pin 47))
+ (node (ref U18) (pin 47))
+ (node (ref U12) (pin 47))
+ (node (ref U15) (pin 47))
+ (node (ref U16) (pin 47))
+ (node (ref U17) (pin 47))
+ (node (ref U24) (pin 63))
+ (node (ref U13) (pin 47))
+ (node (ref U19) (pin 47)))
+ (net (code 19) (name /graphic/CSYNC-OUT)
+ (node (ref U9) (pin 8))
+ (node (ref U24) (pin 13))
+ (node (ref R30) (pin 2))
+ (node (ref U22) (pin 9)))
+ (net (code 20) (name /ESVIDEO-RVB/CSYNCIN-)
+ (node (ref U24) (pin 54))
+ (node (ref U8) (pin 8)))
+ (net (code 21) (name /ESVIDEO-RVB/BLANK-)
+ (node (ref U24) (pin 53))
+ (node (ref U22) (pin 8))
+ (node (ref U9) (pin 7)))
+ (net (code 22) (name /ESVIDEO-RVB/WRCAD-)
+ (node (ref U8) (pin 24))
+ (node (ref U23) (pin 69)))
+ (net (code 23) (name /ESVIDEO-RVB/RDCAD-)
+ (node (ref U23) (pin 74))
+ (node (ref U8) (pin 20)))
+ (net (code 24) (name /ESVIDEO-RVB/WRCDA-)
+ (node (ref U9) (pin 23))
+ (node (ref U23) (pin 73)))
+ (net (code 25) (name /ESVIDEO-RVB/RDCDA-)
+ (node (ref U23) (pin 72))
+ (node (ref U9) (pin 22)))
+ (net (code 26) (name /ESVIDEO-RVB/CLAMP)
+ (node (ref U8) (pin 37))
+ (node (ref U22) (pin 7))
+ (node (ref U24) (pin 75))
+ (node (ref U8) (pin 59)))
+ (net (code 27) (name /buspci.sch/RD-)
+ (node (ref U23) (pin 46))
+ (node (ref U11) (pin 72))
+ (node (ref U24) (pin 133))
+ (node (ref RR3) (pin 7)))
+ (net (code 28) (name /muxdata/X_DIN)
+ (node (ref U22) (pin 72))
+ (node (ref U24) (pin 118)))
+ (net (code 29) (name /graphic/X_CLK)
+ (node (ref U22) (pin 74))
+ (node (ref U24) (pin 119))
+ (node (ref U23) (pin 86)))
+ (net (code 30) (name /graphic/X_DONE)
+ (node (ref U24) (pin 80))
+ (node (ref U22) (pin 50))
+ (node (ref U23) (pin 83)))
+ (net (code 31) (name /graphic/X_PROG-)
+ (node (ref U24) (pin 82))
+ (node (ref U22) (pin 52))
+ (node (ref U23) (pin 84)))
+ (net (code 32) (name /graphic/ACCES_RAM-)
+ (node (ref U6) (pin 19))
+ (node (ref U24) (pin 56))
+ (node (ref U22) (pin 21))
+ (node (ref U3) (pin 19))
+ (node (ref U4) (pin 19))
+ (node (ref U5) (pin 19)))
+ (net (code 33) (name /muxdata/DATA_WR)
+ (node (ref U24) (pin 55))
+ (node (ref U6) (pin 1))
+ (node (ref U3) (pin 1))
+ (node (ref U5) (pin 1))
+ (node (ref U4) (pin 1)))
+ (net (code 34) (name /modul/YOUT)
+ (node (ref R40) (pin 2))
+ (node (ref J4) (pin 9)))
+ (net (code 35) (name /modul/COUT)
+ (node (ref J4) (pin 8))
+ (node (ref R39) (pin 1)))
+ (net (code 36) (name /graphic/ACQ_ON)
+ (node (ref U24) (pin 48))
+ (node (ref U22) (pin 13)))
+ (net (code 37) (name /buspci.sch/IRQ-)
+ (node (ref U24) (pin 149))
+ (node (ref U11) (pin 124)))
+ (net (code 38) (name /buspci.sch/X_IRQ)
+ (node (ref RR5) (pin 4))
+ (node (ref U24) (pin 11))
+ (node (ref U11) (pin 109)))
+ (net (code 39) (name /graphic/IRQ_SLR)
+ (node (ref U11) (pin 57))
+ (node (ref U24) (pin 134))
+ (node (ref RR2) (pin 7)))
+ (net (code 40) (name /buspci.sch/RDFIFO-)
+ (node (ref U24) (pin 16))
+ (node (ref U11) (pin 104))
+ (node (ref RR5) (pin 7)))
+ (net (code 41) (name /buspci.sch/WRFIFO-)
+ (node (ref U24) (pin 18))
+ (node (ref RR5) (pin 8))
+ (node (ref U11) (pin 102)))
+ (net (code 42) (name /buspci.sch/RDEMPTY)
+ (node (ref U11) (pin 106))
+ (node (ref U24) (pin 15)))
+ (net (code 43) (name /buspci.sch/WRFULL)
+ (node (ref U11) (pin 103))
+ (node (ref U24) (pin 17)))
+ (net (code 44) (name /buspci.sch/PTNUM0)
+ (node (ref U23) (pin 34))
+ (node (ref U24) (pin 150))
+ (node (ref U11) (pin 123)))
+ (net (code 45) (name /buspci.sch/PTNUM1)
+ (node (ref U11) (pin 122))
+ (node (ref U23) (pin 32))
+ (node (ref U24) (pin 154)))
+ (net (code 46) (name /pal-ntsc.sch/RESET-)
+ (node (ref U23) (pin 1))
+ (node (ref U24) (pin 148))
+ (node (ref U11) (pin 126))
+ (node (ref U10) (pin 87)))
+ (net (code 47) (name /buspci.sch/PTWR)
+ (node (ref U11) (pin 108))
+ (node (ref U23) (pin 16))
+ (node (ref U24) (pin 12)))
+ (net (code 48) (name /buspci.sch/SELECT-)
+ (node (ref U11) (pin 75))
+ (node (ref U24) (pin 135))
+ (node (ref U23) (pin 45))
+ (node (ref RR3) (pin 4)))
+ (net (code 49) (name /buspci.sch/PTRDY-)
+ (node (ref U24) (pin 3))
+ (node (ref U23) (pin 19))
+ (node (ref RR6) (pin 2))
+ (node (ref U11) (pin 115)))
+ (net (code 50) (name /buspci.sch/PTBURST-)
+ (node (ref U11) (pin 112))
+ (node (ref U23) (pin 17))
+ (node (ref U24) (pin 5)))
+ (net (code 51) (name /buspci.sch/PTADR-)
+ (node (ref U23) (pin 24))
+ (node (ref U11) (pin 107))
+ (node (ref RR5) (pin 5))
+ (node (ref U24) (pin 14)))
+ (net (code 52) (name /modul/CVBSOUT)
+ (node (ref R41) (pin 1))
+ (node (ref P8) (pin 1)))
+ (net (code 53) (name /graphic/F_PALIN)
+ (node (ref U10) (pin 104))
+ (node (ref U24) (pin 43)))
+ (net (code 54) (name /graphic/HD_PAL-)
+ (node (ref U24) (pin 52))
+ (node (ref U10) (pin 36)))
+ (net (code 55) (name /graphic/VD_PAL-)
+ (node (ref U10) (pin 34))
+ (node (ref U24) (pin 37)))
+ (net (code 56) (name /graphic/BT812_WR-)
+ (node (ref U23) (pin 70))
+ (node (ref U10) (pin 83)))
+ (net (code 57) (name /graphic/BT812_RD-)
+ (node (ref U23) (pin 71))
+ (node (ref U10) (pin 86)))
+ (net (code 58) (name /ESVIDEO-RVB/BLUE)
+ (node (ref J4) (pin 3))
+ (node (ref U9) (pin 39))
+ (node (ref R44) (pin 2))
+ (node (ref C60) (pin 2)))
+ (net (code 59) (name /modul/BLEU)
+ (node (ref C58) (pin 2))
+ (node (ref R42) (pin 2))
+ (node (ref U9) (pin 37))
+ (node (ref J4) (pin 1)))
+ (net (code 60) (name /ESVIDEO-RVB/GREEN)
+ (node (ref R43) (pin 2))
+ (node (ref C59) (pin 2))
+ (node (ref U9) (pin 38))
+ (node (ref J4) (pin 2)))
+ (net (code 61) (name /ESVIDEO-RVB/RED_IN)
+ (node (ref P1) (pin 1))
+ (node (ref R24) (pin 1))
+ (node (ref C4) (pin 2))
+ (node (ref R47) (pin 1)))
+ (net (code 62) (name /ESVIDEO-RVB/GREEN_IN)
+ (node (ref C3) (pin 2))
+ (node (ref P2) (pin 1))
+ (node (ref R45) (pin 1))
+ (node (ref R23) (pin 1)))
+ (net (code 63) (name /ESVIDEO-RVB/BLUE_IN)
+ (node (ref R46) (pin 1))
+ (node (ref R22) (pin 1))
+ (node (ref P3) (pin 1)))
+ (net (code 64) (name /ESVIDEO-RVB/OE_PAL-)
+ (node (ref U10) (pin 47))
+ (node (ref U9) (pin 28))
+ (node (ref U10) (pin 46)))
+ (net (code 65) (name "Net-(U22-Pad76)")
+ (node (ref U22) (pin 76)))
+ (net (code 66) (name "Net-(U22-Pad65)")
+ (node (ref U22) (pin 65)))
+ (net (code 67) (name "Net-(U22-Pad15)")
+ (node (ref U22) (pin 15)))
+ (net (code 68) (name "Net-(U22-Pad16)")
+ (node (ref U22) (pin 16)))
+ (net (code 69) (name "Net-(U22-Pad66)")
+ (node (ref U22) (pin 66)))
+ (net (code 70) (name "Net-(U22-Pad73)")
+ (node (ref U22) (pin 73)))
+ (net (code 71) (name "Net-(U22-Pad14)")
+ (node (ref U22) (pin 14)))
+ (net (code 72) (name "Net-(U22-Pad27)")
+ (node (ref U22) (pin 27)))
+ (net (code 73) (name "Net-(U22-Pad3)")
+ (node (ref U22) (pin 3)))
+ (net (code 74) (name "Net-(U22-Pad4)")
+ (node (ref U22) (pin 4)))
+ (net (code 75) (name "Net-(U22-Pad5)")
+ (node (ref U22) (pin 5)))
+ (net (code 76) (name "Net-(U22-Pad6)")
+ (node (ref U22) (pin 6)))
+ (net (code 77) (name "Net-(U22-Pad10)")
+ (node (ref U22) (pin 10)))
+ (net (code 78) (name "Net-(U22-Pad30)")
+ (node (ref U22) (pin 30)))
+ (net (code 79) (name "Net-(L6-Pad2)")
+ (node (ref L6) (pin 2))
+ (node (ref U20) (pin 20))
+ (node (ref R11) (pin 1)))
+ (net (code 80) (name "Net-(R10-Pad2)")
+ (node (ref R10) (pin 2))
+ (node (ref U20) (pin 22)))
+ (net (code 81) (name "Net-(U20-Pad3)")
+ (node (ref U20) (pin 3)))
+ (net (code 82) (name "Net-(C54-Pad1)")
+ (node (ref C54) (pin 1))
+ (node (ref U20) (pin 8))
+ (node (ref L2) (pin 2)))
+ (net (code 83) (name "Net-(R9-Pad2)")
+ (node (ref R9) (pin 2))
+ (node (ref U20) (pin 21)))
+ (net (code 84) (name "Net-(U20-Pad5)")
+ (node (ref U20) (pin 5)))
+ (net (code 85) (name "Net-(U20-Pad1)")
+ (node (ref U20) (pin 1)))
+ (net (code 86) (name "Net-(Q3-Pad2)")
+ (node (ref R18) (pin 1))
+ (node (ref Q3) (pin 2)))
+ (net (code 87) (name "Net-(Q1-Pad2)")
+ (node (ref Q1) (pin 2))
+ (node (ref R16) (pin 1)))
+ (net (code 88) (name "Net-(L1-Pad1)")
+ (node (ref L1) (pin 1))
+ (node (ref U20) (pin 18)))
+ (net (code 89) (name "Net-(Q2-Pad1)")
+ (node (ref Q2) (pin 1))
+ (node (ref R40) (pin 1))
+ (node (ref R33) (pin 1)))
+ (net (code 90) (name "Net-(U20-Pad23)")
+ (node (ref U20) (pin 23))
+ (node (ref X3) (pin 2)))
+ (net (code 91) (name "Net-(CV1-Pad1)")
+ (node (ref CV1) (pin 1))
+ (node (ref X3) (pin 1)))
+ (net (code 92) (name "Net-(C43-Pad1)")
+ (node (ref U20) (pin 12))
+ (node (ref C43) (pin 1)))
+ (net (code 93) (name "Net-(C48-Pad2)")
+ (node (ref C64) (pin 1))
+ (node (ref C48) (pin 2))
+ (node (ref U20) (pin 13))
+ (node (ref R11) (pin 2)))
+ (net (code 94) (name "Net-(C60-Pad1)")
+ (node (ref U20) (pin 7))
+ (node (ref C60) (pin 1)))
+ (net (code 95) (name "Net-(C61-Pad1)")
+ (node (ref C61) (pin 1))
+ (node (ref R30) (pin 1))
+ (node (ref R31) (pin 2)))
+ (net (code 96) (name "Net-(POT1-Pad1)")
+ (node (ref POT1) (pin 1))
+ (node (ref R9) (pin 1)))
+ (net (code 97) (name "Net-(C58-Pad1)")
+ (node (ref C58) (pin 1))
+ (node (ref U20) (pin 11)))
+ (net (code 98) (name "Net-(C44-Pad1)")
+ (node (ref U20) (pin 6))
+ (node (ref C44) (pin 1)))
+ (net (code 99) (name "Net-(U20-Pad4)")
+ (node (ref U20) (pin 4)))
+ (net (code 100) (name "Net-(Q1-Pad1)")
+ (node (ref R39) (pin 2))
+ (node (ref R32) (pin 1))
+ (node (ref Q1) (pin 1)))
+ (net (code 101) (name "Net-(Q2-Pad2)")
+ (node (ref Q2) (pin 2))
+ (node (ref R17) (pin 1)))
+ (net (code 102) (name "Net-(C45-Pad1)")
+ (node (ref U20) (pin 15))
+ (node (ref C45) (pin 1)))
+ (net (code 103) (name "Net-(C61-Pad2)")
+ (node (ref C61) (pin 2))
+ (node (ref U20) (pin 24)))
+ (net (code 104) (name "Net-(C46-Pad1)")
+ (node (ref C46) (pin 1))
+ (node (ref L1) (pin 2))
+ (node (ref C53) (pin 1)))
+ (net (code 105) (name "Net-(Q3-Pad1)")
+ (node (ref Q3) (pin 1))
+ (node (ref R41) (pin 2))
+ (node (ref R34) (pin 1)))
+ (net (code 106) (name "Net-(C59-Pad1)")
+ (node (ref C59) (pin 1))
+ (node (ref U20) (pin 9)))
+ (net (code 107) (name /modul/CVBS)
+ (node (ref U20) (pin 16))
+ (node (ref R18) (pin 2)))
+ (net (code 108) (name +5F)
+ (node (ref C55) (pin 1))
+ (node (ref L3) (pin 2))
+ (node (ref Q2) (pin 3))
+ (node (ref Q1) (pin 3))
+ (node (ref Q3) (pin 3)))
+ (net (code 109) (name /modul/CHROM)
+ (node (ref R16) (pin 2))
+ (node (ref U20) (pin 14)))
+ (net (code 110) (name "Net-(R4-Pad1)")
+ (node (ref U20) (pin 2))
+ (node (ref R4) (pin 1)))
+ (net (code 111) (name /modul/LUM)
+ (node (ref U20) (pin 19))
+ (node (ref R17) (pin 2)))
+ (net (code 112) (name "Net-(L6-Pad1)")
+ (node (ref L6) (pin 1))
+ (node (ref R10) (pin 1)))
+ (net (code 113) (name /pal-ntsc.sch/Y-VIDEO)
+ (node (ref U10) (pin 156))
+ (node (ref R3) (pin 1))
+ (node (ref D2) (pin 1))
+ (node (ref D1) (pin 2)))
+ (net (code 114) (name /pal-ntsc.sch/C-VIDEO)
+ (node (ref R2) (pin 1))
+ (node (ref D3) (pin 2))
+ (node (ref U10) (pin 125))
+ (node (ref D4) (pin 1)))
+ (net (code 115) (name "Net-(C7-Pad1)")
+ (node (ref U10) (pin 114))
+ (node (ref R27) (pin 2))
+ (node (ref C7) (pin 1)))
+ (net (code 116) (name "Net-(C1-Pad1)")
+ (node (ref R35) (pin 1))
+ (node (ref C1) (pin 1))
+ (node (ref C47) (pin 1)))
+ (net (code 117) (name "Net-(C6-Pad1)")
+ (node (ref C6) (pin 1))
+ (node (ref R12) (pin 1))
+ (node (ref U10) (pin 144))
+ (node (ref U10) (pin 113))
+ (node (ref U10) (pin 137)))
+ (net (code 118) (name "Net-(C65-Pad2)")
+ (node (ref X2) (pin 1))
+ (node (ref R25) (pin 2))
+ (node (ref C65) (pin 2))
+ (node (ref U10) (pin 109)))
+ (net (code 119) (name "Net-(C16-Pad1)")
+ (node (ref U10) (pin 110))
+ (node (ref C16) (pin 1)))
+ (net (code 120) (name "Net-(C66-Pad2)")
+ (node (ref X2) (pin 2))
+ (node (ref U10) (pin 108))
+ (node (ref R25) (pin 1))
+ (node (ref C66) (pin 2)))
+ (net (code 121) (name /pal-ntsc.sch/Y_SYNC)
+ (node (ref R20) (pin 2))
+ (node (ref U10) (pin 6))
+ (node (ref R35) (pin 2)))
+ (net (code 122) (name "Net-(C1-Pad2)")
+ (node (ref C1) (pin 2))
+ (node (ref U10) (pin 140))
+ (node (ref R14) (pin 1)))
+ (net (code 123) (name "Net-(C5-Pad1)")
+ (node (ref U10) (pin 117))
+ (node (ref C5) (pin 1)))
+ (net (code 124) (name "Net-(C8-Pad1)")
+ (node (ref U10) (pin 4))
+ (node (ref C8) (pin 1)))
+ (net (code 125) (name "Net-(C4-Pad1)")
+ (node (ref C4) (pin 1))
+ (node (ref R2) (pin 2)))
+ (net (code 126) (name "Net-(C3-Pad1)")
+ (node (ref C3) (pin 1))
+ (node (ref R3) (pin 2)))
+ (net (code 127) (name "Net-(C8-Pad2)")
+ (node (ref C8) (pin 2))
+ (node (ref R20) (pin 1)))
+ (net (code 128) (name "Net-(R19-Pad2)")
+ (node (ref U10) (pin 115))
+ (node (ref R19) (pin 2)))
+ (net (code 129) (name "Net-(C5-Pad2)")
+ (node (ref C5) (pin 2))
+ (node (ref R19) (pin 1)))
+ (net (code 130) (name "Net-(R27-Pad1)")
+ (node (ref U10) (pin 135))
+ (node (ref R27) (pin 1)))
+ (net (code 131) (name "Net-(U10-Pad101)")
+ (node (ref U10) (pin 101)))
+ (net (code 132) (name "Net-(U10-Pad26)")
+ (node (ref U10) (pin 26)))
+ (net (code 133) (name "Net-(U10-Pad25)")
+ (node (ref U10) (pin 25)))
+ (net (code 134) (name "Net-(U10-Pad27)")
+ (node (ref U10) (pin 27)))
+ (net (code 135) (name "Net-(U10-Pad127)")
+ (node (ref U10) (pin 127)))
+ (net (code 136) (name "Net-(U10-Pad154)")
+ (node (ref U10) (pin 154)))
+ (net (code 137) (name "Net-(U10-Pad152)")
+ (node (ref U10) (pin 152)))
+ (net (code 138) (name "Net-(U10-Pad129)")
+ (node (ref U10) (pin 129)))
+ (net (code 139) (name "Net-(U10-Pad150)")
+ (node (ref U10) (pin 150)))
+ (net (code 140) (name "Net-(U10-Pad131)")
+ (node (ref U10) (pin 131)))
+ (net (code 141) (name "Net-(U10-Pad32)")
+ (node (ref U10) (pin 32)))
+ (net (code 142) (name "Net-(U10-Pad38)")
+ (node (ref U10) (pin 38)))
+ (net (code 143) (name "Net-(U10-Pad29)")
+ (node (ref U10) (pin 29)))
+ (net (code 144) (name "Net-(U10-Pad28)")
+ (node (ref U10) (pin 28)))
+ (net (code 145) (name "Net-(U10-Pad37)")
+ (node (ref U10) (pin 37)))
+ (net (code 146) (name "Net-(U10-Pad107)")
+ (node (ref U10) (pin 107)))
+ (net (code 147) (name "Net-(U10-Pad106)")
+ (node (ref U10) (pin 106)))
+ (net (code 148) (name "Net-(U10-Pad33)")
+ (node (ref U10) (pin 33)))
+ (net (code 149) (name "Net-(U10-Pad35)")
+ (node (ref U10) (pin 35)))
+ (net (code 150) (name /pal-ntsc.sch/VAF)
+ (node (ref U10) (pin 120))
+ (node (ref U10) (pin 79))
+ (node (ref R12) (pin 2))
+ (node (ref U10) (pin 160))
+ (node (ref C2) (pin 1))
+ (node (ref U10) (pin 158))
+ (node (ref U10) (pin 119))
+ (node (ref U10) (pin 121))
+ (node (ref U10) (pin 141))
+ (node (ref U10) (pin 122))
+ (node (ref U10) (pin 132))
+ (node (ref U10) (pin 78))
+ (node (ref U10) (pin 39))
+ (node (ref U10) (pin 159))
+ (node (ref C62) (pin 1))
+ (node (ref C14) (pin 1))
+ (node (ref C13) (pin 1))
+ (node (ref C12) (pin 1))
+ (node (ref U10) (pin 43))
+ (node (ref U10) (pin 142))
+ (node (ref U10) (pin 149))
+ (node (ref U10) (pin 41))
+ (node (ref U10) (pin 42))
+ (node (ref U10) (pin 80))
+ (node (ref U10) (pin 2))
+ (node (ref U10) (pin 1))
+ (node (ref U10) (pin 40))
+ (node (ref L4) (pin 2))
+ (node (ref U10) (pin 123))
+ (node (ref U10) (pin 82))
+ (node (ref U10) (pin 81)))
+ (net (code 151) (name "Net-(U10-Pad105)")
+ (node (ref U10) (pin 105)))
+ (net (code 152) (name /graphic/X_DIN)
+ (node (ref U23) (pin 85))
+ (node (ref U24) (pin 117)))
+ (net (code 153) (name "Net-(D6-Pad1)")
+ (node (ref D6) (pin 1))
+ (node (ref R13) (pin 2)))
+ (net (code 154) (name "Net-(U24-Pad84)")
+ (node (ref U24) (pin 84)))
+ (net (code 155) (name "Net-(U24-Pad121)")
+ (node (ref U24) (pin 121)))
+ (net (code 156) (name "Net-(U7-Pad8)")
+ (node (ref U7) (pin 8)))
+ (net (code 157) (name /graphic/CLK10MHz)
+ (node (ref U24) (pin 2))
+ (node (ref U23) (pin 57))
+ (node (ref R21) (pin 2)))
+ (net (code 158) (name /graphic/HDOUT)
+ (node (ref U24) (pin 7))
+ (node (ref U7) (pin 1)))
+ (net (code 159) (name /graphic/HDREFOUT)
+ (node (ref U24) (pin 6))
+ (node (ref U7) (pin 2)))
+ (net (code 160) (name /graphic/14MHZOUT)
+ (node (ref U24) (pin 95))
+ (node (ref U7) (pin 6)))
+ (net (code 161) (name /graphic/VOSC)
+ (node (ref U7) (pin 5))
+ (node (ref R1) (pin 1))
+ (node (ref U7) (pin 4))
+ (node (ref C63) (pin 1))
+ (node (ref C23) (pin 1))
+ (node (ref U7) (pin 7)))
+ (net (code 162) (name "Net-(C49-Pad1)")
+ (node (ref X1) (pin 1))
+ (node (ref R21) (pin 1))
+ (node (ref C49) (pin 1))
+ (node (ref R26) (pin 2)))
+ (net (code 163) (name "Net-(U23-Pad100)")
+ (node (ref U23) (pin 100)))
+ (net (code 164) (name "Net-(U23-Pad58)")
+ (node (ref U23) (pin 58)))
+ (net (code 165) (name "Net-(P10-Pad1)")
+ (node (ref U23) (pin 87))
+ (node (ref P10) (pin 1)))
+ (net (code 166) (name "Net-(U23-Pad68)")
+ (node (ref U23) (pin 68)))
+ (net (code 167) (name "Net-(U23-Pad98)")
+ (node (ref U23) (pin 98)))
+ (net (code 168) (name "Net-(U23-Pad49)")
+ (node (ref U23) (pin 49)))
+ (net (code 169) (name "Net-(U23-Pad79)")
+ (node (ref U23) (pin 79)))
+ (net (code 170) (name "Net-(U23-Pad99)")
+ (node (ref U23) (pin 99)))
+ (net (code 171) (name "Net-(U23-Pad50)")
+ (node (ref U23) (pin 50)))
+ (net (code 172) (name "Net-(U23-Pad60)")
+ (node (ref U23) (pin 60)))
+ (net (code 173) (name "Net-(U23-Pad62)")
+ (node (ref U23) (pin 62)))
+ (net (code 174) (name "Net-(U23-Pad2)")
+ (node (ref U23) (pin 2)))
+ (net (code 175) (name "Net-(P11-Pad1)")
+ (node (ref P11) (pin 1))
+ (node (ref U23) (pin 82)))
+ (net (code 176) (name /graphic/RESERV1)
+ (node (ref U23) (pin 59))
+ (node (ref U24) (pin 44)))
+ (net (code 177) (name "Net-(P9-Pad1)")
+ (node (ref U23) (pin 51))
+ (node (ref P9) (pin 1)))
+ (net (code 178) (name /graphic/LED)
+ (node (ref D6) (pin 2))
+ (node (ref U23) (pin 81)))
+ (net (code 179) (name "Net-(U23-Pad76)")
+ (node (ref U23) (pin 76)))
+ (net (code 180) (name "Net-(U23-Pad31)")
+ (node (ref U23) (pin 31)))
+ (net (code 181) (name "Net-(U23-Pad33)")
+ (node (ref U23) (pin 33)))
+ (net (code 182) (name /graphic/DONE)
+ (node (ref U23) (pin 53))
+ (node (ref P5) (pin 4)))
+ (net (code 183) (name "Net-(U21-Pad6)")
+ (node (ref U21) (pin 6)))
+ (net (code 184) (name /graphic/PROG*)
+ (node (ref U21) (pin 3))
+ (node (ref U23) (pin 55))
+ (node (ref U21) (pin 4))
+ (node (ref P5) (pin 5)))
+ (net (code 185) (name "Net-(P4-Pad1)")
+ (node (ref U23) (pin 29))
+ (node (ref U23) (pin 27))
+ (node (ref U23) (pin 25))
+ (node (ref P4) (pin 1))
+ (node (ref R48) (pin 2)))
+ (net (code 186) (name /graphic/CCLK)
+ (node (ref U23) (pin 77))
+ (node (ref P5) (pin 2))
+ (node (ref U21) (pin 2)))
+ (net (code 187) (name /graphic/DIN)
+ (node (ref P5) (pin 3))
+ (node (ref U21) (pin 1))
+ (node (ref U23) (pin 75)))
+ (net (code 188) (name /graphic/XTAL_I)
+ (node (ref R26) (pin 1))
+ (node (ref X1) (pin 2))
+ (node (ref U23) (pin 56))
+ (node (ref C50) (pin 1)))
+ (net (code 189) (name /graphic/ID3)
+ (node (ref U2) (pin 19))
+ (node (ref U24) (pin 106)))
+ (net (code 190) (name /graphic/ID2)
+ (node (ref U24) (pin 105))
+ (node (ref U2) (pin 18)))
+ (net (code 191) (name /graphic/ID1)
+ (node (ref U24) (pin 99))
+ (node (ref U2) (pin 2)))
+ (net (code 192) (name /graphic/ID0)
+ (node (ref U24) (pin 102))
+ (node (ref U2) (pin 1)))
+ (net (code 193) (name /graphic/IOE-)
+ (node (ref U2) (pin 16))
+ (node (ref U24) (pin 103)))
+ (net (code 194) (name /graphic/IWR-)
+ (node (ref U24) (pin 98))
+ (node (ref U2) (pin 3)))
+ (net (code 195) (name /graphic/ICAS-)
+ (node (ref U2) (pin 17))
+ (node (ref U24) (pin 104)))
+ (net (code 196) (name /graphic/IRAS-)
+ (node (ref U24) (pin 97))
+ (node (ref U2) (pin 4)))
+ (net (code 197) (name /graphic/IA9)
+ (node (ref U2) (pin 5))
+ (node (ref U24) (pin 96)))
+ (net (code 198) (name /graphic/IA8)
+ (node (ref U2) (pin 15))
+ (node (ref U24) (pin 93)))
+ (net (code 199) (name /graphic/IA7)
+ (node (ref U2) (pin 14))
+ (node (ref U24) (pin 78)))
+ (net (code 200) (name /graphic/IA6)
+ (node (ref U2) (pin 13))
+ (node (ref U24) (pin 83)))
+ (net (code 201) (name /graphic/IA5)
+ (node (ref U2) (pin 12))
+ (node (ref U24) (pin 85)))
+ (net (code 202) (name /graphic/IA4)
+ (node (ref U24) (pin 86))
+ (node (ref U2) (pin 11)))
+ (net (code 203) (name /graphic/IA3)
+ (node (ref U24) (pin 87))
+ (node (ref U2) (pin 9)))
+ (net (code 204) (name /graphic/IA2)
+ (node (ref U24) (pin 88))
+ (node (ref U2) (pin 8)))
+ (net (code 205) (name /graphic/IA1)
+ (node (ref U24) (pin 92))
+ (node (ref U2) (pin 7)))
+ (net (code 206) (name /graphic/IA0)
+ (node (ref U2) (pin 6))
+ (node (ref U24) (pin 94)))
+ (net (code 207) (name /graphic/CSIO-)
+ (node (ref U23) (pin 61))
+ (node (ref U24) (pin 159)))
+ (net (code 208) (name "Net-(U16-Pad70)")
+ (node (ref U16) (pin 70)))
+ (net (code 209) (name "Net-(U12-Pad69)")
+ (node (ref U12) (pin 69)))
+ (net (code 210) (name "Net-(U16-Pad67)")
+ (node (ref U16) (pin 67)))
+ (net (code 211) (name "Net-(U16-Pad68)")
+ (node (ref U16) (pin 68)))
+ (net (code 212) (name "Net-(U16-Pad69)")
+ (node (ref U16) (pin 69)))
+ (net (code 213) (name "Net-(U15-Pad70)")
+ (node (ref U15) (pin 70)))
+ (net (code 214) (name "Net-(U15-Pad67)")
+ (node (ref U15) (pin 67)))
+ (net (code 215) (name "Net-(U15-Pad68)")
+ (node (ref U15) (pin 68)))
+ (net (code 216) (name "Net-(U15-Pad69)")
+ (node (ref U15) (pin 69)))
+ (net (code 217) (name "Net-(U14-Pad67)")
+ (node (ref U14) (pin 67)))
+ (net (code 218) (name "Net-(U14-Pad69)")
+ (node (ref U14) (pin 69)))
+ (net (code 219) (name "Net-(U14-Pad68)")
+ (node (ref U14) (pin 68)))
+ (net (code 220) (name "Net-(U14-Pad70)")
+ (node (ref U14) (pin 70)))
+ (net (code 221) (name "Net-(U12-Pad68)")
+ (node (ref U12) (pin 68)))
+ (net (code 222) (name "Net-(U12-Pad67)")
+ (node (ref U12) (pin 67)))
+ (net (code 223) (name "Net-(U12-Pad70)")
+ (node (ref U12) (pin 70)))
+ (net (code 224) (name "Net-(U18-Pad68)")
+ (node (ref U18) (pin 68)))
+ (net (code 225) (name "Net-(U18-Pad67)")
+ (node (ref U18) (pin 67)))
+ (net (code 226) (name "Net-(U18-Pad69)")
+ (node (ref U18) (pin 69)))
+ (net (code 227) (name "Net-(U18-Pad70)")
+ (node (ref U18) (pin 70)))
+ (net (code 228) (name "Net-(U19-Pad69)")
+ (node (ref U19) (pin 69)))
+ (net (code 229) (name "Net-(U19-Pad68)")
+ (node (ref U19) (pin 68)))
+ (net (code 230) (name "Net-(U19-Pad67)")
+ (node (ref U19) (pin 67)))
+ (net (code 231) (name "Net-(U19-Pad70)")
+ (node (ref U19) (pin 70)))
+ (net (code 232) (name "Net-(U17-Pad67)")
+ (node (ref U17) (pin 67)))
+ (net (code 233) (name "Net-(U17-Pad68)")
+ (node (ref U17) (pin 68)))
+ (net (code 234) (name "Net-(U17-Pad69)")
+ (node (ref U17) (pin 69)))
+ (net (code 235) (name "Net-(U17-Pad70)")
+ (node (ref U17) (pin 70)))
+ (net (code 236) (name "Net-(U13-Pad67)")
+ (node (ref U13) (pin 67)))
+ (net (code 237) (name "Net-(U13-Pad68)")
+ (node (ref U13) (pin 68)))
+ (net (code 238) (name "Net-(U13-Pad69)")
+ (node (ref U13) (pin 69)))
+ (net (code 239) (name "Net-(U13-Pad70)")
+ (node (ref U13) (pin 70)))
+ (net (code 240) (name /buspci.sch/EA15)
+ (node (ref RR4) (pin 6))
+ (node (ref U11) (pin 153)))
+ (net (code 241) (name /buspci.sch/EA14)
+ (node (ref RR4) (pin 8))
+ (node (ref U11) (pin 149)))
+ (net (code 242) (name /buspci.sch/EA13)
+ (node (ref RR6) (pin 4))
+ (node (ref U11) (pin 141)))
+ (net (code 243) (name /buspci.sch/EA12)
+ (node (ref U11) (pin 137))
+ (node (ref RR6) (pin 5)))
+ (net (code 244) (name /buspci.sch/EA11)
+ (node (ref U11) (pin 129))
+ (node (ref RR6) (pin 7)))
+ (net (code 245) (name /buspci.sch/EA10)
+ (node (ref RR6) (pin 9))
+ (node (ref U11) (pin 121)))
+ (net (code 246) (name /buspci.sch/EA9)
+ (node (ref RR5) (pin 3))
+ (node (ref U11) (pin 113)))
+ (net (code 247) (name /buspci.sch/EA7)
+ (node (ref RR5) (pin 9))
+ (node (ref U11) (pin 101)))
+ (net (code 248) (name /buspci.sch/EA6)
+ (node (ref RR4) (pin 2))
+ (node (ref U11) (pin 97)))
+ (net (code 249) (name /buspci.sch/EA5)
+ (node (ref U11) (pin 89))
+ (node (ref RR4) (pin 4)))
+ (net (code 250) (name /buspci.sch/EA4)
+ (node (ref RR3) (pin 2))
+ (node (ref U11) (pin 81)))
+ (net (code 251) (name /buspci.sch/EA3)
+ (node (ref RR3) (pin 6))
+ (node (ref U11) (pin 73)))
+ (net (code 252) (name /buspci.sch/EA2)
+ (node (ref U11) (pin 69))
+ (node (ref RR3) (pin 8)))
+ (net (code 253) (name /buspci.sch/EA1)
+ (node (ref U11) (pin 61))
+ (node (ref RR2) (pin 6)))
+ (net (code 254) (name /buspci.sch/EQ6)
+ (node (ref U11) (pin 41))
+ (node (ref RR2) (pin 2)))
+ (net (code 255) (name /buspci.sch/EQ5)
+ (node (ref RR2) (pin 4))
+ (node (ref U11) (pin 33)))
+ (net (code 256) (name /buspci.sch/EQ4)
+ (node (ref U11) (pin 29))
+ (node (ref RR1) (pin 9)))
+ (net (code 257) (name /buspci.sch/EQ3)
+ (node (ref RR1) (pin 7))
+ (node (ref U11) (pin 21)))
+ (net (code 258) (name /buspci.sch/EQ2)
+ (node (ref U11) (pin 17))
+ (node (ref RR1) (pin 6)))
+ (net (code 259) (name /buspci.sch/EQ1)
+ (node (ref RR1) (pin 4))
+ (node (ref U11) (pin 9)))
+ (net (code 260) (name /buspci.sch/EQ0)
+ (node (ref U11) (pin 1))
+ (node (ref RR1) (pin 2)))
+ (net (code 261) (name /buspci.sch/EQ7)
+ (node (ref U11) (pin 49))
+ (node (ref RR2) (pin 9)))
+ (net (code 262) (name VCC)
+ (node (ref U13) (pin 30))
+ (node (ref U11) (pin 31))
+ (node (ref U11) (pin 51))
+ (node (ref RR6) (pin 1))
+ (node (ref U11) (pin 71))
+ (node (ref U11) (pin 131))
+ (node (ref D4) (pin 2))
+ (node (ref U13) (pin 10))
+ (node (ref U11) (pin 111))
+ (node (ref RR7) (pin 1))
+ (node (ref U11) (pin 91))
+ (node (ref L5) (pin 1))
+ (node (ref L4) (pin 1))
+ (node (ref C56) (pin 1))
+ (node (ref U24) (pin 42))
+ (node (ref U10) (pin 31))
+ (node (ref RR8) (pin 1))
+ (node (ref U24) (pin 81))
+ (node (ref U10) (pin 57))
+ (node (ref U10) (pin 112))
+ (node (ref U10) (pin 102))
+ (node (ref U10) (pin 91))
+ (node (ref U10) (pin 76))
+ (node (ref R13) (pin 1))
+ (node (ref U10) (pin 45))
+ (node (ref RR3) (pin 1))
+ (node (ref D2) (pin 2))
+ (node (ref U24) (pin 120))
+ (node (ref U24) (pin 160))
+ (node (ref U24) (pin 142))
+ (node (ref C57) (pin 1))
+ (node (ref U24) (pin 38))
+ (node (ref U24) (pin 100))
+ (node (ref RR4) (pin 1))
+ (node (ref RR1) (pin 1))
+ (node (ref C29) (pin 1))
+ (node (ref U1) (pin 7))
+ (node (ref C28) (pin 1))
+ (node (ref U22) (pin 37))
+ (node (ref U1) (pin 8))
+ (node (ref U22) (pin 100))
+ (node (ref U22) (pin 89))
+ (node (ref BUS1) (pin A8))
+ (node (ref U22) (pin 12))
+ (node (ref U23) (pin 78))
+ (node (ref BUS1) (pin B61))
+ (node (ref U23) (pin 28))
+ (node (ref U22) (pin 22))
+ (node (ref BUS1) (pin B6))
+ (node (ref C31) (pin 1))
+ (node (ref R4) (pin 2))
+ (node (ref C30) (pin 1))
+ (node (ref C38) (pin 1))
+ (node (ref U12) (pin 59))
+ (node (ref U18) (pin 59))
+ (node (ref U22) (pin 25))
+ (node (ref BUS1) (pin A16))
+ (node (ref U15) (pin 30))
+ (node (ref U15) (pin 10))
+ (node (ref U16) (pin 59))
+ (node (ref BUS1) (pin B5))
+ (node (ref BUS1) (pin A5))
+ (node (ref U2) (pin 10))
+ (node (ref U22) (pin 63))
+ (node (ref C17) (pin 1))
+ (node (ref U22) (pin 26))
+ (node (ref U22) (pin 75))
+ (node (ref U16) (pin 30))
+ (node (ref U16) (pin 10))
+ (node (ref U23) (pin 66))
+ (node (ref U23) (pin 40))
+ (node (ref U23) (pin 54))
+ (node (ref U23) (pin 15))
+ (node (ref U23) (pin 3))
+ (node (ref U3) (pin 20))
+ (node (ref U4) (pin 20))
+ (node (ref BUS1) (pin B19))
+ (node (ref U23) (pin 92))
+ (node (ref U21) (pin 7))
+ (node (ref C25) (pin 1))
+ (node (ref U6) (pin 20))
+ (node (ref L3) (pin 1))
+ (node (ref C24) (pin 1))
+ (node (ref U21) (pin 8))
+ (node (ref R29) (pin 1))
+ (node (ref U5) (pin 20))
+ (node (ref R28) (pin 1))
+ (node (ref C71) (pin 1))
+ (node (ref U24) (pin 41))
+ (node (ref R48) (pin 1))
+ (node (ref RR2) (pin 1))
+ (node (ref BUS1) (pin A10))
+ (node (ref BUS1) (pin A62))
+ (node (ref C70) (pin 1))
+ (node (ref C72) (pin 1))
+ (node (ref BUS1) (pin B62))
+ (node (ref C73) (pin 1))
+ (node (ref U22) (pin 51))
+ (node (ref R1) (pin 2))
+ (node (ref U22) (pin 24))
+ (node (ref BUS1) (pin A59))
+ (node (ref BUS1) (pin B59))
+ (node (ref BUS1) (pin A61))
+ (node (ref U24) (pin 20))
+ (node (ref U24) (pin 40))
+ (node (ref U24) (pin 60))
+ (node (ref U17) (pin 59))
+ (node (ref U19) (pin 59))
+ (node (ref U19) (pin 10))
+ (node (ref U19) (pin 30))
+ (node (ref C67) (pin 1))
+ (node (ref U17) (pin 10))
+ (node (ref U15) (pin 59))
+ (node (ref RR5) (pin 1))
+ (node (ref U11) (pin 151))
+ (node (ref R5) (pin 2))
+ (node (ref R6) (pin 2))
+ (node (ref U13) (pin 59))
+ (node (ref C20) (pin 1))
+ (node (ref C19) (pin 1))
+ (node (ref U11) (pin 11))
+ (node (ref C18) (pin 1))
+ (node (ref C26) (pin 1))
+ (node (ref R7) (pin 2))
+ (node (ref C22) (pin 1))
+ (node (ref C21) (pin 1))
+ (node (ref U17) (pin 30))
+ (node (ref C15) (pin 1))
+ (node (ref L2) (pin 1))
+ (node (ref U14) (pin 59))
+ (node (ref C10) (pin 1))
+ (node (ref U14) (pin 10))
+ (node (ref C11) (pin 1))
+ (node (ref U14) (pin 30))
+ (node (ref C9) (pin 1))
+ (node (ref U12) (pin 10))
+ (node (ref U12) (pin 30))
+ (node (ref U18) (pin 30))
+ (node (ref U18) (pin 10))
+ (node (ref C27) (pin 1)))
+ (net (code 263) (name +3.3V)
+ (node (ref BUS1) (pin A45))
+ (node (ref BUS1) (pin A53))
+ (node (ref BUS1) (pin B43))
+ (node (ref BUS1) (pin A27))
+ (node (ref BUS1) (pin B54))
+ (node (ref BUS1) (pin A21))
+ (node (ref BUS1) (pin B25))
+ (node (ref BUS1) (pin B36))
+ (node (ref BUS1) (pin B41))
+ (node (ref BUS1) (pin B31))
+ (node (ref BUS1) (pin A39))
+ (node (ref BUS1) (pin A33))
+ (node (ref C68) (pin 1))
+ (node (ref C69) (pin 1)))
+ (net (code 264) (name /buspci.sch/P_AD0)
+ (node (ref BUS1) (pin A58))
+ (node (ref U11) (pin 56)))
+ (net (code 265) (name /buspci.sch/P_AD9)
+ (node (ref U11) (pin 40))
+ (node (ref BUS1) (pin A49)))
+ (net (code 266) (name /buspci.sch/P_AD8)
+ (node (ref U11) (pin 42))
+ (node (ref BUS1) (pin B52)))
+ (net (code 267) (name /buspci.sch/P_AD7)
+ (node (ref U11) (pin 44))
+ (node (ref BUS1) (pin B53)))
+ (net (code 268) (name /buspci.sch/P_AD6)
+ (node (ref BUS1) (pin A54))
+ (node (ref U11) (pin 46)))
+ (net (code 269) (name /buspci.sch/P_AD5)
+ (node (ref U11) (pin 47))
+ (node (ref BUS1) (pin B55)))
+ (net (code 270) (name /buspci.sch/P_AD4)
+ (node (ref BUS1) (pin A55))
+ (node (ref U11) (pin 48)))
+ (net (code 271) (name /buspci.sch/P_AD3)
+ (node (ref U11) (pin 52))
+ (node (ref BUS1) (pin B56)))
+ (net (code 272) (name /buspci.sch/P_AD2)
+ (node (ref BUS1) (pin A57))
+ (node (ref U11) (pin 54)))
+ (net (code 273) (name /buspci.sch/P_AD1)
+ (node (ref U11) (pin 55))
+ (node (ref BUS1) (pin B58)))
+ (net (code 274) (name /buspci.sch/P_AD10)
+ (node (ref U11) (pin 39))
+ (node (ref BUS1) (pin B48)))
+ (net (code 275) (name /buspci.sch/P_AD20)
+ (node (ref U11) (pin 6))
+ (node (ref BUS1) (pin A29)))
+ (net (code 276) (name /buspci.sch/P_AD29)
+ (node (ref BUS1) (pin B21))
+ (node (ref U11) (pin 148)))
+ (net (code 277) (name /buspci.sch/P_AD28)
+ (node (ref BUS1) (pin A22))
+ (node (ref U11) (pin 152)))
+ (net (code 278) (name /buspci.sch/P_AD27)
+ (node (ref BUS1) (pin B23))
+ (node (ref U11) (pin 154)))
+ (net (code 279) (name /buspci.sch/P_AD26)
+ (node (ref U11) (pin 155))
+ (node (ref BUS1) (pin A23)))
+ (net (code 280) (name /buspci.sch/P_AD25)
+ (node (ref U11) (pin 156))
+ (node (ref BUS1) (pin B24)))
+ (net (code 281) (name /buspci.sch/P_AD24)
+ (node (ref U11) (pin 158))
+ (node (ref BUS1) (pin A25)))
+ (net (code 282) (name /buspci.sch/P_AD23)
+ (node (ref U11) (pin 2))
+ (node (ref BUS1) (pin B27)))
+ (net (code 283) (name /buspci.sch/P_AD22)
+ (node (ref U11) (pin 3))
+ (node (ref BUS1) (pin A28)))
+ (net (code 284) (name /buspci.sch/P_AD21)
+ (node (ref BUS1) (pin B29))
+ (node (ref U11) (pin 4)))
+ (net (code 285) (name /buspci.sch/P_AD19)
+ (node (ref BUS1) (pin B30))
+ (node (ref U11) (pin 7)))
+ (net (code 286) (name /buspci.sch/P_AD18)
+ (node (ref BUS1) (pin A31))
+ (node (ref U11) (pin 8)))
+ (net (code 287) (name /buspci.sch/P_AD17)
+ (node (ref U11) (pin 12))
+ (node (ref BUS1) (pin B32)))
+ (net (code 288) (name /buspci.sch/P_AD16)
+ (node (ref U11) (pin 14))
+ (node (ref BUS1) (pin A32)))
+ (net (code 289) (name /buspci.sch/P_AD15)
+ (node (ref BUS1) (pin A44))
+ (node (ref U11) (pin 32)))
+ (net (code 290) (name /buspci.sch/P_AD14)
+ (node (ref U11) (pin 34))
+ (node (ref BUS1) (pin B45)))
+ (net (code 291) (name /buspci.sch/P_AD13)
+ (node (ref BUS1) (pin A46))
+ (node (ref U11) (pin 35)))
+ (net (code 292) (name /buspci.sch/P_AD12)
+ (node (ref BUS1) (pin B47))
+ (node (ref U11) (pin 36)))
+ (net (code 293) (name /buspci.sch/P_AD11)
+ (node (ref BUS1) (pin A47))
+ (node (ref U11) (pin 38)))
+ (net (code 294) (name /buspci.sch/P_AD30)
+ (node (ref U11) (pin 147))
+ (node (ref BUS1) (pin A20)))
+ (net (code 295) (name /buspci.sch/P_INTA#)
+ (node (ref U11) (pin 58))
+ (node (ref BUS1) (pin A6)))
+ (net (code 296) (name /buspci.sch/P_GNT#)
+ (node (ref U11) (pin 143))
+ (node (ref BUS1) (pin A17)))
+ (net (code 297) (name /buspci.sch/P_IDSEL)
+ (node (ref BUS1) (pin A26))
+ (node (ref U11) (pin 160)))
+ (net (code 298) (name /buspci.sch/P_SERR#)
+ (node (ref U11) (pin 26))
+ (node (ref BUS1) (pin B42)))
+ (net (code 299) (name /buspci.sch/P_PERR#)
+ (node (ref U11) (pin 24))
+ (node (ref BUS1) (pin B40)))
+ (net (code 300) (name /buspci.sch/P_C/BE1#)
+ (node (ref BUS1) (pin B44))
+ (node (ref U11) (pin 28)))
+ (net (code 301) (name /buspci.sch/P_C/BE0#)
+ (node (ref U11) (pin 43))
+ (node (ref BUS1) (pin A52)))
+ (net (code 302) (name /buspci.sch/P_C/BE2#)
+ (node (ref U11) (pin 15))
+ (node (ref BUS1) (pin B33)))
+ (net (code 303) (name /buspci.sch/P_AD31)
+ (node (ref BUS1) (pin B20))
+ (node (ref U11) (pin 146)))
+ (net (code 304) (name /buspci.sch/P_IRDY#)
+ (node (ref U11) (pin 18))
+ (node (ref BUS1) (pin B35)))
+ (net (code 305) (name /buspci.sch/P_REQ#)
+ (node (ref BUS1) (pin B18))
+ (node (ref U11) (pin 144)))
+ (net (code 306) (name /buspci.sch/P_DEVSEL#)
+ (node (ref U11) (pin 20))
+ (node (ref BUS1) (pin B37)))
+ (net (code 307) (name /buspci.sch/P_STOP#)
+ (node (ref BUS1) (pin A38))
+ (node (ref U11) (pin 22)))
+ (net (code 308) (name /buspci.sch/P_TRDY#)
+ (node (ref BUS1) (pin A36))
+ (node (ref U11) (pin 19)))
+ (net (code 309) (name /buspci.sch/P_FRAME#)
+ (node (ref U11) (pin 16))
+ (node (ref BUS1) (pin A34)))
+ (net (code 310) (name /buspci.sch/P_LOCK#)
+ (node (ref U11) (pin 23))
+ (node (ref BUS1) (pin B39)))
+ (net (code 311) (name /buspci.sch/P_RST#)
+ (node (ref BUS1) (pin A15))
+ (node (ref U11) (pin 139)))
+ (net (code 312) (name /buspci.sch/P_PAR)
+ (node (ref U11) (pin 27))
+ (node (ref BUS1) (pin A43)))
+ (net (code 313) (name /buspci.sch/P_CLK)
+ (node (ref U11) (pin 142))
+ (node (ref BUS1) (pin B16)))
+ (net (code 314) (name /buspci.sch/P_C/BE3#)
+ (node (ref U11) (pin 159))
+ (node (ref BUS1) (pin B26)))
+ (net (code 315) (name "Net-(BUS1-PadA4)")
+ (node (ref BUS1) (pin A4))
+ (node (ref BUS1) (pin B4)))
+ (net (code 316) (name "Net-(R7-Pad1)")
+ (node (ref W3) (pin 2))
+ (node (ref R7) (pin 1))
+ (node (ref U11) (pin 135)))
+ (net (code 317) (name "Net-(R6-Pad1)")
+ (node (ref W2) (pin 2))
+ (node (ref R6) (pin 1))
+ (node (ref U11) (pin 138)))
+ (net (code 318) (name "Net-(R5-Pad1)")
+ (node (ref R5) (pin 1))
+ (node (ref W1) (pin 2))
+ (node (ref U11) (pin 59)))
+ (net (code 319) (name "Net-(R29-Pad2)")
+ (node (ref R29) (pin 2))
+ (node (ref U1) (pin 5))
+ (node (ref U11) (pin 127)))
+ (net (code 320) (name "Net-(R28-Pad2)")
+ (node (ref R28) (pin 2))
+ (node (ref U11) (pin 128))
+ (node (ref U1) (pin 6)))
+ (net (code 321) (name "Net-(BUS1-PadB9)")
+ (node (ref W5) (pin 2))
+ (node (ref BUS1) (pin B9)))
+ (net (code 322) (name "Net-(BUS1-PadA60)")
+ (node (ref BUS1) (pin A60)))
+ (net (code 323) (name "Net-(BUS1-PadB8)")
+ (node (ref BUS1) (pin B8)))
+ (net (code 324) (name "Net-(BUS1-PadB60)")
+ (node (ref BUS1) (pin B60)))
+ (net (code 325) (name "Net-(BUS1-PadA41)")
+ (node (ref BUS1) (pin A41)))
+ (net (code 326) (name "Net-(BUS1-PadA40)")
+ (node (ref BUS1) (pin A40)))
+ (net (code 327) (name "Net-(BUS1-PadA19)")
+ (node (ref BUS1) (pin A19)))
+ (net (code 328) (name "Net-(BUS1-PadA14)")
+ (node (ref BUS1) (pin A14)))
+ (net (code 329) (name "Net-(BUS1-PadB14)")
+ (node (ref BUS1) (pin B14)))
+ (net (code 330) (name "Net-(BUS1-PadA11)")
+ (node (ref BUS1) (pin A11)))
+ (net (code 331) (name "Net-(BUS1-PadB10)")
+ (node (ref BUS1) (pin B10)))
+ (net (code 332) (name "Net-(BUS1-PadA9)")
+ (node (ref BUS1) (pin A9)))
+ (net (code 333) (name "Net-(BUS1-PadA7)")
+ (node (ref BUS1) (pin A7)))
+ (net (code 334) (name "Net-(BUS1-PadB7)")
+ (node (ref BUS1) (pin B7)))
+ (net (code 335) (name "Net-(BUS1-PadA3)")
+ (node (ref BUS1) (pin A3)))
+ (net (code 336) (name "Net-(BUS1-PadB2)")
+ (node (ref BUS1) (pin B2)))
+ (net (code 337) (name "Net-(BUS1-PadA1)")
+ (node (ref BUS1) (pin A1)))
+ (net (code 338) (name "Net-(BUS1-PadB11)")
+ (node (ref W4) (pin 2))
+ (node (ref BUS1) (pin B11)))
+ (net (code 339) (name GND)
+ (node (ref BUS1) (pin A48))
+ (node (ref U23) (pin 14))
+ (node (ref U23) (pin 52))
+ (node (ref C31) (pin 2))
+ (node (ref U22) (pin 23))
+ (node (ref BUS1) (pin B22))
+ (node (ref U22) (pin 11))
+ (node (ref P12) (pin 1))
+ (node (ref C27) (pin 2))
+ (node (ref P4) (pin 2))
+ (node (ref P5) (pin 1))
+ (node (ref BUS1) (pin A30))
+ (node (ref BUS1) (pin B49))
+ (node (ref U24) (pin 1))
+ (node (ref U24) (pin 70))
+ (node (ref R8) (pin 2))
+ (node (ref U24) (pin 10))
+ (node (ref U9) (pin 4))
+ (node (ref U1) (pin 4))
+ (node (ref U23) (pin 41))
+ (node (ref U23) (pin 91))
+ (node (ref U9) (pin 3))
+ (node (ref U4) (pin 10))
+ (node (ref BUS1) (pin A42))
+ (node (ref U23) (pin 26))
+ (node (ref U3) (pin 10))
+ (node (ref U21) (pin 5))
+ (node (ref C23) (pin 2))
+ (node (ref P2) (pin 2))
+ (node (ref U18) (pin 39))
+ (node (ref U8) (pin 22))
+ (node (ref U8) (pin 42))
+ (node (ref U8) (pin 2))
+ (node (ref R45) (pin 2))
+ (node (ref P3) (pin 2))
+ (node (ref U11) (pin 90))
+ (node (ref U18) (pin 1))
+ (node (ref R47) (pin 2))
+ (node (ref R46) (pin 2))
+ (node (ref C33) (pin 2))
+ (node (ref U12) (pin 72))
+ (node (ref U13) (pin 39))
+ (node (ref U12) (pin 39))
+ (node (ref U13) (pin 1))
+ (node (ref U8) (pin 41))
+ (node (ref R38) (pin 2))
+ (node (ref U12) (pin 1))
+ (node (ref U8) (pin 21))
+ (node (ref U8) (pin 61))
+ (node (ref J4) (pin 7))
+ (node (ref J4) (pin 6))
+ (node (ref J4) (pin 5))
+ (node (ref J4) (pin 4))
+ (node (ref C68) (pin 2))
+ (node (ref P8) (pin 2))
+ (node (ref U15) (pin 39))
+ (node (ref U15) (pin 72))
+ (node (ref U19) (pin 1))
+ (node (ref C67) (pin 2))
+ (node (ref U17) (pin 1))
+ (node (ref U18) (pin 72))
+ (node (ref U8) (pin 3))
+ (node (ref U17) (pin 72))
+ (node (ref U19) (pin 72))
+ (node (ref U19) (pin 39))
+ (node (ref P1) (pin 2))
+ (node (ref U17) (pin 39))
+ (node (ref C69) (pin 2))
+ (node (ref U2) (pin 20))
+ (node (ref BUS1) (pin B3))
+ (node (ref U9) (pin 32))
+ (node (ref U9) (pin 12))
+ (node (ref U9) (pin 31))
+ (node (ref C38) (pin 2))
+ (node (ref U16) (pin 72))
+ (node (ref U16) (pin 1))
+ (node (ref C32) (pin 1))
+ (node (ref C30) (pin 2))
+ (node (ref U22) (pin 1))
+ (node (ref C29) (pin 2))
+ (node (ref C28) (pin 2))
+ (node (ref U22) (pin 38))
+ (node (ref U22) (pin 77))
+ (node (ref U22) (pin 49))
+ (node (ref U22) (pin 88))
+ (node (ref U22) (pin 64))
+ (node (ref U11) (pin 130))
+ (node (ref U14) (pin 39))
+ (node (ref U11) (pin 30))
+ (node (ref R37) (pin 1))
+ (node (ref C51) (pin 2))
+ (node (ref C52) (pin 2))
+ (node (ref U14) (pin 1))
+ (node (ref U11) (pin 150))
+ (node (ref U11) (pin 110))
+ (node (ref U14) (pin 72))
+ (node (ref U11) (pin 50))
+ (node (ref U13) (pin 72))
+ (node (ref U11) (pin 70))
+ (node (ref U8) (pin 63))
+ (node (ref R44) (pin 1))
+ (node (ref U15) (pin 1))
+ (node (ref U8) (pin 23))
+ (node (ref U16) (pin 39))
+ (node (ref R42) (pin 1))
+ (node (ref C37) (pin 1))
+ (node (ref R43) (pin 1))
+ (node (ref U8) (pin 67))
+ (node (ref R15) (pin 1))
+ (node (ref U11) (pin 10))
+ (node (ref W5) (pin 1))
+ (node (ref W4) (pin 1))
+ (node (ref C22) (pin 2))
+ (node (ref C21) (pin 2))
+ (node (ref C15) (pin 2))
+ (node (ref C49) (pin 2))
+ (node (ref C50) (pin 2))
+ (node (ref C17) (pin 2))
+ (node (ref C18) (pin 2))
+ (node (ref C19) (pin 2))
+ (node (ref C20) (pin 2))
+ (node (ref C26) (pin 2))
+ (node (ref C13) (pin 2))
+ (node (ref C14) (pin 2))
+ (node (ref C11) (pin 2))
+ (node (ref C10) (pin 2))
+ (node (ref C62) (pin 2))
+ (node (ref C9) (pin 2))
+ (node (ref C12) (pin 2))
+ (node (ref C16) (pin 2))
+ (node (ref BUS1) (pin B15))
+ (node (ref BUS1) (pin A35))
+ (node (ref W2) (pin 1))
+ (node (ref U10) (pin 134))
+ (node (ref U10) (pin 153))
+ (node (ref U10) (pin 143))
+ (node (ref U10) (pin 103))
+ (node (ref U10) (pin 124))
+ (node (ref U10) (pin 138))
+ (node (ref U10) (pin 128))
+ (node (ref U10) (pin 118))
+ (node (ref U10) (pin 157))
+ (node (ref U10) (pin 155))
+ (node (ref U10) (pin 136))
+ (node (ref U10) (pin 126))
+ (node (ref U10) (pin 116))
+ (node (ref U10) (pin 147))
+ (node (ref U10) (pin 145))
+ (node (ref U24) (pin 61))
+ (node (ref U10) (pin 98))
+ (node (ref U24) (pin 91))
+ (node (ref U10) (pin 88))
+ (node (ref U10) (pin 151))
+ (node (ref U10) (pin 111))
+ (node (ref U10) (pin 130))
+ (node (ref U10) (pin 89))
+ (node (ref C7) (pin 2))
+ (node (ref U9) (pin 13))
+ (node (ref BUS1) (pin B17))
+ (node (ref BUS1) (pin A37))
+ (node (ref BUS1) (pin A56))
+ (node (ref BUS1) (pin B46))
+ (node (ref U10) (pin 44))
+ (node (ref U24) (pin 51))
+ (node (ref U10) (pin 66))
+ (node (ref U10) (pin 56))
+ (node (ref U10) (pin 16))
+ (node (ref U10) (pin 75))
+ (node (ref U24) (pin 131))
+ (node (ref C6) (pin 2))
+ (node (ref BUS1) (pin B57))
+ (node (ref BUS1) (pin A24))
+ (node (ref U10) (pin 90))
+ (node (ref U10) (pin 30))
+ (node (ref U10) (pin 7))
+ (node (ref U10) (pin 5))
+ (node (ref U10) (pin 3))
+ (node (ref C47) (pin 2))
+ (node (ref D1) (pin 1))
+ (node (ref R14) (pin 2))
+ (node (ref C2) (pin 2))
+ (node (ref U10) (pin 139))
+ (node (ref C56) (pin 2))
+ (node (ref C65) (pin 1))
+ (node (ref C57) (pin 2))
+ (node (ref C63) (pin 2))
+ (node (ref U7) (pin 3))
+ (node (ref U24) (pin 141))
+ (node (ref U24) (pin 151))
+ (node (ref U24) (pin 122))
+ (node (ref C66) (pin 1))
+ (node (ref U24) (pin 101))
+ (node (ref BUS1) (pin B34))
+ (node (ref U23) (pin 80))
+ (node (ref W1) (pin 1))
+ (node (ref U24) (pin 19))
+ (node (ref U24) (pin 29))
+ (node (ref U24) (pin 39))
+ (node (ref U24) (pin 79))
+ (node (ref W3) (pin 1))
+ (node (ref D3) (pin 1))
+ (node (ref U24) (pin 110))
+ (node (ref BUS1) (pin A18))
+ (node (ref U1) (pin 3))
+ (node (ref U1) (pin 1))
+ (node (ref U1) (pin 2))
+ (node (ref C73) (pin 2))
+ (node (ref L6) (pin 3))
+ (node (ref U23) (pin 67))
+ (node (ref C45) (pin 2))
+ (node (ref C43) (pin 2))
+ (node (ref CV1) (pin 2))
+ (node (ref C24) (pin 2))
+ (node (ref U6) (pin 10))
+ (node (ref R32) (pin 2))
+ (node (ref U5) (pin 10))
+ (node (ref U23) (pin 4))
+ (node (ref C48) (pin 1))
+ (node (ref C72) (pin 2))
+ (node (ref C71) (pin 2))
+ (node (ref C70) (pin 2))
+ (node (ref C55) (pin 2))
+ (node (ref BUS1) (pin B28))
+ (node (ref BUS1) (pin B38))
+ (node (ref POT1) (pin 3))
+ (node (ref U20) (pin 17))
+ (node (ref C53) (pin 2))
+ (node (ref POT1) (pin 2))
+ (node (ref C64) (pin 2))
+ (node (ref C46) (pin 2))
+ (node (ref C54) (pin 2))
+ (node (ref R34) (pin 2))
+ (node (ref R33) (pin 2))
+ (node (ref R31) (pin 1))
+ (node (ref U20) (pin 10))
+ (node (ref C44) (pin 2))
+ (node (ref C25) (pin 2)))
+ (net (code 340) (name "Net-(BUS1-PadB1)")
+ (node (ref BUS1) (pin B1)))
+ (net (code 341) (name +12V)
+ (node (ref BUS1) (pin A2)))
+ (net (code 342) (name /ESVIDEO-RVB/REF+)
+ (node (ref U8) (pin 76))
+ (node (ref U8) (pin 66))
+ (node (ref U8) (pin 80))
+ (node (ref U8) (pin 78))
+ (node (ref U8) (pin 73))
+ (node (ref U8) (pin 82))
+ (node (ref U8) (pin 64))
+ (node (ref R37) (pin 2))
+ (node (ref U8) (pin 71))
+ (node (ref U8) (pin 65)))
+ (net (code 343) (name "Net-(U8-Pad62)")
+ (node (ref U8) (pin 72))
+ (node (ref U8) (pin 62)))
+ (net (code 344) (name "Net-(U8-Pad74)")
+ (node (ref U8) (pin 74)))
+ (net (code 345) (name "Net-(C39-Pad1)")
+ (node (ref C39) (pin 1))
+ (node (ref U8) (pin 83)))
+ (net (code 346) (name "Net-(C39-Pad2)")
+ (node (ref R24) (pin 2))
+ (node (ref C39) (pin 2)))
+ (net (code 347) (name "Net-(C36-Pad1)")
+ (node (ref U8) (pin 7))
+ (node (ref R15) (pin 2))
+ (node (ref C36) (pin 1)))
+ (net (code 348) (name "Net-(C36-Pad2)")
+ (node (ref R36) (pin 1))
+ (node (ref C37) (pin 2))
+ (node (ref C36) (pin 2)))
+ (net (code 349) (name "Net-(C41-Pad1)")
+ (node (ref U8) (pin 75))
+ (node (ref C41) (pin 1)))
+ (net (code 350) (name "Net-(C41-Pad2)")
+ (node (ref C41) (pin 2))
+ (node (ref R22) (pin 2)))
+ (net (code 351) (name "Net-(C40-Pad1)")
+ (node (ref U8) (pin 79))
+ (node (ref C40) (pin 1)))
+ (net (code 352) (name "Net-(C40-Pad2)")
+ (node (ref R23) (pin 2))
+ (node (ref C40) (pin 2)))
+ (net (code 353) (name "Net-(U8-Pad77)")
+ (node (ref U8) (pin 77)))
+ (net (code 354) (name "Net-(U8-Pad58)")
+ (node (ref U8) (pin 58))
+ (node (ref U8) (pin 68)))
+ (net (code 355) (name "Net-(U9-Pad27)")
+ (node (ref U9) (pin 27)))
+ (net (code 356) (name "Net-(U8-Pad60)")
+ (node (ref U8) (pin 70))
+ (node (ref U8) (pin 60)))
+ (net (code 357) (name "Net-(U8-Pad81)")
+ (node (ref U8) (pin 81)))
+ (net (code 358) (name "Net-(U8-Pad4)")
+ (node (ref U8) (pin 4)))
+ (net (code 359) (name "Net-(U8-Pad5)")
+ (node (ref U8) (pin 5)))
+ (net (code 360) (name "Net-(R38-Pad1)")
+ (node (ref R38) (pin 1))
+ (node (ref U8) (pin 69)))
+ (net (code 361) (name "Net-(R36-Pad2)")
+ (node (ref R36) (pin 2))
+ (node (ref U8) (pin 6)))
+ (net (code 362) (name /ESVIDEO-RVB/OE_RVB-)
+ (node (ref U9) (pin 29))
+ (node (ref U8) (pin 57)))
+ (net (code 363) (name "Net-(C32-Pad2)")
+ (node (ref U9) (pin 43))
+ (node (ref U9) (pin 44))
+ (node (ref C32) (pin 2)))
+ (net (code 364) (name "Net-(C35-Pad2)")
+ (node (ref U9) (pin 41))
+ (node (ref U9) (pin 42))
+ (node (ref C35) (pin 2)))
+ (net (code 365) (name "Net-(U9-Pad30)")
+ (node (ref U9) (pin 30)))
+ (net (code 366) (name /ESVIDEO-RVB/VAA)
+ (node (ref C35) (pin 1))
+ (node (ref U9) (pin 35))
+ (node (ref U9) (pin 2))
+ (node (ref U8) (pin 1))
+ (node (ref U9) (pin 34))
+ (node (ref C42) (pin 1))
+ (node (ref C33) (pin 1))
+ (node (ref U8) (pin 43))
+ (node (ref U9) (pin 36))
+ (node (ref U9) (pin 1))
+ (node (ref L5) (pin 2))
+ (node (ref U8) (pin 44))
+ (node (ref C51) (pin 1))
+ (node (ref C34) (pin 1))
+ (node (ref C52) (pin 1))
+ (node (ref U9) (pin 33))
+ (node (ref U8) (pin 84)))
+ (net (code 367) (name "Net-(U9-Pad5)")
+ (node (ref U9) (pin 5)))
+ (net (code 368) (name "Net-(U9-Pad6)")
+ (node (ref U9) (pin 6)))
+ (net (code 369) (name "Net-(C34-Pad2)")
+ (node (ref C42) (pin 2))
+ (node (ref U9) (pin 40))
+ (node (ref R8) (pin 1))
+ (node (ref C34) (pin 2)))
+ (net (code 370) (name /buspci.sch/PTBE-0)
+ (node (ref U24) (pin 158))
+ (node (ref U11) (pin 116))
+ (node (ref U23) (pin 20)))
+ (net (code 371) (name /ESVIDEO-RVB/DPC1)
+ (node (ref RR7) (pin 3))
+ (node (ref U24) (pin 22))
+ (node (ref U3) (pin 3))
+ (node (ref U8) (pin 15))
+ (node (ref U23) (pin 12))
+ (node (ref U10) (pin 93))
+ (node (ref U9) (pin 15))
+ (node (ref U11) (pin 99)))
+ (net (code 372) (name /muxdata/DPC9)
+ (node (ref RR8) (pin 8))
+ (node (ref U4) (pin 3))
+ (node (ref U24) (pin 33))
+ (node (ref U11) (pin 84))
+ (node (ref U23) (pin 96)))
+ (net (code 373) (name /muxdata/DPC8)
+ (node (ref U11) (pin 86))
+ (node (ref U24) (pin 32))
+ (node (ref RR8) (pin 9))
+ (node (ref U4) (pin 2))
+ (node (ref U23) (pin 97)))
+ (net (code 374) (name /ESVIDEO-RVB/DPC7)
+ (node (ref U3) (pin 9))
+ (node (ref RR7) (pin 9))
+ (node (ref U10) (pin 100))
+ (node (ref U8) (pin 9))
+ (node (ref U9) (pin 21))
+ (node (ref U24) (pin 28))
+ (node (ref U11) (pin 88))
+ (node (ref U23) (pin 5)))
+ (net (code 375) (name /ESVIDEO-RVB/DPC6)
+ (node (ref RR7) (pin 8))
+ (node (ref U23) (pin 6))
+ (node (ref U8) (pin 10))
+ (node (ref U24) (pin 27))
+ (node (ref U11) (pin 92))
+ (node (ref U9) (pin 20))
+ (node (ref U3) (pin 8))
+ (node (ref U10) (pin 99)))
+ (net (code 376) (name /ESVIDEO-RVB/DPC5)
+ (node (ref U23) (pin 8))
+ (node (ref U3) (pin 7))
+ (node (ref U9) (pin 19))
+ (node (ref U11) (pin 94))
+ (node (ref U24) (pin 26))
+ (node (ref RR7) (pin 7))
+ (node (ref U10) (pin 97))
+ (node (ref U8) (pin 11)))
+ (net (code 377) (name /ESVIDEO-RVB/DPC4)
+ (node (ref U11) (pin 95))
+ (node (ref U23) (pin 9))
+ (node (ref U9) (pin 18))
+ (node (ref RR7) (pin 6))
+ (node (ref U3) (pin 6))
+ (node (ref U24) (pin 25))
+ (node (ref U10) (pin 96))
+ (node (ref U8) (pin 12)))
+ (net (code 378) (name /ESVIDEO-RVB/DPC3)
+ (node (ref U9) (pin 17))
+ (node (ref U24) (pin 24))
+ (node (ref U8) (pin 13))
+ (node (ref U11) (pin 96))
+ (node (ref U23) (pin 7))
+ (node (ref U10) (pin 95))
+ (node (ref U3) (pin 5))
+ (node (ref RR7) (pin 5)))
+ (net (code 379) (name /ESVIDEO-RVB/DPC2)
+ (node (ref U3) (pin 4))
+ (node (ref U23) (pin 11))
+ (node (ref U9) (pin 16))
+ (node (ref U11) (pin 98))
+ (node (ref U10) (pin 94))
+ (node (ref U8) (pin 14))
+ (node (ref RR7) (pin 4))
+ (node (ref U24) (pin 23)))
+ (net (code 380) (name /muxdata/DPC10)
+ (node (ref U11) (pin 83))
+ (node (ref RR8) (pin 7))
+ (node (ref U24) (pin 34))
+ (node (ref U4) (pin 4))
+ (node (ref U23) (pin 95)))
+ (net (code 381) (name /ESVIDEO-RVB/DPC0)
+ (node (ref U3) (pin 2))
+ (node (ref U10) (pin 92))
+ (node (ref RR7) (pin 2))
+ (node (ref U24) (pin 21))
+ (node (ref U23) (pin 13))
+ (node (ref U9) (pin 14))
+ (node (ref U11) (pin 100))
+ (node (ref U8) (pin 16)))
+ (net (code 382) (name /buspci.sch/PTBE-1)
+ (node (ref U24) (pin 157))
+ (node (ref U11) (pin 118))
+ (node (ref U23) (pin 21)))
+ (net (code 383) (name /muxdata/DPC11)
+ (node (ref U4) (pin 5))
+ (node (ref U11) (pin 82))
+ (node (ref U24) (pin 35))
+ (node (ref RR8) (pin 6))
+ (node (ref U23) (pin 94)))
+ (net (code 384) (name /muxdata/DPC12)
+ (node (ref U4) (pin 6))
+ (node (ref U11) (pin 80))
+ (node (ref U24) (pin 36))
+ (node (ref RR8) (pin 5))
+ (node (ref U23) (pin 93)))
+ (net (code 385) (name /muxdata/DPC13)
+ (node (ref U23) (pin 90))
+ (node (ref RR8) (pin 4))
+ (node (ref U11) (pin 79))
+ (node (ref U4) (pin 7))
+ (node (ref U24) (pin 45)))
+ (net (code 386) (name /muxdata/DPC14)
+ (node (ref U23) (pin 88))
+ (node (ref U4) (pin 8))
+ (node (ref U24) (pin 46))
+ (node (ref RR8) (pin 3))
+ (node (ref U11) (pin 78)))
+ (net (code 387) (name /muxdata/DPC15)
+ (node (ref RR8) (pin 2))
+ (node (ref U24) (pin 47))
+ (node (ref U11) (pin 76))
+ (node (ref U23) (pin 89))
+ (node (ref U4) (pin 9)))
+ (net (code 388) (name /buspci.sch/ADR6)
+ (node (ref U11) (pin 132))
+ (node (ref U24) (pin 143))
+ (node (ref U23) (pin 39)))
+ (net (code 389) (name /RAMS/TVRAM7)
+ (node (ref U13) (pin 26))
+ (node (ref U14) (pin 26))
+ (node (ref U15) (pin 26))
+ (node (ref U18) (pin 26))
+ (node (ref U3) (pin 11))
+ (node (ref U19) (pin 26))
+ (node (ref U17) (pin 26))
+ (node (ref U16) (pin 26))
+ (node (ref U22) (pin 32))
+ (node (ref U12) (pin 26)))
+ (net (code 390) (name /RAMS/TVRAM6)
+ (node (ref U12) (pin 24))
+ (node (ref U18) (pin 24))
+ (node (ref U13) (pin 24))
+ (node (ref U22) (pin 31))
+ (node (ref U16) (pin 24))
+ (node (ref U17) (pin 24))
+ (node (ref U15) (pin 24))
+ (node (ref U14) (pin 24))
+ (node (ref U19) (pin 24))
+ (node (ref U3) (pin 12)))
+ (net (code 391) (name /RAMS/TVRAM5)
+ (node (ref U22) (pin 29))
+ (node (ref U15) (pin 22))
+ (node (ref U16) (pin 22))
+ (node (ref U18) (pin 22))
+ (node (ref U17) (pin 22))
+ (node (ref U3) (pin 13))
+ (node (ref U19) (pin 22))
+ (node (ref U12) (pin 22))
+ (node (ref U14) (pin 22))
+ (node (ref U13) (pin 22)))
+ (net (code 392) (name /RAMS/TVRAM4)
+ (node (ref U22) (pin 28))
+ (node (ref U19) (pin 20))
+ (node (ref U17) (pin 20))
+ (node (ref U12) (pin 20))
+ (node (ref U3) (pin 14))
+ (node (ref U15) (pin 20))
+ (node (ref U14) (pin 20))
+ (node (ref U13) (pin 20))
+ (node (ref U18) (pin 20))
+ (node (ref U16) (pin 20)))
+ (net (code 393) (name /RAMS/TVRAM3)
+ (node (ref U14) (pin 8))
+ (node (ref U3) (pin 15))
+ (node (ref U13) (pin 8))
+ (node (ref U15) (pin 8))
+ (node (ref U16) (pin 8))
+ (node (ref U22) (pin 18))
+ (node (ref U12) (pin 8))
+ (node (ref U17) (pin 8))
+ (node (ref U18) (pin 8))
+ (node (ref U19) (pin 8)))
+ (net (code 394) (name /RAMS/TVRAM2)
+ (node (ref U18) (pin 6))
+ (node (ref U14) (pin 6))
+ (node (ref U16) (pin 6))
+ (node (ref U3) (pin 16))
+ (node (ref U17) (pin 6))
+ (node (ref U15) (pin 6))
+ (node (ref U22) (pin 20))
+ (node (ref U13) (pin 6))
+ (node (ref U12) (pin 6))
+ (node (ref U19) (pin 6)))
+ (net (code 395) (name /RAMS/TVRAM1)
+ (node (ref U19) (pin 4))
+ (node (ref U12) (pin 4))
+ (node (ref U14) (pin 4))
+ (node (ref U18) (pin 4))
+ (node (ref U3) (pin 17))
+ (node (ref U17) (pin 4))
+ (node (ref U13) (pin 4))
+ (node (ref U15) (pin 4))
+ (node (ref U16) (pin 4))
+ (node (ref U22) (pin 19)))
+ (net (code 396) (name /RAMS/TVRAM0)
+ (node (ref U16) (pin 2))
+ (node (ref U14) (pin 2))
+ (node (ref U12) (pin 2))
+ (node (ref U13) (pin 2))
+ (node (ref U22) (pin 17))
+ (node (ref U17) (pin 2))
+ (node (ref U15) (pin 2))
+ (node (ref U18) (pin 2))
+ (node (ref U3) (pin 18))
+ (node (ref U19) (pin 2)))
+ (net (code 397) (name /RAMS/TVRAM8)
+ (node (ref U15) (pin 49))
+ (node (ref U16) (pin 49))
+ (node (ref U22) (pin 33))
+ (node (ref U4) (pin 18))
+ (node (ref U13) (pin 49))
+ (node (ref U19) (pin 49))
+ (node (ref U17) (pin 49))
+ (node (ref U14) (pin 49))
+ (node (ref U18) (pin 49))
+ (node (ref U12) (pin 49)))
+ (net (code 398) (name /ESVIDEO-RVB/TVI1)
+ (node (ref U24) (pin 107))
+ (node (ref U9) (pin 11)))
+ (net (code 399) (name /ESVIDEO-RVB/TVI0)
+ (node (ref U9) (pin 10))
+ (node (ref U24) (pin 108)))
+ (net (code 400) (name /ESVIDEO-RVB/PCA2)
+ (node (ref U23) (pin 63))
+ (node (ref U9) (pin 26))
+ (node (ref U8) (pin 19)))
+ (net (code 401) (name /RAMS/TVRAM9)
+ (node (ref U17) (pin 51))
+ (node (ref U14) (pin 51))
+ (node (ref U13) (pin 51))
+ (node (ref U12) (pin 51))
+ (node (ref U18) (pin 51))
+ (node (ref U19) (pin 51))
+ (node (ref U16) (pin 51))
+ (node (ref U15) (pin 51))
+ (node (ref U22) (pin 34))
+ (node (ref U4) (pin 17)))
+ (net (code 402) (name /RAMS/TVRAM10)
+ (node (ref U18) (pin 53))
+ (node (ref U16) (pin 53))
+ (node (ref U13) (pin 53))
+ (node (ref U12) (pin 53))
+ (node (ref U14) (pin 53))
+ (node (ref U22) (pin 35))
+ (node (ref U4) (pin 16))
+ (node (ref U17) (pin 53))
+ (node (ref U15) (pin 53))
+ (node (ref U19) (pin 53)))
+ (net (code 403) (name /RAMS/TVRAM11)
+ (node (ref U13) (pin 55))
+ (node (ref U17) (pin 55))
+ (node (ref U16) (pin 55))
+ (node (ref U22) (pin 36))
+ (node (ref U14) (pin 55))
+ (node (ref U4) (pin 15))
+ (node (ref U18) (pin 55))
+ (node (ref U12) (pin 55))
+ (node (ref U19) (pin 55))
+ (node (ref U15) (pin 55)))
+ (net (code 404) (name /RAMS/TVRAM12)
+ (node (ref U4) (pin 14))
+ (node (ref U12) (pin 57))
+ (node (ref U19) (pin 57))
+ (node (ref U16) (pin 57))
+ (node (ref U18) (pin 57))
+ (node (ref U22) (pin 39))
+ (node (ref U15) (pin 57))
+ (node (ref U17) (pin 57))
+ (node (ref U14) (pin 57))
+ (node (ref U13) (pin 57)))
+ (net (code 405) (name /RAMS/TVRAM13)
+ (node (ref U4) (pin 13))
+ (node (ref U16) (pin 61))
+ (node (ref U15) (pin 61))
+ (node (ref U13) (pin 61))
+ (node (ref U17) (pin 61))
+ (node (ref U14) (pin 61))
+ (node (ref U12) (pin 61))
+ (node (ref U22) (pin 40))
+ (node (ref U18) (pin 61))
+ (node (ref U19) (pin 61)))
+ (net (code 406) (name /RAMS/TVRAM14)
+ (node (ref U15) (pin 63))
+ (node (ref U14) (pin 63))
+ (node (ref U18) (pin 63))
+ (node (ref U13) (pin 63))
+ (node (ref U19) (pin 63))
+ (node (ref U22) (pin 41))
+ (node (ref U17) (pin 63))
+ (node (ref U4) (pin 12))
+ (node (ref U12) (pin 63))
+ (node (ref U16) (pin 63)))
+ (net (code 407) (name /RAMS/TVRAM15)
+ (node (ref U15) (pin 65))
+ (node (ref U14) (pin 65))
+ (node (ref U18) (pin 65))
+ (node (ref U12) (pin 65))
+ (node (ref U19) (pin 65))
+ (node (ref U4) (pin 11))
+ (node (ref U16) (pin 65))
+ (node (ref U22) (pin 42))
+ (node (ref U17) (pin 65))
+ (node (ref U13) (pin 65)))
+ (net (code 408) (name /RAMS/TVRAM16)
+ (node (ref U19) (pin 3))
+ (node (ref U12) (pin 3))
+ (node (ref U18) (pin 3))
+ (node (ref U13) (pin 3))
+ (node (ref U22) (pin 43))
+ (node (ref U15) (pin 3))
+ (node (ref U16) (pin 3))
+ (node (ref U17) (pin 3))
+ (node (ref U5) (pin 18))
+ (node (ref U14) (pin 3)))
+ (net (code 409) (name /RAMS/TVRAM17)
+ (node (ref U15) (pin 5))
+ (node (ref U18) (pin 5))
+ (node (ref U19) (pin 5))
+ (node (ref U12) (pin 5))
+ (node (ref U14) (pin 5))
+ (node (ref U22) (pin 44))
+ (node (ref U16) (pin 5))
+ (node (ref U5) (pin 17))
+ (node (ref U17) (pin 5))
+ (node (ref U13) (pin 5)))
+ (net (code 410) (name /RAMS/TVRAM18)
+ (node (ref U17) (pin 7))
+ (node (ref U13) (pin 7))
+ (node (ref U19) (pin 7))
+ (node (ref U12) (pin 7))
+ (node (ref U16) (pin 7))
+ (node (ref U22) (pin 45))
+ (node (ref U18) (pin 7))
+ (node (ref U14) (pin 7))
+ (node (ref U5) (pin 16))
+ (node (ref U15) (pin 7)))
+ (net (code 411) (name /RAMS/TVRAM19)
+ (node (ref U22) (pin 46))
+ (node (ref U5) (pin 15))
+ (node (ref U16) (pin 9))
+ (node (ref U17) (pin 9))
+ (node (ref U19) (pin 9))
+ (node (ref U15) (pin 9))
+ (node (ref U14) (pin 9))
+ (node (ref U13) (pin 9))
+ (node (ref U12) (pin 9))
+ (node (ref U18) (pin 9)))
+ (net (code 412) (name /RAMS/TVRAM20)
+ (node (ref U14) (pin 21))
+ (node (ref U13) (pin 21))
+ (node (ref U22) (pin 47))
+ (node (ref U5) (pin 14))
+ (node (ref U12) (pin 21))
+ (node (ref U16) (pin 21))
+ (node (ref U17) (pin 21))
+ (node (ref U18) (pin 21))
+ (node (ref U19) (pin 21))
+ (node (ref U15) (pin 21)))
+ (net (code 413) (name /RAMS/TVRAM21)
+ (node (ref U22) (pin 48))
+ (node (ref U14) (pin 23))
+ (node (ref U17) (pin 23))
+ (node (ref U13) (pin 23))
+ (node (ref U19) (pin 23))
+ (node (ref U15) (pin 23))
+ (node (ref U5) (pin 13))
+ (node (ref U18) (pin 23))
+ (node (ref U16) (pin 23))
+ (node (ref U12) (pin 23)))
+ (net (code 414) (name /RAMS/TVRAM22)
+ (node (ref U13) (pin 25))
+ (node (ref U17) (pin 25))
+ (node (ref U5) (pin 12))
+ (node (ref U19) (pin 25))
+ (node (ref U12) (pin 25))
+ (node (ref U18) (pin 25))
+ (node (ref U14) (pin 25))
+ (node (ref U16) (pin 25))
+ (node (ref U15) (pin 25))
+ (node (ref U22) (pin 53)))
+ (net (code 415) (name /RAMS/TVRAM23)
+ (node (ref U12) (pin 27))
+ (node (ref U19) (pin 27))
+ (node (ref U13) (pin 27))
+ (node (ref U17) (pin 27))
+ (node (ref U15) (pin 27))
+ (node (ref U5) (pin 11))
+ (node (ref U18) (pin 27))
+ (node (ref U16) (pin 27))
+ (node (ref U14) (pin 27))
+ (node (ref U22) (pin 54)))
+ (net (code 416) (name /buspci.sch/PTBE-2)
+ (node (ref U11) (pin 119))
+ (node (ref U23) (pin 22))
+ (node (ref U24) (pin 156)))
+ (net (code 417) (name /RAMS/MXA0)
+ (node (ref U24) (pin 128))
+ (node (ref U16) (pin 12))
+ (node (ref U15) (pin 12))
+ (node (ref U17) (pin 12))
+ (node (ref U19) (pin 12))
+ (node (ref U13) (pin 12))
+ (node (ref U14) (pin 12))
+ (node (ref U18) (pin 12))
+ (node (ref U12) (pin 12)))
+ (net (code 418) (name /RAMS/MXA8)
+ (node (ref U12) (pin 31))
+ (node (ref U17) (pin 31))
+ (node (ref U13) (pin 31))
+ (node (ref U19) (pin 31))
+ (node (ref U15) (pin 31))
+ (node (ref U18) (pin 31))
+ (node (ref U16) (pin 31))
+ (node (ref U14) (pin 31))
+ (node (ref U24) (pin 114)))
+ (net (code 419) (name /RAMS/MXA7)
+ (node (ref U16) (pin 28))
+ (node (ref U24) (pin 115))
+ (node (ref U17) (pin 28))
+ (node (ref U19) (pin 28))
+ (node (ref U14) (pin 28))
+ (node (ref U12) (pin 28))
+ (node (ref U13) (pin 28))
+ (node (ref U18) (pin 28))
+ (node (ref U15) (pin 28)))
+ (net (code 420) (name /RAMS/MXA6)
+ (node (ref U12) (pin 18))
+ (node (ref U18) (pin 18))
+ (node (ref U24) (pin 116))
+ (node (ref U15) (pin 18))
+ (node (ref U14) (pin 18))
+ (node (ref U19) (pin 18))
+ (node (ref U17) (pin 18))
+ (node (ref U16) (pin 18))
+ (node (ref U13) (pin 18)))
+ (net (code 421) (name /RAMS/MXA5)
+ (node (ref U17) (pin 17))
+ (node (ref U13) (pin 17))
+ (node (ref U18) (pin 17))
+ (node (ref U14) (pin 17))
+ (node (ref U24) (pin 123))
+ (node (ref U16) (pin 17))
+ (node (ref U15) (pin 17))
+ (node (ref U12) (pin 17))
+ (node (ref U19) (pin 17)))
+ (net (code 422) (name /RAMS/MXA4)
+ (node (ref U15) (pin 16))
+ (node (ref U16) (pin 16))
+ (node (ref U17) (pin 16))
+ (node (ref U24) (pin 124))
+ (node (ref U13) (pin 16))
+ (node (ref U12) (pin 16))
+ (node (ref U19) (pin 16))
+ (node (ref U18) (pin 16))
+ (node (ref U14) (pin 16)))
+ (net (code 423) (name /RAMS/MXA3)
+ (node (ref U24) (pin 125))
+ (node (ref U14) (pin 15))
+ (node (ref U12) (pin 15))
+ (node (ref U19) (pin 15))
+ (node (ref U15) (pin 15))
+ (node (ref U16) (pin 15))
+ (node (ref U18) (pin 15))
+ (node (ref U17) (pin 15))
+ (node (ref U13) (pin 15)))
+ (net (code 424) (name /RAMS/MXA2)
+ (node (ref U12) (pin 14))
+ (node (ref U19) (pin 14))
+ (node (ref U17) (pin 14))
+ (node (ref U18) (pin 14))
+ (node (ref U15) (pin 14))
+ (node (ref U16) (pin 14))
+ (node (ref U24) (pin 126))
+ (node (ref U13) (pin 14))
+ (node (ref U14) (pin 14)))
+ (net (code 425) (name /RAMS/MXA1)
+ (node (ref U24) (pin 127))
+ (node (ref U17) (pin 13))
+ (node (ref U18) (pin 13))
+ (node (ref U12) (pin 13))
+ (node (ref U15) (pin 13))
+ (node (ref U19) (pin 13))
+ (node (ref U16) (pin 13))
+ (node (ref U13) (pin 13))
+ (node (ref U14) (pin 13)))
+ (net (code 426) (name /RAMS/MXA9)
+ (node (ref U16) (pin 32))
+ (node (ref U19) (pin 32))
+ (node (ref U15) (pin 32))
+ (node (ref U18) (pin 32))
+ (node (ref U14) (pin 32))
+ (node (ref U12) (pin 32))
+ (node (ref U17) (pin 32))
+ (node (ref U13) (pin 32))
+ (node (ref U24) (pin 113)))
+ (net (code 427) (name /RAMS/MXA10)
+ (node (ref U18) (pin 19))
+ (node (ref U17) (pin 19))
+ (node (ref U15) (pin 19))
+ (node (ref U19) (pin 19))
+ (node (ref U13) (pin 19))
+ (node (ref U24) (pin 109))
+ (node (ref U16) (pin 19))
+ (node (ref U14) (pin 19))
+ (node (ref U12) (pin 19)))
+ (net (code 428) (name /RAMS/TVRAM24)
+ (node (ref U22) (pin 55))
+ (node (ref U13) (pin 50))
+ (node (ref U16) (pin 50))
+ (node (ref U6) (pin 18))
+ (node (ref U15) (pin 50))
+ (node (ref U14) (pin 50))
+ (node (ref U12) (pin 50))
+ (node (ref U18) (pin 50))
+ (node (ref U17) (pin 50))
+ (node (ref U19) (pin 50)))
+ (net (code 429) (name /ESVIDEO-RVB/TVR7)
+ (node (ref U8) (pin 49))
+ (node (ref U10) (pin 58))
+ (node (ref U9) (pin 52))
+ (node (ref U22) (pin 91)))
+ (net (code 430) (name /ESVIDEO-RVB/TVR6)
+ (node (ref U8) (pin 50))
+ (node (ref U10) (pin 59))
+ (node (ref U22) (pin 90))
+ (node (ref U9) (pin 51)))
+ (net (code 431) (name /ESVIDEO-RVB/TVR5)
+ (node (ref U9) (pin 50))
+ (node (ref U22) (pin 87))
+ (node (ref U10) (pin 60))
+ (node (ref U8) (pin 51)))
+ (net (code 432) (name /ESVIDEO-RVB/TVR4)
+ (node (ref U10) (pin 61))
+ (node (ref U22) (pin 86))
+ (node (ref U9) (pin 49))
+ (node (ref U8) (pin 52)))
+ (net (code 433) (name /ESVIDEO-RVB/TVR3)
+ (node (ref U22) (pin 85))
+ (node (ref U8) (pin 53))
+ (node (ref U9) (pin 48))
+ (node (ref U10) (pin 62)))
+ (net (code 434) (name /ESVIDEO-RVB/TVR2)
+ (node (ref U10) (pin 63))
+ (node (ref U8) (pin 54))
+ (node (ref U9) (pin 47))
+ (node (ref U22) (pin 84)))
+ (net (code 435) (name /muxdata/DPC16)
+ (node (ref RR4) (pin 7))
+ (node (ref U11) (pin 157))
+ (node (ref U5) (pin 2)))
+ (net (code 436) (name /muxdata/DPC17)
+ (node (ref U11) (pin 145))
+ (node (ref RR4) (pin 9))
+ (node (ref U5) (pin 3)))
+ (net (code 437) (name /muxdata/DPC18)
+ (node (ref RR6) (pin 6))
+ (node (ref U11) (pin 133))
+ (node (ref U5) (pin 4)))
+ (net (code 438) (name /muxdata/DPC19)
+ (node (ref U5) (pin 5))
+ (node (ref U11) (pin 125))
+ (node (ref RR6) (pin 8)))
+ (net (code 439) (name /muxdata/DPC20)
+ (node (ref RR6) (pin 3))
+ (node (ref U11) (pin 117))
+ (node (ref U5) (pin 6)))
+ (net (code 440) (name /muxdata/DPC21)
+ (node (ref U11) (pin 105))
+ (node (ref RR5) (pin 6))
+ (node (ref U5) (pin 7)))
+ (net (code 441) (name /muxdata/DPC22)
+ (node (ref U5) (pin 8))
+ (node (ref U11) (pin 93))
+ (node (ref RR4) (pin 3)))
+ (net (code 442) (name /muxdata/DPC23)
+ (node (ref RR4) (pin 5))
+ (node (ref U5) (pin 9))
+ (node (ref U11) (pin 85)))
+ (net (code 443) (name /muxdata/DPC24)
+ (node (ref U11) (pin 77))
+ (node (ref U6) (pin 2))
+ (node (ref RR3) (pin 3)))
+ (net (code 444) (name /muxdata/DPC25)
+ (node (ref RR3) (pin 9))
+ (node (ref U11) (pin 65))
+ (node (ref U6) (pin 3)))
+ (net (code 445) (name /muxdata/DPC26)
+ (node (ref U11) (pin 53))
+ (node (ref RR2) (pin 8))
+ (node (ref U6) (pin 4)))
+ (net (code 446) (name /buspci.sch/ADR2)
+ (node (ref U24) (pin 137))
+ (node (ref U23) (pin 48))
+ (node (ref U11) (pin 68)))
+ (net (code 447) (name /buspci.sch/ADR3)
+ (node (ref U11) (pin 67))
+ (node (ref U24) (pin 138))
+ (node (ref U23) (pin 44)))
+ (net (code 448) (name /buspci.sch/PTBE-3)
+ (node (ref U11) (pin 120))
+ (node (ref U23) (pin 23))
+ (node (ref U24) (pin 155)))
+ (net (code 449) (name /muxdata/DPC27)
+ (node (ref RR2) (pin 5))
+ (node (ref U11) (pin 45))
+ (node (ref U6) (pin 5)))
+ (net (code 450) (name /buspci.sch/ADR4)
+ (node (ref U23) (pin 43))
+ (node (ref U11) (pin 66))
+ (node (ref U24) (pin 139)))
+ (net (code 451) (name /buspci.sch/ADR5)
+ (node (ref U11) (pin 64))
+ (node (ref U24) (pin 140))
+ (node (ref U23) (pin 42)))
+ (net (code 452) (name /ESVIDEO-RVB/TVR0)
+ (node (ref U8) (pin 56))
+ (node (ref U22) (pin 82))
+ (node (ref U9) (pin 45))
+ (node (ref U10) (pin 65)))
+ (net (code 453) (name /ESVIDEO-RVB/TVR1)
+ (node (ref U8) (pin 55))
+ (node (ref U22) (pin 83))
+ (node (ref U10) (pin 64))
+ (node (ref U9) (pin 46)))
+ (net (code 454) (name /ESVIDEO-RVB/TVB5)
+ (node (ref U8) (pin 27))
+ (node (ref U10) (pin 50))
+ (node (ref U22) (pin 97))
+ (node (ref U9) (pin 66)))
+ (net (code 455) (name /ESVIDEO-RVB/TVB7)
+ (node (ref U9) (pin 68))
+ (node (ref U10) (pin 48))
+ (node (ref U22) (pin 99))
+ (node (ref U8) (pin 25)))
+ (net (code 456) (name /ESVIDEO-RVB/TVB6)
+ (node (ref U9) (pin 67))
+ (node (ref U8) (pin 26))
+ (node (ref U22) (pin 98))
+ (node (ref U10) (pin 49)))
+ (net (code 457) (name /ESVIDEO-RVB/TVB4)
+ (node (ref U10) (pin 51))
+ (node (ref U8) (pin 28))
+ (node (ref U22) (pin 96))
+ (node (ref U9) (pin 65)))
+ (net (code 458) (name /ESVIDEO-RVB/TVB3)
+ (node (ref U10) (pin 52))
+ (node (ref U9) (pin 64))
+ (node (ref U8) (pin 29))
+ (node (ref U22) (pin 95)))
+ (net (code 459) (name /ESVIDEO-RVB/TVB2)
+ (node (ref U8) (pin 30))
+ (node (ref U9) (pin 63))
+ (node (ref U22) (pin 94))
+ (node (ref U10) (pin 53)))
+ (net (code 460) (name /ESVIDEO-RVB/TVB1)
+ (node (ref U9) (pin 62))
+ (node (ref U8) (pin 31))
+ (node (ref U22) (pin 93))
+ (node (ref U10) (pin 54)))
+ (net (code 461) (name /ESVIDEO-RVB/TVB0)
+ (node (ref U10) (pin 55))
+ (node (ref U8) (pin 32))
+ (node (ref U22) (pin 92))
+ (node (ref U9) (pin 61)))
+ (net (code 462) (name /ESVIDEO-RVB/TVG7)
+ (node (ref U9) (pin 60))
+ (node (ref U8) (pin 33))
+ (node (ref U10) (pin 67))
+ (node (ref U22) (pin 81)))
+ (net (code 463) (name /ESVIDEO-RVB/TVG6)
+ (node (ref U10) (pin 68))
+ (node (ref U9) (pin 59))
+ (node (ref U8) (pin 34))
+ (node (ref U22) (pin 80)))
+ (net (code 464) (name /ESVIDEO-RVB/TVG5)
+ (node (ref U9) (pin 58))
+ (node (ref U10) (pin 69))
+ (node (ref U8) (pin 35))
+ (node (ref U22) (pin 78)))
+ (net (code 465) (name /muxdata/DPC31)
+ (node (ref RR1) (pin 3))
+ (node (ref U6) (pin 9))
+ (node (ref U11) (pin 5)))
+ (net (code 466) (name /muxdata/DPC30)
+ (node (ref U6) (pin 8))
+ (node (ref U11) (pin 13))
+ (node (ref RR1) (pin 5)))
+ (net (code 467) (name /muxdata/DPC29)
+ (node (ref U11) (pin 25))
+ (node (ref RR1) (pin 8))
+ (node (ref U6) (pin 7)))
+ (net (code 468) (name /muxdata/DPC28)
+ (node (ref U11) (pin 37))
+ (node (ref U6) (pin 6))
+ (node (ref RR2) (pin 3)))
+ (net (code 469) (name /ESVIDEO-RVB/TVG0)
+ (node (ref U22) (pin 67))
+ (node (ref U8) (pin 48))
+ (node (ref U10) (pin 74))
+ (node (ref U9) (pin 53)))
+ (net (code 470) (name /ESVIDEO-RVB/TVG1)
+ (node (ref U10) (pin 73))
+ (node (ref U22) (pin 68))
+ (node (ref U8) (pin 47))
+ (node (ref U9) (pin 54)))
+ (net (code 471) (name /ESVIDEO-RVB/TVG2)
+ (node (ref U9) (pin 55))
+ (node (ref U22) (pin 69))
+ (node (ref U10) (pin 72))
+ (node (ref U8) (pin 46)))
+ (net (code 472) (name /ESVIDEO-RVB/TVG3)
+ (node (ref U10) (pin 71))
+ (node (ref U9) (pin 56))
+ (node (ref U8) (pin 45))
+ (node (ref U22) (pin 70)))
+ (net (code 473) (name /ESVIDEO-RVB/TVG4)
+ (node (ref U9) (pin 57))
+ (node (ref U8) (pin 36))
+ (node (ref U10) (pin 70))
+ (node (ref U22) (pin 71)))
+ (net (code 474) (name /RAMS/TVRAM31)
+ (node (ref U22) (pin 62))
+ (node (ref U16) (pin 64))
+ (node (ref U14) (pin 64))
+ (node (ref U6) (pin 11))
+ (node (ref U12) (pin 64))
+ (node (ref U17) (pin 64))
+ (node (ref U18) (pin 64))
+ (node (ref U15) (pin 64))
+ (node (ref U19) (pin 64))
+ (node (ref U13) (pin 64)))
+ (net (code 475) (name /RAMS/TVRAM30)
+ (node (ref U12) (pin 62))
+ (node (ref U14) (pin 62))
+ (node (ref U13) (pin 62))
+ (node (ref U16) (pin 62))
+ (node (ref U6) (pin 12))
+ (node (ref U17) (pin 62))
+ (node (ref U15) (pin 62))
+ (node (ref U18) (pin 62))
+ (node (ref U19) (pin 62))
+ (node (ref U22) (pin 61)))
+ (net (code 476) (name /RAMS/TVRAM29)
+ (node (ref U17) (pin 60))
+ (node (ref U19) (pin 60))
+ (node (ref U13) (pin 60))
+ (node (ref U22) (pin 60))
+ (node (ref U18) (pin 60))
+ (node (ref U16) (pin 60))
+ (node (ref U15) (pin 60))
+ (node (ref U6) (pin 13))
+ (node (ref U12) (pin 60))
+ (node (ref U14) (pin 60)))
+ (net (code 477) (name /RAMS/TVRAM28)
+ (node (ref U6) (pin 14))
+ (node (ref U16) (pin 58))
+ (node (ref U12) (pin 58))
+ (node (ref U14) (pin 58))
+ (node (ref U19) (pin 58))
+ (node (ref U15) (pin 58))
+ (node (ref U17) (pin 58))
+ (node (ref U13) (pin 58))
+ (node (ref U18) (pin 58))
+ (node (ref U22) (pin 59)))
+ (net (code 478) (name /RAMS/TVRAM27)
+ (node (ref U22) (pin 58))
+ (node (ref U18) (pin 56))
+ (node (ref U17) (pin 56))
+ (node (ref U15) (pin 56))
+ (node (ref U12) (pin 56))
+ (node (ref U19) (pin 56))
+ (node (ref U14) (pin 56))
+ (node (ref U16) (pin 56))
+ (node (ref U13) (pin 56))
+ (node (ref U6) (pin 15)))
+ (net (code 479) (name /RAMS/TVRAM26)
+ (node (ref U19) (pin 54))
+ (node (ref U22) (pin 57))
+ (node (ref U13) (pin 54))
+ (node (ref U12) (pin 54))
+ (node (ref U6) (pin 16))
+ (node (ref U16) (pin 54))
+ (node (ref U14) (pin 54))
+ (node (ref U17) (pin 54))
+ (node (ref U18) (pin 54))
+ (node (ref U15) (pin 54)))
+ (net (code 480) (name /RAMS/TVRAM25)
+ (node (ref U14) (pin 52))
+ (node (ref U12) (pin 52))
+ (node (ref U13) (pin 52))
+ (node (ref U16) (pin 52))
+ (node (ref U18) (pin 52))
+ (node (ref U19) (pin 52))
+ (node (ref U17) (pin 52))
+ (node (ref U22) (pin 56))
+ (node (ref U15) (pin 52))
+ (node (ref U6) (pin 17)))
+ (net (code 481) (name /buspci.sch/BE-0)
+ (node (ref U24) (pin 144))
+ (node (ref U23) (pin 38))
+ (node (ref U11) (pin 87)))
+ (net (code 482) (name /buspci.sch/BE-1)
+ (node (ref U11) (pin 63))
+ (node (ref U24) (pin 145))
+ (node (ref U23) (pin 37)))
+ (net (code 483) (name /buspci.sch/BE-2)
+ (node (ref U24) (pin 146))
+ (node (ref U11) (pin 62))
+ (node (ref U23) (pin 36)))
+ (net (code 484) (name /buspci.sch/BE-3)
+ (node (ref U23) (pin 35))
+ (node (ref U11) (pin 60))
+ (node (ref U24) (pin 147)))
+ (net (code 485) (name /ESVIDEO-RVB/PCA1)
+ (node (ref U23) (pin 64))
+ (node (ref U8) (pin 18))
+ (node (ref U10) (pin 85))
+ (node (ref U9) (pin 25)))
+ (net (code 486) (name /ESVIDEO-RVB/PCA0)
+ (node (ref U9) (pin 24))
+ (node (ref U23) (pin 65))
+ (node (ref U10) (pin 84))
+ (node (ref U8) (pin 17))))) \ No newline at end of file
diff --git a/demos/video/video.pro b/demos/video/video.pro
new file mode 100644
index 0000000..2ffe167
--- /dev/null
+++ b/demos/video/video.pro
@@ -0,0 +1,38 @@
+update=18/05/2015 09:11:22
+version=1
+last_client=kicad
+[general]
+version=1
+RootSch=video.sch
+BoardNm=video.brd
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=video.net
+UseCmpFile=0
+PadDrill=3.048
+PadDrillOvalY=3.048
+PadSizeH=3.81
+PadSizeV=5.08
+PcbTextSizeV=1.524
+PcbTextSizeH=1.524
+PcbTextThickness=0.2032
+ModuleTextSizeV=1.27
+ModuleTextSizeH=1.27
+ModuleTextSizeThickness=0.2032
+SolderMaskClearance=0.254
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.3048
+BoardOutlineThickness=0.2032
+ModuleOutlineThickness=0.3048
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=libs/video_schlib
+LibName2=power
diff --git a/demos/video/video.sch b/demos/video/video.sch
new file mode 100644
index 0000000..9f4d059
--- /dev/null
+++ b/demos/video/video.sch
@@ -0,0 +1,1014 @@
+EESchema Schematic File Version 2
+LIBS:video_schlib
+LIBS:power
+LIBS:video-cache
+EELAYER 25 0
+EELAYER END
+$Descr A3 16535 11693
+encoding utf-8
+Sheet 1 8
+Title "Video"
+Date "Sun 22 Mar 2015"
+Rev "2.0B"
+Comp "Kicad EDA"
+Comment1 "Main sheet"
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+ 10550 5800 11250 5800
+Text Label 10600 5800 0 60 ~ 0
+CSYNC-OUT
+Wire Wire Line
+ 10550 6050 11250 6050
+Text Label 10700 6050 0 60 ~ 0
+CLAMP
+Text Label 10700 5950 0 60 ~ 0
+BLANK-
+Wire Wire Line
+ 10550 5950 11250 5950
+Wire Wire Line
+ 10650 5650 11250 5650
+Text Label 10750 5650 0 60 ~ 0
+ACQ_ON
+Wire Wire Line
+ 3800 8300 4400 8300
+Text Label 3900 8300 0 60 ~ 0
+ACQ_ON
+Text Label 14250 4150 0 60 ~ 0
+C_OUT
+Text Label 14250 4350 0 60 ~ 0
+Y_OUT
+Wire Wire Line
+ 14900 4350 14200 4350
+Wire Wire Line
+ 14200 4150 14900 4150
+Connection ~ 14800 4250
+Connection ~ 14800 3950
+Wire Wire Line
+ 14900 3950 14800 3950
+Wire Wire Line
+ 14900 3750 14800 3750
+Wire Wire Line
+ 14800 3750 14800 4650
+Text Label 14800 2300 0 60 ~ 0
+Y_OUT
+Text Label 14800 1900 0 60 ~ 0
+C_OUT
+Wire Wire Line
+ 1450 8400 2000 8400
+Wire Wire Line
+ 1450 8300 2000 8300
+Wire Wire Line
+ 1450 8500 2000 8500
+Text Label 1500 8400 0 60 ~ 0
+IRQ-
+Text Label 1500 8300 0 60 ~ 0
+X_IRQ
+Text Label 1500 8500 0 60 ~ 0
+IRQ_SRL
+Wire Wire Line
+ 3800 2150 4350 2150
+Wire Wire Line
+ 3800 2050 4350 2050
+Wire Wire Line
+ 3800 1950 4350 1950
+Text Label 3850 2150 0 60 ~ 0
+IRQ-
+Text Label 3850 2050 0 60 ~ 0
+X_IRQ
+Text Label 3850 1950 0 60 ~ 0
+IRQ_SRL
+Text Label 3900 9300 0 60 ~ 0
+PCA[0..2]
+Wire Bus Line
+ 3800 9300 4600 9300
+Text Label 6200 4450 0 60 ~ 0
+PCA[0..1]
+Wire Bus Line
+ 6100 4450 6900 4450
+Wire Bus Line
+ 3800 5900 4600 5900
+Text Label 3900 5900 0 60 ~ 0
+TVI[0..1]
+Wire Wire Line
+ 10450 5350 11250 5350
+Wire Wire Line
+ 10450 5450 11250 5450
+Text Label 10550 5350 0 60 ~ 0
+ACCES_RAM-
+Text Label 10550 5450 0 60 ~ 0
+WRITE_RAM
+Wire Wire Line
+ 3800 9100 4600 9100
+Wire Wire Line
+ 3800 9000 4600 9000
+Text Label 3900 9100 0 60 ~ 0
+ACCES_RAM-
+Text Label 3900 9000 0 60 ~ 0
+WRITE_RAM
+Text Label 10550 5200 0 60 ~ 0
+DQ[0..31]
+Wire Bus Line
+ 10450 5200 11250 5200
+Wire Bus Line
+ 8800 6600 9750 6600
+Text Label 8900 6600 0 60 ~ 0
+TVRAM[0..31]
+Wire Wire Line
+ 10750 4900 11250 4900
+Wire Wire Line
+ 10750 5000 11250 5000
+Text Label 10800 5000 0 60 ~ 0
+CLKCAD
+Text Label 10800 4900 0 60 ~ 0
+CLKCDA
+Wire Wire Line
+ 10650 4600 11250 4600
+Wire Wire Line
+ 10650 4500 11250 4500
+Wire Wire Line
+ 10650 4400 11250 4400
+Wire Wire Line
+ 10650 4300 11250 4300
+Text Label 10750 4600 0 60 ~ 0
+X_PROG-
+Text Label 10750 4500 0 60 ~ 0
+X_DONE
+Text Label 10750 4400 0 60 ~ 0
+X_CLK
+Text Label 10750 4300 0 60 ~ 0
+X_DATA
+Wire Wire Line
+ 3800 8800 4400 8800
+Wire Wire Line
+ 3800 8700 4400 8700
+Wire Wire Line
+ 3800 8600 4400 8600
+Wire Wire Line
+ 3800 8500 4400 8500
+Text Label 3900 8800 0 60 ~ 0
+X_PROG-
+Text Label 3900 8700 0 60 ~ 0
+X_DONE
+Text Label 3900 8600 0 60 ~ 0
+X_CLK
+Text Label 3900 8500 0 60 ~ 0
+X_DATA
+Wire Bus Line
+ 12900 4600 13850 4600
+Wire Bus Line
+ 12900 4500 13850 4500
+Wire Bus Line
+ 12900 4400 13850 4400
+Text Label 13000 4600 0 60 ~ 0
+TVB[0..7]
+Text Label 13000 4500 0 60 ~ 0
+TVG[0..7]
+Text Label 13000 4400 0 60 ~ 0
+TVR[0..7]
+$Sheet
+S 11250 4200 1650 1950
+U 4BF0367D
+F0 "muxdata" 60
+F1 "muxdata.sch" 60
+F2 "X_DIN" I L 11250 4300 60
+F3 "X_CLK" I L 11250 4400 60
+F4 "CLKCDA" I L 11250 4900 60
+F5 "CLKCAD" I L 11250 5000 60
+F6 "X_DONE" O L 11250 4500 60
+F7 "X_PROG-" I L 11250 4600 60
+F8 "TVB[0..7]" B R 12900 4600 60
+F9 "TVG[0..7]" B R 12900 4500 60
+F10 "TVR[0..7]" B R 12900 4400 60
+F11 "VRAM[0..31]" B R 12900 4900 60
+F12 "DPC[0..31]" B L 11250 5200 60
+F13 "ACCES_RAM-" I L 11250 5350 60
+F14 "DATA_WR" I L 11250 5450 60
+F15 "ACQ_ON" I L 11250 5650 60
+F16 "CSYNC-OUT" I L 11250 5800 60
+F17 "BLANK-" I L 11250 5950 60
+F18 "CLAMP" I L 11250 6050 60
+$EndSheet
+Wire Wire Line
+ 12600 2450 13300 2450
+Text Label 12650 2450 0 60 ~ 0
+CSYNC-OUT
+Text Label 12600 2100 0 60 ~ 0
+BLUE_OUT
+Text Label 12600 2000 0 60 ~ 0
+GREEN_OUT
+Text Label 12600 1900 0 60 ~ 0
+RED_OUT
+Wire Wire Line
+ 12550 2100 13300 2100
+Wire Wire Line
+ 12550 2000 13300 2000
+Wire Wire Line
+ 12550 1900 13300 1900
+Text Label 14200 4050 0 60 ~ 0
+BLUE_OUT
+Text Label 14200 3850 0 60 ~ 0
+GREEN_OUT
+Text Label 14200 3650 0 60 ~ 0
+RED_OUT
+Wire Wire Line
+ 14150 4050 14900 4050
+Wire Wire Line
+ 14150 3850 14900 3850
+Wire Wire Line
+ 14150 3650 14900 3650
+Text Label 8900 2950 0 60 ~ 0
+BLUE_OUT
+Text Label 8900 2850 0 60 ~ 0
+GREEN_OUT
+Text Label 8900 2750 0 60 ~ 0
+RED_OUT
+Wire Wire Line
+ 8850 2950 9500 2950
+Wire Wire Line
+ 8850 2850 9500 2850
+Wire Wire Line
+ 8850 2750 9500 2750
+$Comp
+L GND #GND01
+U 1 1 84DFBB6C
+P 14800 4650
+F 0 "#GND01" H 14800 4750 60 0001 C CNN
+F 1 "GND" H 14800 4550 60 0000 C CNN
+F 2 "" H 14800 4650 60 0001 C CNN
+F 3 "" H 14800 4650 60 0001 C CNN
+ 1 14800 4650
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB9 J4
+U 1 1 84DFBB8F
+P 15350 4050
+F 0 "J4" H 15350 4600 70 0000 C CNN
+F 1 "DB9FEM" H 15350 3500 70 0000 C CNN
+F 2 "Connect:DB9FC" H 15350 4050 60 0001 C CNN
+F 3 "" H 15350 4050 60 0001 C CNN
+ 1 15350 4050
+ 1 0 0 1
+$EndComp
+Connection ~ 14800 4450
+Wire Wire Line
+ 14800 4250 14900 4250
+Wire Wire Line
+ 14800 4450 14900 4450
+Wire Wire Line
+ 14650 2700 15200 2700
+Wire Wire Line
+ 15200 2300 14650 2300
+Wire Wire Line
+ 14650 1900 15200 1900
+$Comp
+L GND #GND02
+U 1 1 30705D34
+P 15350 2900
+F 0 "#GND02" H 15350 3000 60 0001 C CNN
+F 1 "GND" H 15350 2800 60 0000 C CNN
+F 2 "" H 15350 2900 60 0001 C CNN
+F 3 "" H 15350 2900 60 0001 C CNN
+ 1 15350 2900
+ 1 0 0 -1
+$EndComp
+$Comp
+L BNC P8
+U 1 1 30705D02
+P 15350 2700
+F 0 "P8" H 15360 2820 60 0000 C CNN
+F 1 "BNC" V 15460 2640 40 0000 C CNN
+F 2 "Discret:SUBCLICK" H 15350 2700 60 0001 C CNN
+F 3 "" H 15350 2700 60 0001 C CNN
+ 1 15350 2700
+ 1 0 0 -1
+$EndComp
+$Sheet
+S 13300 1750 1350 1100
+U 4BF0367F
+F0 "modul" 60
+F1 "modul.sch" 60
+F2 "BLUE" I L 13300 1900 60
+F3 "GREEN" I L 13300 2000 60
+F4 "RED" I L 13300 2100 60
+F5 "CVBSOUT" O R 14650 2700 60
+F6 "YOUT" O R 14650 2300 60
+F7 "COUT" O R 14650 1900 60
+F8 "CSYNC-OUT" I L 13300 2450 60
+$EndSheet
+Wire Wire Line
+ 9400 5000 8800 5000
+Wire Wire Line
+ 9400 5100 8800 5100
+Wire Wire Line
+ 9400 5200 8800 5200
+Text Label 8900 5000 0 60 ~ 0
+F_PALIN
+Text Label 8900 5100 0 60 ~ 0
+HD_PAL-
+Text Label 8900 5200 0 60 ~ 0
+VD_PAL-
+Wire Wire Line
+ 2000 8150 1400 8150
+Wire Wire Line
+ 2000 8050 1400 8050
+Wire Wire Line
+ 2000 7950 1400 7950
+Text Label 1500 8150 0 60 ~ 0
+F_PALIN
+Text Label 1500 8050 0 60 ~ 0
+HD_PAL-
+Text Label 1500 7950 0 60 ~ 0
+VD_PAL-
+Wire Wire Line
+ 6150 5050 6900 5050
+Wire Wire Line
+ 6150 4950 6900 4950
+Text Label 6200 5050 0 60 ~ 0
+BT812_WR-
+Text Label 6200 4950 0 60 ~ 0
+BT812_RD-
+Wire Wire Line
+ 3800 8050 4550 8050
+Wire Wire Line
+ 3800 7950 4550 7950
+Text Label 3850 8050 0 60 ~ 0
+BT812_WR-
+Text Label 3850 7950 0 60 ~ 0
+BT812_RD-
+Wire Wire Line
+ 6300 5600 6900 5600
+Text Label 6350 5600 0 60 ~ 0
+OE_PAL-
+Wire Wire Line
+ 8850 3200 9450 3200
+Text Label 8900 3200 0 60 ~ 0
+OE_PAL-
+Wire Wire Line
+ 6850 3100 6200 3100
+Text Label 6250 3100 0 60 ~ 0
+BLUE_IN
+Wire Wire Line
+ 6850 3000 6200 3000
+Text Label 6250 3000 0 60 ~ 0
+GREEN_IN
+Wire Wire Line
+ 6300 2900 6850 2900
+Text Label 6350 2900 0 60 ~ 0
+RED_IN
+Wire Wire Line
+ 6900 4650 6250 4650
+Text Label 6300 4650 0 60 ~ 0
+GREEN_IN
+Wire Wire Line
+ 6350 4750 6900 4750
+Text Label 6400 4750 0 60 ~ 0
+RED_IN
+Wire Wire Line
+ 11950 3400 11300 3400
+Wire Wire Line
+ 11950 2600 11300 2600
+Wire Wire Line
+ 11300 1800 11950 1800
+Text Label 11350 3400 0 60 ~ 0
+BLUE_IN
+Text Label 11350 2600 0 60 ~ 0
+GREEN_IN
+Text Label 11450 1800 0 60 ~ 0
+RED_IN
+$Comp
+L GND #GND03
+U 1 1 32FA02CD
+P 12100 2800
+F 0 "#GND03" H 12100 2800 40 0001 C CNN
+F 1 "GND" H 12100 2730 40 0000 C CNN
+F 2 "" H 12100 2800 60 0001 C CNN
+F 3 "" H 12100 2800 60 0001 C CNN
+ 1 12100 2800
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND04
+U 1 1 32FA02C6
+P 12100 3600
+F 0 "#GND04" H 12100 3600 40 0001 C CNN
+F 1 "GND" H 12100 3530 40 0000 C CNN
+F 2 "" H 12100 3600 60 0001 C CNN
+F 3 "" H 12100 3600 60 0001 C CNN
+ 1 12100 3600
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #GND05
+U 1 1 32FA02C2
+P 12100 2000
+F 0 "#GND05" H 12100 2000 40 0001 C CNN
+F 1 "GND" H 12100 1930 40 0000 C CNN
+F 2 "" H 12100 2000 60 0001 C CNN
+F 3 "" H 12100 2000 60 0001 C CNN
+ 1 12100 2000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BNC P3
+U 1 1 32F9F1AD
+P 12100 3400
+F 0 "P3" H 12110 3520 60 0000 C CNN
+F 1 "BNC" V 12210 3340 40 0000 C CNN
+F 2 "Discret:SUBCLICK" H 12100 3400 60 0001 C CNN
+F 3 "" H 12100 3400 60 0001 C CNN
+ 1 12100 3400
+ 1 0 0 -1
+$EndComp
+$Comp
+L BNC P2
+U 1 1 32F9F1A3
+P 12100 2600
+F 0 "P2" H 12110 2720 60 0000 C CNN
+F 1 "BNC" V 12210 2540 40 0000 C CNN
+F 2 "Discret:SUBCLICK" H 12100 2600 60 0001 C CNN
+F 3 "" H 12100 2600 60 0001 C CNN
+ 1 12100 2600
+ 1 0 0 -1
+$EndComp
+$Comp
+L BNC P1
+U 1 1 32F9F198
+P 12100 1800
+F 0 "P1" H 12110 1920 60 0000 C CNN
+F 1 "BNC" V 12210 1740 40 0000 C CNN
+F 2 "Discret:SUBCLICK" H 12100 1800 60 0001 C CNN
+F 3 "" H 12100 1800 60 0001 C CNN
+ 1 12100 1800
+ 1 0 0 -1
+$EndComp
+Text Label 6200 4350 0 60 ~ 0
+DQ[0..7]
+Wire Bus Line
+ 6100 4350 6900 4350
+Wire Wire Line
+ 6350 4550 6900 4550
+Text Label 6400 4550 0 60 ~ 0
+SYSRST-
+Wire Wire Line
+ 3800 3600 4350 3600
+Wire Bus Line
+ 8800 4600 9750 4600
+Wire Bus Line
+ 8800 4500 9750 4500
+Wire Bus Line
+ 8800 4400 9750 4400
+Text Label 8900 4600 0 60 ~ 0
+TVB[0..7]
+Text Label 8900 4500 0 60 ~ 0
+TVG[0..7]
+Text Label 8900 4400 0 60 ~ 0
+TVR[0..7]
+$Sheet
+S 6900 4200 1900 1550
+U 4BF03681
+F0 "pal-ntsc.sch" 60
+F1 "pal-ntsc.sch" 60
+F2 "F_PALIN" O R 8800 5000 60
+F3 "TVR[0..7]" B R 8800 4400 60
+F4 "PC_D[0..7]" B L 6900 4350 60
+F5 "PC_A[0..1]" I L 6900 4450 60
+F6 "RESET-" I L 6900 4550 60
+F7 "GREEN_IN" I L 6900 4650 60
+F8 "RED_IN" I L 6900 4750 60
+F9 "OE_PAL-" I L 6900 5600 60
+F10 "HD_PAL-" O R 8800 5100 60
+F11 "VD_PAL-" O R 8800 5200 60
+F12 "TVB[0..7]" B R 8800 4600 60
+F13 "TVG[0..7]" B R 8800 4500 60
+F14 "BT812_WR-" I L 6900 5050 60
+F15 "BT812_RD-" I L 6900 4950 60
+$EndSheet
+Text Label 6150 1800 0 60 ~ 0
+PCA[0..2]
+Wire Bus Line
+ 6050 1800 6850 1800
+Text Label 1400 6000 0 60 ~ 0
+RDFIFO-
+Text Label 1400 5900 0 60 ~ 0
+WRFIFDO-
+Wire Wire Line
+ 2000 6000 1400 6000
+Wire Wire Line
+ 2000 5900 1400 5900
+Text Label 1400 2750 0 60 ~ 0
+RDFIFO-
+Text Label 1400 2650 0 60 ~ 0
+WRFIFDO-
+Wire Wire Line
+ 1950 2750 1350 2750
+Wire Wire Line
+ 1950 2650 1350 2650
+Wire Wire Line
+ 3800 3450 4350 3450
+Wire Wire Line
+ 3800 3350 4350 3350
+Text Label 3900 3450 0 60 ~ 0
+RDEMPTY
+Text Label 3900 3350 0 60 ~ 0
+WRFULL
+Wire Wire Line
+ 1450 7750 2000 7750
+Wire Wire Line
+ 1450 7650 2000 7650
+Text Label 1500 7750 0 60 ~ 0
+RDEMPTY
+Text Label 1500 7650 0 60 ~ 0
+WRFULL
+Text Label 1400 6400 0 60 ~ 0
+PTRDY-
+Wire Wire Line
+ 1400 6400 2000 6400
+Wire Wire Line
+ 1350 6950 2000 6950
+Text Label 1450 6950 0 60 ~ 0
+PTBURST
+Wire Wire Line
+ 3800 2950 4450 2950
+Text Label 3900 2950 0 60 ~ 0
+PTBURST
+Text Label 1400 2400 0 60 ~ 0
+PTRDY-
+Wire Wire Line
+ 1350 2400 1950 2400
+Wire Wire Line
+ 2000 7050 1400 7050
+Text Label 1450 7050 0 60 ~ 0
+SELECT-
+Wire Wire Line
+ 1500 6850 2000 6850
+Text Label 1600 6850 0 60 ~ 0
+PTWR
+Wire Wire Line
+ 3800 3050 4300 3050
+Wire Wire Line
+ 1950 2500 1350 2500
+Text Label 3900 3050 0 60 ~ 0
+PTWR
+Text Label 1400 2500 0 60 ~ 0
+SELECT-
+Wire Wire Line
+ 1500 6750 2000 6750
+Wire Wire Line
+ 1400 6300 2000 6300
+Text Label 1400 6300 0 60 ~ 0
+PTATN-
+Text Label 1550 6750 0 60 ~ 0
+PTADR-
+Wire Wire Line
+ 2000 7150 1500 7150
+Text Label 1500 7150 0 60 ~ 0
+BPCLK
+Wire Wire Line
+ 3800 3150 4300 3150
+Wire Wire Line
+ 3800 2650 4300 2650
+Wire Wire Line
+ 3800 2550 4300 2550
+Text Label 3900 3150 0 60 ~ 0
+BPCLK
+Text Label 3850 2550 0 60 ~ 0
+PTATN-
+Text Label 3850 2650 0 60 ~ 0
+PTADR-
+Wire Bus Line
+ 2000 7450 1300 7450
+Text Label 1350 7450 0 60 ~ 0
+BE-[0..3]
+Wire Bus Line
+ 3800 2750 4600 2750
+Text Label 3850 2750 0 60 ~ 0
+PTBE-[0..3]
+Wire Bus Line
+ 1200 6650 2000 6650
+Wire Bus Line
+ 1950 1800 1250 1800
+Text Label 1300 1800 0 60 ~ 0
+BE-[0..3]
+Text Label 1250 6650 0 60 ~ 0
+PTBE-[0..3]
+Wire Wire Line
+ 1400 6550 2000 6550
+Wire Wire Line
+ 1400 7350 2000 7350
+Text Label 1500 7350 0 60 ~ 0
+PTNUM0
+Text Label 1500 6550 0 60 ~ 0
+PTNUM1
+Wire Wire Line
+ 1450 7250 2000 7250
+Text Label 1500 7250 0 60 ~ 0
+SYSRST-
+Text Label 3900 3600 0 60 ~ 0
+SYSRST-
+Text Label 3900 2450 0 60 ~ 0
+PTNUM1
+Text Label 3900 2350 0 60 ~ 0
+PTNUM0
+Wire Wire Line
+ 3800 2450 4300 2450
+Wire Wire Line
+ 3800 2350 4300 2350
+Text Label 1300 5400 0 60 ~ 0
+ADR[2..6]
+Text Label 3950 5700 0 60 ~ 0
+BLANK-
+Wire Wire Line
+ 3800 5700 4350 5700
+Text Label 3850 5400 0 60 ~ 0
+CSYNC-OUT
+Text Label 1400 6150 0 60 ~ 0
+CSYNCIN-
+Wire Wire Line
+ 1400 6150 2000 6150
+Text Label 8950 2400 0 60 ~ 0
+CSYNCIN-
+Wire Wire Line
+ 8850 2400 9700 2400
+Wire Wire Line
+ 6150 3450 6850 3450
+Wire Wire Line
+ 3800 5400 4500 5400
+Text Label 6200 3450 0 60 ~ 0
+CSYNC-OUT
+Text Label 6450 6550 0 60 ~ 0
+WRAM-
+Wire Wire Line
+ 6450 6550 6950 6550
+Text Label 3900 6950 0 60 ~ 0
+WRAM-
+Wire Wire Line
+ 3800 6950 4300 6950
+Wire Wire Line
+ 6350 2000 6850 2000
+Wire Wire Line
+ 6350 2100 6850 2100
+Wire Wire Line
+ 6350 2200 6850 2200
+Wire Wire Line
+ 6350 2300 6850 2300
+Text Label 6400 2000 0 60 ~ 0
+WRCAD-
+Text Label 6400 2100 0 60 ~ 0
+RDCAD-
+Text Label 6400 2200 0 60 ~ 0
+WRCDA-
+Text Label 6400 2300 0 60 ~ 0
+RDCDA-
+Wire Wire Line
+ 3800 7850 4300 7850
+Wire Wire Line
+ 3800 7750 4300 7750
+Wire Wire Line
+ 3800 7650 4300 7650
+Wire Wire Line
+ 3800 7550 4300 7550
+Text Label 3850 7850 0 60 ~ 0
+WRCAD-
+Text Label 3850 7750 0 60 ~ 0
+RDCAD-
+Text Label 3850 7650 0 60 ~ 0
+WRCDA-
+Text Label 3850 7550 0 60 ~ 0
+RDCDA-
+Text Label 6450 7900 0 60 ~ 0
+RAS7-
+Text Label 6450 7800 0 60 ~ 0
+RAS6-
+Text Label 6450 7700 0 60 ~ 0
+RAS5-
+Text Label 6450 7600 0 60 ~ 0
+RAS4-
+Text Label 6450 7500 0 60 ~ 0
+RAS3-
+Text Label 6450 7400 0 60 ~ 0
+RAS2-
+Text Label 6450 7300 0 60 ~ 0
+RAS1-
+Text Label 6450 7200 0 60 ~ 0
+RAS0-
+Wire Wire Line
+ 6450 7900 6950 7900
+Wire Wire Line
+ 6450 7800 6950 7800
+Wire Wire Line
+ 6450 7700 6950 7700
+Wire Wire Line
+ 6450 7600 6950 7600
+Wire Wire Line
+ 6450 7500 6950 7500
+Wire Wire Line
+ 6450 7400 6950 7400
+Wire Wire Line
+ 6450 7300 6950 7300
+Wire Wire Line
+ 6450 7200 6950 7200
+Text Label 6450 7000 0 60 ~ 0
+CAS3-
+Text Label 6450 6900 0 60 ~ 0
+CAS2-
+Text Label 6450 6800 0 60 ~ 0
+CAS1-
+Text Label 6450 6700 0 60 ~ 0
+CAS0-
+Wire Wire Line
+ 6450 7000 6950 7000
+Wire Wire Line
+ 6450 6900 6950 6900
+Wire Wire Line
+ 6450 6800 6950 6800
+Wire Wire Line
+ 6450 6700 6950 6700
+Text Label 3900 7350 0 60 ~ 0
+CAS3-
+Text Label 3900 7250 0 60 ~ 0
+CAS2-
+Text Label 3900 7150 0 60 ~ 0
+CAS1-
+Text Label 3900 7050 0 60 ~ 0
+CAS0-
+Text Label 3900 6800 0 60 ~ 0
+RAS7-
+Text Label 3900 6700 0 60 ~ 0
+RAS6-
+Text Label 3900 6600 0 60 ~ 0
+RAS5-
+Text Label 3900 6500 0 60 ~ 0
+RAS4-
+Text Label 3900 6400 0 60 ~ 0
+RAS3-
+Text Label 3900 6300 0 60 ~ 0
+RAS2-
+Text Label 3900 6200 0 60 ~ 0
+RAS1-
+Text Label 3900 6100 0 60 ~ 0
+RAS0-
+Wire Wire Line
+ 3800 7350 4300 7350
+Wire Wire Line
+ 3800 7250 4300 7250
+Wire Wire Line
+ 3800 7150 4300 7150
+Wire Wire Line
+ 3800 7050 4300 7050
+Wire Wire Line
+ 3800 6800 4300 6800
+Wire Wire Line
+ 3800 6700 4300 6700
+Wire Wire Line
+ 3800 6600 4300 6600
+Wire Wire Line
+ 3800 6500 4300 6500
+Wire Wire Line
+ 3800 6400 4300 6400
+Wire Wire Line
+ 3800 6300 4300 6300
+Wire Wire Line
+ 3800 6200 4300 6200
+Wire Wire Line
+ 3800 6100 4300 6100
+Text Label 1400 5600 0 60 ~ 0
+/PCWR
+Text Label 1400 5700 0 60 ~ 0
+/PCRD
+Wire Wire Line
+ 1400 5600 2000 5600
+Wire Wire Line
+ 1400 5700 2000 5700
+Wire Bus Line
+ 1200 5400 2000 5400
+Text Label 1300 5300 0 60 ~ 0
+DQ[0..15]
+Wire Bus Line
+ 1200 5300 2000 5300
+Wire Wire Line
+ 6150 3350 6850 3350
+Text Label 6300 3350 0 60 ~ 0
+CLAMP
+Wire Wire Line
+ 3800 5600 4300 5600
+Text Label 3950 5600 0 60 ~ 0
+CLAMP
+Wire Bus Line
+ 6100 8050 6950 8050
+Text Label 6250 8050 0 60 ~ 0
+MXA[0..10]
+Wire Bus Line
+ 3800 6000 4600 6000
+Text Label 3900 6000 0 60 ~ 0
+MXA[0..10]
+Wire Wire Line
+ 6350 2700 6850 2700
+Wire Wire Line
+ 6350 2600 6850 2600
+Text Label 6400 2600 0 60 ~ 0
+CLKCAD
+Text Label 6400 2700 0 60 ~ 0
+CLKCDA
+Wire Wire Line
+ 3800 5300 4300 5300
+Wire Wire Line
+ 3800 5200 4300 5200
+Text Label 3850 5200 0 60 ~ 0
+CLKCAD
+Text Label 3850 5300 0 60 ~ 0
+CLKCDA
+$Sheet
+S 2000 5000 1800 4650
+U 4BF03683
+F0 "graphic" 60
+F1 "graphic.sch" 60
+F2 "CSYNC-OUT" O R 3800 5400 60
+F3 "DQ[0..15]" B L 2000 5300 60
+F4 "ADR[2..6]" O L 2000 5400 60
+F5 "CADCLK" O R 3800 5200 60
+F6 "CDACLK" O R 3800 5300 60
+F7 "CLAMP" O R 3800 5600 60
+F8 "CSYNCIN-" I L 2000 6150 60
+F9 "MXA[0..10]" O R 3800 6000 60
+F10 "RAS7-" O R 3800 6800 60
+F11 "RAS6-" O R 3800 6700 60
+F12 "RAS5-" O R 3800 6600 60
+F13 "RAS4-" O R 3800 6500 60
+F14 "RAS3-" O R 3800 6400 60
+F15 "RAS2-" O R 3800 6300 60
+F16 "RAS1-" O R 3800 6200 60
+F17 "RAS0-" O R 3800 6100 60
+F18 "CAS2-" O R 3800 7250 60
+F19 "CAS1-" O R 3800 7150 60
+F20 "CAS0-" O R 3800 7050 60
+F21 "RD-" I L 2000 5700 60
+F22 "WR-" I L 2000 5600 60
+F23 "CAS3-" O R 3800 7350 60
+F24 "RDCDA-" O R 3800 7550 60
+F25 "WRCDA-" O R 3800 7650 60
+F26 "RDCAD-" O R 3800 7750 60
+F27 "WRCAD-" O R 3800 7850 60
+F28 "WRAM-" O R 3800 6950 60
+F29 "BLANK-" O R 3800 5700 60
+F30 "PTATN-" I L 2000 6300 60
+F31 "PTRDY-" O L 2000 6400 60
+F32 "PTNUM1" I L 2000 6550 60
+F33 "PTBE-[0..3]" I L 2000 6650 60
+F34 "PTADR-" O L 2000 6750 60
+F35 "PTWR" I L 2000 6850 60
+F36 "PTBURST-" I L 2000 6950 60
+F37 "SELECT-" O L 2000 7050 60
+F38 "BPCLK" I L 2000 7150 60
+F39 "SYSRST-" I L 2000 7250 60
+F40 "PTNUM0" I L 2000 7350 60
+F41 "BE-[0..3]" O L 2000 7450 60
+F42 "WRFULL" O L 2000 7650 60
+F43 "RDEMPTY" O L 2000 7750 60
+F44 "RDFIFO-" O L 2000 6000 60
+F45 "WRFIFO-" O L 2000 5900 60
+F46 "BT812_WR-" O R 3800 8050 60
+F47 "BT812_RD-" O R 3800 7950 60
+F48 "VD_PAL-" I L 2000 7950 60
+F49 "HD_PAL-" I L 2000 8050 60
+F50 "F_PALIN" I L 2000 8150 60
+F51 "X_DOUT" O R 3800 8500 60
+F52 "X_CLK" O R 3800 8600 60
+F53 "X_DONE" O R 3800 8700 60
+F54 "X_PROG-" O R 3800 8800 60
+F55 "WRITE_RAM" O R 3800 9000 60
+F56 "ACCES_RAM-" O R 3800 9100 60
+F57 "TVI[0..1]" O R 3800 5900 60
+F58 "PCA[0..2]" O R 3800 9300 60
+F59 "X_IRQ" B L 2000 8300 60
+F60 "IRQ-" I L 2000 8400 60
+F61 "IRQ_SLR" B L 2000 8500 60
+F62 "ACQ_ON" O R 3800 8300 60
+$EndSheet
+Wire Bus Line
+ 8850 2200 9800 2200
+Text Label 8950 2200 0 60 ~ 0
+TVI[0..1]
+Wire Bus Line
+ 12900 4900 13850 4900
+Text Label 13000 4900 0 60 ~ 0
+TVRAM[0..31]
+$Sheet
+S 6950 6450 1850 1700
+U 4BF03685
+F0 "RAMS" 60
+F1 "rams.sch" 60
+F2 "TVRAM[0..31]" T R 8800 6600 60
+F3 "WRAM-" I L 6950 6550 60
+F4 "CAS3-" I L 6950 7000 60
+F5 "RAS7-" I L 6950 7900 60
+F6 "RAS6-" I L 6950 7800 60
+F7 "RAS5-" I L 6950 7700 60
+F8 "RAS4-" I L 6950 7600 60
+F9 "RAS3-" I L 6950 7500 60
+F10 "RAS2-" I L 6950 7400 60
+F11 "RAS1-" I L 6950 7300 60
+F12 "RAS0-" I L 6950 7200 60
+F13 "CAS2-" I L 6950 6900 60
+F14 "CAS1-" I L 6950 6800 60
+F15 "CAS0-" I L 6950 6700 60
+F16 "MXA[0..10]" I L 6950 8050 60
+$EndSheet
+Wire Bus Line
+ 6850 1900 6000 1900
+Wire Bus Line
+ 8850 2100 9800 2100
+Wire Bus Line
+ 8850 2000 9800 2000
+Wire Bus Line
+ 8850 1900 9800 1900
+Text Label 8950 2100 0 60 ~ 0
+TVB[0..7]
+Text Label 8950 2000 0 60 ~ 0
+TVG[0..7]
+$Sheet
+S 1950 1600 1850 2400
+U 4BF03687
+F0 "buspci.sch" 60
+F1 "bus_pci.sch" 60
+F2 "WR-" I L 1950 1950 60
+F3 "RD-" I L 1950 2050 60
+F4 "DQ[0..31]" B R 3800 1800 60
+F5 "ADR[2..6]" I L 1950 2200 60
+F6 "BE-[0..3]" I L 1950 1800 60
+F7 "IRQ_SRL" B R 3800 1950 60
+F8 "X_IRQ" B R 3800 2050 60
+F9 "PTNUM0" O R 3800 2350 60
+F10 "PTNUM1" O R 3800 2450 60
+F11 "PTATN-" O R 3800 2550 60
+F12 "PTRDY-" I L 1950 2400 60
+F13 "PTBE-[0..3]" O R 3800 2750 60
+F14 "PTWR" O R 3800 3050 60
+F15 "PTBURST-" O R 3800 2950 60
+F16 "SELECT-" I L 1950 2500 60
+F17 "BPCLK" O R 3800 3150 60
+F18 "SYSRST-" O R 3800 3600 60
+F19 "WRFULL" O R 3800 3350 60
+F20 "RDEMPTY" O R 3800 3450 60
+F21 "WRFIFO-" I L 1950 2650 60
+F22 "RDFIFO-" I L 1950 2750 60
+F23 "IRQ-" O R 3800 2150 60
+F24 "PTADR-" O R 3800 2650 60
+$EndSheet
+Text Label 1250 2200 0 60 ~ 0
+ADR[2..6]
+Text Label 1400 1950 0 60 ~ 0
+/PCWR
+Text Label 1400 2050 0 60 ~ 0
+/PCRD
+Text Label 6150 1900 0 60 ~ 0
+DQ[0..7]
+Text Label 8950 1900 0 60 ~ 0
+TVR[0..7]
+Text Label 3900 1800 0 60 ~ 0
+DQ[0..31]
+Text Label 6300 3250 0 60 ~ 0
+BLANK-
+Wire Wire Line
+ 1250 1950 1950 1950
+Wire Wire Line
+ 1250 2050 1950 2050
+Wire Wire Line
+ 6150 3250 6850 3250
+Wire Bus Line
+ 3800 1800 4600 1800
+Wire Bus Line
+ 1150 2200 1950 2200
+$Sheet
+S 6850 1650 2000 2150
+U 4BF03689
+F0 "ESVIDEO-RVB" 60
+F1 "esvideo.sch" 60
+F2 "DPC[0..7]" B L 6850 1900 60
+F3 "TVR[0..7]" O R 8850 1900 60
+F4 "BLANK-" I L 6850 3250 60
+F5 "TVG[0..7]" O R 8850 2000 60
+F6 "TVB[0..7]" O R 8850 2100 60
+F7 "WRCAD-" I L 6850 2000 60
+F8 "RDCAD-" I L 6850 2100 60
+F9 "WRCDA-" I L 6850 2200 60
+F10 "RDCDA-" I L 6850 2300 60
+F11 "CSYNCIN-" O R 8850 2400 60
+F12 "CSYNCOUT-" I L 6850 3450 60
+F13 "CLKCAD" I L 6850 2600 60
+F14 "CLKCDA" I L 6850 2700 60
+F15 "TVI[0..1]" O R 8850 2200 60
+F16 "CLAMP" I L 6850 3350 60
+F17 "BLUE_IN" I L 6850 3100 60
+F18 "GREEN_IN" I L 6850 3000 60
+F19 "RED_IN" I L 6850 2900 60
+F20 "RED" O R 8850 2750 60
+F21 "GREEN" O R 8850 2850 60
+F22 "BLUE" O R 8850 2950 60
+F23 "PCA[0..2]" I L 6850 1800 60
+F24 "OE_PAL-" O R 8850 3200 60
+$EndSheet
+$EndSCHEMATC
diff --git a/helpers/tools_to_build_newstroke-font/AUTHOR.txt b/helpers/tools_to_build_newstroke-font/AUTHOR.txt
new file mode 100644
index 0000000..85567aa
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/AUTHOR.txt
@@ -0,0 +1,4 @@
+Author:
+vladimir uryvaev (vovanius@bk.ru)
+Web site:
+http://vovanium.ru/_media/sledy/newstroke
diff --git a/helpers/tools_to_build_newstroke-font/README.txt b/helpers/tools_to_build_newstroke-font/README.txt
new file mode 100644
index 0000000..152b34f
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/README.txt
@@ -0,0 +1,32 @@
+Newstroke Font Readme
+=====================
+
+Newstroke is a stroke (plotter) font originally designed for KiCAD.
+
+Project homepage: http://vovanium.ru/sledy/newstroke
+
+Files
+-----
+font.lib - main glyph library in KiCAD library format
+symbol.lib - glyph library for most math, tech and other symbols
+font_draft1.lib - old draft glyph library with the metrics from Hersheys Simplex
+font.pro - KiCAD project
+charlist.txt - unicode glyph map list
+fontconv.awk - AWK script for 'compiling' project to c-source used by KiCAD
+newstroke_font.h - generated c header with font
+
+Requirements
+------------
+KiCAD (http://kicad.sourceforge.net/) - for glyph editing
+AWK - for font generating
+
+Usage
+-----
+* Edit glyps with KiCAD EESchema library editor.
+* Add Unicode positions to charlist.
+* Generate font using following command line:
+
+awk -f fontconv.awk symbol.lib font.lib charlist.txt >newstroke_font.h
+
+
+Released under CC0 licence.
diff --git a/helpers/tools_to_build_newstroke-font/charlist.txt b/helpers/tools_to_build_newstroke-font/charlist.txt
new file mode 100644
index 0000000..61974e3
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/charlist.txt
@@ -0,0 +1,2914 @@
+# symbol list
+
+startchar 32
+font newstroke_font
+// BASIC LATIN (0020-007F)
++ SPACE
++ EXCLAM
++ QUOTE
++ HASH
++ S_CAP LINE_V_CAP
++ PERCENT
++ AMPERSAND
++ APOSTROPHE
++ PAREN
++ !PAREN
++ ASTERISK
++ PLUS
++ COMMA
++ MINUS
++ FULL_STOP
++ SLASH
++ DIGIT_0
++ DIGIT_1
++ DIGIT_2
++ DIGIT_3
++ DIGIT_4
++ DIGIT_5
++ DIGIT_6
++ DIGIT_7
++ DIGIT_8
++ DIGIT_9
++ COLON
++ SEMICOLON
++ LESS
++ EQUAL
++ !LESS
++ QUESTION
++ AT
++ A_CAP
++ B_CAP
++ C_CAP
++ D_CAP
++ E_CAP
++ F_CAP
++ G_CAP
++ H_CAP
++ I_CAP
++ J_CAP
++ K_CAP
++ L_CAP
++ M_CAP
++ N_CAP
++ O_CAP
++ P_CAP
++ Q_CAP
++ R_CAP
++ S_CAP
++ T_CAP
++ U_CAP
++ V_CAP
++ W_CAP
++ X_CAP
++ Y_CAP
++ Z_CAP
++ BRACKET
++ BACKSLASH
++ !BRACKET
++ CIRCUMFLEX
++ LOW_LINE
++ GRAVE
++ A_SMALL
++ B_SMALL
++ C_SMALL
++ D_SMALL
++ E_SMALL
++ F_SMALL
++ G_SMALL
++ H_SMALL
++ I_SMALL DOT ABOVE=X
++ J_SMALL DOT ABOVE=X
++ K_SMALL
++ L_SMALL
++ M_SMALL
++ N_SMALL
++ O_SMALL
++ P_SMALL
++ Q_SMALL
++ R_SMALL
++ S_SMALL
++ T_SMALL
++ U_SMALL
++ V_SMALL
++ W_SMALL
++ X_SMALL
++ Y_SMALL
++ Z_SMALL
++ BRACE
++ LINE_V
++ !BRACE
++ TILDE
++ DEL
+
+// LATIN-1 SUPPLEMENT (0080-00FF)
+skipcodes 32 0
++ SPACE
++ +EXCLAM
++ C_SMALL LINE_V_SMALL
++ POUND
++ CURRENCY
++ YEN
++ BROKEN_BAR
++ SECTION
++ DIAERESIS
++ COPYRIGHT
++ ^A_TINY
++ GUILLEMET_DBL
++ NOT
++ 0 # (soft hyphen)
++ REGISTERED
++ MACRON
++ DEGREE
++ PLUS_MINUS
++ ^DIGIT_2_SMALL
++ ^DIGIT_3_SMALL
++ ACUTE
++ MU_SMALL
++ PI_SMALL
++ DOT
++ CEDILLA
++ ^DIGIT_1_SMALL
++ ^O_TINY
++ !GUILLEMET_DBL
++ FRAC_LINE DIGIT_1_SMALL NUM=- DIGIT_4_SMALL DENOM=-
++ FRAC_LINE DIGIT_1_SMALL NUM=- DIGIT_2_SMALL DENOM=-
++ FRAC_LINE DIGIT_3_SMALL NUM=- DIGIT_4_SMALL DENOM=-
++ +QUESTION
++ A_CAP GRAVE ABOVE=X
++ A_CAP ACUTE ABOVE=X
++ A_CAP CIRCUMFLEX ABOVE=X
++ A_CAP TILDE ABOVE=X
++ A_CAP DIAERESIS ABOVE=X
++ A_CAP RING TOP=X
++ AE_CAP
++ C_CAP CEDILLA
++ E_CAP GRAVE ABOVE=X
++ E_CAP ACUTE ABOVE=X
++ E_CAP CIRCUMFLEX ABOVE=X
++ E_CAP DIAERESIS ABOVE=X
++ I_CAP GRAVE ABOVE=X
++ I_CAP ACUTE ABOVE=X
++ I_CAP CIRCUMFLEX ABOVE=X #
++ I_CAP DIAERESIS ABOVE=X #
++ D_CAP STROKE_H MIDDLE=X
++ N_CAP TILDE ABOVE=X
++ O_CAP GRAVE ABOVE=X
++ O_CAP ACUTE ABOVE=X
++ O_CAP CIRCUMFLEX ABOVE=X
++ O_CAP TILDE ABOVE=X
++ O_CAP DIAERESIS ABOVE=X
++ MULTIPLY
++ O_CAP_STROKE
++ U_CAP GRAVE ABOVE=X
++ U_CAP ACUTE ABOVE=X
++ U_CAP CIRCUMFLEX ABOVE=X
++ U_CAP DIAERESIS ABOVE=X
++ Y_CAP ACUTE ABOVE=X
++ THORN_CAP
++ ESZETT
++ A_SMALL GRAVE
++ A_SMALL ACUTE
++ A_SMALL CIRCUMFLEX
++ A_SMALL TILDE
++ A_SMALL DIAERESIS
++ A_SMALL RING
++ AE_SMALL
++ C_SMALL CEDILLA
++ E_SMALL GRAVE
++ E_SMALL ACUTE
++ E_SMALL CIRCUMFLEX
++ E_SMALL DIAERESIS
++ I_SMALL GRAVE
++ I_SMALL ACUTE
++ CIRCUMFLEX I_SMALL
++ DIAERESIS I_SMALL
++ ETH_SMALL
++ N_SMALL TILDE
++ O_SMALL GRAVE
++ O_SMALL ACUTE
++ O_SMALL CIRCUMFLEX
++ O_SMALL TILDE
++ O_SMALL DIAERESIS
++ DIVIDE
++ O_SMALL_STROKE
++ U_SMALL GRAVE
++ U_SMALL ACUTE
++ U_SMALL CIRCUMFLEX
++ U_SMALL DIAERESIS
++ Y_SMALL ACUTE
++ THORN_SMALL
++ Y_SMALL DIAERESIS
+
+// LATIN EXTENDED-A (0100-017F)
++ A_CAP MACRON ABOVE=X
++ A_SMALL MACRON
++ A_CAP BREVE ABOVE=X
++ A_SMALL BREVE
++ A_CAP OGONEK BOTTOM2=X
++ A_SMALL OGONEK BOTTOM2=X
++ C_CAP ACUTE ABOVE=X
++ C_SMALL ACUTE
++ C_CAP CIRCUMFLEX ABOVE=X
++ C_SMALL CIRCUMFLEX
++ C_CAP DOT ABOVE=X
++ C_SMALL DOT ABOVE=X
++ C_CAP CARON ABOVE=X
++ C_SMALL CARON
++ D_CAP CARON ABOVE=X
++( D_SMALL
++) APOSTROPHE
++ D_CAP STROKE_H MIDDLE=X # ETH_CAP
++ D_SMALL STROKE_H MIDTOP=X
++ E_CAP MACRON ABOVE=X
++ E_SMALL MACRON
++ E_CAP BREVE ABOVE=X
++ E_SMALL BREVE
++ E_CAP DOT ABOVE=X
++ E_SMALL DOT ABOVE=X
++ E_CAP OGONEK
++ E_SMALL OGONEK
++ E_CAP CARON ABOVE=X
++ E_SMALL CARON
++ G_CAP CIRCUMFLEX ABOVE=X
++ G_SMALL CIRCUMFLEX
++ G_CAP BREVE ABOVE=X
++ G_SMALL BREVE
++ G_CAP DOT ABOVE=X
++ G_SMALL DOT ABOVE=X
++ G_CAP CEDILLA
++ G_SMALL +CEDILLA ABOVE=X
++ H_CAP CIRCUMFLEX ABOVE=X
++ H_SMALL CIRCUMFLEX ABOVE=X
++ H_CAP_STROKE
++ H_SMALL STROKE_H STROKE=X
++ I_CAP TILDE ABOVE=X # !!!
++ I_SMALL TILDE ABOVE=X # !!!
++ I_CAP MACRON ABOVE=X # !!!
++ I_SMALL MACRON ABOVE=X
++ I_CAP BREVE ABOVE=X
++ I_SMALL BREVE ABOVE=X
++ I_CAP OGONEK
++ I_SMALL OGONEK
++ I_CAP DOT ABOVE=X
++ I_SMALL
++( I_CAP
++) J_CAP
++( I_SMALL DOT ABOVE=X
++) J_SMALL DOT ABOVE=X
++ J_CAP CIRCUMFLEX ABOVE=X
++ J_SMALL CIRCUMFLEX
++ K_CAP CEDILLA
++ K_SMALL CEDILLA
++ K_SMALLCAP
++ L_CAP ACUTE ABOVE=X
++ L_SMALL ACUTE
++ L_CAP CEDILLA
++ L_SMALL CEDILLA
++ L_CAP ACUTE CARON=X
++w L_SMALL APOSTROPHE SAPOS=P
++ L_CAP DOT DOT=CENTER
++ L_SMALL_MIDDOT
++ L_CAP SLASH_SMALL_H MIDDLE=X
++ L_SMALL SLASH_SMALL_H MIDDLE=X
++ N_CAP ACUTE ABOVE=X
++ N_SMALL ACUTE
++ N_CAP CEDILLA
++ N_SMALL CEDILLA
++ N_CAP CARON ABOVE=X
++ N_SMALL CARON
++( APOSTROPHE
++) N_SMALL
++ ENG_CAP
++ ENG_SMALL
++ O_CAP MACRON ABOVE=X
++ O_SMALL MACRON
++ O_CAP BREVE ABOVE=X
++ O_SMALL BREVE
++ O_CAP ACUTE_DBL ABOVE=X
++ O_SMALL ACUTE_DBL
++ OE_CAP
++ OE_SMALL
++ R_CAP ACUTE ABOVE=X
++ R_SMALL ACUTE
++ R_CAP CEDILLA
++ R_SMALL CEDILLA
++ R_CAP CARON ABOVE=X
++ R_SMALL CARON
++ S_CAP ACUTE ABOVE=X
++ S_SMALL ACUTE
++ S_CAP CIRCUMFLEX ABOVE=X
++ S_SMALL CIRCUMFLEX
++ S_CAP CEDILLA
++ S_SMALL CEDILLA
++ S_CAP CARON ABOVE=X
++ S_SMALL CARON
++ T_CAP CEDILLA
++ T_SMALL CEDILLA
++ T_CAP CARON ABOVE=X
++ T_SMALL_CARON
++ T_CAP STROKE_H MIDDLE=X
++ T_SMALL STROKE_SMALL_H MIDDLE=X
++ U_CAP TILDE ABOVE=X
++ U_SMALL TILDE
++ U_CAP MACRON ABOVE=X
++ U_SMALL MACRON
++ U_CAP BREVE ABOVE=X
++ U_SMALL BREVE
++ U_CAP RING ABOVE=X
++ U_SMALL RING
++ U_CAP ACUTE_DBL ABOVE=X
++ U_SMALL ACUTE_DBL
++ U_CAP OGONEK
++ U_SMALL OGONEK BOTTOM2=X
++ W_CAP CIRCUMFLEX ABOVE=X
++ W_SMALL CIRCUMFLEX
++ Y_CAP CIRCUMFLEX ABOVE=X
++ Y_SMALL CIRCUMFLEX
++ T_CAP DIAERESIS ABOVE=X
++ Z_CAP ACUTE ABOVE=X
++ Z_SMALL ACUTE
++ Z_CAP DOT ABOVE=X
++ Z_SMALL DOT ABOVE=X
++ Z_CAP CARON ABOVE=X
++ Z_SMALL CARON
++ S_LONG_SMALL
+
+// LATIN EXTENDED-B (0180-024F)
++ B_SMALL STROKE_H MIDTOP=X
++ B_CAP_HOOK
++ BUKI_CAP
++ B_SMALL_TOPBAR
++ SOFT_CAP
++ SOFT_SMALL
++ %C_CAP
++ C_CAP !HORN HOOK=X
++ C_SMALL +HOOK TOP2=X
++ D_CAP STROKE_H MIDDLE=X
++ D_CAP_HOOK
++ !BUKI_CAP
++ !B_SMALL_TOPBAR
++ +DELTA_SMALL
++ !E_CAP
++ %E_LARGE
+
++ EPSILON_LARGE
++ F_CAP HOOK BOTTOM=X
++ F_SMALL HOOK BOTTOM=X
++ G_CAP !HORN HOOK=X
++ GAMMA_AFR_CAP
++ HV_SMALL
++ IOTA_LARGE
++ I_CAP STROKE_H MIDDLE=X
++ K_CAP_HOOK
++ K_SMALLCAP +HOOK TOP1=X
++ L_SMALL STROKE_H MIDDLE=X
++ LAMBDA_SMALL SLASH_SMALL_H MIDTOP=X
++ %M_LARGE
++ N_CAP HOOK BOTTOM1=X
++ ETA_SMALL
++ FITA_CAP
+
++ O_CAP HORN HORN=X
++ O_SMALL HORN HORN=X
++ OI_CAP
++ OI_SMALL
++ P_CAP_HOOK
++ P_SMALL +HOOK TOP=X
++ YR_CAP
++ !S_CAP
++ !S_SMALL
++ SIGMA_CAP
++ !ESH_SMALL_LOOP
++ T_SMALL HOOK BOTTOM=X
++ T_CAP_HOOK
++ T_SMALL_HOOK
++ T_CAP !HOOK BOTTOM=X
++ U_CAP HORN TOP2=X
+
++ U_SMALL HORN TOP2=X
++ %OMEGA_CAP
++ UPSILON_LARGE
++ Y_CAP_HOOK
++ Y_SMALL_HOOK
++ Z_CAP STROKE_H MIDDLE=X
++ Z_SMALL STROKE_H MIDDLE=X
++ DIGIT_3
++ !DIGIT_3
++ !EZH_SMALL
++ EZH_SMALL_TAIL
++ DIGIT_2 STROKE_H MIDDLE=X
++ DIGIT_5
++ DIGIT_5_SMALL
++ %KOPPA_CYR_CAP STROKE_H MIDBOTTOM=X
++ WYNN_SMALL
+
++ LINE_V_LETTER
++ LINE_V_LETTER_DBL
++ LINE_V_LETTER STROKE_SMALL_H_DBL MIDDLE=X
++ EXCLAM
++( D_CAP
++) Z_CAP CARON ABOVE=X
++( D_CAP
++) Z_SMALL CARON ABOVE=X
++( D_SMALL
++) Z_SMALL CARON ABOVE=X
++( L_CAP
++) J_CAP
++( L_CAP
++) J_SMALL DOT ABOVE=X
++( L_SMALL
++) J_SMALL DOT ABOVE=X
++( N_CAP
++) J_CAP
++( N_CAP
++) J_SMALL DOT ABOVE=X
++( N_SMALL
++) J_SMALL DOT ABOVE=X
++ A_CAP CARON ABOVE=X
++ A_SMALL CARON
++ I_CAP CARON ABOVE=X
+
++ I_SMALL CARON
++ O_CAP CARON ABOVE=X
++ O_SMALL CARON
++ U_CAP CARON ABOVE=X
++ U_SMALL CARON
++ U_CAP DIAERESIS ABOVE=X MACRON HIGH=X
++ U_SMALL DIAERESIS ABOVE=X MACRON HIGH=X
++ U_CAP DIAERESIS ABOVE=X ACUTE HIGH=X
++ U_SMALL DIAERESIS ABOVE=X ACUTE HIGH=X
++ U_CAP DIAERESIS ABOVE=X CARON HIGH=X
++ U_SMALL DIAERESIS ABOVE=X CARON HIGH=X
++ U_CAP DIAERESIS ABOVE=X GRAVE HIGH=X
++ U_SMALL DIAERESIS ABOVE=X GRAVE HIGH=X
++ +E_SMALL
++ A_CAP DIAERESIS ABOVE=X MACRON HIGH=X
++ A_SMALL DIAERESIS ABOVE=X MACRON HIGH=X
+
++ A_CAP DOT ABOVE=X MACRON HIGH=X
++ A_SMALL DOT ABOVE=X MACRON HIGH=X
++ AE_CAP MACRON ABOVE=X
++ AE_SMALL MACRON
++ G_CAP STROKE_H MIDBOTTOM=X
++ G_SMALL STROKE_H MIDBOTTOM=X
++ G_CAP CARON ABOVE=X
++ G_SMALL CARON
++ K_CAP CARON ABOVE=X
++ K_SMALL CARON ABOVE=X
++ O_CAP_OGONEK
++ O_SMALL_OGONEK
++ O_CAP_OGONEK MACRON ABOVE=X
++ O_SMALL_OGONEK MACRON ABOVE=X
++ DIGIT_3 CARON ABOVE=X
++ EZH_SMALL CARON
+
++ J_SMALL CARON
++( D_CAP
++) Z_CAP
++( D_CAP
++) Z_SMALL
++( D_SMALL
++) Z_SMALL
++ G_CAP ACUTE ABOVE=X
++ G_SMALL ACUTE
++ HV_CAP
++ WYNN_CAP
++ N_CAP GRAVE ABOVE=X
++ N_SMALL GRAVE
++ A_CAP RING_ACUTE ABOVE=X
++ A_SMALL RING_ACUTE ABOVE=X
++ AE_CAP ACUTE ABOVE=X
++ AE_SMALL ACUTE ABOVE=X
++ O_CAP_STROKE ACUTE ABOVE=X
++ O_SMALL_STROKE ACUTE ABOVE=X
+
++ A_CAP GRAVE_DBL ABOVE=X
++ A_SMALL GRAVE_DBL ABOVE=X
++ A_CAP BREVE_INV ABOVE=X
++ A_SMALL BREVE_INV ABOVE=X
++ E_CAP GRAVE_DBL ABOVE=X
++ E_SMALL GRAVE_DBL ABOVE=X
++ E_CAP BREVE_INV ABOVE=X
++ E_SMALL BREVE_INV ABOVE=X
++ I_CAP GRAVE_DBL ABOVE=X
++ I_SMALL GRAVE_DBL ABOVE=X
++ I_CAP BREVE_INV ABOVE=X
++ I_SMALL BREVE_INV ABOVE=X
++ O_CAP GRAVE_DBL ABOVE=X
++ O_SMALL GRAVE_DBL ABOVE=X
++ O_CAP BREVE_INV ABOVE=X
++ O_SMALL BREVE_INV ABOVE=X
+
++ R_CAP GRAVE_DBL ABOVE=X
++ R_SMALL GRAVE_DBL ABOVE=X
++ R_CAP BREVE_INV ABOVE=X
++ R_SMALL BREVE_INV ABOVE=X
++ U_CAP GRAVE_DBL ABOVE=X
++ U_SMALL GRAVE_DBL ABOVE=X
++ U_CAP BREVE_INV ABOVE=X
++ U_SMALL BREVE_INV ABOVE=X
++ S_CAP COMMA BELOW=X
++ S_SMALL COMMA BELOW=X
++ T_CAP COMMA BELOW=X
++ T_SMALL COMMA BELOW=X
++ YOGH_CAP
++ YOGH_SMALL
++ H_CAP CARON ABOVE=X
++ H_SMALL CARON ABOVE=X
+
++ N_CAP LEG BOTTOM2=X
++ D_SMALL_CURL
++ OU_CAP
++ OU_SMALL
++ Z_CAP HOOK BOTTOM2=X
++ Z_SMALL HOOK BOTTOM2=X
++ A_CAP DOT ABOVE=X
++ A_SMALL DOT ABOVE=X
++ E_CAP CEDILLA BOTTOM=X
++ E_SMALL CEDILLA BOTTOM=X
++ O_CAP DIAERESIS ABOVE=X MACRON HIGH=X
++ O_SMALL DIAERESIS ABOVE=X MACRON HIGH=X
++ O_CAP TILDE ABOVE=X MACRON HIGH=X
++ O_SMALL TILDE ABOVE=X MACRON HIGH=X
++ O_CAP DOT ABOVE=X
++ O_SMALL DOT ABOVE=X
+
++ O_CAP DOT ABOVE=X MACRON HIGH=X
++ O_SMALL DOT ABOVE=X MACRON HIGH=X
++ Y_CAP MACRON ABOVE=X
++ Y_SMALL MACRON ABOVE=X
++ L_SMALL_CURL
++ N_SMALL_CURL
++ T_SMALL_CURL
++ J_SMALL
++ DB_SMALL
++ QP_SMALL
++ A_CAP SLASH_CAP
++ C_CAP SLASH_CAP
++ C_SMALL SLASH_SMALL
++ L_CAP STROKE_H MIDDLE=X
++ T_CAP SLASH_CAP
++ S_SMALL_SWASHTAIL
+
++ Z_SMALL_SWASHTAIL
++ !KOPPA_CYR_CAP
++ !KOPPA_CYR_SMALL
++ B_CAP STROKE_SMALL_H MIDBOTTOM=X
++ U_CAP_STROKE
++ %V_CAP
++ E_CAP SLASH_CAP
++ E_SMALL SLASH_SMALL
++ J_CAP STROKE_H MIDDLE=X
++ J_SMALL STROKE_SMALL_H MIDDLE=X DOT ABOVE=X
++ Q_LARGE_TAIL
++ Q_SMALL_TAIL
++ R_CAP STROKE_SMALL_H STROKE=X
++ R_SMALL STROKE_H MIDDLE=X
++ Y_CAP_STROKE
++ Y_SMALL_STROKE
+
+// IPA EXTENSIONS (0250-02AF)
++ +A_SMALL
++ ALPHA_SMALL
++ +ALPHA_SMALL
++ B_SMALL_HOOK
++ +C_SMALL
++ C_SMALL_CURL
++ D_SMALL !HOOK BOTTOM2=X
++ D_SMALL_HOOK
++ !E_SMALL
++ +E_SMALL
++ +E_SMALL_HOOK
++ EPSILON_SMALL
++ +EPSILON_SMALL
++ +EPSILON_SMALL_HOOK
++ +EPSILON_SMALL_CLOSED
++ J_SMALL STROKE_SMALL_H MIDDLE=X
++ G_SMALL +HOOK TOP2=X
++ G_SMALL_SCRIPT
++ G_SMALLCAP
++ GAMMA_AFR_SMALL
++ GAMMA_AFR_SMALLCAP
++ +H_SMALL
++ H_SMALL_HOOK
++ H_SMALL_HOOK HOOK BOTTOM2=X
++ I_SMALL STROKE_SMALL_H MIDDLE=X DOT ABOVE=X
++ IOTA_SMALL
++ I_SMALLCAP
++ L_SMALL TILDE MIDDLE=X
++ L_SMALL_BELT
++ L_SMALL_RETROHOOK
++ LEZH_SMALL
++ +M_SMALL
++ +M_SMALL LEG TOP1=X
++ M_SMALL HOOK BOTTOM3=X
++ N_SMALL HOOK BOTTOM1=X
++ N_SMALL !HOOK BOTTOM2=X
++ N_SMALLCAP
++ FITA_SMALL
++ OE_SMALLCAP
++ OMEGA_SMALL_CLOSED
++ PHI_SMALL_VAR
++ +R_SMALL
++ +R_SMALL +LEG BOTTOM=X
++ +R_SMALL !HOOK TOP1=X
++ R_SMALL LEG BOTTOM=X
++ R_SMALL !HOOK BOTTOM=X
++ R_SMALL_FISHHOOK
++ !R_SMALL_FISHHOOK
++ R_SMALLCAP
++ -R_SMALLCAP
++ S_SMALL !HOOK BOTTOM1=X
++ ESH_SMALL
++ J_SMALL STROKE_SMALL_H MIDDLE=X +HOOK TOP=X
++ !ESH_SQUAT_SMALL
++ ESH_SMALL_CURL
++ +T_SMALL
++ T_SMALL_RETROHOOK
++ U_SMALL_STROKE
++ +OMEGA_SMALLCAP
++ UPSILON_SMALL
++ +V_SMALL
++ +W_SMALL
++ +Y_SMALL
++ Y_SMALLCAP
++ Z_SMALL !HOOK BOTTOM2=X
++ Z_SMALL_CURL
++ EZH_SMALL
++ EZH_SMALL_CURL
++ !KOPPA_CYR_CAP
++ KOPPA_CYR_CAP
++ %KOPPA_CYR_CAP
++ C_CAP_STRETCHED
++ O_CAP DOT CENTER=CENTER
++ B_SMALLCAP
++ EPSILON_SMALL_CLOSED
++ G_SMALLCAP +HOOK TOP2=X
++ H_SMALLCAP
++ J_SMALL_CURL DOT ABOVE=X
++ +K_SMALL
++ L_SMALLCAP
++ Q_SMALL +HOOK TOP2=X
++ !KOPPA_CYR_CAP STROKE_H MIDBOTTOM=X
++ KOPPA_CYR_CAP STROKE_H MIDBOTTOM=X
++ DZ_SMALL
++ DEZH_SMALL
++ DZ_SMALL_CURL
++ TS_SMALL
++ TESH_SMALL
++ TC_SMALL_CURL
++ FENG_SMALL
++ LS_SMALL
++ LZ_SMALL
++ W_OVER_W
++ BIDENTAL_PERCUSSIVE
++ +H_SMALL -HOOK BOTTOM2=X
++ +H_SMALL_RETROHOOK -HOOK BOTTOM2=X
+
+// SPACING MODIFIER LETTERS (02B0-02FF)
+skipcodes 80 0
+
+// COMBINING DIACRITICAL MARKS (0300-036F)
+skipcodes 112 0
+
+// GREEK AND COPTIC (0370-03FF)
++ HETA_CAP
++ HETA_SMALL
++ SAMPI_ARCHAIC_CAP
++ SAMPI_ARCHAIC_SMALL
++ APOSTROPHE
++ APOSTROPHE_TURNED_LOW
++ IZHE_CAP
++ IZHE_SMALL
+skipcodes 2 0
++ IOTA_BELOW
++ !C_SMALL
++ C_SMALL DOT CENTER=CENTER
++ !C_SMALL DOT CENTER=CENTER
++ SEMICOLON
+skipcodes 5 0
++ ACUTE
++ DIAERESIS ACUTE HIGH=X
++p A_CAP ACUTE TONOS=X
++ DOT
++p E_CAP ACUTE TONOS=X
++p H_CAP ACUTE TONOS=X
++p I_CAP ACUTE TONOS=X
++ 0
++p O_CAP ACUTE TONOS=X
++ 0
++p Y_CAP ACUTE TONOS=X
++p OMEGA_CAP ACUTE TONOS=X
++ IOTA_SMALL DIAERESIS ABOVE=X ACUTE HIGH=X
++ A_CAP
++ B_CAP
++ GAMMA_CAP
++ DELTA_CAP
++ E_CAP
++ Z_CAP
++ H_CAP
++ THETA_CAP
++ I_CAP
++ K_CAP
++ LAMBDA_CAP
++ M_CAP
++ N_CAP
++ XI_CAP
++ O_CAP
++ PI_CAP
++ P_CAP
++ 0
++ SIGMA_CAP
++ T_CAP
++ Y_CAP
++ PHI_CAP
++ X_CAP
++ PSI_CAP
++ OMEGA_CAP
++ I_CAP DIAERESIS ABOVE=X # !!!
++ Y_CAP DIAERESIS ABOVE=X
++ ALPHA_SMALL ACUTE
++ EPSILON_SMALL ACUTE
++ ETA_SMALL ACUTE
++ IOTA_SMALL ACUTE
++ UPSILON_SMALL DIAERESIS ABOVE=X ACUTE HIGH=X
++ ALPHA_SMALL
++ BETA_SMALL
++ GAMMA_SMALL
++ DELTA_SMALL
++ EPSILON_SMALL
++ ZETA_SMALL
++ ETA_SMALL
++ THETA_SMALL
++ IOTA_SMALL
++ K_SMALLCAP
++ LAMBDA_SMALL
++ MU_SMALL
++ NU_SMALL
++ XI_SMALL
++ O_SMALL
++ PI_SMALL
++ RHO_SMALL
++ SIGMA_SMALL_FINAL
++ SIGMA_SMALL
++ TAU_SMALL
++ UPSILON_SMALL
++ PHI_SMALL
++ CHI_SMALL
++ PSI_SMALL
++ OMEGA_SMALL
++ DIAERESIS IOTA_SMALL
++ UPSILON_SMALL DIAERESIS
++ O_SMALL ACUTE
++ UPSILON_SMALL ACUTE
++ OMEGA_SMALL ACUTE
++ KAI_CAP
++ BETA_SMALL_CURLED
++ THETA_SMALL_SCRIPT
++ UPSILON_CAP_HOOK
++w ACUTE UPSILON_CAP_HOOK S=P
++ UPSILON_CAP_HOOK DIAERESIS ABOVE=X
++ PHI_SMALL_VAR
++ OMEGA_PI_SMALL
++ KAI_SMALL
++ KOPPA_ARCHAIC_CAP
++ KOPPA_ARCHAIC_SMALL
++ STIGMA_CAP
++ STIGMA_SMALL
++ F_CAP
++ DIGAMMA_SMALL
++ KOPPA_CAP
++ KOPPA_SMALL
++ SAMPI_CAP
++ SAMPI_SMALL
++ SHEI_CAP
++ SHEI_SMALL
++ FEI_CAP
++ FEI_SMALL
++ KHEI_CAP
++ KHEI_SMALL
++ HORI_CAP
++ HORI_SMALL
++ GANGIA_CAP
++ GANGIA_SMALL
++ BUKI_LARGE
++ BUKI_SMALL
++ DEI_CAP
++ DEI_SMALL
++ KAPPA_SMALL_SCRIPT
++ RHO_SMALL_TAIL
++ C_SMALL
++ J_SMALL DOT ABOVE=X
++ FITA_CAP
++ IE_SMALL
++ !IE_SMALL
++ THORN_CAP
++ THORN_SMALL
++ C_CAP
++ SAN_CAP
++ SAN_SMALL
++ RHO_SMALL_STROKE
++ !C_CAP
++ C_CAP DOT CENTER=CENTER
++ !C_CAP DOT CENTER=CENTER
+
+// Cyrillic (0400-04FF)
++ E_CAP GRAVE ABOVE=X
++ E_CAP DIAERESIS ABOVE=X
++w T_CAP MIDDLE_HOOK_CAP MIDHOOK=X
++ GAMMA_CAP ACUTE ABOVE=X
++ IE_CAP
++ S_CAP
++ I_CAP
++ I_CAP DIAERESIS ABOVE=X # !!!
++ J_CAP
++ LJE_CAP
++ NJE_CAP
++ TSHE_CAP
++ K_CAP ACUTE ABOVE=X
++ IZHE_CAP GRAVE ABOVE=X
++ Y_LARGE BREVE ABOVE=X
++ DZHE_CAP
++ A_CAP
++ BUKI_CAP
++ B_CAP
++ GAMMA_CAP
++ DOBRO_CAP
++ E_CAP
++ ZHIVETE_CAP
++ ZEMLYA_CAP
++ IZHE_CAP
++ IZHE_CAP BREVE ABOVE=X
++ K_CAP
++ LYUDI_CAP
++ M_CAP
++ H_CAP
++ O_CAP
++ PI_CAP
++ P_CAP
++ C_CAP
++ T_CAP
++ Y_LARGE
++ PHI_CAP
++ X_CAP
++ TSY_CAP
++ CHERV_CAP
++ SHA_CAP
++ SHA_CAP DESCENDER BOTTOM3=X
++ HARD_CAP
++ YERY_CAP
++ SOFT_CAP
++ %IE_CAP
++ YU_CAP
++ YA_CAP
++ A_SMALL
++ BUKI_SMALL
++ B_SMALLCAP
++ GAMMA_SMALLCAP
++ DOBRO_SMALL
++ E_SMALL
++ ZHIVETE_SMALL
++ ZEMLYA_SMALL
++ IZHE_SMALL
++ IZHE_SMALL BREVE
++ K_SMALLCAP
++ LYUDI_SMALL
++ M_SMALLCAP
++ H_SMALLCAP
++ O_SMALL
++ PI_SMALLCAP
++ P_SMALL
++ C_SMALL
++ T_SMALLCAP
++ Y_SMALL
++ PHI_SMALL
++ X_SMALL
++ TSY_SMALL
++ CHERV_SMALL
++ SHA_SMALL
++ SHA_SMALL DESCENDER BOTTOM3=X
++ HARD_SMALL
++ YERY_SMALL
++ SOFT_SMALL
++ +IE_SMALL
++ YU_SMALL
++ YA_SMALL
++ E_SMALL GRAVE
++ E_SMALL DIAERESIS
++ DJE_SMALL
++ GAMMA_SMALLCAP ACUTE
++ IE_SMALL
++ S_SMALL
++ I_SMALL DOT ABOVE=X
++ DIAERESIS I_SMALL
++ J_SMALL DOT ABOVE=X
++ LJE_SMALL
++ NJE_SMALL
++ TSHE_SMALL
++ K_SMALLCAP ACUTE
++ IZHE_SMALL GRAVE
++ Y_SMALL BREVE
++ DZHE_SMALL
++ OMEGA_LARGE
++ OMEGA_SMALL
++ YAT_CAP
++ YAT_SMALL
++ IYE_CAP
++ IYE_SMALL
++ YUS_LITTLE_CAP
++ YUS_LITTLE_SMALL
++ IYUS_LITTLE_CAP
++ IYUS_LITTLE_SMALL
++ YUS_BIG_CAP
++ YUS_BIG_SMALL
++ IYUS_BIG_CAP
++ IYUS_BIG_SMALL
++ KSI_CAP
++ KSI_SMALL
++ PSI_CAP
++ PSI_SMALL
++ FITA_CAP
++ FITA_SMALL
++ V_CAP # Izhitsa
++ V_SMALL
++ V_CAP GRAVE_DBL ABOVE=X
++ V_SMALL GRAVE_DBL
++( O_CAP
++) Y_SMALL
++( O_SMALL
++) Y_SMALL
++ OMEGA_ROUND_CAP
++ OMEGA_ROUND_SMALL
++ OMEGA_LARGE POKRYTIE ABOVE=X
++ OMEGA_SMALL POKRYTIE
++ OMEGA_LARGE T_CAP_ABOVE ABOVE=X
++ OMEGA_SMALL T_CAP_ABOVE
++ KOPPA_CYR_CAP
++ KOPPA_CYR_SMALL
++ THOUSANDS_CYR
++ TITLO
++ PALATALIZATION_CYR
++ GRAVE
++ ACUTE
++ POKRYTIE
++ HUNDRED_THOUSANDS_CYR
++ MILLIONS_CYR
++ IZHE_CAP TAIL BOTTOM2=X BREVE ABOVE=X
++ IZHE_SMALL TAIL BOTTOM2=X BREVE ABOVE=X
++ SOFT_CAP STROKE_SMALL_H MIDTOP=X
++ SEMISOFT_SMALL
++ P_CAP !SLASH_SMALL_V TICK=X
++ P_SMALL !SLASH_SMALL_V TICK=X
++ GAMMA_CAP_UPTURN
++ GAMMA_SMALLCAP_UPTURN
++ GAMMA_CAP STROKE_H MIDDLE=X
++ GAMMA_SMALLCAP STROKE_H MIDDLE=X
++w GAMMA_CAP MIDDLE_HOOK_CAP MIDHOOK=X
++w GAMMA_SMALLCAP MIDDLE_HOOK_SMALL MIDHOOK=X
++ ZHIVETE_CAP DESCENDER BOTTOM3=X
++ ZHIVETE_SMALL DESCENDER BOTTOM3=X
++ ZEMLYA_CAP CEDILLA
++ ZEMLYA_SMALL CEDILLA
++ K_CAP DESCENDER BOTTOM2=X
++ K_SMALLCAP DESCENDER BOTTOM2=X
++ K_CAP STROKE_V MIDDLE=X
++ K_SMALLCAP STROKE_V MIDDLE=X
++ K_CAP STROKE_SMALL_H MIDTOP=X
++ K_SMALL STROKE_SMALL_H MIDTOP=X
++ K_CAP_BASHKIR
++ K_SMALL_BASHKIR
++ H_CAP DESCENDER BOTTOM2=X
++ H_SMALLCAP DESCENDER BOTTOM2=X
++ HGAMMA_CAP
++ HGAMMA_SMALLCAP
++w PI_CAP MIDDLE_HOOK_CAP MIDHOOK=X
++w PI_SMALLCAP MIDDLE_HOOK_SMALL MIDHOOK=X
++ HA_ABKHAZ_CAP
++ HA_ABKHAZ_SMALL
++ C_CAP CEDILLA
++ C_SMALL CEDILLA
++ T_CAP DESCENDER BOTTOM=X
++ T_SMALLCAP DESCENDER BOTTOM=X
++ Y_CAP
++ Y_SMALL_STRAIGHT
++ Y_CAP STROKE_H MIDBOTTOM=X
++ Y_SMALL_STRAIGHT STROKE_H MIDBOTTOM=X
++ X_CAP DESCENDER BOTTOM2=X
++ X_SMALL DESCENDER BOTTOM2=X
++ TTSE_CAP
++ TTSE_SMALL
++ CHERV_CAP DESCENDER BOTTOM=X
++ CHERV_SMALL DESCENDER BOTTOM=X
++ CHERV_CAP STROKE_V MIDDLE=X
++ CHERV_SMALL STROKE_V MIDDLE=X
++ H_LARGE
++ H_SMALL
++ CHE_LARGE
++ CHE_SMALL
++ CHE_LARGE OGONEK
++ CHE_SMALL OGONEK
++ I_CAP
++ ZHIVETE_CAP BREVE ABOVE=X
++ ZHIVETE_SMALL BREVE
++ K_CAP HOOK BOTTOM2=X
++ K_SMALLCAP HOOK BOTTOM2=X
++ LYUDI_CAP TAIL BOTTOM2=X
++ LYUDI_SMALL TAIL BOTTOM2=X
++ H_CAP HOOK BOTTOM2=X
++ H_SMALLCAP HOOK BOTTOM2=X
++ H_CAP TAIL BOTTOM2=X
++ H_SMALLCAP TAIL BOTTOM2=X
++ CHERV_CAP !DESCENDER BOTTOM=X
++ CHERV_SMALL !DESCENDER BOTTOM=X
++ M_CAP TAIL BOTTOM3=X
++ M_SMALLCAP TAIL BOTTOM3=X
++ I_CAP
++ A_CAP BREVE ABOVE=X
++ A_SMALL BREVE
++ A_CAP DIAERESIS ABOVE=X
++ A_SMALL DIAERESIS
++ AE_CAP
++ AE_SMALL
++ E_CAP BREVE ABOVE=X
++ E_SMALL BREVE
++ %E_LARGE
++ +E_SMALL
++ %E_LARGE DIAERESIS BELOW=X
++ +E_SMALL DIAERESIS
++ ZHIVETE_CAP DIAERESIS ABOVE=X
++ ZHIVETE_SMALL DIAERESIS
++ ZEMLYA_CAP DIAERESIS ABOVE=X
++ ZEMLYA_SMALL DIAERESIS
++ DIGIT_3
++ EZH_SMALL
++ IZHE_CAP MACRON ABOVE=X
++ IZHE_SMALL MACRON
++ IZHE_CAP DIAERESIS ABOVE=X
++ IZHE_SMALL DIAERESIS
++ O_CAP DIAERESIS ABOVE=X
++ O_SMALL DIAERESIS
++ FITA_CAP
++ FITA_SMALL
++ FITA_CAP DIAERESIS ABOVE=X
++ FITA_SMALL DIAERESIS
++ !IE_CAP DIAERESIS ABOVE=X
++ !IE_SMALL DIAERESIS
++ Y_LARGE MACRON ABOVE=X
++ Y_SMALL MACRON
++ Y_LARGE DIAERESIS ABOVE=X
++ Y_SMALL DIAERESIS
++ Y_LARGE ACUTE_DBL ABOVE=X
++ Y_SMALL ACUTE_DBL
++ CHERV_CAP DIAERESIS ABOVE=X
++ CHERV_SMALL DIAERESIS
++ GAMMA_CAP DESCENDER BOTTOM=X
++ GAMMA_SMALLCAP DESCENDER BOTTOM=X
++ YERY_CAP DIAERESIS ABOVE=X
++ YERY_SMALL DIAERESIS
++ GAMMA_CAP_HOOK STROKE_H MIDDLE=X
++ GAMMA_SMALLCAP_HOOK STROKE_H MIDDLE=X
++ X_CAP HOOK BOTTOM2=X
++ X_SMALL HOOK BOTTOM2=X
++ X_CAP STROKE_H CENTER=X
++ X_SMALL STROKE_H CENTER=X
+
+// Cyrillic Supplement (500-52F)
++ !SOFT_CAP
++ !SOFT_SMALL
++ DJE_KOMI_CAP
++ DJE_KOMI_SMALL
++ ZJE_KOMI_CAP
++ ZJE_KOMI_SMALL
++ DZJE_KOMI_CAP
++ DZJE_KOMI_SMALL
++ LJE_KOMI_CAP
++ LJE_KOMI_SMALL
++ HV_CAP
++ HV_SMALLCAP
++ G_CAP
++ G_SMALLCAP
++ TJE_KOMI_CAP
++ TJE_KOMI_SMALL
++ EPSILON_LARGE
++ EPSILON_SMALL
++ LYUDI_CAP HOOK BOTTOM2=X
++ LYUDI_SMALL HOOK BOTTOM2=X
++ LYUDIX_CAP
++ LYUDIX_SMALL
++ PX_CAP
++ PX_SMALL
++ YAE_CAP
++ YAE_SMALL
++ Q_CAP
++ Q_SMALL
++ W_CAP
++ W_SMALL
++ K_CAP !SLASH_SMALL_H MIDARM=X
++ K_SMALLCAP !SLASH_SMALL_H MIDARM=X
++w LYUDI_CAP MIDDLE_HOOK_CAP MIDHOOK=X
++w LYUDI_SMALL MIDDLE_HOOK_SMALL MIDHOOK=X
++w H_CAP MIDDLE_HOOK_CAP MIDHOOK=X
++w H_SMALLCAP MIDDLE_HOOK_SMALL MIDHOOK=X
+skipcodes 12
+
+// Armenian (530-58F)
+skipcodes 96 0
+
+// Hebrew (590-5FF)
+skipcodes 112 0
+
+// Arabic (600-6FF)
+skipcodes 256 0
+
+// Syriac (700-74F)
+skipcodes 80 0
+
+// Arabic Supplement (750-77F)
+skipcodes 48 0
+
+// Taana (780-7BF)
+skipcodes 64 0
+
+// N'Ko (7C0-7FF)
+skipcodes 64 0
+
+// - (800-8FF)
+skipcodes 256 0
+
+// Devanagari (900-97F)
+skipcodes 128 0
+
+// Bengali (980-9FF)
+skipcodes 128 0
+
+// Gurmukhi (A00-A7F)
+skipcodes 128 0
+
+// Gujarati (A80-AFF)
+skipcodes 128 0
+
+// Oriya (B00-B7F)
+skipcodes 128 0
+
+// Tamil (B80-BFF)
+skipcodes 128 0
+
+// Telugu (C00-C7F)
+skipcodes 128 0
+
+// Kannada (C80-CFF)
+skipcodes 128 0
+
+// Malayalam (D00-D7F)
+skipcodes 128 0
+
+// Simhala (D80-DFF)
+skipcodes 128 0
+
+// Thai (E00-E7F)
+skipcodes 128 0
+
+// Lao (E80-EFF)
+skipcodes 128 0
+
+// Tibetan (F00-FFF)
+skipcodes 256 0
+
+// Myanmar (1000-109F)
+skipcodes 160 0
+
+// Geogian (10A0-10FF)
+skipcodes 96 0
+
+// Hangul Jamo (1100-11FF)
+skipcodes 256 0
+
+// Ethiopic (1200-137F)
+skipcodes 384 0
+
+// Ethiopic Supplement (1380-139F)
+skipcodes 32 0
+
+// Cherokee (13A0-13FF)
+skipcodes 96 0
+
+// Unified Canadian Aboriginal Syllabics (1400-167F)
+skipcodes 640 0
+
+// Ogham (1680-169F)
+skipcodes 32 0
+
+// Runic (16A0-16FF)
+skipcodes 96 0
+
+// Tagalog (1700-171F)
+skipcodes 32 0
+
+// Hanunoo (1720-173F)
+skipcodes 32 0
+
+// Buhid (1740-175F)
+skipcodes 32
+
+// Tagbanwa (1760-177F)
+skipcodes 32
+
+// Khmer (1780-17FF)
+skipcodes 128
+
+// Mongolian (1800-18AF)
+skipcodes 176
+
+// - (18B0-18FF)
+skipcodes 80
+
+// Limbu (1900-194F)
+skipcodes 80
+
+// Tai Le (1950-197F)
+skipcodes 48
+
+// New Tai Lue (1980-19DF)
+skipcodes 96
+
+// Khmer Symbols (19E0-19FF)
+skipcodes 32
+
+// Buginese (1A00-1A1F)
+skipcodes 32
+
+// - (1A20-1AFF)
+skipcodes 224
+
+// Balinese (1B00-1B7F)
+skipcodes 128
+
+// Sudanese (1B80-1BBF)
+skipcodes 64
+
+// - (1BC0-1BFF)
+skipcodes 64
+
+// Lepcha (1C00-1C4F)
+skipcodes 80
+
+// Ol Chiki (1C50-1C7F)
+skipcodes 48
+
+// - (1C80-1CFF)
+skipcodes 128
+
+// Phonetic Extensions (1D00-1D7F)
++ A_SMALLCAP
++ AE_SMALLCAP
++ +AE_SMALL
++ B_SMALLCAP STROKE_SMALL_H MIDBOTTOM=X
++ C_SMALL
++ D_SMALLCAP
++ D_SMALLCAP STROKE_SMALL_H MIDDLE=X
++ E_SMALLCAP
++ +EPSILON_SMALL
++ +I_SMALL +DOT ABOVE=X
++ J_SMALLCAP
++ K_SMALLCAP
++ L_SMALLCAP SLASH_SMALL_H MIDDLE=X
++ M_SMALLCAP
++ !N_SMALLCAP
++ O_SMALL
+
++ +C_SMALL
++ O_SMALL_SIDE
++ +C_SMALL_SIDE
++ O_SMALL_STROKE_SIDE
++ +OE_SMALL
++ OU_SMALLCAP
++ +O_SMALL_HALF
++ O_SMALL_HALF
++ P_SMALLCAP
++ !R_SMALLCAP
++ +R_SMALLCAP
++ T_SMALLCAP
++ U_SMALLCAP
++ U_SMALL_SIDE
++p U_SMALL_SIDE DIAERESIS_SIDE ABOVE=X
++ +M_SMALL_SIDE
+
++ V_SMALL
++ W_SMALL
++ Z_SMALL
++ DIGIT_3_SMALL
++ +S_CAP STROKE_V MIDDLE=X
++ +GAMMA_AFR_SMALLCAP
++ GAMMA_SMALLCAP
++ LAMBDA_SMALLCAP
++ PI_SMALLCAP
++ P_SMALLCAP
++ PSI_SMALLCAP
++ LYUDI_SMALL
++ ^A_SMALLCAP
++ ^AE_SMALLCAP
++ ^B_SMALLCAP
++ ^B_SMALLCAP STROKE_SMALL_H MIDDLE=X
+
++ ^D_SMALLCAP
++ ^E_SMALLCAP
++ `E_SMALLCAP
++ ^G_SMALLCAP
++ ^H_SMALLCAP
++ ^I_SMALLCAP
++ ^J_SMALLCAP
++ ^K_SMALLCAP
++ ^L_SMALLCAP
++ ^M_SMALLCAP
++ ^N_SMALLCAP
++ `N_SMALLCAP
++ ^O_SMALL
++ ^OU_SMALLCAP
++ ^P_SMALLCAP
++ ^R_SMALLCAP
+
++ ^T_SMALLCAP
++ ^U_SMALLCAP
++ ^W_SMALL
++ ^A_TINY
++ ^A_TINY_TURNED
++ ^ALPHA_TINY
++ ^AE_TINY_TURNED
++ ^B_TINY
++ ^D_TINY
++ ^E_TINY
++ ^E_TINY_TURNED
++ ^EPSILON_TINY
++ ^EPSILON_TINY_TURNED
++ ^G_TINY
++ ^I_TINY +DOT BELOW=X
++ ^K_TINY
+
++ ^M_TINY
++ ^ENG_TINY
++ ^O_TINY
++ ^C_TINY_TURNED
++ ^O_TINY_HALF_TOP
++ ^O_TINY_HALF
++ ^P_TINY
++ ^T_TINY
++ ^U_TINY
++ ^U_TINY_SIDE
++ ^M_TINY_TURNED
++ ^V_TINY
++ ^GAMMA_AFR_TINYCAP_TURNED
++ ^BETA_TINY
++ ^GAMMA_TINY
++ ^DELTA_TINY
+
++ ^PHI_TINY
++ ^CHI_TINY
++ .I_TINY DOT ABOVE=X
++ .R_TINY
++ .U_TINY
++ .V_TINY
++ .BETA_TINY
++ .GAMMA_TINY
++ .RHO_TINY
++ .PHI_TINY
++ .CHI_TINY
++ UE_SMALL
++ B_SMALL TILDE MIDTOP=X
++ D_SMALL TILDE MIDTOP=X
++ F_SMALL TILDE MIDDLE=X
++ M_SMALL TILDE MIDDLE=X
+
++ N_SMALL TILDE MIDDLE=X
++ P_SMALL TILDE MIDBOTTOM=X
++ R_SMALL TILDE MIDDLE=X
++ R_SMALL_FISHHOOK TILDE MIDDLE=X
++ S_SMALL TILDE MIDDLE=X
++ T_SMALL TILDE MIDDLE=X
++ Z_SMALL TILDE MIDDLE=X
++ +G_SMALL
++ ^H_SMALLCAP
++ EZH_SMALL_LOOP
++( T_SMALL
++) H_SMALL SLASH_CAP
++ I_SMALLCAP STROKE_SMALL_H MIDDLE=X
++ IOTA_SMALL STROKE_SMALL_H MIDDLE=X
++ P_SMALL LINE_H MIDDLE=CENTER
++ U_SMALLCAP LINE_H MIDDLE=CENTER
++ +OMEGA_SMALLCAP LINE_H MIDDLE=CENTER
+
+// Phonetic Extensions Supplement (1D80-1DBF)
+skipcodes 64
+
+// Combining Diacritical Marks Supplement (1DC0-1DFF)
+skipcodes 64
+
+// Latin Extended Additional (1E00-1EFF)
++ A_CAP +RING BELOW=X
++ A_SMALL +RING BELOW=X
++ B_CAP DOT ABOVE=X
++ B_SMALL DOT ABOVE=X
++ B_CAP +DOT BELOW=X
++ B_SMALL +DOT BELOW=X
++ B_CAP +MACRON BELOW=X
++ B_SMALL +MACRON BELOW=X
++ C_CAP CEDILLA BOTTOM=X ACUTE ABOVE=X
++ C_SMALL CEDILLA BOTTOM=X ACUTE ABOVE=X
++ D_CAP DOT ABOVE=X
++ D_SMALL DOT ABOVE=X
++ D_CAP +DOT BELOW=X
++ D_SMALL +DOT BELOW=X
++ D_CAP +MACRON BELOW=X
++ D_SMALL +MACRON BELOW=X
+
++ D_CAP CEDILLA BOTTOM=X
++ D_SMALL CEDILLA BOTTOM=X
++ D_CAP +CARON BELOW=X
++ D_SMALL +CARON BELOW=X
++ E_CAP MACRON ABOVE=X GRAVE HIGH=X
++ E_SMALL MACRON ABOVE=X GRAVE HIGH=X
++ E_CAP MACRON ABOVE=X ACUTE HIGH=X
++ E_SMALL MACRON ABOVE=X ACUTE HIGH=X
++ E_CAP +CARON BELOW=X
++ E_SMALL +CARON BELOW=X
++ E_CAP +TILDE BELOW=X
++ E_SMALL +TILDE BELOW=X
++ E_CAP CEDILLA BOTTOM=X BREVE ABOVE=X
++ E_SMALL CEDILLA BOTTOM=X BREVE ABOVE=X
++ F_CAP DOT ABOVE=X
++ F_SMALL DOT ABOVE=X
+
++ G_CAP MACRON ABOVE=X
++ G_SMALL MACRON ABOVE=X
++ H_CAP DOT ABOVE=X
++ H_SMALL DOT ABOVE=X
++ H_CAP +DOT BELOW=X
++ H_SMALL +DOT BELOW=X
++ H_CAP DIAERESIS ABOVE=X
++ H_SMALL DIAERESIS ABOVE=X
++ H_CAP CEDILLA BOTTOM1=X
++ H_SMALL CEDILLA BOTTOM1=X
++ H_CAP +BREVE_INV BELOW=X
++ H_SMALL +BREVE_INV BELOW=X
++ I_CAP +TILDE BELOW=X
++ I_SMALL DOT ABOVE=X +TILDE BELOW=X
++ I_CAP DIAERESIS ABOVE=X ACUTE HIGH=X
++ I_SMALL DIAERESIS ABOVE=X ACUTE HIGH=X
+
++ K_CAP ACUTE ABOVE=X
++ K_SMALL ACUTE ABOVE=X
++ K_CAP +DOT BELOW=X
++ K_SMALL +DOT BELOW=X
++ K_CAP +MACRON BELOW=X
++ K_SMALL +MACRON BELOW=X
++ L_CAP +DOT BELOW=X
++ L_SMALL +DOT BELOW=X
++ L_CAP MACRON ABOVE=X +DOT BELOW=X
++ L_SMALL MACRON ABOVE=X +DOT BELOW=X
++ L_CAP +MACRON BELOW=X
++ L_SMALL +MACRON BELOW=X
++ L_CAP +CARON BELOW=X
++ L_SMALL +CARON BELOW=X
++ M_CAP ACUTE ABOVE=X
++ M_SMALL ACUTE ABOVE=X
+
++ M_CAP DOT ABOVE=X
++ M_SMALL DOT ABOVE=X
++ M_CAP +DOT BELOW=X
++ M_SMALL +DOT BELOW=X
++ N_CAP DOT ABOVE=X
++ N_SMALL DOT ABOVE=X
++ N_CAP +DOT BELOW=X
++ N_SMALL +DOT BELOW=X
++ N_CAP +MACRON BELOW=X
++ N_SMALL +MACRON BELOW=X
++ N_CAP +CARON BELOW=X
++ N_SMALL +CARON BELOW=X
++ O_CAP TILDE ABOVE=X ACUTE HIGH=X
++ O_SMALL TILDE ABOVE=X ACUTE HIGH=X
++ O_CAP TILDE ABOVE=X DIAERESIS HIGH=X
++ O_SMALL TILDE ABOVE=X DIAERESIS HIGH=X
+
++ O_CAP MACRON ABOVE=X GRAVE HIGH=X
++ O_SMALL MACRON ABOVE=X GRAVE HIGH=X
++ O_CAP MACRON ABOVE=X ACUTE HIGH=X
++ O_SMALL MACRON ABOVE=X ACUTE HIGH=X
++ P_CAP ACUTE ABOVE=X
++ P_SMALL ACUTE ABOVE=X
++ P_CAP DOT ABOVE=X
++ P_SMALL DOT ABOVE=X
++ R_CAP DOT ABOVE=X
++ R_SMALL DOT ABOVE=X
++ R_CAP +DOT BELOW=X
++ R_SMALL +DOT BELOW=X
++ R_CAP MACRON ABOVE=X +DOT BELOW=X
++ R_SMALL MACRON ABOVE=X +DOT BELOW=X
++ R_CAP +MACRON BELOW=X
++ R_SMALL +MACRON BELOW=X
++ S_CAP DOT ABOVE=X
++ S_SMALL DOT ABOVE=X
++ S_CAP +DOT BELOW=X
++ S_SMALL +DOT BELOW=X
++ S_CAP ACUTE_DOT ABOVE=X
++ S_SMALL ACUTE_DOT ABOVE=X
++ S_CAP CARON ABOVE=X DOT HIGH=X
++ S_SMALL CARON ABOVE=X DOT HIGH=X
++ S_CAP DOT ABOVE=X +DOT BELOW=X
++ S_SMALL DOT ABOVE=X +DOT BELOW=X
++ T_CAP DOT ABOVE=X
++ T_SMALL DOT ABOVE=X
++ T_CAP +DOT BELOW=X
++ T_SMALL +DOT BELOW=X
++ T_CAP +MACRON BELOW=X
++ T_SMALL +MACRON BELOW=X
+
++ T_CAP +CARON BELOW=X
++ T_SMALL +CARON BELOW=X
++ U_CAP +DIAERESIS BELOW=X
++ U_SMALL +DIAERESIS BELOW=X
++ U_CAP +TILDE BELOW=X
++ U_SMALL +TILDE BELOW=X
++ U_CAP +CARON BELOW=X
++ U_SMALL +CARON BELOW=X
++ U_CAP TILDE ABOVE=X ACUTE HIGH=X
++ U_SMALL TILDE ABOVE=X ACUTE HIGH=X
++ U_CAP MACRON ABOVE=X DIAERESIS HIGH=X
++ U_SMALL MACRON ABOVE=X DIAERESIS HIGH=X
++ V_CAP TILDE ABOVE=X
++ V_SMALL TILDE ABOVE=X
++ V_CAP +DOT BELOW=X
++ V_SMALL +DOT BELOW=X
+
++ W_CAP GRAVE ABOVE=X
++ W_SMALL GRAVE ABOVE=X
++ W_CAP ACUTE ABOVE=X
++ W_SMALL ACUTE ABOVE=X
++ W_CAP DIAERESIS ABOVE=X
++ W_SMALL DIAERESIS ABOVE=X
++ W_CAP DOT ABOVE=X
++ W_SMALL DOT ABOVE=X
++ W_CAP +DOT BELOW=X
++ W_SMALL +DOT BELOW=X
++ X_CAP DOT ABOVE=X
++ X_SMALL DOT ABOVE=X
++ X_CAP DIAERESIS ABOVE=X
++ X_SMALL DIAERESIS ABOVE=X
++ Y_CAP DOT ABOVE=X
++ Y_SMALL DOT ABOVE=X
+
++ Z_CAP CIRCUMFLEX ABOVE=X
++ Z_SMALL CIRCUMFLEX ABOVE=X
++ Z_CAP +DOT BELOW=X
++ Z_SMALL +DOT BELOW=X
++ Z_CAP +MACRON BELOW=X
++ Z_SMALL +MACRON BELOW=X
++ H_SMALL +MACRON BELOW=X
++ T_SMALL DIAERESIS ABOVE=X
++ W_SMALL RING ABOVE=X
++ Y_SMALL RING ABOVE=X
++w A_SMALL !RING_HALF HALFRING=X
++ S_LONG_SMALL DOT ABOVE=X
++ S_LONG_SMALL SLASH_SMALL_H MIDDLE=X
++ S_LONG_SMALL STROKE_SMALL_H MIDTOP=X
++ ESZETT_CAP
++ DELTA_SMALL
+
++ A_CAP +DOT BELOW=X
++ A_SMALL +DOT BELOW=X
++ A_CAP +OGONEK ABOVE=X
++ A_SMALL +OGONEK ABOVE=X
++ A_CAP CIRCUMFLEX_ACUTE ABOVE=X
++ A_SMALL CIRCUMFLEX_ACUTE ABOVE=X
++ A_CAP CIRCUMFLEX_GRAVE ABOVE=X
++ A_SMALL CIRCUMFLEX_GRAVE ABOVE=X
++ A_CAP CIRCUMFLEX_HOOK ABOVE=X
++ A_SMALL CIRCUMFLEX_HOOK ABOVE=X
++ A_CAP CIRCUMFLEX ABOVE=X TILDE HIGH=X
++ A_SMALL CIRCUMFLEX ABOVE=X TILDE HIGH=X
++ A_CAP CIRCUMFLEX ABOVE=X +DOT BELOW=X
++ A_SMALL CIRCUMFLEX ABOVE=X +DOT BELOW=X
++ A_CAP BREVE ABOVE=X ACUTE HIGH=X
++ A_SMALL BREVE ABOVE=X ACUTE HIGH=X
+
++ A_CAP BREVE ABOVE=X GRAVE HIGH=X
++ A_SMALL BREVE ABOVE=X GRAVE HIGH=X
++ A_CAP BREVE_HOOK ABOVE=X
++ A_SMALL BREVE_HOOK ABOVE=X
++ A_CAP BREVE ABOVE=X TILDE HIGH=X
++ A_SMALL BREVE ABOVE=X TILDE HIGH=X
++ A_CAP BREVE ABOVE=X +DOT BELOW=X
++ A_SMALL BREVE ABOVE=X +DOT BELOW=X
++ E_CAP +DOT BELOW=X
++ E_SMALL +DOT BELOW=X
++ E_CAP +OGONEK ABOVE=X
++ E_SMALL +OGONEK ABOVE=X
++ E_CAP TILDE ABOVE=X
++ E_SMALL TILDE ABOVE=X
++ E_CAP CIRCUMFLEX_ACUTE ABOVE=X
++ E_SMALL CIRCUMFLEX_ACUTE ABOVE=X
+
++ E_CAP CIRCUMFLEX_GRAVE ABOVE=X
++ E_SMALL CIRCUMFLEX_GRAVE ABOVE=X
++ E_CAP CIRCUMFLEX_HOOK ABOVE=X
++ E_SMALL CIRCUMFLEX_HOOK ABOVE=X
++ E_CAP CIRCUMFLEX ABOVE=X TILDE HIGH=X
++ E_SMALL CIRCUMFLEX ABOVE=X TILDE HIGH=X
++ E_CAP CIRCUMFLEX ABOVE=X +DOT BELOW=X
++ E_SMALL CIRCUMFLEX ABOVE=X +DOT BELOW=X
++ I_CAP +OGONEK ABOVE=X
++ I_SMALL +OGONEK ABOVE=X
++ I_CAP +DOT BELOW=X
++ I_SMALL DOT ABOVE=X +DOT BELOW=X
++ O_CAP +DOT BELOW=X
++ O_SMALL +DOT BELOW=X
++ O_CAP +OGONEK ABOVE=X
++ O_SMALL +OGONEK ABOVE=X
+
++ O_CAP CIRCUMFLEX_ACUTE ABOVE=X
++ O_SMALL CIRCUMFLEX_ACUTE ABOVE=X
++ O_CAP CIRCUMFLEX_GRAVE ABOVE=X
++ O_SMALL CIRCUMFLEX_GRAVE ABOVE=X
++ O_CAP CIRCUMFLEX_HOOK ABOVE=X
++ O_SMALL CIRCUMFLEX_HOOK ABOVE=X
++ O_CAP CIRCUMFLEX ABOVE=X TILDE HIGH=X
++ O_SMALL CIRCUMFLEX ABOVE=X TILDE HIGH=X
++ O_CAP CIRCUMFLEX ABOVE=X +DOT BELOW=X
++ O_SMALL CIRCUMFLEX ABOVE=X +DOT BELOW=X
++ O_CAP HORN HORN=X ACUTE ABOVE=X
++ O_SMALL HORN HORN=X ACUTE ABOVE=X
++ O_CAP HORN HORN=X GRAVE ABOVE=X
++ O_SMALL HORN HORN=X GRAVE ABOVE=X
++ O_CAP HORN HORN=X +OGONEK ABOVE=X
++ O_SMALL HORN HORN=X +OGONEK ABOVE=X
+
++ O_CAP HORN HORN=X +TILDE ABOVE=X
++ O_SMALL HORN HORN=X +TILDE ABOVE=X
++ O_CAP HORN HORN=X +DOT BELOW=X
++ O_SMALL HORN HORN=X +DOT BELOW=X
++ U_CAP +DOT BELOW=X
++ U_SMALL +DOT BELOW=X
++ U_CAP +OGONEK ABOVE=X
++ U_SMALL +OGONEK ABOVE=X
++ U_CAP HORN TOP2=X ACUTE ABOVE=X
++ U_SMALL HORN TOP2=X ACUTE ABOVE=X
++ U_CAP HORN TOP2=X GRAVE ABOVE=X
++ U_SMALL HORN TOP2=X GRAVE ABOVE=X
++ U_CAP HORN TOP2=X +OGONEK ABOVE=X
++ U_SMALL HORN TOP2=X +OGONEK ABOVE=X
++ U_CAP HORN TOP2=X +TILDE ABOVE=X
++ U_SMALL HORN TOP2=X +TILDE ABOVE=X
+
++ U_CAP HORN TOP2=X +DOT BELOW=X
++ U_SMALL HORN TOP2=X +DOT BELOW=X
++ Y_CAP GRAVE ABOVE=X
++ Y_SMALL GRAVE ABOVE=X
++ Y_CAP +DOT BELOW=X
++ Y_SMALL +DOT BELOW=X
++ Y_CAP +OGONEK ABOVE=X
++ Y_SMALL +OGONEK ABOVE=X
++ Y_CAP TILDE ABOVE=X
++ Y_SMALL TILDE ABOVE=X
++ LL_CAP
++ LL_SMALL
++ V_MIDWELSH_CAP
++ V_MIDWELSH_SMALL
++ Y_LARGE_LOOP
++ Y_SMALL_LOOP
+
+// Greek Extended (1F00-1FFF)
++ ALPHA_SMALL PSILI ABOVE=X
++ ALPHA_SMALL DASIA ABOVE=X
++ ALPHA_SMALL PSILI_VARIA ABOVE=X
++ ALPHA_SMALL DASIA_VARIA ABOVE=X
++ ALPHA_SMALL PSILI_OXIA ABOVE=X
++ ALPHA_SMALL DASIA_OXIA ABOVE=X
++ ALPHA_SMALL PSILI ABOVE=X TILDE HIGH=X
++ ALPHA_SMALL DASIA ABOVE=X TILDE HIGH=X
++p A_CAP PSILI TONOS=X
++p A_CAP DASIA TONOS=X
++p A_CAP PSILI_VARIA TONOS=X2
++p A_CAP DASIA_VARIA TONOS=X2
++p A_CAP PSILI_OXIA TONOS=X2
++p A_CAP DASIA_OXIA TONOS=X2
++p A_CAP TILDE PERIS=X PSILI TONOS=X
++p A_CAP TILDE PERIS=X DASIA TONOS=X
+
++ EPSILON_SMALL PSILI ABOVE=X
++ EPSILON_SMALL DASIA ABOVE=X
++ EPSILON_SMALL PSILI_VARIA ABOVE=X
++ EPSILON_SMALL DASIA_VARIA ABOVE=X
++ EPSILON_SMALL PSILI_OXIA ABOVE=X
++ EPSILON_SMALL DASIA_OXIA ABOVE=X
+skipcodes 2
++p E_CAP PSILI TONOS=X
++p E_CAP DASIA TONOS=X
++p E_CAP PSILI_VARIA TONOS=X2
++p E_CAP DASIA_VARIA TONOS=X2
++p E_CAP PSILI_OXIA TONOS=X2
++p E_CAP DASIA_OXIA TONOS=X2
+skipcodes 2
+
++ ETA_SMALL PSILI ABOVE=X
++ ETA_SMALL DASIA ABOVE=X
++ ETA_SMALL PSILI_VARIA ABOVE=X
++ ETA_SMALL DASIA_VARIA ABOVE=X
++ ETA_SMALL PSILI_OXIA ABOVE=X
++ ETA_SMALL DASIA_OXIA ABOVE=X
++ ETA_SMALL PSILI ABOVE=X TILDE HIGH=X
++ ETA_SMALL DASIA ABOVE=X TILDE HIGH=X
++p H_CAP PSILI TONOS=X
++p H_CAP DASIA TONOS=X
++p H_CAP PSILI_VARIA TONOS=X2
++p H_CAP DASIA_VARIA TONOS=X2
++p H_CAP PSILI_OXIA TONOS=X2
++p H_CAP DASIA_OXIA TONOS=X2
++p H_CAP TILDE PERIS=X PSILI TONOS=X
++p H_CAP TILDE PERIS=X DASIA TONOS=X
+
++ IOTA_SMALL PSILI ABOVE=X
++ IOTA_SMALL DASIA ABOVE=X
++ IOTA_SMALL PSILI_VARIA ABOVE=X
++ IOTA_SMALL DASIA_VARIA ABOVE=X
++ IOTA_SMALL PSILI_OXIA ABOVE=X
++ IOTA_SMALL DASIA_OXIA ABOVE=X
++ IOTA_SMALL PSILI ABOVE=X TILDE HIGH=X
++ IOTA_SMALL DASIA ABOVE=X TILDE HIGH=X
++p I_CAP PSILI TONOS=X
++p I_CAP DASIA TONOS=X
++p I_CAP PSILI_VARIA TONOS=X2
++p I_CAP DASIA_VARIA TONOS=X2
++p I_CAP PSILI_OXIA TONOS=X2
++p I_CAP DASIA_OXIA TONOS=X2
++p I_CAP TILDE PERIS=X PSILI TONOS=X
++p I_CAP TILDE PERIS=X DASIA TONOS=X
+
++ O_SMALL PSILI ABOVE=X
++ O_SMALL DASIA ABOVE=X
++ O_SMALL PSILI_VARIA ABOVE=X
++ O_SMALL DASIA_VARIA ABOVE=X
++ O_SMALL PSILI_OXIA ABOVE=X
++ O_SMALL DASIA_OXIA ABOVE=X
+skipcodes 2
++p O_CAP PSILI TONOS=X
++p O_CAP DASIA TONOS=X
++p O_CAP PSILI_VARIA TONOS=X2
++p O_CAP DASIA_VARIA TONOS=X2
++p O_CAP PSILI_OXIA TONOS=X2
++p O_CAP DASIA_OXIA TONOS=X2
+skipcodes 2
+
++ UPSILON_SMALL PSILI ABOVE=X
++ UPSILON_SMALL DASIA ABOVE=X
++ UPSILON_SMALL PSILI_VARIA ABOVE=X
++ UPSILON_SMALL DASIA_VARIA ABOVE=X
++ UPSILON_SMALL PSILI_OXIA ABOVE=X
++ UPSILON_SMALL DASIA_OXIA ABOVE=X
++ UPSILON_SMALL PSILI ABOVE=X TILDE HIGH=X
++ UPSILON_SMALL DASIA ABOVE=X TILDE HIGH=X
+skipcodes 1
++p Y_CAP DASIA TONOS=X
+skipcodes 1
++p Y_CAP DASIA_VARIA TONOS=X2
+skipcodes 1
++p Y_CAP DASIA_OXIA TONOS=X2
+skipcodes 1
++p Y_CAP TILDE PERIS=X DASIA TONOS=X
+
++ OMEGA_SMALL PSILI ABOVE=X
++ OMEGA_SMALL DASIA ABOVE=X
++ OMEGA_SMALL PSILI_VARIA ABOVE=X
++ OMEGA_SMALL DASIA_VARIA ABOVE=X
++ OMEGA_SMALL PSILI_OXIA ABOVE=X
++ OMEGA_SMALL DASIA_OXIA ABOVE=X
++ OMEGA_SMALL PSILI ABOVE=X TILDE HIGH=X
++ OMEGA_SMALL DASIA ABOVE=X TILDE HIGH=X
++p OMEGA_CAP PSILI TONOS=X
++p OMEGA_CAP DASIA TONOS=X
++p OMEGA_CAP PSILI_VARIA TONOS=X2
++p OMEGA_CAP DASIA_VARIA TONOS=X2
++p OMEGA_CAP PSILI_OXIA TONOS=X2
++p OMEGA_CAP DASIA_OXIA TONOS=X2
++p OMEGA_CAP TILDE PERIS=X PSILI TONOS=X
++p OMEGA_CAP TILDE PERIS=X DASIA TONOS=X
+
++ ALPHA_SMALL ACUTE ABOVE=X
++ ALPHA_SMALL ACUTE ABOVE=X
++ EPSILON_SMALL ACUTE ABOVE=X
++ EPSILON_SMALL ACUTE ABOVE=X
++ ETA_SMALL ACUTE ABOVE=X
++ ETA_SMALL ACUTE ABOVE=X
++ IOTA_SMALL ACUTE ABOVE=X
++ IOTA_SMALL ACUTE ABOVE=X
++ O_SMALL ACUTE ABOVE=X
++ O_SMALL ACUTE ABOVE=X
++ UPSILON_SMALL ACUTE ABOVE=X
++ UPSILON_SMALL ACUTE ABOVE=X
++ OMEGA_SMALL ACUTE ABOVE=X
++ OMEGA_SMALL ACUTE ABOVE=X
+skipcodes 2
+
++ ALPHA_SMALL PSILI ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL DASIA ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL PSILI_VARIA ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL DASIA_VARIA ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL PSILI_OXIA ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL DASIA_OXIA ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL PSILI ABOVE=X TILDE HIGH=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL DASIA ABOVE=X TILDE HIGH=X IOTA_BELOW BELOW=X
++p A_CAP PSILI TONOS=X IOTA_BELOW BELOW=X
++p A_CAP DASIA TONOS=X IOTA_BELOW BELOW=X
++p A_CAP PSILI_VARIA TONOS=X2 IOTA_BELOW BELOW=X
++p A_CAP DASIA_VARIA TONOS=X2 IOTA_BELOW BELOW=X
++p A_CAP PSILI_OXIA TONOS=X2 IOTA_BELOW BELOW=X
++p A_CAP DASIA_OXIA TONOS=X2 IOTA_BELOW BELOW=X
++p A_CAP TILDE PERIS=X PSILI TONOS=X IOTA_BELOW BELOW=X
++p A_CAP TILDE PERIS=X DASIA TONOS=X IOTA_BELOW BELOW=X
+
++ ETA_SMALL PSILI ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL DASIA ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL PSILI_VARIA ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL DASIA_VARIA ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL PSILI_OXIA ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL DASIA_OXIA ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL PSILI ABOVE=X TILDE HIGH=X IOTA_BELOW BELOW=X
++ ETA_SMALL DASIA ABOVE=X TILDE HIGH=X IOTA_BELOW BELOW=X
++p H_CAP IOTA_BELOW BELOW=X
++p H_CAP DASIA TONOS=X IOTA_BELOW BELOW=X
++p H_CAP PSILI_VARIA TONOS=X2 IOTA_BELOW BELOW=X
++p H_CAP DASIA_VARIA TONOS=X2 IOTA_BELOW BELOW=X
++p H_CAP PSILI_OXIA TONOS=X2 IOTA_BELOW BELOW=X
++p H_CAP DASIA_OXIA TONOS=X2 IOTA_BELOW BELOW=X
++p H_CAP TILDE PERIS=X PSILI TONOS=X IOTA_BELOW BELOW=X
++p H_CAP TILDE PERIS=X DASIA TONOS=X IOTA_BELOW BELOW=X
+
++ OMEGA_SMALL PSILI ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL DASIA ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL PSILI_VARIA ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL DASIA_VARIA ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL PSILI_OXIA ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL DASIA_OXIA ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL PSILI ABOVE=X TILDE HIGH=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL DASIA ABOVE=X TILDE HIGH=X IOTA_BELOW BELOW=X
++p OMEGA_CAP PSILI TONOS=X IOTA_BELOW BELOW=X
++p OMEGA_CAP DASIA TONOS=X IOTA_BELOW BELOW=X
++p OMEGA_CAP PSILI_VARIA TONOS=X2 IOTA_BELOW BELOW=X
++p OMEGA_CAP DASIA_VARIA TONOS=X2 IOTA_BELOW BELOW=X
++p OMEGA_CAP PSILI_OXIA TONOS=X2 IOTA_BELOW BELOW=X
++p OMEGA_CAP DASIA_OXIA TONOS=X2 IOTA_BELOW BELOW=X
++p OMEGA_CAP TILDE PERIS=X PSILI TONOS=X IOTA_BELOW BELOW=X
++p OMEGA_CAP TILDE PERIS=X DASIA TONOS=X IOTA_BELOW BELOW=X
+
++ ALPHA_SMALL BREVE ABOVE=X
++ ALPHA_SMALL MACRON ABOVE=X
++ ALPHA_SMALL GRAVE ABOVE=X IOTA_BELOW BELOW=X
++ ALPHA_SMALL IOTA_BELOW BELOW=X
++ ALPHA_SMALL ACUTE ABOVE=X IOTA_BELOW BELOW=X
+skipcodes 1
++ ALPHA_SMALL TILDE ABOVE=X
++ ALPHA_SMALL TILDE ABOVE=X IOTA_BELOW BELOW=X
++ A_CAP BREVE ABOVE=X
++ A_CAP MACRON ABOVE=X
++p A_CAP GRAVE TONOS=X
++p A_CAP ACUTE TONOS=X
++ A_CAP IOTA_BELOW BELOW=X
++ PSILI
++ IOTA_BELOW
++ PSILI
+
++ TILDE
++ DIAERESIS_TILDE
++ ETA_SMALL GRAVE ABOVE=X IOTA_BELOW BELOW=X
++ ETA_SMALL IOTA_BELOW BELOW=X
++ ETA_SMALL ACUTE ABOVE=X IOTA_BELOW BELOW=X
+skipcodes 1
++ ETA_SMALL TILDE ABOVE=X
++ ETA_SMALL TILDE ABOVE=X IOTA_BELOW BELOW=X
++p E_CAP GRAVE TONOS=X
++p E_CAP ACUTE TONOS=X
++p H_CAP GRAVE TONOS=X
++p H_CAP ACUTE TONOS=X
++ H_CAP IOTA_BELOW BELOW=X
++ PSILI_VARIA
++ PSILI_OXIA
++ PSILI TILDE HIGH=X
+
++ IOTA_SMALL BREVE ABOVE=X
++ IOTA_SMALL MACRON ABOVE=X
++ IOTA_SMALL DIAERESIS ABOVE=X GRAVE HIGH=X
++ IOTA_SMALL DIAERESIS ABOVE=X ACUTE HIGH=X
+skipcodes 2
++ IOTA_SMALL TILDE ABOVE=X
++ IOTA_SMALL DIAERESIS_TILDE ABOVE=X
++ I_CAP BREVE ABOVE=X
++ I_CAP MACRON ABOVE=X
++p I_CAP GRAVE TONOS=X
++p I_CAP ACUTE TONOS=X
+skipcodes 1
++ DASIA_VARIA
++ DASIA_OXIA
++ DASIA TILDE HIGH=X
+
++ UPSILON_SMALL BREVE ABOVE=X
++ UPSILON_SMALL MACRON ABOVE=X
++ UPSILON_SMALL DIAERESIS ABOVE=X GRAVE HIGH=X
++ UPSILON_SMALL DIAERESIS ABOVE=X ACUTE HIGH=X
++ RHO_SMALL PSILI ABOVE=X
++ RHO_SMALL DASIA ABOVE=X
++ UPSILON_SMALL TILDE ABOVE=X
++ UPSILON_SMALL DIAERESIS_TILDE ABOVE=X
++ Y_CAP BREVE ABOVE=X
++ Y_CAP MACRON ABOVE=X
++p Y_CAP GRAVE TONOS=X
++p Y_CAP ACUTE TONOS=X
++p P_CAP DASIA TONOS=X
++ DIAERESIS GRAVE HIGH=X
++ DIAERESIS ACUTE HIGH=X
++ GRAVE
+
+skipcodes 2
++ OMEGA_SMALL GRAVE ABOVE=X IOTA_BELOW BELOW=X
++ OMEGA_SMALL IOTA_BELOW BELOW=X
++ OMEGA_SMALL ACUTE ABOVE=X IOTA_BELOW BELOW=X
+skipcodes 1
++ OMEGA_SMALL TILDE ABOVE=X
++ OMEGA_SMALL TILDE ABOVE=X IOTA_BELOW BELOW=X
++p O_CAP GRAVE TONOS=X
++p O_CAP ACUTE TONOS=X
++p OMEGA_CAP GRAVE TONOS=X
++p OMEGA_CAP ACUTE TONOS=X
++ OMEGA_CAP IOTA_BELOW BELOW=X
++ ACUTE
++ DASIA
+skipcodes 1
+#skipcodes 256
+// General Punctuation (2000-206F)
++ SPACE_EM
++ SPACE_EN
++ SPACE_EM
++ SPACE_EN
++ SPACE_THICK
++ SPACE_MID
++ SPACE_THIN
++ SPACE_FIGURE
++ SPACE_PUNC
++ SPACE_THIN
++ SPACE_HAIR
++ 0
++ 0
++ 0
++ 0
++ 0
++ HYPHEN
++ HYPHEN
++ DASH_FIGURE
++ DASH_EN
++ DASH_EM
++ DASH_EM
++ LINE_V_DBL
++ LOW_LINE_DBL
++ %COMMA
++ QUOTE_RIGHT
++ COMMA
++ !QUOTE_RIGHT
++ %COMMA_DBL
++ QUOTE_RIGHT_DBL
++ COMMA_DBL
++ !QUOTE_RIGHT_DBL
++ DEI_SMALL
++ DIESIS
++ CIRCLE_SMALL_BLACK
++ TRIANGLE_E_SMALL_BLACK
++ FULL_STOP
++( FULL_STOP
++) FULL_STOP
++( FULL_STOP
++| FULL_STOP
++) FULL_STOP
++ DOT
++ 0
++ 0
++ 0
++ 0
++ 0
++ 0
++ 0
++ 0
++ PERMILLE
++ PERMYRIAD
++ PRIME
++ PRIME_DBL
++ PRIME_TPL
++ !PRIME
++ !PRIME_DBL
++ !PRIME_TPL
++ +CARON
++ GUILLEMET
++ !GUILLEMET
++ MULTIPLY DOTS_4
++( EXCLAM
++) EXCLAM
++ INTERROBANG
++ OVERLINE
++ *TIE
++ TIE
++ CARET_INSERTION
++ ASTERISM
++ HYPHEN
++ SLASH
++ BRACKET_QUILL
++ !BRACKET_QUILL
++( QUESTION
++) QUESTION
++( QUESTION
++) EXCLAM
++( EXCLAM
++) QUESTION
++ ET_TIRONIAN
++ !PI_SMALL
++ BULLET_LEFT
++ !BULLET_LEFT
++ %ASTERISK
++ !SEMICOLON
++ TIE *TIE
++ ASTERISK !ASTERISK
++ ABZUEGLICH
++ WAVE
++ BRACE_OVER
++ PLUS MULTIPLY
++ DOTS_3
++ PRIME_X4
++ DOTS_4
++ DOTS_5
++ COLON
++ DOTS_4
++ PLUS PROPORTION
++ ELLIPSIS_VERT
++ DOTS_FOUR_VERT
++ SPACE_MID
++ 0
++ 0
++ 0
++ 0
++ 0
+skipcodes 5 0
++ 0
++ 0
++ 0
++ 0
++ 0
++ 0
+
+// Subscripts and Superscripts (2070-209F)
++ ^DIGIT_0_SMALL
++ ^I_TINY DOT ABOVE=X
+skipcodes 2 0
++ ^DIGIT_4_SMALL
++ ^DIGIT_5_SMALL
++ ^DIGIT_6_SMALL
++ ^DIGIT_7_SMALL
++ ^DIGIT_8_SMALL
++ ^DIGIT_9_SMALL
++ ^PLUS_SMALL
++ ^MINUS_SMALL
++ ^EQUAL_SMALL
++ ^PAREN_SMALL
++ `PAREN_SMALL
++ ^N_TINY
++ .DIGIT_0_SMALL
++ .DIGIT_1_SMALL
++ .DIGIT_2_SMALL
++ .DIGIT_3_SMALL
++ .DIGIT_4_SMALL
++ .DIGIT_5_SMALL
++ .DIGIT_6_SMALL
++ .DIGIT_7_SMALL
++ .DIGIT_8_SMALL
++ .DIGIT_9_SMALL
++ .PLUS_SMALL
++ .MINUS_SMALL
++ .EQUAL_SMALL
++ .PAREN_SMALL
++ ,PAREN_SMALL
++ 0
++ .A_TINY
++ .E_TINY
++ .O_TINY
++ .X_TINY
++ .E_TINY_TURNED
+skipcodes 11 0
+
+// Currency Symbols (20A0-20CF)
++ ECU
++ C_CAP SLASH_CAP SLASH1=X SLASH_CAP SLASH2=X
++ C_CAP R_SMALL BOTTOM=BOTTOM
++ F_CAP STROKE_H MIDBOTTOM=X
++ POUND STROKE_H MIDDLE=X
++ M_SMALL SLASH_SMALL
++ N_CAP LINE_H_DBL
++( P_CAP
++| T_SMALL
++) S_SMALL
++( R_CAP
++) S_SMALL
++ W_CAP LINE_H_DBL
++ SHEQUEL_NEW
++ D_SMALL STROKE_H MIDTOP=X +MACRON BELOW=X
++ EURO
++ K_CAP STROKE_H MIDDLE=X
++ T_CAP SLASH_SMALL_H_DBL MIDDLE=X
++( DELTA_CAP
++) RHO_SMALL
++ PENNY_GERMAN
++ P_CAP LINE_H TOPRING=CENTER
++ G_CAP LINE_V_CAP
++ LAMBDA_CAP LINE_H_DBL
++ !S_CAP LINE_V_CAP
++ C_SMALL LINE_V_SMALL
+skipcodes 26 0
+
+// Combining Diacritical Marks For Symbols (20D0-20FF)
+skipcodes 48 0
+
+// Letterlike Symbols (2100-214F)
+skipcodes 80 0
+
+// Number Forms (2150-218F)
+skipcodes 64 0
+
+// Arrows (2190-21FF)
++ !ARROW_E
++ ARROW_N
++ ARROW_E
++ *ARROW_N
++ ARROW_E *ARROWHEAD_E
++ ARROW_N *ARROWHEAD_N
++ !ARROW_NE
++ ARROW_NE
++ ~ARROW_NE
++ *ARROW_NE
++ *ARROW_E_SLASH
++ ARROW_E_SLASH
++ !ARROW_E_WAVE
++ ARROW_E_WAVE
++ !ARROW_DBL_E
++ ARROW_DBL_N
++ ARROW_DBL_E
++ *ARROW_DBL_N
++ !ARROW_E_TAIL
++ ARROW_E_TAIL
++ !ARROW_E_BAR
++ ARROW_N_BAR
++ ARROW_E_BAR
++ *ARROW_N_BAR
++ ARROW_NS_BAR
++ !ARROW_E_HOOK
++ ARROW_E_HOOK
++ !ARROW_E_LOOP
++ ARROW_E_LOOP
++ ARROW_WE_WAVE
++ ARROW_WE_SLASH
++ ARROW_ZIGZAG
++ !ARROW_E_N
++ ARROW_E_N
++ *ARROW_E_N
++ ~ARROW_E_N
++ ~ARROW_N_E
++ *ARROW_E_N
++ !ARROW_CLOCKWISE_SEMI
++ ARROW_CLOCKWISE_SEMI
++ !ARROW_NE_TOP_BAR
++ TAB
++ !ARROW_CLOCKWISE_OPEN
++ ARROW_CLOCKWISE_OPEN
++ !HARPOON_UP_E
++ *HARPOON_UP_E
++ HARPOON_RIGHT_N
++ !HARPOON_RIGHT_N
++ HARPOON_UP_E
++ ~HARPOON_UP_E
++ ~HARPOON_RIGHT_N
++ *HARPOON_RIGHT_N
++ !ARROWS_W_E
++ ARROWS_N_S
++ ARROWS_W_E
++ !ARROWS_E_E
++ ARROWS_N_N
++ ARROWS_E_E
++ *ARROWS_N_N
++ HARPOONS_W_E
++ !HARPOONS_W_E
++ *ARROW_E_DBL_SLASH
++ ARROW_WE_DBL_SLASH
++ ARROW_E_DBL_SLASH
++ *ARROW_E_DBL
++ ARROW_N_DBL
++ ARROW_E_DBL
++ *ARROW_N_DBL
++ ARROW_WE_DBL
++ ARROW_NS_DBL
++ !ARROW_NE_DBL
++ ARROW_NE_DBL
++ ~ARROW_NE_DBL
++ *ARROW_NE_DBL
++ !ARROW_E_TPL
++ ARROW_E_TPL
++ !ARROW_E_SQUIGGLE
++ ARROW_E_SQUIGGLE
++ ARROW_N_STROKE_DBL
++ *ARROW_N_STROKE_DBL
++ *ARROW_E_DASHED
++ ARROW_N_DASHED
++ ARROW_E_DASHED
++ *ARROW_N_DASHED
++ *ARROW_BAR_E
++ ARROW_BAR_E
++ *ARROW_E_WHITE
++ ARROW_N_WHITE
++ ARROW_E_WHITE
++ *ARROW_N_WHITE
++ ARROW_N_BAR_WHITE
++ ARROW_N_PEDESTAL_WHITE
++ ARROW_N_PEDESTAL_WHITE_HBAR
++ ARROW_N_PEDESTAL_WHITE_VBAR
++ ARROW_DBL_N_WHITE
++ ARROW_DBL_N_PEDESTAL_WHITE
++ ARROW_E_WALL_WHITE
++ !ARROW_CORNER_NE
++ ~ARROW_CORNER_NE
++ ARROW_NS_WHITE
++ ARROW_E_SMALL_CIRCLE
++ !ARROWS_N_S
++ ARROWS_E_E_E
++ *ARROW_E_STROKE
++ ARROW_E_STROKE
++ ARROW_WE_STROKE
++ *ARROW_E_STROKE_DBL
++ ARROW_E_STROKE_DBL
++ ARROW_WE_STROKE_DBL
++ !ARROW_OPEN_E
++ ARROW_OPEN_E
++ ARROW_OPEN_WE
+
+// Mathematical Operators (2200-22FF)
++ =A_CAP
++ COMPLEMENT
++ DOBRO_SMALL
++ !E_CAP
++ %E_CAP SLASH_CAP
++ CIRCLE_LARGE_SLASH
++ DELTA_CAP
++ %DELTA_CAP
++ ELEMENT
++ ELEMENT_SLASH
++ ELEMENT_SMALL
++ %ELEMENT
++ %ELEMENT_SLASH
++ !ELEMENT_SMALL
++ RECTANGLE_V_BLACK
++ PI_CAP_HUGE
+
++ ~PI_CAP_HUGE
++ SIGMA_CAP_HUGE
++ MINUS
++ *PLUS_MINUS
++ PLUS DOT ABOVE=X
++ SLASH
++ BACKSLASH
++ ASTERISK_OP
++ CIRCLE_SMALL
++ CIRCLE_SMALL_BLACK
++ RADICAL
++ RADICAL ^DIGIT_3_SMALL
++ RADICAL ^DIGIT_4_SMALL
++ PROPORTIONAL
++ INFINITY
++ ANGLE_RIGHT
+
++ ANGLE
++ ANGLE_MEAS
++ ANGLE_ARC
++ LINE_V
++ LINE_V_SLASH
++ LINE_V_DBL
++ LINE_V_DBL_SLASH
++ *OR
++ OR
++ *UNION
++ UNION
++ INTEGRAL
++ INTEGRAL_DBL
++ INTEGRAL_TPL
++ INTEGRAL_CONTOUR
++ INTEGRAL_DBL_CONTOUR
+
++ INTEGRAL_TPL_CONTOUR
++ INTEGRAL_CLOCKWISE
++ INTEGRAL_CONTOUR_CLOCKWISE
++ INTEGRAL_CONTOUR_COUNTERCLOCKWISE
++ THEREFORE
++ *THEREFORE
++ RATIO
++ PROPORTION
++ MINUS DOT ABOVE=BELOW
++ EXCESS
++ MINUS PROPORTION
++ WAVE RATIO
++ WAVE
++ !WAVE
++ !S_LAZY
++ SINE
+
++ WREATH_PRODUCT
++ WAVE SLASH_REL
++ *WAVE_MINUS
++ WAVE_MINUS
++ WAVE_MINUS SLASH_REL
++ WAVE_EQUAL
++ WAVE_NOTEQUAL
++ WAVE_EQUAL SLASH_OP
++ ASYMP
++ ASYMP SLASH_REL
++ ASYMP_MINUS
++ WAVE_TPL
++ !WAVE_EQUAL
++ EQUIVALENT
++ EQUIVALENT_GEOM
++ DIFFERENCE
+
++ EQUAL DOT ABOVE=X
++ EQUAL RATIO
++ IMAGEOF
++ !IMAGEOF
++ COLON_EQUAL
++ !COLON_EQUAL
++ EQUAL CIRCLE_SMALL CENTER=CENTER
++ EQUAL RING ABOVE=X
++ EQUAL BREVE_INV ABOVE=X
++ EQUAL CIRCUMFLEX ABOVE=X
++ EQUAL CARON ABOVE=X
++ EQUAL STAR_SMALL ABOVE=BELOW
++ EQUAL DELTA_CAP_ABOVE
++ EQUAL_DEF
++ EQUAL M_SMALL_ABOVE
++ EQUAL QUESTION_ABOVE
+
++ EQUAL_SLASH
++ IDENTICAL
++ IDENTICAL SLASH_OP
++ STRICTEQV
++ LESS_MINUS
++ !LESS_MINUS
++ LESS_EQUAL
++ !LESS_EQUAL
++ LESS_NOTEQUAL
++ GREATER_NOTEQUAL
++ LESS_LESS
++ !LESS_LESS
++ BETWEEN
++ EQUIVALENT SLASH_REL
++ LESS SLASH_REL
++ !LESS SLASH_REL
+
++ LESS_MINUS SLASH_OP
++ !LESS_MINUS SLASH_OP
++ LESS_WAVE
++ GREATER_WAVE
++ LESS_WAVE SLASH_OP
++ GREATER_WAVE SLASH_OP
++ LESS_GREATER
++ !LESS_GREATER
++ LESS_GREATER SLASH_OP
++ !LESS_GREATER SLASH_OP
++ PRECEDES
++ !PRECEDES
++ PRECEDESEQ
++ !PRECEDESEQ
++ PRECEDES_WAVE
++ SUCCEEDS_WAVE
+
++ PRECEDES SLASH_REL
++ !PRECEDES SLASH_REL
++ SUBSET
++ !SUBSET
++ SUBSET SLASH_REL
++ !SUBSET SLASH_REL
++ SUBSET_MINUS
++ !SUBSET_MINUS
++ SUBSET_MINUS SLASH_OP
++ !SUBSET_MINUS SLASH_OP
++ SUBSET_MINUS SLASH_LINE_H CENTER_M=X
++ !SUBSET_MINUS SLASH_LINE_H CENTER_M=X
++ UNION ARROW_E_SMALL CENTER=CENTER
++ UNION DOT CENTER=CENTER
++ UNION PLUS_SMALL CENTER=CENTER
++ SQIMAGE
+
++ !SQIMAGE
++ SQIMAGE_MINUS
++ !SQIMAGE_MINUS
++ *SQCUP
++ SQCUP
++ CIRCLE PLUS_SMALL CENTER=CENTER
++ CIRCLE MINUS_SMALL CENTER=CENTER
++ CIRCLE MULTIPLY_SMALL CENTER=CENTER
++ CIRCLE SLASH_SMALL CENTER=CENTER
++ CIRCLE DOT CENTER=CENTER
++ CIRCLE CIRCLE_SMALL CENTER=CENTER
++ CIRCLE ASTERISK CENTER=CENTER
++ CIRCLE EQUAL_SMALL CENTER=CENTER
++ CIRCLE DASH_OP_SMALL CENTER=CENTER
++ SQUARE PLUS_SMALL CENTER=CENTER
++ SQUARE MINUS_SMALL CENTER=CENTER
+
++ SQUARE MULTIPLY_SMALL CENTER
++ SQUARE DOT CENTER
++ TACK
++ !TACK
++ *TACK_UP
++ TACK_UP
++ ASSERTION
++ MODELS
++ TRUE
++ FORCES
++ BAR_VERT_TPL_STILE_RIGHT
++ BAR_VERT_DBL_STILE_RIGHT_DBL
++ TACK SLASH_OP
++ TRUE SLASH_OP
++ FORCES SLASH_OP
++ BAR_VERT_DBL_STILE_RIGHT_DBL SLASH_OP
+
++ PRECEDESREL
++ !PRECEDESREL
++ !TRIANGLE_TALL_E
++ TRIANGLE_TALL_E
++ !TRIANGLE_TALL_E_MINUS
++ TRIANGLE_TALL_E_MINUS
++ ORIGINAL
++ !ORIGINAL
++ MULTIMAP
++ TARGET
++ INTERCALATE
++ OR_MINUS
++ *OR_MINUS
++ MINUS_OR
++ ANGLE_RIGHT_ARC
++ TRIANGLE_RA
+
++ *OR_HUGE
++ OR_HUGE
++ *UNION_HUGE
++ UNION_HUGE
++ LOZENGE
++ DOT
++ STAR_SMALL
++ DIVIDE MULTIPLY
++ BOWTIE
++ PRODUCT_NORMAL_FACTOR_SEMIDIRECT
++ !PRODUCT_NORMAL_FACTOR_SEMIDIRECT
++ PRODUCT_SEMIDIRECT
++ !PRODUCT_SEMIDIRECT
++ !WAVE_MINUS
++ OR_CURLY
++ *OR_CURLY
+
++ SUBSET_DBL
++ !SUBSET_DBL
++ *UNION_DBL
++ UNION_DBL
++ PITCHFORK
++ EQUAL LINE_V_DBL
++ LESS DOT INSIDE=CENTER
++ !LESS DOT INSIDE=CENTER
++ LESS_TPL
++ !LESS_TPL
++ LESS_MINUS_GREATER
++ !LESS_MINUS_GREATER
++ ~LESS_MINUS
++ *LESS_MINUS
++ ~PRECEDESEQ
++ *PRECEDESEQ
+
++ ~PRECEDESEQ SLASH_OP
++ *PRECEDESEQ SLASH_OP
++ SQIMAGE_MINUS SLASH_OP
++ !SQIMAGE_MINUS SLASH_OP
++ SQIMAGE_MINUS SLASH_LINE_H CENTER_M=X
++ !SQIMAGE_MINUS SLASH_LINE_H CENTER_M=X
++ LESS_WAVE SLASH_LINE_H CENTER_W=X
++ GREATER_WAVE SLASH_LINE_H CENTER_W=X
++ PRECEDES_WAVE SLASH_LINE_H CENTER_W=X
++ SUCCEEDS_WAVE SLASH_LINE_H CENTER_W=X
++ !TRIANGLE_TALL_E SLASH_OP
++ TRIANGLE_TALL_E SLASH_OP
++ !TRIANGLE_TALL_E_MINUS SLASH_OP
++ TRIANGLE_TALL_E_MINUS SLASH_OP
++ ELLIPSIS_VERT
++ ELLIPSIS_MID
+
++ !ELLIPSIS_DIAG
++ ELLIPSIS_DIAG
++ ELEMENT_STROKE
++ ELEMENT_STROKEBAR
++ ELEMENT_STROKEBAR_SMALL
++ ELEMENT DOT ABOVE=X
++ =ELEMENT_MINUS
++ ~ELEMENT_MINUS_SMALL
++ ELEMENT_MINUS
++ ELEMENT_DBLSTROKE
++ !ELEMENT_STROKE
++ !ELEMENT_STROKEBAR
++ !ELEMENT_STROKEBAR_SMALL
++ %ELEMENT_MINUS
++ *ELEMENT_MINUS_SMALL
++ BAG_MEMBERSHIP
+
+// Miscellaneous Technical (2300-23FF)
++ CIRCLE SLASH_SYM
++ ELECTRIC
++ HOUSE
++ ARROWHEAD_N
++ *ARROWHEAD_N
++ *OR_MINUS
++ PERSPECTIVE
++ LINE_V_WAVY
++ ~FLOOR
++ *FLOOR
++ FLOOR
++ !FLOOR
++ CROP
++ !CROP
++ ~CROP
++ *CROP
+
++ !NOT
++ PILLOW
++ CIRCLE_TOPHALF
++ CIRCLE_TOPHALF MINUS
++ SECTOR
++ TELEPHONE_RECORDER
++ PLUS CIRCLE_MID
++ HASH_SYM
++ PLACE_OF_INTEREST
++ *NOT
++ WATCH
++ HOURGLASS
++ CORNER
++ !CORNER
++ =CORNER
++ %CORNER
+
++ INTEGRAL_TOP
++ *INTEGRAL_TOP
++ *SMILE
++ SMILE
++ ARROWHEAD_N_BETWEEN_BARS
++ OPTION_KEY
++ ERASE_TO_RIGHT
++ CLEAR_KEY
++ KEYBOARD
++ ANGLE_BRACKET
++ !ANGLE_BRACKET
++ !ERASE_TO_RIGHT
++ BENZENE
++ CYLINDRICITY
++ ALL_AROUND_PROFILE
++ SYMMETRY
+
++ TOTAL_RUNOUT
++ DIMENSION_ORIGIN
++ TRIANGLE_E MINUS
++ SLOPE
++ SPACE_SYM
++ *ARROWHEAD_N
++ I_BEAM
++ SQUISH_QUAD
++ RECTANGLE_V_HUGE EQUAL
++ RECTANGLE_V_HUGE DIVIDE
++ RECTANGLE_V_HUGE DIAMOND
++ RECTANGLE_V_HUGE CIRCLE_SMALL
++ RECTANGLE_V_HUGE CIRCLE
++ CIRCLE LINE_V
++ CIRCLE CIRCLE_SMALL
++ MINUS SLASH_SYM
+
++ MINUS !SLASH_SYM
++ RECTANGLE_V_HUGE_SLASH
++ !RECTANGLE_V_HUGE_SLASH
++ RECTANGLE_V_HUGE LESS
++ RECTANGLE_V_HUGE !LESS
++ !ARROW_E LINE_V_SYM
++ ARROW_E LINE_V_SYM
++ RECTANGLE_V_HUGE !ARROW_E
++ RECTANGLE_V_HUGE ARROW_E
++ CIRCLE !SLASH_OP
++ TACK_UP +OVERLINE BELOW=X
++ TRIANGLE_TALL LINE_V
++ RECTANGLE_V_HUGE OR
++ RECTANGLE_V_HUGE TRIANGLE_TALL
++ *TACK_UP CIRCLE_MID
++ ARROW_N MINUS
+
++ RECTANGLE_V_HUGE ARROW_N
++ *TACK_UP MACRON BELOW=X
++ *TRIANGLE_TALL LINE_V
++ RECTANGLE_V_HUGE *OR
++ RECTANGLE_V_HUGE *TRIANGLE_TALL
++ TACK_UP CIRCLE_SMALL
++ *ARROW_N MINUS
++ RECTANGLE_V_HUGE *ARROW_N
++ LOW_LINE APOSTROPHE
++ TRIANGLE_TALL LOW_LINE
++ DIAMOND LOW_LINE
++ CIRCLE_SMALL LOW_LINE
++ CIRCLE LOW_LINE
++ *UNION CIRCLE_SMALL
++ RECTANGLE_V_HUGE APOSTROPHE
++ CIRCLE STAR_SMALL CENTER
+
++ RECTANGLE_V_HUGE COLON
++ *TACK_UP DIAERESIS BELOW=X
++ *TRIANGLE_TALL DIAERESIS BELOW=X
++ STAR DIAERESIS ABOVE=X
++ CIRCLE_SMALL DIAERESIS ABOVE=X
++ CIRCLE DIAERESIS ABOVE=X
++ UNION LINE_V
++ SUBSET LINE_V
++ WAVE DIAERESIS
++ !LESS DIAERESIS
++ MINUS COMMA
++ *TRIANGLE_TALL WAVE
++ DIGIT_0 WAVE CENTER=CENTER
++ WAVE LINE_V
++ SEMICOLON LOW_LINE
++ RECTANGLE_V_HUGE EQUAL_SLASH
+
++ RECTANGLE_V_HUGE QUESTION
++ OR WAVE
++ *OR WAVE
++ IOTA_SMALL
++ RHO_SMALL
++ OMEGA_SMALL
++ ALPHA_SMALL LOW_LINE
++ IE_SMALL LOW_LINE
++ IOTA_SMALL LOW_LINE
++ OMEGA_SMALL LOW_LINE
++ ALPHA_SMALL
++ RADICAL STROKE_H MIDDLE=X
++ ANGLE_RIGHT_ARROW_DOWN_ZIGZAG
++ NBSP_SYM
++ BELL
++ CIRCLE_SMALL_BLACK LINE_V
+
++ *ARROWHEAD_N ^A_TINY
++ UNDERLINE_CONT
++ UNDERLINE_DISCONT
++ EMPHASIS
++ COMPOSITION
++ SQUARE LINE_V
++ ENTER_SYM
++ ALTERNATIVE_KEY
++ HELM
++ PAUSE
++ INTERRUPT
++ ESCAPE
++ UNDO
++ MONOSTABLE
++ HYSTERESIS
++ OPEN_H
+
++ *OPEN_H
++ OPEN_H MINUS
++ *OPEN_H MINUS
++ DIRECT_CURRENT
++ HEXAGON_H_CAP
++ RECTANGLE_V_HUGE
++ PRIME
++ *NEXT_PAGE
++ NEXT_PAGE
++ SCREEN_PRINT
++ SCREEN_CLEAR
++ PAREN_TOP
++ LINE_V
++ ~PAREN_TOP
++ !PAREN_TOP
++ LINE_V
+
++ *PAREN_TOP
++ BRACKET_TOP
++ LINE_V
++ ~BRACKET_TOP
++ !BRACKET_TOP
++ LINE_V
++ *BRACKET_TOP
++ BRACE_TOP
++ BRACE_MIDDLE
++ ~BRACE_TOP
++ LINE_V
++ !BRACE_TOP
++ !BRACE_MIDDLE
++ *BRACE_TOP
++ LINE_V
++ LINE_H
+
++ MOUSTACHE
++ !MOUSTACHE
++ SIGMA_CAP_TOP
++ ~SIGMA_CAP_TOP
++ BRACKET_OVER
++ ~BRACKET_OVER
++ BRACKET_OVER *BRACKET_OVER
++ RADICAL
++ LINE_V
++ LINE_V
++ LINE_H_1
++ LINE_H_3
++ *LINE_H_3
++ *LINE_H_1
++ =FLOOR_CAP
++ FLOOR_CAP
+
++ CIRCLE LINE_V
++ CIRCLE *TACK_UP_LARGE
++ CIRCLE TACK_UP_LARGE
++ TRIANGLE LINE_V
++ TRIANGLE *TACK_UP_LARGE
++ TRIANGLE TACK_UP_LARGE
++ WAVE LINE_V
++ WAVE *TACK_UP_LARGE
++ WAVE TACK_UP_LARGE
++ TACK_UP_LARGE
++ *TACK_UP_LARGE
++ %FLOOR_CAP
++ !FLOOR_CAP
++ SQUARE_FOOT
++ *ARROW_E_N_WHITE
++ *MINUS_OR
+
++ LINE_V
++ BREVE_METRICAL
++ BREVE_METRICAL MACRON ABOVE=X
++ BREVE_METRICAL +MACRON BELOW=X
++ BREVE_METRICAL_X2 OVERLINE_LONG ABOVE=X
++ BREVE_METRICAL_X2 +OVERLINE_LONG BELOW=X
++ BREVE_METRICAL_JOINED
++ ~NOT
++ TETRASEME_METRICAL
++ PENTASEME_METRICAL
++ GROUND
++ FUSE
++ PAREN_OVER
++ *PAREN_OVER
++ BRACE_OVER
++ *BRACE_OVER
+
++ TOR_BRACKET_OVER
++ *TOR_BRACKET_OVER
++ TRAPEZIUM
++ BENZENE_RING
++ MINUS
++ PARALLELOGRAM
++ MINUS SINE
++ MULTIPLY CIRCLE_SMALL CENTER=CENTER
+skipcodes 24 0
+
+// Control Pictures (2400-243F)
+skipcodes 64 0
+
+// Optical Character Recognition (2440-245F)
+skipcodes 32 0
+
+// Enclosed Alphanumerics (2460-24FF)
+skipcodes 160 0
+
+// Box Drawing (2500-257F)
+skipcodes 128 0
+
+// Block Elements (2580-259F)
+skipcodes 32 0
+
+// Geometric Shapes (25A0-25FF)
++ SQUARE_BLACK
++ SQUARE
++ SQUARE_ROUNDED
++ SQUARE SQUARE_SMALL_BLACK
++ SQUARE_FILLH
++ SQUARE_FILLV
++ SQUARE_FILLO
++ SQUARE_FILLB
++ SQUARE_FILLS
++ SQUARE_FILLD
++ SQUARE_SMALL_BLACK
++ SQUARE_SMALL
++ RECTANGLE_BLACK
++ RECTANGLE
++ RECTANGLE_V_BLACK
++ RECTANGLE_V
+
++ PARALLELOGRAM_BLACK
++ PARALLELOGRAM
++ TRIANGLE_BLACK
++ TRIANGLE
++ TRIANGLE_SMALL_BLACK
++ TRIANGLE_SMALL
++ TRIANGLE_E_BLACK
++ TRIANGLE_E
++ TRIANGLE_E_SMALL_BLACK
++ TRIANGLE_E_SMALL
++ TRIANGLE_TALL_E_BLACK
++ TRIANGLE_TALL_E
++ *TRIANGLE_BLACK
++ *TRIANGLE
++ *TRIANGLE_SMALL_BLACK
++ *TRIANGLE_SMALL
+
++ *TRIANGLE_E_BLACK
++ *TRIANGLE_E
++ *TRIANGLE_E_SMALL_BLACK
++ *TRIANGLE_E_SMALL
++ *TRIANGLE_TALL_E_BLACK
++ *TRIANGLE_TALL_E
++ DIAMOND_BLACK
++ DIAMOND
++ DIAMOND DIAMOND_SMALL_BLACK
++ CIRCLE CIRCLE_SMALL_BLACK
++ LOZENGE
++ CIRCLE
++ CIRCLE_DASHED
++ CIRCLE_FILLV
++ CIRCLE CIRCLE_SMALL
++ CIRCLE_BLACK
+
++ CIRCLE CIRCLE_LEFTHALF_BLACK
++ CIRCLE *CIRCLE_LEFTHALF_BLACK
++ CIRCLE CIRCLE_TOPHALF_BLACK
++ CIRCLE *CIRCLE_TOPHALF_BLACK
++ CIRCLE_BLACKQ
++ *CIRCLE_BLACKQ *CIRCLE_LEFTHALF_BLACK
++ CIRCLE_LEFTHALF_BLACK
++ *CIRCLE_LEFTHALF_BLACK
++ CIRCLE_SMALL_BLACK_INVERSE
++ CIRCLE_INVERSE_HALF *CIRCLE_INVERSE_HALF
++ CIRCLE_INVERSE_HALF
++ *CIRCLE_INVERSE_HALF
++ CIRCLE_QUAD
++ !CIRCLE_QUAD
++ *CIRCLE_QUAD
++ ~CIRCLE_QUAD
++ CIRCLE_TOPHALF
++ *CIRCLE_TOPHALF
++ TRIANGLE_RA_BLACK
++ !TRIANGLE_RA_BLACK
++ *TRIANGLE_RA_BLACK
++ ~TRIANGLE_RA_BLACK
++ CIRCLE_SMALL
++ SQUARE SQUARE_LEFTHALF_BLACK
++ SQUARE *SQUARE_LEFTHALF_BLACK
++ SQUARE *TRIANGLE_RA_BLACK
++ SQUARE TRIANGLE_RA_BLACK
++ SQUARE LINE_V_SYM
++ TRIANGLE DOT CENTER
++ TRIANGLE_BLACKHALF
++ !TRIANGLE_BLACKHALF
++ CIRCLE_LARGE
++ SQUARE !QUADRANT
++ SQUARE *QUADRANT
++ SQUARE ~QUADRANT
++ SQUARE QUADRANT
++ CIRCLE !QUADRANT
++ CIRCLE *QUADRANT
++ CIRCLE ~QUADRANT
++ CIRCLE QUADRANT
++ *TRIANGLE_RA
++ ~TRIANGLE_RA
++ !TRIANGLE_RA
++ SQUARE
++ SQUARE_BLACK
++ SQUARE_SMALL
++ SQUARE_SMALL_BLACK
++ TRIANGLE_RA
+
+// Miscellaneous Symbols (2600-26FF)
+skipcodes 256 0
+
+// Dingbats (2700-27BF)
+skipcodes 192 0
+
+// Miscellaneous Mathematical Symbols A (27C0-27EF)
+skipcodes 48 0
+
+// Supplemental Arrows A (27F0-27FF)
+skipcodes 16 0
+
+// Braille Patterns (2800-28FF)
+skipcodes 256 0
+
+// Supplemental Arrows B (2900-297F)
+skipcodes 128 0
+
+// Miscellaneous Mathematical Symbols B (2980-29FF)
+skipcodes 128 0
+
+// Supplemental Mathematical Operators (2A00-2AFF)
+skipcodes 256 0
+
+// Miscellaneous Symbols and Arrows (2B00-2BFF)
+skipcodes 256 0
diff --git a/helpers/tools_to_build_newstroke-font/coord.txt b/helpers/tools_to_build_newstroke-font/coord.txt
new file mode 100644
index 0000000..3a289c4
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/coord.txt
@@ -0,0 +1,31 @@
+C -0,750
+D -0,700
+E -0,650
+F -0,600
+G -0,550
+H -0,500
+I -0,450
+J -0,400
+K -0,350
+L -0,300
+M -0,250
+N -0,200
+O -0,150
+P -0,100
+Q -0,050
+R 0,000
+S 0,050
+T 0,100
+U 0,150
+V 0,200
+W 0,250
+X 0,300
+Y 0,350
+Z 0,400
+[ 0,450
+\ 0,500
+] 0,550
+^ 0,600
+_ 0,650
+` 0,700
+a 0,750
diff --git a/helpers/tools_to_build_newstroke-font/font-cache.lib b/helpers/tools_to_build_newstroke-font/font-cache.lib
new file mode 100644
index 0000000..e531b60
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font-cache.lib
@@ -0,0 +1,12409 @@
+EESchema-LIBRARY Version 2.3 Date: Ð’Ñк 31 Янв 2010 21:30:54
+#
+# A_CAP
+#
+DEF A_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 300 250 300 N
+P 3 0 1 0 -350 0 0 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -350 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X PERIS ~ -350 1300 100 R 50 50 1 1 I
+X TONOS ~ -350 950 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_SMALL
+#
+DEF A_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 0 250 550 200 650 100 700 -100 700 -200 650 N
+P 10 0 1 0 250 50 150 0 -100 0 -200 50 -250 150 -250 250 -200 350 -100 400 150 400 250 450 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X HALFRING ~ 250 850 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_SMALLCAP
+#
+DEF A_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 150 200 150 N
+P 3 0 1 0 -250 0 0 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_TINY
+#
+DEF A_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_TINY" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 0 N
+P 8 0 1 0 200 50 100 0 -50 0 -150 50 -200 150 -150 250 -50 300 200 300 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_TINY_TURNED
+#
+DEF A_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 500 -200 150 -150 50 -50 0 50 0 150 50 N
+P 8 0 1 0 -200 450 -100 500 50 500 150 450 200 350 150 250 50 200 -200 200 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ABZUEGLICH
+#
+DEF ABZUEGLICH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ABZUEGLICH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 -150 250 1250 N
+P 6 0 1 0 -200 1050 -150 1000 -200 950 -250 1000 -200 1050 -200 950 N
+P 6 0 1 0 200 100 250 50 200 0 150 50 200 100 200 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ACUTE
+#
+DEF ACUTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ACUTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1100 -50 950 N
+X P ~ -200 0 300 U 50 50 1 1 I
+X S ~ 200 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ACUTE_DOT
+#
+DEF ACUTE_DOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ACUTE_DOT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 1100 0 950 N
+P 6 0 1 0 -250 1100 -200 1050 -250 1000 -300 1050 -250 1100 -250 1000 N
+X P ~ -350 0 300 U 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_CAP
+#
+DEF AE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 300 0 300 N
+P 2 0 1 0 0 550 350 550 N
+P 3 0 1 0 -500 0 -150 1050 500 1050 N
+P 3 0 1 0 0 1050 0 0 500 0 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_SMALL
+#
+DEF AE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 650 -350 700 -150 700 -50 650 0 550 N
+P 22 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 400 -350 400 -450 350 -500 250 -500 150 -450 50 -350 0 -150 0 -50 50 0 150 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_SMALLCAP
+#
+DEF AE_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 150 0 150 N
+P 2 0 1 0 0 350 250 350 N
+P 3 0 1 0 0 700 0 0 350 0 N
+P 3 0 1 0 350 700 -100 700 -350 0 N
+X ABOVE ~ 100 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_TINY_TURNED
+#
+DEF AE_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 300 50 200 0 150 0 50 50 0 150 N
+P 19 0 1 0 -300 500 -150 500 -50 450 0 300 0 150 -50 50 -150 0 -200 0 -300 50 -350 150 -350 200 200 200 300 250 350 350 300 450 200 500 150 500 50 450 0 300 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALL_AROUND_PROFILE
+#
+DEF ALL_AROUND_PROFILE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALL_AROUND_PROFILE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 0 -400 0 -400 200 N
+P 3 0 1 0 400 400 0 400 -400 0 N
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALPHA_SMALL
+#
+DEF ALPHA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALPHA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 350 700 200 200 150 100 100 50 0 0 -100 0 -200 50 -250 100 -300 250 -300 450 -250 600 -200 650 -100 700 0 700 100 650 150 600 200 500 250 150 300 50 400 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALPHA_TINY
+#
+DEF ALPHA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALPHA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 250 500 150 150 100 50 0 0 -100 0 -200 50 -250 150 -250 350 -200 450 -100 500 0 500 100 450 200 50 250 0 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1100 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALTERNATIVE_KEY
+#
+DEF ALTERNATIVE_KEY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALTERNATIVE_KEY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 600 0 N
+P 3 0 1 0 400 600 600 800 400 1000 N
+P 4 0 1 0 -600 0 -300 0 300 800 600 800 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AMPERSAND
+#
+DEF AMPERSAND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AMPERSAND" 0 -350 60 H V C CNN
+DRAW
+P 29 0 1 0 450 0 400 0 300 50 150 200 -100 500 -200 650 -250 800 -250 900 -200 1000 -100 1050 -50 1050 50 1000 100 900 100 850 50 750 0 700 -300 500 -350 450 -400 350 -400 200 -350 100 -300 50 -200 0 -50 0 50 50 100 100 250 300 300 450 300 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE
+#
+DEF ANGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_ARC
+#
+DEF ANGLE_ARC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_ARC" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 0 -400 400 400 800 N
+P 5 0 1 0 50 100 100 200 150 400 100 600 50 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_BRACKET
+#
+DEF ANGLE_BRACKET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_BRACKET" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 -400 -150 400 150 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_MEAS
+#
+DEF ANGLE_MEAS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_MEAS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 800 -400 0 400 0 N
+P 4 0 1 0 -100 400 0 300 100 50 100 -100 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_RIGHT
+#
+DEF ANGLE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_RIGHT_ARC
+#
+DEF ANGLE_RIGHT_ARC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_RIGHT_ARC" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 800 -400 0 400 0 N
+P 6 0 1 0 -400 600 -300 600 -50 500 100 350 200 100 200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_RIGHT_ARROW_DOWN_ZIGZAG
+#
+DEF ANGLE_RIGHT_ARROW_DOWN_ZIGZAG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_RIGHT_ARROW_DOWN_ZIGZAG" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 -200 -600 -200 -600 0 N
+P 3 0 1 0 -400 800 -400 0 400 0 N
+P 4 0 1 0 -600 -200 -150 250 -650 500 -150 1000 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# APOSTROPHE
+#
+DEF APOSTROPHE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "APOSTROPHE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 1050 -50 850 N
+X P ~ -250 0 300 U 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# APOSTROPHE_TURNED_LOW
+#
+DEF APOSTROPHE_TURNED_LOW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "APOSTROPHE_TURNED_LOW" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 0 -50 -200 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_BAR_E
+#
+DEF ARROW_BAR_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_BAR_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 400 600 400 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_CLOCKWISE_OPEN
+#
+DEF ARROW_CLOCKWISE_OPEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_CLOCKWISE_OPEN" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -450 800 -150 800 -150 500 N
+P 14 0 1 0 250 700 300 650 350 500 350 400 300 250 200 150 50 100 -50 100 -200 150 -300 250 -350 400 -350 500 -300 650 -150 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_CLOCKWISE_SEMI
+#
+DEF ARROW_CLOCKWISE_SEMI U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_CLOCKWISE_SEMI" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 500 350 300 550 500 N
+P 10 0 1 0 -350 450 -350 500 -300 650 -200 750 -50 800 50 800 200 750 300 650 350 500 350 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_CORNER_NE
+#
+DEF ARROW_CORNER_NE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_CORNER_NE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 200 600 N
+P 3 0 1 0 -400 800 400 800 400 0 N
+P 3 0 1 0 -150 600 200 600 200 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_E
+#
+DEF ARROW_DBL_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 3 0 1 0 -100 600 100 400 -100 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_N
+#
+DEF ARROW_DBL_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 300 0 500 200 300 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_N_PEDESTAL_WHITE
+#
+DEF ARROW_DBL_N_PEDESTAL_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_N_PEDESTAL_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -100 550 -250 550 0 800 250 550 100 550 N
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 400 -250 400 0 650 250 400 150 400 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_N_WHITE
+#
+DEF ARROW_DBL_N_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_N_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -100 550 -250 550 0 800 250 550 100 550 N
+P 8 0 1 0 150 0 -150 0 -150 400 -250 400 0 650 250 400 150 400 150 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E
+#
+DEF ARROW_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_BAR
+#
+DEF ARROW_E_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 600 -400 200 N
+P 2 0 1 0 400 400 -400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_DASHED
+#
+DEF ARROW_E_DASHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_DASHED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 -250 400 N
+P 2 0 1 0 -50 400 50 400 N
+P 2 0 1 0 250 400 400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_DBL
+#
+DEF ARROW_E_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 250 250 N
+P 2 0 1 0 -400 550 250 550 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_DBL_SLASH
+#
+DEF ARROW_E_DBL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_DBL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 250 250 N
+P 2 0 1 0 -400 550 250 550 N
+P 2 0 1 0 0 650 -200 150 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_HOOK
+#
+DEF ARROW_E_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+P 6 0 1 0 400 400 -250 400 -350 450 -400 550 -350 650 -250 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_LOOP
+#
+DEF ARROW_E_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+P 9 0 1 0 400 400 -250 400 -350 450 -400 550 -350 650 -250 700 -150 650 -100 550 -100 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_N
+#
+DEF ARROW_E_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_N" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 0 -200 600 400 600 N
+P 3 0 1 0 200 400 400 600 200 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_N_WHITE
+#
+DEF ARROW_E_N_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_N_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 450 600 200 850 200 750 -400 750 -400 0 -100 0 -100 450 200 450 200 350 450 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_SLASH
+#
+DEF ARROW_E_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 600 -200 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_SQUIGGLE
+#
+DEF ARROW_E_SQUIGGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_SQUIGGLE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+P 7 0 1 0 -400 300 -250 500 -100 300 50 500 200 300 300 400 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_STROKE
+#
+DEF ARROW_E_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -100 600 -100 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_STROKE_DBL
+#
+DEF ARROW_E_STROKE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_STROKE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -250 600 -250 200 N
+P 2 0 1 0 0 600 0 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_TAIL
+#
+DEF ARROW_E_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 400 -200 400 N
+P 3 0 1 0 -400 600 -200 400 -400 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_TPL
+#
+DEF ARROW_E_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_TPL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 150 150 150 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 650 150 650 N
+P 3 0 1 0 50 750 400 400 50 50 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_WALL_WHITE
+#
+DEF ARROW_E_WALL_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_WALL_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -400 650 -200 650 -200 550 150 550 150 650 400 400 150 150 150 250 -200 250 -200 150 -400 150 -400 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_WAVE
+#
+DEF ARROW_E_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 200 400 500 100 500 N
+P 8 0 1 0 400 500 250 350 150 300 50 350 -50 450 -150 500 -250 450 -400 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_WHITE
+#
+DEF ARROW_E_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 250 -400 550 150 550 150 650 400 400 150 150 150 250 -400 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N
+#
+DEF ARROW_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_BAR
+#
+DEF ARROW_N_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 200 0 -200 0 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_BAR_WHITE
+#
+DEF ARROW_N_BAR_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_BAR_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 150 0 -150 0 -150 200 150 200 150 0 N
+P 8 0 1 0 150 400 -150 400 -150 550 -250 550 0 800 250 550 150 550 150 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_DBL
+#
+DEF ARROW_N_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 650 -150 0 N
+P 2 0 1 0 150 650 150 0 N
+P 3 0 1 0 250 550 0 800 -250 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_E
+#
+DEF ARROW_N_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 200 200 200 200 800 N
+P 3 0 1 0 400 600 200 800 0 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_PEDESTAL_WHITE
+#
+DEF ARROW_N_PEDESTAL_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_PEDESTAL_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 550 -250 550 0 800 250 550 150 550 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_PEDESTAL_WHITE_HBAR
+#
+DEF ARROW_N_PEDESTAL_WHITE_HBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_PEDESTAL_WHITE_HBAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 650 150 650 N
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 550 -250 550 0 800 250 550 150 550 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_PEDESTAL_WHITE_VBAR
+#
+DEF ARROW_N_PEDESTAL_WHITE_VBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_PEDESTAL_WHITE_VBAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 800 0 0 N
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 550 -250 550 0 800 250 550 150 550 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_STROKE_DBL
+#
+DEF ARROW_N_STROKE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_STROKE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 150 200 150 N
+P 2 0 1 0 -200 400 200 400 N
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_WHITE
+#
+DEF ARROW_N_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 150 0 -150 0 -150 550 -250 550 0 800 250 550 150 550 150 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NE
+#
+DEF ARROW_NE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 750 -350 50 N
+P 3 0 1 0 0 750 350 750 350 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NE_TOP_BAR
+#
+DEF ARROW_NE_TOP_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NE_TOP_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 750 -350 50 N
+P 2 0 1 0 350 950 -350 950 N
+P 3 0 1 0 0 750 350 750 350 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NS_BAR
+#
+DEF ARROW_NS_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NS_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 200 0 N
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 200 0 0 200 200 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NS_WHITE
+#
+DEF ARROW_NS_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NS_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -250 550 0 800 250 550 150 550 150 250 250 250 0 0 -250 250 -150 250 -150 550 -250 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_OPEN_E
+#
+DEF ARROW_OPEN_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_OPEN_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 400 -400 400 N
+P 4 0 1 0 200 200 200 600 400 400 200 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_OPEN_WE
+#
+DEF ARROW_OPEN_WE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_OPEN_WE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 400 200 400 N
+P 4 0 1 0 -200 200 -400 400 -200 600 -200 200 N
+P 4 0 1 0 200 200 200 600 400 400 200 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_DBL
+#
+DEF ARROW_WE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 250 250 250 N
+P 2 0 1 0 -250 550 250 550 N
+P 3 0 1 0 -150 150 -400 400 -150 650 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_DBL_SLASH
+#
+DEF ARROW_WE_DBL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_DBL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 250 250 250 N
+P 2 0 1 0 -250 550 250 550 N
+P 2 0 1 0 50 650 -50 150 N
+P 3 0 1 0 -150 150 -400 400 -150 650 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_STROKE
+#
+DEF ARROW_WE_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 600 0 200 N
+P 3 0 1 0 -200 600 -400 400 -200 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_STROKE_DBL
+#
+DEF ARROW_WE_STROKE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_STROKE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -100 600 -100 200 N
+P 2 0 1 0 100 600 100 200 N
+P 3 0 1 0 -200 200 -400 400 -200 600 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_WAVE
+#
+DEF ARROW_WE_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -100 300 -400 300 -400 600 N
+P 3 0 1 0 400 200 400 500 100 500 N
+P 8 0 1 0 400 500 250 350 150 300 50 350 -50 450 -150 500 -250 450 -400 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWHEAD_E
+#
+DEF ARROWHEAD_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWHEAD_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWHEAD_N
+#
+DEF ARROWHEAD_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWHEAD_N" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_E_E
+#
+DEF ARROWS_E_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_E_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 400 600 -400 600 N
+P 5 0 1 0 200 0 400 200 200 400 400 600 200 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_E_E_E
+#
+DEF ARROWS_E_E_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_E_E_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 2 0 1 0 -400 800 400 800 N
+P 2 0 1 0 400 400 -400 400 N
+P 7 0 1 0 200 1000 400 800 200 600 400 400 200 200 400 0 200 -200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_N_N
+#
+DEF ARROWS_N_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_N_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 800 N
+P 2 0 1 0 200 800 200 0 N
+P 5 0 1 0 -400 600 -200 800 0 600 200 800 400 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_N_S
+#
+DEF ARROWS_N_S U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_N_S" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 800 N
+P 2 0 1 0 200 800 200 0 N
+P 3 0 1 0 -400 600 -200 800 0 600 N
+P 3 0 1 0 0 200 200 0 400 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_W_E
+#
+DEF ARROWS_W_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_W_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 400 600 -400 600 N
+P 3 0 1 0 -200 400 -400 600 -200 800 N
+P 3 0 1 0 200 0 400 200 200 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASSERTION
+#
+DEF ASSERTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASSERTION" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 400 200 400 N
+P 2 0 1 0 -200 800 -200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISK
+#
+DEF ASTERISK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 800 N
+P 3 0 1 0 -250 900 0 800 250 900 N
+P 3 0 1 0 -150 600 0 800 150 600 N
+X CENTER ~ 0 800 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISK_OP
+#
+DEF ASTERISK_OP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISK_OP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 350 200 N
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 350 600 -350 200 N
+X ACCENT ~ 0 800 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISM
+#
+DEF ASTERISM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 450 -350 200 N
+P 2 0 1 0 0 1050 0 800 N
+P 2 0 1 0 350 450 350 200 N
+P 3 0 1 0 -600 300 -350 200 -100 300 N
+P 3 0 1 0 -500 0 -350 200 -200 0 N
+P 3 0 1 0 -250 900 0 800 250 900 N
+P 3 0 1 0 -150 600 0 800 150 600 N
+P 3 0 1 0 100 300 350 200 600 300 N
+P 3 0 1 0 200 0 350 200 500 0 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASYMP
+#
+DEF ASYMP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASYMP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 250 -350 300 -200 350 -50 300 50 200 200 150 350 200 400 250 N
+P 8 0 1 0 -400 550 -350 600 -200 650 -50 600 50 500 200 450 350 500 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASYMP_MINUS
+#
+DEF ASYMP_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASYMP_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 8 0 1 0 -400 400 -350 450 -200 500 -50 450 50 350 200 300 350 350 400 400 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AT
+#
+DEF AT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AT" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 200 500 150 550 50 600 -50 600 -150 550 -200 500 -250 400 -250 300 -200 200 -150 150 -50 100 50 100 150 150 200 200 N
+P 20 0 1 0 200 600 200 200 250 150 300 150 400 200 450 300 450 550 350 700 200 800 0 850 -200 800 -350 700 -450 550 -500 350 -450 150 -350 0 -200 -100 0 -150 200 -100 350 0 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_CAP
+#
+DEF B_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_CAP" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 50 550 200 500 250 450 300 350 300 200 250 100 200 50 100 0 -300 0 -300 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 -300 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -300 300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_CAP_HOOK
+#
+DEF B_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 1050 -300 0 100 0 200 50 250 100 300 200 300 350 250 450 200 500 50 550 -300 550 N
+P 12 0 1 0 -600 800 -600 900 -550 1000 -450 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -300 300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALL
+#
+DEF B_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 1050 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -200 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALL_HOOK
+#
+DEF B_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 1050 -100 1050 -200 1000 -250 900 -250 0 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALL_TOPBAR
+#
+DEF B_SMALL_TOPBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALL_TOPBAR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 250 1050 -250 1050 -250 0 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALLCAP
+#
+DEF B_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 50 350 200 300 250 200 250 150 200 50 100 0 -200 0 -200 700 50 700 150 650 200 550 200 500 150 400 50 350 -200 350 N
+X MIDBOTTOM ~ -200 200 100 R 50 50 1 1 I
+X MIDDLE ~ -200 350 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_TINY
+#
+DEF B_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 -150 0 N
+P 10 0 1 0 -150 50 -50 0 50 0 150 50 200 150 200 350 150 450 50 500 -50 500 -150 450 N
+X ABOVE ~ -150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -150 650 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BACKSLASH
+#
+DEF BACKSLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BACKSLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 1150 450 -200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BAG_MEMBERSHIP
+#
+DEF BAG_MEMBERSHIP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BAG_MEMBERSHIP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 500 500 500 N
+P 4 0 1 0 500 1000 -550 1000 -550 0 500 0 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BAR_VERT_DBL_STILE_RIGHT_DBL
+#
+DEF BAR_VERT_DBL_STILE_RIGHT_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BAR_VERT_DBL_STILE_RIGHT_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 -400 0 N
+P 2 0 1 0 -100 250 350 250 N
+P 2 0 1 0 -100 550 350 550 N
+P 2 0 1 0 -100 800 -100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BAR_VERT_TPL_STILE_RIGHT
+#
+DEF BAR_VERT_TPL_STILE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BAR_VERT_TPL_STILE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 -400 0 N
+P 2 0 1 0 -150 800 -150 0 N
+P 2 0 1 0 100 800 100 0 N
+P 2 0 1 0 350 400 100 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BELL
+#
+DEF BELL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BELL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 400 -200 0 -400 0 N
+P 3 0 1 0 200 400 200 0 400 0 N
+P 9 0 1 0 -400 400 -400 500 -300 700 -100 800 100 800 300 700 400 500 400 400 -400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BENZENE
+#
+DEF BENZENE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BENZENE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 200 N
+P 2 0 1 0 0 0 350 200 N
+P 2 0 1 0 0 800 350 600 N
+P 7 0 1 0 0 1100 600 750 600 50 0 -300 -600 50 -600 750 0 1100 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BENZENE_RING
+#
+DEF BENZENE_RING U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BENZENE_RING" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 1100 600 750 600 50 0 -300 -600 50 -600 750 0 1100 N
+P 17 0 1 0 -50 750 50 750 200 700 300 600 350 450 350 350 300 200 200 100 50 50 -50 50 -200 100 -300 200 -350 350 -350 450 -300 600 -200 700 -50 750 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETA_SMALL
+#
+DEF BETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 50 600 150 550 200 500 250 400 250 200 200 100 150 50 50 0 -100 0 -200 50 -250 100 N
+P 13 0 1 0 -350 -350 -300 -300 -250 -200 -250 900 -200 1000 -100 1050 50 1050 150 1000 200 900 200 750 150 650 50 600 -50 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETA_SMALL_CURLED
+#
+DEF BETA_SMALL_CURLED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETA_SMALL_CURLED" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 50 600 150 550 200 500 250 400 250 200 200 100 150 50 50 0 -100 0 -200 50 -250 150 -250 900 -200 1000 -100 1050 50 1050 150 1000 200 900 200 750 150 650 50 600 -50 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETA_TINY
+#
+DEF BETA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 400 0 400 N
+P 17 0 1 0 -200 -250 -150 -150 -150 550 -100 650 0 700 50 700 150 650 200 550 150 450 50 400 150 350 200 250 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETWEEN
+#
+DEF BETWEEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETWEEN" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -150 1200 -100 1150 0 1000 50 900 100 750 150 500 150 300 100 50 50 -100 0 -200 -100 -350 -150 -400 N
+P 12 0 1 0 150 -400 100 -350 0 -200 -50 -100 -100 50 -150 300 -150 500 -100 750 -50 900 0 1000 100 1150 150 1200 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BIDENTAL_PERCUSSIVE
+#
+DEF BIDENTAL_PERCUSSIVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BIDENTAL_PERCUSSIVE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 300 150 300 400 -300 400 -300 150 N
+P 4 0 1 0 300 800 300 1050 -300 1050 -300 800 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BOWTIE
+#
+DEF BOWTIE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BOWTIE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 800 400 0 400 800 -400 0 -400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE
+#
+DEF BRACE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 -400 150 -400 50 -350 0 -250 0 250 -50 350 -150 400 -50 450 0 550 0 1050 50 1150 150 1200 200 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_MIDDLE
+#
+DEF BRACE_MIDDLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_MIDDLE" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 1150 0 900 -50 700 -100 600 -300 400 -100 200 -50 100 0 -100 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_OVER
+#
+DEF BRACE_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_OVER" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -800 -150 -800 -100 -750 0 -650 50 -150 50 -50 100 0 200 50 100 150 50 650 50 750 0 800 -100 800 -150 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_TOP
+#
+DEF BRACE_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_TOP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 300 1150 100 950 50 850 0 650 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET
+#
+DEF BRACKET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 200 -350 -50 -350 -50 1150 200 1150 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_OVER
+#
+DEF BRACKET_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_OVER" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -750 -150 -750 100 750 100 750 -150 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_QUILL
+#
+DEF BRACKET_QUILL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_QUILL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 400 200 400 N
+P 4 0 1 0 200 -350 -50 -350 -50 1150 200 1150 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_TOP
+#
+DEF BRACKET_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_TOP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 300 1000 0 1000 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE
+#
+DEF BREVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 1100 -150 1000 -50 950 50 950 150 1000 200 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_HOOK
+#
+DEF BREVE_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 1100 -150 1000 -50 950 50 950 150 1000 200 1100 N
+P 6 0 1 0 -100 1100 0 1200 50 1300 0 1400 -100 1450 -200 1450 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_INV
+#
+DEF BREVE_INV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_INV" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 950 -150 1050 -50 1100 50 1100 150 1050 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_METRICAL
+#
+DEF BREVE_METRICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_METRICAL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -200 500 -200 450 -150 350 -50 300 50 300 150 350 200 450 200 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_METRICAL_JOINED
+#
+DEF BREVE_METRICAL_JOINED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_METRICAL_JOINED" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 500 -400 450 -350 350 -250 300 -150 300 -50 350 0 450 0 500 N
+P 8 0 1 0 0 500 0 450 50 350 150 300 250 300 350 350 400 450 400 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_METRICAL_X2
+#
+DEF BREVE_METRICAL_X2 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_METRICAL_X2" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -550 500 -550 450 -500 350 -400 300 -300 300 -200 350 -150 450 -150 500 N
+P 8 0 1 0 150 500 150 450 200 350 300 300 400 300 500 350 550 450 550 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BROKEN_BAR
+#
+DEF BROKEN_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BROKEN_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 -350 0 200 N
+P 2 0 1 0 0 1050 0 500 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BUKI_CAP
+#
+DEF BUKI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BUKI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 1050 -300 1050 -300 0 0 0 150 50 250 150 300 250 300 400 250 500 150 600 0 650 -300 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BUKI_LARGE
+#
+DEF BUKI_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BUKI_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 300 1100 200 1050 -150 1050 -250 1000 -300 950 -350 850 -350 200 -300 100 -250 50 -150 0 100 0 200 50 250 100 300 200 300 550 250 650 200 700 100 750 -200 750 -300 700 -350 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BUKI_SMALL
+#
+DEF BUKI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BUKI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 250 1100 200 1050 100 1000 -100 1000 -200 950 -250 900 -300 800 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 500 200 600 150 650 50 700 -150 700 -250 650 -300 600 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BULLET_LEFT
+#
+DEF BULLET_LEFT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BULLET_LEFT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 500 -200 300 N
+P 2 0 1 0 250 550 250 250 N
+P 5 0 1 0 -100 250 -100 550 -150 500 -150 300 -100 250 N
+P 8 0 1 0 -50 550 -100 550 -200 500 -250 400 -200 300 -100 250 -50 250 -50 550 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_CAP
+#
+DEF C_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_CAP" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 250 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 550 100 D 50 50 1 1 I
+X HOOK ~ -250 950 100 R 50 50 1 1 I
+X SLASH1 ~ -250 550 100 D 50 50 1 1 I
+X SLASH2 ~ 100 550 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_CAP_REV
+#
+DEF C_CAP_REV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_CAP_REV" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 100 -200 50 -50 0 50 0 200 50 300 150 350 250 400 450 400 600 350 800 300 900 200 1000 50 1050 -50 1050 -200 1000 -250 950 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_CAP_STRETCHED
+#
+DEF C_CAP_STRETCHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_CAP_STRETCHED" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 950 200 1000 50 1050 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 100 -350 -100 -300 -200 -200 -300 -50 -350 50 -350 200 -300 250 -250 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL
+#
+DEF C_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 50 100 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X TOP2 ~ 100 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL_CURL
+#
+DEF C_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 150 150 250 50 300 -50 250 -250 -150 N
+X TOP2 ~ 100 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL_REV
+#
+DEF C_SMALL_REV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL_REV" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -200 50 -100 0 100 0 200 50 250 100 300 200 300 500 250 600 200 650 100 700 -100 700 -200 650 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL_SIDE
+#
+DEF C_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -300 600 -350 500 -350 300 -300 200 -250 150 -150 100 150 100 250 150 300 200 350 300 350 500 300 600 N
+X ABOVE ~ -600 400 100 R 50 50 1 1 I
+X BELOW ~ 600 400 100 R 50 50 1 1 I
+X BOTTOM ~ 350 400 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X TOP2 ~ -350 600 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_TINY_TURNED
+#
+DEF C_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 -250 100 R 50 50 1 1 I
+X BELOW ~ 0 750 100 R 50 50 1 1 I
+X BOTTOM ~ 0 500 100 R 50 50 1 1 I
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X TOP2 ~ -150 0 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CARET_INSERTION
+#
+DEF CARET_INSERTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CARET_INSERTION" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 -200 200 200 N
+P 2 0 1 0 200 -200 0 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CARON
+#
+DEF CARON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CARON" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 1100 0 950 200 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CEDILLA
+#
+DEF CEDILLA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CEDILLA" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 -50 100 -100 150 -200 100 -300 0 -350 -150 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHE_LARGE
+#
+DEF CHE_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHE_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 300 900 350 800 400 600 -400 500 -550 500 -650 550 -700 600 -750 700 -750 800 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHE_SMALL
+#
+DEF CHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -250 350 -350 350 -450 400 -500 500 -500 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHERV_CAP
+#
+DEF CHERV_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHERV_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 1050 250 0 N
+P 6 0 1 0 -300 1050 -300 650 -250 550 -200 500 -100 450 250 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 450 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHERV_SMALL
+#
+DEF CHERV_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHERV_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 5 0 1 0 -200 700 -200 450 -150 350 -50 300 200 300 N
+X BOTTOM ~ 200 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHI_SMALL
+#
+DEF CHI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 -300 -350 N
+P 6 0 1 0 -300 700 -200 650 -150 550 100 -200 150 -300 250 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHI_TINY
+#
+DEF CHI_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHI_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 500 -200 -250 N
+P 4 0 1 0 -200 500 -100 450 100 -200 200 -250 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE
+#
+DEF CIRCLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_BLACK
+#
+DEF CIRCLE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 200 N
+P 2 0 1 0 -300 150 -100 0 N
+P 2 0 1 0 -300 650 -100 800 N
+P 2 0 1 0 -300 700 -300 100 N
+P 2 0 1 0 -250 100 -250 700 N
+P 2 0 1 0 -200 750 -200 50 N
+P 2 0 1 0 -150 50 -150 750 N
+P 2 0 1 0 -100 800 -100 0 N
+P 2 0 1 0 -50 0 -50 800 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 50 0 50 800 N
+P 2 0 1 0 100 0 300 150 N
+P 2 0 1 0 100 800 100 0 N
+P 2 0 1 0 100 800 300 650 N
+P 2 0 1 0 150 50 150 750 N
+P 2 0 1 0 200 750 200 50 N
+P 2 0 1 0 250 100 250 700 N
+P 2 0 1 0 300 700 300 100 N
+P 2 0 1 0 350 200 350 600 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_BLACKQ
+#
+DEF CIRCLE_BLACKQ U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_BLACKQ" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 400 50 800 N
+P 2 0 1 0 100 800 100 400 N
+P 2 0 1 0 100 800 300 650 N
+P 2 0 1 0 150 400 150 750 N
+P 2 0 1 0 200 750 200 400 N
+P 2 0 1 0 250 400 250 700 N
+P 2 0 1 0 300 700 300 400 N
+P 2 0 1 0 350 400 350 600 N
+P 3 0 1 0 400 400 0 400 0 800 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_DASHED
+#
+DEF CIRCLE_DASHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_DASHED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 500 -350 600 N
+P 2 0 1 0 -350 200 -400 300 N
+P 2 0 1 0 -200 750 -100 800 N
+P 2 0 1 0 -100 0 -200 50 N
+P 2 0 1 0 100 800 200 750 N
+P 2 0 1 0 200 50 100 0 N
+P 2 0 1 0 350 600 400 500 N
+P 2 0 1 0 400 300 350 200 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_FILLV
+#
+DEF CIRCLE_FILLV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_FILLV" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 750 -200 50 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 200 750 200 50 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_INVERSE_HALF
+#
+DEF CIRCLE_INVERSE_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_INVERSE_HALF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 450 -600 1150 N
+P 2 0 1 0 -550 650 -450 850 N
+P 2 0 1 0 -550 1150 -550 650 N
+P 2 0 1 0 -500 750 -500 1150 N
+P 2 0 1 0 -450 1150 -450 800 N
+P 2 0 1 0 -400 850 -400 1150 N
+P 2 0 1 0 -400 850 -250 1000 N
+P 2 0 1 0 -350 1150 -350 900 N
+P 2 0 1 0 -300 950 -300 1150 N
+P 2 0 1 0 -250 950 -50 1050 N
+P 2 0 1 0 -250 1150 -250 950 N
+P 2 0 1 0 -200 1000 -200 1150 N
+P 2 0 1 0 -150 550 -150 400 N
+P 2 0 1 0 -150 1150 -150 1000 N
+P 2 0 1 0 -100 400 -100 550 N
+P 2 0 1 0 -100 1000 -100 1150 N
+P 2 0 1 0 -50 550 -50 400 N
+P 2 0 1 0 -50 1150 -50 1000 N
+P 2 0 1 0 0 400 0 600 N
+P 2 0 1 0 0 1000 0 1150 N
+P 2 0 1 0 50 550 50 400 N
+P 2 0 1 0 50 1050 250 950 N
+P 2 0 1 0 50 1150 50 1000 N
+P 2 0 1 0 100 400 100 550 N
+P 2 0 1 0 100 1000 100 1150 N
+P 2 0 1 0 150 550 150 400 N
+P 2 0 1 0 150 1150 150 1000 N
+P 2 0 1 0 200 1000 200 1150 N
+P 2 0 1 0 250 1000 400 850 N
+P 2 0 1 0 250 1150 250 950 N
+P 2 0 1 0 300 950 300 1150 N
+P 2 0 1 0 350 1150 350 900 N
+P 2 0 1 0 400 850 400 1150 N
+P 2 0 1 0 450 850 550 650 N
+P 2 0 1 0 450 1150 450 800 N
+P 2 0 1 0 500 750 500 1150 N
+P 2 0 1 0 550 1150 550 650 N
+P 2 0 1 0 600 450 600 1150 N
+P 3 0 1 0 -150 500 0 600 150 500 N
+P 6 0 1 0 -200 400 -150 550 0 600 150 550 200 400 -200 400 N
+P 19 0 1 0 -600 400 -600 450 -550 650 -450 800 -400 850 -250 950 -50 1000 50 1000 250 950 400 850 450 800 550 650 600 450 600 400 650 400 650 1150 -650 1150 -650 400 -600 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_LARGE
+#
+DEF CIRCLE_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -150 1050 100 1050 300 950 400 850 500 650 500 400 400 200 300 100 100 0 -150 0 -350 100 -450 200 -550 400 -550 650 -450 850 -350 950 -150 1050 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_LARGE_SLASH
+#
+DEF CIRCLE_LARGE_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_LARGE_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 0 500 1050 N
+P 17 0 1 0 -150 1050 100 1050 300 950 400 850 500 650 500 400 400 200 300 100 100 0 -150 0 -350 100 -450 200 -550 400 -550 650 -450 850 -350 950 -150 1050 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_LEFTHALF_BLACK
+#
+DEF CIRCLE_LEFTHALF_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_LEFTHALF_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 200 N
+P 2 0 1 0 -300 100 -300 700 N
+P 2 0 1 0 -250 700 -250 100 N
+P 2 0 1 0 -200 50 -200 750 N
+P 2 0 1 0 -150 750 -150 50 N
+P 2 0 1 0 -100 0 -300 150 N
+P 2 0 1 0 -100 0 -100 800 N
+P 2 0 1 0 -100 800 -300 650 N
+P 2 0 1 0 -50 800 -50 0 N
+P 9 0 1 0 0 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 0 800 0 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_MID
+#
+DEF CIRCLE_MID U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_MID" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_QUAD
+#
+DEF CIRCLE_QUAD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_QUAD" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 400 -400 500 -300 700 -100 800 0 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_SMALL
+#
+DEF CIRCLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -100 500 0 550 100 500 150 400 100 300 0 250 -100 300 -150 400 -100 500 N
+X ABOVE ~ 0 800 100 R 50 50 1 1 I
+X BELOW ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_SMALL_BLACK
+#
+DEF CIRCLE_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 500 -100 300 N
+P 2 0 1 0 -50 300 -50 500 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 300 50 500 N
+P 2 0 1 0 100 500 100 300 N
+P 3 0 1 0 -100 350 0 250 100 350 N
+P 3 0 1 0 -100 450 0 550 100 450 N
+P 9 0 1 0 -100 500 0 550 100 500 150 400 100 300 0 250 -100 300 -150 400 -100 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_SMALL_BLACK_INVERSE
+#
+DEF CIRCLE_SMALL_BLACK_INVERSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_SMALL_BLACK_INVERSE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 1150 -600 -350 N
+P 2 0 1 0 -550 -350 -550 1150 N
+P 2 0 1 0 -500 1150 -500 -350 N
+P 2 0 1 0 -450 -350 -450 1150 N
+P 2 0 1 0 -400 1150 -400 -350 N
+P 2 0 1 0 -350 -350 -350 1150 N
+P 2 0 1 0 -300 -350 -300 200 N
+P 2 0 1 0 -300 1150 -300 600 N
+P 2 0 1 0 -250 150 -250 -350 N
+P 2 0 1 0 -250 650 -250 1150 N
+P 2 0 1 0 -200 -350 -200 100 N
+P 2 0 1 0 -200 1150 -200 700 N
+P 2 0 1 0 -150 50 -150 -350 N
+P 2 0 1 0 -150 750 -150 1150 N
+P 2 0 1 0 -100 -350 -100 50 N
+P 2 0 1 0 -100 1150 -100 750 N
+P 2 0 1 0 -50 50 -50 -350 N
+P 2 0 1 0 -50 750 -50 1150 N
+P 2 0 1 0 0 -350 0 50 N
+P 2 0 1 0 0 1150 0 750 N
+P 2 0 1 0 50 50 50 -350 N
+P 2 0 1 0 50 750 50 1150 N
+P 2 0 1 0 100 -350 100 50 N
+P 2 0 1 0 100 1150 100 750 N
+P 2 0 1 0 150 50 150 -350 N
+P 2 0 1 0 150 750 150 1150 N
+P 2 0 1 0 200 -350 200 100 N
+P 2 0 1 0 200 1150 200 700 N
+P 2 0 1 0 250 150 250 -350 N
+P 2 0 1 0 250 650 250 1150 N
+P 2 0 1 0 300 -350 300 200 N
+P 2 0 1 0 300 1150 300 600 N
+P 2 0 1 0 350 -350 350 1150 N
+P 2 0 1 0 400 1150 400 -350 N
+P 2 0 1 0 450 -350 450 1150 N
+P 2 0 1 0 500 1150 500 -350 N
+P 2 0 1 0 550 -350 550 1150 N
+P 2 0 1 0 600 1150 600 -350 N
+P 5 0 1 0 650 -350 -650 -350 -650 1150 650 1150 650 -350 N
+P 17 0 1 0 -350 350 -350 450 -300 600 -200 700 -50 750 50 750 200 700 300 600 350 450 350 350 300 200 200 100 50 50 -50 50 -200 100 -300 200 -350 350 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_TOPHALF
+#
+DEF CIRCLE_TOPHALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_TOPHALF" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 400 -400 500 -300 700 -100 800 100 800 300 700 400 500 400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_TOPHALF_BLACK
+#
+DEF CIRCLE_TOPHALF_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_TOPHALF_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 400 N
+P 2 0 1 0 -300 700 -300 400 N
+P 2 0 1 0 -250 400 -250 700 N
+P 2 0 1 0 -200 750 -200 400 N
+P 2 0 1 0 -150 400 -150 750 N
+P 2 0 1 0 -100 800 -300 650 N
+P 2 0 1 0 -100 800 -100 400 N
+P 2 0 1 0 -50 800 -50 400 N
+P 2 0 1 0 0 800 0 400 N
+P 2 0 1 0 50 800 50 400 N
+P 2 0 1 0 100 400 100 800 N
+P 2 0 1 0 100 800 300 650 N
+P 2 0 1 0 150 750 150 400 N
+P 2 0 1 0 200 400 200 750 N
+P 2 0 1 0 250 700 250 400 N
+P 2 0 1 0 300 700 300 400 N
+P 2 0 1 0 350 600 350 400 N
+P 9 0 1 0 -400 400 -400 500 -300 700 -100 800 100 800 300 700 400 500 400 400 -400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX
+#
+DEF CIRCUMFLEX U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 950 0 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX_ACUTE
+#
+DEF CIRCUMFLEX_ACUTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX_ACUTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 1100 300 1250 N
+P 3 0 1 0 -200 950 0 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX_GRAVE
+#
+DEF CIRCUMFLEX_GRAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX_GRAVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 1100 -300 1250 N
+P 3 0 1 0 -200 950 0 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX_HOOK
+#
+DEF CIRCUMFLEX_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 950 0 1100 200 950 N
+P 6 0 1 0 300 950 400 1050 450 1150 400 1250 300 1300 200 1300 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CLEAR_KEY
+#
+DEF CLEAR_KEY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CLEAR_KEY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 400 800 -400 0 N
+P 5 0 1 0 -600 800 600 800 600 0 -600 0 -600 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COLON
+#
+DEF COLON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COLON" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+P 6 0 1 0 0 650 50 600 0 550 -50 600 0 650 0 550 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COLON_EQUAL
+#
+DEF COLON_EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COLON_EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 550 600 550 N
+P 2 0 1 0 600 250 -200 250 N
+P 6 0 1 0 -550 250 -500 200 -550 150 -600 200 -550 250 -550 150 N
+P 6 0 1 0 -550 650 -500 600 -550 550 -600 600 -550 650 -550 550 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMMA
+#
+DEF COMMA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMMA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 50 50 50 0 0 -100 -50 -150 N
+X X ~ 0 50 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMMA_DBL
+#
+DEF COMMA_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMMA_DBL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -150 50 -150 0 -200 -100 -250 -150 N
+P 4 0 1 0 250 50 250 0 200 -100 150 -150 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMPOSITION
+#
+DEF COMPOSITION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMPOSITION" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 800 0 0 -800 0 -800 800 0 800 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -1050 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COPYRIGHT
+#
+DEF COPYRIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COPYRIGHT" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 800 100 850 -100 850 -200 800 -300 700 -350 600 -350 400 -300 300 -200 200 -100 150 100 150 200 200 N
+P 17 0 1 0 0 1200 -250 1150 -500 1000 -650 750 -700 500 -650 250 -500 0 -250 -150 0 -200 250 -150 500 0 650 250 700 500 650 750 500 1000 250 1150 0 1200 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CROP
+#
+DEF CROP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CROP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 200 0 0 N
+P 2 0 1 0 200 400 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CURRENCY
+#
+DEF CURRENCY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CURRENCY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 100 -150 250 N
+P 2 0 1 0 -300 750 -150 600 N
+P 2 0 1 0 200 250 350 100 N
+P 2 0 1 0 200 600 350 750 N
+P 13 0 1 0 200 250 100 200 -50 200 -150 250 -200 350 -200 500 -150 600 -50 650 100 650 200 600 250 500 250 350 200 250 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CYLINDRICITY
+#
+DEF CYLINDRICITY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CYLINDRICITY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 650 -350 150 N
+P 2 0 1 0 350 650 100 150 N
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_CAP
+#
+DEF D_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_CAP" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -300 0 -300 1050 -50 1050 100 1000 200 900 250 800 300 600 300 450 250 250 200 150 100 50 -50 0 -300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X MIDDLE ~ -250 550 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_CAP_HOOK
+#
+DEF D_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -600 800 -600 900 -550 1000 -450 1050 -50 1050 100 1000 200 900 250 800 300 600 300 450 250 250 200 150 100 50 -50 0 -300 0 -300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ -250 550 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALL
+#
+DEF D_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 0 250 1050 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDTOP ~ 200 950 100 R 50 50 1 1 I
+X TOP2 ~ 250 1050 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALL_CURL
+#
+DEF D_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 250 1050 250 150 300 50 400 0 500 0 600 50 650 150 600 250 500 300 400 250 200 -150 N
+P 13 0 1 0 250 650 150 700 -50 700 -150 650 -200 600 -250 500 -250 200 -200 100 -150 50 -50 0 100 0 200 50 250 150 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALL_HOOK
+#
+DEF D_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 500 1050 400 1050 300 1000 250 900 250 0 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALLCAP
+#
+DEF D_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 50 700 -150 700 -150 0 50 0 150 50 200 100 250 250 250 450 200 600 150 650 50 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ -150 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_TINY
+#
+DEF D_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 700 150 0 N
+P 10 0 1 0 150 450 50 500 -50 500 -150 450 -200 350 -200 150 -150 50 -50 0 50 0 150 50 N
+X ABOVE ~ -150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ 150 650 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_EM
+#
+DEF DASH_EM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_EM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 350 450 350 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_EN
+#
+DEF DASH_EN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_EN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 350 -200 350 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_FIGURE
+#
+DEF DASH_FIGURE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_FIGURE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 450 400 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_OP_SMALL
+#
+DEF DASH_OP_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_OP_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 300 200 300 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASIA
+#
+DEF DASIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASIA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 1100 -50 1000 0 950 50 950 N
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X P ~ -200 0 300 U 50 50 1 1 I
+X S ~ 200 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASIA_OXIA
+#
+DEF DASIA_OXIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASIA_OXIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1100 150 950 N
+P 4 0 1 0 -250 1100 -250 1000 -200 950 -150 950 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASIA_VARIA
+#
+DEF DASIA_VARIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASIA_VARIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1100 250 950 N
+P 4 0 1 0 -250 1100 -250 1000 -200 950 -150 950 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DB_SMALL
+#
+DEF DB_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DB_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+P 12 0 1 0 0 650 100 700 300 700 400 650 450 600 500 500 500 200 450 100 400 50 300 0 100 0 0 50 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEGREE
+#
+DEF DEGREE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEGREE" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 1050 -100 1000 -150 900 -100 800 0 750 100 800 150 900 100 1000 0 1050 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEI_CAP
+#
+DEF DEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 -350 N
+P 4 0 1 0 -350 500 -350 700 350 700 350 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEI_SMALL
+#
+DEF DEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 2 0 1 0 0 1050 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_CAP
+#
+DEF DELTA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -350 0 0 1050 350 0 -350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_CAP_ABOVE
+#
+DEF DELTA_CAP_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_CAP_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 1400 -200 850 200 850 0 1400 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_SMALL
+#
+DEF DELTA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 50 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 500 200 600 150 650 50 700 -100 750 -200 800 -250 900 -200 1000 -100 1050 100 1050 200 1000 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_TINY
+#
+DEF DELTA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 50 500 -50 500 -150 450 -200 350 -200 150 -150 50 -50 0 50 0 150 50 200 150 200 350 150 450 50 500 -100 550 -150 600 -150 650 -100 700 150 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DESCENDER
+#
+DEF DESCENDER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DESCENDER" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 0 100 0 100 -250 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEZH_SMALL
+#
+DEF DEZH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEZH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 0 N
+P 12 0 1 0 0 650 -100 700 -250 700 -350 650 -400 600 -450 500 -450 200 -400 100 -350 50 -250 0 -100 0 0 50 N
+P 13 0 1 0 0 700 500 700 150 250 300 250 400 200 450 150 500 50 500 -150 450 -250 400 -300 300 -350 150 -350 50 -300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAERESIS
+#
+DEF DIAERESIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAERESIS" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 1050 -150 1000 -200 950 -250 1000 -200 1050 -200 950 N
+P 6 0 1 0 200 1050 250 1000 200 950 150 1000 200 1050 200 950 N
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAERESIS_SIDE
+#
+DEF DIAERESIS_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAERESIS_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 200 0 150 -50 100 -100 150 -50 200 -50 100 N
+P 6 0 1 0 -50 600 0 550 -50 500 -100 550 -50 600 -50 500 N
+X HIGH ~ -350 350 100 R 50 50 1 1 I
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND
+#
+DEF DIAMOND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 850 450 400 0 -50 -450 400 0 850 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND_BLACK
+#
+DEF DIAMOND_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 450 -400 350 N
+P 2 0 1 0 -350 300 -350 500 N
+P 2 0 1 0 -300 550 -300 250 N
+P 2 0 1 0 -250 200 -250 600 N
+P 2 0 1 0 -200 650 -200 150 N
+P 2 0 1 0 -150 100 -150 700 N
+P 2 0 1 0 -100 750 -100 50 N
+P 2 0 1 0 -50 0 -50 800 N
+P 2 0 1 0 0 850 0 -50 N
+P 2 0 1 0 50 0 50 800 N
+P 2 0 1 0 100 750 100 50 N
+P 2 0 1 0 150 100 150 700 N
+P 2 0 1 0 200 650 200 150 N
+P 2 0 1 0 250 200 250 600 N
+P 2 0 1 0 300 550 300 250 N
+P 2 0 1 0 350 300 350 500 N
+P 2 0 1 0 400 450 400 350 N
+P 5 0 1 0 0 850 450 400 0 -50 -450 400 0 850 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND_SMALL
+#
+DEF DIAMOND_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 550 150 400 0 250 -150 400 0 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND_SMALL_BLACK
+#
+DEF DIAMOND_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 450 -100 350 N
+P 2 0 1 0 -50 300 -50 500 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 300 50 500 N
+P 2 0 1 0 100 450 100 350 N
+P 5 0 1 0 0 550 150 400 0 250 -150 400 0 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIESIS
+#
+DEF DIESIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIESIS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 250 0 N
+P 2 0 1 0 -250 700 250 700 N
+P 2 0 1 0 0 1050 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIFFERENCE
+#
+DEF DIFFERENCE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIFFERENCE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 250 -400 250 N
+P 10 0 1 0 -400 550 -200 550 -200 600 -150 700 -50 750 50 750 150 700 200 600 200 550 400 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGAMMA_SMALL
+#
+DEF DIGAMMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGAMMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 550 0 550 N
+P 7 0 1 0 250 1050 150 1050 50 1000 0 900 0 -200 -50 -300 -150 -350 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_0
+#
+DEF DIGIT_0 U 0 40 Y Y 1 F N
+F0 "U" 0 -150 60 H V C CNN
+F1 "DIGIT_0" 0 -250 60 H V C CNN
+DRAW
+P 21 0 1 0 -50 1050 50 1050 150 1000 200 950 250 850 300 650 300 400 250 200 200 100 150 50 50 0 -50 0 -150 50 -200 100 -250 200 -300 400 -300 650 -250 850 -200 950 -150 1000 -50 1050 N
+X CENTER ~ 0 550 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_0_SMALL
+#
+DEF DIGIT_0_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_0_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -50 700 50 700 150 650 200 500 200 200 150 50 50 0 -50 0 -150 50 -200 200 -200 500 -150 650 -50 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_1
+#
+DEF DIGIT_1 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_1" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -300 0 N
+P 5 0 1 0 0 0 0 1050 -100 900 -200 800 -300 750 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_1_SMALL
+#
+DEF DIGIT_1_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_1_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 0 -200 0 N
+P 4 0 1 0 -200 550 -100 600 0 700 0 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_2
+#
+DEF DIGIT_2 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_2" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 950 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 600 -350 0 300 0 N
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_2_SMALL
+#
+DEF DIGIT_2_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_2_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -200 650 -100 700 50 700 150 650 200 550 200 450 150 350 -200 0 200 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_3
+#
+DEF DIGIT_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_3" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 -350 1050 300 1050 -50 650 100 650 200 600 250 550 300 450 300 200 250 100 200 50 100 0 -200 0 -300 50 -350 100 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_3_SMALL
+#
+DEF DIGIT_3_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_3_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -200 700 200 700 0 450 50 450 150 400 200 300 200 150 150 50 50 0 -100 0 -200 50 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_4
+#
+DEF DIGIT_4 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_4" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 3 0 1 0 -50 1100 -300 350 350 350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_4_SMALL
+#
+DEF DIGIT_4_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_4_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 400 150 0 N
+P 3 0 1 0 -50 700 -200 200 250 200 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_5
+#
+DEF DIGIT_5 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_5" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 1050 -250 1050 -300 550 -250 600 -150 650 100 650 200 600 250 550 300 450 300 200 250 100 200 50 100 0 -150 0 -250 50 -300 100 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_5_SMALL
+#
+DEF DIGIT_5_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_5_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 700 -150 700 -200 400 -100 450 50 450 150 400 200 300 200 150 150 50 50 0 -100 0 -200 50 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_6
+#
+DEF DIGIT_6 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_6" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 200 1050 0 1050 -100 1000 -150 950 -250 800 -300 600 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 450 250 550 200 600 100 650 -100 650 -200 600 -250 550 -300 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_6_SMALL
+#
+DEF DIGIT_6_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_6_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -200 300 -150 400 -50 450 50 450 150 400 200 300 200 150 150 50 50 0 -50 0 -150 50 -200 150 -200 400 -150 550 -100 650 0 700 150 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_7
+#
+DEF DIGIT_7 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_7" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 1050 350 1050 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_7_SMALL
+#
+DEF DIGIT_7_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_7_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 250 700 -100 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_8
+#
+DEF DIGIT_8 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_8" 0 -350 60 H V C CNN
+DRAW
+P 32 0 1 0 -100 600 -200 650 -250 700 -300 800 -300 850 -250 950 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 800 250 700 200 650 100 600 -100 600 -200 550 -250 500 -300 400 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 400 250 500 200 550 100 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_8_SMALL
+#
+DEF DIGIT_8_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_8_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -50 400 -150 450 -200 550 -150 650 -50 700 50 700 150 650 200 550 150 450 50 400 -50 400 -150 350 -200 250 -200 150 -150 50 -50 0 50 0 150 50 200 150 200 250 150 350 50 400 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_9
+#
+DEF DIGIT_9 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_9" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -200 0 0 0 100 50 150 100 250 250 300 450 300 850 250 950 200 1000 100 1050 -100 1050 -200 1000 -250 950 -300 850 -300 600 -250 500 -200 450 -100 400 100 400 200 450 250 500 300 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_9_SMALL
+#
+DEF DIGIT_9_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_9_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 400 150 300 50 250 -50 250 -150 300 -200 400 -200 550 -150 650 -50 700 50 700 150 650 200 550 200 300 150 150 100 50 0 0 -150 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIMENSION_ORIGIN
+#
+DEF DIMENSION_ORIGIN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIMENSION_ORIGIN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 400 450 400 N
+P 2 0 1 0 0 700 0 100 N
+P 3 0 1 0 300 550 450 400 300 250 N
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIRECT_CURRENT
+#
+DEF DIRECT_CURRENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIRECT_CURRENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 -300 250 N
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 -50 250 50 250 N
+P 2 0 1 0 300 250 400 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIVIDE
+#
+DEF DIVIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIVIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 400 -400 400 N
+P 6 0 1 0 0 150 50 100 0 50 -50 100 0 150 0 50 N
+P 6 0 1 0 0 750 50 700 0 650 -50 700 0 750 0 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DJE_KOMI_CAP
+#
+DEF DJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 150 50 50 150 0 300 0 400 50 450 150 450 700 N
+P 13 0 1 0 0 1050 0 150 -50 50 -150 0 -300 0 -450 50 -550 150 -600 250 -600 400 -550 500 -450 600 -300 650 0 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DJE_KOMI_SMALL
+#
+DEF DJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 150 50 50 150 0 200 0 300 50 350 150 350 500 N
+P 11 0 1 0 0 700 0 150 -50 50 -150 0 -250 0 -350 50 -400 150 -400 300 -350 400 -250 450 0 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DJE_SMALL
+#
+DEF DJE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DJE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 800 300 800 N
+P 2 0 1 0 0 1050 0 0 N
+P 10 0 1 0 0 400 50 450 150 500 250 500 350 450 400 350 400 0 350 -150 250 -300 200 -350 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOBRO_CAP
+#
+DEF DOBRO_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOBRO_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 450 -250 450 0 -450 0 -450 -250 N
+P 7 0 1 0 250 0 250 1050 0 1050 -100 1000 -150 950 -200 850 -300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOBRO_SMALL
+#
+DEF DOBRO_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOBRO_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 250 600 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 850 200 950 150 1000 50 1050 -150 1050 -250 1000 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOT
+#
+DEF DOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 450 -50 400 0 350 50 400 0 450 0 350 N
+X ABOVE ~ 0 700 100 R 50 50 1 1 I
+X BELOW ~ 0 100 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOT_MACRON
+#
+DEF DOT_MACRON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOT_MACRON" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1300 250 1300 N
+P 6 0 1 0 0 1050 50 1000 0 950 -50 1000 0 1050 0 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_3
+#
+DEF DOTS_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_3" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 450 -250 400 -300 350 -350 400 -300 450 -300 350 N
+P 6 0 1 0 300 100 350 50 300 0 250 50 300 100 300 0 N
+P 6 0 1 0 300 800 350 750 300 700 250 750 300 800 300 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_4
+#
+DEF DOTS_4 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_4" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -350 450 -300 400 -350 350 -400 400 -350 450 -350 350 N
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+P 6 0 1 0 0 800 50 750 0 700 -50 750 0 800 0 700 N
+P 6 0 1 0 350 450 400 400 350 350 300 400 350 450 350 350 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_5
+#
+DEF DOTS_5 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_5" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 150 -250 100 -300 50 -350 100 -300 150 -300 50 N
+P 6 0 1 0 -300 750 -250 700 -300 650 -350 700 -300 750 -300 650 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 300 150 350 100 300 50 250 100 300 150 300 50 N
+P 6 0 1 0 300 750 350 700 300 650 250 700 300 750 300 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_FOUR_VERT
+#
+DEF DOTS_FOUR_VERT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_FOUR_VERT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 -150 50 -200 0 -250 -50 -200 0 -150 0 -250 N
+P 6 0 1 0 0 250 50 200 0 150 -50 200 0 250 0 150 N
+P 6 0 1 0 0 650 50 600 0 550 -50 600 0 650 0 550 N
+P 6 0 1 0 0 1050 50 1000 0 950 -50 1000 0 1050 0 950 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZ_SMALL
+#
+DEF DZ_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZ_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 4 0 1 0 0 700 550 700 0 0 550 0 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+X ABOVED ~ -50 1300 100 R 50 50 1 1 I
+X ABOVEZ ~ 300 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZ_SMALL_CURL
+#
+DEF DZ_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZ_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 10 0 1 0 0 700 550 700 0 0 400 0 500 50 550 150 500 250 400 300 300 250 100 -150 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+X ABOVED ~ -50 1300 100 R 50 50 1 1 I
+X ABOVEZ ~ 300 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZHE_CAP
+#
+DEF DZHE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZHE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -250 N
+P 4 0 1 0 -300 1050 -300 0 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZHE_SMALL
+#
+DEF DZHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -250 N
+P 4 0 1 0 -250 700 -250 0 250 0 250 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZJE_KOMI_CAP
+#
+DEF DZJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 16 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 650 200 600 100 550 200 500 250 450 300 350 300 0 400 0 400 -250 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZJE_KOMI_SMALL
+#
+DEF DZJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 13 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 0 350 0 350 -250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_CAP
+#
+DEF E_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 550 100 550 N
+P 4 0 1 0 250 0 -250 0 -250 1050 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X P ~ -500 0 300 U 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+X TONOS ~ -600 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_LARGE
+#
+DEF E_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 300 900 350 800 400 600 -400 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -100 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_SMALL
+#
+DEF E_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -250 350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_SMALL_HOOK
+#
+DEF E_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -500 300 -500 400 -550 500 -650 550 -700 550 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_SMALLCAP
+#
+DEF E_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 350 100 350 N
+P 4 0 1 0 200 700 -150 700 -150 0 200 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_TINY
+#
+DEF E_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_TINY" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 50 100 0 0 0 -100 50 -150 150 -150 350 -100 450 0 500 50 500 150 450 200 350 200 300 -150 250 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_TINY_TURNED
+#
+DEF E_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 0 0 -100 50 -150 150 -150 200 200 250 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ECU
+#
+DEF ECU U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ECU" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 300 700 -100 700 -100 0 300 0 N
+P 11 0 1 0 100 1000 0 1050 -200 1050 -300 1000 -350 950 -400 850 -400 550 -350 450 -300 400 -200 350 150 350 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELECTRIC
+#
+DEF ELECTRIC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELECTRIC" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 500 0 200 0 600 400 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT
+#
+DEF ELEMENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 500 500 -550 500 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_DBLSTROKE
+#
+DEF ELEMENT_DBLSTROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_DBLSTROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 350 500 350 N
+P 2 0 1 0 -500 650 500 650 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_MINUS
+#
+DEF ELEMENT_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 -250 500 -250 N
+P 2 0 1 0 500 550 -550 550 N
+P 10 0 1 0 500 1050 -150 1050 -350 950 -450 850 -550 650 -550 450 -450 250 -350 150 -150 50 500 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_MINUS_SMALL
+#
+DEF ELEMENT_MINUS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_MINUS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 400 -200 -400 -200 N
+P 10 0 1 0 400 50 -100 50 -250 100 -350 200 -400 350 -400 450 -350 600 -250 700 -100 750 400 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_SLASH
+#
+DEF ELEMENT_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 450 1200 -500 -150 N
+P 2 0 1 0 500 500 -550 500 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_SMALL
+#
+DEF ELEMENT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 10 0 1 0 400 50 -100 50 -250 100 -350 200 -400 350 -400 450 -350 600 -250 700 -100 750 400 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_STROKE
+#
+DEF ELEMENT_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -800 500 500 500 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_STROKEBAR
+#
+DEF ELEMENT_STROKEBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_STROKEBAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 500 500 500 N
+P 2 0 1 0 500 700 500 300 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_STROKEBAR_SMALL
+#
+DEF ELEMENT_STROKEBAR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_STROKEBAR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 400 550 400 250 N
+P 10 0 1 0 400 50 -100 50 -250 100 -350 200 -400 350 -400 450 -350 600 -250 700 -100 750 400 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELLIPSIS_DIAG
+#
+DEF ELLIPSIS_DIAG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELLIPSIS_DIAG" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -500 950 -450 900 -500 850 -550 900 -500 950 -500 850 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 500 -50 550 -100 500 -150 450 -100 500 -50 500 -150 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELLIPSIS_MID
+#
+DEF ELLIPSIS_MID U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELLIPSIS_MID" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -500 450 -450 400 -500 350 -550 400 -500 450 -500 350 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 500 450 550 400 500 350 450 400 500 450 500 350 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELLIPSIS_VERT
+#
+DEF ELLIPSIS_VERT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELLIPSIS_VERT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 -50 50 -100 0 -150 -50 -100 0 -50 0 -150 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 0 950 50 900 0 850 -50 900 0 950 0 850 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EMPHASIS
+#
+DEF EMPHASIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EMPHASIS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 550 -700 550 N
+P 2 0 1 0 -400 300 -600 150 N
+P 2 0 1 0 -400 800 -600 950 N
+P 2 0 1 0 600 150 400 300 N
+P 2 0 1 0 600 950 400 800 N
+P 2 0 1 0 700 550 500 550 N
+P 11 0 1 0 100 350 0 300 -100 300 -200 350 -250 450 -250 500 -200 650 -100 750 0 800 200 800 100 300 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENG_CAP
+#
+DEF ENG_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENG_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 12 0 1 0 -300 900 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 -150 250 -250 200 -300 100 -350 -50 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENG_SMALL
+#
+DEF ENG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 10 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 -200 200 -300 100 -350 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENG_TINY
+#
+DEF ENG_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENG_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 500 -150 0 N
+P 9 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 -100 150 -200 50 -250 0 -250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENTER_SYM
+#
+DEF ENTER_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENTER_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -650 400 150 400 N
+P 3 0 1 0 -50 200 150 400 -50 600 N
+P 6 0 1 0 -400 200 -400 0 400 0 400 800 -400 800 -400 600 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_LARGE
+#
+DEF EPSILON_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 19 0 1 0 250 1000 150 1050 -100 1050 -200 1000 -250 950 -300 850 -300 750 -250 650 -200 600 -100 550 -250 500 -300 450 -350 350 -350 200 -300 100 -250 50 -150 0 150 0 250 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_SMALL
+#
+DEF EPSILON_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -100 350 -200 300 -250 200 -250 150 -200 50 -100 0 100 0 200 50 N
+P 9 0 1 0 0 350 -100 350 -200 400 -250 500 -250 550 -200 650 -100 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_SMALL_CLOSED
+#
+DEF EPSILON_SMALL_CLOSED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_SMALL_CLOSED" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 -100 350 -200 300 -250 200 -250 150 -200 50 -100 0 100 0 200 50 250 100 300 250 300 450 250 600 200 650 100 700 -100 700 -200 650 -250 550 -250 500 -200 400 -100 350 0 350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_SMALL_HOOK
+#
+DEF EPSILON_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 350 -100 350 -200 400 -250 500 -250 550 -200 650 -100 700 100 700 200 650 N
+P 13 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 200 -200 300 -100 350 -450 300 -450 400 -500 500 -600 550 -650 550 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_TINY
+#
+DEF EPSILON_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 250 0 250 N
+P 11 0 1 0 150 450 100 500 -100 500 -150 450 -150 300 -100 250 -150 200 -150 50 -100 0 100 0 150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_TINY_TURNED
+#
+DEF EPSILON_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 250 100 250 N
+P 11 0 1 0 -150 450 -100 500 100 500 150 450 150 300 100 250 150 200 150 50 100 0 -100 0 -150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL
+#
+DEF EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 400 250 -400 250 N
+X ABOVE ~ 0 850 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL_DEF
+#
+DEF EQUAL_DEF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL_DEF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 350 1200 550 1200 N
+P 2 0 1 0 400 250 -400 250 N
+P 4 0 1 0 550 1400 450 1350 400 1250 400 850 N
+P 9 0 1 0 -250 1400 -250 850 -350 850 -450 900 -500 1000 -500 1100 -450 1200 -350 1250 -250 1250 N
+P 9 0 1 0 -50 1050 200 1050 200 1200 150 1250 0 1250 -50 1200 -50 900 0 850 150 850 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL_SLASH
+#
+DEF EQUAL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 100 700 -100 100 N
+P 2 0 1 0 400 250 -400 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL_SMALL
+#
+DEF EQUAL_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 200 300 200 N
+P 2 0 1 0 -300 400 300 400 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUIVALENT
+#
+DEF EQUIVALENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUIVALENT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -400 150 -300 200 -100 250 100 250 300 200 400 150 N
+P 6 0 1 0 -400 650 -300 600 -100 550 100 550 300 600 400 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUIVALENT_GEOM
+#
+DEF EQUIVALENT_GEOM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUIVALENT_GEOM" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -400 250 -200 250 -200 200 -150 100 -50 50 50 50 150 100 200 200 200 250 400 250 N
+P 10 0 1 0 -400 550 -200 550 -200 600 -150 700 -50 750 50 750 150 700 200 600 200 550 400 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ERASE_TO_RIGHT
+#
+DEF ERASE_TO_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ERASE_TO_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 400 800 -400 0 N
+P 6 0 1 0 -600 800 400 800 800 400 400 0 -600 0 -600 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESCAPE
+#
+DEF ESCAPE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESCAPE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 350 -400 800 N
+P 3 0 1 0 -400 600 -400 800 -200 800 N
+P 11 0 1 0 50 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 350 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SMALL
+#
+DEF ESH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 1050 150 1050 50 1000 0 900 0 -200 -50 -300 -150 -350 -250 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SMALL_CURL
+#
+DEF ESH_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 1050 150 1050 50 1000 0 900 0 -200 -50 -300 -150 -350 -250 -300 -300 -200 -250 -100 -150 -50 200 -50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SMALL_LOOP
+#
+DEF ESH_SMALL_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SMALL_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -250 -350 -150 -350 -50 -300 0 -200 0 900 50 1000 150 1050 250 1000 300 900 250 800 150 750 50 800 0 900 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SQUAT_SMALL
+#
+DEF ESH_SQUAT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SQUAT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 1050 150 1050 50 1000 0 900 0 150 -50 50 -150 0 -250 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESZETT
+#
+DEF ESZETT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESZETT" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 -350 0 -350 850 -300 950 -250 1000 -150 1050 0 1050 100 1000 150 950 200 850 200 700 50 700 -50 650 -100 550 -100 500 -50 400 50 350 200 350 300 300 350 200 350 150 300 50 200 0 0 0 -100 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESZETT_CAP
+#
+DEF ESZETT_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESZETT_CAP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -400 0 -400 750 -350 900 -250 1000 -100 1050 400 1050 50 650 200 650 300 600 350 550 400 450 400 200 350 100 300 50 200 0 0 0 -100 50 -150 100 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ET_TIRONIAN
+#
+DEF ET_TIRONIAN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ET_TIRONIAN" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 700 200 700 -100 -350 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ETA_SMALL
+#
+DEF ETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 7 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ -200 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ETH_SMALL
+#
+DEF ETH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ETH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 1200 -50 900 N
+P 17 0 1 0 250 650 150 700 -50 700 -150 650 -200 600 -250 500 -250 150 -200 50 -100 0 100 0 200 50 250 150 250 750 200 900 100 1000 0 1050 -200 1100 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EURO
+#
+DEF EURO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EURO" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 400 -50 400 N
+P 2 0 1 0 -500 650 100 650 N
+P 16 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 250 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EXCESS
+#
+DEF EXCESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EXCESS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 100 400 N
+P 6 0 1 0 350 150 400 100 350 50 300 100 350 150 350 50 N
+P 6 0 1 0 350 750 400 700 350 650 300 700 350 750 350 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EXCLAM
+#
+DEF EXCLAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EXCLAM" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+P 6 0 1 0 0 400 -50 1000 0 1050 50 1000 0 400 0 1050 N
+X P ~ -250 0 300 U 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL
+#
+DEF EZH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -250 700 200 700 -150 250 0 250 100 200 150 150 200 50 200 -150 150 -250 100 -300 0 -350 -150 -350 -250 -300 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL_CURL
+#
+DEF EZH_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -250 700 200 700 -150 250 0 250 100 200 150 150 200 50 200 -150 150 -250 100 -300 0 -350 -100 -350 -200 -300 -250 -200 -200 -100 -100 -50 0 -100 150 -400 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL_LOOP
+#
+DEF EZH_SMALL_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -250 700 200 700 -150 300 0 300 100 250 150 200 200 100 200 -150 150 -250 100 -300 0 -350 -100 -350 -200 -300 -250 -200 -250 -150 -200 -50 -100 0 200 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL_TAIL
+#
+DEF EZH_SMALL_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 700 200 700 -150 350 50 350 150 300 200 200 200 150 150 50 50 0 -50 0 -150 -50 -200 -150 -200 -200 -150 -300 -50 -350 200 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# F_CAP
+#
+DEF F_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "F_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 550 -250 550 N
+P 3 0 1 0 -250 0 -250 1050 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ -250 0 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -200 250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# F_SMALL
+#
+DEF F_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "F_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 5 0 1 0 0 0 0 900 50 1000 150 1050 250 1050 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FEI_CAP
+#
+DEF FEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1050 300 -350 N
+P 11 0 1 0 -100 1050 -200 1000 -300 900 -350 700 -350 350 -300 150 -200 50 -100 0 100 0 200 50 300 150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FEI_SMALL
+#
+DEF FEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 -350 N
+P 11 0 1 0 -50 700 -150 650 -200 600 -250 500 -250 200 -200 100 -150 50 -50 0 100 0 200 50 250 100 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FENG_SMALL
+#
+DEF FENG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FENG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -500 700 -100 700 -100 0 N
+P 5 0 1 0 -350 0 -350 900 -300 1000 -200 1050 -100 1050 N
+P 10 0 1 0 -100 600 -50 650 50 700 200 700 300 650 350 550 350 -200 300 -300 200 -350 100 -350 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X MIDDLE ~ -350 350 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FITA_CAP
+#
+DEF FITA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FITA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 550 350 550 N
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FITA_SMALL
+#
+DEF FITA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FITA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 350 250 350 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FLOOR
+#
+DEF FLOOR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FLOOR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -50 1150 -50 -350 200 -350 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FLOOR_CAP
+#
+DEF FLOOR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FLOOR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 0 -150 0 -150 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FORCES
+#
+DEF FORCES U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FORCES" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 -400 0 N
+P 2 0 1 0 -100 400 400 400 N
+P 2 0 1 0 -100 800 -100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FRAC_LINE
+#
+DEF FRAC_LINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FRAC_LINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 500 350 500 N
+X DENOM ~ 0 -300 100 R 50 50 1 1 I
+X NUM ~ 0 650 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FULL_STOP
+#
+DEF FULL_STOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FULL_STOP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FUSE
+#
+DEF FUSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FUSE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 400 500 400 N
+P 5 0 1 0 -400 700 400 700 400 100 -400 100 -400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_CAP
+#
+DEF G_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_CAP" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 1000 100 1050 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 450 -350 250 -300 150 -200 50 -50 0 50 0 200 50 250 100 250 450 50 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X HOOK ~ -250 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 250 250 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_SMALL
+#
+DEF G_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 250 700 250 -150 200 -250 150 -300 50 -350 -100 -350 -200 -300 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 250 -150 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_SMALL_SCRIPT
+#
+DEF G_SMALL_SCRIPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_SMALL_SCRIPT" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 100 200 50 100 0 -100 0 -200 50 -250 150 -250 500 -200 600 -150 650 -50 700 250 700 250 -150 200 -250 150 -300 50 -350 -250 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 250 -150 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_SMALLCAP
+#
+DEF G_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 150 650 50 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 100 0 200 50 200 300 50 300 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X TOP2 ~ 150 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_TINY
+#
+DEF G_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_TINY" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 150 500 150 -100 100 -200 0 -250 -150 -250 N
+P 10 0 1 0 150 450 50 500 -50 500 -150 450 -200 350 -200 150 -150 50 -50 0 50 0 150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 150 -100 100 R 50 50 1 1 I
+X TOP2 ~ 150 500 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_CAP
+#
+DEF GAMMA_AFR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -350 1050 150 0 150 -200 100 -300 0 -350 -100 -300 -150 -200 -150 0 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_SMALL
+#
+DEF GAMMA_AFR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -250 700 150 0 150 -200 100 -300 0 -350 -100 -300 -150 -200 -150 0 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_SMALLCAP
+#
+DEF GAMMA_AFR_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -250 700 100 250 150 150 100 50 0 0 -100 50 -150 150 -100 250 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_TINYCAP_TURNED
+#
+DEF GAMMA_AFR_TINYCAP_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_TINYCAP_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 200 0 -100 350 -100 450 -50 500 50 500 100 450 100 350 -200 0 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_CAP
+#
+DEF GAMMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 0 -250 1050 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ -250 0 100 R 50 50 1 1 I
+X MIDDLE ~ -200 500 100 R 50 50 1 1 I
+X MIDHOOK ~ -250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_CAP_HOOK
+#
+DEF GAMMA_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 1050 -250 1050 -250 0 -50 0 -50 -200 -100 -300 -200 -350 -300 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ -200 500 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_CAP_UPTURN
+#
+DEF GAMMA_CAP_UPTURN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_CAP_UPTURN" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 0 -250 1050 300 1050 300 1300 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ -250 0 100 R 50 50 1 1 I
+X MIDDLE ~ -200 500 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALL
+#
+DEF GAMMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 100 0 -350 N
+P 5 0 1 0 -300 700 -250 700 -200 650 0 100 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALLCAP
+#
+DEF GAMMA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -150 0 -150 700 250 700 N
+X BOTTOM ~ -150 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 350 100 R 50 50 1 1 I
+X MIDHOOK ~ -150 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALLCAP_HOOK
+#
+DEF GAMMA_SMALLCAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALLCAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 700 -150 700 -150 0 50 0 50 -200 0 -300 -100 -350 -200 -350 N
+X MIDDLE ~ -100 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALLCAP_UPTURN
+#
+DEF GAMMA_SMALLCAP_UPTURN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALLCAP_UPTURN" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -150 0 -150 700 250 700 250 950 N
+X BOTTOM ~ -150 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_TINY
+#
+DEF GAMMA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 50 0 -250 N
+P 4 0 1 0 -250 500 -150 450 0 50 200 500 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GANGIA_CAP
+#
+DEF GANGIA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GANGIA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 450 0 N
+P 5 0 1 0 -450 1050 -400 1050 -300 1000 300 50 400 0 N
+P 5 0 1 0 450 1050 400 1050 300 1000 -300 50 -400 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GANGIA_SMALL
+#
+DEF GANGIA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GANGIA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -350 700 -250 650 200 50 300 0 -350 0 -250 50 200 650 300 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GRAVE
+#
+DEF GRAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GRAVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 1100 50 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GRAVE_DBL
+#
+DEF GRAVE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GRAVE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 950 -300 1100 N
+P 2 0 1 0 200 950 50 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GREATER_NOTEQUAL
+#
+DEF GREATER_NOTEQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GREATER_NOTEQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 100 350 -100 -250 N
+P 2 0 1 0 400 -100 -400 -100 N
+P 3 0 1 0 -400 400 400 700 -400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GREATER_WAVE
+#
+DEF GREATER_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GREATER_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 250 400 550 -400 850 N
+P 8 0 1 0 -400 50 -350 100 -200 150 -50 100 50 0 200 -50 350 0 400 50 N
+X CENTER_W ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GROUND
+#
+DEF GROUND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GROUND" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 600 500 600 N
+P 2 0 1 0 -300 300 300 300 N
+P 2 0 1 0 0 1050 0 600 N
+P 2 0 1 0 100 0 -100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GUILLEMET
+#
+DEF GUILLEMET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GUILLEMET" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 700 -150 400 150 100 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GUILLEMET_DBL
+#
+DEF GUILLEMET_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GUILLEMET_DBL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 700 -300 400 0 100 N
+P 3 0 1 0 300 200 100 400 300 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_CAP
+#
+DEF H_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 2 0 1 0 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 300 700 100 R 50 50 1 1 I
+X P ~ -550 0 300 U 50 50 1 1 I
+X PERIS ~ -650 1300 100 R 50 50 1 1 I
+X S ~ 550 0 300 U 50 50 1 1 I
+X TONOS ~ -650 950 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_CAP_STROKE
+#
+DEF H_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 850 450 850 N
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 2 0 1 0 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_LARGE
+#
+DEF H_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 1050 -300 0 N
+P 6 0 1 0 -300 550 0 550 150 500 250 400 300 250 300 0 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALL
+#
+DEF H_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 1050 N
+P 7 0 1 0 200 0 200 550 150 650 50 700 -100 700 -200 650 -250 600 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X STROKE ~ -200 950 100 R 50 50 1 1 I
+X TOP ~ -250 1050 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALL_HOOK
+#
+DEF H_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 1050 -100 1050 -200 1000 -250 900 -250 0 N
+P 7 0 1 0 200 0 200 550 150 650 50 700 -100 700 -200 650 -250 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALL_RETROHOOK
+#
+DEF H_SMALL_RETROHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALL_RETROHOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -500 1050 -400 1050 -300 1000 -250 900 -250 0 N
+P 7 0 1 0 200 0 200 550 150 650 50 700 -100 700 -200 650 -250 600 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALLCAP
+#
+DEF H_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 350 200 350 N
+P 2 0 1 0 -250 700 -250 0 N
+P 2 0 1 0 200 700 200 0 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 200 350 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HA_ABKHAZ_CAP
+#
+DEF HA_ABKHAZ_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HA_ABKHAZ_CAP" 0 -350 60 H V C CNN
+DRAW
+P 27 0 1 0 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 450 -350 250 -300 150 -200 50 -50 0 50 0 200 50 300 150 350 250 400 450 400 700 350 850 250 900 200 900 100 850 50 700 50 450 100 250 150 150 250 50 350 0 450 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HA_ABKHAZ_SMALL
+#
+DEF HA_ABKHAZ_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HA_ABKHAZ_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 23 0 1 0 -50 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 450 250 550 150 600 50 550 0 450 0 200 50 100 100 50 200 0 350 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARD_CAP
+#
+DEF HARD_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARD_CAP" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -500 1050 -250 1050 -250 0 50 0 200 50 300 150 350 250 350 400 300 500 200 600 50 650 -250 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARD_SMALL
+#
+DEF HARD_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARD_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -400 700 -200 700 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARPOON_RIGHT_N
+#
+DEF HARPOON_RIGHT_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARPOON_RIGHT_N" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 0 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARPOON_UP_E
+#
+DEF HARPOON_UP_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARPOON_UP_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 400 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARPOONS_W_E
+#
+DEF HARPOONS_W_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARPOONS_W_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 250 400 250 200 50 N
+P 3 0 1 0 400 550 -400 550 -200 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HASH
+#
+DEF HASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 450 700 N
+P 2 0 1 0 0 1150 -300 -200 N
+P 2 0 1 0 350 250 -400 250 N
+P 3 0 1 0 50 -200 350 1150 350 1150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HASH_SYM
+#
+DEF HASH_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HASH_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 600 400 600 N
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 200 800 200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HELM
+#
+DEF HELM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HELM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 350 200 N
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 350 600 -350 200 N
+P 13 0 1 0 0 700 -150 650 -250 550 -300 400 -250 250 -150 150 0 100 150 150 250 250 300 400 250 550 150 650 0 700 N
+X ACCENT ~ 0 800 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HETA_CAP
+#
+DEF HETA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HETA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1050 -250 0 N
+P 2 0 1 0 300 550 -250 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HETA_SMALL
+#
+DEF HETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 350 200 350 N
+P 2 0 1 0 -200 700 -200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HEXAGON_H_CAP
+#
+DEF HEXAGON_H_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HEXAGON_H_CAP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -300 0 -600 500 -300 1000 300 1000 600 500 300 0 -300 0 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HGAMMA_CAP
+#
+DEF HGAMMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HGAMMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 3 0 1 0 300 0 300 1050 850 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 950 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HGAMMA_SMALLCAP
+#
+DEF HGAMMA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HGAMMA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 350 200 350 N
+P 2 0 1 0 -250 700 -250 0 N
+P 3 0 1 0 200 0 200 700 600 700 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HOOK
+#
+DEF HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 -200 -50 -300 -150 -350 -250 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HORI_CAP
+#
+DEF HORI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HORI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 -350 950 -300 1000 -150 1050 100 1050 250 1000 300 950 350 850 350 750 300 600 200 500 -400 0 -200 -150 -50 -200 200 -200 350 -150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HORI_SMALL
+#
+DEF HORI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HORI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 450 200 350 100 250 -200 0 -100 -100 0 -150 150 -150 250 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HORN
+#
+DEF HORN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HORN" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 650 100 700 150 800 100 900 50 950 N
+X X ~ 0 650 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HOURGLASS
+#
+DEF HOURGLASS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HOURGLASS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 0 0 250 250 0 N
+P 3 0 1 0 -200 0 0 200 200 0 N
+P 3 0 1 0 -100 0 0 100 100 0 N
+P 3 0 1 0 50 0 0 50 -50 0 N
+P 3 0 1 0 150 0 0 150 -150 0 N
+P 5 0 1 0 350 700 0 550 -350 700 0 600 350 700 N
+P 13 0 1 0 -400 1050 400 1050 400 800 350 700 -350 350 -400 250 -400 0 400 0 400 250 350 350 -350 700 -400 850 -400 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HUNDRED_THOUSANDS_CYR
+#
+DEF HUNDRED_THOUSANDS_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HUNDRED_THOUSANDS_CYR" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -1000 450 -950 550 -850 600 -750 550 -700 450 N
+P 5 0 1 0 -750 -150 -700 -50 -600 0 -500 -50 -450 -150 N
+P 5 0 1 0 -750 1050 -700 1150 -600 1200 -500 1150 -450 1050 N
+P 5 0 1 0 -150 -400 -100 -300 0 -250 100 -300 150 -400 N
+P 5 0 1 0 -150 1300 -100 1400 0 1450 100 1400 150 1300 N
+P 5 0 1 0 450 -150 500 -50 600 0 700 -50 750 -150 N
+P 5 0 1 0 450 1050 500 1150 600 1200 700 1150 750 1050 N
+P 5 0 1 0 700 450 750 550 850 600 950 550 1000 450 N
+X X ~ 0 500 100 L 50 50 1 1 I
+X ~ ~ -1200 0 300 U 50 50 1 1 I
+X ~ ~ 1200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HV_CAP
+#
+DEF HV_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HV_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -500 1050 N
+P 2 0 1 0 -500 550 100 550 N
+P 8 0 1 0 100 1050 100 150 150 50 250 0 400 0 500 50 550 150 550 700 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HV_SMALL
+#
+DEF HV_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HV_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 -450 1050 N
+P 16 0 1 0 -450 600 -400 650 -300 700 -150 700 -50 650 0 550 0 150 50 50 150 0 300 0 400 50 450 100 500 200 500 550 450 650 400 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X STROKE ~ -400 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HV_SMALLCAP
+#
+DEF HV_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HV_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 350 100 350 N
+P 2 0 1 0 -350 700 -350 0 N
+P 8 0 1 0 100 700 100 150 150 50 250 0 300 0 400 50 450 150 450 450 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HYPHEN
+#
+DEF HYPHEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HYPHEN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 350 150 350 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HYSTERESIS
+#
+DEF HYSTERESIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HYSTERESIS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -450 0 200 0 200 800 N
+P 3 0 1 0 -200 0 -200 800 450 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_BEAM
+#
+DEF I_BEAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_BEAM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -300 400 -300 N
+P 2 0 1 0 -400 1050 400 1050 N
+P 2 0 1 0 0 1050 0 -300 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_CAP
+#
+DEF I_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X MIDDLE ~ 0 550 100 R 50 50 1 1 I
+X P ~ -250 0 300 U 50 50 1 1 I
+X PERIS ~ -350 1300 100 R 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+X TONOS ~ -350 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_SMALL
+#
+DEF I_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_SMALLCAP
+#
+DEF I_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 700 N
+P 2 0 1 0 150 0 -150 0 N
+P 2 0 1 0 150 700 -150 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_TINY
+#
+DEF I_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IDENTICAL
+#
+DEF IDENTICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IDENTICAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 700 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IE_CAP
+#
+DEF IE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 100 550 N
+P 16 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 250 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IE_SMALL
+#
+DEF IE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 350 50 350 N
+P 12 0 1 0 200 50 100 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 100 700 200 650 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IMAGEOF
+#
+DEF IMAGEOF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IMAGEOF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 400 250 -400 250 N
+P 6 0 1 0 -350 850 -300 800 -350 750 -400 800 -350 850 -350 750 N
+P 6 0 1 0 350 50 400 0 350 -50 300 0 350 50 350 -50 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INFINITY
+#
+DEF INFINITY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INFINITY" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 100 500 200 550 300 500 350 400 300 300 200 250 100 300 -100 500 -200 550 -300 500 -350 400 -300 300 -200 250 -100 300 100 500 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL
+#
+DEF INTEGRAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CLOCKWISE
+#
+DEF INTEGRAL_CLOCKWISE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CLOCKWISE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 450 300 300 450 450 N
+P 8 0 1 0 -300 400 -250 550 -150 650 0 700 150 650 250 550 300 400 300 300 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CONTOUR
+#
+DEF INTEGRAL_CONTOUR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CONTOUR" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 13 0 1 0 0 700 150 650 250 550 300 400 250 250 150 150 0 100 -150 150 -250 250 -300 400 -250 550 -150 650 0 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CONTOUR_CLOCKWISE
+#
+DEF INTEGRAL_CONTOUR_CLOCKWISE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CONTOUR_CLOCKWISE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 500 300 350 450 500 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 13 0 1 0 -300 400 -250 550 -150 650 0 700 150 650 250 550 300 400 250 250 150 150 0 100 -150 150 -250 250 -300 400 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CONTOUR_COUNTERCLOCKWISE
+#
+DEF INTEGRAL_CONTOUR_COUNTERCLOCKWISE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CONTOUR_COUNTERCLOCKWISE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 300 300 450 450 300 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 13 0 1 0 -300 400 -250 550 -150 650 0 700 150 650 250 550 300 400 250 250 150 150 0 100 -150 150 -250 250 -300 400 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_DBL
+#
+DEF INTEGRAL_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_DBL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -500 -100 -450 -200 -350 -250 -250 -200 -200 -100 -200 900 -150 1000 -50 1050 50 1000 100 900 N
+P 10 0 1 0 -100 -100 -50 -200 50 -250 150 -200 200 -100 200 900 250 1000 350 1050 450 1000 500 900 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_DBL_CONTOUR
+#
+DEF INTEGRAL_DBL_CONTOUR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_DBL_CONTOUR" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -500 -100 -450 -200 -350 -250 -250 -200 -200 -100 -200 900 -150 1000 -50 1050 50 1000 100 900 N
+P 10 0 1 0 -100 -100 -50 -200 50 -250 150 -200 200 -100 200 900 250 1000 350 1050 450 1000 500 900 N
+P 15 0 1 0 200 700 350 650 450 550 500 400 450 250 350 150 200 100 -200 100 -350 150 -450 250 -500 400 -450 550 -350 650 -200 700 200 700 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_TOP
+#
+DEF INTEGRAL_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_TOP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 -350 0 700 50 900 100 1000 200 1050 300 1000 350 900 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_TPL
+#
+DEF INTEGRAL_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_TPL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -700 -100 -650 -200 -550 -250 -450 -200 -400 -100 -400 900 -350 1000 -250 1050 -150 1000 -100 900 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 10 0 1 0 100 -100 150 -200 250 -250 350 -200 400 -100 400 900 450 1000 550 1050 650 1000 700 900 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_TPL_CONTOUR
+#
+DEF INTEGRAL_TPL_CONTOUR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_TPL_CONTOUR" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -700 -100 -650 -200 -550 -250 -450 -200 -400 -100 -400 900 -350 1000 -250 1050 -150 1000 -100 900 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 10 0 1 0 100 -100 150 -200 250 -250 350 -200 400 -100 400 900 450 1000 550 1050 650 1000 700 900 N
+P 15 0 1 0 400 700 550 650 650 550 700 400 650 250 550 150 400 100 -400 100 -550 150 -650 250 -700 400 -650 550 -550 650 -400 700 400 700 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTERCALATE
+#
+DEF INTERCALATE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTERCALATE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 200 1050 N
+P 2 0 1 0 0 1050 0 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTERROBANG
+#
+DEF INTERROBANG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTERROBANG" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 1050 -50 400 N
+P 6 0 1 0 -50 100 0 50 -50 0 -100 50 -50 100 -50 0 N
+P 6 0 1 0 -50 100 0 50 -50 0 -100 50 -50 100 -50 0 N
+P 12 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 900 250 800 200 700 150 650 50 600 0 550 -50 450 -50 400 N
+P 12 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 900 250 800 200 700 150 650 50 600 0 550 -50 450 -50 400 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTERRUPT
+#
+DEF INTERRUPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTERRUPT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 0 -350 600 350 600 0 0 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IOTA_BELOW
+#
+DEF IOTA_BELOW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IOTA_BELOW" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 -250 0 -400 50 -450 100 -450 N
+X X ~ 0 -250 100 L 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IOTA_LARGE
+#
+DEF IOTA_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IOTA_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 1050 0 200 50 100 100 50 200 0 300 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IOTA_SMALL
+#
+DEF IOTA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IOTA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 700 0 150 50 50 150 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYE_CAP
+#
+DEF IYE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 1050 -450 0 N
+P 2 0 1 0 350 550 -450 550 N
+P 16 0 1 0 500 100 450 50 300 0 200 0 50 50 -50 150 -100 250 -150 450 -150 600 -100 800 -50 900 50 1000 200 1050 300 1050 450 1000 500 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYE_SMALL
+#
+DEF IYE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 -350 0 N
+P 2 0 1 0 250 350 -350 350 N
+P 12 0 1 0 400 50 300 0 100 0 0 50 -50 100 -100 200 -100 500 -50 600 0 650 100 700 300 700 400 650 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_BIG_CAP
+#
+DEF IYUS_BIG_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_BIG_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -600 1050 N
+P 2 0 1 0 -600 550 50 550 N
+P 5 0 1 0 200 0 200 550 -200 1050 600 1050 200 550 N
+P 10 0 1 0 -250 0 -250 250 -200 400 -100 500 50 550 350 550 500 500 600 400 650 250 650 0 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_BIG_SMALL
+#
+DEF IYUS_BIG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_BIG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 -450 700 N
+P 2 0 1 0 -450 350 50 350 N
+P 5 0 1 0 200 0 200 350 -100 700 500 700 200 350 N
+P 10 0 1 0 -150 0 -150 150 -100 250 -50 300 50 350 350 350 450 300 500 250 550 150 550 0 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_LITTLE_CAP
+#
+DEF IYUS_LITTLE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_LITTLE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -600 1050 N
+P 2 0 1 0 -600 400 500 400 N
+P 2 0 1 0 200 400 200 0 N
+P 3 0 1 0 -300 0 200 1050 700 0 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_LITTLE_SMALL
+#
+DEF IYUS_LITTLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_LITTLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 -400 700 N
+P 2 0 1 0 200 300 200 0 N
+P 2 0 1 0 400 300 -400 300 N
+P 3 0 1 0 -150 0 200 700 550 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IZHE_CAP
+#
+DEF IZHE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IZHE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 1050 -300 0 300 1050 300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IZHE_SMALL
+#
+DEF IZHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IZHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 700 -250 0 250 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_CAP
+#
+DEF J_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_CAP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 150 1050 150 300 100 150 0 50 -150 0 -250 0 N
+X ABOVE ~ 150 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X MIDDLE ~ 150 550 100 R 50 50 1 1 I
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_SMALL
+#
+DEF J_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 700 0 -200 -50 -300 -150 -350 -200 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_SMALL_CURL
+#
+DEF J_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 700 0 -200 -50 -300 -150 -350 -250 -300 -300 -200 -250 -100 -150 -50 200 -50 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_SMALLCAP
+#
+DEF J_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 100 700 100 200 50 100 0 50 -100 0 -150 0 N
+X ABOVE ~ 100 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X MIDDLE ~ 100 350 100 R 50 50 1 1 I
+X P ~ -300 0 300 U 50 50 1 1 I
+X S ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_CAP
+#
+DEF K_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 0 -150 600 N
+P 2 0 1 0 300 1050 -300 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDARM ~ 150 900 100 R 50 50 1 1 I
+X MIDDLE ~ -100 600 100 R 50 50 1 1 I
+X MIDTOP ~ -300 850 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_CAP_BASHKIR
+#
+DEF K_CAP_BASHKIR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_CAP_BASHKIR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -150 600 N
+P 2 0 1 0 300 1050 -300 450 N
+P 3 0 1 0 -550 1050 -300 1050 -300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 600 100 R 50 50 1 1 I
+X MIDTOP ~ -300 850 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_CAP_HOOK
+#
+DEF K_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 0 -150 600 N
+P 6 0 1 0 -300 450 250 1000 350 1050 450 1000 500 900 500 800 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 600 100 R 50 50 1 1 I
+X MIDTOP ~ -300 850 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_SMALL
+#
+DEF K_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 1050 N
+P 2 0 1 0 -100 400 200 0 N
+P 2 0 1 0 200 700 -200 300 N
+X ABOVE ~ -200 1150 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -200 850 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_SMALL_BASHKIR
+#
+DEF K_SMALL_BASHKIR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_SMALL_BASHKIR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 400 200 0 N
+P 2 0 1 0 200 700 -200 300 N
+P 3 0 1 0 -400 700 -200 700 -200 0 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_SMALLCAP
+#
+DEF K_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 2 0 1 0 -100 400 200 0 N
+P 2 0 1 0 200 700 -200 300 N
+X BOTTOM1 ~ -200 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDARM ~ 100 600 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X TOP1 ~ -200 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_TINY
+#
+DEF K_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 -150 0 N
+P 2 0 1 0 150 0 -50 300 N
+P 2 0 1 0 150 500 -150 200 N
+X ABOVE ~ -150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -150 600 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KAI_CAP
+#
+DEF KAI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KAI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 1050 -300 450 N
+P 3 0 1 0 -150 600 300 0 -50 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KAI_SMALL
+#
+DEF KAI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KAI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -300 700 -200 650 -150 550 -150 150 -200 50 -250 0 -300 50 -300 150 -250 250 200 450 250 550 250 650 200 700 150 650 100 550 100 150 150 50 250 0 200 -150 150 -250 100 -300 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KAPPA_SMALL_SCRIPT
+#
+DEF KAPPA_SMALL_SCRIPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KAPPA_SMALL_SCRIPT" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -300 700 -200 650 -150 550 -150 150 -200 50 -250 0 -300 50 -300 150 -250 250 200 450 250 550 250 650 200 700 150 650 100 550 100 150 150 50 250 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KEYBOARD
+#
+DEF KEYBOARD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KEYBOARD" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -1000 250 1000 250 N
+P 2 0 1 0 -1000 750 1000 750 N
+P 2 0 1 0 -750 500 -750 750 N
+P 2 0 1 0 -700 0 -700 250 N
+P 2 0 1 0 -650 250 -650 500 N
+P 2 0 1 0 -600 750 -600 1000 N
+P 2 0 1 0 -500 500 -500 750 N
+P 2 0 1 0 -400 250 -400 500 N
+P 2 0 1 0 -350 0 -350 250 N
+P 2 0 1 0 -350 750 -350 1000 N
+P 2 0 1 0 -250 500 -250 750 N
+P 2 0 1 0 -150 250 -150 500 N
+P 2 0 1 0 -100 750 -100 1000 N
+P 2 0 1 0 0 500 0 750 N
+P 2 0 1 0 100 250 100 500 N
+P 2 0 1 0 150 750 150 1000 N
+P 2 0 1 0 250 500 250 750 N
+P 2 0 1 0 350 250 350 500 N
+P 2 0 1 0 400 0 400 250 N
+P 2 0 1 0 400 750 400 1000 N
+P 2 0 1 0 500 500 500 750 N
+P 2 0 1 0 600 250 600 500 N
+P 2 0 1 0 650 750 650 1000 N
+P 2 0 1 0 700 0 700 250 N
+P 3 0 1 0 -1000 500 750 500 750 750 N
+P 5 0 1 0 -1000 0 -1000 1000 1000 1000 1000 0 -1000 0 N
+X ~ ~ -1250 0 300 U 50 50 1 1 I
+X ~ ~ 1250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KHEI_CAP
+#
+DEF KHEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KHEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 -350 0 N
+P 13 0 1 0 -350 500 -250 600 -100 650 100 650 200 600 300 500 350 350 350 200 300 50 250 -50 150 -150 0 -250 -200 -350 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KHEI_SMALL
+#
+DEF KHEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KHEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 250 750 250 700 200 550 100 450 0 400 -100 400 -200 450 -250 550 -250 600 -200 700 -100 750 0 750 100 700 200 550 250 400 250 200 200 100 150 50 50 0 -250 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_ARCHAIC_CAP
+#
+DEF KOPPA_ARCHAIC_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_ARCHAIC_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_ARCHAIC_SMALL
+#
+DEF KOPPA_ARCHAIC_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_ARCHAIC_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_CAP
+#
+DEF KOPPA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -250 1050 -150 1000 -100 900 -300 400 300 650 100 150 150 50 250 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_CYR_CAP
+#
+DEF KOPPA_CYR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_CYR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 1000 100 1050 -100 1050 -250 1000 -350 900 -400 800 -400 650 -350 550 -250 450 -100 400 100 400 100 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 100 150 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_CYR_SMALL
+#
+DEF KOPPA_CYR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_CYR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 400 -250 300 -200 250 -100 200 100 200 100 0 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_SMALL
+#
+DEF KOPPA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 1050 -250 550 250 550 0 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KSI_CAP
+#
+DEF KSI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KSI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 550 50 550 N
+P 5 0 1 0 -200 1300 -50 1050 50 1250 100 1300 150 1300 N
+P 24 0 1 0 -300 1000 -200 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 200 500 250 450 300 350 300 200 250 100 200 50 100 0 -150 0 -250 -50 -300 -150 -300 -200 -250 -300 -150 -350 250 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KSI_SMALL
+#
+DEF KSI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KSI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 5 0 1 0 -150 950 0 700 100 900 150 950 200 950 N
+P 20 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 150 200 50 100 0 -50 0 -150 -50 -200 -150 -200 -200 -150 -300 -50 -350 200 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_CAP
+#
+DEF L_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 250 0 -250 0 -250 1050 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CARON ~ 100 800 100 R 50 50 1 1 I
+X DOT ~ 150 600 100 R 50 50 1 1 I
+X MIDDLE ~ -250 600 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL
+#
+DEF L_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X DOT ~ 350 600 100 R 50 50 1 1 I
+X MIDDLE ~ 0 600 100 L 50 50 1 1 I
+X P ~ -250 0 300 U 50 50 1 1 I
+X S ~ 300 0 300 U 50 50 1 1 I
+X SAPOS ~ 100 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_BELT
+#
+DEF L_SMALL_BELT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_BELT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+P 8 0 1 0 0 500 -50 600 -150 650 -250 600 -300 500 -250 400 -150 350 250 350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_CURL
+#
+DEF L_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 0 1050 0 150 50 50 150 0 250 0 350 50 400 150 350 250 250 300 150 250 -50 -150 N
+X MIDDLE ~ 0 600 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_MIDDOT
+#
+DEF L_SMALL_MIDDOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_MIDDOT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+P 6 0 1 0 350 600 400 550 350 500 300 550 350 600 350 500 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_RETROHOOK
+#
+DEF L_SMALL_RETROHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_RETROHOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 1050 0 -200 50 -300 150 -350 250 -350 N
+X MIDDLE ~ 0 600 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALLCAP
+#
+DEF L_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -150 700 -150 0 200 0 N
+X ABOVE ~ -100 950 100 R 50 50 1 1 I
+X MIDDLE ~ -150 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LAMBDA_CAP
+#
+DEF LAMBDA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LAMBDA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 0 0 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LAMBDA_SMALL
+#
+DEF LAMBDA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LAMBDA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 -250 0 N
+P 5 0 1 0 -250 1050 -150 1050 -100 1000 0 700 250 0 N
+X MIDTOP ~ -50 850 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LAMBDA_SMALLCAP
+#
+DEF LAMBDA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LAMBDA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 0 0 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LEG
+#
+DEF LEG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LEG" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS
+#
+DEF LESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 700 -400 400 400 100 N
+X INSIDE ~ 350 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_EQUAL
+#
+DEF LESS_EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+P 2 0 1 0 400 200 -400 200 N
+P 3 0 1 0 400 400 -400 700 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_GREATER
+#
+DEF LESS_GREATER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_GREATER" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 400 400 100 -400 -200 N
+P 3 0 1 0 400 400 -400 700 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_LESS
+#
+DEF LESS_LESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_LESS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 700 -800 400 0 100 N
+P 3 0 1 0 800 700 0 400 800 100 N
+X ~ ~ -1050 0 300 U 50 50 1 1 I
+X ~ ~ 1050 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_MINUS
+#
+DEF LESS_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 50 -400 50 N
+P 3 0 1 0 400 250 -400 550 400 850 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_MINUS_GREATER
+#
+DEF LESS_MINUS_GREATER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_MINUS_GREATER" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 400 -400 400 N
+P 3 0 1 0 -400 200 400 0 -400 -200 N
+P 3 0 1 0 400 600 -400 800 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_NOTEQUAL
+#
+DEF LESS_NOTEQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_NOTEQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+P 2 0 1 0 100 350 -100 -250 N
+P 2 0 1 0 400 200 -400 200 N
+P 3 0 1 0 400 400 -400 700 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_TPL
+#
+DEF LESS_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_TPL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 700 -1200 400 -400 100 N
+P 3 0 1 0 400 700 -400 400 400 100 N
+P 3 0 1 0 1200 700 400 400 1200 100 N
+X ~ ~ -1450 0 300 U 50 50 1 1 I
+X ~ ~ 1450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_WAVE
+#
+DEF LESS_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 250 -400 550 400 850 N
+P 8 0 1 0 -400 50 -350 100 -200 150 -50 100 50 0 200 -50 350 0 400 50 N
+X CENTER_W ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LEZH_SMALL
+#
+DEF LEZH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LEZH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -300 1050 -300 150 -250 50 -150 0 -150 0 N
+P 13 0 1 0 -300 700 200 700 -150 250 0 250 100 200 150 150 200 50 200 -150 150 -250 100 -300 0 -350 -150 -350 -250 -300 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H
+#
+DEF LINE_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 400 500 400 N
+X CENTER ~ 0 400 100 D 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H_1
+#
+DEF LINE_H_1 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H_1" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 1000 500 1000 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H_3
+#
+DEF LINE_H_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H_3" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 700 500 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V
+#
+DEF LINE_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 -350 0 1150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_CAP
+#
+DEF LINE_V_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1200 0 -150 N
+X X ~ 0 550 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_DBL
+#
+DEF LINE_V_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 1150 -150 -350 N
+P 2 0 1 0 150 1150 150 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_DBL_SLASH
+#
+DEF LINE_V_DBL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_DBL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 250 300 550 N
+P 2 0 1 0 -150 1150 -150 -350 N
+P 2 0 1 0 150 1150 150 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_LETTER
+#
+DEF LINE_V_LETTER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_LETTER" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_LETTER_DBL
+#
+DEF LINE_V_LETTER_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_LETTER_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 1050 -150 -350 N
+P 2 0 1 0 150 1050 150 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_SLASH
+#
+DEF LINE_V_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 300 200 500 N
+P 2 0 1 0 0 1150 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_SMALL
+#
+DEF LINE_V_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 850 0 -150 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_SYM
+#
+DEF LINE_V_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_WAVY
+#
+DEF LINE_V_WAVY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_WAVY" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 0 1150 50 1100 100 1000 50 900 0 850 -50 750 0 650 50 600 100 500 50 400 0 350 -50 250 0 150 50 100 100 0 50 -100 0 -150 -50 -250 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_CAP
+#
+DEF LJE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 -750 0 -700 0 -600 50 -550 150 -450 750 -400 900 -300 1000 -150 1050 0 1050 0 0 300 0 450 50 550 150 600 250 600 400 550 500 450 600 300 650 0 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_KOMI_CAP
+#
+DEF LJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -500 0 -450 0 -350 50 -300 150 -200 750 -150 900 -50 1000 100 1050 250 1050 250 150 300 50 400 0 550 0 650 50 700 150 700 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_KOMI_SMALL
+#
+DEF LJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 -300 0 -200 50 -150 150 -100 550 -50 650 50 700 200 700 200 150 250 50 350 0 400 0 500 50 550 150 550 500 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_SMALL
+#
+DEF LJE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 -500 0 -400 50 -350 150 -300 550 -250 650 -150 700 0 700 0 0 250 0 350 50 400 150 400 300 350 400 250 450 0 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LL_CAP
+#
+DEF LL_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LL_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 1050 -100 0 N
+P 3 0 1 0 -400 1050 -400 0 400 0 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LL_SMALL
+#
+DEF LL_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LL_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 4 0 1 0 -150 1050 -150 150 -100 50 0 0 N
+P 4 0 1 0 300 0 200 50 150 150 150 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOW_LINE
+#
+DEF LOW_LINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOW_LINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOW_LINE_DBL
+#
+DEF LOW_LINE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOW_LINE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -350 400 -350 N
+P 2 0 1 0 -400 -100 400 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOZENGE
+#
+DEF LOZENGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOZENGE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 -300 -400 400 0 1050 400 400 0 -300 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LS_SMALL
+#
+DEF LS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -300 1050 -300 150 -250 50 -150 0 -50 50 50 0 250 0 350 50 400 150 400 200 350 300 250 350 100 350 0 400 -50 500 -50 550 0 650 100 700 250 700 350 650 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDI_CAP
+#
+DEF LYUDI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 250 0 250 1050 100 1050 -50 1000 -150 900 -200 750 -300 150 -350 50 -450 0 -500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDI_SMALL
+#
+DEF LYUDI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 200 0 200 700 50 700 -50 650 -100 550 -150 150 -200 50 -300 0 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 200 350 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDIX_CAP
+#
+DEF LYUDIX_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDIX_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 0 600 1050 N
+P 9 0 1 0 -700 0 -650 0 -550 50 -500 150 -400 750 -350 900 -250 1000 -100 1050 600 0 N
+X ABOVE ~ 250 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ -100 0 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDIX_SMALL
+#
+DEF LYUDIX_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDIX_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 450 700 -150 0 N
+P 7 0 1 0 -500 0 -400 50 -350 150 -300 550 -250 650 -150 700 450 0 N
+X BOTTOM2 ~ -150 0 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LZ_SMALL
+#
+DEF LZ_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LZ_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 450 700 -100 0 N
+P 5 0 1 0 -250 1050 -250 150 -200 50 -100 0 450 0 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_CAP
+#
+DEF M_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 0 300 350 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM3 ~ 350 0 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_LARGE
+#
+DEF M_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -500 1050 N
+P 8 0 1 0 -500 900 -400 1000 -300 1050 -200 1050 -100 1000 -50 950 0 850 0 0 N
+P 9 0 1 0 0 850 50 950 100 1000 200 1050 300 1050 400 1000 450 950 500 850 500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM3 ~ 500 0 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALL
+#
+DEF M_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 -450 700 N
+P 7 0 1 0 -450 600 -400 650 -300 700 -150 700 -50 650 0 550 0 0 N
+P 7 0 1 0 0 550 50 650 150 700 300 700 400 650 450 550 450 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -450 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 0 0 100 R 50 50 1 1 I
+X BOTTOM3 ~ 450 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -450 700 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALL_ABOVE
+#
+DEF M_SMALL_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALL_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1250 -250 850 N
+P 5 0 1 0 -250 1200 -200 1250 -50 1250 0 1200 0 850 N
+P 5 0 1 0 0 1200 50 1250 200 1250 250 1200 250 850 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALL_SIDE
+#
+DEF M_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 -100 -350 -100 N
+P 7 0 1 0 -250 -100 -300 -50 -350 50 -350 200 -300 300 -200 350 350 350 N
+P 7 0 1 0 -200 350 -300 400 -350 500 -350 650 -300 750 -200 800 350 800 N
+X ABOVE ~ -600 350 100 R 50 50 1 1 I
+X BELOW ~ 600 350 100 R 50 50 1 1 I
+X BOTTOM1 ~ 350 -100 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 350 100 R 50 50 1 1 I
+X BOTTOM3 ~ 350 800 100 R 50 50 1 1 I
+X TOP1 ~ -350 -100 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALLCAP
+#
+DEF M_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -300 0 -300 700 0 150 300 700 300 0 N
+X BOTTOM3 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_TINY
+#
+DEF M_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 0 -350 500 N
+P 6 0 1 0 -350 450 -250 500 -150 500 -50 450 0 350 0 0 N
+P 7 0 1 0 0 350 50 450 150 500 200 500 300 450 350 350 350 0 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -350 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 0 0 100 R 50 50 1 1 I
+X BOTTOM3 ~ 350 0 100 R 50 50 1 1 I
+X TOP1 ~ -350 500 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_TINY_TURNED
+#
+DEF M_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 500 350 0 N
+P 6 0 1 0 350 50 250 0 150 0 50 50 0 150 0 500 N
+P 7 0 1 0 0 150 -50 50 -150 0 -200 0 -300 50 -350 150 -350 500 N
+X ABOVE ~ 0 -250 100 R 50 50 1 1 I
+X BELOW ~ 0 750 100 R 50 50 1 1 I
+X BOTTOM1 ~ 350 500 100 R 50 50 1 1 I
+X BOTTOM2 ~ 0 500 100 R 50 50 1 1 I
+X BOTTOM3 ~ -350 500 100 R 50 50 1 1 I
+X TOP1 ~ 350 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MACRON
+#
+DEF MACRON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MACRON" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1000 250 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MIDDLE_HOOK_CAP
+#
+DEF MIDDLE_HOOK_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MIDDLE_HOOK_CAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 0 700 300 700 450 650 550 550 600 400 600 -50 550 -200 450 -300 300 -350 200 -350 N
+X X ~ 0 700 100 L 50 50 1 1 I
+X ~ ~ -100 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MIDDLE_HOOK_SMALL
+#
+DEF MIDDLE_HOOK_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MIDDLE_HOOK_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 350 250 350 350 300 400 250 450 150 450 0 400 -150 300 -300 250 -350 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -100 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MILLIONS_CYR
+#
+DEF MILLIONS_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MILLIONS_CYR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -700 500 -1000 500 N
+P 2 0 1 0 -500 0 -700 -200 N
+P 2 0 1 0 -500 1000 -700 1200 N
+P 2 0 1 0 0 -200 0 -500 N
+P 2 0 1 0 0 1200 0 1500 N
+P 2 0 1 0 500 0 700 -200 N
+P 2 0 1 0 500 1000 700 1200 N
+P 2 0 1 0 700 500 1000 500 N
+X X ~ 0 500 100 L 50 50 1 1 I
+X ~ ~ -1200 0 300 U 50 50 1 1 I
+X ~ ~ 1200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS
+#
+DEF MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+X ABOVE ~ 0 700 100 R 50 50 1 1 I
+X BELOW ~ 0 100 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS_OR
+#
+DEF MINUS_OR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS_OR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 800 N
+P 3 0 1 0 400 550 0 0 -400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS_SMALL
+#
+DEF MINUS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 300 300 300 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MODELS
+#
+DEF MODELS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MODELS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 250 200 250 N
+P 2 0 1 0 -200 550 200 550 N
+P 2 0 1 0 -200 800 -200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MONOSTABLE
+#
+DEF MONOSTABLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MONOSTABLE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -450 0 -200 0 -200 800 200 800 200 0 450 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MOUSTACHE
+#
+DEF MOUSTACHE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MOUSTACHE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 1150 50 950 0 800 0 0 -50 -150 -250 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MU_SMALL
+#
+DEF MU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 3 0 1 0 250 150 300 50 400 0 N
+P 7 0 1 0 -250 150 -200 50 -100 0 100 0 200 50 250 150 250 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MULTIMAP
+#
+DEF MULTIMAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MULTIMAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -400 400 100 400 150 300 250 250 350 300 400 400 350 500 250 550 150 500 100 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MULTIPLY
+#
+DEF MULTIPLY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MULTIPLY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 300 100 N
+P 2 0 1 0 300 700 -300 100 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MULTIPLY_SMALL
+#
+DEF MULTIPLY_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MULTIPLY_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 550 250 50 N
+P 2 0 1 0 250 550 -250 50 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_CAP
+#
+DEF N_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 0 -300 1050 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_SMALL
+#
+DEF N_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 7 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -200 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -200 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_SMALL_CURL
+#
+DEF N_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 16 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 150 300 50 400 0 500 0 600 50 650 150 600 250 500 300 400 250 200 -150 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_SMALLCAP
+#
+DEF N_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 0 -250 700 200 0 200 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_TINY
+#
+DEF N_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 500 -150 0 N
+P 6 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 0 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NBSP_SYM
+#
+DEF NBSP_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NBSP_SYM" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -400 200 -200 200 -200 0 200 0 200 200 400 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NEXT_PAGE
+#
+DEF NEXT_PAGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NEXT_PAGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 200 0 0 N
+P 2 0 1 0 0 800 0 600 N
+P 3 0 1 0 200 200 400 400 200 600 N
+P 5 0 1 0 -600 800 600 800 600 0 -600 0 -600 800 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NJE_CAP
+#
+DEF NJE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NJE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -600 1050 N
+P 11 0 1 0 0 1050 0 0 300 0 450 50 550 150 600 250 600 400 550 500 450 600 300 650 -600 650 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NJE_SMALL
+#
+DEF NJE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NJE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 700 -450 0 N
+P 9 0 1 0 0 700 0 0 250 0 350 50 400 150 400 250 350 350 250 400 -450 400 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NOT
+#
+DEF NOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NOT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 500 400 500 400 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NU_SMALL
+#
+DEF NU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -250 700 0 0 250 550 250 600 200 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_CAP
+#
+DEF O_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_CAP" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 550 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X HORN ~ 200 1000 100 R 50 50 1 1 I
+X P ~ -550 0 300 U 50 50 1 1 I
+X S ~ 550 0 300 U 50 50 1 1 I
+X TONOS ~ -600 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_CAP_OGONEK
+#
+DEF O_CAP_OGONEK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_CAP_OGONEK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 -100 -100 -150 -200 -100 -300 0 -350 100 -350 N
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X HORN ~ 200 1000 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_CAP_STROKE
+#
+DEF O_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 1050 -400 0 N
+P 17 0 1 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL
+#
+DEF O_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X HORN ~ 150 650 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_HALF
+#
+DEF O_SMALL_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_HALF" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 350 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_OGONEK
+#
+DEF O_SMALL_OGONEK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_OGONEK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 -100 -100 -150 -200 -100 -300 0 -350 100 -350 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X HORN ~ 150 650 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_SIDE
+#
+DEF O_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 350 400 350 250 300 150 250 100 150 50 -150 50 -250 100 -300 150 -350 250 -350 400 -300 500 -250 550 -150 600 150 600 250 550 300 500 350 400 N
+X ABOVE ~ 50 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 50 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_STROKE
+#
+DEF O_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 700 -350 0 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_STROKE_SIDE
+#
+DEF O_SMALL_STROKE_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_STROKE_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 650 -350 0 N
+P 17 0 1 0 350 400 350 250 300 150 250 100 150 50 -150 50 -250 100 -300 150 -350 250 -350 400 -300 500 -250 550 -150 600 150 600 250 550 300 500 350 400 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_TINY
+#
+DEF O_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_TINY" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -50 0 -150 50 -200 150 -200 350 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_TINY_HALF
+#
+DEF O_TINY_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_TINY_HALF" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -200 250 -200 150 -150 50 -50 0 50 0 150 50 200 150 200 250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_TINY_HALF_TOP
+#
+DEF O_TINY_HALF_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_TINY_HALF_TOP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -200 250 -200 350 -150 450 -50 500 50 500 150 450 200 350 200 250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OE_CAP
+#
+DEF OE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 550 350 550 N
+P 2 0 1 0 0 1050 0 0 N
+P 10 0 1 0 500 1050 -200 1050 -300 1000 -400 900 -450 700 -450 350 -400 150 -300 50 -200 0 500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OE_SMALL
+#
+DEF OE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 350 N
+P 16 0 1 0 0 500 -50 600 -100 650 -200 700 -350 700 -450 650 -500 600 -550 500 -550 200 -500 100 -450 50 -350 0 -200 0 -100 50 -50 100 0 200 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OE_SMALLCAP
+#
+DEF OE_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OE_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 300 350 N
+P 2 0 1 0 0 700 0 0 N
+P 10 0 1 0 400 700 -250 700 -350 650 -400 600 -450 500 -450 200 -400 100 -350 50 -250 0 400 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OGONEK
+#
+DEF OGONEK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OGONEK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 -100 -100 -150 -200 -100 -300 0 -350 100 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OI_CAP
+#
+DEF OI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 50 1000 -50 1050 -250 1050 -350 1000 -450 900 -500 700 -500 350 -450 150 -350 50 -250 0 -50 0 50 50 150 150 200 350 200 700 150 900 50 1000 150 1050 350 1050 450 1000 500 900 500 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OI_SMALL
+#
+DEF OI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 0 650 -100 700 -250 700 -350 650 -400 600 -450 500 -450 200 -400 100 -350 50 -250 0 -100 0 0 50 50 100 100 200 100 500 50 600 0 650 100 700 200 700 300 650 350 550 350 -350 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_CAP
+#
+DEF OMEGA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -400 0 -150 0 -150 200 -250 250 -350 350 -400 500 -400 750 -350 900 -250 1000 -100 1050 100 1050 250 1000 350 900 400 750 400 500 350 350 250 250 150 200 150 0 400 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X P ~ -600 0 300 U 50 50 1 1 I
+X PERIS ~ -700 1300 100 R 50 50 1 1 I
+X S ~ 600 0 300 U 50 50 1 1 I
+X TONOS ~ -700 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_LARGE
+#
+DEF OMEGA_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 200 0 450 N
+P 23 0 1 0 -300 1050 -400 1000 -500 900 -550 750 -550 300 -500 150 -400 50 -300 0 -200 0 -100 50 -50 100 0 200 50 100 100 50 200 0 300 0 400 50 500 150 550 300 550 750 500 900 400 1000 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_PI_SMALL
+#
+DEF OMEGA_PI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_PI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 150 N
+P 2 0 1 0 450 700 -450 700 N
+P 17 0 1 0 -250 700 -300 650 -350 550 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 50 50 150 0 200 0 300 50 350 150 350 550 300 650 250 700 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_ROUND_CAP
+#
+DEF OMEGA_ROUND_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_ROUND_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 150 0 -150 N
+P 2 0 1 0 0 1200 0 900 N
+P 17 0 1 0 -250 1050 -400 1000 -500 900 -550 750 -550 300 -500 150 -400 50 -250 0 250 0 400 50 500 150 550 300 550 750 500 900 400 1000 250 1050 -250 1050 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_ROUND_SMALL
+#
+DEF OMEGA_ROUND_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_ROUND_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 100 0 -100 N
+P 2 0 1 0 0 800 0 600 N
+P 17 0 1 0 -150 700 -250 650 -300 600 -350 500 -350 200 -300 100 -250 50 -150 0 150 0 250 50 300 100 350 200 350 500 300 600 250 650 150 700 -150 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_SMALL
+#
+DEF OMEGA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 150 N
+P 17 0 1 0 -250 700 -300 650 -350 550 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 50 50 150 0 200 0 300 50 350 150 350 550 300 650 250 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_SMALL_CLOSED
+#
+DEF OMEGA_SMALL_CLOSED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_SMALL_CLOSED" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 0 350 0 150 50 50 150 0 200 0 300 50 350 150 350 500 300 600 250 650 150 700 -150 700 -250 650 -300 600 -350 500 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_SMALLCAP
+#
+DEF OMEGA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -300 0 -150 0 -150 150 -250 250 -300 350 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 350 200 250 100 150 100 0 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OPEN_H
+#
+DEF OPEN_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OPEN_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 800 N
+P 5 0 1 0 -400 400 0 800 400 400 0 0 -400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OPTION_KEY
+#
+DEF OPTION_KEY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OPTION_KEY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 800 600 800 N
+P 4 0 1 0 -600 800 -300 800 300 0 600 0 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR
+#
+DEF OR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -450 800 0 0 450 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR_CURLY
+#
+DEF OR_CURLY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR_CURLY" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -400 800 -250 700 -150 600 -50 400 0 0 50 400 150 600 250 700 400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR_HUGE
+#
+DEF OR_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -650 1050 0 -300 650 1050 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR_MINUS
+#
+DEF OR_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 3 0 1 0 400 800 0 250 -400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ORIGINAL
+#
+DEF ORIGINAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ORIGINAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 500 300 300 N
+P 2 0 1 0 350 500 350 300 N
+P 2 0 1 0 400 550 400 250 N
+P 2 0 1 0 450 500 450 300 N
+P 2 0 1 0 500 500 500 300 N
+P 18 0 1 0 -250 400 -300 500 -400 550 -500 500 -550 400 -500 300 -400 250 -300 300 -250 400 250 400 300 300 400 250 500 300 550 400 500 500 400 550 300 500 250 400 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OU_CAP
+#
+DEF OU_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OU_CAP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -200 1050 -300 1000 -350 900 -350 800 -300 700 -250 650 -150 600 N
+P 7 0 1 0 200 1050 300 1000 350 900 350 800 300 700 250 650 150 600 N
+P 17 0 1 0 -150 600 150 600 250 550 300 500 350 400 350 200 300 100 250 50 150 0 -150 0 -250 50 -300 100 -350 200 -350 400 -300 500 -250 550 -150 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OU_SMALL
+#
+DEF OU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -250 850 -250 700 -200 600 0 500 200 600 250 700 250 850 N
+P 13 0 1 0 -100 500 100 500 200 450 250 350 250 150 200 50 100 0 -100 0 -200 50 -250 150 -250 350 -200 450 -100 500 N
+X ABOVE ~ 0 850 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OU_SMALLCAP
+#
+DEF OU_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OU_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -150 700 -200 650 -250 550 -200 450 -100 400 N
+P 5 0 1 0 100 400 200 450 250 550 200 650 150 700 N
+P 13 0 1 0 -100 400 100 400 200 350 250 250 250 150 200 50 100 0 -100 0 -200 50 -250 150 -250 250 -200 350 -100 400 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OVERLINE
+#
+DEF OVERLINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OVERLINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 1000 400 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OVERLINE_LONG
+#
+DEF OVERLINE_LONG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OVERLINE_LONG" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 1000 550 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_CAP
+#
+DEF P_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_CAP" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 0 -300 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X TICK ~ 200 550 100 R 50 50 1 1 I
+X TONOS ~ -650 950 100 R 50 50 1 1 I
+X TOPRING ~ 0 750 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_CAP_HOOK
+#
+DEF P_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 13 0 1 0 -600 800 -600 900 -550 1000 -450 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_SMALL
+#
+DEF P_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -200 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TICK ~ 150 50 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_SMALLCAP
+#
+DEF P_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -200 0 -200 700 100 700 200 650 250 550 250 450 200 350 100 300 -200 300 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X TOPRING ~ 0 500 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_TINY
+#
+DEF P_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 -250 -150 500 N
+P 10 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X TICK ~ 150 50 100 R 50 50 1 1 I
+X TOP ~ 0 500 100 R 50 50 1 1 I
+X TOP1 ~ -150 500 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PALATALIZATION_CYR
+#
+DEF PALATALIZATION_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PALATALIZATION_CYR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 950 150 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PARALLELOGRAM
+#
+DEF PARALLELOGRAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PARALLELOGRAM" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -500 150 -250 650 500 650 250 150 -500 150 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PARALLELOGRAM_BLACK
+#
+DEF PARALLELOGRAM_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PARALLELOGRAM_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 650 -300 550 N
+P 2 0 1 0 -150 650 -350 450 N
+P 2 0 1 0 -100 650 -400 350 N
+P 2 0 1 0 -50 650 -450 250 N
+P 2 0 1 0 0 650 -500 150 N
+P 2 0 1 0 50 650 -450 150 N
+P 2 0 1 0 100 650 -400 150 N
+P 2 0 1 0 150 650 -350 150 N
+P 2 0 1 0 200 650 -300 150 N
+P 2 0 1 0 250 650 -250 150 N
+P 2 0 1 0 300 250 200 150 N
+P 2 0 1 0 300 650 -200 150 N
+P 2 0 1 0 350 350 150 150 N
+P 2 0 1 0 350 650 -150 150 N
+P 2 0 1 0 400 450 100 150 N
+P 2 0 1 0 400 650 -100 150 N
+P 2 0 1 0 450 550 50 150 N
+P 2 0 1 0 450 650 -50 150 N
+P 2 0 1 0 500 650 0 150 N
+P 5 0 1 0 -500 150 -250 650 500 650 250 150 -500 150 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN
+#
+DEF PAREN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 -400 150 -350 50 -200 0 -100 -50 50 -100 300 -100 500 -50 750 0 900 50 1000 150 1150 200 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_OVER
+#
+DEF PAREN_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_OVER" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -800 -100 -750 -50 -600 50 -500 100 -350 150 -100 200 100 200 350 150 500 100 600 50 750 -50 800 -100 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_SMALL
+#
+DEF PAREN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 100 850 50 800 0 650 -50 400 -50 200 0 -50 50 -200 100 -250 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_TOP
+#
+DEF PAREN_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_TOP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 300 1150 200 1000 150 900 100 750 50 500 0 0 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAUSE
+#
+DEF PAUSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAUSE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 400 -150 400 0 0 150 400 400 400 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PENNY_GERMAN
+#
+DEF PENNY_GERMAN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PENNY_GERMAN" 0 -350 60 H V C CNN
+DRAW
+P 23 0 1 0 -450 350 -400 400 -300 450 -200 400 -150 350 -50 300 50 350 300 600 350 750 350 900 300 1000 200 1050 150 1050 50 1000 0 900 0 750 50 600 300 350 350 250 350 200 300 100 250 50 100 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PENTASEME_METRICAL
+#
+DEF PENTASEME_METRICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PENTASEME_METRICAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 550 0 300 N
+P 4 0 1 0 -400 550 -400 300 400 300 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERCENT
+#
+DEF PERCENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERCENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERMILLE
+#
+DEF PERMILLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERMILLE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 9 0 1 0 850 300 950 250 1000 150 950 50 850 0 750 50 700 150 750 250 850 300 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 1200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERMYRIAD
+#
+DEF PERMYRIAD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERMYRIAD" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 9 0 1 0 850 300 950 250 1000 150 950 50 850 0 750 50 700 150 750 250 850 300 N
+P 9 0 1 0 1450 300 1550 250 1600 150 1550 50 1450 0 1350 50 1300 150 1350 250 1450 300 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 1800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_CAP
+#
+DEF PHI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 17 0 1 0 -100 900 100 900 250 850 350 750 400 650 400 450 350 350 250 250 100 200 -100 200 -250 250 -350 350 -400 450 -400 650 -350 750 -250 850 -100 900 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_SMALL
+#
+DEF PHI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -250 700 -300 650 -350 550 -350 250 -300 150 -200 50 -100 0 100 0 200 50 300 150 350 250 350 550 300 650 200 700 150 700 50 650 0 550 0 -350 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_SMALL_VAR
+#
+DEF PHI_SMALL_VAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_SMALL_VAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 -350 N
+P 17 0 1 0 -100 700 100 700 200 650 300 550 350 450 350 250 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 250 -350 450 -300 550 -200 650 -100 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_TINY
+#
+DEF PHI_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_TINY" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 500 -300 400 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 350 250 450 150 500 50 450 0 350 0 -250 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_CAP
+#
+DEF PI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 0 -300 1050 300 1050 300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDHOOK ~ 300 700 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_CAP_HUGE
+#
+DEF PI_CAP_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_CAP_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 -250 400 1050 -400 1050 -400 -250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_SMALL
+#
+DEF PI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 4 0 1 0 -150 700 -150 150 -200 50 -300 0 N
+P 4 0 1 0 400 700 -250 700 -350 650 -400 550 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_SMALLCAP
+#
+DEF PI_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 0 -250 700 200 700 200 0 N
+X MIDHOOK ~ 200 350 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PILLOW
+#
+DEF PILLOW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PILLOW" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 450 850 400 750 350 550 350 250 400 50 450 -50 350 0 150 50 -150 50 -350 0 -450 -50 -400 50 -350 250 -350 550 -400 750 -450 850 -350 800 -150 750 150 750 350 800 450 850 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PITCHFORK
+#
+DEF PITCHFORK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PITCHFORK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 800 0 0 N
+P 10 0 1 0 -300 0 -300 400 -250 550 -200 600 -50 650 50 650 200 600 250 550 300 400 300 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS
+#
+DEF PLUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 0 0 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS_MINUS
+#
+DEF PLUS_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 600 400 600 N
+P 2 0 1 0 0 200 0 1000 N
+P 2 0 1 0 400 0 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS_SMALL
+#
+DEF PLUS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 300 300 300 N
+P 2 0 1 0 0 600 0 0 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# POKRYTIE
+#
+DEF POKRYTIE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "POKRYTIE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 900 -250 1000 -150 1050 0 1050 150 1000 300 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# POUND
+#
+DEF POUND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "POUND" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 100 700 N
+P 3 0 1 0 -300 0 250 0 250 0 N
+P 6 0 1 0 -150 0 -150 900 -100 1000 0 1050 150 1050 250 1000 N
+X MIDDLE ~ -100 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDES
+#
+DEF PRECEDES U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDES" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 400 800 300 650 200 550 0 450 -400 400 0 350 200 250 300 150 400 0 N
+X INSIDE ~ 350 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDES_WAVE
+#
+DEF PRECEDES_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDES_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 0 -350 50 -200 100 -50 50 50 -50 200 -100 350 -50 400 0 N
+P 9 0 1 0 400 950 300 800 200 700 0 600 -400 550 0 500 200 400 300 300 400 150 N
+X CENTER_W ~ 0 0 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDESEQ
+#
+DEF PRECEDESEQ U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDESEQ" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 250 0 200 200 100 300 0 400 -150 N
+P 9 0 1 0 400 950 300 800 200 700 0 600 -400 550 0 500 200 400 300 300 400 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDESREL
+#
+DEF PRECEDESREL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDESREL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 800 300 750 350 650 300 550 200 500 0 450 -400 400 0 350 200 300 300 250 350 150 300 50 200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME
+#
+DEF PRIME U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1050 -50 750 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME_DBL
+#
+DEF PRIME_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 1050 -200 750 N
+P 2 0 1 0 250 1050 100 750 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME_TPL
+#
+DEF PRIME_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME_TPL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 -350 750 N
+P 2 0 1 0 100 1050 -50 750 N
+P 2 0 1 0 400 1050 250 750 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRODUCT_NORMAL_FACTOR_SEMIDIRECT
+#
+DEF PRODUCT_NORMAL_FACTOR_SEMIDIRECT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRODUCT_NORMAL_FACTOR_SEMIDIRECT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 800 -400 0 -400 800 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRODUCT_SEMIDIRECT
+#
+DEF PRODUCT_SEMIDIRECT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRODUCT_SEMIDIRECT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 0 400 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PROPORTION
+#
+DEF PROPORTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PROPORTION" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 150 -250 100 -300 50 -350 100 -300 150 -300 50 N
+P 6 0 1 0 -300 750 -250 700 -300 650 -350 700 -300 750 -300 650 N
+P 6 0 1 0 300 150 350 100 300 50 250 100 300 150 300 50 N
+P 6 0 1 0 300 750 350 700 300 650 250 700 300 750 300 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PROPORTIONAL
+#
+DEF PROPORTIONAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PROPORTIONAL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 300 550 250 550 150 500 -50 300 -150 250 -250 300 -300 400 -250 500 -150 550 -50 500 150 300 250 250 300 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSI_CAP
+#
+DEF PSI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 14 0 1 0 -500 1050 -400 1000 -350 900 -350 650 -300 500 -250 450 -150 400 150 400 250 450 300 500 350 650 350 900 400 1000 500 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSI_SMALL
+#
+DEF PSI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 -350 N
+P 10 0 1 0 -350 700 -350 250 -300 150 -200 50 -100 0 100 0 200 50 300 150 350 250 350 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSI_SMALLCAP
+#
+DEF PSI_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSI_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 0 N
+P 10 0 1 0 -300 700 -250 650 -250 450 -200 350 -100 300 100 300 200 350 250 450 250 650 300 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSILI
+#
+DEF PSILI U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSILI" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 950 0 950 50 1000 50 1100 N
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X P ~ -200 0 300 U 50 50 1 1 I
+X S ~ 200 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSILI_OXIA
+#
+DEF PSILI_OXIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSILI_OXIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1100 150 950 N
+P 4 0 1 0 -250 950 -200 950 -150 1000 -150 1100 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSILI_VARIA
+#
+DEF PSILI_VARIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSILI_VARIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1100 250 950 N
+P 4 0 1 0 -250 950 -200 950 -150 1000 -150 1100 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PX_CAP
+#
+DEF PX_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PX_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 500 1050 150 600 500 0 N
+P 11 0 1 0 -400 0 -400 1050 0 1050 100 1000 150 950 200 850 200 700 150 600 100 550 0 500 -400 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PX_SMALL
+#
+DEF PX_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PX_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 -350 -350 N
+P 3 0 1 0 450 700 150 350 450 0 N
+P 12 0 1 0 -350 650 -250 700 -50 700 50 650 100 600 150 500 150 200 100 100 50 50 -50 0 -250 0 -350 50 N
+X TOP ~ -100 700 100 R 50 50 1 1 I
+X TOP1 ~ -350 700 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_CAP
+#
+DEF Q_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_CAP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 400 -100 300 -50 200 50 50 200 -50 250 -150 250 N
+P 17 0 1 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_LARGE_TAIL
+#
+DEF Q_LARGE_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_LARGE_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 300 1050 300 -150 350 -250 400 -300 500 -350 600 -350 N
+P 14 0 1 0 300 900 200 1000 100 1050 -100 1050 -200 1000 -300 900 -350 700 -350 350 -300 150 -200 50 -100 0 100 0 200 50 300 150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_SMALL
+#
+DEF Q_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 -350 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_SMALL_TAIL
+#
+DEF Q_SMALL_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_SMALL_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 700 250 -150 300 -250 350 -300 450 -350 550 -350 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QP_SMALL
+#
+DEF QP_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QP_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 -350 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+P 12 0 1 0 0 650 100 700 300 700 400 650 450 600 500 500 500 200 450 100 400 50 300 0 100 0 0 50 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUESTION
+#
+DEF QUESTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUESTION" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 100 0 50 -50 0 -100 50 -50 100 -50 0 N
+P 12 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 900 250 800 200 700 150 650 50 600 0 550 -50 450 -50 400 N
+X P ~ -450 0 300 U 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUESTION_ABOVE
+#
+DEF QUESTION_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUESTION_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 950 50 900 0 850 -50 900 0 950 0 850 N
+P 7 0 1 0 -200 1350 -100 1400 50 1400 150 1350 200 1250 150 1150 50 1100 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE
+#
+DEF QUOTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 -200 850 N
+P 2 0 1 0 200 1050 200 850 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE_RIGHT
+#
+DEF QUOTE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 50 1050 50 1000 0 900 -50 850 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE_RIGHT_DBL
+#
+DEF QUOTE_RIGHT_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE_RIGHT_DBL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -150 1050 -150 1000 -200 900 -250 850 N
+P 4 0 1 0 250 1050 250 1000 200 900 150 850 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_CAP
+#
+DEF R_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -50 500 N
+P 11 0 1 0 -300 0 -300 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X STROKE ~ -300 500 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_SMALL
+#
+DEF R_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 0 -100 700 N
+P 5 0 1 0 -100 500 -50 600 0 650 100 700 200 700 N
+X ABOVE ~ 50 950 100 R 50 50 1 1 I
+X BELOW ~ -100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -100 0 100 R 50 50 1 1 I
+X MIDDLE ~ -50 350 100 R 50 50 1 1 I
+X TOP1 ~ -100 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_SMALL_FISHHOOK
+#
+DEF R_SMALL_FISHHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_SMALL_FISHHOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 50 0 N
+P 6 0 1 0 200 700 100 700 0 650 -50 600 -100 450 -100 0 N
+X ABOVE ~ 50 950 100 R 50 50 1 1 I
+X BELOW ~ -100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -100 0 100 R 50 50 1 1 I
+X MIDDLE ~ -50 350 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_SMALLCAP
+#
+DEF R_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 300 250 0 N
+P 9 0 1 0 -200 0 -200 700 100 700 200 650 250 550 250 450 200 350 100 300 -200 300 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_TINY
+#
+DEF R_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 500 -100 0 N
+P 4 0 1 0 -100 350 -50 450 50 500 150 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ -100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -100 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 250 100 R 50 50 1 1 I
+X TOP1 ~ -100 500 100 R 50 50 1 1 I
+X TOP2 ~ 150 500 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RADICAL
+#
+DEF RADICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RADICAL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 350 -50 400 50 0 800 1250 N
+X MIDDLE ~ 500 750 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RATIO
+#
+DEF RATIO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RATIO" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 150 50 100 0 50 -50 100 0 150 0 50 N
+P 6 0 1 0 0 750 50 700 0 650 -50 700 0 750 0 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE
+#
+DEF RECTANGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 650 400 650 400 150 -400 150 -400 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_BLACK
+#
+DEF RECTANGLE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 150 100 650 N
+P 2 0 1 0 -400 200 50 650 N
+P 2 0 1 0 -400 250 0 650 N
+P 2 0 1 0 -400 300 -50 650 N
+P 2 0 1 0 -400 350 -100 650 N
+P 2 0 1 0 -400 400 -150 650 N
+P 2 0 1 0 -400 450 -200 650 N
+P 2 0 1 0 -400 500 -250 650 N
+P 2 0 1 0 -400 550 -300 650 N
+P 2 0 1 0 -400 600 -350 650 N
+P 2 0 1 0 -350 150 150 650 N
+P 2 0 1 0 -300 150 200 650 N
+P 2 0 1 0 -250 150 250 650 N
+P 2 0 1 0 -200 150 300 650 N
+P 2 0 1 0 -150 150 350 650 N
+P 2 0 1 0 -100 150 400 650 N
+P 2 0 1 0 -50 150 400 600 N
+P 2 0 1 0 0 150 400 550 N
+P 2 0 1 0 50 150 400 500 N
+P 2 0 1 0 100 150 400 450 N
+P 2 0 1 0 150 150 400 400 N
+P 2 0 1 0 200 150 400 350 N
+P 2 0 1 0 250 150 400 300 N
+P 2 0 1 0 300 150 400 250 N
+P 2 0 1 0 350 150 400 200 N
+P 5 0 1 0 -400 650 400 650 400 150 -400 150 -400 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V
+#
+DEF RECTANGLE_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -250 0 -250 800 250 800 250 0 -250 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_BLACK
+#
+DEF RECTANGLE_V_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 250 500 N
+P 2 0 1 0 -250 50 250 550 N
+P 2 0 1 0 -250 100 250 600 N
+P 2 0 1 0 -250 150 250 650 N
+P 2 0 1 0 -250 200 250 700 N
+P 2 0 1 0 -250 250 250 750 N
+P 2 0 1 0 -250 300 250 800 N
+P 2 0 1 0 -250 350 200 800 N
+P 2 0 1 0 -250 400 150 800 N
+P 2 0 1 0 -250 450 100 800 N
+P 2 0 1 0 -250 500 50 800 N
+P 2 0 1 0 -250 550 0 800 N
+P 2 0 1 0 -250 600 -50 800 N
+P 2 0 1 0 -250 650 -100 800 N
+P 2 0 1 0 -250 700 -150 800 N
+P 2 0 1 0 -250 750 -200 800 N
+P 2 0 1 0 -200 0 250 450 N
+P 2 0 1 0 -150 0 250 400 N
+P 2 0 1 0 -100 0 250 350 N
+P 2 0 1 0 -50 0 250 300 N
+P 2 0 1 0 0 0 250 250 N
+P 2 0 1 0 50 0 250 200 N
+P 2 0 1 0 100 0 250 150 N
+P 2 0 1 0 150 0 250 100 N
+P 2 0 1 0 200 0 250 50 N
+P 5 0 1 0 -250 0 -250 800 250 800 250 0 -250 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_HUGE
+#
+DEF RECTANGLE_V_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 1050 450 1050 450 -300 -450 -300 -450 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_HUGE_SLASH
+#
+DEF RECTANGLE_V_HUGE_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_HUGE_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -450 -300 -450 1050 450 1050 450 -300 -450 -300 450 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# REGISTERED
+#
+DEF REGISTERED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "REGISTERED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 150 0 450 N
+P 9 0 1 0 -200 150 -200 850 100 850 200 800 250 700 250 600 200 500 100 450 -200 450 N
+P 17 0 1 0 0 1200 -250 1150 -500 1000 -650 750 -700 500 -650 250 -500 0 -250 -150 0 -200 250 -150 500 0 650 250 700 500 650 750 500 1000 250 1150 0 1200 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_SMALL
+#
+DEF RHO_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 -350 -250 500 -200 600 -150 650 -50 700 100 700 200 650 250 600 300 500 300 200 250 100 200 50 100 0 -50 0 -150 50 -250 150 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_SMALL_STROKE
+#
+DEF RHO_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -250 50 -250 N
+P 16 0 1 0 -250 -350 -250 500 -200 600 -150 650 -50 700 100 700 200 650 250 600 300 500 300 200 250 100 200 50 100 0 -50 0 -150 50 -250 150 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_SMALL_TAIL
+#
+DEF RHO_SMALL_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_SMALL_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 250 -350 -50 -350 -150 -300 -200 -250 -250 -150 -250 500 -200 600 -150 650 -50 700 100 700 200 650 250 600 300 500 300 200 250 100 200 50 100 0 -50 0 -150 50 -250 150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_TINY
+#
+DEF RHO_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_TINY" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -150 -250 -150 350 -100 450 0 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 150 -250 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RING
+#
+DEF RING U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RING" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 950 -100 1000 -150 1100 -100 1200 0 1250 100 1200 150 1100 100 1000 0 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RING_ACUTE
+#
+DEF RING_ACUTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RING_ACUTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 1350 300 1200 N
+P 9 0 1 0 0 1250 -100 1200 -150 1100 -100 1000 0 950 100 1000 150 1100 100 1200 0 1250 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RING_HALF
+#
+DEF RING_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RING_HALF" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 950 -100 1000 -150 1100 -100 1200 0 1250 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_CAP
+#
+DEF S_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_CAP" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -300 50 -150 0 100 0 200 50 250 100 300 200 300 300 250 400 200 450 100 500 -100 550 -200 600 -250 650 -300 750 -300 850 -250 950 -200 1000 -100 1050 150 1050 300 1000 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X MIDDLE ~ 0 550 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_LAZY
+#
+DEF S_LAZY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_LAZY" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -250 550 -350 500 -400 400 -350 300 -250 250 -100 300 100 500 250 550 350 500 400 400 350 300 250 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_LONG_SMALL
+#
+DEF S_LONG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_LONG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 900 50 1000 150 1050 250 1050 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X MIDTOP ~ 0 750 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_SMALL
+#
+DEF S_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -200 50 -100 0 100 0 200 50 250 150 250 200 200 300 100 350 -50 350 -150 400 -200 500 -200 550 -150 650 -50 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -200 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 50 350 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_SMALL_SWASHTAIL
+#
+DEF S_SMALL_SWASHTAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_SMALL_SWASHTAIL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -100 0 0 -150 100 -200 250 -200 N
+P 16 0 1 0 -200 50 -100 0 100 0 200 50 250 150 250 200 200 300 100 350 -50 350 -150 400 -200 500 -200 550 -150 650 -50 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_ARCHAIC_CAP
+#
+DEF SAMPI_ARCHAIC_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_ARCHAIC_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 4 0 1 0 -350 600 -350 1050 350 1050 350 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_ARCHAIC_SMALL
+#
+DEF SAMPI_ARCHAIC_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_ARCHAIC_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 4 0 1 0 -250 600 -250 1050 250 1050 250 600 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_CAP
+#
+DEF SAMPI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1000 -200 750 N
+P 4 0 1 0 300 900 150 750 100 650 100 200 N
+P 11 0 1 0 -350 900 -250 1000 -100 1050 100 1050 200 1000 300 900 350 800 400 600 400 300 350 100 300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_SMALL
+#
+DEF SAMPI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 150 450 N
+P 2 0 1 0 0 0 250 250 N
+P 7 0 1 0 -300 700 -100 650 50 550 150 450 250 250 300 50 300 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAN_CAP
+#
+DEF SAN_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAN_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 0 700 350 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAN_SMALL
+#
+DEF SAN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -300 -350 -300 700 0 400 300 700 300 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SCREEN_CLEAR
+#
+DEF SCREEN_CLEAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SCREEN_CLEAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 600 -400 200 N
+P 2 0 1 0 400 600 0 200 N
+P 13 0 1 0 -550 150 -550 650 -500 750 -400 800 400 800 500 750 550 650 550 150 500 50 400 0 -400 0 -500 50 -550 150 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SCREEN_PRINT
+#
+DEF SCREEN_PRINT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SCREEN_PRINT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -300 950 -50 950 -50 1200 N
+P 6 0 1 0 -300 400 -300 950 -50 1200 300 1200 300 400 -300 400 N
+P 14 0 1 0 -300 800 -400 800 -500 750 -550 650 -550 150 -500 50 -400 0 400 0 500 50 550 150 550 650 500 750 400 800 300 800 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SECTION
+#
+DEF SECTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SECTION" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -200 -100 -100 -150 50 -150 150 -100 200 0 150 100 -150 400 -200 500 -200 550 -150 650 -50 700 N
+P 11 0 1 0 200 1000 100 1050 -50 1050 -150 1000 -200 900 -150 800 150 500 200 400 200 350 150 250 50 200 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SECTOR
+#
+DEF SECTOR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SECTOR" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 700 -300 750 -100 800 100 800 300 750 400 700 0 0 -400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SEMICOLON
+#
+DEF SEMICOLON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SEMICOLON" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 50 50 50 0 0 -100 -50 -150 N
+P 6 0 1 0 0 650 50 600 0 550 -50 600 0 650 0 550 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SEMISOFT_SMALL
+#
+DEF SEMISOFT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SEMISOFT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 -50 700 N
+P 9 0 1 0 -200 1050 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHA_CAP
+#
+DEF SHA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 0 N
+P 4 0 1 0 -500 1050 -500 0 500 0 500 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM3 ~ 500 0 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHA_SMALL
+#
+DEF SHA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 0 N
+P 4 0 1 0 -350 700 -350 0 350 0 350 700 N
+X BOTTOM3 ~ 350 0 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHEI_CAP
+#
+DEF SHEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 200 0 450 N
+P 5 0 1 0 500 150 350 -100 200 -250 50 -300 -250 -300 N
+P 23 0 1 0 -300 1050 -400 1000 -500 900 -550 750 -550 300 -500 150 -400 50 -300 0 -200 0 -100 50 -50 100 0 200 50 100 100 50 200 0 300 0 400 50 500 150 550 300 550 750 500 900 400 1000 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHEI_SMALL
+#
+DEF SHEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 150 N
+P 5 0 1 0 300 50 250 -50 50 -250 -100 -300 -150 -300 N
+P 17 0 1 0 -250 700 -300 650 -350 550 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 50 50 150 0 200 0 300 50 350 150 350 550 300 650 250 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHEQUEL_NEW
+#
+DEF SHEQUEL_NEW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHEQUEL_NEW" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -450 0 -450 1050 -150 1050 0 1000 100 900 150 750 150 450 N
+P 7 0 1 0 -150 650 -150 300 -100 150 0 50 150 0 450 0 450 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_CAP
+#
+DEF SIGMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 250 0 -300 0 50 550 -300 1050 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_CAP_HUGE
+#
+DEF SIGMA_CAP_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_CAP_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 400 -250 -450 -250 100 400 -450 1050 450 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_CAP_TOP
+#
+DEF SIGMA_CAP_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_CAP_TOP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 -350 -450 1050 500 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_SMALL
+#
+DEF SIGMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 350 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 500 200 600 150 650 50 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_SMALL_FINAL
+#
+DEF SIGMA_SMALL_FINAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_SMALL_FINAL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 -50 200 -150 200 -200 150 -300 50 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SINE
+#
+DEF SINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SINE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -400 400 -350 650 -300 750 -200 800 -100 750 -50 650 50 150 100 50 200 0 300 50 350 150 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH
+#
+DEF SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 450 1100 -450 -250 -450 -250 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_CAP
+#
+DEF SLASH_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1200 -300 -250 N
+X X ~ 0 500 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_LINE_H
+#
+DEF SLASH_LINE_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_LINE_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 150 -50 -150 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_OP
+#
+DEF SLASH_OP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_OP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1000 -300 -200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_REL
+#
+DEF SLASH_REL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_REL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 800 -200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL
+#
+DEF SLASH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 950 -250 -250 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL_H
+#
+DEF SLASH_SMALL_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 250 150 450 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL_H_DBL
+#
+DEF SLASH_SMALL_H_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL_H_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 100 150 300 N
+P 2 0 1 0 -150 400 150 600 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL_V
+#
+DEF SLASH_SMALL_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL_V" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 500 -100 200 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SYM
+#
+DEF SLASH_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 800 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLOPE
+#
+DEF SLOPE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLOPE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 0 -400 450 400 0 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMILE
+#
+DEF SMILE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMILE" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 400 500 350 450 250 400 0 350 -250 400 -350 450 -400 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SOFT_CAP
+#
+DEF SOFT_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SOFT_CAP" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -250 1050 -250 0 50 0 200 50 300 150 350 250 350 400 300 500 200 600 50 650 -250 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X MIDTOP ~ -250 900 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SOFT_SMALL
+#
+DEF SOFT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SOFT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -200 700 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE
+#
+DEF SPACE U 0 40 Y Y 1 F N
+F0 "U" 0 50 60 H V C CNN
+F1 "SPACE" 0 -50 60 H V C CNN
+DRAW
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_EM
+#
+DEF SPACE_EM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_EM" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_EN
+#
+DEF SPACE_EN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_EN" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_FIGURE
+#
+DEF SPACE_FIGURE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_FIGURE" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_HAIR
+#
+DEF SPACE_HAIR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_HAIR" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -50 0 300 U 50 50 1 1 I
+X ~ ~ 50 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_MID
+#
+DEF SPACE_MID U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_MID" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -150 0 300 U 50 50 1 1 I
+X ~ ~ 150 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_PUNC
+#
+DEF SPACE_PUNC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_PUNC" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_SYM
+#
+DEF SPACE_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_SYM" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 200 -400 0 400 0 400 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_THICK
+#
+DEF SPACE_THICK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_THICK" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_THIN
+#
+DEF SPACE_THIN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_THIN" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -100 0 300 U 50 50 1 1 I
+X ~ ~ 100 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQCUP
+#
+DEF SQCUP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQCUP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 800 -400 0 400 0 400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQIMAGE
+#
+DEF SQIMAGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQIMAGE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 100 -400 100 -400 700 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQIMAGE_MINUS
+#
+DEF SQIMAGE_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQIMAGE_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 -50 -400 -50 N
+P 4 0 1 0 400 250 -400 250 -400 850 400 850 N
+X CENTER_M ~ 0 -50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE
+#
+DEF SQUARE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_BLACK
+#
+DEF SQUARE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 800 -350 0 N
+P 2 0 1 0 -300 0 -300 800 N
+P 2 0 1 0 -250 800 -250 0 N
+P 2 0 1 0 -200 0 -200 800 N
+P 2 0 1 0 -150 800 -150 0 N
+P 2 0 1 0 -100 0 -100 800 N
+P 2 0 1 0 -50 800 -50 0 N
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 50 800 50 0 N
+P 2 0 1 0 100 0 100 800 N
+P 2 0 1 0 150 800 150 0 N
+P 2 0 1 0 200 0 200 800 N
+P 2 0 1 0 250 800 250 0 N
+P 2 0 1 0 300 0 300 800 N
+P 2 0 1 0 350 800 350 0 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLB
+#
+DEF SQUARE_FILLB U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLB" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 -200 0 -400 200 N
+P 2 0 1 0 100 0 -400 500 N
+P 2 0 1 0 400 300 -100 800 N
+P 2 0 1 0 400 600 200 800 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLD
+#
+DEF SQUARE_FILLD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLD" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 800 N
+P 2 0 1 0 -400 300 100 800 N
+P 2 0 1 0 -400 600 -200 800 N
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 -200 0 -400 200 N
+P 2 0 1 0 -100 0 400 500 N
+P 2 0 1 0 100 0 -400 500 N
+P 2 0 1 0 200 0 400 200 N
+P 2 0 1 0 400 300 -100 800 N
+P 2 0 1 0 400 600 200 800 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLH
+#
+DEF SQUARE_FILLH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 600 400 600 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLO
+#
+DEF SQUARE_FILLO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLO" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 600 400 600 N
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 200 800 200 0 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLS
+#
+DEF SQUARE_FILLS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 800 N
+P 2 0 1 0 -400 300 100 800 N
+P 2 0 1 0 -400 600 -200 800 N
+P 2 0 1 0 -100 0 400 500 N
+P 2 0 1 0 200 0 400 200 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLV
+#
+DEF SQUARE_FILLV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLV" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 200 800 200 0 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FOOT
+#
+DEF SQUARE_FOOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FOOT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1050 -50 750 N
+P 6 0 1 0 -250 800 -400 800 -400 0 400 0 400 800 250 800 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_LEFTHALF_BLACK
+#
+DEF SQUARE_LEFTHALF_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_LEFTHALF_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 0 -350 800 N
+P 2 0 1 0 -300 800 -300 0 N
+P 2 0 1 0 -250 0 -250 800 N
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 -150 0 -150 800 N
+P 2 0 1 0 -100 800 -100 0 N
+P 2 0 1 0 -50 0 -50 800 N
+P 5 0 1 0 -400 0 -400 800 0 800 0 0 -400 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_ROUNDED
+#
+DEF SQUARE_ROUNDED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_ROUNDED" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -350 750 -250 800 250 800 350 750 400 650 400 150 350 50 250 0 -250 0 -350 50 -400 150 -400 650 -350 750 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_SMALL
+#
+DEF SQUARE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -150 250 -150 550 150 550 150 250 -150 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_SMALL_BLACK
+#
+DEF SQUARE_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 -100 250 N
+P 2 0 1 0 -50 250 -50 550 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 250 50 550 N
+P 2 0 1 0 100 550 100 250 N
+P 5 0 1 0 -150 250 -150 550 150 550 150 250 -150 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUISH_QUAD
+#
+DEF SQUISH_QUAD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUISH_QUAD" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -250 1050 250 1050 250 -300 -250 -300 -250 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STAR
+#
+DEF STAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STAR" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 800 250 50 -400 500 400 500 -250 50 0 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STAR_SMALL
+#
+DEF STAR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STAR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 450 100 150 -150 350 150 350 -100 150 0 450 N
+X BELOW ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STIGMA_CAP
+#
+DEF STIGMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STIGMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 250 1050 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 450 -350 250 -300 150 -200 50 -50 0 0 0 100 -50 150 -150 150 -200 100 -300 50 -350 -50 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STIGMA_SMALL
+#
+DEF STIGMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STIGMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 200 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 0 0 100 -50 150 -150 150 -200 100 -300 0 -350 -100 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STRICTEQV
+#
+DEF STRICTEQV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STRICTEQV" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -50 400 -50 N
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 -400 850 400 850 N
+P 2 0 1 0 400 250 -400 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_H
+#
+DEF STROKE_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 350 200 350 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_SMALL_H
+#
+DEF STROKE_SMALL_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_SMALL_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 350 150 350 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_SMALL_H_DBL
+#
+DEF STROKE_SMALL_H_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_SMALL_H_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 200 150 200 N
+P 2 0 1 0 -150 500 150 500 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_V
+#
+DEF STROKE_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_V" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 550 0 150 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUBSET
+#
+DEF SUBSET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUBSET" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 400 700 -200 700 -300 650 -350 600 -400 500 -400 300 -350 200 -300 150 -200 100 400 100 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUBSET_DBL
+#
+DEF SUBSET_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUBSET_DBL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 400 550 50 550 -50 500 -100 400 -50 300 50 250 400 250 N
+P 10 0 1 0 400 -50 -50 -50 -200 0 -350 150 -400 300 -400 500 -350 650 -200 800 -50 850 400 850 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUBSET_MINUS
+#
+DEF SUBSET_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUBSET_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -50 400 -50 N
+P 10 0 1 0 400 850 -200 850 -300 800 -350 750 -400 650 -400 450 -350 350 -300 300 -200 250 400 250 N
+X CENTER_M ~ 0 -50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUCCEEDS_WAVE
+#
+DEF SUCCEEDS_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUCCEEDS_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 0 -350 50 -200 100 -50 50 50 -50 200 -100 350 -50 400 0 N
+P 9 0 1 0 -400 150 -300 300 -200 400 0 500 400 550 0 600 -200 700 -300 800 -400 950 N
+X CENTER_W ~ 0 0 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SYMMETRY
+#
+DEF SYMMETRY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SYMMETRY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -200 100 200 100 N
+P 2 0 1 0 200 700 -200 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_CAP
+#
+DEF T_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 2 0 1 0 0 0 0 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X MIDHOOK ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_CAP_ABOVE
+#
+DEF T_CAP_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_CAP_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1100 250 1100 N
+P 2 0 1 0 0 1100 0 950 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_CAP_HOOK
+#
+DEF T_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 5 0 1 0 -350 800 -350 900 -300 1000 -200 1050 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL
+#
+DEF T_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 5 0 1 0 0 1050 0 150 50 50 150 0 250 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_CARON
+#
+DEF T_SMALL_CARON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_CARON" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 2 0 1 0 350 1050 300 900 N
+P 5 0 1 0 0 1050 0 150 50 50 150 0 250 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_CURL
+#
+DEF T_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 11 0 1 0 0 1050 0 150 50 50 150 0 250 0 350 50 400 150 350 250 250 300 150 250 -50 -150 N
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_HOOK
+#
+DEF T_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 8 0 1 0 250 1050 150 1050 50 1000 0 900 0 150 50 50 150 0 250 0 N
+X BELOW ~ 100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_RETROHOOK
+#
+DEF T_SMALL_RETROHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_RETROHOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 5 0 1 0 0 1050 0 -200 50 -300 150 -350 250 -350 N
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALLCAP
+#
+DEF T_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 2 0 1 0 0 700 0 0 N
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_TINY
+#
+DEF T_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 500 200 500 N
+P 5 0 1 0 0 700 0 150 50 50 150 0 200 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 200 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TAB
+#
+DEF TAB U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TAB" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 800 -400 400 N
+P 2 0 1 0 400 400 400 0 N
+P 2 0 1 0 400 600 -400 600 N
+P 3 0 1 0 -200 400 -400 600 -200 800 N
+P 3 0 1 0 200 0 400 200 200 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TACK
+#
+DEF TACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 -400 800 N
+P 2 0 1 0 -400 400 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TACK_UP
+#
+DEF TACK_UP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TACK_UP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 2 0 1 0 0 0 0 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TACK_UP_LARGE
+#
+DEF TACK_UP_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TACK_UP_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -300 400 -300 N
+P 2 0 1 0 0 -300 0 1100 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TAIL
+#
+DEF TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TAIL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 0 150 0 -150 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TARGET
+#
+DEF TARGET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TARGET" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 -200 400 N
+P 2 0 1 0 0 0 0 200 N
+P 2 0 1 0 0 800 0 600 N
+P 2 0 1 0 400 400 200 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TAU_SMALL
+#
+DEF TAU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TAU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 550 -250 650 -150 700 300 700 N
+P 4 0 1 0 0 700 0 150 50 50 150 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TC_SMALL_CURL
+#
+DEF TC_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TC_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 700 -100 700 N
+P 6 0 1 0 -350 1050 -350 150 -300 50 -200 0 -100 0 0 50 N
+P 17 0 1 0 400 650 300 700 100 700 0 650 -50 600 -100 500 -100 200 -50 100 0 50 100 0 250 0 350 50 400 150 350 250 250 300 150 250 -50 -150 N
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDDLE ~ -350 400 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TELEPHONE_RECORDER
+#
+DEF TELEPHONE_RECORDER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TELEPHONE_RECORDER" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 300 -400 0 N
+P 13 0 1 0 100 800 250 750 350 650 400 500 350 350 250 250 100 200 -50 250 -150 350 -200 500 -150 650 -50 750 100 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TESH_SMALL
+#
+DEF TESH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TESH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 100 700 N
+P 5 0 1 0 -200 1050 -200 150 -150 50 -50 0 100 0 N
+P 8 0 1 0 350 1050 250 1050 150 1000 100 900 100 -200 50 -300 -50 -350 -150 -350 N
+X MIDDLE ~ -200 400 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TETRASEME_METRICAL
+#
+DEF TETRASEME_METRICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TETRASEME_METRICAL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 550 -400 300 400 300 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THEREFORE
+#
+DEF THEREFORE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THEREFORE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -350 150 -300 100 -350 50 -400 100 -350 150 -350 50 N
+P 6 0 1 0 0 750 50 700 0 650 -50 700 0 750 0 650 N
+P 6 0 1 0 350 150 400 100 350 50 300 100 350 150 350 50 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THETA_CAP
+#
+DEF THETA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THETA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 550 150 550 N
+P 21 0 1 0 -100 1050 100 1050 200 1000 300 900 350 800 400 650 400 400 350 250 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 250 -400 400 -400 650 -350 800 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THETA_SMALL
+#
+DEF THETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 550 250 550 N
+P 17 0 1 0 -100 1050 50 1050 150 1000 200 950 250 800 250 250 200 100 150 50 50 0 -100 0 -200 50 -250 100 -300 250 -300 800 -250 950 -200 1000 -100 1050 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THETA_SMALL_SCRIPT
+#
+DEF THETA_SMALL_SCRIPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THETA_SMALL_SCRIPT" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 -400 550 -350 500 -300 400 -300 250 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 250 250 800 200 950 150 1000 50 1050 -100 1050 -200 1000 -250 950 -300 850 -300 750 -250 650 -200 600 -100 550 250 550 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THORN_CAP
+#
+DEF THORN_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THORN_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 10 0 1 0 -300 800 100 800 200 750 250 700 300 600 300 450 250 350 200 300 100 250 -300 250 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THORN_SMALL
+#
+DEF THORN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THORN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1050 -250 -350 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THOUSANDS_CYR
+#
+DEF THOUSANDS_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THOUSANDS_CYR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 -100 150 600 N
+P 2 0 1 0 -150 500 250 300 N
+P 2 0 1 0 100 0 -300 200 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TIE
+#
+DEF TIE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TIE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -800 1050 -750 1100 -600 1200 -500 1250 -350 1300 -100 1350 100 1350 350 1300 500 1250 600 1200 750 1100 800 1050 N
+X ~ ~ -150 0 300 U 50 50 1 1 I
+X ~ ~ 150 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TILDE
+#
+DEF TILDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TILDE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -250 950 -200 1000 -100 1050 100 950 200 1000 250 1050 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TILDE_MACRON
+#
+DEF TILDE_MACRON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TILDE_MACRON" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1300 250 1300 N
+P 6 0 1 0 -250 950 -200 1000 -100 1050 100 950 200 1000 250 1050 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TITLO
+#
+DEF TITLO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TITLO" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 950 -250 1050 250 1000 250 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TJE_KOMI_CAP
+#
+DEF TJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 8 0 1 0 0 1050 0 150 50 50 150 0 300 0 400 50 450 150 450 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TJE_KOMI_SMALL
+#
+DEF TJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 8 0 1 0 0 700 0 150 50 50 150 0 200 0 300 50 350 150 350 400 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TOR_BRACKET_OVER
+#
+DEF TOR_BRACKET_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TOR_BRACKET_OVER" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -800 -150 -600 100 600 100 800 -150 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TOTAL_RUNOUT
+#
+DEF TOTAL_RUNOUT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TOTAL_RUNOUT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 550 0 800 -200 650 N
+P 3 0 1 0 400 550 400 800 200 650 N
+P 4 0 1 0 0 800 -400 0 0 0 400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRAPEZIUM
+#
+DEF TRAPEZIUM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRAPEZIUM" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 0 -200 800 200 800 450 0 -450 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE
+#
+DEF TRIANGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 800 450 0 -450 0 0 800 N
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_BLACK
+#
+DEF TRIANGLE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 50 -400 0 N
+P 2 0 1 0 -350 150 -350 0 N
+P 2 0 1 0 -300 250 -300 0 N
+P 2 0 1 0 -250 350 -250 0 N
+P 2 0 1 0 -200 400 -200 0 N
+P 2 0 1 0 -150 500 -150 0 N
+P 2 0 1 0 -100 600 -100 0 N
+P 2 0 1 0 -50 700 -50 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 50 700 50 0 N
+P 2 0 1 0 100 600 100 0 N
+P 2 0 1 0 150 500 150 0 N
+P 2 0 1 0 200 400 200 0 N
+P 2 0 1 0 250 350 250 0 N
+P 2 0 1 0 300 250 300 0 N
+P 2 0 1 0 350 150 350 0 N
+P 3 0 1 0 400 0 0 750 -400 0 N
+P 3 0 1 0 400 50 400 0 400 0 N
+P 4 0 1 0 0 800 450 0 -450 0 0 800 N
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_BLACKHALF
+#
+DEF TRIANGLE_BLACKHALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_BLACKHALF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 0 750 N
+P 2 0 1 0 -400 50 -400 0 N
+P 2 0 1 0 -350 150 -350 0 N
+P 2 0 1 0 -300 250 -300 0 N
+P 2 0 1 0 -250 350 -250 0 N
+P 2 0 1 0 -200 400 -200 0 N
+P 2 0 1 0 -150 500 -150 0 N
+P 2 0 1 0 -100 600 -100 0 N
+P 2 0 1 0 -50 700 -50 0 N
+P 2 0 1 0 0 800 0 0 N
+P 4 0 1 0 0 800 450 0 -450 0 0 800 N
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E
+#
+DEF TRIANGLE_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 400 -400 -50 -400 850 400 400 N
+X CENTER ~ -150 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E_BLACK
+#
+DEF TRIANGLE_E_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 800 -350 0 N
+P 2 0 1 0 -300 750 -300 50 N
+P 2 0 1 0 -250 750 -250 50 N
+P 2 0 1 0 -200 700 -200 100 N
+P 2 0 1 0 -150 700 -150 100 N
+P 2 0 1 0 -100 650 -100 150 N
+P 2 0 1 0 -50 650 -50 150 N
+P 2 0 1 0 0 600 0 200 N
+P 2 0 1 0 50 550 50 250 N
+P 2 0 1 0 100 550 100 250 N
+P 2 0 1 0 150 500 150 300 N
+P 2 0 1 0 200 500 200 300 N
+P 2 0 1 0 250 400 300 400 N
+P 2 0 1 0 250 450 250 350 N
+P 3 0 1 0 -400 800 350 400 -400 0 N
+P 4 0 1 0 400 400 -400 -50 -400 850 400 400 N
+X CENTER ~ -150 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E_SMALL
+#
+DEF TRIANGLE_E_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 200 400 -150 200 -150 600 200 400 N
+X CENTER ~ -50 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E_SMALL_BLACK
+#
+DEF TRIANGLE_E_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 -100 250 N
+P 2 0 1 0 -50 500 -50 300 N
+P 2 0 1 0 0 500 0 300 N
+P 2 0 1 0 50 400 150 400 N
+P 2 0 1 0 50 450 50 350 N
+P 3 0 1 0 -150 550 150 400 -150 250 N
+P 4 0 1 0 200 400 -150 200 -150 600 200 400 N
+X CENTER ~ -50 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_RA
+#
+DEF TRIANGLE_RA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_RA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 0 400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_RA_BLACK
+#
+DEF TRIANGLE_RA_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_RA_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 50 -350 0 N
+P 2 0 1 0 -300 100 -300 0 N
+P 2 0 1 0 -250 150 -250 0 N
+P 2 0 1 0 -200 200 -200 0 N
+P 2 0 1 0 -150 250 -150 0 N
+P 2 0 1 0 -100 300 -100 0 N
+P 2 0 1 0 -50 350 -50 0 N
+P 2 0 1 0 0 400 0 0 N
+P 2 0 1 0 50 450 50 0 N
+P 2 0 1 0 100 500 100 0 N
+P 2 0 1 0 150 550 150 0 N
+P 2 0 1 0 200 600 200 0 N
+P 2 0 1 0 250 650 250 0 N
+P 2 0 1 0 300 700 300 0 N
+P 2 0 1 0 350 750 350 0 N
+P 4 0 1 0 400 0 400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_SMALL
+#
+DEF TRIANGLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 600 200 250 -200 250 0 600 N
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_SMALL_BLACK
+#
+DEF TRIANGLE_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 300 -150 250 N
+P 2 0 1 0 -100 400 -100 250 N
+P 2 0 1 0 -50 500 -50 250 N
+P 2 0 1 0 0 600 0 250 N
+P 2 0 1 0 50 500 50 250 N
+P 2 0 1 0 100 400 100 250 N
+P 2 0 1 0 150 300 150 250 N
+P 3 0 1 0 -150 250 0 550 150 250 N
+P 4 0 1 0 0 600 200 250 -200 250 0 600 N
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL
+#
+DEF TRIANGLE_TALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 800 300 0 -300 0 0 800 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_BLACK
+#
+DEF TRIANGLE_TALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 100 N
+P 2 0 1 0 -200 250 -200 0 N
+P 2 0 1 0 -150 400 -150 0 N
+P 2 0 1 0 -100 500 -100 0 N
+P 2 0 1 0 -50 650 -50 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 50 650 50 0 N
+P 2 0 1 0 100 500 100 0 N
+P 2 0 1 0 150 400 150 0 N
+P 2 0 1 0 200 250 200 0 N
+P 2 0 1 0 250 100 250 0 N
+P 3 0 1 0 250 0 0 700 -250 0 N
+P 4 0 1 0 0 800 300 0 -300 0 0 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_E
+#
+DEF TRIANGLE_TALL_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_E" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 400 -400 100 -400 700 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_E_BLACK
+#
+DEF TRIANGLE_TALL_E_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_E_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 650 -350 150 N
+P 2 0 1 0 -300 650 -300 150 N
+P 2 0 1 0 -250 600 -250 200 N
+P 2 0 1 0 -200 600 -200 200 N
+P 2 0 1 0 -150 600 -150 200 N
+P 2 0 1 0 -100 550 -100 250 N
+P 2 0 1 0 -50 550 -50 250 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 500 50 300 N
+P 2 0 1 0 100 500 100 300 N
+P 2 0 1 0 150 450 150 350 N
+P 2 0 1 0 200 450 200 350 N
+P 2 0 1 0 250 450 250 350 N
+P 2 0 1 0 300 400 250 400 N
+P 3 0 1 0 -400 650 350 400 -400 150 N
+P 4 0 1 0 400 400 -400 100 -400 700 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_E_MINUS
+#
+DEF TRIANGLE_TALL_E_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_E_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 4 0 1 0 400 500 -400 200 -400 800 400 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRUE
+#
+DEF TRUE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRUE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 400 250 N
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 -400 800 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TS_SMALL
+#
+DEF TS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 700 -50 700 N
+P 20 0 1 0 -300 1050 -300 150 -250 50 -150 0 -50 50 50 0 250 0 350 50 400 150 400 200 350 300 250 350 100 350 0 400 -50 500 -50 550 0 650 100 700 250 700 350 650 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSHE_CAP
+#
+DEF TSHE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSHE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 2 0 1 0 0 0 0 1050 N
+P 6 0 1 0 0 700 300 700 450 650 550 550 600 400 600 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSHE_SMALL
+#
+DEF TSHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 800 300 800 N
+P 2 0 1 0 0 1050 0 0 N
+P 7 0 1 0 0 400 50 450 150 500 250 500 350 450 400 350 400 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSY_CAP
+#
+DEF TSY_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSY_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1050 300 0 N
+P 4 0 1 0 -300 1050 -300 0 400 0 400 -250 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSY_SMALL
+#
+DEF TSY_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSY_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 0 N
+P 4 0 1 0 -200 700 -200 0 350 0 350 -250 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TTSE_CAP
+#
+DEF TTSE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TTSE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 1050 0 1050 N
+P 2 0 1 0 300 1050 300 0 N
+P 4 0 1 0 -300 1050 -300 0 400 0 400 -250 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TTSE_SMALL
+#
+DEF TTSE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TTSE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 -450 700 N
+P 2 0 1 0 250 700 250 0 N
+P 4 0 1 0 -200 700 -200 0 350 0 350 -250 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_CAP
+#
+DEF U_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_CAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 1050 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_CAP_STROKE
+#
+DEF U_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 700 450 700 N
+P 10 0 1 0 -300 1050 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALL
+#
+DEF U_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 7 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 100 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALL_SIDE
+#
+DEF U_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 550 350 550 N
+P 7 0 1 0 -350 100 200 100 300 150 350 250 350 400 300 500 250 550 N
+X ABOVE ~ -600 350 100 R 50 50 1 1 I
+X BELOW ~ 600 350 100 R 50 50 1 1 I
+X BOTTOM ~ 350 300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 550 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP1 ~ -350 100 100 R 50 50 1 1 I
+X TOP2 ~ -350 550 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALL_STROKE
+#
+DEF U_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 450 350 450 N
+P 2 0 1 0 200 700 200 0 N
+P 7 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 100 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALLCAP
+#
+DEF U_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 150 200 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_TINY
+#
+DEF U_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 500 150 0 N
+P 6 0 1 0 -200 500 -200 150 -150 50 -50 0 50 0 150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 150 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP1 ~ -200 500 100 R 50 50 1 1 I
+X TOP2 ~ 150 500 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_TINY_SIDE
+#
+DEF U_TINY_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_TINY_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 400 250 400 N
+P 6 0 1 0 -250 50 100 50 200 100 250 200 250 300 200 400 N
+X ABOVE ~ -500 250 100 R 50 50 1 1 I
+X BELOW ~ 500 200 100 R 50 50 1 1 I
+X BOTTOM ~ 250 200 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 400 100 R 50 50 1 1 I
+X TOP1 ~ -250 50 100 R 50 50 1 1 I
+X TOP2 ~ -250 400 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UE_SMALL
+#
+DEF UE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -450 700 -450 150 -400 50 -300 0 -150 0 -50 50 0 150 N
+P 13 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 350 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNDERLINE_CONT
+#
+DEF UNDERLINE_CONT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNDERLINE_CONT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 600 0 N
+P 6 0 1 0 -550 750 -450 800 -350 800 -250 750 -200 650 -200 300 N
+P 6 0 1 0 150 400 200 350 150 300 100 350 150 400 150 300 N
+P 6 0 1 0 550 400 600 350 550 300 500 350 550 400 550 300 N
+P 8 0 1 0 -200 350 -300 300 -450 300 -550 350 -600 450 -550 550 -450 600 -200 600 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNDERLINE_DISCONT
+#
+DEF UNDERLINE_DISCONT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNDERLINE_DISCONT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -200 0 N
+P 2 0 1 0 200 0 600 0 N
+P 6 0 1 0 -550 750 -450 800 -350 800 -250 750 -200 650 -200 300 N
+P 6 0 1 0 250 750 350 800 450 800 550 750 600 650 600 300 N
+P 8 0 1 0 -200 350 -300 300 -450 300 -550 350 -600 450 -550 550 -450 600 -200 600 N
+P 8 0 1 0 600 350 500 300 350 300 250 350 200 450 250 550 350 600 600 600 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNDO
+#
+DEF UNDO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNDO" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 650 -350 450 -150 450 N
+P 6 0 1 0 350 450 250 550 100 600 -100 600 -250 550 -350 450 N
+P 9 0 1 0 -200 150 -250 250 -350 300 -450 250 -500 150 -450 50 -350 0 -250 50 -200 150 N
+P 9 0 1 0 200 150 250 50 350 0 450 50 500 150 450 250 350 300 250 250 200 150 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNION
+#
+DEF UNION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNION" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 800 -400 300 -300 100 -100 0 100 0 300 100 400 300 400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNION_DBL
+#
+DEF UNION_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNION_DBL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -150 800 -150 450 -100 350 0 300 100 350 150 450 150 800 N
+P 10 0 1 0 -450 800 -450 350 -400 200 -250 50 -100 0 100 0 250 50 400 200 450 350 450 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNION_HUGE
+#
+DEF UNION_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNION_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -550 1050 -550 200 -500 0 -400 -150 -250 -250 -50 -300 50 -300 250 -250 400 -150 500 0 550 200 550 1050 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UPSILON_CAP_HOOK
+#
+DEF UPSILON_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UPSILON_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -350 1050 -250 1050 -150 1000 -50 900 0 800 0 0 N
+P 7 0 1 0 0 800 50 950 100 1000 200 1050 250 1050 350 1000 400 900 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X P ~ -450 0 300 U 50 50 1 1 I
+X S ~ 500 0 300 U 50 50 1 1 I
+X TONOS ~ -650 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UPSILON_LARGE
+#
+DEF UPSILON_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UPSILON_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -300 1050 -300 200 -250 100 -200 50 -100 0 100 0 200 50 300 150 350 250 350 900 300 1000 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 250 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UPSILON_SMALL
+#
+DEF UPSILON_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UPSILON_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 100 250 200 250 550 200 650 150 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_CAP
+#
+DEF V_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 1050 0 0 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_MIDWELSH_CAP
+#
+DEF V_MIDWELSH_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_MIDWELSH_CAP" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -50 1050 -150 1000 -250 850 -300 700 -300 200 -250 100 -200 50 -100 0 100 0 200 50 300 150 350 250 350 350 300 550 200 700 150 750 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP1 ~ -50 1050 100 R 50 50 1 1 I
+X TOP2 ~ 250 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_MIDWELSH_SMALL
+#
+DEF V_MIDWELSH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_MIDWELSH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -50 700 -150 650 -200 600 -250 500 -250 200 -200 100 -150 50 -50 0 50 0 150 50 200 100 250 200 250 300 200 400 150 450 50 500 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_SMALL
+#
+DEF V_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 0 0 250 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_TINY
+#
+DEF V_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_TINY" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 500 0 0 200 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# W_CAP
+#
+DEF W_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "W_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 1050 -200 0 0 750 200 0 450 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# W_OVER_W
+#
+DEF W_OVER_W U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "W_OVER_W" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 400 -200 0 0 300 200 0 400 400 N
+P 5 0 1 0 -400 1050 -200 650 0 950 200 650 400 1050 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# W_SMALL
+#
+DEF W_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "W_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 700 -200 0 0 500 200 0 400 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WATCH
+#
+DEF WATCH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WATCH" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 600 0 400 150 400 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE
+#
+DEF WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 400 -350 450 -200 500 -50 450 50 350 200 300 350 350 400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_EQUAL
+#
+DEF WAVE_EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 2 0 1 0 -400 400 400 400 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_MINUS
+#
+DEF WAVE_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 400 250 N
+P 8 0 1 0 -400 550 -350 600 -200 650 -50 600 50 500 200 450 350 500 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_NOTEQUAL
+#
+DEF WAVE_NOTEQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_NOTEQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 150 550 -150 -50 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_TPL
+#
+DEF WAVE_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_TPL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 100 -350 150 -200 200 -50 150 50 50 200 0 350 50 400 100 N
+P 8 0 1 0 -400 400 -350 450 -200 500 -50 450 50 350 200 300 350 350 400 400 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WREATH_PRODUCT
+#
+DEF WREATH_PRODUCT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WREATH_PRODUCT" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 0 800 50 750 100 600 50 450 -50 350 -100 200 -50 50 0 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WYNN_CAP
+#
+DEF WYNN_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WYNN_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 -350 N
+P 11 0 1 0 -300 900 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 600 250 450 150 300 -300 -150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WYNN_SMALL
+#
+DEF WYNN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WYNN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 9 0 1 0 -250 600 -200 650 -100 700 100 700 200 650 250 550 250 400 200 300 -250 -150 N
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# X_CAP
+#
+DEF X_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "X_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 350 0 N
+P 2 0 1 0 350 1050 -350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X CENTER ~ 0 550 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# X_SMALL
+#
+DEF X_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "X_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 250 700 N
+P 2 0 1 0 -300 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# X_TINY
+#
+DEF X_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "X_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 500 200 0 N
+P 2 0 1 0 200 500 -200 0 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# XI_CAP
+#
+DEF XI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "XI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 250 0 N
+P 2 0 1 0 -300 1050 250 1050 N
+P 2 0 1 0 150 550 -200 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# XI_SMALL
+#
+DEF XI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "XI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1050 250 1050 N
+P 7 0 1 0 -50 1050 -150 1000 -200 900 -200 750 -150 650 -50 600 150 600 N
+P 15 0 1 0 -50 600 -150 550 -200 500 -250 400 -250 200 -200 100 -150 50 -50 0 50 0 150 -50 200 -150 200 -200 150 -300 50 -350 0 -350 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_CAP
+#
+DEF Y_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 300 100 R 50 50 1 1 I
+X P ~ -450 0 300 U 50 50 1 1 I
+X PERIS ~ -700 1300 100 R 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+X TONOS ~ -700 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_CAP_HOOK
+#
+DEF Y_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+P 7 0 1 0 -350 1050 0 500 300 1000 400 1050 500 1000 550 900 550 800 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_CAP_STROKE
+#
+DEF Y_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 900 350 900 N
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_LARGE
+#
+DEF Y_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 0 350 N
+P 5 0 1 0 350 1050 -100 150 -200 50 -300 0 -350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL
+#
+DEF Y_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 5 0 1 0 250 700 0 0 -100 -250 -150 -300 -250 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_HOOK
+#
+DEF Y_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 9 0 1 0 -250 -350 -150 -300 -100 -250 0 0 200 650 300 700 400 650 450 550 450 450 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_LOOP
+#
+DEF Y_SMALL_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 11 0 1 0 250 700 0 0 -50 -200 -100 -300 -200 -350 -300 -300 -350 -200 -300 -100 -200 -50 -100 -100 -50 -200 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_STRAIGHT
+#
+DEF Y_SMALL_STRAIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_STRAIGHT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+P 3 0 1 0 -250 700 0 0 250 700 N
+X MIDBOTTOM ~ 0 -100 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_STROKE
+#
+DEF Y_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 500 300 500 N
+P 2 0 1 0 -250 700 0 0 N
+P 5 0 1 0 250 700 0 0 -100 -250 -150 -300 -250 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALLCAP
+#
+DEF Y_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 0 N
+P 3 0 1 0 -250 700 0 350 250 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 200 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YA_CAP
+#
+DEF YA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 -350 0 N
+P 11 0 1 0 250 0 250 1050 -150 1050 -250 1000 -300 950 -350 850 -350 700 -300 600 -250 550 -150 500 250 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YA_SMALL
+#
+DEF YA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 300 -250 0 N
+P 9 0 1 0 200 0 200 700 -100 700 -200 650 -250 550 -250 450 -200 350 -100 300 200 300 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAE_CAP
+#
+DEF YAE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 500 -500 0 N
+P 3 0 1 0 100 1050 100 0 600 0 N
+P 10 0 1 0 450 500 -300 500 -400 550 -450 600 -500 700 -500 850 -450 950 -400 1000 -300 1050 600 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAE_SMALL
+#
+DEF YAE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -250 300 N
+P 9 0 1 0 0 550 0 700 -350 700 -450 650 -500 550 -500 450 -450 350 -350 300 0 300 N
+P 13 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAT_CAP
+#
+DEF YAT_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAT_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 900 200 900 N
+P 11 0 1 0 -250 1050 -250 0 50 0 200 50 300 150 350 250 350 400 300 500 200 600 50 650 -250 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAT_SMALL
+#
+DEF YAT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 700 100 700 N
+P 9 0 1 0 -200 1050 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YEN
+#
+DEF YEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YEN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 350 400 350 N
+P 2 0 1 0 -400 700 400 700 N
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YERY_CAP
+#
+DEF YERY_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YERY_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 500 1050 500 0 N
+P 11 0 1 0 -450 1050 -450 0 -150 0 0 50 100 150 150 250 150 400 100 500 0 600 -150 650 -450 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YERY_SMALL
+#
+DEF YERY_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YERY_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 700 350 0 N
+P 9 0 1 0 -350 700 -350 0 -100 0 0 50 50 150 50 300 0 400 -100 450 -350 450 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YOGH_CAP
+#
+DEF YOGH_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YOGH_CAP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 200 450 300 350 350 250 350 0 300 -100 200 -200 100 -250 -300 -350 N
+P 12 0 1 0 -300 950 -250 1000 -150 1050 150 1050 250 1000 300 950 350 850 350 650 300 550 200 450 100 400 -200 300 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YOGH_SMALL
+#
+DEF YOGH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YOGH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 150 200 200 150 250 50 250 -100 200 -200 150 -250 50 -300 -250 -350 N
+P 11 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 350 200 250 150 200 50 150 -150 100 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YR_CAP
+#
+DEF YR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 2 0 1 0 -50 250 300 -350 N
+P 10 0 1 0 -300 800 100 800 200 750 250 700 300 600 300 450 250 350 200 300 100 250 -300 250 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YU_CAP
+#
+DEF YU_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YU_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 1050 -500 0 N
+P 2 0 1 0 -150 550 -500 550 N
+P 17 0 1 0 100 1050 300 1050 400 1000 500 900 550 700 550 350 500 150 400 50 300 0 100 0 0 50 -100 150 -150 350 -150 700 -100 900 0 1000 100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YU_SMALL
+#
+DEF YU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 350 -100 350 N
+P 2 0 1 0 -400 700 -400 0 N
+P 17 0 1 0 100 0 0 50 -50 100 -100 200 -100 500 -50 600 0 650 100 700 250 700 350 650 400 600 450 500 450 200 400 100 350 50 250 0 100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_BIG_CAP
+#
+DEF YUS_BIG_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_BIG_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 550 -400 1050 400 1050 0 550 N
+P 10 0 1 0 -450 0 -450 250 -400 400 -300 500 -150 550 150 550 300 500 400 400 450 250 450 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_BIG_SMALL
+#
+DEF YUS_BIG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_BIG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 350 -300 700 300 700 0 350 N
+P 10 0 1 0 -350 0 -350 150 -300 250 -250 300 -150 350 150 350 250 300 300 250 350 150 350 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_LITTLE_CAP
+#
+DEF YUS_LITTLE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_LITTLE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 400 300 400 N
+P 2 0 1 0 0 400 0 0 N
+P 3 0 1 0 -500 0 0 1050 500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_LITTLE_SMALL
+#
+DEF YUS_LITTLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_LITTLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 300 200 300 N
+P 2 0 1 0 0 300 0 0 N
+P 3 0 1 0 -350 0 0 700 350 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_CAP
+#
+DEF Z_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -350 1050 350 1050 -350 0 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -350 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 550 100 R 50 50 1 1 I
+X TOP1 ~ -350 1050 100 R 50 50 1 1 I
+X TOP2 ~ 350 1050 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_SMALL
+#
+DEF Z_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 700 250 700 -300 0 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -300 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_SMALL_CURL
+#
+DEF Z_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 700 250 700 -300 0 100 0 200 50 250 150 200 250 100 300 0 250 -200 -150 N
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -300 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_SMALL_SWASHTAIL
+#
+DEF Z_SMALL_SWASHTAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_SMALL_SWASHTAIL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -300 700 250 700 -300 0 -200 0 -100 -50 0 -150 100 -200 250 -200 N
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -300 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZEMLYA_CAP
+#
+DEF ZEMLYA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZEMLYA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 19 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 650 200 600 100 550 250 500 300 450 350 350 350 200 300 100 250 50 150 0 -150 0 -250 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZEMLYA_SMALL
+#
+DEF ZEMLYA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZEMLYA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 15 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 150 200 50 100 0 -100 0 -200 50 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZETA_SMALL
+#
+DEF ZETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 1050 250 1050 -100 700 -200 550 -250 400 -250 200 -200 100 -150 50 -50 0 50 0 150 -50 200 -150 200 -200 150 -300 50 -350 0 -350 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZHIVETE_CAP
+#
+DEF ZHIVETE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZHIVETE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 600 -600 0 N
+P 2 0 1 0 0 0 0 1050 N
+P 2 0 1 0 0 450 -600 1050 N
+P 2 0 1 0 600 0 150 600 N
+P 2 0 1 0 600 1050 0 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM3 ~ 600 0 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZHIVETE_SMALL
+#
+DEF ZHIVETE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZHIVETE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 350 -400 0 N
+P 2 0 1 0 0 300 -400 700 N
+P 2 0 1 0 0 700 0 0 N
+P 2 0 1 0 400 0 50 350 N
+P 2 0 1 0 400 700 0 300 N
+X BOTTOM3 ~ 400 0 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZJE_KOMI_CAP
+#
+DEF ZJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 20 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 650 200 600 100 550 200 500 250 450 300 350 300 150 350 50 450 0 600 0 700 50 750 150 750 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 950 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZJE_KOMI_SMALL
+#
+DEF ZJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 17 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 150 300 50 400 0 450 0 550 50 600 150 600 500 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/helpers/tools_to_build_newstroke-font/font.dcm b/helpers/tools_to_build_newstroke-font/font.dcm
new file mode 100644
index 0000000..87d1e61
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font.dcm
@@ -0,0 +1,3 @@
+EESchema-DOCLIB Version 2.0 Date: Ð’Ñк 31 Янв 2010 21:30:44
+#
+#End Doc Library
diff --git a/helpers/tools_to_build_newstroke-font/font.kicad_pcb b/helpers/tools_to_build_newstroke-font/font.kicad_pcb
new file mode 100644
index 0000000..c5dcf2a
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font.kicad_pcb
@@ -0,0 +1,376 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-04-03 BZR 5570)-product")
+
+ (general
+ (links 0)
+ (no_connects 0)
+ (area 9.113522 18.1229 196.183794 193.827146)
+ (thickness 1.6)
+ (drawings 89)
+ (tracks 0)
+ (zones 0)
+ (modules 0)
+ (nets 1)
+ )
+
+ (page A4)
+ (title_block
+ (date "29 jan 2010")
+ )
+
+ (layers
+ (0 F.Cu signal)
+ (31 B.Cu signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.2032)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2032)
+ (segment_width 0.381)
+ (edge_width 0.381)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3048)
+ (pcb_text_size 1.524 2.032)
+ (mod_edge_width 0.381)
+ (mod_text_size 1.524 1.524)
+ (mod_text_width 0.3048)
+ (pad_size 1.524 1.524)
+ (pad_drill 0.8128)
+ (pad_to_mask_clearance 0.254)
+ (aux_axis_origin 0 0)
+ (visible_elements FFFFFF7F)
+ (pcbplotparams
+ (layerselection 0x00030_80000001)
+ (usegerberextensions false)
+ (excludeedgelayer true)
+ (linewidth 0.100000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+
+ (net_class Default "КлаÑÑ Ñ†ÐµÐ¿ÐµÐ¹ по умолчанию."
+ (clearance 0.254)
+ (trace_width 0.2032)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ )
+
+ (gr_text ᶠᶡᶢᶣᶤᶥᶦᶧᶨᶩᶪᶫᶬᶭᶮᶯᶰᶱᶲᶳᶴᶵᶶᶷᶸᶹᶺᶻᶼᶽᶾᶿ (at 99.9998 55.99938) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ᶀá¶á¶‚ᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌá¶á¶Žá¶á¶á¶‘ᶒᶓᶔᶕᶖᶗᶘᶙᶚᶛᶜá¶á¶žá¶Ÿ (at 99.9998 51.99888) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ᵠᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵸᵹᵺᵻᵼᵽᵾᵿ (at 99.9998 48.00092) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text áµ€áµáµ‚ᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌáµáµŽáµáµáµ‘ᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜáµáµžáµŸ (at 99.9998 44.00042) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸᴹᴺᴻᴼᴽᴾᴿ (at 99.9998 39.99992) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text á´€á´á´‚ᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌá´á´Žá´á´á´‘ᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜá´á´žá´Ÿ (at 99.9998 35.99942) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ô€ÔÔ‚ÔƒÔ„Ô…Ô†Ô‡ÔˆÔ‰ÔŠÔ‹ÔŒÔÔŽÔÔÔ‘Ô’Ô“Ô”Ô•Ô–Ô—Ô˜Ô™ÔšÔ›ÔœÔÔžÔŸÔ Ô¡Ô¢Ô£ (at 39.99992 159.99968) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ῠῡῢΰῤῥῦῧῨῩῪΎῬ῭΅`ῲῳῴῶῷῸΌῺΏῼ´῾ (at 99.9998 124.00026) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text á¿€á¿á¿‚ῃῄῆῇῈΈῊΉῌá¿á¿Žá¿á¿á¿‘ῒΐῖῗῘῙῚΊá¿á¿žá¿Ÿ (at 99.9998 119.99976) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾰᾱᾲᾳᾴᾶᾷᾸᾹᾺΆᾼ᾽ι᾿ (at 99.9998 115.99926) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text á¾€á¾á¾‚ᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌá¾á¾Žá¾á¾á¾‘ᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜá¾á¾žá¾Ÿ (at 99.9998 111.99876) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯὰάὲέὴήὶίὸόὺύὼώ (at 99.9998 108.0008) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text á½€á½á½‚ὃὄὅὈὉὊὋὌá½á½á½‘ὒὓὔὕὖὗὙὛá½á½Ÿ (at 99.9998 104.0003) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿ (at 99.9998 99.9998) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text á¼€á¼á¼‚ἃἄἅἆἇἈἉἊἋἌá¼á¼Žá¼á¼á¼‘ἒἓἔἕἘἙἚἛἜἠ(at 99.9998 95.9993) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ (at 99.9998 91.9988) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ềá»á»‚ểỄễỆệỈỉỊịỌá»á»Žá»á»á»‘ỒồỔổỖỗỘộỚớỜá»á»žá»Ÿ (at 99.9998 88.00084) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾế (at 99.9998 84.00034) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ẁáºáº‚ẃẄẅẆẇẈẉẊẋẌáºáºŽáºáºáº‘ẒẓẔẕẖẗẘẙẚẛẜáºáºžáºŸ (at 99.9998 79.99984) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿ (at 99.9998 75.99934) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text á¹€á¹á¹‚ṃṄṅṆṇṈṉṊṋṌá¹á¹Žá¹á¹á¹‘ṒṓṔṕṖṗṘṙṚṛṜá¹á¹žá¹Ÿ (at 99.9998 71.99884) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿ (at 99.9998 68.00088) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ḁá¸á¸‚ḃḄḅḆḇḈḉḊḋḌá¸á¸Žá¸á¸á¸‘ḒḓḔḕḖḗḘḙḚḛḜá¸á¸žá¸Ÿ (at 99.9998 64.00038) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯ (at 39.99992 96.00184) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ê€ÊʂʃʄʅʆʇʈʉʊʋʌÊÊŽÊÊʑʒʓʔʕʖʗʘʙʚʛʜÊʞʟ (at 39.99992 92.00134) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿ (at 39.99992 88.00084) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text É€ÉɂɃɄɅɆɇɈɉɊɋɌÉÉŽÉÉɑɒɓɔɕɖɗɘəɚɛɜÉɞɟ (at 39.99992 84.00288) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ (at 39.99992 80.00238) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text È€ÈȂȃȄȅȆȇȈȉȊȋȌÈÈŽÈÈȑȒȓȔȕȖȗȘșȚțȜÈȞȟ (at 39.99992 76.00188) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ (at 39.99992 72.00138) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ç€ÇǂǃDŽDždžLJLjljNJNjnjÇÇŽÇÇǑǒǓǔǕǖǗǘǙǚǛǜÇǞǟ (at 39.99992 68.00088) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ (at 39.99992 64.00292) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Æ€ÆƂƃƄƅƆƇƈƉƊƋƌÆÆŽÆÆƑƒƓƔƕƖƗƘƙƚƛƜÆƞƟ (at 39.99992 60.00242) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿ (at 159.99968 131.99872) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â—€â—◂◃◄◅◆◇◈◉◊○◌â—â—Žâ—â—◑◒◓◔◕◖◗◘◙◚◛◜â—â—žâ—Ÿ (at 159.99968 127.99822) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿ (at 159.99968 124.00026) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ∛~27~=3 (at 102.99954 189.99962) (layer F.SilkS)
+ (effects (font (size 5.25018 4.0005) (thickness 0.3048)))
+ )
+ (gr_text â â¡â¢â£â¤â¥â¦â§ (at 159.99968 119.99976) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹âŒââŽâââ‘â’â“â”â•â–â—â˜â™âšâ›âœââžâŸ (at 159.99968 115.99926) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⎠⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿ (at 159.99968 111.99876) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⎀âŽâŽ‚⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌âŽâŽŽâŽâŽâŽ‘⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜âŽâŽžâŽŸ (at 159.99968 107.99826) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬â­â®â¯â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿ (at 159.99968 104.0003) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹âŒââŽâââ‘â’â“â”â•â–â—â˜â™âšâ›âœââžâŸ (at 159.99968 99.9998) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⌠⌡⌢⌣⌤⌥⌦⌧⌨〈〉⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿ (at 159.99968 95.9993) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⌀âŒâŒ‚⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌âŒâŒŽâŒâŒâŒ‘⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜âŒâŒžâŒŸ (at 159.99968 91.9988) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿ (at 159.99968 87.9983) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â‹€â‹â‹‚⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌â‹â‹Žâ‹â‹â‹‘⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜â‹â‹žâ‹Ÿ (at 159.99968 84.00034) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿ (at 159.99968 79.99984) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⊀âŠâŠ‚⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌âŠâŠŽâŠâŠâŠ‘⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜âŠâŠžâŠŸ (at 159.99968 75.99934) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿ (at 159.99968 71.99884) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ≀â‰â‰‚≃≄≅≆≇≈≉≊≋≌â‰â‰Žâ‰â‰â‰‘≒≓≔≕≖≗≘≙≚≛≜â‰â‰žâ‰Ÿ (at 159.99968 67.99834) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿ (at 159.99968 64.00038) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ∀âˆâˆ‚∃∄∅∆∇∈∉∊∋∌âˆâˆŽâˆâˆâˆ‘−∓∔∕∖∗∘∙√∛∜âˆâˆžâˆŸ (at 159.99968 59.99988) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿ (at 159.99968 55.99938) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ⇀â‡â‡‚⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌â‡â‡Žâ‡â‡â‡‘⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜â‡â‡žâ‡Ÿ (at 159.99968 51.99888) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿ (at 159.99968 47.99838) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â†â†‘→↓↔↕↖↗↘↙↚↛↜â†â†žâ†Ÿ (at 159.99968 44.00042) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵ (at 159.99968 35.99942) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â°â±â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿â‚€â‚₂₃₄₅₆₇₈₉₊₋₌â‚â‚Žâ‚â‚‘â‚’â‚“â‚” (at 159.99968 31.99892) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ‰‱′″‴‵‶‷‸‹›※‼‽‾‿â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹âŒââŽâââ‘â’â“â”â•â–â—â˜â™âšâ›âœââž (at 159.99968 27.99842) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text â€â€‘‒–—―‖‗‘’‚‛“â€â€žâ€Ÿâ€ â€¡â€¢â€£â€¤â€¥â€¦â€§ (at 159.99968 24.00046) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ó Ó¡Ó¢Ó£Ó¤Ó¥Ó¦Ó§Ó¨Ó©ÓªÓ«Ó¬Ó­Ó®Ó¯Ó°Ó±Ó²Ó³Ó´ÓµÓ¶Ó·Ó¸Ó¹ÓºÓ»Ó¼Ó½Ó¾Ó¿ (at 39.99992 156.00172) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ó€ÓÓ‚ÓƒÓ„Ó…Ó†Ó‡ÓˆÓ‰ÓŠÓ‹ÓŒÓÓŽÓÓÓ‘Ó’Ó“Ó”Ó•Ó–Ó—Ó˜Ó™ÓšÓ›ÓœÓÓžÓŸ (at 39.99992 152.00122) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ò Ò¡Ò¢Ò£Ò¤Ò¥Ò¦Ò§Ò¨Ò©ÒªÒ«Ò¬Ò­Ò®Ò¯Ò°Ò±Ò²Ò³Ò´ÒµÒ¶Ò·Ò¸Ò¹ÒºÒ»Ò¼Ò½Ò¾Ò¿ (at 39.99992 148.00072) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ò€ÒÒ‚ÒƒÒ„Ò…Ò†Ò‡ÒˆÒ‰ÒŠÒ‹ÒŒÒÒŽÒÒÒ‘Ò’Ò“Ò”Ò•Ò–Ò—Ò˜Ò™ÒšÒ›ÒœÒÒžÒŸ (at 39.99992 144.00276) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ (at 39.99992 140.00226) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text абвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ (at 39.99992 136.00176) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯ (at 39.99992 132.00126) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ЀÐЂЃЄЅІЇЈЉЊЋЌÐÐŽÐÑёђѓєѕіїјљњћќÑўџ (at 39.99992 128.00076) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿ (at 39.99992 124.0028) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ÏϑϒϓϔϕϖϗϘϙϚϛϜÏϞϟ (at 39.99992 120.0023) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ΰαβγδεζηθικλμνξοπÏςστυφχψωϊϋόÏÏŽÏ (at 39.99992 115.99926) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ÎΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩΪΫάέήί (at 39.99992 112.0013) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ͰͱͲͳʹ͵Ͷͷͺͻͼͽ;΄΅Ά·ΈΉΊΌΎΠ(at 39.99992 108.0008) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "Сколько 2+2" (at 48.00092 185.0009) (layer B.Cu)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ (at 39.99992 56.00192) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Å€ÅłŃńŅņŇňʼnŊŋŌÅÅŽÅÅőŒœŔŕŖŗŘřŚśŜÅŞş (at 39.99992 52.00142) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿ (at 39.99992 48.00092) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text Ä€ÄĂ㥹ĆćĈĉĊċČÄÄŽÄÄđĒēĔĕĖėĘęĚěĜÄĞğ (at 39.99992 44.00042) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ (at 41.00068 39.99992) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞß (at 39.99992 36.00196) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ (at 39.99992 32.00146) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text `abcdefghijklmnopqrstuvwxyz{|} (at 39.99992 28.0035) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ (at 39.99992 24.003) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text " !@#$%'()*+,-./0123456789:;<=>?" (at 39.99992 20.0025) (layer F.SilkS)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text "LPC2144\n2+2=x" (at 71.99884 184.00014) (layer F.Cu)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text R18 (at 61.00064 189.99962) (layer F.Cu)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)))
+ )
+ (gr_text R18 (at 61.00064 185.99912) (layer B.Cu)
+ (effects (font (size 2.032 1.524) (thickness 0.3048)) (justify mirror))
+ )
+ (gr_text "TEXT EXAMPLE\nQu? 2+2=4\nàáâãäåæ" (at 27.0002 185.0009) (layer F.SilkS)
+ (effects (font (size 1.50114 1.99898) (thickness 0.20066)))
+ )
+
+)
diff --git a/helpers/tools_to_build_newstroke-font/font.lib b/helpers/tools_to_build_newstroke-font/font.lib
new file mode 100644
index 0000000..c340ba5
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font.lib
@@ -0,0 +1,7348 @@
+EESchema-LIBRARY Version 2.3 Date: Ð’Ñк 31 Янв 2010 21:30:44
+#
+# 0
+#
+DEF 0 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "0" 0 -350 60 H V C CNN
+DRAW
+ENDDRAW
+ENDDEF
+#
+# A_CAP
+#
+DEF A_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 300 250 300 N
+P 3 0 1 0 -350 0 0 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -350 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X PERIS ~ -350 1300 100 R 50 50 1 1 I
+X TONOS ~ -350 950 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_SMALL
+#
+DEF A_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 0 250 550 200 650 100 700 -100 700 -200 650 N
+P 10 0 1 0 250 50 150 0 -100 0 -200 50 -250 150 -250 250 -200 350 -100 400 150 400 250 450 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X HALFRING ~ 250 850 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_SMALLCAP
+#
+DEF A_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 150 200 150 N
+P 3 0 1 0 -250 0 0 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_TINY
+#
+DEF A_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_TINY" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 0 N
+P 8 0 1 0 200 50 100 0 -50 0 -150 50 -200 150 -150 250 -50 300 200 300 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# A_TINY_TURNED
+#
+DEF A_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "A_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 500 -200 150 -150 50 -50 0 50 0 150 50 N
+P 8 0 1 0 -200 450 -100 500 50 500 150 450 200 350 150 250 50 200 -200 200 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ABZUEGLICH
+#
+DEF ABZUEGLICH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ABZUEGLICH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 -150 250 1250 N
+P 6 0 1 0 -200 1050 -150 1000 -200 950 -250 1000 -200 1050 -200 950 N
+P 6 0 1 0 200 100 250 50 200 0 150 50 200 100 200 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ACUTE
+#
+DEF ACUTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ACUTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1100 -50 950 N
+X P ~ -200 0 300 U 50 50 1 1 I
+X S ~ 200 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ACUTE_DBL
+#
+DEF ACUTE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ACUTE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 1100 -200 950 N
+P 2 0 1 0 300 1100 150 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ACUTE_DOT
+#
+DEF ACUTE_DOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ACUTE_DOT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 1100 0 950 N
+P 6 0 1 0 -250 1100 -200 1050 -250 1000 -300 1050 -250 1100 -250 1000 N
+X P ~ -350 0 300 U 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_CAP
+#
+DEF AE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 300 0 300 N
+P 2 0 1 0 0 550 350 550 N
+P 3 0 1 0 -500 0 -150 1050 500 1050 N
+P 3 0 1 0 0 1050 0 0 500 0 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_SMALL
+#
+DEF AE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 650 -350 700 -150 700 -50 650 0 550 N
+P 22 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 400 -350 400 -450 350 -500 250 -500 150 -450 50 -350 0 -150 0 -50 50 0 150 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_SMALLCAP
+#
+DEF AE_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 150 0 150 N
+P 2 0 1 0 0 350 250 350 N
+P 3 0 1 0 0 700 0 0 350 0 N
+P 3 0 1 0 350 700 -100 700 -350 0 N
+X ABOVE ~ 100 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AE_TINY_TURNED
+#
+DEF AE_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AE_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 300 50 200 0 150 0 50 50 0 150 N
+P 19 0 1 0 -300 500 -150 500 -50 450 0 300 0 150 -50 50 -150 0 -200 0 -300 50 -350 150 -350 200 200 200 300 250 350 350 300 450 200 500 150 500 50 450 0 300 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALPHA_SMALL
+#
+DEF ALPHA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALPHA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 350 700 200 200 150 100 100 50 0 0 -100 0 -200 50 -250 100 -300 250 -300 450 -250 600 -200 650 -100 700 0 700 100 650 150 600 200 500 250 150 300 50 400 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALPHA_TINY
+#
+DEF ALPHA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALPHA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 250 500 150 150 100 50 0 0 -100 0 -200 50 -250 150 -250 350 -200 450 -100 500 0 500 100 450 200 50 250 0 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1100 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AMPERSAND
+#
+DEF AMPERSAND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AMPERSAND" 0 -350 60 H V C CNN
+DRAW
+P 29 0 1 0 450 0 400 0 300 50 150 200 -100 500 -200 650 -250 800 -250 900 -200 1000 -100 1050 -50 1050 50 1000 100 900 100 850 50 750 0 700 -300 500 -350 450 -400 350 -400 200 -350 100 -300 50 -200 0 -50 0 50 50 100 100 250 300 300 450 300 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_BRACKET
+#
+DEF ANGLE_BRACKET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_BRACKET" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 -400 -150 400 150 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# APOSTROPHE
+#
+DEF APOSTROPHE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "APOSTROPHE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 1050 -50 850 N
+X P ~ -250 0 300 U 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# APOSTROPHE_TURNED_LOW
+#
+DEF APOSTROPHE_TURNED_LOW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "APOSTROPHE_TURNED_LOW" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 0 -50 -200 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AT
+#
+DEF AT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AT" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 200 500 150 550 50 600 -50 600 -150 550 -200 500 -250 400 -250 300 -200 200 -150 150 -50 100 50 100 150 150 200 200 N
+P 20 0 1 0 200 600 200 200 250 150 300 150 400 200 450 300 450 550 350 700 200 800 0 850 -200 800 -350 700 -450 550 -500 350 -450 150 -350 0 -200 -100 0 -150 200 -100 350 0 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_CAP
+#
+DEF B_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_CAP" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 50 550 200 500 250 450 300 350 300 200 250 100 200 50 100 0 -300 0 -300 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 -300 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -300 300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_CAP_HOOK
+#
+DEF B_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 1050 -300 0 100 0 200 50 250 100 300 200 300 350 250 450 200 500 50 550 -300 550 N
+P 12 0 1 0 -600 800 -600 900 -550 1000 -450 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -300 300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALL
+#
+DEF B_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 1050 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -200 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALL_HOOK
+#
+DEF B_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 1050 -100 1050 -200 1000 -250 900 -250 0 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALL_TOPBAR
+#
+DEF B_SMALL_TOPBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALL_TOPBAR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 250 1050 -250 1050 -250 0 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_SMALLCAP
+#
+DEF B_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 50 350 200 300 250 200 250 150 200 50 100 0 -200 0 -200 700 50 700 150 650 200 550 200 500 150 400 50 350 -200 350 N
+X MIDBOTTOM ~ -200 200 100 R 50 50 1 1 I
+X MIDDLE ~ -200 350 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# B_TINY
+#
+DEF B_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "B_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 -150 0 N
+P 10 0 1 0 -150 50 -50 0 50 0 150 50 200 150 200 350 150 450 50 500 -50 500 -150 450 N
+X ABOVE ~ -150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -150 650 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BACKSLASH
+#
+DEF BACKSLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BACKSLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 1150 450 -200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETA_SMALL
+#
+DEF BETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 50 600 150 550 200 500 250 400 250 200 200 100 150 50 50 0 -100 0 -200 50 -250 100 N
+P 13 0 1 0 -350 -350 -300 -300 -250 -200 -250 900 -200 1000 -100 1050 50 1050 150 1000 200 900 200 750 150 650 50 600 -50 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETA_SMALL_CURLED
+#
+DEF BETA_SMALL_CURLED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETA_SMALL_CURLED" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 50 600 150 550 200 500 250 400 250 200 200 100 150 50 50 0 -100 0 -200 50 -250 150 -250 900 -200 1000 -100 1050 50 1050 150 1000 200 900 200 750 150 650 50 600 -50 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETA_TINY
+#
+DEF BETA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 400 0 400 N
+P 17 0 1 0 -200 -250 -150 -150 -150 550 -100 650 0 700 50 700 150 650 200 550 150 450 50 400 150 350 200 250 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BIDENTAL_PERCUSSIVE
+#
+DEF BIDENTAL_PERCUSSIVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BIDENTAL_PERCUSSIVE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 300 150 300 400 -300 400 -300 150 N
+P 4 0 1 0 300 800 300 1050 -300 1050 -300 800 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE
+#
+DEF BRACE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 -400 150 -400 50 -350 0 -250 0 250 -50 350 -150 400 -50 450 0 550 0 1050 50 1150 150 1200 200 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET
+#
+DEF BRACKET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 200 -350 -50 -350 -50 1150 200 1150 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_QUILL
+#
+DEF BRACKET_QUILL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_QUILL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 400 200 400 N
+P 4 0 1 0 200 -350 -50 -350 -50 1150 200 1150 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE
+#
+DEF BREVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 1100 -150 1000 -50 950 50 950 150 1000 200 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_HOOK
+#
+DEF BREVE_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 1100 -150 1000 -50 950 50 950 150 1000 200 1100 N
+P 6 0 1 0 -100 1100 0 1200 50 1300 0 1400 -100 1450 -200 1450 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_INV
+#
+DEF BREVE_INV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_INV" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 950 -150 1050 -50 1100 50 1100 150 1050 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BUKI_CAP
+#
+DEF BUKI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BUKI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 1050 -300 1050 -300 0 0 0 150 50 250 150 300 250 300 400 250 500 150 600 0 650 -300 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BUKI_LARGE
+#
+DEF BUKI_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BUKI_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 300 1100 200 1050 -150 1050 -250 1000 -300 950 -350 850 -350 200 -300 100 -250 50 -150 0 100 0 200 50 250 100 300 200 300 550 250 650 200 700 100 750 -200 750 -300 700 -350 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BUKI_SMALL
+#
+DEF BUKI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BUKI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 250 1100 200 1050 100 1000 -100 1000 -200 950 -250 900 -300 800 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 500 200 600 150 650 50 700 -150 700 -250 650 -300 600 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BULLET_LEFT
+#
+DEF BULLET_LEFT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BULLET_LEFT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 500 -200 300 N
+P 2 0 1 0 250 550 250 250 N
+P 5 0 1 0 -100 250 -100 550 -150 500 -150 300 -100 250 N
+P 8 0 1 0 -50 550 -100 550 -200 500 -250 400 -200 300 -100 250 -50 250 -50 550 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_CAP
+#
+DEF C_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_CAP" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 250 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 550 100 D 50 50 1 1 I
+X HOOK ~ -250 950 100 R 50 50 1 1 I
+X SLASH1 ~ -250 550 100 D 50 50 1 1 I
+X SLASH2 ~ 100 550 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_CAP_STRETCHED
+#
+DEF C_CAP_STRETCHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_CAP_STRETCHED" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 950 200 1000 50 1050 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 100 -350 -100 -300 -200 -200 -300 -50 -350 50 -350 200 -300 250 -250 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL
+#
+DEF C_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 50 100 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X TOP2 ~ 100 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL_CURL
+#
+DEF C_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 150 150 250 50 300 -50 250 -250 -150 N
+X TOP2 ~ 100 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_SMALL_SIDE
+#
+DEF C_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -300 600 -350 500 -350 300 -300 200 -250 150 -150 100 150 100 250 150 300 200 350 300 350 500 300 600 N
+X ABOVE ~ -600 400 100 R 50 50 1 1 I
+X BELOW ~ 600 400 100 R 50 50 1 1 I
+X BOTTOM ~ 350 400 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X TOP2 ~ -350 600 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# C_TINY_TURNED
+#
+DEF C_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "C_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 -250 100 R 50 50 1 1 I
+X BELOW ~ 0 750 100 R 50 50 1 1 I
+X BOTTOM ~ 0 500 100 R 50 50 1 1 I
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X TOP2 ~ -150 0 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CARON
+#
+DEF CARON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CARON" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 1100 0 950 200 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CEDILLA
+#
+DEF CEDILLA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CEDILLA" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 -50 100 -100 150 -200 100 -300 0 -350 -150 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHE_LARGE
+#
+DEF CHE_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHE_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 300 900 350 800 400 600 -400 500 -550 500 -650 550 -700 600 -750 700 -750 800 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHE_SMALL
+#
+DEF CHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -250 350 -350 350 -450 400 -500 500 -500 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHERV_CAP
+#
+DEF CHERV_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHERV_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 1050 250 0 N
+P 6 0 1 0 -300 1050 -300 650 -250 550 -200 500 -100 450 250 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 450 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHERV_SMALL
+#
+DEF CHERV_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHERV_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 5 0 1 0 -200 700 -200 450 -150 350 -50 300 200 300 N
+X BOTTOM ~ 200 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHI_SMALL
+#
+DEF CHI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 -300 -350 N
+P 6 0 1 0 -300 700 -200 650 -150 550 100 -200 150 -300 250 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CHI_TINY
+#
+DEF CHI_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CHI_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 500 -200 -250 N
+P 4 0 1 0 -200 500 -100 450 100 -200 200 -250 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX
+#
+DEF CIRCUMFLEX U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 950 0 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX_ACUTE
+#
+DEF CIRCUMFLEX_ACUTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX_ACUTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 1100 300 1250 N
+P 3 0 1 0 -200 950 0 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX_GRAVE
+#
+DEF CIRCUMFLEX_GRAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX_GRAVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 1100 -300 1250 N
+P 3 0 1 0 -200 950 0 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX_HOOK
+#
+DEF CIRCUMFLEX_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 950 0 1100 200 950 N
+P 6 0 1 0 300 950 400 1050 450 1150 400 1250 300 1300 200 1300 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COLON
+#
+DEF COLON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COLON" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+P 6 0 1 0 0 650 50 600 0 550 -50 600 0 650 0 550 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMBINING
+#
+DEF COMBINING U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMBINING" 0 -350 60 H V C CNN
+DRAW
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X P ~ 550 0 300 U 50 50 1 1 I
+X S ~ 550 -100 300 D 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMMA
+#
+DEF COMMA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMMA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 50 50 50 0 0 -100 -50 -150 N
+X X ~ 0 50 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMMA_DBL
+#
+DEF COMMA_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMMA_DBL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -150 50 -150 0 -200 -100 -250 -150 N
+P 4 0 1 0 250 50 250 0 200 -100 150 -150 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_CAP
+#
+DEF D_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_CAP" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -300 0 -300 1050 -50 1050 100 1000 200 900 250 800 300 600 300 450 250 250 200 150 100 50 -50 0 -300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X MIDDLE ~ -250 550 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_CAP_HOOK
+#
+DEF D_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -600 800 -600 900 -550 1000 -450 1050 -50 1050 100 1000 200 900 250 800 300 600 300 450 250 250 200 150 100 50 -50 0 -300 0 -300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ -250 550 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALL
+#
+DEF D_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 0 250 1050 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDTOP ~ 200 950 100 R 50 50 1 1 I
+X TOP2 ~ 250 1050 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALL_CURL
+#
+DEF D_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 250 1050 250 150 300 50 400 0 500 0 600 50 650 150 600 250 500 300 400 250 200 -150 N
+P 13 0 1 0 250 650 150 700 -50 700 -150 650 -200 600 -250 500 -250 200 -200 100 -150 50 -50 0 100 0 200 50 250 150 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALL_HOOK
+#
+DEF D_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 500 1050 400 1050 300 1000 250 900 250 0 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_SMALLCAP
+#
+DEF D_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 50 700 -150 700 -150 0 50 0 150 50 200 100 250 250 250 450 200 600 150 650 50 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ -150 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# D_TINY
+#
+DEF D_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "D_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 700 150 0 N
+P 10 0 1 0 150 450 50 500 -50 500 -150 450 -200 350 -200 150 -150 50 -50 0 50 0 150 50 N
+X ABOVE ~ -150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ 150 650 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_EM
+#
+DEF DASH_EM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_EM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 350 450 350 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_EN
+#
+DEF DASH_EN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_EN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 350 -200 350 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_FIGURE
+#
+DEF DASH_FIGURE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_FIGURE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 450 400 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASIA
+#
+DEF DASIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASIA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 1100 -50 1000 0 950 50 950 N
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X P ~ -200 0 300 U 50 50 1 1 I
+X S ~ 200 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASIA_OXIA
+#
+DEF DASIA_OXIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASIA_OXIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1100 150 950 N
+P 4 0 1 0 -250 1100 -250 1000 -200 950 -150 950 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASIA_VARIA
+#
+DEF DASIA_VARIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASIA_VARIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1100 250 950 N
+P 4 0 1 0 -250 1100 -250 1000 -200 950 -150 950 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DB_SMALL
+#
+DEF DB_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DB_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+P 12 0 1 0 0 650 100 700 300 700 400 650 450 600 500 500 500 200 450 100 400 50 300 0 100 0 0 50 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEI_CAP
+#
+DEF DEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 -350 N
+P 4 0 1 0 -350 500 -350 700 350 700 350 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEI_SMALL
+#
+DEF DEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 2 0 1 0 0 1050 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_CAP
+#
+DEF DELTA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -350 0 0 1050 350 0 -350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_SMALL
+#
+DEF DELTA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 50 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 500 200 600 150 650 50 700 -100 750 -200 800 -250 900 -200 1000 -100 1050 100 1050 200 1000 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_TINY
+#
+DEF DELTA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 50 500 -50 500 -150 450 -200 350 -200 150 -150 50 -50 0 50 0 150 50 200 150 200 350 150 450 50 500 -100 550 -150 600 -150 650 -100 700 150 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DESCENDER
+#
+DEF DESCENDER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DESCENDER" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 0 100 0 100 -250 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEZH_SMALL
+#
+DEF DEZH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEZH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 0 N
+P 12 0 1 0 0 650 -100 700 -250 700 -350 650 -400 600 -450 500 -450 200 -400 100 -350 50 -250 0 -100 0 0 50 N
+P 13 0 1 0 0 700 500 700 150 250 300 250 400 200 450 150 500 50 500 -150 450 -250 400 -300 300 -350 150 -350 50 -300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAERESIS
+#
+DEF DIAERESIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAERESIS" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -200 1050 -150 1000 -200 950 -250 1000 -200 1050 -200 950 N
+P 6 0 1 0 200 1050 250 1000 200 950 150 1000 200 1050 200 950 N
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAERESIS_SIDE
+#
+DEF DIAERESIS_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAERESIS_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 200 0 150 -50 100 -100 150 -50 200 -50 100 N
+P 6 0 1 0 -50 600 0 550 -50 500 -100 550 -50 600 -50 500 N
+X HIGH ~ -350 350 100 R 50 50 1 1 I
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAERESIS_TILDE
+#
+DEF DIAERESIS_TILDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAERESIS_TILDE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -250 1200 -200 1250 -100 1300 100 1200 200 1250 250 1300 N
+P 6 0 1 0 -200 1050 -150 1000 -200 950 -250 1000 -200 1050 -200 950 N
+P 6 0 1 0 200 1050 250 1000 200 950 150 1000 200 1050 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGAMMA_SMALL
+#
+DEF DIGAMMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGAMMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 550 0 550 N
+P 7 0 1 0 250 1050 150 1050 50 1000 0 900 0 -200 -50 -300 -150 -350 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_0
+#
+DEF DIGIT_0 U 0 40 Y Y 1 F N
+F0 "U" 0 -150 60 H V C CNN
+F1 "DIGIT_0" 0 -250 60 H V C CNN
+DRAW
+P 21 0 1 0 -50 1050 50 1050 150 1000 200 950 250 850 300 650 300 400 250 200 200 100 150 50 50 0 -50 0 -150 50 -200 100 -250 200 -300 400 -300 650 -250 850 -200 950 -150 1000 -50 1050 N
+X CENTER ~ 0 550 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_0_SMALL
+#
+DEF DIGIT_0_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_0_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -50 700 50 700 150 650 200 500 200 200 150 50 50 0 -50 0 -150 50 -200 200 -200 500 -150 650 -50 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_1
+#
+DEF DIGIT_1 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_1" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -300 0 N
+P 5 0 1 0 0 0 0 1050 -100 900 -200 800 -300 750 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_1_SMALL
+#
+DEF DIGIT_1_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_1_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 0 -200 0 N
+P 4 0 1 0 -200 550 -100 600 0 700 0 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_2
+#
+DEF DIGIT_2 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_2" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 950 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 600 -350 0 300 0 N
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_2_SMALL
+#
+DEF DIGIT_2_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_2_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -200 650 -100 700 50 700 150 650 200 550 200 450 150 350 -200 0 200 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_3
+#
+DEF DIGIT_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_3" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 -350 1050 300 1050 -50 650 100 650 200 600 250 550 300 450 300 200 250 100 200 50 100 0 -200 0 -300 50 -350 100 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_3_SMALL
+#
+DEF DIGIT_3_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_3_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -200 700 200 700 0 450 50 450 150 400 200 300 200 150 150 50 50 0 -100 0 -200 50 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_4
+#
+DEF DIGIT_4 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_4" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 3 0 1 0 -50 1100 -300 350 350 350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_4_SMALL
+#
+DEF DIGIT_4_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_4_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 400 150 0 N
+P 3 0 1 0 -50 700 -200 200 250 200 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_5
+#
+DEF DIGIT_5 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_5" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 1050 -250 1050 -300 550 -250 600 -150 650 100 650 200 600 250 550 300 450 300 200 250 100 200 50 100 0 -150 0 -250 50 -300 100 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_5_SMALL
+#
+DEF DIGIT_5_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_5_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 700 -150 700 -200 400 -100 450 50 450 150 400 200 300 200 150 150 50 50 0 -100 0 -200 50 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_6
+#
+DEF DIGIT_6 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_6" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 200 1050 0 1050 -100 1000 -150 950 -250 800 -300 600 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 450 250 550 200 600 100 650 -100 650 -200 600 -250 550 -300 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_6_SMALL
+#
+DEF DIGIT_6_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_6_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -200 300 -150 400 -50 450 50 450 150 400 200 300 200 150 150 50 50 0 -50 0 -150 50 -200 150 -200 400 -150 550 -100 650 0 700 150 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_7
+#
+DEF DIGIT_7 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_7" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 1050 350 1050 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_7_SMALL
+#
+DEF DIGIT_7_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_7_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 250 700 -100 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_8
+#
+DEF DIGIT_8 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_8" 0 -350 60 H V C CNN
+DRAW
+P 32 0 1 0 -100 600 -200 650 -250 700 -300 800 -300 850 -250 950 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 800 250 700 200 650 100 600 -100 600 -200 550 -250 500 -300 400 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 400 250 500 200 550 100 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_8_SMALL
+#
+DEF DIGIT_8_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_8_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -50 400 -150 450 -200 550 -150 650 -50 700 50 700 150 650 200 550 150 450 50 400 -50 400 -150 350 -200 250 -200 150 -150 50 -50 0 50 0 150 50 200 150 200 250 150 350 50 400 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_9
+#
+DEF DIGIT_9 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_9" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -200 0 0 0 100 50 150 100 250 250 300 450 300 850 250 950 200 1000 100 1050 -100 1050 -200 1000 -250 950 -300 850 -300 600 -250 500 -200 450 -100 400 100 400 200 450 250 500 300 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_9_SMALL
+#
+DEF DIGIT_9_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_9_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 400 150 300 50 250 -50 250 -150 300 -200 400 -200 550 -150 650 -50 700 50 700 150 650 200 550 200 300 150 150 100 50 0 0 -150 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DJE_KOMI_CAP
+#
+DEF DJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 150 50 50 150 0 300 0 400 50 450 150 450 700 N
+P 13 0 1 0 0 1050 0 150 -50 50 -150 0 -300 0 -450 50 -550 150 -600 250 -600 400 -550 500 -450 600 -300 650 0 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DJE_KOMI_SMALL
+#
+DEF DJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 150 50 50 150 0 200 0 300 50 350 150 350 500 N
+P 11 0 1 0 0 700 0 150 -50 50 -150 0 -250 0 -350 50 -400 150 -400 300 -350 400 -250 450 0 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DJE_SMALL
+#
+DEF DJE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DJE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 800 300 800 N
+P 2 0 1 0 0 1050 0 0 N
+P 10 0 1 0 0 400 50 450 150 500 250 500 350 450 400 350 400 0 350 -150 250 -300 200 -350 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOBRO_CAP
+#
+DEF DOBRO_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOBRO_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 450 -250 450 0 -450 0 -450 -250 N
+P 7 0 1 0 250 0 250 1050 0 1050 -100 1000 -150 950 -200 850 -300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOBRO_SMALL
+#
+DEF DOBRO_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOBRO_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 250 600 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 850 200 950 150 1000 50 1050 -150 1050 -250 1000 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZ_SMALL
+#
+DEF DZ_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZ_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 4 0 1 0 0 700 550 700 0 0 550 0 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+X ABOVED ~ -50 1300 100 R 50 50 1 1 I
+X ABOVEZ ~ 300 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZ_SMALL_CURL
+#
+DEF DZ_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZ_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 10 0 1 0 0 700 550 700 0 0 400 0 500 50 550 150 500 250 400 300 300 250 100 -150 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+X ABOVED ~ -50 1300 100 R 50 50 1 1 I
+X ABOVEZ ~ 300 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZHE_CAP
+#
+DEF DZHE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZHE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -250 N
+P 4 0 1 0 -300 1050 -300 0 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZHE_SMALL
+#
+DEF DZHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -250 N
+P 4 0 1 0 -250 700 -250 0 250 0 250 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZJE_KOMI_CAP
+#
+DEF DZJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 16 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 650 200 600 100 550 200 500 250 450 300 350 300 0 400 0 400 -250 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DZJE_KOMI_SMALL
+#
+DEF DZJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DZJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 13 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 0 350 0 350 -250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_CAP
+#
+DEF E_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 550 100 550 N
+P 4 0 1 0 250 0 -250 0 -250 1050 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X P ~ -500 0 300 U 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+X TONOS ~ -600 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_LARGE
+#
+DEF E_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 300 900 350 800 400 600 -400 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -100 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_SMALL
+#
+DEF E_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -250 350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_SMALL_HOOK
+#
+DEF E_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -500 300 -500 400 -550 500 -650 550 -700 550 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_SMALLCAP
+#
+DEF E_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 350 100 350 N
+P 4 0 1 0 200 700 -150 700 -150 0 200 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_TINY
+#
+DEF E_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_TINY" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 50 100 0 0 0 -100 50 -150 150 -150 350 -100 450 0 500 50 500 150 450 200 350 200 300 -150 250 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# E_TINY_TURNED
+#
+DEF E_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "E_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 0 0 -100 50 -150 150 -150 200 200 250 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ECU
+#
+DEF ECU U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ECU" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 300 700 -100 700 -100 0 300 0 N
+P 11 0 1 0 100 1000 0 1050 -200 1050 -300 1000 -350 950 -400 850 -400 550 -350 450 -300 400 -200 350 150 350 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENG_CAP
+#
+DEF ENG_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENG_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 12 0 1 0 -300 900 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 -150 250 -250 200 -300 100 -350 -50 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENG_SMALL
+#
+DEF ENG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 10 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 -200 200 -300 100 -350 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENG_TINY
+#
+DEF ENG_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENG_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 500 -150 0 N
+P 9 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 -100 150 -200 50 -250 0 -250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_LARGE
+#
+DEF EPSILON_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 19 0 1 0 250 1000 150 1050 -100 1050 -200 1000 -250 950 -300 850 -300 750 -250 650 -200 600 -100 550 -250 500 -300 450 -350 350 -350 200 -300 100 -250 50 -150 0 150 0 250 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_SMALL
+#
+DEF EPSILON_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -100 350 -200 300 -250 200 -250 150 -200 50 -100 0 100 0 200 50 N
+P 9 0 1 0 0 350 -100 350 -200 400 -250 500 -250 550 -200 650 -100 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_SMALL_CLOSED
+#
+DEF EPSILON_SMALL_CLOSED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_SMALL_CLOSED" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 -100 350 -200 300 -250 200 -250 150 -200 50 -100 0 100 0 200 50 250 100 300 250 300 450 250 600 200 650 100 700 -100 700 -200 650 -250 550 -250 500 -200 400 -100 350 0 350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_SMALL_HOOK
+#
+DEF EPSILON_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 350 -100 350 -200 400 -250 500 -250 550 -200 650 -100 700 100 700 200 650 N
+P 13 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 200 -200 300 -100 350 -450 300 -450 400 -500 500 -600 550 -650 550 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_TINY
+#
+DEF EPSILON_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 250 0 250 N
+P 11 0 1 0 150 450 100 500 -100 500 -150 450 -150 300 -100 250 -150 200 -150 50 -100 0 100 0 150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EPSILON_TINY_TURNED
+#
+DEF EPSILON_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EPSILON_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 250 100 250 N
+P 11 0 1 0 -150 450 -100 500 100 500 150 450 150 300 100 250 150 200 150 50 100 0 -100 0 -150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SMALL
+#
+DEF ESH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 1050 150 1050 50 1000 0 900 0 -200 -50 -300 -150 -350 -250 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SMALL_CURL
+#
+DEF ESH_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 1050 150 1050 50 1000 0 900 0 -200 -50 -300 -150 -350 -250 -300 -300 -200 -250 -100 -150 -50 200 -50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SMALL_LOOP
+#
+DEF ESH_SMALL_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SMALL_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -250 -350 -150 -350 -50 -300 0 -200 0 900 50 1000 150 1050 250 1000 300 900 250 800 150 750 50 800 0 900 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESH_SQUAT_SMALL
+#
+DEF ESH_SQUAT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESH_SQUAT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 1050 150 1050 50 1000 0 900 0 150 -50 50 -150 0 -250 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESZETT
+#
+DEF ESZETT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESZETT" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 -350 0 -350 850 -300 950 -250 1000 -150 1050 0 1050 100 1000 150 950 200 850 200 700 50 700 -50 650 -100 550 -100 500 -50 400 50 350 200 350 300 300 350 200 350 150 300 50 200 0 0 0 -100 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESZETT_CAP
+#
+DEF ESZETT_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESZETT_CAP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -400 0 -400 750 -350 900 -250 1000 -100 1050 400 1050 50 650 200 650 300 600 350 550 400 450 400 200 350 100 300 50 200 0 0 0 -100 50 -150 100 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ET_TIRONIAN
+#
+DEF ET_TIRONIAN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ET_TIRONIAN" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 700 200 700 -100 -350 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ETA_SMALL
+#
+DEF ETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 7 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ -200 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ETH_SMALL
+#
+DEF ETH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ETH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 1200 -50 900 N
+P 17 0 1 0 250 650 150 700 -50 700 -150 650 -200 600 -250 500 -250 150 -200 50 -100 0 100 0 200 50 250 150 250 750 200 900 100 1000 0 1050 -200 1100 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EURO
+#
+DEF EURO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EURO" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 400 -50 400 N
+P 2 0 1 0 -500 650 100 650 N
+P 16 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 250 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP ~ 0 1050 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EXCLAM
+#
+DEF EXCLAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EXCLAM" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+P 6 0 1 0 0 400 -50 1000 0 1050 50 1000 0 400 0 1050 N
+X P ~ -250 0 300 U 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL
+#
+DEF EZH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -250 700 200 700 -150 250 0 250 100 200 150 150 200 50 200 -150 150 -250 100 -300 0 -350 -150 -350 -250 -300 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL_CURL
+#
+DEF EZH_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -250 700 200 700 -150 250 0 250 100 200 150 150 200 50 200 -150 150 -250 100 -300 0 -350 -100 -350 -200 -300 -250 -200 -200 -100 -100 -50 0 -100 150 -400 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL_LOOP
+#
+DEF EZH_SMALL_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -250 700 200 700 -150 300 0 300 100 250 150 200 200 100 200 -150 150 -250 100 -300 0 -350 -100 -350 -200 -300 -250 -200 -250 -150 -200 -50 -100 0 200 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EZH_SMALL_TAIL
+#
+DEF EZH_SMALL_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EZH_SMALL_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 700 200 700 -150 350 50 350 150 300 200 200 200 150 150 50 50 0 -50 0 -150 -50 -200 -150 -200 -200 -150 -300 -50 -350 200 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# F_CAP
+#
+DEF F_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "F_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 550 -250 550 N
+P 3 0 1 0 -250 0 -250 1050 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ -250 0 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -200 250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# F_SMALL
+#
+DEF F_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "F_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 5 0 1 0 0 0 0 900 50 1000 150 1050 250 1050 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FEI_CAP
+#
+DEF FEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1050 300 -350 N
+P 11 0 1 0 -100 1050 -200 1000 -300 900 -350 700 -350 350 -300 150 -200 50 -100 0 100 0 200 50 300 150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FEI_SMALL
+#
+DEF FEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 -350 N
+P 11 0 1 0 -50 700 -150 650 -200 600 -250 500 -250 200 -200 100 -150 50 -50 0 100 0 200 50 250 100 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FENG_SMALL
+#
+DEF FENG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FENG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -500 700 -100 700 -100 0 N
+P 5 0 1 0 -350 0 -350 900 -300 1000 -200 1050 -100 1050 N
+P 10 0 1 0 -100 600 -50 650 50 700 200 700 300 650 350 550 350 -200 300 -300 200 -350 100 -350 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X MIDDLE ~ -350 350 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FITA_CAP
+#
+DEF FITA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FITA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 550 350 550 N
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FITA_SMALL
+#
+DEF FITA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FITA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 350 250 350 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FLOOR
+#
+DEF FLOOR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FLOOR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -50 1150 -50 -350 200 -350 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FRAC_LINE
+#
+DEF FRAC_LINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FRAC_LINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 500 350 500 N
+X DENOM ~ 0 -300 100 R 50 50 1 1 I
+X NUM ~ 0 650 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FULL_STOP
+#
+DEF FULL_STOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FULL_STOP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_CAP
+#
+DEF G_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_CAP" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 200 1000 100 1050 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 450 -350 250 -300 150 -200 50 -50 0 50 0 200 50 250 100 250 450 50 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X HOOK ~ -250 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 250 250 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_SMALL
+#
+DEF G_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 250 700 250 -150 200 -250 150 -300 50 -350 -100 -350 -200 -300 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 250 -150 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_SMALL_SCRIPT
+#
+DEF G_SMALL_SCRIPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_SMALL_SCRIPT" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 100 200 50 100 0 -100 0 -200 50 -250 150 -250 500 -200 600 -150 650 -50 700 250 700 250 -150 200 -250 150 -300 50 -350 -250 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 250 -150 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_SMALLCAP
+#
+DEF G_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 150 650 50 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 100 0 200 50 200 300 50 300 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X TOP2 ~ 150 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# G_TINY
+#
+DEF G_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "G_TINY" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 150 500 150 -100 100 -200 0 -250 -150 -250 N
+P 10 0 1 0 150 450 50 500 -50 500 -150 450 -200 350 -200 150 -150 50 -50 0 50 0 150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 150 -100 100 R 50 50 1 1 I
+X TOP2 ~ 150 500 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_CAP
+#
+DEF GAMMA_AFR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -350 1050 150 0 150 -200 100 -300 0 -350 -100 -300 -150 -200 -150 0 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_SMALL
+#
+DEF GAMMA_AFR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -250 700 150 0 150 -200 100 -300 0 -350 -100 -300 -150 -200 -150 0 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_SMALLCAP
+#
+DEF GAMMA_AFR_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -250 700 100 250 150 150 100 50 0 0 -100 50 -150 150 -100 250 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_AFR_TINYCAP_TURNED
+#
+DEF GAMMA_AFR_TINYCAP_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_AFR_TINYCAP_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 200 0 -100 350 -100 450 -50 500 50 500 100 450 100 350 -200 0 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_CAP
+#
+DEF GAMMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 0 -250 1050 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ -250 0 100 R 50 50 1 1 I
+X MIDDLE ~ -200 500 100 R 50 50 1 1 I
+X MIDHOOK ~ -250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_CAP_HOOK
+#
+DEF GAMMA_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 1050 -250 1050 -250 0 -50 0 -50 -200 -100 -300 -200 -350 -300 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ -200 500 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_CAP_UPTURN
+#
+DEF GAMMA_CAP_UPTURN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_CAP_UPTURN" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 0 -250 1050 300 1050 300 1300 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ -250 0 100 R 50 50 1 1 I
+X MIDDLE ~ -200 500 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALL
+#
+DEF GAMMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 100 0 -350 N
+P 5 0 1 0 -300 700 -250 700 -200 650 0 100 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALLCAP
+#
+DEF GAMMA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -150 0 -150 700 250 700 N
+X BOTTOM ~ -150 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 350 100 R 50 50 1 1 I
+X MIDHOOK ~ -150 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALLCAP_HOOK
+#
+DEF GAMMA_SMALLCAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALLCAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 250 700 -150 700 -150 0 50 0 50 -200 0 -300 -100 -350 -200 -350 N
+X MIDDLE ~ -100 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_SMALLCAP_UPTURN
+#
+DEF GAMMA_SMALLCAP_UPTURN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_SMALLCAP_UPTURN" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -150 0 -150 700 250 700 250 950 N
+X BOTTOM ~ -150 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GAMMA_TINY
+#
+DEF GAMMA_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GAMMA_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 50 0 -250 N
+P 4 0 1 0 -250 500 -150 450 0 50 200 500 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GANGIA_CAP
+#
+DEF GANGIA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GANGIA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 450 0 N
+P 5 0 1 0 -450 1050 -400 1050 -300 1000 300 50 400 0 N
+P 5 0 1 0 450 1050 400 1050 300 1000 -300 50 -400 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GANGIA_SMALL
+#
+DEF GANGIA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GANGIA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -350 700 -250 650 200 50 300 0 -350 0 -250 50 200 650 300 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GRAVE
+#
+DEF GRAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GRAVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 1100 50 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GRAVE_DBL
+#
+DEF GRAVE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GRAVE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 950 -300 1100 N
+P 2 0 1 0 200 950 50 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GUILLEMET
+#
+DEF GUILLEMET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GUILLEMET" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 700 -150 400 150 100 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GUILLEMET_DBL
+#
+DEF GUILLEMET_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GUILLEMET_DBL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 700 -300 400 0 100 N
+P 3 0 1 0 300 200 100 400 300 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_CAP
+#
+DEF H_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 2 0 1 0 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 300 700 100 R 50 50 1 1 I
+X P ~ -550 0 300 U 50 50 1 1 I
+X PERIS ~ -650 1300 100 R 50 50 1 1 I
+X S ~ 550 0 300 U 50 50 1 1 I
+X TONOS ~ -650 950 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_CAP_STROKE
+#
+DEF H_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 850 450 850 N
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 2 0 1 0 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_LARGE
+#
+DEF H_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 1050 -300 0 N
+P 6 0 1 0 -300 550 0 550 150 500 250 400 300 250 300 0 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALL
+#
+DEF H_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 1050 N
+P 7 0 1 0 200 0 200 550 150 650 50 700 -100 700 -200 650 -250 600 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X STROKE ~ -200 950 100 R 50 50 1 1 I
+X TOP ~ -250 1050 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALL_HOOK
+#
+DEF H_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 1050 -100 1050 -200 1000 -250 900 -250 0 N
+P 7 0 1 0 200 0 200 550 150 650 50 700 -100 700 -200 650 -250 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALL_RETROHOOK
+#
+DEF H_SMALL_RETROHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALL_RETROHOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -500 1050 -400 1050 -300 1000 -250 900 -250 0 N
+P 7 0 1 0 200 0 200 550 150 650 50 700 -100 700 -200 650 -250 600 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# H_SMALLCAP
+#
+DEF H_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "H_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 350 200 350 N
+P 2 0 1 0 -250 700 -250 0 N
+P 2 0 1 0 200 700 200 0 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 200 350 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HA_ABKHAZ_CAP
+#
+DEF HA_ABKHAZ_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HA_ABKHAZ_CAP" 0 -350 60 H V C CNN
+DRAW
+P 27 0 1 0 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 450 -350 250 -300 150 -200 50 -50 0 50 0 200 50 300 150 350 250 400 450 400 700 350 850 250 900 200 900 100 850 50 700 50 450 100 250 150 150 250 50 350 0 450 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HA_ABKHAZ_SMALL
+#
+DEF HA_ABKHAZ_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HA_ABKHAZ_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 23 0 1 0 -50 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 450 250 550 150 600 50 550 0 450 0 200 50 100 100 50 200 0 350 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARD_CAP
+#
+DEF HARD_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARD_CAP" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -500 1050 -250 1050 -250 0 50 0 200 50 300 150 350 250 350 400 300 500 200 600 50 650 -250 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARD_SMALL
+#
+DEF HARD_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARD_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -400 700 -200 700 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HETA_CAP
+#
+DEF HETA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HETA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1050 -250 0 N
+P 2 0 1 0 300 550 -250 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HETA_SMALL
+#
+DEF HETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 350 200 350 N
+P 2 0 1 0 -200 700 -200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HGAMMA_CAP
+#
+DEF HGAMMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HGAMMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 3 0 1 0 300 0 300 1050 850 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 950 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HGAMMA_SMALLCAP
+#
+DEF HGAMMA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HGAMMA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 350 200 350 N
+P 2 0 1 0 -250 700 -250 0 N
+P 3 0 1 0 200 0 200 700 600 700 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HOOK
+#
+DEF HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 -200 -50 -300 -150 -350 -250 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HORI_CAP
+#
+DEF HORI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HORI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 -350 950 -300 1000 -150 1050 100 1050 250 1000 300 950 350 850 350 750 300 600 200 500 -400 0 -200 -150 -50 -200 200 -200 350 -150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HORI_SMALL
+#
+DEF HORI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HORI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 450 200 350 100 250 -200 0 -100 -100 0 -150 150 -150 250 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HORN
+#
+DEF HORN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HORN" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 650 100 700 150 800 100 900 50 950 N
+X X ~ 0 650 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HUNDRED_THOUSANDS_CYR
+#
+DEF HUNDRED_THOUSANDS_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HUNDRED_THOUSANDS_CYR" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -1000 450 -950 550 -850 600 -750 550 -700 450 N
+P 5 0 1 0 -750 -150 -700 -50 -600 0 -500 -50 -450 -150 N
+P 5 0 1 0 -750 1050 -700 1150 -600 1200 -500 1150 -450 1050 N
+P 5 0 1 0 -150 -400 -100 -300 0 -250 100 -300 150 -400 N
+P 5 0 1 0 -150 1300 -100 1400 0 1450 100 1400 150 1300 N
+P 5 0 1 0 450 -150 500 -50 600 0 700 -50 750 -150 N
+P 5 0 1 0 450 1050 500 1150 600 1200 700 1150 750 1050 N
+P 5 0 1 0 700 450 750 550 850 600 950 550 1000 450 N
+X X ~ 0 500 100 L 50 50 1 1 I
+X ~ ~ -1200 0 300 U 50 50 1 1 I
+X ~ ~ 1200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HV_CAP
+#
+DEF HV_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HV_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -500 1050 N
+P 2 0 1 0 -500 550 100 550 N
+P 8 0 1 0 100 1050 100 150 150 50 250 0 400 0 500 50 550 150 550 700 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HV_SMALL
+#
+DEF HV_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HV_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 -450 1050 N
+P 16 0 1 0 -450 600 -400 650 -300 700 -150 700 -50 650 0 550 0 150 50 50 150 0 300 0 400 50 450 100 500 200 500 550 450 650 400 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X STROKE ~ -400 950 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HV_SMALLCAP
+#
+DEF HV_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HV_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 350 100 350 N
+P 2 0 1 0 -350 700 -350 0 N
+P 8 0 1 0 100 700 100 150 150 50 250 0 300 0 400 50 450 150 450 450 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HYPHEN
+#
+DEF HYPHEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HYPHEN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 350 150 350 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_CAP
+#
+DEF I_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X MIDDLE ~ 0 550 100 R 50 50 1 1 I
+X P ~ -250 0 300 U 50 50 1 1 I
+X PERIS ~ -350 1300 100 R 50 50 1 1 I
+X S ~ 250 0 300 U 50 50 1 1 I
+X TONOS ~ -350 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_SMALL
+#
+DEF I_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_SMALLCAP
+#
+DEF I_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 700 N
+P 2 0 1 0 150 0 -150 0 N
+P 2 0 1 0 150 700 -150 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_TINY
+#
+DEF I_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IE_CAP
+#
+DEF IE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 100 550 N
+P 16 0 1 0 250 100 200 50 50 0 -50 0 -200 50 -300 150 -350 250 -400 450 -400 600 -350 800 -300 900 -200 1000 -50 1050 50 1050 200 1000 250 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IE_SMALL
+#
+DEF IE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 350 50 350 N
+P 12 0 1 0 200 50 100 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 100 700 200 650 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTERROBANG
+#
+DEF INTERROBANG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTERROBANG" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 1050 -50 400 N
+P 6 0 1 0 -50 100 0 50 -50 0 -100 50 -50 100 -50 0 N
+P 6 0 1 0 -50 100 0 50 -50 0 -100 50 -50 100 -50 0 N
+P 12 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 900 250 800 200 700 150 650 50 600 0 550 -50 450 -50 400 N
+P 12 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 900 250 800 200 700 150 650 50 600 0 550 -50 450 -50 400 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IOTA_BELOW
+#
+DEF IOTA_BELOW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IOTA_BELOW" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 -250 0 -400 50 -450 100 -450 N
+X X ~ 0 -250 100 L 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IOTA_LARGE
+#
+DEF IOTA_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IOTA_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 1050 0 200 50 100 100 50 200 0 300 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IOTA_SMALL
+#
+DEF IOTA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IOTA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 700 0 150 50 50 150 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYE_CAP
+#
+DEF IYE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 1050 -450 0 N
+P 2 0 1 0 350 550 -450 550 N
+P 16 0 1 0 500 100 450 50 300 0 200 0 50 50 -50 150 -100 250 -150 450 -150 600 -100 800 -50 900 50 1000 200 1050 300 1050 450 1000 500 950 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYE_SMALL
+#
+DEF IYE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 -350 0 N
+P 2 0 1 0 250 350 -350 350 N
+P 12 0 1 0 400 50 300 0 100 0 0 50 -50 100 -100 200 -100 500 -50 600 0 650 100 700 300 700 400 650 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_BIG_CAP
+#
+DEF IYUS_BIG_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_BIG_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -600 1050 N
+P 2 0 1 0 -600 550 50 550 N
+P 5 0 1 0 200 0 200 550 -200 1050 600 1050 200 550 N
+P 10 0 1 0 -250 0 -250 250 -200 400 -100 500 50 550 350 550 500 500 600 400 650 250 650 0 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_BIG_SMALL
+#
+DEF IYUS_BIG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_BIG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 -450 700 N
+P 2 0 1 0 -450 350 50 350 N
+P 5 0 1 0 200 0 200 350 -100 700 500 700 200 350 N
+P 10 0 1 0 -150 0 -150 150 -100 250 -50 300 50 350 350 350 450 300 500 250 550 150 550 0 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_LITTLE_CAP
+#
+DEF IYUS_LITTLE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_LITTLE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -600 1050 N
+P 2 0 1 0 -600 400 500 400 N
+P 2 0 1 0 200 400 200 0 N
+P 3 0 1 0 -300 0 200 1050 700 0 N
+X ABOVE ~ 200 1300 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IYUS_LITTLE_SMALL
+#
+DEF IYUS_LITTLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IYUS_LITTLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 -400 700 N
+P 2 0 1 0 200 300 200 0 N
+P 2 0 1 0 400 300 -400 300 N
+P 3 0 1 0 -150 0 200 700 550 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IZHE_CAP
+#
+DEF IZHE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IZHE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 1050 -300 0 300 1050 300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IZHE_SMALL
+#
+DEF IZHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IZHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 700 -250 0 250 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_CAP
+#
+DEF J_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_CAP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 150 1050 150 300 100 150 0 50 -150 0 -250 0 N
+X ABOVE ~ 150 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X MIDDLE ~ 150 550 100 R 50 50 1 1 I
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_SMALL
+#
+DEF J_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 700 0 -200 -50 -300 -150 -350 -200 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_SMALL_CURL
+#
+DEF J_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 700 0 -200 -50 -300 -150 -350 -250 -300 -300 -200 -250 -100 -150 -50 200 -50 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# J_SMALLCAP
+#
+DEF J_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "J_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 100 700 100 200 50 100 0 50 -100 0 -150 0 N
+X ABOVE ~ 100 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X MIDDLE ~ 100 350 100 R 50 50 1 1 I
+X P ~ -300 0 300 U 50 50 1 1 I
+X S ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_CAP
+#
+DEF K_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 0 -150 600 N
+P 2 0 1 0 300 1050 -300 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDARM ~ 150 900 100 R 50 50 1 1 I
+X MIDDLE ~ -100 600 100 R 50 50 1 1 I
+X MIDTOP ~ -300 850 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_CAP_BASHKIR
+#
+DEF K_CAP_BASHKIR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_CAP_BASHKIR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -150 600 N
+P 2 0 1 0 300 1050 -300 450 N
+P 3 0 1 0 -550 1050 -300 1050 -300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 600 100 R 50 50 1 1 I
+X MIDTOP ~ -300 850 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_CAP_HOOK
+#
+DEF K_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 0 -150 600 N
+P 6 0 1 0 -300 450 250 1000 350 1050 450 1000 500 900 500 800 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 600 100 R 50 50 1 1 I
+X MIDTOP ~ -300 850 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_SMALL
+#
+DEF K_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 1050 N
+P 2 0 1 0 -100 400 200 0 N
+P 2 0 1 0 200 700 -200 300 N
+X ABOVE ~ -200 1150 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -200 850 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_SMALL_BASHKIR
+#
+DEF K_SMALL_BASHKIR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_SMALL_BASHKIR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 400 200 0 N
+P 2 0 1 0 200 700 -200 300 N
+P 3 0 1 0 -400 700 -200 700 -200 0 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_SMALLCAP
+#
+DEF K_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 2 0 1 0 -100 400 200 0 N
+P 2 0 1 0 200 700 -200 300 N
+X BOTTOM1 ~ -200 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDARM ~ 100 600 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X TOP1 ~ -200 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# K_TINY
+#
+DEF K_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "K_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 -150 0 N
+P 2 0 1 0 150 0 -50 300 N
+P 2 0 1 0 150 500 -150 200 N
+X ABOVE ~ -150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDTOP ~ -150 600 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KAI_CAP
+#
+DEF KAI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KAI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 1050 -300 450 N
+P 3 0 1 0 -150 600 300 0 -50 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KAI_SMALL
+#
+DEF KAI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KAI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -300 700 -200 650 -150 550 -150 150 -200 50 -250 0 -300 50 -300 150 -250 250 200 450 250 550 250 650 200 700 150 650 100 550 100 150 150 50 250 0 200 -150 150 -250 100 -300 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KAPPA_SMALL_SCRIPT
+#
+DEF KAPPA_SMALL_SCRIPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KAPPA_SMALL_SCRIPT" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -300 700 -200 650 -150 550 -150 150 -200 50 -250 0 -300 50 -300 150 -250 250 200 450 250 550 250 650 200 700 150 650 100 550 100 150 150 50 250 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KHEI_CAP
+#
+DEF KHEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KHEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 -350 0 N
+P 13 0 1 0 -350 500 -250 600 -100 650 100 650 200 600 300 500 350 350 350 200 300 50 250 -50 150 -150 0 -250 -200 -350 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KHEI_SMALL
+#
+DEF KHEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KHEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 250 750 250 700 200 550 100 450 0 400 -100 400 -200 450 -250 550 -250 600 -200 700 -100 750 0 750 100 700 200 550 250 400 250 200 200 100 150 50 50 0 -250 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_ARCHAIC_CAP
+#
+DEF KOPPA_ARCHAIC_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_ARCHAIC_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_ARCHAIC_SMALL
+#
+DEF KOPPA_ARCHAIC_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_ARCHAIC_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_CAP
+#
+DEF KOPPA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -250 1050 -150 1000 -100 900 -300 400 300 650 100 150 150 50 250 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_CYR_CAP
+#
+DEF KOPPA_CYR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_CYR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 1000 100 1050 -100 1050 -250 1000 -350 900 -400 800 -400 650 -350 550 -250 450 -100 400 100 400 100 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 100 150 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_CYR_SMALL
+#
+DEF KOPPA_CYR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_CYR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 400 -250 300 -200 250 -100 200 100 200 100 0 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KOPPA_SMALL
+#
+DEF KOPPA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KOPPA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 1050 -250 550 250 550 0 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KSI_CAP
+#
+DEF KSI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KSI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 550 50 550 N
+P 5 0 1 0 -200 1300 -50 1050 50 1250 100 1300 150 1300 N
+P 24 0 1 0 -300 1000 -200 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 200 500 250 450 300 350 300 200 250 100 200 50 100 0 -150 0 -250 -50 -300 -150 -300 -200 -250 -300 -150 -350 250 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KSI_SMALL
+#
+DEF KSI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KSI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 5 0 1 0 -150 950 0 700 100 900 150 950 200 950 N
+P 20 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 150 200 50 100 0 -50 0 -150 -50 -200 -150 -200 -200 -150 -300 -50 -350 200 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_CAP
+#
+DEF L_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 250 0 -250 0 -250 1050 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CARON ~ 100 800 100 R 50 50 1 1 I
+X DOT ~ 150 600 100 R 50 50 1 1 I
+X MIDDLE ~ -250 600 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL
+#
+DEF L_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X DOT ~ 350 600 100 R 50 50 1 1 I
+X MIDDLE ~ 0 600 100 L 50 50 1 1 I
+X P ~ -250 0 300 U 50 50 1 1 I
+X S ~ 300 0 300 U 50 50 1 1 I
+X SAPOS ~ 100 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_BELT
+#
+DEF L_SMALL_BELT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_BELT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+P 8 0 1 0 0 500 -50 600 -150 650 -250 600 -300 500 -250 400 -150 350 250 350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_CURL
+#
+DEF L_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 0 1050 0 150 50 50 150 0 250 0 350 50 400 150 350 250 250 300 150 250 -50 -150 N
+X MIDDLE ~ 0 600 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_MIDDOT
+#
+DEF L_SMALL_MIDDOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_MIDDOT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+P 6 0 1 0 350 600 400 550 350 500 300 550 350 600 350 500 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALL_RETROHOOK
+#
+DEF L_SMALL_RETROHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALL_RETROHOOK" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 1050 0 -200 50 -300 150 -350 250 -350 N
+X MIDDLE ~ 0 600 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# L_SMALLCAP
+#
+DEF L_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "L_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -150 700 -150 0 200 0 N
+X ABOVE ~ -100 950 100 R 50 50 1 1 I
+X MIDDLE ~ -150 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LAMBDA_CAP
+#
+DEF LAMBDA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LAMBDA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 0 0 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LAMBDA_SMALL
+#
+DEF LAMBDA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LAMBDA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 -250 0 N
+P 5 0 1 0 -250 1050 -150 1050 -100 1000 0 700 250 0 N
+X MIDTOP ~ -50 850 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LAMBDA_SMALLCAP
+#
+DEF LAMBDA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LAMBDA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 0 0 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -250 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LEG
+#
+DEF LEG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LEG" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LEZH_SMALL
+#
+DEF LEZH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LEZH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -300 1050 -300 150 -250 50 -150 0 -150 0 N
+P 13 0 1 0 -300 700 200 700 -150 250 0 250 100 200 150 150 200 50 200 -150 150 -250 100 -300 0 -350 -150 -350 -250 -300 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_LETTER
+#
+DEF LINE_V_LETTER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_LETTER" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_LETTER_DBL
+#
+DEF LINE_V_LETTER_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_LETTER_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 1050 -150 -350 N
+P 2 0 1 0 150 1050 150 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_CAP
+#
+DEF LJE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 -750 0 -700 0 -600 50 -550 150 -450 750 -400 900 -300 1000 -150 1050 0 1050 0 0 300 0 450 50 550 150 600 250 600 400 550 500 450 600 300 650 0 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_KOMI_CAP
+#
+DEF LJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -500 0 -450 0 -350 50 -300 150 -200 750 -150 900 -50 1000 100 1050 250 1050 250 150 300 50 400 0 550 0 650 50 700 150 700 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_KOMI_SMALL
+#
+DEF LJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 -300 0 -200 50 -150 150 -100 550 -50 650 50 700 200 700 200 150 250 50 350 0 400 0 500 50 550 150 550 500 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LJE_SMALL
+#
+DEF LJE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LJE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 -500 0 -400 50 -350 150 -300 550 -250 650 -150 700 0 700 0 0 250 0 350 50 400 150 400 300 350 400 250 450 0 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LL_CAP
+#
+DEF LL_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LL_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 1050 -100 0 N
+P 3 0 1 0 -400 1050 -400 0 400 0 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LL_SMALL
+#
+DEF LL_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LL_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 4 0 1 0 -150 1050 -150 150 -100 50 0 0 N
+P 4 0 1 0 300 0 200 50 150 150 150 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 50 -250 100 R 50 50 1 1 I
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LS_SMALL
+#
+DEF LS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -300 1050 -300 150 -250 50 -150 0 -50 50 50 0 250 0 350 50 400 150 400 200 350 300 250 350 100 350 0 400 -50 500 -50 550 0 650 100 700 250 700 350 650 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDI_CAP
+#
+DEF LYUDI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 250 0 250 1050 100 1050 -50 1000 -150 900 -200 750 -300 150 -350 50 -450 0 -500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDI_SMALL
+#
+DEF LYUDI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 200 0 200 700 50 700 -50 650 -100 550 -150 150 -200 50 -300 0 N
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X MIDHOOK ~ 200 350 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDIX_CAP
+#
+DEF LYUDIX_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDIX_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 0 600 1050 N
+P 9 0 1 0 -700 0 -650 0 -550 50 -500 150 -400 750 -350 900 -250 1000 -100 1050 600 0 N
+X ABOVE ~ 250 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ -100 0 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LYUDIX_SMALL
+#
+DEF LYUDIX_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LYUDIX_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 450 700 -150 0 N
+P 7 0 1 0 -500 0 -400 50 -350 150 -300 550 -250 650 -150 700 450 0 N
+X BOTTOM2 ~ -150 0 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LZ_SMALL
+#
+DEF LZ_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LZ_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 450 700 -100 0 N
+P 5 0 1 0 -250 1050 -250 150 -200 50 -100 0 450 0 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_CAP
+#
+DEF M_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 0 300 350 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM3 ~ 350 0 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_LARGE
+#
+DEF M_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -500 1050 N
+P 8 0 1 0 -500 900 -400 1000 -300 1050 -200 1050 -100 1000 -50 950 0 850 0 0 N
+P 9 0 1 0 0 850 50 950 100 1000 200 1050 300 1050 400 1000 450 950 500 850 500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM3 ~ 500 0 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALL
+#
+DEF M_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 0 -450 700 N
+P 7 0 1 0 -450 600 -400 650 -300 700 -150 700 -50 650 0 550 0 0 N
+P 7 0 1 0 0 550 50 650 150 700 300 700 400 650 450 550 450 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -450 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 0 0 100 R 50 50 1 1 I
+X BOTTOM3 ~ 450 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -450 700 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALL_SIDE
+#
+DEF M_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 -100 -350 -100 N
+P 7 0 1 0 -250 -100 -300 -50 -350 50 -350 200 -300 300 -200 350 350 350 N
+P 7 0 1 0 -200 350 -300 400 -350 500 -350 650 -300 750 -200 800 350 800 N
+X ABOVE ~ -600 350 100 R 50 50 1 1 I
+X BELOW ~ 600 350 100 R 50 50 1 1 I
+X BOTTOM1 ~ 350 -100 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 350 100 R 50 50 1 1 I
+X BOTTOM3 ~ 350 800 100 R 50 50 1 1 I
+X TOP1 ~ -350 -100 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALLCAP
+#
+DEF M_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -300 0 -300 700 0 150 300 700 300 0 N
+X BOTTOM3 ~ 300 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_TINY
+#
+DEF M_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 0 -350 500 N
+P 6 0 1 0 -350 450 -250 500 -150 500 -50 450 0 350 0 0 N
+P 7 0 1 0 0 350 50 450 150 500 200 500 300 450 350 350 350 0 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -350 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 0 0 100 R 50 50 1 1 I
+X BOTTOM3 ~ 350 0 100 R 50 50 1 1 I
+X TOP1 ~ -350 500 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_TINY_TURNED
+#
+DEF M_TINY_TURNED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_TINY_TURNED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 500 350 0 N
+P 6 0 1 0 350 50 250 0 150 0 50 50 0 150 0 500 N
+P 7 0 1 0 0 150 -50 50 -150 0 -200 0 -300 50 -350 150 -350 500 N
+X ABOVE ~ 0 -250 100 R 50 50 1 1 I
+X BELOW ~ 0 750 100 R 50 50 1 1 I
+X BOTTOM1 ~ 350 500 100 R 50 50 1 1 I
+X BOTTOM2 ~ 0 500 100 R 50 50 1 1 I
+X BOTTOM3 ~ -350 500 100 R 50 50 1 1 I
+X TOP1 ~ 350 0 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MACRON
+#
+DEF MACRON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MACRON" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1000 250 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MIDDLE_HOOK_CAP
+#
+DEF MIDDLE_HOOK_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MIDDLE_HOOK_CAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 0 700 300 700 450 650 550 550 600 400 600 -50 550 -200 450 -300 300 -350 200 -350 N
+X X ~ 0 700 100 L 50 50 1 1 I
+X ~ ~ -100 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MIDDLE_HOOK_SMALL
+#
+DEF MIDDLE_HOOK_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MIDDLE_HOOK_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 350 250 350 350 300 400 250 450 150 450 0 400 -150 300 -300 250 -350 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -100 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MILLIONS_CYR
+#
+DEF MILLIONS_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MILLIONS_CYR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -700 500 -1000 500 N
+P 2 0 1 0 -500 0 -700 -200 N
+P 2 0 1 0 -500 1000 -700 1200 N
+P 2 0 1 0 0 -200 0 -500 N
+P 2 0 1 0 0 1200 0 1500 N
+P 2 0 1 0 500 0 700 -200 N
+P 2 0 1 0 500 1000 700 1200 N
+P 2 0 1 0 700 500 1000 500 N
+X X ~ 0 500 100 L 50 50 1 1 I
+X ~ ~ -1200 0 300 U 50 50 1 1 I
+X ~ ~ 1200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MU_SMALL
+#
+DEF MU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 3 0 1 0 250 150 300 50 400 0 N
+P 7 0 1 0 -250 150 -200 50 -100 0 100 0 200 50 250 150 250 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_CAP
+#
+DEF N_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 0 -300 1050 300 0 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_SMALL
+#
+DEF N_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 7 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -200 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -200 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_SMALL_CURL
+#
+DEF N_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 700 -200 0 N
+P 16 0 1 0 -200 600 -150 650 -50 700 100 700 200 650 250 550 250 150 300 50 400 0 500 0 600 50 650 150 600 250 500 300 400 250 200 -150 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_SMALLCAP
+#
+DEF N_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 0 -250 700 200 0 200 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# N_TINY
+#
+DEF N_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "N_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 500 -150 0 N
+P 6 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 0 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NJE_CAP
+#
+DEF NJE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NJE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -600 1050 N
+P 11 0 1 0 0 1050 0 0 300 0 450 50 550 150 600 250 600 400 550 500 450 600 300 650 -600 650 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NJE_SMALL
+#
+DEF NJE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NJE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 700 -450 0 N
+P 9 0 1 0 0 700 0 0 250 0 350 50 400 150 400 250 350 350 250 400 -450 400 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NU_SMALL
+#
+DEF NU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -250 700 0 0 250 550 250 600 200 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_CAP
+#
+DEF O_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_CAP" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 550 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X HORN ~ 200 1000 100 R 50 50 1 1 I
+X P ~ -550 0 300 U 50 50 1 1 I
+X S ~ 550 0 300 U 50 50 1 1 I
+X TONOS ~ -600 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_CAP_OGONEK
+#
+DEF O_CAP_OGONEK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_CAP_OGONEK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 -100 -100 -150 -200 -100 -300 0 -350 100 -350 N
+P 17 0 1 0 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X HORN ~ 200 1000 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_CAP_STROKE
+#
+DEF O_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 1050 -400 0 N
+P 17 0 1 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL
+#
+DEF O_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X HORN ~ 150 650 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_HALF
+#
+DEF O_SMALL_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_HALF" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 350 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_OGONEK
+#
+DEF O_SMALL_OGONEK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_OGONEK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 -100 -100 -150 -200 -100 -300 0 -350 100 -350 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X HORN ~ 150 650 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_SIDE
+#
+DEF O_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 350 400 350 250 300 150 250 100 150 50 -150 50 -250 100 -300 150 -350 250 -350 400 -300 500 -250 550 -150 600 150 600 250 550 300 500 350 400 N
+X ABOVE ~ 50 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 50 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_STROKE
+#
+DEF O_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 700 -350 0 N
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_SMALL_STROKE_SIDE
+#
+DEF O_SMALL_STROKE_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_SMALL_STROKE_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 650 -350 0 N
+P 17 0 1 0 350 400 350 250 300 150 250 100 150 50 -150 50 -250 100 -300 150 -350 250 -350 400 -300 500 -250 550 -150 600 150 600 250 550 300 500 350 400 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_TINY
+#
+DEF O_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_TINY" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -50 0 -150 50 -200 150 -200 350 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_TINY_HALF
+#
+DEF O_TINY_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_TINY_HALF" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -200 250 -200 150 -150 50 -50 0 50 0 150 50 200 150 200 250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# O_TINY_HALF_TOP
+#
+DEF O_TINY_HALF_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "O_TINY_HALF_TOP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -200 250 -200 350 -150 450 -50 500 50 500 150 450 200 350 200 250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OE_CAP
+#
+DEF OE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 550 350 550 N
+P 2 0 1 0 0 1050 0 0 N
+P 10 0 1 0 500 1050 -200 1050 -300 1000 -400 900 -450 700 -450 350 -400 150 -300 50 -200 0 500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OE_SMALL
+#
+DEF OE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 350 N
+P 16 0 1 0 0 500 -50 600 -100 650 -200 700 -350 700 -450 650 -500 600 -550 500 -550 200 -500 100 -450 50 -350 0 -200 0 -100 50 -50 100 0 200 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OE_SMALLCAP
+#
+DEF OE_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OE_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 300 350 N
+P 2 0 1 0 0 700 0 0 N
+P 10 0 1 0 400 700 -250 700 -350 650 -400 600 -450 500 -450 200 -400 100 -350 50 -250 0 400 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OGONEK
+#
+DEF OGONEK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OGONEK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 -100 -100 -150 -200 -100 -300 0 -350 100 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OI_CAP
+#
+DEF OI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 50 1000 -50 1050 -250 1050 -350 1000 -450 900 -500 700 -500 350 -450 150 -350 50 -250 0 -50 0 50 50 150 150 200 350 200 700 150 900 50 1000 150 1050 350 1050 450 1000 500 900 500 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OI_SMALL
+#
+DEF OI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 0 650 -100 700 -250 700 -350 650 -400 600 -450 500 -450 200 -400 100 -350 50 -250 0 -100 0 0 50 50 100 100 200 100 500 50 600 0 650 100 700 200 700 300 650 350 550 350 -350 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_CAP
+#
+DEF OMEGA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -400 0 -150 0 -150 200 -250 250 -350 350 -400 500 -400 750 -350 900 -250 1000 -100 1050 100 1050 250 1000 350 900 400 750 400 500 350 350 250 250 150 200 150 0 400 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X P ~ -600 0 300 U 50 50 1 1 I
+X PERIS ~ -700 1300 100 R 50 50 1 1 I
+X S ~ 600 0 300 U 50 50 1 1 I
+X TONOS ~ -700 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_LARGE
+#
+DEF OMEGA_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 200 0 450 N
+P 23 0 1 0 -300 1050 -400 1000 -500 900 -550 750 -550 300 -500 150 -400 50 -300 0 -200 0 -100 50 -50 100 0 200 50 100 100 50 200 0 300 0 400 50 500 150 550 300 550 750 500 900 400 1000 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_PI_SMALL
+#
+DEF OMEGA_PI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_PI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 150 N
+P 2 0 1 0 450 700 -450 700 N
+P 17 0 1 0 -250 700 -300 650 -350 550 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 50 50 150 0 200 0 300 50 350 150 350 550 300 650 250 700 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_ROUND_CAP
+#
+DEF OMEGA_ROUND_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_ROUND_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 150 0 -150 N
+P 2 0 1 0 0 1200 0 900 N
+P 17 0 1 0 -250 1050 -400 1000 -500 900 -550 750 -550 300 -500 150 -400 50 -250 0 250 0 400 50 500 150 550 300 550 750 500 900 400 1000 250 1050 -250 1050 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_ROUND_SMALL
+#
+DEF OMEGA_ROUND_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_ROUND_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 100 0 -100 N
+P 2 0 1 0 0 800 0 600 N
+P 17 0 1 0 -150 700 -250 650 -300 600 -350 500 -350 200 -300 100 -250 50 -150 0 150 0 250 50 300 100 350 200 350 500 300 600 250 650 150 700 -150 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_SMALL
+#
+DEF OMEGA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 150 N
+P 17 0 1 0 -250 700 -300 650 -350 550 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 50 50 150 0 200 0 300 50 350 150 350 550 300 650 250 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_SMALL_CLOSED
+#
+DEF OMEGA_SMALL_CLOSED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_SMALL_CLOSED" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 0 350 0 150 50 50 150 0 200 0 300 50 350 150 350 500 300 600 250 650 150 700 -150 700 -250 650 -300 600 -350 500 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OMEGA_SMALLCAP
+#
+DEF OMEGA_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OMEGA_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -300 0 -150 0 -150 150 -250 250 -300 350 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 350 200 250 100 150 100 0 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OU_CAP
+#
+DEF OU_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OU_CAP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -200 1050 -300 1000 -350 900 -350 800 -300 700 -250 650 -150 600 N
+P 7 0 1 0 200 1050 300 1000 350 900 350 800 300 700 250 650 150 600 N
+P 17 0 1 0 -150 600 150 600 250 550 300 500 350 400 350 200 300 100 250 50 150 0 -150 0 -250 50 -300 100 -350 200 -350 400 -300 500 -250 550 -150 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OU_SMALL
+#
+DEF OU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -250 850 -250 700 -200 600 0 500 200 600 250 700 250 850 N
+P 13 0 1 0 -100 500 100 500 200 450 250 350 250 150 200 50 100 0 -100 0 -200 50 -250 150 -250 350 -200 450 -100 500 N
+X ABOVE ~ 0 850 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OU_SMALLCAP
+#
+DEF OU_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OU_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -150 700 -200 650 -250 550 -200 450 -100 400 N
+P 5 0 1 0 100 400 200 450 250 550 200 650 150 700 N
+P 13 0 1 0 -100 400 100 400 200 350 250 250 250 150 200 50 100 0 -100 0 -200 50 -250 150 -250 250 -200 350 -100 400 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_CAP
+#
+DEF P_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_CAP" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 0 -300 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X TICK ~ 200 550 100 R 50 50 1 1 I
+X TONOS ~ -650 950 100 R 50 50 1 1 I
+X TOPRING ~ 0 750 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_CAP_HOOK
+#
+DEF P_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 13 0 1 0 -600 800 -600 900 -550 1000 -450 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_SMALL
+#
+DEF P_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ -200 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TICK ~ 150 50 100 R 50 50 1 1 I
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_SMALLCAP
+#
+DEF P_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -200 0 -200 700 100 700 200 650 250 550 250 450 200 350 100 300 -200 300 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X TOPRING ~ 0 500 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# P_TINY
+#
+DEF P_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "P_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 -250 -150 500 N
+P 10 0 1 0 -150 450 -50 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X TICK ~ 150 50 100 R 50 50 1 1 I
+X TOP ~ 0 500 100 R 50 50 1 1 I
+X TOP1 ~ -150 500 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PALATALIZATION_CYR
+#
+DEF PALATALIZATION_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PALATALIZATION_CYR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 950 150 1100 200 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN
+#
+DEF PAREN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 -400 150 -350 50 -200 0 -100 -50 50 -100 300 -100 500 -50 750 0 900 50 1000 150 1150 200 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_SMALL
+#
+DEF PAREN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 100 850 50 800 0 650 -50 400 -50 200 0 -50 50 -200 100 -250 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PENNY_GERMAN
+#
+DEF PENNY_GERMAN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PENNY_GERMAN" 0 -350 60 H V C CNN
+DRAW
+P 23 0 1 0 -450 350 -400 400 -300 450 -200 400 -150 350 -50 300 50 350 300 600 350 750 350 900 300 1000 200 1050 150 1050 50 1000 0 900 0 750 50 600 300 350 350 250 350 200 300 100 250 50 100 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_CAP
+#
+DEF PHI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 17 0 1 0 -100 900 100 900 250 850 350 750 400 650 400 450 350 350 250 250 100 200 -100 200 -250 250 -350 350 -400 450 -400 650 -350 750 -250 850 -100 900 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_SMALL
+#
+DEF PHI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 -250 700 -300 650 -350 550 -350 250 -300 150 -200 50 -100 0 100 0 200 50 300 150 350 250 350 550 300 650 200 700 150 700 50 650 0 550 0 -350 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_SMALL_VAR
+#
+DEF PHI_SMALL_VAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_SMALL_VAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 -350 N
+P 17 0 1 0 -100 700 100 700 200 650 300 550 350 450 350 250 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 250 -350 450 -300 550 -200 650 -100 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PHI_TINY
+#
+DEF PHI_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PHI_TINY" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 500 -300 400 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 350 250 450 150 500 50 450 0 350 0 -250 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_CAP
+#
+DEF PI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 0 -300 1050 300 1050 300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDHOOK ~ 300 700 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_SMALL
+#
+DEF PI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 4 0 1 0 -150 700 -150 150 -200 50 -300 0 N
+P 4 0 1 0 400 700 -250 700 -350 650 -400 550 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_SMALLCAP
+#
+DEF PI_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 0 -250 700 200 700 200 0 N
+X MIDHOOK ~ 200 350 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# POKRYTIE
+#
+DEF POKRYTIE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "POKRYTIE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 900 -250 1000 -150 1050 0 1050 150 1000 300 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# POUND
+#
+DEF POUND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "POUND" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 100 700 N
+P 3 0 1 0 -300 0 250 0 250 0 N
+P 6 0 1 0 -150 0 -150 900 -100 1000 0 1050 150 1050 250 1000 N
+X MIDDLE ~ -100 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSI_CAP
+#
+DEF PSI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 14 0 1 0 -500 1050 -400 1000 -350 900 -350 650 -300 500 -250 450 -150 400 150 400 250 450 300 500 350 650 350 900 400 1000 500 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSI_SMALL
+#
+DEF PSI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 -350 N
+P 10 0 1 0 -350 700 -350 250 -300 150 -200 50 -100 0 100 0 200 50 300 150 350 250 350 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSI_SMALLCAP
+#
+DEF PSI_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSI_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 0 N
+P 10 0 1 0 -300 700 -250 650 -250 450 -200 350 -100 300 100 300 200 350 250 450 250 650 300 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSILI
+#
+DEF PSILI U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSILI" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 950 0 950 50 1000 50 1100 N
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X P ~ -200 0 300 U 50 50 1 1 I
+X S ~ 200 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSILI_OXIA
+#
+DEF PSILI_OXIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSILI_OXIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1100 150 950 N
+P 4 0 1 0 -250 950 -200 950 -150 1000 -150 1100 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PSILI_VARIA
+#
+DEF PSILI_VARIA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PSILI_VARIA" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1100 250 950 N
+P 4 0 1 0 -250 950 -200 950 -150 1000 -150 1100 N
+X P ~ -400 0 300 U 50 50 1 1 I
+X S ~ 400 0 300 U 50 50 1 1 I
+X X ~ 0 950 100 L 50 50 1 1 I
+X X2 ~ 200 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PX_CAP
+#
+DEF PX_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PX_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 500 1050 150 600 500 0 N
+P 11 0 1 0 -400 0 -400 1050 0 1050 100 1000 150 950 200 850 200 700 150 600 100 550 0 500 -400 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PX_SMALL
+#
+DEF PX_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PX_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 -350 -350 N
+P 3 0 1 0 450 700 150 350 450 0 N
+P 12 0 1 0 -350 650 -250 700 -50 700 50 650 100 600 150 500 150 200 100 100 50 50 -50 0 -250 0 -350 50 N
+X TOP ~ -100 700 100 R 50 50 1 1 I
+X TOP1 ~ -350 700 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_CAP
+#
+DEF Q_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_CAP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 400 -100 300 -50 200 50 50 200 -50 250 -150 250 N
+P 17 0 1 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_LARGE_TAIL
+#
+DEF Q_LARGE_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_LARGE_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 300 1050 300 -150 350 -250 400 -300 500 -350 600 -350 N
+P 14 0 1 0 300 900 200 1000 100 1050 -100 1050 -200 1000 -300 900 -350 700 -350 350 -300 150 -200 50 -100 0 100 0 200 50 300 150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_SMALL
+#
+DEF Q_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 -350 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Q_SMALL_TAIL
+#
+DEF Q_SMALL_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Q_SMALL_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 700 250 -150 300 -250 350 -300 450 -350 550 -350 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QP_SMALL
+#
+DEF QP_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QP_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 -350 N
+P 12 0 1 0 0 50 -100 0 -300 0 -400 50 -450 100 -500 200 -500 500 -450 600 -400 650 -300 700 -100 700 0 650 N
+P 12 0 1 0 0 650 100 700 300 700 400 650 450 600 500 500 500 200 450 100 400 50 300 0 100 0 0 50 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUESTION
+#
+DEF QUESTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUESTION" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 100 0 50 -50 0 -100 50 -50 100 -50 0 N
+P 12 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 900 250 800 200 700 150 650 50 600 0 550 -50 450 -50 400 N
+X P ~ -450 0 300 U 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE
+#
+DEF QUOTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 -200 850 N
+P 2 0 1 0 200 1050 200 850 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE_RIGHT
+#
+DEF QUOTE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 50 1050 50 1000 0 900 -50 850 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE_RIGHT_DBL
+#
+DEF QUOTE_RIGHT_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE_RIGHT_DBL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -150 1050 -150 1000 -200 900 -250 850 N
+P 4 0 1 0 250 1050 250 1000 200 900 150 850 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_CAP
+#
+DEF R_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -50 500 N
+P 11 0 1 0 -300 0 -300 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X STROKE ~ -300 500 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_SMALL
+#
+DEF R_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 0 -100 700 N
+P 5 0 1 0 -100 500 -50 600 0 650 100 700 200 700 N
+X ABOVE ~ 50 950 100 R 50 50 1 1 I
+X BELOW ~ -100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -100 0 100 R 50 50 1 1 I
+X MIDDLE ~ -50 350 100 R 50 50 1 1 I
+X TOP1 ~ -100 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_SMALL_FISHHOOK
+#
+DEF R_SMALL_FISHHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_SMALL_FISHHOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 50 0 N
+P 6 0 1 0 200 700 100 700 0 650 -50 600 -100 450 -100 0 N
+X ABOVE ~ 50 950 100 R 50 50 1 1 I
+X BELOW ~ -100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -100 0 100 R 50 50 1 1 I
+X MIDDLE ~ -50 350 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_SMALLCAP
+#
+DEF R_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 300 250 0 N
+P 9 0 1 0 -200 0 -200 700 100 700 200 650 250 550 250 450 200 350 100 300 -200 300 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# R_TINY
+#
+DEF R_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "R_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 500 -100 0 N
+P 4 0 1 0 -100 350 -50 450 50 500 150 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ -100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -100 0 100 R 50 50 1 1 I
+X MIDDLE ~ -100 250 100 R 50 50 1 1 I
+X TOP1 ~ -100 500 100 R 50 50 1 1 I
+X TOP2 ~ 150 500 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_SMALL
+#
+DEF RHO_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 -350 -250 500 -200 600 -150 650 -50 700 100 700 200 650 250 600 300 500 300 200 250 100 200 50 100 0 -50 0 -150 50 -250 150 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_SMALL_STROKE
+#
+DEF RHO_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -250 50 -250 N
+P 16 0 1 0 -250 -350 -250 500 -200 600 -150 650 -50 700 100 700 200 650 250 600 300 500 300 200 250 100 200 50 100 0 -50 0 -150 50 -250 150 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_SMALL_TAIL
+#
+DEF RHO_SMALL_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_SMALL_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 250 -350 -50 -350 -150 -300 -200 -250 -250 -150 -250 500 -200 600 -150 650 -50 700 100 700 200 650 250 600 300 500 300 200 250 100 200 50 100 0 -50 0 -150 50 -250 150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RHO_TINY
+#
+DEF RHO_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RHO_TINY" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -150 -250 -150 350 -100 450 0 500 50 500 150 450 200 350 200 150 150 50 50 0 -50 0 -150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 150 -250 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RING
+#
+DEF RING U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RING" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 950 -100 1000 -150 1100 -100 1200 0 1250 100 1200 150 1100 100 1000 0 950 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RING_ACUTE
+#
+DEF RING_ACUTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RING_ACUTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 1350 300 1200 N
+P 9 0 1 0 0 1250 -100 1200 -150 1100 -100 1000 0 950 100 1000 150 1100 100 1200 0 1250 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RING_HALF
+#
+DEF RING_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RING_HALF" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 950 -100 1000 -150 1100 -100 1200 0 1250 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_CAP
+#
+DEF S_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_CAP" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -300 50 -150 0 100 0 200 50 250 100 300 200 300 300 250 400 200 450 100 500 -100 550 -200 600 -250 650 -300 750 -300 850 -250 950 -200 1000 -100 1050 150 1050 300 1000 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X MIDDLE ~ 0 550 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_LONG_SMALL
+#
+DEF S_LONG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_LONG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 900 50 1000 150 1050 250 1050 N
+X ABOVE ~ 100 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X MIDTOP ~ 0 750 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_SMALL
+#
+DEF S_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -200 50 -100 0 100 0 200 50 250 150 250 200 200 300 100 350 -50 350 -150 400 -200 500 -200 550 -150 650 -50 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -200 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 50 350 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_SMALL_SWASHTAIL
+#
+DEF S_SMALL_SWASHTAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_SMALL_SWASHTAIL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -100 0 0 -150 100 -200 250 -200 N
+P 16 0 1 0 -200 50 -100 0 100 0 200 50 250 150 250 200 200 300 100 350 -50 350 -150 400 -200 500 -200 550 -150 650 -50 700 100 700 200 650 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_ARCHAIC_CAP
+#
+DEF SAMPI_ARCHAIC_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_ARCHAIC_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 4 0 1 0 -350 600 -350 1050 350 1050 350 600 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_ARCHAIC_SMALL
+#
+DEF SAMPI_ARCHAIC_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_ARCHAIC_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 4 0 1 0 -250 600 -250 1050 250 1050 250 600 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_CAP
+#
+DEF SAMPI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1000 -200 750 N
+P 4 0 1 0 300 900 150 750 100 650 100 200 N
+P 11 0 1 0 -350 900 -250 1000 -100 1050 100 1050 200 1000 300 900 350 800 400 600 400 300 350 100 300 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAMPI_SMALL
+#
+DEF SAMPI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAMPI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 150 450 N
+P 2 0 1 0 0 0 250 250 N
+P 7 0 1 0 -300 700 -100 650 50 550 150 450 250 250 300 50 300 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAN_CAP
+#
+DEF SAN_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAN_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 0 700 350 1050 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SAN_SMALL
+#
+DEF SAN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SAN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -300 -350 -300 700 0 400 300 700 300 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SECTION
+#
+DEF SECTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SECTION" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -200 -100 -100 -150 50 -150 150 -100 200 0 150 100 -150 400 -200 500 -200 550 -150 650 -50 700 N
+P 11 0 1 0 200 1000 100 1050 -50 1050 -150 1000 -200 900 -150 800 150 500 200 400 200 350 150 250 50 200 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SEMICOLON
+#
+DEF SEMICOLON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SEMICOLON" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 50 50 50 0 0 -100 -50 -150 N
+P 6 0 1 0 0 650 50 600 0 550 -50 600 0 650 0 550 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SEMISOFT_SMALL
+#
+DEF SEMISOFT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SEMISOFT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 -50 700 N
+P 9 0 1 0 -200 1050 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHA_CAP
+#
+DEF SHA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 0 N
+P 4 0 1 0 -500 1050 -500 0 500 0 500 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM3 ~ 500 0 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHA_SMALL
+#
+DEF SHA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 0 0 N
+P 4 0 1 0 -350 700 -350 0 350 0 350 700 N
+X BOTTOM3 ~ 350 0 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHEI_CAP
+#
+DEF SHEI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHEI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 200 0 450 N
+P 5 0 1 0 500 150 350 -100 200 -250 50 -300 -250 -300 N
+P 23 0 1 0 -300 1050 -400 1000 -500 900 -550 750 -550 300 -500 150 -400 50 -300 0 -200 0 -100 50 -50 100 0 200 50 100 100 50 200 0 300 0 400 50 500 150 550 300 550 750 500 900 400 1000 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHEI_SMALL
+#
+DEF SHEI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHEI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 150 N
+P 5 0 1 0 300 50 250 -50 50 -250 -100 -300 -150 -300 N
+P 17 0 1 0 -250 700 -300 650 -350 550 -350 150 -300 50 -200 0 -150 0 -50 50 0 150 50 50 150 0 200 0 300 50 350 150 350 550 300 650 250 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SHEQUEL_NEW
+#
+DEF SHEQUEL_NEW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SHEQUEL_NEW" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -450 0 -450 1050 -150 1050 0 1000 100 900 150 750 150 450 N
+P 7 0 1 0 -150 650 -150 300 -100 150 0 50 150 0 450 0 450 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_CAP
+#
+DEF SIGMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 250 0 -300 0 50 550 -300 1050 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_SMALL
+#
+DEF SIGMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 350 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 200 250 500 200 600 150 650 50 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_SMALL_FINAL
+#
+DEF SIGMA_SMALL_FINAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_SMALL_FINAL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 200 650 100 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 50 0 150 -50 200 -150 200 -200 150 -300 50 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH
+#
+DEF SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 450 1100 -450 -250 -450 -250 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_CAP
+#
+DEF SLASH_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1200 -300 -250 N
+X X ~ 0 500 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL
+#
+DEF SLASH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 950 -250 -250 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL_H
+#
+DEF SLASH_SMALL_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 250 150 450 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL_H_DBL
+#
+DEF SLASH_SMALL_H_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL_H_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 100 150 300 N
+P 2 0 1 0 -150 400 150 600 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL_V
+#
+DEF SLASH_SMALL_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL_V" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 500 -100 200 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SOFT_CAP
+#
+DEF SOFT_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SOFT_CAP" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -250 1050 -250 0 50 0 200 50 300 150 350 250 350 400 300 500 200 600 50 650 -250 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X MIDTOP ~ -250 900 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SOFT_SMALL
+#
+DEF SOFT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SOFT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -200 700 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_EM
+#
+DEF SPACE_EM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_EM" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_EN
+#
+DEF SPACE_EN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_EN" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_FIGURE
+#
+DEF SPACE_FIGURE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_FIGURE" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_HAIR
+#
+DEF SPACE_HAIR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_HAIR" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -50 0 300 U 50 50 1 1 I
+X ~ ~ 50 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_MID
+#
+DEF SPACE_MID U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_MID" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -150 0 300 U 50 50 1 1 I
+X ~ ~ 150 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_PUNC
+#
+DEF SPACE_PUNC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_PUNC" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_THICK
+#
+DEF SPACE_THICK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_THICK" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_THIN
+#
+DEF SPACE_THIN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_THIN" 0 -350 60 H V C CNN
+DRAW
+X ~ ~ -100 0 300 U 50 50 1 1 I
+X ~ ~ 100 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STIGMA_CAP
+#
+DEF STIGMA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STIGMA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 18 0 1 0 250 1050 -50 1050 -200 1000 -300 900 -350 800 -400 600 -400 450 -350 250 -300 150 -200 50 -50 0 0 0 100 -50 150 -150 150 -200 100 -300 50 -350 -50 -350 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STIGMA_SMALL
+#
+DEF STIGMA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STIGMA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 200 700 -100 700 -200 650 -250 600 -300 500 -300 200 -250 100 -200 50 -100 0 0 0 100 -50 150 -150 150 -200 100 -300 0 -350 -100 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_H
+#
+DEF STROKE_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 350 200 350 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_SMALL_H
+#
+DEF STROKE_SMALL_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_SMALL_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 350 150 350 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_SMALL_H_DBL
+#
+DEF STROKE_SMALL_H_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_SMALL_H_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 200 150 200 N
+P 2 0 1 0 -150 500 150 500 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STROKE_V
+#
+DEF STROKE_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STROKE_V" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 550 0 150 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_CAP
+#
+DEF T_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 2 0 1 0 0 0 0 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X MIDHOOK ~ 0 700 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_CAP_ABOVE
+#
+DEF T_CAP_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_CAP_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1100 250 1100 N
+P 2 0 1 0 0 1100 0 950 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_CAP_HOOK
+#
+DEF T_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+P 5 0 1 0 -350 800 -350 900 -300 1000 -200 1050 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL
+#
+DEF T_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 5 0 1 0 0 1050 0 150 50 50 150 0 250 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_CARON
+#
+DEF T_SMALL_CARON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_CARON" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 2 0 1 0 350 1050 300 900 N
+P 5 0 1 0 0 1050 0 150 50 50 150 0 250 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_CURL
+#
+DEF T_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 11 0 1 0 0 1050 0 150 50 50 150 0 250 0 350 50 400 150 350 250 250 300 150 250 -50 -150 N
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_HOOK
+#
+DEF T_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 8 0 1 0 250 1050 150 1050 50 1000 0 900 0 150 50 50 150 0 250 0 N
+X BELOW ~ 100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALL_RETROHOOK
+#
+DEF T_SMALL_RETROHOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALL_RETROHOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 700 250 700 N
+P 5 0 1 0 0 1050 0 -200 50 -300 150 -350 250 -350 N
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_SMALLCAP
+#
+DEF T_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 2 0 1 0 0 700 0 0 N
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# T_TINY
+#
+DEF T_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "T_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 500 200 500 N
+P 5 0 1 0 0 700 0 150 50 50 150 0 200 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 100 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 200 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TAIL
+#
+DEF TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TAIL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 0 150 0 -150 -350 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TAU_SMALL
+#
+DEF TAU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TAU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 550 -250 650 -150 700 300 700 N
+P 4 0 1 0 0 700 0 150 50 50 150 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TC_SMALL_CURL
+#
+DEF TC_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TC_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 700 -100 700 N
+P 6 0 1 0 -350 1050 -350 150 -300 50 -200 0 -100 0 0 50 N
+P 17 0 1 0 400 650 300 700 100 700 0 650 -50 600 -100 500 -100 200 -50 100 0 50 100 0 250 0 350 50 400 150 350 250 250 300 150 250 -50 -150 N
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDDLE ~ -350 400 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TESH_SMALL
+#
+DEF TESH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TESH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 700 100 700 N
+P 5 0 1 0 -200 1050 -200 150 -150 50 -50 0 100 0 N
+P 8 0 1 0 350 1050 250 1050 150 1000 100 900 100 -200 50 -300 -50 -350 -150 -350 N
+X MIDDLE ~ -200 400 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THETA_CAP
+#
+DEF THETA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THETA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 550 150 550 N
+P 21 0 1 0 -100 1050 100 1050 200 1000 300 900 350 800 400 650 400 400 350 250 300 150 200 50 100 0 -100 0 -200 50 -300 150 -350 250 -400 400 -400 650 -350 800 -300 900 -200 1000 -100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THETA_SMALL
+#
+DEF THETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 550 250 550 N
+P 17 0 1 0 -100 1050 50 1050 150 1000 200 950 250 800 250 250 200 100 150 50 50 0 -100 0 -200 50 -250 100 -300 250 -300 800 -250 950 -200 1000 -100 1050 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THETA_SMALL_SCRIPT
+#
+DEF THETA_SMALL_SCRIPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THETA_SMALL_SCRIPT" 0 -350 60 H V C CNN
+DRAW
+P 24 0 1 0 -400 550 -350 500 -300 400 -300 250 -250 100 -200 50 -100 0 50 0 150 50 200 100 250 250 250 800 200 950 150 1000 50 1050 -100 1050 -200 1000 -250 950 -300 850 -300 750 -250 650 -200 600 -100 550 250 550 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THORN_CAP
+#
+DEF THORN_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THORN_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 10 0 1 0 -300 800 100 800 200 750 250 700 300 600 300 450 250 350 200 300 100 250 -300 250 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THORN_SMALL
+#
+DEF THORN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THORN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1050 -250 -350 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THOUSANDS_CYR
+#
+DEF THOUSANDS_CYR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THOUSANDS_CYR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 -100 150 600 N
+P 2 0 1 0 -150 500 250 300 N
+P 2 0 1 0 100 0 -300 200 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TIE
+#
+DEF TIE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TIE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -800 1050 -750 1100 -600 1200 -500 1250 -350 1300 -100 1350 100 1350 350 1300 500 1250 600 1200 750 1100 800 1050 N
+X ~ ~ -150 0 300 U 50 50 1 1 I
+X ~ ~ 150 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TILDE
+#
+DEF TILDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TILDE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -250 950 -200 1000 -100 1050 100 950 200 1000 250 1050 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TITLO
+#
+DEF TITLO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TITLO" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 950 -250 1050 250 1000 250 1100 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TJE_KOMI_CAP
+#
+DEF TJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 8 0 1 0 0 1050 0 150 50 50 150 0 300 0 400 50 450 150 450 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDDLE ~ 0 500 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TJE_KOMI_SMALL
+#
+DEF TJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 250 700 N
+P 8 0 1 0 0 700 0 150 50 50 150 0 200 0 300 50 350 150 350 400 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TS_SMALL
+#
+DEF TS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 700 -50 700 N
+P 20 0 1 0 -300 1050 -300 150 -250 50 -150 0 -50 50 50 0 250 0 350 50 400 150 400 200 350 300 250 350 100 350 0 400 -50 500 -50 550 0 650 100 700 250 700 350 650 N
+X ABOVE ~ 150 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSHE_CAP
+#
+DEF TSHE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSHE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 2 0 1 0 0 0 0 1050 N
+P 6 0 1 0 0 700 300 700 450 650 550 550 600 400 600 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSHE_SMALL
+#
+DEF TSHE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSHE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 800 300 800 N
+P 2 0 1 0 0 1050 0 0 N
+P 7 0 1 0 0 400 50 450 150 500 250 500 350 450 400 350 400 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSY_CAP
+#
+DEF TSY_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSY_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1050 300 0 N
+P 4 0 1 0 -300 1050 -300 0 400 0 400 -250 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TSY_SMALL
+#
+DEF TSY_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TSY_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 0 N
+P 4 0 1 0 -200 700 -200 0 350 0 350 -250 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TTSE_CAP
+#
+DEF TTSE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TTSE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 1050 0 1050 N
+P 2 0 1 0 300 1050 300 0 N
+P 4 0 1 0 -300 1050 -300 0 400 0 400 -250 N
+X ABOVE ~ -300 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TTSE_SMALL
+#
+DEF TTSE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TTSE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 700 -450 700 N
+P 2 0 1 0 250 700 250 0 N
+P 4 0 1 0 -200 700 -200 0 350 0 350 -250 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_CAP
+#
+DEF U_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_CAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 1050 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1550 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_CAP_STROKE
+#
+DEF U_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 700 450 700 N
+P 10 0 1 0 -300 1050 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 300 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALL
+#
+DEF U_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 7 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 100 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALL_SIDE
+#
+DEF U_SMALL_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALL_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 550 350 550 N
+P 7 0 1 0 -350 100 200 100 300 150 350 250 350 400 300 500 250 550 N
+X ABOVE ~ -600 350 100 R 50 50 1 1 I
+X BELOW ~ 600 350 100 R 50 50 1 1 I
+X BOTTOM ~ 350 300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 550 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP1 ~ -350 100 100 R 50 50 1 1 I
+X TOP2 ~ -350 550 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALL_STROKE
+#
+DEF U_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 450 350 450 N
+P 2 0 1 0 200 700 200 0 N
+P 7 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 100 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_SMALLCAP
+#
+DEF U_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 150 200 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X TOP2 ~ 200 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_TINY
+#
+DEF U_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 150 500 150 0 N
+P 6 0 1 0 -200 500 -200 150 -150 50 -50 0 50 0 150 50 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM ~ -50 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 150 0 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X TOP1 ~ -200 500 100 R 50 50 1 1 I
+X TOP2 ~ 150 500 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# U_TINY_SIDE
+#
+DEF U_TINY_SIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "U_TINY_SIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 400 250 400 N
+P 6 0 1 0 -250 50 100 50 200 100 250 200 250 300 200 400 N
+X ABOVE ~ -500 250 100 R 50 50 1 1 I
+X BELOW ~ 500 200 100 R 50 50 1 1 I
+X BOTTOM ~ 250 200 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 400 100 R 50 50 1 1 I
+X TOP1 ~ -250 50 100 R 50 50 1 1 I
+X TOP2 ~ -250 400 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UE_SMALL
+#
+DEF UE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -450 700 -450 150 -400 50 -300 0 -150 0 -50 50 0 150 N
+P 13 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 350 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UPSILON_CAP_HOOK
+#
+DEF UPSILON_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UPSILON_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -350 1050 -250 1050 -150 1000 -50 900 0 800 0 0 N
+P 7 0 1 0 0 800 50 950 100 1000 200 1050 250 1050 350 1000 400 900 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X P ~ -450 0 300 U 50 50 1 1 I
+X S ~ 500 0 300 U 50 50 1 1 I
+X TONOS ~ -650 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UPSILON_LARGE
+#
+DEF UPSILON_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UPSILON_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -300 1050 -300 200 -250 100 -200 50 -100 0 100 0 200 50 300 150 350 250 350 900 300 1000 250 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP1 ~ -300 1050 100 R 50 50 1 1 I
+X TOP2 ~ 250 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UPSILON_SMALL
+#
+DEF UPSILON_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UPSILON_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -250 700 -250 150 -200 50 -100 0 50 0 150 50 200 100 250 200 250 550 200 650 150 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_CAP
+#
+DEF V_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 1050 0 0 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_MIDWELSH_CAP
+#
+DEF V_MIDWELSH_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_MIDWELSH_CAP" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -50 1050 -150 1000 -250 850 -300 700 -300 200 -250 100 -200 50 -100 0 100 0 200 50 300 150 350 250 350 350 300 550 200 700 150 750 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM ~ 0 0 100 R 50 50 1 1 I
+X TOP1 ~ -50 1050 100 R 50 50 1 1 I
+X TOP2 ~ 250 1050 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_MIDWELSH_SMALL
+#
+DEF V_MIDWELSH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_MIDWELSH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -50 700 -150 650 -200 600 -250 500 -250 200 -200 100 -150 50 -50 0 50 0 150 50 200 100 250 200 250 300 200 400 150 450 50 500 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X HIGH ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_SMALL
+#
+DEF V_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 0 0 250 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# V_TINY
+#
+DEF V_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "V_TINY" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 500 0 0 200 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# W_CAP
+#
+DEF W_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "W_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 1050 -200 0 0 750 200 0 450 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# W_OVER_W
+#
+DEF W_OVER_W U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "W_OVER_W" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 400 -200 0 0 300 200 0 400 400 N
+P 5 0 1 0 -400 1050 -200 650 0 950 200 650 400 1050 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# W_SMALL
+#
+DEF W_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "W_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 700 -200 0 0 500 200 0 400 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WYNN_CAP
+#
+DEF WYNN_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WYNN_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 -350 N
+P 11 0 1 0 -300 900 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 600 250 450 150 300 -300 -150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WYNN_SMALL
+#
+DEF WYNN_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WYNN_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 9 0 1 0 -250 600 -200 650 -100 700 100 700 200 650 250 550 250 400 200 300 -250 -150 N
+X TOP ~ 0 700 100 R 50 50 1 1 I
+X TOP1 ~ -250 700 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# X_CAP
+#
+DEF X_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "X_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 350 0 N
+P 2 0 1 0 350 1050 -350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM2 ~ 300 0 100 R 50 50 1 1 I
+X CENTER ~ 0 550 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# X_SMALL
+#
+DEF X_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "X_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 250 700 N
+P 2 0 1 0 -300 700 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BOTTOM2 ~ 200 0 100 R 50 50 1 1 I
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# X_TINY
+#
+DEF X_TINY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "X_TINY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 500 200 0 N
+P 2 0 1 0 200 500 -200 0 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# XI_CAP
+#
+DEF XI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "XI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 250 0 N
+P 2 0 1 0 -300 1050 250 1050 N
+P 2 0 1 0 150 550 -200 550 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# XI_SMALL
+#
+DEF XI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "XI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1050 250 1050 N
+P 7 0 1 0 -50 1050 -150 1000 -200 900 -200 750 -150 650 -50 600 150 600 N
+P 15 0 1 0 -50 600 -150 550 -200 500 -250 400 -250 200 -200 100 -150 50 -50 0 50 0 150 -50 200 -150 200 -200 150 -300 50 -350 0 -350 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_CAP
+#
+DEF Y_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 300 100 R 50 50 1 1 I
+X P ~ -450 0 300 U 50 50 1 1 I
+X PERIS ~ -700 1300 100 R 50 50 1 1 I
+X S ~ 450 0 300 U 50 50 1 1 I
+X TONOS ~ -700 950 100 R 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_CAP_HOOK
+#
+DEF Y_CAP_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_CAP_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+P 7 0 1 0 -350 1050 0 500 300 1000 400 1050 500 1000 550 900 550 800 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_CAP_STROKE
+#
+DEF Y_CAP_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_CAP_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 900 350 900 N
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_LARGE
+#
+DEF Y_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 0 350 N
+P 5 0 1 0 350 1050 -100 150 -200 50 -300 0 -350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_LARGE_LOOP
+#
+DEF Y_LARGE_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_LARGE_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 0 350 N
+P 11 0 1 0 350 1050 0 350 -100 150 -150 50 -250 0 -350 50 -400 150 -350 250 -250 300 -150 250 -100 150 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL
+#
+DEF Y_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 5 0 1 0 250 700 0 0 -100 -250 -150 -300 -250 -350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_HOOK
+#
+DEF Y_SMALL_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 9 0 1 0 -250 -350 -150 -300 -100 -250 0 0 200 650 300 700 400 650 450 550 450 450 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_LOOP
+#
+DEF Y_SMALL_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 11 0 1 0 250 700 0 0 -50 -200 -100 -300 -200 -350 -300 -300 -350 -200 -300 -100 -200 -50 -100 -100 -50 -200 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 200 -250 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_STRAIGHT
+#
+DEF Y_SMALL_STRAIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_STRAIGHT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 -350 N
+P 3 0 1 0 -250 700 0 0 250 700 N
+X MIDBOTTOM ~ 0 -100 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALL_STROKE
+#
+DEF Y_SMALL_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALL_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 500 300 500 N
+P 2 0 1 0 -250 700 0 0 N
+P 5 0 1 0 250 700 0 0 -100 -250 -150 -300 -250 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Y_SMALLCAP
+#
+DEF Y_SMALLCAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Y_SMALLCAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 0 0 N
+P 3 0 1 0 -250 700 0 350 250 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X MIDBOTTOM ~ 0 200 100 R 50 50 1 1 I
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YA_CAP
+#
+DEF YA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 -350 0 N
+P 11 0 1 0 250 0 250 1050 -150 1050 -250 1000 -300 950 -350 850 -350 700 -300 600 -250 550 -150 500 250 500 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YA_SMALL
+#
+DEF YA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 300 -250 0 N
+P 9 0 1 0 200 0 200 700 -100 700 -200 650 -250 550 -250 450 -200 350 -100 300 200 300 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAE_CAP
+#
+DEF YAE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 500 -500 0 N
+P 3 0 1 0 100 1050 100 0 600 0 N
+P 10 0 1 0 450 500 -300 500 -400 550 -450 600 -500 700 -500 850 -450 950 -400 1000 -300 1050 600 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAE_SMALL
+#
+DEF YAE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -250 300 N
+P 9 0 1 0 0 550 0 700 -350 700 -450 650 -500 550 -500 450 -450 350 -350 300 0 300 N
+P 13 0 1 0 450 50 350 0 150 0 50 50 0 150 0 550 50 650 150 700 350 700 450 650 500 550 500 450 0 350 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAT_CAP
+#
+DEF YAT_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAT_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 900 200 900 N
+P 11 0 1 0 -250 1050 -250 0 50 0 200 50 300 150 350 250 350 400 300 500 200 600 50 650 -250 650 N
+X ABOVE ~ -200 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YAT_SMALL
+#
+DEF YAT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YAT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 700 100 700 N
+P 9 0 1 0 -200 1050 -200 0 50 0 150 50 200 150 200 300 150 400 50 450 -200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YEN
+#
+DEF YEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YEN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 350 400 350 N
+P 2 0 1 0 -400 700 400 700 N
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YERY_CAP
+#
+DEF YERY_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YERY_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 500 1050 500 0 N
+P 11 0 1 0 -450 1050 -450 0 -150 0 0 50 100 150 150 250 150 400 100 500 0 600 -150 650 -450 650 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YERY_SMALL
+#
+DEF YERY_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YERY_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 700 350 0 N
+P 9 0 1 0 -350 700 -350 0 -100 0 0 50 50 150 50 300 0 400 -100 450 -350 450 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YOGH_CAP
+#
+DEF YOGH_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YOGH_CAP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 200 450 300 350 350 250 350 0 300 -100 200 -200 100 -250 -300 -350 N
+P 12 0 1 0 -300 950 -250 1000 -150 1050 150 1050 250 1000 300 950 350 850 350 650 300 550 200 450 100 400 -200 300 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YOGH_SMALL
+#
+DEF YOGH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YOGH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 150 200 200 150 250 50 250 -100 200 -200 150 -250 50 -300 -250 -350 N
+P 11 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 350 200 250 150 200 50 150 -150 100 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YR_CAP
+#
+DEF YR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 -300 0 N
+P 2 0 1 0 -50 250 300 -350 N
+P 10 0 1 0 -300 800 100 800 200 750 250 700 300 600 300 450 250 350 200 300 100 250 -300 250 N
+X ABOVE ~ -250 1300 100 R 50 50 1 1 I
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YU_CAP
+#
+DEF YU_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YU_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 1050 -500 0 N
+P 2 0 1 0 -150 550 -500 550 N
+P 17 0 1 0 100 1050 300 1050 400 1000 500 900 550 700 550 350 500 150 400 50 300 0 100 0 0 50 -100 150 -150 350 -150 700 -100 900 0 1000 100 1050 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YU_SMALL
+#
+DEF YU_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YU_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 350 -100 350 N
+P 2 0 1 0 -400 700 -400 0 N
+P 17 0 1 0 100 0 0 50 -50 100 -100 200 -100 500 -50 600 0 650 100 700 250 700 350 650 400 600 450 500 450 200 400 100 350 50 250 0 100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_BIG_CAP
+#
+DEF YUS_BIG_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_BIG_CAP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 550 -400 1050 400 1050 0 550 N
+P 10 0 1 0 -450 0 -450 250 -400 400 -300 500 -150 550 150 550 300 500 400 400 450 250 450 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_BIG_SMALL
+#
+DEF YUS_BIG_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_BIG_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 0 0 350 -300 700 300 700 0 350 N
+P 10 0 1 0 -350 0 -350 150 -300 250 -250 300 -150 350 150 350 250 300 300 250 350 150 350 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_LITTLE_CAP
+#
+DEF YUS_LITTLE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_LITTLE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 400 300 400 N
+P 2 0 1 0 0 400 0 0 N
+P 3 0 1 0 -500 0 0 1050 500 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# YUS_LITTLE_SMALL
+#
+DEF YUS_LITTLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "YUS_LITTLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 300 200 300 N
+P 2 0 1 0 0 300 0 0 N
+P 3 0 1 0 -350 0 0 700 350 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_CAP
+#
+DEF Z_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_CAP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -350 1050 350 1050 -350 0 350 0 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -350 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 350 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 550 100 R 50 50 1 1 I
+X TOP1 ~ -350 1050 100 R 50 50 1 1 I
+X TOP2 ~ 350 1050 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_SMALL
+#
+DEF Z_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 700 250 700 -300 0 250 0 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X BOTTOM2 ~ 250 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -300 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_SMALL_CURL
+#
+DEF Z_SMALL_CURL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_SMALL_CURL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 700 250 700 -300 0 100 0 200 50 250 150 200 250 100 300 0 250 -200 -150 N
+X BOTTOM1 ~ -300 0 100 R 50 50 1 1 I
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -300 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# Z_SMALL_SWASHTAIL
+#
+DEF Z_SMALL_SWASHTAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "Z_SMALL_SWASHTAIL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -300 700 250 700 -300 0 -200 0 -100 -50 0 -150 100 -200 250 -200 N
+X MIDDLE ~ 0 350 100 R 50 50 1 1 I
+X TOP1 ~ -300 700 100 R 50 50 1 1 I
+X TOP2 ~ 250 700 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZEMLYA_CAP
+#
+DEF ZEMLYA_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZEMLYA_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 19 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 650 200 600 100 550 250 500 300 450 350 350 350 200 300 100 250 50 150 0 -150 0 -250 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZEMLYA_SMALL
+#
+DEF ZEMLYA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZEMLYA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 15 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 150 200 50 100 0 -100 0 -200 50 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZETA_SMALL
+#
+DEF ZETA_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZETA_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 1050 250 1050 -100 700 -200 550 -250 400 -250 200 -200 100 -150 50 -50 0 50 0 150 -50 200 -150 200 -200 150 -300 50 -350 0 -350 N
+X ABOVE ~ 0 1150 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZHIVETE_CAP
+#
+DEF ZHIVETE_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZHIVETE_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 600 -600 0 N
+P 2 0 1 0 0 0 0 1050 N
+P 2 0 1 0 0 450 -600 1050 N
+P 2 0 1 0 600 0 150 600 N
+P 2 0 1 0 600 1050 0 450 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X BOTTOM3 ~ 600 0 100 R 50 50 1 1 I
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZHIVETE_SMALL
+#
+DEF ZHIVETE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZHIVETE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 350 -400 0 N
+P 2 0 1 0 0 300 -400 700 N
+P 2 0 1 0 0 700 0 0 N
+P 2 0 1 0 400 0 50 350 N
+P 2 0 1 0 400 700 0 300 N
+X BOTTOM3 ~ 400 0 100 R 50 50 1 1 I
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZJE_KOMI_CAP
+#
+DEF ZJE_KOMI_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZJE_KOMI_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 100 550 N
+P 20 0 1 0 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 650 200 600 100 550 200 500 250 450 300 350 300 150 350 50 450 0 600 0 700 50 750 150 750 700 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 950 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ZJE_KOMI_SMALL
+#
+DEF ZJE_KOMI_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ZJE_KOMI_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 350 100 350 N
+P 17 0 1 0 -200 650 -100 700 100 700 200 650 250 550 250 500 200 400 100 350 200 300 250 200 250 150 300 50 400 0 450 0 550 50 600 150 600 500 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/helpers/tools_to_build_newstroke-font/font.pro b/helpers/tools_to_build_newstroke-font/font.pro
new file mode 100644
index 0000000..dfd874a
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font.pro
@@ -0,0 +1,41 @@
+update=Срд 13 Янв 2010 11:45:35
+last_client=eeschema
+[general]
+version=1
+[eeschema]
+version=1
+LibDir=/home/vovanium/projects/kicad-library
+NetFmt=1
+HPGLSpd=20
+HPGLDm=15
+HPGLNum=1
+offX_A4=0
+offY_A4=0
+offX_A3=0
+offY_A3=0
+offX_A2=0
+offY_A2=0
+offX_A1=0
+offY_A1=0
+offX_A0=0
+offY_A0=0
+offX_A=0
+offY_A=0
+offX_B=0
+offY_B=0
+offX_C=0
+offY_C=0
+offX_D=0
+offY_D=0
+offX_E=0
+offY_E=0
+RptD_X=0
+RptD_Y=100
+RptLab=1
+SimCmd=
+UseNetN=0
+LabSize=60
+[eeschema/libraries]
+LibName1=font
+LibName2=power
+LibName3=symbol
diff --git a/helpers/tools_to_build_newstroke-font/font.sch b/helpers/tools_to_build_newstroke-font/font.sch
new file mode 100644
index 0000000..4e30660
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font.sch
@@ -0,0 +1,5128 @@
+EESchema Schematic File Version 2 date Ð’Ñк 31 Янв 2010 21:30:52
+LIBS:font
+LIBS:power
+LIBS:symbol
+LIBS:font-cache
+EELAYER 24 0
+EELAYER END
+$Descr A0 46800 33070
+Sheet 1 2
+Title ""
+Date "19 dec 2009"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L RHO_TINY U?
+U 1 1 4B65E0E7
+P 36900 19500
+F 0 "U?" H 36900 19250 60 0000 C CNN
+F 1 "RHO_TINY" H 36900 19150 60 0000 C CNN
+ 1 36900 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_AFR_TINYCAP_TURNED U?
+U 1 1 4B65E06C
+P 39900 7500
+F 0 "U?" H 39900 7250 60 0000 C CNN
+F 1 "GAMMA_AFR_TINYCAP_TURNED" H 39900 7150 60 0000 C CNN
+ 1 39900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_TINY_TURNED U?
+U 1 1 4B65DF96
+P 39250 7500
+F 0 "U?" H 39250 7250 60 0000 C CNN
+F 1 "C_TINY_TURNED" H 39250 7150 60 0000 C CNN
+ 1 39250 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L AE_TINY_TURNED U?
+U 1 1 4B65DEE4
+P 11150 7500
+F 0 "U?" H 11150 7250 60 0000 C CNN
+F 1 "AE_TINY_TURNED" H 11150 7150 60 0000 C CNN
+ 1 11150 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL_SIDE U?
+U 1 1 4B65DE12
+P 38400 7500
+F 0 "U?" H 38400 7250 60 0000 C CNN
+F 1 "C_SMALL_SIDE" H 38400 7150 60 0000 C CNN
+ 1 38400 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EZH_SMALL_LOOP U?
+U 1 1 4B65DB9F
+P 37350 25500
+F 0 "U?" H 37350 25250 60 0000 C CNN
+F 1 "EZH_SMALL_LOOP" H 37350 25150 60 0000 C CNN
+ 1 37350 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L UE_SMALL U?
+U 1 1 4B65D983
+P 17150 25500
+F 0 "U?" H 17150 25250 60 0000 C CNN
+F 1 "UE_SMALL" H 17150 25150 60 0000 C CNN
+ 1 17150 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_TINY U?
+U 1 1 4B65D911
+P 36300 19500
+F 0 "U?" H 36300 19250 60 0000 C CNN
+F 1 "R_TINY" H 36300 19150 60 0000 C CNN
+ 1 36300 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHI_TINY U?
+U 1 1 4B65D898
+P 25450 25500
+F 0 "U?" H 25450 25250 60 0000 C CNN
+F 1 "CHI_TINY" H 25450 25150 60 0000 C CNN
+ 1 25450 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_TINY U?
+U 1 1 4B65D7FB
+P 21400 25500
+F 0 "U?" H 21400 25250 60 0000 C CNN
+F 1 "PHI_TINY" H 21400 25150 60 0000 C CNN
+ 1 21400 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DELTA_TINY U?
+U 1 1 4B65D74C
+P 15150 10500
+F 0 "U?" H 15150 10250 60 0000 C CNN
+F 1 "DELTA_TINY" H 15150 10150 60 0000 C CNN
+ 1 15150 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_TINY U?
+U 1 1 4B65D6D3
+P 37500 7500
+F 0 "U?" H 37500 7250 60 0000 C CNN
+F 1 "GAMMA_TINY" H 37500 7150 60 0000 C CNN
+ 1 37500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BETA_TINY U?
+U 1 1 4B65D66B
+P 20600 7500
+F 0 "U?" H 20600 7250 60 0000 C CNN
+F 1 "BETA_TINY" H 20600 7150 60 0000 C CNN
+ 1 20600 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_TINY U?
+U 1 1 4B65D5DC
+P 16150 25500
+F 0 "U?" H 16150 25250 60 0000 C CNN
+F 1 "V_TINY" H 16150 25150 60 0000 C CNN
+ 1 16150 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_TINY_TURNED U?
+U 1 1 4B65D564
+P 25800 16500
+F 0 "U?" H 25800 16250 60 0000 C CNN
+F 1 "M_TINY_TURNED" H 25800 16150 60 0000 C CNN
+ 1 25800 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_TINY_SIDE U?
+U 1 1 4B65D4B2
+P 15400 25500
+F 0 "U?" H 15400 25250 60 0000 C CNN
+F 1 "U_TINY_SIDE" H 15400 25150 60 0000 C CNN
+ 1 15400 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_TINY U?
+U 1 1 4B65D423
+P 14600 25500
+F 0 "U?" H 14600 25250 60 0000 C CNN
+F 1 "U_TINY" H 14600 25150 60 0000 C CNN
+ 1 14600 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_TINY U?
+U 1 1 4B65D3C4
+P 29600 22500
+F 0 "U?" H 29600 22250 60 0000 C CNN
+F 1 "T_TINY" H 29600 22150 60 0000 C CNN
+ 1 29600 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_TINY U?
+U 1 1 4B65D34E
+P 35650 19500
+F 0 "U?" H 35650 19250 60 0000 C CNN
+F 1 "P_TINY" H 35650 19150 60 0000 C CNN
+ 1 35650 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_TINY_HALF_TOP U?
+U 1 1 4B65D2EF
+P 20950 19500
+F 0 "U?" H 20950 19250 60 0000 C CNN
+F 1 "O_TINY_HALF_TOP" H 20950 19150 60 0000 C CNN
+ 1 20950 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_TINY_HALF U?
+U 1 1 4B65D2BA
+P 20250 19500
+F 0 "U?" H 20250 19250 60 0000 C CNN
+F 1 "O_TINY_HALF" H 20250 19150 60 0000 C CNN
+ 1 20250 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ENG_TINY U?
+U 1 1 4B65D252
+P 34450 16500
+F 0 "U?" H 34450 16250 60 0000 C CNN
+F 1 "ENG_TINY" H 34450 16150 60 0000 C CNN
+ 1 34450 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_TINY U?
+U 1 1 4B65CB37
+P 24700 16500
+F 0 "U?" H 24700 16250 60 0000 C CNN
+F 1 "M_TINY" H 24700 16150 60 0000 C CNN
+ 1 24700 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_TINY U?
+U 1 1 4B65CA99
+P 44600 13500
+F 0 "U?" H 44600 13250 60 0000 C CNN
+F 1 "K_TINY" H 44600 13150 60 0000 C CNN
+ 1 44600 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_TINY U?
+U 1 1 4B65C9D3
+P 36800 7500
+F 0 "U?" H 36800 7250 60 0000 C CNN
+F 1 "G_TINY" H 36800 7150 60 0000 C CNN
+ 1 36800 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_TINY_TURNED U?
+U 1 1 4B65C928
+P 32550 10500
+F 0 "U?" H 32550 10250 60 0000 C CNN
+F 1 "EPSILON_TINY_TURNED" H 32550 10150 60 0000 C CNN
+ 1 32550 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_TINY U?
+U 1 1 4B65C8CC
+P 31950 10500
+F 0 "U?" H 31950 10250 60 0000 C CNN
+F 1 "EPSILON_TINY" H 31950 10150 60 0000 C CNN
+ 1 31950 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_TINY U?
+U 1 1 4B65C870
+P 14450 10500
+F 0 "U?" H 14450 10250 60 0000 C CNN
+F 1 "D_TINY" H 14450 10150 60 0000 C CNN
+ 1 14450 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_TINY U?
+U 1 1 4B65C825
+P 19900 7500
+F 0 "U?" H 19900 7250 60 0000 C CNN
+F 1 "B_TINY" H 19900 7150 60 0000 C CNN
+ 1 19900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_TINY U?
+U 1 1 4B65C780
+P 10100 7500
+F 0 "U?" H 10100 7250 60 0000 C CNN
+F 1 "ALPHA_TINY" H 10100 7150 60 0000 C CNN
+ 1 10100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_TINY_TURNED U?
+U 1 1 4B65C698
+P 9200 7500
+F 0 "U?" H 9200 7250 60 0000 C CNN
+F 1 "A_TINY_TURNED" H 9200 7150 60 0000 C CNN
+ 1 9200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OU_SMALLCAP U?
+U 1 1 4B65C612
+P 19350 19500
+F 0 "U?" H 19350 19250 60 0000 C CNN
+F 1 "OU_SMALLCAP" H 19350 19150 60 0000 C CNN
+ 1 19350 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSI_SMALLCAP U?
+U 1 1 4B65C547
+P 27350 25500
+F 0 "U?" H 27350 25250 60 0000 C CNN
+F 1 "PSI_SMALLCAP" H 27350 25150 60 0000 C CNN
+ 1 27350 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LAMBDA_SMALLCAP U?
+U 1 1 4B65C488
+P 14300 16500
+F 0 "U?" H 14300 16250 60 0000 C CNN
+F 1 "LAMBDA_SMALLCAP" H 14300 16150 60 0000 C CNN
+ 1 14300 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_SMALL_SIDE U?
+U 1 1 4B65C338
+P 23600 16500
+F 0 "U?" H 23600 16250 60 0000 C CNN
+F 1 "M_SMALL_SIDE" H 23600 16150 60 0000 C CNN
+ 1 23600 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_SMALL_SIDE U?
+U 1 1 4B65C24B
+P 43150 31500
+F 0 "U?" H 43150 31250 60 0000 C CNN
+F 1 "U_SMALL_SIDE" H 43150 31150 60 0000 C CNN
+ 1 43150 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAERESIS_SIDE U?
+U 1 1 4B65C240
+P 42550 31500
+F 0 "U?" H 42550 31250 60 0000 C CNN
+F 1 "DIAERESIS_SIDE" H 42550 31150 60 0000 C CNN
+ 1 42550 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_SMALL_SIDE U?
+U 1 1 4B65C1E3
+P 13700 25500
+F 0 "U?" H 13700 25250 60 0000 C CNN
+F 1 "U_SMALL_SIDE" H 13700 25150 60 0000 C CNN
+ 1 13700 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_SMALLCAP U?
+U 1 1 4B65C0F2
+P 12700 25500
+F 0 "U?" H 12700 25250 60 0000 C CNN
+F 1 "U_SMALLCAP" H 12700 25150 60 0000 C CNN
+ 1 12700 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_SMALLCAP U?
+U 1 1 4B65C061
+P 34850 19500
+F 0 "U?" H 34850 19250 60 0000 C CNN
+F 1 "P_SMALLCAP" H 34850 19150 60 0000 C CNN
+ 1 34850 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_HALF U?
+U 1 1 4B65BF85
+P 18350 19500
+F 0 "U?" H 18350 19250 60 0000 C CNN
+F 1 "O_SMALL_HALF" H 18350 19150 60 0000 C CNN
+ 1 18350 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_STROKE_SIDE U?
+U 1 1 4B65BF52
+P 17300 19500
+F 0 "U?" H 17300 19250 60 0000 C CNN
+F 1 "O_SMALL_STROKE_SIDE" H 17300 19150 60 0000 C CNN
+ 1 17300 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_SIDE U?
+U 1 1 4B65BF18
+P 16200 19500
+F 0 "U?" H 16200 19250 60 0000 C CNN
+F 1 "O_SMALL_SIDE" H 16200 19150 60 0000 C CNN
+ 1 16200 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_SMALLCAP U?
+U 1 1 4B65BE51
+P 33850 13500
+F 0 "U?" H 33850 13250 60 0000 C CNN
+F 1 "J_SMALLCAP" H 33850 13150 60 0000 C CNN
+ 1 33850 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALLCAP U?
+U 1 1 4B65BDC5
+P 31300 10500
+F 0 "U?" H 31300 10250 60 0000 C CNN
+F 1 "E_SMALLCAP" H 31300 10150 60 0000 C CNN
+ 1 31300 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALLCAP U?
+U 1 1 4B65BDBB
+P 13650 10500
+F 0 "U?" H 13650 10250 60 0000 C CNN
+F 1 "D_SMALLCAP" H 13650 10150 60 0000 C CNN
+ 1 13650 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L AE_SMALLCAP U?
+U 1 1 4B65BC61
+P 8300 7500
+F 0 "U?" H 8300 7250 60 0000 C CNN
+F 1 "AE_SMALLCAP" H 8300 7150 60 0000 C CNN
+ 1 8300 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALLCAP U?
+U 1 1 4B65BB86
+P 7400 7500
+F 0 "U?" H 7400 7250 60 0000 C CNN
+F 1 "A_SMALLCAP" H 7400 7150 60 0000 C CNN
+ 1 7400 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESZETT_CAP U?
+U 1 1 4B631AD8
+P 8600 21000
+F 0 "U?" H 8600 20750 60 0000 C CNN
+F 1 "ESZETT_CAP" H 8600 20650 60 0000 C CNN
+ 1 8600 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ACUTE_DOT U?
+U 1 1 4B631960
+P 31200 30000
+F 0 "U?" H 31200 29750 60 0000 C CNN
+F 1 "ACUTE_DOT" H 31200 29650 60 0000 C CNN
+ 1 31200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_SMALL U?
+U 1 1 4B631955
+P 31200 30000
+F 0 "U?" H 31200 29750 60 0000 C CNN
+F 1 "S_SMALL" H 31200 29650 60 0000 C CNN
+ 1 31200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L RING_HALF U?
+U 1 1 4B6317FB
+P 30250 30000
+F 0 "U?" H 30250 29750 60 0000 C CNN
+F 1 "RING_HALF" H 30250 29650 60 0000 C CNN
+ 1 30250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_HOOK U?
+U 1 1 4B63171E
+P 26250 30000
+F 0 "U?" H 26250 29750 60 0000 C CNN
+F 1 "BREVE_HOOK" H 26250 29650 60 0000 C CNN
+ 1 26250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B631712
+P 26250 30000
+F 0 "U?" H 26250 29750 60 0000 C CNN
+F 1 "A_SMALL" H 26250 29650 60 0000 C CNN
+ 1 26250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX_GRAVE U?
+U 1 1 4B631692
+P 25300 30000
+F 0 "U?" H 25300 29750 60 0000 C CNN
+F 1 "CIRCUMFLEX_GRAVE" H 25300 29650 60 0000 C CNN
+ 1 25300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX_ACUTE U?
+U 1 1 4B63168A
+P 24350 30000
+F 0 "U?" H 24350 29750 60 0000 C CNN
+F 1 "CIRCUMFLEX_ACUTE" H 24350 29650 60 0000 C CNN
+ 1 24350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B631680
+P 25300 30000
+F 0 "U?" H 25300 29750 60 0000 C CNN
+F 1 "A_SMALL" H 25300 29650 60 0000 C CNN
+ 1 25300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B631676
+P 24350 30000
+F 0 "U?" H 24350 29750 60 0000 C CNN
+F 1 "A_SMALL" H 24350 29650 60 0000 C CNN
+ 1 24350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX_HOOK U?
+U 1 1 4B6315F2
+P 23400 30000
+F 0 "U?" H 23400 29750 60 0000 C CNN
+F 1 "CIRCUMFLEX_HOOK" H 23400 29650 60 0000 C CNN
+ 1 23400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B6315EA
+P 23400 30000
+F 0 "U?" H 23400 29750 60 0000 C CNN
+F 1 "A_SMALL" H 23400 29650 60 0000 C CNN
+ 1 23400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LL_SMALL U?
+U 1 1 4B631516
+P 13450 16500
+F 0 "U?" H 13450 16250 60 0000 C CNN
+F 1 "LL_SMALL" H 13450 16150 60 0000 C CNN
+ 1 13450 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LL_CAP U?
+U 1 1 4B6314CA
+P 8700 15000
+F 0 "U?" H 8700 14750 60 0000 C CNN
+F 1 "LL_CAP" H 8700 14650 60 0000 C CNN
+ 1 8700 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_MIDWELSH_CAP U?
+U 1 1 4B631419
+P 11350 24000
+F 0 "U?" H 11350 23750 60 0000 C CNN
+F 1 "V_MIDWELSH_CAP" H 11350 23650 60 0000 C CNN
+ 1 11350 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_MIDWELSH_SMALL U?
+U 1 1 4B63136F
+P 11750 25500
+F 0 "U?" H 11750 25250 60 0000 C CNN
+F 1 "V_MIDWELSH_SMALL" H 11750 25150 60 0000 C CNN
+ 1 11750 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALL_LOOP U?
+U 1 1 4B63128F
+P 10850 25500
+F 0 "U?" H 10850 25250 60 0000 C CNN
+F 1 "Y_SMALL_LOOP" H 10850 25150 60 0000 C CNN
+ 1 10850 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62F1E4
+P 30250 30000
+F 0 "U?" H 30250 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 30250 29650 60 0000 C CNN
+ 1 30250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASIA_OXIA U?
+U 1 1 4B62EFF7
+P 22400 30000
+F 0 "U?" H 22400 29750 60 0000 C CNN
+F 1 "DASIA_OXIA" H 22400 29650 60 0000 C CNN
+ 1 22400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSILI_OXIA U?
+U 1 1 4B62EFEE
+P 21350 30000
+F 0 "U?" H 21350 29750 60 0000 C CNN
+F 1 "PSILI_OXIA" H 21350 29650 60 0000 C CNN
+ 1 21350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASIA_VARIA U?
+U 1 1 4B62EFE0
+P 20300 30000
+F 0 "U?" H 20300 29750 60 0000 C CNN
+F 1 "DASIA_VARIA" H 20300 29650 60 0000 C CNN
+ 1 20300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSILI_VARIA U?
+U 1 1 4B62EFC6
+P 19250 30000
+F 0 "U?" H 19250 29750 60 0000 C CNN
+F 1 "PSILI_VARIA" H 19250 29650 60 0000 C CNN
+ 1 19250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62EFAC
+P 22400 30000
+F 0 "U?" H 22400 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 22400 29650 60 0000 C CNN
+ 1 22400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62EFA7
+P 21350 30000
+F 0 "U?" H 21350 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 21350 29650 60 0000 C CNN
+ 1 21350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62EFA3
+P 20300 30000
+F 0 "U?" H 20300 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 20300 29650 60 0000 C CNN
+ 1 20300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62EF99
+P 19250 30000
+F 0 "U?" H 19250 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 19250 29650 60 0000 C CNN
+ 1 19250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASIA U?
+U 1 1 4B62ED43
+P 18200 30000
+F 0 "U?" H 18200 29750 60 0000 C CNN
+F 1 "DASIA" H 18200 29650 60 0000 C CNN
+ 1 18200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62ED35
+P 18200 30000
+F 0 "U?" H 18200 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 18200 29650 60 0000 C CNN
+ 1 18200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSILI U?
+U 1 1 4B62DB66
+P 17150 30000
+F 0 "U?" H 17150 29750 60 0000 C CNN
+F 1 "PSILI" H 17150 29650 60 0000 C CNN
+ 1 17150 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B62DB45
+P 17150 30000
+F 0 "U?" H 17150 29750 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 17150 29650 60 0000 C CNN
+ 1 17150 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L MIDDLE_HOOK_CAP U?
+U 1 1 4B62CEEC
+P 41450 31500
+F 0 "U?" H 41450 31250 60 0000 C CNN
+F 1 "MIDDLE_HOOK_CAP" H 41450 31150 60 0000 C CNN
+ 1 41450 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_CAP U?
+U 1 1 4B62CEE4
+P 41150 31500
+F 0 "U?" H 41150 31250 60 0000 C CNN
+F 1 "PI_CAP" H 41150 31150 60 0000 C CNN
+ 1 41150 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MIDDLE_HOOK_SMALL U?
+U 1 1 4B62CD59
+P 39950 31500
+F 0 "U?" H 39950 31250 60 0000 C CNN
+F 1 "MIDDLE_HOOK_SMALL" H 39950 31150 60 0000 C CNN
+ 1 39950 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_SMALLCAP U?
+U 1 1 4B62CD4E
+P 39750 31500
+F 0 "U?" H 39750 31250 60 0000 C CNN
+F 1 "PI_SMALLCAP" H 39750 31150 60 0000 C CNN
+ 1 39750 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PENNY_GERMAN U?
+U 1 1 4B61FA44
+P 40150 4500
+F 0 "U?" H 40150 4250 60 0000 C CNN
+F 1 "PENNY_GERMAN" H 40150 4150 60 0000 C CNN
+ 1 40150 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_SMALL_H_DBL U?
+U 1 1 4B61F7E1
+P 38850 31350
+F 0 "U?" H 38850 31100 60 0000 C CNN
+F 1 "SLASH_SMALL_H_DBL" H 38850 31000 60 0000 C CNN
+ 1 38850 31350
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP U?
+U 1 1 4B61F7CA
+P 38850 31500
+F 0 "U?" H 38850 31250 60 0000 C CNN
+F 1 "T_CAP" H 38850 31150 60 0000 C CNN
+ 1 38850 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EURO U?
+U 1 1 4B61F5AD
+P 39150 4500
+F 0 "U?" H 39150 4250 60 0000 C CNN
+F 1 "EURO" H 39150 4150 60 0000 C CNN
+ 1 39150 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SHEQUEL_NEW U?
+U 1 1 4B61F3C3
+P 37850 4500
+F 0 "U?" H 37850 4250 60 0000 C CNN
+F 1 "SHEQUEL_NEW" H 37850 4150 60 0000 C CNN
+ 1 37850 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L FRAC_LINE U?
+U 1 1 4B61EBA1
+P 10350 4500
+F 0 "U?" H 10350 4250 60 0000 C CNN
+F 1 "FRAC_LINE" H 10350 4150 60 0000 C CNN
+ 1 10350 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TIE U?
+U 1 1 4B616912
+P 12300 4500
+F 0 "U?" H 12300 4250 60 0000 C CNN
+F 1 "TIE" H 12300 4150 60 0000 C CNN
+ 1 12300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DZ_SMALL U?
+U 1 1 4B5F1794
+P 7650 10500
+F 0 "U?" H 7650 10250 60 0000 C CNN
+F 1 "DZ_SMALL" H 7650 10150 60 0000 C CNN
+ 1 7650 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ECU U?
+U 1 1 4B61B856
+P 33750 4500
+F 0 "U?" H 33750 4250 60 0000 C CNN
+F 1 "ECU" H 33750 4150 60 0000 C CNN
+ 1 33750 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE_BRACKET U?
+U 1 1 4B619E04
+P 26750 3000
+F 0 "U?" H 26750 2750 60 0000 C CNN
+F 1 "ANGLE_BRACKET" H 26750 2650 60 0000 C CNN
+ 1 26750 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ET_TIRONIAN U?
+U 1 1 4B616AFF
+P 20300 4500
+F 0 "U?" H 20300 4250 60 0000 C CNN
+F 1 "ET_TIRONIAN" H 20300 4150 60 0000 C CNN
+ 1 20300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACKET_QUILL U?
+U 1 1 4B616A7E
+P 23250 3000
+F 0 "U?" H 23250 2750 60 0000 C CNN
+F 1 "BRACKET_QUILL" H 23250 2650 60 0000 C CNN
+ 1 23250 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ABZUEGLICH U?
+U 1 1 4B616A23
+P 9400 4500
+F 0 "U?" H 9400 4250 60 0000 C CNN
+F 1 "ABZUEGLICH" H 9400 4150 60 0000 C CNN
+ 1 9400 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BULLET_LEFT U?
+U 1 1 4B6166E7
+P 30350 4500
+F 0 "U?" H 30350 4250 60 0000 C CNN
+F 1 "BULLET_LEFT" H 30350 4150 60 0000 C CNN
+ 1 30350 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTERROBANG U?
+U 1 1 4B616613
+P 29400 4500
+F 0 "U?" H 29400 4250 60 0000 C CNN
+F 1 "INTERROBANG" H 29400 4150 60 0000 C CNN
+ 1 29400 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EZH_SMALL_CURL U?
+U 1 1 4B605899
+P 34750 25500
+F 0 "U?" H 34750 25250 60 0000 C CNN
+F 1 "EZH_SMALL_CURL" H 34750 25150 60 0000 C CNN
+ 1 34750 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALL_RETROHOOK U?
+U 1 1 4B60547E
+P 22400 13500
+F 0 "U?" H 22400 13250 60 0000 C CNN
+F 1 "H_SMALL_RETROHOOK" H 22400 13150 60 0000 C CNN
+ 1 22400 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BIDENTAL_PERCUSSIVE U?
+U 1 1 4B6053E9
+P 36100 4500
+F 0 "U?" H 36100 4250 60 0000 C CNN
+F 1 "BIDENTAL_PERCUSSIVE" H 36100 4150 60 0000 C CNN
+ 1 36100 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L W_OVER_W U?
+U 1 1 4B605394
+P 9900 25500
+F 0 "U?" H 9900 25250 60 0000 C CNN
+F 1 "W_OVER_W" H 9900 25150 60 0000 C CNN
+ 1 9900 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LZ_SMALL U?
+U 1 1 4B605315
+P 12450 16500
+F 0 "U?" H 12450 16250 60 0000 C CNN
+F 1 "LZ_SMALL" H 12450 16150 60 0000 C CNN
+ 1 12450 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LS_SMALL U?
+U 1 1 4B60526C
+P 11350 16500
+F 0 "U?" H 11350 16250 60 0000 C CNN
+F 1 "LS_SMALL" H 11350 16150 60 0000 C CNN
+ 1 11350 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L FENG_SMALL U?
+U 1 1 4B60513B
+P 35900 7500
+F 0 "U?" H 35900 7250 60 0000 C CNN
+F 1 "FENG_SMALL" H 35900 7150 60 0000 C CNN
+ 1 35900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TC_SMALL_CURL U?
+U 1 1 4B6050A3
+P 28800 22500
+F 0 "U?" H 28800 22250 60 0000 C CNN
+F 1 "TC_SMALL_CURL" H 28800 22150 60 0000 C CNN
+ 1 28800 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TESH_SMALL U?
+U 1 1 4B604FD9
+P 27750 22500
+F 0 "U?" H 27750 22250 60 0000 C CNN
+F 1 "TESH_SMALL" H 27750 22150 60 0000 C CNN
+ 1 27750 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TS_SMALL U?
+U 1 1 4B604EB8
+P 26700 22500
+F 0 "U?" H 26700 22250 60 0000 C CNN
+F 1 "TS_SMALL" H 26700 22150 60 0000 C CNN
+ 1 26700 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DZ_SMALL_CURL U?
+U 1 1 4B604DD8
+P 11200 10500
+F 0 "U?" H 11200 10250 60 0000 C CNN
+F 1 "DZ_SMALL_CURL" H 11200 10150 60 0000 C CNN
+ 1 11200 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DEZH_SMALL U?
+U 1 1 4B604D70
+P 12550 10500
+F 0 "U?" H 12550 10250 60 0000 C CNN
+F 1 "DEZH_SMALL" H 12550 10150 60 0000 C CNN
+ 1 12550 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALLCAP U?
+U 1 1 4B604CB5
+P 10450 16500
+F 0 "U?" H 10450 16250 60 0000 C CNN
+F 1 "L_SMALLCAP" H 10450 16150 60 0000 C CNN
+ 1 10450 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_SMALL_CURL U?
+U 1 1 4B604C59
+P 32850 13500
+F 0 "U?" H 32850 13250 60 0000 C CNN
+F 1 "J_SMALL_CURL" H 32850 13150 60 0000 C CNN
+ 1 32850 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_CAP_STRETCHED U?
+U 1 1 4B604B62
+P 32400 6000
+F 0 "U?" H 32400 5750 60 0000 C CNN
+F 1 "C_CAP_STRETCHED" H 32400 5650 60 0000 C CNN
+ 1 32400 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL_RETROHOOK U?
+U 1 1 4B604A86
+P 25800 22500
+F 0 "U?" H 25800 22250 60 0000 C CNN
+F 1 "T_SMALL_RETROHOOK" H 25800 22150 60 0000 C CNN
+ 1 25800 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_SMALL_STROKE U?
+U 1 1 4B604A30
+P 8900 25500
+F 0 "U?" H 8900 25250 60 0000 C CNN
+F 1 "U_SMALL_STROKE" H 8900 25150 60 0000 C CNN
+ 1 8900 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Z_SMALL_CURL U?
+U 1 1 4B6049A6
+P 36550 25500
+F 0 "U?" H 36550 25250 60 0000 C CNN
+F 1 "Z_SMALL_CURL" H 36550 25150 60 0000 C CNN
+ 1 36550 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALLCAP U?
+U 1 1 4B60494B
+P 8050 25500
+F 0 "U?" H 8050 25250 60 0000 C CNN
+F 1 "Y_SMALLCAP" H 8050 25150 60 0000 C CNN
+ 1 8050 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALLCAP U?
+U 1 1 4B6048CB
+P 14400 19500
+F 0 "U?" H 14400 19250 60 0000 C CNN
+F 1 "OMEGA_SMALLCAP" H 14400 19150 60 0000 C CNN
+ 1 14400 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESH_SQUAT_SMALL U?
+U 1 1 4B6047F5
+P 13850 22500
+F 0 "U?" H 13850 22250 60 0000 C CNN
+F 1 "ESH_SQUAT_SMALL" H 13850 22150 60 0000 C CNN
+ 1 13850 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESH_SMALL_CURL U?
+U 1 1 4B6045EF
+P 13150 22500
+F 0 "U?" H 13150 22250 60 0000 C CNN
+F 1 "ESH_SMALL_CURL" H 13150 22150 60 0000 C CNN
+ 1 13150 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESH_SMALL U?
+U 1 1 4B604546
+P 12450 22500
+F 0 "U?" H 12450 22250 60 0000 C CNN
+F 1 "ESH_SMALL" H 12450 22150 60 0000 C CNN
+ 1 12450 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_SMALLCAP U?
+U 1 1 4B6044C1
+P 33950 19500
+F 0 "U?" H 33950 19250 60 0000 C CNN
+F 1 "R_SMALLCAP" H 33950 19150 60 0000 C CNN
+ 1 33950 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_SMALL_FISHHOOK U?
+U 1 1 4B60441C
+P 33200 19500
+F 0 "U?" H 33200 19250 60 0000 C CNN
+F 1 "R_SMALL_FISHHOOK" H 33200 19150 60 0000 C CNN
+ 1 33200 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALL_CLOSED U?
+U 1 1 4B6043A4
+P 13350 19500
+F 0 "U?" H 13350 19250 60 0000 C CNN
+F 1 "OMEGA_SMALL_CLOSED" H 13350 19150 60 0000 C CNN
+ 1 13350 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OE_SMALLCAP U?
+U 1 1 4B604338
+P 12250 19500
+F 0 "U?" H 12250 19250 60 0000 C CNN
+F 1 "OE_SMALLCAP" H 12250 19150 60 0000 C CNN
+ 1 12250 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_SMALLCAP U?
+U 1 1 4B60422F
+P 32900 16500
+F 0 "U?" H 32900 16250 60 0000 C CNN
+F 1 "N_SMALLCAP" H 32900 16150 60 0000 C CNN
+ 1 32900 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LEG U?
+U 1 1 4B6041B5
+P 38050 31500
+F 0 "U?" H 38050 31250 60 0000 C CNN
+F 1 "LEG" H 38050 31150 60 0000 C CNN
+ 1 38050 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_SMALL U?
+U 1 1 4B60417F
+P 38150 31500
+F 0 "U?" H 38150 31250 60 0000 C CNN
+F 1 "R_SMALL" H 38150 31150 60 0000 C CNN
+ 1 38150 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LEZH_SMALL U?
+U 1 1 4B604116
+P 35700 25500
+F 0 "U?" H 35700 25250 60 0000 C CNN
+F 1 "LEZH_SMALL" H 35700 25150 60 0000 C CNN
+ 1 35700 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_RETROHOOK U?
+U 1 1 4B60408F
+P 9750 16500
+F 0 "U?" H 9750 16250 60 0000 C CNN
+F 1 "L_SMALL_RETROHOOK" H 9750 16150 60 0000 C CNN
+ 1 9750 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_BELT U?
+U 1 1 4B604028
+P 9150 16500
+F 0 "U?" H 9150 16250 60 0000 C CNN
+F 1 "L_SMALL_BELT" H 9150 16150 60 0000 C CNN
+ 1 9150 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_SMALLCAP U?
+U 1 1 4B603F44
+P 32300 13500
+F 0 "U?" H 32300 13250 60 0000 C CNN
+F 1 "I_SMALLCAP" H 32300 13150 60 0000 C CNN
+ 1 32300 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALL_HOOK U?
+U 1 1 4B603EBC
+P 21450 13500
+F 0 "U?" H 21450 13250 60 0000 C CNN
+F 1 "H_SMALL_HOOK" H 21450 13150 60 0000 C CNN
+ 1 21450 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_AFR_SMALLCAP U?
+U 1 1 4B603E7B
+P 34900 7500
+F 0 "U?" H 34900 7250 60 0000 C CNN
+F 1 "GAMMA_AFR_SMALLCAP" H 34900 7150 60 0000 C CNN
+ 1 34900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_AFR_SMALL U?
+U 1 1 4B603E35
+P 34100 7500
+F 0 "U?" H 34100 7250 60 0000 C CNN
+F 1 "GAMMA_AFR_SMALL" H 34100 7150 60 0000 C CNN
+ 1 34100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_SMALL_SCRIPT U?
+U 1 1 4B603D9C
+P 33200 7500
+F 0 "U?" H 33200 7250 60 0000 C CNN
+F 1 "G_SMALL_SCRIPT" H 33200 7150 60 0000 C CNN
+ 1 33200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_SMALL_CLOSED U?
+U 1 1 4B603C6A
+P 28900 10500
+F 0 "U?" H 28900 10250 60 0000 C CNN
+F 1 "EPSILON_SMALL_CLOSED" H 28900 10150 60 0000 C CNN
+ 1 28900 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_SMALL_HOOK U?
+U 1 1 4B603C0F
+P 28050 10500
+F 0 "U?" H 28050 10250 60 0000 C CNN
+F 1 "EPSILON_SMALL_HOOK" H 28050 10150 60 0000 C CNN
+ 1 28050 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL_HOOK U?
+U 1 1 4B603B5F
+P 26850 10500
+F 0 "U?" H 26850 10250 60 0000 C CNN
+F 1 "E_SMALL_HOOK" H 26850 10150 60 0000 C CNN
+ 1 26850 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALL_HOOK U?
+U 1 1 4B603B03
+P 10000 10500
+F 0 "U?" H 10000 10250 60 0000 C CNN
+F 1 "D_SMALL_HOOK" H 10000 10150 60 0000 C CNN
+ 1 10000 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL_CURL U?
+U 1 1 4B603A6A
+P 32350 7500
+F 0 "U?" H 32350 7250 60 0000 C CNN
+F 1 "C_SMALL_CURL" H 32350 7150 60 0000 C CNN
+ 1 32350 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_SMALL_HOOK U?
+U 1 1 4B603A0D
+P 19100 7500
+F 0 "U?" H 19100 7250 60 0000 C CNN
+F 1 "B_SMALL_HOOK" H 19100 7150 60 0000 C CNN
+ 1 19100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DZJE_KOMI_CAP U?
+U 1 1 4B602968
+P 32050 24000
+F 0 "U?" H 32050 23750 60 0000 C CNN
+F 1 "DZJE_KOMI_CAP" H 32050 23650 60 0000 C CNN
+ 1 32050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DZJE_KOMI_SMALL U?
+U 1 1 4B602931
+P 34700 25500
+F 0 "U?" H 34700 25250 60 0000 C CNN
+F 1 "DZJE_KOMI_SMALL" H 34700 25150 60 0000 C CNN
+ 1 34700 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZJE_KOMI_SMALL U?
+U 1 1 4B6028E0
+P 33550 25500
+F 0 "U?" H 33550 25250 60 0000 C CNN
+F 1 "ZJE_KOMI_SMALL" H 33550 25150 60 0000 C CNN
+ 1 33550 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZJE_KOMI_CAP U?
+U 1 1 4B60288C
+P 30650 24000
+F 0 "U?" H 30650 23750 60 0000 C CNN
+F 1 "ZJE_KOMI_CAP" H 30650 23650 60 0000 C CNN
+ 1 30650 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LJE_KOMI_CAP U?
+U 1 1 4B6027D7
+P 7150 15000
+F 0 "U?" H 7150 14750 60 0000 C CNN
+F 1 "LJE_KOMI_CAP" H 7150 14650 60 0000 C CNN
+ 1 7150 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DJE_KOMI_SMALL U?
+U 1 1 4B602783
+P 9000 10500
+F 0 "U?" H 9000 10250 60 0000 C CNN
+F 1 "DJE_KOMI_SMALL" H 9000 10150 60 0000 C CNN
+ 1 9000 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LJE_KOMI_SMALL U?
+U 1 1 4B602774
+P 7950 16500
+F 0 "U?" H 7950 16250 60 0000 C CNN
+F 1 "LJE_KOMI_SMALL" H 7950 16150 60 0000 C CNN
+ 1 7950 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DJE_KOMI_CAP U?
+U 1 1 4B6025E2
+P 5700 9000
+F 0 "U?" H 5700 8750 60 0000 C CNN
+F 1 "DJE_KOMI_CAP" H 5700 8650 60 0000 C CNN
+ 1 5700 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PX_SMALL U?
+U 1 1 4B602421
+P 32250 19500
+F 0 "U?" H 32250 19250 60 0000 C CNN
+F 1 "PX_SMALL" H 32250 19150 60 0000 C CNN
+ 1 32250 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PX_CAP U?
+U 1 1 4B6023D6
+P 32150 18000
+F 0 "U?" H 32150 17750 60 0000 C CNN
+F 1 "PX_CAP" H 32150 17650 60 0000 C CNN
+ 1 32150 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LYUDIX_SMALL U?
+U 1 1 4B60230D
+P 6900 16500
+F 0 "U?" H 6900 16250 60 0000 C CNN
+F 1 "LYUDIX_SMALL" H 6900 16150 60 0000 C CNN
+ 1 6900 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LYUDIX_CAP U?
+U 1 1 4B6022A1
+P 5800 15000
+F 0 "U?" H 5800 14750 60 0000 C CNN
+F 1 "LYUDIX_CAP" H 5800 14650 60 0000 C CNN
+ 1 5800 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YAE_SMALL U?
+U 1 1 4B602104
+P 5500 7500
+F 0 "U?" H 5500 7250 60 0000 C CNN
+F 1 "YAE_SMALL" H 5500 7150 60 0000 C CNN
+ 1 5500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YAE_CAP U?
+U 1 1 4B5F35B5
+P 4450 6000
+F 0 "U?" H 4450 5750 60 0000 C CNN
+F 1 "YAE_CAP" H 4450 5650 60 0000 C CNN
+ 1 4450 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TJE_KOMI_SMALL U?
+U 1 1 4B5F32DC
+P 25000 22500
+F 0 "U?" H 25000 22250 60 0000 C CNN
+F 1 "TJE_KOMI_SMALL" H 25000 22150 60 0000 C CNN
+ 1 25000 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TJE_KOMI_CAP U?
+U 1 1 4B5F32D6
+P 21850 21000
+F 0 "U?" H 21850 20750 60 0000 C CNN
+F 1 "TJE_KOMI_CAP" H 21850 20650 60 0000 C CNN
+ 1 21850 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_SMALLCAP U?
+U 1 1 4B5F315F
+P 31450 7500
+F 0 "U?" H 31450 7250 60 0000 C CNN
+F 1 "G_SMALLCAP" H 31450 7150 60 0000 C CNN
+ 1 31450 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HV_SMALLCAP U?
+U 1 1 4B5F30CE
+P 20350 13500
+F 0 "U?" H 20350 13250 60 0000 C CNN
+F 1 "HV_SMALLCAP" H 20350 13150 60 0000 C CNN
+ 1 20350 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MILLIONS_CYR U?
+U 1 1 4B5F2C4F
+P 43450 3000
+F 0 "U?" H 43450 2750 60 0000 C CNN
+F 1 "MILLIONS_CYR" H 43450 2650 60 0000 C CNN
+ 1 43450 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HUNDRED_THOUSANDS_CYR U?
+U 1 1 4B5F2BA3
+P 41050 3000
+F 0 "U?" H 41050 2750 60 0000 C CNN
+F 1 "HUNDRED_THOUSANDS_CYR" H 41050 2650 60 0000 C CNN
+ 1 41050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PALATALIZATION_CYR U?
+U 1 1 4B5F29F6
+P 29300 30000
+F 0 "U?" H 29300 29750 60 0000 C CNN
+F 1 "PALATALIZATION_CYR" H 29300 29650 60 0000 C CNN
+ 1 29300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LYUDI_SMALL U?
+U 1 1 4B5F29ED
+P 29300 30000
+F 0 "U?" H 29300 29750 60 0000 C CNN
+F 1 "LYUDI_SMALL" H 29300 29650 60 0000 C CNN
+ 1 29300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TITLO U?
+U 1 1 4B5F298D
+P 28350 30000
+F 0 "U?" H 28350 29750 60 0000 C CNN
+F 1 "TITLO" H 28350 29650 60 0000 C CNN
+ 1 28350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B5F2987
+P 28350 30000
+F 0 "U?" H 28350 29750 60 0000 C CNN
+F 1 "A_SMALL" H 28350 29650 60 0000 C CNN
+ 1 28350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L THOUSANDS_CYR U?
+U 1 1 4B5F2916
+P 39400 3000
+F 0 "U?" H 39400 2750 60 0000 C CNN
+F 1 "THOUSANDS_CYR" H 39400 2650 60 0000 C CNN
+ 1 39400 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HV_CAP U?
+U 1 1 4B5F228D
+P 20300 12000
+F 0 "U?" H 20300 11750 60 0000 C CNN
+F 1 "HV_CAP" H 20300 11650 60 0000 C CNN
+ 1 20300 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALL_STROKE U?
+U 1 1 4B5F2046
+P 7300 25500
+F 0 "U?" H 7300 25250 60 0000 C CNN
+F 1 "Y_SMALL_STROKE" H 7300 25150 60 0000 C CNN
+ 1 7300 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_CAP_STROKE U?
+U 1 1 4B5F200C
+P 10350 24000
+F 0 "U?" H 10350 23750 60 0000 C CNN
+F 1 "Y_CAP_STROKE" H 10350 23650 60 0000 C CNN
+ 1 10350 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_SMALL_TAIL U?
+U 1 1 4B5F1F9E
+P 5250 22500
+F 0 "U?" H 5250 22250 60 0000 C CNN
+F 1 "Q_SMALL_TAIL" H 5250 22150 60 0000 C CNN
+ 1 5250 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_LARGE_TAIL U?
+U 1 1 4B5F1F56
+P 4250 21000
+F 0 "U?" H 4250 20750 60 0000 C CNN
+F 1 "Q_LARGE_TAIL" H 4250 20650 60 0000 C CNN
+ 1 4250 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_CAP_STROKE U?
+U 1 1 4B5F1E8E
+P 9350 24000
+F 0 "U?" H 9350 23750 60 0000 C CNN
+F 1 "U_CAP_STROKE" H 9350 23650 60 0000 C CNN
+ 1 9350 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_OGONEK U?
+U 1 1 4B5F1D50
+P 11150 19500
+F 0 "U?" H 11150 19250 60 0000 C CNN
+F 1 "O_SMALL_OGONEK" H 11150 19150 60 0000 C CNN
+ 1 11150 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_CAP_OGONEK U?
+U 1 1 4B5F1D1A
+P 12900 18000
+F 0 "U?" H 12900 17750 60 0000 C CNN
+F 1 "O_CAP_OGONEK" H 12900 17650 60 0000 C CNN
+ 1 12900 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L STROKE_SMALL_H_DBL U?
+U 1 1 4B5F14C9
+P 35700 31500
+F 0 "U?" H 35700 31250 60 0000 C CNN
+F 1 "STROKE_SMALL_H_DBL" H 35700 31150 60 0000 C CNN
+ 1 35700 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_LETTER U?
+U 1 1 4B5F14BB
+P 35700 31500
+F 0 "U?" H 35700 31250 60 0000 C CNN
+F 1 "LINE_V_LETTER" H 35700 31150 60 0000 C CNN
+ 1 35700 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_LETTER_DBL U?
+U 1 1 4B5F1461
+P 38500 3000
+F 0 "U?" H 38500 2750 60 0000 C CNN
+F 1 "LINE_V_LETTER_DBL" H 38500 2650 60 0000 C CNN
+ 1 38500 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_LETTER U?
+U 1 1 4B5F141D
+P 37850 3000
+F 0 "U?" H 37850 2750 60 0000 C CNN
+F 1 "LINE_V_LETTER" H 37850 2650 60 0000 C CNN
+ 1 37850 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALL_HOOK U?
+U 1 1 4B5F13A9
+P 6300 25500
+F 0 "U?" H 6300 25250 60 0000 C CNN
+F 1 "Y_SMALL_HOOK" H 6300 25150 60 0000 C CNN
+ 1 6300 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_CAP_HOOK U?
+U 1 1 4B5F134B
+P 8100 24000
+F 0 "U?" H 8100 23750 60 0000 C CNN
+F 1 "Y_CAP_HOOK" H 8100 23650 60 0000 C CNN
+ 1 8100 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UPSILON_LARGE U?
+U 1 1 4B5F12D5
+P 7100 24000
+F 0 "U?" H 7100 23750 60 0000 C CNN
+F 1 "UPSILON_LARGE" H 7100 23650 60 0000 C CNN
+ 1 7100 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL_HOOK U?
+U 1 1 4B5F11A3
+P 24300 22500
+F 0 "U?" H 24300 22250 60 0000 C CNN
+F 1 "T_SMALL_HOOK" H 24300 22150 60 0000 C CNN
+ 1 24300 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL_CARON U?
+U 1 1 4B5F119E
+P 23600 22500
+F 0 "U?" H 23600 22250 60 0000 C CNN
+F 1 "T_SMALL_CARON" H 23600 22150 60 0000 C CNN
+ 1 23600 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP_HOOK U?
+U 1 1 4B5F10F9
+P 21050 21000
+F 0 "U?" H 21050 20750 60 0000 C CNN
+F 1 "T_CAP_HOOK" H 21050 20650 60 0000 C CNN
+ 1 21050 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_CAP_HOOK U?
+U 1 1 4B5F1069
+P 31000 18000
+F 0 "U?" H 31000 17750 60 0000 C CNN
+F 1 "P_CAP_HOOK" H 31000 17650 60 0000 C CNN
+ 1 31000 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_CAP_HOOK U?
+U 1 1 4B5F1006
+P 44050 12000
+F 0 "U?" H 44050 11750 60 0000 C CNN
+F 1 "K_CAP_HOOK" H 44050 11650 60 0000 C CNN
+ 1 44050 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_AFR_CAP U?
+U 1 1 4B5F0F84
+P 31350 6000
+F 0 "U?" H 31350 5750 60 0000 C CNN
+F 1 "GAMMA_AFR_CAP" H 31350 5650 60 0000 C CNN
+ 1 31350 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_LARGE U?
+U 1 1 4B5F0EBE
+P 27750 9000
+F 0 "U?" H 27750 8750 60 0000 C CNN
+F 1 "EPSILON_LARGE" H 27750 8650 60 0000 C CNN
+ 1 27750 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_CAP_HOOK U?
+U 1 1 4B5F0DD9
+P 4400 9000
+F 0 "U?" H 4400 8750 60 0000 C CNN
+F 1 "D_CAP_HOOK" H 4400 8650 60 0000 C CNN
+ 1 4400 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_SMALL_TOPBAR U?
+U 1 1 4B5F0CAA
+P 18150 7500
+F 0 "U?" H 18150 7250 60 0000 C CNN
+F 1 "B_SMALL_TOPBAR" H 18150 7150 60 0000 C CNN
+ 1 18150 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_CAP_HOOK U?
+U 1 1 4B5F0C82
+P 16850 6000
+F 0 "U?" H 16850 5750 60 0000 C CNN
+F 1 "B_CAP_HOOK" H 16850 5650 60 0000 C CNN
+ 1 16850 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESH_SMALL_LOOP U?
+U 1 1 4B5F0A79
+P 11700 22500
+F 0 "U?" H 11700 22250 60 0000 C CNN
+F 1 "ESH_SMALL_LOOP" H 11700 22150 60 0000 C CNN
+ 1 11700 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YR_CAP U?
+U 1 1 4B5EFE27
+P 29750 18000
+F 0 "U?" H 29750 17750 60 0000 C CNN
+F 1 "YR_CAP" H 29750 17650 60 0000 C CNN
+ 1 29750 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HV_SMALL U?
+U 1 1 4B5EFCBC
+P 19050 13500
+F 0 "U?" H 19050 13250 60 0000 C CNN
+F 1 "HV_SMALL" H 19050 13150 60 0000 C CNN
+ 1 19050 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IOTA_LARGE U?
+U 1 1 4B5EFC06
+P 32050 12000
+F 0 "U?" H 32050 11750 60 0000 C CNN
+F 1 "IOTA_LARGE" H 32050 11650 60 0000 C CNN
+ 1 32050 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_LARGE U?
+U 1 1 4B5EFB5E
+P 21500 15000
+F 0 "U?" H 21500 14750 60 0000 C CNN
+F 1 "M_LARGE" H 21500 14650 60 0000 C CNN
+ 1 21500 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HORN U?
+U 1 1 4B5EFA37
+P 35150 31500
+F 0 "U?" H 35150 31250 60 0000 C CNN
+F 1 "HORN" H 35150 31150 60 0000 C CNN
+ 1 35150 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B5EFA2D
+P 35000 31500
+F 0 "U?" H 35000 31250 60 0000 C CNN
+F 1 "O_SMALL" H 35000 31150 60 0000 C CNN
+ 1 35000 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EZH_SMALL_TAIL U?
+U 1 1 4B5EF89A
+P 32800 25500
+F 0 "U?" H 32800 25250 60 0000 C CNN
+F 1 "EZH_SMALL_TAIL" H 32800 25150 60 0000 C CNN
+ 1 32800 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L RING_ACUTE U?
+U 1 1 4B5EF101
+P 27400 30000
+F 0 "U?" H 27400 29750 60 0000 C CNN
+F 1 "RING_ACUTE" H 27400 29650 60 0000 C CNN
+ 1 27400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B5EF0F2
+P 27400 30000
+F 0 "U?" H 27400 29750 60 0000 C CNN
+F 1 "A_SMALL" H 27400 29650 60 0000 C CNN
+ 1 27400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Z_SMALL_SWASHTAIL U?
+U 1 1 4B5EE337
+P 32000 25500
+F 0 "U?" H 32000 25250 60 0000 C CNN
+F 1 "Z_SMALL_SWASHTAIL" H 32000 25150 60 0000 C CNN
+ 1 32000 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_SMALL_SWASHTAIL U?
+U 1 1 4B5EE2BF
+P 10900 22500
+F 0 "U?" H 10900 22250 60 0000 C CNN
+F 1 "S_SMALL_SWASHTAIL" H 10900 22150 60 0000 C CNN
+ 1 10900 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL_CURL U?
+U 1 1 4B5EE1D1
+P 22800 22500
+F 0 "U?" H 22800 22250 60 0000 C CNN
+F 1 "T_SMALL_CURL" H 22800 22150 60 0000 C CNN
+ 1 22800 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_SMALL_CURL U?
+U 1 1 4B5EE13F
+P 31600 16500
+F 0 "U?" H 31600 16250 60 0000 C CNN
+F 1 "N_SMALL_CURL" H 31600 16150 60 0000 C CNN
+ 1 31600 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_CURL U?
+U 1 1 4B5EE0F4
+P 5700 16500
+F 0 "U?" H 5700 16250 60 0000 C CNN
+F 1 "L_SMALL_CURL" H 5700 16150 60 0000 C CNN
+ 1 5700 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALL_CURL U?
+U 1 1 4B5EE07A
+P 6150 10500
+F 0 "U?" H 6150 10250 60 0000 C CNN
+F 1 "D_SMALL_CURL" H 6150 10150 60 0000 C CNN
+ 1 6150 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HOOK U?
+U 1 1 4B5DBEA9
+P 33400 31500
+F 0 "U?" H 33400 31250 60 0000 C CNN
+F 1 "HOOK" H 33400 31150 60 0000 C CNN
+ 1 33400 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL U?
+U 1 1 4B5DBEA1
+P 33200 31500
+F 0 "U?" H 33200 31250 60 0000 C CNN
+F 1 "T_SMALL" H 33200 31150 60 0000 C CNN
+ 1 33200 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OI_SMALL U?
+U 1 1 4B5DBDA7
+P 10050 19500
+F 0 "U?" H 10050 19250 60 0000 C CNN
+F 1 "OI_SMALL" H 10050 19150 60 0000 C CNN
+ 1 10050 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OI_CAP U?
+U 1 1 4B5DBD09
+P 11600 18000
+F 0 "U?" H 11600 17750 60 0000 C CNN
+F 1 "OI_CAP" H 11600 17650 60 0000 C CNN
+ 1 11600 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L WYNN_CAP U?
+U 1 1 4B5DBC49
+P 32750 27000
+F 0 "U?" H 32750 26750 60 0000 C CNN
+F 1 "WYNN_CAP" H 32750 26650 60 0000 C CNN
+ 1 32750 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L WYNN_SMALL U?
+U 1 1 4B5DBB58
+P 32500 28500
+F 0 "U?" H 32500 28250 60 0000 C CNN
+F 1 "WYNN_SMALL" H 32500 28150 60 0000 C CNN
+ 1 32500 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L QP_SMALL U?
+U 1 1 4B5DA65B
+P 4100 22500
+F 0 "U?" H 4100 22250 60 0000 C CNN
+F 1 "QP_SMALL" H 4100 22150 60 0000 C CNN
+ 1 4100 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DB_SMALL U?
+U 1 1 4B5DA60D
+P 5000 10500
+F 0 "U?" H 5000 10250 60 0000 C CNN
+F 1 "DB_SMALL" H 5000 10150 60 0000 C CNN
+ 1 5000 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OU_CAP U?
+U 1 1 4B5DA4E1
+P 10350 18000
+F 0 "U?" H 10350 17750 60 0000 C CNN
+F 1 "OU_CAP" H 10350 17650 60 0000 C CNN
+ 1 10350 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OU_SMALL U?
+U 1 1 4B5DA4D5
+P 8950 19500
+F 0 "U?" H 8950 19250 60 0000 C CNN
+F 1 "OU_SMALL" H 8950 19150 60 0000 C CNN
+ 1 8950 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YOGH_SMALL U?
+U 1 1 4B5DA2E0
+P 30500 7500
+F 0 "U?" H 30500 7250 60 0000 C CNN
+F 1 "YOGH_SMALL" H 30500 7150 60 0000 C CNN
+ 1 30500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YOGH_CAP U?
+U 1 1 4B5DA20A
+P 30350 6000
+F 0 "U?" H 30350 5750 60 0000 C CNN
+F 1 "YOGH_CAP" H 30350 5650 60 0000 C CNN
+ 1 30350 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_SMALL U?
+U 1 1 4B5D9798
+P 30650 31500
+F 0 "U?" H 30650 31250 60 0000 C CNN
+F 1 "SLASH_SMALL" H 30650 31150 60 0000 C CNN
+ 1 30650 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B5D9790
+P 30650 31500
+F 0 "U?" H 30650 31250 60 0000 C CNN
+F 1 "C_SMALL" H 30650 31150 60 0000 C CNN
+ 1 30650 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_CAP U?
+U 1 1 4B5D9720
+P 29700 31500
+F 0 "U?" H 29700 31250 60 0000 C CNN
+F 1 "SLASH_CAP" H 29700 31150 60 0000 C CNN
+ 1 29700 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_CAP U?
+U 1 1 4B5D9718
+P 29700 31500
+F 0 "U?" H 29700 31250 60 0000 C CNN
+F 1 "A_CAP" H 29700 31150 60 0000 C CNN
+ 1 29700 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOT_MACRON U?
+U 1 1 4B5D96BD
+P 16200 30000
+F 0 "U?" H 16200 29750 60 0000 C CNN
+F 1 "DOT_MACRON" H 16200 29650 60 0000 C CNN
+ 1 16200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B5D96B5
+P 16200 30000
+F 0 "U?" H 16200 29750 60 0000 C CNN
+F 1 "O_SMALL" H 16200 29650 60 0000 C CNN
+ 1 16200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TILDE_MACRON U?
+U 1 1 4B5D966E
+P 15250 30000
+F 0 "U?" H 15250 29750 60 0000 C CNN
+F 1 "TILDE_MACRON" H 15250 29650 60 0000 C CNN
+ 1 15250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B5D9662
+P 15250 30000
+F 0 "U?" H 15250 29750 60 0000 C CNN
+F 1 "O_SMALL" H 15250 29650 60 0000 C CNN
+ 1 15250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_INV U?
+U 1 1 4B5D94AD
+P 13300 30000
+F 0 "U?" H 13300 29750 60 0000 C CNN
+F 1 "BREVE_INV" H 13300 29650 60 0000 C CNN
+ 1 13300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B5D94A4
+P 13300 30000
+F 0 "U?" H 13300 29750 60 0000 C CNN
+F 1 "A_SMALL" H 13300 29650 60 0000 C CNN
+ 1 13300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L EZH_SMALL U?
+U 1 1 4B59D9EC
+P 31150 25500
+F 0 "U?" H 31150 25250 60 0000 C CNN
+F 1 "EZH_SMALL" H 31150 25150 60 0000 C CNN
+ 1 31150 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GRAVE_DBL U?
+U 1 1 4B59D775
+P 12450 30000
+F 0 "U?" H 12450 29750 60 0000 C CNN
+F 1 "GRAVE_DBL" H 12450 29650 60 0000 C CNN
+ 1 12450 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_SMALL U?
+U 1 1 4B59D76C
+P 12450 30000
+F 0 "U?" H 12450 29750 60 0000 C CNN
+F 1 "V_SMALL" H 12450 29650 60 0000 C CNN
+ 1 12450 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KOPPA_CYR_SMALL U?
+U 1 1 4B59D566
+P 3000 22500
+F 0 "U?" H 3000 22250 60 0000 C CNN
+F 1 "KOPPA_CYR_SMALL" H 3000 22150 60 0000 C CNN
+ 1 3000 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KOPPA_CYR_CAP U?
+U 1 1 4B59D4B6
+P 3300 21000
+F 0 "U?" H 3300 20750 60 0000 C CNN
+F 1 "KOPPA_CYR_CAP" H 3300 20650 60 0000 C CNN
+ 1 3300 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP_ABOVE U?
+U 1 1 4B59D385
+P 11500 30000
+F 0 "U?" H 11500 29750 60 0000 C CNN
+F 1 "T_CAP_ABOVE" H 11500 29650 60 0000 C CNN
+ 1 11500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALL U?
+U 1 1 4B59D37A
+P 11500 30000
+F 0 "U?" H 11500 29750 60 0000 C CNN
+F 1 "OMEGA_SMALL" H 11500 29650 60 0000 C CNN
+ 1 11500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L POKRYTIE U?
+U 1 1 4B59D2EA
+P 10400 30000
+F 0 "U?" H 10400 29750 60 0000 C CNN
+F 1 "POKRYTIE" H 10400 29650 60 0000 C CNN
+ 1 10400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALL U?
+U 1 1 4B59D2E1
+P 10400 30000
+F 0 "U?" H 10400 29750 60 0000 C CNN
+F 1 "OMEGA_SMALL" H 10400 29650 60 0000 C CNN
+ 1 10400 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_ROUND_SMALL U?
+U 1 1 4B59D147
+P 8000 19500
+F 0 "U?" H 8000 19250 60 0000 C CNN
+F 1 "OMEGA_ROUND_SMALL" H 8000 19150 60 0000 C CNN
+ 1 8000 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_ROUND_CAP U?
+U 1 1 4B59D0DA
+P 9050 18000
+F 0 "U?" H 9050 17750 60 0000 C CNN
+F 1 "OMEGA_ROUND_CAP" H 9050 17650 60 0000 C CNN
+ 1 9050 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KSI_SMALL U?
+U 1 1 4B59CCB5
+P 39350 16500
+F 0 "U?" H 39350 16250 60 0000 C CNN
+F 1 "KSI_SMALL" H 39350 16150 60 0000 C CNN
+ 1 39350 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KSI_CAP U?
+U 1 1 4B59CCB0
+P 39500 14950
+F 0 "U?" H 39500 14700 60 0000 C CNN
+F 1 "KSI_CAP" H 39500 14600 60 0000 C CNN
+ 1 39500 14950
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_SMALL_V U?
+U 1 1 4B59CAE1
+P 750 31500
+F 0 "U?" H 750 31250 60 0000 C CNN
+F 1 "SLASH_SMALL_V" H 750 31150 60 0000 C CNN
+ 1 750 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SEMISOFT_SMALL U?
+U 1 1 4B59C75D
+P 45700 25500
+F 0 "U?" H 45700 25250 60 0000 C CNN
+F 1 "SEMISOFT_SMALL" H 45700 25150 60 0000 C CNN
+ 1 45700 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_SMALLCAP_UPTURN U?
+U 1 1 4B59C63F
+P 29750 7500
+F 0 "U?" H 29750 7250 60 0000 C CNN
+F 1 "GAMMA_SMALLCAP_UPTURN" H 29750 7150 60 0000 C CNN
+ 1 29750 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_CAP_UPTURN U?
+U 1 1 4B59C5FD
+P 29500 6000
+F 0 "U?" H 29500 5750 60 0000 C CNN
+F 1 "GAMMA_CAP_UPTURN" H 29500 5650 60 0000 C CNN
+ 1 29500 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HA_ABKHAZ_SMALL U?
+U 1 1 4B59C561
+P 31500 28500
+F 0 "U?" H 31500 28250 60 0000 C CNN
+F 1 "HA_ABKHAZ_SMALL" H 31500 28150 60 0000 C CNN
+ 1 31500 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HA_ABKHAZ_CAP U?
+U 1 1 4B59C504
+P 31600 27000
+F 0 "U?" H 31600 26750 60 0000 C CNN
+F 1 "HA_ABKHAZ_CAP" H 31600 26650 60 0000 C CNN
+ 1 31600 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HGAMMA_SMALLCAP U?
+U 1 1 4B59C121
+P 17650 13500
+F 0 "U?" H 17650 13250 60 0000 C CNN
+F 1 "HGAMMA_SMALLCAP" H 17650 13150 60 0000 C CNN
+ 1 17650 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HGAMMA_CAP U?
+U 1 1 4B59C0B4
+P 18600 12000
+F 0 "U?" H 18600 11750 60 0000 C CNN
+F 1 "HGAMMA_CAP" H 18600 11650 60 0000 C CNN
+ 1 18600 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_SMALL_BASHKIR U?
+U 1 1 4B59BFFA
+P 43750 13500
+F 0 "U?" H 43750 13250 60 0000 C CNN
+F 1 "K_SMALL_BASHKIR" H 43750 13150 60 0000 C CNN
+ 1 43750 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_CAP_BASHKIR U?
+U 1 1 4B59BFF2
+P 43000 12000
+F 0 "U?" H 43000 11750 60 0000 C CNN
+F 1 "K_CAP_BASHKIR" H 43000 11650 60 0000 C CNN
+ 1 43000 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHE_SMALL U?
+U 1 1 4B59BAE3
+P 25600 10500
+F 0 "U?" H 25600 10250 60 0000 C CNN
+F 1 "CHE_SMALL" H 25600 10150 60 0000 C CNN
+ 1 25600 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHE_LARGE U?
+U 1 1 4B59BADA
+P 26600 9000
+F 0 "U?" H 26600 8750 60 0000 C CNN
+F 1 "CHE_LARGE" H 26600 8650 60 0000 C CNN
+ 1 26600 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TTSE_SMALL U?
+U 1 1 4B59BA0E
+P 17400 28500
+F 0 "U?" H 17400 28250 60 0000 C CNN
+F 1 "TTSE_SMALL" H 17400 28150 60 0000 C CNN
+ 1 17400 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TTSE_CAP U?
+U 1 1 4B59BA07
+P 18000 27000
+F 0 "U?" H 18000 26750 60 0000 C CNN
+F 1 "TTSE_CAP" H 18000 26650 60 0000 C CNN
+ 1 18000 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_LARGE U?
+U 1 1 4B59B59C
+P 17500 12000
+F 0 "U?" H 17500 11750 60 0000 C CNN
+F 1 "H_LARGE" H 17500 11650 60 0000 C CNN
+ 1 17500 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_LARGE U?
+U 1 1 4B59B415
+P 25100 9000
+F 0 "U?" H 25100 8750 60 0000 C CNN
+F 1 "E_LARGE" H 25100 8650 60 0000 C CNN
+ 1 25100 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_SMALLCAP_HOOK U?
+U 1 1 4B59B2B0
+P 29000 7500
+F 0 "U?" H 29000 7250 60 0000 C CNN
+F 1 "GAMMA_SMALLCAP_HOOK" H 29000 7150 60 0000 C CNN
+ 1 29000 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_CAP_HOOK U?
+U 1 1 4B59B2AA
+P 28600 6000
+F 0 "U?" H 28600 5750 60 0000 C CNN
+F 1 "GAMMA_CAP_HOOK" H 28600 5650 60 0000 C CNN
+ 1 28600 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TAIL U?
+U 1 1 4B59AF14
+P 22200 31500
+F 0 "U?" H 22200 31250 60 0000 C CNN
+F 1 "TAIL" H 22200 31150 60 0000 C CNN
+ 1 22200 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALLCAP U?
+U 1 1 4B59AF0D
+P 22000 31500
+F 0 "U?" H 22000 31250 60 0000 C CNN
+F 1 "H_SMALLCAP" H 22000 31150 60 0000 C CNN
+ 1 22000 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HOOK U?
+U 1 1 4B59AEEB
+P 21250 31500
+F 0 "U?" H 21250 31250 60 0000 C CNN
+F 1 "HOOK" H 21250 31150 60 0000 C CNN
+ 1 21250 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALLCAP U?
+U 1 1 4B59AEE3
+P 21050 31500
+F 0 "U?" H 21050 31250 60 0000 C CNN
+F 1 "H_SMALLCAP" H 21050 31150 60 0000 C CNN
+ 1 21050 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STROKE_V U?
+U 1 1 4B59AD99
+P 20050 31400
+F 0 "U?" H 20050 31150 60 0000 C CNN
+F 1 "STROKE_V" H 20050 31050 60 0000 C CNN
+ 1 20050 31400
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHERV_CAP U?
+U 1 1 4B59AD92
+P 20050 31500
+F 0 "U?" H 20050 31250 60 0000 C CNN
+F 1 "CHERV_CAP" H 20050 31150 60 0000 C CNN
+ 1 20050 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALL_STRAIGHT U?
+U 1 1 4B59ABED
+P 5500 25500
+F 0 "U?" H 5500 25250 60 0000 C CNN
+F 1 "Y_SMALL_STRAIGHT" H 5500 25150 60 0000 C CNN
+ 1 5500 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_SMALL_H U?
+U 1 1 4B599C9A
+P 19200 31250
+F 0 "U?" H 19200 31000 60 0000 C CNN
+F 1 "SLASH_SMALL_H" H 19200 30900 60 0000 C CNN
+ 1 19200 31250
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL U?
+U 1 1 4B599C92
+P 19200 31500
+F 0 "U?" H 19200 31250 60 0000 C CNN
+F 1 "L_SMALL" H 19200 31150 60 0000 C CNN
+ 1 19200 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STROKE_H U?
+U 1 1 4B599AE0
+P 18550 31350
+F 0 "U?" H 18550 31100 60 0000 C CNN
+F 1 "STROKE_H" H 18550 31000 60 0000 C CNN
+ 1 18550 31350
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP U?
+U 1 1 4B599AD9
+P 18550 31500
+F 0 "U?" H 18550 31250 60 0000 C CNN
+F 1 "T_CAP" H 18550 31150 60 0000 C CNN
+ 1 18550 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STROKE_SMALL_H U?
+U 1 1 4B599A16
+P 17800 31450
+F 0 "U?" H 17800 31200 60 0000 C CNN
+F 1 "STROKE_SMALL_H" H 17800 31100 60 0000 C CNN
+ 1 17800 31450
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL U?
+U 1 1 4B599A0A
+P 17800 31500
+F 0 "U?" H 17800 31250 60 0000 C CNN
+F 1 "T_SMALL" H 17800 31150 60 0000 C CNN
+ 1 17800 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DESCENDER U?
+U 1 1 4B5860A1
+P 17300 31500
+F 0 "U?" H 17300 31250 60 0000 C CNN
+F 1 "DESCENDER" H 17300 31150 60 0000 C CNN
+ 1 17300 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SHA_SMALL U?
+U 1 1 4B586099
+P 16950 31500
+F 0 "U?" H 16950 31250 60 0000 C CNN
+F 1 "SHA_SMALL" H 16950 31150 60 0000 C CNN
+ 1 16950 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IYUS_BIG_SMALL U?
+U 1 1 4B585BC8
+P 28600 28500
+F 0 "U?" H 28600 28250 60 0000 C CNN
+F 1 "IYUS_BIG_SMALL" H 28600 28150 60 0000 C CNN
+ 1 28600 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YUS_BIG_SMALL U?
+U 1 1 4B585B8C
+P 27350 28500
+F 0 "U?" H 27350 28250 60 0000 C CNN
+F 1 "YUS_BIG_SMALL" H 27350 28150 60 0000 C CNN
+ 1 27350 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IYUS_BIG_CAP U?
+U 1 1 4B585B45
+P 29600 27000
+F 0 "U?" H 29600 26750 60 0000 C CNN
+F 1 "IYUS_BIG_CAP" H 29600 26650 60 0000 C CNN
+ 1 29600 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YUS_BIG_CAP U?
+U 1 1 4B585AC4
+P 28100 27000
+F 0 "U?" H 28100 26750 60 0000 C CNN
+F 1 "YUS_BIG_CAP" H 28100 26650 60 0000 C CNN
+ 1 28100 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L IYUS_LITTLE_SMALL U?
+U 1 1 4B585A11
+P 26150 28500
+F 0 "U?" H 26150 28250 60 0000 C CNN
+F 1 "IYUS_LITTLE_SMALL" H 26150 28150 60 0000 C CNN
+ 1 26150 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YUS_LITTLE_SMALL U?
+U 1 1 4B585A09
+P 25050 28500
+F 0 "U?" H 25050 28250 60 0000 C CNN
+F 1 "YUS_LITTLE_SMALL" H 25050 28150 60 0000 C CNN
+ 1 25050 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IYUS_LITTLE_CAP U?
+U 1 1 4B585978
+P 26650 27000
+F 0 "U?" H 26650 26750 60 0000 C CNN
+F 1 "IYUS_LITTLE_CAP" H 26650 26650 60 0000 C CNN
+ 1 26650 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YUS_LITTLE_CAP U?
+U 1 1 4B5858FE
+P 25200 27000
+F 0 "U?" H 25200 26750 60 0000 C CNN
+F 1 "YUS_LITTLE_CAP" H 25200 26650 60 0000 C CNN
+ 1 25200 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L IYE_SMALL U?
+U 1 1 4B585825
+P 23450 10500
+F 0 "U?" H 23450 10250 60 0000 C CNN
+F 1 "IYE_SMALL" H 23450 10150 60 0000 C CNN
+ 1 23450 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IYE_CAP U?
+U 1 1 4B585820
+P 23800 9000
+F 0 "U?" H 23800 8750 60 0000 C CNN
+F 1 "IYE_CAP" H 23800 8650 60 0000 C CNN
+ 1 23800 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YAT_CAP U?
+U 1 1 4B5856BF
+P 45650 24000
+F 0 "U?" H 45650 23750 60 0000 C CNN
+F 1 "YAT_CAP" H 45650 23650 60 0000 C CNN
+ 1 45650 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YAT_SMALL U?
+U 1 1 4B585667
+P 44850 25500
+F 0 "U?" H 44850 25250 60 0000 C CNN
+F 1 "YAT_SMALL" H 44850 25150 60 0000 C CNN
+ 1 44850 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DZHE_SMALL U?
+U 1 1 4B58532F
+P 16300 28500
+F 0 "U?" H 16300 28250 60 0000 C CNN
+F 1 "DZHE_SMALL" H 16300 28150 60 0000 C CNN
+ 1 16300 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DZHE_CAP U?
+U 1 1 4B5852C2
+P 16750 27000
+F 0 "U?" H 16750 26750 60 0000 C CNN
+F 1 "DZHE_CAP" H 16750 26650 60 0000 C CNN
+ 1 16750 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L NJE_SMALL U?
+U 1 1 4B5851D2
+P 16550 13500
+F 0 "U?" H 16550 13250 60 0000 C CNN
+F 1 "NJE_SMALL" H 16550 13150 60 0000 C CNN
+ 1 16550 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L NJE_CAP U?
+U 1 1 4B585167
+P 16150 12000
+F 0 "U?" H 16150 11750 60 0000 C CNN
+F 1 "NJE_CAP" H 16150 11650 60 0000 C CNN
+ 1 16150 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LJE_SMALL U?
+U 1 1 4B5850DE
+P 4850 16500
+F 0 "U?" H 4850 16250 60 0000 C CNN
+F 1 "LJE_SMALL" H 4850 16150 60 0000 C CNN
+ 1 4850 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LJE_CAP U?
+U 1 1 4B585076
+P 4200 15000
+F 0 "U?" H 4200 14750 60 0000 C CNN
+F 1 "LJE_CAP" H 4200 14650 60 0000 C CNN
+ 1 4200 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TSHE_CAP U?
+U 1 1 4B584EF1
+P 19750 21000
+F 0 "U?" H 19750 20750 60 0000 C CNN
+F 1 "TSHE_CAP" H 19750 20650 60 0000 C CNN
+ 1 19750 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TSHE_SMALL U?
+U 1 1 4B584EA2
+P 21950 22500
+F 0 "U?" H 21950 22250 60 0000 C CNN
+F 1 "TSHE_SMALL" H 21950 22150 60 0000 C CNN
+ 1 21950 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DJE_SMALL U?
+U 1 1 4B584D51
+P 21100 22500
+F 0 "U?" H 21100 22250 60 0000 C CNN
+F 1 "DJE_SMALL" H 21100 22150 60 0000 C CNN
+ 1 21100 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L RHO_SMALL_STROKE U?
+U 1 1 4B5848B2
+P 28550 19500
+F 0 "U?" H 28550 19250 60 0000 C CNN
+F 1 "RHO_SMALL_STROKE" H 28550 19150 60 0000 C CNN
+ 1 28550 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SAN_SMALL U?
+U 1 1 4B58481A
+P 22500 16500
+F 0 "U?" H 22500 16250 60 0000 C CNN
+F 1 "SAN_SMALL" H 22500 16150 60 0000 C CNN
+ 1 22500 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SAN_CAP U?
+U 1 1 4B5847DA
+P 20150 15000
+F 0 "U?" H 20150 14750 60 0000 C CNN
+F 1 "SAN_CAP" H 20150 14650 60 0000 C CNN
+ 1 20150 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DEI_SMALL U?
+U 1 1 4B58477E
+P 22400 28500
+F 0 "U?" H 22400 28250 60 0000 C CNN
+F 1 "DEI_SMALL" H 22400 28150 60 0000 C CNN
+ 1 22400 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DEI_CAP U?
+U 1 1 4B58470F
+P 23200 27000
+F 0 "U?" H 23200 26750 60 0000 C CNN
+F 1 "DEI_CAP" H 23200 26650 60 0000 C CNN
+ 1 23200 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BUKI_LARGE U?
+U 1 1 4B5845DC
+P 14550 6000
+F 0 "U?" H 14550 5750 60 0000 C CNN
+F 1 "BUKI_LARGE" H 14550 5650 60 0000 C CNN
+ 1 14550 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GANGIA_SMALL U?
+U 1 1 4B584538
+P 21500 28500
+F 0 "U?" H 21500 28250 60 0000 C CNN
+F 1 "GANGIA_SMALL" H 21500 28150 60 0000 C CNN
+ 1 21500 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GANGIA_CAP U?
+U 1 1 4B58448A
+P 22100 27000
+F 0 "U?" H 22100 26750 60 0000 C CNN
+F 1 "GANGIA_CAP" H 22100 26650 60 0000 C CNN
+ 1 22100 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HORI_SMALL U?
+U 1 1 4B584403
+P 20550 28500
+F 0 "U?" H 20550 28250 60 0000 C CNN
+F 1 "HORI_SMALL" H 20550 28150 60 0000 C CNN
+ 1 20550 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HORI_CAP U?
+U 1 1 4B58439B
+P 21000 27000
+F 0 "U?" H 21000 26750 60 0000 C CNN
+F 1 "HORI_CAP" H 21000 26650 60 0000 C CNN
+ 1 21000 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GUILLEMET U?
+U 1 1 4B54605A
+P 26800 4500
+F 0 "U?" H 26800 4250 60 0000 C CNN
+F 1 "GUILLEMET" H 26800 4150 60 0000 C CNN
+ 1 26800 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAREN_SMALL U?
+U 1 1 4B544973
+P 8750 4500
+F 0 "U?" H 8750 4250 60 0000 C CNN
+F 1 "PAREN_SMALL" H 8750 4150 60 0000 C CNN
+ 1 8750 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_TINY_TURNED U?
+U 1 1 4B54482C
+P 30500 10500
+F 0 "U?" H 30500 10250 60 0000 C CNN
+F 1 "E_TINY_TURNED" H 30500 10150 60 0000 C CNN
+ 1 30500 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L X_TINY U?
+U 1 1 4B5447D3
+P 24800 25500
+F 0 "U?" H 24800 25250 60 0000 C CNN
+F 1 "X_TINY" H 24800 25150 60 0000 C CNN
+ 1 24800 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_TINY U?
+U 1 1 4B5447C9
+P 29750 10500
+F 0 "U?" H 29750 10250 60 0000 C CNN
+F 1 "E_TINY" H 29750 10150 60 0000 C CNN
+ 1 29750 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_TINY U?
+U 1 1 4B5446E8
+P 33700 16500
+F 0 "U?" H 33700 16250 60 0000 C CNN
+F 1 "N_TINY" H 33700 16150 60 0000 C CNN
+ 1 33700 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_TINY U?
+U 1 1 4B544676
+P 33350 13500
+F 0 "U?" H 33350 13250 60 0000 C CNN
+F 1 "I_TINY" H 33350 13150 60 0000 C CNN
+ 1 33350 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUOTE_RIGHT_DBL U?
+U 1 1 4B543E72
+P 13100 3000
+F 0 "U?" H 13100 2750 60 0000 C CNN
+F 1 "QUOTE_RIGHT_DBL" H 13100 2650 60 0000 C CNN
+ 1 13100 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUOTE_RIGHT U?
+U 1 1 4B543E68
+P 13750 3000
+F 0 "U?" H 13750 2750 60 0000 C CNN
+F 1 "QUOTE_RIGHT" H 13750 2650 60 0000 C CNN
+ 1 13750 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L COMMA_DBL U?
+U 1 1 4B543E56
+P 14400 3000
+F 0 "U?" H 14400 2750 60 0000 C CNN
+F 1 "COMMA_DBL" H 14400 2650 60 0000 C CNN
+ 1 14400 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASH_FIGURE U?
+U 1 1 4B543B3E
+P 37100 3000
+F 0 "U?" H 37100 2750 60 0000 C CNN
+F 1 "DASH_FIGURE" H 37100 2650 60 0000 C CNN
+ 1 37100 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HYPHEN U?
+U 1 1 4B543AC4
+P 36300 3000
+F 0 "U?" H 36300 2750 60 0000 C CNN
+F 1 "HYPHEN" H 36300 2650 60 0000 C CNN
+ 1 36300 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_PUNC U?
+U 1 1 4B543A6E
+P 35550 3000
+F 0 "U?" H 35550 2750 60 0000 C CNN
+F 1 "SPACE_PUNC" H 35550 2650 60 0000 C CNN
+ 1 35550 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_FIGURE U?
+U 1 1 4B5439EB
+P 34800 3000
+F 0 "U?" H 34800 2850 60 0000 C CNN
+F 1 "SPACE_FIGURE" H 34800 2750 60 0000 C CNN
+ 1 34800 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_HAIR U?
+U 1 1 4B5439BC
+P 34250 3000
+F 0 "U?" H 34250 2750 60 0000 C CNN
+F 1 "SPACE_HAIR" H 34250 2650 60 0000 C CNN
+ 1 34250 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_THIN U?
+U 1 1 4B5439B5
+P 34100 3000
+F 0 "U?" H 34100 2750 60 0000 C CNN
+F 1 "SPACE_THIN" H 34100 2650 60 0000 C CNN
+ 1 34100 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_MID U?
+U 1 1 4B5439AF
+P 33850 3000
+F 0 "U?" H 33850 2750 60 0000 C CNN
+F 1 "SPACE_MID" H 33850 2650 60 0000 C CNN
+ 1 33850 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_THICK U?
+U 1 1 4B5439A8
+P 33500 3000
+F 0 "U?" H 33500 2750 60 0000 C CNN
+F 1 "SPACE_THICK" H 33500 2650 60 0000 C CNN
+ 1 33500 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_EN U?
+U 1 1 4B54383C
+P 33000 3000
+F 0 "U?" H 33000 2750 60 0000 C CNN
+F 1 "SPACE_EN" H 33000 2650 60 0000 C CNN
+ 1 33000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASH_EN U?
+U 1 1 4B54380C
+P 32400 3000
+F 0 "U?" H 32400 2750 60 0000 C CNN
+F 1 "DASH_EN" H 32400 2650 60 0000 C CNN
+ 1 32400 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_EM U?
+U 1 1 4B5437A2
+P 31500 3000
+F 0 "U?" H 31500 2750 60 0000 C CNN
+F 1 "SPACE_EM" H 31500 2650 60 0000 C CNN
+ 1 31500 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASH_EM U?
+U 1 1 4B543795
+P 30300 3000
+F 0 "U?" H 30300 2750 60 0000 C CNN
+F 1 "DASH_EM" H 30300 2650 60 0000 C CNN
+ 1 30300 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L FLOOR U?
+U 1 1 4B543498
+P 26050 3000
+F 0 "U?" H 26050 2750 60 0000 C CNN
+F 1 "FLOOR" H 26050 2650 60 0000 C CNN
+ 1 26050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_9_SMALL U?
+U 1 1 4B4EFB34
+P 8100 4500
+F 0 "U?" H 8100 4250 60 0000 C CNN
+F 1 "DIGIT_9_SMALL" H 8100 4150 60 0000 C CNN
+ 1 8100 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_8_SMALL U?
+U 1 1 4B4EFAE4
+P 7300 4500
+F 0 "U?" H 7300 4250 60 0000 C CNN
+F 1 "DIGIT_8_SMALL" H 7300 4150 60 0000 C CNN
+ 1 7300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_7_SMALL U?
+U 1 1 4B4EFA6C
+P 6500 4500
+F 0 "U?" H 6500 4250 60 0000 C CNN
+F 1 "DIGIT_7_SMALL" H 6500 4150 60 0000 C CNN
+ 1 6500 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_6_SMALL U?
+U 1 1 4B4EF963
+P 5700 4500
+F 0 "U?" H 5700 4250 60 0000 C CNN
+F 1 "DIGIT_6_SMALL" H 5700 4150 60 0000 C CNN
+ 1 5700 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_5_SMALL U?
+U 1 1 4B4EF8E8
+P 4900 4500
+F 0 "U?" H 4900 4250 60 0000 C CNN
+F 1 "DIGIT_5_SMALL" H 4900 4150 60 0000 C CNN
+ 1 4900 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_4_SMALL U?
+U 1 1 4B4EF59D
+P 4100 4500
+F 0 "U?" H 4100 4250 60 0000 C CNN
+F 1 "DIGIT_4_SMALL" H 4100 4150 60 0000 C CNN
+ 1 4100 4500
+ 1 0 0 -1
+$EndComp
+$Sheet
+S 43150 4150 2150 2050
+U 4B4DD1FE
+F0 "Symbols" 60
+F1 "symbols.sch" 60
+$EndSheet
+$Comp
+L T_SMALLCAP U?
+U 1 1 4B33BD4A
+P 20500 22500
+F 0 "U?" H 20500 22250 60 0000 C CNN
+F 1 "T_SMALLCAP" H 20500 22150 60 0000 C CNN
+ 1 20500 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_SMALLCAP U?
+U 1 1 4B33BBEE
+P 23350 7500
+F 0 "U?" H 23350 7250 60 0000 C CNN
+F 1 "GAMMA_SMALLCAP" H 23350 7150 60 0000 C CNN
+ 1 23350 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_SMALLCAP U?
+U 1 1 4B33BB27
+P 17200 7500
+F 0 "U?" H 17200 7250 60 0000 C CNN
+F 1 "B_SMALLCAP" H 17200 7150 60 0000 C CNN
+ 1 17200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YA_CAP U?
+U 1 1 4B33BAA5
+P 3250 6000
+F 0 "U?" H 3250 5750 60 0000 C CNN
+F 1 "YA_CAP" H 3250 5650 60 0000 C CNN
+ 1 3250 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YA_SMALL U?
+U 1 1 4B33BA9D
+P 4350 7500
+F 0 "U?" H 4350 7250 60 0000 C CNN
+F 1 "YA_SMALL" H 4350 7150 60 0000 C CNN
+ 1 4350 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YU_SMALL U?
+U 1 1 4B33B99A
+P 6800 19500
+F 0 "U?" H 6800 19250 60 0000 C CNN
+F 1 "YU_SMALL" H 6800 19150 60 0000 C CNN
+ 1 6800 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YU_CAP U?
+U 1 1 4B33B993
+P 7550 18000
+F 0 "U?" H 7550 17750 60 0000 C CNN
+F 1 "YU_CAP" H 7550 17650 60 0000 C CNN
+ 1 7550 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YERY_CAP U?
+U 1 1 4B33B8E8
+P 44300 24000
+F 0 "U?" H 44300 23750 60 0000 C CNN
+F 1 "YERY_CAP" H 44300 23650 60 0000 C CNN
+ 1 44300 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L YERY_SMALL U?
+U 1 1 4B33B8E0
+P 43750 25500
+F 0 "U?" H 43750 25250 60 0000 C CNN
+F 1 "YERY_SMALL" H 43750 25150 60 0000 C CNN
+ 1 43750 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HARD_SMALL U?
+U 1 1 4B33B8D9
+P 42750 25500
+F 0 "U?" H 42750 25250 60 0000 C CNN
+F 1 "HARD_SMALL" H 42750 25150 60 0000 C CNN
+ 1 42750 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SOFT_SMALL U?
+U 1 1 4B33B8CA
+P 41850 25500
+F 0 "U?" H 41850 25250 60 0000 C CNN
+F 1 "SOFT_SMALL" H 41850 25150 60 0000 C CNN
+ 1 41850 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HARD_CAP U?
+U 1 1 4B33B4C7
+P 43050 24000
+F 0 "U?" H 43050 23750 60 0000 C CNN
+F 1 "HARD_CAP" H 43050 23650 60 0000 C CNN
+ 1 43050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SOFT_CAP U?
+U 1 1 4B33B4BE
+P 41900 24000
+F 0 "U?" H 41900 23750 60 0000 C CNN
+F 1 "SOFT_CAP" H 41900 23650 60 0000 C CNN
+ 1 41900 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SHA_CAP U?
+U 1 1 4B33AE43
+P 9600 27000
+F 0 "U?" H 9600 26750 60 0000 C CNN
+F 1 "SHA_CAP" H 9600 26650 60 0000 C CNN
+ 1 9600 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SHA_SMALL U?
+U 1 1 4B33AE22
+P 9050 28500
+F 0 "U?" H 9050 28250 60 0000 C CNN
+F 1 "SHA_SMALL" H 9050 28150 60 0000 C CNN
+ 1 9050 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHERV_SMALL U?
+U 1 1 4B33AD07
+P 15300 28500
+F 0 "U?" H 15300 28250 60 0000 C CNN
+F 1 "CHERV_SMALL" H 15300 28150 60 0000 C CNN
+ 1 15300 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHERV_CAP U?
+U 1 1 4B33ACFF
+P 15700 27000
+F 0 "U?" H 15700 26750 60 0000 C CNN
+F 1 "CHERV_CAP" H 15700 26650 60 0000 C CNN
+ 1 15700 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L FEI_CAP U?
+U 1 1 4B33A931
+P 13550 27000
+F 0 "U?" H 13550 26750 60 0000 C CNN
+F 1 "FEI_CAP" H 13550 26650 60 0000 C CNN
+ 1 13550 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L FEI_SMALL U?
+U 1 1 4B33A929
+P 13450 28500
+F 0 "U?" H 13450 28250 60 0000 C CNN
+F 1 "FEI_SMALL" H 13450 28150 60 0000 C CNN
+ 1 13450 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TSY_SMALL U?
+U 1 1 4B33A8B5
+P 14400 28500
+F 0 "U?" H 14400 28250 60 0000 C CNN
+F 1 "TSY_SMALL" H 14400 28150 60 0000 C CNN
+ 1 14400 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TSY_CAP U?
+U 1 1 4B33A8AD
+P 14650 27000
+F 0 "U?" H 14650 26750 60 0000 C CNN
+F 1 "TSY_CAP" H 14650 26650 60 0000 C CNN
+ 1 14650 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALLCAP U?
+U 1 1 4B33A6CF
+P 14400 13500
+F 0 "U?" H 14400 13250 60 0000 C CNN
+F 1 "H_SMALLCAP" H 14400 13150 60 0000 C CNN
+ 1 14400 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_SMALLCAP U?
+U 1 1 4B33A61C
+P 21400 16500
+F 0 "U?" H 21400 16250 60 0000 C CNN
+F 1 "M_SMALLCAP" H 21400 16150 60 0000 C CNN
+ 1 21400 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LYUDI_CAP U?
+U 1 1 4B33A597
+P 2850 15000
+F 0 "U?" H 2850 14750 60 0000 C CNN
+F 1 "LYUDI_CAP" H 2850 14650 60 0000 C CNN
+ 1 2850 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LYUDI_SMALL U?
+U 1 1 4B33A58E
+P 3750 16500
+F 0 "U?" H 3750 16250 60 0000 C CNN
+F 1 "LYUDI_SMALL" H 3750 16150 60 0000 C CNN
+ 1 3750 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZEMLYA_SMALL U?
+U 1 1 4B33A2B6
+P 30300 25500
+F 0 "U?" H 30300 25250 60 0000 C CNN
+F 1 "ZEMLYA_SMALL" H 30300 25150 60 0000 C CNN
+ 1 30300 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZEMLYA_CAP U?
+U 1 1 4B33A2AF
+P 29650 24000
+F 0 "U?" H 29650 23750 60 0000 C CNN
+F 1 "ZEMLYA_CAP" H 29650 23650 60 0000 C CNN
+ 1 29650 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOBRO_CAP U?
+U 1 1 4B33A1EC
+P 3050 9000
+F 0 "U?" H 3050 8750 60 0000 C CNN
+F 1 "DOBRO_CAP" H 3050 8650 60 0000 C CNN
+ 1 3050 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOBRO_SMALL U?
+U 1 1 4B33A1DE
+P 3850 10500
+F 0 "U?" H 3850 10250 60 0000 C CNN
+F 1 "DOBRO_SMALL" H 3850 10150 60 0000 C CNN
+ 1 3850 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZHIVETE_SMALL U?
+U 1 1 4B33A1CA
+P 42650 13500
+F 0 "U?" H 42650 13250 60 0000 C CNN
+F 1 "ZHIVETE_SMALL" H 42650 13150 60 0000 C CNN
+ 1 42650 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZHIVETE_CAP U?
+U 1 1 4B33A1C4
+P 41550 12000
+F 0 "U?" H 41550 11750 60 0000 C CNN
+F 1 "ZHIVETE_CAP" H 41550 11650 60 0000 C CNN
+ 1 41550 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BUKI_SMALL U?
+U 1 1 4B339D9D
+P 13450 7500
+F 0 "U?" H 13450 7250 60 0000 C CNN
+F 1 "BUKI_SMALL" H 13450 7150 60 0000 C CNN
+ 1 13450 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BUKI_CAP U?
+U 1 1 4B339D95
+P 13500 6000
+F 0 "U?" H 13500 5750 60 0000 C CNN
+F 1 "BUKI_CAP" H 13500 5650 60 0000 C CNN
+ 1 13500 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KHEI_SMALL U?
+U 1 1 4B338955
+P 19700 28500
+F 0 "U?" H 19700 28250 60 0000 C CNN
+F 1 "KHEI_SMALL" H 19700 28150 60 0000 C CNN
+ 1 19700 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KHEI_CAP U?
+U 1 1 4B338751
+P 19850 27000
+F 0 "U?" H 19850 26750 60 0000 C CNN
+F 1 "KHEI_CAP" H 19850 26650 60 0000 C CNN
+ 1 19850 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SHEI_SMALL U?
+U 1 1 4B336D78
+P 7900 28500
+F 0 "U?" H 7900 28250 60 0000 C CNN
+F 1 "SHEI_SMALL" H 7900 28150 60 0000 C CNN
+ 1 7900 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SHEI_CAP U?
+U 1 1 4B336B50
+P 8100 27000
+F 0 "U?" H 8100 26750 60 0000 C CNN
+F 1 "SHEI_CAP" H 8100 26650 60 0000 C CNN
+ 1 8100 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_LARGE U?
+U 1 1 4B336B04
+P 6050 18000
+F 0 "U?" H 6050 17750 60 0000 C CNN
+F 1 "OMEGA_LARGE" H 6050 17650 60 0000 C CNN
+ 1 6050 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SAMPI_SMALL U?
+U 1 1 4B3361F5
+P 6200 28500
+F 0 "U?" H 6200 28250 60 0000 C CNN
+F 1 "SAMPI_SMALL" H 6200 28150 60 0000 C CNN
+ 1 6200 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SAMPI_CAP U?
+U 1 1 4B336026
+P 6200 27000
+F 0 "U?" H 6200 26750 60 0000 C CNN
+F 1 "SAMPI_CAP" H 6200 26650 60 0000 C CNN
+ 1 6200 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KOPPA_SMALL U?
+U 1 1 4B335E13
+P 4800 28500
+F 0 "U?" H 4800 28250 60 0000 C CNN
+F 1 "KOPPA_SMALL" H 4800 28150 60 0000 C CNN
+ 1 4800 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KOPPA_CAP U?
+U 1 1 4B335E0C
+P 4850 27000
+F 0 "U?" H 4850 26750 60 0000 C CNN
+F 1 "KOPPA_CAP" H 4850 26650 60 0000 C CNN
+ 1 4850 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UPSILON_CAP_HOOK U?
+U 1 1 4B335D9F
+P 6050 24000
+F 0 "U?" H 6050 23750 60 0000 C CNN
+F 1 "UPSILON_CAP_HOOK" H 6050 23650 60 0000 C CNN
+ 1 6050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L IOTA_BELOW U?
+U 1 1 4B3359F3
+P 15800 31500
+F 0 "U?" H 15800 31250 60 0000 C CNN
+F 1 "IOTA_BELOW" H 15800 31150 60 0000 C CNN
+ 1 15800 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALL U?
+U 1 1 4B3359EB
+P 15800 31500
+F 0 "U?" H 15800 31250 60 0000 C CNN
+F 1 "OMEGA_SMALL" H 15800 31150 60 0000 C CNN
+ 1 15800 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L APOSTROPHE_TURNED_LOW U?
+U 1 1 4B3354D1
+P 36900 4500
+F 0 "U?" H 36900 4250 60 0000 C CNN
+F 1 "APOSTROPHE_TURNED_LOW" H 36900 4150 60 0000 C CNN
+ 1 36900 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SAMPI_ARCHAIC_SMALL U?
+U 1 1 4B335458
+P 2800 28500
+F 0 "U?" H 2800 28250 60 0000 C CNN
+F 1 "SAMPI_ARCHAIC_SMALL" H 2800 28150 60 0000 C CNN
+ 1 2800 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SAMPI_ARCHAIC_CAP U?
+U 1 1 4B33544D
+P 2900 27000
+F 0 "U?" H 2900 26750 60 0000 C CNN
+F 1 "SAMPI_ARCHAIC_CAP" H 2900 26650 60 0000 C CNN
+ 1 2900 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L IZHE_SMALL U?
+U 1 1 4B335437
+P 15350 13500
+F 0 "U?" H 15350 13250 60 0000 C CNN
+F 1 "IZHE_SMALL" H 15350 13150 60 0000 C CNN
+ 1 15350 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IZHE_CAP U?
+U 1 1 4B335420
+P 14750 12000
+F 0 "U?" H 14750 11750 60 0000 C CNN
+F 1 "IZHE_CAP" H 14750 11650 60 0000 C CNN
+ 1 14750 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HETA_SMALL U?
+U 1 1 4B3351C6
+P 950 28500
+F 0 "U?" H 950 28250 60 0000 C CNN
+F 1 "HETA_SMALL" H 950 28150 60 0000 C CNN
+ 1 950 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HETA_CAP U?
+U 1 1 4B3351BC
+P 1000 27000
+F 0 "U?" H 1000 26750 60 0000 C CNN
+F 1 "HETA_CAP" H 1000 26650 60 0000 C CNN
+ 1 1000 27000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_LARGE U?
+U 1 1 4B324FE7
+P 5150 24000
+F 0 "U?" H 5150 23750 60 0000 C CNN
+F 1 "Y_LARGE" H 5150 23650 60 0000 C CNN
+ 1 5150 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_SMALLCAP U?
+U 1 1 4B324F28
+P 23450 19500
+F 0 "U?" H 23450 19250 60 0000 C CNN
+F 1 "PI_SMALLCAP" H 23450 19150 60 0000 C CNN
+ 1 23450 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L FITA_SMALL U?
+U 1 1 4B324EB2
+P 26950 13500
+F 0 "U?" H 26950 13250 60 0000 C CNN
+F 1 "FITA_SMALL" H 26950 13150 60 0000 C CNN
+ 1 26950 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L FITA_CAP U?
+U 1 1 4B324D4C
+P 26300 12000
+F 0 "U?" H 26300 11750 60 0000 C CNN
+F 1 "FITA_CAP" H 26300 11650 60 0000 C CNN
+ 1 26300 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_CAP_REV U?
+U 1 1 4B324C91
+P 27500 6000
+F 0 "U?" H 27500 5750 60 0000 C CNN
+F 1 "C_CAP_REV" H 27500 5650 60 0000 C CNN
+ 1 27500 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL_REV U?
+U 1 1 4B324C88
+P 28100 7500
+F 0 "U?" H 28100 7250 60 0000 C CNN
+F 1 "C_SMALL_REV" H 28100 7150 60 0000 C CNN
+ 1 28100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IE_SMALL U?
+U 1 1 4B324C54
+P 22450 10500
+F 0 "U?" H 22450 10250 60 0000 C CNN
+F 1 "IE_SMALL" H 22450 10150 60 0000 C CNN
+ 1 22450 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IE_CAP U?
+U 1 1 4B324C40
+P 22650 9000
+F 0 "U?" H 22650 8750 60 0000 C CNN
+F 1 "IE_CAP" H 22650 8650 60 0000 C CNN
+ 1 22650 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L STIGMA_SMALL U?
+U 1 1 4B32479A
+P 25100 7500
+F 0 "U?" H 25100 7250 60 0000 C CNN
+F 1 "STIGMA_SMALL" H 25100 7150 60 0000 C CNN
+ 1 25100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STIGMA_CAP U?
+U 1 1 4B324788
+P 24700 6000
+F 0 "U?" H 24700 5750 60 0000 C CNN
+F 1 "STIGMA_CAP" H 24700 5650 60 0000 C CNN
+ 1 24700 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGAMMA_SMALL U?
+U 1 1 4B324256
+P 26350 7500
+F 0 "U?" H 26350 7250 60 0000 C CNN
+F 1 "DIGAMMA_SMALL" H 26350 7150 60 0000 C CNN
+ 1 26350 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KOPPA_ARCHAIC_SMALL U?
+U 1 1 4B32413C
+P 1950 22500
+F 0 "U?" H 1950 22250 60 0000 C CNN
+F 1 "KOPPA_ARCHAIC_SMALL" H 1950 22150 60 0000 C CNN
+ 1 1950 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KOPPA_ARCHAIC_CAP U?
+U 1 1 4B324133
+P 2150 21000
+F 0 "U?" H 2150 20750 60 0000 C CNN
+F 1 "KOPPA_ARCHAIC_CAP" H 2150 20650 60 0000 C CNN
+ 1 2150 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KAI_SMALL U?
+U 1 1 4B3240BC
+P 41650 13500
+F 0 "U?" H 41650 13250 60 0000 C CNN
+F 1 "KAI_SMALL" H 41650 13150 60 0000 C CNN
+ 1 41650 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L KAI_CAP U?
+U 1 1 4B3240B3
+P 40250 12000
+F 0 "U?" H 40250 11750 60 0000 C CNN
+F 1 "KAI_CAP" H 40250 11650 60 0000 C CNN
+ 1 40250 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KAPPA_SMALL_SCRIPT U?
+U 1 1 4B3225F7
+P 40800 13500
+F 0 "U?" H 40800 13250 60 0000 C CNN
+F 1 "KAPPA_SMALL_SCRIPT" H 40800 13150 60 0000 C CNN
+ 1 40800 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OE_SMALL U?
+U 1 1 4B3218F5
+P 3150 19500
+F 0 "U?" H 3150 19250 60 0000 C CNN
+F 1 "OE_SMALL" H 3150 19150 60 0000 C CNN
+ 1 3150 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OE_CAP U?
+U 1 1 4B321784
+P 3400 18000
+F 0 "U?" H 3400 17750 60 0000 C CNN
+F 1 "OE_CAP" H 3400 17650 60 0000 C CNN
+ 1 3400 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L RHO_SMALL_TAIL U?
+U 1 1 4B3213EB
+P 29550 19500
+F 0 "U?" H 29550 19250 60 0000 C CNN
+F 1 "RHO_SMALL_TAIL" H 29550 19150 60 0000 C CNN
+ 1 29550 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L THETA_SMALL_SCRIPT U?
+U 1 1 4B320EB2
+P 26000 13500
+F 0 "U?" H 26000 13250 60 0000 C CNN
+F 1 "THETA_SMALL_SCRIPT" H 26000 13150 60 0000 C CNN
+ 1 26000 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BETA_SMALL_CURLED U?
+U 1 1 4B320DDB
+P 16300 7500
+F 0 "U?" H 16300 7250 60 0000 C CNN
+F 1 "BETA_SMALL_CURLED" H 16300 7150 60 0000 C CNN
+ 1 16300 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_PI_SMALL U?
+U 1 1 4B320C4D
+P 5550 19500
+F 0 "U?" H 5550 19250 60 0000 C CNN
+F 1 "OMEGA_PI_SMALL" H 5550 19150 60 0000 C CNN
+ 1 5550 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_SMALL_VAR U?
+U 1 1 4B320C07
+P 19300 25500
+F 0 "U?" H 19300 25250 60 0000 C CNN
+F 1 "PHI_SMALL_VAR" H 19300 25150 60 0000 C CNN
+ 1 19300 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALL U?
+U 1 1 4B320827
+P 4400 19500
+F 0 "U?" H 4400 19250 60 0000 C CNN
+F 1 "OMEGA_SMALL" H 4400 19150 60 0000 C CNN
+ 1 4400 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSI_SMALL U?
+U 1 1 4B32078C
+P 26350 25500
+F 0 "U?" H 26350 25250 60 0000 C CNN
+F 1 "PSI_SMALL" H 26350 25150 60 0000 C CNN
+ 1 26350 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHI_SMALL U?
+U 1 1 4B320751
+P 24050 25500
+F 0 "U?" H 24050 25250 60 0000 C CNN
+F 1 "CHI_SMALL" H 24050 25150 60 0000 C CNN
+ 1 24050 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_SMALL U?
+U 1 1 4B3206BF
+P 20400 25500
+F 0 "U?" H 20400 25250 60 0000 C CNN
+F 1 "PHI_SMALL" H 20400 25150 60 0000 C CNN
+ 1 20400 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L UPSILON_SMALL U?
+U 1 1 4B3205E2
+P 4650 25500
+F 0 "U?" H 4650 25250 60 0000 C CNN
+F 1 "UPSILON_SMALL" H 4650 25150 60 0000 C CNN
+ 1 4650 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TAU_SMALL U?
+U 1 1 4B3202CC
+P 19650 22500
+F 0 "U?" H 19650 22250 60 0000 C CNN
+F 1 "TAU_SMALL" H 19650 22150 60 0000 C CNN
+ 1 19650 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_SMALL U?
+U 1 1 4B31FE4E
+P 6500 22500
+F 0 "U?" H 6500 22250 60 0000 C CNN
+F 1 "SIGMA_SMALL" H 6500 22150 60 0000 C CNN
+ 1 6500 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_SMALL_FINAL U?
+U 1 1 4B31FCE5
+P 7500 22500
+F 0 "U?" H 7500 22250 60 0000 C CNN
+F 1 "SIGMA_SMALL_FINAL" H 7500 22150 60 0000 C CNN
+ 1 7500 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L RHO_SMALL U?
+U 1 1 4B31FAA4
+P 27500 19500
+F 0 "U?" H 27500 19250 60 0000 C CNN
+F 1 "RHO_SMALL" H 27500 19150 60 0000 C CNN
+ 1 27500 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L XI_SMALL U?
+U 1 1 4B31F7D5
+P 38550 16500
+F 0 "U?" H 38550 16250 60 0000 C CNN
+F 1 "XI_SMALL" H 38550 16150 60 0000 C CNN
+ 1 38550 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L NU_SMALL U?
+U 1 1 4B31F6F2
+P 30700 16500
+F 0 "U?" H 30700 16250 60 0000 C CNN
+F 1 "NU_SMALL" H 30700 16150 60 0000 C CNN
+ 1 30700 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LAMBDA_SMALL U?
+U 1 1 4B310A91
+P 2900 16500
+F 0 "U?" H 2900 16250 60 0000 C CNN
+F 1 "LAMBDA_SMALL" H 2900 16150 60 0000 C CNN
+ 1 2900 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L THETA_SMALL U?
+U 1 1 4B310A1A
+P 25050 13500
+F 0 "U?" H 25050 13250 60 0000 C CNN
+F 1 "THETA_SMALL" H 25050 13150 60 0000 C CNN
+ 1 25050 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IOTA_SMALL U?
+U 1 1 4B310994
+P 31250 13500
+F 0 "U?" H 31250 13250 60 0000 C CNN
+F 1 "IOTA_SMALL" H 31250 13150 60 0000 C CNN
+ 1 31250 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ETA_SMALL U?
+U 1 1 4B31098B
+P 13400 13500
+F 0 "U?" H 13400 13250 60 0000 C CNN
+F 1 "ETA_SMALL" H 13400 13150 60 0000 C CNN
+ 1 13400 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZETA_SMALL U?
+U 1 1 4B31097D
+P 29550 25500
+F 0 "U?" H 29550 25250 60 0000 C CNN
+F 1 "ZETA_SMALL" H 29550 25150 60 0000 C CNN
+ 1 29550 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_SMALL U?
+U 1 1 4B310769
+P 21550 10500
+F 0 "U?" H 21550 10250 60 0000 C CNN
+F 1 "EPSILON_SMALL" H 21550 10150 60 0000 C CNN
+ 1 21550 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DELTA_SMALL U?
+U 1 1 4B310761
+P 1000 10500
+F 0 "U?" H 1000 10250 60 0000 C CNN
+F 1 "DELTA_SMALL" H 1000 10150 60 0000 C CNN
+ 1 1000 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_SMALL U?
+U 1 1 4B310549
+P 22550 7500
+F 0 "U?" H 22550 7250 60 0000 C CNN
+F 1 "GAMMA_SMALL" H 22550 7150 60 0000 C CNN
+ 1 22550 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BETA_SMALL U?
+U 1 1 4B310541
+P 15350 7500
+F 0 "U?" H 15350 7250 60 0000 C CNN
+F 1 "BETA_SMALL" H 15350 7150 60 0000 C CNN
+ 1 15350 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B310539
+P 1950 7500
+F 0 "U?" H 1950 7250 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 1950 7150 60 0000 C CNN
+ 1 1950 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_CAP U?
+U 1 1 4B310202
+P 4700 18000
+F 0 "U?" H 4700 17750 60 0000 C CNN
+F 1 "OMEGA_CAP" H 4700 17650 60 0000 C CNN
+ 1 4700 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSI_CAP U?
+U 1 1 4B30FF79
+P 26350 24000
+F 0 "U?" H 26350 23750 60 0000 C CNN
+F 1 "PSI_CAP" H 26350 23650 60 0000 C CNN
+ 1 26350 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_CAP U?
+U 1 1 4B30FE95
+P 19300 24000
+F 0 "U?" H 19300 23750 60 0000 C CNN
+F 1 "PHI_CAP" H 19300 23650 60 0000 C CNN
+ 1 19300 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_CAP U?
+U 1 1 4B30FD63
+P 6500 21000
+F 0 "U?" H 6500 20750 60 0000 C CNN
+F 1 "SIGMA_CAP" H 6500 20650 60 0000 C CNN
+ 1 6500 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_CAP U?
+U 1 1 4B30FD55
+P 22350 18000
+F 0 "U?" H 22350 17750 60 0000 C CNN
+F 1 "PI_CAP" H 22350 17650 60 0000 C CNN
+ 1 22350 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L XI_CAP U?
+U 1 1 4B30FCBD
+P 38550 14950
+F 0 "U?" H 38550 14700 60 0000 C CNN
+F 1 "XI_CAP" H 38550 14600 60 0000 C CNN
+ 1 38550 14950
+ 1 0 0 -1
+$EndComp
+$Comp
+L LAMBDA_CAP U?
+U 1 1 4B30FCAE
+P 1800 15000
+F 0 "U?" H 1800 14750 60 0000 C CNN
+F 1 "LAMBDA_CAP" H 1800 14650 60 0000 C CNN
+ 1 1800 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L THETA_CAP U?
+U 1 1 4B30FC0C
+P 25150 12000
+F 0 "U?" H 25150 11750 60 0000 C CNN
+F 1 "THETA_CAP" H 25150 11650 60 0000 C CNN
+ 1 25150 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DELTA_CAP U?
+U 1 1 4B30FBFF
+P 950 9000
+F 0 "U?" H 950 8750 60 0000 C CNN
+F 1 "DELTA_CAP" H 950 8650 60 0000 C CNN
+ 1 950 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_CAP U?
+U 1 1 4B30FBF3
+P 22650 6000
+F 0 "U?" H 22650 5750 60 0000 C CNN
+F 1 "GAMMA_CAP" H 22650 5650 60 0000 C CNN
+ 1 22650 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_LONG_SMALL U?
+U 1 1 4B2FF6D0
+P 9000 22500
+F 0 "U?" H 9000 22250 60 0000 C CNN
+F 1 "S_LONG_SMALL" H 9000 22150 60 0000 C CNN
+ 1 9000 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ENG_SMALL U?
+U 1 1 4B2FEDC3
+P 29800 16500
+F 0 "U?" H 29800 16250 60 0000 C CNN
+F 1 "ENG_SMALL" H 29800 16150 60 0000 C CNN
+ 1 29800 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ENG_CAP U?
+U 1 1 4B2FEDB9
+P 30050 15000
+F 0 "U?" H 30050 14750 60 0000 C CNN
+F 1 "ENG_CAP" H 30050 14650 60 0000 C CNN
+ 1 30050 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_SMALLCAP U?
+U 1 1 4B2FEB9B
+P 39950 13500
+F 0 "U?" H 39950 13250 60 0000 C CNN
+F 1 "K_SMALLCAP" H 39950 13150 60 0000 C CNN
+ 1 39950 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_CAP_STROKE U?
+U 1 1 4B2FEA6A
+P 13650 12000
+F 0 "U?" H 13650 11750 60 0000 C CNN
+F 1 "H_CAP_STROKE" H 13650 11650 60 0000 C CNN
+ 1 13650 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_MIDDOT U?
+U 1 1 4B2FE870
+P 2000 16500
+F 0 "U?" H 2000 16250 60 0000 C CNN
+F 1 "L_SMALL_MIDDOT" H 2000 16150 60 0000 C CNN
+ 1 2000 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE U?
+U 1 1 4B2FDD03
+P 8300 30000
+F 0 "U?" H 8300 29750 60 0000 C CNN
+F 1 "BREVE" H 8300 29650 60 0000 C CNN
+ 1 8300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_SMALL U?
+U 1 1 4B2FDCF7
+P 8300 30000
+F 0 "U?" H 8300 29750 60 0000 C CNN
+F 1 "G_SMALL" H 8300 29650 60 0000 C CNN
+ 1 8300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CARON U?
+U 1 1 4B2FDCCB
+P 7450 30000
+F 0 "U?" H 7450 29750 60 0000 C CNN
+F 1 "CARON" H 7450 29650 60 0000 C CNN
+ 1 7450 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B2FDCC4
+P 7450 30000
+F 0 "U?" H 7450 29750 60 0000 C CNN
+F 1 "C_SMALL" H 7450 29650 60 0000 C CNN
+ 1 7450 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OGONEK U?
+U 1 1 4B2FDB5A
+P 10000 31500
+F 0 "U?" H 10000 31250 60 0000 C CNN
+F 1 "OGONEK" H 10000 31150 60 0000 C CNN
+ 1 10000 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2FDB46
+P 10000 31500
+F 0 "U?" H 10000 31250 60 0000 C CNN
+F 1 "E_SMALL" H 10000 31150 60 0000 C CNN
+ 1 10000 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_STROKE U?
+U 1 1 4B2FCFB5
+P 1950 19500
+F 0 "U?" H 1950 19250 60 0000 C CNN
+F 1 "O_SMALL_STROKE" H 1950 19150 60 0000 C CNN
+ 1 1950 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_CAP_STROKE U?
+U 1 1 4B2FCFAB
+P 2200 18000
+F 0 "U?" H 2200 17750 60 0000 C CNN
+F 1 "O_CAP_STROKE" H 2200 17650 60 0000 C CNN
+ 1 2200 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_SMALL U?
+U 1 1 4B2FA49D
+P 22400 19500
+F 0 "U?" H 22400 19250 60 0000 C CNN
+F 1 "PI_SMALL" H 22400 19150 60 0000 C CNN
+ 1 22400 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MU_SMALL U?
+U 1 1 4B2FA03E
+P 20250 16500
+F 0 "U?" H 20250 16250 60 0000 C CNN
+F 1 "MU_SMALL" H 20250 16150 60 0000 C CNN
+ 1 20250 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SECTION U?
+U 1 1 4B2F9C1F
+P 22900 4500
+F 0 "U?" H 22900 4250 60 0000 C CNN
+F 1 "SECTION" H 22900 4150 60 0000 C CNN
+ 1 22900 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_TINY U?
+U 1 1 4B2F9040
+P 6600 7500
+F 0 "U?" H 6600 7250 60 0000 C CNN
+F 1 "A_TINY" H 6600 7150 60 0000 C CNN
+ 1 6600 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_TINY U?
+U 1 1 4B2F903B
+P 15250 19500
+F 0 "U?" H 15250 19250 60 0000 C CNN
+F 1 "O_TINY" H 15250 19150 60 0000 C CNN
+ 1 15250 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_3_SMALL U?
+U 1 1 4B2F8F1B
+P 3300 4500
+F 0 "U?" H 3300 4250 60 0000 C CNN
+F 1 "DIGIT_3_SMALL" H 3300 4150 60 0000 C CNN
+ 1 3300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_2_SMALL U?
+U 1 1 4B2F8F13
+P 2500 4500
+F 0 "U?" H 2500 4250 60 0000 C CNN
+F 1 "DIGIT_2_SMALL" H 2500 4150 60 0000 C CNN
+ 1 2500 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_1_SMALL U?
+U 1 1 4B2F8F0C
+P 1700 4500
+F 0 "U?" H 1700 4250 60 0000 C CNN
+F 1 "DIGIT_1_SMALL" H 1700 4150 60 0000 C CNN
+ 1 1700 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_0_SMALL U?
+U 1 1 4B2F8F03
+P 900 4500
+F 0 "U?" H 900 4250 60 0000 C CNN
+F 1 "DIGIT_0_SUP" H 900 4150 60 0000 C CNN
+ 1 900 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MACRON U?
+U 1 1 4B2F88C4
+P 6500 30000
+F 0 "U?" H 6500 29750 60 0000 C CNN
+F 1 "MACRON" H 6500 29650 60 0000 C CNN
+ 1 6500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B2F88A1
+P 6500 30000
+F 0 "U?" H 6500 29750 60 0000 C CNN
+F 1 "O_SMALL" H 6500 29650 60 0000 C CNN
+ 1 6500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GUILLEMET_DBL U?
+U 1 1 4B2F875F
+P 25950 4500
+F 0 "U?" H 25950 4250 60 0000 C CNN
+F 1 "GUILLEMET_DBL" H 25950 4150 60 0000 C CNN
+ 1 25950 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L YEN U?
+U 1 1 4B2F833A
+P 24850 4500
+F 0 "U?" H 24850 4250 60 0000 C CNN
+F 1 "YEN" H 24850 4150 60 0000 C CNN
+ 1 24850 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L POUND U?
+U 1 1 4B2F8139
+P 21850 4500
+F 0 "U?" H 21850 4250 60 0000 C CNN
+F 1 "POUND" H 21850 4150 60 0000 C CNN
+ 1 21850 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L THORN_SMALL U?
+U 1 1 4B2F7DE3
+P 30550 19500
+F 0 "U?" H 30550 19250 60 0000 C CNN
+F 1 "THORN_SMALL" H 30550 19150 60 0000 C CNN
+ 1 30550 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L THORN_CAP U?
+U 1 1 4B2F7DDA
+P 27650 18000
+F 0 "U?" H 27650 17750 60 0000 C CNN
+F 1 "THORN_CAP" H 27650 17650 60 0000 C CNN
+ 1 27650 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ETH_SMALL U?
+U 1 1 4B2F7DCF
+P 2850 10500
+F 0 "U?" H 2850 10250 60 0000 C CNN
+F 1 "ETH_SMALL" H 2850 10150 60 0000 C CNN
+ 1 2850 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESZETT U?
+U 1 1 4B2F7DA4
+P 9950 22500
+F 0 "U?" H 9950 22250 60 0000 C CNN
+F 1 "ESZETT" H 9950 22150 60 0000 C CNN
+ 1 9950 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CEDILLA U?
+U 1 1 4B2F7AA6
+P 7250 31500
+F 0 "U?" H 7250 31250 60 0000 C CNN
+F 1 "CEDILLA" H 7250 31150 60 0000 C CNN
+ 1 7250 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B2F7A97
+P 7250 31500
+F 0 "U?" H 7250 31250 60 0000 C CNN
+F 1 "C_SMALL" H 7250 31150 60 0000 C CNN
+ 1 7250 31500
+ 1 0 0 -1
+$EndComp
+$Comp
+L AE_SMALL U?
+U 1 1 4B2F7684
+P 3200 7500
+F 0 "U?" H 3200 7250 60 0000 C CNN
+F 1 "AE_SMALL" H 3200 7150 60 0000 C CNN
+ 1 3200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L AE_CAP U?
+U 1 1 4B2F767A
+P 2000 6000
+F 0 "U?" H 2000 5750 60 0000 C CNN
+F 1 "AE_CAP" H 2000 5650 60 0000 C CNN
+ 1 2000 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAERESIS U?
+U 1 1 4B2F6F29
+P 2750 30000
+F 0 "U?" H 2750 29750 60 0000 C CNN
+F 1 "DIAERESIS" H 2750 29650 60 0000 C CNN
+ 1 2750 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TILDE U?
+U 1 1 4B2F6574
+P 5500 30000
+F 0 "U?" H 5500 29750 60 0000 C CNN
+F 1 "TILDE" H 5500 29650 60 0000 C CNN
+ 1 5500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_SMALL U?
+U 1 1 4B2F656C
+P 5500 30000
+F 0 "U?" H 5500 29750 60 0000 C CNN
+F 1 "N_SMALL" H 5500 29650 60 0000 C CNN
+ 1 5500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX U?
+U 1 1 4B2F654D
+P 3650 30000
+F 0 "U?" H 3650 29750 60 0000 C CNN
+F 1 "CIRCUMFLEX" H 3650 29650 60 0000 C CNN
+ 1 3650 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L RING U?
+U 1 1 4B2F647B
+P 4550 30000
+F 0 "U?" H 4550 29750 60 0000 C CNN
+F 1 "RING" H 4550 29650 60 0000 C CNN
+ 1 4550 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B2F645D
+P 4550 30000
+F 0 "U?" H 4550 29750 60 0000 C CNN
+F 1 "A_SMALL" H 4550 29650 60 0000 C CNN
+ 1 4550 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F644A
+P 3650 30000
+F 0 "U?" H 3650 29750 60 0000 C CNN
+F 1 "E_SMALL" H 3650 29650 60 0000 C CNN
+ 1 3650 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F643F
+P 2750 30000
+F 0 "U?" H 2750 29750 60 0000 C CNN
+F 1 "E_SMALL" H 2750 29650 60 0000 C CNN
+ 1 2750 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ACUTE U?
+U 1 1 4B2F640F
+P 1850 30000
+F 0 "U?" H 1850 29750 60 0000 C CNN
+F 1 "ACUTE" H 1850 29650 60 0000 C CNN
+ 1 1850 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F63F5
+P 1850 30000
+F 0 "U?" H 1850 29750 60 0000 C CNN
+F 1 "E_SMALL" H 1850 29650 60 0000 C CNN
+ 1 1850 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GRAVE U?
+U 1 1 4B2F63CB
+P 950 30000
+F 0 "U?" H 950 29750 60 0000 C CNN
+F 1 "GRAVE" H 950 29650 60 0000 C CNN
+ 1 950 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F63C1
+P 950 30000
+F 0 "U?" H 950 29750 60 0000 C CNN
+F 1 "E_SMALL" H 950 29650 60 0000 C CNN
+ 1 950 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Z_SMALL U?
+U 1 1 4B2D551C
+P 28650 25500
+F 0 "U?" H 28650 25250 60 0000 C CNN
+F 1 "Z_SMALL" H 28650 25150 60 0000 C CNN
+ 1 28650 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALL U?
+U 1 1 4B2D54F5
+P 3750 25500
+F 0 "U?" H 3750 25250 60 0000 C CNN
+F 1 "Y_SMALL" H 3750 25150 60 0000 C CNN
+ 1 3750 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L X_SMALL U?
+U 1 1 4B2D54ED
+P 23200 25500
+F 0 "U?" H 23200 25250 60 0000 C CNN
+F 1 "X_SMALL" H 23200 25150 60 0000 C CNN
+ 1 23200 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L W_SMALL U?
+U 1 1 4B2D54E6
+P 2800 25500
+F 0 "U?" H 2800 25250 60 0000 C CNN
+F 1 "W_SMALL" H 2800 25150 60 0000 C CNN
+ 1 2800 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_SMALL U?
+U 1 1 4B2D54E0
+P 1850 25500
+F 0 "U?" H 1850 25250 60 0000 C CNN
+F 1 "V_SMALL" H 1850 25150 60 0000 C CNN
+ 1 1850 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_SMALL U?
+U 1 1 4B2D529E
+P 1000 25500
+F 0 "U?" H 1000 25250 60 0000 C CNN
+F 1 "U_SMALL" H 1000 25150 60 0000 C CNN
+ 1 1000 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL U?
+U 1 1 4B2D5211
+P 18800 22500
+F 0 "U?" H 18800 22250 60 0000 C CNN
+F 1 "T_SMALL" H 18800 22150 60 0000 C CNN
+ 1 18800 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_SMALL U?
+U 1 1 4B2D5169
+P 8300 22500
+F 0 "U?" H 8300 22250 60 0000 C CNN
+F 1 "S_SMALL" H 8300 22150 60 0000 C CNN
+ 1 8300 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_SMALL U?
+U 1 1 4B2D4FA4
+P 31350 19500
+F 0 "U?" H 31350 19250 60 0000 C CNN
+F 1 "R_SMALL" H 31350 19150 60 0000 C CNN
+ 1 31350 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_SMALL U?
+U 1 1 4B2D4F9E
+P 950 22500
+F 0 "U?" H 950 22250 60 0000 C CNN
+F 1 "Q_SMALL" H 950 22150 60 0000 C CNN
+ 1 950 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_SMALL U?
+U 1 1 4B2D4EF9
+P 26550 19500
+F 0 "U?" H 26550 19250 60 0000 C CNN
+F 1 "P_SMALL" H 26550 19150 60 0000 C CNN
+ 1 26550 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B2D4EF4
+P 1000 19500
+F 0 "U?" H 1000 19250 60 0000 C CNN
+F 1 "O_SMALL" H 1000 19150 60 0000 C CNN
+ 1 1000 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_SMALL U?
+U 1 1 4B2D4EEE
+P 28850 16500
+F 0 "U?" H 28850 16250 60 0000 C CNN
+F 1 "N_SMALL" H 28850 16150 60 0000 C CNN
+ 1 28850 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_SMALL U?
+U 1 1 4B2D4CFB
+P 19050 16500
+F 0 "U?" H 19050 16250 60 0000 C CNN
+F 1 "M_SMALL" H 19050 16150 60 0000 C CNN
+ 1 19050 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL U?
+U 1 1 4B2D4B57
+P 750 16500
+F 0 "U?" H 750 16250 60 0000 C CNN
+F 1 "L_SMALL" H 750 16150 60 0000 C CNN
+ 1 750 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_SMALL U?
+U 1 1 4B2D4B51
+P 39100 13500
+F 0 "U?" H 39100 13250 60 0000 C CNN
+F 1 "K_SMALL" H 39100 13150 60 0000 C CNN
+ 1 39100 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_SMALL U?
+U 1 1 4B2D4A3A
+P 31800 13500
+F 0 "U?" H 31800 13250 60 0000 C CNN
+F 1 "J_SMALL" H 31800 13150 60 0000 C CNN
+ 1 31800 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_SMALL U?
+U 1 1 4B2D4A31
+P 30750 13500
+F 0 "U?" H 30750 13250 60 0000 C CNN
+F 1 "I_SMALL" H 30750 13150 60 0000 C CNN
+ 1 30750 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALL U?
+U 1 1 4B2D4971
+P 12500 13500
+F 0 "U?" H 12500 13250 60 0000 C CNN
+F 1 "H_SMALL" H 12500 13150 60 0000 C CNN
+ 1 12500 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_SMALL U?
+U 1 1 4B2D4627
+P 27200 7500
+F 0 "U?" H 27200 7250 60 0000 C CNN
+F 1 "G_SMALL" H 27200 7150 60 0000 C CNN
+ 1 27200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L F_SMALL U?
+U 1 1 4B2D4525
+P 25750 7500
+F 0 "U?" H 25750 7250 60 0000 C CNN
+F 1 "F_SMALL" H 25750 7150 60 0000 C CNN
+ 1 25750 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2D4418
+P 24500 10500
+F 0 "U?" H 24500 10250 60 0000 C CNN
+F 1 "E_SMALL" H 24500 10150 60 0000 C CNN
+ 1 24500 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALL U?
+U 1 1 4B2D435E
+P 1900 10500
+F 0 "U?" H 1900 10250 60 0000 C CNN
+F 1 "D_SMALL" H 1900 10150 60 0000 C CNN
+ 1 1900 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B2D4353
+P 24200 7500
+F 0 "U?" H 24200 7250 60 0000 C CNN
+F 1 "C_SMALL" H 24200 7150 60 0000 C CNN
+ 1 24200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_SMALL U?
+U 1 1 4B2D434B
+P 14400 7500
+F 0 "U?" H 14400 7250 60 0000 C CNN
+F 1 "B_SMALL" H 14400 7150 60 0000 C CNN
+ 1 14400 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B2D41F7
+P 950 7500
+F 0 "U?" H 950 7250 60 0000 C CNN
+F 1 "A_SMALL" H 950 7150 60 0000 C CNN
+ 1 950 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L AT U?
+U 1 1 4B2D3E66
+P 34900 4500
+F 0 "U?" H 34900 4250 60 0000 C CNN
+F 1 "AT" H 34900 4150 60 0000 C CNN
+ 1 34900 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L AMPERSAND U?
+U 1 1 4B2D38B3
+P 31500 4500
+F 0 "U?" H 31500 4250 60 0000 C CNN
+F 1 "AMPERSAND" H 31500 4150 60 0000 C CNN
+ 1 31500 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACKET U?
+U 1 1 4B2D32E4
+P 25350 3000
+F 0 "U?" H 25350 2750 60 0000 C CNN
+F 1 "BRACKET" H 25350 2650 60 0000 C CNN
+ 1 25350 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACE U?
+U 1 1 4B2D3140
+P 24650 3000
+F 0 "U?" H 24650 2750 60 0000 C CNN
+F 1 "BRACE" H 24650 2650 60 0000 C CNN
+ 1 24650 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BACKSLASH U?
+U 1 1 4B2D2FAF
+P 29350 3000
+F 0 "U?" H 29350 2750 60 0000 C CNN
+F 1 "BACKSLASH" H 29350 2650 60 0000 C CNN
+ 1 29350 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAREN U?
+U 1 1 4B2D2F71
+P 23950 3000
+F 0 "U?" H 23950 2750 60 0000 C CNN
+F 1 "PAREN" H 23950 2650 60 0000 C CNN
+ 1 23950 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH U?
+U 1 1 4B2D2CD3
+P 19150 3000
+F 0 "U?" H 19150 2750 60 0000 C CNN
+F 1 "SLASH" H 19150 2650 60 0000 C CNN
+ 1 19150 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUOTE U?
+U 1 1 4B2D2CC8
+P 18200 3000
+F 0 "U?" H 18200 2750 60 0000 C CNN
+F 1 "QUOTE" H 18200 2650 60 0000 C CNN
+ 1 18200 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L EXCLAM U?
+U 1 1 4B2D2943
+P 17550 3000
+F 0 "U?" H 17550 2750 60 0000 C CNN
+F 1 "EXCLAM" H 17550 2650 60 0000 C CNN
+ 1 17550 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L APOSTROPHE U?
+U 1 1 4B2D2932
+P 17050 3000
+F 0 "U?" H 17050 2750 60 0000 C CNN
+F 1 "APOSTROPHE" H 17050 2650 60 0000 C CNN
+ 1 17050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L COLON U?
+U 1 1 4B2D2727
+P 16550 3000
+F 0 "U?" H 16550 2750 60 0000 C CNN
+F 1 "COLON" H 16550 2650 60 0000 C CNN
+ 1 16550 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SEMICOLON U?
+U 1 1 4B2D271D
+P 16050 3000
+F 0 "U?" H 16050 2750 60 0000 C CNN
+F 1 "SEMICOLON" H 16050 2650 60 0000 C CNN
+ 1 16050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L FULL_STOP U?
+U 1 1 4B2D2713
+P 15550 3000
+F 0 "U?" H 15550 2750 60 0000 C CNN
+F 1 "FULL_STOP" H 15550 2650 60 0000 C CNN
+ 1 15550 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L COMMA U?
+U 1 1 4B2D2709
+P 15050 3000
+F 0 "U?" H 15050 2750 60 0000 C CNN
+F 1 "COMMA" H 15050 2650 60 0000 C CNN
+ 1 15050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE U?
+U 1 1 4B2D197B
+P 11800 3000
+F 0 "U?" H 11800 3050 60 0000 C CNN
+F 1 "SPACE" H 11800 2950 60 0000 C CNN
+ 1 11800 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Z_CAP U?
+U 1 1 4B2D17DA
+P 28700 24000
+F 0 "U?" H 28700 23750 60 0000 C CNN
+F 1 "Z_CAP" H 28700 23650 60 0000 C CNN
+ 1 28700 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_CAP U?
+U 1 1 4B2D17CC
+P 4150 24000
+F 0 "U?" H 4150 23750 60 0000 C CNN
+F 1 "Y_CAP" H 4150 23650 60 0000 C CNN
+ 1 4150 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L X_CAP U?
+U 1 1 4B2D17B1
+P 23250 24000
+F 0 "U?" H 23250 23750 60 0000 C CNN
+F 1 "X_CAP" H 23250 23650 60 0000 C CNN
+ 1 23250 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L W_CAP U?
+U 1 1 4B2D17AA
+P 3100 24000
+F 0 "U?" H 3100 23750 60 0000 C CNN
+F 1 "W_CAP" H 3100 23650 60 0000 C CNN
+ 1 3100 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_CAP U?
+U 1 1 4B2D1643
+P 2050 24000
+F 0 "U?" H 2050 23750 60 0000 C CNN
+F 1 "V_CAP" H 2050 23650 60 0000 C CNN
+ 1 2050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_CAP U?
+U 1 1 4B2D1638
+P 1050 24000
+F 0 "U?" H 1050 23750 60 0000 C CNN
+F 1 "U_CAP" H 1050 23650 60 0000 C CNN
+ 1 1050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP U?
+U 1 1 4B2D160C
+P 18950 21000
+F 0 "U?" H 18950 20750 60 0000 C CNN
+F 1 "T_CAP" H 18950 20650 60 0000 C CNN
+ 1 18950 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_CAP U?
+U 1 1 4B2D14C4
+P 7450 21000
+F 0 "U?" H 7450 20750 60 0000 C CNN
+F 1 "S_CAP" H 7450 20650 60 0000 C CNN
+ 1 7450 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_CAP U?
+U 1 1 4B2D12B5
+P 28700 18000
+F 0 "U?" H 28700 17750 60 0000 C CNN
+F 1 "R_CAP" H 28700 17650 60 0000 C CNN
+ 1 28700 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_CAP U?
+U 1 1 4B2D12A6
+P 1050 21000
+F 0 "U?" H 1050 20750 60 0000 C CNN
+F 1 "Q_CAP" H 1050 20650 60 0000 C CNN
+ 1 1050 21000
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_CAP U?
+U 1 1 4B2D129F
+P 26600 18000
+F 0 "U?" H 26600 17750 60 0000 C CNN
+F 1 "P_CAP" H 26600 17650 60 0000 C CNN
+ 1 26600 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_CAP U?
+U 1 1 4B2D1295
+P 1100 18000
+F 0 "U?" H 1100 17750 60 0000 C CNN
+F 1 "O_CAP" H 1100 17650 60 0000 C CNN
+ 1 1100 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_CAP U?
+U 1 1 4B2D128D
+P 28950 15000
+F 0 "U?" H 28950 14750 60 0000 C CNN
+F 1 "N_CAP" H 28950 14650 60 0000 C CNN
+ 1 28950 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_CAP U?
+U 1 1 4B2D0DC8
+P 18950 15000
+F 0 "U?" H 18950 14750 60 0000 C CNN
+F 1 "M_CAP" H 18950 14650 60 0000 C CNN
+ 1 18950 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_CAP U?
+U 1 1 4B2D0DC0
+P 1000 15000
+F 0 "U?" H 1000 14750 60 0000 C CNN
+F 1 "L_CAP" H 1000 14650 60 0000 C CNN
+ 1 1000 15000
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_CAP U?
+U 1 1 4B2D0DB7
+P 39200 12000
+F 0 "U?" H 39200 11750 60 0000 C CNN
+F 1 "K_CAP" H 39200 11650 60 0000 C CNN
+ 1 39200 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_CAP U?
+U 1 1 4B2D09CA
+P 31400 12000
+F 0 "U?" H 31400 11750 60 0000 C CNN
+F 1 "J_CAP" H 31400 11650 60 0000 C CNN
+ 1 31400 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_CAP U?
+U 1 1 4B2D09C2
+P 30750 12000
+F 0 "U?" H 30750 11750 60 0000 C CNN
+F 1 "I_CAP" H 30750 11650 60 0000 C CNN
+ 1 30750 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_CAP U?
+U 1 1 4B2D0897
+P 12550 12000
+F 0 "U?" H 12550 11750 60 0000 C CNN
+F 1 "H_CAP" H 12550 11650 60 0000 C CNN
+ 1 12550 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_CAP U?
+U 1 1 4B2D0789
+P 26600 6000
+F 0 "U?" H 26600 5750 60 0000 C CNN
+F 1 "G_CAP" H 26600 5650 60 0000 C CNN
+ 1 26600 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L F_CAP U?
+U 1 1 4B2D05A7
+P 25600 6000
+F 0 "U?" H 25600 5750 60 0000 C CNN
+F 1 "F_CAP" H 25600 5650 60 0000 C CNN
+ 1 25600 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_CAP U?
+U 1 1 4B2D0598
+P 21600 9000
+F 0 "U?" H 21600 8750 60 0000 C CNN
+F 1 "E_CAP" H 21600 8650 60 0000 C CNN
+ 1 21600 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_CAP U?
+U 1 1 4B2D0440
+P 1950 9000
+F 0 "U?" H 1950 8750 60 0000 C CNN
+F 1 "D_CAP" H 1950 8650 60 0000 C CNN
+ 1 1950 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_CAP U?
+U 1 1 4B2D016F
+P 23650 6000
+F 0 "U?" H 23650 5750 60 0000 C CNN
+F 1 "C_CAP" H 23650 5650 60 0000 C CNN
+ 1 23650 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_CAP U?
+U 1 1 4B2D0053
+P 15600 6000
+F 0 "U?" H 15600 5750 60 0000 C CNN
+F 1 "B_CAP" H 15600 5650 60 0000 C CNN
+ 1 15600 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_CAP U?
+U 1 1 4B2CFDB5
+P 950 6000
+F 0 "U?" H 950 5700 60 0000 C CNN
+F 1 "A_CAP" H 950 5600 60 0000 C CNN
+ 1 950 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUESTION U?
+U 1 1 4B2CF927
+P 10950 3000
+F 0 "U?" H 10950 2750 60 0000 C CNN
+F 1 "QUESTION" H 10950 2650 60 0000 C CNN
+ 1 10950 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_9 U?
+U 1 1 4B2CEF90
+P 10000 3000
+F 0 "U?" H 10000 2750 60 0000 C CNN
+F 1 "DIGIT_9" H 10000 2650 60 0000 C CNN
+ 1 10000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_8 U?
+U 1 1 4B2CEF67
+P 9000 3000
+F 0 "U?" H 9000 2750 60 0000 C CNN
+F 1 "DIGIT_8" H 9000 2650 60 0000 C CNN
+ 1 9000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_7 U?
+U 1 1 4B2CEF56
+P 8000 3000
+F 0 "U?" H 8000 2750 60 0000 C CNN
+F 1 "DIGIT_7" H 8000 2650 60 0000 C CNN
+ 1 8000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_6 U?
+U 1 1 4B2CEF43
+P 7000 3000
+F 0 "U?" H 7000 2750 60 0000 C CNN
+F 1 "DIGIT_6" H 7000 2650 60 0000 C CNN
+ 1 7000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_5 U?
+U 1 1 4B2CEF2D
+P 6000 3000
+F 0 "U?" H 6000 2750 60 0000 C CNN
+F 1 "DIGIT_5" H 6000 2650 60 0000 C CNN
+ 1 6000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_4 U?
+U 1 1 4B2CEF1F
+P 5000 3000
+F 0 "U?" H 5000 2750 60 0000 C CNN
+F 1 "DIGIT_4" H 5000 2650 60 0000 C CNN
+ 1 5000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_3 U?
+U 1 1 4B2CEEFB
+P 4000 3000
+F 0 "U?" H 4000 2750 60 0000 C CNN
+F 1 "DIGIT_3" H 4000 2650 60 0000 C CNN
+ 1 4000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_2 U?
+U 1 1 4B2CEED7
+P 3000 3000
+F 0 "U?" H 3000 2750 60 0000 C CNN
+F 1 "DIGIT_2" H 3000 2650 60 0000 C CNN
+ 1 3000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_1 U?
+U 1 1 4B2CEEC5
+P 2000 3000
+F 0 "U?" H 2000 2750 60 0000 C CNN
+F 1 "DIGIT_1" H 2000 2650 60 0000 C CNN
+ 1 2000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_0 U?
+U 1 1 4B2CEEA2
+P 1000 3000
+F 0 "U?" H 1000 2750 60 0000 C CNN
+F 1 "DIGIT_0" H 1000 2650 60 0000 C CNN
+ 1 1000 3000
+ 1 0 0 -1
+$EndComp
+$EndSCHEMATC
diff --git a/helpers/tools_to_build_newstroke-font/font_draft.sch b/helpers/tools_to_build_newstroke-font/font_draft.sch
new file mode 100644
index 0000000..9951a03
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font_draft.sch
@@ -0,0 +1,2213 @@
+EESchema Schematic File Version 2 date Срд 23 Дек 2009 13:10:18
+LIBS:font
+LIBS:power
+LIBS:font-cache
+EELAYER 24 0
+EELAYER END
+$Descr A1 33070 23400
+Sheet 1 1
+Title ""
+Date "19 dec 2009"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L KAPPA_SMALL_SCRIPT U?
+U 1 1 4B321655
+P 10800 20900
+F 0 "U?" H 10800 20650 60 0000 C CNN
+F 1 "KAPPA_SMALL_SCRIPT" H 10800 20550 60 0000 C CNN
+ 1 10800 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L RHO_SMALL_TAIL U?
+U 1 1 4B3213EB
+P 17500 20900
+F 0 "U?" H 17500 20650 60 0000 C CNN
+F 1 "RHO_SMALL_TAIL" H 17500 20550 60 0000 C CNN
+ 1 17500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L MIDDOT_SMALL U?
+U 1 1 4B3211C7
+P 25950 12850
+F 0 "U?" H 25950 12600 60 0000 C CNN
+F 1 "MIDDOT_SMALL" H 25950 12500 60 0000 C CNN
+ 1 25950 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B32119F
+P 25950 12850
+F 0 "U?" H 25950 12600 60 0000 C CNN
+F 1 "C_SMALL" H 25950 12500 60 0000 C CNN
+ 1 25950 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_CAP U?
+U 1 1 4B32118F
+P 25000 12850
+F 0 "U?" H 25000 12600 60 0000 C CNN
+F 1 "C_CAP" H 25000 12500 60 0000 C CNN
+ 1 25000 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L THETA_SMALL_SCRIPT U?
+U 1 1 4B320EB2
+P 9350 20900
+F 0 "U?" H 9350 20650 60 0000 C CNN
+F 1 "THETA_SMALL_SCRIPT" H 9350 20550 60 0000 C CNN
+ 1 9350 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L BETA_SMALL_CURLED U?
+U 1 1 4B320DDB
+P 3000 20900
+F 0 "U?" H 3000 20650 60 0000 C CNN
+F 1 "BETA_SMALL_CURLED" H 3000 20550 60 0000 C CNN
+ 1 3000 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_PI_SMALL U?
+U 1 1 4B320C4D
+P 27700 20900
+F 0 "U?" H 27700 20650 60 0000 C CNN
+F 1 "OMEGA_PI_SMALL" H 27700 20550 60 0000 C CNN
+ 1 27700 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_SMALL_VAR U?
+U 1 1 4B320C07
+P 23500 20900
+F 0 "U?" H 23500 20650 60 0000 C CNN
+F 1 "PHI_SMALL_VAR" H 23500 20550 60 0000 C CNN
+ 1 23500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_SMALL U?
+U 1 1 4B320827
+P 26550 20900
+F 0 "U?" H 26550 20650 60 0000 C CNN
+F 1 "OMEGA_SMALL" H 26550 20550 60 0000 C CNN
+ 1 26550 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSI_SMALL U?
+U 1 1 4B32078C
+P 25450 20900
+F 0 "U?" H 25450 20650 60 0000 C CNN
+F 1 "PSI_SMALL" H 25450 20550 60 0000 C CNN
+ 1 25450 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L CHI_SMALL U?
+U 1 1 4B320751
+P 24500 20900
+F 0 "U?" H 24500 20650 60 0000 C CNN
+F 1 "CHI_SMALL" H 24500 20550 60 0000 C CNN
+ 1 24500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_SMALL U?
+U 1 1 4B3206BF
+P 22400 20900
+F 0 "U?" H 22400 20650 60 0000 C CNN
+F 1 "PHI_SMALL" H 22400 20550 60 0000 C CNN
+ 1 22400 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L UPSILON_SMALL U?
+U 1 1 4B3205E2
+P 21400 20900
+F 0 "U?" H 21400 20650 60 0000 C CNN
+F 1 "UPSILON_SMALL" H 21400 20550 60 0000 C CNN
+ 1 21400 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L TAU_SMALL U?
+U 1 1 4B3202CC
+P 20400 20900
+F 0 "U?" H 20400 20650 60 0000 C CNN
+F 1 "TAU_SMALL" H 20400 20550 60 0000 C CNN
+ 1 20400 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_SMALL U?
+U 1 1 4B31FE4E
+P 19400 20900
+F 0 "U?" H 19400 20650 60 0000 C CNN
+F 1 "SIGMA_SMALL" H 19400 20550 60 0000 C CNN
+ 1 19400 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_SMALL_FINAL U?
+U 1 1 4B31FCE5
+P 18500 20900
+F 0 "U?" H 18500 20650 60 0000 C CNN
+F 1 "SIGMA_SMALL_FINAL" H 18500 20550 60 0000 C CNN
+ 1 18500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L RHO_SMALL U?
+U 1 1 4B31FAA4
+P 16500 20900
+F 0 "U?" H 16500 20650 60 0000 C CNN
+F 1 "RHO_SMALL" H 16500 20550 60 0000 C CNN
+ 1 16500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L XI_SMALL U?
+U 1 1 4B31F7D5
+P 14450 20900
+F 0 "U?" H 14450 20650 60 0000 C CNN
+F 1 "XI_SMALL" H 14450 20550 60 0000 C CNN
+ 1 14450 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L NU_SMALL U?
+U 1 1 4B31F6F2
+P 13500 20900
+F 0 "U?" H 13500 20650 60 0000 C CNN
+F 1 "NU_SMALL" H 13500 20550 60 0000 C CNN
+ 1 13500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAERESIS_ACUTE U?
+U 1 1 4B31F611
+P 23850 12850
+F 0 "U?" H 23850 12600 60 0000 C CNN
+F 1 "DIAERESIS_ACUTE" H 23850 12500 60 0000 C CNN
+ 1 23850 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B31F5FE
+P 23850 12850
+F 0 "U?" H 23850 12600 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 23850 12500 60 0000 C CNN
+ 1 23850 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L LAMBDA_SMALL U?
+U 1 1 4B310A91
+P 11600 20900
+F 0 "U?" H 11600 20650 60 0000 C CNN
+F 1 "LAMBDA_SMALL" H 11600 20550 60 0000 C CNN
+ 1 11600 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L THETA_SMALL U?
+U 1 1 4B310A1A
+P 8400 20900
+F 0 "U?" H 8400 20650 60 0000 C CNN
+F 1 "THETA_SMALL" H 8400 20550 60 0000 C CNN
+ 1 8400 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L IOTA_SMALL U?
+U 1 1 4B310994
+P 10050 20900
+F 0 "U?" H 10050 20650 60 0000 C CNN
+F 1 "IOTA_SMALL" H 10050 20550 60 0000 C CNN
+ 1 10050 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L ETA_SMALL U?
+U 1 1 4B31098B
+P 7400 20900
+F 0 "U?" H 7400 20650 60 0000 C CNN
+F 1 "ETA_SMALL" H 7400 20550 60 0000 C CNN
+ 1 7400 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L ZETA_SMALL U?
+U 1 1 4B31097D
+P 6550 20900
+F 0 "U?" H 6550 20650 60 0000 C CNN
+F 1 "ZETA_SMALL" H 6550 20550 60 0000 C CNN
+ 1 6550 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L EPSILON_SMALL U?
+U 1 1 4B310769
+P 5650 20900
+F 0 "U?" H 5650 20650 60 0000 C CNN
+F 1 "EPSILON_SMALL" H 5650 20550 60 0000 C CNN
+ 1 5650 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L DELTA_SMALL U?
+U 1 1 4B310761
+P 4750 20900
+F 0 "U?" H 4750 20650 60 0000 C CNN
+F 1 "DELTA_SMALL" H 4750 20550 60 0000 C CNN
+ 1 4750 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_SMALL U?
+U 1 1 4B310549
+P 3850 20900
+F 0 "U?" H 3850 20650 60 0000 C CNN
+F 1 "GAMMA_SMALL" H 3850 20550 60 0000 C CNN
+ 1 3850 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L BETA_SMALL U?
+U 1 1 4B310541
+P 2050 20900
+F 0 "U?" H 2050 20650 60 0000 C CNN
+F 1 "BETA_SMALL" H 2050 20550 60 0000 C CNN
+ 1 2050 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALPHA_SMALL U?
+U 1 1 4B310539
+P 1000 20900
+F 0 "U?" H 1000 20650 60 0000 C CNN
+F 1 "ALPHA_SMALL" H 1000 20550 60 0000 C CNN
+ 1 1000 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L OMEGA_CAP U?
+U 1 1 4B310202
+P 29700 19100
+F 0 "U?" H 29700 18850 60 0000 C CNN
+F 1 "OMEGA_CAP" H 29700 18750 60 0000 C CNN
+ 1 29700 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L PSI_CAP U?
+U 1 1 4B30FF79
+P 28550 19100
+F 0 "U?" H 28550 18850 60 0000 C CNN
+F 1 "PSI_CAP" H 28550 18750 60 0000 C CNN
+ 1 28550 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L PHI_CAP U?
+U 1 1 4B30FE95
+P 27450 19100
+F 0 "U?" H 27450 18850 60 0000 C CNN
+F 1 "PHI_CAP" H 27450 18750 60 0000 C CNN
+ 1 27450 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_CAP U?
+U 1 1 4B30FD63
+P 26450 19100
+F 0 "U?" H 26450 18850 60 0000 C CNN
+F 1 "SIGMA_CAP" H 26450 18750 60 0000 C CNN
+ 1 26450 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_CAP U?
+U 1 1 4B30FD55
+P 25400 19100
+F 0 "U?" H 25400 18850 60 0000 C CNN
+F 1 "PI_CAP" H 25400 18750 60 0000 C CNN
+ 1 25400 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L XI_CAP U?
+U 1 1 4B30FCBD
+P 24400 19100
+F 0 "U?" H 24400 18850 60 0000 C CNN
+F 1 "XI_CAP" H 24400 18750 60 0000 C CNN
+ 1 24400 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L LAMBDA_CAP U?
+U 1 1 4B30FCAE
+P 23450 19100
+F 0 "U?" H 23450 18850 60 0000 C CNN
+F 1 "LAMBDA_CAP" H 23450 18750 60 0000 C CNN
+ 1 23450 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L THETA_CAP U?
+U 1 1 4B30FC0C
+P 22400 19100
+F 0 "U?" H 22400 18850 60 0000 C CNN
+F 1 "THETA_CAP" H 22400 18750 60 0000 C CNN
+ 1 22400 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L DELTA_CAP U?
+U 1 1 4B30FBFF
+P 21350 19100
+F 0 "U?" H 21350 18850 60 0000 C CNN
+F 1 "DELTA_CAP" H 21350 18750 60 0000 C CNN
+ 1 21350 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L GAMMA_CAP U?
+U 1 1 4B30FBF3
+P 20500 19100
+F 0 "U?" H 20500 18850 60 0000 C CNN
+F 1 "GAMMA_CAP" H 20500 18750 60 0000 C CNN
+ 1 20500 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L IJ_SMALL U?
+U 1 1 4B2FFE49
+P 19750 19100
+F 0 "U?" H 19750 18850 60 0000 C CNN
+F 1 "IJ_SMALL" H 19750 18750 60 0000 C CNN
+ 1 19750 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L IJ_CAP U?
+U 1 1 4B2FFE3D
+P 18600 19100
+F 0 "U?" H 18600 18850 60 0000 C CNN
+F 1 "IJ_CAP" H 18600 18750 60 0000 C CNN
+ 1 18600 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_LONG_SMALL U?
+U 1 1 4B2FF6D0
+P 17350 19100
+F 0 "U?" H 17350 18850 60 0000 C CNN
+F 1 "S_LONG_SMALL" H 17350 18750 60 0000 C CNN
+ 1 17350 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL_STROKE U?
+U 1 1 4B2FF642
+P 16650 19100
+F 0 "U?" H 16650 18850 60 0000 C CNN
+F 1 "T_SMALL_STROKE" H 16650 18750 60 0000 C CNN
+ 1 16650 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP_STROKE U?
+U 1 1 4B2FF638
+P 16000 19100
+F 0 "U?" H 16000 18850 60 0000 C CNN
+F 1 "T_CAP_STROKE" H 16000 18750 60 0000 C CNN
+ 1 16000 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L APOSTROPHE_N_SMALL U?
+U 1 1 4B2FF491
+P 15100 19100
+F 0 "U?" H 15100 18850 60 0000 C CNN
+F 1 "APOSTROPHE_N_SMALL" H 15100 18750 60 0000 C CNN
+ 1 15100 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L ENG_SMALL U?
+U 1 1 4B2FEDC3
+P 13950 19100
+F 0 "U?" H 13950 18850 60 0000 C CNN
+F 1 "ENG_SMALL" H 13950 18750 60 0000 C CNN
+ 1 13950 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L ENG_CAP U?
+U 1 1 4B2FEDB9
+P 12950 19100
+F 0 "U?" H 12950 18850 60 0000 C CNN
+F 1 "ENG_CAP" H 12950 18750 60 0000 C CNN
+ 1 12950 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_STROKE U?
+U 1 1 4B2FECFF
+P 12050 19100
+F 0 "U?" H 12050 18850 60 0000 C CNN
+F 1 "L_SMALL_STROKE" H 12050 18750 60 0000 C CNN
+ 1 12050 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_CAP_STROKE U?
+U 1 1 4B2FECF6
+P 11400 19100
+F 0 "U?" H 11400 18850 60 0000 C CNN
+F 1 "L_CAP_STROKE" H 11400 18750 60 0000 C CNN
+ 1 11400 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_SMALLCAP U?
+U 1 1 4B2FEB9B
+P 10450 19100
+F 0 "U?" H 10450 18850 60 0000 C CNN
+F 1 "K_SMALLCAP" H 10450 18750 60 0000 C CNN
+ 1 10450 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALL_STROKE U?
+U 1 1 4B2FEA77
+P 9550 19100
+F 0 "U?" H 9550 18850 60 0000 C CNN
+F 1 "H_SMALL_STROKE" H 9550 18750 60 0000 C CNN
+ 1 9550 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_CAP_STROKE U?
+U 1 1 4B2FEA6A
+P 8400 19100
+F 0 "U?" H 8400 18850 60 0000 C CNN
+F 1 "H_CAP_STROKE" H 8400 18750 60 0000 C CNN
+ 1 8400 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_MIDDOT U?
+U 1 1 4B2FE870
+P 7350 19100
+F 0 "U?" H 7350 18850 60 0000 C CNN
+F 1 "L_SMALL_MIDDOT" H 7350 18750 60 0000 C CNN
+ 1 7350 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_CAP_MIDDOT U?
+U 1 1 4B2FE868
+P 6750 19100
+F 0 "U?" H 6750 18850 60 0000 C CNN
+F 1 "L_CAP_MIDDOT" H 6750 18750 60 0000 C CNN
+ 1 6750 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL_CARON U?
+U 1 1 4B2FE827
+P 5800 19100
+F 0 "U?" H 5800 18850 60 0000 C CNN
+F 1 "L_SMALL_CARON" H 5800 18750 60 0000 C CNN
+ 1 5800 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_CAP_CARON U?
+U 1 1 4B2FE7DA
+P 5200 19100
+F 0 "U?" H 5200 18850 60 0000 C CNN
+F 1 "L_CAP_CARON" H 5200 18750 60 0000 C CNN
+ 1 5200 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALL_STROKE U?
+U 1 1 4B2FE72E
+P 4150 19100
+F 0 "U?" H 4150 18850 60 0000 C CNN
+F 1 "D_SMALL_STROKE" H 4150 18750 60 0000 C CNN
+ 1 4150 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALL_CARON U?
+U 1 1 4B2FE710
+P 3000 19100
+F 0 "U?" H 3000 18850 60 0000 C CNN
+F 1 "D_SMALL_CARON" H 3000 18750 60 0000 C CNN
+ 1 3000 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_SMALL U?
+U 1 1 4B2FE533
+P 23100 12850
+F 0 "U?" H 23100 12600 60 0000 C CNN
+F 1 "I_SMALL" H 23100 12500 60 0000 C CNN
+ 1 23100 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOT_ABOVE_CAP U?
+U 1 1 4B2FE51E
+P 22600 12850
+F 0 "U?" H 22600 12600 60 0000 C CNN
+F 1 "DOT_ABOVE_CAP" H 22600 12500 60 0000 C CNN
+ 1 22600 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_CAP U?
+U 1 1 4B2FE50B
+P 22600 12850
+F 0 "U?" H 22600 12600 60 0000 C CNN
+F 1 "I_CAP" H 22600 12500 60 0000 C CNN
+ 1 22600 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L OGONEK_A U?
+U 1 1 4B2FE279
+P 21000 12850
+F 0 "U?" H 21000 12600 60 0000 C CNN
+F 1 "OGONEK_A" H 21000 12500 60 0000 C CNN
+ 1 21000 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B2FE25B
+P 21900 12850
+F 0 "U?" H 21900 12600 60 0000 C CNN
+F 1 "A_SMALL" H 21900 12500 60 0000 C CNN
+ 1 21900 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L OGONEK_U U?
+U 1 1 4B2FE225
+P 21900 12850
+F 0 "U?" H 21900 12600 60 0000 C CNN
+F 1 "OGONEK_U" H 21900 12500 60 0000 C CNN
+ 1 21900 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_CAP U?
+U 1 1 4B2FE208
+P 21000 12850
+F 0 "U?" H 21000 12600 60 0000 C CNN
+F 1 "A_CAP" H 21000 12500 60 0000 C CNN
+ 1 21000 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_CAP U?
+U 1 1 4B2FDD10
+P 19150 12850
+F 0 "U?" H 19150 12600 60 0000 C CNN
+F 1 "BREVE_CAP" H 19150 12500 60 0000 C CNN
+ 1 19150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE U?
+U 1 1 4B2FDD03
+P 20050 12850
+F 0 "U?" H 20050 12600 60 0000 C CNN
+F 1 "BREVE" H 20050 12500 60 0000 C CNN
+ 1 20050 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_SMALL U?
+U 1 1 4B2FDCF7
+P 20050 12850
+F 0 "U?" H 20050 12600 60 0000 C CNN
+F 1 "G_SMALL" H 20050 12500 60 0000 C CNN
+ 1 20050 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_CAP U?
+U 1 1 4B2FDCF0
+P 19150 12850
+F 0 "U?" H 19150 12600 60 0000 C CNN
+F 1 "G_CAP" H 19150 12500 60 0000 C CNN
+ 1 19150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L CARON_CAP U?
+U 1 1 4B2FDCD4
+P 17200 12850
+F 0 "U?" H 17200 12600 60 0000 C CNN
+F 1 "CARON_CAP" H 17200 12500 60 0000 C CNN
+ 1 17200 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L CARON U?
+U 1 1 4B2FDCCB
+P 18150 12850
+F 0 "U?" H 18150 12600 60 0000 C CNN
+F 1 "CARON" H 18150 12500 60 0000 C CNN
+ 1 18150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B2FDCC4
+P 18150 12850
+F 0 "U?" H 18150 12600 60 0000 C CNN
+F 1 "C_SMALL" H 18150 12500 60 0000 C CNN
+ 1 18150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_CAP U?
+U 1 1 4B2FDCBB
+P 17200 12850
+F 0 "U?" H 17200 12600 60 0000 C CNN
+F 1 "C_CAP" H 17200 12500 60 0000 C CNN
+ 1 17200 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L MIDDOT U?
+U 1 1 4B2FDC51
+P 25000 12850
+F 0 "U?" H 25000 12600 60 0000 C CNN
+F 1 "MIDDOT" H 25000 12500 60 0000 C CNN
+ 1 25000 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L OGONEK U?
+U 1 1 4B2FDB5A
+P 16150 12850
+F 0 "U?" H 16150 12600 60 0000 C CNN
+F 1 "OGONEK" H 16150 12500 60 0000 C CNN
+ 1 16150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2FDB46
+P 16150 12850
+F 0 "U?" H 16150 12600 60 0000 C CNN
+F 1 "E_SMALL" H 16150 12500 60 0000 C CNN
+ 1 16150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L RING_ABOVE_CAP U?
+U 1 1 4B2FD875
+P 8350 12850
+F 0 "U?" H 8350 12600 60 0000 C CNN
+F 1 "RING_ABOVE_CAP" H 8350 12500 60 0000 C CNN
+ 1 8350 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_CAP U?
+U 1 1 4B2FD86E
+P 8350 12850
+F 0 "U?" H 8350 12600 60 0000 C CNN
+F 1 "A_CAP" H 8350 12500 60 0000 C CNN
+ 1 8350 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_STROKE U?
+U 1 1 4B2FCFB5
+P 2100 19100
+F 0 "U?" H 2100 18850 60 0000 C CNN
+F 1 "O_SMALL_STROKE" H 2100 18750 60 0000 C CNN
+ 1 2100 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_CAP_STROKE U?
+U 1 1 4B2FCFAB
+P 1050 19100
+F 0 "U?" H 1050 18850 60 0000 C CNN
+F 1 "O_CAP_STROKE" H 1050 18750 60 0000 C CNN
+ 1 1050 19100
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_SMALL U?
+U 1 1 4B2FA49D
+P 15450 20900
+F 0 "U?" H 15450 20650 60 0000 C CNN
+F 1 "PI_SMALL" H 15450 20550 60 0000 C CNN
+ 1 15450 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L MU_SMALL U?
+U 1 1 4B2FA03E
+P 12500 20900
+F 0 "U?" H 12500 20650 60 0000 C CNN
+F 1 "MU_SMALL" H 12500 20550 60 0000 C CNN
+ 1 12500 20900
+ 1 0 0 -1
+$EndComp
+$Comp
+L SECTION U?
+U 1 1 4B2F9C1F
+P 4550 17100
+F 0 "U?" H 4550 16850 60 0000 C CNN
+F 1 "SECTION" H 4550 16750 60 0000 C CNN
+ 1 4550 17100
+ 1 0 0 -1
+$EndComp
+$Comp
+L BROKEN_BAR U?
+U 1 1 4B2F9A05
+P 31750 15300
+F 0 "U?" H 31750 15050 60 0000 C CNN
+F 1 "BROKEN_BAR" H 31750 14950 60 0000 C CNN
+ 1 31750 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L REGISTERED U?
+U 1 1 4B2F9974
+P 3200 17100
+F 0 "U?" H 3200 16850 60 0000 C CNN
+F 1 "REGISTERED" H 3200 16750 60 0000 C CNN
+ 1 3200 17100
+ 1 0 0 -1
+$EndComp
+$Comp
+L COPYRIGHT U?
+U 1 1 4B2F9968
+P 1400 17100
+F 0 "U?" H 1400 16850 60 0000 C CNN
+F 1 "COPYRIGHT" H 1400 16750 60 0000 C CNN
+ 1 1400 17100
+ 1 0 0 -1
+$EndComp
+$Comp
+L NOT U?
+U 1 1 4B2F9425
+P 30850 15300
+F 0 "U?" H 30850 15050 60 0000 C CNN
+F 1 "NOT" H 30850 14950 60 0000 C CNN
+ 1 30850 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L PLUS_MINUS U?
+U 1 1 4B2F93E7
+P 29550 15300
+F 0 "U?" H 29550 15050 60 0000 C CNN
+F 1 "PLUS_MINUS" H 29550 14950 60 0000 C CNN
+ 1 29550 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L FRAC_3_4 U?
+U 1 1 4B2F93A2
+P 28100 15300
+F 0 "U?" H 28100 15050 60 0000 C CNN
+F 1 "FRAC_3_4" H 28100 14950 60 0000 C CNN
+ 1 28100 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L FRAC_1_2 U?
+U 1 1 4B2F939A
+P 26550 15300
+F 0 "U?" H 26550 15050 60 0000 C CNN
+F 1 "FRAC_1_2" H 26550 14950 60 0000 C CNN
+ 1 26550 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L FRAC_1_4 U?
+U 1 1 4B2F9394
+P 25000 15300
+F 0 "U?" H 25000 15050 60 0000 C CNN
+F 1 "FRAC_1_4" H 25000 14950 60 0000 C CNN
+ 1 25000 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL_SUP U?
+U 1 1 4B2F9040
+P 23850 15300
+F 0 "U?" H 23850 15050 60 0000 C CNN
+F 1 "A_SMALL_SUP" H 23850 14950 60 0000 C CNN
+ 1 23850 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL_SUP U?
+U 1 1 4B2F903B
+P 23050 15300
+F 0 "U?" H 23050 15050 60 0000 C CNN
+F 1 "O_SMALL_SUP" H 23050 14950 60 0000 C CNN
+ 1 23050 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_3_SUP U?
+U 1 1 4B2F8F1B
+P 22250 15300
+F 0 "U?" H 22250 15050 60 0000 C CNN
+F 1 "DIGIT_3_SUP" H 22250 14950 60 0000 C CNN
+ 1 22250 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_2_SUP U?
+U 1 1 4B2F8F13
+P 21450 15300
+F 0 "U?" H 21450 15050 60 0000 C CNN
+F 1 "DIGIT_2_SUP" H 21450 14950 60 0000 C CNN
+ 1 21450 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_1_SUP U?
+U 1 1 4B2F8F0C
+P 20650 15300
+F 0 "U?" H 20650 15050 60 0000 C CNN
+F 1 "DIGIT_1_SUP" H 20650 14950 60 0000 C CNN
+ 1 20650 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_0_SUP U?
+U 1 1 4B2F8F03
+P 19850 15300
+F 0 "U?" H 19850 15050 60 0000 C CNN
+F 1 "DIGIT_0_SUP" H 19850 14950 60 0000 C CNN
+ 1 19850 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DEGREE U?
+U 1 1 4B2F89E6
+P 19050 15300
+F 0 "U?" H 19050 15050 60 0000 C CNN
+F 1 "DEGREE" H 19050 14950 60 0000 C CNN
+ 1 19050 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L MACRON_CAP U?
+U 1 1 4B2F8930
+P 14200 12850
+F 0 "U?" H 14200 12600 60 0000 C CNN
+F 1 "MACRON_CAP" H 14200 12500 60 0000 C CNN
+ 1 14200 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L MACRON U?
+U 1 1 4B2F88C4
+P 15250 12850
+F 0 "U?" H 15250 12600 60 0000 C CNN
+F 1 "MACRON" H 15250 12500 60 0000 C CNN
+ 1 15250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B2F88A1
+P 15250 12850
+F 0 "U?" H 15250 12600 60 0000 C CNN
+F 1 "O_SMALL" H 15250 12500 60 0000 C CNN
+ 1 15250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_CAP U?
+U 1 1 4B2F8895
+P 14200 12850
+F 0 "U?" H 14200 12600 60 0000 C CNN
+F 1 "O_CAP" H 14200 12500 60 0000 C CNN
+ 1 14200 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L GUILLEMET_DBL_RIGHT U?
+U 1 1 4B2F8767
+P 18150 15300
+F 0 "U?" H 18150 15050 60 0000 C CNN
+F 1 "GUILLEMET_DBL_RIGHT" H 18150 14950 60 0000 C CNN
+ 1 18150 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L GUILLEMET_DBL_LEFT U?
+U 1 1 4B2F875F
+P 17150 15300
+F 0 "U?" H 17150 15050 60 0000 C CNN
+F 1 "GUILLEMET_DBL_LEFT" H 17150 14950 60 0000 C CNN
+ 1 17150 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L YEN U?
+U 1 1 4B2F833A
+P 16050 15300
+F 0 "U?" H 16050 15050 60 0000 C CNN
+F 1 "YEN" H 16050 14950 60 0000 C CNN
+ 1 16050 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CENT U?
+U 1 1 4B2F8334
+P 15000 15300
+F 0 "U?" H 15000 15050 60 0000 C CNN
+F 1 "CENT" H 15000 14950 60 0000 C CNN
+ 1 15000 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CURRENCY U?
+U 1 1 4B2F8327
+P 14000 15300
+F 0 "U?" H 14000 15050 60 0000 C CNN
+F 1 "CURRENCY" H 14000 14950 60 0000 C CNN
+ 1 14000 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L POUND U?
+U 1 1 4B2F8139
+P 13050 15300
+F 0 "U?" H 13050 15050 60 0000 C CNN
+F 1 "POUND" H 13050 14950 60 0000 C CNN
+ 1 13050 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUESTION_DOWN U?
+U 1 1 4B2F806E
+P 12100 15300
+F 0 "U?" H 12100 15050 60 0000 C CNN
+F 1 "QUESTION_DOWN" H 12100 14950 60 0000 C CNN
+ 1 12100 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L EXCLAM_DOWN U?
+U 1 1 4B2F8064
+P 11400 15300
+F 0 "U?" H 11400 15050 60 0000 C CNN
+F 1 "EXCLAM_DOWN" H 11400 14950 60 0000 C CNN
+ 1 11400 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L THORN_SMALL U?
+U 1 1 4B2F7DE3
+P 10700 15300
+F 0 "U?" H 10700 15050 60 0000 C CNN
+F 1 "THORN_SMALL" H 10700 14950 60 0000 C CNN
+ 1 10700 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L THORN_CAP U?
+U 1 1 4B2F7DDA
+P 9700 15300
+F 0 "U?" H 9700 15050 60 0000 C CNN
+F 1 "THORN_CAP" H 9700 14950 60 0000 C CNN
+ 1 9700 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L ETH_SMALL U?
+U 1 1 4B2F7DCF
+P 8650 15300
+F 0 "U?" H 8650 15050 60 0000 C CNN
+F 1 "ETH_SMALL" H 8650 14950 60 0000 C CNN
+ 1 8650 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L ETH_CAP U?
+U 1 1 4B2F7DC6
+P 7700 15300
+F 0 "U?" H 7700 15050 60 0000 C CNN
+F 1 "ETH_CAP" H 7700 14950 60 0000 C CNN
+ 1 7700 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESZETT U?
+U 1 1 4B2F7DA4
+P 6450 15300
+F 0 "U?" H 6450 15050 60 0000 C CNN
+F 1 "ESZETT" H 6450 14950 60 0000 C CNN
+ 1 6450 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L CEDILLA U?
+U 1 1 4B2F7AA6
+P 13250 12850
+F 0 "U?" H 13250 12600 60 0000 C CNN
+F 1 "CEDILLA" H 13250 12500 60 0000 C CNN
+ 1 13250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B2F7A97
+P 13250 12850
+F 0 "U?" H 13250 12600 60 0000 C CNN
+F 1 "C_SMALL" H 13250 12500 60 0000 C CNN
+ 1 13250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L AE_SMALL U?
+U 1 1 4B2F7684
+P 5150 15300
+F 0 "U?" H 5150 15050 60 0000 C CNN
+F 1 "AE_SMALL" H 5150 14950 60 0000 C CNN
+ 1 5150 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L AE_CAP U?
+U 1 1 4B2F767A
+P 3750 15300
+F 0 "U?" H 3750 15050 60 0000 C CNN
+F 1 "AE_CAP" H 3750 14950 60 0000 C CNN
+ 1 3750 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIVIDE U?
+U 1 1 4B2F7477
+P 2450 15300
+F 0 "U?" H 2450 15050 60 0000 C CNN
+F 1 "DIVIDE" H 2450 14950 60 0000 C CNN
+ 1 2450 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L MULTIPLY U?
+U 1 1 4B2F746A
+P 1150 15300
+F 0 "U?" H 1150 15050 60 0000 C CNN
+F 1 "MULTIPLY" H 1150 14950 60 0000 C CNN
+ 1 1150 15300
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAERESIS U?
+U 1 1 4B2F6F29
+P 5600 12850
+F 0 "U?" H 5600 12600 60 0000 C CNN
+F 1 "DIAERESIS" H 5600 12500 60 0000 C CNN
+ 1 5600 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAERESIS_CAP U?
+U 1 1 4B2F6F1E
+P 4700 12850
+F 0 "U?" H 4700 12600 60 0000 C CNN
+F 1 "DIAERESIS_CAP" H 4700 12500 60 0000 C CNN
+ 1 4700 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L TILDE_CAP U?
+U 1 1 4B2F6580
+P 11200 12850
+F 0 "U?" H 11200 12600 60 0000 C CNN
+F 1 "TILDE_CAP" H 11200 12500 60 0000 C CNN
+ 1 11200 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L TILDE U?
+U 1 1 4B2F6574
+P 12250 12850
+F 0 "U?" H 12250 12600 60 0000 C CNN
+F 1 "TILDE" H 12250 12500 60 0000 C CNN
+ 1 12250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_SMALL U?
+U 1 1 4B2F656C
+P 12250 12850
+F 0 "U?" H 12250 12600 60 0000 C CNN
+F 1 "N_SMALL" H 12250 12500 60 0000 C CNN
+ 1 12250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_CAP U?
+U 1 1 4B2F6562
+P 11200 12850
+F 0 "U?" H 11200 12600 60 0000 C CNN
+F 1 "N_CAP" H 11200 12500 60 0000 C CNN
+ 1 11200 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX U?
+U 1 1 4B2F654D
+P 7450 12850
+F 0 "U?" H 7450 12600 60 0000 C CNN
+F 1 "CIRCUMFLEX" H 7450 12500 60 0000 C CNN
+ 1 7450 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX_CAP U?
+U 1 1 4B2F6545
+P 6550 12850
+F 0 "U?" H 6550 12600 60 0000 C CNN
+F 1 "CIRCUMFLEX_CAP" H 6550 12500 60 0000 C CNN
+ 1 6550 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L RING_ABOVE_A U?
+U 1 1 4B2F6483
+P 9250 12850
+F 0 "U?" H 9250 12600 60 0000 C CNN
+F 1 "RING_ABOVE_A" H 9250 12500 60 0000 C CNN
+ 1 9250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L RING_ABOVE U?
+U 1 1 4B2F647B
+P 10150 12850
+F 0 "U?" H 10150 12600 60 0000 C CNN
+F 1 "RING_ABOVE" H 10150 12500 60 0000 C CNN
+ 1 10150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_CAP U?
+U 1 1 4B2F6468
+P 9250 12850
+F 0 "U?" H 9250 12600 60 0000 C CNN
+F 1 "A_CAP" H 9250 12500 60 0000 C CNN
+ 1 9250 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B2F645D
+P 10150 12850
+F 0 "U?" H 10150 12600 60 0000 C CNN
+F 1 "A_SMALL" H 10150 12500 60 0000 C CNN
+ 1 10150 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F644A
+P 7450 12850
+F 0 "U?" H 7450 12600 60 0000 C CNN
+F 1 "E_SMALL" H 7450 12500 60 0000 C CNN
+ 1 7450 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_CAP U?
+U 1 1 4B2F6446
+P 6550 12850
+F 0 "U?" H 6550 12600 60 0000 C CNN
+F 1 "E_CAP" H 6550 12500 60 0000 C CNN
+ 1 6550 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F643F
+P 5600 12850
+F 0 "U?" H 5600 12600 60 0000 C CNN
+F 1 "E_SMALL" H 5600 12500 60 0000 C CNN
+ 1 5600 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_CAP U?
+U 1 1 4B2F643A
+P 4700 12850
+F 0 "U?" H 4700 12600 60 0000 C CNN
+F 1 "E_CAP" H 4700 12500 60 0000 C CNN
+ 1 4700 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L ACUTE_CAP U?
+U 1 1 4B2F6419
+P 2850 12850
+F 0 "U?" H 2850 12600 60 0000 C CNN
+F 1 "ACUTE_CAP" H 2850 12500 60 0000 C CNN
+ 1 2850 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L ACUTE U?
+U 1 1 4B2F640F
+P 3750 12850
+F 0 "U?" H 3750 12600 60 0000 C CNN
+F 1 "ACUTE" H 3750 12500 60 0000 C CNN
+ 1 3750 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F63F5
+P 3750 12850
+F 0 "U?" H 3750 12600 60 0000 C CNN
+F 1 "E_SMALL" H 3750 12500 60 0000 C CNN
+ 1 3750 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_CAP U?
+U 1 1 4B2F63ED
+P 2850 12850
+F 0 "U?" H 2850 12600 60 0000 C CNN
+F 1 "E_CAP" H 2850 12500 60 0000 C CNN
+ 1 2850 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L GRAVE_CAP U?
+U 1 1 4B2F63DE
+P 1000 12850
+F 0 "U?" H 1000 12600 60 0000 C CNN
+F 1 "GRAVE_CAP" H 1000 12500 60 0000 C CNN
+ 1 1000 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L GRAVE U?
+U 1 1 4B2F63CB
+P 1900 12850
+F 0 "U?" H 1900 12600 60 0000 C CNN
+F 1 "GRAVE" H 1900 12500 60 0000 C CNN
+ 1 1900 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2F63C1
+P 1900 12850
+F 0 "U?" H 1900 12600 60 0000 C CNN
+F 1 "E_SMALL" H 1900 12500 60 0000 C CNN
+ 1 1900 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_CAP U?
+U 1 1 4B2F63AF
+P 1000 12850
+F 0 "U?" H 1000 12600 60 0000 C CNN
+F 1 "E_CAP" H 1000 12500 60 0000 C CNN
+ 1 1000 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L Z_SMALL U?
+U 1 1 4B2D551C
+P 22350 10450
+F 0 "U?" H 22350 10200 60 0000 C CNN
+F 1 "Z_SMALL" H 22350 10100 60 0000 C CNN
+ 1 22350 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_SMALL U?
+U 1 1 4B2D54F5
+P 21500 10450
+F 0 "U?" H 21500 10200 60 0000 C CNN
+F 1 "Y_SMALL" H 21500 10100 60 0000 C CNN
+ 1 21500 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L X_SMALL U?
+U 1 1 4B2D54ED
+P 20700 10450
+F 0 "U?" H 20700 10200 60 0000 C CNN
+F 1 "X_SMALL" H 20700 10100 60 0000 C CNN
+ 1 20700 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L W_SMALL U?
+U 1 1 4B2D54E6
+P 19700 10450
+F 0 "U?" H 19700 10200 60 0000 C CNN
+F 1 "W_SMALL" H 19700 10100 60 0000 C CNN
+ 1 19700 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_SMALL U?
+U 1 1 4B2D54E0
+P 18750 10450
+F 0 "U?" H 18750 10200 60 0000 C CNN
+F 1 "V_SMALL" H 18750 10100 60 0000 C CNN
+ 1 18750 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_SMALL U?
+U 1 1 4B2D529E
+P 17900 10450
+F 0 "U?" H 17900 10200 60 0000 C CNN
+F 1 "U_SMALL" H 17900 10100 60 0000 C CNN
+ 1 17900 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_SMALL U?
+U 1 1 4B2D5211
+P 17050 10450
+F 0 "U?" H 17050 10200 60 0000 C CNN
+F 1 "T_SMALL" H 17050 10100 60 0000 C CNN
+ 1 17050 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_SMALL U?
+U 1 1 4B2D5169
+P 16400 10450
+F 0 "U?" H 16400 10200 60 0000 C CNN
+F 1 "S_SMALL" H 16400 10100 60 0000 C CNN
+ 1 16400 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_SMALL U?
+U 1 1 4B2D4FA4
+P 15650 10450
+F 0 "U?" H 15650 10200 60 0000 C CNN
+F 1 "R_SMALL" H 15650 10100 60 0000 C CNN
+ 1 15650 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_SMALL U?
+U 1 1 4B2D4F9E
+P 14800 10450
+F 0 "U?" H 14800 10200 60 0000 C CNN
+F 1 "Q_SMALL" H 14800 10100 60 0000 C CNN
+ 1 14800 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_SMALL U?
+U 1 1 4B2D4EF9
+P 13900 10450
+F 0 "U?" H 13900 10200 60 0000 C CNN
+F 1 "P_SMALL" H 13900 10100 60 0000 C CNN
+ 1 13900 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_SMALL U?
+U 1 1 4B2D4EF4
+P 12950 10450
+F 0 "U?" H 12950 10200 60 0000 C CNN
+F 1 "O_SMALL" H 12950 10100 60 0000 C CNN
+ 1 12950 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_SMALL U?
+U 1 1 4B2D4EEE
+P 11950 10450
+F 0 "U?" H 11950 10200 60 0000 C CNN
+F 1 "N_SMALL" H 11950 10100 60 0000 C CNN
+ 1 11950 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_SMALL U?
+U 1 1 4B2D4CFB
+P 10800 10450
+F 0 "U?" H 10800 10200 60 0000 C CNN
+F 1 "M_SMALL" H 10800 10100 60 0000 C CNN
+ 1 10800 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_SMALL U?
+U 1 1 4B2D4B57
+P 9750 10450
+F 0 "U?" H 9750 10200 60 0000 C CNN
+F 1 "L_SMALL" H 9750 10100 60 0000 C CNN
+ 1 9750 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_SMALL U?
+U 1 1 4B2D4B51
+P 9100 10450
+F 0 "U?" H 9100 10200 60 0000 C CNN
+F 1 "K_SMALL" H 9100 10100 60 0000 C CNN
+ 1 9100 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOT_ABOVE U?
+U 1 1 4B2D4A89
+P 23100 12850
+F 0 "U?" H 23100 12600 60 0000 C CNN
+F 1 "DOT_ABOVE" H 23100 12500 60 0000 C CNN
+ 1 23100 12850
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_SMALL U?
+U 1 1 4B2D4A3A
+P 8400 10450
+F 0 "U?" H 8400 10200 60 0000 C CNN
+F 1 "J_SMALL" H 8400 10100 60 0000 C CNN
+ 1 8400 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_SMALL U?
+U 1 1 4B2D4A31
+P 7900 10450
+F 0 "U?" H 7900 10200 60 0000 C CNN
+F 1 "I_SMALL" H 7900 10100 60 0000 C CNN
+ 1 7900 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_SMALL U?
+U 1 1 4B2D4971
+P 7200 10450
+F 0 "U?" H 7200 10200 60 0000 C CNN
+F 1 "H_SMALL" H 7200 10100 60 0000 C CNN
+ 1 7200 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_SMALL U?
+U 1 1 4B2D4627
+P 6200 10450
+F 0 "U?" H 6200 10200 60 0000 C CNN
+F 1 "G_SMALL" H 6200 10100 60 0000 C CNN
+ 1 6200 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L F_SMALL U?
+U 1 1 4B2D4525
+P 5400 10450
+F 0 "U?" H 5400 10200 60 0000 C CNN
+F 1 "F_SMALL" H 5400 10100 60 0000 C CNN
+ 1 5400 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_SMALL U?
+U 1 1 4B2D4418
+P 4700 10450
+F 0 "U?" H 4700 10200 60 0000 C CNN
+F 1 "E_SMALL" H 4700 10100 60 0000 C CNN
+ 1 4700 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_SMALL U?
+U 1 1 4B2D435E
+P 3750 10450
+F 0 "U?" H 3750 10200 60 0000 C CNN
+F 1 "D_SMALL" H 3750 10100 60 0000 C CNN
+ 1 3750 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_SMALL U?
+U 1 1 4B2D4353
+P 2900 10450
+F 0 "U?" H 2900 10200 60 0000 C CNN
+F 1 "C_SMALL" H 2900 10100 60 0000 C CNN
+ 1 2900 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_SMALL U?
+U 1 1 4B2D434B
+P 1950 10450
+F 0 "U?" H 1950 10200 60 0000 C CNN
+F 1 "B_SMALL" H 1950 10100 60 0000 C CNN
+ 1 1950 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_SMALL U?
+U 1 1 4B2D41F7
+P 950 10450
+F 0 "U?" H 950 10200 60 0000 C CNN
+F 1 "A_SMALL" H 950 10100 60 0000 C CNN
+ 1 950 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L AT U?
+U 1 1 4B2D3E66
+P 29350 10450
+F 0 "U?" H 29350 10200 60 0000 C CNN
+F 1 "AT" H 29350 10100 60 0000 C CNN
+ 1 29350 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L PERCENT U?
+U 1 1 4B2D3A56
+P 28050 10450
+F 0 "U?" H 28050 10200 60 0000 C CNN
+F 1 "PERCENT" H 28050 10100 60 0000 C CNN
+ 1 28050 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOLLAR U?
+U 1 1 4B2D3977
+P 26950 10450
+F 0 "U?" H 26950 10200 60 0000 C CNN
+F 1 "DOLLAR" H 26950 10100 60 0000 C CNN
+ 1 26950 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L HASH U?
+U 1 1 4B2D38C0
+P 25900 10450
+F 0 "U?" H 25900 10200 60 0000 C CNN
+F 1 "HASH" H 25900 10100 60 0000 C CNN
+ 1 25900 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L AMPERSAND U?
+U 1 1 4B2D38B3
+P 24750 10450
+F 0 "U?" H 24750 10200 60 0000 C CNN
+F 1 "AMPERSAND" H 24750 10100 60 0000 C CNN
+ 1 24750 10450
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASTERISK U?
+U 1 1 4B2D3537
+P 30500 3500
+F 0 "U?" H 30500 3250 60 0000 C CNN
+F 1 "ASTERISK" H 30500 3150 60 0000 C CNN
+ 1 30500 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCUMFLEX U?
+U 1 1 4B2D346E
+P 29700 3500
+F 0 "U?" H 29700 3250 60 0000 C CNN
+F 1 "CIRCUMFLEX" H 29700 3150 60 0000 C CNN
+ 1 29700 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LOW_LINE U?
+U 1 1 4B2D344C
+P 28900 3500
+F 0 "U?" H 28900 3250 60 0000 C CNN
+F 1 "LOW_LINE" H 28900 3150 60 0000 C CNN
+ 1 28900 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GRAVE U?
+U 1 1 4B2D3381
+P 28250 3500
+F 0 "U?" H 28250 3250 60 0000 C CNN
+F 1 "GRAVE" H 28250 3150 60 0000 C CNN
+ 1 28250 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACKET_RIGHT U?
+U 1 1 4B2D32F2
+P 27650 3500
+F 0 "U?" H 27650 3250 60 0000 C CNN
+F 1 "BRACKET_RIGHT" H 27650 3150 60 0000 C CNN
+ 1 27650 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACKET_LEFT U?
+U 1 1 4B2D32E4
+P 26950 3500
+F 0 "U?" H 26950 3250 60 0000 C CNN
+F 1 "BRACKET_LEFT" H 26950 3150 60 0000 C CNN
+ 1 26950 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L VERTICAL_LINE U?
+U 1 1 4B2D32D6
+P 26400 3500
+F 0 "U?" H 26400 3250 60 0000 C CNN
+F 1 "VERTICAL_LINE" H 26400 3150 60 0000 C CNN
+ 1 26400 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACE_RIGHT U?
+U 1 1 4B2D315F
+P 25850 3500
+F 0 "U?" H 25850 3250 60 0000 C CNN
+F 1 "BRACE_RIGHT" H 25850 3150 60 0000 C CNN
+ 1 25850 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACE_LEFT U?
+U 1 1 4B2D3140
+P 25150 3500
+F 0 "U?" H 25150 3250 60 0000 C CNN
+F 1 "BRACE_LEFT" H 25150 3150 60 0000 C CNN
+ 1 25150 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BACKSLASH U?
+U 1 1 4B2D2FAF
+P 31450 3500
+F 0 "U?" H 31450 3250 60 0000 C CNN
+F 1 "BACKSLASH" H 31450 3150 60 0000 C CNN
+ 1 31450 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAREN_RIGHT U?
+U 1 1 4B2D2F7C
+P 24450 3500
+F 0 "U?" H 24450 3250 60 0000 C CNN
+F 1 "PAREN_RIGHT" H 24450 3150 60 0000 C CNN
+ 1 24450 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAREN_LEFT U?
+U 1 1 4B2D2F71
+P 23750 3500
+F 0 "U?" H 23750 3250 60 0000 C CNN
+F 1 "PAREN_LEFT" H 23750 3150 60 0000 C CNN
+ 1 23750 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L GREATER U?
+U 1 1 4B2D2CFA
+P 22800 3500
+F 0 "U?" H 22800 3250 60 0000 C CNN
+F 1 "GREATER" H 22800 3150 60 0000 C CNN
+ 1 22800 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B2D2CEE
+P 21550 3500
+F 0 "U?" H 21550 3250 60 0000 C CNN
+F 1 "EQUAL" H 21550 3150 60 0000 C CNN
+ 1 21550 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS U?
+U 1 1 4B2D2CE5
+P 20300 3500
+F 0 "U?" H 20300 3250 60 0000 C CNN
+F 1 "LESS" H 20300 3150 60 0000 C CNN
+ 1 20300 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH U?
+U 1 1 4B2D2CD3
+P 19150 3500
+F 0 "U?" H 19150 3250 60 0000 C CNN
+F 1 "SLASH" H 19150 3150 60 0000 C CNN
+ 1 19150 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUOTE U?
+U 1 1 4B2D2CC8
+P 18200 3500
+F 0 "U?" H 18200 3250 60 0000 C CNN
+F 1 "QUOTE" H 18200 3150 60 0000 C CNN
+ 1 18200 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EXCLAM U?
+U 1 1 4B2D2943
+P 17550 3500
+F 0 "U?" H 17550 3250 60 0000 C CNN
+F 1 "EXCLAM" H 17550 3150 60 0000 C CNN
+ 1 17550 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L APOSTROPHE U?
+U 1 1 4B2D2932
+P 17050 3500
+F 0 "U?" H 17050 3250 60 0000 C CNN
+F 1 "APOSTROPHE" H 17050 3150 60 0000 C CNN
+ 1 17050 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L COLON U?
+U 1 1 4B2D2727
+P 16550 3500
+F 0 "U?" H 16550 3250 60 0000 C CNN
+F 1 "COLON" H 16550 3150 60 0000 C CNN
+ 1 16550 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SEMICOLON U?
+U 1 1 4B2D271D
+P 16050 3500
+F 0 "U?" H 16050 3250 60 0000 C CNN
+F 1 "SEMICOLON" H 16050 3150 60 0000 C CNN
+ 1 16050 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L FULL_STOP U?
+U 1 1 4B2D2713
+P 15550 3500
+F 0 "U?" H 15550 3250 60 0000 C CNN
+F 1 "FULL_STOP" H 15550 3150 60 0000 C CNN
+ 1 15550 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L COMMA U?
+U 1 1 4B2D2709
+P 15050 3500
+F 0 "U?" H 15050 3250 60 0000 C CNN
+F 1 "COMMA" H 15050 3150 60 0000 C CNN
+ 1 15050 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MINUS U?
+U 1 1 4B2D2701
+P 14150 3500
+F 0 "U?" H 14150 3250 60 0000 C CNN
+F 1 "MINUS" H 14150 3150 60 0000 C CNN
+ 1 14150 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PLUS U?
+U 1 1 4B2D26F3
+P 12850 3500
+F 0 "U?" H 12850 3250 60 0000 C CNN
+F 1 "PLUS" H 12850 3150 60 0000 C CNN
+ 1 12850 3500
+ 1 0 0 -1
+$EndComp
+Text Notes 500 9000 0 1050 ~ 0
+abcdefghijklmnopqrstuvwxyz
+Text Notes 24050 8950 0 1050 ~ 0
+&#$%@
+$Comp
+L SPACE U?
+U 1 1 4B2D197B
+P 11800 3500
+F 0 "U?" H 11800 3550 60 0000 C CNN
+F 1 "SPACE" H 11800 3450 60 0000 C CNN
+ 1 11800 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Z_CAP U?
+U 1 1 4B2D17DA
+P 25750 6900
+F 0 "U?" H 25750 6650 60 0000 C CNN
+F 1 "Z_CAP" H 25750 6550 60 0000 C CNN
+ 1 25750 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L Y_CAP U?
+U 1 1 4B2D17CC
+P 24800 6900
+F 0 "U?" H 24800 6650 60 0000 C CNN
+F 1 "Y_CAP" H 24800 6550 60 0000 C CNN
+ 1 24800 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L X_CAP U?
+U 1 1 4B2D17B1
+P 23850 6900
+F 0 "U?" H 23850 6650 60 0000 C CNN
+F 1 "X_CAP" H 23850 6550 60 0000 C CNN
+ 1 23850 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L W_CAP U?
+U 1 1 4B2D17AA
+P 22750 6900
+F 0 "U?" H 22750 6650 60 0000 C CNN
+F 1 "W_CAP" H 22750 6550 60 0000 C CNN
+ 1 22750 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L V_CAP U?
+U 1 1 4B2D1643
+P 21700 6900
+F 0 "U?" H 21700 6650 60 0000 C CNN
+F 1 "V_CAP" H 21700 6550 60 0000 C CNN
+ 1 21700 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L U_CAP U?
+U 1 1 4B2D1638
+P 20700 6900
+F 0 "U?" H 20700 6650 60 0000 C CNN
+F 1 "U_CAP" H 20700 6550 60 0000 C CNN
+ 1 20700 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L T_CAP U?
+U 1 1 4B2D160C
+P 19750 6900
+F 0 "U?" H 19750 6650 60 0000 C CNN
+F 1 "T_CAP" H 19750 6550 60 0000 C CNN
+ 1 19750 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_CAP U?
+U 1 1 4B2D14C4
+P 18850 6900
+F 0 "U?" H 18850 6650 60 0000 C CNN
+F 1 "S_CAP" H 18850 6550 60 0000 C CNN
+ 1 18850 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L R_CAP U?
+U 1 1 4B2D12B5
+P 17850 6900
+F 0 "U?" H 17850 6650 60 0000 C CNN
+F 1 "R_CAP" H 17850 6550 60 0000 C CNN
+ 1 17850 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L Q_CAP U?
+U 1 1 4B2D12A6
+P 16750 6900
+F 0 "U?" H 16750 6650 60 0000 C CNN
+F 1 "Q_CAP" H 16750 6550 60 0000 C CNN
+ 1 16750 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L P_CAP U?
+U 1 1 4B2D129F
+P 15700 6900
+F 0 "U?" H 15700 6650 60 0000 C CNN
+F 1 "P_CAP" H 15700 6550 60 0000 C CNN
+ 1 15700 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L O_CAP U?
+U 1 1 4B2D1295
+P 14600 6900
+F 0 "U?" H 14600 6650 60 0000 C CNN
+F 1 "O_CAP" H 14600 6550 60 0000 C CNN
+ 1 14600 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L N_CAP U?
+U 1 1 4B2D128D
+P 13500 6900
+F 0 "U?" H 13500 6650 60 0000 C CNN
+F 1 "N_CAP" H 13500 6550 60 0000 C CNN
+ 1 13500 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_CAP U?
+U 1 1 4B2D0DC8
+P 12350 6900
+F 0 "U?" H 12350 6650 60 0000 C CNN
+F 1 "M_CAP" H 12350 6550 60 0000 C CNN
+ 1 12350 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L L_CAP U?
+U 1 1 4B2D0DC0
+P 11400 6900
+F 0 "U?" H 11400 6650 60 0000 C CNN
+F 1 "L_CAP" H 11400 6550 60 0000 C CNN
+ 1 11400 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L K_CAP U?
+U 1 1 4B2D0DB7
+P 10400 6900
+F 0 "U?" H 10400 6650 60 0000 C CNN
+F 1 "K_CAP" H 10400 6550 60 0000 C CNN
+ 1 10400 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L J_CAP U?
+U 1 1 4B2D09CA
+P 9450 6900
+F 0 "U?" H 9450 6650 60 0000 C CNN
+F 1 "J_CAP" H 9450 6550 60 0000 C CNN
+ 1 9450 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_CAP U?
+U 1 1 4B2D09C2
+P 8800 6900
+F 0 "U?" H 8800 6650 60 0000 C CNN
+F 1 "I_CAP" H 8800 6550 60 0000 C CNN
+ 1 8800 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L H_CAP U?
+U 1 1 4B2D0897
+P 8000 6900
+F 0 "U?" H 8000 6650 60 0000 C CNN
+F 1 "H_CAP" H 8000 6550 60 0000 C CNN
+ 1 8000 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L G_CAP U?
+U 1 1 4B2D0789
+P 7000 6900
+F 0 "U?" H 7000 6650 60 0000 C CNN
+F 1 "G_CAP" H 7000 6550 60 0000 C CNN
+ 1 7000 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L F_CAP U?
+U 1 1 4B2D05A7
+P 6000 6900
+F 0 "U?" H 6000 6650 60 0000 C CNN
+F 1 "F_CAP" H 6000 6550 60 0000 C CNN
+ 1 6000 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L E_CAP U?
+U 1 1 4B2D0598
+P 5050 6900
+F 0 "U?" H 5050 6650 60 0000 C CNN
+F 1 "E_CAP" H 5050 6550 60 0000 C CNN
+ 1 5050 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L D_CAP U?
+U 1 1 4B2D0440
+P 4050 6900
+F 0 "U?" H 4050 6650 60 0000 C CNN
+F 1 "D_CAP" H 4050 6550 60 0000 C CNN
+ 1 4050 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L C_CAP U?
+U 1 1 4B2D016F
+P 3050 6900
+F 0 "U?" H 3050 6650 60 0000 C CNN
+F 1 "C_CAP" H 3050 6550 60 0000 C CNN
+ 1 3050 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L B_CAP U?
+U 1 1 4B2D0053
+P 1950 6900
+F 0 "U?" H 1950 6650 60 0000 C CNN
+F 1 "B_CAP" H 1950 6550 60 0000 C CNN
+ 1 1950 6900
+ 1 0 0 -1
+$EndComp
+$Comp
+L A_CAP U?
+U 1 1 4B2CFDB5
+P 950 6900
+F 0 "U?" H 950 6600 60 0000 C CNN
+F 1 "A_CAP" H 950 6500 60 0000 C CNN
+ 1 950 6900
+ 1 0 0 -1
+$EndComp
+Text Notes 500 5700 0 1050 ~ 0
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
+$Comp
+L QUESTION U?
+U 1 1 4B2CF927
+P 10950 3500
+F 0 "U?" H 10950 3250 60 0000 C CNN
+F 1 "QUESTION" H 10950 3150 60 0000 C CNN
+ 1 10950 3500
+ 1 0 0 -1
+$EndComp
+Text Notes 500 1950 0 1050 ~ 0
+0123456789? +-,.;:'!"/<=>(){}|[]`_^*\
+$Comp
+L DIGIT_9 U?
+U 1 1 4B2CEF90
+P 10000 3500
+F 0 "U?" H 10000 3250 60 0000 C CNN
+F 1 "DIGIT_9" H 10000 3150 60 0000 C CNN
+ 1 10000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_8 U?
+U 1 1 4B2CEF67
+P 9000 3500
+F 0 "U?" H 9000 3250 60 0000 C CNN
+F 1 "DIGIT_8" H 9000 3150 60 0000 C CNN
+ 1 9000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_7 U?
+U 1 1 4B2CEF56
+P 8000 3500
+F 0 "U?" H 8000 3250 60 0000 C CNN
+F 1 "DIGIT_7" H 8000 3150 60 0000 C CNN
+ 1 8000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_6 U?
+U 1 1 4B2CEF43
+P 7000 3500
+F 0 "U?" H 7000 3250 60 0000 C CNN
+F 1 "DIGIT_6" H 7000 3150 60 0000 C CNN
+ 1 7000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_5 U?
+U 1 1 4B2CEF2D
+P 6000 3500
+F 0 "U?" H 6000 3250 60 0000 C CNN
+F 1 "DIGIT_5" H 6000 3150 60 0000 C CNN
+ 1 6000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_4 U?
+U 1 1 4B2CEF1F
+P 5000 3500
+F 0 "U?" H 5000 3250 60 0000 C CNN
+F 1 "DIGIT_4" H 5000 3150 60 0000 C CNN
+ 1 5000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_3 U?
+U 1 1 4B2CEEFB
+P 4000 3500
+F 0 "U?" H 4000 3250 60 0000 C CNN
+F 1 "DIGIT_3" H 4000 3150 60 0000 C CNN
+ 1 4000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_2 U?
+U 1 1 4B2CEED7
+P 3000 3500
+F 0 "U?" H 3000 3250 60 0000 C CNN
+F 1 "DIGIT_2" H 3000 3150 60 0000 C CNN
+ 1 3000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_1 U?
+U 1 1 4B2CEEC5
+P 2000 3500
+F 0 "U?" H 2000 3250 60 0000 C CNN
+F 1 "DIGIT_1" H 2000 3150 60 0000 C CNN
+ 1 2000 3500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_0 U?
+U 1 1 4B2CEEA2
+P 1000 3500
+F 0 "U?" H 1000 3250 60 0000 C CNN
+F 1 "DIGIT_0" H 1000 3150 60 0000 C CNN
+ 1 1000 3500
+ 1 0 0 -1
+$EndComp
+$EndSCHEMATC
diff --git a/helpers/tools_to_build_newstroke-font/font_draft1.lib b/helpers/tools_to_build_newstroke-font/font_draft1.lib
new file mode 100644
index 0000000..8df31cc
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/font_draft1.lib
@@ -0,0 +1,1215 @@
+EESchema-LIBRARY Version 2.3 Date: Сбт 19 Дек 2009 23:27:17
+#
+# AMPERSAND
+#
+DEF AMPERSAND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AMPERSAND" 0 -350 60 H V C CNN
+DRAW
+P 29 0 1 0 450 0 400 0 300 50 150 200 -100 500 -200 650 -250 800 -250 900 -200 1000 -100 1050 -50 1050 50 1000 100 900 100 850 50 750 0 700 -300 500 -350 450 -400 350 -400 200 -350 100 -300 50 -200 0 -50 0 50 50 100 100 250 300 300 450 300 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# APOSTROPHE
+#
+DEF APOSTROPHE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "APOSTROPHE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 750 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISK
+#
+DEF ASTERISK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 800 N
+P 3 0 1 0 -250 900 0 800 250 900 N
+P 3 0 1 0 -150 600 0 800 150 600 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# AT
+#
+DEF AT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "AT" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 200 500 150 550 50 600 -50 600 -150 550 -200 500 -250 400 -250 300 -200 200 -150 150 -50 100 50 100 150 150 200 200 N
+P 20 0 1 0 200 600 200 200 250 150 300 150 400 200 450 300 450 550 350 700 200 800 0 850 -200 800 -350 700 -450 550 -500 350 -450 150 -350 0 -200 -100 0 -150 200 -100 350 0 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BACKSLASH
+#
+DEF BACKSLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BACKSLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 1150 450 -200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_LEFT
+#
+DEF BRACE_LEFT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_LEFT" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 -350 150 -350 50 -300 0 -200 0 300 -50 400 -150 450 -50 500 0 600 0 1100 50 1200 150 1250 200 1250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_RIGHT
+#
+DEF BRACE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -200 -350 -150 -350 -50 -300 0 -200 0 300 50 400 150 450 50 500 0 600 0 1100 -50 1200 -150 1250 -200 1250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_LEFT
+#
+DEF BRACKET_LEFT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_LEFT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 200 -300 -50 -300 -50 1200 200 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_RIGHT
+#
+DEF BRACKET_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -200 -300 50 -300 50 1200 -200 1200 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_A
+#
+DEF CAPITAL_A U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_A" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 300 250 300 N
+P 3 0 1 0 -350 0 0 1050 350 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_B
+#
+DEF CAPITAL_B U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_B" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 50 550 200 500 250 450 300 350 300 200 250 100 200 50 100 0 -300 0 -300 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 -300 550 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_C
+#
+DEF CAPITAL_C U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_C" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 350 100 300 50 150 0 50 0 -100 50 -200 150 -250 250 -300 450 -300 600 -250 800 -200 900 -100 1000 50 1050 150 1050 300 1000 350 950 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_D
+#
+DEF CAPITAL_D U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_D" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -300 0 -300 1050 -50 1050 100 1000 200 900 250 800 300 600 300 450 250 250 200 150 100 50 -50 0 -300 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_E
+#
+DEF CAPITAL_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 550 100 550 N
+P 4 0 1 0 250 0 -250 0 -250 1050 250 1050 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_F
+#
+DEF CAPITAL_F U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_F" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 550 100 550 N
+P 2 0 1 0 100 550 -250 550 N
+P 3 0 1 0 -250 0 -250 1050 250 1050 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_G
+#
+DEF CAPITAL_G U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_G" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 300 1000 200 1050 50 1050 -100 1000 -200 900 -250 800 -300 600 -300 450 -250 250 -200 150 -100 50 50 0 150 0 300 50 350 100 350 450 150 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_H
+#
+DEF CAPITAL_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 -300 550 300 550 N
+P 2 0 1 0 300 0 300 1050 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_I
+#
+DEF CAPITAL_I U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_I" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 1050 N
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_J
+#
+DEF CAPITAL_J U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_J" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 150 1050 150 300 100 150 0 50 -150 0 -250 0 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_K
+#
+DEF CAPITAL_K U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_K" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 -300 1050 N
+P 2 0 1 0 300 0 -150 600 N
+P 2 0 1 0 300 1050 -300 450 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_L
+#
+DEF CAPITAL_L U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_L" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 0 -250 0 -250 1050 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_M
+#
+DEF CAPITAL_M U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_M" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 0 300 350 1050 350 0 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_N
+#
+DEF CAPITAL_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_N" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -300 0 -300 1050 300 0 300 1050 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_O
+#
+DEF CAPITAL_O U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_O" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_P
+#
+DEF CAPITAL_P U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_P" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 0 -300 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_Q
+#
+DEF CAPITAL_Q U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_Q" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 400 -100 300 -50 200 50 50 200 -50 250 -150 250 N
+P 17 0 1 0 -100 0 -200 50 -300 150 -350 350 -350 700 -300 900 -200 1000 -100 1050 100 1050 200 1000 300 900 350 700 350 350 300 150 200 50 100 0 -100 0 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_R
+#
+DEF CAPITAL_R U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_R" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 -50 500 N
+P 11 0 1 0 -300 0 -300 1050 100 1050 200 1000 250 950 300 850 300 700 250 600 200 550 100 500 -300 500 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_S
+#
+DEF CAPITAL_S U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_S" 0 -350 60 H V C CNN
+DRAW
+P 20 0 1 0 -300 50 -150 0 100 0 200 50 250 100 300 200 300 300 250 400 200 450 100 500 -100 550 -200 600 -250 650 -300 750 -300 850 -250 950 -200 1000 -100 1050 150 1050 300 1000 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_T
+#
+DEF CAPITAL_T U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_T" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 1050 300 1050 N
+P 2 0 1 0 0 0 0 1050 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_U
+#
+DEF CAPITAL_U U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_U" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 1000 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 1000 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_V
+#
+DEF CAPITAL_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_V" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 1050 0 0 350 1050 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_W
+#
+DEF CAPITAL_W U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_W" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 1050 -200 0 0 750 200 0 450 1050 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_X
+#
+DEF CAPITAL_X U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_X" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 300 1050 N
+P 2 0 1 0 -300 1050 300 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_Y
+#
+DEF CAPITAL_Y U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_Y" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 500 0 0 N
+P 3 0 1 0 -350 1050 0 500 350 1050 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CAPITAL_Z
+#
+DEF CAPITAL_Z U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CAPITAL_Z" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 300 0 -300 0 300 1050 -300 1050 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCUMFLEX
+#
+DEF CIRCUMFLEX U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCUMFLEX" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 900 0 1100 200 900 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COLON
+#
+DEF COLON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COLON" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 50 0 0 -50 0 -50 50 0 50 0 0 N
+P 6 0 1 0 -50 650 0 600 -50 600 -50 650 0 650 0 600 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMMA
+#
+DEF COMMA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMMA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 50 0 -50 -50 -150 -100 -200 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEL
+#
+DEF DEL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 350 1050 350 0 -350 0 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_0
+#
+DEF DIGIT_0 U 0 40 Y Y 1 F N
+F0 "U" 0 -150 60 H V C CNN
+F1 "DIGIT_0" 0 -250 60 H V C CNN
+DRAW
+P 21 0 1 0 -50 1050 50 1050 150 1000 200 950 250 850 300 650 300 400 250 200 200 100 150 50 50 0 -50 0 -150 50 -200 100 -250 200 -300 400 -300 650 -250 850 -200 950 -150 1000 -50 1050 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_1
+#
+DEF DIGIT_1 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_1" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 250 0 N
+P 5 0 1 0 50 0 50 1050 -50 900 -150 800 -250 750 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_2
+#
+DEF DIGIT_2 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_2" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -300 950 -250 1000 -150 1050 100 1050 200 1000 250 950 300 850 300 750 250 600 -350 0 300 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_3
+#
+DEF DIGIT_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_3" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 -350 1050 300 1050 -50 650 100 650 200 600 250 550 300 450 300 200 250 100 200 50 100 0 -200 0 -300 50 -350 100 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_4
+#
+DEF DIGIT_4 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_4" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 700 200 0 N
+P 3 0 1 0 -50 1100 -300 350 350 350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_5
+#
+DEF DIGIT_5 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_5" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 250 1050 -250 1050 -300 550 -250 600 -150 650 100 650 200 600 250 550 300 450 300 200 250 100 200 50 100 0 -150 0 -250 50 -300 100 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_6
+#
+DEF DIGIT_6 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_6" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 200 1050 0 1050 -100 1000 -150 950 -250 800 -300 600 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 450 250 550 200 600 100 650 -100 650 -200 600 -250 550 -300 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_7
+#
+DEF DIGIT_7 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_7" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 1050 350 1050 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_8
+#
+DEF DIGIT_8 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_8" 0 -350 60 H V C CNN
+DRAW
+P 32 0 1 0 -100 600 -200 650 -250 700 -300 800 -300 850 -250 950 -200 1000 -100 1050 100 1050 200 1000 250 950 300 850 300 800 250 700 200 650 100 600 -100 600 -200 550 -250 500 -300 400 -300 200 -250 100 -200 50 -100 0 100 0 200 50 250 100 300 200 300 400 250 500 200 550 100 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIGIT_9
+#
+DEF DIGIT_9 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIGIT_9" 0 -350 60 H V C CNN
+DRAW
+P 22 0 1 0 -200 0 0 0 100 50 150 100 250 250 300 450 300 850 250 950 200 1000 100 1050 -100 1050 -200 1000 -250 950 -300 850 -300 600 -250 500 -200 450 -100 400 100 400 200 450 250 500 300 600 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOLLAR
+#
+DEF DOLLAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOLLAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1150 0 -100 N
+P 20 0 1 0 -300 50 -150 0 100 0 200 50 250 100 300 200 300 300 250 400 200 450 100 500 -100 550 -200 600 -250 650 -300 750 -300 850 -250 950 -200 1000 -100 1050 150 1050 300 1000 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOT_ABOVE
+#
+DEF DOT_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOT_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 1050 0 1000 -50 1000 -50 1050 0 1050 0 1000 N
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL
+#
+DEF EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 650 400 650 N
+P 2 0 1 0 400 350 -400 350 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EXCLAM
+#
+DEF EXCLAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EXCLAM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 350 N
+P 6 0 1 0 -50 50 0 0 -50 0 -50 50 0 50 0 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FULL_STOP
+#
+DEF FULL_STOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FULL_STOP" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 50 0 0 -50 0 -50 50 0 50 0 0 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GRAVE
+#
+DEF GRAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GRAVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 1100 0 950 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GREATER
+#
+DEF GREATER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GREATER" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 200 350 500 -400 800 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HASH
+#
+DEF HASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 450 700 N
+P 2 0 1 0 0 1150 -300 -200 N
+P 2 0 1 0 350 250 -400 250 N
+P 3 0 1 0 50 -200 350 1150 350 1150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS
+#
+DEF LESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 350 200 -400 500 350 800 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOW_LINE
+#
+DEF LOW_LINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOW_LINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS
+#
+DEF MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 500 400 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_LEFT
+#
+DEF PAREN_LEFT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_LEFT" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 -350 150 -300 50 -150 0 -50 -50 100 -100 350 -100 550 -50 800 0 950 50 1050 150 1200 200 1250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_RIGHT
+#
+DEF PAREN_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -200 -350 -150 -300 -50 -150 0 -50 50 100 100 350 100 550 50 800 0 950 -50 1050 -150 1200 -200 1250 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERCENT
+#
+DEF PERCENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERCENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS
+#
+DEF PLUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 500 400 500 N
+P 2 0 1 0 0 100 0 900 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUESTION
+#
+DEF QUESTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUESTION" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -50 0 -50 50 0 50 0 0 -50 0 0 50 N
+P 14 0 1 0 -250 950 -200 1000 -100 1050 50 1050 150 1000 200 950 250 850 250 750 200 650 150 600 50 550 0 500 -50 400 -50 350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUOTE
+#
+DEF QUOTE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUOTE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 -200 750 N
+P 2 0 1 0 200 1050 200 750 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SEMICOLON
+#
+DEF SEMICOLON U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SEMICOLON" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 50 0 -50 -50 -150 -100 -200 N
+P 6 0 1 0 -50 650 0 600 -50 600 -50 650 0 650 0 600 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH
+#
+DEF SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 450 1150 -450 -200 -450 -200 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_A
+#
+DEF SMALL_A U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_A" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 0 250 550 200 650 100 700 -100 700 -200 650 N
+P 10 0 1 0 250 50 150 0 -100 0 -200 50 -250 150 -250 250 -200 350 -100 400 150 400 250 450 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_B
+#
+DEF SMALL_B U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_B" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 1050 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_C
+#
+DEF SMALL_C U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_C" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_D
+#
+DEF SMALL_D U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_D" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 0 250 1050 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_E
+#
+DEF SMALL_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_E" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 50 100 0 -100 0 -200 50 -250 150 -250 550 -200 650 -100 700 100 700 200 650 250 550 250 450 -250 350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_F
+#
+DEF SMALL_F U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_F" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 700 200 700 N
+P 5 0 1 0 0 0 0 900 50 1000 150 1050 250 1050 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_G
+#
+DEF SMALL_G U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_G" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 250 700 250 -150 200 -250 150 -300 50 -350 -100 -350 -200 -300 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_H
+#
+DEF SMALL_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 1050 N
+P 7 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_I
+#
+DEF SMALL_I U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_I" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 700 N
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_J
+#
+DEF SMALL_J U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_J" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 700 0 -200 -50 -300 -150 -350 -200 -350 N
+X ~ ~ -300 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_K
+#
+DEF SMALL_K U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_K" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 1050 N
+P 2 0 1 0 200 0 -150 350 N
+P 2 0 1 0 200 700 -200 300 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_L
+#
+DEF SMALL_L U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_L" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 150 0 50 50 0 150 0 1050 N
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_M
+#
+DEF SMALL_M U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_M" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 0 -500 700 N
+P 7 0 1 0 0 0 0 600 -50 650 -150 700 -350 700 -450 650 -500 600 N
+P 8 0 1 0 550 0 550 500 500 600 450 650 350 700 150 700 50 650 0 600 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_N
+#
+DEF SMALL_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 0 N
+P 7 0 1 0 250 0 250 500 200 600 150 650 50 700 -150 700 -250 650 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_O
+#
+DEF SMALL_O U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_O" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -100 0 -200 50 -250 100 -300 200 -300 500 -250 600 -200 650 -100 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -100 0 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_P
+#
+DEF SMALL_P U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_P" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 -250 -350 N
+P 12 0 1 0 -250 650 -150 700 50 700 150 650 200 600 250 500 250 200 200 100 150 50 50 0 -150 0 -250 50 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_Q
+#
+DEF SMALL_Q U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_Q" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 -350 N
+P 12 0 1 0 250 50 150 0 -50 0 -150 50 -200 100 -250 200 -250 500 -200 600 -150 650 -50 700 150 700 250 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_R
+#
+DEF SMALL_R U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_R" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 0 -100 700 N
+P 5 0 1 0 -100 600 -50 650 50 700 150 700 250 650 N
+X ~ ~ -350 0 300 U 50 50 1 1 I
+X ~ ~ 300 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_S
+#
+DEF SMALL_S U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_S" 0 -350 60 H V C CNN
+DRAW
+P 16 0 1 0 -250 50 -150 0 50 0 150 50 200 150 200 200 150 300 50 350 -100 350 -200 400 -250 500 -250 550 -200 650 -100 700 50 700 150 650 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_T
+#
+DEF SMALL_T U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_T" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 700 200 700 N
+P 5 0 1 0 200 0 150 0 50 50 0 150 0 1050 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 350 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_U
+#
+DEF SMALL_U U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_U" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 700 250 0 N
+P 7 0 1 0 -250 700 -250 200 -200 100 -150 50 -50 0 150 0 250 50 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_V
+#
+DEF SMALL_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_V" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 700 0 0 250 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_W
+#
+DEF SMALL_W U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_W" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 700 -200 0 0 500 200 0 400 700 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_X
+#
+DEF SMALL_X U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_X" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 0 250 700 N
+P 2 0 1 0 -300 700 250 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_Y
+#
+DEF SMALL_Y U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_Y" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 700 0 0 N
+P 5 0 1 0 250 700 0 0 -100 -250 -150 -300 -250 -350 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMALL_Z
+#
+DEF SMALL_Z U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMALL_Z" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 700 200 700 -250 0 200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE
+#
+DEF SPACE U 0 40 Y Y 1 F N
+F0 "U" 0 50 60 H V C CNN
+F1 "SPACE" 0 -50 60 H V C CNN
+DRAW
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TILDE
+#
+DEF TILDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TILDE" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -350 950 -300 1000 -200 1050 -150 1050 -50 1000 0 950 100 900 150 900 250 950 300 1000 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# VERTICAL_LINE
+#
+DEF VERTICAL_LINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "VERTICAL_LINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 -350 0 1250 N
+X ~ ~ -200 0 300 U 50 50 1 1 I
+X ~ ~ 200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/helpers/tools_to_build_newstroke-font/fontconv.awk b/helpers/tools_to_build_newstroke-font/fontconv.awk
new file mode 100644
index 0000000..df34dd1
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/fontconv.awk
@@ -0,0 +1,334 @@
+#! /usr/bin/awk -f
+#
+# awk script to convert KiCAD font.
+
+BEGIN {
+ print "/* Automatically converted font */"
+ missed = 0
+ printstats = 1
+
+ code0 = 82 # ascii code for R
+ scale = 50
+ base = 9
+ fontend = ""
+ symdef = "DEL"
+ cap_height = -21
+ x_height = -14
+ sym_height = -16
+ sup_offset = -13
+ sub_offset = 6
+ # transformations props
+ # SX SY OY
+ transf["!"] = "-1 +1 0" # revert
+ transf["-"] = "+1 -1 "x_height # invert small
+ transf["="] = "+1 -1 "cap_height # invert cap
+ transf["~"] = "+1 -1 "sym_height # invert symbol
+ transf["+"] = "-1 -1 "x_height # turn small
+ transf["%"] = "-1 -1 "cap_height # turn cap
+ transf["*"] = "-1 -1 "sym_height # turn symbol
+ transf["^"] = "+1 +1 "sup_offset # superscript
+ transf["`"] = "-1 +1 "sup_offset # superscript reversed
+ transf["."] = "+1 +1 "sub_offset # subscript
+ transf[","] = "-1 +1 "sub_offset # subscript reversed
+}
+
+function ntochar(x) {
+ return sprintf("%c",x+code0)
+}
+
+function cname(glyph) {
+ if(substr(glyph,1,1) in transf) {
+ return substr(glyph,2)
+ } else {
+ return glyph
+ }
+}
+
+function gsx(glyph, tr) {
+ if(substr(glyph,1,1) in transf) {
+ tr = transf[substr(glyph,1,1)]
+ return 0+substr(tr,1,2)
+ } else {
+ return 1;
+ }
+}
+
+function gsy(glyph, tr) {
+ if(substr(glyph,1,1) in transf) {
+ tr = transf[substr(glyph,1,1)]
+ return 0+substr(tr,4,2)
+ } else {
+ return 1;
+ }
+}
+
+function goy(glyph, tr) {
+ #print "// "substr(glyph,1,1)
+ if(substr(glyph,1,1) in transf) {
+ tr = transf[substr(glyph,1,1)]
+ return 0+substr(tr,7)
+ } else {
+ return 0;
+ }
+}
+
+function graph(glyph, subst, ofx, ofy, sx, sy, cn, data, i, j, o, c) {
+ if(subst=="")subst=symdef
+ if(ofx=="") ofx = 0
+ if(ofy=="") ofy = 0
+ if(!(cname(glyph) in fontnst)) {
+ print " /* glyph "glyph" not found!!! */"
+ glyph = subst
+ }
+ sx = gsx(glyph)
+ sy = gsy(glyph)
+ ofy += goy(glyph) + base
+ #print "/* g ofx="ofx" ofy="ofy" */"
+ cn = cname(glyph)
+ data = ""
+ for(i = 0; i<fontnst[cn]; i++) {
+ if(i>0) data = data " R"
+ for(j = 0; j<fontsl[cn" "i]; j++) {
+ c = ntochar(fontx[cn" "i" "j]*sx+ofx) ntochar(fonty[cn" "i" "j]*sy+ofy)
+ if(c!=o) {
+ data = data c
+ o = c
+ }
+ }
+ }
+ fontuse[cn] += 1
+ return data
+}
+function metric(glyph, subst, sx, cn, ml, mr) {
+ if(subst=="")subst=symdef
+ if(!(cname(glyph) in fontnst)) glyph = subst
+ sx = gsx(glyph)
+ cn = cname(glyph)
+ ml = sx<0?fontmr[cn]:fontml[cn]
+ mr = sx<0?fontml[cn]:fontmr[cn]
+ return ntochar(sx*ml) ntochar(sx*mr)
+}
+function metric2(glyph1, glyph2, ofx1, ofx2, subst, sx, cn, ml, mr) {
+ if(subst=="")subst=symdef
+ if(!(cname(glyph1) in fontnst)) glyph1 = subst
+ sx1 = gsx(glyph1)
+ cn1 = cname(glyph1)
+ if(!(cname(glyph2) in fontnst)) glyph2 = subst
+ sx2 = gsx(glyph2)
+ cn2 = cname(glyph2)
+ ml = sx1<0?fontmr[cn1]:fontml[cn1]
+ mr = sx2<0?fontml[cn2]:fontmr[cn2]
+ return ntochar(sx1*ml+ofx1) ntochar(sx2*mr+ofx2)
+}
+function dist(glyph1, glyph2, subst, sx, cn, ml, mr) {
+ if(subst=="")subst=symdef
+ if(!(cname(glyph1) in fontnst)) glyph1 = subst
+ sx1 = gsx(glyph1)
+ cn1 = cname(glyph1)
+ if(!(cname(glyph2) in fontnst)) glyph2 = subst
+ sx2 = gsx(glyph2)
+ cn2 = cname(glyph2)
+ return sx1*fontmr[cn1] - sx2*fontml[cn2]
+}
+function offsetx(char, accent, anchor, del, cc, ca, asx, csx) {
+ if("" == anchor || "#" == anchor) return 0;
+ del = index(anchor, "=")
+ if(del) {
+ cc = cname(char)" "substr(anchor,1,del-1)
+ ca = cname(accent)" "substr(anchor,del+1)
+ } else {
+ cc = cname(char)" "anchor
+ ca = cname(accent)" "anchor
+ }
+ if((cc in fontancx) && (ca in fontancx)) {
+ asx = gsx(accent)
+ csx = gsx(char)
+ #print " /* ox="csx*fontancx[cc]-asx*fontancx[ca]" */"
+ return csx*fontancx[cc]-asx*fontancx[ca]
+ } else {
+ return 0
+ }
+}
+
+function offsety(char, accent, anchor, del, cc, ca, asy, csy, aoy, coy) {
+ if("" == anchor || "#" == anchor) return 0;
+ del = index(anchor, "=")
+ #print " /* del="del" */"
+ if(del) {
+ cc = cname(char)" "substr(anchor,1,del-1)
+ ca = cname(accent)" "substr(anchor,del+1)
+ } else {
+ cc = cname(char)" "anchor
+ ca = cname(accent)" "anchor
+ }
+ if((cc in fontancy) && (ca in fontancy)) {
+ asy = gsy(accent)
+ csy = gsy(char)
+ aoy = goy(accent)
+ coy = goy(char)
+ #print " /* oy="csy*fontancy[cc]+coy-asy*fontancy[ca]-aoy" */"
+ return csy*fontancy[cc]+coy-asy*fontancy[ca]-aoy
+ } else {
+ print " /* anchor "(cc in fontancy?"":cc) (cc in fontancy||ca in fontancy?"":" and ") (ca in fontancy?"":ca)" not found! */"
+ return 0
+ }
+}
+
+function cesc(s) {
+ gsub(/[\\"']/,"\\\\&",s)
+ return s
+}
+
+function gaccent(b,g,anc,cx) {
+ if(!(cname(g) in fontnst)) {
+ missed += 1
+ }
+
+ if(anc=="" || anc=="#") anc=""
+ ofx = offsetx(b,g,anc)
+ ofy = offsety(b,g,anc)
+ return " R"graph(g,accdef,cx+ofx,ofy)
+}
+function compose(cx, st) {
+ if(!(cname($2) in fontnst)) {
+ missed += 1
+ }
+ st = graph($2,symdef,cx,0)
+ if($3!="" && $3!="#") {
+ st = st gaccent($2,$3,$4,cx)
+ ofx2 = ofx
+ if($4!="#" && $5!="" && $5!="#") {
+ st = st gaccent($2,$5,$6,cx)
+ if($6!="#" && $7!="" && $7!="#") {
+ st = st gaccent($2,$7,$8,cx)
+ }
+ }
+ }
+ return st
+}
+
+# parsing glyph library
+$1 == "DEF" {
+ name = $2
+ data = ""
+ prepend = ""
+ nst = 0
+ xleft = 0
+ xright = 0
+ fontancx[name" -"] = 0
+ fontancy[name" -"] = 0
+}
+
+$1 == "P" { # drawings
+ n = $2*2+6
+ # print "Poly of "$2
+ data = data prepend
+ data_rev = data_rev prepend
+ ox = -100
+ oy = -100
+ j = 0
+ for(i = 6; i<n; i+=2) {
+ x = ($i)/scale
+ y = -($(i+1))/scale
+ #print "X: "x" Y: "y
+ if(x!=ox || y!=oy) {
+ data = data ntochar(x) ntochar(y+base)
+ fontx[name" "nst" "j] = x
+ fonty[name" "nst" "j] = y
+ j++
+ ox = x
+ oy = y
+ }
+ }
+ fontsl[name" "nst] = j
+ nst++
+ prepend = " R"
+}
+
+$1 == "X" { # i use pins as metric and anchors
+ fontancx[name" "$2] = $4/scale
+ fontancy[name" "$2] = -$5/scale
+ if($4>0 && $2=="~" || $2=="S") {
+ xright = $4/scale
+ fontmr[name] = $4/scale
+ # print "//Right:" xright
+ } else if($4<=0 && $2=="~" || $2=="P") {
+ xleft = $4/scale
+ fontml[name] = $4/scale
+ # print "//Left:" xleft
+ }
+}
+
+$1 == "ENDDEF" {
+ metr = ntochar(xleft) ntochar(xright)
+ fontnst[name] = nst
+ fontuse[name] = 0
+ fi[name] = name
+}
+
+# parsing font index
+$1 == "font" {
+ print fontend
+ print "const static char* "$2"[] ="
+ print "{"
+ fontend = "};"
+}
+$1 == "startchar" {
+ codeno = $2
+}
+$1 == "+" || $1 == "+w" || $1 == "+p" {
+ comx = 0
+ rem = (codeno%16)?"":sprintf(" /* U+%X %s %s */", codeno, $2, $3)
+ #print "// c "codeno
+ codeno+=1
+ str = compose()
+ met = ("+w"==$1) ? metric2($2, $3, 0, ofx2) : ("+p"==$1) ? metric2($3, $2, ofx2, 0) : metric($2)
+ print " \""cesc(met str) "\","rem
+}
+$1 == "+(" {
+ comx = 0
+ rem = (codeno%16)?"":sprintf(" /* U+%X %s %s */", codeno, $2, $3)
+ #print "// c "codeno
+ codeno+=1
+ str = compose(comx)
+ gf = $2
+ gp = $2
+}
+$1 == "+|" {
+ comx = comx + dist(gp, $2)
+ #print "// "comx
+ str = str " R" compose(comx)
+ gp = $2
+}
+$1 == "+)" {
+ comx = comx + dist(gp, $2)
+ #print "// "comx
+ str = str " R" compose(comx)
+ met = metric2(gf, $2, 0, comx)
+ print " \"" cesc(met str) "\","rem
+}
+
+$1 == "skipcodes" {
+ #print " // skip "$2
+ for(i = 0; i<$2; i++) {
+ print " \""cesc(metric(symdef) graph(symdef))"\"," ((codeno%16)?"":sprintf(" /* U+%X */", codeno))
+ codeno += 1
+ }
+}
+$1 == "//" {
+ print " /* "$0" */"
+}
+$1 == "stats" {
+ printstats = $2
+}
+
+END {
+ print fontend
+ if(printstats) {
+ if(missed>0) print "/* Missed glyphs: " missed " */"
+ print "/* --- unused glyphs --- */"
+ for(f in fi) {
+ if(0==fontuse[f]) print "/* "f" */"
+ }
+ }
+} \ No newline at end of file
diff --git a/helpers/tools_to_build_newstroke-font/newstroke_font.h b/helpers/tools_to_build_newstroke-font/newstroke_font.h
new file mode 100644
index 0000000..2a13634
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/newstroke_font.h
@@ -0,0 +1,11330 @@
+/* Automatically converted font */
+
+const static char* newstroke_font[] =
+{
+ /* // BASIC LATIN (0020-007F) */
+ "JZ", /* U+20 SPACE */
+ "MWRYSZR[QZRYR[ RRSQGRFSGRSRF",
+ "JZNFNJ RVFVJ",
+ "H]LM[M RRDL_ RYVJV RS_YD",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RRCR^",
+ "F^J[ZF RMFOGPIOKMLKKJIKGMF RYZZXYVWUUVTXUZW[YZ",
+ "E_[[Z[XZUWPQNNMKMINGPFQFSGTITJSLRMLQKRJTJWKYLZN[Q[SZTYWUXRXP",
+ "MWSFQJ",
+ "KYVcUbS_R]QZPUPQQLRISGUDVC",
+ "KYNcObQ_R]SZTUTQSLRIQGODNC",
+ "JZRFRK RMIRKWI ROORKUO",
+ "E_JSZS RR[RK",
+ "MWSZS[R]Q^",
+ "E_JSZS",
+ "MWRYSZR[QZRYR[",
+ "G][EI`",
+ "H\\QFSFUGVHWJXNXSWWVYUZS[Q[OZNYMWLSLNMJNHOGQF", /* U+30 DIGIT_0 */
+ "H\\X[L[ RR[RFPINKLL",
+ "H\\LHMGOFTFVGWHXJXLWOK[X[",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY",
+ "H\\VMV[ RQELTYT",
+ "H\\WFMFLPMOONTNVOWPXRXWWYVZT[O[MZLY",
+ "H\\VFRFPGOHMKLOLWMYNZP[T[VZWYXWXRWPVOTNPNNOMPLR",
+ "H\\KFYFP[",
+ "H\\PONNMMLKLJMHNGPFTFVGWHXJXKWMVNTOPONPMQLSLWMYNZP[T[VZWYXWXSWQVPTO",
+ "H\\N[R[TZUYWVXRXJWHVGTFPFNGMHLJLOMQNRPSTSVRWQXO",
+ "MWRYSZR[QZRYR[ RRNSORPQORNRP",
+ "MWSZS[R]Q^ RRNSORPQORNRP",
+ "E_ZMJSZY",
+ "E_JPZP RZVJV",
+ "E_JMZSJY",
+ "I[QYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS",
+ "D_VQUPSOQOOPNQMSMUNWOXQYSYUXVW RVOVWWXXXZW[U[PYMVKRJNKKMIPHTIXK[N]R^V]Y[", /* U+40 AT */
+ "I[MUWU RK[RFY[",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[",
+ "H[MPTP RW[M[MFWF",
+ "HZTPMP RM[MFWF",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR",
+ "G]L[LF RLPXP RX[XF",
+ "MWR[RF",
+ "JZUFUUTXRZO[M[",
+ "G\\L[LF RX[OO RXFLR",
+ "HYW[M[MF",
+ "F^K[KFRUYFY[",
+ "G]L[LFX[XF",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ", /* U+50 P_CAP */
+ "G]Z]X\\VZSWQVOV RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG",
+ "JZLFXF RR[RF",
+ "G]LFLWMYNZP[T[VZWYXWXF",
+ "I[KFR[YF",
+ "F^IFN[RLV[[F",
+ "H\\KFY[ RYFK[",
+ "I[RQR[ RKFRQYF",
+ "H\\KFYFK[Y[",
+ "KYVbQbQDVD",
+ "KYID[_",
+ "KYNbSbSDND",
+ "LXNHREVH",
+ "JZJ]Z]",
+ "NVPESH", /* U+60 GRAVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT",
+ "MYOMWM RR[RISGUFWF",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "H[M[MF RV[VPUNSMPMNNMO",
+ "MWR[RM RRFQGRHSGRFRH",
+ "MWRMR_QaObNb RRFQGRHSGRFRH",
+ "IZN[NF RPSV[ RVMNU",
+ "MXU[SZRXRF",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[",
+ "I\\NMN[ RNOONQMTMVNWPW[",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ", /* U+70 P_SMALL */
+ "I\\WMWb RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "KXP[PM RPQQORNTMVM",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN",
+ "MYOMWM RRFRXSZU[W[",
+ "H[VMV[ RMMMXNZP[S[UZVY",
+ "JZMMR[WM",
+ "G]JMN[RQV[ZM",
+ "IZL[WM RLMW[",
+ "JZMMR[ RWMR[P`OaMb",
+ "IZLMWML[W[",
+ "KYVcUcSbR`RVQTOSQRRPRFSDUCVC",
+ "H\\RbRD",
+ "KYNcOcQbR`RVSTUSSRRPRFQDOCNC",
+ "KZMHNGPFTHVGWF",
+ "F^K[KFYFY[K[",
+ /* // LATIN-1 SUPPLEMENT (0080-00FF) */
+ "F^K[KFYFY[K[", /* U+80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "JZ", /* U+A0 SPACE */
+ "MWROQNRMSNRORM RRUSaRbQaRURb",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRJR^",
+ "H[LMTM RL[W[ RO[OIPGRFUFWG",
+ "H]LYOV RLLOO RVVYY RVOYL RVVTWQWOVNTNQOOQNTNVOWQWTVV",
+ "F^JTZT RJMZM RRQR[ RKFRQYF",
+ "MWRbRW RRFRQ",
+ "I[N]P^S^U]V[UYOSNQNPONQM RVGTFQFOGNIOKUQVSVTUVSW",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "@dVKTJPJNKLMKOKSLUNWPXTXVW RRCMDHGELDQEVH[M^R_W^\\[_V`Q_L\\GWDRC",
+ "KZOEQDSDUEVGVN RVMTNQNOMNKOIQHVH",
+ "H\\RMLSRY RXWTSXO",
+ "E_JQZQZV",
+ "RR",
+ "@dWXRR RNXNJTJVKWMWOVQTRNR RRCMDHGELDQEVH[M^R_W^\\[_V`Q_L\\GWDRC",
+ "LXMGWG",
+ "JZRFPGOIPKRLTKUITGRF", /* U+B0 DEGREE */
+ "E_JOZO RRWRG RZ[J[",
+ "JZNAP@S@UAVCVEUGNNVN",
+ "JZN@V@RESEUFVHVKUMSNPNNM",
+ "NVTEQH",
+ "H^MMMb RWXXZZ[ RMXNZP[T[VZWXWM",
+ "F]VMV[ ROMOXNZL[ RZMMMKNJP",
+ "JZRRQSRTSSRRRT",
+ "MWR\\T]U_TaRbOb",
+ "JZVNNN RNCPBR@RN",
+ "KYQNOMNKNGOEQDSDUEVGVKUMSNQN",
+ "H\\RMXSRY RLWPSLO",
+ "G]KQYQ RVNNN RNCPBR@RN RUYUa RQSN]W]",
+ "G]KQYQ RVNNN RNCPBR@RN RNTPSSSUTVVVXUZNaVa",
+ "G]KQYQ RN@V@RESEUFVHVKUMSNPNNM RUYUa RQSN]W]",
+ "I[SORNSMTNSOSM RWaUbPbNaM_M]N[OZQYRXSVSU",
+ "I[MUWU RK[RFY[ RP>SA", /* U+C0 A_CAP GRAVE */
+ "I[MUWU RK[RFY[ RT>QA",
+ "I[MUWU RK[RFY[ RNAR>VA",
+ "I[MUWU RK[RFY[ RMAN@P?TAV@W?",
+ "I[MUWU RK[RFY[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[MUWU RK[RFY[ RRFPEOCPAR@TAUCTERF",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR\\T]U_TaRbOb",
+ "H[MPTP RW[M[MFWF RP>SA",
+ "H[MPTP RW[M[MFWF RT>QA",
+ "H[MPTP RW[M[MFWF RNAR>VA",
+ "H[MPTP RW[M[MFWF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "MWR[RF RP>SA",
+ "MWR[RF RT>QA",
+ "MWR[RF RNAR>VA",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RIPQP", /* U+D0 D_CAP STROKE_H */
+ "G]L[LFX[XF RMAN@P?TAV@W?",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RP>SA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RT>QA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W?",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "E_LMXY RXMLY",
+ "G]ZFJ[ RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[",
+ "G]LFLWMYNZP[T[VZWYXWXF RP>SA",
+ "G]LFLWMYNZP[T[VZWYXWXF RT>QA",
+ "G]LFLWMYNZP[T[VZWYXWXF RNAR>VA",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[RQR[ RKFRQYF RT>QA",
+ "G\\LFL[ RLKTKVLWMXOXRWTVUTVLV",
+ "F]K[KJLHMGOFRFTGUHVJVMSMQNPPPQQSSTVTXUYWYXXZV[R[PZ",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RPESH", /* U+E0 A_SMALL GRAVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RTEQH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RMHNGPFTHVGWF",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRHPGOEPCRBTCUETGRH",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RR\\T]U_TaRbOb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RPESH",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RTEQH",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "MWR[RM RPESH",
+ "MWR[RM RTEQH",
+ "LXNHREVH RR[RM",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RR[RM",
+ "I\\SCQI RWNUMQMONNOMQMXNZP[T[VZWXWLVITGRFNE", /* U+F0 ETH_SMALL */
+ "I\\NMN[ RNOONQMTMVNWPW[ RMHNGPFTHVGWF",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RPESH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_ZSJS RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "H[XMK[ RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "H[VMV[ RMMMXNZP[S[UZVY RPESH",
+ "H[VMV[ RMMMXNZP[S[UZVY RTEQH",
+ "H[VMV[ RMMMXNZP[S[UZVY RNHREVH",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "JZMMR[ RWMR[P`OaMb RTEQH",
+ "H[MFMb RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "JZMMR[ RWMR[P`OaMb RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ /* // LATIN EXTENDED-A (0100-017F) */
+ "I[MUWU RK[RFY[ RM@W@", /* U+100 A_CAP MACRON */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RMGWG",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V>",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE",
+ "I[MUWU RK[RFY[ RY[W]V_WaYb[b",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RW[U]T_UaWbYb",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RT>QA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RTEQH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RNAR>VA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RNHREVH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR?Q@RAS@R?RA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRFQGRHSGRFRH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RN>RAV>",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RNERHVE",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RN>RAV>",
+ "IfW[WF RWZU[Q[OZNYMWMQNOONQMUMWN RbF`J",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RIPQP", /* U+110 D_CAP STROKE_H */
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RRHZH",
+ "H[MPTP RW[M[MFWF RM@W@",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMGWG",
+ "H[MPTP RW[M[MFWF RN>O@QASAU@V>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNEOGQHSHUGVE",
+ "H[MPTP RW[M[MFWF RR?Q@RAS@R?RA",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RRFQGRHSGRFRH",
+ "H[MPTP RW[M[MFWF RR[P]O_PaRbTb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RR[P]O_PaRbTb",
+ "H[MPTP RW[M[MFWF RN>RAV>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNERHVE",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RNAR>VA",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RNHREVH",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RN>O@QASAU@V>",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RNEOGQHSHUGVE",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RR?Q@RAS@R?RA", /* U+120 G_CAP DOT */
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RRFQGRHSGRFRH",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RR\\T]U_TaRbOb",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RRGPFODPBRAUA",
+ "G]L[LF RLPXP RX[XF RNAR>VA",
+ "H[M[MF RV[VPUNSMPMNNMO RIAM>QA",
+ "G]IJ[J RL[LF RLPXP RX[XF",
+ "H[M[MF RV[VPUNSMPMNNMO RJHRH",
+ "MWR[RF RMAN@P?TAV@W?",
+ "MWR[RM RMHNGPFTHVGWF",
+ "MWR[RF RM@W@",
+ "MWR[RM RMGWG",
+ "MWR[RF RN>O@QASAU@V>",
+ "MWR[RM RNEOGQHSHUGVE",
+ "MWR[RF RR[P]O_PaRbTb",
+ "MWR[RM RR[P]O_PaRbTb",
+ "MWR[RF RR?Q@RAS@R?RA", /* U+130 I_CAP DOT */
+ "MWR[RM",
+ "MgR[RF RbFbUaX_Z\\[Z[",
+ "MaR[RM RRFQGRHSGRFRH R\\M\\_[aYbXb R\\F[G\\H]G\\F\\H",
+ "JZUFUUTXRZO[M[ RQAU>YA",
+ "MWRMR_QaObNb RNHREVH",
+ "G\\L[LF RX[OO RXFLR RR\\T]U_TaRbOb",
+ "IZN[NF RPSV[ RVMNU RR\\T]U_TaRbOb",
+ "IZNMN[ RPSV[ RVMNU",
+ "HYW[M[MF RO>LA",
+ "MXU[SZRXRF RTEQH",
+ "HYW[M[MF RR\\T]U_TaRbOb",
+ "MXU[SZRXRF RR\\T]U_TaRbOb",
+ "HYW[M[MF RVHSK",
+ "M^U[SZRXRF RZFXJ",
+ "HYW[M[MF RUNTOUPVOUNUP",
+ "M\\U[SZRXRF RYOZPYQXPYOYQ", /* U+140 L_SMALL_MIDDOT */
+ "HYW[M[MF RJQPM",
+ "MXU[SZRXRF ROQUM",
+ "G]L[LFX[XF RT>QA",
+ "I\\NMN[ RNOONQMTMVNWPW[ RTEQH",
+ "G]L[LFX[XF RR\\T]U_TaRbOb",
+ "I\\NMN[ RNOONQMTMVNWPW[ RR\\T]U_TaRbOb",
+ "G]L[LFX[XF RN>RAV>",
+ "I\\NMN[ RNOONQMTMVNWPW[ RNERHVE",
+ "MjSFQJ R\\M\\[ R\\O]N_MbMdNePe[",
+ "G]LFL[ RLINGPFTFVGWHXJX^W`VaTbQb",
+ "I\\NMN[ RNOONQMTMVNWPW_VaTbRb",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN>O@QASAU@V>",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNEOGQHSHUGVE",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RQ>NA RX>UA", /* U+150 O_CAP ACUTE_DBL */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RQENH RXEUH",
+ "E`RPYP RRFR[ R\\FNFLGJIIMITJXLZN[\\[",
+ "C`[ZY[U[SZRXRPSNUMYM[N\\P\\RRT RRQQOPNNMKMINHOGQGWHYIZK[N[PZQYRW",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RT>QA",
+ "KXP[PM RPQQORNTMVM RTEQH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RR\\T]U_TaRbOb",
+ "KXP[PM RPQQORNTMVM RR\\T]U_TaRbOb",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RN>RAV>",
+ "KXP[PM RPQQORNTMVM RNERHVE",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RT>QA",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RTEQH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RNAR>VA",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNHREVH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RR\\T]U_TaRbOb",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RR\\T]U_TaRbOb",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RN>RAV>", /* U+160 S_CAP CARON */
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNERHVE",
+ "JZLFXF RR[RF RR\\T]U_TaRbOb",
+ "MYOMWM RRFRXSZU[W[ RR\\T]U_TaRbOb",
+ "JZLFXF RR[RF RN>RAV>",
+ "M[OMWM RYFXI RRFRXSZU[W[",
+ "JZLFXF RR[RF RNQVQ",
+ "MYOMWM RRFRXSZU[W[ ROSUS",
+ "G]LFLWMYNZP[T[VZWYXWXF RMAN@P?TAV@W?",
+ "H[VMV[ RMMMXNZP[S[UZVY RMHNGPFTHVGWF",
+ "G]LFLWMYNZP[T[VZWYXWXF RM@W@",
+ "H[VMV[ RMMMXNZP[S[UZVY RMGWG",
+ "G]LFLWMYNZP[T[VZWYXWXF RN>O@QASAU@V>",
+ "H[VMV[ RMMMXNZP[S[UZVY RNEOGQHSHUGVE",
+ "G]LFLWMYNZP[T[VZWYXWXF RRAP@O>P<R;T<U>T@RA",
+ "H[VMV[ RMMMXNZP[S[UZVY RRHPGOEPCRBTCUETGRH",
+ "G]LFLWMYNZP[T[VZWYXWXF RQ>NA RX>UA", /* U+170 U_CAP ACUTE_DBL */
+ "H[VMV[ RMMMXNZP[S[UZVY RQENH RXEUH",
+ "G]LFLWMYNZP[T[VZWYXWXF RR[P]O_PaRbTb",
+ "H[VMV[ RMMMXNZP[S[UZVY RV[T]S_TaVbXb",
+ "F^IFN[RLV[[F RNAR>VA",
+ "G]JMN[RQV[ZM RNHREVH",
+ "I[RQR[ RKFRQYF RNAR>VA",
+ "JZMMR[ RWMR[P`OaMb RNHREVH",
+ "JZLFXF RR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H\\KFYFK[Y[ RT>QA",
+ "IZLMWML[W[ RTEQH",
+ "H\\KFYFK[Y[ RR?Q@RAS@R?RA",
+ "IZLMWML[W[ RRFQGRHSGRFRH",
+ "H\\KFYFK[Y[ RN>RAV>",
+ "IZLMWML[W[ RNERHVE",
+ "MYR[RISGUFWF",
+ /* // LATIN EXTENDED-B (0180-024F) */
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RJHRH", /* U+180 B_SMALL STROKE_H */
+ "C\\LFL[T[VZWYXWXTWRVQSPLP RFKFIGGIFSFUGVHWJWLVNUOSP",
+ "G\\VFLFL[R[UZWXXVXSWQUORNLN",
+ "H[WFMFM[ RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "H]MFM[S[VZXXYVYSXQVOSNMN",
+ "IZNMN[S[UZVXVUUSSRNR",
+ "I^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZMY",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RMHKGJEKCLB",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RTMTIUGWFYF",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RIPQP",
+ "C\\FKFIGGIFQFTGVIWKXOXRWVVXTZQ[L[LF",
+ "H]NFXFX[R[OZMXLVLSMQOORNXN",
+ "I\\MFWFW[ RWNUMQMONNOMQMWNYOZQ[U[WZ",
+ "I\\Q[T[VZWYXWXQWOVNTMQMONNOMQMWNYOZQ[T\\V]W_VaTbPbNa",
+ "I\\WPPP RM[W[WFMF",
+ "F^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZLXKVJRZP",
+ "G[PPTP RWGUFPFNGMHLJLLMNNOPPMQLRKTKWLYMZO[U[WZ", /* U+190 EPSILON_LARGE */
+ "HZTPMP RM[MFWF RM[M_LaJbHb",
+ "MYOMWM RR[RISGUFWF RR[R_QaObMb",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RMHKGJEKCLB",
+ "I[KFU[U_TaRbPaO_O[YF",
+ "D`I[IF RIOJNLMOMQNRPRXSZU[X[ZZ[Y\\W\\P[NZM",
+ "MZRFRWSYTZV[X[",
+ "MWR[RF RNPVP",
+ "G_L[LF RX[OO RLRWGYF[G\\I\\K",
+ "IZNMN[ RPSV[ RVMNU RNMNIOGQFSF",
+ "MXU[SZRXRF RNOVO",
+ "JZRMM[ RMFOFPGRMW[ RNLTH",
+ "Ca\\F\\[ R\\XZZX[V[TZSYRWRF RRWQYPZN[L[JZIYHWHF",
+ "G]L[LFX[XF RL[L_KaIbGb",
+ "I\\NMN[ RNOONQMTMVNWPWb",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA", /* U+1A0 O_CAP HORN */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH",
+ "DaSGQFMFKGIIHMHTIXKZM[Q[SZUXVTVMUISGUFYF[G\\I\\b",
+ "E^RNPMMMKNJOIQIWJYKZM[P[RZSYTWTQSORNTMVMXNYPYb",
+ "C\\LFL[ RFKFIGGIFTFVGWHXJXMWOVPTQLQ",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RRMRISGUFWF",
+ "G\\LFL[ RQVXb RLKTKVLWMXOXRWTVUTVLV",
+ "H\\XZU[P[NZMYLWLUMSNRPQTPVOWNXLXJWHVGTFOFLG",
+ "IZVZT[P[NZMXMWNUPTSTUSVQVPUNSMPMNN",
+ "H[W[L[SPLFWF",
+ "JYWbUbSaR_RIQGOFMGLIMKOLQKRI",
+ "MYOMWM RRFRXSZU[W[ RW[W_VaTbRb",
+ "HZR[RF RKKKILGNFXF",
+ "MYOMWM RWFUFSGRIRXSZU[W[",
+ "JZLFXF RR[RF RR[R_SaUbWb",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG", /* U+1B0 U_SMALL HORN */
+ "F^ZFUFUJWKYMZPZUYXWZT[P[MZKXJUJPKMMKOJOFJF",
+ "G]LFLWMYNZP[T[VZXXYVYIXGWF",
+ "I`RQR[ RKFRQXGZF\\G]I]K",
+ "J^MMR[ RMbOaP`R[VNXMZN[P[R",
+ "H\\KFYFK[Y[ RNPVP",
+ "IZLMWML[W[ RNTVT",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY",
+ "H\\YFLFSNPNNOMPLRLWMYNZP[V[XZYY",
+ "JZWMNMUVRVPWOXNZN^O`PaRbUbWa",
+ "JZMMVMOTSTUUVWVXUZS[Q[O\\N^N_OaQbVb",
+ "H\\LHMGOFTFVGWHXJXLWOK[X[ RNSVS",
+ "H\\WFMFLPMOONTNVOWPXRXWWYVZT[O[MZLY",
+ "JZVMOMNSPRSRUSVUVXUZS[P[NZ",
+ "J^MZP[T[WZYXZVZSYQWOTNPNPF RLITI",
+ "H[MMMb RMONNPMTMVNWPWSVUM^",
+ "MWRFRb", /* U+1C0 LINE_V_LETTER */
+ "JZOFOb RUFUb",
+ "MWRFRb ROWUW ROQUQ",
+ "MWRYSZR[QZRYR[ RRSQGRFSGRSRF",
+ "GpL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_FmF_[m[ Rb>fAj>",
+ "GmL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_MjM_[j[ RaEeHiE",
+ "ImW[WF RWZU[Q[OZNYMWMQNOONQMUMWN R_MjM_[j[ RaEeHiE",
+ "HiW[M[MF RdFdUcXaZ^[\\[",
+ "HcW[M[MF R^M^_]a[bZb R^F]G^H_G^F^H",
+ "MbU[SZRXRF R]M]_\\aZbYb R]F\\G]H^G]F]H",
+ "GmL[LFX[XF RhFhUgXeZb[`[",
+ "GgL[LFX[XF RbMb_aa_b^b RbFaGbHcGbFbH",
+ "IfNMN[ RNOONQMTMVNWPW[ RaMa_`a^b]b RaF`GaHbGaFaH",
+ "I[MUWU RK[RFY[ RN>RAV>",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNERHVE",
+ "MWR[RF RN>RAV>",
+ "MWR[RM RNERHVE", /* U+1D0 I_SMALL CARON */
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN>RAV>",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNERHVE",
+ "G]LFLWMYNZP[T[VZWYXWXF RN>RAV>",
+ "H[VMV[ RMMMXNZP[S[UZVY RNERHVE",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RM;W;",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RM@W@",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RT9Q<",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RN9R<V9",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RN>RAV>",
+ "G]LFLWMYNZP[T[VZWYXWXF RN?O@NAM@N?NA RV?W@VAU@V?VA RP9S<",
+ "H[VMV[ RMMMXNZP[S[UZVY RNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT",
+ "I[MUWU RK[RFY[ RN?O@NAM@N?NA RV?W@VAU@V?VA RM;W;",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNFOGNHMGNFNH RVFWGVHUGVFVH RM@W@",
+ "I[MUWU RK[RFY[ RR?Q@RAS@R?RA RM;W;", /* U+1E0 A_CAP DOT */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRFQGRHSGRFRH RM@W@",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[ RO@Y@",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX RMGWG",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RSV[V",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RS^[^",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RN>RAV>",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RNERHVE",
+ "G\\L[LF RX[OO RXFLR RN>RAV>",
+ "IZN[NF RPSV[ RVMNU RJANDRA",
+ "G]R[P]O_PaRbTb RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[R[P]O_PaRbTb RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "G]R[P]O_PaRbTb RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@",
+ "H[R[P]O_PaRbTb RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY RN>RAV>",
+ "JZMMVMOVRVTWUXVZV^U`TaRbObMa RNERHVE",
+ "MWRMR_QaObNb RNERHVE", /* U+1F0 J_SMALL CARON */
+ "GpL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_FmF_[m[",
+ "GmL[LFQFTGVIWKXOXRWVVXTZQ[L[ R_MjM_[j[",
+ "ImW[WF RWZU[Q[OZNYMWMQNOONQMUMWN R_MjM_[j[",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RT>QA",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RTEQH",
+ "CaH[HF RHPTP RTFTXUZW[Z[\\Z]X]M",
+ "G\\LFLb RLINGPFTFVGWHXJXOWRUUL^",
+ "G]L[LFX[XF RP>SA",
+ "I\\NMN[ RNOONQMTMVNWPW[ RPESH",
+ "I[MUWU RK[RFY[ RZ9X< RR;P<O>P@RAT@U>T<R;",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RZ@XC RRBPCOEPGRHTGUETCRB",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[ RV>SA",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX RTEQH",
+ "G]ZFJ[ RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[ RT>QA",
+ "H[XMK[ RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "I[MUWU RK[RFY[ ROAL> RVAS>", /* U+200 A_CAP GRAVE_DBL */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR ROHLE RVHSE",
+ "I[MUWU RK[RFY[ RNAO?Q>S>U?VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHOFQESEUFVH",
+ "H[MPTP RW[M[MFWF ROAL> RVAS>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT ROHLE RVHSE",
+ "H[MPTP RW[M[MFWF RNAO?Q>S>U?VA",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHOFQESEUFVH",
+ "MWR[RF ROAL> RVAS>",
+ "MWR[RM ROHLE RVHSE",
+ "MWR[RF RNAO?Q>S>U?VA",
+ "MWR[RM RNHOFQESEUFVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF ROAL> RVAS>",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ ROHLE RVHSE",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAO?Q>S>U?VA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHOFQESEUFVH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ ROAL> RVAS>", /* U+210 R_CAP GRAVE_DBL */
+ "KXP[PM RPQQORNTMVM RPHME RWHTE",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RNAO?Q>S>U?VA",
+ "KXP[PM RPQQORNTMVM ROHPFRETEVFWH",
+ "G]LFLWMYNZP[T[VZWYXWXF ROAL> RVAS>",
+ "H[VMV[ RMMMXNZP[S[UZVY ROHLE RVHSE",
+ "G]LFLWMYNZP[T[VZWYXWXF RNAO?Q>S>U?VA",
+ "H[VMV[ RMMMXNZP[S[UZVY RNHOFQESEUFVH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RS`SaRcQd",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RS`SaRcQd",
+ "JZLFXF RR[RF RS`SaRcQd",
+ "MYOMWM RRFRXSZU[W[ RU`UaTcSd",
+ "I]VRXTYVY[X]V_T`Lb RLHMGOFUFWGXHYJYNXPVRTSNU",
+ "J[UWVXWZW]V_U`SaMb RMNOMSMUNVOWQWTVVUWSXOY",
+ "G]L[LF RLPXP RX[XF RN>RAV>",
+ "H[M[MF RV[VPUNSMPMNNMO RI>MAQ>",
+ "G]L[LFX[XF RX[Xb", /* U+220 N_CAP LEG */
+ "IbWFWXXZZ[\\[^Z_X^V\\UZVV^ RWNUMQMONNOMQMWNYOZQ[T[VZWX",
+ "G]NFLGKIKKLMMNOO RVFXGYIYKXMWNUO ROOUOWPXQYSYWXYWZU[O[MZLYKWKSLQMPOO",
+ "J[MJMMNORQVOWMWJ RPQTQVRWTWXVZT[P[NZMXMTNRPQ",
+ "H\\KFYFK[Y[ RY[Y_XaVbTb",
+ "IZLMWML[W[ RW[W_VaTbRb",
+ "I[MUWU RK[RFY[ RR?Q@RAS@R?RA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRFQGRHSGRFRH",
+ "H[MPTP RW[M[MFWF RR\\T]U_TaRbOb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RR\\T]U_TaRbOb",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA RM;W;",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH RM@W@",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W? RM;W;",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF RM@W@",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RR?Q@RAS@R?RA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRFQGRHSGRFRH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RR?Q@RAS@R?RA RM;W;", /* U+230 O_CAP DOT */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRFQGRHSGRFRH RM@W@",
+ "I[RQR[ RKFRQYF RM@W@",
+ "JZMMR[ RWMR[P`OaMb RMGWG",
+ "M]RFRXSZU[W[YZZXYVWUUVQ^",
+ "IbNMN[ RNOONQMTMVNWPWXXZZ[\\[^Z_X^V\\UZVV^",
+ "M]OMWM RRFRXSZU[W[YZZXYVWUUVQ^",
+ "MWRMR_QaObNb",
+ "D`R[RF RRZP[L[JZIYHWHQIOJNLMPMRN RTMXMZN[O\\Q\\W[YZZX[T[RZ",
+ "D`RMRb RRZP[L[JZIYHWHQIOJNLMPMRN RTMXMZN[O\\Q\\W[YZZX[T[RZ",
+ "I[MUWU RK[RFY[ RXCL`",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RXCL`",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RWHM`",
+ "HYW[M[MF RIOQO",
+ "JZLFXF RR[RF RXCL`",
+ "J[P[R^T_W_ RNZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN",
+ "IZLMWML[N[P\\R^T_W_", /* U+240 Z_SMALL_SWASHTAIL */
+ "J^MGPFTFWGYIZKZNYPWRTSPSP[",
+ "J^NNPMTMVNWOXQXSWUVVTWPWP[",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RIUOU",
+ "G]IM[M RLFLWMYNZP[T[VZWYXWXF",
+ "I[Y[RFK[",
+ "H[MPTP RW[M[MFWF RXCL`",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RWHM`",
+ "JZUFUUTXRZO[M[ RQPYP",
+ "MWRMR_QaObNb ROTUT RRFQGRHSGRFRH",
+ "G]XFX^Y`Za\\b^b RXIVGTFPFNGLIKMKTLXNZP[T[VZXX",
+ "I\\WMW^X`Ya[b]b RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RIQOQ",
+ "KXP[PM RPQQORNTMVM RMTUT",
+ "I[KIYI RRQR[ RKFRQYF",
+ "JZLQXQ RMMR[ RWMR[P`OaMb",
+ /* // IPA EXTENSIONS (0250-02AF) */
+ "H[MMMXNZP[T[VZ RMNOMTMVNWPWRVTTUOUMV", /* U+250 +A_SMALL */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[",
+ "G\\K[NQOOPNRMTMVNWOXRXVWYVZT[R[PZOYNWMPLNJM",
+ "H[RFPFNGMIM[ RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "J\\NNPMTMVNWOXQXWWYVZT[P[NZ",
+ "HZVNTMPMNNMOLQLWMYNZP[S[UZVXUVSUQVM^",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RW[W_XaZb\\b",
+ "I\\\\FZFXGWIW[ RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "I[NZP[T[VZWXWPVNTMPMNNMPMRWT",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT",
+ "IbNNPMTMVNWPWXVZT[P[NZMXMV\\S\\U]W_X`X",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN",
+ "J[TTVSWQWPVNTMPMNN RRTTTVUWWWXVZT[P[NZ",
+ "JaRTTTVUWWWXVZT[P[NZ RNNPMTMVNWPWQVSTT[S[U\\W^X_X",
+ "H[TTVSWQWPVNTMPMNNMOLRLVMYNZP[T[VZWXWWVUTTRT",
+ "MWRMR_QaObNb ROTUT",
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RWMWIXGZF\\F", /* U+260 G_SMALL +HOOK */
+ "I\\WYVZT[P[NZMXMQNOONQMWMW^V`UaSbMb",
+ "HZUNSMPMNNMOLQLWMYNZP[T[VZVUSU",
+ "JZMMU[U_TaRbPaO_O[WM",
+ "JZMMTVUXTZR[PZOXPVWM",
+ "I\\WMWb RNMNXOZQ[T[VZWY",
+ "H[RFPFNGMIM[ RV[VPUNSMPMNNMO",
+ "H[RFPFNGMIM[ RV[VPUNSMPMNNMO RV[V_UaSbQb",
+ "MWR[RM ROTUT RRFQGRHSGRFRH",
+ "MXRMRXSZU[",
+ "MWR[RM RU[O[ RUMOM",
+ "MXU[SZRXRF RMONNPMTOVNWM",
+ "IYU[SZRXRF RRQQOONMOLQMSOTWT",
+ "MXRFR_SaUbWb",
+ "GZLFLXMZO[ RLMVMOVRVTWUXVZV^U`TaRbObMa",
+ "D`[M[[ R[YZZX[U[SZRXRM RRXQZO[L[JZIXIM",
+ "D`[M[[ R[YZZX[U[SZRXRM RRXQZO[L[JZIXIM R[[[b", /* U+270 +M_SMALL LEG */
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ R[[[_ZaXbVb",
+ "I\\NMN[ RNOONQMTMVNWPW[ RN[N_MaKbIb",
+ "I\\NMN[ RNOONQMTMVNWPW[ RW[W_XaZb\\b",
+ "H[M[MMV[VM",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "E]RTXT RRMR[ RZMMMKNJOIQIWJYKZM[Z[",
+ "G]RTRXSZU[V[XZYXYQXOWNUMOMMNLOKQKXLZN[O[QZRX",
+ "G]RFRb RPMTMVNXPYRYVXXVZT[P[NZLXKVKRLPNNPM",
+ "LYTMT[ RTWSYRZP[N[",
+ "LYTMT[ RTWSYRZP[N[ RTMTF",
+ "LYTMT[ RTWSYRZP[N[ RT[T_UaWbYb",
+ "KXP[PM RPQQORNTMVM RP[Pb",
+ "KXP[PM RPQQORNTMVM RP[P_QaSbUb",
+ "KXM[S[ RVMTMRNQOPRP[",
+ "LYW[Q[ RNMPMRNSOTRT[",
+ "I[RUW[ RN[NMTMVNWPWRVTTUNU", /* U+280 R_SMALLCAP */
+ "I[RSWM RNMN[T[VZWXWVVTTSNS",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RN[N_OaQbSb",
+ "KYWFUFSGRIR_QaObMb",
+ "MWRMR_QaObNb ROTUT RRMRISGUFWF",
+ "KYMFOFQGRIRXSZU[W[",
+ "KYWFUFSGRIR_QaObMaL_M]O\\V\\",
+ "KWU[M[ RRbRPQNOMMM",
+ "MYOMWM RRFR_SaUbWb",
+ "H[JRYR RVMV[ RMMMXNZP[S[UZVY",
+ "I\\XMUMUPWRXTXWWYVZT[Q[OZNYMWMTNRPPPMMM",
+ "H[MMMXNZP[S[UZVYWWWPVNUM",
+ "JZW[RMM[",
+ "G]Z[VMRWNMJ[",
+ "JZW[RM RM[RMTHUGWF",
+ "KYRTR[ RMMRTWM",
+ "IZLMWML[W[ RW[W_XaZb\\b", /* U+290 Z_SMALL !HOOK */
+ "IZLMWML[T[VZWXVVTURVN^",
+ "JZMMVMOVRVTWUXVZV^U`TaRbObMa",
+ "JZMMVMOVRVTWUXVZV^U`TaRbPbNaM_N]P\\R]Uc",
+ "J^MGPFTFWGYIZKZNYPWRTSPSP[",
+ "FZWGTFPFMGKIJKJNKPMRPSTST[",
+ "J^MZP[T[WZYXZVZSYQWOTNPNPF",
+ "F[WHVGSFQFNGLIKKJOJYK]L_NaQbSbVaW`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RROQPRQSPRORQ",
+ "I[STVUWWWXVZT[N[NMSMUNVPVQUSSTNT",
+ "I\\PTNUMWMXNZP[T[VZWYXVXRWOVNTMPMNNMPMQNSPTRT",
+ "HZUNSMPMNNMOLQLWMYNZP[T[VZVUSU RUMUIVGXFZF",
+ "H[MTVT RMMM[ RVMV[",
+ "LXRMR_QaObMaL_M]O\\V\\ RRFQGRHSGRFRH",
+ "J[VMVb RTUNM RN[VS",
+ "JYOMO[V[",
+ "I\\WMWb RWZU[Q[OZNYMWMQNOONQMUMWN RWMWIXGZF\\F", /* U+2A0 Q_SMALL +HOOK */
+ "J^MGPFTFWGYIZKZNYPWRTSPSP[ RLXTX",
+ "FZWGTFPFMGKIJKJNKPMRPSTST[ RPXXX",
+ "D`R[RF RRM]MR[][ RRZP[L[JZIYHWHQIOJNLMPMRN",
+ "E`RFR[ RRNPMMMKNJOIQIWJYKZM[P[RZ RRM\\MUVXVZW[X\\Z\\^[`ZaXbUbSa",
+ "D`R[RF RRM]MR[Z[\\Z]X\\VZUXVT^ RRZP[L[JZIYHWHQIOJNLMPMRN",
+ "G^IMQM RLFLXMZO[QZS[W[YZZXZWYUWTTTRSQQQPRNTMWMYN",
+ "I[KMTM RNFNXOZQ[T[ RYFWFUGTIT_SaQbOb",
+ "F^HMPM RKFKXLZN[P[RZ RZNXMTMRNQOPQPWQYRZT[W[YZZXYVWUUVQ^",
+ "F]HMPMP[ RK[KILGNFPF RPOQNSMVMXNYPY_XaVbTb",
+ "G^LFLXMZO[QZS[W[YZZXZWYUWTTTRSQQQPRNTMWMYN",
+ "H^MM[MP[ RMFMXNZP[[[",
+ "G]JSN[RUV[ZS RJFNNRHVNZF",
+ "G]XXXSLSLX RXKXFLFLK",
+ "I\\WMWb RNMNXOZQ[T[VZWY RNMNIMGKFIF",
+ "I\\\\bZbXaW_WM RNMNXOZQ[T[VZWY RNMNIMGKFIF",
+ /* // SPACING MODIFIER LETTERS (02B0-02FF) */
+ "F^K[KFYFY[K[", /* U+2B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // COMBINING DIACRITICAL MARKS (0300-036F) */
+ "F^K[KFYFY[K[", /* U+300 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+310 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+320 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+330 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+340 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+350 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+360 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // GREEK AND COPTIC (0370-03FF) */
+ "H[MFM[ RXPMP", /* U+370 HETA_CAP */
+ "IZNTVT RNMN[",
+ "G]R[RF RKOKFYFYO",
+ "I[R[RF RMOMFWFWO",
+ "MWSFQJ",
+ "MWS[Q_",
+ "G]LFL[XFX[",
+ "H\\MMM[WMW[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "NVR`RcSdTd",
+ "J\\NZP[T[VZWYXWXQWOVNTMPMNN",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRSQTRUSTRSRU",
+ "J\\NZP[T[VZWYXWXQWOVNTMPMNN RRSQTRUSTRSRU",
+ "MWSZS[R]Q^ RRNSORPQORNRP",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+380 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "NVTEQH",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "G[MUWU RK[RFY[ RMEJH",
+ "JZRRQSRTSSRRRT",
+ "B[MPTP RW[M[MFWF RHEEH",
+ "A]L[LF RLPXP RX[XF RGEDH",
+ "GWR[RF RMEJH",
+ "RR",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH",
+ "RR",
+ "@[RQR[ RKFRQYF RFECH",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH",
+ "MXRMRXSZU[ RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA", /* U+390 IOTA_SMALL DIAERESIS */
+ "I[MUWU RK[RFY[",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP",
+ "HZM[MFXF",
+ "I[K[RFY[K[",
+ "H[MPTP RW[M[MFWF",
+ "H\\KFYFK[Y[",
+ "G]L[LF RLPXP RX[XF",
+ "F^OPUP RPFTFVGXIYKZNZSYVXXVZT[P[NZLXKVJSJNKKLINGPF",
+ "MWR[RF",
+ "G\\L[LF RX[OO RXFLR",
+ "I[K[RFY[",
+ "F^K[KFRUYFY[",
+ "G]L[LFX[XF",
+ "H[L[W[ RLFWF RUPNP",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G]L[LFXFX[", /* U+3A0 PI_CAP */
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ",
+ "RR",
+ "H[W[L[SPLFWF",
+ "JZLFXF RR[RF",
+ "I[RQR[ RKFRQYF",
+ "G]R[RF RPITIWJYLZNZRYTWVTWPWMVKTJRJNKLMJPI",
+ "H\\KFY[ RYFK[",
+ "G]R[RF RHFJGKIKNLQMROSUSWRXQYNYIZG\\F",
+ "F^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[RQR[ RKFRQYF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEQH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH",
+ "MXRMRXSZU[ RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA", /* U+3B0 UPSILON_SMALL DIAERESIS */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[",
+ "H[SOUPVQWSWWVYUZS[P[NZMY RKbLaM_MINGPFSFUGVIVLUNSOQO",
+ "JZRYRb RLMMMNNRYWM",
+ "H[SMPMNNMOLQLWMYNZP[S[UZVYWWWQVOUNSMPLNKMINGPFTFVG",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN",
+ "HZMFWFPMNPMSMWNYOZQ[S[U\\V^V_UaSbRb",
+ "I\\NMN[ RNOONQMTMVNWPWb",
+ "H[LPWP RPFSFUGVHWKWVVYUZS[P[NZMYLVLKMHNGPF",
+ "MXRMRXSZU[",
+ "IZNMN[ RPSV[ RVMNU",
+ "JZRMM[ RMFOFPGRMW[",
+ "H^MMMb RWXXZZ[ RMXNZP[T[VZWXWM",
+ "J[MMR[WPWOVM",
+ "HZMFWF RQFOGNINLONQOUO RQOOPNQMSMWNYOZQ[S[U\\V^V_UaSbRb",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "F]VMV[ ROMOXNZL[ RZMMMKNJP", /* U+3C0 PI_SMALL */
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "HZVNTMPMNNMOLQLWMYNZP[S[U\\V^V_UaSb",
+ "H\\YMPMNNMOLQLWMYNZP[S[UZVYWWWQVOUNSM",
+ "H\\LPMNOMXM RRMRXSZU[",
+ "H[MMMXNZP[S[UZVYWWWPVNUM",
+ "G]MMLNKPKVLXNZP[T[VZXXYVYPXNVMUMSNRPRb",
+ "IZWMLb RLMNNOPT_UaWb",
+ "G]RMRb RKMKVLXNZP[T[VZXXYVYM",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RRMRXSZU[",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEQH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH",
+ "G\\L[LF RXFLR ROOX[Qb",
+ "H[SOUPVQWSWWVYUZS[P[NZMXMINGPFSFUGVIVLUNSOQO", /* U+3D0 BETA_SMALL_CURLED */
+ "H[JPKQLSLVMYNZP[S[UZVYWVWKVHUGSFPFNGMHLJLLMNNOPPWP",
+ "I\\KFMFOGQIRKR[ RRKSHTGVFWFYGZI",
+ "NiTEQH RXFZF\\G^I_K_[ R_K`HaGcFdFfGgI",
+ "I\\KFMFOGQIRKR[ RRKSHTGVFWFYGZI RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]RFRb RPMTMVNXPYRYVXXVZT[P[NZLXKVKRLPNNPM",
+ "F^RTRX R[MIM RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "IZLMNNOPOXNZM[LZLXMVVRWPWNVMUNTPTXUZW[V^U`TaRb",
+ "G]R[Rb RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[R[Rb RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "FZWFQFNGLIKKJOJRKVLXNZQ[R[T\\U^U_TaSbQb",
+ "HZVMPMNNMOLQLWMYNZP[R[T\\U^U_TaRbPb",
+ "HZTPMP RM[MFWF",
+ "MZVPRP RWFUFSGRIR_QaOb",
+ "H\\MFOGPILSXNTXUZW[",
+ "I[RFMPWPR[",
+ "H\\NGNL RXIULTNTW RKIMGPFTFVGXIYKZOZUYYX[", /* U+3E0 SAMPI_CAP */
+ "H\\L[UR RR[WV RLMPNSPURWVXZXb",
+ "CaRWRR R\\XY]V`SaMa RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF",
+ "G]RTRX RXZW\\S`PaOa RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "G]XFXb RPFNGLIKMKTLXNZP[T[VZXX",
+ "I\\WMWb RQMONNOMQMWNYOZQ[T[VZWY",
+ "F]KFK[ RKQMOPNTNVOXQYTYWXZW\\U^R`Nb",
+ "I[WLWMVPTRRSPSNRMPMONMPLRLTMVPWSWWVYUZS[M[",
+ "F]KHLGOFTFWGXHYJYLXOVQJ[N^Q_V_Y^",
+ "J[NNPMTMVNWPWRVTTVN[P]R^U^W]",
+ "G]I[[[ RIFJFLGXZZ[ R[FZFXGLZJ[",
+ "H[KMMNVZX[K[MZVNXM",
+ "G\\XEVFOFMGLHKJKWLYMZO[T[VZWYXWXPWNVMTLNLLMKN",
+ "H[WEVFTGPGNHMILKLWMYNZP[S[UZVYWWWQVOUNSMOMMNLO",
+ "G]RFRb RKQKMYMYQ",
+ "I[MMWM RRFRb",
+ "IZLMNNOPOXNZM[LZLXMVVRWPWNVMUNTPTXUZW[", /* U+3F0 KAPPA_SMALL_SCRIPT */
+ "H\\WbQbOaN`M^MQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "MWRMR_QaObNb RRFQGRHSGRFRH",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "HZLTST RVZT[P[NZMYLWLQMONNPMTMVN",
+ "J\\XTQT RNZP[T[VZWYXWXQWOVNTMPMNN",
+ "G\\LFL[ RLKTKVLWMXOXRWTVUTVLV",
+ "H[MFMb RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "F^K[KFRMYFY[",
+ "G]LbLMRSXMX[",
+ "G\\J`S` RMbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "I^MYNZQ[S[VZXXYVZRZOYKXIVGSFQFNGMH",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RROQPRQSPRORQ",
+ "I^MYNZQ[S[VZXXYVZRZOYKXIVGSFQFNGMH RROQPRQSPRORQ",
+ /* // Cyrillic (0400-04FF) */
+ "H[MPTP RW[M[MFWF RP>SA", /* U+400 E_CAP GRAVE */
+ "H[MPTP RW[M[MFWF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "JbLFXF RR[RF RRMXM[N]P^S^\\]_[aXbVb",
+ "HZM[MFXF RT>QA",
+ "F[JPTP RWYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG",
+ "MWR[RF",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "JZUFUUTXRZO[M[",
+ "AbC[D[FZGXILJILGOFRFR[X[[Z]X^V^S]Q[OXNRN",
+ "AbF[FF RRFR[X[[Z]X^V^S]Q[OXNFN",
+ "JbLFXF RR[RF RRMXM[N]P^S^[",
+ "G\\L[LF RX[OO RXFLR RT>QA",
+ "G]LFL[XFX[ RP>SA",
+ "G[KFRT RYFPXNZL[K[ RN>O@QASAU@V>",
+ "G]R[R` RLFL[X[XF",
+ "I[MUWU RK[RFY[", /* U+410 A_CAP */
+ "G\\VFLFL[R[UZWXXVXSWQUORNLN",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP",
+ "HZM[MFXF",
+ "F^[`[[I[I` RW[WFRFPGOHNJL[",
+ "H[MPTP RW[M[MFWF",
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR",
+ "I]PPTP RMGOFTFVGWHXJXLWNVOTPWQXRYTYWXYWZU[O[MZ",
+ "G]LFL[XFX[",
+ "G]LFL[XFX[ RN>O@QASAU@V>",
+ "G\\L[LF RX[OO RXFLR",
+ "F\\W[WFTFQGOINLLXKZI[H[",
+ "F^K[KFRUYFY[",
+ "G]L[LF RLPXP RX[XF",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "G]L[LFXFX[",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ", /* U+420 P_CAP */
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "JZLFXF RR[RF",
+ "G[KFRT RYFPXNZL[K[",
+ "G]R[RF RPITIWJYLZNZRYTWVTWPWMVKTJRJNKLMJPI",
+ "H\\KFY[ RYFK[",
+ "G]XFX[ RLFL[Z[Z`",
+ "H\\WFW[ RLFLNMPNQPRWR",
+ "CaRFR[ RHFH[\\[\\F",
+ "CaRFR[ RHFH[\\[\\F R\\[^[^`",
+ "F]HFMFM[S[VZXXYVYSXQVOSNMN",
+ "Da\\F\\[ RIFI[O[RZTXUVUSTQROONIN",
+ "H]MFM[S[VZXXYVYSXQVOSNMN",
+ "I^ZQPQ RMHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZMY",
+ "CaHFH[ ROPHP RTFXFZG\\I]M]T\\XZZX[T[RZPXOTOMPIRGTF",
+ "G\\RQK[ RW[WFOFMGLHKJKMLOMPOQWQ",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR", /* U+430 A_SMALL */
+ "H[WEVFTGPGNHMILKLWMYNZP[S[UZVYWWWQVOUNSMOMMNLO",
+ "I[STVUWWWXVZT[N[NMSMUNVPVQUSSTNT",
+ "JYO[OMWM",
+ "H[WOVNTMPMNNMOLQLWMYNZP[S[UZVYWWWJVHUGSFOFMG",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWWXVZT[P[NZ",
+ "H\\MMM[WMW[",
+ "H\\MMM[WMW[ RNEOGQHSHUGVE",
+ "IZNMN[ RPSV[ RVMNU",
+ "I[V[VMSMQNPPOXNZL[",
+ "G]L[LMRXXMX[",
+ "H[MTVT RMMM[ RVMV[",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "H[M[MMVMV[",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ", /* U+440 P_SMALL */
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "KYMMWM RRMR[",
+ "JZMMR[ RWMR[P`OaMb",
+ "G]MMLNKPKVLXNZP[T[VZXXYVYPXNVMUMSNRPRb",
+ "IZL[WM RLMW[",
+ "I\\WMW[ RNMN[Y[Y`",
+ "J\\VMV[ RNMNROTQUVU",
+ "F^RMR[ RKMK[Y[YM",
+ "F^RMR[ RKMK[Y[YM RY[[[[`",
+ "HZJMNMN[S[UZVXVUUSSRNR",
+ "F^YMY[ RKMK[P[RZSXSURSPRKR",
+ "IZNMN[S[UZVXVUUSSRNR",
+ "J\\XTQT RNNPMTMVNWOXQXWWYVZT[P[NZ",
+ "E_JTPT RJMJ[ RT[RZQYPWPQQORNTMWMYNZO[Q[WZYYZW[T[",
+ "I[RUM[ RV[VMPMNNMPMRNTPUVU",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RPESH", /* U+450 E_SMALL GRAVE */
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "M^OKXK RRFR[ RRSSRUQWQYRZTZ[Y^WaVb",
+ "JYO[OMWM RTEQH",
+ "HZLTST RVZT[P[NZMYLWLQMONNPMTMVN",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN",
+ "MWR[RM RRFQGRHSGRFRH",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RR[RM",
+ "MWRMR_QaObNb RRFQGRHSGRFRH",
+ "E^H[JZKXLPMNOMRMR[W[YZZXZUYSWRRR",
+ "D^IMI[ RRMR[W[YZZXZVYTWSIS",
+ "M^OKXK RRFR[ RRSSRUQWQYRZTZ[",
+ "IZNMN[ RPSV[ RVMNU RTEQH",
+ "H\\MMM[WMW[ RPESH",
+ "JZMMR[ RWMR[P`OaMb RNEOGQHSHUGVE",
+ "H]R[R` RMMM[W[WM",
+ "CaRWRR RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF", /* U+460 OMEGA_LARGE */
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "F]IIVI RMFM[S[VZXXYVYSXQVOSNMN",
+ "HZJMTM RNFN[S[UZVXVUUSSRNR",
+ "D`IFI[ RYPIP R\\Y[ZX[V[SZQXPVOROOPKQISGVFXF[G\\H",
+ "F^KMK[ RWTKT RZZX[T[RZQYPWPQQORNTMXMZN",
+ "F^LSXS RRSR[ RH[RF\\[",
+ "I[NUVU RRUR[ RK[RMY[",
+ "AbF[FF RFS\\S RVSV[ RL[VF`[",
+ "E_J[JM RVUV[ RZUJU RO[VM][",
+ "E_R[RPJFZFRP RI[IVJSLQOPUPXQZS[V[[",
+ "G]R[RTLMXMRT RK[KXLVMUOTUTWUXVYXY[",
+ "AcF[FF RFPSP RV[VPNF^FVP RM[MVNSPQSPYP\\Q^S_V_[",
+ "DaI[IM RITST RV[VTPM\\MVT RO[OXPVQUSTYT[U\\V]X][",
+ "H\\OPSP RNAQFSBTAUA RLGNFSFUGVHWJWLVNUOSPVQWRXTXWWYVZT[O[M\\L^L_MaObWb",
+ "J[RTTT ROHRMTIUHVH RNNPMTMVNWPWQVSTTVUWWWXVZT[Q[O\\N^N_OaQbVb",
+ "G]R[RF RHFJGKIKNLQMROSUSWRXQYNYIZG\\F", /* U+470 PSI_CAP */
+ "G]RMRb RKMKVLXNZP[T[VZXXYVYM",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "I[KFR[YF",
+ "JZMMR[WM",
+ "I[KFR[YF ROAL> RVAS>",
+ "JZMMR[WM ROHLE RVHSE",
+ "GmPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF R`Me[ RjMe[c`ba`b",
+ "HkP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ R^Mc[ RhMc[a``a^b",
+ "CaRXR^ RRCRI RMFJGHIGLGUHXJZM[W[ZZ\\X]U]L\\IZGWFMF",
+ "G]RYR] RRKRO ROMMNLOKQKWLYMZO[U[WZXYYWYQXOWNUMOM",
+ "CaRWRR RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF RLBM@O?R?U@X@",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RLIMGOFRFUGXG",
+ "CaRWRR RLFJGHIGLGUHXJZL[N[PZQYRWSYTZV[X[ZZ\\X]U]L\\IZGXF RM<W< RR<R?",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RMEWE RRERH",
+ "FZWGTFPFMGKIJKJNKPMRPSTST[", /* U+480 KOPPA_CYR_CAP */
+ "FZVNTMPMNNMOLQLSMUNVPWTWT[",
+ "H[N]UO ROQWU RT[LW",
+ "JZMHMFWGWE",
+ "JZMHUEVH",
+ "NVPESH",
+ "NVTEQH",
+ "KZLIMGOFRFUGXG",
+ ":j>R?PAOCPDR RC^D\\F[H\\I^ RCFDDFCHDIF ROcPaR`TaUc ROAP?R>T?UA R[^\\\\^[`\\a^ R[F\\D^C`DaF R`RaPcOePfR",
+ ":jDQ>Q RH[D_ RHGDC RR_Re RRCR= R\\[`_ R\\G`C R`QfQ",
+ "G]LFL[XFX[ RX[[[Ub RN>O@QASAU@V>",
+ "H\\MMM[WMW[ RW[Z[Tb RNEOGQHSHUGVE",
+ "H]MFM[S[VZXXYVYSXQVOSNMN RJIPI",
+ "IZKMQM RNFN[S[UZVXVUUSSRNR",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RTMXS",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RSWW]",
+ "HZM[MFXFXA", /* U+490 GAMMA_CAP_UPTURN */
+ "JYO[OMWMWH",
+ "HZM[MFXF RJQRQ",
+ "JYO[OMWM RLTTT",
+ "H]M[MFXF RMMSMVNXPYSY\\X_VaSbQb",
+ "J\\O[OMWM ROTTTVUWVXXX[W^UaTb",
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR R^[`[``",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU RZ[\\[\\`",
+ "I]PPTP RMGOFTFVGWHXJXLWNVOTPWQXRYTYWXYWZU[O[MZ RR\\T]U_TaRbOb",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWWXVZT[P[NZ RR\\T]U_TaRbOb",
+ "G\\L[LF RX[OO RXFLR RX[Z[Z`",
+ "IZNMN[ RPSV[ RVMNU RV[X[X`",
+ "G\\L[LF RX[OO RXFLR RPKPS",
+ "IZNMN[ RPSV[ RVMNU RRORW",
+ "G\\L[LF RX[OO RXFLR RIJOJ",
+ "IZN[NF RPSV[ RVMNU RKJQJ",
+ "E\\X[OO RXFLR RGFLFL[", /* U+4A0 K_CAP_BASHKIR */
+ "HZPSV[ RVMNU RJMNMN[",
+ "G]L[LF RLPXP RX[XF RX[Z[Z`",
+ "H[MTVT RMMM[ RVMV[ RV[X[X`",
+ "GeL[LF RLPXP RX[XFcF",
+ "H`MTVT RMMM[ RV[VM^M",
+ "GhL[LFXFX[ RXM^MaNcPdSd\\c_aa^b\\b",
+ "HcM[MMVMV[ RVT[T]U^V_X_[^^\\a[b",
+ "F^QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZMYJWIVITJSMSRTVUXWZY[[[",
+ "H\\QMPMNNMOLQLWMYNZP[T[VZWYXWXRWPUOSPRRRWSYTZV[Y[",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR\\T]U_TaRbOb",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RR\\T]U_TaRbOb",
+ "JZLFXF RR[RF RR[T[T`",
+ "KYMMWM RRMR[ RR[T[T`",
+ "I[RQR[ RKFRQYF",
+ "JZR[Rb RMMR[WM",
+ "I[RQR[ RKFRQYF RNUVU", /* U+4B0 Y_CAP STROKE_H */
+ "JZR[Rb RMMR[WM RN]V]",
+ "H\\KFY[ RYFK[ RX[Z[Z`",
+ "IZL[WM RLMW[ RV[X[X`",
+ "D]FFRF RXFX[ RLFL[Z[Z`",
+ "G\\RMIM RWMW[ RNMN[Y[Y`",
+ "H\\WFW[ RLFLNMPNQPRWR RW[Y[Y`",
+ "J\\VMV[ RNMNROTQUVU RV[X[X`",
+ "H\\WFW[ RLFLNMPNQPRWR RRNRV",
+ "J\\VMV[ RNMNROTQUVU RRQRY",
+ "G]L[LF RL[ RLPRPUQWSXVX[",
+ "H[M[MF RV[VPUNSMPMNNMO",
+ "@^WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGXIYKZOJQGQEPDOCMCK",
+ "E[VZT[P[NZMXMPNNPMTMVNWPWRMTKTISHQHO",
+ "@^WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGXIYKZOJQGQEPDOCMCK RR[P]O_PaRbTb",
+ "E[VZT[P[NZMXMPNNPMTMVNWPWRMTKTISHQHO RR[P]O_PaRbTb",
+ "MWR[RF", /* U+4C0 I_CAP */
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR RN>O@QASAU@V>",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU RNEOGQHSHUGVE",
+ "G\\L[LF RX[OO RXFLR RX[X_WaUbSb",
+ "IZNMN[ RPSV[ RVMNU RV[V_UaSbQb",
+ "F\\W[WFTFQGOINLLXKZI[H[ RW[Z[Tb",
+ "I[V[VMSMQNPPOXNZL[ RV[Y[Sb",
+ "G]L[LF RLPXP RX[XF RX[X_WaUbSb",
+ "H[MTVT RMMM[ RVMV[ RV[V_UaSbQb",
+ "G]L[LF RLPXP RX[XF RX[[[Ub",
+ "H[MTVT RMMM[ RVMV[ RV[Y[Sb",
+ "H\\WFW[ RLFLNMPNQPRWR RW[U[U`",
+ "J\\VMV[ RNMNROTQUVU RV[T[T`",
+ "F^K[KFRUYFY[ RY[\\[Vb",
+ "G]L[LMRXXMX[ RX[[[Ub",
+ "MWR[RF",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V>", /* U+4D0 A_CAP BREVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE",
+ "I[MUWU RK[RFY[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "F`JURU RRPYP RH[OF\\F RRFR[\\[",
+ "D`INKMOMQNRP R[ZY[U[SZRXRPSNUMYM[N\\P\\RRSKSITHVHXIZK[O[QZRX",
+ "H[MPTP RW[M[MFWF RN>O@QASAU@V>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNEOGQHSHUGVE",
+ "F^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZLXKVJRZP",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT",
+ "F^MHNGQFSFVGXIYKZOZRYVXXVZS[Q[NZLXKVJRZP RNBOCNDMCNBND RVBWCVDUCVBVD",
+ "I[NNPMTMVNWPWXVZT[P[NZMXMVWT RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "BbOOF[ RR[RF RRRFF R^[UO R^FRR RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "F^QTJ[ RRUJM RRMR[ RZ[ST RZMRU RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I]PPTP RMGOFTFVGWHXJXLWNVOTPWQXRYTYWXYWZU[O[MZ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWWXVZT[P[NZ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "H\\KFXFQNTNVOWPXRXWWYVZT[N[LZKY", /* U+4E0 DIGIT_3 */
+ "JZMMVMOVRVTWUXVZV^U`TaRbObMa",
+ "G]LFL[XFX[ RM@W@",
+ "H\\MMM[WMW[ RMGWG",
+ "G]LFL[XFX[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H\\MMM[WMW[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "G]KPYP RPFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H[LTWT RP[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I^ZPPP RMYNZQ[S[VZXXYVZRZOYKXIVGSFQFNGMH RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "J\\XTQT RNZP[T[VZWYXWXQWOVNTMPMNN RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G[KFRT RYFPXNZL[K[ RM@W@",
+ "JZMMR[ RWMR[P`OaMb RMGWG",
+ "G[KFRT RYFPXNZL[K[ RN?O@NAM@N?NA RV?W@VAU@V?VA", /* U+4F0 Y_LARGE DIAERESIS */
+ "JZMMR[ RWMR[P`OaMb RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "G[KFRT RYFPXNZL[K[ RQ>NA RX>UA",
+ "JZMMR[ RWMR[P`OaMb RQENH RXEUH",
+ "H\\WFW[ RLFLNMPNQPRWR RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "J\\VMV[ RNMNROTQUVU RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "HZM[MFXF RM[O[O`",
+ "JYO[OMWM RO[Q[Q`",
+ "Da\\F\\[ RIFI[O[RZTXUVUSTQROONIN RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "F^YMY[ RKMK[P[RZSXSURSPRKR RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "HZWFMFM[Q[Q_PaNbLb RJQRQ",
+ "JYWMOMO[S[S_RaPbNb RLTTT",
+ "H\\KFY[ RYFK[ RX[X_WaUbSb",
+ "IZL[WM RLMW[ RV[V_UaSbQb",
+ "H\\KFY[ RYFK[ RNPVP",
+ "IZL[WM RLMW[ RNTVT",
+ /* // Cyrillic Supplement (500-52F) */
+ "G\\WFW[Q[NZLXKVKSLQNOQNWN", /* U+500 !SOFT_CAP */
+ "J[VMV[Q[OZNXNUOSQRVR",
+ "B_RXSZU[X[ZZ[X[M RRFRXQZO[L[IZGXFVFSGQIOLNRN",
+ "E]RXSZU[V[XZYXYQ RRMRXQZO[M[KZJXJUKSMRRR",
+ "IePPTP RMGOFTFVGWHXJXLWNVOTPVQWRXTXXYZ[[^[`ZaXaM",
+ "KbRTTT RNNPMTMVNWPWQVSTTVUWWWXXZZ[[[]Z^X^Q",
+ "I\\PPTP RMGOFTFVGWHXJXLWNVOTPVQWRXTX[Z[Z`",
+ "K[RTTT RNNPMTMVNWPWQVSTTVUWWW[Y[Y`",
+ "FdH[I[KZLXNLOIQGTFWFWXXZZ[][_Z`X`M",
+ "IaL[NZOXPPQNSMVMVXWZY[Z[\\Z]X]Q",
+ "CaH[HF RHPTP RTFTXUZW[Z[\\Z]X]M",
+ "F^KTTT RKMK[ RTMTXUZW[X[ZZ[X[R",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR",
+ "HZUNSMPMNNMOLQLWMYNZP[T[VZVUSU",
+ "J_LFXF RRFRXSZU[X[ZZ[X[M",
+ "K]MMWM RRMRXSZU[V[XZYXYS",
+ "G[PPTP RWGUFPFNGMHLJLLMNNOPPMQLRKTKWLYMZO[U[WZ", /* U+510 EPSILON_LARGE */
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN",
+ "F\\W[WFTFQGOINLLXKZI[H[ RW[W_VaTbRb",
+ "I[V[VMSMQNPPOXNZL[ RV[V_UaSbQb",
+ "BaP[^F RD[E[GZHXJLKIMGPF^[",
+ "E^[MO[ RH[JZKXLPMNOM[[",
+ "E_\\FUO\\[ RJ[JFRFTGUHVJVMUOTPRQJQ",
+ "F^KMKb R[MUT[[ RKNMMQMSNTOUQUWTYSZQ[M[KZ",
+ "DaOQH[ RTFT[^[ R[QLQJPIOHMHJIHJGLF^F",
+ "D`H[MU RRPRMKMINHPHRITKURU R[ZY[U[SZRXRPSNUMYM[N\\P\\RRT",
+ "G]Z]X\\VZSWQVOV RP[NZLXKTKMLINGPFTFVGXIYMYTXXVZT[P[",
+ "I\\WMWb RWZU[Q[OZNYMWMQNOONQMUMWN",
+ "F^IFN[RLV[[F",
+ "G]JMN[RQV[ZM",
+ "G\\L[LF RX[OO RXFLR RXKRG",
+ "IZNMN[ RPSV[ RVMNU RWQQM",
+ "FgW[WFTFQGOINLLXKZI[H[ RWM]M`NbPcSc\\b_`a]b[b", /* U+520 LYUDI_CAP MIDDLE_HOOK_CAP */
+ "IcV[VMSMQNPPOXNZL[ RVT[T]U^V_X_[^^\\a[b",
+ "GhL[LF RLPXP RX[XF RXM^MaNcPdSd\\c_aa^b\\b",
+ "HcMTVT RMMM[ RVMV[ RVT[T]U^V_X_[^^\\a[b",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Armenian (530-58F) */
+ "F^K[KFYFY[K[", /* U+530 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+540 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+550 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+560 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+570 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+580 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Hebrew (590-5FF) */
+ "F^K[KFYFY[K[", /* U+590 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+5F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Arabic (600-6FF) */
+ "F^K[KFYFY[K[", /* U+600 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+610 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+620 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+630 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+640 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+650 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+660 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+670 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+680 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+690 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+6F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Syriac (700-74F) */
+ "F^K[KFYFY[K[", /* U+700 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+710 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+720 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+730 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+740 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Arabic Supplement (750-77F) */
+ "F^K[KFYFY[K[", /* U+750 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+760 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+770 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Taana (780-7BF) */
+ "F^K[KFYFY[K[", /* U+780 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+790 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // N'Ko (7C0-7FF) */
+ "F^K[KFYFY[K[", /* U+7C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+7F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (800-8FF) */
+ "F^K[KFYFY[K[", /* U+800 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+810 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+820 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+830 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+840 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+850 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+860 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+870 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+880 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+890 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+8F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Devanagari (900-97F) */
+ "F^K[KFYFY[K[", /* U+900 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+910 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+920 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+930 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+940 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+950 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+960 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+970 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Bengali (980-9FF) */
+ "F^K[KFYFY[K[", /* U+980 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+990 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+9F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Gurmukhi (A00-A7F) */
+ "F^K[KFYFY[K[", /* U+A00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Gujarati (A80-AFF) */
+ "F^K[KFYFY[K[", /* U+A80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+A90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+AF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Oriya (B00-B7F) */
+ "F^K[KFYFY[K[", /* U+B00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tamil (B80-BFF) */
+ "F^K[KFYFY[K[", /* U+B80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+B90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+BF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Telugu (C00-C7F) */
+ "F^K[KFYFY[K[", /* U+C00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Kannada (C80-CFF) */
+ "F^K[KFYFY[K[", /* U+C80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+C90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+CF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Malayalam (D00-D7F) */
+ "F^K[KFYFY[K[", /* U+D00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Simhala (D80-DFF) */
+ "F^K[KFYFY[K[", /* U+D80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+D90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+DF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Thai (E00-E7F) */
+ "F^K[KFYFY[K[", /* U+E00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Lao (E80-EFF) */
+ "F^K[KFYFY[K[", /* U+E80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+E90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+ED0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+EF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tibetan (F00-FFF) */
+ "F^K[KFYFY[K[", /* U+F00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+F90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+FF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Myanmar (1000-109F) */
+ "F^K[KFYFY[K[", /* U+1000 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1010 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1020 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1030 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1040 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1050 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1060 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1070 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1080 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1090 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Geogian (10A0-10FF) */
+ "F^K[KFYFY[K[", /* U+10A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+10F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Hangul Jamo (1100-11FF) */
+ "F^K[KFYFY[K[", /* U+1100 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1110 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1120 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1130 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1140 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1150 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1160 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1170 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1180 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1190 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+11F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ethiopic (1200-137F) */
+ "F^K[KFYFY[K[", /* U+1200 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1210 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1220 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1230 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1240 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1250 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1260 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1270 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1280 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1290 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+12F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1300 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1310 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1320 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1330 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1340 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1350 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1360 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1370 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ethiopic Supplement (1380-139F) */
+ "F^K[KFYFY[K[", /* U+1380 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1390 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Cherokee (13A0-13FF) */
+ "F^K[KFYFY[K[", /* U+13A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+13F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Unified Canadian Aboriginal Syllabics (1400-167F) */
+ "F^K[KFYFY[K[", /* U+1400 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1410 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1420 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1430 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1440 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1450 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1460 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1470 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1480 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1490 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+14F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1500 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1510 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1520 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1530 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1540 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1550 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1560 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1570 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1580 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1590 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+15F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1600 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1610 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1620 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1630 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1640 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1650 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1660 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1670 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ogham (1680-169F) */
+ "F^K[KFYFY[K[", /* U+1680 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1690 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Runic (16A0-16FF) */
+ "F^K[KFYFY[K[", /* U+16A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+16F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tagalog (1700-171F) */
+ "F^K[KFYFY[K[", /* U+1700 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1710 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Hanunoo (1720-173F) */
+ "F^K[KFYFY[K[", /* U+1720 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1730 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Buhid (1740-175F) */
+ "F^K[KFYFY[K[", /* U+1740 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1750 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tagbanwa (1760-177F) */
+ "F^K[KFYFY[K[", /* U+1760 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1770 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Khmer (1780-17FF) */
+ "F^K[KFYFY[K[", /* U+1780 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1790 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+17F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Mongolian (1800-18AF) */
+ "F^K[KFYFY[K[", /* U+1800 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1810 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1820 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1830 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1840 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1850 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1860 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1870 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1880 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1890 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (18B0-18FF) */
+ "F^K[KFYFY[K[", /* U+18B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+18F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Limbu (1900-194F) */
+ "F^K[KFYFY[K[", /* U+1900 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1910 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1920 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1930 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1940 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Tai Le (1950-197F) */
+ "F^K[KFYFY[K[", /* U+1950 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1960 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1970 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // New Tai Lue (1980-19DF) */
+ "F^K[KFYFY[K[", /* U+1980 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1990 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Khmer Symbols (19E0-19FF) */
+ "F^K[KFYFY[K[", /* U+19E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+19F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Buginese (1A00-1A1F) */
+ "F^K[KFYFY[K[", /* U+1A00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (1A20-1AFF) */
+ "F^K[KFYFY[K[", /* U+1A20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1A90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1AF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Balinese (1B00-1B7F) */
+ "F^K[KFYFY[K[", /* U+1B00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Sudanese (1B80-1BBF) */
+ "F^K[KFYFY[K[", /* U+1B80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1B90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (1BC0-1BFF) */
+ "F^K[KFYFY[K[", /* U+1BC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1BF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Lepcha (1C00-1C4F) */
+ "F^K[KFYFY[K[", /* U+1C00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Ol Chiki (1C50-1C7F) */
+ "F^K[KFYFY[K[", /* U+1C50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // - (1C80-1CFF) */
+ "F^K[KFYFY[K[", /* U+1C80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1C90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1CF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Phonetic Extensions (1D00-1D7F) */
+ "JZNXVX RM[RMW[", /* U+1D00 A_SMALLCAP */
+ "H\\LXRX RRTWT RRMR[Y[ RYMPMK[",
+ "D`[ZY[U[SZRX RINKMOMQNRPRXQZO[K[IZHXHVRUYU[T\\R\\P[NYMUMSNRP",
+ "I[STVUWWWXVZT[N[NMSMUNVPVQUSSTNT RKWQW",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN",
+ "J[SMOMO[S[UZVYWVWRVOUNSM",
+ "J[SMOMO[S[UZVYWVWRVOUNSM RLTRT",
+ "JYOTTT RVMOMO[V[",
+ "J[TTVSWQWPVNTMPMNN RRTTTVUWWWXVZT[P[NZ",
+ "MWRMR[ RRbSaR`QaRbR`",
+ "LYTMTWSYRZP[O[",
+ "IZNMN[ RPSV[ RVMNU",
+ "JYOMO[V[ RLVRR",
+ "G]L[LMRXXMX[",
+ "I\\W[WMN[NM",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[",
+ "J\\NNPMTMVNWOXQXWWYVZT[P[NZ", /* U+1D10 +C_SMALL */
+ "G]YSYVXXWYUZOZMYLXKVKSLQMPOOUOWPXQYS",
+ "G]XYYWYSXQWPUOOOMPLQKSKWLY",
+ "G]YNK[ RYSYVXXWYUZOZMYLXKVKSLQMPOOUOWPXQYS",
+ "DaINKMOMQNRPRXQZO[K[IZHXHVRT RRWSYTZV[Y[[Z\\Y]W]Q\\O[NYMVMTNSORQ",
+ "G]OMNNMPNRPS RTSVRWPVNUM RPSTSVTWVWXVZT[P[NZMXMVNTPS",
+ "I\\XTXQWOVNTMQMONNOMQMT",
+ "H[LTLWMYNZP[S[UZVYWWWT",
+ "I[N[NMTMVNWPWRVTTUNU",
+ "I[RUM[ RV[VMPMNNMPMRNTPUVU",
+ "I[RSMM RVMV[P[NZMXMVNTPSVS",
+ "KYMMWM RRMR[",
+ "H[MMMXNZP[S[UZVXVM",
+ "G]KPYP RKYVYXXYVYSXQWP",
+ "@]KPYP RKYVYXXYVYSXQWP REWFXEYDXEWEY REOFPEQDPEOEQ",
+ "G]KKYK RWKXLYNYQXSVTKT RVTXUYWYZX\\V]K]",
+ "JZMMR[WM", /* U+1D20 V_SMALL */
+ "G]JMN[RQV[ZM",
+ "IZLMWML[W[",
+ "JZNMVMRRSRUSVUVXUZS[P[NZ",
+ "H\\XNUMPMNNMOLQLSMUNVPWTXVYWZX\\X^W`VaTbObLa RRTR\\",
+ "JZW[PROPPNRMTNUPTRM[",
+ "JYO[OMWM",
+ "JZM[RMW[",
+ "H[M[MMVMV[",
+ "I[N[NMTMVNWPWRVTTUNU",
+ "I[RMR[ RLMMNMRNTPUTUVTWRWNXM",
+ "I[V[VMSMQNPPOXNZL[",
+ "JZNKVK RMNR@WN",
+ "H\\LKRK RRGWG RR@RNYN RY@P@KN",
+ "I[SGVHWJWKVMTNNNN@S@UAVCVDUFSGNG",
+ "I[SGVHWJWKVMTNNNN@S@UAVCVDUFSGNG RKGQG",
+ "J[S@O@ONSNUMVLWIWEVBUAS@", /* U+1D30 ^D_SMALLCAP */
+ "JYOGTG RV@O@ONVN",
+ "KZUGPG RN@U@UNNN",
+ "HZUAS@P@NAMBLDLJMLNMPNTNVMVHSH",
+ "H[MGVG RM@MN RV@VN",
+ "MWRNR@ RUNON RU@O@",
+ "LYT@TJSLRMPNON",
+ "IZN@NN RPFVN RV@NH",
+ "JYO@ONVN",
+ "G]LNL@RKX@XN",
+ "H[MNM@VNV@",
+ "I\\WNW@NNN@",
+ "H[PNNMMLLJLDMBNAP@S@UAVBWDWJVLUMSNPN",
+ "G]O@NAMCNEPF RTFVEWCVAU@ RPFTFVGWIWKVMTNPNNMMKMINGPF",
+ "I[NNN@T@VAWCWEVGTHNH",
+ "I[RHWN RNNN@T@VAWCWEVGTHNH",
+ "KYM@W@ RR@RN", /* U+1D40 ^T_SMALLCAP */
+ "H[M@MKNMPNSNUMVKV@",
+ "G]J@NNRDVNZ@",
+ "KZOEQDSDUEVGVN RVMTNQNOMNKOIQHVH",
+ "JYNDNKOMQNSNUM RNEPDSDUEVGUISJNJ",
+ "H]WDUKTMRNPNNMMKMGNEPDRDTEVMWN",
+ "H\\XMVNUNSMRK RLDODQERHRKQMONNNLMKKKJVJXIYGXEVDUDSERH",
+ "KYO@ON ROMQNSNUMVKVGUESDQDOE",
+ "KYU@UN RUESDQDOENGNKOMQNSNUM",
+ "LYVMTNRNPMOKOGPERDSDUEVGVHOI",
+ "LYOEQDSDUEVGVKUMSNRNPMOKOJVI",
+ "LXPIRI RUETDPDOEOHPIOJOMPNTNUM",
+ "LXRITI ROEPDTDUEUHTIUJUMTNPNOM",
+ "KYUDUPTRRSOS RUESDQDOENGNKOMQNSNUM",
+ "NVRDRN RRUSTRSQTRURS",
+ "IZO@ON RUNQH RUDOJ",
+ "G]KNKD RKEMDODQERGRN RRGSEUDVDXEYGYN", /* U+1D50 ^M_TINY */
+ "KZODON ROEQDSDUEVGVPURSSRS",
+ "KYQNOMNKNGOEQDSDUEVGVKUMSNQN",
+ "LYOEQDSDUEVGVKUMSNQNOM",
+ "KYNINGOEQDSDUEVGVI",
+ "KYNINKOMQNSNUMVKVI",
+ "KYOSOD ROEQDSDUEVGVKUMSNQNOM",
+ "NXPDVD RR@RKSMUNVN",
+ "KYUDUN RNDNKOMQNSNUM",
+ "I[MFWF RMMTMVLWJWHVF",
+ "G]YDYN RYMWNUNSMRKRD RRKQMONNNLMKKKD",
+ "LXNDRNVD",
+ "LXVNPGPEQDSDTETGNN",
+ "KYSFRF RNSOQOCPAR@S@UAVCUESFUGVIVKUMSNQNOM",
+ "KXRMRS RMDOERMVD",
+ "KYSDQDOENGNKOMQNSNUMVKVGUESDPCOBOAP@U@",
+ "I[MDLFLJMLNMPNTNVMWLXJXGWEUDSERGRS", /* U+1D60 ^PHI_TINY */
+ "LXVDNS RNDPETRVS",
+ "NVRWRa RRPQQRRSQRPRR",
+ "LWPWPa RPZQXSWUW",
+ "KYUWUa RNWN^O`QaSaU`",
+ "LXNWRaVW",
+ "KYSYRY RNfOdOVPTRSSSUTVVUXSYUZV\\V^U`SaQaO`",
+ "KXR`Rf RMWOXR`VW",
+ "KYOfOZPXRWSWUXVZV^U`SaQaO`",
+ "I[MWLYL]M_N`PaTaV`W_X]XZWXUWSXRZRf",
+ "LXVWNf RNWPXTeVf",
+ "D`IMIXJZL[O[QZRX R[ZY[U[SZRXRPSNUMYM[N\\P\\RRT",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RIHJGLFPHRGSF",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RQHRGTFXHZG[F",
+ "MYOMWM RR[RISGUFWF RMTNSPRTTVSWR",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RMTNSPRTTVSWR",
+ "I\\NMN[ RNOONQMTMVNWPW[ RMTNSPRTTVSWR", /* U+1D70 N_SMALL TILDE */
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RI`J_L^P`R_S^",
+ "KXP[PM RPQQORNTMVM RLTMSORSTUSVR",
+ "KXM[S[ RVMTMRNQOPRP[ RLTMSORSTUSVR",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNTOSQRUTWSXR",
+ "MYOMWM RRFRXSZU[W[ RMSNRPQTSVRWQ",
+ "IZLMWML[W[ RMTNSPRTTVSWR",
+ "H[M[MJNHOGQFTFVG RMNOMSMUNVOWQWWVYUZS[O[MZ",
+ "H[MGVG RM@MN RV@VN",
+ "JZMMVMOURUTVUWVYV^U`TaRbPbNaM_M^N\\P[V[",
+ "MlOMWM RRFRXSZU[W[ R^[^F Rg[gPfNdMaM_N^O RiC]`",
+ "MWR[RM RU[O[ RUMOM ROTUT",
+ "MXRMRXSZU[ ROTUT",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RHT\\T",
+ "H[MMMXNZP[S[UZVXVM RHT\\T",
+ "I\\XMUMUPWRXTXWWYVZT[Q[OZNYMWMTNRPPPMMM RHU\\U",
+ /* // Phonetic Extensions Supplement (1D80-1DBF) */
+ "F^K[KFYFY[K[", /* U+1D80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1D90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Combining Diacritical Marks Supplement (1DC0-1DFF) */
+ "F^K[KFYFY[K[", /* U+1DC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+1DF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Latin Extended Additional (1E00-1EFF) */
+ "I[MUWU RK[RFY[ RR`TaUcTeRfPeOcPaR`", /* U+1E00 A_CAP +RING */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RR`TaUcTeRfPeOcPaR`",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RR?Q@RAS@R?RA",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RN?M@NAO@N?NA",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RRbSaR`QaRbR`",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RRbSaR`QaRbR`",
+ "G\\SPVQWRXTXWWYVZT[L[LFSFUGVHWJWLVNUOSPLP RWaMa",
+ "H[M[MF RMNOMSMUNVOWQWWVYUZS[O[MZ RWaMa",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR\\T]U_TaRbOb RT>QA",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RR\\T]U_TaRbOb RTEQH",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RR?Q@RAS@R?RA",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RV?U@VAW@V?VA",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RRbSaR`QaRbR`",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RSbTaS`RaSbS`",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RWaMa",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RXaNa",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RQ\\S]T_SaQbNb", /* U+1E10 D_CAP CEDILLA */
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RS\\U]V_UaSbPb",
+ "G\\L[LFQFTGVIWKXOXRWVVXTZQ[L[ RVcR`Nc",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RWcS`Oc",
+ "H[MPTP RW[M[MFWF RM@W@ RP9S<",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMGWG RP>SA",
+ "H[MPTP RW[M[MFWF RM@W@ RT9Q<",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMGWG RT>QA",
+ "H[MPTP RW[M[MFWF RVcR`Nc",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RVcR`Nc",
+ "H[MPTP RW[M[MFWF RW`VaTbP`NaMb",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RW`VaTbP`NaMb",
+ "H[MPTP RW[M[MFWF RR\\T]U_TaRbOb RN>O@QASAU@V>",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RR\\T]U_TaRbOb RNEOGQHSHUGVE",
+ "HZTPMP RM[MFWF RR?Q@RAS@R?RA",
+ "MYOMWM RR[RISGUFWF RT?S@TAU@T?TA",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RM@W@", /* U+1E20 G_CAP MACRON */
+ "I\\WMW^V`UaSbPbNa RWZU[Q[OZNYMWMQNOONQMUMWN RMGWG",
+ "G]L[LF RLPXP RX[XF RR?Q@RAS@R?RA",
+ "H[M[MF RV[VPUNSMPMNNMO RM?L@MAN@M?MA",
+ "G]L[LF RLPXP RX[XF RRbSaR`QaRbR`",
+ "H[M[MF RV[VPUNSMPMNNMO RRbSaR`QaRbR`",
+ "G]L[LF RLPXP RX[XF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "H[M[MF RV[VPUNSMPMNNMO RI?J@IAH@I?IA RQ?R@QAP@Q?QA",
+ "G]L[LF RLPXP RX[XF RL\\N]O_NaLbIb",
+ "H[M[MF RV[VPUNSMPMNNMO RM\\O]P_OaMbJb",
+ "G]L[LF RLPXP RX[XF RV`UbScQcObN`",
+ "H[M[MF RV[VPUNSMPMNNMO RV`UbScQcObN`",
+ "MWR[RF RW`VaTbP`NaMb",
+ "MWR[RM RRFQGRHSGRFRH RW`VaTbP`NaMb",
+ "MWR[RF RN?O@NAM@N?NA RV?W@VAU@V?VA RT9Q<",
+ "MWR[RM RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "G\\L[LF RX[OO RXFLR RT>QA", /* U+1E30 K_CAP ACUTE */
+ "IZN[NF RPSV[ RVMNU RPAMD",
+ "G\\L[LF RX[OO RXFLR RRbSaR`QaRbR`",
+ "IZN[NF RPSV[ RVMNU RRbSaR`QaRbR`",
+ "G\\L[LF RX[OO RXFLR RWaMa",
+ "IZN[NF RPSV[ RVMNU RWaMa",
+ "HYW[M[MF RRbSaR`QaRbR`",
+ "MXU[SZRXRF RSbTaS`RaSbS`",
+ "HYW[M[MF RH@R@ RRbSaR`QaRbR`",
+ "MXU[SZRXRF RM@W@ RSbTaS`RaSbS`",
+ "HYW[M[MF RWaMa",
+ "MXU[SZRXRF RXaNa",
+ "HYW[M[MF RVcR`Nc",
+ "MXU[SZRXRF RWcS`Oc",
+ "F^K[KFRUYFY[ RT>QA",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RTEQH",
+ "F^K[KFRUYFY[ RR?Q@RAS@R?RA", /* U+1E40 M_CAP DOT */
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RRFQGRHSGRFRH",
+ "F^K[KFRUYFY[ RRbSaR`QaRbR`",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RRbSaR`QaRbR`",
+ "G]L[LFX[XF RR?Q@RAS@R?RA",
+ "I\\NMN[ RNOONQMTMVNWPW[ RRFQGRHSGRFRH",
+ "G]L[LFX[XF RRbSaR`QaRbR`",
+ "I\\NMN[ RNOONQMTMVNWPW[ RRbSaR`QaRbR`",
+ "G]L[LFX[XF RWaMa",
+ "I\\NMN[ RNOONQMTMVNWPW[ RWaMa",
+ "G]L[LFX[XF RVcR`Nc",
+ "I\\NMN[ RNOONQMTMVNWPW[ RVcR`Nc",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W? RT9Q<",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF RT>QA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RMAN@P?TAV@W? RN:O;N<M;N:N< RV:W;V<U;V:V<",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMHNGPFTHVGWF RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@ RP9S<", /* U+1E50 O_CAP MACRON */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG RP>SA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RM@W@ RT9Q<",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RMGWG RT>QA",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RT>QA",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RTEQH",
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RR?Q@RAS@R?RA",
+ "H[MMMb RMNOMSMUNVOWQWWVYUZS[O[MZ RRFQGRHSGRFRH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RR?Q@RAS@R?RA",
+ "KXP[PM RPQQORNTMVM RSFRGSHTGSFSH",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RRbSaR`QaRbR`",
+ "KXP[PM RPQQORNTMVM RPbQaP`OaPbP`",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RM@W@ RRbSaR`QaRbR`",
+ "KXP[PM RPQQORNTMVM RNGXG RPbQaP`OaPbP`",
+ "G\\X[QQ RL[LFTFVGWHXJXMWOVPTQLQ RWaMa",
+ "KXP[PM RPQQORNTMVM RUaKa",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RR?Q@RAS@R?RA", /* U+1E60 S_CAP DOT */
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RRFQGRHSGRFRH",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RRbSaR`QaRbR`",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RRbSaR`QaRbR`",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RU>RA RM>N?M@L?M>M@",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RUERH RMENFMGLFMEMG",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RN>RAV> RR:Q;R<S;R:R<",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RNERHVE RR?Q@RAS@R?RA",
+ "H\\LZO[T[VZWYXWXUWSVRTQPPNOMNLLLJMHNGPFUFXG RR?Q@RAS@R?RA RRbSaR`QaRbR`",
+ "J[NZP[T[VZWXWWVUTTQTOSNQNPONQMTMVN RRFQGRHSGRFRH RRbSaR`QaRbR`",
+ "JZLFXF RR[RF RR?Q@RAS@R?RA",
+ "MYOMWM RRFRXSZU[W[ RR?Q@RAS@R?RA",
+ "JZLFXF RR[RF RRbSaR`QaRbR`",
+ "MYOMWM RRFRXSZU[W[ RTbUaT`SaTbT`",
+ "JZLFXF RR[RF RWaMa",
+ "MYOMWM RRFRXSZU[W[ RYaOa",
+ "JZLFXF RR[RF RVcR`Nc", /* U+1E70 T_CAP +CARON */
+ "MYOMWM RRFRXSZU[W[ RXcT`Pc",
+ "G]LFLWMYNZP[T[VZWYXWXF RVbUaV`WaVbV` RNbMaN`OaNbN`",
+ "H[VMV[ RMMMXNZP[S[UZVY RVbUaV`WaVbV` RNbMaN`OaNbN`",
+ "G]LFLWMYNZP[T[VZWYXWXF RW`VaTbP`NaMb",
+ "H[VMV[ RMMMXNZP[S[UZVY RW`VaTbP`NaMb",
+ "G]LFLWMYNZP[T[VZWYXWXF RVcR`Nc",
+ "H[VMV[ RMMMXNZP[S[UZVY RVcR`Nc",
+ "G]LFLWMYNZP[T[VZWYXWXF RMAN@P?TAV@W? RT9Q<",
+ "H[VMV[ RMMMXNZP[S[UZVY RMHNGPFTHVGWF RT>QA",
+ "G]LFLWMYNZP[T[VZWYXWXF RM@W@ RN:O;N<M;N:N< RV:W;V<U;V:V<",
+ "H[VMV[ RMMMXNZP[S[UZVY RMGWG RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "I[KFR[YF RMAN@P?TAV@W?",
+ "JZMMR[WM RMHNGPFTHVGWF",
+ "I[KFR[YF RRbSaR`QaRbR`",
+ "JZMMR[WM RRbSaR`QaRbR`",
+ "F^IFN[RLV[[F RP>SA", /* U+1E80 W_CAP GRAVE */
+ "G]JMN[RQV[ZM RPESH",
+ "F^IFN[RLV[[F RT>QA",
+ "G]JMN[RQV[ZM RTEQH",
+ "F^IFN[RLV[[F RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]JMN[RQV[ZM RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "F^IFN[RLV[[F RR?Q@RAS@R?RA",
+ "G]JMN[RQV[ZM RRFQGRHSGRFRH",
+ "F^IFN[RLV[[F RRbSaR`QaRbR`",
+ "G]JMN[RQV[ZM RRbSaR`QaRbR`",
+ "H\\KFY[ RYFK[ RR?Q@RAS@R?RA",
+ "IZL[WM RLMW[ RRFQGRHSGRFRH",
+ "H\\KFY[ RYFK[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "IZL[WM RLMW[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I[RQR[ RKFRQYF RR?Q@RAS@R?RA",
+ "JZMMR[ RWMR[P`OaMb RRFQGRHSGRFRH",
+ "H\\KFYFK[Y[ RNAR>VA", /* U+1E90 Z_CAP CIRCUMFLEX */
+ "IZLMWML[W[ RNHREVH",
+ "H\\KFYFK[Y[ RRbSaR`QaRbR`",
+ "IZLMWML[W[ RRbSaR`QaRbR`",
+ "H\\KFYFK[Y[ RWaMa",
+ "IZLMWML[W[ RWaMa",
+ "H[M[MF RV[VPUNSMPMNNMO RWaMa",
+ "MYOMWM RRFRXSZU[W[ RN?O@NAM@N?NA RV?W@VAU@V?VA",
+ "G]JMN[RQV[ZM RRHPGOEPCRBTCUETGRH",
+ "JZMMR[ RWMR[P`OaMb RRHPGOEPCRBTCUETGRH",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RWJYIZGYEWD",
+ "MYR[RISGUFWF RT?S@TAU@T?TA",
+ "MYR[RISGUFWF ROSUO",
+ "MYR[RISGUFWF ROLUL",
+ "E^J[JLKIMGPFZFSNVNXOYPZRZWYYXZV[R[PZOY",
+ "H[SMPMNNMOLQLWMYNZP[S[UZVYWWWQVOUNSMPLNKMINGPFTFVG",
+ "I[MUWU RK[RFY[ RRbSaR`QaRbR`", /* U+1EA0 A_CAP +DOT */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRbSaR`QaRbR`",
+ "I[MUWU RK[RFY[ RRAT?U=T;R:P:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RRHTFUDTBRAPA",
+ "I[MUWU RK[RFY[ RU>X; RNAR>VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RUEXB RNHREVH",
+ "I[MUWU RK[RFY[ RO>L; RNAR>VA",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR ROELB RNHREVH",
+ "I[MUWU RK[RFY[ RNAR>VA RXAZ?[=Z;X:V:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH RXHZF[DZBXAVA",
+ "I[MUWU RK[RFY[ RNAR>VA RM<N;P:T<V;W:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH RMAN@P?TAV@W?",
+ "I[MUWU RK[RFY[ RNAR>VA RRbSaR`QaRbR`",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNHREVH RRbSaR`QaRbR`",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RT9Q<",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RT>QA",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RP9S<", /* U+1EB0 A_CAP BREVE */
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RP>SA",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RP>R<S:R8P7N7",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RPERCSAR?P>N>",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RM<N;P:T<V;W:",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RMAN@P?TAV@W?",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V> RRbSaR`QaRbR`",
+ "I\\W[WPVNTMPMNN RWZU[P[NZMXMVNTPSUSWR RNEOGQHSHUGVE RRbSaR`QaRbR`",
+ "H[MPTP RW[M[MFWF RRbSaR`QaRbR`",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RRbSaR`QaRbR`",
+ "H[MPTP RW[M[MFWF RRAT?U=T;R:P:",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RRHTFUDTBRAPA",
+ "H[MPTP RW[M[MFWF RMAN@P?TAV@W?",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RMHNGPFTHVGWF",
+ "H[MPTP RW[M[MFWF RU>X; RNAR>VA",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RUEXB RNHREVH",
+ "H[MPTP RW[M[MFWF RO>L; RNAR>VA", /* U+1EC0 E_CAP CIRCUMFLEX_GRAVE */
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT ROELB RNHREVH",
+ "H[MPTP RW[M[MFWF RNAR>VA RXAZ?[=Z;X:V:",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH RXHZF[DZBXAVA",
+ "H[MPTP RW[M[MFWF RNAR>VA RM<N;P:T<V;W:",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH RMAN@P?TAV@W?",
+ "H[MPTP RW[M[MFWF RNAR>VA RRbSaR`QaRbR`",
+ "I[VZT[P[NZMXMPNNPMTMVNWPWRMT RNHREVH RRbSaR`QaRbR`",
+ "MWR[RF RRAT?U=T;R:P:",
+ "MWR[RM RRHTFUDTBRAPA",
+ "MWR[RF RRbSaR`QaRbR`",
+ "MWR[RM RRFQGRHSGRFRH RRbSaR`QaRbR`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RRbSaR`QaRbR`",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRbSaR`QaRbR`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RRAT?U=T;R:P:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RRHTFUDTBRAPA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RU>X; RNAR>VA", /* U+1ED0 O_CAP CIRCUMFLEX_ACUTE */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUEXB RNHREVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RO>L; RNAR>VA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ ROELB RNHREVH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA RXAZ?[=Z;X:V:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH RXHZF[DZBXAVA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA RM<N;P:T<V;W:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH RMAN@P?TAV@W?",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RNAR>VA RRbSaR`QaRbR`",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RNHREVH RRbSaR`QaRbR`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RT>QA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RTEQH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RP>SA",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RPESH",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RRAT?U=T;R:P:",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RRHTFUDTBRAPA",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RWAVBTCPANBMC", /* U+1EE0 O_CAP HORN */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RWHVITJPHNIMJ",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RVGXFYDXBWA RRbSaR`QaRbR`",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RUNWMXKWIVH RRbSaR`QaRbR`",
+ "G]LFLWMYNZP[T[VZWYXWXF RRbSaR`QaRbR`",
+ "H[VMV[ RMMMXNZP[S[UZVY RRbSaR`QaRbR`",
+ "G]LFLWMYNZP[T[VZWYXWXF RRAT?U=T;R:P:",
+ "H[VMV[ RMMMXNZP[S[UZVY RRHTFUDTBRAPA",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RT>QA",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RTEQH",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RP>SA",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RPESH",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RRAT?U=T;R:P:",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RRHTFUDTBRAPA",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RWAVBTCPANBMC",
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RWHVITJPHNIMJ",
+ "G]LFLWMYNZP[T[VZWYXWXF RXFZE[CZAY@ RRbSaR`QaRbR`", /* U+1EF0 U_CAP HORN */
+ "H[VMV[ RMMMXNZP[S[UZVY RVMXLYJXHWG RRbSaR`QaRbR`",
+ "I[RQR[ RKFRQYF RP>SA",
+ "JZMMR[ RWMR[P`OaMb RPESH",
+ "I[RQR[ RKFRQYF RRbSaR`QaRbR`",
+ "JZMMR[ RWMR[P`OaMb RVbWaV`UaVbV`",
+ "I[RQR[ RKFRQYF RRAT?U=T;R:P:",
+ "JZMMR[ RWMR[P`OaMb RRHTFUDTBRAPA",
+ "I[RQR[ RKFRQYF RMAN@P?TAV@W?",
+ "JZMMR[ RWMR[P`OaMb RMHNGPFTHVGWF",
+ "E\\PFP[ RJFJ[Z[",
+ "J[MMWM ROFOXPZR[ RX[VZUXUF",
+ "G]QFOGMJLMLWMYNZP[T[VZXXYVYTXPVMUL",
+ "H[QMONNOMQMWNYOZQ[S[UZVYWWWUVSURSQ",
+ "G[KFRT RYFRTPXOZM[KZJXKVMUOVPX",
+ "JZMMR[ RWMR[Q_PaNbLaK_L]N\\P]Q_",
+ /* // Greek Extended (1F00-1FFF) */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE", /* U+1F00 ALPHA_SMALL PSILI */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMHNHOGOE",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMEMGNHOH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMHNHOGOE",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMEMGNHOH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE RMAN@P?TAV@W?",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH RMAN@P?TAV@W?",
+ "G[MUWU RK[RFY[ RJHKHLGLE",
+ "G[MUWU RK[RFY[ RJEJGKHLH",
+ "?[MUWU RK[RFY[ RIELH RBHCHDGDE",
+ "?[MUWU RK[RFY[ RIELH RBEBGCHDH",
+ "?[MUWU RK[RFY[ RMEJH RBHCHDGDE",
+ "?[MUWU RK[RFY[ RMEJH RBEBGCHDH",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJHKHLGLE",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJEJGKHLH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RQHRHSGSE", /* U+1F10 EPSILON_SMALL PSILI */
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RQEQGRHSH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEWH RMHNHOGOE",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEWH RMEMGNHOH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RXEUH RMHNHOGOE",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RXEUH RMEMGNHOH",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "B[MPTP RW[M[MFWF REHFHGGGE",
+ "B[MPTP RW[M[MFWF REEEGFHGH",
+ ":[MPTP RW[M[MFWF RDEGH R=H>H?G?E",
+ ":[MPTP RW[M[MFWF RDEGH R=E=G>H?H",
+ ":[MPTP RW[M[MFWF RHEEH R=H>H?G?E",
+ ":[MPTP RW[M[MFWF RHEEH R=E=G>H?H",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE", /* U+1F20 ETA_SMALL PSILI */
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMHNHOGOE",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMEMGNHOH",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMHNHOGOE",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMEMGNHOH",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE RMAN@P?TAV@W?",
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH RMAN@P?TAV@W?",
+ "A]L[LF RLPXP RX[XF RDHEHFGFE",
+ "A]L[LF RLPXP RX[XF RDEDGEHFH",
+ "9]L[LF RLPXP RX[XF RCEFH R<H=H>G>E",
+ "9]L[LF RLPXP RX[XF RCEFH R<E<G=H>H",
+ "9]L[LF RLPXP RX[XF RGEDH R<H=H>G>E",
+ "9]L[LF RLPXP RX[XF RGEDH R<E<G=H>H",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDHEHFGFE",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDEDGEHFH",
+ "MXRMRXSZU[ RQHRHSGSE", /* U+1F30 IOTA_SMALL PSILI */
+ "MXRMRXSZU[ RQEQGRHSH",
+ "MXRMRXSZU[ RTEWH RMHNHOGOE",
+ "MXRMRXSZU[ RTEWH RMEMGNHOH",
+ "MXRMRXSZU[ RXEUH RMHNHOGOE",
+ "MXRMRXSZU[ RXEUH RMEMGNHOH",
+ "MXRMRXSZU[ RQHRHSGSE RMAN@P?TAV@W?",
+ "MXRMRXSZU[ RQEQGRHSH RMAN@P?TAV@W?",
+ "GWR[RF RJHKHLGLE",
+ "GWR[RF RJEJGKHLH",
+ "?WR[RF RIELH RBHCHDGDE",
+ "?WR[RF RIELH RBEBGCHDH",
+ "?WR[RF RMEJH RBHCHDGDE",
+ "?WR[RF RMEJH RBEBGCHDH",
+ "DWR[RF RFAG@I?MAO@P? RJHKHLGLE",
+ "DWR[RF RFAG@I?MAO@P? RJEJGKHLH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RQHRHSGSE", /* U+1F40 O_SMALL PSILI */
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RQEQGRHSH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEWH RMHNHOGOE",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEWH RMEMGNHOH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RXEUH RMHNHOGOE",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RXEUH RMEMGNHOH",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF REHFHGGGE",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF REEEGFHGH",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RDEGH R=H>H?G?E",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RDEGH R=E=G>H?H",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH R=H>H?G?E",
+ ":]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH R=E=G>H?H",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQHRHSGSE", /* U+1F50 UPSILON_SMALL PSILI */
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQEQGRHSH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEWH RMHNHOGOE",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEWH RMEMGNHOH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RXEUH RMHNHOGOE",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RXEUH RMEMGNHOH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQHRHSGSE RMAN@P?TAV@W?",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RQEQGRHSH RMAN@P?TAV@W?",
+ "F^K[KFYFY[K[",
+ "@[RQR[ RKFRQYF RCECGDHEH",
+ "F^K[KFYFY[K[",
+ "8[RQR[ RKFRQYF RBEEH R;E;G<H=H",
+ "F^K[KFYFY[K[",
+ "8[RQR[ RKFRQYF RFECH R;E;G<H=H",
+ "F^K[KFYFY[K[",
+ "=[RQR[ RKFRQYF R?A@@B?FAH@I? RCECGDHEH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE", /* U+1F60 OMEGA_SMALL PSILI */
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMHNHOGOE",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMEMGNHOH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMHNHOGOE",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMEMGNHOH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE RMAN@P?TAV@W?",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH RMAN@P?TAV@W?",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCHDHEGEE",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCECGDHEH",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;H<H=G=E",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;E;G<H=H",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;H<H=G=E",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;E;G<H=H",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCHDHEGEE",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCECGDHEH",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH", /* U+1F70 ALPHA_SMALL ACUTE */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEQH",
+ "IZPTNUMWMXNZP[T[VZ RRTPTNSMQMPNNPMTMVN RTEQH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH",
+ "MXRMRXSZU[ RTEQH",
+ "MXRMRXSZU[ RTEQH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[P[NZMYLWLQMONNPMSMUNVOWQWWVYUZS[P[ RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEQH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RTEQH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE RR`RcSdTd", /* U+1F80 ALPHA_SMALL PSILI */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMHNHOGOE RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEWH RMEMGNHOH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMHNHOGOE RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RXEUH RMEMGNHOH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQHRHSGSE RMAN@P?TAV@W? RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RQEQGRHSH RMAN@P?TAV@W? RR`RcSdTd",
+ "G[MUWU RK[RFY[ RJHKHLGLE RR`RcSdTd",
+ "G[MUWU RK[RFY[ RJEJGKHLH RR`RcSdTd",
+ "?[MUWU RK[RFY[ RIELH RBHCHDGDE RR`RcSdTd",
+ "?[MUWU RK[RFY[ RIELH RBEBGCHDH RR`RcSdTd",
+ "?[MUWU RK[RFY[ RMEJH RBHCHDGDE RR`RcSdTd",
+ "?[MUWU RK[RFY[ RMEJH RBEBGCHDH RR`RcSdTd",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJHKHLGLE RR`RcSdTd",
+ "D[MUWU RK[RFY[ RFAG@I?MAO@P? RJEJGKHLH RR`RcSdTd",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE RN`NcOdPd", /* U+1F90 ETA_SMALL PSILI */
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMHNHOGOE RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEWH RMEMGNHOH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMHNHOGOE RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RXEUH RMEMGNHOH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RQHRHSGSE RMAN@P?TAV@W? RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RQEQGRHSH RMAN@P?TAV@W? RN`NcOdPd",
+ "N]L[LF RLPXP RX[XF RR`RcSdTd",
+ "A]L[LF RLPXP RX[XF RDEDGEHFH RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RCEFH R<H=H>G>E RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RCEFH R<E<G=H>H RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RGEDH R<H=H>G>E RR`RcSdTd",
+ "9]L[LF RLPXP RX[XF RGEDH R<E<G=H>H RR`RcSdTd",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDHEHFGFE RR`RcSdTd",
+ ">]L[LF RLPXP RX[XF R@AA@C?GAI@J? RDEDGEHFH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE RR`RcSdTd", /* U+1FA0 OMEGA_SMALL PSILI */
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMHNHOGOE RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEWH RMEMGNHOH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMHNHOGOE RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RXEUH RMEMGNHOH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQHRHSGSE RMAN@P?TAV@W? RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RQEQGRHSH RMAN@P?TAV@W? RR`RcSdTd",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCHDHEGEE RR`RcSdTd",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RCECGDHEH RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;H<H=G=E RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH R;E;G<H=H RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;H<H=G=E RR`RcSdTd",
+ "8^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH R;E;G<H=H RR`RcSdTd",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCHDHEGEE RR`RcSdTd",
+ "=^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ R?A@@B?FAH@I? RCECGDHEH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RNEOGQHSHUGVE", /* U+1FB0 ALPHA_SMALL BREVE */
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RMGWG",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RPESH RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RR`RcSdTd",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RTEQH RR`RcSdTd",
+ "F^K[KFYFY[K[",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RMHNGPFTHVGWF",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RMHNGPFTHVGWF RR`RcSdTd",
+ "I[MUWU RK[RFY[ RN>O@QASAU@V>",
+ "I[MUWU RK[RFY[ RM@W@",
+ "G[MUWU RK[RFY[ RIELH",
+ "G[MUWU RK[RFY[ RMEJH",
+ "I[MUWU RK[RFY[ RR`RcSdTd",
+ "NVQHRHSGSE",
+ "NVR`RcSdTd",
+ "NVQHRHSGSE",
+ "KZMHNGPFTHVGWF", /* U+1FC0 TILDE */
+ "LXMCNBPATCVBWA RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I\\NMN[ RNOONQMTMVNWPWb RPESH RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RN`NcOdPd",
+ "I\\NMN[ RNOONQMTMVNWPWb RTEQH RN`NcOdPd",
+ "F^K[KFYFY[K[",
+ "I\\NMN[ RNOONQMTMVNWPWb RMHNGPFTHVGWF",
+ "I\\NMN[ RNOONQMTMVNWPWb RMHNGPFTHVGWF RN`NcOdPd",
+ "B[MPTP RW[M[MFWF RDEGH",
+ "B[MPTP RW[M[MFWF RHEEH",
+ "A]L[LF RLPXP RX[XF RCEFH",
+ "A]L[LF RLPXP RX[XF RGEDH",
+ "G]L[LF RLPXP RX[XF RR`RcSdTd",
+ "JZTEWH RMHNHOGOE",
+ "JZXEUH RMHNHOGOE",
+ "NVQHRHSGSE RMAN@P?TAV@W?",
+ "MXRMRXSZU[ RNEOGQHSHUGVE", /* U+1FD0 IOTA_SMALL BREVE */
+ "MXRMRXSZU[ RMGWG",
+ "MXRMRXSZU[ RNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "MXRMRXSZU[ RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "MXRMRXSZU[ RMHNGPFTHVGWF",
+ "MXRMRXSZU[ RMCNBPATCVBWA RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "MWR[RF RN>O@QASAU@V>",
+ "MWR[RF RM@W@",
+ "GWR[RF RIELH",
+ "GWR[RF RMEJH",
+ "F^K[KFYFY[K[",
+ "JZTEWH RMEMGNHOH",
+ "JZXEUH RMEMGNHOH",
+ "NVQEQGRHSH RMAN@P?TAV@W?",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNEOGQHSHUGVE", /* U+1FE0 UPSILON_SMALL BREVE */
+ "H[MMMXNZP[S[UZVYWWWPVNUM RMGWG",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX RQHRHSGSE",
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX RQEQGRHSH",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RMHNGPFTHVGWF",
+ "H[MMMXNZP[S[UZVYWWWPVNUM RMCNBPATCVBWA RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "I[RQR[ RKFRQYF RN>O@QASAU@V>",
+ "I[RQR[ RKFRQYF RM@W@",
+ "@[RQR[ RKFRQYF RBEEH",
+ "@[RQR[ RKFRQYF RFECH",
+ "A\\L[LFTFVGWHXJXMWOVPTQLQ RDEDGEHFH",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RP>SA",
+ "LXNFOGNHMGNFNH RVFWGVHUGVFVH RT>QA",
+ "NVPESH",
+ "F^K[KFYFY[K[", /* U+1FF0 */
+ "F^K[KFYFY[K[",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RPESH RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RR`RcSdTd",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RTEQH RR`RcSdTd",
+ "F^K[KFYFY[K[",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RMHNGPFTHVGWF",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RMHNGPFTHVGWF RR`RcSdTd",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RDEGH",
+ "B]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RHEEH",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RBEEH",
+ "@^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RFECH",
+ "F^J[O[OWMVKTJQJLKIMGPFTFWGYIZLZQYTWVUWU[Z[ RR`RcSdTd",
+ "NVTEQH",
+ "NVQEQGRHSH",
+ "F^K[KFYFY[K[",
+ /* // General Punctuation (2000-206F) */
+ "F^", /* U+2000 SPACE_EM */
+ "LX",
+ "F^",
+ "LX",
+ "NV",
+ "OU",
+ "PT",
+ "H\\",
+ "MW",
+ "PT",
+ "QS",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "LXOTUT", /* U+2010 HYPHEN */
+ "LXOTUT",
+ "H\\JRZR",
+ "LXVTNT",
+ "F^IT[T",
+ "F^IT[T",
+ "H\\ODOb RUDUb",
+ "JZJbZb RJ]Z]",
+ "MWQGQFRDSC",
+ "MWSFSGRIQJ",
+ "MWSZS[R]Q^",
+ "MWQFQGRISJ",
+ "JZUGUFVDWC RMGMFNDOC",
+ "JZOFOGNIMJ RWFWGVIUJ",
+ "JZOZO[N]M^ RWZW[V]U^",
+ "JZUFUGVIWJ RMFMGNIOJ",
+ "I[MMWM RRFRb", /* U+2020 DEI_SMALL */
+ "I[M[W[ RMMWM RRFRb",
+ "E_PQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ",
+ "E_PPPV RQQQU RRQRU RSSUS RSRST ROPUSOV RVSOWOOVS",
+ "MWRYSZR[QZRYR[",
+ "MaRYSZR[QZRYR[ R\\Y]Z\\[[Z\\Y\\[",
+ "MkRYSZR[QZRYR[ R\\Y]Z\\[[Z\\Y\\[ RfYgZf[eZfYf[",
+ "JZRRQSRTSSRRRT",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "FjJ[ZF RMFOGPIOKMLKKJIKGMF RcUeVfXeZc[aZ`XaVcU RYZZXYVWUUVTXUZW[YZ", /* U+2030 PERMILLE */
+ "FvJ[ZF RMFOGPIOKMLKKJIKGMF RcUeVfXeZc[aZ`XaVcU RoUqVrXqZo[mZlXmVoU RYZZXYVWUUVTXUZW[YZ",
+ "MWTFQL",
+ "JZQFNL RWFTL",
+ "G]NFKL RTFQL RZFWL",
+ "MWPFSL",
+ "JZSFVL RMFPL",
+ "G]VFYL RPFSL RJFML",
+ "LXVcR`Nc",
+ "KYUMOSUY",
+ "KYOMUSOY",
+ "E_LMXY RXMLY RKRLSKTJSKRKT RRYSZR[QZRYR[ RRKSLRMQLRKRM RYRZSYTXSYRYT",
+ "MaRYSZR[QZRYR[ RRSQGRFSGRSRF R\\Y]Z\\[[Z\\Y\\[ R\\S[G\\F]G\\S\\F",
+ "I[QFQS RQYRZQ[PZQYQ[ RQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS RMGOFTFVGWIWKVMUNSORPQRQS",
+ "E_JGZG",
+ "OUb`aa^c\\dYeTfPfKeHdFcCaB`",
+ "OUBFCEFCHBKAP@T@YA\\B^CaEbF", /* U+2040 TIE */
+ "E_N_VW RV_R[",
+ "CaKRKW RRFRK RYRYW RFUKWPU RH[KWN[ RMIRKWI ROORKUO RTUYW^U RV[YW\\[",
+ "LXOTUT",
+ "G][EI`",
+ "KYQSVS RVbQbQDVD",
+ "KYSSNS RNbSbSDND",
+ "ImQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS RcYdZc[bZcYc[ R_GaFfFhGiIiKhMgNeOdPcRcS",
+ "IeQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS R`YaZ`[_Z`Y`[ R`S_G`FaG`S`F",
+ "MiRYSZR[QZRYR[ RRSQGRFSGRSRF R_Y`Z_[^Z_Y_[ R[G]FbFdGeIeKdMcNaO`P_R_S",
+ "KYNMVMPb",
+ "G^NMN[ RUMUXVZX[ RJMWMYNZP",
+ "H\\NQNU RWPWV RPVPPOQOUPV RQPPPNQMSNUPVQVQP",
+ "H\\VQVU RMPMV RTVTPUQUUTV RSPTPVQWSVUTVSVSP",
+ "JZR[RV RWXRVMX RURRVOR",
+ "MWQZQ[R]S^ RRNQORPSORNRP",
+ "OUBFCEFCHBKAP@T@YA\\B^CaEbF Rb`aa^c\\dYeTfPfKeHdFcCaB`", /* U+2050 TIE *TIE */
+ "JZRFRK RMIRKWI ROORKUO RRFRK RWIRKMI RUORKOO",
+ "JZM^WB RNFOGNHMGNFNH RVYWZV[UZVYV[",
+ "E_JSKRNQQRSTVUYTZS",
+ ">fB^B]C[EZOZQYRWSYUZ_Za[b]b^",
+ "E_JSZS RR[RK RLMXY RXMLY",
+ "E_LRMSLTKSLRLT RXYYZX[WZXYX[ RXKYLXMWLXKXM",
+ "D`KFHL RQFNL RWFTL R]FZL",
+ "E_KRLSKTJSKRKT RRYSZR[QZRYR[ RRKSLRMQLRKRM RYRZSYTXSYRYT",
+ "E_LXMYLZKYLXLZ RLLMMLNKMLLLN RRRSSRTQSRRRT RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "MWRYSZR[QZRYR[ RRNSORPQORNRP",
+ "E_KRLSKTJSKRKT RRYSZR[QZRYR[ RRKSLRMQLRKRM RYRZSYTXSYRYT",
+ "E_JSZS RR[RK RLXMYLZKYLXLZ RLLMMLNKMLLLN RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "CaR\\S]R^Q]R\\R^ RRRSSRTQSRRRT RRHSIRJQIRHRJ",
+ "CaR^S_R`Q_R^R` RRVSWRXQWRVRX RRNSORPQORNRP RRFSGRHQGRFRH",
+ "OU",
+ "RR", /* U+2060 0 */
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ "RR",
+ /* // Subscripts and Superscripts (2070-209F) */
+ "JZQ@S@UAVDVJUMSNQNOMNJNDOAQ@", /* U+2070 ^DIGIT_0_SMALL */
+ "NVRDRN RR=Q>R?S>R=R?",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "JZUFUN RQ@NJWJ",
+ "JZV@O@NFPESEUFVHVKUMSNPNNM",
+ "JZNHOFQESEUFVHVKUMSNQNOMNKNFOCPAR@U@",
+ "JZM@W@PN",
+ "JZQFOENCOAQ@S@UAVCUESFQFOGNINKOMQNSNUMVKVIUGSF",
+ "JZVFUHSIQIOHNFNCOAQ@S@UAVCVHUKTMRNON",
+ "I[LHXH RRBRN",
+ "I[LHXH",
+ "I[LJXJ RLFXF",
+ "MWT=S>RAQFQJROSRTS",
+ "MWP=Q>RASFSJROQRPS",
+ "KZODON ROEQDSDUEVGVN",
+ "JZQSSSUTVWV]U`SaQaO`N]NWOTQS", /* U+2080 .DIGIT_0_SMALL */
+ "JZVaNa RNVPURSRa",
+ "JZNTPSSSUTVVVXUZNaVa",
+ "JZNSVSRXSXUYV[V^U`SaPaN`",
+ "JZUYUa RQSN]W]",
+ "JZVSOSNYPXSXUYV[V^U`SaPaN`",
+ "JZN[OYQXSXUYV[V^U`SaQaO`N^NYOVPTRSUS",
+ "JZMSWSPa",
+ "JZQYOXNVOTQSSSUTVVUXSYQYOZN\\N^O`QaSaU`V^V\\UZSY",
+ "JZVYU[S\\Q\\O[NYNVOTQSSSUTVVV[U^T`RaOa",
+ "I[L[X[ RRURa",
+ "I[L[X[",
+ "I[L]X] RLYXY",
+ "MWTPSQRTQYQ]RbSeTf",
+ "MWPPQQRTSYS]RbQePf",
+ "RR",
+ "KZOXQWSWUXVZVa RV`TaQaO`N^O\\Q[V[", /* U+2090 .A_TINY */
+ "LYV`TaRaP`O^OZPXRWSWUXVZV[O\\",
+ "KYQaO`N^NZOXQWSWUXVZV^U`SaQa",
+ "KYNWVa RVWNa",
+ "LYOXQWSWUXVZV^U`SaRaP`O^O]V\\",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Currency Symbols (20A0-20CF) */
+ "F[XMPMP[X[ RTGRFNFLGKHJJJPKRLSNTUT", /* U+20A0 ECU */
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RSBG_ RZBN_",
+ "F[WYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH RR[RM RRQSOTNVMXM",
+ "HZTPMP RM[MFWF RJVRV",
+ "H[LMTM RL[W[ RO[OIPGRFUFWG RLSTS",
+ "D`I[IM RIOJNLMOMQNRPR[ RRPSNUMXMZN[P[[ RWHM`",
+ "G]L[LFX[XF RHV\\V RHP\\P",
+ "GyL[LFTFVGWHXJXMWOVPTQLQ R^MfM RaFaXbZd[f[ RlZn[r[tZuXuWtUrToTmSlQlPmNoMrMtN",
+ "GmX[QQ RL[LFTFVGWHXJXMWOVPTQLQ R`Zb[f[hZiXiWhUfTcTaS`Q`PaNcMfMhN",
+ "F^IFN[RLV[[F RHV\\V RHP\\P",
+ "D`I[IFOFRGTIULUR RONOUPXRZU[[[[F",
+ "I\\W[WF RWZU[Q[OZNYMWMQNOONQMUMWN RRHZH RXaNa",
+ "F[HSQS RHNTN RWYVZS[Q[NZLXKVJRJOKKLINGQFSFVGWH",
+ "G\\L[LF RX[OO RXFLR RLOTO",
+ "JZLFXF RR[RF ROVUR ROPUL",
+ "IoK[RFY[K[ R`b`QaObNdMgMiNjOkQkWjYiZg[d[bZ`X",
+ "G]ITJSLRNSOTQUSTXOYLYIXGVFUFSGRIRLSOXTYVYWXYWZT[", /* U+20B0 PENNY_GERMAN */
+ "G\\L[LFTFVGWHXJXMWOVPTQLQ RHL\\L",
+ "F[VGTFQFNGLIKKJOJRKVLXNZQ[S[VZWYWRSR RRCR^",
+ "I[K[RFY[ RHV\\V RHP\\P",
+ "H\\XZU[P[NZMYLWLUMSNRPQTPVOWNXLXJWHVGTFOFLG RRCR^",
+ "HZVZT[P[NZMYLWLQMONNPMTMVN RRJR^",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+20C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Combining Diacritical Marks For Symbols (20D0-20FF) */
+ "F^K[KFYFY[K[", /* U+20D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+20E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+20F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Letterlike Symbols (2100-214F) */
+ "F^K[KFYFY[K[", /* U+2100 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2110 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2120 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2130 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2140 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Number Forms (2150-218F) */
+ "F^K[KFYFY[K[", /* U+2150 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2160 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2170 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2180 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Arrows (2190-21FF) */
+ "E_ZSJS RNWJSNO", /* U+2190 !ARROW_E */
+ "E_R[RK RNORKVO",
+ "E_JSZS RVWZSVO",
+ "E_RKR[ RVWR[NW",
+ "E_JSZS RVWZSVO RNOJSNW",
+ "E_R[RK RNORKVO RVWR[NW",
+ "E_KLYZ RRLKLKS",
+ "E_YLKZ RRLYLYS",
+ "E_YZKL RRZYZYS",
+ "E_KZYL RRZKZKS",
+ "E_ZSJS RRWVO RNOJSNW",
+ "E_JSZS RRONW RVWZSVO",
+ "E_JWJQPQ RJQMTOUQTSRUQWRZU",
+ "E_ZWZQTQ RZQWTUUSTQROQMRJU",
+ "E_ZSJS RTOPSTW RNWJSNO",
+ "E_R[RK RNURQVU RNORKVO",
+ "E_JSZS RPOTSPW RVWZSVO", /* U+21A0 ARROW_DBL_E */
+ "E_RKR[ RVQRUNQ RVWR[NW",
+ "E_JSVS RZOVSZW RNWJSNO",
+ "E_ZSNS RJONSJW RVWZSVO",
+ "E_ZOZW RJSZS RNWJSNO",
+ "E_R[RK RV[N[ RNORKVO",
+ "E_JOJW RZSJS RVWZSVO",
+ "E_RKR[ RNKVK RVWR[NW",
+ "E_N[V[ RR[RK RNWR[VW RNORKVO",
+ "E_NWJSNO RJSWSYRZPYNWM",
+ "E_VWZSVO RZSMSKRJPKNMM",
+ "E_NWJSNO RJSWSYRZPYNWMUNTPTW",
+ "E_VWZSVO RZSMSKRJPKNMMONPPPW",
+ "E_PUJUJO RZWZQTQ RZQWTUUSTQROQMRJU",
+ "E_JSZS RTOPW RNOJSNW RVWZSVO",
+ "E_PWR[VY ROKLTVOR[",
+ "E_V[VOJO RNSJONK", /* U+21B0 !ARROW_E_N */
+ "E_N[NOZO RVSZOVK",
+ "E_VKVWJW RNSJWN[",
+ "E_NKNWZW RVSZWV[",
+ "E_JOVOV[ RZWV[RW",
+ "E_VKVWJW RNSJWN[",
+ "E_OQKUGQ RYRYQXNVLSKQKNLLNKQKU",
+ "E_UQYU]Q RKRKQLNNLQKSKVLXNYQYU",
+ "E_KLYZ RKHYH RRLKLKS",
+ "E_JWZW RJKJS RZSZ[ RZOJO RNSJONK RV[ZWVS",
+ "E_[KUKUQ RMMLNKQKSLVNXQYSYVXXVYSYQXNUK",
+ "E_IKOKOQ RWMXNYQYSXVVXSYQYNXLVKSKQLNOK",
+ "E_ZSJSNO",
+ "E_ZSJSNW",
+ "E_R[RKVO",
+ "E_R[RKNO",
+ "E_JSZSVO", /* U+21C0 HARPOON_UP_E */
+ "E_JSZSVW",
+ "E_RKR[VW",
+ "E_RKR[NW",
+ "E_ZWJW RJOZO RVSZOVK RN[JWNS",
+ "E_N[NK RVKV[ RJONKRO RRWV[ZW",
+ "E_JWZW RZOJO RNSJONK RV[ZWVS",
+ "E_ZWJW RJOZO RN[JWNSJONK",
+ "E_N[NK RVKV[ RJONKROVKZO",
+ "E_JWZW RZOJO RV[ZWVSZOVK",
+ "E_VKV[ RN[NK RZWV[RWN[JW",
+ "E_JVZVVZ RZPJPNL",
+ "E_ZVJVNZ RJPZPVL",
+ "E_ZPMP RZVMV RRXVN ROXJSON",
+ "E_MVWV RMPWP RSNQX ROXJSON RUNZSUX",
+ "E_JVWV RJPWP RRNNX RUNZSUX",
+ "E_ZPMP RZVMV ROXJSON", /* U+21D0 *ARROW_E_DBL */
+ "E_ONO[ RUNU[ RWPRKMP",
+ "E_JVWV RJPWP RUNZSUX",
+ "E_UXUK ROXOK RMVR[WV",
+ "E_MVWV RMPWP ROXJSON RUNZSUX",
+ "E_OXON RUXUN RMVR[WV RWPRKMP",
+ "E_[XOL RW\\KP RSLKLKT",
+ "E_IXUL RM\\YP RQLYLYT",
+ "E_INUZ RMJYV RQZYZYR",
+ "E_[NOZ RWJKV RSZKZKR",
+ "E_ZXOX RZSJS RZNON RQLJSQZ",
+ "E_JXUX RJSZS RJNUN RSLZSSZ",
+ "E_NWJSNO RZUWQTUQQNULSJS",
+ "E_VWZSVO RJUMQPUSQVUXSZS",
+ "E_NXVX RNSVS RR[RK RNORKVO",
+ "E_VNNN RVSNS RRKR[ RVWR[NW",
+ "E_ZSWS RSSQS RMSJS RNOJSNW", /* U+21E0 *ARROW_E_DASHED */
+ "E_R[RX RRTRR RRNRK RNORKVO",
+ "E_JSMS RQSSS RWSZS RVWZSVO",
+ "E_RKRN RRRRT RRXR[ RVWR[NW",
+ "E_ZSJS RJWJO RNOJSNW",
+ "E_JSZS RZOZW RVWZSVO",
+ "E_ZPZVOVOXJSONOPZP",
+ "E_U[O[OPMPRKWPUPU[",
+ "E_JVJPUPUNZSUXUVJV",
+ "E_OKUKUVWVR[MVOVOK",
+ "E_U[O[OWUWU[ RUSOSOPMPRKWPUPUS",
+ "E_W[M[MWOWOPMPRKWPUPUWWWW[",
+ "E_ONUN RW[M[MWOWOPMPRKWPUPUWWWW[",
+ "E_RKR[ RW[M[MWOWOPMPRKWPUPUWWWW[",
+ "E_PPMPRKWPTP RU[O[OSMSRNWSUSU[",
+ "E_PPMPRKWPTP RW[M[MWOWOSMSRNWSUSUWWWW[",
+ "E_JNNNNPUPUNZSUXUVNVNXJXJN", /* U+21F0 ARROW_E_WALL_WHITE */
+ "E_Z[NO RZKJKJ[ RUONONV",
+ "E_JKVW RJ[Z[ZK ROWVWVP",
+ "E_MPRKWPUPUVWVR[MVOVOPMP",
+ "E_JSZS RVWZSVO RTRTTSVQWOWMVLTLRMPOOQOSPTR",
+ "E_V[VK RNKN[ RZOVKRO RRWN[JW",
+ "E_J[Z[ RJKZK RZSJS RVGZKVOZSVWZ[V_",
+ "E_ZSJS RTWTO RNOJSNW",
+ "E_JSZS RPOPW RVWZSVO",
+ "E_JSZS RRORW RNOJSNW RVWZSVO",
+ "E_ZSJS RWWWO RRWRO RNOJSNW",
+ "E_JSZS RMOMW RRORW RVWZSVO",
+ "E_JSZS RPOPW RTOTW RNWJSNO RVWZSVO",
+ "E_NSZS RNWNOJSNW",
+ "E_VSJS RVWVOZSVW",
+ "E_NSVS RNWJSNONW RVWVOZSVW",
+ /* // Mathematical Operators (2200-22FF) */
+ "I[MLWL RKFR[YF", /* U+2200 =A_CAP */
+ "HZVHUGSFPFNGMHLKLVMYNZP[S[UZVY",
+ "H[WOVNTMPMNNMOLQLWMYNZP[S[UZVYWWWJVHUGSFOFMG",
+ "I\\WPPP RM[W[WFMF",
+ "I\\WQPQ RMFWFW[M[ RXCL`",
+ "C`G[\\F ROFTFXHZJ\\N\\SZWXYT[O[KYIWGSGNIJKHOF",
+ "I[K[RFY[K[",
+ "I[YFR[KFYF",
+ "C`\\QGQ R\\GOGKIIKGOGSIWKYO[\\[",
+ "C`[CH^ R\\QGQ R\\GOGKIIKGOGSIWKYO[\\[",
+ "E_JSZS RZZPZMYKWJTJRKOMMPLZL",
+ "DaHP]P RHZUZYX[V]R]N[JYHUFHF",
+ "DaI^\\C RHP]P RHZUZYX[V]R]N[JYHUFHF",
+ "E_ZSJS RJZTZWYYWZTZRYOWMTLJL",
+ "E_M[WQ RMZWP RMYWO RMXWN RMWWM RMVWL RMUWK RMTVK RMSUK RMRTK RMQSK RMPRK RMOQK RMNPK RMMOK RMLNK RN[WR RO[WS RP[WT RQ[WU RR[WV RS[WW RT[WX RU[WY RV[WZ RM[MKWKW[M[",
+ "E_Z`ZFJFJ`",
+ "E_ZFZ`J`JF", /* U+2210 ~PI_CAP_HUGE */
+ "E_Z`I`TSIF[F",
+ "E_JSZS",
+ "E_ZWJW RROR_ RJKZK",
+ "E_JSZS RR[RK RRDQERFSERDRF",
+ "G][EI`",
+ "KYID[_",
+ "E_KOYW RR[RK RYOKW",
+ "E_PQRPTQUSTURVPUOSPQ",
+ "E_PQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ",
+ "IbMTQSS[bB",
+ "IbMTQSS[bB RN@V@RESEUFVHVKUMSNPNNM",
+ "IbMTQSS[bB RUFUN RQ@NJWJ",
+ "E_XPWPUQQUOVMULSMQOPQQUUWVXV",
+ "E_TQVPXQYSXUVVTUPQNPLQKSLUNVPUTQ",
+ "E_JKJ[Z[",
+ "E_ZKJ[Z[", /* U+2220 ANGLE */
+ "E_ZKJ[Z[ RPSRUTZT]",
+ "E_Z[JSZK RSYTWUSTOSM",
+ "H\\RbRD",
+ "H\\NUVQ RRDRb",
+ "H\\ODOb RUDUb",
+ "H\\LVXP RODOb RUDUb",
+ "E_[[RKI[",
+ "E_IKR[[K",
+ "E_Z[ZQXMTKPKLMJQJ[",
+ "E_JKJULYP[T[XYZUZK",
+ "H\\L]M_O`Q_R]RISGUFWGXI",
+ "D`H]I_K`M_N]NIOGQFSGTI RP]Q_S`U_V]VIWGYF[G\\I",
+ "@dD]E_G`I_J]JIKGMFOGPI RL]M_O`Q_R]RISGUFWGXI RT]U_W`Y_Z]ZI[G]F_G`I",
+ "H\\L]M_O`Q_R]RISGUFWGXI RRMUNWPXSWVUXRYOXMVLSMPONRM",
+ "D`H]I_K`M_N]NIOGQFSGTI RP]Q_S`U_V]VIWGYF[G\\I RVMYN[P\\S[VYXVYNYKXIVHSIPKNNMVM",
+ "@dD]E_G`I_J]JIKGMFOGPI RL]M_O`Q_R]RISGUFWGXI RT]U_W`Y_Z]ZI[G]F_G`I RZM]N_P`S_V]XZYJYGXEVDSEPGNJMZM", /* U+2230 INTEGRAL_TPL_CONTOUR */
+ "H\\URXU[R RLSMPONRMUNWPXSXU RL]M_O`Q_R]RISGUFWGXI",
+ "H\\UQXT[Q RL]M_O`Q_R]RISGUFWGXI RLSMPONRMUNWPXSWVUXRYOXMVLS",
+ "H\\UUXR[U RL]M_O`Q_R]RISGUFWGXI RLSMPONRMUNWPXSWVUXRYOXMVLS",
+ "E_KXLYKZJYKXKZ RRLSMRNQMRLRN RYXZYYZXYYXYZ",
+ "E_YNXMYLZMYNYL RRZQYRXSYRZRX RKNJMKLLMKNKL",
+ "JZRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "E_LXMYLZKYLXLZ RLLMMLNKMLLLN RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "E_JSZS RRFQGRHSGRFRH",
+ "E_JSTS RYXZYYZXYYXYZ RYLZMYNXMYLYN",
+ "E_JSZS RLXMYLZKYLXLZ RLLMMLNKMLLLN RXXYYXZWYXXXZ RXLYMXNWMXLXN",
+ "E_JSKRNQQRSTVUYTZS RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "E_JSKRNQQRSTVUYTZS",
+ "E_ZSYRVQSRQTNUKTJS",
+ "E_WPYQZSYUWVTUPQMPKQJSKUMV",
+ "E_JSKNLLNKPLQNSXTZV[XZYXZS",
+ "E_RKSLTOSRQTPWQZR[", /* U+2240 WREATH_PRODUCT */
+ "E_JSKRNQQRSTVUYTZS RVKN[",
+ "E_ZPJP RZVYWVXSWQUNTKUJV",
+ "E_JVZV RJPKONNQOSQVRYQZP",
+ "E_JVZV RJPKONNQOSQVRYQZP RVKN[",
+ "E_JYZY RJSZS RJMKLNKQLSNVOYNZM",
+ "E_JYZY RJSZS RUPO\\ RJMKLNKQLSNVOYNZM",
+ "E_JYZY RJSZS RJMKLNKQLSNVOYNZM RXGL_",
+ "E_JVKUNTQUSWVXYWZV RJPKONNQOSQVRYQZP",
+ "E_JVKUNTQUSWVXYWZV RJPKONNQOSQVRYQZP RVKN[",
+ "E_JYZY RJSKRNQQRSTVUYTZS RJMKLNKQLSNVOYNZM",
+ "E_JYKXNWQXSZV[YZZY RJSKRNQQRSTVUYTZS RJMKLNKQLSNVOYNZM",
+ "E_ZYJY RZSJS RZMYLVKSLQNNOKNJM",
+ "E_JXLWPVTVXWZX RJNLOPPTPXOZN",
+ "E_JVNVNWOYQZSZUYVWVVZV RJPNPNOOMQLSLUMVOVPZP",
+ "E_ZVJV RJPNPNOOMQLSLUMVOVPZP",
+ "E_JPZP RZVJV RRHQIRJSIRHRJ", /* U+2250 EQUAL DOT */
+ "E_JPZP RZVJV RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "E_JPZP RZVJV RKJLKKLJKKJKL RYZZ[Y\\X[YZY\\",
+ "E_ZPJP RJVZV RYJXKYLZKYJYL RKZJ[K\\L[KZK\\",
+ "AcNP^P R^VNV RGVHWGXFWGVGX RGNHOGPFOGNGP",
+ "AcVPFP RFVVV R]V\\W]X^W]V]X R]N\\O]P^O]N]P",
+ "E_JPZP RZVJV RPQRPTQUSTURVPUOSPQ",
+ "E_JPZP RZVJV RRJPIOGPERDTEUGTIRJ",
+ "E_JPZP RZVJV RNJOHQGSGUHVJ",
+ "E_JPZP RZVJV RNJRGVJ",
+ "E_JPZP RZVJV RNGRJVG",
+ "E_JPZP RZVJV RRATGOCUCPGRA",
+ "E_JPZP RZVJV RR?NJVJR?",
+ "E_JPZP RYC]C RZVJV R]?[@ZBZJ RM?MJKJIIHGHEICKBMB RQFVFVCUBRBQCQIRJUJ",
+ "E_JPZP RZVJV RMBMJ RMCNBQBRCRJ RRCSBVBWCWJ",
+ "E_JPZP RZVJV RRHSIRJQIRHRJ RN@P?S?U@VBUDSE",
+ "E_JPZP RTMPY RZVJV", /* U+2260 EQUAL_SLASH */
+ "E_JYZY RJSZS RJMZM",
+ "E_JYZY RJSZS RJMZM RXGL_",
+ "E_J\\Z\\ RJPZP RJJZJ RZVJV",
+ "E_ZZJZ RZVJPZJ",
+ "E_JZZZ RJVZPJJ",
+ "E_J]Z] RZWJW RZSJMZG",
+ "E_Z]J] RJWZW RJSZMJG",
+ "E_J]Z] RTTP` RZWJW RZSJMZG",
+ "E_JWZW RTTP` RZ]J] RJSZMJG",
+ "=gRMBSRY RbMRSbY",
+ "=gRMbSRY RBMRSBY",
+ "I[OCPDRGSITLUQUUTZS]R_PbOc RUcTbR_Q]PZOUOQPLQIRGTDUC",
+ "E_JXLWPVTVXWZX RJNLOPPTPXOZN RVKN[",
+ "E_ZMJSZY RVKN[",
+ "E_JMZSJY RVKN[",
+ "E_ZZJZ RZVJPZJ RXGL_", /* U+2270 LESS_MINUS SLASH_OP */
+ "E_JZZZ RJVZPJJ RXGL_",
+ "E_ZVJPZJ RJZKYNXQYS[V\\Y[ZZ",
+ "E_JVZPJJ RJZKYNXQYS[V\\Y[ZZ",
+ "E_ZVJPZJ RJZKYNXQYS[V\\Y[ZZ RXGL_",
+ "E_JVZPJJ RJZKYNXQYS[V\\Y[ZZ RXGL_",
+ "E_JSZYJ_ RZSJMZG",
+ "E_ZSJYZ_ RJSZMJG",
+ "E_JSZYJ_ RZSJMZG RXGL_",
+ "E_ZSJYZ_ RJSZMJG RXGL_",
+ "E_ZKXNVPRRJSRTVVXXZ[",
+ "E_JKLNNPRRZSRTNVLXJ[",
+ "E_JVRWVYX[Z^ RZHXKVMROJPRQVSXUZX",
+ "E_ZVRWNYL[J^ RJHLKNMROZPRQNSLUJX",
+ "E_J[KZNYQZS\\V]Y\\Z[ RZHXKVMROJPRQVSXUZX",
+ "E_J[KZNYQZS\\V]Y\\Z[ RJXLUNSRQZPRONMLKJH",
+ "E_ZKXNVPRRJSRTVVXXZ[ RVKN[", /* U+2280 PRECEDES SLASH_REL */
+ "E_JKLNNPRRZSRTNVLXJ[ RVKN[",
+ "E_ZMNMLNKOJQJUKWLXNYZY",
+ "E_JMVMXNYOZQZUYWXXVYJY",
+ "E_ZMNMLNKOJQJUKWLXNYZY RVKN[",
+ "E_JMVMXNYOZQZUYWXXVYJY RVKN[",
+ "E_J\\Z\\ RZJNJLKKLJNJRKTLUNVZV",
+ "E_Z\\J\\ RJJVJXKYLZNZRYTXUVVJV",
+ "E_J\\Z\\ RZJNJLKKLJNJRKTLUNVZV RXGL_",
+ "E_Z\\J\\ RJJVJXKYLZNZRYTXUVVJV RXGL_",
+ "E_J\\Z\\ RZJNJLKKLJNJRKTLUNVZV RSYQ_",
+ "E_Z\\J\\ RJJVJXKYLZNZRYTXUVVJV RSYQ_",
+ "E_JKJULYP[T[XYZUZK ROSUS RSUUSSQ",
+ "E_JKJULYP[T[XYZUZK RRRQSRTSSRRRT",
+ "E_JKJULYP[T[XYZUZK RLSXS RRMRY",
+ "E_ZYJYJMZM",
+ "E_JYZYZMJM", /* U+2290 !SQIMAGE */
+ "E_Z\\J\\ RZVJVJJZJ",
+ "E_J\\Z\\ RJVZVZJJJ",
+ "E_Z[ZKJKJ[",
+ "E_JKJ[Z[ZK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLSXS RRMRY",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLSXS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RMNWX RWNMX",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RWFM^",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRRQSRTSSRRRT",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQRPTQUSTURVPUOSPQ",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRNRS RMQRSWQ ROWRSUW",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLUXU RLQXQ",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RNSVS",
+ "E_JKZKZ[J[JK RLSXS RRMRY",
+ "E_JKZKZ[J[JK RLSXS",
+ "E_JKZKZ[J[JK RMNWX RWNMX", /* U+22A0 SQUARE MULTIPLY_SMALL */
+ "E_JKZKZ[J[JK RRRQSRTSSRRRT",
+ "E_J[JK RJSZS",
+ "E_Z[ZK RZSJS",
+ "E_ZKJK RRKR[",
+ "E_J[Z[ RR[RK",
+ "I[NSVS RNKN[",
+ "I[NVVV RNPVP RNKN[",
+ "E_JVZV RJPZP RJKJ[",
+ "E_JKJ[ RPSZS RPKP[",
+ "E_JKJ[ ROKO[ RTKT[ RYSTS",
+ "E_JKJ[ RPVYV RPPYP RPKP[",
+ "E_J[JK RJSZS RXGL_",
+ "E_JVZV RJPZP RJKJ[ RXGL_",
+ "E_JKJ[ RPSZS RPKP[ RXGL_",
+ "E_JKJ[ RPVYV RPPYP RPKP[ RXGL_",
+ "E_VKXLYNXPVQRRJSRTVUXVYXXZV[", /* U+22B0 PRECEDESREL */
+ "E_NKLLKNLPNQRRZSRTNULVKXLZN[",
+ "E_JSZYZMJS",
+ "E_ZSJYJMZS",
+ "E_Z[J[ RJQZWZKJQ",
+ "E_J[Z[ RZQJWJKZQ",
+ "BbXQXU RYQYU RZPZV R[Q[U R\\Q\\U RMSLQJPHQGSHUJVLUMSWSXUZV\\U]S\\QZPXQWS",
+ "BbLQLU RKQKU RJPJV RIQIU RHQHU RWSXQZP\\Q]S\\UZVXUWSMSLUJVHUGSHQJPLQMS",
+ "E_JSTSUUWVYUZSYQWPUQTS",
+ "E_JSNS RR[RW RRKRO RZSVS",
+ "I[NFVF RRFR[",
+ "E_J[Z[ RZKRVJK",
+ "E_ZKJK RJ[RPZ[",
+ "E_JKZK RZPR[JP",
+ "E_JKJ[Z[ RJOLOQQTTVYV[",
+ "E_Z[ZKJ[Z[",
+ "Bb_`REE`", /* U+22C0 *OR_HUGE */
+ "BbEFRa_F",
+ "Bb]`]O\\KZHWFSEQEMFJHHKGOG`",
+ "BbGFGWH[J^M`QaSaW`Z^\\[]W]F",
+ "E_RaJSRFZSRa",
+ "JZRRQSRTSSRRRT",
+ "I[RRTXOTUTPXRR",
+ "E_ZSJS RRXSYRZQYRXRZ RRLSMRNQMRLRN RLMXY RXMLY",
+ "E_JKZ[ZKJ[JK",
+ "E_ZKJ[JKZ[",
+ "E_JKZ[ZKJ[",
+ "E_JKZ[ RRSJ[",
+ "E_ZKJ[ RRSZ[",
+ "E_ZVJV RZPYOVNSOQQNRKQJP",
+ "E_JKMMOOQSR[SSUOWMZK",
+ "E_Z[WYUWSSRKQSOWMYJ[",
+ "E_ZPSPQQPSQUSVZV RZ\\Q\\N[KXJUJQKNNKQJZJ", /* U+22D0 SUBSET_DBL */
+ "E_JPQPSQTSSUQVJV RJ\\S\\V[YXZUZQYNVKSJJJ",
+ "E_U[UTTRRQPROTO[ R[[[RZOWLTKPKMLJOIRI[",
+ "E_OKORPTRUTTURUK RIKITJWMZP[T[WZZW[T[K",
+ "E_RKR[ RL[LSMPNOQNSNVOWPXSX[",
+ "E_JPZP RZVJV RODOb RUDUb",
+ "E_ZMJSZY RYRXSYTZSYRYT",
+ "E_JMZSJY RKRJSKTLSKRKT",
+ "5oJM:SJY RZMJSZY RjMZSjY",
+ "5oZMjSZY RJMZSJY R:MJS:Y",
+ "E_ZSJS RJWZ[J_ RZOJKZG",
+ "E_JSZS RZWJ[Z_ RJOZKJG",
+ "E_ZLJL RZPJVZ\\",
+ "E_JLZL RJPZVJ\\",
+ "E_JPROVMXKZH RZ^X[VYRWJVRUVSXQZN",
+ "E_ZPRONMLKJH RJ^L[NYRWZVRUNSLQJN",
+ "E_JPROVMXKZH RZ^X[VYRWJVRUVSXQZN RXGL_", /* U+22E0 ~PRECEDESEQ SLASH_OP */
+ "E_ZPRONMLKJH RJ^L[NYRWZVRUNSLQJN RXGL_",
+ "E_Z\\J\\ RZVJVJJZJ RXGL_",
+ "E_J\\Z\\ RJVZVZJJJ RXGL_",
+ "E_Z\\J\\ RZVJVJJZJ RSYQ_",
+ "E_J\\Z\\ RJVZVZJJJ RSYQ_",
+ "E_ZVJPZJ RJZKYNXQYS[V\\Y[ZZ RSWQ]",
+ "E_JVZPJJ RJZKYNXQYS[V\\Y[ZZ RSWQ]",
+ "E_J[KZNYQZS\\V]Y\\Z[ RZHXKVMROJPRQVSXUZX RSXQ^",
+ "E_J[KZNYQZS\\V]Y\\Z[ RJXLUNSRQZPRONMLKJH RSXQ^",
+ "E_JSZYZMJS RXGL_",
+ "E_ZSJYJMZS RXGL_",
+ "E_Z[J[ RJQZWZKJQ RXGL_",
+ "E_J[Z[ RZQJWJKZQ RXGL_",
+ "CaR\\S]R^Q]R\\R^ RRRSSRTQSRRRT RRHSIRJQIRHRJ",
+ "CaHRISHTGSHRHT RRRSSRTQSRRRT R\\R]S\\T[S\\R\\T",
+ "Ca\\H[I\\J]I\\H\\J RRRQSRTSSRRRT RH\\G]H^I]H\\H^", /* U+22F0 !ELLIPSIS_DIAG */
+ "CaHHIIHJGIHHHJ RRRSSRTQSRRRT R\\\\]]\\^[]\\\\\\^",
+ ">`BQ\\Q R\\GOGKIIKGOGSIWKYO[\\[",
+ ">`GQ\\Q R\\M\\U R\\GOGKIIKGOGSIWKYO[\\[",
+ "E_JSZS RZPZV RZZPZMYKWJTJRKOMMPLZL",
+ "C`\\QGQ R\\GOGKIIKGOGSIWKYO[\\[ RR@QARBSAR@RB",
+ "C`GA\\A R\\QGQ R\\[O[KYIWGSGOIKKIOG\\G",
+ "E_JSZS RZGJG RZLPLMMKOJRJTKWMYPZZZ",
+ "C`G`\\` R\\PGP R\\FOFKHIJGNGRIVKXOZ\\Z",
+ "C`HT\\T RHN\\N R\\GOGKIIKGOGSIWKYO[\\[",
+ "DfbQHQ RHGUGYI[K]O]S[WYYU[H[",
+ "Df]QHQ RHMHU RHGUGYI[K]O]S[WYYU[H[",
+ "E_ZSJS RJPJV RJZTZWYYWZTZRYOWMTLJL",
+ "Da]AHA RHQ]Q RH[U[YY[W]S]O[KYIUGHG",
+ "E_ZSJS RJGZG RJLTLWMYOZRZTYWWYTZJZ",
+ "C`GQ\\Q R\\GGGG[\\[",
+ /* // Miscellaneous Technical (2300-23FF) */
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RZKJ[", /* U+2300 CIRCLE SLASH_SYM */
+ "E_JQRWROZU",
+ "E_J[JORGZOZ[J[",
+ "E_NORKVO",
+ "E_VWR[NW",
+ "E_ZKJK RJ[RPZ[",
+ "E_JNZN RJHZH RJ[RSZ[",
+ "H\\RDSETGSIRJQLRNSOTQSSRTQVRXSYT[S]R^Q`Rb",
+ "KYQbQDVD",
+ "KYSbSDND",
+ "KYQDQbVb",
+ "KYSDSbNb",
+ "E_RWR[ RVSZS",
+ "E_RWR[ RNSJS",
+ "E_RORK RVSZS",
+ "E_RORK RNSJS",
+ "E_ZQJQJV", /* U+2310 !NOT */
+ "D`[JZLYPYVZZ[\\Y[UZOZK[I\\JZKVKPJLIJKKOLULYK[J",
+ "E_JSJQLMPKTKXMZQZS",
+ "E_JSJQLMPKTKXMZQZS RJSZS",
+ "E_JMLLPKTKXLZMR[JM",
+ "E_PUJ[ RTKWLYNZQYTWVTWQVOTNQONQLTK",
+ "E_JSZS RR[RK RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_JWZW RJOZO RNKN[ RVKV[",
+ "E_LPXPZO[MZKXJVKUMUYV[X\\Z[[YZWXVLVJWIYJ[L\\N[OYOMNKLJJKIMJOLP",
+ "E_ZUJUJP",
+ "E_RORSUS RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_M[RVW[ RN[RWV[ RP[RYT[ RS[RZQ[ RU[RXO[ RYMRPKMROYM RJFZFZKYMKTJVJ[Z[ZVYTKMJJJF",
+ "JZVFNFNM",
+ "JZNFVFVM",
+ "JZV[N[NT",
+ "JZN[V[VT",
+ "H\\RbRMSITGVFXGYI", /* U+2320 INTEGRAL_TOP */
+ "H\\RDRYQ]P_N`L_K]",
+ "E_JUKTMSRRWSYTZU",
+ "E_ZQYRWSRTMSKRJQ",
+ "E_LKHK RXK\\K RNORKVO",
+ "@dXK^K RFKLKX[^[",
+ "AfJKZ[ RZKJ[ RFKZKbSZ[F[FK",
+ "AcJKZ[ RZKJ[ RFK^K^[F[FK",
+ "9k>VfV R>LfL RCQCL RD[DV REVEQ RFLFG RHQHL RJVJQ RK[KV RKLKG RMQML ROVOQ RPLPG RRQRL RTVTQ RULUG RWQWL RYVYQ RZ[ZV RZLZG R\\Q\\L R^V^Q R_L_G R`[`V R>QaQaL R>[>GfGf[>[",
+ "KYUcOSUC",
+ "KYOcUSOC",
+ ">cZKJ[ RJKZ[ R^KJKBSJ[^[^K",
+ "AcKOKW RR[YW RRKYO RRE^L^ZRaFZFLRE",
+ "H\\PNKX RYNTX RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_N[J[JW RZSRSJ[ RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_JSZS RNYVY RVMNM",
+ "E_RPRKNN RZPZKVN RRKJ[R[ZK", /* U+2330 TOTAL_RUNOUT */
+ "H\\LS[S RRMRY RXP[SXV RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_ZSJ\\JJZS RJSZS",
+ "E_J[JRZ[J[",
+ "E_JWJ[Z[ZW",
+ "E_VWR[NW",
+ "D`JaZa RJFZF RRFRa",
+ "D`MFWFWaMaMF",
+ "D`IF[F[aIaIF RJPZP RZVJV",
+ "D`IF[F[aIaIF RZSJS RRXSYRZQYRXRZ RRLSMRNQMRLRN",
+ "D`IF[F[aIaIF RRJ[SR\\ISRJ",
+ "D`IF[F[aIaIF RPQRPTQUSTURVPUOSPQ",
+ "D`IF[F[aIaIF RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRbRD",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQRPTQUSTURVPUOSPQ",
+ "E_JSZS RZKJ[",
+ "E_JSZS RJKZ[", /* U+2340 MINUS !SLASH_SYM */
+ "D`IaIF[F[aIa[F",
+ "D`[a[FIFIa[aIF",
+ "D`IF[F[aIaIF RZMJSZY",
+ "D`IF[F[aIaIF RJMZSJY",
+ "E_ZSJS RNWJSNO RR[RK",
+ "E_JSZS RVWZSVO RR[RK",
+ "D`IF[F[aIaIF RZSJS RNWJSNO",
+ "D`IF[F[aIaIF RJSZS RVWZSVO",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RLGX_",
+ "E_J[Z[ RR[RK RZaJa",
+ "E_RKX[L[RK RRbRD",
+ "D`IF[F[aIaIF RIKR[[K",
+ "D`IF[F[aIaIF RRKX[L[RK",
+ "E_ZKJK RRKR[ RVRUPSOQOOPNRNTOVQWSWUVVTVR",
+ "E_R[RK RNORKVO RJSZS",
+ "D`IF[F[aIaIF RR[RK RNORKVO", /* U+2350 RECTANGLE_V_HUGE ARROW_N */
+ "E_ZKJK RRKR[ RMEWE",
+ "E_R[LKXKR[ RRbRD",
+ "D`IF[F[aIaIF R[[RKI[",
+ "D`IF[F[aIaIF RR[LKXKR[",
+ "E_J[Z[ RR[RK RPQRPTQUSTURVPUOSPQ",
+ "E_RKR[ RVWR[NW RJSZS",
+ "D`IF[F[aIaIF RRKR[ RVWR[NW",
+ "JZJ]Z] RSFQJ",
+ "E_RKX[L[RK RJ]Z]",
+ "E_RJ[SR\\ISRJ RJ]Z]",
+ "E_PQRPTQUSTURVPUOSPQ RJ]Z]",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RJ]Z]",
+ "E_Z[ZQXMTKPKLMJQJ[ RPQRPTQUSTURVPUOSPQ",
+ "D`IF[F[aIaIF RSFQJ",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRPTVORURPVRP",
+ "D`IF[F[aIaIF RRYSZR[QZRYR[ RRNSORPQORNRP", /* U+2360 RECTANGLE_V_HUGE COLON */
+ "E_ZKJK RRKR[ RNDOENFMENDNF RVDWEVFUEVDVF",
+ "E_R[LKXKR[ RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_RKWZJQZQMZRK RNDOENFMENDNF RVDWEVFUEVDVF",
+ "E_PQRPTQUSTURVPUOSPQ RNIOJNKMJNINK RVIWJVKUJVIVK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RNDOENFMENDNF RVDWEVFUEVDVF",
+ "E_JKJULYP[T[XYZUZK RRbRD",
+ "E_ZMNMLNKOJQJUKWLXNYZY RRbRD",
+ "E_JSKRNQQRSTVUYTZS RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_JMZSJY RNFOGNHMGNFNH RVFWGVHUGVFVH",
+ "E_JSZS RSZS[R]Q^",
+ "E_R[LKXKR[ RJSKRNQQRSTVUYTZS",
+ "H\\QFSFUGVHWJXNXSWWVYUZS[Q[OZNYMWLSLNMJNHOGQF RJPKONNQOSQVRYQZP",
+ "E_JSKRNQQRSTVUYTZS RRbRD",
+ "MWSZS[R]Q^ RRNSORPQORNRP RJ]Z]",
+ "D`IF[F[aIaIF RJPZP RTMPY RZVJV",
+ "D`IF[F[aIaIF RQYRZQ[PZQYQ[ RMGOFTFVGWIWKVMUNSORPQRQS", /* U+2370 RECTANGLE_V_HUGE QUESTION */
+ "E_IKR[[K RJSKRNQQRSTVUYTZS",
+ "E_[[RKI[ RJSKRNQQRSTVUYTZS",
+ "MXRMRXSZU[",
+ "H\\MbMQNOONQMTMVNWOXQXWWYVZT[Q[OZMX",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[ RJ]Z]",
+ "HZLTST RVZT[P[NZMYLWLQMONNPMTMVN RJ]Z]",
+ "MXRMRXSZU[ RJ]Z]",
+ "G]RTRX RMMLNKPKXLZN[O[QZRXSZU[V[XZYXYPXNWM RJ]Z]",
+ "H]YMVWUYTZR[P[NZMYLVLRMONNPMRMTNUOVQWXXZZ[",
+ "IbMTQSS[bB RXL`L",
+ "A_J_F_F[ RJKJ[Z[ RF_OVEQOG",
+ "E_JWNWN[V[VWZW",
+ "E_NSN[J[ RVSV[Z[ RJSJQLMPKTKXMZQZSJS",
+ "E_PQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ RRbRD",
+ "E_VWR[NW ROEQDSDUEVGVN RVMTNQNOMNKOIQHVH", /* U+2380 *ARROWHEAD_N ^A_TINY */
+ "BbF[^[ RGLIKKKMLNNNU RUSVTUUTTUSUU R]S^T]U\\T]S]U RNTLUIUGTFRGPIONO",
+ "BbF[N[ RV[^[ RGLIKKKMLNNNU RWLYK[K]L^N^U RNTLUIUGTFRGPIONO R^T\\UYUWTVRWPYO^O",
+ "BbHPDP RJUFX RJKFH R^XZU R^HZK R`P\\P RTTRUPUNTMRMQNNPLRKVKTU",
+ "=_RKR[B[BKRK RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_JKZKZ[J[JK RRbRD",
+ "C_ESUS RQWUSQO RJWJ[Z[ZKJKJO",
+ "@dX[^[ RZO^KZG RF[L[XK^K",
+ "E_KOYW RR[RK RYOKW RRMONMPLSMVOXRYUXWVXSWPUNRM",
+ "E_JSOSR[USZS RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_R[KOYOR[ RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_STJK RJOJKNK RSKTKXMZQZUXYT[P[LYJUJT",
+ "D`KNKROR RYRWPTOPOMPKR RNXMVKUIVHXIZK[MZNX RVXWZY[[Z\\X[VYUWVVX",
+ "E_I[N[NKVKV[[[",
+ "E_I[V[VK RN[NK[K",
+ "E_JKZK RJSRKZSR[JS",
+ "E_Z[J[ RZSR[JSRKZS", /* U+2390 *OPEN_H */
+ "E_JKZK RJSRKZSR[JS RJSZS",
+ "E_Z[J[ RZSR[JSRKZS RJSZS",
+ "E_JVLV RJPZP RQVSV RXVZV",
+ "BbL[FQLGXG^QX[L[",
+ "D`IF[F[aIaIF",
+ "MWTFQL",
+ "AcZSJS RRORK RR[RW RNOJSNW R^[F[FK^K^[",
+ "AcJSZS RRWR[ RRKRO RVWZSVO RFK^K^[F[FK",
+ "BbLHQHQC RLSLHQCXCXSLS RLKJKHLGNGXHZJ[Z[\\Z]X]N\\LZKXK",
+ "BbROJW RZORW RGXGNHLJKZK\\L]N]X\\ZZ[J[HZGX",
+ "H\\XDVGUITLSQR[Rb",
+ "H\\RbRD",
+ "H\\XbV_U]TZSURKRD",
+ "H\\LDNGOIPLQQR[Rb",
+ "H\\RbRD",
+ "H\\LbN_O]PZQURKRD", /* U+23A0 *PAREN_TOP */
+ "H\\XGRGRb",
+ "H\\RbRD",
+ "H\\X_R_RD",
+ "H\\LGRGRb",
+ "H\\RbRD",
+ "H\\L_R_RD",
+ "H\\XDTHSJRNRb",
+ "H\\RDRIQMPOLSPWQYR]Rb",
+ "H\\XbT^S\\RXRD",
+ "H\\RbRD",
+ "H\\LDPHQJRNRb",
+ "H\\RDRISMTOXSTWSYR]Rb",
+ "H\\LbP^Q\\RXRD",
+ "H\\RbRD",
+ "H\\HS\\S",
+ "H\\WDSHRKR[Q^Mb", /* U+23B0 MOUSTACHE */
+ "H\\MDQHRKR[S^Wb",
+ "E_VbIF\\F",
+ "E_VDI`\\`",
+ ">fC^CYaYa^",
+ ">fCHCMaMaH",
+ ">fC^CYaYa^ RaHaMCMCH",
+ "IbMTQSS[bB",
+ "H\\RbRD",
+ "H\\RbRD",
+ "H\\HG\\G",
+ "H\\HM\\M",
+ "H\\\\YHY",
+ "H\\\\_H_",
+ "E_UFOFO[",
+ "E_U[O[OF",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRbRD", /* U+23C0 CIRCLE LINE_V */
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RZEJE RRERa",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RJaZa RRaRE",
+ "E_RK[[I[RK RRbRD",
+ "E_RK[[I[RK RZEJE RRERa",
+ "E_RK[[I[RK RJaZa RRaRE",
+ "E_JSKRNQQRSTVUYTZS RRbRD",
+ "E_JSKRNQQRSTVUYTZS RZEJE RRERa",
+ "E_JSKRNQQRSTVUYTZS RJaZa RRaRE",
+ "E_JaZa RRaRE",
+ "E_ZEJE RRERa",
+ "E_OFUFU[",
+ "E_O[U[UF",
+ "D`TFQL RMKJKJ[Z[ZKWK",
+ "E_IWN\\NZZZZKTKTTNTNRIW",
+ "E_Z[J[ RJVRKZV",
+ "H\\RbRD", /* U+23D0 LINE_V */
+ "H\\NQNROTQUSUUTVRVQ",
+ "H\\NQNROTQUSUUTVRVQ RMKWK",
+ "H\\NQNROTQUSUUTVRVQ RW[M[",
+ "CaGQGRHTJULUNTOROQ RUQURVTXUZU\\T]R]Q RGK]K",
+ "CaGQGRHTJULUNTOROQ RUQURVTXUZU\\T]R]Q R][G[",
+ "E_JQJRKTMUOUQTRRRQ RRRSTUUWUYTZRZQ",
+ "E_JUZUZP",
+ "E_JPJUZUZP",
+ "E_RPRU RJPJUZUZP",
+ "E_HO\\O RLUXU RRFRO RT[P[",
+ "E_HS\\S RJMZMZYJYJM",
+ ">fB]C\\FZHYKXPWTWYX\\Y^Za\\b]",
+ ">fbIaJ^L\\MYNTOPOKNHMFLCJBI",
+ ">fB^B]C[EZOZQYRWSYUZ_Za[b]b^",
+ ">fbHbIaK_LULSMROQMOLELCKBIBH",
+ ">fB^FY^Yb^", /* U+23E0 TOR_BRACKET_OVER */
+ ">fbH^MFMBH",
+ "E_I[NKVK[[I[",
+ "AcRE^L^ZRaFZFLRE RQLSLVMXOYRYTXWVYSZQZNYLWKTKRLONMQL",
+ "E_JSZS",
+ "E_HXMN\\NWXHX",
+ "E_JSZS RJSKNLLNKPLQNSXTZV[XZYXZS",
+ "E_LMXY RXMLY RPQRPTQUSTURVPUOSPQ",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+23F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Control Pictures (2400-243F) */
+ "F^K[KFYFY[K[", /* U+2400 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2410 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2420 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2430 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Optical Character Recognition (2440-245F) */
+ "F^K[KFYFY[K[", /* U+2440 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2450 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Enclosed Alphanumerics (2460-24FF) */
+ "F^K[KFYFY[K[", /* U+2460 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2470 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2480 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2490 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+24F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Box Drawing (2500-257F) */
+ "F^K[KFYFY[K[", /* U+2500 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2510 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2520 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2530 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2540 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2550 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2560 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2570 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Block Elements (2580-259F) */
+ "F^K[KFYFY[K[", /* U+2580 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2590 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Geometric Shapes (25A0-25FF) */
+ "E_KKK[ RL[LK RMKM[ RN[NK ROKO[ RP[PK RQKQ[ RR[RK RSKS[ RT[TK RUKU[ RV[VK RWKW[ RX[XK RYKY[ RJKZKZ[J[JK", /* U+25A0 SQUARE_BLACK */
+ "E_JKZKZ[J[JK",
+ "E_KLMKWKYLZNZXYZW[M[KZJXJNKL",
+ "E_JKZKZ[J[JK RPPPV RQVQP RRPRV RSVSP RTPTV ROVOPUPUVOV",
+ "E_JWZW RJSZS RJOZO RJKZKZ[J[JK",
+ "E_NKN[ RRKR[ RVKV[ RJKZKZ[J[JK",
+ "E_JWZW RJSZS RJOZO RNKN[ RRKR[ RVKV[ RJKZKZ[J[JK",
+ "E_JKZ[ RN[JW RT[JQ RZUPK RZOVK RJKZKZ[J[JK",
+ "E_J[ZK RJUTK RJONK RP[ZQ RV[ZW RJKZKZ[J[JK",
+ "E_J[ZK RJUTK RJONK RJKZ[ RN[JW RP[ZQ RT[JQ RV[ZW RZUPK RZOVK RJKZKZ[J[JK",
+ "E_PPPV RQVQP RRPRV RSVSP RTPTV ROVOPUPUVOV",
+ "E_OVOPUPUVOV",
+ "E_JXTN RJWSN RJVRN RJUQN RJTPN RJSON RJRNN RJQMN RJPLN RJOKN RKXUN RLXVN RMXWN RNXXN ROXYN RPXZN RQXZO RRXZP RSXZQ RTXZR RUXZS RVXZT RWXZU RXXZV RYXZW RJNZNZXJXJN",
+ "E_JNZNZXJXJN",
+ "E_M[WQ RMZWP RMYWO RMXWN RMWWM RMVWL RMUWK RMTVK RMSUK RMRTK RMQSK RMPRK RMOQK RMNPK RMMOK RMLNK RN[WR RO[WS RP[WT RQ[WU RR[WV RS[WW RT[WX RU[WY RV[WZ RM[MKWKW[M[",
+ "E_M[MKWKW[M[",
+ "E_NNLP RONKR RPNJT RQNIV RRNHX RSNIX RTNJX RUNKX RVNLX RWNMX RXVVX RXNNX RYTUX RYNOX RZRTX RZNPX R[PSX R[NQX R\\NRX RHXMN\\NWXHX", /* U+25B0 PARALLELOGRAM_BLACK */
+ "E_HXMN\\NWXHX",
+ "E_JZJ[ RKXK[ RLVL[ RMTM[ RNSN[ ROQO[ RPOP[ RQMQ[ RRKR[ RSMS[ RTOT[ RUQU[ RVSV[ RWTW[ RXVX[ RYXY[ RZ[RLJ[ RZZZ[ RRK[[I[RK",
+ "E_RK[[I[RK",
+ "E_OUOV RPSPV RQQQV RRORV RSQSV RTSTV RUUUV ROVRPUV RROVVNVRO",
+ "E_ROVVNVRO",
+ "E_KKK[ RLLLZ RMLMZ RNMNY ROMOY RPNPX RQNQX RRORW RSPSV RTPTV RUQUU RVQVU RWSXS RWRWT RJKYSJ[ RZSJ\\JJZS",
+ "E_ZSJ\\JJZS",
+ "E_PPPV RQQQU RRQRU RSSUS RSRST ROPUSOV RVSOWOOVS",
+ "E_VSOWOOVS",
+ "E_KNKX RLNLX RMOMW RNONW ROOOW RPPPV RQPQV RRPRV RSQSU RTQTU RURUT RVRVT RWRWT RXSWS RJNYSJX RZSJYJMZS",
+ "E_ZSJYJMZS",
+ "E_ZLZK RYNYK RXPXK RWRWK RVSVK RUUUK RTWTK RSYSK RR[RK RQYQK RPWPK ROUOK RNSNK RMRMK RLPLK RKNKK RJKRZZK RJLJK RR[IK[KR[",
+ "E_R[IK[KR[",
+ "E_UQUP RTSTP RSUSP RRWRP RQUQP RPSPP ROQOP RUPRVOP RRWNPVPRW",
+ "E_RWNPVPRW",
+ "E_Y[YK RXZXL RWZWL RVYVM RUYUM RTXTN RSXSN RRWRO RQVQP RPVPP ROUOQ RNUNQ RMSLS RMTMR RZ[KSZK RJSZJZ\\JS", /* U+25C0 *TRIANGLE_E_BLACK */
+ "E_JSZJZ\\JS",
+ "E_TVTP RSUSQ RRURQ RQSOS RQTQR RUVOSUP RNSUOUWNS",
+ "E_NSUOUWNS",
+ "E_YXYN RXXXN RWWWO RVWVO RUWUO RTVTP RSVSP RRVRP RQUQQ RPUPQ ROTOR RNTNR RMTMR RLSMS RZXKSZN RJSZMZYJS",
+ "E_JSZMZYJS",
+ "E_JRJT RKUKQ RLPLV RMWMO RNNNX ROYOM RPLPZ RQ[QK RRJR\\ RS[SK RTLTZ RUYUM RVNVX RWWWO RXPXV RYUYQ RZRZT RRJ[SR\\ISRJ",
+ "E_RJ[SR\\ISRJ",
+ "E_RJ[SR\\ISRJ RPRPT RQUQQ RRPRV RSUSQ RTRTT RRPUSRVOSRP",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQPU RQUQQ RRPRV RSUSQ RTQTU RPTRVTT RPRRPTR RPQRPTQUSTURVPUOSPQ",
+ "E_RaJSRFZSRa",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_JQKO RKWJU RNLPK RP[NZ RTKVL RVZT[ RYOZQ RZUYW",
+ "E_NLNZ RRKR[ RVLVZ RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RPQRPTQUSTURVPUOSPQ",
+ "E_KOKW RLXP[ RLNPK RLMLY RMYMM RNLNZ ROZOL RPKP[ RQ[QK RRKR[ RS[SK RT[XX RTKT[ RTKXN RUZUL RVLVZ RWYWM RXMXY RYWYO RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RKOKW RLYLM RMMMY RNZNL ROLOZ RP[LX RP[PK RLN RQKQ[ RR[P[LYJUJQLMPKRKR[", /* U+25D0 CIRCLE CIRCLE_LEFTHALF_BLACK */
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RYWYO RXMXY RWYWM RVLVZ RUZUL RTKXN RTKT[ RXX RS[SK RRKTKXMZQZUXYT[R[RK",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RKOKS RLMLS RMSMM RNLNS ROSOL RPKLN RPKPS RQKQS RRKRS RSKSS RTSTK RXN RULUS RVSVL RWMWS RXMXS RYOYS RJSJQLMPKTKXMZQZSJS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RYWYS RXYXS RWSWY RVZVS RUSUZ RT[XX RT[TS RS[SS RR[RS RQ[QS RPSP[ RLX ROZOS RNSNZ RMYMS RLYLS RKWKS RZSZUXYT[P[LYJUJSZS",
+ "E_SSSK RTKTS RTKXN RUSUL RVLVS RWSWM RXMXS RYSYO RZSRSRK RPKTKXMZQZUXYT[P[LYJUJQLMPK",
+ "E_QSQ[ RP[PS RP[LX ROSOZ RNZNS RMSMY RLYLS RKSKW RJSRSR[ RT[P[LYJUJQLMPKTKXMZQZUXYT[ RYWYO RXMXY RWYWM RVLVZ RUZUL RTKXN RTKT[ RXX RS[SK RRKTKXMZQZUXYT[R[RK",
+ "E_KOKW RLYLM RMMMY RNZNL ROLOZ RP[LX RP[PK RLN RQKQ[ RR[P[LYJUJQLMPKRKR[",
+ "E_YWYO RXMXY RWYWM RVLVZ RUZUL RTKXN RTKT[ RXX RS[SK RRKTKXMZQZUXYT[R[RK",
+ "E_FDFb RGbGD RHDHb RIbID RJDJb RKbKD RLbLW RLDLO RMXMb RMNMD RNbNY RNDNM ROZOb ROLOD RPbPZ RPDPL RQZQb RQLQD RRbRZ RRDRL RSZSb RSLSD RTbTZ RTDTL RUZUb RULUD RVbVY RVDVM RWXWb RWNWD RXbXW RXDXO RYbYD RZDZb R[b[D R\\D\\b R]b]D R^D^b R_bEbED_D_b RKTKRLONMQLSLVMXOYRYTXWVYSZQZNYLWKT",
+ "E_FRFD RGNIJ RGDGN RHLHD RIDIK RJJJD RJJMG RKDKI RLHLD RMHQF RMDMH RNGND ROPOS RODOG RPSPP RPGPD RQPQS RQDQG RRSRO RRGRD RSPSS RSFWH RSDSG RTSTP RTGTD RUPUS RUDUG RVGVD RWGZJ RWDWH RXHXD RYDYI RZJZD R[J]N R[D[K R\\L\\D R]D]N R^R^D ROQROUQ RNSOPROUPVSNS RFSFRGNIKJJMHQGSGWHZJ[K]N^R^S_S_DEDESFS R^T^b R]X[\\ R]b]X R\\Z\\b R[b[[ RZ\\Zb RZ\\W_ RYbY] RX^Xb RW^S` RWbW^ RV_Vb RUVUS RUbU_ RTSTV RT_Tb RSVSS RSbS_ RRSRW RR_Rb RQVQS RQ`M^ RQbQ_ RPSPV RP_Pb ROVOS RObO_ RN_Nb RM_J\\ RMbM^ RL^Lb RKbK] RJ\\Jb RI\\GX RIbI[ RHZHb RGbGX RFTFb RUURWOU RVSUVRWOVNSVS R^S^T]X[[Z\\W^S_Q_M^J\\I[GXFTFSESEb_b_S^S",
+ "E_FRFD RGNIJ RGDGN RHLHD RIDIK RJJJD RJJMG RKDKI RLHLD RMHQF RMDMH RNGND ROPOS RODOG RPSPP RPGPD RQPQS RQDQG RRSRO RRGRD RSPSS RSFWH RSDSG RTSTP RTGTD RUPUS RUDUG RVGVD RWGZJ RWDWH RXHXD RYDYI RZJZD R[J]N R[D[K R\\L\\D R]D]N R^R^D ROQROUQ RNSOPROUPVSNS RFSFRGNIKJJMHQGSGWHZJ[K]N^R^S_S_DEDESFS",
+ "E_^T^b R]X[\\ R]b]X R\\Z\\b R[b[[ RZ\\Zb RZ\\W_ RYbY] RX^Xb RW^S` RWbW^ RV_Vb RUVUS RUbU_ RTSTV RT_Tb RSVSS RSbS_ RRSRW RR_Rb RQVQS RQ`M^ RQbQ_ RPSPV RP_Pb ROVOS RObO_ RN_Nb RM_J\\ RMbM^ RL^Lb RKbK] RJ\\Jb RI\\GX RIbI[ RHZHb RGbGX RFTFb RUURWOU RVSUVRWOVNSVS R^S^T]X[[Z\\W^S_Q_M^J\\I[GXFTFSESEb_b_S^S",
+ "E_JSJQLMPKRK",
+ "E_ZSZQXMTKRK",
+ "E_ZSZUXYT[R[",
+ "E_JSJULYP[R[",
+ "E_JSJQLMPKTKXMZQZS", /* U+25E0 CIRCLE_TOPHALF */
+ "E_ZSZUXYT[P[LYJUJS",
+ "E_KZK[ RLYL[ RMXM[ RNWN[ ROVO[ RPUP[ RQTQ[ RRSR[ RSRS[ RTQT[ RUPU[ RVOV[ RWNW[ RXMX[ RYLY[ RZ[ZKJ[Z[",
+ "E_YZY[ RXYX[ RWXW[ RVWV[ RUVU[ RTUT[ RSTS[ RRSR[ RQRQ[ RPQP[ ROPO[ RNON[ RMNM[ RLML[ RKLK[ RJ[JKZ[J[",
+ "E_YLYK RXMXK RWNWK RVOVK RUPUK RTQTK RSRSK RRSRK RQTQK RPUPK ROVOK RNWNK RMXMK RLYLK RKZKK RJKJ[ZKJK",
+ "E_KLKK RLMLK RMNMK RNONK ROPOK RPQPK RQRQK RRSRK RSTSK RTUTK RUVUK RVWVK RWXWK RXYXK RYZYK RZKZ[JKZK",
+ "E_PQRPTQUSTURVPUOSPQ",
+ "E_JKZKZ[J[JK RK[KK RLKL[ RM[MK RNKN[ RO[OK RPKP[ RQ[QK RJ[JKRKR[J[",
+ "E_JKZKZ[J[JK RYKY[ RX[XK RWKW[ RV[VK RUKU[ RT[TK RSKS[ RZKZ[R[RKZK",
+ "E_JKZKZ[J[JK RYLYK RXMXK RWNWK RVOVK RUPUK RTQTK RSRSK RRSRK RQTQK RPUPK ROVOK RNWNK RMXMK RLYLK RKZKK RJKJ[ZKJK",
+ "E_JKZKZ[J[JK RKZK[ RLYL[ RMXM[ RNWN[ ROVO[ RPUP[ RQTQ[ RRSR[ RSRS[ RTQT[ RUPU[ RVOV[ RWNW[ RXMX[ RYLY[ RZ[ZKJ[Z[",
+ "E_JKZKZ[J[JK RR[RK",
+ "E_RK[[I[RK RRUQVRWSVRURW",
+ "E_J[RL RJZJ[ RKXK[ RLVL[ RMTM[ RNSN[ ROQO[ RPOP[ RQMQ[ RRKR[ RRK[[I[RK",
+ "E_Z[RL RZZZ[ RYXY[ RXVX[ RWTW[ RVSV[ RUQU[ RTOT[ RSMS[ RRKR[ RRKI[[[RK",
+ "C`OFTFXHZJ\\N\\SZWXYT[O[KYIWGSGNIJKHOF",
+ "E_JKZKZ[J[JK RRKRSJS", /* U+25F0 SQUARE !QUADRANT */
+ "E_JKZKZ[J[JK RR[RSJS",
+ "E_JKZKZ[J[JK RR[RSZS",
+ "E_JKZKZ[J[JK RRKRSZS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRKRSJS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RR[RSJS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RR[RSZS",
+ "E_PKTKXMZQZUXYT[P[LYJUJQLMPK RRKRSZS",
+ "E_JKJ[ZKJK",
+ "E_ZKZ[JKZK",
+ "E_J[JKZ[J[",
+ "E_JKZKZ[J[JK",
+ "E_KKK[ RL[LK RMKM[ RN[NK ROKO[ RP[PK RQKQ[ RR[RK RSKS[ RT[TK RUKU[ RV[VK RWKW[ RX[XK RYKY[ RJKZKZ[J[JK",
+ "E_OVOPUPUVOV",
+ "E_PPPV RQVQP RRPRV RSVSP RTPTV ROVOPUPUVOV",
+ "E_Z[ZKJ[Z[",
+ /* // Miscellaneous Symbols (2600-26FF) */
+ "F^K[KFYFY[K[", /* U+2600 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2610 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2620 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2630 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2640 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2650 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2660 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2670 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2680 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2690 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+26F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Dingbats (2700-27BF) */
+ "F^K[KFYFY[K[", /* U+2700 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2710 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2720 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2730 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2740 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2750 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2760 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2770 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2780 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2790 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Miscellaneous Mathematical Symbols A (27C0-27EF) */
+ "F^K[KFYFY[K[", /* U+27C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+27E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Supplemental Arrows A (27F0-27FF) */
+ "F^K[KFYFY[K[", /* U+27F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Braille Patterns (2800-28FF) */
+ "F^K[KFYFY[K[", /* U+2800 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2810 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2820 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2830 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2840 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2850 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2860 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2870 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2880 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2890 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+28F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Supplemental Arrows B (2900-297F) */
+ "F^K[KFYFY[K[", /* U+2900 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2910 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2920 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2930 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2940 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2950 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2960 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2970 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Miscellaneous Mathematical Symbols B (2980-29FF) */
+ "F^K[KFYFY[K[", /* U+2980 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2990 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29A0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29B0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29C0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29D0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29E0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+29F0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Supplemental Mathematical Operators (2A00-2AFF) */
+ "F^K[KFYFY[K[", /* U+2A00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2A90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2AF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ /* // Miscellaneous Symbols and Arrows (2B00-2BFF) */
+ "F^K[KFYFY[K[", /* U+2B00 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B10 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B20 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B30 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B40 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B50 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B60 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B70 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B80 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2B90 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BA0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BB0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BC0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BD0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BE0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[", /* U+2BF0 */
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+ "F^K[KFYFY[K[",
+};
+/* --- unused glyphs --- */
+/* RECTANGLE_V_BLACK_SMALL */
+/* TRIANGLE_TALL_BLACK */
+/* COMBINING */
+/* DIAMOND_SMALL */
diff --git a/helpers/tools_to_build_newstroke-font/symbol.dcm b/helpers/tools_to_build_newstroke-font/symbol.dcm
new file mode 100644
index 0000000..33a9cca
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/symbol.dcm
@@ -0,0 +1,3 @@
+EESchema-DOCLIB Version 2.0 Date: Чтв 28 Янв 2010 20:43:31
+#
+#End Doc Library
diff --git a/helpers/tools_to_build_newstroke-font/symbol.lib b/helpers/tools_to_build_newstroke-font/symbol.lib
new file mode 100644
index 0000000..411e807
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/symbol.lib
@@ -0,0 +1,5337 @@
+EESchema-LIBRARY Version 2.3 Date: Чтв 28 Янв 2010 20:43:31
+#
+# ALL_AROUND_PROFILE
+#
+DEF ALL_AROUND_PROFILE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALL_AROUND_PROFILE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 0 -400 0 -400 200 N
+P 3 0 1 0 400 400 0 400 -400 0 N
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ALTERNATIVE_KEY
+#
+DEF ALTERNATIVE_KEY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ALTERNATIVE_KEY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 0 600 0 N
+P 3 0 1 0 400 600 600 800 400 1000 N
+P 4 0 1 0 -600 0 -300 0 300 800 600 800 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE
+#
+DEF ANGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_ARC
+#
+DEF ANGLE_ARC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_ARC" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 0 -400 400 400 800 N
+P 5 0 1 0 50 100 100 200 150 400 100 600 50 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_MEAS
+#
+DEF ANGLE_MEAS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_MEAS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 800 -400 0 400 0 N
+P 4 0 1 0 -100 400 0 300 100 50 100 -100 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_RIGHT
+#
+DEF ANGLE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_RIGHT_ARC
+#
+DEF ANGLE_RIGHT_ARC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_RIGHT_ARC" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 800 -400 0 400 0 N
+P 6 0 1 0 -400 600 -300 600 -50 500 100 350 200 100 200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ANGLE_RIGHT_ARROW_DOWN_ZIGZAG
+#
+DEF ANGLE_RIGHT_ARROW_DOWN_ZIGZAG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ANGLE_RIGHT_ARROW_DOWN_ZIGZAG" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 -200 -600 -200 -600 0 N
+P 3 0 1 0 -400 800 -400 0 400 0 N
+P 4 0 1 0 -600 -200 -150 250 -650 500 -150 1000 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_BAR_E
+#
+DEF ARROW_BAR_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_BAR_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 400 600 400 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_CLOCKWISE_OPEN
+#
+DEF ARROW_CLOCKWISE_OPEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_CLOCKWISE_OPEN" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -450 800 -150 800 -150 500 N
+P 14 0 1 0 250 700 300 650 350 500 350 400 300 250 200 150 50 100 -50 100 -200 150 -300 250 -350 400 -350 500 -300 650 -150 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_CLOCKWISE_SEMI
+#
+DEF ARROW_CLOCKWISE_SEMI U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_CLOCKWISE_SEMI" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 500 350 300 550 500 N
+P 10 0 1 0 -350 450 -350 500 -300 650 -200 750 -50 800 50 800 200 750 300 650 350 500 350 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_CORNER_NE
+#
+DEF ARROW_CORNER_NE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_CORNER_NE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 200 600 N
+P 3 0 1 0 -400 800 400 800 400 0 N
+P 3 0 1 0 -150 600 200 600 200 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_E
+#
+DEF ARROW_DBL_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 3 0 1 0 -100 600 100 400 -100 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_N
+#
+DEF ARROW_DBL_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 300 0 500 200 300 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_N_PEDESTAL_WHITE
+#
+DEF ARROW_DBL_N_PEDESTAL_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_N_PEDESTAL_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -100 550 -250 550 0 800 250 550 100 550 N
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 400 -250 400 0 650 250 400 150 400 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_DBL_N_WHITE
+#
+DEF ARROW_DBL_N_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_DBL_N_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -100 550 -250 550 0 800 250 550 100 550 N
+P 8 0 1 0 150 0 -150 0 -150 400 -250 400 0 650 250 400 150 400 150 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E
+#
+DEF ARROW_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_BAR
+#
+DEF ARROW_E_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 600 -400 200 N
+P 2 0 1 0 400 400 -400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_DASHED
+#
+DEF ARROW_E_DASHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_DASHED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 -250 400 N
+P 2 0 1 0 -50 400 50 400 N
+P 2 0 1 0 250 400 400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_DBL
+#
+DEF ARROW_E_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 250 250 N
+P 2 0 1 0 -400 550 250 550 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_DBL_SLASH
+#
+DEF ARROW_E_DBL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_DBL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 250 250 N
+P 2 0 1 0 -400 550 250 550 N
+P 2 0 1 0 0 650 -200 150 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_HOOK
+#
+DEF ARROW_E_HOOK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_HOOK" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+P 6 0 1 0 400 400 -250 400 -350 450 -400 550 -350 650 -250 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_LOOP
+#
+DEF ARROW_E_LOOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_LOOP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+P 9 0 1 0 400 400 -250 400 -350 450 -400 550 -350 650 -250 700 -150 650 -100 550 -100 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_N
+#
+DEF ARROW_E_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_N" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 0 -200 600 400 600 N
+P 3 0 1 0 200 400 400 600 200 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_N_WHITE
+#
+DEF ARROW_E_N_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_N_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 450 600 200 850 200 750 -400 750 -400 0 -100 0 -100 450 200 450 200 350 450 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_SLASH
+#
+DEF ARROW_E_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 600 -200 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_SMALL
+#
+DEF ARROW_E_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 400 150 400 N
+P 3 0 1 0 50 300 150 400 50 500 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_SMALL_CIRCLE
+#
+DEF ARROW_E_SMALL_CIRCLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_SMALL_CIRCLE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 3 0 1 0 200 200 400 400 200 600 N
+P 13 0 1 0 100 450 100 350 50 250 -50 200 -150 200 -250 250 -300 350 -300 450 -250 550 -150 600 -50 600 50 550 100 450 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_SQUIGGLE
+#
+DEF ARROW_E_SQUIGGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_SQUIGGLE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+P 7 0 1 0 -400 300 -250 500 -100 300 50 500 200 300 300 400 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_STROKE
+#
+DEF ARROW_E_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -100 600 -100 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_STROKE_DBL
+#
+DEF ARROW_E_STROKE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_STROKE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -250 600 -250 200 N
+P 2 0 1 0 0 600 0 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_TAIL
+#
+DEF ARROW_E_TAIL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_TAIL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 400 -200 400 N
+P 3 0 1 0 -400 600 -200 400 -400 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_TPL
+#
+DEF ARROW_E_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_TPL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 150 150 150 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 650 150 650 N
+P 3 0 1 0 50 750 400 400 50 50 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_WALL_WHITE
+#
+DEF ARROW_E_WALL_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_WALL_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -400 650 -200 650 -200 550 150 550 150 650 400 400 150 150 150 250 -200 250 -200 150 -400 150 -400 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_WAVE
+#
+DEF ARROW_E_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 200 400 500 100 500 N
+P 8 0 1 0 400 500 250 350 150 300 50 350 -50 450 -150 500 -250 450 -400 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_E_WHITE
+#
+DEF ARROW_E_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_E_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 250 -400 550 150 550 150 650 400 400 150 150 150 250 -400 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N
+#
+DEF ARROW_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_BAR
+#
+DEF ARROW_N_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 200 0 -200 0 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_BAR_WHITE
+#
+DEF ARROW_N_BAR_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_BAR_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 150 0 -150 0 -150 200 150 200 150 0 N
+P 8 0 1 0 150 400 -150 400 -150 550 -250 550 0 800 250 550 150 550 150 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_DASHED
+#
+DEF ARROW_N_DASHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_DASHED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 150 N
+P 2 0 1 0 0 350 0 450 N
+P 2 0 1 0 0 650 0 800 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_DBL
+#
+DEF ARROW_N_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 650 -150 0 N
+P 2 0 1 0 150 650 150 0 N
+P 3 0 1 0 250 550 0 800 -250 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_E
+#
+DEF ARROW_N_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 200 200 200 200 800 N
+P 3 0 1 0 400 600 200 800 0 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_PEDESTAL_WHITE
+#
+DEF ARROW_N_PEDESTAL_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_PEDESTAL_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 550 -250 550 0 800 250 550 150 550 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_PEDESTAL_WHITE_HBAR
+#
+DEF ARROW_N_PEDESTAL_WHITE_HBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_PEDESTAL_WHITE_HBAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 650 150 650 N
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 550 -250 550 0 800 250 550 150 550 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_PEDESTAL_WHITE_VBAR
+#
+DEF ARROW_N_PEDESTAL_WHITE_VBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_PEDESTAL_WHITE_VBAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 800 0 0 N
+P 12 0 1 0 250 0 -250 0 -250 200 -150 200 -150 550 -250 550 0 800 250 550 150 550 150 200 250 200 250 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_STROKE_DBL
+#
+DEF ARROW_N_STROKE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_STROKE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 150 200 150 N
+P 2 0 1 0 -200 400 200 400 N
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_N_WHITE
+#
+DEF ARROW_N_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_N_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 150 0 -150 0 -150 550 -250 550 0 800 250 550 150 550 150 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NE
+#
+DEF ARROW_NE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 750 -350 50 N
+P 3 0 1 0 0 750 350 750 350 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NE_DBL
+#
+DEF ARROW_NE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -450 150 150 750 N
+P 2 0 1 0 -250 -50 350 550 N
+P 3 0 1 0 -50 750 350 750 350 350 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NE_TOP_BAR
+#
+DEF ARROW_NE_TOP_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NE_TOP_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 350 750 -350 50 N
+P 2 0 1 0 350 950 -350 950 N
+P 3 0 1 0 0 750 350 750 350 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NS_BAR
+#
+DEF ARROW_NS_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NS_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 200 0 N
+P 2 0 1 0 0 0 0 800 N
+P 3 0 1 0 -200 200 0 0 200 200 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NS_DBL
+#
+DEF ARROW_NS_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NS_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 150 -150 650 N
+P 2 0 1 0 150 150 150 650 N
+P 3 0 1 0 -250 250 0 0 250 250 N
+P 3 0 1 0 250 550 0 800 -250 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_NS_WHITE
+#
+DEF ARROW_NS_WHITE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_NS_WHITE" 0 -350 60 H V C CNN
+DRAW
+P 11 0 1 0 -250 550 0 800 250 550 150 550 150 250 250 250 0 0 -250 250 -150 250 -150 550 -250 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_OPEN_E
+#
+DEF ARROW_OPEN_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_OPEN_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 400 -400 400 N
+P 4 0 1 0 200 200 200 600 400 400 200 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_OPEN_WE
+#
+DEF ARROW_OPEN_WE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_OPEN_WE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 400 200 400 N
+P 4 0 1 0 -200 200 -400 400 -200 600 -200 200 N
+P 4 0 1 0 200 200 200 600 400 400 200 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_DBL
+#
+DEF ARROW_WE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 250 250 250 N
+P 2 0 1 0 -250 550 250 550 N
+P 3 0 1 0 -150 150 -400 400 -150 650 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_DBL_SLASH
+#
+DEF ARROW_WE_DBL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_DBL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 250 250 250 N
+P 2 0 1 0 -250 550 250 550 N
+P 2 0 1 0 50 650 -50 150 N
+P 3 0 1 0 -150 150 -400 400 -150 650 N
+P 3 0 1 0 150 650 400 400 150 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_SLASH
+#
+DEF ARROW_WE_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 100 600 -100 200 N
+P 3 0 1 0 -200 600 -400 400 -200 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_STROKE
+#
+DEF ARROW_WE_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 600 0 200 N
+P 3 0 1 0 -200 600 -400 400 -200 200 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_STROKE_DBL
+#
+DEF ARROW_WE_STROKE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_STROKE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -100 600 -100 200 N
+P 2 0 1 0 100 600 100 200 N
+P 3 0 1 0 -200 200 -400 400 -200 600 N
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_WE_WAVE
+#
+DEF ARROW_WE_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_WE_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -100 300 -400 300 -400 600 N
+P 3 0 1 0 400 200 400 500 100 500 N
+P 8 0 1 0 400 500 250 350 150 300 50 350 -50 450 -150 500 -250 450 -400 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROW_ZIGZAG
+#
+DEF ARROW_ZIGZAG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROW_ZIGZAG" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -100 200 0 0 200 100 N
+P 4 0 1 0 -150 800 -300 350 200 600 0 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWHEAD_E
+#
+DEF ARROWHEAD_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWHEAD_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 200 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWHEAD_N
+#
+DEF ARROWHEAD_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWHEAD_N" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWHEAD_N_BETWEEN_BARS
+#
+DEF ARROWHEAD_N_BETWEEN_BARS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWHEAD_N_BETWEEN_BARS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 800 -500 800 N
+P 2 0 1 0 300 800 500 800 N
+P 3 0 1 0 -200 600 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_E_E
+#
+DEF ARROWS_E_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_E_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 400 600 -400 600 N
+P 5 0 1 0 200 0 400 200 200 400 400 600 200 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_E_E_E
+#
+DEF ARROWS_E_E_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_E_E_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 2 0 1 0 -400 800 400 800 N
+P 2 0 1 0 400 400 -400 400 N
+P 7 0 1 0 200 1000 400 800 200 600 400 400 200 200 400 0 200 -200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_N_N
+#
+DEF ARROWS_N_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_N_N" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 800 N
+P 2 0 1 0 200 800 200 0 N
+P 5 0 1 0 -400 600 -200 800 0 600 200 800 400 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_N_S
+#
+DEF ARROWS_N_S U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_N_S" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 0 -200 800 N
+P 2 0 1 0 200 800 200 0 N
+P 3 0 1 0 -400 600 -200 800 0 600 N
+P 3 0 1 0 0 200 200 0 400 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ARROWS_W_E
+#
+DEF ARROWS_W_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ARROWS_W_E" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 400 600 -400 600 N
+P 3 0 1 0 -200 400 -400 600 -200 800 N
+P 3 0 1 0 200 0 400 200 200 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASSERTION
+#
+DEF ASSERTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASSERTION" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 400 200 400 N
+P 2 0 1 0 -200 800 -200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISK
+#
+DEF ASTERISK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1050 0 800 N
+P 3 0 1 0 -250 900 0 800 250 900 N
+P 3 0 1 0 -150 600 0 800 150 600 N
+X CENTER ~ 0 800 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISK_OP
+#
+DEF ASTERISK_OP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISK_OP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 350 200 N
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 350 600 -350 200 N
+X ACCENT ~ 0 800 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASTERISM
+#
+DEF ASTERISM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASTERISM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 450 -350 200 N
+P 2 0 1 0 0 1050 0 800 N
+P 2 0 1 0 350 450 350 200 N
+P 3 0 1 0 -600 300 -350 200 -100 300 N
+P 3 0 1 0 -500 0 -350 200 -200 0 N
+P 3 0 1 0 -250 900 0 800 250 900 N
+P 3 0 1 0 -150 600 0 800 150 600 N
+P 3 0 1 0 100 300 350 200 600 300 N
+P 3 0 1 0 200 0 350 200 500 0 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASYMP
+#
+DEF ASYMP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASYMP" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 250 -350 300 -200 350 -50 300 50 200 200 150 350 200 400 250 N
+P 8 0 1 0 -400 550 -350 600 -200 650 -50 600 50 500 200 450 350 500 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ASYMP_MINUS
+#
+DEF ASYMP_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ASYMP_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 8 0 1 0 -400 400 -350 450 -200 500 -50 450 50 350 200 300 350 350 400 400 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BAG_MEMBERSHIP
+#
+DEF BAG_MEMBERSHIP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BAG_MEMBERSHIP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 500 500 500 N
+P 4 0 1 0 500 1000 -550 1000 -550 0 500 0 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BAR_VERT_DBL_STILE_RIGHT_DBL
+#
+DEF BAR_VERT_DBL_STILE_RIGHT_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BAR_VERT_DBL_STILE_RIGHT_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 -400 0 N
+P 2 0 1 0 -100 250 350 250 N
+P 2 0 1 0 -100 550 350 550 N
+P 2 0 1 0 -100 800 -100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BAR_VERT_TPL_STILE_RIGHT
+#
+DEF BAR_VERT_TPL_STILE_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BAR_VERT_TPL_STILE_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 -400 0 N
+P 2 0 1 0 -150 800 -150 0 N
+P 2 0 1 0 100 800 100 0 N
+P 2 0 1 0 350 400 100 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BELL
+#
+DEF BELL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BELL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -200 400 -200 0 -400 0 N
+P 3 0 1 0 200 400 200 0 400 0 N
+P 9 0 1 0 -400 400 -400 500 -300 700 -100 800 100 800 300 700 400 500 400 400 -400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BENZENE
+#
+DEF BENZENE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BENZENE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 200 N
+P 2 0 1 0 0 0 350 200 N
+P 2 0 1 0 0 800 350 600 N
+P 7 0 1 0 0 1100 600 750 600 50 0 -300 -600 50 -600 750 0 1100 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BENZENE_RING
+#
+DEF BENZENE_RING U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BENZENE_RING" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 1100 600 750 600 50 0 -300 -600 50 -600 750 0 1100 N
+P 17 0 1 0 -50 750 50 750 200 700 300 600 350 450 350 350 300 200 200 100 50 50 -50 50 -200 100 -300 200 -350 350 -350 450 -300 600 -200 700 -50 750 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BETWEEN
+#
+DEF BETWEEN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BETWEEN" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -150 1200 -100 1150 0 1000 50 900 100 750 150 500 150 300 100 50 50 -100 0 -200 -100 -350 -150 -400 N
+P 12 0 1 0 150 -400 100 -350 0 -200 -50 -100 -100 50 -150 300 -150 500 -100 750 -50 900 0 1000 100 1150 150 1200 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BOWTIE
+#
+DEF BOWTIE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BOWTIE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 800 400 0 400 800 -400 0 -400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_MIDDLE
+#
+DEF BRACE_MIDDLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_MIDDLE" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 1150 0 900 -50 700 -100 600 -300 400 -100 200 -50 100 0 -100 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_OVER
+#
+DEF BRACE_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_OVER" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -800 -150 -800 -100 -750 0 -650 50 -150 50 -50 100 0 200 50 100 150 50 650 50 750 0 800 -100 800 -150 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACE_TOP
+#
+DEF BRACE_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACE_TOP" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 300 1150 100 950 50 850 0 650 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_OVER
+#
+DEF BRACKET_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_OVER" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -750 -150 -750 100 750 100 750 -150 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BRACKET_TOP
+#
+DEF BRACKET_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BRACKET_TOP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 300 1000 0 1000 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_METRICAL
+#
+DEF BREVE_METRICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_METRICAL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -200 500 -200 450 -150 350 -50 300 50 300 150 350 200 450 200 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_METRICAL_JOINED
+#
+DEF BREVE_METRICAL_JOINED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_METRICAL_JOINED" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 500 -400 450 -350 350 -250 300 -150 300 -50 350 0 450 0 500 N
+P 8 0 1 0 0 500 0 450 50 350 150 300 250 300 350 350 400 450 400 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BREVE_METRICAL_X2
+#
+DEF BREVE_METRICAL_X2 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BREVE_METRICAL_X2" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -550 500 -550 450 -500 350 -400 300 -300 300 -200 350 -150 450 -150 500 N
+P 8 0 1 0 150 500 150 450 200 350 300 300 400 300 500 350 550 450 550 500 N
+X ABOVE ~ 0 750 100 R 50 50 1 1 I
+X BELOW ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# BROKEN_BAR
+#
+DEF BROKEN_BAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "BROKEN_BAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 -350 0 200 N
+P 2 0 1 0 0 1050 0 500 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CARET_INSERTION
+#
+DEF CARET_INSERTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CARET_INSERTION" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 -200 200 200 N
+P 2 0 1 0 200 -200 0 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE
+#
+DEF CIRCLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_BLACK
+#
+DEF CIRCLE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 200 N
+P 2 0 1 0 -300 150 -100 0 N
+P 2 0 1 0 -300 650 -100 800 N
+P 2 0 1 0 -300 700 -300 100 N
+P 2 0 1 0 -250 100 -250 700 N
+P 2 0 1 0 -200 750 -200 50 N
+P 2 0 1 0 -150 50 -150 750 N
+P 2 0 1 0 -100 800 -100 0 N
+P 2 0 1 0 -50 0 -50 800 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 50 0 50 800 N
+P 2 0 1 0 100 0 300 150 N
+P 2 0 1 0 100 800 100 0 N
+P 2 0 1 0 100 800 300 650 N
+P 2 0 1 0 150 50 150 750 N
+P 2 0 1 0 200 750 200 50 N
+P 2 0 1 0 250 100 250 700 N
+P 2 0 1 0 300 700 300 100 N
+P 2 0 1 0 350 200 350 600 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_BLACKQ
+#
+DEF CIRCLE_BLACKQ U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_BLACKQ" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 400 50 800 N
+P 2 0 1 0 100 800 100 400 N
+P 2 0 1 0 100 800 300 650 N
+P 2 0 1 0 150 400 150 750 N
+P 2 0 1 0 200 750 200 400 N
+P 2 0 1 0 250 400 250 700 N
+P 2 0 1 0 300 700 300 400 N
+P 2 0 1 0 350 400 350 600 N
+P 3 0 1 0 400 400 0 400 0 800 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_DASHED
+#
+DEF CIRCLE_DASHED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_DASHED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 500 -350 600 N
+P 2 0 1 0 -350 200 -400 300 N
+P 2 0 1 0 -200 750 -100 800 N
+P 2 0 1 0 -100 0 -200 50 N
+P 2 0 1 0 100 800 200 750 N
+P 2 0 1 0 200 50 100 0 N
+P 2 0 1 0 350 600 400 500 N
+P 2 0 1 0 400 300 350 200 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_FILLV
+#
+DEF CIRCLE_FILLV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_FILLV" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 750 -200 50 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 200 750 200 50 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_INVERSE_HALF
+#
+DEF CIRCLE_INVERSE_HALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_INVERSE_HALF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 450 -600 1150 N
+P 2 0 1 0 -550 650 -450 850 N
+P 2 0 1 0 -550 1150 -550 650 N
+P 2 0 1 0 -500 750 -500 1150 N
+P 2 0 1 0 -450 1150 -450 800 N
+P 2 0 1 0 -400 850 -400 1150 N
+P 2 0 1 0 -400 850 -250 1000 N
+P 2 0 1 0 -350 1150 -350 900 N
+P 2 0 1 0 -300 950 -300 1150 N
+P 2 0 1 0 -250 950 -50 1050 N
+P 2 0 1 0 -250 1150 -250 950 N
+P 2 0 1 0 -200 1000 -200 1150 N
+P 2 0 1 0 -150 550 -150 400 N
+P 2 0 1 0 -150 1150 -150 1000 N
+P 2 0 1 0 -100 400 -100 550 N
+P 2 0 1 0 -100 1000 -100 1150 N
+P 2 0 1 0 -50 550 -50 400 N
+P 2 0 1 0 -50 1150 -50 1000 N
+P 2 0 1 0 0 400 0 600 N
+P 2 0 1 0 0 1000 0 1150 N
+P 2 0 1 0 50 550 50 400 N
+P 2 0 1 0 50 1050 250 950 N
+P 2 0 1 0 50 1150 50 1000 N
+P 2 0 1 0 100 400 100 550 N
+P 2 0 1 0 100 1000 100 1150 N
+P 2 0 1 0 150 550 150 400 N
+P 2 0 1 0 150 1150 150 1000 N
+P 2 0 1 0 200 1000 200 1150 N
+P 2 0 1 0 250 1000 400 850 N
+P 2 0 1 0 250 1150 250 950 N
+P 2 0 1 0 300 950 300 1150 N
+P 2 0 1 0 350 1150 350 900 N
+P 2 0 1 0 400 850 400 1150 N
+P 2 0 1 0 450 850 550 650 N
+P 2 0 1 0 450 1150 450 800 N
+P 2 0 1 0 500 750 500 1150 N
+P 2 0 1 0 550 1150 550 650 N
+P 2 0 1 0 600 450 600 1150 N
+P 3 0 1 0 -150 500 0 600 150 500 N
+P 6 0 1 0 -200 400 -150 550 0 600 150 550 200 400 -200 400 N
+P 19 0 1 0 -600 400 -600 450 -550 650 -450 800 -400 850 -250 950 -50 1000 50 1000 250 950 400 850 450 800 550 650 600 450 600 400 650 400 650 1150 -650 1150 -650 400 -600 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_LARGE
+#
+DEF CIRCLE_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 17 0 1 0 -150 1050 100 1050 300 950 400 850 500 650 500 400 400 200 300 100 100 0 -150 0 -350 100 -450 200 -550 400 -550 650 -450 850 -350 950 -150 1050 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_LARGE_SLASH
+#
+DEF CIRCLE_LARGE_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_LARGE_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 0 500 1050 N
+P 17 0 1 0 -150 1050 100 1050 300 950 400 850 500 650 500 400 400 200 300 100 100 0 -150 0 -350 100 -450 200 -550 400 -550 650 -450 850 -350 950 -150 1050 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_LEFTHALF_BLACK
+#
+DEF CIRCLE_LEFTHALF_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_LEFTHALF_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 200 N
+P 2 0 1 0 -300 100 -300 700 N
+P 2 0 1 0 -250 700 -250 100 N
+P 2 0 1 0 -200 50 -200 750 N
+P 2 0 1 0 -150 750 -150 50 N
+P 2 0 1 0 -100 0 -300 150 N
+P 2 0 1 0 -100 0 -100 800 N
+P 2 0 1 0 -100 800 -300 650 N
+P 2 0 1 0 -50 800 -50 0 N
+P 9 0 1 0 0 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 0 800 0 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_MID
+#
+DEF CIRCLE_MID U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_MID" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_QUAD
+#
+DEF CIRCLE_QUAD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_QUAD" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 400 -400 500 -300 700 -100 800 0 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_SMALL
+#
+DEF CIRCLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -100 500 0 550 100 500 150 400 100 300 0 250 -100 300 -150 400 -100 500 N
+X ABOVE ~ 0 800 100 R 50 50 1 1 I
+X BELOW ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_SMALL_BLACK
+#
+DEF CIRCLE_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 500 -100 300 N
+P 2 0 1 0 -50 300 -50 500 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 300 50 500 N
+P 2 0 1 0 100 500 100 300 N
+P 3 0 1 0 -100 350 0 250 100 350 N
+P 3 0 1 0 -100 450 0 550 100 450 N
+P 9 0 1 0 -100 500 0 550 100 500 150 400 100 300 0 250 -100 300 -150 400 -100 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_SMALL_BLACK_INVERSE
+#
+DEF CIRCLE_SMALL_BLACK_INVERSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_SMALL_BLACK_INVERSE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 1150 -600 -350 N
+P 2 0 1 0 -550 -350 -550 1150 N
+P 2 0 1 0 -500 1150 -500 -350 N
+P 2 0 1 0 -450 -350 -450 1150 N
+P 2 0 1 0 -400 1150 -400 -350 N
+P 2 0 1 0 -350 -350 -350 1150 N
+P 2 0 1 0 -300 -350 -300 200 N
+P 2 0 1 0 -300 1150 -300 600 N
+P 2 0 1 0 -250 150 -250 -350 N
+P 2 0 1 0 -250 650 -250 1150 N
+P 2 0 1 0 -200 -350 -200 100 N
+P 2 0 1 0 -200 1150 -200 700 N
+P 2 0 1 0 -150 50 -150 -350 N
+P 2 0 1 0 -150 750 -150 1150 N
+P 2 0 1 0 -100 -350 -100 50 N
+P 2 0 1 0 -100 1150 -100 750 N
+P 2 0 1 0 -50 50 -50 -350 N
+P 2 0 1 0 -50 750 -50 1150 N
+P 2 0 1 0 0 -350 0 50 N
+P 2 0 1 0 0 1150 0 750 N
+P 2 0 1 0 50 50 50 -350 N
+P 2 0 1 0 50 750 50 1150 N
+P 2 0 1 0 100 -350 100 50 N
+P 2 0 1 0 100 1150 100 750 N
+P 2 0 1 0 150 50 150 -350 N
+P 2 0 1 0 150 750 150 1150 N
+P 2 0 1 0 200 -350 200 100 N
+P 2 0 1 0 200 1150 200 700 N
+P 2 0 1 0 250 150 250 -350 N
+P 2 0 1 0 250 650 250 1150 N
+P 2 0 1 0 300 -350 300 200 N
+P 2 0 1 0 300 1150 300 600 N
+P 2 0 1 0 350 -350 350 1150 N
+P 2 0 1 0 400 1150 400 -350 N
+P 2 0 1 0 450 -350 450 1150 N
+P 2 0 1 0 500 1150 500 -350 N
+P 2 0 1 0 550 -350 550 1150 N
+P 2 0 1 0 600 1150 600 -350 N
+P 5 0 1 0 650 -350 -650 -350 -650 1150 650 1150 650 -350 N
+P 17 0 1 0 -350 350 -350 450 -300 600 -200 700 -50 750 50 750 200 700 300 600 350 450 350 350 300 200 200 100 50 50 -50 50 -200 100 -300 200 -350 350 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_TOPHALF
+#
+DEF CIRCLE_TOPHALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_TOPHALF" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 400 -400 500 -300 700 -100 800 100 800 300 700 400 500 400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CIRCLE_TOPHALF_BLACK
+#
+DEF CIRCLE_TOPHALF_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CIRCLE_TOPHALF_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 -350 400 N
+P 2 0 1 0 -300 700 -300 400 N
+P 2 0 1 0 -250 400 -250 700 N
+P 2 0 1 0 -200 750 -200 400 N
+P 2 0 1 0 -150 400 -150 750 N
+P 2 0 1 0 -100 800 -300 650 N
+P 2 0 1 0 -100 800 -100 400 N
+P 2 0 1 0 -50 800 -50 400 N
+P 2 0 1 0 0 800 0 400 N
+P 2 0 1 0 50 800 50 400 N
+P 2 0 1 0 100 400 100 800 N
+P 2 0 1 0 100 800 300 650 N
+P 2 0 1 0 150 750 150 400 N
+P 2 0 1 0 200 400 200 750 N
+P 2 0 1 0 250 700 250 400 N
+P 2 0 1 0 300 700 300 400 N
+P 2 0 1 0 350 600 350 400 N
+P 9 0 1 0 -400 400 -400 500 -300 700 -100 800 100 800 300 700 400 500 400 400 -400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CLEAR_KEY
+#
+DEF CLEAR_KEY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CLEAR_KEY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 400 800 -400 0 N
+P 5 0 1 0 -600 800 600 800 600 0 -600 0 -600 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COLON_EQUAL
+#
+DEF COLON_EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COLON_EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 550 600 550 N
+P 2 0 1 0 600 250 -200 250 N
+P 6 0 1 0 -550 250 -500 200 -550 150 -600 200 -550 250 -550 150 N
+P 6 0 1 0 -550 650 -500 600 -550 550 -600 600 -550 650 -550 550 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMPLEMENT
+#
+DEF COMPLEMENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMPLEMENT" 0 -350 60 H V C CNN
+DRAW
+P 14 0 1 0 200 950 150 1000 50 1050 -100 1050 -200 1000 -250 950 -300 800 -300 250 -250 100 -200 50 -100 0 50 0 150 50 200 100 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COMPOSITION
+#
+DEF COMPOSITION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COMPOSITION" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 800 0 0 -800 0 -800 800 0 800 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -1050 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# COPYRIGHT
+#
+DEF COPYRIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "COPYRIGHT" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 200 800 100 850 -100 850 -200 800 -300 700 -350 600 -350 400 -300 300 -200 200 -100 150 100 150 200 200 N
+P 17 0 1 0 0 1200 -250 1150 -500 1000 -650 750 -700 500 -650 250 -500 0 -250 -150 0 -200 250 -150 500 0 650 250 700 500 650 750 500 1000 250 1150 0 1200 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CORNER
+#
+DEF CORNER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CORNER" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 1050 -200 1050 -200 700 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CROP
+#
+DEF CROP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CROP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 200 0 0 N
+P 2 0 1 0 200 400 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CURRENCY
+#
+DEF CURRENCY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CURRENCY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 100 -150 250 N
+P 2 0 1 0 -300 750 -150 600 N
+P 2 0 1 0 200 250 350 100 N
+P 2 0 1 0 200 600 350 750 N
+P 13 0 1 0 200 250 100 200 -50 200 -150 250 -200 350 -200 500 -150 600 -50 650 100 650 200 600 250 500 250 350 200 250 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# CYLINDRICITY
+#
+DEF CYLINDRICITY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "CYLINDRICITY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 650 -350 150 N
+P 2 0 1 0 350 650 100 150 N
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DASH_OP_SMALL
+#
+DEF DASH_OP_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DASH_OP_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 300 200 300 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEGREE
+#
+DEF DEGREE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEGREE" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 0 1050 -100 1000 -150 900 -100 800 0 750 100 800 150 900 100 1000 0 1050 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DEL
+#
+DEF DEL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DEL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -350 0 -350 1050 350 1050 350 0 -350 0 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DELTA_CAP_ABOVE
+#
+DEF DELTA_CAP_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DELTA_CAP_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 1400 -200 850 200 850 0 1400 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND
+#
+DEF DIAMOND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 850 450 400 0 -50 -450 400 0 850 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND_BLACK
+#
+DEF DIAMOND_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 450 -400 350 N
+P 2 0 1 0 -350 300 -350 500 N
+P 2 0 1 0 -300 550 -300 250 N
+P 2 0 1 0 -250 200 -250 600 N
+P 2 0 1 0 -200 650 -200 150 N
+P 2 0 1 0 -150 100 -150 700 N
+P 2 0 1 0 -100 750 -100 50 N
+P 2 0 1 0 -50 0 -50 800 N
+P 2 0 1 0 0 850 0 -50 N
+P 2 0 1 0 50 0 50 800 N
+P 2 0 1 0 100 750 100 50 N
+P 2 0 1 0 150 100 150 700 N
+P 2 0 1 0 200 650 200 150 N
+P 2 0 1 0 250 200 250 600 N
+P 2 0 1 0 300 550 300 250 N
+P 2 0 1 0 350 300 350 500 N
+P 2 0 1 0 400 450 400 350 N
+P 5 0 1 0 0 850 450 400 0 -50 -450 400 0 850 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND_SMALL
+#
+DEF DIAMOND_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 550 150 400 0 250 -150 400 0 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIAMOND_SMALL_BLACK
+#
+DEF DIAMOND_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIAMOND_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 450 -100 350 N
+P 2 0 1 0 -50 300 -50 500 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 300 50 500 N
+P 2 0 1 0 100 450 100 350 N
+P 5 0 1 0 0 550 150 400 0 250 -150 400 0 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIESIS
+#
+DEF DIESIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIESIS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 250 0 N
+P 2 0 1 0 -250 700 250 700 N
+P 2 0 1 0 0 1050 0 -350 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIFFERENCE
+#
+DEF DIFFERENCE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIFFERENCE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 250 -400 250 N
+P 10 0 1 0 -400 550 -200 550 -200 600 -150 700 -50 750 50 750 150 700 200 600 200 550 400 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIMENSION_ORIGIN
+#
+DEF DIMENSION_ORIGIN U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIMENSION_ORIGIN" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 400 450 400 N
+P 2 0 1 0 0 700 0 100 N
+P 3 0 1 0 300 550 450 400 300 250 N
+P 13 0 1 0 200 450 150 550 50 600 -50 600 -150 550 -200 450 -200 350 -150 250 -50 200 50 200 150 250 200 350 200 450 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIRECT_CURRENT
+#
+DEF DIRECT_CURRENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIRECT_CURRENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 -300 250 N
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 -50 250 50 250 N
+P 2 0 1 0 300 250 400 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DIVIDE
+#
+DEF DIVIDE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DIVIDE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 400 -400 400 N
+P 6 0 1 0 0 150 50 100 0 50 -50 100 0 150 0 50 N
+P 6 0 1 0 0 750 50 700 0 650 -50 700 0 750 0 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOT
+#
+DEF DOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 450 -50 400 0 350 50 400 0 450 0 350 N
+X ABOVE ~ 0 700 100 R 50 50 1 1 I
+X BELOW ~ 0 100 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_3
+#
+DEF DOTS_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_3" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 450 -250 400 -300 350 -350 400 -300 450 -300 350 N
+P 6 0 1 0 300 100 350 50 300 0 250 50 300 100 300 0 N
+P 6 0 1 0 300 800 350 750 300 700 250 750 300 800 300 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_4
+#
+DEF DOTS_4 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_4" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -350 450 -300 400 -350 350 -400 400 -350 450 -350 350 N
+P 6 0 1 0 0 100 50 50 0 0 -50 50 0 100 0 0 N
+P 6 0 1 0 0 800 50 750 0 700 -50 750 0 800 0 700 N
+P 6 0 1 0 350 450 400 400 350 350 300 400 350 450 350 350 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_5
+#
+DEF DOTS_5 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_5" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 150 -250 100 -300 50 -350 100 -300 150 -300 50 N
+P 6 0 1 0 -300 750 -250 700 -300 650 -350 700 -300 750 -300 650 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 300 150 350 100 300 50 250 100 300 150 300 50 N
+P 6 0 1 0 300 750 350 700 300 650 250 700 300 750 300 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# DOTS_FOUR_VERT
+#
+DEF DOTS_FOUR_VERT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "DOTS_FOUR_VERT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 -150 50 -200 0 -250 -50 -200 0 -150 0 -250 N
+P 6 0 1 0 0 250 50 200 0 150 -50 200 0 250 0 150 N
+P 6 0 1 0 0 650 50 600 0 550 -50 600 0 650 0 550 N
+P 6 0 1 0 0 1050 50 1000 0 950 -50 1000 0 1050 0 950 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELECTRIC
+#
+DEF ELECTRIC U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELECTRIC" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 500 0 200 0 600 400 300 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT
+#
+DEF ELEMENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 500 500 -550 500 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_DBLSTROKE
+#
+DEF ELEMENT_DBLSTROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_DBLSTROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 350 500 350 N
+P 2 0 1 0 -500 650 500 650 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ABOVE ~ 0 1250 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_MINUS
+#
+DEF ELEMENT_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 -250 500 -250 N
+P 2 0 1 0 500 550 -550 550 N
+P 10 0 1 0 500 1050 -150 1050 -350 950 -450 850 -550 650 -550 450 -450 250 -350 150 -150 50 500 50 N
+X ABOVE ~ 0 1300 100 R 50 50 1 1 I
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_MINUS_SMALL
+#
+DEF ELEMENT_MINUS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_MINUS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 400 -200 -400 -200 N
+P 10 0 1 0 400 50 -100 50 -250 100 -350 200 -400 350 -400 450 -350 600 -250 700 -100 750 400 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_SLASH
+#
+DEF ELEMENT_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 450 1200 -500 -150 N
+P 2 0 1 0 500 500 -550 500 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_SMALL
+#
+DEF ELEMENT_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 10 0 1 0 400 50 -100 50 -250 100 -350 200 -400 350 -400 450 -350 600 -250 700 -100 750 400 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_STROKE
+#
+DEF ELEMENT_STROKE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_STROKE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -800 500 500 500 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_STROKEBAR
+#
+DEF ELEMENT_STROKEBAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_STROKEBAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 500 500 500 N
+P 2 0 1 0 500 700 500 300 N
+P 10 0 1 0 500 1000 -150 1000 -350 900 -450 800 -550 600 -550 400 -450 200 -350 100 -150 0 500 0 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELEMENT_STROKEBAR_SMALL
+#
+DEF ELEMENT_STROKEBAR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELEMENT_STROKEBAR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 400 550 400 250 N
+P 10 0 1 0 400 50 -100 50 -250 100 -350 200 -400 350 -400 450 -350 600 -250 700 -100 750 400 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELLIPSIS_DIAG
+#
+DEF ELLIPSIS_DIAG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELLIPSIS_DIAG" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -500 950 -450 900 -500 850 -550 900 -500 950 -500 850 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 500 -50 550 -100 500 -150 450 -100 500 -50 500 -150 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELLIPSIS_MID
+#
+DEF ELLIPSIS_MID U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELLIPSIS_MID" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -500 450 -450 400 -500 350 -550 400 -500 450 -500 350 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 500 450 550 400 500 350 450 400 500 450 500 350 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ELLIPSIS_VERT
+#
+DEF ELLIPSIS_VERT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ELLIPSIS_VERT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 -50 50 -100 0 -150 -50 -100 0 -50 0 -150 N
+P 6 0 1 0 0 450 50 400 0 350 -50 400 0 450 0 350 N
+P 6 0 1 0 0 950 50 900 0 850 -50 900 0 950 0 850 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 750 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EMPHASIS
+#
+DEF EMPHASIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EMPHASIS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 550 -700 550 N
+P 2 0 1 0 -400 300 -600 150 N
+P 2 0 1 0 -400 800 -600 950 N
+P 2 0 1 0 600 150 400 300 N
+P 2 0 1 0 600 950 400 800 N
+P 2 0 1 0 700 550 500 550 N
+P 11 0 1 0 100 350 0 300 -100 300 -200 350 -250 450 -250 500 -200 650 -100 750 0 800 200 800 100 300 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ENTER_SYM
+#
+DEF ENTER_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ENTER_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -650 400 150 400 N
+P 3 0 1 0 -50 200 150 400 -50 600 N
+P 6 0 1 0 -400 200 -400 0 400 0 400 800 -400 800 -400 600 N
+X ~ ~ -750 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL
+#
+DEF EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 400 250 -400 250 N
+X ABOVE ~ 0 850 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL_DEF
+#
+DEF EQUAL_DEF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL_DEF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 350 1200 550 1200 N
+P 2 0 1 0 400 250 -400 250 N
+P 4 0 1 0 550 1400 450 1350 400 1250 400 850 N
+P 9 0 1 0 -250 1400 -250 850 -350 850 -450 900 -500 1000 -500 1100 -450 1200 -350 1250 -250 1250 N
+P 9 0 1 0 -50 1050 200 1050 200 1200 150 1250 0 1250 -50 1200 -50 900 0 850 150 850 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL_SLASH
+#
+DEF EQUAL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 100 700 -100 100 N
+P 2 0 1 0 400 250 -400 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUAL_SMALL
+#
+DEF EQUAL_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUAL_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 200 300 200 N
+P 2 0 1 0 -300 400 300 400 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUIVALENT
+#
+DEF EQUIVALENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUIVALENT" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -400 150 -300 200 -100 250 100 250 300 200 400 150 N
+P 6 0 1 0 -400 650 -300 600 -100 550 100 550 300 600 400 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EQUIVALENT_GEOM
+#
+DEF EQUIVALENT_GEOM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EQUIVALENT_GEOM" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -400 250 -200 250 -200 200 -150 100 -50 50 50 50 150 100 200 200 200 250 400 250 N
+P 10 0 1 0 -400 550 -200 550 -200 600 -150 700 -50 750 50 750 150 700 200 600 200 550 400 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ERASE_TO_RIGHT
+#
+DEF ERASE_TO_RIGHT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ERASE_TO_RIGHT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 400 800 -400 0 N
+P 6 0 1 0 -600 800 400 800 800 400 400 0 -600 0 -600 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ESCAPE
+#
+DEF ESCAPE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ESCAPE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 350 -400 800 N
+P 3 0 1 0 -400 600 -400 800 -200 800 N
+P 11 0 1 0 50 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 350 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# EXCESS
+#
+DEF EXCESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "EXCESS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 100 400 N
+P 6 0 1 0 350 150 400 100 350 50 300 100 350 150 350 50 N
+P 6 0 1 0 350 750 400 700 350 650 300 700 350 750 350 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FLOOR_CAP
+#
+DEF FLOOR_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FLOOR_CAP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 0 -150 0 -150 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FORCES
+#
+DEF FORCES U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FORCES" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 -400 0 N
+P 2 0 1 0 -100 400 400 400 N
+P 2 0 1 0 -100 800 -100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# FUSE
+#
+DEF FUSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "FUSE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 400 500 400 N
+P 5 0 1 0 -400 700 400 700 400 100 -400 100 -400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GREATER_NOTEQUAL
+#
+DEF GREATER_NOTEQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GREATER_NOTEQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 100 350 -100 -250 N
+P 2 0 1 0 400 -100 -400 -100 N
+P 3 0 1 0 -400 400 400 700 -400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GREATER_WAVE
+#
+DEF GREATER_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GREATER_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 250 400 550 -400 850 N
+P 8 0 1 0 -400 50 -350 100 -200 150 -50 100 50 0 200 -50 350 0 400 50 N
+X CENTER_W ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# GROUND
+#
+DEF GROUND U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "GROUND" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 600 500 600 N
+P 2 0 1 0 -300 300 300 300 N
+P 2 0 1 0 0 1050 0 600 N
+P 2 0 1 0 100 0 -100 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARPOON_RIGHT_N
+#
+DEF HARPOON_RIGHT_N U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARPOON_RIGHT_N" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 0 0 800 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARPOON_UP_E
+#
+DEF HARPOON_UP_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARPOON_UP_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 400 400 400 200 600 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HARPOONS_W_E
+#
+DEF HARPOONS_W_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HARPOONS_W_E" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 250 400 250 200 50 N
+P 3 0 1 0 400 550 -400 550 -200 750 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HASH
+#
+DEF HASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 450 700 N
+P 2 0 1 0 0 1150 -300 -200 N
+P 2 0 1 0 350 250 -400 250 N
+P 3 0 1 0 50 -200 350 1150 350 1150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HASH_SYM
+#
+DEF HASH_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HASH_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 600 400 600 N
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 200 800 200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HELM
+#
+DEF HELM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HELM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 600 350 200 N
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 350 600 -350 200 N
+P 13 0 1 0 0 700 -150 650 -250 550 -300 400 -250 250 -150 150 0 100 150 150 250 250 300 400 250 550 150 650 0 700 N
+X ACCENT ~ 0 800 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HEXAGON_H_CAP
+#
+DEF HEXAGON_H_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HEXAGON_H_CAP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -300 0 -600 500 -300 1000 300 1000 600 500 300 0 -300 0 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HOURGLASS
+#
+DEF HOURGLASS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HOURGLASS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -250 0 0 250 250 0 N
+P 3 0 1 0 -200 0 0 200 200 0 N
+P 3 0 1 0 -100 0 0 100 100 0 N
+P 3 0 1 0 50 0 0 50 -50 0 N
+P 3 0 1 0 150 0 0 150 -150 0 N
+P 5 0 1 0 350 700 0 550 -350 700 0 600 350 700 N
+P 13 0 1 0 -400 1050 400 1050 400 800 350 700 -350 350 -400 250 -400 0 400 0 400 250 350 350 -350 700 -400 850 -400 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HOUSE
+#
+DEF HOUSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HOUSE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -400 0 -400 600 0 1000 400 600 400 0 -400 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# HYSTERESIS
+#
+DEF HYSTERESIS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "HYSTERESIS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -450 0 200 0 200 800 N
+P 3 0 1 0 -200 0 -200 800 450 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# I_BEAM
+#
+DEF I_BEAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "I_BEAM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -300 400 -300 N
+P 2 0 1 0 -400 1050 400 1050 N
+P 2 0 1 0 0 1050 0 -300 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IDENTICAL
+#
+DEF IDENTICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IDENTICAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 700 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# IMAGEOF
+#
+DEF IMAGEOF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "IMAGEOF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 400 250 -400 250 N
+P 6 0 1 0 -350 850 -300 800 -350 750 -400 800 -350 850 -350 750 N
+P 6 0 1 0 350 50 400 0 350 -50 300 0 350 50 350 -50 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INFINITY
+#
+DEF INFINITY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INFINITY" 0 -350 60 H V C CNN
+DRAW
+P 15 0 1 0 100 500 200 550 300 500 350 400 300 300 200 250 100 300 -100 500 -200 550 -300 500 -350 400 -300 300 -200 250 -100 300 100 500 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL
+#
+DEF INTEGRAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CLOCKWISE
+#
+DEF INTEGRAL_CLOCKWISE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CLOCKWISE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 450 300 300 450 450 N
+P 8 0 1 0 -300 400 -250 550 -150 650 0 700 150 650 250 550 300 400 300 300 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CONTOUR
+#
+DEF INTEGRAL_CONTOUR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CONTOUR" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 13 0 1 0 0 700 150 650 250 550 300 400 250 250 150 150 0 100 -150 150 -250 250 -300 400 -250 550 -150 650 0 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CONTOUR_CLOCKWISE
+#
+DEF INTEGRAL_CONTOUR_CLOCKWISE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CONTOUR_CLOCKWISE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 500 300 350 450 500 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 13 0 1 0 -300 400 -250 550 -150 650 0 700 150 650 250 550 300 400 250 250 150 150 0 100 -150 150 -250 250 -300 400 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_CONTOUR_COUNTERCLOCKWISE
+#
+DEF INTEGRAL_CONTOUR_COUNTERCLOCKWISE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_CONTOUR_COUNTERCLOCKWISE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 150 300 300 450 450 300 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 13 0 1 0 -300 400 -250 550 -150 650 0 700 150 650 250 550 300 400 250 250 150 150 0 100 -150 150 -250 250 -300 400 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_DBL
+#
+DEF INTEGRAL_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_DBL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -500 -100 -450 -200 -350 -250 -250 -200 -200 -100 -200 900 -150 1000 -50 1050 50 1000 100 900 N
+P 10 0 1 0 -100 -100 -50 -200 50 -250 150 -200 200 -100 200 900 250 1000 350 1050 450 1000 500 900 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_DBL_CONTOUR
+#
+DEF INTEGRAL_DBL_CONTOUR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_DBL_CONTOUR" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -500 -100 -450 -200 -350 -250 -250 -200 -200 -100 -200 900 -150 1000 -50 1050 50 1000 100 900 N
+P 10 0 1 0 -100 -100 -50 -200 50 -250 150 -200 200 -100 200 900 250 1000 350 1050 450 1000 500 900 N
+P 15 0 1 0 200 700 350 650 450 550 500 400 450 250 350 150 200 100 -200 100 -350 150 -450 250 -500 400 -450 550 -350 650 -200 700 200 700 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_TOP
+#
+DEF INTEGRAL_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_TOP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 0 -350 0 700 50 900 100 1000 200 1050 300 1000 350 900 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_TPL
+#
+DEF INTEGRAL_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_TPL" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -700 -100 -650 -200 -550 -250 -450 -200 -400 -100 -400 900 -350 1000 -250 1050 -150 1000 -100 900 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 10 0 1 0 100 -100 150 -200 250 -250 350 -200 400 -100 400 900 450 1000 550 1050 650 1000 700 900 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTEGRAL_TPL_CONTOUR
+#
+DEF INTEGRAL_TPL_CONTOUR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTEGRAL_TPL_CONTOUR" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -700 -100 -650 -200 -550 -250 -450 -200 -400 -100 -400 900 -350 1000 -250 1050 -150 1000 -100 900 N
+P 10 0 1 0 -300 -100 -250 -200 -150 -250 -50 -200 0 -100 0 900 50 1000 150 1050 250 1000 300 900 N
+P 10 0 1 0 100 -100 150 -200 250 -250 350 -200 400 -100 400 900 450 1000 550 1050 650 1000 700 900 N
+P 15 0 1 0 400 700 550 650 650 550 700 400 650 250 550 150 400 100 -400 100 -550 150 -650 250 -700 400 -650 550 -550 650 -400 700 400 700 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTERCALATE
+#
+DEF INTERCALATE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTERCALATE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 200 1050 N
+P 2 0 1 0 0 1050 0 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# INTERRUPT
+#
+DEF INTERRUPT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "INTERRUPT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 0 -350 600 350 600 0 0 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# KEYBOARD
+#
+DEF KEYBOARD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "KEYBOARD" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -1000 250 1000 250 N
+P 2 0 1 0 -1000 750 1000 750 N
+P 2 0 1 0 -750 500 -750 750 N
+P 2 0 1 0 -700 0 -700 250 N
+P 2 0 1 0 -650 250 -650 500 N
+P 2 0 1 0 -600 750 -600 1000 N
+P 2 0 1 0 -500 500 -500 750 N
+P 2 0 1 0 -400 250 -400 500 N
+P 2 0 1 0 -350 0 -350 250 N
+P 2 0 1 0 -350 750 -350 1000 N
+P 2 0 1 0 -250 500 -250 750 N
+P 2 0 1 0 -150 250 -150 500 N
+P 2 0 1 0 -100 750 -100 1000 N
+P 2 0 1 0 0 500 0 750 N
+P 2 0 1 0 100 250 100 500 N
+P 2 0 1 0 150 750 150 1000 N
+P 2 0 1 0 250 500 250 750 N
+P 2 0 1 0 350 250 350 500 N
+P 2 0 1 0 400 0 400 250 N
+P 2 0 1 0 400 750 400 1000 N
+P 2 0 1 0 500 500 500 750 N
+P 2 0 1 0 600 250 600 500 N
+P 2 0 1 0 650 750 650 1000 N
+P 2 0 1 0 700 0 700 250 N
+P 3 0 1 0 -1000 500 750 500 750 750 N
+P 5 0 1 0 -1000 0 -1000 1000 1000 1000 1000 0 -1000 0 N
+X ~ ~ -1250 0 300 U 50 50 1 1 I
+X ~ ~ 1250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS
+#
+DEF LESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 700 -400 400 400 100 N
+X INSIDE ~ 350 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_EQUAL
+#
+DEF LESS_EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+P 2 0 1 0 400 200 -400 200 N
+P 3 0 1 0 400 400 -400 700 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_GREATER
+#
+DEF LESS_GREATER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_GREATER" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 400 400 100 -400 -200 N
+P 3 0 1 0 400 400 -400 700 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_LESS
+#
+DEF LESS_LESS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_LESS" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 700 -800 400 0 100 N
+P 3 0 1 0 800 700 0 400 800 100 N
+X ~ ~ -1050 0 300 U 50 50 1 1 I
+X ~ ~ 1050 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_MINUS
+#
+DEF LESS_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 50 -400 50 N
+P 3 0 1 0 400 250 -400 550 400 850 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_MINUS_GREATER
+#
+DEF LESS_MINUS_GREATER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_MINUS_GREATER" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 400 -400 400 N
+P 3 0 1 0 -400 200 400 0 -400 -200 N
+P 3 0 1 0 400 600 -400 800 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_NOTEQUAL
+#
+DEF LESS_NOTEQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_NOTEQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+P 2 0 1 0 100 350 -100 -250 N
+P 2 0 1 0 400 200 -400 200 N
+P 3 0 1 0 400 400 -400 700 400 1000 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_TPL
+#
+DEF LESS_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_TPL" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 700 -1200 400 -400 100 N
+P 3 0 1 0 400 700 -400 400 400 100 N
+P 3 0 1 0 1200 700 400 400 1200 100 N
+X ~ ~ -1450 0 300 U 50 50 1 1 I
+X ~ ~ 1450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LESS_WAVE
+#
+DEF LESS_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LESS_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 400 250 -400 550 400 850 N
+P 8 0 1 0 -400 50 -350 100 -200 150 -50 100 50 0 200 -50 350 0 400 50 N
+X CENTER_W ~ 0 50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H
+#
+DEF LINE_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 400 500 400 N
+X CENTER ~ 0 400 100 D 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H_1
+#
+DEF LINE_H_1 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H_1" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 1000 500 1000 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H_3
+#
+DEF LINE_H_3 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H_3" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 700 500 700 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_H_DBL
+#
+DEF LINE_H_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_H_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -500 250 500 250 N
+P 2 0 1 0 -500 550 500 550 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V
+#
+DEF LINE_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 -350 0 1150 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_CAP
+#
+DEF LINE_V_CAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_CAP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 1200 0 -150 N
+X X ~ 0 550 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_DBL
+#
+DEF LINE_V_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 1150 -150 -350 N
+P 2 0 1 0 150 1150 150 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_DBL_SLASH
+#
+DEF LINE_V_DBL_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_DBL_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 250 300 550 N
+P 2 0 1 0 -150 1150 -150 -350 N
+P 2 0 1 0 150 1150 150 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_SLASH
+#
+DEF LINE_V_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 300 200 500 N
+P 2 0 1 0 0 1150 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_SMALL
+#
+DEF LINE_V_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 850 0 -150 N
+X X ~ 0 350 100 L 50 50 1 1 I
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_SYM
+#
+DEF LINE_V_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 0 0 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LINE_V_WAVY
+#
+DEF LINE_V_WAVY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LINE_V_WAVY" 0 -350 60 H V C CNN
+DRAW
+P 19 0 1 0 0 1150 50 1100 100 1000 50 900 0 850 -50 750 0 650 50 600 100 500 50 400 0 350 -50 250 0 150 50 100 100 0 50 -100 0 -150 -50 -250 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOW_LINE
+#
+DEF LOW_LINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOW_LINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -100 400 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOW_LINE_DBL
+#
+DEF LOW_LINE_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOW_LINE_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -350 400 -350 N
+P 2 0 1 0 -400 -100 400 -100 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# LOZENGE
+#
+DEF LOZENGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "LOZENGE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 0 -300 -400 400 0 1050 400 400 0 -300 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# M_SMALL_ABOVE
+#
+DEF M_SMALL_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "M_SMALL_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 1250 -250 850 N
+P 5 0 1 0 -250 1200 -200 1250 -50 1250 0 1200 0 850 N
+P 5 0 1 0 0 1200 50 1250 200 1250 250 1200 250 850 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS
+#
+DEF MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+X ABOVE ~ 0 700 100 R 50 50 1 1 I
+X BELOW ~ 0 100 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS_OR
+#
+DEF MINUS_OR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS_OR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 800 N
+P 3 0 1 0 400 550 0 0 -400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MINUS_SMALL
+#
+DEF MINUS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MINUS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 300 300 300 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MODELS
+#
+DEF MODELS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MODELS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 250 200 250 N
+P 2 0 1 0 -200 550 200 550 N
+P 2 0 1 0 -200 800 -200 0 N
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MONOSTABLE
+#
+DEF MONOSTABLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MONOSTABLE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -450 0 -200 0 -200 800 200 800 200 0 450 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MOUSTACHE
+#
+DEF MOUSTACHE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MOUSTACHE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 250 1150 50 950 0 800 0 0 -50 -150 -250 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MULTIMAP
+#
+DEF MULTIMAP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MULTIMAP" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 -400 400 100 400 150 300 250 250 350 300 400 400 350 500 250 550 150 500 100 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MULTIPLY
+#
+DEF MULTIPLY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MULTIPLY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 700 300 100 N
+P 2 0 1 0 300 700 -300 100 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# MULTIPLY_SMALL
+#
+DEF MULTIPLY_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "MULTIPLY_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 550 250 50 N
+P 2 0 1 0 250 550 -250 50 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NBSP_SYM
+#
+DEF NBSP_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NBSP_SYM" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -400 200 -200 200 -200 0 200 0 200 200 400 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NEXT_PAGE
+#
+DEF NEXT_PAGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NEXT_PAGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 200 0 0 N
+P 2 0 1 0 0 800 0 600 N
+P 3 0 1 0 200 200 400 400 200 600 N
+P 5 0 1 0 -600 800 600 800 600 0 -600 0 -600 800 N
+X ~ ~ -850 0 300 U 50 50 1 1 I
+X ~ ~ 850 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# NOT
+#
+DEF NOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "NOT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -400 500 400 500 400 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OPEN_H
+#
+DEF OPEN_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OPEN_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 800 N
+P 5 0 1 0 -400 400 0 800 400 400 0 0 -400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OPTION_KEY
+#
+DEF OPTION_KEY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OPTION_KEY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 800 600 800 N
+P 4 0 1 0 -600 800 -300 800 300 0 600 0 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR
+#
+DEF OR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -450 800 0 0 450 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR_CURLY
+#
+DEF OR_CURLY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR_CURLY" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 -400 800 -250 700 -150 600 -50 400 0 0 50 400 150 600 250 700 400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR_HUGE
+#
+DEF OR_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -650 1050 0 -300 650 1050 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OR_MINUS
+#
+DEF OR_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OR_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 3 0 1 0 400 800 0 250 -400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# ORIGINAL
+#
+DEF ORIGINAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "ORIGINAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 500 300 300 N
+P 2 0 1 0 350 500 350 300 N
+P 2 0 1 0 400 550 400 250 N
+P 2 0 1 0 450 500 450 300 N
+P 2 0 1 0 500 500 500 300 N
+P 18 0 1 0 -250 400 -300 500 -400 550 -500 500 -550 400 -500 300 -400 250 -300 300 -250 400 250 400 300 300 400 250 500 300 550 400 500 500 400 550 300 500 250 400 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OVERLINE
+#
+DEF OVERLINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OVERLINE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 1000 400 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# OVERLINE_LONG
+#
+DEF OVERLINE_LONG U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "OVERLINE_LONG" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -550 1000 550 1000 N
+X X ~ 0 950 100 L 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PARALLELOGRAM
+#
+DEF PARALLELOGRAM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PARALLELOGRAM" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -500 150 -250 650 500 650 250 150 -500 150 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PARALLELOGRAM_BLACK
+#
+DEF PARALLELOGRAM_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PARALLELOGRAM_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 650 -300 550 N
+P 2 0 1 0 -150 650 -350 450 N
+P 2 0 1 0 -100 650 -400 350 N
+P 2 0 1 0 -50 650 -450 250 N
+P 2 0 1 0 0 650 -500 150 N
+P 2 0 1 0 50 650 -450 150 N
+P 2 0 1 0 100 650 -400 150 N
+P 2 0 1 0 150 650 -350 150 N
+P 2 0 1 0 200 650 -300 150 N
+P 2 0 1 0 250 650 -250 150 N
+P 2 0 1 0 300 250 200 150 N
+P 2 0 1 0 300 650 -200 150 N
+P 2 0 1 0 350 350 150 150 N
+P 2 0 1 0 350 650 -150 150 N
+P 2 0 1 0 400 450 100 150 N
+P 2 0 1 0 400 650 -100 150 N
+P 2 0 1 0 450 550 50 150 N
+P 2 0 1 0 450 650 -50 150 N
+P 2 0 1 0 500 650 0 150 N
+P 5 0 1 0 -500 150 -250 650 500 650 250 150 -500 150 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_OVER
+#
+DEF PAREN_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_OVER" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -800 -100 -750 -50 -600 50 -500 100 -350 150 -100 200 100 200 350 150 500 100 600 50 750 -50 800 -100 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAREN_TOP
+#
+DEF PAREN_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAREN_TOP" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 300 1150 200 1000 150 900 100 750 50 500 0 0 0 -350 N
+X ~ ~ -500 0 300 U 50 50 1 1 I
+X ~ ~ 500 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PAUSE
+#
+DEF PAUSE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PAUSE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 400 -150 400 0 0 150 400 400 400 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PENTASEME_METRICAL
+#
+DEF PENTASEME_METRICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PENTASEME_METRICAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 550 0 300 N
+P 4 0 1 0 -400 550 -400 300 400 300 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERCENT
+#
+DEF PERCENT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERCENT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 600 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERMILLE
+#
+DEF PERMILLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERMILLE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 9 0 1 0 850 300 950 250 1000 150 950 50 850 0 750 50 700 150 750 250 850 300 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 1200 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERMYRIAD
+#
+DEF PERMYRIAD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERMYRIAD" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 1050 N
+P 9 0 1 0 -250 1050 -150 1000 -100 900 -150 800 -250 750 -350 800 -400 900 -350 1000 -250 1050 N
+P 9 0 1 0 850 300 950 250 1000 150 950 50 850 0 750 50 700 150 750 250 850 300 N
+P 9 0 1 0 1450 300 1550 250 1600 150 1550 50 1450 0 1350 50 1300 150 1350 250 1450 300 N
+P 10 0 1 0 350 50 400 150 350 250 250 300 150 250 100 150 150 50 250 0 350 50 350 50 N
+X ~ ~ -600 0 300 U 50 50 1 1 I
+X ~ ~ 1800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PERSPECTIVE
+#
+DEF PERSPECTIVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PERSPECTIVE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 650 400 650 N
+P 2 0 1 0 -400 950 400 950 N
+P 3 0 1 0 -400 0 0 400 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PI_CAP_HUGE
+#
+DEF PI_CAP_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PI_CAP_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 -250 400 1050 -400 1050 -400 -250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PILLOW
+#
+DEF PILLOW U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PILLOW" 0 -350 60 H V C CNN
+DRAW
+P 21 0 1 0 450 850 400 750 350 550 350 250 400 50 450 -50 350 0 150 50 -150 50 -350 0 -450 -50 -400 50 -350 250 -350 550 -400 750 -450 850 -350 800 -150 750 150 750 350 800 450 850 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PITCHFORK
+#
+DEF PITCHFORK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PITCHFORK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 800 0 0 N
+P 10 0 1 0 -300 0 -300 400 -250 550 -200 600 -50 650 50 650 200 600 250 550 300 400 300 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLACE_OF_INTEREST
+#
+DEF PLACE_OF_INTEREST U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLACE_OF_INTEREST" 0 -350 60 H V C CNN
+DRAW
+P 29 0 1 0 -300 550 300 550 400 600 450 700 400 800 300 850 200 800 150 700 150 100 200 0 300 -50 400 0 450 100 400 200 300 250 -300 250 -400 200 -450 100 -400 0 -300 -50 -200 0 -150 100 -150 700 -200 800 -300 850 -400 800 -450 700 -400 600 -300 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS
+#
+DEF PLUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 0 0 0 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS_MINUS
+#
+DEF PLUS_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 600 400 600 N
+P 2 0 1 0 0 200 0 1000 N
+P 2 0 1 0 400 0 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PLUS_SMALL
+#
+DEF PLUS_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PLUS_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -300 300 300 300 N
+P 2 0 1 0 0 600 0 0 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDES
+#
+DEF PRECEDES U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDES" 0 -350 60 H V C CNN
+DRAW
+P 9 0 1 0 400 800 300 650 200 550 0 450 -400 400 0 350 200 250 300 150 400 0 N
+X INSIDE ~ 350 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDES_WAVE
+#
+DEF PRECEDES_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDES_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 0 -350 50 -200 100 -50 50 50 -50 200 -100 350 -50 400 0 N
+P 9 0 1 0 400 950 300 800 200 700 0 600 -400 550 0 500 200 400 300 300 400 150 N
+X CENTER_W ~ 0 0 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDESEQ
+#
+DEF PRECEDESEQ U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDESEQ" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 250 0 200 200 100 300 0 400 -150 N
+P 9 0 1 0 400 950 300 800 200 700 0 600 -400 550 0 500 200 400 300 300 400 150 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRECEDESREL
+#
+DEF PRECEDESREL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRECEDESREL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 200 800 300 750 350 650 300 550 200 500 0 450 -400 400 0 350 200 300 300 250 350 150 300 50 200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME
+#
+DEF PRIME U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1050 -50 750 N
+X ~ ~ -250 0 300 U 50 50 1 1 I
+X ~ ~ 250 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME_DBL
+#
+DEF PRIME_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME_DBL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 1050 -200 750 N
+P 2 0 1 0 250 1050 100 750 N
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME_TPL
+#
+DEF PRIME_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME_TPL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 1050 -350 750 N
+P 2 0 1 0 100 1050 -50 750 N
+P 2 0 1 0 400 1050 250 750 N
+X ~ ~ -550 0 300 U 50 50 1 1 I
+X ~ ~ 550 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRIME_X4
+#
+DEF PRIME_X4 U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRIME_X4" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 1050 -500 750 N
+P 2 0 1 0 -50 1050 -200 750 N
+P 2 0 1 0 250 1050 100 750 N
+P 2 0 1 0 550 1050 400 750 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRODUCT_NORMAL_FACTOR_SEMIDIRECT
+#
+DEF PRODUCT_NORMAL_FACTOR_SEMIDIRECT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRODUCT_NORMAL_FACTOR_SEMIDIRECT" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 800 -400 0 -400 800 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PRODUCT_SEMIDIRECT
+#
+DEF PRODUCT_SEMIDIRECT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PRODUCT_SEMIDIRECT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 0 400 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PROPORTION
+#
+DEF PROPORTION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PROPORTION" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -300 150 -250 100 -300 50 -350 100 -300 150 -300 50 N
+P 6 0 1 0 -300 750 -250 700 -300 650 -350 700 -300 750 -300 650 N
+P 6 0 1 0 300 150 350 100 300 50 250 100 300 150 300 50 N
+P 6 0 1 0 300 750 350 700 300 650 250 700 300 750 300 650 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# PROPORTIONAL
+#
+DEF PROPORTIONAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "PROPORTIONAL" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 300 550 250 550 150 500 -50 300 -150 250 -250 300 -300 400 -250 500 -150 550 -50 500 150 300 250 250 300 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUADRANT
+#
+DEF QUADRANT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUADRANT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 800 0 400 400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# QUESTION_ABOVE
+#
+DEF QUESTION_ABOVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "QUESTION_ABOVE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 950 50 900 0 850 -50 900 0 950 0 850 N
+P 7 0 1 0 -200 1350 -100 1400 50 1400 150 1350 200 1250 150 1150 50 1100 N
+X X ~ 0 850 100 L 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RADICAL
+#
+DEF RADICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RADICAL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -250 350 -50 400 50 0 800 1250 N
+X MIDDLE ~ 500 750 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RATIO
+#
+DEF RATIO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RATIO" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 150 50 100 0 50 -50 100 0 150 0 50 N
+P 6 0 1 0 0 750 50 700 0 650 -50 700 0 750 0 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE
+#
+DEF RECTANGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 650 400 650 400 150 -400 150 -400 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_BLACK
+#
+DEF RECTANGLE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 150 100 650 N
+P 2 0 1 0 -400 200 50 650 N
+P 2 0 1 0 -400 250 0 650 N
+P 2 0 1 0 -400 300 -50 650 N
+P 2 0 1 0 -400 350 -100 650 N
+P 2 0 1 0 -400 400 -150 650 N
+P 2 0 1 0 -400 450 -200 650 N
+P 2 0 1 0 -400 500 -250 650 N
+P 2 0 1 0 -400 550 -300 650 N
+P 2 0 1 0 -400 600 -350 650 N
+P 2 0 1 0 -350 150 150 650 N
+P 2 0 1 0 -300 150 200 650 N
+P 2 0 1 0 -250 150 250 650 N
+P 2 0 1 0 -200 150 300 650 N
+P 2 0 1 0 -150 150 350 650 N
+P 2 0 1 0 -100 150 400 650 N
+P 2 0 1 0 -50 150 400 600 N
+P 2 0 1 0 0 150 400 550 N
+P 2 0 1 0 50 150 400 500 N
+P 2 0 1 0 100 150 400 450 N
+P 2 0 1 0 150 150 400 400 N
+P 2 0 1 0 200 150 400 350 N
+P 2 0 1 0 250 150 400 300 N
+P 2 0 1 0 300 150 400 250 N
+P 2 0 1 0 350 150 400 200 N
+P 5 0 1 0 -400 650 400 650 400 150 -400 150 -400 650 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V
+#
+DEF RECTANGLE_V U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -250 0 -250 800 250 800 250 0 -250 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_BLACK
+#
+DEF RECTANGLE_V_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 250 500 N
+P 2 0 1 0 -250 50 250 550 N
+P 2 0 1 0 -250 100 250 600 N
+P 2 0 1 0 -250 150 250 650 N
+P 2 0 1 0 -250 200 250 700 N
+P 2 0 1 0 -250 250 250 750 N
+P 2 0 1 0 -250 300 250 800 N
+P 2 0 1 0 -250 350 200 800 N
+P 2 0 1 0 -250 400 150 800 N
+P 2 0 1 0 -250 450 100 800 N
+P 2 0 1 0 -250 500 50 800 N
+P 2 0 1 0 -250 550 0 800 N
+P 2 0 1 0 -250 600 -50 800 N
+P 2 0 1 0 -250 650 -100 800 N
+P 2 0 1 0 -250 700 -150 800 N
+P 2 0 1 0 -250 750 -200 800 N
+P 2 0 1 0 -200 0 250 450 N
+P 2 0 1 0 -150 0 250 400 N
+P 2 0 1 0 -100 0 250 350 N
+P 2 0 1 0 -50 0 250 300 N
+P 2 0 1 0 0 0 250 250 N
+P 2 0 1 0 50 0 250 200 N
+P 2 0 1 0 100 0 250 150 N
+P 2 0 1 0 150 0 250 100 N
+P 2 0 1 0 200 0 250 50 N
+P 5 0 1 0 -250 0 -250 800 250 800 250 0 -250 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_BLACK_SMALL
+#
+DEF RECTANGLE_V_BLACK_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_BLACK_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -50 600 -50 200 N
+P 2 0 1 0 0 600 0 200 N
+P 2 0 1 0 50 600 50 200 N
+P 5 0 1 0 -100 600 100 600 100 200 -100 200 -100 600 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_HUGE
+#
+DEF RECTANGLE_V_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 1050 450 1050 450 -300 -450 -300 -450 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# RECTANGLE_V_HUGE_SLASH
+#
+DEF RECTANGLE_V_HUGE_SLASH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "RECTANGLE_V_HUGE_SLASH" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -450 -300 -450 1050 450 1050 450 -300 -450 -300 450 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# REGISTERED
+#
+DEF REGISTERED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "REGISTERED" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 150 0 450 N
+P 9 0 1 0 -200 150 -200 850 100 850 200 800 250 700 250 600 200 500 100 450 -200 450 N
+P 17 0 1 0 0 1200 -250 1150 -500 1000 -650 750 -700 500 -650 250 -500 0 -250 -150 0 -200 250 -150 500 0 650 250 700 500 650 750 500 1000 250 1150 0 1200 N
+X ~ ~ -900 0 300 U 50 50 1 1 I
+X ~ ~ 900 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# S_LAZY
+#
+DEF S_LAZY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "S_LAZY" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -250 550 -350 500 -400 400 -350 300 -250 250 -100 300 100 500 250 550 350 500 400 400 350 300 250 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SCREEN_CLEAR
+#
+DEF SCREEN_CLEAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SCREEN_CLEAR" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 0 600 -400 200 N
+P 2 0 1 0 400 600 0 200 N
+P 13 0 1 0 -550 150 -550 650 -500 750 -400 800 400 800 500 750 550 650 550 150 500 50 400 0 -400 0 -500 50 -550 150 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SCREEN_PRINT
+#
+DEF SCREEN_PRINT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SCREEN_PRINT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -300 950 -50 950 -50 1200 N
+P 6 0 1 0 -300 400 -300 950 -50 1200 300 1200 300 400 -300 400 N
+P 14 0 1 0 -300 800 -400 800 -500 750 -550 650 -550 150 -500 50 -400 0 400 0 500 50 550 150 550 650 500 750 400 800 300 800 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SECTOR
+#
+DEF SECTOR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SECTOR" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 700 -300 750 -100 800 100 800 300 750 400 700 0 0 -400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_CAP_HUGE
+#
+DEF SIGMA_CAP_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_CAP_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 400 -250 -450 -250 100 400 -450 1050 450 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SIGMA_CAP_TOP
+#
+DEF SIGMA_CAP_TOP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SIGMA_CAP_TOP" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 200 -350 -450 1050 500 1050 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SINE
+#
+DEF SINE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SINE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -400 400 -350 650 -300 750 -200 800 -100 750 -50 650 50 150 100 50 200 0 300 50 350 150 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_LINE_H
+#
+DEF SLASH_LINE_H U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_LINE_H" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 50 150 -50 -150 N
+X X ~ 0 0 100 L 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_OP
+#
+DEF SLASH_OP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_OP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 300 1000 -300 -200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_REL
+#
+DEF SLASH_REL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_REL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 200 800 -200 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SMALL
+#
+DEF SLASH_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 250 550 -250 50 N
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLASH_SYM
+#
+DEF SLASH_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLASH_SYM" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 800 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SLOPE
+#
+DEF SLOPE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SLOPE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 0 -400 450 400 0 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SMILE
+#
+DEF SMILE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SMILE" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 400 500 350 450 250 400 0 350 -250 400 -350 450 -400 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE
+#
+DEF SPACE U 0 40 Y Y 1 F N
+F0 "U" 0 50 60 H V C CNN
+F1 "SPACE" 0 -50 60 H V C CNN
+DRAW
+X ~ ~ -400 0 300 U 50 50 1 1 I
+X ~ ~ 400 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SPACE_SYM
+#
+DEF SPACE_SYM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SPACE_SYM" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 200 -400 0 400 0 400 200 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQCUP
+#
+DEF SQCUP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQCUP" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 800 -400 0 400 0 400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQIMAGE
+#
+DEF SQIMAGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQIMAGE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 100 -400 100 -400 700 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQIMAGE_MINUS
+#
+DEF SQIMAGE_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQIMAGE_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 400 -50 -400 -50 N
+P 4 0 1 0 400 250 -400 250 -400 850 400 850 N
+X CENTER_M ~ 0 -50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE
+#
+DEF SQUARE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_BLACK
+#
+DEF SQUARE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 800 -350 0 N
+P 2 0 1 0 -300 0 -300 800 N
+P 2 0 1 0 -250 800 -250 0 N
+P 2 0 1 0 -200 0 -200 800 N
+P 2 0 1 0 -150 800 -150 0 N
+P 2 0 1 0 -100 0 -100 800 N
+P 2 0 1 0 -50 800 -50 0 N
+P 2 0 1 0 0 0 0 800 N
+P 2 0 1 0 50 800 50 0 N
+P 2 0 1 0 100 0 100 800 N
+P 2 0 1 0 150 800 150 0 N
+P 2 0 1 0 200 0 200 800 N
+P 2 0 1 0 250 800 250 0 N
+P 2 0 1 0 300 0 300 800 N
+P 2 0 1 0 350 800 350 0 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLB
+#
+DEF SQUARE_FILLB U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLB" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 -200 0 -400 200 N
+P 2 0 1 0 100 0 -400 500 N
+P 2 0 1 0 400 300 -100 800 N
+P 2 0 1 0 400 600 200 800 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLD
+#
+DEF SQUARE_FILLD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLD" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 800 N
+P 2 0 1 0 -400 300 100 800 N
+P 2 0 1 0 -400 600 -200 800 N
+P 2 0 1 0 -400 800 400 0 N
+P 2 0 1 0 -200 0 -400 200 N
+P 2 0 1 0 -100 0 400 500 N
+P 2 0 1 0 100 0 -400 500 N
+P 2 0 1 0 200 0 400 200 N
+P 2 0 1 0 400 300 -100 800 N
+P 2 0 1 0 400 600 200 800 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLH
+#
+DEF SQUARE_FILLH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLH" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 600 400 600 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLO
+#
+DEF SQUARE_FILLO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLO" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -400 600 400 600 N
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 200 800 200 0 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLS
+#
+DEF SQUARE_FILLS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 800 N
+P 2 0 1 0 -400 300 100 800 N
+P 2 0 1 0 -400 600 -200 800 N
+P 2 0 1 0 -100 0 400 500 N
+P 2 0 1 0 200 0 400 200 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FILLV
+#
+DEF SQUARE_FILLV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FILLV" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 200 800 200 0 N
+P 5 0 1 0 -400 800 400 800 400 0 -400 0 -400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_FOOT
+#
+DEF SQUARE_FOOT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_FOOT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 100 1050 -50 750 N
+P 6 0 1 0 -250 800 -400 800 -400 0 400 0 400 800 250 800 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_LEFTHALF_BLACK
+#
+DEF SQUARE_LEFTHALF_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_LEFTHALF_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 0 -350 800 N
+P 2 0 1 0 -300 800 -300 0 N
+P 2 0 1 0 -250 0 -250 800 N
+P 2 0 1 0 -200 800 -200 0 N
+P 2 0 1 0 -150 0 -150 800 N
+P 2 0 1 0 -100 800 -100 0 N
+P 2 0 1 0 -50 0 -50 800 N
+P 5 0 1 0 -400 0 -400 800 0 800 0 0 -400 0 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_ROUNDED
+#
+DEF SQUARE_ROUNDED U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_ROUNDED" 0 -350 60 H V C CNN
+DRAW
+P 13 0 1 0 -350 750 -250 800 250 800 350 750 400 650 400 150 350 50 250 0 -250 0 -350 50 -400 150 -400 650 -350 750 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_SMALL
+#
+DEF SQUARE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -150 250 -150 550 150 550 150 250 -150 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUARE_SMALL_BLACK
+#
+DEF SQUARE_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUARE_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 -100 250 N
+P 2 0 1 0 -50 250 -50 550 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 250 50 550 N
+P 2 0 1 0 100 550 100 250 N
+P 5 0 1 0 -150 250 -150 550 150 550 150 250 -150 250 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SQUISH_QUAD
+#
+DEF SQUISH_QUAD U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SQUISH_QUAD" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -250 1050 250 1050 250 -300 -250 -300 -250 1050 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STAR
+#
+DEF STAR U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STAR" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 800 250 50 -400 500 400 500 -250 50 0 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STAR_SMALL
+#
+DEF STAR_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STAR_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 0 450 100 150 -150 350 150 350 -100 150 0 450 N
+X BELOW ~ 0 0 100 R 50 50 1 1 I
+X CENTER ~ 0 300 100 R 50 50 1 1 I
+X ~ ~ -450 0 300 U 50 50 1 1 I
+X ~ ~ 450 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# STRICTEQV
+#
+DEF STRICTEQV U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "STRICTEQV" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -50 400 -50 N
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 -400 850 400 850 N
+P 2 0 1 0 400 250 -400 250 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUBSET
+#
+DEF SUBSET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUBSET" 0 -350 60 H V C CNN
+DRAW
+P 10 0 1 0 400 700 -200 700 -300 650 -350 600 -400 500 -400 300 -350 200 -300 150 -200 100 400 100 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUBSET_DBL
+#
+DEF SUBSET_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUBSET_DBL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 400 550 50 550 -50 500 -100 400 -50 300 50 250 400 250 N
+P 10 0 1 0 400 -50 -50 -50 -200 0 -350 150 -400 300 -400 500 -350 650 -200 800 -50 850 400 850 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUBSET_MINUS
+#
+DEF SUBSET_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUBSET_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -50 400 -50 N
+P 10 0 1 0 400 850 -200 850 -300 800 -350 750 -400 650 -400 450 -350 350 -300 300 -200 250 400 250 N
+X CENTER_M ~ 0 -50 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SUCCEEDS_WAVE
+#
+DEF SUCCEEDS_WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SUCCEEDS_WAVE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 0 -350 50 -200 100 -50 50 50 -50 200 -100 350 -50 400 0 N
+P 9 0 1 0 -400 150 -300 300 -200 400 0 500 400 550 0 600 -200 700 -300 800 -400 950 N
+X CENTER_W ~ 0 0 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# SYMMETRY
+#
+DEF SYMMETRY U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "SYMMETRY" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 -200 100 200 100 N
+P 2 0 1 0 200 700 -200 700 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TAB
+#
+DEF TAB U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TAB" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 200 400 200 N
+P 2 0 1 0 -400 800 -400 400 N
+P 2 0 1 0 400 400 400 0 N
+P 2 0 1 0 400 600 -400 600 N
+P 3 0 1 0 -200 400 -400 600 -200 800 N
+P 3 0 1 0 200 0 400 200 200 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TACK
+#
+DEF TACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 -400 800 N
+P 2 0 1 0 -400 400 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TACK_UP
+#
+DEF TACK_UP U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TACK_UP" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 2 0 1 0 0 0 0 800 N
+X ABOVE ~ 0 1050 100 R 50 50 1 1 I
+X BELOW ~ 0 -250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TACK_UP_LARGE
+#
+DEF TACK_UP_LARGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TACK_UP_LARGE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 -300 400 -300 N
+P 2 0 1 0 0 -300 0 1100 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TARGET
+#
+DEF TARGET U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TARGET" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 400 -200 400 N
+P 2 0 1 0 0 0 0 200 N
+P 2 0 1 0 0 800 0 600 N
+P 2 0 1 0 400 400 200 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TELEPHONE_RECORDER
+#
+DEF TELEPHONE_RECORDER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TELEPHONE_RECORDER" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 300 -400 0 N
+P 13 0 1 0 100 800 250 750 350 650 400 500 350 350 250 250 100 200 -50 250 -150 350 -200 500 -150 650 -50 750 100 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TETRASEME_METRICAL
+#
+DEF TETRASEME_METRICAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TETRASEME_METRICAL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -400 550 -400 300 400 300 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# THEREFORE
+#
+DEF THEREFORE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "THEREFORE" 0 -350 60 H V C CNN
+DRAW
+P 6 0 1 0 -350 150 -300 100 -350 50 -400 100 -350 150 -350 50 N
+P 6 0 1 0 0 750 50 700 0 650 -50 700 0 750 0 650 N
+P 6 0 1 0 350 150 400 100 350 50 300 100 350 150 350 50 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TOR_BRACKET_OVER
+#
+DEF TOR_BRACKET_OVER U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TOR_BRACKET_OVER" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 -800 -150 -600 100 600 100 800 -150 N
+X ~ ~ -1000 0 300 U 50 50 1 1 I
+X ~ ~ 1000 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TOTAL_RUNOUT
+#
+DEF TOTAL_RUNOUT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TOTAL_RUNOUT" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 550 0 800 -200 650 N
+P 3 0 1 0 400 550 400 800 200 650 N
+P 4 0 1 0 0 800 -400 0 0 0 400 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRAPEZIUM
+#
+DEF TRAPEZIUM U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRAPEZIUM" 0 -350 60 H V C CNN
+DRAW
+P 5 0 1 0 -450 0 -200 800 200 800 450 0 -450 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE
+#
+DEF TRIANGLE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 800 450 0 -450 0 0 800 N
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_BLACK
+#
+DEF TRIANGLE_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 50 -400 0 N
+P 2 0 1 0 -350 150 -350 0 N
+P 2 0 1 0 -300 250 -300 0 N
+P 2 0 1 0 -250 350 -250 0 N
+P 2 0 1 0 -200 400 -200 0 N
+P 2 0 1 0 -150 500 -150 0 N
+P 2 0 1 0 -100 600 -100 0 N
+P 2 0 1 0 -50 700 -50 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 50 700 50 0 N
+P 2 0 1 0 100 600 100 0 N
+P 2 0 1 0 150 500 150 0 N
+P 2 0 1 0 200 400 200 0 N
+P 2 0 1 0 250 350 250 0 N
+P 2 0 1 0 300 250 300 0 N
+P 2 0 1 0 350 150 350 0 N
+P 3 0 1 0 400 0 0 750 -400 0 N
+P 3 0 1 0 400 50 400 0 400 0 N
+P 4 0 1 0 0 800 450 0 -450 0 0 800 N
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_BLACKHALF
+#
+DEF TRIANGLE_BLACKHALF U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_BLACKHALF" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 0 750 N
+P 2 0 1 0 -400 50 -400 0 N
+P 2 0 1 0 -350 150 -350 0 N
+P 2 0 1 0 -300 250 -300 0 N
+P 2 0 1 0 -250 350 -250 0 N
+P 2 0 1 0 -200 400 -200 0 N
+P 2 0 1 0 -150 500 -150 0 N
+P 2 0 1 0 -100 600 -100 0 N
+P 2 0 1 0 -50 700 -50 0 N
+P 2 0 1 0 0 800 0 0 N
+P 4 0 1 0 0 800 450 0 -450 0 0 800 N
+X CENTER ~ 0 250 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E
+#
+DEF TRIANGLE_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 400 -400 -50 -400 850 400 400 N
+X CENTER ~ -150 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E_BLACK
+#
+DEF TRIANGLE_E_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 800 -350 0 N
+P 2 0 1 0 -300 750 -300 50 N
+P 2 0 1 0 -250 750 -250 50 N
+P 2 0 1 0 -200 700 -200 100 N
+P 2 0 1 0 -150 700 -150 100 N
+P 2 0 1 0 -100 650 -100 150 N
+P 2 0 1 0 -50 650 -50 150 N
+P 2 0 1 0 0 600 0 200 N
+P 2 0 1 0 50 550 50 250 N
+P 2 0 1 0 100 550 100 250 N
+P 2 0 1 0 150 500 150 300 N
+P 2 0 1 0 200 500 200 300 N
+P 2 0 1 0 250 400 300 400 N
+P 2 0 1 0 250 450 250 350 N
+P 3 0 1 0 -400 800 350 400 -400 0 N
+P 4 0 1 0 400 400 -400 -50 -400 850 400 400 N
+X CENTER ~ -150 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E_SMALL
+#
+DEF TRIANGLE_E_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 200 400 -150 200 -150 600 200 400 N
+X CENTER ~ -50 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_E_SMALL_BLACK
+#
+DEF TRIANGLE_E_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_E_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -100 550 -100 250 N
+P 2 0 1 0 -50 500 -50 300 N
+P 2 0 1 0 0 500 0 300 N
+P 2 0 1 0 50 400 150 400 N
+P 2 0 1 0 50 450 50 350 N
+P 3 0 1 0 -150 550 150 400 -150 250 N
+P 4 0 1 0 200 400 -150 200 -150 600 200 400 N
+X CENTER ~ -50 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_RA
+#
+DEF TRIANGLE_RA U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_RA" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 0 400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_RA_BLACK
+#
+DEF TRIANGLE_RA_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_RA_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 50 -350 0 N
+P 2 0 1 0 -300 100 -300 0 N
+P 2 0 1 0 -250 150 -250 0 N
+P 2 0 1 0 -200 200 -200 0 N
+P 2 0 1 0 -150 250 -150 0 N
+P 2 0 1 0 -100 300 -100 0 N
+P 2 0 1 0 -50 350 -50 0 N
+P 2 0 1 0 0 400 0 0 N
+P 2 0 1 0 50 450 50 0 N
+P 2 0 1 0 100 500 100 0 N
+P 2 0 1 0 150 550 150 0 N
+P 2 0 1 0 200 600 200 0 N
+P 2 0 1 0 250 650 250 0 N
+P 2 0 1 0 300 700 300 0 N
+P 2 0 1 0 350 750 350 0 N
+P 4 0 1 0 400 0 400 800 -400 0 400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_SMALL
+#
+DEF TRIANGLE_SMALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_SMALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 600 200 250 -200 250 0 600 N
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_SMALL_BLACK
+#
+DEF TRIANGLE_SMALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_SMALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -150 300 -150 250 N
+P 2 0 1 0 -100 400 -100 250 N
+P 2 0 1 0 -50 500 -50 250 N
+P 2 0 1 0 0 600 0 250 N
+P 2 0 1 0 50 500 50 250 N
+P 2 0 1 0 100 400 100 250 N
+P 2 0 1 0 150 300 150 250 N
+P 3 0 1 0 -150 250 0 550 150 250 N
+P 4 0 1 0 0 600 200 250 -200 250 0 600 N
+X CENTER ~ 0 350 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL
+#
+DEF TRIANGLE_TALL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 0 800 300 0 -300 0 0 800 N
+X ABOVE ~ 0 950 100 R 50 50 1 1 I
+X BELOW ~ 0 -150 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_BLACK
+#
+DEF TRIANGLE_TALL_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -250 0 -250 100 N
+P 2 0 1 0 -200 250 -200 0 N
+P 2 0 1 0 -150 400 -150 0 N
+P 2 0 1 0 -100 500 -100 0 N
+P 2 0 1 0 -50 650 -50 0 N
+P 2 0 1 0 0 800 0 0 N
+P 2 0 1 0 50 650 50 0 N
+P 2 0 1 0 100 500 100 0 N
+P 2 0 1 0 150 400 150 0 N
+P 2 0 1 0 200 250 200 0 N
+P 2 0 1 0 250 100 250 0 N
+P 3 0 1 0 250 0 0 700 -250 0 N
+P 4 0 1 0 0 800 300 0 -300 0 0 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_E
+#
+DEF TRIANGLE_TALL_E U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_E" 0 -350 60 H V C CNN
+DRAW
+P 4 0 1 0 400 400 -400 100 -400 700 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_E_BLACK
+#
+DEF TRIANGLE_TALL_E_BLACK U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_E_BLACK" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -350 650 -350 150 N
+P 2 0 1 0 -300 650 -300 150 N
+P 2 0 1 0 -250 600 -250 200 N
+P 2 0 1 0 -200 600 -200 200 N
+P 2 0 1 0 -150 600 -150 200 N
+P 2 0 1 0 -100 550 -100 250 N
+P 2 0 1 0 -50 550 -50 250 N
+P 2 0 1 0 0 550 0 250 N
+P 2 0 1 0 50 500 50 300 N
+P 2 0 1 0 100 500 100 300 N
+P 2 0 1 0 150 450 150 350 N
+P 2 0 1 0 200 450 200 350 N
+P 2 0 1 0 250 450 250 350 N
+P 2 0 1 0 300 400 250 400 N
+P 3 0 1 0 -400 650 350 400 -400 150 N
+P 4 0 1 0 400 400 -400 100 -400 700 400 400 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRIANGLE_TALL_E_MINUS
+#
+DEF TRIANGLE_TALL_E_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRIANGLE_TALL_E_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 0 400 0 N
+P 4 0 1 0 400 500 -400 200 -400 800 400 500 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# TRUE
+#
+DEF TRUE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "TRUE" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 400 250 N
+P 2 0 1 0 -400 550 400 550 N
+P 2 0 1 0 -400 800 -400 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNDERLINE_CONT
+#
+DEF UNDERLINE_CONT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNDERLINE_CONT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 600 0 N
+P 6 0 1 0 -550 750 -450 800 -350 800 -250 750 -200 650 -200 300 N
+P 6 0 1 0 150 400 200 350 150 300 100 350 150 400 150 300 N
+P 6 0 1 0 550 400 600 350 550 300 500 350 550 400 550 300 N
+P 8 0 1 0 -200 350 -300 300 -450 300 -550 350 -600 450 -550 550 -450 600 -200 600 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNDERLINE_DISCONT
+#
+DEF UNDERLINE_DISCONT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNDERLINE_DISCONT" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -600 0 -200 0 N
+P 2 0 1 0 200 0 600 0 N
+P 6 0 1 0 -550 750 -450 800 -350 800 -250 750 -200 650 -200 300 N
+P 6 0 1 0 250 750 350 800 450 800 550 750 600 650 600 300 N
+P 8 0 1 0 -200 350 -300 300 -450 300 -550 350 -600 450 -550 550 -450 600 -200 600 N
+P 8 0 1 0 600 350 500 300 350 300 250 350 200 450 250 550 350 600 600 600 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNDO
+#
+DEF UNDO U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNDO" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 -350 650 -350 450 -150 450 N
+P 6 0 1 0 350 450 250 550 100 600 -100 600 -250 550 -350 450 N
+P 9 0 1 0 -200 150 -250 250 -350 300 -450 250 -500 150 -450 50 -350 0 -250 50 -200 150 N
+P 9 0 1 0 200 150 250 50 350 0 450 50 500 150 450 250 350 300 250 250 200 150 N
+X ~ ~ -700 0 300 U 50 50 1 1 I
+X ~ ~ 700 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNION
+#
+DEF UNION U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNION" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 800 -400 300 -300 100 -100 0 100 0 300 100 400 300 400 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNION_DBL
+#
+DEF UNION_DBL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNION_DBL" 0 -350 60 H V C CNN
+DRAW
+P 7 0 1 0 -150 800 -150 450 -100 350 0 300 100 350 150 450 150 800 N
+P 10 0 1 0 -450 800 -450 350 -400 200 -250 50 -100 0 100 0 250 50 400 200 450 350 450 800 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# UNION_HUGE
+#
+DEF UNION_HUGE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "UNION_HUGE" 0 -350 60 H V C CNN
+DRAW
+P 12 0 1 0 -550 1050 -550 200 -500 0 -400 -150 -250 -250 -50 -300 50 -300 250 -250 400 -150 500 0 550 200 550 1050 N
+X ~ ~ -800 0 300 U 50 50 1 1 I
+X ~ ~ 800 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WATCH
+#
+DEF WATCH U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WATCH" 0 -350 60 H V C CNN
+DRAW
+P 3 0 1 0 0 600 0 400 150 400 N
+P 13 0 1 0 -100 800 100 800 300 700 400 500 400 300 300 100 100 0 -100 0 -300 100 -400 300 -400 500 -300 700 -100 800 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE
+#
+DEF WAVE U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 400 -350 450 -200 500 -50 450 50 350 200 300 350 350 400 400 N
+X CENTER ~ 0 400 100 R 50 50 1 1 I
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_EQUAL
+#
+DEF WAVE_EQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_EQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 2 0 1 0 -400 400 400 400 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_MINUS
+#
+DEF WAVE_MINUS U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_MINUS" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 250 400 250 N
+P 8 0 1 0 -400 550 -350 600 -200 650 -50 600 50 500 200 450 350 500 400 550 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_NOTEQUAL
+#
+DEF WAVE_NOTEQUAL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_NOTEQUAL" 0 -350 60 H V C CNN
+DRAW
+P 2 0 1 0 -400 100 400 100 N
+P 2 0 1 0 -400 400 400 400 N
+P 2 0 1 0 150 550 -150 -50 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WAVE_TPL
+#
+DEF WAVE_TPL U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WAVE_TPL" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 -400 100 -350 150 -200 200 -50 150 50 50 200 0 350 50 400 100 N
+P 8 0 1 0 -400 400 -350 450 -200 500 -50 450 50 350 200 300 350 350 400 400 N
+P 8 0 1 0 -400 700 -350 750 -200 800 -50 750 50 650 200 600 350 650 400 700 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+# WREATH_PRODUCT
+#
+DEF WREATH_PRODUCT U 0 40 Y Y 1 F N
+F0 "U" 0 -250 60 H V C CNN
+F1 "WREATH_PRODUCT" 0 -350 60 H V C CNN
+DRAW
+P 8 0 1 0 0 800 50 750 100 600 50 450 -50 350 -100 200 -50 50 0 0 N
+X ~ ~ -650 0 300 U 50 50 1 1 I
+X ~ ~ 650 0 300 U 50 50 1 1 I
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/helpers/tools_to_build_newstroke-font/symbols.sch b/helpers/tools_to_build_newstroke-font/symbols.sch
new file mode 100644
index 0000000..7915abe
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/symbols.sch
@@ -0,0 +1,3241 @@
+EESchema Schematic File Version 2 date Ð’Ñк 31 Янв 2010 21:30:52
+LIBS:font
+LIBS:power
+LIBS:symbol
+LIBS:font-cache
+EELAYER 24 0
+EELAYER END
+$Descr A0 46800 33070
+Sheet 2 2
+Title "noname.sch"
+Date "13 jan 2010"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L LINE_V_CAP U?
+U 1 1 4B61BC28
+P 2300 3000
+F 0 "U?" H 2300 2750 60 0000 C CNN
+F 1 "LINE_V_CAP" H 2300 2650 60 0000 C CNN
+ 1 2300 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_SMALL U?
+U 1 1 4B61BC1D
+P 1800 3000
+F 0 "U?" H 1800 2750 60 0000 C CNN
+F 1 "LINE_V_SMALL" H 1800 2650 60 0000 C CNN
+ 1 1800 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASTERISM U?
+U 1 1 4B61B59F
+P 33000 3000
+F 0 "U?" H 33000 2750 60 0000 C CNN
+F 1 "ASTERISM" H 33000 2650 60 0000 C CNN
+ 1 33000 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_SMALL_BLACK_INVERSE U?
+U 1 1 4B61B469
+P 24350 22500
+F 0 "U?" H 24350 22250 60 0000 C CNN
+F 1 "CIRCLE_SMALL_BLACK_INVERSE" H 24350 22150 60 0000 C CNN
+ 1 24350 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_INVERSE_HALF U?
+U 1 1 4B61A5D3
+P 23050 22500
+F 0 "U?" H 23050 22250 60 0000 C CNN
+F 1 "CIRCLE_INVERSE_HALF" H 23050 22150 60 0000 C CNN
+ 1 23050 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_BLACKHALF U?
+U 1 1 4B619F56
+P 20650 24000
+F 0 "U?" H 20650 23750 60 0000 C CNN
+F 1 "TRIANGLE_BLACKHALF" H 20650 23650 60 0000 C CNN
+ 1 20650 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE_RIGHT_ARROW_DOWN_ZIGZAG U?
+U 1 1 4B619D15
+P 21750 22500
+F 0 "U?" H 21750 22250 60 0000 C CNN
+F 1 "ANGLE_RIGHT_ARROW_DOWN_ZIGZAG" H 21750 22150 60 0000 C CNN
+ 1 21750 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SCREEN_PRINT U?
+U 1 1 4B619B4F
+P 20100 22500
+F 0 "U?" H 20100 22250 60 0000 C CNN
+F 1 "SCREEN_PRINT" H 20100 22150 60 0000 C CNN
+ 1 20100 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SCREEN_CLEAR U?
+U 1 1 4B619B49
+P 18500 22500
+F 0 "U?" H 18500 22250 60 0000 C CNN
+F 1 "SCREEN_CLEAR" H 18500 22150 60 0000 C CNN
+ 1 18500 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HEXAGON_H_CAP U?
+U 1 1 4B6199DB
+P 16900 22500
+F 0 "U?" H 16900 22250 60 0000 C CNN
+F 1 "HEXAGON_H_CAP" H 16900 22150 60 0000 C CNN
+ 1 16900 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_CAP_TOP U?
+U 1 1 4B619939
+P 10150 28500
+F 0 "U?" H 10150 28250 60 0000 C CNN
+F 1 "SIGMA_CAP_TOP" H 10150 28150 60 0000 C CNN
+ 1 10150 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PENTASEME_METRICAL U?
+U 1 1 4B61964B
+P 34950 30000
+F 0 "U?" H 34950 29750 60 0000 C CNN
+F 1 "PENTASEME_METRICAL" H 34950 29650 60 0000 C CNN
+ 1 34950 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TETRASEME_METRICAL U?
+U 1 1 4B619644
+P 33650 30000
+F 0 "U?" H 33650 29750 60 0000 C CNN
+F 1 "TETRASEME_METRICAL" H 33650 29650 60 0000 C CNN
+ 1 33650 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L EMPHASIS U?
+U 1 1 4B619406
+P 32200 30000
+F 0 "U?" H 32200 29750 60 0000 C CNN
+F 1 "EMPHASIS" H 32200 29650 60 0000 C CNN
+ 1 32200 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UNDERLINE_DISCONT U?
+U 1 1 4B61931D
+P 30600 30000
+F 0 "U?" H 30600 29750 60 0000 C CNN
+F 1 "UNDERLINE_DISCONT" H 30600 29650 60 0000 C CNN
+ 1 30600 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UNDERLINE_CONT U?
+U 1 1 4B619316
+P 29000 30000
+F 0 "U?" H 29000 29750 60 0000 C CNN
+F 1 "UNDERLINE_CONT" H 29000 29650 60 0000 C CNN
+ 1 29000 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ENTER_SYM U?
+U 1 1 4B6191FB
+P 27550 30000
+F 0 "U?" H 27550 29750 60 0000 C CNN
+F 1 "ENTER_SYM" H 27550 29650 60 0000 C CNN
+ 1 27550 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_N_WHITE U?
+U 1 1 4B619128
+P 16200 19600
+F 0 "U?" H 16200 19350 60 0000 C CNN
+F 1 "ARROW_E_N_WHITE" H 16200 19250 60 0000 C CNN
+ 1 16200 19600
+ 1 0 0 -1
+$EndComp
+$Comp
+L OVERLINE U?
+U 1 1 4B619089
+P 18300 10400
+F 0 "U?" H 18300 10150 60 0000 C CNN
+F 1 "OVERLINE" H 18300 10050 60 0000 C CNN
+ 1 18300 10400
+ 1 0 0 -1
+$EndComp
+$Comp
+L TACK_UP U?
+U 1 1 4B619083
+P 18300 10500
+F 0 "U?" H 18300 10250 60 0000 C CNN
+F 1 "TACK_UP" H 18300 10150 60 0000 C CNN
+ 1 18300 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OVERLINE_LONG U?
+U 1 1 4B618F60
+P 16900 10700
+F 0 "U?" H 16900 10450 60 0000 C CNN
+F 1 "OVERLINE_LONG" H 16900 10350 60 0000 C CNN
+ 1 16900 10700
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_METRICAL_X2 U?
+U 1 1 4B618F53
+P 16900 10500
+F 0 "U?" H 16900 10250 60 0000 C CNN
+F 1 "BREVE_METRICAL_X2" H 16900 10150 60 0000 C CNN
+ 1 16900 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_METRICAL_JOINED U?
+U 1 1 4B618EE9
+P 26150 30000
+F 0 "U?" H 26150 29750 60 0000 C CNN
+F 1 "BREVE_METRICAL_JOINED" H 26150 29650 60 0000 C CNN
+ 1 26150 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_METRICAL_X2 U?
+U 1 1 4B618EE3
+P 24750 30000
+F 0 "U?" H 24750 29750 60 0000 C CNN
+F 1 "BREVE_METRICAL_X2" H 24750 29650 60 0000 C CNN
+ 1 24750 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BREVE_METRICAL U?
+U 1 1 4B618E44
+P 23500 30000
+F 0 "U?" H 23500 29750 60 0000 C CNN
+F 1 "BREVE_METRICAL" H 23500 29650 60 0000 C CNN
+ 1 23500 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_H_1 U?
+U 1 1 4B618AD7
+P 9000 28500
+F 0 "U?" H 9000 28250 60 0000 C CNN
+F 1 "LINE_H_1" H 9000 28150 60 0000 C CNN
+ 1 9000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_H_3 U?
+U 1 1 4B618AD0
+P 8000 28500
+F 0 "U?" H 8000 28250 60 0000 C CNN
+F 1 "LINE_H_3" H 8000 28150 60 0000 C CNN
+ 1 8000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRAPEZIUM U?
+U 1 1 4B61892A
+P 31050 25450
+F 0 "U?" H 31050 25200 60 0000 C CNN
+F 1 "TRAPEZIUM" H 31050 25100 60 0000 C CNN
+ 1 31050 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L TOR_BRACKET_OVER U?
+U 1 1 4B6188B5
+P 22000 30000
+F 0 "U?" H 22000 29750 60 0000 C CNN
+F 1 "TOR_BRACKET_OVER" H 22000 29650 60 0000 C CNN
+ 1 22000 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACE_OVER U?
+U 1 1 4B6187FF
+P 20000 30000
+F 0 "U?" H 20000 29750 60 0000 C CNN
+F 1 "BRACE_OVER" H 20000 29650 60 0000 C CNN
+ 1 20000 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACKET_OVER U?
+U 1 1 4B6187FA
+P 18000 30000
+F 0 "U?" H 18000 29750 60 0000 C CNN
+F 1 "BRACKET_OVER" H 18000 29650 60 0000 C CNN
+ 1 18000 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAREN_OVER U?
+U 1 1 4B6187E7
+P 16000 30000
+F 0 "U?" H 16000 29750 60 0000 C CNN
+F 1 "PAREN_OVER" H 16000 29650 60 0000 C CNN
+ 1 16000 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L FUSE U?
+U 1 1 4B618583
+P 14350 30000
+F 0 "U?" H 14350 29750 60 0000 C CNN
+F 1 "FUSE" H 14350 29650 60 0000 C CNN
+ 1 14350 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_H U?
+U 1 1 4B618440
+P 7000 28500
+F 0 "U?" H 7000 28250 60 0000 C CNN
+F 1 "LINE_H" H 7000 28150 60 0000 C CNN
+ 1 7000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L NEXT_PAGE U?
+U 1 1 4B618374
+P 12850 30000
+F 0 "U?" H 12850 29750 60 0000 C CNN
+F 1 "NEXT_PAGE" H 12850 29650 60 0000 C CNN
+ 1 12850 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UNDO U?
+U 1 1 4B6182ED
+P 11300 30000
+F 0 "U?" H 11300 29750 60 0000 C CNN
+F 1 "UNDO" H 11300 29650 60 0000 C CNN
+ 1 11300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L COMPOSITION U?
+U 1 1 4B618163
+P 9950 30000
+F 0 "U?" H 9950 29750 60 0000 C CNN
+F 1 "COMPOSITION" H 9950 29650 60 0000 C CNN
+ 1 9950 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALL_AROUND_PROFILE U?
+U 1 1 4B617CF0
+P 8250 30000
+F 0 "U?" H 8250 29750 60 0000 C CNN
+F 1 "ALL_AROUND_PROFILE" H 8250 29650 60 0000 C CNN
+ 1 8250 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TOTAL_RUNOUT U?
+U 1 1 4B617C7A
+P 6950 30000
+F 0 "U?" H 6950 29750 60 0000 C CNN
+F 1 "TOTAL_RUNOUT" H 6950 29650 60 0000 C CNN
+ 1 6950 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L KEYBOARD U?
+U 1 1 4B617BF6
+P 5050 30000
+F 0 "U?" H 5050 29750 60 0000 C CNN
+F 1 "KEYBOARD" H 5050 29650 60 0000 C CNN
+ 1 5050 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L I_BEAM U?
+U 1 1 4B617A6B
+P 21200 12000
+F 0 "U?" H 21200 11750 60 0000 C CNN
+F 1 "I_BEAM" H 21200 11650 60 0000 C CNN
+ 1 21200 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLOPE U?
+U 1 1 4B6179FF
+P 19350 24000
+F 0 "U?" H 19350 23750 60 0000 C CNN
+F 1 "SLOPE" H 19350 23650 60 0000 C CNN
+ 1 19350 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_MID U?
+U 1 1 4B617982
+P 15600 22500
+F 0 "U?" H 15600 22250 60 0000 C CNN
+F 1 "CIRCLE_MID" H 15600 22150 60 0000 C CNN
+ 1 15600 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIMENSION_ORIGIN U?
+U 1 1 4B61792B
+P 3300 30000
+F 0 "U?" H 3300 29750 60 0000 C CNN
+F 1 "DIMENSION_ORIGIN" H 3300 29650 60 0000 C CNN
+ 1 3300 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SYMMETRY U?
+U 1 1 4B617873
+P 2150 30000
+F 0 "U?" H 2150 29750 60 0000 C CNN
+F 1 "SYMMETRY" H 2150 29650 60 0000 C CNN
+ 1 2150 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CYLINDRICITY U?
+U 1 1 4B617808
+P 1000 30000
+F 0 "U?" H 1000 29750 60 0000 C CNN
+F 1 "CYLINDRICITY" H 1000 29650 60 0000 C CNN
+ 1 1000 30000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BENZENE_RING U?
+U 1 1 4B6175B6
+P 41100 32000
+F 0 "U?" H 41100 31750 60 0000 C CNN
+F 1 "BENZENE_RING" H 41100 31650 60 0000 C CNN
+ 1 41100 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BENZENE U?
+U 1 1 4B617462
+P 39400 32000
+F 0 "U?" H 39400 31750 60 0000 C CNN
+F 1 "BENZENE" H 39400 31650 60 0000 C CNN
+ 1 39400 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L MOUSTACHE U?
+U 1 1 4B616F60
+P 6000 28500
+F 0 "U?" H 6000 28250 60 0000 C CNN
+F 1 "MOUSTACHE" H 6000 28150 60 0000 C CNN
+ 1 6000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACE_MIDDLE U?
+U 1 1 4B616EF3
+P 5000 28500
+F 0 "U?" H 5000 28250 60 0000 C CNN
+F 1 "BRACE_MIDDLE" H 5000 28150 60 0000 C CNN
+ 1 5000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACE_TOP U?
+U 1 1 4B616EA4
+P 4000 28500
+F 0 "U?" H 4000 28250 60 0000 C CNN
+F 1 "BRACE_TOP" H 4000 28150 60 0000 C CNN
+ 1 4000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BRACKET_TOP U?
+U 1 1 4B616E2C
+P 3000 28500
+F 0 "U?" H 3000 28250 60 0000 C CNN
+F 1 "BRACKET_TOP" H 3000 28150 60 0000 C CNN
+ 1 3000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAREN_TOP U?
+U 1 1 4B616DF6
+P 2000 28500
+F 0 "U?" H 2000 28250 60 0000 C CNN
+F 1 "PAREN_TOP" H 2000 28150 60 0000 C CNN
+ 1 2000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_TOP U?
+U 1 1 4B616D01
+P 1000 28500
+F 0 "U?" H 1000 28250 60 0000 C CNN
+F 1 "INTEGRAL_TOP" H 1000 28150 60 0000 C CNN
+ 1 1000 28500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_WAVY U?
+U 1 1 4B606B02
+P 38050 32000
+F 0 "U?" H 38050 31750 60 0000 C CNN
+F 1 "LINE_V_WAVY" H 38050 31650 60 0000 C CNN
+ 1 38050 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HOURGLASS U?
+U 1 1 4B606A17
+P 36900 32000
+F 0 "U?" H 36900 31750 60 0000 C CNN
+F 1 "HOURGLASS" H 36900 31650 60 0000 C CNN
+ 1 36900 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CARET_INSERTION U?
+U 1 1 4B6064AA
+P 31600 3000
+F 0 "U?" H 31600 2750 60 0000 C CNN
+F 1 "CARET_INSERTION" H 31600 2650 60 0000 C CNN
+ 1 31600 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOTS_5 U?
+U 1 1 4B6063EC
+P 35600 32000
+F 0 "U?" H 35600 31750 60 0000 C CNN
+F 1 "DOTS_5" H 35600 31650 60 0000 C CNN
+ 1 35600 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOTS_3 U?
+U 1 1 4B6063C9
+P 34300 32000
+F 0 "U?" H 34300 31750 60 0000 C CNN
+F 1 "DOTS_3" H 34300 31650 60 0000 C CNN
+ 1 34300 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOTS_4 U?
+U 1 1 4B6063A3
+P 33000 32000
+F 0 "U?" H 33000 31750 60 0000 C CNN
+F 1 "DOTS_4" H 33000 31650 60 0000 C CNN
+ 1 33000 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOTS_FOUR_VERT U?
+U 1 1 4B60623E
+P 25750 9000
+F 0 "U?" H 25750 8750 60 0000 C CNN
+F 1 "DOTS_FOUR_VERT" H 25750 8650 60 0000 C CNN
+ 1 25750 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIESIS U?
+U 1 1 4B605F9F
+P 30500 3000
+F 0 "U?" H 30500 2750 60 0000 C CNN
+F 1 "DIESIS" H 30500 2650 60 0000 C CNN
+ 1 30500 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LOW_LINE_DBL U?
+U 1 1 4B605E59
+P 29650 3000
+F 0 "U?" H 29650 2750 60 0000 C CNN
+F 1 "LOW_LINE_DBL" H 29650 2650 60 0000 C CNN
+ 1 29650 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SMILE U?
+U 1 1 4B583E45
+P 31700 32000
+F 0 "U?" H 31700 31750 60 0000 C CNN
+F 1 "SMILE" H 31700 31650 60 0000 C CNN
+ 1 31700 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_RA_BLACK U?
+U 1 1 4B583DE7
+P 18050 24000
+F 0 "U?" H 18050 23750 60 0000 C CNN
+F 1 "TRIANGLE_RA_BLACK" H 18050 23650 60 0000 C CNN
+ 1 18050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SPACE_SYM U?
+U 1 1 4B583DC0
+P 30400 32000
+F 0 "U?" H 30400 31750 60 0000 C CNN
+F 1 "SPACE_SYM" H 30400 31650 60 0000 C CNN
+ 1 30400 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L NBSP_SYM U?
+U 1 1 4B583DAB
+P 29100 32000
+F 0 "U?" H 29100 31750 60 0000 C CNN
+F 1 "NBSP_SYM" H 29100 31650 60 0000 C CNN
+ 1 29100 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BELL U?
+U 1 1 4B583D9A
+P 27800 32000
+F 0 "U?" H 27800 31750 60 0000 C CNN
+F 1 "BELL" H 27800 31650 60 0000 C CNN
+ 1 27800 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ERASE_TO_RIGHT U?
+U 1 1 4B583D66
+P 26150 32000
+F 0 "U?" H 26150 31750 60 0000 C CNN
+F 1 "ERASE_TO_RIGHT" H 26150 31650 60 0000 C CNN
+ 1 26150 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CLEAR_KEY U?
+U 1 1 4B583D48
+P 24450 32000
+F 0 "U?" H 24450 31750 60 0000 C CNN
+F 1 "CLEAR_KEY" H 24450 31650 60 0000 C CNN
+ 1 24450 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_TOPHALF_BLACK U?
+U 1 1 4B583D3A
+P 14450 22500
+F 0 "U?" H 14450 22250 60 0000 C CNN
+F 1 "CIRCLE_TOPHALF_BLACK" H 14450 22150 60 0000 C CNN
+ 1 14450 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_TOPHALF U?
+U 1 1 4B583D2E
+P 13150 22500
+F 0 "U?" H 13150 22250 60 0000 C CNN
+F 1 "CIRCLE_TOPHALF" H 13150 22150 60 0000 C CNN
+ 1 13150 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_QUAD U?
+U 1 1 4B583D1F
+P 11850 22500
+F 0 "U?" H 11850 22250 60 0000 C CNN
+F 1 "CIRCLE_QUAD" H 11850 22150 60 0000 C CNN
+ 1 11850 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_LEFTHALF_BLACK U?
+U 1 1 4B583D10
+P 10550 22500
+F 0 "U?" H 10550 22250 60 0000 C CNN
+F 1 "CIRCLE_LEFTHALF_BLACK" H 10550 22150 60 0000 C CNN
+ 1 10550 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_BLACKQ U?
+U 1 1 4B583CFB
+P 9250 22500
+F 0 "U?" H 9250 22250 60 0000 C CNN
+F 1 "CIRCLE_BLACKQ" H 9250 22150 60 0000 C CNN
+ 1 9250 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SECTOR U?
+U 1 1 4B583CDC
+P 24350 9000
+F 0 "U?" H 24350 8750 60 0000 C CNN
+F 1 "SECTOR" H 24350 8650 60 0000 C CNN
+ 1 24350 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_LEFTHALF_BLACK U?
+U 1 1 4B583CBA
+P 29750 25450
+F 0 "U?" H 29750 25200 60 0000 C CNN
+F 1 "SQUARE_LEFTHALF_BLACK" H 29750 25100 60 0000 C CNN
+ 1 29750 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L BAG_MEMBERSHIP U?
+U 1 1 4B549C3C
+P 43450 4450
+F 0 "U?" H 43450 4200 60 0000 C CNN
+F 1 "BAG_MEMBERSHIP" H 43450 4100 60 0000 C CNN
+ 1 43450 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_DBLSTROKE U?
+U 1 1 4B549BE7
+P 44900 4450
+F 0 "U?" H 44900 4200 60 0000 C CNN
+F 1 "ELEMENT_DBLSTROKE" H 44900 4100 60 0000 C CNN
+ 1 44900 4450
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_MINUS_SMALL U?
+U 1 1 4B549B34
+P 11500 4500
+F 0 "U?" H 11500 4250 60 0000 C CNN
+F 1 "ELEMENT_MINUS_SMALL" H 11500 4150 60 0000 C CNN
+ 1 11500 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_MINUS U?
+U 1 1 4B549AF6
+P 10150 4500
+F 0 "U?" H 10150 4250 60 0000 C CNN
+F 1 "ELEMENT_MINUS" H 10150 4150 60 0000 C CNN
+ 1 10150 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_STROKEBAR_SMALL U?
+U 1 1 4B549ACA
+P 8750 4500
+F 0 "U?" H 8750 4250 60 0000 C CNN
+F 1 "ELEMENT_STROKEBAR_SMALL" H 8750 4150 60 0000 C CNN
+ 1 8750 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_STROKEBAR U?
+U 1 1 4B549A5B
+P 7400 4500
+F 0 "U?" H 7400 4250 60 0000 C CNN
+F 1 "ELEMENT_STROKEBAR" H 7400 4150 60 0000 C CNN
+ 1 7400 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_STROKE U?
+U 1 1 4B549A32
+P 5700 4500
+F 0 "U?" H 5700 4250 60 0000 C CNN
+F 1 "ELEMENT_STROKE" H 5700 4150 60 0000 C CNN
+ 1 5700 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELLIPSIS_DIAG U?
+U 1 1 4B54991C
+P 20050 9000
+F 0 "U?" H 20050 8750 60 0000 C CNN
+F 1 "ELLIPSIS_DIAG" H 20050 8650 60 0000 C CNN
+ 1 20050 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELLIPSIS_VERT U?
+U 1 1 4B5498EE
+P 18550 9000
+F 0 "U?" H 18550 8750 60 0000 C CNN
+F 1 "ELLIPSIS_VERT" H 18550 8650 60 0000 C CNN
+ 1 18550 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELLIPSIS_MID U?
+U 1 1 4B5498BB
+P 17050 9000
+F 0 "U?" H 17050 8750 60 0000 C CNN
+F 1 "ELLIPSIS_MID" H 17050 8650 60 0000 C CNN
+ 1 17050 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_LINE_H U?
+U 1 1 4B549655
+P 15500 10550
+F 0 "U?" H 15500 10300 60 0000 C CNN
+F 1 "SLASH_LINE_H" H 15500 10200 60 0000 C CNN
+ 1 15500 10550
+ 1 0 0 -1
+$EndComp
+$Comp
+L SUBSET_MINUS U?
+U 1 1 4B549646
+P 15500 10500
+F 0 "U?" H 15500 10250 60 0000 C CNN
+F 1 "SUBSET_MINUS" H 15500 10150 60 0000 C CNN
+ 1 15500 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PITCHFORK U?
+U 1 1 4B5493D2
+P 42800 7500
+F 0 "U?" H 42800 7250 60 0000 C CNN
+F 1 "PITCHFORK" H 42800 7150 60 0000 C CNN
+ 1 42800 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L UNION_DBL U?
+U 1 1 4B54936D
+P 41500 7500
+F 0 "U?" H 41500 7250 60 0000 C CNN
+F 1 "UNION_DBL" H 41500 7150 60 0000 C CNN
+ 1 41500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SUBSET_DBL U?
+U 1 1 4B5492A5
+P 33450 6000
+F 0 "U?" H 33450 5750 60 0000 C CNN
+F 1 "SUBSET_DBL" H 33450 5650 60 0000 C CNN
+ 1 33450 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OR_CURLY U?
+U 1 1 4B5491BF
+P 40200 7500
+F 0 "U?" H 40200 7250 60 0000 C CNN
+F 1 "OR_CURLY" H 40200 7150 60 0000 C CNN
+ 1 40200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRODUCT_SEMIDIRECT U?
+U 1 1 4B54915F
+P 15650 9000
+F 0 "U?" H 15650 8750 60 0000 C CNN
+F 1 "PRODUCT_SEMIDIRECT" H 15650 8650 60 0000 C CNN
+ 1 15650 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRODUCT_NORMAL_FACTOR_SEMIDIRECT U?
+U 1 1 4B549088
+P 14350 9000
+F 0 "U?" H 14350 8750 60 0000 C CNN
+F 1 "PRODUCT_NORMAL_FACTOR_SEMIDIRECT" H 14350 8650 60 0000 C CNN
+ 1 14350 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BOWTIE U?
+U 1 1 4B549031
+P 13050 9000
+F 0 "U?" H 13050 8750 60 0000 C CNN
+F 1 "BOWTIE" H 13050 8650 60 0000 C CNN
+ 1 13050 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_RA U?
+U 1 1 4B548FC4
+P 16750 24000
+F 0 "U?" H 16750 23750 60 0000 C CNN
+F 1 "TRIANGLE_RA" H 16750 23650 60 0000 C CNN
+ 1 16750 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L MINUS_OR U?
+U 1 1 4B548F82
+P 38900 7500
+F 0 "U?" H 38900 7250 60 0000 C CNN
+F 1 "MINUS_OR" H 38900 7150 60 0000 C CNN
+ 1 38900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OR_MINUS U?
+U 1 1 4B548F3A
+P 37600 7500
+F 0 "U?" H 37600 7250 60 0000 C CNN
+F 1 "OR_MINUS" H 37600 7150 60 0000 C CNN
+ 1 37600 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTERCALATE U?
+U 1 1 4B548EC3
+P 36500 7500
+F 0 "U?" H 36500 7250 60 0000 C CNN
+F 1 "INTERCALATE" H 36500 7150 60 0000 C CNN
+ 1 36500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TARGET U?
+U 1 1 4B548E63
+P 22950 32000
+F 0 "U?" H 22950 31750 60 0000 C CNN
+F 1 "TARGET" H 22950 31650 60 0000 C CNN
+ 1 22950 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L MULTIMAP U?
+U 1 1 4B548E03
+P 23050 9000
+F 0 "U?" H 23050 8750 60 0000 C CNN
+F 1 "MULTIMAP" H 23050 8650 60 0000 C CNN
+ 1 23050 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ORIGINAL U?
+U 1 1 4B548DB3
+P 21600 9000
+F 0 "U?" H 21600 8750 60 0000 C CNN
+F 1 "ORIGINAL" H 21600 8650 60 0000 C CNN
+ 1 21600 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_TALL_E_MINUS U?
+U 1 1 4B548D1C
+P 32150 6000
+F 0 "U?" H 32150 5750 60 0000 C CNN
+F 1 "TRIANGLE_TALL_E_MINUS" H 32150 5650 60 0000 C CNN
+ 1 32150 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRECEDESREL U?
+U 1 1 4B548CCD
+P 30850 6000
+F 0 "U?" H 30850 5750 60 0000 C CNN
+F 1 "PRECEDESREL" H 30850 5650 60 0000 C CNN
+ 1 30850 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BAR_VERT_DBL_STILE_RIGHT_DBL U?
+U 1 1 4B548AFC
+P 35400 7500
+F 0 "U?" H 35400 7250 60 0000 C CNN
+F 1 "BAR_VERT_DBL_STILE_RIGHT_DBL" H 35400 7150 60 0000 C CNN
+ 1 35400 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BAR_VERT_TPL_STILE_RIGHT U?
+U 1 1 4B548AA6
+P 34100 7500
+F 0 "U?" H 34100 7250 60 0000 C CNN
+F 1 "BAR_VERT_TPL_STILE_RIGHT" H 34100 7150 60 0000 C CNN
+ 1 34100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L FORCES U?
+U 1 1 4B548A5E
+P 32800 7500
+F 0 "U?" H 32800 7250 60 0000 C CNN
+F 1 "FORCES" H 32800 7150 60 0000 C CNN
+ 1 32800 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRUE U?
+U 1 1 4B548A15
+P 31500 7500
+F 0 "U?" H 31500 7250 60 0000 C CNN
+F 1 "TRUE" H 31500 7150 60 0000 C CNN
+ 1 31500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MODELS U?
+U 1 1 4B5489D4
+P 30400 7500
+F 0 "U?" H 30400 7250 60 0000 C CNN
+F 1 "MODELS" H 30400 7150 60 0000 C CNN
+ 1 30400 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASSERTION U?
+U 1 1 4B5489CD
+P 29500 7500
+F 0 "U?" H 29500 7250 60 0000 C CNN
+F 1 "ASSERTION" H 29500 7150 60 0000 C CNN
+ 1 29500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DASH_OP_SMALL U?
+U 1 1 4B5488F0
+P 6350 13500
+F 0 "U?" H 6350 13250 60 0000 C CNN
+F 1 "DASH_OP_SMALL" H 6350 13150 60 0000 C CNN
+ 1 6350 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_SMALL U?
+U 1 1 4B548889
+P 5450 13500
+F 0 "U?" H 5450 13250 60 0000 C CNN
+F 1 "SLASH_SMALL" H 5450 13150 60 0000 C CNN
+ 1 5450 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L BETWEEN U?
+U 1 1 4B54879E
+P 28600 7500
+F 0 "U?" H 28600 7250 60 0000 C CNN
+F 1 "BETWEEN" H 28600 7150 60 0000 C CNN
+ 1 28600 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L M_SMALL_ABOVE U?
+U 1 1 4B54866C
+P 11600 10500
+F 0 "U?" H 11600 10250 60 0000 C CNN
+F 1 "M_SMALL_ABOVE" H 11600 10150 60 0000 C CNN
+ 1 11600 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B54865C
+P 14200 10500
+F 0 "U?" H 14200 10250 60 0000 C CNN
+F 1 "EQUAL" H 14200 10150 60 0000 C CNN
+ 1 14200 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B548659
+P 12900 10500
+F 0 "U?" H 12900 10250 60 0000 C CNN
+F 1 "EQUAL" H 12900 10150 60 0000 C CNN
+ 1 12900 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B548652
+P 11600 10500
+F 0 "U?" H 11600 10250 60 0000 C CNN
+F 1 "EQUAL" H 11600 10150 60 0000 C CNN
+ 1 11600 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B5485A2
+P 10300 10500
+F 0 "U?" H 10300 10250 60 0000 C CNN
+F 1 "EQUAL" H 10300 10150 60 0000 C CNN
+ 1 10300 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L QUESTION_ABOVE U?
+U 1 1 4B54859B
+P 10300 10500
+F 0 "U?" H 10300 10250 60 0000 C CNN
+F 1 "QUESTION_ABOVE" H 10300 10150 60 0000 C CNN
+ 1 10300 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DELTA_CAP_ABOVE U?
+U 1 1 4B548545
+P 9000 10500
+F 0 "U?" H 9000 10250 60 0000 C CNN
+F 1 "DELTA_CAP_ABOVE" H 9000 10150 60 0000 C CNN
+ 1 9000 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B54852C
+P 9000 10500
+F 0 "U?" H 9000 10250 60 0000 C CNN
+F 1 "EQUAL" H 9000 10150 60 0000 C CNN
+ 1 9000 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL_DEF U?
+U 1 1 4B54844C
+P 40600 4500
+F 0 "U?" H 40600 4250 60 0000 C CNN
+F 1 "EQUAL_DEF" H 40600 4150 60 0000 C CNN
+ 1 40600 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IMAGEOF U?
+U 1 1 4B548360
+P 39300 4500
+F 0 "U?" H 39300 4250 60 0000 C CNN
+F 1 "IMAGEOF" H 39300 4150 60 0000 C CNN
+ 1 39300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L COLON_EQUAL U?
+U 1 1 4B548298
+P 37800 4500
+F 0 "U?" H 37800 4250 60 0000 C CNN
+F 1 "COLON_EQUAL" H 37800 4150 60 0000 C CNN
+ 1 37800 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EXCESS U?
+U 1 1 4B54827D
+P 36300 4500
+F 0 "U?" H 36300 4250 60 0000 C CNN
+F 1 "EXCESS" H 36300 4150 60 0000 C CNN
+ 1 36300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_CONTOUR_COUNTERCLOCKWISE U?
+U 1 1 4B5481A3
+P 20000 12000
+F 0 "U?" H 20000 11750 60 0000 C CNN
+F 1 "INTEGRAL_CONTOUR_COUNTERCLOCKWISE" H 20000 11650 60 0000 C CNN
+ 1 20000 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_CONTOUR_CLOCKWISE U?
+U 1 1 4B54819A
+P 19000 12000
+F 0 "U?" H 19000 11750 60 0000 C CNN
+F 1 "INTEGRAL_CONTOUR_CLOCKWISE" H 19000 11650 60 0000 C CNN
+ 1 19000 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_CLOCKWISE U?
+U 1 1 4B548192
+P 18000 12000
+F 0 "U?" H 18000 11750 60 0000 C CNN
+F 1 "INTEGRAL_CLOCKWISE" H 18000 11650 60 0000 C CNN
+ 1 18000 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_TPL_CONTOUR U?
+U 1 1 4B5480BF
+P 16600 12000
+F 0 "U?" H 16600 11750 60 0000 C CNN
+F 1 "INTEGRAL_TPL_CONTOUR" H 16600 11650 60 0000 C CNN
+ 1 16600 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_DBL_CONTOUR U?
+U 1 1 4B5480B9
+P 15000 12000
+F 0 "U?" H 15000 11750 60 0000 C CNN
+F 1 "INTEGRAL_DBL_CONTOUR" H 15000 11650 60 0000 C CNN
+ 1 15000 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_SYM U?
+U 1 1 4B546929
+P 7700 10500
+F 0 "U?" H 7700 10250 60 0000 C CNN
+F 1 "LINE_V_SYM" H 7700 10150 60 0000 C CNN
+ 1 7700 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E U?
+U 1 1 4B54691E
+P 7700 10500
+F 0 "U?" H 7700 10250 60 0000 C CNN
+F 1 "ARROW_E" H 7700 10150 60 0000 C CNN
+ 1 7700 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ALTERNATIVE_KEY U?
+U 1 1 4B546477
+P 21400 32000
+F 0 "U?" H 21400 31750 60 0000 C CNN
+F 1 "ALTERNATIVE_KEY" H 21400 31650 60 0000 C CNN
+ 1 21400 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OPTION_KEY U?
+U 1 1 4B54640F
+P 19600 32000
+F 0 "U?" H 19600 31750 60 0000 C CNN
+F 1 "OPTION_KEY" H 19600 31650 60 0000 C CNN
+ 1 19600 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PILLOW U?
+U 1 1 4B546307
+P 11700 9000
+F 0 "U?" H 11700 8750 60 0000 C CNN
+F 1 "PILLOW" H 11700 8650 60 0000 C CNN
+ 1 11700 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FOOT U?
+U 1 1 4B5461FC
+P 10300 9000
+F 0 "U?" H 10300 8750 60 0000 C CNN
+F 1 "SQUARE_FOOT" H 10300 8650 60 0000 C CNN
+ 1 10300 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GROUND U?
+U 1 1 4B546114
+P 18050 32000
+F 0 "U?" H 18050 31750 60 0000 C CNN
+F 1 "GROUND" H 18050 31650 60 0000 C CNN
+ 1 18050 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L FLOOR_CAP U?
+U 1 1 4B546006
+P 28600 3000
+F 0 "U?" H 28600 2750 60 0000 C CNN
+F 1 "FLOOR_CAP" H 28600 2650 60 0000 C CNN
+ 1 28600 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TACK_UP_LARGE U?
+U 1 1 4B545FF7
+P 27500 7500
+F 0 "U?" H 27500 7250 60 0000 C CNN
+F 1 "TACK_UP_LARGE" H 27500 7150 60 0000 C CNN
+ 1 27500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TACK_UP U?
+U 1 1 4B545EA9
+P 26200 7500
+F 0 "U?" H 26200 7250 60 0000 C CNN
+F 1 "TACK_UP" H 26200 7150 60 0000 C CNN
+ 1 26200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TACK U?
+U 1 1 4B545E2E
+P 24900 7500
+F 0 "U?" H 24900 7250 60 0000 C CNN
+F 1 "TACK" H 24900 7150 60 0000 C CNN
+ 1 24900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SUCCEEDS_WAVE U?
+U 1 1 4B545A51
+P 21750 6000
+F 0 "U?" H 21750 5750 60 0000 C CNN
+F 1 "SUCCEEDS_WAVE" H 21750 5650 60 0000 C CNN
+ 1 21750 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRECEDES_WAVE U?
+U 1 1 4B545A46
+P 20450 6000
+F 0 "U?" H 20450 5750 60 0000 C CNN
+F 1 "PRECEDES_WAVE" H 20450 5650 60 0000 C CNN
+ 1 20450 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRECEDESEQ U?
+U 1 1 4B5459A2
+P 19150 6000
+F 0 "U?" H 19150 5750 60 0000 C CNN
+F 1 "PRECEDESEQ" H 19150 5650 60 0000 C CNN
+ 1 19150 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRECEDES U?
+U 1 1 4B54595E
+P 17850 6000
+F 0 "U?" H 17850 5750 60 0000 C CNN
+F 1 "PRECEDES" H 17850 5650 60 0000 C CNN
+ 1 17850 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GREATER_WAVE U?
+U 1 1 4B5455A7
+P 16550 6000
+F 0 "U?" H 16550 5750 60 0000 C CNN
+F 1 "GREATER_WAVE" H 16550 5650 60 0000 C CNN
+ 1 16550 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_WAVE U?
+U 1 1 4B54559D
+P 15250 6000
+F 0 "U?" H 15250 5750 60 0000 C CNN
+F 1 "LESS_WAVE" H 15250 5650 60 0000 C CNN
+ 1 15250 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_GREATER U?
+U 1 1 4B5453F0
+P 13950 6000
+F 0 "U?" H 13950 5750 60 0000 C CNN
+F 1 "LESS_GREATER" H 13950 5650 60 0000 C CNN
+ 1 13950 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_MINUS_GREATER U?
+U 1 1 4B545382
+P 12650 6000
+F 0 "U?" H 12650 5750 60 0000 C CNN
+F 1 "LESS_MINUS_GREATER" H 12650 5650 60 0000 C CNN
+ 1 12650 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_TPL U?
+U 1 1 4B545186
+P 10550 6000
+F 0 "U?" H 10550 5750 60 0000 C CNN
+F 1 "LESS_TPL" H 10550 5650 60 0000 C CNN
+ 1 10550 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_LESS U?
+U 1 1 4B545175
+P 8050 6000
+F 0 "U?" H 8050 5750 60 0000 C CNN
+F 1 "LESS_LESS" H 8050 5650 60 0000 C CNN
+ 1 8050 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIFFERENCE U?
+U 1 1 4B544E6C
+P 35000 4500
+F 0 "U?" H 35000 4250 60 0000 C CNN
+F 1 "DIFFERENCE" H 35000 4150 60 0000 C CNN
+ 1 35000 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUIVALENT U?
+U 1 1 4B544E62
+P 33700 4500
+F 0 "U?" H 33700 4250 60 0000 C CNN
+F 1 "EQUIVALENT" H 33700 4150 60 0000 C CNN
+ 1 33700 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUIVALENT_GEOM U?
+U 1 1 4B544E58
+P 32400 4500
+F 0 "U?" H 32400 4250 60 0000 C CNN
+F 1 "EQUIVALENT_GEOM" H 32400 4150 60 0000 C CNN
+ 1 32400 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRIME_TPL U?
+U 1 1 4B544198
+P 26700 3000
+F 0 "U?" H 26700 2750 60 0000 C CNN
+F 1 "PRIME_TPL" H 26700 2650 60 0000 C CNN
+ 1 26700 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRIME_DBL U?
+U 1 1 4B544190
+P 25750 3000
+F 0 "U?" H 25750 2750 60 0000 C CNN
+F 1 "PRIME_DBL" H 25750 2650 60 0000 C CNN
+ 1 25750 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PRIME U?
+U 1 1 4B544183
+P 25100 3000
+F 0 "U?" H 25100 2750 60 0000 C CNN
+F 1 "PRIME" H 25100 2650 60 0000 C CNN
+ 1 25100 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PERMYRIAD U?
+U 1 1 4B54407E
+P 23050 3000
+F 0 "U?" H 23050 2750 60 0000 C CNN
+F 1 "PERMYRIAD" H 23050 2650 60 0000 C CNN
+ 1 23050 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PERMILLE U?
+U 1 1 4B544072
+P 21250 3000
+F 0 "U?" H 21250 2750 60 0000 C CNN
+F 1 "PERMILLE" H 21250 2650 60 0000 C CNN
+ 1 21250 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIRECT_CURRENT U?
+U 1 1 4B50A5B1
+P 16750 32000
+F 0 "U?" H 16750 31750 60 0000 C CNN
+F 1 "DIRECT_CURRENT" H 16750 31650 60 0000 C CNN
+ 1 16750 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L OPEN_H U?
+U 1 1 4B50A4D1
+P 15450 32000
+F 0 "U?" H 15450 31750 60 0000 C CNN
+F 1 "OPEN_H" H 15450 31650 60 0000 C CNN
+ 1 15450 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HYSTERESIS U?
+U 1 1 4B50A47B
+P 14150 32000
+F 0 "U?" H 14150 31750 60 0000 C CNN
+F 1 "HYSTERESIS" H 14150 31650 60 0000 C CNN
+ 1 14150 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L MONOSTABLE U?
+U 1 1 4B50A447
+P 12850 32000
+F 0 "U?" H 12850 31750 60 0000 C CNN
+F 1 "MONOSTABLE" H 12850 31650 60 0000 C CNN
+ 1 12850 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ESCAPE U?
+U 1 1 4B50A3FE
+P 11550 32000
+F 0 "U?" H 11550 31750 60 0000 C CNN
+F 1 "ESCAPE" H 11550 31650 60 0000 C CNN
+ 1 11550 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTERRUPT U?
+U 1 1 4B50A392
+P 10250 32000
+F 0 "U?" H 10250 31750 60 0000 C CNN
+F 1 "INTERRUPT" H 10250 31650 60 0000 C CNN
+ 1 10250 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PAUSE U?
+U 1 1 4B50A38B
+P 8950 32000
+F 0 "U?" H 8950 31750 60 0000 C CNN
+F 1 "PAUSE" H 8950 31650 60 0000 C CNN
+ 1 8950 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HELM U?
+U 1 1 4B50A324
+P 7650 32000
+F 0 "U?" H 7650 31750 60 0000 C CNN
+F 1 "HELM" H 7650 31650 60 0000 C CNN
+ 1 7650 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUISH_QUAD U?
+U 1 1 4B50A161
+P 13600 12000
+F 0 "U?" H 13600 11750 60 0000 C CNN
+F 1 "SQUISH_QUAD" H 13600 11650 60 0000 C CNN
+ 1 13600 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L WATCH U?
+U 1 1 4B50A099
+P 6350 32000
+F 0 "U?" H 6350 31750 60 0000 C CNN
+F 1 "WATCH" H 6350 31650 60 0000 C CNN
+ 1 6350 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HASH_SYM U?
+U 1 1 4B509FB6
+P 5050 32000
+F 0 "U?" H 5050 31750 60 0000 C CNN
+F 1 "HASH_SYM" H 5050 31650 60 0000 C CNN
+ 1 5050 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TELEPHONE_RECORDER U?
+U 1 1 4B509F37
+P 3750 32000
+F 0 "U?" H 3750 31750 60 0000 C CNN
+F 1 "TELEPHONE_RECORDER" H 3750 31650 60 0000 C CNN
+ 1 3750 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CROP U?
+U 1 1 4B509E8C
+P 2450 32000
+F 0 "U?" H 2450 31750 60 0000 C CNN
+F 1 "CROP" H 2450 31650 60 0000 C CNN
+ 1 2450 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELECTRIC U?
+U 1 1 4B509DF8
+P 1150 32000
+F 0 "U?" H 1150 31750 60 0000 C CNN
+F 1 "ELECTRIC" H 1150 31650 60 0000 C CNN
+ 1 1150 32000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWHEAD_N U?
+U 1 1 4B509B15
+P 18050 18000
+F 0 "U?" H 18050 17750 60 0000 C CNN
+F 1 "ARROWHEAD_N" H 18050 17650 60 0000 C CNN
+ 1 18050 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWHEAD_E U?
+U 1 1 4B509AC5
+P 27150 16500
+F 0 "U?" H 27150 16250 60 0000 C CNN
+F 1 "ARROWHEAD_E" H 27150 16150 60 0000 C CNN
+ 1 27150 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STAR U?
+U 1 1 4B5099F3
+P 23600 7500
+F 0 "U?" H 23600 7250 60 0000 C CNN
+F 1 "STAR" H 23600 7150 60 0000 C CNN
+ 1 23600 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STAR_SMALL U?
+U 1 1 4B50990E
+P 4550 13500
+F 0 "U?" H 4550 13250 60 0000 C CNN
+F 1 "STAR_SMALL" H 4550 13150 60 0000 C CNN
+ 1 4550 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_FILLV U?
+U 1 1 4B505BEA
+P 7950 22500
+F 0 "U?" H 7950 22250 60 0000 C CNN
+F 1 "CIRCLE_FILLV" H 7950 22150 60 0000 C CNN
+ 1 7950 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_BLACK U?
+U 1 1 4B505A3B
+P 6650 22500
+F 0 "U?" H 6650 22250 60 0000 C CNN
+F 1 "CIRCLE_BLACK" H 6650 22150 60 0000 C CNN
+ 1 6650 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_DASHED U?
+U 1 1 4B505579
+P 2450 22500
+F 0 "U?" H 2450 22250 60 0000 C CNN
+F 1 "CIRCLE_DASHED" H 2450 22150 60 0000 C CNN
+ 1 2450 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LOZENGE U?
+U 1 1 4B505465
+P 28450 25450
+F 0 "U?" H 28450 25200 60 0000 C CNN
+F 1 "LOZENGE" H 28450 25100 60 0000 C CNN
+ 1 28450 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAMOND_SMALL_BLACK U?
+U 1 1 4B505415
+P 19350 25450
+F 0 "U?" H 19350 25200 60 0000 C CNN
+F 1 "DIAMOND_SMALL_BLACK" H 19350 25100 60 0000 C CNN
+ 1 19350 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAMOND_SMALL U?
+U 1 1 4B50540E
+P 18050 25450
+F 0 "U?" H 18050 25200 60 0000 C CNN
+F 1 "DIAMOND_SMALL" H 18050 25100 60 0000 C CNN
+ 1 18050 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_TALL_E_BLACK U?
+U 1 1 4B505321
+P 15450 24000
+F 0 "U?" H 15450 23750 60 0000 C CNN
+F 1 "TRIANGLE_TALL_E_BLACK" H 15450 23650 60 0000 C CNN
+ 1 15450 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_TALL_BLACK U?
+U 1 1 4B505189
+P 14150 24000
+F 0 "U?" H 14150 23750 60 0000 C CNN
+F 1 "TRIANGLE_TALL_BLACK" H 14150 23650 60 0000 C CNN
+ 1 14150 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_E_SMALL_BLACK U?
+U 1 1 4B504EC0
+P 12850 24000
+F 0 "U?" H 12850 23750 60 0000 C CNN
+F 1 "TRIANGLE_E_SMALL_BLACK" H 12850 23650 60 0000 C CNN
+ 1 12850 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_E_SMALL U?
+U 1 1 4B504EB8
+P 11550 24000
+F 0 "U?" H 11550 23750 60 0000 C CNN
+F 1 "TRIANGLE_E_SMALL" H 11550 23650 60 0000 C CNN
+ 1 11550 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_E_BLACK U?
+U 1 1 4B504C41
+P 10250 24000
+F 0 "U?" H 10250 23750 60 0000 C CNN
+F 1 "TRIANGLE_E_BLACK" H 10250 23650 60 0000 C CNN
+ 1 10250 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_SMALL_BLACK U?
+U 1 1 4B504BA5
+P 8950 24000
+F 0 "U?" H 8950 23750 60 0000 C CNN
+F 1 "TRIANGLE_SMALL_BLACK" H 8950 23650 60 0000 C CNN
+ 1 8950 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_SMALL U?
+U 1 1 4B504B22
+P 7650 24000
+F 0 "U?" H 7650 23750 60 0000 C CNN
+F 1 "TRIANGLE_SMALL" H 7650 23650 60 0000 C CNN
+ 1 7650 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_BLACK U?
+U 1 1 4B504A91
+P 6350 24000
+F 0 "U?" H 6350 23750 60 0000 C CNN
+F 1 "TRIANGLE_BLACK" H 6350 23650 60 0000 C CNN
+ 1 6350 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PARALLELOGRAM_BLACK U?
+U 1 1 4B504976
+P 27150 25450
+F 0 "U?" H 27150 25200 60 0000 C CNN
+F 1 "PARALLELOGRAM_BLACK" H 27150 25100 60 0000 C CNN
+ 1 27150 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L PARALLELOGRAM U?
+U 1 1 4B50496E
+P 25850 25450
+F 0 "U?" H 25850 25200 60 0000 C CNN
+F 1 "PARALLELOGRAM" H 25850 25100 60 0000 C CNN
+ 1 25850 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L RECTANGLE_V_BLACK U?
+U 1 1 4B5048A1
+P 24550 25450
+F 0 "U?" H 24550 25200 60 0000 C CNN
+F 1 "RECTANGLE_V_BLACK" H 24550 25100 60 0000 C CNN
+ 1 24550 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L RECTANGLE_BLACK U?
+U 1 1 4B50489B
+P 23250 25450
+F 0 "U?" H 23250 25200 60 0000 C CNN
+F 1 "RECTANGLE_BLACK" H 23250 25100 60 0000 C CNN
+ 1 23250 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L RECTANGLE_V U?
+U 1 1 4B504891
+P 21950 25450
+F 0 "U?" H 21950 25200 60 0000 C CNN
+F 1 "RECTANGLE_V" H 21950 25100 60 0000 C CNN
+ 1 21950 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L RECTANGLE U?
+U 1 1 4B50488C
+P 20650 25450
+F 0 "U?" H 20650 25200 60 0000 C CNN
+F 1 "RECTANGLE" H 20650 25100 60 0000 C CNN
+ 1 20650 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_ROUNDED U?
+U 1 1 4B5045DE
+P 11550 25450
+F 0 "U?" H 11550 25200 60 0000 C CNN
+F 1 "SQUARE_ROUNDED" H 11550 25100 60 0000 C CNN
+ 1 11550 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FILLD U?
+U 1 1 4B504582
+P 10250 25450
+F 0 "U?" H 10250 25200 60 0000 C CNN
+F 1 "SQUARE_FILLD" H 10250 25100 60 0000 C CNN
+ 1 10250 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FILLS U?
+U 1 1 4B504576
+P 8950 25450
+F 0 "U?" H 8950 25200 60 0000 C CNN
+F 1 "SQUARE_FILLS" H 8950 25100 60 0000 C CNN
+ 1 8950 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FILLB U?
+U 1 1 4B504570
+P 7650 25450
+F 0 "U?" H 7650 25200 60 0000 C CNN
+F 1 "SQUARE_FILLB" H 7650 25100 60 0000 C CNN
+ 1 7650 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FILLO U?
+U 1 1 4B5044C1
+P 6350 25450
+F 0 "U?" H 6350 25200 60 0000 C CNN
+F 1 "SQUARE_FILLO" H 6350 25100 60 0000 C CNN
+ 1 6350 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FILLH U?
+U 1 1 4B5044BB
+P 5050 25450
+F 0 "U?" H 5050 25200 60 0000 C CNN
+F 1 "SQUARE_FILLH" H 5050 25100 60 0000 C CNN
+ 1 5050 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_FILLV U?
+U 1 1 4B504477
+P 3750 25450
+F 0 "U?" H 3750 25200 60 0000 C CNN
+F 1 "SQUARE_FILLV" H 3750 25100 60 0000 C CNN
+ 1 3750 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L PROPORTIONAL U?
+U 1 1 4B4F5B3C
+P 31100 4500
+F 0 "U?" H 31100 4250 60 0000 C CNN
+F 1 "PROPORTIONAL" H 31100 4150 60 0000 C CNN
+ 1 31100 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INFINITY U?
+U 1 1 4B4F5AA7
+P 8950 9000
+F 0 "U?" H 8950 8750 60 0000 C CNN
+F 1 "INFINITY" H 8950 8650 60 0000 C CNN
+ 1 8950 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIGIT_3_SMALL U?
+U 1 1 4B4F593C
+P 6250 9850
+F 0 "U?" H 6250 9600 60 0000 C CNN
+F 1 "DIGIT_3_SMALL" H 6250 9500 60 0000 C CNN
+ 1 6250 9850
+ 1 0 0 -1
+$EndComp
+$Comp
+L RADICAL U?
+U 1 1 4B4F591D
+P 6250 10500
+F 0 "U?" H 6250 10250 60 0000 C CNN
+F 1 "RADICAL" H 6250 10150 60 0000 C CNN
+ 1 6250 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAMOND_BLACK U?
+U 1 1 4B4F54AE
+P 16750 25450
+F 0 "U?" H 16750 25200 60 0000 C CNN
+F 1 "DIAMOND_BLACK" H 16750 25100 60 0000 C CNN
+ 1 16750 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIAMOND U?
+U 1 1 4B4F54A9
+P 15450 25450
+F 0 "U?" H 15450 25200 60 0000 C CNN
+F 1 "DIAMOND" H 15450 25100 60 0000 C CNN
+ 1 15450 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L RECTANGLE_V_HUGE_SLASH U?
+U 1 1 4B4F5390
+P 12200 12000
+F 0 "U?" H 12200 11750 60 0000 C CNN
+F 1 "RECTANGLE_V_HUGE_SLASH" H 12200 11650 60 0000 C CNN
+ 1 12200 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL_SLASH U?
+U 1 1 4B4F52B8
+P 22000 4500
+F 0 "U?" H 22000 4250 60 0000 C CNN
+F 1 "EQUAL_SLASH" H 22000 4150 60 0000 C CNN
+ 1 22000 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE_MINUS U?
+U 1 1 4B4F51F1
+P 2450 10500
+F 0 "U?" H 2450 10250 60 0000 C CNN
+F 1 "WAVE_MINUS" H 2450 10150 60 0000 C CNN
+ 1 2450 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIVIDE U?
+U 1 1 4B4F515C
+P 5100 10500
+F 0 "U?" H 5100 10250 60 0000 C CNN
+F 1 "DIVIDE" H 5100 10150 60 0000 C CNN
+ 1 5100 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L RECTANGLE_V_HUGE U?
+U 1 1 4B4F514E
+P 5100 10500
+F 0 "U?" H 5100 10250 60 0000 C CNN
+F 1 "RECTANGLE_V_HUGE" H 5100 10150 60 0000 C CNN
+ 1 5100 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_SMALL_BLACK U?
+U 1 1 4B4F505F
+P 14150 25450
+F 0 "U?" H 14150 25200 60 0000 C CNN
+F 1 "SQUARE_SMALL_BLACK" H 14150 25100 60 0000 C CNN
+ 1 14150 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_SMALL U?
+U 1 1 4B4F5059
+P 12850 25450
+F 0 "U?" H 12850 25200 60 0000 C CNN
+F 1 "SQUARE_SMALL" H 12850 25100 60 0000 C CNN
+ 1 12850 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE_BLACK U?
+U 1 1 4B4F4FA6
+P 2450 25450
+F 0 "U?" H 2450 25200 60 0000 C CNN
+F 1 "SQUARE_BLACK" H 2450 25100 60 0000 C CNN
+ 1 2450 25450
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_SYM U?
+U 1 1 4B4F321A
+P 3750 10500
+F 0 "U?" H 3750 10250 60 0000 C CNN
+F 1 "SLASH_SYM" H 3750 10150 60 0000 C CNN
+ 1 3750 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE U?
+U 1 1 4B4F3213
+P 3750 10500
+F 0 "U?" H 3750 10250 60 0000 C CNN
+F 1 "CIRCLE" H 3750 10150 60 0000 C CNN
+ 1 3750 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OR_HUGE U?
+U 1 1 4B4F1F15
+P 10700 12000
+F 0 "U?" H 10700 11750 60 0000 C CNN
+F 1 "OR_HUGE" H 10700 11650 60 0000 C CNN
+ 1 10700 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UNION_HUGE U?
+U 1 1 4B4F1EF1
+P 9100 12000
+F 0 "U?" H 9100 11750 60 0000 C CNN
+F 1 "UNION_HUGE" H 9100 11650 60 0000 C CNN
+ 1 9100 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQCUP U?
+U 1 1 4B4F1AAA
+P 22300 7500
+F 0 "U?" H 22300 7250 60 0000 C CNN
+F 1 "SQCUP" H 22300 7150 60 0000 C CNN
+ 1 22300 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQIMAGE_MINUS U?
+U 1 1 4B4F19ED
+P 26950 6000
+F 0 "U?" H 26950 5750 60 0000 C CNN
+F 1 "SQIMAGE_MINUS" H 26950 5650 60 0000 C CNN
+ 1 26950 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SUBSET_MINUS U?
+U 1 1 4B4F19E6
+P 25650 6000
+F 0 "U?" H 25650 5750 60 0000 C CNN
+F 1 "SUBSET_MINUS" H 25650 5650 60 0000 C CNN
+ 1 25650 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQIMAGE U?
+U 1 1 4B4F1914
+P 24350 6000
+F 0 "U?" H 24350 5750 60 0000 C CNN
+F 1 "SQIMAGE" H 24350 5650 60 0000 C CNN
+ 1 24350 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SUBSET U?
+U 1 1 4B4F190B
+P 23050 6000
+F 0 "U?" H 23050 5750 60 0000 C CNN
+F 1 "SUBSET" H 23050 5650 60 0000 C CNN
+ 1 23050 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L THEREFORE U?
+U 1 1 4B4F15F7
+P 21000 7500
+F 0 "U?" H 21000 7250 60 0000 C CNN
+F 1 "THEREFORE" H 21000 7150 60 0000 C CNN
+ 1 21000 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L RATIO U?
+U 1 1 4B4F1549
+P 19950 7500
+F 0 "U?" H 19950 7250 60 0000 C CNN
+F 1 "RATIO" H 19950 7150 60 0000 C CNN
+ 1 19950 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_TALL_E U?
+U 1 1 4B4F114E
+P 5050 24000
+F 0 "U?" H 5050 23750 60 0000 C CNN
+F 1 "TRIANGLE_TALL_E" H 5050 23650 60 0000 C CNN
+ 1 5050 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_TALL U?
+U 1 1 4B4F1149
+P 3750 24000
+F 0 "U?" H 3750 23750 60 0000 C CNN
+F 1 "TRIANGLE_TALL" H 3750 23650 60 0000 C CNN
+ 1 3750 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L SQUARE U?
+U 1 1 4B4F1079
+P 1150 25500
+F 0 "U?" H 1150 25250 60 0000 C CNN
+F 1 "SQUARE" H 1150 25150 60 0000 C CNN
+ 1 1150 25500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE_E U?
+U 1 1 4B4F106B
+P 2450 24000
+F 0 "U?" H 2450 23750 60 0000 C CNN
+F 1 "TRIANGLE_E" H 2450 23650 60 0000 C CNN
+ 1 2450 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L TRIANGLE U?
+U 1 1 4B4F1004
+P 1150 24000
+F 0 "U?" H 1150 23750 60 0000 C CNN
+F 1 "TRIANGLE" H 1150 23650 60 0000 C CNN
+ 1 1150 24000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE_RIGHT_ARC U?
+U 1 1 4B4F0F8D
+P 7650 9000
+F 0 "U?" H 7650 8750 60 0000 C CNN
+F 1 "ANGLE_RIGHT_ARC" H 7650 8650 60 0000 C CNN
+ 1 7650 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L GREATER_NOTEQUAL U?
+U 1 1 4B4F0B5C
+P 6350 6000
+F 0 "U?" H 6350 5750 60 0000 C CNN
+F 1 "GREATER_NOTEQUAL" H 6350 5650 60 0000 C CNN
+ 1 6350 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_NOTEQUAL U?
+U 1 1 4B4F0B0D
+P 5050 6000
+F 0 "U?" H 5050 5750 60 0000 C CNN
+F 1 "LESS_NOTEQUAL" H 5050 5650 60 0000 C CNN
+ 1 5050 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_EQUAL U?
+U 1 1 4B4F0A6B
+P 3750 6000
+F 0 "U?" H 3750 5750 60 0000 C CNN
+F 1 "LESS_EQUAL" H 3750 5650 60 0000 C CNN
+ 1 3750 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS_MINUS U?
+U 1 1 4B4F09F7
+P 2450 6000
+F 0 "U?" H 2450 5750 60 0000 C CNN
+F 1 "LESS_MINUS" H 2450 5650 60 0000 C CNN
+ 1 2450 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DOT U?
+U 1 1 4B4F015D
+P 19150 7500
+F 0 "U?" H 19150 7250 60 0000 C CNN
+F 1 "DOT" H 19150 7150 60 0000 C CNN
+ 1 19150 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL_SMALL U?
+U 1 1 4B4EFE88
+P 3650 13500
+F 0 "U?" H 3650 13250 60 0000 C CNN
+F 1 "EQUAL_SMALL" H 3650 13150 60 0000 C CNN
+ 1 3650 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MULTIPLY_SMALL U?
+U 1 1 4B4EFD80
+P 2750 13500
+F 0 "U?" H 2750 13250 60 0000 C CNN
+F 1 "MULTIPLY_SMALL" H 2750 13150 60 0000 C CNN
+ 1 2750 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MINUS_SMALL U?
+U 1 1 4B4EFD30
+P 1850 13500
+F 0 "U?" H 1850 13250 60 0000 C CNN
+F 1 "MINUS_SMALL" H 1850 13150 60 0000 C CNN
+ 1 1850 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PLUS_SMALL U?
+U 1 1 4B4EFD26
+P 950 13500
+F 0 "U?" H 950 13250 60 0000 C CNN
+F 1 "PLUS_SMALL" H 950 13150 60 0000 C CNN
+ 1 950 13500
+ 1 0 0 -1
+$EndComp
+$Comp
+L STRICTEQV U?
+U 1 1 4B4E13A1
+P 25900 4500
+F 0 "U?" H 25900 4250 60 0000 C CNN
+F 1 "STRICTEQV" H 25900 4150 60 0000 C CNN
+ 1 25900 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L IDENTICAL U?
+U 1 1 4B4E1301
+P 20700 4500
+F 0 "U?" H 20700 4250 60 0000 C CNN
+F 1 "IDENTICAL" H 20700 4150 60 0000 C CNN
+ 1 20700 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_OP U?
+U 1 1 4B4E11F7
+P 1150 10500
+F 0 "U?" H 1150 10250 60 0000 C CNN
+F 1 "SLASH_OP" H 1150 10150 60 0000 C CNN
+ 1 1150 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE_EQUAL U?
+U 1 1 4B4E11EC
+P 1150 10500
+F 0 "U?" H 1150 10250 60 0000 C CNN
+F 1 "WAVE_EQUAL" H 1150 10150 60 0000 C CNN
+ 1 1150 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SLASH_REL U?
+U 1 1 4B4E10CD
+P 2450 10500
+F 0 "U?" H 2450 10250 60 0000 C CNN
+F 1 "SLASH_REL" H 2450 10150 60 0000 C CNN
+ 1 2450 10500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE_TPL U?
+U 1 1 4B4E103D
+P 29800 4500
+F 0 "U?" H 29800 4250 60 0000 C CNN
+F 1 "WAVE_TPL" H 29800 4150 60 0000 C CNN
+ 1 29800 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASYMP_MINUS U?
+U 1 1 4B4E1000
+P 28500 4500
+F 0 "U?" H 28500 4250 60 0000 C CNN
+F 1 "ASYMP_MINUS" H 28500 4150 60 0000 C CNN
+ 1 28500 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE_NOTEQUAL U?
+U 1 1 4B4E0FB2
+P 27200 4500
+F 0 "U?" H 27200 4250 60 0000 C CNN
+F 1 "WAVE_NOTEQUAL" H 27200 4150 60 0000 C CNN
+ 1 27200 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE_EQUAL U?
+U 1 1 4B4E0F20
+P 24600 4500
+F 0 "U?" H 24600 4250 60 0000 C CNN
+F 1 "WAVE_EQUAL" H 24600 4150 60 0000 C CNN
+ 1 24600 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WREATH_PRODUCT U?
+U 1 1 4B4E0EA1
+P 18100 7500
+F 0 "U?" H 18100 7250 60 0000 C CNN
+F 1 "WREATH_PRODUCT" H 18100 7150 60 0000 C CNN
+ 1 18100 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L S_LAZY U?
+U 1 1 4B4E0E0D
+P 23300 4500
+F 0 "U?" H 23300 4250 60 0000 C CNN
+F 1 "S_LAZY" H 23300 4150 60 0000 C CNN
+ 1 23300 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASYMP U?
+U 1 1 4B4E0C5D
+P 19400 4500
+F 0 "U?" H 19400 4250 60 0000 C CNN
+F 1 "ASYMP" H 19400 4150 60 0000 C CNN
+ 1 19400 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE_MINUS U?
+U 1 1 4B4E0C14
+P 18100 4500
+F 0 "U?" H 18100 4250 60 0000 C CNN
+F 1 "WAVE_MINUS" H 18100 4150 60 0000 C CNN
+ 1 18100 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PROPORTION U?
+U 1 1 4B4E0B36
+P 16800 7500
+F 0 "U?" H 16800 7250 60 0000 C CNN
+F 1 "PROPORTION" H 16800 7150 60 0000 C CNN
+ 1 16800 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SINE U?
+U 1 1 4B4E0A6C
+P 6350 9000
+F 0 "U?" H 6350 8750 60 0000 C CNN
+F 1 "SINE" H 6350 8650 60 0000 C CNN
+ 1 6350 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L WAVE U?
+U 1 1 4B4E09DF
+P 15500 7500
+F 0 "U?" H 15500 7250 60 0000 C CNN
+F 1 "WAVE" H 15500 7150 60 0000 C CNN
+ 1 15500 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_CONTOUR U?
+U 1 1 4B4E095D
+P 7800 12000
+F 0 "U?" H 7800 11750 60 0000 C CNN
+F 1 "INTEGRAL_CONTOUR" H 7800 11650 60 0000 C CNN
+ 1 7800 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_TPL U?
+U 1 1 4B4E08BB
+P 6400 12000
+F 0 "U?" H 6400 11750 60 0000 C CNN
+F 1 "INTEGRAL_TPL" H 6400 11650 60 0000 C CNN
+ 1 6400 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL_DBL U?
+U 1 1 4B4E0867
+P 4800 12000
+F 0 "U?" H 4800 11750 60 0000 C CNN
+F 1 "INTEGRAL_DBL" H 4800 11650 60 0000 C CNN
+ 1 4800 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L INTEGRAL U?
+U 1 1 4B4E0862
+P 3600 12000
+F 0 "U?" H 3600 11750 60 0000 C CNN
+F 1 "INTEGRAL" H 3600 11650 60 0000 C CNN
+ 1 3600 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L UNION U?
+U 1 1 4B4E07AB
+P 14200 7500
+F 0 "U?" H 14200 7250 60 0000 C CNN
+F 1 "UNION" H 14200 7150 60 0000 C CNN
+ 1 14200 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L OR U?
+U 1 1 4B4E0708
+P 12900 7500
+F 0 "U?" H 12900 7250 60 0000 C CNN
+F 1 "OR" H 12900 7150 60 0000 C CNN
+ 1 12900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_DBL_SLASH U?
+U 1 1 4B4E0698
+P 15650 4500
+F 0 "U?" H 15650 4250 60 0000 C CNN
+F 1 "LINE_V_DBL_SLASH" H 15650 4150 60 0000 C CNN
+ 1 15650 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_DBL U?
+U 1 1 4B4E0691
+P 14650 4500
+F 0 "U?" H 14650 4250 60 0000 C CNN
+F 1 "LINE_V_DBL" H 14650 4150 60 0000 C CNN
+ 1 14650 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V_SLASH U?
+U 1 1 4B4E0629
+P 13650 4500
+F 0 "U?" H 13650 4250 60 0000 C CNN
+F 1 "LINE_V_SLASH" H 13650 4150 60 0000 C CNN
+ 1 13650 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LINE_V U?
+U 1 1 4B4E0623
+P 12650 4500
+F 0 "U?" H 12650 4250 60 0000 C CNN
+F 1 "LINE_V" H 12650 4150 60 0000 C CNN
+ 1 12650 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE_ARC U?
+U 1 1 4B4E04D3
+P 5050 9000
+F 0 "U?" H 5050 8750 60 0000 C CNN
+F 1 "ANGLE_ARC" H 5050 8650 60 0000 C CNN
+ 1 5050 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE_MEAS U?
+U 1 1 4B4E0417
+P 3750 9000
+F 0 "U?" H 3750 8750 60 0000 C CNN
+F 1 "ANGLE_MEAS" H 3750 8650 60 0000 C CNN
+ 1 3750 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE_RIGHT U?
+U 1 1 4B4E038E
+P 2450 9000
+F 0 "U?" H 2450 8750 60 0000 C CNN
+F 1 "ANGLE_RIGHT" H 2450 8650 60 0000 C CNN
+ 1 2450 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ANGLE U?
+U 1 1 4B4E0387
+P 1150 9000
+F 0 "U?" H 1150 8750 60 0000 C CNN
+F 1 "ANGLE" H 1150 8650 60 0000 C CNN
+ 1 1150 9000
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_SMALL_BLACK U?
+U 1 1 4B4E0282
+P 11600 7500
+F 0 "U?" H 11600 7250 60 0000 C CNN
+F 1 "CIRCLE_SMALL_BLACK" H 11600 7150 60 0000 C CNN
+ 1 11600 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_SMALL U?
+U 1 1 4B4E027B
+P 10300 7500
+F 0 "U?" H 10300 7250 60 0000 C CNN
+F 1 "CIRCLE_SMALL" H 10300 7150 60 0000 C CNN
+ 1 10300 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASTERISK_OP U?
+U 1 1 4B4E023C
+P 6400 7500
+F 0 "U?" H 6400 7250 60 0000 C CNN
+F 1 "ASTERISK_OP" H 6400 7150 60 0000 C CNN
+ 1 6400 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L SIGMA_CAP_HUGE U?
+U 1 1 4B4DFE89
+P 2450 12000
+F 0 "U?" H 2450 11750 60 0000 C CNN
+F 1 "SIGMA_CAP_HUGE" H 2450 11650 60 0000 C CNN
+ 1 2450 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PI_CAP_HUGE U?
+U 1 1 4B4DFE80
+P 1150 12000
+F 0 "U?" H 1150 11750 60 0000 C CNN
+F 1 "PI_CAP_HUGE" H 1150 11650 60 0000 C CNN
+ 1 1150 12000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_SMALL U?
+U 1 1 4B4DFD50
+P 4050 4500
+F 0 "U?" H 4050 4250 60 0000 C CNN
+F 1 "ELEMENT_SMALL" H 4050 4150 60 0000 C CNN
+ 1 4050 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT_SLASH U?
+U 1 1 4B4DFD46
+P 2700 4500
+F 0 "U?" H 2700 4250 60 0000 C CNN
+F 1 "ELEMENT_SLASH" H 2700 4150 60 0000 C CNN
+ 1 2700 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ELEMENT U?
+U 1 1 4B4DFD3B
+P 1250 4500
+F 0 "U?" H 1250 4250 60 0000 C CNN
+F 1 "ELEMENT" H 1250 4150 60 0000 C CNN
+ 1 1250 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_LARGE_SLASH U?
+U 1 1 4B4DFD19
+P 5300 22500
+F 0 "U?" H 5300 22250 60 0000 C CNN
+F 1 "CIRCLE_LARGE_SLASH" H 5300 22150 60 0000 C CNN
+ 1 5300 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE_LARGE U?
+U 1 1 4B4DFD14
+P 3850 22500
+F 0 "U?" H 3850 22250 60 0000 C CNN
+F 1 "CIRCLE_LARGE" H 3850 22150 60 0000 C CNN
+ 1 3850 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CIRCLE U?
+U 1 1 4B4DFCFC
+P 1150 22500
+F 0 "U?" H 1150 22250 60 0000 C CNN
+F 1 "CIRCLE" H 1150 22150 60 0000 C CNN
+ 1 1150 22500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HARPOONS_W_E U?
+U 1 1 4B4DF569
+P 44850 16500
+F 0 "U?" H 44850 16250 60 0000 C CNN
+F 1 "HARPOONS_W_E" H 44850 16150 60 0000 C CNN
+ 1 44850 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWS_E_E_E U?
+U 1 1 4B4DF54C
+P 43550 16500
+F 0 "U?" H 43550 16250 60 0000 C CNN
+F 1 "ARROWS_E_E_E" H 43550 16150 60 0000 C CNN
+ 1 43550 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWS_N_N U?
+U 1 1 4B4DF4B7
+P 40600 18000
+F 0 "U?" H 40600 17750 60 0000 C CNN
+F 1 "ARROWS_N_N" H 40600 17650 60 0000 C CNN
+ 1 40600 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWS_N_S U?
+U 1 1 4B4DF4B1
+P 39300 18000
+F 0 "U?" H 39300 17750 60 0000 C CNN
+F 1 "ARROWS_N_S" H 39300 17650 60 0000 C CNN
+ 1 39300 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWS_E_E U?
+U 1 1 4B4DF3B0
+P 42250 16500
+F 0 "U?" H 42250 16250 60 0000 C CNN
+F 1 "ARROWS_E_E" H 42250 16150 60 0000 C CNN
+ 1 42250 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L TAB U?
+U 1 1 4B4DF375
+P 40950 16500
+F 0 "U?" H 40950 16250 60 0000 C CNN
+F 1 "TAB" H 40950 16150 60 0000 C CNN
+ 1 40950 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROWS_W_E U?
+U 1 1 4B4DF36F
+P 39650 16500
+F 0 "U?" H 39650 16250 60 0000 C CNN
+F 1 "ARROWS_W_E" H 39650 16150 60 0000 C CNN
+ 1 39650 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_CORNER_NE U?
+U 1 1 4B4DF267
+P 3750 19500
+F 0 "U?" H 3750 19250 60 0000 C CNN
+F 1 "ARROW_CORNER_NE" H 3750 19150 60 0000 C CNN
+ 1 3750 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_NE_TOP_BAR U?
+U 1 1 4B4DF25E
+P 2450 19500
+F 0 "U?" H 2450 19250 60 0000 C CNN
+F 1 "ARROW_NE_TOP_BAR" H 2450 19150 60 0000 C CNN
+ 1 2450 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_CLOCKWISE_OPEN U?
+U 1 1 4B4DF0A2
+P 14900 19600
+F 0 "U?" H 14900 19350 60 0000 C CNN
+F 1 "ARROW_CLOCKWISE_OPEN" H 14900 19250 60 0000 C CNN
+ 1 14900 19600
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_CLOCKWISE_SEMI U?
+U 1 1 4B4DF09C
+P 13600 19600
+F 0 "U?" H 13600 19350 60 0000 C CNN
+F 1 "ARROW_CLOCKWISE_SEMI" H 13600 19250 60 0000 C CNN
+ 1 13600 19600
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_E U?
+U 1 1 4B4DEEBC
+P 12300 19600
+F 0 "U?" H 12300 19350 60 0000 C CNN
+F 1 "ARROW_N_E" H 12300 19250 60 0000 C CNN
+ 1 12300 19600
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_N U?
+U 1 1 4B4DEE76
+P 11000 19600
+F 0 "U?" H 11000 19350 60 0000 C CNN
+F 1 "ARROW_E_N" H 11000 19250 60 0000 C CNN
+ 1 11000 19600
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_NS_WHITE U?
+U 1 1 4B4DEB6D
+P 33600 18000
+F 0 "U?" H 33600 17750 60 0000 C CNN
+F 1 "ARROW_NS_WHITE" H 33600 17650 60 0000 C CNN
+ 1 33600 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_PEDESTAL_WHITE_VBAR U?
+U 1 1 4B4DEB1A
+P 16750 18000
+F 0 "U?" H 16750 17750 60 0000 C CNN
+F 1 "ARROW_N_PEDESTAL_WHITE_VBAR" H 16750 17650 60 0000 C CNN
+ 1 16750 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_PEDESTAL_WHITE_HBAR U?
+U 1 1 4B4DEB13
+P 15450 18000
+F 0 "U?" H 15450 17750 60 0000 C CNN
+F 1 "ARROW_N_PEDESTAL_WHITE_HBAR" H 15450 17650 60 0000 C CNN
+ 1 15450 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_DBL_N_PEDESTAL_WHITE U?
+U 1 1 4B4DEAF2
+P 14150 18000
+F 0 "U?" H 14150 17750 60 0000 C CNN
+F 1 "ARROW_DBL_N_PEDESTAL_WHITE" H 14150 17650 60 0000 C CNN
+ 1 14150 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_DBL_N_WHITE U?
+U 1 1 4B4DEAE8
+P 12850 18000
+F 0 "U?" H 12850 17750 60 0000 C CNN
+F 1 "ARROW_DBL_N_WHITE" H 12850 17650 60 0000 C CNN
+ 1 12850 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_PEDESTAL_WHITE U?
+U 1 1 4B4DEADC
+P 11550 18000
+F 0 "U?" H 11550 17750 60 0000 C CNN
+F 1 "ARROW_N_PEDESTAL_WHITE" H 11550 17650 60 0000 C CNN
+ 1 11550 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_BAR_WHITE U?
+U 1 1 4B4DEAD4
+P 10250 18000
+F 0 "U?" H 10250 17750 60 0000 C CNN
+F 1 "ARROW_N_BAR_WHITE" H 10250 17650 60 0000 C CNN
+ 1 10250 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_WHITE U?
+U 1 1 4B4DEACB
+P 8950 18000
+F 0 "U?" H 8950 17750 60 0000 C CNN
+F 1 "ARROW_N_WHITE" H 8950 17650 60 0000 C CNN
+ 1 8950 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_STROKE_DBL U?
+U 1 1 4B4DE848
+P 7650 18000
+F 0 "U?" H 7650 17750 60 0000 C CNN
+F 1 "ARROW_N_STROKE_DBL" H 7650 17650 60 0000 C CNN
+ 1 7650 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_DBL U?
+U 1 1 4B4DE7AE
+P 6350 18000
+F 0 "U?" H 6350 17750 60 0000 C CNN
+F 1 "ARROW_N_DBL" H 6350 17650 60 0000 C CNN
+ 1 6350 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_WE_DBL_SLASH U?
+U 1 1 4B4DE74A
+P 37800 16500
+F 0 "U?" H 37800 16250 60 0000 C CNN
+F 1 "ARROW_WE_DBL_SLASH" H 37800 16150 60 0000 C CNN
+ 1 37800 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_NS_BAR U?
+U 1 1 4B4DE183
+P 32300 18000
+F 0 "U?" H 32300 17750 60 0000 C CNN
+F 1 "ARROW_NS_BAR" H 32300 17650 60 0000 C CNN
+ 1 32300 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HARPOON_RIGHT_N U?
+U 1 1 4B4DE0A9
+P 5050 18000
+F 0 "U?" H 5050 17750 60 0000 C CNN
+F 1 "HARPOON_RIGHT_N" H 5050 17650 60 0000 C CNN
+ 1 5050 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N_BAR U?
+U 1 1 4B4DE038
+P 3750 18000
+F 0 "U?" H 3750 17750 60 0000 C CNN
+F 1 "ARROW_N_BAR" H 3750 17650 60 0000 C CNN
+ 1 3750 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_DBL_N U?
+U 1 1 4B4DDFEE
+P 2450 18000
+F 0 "U?" H 2450 17750 60 0000 C CNN
+F 1 "ARROW_DBL_N" H 2450 17650 60 0000 C CNN
+ 1 2450 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_BAR_E U?
+U 1 1 4B4DDE05
+P 25850 16500
+F 0 "U?" H 25850 16250 60 0000 C CNN
+F 1 "ARROW_BAR_E" H 25850 16150 60 0000 C CNN
+ 1 25850 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_TPL U?
+U 1 1 4B4DDCA8
+P 24550 16500
+F 0 "U?" H 24550 16250 60 0000 C CNN
+F 1 "ARROW_E_TPL" H 24550 16150 60 0000 C CNN
+ 1 24550 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_WE_DBL U?
+U 1 1 4B4DDBD6
+P 36500 16500
+F 0 "U?" H 36500 16250 60 0000 C CNN
+F 1 "ARROW_WE_DBL" H 36500 16150 60 0000 C CNN
+ 1 36500 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_WALL_WHITE U?
+U 1 1 4B4DDB77
+P 23250 16500
+F 0 "U?" H 23250 16250 60 0000 C CNN
+F 1 "ARROW_E_WALL_WHITE" H 23250 16150 60 0000 C CNN
+ 1 23250 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_OPEN_WE U?
+U 1 1 4B4DDB07
+P 35200 16500
+F 0 "U?" H 35200 16250 60 0000 C CNN
+F 1 "ARROW_OPEN_WE" H 35200 16150 60 0000 C CNN
+ 1 35200 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_WE_STROKE_DBL U?
+U 1 1 4B4DDAC4
+P 33900 16500
+F 0 "U?" H 33900 16250 60 0000 C CNN
+F 1 "ARROW_WE_STROKE_DBL" H 33900 16150 60 0000 C CNN
+ 1 33900 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_STROKE_DBL U?
+U 1 1 4B4DDA8A
+P 21950 16500
+F 0 "U?" H 21950 16250 60 0000 C CNN
+F 1 "ARROW_E_STROKE_DBL" H 21950 16150 60 0000 C CNN
+ 1 21950 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_OPEN_E U?
+U 1 1 4B4DDA15
+P 20650 16500
+F 0 "U?" H 20650 16250 60 0000 C CNN
+F 1 "ARROW_OPEN_E" H 20650 16150 60 0000 C CNN
+ 1 20650 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_WHITE U?
+U 1 1 4B4DD9B8
+P 19350 16500
+F 0 "U?" H 19350 16250 60 0000 C CNN
+F 1 "ARROW_E_WHITE" H 19350 16150 60 0000 C CNN
+ 1 19350 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_DBL_SLASH U?
+U 1 1 4B4DD886
+P 18050 16500
+F 0 "U?" H 18050 16250 60 0000 C CNN
+F 1 "ARROW_E_DBL_SLASH" H 18050 16150 60 0000 C CNN
+ 1 18050 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_DBL U?
+U 1 1 4B4DD7FC
+P 16750 16500
+F 0 "U?" H 16750 16250 60 0000 C CNN
+F 1 "ARROW_E_DBL" H 16750 16150 60 0000 C CNN
+ 1 16750 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_SQUIGGLE U?
+U 1 1 4B4DD55B
+P 15450 16500
+F 0 "U?" H 15450 16250 60 0000 C CNN
+F 1 "ARROW_E_SQUIGGLE" H 15450 16150 60 0000 C CNN
+ 1 15450 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L HARPOON_UP_E U?
+U 1 1 4B4DD469
+P 14150 16500
+F 0 "U?" H 14150 16250 60 0000 C CNN
+F 1 "HARPOON_UP_E" H 14150 16150 60 0000 C CNN
+ 1 14150 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_NE U?
+U 1 1 4B4DD441
+P 1150 19500
+F 0 "U?" H 1150 19250 60 0000 C CNN
+F 1 "ARROW_NE" H 1150 19150 60 0000 C CNN
+ 1 1150 19500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_DASHED U?
+U 1 1 4B4DD3C3
+P 12850 16500
+F 0 "U?" H 12850 16250 60 0000 C CNN
+F 1 "ARROW_E_DASHED" H 12850 16150 60 0000 C CNN
+ 1 12850 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_WE_WAVE U?
+U 1 1 4B4DD3AD
+P 32600 16500
+F 0 "U?" H 32600 16250 60 0000 C CNN
+F 1 "ARROW_WE_WAVE" H 32600 16150 60 0000 C CNN
+ 1 32600 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_WE_STROKE U?
+U 1 1 4B4DD39B
+P 31300 16500
+F 0 "U?" H 31300 16250 60 0000 C CNN
+F 1 "ARROW_WE_STROKE" H 31300 16150 60 0000 C CNN
+ 1 31300 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_N U?
+U 1 1 4B4DD36F
+P 1150 18000
+F 0 "U?" H 1150 17750 60 0000 C CNN
+F 1 "ARROW_N" H 1150 17650 60 0000 C CNN
+ 1 1150 18000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_WAVE U?
+U 1 1 4B4DD358
+P 11550 16500
+F 0 "U?" H 11550 16250 60 0000 C CNN
+F 1 "ARROW_E_WAVE" H 11550 16150 60 0000 C CNN
+ 1 11550 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_TAIL U?
+U 1 1 4B4DD349
+P 10250 16500
+F 0 "U?" H 10250 16250 60 0000 C CNN
+F 1 "ARROW_E_TAIL" H 10250 16150 60 0000 C CNN
+ 1 10250 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_LOOP U?
+U 1 1 4B4DD333
+P 8950 16500
+F 0 "U?" H 8950 16250 60 0000 C CNN
+F 1 "ARROW_E_LOOP" H 8950 16150 60 0000 C CNN
+ 1 8950 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_HOOK U?
+U 1 1 4B4DD328
+P 7650 16500
+F 0 "U?" H 7650 16250 60 0000 C CNN
+F 1 "ARROW_E_HOOK" H 7650 16150 60 0000 C CNN
+ 1 7650 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_DBL_E U?
+U 1 1 4B4DD30B
+P 6350 16500
+F 0 "U?" H 6350 16250 60 0000 C CNN
+F 1 "ARROW_DBL_E" H 6350 16150 60 0000 C CNN
+ 1 6350 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_BAR U?
+U 1 1 4B4DD2F9
+P 5050 16500
+F 0 "U?" H 5050 16250 60 0000 C CNN
+F 1 "ARROW_E_BAR" H 5050 16150 60 0000 C CNN
+ 1 5050 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_SLASH U?
+U 1 1 4B4DD2F1
+P 3750 16500
+F 0 "U?" H 3750 16250 60 0000 C CNN
+F 1 "ARROW_E_SLASH" H 3750 16150 60 0000 C CNN
+ 1 3750 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E_STROKE U?
+U 1 1 4B4DD2E9
+P 2450 16500
+F 0 "U?" H 2450 16250 60 0000 C CNN
+F 1 "ARROW_E_STROKE" H 2450 16150 60 0000 C CNN
+ 1 2450 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L ARROW_E U?
+U 1 1 4B4DD2C9
+P 1150 16500
+F 0 "U?" H 1150 16250 60 0000 C CNN
+F 1 "ARROW_E" H 1150 16150 60 0000 C CNN
+ 1 1150 16500
+ 1 0 0 -1
+$EndComp
+$Comp
+L PLUS U?
+U 1 1 4B4DD2B6
+P 1150 7500
+F 0 "U?" H 1150 7250 60 0000 C CNN
+F 1 "PLUS" H 1150 7150 60 0000 C CNN
+ 1 1150 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L MINUS U?
+U 1 1 4B4DD2B5
+P 2450 7500
+F 0 "U?" H 2450 7250 60 0000 C CNN
+F 1 "MINUS" H 2450 7150 60 0000 C CNN
+ 1 2450 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LESS U?
+U 1 1 4B4DD2B4
+P 1150 6000
+F 0 "U?" H 1150 5750 60 0000 C CNN
+F 1 "LESS" H 1150 5650 60 0000 C CNN
+ 1 1150 6000
+ 1 0 0 -1
+$EndComp
+$Comp
+L EQUAL U?
+U 1 1 4B4DD2B3
+P 16800 4500
+F 0 "U?" H 16800 4250 60 0000 C CNN
+F 1 "EQUAL" H 16800 4150 60 0000 C CNN
+ 1 16800 4500
+ 1 0 0 -1
+$EndComp
+$Comp
+L LOW_LINE U?
+U 1 1 4B4DD2B2
+P 20250 3000
+F 0 "U?" H 20250 2750 60 0000 C CNN
+F 1 "LOW_LINE" H 20250 2650 60 0000 C CNN
+ 1 20250 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L ASTERISK U?
+U 1 1 4B4DD2B1
+P 14650 3000
+F 0 "U?" H 14650 2750 60 0000 C CNN
+F 1 "ASTERISK" H 14650 2650 60 0000 C CNN
+ 1 14650 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PERCENT U?
+U 1 1 4B4DD2B0
+P 15650 3000
+F 0 "U?" H 15650 2750 60 0000 C CNN
+F 1 "PERCENT" H 15650 2650 60 0000 C CNN
+ 1 15650 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L MULTIPLY U?
+U 1 1 4B4DD2AF
+P 3750 7500
+F 0 "U?" H 3750 7250 60 0000 C CNN
+F 1 "MULTIPLY" H 3750 7150 60 0000 C CNN
+ 1 3750 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L DIVIDE U?
+U 1 1 4B4DD2AE
+P 5050 7500
+F 0 "U?" H 5050 7250 60 0000 C CNN
+F 1 "DIVIDE" H 5050 7150 60 0000 C CNN
+ 1 5050 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L CURRENCY U?
+U 1 1 4B4DD2AD
+P 7300 3000
+F 0 "U?" H 7300 2750 60 0000 C CNN
+F 1 "CURRENCY" H 7300 2650 60 0000 C CNN
+ 1 7300 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L DEGREE U?
+U 1 1 4B4DD2AC
+P 8250 3000
+F 0 "U?" H 8250 2750 60 0000 C CNN
+F 1 "DEGREE" H 8250 2650 60 0000 C CNN
+ 1 8250 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L PLUS_MINUS U?
+U 1 1 4B4DD2AB
+P 7700 7500
+F 0 "U?" H 7700 7250 60 0000 C CNN
+F 1 "PLUS_MINUS" H 7700 7150 60 0000 C CNN
+ 1 7700 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L NOT U?
+U 1 1 4B4DD2AA
+P 9000 7500
+F 0 "U?" H 9000 7250 60 0000 C CNN
+F 1 "NOT" H 9000 7150 60 0000 C CNN
+ 1 9000 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L COPYRIGHT U?
+U 1 1 4B4DD2A9
+P 17150 3000
+F 0 "U?" H 17150 2750 60 0000 C CNN
+F 1 "COPYRIGHT" H 17150 2650 60 0000 C CNN
+ 1 17150 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L REGISTERED U?
+U 1 1 4B4DD2A8
+P 18950 3000
+F 0 "U?" H 18950 2750 60 0000 C CNN
+F 1 "REGISTERED" H 18950 2650 60 0000 C CNN
+ 1 18950 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L BROKEN_BAR U?
+U 1 1 4B4DD2A7
+P 11500 3000
+F 0 "U?" H 11500 2750 60 0000 C CNN
+F 1 "BROKEN_BAR" H 11500 2650 60 0000 C CNN
+ 1 11500 3000
+ 1 0 0 -1
+$EndComp
+$Comp
+L HASH U?
+U 1 1 4B4DCF27
+P 1000 3000
+F 0 "U?" H 1000 2750 60 0000 C CNN
+F 1 "HASH" H 1000 2650 60 0000 C CNN
+ 1 1000 3000
+ 1 0 0 -1
+$EndComp
+$EndSCHEMATC
diff --git a/helpers/tools_to_build_newstroke-font/test.h b/helpers/tools_to_build_newstroke-font/test.h
new file mode 100644
index 0000000..b3e9df3
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/test.h
@@ -0,0 +1,7 @@
+/* Automatically converted font */
+ "MWRYSZR[QZRYR[ RRSQGRFSGRSRF", /* U+0 */
+ "MaRYSZR[QZRYR[ RRSQGRFSGRSRF R\\Y]Z\\[[Z\\Y\\[ R\\S[G\\F]G\\S\\F",
+ "MaRYSZR[QZRYR[ RRSQGRFSGRSRF RRYSZR[QZRYR[ RRSQGRFSGRSRF",
+ "CaRFR[ RHFH[\\[\\F R\\[^[^`",
+ "G]PFTFVGXIYMYTXXVZT[P[NZLXKTKMLINGPF RRATATF",
+
diff --git a/helpers/tools_to_build_newstroke-font/testlist.txt b/helpers/tools_to_build_newstroke-font/testlist.txt
new file mode 100644
index 0000000..f1ac854
--- /dev/null
+++ b/helpers/tools_to_build_newstroke-font/testlist.txt
@@ -0,0 +1,11 @@
++ EXCLAM
++w EXCLAM EXCLAM S=P
++( EXCLAM
++) EXCLAM
++( EXCLAM
++| EXCLAM
++) EXCLAM
++ SHA_CAP DESCENDER BOTTOM3=X
++ O_CAP DESCENDER ABOVE=X
+
+stats 0 \ No newline at end of file
diff --git a/include/HersheyCyrillic.h.unused b/include/HersheyCyrillic.h.unused
new file mode 100644
index 0000000..18b1700
--- /dev/null
+++ b/include/HersheyCyrillic.h.unused
@@ -0,0 +1,70 @@
+/* Hershey Cyrillic definition
+ * First shape has unicode value 0x410
+*/
+const static char* hershey_cyrillic[] =
+{
+ "H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
+ "G]LFL[ RMFM[ RIFYFYLXF RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
+ "G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
+ "I[NFN[ ROFO[ RKFZFZLYF RK[R[",
+ "F^NFNLMTLXKZJ[ RXFX[ RYFY[ RKF\\F RG[\\[ RG[Gb RH[Gb R[[\\b R\\[\\b",
+ "G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
+ "CbRFR[ RSFS[ ROFVF RGGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\\G]F^F_G_H^I]H^G RNPLQKSJXIZH[ RNPMQLSKXJZI[G[FZEX RWPYQZS[X\\Z][ RWPXQYSZX[Z\\[^[_Z`X RO[V[",
+ "H\\LIKFKLLINGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
+ "F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RXHLY RH[O[ RU[\\[",
+ "F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RXHLY RH[O[ RU[\\[ RN@N?M?M@NBPCTCVBW@",
+ "F^KFK[ RLFL[ RHFOF RLPSPUOVMWIXGYFZF[G[HZIYHZG RSPUQVSWXXZY[ RSPTQUSVXWZX[Z[[Z\\X RH[O[",
+ "E^MFMLLTKXJZI[H[GZGYHXIYHZ RXFX[ RYFY[ RJF\\F RU[\\[",
+ "F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
+ "F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
+ "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
+ "F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\F RH[O[ RU[\\[",
+ "G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
+ "G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[",
+ "I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
+ "H]KFRV RLFSV RZFSVQYPZN[M[LZLYMXNYMZ RIFOF RVF\\F",
+ "F_RFR[ RSFS[ ROFVF RPILJJLIOIRJULWPXUXYW[U\\R\\O[LYJUIPI RPIMJKLJOJRKUMWPX RUXXWZU[R[OZLXJUI RO[V[",
+ "H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
+ "F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RH[\\[ R[[\\b R\\[\\b",
+ "F]KFKQLSOTRTUSWQ RLFLQMSOT RWFW[ RXFX[ RHFOF RTF[F RT[[[",
+ "BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[",
+ "BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ R`[ab Ra[ab",
+ "F`PFP[ RQFQ[ RIFHLHFTF RQPXP[Q\\R]T]W\\Y[ZX[M[ RXPZQ[R\\T\\W[YZZX[", /* Ъ */
+ "CaHFH[ RIFI[ REFLF RIPPPSQTRUTUWTYSZP[E[ RPPRQSRTTTWSYRZP[ R[F[[ R\\F\\[ RXF_F RX[_[", /* Ы */
+ "H]MFM[ RNFN[ RJFQF RNPUPXQYRZTZWYYXZU[J[ RUPWQXRYTYWXYWZU[", /* Ь */
+ "H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP", /* Э */
+ "CbHFH[ RIFI[ REFLF RE[L[ RVFSGQIPKOOORPVQXSZV[X[[Z]X^V_R_O^K]I[GXFVF RVFTGRIQKPOPRQVRXTZV[ RX[ZZ\\X]V^R^O]K\\IZGXF RIPOP", /* Ю */
+ "G]WFW[ RXFX[ R[FOFLGKHJJJLKNLOOPWP ROFMGLHKJKLLNMOOP RRPPQORLYKZJZIY RPQOSMZL[J[IYIX RT[[[", /* Я */
+ "I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[", /* letter */
+ "H\\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS RXFWHUIQJNLLN RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
+ "H\\MMM[ RNMN[ RJMUMXNYPYQXSUT RUMWNXPXQWSUT RNTUTXUYWYXXZU[J[ RUTWUXWXXWZU[",
+ "HZMMM[ RNMN[ RJMXMXRWM RJ[Q[",
+ "F]NMNQMWLZK[ RWMW[ RXMX[ RKM[M RI[H`H[[[[`Z[",
+ "H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[",
+ "E`RMR[ RSMS[ ROMVM RJNIOHNIMJMKNMRNSPTUTWSXRZN[M\\M]N\\O[N RPTNUMVKZJ[ RPTNVLZK[I[HZGX RUTWUXVZZ[[ RUTWVYZZ[\\[]Z^X RO[V[",
+ "I[MOLMLQMONNPMTMWNXPXQWSTT RTMVNWPWQVSTT RQTTTWUXWXXWZT[P[MZLXLWMVNWMX RTTVUWWWXVZT[",
+ "G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ",
+ "G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ ROGOFNFNGOIQJSJUIVG",
+ "H\\MMM[ RNMN[ RJMQM RNTPTSSTRVNWMXMYNXOWN RPTSUTVVZW[ RPTRUSVUZV[X[YZZX RJ[Q[",
+ "G]NMNQMWLZK[J[IZJYKZ RWMW[ RXMX[ RKM[M RT[[[",
+ "G^LML[ RLMR[ RMMRY RXMR[ RXMX[ RYMY[ RIMMM RXM\\M RI[O[ RU[\\[",
+ "G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RMTWT RI[P[ RT[[[",
+ "H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
+ "G]LML[ RMMM[ RWMW[ RXMX[ RIM[M RI[P[ RT[[[",
+ "G\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb",
+ "H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[",
+ "I\\RMR[ RSMS[ RMMLRLMYMYRXM RO[V[",
+ "I[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM",
+ "H]RFRb RSFSb ROFSF RRPQNPMNMLNKQKWLZN[P[QZRX RNMMNLQLWMZN[ RWMXNYQYWXZW[ RSPTNUMWMYNZQZWYZW[U[TZSX RObVb",
+ "H\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[",
+ "G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[[[[`Z[",
+ "G]LMLTMVPWRWUVWT RMMMTNVPW RWMW[ RXMX[ RIMPM RTM[M RT[[[",
+ "CbHMH[ RIMI[ RRMR[ RSMS[ R\\M\\[ R]M][ REMLM ROMVM RYM`M RE[`[",
+ "CbHMH[ RIMI[ RRMR[ RSMS[ R\\M\\[ R]M][ REMLM ROMVM RYM`M RE[`[``_[",
+ "H]QMQ[ RRMR[ RLMKRKMUM RRTVTYUZWZXYZV[N[ RVTXUYWYXXZV[", /* ÑŠ */
+ "E_JMJ[ RKMK[ RGMNM RKTOTRUSWSXRZO[G[ ROTQURWRXQZO[ RYMY[ RZMZ[ RVM]M RV[][", /* Ñ‹ */
+ "J[OMO[ RPMP[ RLMSM RPTTTWUXWXXWZT[L[ RTTVUWWWXVZT[", /* ь */
+ "H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP", /* Ñ */
+ "DaIMI[ RJMJ[ RFMMM RF[M[ RVMSNQPPSPUQXSZV[X[[Z]X^U^S]P[NXMVM RVMTNRPQSQURXTZV[ RX[ZZ\\X]U]S\\PZNXM RJTPT", /* ÑŽ */
+ "G\\VMV[ RWMW[ RZMOMLNKPKQLSOTVT ROMMNLPLQMSOT RTTQUPVNZM[ RTTRUQVOZN[L[KZJX RS[Z[" /* Ñ */
+};
diff --git a/include/base_struct.h b/include/base_struct.h
new file mode 100644
index 0000000..e6238f3
--- /dev/null
+++ b/include/base_struct.h
@@ -0,0 +1,567 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2008-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file base_struct.h
+ * @brief Basic classes for most KiCad items.
+ */
+
+#ifndef BASE_STRUCT_H_
+#define BASE_STRUCT_H_
+
+#include <core/typeinfo.h>
+
+#include <colors.h>
+#include <bitmaps.h>
+#include <richio.h>
+#include <view/view_item.h>
+#include <class_eda_rect.h>
+
+#if defined(DEBUG)
+#include <iostream> // needed for Show()
+extern std::ostream& operator <<( std::ostream& out, const wxSize& size );
+
+extern std::ostream& operator <<( std::ostream& out, const wxPoint& pt );
+#endif
+
+
+/// Flag to enable find and replace tracing using the WXTRACE environment variable.
+extern const wxString traceFindReplace;
+
+
+/**
+ * Enum FILL_T
+ * is the set of fill types used in plotting or drawing enclosed areas.
+ */
+enum FILL_T {
+ NO_FILL, // Poly, Square, Circle, Arc = option No Fill
+ FILLED_SHAPE, /* Poly, Square, Circle, Arc = option Fill
+ * with current color ("Solid shape") */
+ FILLED_WITH_BG_BODYCOLOR /* Poly, Square, Circle, Arc = option Fill
+ * with background body color, translucent
+ * (texts inside this shape can be seen)
+ * not filled in B&W mode when plotting or
+ * printing */
+};
+
+
+enum SEARCH_RESULT {
+ SEARCH_QUIT,
+ SEARCH_CONTINUE
+};
+
+
+class wxFindReplaceData;
+class EDA_ITEM;
+class EDA_DRAW_FRAME;
+class EDA_RECT;
+class DHEAD;
+class MSG_PANEL_ITEM;
+
+
+/**
+ * Class INSPECTOR
+ * is an abstract class that is used to inspect and possibly collect the
+ * (search) results of Iterating over a list or tree of KICAD_T objects.
+ * Extend from this class and implement the Inspect function and provide for
+ * a way for the extension to collect the results of the search/scan data and
+ * provide them to the caller.
+ */
+class INSPECTOR
+{
+public:
+ virtual ~INSPECTOR()
+ {
+ }
+
+
+ /**
+ * Function Inspect
+ * is the examining function within the INSPECTOR which is passed to the
+ * EDA_ITEM::Iterate() function. It is used primarily for searching, but
+ * not limited to that. It can also collect or modify the scanned objects.
+ *
+ * @param aItem An EDA_ITEM to examine.
+ * @param aTestData is arbitrary data needed by the inspector to determine
+ * if the EDA_ITEM under test meets its match criteria.
+ * @return A #SEARCH_RESULT type #SEARCH_QUIT if the iterator function is to
+ * stop the scan, else #SEARCH_CONTINUE;
+ */
+ virtual SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData ) = 0;
+};
+
+
+// These define are used for the .m_Flags and .m_UndoRedoStatus member of the
+// class EDA_ITEM
+#define IS_CHANGED (1 << 0) ///< Item was edited, and modified
+#define IS_LINKED (1 << 1) ///< Used in calculation to mark linked items (temporary use)
+#define IN_EDIT (1 << 2) ///< Item currently edited
+#define IS_MOVED (1 << 3) ///< Item being moved
+#define IS_NEW (1 << 4) ///< New item, just created
+#define IS_RESIZED (1 << 5) ///< Item being resized
+#define IS_DRAGGED (1 << 6) ///< Item being dragged
+#define IS_DELETED (1 << 7)
+#define IS_WIRE_IMAGE (1 << 8) ///< Item to be drawn as wireframe while editing
+#define STARTPOINT (1 << 9)
+#define ENDPOINT (1 << 10)
+#define SELECTED (1 << 11)
+#define SELECTEDNODE (1 << 12) ///< flag indicating that the structure has already selected
+#define STRUCT_DELETED (1 << 13) ///< flag indication structures to be erased
+#define CANDIDATE (1 << 14) ///< flag indicating that the structure is connected
+#define SKIP_STRUCT (1 << 15) ///< flag indicating that the structure should be ignored
+#define DO_NOT_DRAW (1 << 16) ///< Used to disable draw function
+#define IS_CANCELLED (1 << 17) ///< flag set when edit dialogs are canceled when editing a
+ ///< new object
+#define TRACK_LOCKED (1 << 18) ///< Pcbnew: track locked: protected from global deletion
+#define TRACK_AR (1 << 19) ///< Pcbnew: autorouted track
+#define FLAG1 (1 << 20) ///< Pcbnew: flag used in local computations
+#define FLAG0 (1 << 21) ///< Pcbnew: flag used in local computations
+#define BEGIN_ONPAD (1 << 22) ///< Pcbnew: flag set for track segment starting on a pad
+#define END_ONPAD (1 << 23) ///< Pcbnew: flag set for track segment ending on a pad
+#define BUSY (1 << 24) ///< Pcbnew: flag indicating that the structure has
+ ///< already been edited, in some functions
+#define HIGHLIGHTED (1 << 25) ///< item is drawn in normal colors, when the rest is darkened
+#define BRIGHTENED (1 << 26) ///< item is drawn with a bright contour
+
+#define DP_COUPLED (1 << 27) ///< item is coupled with another item making a differential pair
+ ///< (applies to segments only)
+
+#define EDA_ITEM_ALL_FLAGS -1
+
+typedef unsigned STATUS_FLAGS;
+
+/**
+ * Class EDA_ITEM
+ * is a base class for most all the KiCad significant classes, used in
+ * schematics and boards.
+ */
+class EDA_ITEM : public KIGFX::VIEW_ITEM
+{
+private:
+
+ /**
+ * Run time identification, _keep private_ so it can never be changed after
+ * a constructor sets it. See comment near SetType() regarding virtual
+ * functions.
+ */
+ KICAD_T m_StructType;
+ STATUS_FLAGS m_Status;
+
+protected:
+ EDA_ITEM* Pnext; ///< next in linked list
+ EDA_ITEM* Pback; ///< previous in linked list
+ DHEAD* m_List; ///< which DLIST I am on.
+
+ EDA_ITEM* m_Parent; ///< Linked list: Link (parent struct)
+ time_t m_TimeStamp; ///< Time stamp used for logical links
+
+ /// Set to true to override the visibility setting of the item.
+ bool m_forceVisible;
+
+ /// Flag bits for editing and other uses.
+ STATUS_FLAGS m_Flags;
+
+ // Link to an copy of the item use to save the item's state for undo/redo feature.
+ EDA_ITEM* m_Image;
+
+private:
+
+ void initVars();
+
+protected:
+
+ EDA_ITEM( EDA_ITEM* parent, KICAD_T idType );
+ EDA_ITEM( KICAD_T idType );
+ EDA_ITEM( const EDA_ITEM& base );
+
+public:
+
+ virtual ~EDA_ITEM() { };
+
+ /**
+ * Function Type()
+ *
+ * returns the type of object. This attribute should never be changed
+ * after a constructor sets it, so there is no public "setter" method.
+ * @return KICAD_T - the type of object.
+ */
+ inline KICAD_T Type() const
+ {
+ return m_StructType;
+ }
+
+ void SetTimeStamp( time_t aNewTimeStamp ) { m_TimeStamp = aNewTimeStamp; }
+ time_t GetTimeStamp() const { return m_TimeStamp; }
+
+ EDA_ITEM* Next() const { return Pnext; }
+ EDA_ITEM* Back() const { return Pback; }
+ EDA_ITEM* GetParent() const { return m_Parent; }
+ DHEAD* GetList() const { return m_List; }
+
+ void SetNext( EDA_ITEM* aNext ) { Pnext = aNext; }
+ void SetBack( EDA_ITEM* aBack ) { Pback = aBack; }
+ void SetParent( EDA_ITEM* aParent ) { m_Parent = aParent; }
+ void SetList( DHEAD* aList ) { m_List = aList; }
+
+ inline bool IsNew() const { return m_Flags & IS_NEW; }
+ inline bool IsModified() const { return m_Flags & IS_CHANGED; }
+ inline bool IsMoving() const { return m_Flags & IS_MOVED; }
+ inline bool IsDragging() const { return m_Flags & IS_DRAGGED; }
+ inline bool IsWireImage() const { return m_Flags & IS_WIRE_IMAGE; }
+ inline bool IsSelected() const { return m_Flags & SELECTED; }
+ inline bool IsResized() const { return m_Flags & IS_RESIZED; }
+ inline bool IsHighlighted() const { return m_Flags & HIGHLIGHTED; }
+ inline bool IsBrightened() const { return m_Flags & BRIGHTENED; }
+
+ inline void SetWireImage() { SetFlags( IS_WIRE_IMAGE ); }
+ inline void SetSelected() { SetFlags( SELECTED ); ViewUpdate( COLOR ); }
+ inline void SetHighlighted() { SetFlags( HIGHLIGHTED ); ViewUpdate( COLOR ); }
+ inline void SetBrightened() { SetFlags( BRIGHTENED ); }
+
+ inline void ClearSelected() { ClearFlags( SELECTED ); ViewUpdate( COLOR ); }
+ inline void ClearHighlighted() { ClearFlags( HIGHLIGHTED ); ViewUpdate( COLOR ); }
+ inline void ClearBrightened() { ClearFlags( BRIGHTENED ); }
+
+ void SetModified();
+
+ int GetState( int type ) const
+ {
+ return m_Status & type;
+ }
+
+ void SetState( int type, int state )
+ {
+ if( state )
+ m_Status |= type; // state = ON or OFF
+ else
+ m_Status &= ~type;
+ }
+
+ STATUS_FLAGS GetStatus() const { return m_Status; }
+ void SetStatus( STATUS_FLAGS aStatus ) { m_Status = aStatus; }
+
+ void SetFlags( STATUS_FLAGS aMask ) { m_Flags |= aMask; }
+ void ClearFlags( STATUS_FLAGS aMask = EDA_ITEM_ALL_FLAGS ) { m_Flags &= ~aMask; }
+ STATUS_FLAGS GetFlags() const { return m_Flags; }
+
+ void SetImage( EDA_ITEM* aItem ) { m_Image = aItem; }
+
+ /**
+ * Function SetForceVisible
+ * is used to set and cleag force visible flag used to force the item to be drawn
+ * even if it's draw attribute is set to not visible.
+ *
+ * @param aEnable True forces the item to be drawn. False uses the item's visibility
+ * setting to determine if the item is to be drawn.
+ */
+ void SetForceVisible( bool aEnable ) { m_forceVisible = aEnable; }
+
+ /**
+ * Function GetMsgPanelInfo
+ * populates \a aList of #MSG_PANEL_ITEM objects with it's internal state for display
+ * purposes.
+ *
+ * @note This method replaces DisplayInfo() so that KiCad objects no longer have any
+ * knowledge of wxWidgets UI objects.
+ *
+ * @param aList is the list to populate.
+ */
+ virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
+ {
+ }
+
+ /**
+ * Function HitTest
+ * tests if \a aPosition is contained within or on the bounding area of an item.
+ *
+ * @param aPosition A reference to a wxPoint object containing the coordinates to test.
+ * @return True if \a aPosition is within or on the item bounding area.
+ */
+ virtual bool HitTest( const wxPoint& aPosition ) const
+ {
+ return false; // derived classes should override this function
+ }
+
+
+ /**
+ * Function GetBoundingBox
+ * returns the orthogonal, bounding box of this object for display
+ * purposes.
+ * This box should be an enclosing perimeter for visible components of this
+ * object, and the units should be in the pcb or schematic coordinate
+ * system.
+ * It is OK to overestimate the size by a few counts.
+ */
+ virtual const EDA_RECT GetBoundingBox() const
+ {
+#if defined(DEBUG)
+ printf( "Missing GetBoundingBox()\n" );
+ Show( 0, std::cout ); // tell me which classes still need GetBoundingBox support
+#endif
+
+ // return a zero-sized box per default. derived classes should override
+ // this
+ return EDA_RECT( wxPoint( 0, 0 ), wxSize( 0, 0 ) );
+ }
+
+ /**
+ * Function Clone
+ * creates a duplicate of this item with linked list members set to NULL.
+ *
+ * The default version will return NULL in release builds and likely crash the
+ * program. In debug builds, a warning message indicating the derived class
+ * has not implemented cloning. This really should be a pure virtual function.
+ * Due to the fact that there are so many objects derived from EDA_ITEM, the
+ * decision was made to return NULL until all the objects derived from EDA_ITEM
+ * implement cloning. Once that happens, this function should be made pure.
+ *
+ * @return A clone of the item.
+ */
+ virtual EDA_ITEM* Clone() const; // should not be inline, to save the ~ 6 bytes per call site.
+
+ /**
+ * Function IterateForward
+ * walks through the object tree calling the inspector() on each object
+ * type requested in scanTypes.
+ *
+ * @param listStart The first in a list of EDA_ITEMs to iterate over.
+ * @param inspector Is an INSPECTOR to call on each object that is one of
+ * the requested scanTypes.
+ * @param testData Is an aid to testFunc, and should be sufficient to allow
+ * it to fully determine if an item meets the match criteria,
+ * but it may also be used to collect output.
+ * @param scanTypes A KICAD_T array that is EOT terminated, and provides both
+ * the order and interest level of of the types of objects to
+ * be iterated over.
+ * @return SEARCH_RESULT SEARCH_QUIT if the called INSPECTOR returned
+ * SEARCH_QUIT, else SCAN_CONTINUE;
+ */
+ static SEARCH_RESULT IterateForward( EDA_ITEM* listStart,
+ INSPECTOR* inspector,
+ const void* testData,
+ const KICAD_T scanTypes[] );
+
+ /**
+ * Function Visit
+ * may be re-implemented for each derived class in order to handle
+ * all the types given by its member data. Implementations should call
+ * inspector->Inspect() on types in scanTypes[], and may use
+ * IterateForward()
+ * to do so on lists of such data.
+ * @param inspector An INSPECTOR instance to use in the inspection.
+ * @param testData Arbitrary data used by the inspector.
+ * @param scanTypes Which KICAD_T types are of interest and the order
+ * is significant too, terminated by EOT.
+ * @return SEARCH_RESULT SEARCH_QUIT if the Iterator is to stop the scan,
+ * else SCAN_CONTINUE, and determined by the inspector.
+ */
+ virtual SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
+ const KICAD_T scanTypes[] );
+
+ /**
+ * Function GetClass
+ * returns the class name.
+ * @return wxString
+ */
+ virtual wxString GetClass() const = 0;
+
+ /**
+ * Function GetSelectMenuText
+ * returns the text to display to be used in the selection clarification context menu
+ * when multiple items are found at the current cursor position. The default version
+ * of this function raises an assertion in the debug mode and returns a string to
+ * indicate that it was not overridden to provide the object specific text.
+ *
+ * @return The menu text string.
+ */
+ virtual wxString GetSelectMenuText() const;
+
+ /**
+ * Function GetMenuImage
+ * returns a pointer to an image to be used in menus. The default version returns
+ * the right arrow image. Override this function to provide object specific menu
+ * images.
+ * @return The menu image associated with the item.
+ */
+ virtual BITMAP_DEF GetMenuImage() const { return right_xpm; }
+
+ /**
+ * Function Matches
+ * compares the item against the search criteria in \a aSearchData.
+ *
+ * The base class returns false since many of the objects derived from EDA_ITEM
+ * do not have any text to search.
+ *
+ * @param aSearchData A reference to a wxFindReplaceData object containing the
+ * search criteria.
+ * @param aAuxData A pointer to optional data required for the search or NULL
+ * if not used.
+ * @param aFindLocation A pointer to a wxPoint object to store the location of
+ * matched item. The pointer can be NULL if it is not used.
+ * @return True if the item's text matches the search criteria in \a aSearchData.
+ */
+ virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation )
+ {
+ return false;
+ }
+
+ /**
+ * Helper function used in search and replace dialog
+ * Function Replace
+ * performs a text replace on \a aText using the find and replace criteria in
+ * \a aSearchData on items that support text find and replace.
+ *
+ * @param aSearchData A reference to a wxFindReplaceData object containing the
+ * search and replace criteria.
+ * @param aText A reference to a wxString object containing the text to be
+ * replaced.
+ * @return True if \a aText was modified, otherwise false.
+ */
+ bool Replace( wxFindReplaceData& aSearchData, wxString& aText );
+
+ /**
+ * Function Replace
+ * performs a text replace using the find and replace criteria in \a aSearchData
+ * on items that support text find and replace.
+ *
+ * This function must be overridden for items that support text replace.
+ *
+ * @param aSearchData A reference to a wxFindReplaceData object containing the
+ * search and replace criteria.
+ * @param aAuxData A pointer to optional data required for the search or NULL
+ * if not used.
+ * @return True if the item text was modified, otherwise false.
+ */
+ virtual bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL ) { return false; }
+
+ /**
+ * Function IsReplaceable
+ * <p>
+ * Override this method in any derived object that supports test find and
+ * replace.
+ * </p>
+ *
+ * @return True if the item has replaceable text that can be modified using
+ * the find and replace dialog.
+ */
+ virtual bool IsReplaceable() const { return false; }
+
+ /**
+ * Test if another item is less than this object.
+ *
+ * @param aItem - Item to compare against.
+ * @return - True if \a aItem is less than the item.
+ */
+ bool operator<( const EDA_ITEM& aItem ) const;
+
+ /**
+ * Function Sort
+ * is a helper function to be used by the C++ STL sort algorithm for sorting a STL
+ * container of EDA_ITEM pointers.
+ *
+ * @param aLeft The left hand item to compare.
+ * @param aRight The right hand item to compare.
+ * @return True if \a aLeft is less than \a aRight.
+ */
+ static bool Sort( const EDA_ITEM* aLeft, const EDA_ITEM* aRight ) { return *aLeft < *aRight; }
+
+#if 0
+ /**
+ * Operator assignment
+ * is used to assign the members of \a aItem to another object.
+ *
+ * @warning This is still a work in progress and not ready for prime time. Do not use
+ * as there is a known issue with wxString buffers.
+ */
+ virtual EDA_ITEM& operator=( const EDA_ITEM& aItem );
+ #define USE_EDA_ITEM_OP_EQ
+#endif
+
+ /// @copydoc VIEW_ITEM::ViewBBox()
+ virtual const BOX2I ViewBBox() const;
+
+ /// @copydoc VIEW_ITEM::ViewGetLayers()
+ virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
+
+#if defined(DEBUG)
+
+ /**
+ * Function Show
+ * is used to output the object tree, currently for debugging only.
+ * @param nestLevel An aid to prettier tree indenting, and is the level
+ * of nesting of this object within the overall tree.
+ * @param os The ostream& to output to.
+ */
+ virtual void Show( int nestLevel, std::ostream& os ) const = 0;
+ // pure virtual so compiler warns if somebody mucks up a derived declaration
+
+ void ShowDummy( std::ostream& os ) const; ///< call this if you are a lazy developer
+
+ /**
+ * Function NestedSpace
+ * outputs nested space for pretty indenting.
+ * @param nestLevel The nest count
+ * @param os The ostream&, where to output
+ * @return std::ostream& - for continuation.
+ **/
+ static std::ostream& NestedSpace( int nestLevel, std::ostream& os );
+
+#endif
+
+protected:
+ /**
+ * Function Matches
+ * compares \a aText against search criteria in \a aSearchData.
+ * This is a helper function for simplify derived class logic.
+ *
+ * @param aText A reference to a wxString object containing the string to test.
+ * @param aSearchData The criteria to search against.
+ * @return True if \a aText matches the search criteria in \a aSearchData.
+ */
+ bool Matches( const wxString& aText, wxFindReplaceData& aSearchData );
+};
+
+
+/**
+ * Function new_clone
+ * provides cloning capabilities for all Boost pointer containers of EDA_ITEM pointers.
+ *
+ * @param aItem EDA_ITEM to clone.
+ * @return Clone of \a aItem.
+ */
+inline EDA_ITEM* new_clone( const EDA_ITEM& aItem ) { return aItem.Clone(); }
+
+
+/**
+ * Define list of drawing items for screens.
+ *
+ * The standard C++ container was chosen so the pointer can be removed from a list without
+ * it being destroyed.
+ */
+typedef std::vector< EDA_ITEM* > EDA_ITEMS;
+
+
+#endif // BASE_STRUCT_H_
diff --git a/include/base_units.h b/include/base_units.h
new file mode 100644
index 0000000..c4092b1
--- /dev/null
+++ b/include/base_units.h
@@ -0,0 +1,194 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 CERN
+ * Copyright (C) 1992-2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @author Wayne Stambaugh <stambaughw@verizon.net>
+ * @file base_units.h
+ * @brief Implementation of conversion functions that require both schematic and board
+ * internal units.
+ */
+
+#ifndef _BASE_UNITS_H_
+#define _BASE_UNITS_H_
+
+
+#include <common.h>
+#include <convert_to_biu.h>
+
+/** Helper function Double2Str to print a float number without
+ * using scientific notation and no trailing 0
+ * We want to avoid scientific notation in S-expr files (not easy to read)
+ * for floating numbers.
+ * So we cannot always just use the %g or the %f format to print a fp number
+ * this helper function uses the %f format when needed, or %g when %f is
+ * not well working and then removes trailing 0
+ */
+std::string Double2Str( double aValue );
+
+/**
+ * Function StripTrailingZeros
+ * Remove trailing 0 from a string containing a converted float number.
+ * The trailing 0 are removed if the mantissa has more
+ * than aTrailingZeroAllowed digits and some trailing 0
+ */
+void StripTrailingZeros( wxString& aStringValue, unsigned aTrailingZeroAllowed = 1 );
+
+
+/**
+ * Function To_User_Unit
+ * convert \a aValue in internal units to the appropriate user units defined by \a aUnit.
+ *
+ * @return The converted value, in double
+ * @param aUnit The units to convert \a aValue to.
+ * @param aValue The value in internal units to convert.
+ */
+double To_User_Unit( EDA_UNITS_T aUnit, double aValue );
+
+/**
+ * Function CoordinateToString
+ * is a helper to convert the \a integer coordinate \a aValue to a string in inches,
+ * millimeters, or unscaled units according to the current user units setting.
+ *
+ * Should be used only to display a coordinate in status, but not in dialogs,
+ * because the mantissa of the number displayed has 4 digits max for readability.
+ * (i.e. the value shows the decimils or the microns )
+ * However the actual internal value could need up to 8 digits to be printed
+ *
+ * @param aValue The integer coordinate to convert.
+ * @param aConvertToMils Convert inch values to mils if true. This setting has no effect if
+ * the current user unit is millimeters.
+ * @return The converted string for display in user interface elements.
+ */
+wxString CoordinateToString( int aValue, bool aConvertToMils = false );
+
+/**
+ * Function AngleToStringDegrees
+ * is a helper to convert the \a double \a aAngle (in internal unit)
+ * to a string in degrees
+ */
+wxString AngleToStringDegrees( double aAngle );
+
+/**
+ * Function LenghtDoubleToString
+ * is a helper to convert the \a double length \a aValue to a string in inches,
+ * millimeters, or unscaled units according to the current user units setting.
+ *
+ * Should be used only to display a coordinate in status, but not in dialogs,
+ * because the mantissa of the number displayed has 4 digits max for readability.
+ * (i.e. the value shows the decimils or the microns )
+ * However the actual internal value could need up to 8 digits to be printed
+ *
+ * @param aValue The double value to convert.
+ * @param aConvertToMils Convert inch values to mils if true. This setting has no effect if
+ * the current user unit is millimeters.
+ * @return The converted string for display in user interface elements.
+ */
+wxString LengthDoubleToString( double aValue, bool aConvertToMils = false );
+
+/**
+ * Function StringFromValue
+ * returns the string from \a aValue according to units (inch, mm ...) for display,
+ * and the initial unit for value.
+ *
+ * For readability, the mantissa has 3 or more digits (max 8 digits),
+ * the trailing 0 are removed if the mantissa has more than 3 digits
+ * and some trailing 0
+ * This function should be used to display values in dialogs because a value
+ * entered in mm (for instance 2.0 mm) could need up to 8 digits mantissa
+ * if displayed in inch to avoid truncation or rounding made just by the printf function.
+ * otherwise the actual value is rounded when read from dialog and converted
+ * in internal units, and therefore modified.
+ *
+ * @param aUnit = display units (INCHES, MILLIMETRE ..)
+ * @param aValue = value in Internal_Unit
+ * @param aAddUnitSymbol = true to add symbol unit to the string value
+ * @return A wxString object containing value and optionally the symbol unit (like 2.000 mm)
+ */
+wxString StringFromValue( EDA_UNITS_T aUnit, int aValue, bool aAddUnitSymbol = false );
+
+/**
+ * Operator << overload
+ * outputs a point to the argument string in a format resembling
+ * "@ (x,y)
+ * @param aString Where to put the text describing the point value
+ * @param aPoint The point to output.
+ * @return wxString& - the input string
+ */
+wxString& operator <<( wxString& aString, const wxPoint& aPoint );
+
+/**
+ * Function PutValueInLocalUnits
+ * converts \a aValue from internal units to user units and append the units notation
+ * (mm or ")then inserts the string an \a aTextCtrl.
+ *
+ * This function is used in dialog boxes for entering values depending on selected units.
+ */
+void PutValueInLocalUnits( wxTextCtrl& aTextCtr, int aValue );
+
+/**
+ * Return in internal units the value "val" given in a real unit
+ * such as "in", "mm" or "deg"
+ */
+double From_User_Unit( EDA_UNITS_T aUnit, double aValue );
+
+
+/**
+ * Function DoubleValueFromString
+ * converts \a aTextValue to a double
+ * @param aUnits The units of \a aTextValue.
+ * @param aTextValue A reference to a wxString object containing the string to convert.
+ * @return A double representing that value in internal units
+ */
+double DoubleValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue );
+
+/**
+ * Function ValueFromString
+ * converts \a aTextValue in \a aUnits to internal units used by the application.
+ *
+ * @param aUnits The units of \a aTextValue.
+ * @param aTextValue A reference to a wxString object containing the string to convert.
+ * @return The string from Value, according to units (inch, mm ...) for display,
+ */
+int ValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue );
+
+/**
+ * Function ValueFromString
+
+ * converts \a aTextValue in \a aUnits to internal units used by the application,
+ * unit type will be obtained from g_UserUnit.
+ *
+ * @param aTextValue A reference to a wxString object containing the string to convert.
+ * @return The string from Value, according to units (inch, mm ...) for display,
+ */
+
+int ValueFromString( const wxString& aTextValue );
+
+/**
+ * Convert the number Value in a string according to the internal units
+ * and the selected unit (g_UserUnit) and put it in the wxTextCtrl TextCtrl
+ */
+int ValueFromTextCtrl( const wxTextCtrl& aTextCtr );
+
+#endif // _BASE_UNITS_H_
diff --git a/include/bezier_curves.h b/include/bezier_curves.h
new file mode 100644
index 0000000..1e5c8a7
--- /dev/null
+++ b/include/bezier_curves.h
@@ -0,0 +1,60 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef BEZIER_CURVES_H
+#define BEZIER_CURVES_H
+
+#include <vector>
+
+#include <wx/gdicmn.h>
+
+
+/**
+ * Function Bezier2Poly
+ * convert a Bezier curve to a polyline
+ * @param c1 - First point to convert.
+ * @param c2 - Second point to convert.
+ * @param c3 - Third point to convert.
+ * @return a std::vector<wxPoint> containing the points of the polyline
+ */
+std::vector<wxPoint> Bezier2Poly(wxPoint c1, wxPoint c2, wxPoint c3);
+
+std::vector<wxPoint> Bezier2Poly(int x1, int y1, int x2, int y2, int x3, int y3);
+
+/**
+ * Function Bezier2Poly
+ * convert a Bezier curve to a polyline
+ * @return a std::vector<wxPoint> containing the points of the polyline
+ * @param c1 - First point to convert.
+ * @param c2 - Second point to convert.
+ * @param c3 - Third point to convert.
+ * @param c4 - Fourth point to convert.
+ * @return a std::vector<wxPoint> containing the points of the polyline
+ */
+std::vector<wxPoint> Bezier2Poly( wxPoint c1, wxPoint c2, wxPoint c3,wxPoint c4 );
+
+std::vector<wxPoint> Bezier2Poly(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
+
+
+#endif // BEZIER_CURVES_H
diff --git a/include/bin_mod.h b/include/bin_mod.h
new file mode 100644
index 0000000..1f687ad
--- /dev/null
+++ b/include/bin_mod.h
@@ -0,0 +1,66 @@
+#ifndef BIN_MOD_H_
+#define BIN_MOD_H_
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#if 0
+ #include <wx/filehistory.h> // wx 3.0:
+#else
+ #include <wx/docview.h>
+#endif
+
+#include <wx/string.h>
+
+#include <search_stack.h>
+
+class wxConfigBase;
+
+/**
+ * Struct BIN_MOD
+ * pertains to a single program module, either an EXE or a DSO/DLL ("bin_mod").
+ * It manages miscellaneous configuration file information pertinent to one bin_mod.
+ * Because it serves in both DSO/DLLs and in EXEs, its name is neutral.
+ * <p>
+ * Accessors are in containing (wrapper) classes.
+ */
+struct BIN_MOD
+{
+ BIN_MOD( const char* aName );
+ ~BIN_MOD();
+
+ void Init();
+ void End();
+
+ const char* m_name; ///< name of this binary module, static C string.
+
+ wxConfigBase* m_config; ///< maybe from $HOME/.${m_name}
+ wxFileHistory m_history;
+ wxString m_help_file;
+
+ SEARCH_STACK m_search;
+
+
+};
+
+#endif // BIN_MOD_H_
diff --git a/include/bitmaps.h b/include/bitmaps.h
new file mode 100644
index 0000000..c0711c8
--- /dev/null
+++ b/include/bitmaps.h
@@ -0,0 +1,570 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef BITMAPS_H_
+#define BITMAPS_H_
+
+//FIXME: cannot include only this file in wxWidgets 2.9.3
+// test if it works under stable release
+// #include <wx/bitmap.h> // only to define wxBitmap
+class wxBitmap; // only to define wxBitmap
+
+#include <config.h>
+
+
+/// PNG memory record (file in memory).
+struct BITMAP_OPAQUE
+{
+ const unsigned char* png;
+ int byteCount;
+ const char* name; // for debug, or future lazy dynamic linking
+};
+
+// declared as single element _array_, so its name assigns to pointer
+#define EXTERN_BITMAP(x) extern const BITMAP_OPAQUE x[1];
+
+
+/// a BITMAP_DEF is really a const pointer to an opaque
+/// structure. So you should never need to use 'const' with it.
+typedef const BITMAP_OPAQUE *BITMAP_DEF;
+
+
+/**
+ * Function KiBitmap
+ * constructs a wxBitmap from a memory record, held in a
+ * BITMAP_DEF.
+ */
+wxBitmap KiBitmap( BITMAP_DEF aBitmap );
+
+
+/**
+ * Function KiBitmapNew
+ * allocates a wxBitmap on heap from a memory record, held in a
+ * BITMAP_DEF.
+ *
+ * @return wxBitmap* - caller owns it.
+ */
+wxBitmap* KiBitmapNew( BITMAP_DEF aBitmap );
+
+
+// may eventually generate this file automatically.
+
+EXTERN_BITMAP( shape_3d_xpm )
+EXTERN_BITMAP( add_arc_xpm )
+EXTERN_BITMAP( add_bus2bus_xpm )
+EXTERN_BITMAP( add_bus_xpm )
+EXTERN_BITMAP( add_circle_xpm )
+EXTERN_BITMAP( add_component_xpm )
+EXTERN_BITMAP( add_corner_xpm )
+EXTERN_BITMAP( add_dashed_line_xpm )
+EXTERN_BITMAP( add_dimension_xpm )
+EXTERN_BITMAP( add_entry_xpm )
+EXTERN_BITMAP( add_glabel_xpm )
+EXTERN_BITMAP( add_hierarchical_label_xpm )
+EXTERN_BITMAP( add_hierarchical_subsheet_xpm )
+EXTERN_BITMAP( add_hierar_pin_xpm )
+EXTERN_BITMAP( add_junction_xpm )
+EXTERN_BITMAP( add_keepout_area_xpm )
+EXTERN_BITMAP( add_line2bus_xpm )
+EXTERN_BITMAP( add_line_label_xpm )
+EXTERN_BITMAP( add_line_xpm )
+EXTERN_BITMAP( add_mires_xpm )
+EXTERN_BITMAP( add_polygon_xpm )
+EXTERN_BITMAP( add_power_xpm )
+EXTERN_BITMAP( add_rectangle_xpm )
+EXTERN_BITMAP( add_text_xpm )
+EXTERN_BITMAP( add_tracks_xpm )
+EXTERN_BITMAP( add_zone_cutout_xpm )
+EXTERN_BITMAP( add_zone_xpm )
+EXTERN_BITMAP( anchor_xpm )
+EXTERN_BITMAP( annotate_down_right_xpm )
+EXTERN_BITMAP( annotate_right_down_xpm )
+EXTERN_BITMAP( annotate_xpm )
+EXTERN_BITMAP( array_line_xpm )
+EXTERN_BITMAP( array_module_xpm )
+EXTERN_BITMAP( array_pad_xpm )
+EXTERN_BITMAP( array_target_xpm )
+EXTERN_BITMAP( array_text_xpm )
+EXTERN_BITMAP( array_zone_xpm )
+EXTERN_BITMAP( auto_associe_xpm )
+EXTERN_BITMAP( auto_delete_track_xpm )
+EXTERN_BITMAP( auto_track_width_xpm )
+EXTERN_BITMAP( axis3d_back_xpm )
+EXTERN_BITMAP( axis3d_bottom_xpm )
+EXTERN_BITMAP( axis3d_front_xpm )
+EXTERN_BITMAP( axis3d_left_xpm )
+EXTERN_BITMAP( axis3d_right_xpm )
+EXTERN_BITMAP( axis3d_top_xpm )
+EXTERN_BITMAP( axis3d_xpm )
+EXTERN_BITMAP( bom_xpm )
+EXTERN_BITMAP( book_xpm )
+EXTERN_BITMAP( break_bus_xpm )
+EXTERN_BITMAP( break_line_xpm )
+EXTERN_BITMAP( browse_files_xpm )
+EXTERN_BITMAP( cancel_xpm )
+EXTERN_BITMAP( change_entry_orient_xpm )
+EXTERN_BITMAP( change_label_xpm )
+EXTERN_BITMAP( change_hlabel_xpm )
+EXTERN_BITMAP( change_glabel_xpm )
+EXTERN_BITMAP( change_text_xpm )
+EXTERN_BITMAP( contrast_mode_xpm )
+EXTERN_BITMAP( checked_ok_xpm )
+EXTERN_BITMAP( component_select_alternate_shape_xpm )
+EXTERN_BITMAP( component_select_unit_xpm )
+EXTERN_BITMAP( config_xpm )
+EXTERN_BITMAP( copper_layers_setup_xpm )
+EXTERN_BITMAP( copyblock_xpm )
+EXTERN_BITMAP( copycomponent_xpm )
+EXTERN_BITMAP( copy_button_xpm )
+EXTERN_BITMAP( copy_library_xpm )
+EXTERN_BITMAP( create_cmp_file_xpm )
+EXTERN_BITMAP( cursor_shape_xpm )
+EXTERN_BITMAP( cursor_xpm )
+EXTERN_BITMAP( cut_button_xpm )
+EXTERN_BITMAP( cvpcb_xpm )
+EXTERN_BITMAP( dashline_xpm )
+EXTERN_BITMAP( datasheet_xpm )
+EXTERN_BITMAP( delete_arc_xpm )
+EXTERN_BITMAP( delete_association_xpm )
+EXTERN_BITMAP( delete_bus_xpm )
+EXTERN_BITMAP( delete_circle_xpm )
+EXTERN_BITMAP( delete_connection_xpm )
+EXTERN_BITMAP( delete_cotation_xpm )
+EXTERN_BITMAP( delete_field_xpm )
+EXTERN_BITMAP( delete_glabel_xpm )
+EXTERN_BITMAP( delete_line_xpm )
+EXTERN_BITMAP( delete_module_xpm )
+EXTERN_BITMAP( delete_net_xpm )
+EXTERN_BITMAP( delete_node_xpm )
+EXTERN_BITMAP( delete_pad_xpm )
+EXTERN_BITMAP( delete_pinsheet_xpm )
+EXTERN_BITMAP( delete_pin_xpm )
+EXTERN_BITMAP( delete_polygon_xpm )
+EXTERN_BITMAP( delete_rectangle_xpm )
+EXTERN_BITMAP( delete_segment_xpm )
+EXTERN_BITMAP( delete_sheet_xpm )
+EXTERN_BITMAP( delete_text_xpm )
+EXTERN_BITMAP( delete_track_xpm )
+EXTERN_BITMAP( delete_xpm )
+EXTERN_BITMAP( dialog_warning_xpm )
+EXTERN_BITMAP( directory_xpm )
+EXTERN_BITMAP( display_options_xpm )
+EXTERN_BITMAP( down_xpm )
+EXTERN_BITMAP( ortho_xpm )
+EXTERN_BITMAP( drag_module_xpm )
+EXTERN_BITMAP( drag_outline_segment_xpm )
+EXTERN_BITMAP( drag_pad_xpm )
+EXTERN_BITMAP( drag_segment_withslope_xpm )
+EXTERN_BITMAP( drag_track_segment_xpm )
+EXTERN_BITMAP( drc_off_xpm )
+EXTERN_BITMAP( drc_xpm )
+EXTERN_BITMAP( duplicate_line_xpm )
+EXTERN_BITMAP( duplicate_module_xpm )
+EXTERN_BITMAP( duplicate_pad_xpm )
+EXTERN_BITMAP( duplicate_target_xpm )
+EXTERN_BITMAP( duplicate_text_xpm )
+EXTERN_BITMAP( duplicate_zone_xpm )
+EXTERN_BITMAP( edges_sketch_xpm )
+EXTERN_BITMAP( edit_comp_footprint_xpm )
+EXTERN_BITMAP( edit_component_xpm )
+EXTERN_BITMAP( edit_comp_ref_xpm )
+EXTERN_BITMAP( edit_comp_value_xpm )
+EXTERN_BITMAP( edit_module_xpm )
+EXTERN_BITMAP( editor_xpm )
+EXTERN_BITMAP( edit_part_xpm )
+EXTERN_BITMAP( edit_sheet_xpm )
+EXTERN_BITMAP( edit_text_xpm )
+EXTERN_BITMAP( edit_xpm )
+EXTERN_BITMAP( eeschema_xpm )
+EXTERN_BITMAP( enter_sheet_xpm )
+EXTERN_BITMAP( erc_xpm )
+EXTERN_BITMAP( ercerr_xpm )
+EXTERN_BITMAP( ercwarn_xpm )
+EXTERN_BITMAP( erc_green_xpm )
+EXTERN_BITMAP( exit_xpm )
+EXTERN_BITMAP( export_dsn_xpm )
+EXTERN_BITMAP( export_idf_xpm )
+EXTERN_BITMAP( export_footprint_names_xpm )
+EXTERN_BITMAP( export_module_xpm )
+EXTERN_BITMAP( export_options_pad_xpm )
+EXTERN_BITMAP( export_xpm )
+EXTERN_BITMAP( fabrication_xpm )
+EXTERN_BITMAP( file_footprint_xpm )
+EXTERN_BITMAP( fill_zone_xpm )
+EXTERN_BITMAP( find_xpm )
+EXTERN_BITMAP( find_replace_xpm )
+EXTERN_BITMAP( flag_xpm )
+EXTERN_BITMAP( fonts_xpm )
+EXTERN_BITMAP( footprint_text_xpm )
+EXTERN_BITMAP( gbr_select_mode0_xpm )
+EXTERN_BITMAP( gbr_select_mode1_xpm )
+EXTERN_BITMAP( gbr_select_mode2_xpm )
+EXTERN_BITMAP( gerbview_drill_file_xpm )
+EXTERN_BITMAP( gerber_file_xpm )
+EXTERN_BITMAP( gerber_recent_files_xpm )
+EXTERN_BITMAP( gerbview_clear_layers_xpm )
+EXTERN_BITMAP( gerbview_open_recent_drill_files_xpm )
+EXTERN_BITMAP( gerbview_show_negative_objects_xpm );
+EXTERN_BITMAP( general_deletions_xpm )
+EXTERN_BITMAP( general_ratsnest_xpm )
+EXTERN_BITMAP( glabel2label_xpm )
+EXTERN_BITMAP( glabel2text_xpm )
+EXTERN_BITMAP( gl_change_xpm )
+EXTERN_BITMAP( global_options_pad_xpm )
+EXTERN_BITMAP( green_xpm )
+EXTERN_BITMAP( grid_select_axis_xpm )
+EXTERN_BITMAP( grid_select_xpm )
+EXTERN_BITMAP( grid_xpm )
+EXTERN_BITMAP( hammer_xpm )
+EXTERN_BITMAP( help_xpm )
+EXTERN_BITMAP( hidden_pin_xpm )
+EXTERN_BITMAP( hierarchy_cursor_xpm )
+EXTERN_BITMAP( hierarchy_nav_xpm )
+EXTERN_BITMAP( hotkeys_xpm )
+EXTERN_BITMAP( html_xpm )
+EXTERN_BITMAP( icon_cvpcb_small_xpm )
+EXTERN_BITMAP( icon_cvpcb_xpm )
+EXTERN_BITMAP( icon_eeschema_xpm )
+EXTERN_BITMAP( icon_gerbview_small_xpm )
+EXTERN_BITMAP( icon_gerbview_xpm )
+EXTERN_BITMAP( icon_kicad_xpm )
+EXTERN_BITMAP( icon_modedit_xpm )
+EXTERN_BITMAP( icon_pcbnew_xpm )
+EXTERN_BITMAP( icon_txt_xpm )
+EXTERN_BITMAP( icon_3d_xpm )
+EXTERN_BITMAP( icon_bitmap2component_xpm )
+EXTERN_BITMAP( icon_pcbcalculator_xpm )
+EXTERN_BITMAP( icon_pagelayout_editor_xpm )
+EXTERN_BITMAP( image_xpm )
+EXTERN_BITMAP( import_cmp_from_lib_xpm )
+EXTERN_BITMAP( import_footprint_names_xpm )
+EXTERN_BITMAP( import_hierarchical_label_xpm )
+EXTERN_BITMAP( import_module_xpm )
+EXTERN_BITMAP( import_xpm )
+EXTERN_BITMAP( import3d_xpm )
+EXTERN_BITMAP( info_xpm )
+EXTERN_BITMAP( insert_module_board_xpm )
+EXTERN_BITMAP( invisible_text_xpm )
+EXTERN_BITMAP( kicad_icon_small_xpm )
+EXTERN_BITMAP( label2glabel_xpm )
+EXTERN_BITMAP( label2text_xpm )
+EXTERN_BITMAP( label_xpm )
+EXTERN_BITMAP( lang_bg_xpm )
+EXTERN_BITMAP( lang_catalan_xpm )
+EXTERN_BITMAP( lang_chinese_xpm )
+EXTERN_BITMAP( lang_cs_xpm )
+EXTERN_BITMAP( lang_def_xpm )
+EXTERN_BITMAP( lang_de_xpm )
+EXTERN_BITMAP( lang_en_xpm )
+EXTERN_BITMAP( lang_es_xpm )
+EXTERN_BITMAP( lang_fr_xpm )
+EXTERN_BITMAP( lang_fi_xpm )
+EXTERN_BITMAP( lang_gr_xpm )
+EXTERN_BITMAP( lang_hu_xpm )
+EXTERN_BITMAP( lang_it_xpm )
+EXTERN_BITMAP( lang_jp_xpm )
+EXTERN_BITMAP( lang_ko_xpm )
+EXTERN_BITMAP( lang_nl_xpm )
+EXTERN_BITMAP( lang_pl_xpm )
+EXTERN_BITMAP( lang_pt_xpm )
+EXTERN_BITMAP( lang_ru_xpm )
+EXTERN_BITMAP( lang_sl_xpm )
+EXTERN_BITMAP( language_xpm )
+EXTERN_BITMAP( layers_manager_xpm )
+EXTERN_BITMAP( leave_sheet_xpm )
+EXTERN_BITMAP( left_xpm )
+EXTERN_BITMAP( libedit_icon_xpm )
+EXTERN_BITMAP( libedit_xpm )
+EXTERN_BITMAP( libedprt_xpm )
+EXTERN_BITMAP( lib_next_xpm )
+EXTERN_BITMAP( lib_previous_xpm )
+EXTERN_BITMAP( library_browse_xpm )
+EXTERN_BITMAP( library_update_xpm )
+EXTERN_BITMAP( library_xpm )
+EXTERN_BITMAP( library_table_xpm )
+EXTERN_BITMAP( libview_xpm )
+EXTERN_BITMAP( lines90_xpm )
+EXTERN_BITMAP( list_nets_xpm )
+EXTERN_BITMAP( load_module_board_xpm )
+EXTERN_BITMAP( load_module_lib_xpm )
+EXTERN_BITMAP( local_ratsnest_xpm )
+EXTERN_BITMAP( locked_xpm )
+EXTERN_BITMAP( macros_record_xpm )
+EXTERN_BITMAP( mirepcb_xpm )
+EXTERN_BITMAP( mirror_h_xpm )
+EXTERN_BITMAP( mirror_v_xpm )
+EXTERN_BITMAP( mirror_footprint_axisX_xpm )
+EXTERN_BITMAP( mirror_footprint_axisY_xpm )
+EXTERN_BITMAP( mode_module_xpm )
+EXTERN_BITMAP( mode_track_xpm )
+EXTERN_BITMAP( modratsnest_xpm )
+EXTERN_BITMAP( module_check_xpm )
+EXTERN_BITMAP( module_editor_xpm )
+EXTERN_BITMAP( module_wizard_xpm )
+EXTERN_BITMAP( module_filtered_list_xpm )
+EXTERN_BITMAP( module_pin_filtered_list_xpm )
+EXTERN_BITMAP( module_library_list_xpm )
+EXTERN_BITMAP( module_full_list_xpm )
+EXTERN_BITMAP( module_options_xpm )
+EXTERN_BITMAP( module_ratsnest_xpm )
+EXTERN_BITMAP( module_xpm )
+EXTERN_BITMAP( modview_icon_xpm )
+EXTERN_BITMAP( morgan1_xpm )
+EXTERN_BITMAP( morgan2_xpm )
+EXTERN_BITMAP( move_arc_xpm )
+EXTERN_BITMAP( move_circle_xpm )
+EXTERN_BITMAP( move_field_xpm )
+EXTERN_BITMAP( move_glabel_xpm )
+EXTERN_BITMAP( move_line_xpm )
+EXTERN_BITMAP( move_module_xpm )
+EXTERN_BITMAP( move_pad_xpm )
+EXTERN_BITMAP( move_pinsheet_xpm )
+EXTERN_BITMAP( move_pin_xpm )
+EXTERN_BITMAP( move_polygon_xpm )
+EXTERN_BITMAP( move_rectangle_xpm )
+EXTERN_BITMAP( move_sheet_xpm )
+EXTERN_BITMAP( move_text_xpm )
+EXTERN_BITMAP( move_target_xpm )
+EXTERN_BITMAP( move_track_segment_xpm )
+EXTERN_BITMAP( move_track_xpm )
+EXTERN_BITMAP( move_zone_xpm )
+EXTERN_BITMAP( move_xpm )
+EXTERN_BITMAP( mw_add_gap_xpm )
+EXTERN_BITMAP( mw_add_line_xpm )
+EXTERN_BITMAP( mw_add_shape_xpm )
+EXTERN_BITMAP( mw_add_stub_arc_xpm )
+EXTERN_BITMAP( mw_add_stub_xpm )
+EXTERN_BITMAP( mw_toolbar_xpm )
+EXTERN_BITMAP( net_highlight_xpm )
+EXTERN_BITMAP( netlist_xpm )
+EXTERN_BITMAP( net_locked_xpm )
+EXTERN_BITMAP( net_unlocked_xpm )
+EXTERN_BITMAP( new_component_xpm )
+EXTERN_BITMAP( new_cvpcb_xpm )
+EXTERN_BITMAP( new_footprint_xpm )
+EXTERN_BITMAP( new_gerb_xpm )
+EXTERN_BITMAP( new_library_xpm )
+EXTERN_BITMAP( new_pcb_xpm )
+EXTERN_BITMAP( new_project_xpm )
+EXTERN_BITMAP( new_project_with_template_xpm )
+EXTERN_BITMAP( new_python_xpm )
+EXTERN_BITMAP( new_sch_xpm )
+EXTERN_BITMAP( noconn_xpm )
+EXTERN_BITMAP( normal_xpm )
+EXTERN_BITMAP( online_help_xpm )
+EXTERN_BITMAP( open_brd_file_xpm )
+EXTERN_BITMAP( open_document_xpm )
+EXTERN_BITMAP( open_library_xpm )
+EXTERN_BITMAP( open_project_xpm )
+EXTERN_BITMAP( options_all_tracks_and_vias_xpm )
+EXTERN_BITMAP( options_all_tracks_xpm )
+EXTERN_BITMAP( options_all_vias_xpm )
+EXTERN_BITMAP( options_arc_xpm )
+EXTERN_BITMAP( options_circle_xpm )
+EXTERN_BITMAP( options_module_xpm )
+EXTERN_BITMAP( options_new_pad_xpm )
+EXTERN_BITMAP( options_pad_xpm )
+EXTERN_BITMAP( options_pinsheet_xpm )
+EXTERN_BITMAP( options_pin_xpm )
+EXTERN_BITMAP( options_rectangle_xpm )
+EXTERN_BITMAP( options_segment_xpm )
+EXTERN_BITMAP( options_text_xpm )
+EXTERN_BITMAP( options_tracks_xpm )
+EXTERN_BITMAP( options_track_xpm )
+EXTERN_BITMAP( options_vias_xpm )
+EXTERN_BITMAP( opt_show_polygon_xpm )
+EXTERN_BITMAP( orient_xpm )
+EXTERN_BITMAP( pad_sketch_xpm )
+EXTERN_BITMAP( pad_xpm )
+EXTERN_BITMAP( pad_dimensions_xpm )
+EXTERN_BITMAP( pad_enumerate_xpm )
+EXTERN_BITMAP( pads_mask_layers_xpm )
+EXTERN_BITMAP( pagelayout_load_xpm )
+EXTERN_BITMAP( pagelayout_load_default_xpm )
+EXTERN_BITMAP( pagelayout_new_xpm )
+EXTERN_BITMAP( pagelayout_recent_xpm )
+EXTERN_BITMAP( pagelayout_normal_view_mode_xpm )
+EXTERN_BITMAP( pagelayout_special_view_mode_xpm )
+EXTERN_BITMAP( palette_xpm )
+EXTERN_BITMAP( part_properties_xpm )
+EXTERN_BITMAP( paste_xpm )
+EXTERN_BITMAP( pcbnew_xpm )
+EXTERN_BITMAP( pcb_offset_xpm )
+EXTERN_BITMAP( pin2pin_xpm )
+EXTERN_BITMAP( pin_name_to_xpm )
+EXTERN_BITMAP( pin_number_to_xpm )
+EXTERN_BITMAP( pin_size_to_xpm )
+EXTERN_BITMAP( pin_table_xpm )
+EXTERN_BITMAP( pinorient_right_xpm )
+EXTERN_BITMAP( pinorient_left_xpm )
+EXTERN_BITMAP( pinorient_up_xpm )
+EXTERN_BITMAP( pinorient_down_xpm )
+EXTERN_BITMAP( pinshape_nonlogic_xpm )
+EXTERN_BITMAP( pinshape_normal_xpm )
+EXTERN_BITMAP( pinshape_invert_xpm )
+EXTERN_BITMAP( pinshape_clock_fall_xpm )
+EXTERN_BITMAP( pinshape_clock_normal_xpm )
+EXTERN_BITMAP( pinshape_clock_invert_xpm )
+EXTERN_BITMAP( pinshape_active_low_input_xpm )
+EXTERN_BITMAP( pinshape_clock_active_low_xpm )
+EXTERN_BITMAP( pinshape_active_low_output_xpm )
+EXTERN_BITMAP( pintype_input_xpm )
+EXTERN_BITMAP( pintype_output_xpm )
+EXTERN_BITMAP( pintype_bidi_xpm )
+EXTERN_BITMAP( pintype_3states_xpm )
+EXTERN_BITMAP( pintype_passive_xpm )
+EXTERN_BITMAP( pintype_notspecif_xpm )
+EXTERN_BITMAP( pintype_powerinput_xpm )
+EXTERN_BITMAP( pintype_poweroutput_xpm )
+EXTERN_BITMAP( pintype_opencoll_xpm )
+EXTERN_BITMAP( pintype_openemit_xpm )
+EXTERN_BITMAP( pintype_noconnect_xpm )
+EXTERN_BITMAP( pin_to_xpm )
+EXTERN_BITMAP( pin_xpm )
+EXTERN_BITMAP( plot_xpm )
+EXTERN_BITMAP( plot_dxf_xpm )
+EXTERN_BITMAP( plot_hpg_xpm )
+EXTERN_BITMAP( plot_pdf_xpm )
+EXTERN_BITMAP( plot_ps_xpm )
+EXTERN_BITMAP( plot_svg_xpm )
+EXTERN_BITMAP( polar_coord_xpm )
+EXTERN_BITMAP( post_compo_xpm )
+EXTERN_BITMAP( post_drill_xpm )
+EXTERN_BITMAP( post_module_xpm )
+EXTERN_BITMAP( preference_xpm )
+EXTERN_BITMAP( print_button_xpm )
+EXTERN_BITMAP( ps_router_xpm )
+EXTERN_BITMAP( ps_diff_pair_xpm )
+EXTERN_BITMAP( ps_diff_pair_gap_xpm )
+EXTERN_BITMAP( ps_diff_pair_tune_length_xpm )
+EXTERN_BITMAP( ps_diff_pair_tune_phase_xpm )
+EXTERN_BITMAP( ps_diff_pair_via_gap_xpm )
+EXTERN_BITMAP( ps_tune_length_xpm )
+EXTERN_BITMAP( py_script_xpm )
+EXTERN_BITMAP( ratsnest_xpm )
+EXTERN_BITMAP( read_setup_xpm )
+EXTERN_BITMAP( redo_xpm )
+EXTERN_BITMAP( red_xpm )
+EXTERN_BITMAP( reload2_xpm )
+EXTERN_BITMAP( reload_xpm )
+EXTERN_BITMAP( repaint_xpm )
+EXTERN_BITMAP( reset_text_xpm )
+EXTERN_BITMAP( resize_sheet_xpm )
+EXTERN_BITMAP( rescue_pcbnew_xpm )
+EXTERN_BITMAP( revert_pcbnew_xpm )
+EXTERN_BITMAP( right_xpm )
+EXTERN_BITMAP( rotate_field_xpm )
+EXTERN_BITMAP( rotate_glabel_xpm )
+EXTERN_BITMAP( rotate_module_cw_xpm )
+EXTERN_BITMAP( rotate_module_ccw_xpm )
+EXTERN_BITMAP( rotate_pin_xpm )
+EXTERN_BITMAP( rotate_cw_xpm )
+EXTERN_BITMAP( rotate_ccw_xpm )
+EXTERN_BITMAP( rotate_neg_x_xpm )
+EXTERN_BITMAP( rotate_pos_x_xpm )
+EXTERN_BITMAP( rotate_neg_y_xpm )
+EXTERN_BITMAP( rotate_pos_y_xpm )
+EXTERN_BITMAP( rotate_neg_z_xpm )
+EXTERN_BITMAP( rotate_pos_z_xpm )
+EXTERN_BITMAP( save_as_xpm )
+EXTERN_BITMAP( save_library_xpm )
+EXTERN_BITMAP( save_netlist_xpm )
+EXTERN_BITMAP( save_part_in_mem_xpm )
+EXTERN_BITMAP( save_project_xpm )
+EXTERN_BITMAP( save_setup_xpm )
+EXTERN_BITMAP( save_xpm )
+EXTERN_BITMAP( schematic_xpm )
+EXTERN_BITMAP( select_grid_xpm )
+EXTERN_BITMAP( select_layer_pair_xpm )
+EXTERN_BITMAP( select_w_layer_xpm )
+EXTERN_BITMAP( sheetset_xpm )
+EXTERN_BITMAP( setcolor_3d_bg_xpm )
+EXTERN_BITMAP( setcolor_silkscreen_xpm )
+EXTERN_BITMAP( setcolor_soldermask_xpm )
+EXTERN_BITMAP( setcolor_solderpaste_xpm )
+EXTERN_BITMAP( setcolor_copper_xpm )
+EXTERN_BITMAP( setcolor_board_body_xpm )
+EXTERN_BITMAP( show_dcodenumber_xpm )
+EXTERN_BITMAP( show_footprint_xpm )
+EXTERN_BITMAP( show_mod_edge_xpm )
+EXTERN_BITMAP( showtrack_xpm )
+EXTERN_BITMAP( show_zone_xpm )
+EXTERN_BITMAP( show_zone_disable_xpm )
+EXTERN_BITMAP( show_zone_outline_only_xpm )
+EXTERN_BITMAP( svg_file_xpm )
+EXTERN_BITMAP( swap_layer_xpm )
+EXTERN_BITMAP( text_sketch_xpm )
+EXTERN_BITMAP( three_d_xpm )
+EXTERN_BITMAP( tool_ratsnest_xpm )
+EXTERN_BITMAP( tools_xpm )
+EXTERN_BITMAP( track_locked_xpm )
+EXTERN_BITMAP( track_sketch_xpm )
+EXTERN_BITMAP( track_unlocked_xpm )
+EXTERN_BITMAP( transistor_xpm )
+EXTERN_BITMAP( tree_nosel_xpm )
+EXTERN_BITMAP( tree_sel_xpm )
+EXTERN_BITMAP( undelete_xpm )
+EXTERN_BITMAP( undo_xpm )
+EXTERN_BITMAP( unit_inch_xpm )
+EXTERN_BITMAP( unit_mm_xpm )
+EXTERN_BITMAP( unknown_xpm )
+EXTERN_BITMAP( unlocked_xpm )
+EXTERN_BITMAP( unzip_xpm )
+EXTERN_BITMAP( update_module_board_xpm )
+EXTERN_BITMAP( up_xpm )
+EXTERN_BITMAP( use_3D_copper_thickness_xpm )
+EXTERN_BITMAP( via_xpm )
+EXTERN_BITMAP( via_microvia_xpm )
+EXTERN_BITMAP( via_buried_xpm )
+EXTERN_BITMAP( via_sketch_xpm )
+EXTERN_BITMAP( viewlibs_icon_xpm )
+EXTERN_BITMAP( warning_xpm )
+EXTERN_BITMAP( web_support_xpm )
+EXTERN_BITMAP( width_net_xpm )
+EXTERN_BITMAP( width_segment_xpm )
+EXTERN_BITMAP( width_track_via_xpm )
+EXTERN_BITMAP( width_track_xpm )
+EXTERN_BITMAP( width_vias_xpm )
+EXTERN_BITMAP( window_close_xpm )
+EXTERN_BITMAP( wizard_add_fplib_icon_xpm )
+EXTERN_BITMAP( wizard_add_fplib_small_xpm )
+EXTERN_BITMAP( zip_tool_xpm )
+EXTERN_BITMAP( zip_xpm )
+EXTERN_BITMAP( zone_duplicate_xpm )
+EXTERN_BITMAP( zone_unfill_xpm )
+EXTERN_BITMAP( zoom_area_xpm )
+EXTERN_BITMAP( zoom_center_on_screen_xpm )
+EXTERN_BITMAP( zoom_redraw_xpm )
+EXTERN_BITMAP( zoom_fit_in_page_xpm )
+EXTERN_BITMAP( zoom_in_xpm )
+EXTERN_BITMAP( zoom_out_xpm )
+EXTERN_BITMAP( zoom_page_xpm )
+EXTERN_BITMAP( zoom_selection_xpm )
+EXTERN_BITMAP( zoom_xpm )
+EXTERN_BITMAP( tune_diff_pair_length_legend_xpm )
+EXTERN_BITMAP( tune_diff_pair_skew_legend_xpm )
+EXTERN_BITMAP( tune_single_track_length_legend_xpm )
+
+#endif // BITMAPS_H_
diff --git a/include/block_commande.h b/include/block_commande.h
new file mode 100644
index 0000000..8c7d5e8
--- /dev/null
+++ b/include/block_commande.h
@@ -0,0 +1,211 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * This file is part of the common library.
+ * @file block_commande.h
+ * @see common.h
+ */
+
+#ifndef __INCLUDE__BLOCK_COMMANDE_H__
+#define __INCLUDE__BLOCK_COMMANDE_H__
+
+
+#include <base_struct.h>
+#include <class_undoredo_container.h>
+#include <gr_basic.h>
+
+/* Block state codes. */
+typedef enum {
+ STATE_NO_BLOCK,
+ STATE_BLOCK_INIT,
+ STATE_BLOCK_END,
+ STATE_BLOCK_MOVE,
+ STATE_BLOCK_STOP
+} BLOCK_STATE_T;
+
+
+/* Block command codes. */
+typedef enum {
+ BLOCK_IDLE,
+ BLOCK_MOVE,
+ BLOCK_COPY,
+ BLOCK_COPY_AND_INCREMENT,
+ BLOCK_SAVE,
+ BLOCK_DELETE,
+ BLOCK_PASTE,
+ BLOCK_DRAG,
+ BLOCK_DRAG_ITEM, // like BLOCK_DRAG, when used to drag a selected component
+ // and not using an area defined by a mouse drag
+ BLOCK_ROTATE,
+ BLOCK_FLIP,
+ BLOCK_ZOOM,
+ BLOCK_ABORT,
+ BLOCK_PRESELECT_MOVE,
+ BLOCK_MOVE_EXACT,
+ BLOCK_SELECT_ITEMS_ONLY,
+ BLOCK_MIRROR_X,
+ BLOCK_MIRROR_Y
+} BLOCK_COMMAND_T;
+
+
+class BLOCK_SELECTOR : public EDA_RECT
+{
+ BLOCK_STATE_T m_state; //< State (enum BLOCK_STATE_T) of the block.
+ BLOCK_COMMAND_T m_command; //< Command (enum BLOCK_COMMAND_T) operation.
+ PICKED_ITEMS_LIST m_items; //< List of items selected in this block.
+ EDA_COLOR_T m_color; //< Block Color (for drawings).
+ wxPoint m_moveVector; //< Move distance to move the block.
+ wxPoint m_lastCursorPosition; //< Last Mouse position in block command
+ //< last cursor position in move commands
+ //< 0,0 in paste command.
+
+public:
+ BLOCK_SELECTOR();
+ ~BLOCK_SELECTOR();
+
+ void SetState( BLOCK_STATE_T aState ) { m_state = aState; }
+
+ BLOCK_STATE_T GetState() const { return m_state; }
+
+ void SetCommand( BLOCK_COMMAND_T aCommand ) { m_command = aCommand; }
+
+ BLOCK_COMMAND_T GetCommand() const { return m_command; }
+
+ void SetColor( EDA_COLOR_T aColor ) { m_color = aColor; }
+
+ EDA_COLOR_T GetColor() const { return m_color; }
+
+ /**
+ * Function SetLastCursorPosition
+ * sets the last cursor position to \a aPosition.
+ *
+ * @param aPosition The current cursor position.
+ */
+ void SetLastCursorPosition( const wxPoint& aPosition ) { m_lastCursorPosition = aPosition; }
+
+ wxPoint GetLastCursorPosition() const { return m_lastCursorPosition; }
+
+ void SetMoveVector( const wxPoint& aMoveVector ) { m_moveVector = aMoveVector; }
+
+ wxPoint GetMoveVector() const { return m_moveVector; }
+
+ /**
+ * Function InitData
+ * sets the initial values of a BLOCK_SELECTOR, before starting a block
+ * command
+ */
+ void InitData( EDA_DRAW_PANEL* Panel, const wxPoint& startpos );
+
+ /**
+ * Function SetMessageBlock
+ * Displays the type of block command in the status bar of the window
+ */
+ void SetMessageBlock( EDA_DRAW_FRAME* frame );
+
+ void Draw( EDA_DRAW_PANEL* aPanel,
+ wxDC* aDC,
+ const wxPoint& aOffset,
+ GR_DRAWMODE aDrawMode,
+ EDA_COLOR_T aColor );
+
+ /**
+ * Function PushItem
+ * adds \a aItem to the list of items.
+ * @param aItem = an ITEM_PICKER to add to the list
+ */
+ void PushItem( ITEM_PICKER& aItem );
+
+ /**
+ * Function ClearListAndDeleteItems
+ * deletes only the list of EDA_ITEM * pointers, AND the data printed
+ * by m_Item
+ */
+ void ClearListAndDeleteItems();
+
+ /**
+ * Function ClearItemsList
+ * clear only the list of #EDA_ITEM pointers, it does _NOT_ delete the #EDA_ITEM object
+ * itself
+ */
+ void ClearItemsList();
+
+ unsigned GetCount() const
+ {
+ return m_items.GetCount();
+ }
+
+ PICKED_ITEMS_LIST& GetItems() { return m_items; }
+
+ EDA_ITEM* GetItem( unsigned aIndex )
+ {
+ if( aIndex < m_items.GetCount() )
+ return m_items.GetPickedItem( aIndex );
+
+ return NULL;
+ }
+
+ /**
+ * Function IsDragging
+ * returns true if the current block command is a drag operation.
+ */
+ bool IsDragging() const
+ {
+ return m_command == BLOCK_DRAG || m_command == BLOCK_DRAG_ITEM;
+ }
+
+ /**
+ * Function IsIdle
+ * returns true if there is currently no block operation in progress.
+ */
+ inline bool IsIdle() const { return m_command == BLOCK_IDLE; }
+
+ /**
+ * Function Clear
+ * clears the block selector by setting the command to idle, the state to no block,
+ * and clears the selected item list.
+ */
+ void Clear();
+};
+
+
+/**
+ * Function AbortBlockCurrentCommand
+ * cancels the current block operation.
+ */
+void AbortBlockCurrentCommand( EDA_DRAW_PANEL* aPanel, wxDC* aDC );
+
+
+/**
+ * Function DrawAndSizingBlockOutlines
+ * redraws the outlines of the block which shows the search area for block commands.
+ *
+ * The first point of the rectangle showing the area is initialized by InitBlockLocateDatas().
+ * The other point of the rectangle is the mouse cursor position.
+ */
+void DrawAndSizingBlockOutlines( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition,
+ bool aErase );
+
+
+#endif /* __INCLUDE__BLOCK_COMMANDE_H__ */
diff --git a/include/build_version.h b/include/build_version.h
new file mode 100644
index 0000000..8d3638b
--- /dev/null
+++ b/include/build_version.h
@@ -0,0 +1,39 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* Date for kicad build version */
+
+#ifndef KICAD_BUILD_VERSION_H
+#define KICAD_BUILD_VERSION_H
+
+class wxString;
+
+
+/**
+ * Function GetBuildVersion
+ * Return the build date and version
+ */
+wxString GetBuildVersion();
+
+#endif // KICAD_BUILD_VERSION_H
diff --git a/include/class_base_screen.h b/include/class_base_screen.h
new file mode 100644
index 0000000..fe77668
--- /dev/null
+++ b/include/class_base_screen.h
@@ -0,0 +1,508 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_base_screen.h
+ * @brief BASE_SCREEN class implementation.
+ */
+
+#ifndef CLASS_BASE_SCREEN_H_
+#define CLASS_BASE_SCREEN_H_
+
+#include <draw_frame.h>
+#include <base_struct.h>
+#include <class_undoredo_container.h>
+#include <block_commande.h>
+#include <common.h>
+#include <id.h>
+
+/**
+ * Class GRID_TYPE
+ * is for grid arrays.
+ */
+class GRID_TYPE
+{
+public:
+ int m_CmdId; // The command id of this grid ( first id is ID_POPUP_GRID_LEVEL_1000 )
+ wxRealPoint m_Size; // the size in internal unit of the grid (can differ for X and Y axis)
+
+ GRID_TYPE& operator=( const GRID_TYPE& item )
+ {
+ if( this != &item )
+ {
+ m_CmdId = item.m_CmdId;
+ m_Size = item.m_Size;
+ }
+
+ return *this;
+ }
+
+ const bool operator==( const GRID_TYPE& item ) const
+ {
+ return m_Size == item.m_Size && m_CmdId == item.m_CmdId;
+ }
+};
+
+
+typedef std::vector<GRID_TYPE> GRIDS;
+
+
+/**
+ * Class BASE_SCREEN
+ * handles how to draw a screen (a board, a schematic ...)
+ */
+class BASE_SCREEN : public EDA_ITEM
+{
+private:
+ GRIDS m_grids; ///< List of valid grid sizes.
+ bool m_FlagModified; ///< Indicates current drawing has been modified.
+ bool m_FlagSave; ///< Indicates automatic file save.
+ EDA_ITEM* m_CurrentItem; ///< Currently selected object
+ GRID_TYPE m_Grid; ///< Current grid selection.
+ wxPoint m_scrollCenter; ///< Current scroll center point in logical units.
+ wxPoint m_MousePosition; ///< Mouse cursor coordinate in logical units.
+ int m_UndoRedoCountMax; ///< undo/Redo command Max depth
+
+ /**
+ * The cross hair position in logical (drawing) units. The cross hair is not the cursor
+ * position. It is an addition indicator typically drawn on grid to indicate to the
+ * user where the current action will be performed.
+ */
+ wxPoint m_crossHairPosition;
+
+ double m_Zoom; ///< Current zoom coefficient.
+
+ //----< Old public API now is private, and migratory>------------------------
+ // called only from EDA_DRAW_FRAME
+ friend class EDA_DRAW_FRAME;
+
+ /**
+ * Function getCrossHairPosition
+ * return the current cross hair position in logical (drawing) coordinates.
+ * @param aInvertY Inverts the Y axis position.
+ * @return The cross hair position in drawing coordinates.
+ */
+ wxPoint getCrossHairPosition( bool aInvertY ) const
+ {
+ if( aInvertY )
+ return wxPoint( m_crossHairPosition.x, -m_crossHairPosition.y );
+
+ return wxPoint( m_crossHairPosition.x, m_crossHairPosition.y );
+ }
+
+ /**
+ * Function setCrossHairPosition
+ * sets the screen cross hair position to \a aPosition in logical (drawing) units.
+ * @param aPosition The new cross hair position.
+ * @param aGridOrigin Origin point of the snap grid.
+ * @param aSnapToGrid Sets the cross hair position to the nearest grid position to
+ * \a aPosition.
+ *
+ */
+ void setCrossHairPosition( const wxPoint& aPosition, const wxPoint& aGridOrigin, bool aSnapToGrid );
+
+ /**
+ * Function getCursorScreenPosition
+ * returns the cross hair position in device (display) units.b
+ * @return The current cross hair position.
+ */
+ wxPoint getCrossHairScreenPosition() const;
+
+ /**
+ * Function getNearestGridPosition
+ * returns the nearest \a aGridSize location to \a aPosition.
+ * @param aPosition The position to check.
+ * @param aGridOrigin The origin point of the snap grid.
+ * @param aGridSize The grid size to locate to if provided. If NULL then the current
+ * grid size is used.
+ * @return The nearst grid position.
+ */
+ wxPoint getNearestGridPosition( const wxPoint& aPosition, const wxPoint& aGridOrigin,
+ wxRealPoint* aGridSize ) const;
+
+ /**
+ * Function getCursorPosition
+ * returns the current cursor position in logical (drawing) units.
+ * @param aOnGrid Returns the nearest grid position at the current cursor position.
+ * @param aGridOrigin Origin point of the snap grid.
+ * @param aGridSize Custom grid size instead of the current grid size. Only valid
+ * if \a aOnGrid is true.
+ * @return The current cursor position.
+ */
+ wxPoint getCursorPosition( bool aOnGrid, const wxPoint& aGridOrigin, wxRealPoint* aGridSize ) const;
+
+ void setMousePosition( const wxPoint& aPosition ) { m_MousePosition = aPosition; }
+
+ /**
+ * Function RefPos
+ * Return the reference position, coming from either the mouse position
+ * or the cursor position.
+ *
+ * @param useMouse If true, return mouse position, else cursor's.
+ *
+ * @return wxPoint - The reference point, either the mouse position or
+ * the cursor position.
+ */
+ wxPoint refPos( bool useMouse ) const
+ {
+ return useMouse ? m_MousePosition : m_crossHairPosition;
+ }
+
+ const wxPoint& getScrollCenterPosition() const { return m_scrollCenter; }
+ void setScrollCenterPosition( const wxPoint& aPoint ) { m_scrollCenter = aPoint; }
+
+ //----</Old public API now is private, and migratory>------------------------
+
+
+public:
+ static wxString m_PageLayoutDescrFileName; ///< the name of the page layout descr file,
+ ///< or emty to used the default pagelayout
+
+ wxPoint m_DrawOrg; ///< offsets for drawing the circuit on the screen
+
+ wxPoint m_O_Curseur; ///< Relative Screen cursor coordinate (on grid)
+ ///< in user units. (coordinates from last reset position)
+
+ // Scrollbars management:
+ int m_ScrollPixelsPerUnitX; ///< Pixels per scroll unit in the horizontal direction.
+ int m_ScrollPixelsPerUnitY; ///< Pixels per scroll unit in the vertical direction.
+
+ wxSize m_ScrollbarNumber; /**< Current virtual draw area size in scroll units.
+ * m_ScrollbarNumber * m_ScrollPixelsPerUnit =
+ * virtual draw area size in pixels */
+
+ wxPoint m_ScrollbarPos; ///< Current scroll bar position in scroll units.
+
+ wxPoint m_StartVisu; /**< Coordinates in drawing units of the current
+ * view position (upper left corner of device)
+ */
+
+ bool m_Center; /**< Center on screen. If true (0.0) is centered
+ * on screen coordinates can be < 0 and
+ * > 0 except for schematics.
+ * false: when coordinates can only be >= 0
+ * Schematic */
+ bool m_FirstRedraw;
+
+ // Undo/redo list of commands
+ UNDO_REDO_CONTAINER m_UndoList; ///< Objects list for the undo command (old data)
+ UNDO_REDO_CONTAINER m_RedoList; ///< Objects list for the redo command (old data)
+
+ // block control
+ BLOCK_SELECTOR m_BlockLocate; ///< Block description for block commands
+
+ int m_ScreenNumber;
+ int m_NumberOfScreens;
+
+ std::vector<double> m_ZoomList; ///< standard zoom (i.e. scale) coefficients.
+ bool m_IsPrinting;
+
+public:
+ BASE_SCREEN( KICAD_T aType = SCREEN_T );
+ ~BASE_SCREEN();
+
+ /**
+ * Function SetCurItem
+ * sets the currently selected object, m_CurrentItem.
+ * @param aItem Any object derived from EDA_ITEM
+ */
+ void SetCurItem( EDA_ITEM* aItem ) { m_CurrentItem = aItem; }
+
+ EDA_ITEM* GetCurItem() const { return m_CurrentItem; }
+
+ void InitDataPoints( const wxSize& aPageSizeInternalUnits );
+
+ /**
+ * Function MilsToIuScalar
+ * returns the scalar required to convert mils to internal units.
+ *
+ * @note This is a temporary hack until the derived objects SCH_SCREEN and PCB_SCREEN
+ * no longer need to be derived from BASE_SCREEN. I does allow removal of the
+ * obsolete GetInternalUnits function.
+ */
+ virtual int MilsToIuScalar() { return 1; }
+
+ /* general Undo/Redo command control */
+
+ /**
+ * Function ClearUndoORRedoList (virtual).
+ * this function must remove the aItemCount old commands from aList
+ * and delete commands, pickers and picked items if needed
+ * Because picked items must be deleted only if they are not in use, this
+ * is a virtual pure function that must be created for SCH_SCREEN and
+ * PCB_SCREEN
+ * @param aList = the UNDO_REDO_CONTAINER of commands
+ * @param aItemCount = number of old commands to delete. -1 to remove all
+ * old commands this will empty the list of commands.
+ * Commands are deleted from the older to the last.
+ */
+ virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ) = 0;
+
+ /**
+ * Function ClearUndoRedoList
+ * clear undo and redo list, using ClearUndoORRedoList()
+ * picked items are deleted by ClearUndoORRedoList() according to their
+ * status
+ */
+ virtual void ClearUndoRedoList();
+
+ /**
+ * Function PushCommandToUndoList
+ * add a command to undo in undo list
+ * delete the very old commands when the max count of undo commands is
+ * reached
+ * ( using ClearUndoORRedoList)
+ */
+ virtual void PushCommandToUndoList( PICKED_ITEMS_LIST* aItem );
+
+ /**
+ * Function PushCommandToRedoList
+ * add a command to redo in redo list
+ * delete the very old commands when the max count of redo commands is
+ * reached
+ * ( using ClearUndoORRedoList)
+ */
+ virtual void PushCommandToRedoList( PICKED_ITEMS_LIST* aItem );
+
+ /** PopCommandFromUndoList
+ * return the last command to undo and remove it from list
+ * nothing is deleted.
+ */
+ virtual PICKED_ITEMS_LIST* PopCommandFromUndoList();
+
+ /** PopCommandFromRedoList
+ * return the last command to undo and remove it from list
+ * nothing is deleted.
+ */
+ virtual PICKED_ITEMS_LIST* PopCommandFromRedoList();
+
+ int GetUndoCommandCount() const
+ {
+ return m_UndoList.m_CommandsList.size();
+ }
+
+ int GetRedoCommandCount() const
+ {
+ return m_RedoList.m_CommandsList.size();
+ }
+
+ int GetMaxUndoItems() const { return m_UndoRedoCountMax; }
+
+ void SetMaxUndoItems( int aMax )
+ {
+ if( aMax >= 0 && aMax < ABS_MAX_UNDO_ITEMS )
+ m_UndoRedoCountMax = aMax;
+ else
+ {
+ wxFAIL_MSG( "Maximum undo items not within limits" );
+ m_UndoRedoCountMax = DEFAULT_MAX_UNDO_ITEMS;
+ }
+ }
+
+ void SetModify() { m_FlagModified = true; }
+ void ClrModify() { m_FlagModified = false; }
+ void SetSave() { m_FlagSave = true; }
+ void ClrSave() { m_FlagSave = false; }
+ bool IsModify() const { return m_FlagModified; }
+ bool IsSave() const { return m_FlagSave; }
+
+
+ //----<zoom stuff>---------------------------------------------------------
+
+ /**
+ * Function GetZoom
+ * returns the current "zoom factor", which is a measure of
+ * "internal units per device unit", or "world units per device unit".
+ * A device unit is typically a pixel.
+ */
+ double GetZoom() const { return m_Zoom; }
+
+ /**
+ * Function SetZoom
+ * adjusts the current zoom factor.
+ *
+ * @param iu_per_du is the number of internal units (world units) per
+ * device units (pixels typically).
+ */
+ bool SetZoom( double iu_per_du );
+
+ bool SetNextZoom();
+ bool SetPreviousZoom();
+ bool SetFirstZoom();
+ bool SetLastZoom();
+
+ /**
+ * Function GetMaxAllowedZoom
+ * returns the maximum allowed zoom factor, which was established as the last entry
+ * in m_ZoomList.
+ */
+ double GetMaxAllowedZoom() const { return m_ZoomList.size() ? *m_ZoomList.rbegin() : 1.0; }
+
+ /**
+ * Function GetMinAllowedZoom
+ * returns the minimum allowed zoom factor, which was established as the first entry
+ * in m_ZoomList.
+ */
+ double GetMinAllowedZoom() const { return m_ZoomList.size() ? *m_ZoomList.begin() : 1.0; }
+
+ /**
+ * Function SetScalingFactor
+ * sets the scaling factor of "internal unit per device unit".
+ * If the output device is a screen, then "device units" are pixels. The
+ * "logical unit" is wx terminology, and corresponds to KiCad's "Internal Unit (IU)".
+ * <p>
+ * This scaling factor is "internal units per device unit". This function is
+ * the same thing currently as SetZoom(), but clamps the argument within a
+ * legal range.
+
+ * @param iu_per_du is the current scale used to draw items onto the device
+ * context wxDC.
+ */
+ void SetScalingFactor( double iu_per_du );
+
+ /**
+ * Function GetScalingFactor
+ * returns the inverse of the current scale used to draw items on screen.
+ * <p>
+ * This function somehow got designed to be the inverse of SetScalingFactor().
+ * <p>
+ * device coordinates = user coordinates * GetScalingFactor()
+ */
+ double GetScalingFactor() const;
+
+
+ //----<grid stuff>----------------------------------------------------------
+
+ /**
+ * Return the command ID of the currently selected grid.
+ *
+ * @return int - Currently selected grid command ID.
+ */
+ int GetGridCmdId() const { return m_Grid.m_CmdId; }
+
+ /**
+ * Return the grid size of the currently selected grid.
+ *
+ * @return wxRealPoint - The currently selected grid size.
+ */
+ const wxRealPoint& GetGridSize() const { return m_Grid.m_Size; }
+
+ /**
+ * Return the grid object of the currently selected grid.
+ *
+ * @return GRID_TYPE - The currently selected grid.
+ */
+ const GRID_TYPE& GetGrid() const { return m_Grid; }
+
+ /**
+ * set the current grid size m_Grid.
+ * The size must be existing in grid list (in m_grids)
+ * If not, the near existing grid size is used
+ * @param size = the size of the new grid
+ * @return the grid id offset (id from ID_POPUP_GRID_LEVEL_1000 )
+ * of the currently selected grid.
+ */
+ int SetGrid( const wxRealPoint& size );
+
+ /**
+ * Function SetGrid
+ * sets the grid size from command ID (not an index in grid list, but a wxID).
+ * @param aCommandId = the wxWidgets command ID
+ * @return the grid id offset (id from ID_POPUP_GRID_LEVEL_1000 )
+ * of the currently selected grid.
+ */
+ int SetGrid( int aCommandId );
+
+ void SetGridList( GRIDS& sizelist );
+ void AddGrid( const GRID_TYPE& grid );
+ void AddGrid( const wxRealPoint& size, int id );
+ void AddGrid( const wxRealPoint& size, EDA_UNITS_T aUnit, int id );
+
+ /**
+ * Function GridExists
+ * tests for grid command ID (not an index in grid list, but a wxID) exists in grid list.
+ * @param aCommandId = the wxWidgets command ID
+ * @return true if the grid exists in grid list.
+ */
+ bool GridExists( int aCommandId );
+
+ /**
+ * Function GetGridCount().
+ * Return the size of the grid list.
+ *
+ * @returns - The size of the grid list.
+ */
+ size_t GetGridCount() const { return m_grids.size(); }
+
+ /**
+ * Function GetGrid()
+ * Returns the grid object at \a aIndex.
+ *
+ * @param aIndex - The grid list index.
+ * @return - The grid object at \a aIndex or the current grid if the grid list is empty.
+ */
+ GRID_TYPE& GetGrid( size_t aIndex );
+
+ /**
+ * Function GetGrids().
+ * Returns the current list of grids.
+ */
+ const GRIDS& GetGrids() const
+ {
+ return m_grids;
+ }
+
+ /**
+ * Function BuildGridsChoiceList().
+ * Build the human readable list of grid list, for menus or combo boxes
+ * the list shows the grid size both in mils or mm.
+ * @param aGridsList = a wxArrayString to populate
+ * @param aMmFirst = true to have mm first and mils after
+ * false to have mils first and mm after
+ * @return the index of the curr grid in list, if found or -1
+ */
+ int BuildGridsChoiceList( wxArrayString& aGridsList, bool aMmFirst) const;
+
+
+ /**
+ * Function GetClass
+ * returns the class name.
+ * @return wxString
+ */
+ virtual wxString GetClass() const
+ {
+ return wxT( "BASE_SCREEN" );
+ }
+
+ inline bool IsBlockActive() const { return !m_BlockLocate.IsIdle(); }
+
+ void ClearBlockCommand() { m_BlockLocate.Clear(); }
+
+#if defined(DEBUG)
+ void Show( int nestLevel, std::ostream& os ) const; // overload
+#endif
+};
+
+#endif // CLASS_BASE_SCREEN_H_
diff --git a/include/class_bitmap_base.h b/include/class_bitmap_base.h
new file mode 100644
index 0000000..53c5b83
--- /dev/null
+++ b/include/class_bitmap_base.h
@@ -0,0 +1,216 @@
+/**
+ * @file class_bitmap_base.h
+ *
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 jean-pierre.charras jp.charras at wanadoo.fr
+ * Copyright (C) 2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _BITMAP_BASE_H_
+#define _BITMAP_BASE_H_
+
+
+class PLOTTER;
+
+/**
+ * This class handle bitmap images in KiCad.
+ * It is not intended to be used alone, but inside an other class,
+ * so all methods are protected ( or private )
+ * It is used in SCH_BITMAP class and WS_DRAW_ITEM_BITMAP (and other in future)
+ *
+ * Remember not all plotters are able to plot a bitmap
+ * Mainly GERBER plotters cannot.
+ */
+class BITMAP_BASE
+{
+public:
+ double m_Scale; // The scaling factor of the bitmap
+ // With m_pixelScaleFactor, controls the actual draw size
+private:
+ wxImage* m_image; // the raw image data (png format)
+ wxBitmap* m_bitmap; // the bitmap used to draw/plot image
+ double m_pixelScaleFactor; // The scaling factor of the bitmap
+ // to convert the bitmap size (in pixels)
+ // to internal KiCad units
+ // Usually does not change
+ int m_ppi; // the bitmap definition. the default is 300PPI
+
+
+public: BITMAP_BASE( const wxPoint& pos = wxPoint( 0, 0 ) );
+
+ BITMAP_BASE( const BITMAP_BASE& aSchBitmap );
+
+ ~BITMAP_BASE()
+ {
+ delete m_bitmap;
+ delete m_image;
+ }
+
+
+ /*
+ * Accessors:
+ */
+ double GetPixelScaleFactor() { return m_pixelScaleFactor; }
+ void SetPixelScaleFactor( double aSF ) { m_pixelScaleFactor = aSF; }
+ wxImage* GetImageData() { return m_image; }
+
+ /*
+ * Function RebuildBitmap
+ * Rebuild the internal bitmap used to draw/plot image
+ * must be called after a m_image change
+ */
+ void RebuildBitmap() { *m_bitmap = wxBitmap( *m_image ); }
+
+ /**
+ * Function ImportData
+ * Copy aItem image to me and update m_bitmap
+ */
+ void ImportData( BITMAP_BASE* aItem );
+
+ /**
+ * Function GetScalingFactor
+ * @return the scaling factor from pixel size to actual draw size
+ * this scaling factor depend on m_pixelScaleFactor and m_Scale
+ * m_pixelScaleFactor gives the scaling factor between a pixel size and
+ * the internal schematic units
+ * m_Scale is an user dependant value, and gives the "zoom" value
+ * m_Scale = 1.0 = original size of bitmap.
+ * m_Scale < 1.0 = the bitmap is drawn smaller than its original size.
+ * m_Scale > 1.0 = the bitmap is drawn bigger than its original size.
+ */
+ double GetScalingFactor() const
+ {
+ return m_pixelScaleFactor * m_Scale;
+ }
+
+
+ /**
+ * Function GetSize
+ * @return the actual size (in user units, not in pixels) of the image
+ */
+ wxSize GetSize() const;
+
+ /**
+ * Function GetSizePixels
+ * @return the size in pixels of the image
+ */
+ wxSize GetSizePixels() const
+ {
+ if( m_image )
+ return wxSize( m_image->GetWidth(), m_image->GetHeight() );
+ else
+ return wxSize(0,0);
+ }
+
+ /**
+ * @return the bitmap definition in ppi
+ * the default is 300 ppi
+ */
+ int GetPPI() const
+ {
+ return m_ppi;
+ }
+
+ /**
+ * Function GetBoundingBox
+ * returns the orthogonal, bounding box of this object for display
+ * purposes. This box should be an enclosing perimeter for visible
+ * components of this object, and the units should be in the pcb or
+ * schematic coordinate system. It is OK to overestimate the size
+ * by a few counts.
+ */
+ const EDA_RECT GetBoundingBox() const;
+
+ void DrawBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPos );
+
+ /**
+ * Function ReadImageFile
+ * Reads and stores in memory an image file.
+ * Init the bitmap format used to draw this item.
+ * supported images formats are format supported by wxImage
+ * if all handlers are loaded
+ * by default, .png, .jpeg are alway loaded
+ * @param aFullFilename The full filename of the image file to read.
+ * @return bool - true if success reading else false.
+ */
+ bool ReadImageFile( const wxString& aFullFilename );
+
+ /**
+ * writes the bitmap data to aFile
+ * The format is png, in Hexadecimal form:
+ * If the hexadecimal data is converted to binary it gives exactly a .png image data
+ * @param aFile The FILE to write to.
+ * @return bool - true if success writing else false.
+ */
+ bool SaveData( FILE* aFile ) const;
+
+ /**
+ * writes the bitmap data to an array string
+ * The format is png, in Hexadecimal form:
+ * If the hexadecimal data is converted to binary it gives exactly a .png image data
+ * @param aPngStrings The wxArrayString to write to.
+ */
+ void SaveData( wxArrayString& aPngStrings ) const;
+
+ /**
+ * Load an image data saved by SaveData (png, in Hexadecimal form)
+ * @param aLine - the LINE_READER used to read the data file.
+ * @param aErrorMsg - Description of the error if an error occurs while loading the
+ * png bimap data.
+ * @return true if the bitmap loaded successfully.
+ */
+ bool LoadData( LINE_READER& aLine, wxString& aErrorMsg );
+
+
+ /**
+ * Function Mirror
+ * Mirror image vertically (i.e. relative to its horizontal X axis )
+ * or horizontally (i.e relative to its vertical Y axis)
+ * @param aVertically = false to mirror horizontally
+ * or true to mirror vertically
+ */
+ void Mirror( bool aVertically );
+
+ /**
+ * Function Rotate
+ * Rotate image CW or CCW.
+ * @param aRotateCCW = true to rotate CCW
+ */
+ void Rotate( bool aRotateCCW );
+
+ /**
+ * Function PlotImage
+ * Plot bitmap on plotter.
+ * If the plotter does not support bitmaps, plot a
+ * @param aPlotter = the plotter to use
+ * @param aPos = the position od the center of the bitmap
+ * @param aDefaultColor = the color used to plot the rectangle when bitmap is not supported
+ * @param aDefaultPensize = the pen size used to plot the rectangle when bitmap is not supported
+ */
+ void PlotImage( PLOTTER* aPlotter, const wxPoint& aPos,
+ EDA_COLOR_T aDefaultColor, int aDefaultPensize );
+};
+
+
+#endif // _BITMAP_BASE_H_
diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h
new file mode 100644
index 0000000..a7b200e
--- /dev/null
+++ b/include/class_board_design_settings.h
@@ -0,0 +1,568 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef BOARD_DESIGN_SETTINGS_H_
+#define BOARD_DESIGN_SETTINGS_H_
+
+#include <pcbstruct.h> // NB_COLORS
+#include <class_pad.h>
+#include <class_track.h>
+#include <class_netclass.h>
+#include <config_params.h>
+
+// Some default values for the board editor and the fp editor (given in mm)
+#define DEFAULT_TEXT_MODULE_SIZE 1.0
+#define DEFAULT_GR_MODULE_THICKNESS 0.15 // given in mm
+
+// Board thickness, mainly for 3D view:
+#define DEFAULT_BOARD_THICKNESS_MM 1.6
+
+// Default values for some board items (given in mm)
+#define DEFAULT_TEXT_PCB_SIZE 1.5
+#define DEFAULT_TEXT_PCB_THICKNESS 0.3
+#define DEFAULT_PCB_EDGE_THICKNESS 0.15
+#define DEFAULT_GRAPHIC_THICKNESS 0.2
+
+#define DEFAULT_SOLDERMASK_CLEARANCE 0.2
+#define DEFAULT_SOLDERMASK_MIN_WIDTH Millimeter2iu( 0.0 )
+
+#define DEFAULT_CUSTOMTRACKWIDTH 0.2
+#define DEFAULT_TRACKMINWIDTH 0.2 // track width min value
+#define DEFAULT_VIASMINSIZE 0.4 // vias (not micro vias) min diameter
+#define DEFAULT_VIASMINDRILL 0.3 // vias (not micro vias) min drill diameter
+#define DEFAULT_MICROVIASMINSIZE 0.2 // micro vias (not vias) min diameter
+#define DEFAULT_MICROVIASMINDRILL 0.1 // micro vias (not vias) min drill diameter
+
+/**
+ * Struct VIA_DIMENSION
+ * is a small helper container to handle a stock of specific vias each with
+ * unique diameter and drill sizes in the BOARD class.
+ */
+struct VIA_DIMENSION
+{
+ int m_Diameter; // <= 0 means use Netclass via diameter
+ int m_Drill; // <= 0 means use Netclass via drill
+
+ VIA_DIMENSION()
+ {
+ m_Diameter = 0;
+ m_Drill = 0;
+ }
+
+ VIA_DIMENSION( int aDiameter, int aDrill )
+ {
+ m_Diameter = aDiameter;
+ m_Drill = aDrill;
+ }
+
+ bool operator==( const VIA_DIMENSION& aOther ) const
+ {
+ return ( m_Diameter == aOther.m_Diameter ) && ( m_Drill == aOther.m_Drill );
+ }
+
+ bool operator<( const VIA_DIMENSION& aOther ) const
+ {
+ if( m_Diameter != aOther.m_Diameter )
+ return m_Diameter < aOther.m_Diameter;
+
+ return m_Drill < aOther.m_Drill;
+ }
+};
+
+
+/**
+ * Class BOARD_DESIGN_SETTINGS
+ * contains design settings for a BOARD object.
+ */
+class BOARD_DESIGN_SETTINGS
+{
+public:
+ // The first value is the current netclass via size
+ /// Vias size and drill list
+ std::vector<VIA_DIMENSION> m_ViasDimensionsList;
+
+ // The first value is the current netclass track width
+ /// Track width list
+ std::vector<int> m_TrackWidthList;
+
+ /// List of current netclasses. There is always the default netclass.
+ NETCLASSES m_NetClasses;
+
+ bool m_MicroViasAllowed; ///< true to allow micro vias
+ bool m_BlindBuriedViaAllowed; ///< true to allow blind/buried vias
+ VIATYPE_T m_CurrentViaType; ///< via type (VIA_BLIND_BURIED, VIA_THROUGH VIA_MICROVIA)
+
+ /// if true, when creating a new track starting on an existing track, use this track width
+ bool m_UseConnectedTrackWidth;
+ int m_DrawSegmentWidth; ///< current graphic line width (not EDGE layer)
+ int m_EdgeSegmentWidth; ///< current graphic line width (EDGE layer only)
+ int m_PcbTextWidth; ///< current Pcb (not module) Text width
+ wxSize m_PcbTextSize; ///< current Pcb (not module) Text size
+ int m_TrackMinWidth; ///< track min value for width ((min copper size value
+ int m_ViasMinSize; ///< vias (not micro vias) min diameter
+ int m_ViasMinDrill; ///< vias (not micro vias) min drill diameter
+ int m_MicroViasMinSize; ///< micro vias (not vias) min diameter
+ int m_MicroViasMinDrill; ///< micro vias (not vias) min drill diameter
+
+ // Global mask margins:
+ int m_SolderMaskMargin; ///< Solder mask margin
+ int m_SolderMaskMinWidth; ///< Solder mask min width
+ // 2 areas near than m_SolderMaskMinWidth
+ // are merged
+ int m_SolderPasteMargin; ///< Solder paste margin absolute value
+ double m_SolderPasteMarginRatio; ///< Solder pask margin ratio value of pad size
+ ///< The final margin is the sum of these 2 values
+
+ // Variables used in footprint edition (default value in item/footprint creation)
+ int m_ModuleSegmentWidth; ///< Default width for all graphic lines
+ // Note: the default layer is the active layer
+ wxSize m_ModuleTextSize; ///< Default footprint texts size
+ int m_ModuleTextWidth; ///< Default footprint texts thickness
+
+ wxString m_RefDefaultText; ///< Default ref text on fp creation
+ // if empty, use footprint name as default
+ bool m_RefDefaultVisibility; ///< Default ref text visibility on fp creation
+ int m_RefDefaultlayer; ///< Default ref text layer on fp creation
+ // should be a LAYER_ID, but use an int
+ // to save this param in config
+
+ wxString m_ValueDefaultText; ///< Default value text on fp creation
+ // if empty, use footprint name as default
+ bool m_ValueDefaultVisibility; ///< Default value text visibility on fp creation
+ int m_ValueDefaultlayer; ///< Default value text layer on fp creation
+ // should be a LAYER_ID, but use an int
+ // to save this param in config
+
+ // Miscellaneous
+ wxPoint m_AuxOrigin; ///< origin for plot exports
+ wxPoint m_GridOrigin; ///< origin for grid offsets
+
+ D_PAD m_Pad_Master; ///< A dummy pad to store all default parameters
+ // when importing values or create a new pad
+
+private:
+ /// Index for #m_ViasDimensionsList to select the current via size.
+ /// 0 is the index selection of the default value Netclass
+ unsigned m_viaSizeIndex;
+
+ // Index for m_TrackWidthList to select the value.
+ /// 0 is the index selection of the default value Netclass
+ unsigned m_trackWidthIndex;
+
+ ///> Use custom values for track/via sizes (not specified in net class nor in the size lists).
+ bool m_useCustomTrackVia;
+
+ ///> Custom track width (used after UseCustomTrackViaSize( true ) was called).
+ int m_customTrackWidth;
+
+ ///> Custom via size (used after UseCustomTrackViaSize( true ) was called).
+ VIA_DIMENSION m_customViaSize;
+
+ int m_copperLayerCount; ///< Number of copper layers for this design
+
+ LSET m_enabledLayers; ///< Bit-mask for layer enabling
+ LSET m_visibleLayers; ///< Bit-mask for layer visibility
+
+ int m_visibleElements; ///< Bit-mask for element category visibility
+ int m_boardThickness; ///< Board thickness for 3D viewer
+
+ /// Current net class name used to display netclass info.
+ /// This is also the last used netclass after starting a track.
+ wxString m_currentNetClassName;
+
+public:
+ BOARD_DESIGN_SETTINGS();
+
+ /**
+ * Function GetDefault
+ * @return the default netclass.
+ */
+ inline NETCLASSPTR GetDefault() const
+ {
+ return m_NetClasses.GetDefault();
+ }
+
+ /**
+ * Function GetCurrentNetClassName
+ * @return the current net class name.
+ */
+ inline const wxString& GetCurrentNetClassName() const
+ {
+ return m_currentNetClassName;
+ }
+
+ /**
+ * Function UseNetClassTrack
+ * returns true if netclass values should be used to obtain appropriate track width.
+ */
+ inline bool UseNetClassTrack() const
+ {
+ return ( m_trackWidthIndex == 0 && !m_useCustomTrackVia );
+ }
+
+ /**
+ * Function UseNetClassVia
+ * returns true if netclass values should be used to obtain appropriate via size.
+ */
+ inline bool UseNetClassVia() const
+ {
+ return ( m_viaSizeIndex == 0 && !m_useCustomTrackVia );
+ }
+
+ /**
+ * Function SetCurrentNetClass
+ * Must be called after a netclass selection (or after a netclass parameter change
+ * Initialize vias and tracks values displayed in comb boxes of the auxiliary toolbar
+ * and some others parameters (netclass name ....)
+ * @param aNetClassName = the new netclass name
+ * @return true if lists of tracks and vias sizes are modified
+ */
+ bool SetCurrentNetClass( const wxString& aNetClassName );
+
+ /**
+ * Function GetBiggestClearanceValue
+ * @return the biggest clearance value found in NetClasses list
+ */
+ int GetBiggestClearanceValue();
+
+ /**
+ * Function GetSmallestClearanceValue
+ * @return the smallest clearance value found in NetClasses list
+ */
+ int GetSmallestClearanceValue();
+
+ /**
+ * Function GetCurrentMicroViaSize
+ * @return the current micro via size,
+ * that is the current netclass value
+ */
+ int GetCurrentMicroViaSize();
+
+ /**
+ * Function GetCurrentMicroViaDrill
+ * @return the current micro via drill,
+ * that is the current netclass value
+ */
+ int GetCurrentMicroViaDrill();
+
+ /**
+ * Function GetTrackWidthIndex
+ * @return the current track width list index.
+ */
+ inline unsigned GetTrackWidthIndex() const { return m_trackWidthIndex; }
+
+ /**
+ * Function SetTrackWidthIndex
+ * sets the current track width list index to \a aIndex.
+ *
+ * @param aIndex is the track width list index.
+ */
+ void SetTrackWidthIndex( unsigned aIndex );
+
+ /**
+ * Function GetCurrentTrackWidth
+ * @return the current track width, according to the selected options
+ * ( using the default netclass value or a preset/custom value )
+ * the default netclass is always in m_TrackWidthList[0]
+ */
+ inline int GetCurrentTrackWidth() const
+ {
+ return m_useCustomTrackVia ? m_customTrackWidth : m_TrackWidthList[m_trackWidthIndex];
+ }
+
+ /**
+ * Function SetCustomTrackWidth
+ * Sets custom width for track (i.e. not available in netclasses or preset list). To have
+ * it returned with GetCurrentTrackWidth() you need to enable custom track & via sizes
+ * (UseCustomTrackViaSize()).
+ * @param aWidth is the new track width.
+ */
+ inline void SetCustomTrackWidth( int aWidth )
+ {
+ m_customTrackWidth = aWidth;
+ }
+
+ /**
+ * Function GetCustomTrackWidth
+ * @return Current custom width for a track.
+ */
+ inline int GetCustomTrackWidth() const
+ {
+ return m_customTrackWidth;
+ }
+
+ /**
+ * Function GetViaSizeIndex
+ * @return the current via size list index.
+ */
+ inline unsigned GetViaSizeIndex() const
+ {
+ return m_viaSizeIndex;
+ }
+
+ /**
+ * Function SetViaSizeIndex
+ * sets the current via size list index to \a aIndex.
+ *
+ * @param aIndex is the via size list index.
+ */
+ void SetViaSizeIndex( unsigned aIndex );
+
+ /**
+ * Function GetCurrentViaSize
+ * @return the current via size, according to the selected options
+ * ( using the default netclass value or a preset/custom value )
+ * the default netclass is always in m_TrackWidthList[0]
+ */
+ inline int GetCurrentViaSize() const
+ {
+ if( m_useCustomTrackVia )
+ return m_customViaSize.m_Diameter;
+ else
+ return m_ViasDimensionsList[m_viaSizeIndex].m_Diameter;
+ }
+
+ /**
+ * Function SetCustomViaSize
+ * Sets custom size for via diameter (i.e. not available in netclasses or preset list). To have
+ * it returned with GetCurrentViaSize() you need to enable custom track & via sizes
+ * (UseCustomTrackViaSize()).
+ * @param aSize is the new drill diameter.
+ */
+ inline void SetCustomViaSize( int aSize )
+ {
+ m_customViaSize.m_Diameter = aSize;
+ }
+
+ /**
+ * Function GetCustomViaSize
+ * @return Current custom size for the via diameter.
+ */
+ inline int GetCustomViaSize() const
+ {
+ return m_customViaSize.m_Diameter;
+ }
+
+ /**
+ * Function GetCurrentViaDrill
+ * @return the current via size, according to the selected options
+ * ( using the default netclass value or a preset/custom value )
+ * the default netclass is always in m_TrackWidthList[0]
+ */
+ int GetCurrentViaDrill() const;
+
+ /**
+ * Function SetCustomViaDrill
+ * Sets custom size for via drill (i.e. not available in netclasses or preset list). To have
+ * it returned with GetCurrentViaDrill() you need to enable custom track & via sizes
+ * (UseCustomTrackViaSize()).
+ * @param aDrill is the new drill size.
+ */
+ inline void SetCustomViaDrill( int aDrill )
+ {
+ m_customViaSize.m_Drill = aDrill;
+ }
+
+ /**
+ * Function GetCustomViaDrill
+ * @return Current custom size for the via drill.
+ */
+ inline int GetCustomViaDrill() const
+ {
+ return m_customViaSize.m_Drill;
+ }
+
+ /**
+ * Function UseCustomTrackViaSize
+ * Enables/disables custom track/via size settings. If enabled, values set with
+ * SetCustomTrackWidth()/SetCustomViaSize()/SetCustomViaDrill() are used for newly created
+ * tracks and vias.
+ * @param aEnabled decides if custom settings should be used for new tracks/vias.
+ */
+ inline void UseCustomTrackViaSize( bool aEnabled )
+ {
+ m_useCustomTrackVia = aEnabled;
+ }
+
+ /**
+ * Function UseCustomTrackViaSize
+ * @return True if custom sizes of tracks & vias are enabled, false otherwise.
+ */
+ inline bool UseCustomTrackViaSize() const
+ {
+ return m_useCustomTrackVia;
+ }
+
+ /**
+ * Function GetVisibleLayers
+ * returns a bit-mask of all the layers that are visible
+ * @return int - the visible layers in bit-mapped form.
+ */
+ inline LSET GetVisibleLayers() const
+ {
+ return m_visibleLayers;
+ }
+
+ /**
+ * Function SetVisibleAlls
+ * Set the bit-mask of all visible elements categories,
+ * including enabled layers
+ */
+ void SetVisibleAlls();
+
+ /**
+ * Function SetVisibleLayers
+ * changes the bit-mask of visible layers
+ * @param aMask = The new bit-mask of visible layers
+ */
+ inline void SetVisibleLayers( LSET aMask )
+ {
+ m_visibleLayers = aMask & m_enabledLayers;
+ }
+
+ /**
+ * Function IsLayerVisible
+ * tests whether a given layer is visible
+ * @param aLayerId = The layer to be tested
+ * @return bool - true if the layer is visible.
+ */
+ inline bool IsLayerVisible( LAYER_ID aLayerId ) const
+ {
+ // If a layer is disabled, it is automatically invisible
+ return (m_visibleLayers & m_enabledLayers)[aLayerId];
+ }
+
+ /**
+ * Function SetLayerVisibility
+ * changes the visibility of a given layer
+ * @param aLayerId = The layer to be changed
+ * @param aNewState = The new visibility state of the layer
+ */
+ void SetLayerVisibility( LAYER_ID aLayerId, bool aNewState );
+
+ /**
+ * Function GetVisibleElements
+ * returns a bit-mask of all the element categories that are visible
+ * @return int - the visible element categories in bit-mapped form.
+ */
+ inline int GetVisibleElements() const
+ {
+ return m_visibleElements;
+ }
+
+ /**
+ * Function SetVisibleElements
+ * changes the bit-mask of visible element categories
+ * @param aMask = The new bit-mask of visible element categories
+ */
+ inline void SetVisibleElements( int aMask )
+ {
+ m_visibleElements = aMask;
+ }
+
+ /**
+ * Function IsElementVisible
+ * tests whether a given element category is visible. Keep this as an
+ * inline function.
+ * @param aElementCategory is from the enum by the same name
+ * @return bool - true if the element is visible.
+ * @see enum PCB_VISIBLE
+ */
+ inline bool IsElementVisible( int aElementCategory ) const
+ {
+ assert( aElementCategory >= 0 && aElementCategory < END_PCB_VISIBLE_LIST );
+
+ return ( m_visibleElements & ( 1 << aElementCategory ) );
+ }
+
+ /**
+ * Function SetElementVisibility
+ * changes the visibility of an element category
+ * @param aElementCategory is from the enum by the same name
+ * @param aNewState = The new visibility state of the element category
+ * @see enum PCB_VISIBLE
+ */
+ void SetElementVisibility( int aElementCategory, bool aNewState );
+
+ /**
+ * Function GetEnabledLayers
+ * returns a bit-mask of all the layers that are enabled
+ * @return int - the enabled layers in bit-mapped form.
+ */
+ inline LSET GetEnabledLayers() const
+ {
+ return m_enabledLayers;
+ }
+
+ /**
+ * Function SetEnabledLayers
+ * changes the bit-mask of enabled layers
+ * @param aMask = The new bit-mask of enabled layers
+ */
+ void SetEnabledLayers( LSET aMask );
+
+ /**
+ * Function IsLayerEnabled
+ * tests whether a given layer is enabled
+ * @param aLayerId = The layer to be tested
+ * @return bool - true if the layer is enabled
+ */
+ inline bool IsLayerEnabled( LAYER_ID aLayerId ) const
+ {
+ return m_enabledLayers[aLayerId];
+ }
+
+ /**
+ * Function GetCopperLayerCount
+ * @return int - the number of neabled copper layers
+ */
+ inline int GetCopperLayerCount() const
+ {
+ return m_copperLayerCount;
+ }
+
+ /**
+ * Function SetCopperLayerCount
+ * do what its name says...
+ * @param aNewLayerCount = The new number of enabled copper layers
+ */
+ void SetCopperLayerCount( int aNewLayerCount );
+
+ /**
+ * Function AppendConfigs
+ * appends to @a aResult the configuration setting accessors which will later
+ * allow reading or writing of configuration file information directly into
+ * this object.
+ */
+ void AppendConfigs( PARAM_CFG_ARRAY* aResult );
+
+ inline int GetBoardThickness() const { return m_boardThickness; }
+ inline void SetBoardThickness( int aThickness ) { m_boardThickness = aThickness; }
+
+private:
+ void formatNetClass( NETCLASS* aNetClass, OUTPUTFORMATTER* aFormatter, int aNestLevel,
+ int aControlBits ) const throw( IO_ERROR );
+};
+
+#endif // BOARD_DESIGN_SETTINGS_H_
diff --git a/include/class_board_item.h b/include/class_board_item.h
new file mode 100644
index 0000000..7b202ff
--- /dev/null
+++ b/include/class_board_item.h
@@ -0,0 +1,335 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_board_item.h
+ * @brief Classes BOARD_ITEM and BOARD_CONNECTED_ITEM.
+ */
+
+#ifndef BOARD_ITEM_STRUCT_H
+#define BOARD_ITEM_STRUCT_H
+
+
+#include <base_struct.h>
+#include <gr_basic.h>
+#include <layers_id_colors_and_visibility.h>
+
+/// Abbrevation for fomatting internal units to a string.
+#define FMT_IU BOARD_ITEM::FormatInternalUnits
+#define FMT_ANGLE BOARD_ITEM::FormatAngle
+
+class BOARD;
+class EDA_DRAW_PANEL;
+
+
+/**
+ * Enum STROKE_T
+ * is the set of shapes for segments (graphic segments and tracks) which are often
+ * in the .m_Shape member
+ */
+enum STROKE_T
+{
+ S_SEGMENT = 0, ///< usual segment : line with rounded ends
+ S_RECT, ///< segment with non rounded ends
+ S_ARC, ///< Arcs (with rounded ends)
+ S_CIRCLE, ///< ring
+ S_POLYGON, ///< polygon (not yet used for tracks, but could be in microwave apps)
+ S_CURVE, ///< Bezier Curve
+ S_LAST ///< last value for this list
+};
+
+
+/**
+ * Class BOARD_ITEM
+ * is a base class for any item which can be embedded within the BOARD
+ * container class, and therefore instances of derived classes should only be
+ * found in Pcbnew or other programs that use class BOARD and its contents.
+ * The corresponding class in Eeschema is SCH_ITEM.
+ */
+class BOARD_ITEM : public EDA_ITEM
+{
+ // These are made private here so they may not be used.
+ // Instead everything derived from BOARD_ITEM is handled via DLIST<>'s
+ // use of DHEAD's member functions.
+ void SetNext( EDA_ITEM* aNext ) { Pnext = aNext; }
+ void SetBack( EDA_ITEM* aBack ) { Pback = aBack; }
+
+protected:
+ LAYER_ID m_Layer;
+
+ static int getTrailingInt( wxString aStr );
+ static int getNextNumberInSequence( std::set<int> aSeq, bool aFillSequenceGaps );
+
+public:
+
+ BOARD_ITEM( BOARD_ITEM* aParent, KICAD_T idtype ) :
+ EDA_ITEM( aParent, idtype ), m_Layer( F_Cu )
+ {
+ }
+
+ // Do not create a copy constructor. The one generated by the compiler is adequate.
+
+ virtual const wxPoint& GetPosition() const = 0;
+
+ /**
+ * Function GetCenter()
+ *
+ * This defaults to the same point as returned by GetPosition(), unless
+ * overridden
+ *
+ * @return centre point of the item
+ */
+ virtual const wxPoint GetCenter() const { return GetPosition(); }
+
+ virtual void SetPosition( const wxPoint& aPos ) = 0;
+
+ /**
+ * Function IsConnected()
+ * Returns information if the object is derived from BOARD_CONNECTED_ITEM.
+ * @return True if the object is of BOARD_CONNECTED_ITEM type, false otherwise.
+ */
+ virtual bool IsConnected() const
+ {
+ return false;
+ }
+
+ /**
+ * A value of wxPoint(0,0) which can be passed to the Draw() functions.
+ */
+ static wxPoint ZeroOffset;
+
+ BOARD_ITEM* Next() const { return static_cast<BOARD_ITEM*>( Pnext ); }
+ BOARD_ITEM* Back() const { return static_cast<BOARD_ITEM*>( Pback ); }
+ BOARD_ITEM* GetParent() const { return (BOARD_ITEM*) m_Parent; }
+
+ /**
+ * Function GetLayer
+ * returns the primary layer this item is on.
+ */
+ LAYER_ID GetLayer() const { return m_Layer; }
+
+ /**
+ * Function GetLayerSet
+ * returns a "layer mask", which is a bitmap of all layers on which the
+ * TRACK segment or VIA physically resides.
+ * @return int - a layer mask, see layers_id_colors_visibility.h.
+ */
+ virtual LSET GetLayerSet() const { return LSET( m_Layer ); }
+
+ /**
+ * Function SetLayer
+ * sets the layer this item is on.
+ * @param aLayer The layer number.
+ * is virtual because some items (in fact: class DIMENSION)
+ * have a slightly different initialization
+ */
+ virtual void SetLayer( LAYER_ID aLayer )
+ {
+ // trap any invalid layers, then go find the caller and fix it.
+ // wxASSERT( unsigned( aLayer ) < unsigned( NB_PCB_LAYERS ) );
+ m_Layer = aLayer;
+ }
+
+ /**
+ * Function Draw
+ * BOARD_ITEMs have their own color information.
+ */
+ virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+ GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset ) = 0;
+
+ /**
+ * Swap data between aItem and aImage.
+ * aItem and aImage should have the same type
+ * Used in undo redo command to swap values between an item and its copy
+ * Only values like layer, size .. which are modified by edition are swapped,
+ * not the pointers like
+ * Pnext and Pback because aItem is not changed in the linked list
+ * @param aImage = the item image which contains data to swap
+ */
+ void SwapData( BOARD_ITEM* aImage );
+
+ /**
+ * Function IsOnLayer
+ * tests to see if this object is on the given layer. Is virtual so
+ * objects like D_PAD, which reside on multiple layers can do their own
+ * form of testing.
+ * @param aLayer The layer to test for.
+ * @return bool - true if on given layer, else false.
+ */
+ virtual bool IsOnLayer( LAYER_ID aLayer ) const
+ {
+ return m_Layer == aLayer;
+ }
+
+ /**
+ * Function IsTrack
+ * tests to see if this object is a track or via (or microvia).
+ * form of testing.
+ * @return bool - true if a track or via, else false.
+ */
+ bool IsTrack() const
+ {
+ return ( Type() == PCB_TRACE_T ) || ( Type() == PCB_VIA_T );
+ }
+
+ /**
+ * Function IsLocked
+ * @return bool - true if the object is locked, else false
+ */
+ virtual bool IsLocked() const
+ {
+ return false; // only MODULEs can be locked at this time.
+ }
+
+ /**
+ * Function UnLink
+ * detaches this object from its owner. This base class implementation
+ * should work for all derived classes which are held in a DLIST<>.
+ */
+ virtual void UnLink();
+
+ /**
+ * Function DeleteStructure
+ * deletes this object after UnLink()ing it from its owner if it has one.
+ */
+ void DeleteStructure()
+ {
+ if( GetList() != NULL )
+ UnLink();
+
+ delete this;
+ }
+
+ /**
+ * Function ShowShape
+ * converts the enum STROKE_T integer value to a wxString.
+ */
+ static wxString ShowShape( STROKE_T aShape );
+
+ // Some geometric transforms, that must be rewritten for derived classes
+ /**
+ * Function Move
+ * move this object.
+ * @param aMoveVector - the move vector for this object.
+ */
+ virtual void Move( const wxPoint& aMoveVector )
+ {
+ wxMessageBox( wxT( "virtual BOARD_ITEM::Move used, should not occur" ), GetClass() );
+ }
+
+ /**
+ * Function Rotate
+ * Rotate this object.
+ * @param aRotCentre - the rotation point.
+ * @param aAngle - the rotation angle in 0.1 degree.
+ */
+ virtual void Rotate( const wxPoint& aRotCentre, double aAngle )
+ {
+ wxMessageBox( wxT( "virtual BOARD_ITEM::Rotate used, should not occur" ), GetClass() );
+ }
+
+ /**
+ * Function Flip
+ * Flip this object, i.e. change the board side for this object
+ * @param aCentre - the rotation point.
+ */
+ virtual void Flip( const wxPoint& aCentre )
+ {
+ wxMessageBox( wxT( "virtual BOARD_ITEM::Flip used, should not occur" ), GetClass() );
+ }
+
+ /**
+ * Function GetBoard
+ * returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
+ */
+ virtual BOARD* GetBoard() const;
+
+ /**
+ * Function GetLayerName
+ * returns the name of the PCB layer on which the item resides.
+ *
+ * @return wxString containing the layer name associated with this item.
+ */
+ wxString GetLayerName() const;
+
+ virtual bool HitTest( const wxPoint& aPosition ) const
+ {
+ return EDA_ITEM::HitTest( aPosition );
+ }
+
+ /**
+ * Function HitTest
+ * tests if the \a aRect intersects or contains this object (depending on \a aContained).
+ *
+ * @param aRect A reference to an EDA_RECT object containg the area to test.
+ * @param aContained Test if \a aRect contains this object completly.
+ * @param aAccuracy Increase the item bounding box by this amount.
+ * @return bool - True if \a aRect contains this object completly or if \a aRect intersects
+ * the object and \a aContained is False, otherwise false.
+ */
+ virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0) const
+ {
+ return false; // derived classes should override this function
+ }
+
+
+ /**
+ * Function FormatInternalUnits
+ * converts \a aValue from board internal units to a string appropriate for writing to file.
+ *
+ * @note Internal units for board items can be either deci-mils or nanometers depending
+ * on how KiCad is build.
+ * @param aValue A coordinate value to convert.
+ * @return A std::string object containing the converted value.
+ */
+ static std::string FormatInternalUnits( int aValue );
+
+ /**
+ * Function FormatAngle
+ * converts \a aAngle from board units to a string appropriate for writing to file.
+ *
+ * @note Internal angles for board items can be either degrees or tenths of degree
+ * on how KiCad is built.
+ * @param aAngle A angle value to convert.
+ * @return A std::string object containing the converted angle.
+ */
+ static std::string FormatAngle( double aAngle );
+
+ static std::string FormatInternalUnits( const wxPoint& aPoint );
+
+ static std::string FormatInternalUnits( const wxSize& aSize );
+
+ /// @copydoc VIEW_ITEM::ViewGetLayers()
+ virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
+
+ /*!
+ * Function IncrementItemReference
+ * Implement if the concept of "incrementing" makes sense for an
+ * item (e.g. modules and pads)
+ * @return if item reference was incremented
+ */
+ virtual bool IncrementItemReference() { return false; }
+};
+
+#endif /* BOARD_ITEM_STRUCT_H */
diff --git a/include/class_collector.h b/include/class_collector.h
new file mode 100644
index 0000000..d14abeb
--- /dev/null
+++ b/include/class_collector.h
@@ -0,0 +1,287 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2008 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2004-2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_collector.h
+ * @brief COLLECTOR class definition.
+ */
+
+#ifndef COLLECTOR_H
+#define COLLECTOR_H
+
+#include <vector>
+
+#include <fctsys.h>
+#include <base_struct.h> // SEARCH_RESULT
+#include <common.h> // GetNewTimeStamp()
+
+
+class EDA_ITEM;
+
+
+/**
+ * Class COLLECTOR
+ * is an abstract class that will find and hold all the objects according to
+ * an inspection done by the Inspect() function which must be implemented by
+ * any derived class. When Inspect() finds an object that it wants to collect,
+ * i.e. one that it "likes", then it only has to do an Append( testItem )
+ * on it to add it to its collection, but in all cases for the scan to continue,
+ * Inspect() must return SEARCH_CONTINUE.
+ *
+ * Later, after collection, the user can iterate through all the objects
+ * in the remembered collection using GetCount() and the [int] operator.
+ */
+class COLLECTOR : public INSPECTOR
+{
+protected:
+ /// Which object types to scan
+ const KICAD_T* m_ScanTypes;
+
+ /// A place to hold collected objects without taking ownership of their memory.
+ std::vector<EDA_ITEM*> m_List;
+
+ /// A point to test against, and that was used to make the collection.
+ wxPoint m_RefPos;
+
+ /// A bounding box to test against, and that was used to make the collection.
+ EDA_RECT m_RefBox;
+
+ /// The time at which the collection was made.
+ time_t m_TimeAtCollection;
+
+public:
+ COLLECTOR()
+ {
+ m_ScanTypes = 0;
+ m_TimeAtCollection = 0;
+ }
+
+ virtual ~COLLECTOR() {}
+
+ /**
+ * Function IsValidIndex
+ * tests if \a aIndex is with the limits of the list of collected items.
+ *
+ * @param aIndex The index to test.
+ * @return True if \a aIndex is with the limits of the list of collected items,
+ * otherwise false.
+ */
+ bool IsValidIndex( int aIndex )
+ {
+ return ( (unsigned) aIndex < m_List.size() );
+ }
+
+ /**
+ * Function GetCount
+ * returns the number of objects in the list
+ */
+ int GetCount() const
+ {
+ return (int) m_List.size();
+ }
+
+ /**
+ * Function Empty
+ * sets the list to empty
+ */
+ void Empty()
+ {
+ m_List.clear();
+ }
+
+ /**
+ * Function Append
+ * adds an item to the end of the list.
+ * @param item An EDA_ITEM* to add.
+ */
+ void Append( EDA_ITEM* item )
+ {
+ m_List.push_back( item );
+ }
+
+ /**
+ * Function Remove
+ * removes the item at \a aIndex (first position is 0);
+ * @param aIndex The index into the list.
+ */
+ void Remove( int aIndex )
+ {
+ m_List.erase( m_List.begin() + aIndex );
+ }
+
+ /**
+ * Function Remove
+ * removes the item aItem (if exists in the collector).
+ * @param aItem the item to be removed.
+ */
+ void Remove( const EDA_ITEM* aItem )
+ {
+ for( size_t i = 0; i < m_List.size(); i++ )
+ {
+ if( m_List[i] == aItem )
+ {
+ m_List.erase( m_List.begin() + i);
+ return;
+ }
+ }
+ }
+
+ /**
+ * Function operator[int]
+ * is used for read only access and returns the object at \a aIndex.
+ * @param aIndex The index into the list.
+ * @return EDA_ITEM* - or something derived from it, or NULL.
+ */
+ EDA_ITEM* operator[]( int aIndex ) const
+ {
+ if( (unsigned)aIndex < (unsigned)GetCount() ) // (unsigned) excludes aIndex<0 also
+ return m_List[ aIndex ];
+
+ return NULL;
+ }
+
+ /**
+ * Function BasePtr
+ * returns the address of the first element in the array. Only call this
+ * if there is at least one element in the vector m_List, otherwise a
+ * C++ exception should get thrown.
+ */
+ EDA_ITEM* const* BasePtr() const
+ {
+ return &m_List[0];
+ }
+
+ /**
+ * Function HasItem
+ * tests if \a aItem has already been collected.
+ *
+ * @param aItem The EDA_ITEM* to be tested.
+ * @return True if \a aItem is already collected.
+ */
+ bool HasItem( const EDA_ITEM* aItem ) const
+ {
+ for( size_t i = 0; i < m_List.size(); i++ )
+ {
+ if( m_List[i] == aItem )
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Function SetScanTypes
+ * records the list of KICAD_T types to consider for collection by
+ * the Inspect() function.
+ * @param scanTypes An array of KICAD_T, terminated by EOT. No copy is
+ * is made of this array (so cannot come from caller's stack).
+ */
+ void SetScanTypes( const KICAD_T* scanTypes )
+ {
+ m_ScanTypes = scanTypes;
+ }
+
+ void SetTimeNow()
+ {
+ m_TimeAtCollection = GetNewTimeStamp();
+ }
+
+ time_t GetTime()
+ {
+ return m_TimeAtCollection;
+ }
+
+ void SetRefPos( const wxPoint& aRefPos ) { m_RefPos = aRefPos; }
+ const wxPoint& GetRefPos() const { return m_RefPos; }
+
+ void SetBoundingBox( const EDA_RECT& aRefBox ) { m_RefBox = aRefBox; }
+ const EDA_RECT& GetBoundingBox() const { return m_RefBox; }
+
+ /**
+ * Function IsSimilarPointAndTime
+ * returns true if the given reference point is "similar" (defined here)
+ * to the internal reference point and the current time is within a few
+ * seconds of the internal m_TimeAtCollection.
+ *
+ * @param aRefPos A wxPoint to compare to.
+ * @return bool - true if the point and time are similar, else false.
+ */
+ bool IsSimilarPointAndTime( const wxPoint& aRefPos )
+ {
+ const int distMax = 2; // adjust these here
+ const time_t timeMax = 3; // seconds
+
+ int dx = abs( aRefPos.x - m_RefPos.x );
+ int dy = abs( aRefPos.y - m_RefPos.y );
+
+ if( dx <= distMax && dy <= distMax &&
+ (int)GetNewTimeStamp() - m_TimeAtCollection <= timeMax )
+ return true;
+ else
+ return false;
+ }
+ /**
+ * Function CountType
+ * counts the number of items matching aType
+ * @param aType type we are interested in
+ * @return number of occurences
+ */
+ int CountType( KICAD_T aType )
+ {
+ int cnt = 0;
+ for( size_t i = 0; i < m_List.size(); i++ )
+ {
+ if( m_List[i]->Type() == aType )
+ cnt++;
+ }
+ return cnt;
+ }
+
+ /**
+ * Function Collect
+ * scans an EDA_ITEM using this class's Inspector method, which does
+ * the collection.
+ * @param container An EDA_ITEM to scan, including those items it contains.
+ * @param aRefPos A wxPoint to use in hit-testing.
+ *
+ * example implementation, in derived class:
+ *
+ void Collect( EDA_ITEM* container, const wxPoint& aRefPos )
+ {
+ example implementation:
+
+ SetRefPos( aRefPos ); // remember where the snapshot was taken from
+
+ Empty(); // empty the collection
+
+ // visit the board with the INSPECTOR (me).
+ container->Visit( this, // INSPECTOR* inspector
+ NULL, // const void* testData,
+ m_ScanTypes);
+ SetTimeNow(); // when it was taken
+ }
+ */
+};
+
+#endif // COLLECTOR_H
diff --git a/include/class_colors_design_settings.h b/include/class_colors_design_settings.h
new file mode 100644
index 0000000..0cbc76b
--- /dev/null
+++ b/include/class_colors_design_settings.h
@@ -0,0 +1,89 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_colors_design_settings.h
+ * @brief Handle colors used to draw all items or layers.
+ */
+
+#ifndef _COLORS_DESIGN_SETTING_H
+#define _COLORS_DESIGN_SETTING_H
+#include <layers_id_colors_and_visibility.h>
+
+
+/**
+ * Class COLORS_DESIGN_SETTINGS
+ * is a list of color settings for designs in Eeschema, Pcbnew and GerbView
+ */
+class COLORS_DESIGN_SETTINGS
+{
+public:
+ // Color options for screen display of the Printed Board and schematic:
+
+ // Common to Eeschema, Pcbnew, GerbView
+ EDA_COLOR_T m_LayersColors[LAYER_ID_COUNT]; ///< Layer colors (tracks and graphic items)
+
+ // Common to Eeschema, Pcbnew
+ EDA_COLOR_T m_ItemsColors[32]; ///< All others items but layers
+
+public:
+ COLORS_DESIGN_SETTINGS();
+
+ /**
+ * Function GetLayerColor
+ * @return the color for aLayer which is one of the layer indices given
+ * in pcbstruct.h or in schematic
+ */
+ EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const;
+
+ /**
+ * Function SetLayerColor
+ * sets the color for aLayer which is one of the layer indices given
+ * in pcbstruct.h or in schematic
+ */
+ void SetLayerColor( LAYER_NUM aLayer, EDA_COLOR_T aColor );
+
+ /**
+ * Function GetItemColor
+ * @return the color for an item which is one of the item indices given
+ * in pcbstruct.h, enum PCB_VISIBLE or in schematic
+ */
+ EDA_COLOR_T GetItemColor( int aItemIdx ) const;
+
+ /**
+ * Function SetItemColor
+ * sets the color for an item which is one of the item indices given
+ * in pcbstruct.h, enum PCB_VISIBLE or in schematic
+ */
+ void SetItemColor( int aItemIdx, EDA_COLOR_T aColor );
+
+ /**
+ * Function SetAllColorsAs
+ * sets alls colors to aColor
+ * Usefull to create a monochrome color selection for printing purpose
+ */
+ void SetAllColorsAs( EDA_COLOR_T aColor);
+};
+
+#endif // _COLORS_DESIGN_SETTING_H
diff --git a/include/class_draw_panel_gal.h b/include/class_draw_panel_gal.h
new file mode 100644
index 0000000..cc52294
--- /dev/null
+++ b/include/class_draw_panel_gal.h
@@ -0,0 +1,219 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2014 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_draw_panel_gal.h:
+ * @brief EDA_DRAW_PANEL_GAL class definition.
+ */
+
+#ifndef PANELGAL_WXSTRUCT_H
+#define PANELGAL_WXSTRUCT_H
+
+#include <wx/window.h>
+#include <wx/timer.h>
+#include <layers_id_colors_and_visibility.h>
+#include <math/vector2d.h>
+#include <msgpanel.h>
+
+class BOARD;
+class TOOL_DISPATCHER;
+
+namespace KIGFX
+{
+class GAL;
+class VIEW;
+class WX_VIEW_CONTROLS;
+class VIEW_CONTROLS;
+class PAINTER;
+};
+
+
+class EDA_DRAW_PANEL_GAL : public wxScrolledCanvas
+{
+public:
+ enum GAL_TYPE {
+ GAL_TYPE_NONE, ///< Not used
+ GAL_TYPE_OPENGL, ///< OpenGL implementation
+ GAL_TYPE_CAIRO, ///< Cairo implementation
+ GAL_TYPE_LAST ///< Sentinel, do not use as a parameter
+ };
+
+ EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId, const wxPoint& aPosition,
+ const wxSize& aSize, GAL_TYPE aGalType = GAL_TYPE_OPENGL );
+ ~EDA_DRAW_PANEL_GAL();
+
+ virtual void SetFocus();
+
+ /**
+ * Function SwitchBackend
+ * Switches method of rendering graphics.
+ * @param aGalType is a type of rendering engine that you want to use.
+ */
+ bool SwitchBackend( GAL_TYPE aGalType );
+
+ /**
+ * Function GetBackend
+ * Returns the type of backend currently used by GAL canvas.
+ */
+ inline GAL_TYPE GetBackend() const
+ {
+ return m_backend;
+ }
+
+ /**
+ * Function GetGAL()
+ * Returns a pointer to the GAL instance used in the panel.
+ * @return The instance of GAL.
+ */
+ KIGFX::GAL* GetGAL() const
+ {
+ return m_gal;
+ }
+
+ /**
+ * Function GetView()
+ * Returns a pointer to the VIEW instance used in the panel.
+ * @return The instance of VIEW.
+ */
+ KIGFX::VIEW* GetView() const
+ {
+ return m_view;
+ }
+
+ /**
+ * Function GetViewControls()
+ * Returns a pointer to the VIEW_CONTROLS instance used in the panel.
+ * @return The instance of VIEW_CONTROLS.
+ */
+ KIGFX::VIEW_CONTROLS* GetViewControls() const
+ {
+ return (KIGFX::VIEW_CONTROLS*)( m_viewControls );
+ }
+
+ /// @copydoc wxWindow::Refresh()
+ void Refresh( bool aEraseBackground = true, const wxRect* aRect = NULL );
+
+ /**
+ * Function ForceRefresh()
+ * Forces a redraw.
+ */
+ void ForceRefresh();
+
+ /**
+ * Function SetEventDispatcher()
+ * Sets a dispatcher that processes events and forwards them to tools.
+ * @param aEventDispatcher is the object that will be used for dispatching events.
+ * DRAW_PANEL_GAL does not take over the ownership. Passing NULL disconnects all event
+ * handlers from the DRAW_PANEL_GAL and parent frame.
+ */
+ void SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher );
+
+ /**
+ * Function StartDrawing()
+ * Begins drawing if it was stopped previously.
+ */
+ void StartDrawing();
+
+ /**
+ * Function StopDrawing()
+ * Prevents the GAL canvas from further drawing till it is recreated
+ * or StartDrawing() is called.
+ */
+ void StopDrawing();
+
+ /**
+ * Function SetHighContrastLayer
+ * Takes care of display settings for the given layer to be displayed in high contrast mode.
+ */
+ virtual void SetHighContrastLayer( LAYER_ID aLayer );
+
+ /**
+ * Function SetTopLayer
+ * Moves the selected layer to the top, so it is displayed above all others.
+ */
+ virtual void SetTopLayer( LAYER_ID aLayer );
+
+ virtual void GetMsgPanelInfo( std::vector<MSG_PANEL_ITEM>& aList )
+ {
+ assert( false );
+ }
+
+ /**
+ * Function GetLegacyZoom()
+ * Returns current view scale converted to zoom value used by the legacy canvas.
+ */
+ double GetLegacyZoom() const;
+
+protected:
+ void onPaint( wxPaintEvent& WXUNUSED( aEvent ) );
+ void onSize( wxSizeEvent& aEvent );
+ void onEvent( wxEvent& aEvent );
+ void onEnter( wxEvent& aEvent );
+ void onLostFocus( wxFocusEvent& aEvent );
+ void onRefreshTimer( wxTimerEvent& aEvent );
+
+ static const int MinRefreshPeriod = 17; ///< 60 FPS.
+
+ /// Pointer to the parent window
+ wxWindow* m_parent;
+
+ /// Last timestamp when the panel was refreshed
+ wxLongLong m_lastRefresh;
+
+ /// Is there a redraw event requested?
+ bool m_pendingRefresh;
+
+ /// True if GAL is currently redrawing the view
+ bool m_drawing;
+
+ /// Flag that determines if VIEW may use GAL for redrawing the screen.
+ bool m_drawingEnabled;
+
+ /// Timer responsible for preventing too frequent refresh
+ wxTimer m_refreshTimer;
+
+ /// Interface for drawing objects on a 2D-surface
+ KIGFX::GAL* m_gal;
+
+ /// Stores view settings (scale, center, etc.) and items to be drawn
+ KIGFX::VIEW* m_view;
+
+ /// Contains information about how to draw items using GAL
+ KIGFX::PAINTER* m_painter;
+
+ /// Control for VIEW (moving, zooming, etc.)
+ KIGFX::WX_VIEW_CONTROLS* m_viewControls;
+
+ /// Currently used GAL
+ GAL_TYPE m_backend;
+
+ /// Processes and forwards events to tools
+ TOOL_DISPATCHER* m_eventDispatcher;
+
+ /// Flag to indicate that focus should be regained on the next mouse event. It is a workaround
+ /// for cases when the panel loses keyboard focus, so it does not react to hotkeys anymore.
+ bool m_lostFocus;
+};
+
+#endif
diff --git a/include/class_drawpanel.h b/include/class_drawpanel.h
new file mode 100644
index 0000000..14ad104
--- /dev/null
+++ b/include/class_drawpanel.h
@@ -0,0 +1,504 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_drawpanel.h:
+ * @brief EDA_DRAW_PANEL class definition.
+ */
+
+#ifndef PANEL_WXSTRUCT_H
+#define PANEL_WXSTRUCT_H
+
+#include <colors.h>
+#include <base_struct.h>
+#include <gr_basic.h>
+
+
+class BASE_SCREEN;
+class PCB_SCREEN;
+
+
+/**
+ * Mouse capture callback function prototype.
+ */
+typedef void ( *MOUSE_CAPTURE_CALLBACK )( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
+ const wxPoint& aPosition, bool aErase );
+
+/**
+ * End mouse capture callback function prototype.
+ */
+typedef void ( *END_MOUSE_CAPTURE_CALLBACK )( EDA_DRAW_PANEL* aPanel, wxDC* aDC );
+
+
+class EDA_DRAW_PANEL : public wxScrolledWindow
+{
+private:
+ int m_currentCursor; ///< Current mouse cursor shape id.
+ int m_defaultCursor; ///< The default mouse cursor shape id.
+ bool m_showCrossHair; ///< Indicate if cross hair is to be shown.
+ int m_cursorLevel; ///< Index for cursor redraw in XOR mode.
+ int m_scrollIncrementX; ///< X axis scroll increment in pixels per unit.
+ int m_scrollIncrementY; ///< Y axis scroll increment in pixels per unit.
+
+ wxPoint m_CursorStartPos; ///< Used for testing the cursor movement.
+ wxPoint m_PanStartCenter; ///< Initial scroll center position when pan started
+ wxPoint m_PanStartEventPosition; ///< Initial position of mouse event when pan started
+
+ /// The drawing area used to redraw the screen which is usually the visible area
+ /// of the drawing in internal units.
+ EDA_RECT m_ClipBox;
+
+ bool m_abortRequest; ///< Flag used to abort long commands.
+
+ bool m_enableZoomNoCenter; ///< True to enable zooming around the crosshair instead of the center
+ bool m_enableMousewheelPan; ///< True to enable mousewheel panning by default.
+ bool m_enableMiddleButtonPan; ///< True to enable middle mouse button panning.
+ bool m_panScrollbarLimits; ///< has meaning only if m_enableMiddleButtonPan = true
+ ///< true to limit panning to scrollbar current limits
+ ///< false to used unlimited pan
+
+ bool m_enableAutoPan; ///< True to enable automatic panning.
+
+ bool m_requestAutoPan; ///< true to request an auto pan. Valid only when m_enableAutoPan = true.
+
+ bool m_ignoreMouseEvents; ///< Ignore mouse events when true.
+
+ /* Used to inhibit a response to a mouse left button release, after a double click
+ * (when releasing the left button at the end of the second click. Used in Eeschema
+ * to inhibit a mouse left release command when switching between hierarchical sheets
+ * on a double click.
+ */
+ bool m_ignoreNextLeftButtonRelease; ///< Ignore the next mouse left button release when true.
+
+ bool m_enableBlockCommands; ///< True enables block commands.
+
+ /**
+ * Count the drag events. Used to filter mouse moves before starting a
+ * block command. A block command can be started only if
+ * MinDragEventCount > MIN_DRAG_COUNT_FOR_START_BLOCK_COMMAND in order to avoid
+ * spurious block commands.
+ */
+ int m_minDragEventCount;
+
+ /// True when drawing in mirror mode. Used by the draw arc function, because arcs
+ /// are oriented, and in mirror mode, orientations are reversed.
+ bool m_PrintIsMirrored;
+
+ /// Mouse capture move callback function.
+ MOUSE_CAPTURE_CALLBACK m_mouseCaptureCallback;
+
+ /// Abort mouse capture callback function.
+ END_MOUSE_CAPTURE_CALLBACK m_endMouseCaptureCallback;
+
+ /// useful to avoid false start block in certain cases
+ /// (like switch from a sheet to an other sheet
+ /// >= 0 (or >= n) if a block can start
+ int m_canStartBlock;
+
+public:
+
+ EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id, const wxPoint& pos, const wxSize& size );
+ ~EDA_DRAW_PANEL();
+
+ /**
+ * Function GetDisplayOptions
+ * A way to pass info to draw functions.
+ * this is just an accessor to the GetDisplayOptions() parent frame function.
+ */
+ void* GetDisplayOptions();
+
+ BASE_SCREEN* GetScreen();
+
+ EDA_DRAW_FRAME* GetParent() const;
+
+ void OnPaint( wxPaintEvent& event );
+
+ EDA_RECT* GetClipBox() { return &m_ClipBox; }
+
+ void SetClipBox( const EDA_RECT& aRect ) { m_ClipBox = aRect; }
+
+ bool GetAbortRequest() const { return m_abortRequest; }
+
+ void SetAbortRequest( bool aAbortRequest ) { m_abortRequest = aAbortRequest; }
+
+ bool GetEnableMousewheelPan() const { return m_enableMousewheelPan; }
+
+ void SetEnableMousewheelPan( bool aEnable );
+
+ bool GetEnableMiddleButtonPan() const { return m_enableMiddleButtonPan; }
+
+ void SetEnableMiddleButtonPan( bool aEnable ) { m_enableMiddleButtonPan = aEnable; }
+
+ bool GetEnableZoomNoCenter() const { return m_enableZoomNoCenter; }
+
+ void SetEnableZoomNoCenter( bool aEnable );
+
+ bool GetMiddleButtonPanLimited() const { return m_panScrollbarLimits; }
+
+ void SetMiddleButtonPanLimited( bool aEnable ) { m_panScrollbarLimits = aEnable; }
+
+ bool GetEnableAutoPan() const { return m_enableAutoPan; }
+
+ void SetEnableAutoPan( bool aEnable ) { m_enableAutoPan = aEnable; }
+
+ void SetAutoPanRequest( bool aEnable ) { m_requestAutoPan = aEnable; }
+
+ void SetIgnoreMouseEvents( bool aIgnore ) { m_ignoreMouseEvents = aIgnore; }
+
+ void SetIgnoreLeftButtonReleaseEvent( bool aIgnore ) { m_ignoreNextLeftButtonRelease = aIgnore; }
+
+ void SetEnableBlockCommands( bool aEnable ) { m_enableBlockCommands = aEnable; }
+
+ bool GetPrintMirrored() const { return m_PrintIsMirrored; }
+ void SetPrintMirrored( bool aMirror ) { m_PrintIsMirrored = aMirror; }
+
+ void SetCanStartBlock( int aStartBlock ) { m_canStartBlock = aStartBlock; }
+
+ /**
+ * Function DrawBackGround
+ * @param DC = current Device Context
+ * Draws (if allowed) :
+ * the grid
+ * X and Y axis
+ * X and Y auxiliary axis
+ */
+ void DrawBackGround( wxDC* DC );
+
+ /**
+ * Function DrawGrid
+ * draws a grid to \a aDC.
+ * @see m_ClipBox to determine the damaged area of the drawing to draw the grid.
+ * @see EDA_DRAW_FRAME::IsGridVisible() to determine if grid is shown.
+ * @see EDA_DRAW_FRAME::GetGridColor() for the color of the grid.
+ * @param aDC The device context to draw the grid.
+ */
+ void DrawGrid( wxDC* aDC );
+
+ /**
+ * Function DrawAuxiliaryAxis
+ * Draw the Auxiliary Axis, used in Pcbnew which as origin coordinates
+ * for gerber and excellon files
+ * @param aDC = current Device Context
+ * @param aDrawMode = draw mode (GR_COPY, GR_OR ..)
+ */
+ void DrawAuxiliaryAxis( wxDC* aDC, GR_DRAWMODE aDrawMode );
+
+ /**
+ * Function DrawGridAxis
+ * Draw on auxiliary axis, used in Pcbnew to show grid origin, when
+ * the grid origin is set by user, and is not (0,0)
+ * @param aDC = current Device Context
+ * @param aDrawMode = draw mode (GR_COPY, GR_OR ..)
+ * @param aGridOrigin = the absolute coordinate of grid origin for snap.
+ */
+ void DrawGridAxis( wxDC* aDC, GR_DRAWMODE aDrawMode, const wxPoint& aGridOrigin );
+
+ void OnEraseBackground( wxEraseEvent& event ) { }
+
+ /**
+ * Function OnActivate
+ * handles window activation events.
+ * <p>
+ * The member m_canStartBlock is initialize to avoid a block start command on activation
+ * (because a left mouse button can be pressed and no block command wanted. This happens
+ * when enter on a hierarchy sheet on double click.
+ *</p>
+ */
+ void OnActivate( wxActivateEvent& event );
+
+ /**
+ * Function DoPrepareDC
+ * sets up the device context \a aDC for drawing.
+ * <p>
+ * This overrides wxScrolledWindow::DoPrepareDC() for setting up the the device context
+ * used for drawing. The scale factor and drawing logical offset are set and the base
+ * method is called to set the DC device origin (scroll bar position). This connects
+ * everything together to achieve the appropriate coordinate manipulation using wxDC
+ * LogicalToDeviceXXX and DeviceToLogixalXXX methods. This gets called automatically
+ * for a paint event. If you do any drawing outside the paint event, you must call
+ * DoPrepareDC manually.
+ * </p>
+ * @param aDC The device context to prepare.
+ */
+ virtual void DoPrepareDC( wxDC& aDC );
+
+ /**
+ * Function DeviceToLogical
+ * converts \a aRect from device to drawing (logical) coordinates.
+ * <p>
+ * \a aRect must be in scrolled device units.
+ * </p>
+ * @param aRect The rectangle to convert.
+ * @param aDC The device context used for the conversion.
+ * @return A rectangle converted to drawing units.
+ */
+ wxRect DeviceToLogical( const wxRect& aRect, wxDC& aDC );
+
+ /* Mouse and keys events */
+
+ /**
+ * Function OnMouseWheel
+ * handles mouse wheel events.
+ * <p>
+ * The mouse wheel is used to provide support for zooming and panning. This
+ * is accomplished by converting mouse wheel events in pseudo menu command
+ * events and sending them to the appropriate parent window event handler.
+ *</p>
+ */
+ void OnMouseWheel( wxMouseEvent& event );
+#ifdef USE_OSX_MAGNIFY_EVENT
+ void OnMagnify( wxMouseEvent& event );
+#endif
+ void OnMouseEvent( wxMouseEvent& event );
+ void OnMouseEntering( wxMouseEvent& aEvent );
+ void OnMouseLeaving( wxMouseEvent& event );
+ void OnKeyEvent( wxKeyEvent& event );
+ void OnCharHook( wxKeyEvent& event );
+
+ void OnPan( wxCommandEvent& event );
+
+ void EraseScreen( wxDC* DC );
+ void OnScrollWin( wxCommandEvent& event );
+ void OnScroll( wxScrollWinEvent& event );
+
+ void SetZoom( double mode );
+ double GetZoom();
+
+ void SetGrid( const wxRealPoint& size );
+ wxRealPoint GetGrid();
+
+ /**
+ * Function OnRightClick
+ * builds and displays a context menu on a right mouse button click.
+ * @return true if the context menu is shown, or false
+ */
+ bool OnRightClick( wxMouseEvent& event );
+
+ /**
+ * Function IsPointOnDisplay
+ * @param aPosition The position to test in logical (drawing) units.
+ * @return true if \a aPosition is visible on the screen.
+ * false if \a aPosition is not visible on the screen.
+ */
+ bool IsPointOnDisplay( const wxPoint& aPosition );
+
+ /**
+ * Function SetClipBox
+ * sets the clip box in drawing (logical) units from \a aRect in device units.
+ * <p>
+ * If \a aRect is NULL, then the entire visible area of the screen is used as the clip
+ * area. The clip box is used when drawing to determine which objects are not visible
+ * and do not need to be drawn. Note that this is not the same as setting the device
+ * context clipping with wxDC::SetClippingRegion(). This is the rectangle used by the
+ * drawing functions in gr_basic.cpp used to determine if the item to draw is off screen
+ * and therefore not drawn.
+ * </p>
+ * @param aDC The device context use for drawing with the correct scale and
+ * offsets already configured. See DoPrepareDC().
+ * @param aRect The clip rectangle in device units or NULL for the entire visible area
+ * of the screen.
+ */
+ void SetClipBox( wxDC& aDC, const wxRect* aRect = NULL );
+
+ void ReDraw( wxDC* aDC, bool aEraseBackground = true );
+
+ /**
+ * Function RefreshDrawingRect
+ * redraws the contents of \a aRect in drawing units. \a aRect is converted to
+ * screen coordinates and wxWindow::RefreshRect() is called to repaint the region.
+ * @param aRect The rectangle to repaint.
+ * @param aEraseBackground Erases the background if true.
+ */
+ void RefreshDrawingRect( const EDA_RECT& aRect, bool aEraseBackground = true );
+
+ /// @copydoc wxWindow::Refresh()
+ virtual void Refresh( bool eraseBackground = true, const wxRect* rect = NULL );
+
+ /**
+ * Function GetScreenCenterLogicalPosition
+ * @return The current screen center position in logical (drawing) units.
+ */
+ wxPoint GetScreenCenterLogicalPosition();
+
+ /**
+ * Function MoveCursorToCrossHair
+ * warps the cursor to the current cross hair position.
+ */
+ void MoveCursorToCrossHair();
+
+ /**
+ * Function ToDeviceXY
+ * transforms logical to device coordinates
+ */
+ wxPoint ToDeviceXY( const wxPoint& pos );
+
+ /**
+ * Function ToLogicalXY
+ * transforms device to logical coordinates
+ */
+ wxPoint ToLogicalXY( const wxPoint& pos );
+
+ /**
+ * Function MoveCursor
+ * moves the mouse pointer to \a aPosition in logical (drawing) units.
+ * @param aPosition The position in logical units to move the cursor.
+ */
+ void MoveCursor( const wxPoint& aPosition );
+
+ /* Cursor functions */
+ /**
+ * Function DrawCrossHair
+ * draws the user cross hair.
+ * <p>
+ * The user cross hair is not the mouse cursor although they may be at the same screen
+ * position. The mouse cursor is still render by the OS. This is a drawn cross hair
+ * that is used to snap to grid when grid snapping is enabled. This is as an indicator
+ * to where the next user action will take place.
+ * </p>
+ * @param aDC - the device context to draw the cursor
+ * @param aColor - the color to draw the cursor
+ */
+ void DrawCrossHair( wxDC* aDC, EDA_COLOR_T aColor = WHITE );
+
+ // Hide the cross hair.
+ void CrossHairOff( wxDC* DC );
+
+ // Show the cross hair.
+ void CrossHairOn( wxDC* DC );
+
+ /**
+ * Function SetMouseCapture
+ * sets the mouse capture and end mouse capture callbacks to \a aMouseCaptureCallback
+ * and \a aEndMouseCaptureCallback respectively.
+ */
+ void SetMouseCapture( MOUSE_CAPTURE_CALLBACK aMouseCaptureCallback,
+ END_MOUSE_CAPTURE_CALLBACK aEndMouseCaptureCallback )
+ {
+ m_mouseCaptureCallback = aMouseCaptureCallback;
+ m_endMouseCaptureCallback = aEndMouseCaptureCallback;
+ }
+
+
+ void SetMouseCaptureCallback( MOUSE_CAPTURE_CALLBACK aMouseCaptureCallback )
+ {
+ m_mouseCaptureCallback = aMouseCaptureCallback;
+ }
+
+
+ /**
+ * Function EndMouseCapture
+ * ends mouse a capture.
+ *
+ * Check to see if the cursor is being managed for block or editing commands and release it.
+ * @param aId The command ID to restore or -1 to keep the current command ID.
+ * @param aCursorId The wxWidgets stock cursor ID to set the cursor to or -1 to keep the
+ * current cursor.
+ * @param aTitle The tool message to display in the status bar or wxEmptyString to clear
+ * the message.
+ * @param aCallEndFunc Call the abort mouse capture callback if true.
+ */
+ void EndMouseCapture( int aId = -1, int aCursorId = -1,
+ const wxString& aTitle = wxEmptyString,
+ bool aCallEndFunc = true );
+
+ inline bool IsMouseCaptured() const { return m_mouseCaptureCallback != NULL; }
+
+ /**
+ * Function CallMouseCapture
+ * calls the mouse capture callback.
+ *
+ * @param aDC A point to a wxDC object to perform any drawing upon.
+ * @param aPosition A referecnce to a wxPoint object containing the current cursor
+ * position.
+ * @param aErase True indicates the item being drawn should be erase before drawing
+ * it a \a aPosition.
+ */
+ void CallMouseCapture( wxDC* aDC, const wxPoint& aPosition, bool aErase );
+
+ /**
+ * Function CallEndMouseCapture
+ * calls the end mouse capture callback.
+ *
+ * @param aDC A point to a wxDC object to perform any drawing upon.
+ */
+ void CallEndMouseCapture( wxDC* aDC );
+
+ /**
+ * Function SetCurrentCursor
+ * Set the current cursor shape for drawpanel
+ */
+ void SetCurrentCursor( int aCursor )
+ {
+ m_currentCursor = aCursor;
+ SetCursor( (wxStockCursor) m_currentCursor );
+ }
+
+ /**
+ * Function GetDefaultCursor
+ * return the default cursor shape
+ */
+ int GetDefaultCursor() const { return m_defaultCursor; }
+
+ /**
+ * Function GetCurrentCursor
+ * return the current cursor shape, depending on the current selected tool
+ */
+ int GetCurrentCursor() const { return m_currentCursor; }
+
+
+ DECLARE_EVENT_TABLE()
+};
+
+
+/**
+ * Class EDA_CROSS_HAIR_MANAGER
+ * is used to hide the cross hair and restore it when the class goes out of scope.
+ */
+class EDA_CROSS_HAIR_MANAGER
+{
+public:
+ EDA_CROSS_HAIR_MANAGER( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) :
+ m_panel( aPanel ),
+ m_dc( aDC )
+ {
+ if( aPanel && aDC )
+ aPanel->CrossHairOff( aDC );
+ }
+
+ ~EDA_CROSS_HAIR_MANAGER()
+ {
+ if( m_panel && m_dc )
+ m_panel->CrossHairOn( m_dc );
+ }
+
+private:
+ EDA_DRAW_PANEL* m_panel;
+ wxDC* m_dc;
+
+ DECLARE_NO_COPY_CLASS( EDA_CROSS_HAIR_MANAGER )
+};
+
+
+#endif /* #ifndef PANEL_WXSTRUCT_H */
diff --git a/include/class_drc_item.h b/include/class_drc_item.h
new file mode 100644
index 0000000..73a77ed
--- /dev/null
+++ b/include/class_drc_item.h
@@ -0,0 +1,274 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007 Dick Hollenbeck, dick@softplc.com
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _CLASS_DRC_ITEM_H
+#define _CLASS_DRC_ITEM_H
+
+#include <macros.h>
+
+
+/**
+ * Class DRC_ITEM
+ * is a holder for a DRC (in Pcbnew) or ERC (in Eeschema) error item.
+ * It is generated when two objects are too close (DRC)
+ * or two connected objects (pins) have incompatible electrical types (ERC).
+ * There are holders for information on two items. The
+ * information held is the board coordinate and the MenuText for each item.
+ * Also held is the type of error by number and the location of the MARKER.
+ * A function is provided to translate that number into text.
+ * Some errors involve only one item (item with an incorrect param) so
+ * m_hasSecondItem is set to false in this case.
+ */
+class DRC_ITEM
+{
+protected:
+ int m_ErrorCode; ///< the error code's numeric value
+ wxString m_MainText; ///< text for the first BOARD_ITEM or SCH_ITEM
+ wxString m_AuxiliaryText; ///< text for the second BOARD_ITEM or SCH_ITEM
+ wxPoint m_MainPosition; ///< the location of the first (or main ) BOARD_ITEM or SCH_ITEM. This is also the position of the marker
+ wxPoint m_AuxiliaryPosition; ///< the location of the second BOARD_ITEM or SCH_ITEM
+ bool m_hasSecondItem; ///< true when 2 items create a DRC/ERC error, false if only one item
+ bool m_noCoordinate;
+
+public:
+
+ DRC_ITEM()
+ {
+ m_ErrorCode = 0;
+ m_hasSecondItem = false;
+ m_noCoordinate = false;
+ }
+
+ DRC_ITEM( int aErrorCode,
+ const wxString& aMainText, const wxString& bAuxiliaryText,
+ const wxPoint& aMainPos, const wxPoint& bAuxiliaryPos )
+ {
+ SetData( aErrorCode,
+ aMainText, bAuxiliaryText,
+ aMainPos, bAuxiliaryPos );
+ }
+
+ DRC_ITEM( int aErrorCode,
+ const wxString& aText, const wxPoint& aPos )
+ {
+ SetData( aErrorCode, aText, aPos );
+ }
+
+
+ /**
+ * Function SetData
+ * initialize all data in item
+ * @param aErrorCode = error code
+ * @param aMainText = the text concerning the schematic or board item
+ * @param aMainPos = position the item and therefore of this issue
+ */
+ void SetData( int aErrorCode,
+ const wxString& aMainText, const wxPoint& aMainPos )
+ {
+ SetData( aErrorCode,
+ aMainText, aMainText,
+ aMainPos, aMainPos );
+ m_hasSecondItem = false;
+ }
+
+ /**
+ * Function SetData
+ * initialize all data in item
+ * @param aErrorCode = error code
+ * @param aMainText = the first text (main text) concerning the main schematic or board item
+ * @param bAuxiliaryText = the second text (main text) concerning the second schematic or board item
+ * @param aMainPos = position the first item and therefore of this issue
+ * @param bAuxiliaryPos = position the second item
+ */
+ void SetData( int aErrorCode,
+ const wxString& aMainText, const wxString& bAuxiliaryText,
+ const wxPoint& aMainPos, const wxPoint& bAuxiliaryPos )
+ {
+ m_ErrorCode = aErrorCode;
+ m_MainText = aMainText;
+ m_AuxiliaryText = bAuxiliaryText;
+ m_MainPosition = aMainPos;
+ m_AuxiliaryPosition = bAuxiliaryPos;
+ m_hasSecondItem = true;
+ m_noCoordinate = false;
+ }
+
+ /**
+ * Function SetAuxiliaryData
+ * initialize data for the second (auxiliary) item
+ * @param aAuxiliaryText = the second text (main text) concerning the second schematic or board item
+ * @param aAuxiliaryPos = position the second item
+ */
+ void SetAuxiliaryData( const wxString& aAuxiliaryText, const wxPoint& aAuxiliaryPos )
+ {
+ m_AuxiliaryText = aAuxiliaryText;
+ m_AuxiliaryPosition = aAuxiliaryPos;
+ m_hasSecondItem = true;
+ }
+
+
+ bool HasSecondItem() const { return m_hasSecondItem; }
+
+ void SetShowNoCoordinate() { m_noCoordinate = true; }
+
+ /** acces to A and B texts
+ */
+ wxString GetMainText() const { return m_MainText; }
+ wxString GetAuxiliaryText() const { return m_AuxiliaryText; }
+
+
+ /**
+ * Function ShowHtml
+ * translates this object into a fragment of HTML suitable for the
+ * wxWidget's wxHtmlListBox class.
+ * @return wxString - the html text.
+ */
+ wxString ShowHtml() const
+ {
+ wxString ret;
+ wxString mainText = m_MainText;
+ // a wxHtmlWindows does not like < and > in the text to display
+ // because these chars have a special meaning in html
+ mainText.Replace( wxT("<"), wxT("&lt;") );
+ mainText.Replace( wxT(">"), wxT("&gt;") );
+
+ wxString errText = GetErrorText();
+ errText.Replace( wxT("<"), wxT("&lt;") );
+ errText.Replace( wxT(">"), wxT("&gt;") );
+
+
+ if( m_noCoordinate )
+ {
+ // omit the coordinate, a NETCLASS has no location
+ ret.Printf( _( "ErrType(%d): <b>%s</b><ul><li> %s </li></ul>" ),
+ m_ErrorCode,
+ GetChars( errText ),
+ GetChars( mainText ) );
+ }
+ else if( m_hasSecondItem )
+ {
+ wxString auxText = m_AuxiliaryText;
+ auxText.Replace( wxT("<"), wxT("&lt;") );
+ auxText.Replace( wxT(">"), wxT("&gt;") );
+
+ // an html fragment for the entire message in the listbox. feel free
+ // to add color if you want:
+ ret.Printf( _( "ErrType(%d): <b>%s</b><ul><li> %s: %s </li><li> %s: %s </li></ul>" ),
+ m_ErrorCode,
+ GetChars( errText ),
+ GetChars( ShowCoord( m_MainPosition )), GetChars( mainText ),
+ GetChars( ShowCoord( m_AuxiliaryPosition )), GetChars( auxText ) );
+ }
+ else
+ {
+ ret.Printf( _( "ErrType(%d): <b>%s</b><ul><li> %s: %s </li></ul>" ),
+ m_ErrorCode,
+ GetChars( errText ),
+ GetChars( ShowCoord( m_MainPosition ) ), GetChars( mainText ) );
+ }
+
+ return ret;
+ }
+
+
+ /**
+ * Function ShowReport
+ * translates this object into a text string suitable for saving
+ * to disk in a report.
+ * @return wxString - the simple multi-line report text.
+ */
+ wxString ShowReport() const
+ {
+ wxString ret;
+
+ if( m_hasSecondItem )
+ {
+ ret.Printf( wxT( "ErrType(%d): %s\n %s: %s\n %s: %s\n" ),
+ m_ErrorCode,
+ GetChars( GetErrorText() ),
+ GetChars( ShowCoord( m_MainPosition ) ), GetChars( m_MainText ),
+ GetChars( ShowCoord( m_AuxiliaryPosition ) ), GetChars( m_AuxiliaryText ) );
+ }
+ else
+ {
+ ret.Printf( wxT( "ErrType(%d): %s\n %s: %s\n" ),
+ m_ErrorCode,
+ GetChars( GetErrorText() ),
+ GetChars( ShowCoord( m_MainPosition ) ), GetChars( m_MainText ) );
+ }
+
+ return ret;
+ }
+
+
+ /**
+ * Function GetErrorCode
+ * returns the error code.
+ */
+ int GetErrorCode() const
+ {
+ return m_ErrorCode;
+ }
+
+ /**
+ * Function GetErrorText
+ * returns the string form of a drc error code.
+ */
+ wxString GetErrorText() const;
+
+ const wxString& GetTextA() const
+ {
+ return m_MainText;
+ }
+
+
+ const wxString& GetTextB() const
+ {
+ return m_AuxiliaryText;
+ }
+
+
+ const wxPoint& GetPointA() const
+ {
+ return m_MainPosition;
+ }
+
+
+ const wxPoint& GetPointB() const
+ {
+ return m_AuxiliaryPosition;
+ }
+
+
+ /**
+ * Function ShowCoord
+ * formats a coordinate or position to text.
+ * @param aPos The position to format
+ * @return wxString - The formated string
+ */
+ static wxString ShowCoord( const wxPoint& aPos );
+};
+
+
+#endif // _CLASS_DRC_ITEM_H
diff --git a/include/class_eda_rect.h b/include/class_eda_rect.h
new file mode 100644
index 0000000..57aa3a4
--- /dev/null
+++ b/include/class_eda_rect.h
@@ -0,0 +1,226 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2004-2014 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_eda_rect.h
+ */
+
+#ifndef CLASS_EDA_RECT_H
+#define CLASS_EDA_RECT_H
+
+/**
+ * Class EDA_RECT
+ * handles the component boundary box.
+ * This class is similar to wxRect, but some wxRect functions are very curious,
+ * and are working only if dimensions are >= 0 (not always the case in KiCad)
+ * and also KiCad needs some specific method.
+ * so I prefer this more suitable class
+ */
+class EDA_RECT
+{
+private:
+ wxPoint m_Pos; // Rectangle Origin
+ wxSize m_Size; // Rectangle Size
+
+public:
+ EDA_RECT() { };
+
+ EDA_RECT( const wxPoint& aPos, const wxSize& aSize ) :
+ m_Pos( aPos ),
+ m_Size( aSize )
+ { }
+
+ wxPoint Centre() const
+ {
+ return wxPoint( m_Pos.x + ( m_Size.x >> 1 ),
+ m_Pos.y + ( m_Size.y >> 1 ) );
+ }
+
+ /**
+ * Function Move
+ * moves the rectangle by the \a aMoveVector.
+ * @param aMoveVector A wxPoint that is the value to move this rectangle
+ */
+ void Move( const wxPoint& aMoveVector );
+
+ /**
+ * Function Normalize
+ * ensures that the height ant width are positive.
+ */
+ void Normalize();
+
+ /**
+ * Function Contains
+ * @param aPoint = the wxPoint to test
+ * @return true if aPoint is inside the boundary box. A point on a edge is seen as inside
+ */
+ bool Contains( const wxPoint& aPoint ) const;
+ /**
+ * Function Contains
+ * @param x = the x coordinate of the point to test
+ * @param y = the x coordinate of the point to test
+ * @return true if point is inside the boundary box. A point on a edge is seen as inside
+ */
+ bool Contains( int x, int y ) const { return Contains( wxPoint( x, y ) ); }
+
+ /**
+ * Function Contains
+ * @param aRect = the EDA_RECT to test
+ * @return true if aRect is Contained. A common edge is seen as contained
+ */
+ bool Contains( const EDA_RECT& aRect ) const;
+
+ const wxSize& GetSize() const { return m_Size; }
+ int GetX() const { return m_Pos.x; }
+ int GetY() const { return m_Pos.y; }
+
+ const wxPoint& GetOrigin() const { return m_Pos; }
+ const wxPoint& GetPosition() const { return m_Pos; }
+ const wxPoint GetEnd() const { return wxPoint( m_Pos.x + m_Size.x, m_Pos.y + m_Size.y ); }
+
+ int GetWidth() const { return m_Size.x; }
+ int GetHeight() const { return m_Size.y; }
+ int GetRight() const { return m_Pos.x + m_Size.x; }
+ int GetLeft() const { return m_Pos.x; }
+ int GetBottom() const { return m_Pos.y + m_Size.y; } // Y axis from top to bottom
+
+ void SetOrigin( const wxPoint& pos ) { m_Pos = pos; }
+ void SetOrigin( int x, int y ) { m_Pos.x = x; m_Pos.y = y; }
+ void SetSize( const wxSize& size ) { m_Size = size; }
+ void SetSize( int w, int h ) { m_Size.x = w; m_Size.y = h; }
+ void Offset( int dx, int dy ) { m_Pos.x += dx; m_Pos.y += dy; }
+ void Offset( const wxPoint& offset ) { m_Pos.x += offset.x; m_Pos.y +=
+ offset.y; }
+ void SetX( int val ) { m_Pos.x = val; }
+ void SetY( int val ) { m_Pos.y = val; }
+ void SetWidth( int val ) { m_Size.x = val; }
+ void SetHeight( int val ) { m_Size.y = val; }
+ void SetEnd( int x, int y ) { SetEnd( wxPoint( x, y ) ); }
+ void SetEnd( const wxPoint& pos )
+ {
+ m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y;
+ }
+
+ /**
+ * Function RevertYAxis
+ * Mirror the rectangle from the X axis (negate Y pos and size)
+ */
+ void RevertYAxis()
+ {
+ m_Pos.y = -m_Pos.y;
+ m_Size.y = -m_Size.y;
+ Normalize();
+ }
+
+ /**
+ * Function Intersects
+ * tests for a common area between rectangles.
+ *
+ * @param aRect A rectangle to test intersection with.
+ * @return bool - true if the argument rectangle intersects this rectangle.
+ * (i.e. if the 2 rectangles have at least a common point)
+ */
+ bool Intersects( const EDA_RECT& aRect ) const;
+
+ /**
+ * Function Intersects
+ * tests for a common area between a segment and this rectangle.
+ *
+ * @param aPoint1 First point of the segment to test intersection with.
+ * @param aPoint2 Second point of the segment to test intersection with.
+ * @return bool - true if the argument segment intersects this rectangle.
+ * (i.e. if the segment and rectangle have at least a common point)
+ */
+ bool Intersects( const wxPoint& aPoint1, const wxPoint& aPoint2 ) const;
+
+ /**
+ * Function operator(wxRect)
+ * overloads the cast operator to return a wxRect
+ * wxRect does not accept negative values for size, so ensure the
+ * wxRect size is always >= 0
+ */
+ operator wxRect() const
+ {
+ EDA_RECT rect( m_Pos, m_Size );
+ rect.Normalize();
+ return wxRect( rect.m_Pos, rect.m_Size );
+ }
+
+ /**
+ * Function Inflate
+ * inflates the rectangle horizontally by \a dx and vertically by \a dy. If \a dx
+ * and/or \a dy is negative the rectangle is deflated.
+ */
+ EDA_RECT& Inflate( wxCoord dx, wxCoord dy );
+
+ /**
+ * Function Inflate
+ * inflates the rectangle horizontally and vertically by \a aDelta. If \a aDelta
+ * is negative the rectangle is deflated.
+ */
+ EDA_RECT& Inflate( int aDelta );
+
+ /**
+ * Function Merge
+ * modifies the position and size of the rectangle in order to contain \a aRect. It is
+ * mainly used to calculate bounding boxes.
+ * @param aRect The rectangle to merge with this rectangle.
+ */
+ void Merge( const EDA_RECT& aRect );
+
+ /**
+ * Function Merge
+ * modifies the position and size of the rectangle in order to contain the given point.
+ * @param aPoint The point to merge with the rectangle.
+ */
+ void Merge( const wxPoint& aPoint );
+
+ /**
+ * Function GetArea
+ * returns the area of the rectangle.
+ * @return The area of the rectangle.
+ */
+ double GetArea() const;
+
+ /**
+ * Function Common
+ * returns the area that is common with another rectangle.
+ * @param aRect is the rectangle to find the common area with.
+ * @return The common area rect or 0-sized rectangle if there is no intersection.
+ */
+ EDA_RECT Common( const EDA_RECT& aRect ) const;
+
+ /**
+ * Function GetBoundingBoxRotated
+ * @return the bounding box of this, after rotation
+ * @param aAngle = the rotation angle in 0.1 deg.
+ * @param aRotCenter = the rotation point.
+ * useful to calculate bounding box of rotated items, when
+ * rotation if not k*90 degrees
+ */
+ const EDA_RECT GetBoundingBoxRotated( wxPoint aRotCenter, double aAngle );
+};
+
+
+#endif // CLASS_EDA_RECT_H
diff --git a/include/class_layer_box_selector.h b/include/class_layer_box_selector.h
new file mode 100644
index 0000000..1f07df7
--- /dev/null
+++ b/include/class_layer_box_selector.h
@@ -0,0 +1,106 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef CLASS_LAYER_BOX_SELECTOR_H
+#define CLASS_LAYER_BOX_SELECTOR_H 1
+
+#include <wx/bmpcbox.h>
+#include <colors.h> // EDA_COLOR_T definition
+#include <layers_id_colors_and_visibility.h>
+
+struct EDA_HOTKEY_CONFIG;
+
+/* Basic class to build a layer list.
+ * this is an basic abstract class to build a layer list selector.
+ * To display this list, you should therefore derive this class
+ */
+class LAYER_SELECTOR
+{
+protected:
+ bool m_layerhotkeys;
+
+public:
+ // Hotkey Info
+ struct EDA_HOTKEY_CONFIG* m_hotkeys;
+
+public:
+ LAYER_SELECTOR();
+
+ // Returns a color index from the layer id
+ // Virtual function because GerbView uses its own functions in a derived class
+ virtual EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const = 0;
+
+ // Returns the name of the layer id
+ // Virtual pure function because GerbView uses its own functions in a derived class
+ virtual wxString GetLayerName( LAYER_NUM aLayer ) const = 0;
+
+ // Returns true if the layer id is enabled (i.e. is it should be displayed)
+ // Virtual function pure because GerbView uses its own functions in a derived class
+ virtual bool IsLayerEnabled( LAYER_NUM aLayer ) const = 0;
+
+ bool SetLayersOrdered( bool value );
+ bool SetLayersHotkeys( bool value );
+
+protected:
+ // Fills the layer bitmap aLayerbmp with the layer color
+ void SetBitmapLayer( wxBitmap& aLayerbmp, LAYER_NUM aLayer );
+};
+
+
+/* class to display a layer list in a wxBitmapComboBox.
+ */
+class LAYER_BOX_SELECTOR : public wxBitmapComboBox, public LAYER_SELECTOR
+{
+public:
+ // Hotkey Info
+ struct EDA_HOTKEY_CONFIG* m_hotkeys;
+
+public:
+ LAYER_BOX_SELECTOR( wxWindow* parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = NULL );
+
+ LAYER_BOX_SELECTOR( wxWindow* parent, wxWindowID id,
+ const wxPoint& pos, const wxSize& size,
+ const wxArrayString& choices );
+
+ // Get Current Item #
+ int GetChoice();
+
+ // Get Current Layer
+ LAYER_NUM GetLayerSelection() const;
+
+ // Set Layer #
+ int SetLayerSelection( LAYER_NUM layer );
+
+ // Reload the Layers
+ // Virtual pure function because GerbView uses its own functions in a derived class
+ virtual void Resync() = 0;
+
+ // Reload the Layers bitmaps colors
+ void ResyncBitmapOnly();
+};
+
+#endif // CLASS_LAYER_BOX_SELECTOR_H
diff --git a/include/class_macros_record.h b/include/class_macros_record.h
new file mode 100644
index 0000000..541c7d8
--- /dev/null
+++ b/include/class_macros_record.h
@@ -0,0 +1,45 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011-2014 Andrey Fedorushkov <andrf@mail.ru>
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _CLASS_MACROS_RECORD_H
+#define _CLASS_MACROS_RECORD_H
+
+#include <list>
+
+class MACROS_RECORD
+{
+public:
+ int m_HotkeyCode;
+ int m_Idcommand;
+ wxPoint m_Position;
+};
+
+class MACROS_RECORDED
+{
+public:
+ wxPoint m_StartPosition;
+ std::list<MACROS_RECORD> m_Record;
+};
+
+#endif // _CLASS_MACROS_RECORD_H
diff --git a/include/class_marker_base.h b/include/class_marker_base.h
new file mode 100644
index 0000000..b91de15
--- /dev/null
+++ b/include/class_marker_base.h
@@ -0,0 +1,233 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef _CLASS_MARKER_BASE_H
+#define _CLASS_MARKER_BASE_H
+
+#include <class_drc_item.h>
+#include <gr_basic.h>
+
+
+/* Marker are mainly used to show a DRC or ERC error or warning
+ */
+
+
+class MARKER_BASE
+{
+public:
+ enum TYPEMARKER { // Marker type: can be used to identify the purpose of the marker
+ MARKER_UNSPEC,
+ MARKER_ERC,
+ MARKER_PCB,
+ MARKER_SIMUL
+ };
+ enum MARKER_SEVERITY { // Severity of the marker: this is the level of error
+ MARKER_SEVERITY_UNSPEC,
+ MARKER_SEVERITY_INFO,
+ MARKER_SEVERITY_WARNING,
+ MARKER_SEVERITY_ERROR
+ };
+
+ wxPoint m_Pos; ///< position of the marker
+
+protected:
+ TYPEMARKER m_MarkerType; ///< The type of marker (useful to filter markers)
+ MARKER_SEVERITY m_ErrorLevel; ///< Specify the severity of the error
+ EDA_COLOR_T m_Color; ///< color
+ EDA_RECT m_ShapeBoundingBox; ///< Bounding box of the graphic symbol, relative
+ ///< to the position of the shape, used for Hit
+ ///< Tests
+ int m_ScalingFactor; ///< Scaling factor for m_Size and m_Corners (can
+ ///< set the physical size
+ DRC_ITEM m_drc;
+
+ void init();
+
+public:
+
+ MARKER_BASE();
+
+ /**
+ * Constructor
+ * @param aErrorCode The categorizing identifier for an error
+ * @param aMarkerPos The position of the MARKER on the BOARD
+ * @param aText Text describing the first of two objects
+ * @param aPos The position of the first of two objects
+ * @param bText Text describing the second of the two conflicting objects
+ * @param bPos The position of the second of two objects
+ */
+ MARKER_BASE( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos,
+ const wxString& bText, const wxPoint& bPos );
+
+ /**
+ * Constructor
+ * @param aErrorCode The categorizing identifier for an error
+ * @param aMarkerPos The position of the MARKER on the BOARD
+ * @param aText Text describing the object
+ * @param aPos The position of the object
+ */
+ MARKER_BASE( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos );
+
+ /**
+ * Contructor
+ * makes a copy of \a aMarker but does not copy the DRC_ITEM.
+ *
+ * @param aMarker The marker to copy.
+ */
+ MARKER_BASE( const MARKER_BASE& aMarker );
+
+ ~MARKER_BASE();
+
+ /**
+ * Function DrawMarker
+ * draws the shape is the polygon defined in m_Corners (array of wxPoints).
+ */
+ void DrawMarker( EDA_DRAW_PANEL* aPanel, wxDC* aDC, GR_DRAWMODE aDrawMode,
+ const wxPoint& aOffset );
+
+ /**
+ * Function GetPos
+ * returns the position of this MARKER, const.
+ */
+ const wxPoint& GetPos() const
+ {
+ return m_Pos;
+ }
+
+ /**
+ * Function SetColor
+ * Set the color of this marker
+ */
+ void SetColor( EDA_COLOR_T aColor )
+ {
+ m_Color = aColor;
+ }
+
+ /**
+ * accessors to set/get error levels (warning, error, fatal error..)
+ */
+ void SetErrorLevel( MARKER_SEVERITY aErrorLevel )
+ {
+ m_ErrorLevel = aErrorLevel;
+ }
+
+ MARKER_SEVERITY GetErrorLevel() const
+ {
+ return m_ErrorLevel;
+ }
+
+ /** accessors to set/get marker type (DRC, ERC, or other)
+ */
+ void SetMarkerType( enum TYPEMARKER aMarkerType )
+ {
+ m_MarkerType = aMarkerType;
+ }
+
+ enum TYPEMARKER GetMarkerType() const
+ {
+ return m_MarkerType;
+ }
+
+ /**
+ * Function SetData
+ * fills in all the reportable data associated with a MARKER.
+ * @param aErrorCode The categorizing identifier for an error
+ * @param aMarkerPos The position of the MARKER on the BOARD
+ * @param aText Text describing the first of two objects
+ * @param aPos The position of the first of two objects
+ * @param bText Text describing the second of the two conflicting objects
+ * @param bPos The position of the second of two objects
+ */
+ void SetData( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos,
+ const wxString& bText, const wxPoint& bPos );
+
+ /**
+ * Function SetData
+ * fills in all the reportable data associated with a MARKER.
+ * @param aErrorCode The categorizing identifier for an error
+ * @param aMarkerPos The position of the MARKER on the BOARD
+ * @param aText Text describing the object
+ * @param aPos The position of the object
+ */
+ void SetData( int aErrorCode, const wxPoint& aMarkerPos,
+ const wxString& aText, const wxPoint& aPos );
+
+ /**
+ * Function SetAuxiliaryData
+ * initialize data for the second (auxiliary) item
+ * @param aAuxiliaryText = the second text (main text) concerning the second schematic or
+ * board item
+ * @param aAuxiliaryPos = position the second item
+ */
+ void SetAuxiliaryData( const wxString& aAuxiliaryText, const wxPoint& aAuxiliaryPos )
+ {
+ m_drc.SetAuxiliaryData( aAuxiliaryText, aAuxiliaryPos );
+ }
+
+ void SetShowNoCoordinate()
+ {
+ m_drc.SetShowNoCoordinate();
+ }
+
+ /**
+ * Function GetReporter
+ * returns the DRC_ITEM held within this MARKER so that its
+ * interface may be used.
+ * @return const& DRC_ITEM
+ */
+ const DRC_ITEM& GetReporter() const
+ {
+ return m_drc;
+ }
+
+ /**
+ * Function DisplayMarkerInfo
+ * displays the full info of this marker, in a HTML window.
+ */
+ void DisplayMarkerInfo( EDA_DRAW_FRAME* aFrame );
+
+ /**
+ * Function HitTestMarker
+ * tests if the given wxPoint is within the bounds of this object.
+ * @param ref_pos A wxPoint to test
+ * @return bool - true if a hit, else false
+ */
+ bool HitTestMarker( const wxPoint& ref_pos ) const;
+
+ /**
+ * Function GetBoundingBoxMarker
+ * returns the orthogonal, bounding box of this object for display purposes.
+ * This box should be an enclosing perimeter for visible components of this
+ * object, and the units should be in the pcb or schematic coordinate system.
+ * It is OK to overestimate the size by a few counts.
+ */
+ EDA_RECT GetBoundingBoxMarker() const;
+};
+
+
+#endif // _CLASS_MARKER_BASE_H
diff --git a/include/class_page_info.h b/include/class_page_info.h
new file mode 100644
index 0000000..a9896f6
--- /dev/null
+++ b/include/class_page_info.h
@@ -0,0 +1,238 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_page_info.h
+ */
+
+#ifndef CLASS_PAGE_INFO_H_
+#define CLASS_PAGE_INFO_H_
+
+#include <wx/wx.h>
+
+#include <richio.h> // for OUTPUTFORMATTER and IO_ERROR
+#include <base_units.h> // for IU_PER_MILS
+
+
+/**
+ * Class PAGE_INFO
+ * describes the page size and margins of a paper page on which to
+ * eventually print or plot. Paper sizes are often described in inches.
+ * Here paper is described in 1/1000th of an inch (mils). For convenience
+ * there are some read only accessors for internal units (IU), which is a compile
+ * time calculation, not runtime.
+ *
+ * @author Dick Hollenbeck
+ */
+class PAGE_INFO
+{
+public:
+
+ PAGE_INFO( const wxString& aType = PAGE_INFO::A3, bool IsPortrait = false );
+
+ // paper size names which are part of the public API, pass to SetType() or
+ // above constructor.
+
+ // these were once wxStrings, but it caused static construction sequence problems:
+ static const wxChar A4[];
+ static const wxChar A3[];
+ static const wxChar A2[];
+ static const wxChar A1[];
+ static const wxChar A0[];
+ static const wxChar A[];
+ static const wxChar B[];
+ static const wxChar C[];
+ static const wxChar D[];
+ static const wxChar E[];
+ static const wxChar GERBER[];
+ static const wxChar USLetter[];
+ static const wxChar USLegal[];
+ static const wxChar USLedger[];
+ static const wxChar Custom[]; ///< "User" defined page type
+
+
+ /**
+ * Function SetType
+ * sets the name of the page type and also the sizes and margins
+ * commonly associated with that type name.
+ *
+ * @param aStandardPageDescriptionName is a wxString constant giving one of:
+ * "A4" "A3" "A2" "A1" "A0" "A" "B" "C" "D" "E" "GERBER", "USLetter", "USLegal",
+ * "USLedger", or "User". If "User" then the width and height are custom,
+ * and will be set according to <b>previous</b> calls to
+ * static PAGE_INFO::SetUserWidthMils() and
+ * static PAGE_INFO::SetUserHeightMils();
+ * @param IsPortrait Set to true to set page orientation to portrait mode.
+ *
+ * @return bool - true if @a aStandarePageDescription was a recognized type.
+ */
+ bool SetType( const wxString& aStandardPageDescriptionName, bool IsPortrait = false );
+ const wxString& GetType() const { return m_type; }
+
+ /**
+ * Function IsDefault
+ * @return True if the object has the default page settings which are A3, landscape.
+ */
+ bool IsDefault() const { return m_type == PAGE_INFO::A3 && !m_portrait; }
+
+ /**
+ * Function IsCustom
+ * returns true if the type is Custom
+ */
+ bool IsCustom() const;
+
+ /**
+ * Function SetPortrait
+ * will rotate the paper page 90 degrees. This PAGE_INFO may either be in
+ * portrait or landscape mode. Use this function to change from one to the
+ * other mode.
+ * @param isPortrait if true and not already in portrait mode, will change
+ * this PAGE_INFO to portrait mode. Or if false and not already in landscape mode,
+ * will change this PAGE_INFO to landscape mode.
+ */
+ void SetPortrait( bool isPortrait );
+ bool IsPortrait() const { return m_portrait; }
+
+ /**
+ * Function GetWxOrientation.
+ * @return ws' style printing orientation (wxPORTRAIT or wxLANDSCAPE).
+ */
+ wxPrintOrientation GetWxOrientation() const { return IsPortrait() ? wxPORTRAIT : wxLANDSCAPE; }
+
+ /**
+ * Function GetPaperId
+ * @return wxPaperSize - wxPrintData's style paper id associated with
+ * page type name.
+ */
+ wxPaperSize GetPaperId() const { return m_paper_id; }
+
+ void SetWidthMils( int aWidthInMils );
+ int GetWidthMils() const { return m_size.x; }
+
+ void SetHeightMils( int aHeightInMils );
+ int GetHeightMils() const { return m_size.y; }
+
+ const wxSize& GetSizeMils() const { return m_size; }
+
+ // Accessors returning "Internal Units (IU)". IUs are mils in EESCHEMA,
+ // and either deci-mils or nanometers in PCBNew.
+#if defined(PCBNEW) || defined(EESCHEMA) || defined(GERBVIEW) || defined(PL_EDITOR)
+ int GetWidthIU() const { return IU_PER_MILS * GetWidthMils(); }
+ int GetHeightIU() const { return IU_PER_MILS * GetHeightMils(); }
+ const wxSize GetSizeIU() const { return wxSize( GetWidthIU(), GetHeightIU() ); }
+#endif
+
+ /**
+ * Function SetCustomWidthMils
+ * sets the width of Custom page in mils, for any custom page
+ * constructed or made via SetType() after making this call.
+ */
+ static void SetCustomWidthMils( int aWidthInMils );
+
+ /**
+ * Function SetCustomHeightMils
+ * sets the height of Custom page in mils, for any custom page
+ * constructed or made via SetType() after making this call.
+ */
+ static void SetCustomHeightMils( int aHeightInMils );
+
+ /**
+ * Function GetCustomWidthMils.
+ * @return int - custom paper width in mils.
+ */
+ static int GetCustomWidthMils() { return s_user_width; }
+
+ /**
+ * Function GetCustomHeightMils.
+ * @return int - custom paper height in mils.
+ */
+ static int GetCustomHeightMils() { return s_user_height; }
+
+ /**
+ * Function GetStandardSizes
+ * returns the standard page types, such as "A4", "A3", etc.
+ static wxArrayString GetStandardSizes();
+ */
+
+ /**
+ * Function Format
+ * outputs the page class to \a aFormatter in s-expression form.
+ *
+ * @param aFormatter The #OUTPUTFORMATTER object to write to.
+ * @param aNestLevel The indentation next level.
+ * @param aControlBits The control bit definition for object specific formatting.
+ * @throw IO_ERROR on write error.
+ */
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+protected:
+ // only the class implementation(s) may use this constructor
+ PAGE_INFO( const wxSize& aSizeMils, const wxString& aName, wxPaperSize aPaperId );
+
+
+private:
+
+ // standard pre-defined sizes
+ static const PAGE_INFO pageA4;
+ static const PAGE_INFO pageA3;
+ static const PAGE_INFO pageA2;
+ static const PAGE_INFO pageA1;
+ static const PAGE_INFO pageA0;
+ static const PAGE_INFO pageA;
+ static const PAGE_INFO pageB;
+ static const PAGE_INFO pageC;
+ static const PAGE_INFO pageD;
+ static const PAGE_INFO pageE;
+ static const PAGE_INFO pageGERBER;
+
+ static const PAGE_INFO pageUSLetter;
+ static const PAGE_INFO pageUSLegal;
+ static const PAGE_INFO pageUSLedger;
+
+ static const PAGE_INFO pageUser;
+
+ // all dimensions here are in mils
+
+ wxString m_type; ///< paper type: A4, A3, etc.
+ wxSize m_size; ///< mils
+
+/// Min and max page sizes for clamping.
+#define MIN_PAGE_SIZE 4000
+#define MAX_PAGE_SIZE 48000
+
+ bool m_portrait; ///< true if portrait, false if landscape
+
+ wxPaperSize m_paper_id; ///< wx' style paper id.
+
+ static int s_user_height;
+ static int s_user_width;
+
+ void updatePortrait();
+
+ void setMargins();
+};
+
+#endif // CLASS_PAGE_INFO_H_
diff --git a/include/class_pcb_screen.h b/include/class_pcb_screen.h
new file mode 100644
index 0000000..dc65b3d
--- /dev/null
+++ b/include/class_pcb_screen.h
@@ -0,0 +1,105 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_pcb_screen.h
+ */
+
+#ifndef CLASS_PCB_SCREEN_H_
+#define CLASS_PCB_SCREEN_H_
+
+
+#include <class_base_screen.h>
+#include <class_board_item.h>
+
+
+class UNDO_REDO_CONTAINER;
+
+
+/* Handle info to display a board */
+class PCB_SCREEN : public BASE_SCREEN
+{
+public:
+ LAYER_ID m_Active_Layer;
+ LAYER_ID m_Route_Layer_TOP;
+ LAYER_ID m_Route_Layer_BOTTOM;
+
+public:
+
+ /**
+ * Constructor
+ * @param aPageSizeIU is the size of the initial paper page in internal units.
+ */
+ PCB_SCREEN( const wxSize& aPageSizeIU );
+
+ ~PCB_SCREEN();
+
+ PCB_SCREEN* Next() const { return static_cast<PCB_SCREEN*>( Pnext ); }
+
+ void SetNextZoom();
+ void SetPreviousZoom();
+ void SetLastZoom();
+
+ virtual int MilsToIuScalar();
+
+ /**
+ * Function GetCurItem
+ * returns the currently selected BOARD_ITEM, overriding
+ * BASE_SCREEN::GetCurItem().
+ * @return BOARD_ITEM* - the one selected, or NULL.
+ */
+ BOARD_ITEM* GetCurItem() const
+ {
+ return (BOARD_ITEM*) BASE_SCREEN::GetCurItem();
+ }
+
+ /**
+ * Function SetCurItem
+ * sets the currently selected object, m_CurrentItem.
+ * @param aItem Any object derived from BOARD_ITEM
+ */
+ void SetCurItem( BOARD_ITEM* aItem ) { BASE_SCREEN::SetCurItem( (EDA_ITEM*)aItem ); }
+
+ /* full undo redo management : */
+
+ // use BASE_SCREEN::ClearUndoRedoList()
+ // use BASE_SCREEN::PushCommandToUndoList( PICKED_ITEMS_LIST* aItem )
+ // use BASE_SCREEN::PushCommandToRedoList( PICKED_ITEMS_LIST* aItem )
+
+ /**
+ * Function ClearUndoORRedoList
+ * free the undo or redo list from List element
+ * Wrappers are deleted.
+ * datas pointed by wrappers are deleted if not in use in schematic
+ * i.e. when they are copy of a schematic item or they are no more in use
+ * (DELETED)
+ * @param aList = the UNDO_REDO_CONTAINER to clear
+ * @param aItemCount = the count of items to remove. < 0 for all items
+ * items are removed from the beginning of the list.
+ * So this function can be called to remove old commands
+ */
+ void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
+};
+
+#endif // CLASS_PCB_SCREEN_H_
diff --git a/include/class_title_block.h b/include/class_title_block.h
new file mode 100644
index 0000000..7259382
--- /dev/null
+++ b/include/class_title_block.h
@@ -0,0 +1,165 @@
+#ifndef TITLE_BLOCK_H_
+#define TITLE_BLOCK_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/string.h>
+
+
+class OUTPUTFORMATTER;
+struct IO_ERROR;
+
+
+/**
+ * Class TITLE_BLOCK
+ * holds the information shown in the lower right corner of a plot, printout, or
+ * editing view.
+ *
+ * @author Dick Hollenbeck
+ */
+class TITLE_BLOCK
+{
+ // Texts are stored in wxArraystring.
+ // textsIdx gives the index of known texts in
+ // this array
+ enum textsIdx
+ {
+ titleIdx = 0,
+ dateIdx,
+ revisionIdx,
+ companyIdx,
+ m_commentIdx
+ };
+
+public:
+
+ TITLE_BLOCK() {};
+ virtual ~TITLE_BLOCK() {}; // a virtual dtor seems needed to build
+ // python lib without warning
+
+ void SetTitle( const wxString& aTitle )
+ {
+ setTbText( titleIdx, aTitle );
+ }
+
+ const wxString& GetTitle() const
+ {
+ return getTbText( titleIdx );
+ }
+
+ /**
+ * Function SetDate
+ * sets the date field, and defaults to the current time and date.
+ */
+ void SetDate( const wxString& aDate )
+ {
+ setTbText( dateIdx, aDate );
+ }
+
+ const wxString& GetDate() const
+ {
+ return getTbText( dateIdx );
+ }
+
+ void SetRevision( const wxString& aRevision )
+ {
+ setTbText( revisionIdx, aRevision );
+ }
+
+ const wxString& GetRevision() const
+ {
+ return getTbText( revisionIdx );
+ }
+
+ void SetCompany( const wxString& aCompany )
+ {
+ setTbText( companyIdx, aCompany );
+ }
+
+ const wxString& GetCompany() const
+ {
+ return getTbText( companyIdx );
+ }
+
+ void SetComment( int aIdx, const wxString& aComment )
+ {
+ aIdx += m_commentIdx;
+ return setTbText( aIdx, aComment );
+ }
+
+ const wxString& GetComment( int aIdx ) const
+ {
+ aIdx += m_commentIdx;
+ return getTbText( aIdx );
+ }
+
+ // Only for old code compatibility. Will be removed later
+ void SetComment1( const wxString& aComment ) { SetComment( 0, aComment ); }
+ void SetComment2( const wxString& aComment ) { SetComment( 1, aComment ); }
+ void SetComment3( const wxString& aComment ) { SetComment( 2, aComment ); }
+ void SetComment4( const wxString& aComment ) { SetComment( 3, aComment ); }
+ const wxString& GetComment1( ) const { return GetComment( 0 ); }
+ const wxString& GetComment2( ) const { return GetComment( 1 ); }
+ const wxString& GetComment3( ) const { return GetComment( 2 ); }
+ const wxString& GetComment4( ) const { return GetComment( 3 ); }
+
+
+ void Clear()
+ {
+ m_tbTexts.Clear();
+ }
+
+ /**
+ * Function Format
+ * outputs the object to \a aFormatter in s-expression form.
+ *
+ * @param aFormatter The #OUTPUTFORMATTER object to write to.
+ * @param aNestLevel The indentation next level.
+ * @param aControlBits The control bit definition for object specific formatting.
+ * @throw IO_ERROR on write error.
+ */
+ virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+private:
+ wxArrayString m_tbTexts;
+
+ void setTbText( int aIdx, const wxString& aText )
+ {
+ if( (int)m_tbTexts.GetCount() <= aIdx )
+ m_tbTexts.Add( wxEmptyString, aIdx + 1 - m_tbTexts.GetCount() );
+ m_tbTexts[aIdx] = aText;
+ }
+
+ const wxString& getTbText( int aIdx ) const
+ {
+ static const wxString m_emptytext;
+
+ if( (int)m_tbTexts.GetCount() > aIdx )
+ return m_tbTexts[aIdx];
+ else
+ return m_emptytext;
+ }
+};
+
+#endif // TITLE_BLOCK_H_
diff --git a/include/class_undoredo_container.h b/include/class_undoredo_container.h
new file mode 100644
index 0000000..13c9e85
--- /dev/null
+++ b/include/class_undoredo_container.h
@@ -0,0 +1,328 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 jean-pierre.charras@gipsa-lab.inpg.fr
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2009 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _CLASS_UNDOREDO_CONTAINER_H
+#define _CLASS_UNDOREDO_CONTAINER_H
+#include <vector>
+
+#include <base_struct.h>
+
+
+class PICKED_ITEMS_LIST;
+
+
+/**
+ * Undo Redo considerations:
+ * Basically we have 3 cases
+ * New item
+ * Deleted item
+ * Modified item
+ * there is also a specific case in Eeschema, when wires are modified
+ * If an item is modified, a copy of the "old" item parameters value is held.
+ * When an item is deleted or added (new item) the pointer points the item, and there is
+ * no other copy.
+ * However, because there are some commands that concern a lot of items
+ * and modify them, but modifications are easy to undo/redo,
+ * so a copy of old items is not necessary. They are block command
+ * Move block
+ * Rotate block
+ * Mirror or Flip block
+ * and they are undo/redo by the same command
+ */
+
+
+/* Type of undo/redo operations
+ * each type must be redo/undone by a specific operation
+ */
+enum UNDO_REDO_T {
+ UR_UNSPECIFIED = 0, // illegal
+ UR_CHANGED, // params of items have a value changed: undo is made by exchange
+ // values with a copy of these values
+ UR_NEW, // new item, undo by changing in deleted
+ UR_DELETED, // deleted item, undo by changing in deleted
+ UR_MOVED, // moved item, undo by move it
+ UR_MIRRORED_X, // mirrored item, undo by mirror X
+ UR_MIRRORED_Y, // mirrored item, undo by mirror Y
+ UR_ROTATED, // Rotated item (counterclockwise), undo by rotating it
+ UR_ROTATED_CLOCKWISE, // Rotated item (clockwise), undo by rotating it
+ UR_FLIPPED, // flipped (board items only), undo by flipping it
+ UR_WIRE_IMAGE, // Specific to Eeschema for handling wires changes.
+ UR_MODEDIT, // Specific to the module editor (modedit creates a full copy of
+ // the current module when changed)
+ UR_LIBEDIT, // Specific to the component editor (libedit creates a full copy
+ // of the current component when changed)
+ UR_EXCHANGE_T ///< Use for changing the schematic text type where swapping
+ ///< data structure is insufficient to restor the change.
+};
+
+
+class ITEM_PICKER
+{
+private:
+ STATUS_FLAGS m_pickerFlags; /* a copy of m_Flags member. useful in mode/drag
+ * undo/redo commands */
+ UNDO_REDO_T m_undoRedoStatus; /* type of operation to undo/redo for this item */
+ EDA_ITEM* m_pickedItem; /* Pointer on the schematic or board item that is concerned
+ * (picked), or in undo redo commands, the copy of an
+ * edited item. */
+ KICAD_T m_pickedItemType; /* type of schematic or board item that is concerned */
+
+ EDA_ITEM* m_link; /* Pointer on an other item. Used in undo redo command
+ * used when a duplicate exists i.e. when an item is
+ * modified, and the copy of initial item exists (the
+ * duplicate) m_Item points the duplicate (i.e the old
+ * copy of an active item) and m_Link points the active
+ * item in schematic */
+
+public:
+ ITEM_PICKER( EDA_ITEM* aItem = NULL, UNDO_REDO_T aUndoRedoStatus = UR_UNSPECIFIED );
+
+ EDA_ITEM* GetItem() const { return m_pickedItem; }
+
+ void SetItem( EDA_ITEM* aItem )
+ {
+ m_pickedItem = aItem;
+ m_pickedItemType = aItem ? aItem->Type() : TYPE_NOT_INIT;
+ }
+
+ KICAD_T GetItemType() const { return m_pickedItemType; }
+
+ void SetStatus( UNDO_REDO_T aStatus ) { m_undoRedoStatus = aStatus; }
+
+ UNDO_REDO_T GetStatus() const { return m_undoRedoStatus; }
+
+ void SetFlags( STATUS_FLAGS aFlags ) { m_pickerFlags = aFlags; }
+
+ STATUS_FLAGS GetFlags() const { return m_pickerFlags; }
+
+ void SetLink( EDA_ITEM* aItem ) { m_link = aItem; }
+
+ EDA_ITEM* GetLink() const { return m_link; }
+};
+
+
+/**
+ * Class PICKED_ITEMS_LIST
+ * is a holder to handle information on schematic or board items.
+ * The information held is a pointer on each item, and the command made.
+ */
+class PICKED_ITEMS_LIST
+{
+public:
+ UNDO_REDO_T m_Status; /* info about operation to undo/redo for this item. can be
+ * UR_UNSPECIFIED */
+ wxPoint m_TransformPoint; /* used to undo redo command by the same command: usually
+ * need to know the rotate point or the move vector */
+
+private:
+ std::vector <ITEM_PICKER> m_ItemsList;
+
+public:
+ PICKED_ITEMS_LIST();
+ ~PICKED_ITEMS_LIST();
+
+ /**
+ * Function PushItem
+ * pushes \a aItem to the top of the list
+ * @param aItem Picker to push on to the list.
+ */
+ void PushItem( const ITEM_PICKER& aItem );
+
+ /**
+ * Function PopItem
+ * @return The picker removed from the top of the list.
+ */
+ ITEM_PICKER PopItem();
+
+ /**
+ * Function IsItemInList
+ * @return True if \a aItem is found in the pick list.
+ */
+ bool ContainsItem( const EDA_ITEM* aItem ) const;
+
+ /**
+ * Function FindItem
+ * @return Index of the searched item. If the item is not stored in the list, negative value
+ * is returned.
+ */
+ int FindItem( const EDA_ITEM* aItem ) const;
+
+ /**
+ * Function ClearItemsList
+ * deletes only the list of pickers, NOT the picked data itself.
+ */
+ void ClearItemsList();
+
+ /**
+ * Function ClearListAndDeleteItems
+ * deletes the list of pickers, AND the data pointed by m_PickedItem or
+ * m_PickedItemLink, according to the type of undo/redo command recorded
+ */
+ void ClearListAndDeleteItems();
+
+ /**
+ * Function GetCount
+ * @return The count of pickers stored in this list.
+ */
+ unsigned GetCount() const
+ {
+ return m_ItemsList.size();
+ }
+
+ /**
+ * Function ReversePickersListOrder
+ * reverses the order of pickers stored in this list.
+ * <p>
+ * This is useful when pop a list from Undo to Redo (and vice-versa) because
+ * sometimes undo (or redo) a command needs to keep the order of successive
+ * changes. Obviously, undo and redo are in reverse order
+ */
+ void ReversePickersListOrder();
+
+ /**
+ * Function GetItemWrapper
+ * @return The picker of a picked item.
+ * @param aIdx Index of the picker in the picked list
+ * if this picker does not exist, a picker is returned,
+ * with its members set to 0 or NULL
+ */
+ ITEM_PICKER GetItemWrapper( unsigned int aIdx ) const;
+
+ /**
+ * Function GetPickedItem
+ * @return A pointer to the picked item
+ * @param aIdx Index of the picked item in the picked list
+ */
+ EDA_ITEM* GetPickedItem( unsigned int aIdx ) const;
+
+ /**
+ * Function GetPickedItemLink
+ * @return link of the picked item, or null if does not exist
+ * @param aIdx Index of the picked item in the picked list
+ */
+ EDA_ITEM* GetPickedItemLink( unsigned int aIdx ) const;
+
+ /**
+ * Function GetPickedItemStatus
+ * @return The type of undo/redo operation associated to the picked item,
+ * or UR_UNSPECIFIED if does not exist
+ * @param aIdx Index of the picked item in the picked list
+ */
+ UNDO_REDO_T GetPickedItemStatus( unsigned int aIdx ) const;
+
+ /**
+ * Function GetPickerFlags
+ * returns the value of the picker flag.
+ * @param aIdx Index of the picker in the picked list
+ * @return The value stored in the picker, if the picker exists, or 0 if does not exist
+ */
+ STATUS_FLAGS GetPickerFlags( unsigned aIdx ) const;
+
+ /**
+ * Function SetPickedItem
+ * @param aItem A pointer to the item to pick
+ * @param aIdx Index of the picker in the picked list
+ * @return True if the picker exists or false if does not exist
+ */
+ bool SetPickedItem( EDA_ITEM* aItem, unsigned aIdx );
+
+ /**
+ * Function SetPickedItem
+ * @param aItem A pointer to the item to pick
+ * @param aStatus The type of undo/redo operation associated to the item to pick
+ * @param aIdx Index of the picker in the picked list
+ * @return True if the picker exists or false if does not exist
+ */
+ bool SetPickedItem( EDA_ITEM* aItem, UNDO_REDO_T aStatus, unsigned aIdx );
+
+ /**
+ * Function SetPickedItemLink
+ * set the link associated to a given picked item.
+ * @param aLink = the link to the item associated to the picked item
+ * @param aIdx = index of the picker in the picked list
+ * @return true if the picker exists, or false if does not exist
+ */
+ bool SetPickedItemLink( EDA_ITEM* aLink, unsigned aIdx );
+
+ /**
+ * Function SetPickedItemStatus
+ * sets the type of undo/redo operation for a given picked item.
+ * @param aStatus The type of undo/redo operation associated to the picked item
+ * @param aIdx Index of the picker in the picked list
+ * @return True if the picker exists or false if does not exist
+ */
+ bool SetPickedItemStatus( UNDO_REDO_T aStatus, unsigned aIdx );
+
+ /**
+ * Function SetPickerFlags
+ * set the flags of the picker (usually to the picked item m_Flags value)
+ * @param aFlags The flag value to save in picker
+ * @param aIdx Index of the picker in the picked list
+ * @return True if the picker exists or false if does not exist
+ */
+ bool SetPickerFlags( STATUS_FLAGS aFlags, unsigned aIdx );
+
+ /**
+ * Function RemovePicker
+ * removes one entry (one picker) from the list of picked items.
+ * @param aIdx Index of the picker in the picked list
+ * @return True if ok or false if did not exist
+ */
+ bool RemovePicker( unsigned aIdx );
+
+ /**
+ * Function CopyList
+ * copies all data from aSource to the list.
+ * Items picked are not copied. just pointer in them are copied
+ * @param aSource The list of items to copy to the list.
+ */
+ void CopyList( const PICKED_ITEMS_LIST& aSource );
+};
+
+
+/**
+ * Class UNDO_REDO_CONTAINER
+ * is a holder to handle alist of undo (or redo) command.
+ * this class handles a list of ITEM_PICKER (each manage one schematic or board item).
+ */
+class UNDO_REDO_CONTAINER
+{
+public:
+ std::vector <PICKED_ITEMS_LIST*> m_CommandsList; // the list of possible undo/redo commands
+
+public:
+
+ UNDO_REDO_CONTAINER();
+ ~UNDO_REDO_CONTAINER();
+
+ void PushCommand( PICKED_ITEMS_LIST* aCommand );
+
+ PICKED_ITEMS_LIST* PopCommand();
+
+ void ClearCommandList();
+};
+
+
+#endif // _CLASS_UNDOREDO_CONTAINER_H
diff --git a/include/class_worksheet_dataitem.h b/include/class_worksheet_dataitem.h
new file mode 100644
index 0000000..47f72cb
--- /dev/null
+++ b/include/class_worksheet_dataitem.h
@@ -0,0 +1,537 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_worksheet_dataitem.h
+ * @brief description of graphic items and texts to build a title block
+ */
+
+#ifndef CLASS_WORKSHEET_DATA_ITEM_H
+#define CLASS_WORKSHEET_DATA_ITEM_H
+
+#include <math/vector2d.h>
+#include <eda_text.h>
+#include <class_bitmap_base.h>
+
+class WS_DRAW_ITEM_TEXT; // Forward declaration
+
+#define TB_DEFAULT_TEXTSIZE 1.5 // default worksheet text size in mm
+
+// Text attributes set in m_flags (ORed bits)
+#define USE_BOLD 1 // has meaning for texts
+#define USE_THICK_LINE 1 // equivalent to bold for lines
+#define USE_ITALIC (1<<1) // has meaning for texts
+#define USE_ALT_COLOR (1<<2)
+#define SELECTED_STATE (1<<3) // When set, use the hight light color to draw item
+#define NEW_ITEM (1<<4) // Set for new items which can be deleted
+ // by an abort command
+#define LOCATE_STARTPOINT (1<<5) // Used in locate function:set by locate function
+ // if the start point is located
+#define LOCATE_ENDPOINT (1<<6) // Used in locate function:set by locate function
+ // if the end point is located
+#define PAGE1OPTION (3<<7) // flag to manage items drawn or not drawn only
+ // on page 1: NONE = item on all pages
+#define PAGE1OPTION_NONE (0<<7) // NONE = item on all pages
+#define PAGE1OPTION_PAGE1ONLY (1<<7) // = item only on page 1
+#define PAGE1OPTION_NOTONPAGE1 (2<<7) // = item on all pages but page 1
+
+// A coordinate is relative to a page corner.
+// Any of the 4 corners can be a reference.
+// The default is the right bottom corner
+enum corner_anchor
+{
+ RB_CORNER, // right bottom corner
+ RT_CORNER, // right top corner
+ LB_CORNER, // left bottom corner
+ LT_CORNER, // left top corner
+};
+
+// a coordinate point
+// The position is always relative to the corner anchor
+// Note the coordinate is from the anchor point
+// to the opposite corner.
+class POINT_COORD
+{
+public:
+ DPOINT m_Pos;
+ int m_Anchor;
+public:
+ POINT_COORD() { m_Anchor = RB_CORNER; }
+ POINT_COORD( DPOINT aPos, enum corner_anchor aAnchor = RB_CORNER )
+ {
+ m_Pos = aPos;
+ m_Anchor = aAnchor;
+ }
+};
+
+
+// Work sheet structure type definitions.
+// Basic items are:
+// * segment and rect (defined by 2 points)
+// * text (defined by a coordinate), the text and its justifications
+// * poly polygon defined by a coordinate, and a set of list of corners
+// ( because we use it for logos, there are more than one polygon
+// in this description
+class WORKSHEET_DATAITEM
+{
+public:
+ enum WS_ItemType {
+ WS_TEXT,
+ WS_SEGMENT,
+ WS_RECT,
+ WS_POLYPOLYGON,
+ WS_BITMAP
+ };
+
+protected:
+ WS_ItemType m_type;
+ int m_flags;
+
+public:
+ wxString m_Name; // a item name used in page layout
+ // editor to identify items
+ wxString m_Info; // a comment, only useful in page
+ // layout editor
+ POINT_COORD m_Pos;
+ POINT_COORD m_End;
+ double m_LineWidth;
+ int m_RepeatCount; // repeat count for duplicate items
+ DPOINT m_IncrementVector; // For duplicate items: move vector
+ // for position increment
+ int m_IncrementLabel;
+
+ // These variables are static, because these values are common to all
+ // instances of WORKSHEET_DATAITEM.
+ // They are default or common values.
+ static double m_WSunits2Iu; // conversion factor between
+ // ws units (mils) and draw/plot units
+ static DPOINT m_RB_Corner; // cordinates of the right bottom corner
+ // (ws units)
+ static DPOINT m_LT_Corner; // cordinates of the left top corner
+ // (ws units)
+ static double m_DefaultLineWidth; // Default line width,
+ // when not defined inside a line
+ // or a rect
+ static DSIZE m_DefaultTextSize; // Default text size,
+ // when not defined inside a tbtext
+ static double m_DefaultTextThickness;// Default text thickness,
+ // when not defined inside a tbtext
+ static bool m_SpecialMode; // Used in page layout editor
+ // When set to true, base texts
+ // instead of full texts are displayed
+ static EDA_COLOR_T m_Color; // the default color to draw items
+ static EDA_COLOR_T m_AltColor; // an alternate color to draw items
+ static EDA_COLOR_T m_SelectedColor; // the color to draw selected items
+ // (used in page layout editor
+
+
+public:
+ WORKSHEET_DATAITEM( WS_ItemType aType );
+
+ virtual ~WORKSHEET_DATAITEM() {}
+
+ void SetStart( double aPosx, double aPosy, enum corner_anchor aAnchor = RB_CORNER )
+ {
+ m_Pos.m_Pos.x = aPosx;
+ m_Pos.m_Pos.y = aPosy;
+ m_Pos.m_Anchor = aAnchor;
+ }
+
+ void SetEnd( double aPosx, double aPosy, enum corner_anchor aAnchor = RB_CORNER )
+ {
+ m_End.m_Pos.x = aPosx;
+ m_End.m_Pos.y = aPosy;
+ m_End.m_Anchor = aAnchor;
+ }
+
+ // Accessors:
+ WS_ItemType GetType() const { return m_type; }
+ int GetFlags() const { return m_flags; }
+ void SetFlags( int aMask ) { m_flags |= aMask; }
+ void ClearFlags( int aMask ) { m_flags &= ~aMask; }
+
+ /**
+ * @return true if the item has a end point (segment; rect)
+ * of false (text, polugon)
+ */
+ virtual bool HasEndPoint() { return true; }
+
+ /**
+ * @return 0 if the item has no specific option for page 1
+ * 1 if the item is only on page 1
+ * -1 if the item is not on page 1
+ */
+ int GetPage1Option();
+
+ /**
+ * Set the option for page 1
+ * @param aChoice = 0 if the item has no specific option for page 1
+ * > 0 if the item is only on page 1
+ * < 0 if the item is not on page 1
+ */
+ void SetPage1Option( int aChoice );
+
+ // Coordinate handling
+ const wxPoint GetStartPosUi( int ii = 0 ) const;
+ const wxPoint GetEndPosUi( int ii = 0 ) const;
+ const DPOINT GetStartPos( int ii = 0 ) const;
+ const DPOINT GetEndPos( int ii = 0 ) const;
+ virtual int GetPenSizeUi()
+ {
+ if( m_LineWidth )
+ return KiROUND( m_LineWidth * m_WSunits2Iu );
+ else
+ return KiROUND( m_DefaultLineWidth * m_WSunits2Iu );
+ }
+
+ static int GetMarkerSizeUi()
+ {
+ return KiROUND( 0.5 * m_WSunits2Iu );
+ }
+
+ /**
+ * move item to a new position
+ * @param aPosition = the new position of item, in mm
+ */
+ void MoveTo( DPOINT aPosition );
+
+ /**
+ * move item to a new position
+ * @param aPosition = the new position of the starting point in graphic units
+ */
+ void MoveToUi( wxPoint aPosition );
+
+ /**
+ * move the starting point of the item to a new position
+ * @param aPosition = the new position of the starting point, in mm
+ */
+ void MoveStartPointTo( DPOINT aPosition );
+
+ /**
+ * move the starting point of the item to a new position
+ * @param aPosition = the new position of item in graphic units
+ */
+ void MoveStartPointToUi( wxPoint aPosition );
+
+
+ /**
+ * move the ending point of the item to a new position
+ * has meaning only for items defined by 2 points
+ * (segments and rectangles)
+ * @param aPosition = the new position of the ending point, in mm
+ */
+ void MoveEndPointTo( DPOINT aPosition );
+
+ /**
+ * move the ending point of the item to a new position
+ * has meaning only for items defined by 2 points
+ * (segments and rectangles)
+ * @param aPosition = the new position of the ending point in graphic units
+ */
+ void MoveEndPointToUi( wxPoint aPosition );
+
+ /**
+ * @return true if the item is inside the rectangle defined by the
+ * 4 corners, false otherwise.
+ */
+ virtual bool IsInsidePage( int ii ) const;
+
+ const wxString GetClassName() const;
+
+ /**
+ * @return true if the selected state on ON
+ */
+ bool IsSelected() { return (m_flags & SELECTED_STATE) != 0; }
+
+ /**
+ * Function SetSelected
+ * Toggles on/off the selected flag (used in edition functions
+ * @param aState = the flag value
+ */
+ void SetSelected( bool aState )
+ {
+ if( aState )
+ m_flags |= SELECTED_STATE;
+ else
+ m_flags &= ~SELECTED_STATE;
+ }
+
+ bool UseAltColor() {return m_flags & USE_ALT_COLOR; }
+
+ EDA_COLOR_T GetItemColor()
+ {
+ if( IsSelected() )
+ return m_SelectedColor;
+
+ if( UseAltColor() )
+ return m_AltColor;
+
+ return m_Color;
+ }
+};
+
+
+class WORKSHEET_DATAITEM_POLYPOLYGON : public WORKSHEET_DATAITEM
+{
+public:
+ double m_Orient; // Orientation in degrees
+ std::vector<DPOINT> m_Corners; // corner list
+
+private:
+ std::vector<unsigned> m_polyIndexEnd; // index of the last point of each polygon
+ DPOINT m_minCoord; // min coord of corners, relative to m_Pos
+ DPOINT m_maxCoord; // max coord of corners, relative to m_Pos
+
+public:
+ WORKSHEET_DATAITEM_POLYPOLYGON( );
+
+ virtual int GetPenSizeUi()
+ {
+ return KiROUND( m_LineWidth * m_WSunits2Iu );
+ }
+
+ /**
+ * @return false (no end point)
+ */
+ virtual bool HasEndPoint() { return false; };
+
+ /**
+ * add a corner in corner list
+ * @param aCorner: the item to append
+ */
+ void AppendCorner( const DPOINT& aCorner )
+ {
+ m_Corners.push_back( aCorner );
+ }
+
+ /**
+ * Closes the current contour, by storing the index of the last corner
+ * of the current polygon in m_polyIndexEnd.
+ */
+ void CloseContour()
+ {
+ m_polyIndexEnd.push_back( m_Corners.size() -1 );
+ }
+
+ /**
+ * @return the count of contours in the poly polygon
+ */
+ int GetPolyCount() const { return (int) m_polyIndexEnd.size(); }
+
+ /**
+ * @return the index of the first corner of the contour aCountour
+ * @param aContour = the index of the contour
+ */
+ unsigned GetPolyIndexStart( unsigned aContour) const
+ {
+ if( aContour == 0 )
+ return 0;
+ else
+ return m_polyIndexEnd[aContour-1] + 1;
+ }
+
+ /**
+ * @return the index of the last corner of the contour aCountour
+ * @param aContour = the index of the contour
+ */
+ unsigned GetPolyIndexEnd( unsigned aContour) const
+ {
+ return m_polyIndexEnd[aContour];
+ }
+
+ /**
+ * @return the coordinate (in mm) of the corner aIdx,
+ * for the repeated item aRepeat
+ */
+ const DPOINT GetCornerPosition( unsigned aIdx, int aRepeat = 0 ) const;
+
+ /**
+ * @return the coordinate (in draw/plot units) of the corner aIdx,
+ * for the repeated item aRepeat
+ */
+ const wxPoint GetCornerPositionUi( unsigned aIdx, int aRepeat = 0 ) const;
+
+ /**
+ * calculate the bounding box of the set polygons
+ */
+ void SetBoundingBox();
+
+ bool IsInsidePage( int ii ) const;
+};
+
+
+class WORKSHEET_DATAITEM_TEXT : public WORKSHEET_DATAITEM
+{
+public:
+ wxString m_TextBase; // The basic text, with format symbols
+ wxString m_FullText; // The expanded text, shown on screen
+ double m_Orient; // Orientation in degrees
+ EDA_TEXT_HJUSTIFY_T m_Hjustify;
+ EDA_TEXT_VJUSTIFY_T m_Vjustify;
+ DSIZE m_TextSize;
+ DSIZE m_BoundingBoxSize; // When not null, this is the max
+ // size of the full text.
+ // the text size will be modified
+ // to keep the full text insite this
+ // bound.
+ DSIZE m_ConstrainedTextSize; // Actual text size, if constrained by
+ // the m_BoundingBoxSize constraint
+
+
+public:
+ WORKSHEET_DATAITEM_TEXT( const wxString& aTextBase );
+
+ /**
+ * @return false (no end point)
+ */
+ virtual bool HasEndPoint() { return false; };
+
+ virtual int GetPenSizeUi()
+ {
+ if( m_LineWidth )
+ return KiROUND( m_LineWidth * m_WSunits2Iu );
+ else
+ return KiROUND( m_DefaultTextThickness * m_WSunits2Iu );
+ }
+
+ /**
+ * move item to a new position
+ * @param aPosition = the new position of item
+ */
+ void MoveTo( DPOINT aPosition );
+
+ /**
+ * transfert the text justification and orientation
+ * to aGText
+ */
+ void TransfertSetupToGraphicText( WS_DRAW_ITEM_TEXT* aGText );
+
+ /**
+ * Try to build text wihich is an increment of m_TextBase
+ * has meaning only if m_TextBase is a basic text (one char)
+ * If the basic char is a digit, build a number
+ * If the basic char is a letter, use the letter with ascii code
+ * aIncr + (basic char ascc code)
+ * @param aIncr = the increment value
+ * return the incremented label in m_FullText
+ */
+ void IncrementLabel( int aIncr );
+
+ /**
+ * Calculates m_ConstrainedTextSize from m_TextSize
+ * to keep the X size and the full Y size of the text
+ * smaller than m_BoundingBoxSize
+ * if m_BoundingBoxSize.x or m_BoundingBoxSize.y > 0
+ * if m_BoundingBoxSize.x or m_BoundingBoxSize.y == 0
+ * the corresponding text size is not constrained
+ */
+ void SetConstrainedTextSize();
+
+
+ /** Replace the '\''n' sequence by EOL
+ * and the sequence '\''\' by only one '\'
+ * inside m_FullText
+ * @return true if the EOL symbol is found or is inserted (multiline text)
+ */
+ bool ReplaceAntiSlashSequence();
+
+ /**
+ * @return true is a bold font should be selected
+ */
+ bool IsBold() { return (m_flags & USE_BOLD) != 0; }
+
+ /**
+ * Function SetBold
+ * Toggles on/off the bold option flag
+ * @param aState = the bold option value
+ */
+ void SetBold( bool aState )
+ {
+ if( aState )
+ m_flags |= USE_BOLD;
+ else
+ m_flags &= ~USE_BOLD;
+ }
+
+ /**
+ * @return true is an italic font should be selected
+ */
+ bool IsItalic() const { return (m_flags & USE_ITALIC) != 0; }
+
+ /**
+ * Function SetItalic
+ * Toggles on/off the italic option flag
+ * @param aState = the italic option value
+ */
+ void SetItalic( bool aState )
+ {
+ if( aState )
+ m_flags |= USE_ITALIC;
+ else
+ m_flags &= ~USE_ITALIC;
+ }
+};
+
+
+class BITMAP_BASE;
+class WORKSHEET_DATAITEM_BITMAP : public WORKSHEET_DATAITEM
+{
+public:
+ BITMAP_BASE* m_ImageBitmap;
+
+public:
+ WORKSHEET_DATAITEM_BITMAP(BITMAP_BASE* aImage)
+ : WORKSHEET_DATAITEM( WS_BITMAP )
+ {
+ m_ImageBitmap = aImage;
+ }
+
+ /**
+ * @return false (no end point)
+ */
+ virtual bool HasEndPoint() { return false; }
+
+ /**
+ * @return the PPI of the bitmap
+ */
+ int GetPPI() const;
+
+ /**
+ * adjust the PPI of the bitmap
+ * @param aBitmapPPI = the ned PPI for the bitmap
+ */
+ void SetPPI( int aBitmapPPI );
+
+ /**
+ * set the pixel scale factor of the bitmap
+ * this factor depend on the application internal unit
+ * and the pixel per inch bitmap factor
+ * the pixel scale factor is the pixel size to application internal unit
+ * and should be initialized before printing or drawing the bitmap
+ */
+ void SetPixelScaleFactor();
+};
+
+
+#endif // CLASS_WORKSHEET_DATA_ITEM_H
diff --git a/include/colors.h b/include/colors.h
new file mode 100644
index 0000000..6b58bb7
--- /dev/null
+++ b/include/colors.h
@@ -0,0 +1,213 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef COLORS_H_
+#define COLORS_H_
+
+#include <wx/wx.h>
+
+/** The color enumeration. Also contains a flag and the alpha value in
+ * the upper bits
+ */
+enum EDA_COLOR_T
+{
+ UNSPECIFIED_COLOR = -1,
+ BLACK = 0,
+ DARKDARKGRAY,
+ DARKGRAY,
+ LIGHTGRAY,
+ WHITE,
+ LIGHTYELLOW,
+ DARKBLUE,
+ DARKGREEN,
+ DARKCYAN,
+ DARKRED,
+ DARKMAGENTA,
+ DARKBROWN,
+ BLUE,
+ GREEN,
+ CYAN,
+ RED,
+ MAGENTA,
+ BROWN,
+ LIGHTBLUE,
+ LIGHTGREEN,
+ LIGHTCYAN,
+ LIGHTRED,
+ LIGHTMAGENTA,
+ YELLOW,
+ PUREBLUE,
+ PUREGREEN,
+ PURECYAN,
+ PURERED,
+ PUREMAGENTA,
+ PUREYELLOW,
+ NBCOLORS, ///< Number of colors
+ HIGHLIGHT_FLAG = ( 1<<19 ),
+ MASKCOLOR = 31 ///< mask for color index into g_ColorRefs[]
+};
+
+/// Checked cast. Use only when necessary (usually I/O)
+inline EDA_COLOR_T ColorFromInt( int aColor )
+{
+ wxASSERT( aColor >= UNSPECIFIED_COLOR && aColor < NBCOLORS );
+ return static_cast<EDA_COLOR_T>( aColor );
+}
+
+inline EDA_COLOR_T NextColor( EDA_COLOR_T& aColor )
+{
+ // We have to accept NBCOLORS for loop termination conditions
+ wxASSERT( aColor >= UNSPECIFIED_COLOR && aColor <= NBCOLORS );
+ aColor = static_cast<EDA_COLOR_T>( int( aColor ) + 1 );
+ return aColor;
+}
+
+/// Return only the plain color part
+inline EDA_COLOR_T ColorGetBase( EDA_COLOR_T aColor)
+{
+ EDA_COLOR_T base = static_cast<EDA_COLOR_T>( aColor & MASKCOLOR );
+ return base;
+}
+
+/// Mix two colors in some way (hopefully like a logical OR)
+EDA_COLOR_T ColorMix( EDA_COLOR_T aColor1, EDA_COLOR_T aColor2 );
+
+/// Force the color part of a color to darkdarkgray
+inline void ColorTurnToDarkDarkGray( EDA_COLOR_T *aColor )
+{
+ *aColor = static_cast<EDA_COLOR_T>( (int(*aColor) & ~MASKCOLOR) | DARKDARKGRAY );
+}
+
+inline void ColorChangeHighlightFlag( EDA_COLOR_T *aColor, bool flag )
+{
+ if( flag )
+ *aColor = static_cast<EDA_COLOR_T>( (int(*aColor) | HIGHLIGHT_FLAG ) );
+ else
+ *aColor = static_cast<EDA_COLOR_T>( (int(*aColor) & ~HIGHLIGHT_FLAG ) );
+}
+
+/**
+ * Function SetAlpha
+ * ORs in the alpha blend parameter in to a color index.
+ */
+inline void SetAlpha( EDA_COLOR_T* aColor, unsigned char aBlend )
+{
+ const unsigned char MASKALPHA = 0xFF;
+
+ *aColor = static_cast<EDA_COLOR_T>((*aColor & ~(MASKALPHA << 24))
+ | ((aBlend & MASKALPHA) << 24));
+}
+
+/**
+ * Function GetAlpha
+ * returns the alpha blend parameter from a color index.
+ */
+inline unsigned char GetAlpha( EDA_COLOR_T aColor )
+{
+ const unsigned char MASKALPHA = 0xFF;
+ return (aColor >> 24) & MASKALPHA;
+}
+
+
+struct StructColors
+{
+ unsigned char m_Blue;
+ unsigned char m_Green;
+ unsigned char m_Red;
+ EDA_COLOR_T m_Numcolor;
+
+ const wxChar* m_ColorName;
+ EDA_COLOR_T m_LightColor;
+};
+
+/// list of existing Colors
+extern const StructColors g_ColorRefs[NBCOLORS];
+
+/// Step a color to the highlighted version if the highlight flag is set
+inline void ColorApplyHighlightFlag( EDA_COLOR_T *aColor )
+{
+ EDA_COLOR_T base = ColorGetBase( *aColor );
+ wxASSERT( base > UNSPECIFIED_COLOR && base < NBCOLORS );
+ if( *aColor & HIGHLIGHT_FLAG )
+ *aColor = g_ColorRefs[base].m_LightColor;
+}
+
+/// Find a color by name
+EDA_COLOR_T ColorByName( const wxString& aName );
+
+/// Find the nearest color match
+EDA_COLOR_T ColorFindNearest( const wxColour &aColor );
+
+/**
+ * Find the nearest color match
+ * @param aR is the red component of the color to be matched (in range 0-255)
+ * @param aG is the green component of the color to be matched (in range 0-255)
+ * @param aB is the blue component of the color to be matched (in range 0-255)
+ */
+EDA_COLOR_T ColorFindNearest( int aR, int aG, int aB );
+
+/**
+ * Check if a color is light i.e. if black would be more readable than
+ * white on it
+ */
+bool ColorIsLight( EDA_COLOR_T aColor );
+
+inline const wxChar *ColorGetName( EDA_COLOR_T aColor )
+{
+ EDA_COLOR_T base = ColorGetBase( aColor );
+ wxASSERT( base > UNSPECIFIED_COLOR && base < NBCOLORS );
+ return g_ColorRefs[base].m_ColorName;
+}
+
+inline void ColorSetBrush( wxBrush *aBrush, EDA_COLOR_T aColor )
+{
+ EDA_COLOR_T base = ColorGetBase( aColor );
+ wxASSERT( base > UNSPECIFIED_COLOR && base < NBCOLORS );
+ const StructColors &col = g_ColorRefs[base];
+ aBrush->SetColour( col.m_Red, col.m_Green, col.m_Blue );
+}
+
+/**
+ * Function MakeColour
+ * returns a wxWidgets wxColor from a KiCad color index with alpha value.
+ * Note that alpha support is not available on every wxWidgets platform. On
+ * such platform the behavior is the same as for wxALPHA_OPAQUE and that
+ * means the alpha value has no effect and will be ignored.
+ * @return wxColour - given a KiCad color index with alpha value
+ */
+inline wxColour MakeColour( EDA_COLOR_T aColor )
+{
+ int alpha = GetAlpha( aColor );
+ alpha = alpha ? alpha : wxALPHA_OPAQUE;
+ EDA_COLOR_T ndx = ColorGetBase( aColor );
+ wxASSERT( ndx > UNSPECIFIED_COLOR && ndx < NBCOLORS );
+
+ return wxColour( g_ColorRefs[ndx].m_Red,
+ g_ColorRefs[ndx].m_Green,
+ g_ColorRefs[ndx].m_Blue
+ ,(unsigned char) alpha
+ );
+}
+
+#endif // COLORS_H_
diff --git a/include/colors_selection.h b/include/colors_selection.h
new file mode 100644
index 0000000..d0bd568
--- /dev/null
+++ b/include/colors_selection.h
@@ -0,0 +1,34 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* colors_selection.h */
+
+#ifndef _COLORS_SELECTION_H_
+#define _COLORS_SELECTION_H_
+
+#include <class_colors_design_settings.h>
+// Colors for layers and items
+extern COLORS_DESIGN_SETTINGS g_ColorsSettings;
+
+#endif // _COLORS_SELECTION_H_
diff --git a/include/common.h b/include/common.h
new file mode 100644
index 0000000..ac13b32
--- /dev/null
+++ b/include/common.h
@@ -0,0 +1,422 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2007-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * The common library
+ * @file common.h
+ */
+
+#ifndef INCLUDE__COMMON_H_
+#define INCLUDE__COMMON_H_
+
+#include <vector>
+
+#include <wx/wx.h>
+#include <wx/confbase.h>
+#include <wx/fileconf.h>
+
+#include <richio.h>
+#include <colors.h>
+
+
+class wxAboutDialogInfo;
+class SEARCH_STACK;
+class wxSingleInstanceChecker;
+class REPORTER;
+
+
+// Flag for special keys
+#define GR_KB_RIGHTSHIFT 0x10000000 /* Keybd states: right
+ * shift key depressed */
+#define GR_KB_LEFTSHIFT 0x20000000 /* left shift key depressed
+ */
+#define GR_KB_CTRL 0x40000000 // CTRL depressed
+#define GR_KB_ALT 0x80000000 // ALT depressed
+#define GR_KB_SHIFT (GR_KB_LEFTSHIFT | GR_KB_RIGHTSHIFT)
+#define GR_KB_SHIFTCTRL (GR_KB_SHIFT | GR_KB_CTRL)
+#define MOUSE_MIDDLE 0x08000000 /* Middle button mouse
+ * flag for block commands
+ */
+
+/// default name for nameless projects
+#define NAMELESS_PROJECT wxT( "noname" )
+
+
+/// Pseudo key codes for command panning
+enum pseudokeys {
+ EDA_PANNING_UP_KEY = 1,
+ EDA_PANNING_DOWN_KEY,
+ EDA_PANNING_LEFT_KEY,
+ EDA_PANNING_RIGHT_KEY,
+ EDA_ZOOM_IN_FROM_MOUSE,
+ EDA_ZOOM_OUT_FROM_MOUSE,
+ EDA_ZOOM_CENTER_FROM_MOUSE
+};
+
+#define ESC 27
+
+// TODO Executable names TODO
+#ifdef __WINDOWS__
+#define CVPCB_EXE wxT( "cvpcb.exe" )
+#define PCBNEW_EXE wxT( "pcbnew.exe" )
+#define EESCHEMA_EXE wxT( "eeschema.exe" )
+#define GERBVIEW_EXE wxT( "gerbview.exe" )
+#define BITMAPCONVERTER_EXE wxT( "bitmap2component.exe" )
+#define PCB_CALCULATOR_EXE wxT( "pcb_calculator.exe" )
+#define PL_EDITOR_EXE wxT( "pl_editor.exe" )
+#else
+#define CVPCB_EXE wxT( "cvpcb" )
+#define PCBNEW_EXE wxT( "pcbnew" )
+#define EESCHEMA_EXE wxT( "eeschema" )
+#define GERBVIEW_EXE wxT( "gerbview" )
+#define BITMAPCONVERTER_EXE wxT( "bitmap2component" )
+#define PCB_CALCULATOR_EXE wxT( "pcb_calculator" )
+#define PL_EDITOR_EXE wxT( "pl_editor" )
+#endif
+
+
+// Graphic Texts Orientation in 0.1 degree
+#define TEXT_ORIENT_HORIZ 0
+#define TEXT_ORIENT_VERT 900
+
+
+
+//-----<KiROUND KIT>------------------------------------------------------------
+
+/**
+ * KiROUND
+ * rounds a floating point number to an int using
+ * "round halfway cases away from zero".
+ * In Debug build an assert fires if will not fit into an int.
+ */
+
+#if !defined( DEBUG )
+
+/// KiROUND: a function so v is not evaluated twice. Unfortunately, compiler
+/// is unable to pre-compute constants using this.
+static inline int KiROUND( double v )
+{
+ return int( v < 0 ? v - 0.5 : v + 0.5 );
+}
+
+/// KIROUND: a macro so compiler can pre-compute constants. Use this with compile
+/// time constants rather than the inline function above.
+#define KIROUND( v ) int( (v) < 0 ? (v) - 0.5 : (v) + 0.5 )
+
+#else
+
+// DEBUG: KiROUND() is a macro to capture line and file, then calls this inline
+
+static inline int kiRound_( double v, int line, const char* filename )
+{
+ v = v < 0 ? v - 0.5 : v + 0.5;
+ if( v > INT_MAX + 0.5 )
+ {
+ printf( "%s: in file %s on line %d, val: %.16g too ' > 0 ' for int\n", __FUNCTION__, filename, line, v );
+ }
+ else if( v < INT_MIN - 0.5 )
+ {
+ printf( "%s: in file %s on line %d, val: %.16g too ' < 0 ' for int\n", __FUNCTION__, filename, line, v );
+ }
+ return int( v );
+}
+
+#define KiROUND( v ) kiRound_( v, __LINE__, __FILE__ )
+
+// in Debug build, use the overflow catcher since code size is immaterial
+#define KIROUND( v ) KiROUND( v )
+
+#endif
+
+//-----</KiROUND KIT>-----------------------------------------------------------
+
+
+
+/// Convert mm to mils.
+inline int Mm2mils( double x ) { return KiROUND( x * 1000./25.4 ); }
+
+/// Convert mils to mm.
+inline int Mils2mm( double x ) { return KiROUND( x * 25.4 / 1000. ); }
+
+
+enum EDA_UNITS_T {
+ INCHES = 0,
+ MILLIMETRES = 1,
+ UNSCALED_UNITS = 2,
+ DEGREES = 3,
+};
+
+
+extern EDA_UNITS_T g_UserUnit; ///< display units
+
+/// Draw color for moving objects.
+extern EDA_COLOR_T g_GhostColor;
+
+
+/**
+ * Class LOCALE_IO
+ * is a class that can be instantiated within a scope in which you are expecting
+ * exceptions to be thrown. Its constructor set a "C" laguage locale option,
+ * to read/print files with fp numbers.
+ * Its destructor insures that the default locale is restored if an exception
+ * is thrown, or not.
+ */
+class LOCALE_IO
+{
+public:
+ LOCALE_IO();
+ ~LOCALE_IO();
+
+private:
+ void setUserLocale( const char* aUserLocale );
+
+ // allow for nesting of LOCALE_IO instantiations
+ static int m_c_count;
+
+ // The locale in use before switching to the "C" locale
+ // (the locale can be set by user, and is not always the system locale)
+ std::string m_user_locale;
+};
+
+
+/**
+ * Function GetTextSize
+ * returns the size of @a aSingleLine of text when it is rendered in @a aWindow
+ * using whatever font is currently set in that window.
+ */
+wxSize GetTextSize( const wxString& aSingleLine, wxWindow* aWindow );
+
+/**
+ * Function EnsureTextCtrlWidth
+ * sets the minimum pixel width on a text control in order to make a text
+ * string be fully visible within it. The current font within the text
+ * control is considered.
+ * The text can come either from the control or be given as an argument.
+ * If the text control is larger than needed, then nothing is done.
+ * @param aCtrl the text control to potentially make wider.
+ * @param aString the text that is used in sizing the control's pixel width.
+ * If NULL, then
+ * the text already within the control is used.
+ * @return bool - true if the \a aCtrl had its size changed, else false.
+ */
+bool EnsureTextCtrlWidth( wxTextCtrl* aCtrl, const wxString* aString = NULL );
+
+
+/**
+ * Function ProcessExecute
+ * runs a child process.
+ * @param aCommandLine The process and any arguments to it all in a single
+ * string.
+ * @param aFlags The same args as allowed for wxExecute()
+ * @param callback wxProcess implementing OnTerminate to be run when the
+ child process finishes
+ * @return int - pid of process, 0 in case of error (like return values of
+ * wxExecute())
+ */
+int ProcessExecute( const wxString& aCommandLine, int aFlags = wxEXEC_ASYNC,
+ wxProcess *callback = NULL );
+
+
+/**************/
+/* common.cpp */
+/**************/
+
+/**
+ * @return an unique time stamp that changes after each call
+ */
+time_t GetNewTimeStamp();
+
+EDA_COLOR_T DisplayColorFrame( wxWindow* parent, int OldColor );
+int GetCommandOptions( const int argc, const char** argv,
+ const char* stringtst, const char** optarg,
+ int* optind );
+
+/**
+ * Returns the units symbol.
+ *
+ * @param aUnits - Units type, default is current units setting.
+ * @param aFormatString - A formatting string to embed the units symbol into. Note:
+ * the format string must contain the %s format specifier.
+ * @return The formatted units symbol.
+ */
+wxString ReturnUnitSymbol( EDA_UNITS_T aUnits = g_UserUnit,
+ const wxString& aFormatString = _( " (%s):" ) );
+
+/**
+ * Get a human readable units string.
+ *
+ * The strings returned are full text name and not abbreviations or symbolic
+ * representations of the units. Use ReturnUnitSymbol() for that.
+ *
+ * @param aUnits - The units text to return.
+ * @return The human readable units string.
+ */
+wxString GetUnitsLabel( EDA_UNITS_T aUnits );
+wxString GetAbbreviatedUnitsLabel( EDA_UNITS_T aUnit = g_UserUnit );
+
+void AddUnitSymbol( wxStaticText& Stext, EDA_UNITS_T aUnit = g_UserUnit );
+
+/**
+ * Round to the nearest precision.
+ *
+ * Try to approximate a coordinate using a given precision to prevent
+ * rounding errors when converting from inches to mm.
+ *
+ * ie round the unit value to 0 if unit is 1 or 2, or 8 or 9
+ */
+double RoundTo0( double x, double precision );
+
+/**
+ * Function wxStringSplit
+ * splits \a aString to a string list separated at \a aSplitter.
+ * @param aText is the text to split
+ * @param aStrings will contain the splitted lines
+ * @param aSplitter is the 'split' character
+ */
+void wxStringSplit( const wxString& aText, wxArrayString& aStrings, wxChar aSplitter );
+
+/**
+ * Function GetRunningMicroSecs
+ * returns an ever increasing indication of elapsed microseconds. Use this
+ * by computing differences between two calls.
+ * @author Dick Hollenbeck
+ */
+unsigned GetRunningMicroSecs();
+
+
+/**
+ * Function SystemDirsAppend
+ * appends system places to aSearchStack in a platform specific way, and pertinent
+ * to KiCad programs. It seems to be a place to collect bad ideas and keep them
+ * out of view.
+ */
+void SystemDirsAppend( SEARCH_STACK* aSearchStack );
+
+
+/**
+ * Function SearchHelpFileFullPath
+ * returns the help file's full path.
+ * <p>
+ * Return the KiCad help file with path and extension.
+ * Help files can be html (.html ext) or pdf (.pdf ext) files.
+ * A \<BaseName\>.html file is searched and if not found,
+ * \<BaseName\>.pdf file is searched in the same path.
+ * If the help file for the current locale is not found, an attempt to find
+ * the English version of the help file is made.
+ * Help file is searched in directories in this order:
+ * help/\<canonical name\> like help/en_GB
+ * help/\<short name\> like help/en
+ * help/en
+ * </p>
+ * @param aSearchStack contains some possible base dirs that may be above the
+ * the one actually holding @a aBaseName. These are starting points for nested searches.
+ * @param aBaseName is the name of the help file to search for, <p>without extension</p>.
+ * @return wxEmptyString is returned if aBaseName is not found, else the full path & filename.
+ */
+wxString SearchHelpFileFullPath( const SEARCH_STACK& aSearchStack, const wxString& aBaseName );
+
+/**
+ * Helper function EnsureFileDirectoryExists
+ * make \a aTargetFullFileName absolute and creates the path of this file if it doesn't yet exist.
+ * @param aTargetFullFileName the wxFileName containing the full path and file name to modify. The path
+ * may be absolute or relative to \a aBaseFilename .
+ * @param aBaseFilename a full filename. Only its path is used to set the aTargetFullFileName path.
+ * @param aReporter a point to a REPORTER object use to show messages (can be NULL)
+ * @return true if \a aOutputDir already exists or was successfully created.
+ */
+bool EnsureFileDirectoryExists( wxFileName* aTargetFullFileName,
+ const wxString& aBaseFilename,
+ REPORTER* aReporter = NULL );
+
+/**
+ * Function LockFile
+ * tests to see if aFileName can be locked (is not already locked) and only then
+ * returns a wxSingleInstanceChecker protecting aFileName. Caller owns the return value.
+ */
+wxSingleInstanceChecker* LockFile( const wxString& aFileName );
+
+
+/// Put aPriorityPath in front of all paths in the value of aEnvVar.
+const wxString PrePendPath( const wxString& aEnvVar, const wxString& aPriorityPath );
+
+/**
+ * Function GetNewConfig
+ *
+ * Use this function instead of creating a new wxConfig so we can put config files in
+ * a more proper place for each platform. This is generally $HOME/.config/kicad/ in Linux
+ * according to the FreeDesktop specification at
+ * http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
+ * The config object created here should be destroyed by the caller.
+ *
+ * @param aProgName is the name of the program calling this function - can be obtained by
+ * calling Pgm().App().GetAppName(). This will be the actual file name of the config file.
+ * @return A pointer to a new wxConfigBase derived object is returned. The caller is in charge
+ * of deleting it.
+ */
+wxConfigBase* GetNewConfig( const wxString& aProgName );
+
+/**
+ * Function GetKicadLockFilePath
+ * @return A wxString containing the path for lockfiles in Kicad
+ */
+wxString GetKicadLockFilePath();
+
+/**
+ * Function GetKicadConfigPath
+ * @return A wxString containing the config path for Kicad
+ */
+wxString GetKicadConfigPath();
+
+/**
+ * Function ExpandEnvVarSubstitutions
+ * replaces any environment variable references with their values
+ * @param aString = a string containing (perhaps) references to env var
+ * @return a string where env var are replaced by their value
+ */
+const wxString ExpandEnvVarSubstitutions( const wxString& aString );
+
+
+#ifdef __WXMAC__
+/**
+ * OSX specific function GetOSXKicadUserDataDir
+ * @return A wxString pointing to the user data directory for Kicad
+ */
+wxString GetOSXKicadUserDataDir();
+
+/**
+ * OSX specific function GetOSXMachineDataDir
+ * @return A wxString pointing to the machine data directory for Kicad
+ */
+wxString GetOSXKicadMachineDataDir();
+
+/**
+ * OSX specific function GetOSXKicadDataDir
+ * @return A wxString pointing to the bundle data directory for Kicad
+ */
+wxString GetOSXKicadDataDir();
+#endif
+
+#endif // INCLUDE__COMMON_H_
diff --git a/include/config_params.h b/include/config_params.h
new file mode 100644
index 0000000..16cd089
--- /dev/null
+++ b/include/config_params.h
@@ -0,0 +1,366 @@
+#ifndef CONFIG_PARAMS_H_
+#define CONFIG_PARAMS_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * The common library
+ * @file config_params.h
+ */
+
+#include <wx/confbase.h>
+#include <wx/fileconf.h>
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <colors.h>
+#include <limits>
+
+/// Names of sub sections where to store project info in *.pro project config files
+#define GROUP_PCB wxT( "/pcbnew" ) /// parameters for Pcbnew/Modedit
+#define GROUP_SCH wxT( "/eeschema" ) /// library list and lib paths list
+#define GROUP_SCH_EDITOR wxT( "/schematic_editor" ) /// parameters for schematic editor
+ /// (and few for component editor).
+ /// Does not store libs list
+#define GROUP_PCB_LIBS wxT( "/pcbnew/libraries" ) /// PCB library list, should be removed soon
+ /// (Now in fp lib tables)
+#define GROUP_SCH_LIBS wxT( "/eeschema/libraries" ) /// library list section
+
+#define GROUP_CVP wxT("/cvpcb")
+#define GROUP_CVP_EQU wxT("/cvpcb/equfiles")
+
+
+#define CONFIG_VERSION 1
+
+
+/**
+ * Function ConfigBaseWriteDouble
+ * This is a helper function to write doubles in config
+ * We cannot use wxConfigBase->Write for a double, because
+ * this function uses a format with very few digits in mantissa,
+ * and truncation issues are frequent.
+ * We use here a better floating format.
+ */
+void ConfigBaseWriteDouble( wxConfigBase* aConfig, const wxString& aKey, double aValue );
+
+
+/** Type of parameter in the configuration file */
+enum paramcfg_id {
+ PARAM_INT,
+ PARAM_INT_WITH_SCALE,
+ PARAM_SETCOLOR,
+ PARAM_DOUBLE,
+ PARAM_BOOL,
+ PARAM_LIBNAME_LIST,
+ PARAM_WXSTRING,
+ PARAM_FILENAME,
+ PARAM_COMMAND_ERASE,
+ PARAM_FIELDNAME_LIST
+};
+
+
+/**
+ * Class PARAM_CFG_BASE
+ * is a base class which establishes the interface functions ReadParam and SaveParam,
+ * which are implemented by a number of derived classes, and these function's
+ * doxygen comments are inherited also.
+ * <p>
+ * See kicad.odt or kicad.pdf, chapter 2 :
+ * "Installation and configuration/Initialization of the default config".
+ */
+class PARAM_CFG_BASE
+{
+public:
+ wxString m_Ident; ///< Keyword in config data
+ paramcfg_id m_Type; ///< Type of parameter
+ wxString m_Group; ///< Group name (this is like a path in the config data)
+ bool m_Setup; ///< Install or Project based parameter, true == install
+
+public:
+ PARAM_CFG_BASE( const wxString& ident, const paramcfg_id type,
+ const wxChar* group = NULL );
+ virtual ~PARAM_CFG_BASE() {}
+
+ /**
+ * Function ReadParam
+ * reads the value of the parameter stored in aConfig
+ * @param aConfig = the wxConfigBase that holds the parameter
+ */
+ virtual void ReadParam( wxConfigBase* aConfig ) const {};
+
+ /**
+ * Function SaveParam
+ * saves the value of the parameter stored in aConfig
+ * @param aConfig = the wxConfigBase that can store the parameter
+ */
+ virtual void SaveParam( wxConfigBase* aConfig ) const {};
+};
+
+
+/**
+ * Configuration parameter - Integer Class
+ *
+ */
+class PARAM_CFG_INT : public PARAM_CFG_BASE
+{
+public:
+ int* m_Pt_param; ///< Pointer to the parameter value
+ int m_Min, m_Max; ///< Minimum and maximum values of the param type
+ int m_Default; ///< The default value of the parameter
+
+public:
+ PARAM_CFG_INT( const wxString& ident, int* ptparam,
+ int default_val = 0,
+ int min = std::numeric_limits<int>::min(),
+ int max = std::numeric_limits<int>::max(),
+ const wxChar* group = NULL );
+ PARAM_CFG_INT( bool Insetup, const wxString& ident, int* ptparam,
+ int default_val = 0,
+ int min = std::numeric_limits<int>::min(),
+ int max = std::numeric_limits<int>::max(),
+ const wxChar* group = NULL );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+/**
+ * Configuration parameter - Integer Class
+ * with unit conversion.
+ * Mainly used to store an integer value in millimeters (or inches)
+ * and retrieve it in internal units
+ * the stored value is a floating number
+ */
+class PARAM_CFG_INT_WITH_SCALE : public PARAM_CFG_INT
+{
+public:
+ double m_BIU_to_cfgunit; ///< the factor to convert the saved value in internal value
+
+public:
+ PARAM_CFG_INT_WITH_SCALE( const wxString& ident, int* ptparam,
+ int default_val = 0,
+ int min = std::numeric_limits<int>::min(),
+ int max = std::numeric_limits<int>::max(),
+ const wxChar* group = NULL,
+ double aBiu2cfgunit = 1.0);
+ PARAM_CFG_INT_WITH_SCALE( bool Insetup, const wxString& ident, int* ptparam,
+ int default_val = 0,
+ int min = std::numeric_limits<int>::min(),
+ int max = std::numeric_limits<int>::max(),
+ const wxChar* group = NULL,
+ double aBiu2cfgunit = 1.0 );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+/**
+ * Configuration parameter - SetColor Class
+ *
+ */
+class PARAM_CFG_SETCOLOR : public PARAM_CFG_BASE
+{
+public:
+ EDA_COLOR_T* m_Pt_param; ///< Pointer to the parameter value
+ EDA_COLOR_T m_Default; ///< The default value of the parameter
+
+public:
+ PARAM_CFG_SETCOLOR( const wxString& ident, EDA_COLOR_T* ptparam,
+ EDA_COLOR_T default_val, const wxChar* group = NULL );
+ PARAM_CFG_SETCOLOR( bool Insetup, const wxString& ident, EDA_COLOR_T* ptparam,
+ EDA_COLOR_T default_val, const wxChar* group = NULL );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+/**
+ * Configuration parameter - Double Precision Class
+ *
+ */
+class PARAM_CFG_DOUBLE : public PARAM_CFG_BASE
+{
+public:
+ double* m_Pt_param; ///< Pointer to the parameter value
+ double m_Default; ///< The default value of the parameter
+ double m_Min, m_Max; ///< Minimum and maximum values of the param type
+
+public:
+ PARAM_CFG_DOUBLE( const wxString& ident, double* ptparam,
+ double default_val = 0.0, double min = 0.0, double max = 10000.0,
+ const wxChar* group = NULL );
+ PARAM_CFG_DOUBLE( bool Insetup, const wxString& ident, double* ptparam,
+ double default_val = 0.0, double min = 0.0, double max = 10000.0,
+ const wxChar* group = NULL );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+/**
+ * Configuration parameter - Boolean Class
+ *
+ */
+class PARAM_CFG_BOOL : public PARAM_CFG_BASE
+{
+public:
+ bool* m_Pt_param; ///< Pointer to the parameter value
+ int m_Default; ///< The default value of the parameter
+
+public:
+ PARAM_CFG_BOOL( const wxString& ident, bool* ptparam,
+ int default_val = false, const wxChar* group = NULL );
+ PARAM_CFG_BOOL( bool Insetup, const wxString& ident, bool* ptparam,
+ int default_val = false, const wxChar* group = NULL );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+/**
+ * Configuration parameter - wxString Class
+ *
+ */
+class PARAM_CFG_WXSTRING : public PARAM_CFG_BASE
+{
+public:
+ wxString* m_Pt_param; ///< Pointer to the parameter value
+ wxString m_default; ///< The default value of the parameter
+
+public:
+ PARAM_CFG_WXSTRING( const wxString& ident, wxString* ptparam, const wxChar* group = NULL );
+
+ PARAM_CFG_WXSTRING( bool Insetup,
+ const wxString& ident,
+ wxString* ptparam,
+ const wxString& default_val = wxEmptyString,
+ const wxChar* group = NULL );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+/**
+ * Configuration parameter - PARAM_CFG_FILENAME Class
+ * Same as PARAM_CFG_WXSTRING, but stores "\" as "/".
+ * and replace "/" by "\" under Windows.
+ * Used to store paths and filenames in config files
+ */
+class PARAM_CFG_FILENAME : public PARAM_CFG_BASE
+{
+public:
+ wxString* m_Pt_param; ///< Pointer to the parameter value
+
+public:
+ PARAM_CFG_FILENAME( const wxString& ident, wxString* ptparam,
+ const wxChar* group = NULL );
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+class PARAM_CFG_LIBNAME_LIST : public PARAM_CFG_BASE
+{
+public:
+ wxArrayString* m_Pt_param; ///< Pointer to the parameter value
+
+public:
+ PARAM_CFG_LIBNAME_LIST( const wxChar* ident,
+ wxArrayString* ptparam,
+ const wxChar* group = NULL );
+
+ virtual void ReadParam( wxConfigBase* aConfig ) const;
+ virtual void SaveParam( wxConfigBase* aConfig ) const;
+};
+
+
+/** A list of parameters type */
+//typedef boost::ptr_vector<PARAM_CFG_BASE> PARAM_CFG_ARRAY;
+class PARAM_CFG_ARRAY : public boost::ptr_vector<PARAM_CFG_BASE>
+{
+};
+
+
+/**
+ * Function wxConfigSaveSetups
+ * writes @a aList of PARAM_CFG_ARRAY elements to save configuration values
+ * to @a aCfg. Only elements with m_Setup set true will be saved, hence the
+ * function name.
+ *
+ * @param aCfg where to save
+ * @param aList holds some configuration parameters, not all of which will
+ * necessarily be saved.
+ */
+void wxConfigSaveSetups( wxConfigBase* aCfg, const PARAM_CFG_ARRAY& aList );
+
+/**
+ * Function wxConfigSaveParams
+ * writes @a aList of PARAM_CFG_ARRAY elements to save configuration values
+ * to @a aCfg. Only elements with m_Setup set false will be saved, hence the
+ * function name.
+ *
+ * @param aCfg where to save
+ * @param aList holds some configuration parameters, not all of which will
+ * necessarily be saved.
+ * @param aGroup indicates in which group the value should be saved,
+ * unless the PARAM_CFG_ARRAY element provides its own group, in which case it will
+ * take precedence. aGroup may be empty.
+ */
+void wxConfigSaveParams( wxConfigBase* aCfg,
+ const PARAM_CFG_ARRAY& aList, const wxString& aGroup );
+
+/**
+ * Function wxConfigLoadSetups
+ * uses @a aList of PARAM_CFG_ARRAY elements to load configuration values
+ * from @a aCfg. Only elements whose m_Setup field is true will be loaded.
+ *
+ * @param aCfg where to load from.
+ * @param aList holds some configuration parameters, not all of which will
+ * necessarily be loaded.
+ */
+void wxConfigLoadSetups( wxConfigBase* aCfg, const PARAM_CFG_ARRAY& aList );
+
+/**
+ * Function wxConfigLoadParams
+ * uses @a aList of PARAM_CFG_ARRAY elements to load configuration values
+ * from @a aCfg. Only elements whose m_Setup field is false will be loaded.
+ *
+ * @param aCfg where to load from.
+ *
+ * @param aList holds some configuration parameters, not all of which will
+ * necessarily be loaded.
+ *
+ * @param aGroup indicates in which group the value should be saved,
+ * unless the PARAM_CFG_ARRAY element provides its own group, in which case it will
+ * take precedence. aGroup may be empty.
+ */
+void wxConfigLoadParams( wxConfigBase* aCfg,
+ const PARAM_CFG_ARRAY& aList, const wxString& aGroup );
+
+
+#endif // CONFIG_PARAMS_H_
diff --git a/include/confirm.h b/include/confirm.h
new file mode 100644
index 0000000..5a10bb4
--- /dev/null
+++ b/include/confirm.h
@@ -0,0 +1,110 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * This file is part of the common library
+ * @file confirm.h
+ * @see common.h
+ */
+
+
+#ifndef __INCLUDE__CONFIRM_H__
+#define __INCLUDE__CONFIRM_H__ 1
+
+/**
+ * Function DisplayExitDialog
+ * displays a dialog with 3 buttons:
+ * Save and Exit
+ * Cancel
+ * Exit without save
+ *
+ * @param aParent = the parent window
+ * @param aMessage = the main message to put in dialog
+ * If empty, the standard message will be shown:
+ * Save the changes before closing?
+ * @return wxID_YES, wxID_CANCEL, wxID_NO.
+ */
+int DisplayExitDialog( wxWindow* aParent, const wxString& aMessage );
+
+
+/**
+ * Function DisplayError
+ * displays an error or warning message box with \a aMessage.
+ *
+ * @warning Setting \a displaytime does not work. Do not use it.
+ */
+void DisplayError( wxWindow* parent, const wxString& aMessage, int displaytime = 0 );
+
+/**
+ * Function DisplayInfoMessage
+ * displays an informational message box with \a aMessage.
+ *
+ * @warning Setting \a displaytime does not work. Do not use it.
+ */
+void DisplayInfoMessage( wxWindow* parent, const wxString& aMessage, int displaytime = 0 );
+
+/**
+ * Function IsOK
+ * displays a yes/no dialog with \a aMessage and returns the user response.
+ *
+ * @param aParent is the parent window. NULL can be used if the parent is the top level window.
+ * @param aMessage is the message to display in the dialog box.
+ *
+ * @return True if user selected the yes button, otherwise false.
+ */
+bool IsOK( wxWindow* aParent, const wxString& aMessage );
+
+/**
+ * Function YesNoCancelDialog
+ * displays a yes/no/cancel dialog with \a aMessage and returns the user response.
+ *
+ * @param aParent is the parent window. NULL can be used if the parent is the top level window.
+ * @param aPrimaryMessage is the message to display in the top part of the dialog box using
+ * a bold font.
+ * @param aSecondaryMessage is the message to display in the lower part of the dialog box
+ * using the default system UI font.
+ * @param aYesButtonText is the text to display in the yes button when defined.
+ * @param aNoButtonText is the text to display in the no button when defiend.
+ * @param aCancelButtonText is the text to display in the cancel button when defined.
+ *
+ * @return wxID_YES, wxID_NO, or wxID_CANCEL depending on the button the user selected.
+ */
+int YesNoCancelDialog( wxWindow* aParent,
+ const wxString& aPrimaryMessage,
+ const wxString& aSecondaryMessage,
+ const wxString& aYesButtonText = wxEmptyString,
+ const wxString& aNoButtonText = wxEmptyString,
+ const wxString& aCancelButtonText = wxEmptyString );
+
+
+/**
+ * Function DisplayHtmlInforMessage
+ * displays \a aMessage in HTML format.
+ */
+void DisplayHtmlInfoMessage( wxWindow* parent, const wxString& title,
+ const wxString& aMessage,
+ const wxSize& size = wxDefaultSize );
+
+
+#endif /* __INCLUDE__CONFIRM_H__ */
diff --git a/include/convert_basic_shapes_to_polygon.h b/include/convert_basic_shapes_to_polygon.h
new file mode 100644
index 0000000..23940ec
--- /dev/null
+++ b/include/convert_basic_shapes_to_polygon.h
@@ -0,0 +1,99 @@
+/**
+ * @file convert_basic_shapes_to_polygon.h
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef CONVERT_BASIC_SHAPES_TO_POLYGON_H
+#define CONVERT_BASIC_SHAPES_TO_POLYGON_H
+
+#include <vector>
+
+#include <fctsys.h>
+#include <trigo.h>
+#include <macros.h>
+
+#include <geometry/shape_poly_set.h>
+/**
+ * Function TransformCircleToPolygon
+ * convert a circle to a polygon, using multiple straight lines
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aCenter = the center of the circle
+ * @param aRadius = the radius of the circle
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * Note: the polygon is inside the circle, so if you want to have the polygon
+ * outside the circle, you should give aRadius calculated with a correction factor
+ */
+void TransformCircleToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aCenter, int aRadius,
+ int aCircleToSegmentsCount );
+
+/**
+ * Function TransformRoundedEndsSegmentToPolygon
+ * convert a segment with rounded ends to a polygon
+ * Convert arcs to multiple straight lines
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aStart = the segment start point coordinate
+ * @param aEnd = the segment end point coordinate
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * @param aWidth = the segment width
+ * Note: the polygon is inside the arc ends, so if you want to have the polygon
+ * outside the circle, you should give aStart and aEnd calculated with a correction factor
+ */
+void TransformRoundedEndsSegmentToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aStart, wxPoint aEnd,
+ int aCircleToSegmentsCount,
+ int aWidth );
+
+
+/**
+ * Function TransformArcToPolygon
+ * Creates a polygon from an Arc
+ * Convert arcs to multiple straight segments
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aCentre = centre of the arc or circle
+ * @param aStart = start point of the arc, or a point on the circle
+ * @param aArcAngle = arc angle in 0.1 degrees. For a circle, aArcAngle = 3600
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * @param aWidth = width (thickness) of the line
+ */
+void TransformArcToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aCentre, wxPoint aStart, double aArcAngle,
+ int aCircleToSegmentsCount, int aWidth );
+
+/**
+ * Function TransformRingToPolygon
+ * Creates a polygon from a ring
+ * Convert arcs to multiple straight segments
+ * @param aCornerBuffer = a buffer to store the polygon
+ * @param aCentre = centre of the arc or circle
+ * @param aRadius = radius of the circle
+ * @param aCircleToSegmentsCount = the number of segments to approximate a circle
+ * @param aWidth = width (thickness) of the ring
+ */
+void TransformRingToPolygon( SHAPE_POLY_SET& aCornerBuffer,
+ wxPoint aCentre, int aRadius,
+ int aCircleToSegmentsCount, int aWidth );
+
+#endif // CONVERT_BASIC_SHAPES_TO_POLYGON_H
diff --git a/include/convert_from_iu.h b/include/convert_from_iu.h
new file mode 100644
index 0000000..1164d21
--- /dev/null
+++ b/include/convert_from_iu.h
@@ -0,0 +1,69 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 CERN
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file convert_from_iu.h
+ * @brief Definitions and functions to convert from internal units to user units
+ * depending upon the application and/or build options.
+ */
+
+
+#ifndef _CONVERT_FROM_IU_
+#define _CONVERT_FROM_IU_
+
+
+/// Convert from internal units to user units.
+#if defined(PCBNEW) || defined(CVPCB) || defined(GERBVIEW)
+ #if defined(GERBVIEW)
+ #define MM_PER_IU 1.0 / 1e5 // Gerbview uses 10 micrometer.
+ #else
+ #define MM_PER_IU 1.0 / 1e6 // Pcbnew in nanometers.
+ #endif
+ #define MILS_PER_IU ( MM_PER_IU * 0.0254 )
+ #define DECIMILS_PER_IU (MM_PER_IU * 0.00254 )
+
+/// Convert PCBNEW internal units (iu) to mils.
+inline int Iu2Mils( int iu )
+{
+ double x = iu * MILS_PER_IU;
+ return int( x < 0 ? x - 0.5 : x + 0.5 );
+}
+
+/// Convert PCBNEW internal units (iu) to deci-mils.
+inline int Iu2DMils( int iu )
+{
+ double x = iu * DECIMILS_PER_IU;
+ return int( x < 0 ? x - 0.5 : x + 0.5 );
+}
+
+#else // Eeschema and anything else.
+#define MILS_PER_IU 1.0
+#define MM_PER_IU (MILS_PER_IU / 0.0254)
+
+inline int Iu2Mils( int iu )
+{
+ return iu;
+}
+#endif
+
+#endif // #define _CONVERT_FROM_IU_
diff --git a/include/convert_to_biu.h b/include/convert_to_biu.h
new file mode 100644
index 0000000..646a319
--- /dev/null
+++ b/include/convert_to_biu.h
@@ -0,0 +1,101 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef CONVERT_TO_BIU_H_
+#define CONVERT_TO_BIU_H_
+
+/**
+ * @file convert_to_biu.h
+ */
+
+
+/**
+ * @brief some define and functions to convert a value in mils, decimils or mm
+ * to the internal unit used in pcbnew, cvpcb or gerbview (nanometer or deci-mil)
+ * depending on compile time option
+ */
+
+
+
+/// Scaling factor to convert mils to internal units.
+#if defined(PCBNEW) || defined(CVPCB) || defined(GERBVIEW)
+ #if defined(GERBVIEW)
+ #define IU_PER_MM 1e5 // Gerbview IU is 10 nanometers.
+ #else
+ #define IU_PER_MM 1e6 // Pcbnew IU is 1 nanometer.
+ #endif
+ #define IU_PER_MILS (IU_PER_MM * 0.0254)
+ #define IU_PER_DECIMILS (IU_PER_MM * 0.00254)
+
+/// Convert mils to PCBNEW internal units (iu).
+inline int Mils2iu( int mils )
+{
+ double x = mils * IU_PER_MILS;
+ return int( x < 0 ? x - 0.5 : x + 0.5 );
+}
+
+/// Convert deci-mils to PCBNEW internal units (iu).
+inline int DMils2iu( int dmils )
+{
+ double x = dmils * IU_PER_DECIMILS;
+ return int( x < 0 ? x - 0.5 : x + 0.5 );
+}
+
+#elif defined (PL_EDITOR)
+#define IU_PER_MM 1e3 // internal units in micron (should be enough)
+#define IU_PER_MILS (IU_PER_MM * 0.0254)
+#define IU_PER_DECIMILS (IU_PER_MM * 0.00254)
+/// Convert mils to page layout editor internal units (iu).
+inline int Mils2iu( int mils )
+{
+ double x = mils * IU_PER_MILS;
+ return int( x < 0 ? x - 0.5 : x + 0.5 );
+}
+
+/// Convert deci-mils to page layout editor internal units (iu).
+inline int DMils2iu( int dmils )
+{
+ double x = dmils * IU_PER_DECIMILS;
+ return int( x < 0 ? x - 0.5 : x + 0.5 );
+}
+
+#else // Eeschema and anything else.
+#define IU_PER_DECIMILS 0.1
+#define IU_PER_MILS 1.0
+#define IU_PER_MM (IU_PER_MILS / 0.0254)
+
+inline int Mils2iu( int mils )
+{
+ return mils;
+}
+#endif
+
+/// Convert mm to internal units (iu).
+inline int Millimeter2iu( double mm )
+{
+ return (int) ( mm < 0 ? mm * IU_PER_MM - 0.5 : mm * IU_PER_MM + 0.5);
+}
+
+
+#endif // CONVERT_TO_BIU_H_
diff --git a/include/core/typeinfo.h b/include/core/typeinfo.h
new file mode 100644
index 0000000..8c89e4c
--- /dev/null
+++ b/include/core/typeinfo.h
@@ -0,0 +1,179 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __KICAD_TYPEINFO_H
+#define __KICAD_TYPEINFO_H
+
+#include <cstdio>
+
+class EDA_ITEM;
+
+/**
+ * Enum KICAD_T
+ * is the set of class identification values, stored in EDA_ITEM::m_StructType
+ */
+enum KICAD_T
+{
+ NOT_USED = -1, ///< the 3d code uses this value
+
+ EOT = 0, ///< search types array terminator (End Of Types)
+
+ TYPE_NOT_INIT = 0,
+ PCB_T,
+ SCREEN_T, ///< not really an item, used to identify a screen
+
+ // Items in pcb
+ PCB_MODULE_T, ///< class MODULE, a footprint
+ PCB_PAD_T, ///< class D_PAD, a pad in a footprint
+ PCB_LINE_T, ///< class DRAWSEGMENT, a segment not on copper layers
+ PCB_TEXT_T, ///< class TEXTE_PCB, text on a layer
+ PCB_MODULE_TEXT_T, ///< class TEXTE_MODULE, text in a footprint
+ PCB_MODULE_EDGE_T, ///< class EDGE_MODULE, a footprint edge
+ PCB_TRACE_T, ///< class TRACK, a track segment (segment on a copper layer)
+ PCB_VIA_T, ///< class VIA, a via (like a track segment on a copper layer)
+ PCB_ZONE_T, ///< class SEGZONE, a segment used to fill a zone area (segment on a
+ ///< copper layer)
+ PCB_MARKER_T, ///< class MARKER_PCB, a marker used to show something
+ PCB_DIMENSION_T, ///< class DIMENSION, a dimension (graphic item)
+ PCB_TARGET_T, ///< class PCB_TARGET, a target (graphic item)
+ PCB_ZONE_AREA_T, ///< class ZONE_CONTAINER, a zone area
+ PCB_ITEM_LIST_T, ///< class BOARD_ITEM_LIST, a list of board items
+
+ // Schematic draw Items. The order of these items effects the sort order.
+ // It is currently ordered to mimic the old Eeschema locate behavior where
+ // the smallest item is the selected item.
+ SCH_MARKER_T,
+ SCH_JUNCTION_T,
+ SCH_NO_CONNECT_T,
+ SCH_BUS_WIRE_ENTRY_T,
+ SCH_BUS_BUS_ENTRY_T,
+ SCH_LINE_T,
+ SCH_BITMAP_T,
+ SCH_TEXT_T,
+ SCH_LABEL_T,
+ SCH_GLOBAL_LABEL_T,
+ SCH_HIERARCHICAL_LABEL_T,
+ SCH_FIELD_T,
+ SCH_COMPONENT_T,
+ SCH_SHEET_PIN_T,
+ SCH_SHEET_T,
+
+ // Be prudent with these 3 types:
+ // they should be used only to locate a specific field type
+ // among SCH_FIELD_T items types
+ SCH_FIELD_LOCATE_REFERENCE_T,
+ SCH_FIELD_LOCATE_VALUE_T,
+ SCH_FIELD_LOCATE_FOOTPRINT_T,
+
+ // General
+ SCH_SCREEN_T,
+
+ /*
+ * Draw items in library component.
+ *
+ * The order of these items effects the sort order for items inside the
+ * "DRAW/ENDDRAW" section of the component definition in a library file.
+ * If you add a new draw item, type, please make sure you add it so the
+ * sort order is logical.
+ */
+ LIB_PART_T,
+ LIB_ALIAS_T,
+ LIB_ARC_T,
+ LIB_CIRCLE_T,
+ LIB_TEXT_T,
+ LIB_RECTANGLE_T,
+ LIB_POLYLINE_T,
+ LIB_BEZIER_T,
+ LIB_PIN_T,
+
+ /*
+ * Fields are not saved inside the "DRAW/ENDDRAW". Add new draw item
+ * types before this line.
+ */
+ LIB_FIELD_T,
+
+ /*
+ * For GerbView: items type:
+ */
+ TYPE_GERBER_DRAW_ITEM,
+
+ /*
+ * for Pl_Editor, in undo/redo commands
+ */
+ TYPE_PL_EDITOR_LAYOUT,
+
+ // End value
+ MAX_STRUCT_TYPE_ID
+};
+
+template<typename T>
+struct remove_pointer
+{
+ typedef T type;
+};
+
+template<typename T>
+struct remove_pointer<T*>
+{
+ typedef typename remove_pointer<T>::type type;
+};
+
+/**
+ * Function IsA()
+ *
+ * Checks if the type of aObject is T.
+ * @param aObject object for type check
+ * @return true, if aObject type equals T.
+ */
+template <class T, class I>
+bool IsA( const I* aObject )
+{
+ return aObject && remove_pointer<T>::type::ClassOf( aObject );
+}
+
+template <class T, class I>
+bool IsA( const I& aObject )
+{
+ return remove_pointer<T>::type::ClassOf( &aObject );
+}
+
+/**
+ * Function dyn_cast()
+ *
+ * A lightweight dynamic downcast. Casts aObject to type Casted*.
+ * Uses EDA_ITEM::Type() and EDA_ITEM::ClassOf() to check if type matches.
+ * @param aObject object to be casted
+ * @return down-casted object or NULL if type doesn't match Casted.
+ */
+template<class Casted, class From>
+Casted dyn_cast( From aObject )
+{
+ if( remove_pointer<Casted>::type::ClassOf ( aObject ) )
+ return static_cast<Casted>( aObject );
+
+ return NULL;
+}
+
+#endif // __KICAD_TYPEINFO_H
diff --git a/include/dialog_env_var_config.h b/include/dialog_env_var_config.h
new file mode 100644
index 0000000..7705e54
--- /dev/null
+++ b/include/dialog_env_var_config.h
@@ -0,0 +1,64 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
+ * Copyright (C) 2015 Kicad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _DIALOG_ENV_VAR_CONFIG_H_
+#define _DIALOG_ENV_VAR_CONFIG_H_
+
+class EDA_DRAW_FRAME;
+
+#include <../common/dialogs/dialog_env_var_config_base.h>
+
+#include <pgm_base.h>
+
+
+/**
+ * DIALOG_ENV_VAR_CONFIG class declaration
+ */
+
+class DIALOG_ENV_VAR_CONFIG: public DIALOG_ENV_VAR_CONFIG_BASE
+{
+private:
+ ENV_VAR_MAP m_envVarMap;
+ bool m_extDefsChanged;
+
+protected:
+ virtual void OnAddRow( wxCommandEvent& aEvent );
+ virtual void OnDeleteSelectedRows( wxCommandEvent& aEvent );
+ virtual void OnHelpRequest( wxCommandEvent& aEvent );
+
+public:
+ DIALOG_ENV_VAR_CONFIG( wxWindow* parent, const ENV_VAR_MAP& aEnvVarMap );
+
+ bool TransferDataToWindow();
+ bool TransferDataFromWindow();
+
+ bool ExternalDefsChanged() const { return m_extDefsChanged; }
+
+ const ENV_VAR_MAP& GetEnvVarMap() const
+ {
+ return m_envVarMap;
+ }
+};
+
+#endif // _DIALOG_ENV_VAR_CONFIG_H_
diff --git a/include/dialog_get_component.h b/include/dialog_get_component.h
new file mode 100644
index 0000000..583f10b
--- /dev/null
+++ b/include/dialog_get_component.h
@@ -0,0 +1,81 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * This file is part of the common libary.
+ * @file dialog_get_component.h
+ */
+
+#ifndef __INCLUDE_DIALOG_GET_COMPONENT_H__
+#define __INCLUDE_DIALOG_GET_COMPONENT_H__
+
+#include <../common/dialogs/dialog_get_component_base.h>
+
+void AddHistoryComponentName( wxArrayString& HistoryList,
+ const wxString& Name );
+
+/* Dialog frame to choose a component name */
+class DIALOG_GET_COMPONENT : public DIALOG_GET_COMPONENT_BASE
+{
+private:
+ bool m_auxToolSelector;
+ wxString m_Text;
+ bool m_selectionIsKeyword;
+
+public:
+ bool m_GetExtraFunction;
+
+public:
+ // Constructor and destructor
+ DIALOG_GET_COMPONENT( EDA_DRAW_FRAME* parent,
+ wxArrayString& HistoryList, const wxString& Title,
+ bool show_extra_tool );
+ ~DIALOG_GET_COMPONENT() {};
+
+ /**
+ * Function GetComponentName
+ * @return the selection (name or keyword)
+ */
+ wxString GetComponentName( void );
+
+ /**
+ * Function IsKeyword
+ * @return true if the returned string is a keyword
+ */
+ bool IsKeyword( void )
+ {
+ return m_selectionIsKeyword;
+ }
+
+ void SetComponentName( const wxString& name );
+
+private:
+ void initDialog( wxArrayString& aHistoryList );
+ void OnCancel( wxCommandEvent& event );
+ void Accept( wxCommandEvent& event );
+ void GetExtraSelection( wxCommandEvent& event );
+};
+
+
+#endif /* __INCLUDE_DIALOG_GET_COMPONENT_H__ */
diff --git a/include/dialog_helpers.h b/include/dialog_helpers.h
new file mode 100644
index 0000000..657470a
--- /dev/null
+++ b/include/dialog_helpers.h
@@ -0,0 +1,218 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file dialog_helpers.h
+ * @brief Helper dialog and control classes.
+ * @note Due to use of wxFormBuilder to create dialogs many of them should be removed.
+ */
+
+#ifndef DIALOG_HELPERS_H_
+#define DIALOG_HELPERS_H_
+
+
+#include <common.h> // EDA_UNITS_T
+#include <dialog_shim.h>
+#include <../common/dialogs/dialog_list_selector_base.h>
+
+
+class EDA_DRAW_FRAME;
+
+#define SORT_LIST true
+
+/**
+ * class EDA_LIST_DIALOG
+ *
+ * A dialog which shows:
+ * a list of elements for selection,
+ * a text control to display help or info about the selected item.
+ * 2 buttons (OK and Cancel)
+ *
+ */
+class EDA_LIST_DIALOG : public EDA_LIST_DIALOG_BASE
+{
+public:
+
+ /**
+ * Constructor:
+ * @param aParent Pointer to the parent window.
+ * @param aTitle = The title shown on top.
+ * @param aItemHeaders is an array containing the column header names for the dialog.
+ * @param aItemList = A wxArrayString of the list of elements.
+ * @param aRefText = An item name if an item must be preselected.
+ * @param aCallBackFunction = callback function to display comments
+ * @param aCallBackFunctionData = a pointer to pass to @a aCallBackFunction
+ * @param aSortList = true to sort list items by alphabetic order.
+ */
+ EDA_LIST_DIALOG( EDA_DRAW_FRAME* aParent, const wxString& aTitle,
+ const wxArrayString& aItemHeaders,
+ const std::vector<wxArrayString>& aItemList,
+ const wxString& aRefText,
+ void (* aCallBackFunction)( wxString& text, void* data ) = NULL,
+ void* aCallBackFunctionData = NULL,
+ bool aSortList = false );
+
+ // ~EDA_LIST_DIALOG() {}
+
+ void Append( const wxArrayString& aItemStr );
+ void InsertItems( const std::vector<wxArrayString>& aItemList, int aPosition = 0 );
+
+ /**
+ * Function GetTextSelection
+ * return the selected text from \a aColumn in the wxListCtrl in the dialog.
+ *
+ * @param aColumn is the column to return the text from.
+ * @return a wxString object containing the selected text from \a aColumn.
+ */
+ wxString GetTextSelection( int aColumn = 0 );
+
+private:
+ void onClose( wxCloseEvent& event );
+ void onCancelClick( wxCommandEvent& event );
+ void onOkClick( wxCommandEvent& event );
+ void onListItemSelected( wxListEvent& event );
+ void onListItemActivated( wxListEvent& event );
+ void textChangeInFilterBox(wxCommandEvent& event);
+
+ void initDialog( const wxArrayString& aItemHeaders,
+ const wxString& aSelection);
+ void sortList();
+ bool m_sortList;
+ void (* m_cb_func)( wxString& text, void* data );
+ void* m_cb_data;
+ const std::vector<wxArrayString>* m_itemsListCp;
+};
+
+
+/**
+ * Class EDA_GRAPHIC_TEXT_CTRL
+ * is a custom text edit control to edit/enter Kicad dimensions ( INCHES or MM )
+ */
+class EDA_GRAPHIC_TEXT_CTRL
+{
+public:
+ EDA_UNITS_T m_UserUnit;
+
+ wxTextCtrl* m_FrameText;
+ wxTextCtrl* m_FrameSize;
+private:
+ wxStaticText* m_Title;
+
+public:
+ EDA_GRAPHIC_TEXT_CTRL( wxWindow* parent, const wxString& Title,
+ const wxString& TextToEdit, int textsize,
+ EDA_UNITS_T user_unit, wxBoxSizer* BoxSizer, int framelen = 200 );
+
+ ~EDA_GRAPHIC_TEXT_CTRL();
+
+ const wxString GetText() const;
+ int GetTextSize();
+ void Enable( bool state );
+ void SetTitle( const wxString& title );
+
+ void SetFocus() { m_FrameText->SetFocus(); }
+ void SetValue( const wxString& value );
+ void SetValue( int value );
+
+ /**
+ * Function FormatSize
+ * formats a string containing the size in the desired units.
+ */
+ static wxString FormatSize( EDA_UNITS_T user_unit, int textSize );
+
+ static int ParseSize( const wxString& sizeText, EDA_UNITS_T user_unit );
+};
+
+
+/**************************************************************************/
+/* Class to edit/enter a coordinate (pair of values) ( INCHES or MM ) in */
+/* dialog boxes, */
+/**************************************************************************/
+class EDA_POSITION_CTRL
+{
+public:
+ EDA_UNITS_T m_UserUnit;
+ wxPoint m_Pos_To_Edit;
+
+ wxTextCtrl* m_FramePosX;
+ wxTextCtrl* m_FramePosY;
+private:
+ wxStaticText* m_TextX, * m_TextY;
+
+public:
+ EDA_POSITION_CTRL( wxWindow* parent, const wxString& title,
+ const wxPoint& pos_to_edit, EDA_UNITS_T user_unit, wxBoxSizer* BoxSizer );
+
+ ~EDA_POSITION_CTRL();
+
+ void Enable( bool x_win_on, bool y_win_on );
+ void SetValue( int x_value, int y_value );
+ wxPoint GetValue();
+};
+
+
+/*************************************************************
+ * Class to edit/enter a size (pair of values for X and Y size)
+ * ( INCHES or MM ) in dialog boxes
+ ***************************************************************/
+class EDA_SIZE_CTRL : public EDA_POSITION_CTRL
+{
+public:
+ EDA_SIZE_CTRL( wxWindow* parent, const wxString& title,
+ const wxSize& size_to_edit, EDA_UNITS_T user_unit, wxBoxSizer* BoxSizer );
+
+ ~EDA_SIZE_CTRL() { }
+ wxSize GetValue();
+};
+
+
+/****************************************************************/
+/* Class to edit/enter a value ( INCHES or MM ) in dialog boxes */
+/****************************************************************/
+class EDA_VALUE_CTRL
+{
+public:
+ EDA_UNITS_T m_UserUnit;
+ int m_Value;
+ wxTextCtrl* m_ValueCtrl;
+private:
+ wxStaticText* m_Text;
+
+public:
+ EDA_VALUE_CTRL( wxWindow* parent, const wxString& title, int value,
+ EDA_UNITS_T user_unit, wxBoxSizer* BoxSizer );
+
+ ~EDA_VALUE_CTRL();
+
+ int GetValue();
+ void SetValue( int new_value );
+ void Enable( bool enbl );
+
+ void SetToolTip( const wxString& text )
+ {
+ m_ValueCtrl->SetToolTip( text );
+ }
+};
+
+#endif // DIALOG_HELPERS_H_
diff --git a/include/dialog_hotkeys_editor.h b/include/dialog_hotkeys_editor.h
new file mode 100644
index 0000000..55951c2
--- /dev/null
+++ b/include/dialog_hotkeys_editor.h
@@ -0,0 +1,256 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file dialog_hotkeys_editor.h
+ */
+
+#ifndef __dialog_hotkeys_editor__
+#define __dialog_hotkeys_editor__
+
+#include <wx/intl.h>
+
+#include <wx/string.h>
+#include <wx/choice.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/settings.h>
+#include <wx/textctrl.h>
+#include <wx/stattext.h>
+#include <wx/button.h>
+#include <wx/listctrl.h>
+#include <wx/dialog.h>
+#include <wx/grid.h>
+
+#include <hotkeys_basic.h>
+#include <draw_frame.h>
+#include <../common/dialogs/dialog_hotkeys_editor_base.h>
+
+class HOTKEYS_EDITOR_DIALOG;
+
+/**
+ * Class HOTKEY_LIST_CTRL
+ * is a class to contain the contents of a hotkey editor tab page.
+ */
+class HOTKEY_LIST_CTRL : public wxListCtrl
+{
+public:
+ HOTKEY_LIST_CTRL( wxWindow* aParent, struct EDA_HOTKEY_CONFIG* aSection );
+ ~HOTKEY_LIST_CTRL() {};
+
+ /**
+ * Function DeselectRow
+ * Deselect the given row
+ *
+ * @param aRow is the row to deselect
+ */
+ void DeselectRow( int aRow );
+
+ /**
+ * Function GetHotkeys
+ * Access to return the vector used for the list control data. This will contain the
+ * "live" state of the user's configuration.
+ *
+ * @return Pointer to vector of hotkey settings
+ */
+ std::vector< EDA_HOTKEY* >& GetHotkeys() { return m_hotkeys; }
+
+ /**
+ * Function RestoreFrom
+ * Restores list control hotkey keycodes to the keycodes present in the
+ * given hotkey configuration array.
+ *
+ * @param aSection is a pointer to the hotkey configuration array
+ */
+ void RestoreFrom( struct EDA_HOTKEY_CONFIG* aSection );
+
+private:
+ int m_curEditingRow;
+ wxString* m_sectionTag;
+ std::vector< EDA_HOTKEY* > m_hotkeys;
+
+ /**
+ * Function recalculateColumns
+ * Adjusts the width of grid columns in proportion of the max text length of both
+ */
+ void recalculateColumns();
+
+protected:
+ /**
+ * Function OnGetItemText
+ * Returns the requested row, column data to the list control.
+ *
+ * @param aRow is the row of the data which matches our hotkeys vector as a index
+ * @param aColumn is the column of the data which is either Command(0) or KeyCode(1)
+ *
+ * @return String containing the text for the specified row, column combination
+ */
+ wxString OnGetItemText( long aRow, long aColumn ) const;
+
+ /**
+ * Function OnChar
+ * Decoded key press handler which is used to set key codes in the list control
+ *
+ * @param aEvent is the key press event, the keycode is retrieved from it
+ */
+ void OnChar( wxKeyEvent& aEvent );
+
+ /**
+ * Function OnListItemSelected
+ * Item selection handler which is used to record what index is selected to alter
+ * update with the key press
+ *
+ * @param aEvent is the button press event, unused
+ */
+ void OnListItemSelected( wxListEvent& aEvent );
+
+ /**
+ * Function OnSize
+ * Sizing update handler to recompute the column widths dynamically and maximize them.
+ * Due to wxWidget's broken autosizing support (it's completely inconsistent across
+ * platforms), we just do it based on a scale of
+ *
+ * @param aEvent is the button press event, unused
+ */
+ void OnSize( wxSizeEvent& aEvent );
+};
+
+/**
+ * Class HOTKEY_SECTION_PAGE
+ * is a class to contain the contents of a hotkey editor tab page.
+ */
+class HOTKEY_SECTION_PAGE : public wxPanel
+{
+public:
+private:
+ EDA_HOTKEY_CONFIG* m_hotkeySection;
+ HOTKEY_LIST_CTRL *m_hotkeyList;
+ HOTKEYS_EDITOR_DIALOG* m_dialog;
+
+public:
+ /** Constructor to create a setup page for one netlist format.
+ * Used in Netlist format Dialog box creation
+ * @param parent = wxNotebook * parent
+ * @param title = title (name) of the notebook page
+ * @param id_NetType = netlist type id
+ */
+ HOTKEY_SECTION_PAGE( HOTKEYS_EDITOR_DIALOG* aDialog, wxNotebook* aParent,
+ const wxString& aTitle,
+ EDA_HOTKEY_CONFIG* aSection );
+ ~HOTKEY_SECTION_PAGE() {};
+
+ /**
+ * Function Restore
+ * Resets the hotkeys back to their original unedited state
+ */
+ void Restore();
+
+ /**
+ * Function GetHotkeys
+ * Accessor to retrieve hotkeys list from list control
+ *
+ * @return Pointer to vector used for list control data
+ */
+ std::vector< EDA_HOTKEY* >& GetHotkeys() { return m_hotkeyList->GetHotkeys(); }
+
+ /**
+ * Function GetHotkeySection
+ * Accessor to retrieve hotkey configuration array assigned to a tab control page
+ *
+ * @return Pointer to hotkey configuration array
+ */
+ EDA_HOTKEY_CONFIG* GetHotkeySection() { return m_hotkeySection; }
+
+ /**
+ * Function GetDialog
+ * Returns pointer to parent dialog window
+ *
+ * @return Pointer to parent dialog window
+ */
+ HOTKEYS_EDITOR_DIALOG* GetDialog() { return m_dialog; }
+};
+
+/**
+ * Class HOTKEYS_EDITOR_DIALOG
+ * is the child class of HOTKEYS_EDITOR_DIALOG_BASE. This is the class
+ * used to create a hotkey editor.
+ */
+class HOTKEYS_EDITOR_DIALOG : public HOTKEYS_EDITOR_DIALOG_BASE
+{
+protected:
+ EDA_BASE_FRAME* m_parent;
+ struct EDA_HOTKEY_CONFIG* m_hotkeys;
+
+ std::vector<HOTKEY_SECTION_PAGE*> m_hotkeySectionPages;
+
+public:
+ HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys );
+
+ ~HOTKEYS_EDITOR_DIALOG() {};
+
+ /**
+ * Function CanSetKey
+ * Check if we can set a hotkey, this will prompt the user if there
+ * is a conflict between keys. The key code should have already been
+ * checked that it's not for the same entry as its currently in or else
+ * it'll prompt the change on itself.
+ * The function will do conflict detection depending on aSectionTag.
+ * g_CommonSectionTag means the key code must be checked with all sections.
+ * While other tags means the key code only must be checked with the aSectionTag
+ * section and g_CommonSectionTag section.
+ *
+ * @param aKey is the key code that wants to be set
+ * @param aSectionTag is the section tag that the key code came from
+ *
+ * @return True if the user accepted the overwrite or no conflict existed
+ */
+ bool CanSetKey( long aKey, const wxString* aSectionTag );
+
+private:
+ /**
+ * Function OnOKClicked
+ * Close the dialog and make save all changes to hotkeys
+ *
+ * @param aEvent is the button press event, unused
+ */
+ void OnOKClicked( wxCommandEvent& aEvent );
+
+ /**
+ * Function UndoClicked
+ * Reinit the hotkeys to the initial state (removes all pending changes)
+ *
+ * @param aEvent is the button press event, unused
+ */
+ void UndoClicked( wxCommandEvent& aEvent );
+};
+
+/**
+ * Function InstallHotkeyFrame
+ * Create a hotkey editor dialog window with the provided hotkey configuration array
+ *
+ * @param aParent is the parent window
+ * @param aHotkeys is the hotkey configuration array
+ */
+void InstallHotkeyFrame( EDA_BASE_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys );
+
+#endif
diff --git a/include/dialog_shim.h b/include/dialog_shim.h
new file mode 100644
index 0000000..dafe7e8
--- /dev/null
+++ b/include/dialog_shim.h
@@ -0,0 +1,134 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012-2016 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef DIALOG_SHIM_
+#define DIALOG_SHIM_
+
+#include <wx/dialog.h>
+#include <hashtables.h>
+#include <kiway_player.h>
+
+#define DLGSHIM_USE_SETFOCUS 0
+
+class WDO_ENABLE_DISABLE;
+class EVENT_LOOP;
+
+// These macros are for DIALOG_SHIM only, NOT for KIWAY_PLAYER. KIWAY_PLAYER
+// has its own support for quasi modal and its platform specific issues are different
+// than for a wxDialog.
+ #define SHOWQUASIMODAL ShowQuasiModal
+ #define ENDQUASIMODAL EndQuasiModal
+
+
+/**
+ * Class DIALOG_SHIM
+ * may sit in the inheritance tree between wxDialog and any class written by
+ * wxFormBuilder. To put it there, use wxFormBuilder tool and set:
+ * <br> subclass name = DIALOG_SHIM
+ * <br> subclass header = dialog_shim.h
+ * <br>
+ * in the dialog window's properties.
+ **/
+class DIALOG_SHIM : public wxDialog, public KIWAY_HOLDER
+{
+ /**
+ * Function OnCloseWindow
+ *
+ * properly handles the wxCloseEvent when in the quasimodal mode when not calling
+ * EndQuasiModal which is possible with any dialog derived from #DIALOG_SHIM.
+ */
+ void OnCloseWindow( wxCloseEvent& aEvent );
+
+ /**
+ * Function OnCloseWindow
+ *
+ * properly handles the default button events when in the quasimodal mode when not
+ * calling EndQuasiModal which is possible with any dialog derived from #DIALOG_SHIM.
+ */
+ void OnButton( wxCommandEvent& aEvent );
+
+public:
+
+ DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& title,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxDEFAULT_DIALOG_STYLE,
+ const wxString& name = wxDialogNameStr
+ );
+
+ ~DIALOG_SHIM();
+
+ int ShowQuasiModal(); // disable only the parent window, otherwise modal.
+
+ void EndQuasiModal( int retCode ); // End quasi-modal mode
+
+ bool IsQuasiModal() { return m_qmodal_showing; }
+
+ bool Show( bool show ); // override wxDialog::Show
+
+ bool Enable( bool enable ); // override wxDialog::Enable virtual
+
+protected:
+
+ /**
+ * In all dialogs, we must call the same functions to fix minimal
+ * dlg size, the default position and perhaps some others to fix a few issues
+ * depending on Windows Managers
+ * this helper function does these calls.
+ *
+ * FinishDialogSettings must be called from derived classes,
+ * when all widgets are initialized, and therefore their size fixed.
+ * If TransferDataToWindow() is used to initialize widgets, at end of TransferDataToWindow,
+ * or better at end of a wxInitDialogEvent handler
+ *
+ * In any case, the best way is to call it in a wxInitDialogEvent handler
+ * after calling TransfertDataToWindow(), which is the default
+ * wxInitDialogEvent handler wxDialog
+ */
+ void FinishDialogSettings();
+
+ /** A ugly hack to fix an issue on OSX:
+ * when typing ctrl+c in a wxTextCtrl inside a dialog, it is closed instead of
+ * copying a text if a button with wxID_CANCEL is used in a wxStdDialogButtonSizer,
+ * when the dlg is created by wxFormBuilder:
+ * the label is &Cancel, and this accelerator key has priority
+ * to copy text standard accelerator, and the dlg is closed when trying to copy text
+ * this function do nothing on other platforms
+ */
+ void FixOSXCancelButtonIssue();
+
+ std::string m_hash_key; // alternate for class_map when classname re-used.
+
+ // variables for quasi-modal behavior support, only used by a few derivatives.
+ EVENT_LOOP* m_qmodal_loop; // points to nested event_loop, NULL means not qmodal and dismissed
+ bool m_qmodal_showing;
+ WDO_ENABLE_DISABLE* m_qmodal_parent_disabler;
+
+#if DLGSHIM_USE_SETFOCUS
+private:
+ void onInit( wxInitDialogEvent& aEvent );
+#endif
+};
+
+#endif // DIALOG_SHIM_
diff --git a/include/dlist.h b/include/dlist.h
new file mode 100644
index 0000000..2acf802
--- /dev/null
+++ b/include/dlist.h
@@ -0,0 +1,258 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2008 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2008 Kicad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef DLIST_H_
+#define DLIST_H_
+
+
+#include <stdio.h> // NULL definition.
+
+
+class EDA_ITEM;
+
+
+/**
+ * Class DHEAD
+ * is only for use by template class DLIST, use that instead.
+ */
+class DHEAD
+{
+protected:
+ EDA_ITEM* first; ///< first element in list, or NULL if list empty
+ EDA_ITEM* last; ///< last elment in list, or NULL if empty
+ unsigned count; ///< how many elements are in the list, automatically maintained.
+ bool meOwner; ///< I must delete the objects I hold in my destructor
+
+ /**
+ * Constructor DHEAD
+ * is protected so that a DHEAD can only be instantiated from within a
+ * DLIST template.
+ */
+ DHEAD() :
+ first(0),
+ last(0),
+ count(0),
+ meOwner(true)
+ {
+ }
+
+ ~DHEAD();
+
+ /**
+ * Function append
+ * adds \a aNewElement to the end of the list.
+ * @param aNewElement The element to insert.
+ */
+ void append( EDA_ITEM* aNewElement );
+
+ /**
+ * Function append
+ * adds \a aList to the end of the list.
+ * @param aList The list to aList.
+ */
+ void append( DHEAD& aList );
+
+ /**
+ * Function insert
+ * puts \a aNewElement just in front of \a aElementAfterMe in the list sequence.
+ * If \a aElementAfterMe is NULL, then simply append().
+ * @param aNewElement The element to insert.
+ * @param aElementAfterMe The element to insert \a aNewElement before,
+ * if NULL then append \a aNewElement onto end of list.
+ */
+ void insert( EDA_ITEM* aNewElement, EDA_ITEM* aElementAfterMe );
+
+ /**
+ * Function insert
+ * puts \a aNewElement in front of list sequence.
+ * @param aNewElement The element to insert.
+ */
+ void insert( EDA_ITEM* aNewElement )
+ {
+ insert( aNewElement, first );
+ }
+
+ /**
+ * Function remove
+ * removes \a aElement from the list, but does not delete it.
+ * @param aElement The element to remove.
+ */
+ void remove( EDA_ITEM* aElement );
+
+
+public:
+
+ /**
+ * Function DeleteAll
+ * deletes all items on the list and leaves the list empty. The destructor
+ * for each item is called.
+ */
+ void DeleteAll();
+
+ /**
+ * Function SetOwnership
+ * controls whether the list owns the objects and is responsible for
+ * deleteing their memory at time of this object's destruction.
+ */
+ void SetOwnership( bool Iown ) { meOwner = Iown; }
+
+
+ /**
+ * Function GetCount
+ * returns the number of elements in the list.
+ */
+ unsigned GetCount() const { return count; }
+
+#if defined(DEBUG)
+ void VerifyListIntegrity();
+#endif
+};
+
+
+/**
+ * Class DLIST
+ * is the head of a doubly linked list. It contains pointers to the first
+ * and last elements in a doubly linked list. The elements in the list must
+ * be of class T or derived from T, and T must be derived from EDA_ITEM.
+ * @see DHEAD for additional public functions.
+ */
+template <class T>
+class DLIST : public DHEAD
+{
+public:
+
+ /**
+ * operator T*
+ * is a casting operator that returns \a GetFirst(), a T*
+ */
+ operator T* () const { return GetFirst(); }
+
+ /**
+ * operator ->
+ * is a dereferencing operator that returns \a GetFirst(), a T*
+ */
+ T* operator -> () const { return GetFirst(); }
+
+ /**
+ * Function GetFirst
+ * returns the first T* in the list without removing it, or NULL if
+ * the list is empty.
+ */
+ T* GetFirst() const { return (T*) first; }
+
+ /**
+ * Function GetLast
+ * returns the last T* in the list without removing it,
+ * or NULL if the list is empty.
+ */
+ T* GetLast() const { return (T*) last; }
+
+ /**
+ * Function Append
+ * adds \a aNewElement to the end of the list.
+ * @param aNewElement The element to insert.
+ */
+ void Append( T* aNewElement )
+ {
+ append( aNewElement );
+ }
+
+ /**
+ * Function Append
+ * adds \a aList to the end of the list.
+ * @param aList The list to append to the end of the list.
+ */
+ void Append( DLIST& aList )
+ {
+ append( aList );
+ }
+
+ /**
+ * Function Insert
+ * puts \a aNewElement just in front of \a aElementAfterMe in the list sequence.
+ * If aElementAfterMe is NULL, then simply Append()
+ * @param aNewElement The element to insert.
+ * @param aElementAfterMe The element to insert \a aNewElement before,
+ * if NULL then append \a aNewElement onto end of list.
+ */
+ void Insert( T* aNewElement, T* aElementAfterMe )
+ {
+ insert( aNewElement, aElementAfterMe );
+ }
+
+ /**
+ * Function Remove
+ * removes \a aElement from the list, but does not delete it.
+ * @param aElement The element to remove from the list.
+ * @return T* - the removed element, so you can easily delete it upon return.
+ */
+ T* Remove( T* aElement )
+ {
+ remove( aElement );
+ return aElement;
+ }
+
+ //-----< STL like functions >---------------------------------------
+ T* begin() const { return GetFirst(); }
+ T* end() const { return NULL; }
+
+ T* PopFront()
+ {
+ if( GetFirst() )
+ return Remove( GetFirst() );
+ return NULL;
+ }
+
+ T* PopBack()
+ {
+ if( GetLast() )
+ return Remove( GetLast() );
+ return NULL;
+ }
+
+ /**
+ * Function PushFront
+ * puts aNewElement at front of list sequence.
+ * @param aNewElement The element to insert at the front of the list.
+ */
+ void PushFront( T* aNewElement )
+ {
+ insert( aNewElement );
+ }
+
+ /**
+ * Function PushBack
+ * puts aNewElement at the end of the list sequence.
+ * @param aNewElement The element to push to the end of the list.
+ */
+ void PushBack( T* aNewElement )
+ {
+ append( aNewElement );
+ }
+
+ //-----</ STL like functions >--------------------------------------
+};
+
+#endif // DLIST_H_
diff --git a/include/draw_frame.h b/include/draw_frame.h
new file mode 100644
index 0000000..6abdb05
--- /dev/null
+++ b/include/draw_frame.h
@@ -0,0 +1,812 @@
+#ifndef EDA_DRAW_FRAME_H_
+#define EDA_DRAW_FRAME_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wxstruct.h>
+#include <kiway_player.h>
+#include <climits>
+
+class wxSingleInstanceChecker;
+class EDA_HOTKEY;
+
+#define DEFAULT_MAX_UNDO_ITEMS 0
+#define ABS_MAX_UNDO_ITEMS (INT_MAX / 2)
+
+/**
+ * Class EDA_DRAW_FRAME
+ * is the base class for create windows for drawing purpose. The Eeschema, Pcbnew and
+ * GerbView main windows are just a few examples of classes derived from EDA_DRAW_FRAME.
+ */
+class EDA_DRAW_FRAME : public KIWAY_PLAYER
+{
+ /// Let the #EDA_DRAW_PANEL object have access to the protected data since
+ /// it is closely tied to the #EDA_DRAW_FRAME.
+ friend class EDA_DRAW_PANEL;
+
+ ///< Id of active button on the vertical toolbar.
+ int m_toolId;
+
+ BASE_SCREEN* m_currentScreen; ///< current used SCREEN
+
+ bool m_snapToGrid; ///< Indicates if cursor should be snapped to grid.
+ bool m_galCanvasActive; ///< whether to use new GAL engine
+
+ EDA_DRAW_PANEL_GAL* m_galCanvas;
+
+protected:
+
+ wxSingleInstanceChecker* m_file_checker; ///< prevents opening same file multiple times.
+
+ EDA_HOTKEY_CONFIG* m_hotkeysDescrList;
+ int m_LastGridSizeId; // the command id offset (>= 0) of the last selected grid
+ // 0 is for the grid corresponding to
+ // a wxCommand ID = ID_POPUP_GRID_LEVEL_1000.
+ bool m_drawGrid; // hide/Show grid
+ bool m_showPageLimits; ///< true to display the page limits
+ EDA_COLOR_T m_gridColor; // Grid color
+ EDA_COLOR_T m_drawBgColor; ///< the background color of the draw canvas
+ ///< BLACK for Pcbnew, BLACK or WHITE for eeschema
+ double m_zoomLevelCoeff; ///< a suitable value to convert the internal zoom scaling factor
+ // to a zoom level value which rougly gives 1.0 when the board/schematic
+ // is at scale = 1
+ int m_UndoRedoCountMax; ///< default Undo/Redo command Max depth, to be handed
+ // to screens
+
+ /// The area to draw on.
+ EDA_DRAW_PANEL* m_canvas;
+
+ TOOL_MANAGER* m_toolManager;
+ TOOL_DISPATCHER* m_toolDispatcher;
+
+ /// Tool ID of previously active draw tool bar button.
+ int m_lastDrawToolId;
+
+ /// The shape of the KiCad cursor. The default value (0) is the normal cross
+ /// hair cursor. Set to non-zero value to draw the full screen cursor.
+ /// @note This is not the system mouse cursor.
+ int m_cursorShape;
+
+ /// True shows the X and Y axis indicators.
+ bool m_showAxis;
+
+ /// True shows the grid axis indicators.
+ bool m_showGridAxis;
+
+ /// True shows the origin axis used to indicate the coordinate offset for
+ /// drill, gerber, and component position files.
+ bool m_showOriginAxis;
+
+ /// True shows the drawing border and title block.
+ bool m_showBorderAndTitleBlock;
+
+ /// Choice box to choose the grid size.
+ wxChoice* m_gridSelectBox;
+
+ /// Choice box to choose the zoom value.
+ wxChoice* m_zoomSelectBox;
+
+ /// The tool bar that contains the buttons for quick access to the application draw
+ /// tools. It typically is located on the right side of the main window.
+ wxAuiToolBar* m_drawToolBar;
+
+ /// The options tool bar typcially located on the left edge of the main window.
+ wxAuiToolBar* m_optionsToolBar;
+
+ /// Panel used to display information at the bottom of the main window.
+ EDA_MSG_PANEL* m_messagePanel;
+
+ int m_MsgFrameHeight;
+
+#ifdef USE_WX_OVERLAY
+ // MAC Uses overlay to workaround the wxINVERT and wxXOR miss
+ wxOverlay m_overlay;
+#endif
+
+ /// One-shot to avoid a recursive mouse event during hotkey movement
+ bool m_movingCursorWithKeyboard;
+
+ void SetScreen( BASE_SCREEN* aScreen ) { m_currentScreen = aScreen; }
+
+ /**
+ * Function unitsChangeRefresh
+ * is called when when the units setting has changed to allow for any derived classes
+ * to handle refreshing and controls that have units based measurements in them. The
+ * default version only updates the status bar. Don't forget to call the default
+ * in your derived class or the status bar will not get updated properly.
+ */
+ virtual void unitsChangeRefresh();
+
+ /**
+ * Function GeneralControlKeyMovement
+ * Handle the common part of GeneralControl dedicated to global
+ * cursor keys (i.e. cursor movement by keyboard) */
+ void GeneralControlKeyMovement( int aHotKey, wxPoint *aPos, bool aSnapToGrid );
+
+ /* Function RefreshCrosshair
+ * Move and refresh the crosshair after movement; also call the
+ * mouse capture function, if active.
+ */
+ void RefreshCrossHair( const wxPoint &aOldPos, const wxPoint &aEvtPos, wxDC* aDC );
+public:
+ EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent,
+ FRAME_T aFrameType,
+ const wxString& aTitle,
+ const wxPoint& aPos, const wxSize& aSize,
+ long aStyle,
+ const wxString& aFrameName );
+
+ ~EDA_DRAW_FRAME();
+
+ /**
+ * Function LockFile
+ * marks a schematic file as being in use. Use ReleaseFile() to undo this.
+ * @param aFileName = full path to the file.
+ * @return false if the file was already locked, true otherwise.
+ */
+ bool LockFile( const wxString& aFileName );
+
+ /**
+ * Function ReleaseFile
+ * Release the current file marked in use. See m_file_checker.
+ */
+ void ReleaseFile();
+
+ virtual void SetPageSettings( const PAGE_INFO& aPageSettings ) = 0;
+ virtual const PAGE_INFO& GetPageSettings() const = 0;
+
+ /**
+ * Function GetPageSizeIU
+ * works off of GetPageSettings() to return the size of the paper page in
+ * the internal units of this particular view.
+ */
+ virtual const wxSize GetPageSizeIU() const = 0;
+
+ /**
+ * Function GetAuxOrigin
+ * returns the origin of the axis used for plotting and various exports.
+ */
+ virtual const wxPoint& GetAuxOrigin() const = 0;
+ virtual void SetAuxOrigin( const wxPoint& aPosition ) = 0;
+
+ /**
+ * Function GetGridOrigin
+ * returns the absolute coordinates of the origin of the snap grid. This is
+ * treated as a relative offset, and snapping will occur at multiples of the grid
+ * size relative to this point.
+ */
+ virtual const wxPoint& GetGridOrigin() const = 0;
+ virtual void SetGridOrigin( const wxPoint& aPosition ) = 0;
+
+ //-----<BASE_SCREEN API moved here>------------------------------------------
+ /**
+ * Function GetCrossHairPosition
+ * return the current cross hair position in logical (drawing) coordinates.
+ * @param aInvertY Inverts the Y axis position.
+ * @return The cross hair position in drawing coordinates.
+ */
+ wxPoint GetCrossHairPosition( bool aInvertY = false ) const;
+
+ /**
+ * Function SetCrossHairPosition
+ * sets the screen cross hair position to \a aPosition in logical (drawing) units.
+ * @param aPosition The new cross hair position.
+ * @param aSnapToGrid Sets the cross hair position to the nearest grid position to
+ * \a aPosition.
+ *
+ */
+ void SetCrossHairPosition( const wxPoint& aPosition, bool aSnapToGrid = true );
+
+ /**
+ * Function GetCursorPosition
+ * returns the current cursor position in logical (drawing) units.
+ * @param aOnGrid Returns the nearest grid position at the current cursor position.
+ * @param aGridSize Custom grid size instead of the current grid size. Only valid
+ * if \a aOnGrid is true.
+ * @return The current cursor position.
+ */
+ wxPoint GetCursorPosition( bool aOnGrid, wxRealPoint* aGridSize = NULL ) const;
+
+ /**
+ * Function GetNearestGridPosition
+ * returns the nearest \a aGridSize location to \a aPosition.
+ * @param aPosition The position to check.
+ * @param aGridSize The grid size to locate to if provided. If NULL then the current
+ * grid size is used.
+ * @return The nearst grid position.
+ */
+ wxPoint GetNearestGridPosition( const wxPoint& aPosition, wxRealPoint* aGridSize = NULL ) const;
+
+ /**
+ * Function GetCursorScreenPosition
+ * returns the cross hair position in device (display) units.b
+ * @return The current cross hair position.
+ */
+ wxPoint GetCrossHairScreenPosition() const;
+
+ void SetMousePosition( const wxPoint& aPosition );
+
+ /**
+ * Function RefPos
+ * Return the reference position, coming from either the mouse position
+ * or the cursor position.
+ *
+ * @param useMouse If true, return mouse position, else cursor's.
+ *
+ * @return wxPoint - The reference point, either the mouse position or
+ * the cursor position.
+ */
+ wxPoint RefPos( bool useMouse ) const;
+
+ const wxPoint& GetScrollCenterPosition() const;
+ void SetScrollCenterPosition( const wxPoint& aPoint );
+
+ //-----</BASE_SCREEN API moved here>-----------------------------------------
+
+
+ virtual const TITLE_BLOCK& GetTitleBlock() const = 0;
+ virtual void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) = 0;
+
+ // the background color of the draw canvas:
+ // Virtual because some frames can have a specific way to get/set the bg color
+ /**
+ * @return the EDA_COLOR_T for the canvas background
+ */
+ virtual EDA_COLOR_T GetDrawBgColor() const { return m_drawBgColor; }
+
+ /**
+ * @param aColor: the EDA_COLOR_T for the canvas background
+ */
+ virtual void SetDrawBgColor( EDA_COLOR_T aColor) { m_drawBgColor= aColor ; }
+
+ int GetCursorShape() const { return m_cursorShape; }
+
+ virtual void SetCursorShape( int aCursorShape ) { m_cursorShape = aCursorShape; }
+
+ bool GetShowBorderAndTitleBlock() const { return m_showBorderAndTitleBlock; }
+
+ void SetShowBorderAndTitleBlock( bool aShow ) { m_showBorderAndTitleBlock = aShow; }
+ bool ShowPageLimits() const { return m_showPageLimits; }
+ void SetShowPageLimits( bool aShow ) { m_showPageLimits = aShow; }
+
+ EDA_DRAW_PANEL* GetCanvas() { return m_canvas; }
+
+ virtual wxString GetScreenDesc() const;
+
+ /**
+ * Function GetScreen
+ * returns a pointer to a BASE_SCREEN or one of its
+ * derivatives. It is overloaded by derived classes to return
+ * SCH_SCREEN or PCB_SCREEN.
+ */
+ virtual BASE_SCREEN* GetScreen() const { return m_currentScreen; }
+
+ /**
+ * Execute a remote command send via a socket to the application,
+ * port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242)
+ * It called by EDA_DRAW_FRAME::OnSockRequest().
+ * this is a virtual function becuse the actual commands depends on the
+ * application.
+ * the basic function do nothing
+ * @param cmdline = received command from socket
+ */
+ virtual void ExecuteRemoteCommand( const char* cmdline ){}
+
+ void OnMenuOpen( wxMenuEvent& event );
+ void OnMouseEvent( wxMouseEvent& event );
+
+ /**
+ * function SkipNextLeftButtonReleaseEvent
+ * after calling this function, if the left mouse button
+ * is down, the next left mouse button release event will be ignored.
+ * It is is usefull for instance when closing a dialog on a mouse click,
+ * to skip the next mouse left button release event
+ * by the parent window, because the mouse button
+ * clicked on the dialog is often released in the parent frame,
+ * and therefore creates a left button released mouse event
+ * which can be unwanted in some cases
+ */
+ void SkipNextLeftButtonReleaseEvent();
+
+ ///> @copydoc EDA_BASE_FRAME::WriteHotkeyConfig
+ int WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList, wxString* aFullFileName = NULL );
+
+ /**
+ * Function GetHotkeyConfig()
+ * Returns a structure containing currently used hotkey mapping.
+ */
+ EDA_HOTKEY_CONFIG* GetHotkeyConfig() const { return m_hotkeysDescrList; }
+
+ /**
+ * Function GetHotKeyDescription
+ * Searches lists of hot key identifiers (HK_xxx) used in the frame to find a matching
+ * hot key descriptor.
+ * @param aCommand is the hot key identifier.
+ * @return Hot key descriptor or NULL if none found.
+ */
+ virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const = 0;
+
+ virtual bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition,
+ EDA_ITEM* aItem = NULL );
+
+ /**
+ * Function AddMenuZoomAndGrid (virtual)
+ * Add standard zoom commands and submenu zoom and grid selection to a popup menu
+ * uses zoom hotkeys info base to add hotkeys info to menu commands
+ * @param aMasterMenu = the menu to populate.
+ */
+ virtual void AddMenuZoomAndGrid( wxMenu* aMasterMenu );
+
+ /**
+ * Function GetZoomLevelIndicator
+ * returns a human readable value which can be displayed as zoom
+ * level indicator in dialogs.
+ * this can be a percentage or other indicator.
+ * it is virtual because it could be different for pcbnew, gerbview or eeschema
+ * (different internal units and different purposes)
+ * note also adjust m_zoomLevelCoeff is the way to adjust the displayed value
+ */
+ virtual const wxString GetZoomLevelIndicator() const;
+
+ /**
+ * Function GetZoomLevelCoeff
+ * returns the coefficient to convert internal display scale factor to zoom level.
+ */
+ inline double GetZoomLevelCoeff() const { return m_zoomLevelCoeff; }
+
+ void EraseMsgBox();
+ void Process_PageSettings( wxCommandEvent& event );
+
+ virtual void ReCreateHToolbar() = 0;
+ virtual void ReCreateVToolbar() = 0;
+ virtual void ReCreateMenuBar();
+ virtual void ReCreateAuxiliaryToolbar();
+
+ /**
+ * Function SetToolID
+ * sets the tool command ID to \a aId and sets the cursor to \a aCursor. The
+ * command ID must be greater or equal ::ID_NO_TOOL_SELECTED. If the command
+ * ID is less than ::ID_NO_TOOL_SELECTED, the tool command ID is set to
+ * ::ID_NO_TOOL_SELECTED. On debug builds, an assertion will be raised when
+ * \a aId is invalid.
+ * @param aId New tool command ID if greater than or equal to ::ID_NO_TOOL_SELECTED.
+ If less than zero, the current tool command ID is retained.
+ * @param aCursor Sets the cursor shape if greater than or equal to zero.
+ * @param aToolMsg The tool message to set in the status bar.
+ */
+ virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg );
+
+ int GetToolId() const { return m_toolId; }
+
+ /* These 4 functions provide a basic way to show/hide grid
+ * and /get/set grid color.
+ * These parameters are saved in KiCad config for each main frame
+ */
+ /**
+ * Function IsGridVisible() , virtual
+ * @return true if the grid must be shown
+ */
+ virtual bool IsGridVisible() const
+ {
+ return m_drawGrid;
+ }
+
+ /**
+ * Function SetGridVisibility() , virtual
+ * It may be overloaded by derived classes
+ * @param aVisible = true if the grid must be shown
+ */
+ virtual void SetGridVisibility( bool aVisible )
+ {
+ m_drawGrid = aVisible;
+ }
+
+ /**
+ * Function GetGridColor() , virtual
+ * @return the color of the grid
+ */
+ virtual EDA_COLOR_T GetGridColor() const
+ {
+ return m_gridColor;
+ }
+
+ /**
+ * Function SetGridColor() , virtual
+ * @param aColor = the new color of the grid
+ */
+ virtual void SetGridColor( EDA_COLOR_T aColor )
+ {
+ m_gridColor = aColor;
+ }
+
+ /**
+ * Function GetGridPosition
+ * returns the nearest grid position to \a aPosition if a screen is defined and snap to
+ * grid is enabled. Otherwise, the original positions is returned.
+ * @see m_snapToGrid and m_BaseScreen members.
+ * @param aPosition The position to test.
+ * @return The wxPoint of the appropriate cursor position.
+ */
+ wxPoint GetGridPosition( const wxPoint& aPosition ) const;
+
+ /**
+ * Function SetNextGrid()
+ * changes the grid size settings to the next one available.
+ */
+ virtual void SetNextGrid();
+
+ /**
+ * Function SetPrevGrid()
+ * changes the grid size settings to the previous one available.
+ */
+ virtual void SetPrevGrid();
+
+ /**
+ * Function SetPresetGrid()
+ * changes the grid size to one of the preset values.
+ * @param aIndex is the index from the list.
+ */
+ void SetPresetGrid( int aIndex );
+
+ /**
+ * Command event handler for selecting grid sizes.
+ *
+ * All commands that set the grid size should eventually end up here.
+ * This is where the application setting is saved. If you override
+ * this method, make sure you call down to the base class.
+ *
+ * @param event - Command event passed by selecting grid size from the
+ * grid size combobox on the toolbar.
+ */
+ virtual void OnSelectGrid( wxCommandEvent& event );
+
+ /**
+ * Functions OnSelectZoom
+ * sets the zoom factor when selected by the zoom list box in the main tool bar.
+ * @note List position 0 is fit to page
+ * List position >= 1 = zoom (1 to zoom max)
+ * Last list position is custom zoom not in zoom list.
+ */
+ virtual void OnSelectZoom( wxCommandEvent& event );
+
+ // Command event handlers shared by all applications derived from EDA_DRAW_FRAME.
+ void OnToggleGridState( wxCommandEvent& aEvent );
+ void OnSelectUnits( wxCommandEvent& aEvent );
+ void OnToggleCrossHairStyle( wxCommandEvent& aEvent );
+
+ // Update user interface event handlers shared by all applications derived from
+ // EDA_DRAW_FRAME.
+ void OnUpdateUndo( wxUpdateUIEvent& aEvent );
+ void OnUpdateRedo( wxUpdateUIEvent& aEvent );
+ void OnUpdateGrid( wxUpdateUIEvent& aEvent );
+ void OnUpdateUnits( wxUpdateUIEvent& aEvent );
+ void OnUpdateCrossHairStyle( wxUpdateUIEvent& aEvent );
+
+ /**
+ * Function GeneralControl
+ * performs application specific control using \a aDC at \a aPosition in logical units.
+ * <p>
+ * Override this function for application specific control. This function gets
+ * called on every mouse and key event.
+ *</p>
+ * @param aDC A device context.
+ * @param aPosition The current cursor position in logical (drawing) units.
+ * @param aHotKey A key event used for application specific control if not zero.
+ */
+ virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 )
+ {
+ return false;
+ }
+
+ /**
+ * Function OnSize
+ * recalculates the size of toolbars and display panel when the frame size changes.
+ */
+ virtual void OnSize( wxSizeEvent& event );
+
+ void OnEraseBackground( wxEraseEvent& SizeEvent );
+
+ virtual void OnZoom( wxCommandEvent& event );
+
+ /**
+ * Function SetNextZoom()
+ * changes the zoom to the next one available.
+ */
+ void SetNextZoom();
+
+ /**
+ * Function SetPrevZoom()
+ * changes the zoom to the previous one available.
+ */
+ void SetPrevZoom();
+
+ /**
+ * Function SetPresetZoom()
+ * changes zoom to one of the preset values.
+ * @param aIndex is the zoom index from the list.
+ */
+ void SetPresetZoom( int aIndex );
+
+ /**
+ * Function RedrawScreen
+ * redraws the entire screen area by updating the scroll bars and mouse pointer in
+ * order to have \a aCenterPoint at the center of the screen.
+ * @param aCenterPoint The position in logical units to center the scroll bars.
+ * @param aWarpPointer Moves the mouse cursor to \a aCenterPoint if true.
+ */
+ void RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointer );
+
+ /**
+ * Function RedrawScreen2
+ * puts the crosshair back to the screen position it had before zooming
+ * @param posBefore screen position of the crosshair before zooming
+ */
+ void RedrawScreen2( const wxPoint& posBefore );
+
+ /**
+ * Function Zoom_Automatique
+ * redraws the screen with best zoom level and the best centering
+ * that shows all the page or the board
+ */
+ void Zoom_Automatique( bool aWarpPointer );
+
+ /* Set the zoom level to show the area Rect */
+ void Window_Zoom( EDA_RECT& Rect );
+
+ /** Return the zoom level which displays the full page on screen */
+ virtual double BestZoom() = 0;
+
+ /**
+ * Function GetZoom
+ * @return The current zoom level.
+ */
+ double GetZoom();
+
+ /**
+ * Function DrawWorkSheet
+ * Draws on screen the page layout with the frame and the basic inscriptions.
+ * @param aDC The device context.
+ * @param aScreen screen to draw
+ * @param aLineWidth The pen width to use to draw the layout.
+ * @param aScale The mils to Iu conversion factor.
+ * @param aFilename The filename to display in basic inscriptions.
+ */
+ void DrawWorkSheet( wxDC* aDC, BASE_SCREEN* aScreen, int aLineWidth,
+ double aScale, const wxString &aFilename );
+
+ void DisplayToolMsg( const wxString& msg );
+ virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg ) = 0;
+ virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos ) = 0;
+ virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+ virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) = 0;
+ virtual void ToolOnRightClick( wxCommandEvent& event );
+ void AdjustScrollBars( const wxPoint& aCenterPosition );
+
+ /**
+ * Function OnActivate (virtual)
+ * is called when activating the frame.
+ * In derived classes with a overriding OnActivate function,
+ * do not forget to call this EDA_DRAW_FRAME::OnActivate( event ) basic function.
+ */
+ virtual void OnActivate( wxActivateEvent& event );
+
+ /**
+ * Function UpdateStatusBar
+ * updates the status bar information.
+ *
+ * The base method updates the absolute and relative coordinates and the
+ * zoom information. If you override this virtual method, make sure to call
+ * this subclassed method. The status bar can draw itself. This is not
+ * a drawing function per se, but rather updates lines of text held by
+ * the components within the status bar which is owned by the wxFrame.
+ * <p>
+ * On a MAC, be careful about calling this function when there is an
+ * existing wxDC in existence on a sibling window.
+ */
+ virtual void UpdateStatusBar();
+
+ /**
+ * Function DisplayUnitsMsg
+ * displays current unit pane on the status bar.
+ */
+ void DisplayUnitsMsg();
+
+ /* Handlers for block commands */
+ virtual void InitBlockPasteInfos();
+
+ /**
+ * Function HandleBlockBegin
+ * initializes the block command including the command type, initial position,
+ * and other variables.
+ */
+ virtual bool HandleBlockBegin( wxDC* aDC, int aKey, const wxPoint& aPosition );
+
+ /**
+ * Function BlockCommand
+ * Returns the block command code (BLOCK_MOVE, BLOCK_COPY...) corresponding to the
+ * keys pressed (ALT, SHIFT, SHIFT ALT ..) when block command is started by dragging
+ * the mouse.
+ *
+ * @param aKey = the key modifiers (Alt, Shift ...)
+ * @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
+ */
+ virtual int BlockCommand( int aKey );
+
+ /**
+ * Function HandleBlockPlace( )
+ * Called after HandleBlockEnd, when a block command needs to be
+ * executed after the block is moved to its new place
+ * (bloc move, drag, copy .. )
+ * Parameters must be initialized in GetScreen()->m_BlockLocate
+ */
+ virtual void HandleBlockPlace( wxDC* DC );
+
+ /**
+ * Function HandleBlockEnd( )
+ * Handle the "end" of a block command,
+ * i.e. is called at the end of the definition of the area of a block.
+ * depending on the current block command, this command is executed
+ * or parameters are initialized to prepare a call to HandleBlockPlace
+ * in GetScreen()->m_BlockLocate
+ * @return false if no item selected, or command finished,
+ * true if some items found and HandleBlockPlace must be called later
+ */
+ virtual bool HandleBlockEnd( wxDC* DC );
+
+ /**
+ * Function CopyToClipboard
+ * copies the current page or the current block to the clipboard.
+ */
+ void CopyToClipboard( wxCommandEvent& event );
+
+ /* interprocess communication */
+ void OnSockRequest( wxSocketEvent& evt );
+ void OnSockRequestServer( wxSocketEvent& evt );
+
+ void LoadSettings( wxConfigBase* aCfg ); // override virtual
+
+ void SaveSettings( wxConfigBase* aCfg ); // override virtual
+
+ /**
+ * Append a message to the message panel.
+ *
+ * This helper method checks to make sure the message panel exists in
+ * the frame and appends a message to it using the message panel
+ * AppendMessage() method.
+ *
+ * @param textUpper - The message upper text.
+ * @param textLower - The message lower text.
+ * @param color - A color ID from the KiCad color list (see colors.h).
+ * @param pad - Number of spaces to pad between messages (default = 4).
+ */
+ void AppendMsgPanel( const wxString& textUpper, const wxString& textLower,
+ EDA_COLOR_T color, int pad = 6 );
+
+ /**
+ * Clear all messages from the message panel.
+ */
+ void ClearMsgPanel( void );
+
+ /**
+ * Function SetMsgPanel
+ * clears the message panel and populates it with the contents of \a aList.
+ *
+ * @param aList is the list of #MSG_PANEL_ITEM objects to fill the message panel.
+ */
+ void SetMsgPanel( const std::vector< MSG_PANEL_ITEM >& aList );
+
+ void SetMsgPanel( EDA_ITEM* aItem );
+
+ /**
+ * Function UpdateMsgPanel
+ * redraws the message panel.
+ */
+ virtual void UpdateMsgPanel();
+
+ /**
+ * Function PushPreferences
+ * Pushes a few preferences from a parent window to a child window.
+ * (i.e. from eeschema to schematic symbol editor)
+ *
+ * @param aParentCanvas is the parent canvas to push preferences from.
+ */
+ void PushPreferences( const EDA_DRAW_PANEL* aParentCanvas );
+
+ /**
+ * Function PrintPage
+ * used to print a page
+ * Print the page pointed by current screen, set by the calling print function
+ * @param aDC = wxDC given by the calling print function
+ * @param aPrintMask = not used here
+ * @param aPrintMirrorMode = not used here (Set when printing in mirror mode)
+ * @param aData = a pointer on an auxiliary data (not always used, NULL if not used)
+ */
+ virtual void PrintPage( wxDC* aDC, LSET aPrintMask, bool aPrintMirrorMode, void* aData = NULL );
+
+ /**
+ * Function CoordinateToString
+ * is a helper to convert the \a integer coordinate \a aValue to a string in inches or mm
+ * according to the current user units setting.
+ * @param aValue The coordinate to convert.
+ * @param aConvertToMils Convert inch values to mils if true. This setting has no effect if
+ * the current user unit is millimeters.
+ * @return The converted string for display in user interface elements.
+ */
+ wxString CoordinateToString( int aValue, bool aConvertToMils = false ) const;
+
+ /**
+ * Function LengthDoubleToString
+ * is a helper to convert the \a double value \a aValue to a string in inches or mm
+ * according to the current user units setting.
+ * @param aValue The coordinate to convert.
+ * @param aConvertToMils Convert inch values to mils if true. This setting has no effect if
+ * the current user unit is millimeters.
+ * @return The converted string for display in user interface elements.
+ */
+ wxString LengthDoubleToString( double aValue, bool aConvertToMils = false ) const;
+
+ /**
+ * Function UseGalCanvas
+ * used to switch between standard and GAL-based canvas.
+ *
+ * @param aEnable True for GAL-based canvas, false for standard canvas.
+ */
+ virtual void UseGalCanvas( bool aEnable );
+
+ /**
+ * Function IsGalCanvasActive
+ * is used to check which canvas (GAL-based or standard) is currently in use.
+ *
+ * @return True for GAL-based canvas, false for standard canvas.
+ */
+ bool IsGalCanvasActive() const { return m_galCanvasActive; }
+
+ /**
+ * Function GetGalCanvas
+ * returns a pointer to GAL-based canvas of given EDA draw frame.
+ *
+ * @return Pointer to GAL-based canvas.
+ */
+ EDA_DRAW_PANEL_GAL* GetGalCanvas() const { return m_galCanvas; }
+ void SetGalCanvas( EDA_DRAW_PANEL_GAL* aPanel ) { m_galCanvas = aPanel; }
+
+ /**
+ * Function GetToolManager
+ * returns the tool manager instance, if any.
+ */
+ TOOL_MANAGER* GetToolManager() const { return m_toolManager; }
+
+ /**
+ * Function GetDisplayOptions
+ * A way to pass info to draw functions. the base class has no knowledge about
+ * these options. It is virtual because this function must be overloaded to
+ * pass usefull info.
+ */
+ virtual void* GetDisplayOptions() { return NULL; }
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif // EDA_DRAW_FRAME_H_
diff --git a/include/drawtxt.h b/include/drawtxt.h
new file mode 100644
index 0000000..9f4ad95
--- /dev/null
+++ b/include/drawtxt.h
@@ -0,0 +1,155 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2014 Jerry Jacobs
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * This file is part of the common libary
+ * @file drawtxt.h
+ * @see common.h
+ */
+
+#ifndef __INCLUDE__DRAWTXT_H__
+#define __INCLUDE__DRAWTXT_H__ 1
+
+#include <base_struct.h>
+#include <eda_text.h> // EDA_TEXT_HJUSTIFY_T and EDA_TEXT_VJUSTIFY_T
+
+/* Minimum dimension in pixel for drawing/no drawing a text
+ * used in Pcbnew to decide to draw (or not) some texts
+ * ( like net names on pads/tracks )
+ * When a text height is smaller than MIN_TEXT_SIZE,
+ * it is not drawn by Pcbnew
+ */
+#define MIN_TEXT_SIZE 5
+
+/* Absolute minimum dimension in pixel to draw a text as text or a line
+ * When a text height is smaller than MIN_DRAWABLE_TEXT_SIZE,
+ * it is drawn, but like a line by the draw text function
+*/
+#define MIN_DRAWABLE_TEXT_SIZE 3
+
+class EDA_DRAW_PANEL;
+class PLOTTER;
+
+/**
+ * Function Clamp_Text_PenSize
+ *As a rule, pen width should not be >1/4em, otherwise the character
+ * will be cluttered up in its own fatness
+ * The pen width max is aSize/4 for bold texts, and aSize/6 for normal texts
+ * The "best" pen width is aSize/5 for bold texts,
+ * so the clamp is consistant with bold option.
+ * @param aPenSize = the pen size to clamp
+ * @param aSize the char size (height or width, od its wxSize)
+ * @param aBold = true if text accept bold pen size
+ * @return the max pen size allowed
+ */
+int Clamp_Text_PenSize( int aPenSize, int aSize, bool aBold = true );
+int Clamp_Text_PenSize( int aPenSize, wxSize aSize, bool aBold = true );
+
+/**
+ * Function GetPensizeForBold
+ * @return the "best" value for a pen size to draw/plot a bold text
+ * @param aTextSize = the char size (height or width)
+ */
+int GetPenSizeForBold( int aTextSize );
+
+/**
+ * Function GraphicTextWidth
+ * @return the X size of the graphic text
+ * the full X size is GraphicTextWidth + the thickness of graphic lines
+ */
+int GraphicTextWidth( const wxString& aText, int size_h, bool italic, bool bold );
+
+/**
+ * Function NegableTextLength
+ * Return the text length of a negable string, excluding the ~ markers */
+int NegableTextLength( const wxString& aText );
+
+/**
+ * Helper function for texts with over bar, can be used as strut value
+ * for multiline text (add interline spacing)
+ */
+int OverbarPositionY( int size_v );
+
+/**
+ * Function DrawGraphicText
+ * Draw a graphic text (like module texts)
+ * @param aClipBox = the clipping rect, or NULL if no clipping
+ * @param aDC = the current Device Context. NULL if draw within a 3D GL Canvas
+ * @param aPos = text position (according to h_justify, v_justify)
+ * @param aColor (enum EDA_COLOR_T) = text color
+ * @param aText = text to draw
+ * @param aOrient = angle in 0.1 degree
+ * @param aSize = text size (size.x or size.y can be < 0 for mirrored texts)
+ * @param aH_justify = horizontal justification (Left, center, right)
+ * @param aV_justify = vertical justification (bottom, center, top)
+ * @param aWidth = line width (pen width) (default = 0)
+ * if width < 0 : draw segments in sketch mode, width = abs(width)
+ * Use a value min(aSize.x, aSize.y) / 5 for a bold text
+ * @param aItalic = true to simulate an italic font
+ * @param aBold = true to use a bold font
+ * @param aCallback() = function called (if non null) to draw each segment.
+ * used to draw 3D texts or for plotting, NULL for normal drawings
+ * @param aPlotter = a pointer to a PLOTTER instance, when this function is used to plot
+ * the text. NULL to draw this text.
+ */
+void DrawGraphicText( EDA_RECT* aClipBox,
+ wxDC * aDC,
+ const wxPoint &aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString &aText,
+ double aOrient,
+ const wxSize &aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ void (*aCallback)( int x0, int y0, int xf, int yf ) = NULL,
+ PLOTTER * aPlotter = NULL );
+
+
+/**
+ * Draw graphic text with a border, so that it can be read on different
+ * backgrounds. See DrawGraphicText for most of the parameters.
+ * If aBgColor is a dark color text is drawn in aColor2 with aColor1
+ * border; otherwise colors are swapped.
+ */
+void DrawGraphicHaloText( EDA_RECT* aClipBox,
+ wxDC * aDC,
+ const wxPoint &aPos,
+ enum EDA_COLOR_T aBgColor,
+ enum EDA_COLOR_T aColor1,
+ enum EDA_COLOR_T aColor2,
+ const wxString &aText,
+ double aOrient,
+ const wxSize &aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ void (*aCallback)( int x0, int y0, int xf, int yf ) = NULL,
+ PLOTTER * aPlotter = NULL );
+
+#endif /* __INCLUDE__DRAWTXT_H__ */
diff --git a/include/dsnlexer.h b/include/dsnlexer.h
new file mode 100644
index 0000000..ded81c7
--- /dev/null
+++ b/include/dsnlexer.h
@@ -0,0 +1,544 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2007-2015 Kicad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef DSNLEXER_H_
+#define DSNLEXER_H_
+
+#include <stdio.h>
+#include <string>
+#include <vector>
+#include <hashtables.h>
+
+#include <richio.h>
+
+#ifndef SWIG
+/**
+ * Struct KEYWORD
+ * holds a keyword string and its unique integer token.
+ */
+struct KEYWORD
+{
+ const char* name; ///< unique keyword.
+ int token; ///< a zero based index into an array of KEYWORDs
+};
+#endif
+
+// something like this macro can be used to help initialize a KEYWORD table.
+// see SPECCTRA_DB::keywords[] as an example.
+
+//#define TOKDEF(x) { #x, T_##x }
+
+
+/**
+ * Enum DSN_SYNTAX_T
+ * lists all the DSN lexer's tokens that are supported in lexing. It is up
+ * to the parser if it wants also to support them.
+ */
+enum DSN_SYNTAX_T {
+ DSN_NONE = -11,
+ DSN_COMMENT = -10,
+ DSN_STRING_QUOTE = -9,
+ DSN_QUOTE_DEF = -8,
+ DSN_DASH = -7,
+ DSN_SYMBOL = -6,
+ DSN_NUMBER = -5,
+ DSN_RIGHT = -4, // right bracket, ')'
+ DSN_LEFT = -3, // left bracket, '('
+ DSN_STRING = -2, // a quoted string, stripped of the quotes
+ DSN_EOF = -1 // special case for end of file
+};
+
+
+/**
+ * Class DSNLEXER
+ * implements a lexical analyzer for the SPECCTRA DSN file format. It
+ * reads lexical tokens from the current LINE_READER through the NextTok()
+ * function.
+ */
+class DSNLEXER
+{
+#ifndef SWIG
+protected:
+ bool iOwnReaders; ///< on readerStack, should I delete them?
+ const char* start;
+ const char* next;
+ const char* limit;
+ char dummy[1]; ///< when there is no reader.
+
+ typedef std::vector<LINE_READER*> READER_STACK;
+
+ READER_STACK readerStack; ///< all the LINE_READERs by pointer.
+ LINE_READER* reader; ///< no ownership. ownership is via readerStack, maybe, if iOwnReaders
+
+ bool specctraMode; ///< if true, then:
+ ///< 1) stringDelimiter can be changed
+ ///< 2) Kicad quoting protocol is not in effect
+ ///< 3) space_in_quoted_tokens is functional
+ ///< else not.
+
+ char stringDelimiter;
+ bool space_in_quoted_tokens; ///< blank spaces within quoted strings
+
+ bool commentsAreTokens; ///< true if should return comments as tokens
+
+ int prevTok; ///< curTok from previous NextTok() call.
+ int curOffset; ///< offset within current line of the current token
+
+ int curTok; ///< the current token obtained on last NextTok()
+ std::string curText; ///< the text of the current token
+
+ const KEYWORD* keywords; ///< table sorted by CMake for bsearch()
+ unsigned keywordCount; ///< count of keywords table
+ KEYWORD_MAP keyword_hash; ///< fast, specialized "C string" hashtable
+
+ void init();
+
+ int readLine() throw( IO_ERROR )
+ {
+ if( reader )
+ {
+ reader->ReadLine();
+
+ unsigned len = reader->Length();
+
+ // start may have changed in ReadLine(), which can resize and
+ // relocate reader's line buffer.
+ start = reader->Line();
+
+ next = start;
+ limit = next + len;
+
+ return len;
+ }
+ return 0;
+ }
+
+ /**
+ * Function findToken
+ * takes aToken string and looks up the string in the keywords table.
+ *
+ * @param aToken is a string to lookup in the keywords table.
+ * @return int - with a value from the enum DSN_T matching the keyword text,
+ * or DSN_SYMBOL if @a aToken is not in the kewords table.
+ */
+ int findToken( const std::string& aToken );
+
+ bool isStringTerminator( char cc )
+ {
+ if( !space_in_quoted_tokens && cc==' ' )
+ return true;
+
+ if( cc == stringDelimiter )
+ return true;
+
+ return false;
+ }
+
+#endif
+
+public:
+
+ /**
+ * Constructor ( FILE*, const wxString& )
+ * intializes a DSN lexer and prepares to read from aFile which
+ * is already open and has aFilename.
+ *
+ * @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
+ * token table need not contain the lexer separators such as '(' ')', etc.
+ * @param aKeywordCount is the count of tokens in aKeywordTable.
+ * @param aFile is an open file, which will be closed when this is destructed.
+ * @param aFileName is the name of the file
+ */
+ DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
+ FILE* aFile, const wxString& aFileName );
+
+ /**
+ * Constructor ( const KEYWORD*, unsigned, const std::string&, const wxString& )
+ * intializes a DSN lexer and prepares to read from @a aSExpression.
+ *
+ * @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
+ * token table need not contain the lexer separators such as '(' ')', etc.
+ * @param aKeywordCount is the count of tokens in aKeywordTable.
+ * @param aSExpression is text to feed through a STRING_LINE_READER
+ * @param aSource is a description of aSExpression, used for error reporting.
+ */
+ DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
+ const std::string& aSExpression, const wxString& aSource = wxEmptyString );
+
+ /**
+ * Constructor ( const std::string&, const wxString& )
+ * intializes a DSN lexer and prepares to read from @a aSExpression. Use this
+ * one without a keyword table with the DOM parser in ptree.h.
+ *
+ * @param aSExpression is text to feed through a STRING_LINE_READER
+ * @param aSource is a description of aSExpression, used for error reporting.
+ */
+ DSNLEXER( const std::string& aSExpression, const wxString& aSource = wxEmptyString );
+
+ /**
+ * Constructor ( LINE_READER* )
+ * intializes a DSN lexer and prepares to read from @a aLineReader which
+ * is already open, and may be in use by other DSNLEXERs also. No ownership
+ * is taken of @a aLineReader. This enables it to be used by other DSNLEXERs also.
+ *
+ * @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
+ * token table need not contain the lexer separators such as '(' ')', etc.
+ *
+ * @param aKeywordCount is the count of tokens in aKeywordTable.
+ *
+ * @param aLineReader is any subclassed instance of LINE_READER, such as
+ * STRING_LINE_READER or FILE_LINE_READER. No ownership is taken.
+ */
+ DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
+ LINE_READER* aLineReader = NULL );
+
+ virtual ~DSNLEXER();
+
+ /**
+ * Useable only for DSN lexers which share the same LINE_READER
+ * Synchronizes the pointers handling the data read by the LINE_READER
+ * Allows 2 DNSLEXER to share the same current line, when switching from a
+ * DNSLEXER to an other DNSLEXER
+ * @param aLexer = the model
+ * @return true if the sync can be made ( at least the same line reader )
+ */
+ bool SyncLineReaderWith( DSNLEXER& aLexer );
+
+ /**
+ * Function SetSpecctraMode
+ * changes the behavior of this lexer into or out of "specctra mode". If
+ * specctra mode, then:
+ * 1) stringDelimiter can be changed
+ * 2) Kicad quoting protocol is not in effect
+ * 3) space_in_quoted_tokens is functional
+ * else none of the above are true. The default mode is non-specctra mode, meaning:
+ * 1) stringDelimiter cannot be changed
+ * 2) Kicad quoting protocol is in effect
+ * 3) space_in_quoted_tokens is not functional
+ */
+ void SetSpecctraMode( bool aMode );
+
+ /**
+ * Function PushReader
+ * manages a stack of LINE_READERs in order to handle nested file inclusion.
+ * This function pushes aLineReader onto the top of a stack of LINE_READERs and makes
+ * it the current LINE_READER with its own GetSource(), line number and line text.
+ * A grammar must be designed such that the "include" token (whatever its various names),
+ * and any of its parameters are not followed by anything on that same line,
+ * because PopReader always starts reading from a new line upon returning to
+ * the original LINE_READER.
+ */
+ void PushReader( LINE_READER* aLineReader );
+
+ /**
+ * Function PopReader
+ * deletes the top most LINE_READER from an internal stack of LINE_READERs and
+ * in the case of FILE_LINE_READER this means the associated FILE is closed.
+ * The most recently used former LINE_READER on the stack becomes the
+ * current LINE_READER and its previous position in its input stream and the
+ * its latest line number should pertain. PopReader always starts reading
+ * from a new line upon returning to the previous LINE_READER. A pop is only
+ * possible if there are at least 2 LINE_READERs on the stack, since popping
+ * the last one is not supported.
+ *
+ * @return LINE_READER* - is the one that was in use before the pop, or NULL
+ * if there was not at least two readers on the stack and therefore the
+ * pop failed.
+ */
+ LINE_READER* PopReader();
+
+ // Some functions whose return value is best overloaded to return an enum
+ // in a derived class.
+ //-----<overload return values to tokens>------------------------------
+
+ /**
+ * Function NextTok
+ * returns the next token found in the input file or DSN_EOF when reaching
+ * the end of file. Users should wrap this function to return an enum
+ * to aid in grammar debugging while running under a debugger, but leave
+ * this lower level function returning an int (so the enum does not collide
+ * with another usage).
+ * @return int - the type of token found next.
+ * @throw IO_ERROR - only if the LINE_READER throws it.
+ */
+ int NextTok() throw( IO_ERROR );
+
+ /**
+ * Function NeedSYMBOL
+ * calls NextTok() and then verifies that the token read in
+ * satisfies bool IsSymbol().
+ * If not, an IO_ERROR is thrown.
+ * @return int - the actual token read in.
+ * @throw IO_ERROR, if the next token does not satisfy IsSymbol()
+ */
+ int NeedSYMBOL() throw( IO_ERROR );
+
+ /**
+ * Function NeedSYMBOLorNUMBER
+ * calls NextTok() and then verifies that the token read in
+ * satisfies bool IsSymbol() or tok==DSN_NUMBER.
+ * If not, an IO_ERROR is thrown.
+ * @return int - the actual token read in.
+ * @throw IO_ERROR, if the next token does not satisfy the above test
+ */
+ int NeedSYMBOLorNUMBER() throw( IO_ERROR );
+
+ /**
+ * Function NeedNUMBER
+ * calls NextTok() and then verifies that the token read is type DSN_NUMBER.
+ * If not, and IO_ERROR is thrown using text from aExpectation.
+ * @return int - the actual token read in.
+ * @throw IO_ERROR, if the next token does not satisfy the above test
+ */
+ int NeedNUMBER( const char* aExpectation ) throw( IO_ERROR );
+
+ /**
+ * Function CurTok
+ * returns whatever NextTok() returned the last time it was called.
+ */
+ int CurTok()
+ {
+ return curTok;
+ }
+
+ /**
+ * Function PrevTok
+ * returns whatever NextTok() returned the 2nd to last time it was called.
+ */
+ int PrevTok()
+ {
+ return prevTok;
+ }
+
+ //-----</overload return values to tokens>-----------------------------
+
+
+ /**
+ * Function SetStringDelimiter
+ * changes the string delimiter from the default " to some other character
+ * and returns the old value.
+ * @param aStringDelimiter The character in lowest 8 bits.
+ * @return int - The old delimiter in the lowest 8 bits.
+ */
+ char SetStringDelimiter( char aStringDelimiter )
+ {
+ int old = stringDelimiter;
+ if( specctraMode )
+ stringDelimiter = aStringDelimiter;
+ return old;
+ }
+
+ /**
+ * Function SetSpaceInQuotedTokens
+ * changes the setting controlling whether a space in a quoted string is
+ * a terminator.
+ * @param val If true, means
+ */
+ bool SetSpaceInQuotedTokens( bool val )
+ {
+ bool old = space_in_quoted_tokens;
+ if( specctraMode )
+ space_in_quoted_tokens = val;
+ return old;
+ }
+
+ /**
+ * Function SetCommentsAreTokens
+ * changes the handling of comments. If set true, comments are returns
+ * as single line strings with a terminating newline, else they are
+ * consumed by the lexer and not returned.
+ */
+ bool SetCommentsAreTokens( bool val )
+ {
+ bool old = commentsAreTokens;
+ commentsAreTokens = val;
+ return old;
+ }
+
+ /**
+ * Function ReadCommentLines
+ * checks the next sequence of tokens and reads them into a wxArrayString
+ * if they are comments. Reading continues until a non-comment token is
+ * encountered, and such last read token remains as CurTok() and as CurText().
+ * No push back or "un get" mechanism is used for this support. Upon return
+ * you simply avoid calling NextTok() for the next token, but rather CurTok().
+ *
+ * @return wxArrayString* - heap allocated block of comments, or NULL if none;
+ * caller owns the allocation and must delete if not NULL.
+ */
+ wxArrayString* ReadCommentLines() throw( IO_ERROR );
+
+ /**
+ * Function IsSymbol
+ * tests a token to see if it is a symbol. This means it cannot be a
+ * special delimiter character such as DSN_LEFT, DSN_RIGHT, DSN_QUOTE, etc. It may
+ * however, coincidentally match a keyword and still be a symbol.
+ */
+ static bool IsSymbol( int aTok );
+
+ /**
+ * Function Expecting
+ * throws an IO_ERROR exception with an input file specific error message.
+ * @param aTok is the token/keyword type which was expected at the current input location.
+ * @throw IO_ERROR with the location within the input file of the problem.
+ */
+ void Expecting( int aTok ) throw( IO_ERROR );
+
+ /**
+ * Function Expecting
+ * throws an IO_ERROR exception with an input file specific error message.
+ * @param aTokenList is the token/keyword type which was expected at the
+ * current input location, e.g. "pin|graphic|property"
+ * @throw IO_ERROR with the location within the input file of the problem.
+ */
+ void Expecting( const char* aTokenList ) throw( IO_ERROR );
+
+ /**
+ * Function Unexpected
+ * throws an IO_ERROR exception with an input file specific error message.
+ * @param aTok is the token/keyword type which was not expected at the
+ * current input location.
+ * @throw IO_ERROR with the location within the input file of the problem.
+ */
+ void Unexpected( int aTok ) throw( IO_ERROR );
+
+ /**
+ * Function Unexpected
+ * throws an IO_ERROR exception with an input file specific error message.
+ * @param aToken is the token which was not expected at the
+ * current input location.
+ * @throw IO_ERROR with the location within the input file of the problem.
+ */
+ void Unexpected( const char* aToken ) throw( IO_ERROR );
+
+ /**
+ * Function Duplicate
+ * throws an IO_ERROR exception with a message saying specifically that aTok
+ * is a duplicate of one already seen in current context.
+ * @param aTok is the token/keyword type which was not expected at the
+ * current input location.
+ * @throw IO_ERROR with the location within the input file of the problem.
+ */
+ void Duplicate( int aTok ) throw( IO_ERROR );
+
+ /**
+ * Function NeedLEFT
+ * calls NextTok() and then verifies that the token read in is a DSN_LEFT.
+ * If it is not, an IO_ERROR is thrown.
+ * @throw IO_ERROR, if the next token is not a DSN_LEFT
+ */
+ void NeedLEFT() throw( IO_ERROR );
+
+ /**
+ * Function NeedRIGHT
+ * calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
+ * If it is not, an IO_ERROR is thrown.
+ * @throw IO_ERROR, if the next token is not a DSN_RIGHT
+ */
+ void NeedRIGHT() throw( IO_ERROR );
+
+ /**
+ * Function GetTokenText
+ * returns the C string representation of a DSN_T value.
+ */
+ const char* GetTokenText( int aTok );
+
+ /**
+ * Function GetTokenString
+ * returns a quote wrapped wxString representation of a token value.
+ */
+ wxString GetTokenString( int aTok );
+
+ static const char* Syntax( int aTok );
+
+ /**
+ * Function CurText
+ * returns a pointer to the current token's text.
+ */
+ const char* CurText()
+ {
+ return curText.c_str();
+ }
+
+ /**
+ * Function CurStr
+ * returns a reference to current token in std::string form.
+ */
+ const std::string& CurStr()
+ {
+ return curText;
+ }
+
+ /**
+ * Function FromUTF8
+ * returns the current token text as a wxString, assuming that the input
+ * byte stream is UTF8 encoded.
+ */
+ wxString FromUTF8()
+ {
+ return wxString::FromUTF8( curText.c_str() );
+ }
+
+ /**
+ * Function CurLineNumber
+ * returns the current line number within my LINE_READER
+ */
+ int CurLineNumber()
+ {
+ return reader->LineNumber();
+ }
+
+ /**
+ * Function CurLine
+ * returns the current line of text, from which the CurText() would return
+ * its token.
+ */
+ const char* CurLine()
+ {
+ return (const char*)(*reader);
+ }
+
+ /**
+ * Function CurFilename
+ * returns the current LINE_READER source.
+ * @return const wxString& - the source of the lines of text,
+ * e.g. a filename or "clipboard".
+ */
+ const wxString& CurSource()
+ {
+ return reader->GetSource();
+ }
+
+ /**
+ * Function CurOffset
+ * returns the byte offset within the current line, using a 1 based index.
+ * @return int - a one based index into the current line.
+ */
+ int CurOffset()
+ {
+ return curOffset + 1;
+ }
+};
+
+#endif // DSNLEXER_H_
diff --git a/include/eda_dde.h b/include/eda_dde.h
new file mode 100644
index 0000000..21cf722
--- /dev/null
+++ b/include/eda_dde.h
@@ -0,0 +1,51 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file eda_dde.h
+ * @brief DDE server & client.
+ */
+
+#ifndef EDA_DDE_H_
+#define EDA_DDE_H_
+
+#include <wx/socket.h>
+
+
+// TCP/IP ports used by Pcbnew and Eeschema respectively.
+
+///< Pcbnew listens on this port for commands from Eeschema
+#define KICAD_PCB_PORT_SERVICE_NUMBER 4242
+
+///< Eeschema listens on this port for commands from Pcbnew
+#define KICAD_SCH_PORT_SERVICE_NUMBER 4243
+
+
+#define MSG_TO_PCB KICAD_PCB_PORT_SERVICE_NUMBER
+#define MSG_TO_SCH KICAD_SCH_PORT_SERVICE_NUMBER
+
+wxSocketServer* CreateServer( wxWindow * window, int port, bool local = true );
+bool SendCommand( int port, const char* cmdline );
+
+#endif // EDA_DDE_H_
diff --git a/include/eda_doc.h b/include/eda_doc.h
new file mode 100644
index 0000000..b9df60d
--- /dev/null
+++ b/include/eda_doc.h
@@ -0,0 +1,57 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2014 Jerry Jacobs
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * This file is part of the common library.
+ * @file eda_doc.h
+ * @see common.h
+ */
+
+#ifndef __INCLUDE__EDA_DOC_H__
+#define __INCLUDE__EDA_DOC_H__ 1
+
+
+/**
+ * Function KeyWordOk
+ * searches \a aKeyList for any words found in \a aDatabase.
+ *
+ * @return 0 if no keyword is found or 1 if keyword is found.
+ */
+int KeyWordOk( const wxString& aKeyList, const wxString& aDatabase );
+
+/**
+ * Function GetAssociatedDocument
+ * open a document (file) with the suitable browser
+ * @param aParent = main frame
+ * @param aDocName = filename of file to open (Full filename or short filename)
+ * if \a aDocName begins with http: or ftp: or www. the default internet browser is launched
+ * @param aPaths = a wxPathList to explore.
+ * if NULL or aDocName is a full filename, aPath is not used.
+*/
+bool GetAssociatedDocument( wxWindow* aParent,
+ const wxString& aDocName,
+ const wxPathList* aPaths = NULL );
+
+
+#endif /* __INCLUDE__EDA_DOC_H__ */
diff --git a/include/eda_text.h b/include/eda_text.h
new file mode 100644
index 0000000..cd14c46
--- /dev/null
+++ b/include/eda_text.h
@@ -0,0 +1,331 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Jean-Pierre Charras, jpe.charras at wanadoo.fr
+ * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file eda_text.h
+ * @brief Definition of base KiCad text object.
+ */
+
+#ifndef EDA_TEXT_H_
+#define EDA_TEXT_H_
+
+#include <trigo.h> // NORMALIZE_ANGLE_POS( angle );
+#include <common.h> // wxStringSplit
+#include <gr_basic.h> // EDA_DRAW_MODE_T
+#include <base_struct.h> // EDA_RECT
+
+
+// Graphic Text justify:
+// Values -1,0,1 are used in computations, do not change them
+enum EDA_TEXT_HJUSTIFY_T {
+ GR_TEXT_HJUSTIFY_LEFT = -1,
+ GR_TEXT_HJUSTIFY_CENTER = 0,
+ GR_TEXT_HJUSTIFY_RIGHT = 1
+};
+
+
+enum EDA_TEXT_VJUSTIFY_T {
+ GR_TEXT_VJUSTIFY_TOP = -1,
+ GR_TEXT_VJUSTIFY_CENTER = 0,
+ GR_TEXT_VJUSTIFY_BOTTOM = 1
+};
+
+
+/* Options to draw items with thickness ( segments, arcs, circles, texts...) */
+enum EDA_DRAW_MODE_T {
+ FILLED = true, // normal mode: solid segments
+ SKETCH = false // sketch mode: draw segments outlines only
+};
+
+
+/** This is the "default-of-the-default" hardcoded text size; individual
+ * application define their own default policy starting with this
+ * (usually with a user option or project). DO NOT change this value if
+ * you do not fully realize the effect it has on sexp serialization
+ * (text size equal to this is not explicitly wrote, so it would change
+ * subsequent reads) */
+#define DEFAULT_SIZE_TEXT 60 // default text height (in mils, i.e. 1/1000")
+#define TEXT_NO_VISIBLE 1 //< EDA_TEXT::m_Attribut(e?) visibility flag.
+#define DIM_ANCRE_TEXTE 2 // Anchor size for text
+
+
+/**
+ * Class EDA_TEXT
+ * is a basic class to handle texts (labels, texts on components or footprints
+ * ..) not used directly. The "used" text classes are derived from EDA_ITEM and
+ * EDA_TEXT using multiple inheritance.
+ */
+class EDA_TEXT
+{
+protected:
+ wxString m_Text; ///< The 'base' text, maybe later processed for display
+ int m_Thickness; ///< pen size used to draw this text
+ double m_Orient; ///< Orient in 0.1 degrees
+ wxPoint m_Pos; ///< XY position of anchor text.
+ wxSize m_Size; ///< XY size of text
+ bool m_Mirror; ///< true if mirrored
+ int m_Attributs; ///< bit flags such as visible, etc.
+ bool m_Italic; ///< should be italic font (if available)
+ bool m_Bold; ///< should be bold font (if available)
+ EDA_TEXT_HJUSTIFY_T m_HJustify; ///< horizontal justification
+ EDA_TEXT_VJUSTIFY_T m_VJustify; ///< vertical justification
+ bool m_MultilineAllowed; /**< true to use multiline option, false
+ * to use only single line text
+ * Single line is faster in
+ * calculations than multiline */
+
+public:
+ EDA_TEXT( const wxString& text = wxEmptyString );
+ EDA_TEXT( const EDA_TEXT& aText );
+ virtual ~EDA_TEXT();
+
+ /**
+ * Function GetText
+ * returns the string associated with the text object.
+ *
+ * @return a const wxString reference containing the string of the item.
+ */
+ const wxString& GetText() const { return m_Text; }
+
+ /**
+ * Returns the string actually shown after processing of the base
+ * text. Default is no processing */
+ virtual wxString GetShownText() const { return m_Text; }
+
+ /**
+ * Returns a shortened version (max 15 characters) of the shown text */
+ wxString ShortenedShownText() const;
+
+ virtual void SetText( const wxString& aText ) { m_Text = aText; }
+
+ /**
+ * Function SetThickness
+ * sets text thickness.
+ * @param aNewThickness is the new text thickness.
+ */
+ void SetThickness( int aNewThickness ) { m_Thickness = aNewThickness; };
+
+ /**
+ * Function GetThickness
+ * returns text thickness.
+ * @return int - text thickness.
+ */
+ int GetThickness() const { return m_Thickness; };
+
+ void SetOrientation( double aOrientation )
+ {
+ NORMALIZE_ANGLE_POS( aOrientation );
+ m_Orient = aOrientation;
+ }
+ double GetOrientation() const { return m_Orient; }
+
+ void SetItalic( bool isItalic ) { m_Italic = isItalic; }
+ bool IsItalic() const { return m_Italic; }
+
+ void SetBold( bool aBold ) { m_Bold = aBold; }
+ bool IsBold() const { return m_Bold; }
+
+ void SetVisible( bool aVisible )
+ {
+ ( aVisible ) ? m_Attributs &= ~TEXT_NO_VISIBLE : m_Attributs |= TEXT_NO_VISIBLE;
+ }
+ bool IsVisible() const { return !( m_Attributs & TEXT_NO_VISIBLE ); }
+
+ void SetMirrored( bool isMirrored ) { m_Mirror = isMirrored; }
+ bool IsMirrored() const { return m_Mirror; }
+
+ void SetAttributes( int aAttributes ) { m_Attributs = aAttributes; }
+ int GetAttributes() const { return m_Attributs; }
+
+ bool IsDefaultFormatting() const;
+
+ /**
+ * Function SetSize
+ * sets text size.
+ * @param aNewSize is the new text size.
+ */
+ void SetSize( const wxSize& aNewSize ) { m_Size = aNewSize; };
+
+ /**
+ * Function GetSize
+ * returns text size.
+ * @return wxSize - text size.
+ */
+ const wxSize& GetSize() const { return m_Size; };
+
+ void SetWidth( int aWidth ) { m_Size.x = aWidth; }
+ int GetWidth() const { return m_Size.x; }
+
+ void SetHeight( int aHeight ) { m_Size.y = aHeight; }
+ int GetHeight() const { return m_Size.y; }
+
+ /// named differently than the ones using multiple inheritance and including this class
+ void SetTextPosition( const wxPoint& aPoint ) { m_Pos = aPoint; }
+ const wxPoint& GetTextPosition() const { return m_Pos; }
+
+ void SetMultilineAllowed( bool aAllow ) { m_MultilineAllowed = aAllow; }
+ bool IsMultilineAllowed() const { return m_MultilineAllowed; }
+
+ void Offset( const wxPoint& aOffset ) { m_Pos += aOffset; }
+
+ void Empty() { m_Text.Empty(); }
+
+ /**
+ * Function Draw
+ * @param aClipBox = the clipping rect, or NULL if no clipping
+ * @param aDC = the current Device Context
+ * @param aOffset = draw offset (usually (0,0))
+ * @param aColor = text color
+ * @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode.
+ * @param aDisplay_mode = FILLED or SKETCH
+ * @param aAnchor_color = anchor color ( UNSPECIFIED_COLOR = do not draw anchor ).
+ */
+ void Draw( EDA_RECT* aClipBox, wxDC* aDC,
+ const wxPoint& aOffset, EDA_COLOR_T aColor,
+ GR_DRAWMODE aDrawMode, EDA_DRAW_MODE_T aDisplay_mode = FILLED,
+ EDA_COLOR_T aAnchor_color = EDA_COLOR_T(UNSPECIFIED_COLOR) );
+
+ /**
+ * Convert the text shape to a list of segment
+ * each segment is stored as 2 wxPoints: the starting point and the ending point
+ * there are therefore 2*n points
+ * @param aCornerBuffer = a buffer to store the polygon
+ */
+ void TransformTextShapeToSegmentList( std::vector<wxPoint>& aCornerBuffer ) const;
+
+ /**
+ * Function TextHitTest
+ * Test if \a aPoint is within the bounds of this object.
+ * @param aPoint- A wxPoint to test
+ * @param aAccuracy - Amount to inflate the bounding box.
+ * @return bool - true if a hit, else false
+ */
+ bool TextHitTest( const wxPoint& aPoint, int aAccuracy = 0 ) const;
+
+ /**
+ * Function TextHitTest (overloaded)
+ * Tests if object bounding box is contained within or intersects \a aRect.
+ *
+ * @param aRect - Rect to test against.
+ * @param aContains - Test for containment instead of intersection if true.
+ * @param aAccuracy - Amount to inflate the bounding box.
+ * @return bool - true if a hit, else false
+ */
+ bool TextHitTest( const EDA_RECT& aRect, bool aContains = false, int aAccuracy = 0 ) const;
+
+ /**
+ * Function LenSize
+ * @return the text length in internal units
+ * @param aLine : the line of text to consider.
+ * For single line text, this parameter is always m_Text
+ */
+ int LenSize( const wxString& aLine ) const;
+
+ /**
+ * Function GetTextBox
+ * useful in multiline texts to calculate the full text or a line area (for
+ * zones filling, locate functions....)
+ * @return the rect containing the line of text (i.e. the position and the
+ * size of one line)
+ * this rectangle is calculated for 0 orient text.
+ * If orientation is not 0 the rect must be rotated to match the
+ * physical area
+ * @param aLine The line of text to consider.
+ * for single line text, aLine is unused
+ * If aLine == -1, the full area (considering all lines) is returned
+ * @param aThickness Overrides the current thickness when greater than 0.
+ * this is needed when the current m_Thickness is 0 and a default line thickness
+ * is used
+ * @param aInvertY Invert the Y axis when calculating bounding box.
+ */
+ EDA_RECT GetTextBox( int aLine = -1, int aThickness = -1, bool aInvertY = false ) const;
+
+ /**
+ * Function GetInterline
+ * return the distance between 2 text lines
+ * has meaning only for multiline texts
+ * @param aTextThickness Overrides the current thickness when greater than 0.
+ * this is needed when the current m_Thickness is 0 and a default line thickness
+ * is used
+ */
+ int GetInterline( int aTextThickness = -1 ) const;
+
+ /**
+ * Function GetTextStyleName
+ * @return a wxString with the style name( Normal, Italic, Bold, Bold+Italic)
+ */
+ wxString GetTextStyleName();
+
+ EDA_TEXT_HJUSTIFY_T GetHorizJustify() const { return m_HJustify; };
+ EDA_TEXT_VJUSTIFY_T GetVertJustify() const { return m_VJustify; };
+
+ void SetHorizJustify( EDA_TEXT_HJUSTIFY_T aType ) { m_HJustify = aType; };
+ void SetVertJustify( EDA_TEXT_VJUSTIFY_T aType ) { m_VJustify = aType; };
+
+ /**
+ * Function GetPositionsOfLinesOfMultilineText
+ * Populates aPositions with the position of each line of
+ * a multiline text, according to the vertical justification and the
+ * rotation of the whole text
+ * @param aPositions is the list to populate by the wxPoint positions
+ * @param aLineCount is the number of lines (not recalculated here
+ * for efficiency reasons
+ */
+ void GetPositionsOfLinesOfMultilineText(
+ std::vector<wxPoint>& aPositions, int aLineCount ) const;
+ /**
+ * Function Format
+ * outputs the object to \a aFormatter in s-expression form.
+ *
+ * @param aFormatter The #OUTPUTFORMATTER object to write to.
+ * @param aNestLevel The indentation next level.
+ * @param aControlBits The control bit definition for object specific formatting.
+ * @throw IO_ERROR on write error.
+ */
+ virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+private:
+
+ /**
+ * Function drawOneLineOfText
+ * Draw a single text line.
+ * Used to draw each line of this EDA_TEXT, that can be multiline
+ * @param aClipBox = the clipping rect, or NULL if no clipping
+ * @param aDC = the current Device Context
+ * @param aOffset = draw offset (usually (0,0))
+ * @param aColor = text color
+ * @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode.
+ * @param aFillMode = FILLED or SKETCH
+ * @param aText = the single line of text to draw.
+ * @param aPos = the position of this line ).
+ */
+ void drawOneLineOfText( EDA_RECT* aClipBox, wxDC* aDC,
+ const wxPoint& aOffset, EDA_COLOR_T aColor,
+ GR_DRAWMODE aDrawMode, EDA_DRAW_MODE_T aFillMode,
+ const wxString& aText, const wxPoint &aPos );
+};
+
+
+#endif // EDA_TEXT_H_
diff --git a/include/fctsys.h b/include/fctsys.h
new file mode 100644
index 0000000..0769e42
--- /dev/null
+++ b/include/fctsys.h
@@ -0,0 +1,47 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef FCTSYS_H_
+#define FCTSYS_H_
+
+#include <wx/wx.h>
+
+/**
+ * @note This appears to already be included in the OSX build of wxWidgets.
+ * Will someone with OSX please remove this and see if it compiles?
+ */
+#ifdef __WXMAC__
+#include <Carbon/Carbon.h>
+#endif
+
+#ifdef DEBUG
+#define DBG(x) x
+#else
+#define DBG(x) // nothing
+#endif
+
+
+#include <config.h>
+
+#endif // FCTSYS_H__
diff --git a/include/filter_reader.h b/include/filter_reader.h
new file mode 100644
index 0000000..1544302
--- /dev/null
+++ b/include/filter_reader.h
@@ -0,0 +1,99 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef FILTER_READER_H_
+#define FILTER_READER_H_
+
+#include <wx/wx.h>
+#include <richio.h>
+
+
+/**
+ * Class FILTER_READER
+ * reads lines of text from another LINE_READER, but only returns non-comment
+ * lines and non-blank lines from its ReadLine() function.
+ */
+class FILTER_READER : public LINE_READER
+{
+ LINE_READER& reader;
+
+public:
+
+ /**
+ * Constructor ( LINE_READER& )
+ * does not take ownership over @a aReader, so will not destroy it.
+ */
+ FILTER_READER( LINE_READER& aReader );
+
+ ~FILTER_READER();
+
+ char* ReadLine() throw( IO_ERROR );
+
+ const wxString& GetSource() const
+ {
+ return reader.GetSource();
+ }
+
+ unsigned LineNumber() const
+ {
+ return reader.LineNumber();
+ }
+};
+
+
+/**
+ * Class WHITESPACE_FILTER_READER
+ * reads lines of text from another LINE_READER, but only returns non-comment
+ * lines and non-blank lines with leading whitespace characters (space and tab)
+ * removed from its ReadLine() function.
+ */
+class WHITESPACE_FILTER_READER : public LINE_READER
+{
+ LINE_READER& reader;
+
+public:
+
+ /**
+ * Constructor ( LINE_READER& )
+ * does not take ownership over @a aReader, so will not destroy it.
+ */
+ WHITESPACE_FILTER_READER( LINE_READER& aReader );
+
+ ~WHITESPACE_FILTER_READER();
+
+ char* ReadLine() throw( IO_ERROR );
+
+ const wxString& GetSource() const
+ {
+ return reader.GetSource();
+ }
+
+ unsigned LineNumber() const
+ {
+ return reader.LineNumber();
+ }
+};
+
+#endif // FILTER_READER_H_
diff --git a/include/footprint_info.h b/include/footprint_info.h
new file mode 100644
index 0000000..7af63e4
--- /dev/null
+++ b/include/footprint_info.h
@@ -0,0 +1,256 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 Jean-Pierre Charras, <jp.charras@wanadoo.fr>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * @file footprint_info.h
+ */
+
+#ifndef FOOTPRINT_INFO_H_
+#define FOOTPRINT_INFO_H_
+
+
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/foreach.hpp>
+
+#include <ki_mutex.h>
+#include <kicad_string.h>
+
+
+#define USE_FPI_LAZY 0 // 1:yes lazy, 0:no early
+
+
+class FP_LIB_TABLE;
+class FOOTPRINT_LIST;
+class wxTopLevelWindow;
+
+
+/*
+ * Class FOOTPRINT_INFO
+ * is a helper class to handle the list of footprints available in libraries. It stores
+ * footprint names, doc and keywords
+ */
+class FOOTPRINT_INFO
+{
+ friend bool operator<( const FOOTPRINT_INFO& item1, const FOOTPRINT_INFO& item2 );
+
+public:
+
+ // These two accessors do not have to call ensure_loaded(), because constructor
+ // fills in these fields:
+
+ const wxString& GetFootprintName() const { return m_fpname; }
+ const wxString& GetNickname() const { return m_nickname; }
+
+ FOOTPRINT_INFO( FOOTPRINT_LIST* aOwner, const wxString& aNickname, const wxString& aFootprintName ) :
+ m_owner( aOwner ),
+ m_loaded( false ),
+ m_nickname( aNickname ),
+ m_fpname( aFootprintName ),
+ m_num( 0 ),
+ m_pad_count( 0 ),
+ m_unique_pad_count( 0 )
+ {
+#if !USE_FPI_LAZY
+ load();
+#endif
+ }
+
+ const wxString& GetDoc()
+ {
+ ensure_loaded();
+ return m_doc;
+ }
+
+ const wxString& GetKeywords()
+ {
+ ensure_loaded();
+ return m_keywords;
+ }
+
+ unsigned GetPadCount()
+ {
+ ensure_loaded();
+ return m_pad_count;
+ }
+
+ unsigned GetUniquePadCount()
+ {
+ ensure_loaded();
+ return m_unique_pad_count;
+ }
+
+ int GetOrderNum()
+ {
+ ensure_loaded();
+ return m_num;
+ }
+
+ /**
+ * Function InLibrary
+ * tests if the #FOOTPRINT_INFO object was loaded from \a aLibrary.
+ *
+ * @param aLibrary is the nickname of the library to test.
+ *
+ * @return true if the #FOOTPRINT_INFO object was loaded from \a aLibrary. Otherwise
+ * false.
+ */
+ bool InLibrary( const wxString& aLibrary ) const;
+
+private:
+
+ void ensure_loaded()
+ {
+ if( !m_loaded )
+ load();
+ }
+
+ /// lazily load stuff not filled in by constructor. This may throw IO_ERRORS.
+ void load();
+
+ FOOTPRINT_LIST* m_owner; ///< provides access to FP_LIB_TABLE
+
+ bool m_loaded;
+
+ wxString m_nickname; ///< library as known in FP_LIB_TABLE
+ wxString m_fpname; ///< Module name.
+ int m_num; ///< Order number in the display list.
+ int m_pad_count; ///< Number of pads
+ int m_unique_pad_count; ///< Number of unique pads
+ wxString m_doc; ///< Footprint description.
+ wxString m_keywords; ///< Footprint keywords.
+};
+
+
+/// FOOTPRINT object list sort function.
+inline bool operator<( const FOOTPRINT_INFO& item1, const FOOTPRINT_INFO& item2 )
+{
+ int retv = StrNumCmp( item1.m_nickname, item2.m_nickname, INT_MAX, true );
+
+ if( retv != 0 )
+ return retv < 0;
+
+ return StrNumCmp( item1.m_fpname, item2.m_fpname, INT_MAX, true ) < 0;
+}
+
+
+/**
+ * Class FOOTPRINT_LIST
+ * holds a list of FOOTPRINT_INFO objects, along with a list of IO_ERRORs or
+ * PARSE_ERRORs that were thrown acquiring the FOOTPRINT_INFOs.
+ */
+class FOOTPRINT_LIST
+{
+ FP_LIB_TABLE* m_lib_table; ///< no ownership
+ volatile int m_error_count; ///< thread safe to read.
+
+ typedef boost::ptr_vector< FOOTPRINT_INFO > FPILIST;
+ typedef boost::ptr_vector< IO_ERROR > ERRLIST;
+
+ FPILIST m_list;
+ ERRLIST m_errors; ///< some can be PARSE_ERRORs also
+
+ MUTEX m_errors_lock;
+ MUTEX m_list_lock;
+
+ /**
+ * Function loader_job
+ * loads footprints from @a aNicknameList and calls AddItem() on to help fill
+ * m_list.
+ *
+ * @param aNicknameList is a wxString[] holding libraries to load all footprints from.
+ * @param aJobZ is the size of the job, i.e. the count of nicknames.
+ */
+ void loader_job( const wxString* aNicknameList, int aJobZ );
+
+ void addItem( FOOTPRINT_INFO* aItem )
+ {
+ // m_list is not thread safe, and this function is called from
+ // worker threads, lock m_list.
+ MUTLOCK lock( m_list_lock );
+
+ m_list.push_back( aItem );
+ }
+
+
+public:
+
+ FOOTPRINT_LIST() :
+ m_lib_table( 0 ),
+ m_error_count( 0 )
+ {
+ }
+
+ /**
+ * Function GetCount
+ * @return the number of items stored in list
+ */
+ unsigned GetCount() const { return m_list.size(); }
+
+ /// Was forced to add this by modview_frame.cpp
+ const FPILIST& GetList() const { return m_list; }
+
+ /**
+ * Function GetModuleInfo
+ * @param aFootprintName = the footprint name inside the FOOTPRINT_INFO of interest.
+ * @return FOOTPRINT_INF* - the item stored in list if found
+ */
+ FOOTPRINT_INFO* GetModuleInfo( const wxString& aFootprintName );
+
+ /**
+ * Function GetItem
+ * @param aIdx = index of the given item
+ * @return the aIdx item in list
+ */
+ FOOTPRINT_INFO& GetItem( unsigned aIdx ) { return m_list[aIdx]; }
+
+ /**
+ * Function AddItem
+ * add aItem in list
+ * @param aItem = item to add
+ */
+ void AddItem( FOOTPRINT_INFO* aItem );
+
+ unsigned GetErrorCount() const { return m_errors.size(); }
+
+ const IO_ERROR* GetError( unsigned aIdx ) const { return &m_errors[aIdx]; }
+
+ /**
+ * Function ReadFootprintFiles
+ * reads all the footprints provided by the combination of aTable and aNickname.
+ *
+ * @param aTable defines all the libraries.
+ * @param aNickname is the library to read from, or if NULL means read all
+ * footprints from all known libraries in aTable.
+ * @return bool - true if it ran to completion, else false if it aborted after
+ * some number of errors. If true, it does not mean there were no errors, check
+ * GetErrorCount() for that, should be zero to indicate success.
+ */
+ bool ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxString* aNickname = NULL );
+
+ void DisplayErrors( wxTopLevelWindow* aCaller = NULL );
+
+ FP_LIB_TABLE* GetTable() const { return m_lib_table; }
+};
+
+#endif // FOOTPRINT_INFO_H_
diff --git a/include/fp_lib_table.h b/include/fp_lib_table.h
new file mode 100644
index 0000000..a56897a
--- /dev/null
+++ b/include/fp_lib_table.h
@@ -0,0 +1,635 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2012-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef FP_LIB_TABLE_H_
+#define FP_LIB_TABLE_H_
+
+#include <macros.h>
+#include <vector>
+#include <map>
+#include <io_mgr.h>
+#include <project.h>
+#include <boost/interprocess/exceptions.hpp>
+
+#define FP_LATE_ENVVAR 1 ///< late=1/early=0 environment variable expansion
+
+class wxFileName;
+class OUTPUTFORMATTER;
+class MODULE;
+class FP_LIB_TABLE_LEXER;
+class FPID;
+
+/**
+ * Class FP_LIB_TABLE
+ * holds FP_LIB_TABLE::ROW records (rows), and can be searched based on library nickName.
+ * <p>
+ * This class owns the <b>footprint library table</b>, which is like fstab in concept and maps
+ * logical library name to the library URI, type, and options. It is heavily based on the SWEET
+ * parser work done by Dick Hollenbeck and can be seen in new/sch_lib_table.h. A footprint
+ * library table had the following columns:
+ * <ul>
+ * <li> Logical Library Name (Nickname)
+ * <li> Library Type, used to determine which plugin to load to access the library.
+ * <li> Library URI. The full URI to the library source, form dependent on Type.
+ * <li> Options, used for as yet to be defined information such as user names or passwords
+ * </ul>
+ * <p>
+ * The Library Type can be one of:
+ * <ul>
+ * <li> "file"
+ * <li> "ftp"
+ * <li> "http"
+ * </ul>
+ * <p>
+ * For now, the Library URI types needed to support the various types can be one of those
+ * shown below, which are typical of each type:
+ * <ul>
+ * <li> "file://C:/mylibdir"
+ * <li> "ftp://kicad.org/partlib/trunk"
+ * <li> "http://kicad.org/partlib"
+ * </ul>
+ * <p>
+ * The footprint library table is built up from several additive entries (table fragments),
+ * and the final table is a (conceptual) merging of the table fragments. Two
+ * anticipated sources of the entries are a personal table saved in the KiCad configuration
+ * and a project resident table that resides in project file. The project footprint table
+ * entries are considered a higher priority in the final dynamically assembled library table.
+ * An row in the project file contribution to the library table takes precedence over the
+ * personal table if there is a collision of logical library names. Otherwise, the entries
+ * simply combine without issue to make up the applicable library table.
+ *
+ * @author Wayne Stambaugh
+ */
+class FP_LIB_TABLE : public PROJECT::_ELEM
+{
+ friend class DIALOG_FP_LIB_TABLE;
+
+public:
+
+ /**
+ * Class ROW
+ * holds a record identifying a footprint library accessed by the appropriate #PLUGIN
+ * object in the #FP_LIB_TABLE.
+ */
+ class ROW
+ {
+ friend class FP_LIB_TABLE;
+ friend class DIALOG_FP_LIB_TABLE;
+
+ public:
+
+ typedef IO_MGR::PCB_FILE_T LIB_T;
+
+ ROW() :
+ type( IO_MGR::KICAD ),
+ properties( 0 )
+ {
+ }
+
+ ROW( const wxString& aNick, const wxString& aURI, const wxString& aType,
+ const wxString& aOptions, const wxString& aDescr = wxEmptyString ) :
+ nickName( aNick ),
+ description( aDescr ),
+ properties( 0 )
+ {
+ SetOptions( aOptions ),
+ SetFullURI( aURI );
+ SetType( aType );
+ }
+
+ ROW( const ROW& a );
+
+ ~ROW()
+ {
+ delete properties;
+ }
+
+ ROW& operator=( const ROW& r );
+
+ /// Used in DIALOG_FP_LIB_TABLE for detecting an edit.
+ bool operator==( const ROW& r ) const;
+
+ bool operator!=( const ROW& r ) const { return !( *this == r ); }
+
+ //-----<accessors>------------------------------------------------------
+
+ /**
+ * Function GetNickName
+ * returns the short name of this library table row.
+ */
+ const wxString& GetNickName() const { return nickName; }
+
+ /**
+ * Function SetNickName
+ * changes the logical name of this library, useful for an editor.
+ */
+ void SetNickName( const wxString& aNickName ) { nickName = aNickName; }
+
+ /**
+ * Function GetType
+ * returns the type of LIB represented by this row.
+ */
+ const wxString GetType() const { return IO_MGR::ShowType( type ); }
+
+ /**
+ * Function SetType
+ * changes the type represented by this row.
+ */
+ void SetType( const wxString& aType );
+
+ /**
+ * Function GetFullURI
+ * returns the full location specifying URI for the LIB, either in original
+ * UI form or in environment variable expanded form.
+ *
+ * @param aSubstituted Tells if caller wanted the substituted form, else not.
+ */
+ const wxString GetFullURI( bool aSubstituted = false ) const;
+
+ /**
+ * Function SetFullURI
+ * changes the full URI for the library.
+ */
+ void SetFullURI( const wxString& aFullURI );
+
+ /**
+ * Function GetOptions
+ * returns the options string, which may hold a password or anything else needed to
+ * instantiate the underlying LIB_SOURCE.
+ */
+ const wxString& GetOptions() const { return options; }
+
+ /**
+ * Function SetOptions
+ */
+ void SetOptions( const wxString& aOptions )
+ {
+ options = aOptions;
+
+ // set PROPERTIES* from options
+ setProperties( ParseOptions( TO_UTF8( aOptions ) ) );
+ }
+
+ /**
+ * Function GetDescr
+ * returns the description of the library referenced by this row.
+ */
+ const wxString& GetDescr() const { return description; }
+
+ /**
+ * Function SetDescr
+ * changes the description of the library referenced by this row.
+ */
+ void SetDescr( const wxString& aDescr ) { description = aDescr; }
+
+ /**
+ * Function GetProperties
+ * returns the constant PROPERTIES for this library (ROW). These are
+ * the "options" in a table.
+ */
+ const PROPERTIES* GetProperties() const { return properties; }
+
+ //-----</accessors>-----------------------------------------------------
+
+ /**
+ * Function Format
+ * serializes this object as utf8 text to an OUTPUTFORMATTER, and tries to
+ * make it look good using multiple lines and indentation.
+ * @param out is an #OUTPUTFORMATTER
+ * @param nestLevel is the indentation level to base all lines of the output.
+ * Actual indentation will be 2 spaces for each nestLevel.
+ */
+ void Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR, boost::interprocess::lock_exception );
+
+ private:
+
+ /**
+ * Function setProperties
+ * sets this ROW's PROPERTIES by taking ownership of @a aProperties.
+ * @param aProperties ownership is given over to this ROW.
+ */
+ void setProperties( const PROPERTIES* aProperties )
+ {
+ delete properties;
+ properties = aProperties;
+ }
+
+ void setPlugin( PLUGIN* aPlugin )
+ {
+ plugin.set( aPlugin );
+ }
+
+ wxString nickName;
+ wxString uri_user; ///< what user entered from UI or loaded from disk
+
+#if !FP_LATE_ENVVAR
+ wxString uri_expanded; ///< from ExpandSubstitutions()
+#endif
+
+ LIB_T type;
+ wxString options;
+ wxString description;
+
+ const PROPERTIES* properties;
+ PLUGIN::RELEASER plugin;
+ };
+
+ /**
+ * Constructor FP_LIB_TABLE
+ * builds a library table by pre-pending this table fragment in front of
+ * @a aFallBackTable. Loading of this table fragment is done by using Parse().
+ *
+ * @param aFallBackTable is another FP_LIB_TABLE which is searched only when
+ * a row is not found in this table. No ownership is
+ * taken of aFallBackTable.
+ */
+ FP_LIB_TABLE( FP_LIB_TABLE* aFallBackTable = NULL );
+
+ ~FP_LIB_TABLE();
+
+ /// Delete all rows.
+ void Clear()
+ {
+ rows.clear();
+ nickIndex.clear();
+ }
+
+ bool operator==( const FP_LIB_TABLE& r ) const
+ {
+ if( rows.size() == r.rows.size() )
+ {
+ unsigned i;
+ for( i = 0; i < rows.size() && rows[i] == r.rows[i]; ++i )
+ ;
+
+ if( i == rows.size() )
+ return true;
+ }
+
+ return false;
+ }
+
+ bool operator!=( const FP_LIB_TABLE& r ) const { return !( *this == r ); }
+
+ int GetCount() { return rows.size(); }
+
+ ROW& At( int aIndex ) { return rows[aIndex]; }
+
+ /**
+ * Function Parse
+ * fills this table fragment from information in the input stream \a aParser, which
+ * is a DSNLEXER customized for the grammar needed to describe instances of this object.
+ * The entire textual element spec is <br>
+ *
+ * <pre>
+ * (fp_lib_table
+ * (lib (name LOGICAL)(descr DESCRIPTION)(uri FULL_URI)(type TYPE)(options OPTIONS))
+ * (lib (name LOGICAL)(descr DESCRIPTION)(uri FULL_URI)(type TYPE)(options OPTIONS))
+ * (lib (name LOGICAL)(descr DESCRIPTION)(uri FULL_URI)(type TYPE)(options OPTIONS))
+ * )
+ * </pre>
+ *
+ * When this function is called, the input token stream given by \a aParser
+ * is assumed to be positioned at the '^' in the following example, i.e. just
+ * after the identifying keyword and before the content specifying stuff.
+ * <br>
+ * (lib_table ^ (....) )
+ *
+ * @param aParser is the input token stream of keywords and symbols.
+ */
+ void Parse( FP_LIB_TABLE_LEXER* aParser ) throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * Function ParseOptions
+ * parses @a aOptionsList and places the result into a PROPERTIES object
+ * which is returned. If the options field is empty, then the returned PROPERTIES
+ * will be a NULL pointer.
+ * <p>
+ * Typically aOptionsList comes from the "options" field within a ROW and
+ * the format is simply a comma separated list of name value pairs. e.g.:
+ * [name1[=value1][|name2[=value2]]] etc. When using the UI to create or edit
+ * a fp lib table, this formatting is handled for you.
+ */
+ static PROPERTIES* ParseOptions( const std::string& aOptionsList );
+
+ /**
+ * Function FormatOptions
+ * returns a list of options from the aProperties parameter. The name=value
+ * pairs will be separted with the '|' character. The =value portion may not
+ * be present. You might expect something like "name1=value1|name2=value2|flag_me".
+ * Notice that flag_me does not have a value. This is ok.
+ *
+ * @param aProperties is the PROPERTIES to format or NULL. If NULL the returned
+ * string will be empty.
+ */
+ static UTF8 FormatOptions( const PROPERTIES* aProperties );
+
+ /**
+ * Function Format
+ * serializes this object as utf8 text to an #OUTPUTFORMATTER, and tries to
+ * make it look good using multiple lines and indentation.
+ *
+ * @param out is an #OUTPUTFORMATTER
+ * @param nestLevel is the indentation level to base all lines of the output.
+ * Actual indentation will be 2 spaces for each nestLevel.
+ */
+ void Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR, boost::interprocess::lock_exception );
+
+ /**
+ * Function GetLogicalLibs
+ * returns the logical library names, all of them that are pertinent to
+ * a lookup done on this FP_LIB_TABLE.
+ */
+ std::vector<wxString> GetLogicalLibs();
+
+ //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
+
+ /**
+ * Function FootprintEnumerate
+ * returns a list of footprint names contained within the library given by
+ * @a aNickname.
+ *
+ * @param aNickname is a locator for the "library", it is a "name"
+ * in FP_LIB_TABLE::ROW
+ *
+ * @return wxArrayString - is the array of available footprint names inside
+ * a library
+ *
+ * @throw IO_ERROR if the library cannot be found, or footprint cannot be loaded.
+ */
+ wxArrayString FootprintEnumerate( const wxString& aNickname );
+
+ /**
+ * Function FootprintLoad
+ * loads a footprint having @a aFootprintName from the library given by @a aNickname.
+ *
+ * @param aNickname is a locator for the "library", it is a "name"
+ * in FP_LIB_TABLE::ROW
+ *
+ * @param aFootprintName is the name of the footprint to load.
+ *
+ * @return MODULE* - if found caller owns it, else NULL if not found.
+ *
+ * @throw IO_ERROR if the library cannot be found or read. No exception
+ * is thrown in the case where aFootprintName cannot be found.
+ */
+ MODULE* FootprintLoad( const wxString& aNickname, const wxString& aFootprintName );
+
+ /**
+ * Enum SAVE_T
+ * is the set of return values from FootprintSave() below.
+ */
+ enum SAVE_T
+ {
+ SAVE_OK,
+ SAVE_SKIPPED,
+ };
+
+ /**
+ * Function FootprintSave
+ * will write @a aFootprint to an existing library given by @a aNickname.
+ * If a footprint by the same name already exists, it is replaced.
+ *
+ * @param aNickname is a locator for the "library", it is a "name"
+ * in FP_LIB_TABLE::ROW
+ *
+ * @param aFootprint is what to store in the library. The caller continues
+ * to own the footprint after this call.
+ *
+ * @param aOverwrite when true means overwrite any existing footprint by the
+ * same name, else if false means skip the write and return SAVE_SKIPPED.
+ *
+ * @return SAVE_T - SAVE_OK or SAVE_SKIPPED. If error saving, then IO_ERROR is thrown.
+ *
+ * @throw IO_ERROR if there is a problem saving.
+ */
+ SAVE_T FootprintSave( const wxString& aNickname, const MODULE* aFootprint, bool aOverwrite = true );
+
+ /**
+ * Function FootprintDelete
+ * deletes the @a aFootprintName from the library given by @a aNickname.
+ *
+ * @param aNickname is a locator for the "library", it is a "name"
+ * in FP_LIB_TABLE::ROW
+ *
+ * @param aFootprintName is the name of a footprint to delete from the specified library.
+ *
+ * @throw IO_ERROR if there is a problem finding the footprint or the library, or deleting it.
+ */
+ void FootprintDelete( const wxString& aNickname, const wxString& aFootprintName );
+
+ /**
+ * Function IsFootprintLibWritable
+ * returns true iff the library given by @a aNickname is writable. (Often
+ * system libraries are read only because of where they are installed.)
+ *
+ * @throw IO_ERROR if no library at aLibraryPath exists.
+ */
+ bool IsFootprintLibWritable( const wxString& aNickname );
+
+ void FootprintLibDelete( const wxString& aNickname );
+
+ void FootprintLibCreate( const wxString& aNickname );
+
+ //-----</PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
+
+ /**
+ * Function FootprintLoadWithOptionalNickname
+ * loads a footprint having @a aFootprintId with possibly an empty nickname.
+ *
+ * @param aFootprintId the [nickname] & fooprint name of the footprint to load.
+ *
+ * @return MODULE* - if found caller owns it, else NULL if not found.
+ *
+ * @throw IO_ERROR if the library cannot be found or read. No exception
+ * is thrown in the case where aFootprintName cannot be found.
+ * @throw PARSE_ERROR if @a aFootprintId is not parsed OK.
+ */
+ MODULE* FootprintLoadWithOptionalNickname( const FPID& aFootprintId )
+ throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+
+ /**
+ * Function GetDescription
+ * returns the library desicription from @a aNickname, or an empty string
+ * if aNickname does not exist.
+ */
+ const wxString GetDescription( const wxString& aNickname );
+
+ /**
+ * Function InsertRow
+ * adds aRow if it does not already exist or if doReplace is true. If doReplace
+ * is not true and the key for aRow already exists, the function fails and returns false.
+ * The key for the table is the nickName, and all in this table must be unique.
+ * @param aRow is the new row to insert, or to forcibly add if doReplace is true.
+ * @param doReplace if true, means insert regardless of whether aRow's key already
+ * exists. If false, then fail if the key already exists.
+ * @return bool - true if the operation succeeded.
+ */
+ bool InsertRow( const ROW& aRow, bool doReplace = false );
+
+ /**
+ * Function FindRow
+ * returns a ROW if aNickName is found in this table or in any chained
+ * fallBack table fragment. The PLUGIN is loaded and attached
+ * to the "plugin" field of the ROW if not already loaded.
+ *
+ * @throw IO_ERROR if aNickName cannot be found.
+ */
+ const ROW* FindRow( const wxString& aNickName ) throw( IO_ERROR );
+
+ /**
+ * Function FindRowByURI
+ * returns a #FP_LIB_TABLE::ROW if aURE is found in this table or in any chained
+ * fallBack table fragments, else NULL.
+ */
+ const ROW* FindRowByURI( const wxString& aURI );
+
+ /**
+ * Function IsEmpty
+ * @param aIncludeFallback is used to determine if the fallback table should be
+ * included in the test.
+ * @return true if the footprint library table is empty.
+ */
+ bool IsEmpty( bool aIncludeFallback = true );
+
+ /**
+ * Function ExpandSubstitutions
+ * replaces any environment variable references with their values and is
+ * here to fully embellish the ROW::uri in a platform independent way.
+ * This enables (fp_lib_table)s to have platform dependent environment
+ * variables in them, allowing for a uniform table across platforms.
+ */
+ static const wxString ExpandSubstitutions( const wxString& aString );
+
+ /**
+ * Function LoadGlobalTable
+ * loads the global footprint library table into \a aTable.
+ *
+ * This probably should be move into the application object when KiCad is changed
+ * to a single process application. This is the least painful solution for the
+ * time being.
+ *
+ * @param aTable the #FP_LIB_TABLE object to load.
+ * @return true if the global library table exists and is loaded properly.
+ * @throw IO_ERROR if an error occurs attempting to load the footprint library
+ * table.
+ */
+ static bool LoadGlobalTable( FP_LIB_TABLE& aTable )
+ throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+
+ /**
+ * Function GetGlobalTableFileName
+ * @return the platform specific global footprint library path and file name.
+ */
+ static wxString GetGlobalTableFileName();
+
+#if 0
+ /**
+ * Function GetFileName
+ * @return the footprint library file name.
+ */
+ static const wxString GetFileName();
+#endif
+
+ /**
+ * Function GlobalPathEnvVarVariableName
+ * returns the name of the environment variable used to hold the directory of
+ * locally installed "KiCad sponsored" system footprint libraries. These can
+ * be either legacy or pretty format. The only thing special about this
+ * particular environment variable is that it is set automatically by
+ * KiCad on program startup, <b>iff</b> it is not set already in the environment.
+ */
+ static const wxString GlobalPathEnvVariableName();
+
+ /**
+ * Function Load
+ * loads the footprint library table using the path defined in \a aFileName with
+ * \a aFallBackTable.
+ *
+ * @param aFileName contains the full path to the s-expression file.
+ *
+ * @throw IO_ERROR if an error occurs attempting to load the footprint library
+ * table.
+ */
+ void Load( const wxString& aFileName ) throw( IO_ERROR );
+
+ /**
+ * Function Save
+ * writes this table to aFileName in s-expression form.
+ * @param aFileName is the name of the file to write to.
+ */
+ void Save( const wxString& aFileName ) const
+ throw( IO_ERROR, boost::interprocess::lock_exception );
+
+protected:
+
+ /**
+ * Function findRow
+ * returns a ROW if aNickname is found in this table or in any chained
+ * fallBack table fragment, else NULL.
+ */
+ ROW* findRow( const wxString& aNickname ) const;
+
+ void reindex()
+ {
+ nickIndex.clear();
+
+ for( ROWS_CITER it = rows.begin(); it != rows.end(); ++it )
+ nickIndex.insert( INDEX_VALUE( it->nickName, it - rows.begin() ) );
+ }
+
+ void ensureIndex()
+ {
+ // The dialog lib table editor may not maintain the nickIndex.
+ // Lazy indexing may be required. To handle lazy indexing, we must enforce
+ // that "nickIndex" is either empty or accurate, but never inaccurate.
+ if( !nickIndex.size() )
+ reindex();
+ }
+
+ typedef std::vector<ROW> ROWS;
+ typedef ROWS::iterator ROWS_ITER;
+ typedef ROWS::const_iterator ROWS_CITER;
+
+ ROWS rows;
+
+ /// this is a non-owning index into the ROWS table
+ typedef std::map<wxString,int> INDEX; // "int" is std::vector array index
+ typedef INDEX::iterator INDEX_ITER;
+ typedef INDEX::const_iterator INDEX_CITER;
+ typedef INDEX::value_type INDEX_VALUE;
+
+ /// this particular key is the nickName within each row.
+ INDEX nickIndex;
+
+ FP_LIB_TABLE* fallBack;
+};
+
+
+extern FP_LIB_TABLE GFootprintTable; // KIFACE scope.
+
+#endif // FP_LIB_TABLE_H_
diff --git a/include/fpid.h b/include/fpid.h
new file mode 100644
index 0000000..137137d
--- /dev/null
+++ b/include/fpid.h
@@ -0,0 +1,198 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _FPID_H_
+#define _FPID_H_
+
+#include <richio.h>
+#include <utf8.h>
+
+/**
+ * Class FPID
+ * is a Logical Footprint ID and consists of various portions much like a URI.
+ * It is a container for the separated portions of a logical footprint id so they
+ * can be accessed individually. The various portions of an FPID are:
+ * logicalLibraryName (nick name), footprint name, and revision. The logical library
+ * name and the footprint name are mandatory. The revision is optional and currently is
+ * not used.
+ *
+ * Example FPID string:
+ * "smt:R_0805/rev0".
+ *
+ * <p>
+ * <ul>
+ * <li> "smt" is the logical library name used to look up library information saved in the
+ * #FP_LIB_TABLE.
+ * <li> "R" is the name of the footprint within the library.
+ * <li> "rev0" is the revision, which is optional. If missing then its
+ * / delimiter should also not be present. A revision must begin with
+ * "rev" and be followed by at least one or more decimal digits.
+ * </ul>
+ *
+ * @author Dick Hollenbeck
+ */
+class FPID
+{
+public:
+
+ FPID() {}
+
+ /**
+ * Constructor FPID
+ * takes \a aId string and parses it. A typical FPID string consists of a
+ * library nickname followed by a footprint name.
+ * e.g.: "smt:R_0805", or
+ * e.g.: "mylib:R_0805"
+ *
+ * @param aId is a string to be parsed into the FPID object.
+ */
+ FPID( const std::string& aId ) throw( PARSE_ERROR );
+
+ FPID( const wxString& aId ) throw( PARSE_ERROR );
+
+ /**
+ * Function Parse
+ * [re-]stuffs this FPID with the information from @a aId.
+ *
+ * @param aId is the string to populate the #FPID object.
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the character offset into
+ * aId at which an error was detected.
+ */
+ int Parse( const UTF8& aId );
+
+
+ /**
+ * Function GetLibNickname
+ * returns the logical library name portion of a FPID.
+ */
+ const UTF8& GetLibNickname() const
+ {
+ return nickname;
+ }
+
+ /**
+ * Function SetLibNickname
+ * overrides the logical footprint library name portion of the FPID to @a aNickname.
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the character offset
+ * into the parameter at which an error was detected, usually because it
+ * contained '/' or ':'.
+ */
+ int SetLibNickname( const UTF8& aNickname );
+
+ /**
+ * Function GetFootprintName
+ * returns the footprint name, i.e. footprintName.
+ */
+ const UTF8& GetFootprintName() const { return footprint; }
+
+ /**
+ * Function SetFootprintName
+ * overrides the footprint name portion of the FPID to @a aFootprintName
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the character offset
+ * into the parameter at which an error was detected, usually because it
+ * contained '/'.
+ */
+ int SetFootprintName( const UTF8& aFootprintName );
+
+ int SetRevision( const UTF8& aRevision );
+
+ const UTF8& GetRevision() const { return revision; }
+
+ UTF8 GetFootprintNameAndRev() const;
+
+ /**
+ * Function Format
+ * returns the fully formatted text of the FPID.
+ */
+ UTF8 Format() const;
+
+ /**
+ * Function Format
+ * returns a wxString in the proper format as an FPID for a combination of
+ * aLibNickname, aFootprintName, and aRevision.
+ *
+ * @throw PARSE_ERROR if any of the pieces are illegal.
+ static UTF8 Format( const UTF8& aLibNickname, const UTF8& aFootprintName,
+ const UTF8& aRevision = "" )
+ throw( PARSE_ERROR );
+ */
+
+ /**
+ * Function IsValid
+ * @return true is the #FPID is valid.
+ *
+ * A valid #FPID must have both the footprint library nickname and the footprint name
+ * defined. The revision field is optional.
+ *
+ * @note A return value of true does not indicated that the #FPID is a valid #FP_LIB_TABLE
+ * entry.
+ */
+ bool IsValid() const { return !nickname.empty() && !footprint.empty(); }
+
+ /**
+ * Function IsLegacy
+ * @return true if the #FPID only has the #footprint name defined.
+ */
+ bool IsLegacy() const { return nickname.empty() && !footprint.empty() && revision.empty(); }
+
+ /**
+ * Function clear
+ * clears the contents of the library nickname, footprint name, and revision strings.
+ */
+ void clear();
+
+ /**
+ * Function empty
+ * @return a boolean true value if the FPID is empty. Otherwise return false.
+ */
+ bool empty() const { return nickname.empty() && footprint.empty() && revision.empty(); }
+
+ /**
+ * Function Compare
+ * compares the contents of FPID objects by performing a std::string comparison of the
+ * library nickname, footprint name, and revision strings respectively.
+ *
+ * @param aFPID is the FPID to compare against.
+ * @return -1 if less than \a aFPID, 1 if greater than \a aFPID, and 0 if equal to \a aFPID.
+ */
+ int compare( const FPID& aFPID ) const;
+
+ bool operator < ( const FPID& aFPID ) const { return this->compare( aFPID ) < 0; }
+ bool operator > ( const FPID& aFPID ) const { return this->compare( aFPID ) > 0; }
+ bool operator ==( const FPID& aFPID ) const { return this->compare( aFPID ) == 0; }
+ bool operator !=( const FPID& aFPID ) const { return !(*this == aFPID); }
+
+#if defined(DEBUG)
+ static void Test();
+#endif
+
+protected:
+ UTF8 nickname; ///< The nickname of the footprint library or empty.
+ UTF8 footprint; ///< The name of the footprint in the logical library.
+ UTF8 revision; ///< The footprint revision.
+};
+
+
+#endif // _FPID_H_
diff --git a/include/frame_type.h b/include/frame_type.h
new file mode 100644
index 0000000..d5b411c
--- /dev/null
+++ b/include/frame_type.h
@@ -0,0 +1,70 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef FRAME_T_H_
+#define FRAME_T_H_
+
+/**
+ * Enum FRAME_T
+ * is the set of EDA_BASE_FRAME derivatives, typically stored in
+ * EDA_BASE_FRAME::m_Ident.
+ */
+enum FRAME_T
+{
+ FRAME_SCH,
+ FRAME_SCH_LIB_EDITOR,
+ FRAME_SCH_VIEWER,
+ FRAME_SCH_VIEWER_MODAL,
+
+ FRAME_PCB,
+ FRAME_PCB_MODULE_EDITOR,
+ FRAME_PCB_MODULE_VIEWER,
+ FRAME_PCB_MODULE_VIEWER_MODAL,
+ FRAME_PCB_FOOTPRINT_WIZARD_MODAL,
+ FRAME_PCB_DISPLAY3D,
+
+ FRAME_CVPCB,
+ FRAME_CVPCB_DISPLAY,
+
+ FRAME_GERBER,
+
+ FRAME_PL_EDITOR,
+
+ FRAME_BM2CMP,
+
+ FRAME_CALC,
+
+ KIWAY_PLAYER_COUNT, // counts subset of FRAME_T's which are KIWAY_PLAYER derivatives
+
+ // C++ project manager is not a KIWAY_PLAYER
+ KICAD_MAIN_FRAME_T = KIWAY_PLAYER_COUNT,
+
+ FRAME_T_COUNT
+};
+
+ //TEXT_EDITOR_FRAME_T,
+
+
+#endif // FRAME_T_H_
diff --git a/include/gal/cairo/cairo_compositor.h b/include/gal/cairo/cairo_compositor.h
new file mode 100644
index 0000000..6d5d74a
--- /dev/null
+++ b/include/gal/cairo/cairo_compositor.h
@@ -0,0 +1,127 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file cairo_compositor.h
+ * @brief Class that handles multitarget rendering (ie. to different textures/surfaces) and
+ * later compositing into a single image (Cairo flavour).
+ */
+
+#ifndef CAIRO_COMPOSITOR_H_
+#define CAIRO_COMPOSITOR_H_
+
+#include <gal/compositor.h>
+#include <cairo.h>
+#include <boost/smart_ptr/shared_array.hpp>
+#include <deque>
+
+namespace KIGFX
+{
+class CAIRO_COMPOSITOR : public COMPOSITOR
+{
+public:
+ CAIRO_COMPOSITOR( cairo_t** aMainContext );
+ virtual ~CAIRO_COMPOSITOR();
+
+ /// @copydoc COMPOSITOR::Initialize()
+ virtual void Initialize();
+
+ /// @copydoc COMPOSITOR::Resize()
+ virtual void Resize( unsigned int aWidth, unsigned int aHeight );
+
+ /// @copydoc COMPOSITOR::CreateBuffer()
+ virtual unsigned int CreateBuffer();
+
+ /// @copydoc COMPOSITOR::GetBuffer()
+ inline virtual unsigned int GetBuffer() const
+ {
+ return m_current + 1;
+ }
+
+ /// @copydoc COMPOSITOR::SetBuffer()
+ virtual void SetBuffer( unsigned int aBufferHandle );
+
+ /// @copydoc COMPOSITOR::ClearBuffer()
+ virtual void ClearBuffer();
+
+ /// @copydoc COMPOSITOR::DrawBuffer()
+ virtual void DrawBuffer( unsigned int aBufferHandle );
+
+ /**
+ * Function SetMainContext()
+ * Sets a context to be treated as the main context (ie. as a target of buffers rendering and
+ * as a source of settings for newly created buffers).
+ *
+ * @param aMainContext is the context that should be treated as the main one.
+ */
+ inline virtual void SetMainContext( cairo_t* aMainContext )
+ {
+ m_mainContext = aMainContext;
+
+ // Use the context's transformation matrix
+ cairo_get_matrix( m_mainContext, &m_matrix );
+ }
+
+protected:
+ typedef boost::shared_array<unsigned int> BitmapPtr;
+ typedef struct
+ {
+ cairo_t* context; ///< Main texture handle
+ cairo_surface_t* surface; ///< Point to which an image from texture is attached
+ BitmapPtr bitmap; ///< Pixel storage
+ } CAIRO_BUFFER;
+
+ unsigned int m_current; ///< Currently used buffer handle
+ typedef std::deque<CAIRO_BUFFER> CAIRO_BUFFERS;
+
+ /// Pointer to the current context, so it can be changed
+ cairo_t** m_currentContext;
+
+ /// Rendering target used for compositing (the main display)
+ cairo_t* m_mainContext;
+
+ /// Transformation matrix
+ cairo_matrix_t m_matrix;
+
+ /// Stores information about initialized buffers
+ CAIRO_BUFFERS m_buffers;
+
+ unsigned int m_stride; ///< Stride to use given the desired format and width
+ unsigned int m_bufferSize; ///< Amount of memory needed to store a buffer
+
+ /**
+ * Function clean()
+ * performs freeing of resources.
+ */
+ void clean();
+
+ /// Returns number of currently used buffers
+ unsigned int usedBuffers()
+ {
+ return m_buffers.size();
+ }
+};
+} // namespace KIGFX
+
+#endif /* COMPOSITOR_H_ */
diff --git a/include/gal/cairo/cairo_gal.h b/include/gal/cairo/cairo_gal.h
new file mode 100644
index 0000000..1f395f7
--- /dev/null
+++ b/include/gal/cairo/cairo_gal.h
@@ -0,0 +1,405 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * CairoGal - Graphics Abstraction Layer for Cairo
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef CAIROGAL_H_
+#define CAIROGAL_H_
+
+#include <map>
+#include <iterator>
+
+#include <cairo.h>
+
+#include <gal/graphics_abstraction_layer.h>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <wx/dcbuffer.h>
+
+#if defined(__WXMSW__)
+#define SCREEN_DEPTH 24
+#else
+#if wxCHECK_VERSION( 2, 9, 0 )
+#define SCREEN_DEPTH wxBITMAP_SCREEN_DEPTH
+#else
+#define SCREEN_DEPTH 32
+#endif
+#endif
+
+/**
+ * @brief Class CAIRO_GAL is the cairo implementation of the graphics abstraction layer.
+ *
+ * Quote from Wikipedia:
+ * " Cairo is a software library used to provide a vector graphics-based, device-independent
+ * API for software developers. It is designed to provide primitives for 2-dimensional
+ * drawing across a number of different backends. "
+ * <br>
+ * Cairo offers also backends for Postscript and PDF surfaces. So it can be used for printing
+ * of KiCad graphics surfaces as well.
+ *
+ */
+namespace KIGFX
+{
+class CAIRO_COMPOSITOR;
+
+class CAIRO_GAL : public GAL, public wxWindow
+{
+public:
+ /**
+ * Constructor CAIRO_GAL
+ *
+ * @param aParent is the wxWidgets immediate wxWindow parent of this object.
+ *
+ * @param aMouseListener is the wxEvtHandler that should receive the mouse events,
+ * this can be can be any wxWindow, but is often a wxFrame container.
+ *
+ * @param aPaintListener is the wxEvtHandler that should receive the paint
+ * event. This can be any wxWindow, but is often a derived instance
+ * of this class or a containing wxFrame. The "paint event" here is
+ * a wxCommandEvent holding EVT_GAL_REDRAW, as sent by PostPaint().
+ *
+ * @param aName is the name of this window for use by wxWindow::FindWindowByName()
+ */
+ CAIRO_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener = NULL,
+ wxEvtHandler* aPaintListener = NULL, const wxString& aName = wxT( "CairoCanvas" ) );
+
+ virtual ~CAIRO_GAL();
+
+ // ---------------
+ // Drawing methods
+ // ---------------
+
+ /// @copydoc GAL::BeginDrawing()
+ virtual void BeginDrawing();
+
+ /// @copydoc GAL::EndDrawing()
+ virtual void EndDrawing();
+
+ /// @copydoc GAL::DrawLine()
+ virtual void DrawLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+ /// @copydoc GAL::DrawSegment()
+ virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth );
+
+ /// @copydoc GAL::DrawCircle()
+ virtual void DrawCircle( const VECTOR2D& aCenterPoint, double aRadius );
+
+ /// @copydoc GAL::DrawArc()
+ virtual void DrawArc( const VECTOR2D& aCenterPoint, double aRadius,
+ double aStartAngle, double aEndAngle );
+
+ /// @copydoc GAL::DrawRectangle()
+ virtual void DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+ /// @copydoc GAL::DrawPolyline()
+ virtual void DrawPolyline( const std::deque<VECTOR2D>& aPointList ) { drawPoly( aPointList ); }
+ virtual void DrawPolyline( const VECTOR2D aPointList[], int aListSize ) { drawPoly( aPointList, aListSize ); }
+
+ /// @copydoc GAL::DrawPolygon()
+ virtual void DrawPolygon( const std::deque<VECTOR2D>& aPointList ) { drawPoly( aPointList ); }
+ virtual void DrawPolygon( const VECTOR2D aPointList[], int aListSize ) { drawPoly( aPointList, aListSize ); }
+
+ /// @copydoc GAL::DrawCurve()
+ virtual void DrawCurve( const VECTOR2D& startPoint, const VECTOR2D& controlPointA,
+ const VECTOR2D& controlPointB, const VECTOR2D& endPoint );
+
+ // --------------
+ // Screen methods
+ // --------------
+
+ /// @brief Resizes the canvas.
+ virtual void ResizeScreen( int aWidth, int aHeight );
+
+ /// @brief Shows/hides the GAL canvas
+ virtual bool Show( bool aShow );
+
+ /// @copydoc GAL::Flush()
+ virtual void Flush();
+
+ /// @copydoc GAL::ClearScreen()
+ virtual void ClearScreen( const COLOR4D& aColor );
+
+ // -----------------
+ // Attribute setting
+ // -----------------
+
+ /// @copydoc GAL::SetIsFill()
+ virtual void SetIsFill( bool aIsFillEnabled );
+
+ /// @copydoc GAL::SetIsStroke()
+ virtual void SetIsStroke( bool aIsStrokeEnabled );
+
+ /// @copydoc GAL::SetStrokeColor()
+ virtual void SetStrokeColor( const COLOR4D& aColor );
+
+ /// @copydoc GAL::SetFillColor()
+ virtual void SetFillColor( const COLOR4D& aColor );
+
+ /// @copydoc GAL::SetLineWidth()
+ virtual void SetLineWidth( double aLineWidth );
+
+ /// @copydoc GAL::SetLayerDepth()
+ virtual void SetLayerDepth( double aLayerDepth );
+
+ // --------------
+ // Transformation
+ // --------------
+
+ /// @copydoc GAL::Transform()
+ virtual void Transform( const MATRIX3x3D& aTransformation );
+
+ /// @copydoc GAL::Rotate()
+ virtual void Rotate( double aAngle );
+
+ /// @copydoc GAL::Translate()
+ virtual void Translate( const VECTOR2D& aTranslation );
+
+ /// @copydoc GAL::Scale()
+ virtual void Scale( const VECTOR2D& aScale );
+
+ /// @copydoc GAL::Save()
+ virtual void Save();
+
+ /// @copydoc GAL::Restore()
+ virtual void Restore();
+
+ // --------------------------------------------
+ // Group methods
+ // ---------------------------------------------
+
+ /// @copydoc GAL::BeginGroup()
+ virtual int BeginGroup();
+
+ /// @copydoc GAL::EndGroup()
+ virtual void EndGroup();
+
+ /// @copydoc GAL::DrawGroup()
+ virtual void DrawGroup( int aGroupNumber );
+
+ /// @copydoc GAL::ChangeGroupColor()
+ virtual void ChangeGroupColor( int aGroupNumber, const COLOR4D& aNewColor );
+
+ /// @copydoc GAL::ChangeGroupDepth()
+ virtual void ChangeGroupDepth( int aGroupNumber, int aDepth );
+
+ /// @copydoc GAL::DeleteGroup()
+ virtual void DeleteGroup( int aGroupNumber );
+
+ /// @copydoc GAL::ClearCache()
+ virtual void ClearCache();
+
+ // --------------------------------------------------------
+ // Handling the world <-> screen transformation
+ // --------------------------------------------------------
+
+ /// @copydoc GAL::SaveScreen()
+ virtual void SaveScreen();
+
+ /// @copydoc GAL::RestoreScreen()
+ virtual void RestoreScreen();
+
+ /// @copydoc GAL::SetTarget()
+ virtual void SetTarget( RENDER_TARGET aTarget );
+
+ /// @copydoc GAL::GetTarget()
+ virtual RENDER_TARGET GetTarget() const;
+
+ /// @copydoc GAL::ClearTarget()
+ virtual void ClearTarget( RENDER_TARGET aTarget );
+
+ // -------
+ // Cursor
+ // -------
+
+ /// @copydoc GAL::SetCursorSize()
+ virtual void SetCursorSize( unsigned int aCursorSize );
+
+ /// @copydoc GAL::DrawCursor()
+ virtual void DrawCursor( const VECTOR2D& aCursorPosition );
+
+ /**
+ * Function PostPaint
+ * posts an event to m_paint_listener. A post is used so that the actual drawing
+ * function can use a device context type that is not specific to the wxEVT_PAINT event.
+ */
+ void PostPaint()
+ {
+ if( paintListener )
+ {
+ wxPaintEvent redrawEvent;
+ wxPostEvent( paintListener, redrawEvent );
+ }
+ }
+
+ void SetMouseListener( wxEvtHandler* aMouseListener )
+ {
+ mouseListener = aMouseListener;
+ }
+
+ void SetPaintListener( wxEvtHandler* aPaintListener )
+ {
+ paintListener = aPaintListener;
+ }
+
+protected:
+ virtual void drawGridLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+private:
+ /// Super class definition
+ typedef GAL super;
+
+ // Compositing variables
+ boost::shared_ptr<CAIRO_COMPOSITOR> compositor; ///< Object for layers compositing
+ unsigned int mainBuffer; ///< Handle to the main buffer
+ unsigned int overlayBuffer; ///< Handle to the overlay buffer
+ RENDER_TARGET currentTarget; ///< Current rendering target
+ bool validCompositor; ///< Compositor initialization flag
+
+ // Variables related to wxWidgets
+ wxWindow* parentWindow; ///< Parent window
+ wxEvtHandler* mouseListener; ///< Mouse listener
+ wxEvtHandler* paintListener; ///< Paint listener
+ unsigned int bufferSize; ///< Size of buffers cairoOutput, bitmapBuffers
+ unsigned char* wxOutput; ///< wxImage comaptible buffer
+
+ // Cursor variables
+ std::deque<wxColour> savedCursorPixels; ///< Saved pixels of the cursor
+ bool isDeleteSavedPixels; ///< True, if the saved pixels can be discarded
+ wxPoint savedCursorPosition; ///< The last cursor position
+ wxBitmap* cursorPixels; ///< Cursor pixels
+ wxBitmap* cursorPixelsSaved; ///< Saved cursor pixels
+
+ /// Maximum number of arguments for one command
+ static const int MAX_CAIRO_ARGUMENTS = 6;
+
+ /// Definitions for the command recorder
+ enum GRAPHICS_COMMAND
+ {
+ CMD_SET_FILL, ///< Enable/disable filling
+ CMD_SET_STROKE, ///< Enable/disable stroking
+ CMD_SET_FILLCOLOR, ///< Set the fill color
+ CMD_SET_STROKECOLOR, ///< Set the stroke color
+ CMD_SET_LINE_WIDTH, ///< Set the line width
+ CMD_STROKE_PATH, ///< Set the stroke path
+ CMD_FILL_PATH, ///< Set the fill path
+ CMD_TRANSFORM, ///< Transform the actual context
+ CMD_ROTATE, ///< Rotate the context
+ CMD_TRANSLATE, ///< Translate the context
+ CMD_SCALE, ///< Scale the context
+ CMD_SAVE, ///< Save the transformation matrix
+ CMD_RESTORE, ///< Restore the transformation matrix
+ CMD_CALL_GROUP ///< Call a group
+ };
+
+ /// Type definition for an graphics group element
+ typedef struct
+ {
+ GRAPHICS_COMMAND command; ///< Command to execute
+ double arguments[MAX_CAIRO_ARGUMENTS]; ///< Arguments for Cairo commands
+ bool boolArgument; ///< A bool argument
+ int intArgument; ///< An int argument
+ cairo_path_t* cairoPath; ///< Pointer to a Cairo path
+ } GROUP_ELEMENT;
+
+ // Variables for the grouping function
+ bool isGrouping; ///< Is grouping enabled ?
+ bool isElementAdded; ///< Was an graphic element added ?
+ typedef std::deque<GROUP_ELEMENT> GROUP; ///< A graphic group type definition
+ std::map<int, GROUP> groups; ///< List of graphic groups
+ unsigned int groupCounter; ///< Counter used for generating keys for groups
+ GROUP* currentGroup; ///< Currently used group
+
+ // Variables related to Cairo <-> wxWidgets
+ cairo_matrix_t cairoWorldScreenMatrix; ///< Cairo world to screen transformation matrix
+ cairo_t* currentContext; ///< Currently used Cairo context for drawing
+ cairo_t* context; ///< Cairo image
+ cairo_surface_t* surface; ///< Cairo surface
+ unsigned int* bitmapBuffer; ///< Storage of the cairo image
+ unsigned int* bitmapBufferBackup; ///< Backup storage of the cairo image
+ int stride; ///< Stride value for Cairo
+ bool isInitialized; ///< Are Cairo image & surface ready to use
+ COLOR4D backgroundColor; ///< Background color
+
+ // Methods
+ void storePath(); ///< Store the actual path
+
+ // Event handlers
+ /**
+ * @brief Paint event handler.
+ *
+ * @param aEvent is the paint event.
+ */
+ void onPaint( wxPaintEvent& aEvent );
+
+ /**
+ * @brief Mouse event handler, forwards the event to the child.
+ *
+ * @param aEvent is the mouse event to be forwarded.
+ */
+ void skipMouseEvent( wxMouseEvent& aEvent );
+
+ /**
+ * @brief Prepares cursor bitmap.
+ */
+ virtual void initCursor();
+
+ /**
+ * @brief Blits cursor into the current screen.
+ */
+ virtual void blitCursor( wxBufferedDC& clientDC );
+
+ /// Prepare Cairo surfaces for drawing
+ void initSurface();
+
+ /// Destroy Cairo surfaces when are not needed anymore
+ void deinitSurface();
+
+ /// Allocate the bitmaps for drawing
+ void allocateBitmaps();
+
+ /// Allocate the bitmaps for drawing
+ void deleteBitmaps();
+
+ /// Prepare the compositor
+ void setCompositor();
+
+ /// Drawing polygons & polylines is the same in cairo, so here is the common code
+ void drawPoly( const std::deque<VECTOR2D>& aPointList );
+ void drawPoly( const VECTOR2D aPointList[], int aListSize );
+
+ /**
+ * @brief Returns a valid key that can be used as a new group number.
+ *
+ * @return An unique group number that is not used by any other group.
+ */
+ unsigned int getNewGroupNumber();
+
+ /// Format used to store pixels
+ static const cairo_format_t GAL_FORMAT = CAIRO_FORMAT_RGB24;
+
+ ///> Opacity of a single layer
+ static const float LAYER_ALPHA;
+};
+} // namespace KIGFX
+
+#endif // CAIROGAL_H_
diff --git a/include/gal/color4d.h b/include/gal/color4d.h
new file mode 100644
index 0000000..46ae899
--- /dev/null
+++ b/include/gal/color4d.h
@@ -0,0 +1,222 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Color class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef COLOR4D_H_
+#define COLOR4D_H_
+
+#include <colors.h>
+#include <cassert>
+
+namespace KIGFX
+{
+/**
+ * Class COLOR4D
+ * is the color representation with 4 components: red, green, blue, alpha.
+ */
+class COLOR4D
+{
+public:
+ // Constructor (creates the Color 0,0,0,0)
+ COLOR4D() :
+ r( 0 ), g( 0 ), b( 0 ), a( 1 )
+ {
+ }
+
+ /**
+ * @brief Constructor
+ *
+ * @param aRed is the red component [0.0 .. 1.0].
+ * @param aGreen is the green component [0.0 .. 1.0].
+ * @param aBlue is the blue component [0.0 .. 1.0].
+ * @param aAlpha is the alpha value [0.0 .. 1.0].
+ */
+ COLOR4D( double aRed, double aGreen, double aBlue, double aAlpha ) :
+ r( aRed ), g( aGreen ), b( aBlue ), a( aAlpha )
+ {
+ assert( r >= 0.0 && r <= 1.0 );
+ assert( g >= 0.0 && g <= 1.0 );
+ assert( b >= 0.0 && b <= 1.0 );
+ assert( a >= 0.0 && a <= 1.0 );
+ }
+
+ /**
+ * @brief Constructor
+ *
+ * @param aColor is one of KiCad's palette colors.
+ * @see EDA_COLOR_T
+ */
+ COLOR4D( EDA_COLOR_T aColor );
+
+#ifdef WX_COMPATIBILITY
+ /**
+ * @brief Constructor
+ *
+ * @param aColor is the color type used by wxWidgets.
+ */
+ COLOR4D( const wxColour& aColor );
+#endif /* WX_COMPATIBLITY */
+
+ /**
+ * Function Brighten
+ * Makes the color brighter by a given factor.
+ * @param aFactor Specifies how bright the color should become (valid values: 0.0 .. 1.0).
+ * @return COLOR4D& Brightened color.
+ */
+ COLOR4D& Brighten( double aFactor )
+ {
+ assert( aFactor >= 0.0 && aFactor <= 1.0 );
+
+ r = r * ( 1.0 - aFactor ) + aFactor;
+ g = g * ( 1.0 - aFactor ) + aFactor;
+ b = b * ( 1.0 - aFactor ) + aFactor;
+
+ return *this;
+ }
+
+ /**
+ * Function Darken
+ * Makes the color darker by a given factor.
+ * @param aFactor Specifies how dark the color should become (valid values: 0.0 .. 1.0).
+ * @return COLOR4D& Darkened color.
+ */
+ COLOR4D& Darken( double aFactor )
+ {
+ assert( aFactor >= 0.0 && aFactor <= 1.0 );
+
+ r = r * ( 1.0 - aFactor );
+ g = g * ( 1.0 - aFactor );
+ b = b * ( 1.0 - aFactor );
+
+ return *this;
+ }
+
+ /**
+ * Function Invert
+ * Makes the color inverted, alpha remains the same.
+ * @return COLOR4D& Inverted color.
+ */
+ COLOR4D& Invert()
+ {
+ r = ( 1.0 - r );
+ g = ( 1.0 - g );
+ b = ( 1.0 - b );
+
+ return *this;
+ }
+
+ /**
+ * Saturates the color to a given factor (in HSV model)
+ */
+ COLOR4D& Saturate( double aFactor );
+
+ /**
+ * Function Brightened
+ * Returns a color that is brighter by a given factor, without modifying object.
+ * @param aFactor Specifies how bright the color should become (valid values: 0.0 .. 1.0).
+ * @return COLOR4D Highlighted color.
+ */
+ COLOR4D Brightened( double aFactor ) const
+ {
+ assert( aFactor >= 0.0 && aFactor <= 1.0 );
+
+ return COLOR4D( r * ( 1.0 - aFactor ) + aFactor,
+ g * ( 1.0 - aFactor ) + aFactor,
+ b * ( 1.0 - aFactor ) + aFactor,
+ a );
+ }
+
+ /**
+ * Function Darkened
+ * Returns a color that is darker by a given factor, without modifying object.
+ * @param aFactor Specifies how dark the color should become (valid values: 0.0 .. 1.0).
+ * @return COLOR4D Darkened color.
+ */
+ COLOR4D Darkened( double aFactor ) const
+ {
+ assert( aFactor >= 0.0 && aFactor <= 1.0 );
+
+ return COLOR4D( r * ( 1.0 - aFactor ),
+ g * ( 1.0 - aFactor ),
+ b * ( 1.0 - aFactor ),
+ a );
+ }
+
+ /**
+ * Function Inverted
+ * Returns an inverted color, alpha remains the same.
+ * @return COLOR4D& Inverted color.
+ */
+ COLOR4D Inverted() const
+ {
+ return COLOR4D( 1.0 - r, 1.0 - g, 1.0 - b, a );
+ }
+
+ /**
+ * Function GetBrightness
+ * Returns the brightness value of the color ranged from 0.0 to 1.0.
+ * @return The brightness value.
+ */
+ double GetBrightness() const
+ {
+ // Weighted W3C formula
+ return r * 0.299 + g * 0.587 + b * 0.117;
+ }
+
+ /**
+ * Function ToHSV()
+ * Converts current color (stored in RGB) to HSV format.
+ *
+ * @param aOutH is conversion result for hue component.
+ * @param aOutS is conversion result for saturation component.
+ * @param aOutV is conversion result for value component.
+ */
+ void ToHSV( double& aOutH, double& aOutS, double& aOutV ) const;
+
+ /**
+ * Function FromHSV()
+ * Changes currently used color to the one given by hue, saturation and value parameters.
+ *
+ * @param aInH is hue component.
+ * @param aInS is saturation component.
+ * @param aInV is value component.
+ */
+ void FromHSV( double aInH, double aInS, double aInV );
+
+ /// @brief Equality operator, are two colors equal
+ const bool operator==( const COLOR4D& aColor );
+
+ /// @brief Not equality operator, are two colors not equal
+ const bool operator!=( const COLOR4D& aColor );
+
+ // Color components: red, green, blue, alpha
+ double r; ///< Red component
+ double g; ///< Green component
+ double b; ///< Blue component
+ double a; ///< Alpha component
+};
+} // namespace KIGFX
+
+#endif /* COLOR4D_H_ */
diff --git a/include/gal/compositor.h b/include/gal/compositor.h
new file mode 100644
index 0000000..cd1d636
--- /dev/null
+++ b/include/gal/compositor.h
@@ -0,0 +1,106 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file compositor.h
+ * @brief Class that handles multitarget rendering (ie. to different textures/surfaces) and
+ * later compositing into a single image.
+ */
+
+#ifndef COMPOSITOR_H_
+#define COMPOSITOR_H_
+
+namespace KIGFX
+{
+
+class COMPOSITOR
+{
+public:
+ virtual ~COMPOSITOR()
+ {
+ }
+
+ /**
+ * Function Reset()
+ * performs primary initialiation, necessary to use the object.
+ */
+ virtual void Initialize() = 0;
+
+ /**
+ * Function Resize()
+ * clears the state of COMPOSITOR, so it has to be reinitialized again with the new dimensions.
+ *
+ * @param aWidth is the framebuffer width (in pixels).
+ * @param aHeight is the framebuffer height (in pixels).
+ */
+ virtual void Resize( unsigned int aWidth, unsigned int aHeight ) = 0;
+
+ /**
+ * Function CreateBuffer()
+ * prepares a new buffer that may be used as a rendering target.
+ *
+ * @return is the handle of the buffer. In case of failure 0 (zero) is returned as the handle.
+ */
+ virtual unsigned int CreateBuffer() = 0;
+
+ /**
+ * Function GetBuffer()
+ * returns currently used buffer handle.
+ *
+ * @return Currently used buffer handle.
+ */
+ virtual unsigned int GetBuffer() const = 0;
+
+ /**
+ * Function SetBuffer()
+ * sets the selected buffer as the rendering target. All the following drawing functions are
+ * going to be rendered in the selected buffer.
+ *
+ * @param aBufferHandle is the handle of the buffer or 0 in case of rendering directly to the
+ * display.
+ */
+ virtual void SetBuffer( unsigned int aBufferHandle ) = 0;
+
+ /**
+ * Function ClearBuffer()
+ * clears the selected buffer (set by the SetBuffer() function).
+ */
+ virtual void ClearBuffer() = 0;
+
+ /**
+ * Function DrawBuffer()
+ * draws the selected buffer on the screen.
+ *
+ * @param aBufferHandle is the handle of the buffer to be drawn.
+ */
+ virtual void DrawBuffer( unsigned int aBufferHandle ) = 0;
+
+protected:
+ unsigned int m_width; ///< Width of the buffer (in pixels)
+ unsigned int m_height; ///< Height of the buffer (in pixels)
+};
+
+} // namespace KIGFX
+
+#endif /* COMPOSITOR_H_ */
diff --git a/include/gal/definitions.h b/include/gal/definitions.h
new file mode 100644
index 0000000..4ee1d6f
--- /dev/null
+++ b/include/gal/definitions.h
@@ -0,0 +1,48 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Macro definitions
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef DEFINITIONS_H_
+#define DEFINITIONS_H_
+
+/// Swap the variables if a condition is met.
+#define SWAP( varA, condition, varB ) if( varA condition varB ) { double tmp = varA; varA = varB; \
+ varB = tmp; }
+
+namespace KIGFX
+{
+/**
+ * RENDER_TARGET: Possible rendering targets
+ */
+enum RENDER_TARGET
+{
+ TARGET_CACHED = 0, ///< Main rendering target (cached)
+ TARGET_NONCACHED, ///< Auxiliary rendering target (noncached)
+ TARGET_OVERLAY, ///< Items that may change while the view stays the same (noncached)
+ TARGETS_NUMBER ///< Number of available rendering targets
+};
+} // namespace KIGFX
+
+#endif /* DEFINITIONS_H_ */
diff --git a/include/gal/graphics_abstraction_layer.h b/include/gal/graphics_abstraction_layer.h
new file mode 100644
index 0000000..40cebbf
--- /dev/null
+++ b/include/gal/graphics_abstraction_layer.h
@@ -0,0 +1,910 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Graphics Abstraction Layer (GAL) - base class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef GRAPHICSABSTRACTIONLAYER_H_
+#define GRAPHICSABSTRACTIONLAYER_H_
+
+#include <deque>
+#include <stack>
+#include <limits>
+
+#include <math/matrix3x3.h>
+
+#include <gal/color4d.h>
+#include <gal/definitions.h>
+#include <gal/stroke_font.h>
+#include <newstroke_font.h>
+
+namespace KIGFX
+{
+/**
+ * GridStyle: Type definition of the grid style
+ */
+enum GRID_STYLE
+{
+ GRID_STYLE_LINES, ///< Use lines for the grid
+ GRID_STYLE_DOTS ///< Use dots for the grid
+};
+
+/**
+ * @brief Class GAL is the abstract interface for drawing on a 2D-surface.
+ *
+ * The functions are optimized for drawing shapes of an EDA-program such as KiCad. Most methods
+ * are abstract and need to be implemented by a lower layer, for example by a cairo or OpenGL implementation.
+ * <br>
+ * Almost all methods use world coordinates as arguments. The board design is defined in world space units;
+ * for drawing purposes these are transformed to screen units with this layer. So zooming is handled here as well.
+ *
+ */
+class GAL
+{
+public:
+ // Constructor / Destructor
+ GAL();
+ virtual ~GAL();
+
+ /// @brief Returns the initalization status for the canvas.
+ virtual bool IsInitialized() const { return true; }
+
+ // ---------------
+ // Drawing methods
+ // ---------------
+
+ /// @brief Begin the drawing, needs to be called for every new frame.
+ virtual void BeginDrawing() {};
+
+ /// @brief End the drawing, needs to be called for every new frame.
+ virtual void EndDrawing() {};
+
+ /**
+ * @brief Draw a line.
+ *
+ * Start and end points are defined as 2D-Vectors.
+ *
+ * @param aStartPoint is the start point of the line.
+ * @param aEndPoint is the end point of the line.
+ */
+ virtual void DrawLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint ) {};
+
+ /**
+ * @brief Draw a rounded segment.
+ *
+ * Start and end points are defined as 2D-Vectors.
+ *
+ * @param aStartPoint is the start point of the segment.
+ * @param aEndPoint is the end point of the segment.
+ * @param aWidth is a width of the segment
+ */
+ virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) {};
+
+ /**
+ * @brief Draw a polyline
+ *
+ * @param aPointList is a list of 2D-Vectors containing the polyline points.
+ */
+ virtual void DrawPolyline( const std::deque<VECTOR2D>& aPointList ) {};
+ virtual void DrawPolyline( const VECTOR2D aPointList[], int aListSize ) {};
+
+ /**
+ * @brief Draw a circle using world coordinates.
+ *
+ * @param aCenterPoint is the center point of the circle.
+ * @param aRadius is the radius of the circle.
+ */
+ virtual void DrawCircle( const VECTOR2D& aCenterPoint, double aRadius ) {};
+
+ /**
+ * @brief Draw an arc.
+ *
+ * @param aCenterPoint is the center point of the arc.
+ * @param aRadius is the arc radius.
+ * @param aStartAngle is the start angle of the arc.
+ * @param aEndAngle is the end angle of the arc.
+ */
+ virtual void
+ DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double aStartAngle, double aEndAngle ) {};
+
+ /**
+ * @brief Draw a rectangle.
+ *
+ * @param aStartPoint is the start point of the rectangle.
+ * @param aEndPoint is the end point of the rectangle.
+ */
+ virtual void DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint ) {};
+
+ /**
+ * @brief Draw a polygon.
+ *
+ * @param aPointList is the list of the polygon points.
+ */
+ virtual void DrawPolygon( const std::deque<VECTOR2D>& aPointList ) {};
+ virtual void DrawPolygon( const VECTOR2D aPointList[], int aListSize ) {};
+
+ /**
+ * @brief Draw a cubic bezier spline.
+ *
+ * @param startPoint is the start point of the spline.
+ * @param controlPointA is the first control point.
+ * @param controlPointB is the second control point.
+ * @param endPoint is the end point of the spline.
+ */
+ virtual void DrawCurve( const VECTOR2D& startPoint, const VECTOR2D& controlPointA,
+ const VECTOR2D& controlPointB, const VECTOR2D& endPoint ) {};
+
+ // --------------
+ // Screen methods
+ // --------------
+
+ /// @brief Resizes the canvas.
+ virtual void ResizeScreen( int aWidth, int aHeight ) {};
+
+ /// @brief Shows/hides the GAL canvas
+ virtual bool Show( bool aShow ) { return true; };
+
+ /// @brief Returns GAL canvas size in pixels
+ const VECTOR2I& GetScreenPixelSize() const
+ {
+ return screenSize;
+ }
+
+ /// @brief Force all remaining objects to be drawn.
+ virtual void Flush() {};
+
+ /**
+ * @brief Clear the screen.
+ * @param aColor is the color used for clearing.
+ */
+ virtual void ClearScreen( const COLOR4D& aColor ) {};
+
+ // -----------------
+ // Attribute setting
+ // -----------------
+
+ /**
+ * @brief Enable/disable fill.
+ *
+ * @param aIsFillEnabled is true, when the graphics objects should be filled, else false.
+ */
+ inline virtual void SetIsFill( bool aIsFillEnabled )
+ {
+ isFillEnabled = aIsFillEnabled;
+ }
+
+ /**
+ * @brief Enable/disable stroked outlines.
+ *
+ * @param aIsStrokeEnabled is true, if the outline of an object should be stroked.
+ */
+ inline virtual void SetIsStroke( bool aIsStrokeEnabled )
+ {
+ isStrokeEnabled = aIsStrokeEnabled;
+ }
+
+ /**
+ * @brief Set the fill color.
+ *
+ * @param aColor is the color for filling.
+ */
+ inline virtual void SetFillColor( const COLOR4D& aColor )
+ {
+ fillColor = aColor;
+ }
+
+ /**
+ * @brief Set the stroke color.
+ *
+ * @param aColor is the color for stroking the outline.
+ */
+ inline virtual void SetStrokeColor( const COLOR4D& aColor )
+ {
+ strokeColor = aColor;
+ }
+
+ /**
+ * @brief Get the stroke color.
+ *
+ * @return the color for stroking the outline.
+ */
+ inline const COLOR4D& GetStrokeColor() const
+ {
+ return strokeColor;
+ }
+
+ /**
+ * @brief Set the line width.
+ *
+ * @param aLineWidth is the line width.
+ */
+ inline virtual void SetLineWidth( double aLineWidth )
+ {
+ lineWidth = aLineWidth;
+ }
+
+ /**
+ * @brief Get the line width.
+ *
+ * @return the actual line width.
+ */
+ inline double GetLineWidth() const
+ {
+ return lineWidth;
+ }
+
+ /**
+ * @brief Set the depth of the layer (position on the z-axis)
+ *
+ * @param aLayerDepth the layer depth for the objects.
+ */
+ inline virtual void SetLayerDepth( double aLayerDepth )
+ {
+ assert( aLayerDepth <= depthRange.y );
+ assert( aLayerDepth >= depthRange.x );
+
+ layerDepth = aLayerDepth;
+ }
+
+ // ----
+ // Text
+ // ----
+ /**
+ * @brief Draws a vector type text using preloaded Newstroke font.
+ *
+ * @param aText is the text to be drawn.
+ * @param aPosition is the text position in world coordinates.
+ * @param aRotationAngle is the text rotation angle.
+ */
+ inline virtual void StrokeText( const wxString& aText, const VECTOR2D& aPosition,
+ double aRotationAngle )
+ {
+ strokeFont.Draw( aText, aPosition, aRotationAngle );
+ }
+
+ /**
+ * @brief Loads attributes of the given text (bold/italic/underline/mirrored and so on).
+ *
+ * @param aText is the text item.
+ */
+ virtual void SetTextAttributes( const EDA_TEXT* aText );
+
+ /// @copydoc STROKE_FONT::SetGlyphSize()
+ inline void SetGlyphSize( const VECTOR2D aGlyphSize )
+ {
+ strokeFont.SetGlyphSize( aGlyphSize );
+ }
+
+ /// @copydoc STROKE_FONT::SetBold()
+ inline void SetBold( const bool aBold )
+ {
+ strokeFont.SetBold( aBold );
+ }
+
+ /// @copydoc STROKE_FONT::SetItalic()
+ inline void SetItalic( const bool aItalic )
+ {
+ strokeFont.SetItalic( aItalic );
+ }
+
+ /// @copydoc STROKE_FONT::SetMirrored()
+ inline void SetMirrored( const bool aMirrored )
+ {
+ strokeFont.SetMirrored( aMirrored );
+ }
+
+ /// @copydoc STROKE_FONT::SetHorizontalJustify()
+ inline void SetHorizontalJustify( const EDA_TEXT_HJUSTIFY_T aHorizontalJustify )
+ {
+ strokeFont.SetHorizontalJustify( aHorizontalJustify );
+ }
+
+ /// @copydoc STROKE_FONT::SetVerticalJustify()
+ inline void SetVerticalJustify( const EDA_TEXT_VJUSTIFY_T aVerticalJustify )
+ {
+ strokeFont.SetVerticalJustify( aVerticalJustify );
+ }
+
+ // --------------
+ // Transformation
+ // --------------
+
+ /**
+ * @brief Transform the context.
+ *
+ * @param aTransformation is the ransformation matrix.
+ */
+ virtual void Transform( const MATRIX3x3D& aTransformation ) {};
+
+ /**
+ * @brief Rotate the context.
+ *
+ * @param aAngle is the rotation angle in radians.
+ */
+ virtual void Rotate( double aAngle ) {};
+
+ /**
+ * @brief Translate the context.
+ *
+ * @param aTranslation is the translation vector.
+ */
+ virtual void Translate( const VECTOR2D& aTranslation ) {};
+
+ /**
+ * @brief Scale the context.
+ *
+ * @param aScale is the scale factor for the x- and y-axis.
+ */
+ virtual void Scale( const VECTOR2D& aScale ) {};
+
+ /// @brief Save the context.
+ virtual void Save() {};
+
+ /// @brief Restore the context.
+ virtual void Restore() {};
+
+ // --------------------------------------------
+ // Group methods
+ // ---------------------------------------------
+
+ /**
+ * @brief Begin a group.
+ *
+ * A group is a collection of graphic items.
+ * Hierarchical groups are possible, attributes and transformations can be used.
+ *
+ * @return the number of the group.
+ */
+ virtual int BeginGroup() { return 0; };
+
+ /// @brief End the group.
+ virtual void EndGroup() {};
+
+ /**
+ * @brief Draw the stored group.
+ *
+ * @param aGroupNumber is the group number.
+ */
+ virtual void DrawGroup( int aGroupNumber ) {};
+
+ /**
+ * @brief Changes the color used to draw the group.
+ *
+ * @param aGroupNumber is the group number.
+ * @param aNewColor is the new color.
+ */
+ virtual void ChangeGroupColor( int aGroupNumber, const COLOR4D& aNewColor ) {};
+
+ /**
+ * @brief Changes the depth (Z-axis position) of the group.
+ *
+ * @param aGroupNumber is the group number.
+ * @param aDepth is the new depth.
+ */
+ virtual void ChangeGroupDepth( int aGroupNumber, int aDepth ) {};
+
+ /**
+ * @brief Delete the group from the memory.
+ *
+ * @param aGroupNumber is the group number.
+ */
+ virtual void DeleteGroup( int aGroupNumber ) {};
+
+ /**
+ * @brief Delete all data created during caching of graphic items.
+ */
+ virtual void ClearCache() {};
+
+ // --------------------------------------------------------
+ // Handling the world <-> screen transformation
+ // --------------------------------------------------------
+
+ /// @brief Compute the world <-> screen transformation matrix
+ virtual void ComputeWorldScreenMatrix();
+
+ /**
+ * @brief Get the world <-> screen transformation matrix.
+ *
+ * @return the transformation matrix.
+ */
+ const MATRIX3x3D& GetWorldScreenMatrix() const
+ {
+ return worldScreenMatrix;
+ }
+
+ /**
+ * @brief Get the screen <-> world transformation matrix.
+ *
+ * @return the transformation matrix.
+ */
+ const MATRIX3x3D& GetScreenWorldMatrix() const
+ {
+ return screenWorldMatrix;
+ }
+
+ /**
+ * @brief Set the world <-> screen transformation matrix.
+ *
+ * @param aMatrix is the 3x3 world <-> screen transformation matrix.
+ */
+ inline void SetWorldScreenMatrix( const MATRIX3x3D& aMatrix )
+ {
+ worldScreenMatrix = aMatrix;
+ }
+
+ /**
+ * @brief Set the unit length.
+ *
+ * This defines the length [inch] per one integer. For instance a value 0.001 means
+ * that the coordinate [1000, 1000] corresponds with a point at (1 inch, 1 inch) or
+ * 1 mil resolution per integer.
+ *
+ * @param aWorldUnitLength is the world Unit length.
+ */
+ inline void SetWorldUnitLength( double aWorldUnitLength )
+ {
+ worldUnitLength = aWorldUnitLength;
+ }
+
+ /**
+ * @brief Set the dots per inch of the screen.
+ *
+ * This value depends on the user screen, it should be configurable by the application.
+ * For instance a typical notebook with HD+ resolution (1600x900) has 106 DPI.
+ *
+ * @param aScreenDPI are the screen DPI.
+ */
+ inline void SetScreenDPI( double aScreenDPI )
+ {
+ screenDPI = aScreenDPI;
+ }
+
+ /**
+ * @brief Set the Point in world space to look at.
+ *
+ * This point corresponds with the center of the actual drawing area.
+ *
+ * @param aPoint is the look at point (center of the actual drawing area).
+ */
+ inline void SetLookAtPoint( const VECTOR2D& aPoint )
+ {
+ lookAtPoint = aPoint;
+ }
+
+ /**
+ * @brief Get the look at point.
+ *
+ * @return the look at point.
+ */
+ inline const VECTOR2D& GetLookAtPoint() const
+ {
+ return lookAtPoint;
+ }
+
+ /**
+ * @brief Set the zoom factor of the scene.
+ *
+ * @param aZoomFactor is the zoom factor.
+ */
+ inline void SetZoomFactor( double aZoomFactor )
+ {
+ zoomFactor = aZoomFactor;
+ }
+
+ /**
+ * @brief Get the zoom factor
+ *
+ * @return the zoom factor.
+ */
+ inline double GetZoomFactor() const
+ {
+ return zoomFactor;
+ }
+
+ /**
+ * @brief Set the range of the layer depth.
+ *
+ * Usually required for the OpenGL implementation, any object outside this range is not drawn.
+ *
+ * @param aDepthRange is the depth range where component x is the near clipping plane and y
+ * is the far clipping plane.
+ */
+ inline void SetDepthRange( const VECTOR2D& aDepthRange )
+ {
+ depthRange = aDepthRange;
+ }
+
+ /**
+ * @brief Returns the minimum depth in the currently used range (the top).
+ */
+ inline double GetMinDepth() const
+ {
+ return depthRange.x;
+ }
+
+ /**
+ * @brief Returns the maximum depth in the currently used range (the bottom).
+ */
+ inline double GetMaxDepth() const
+ {
+ return depthRange.y;
+ }
+
+ /**
+ * @brief Get the world scale.
+ *
+ * @return the actual world scale factor.
+ */
+ inline double GetWorldScale() const
+ {
+ return worldScale;
+ }
+
+ /**
+ * @brief Sets flipping of the screen.
+ *
+ * @param xAxis is the flip flag for the X axis.
+ * @param yAxis is the flip flag for the Y axis.
+ */
+ inline void SetFlip( bool xAxis, bool yAxis )
+ {
+ if( xAxis )
+ flipX = -1.0; // flipped
+ else
+ flipX = 1.0; // regular
+
+ if( yAxis )
+ flipY = -1.0; // flipped
+ else
+ flipY = 1.0; // regular
+ }
+
+ // ---------------------------
+ // Buffer manipulation methods
+ // ---------------------------
+
+ /**
+ * @brief Save the screen contents.
+ */
+ virtual void SaveScreen() {};
+
+ /**
+ * @brief Restore the screen contents.
+ */
+ virtual void RestoreScreen() {};
+
+ /**
+ * @brief Sets the target for rendering.
+ *
+ * @param aTarget is the new target for rendering.
+ */
+ virtual void SetTarget( RENDER_TARGET aTarget ) {};
+
+ /**
+ * @brief Gets the currently used target for rendering.
+ *
+ * @return The current rendering target.
+ */
+ virtual RENDER_TARGET GetTarget() const { return TARGET_CACHED; };
+
+ /**
+ * @brief Clears the target for rendering.
+ *
+ * @param aTarget is the target to be cleared.
+ */
+ virtual void ClearTarget( RENDER_TARGET aTarget ) {};
+
+ // -------------
+ // Grid methods
+ // -------------
+
+ /**
+ * @brief Sets the visibility setting of the grid.
+ *
+ * @param aVisibility is the new visibility setting of the grid.
+ */
+ inline void SetGridVisibility( bool aVisibility )
+ {
+ gridVisibility = aVisibility;
+ }
+
+ /**
+ * @brief Set the origin point for the grid.
+ *
+ * @param aGridOrigin is a vector containing the grid origin point, in world coordinates.
+ */
+ inline void SetGridOrigin( const VECTOR2D& aGridOrigin )
+ {
+ gridOrigin = aGridOrigin;
+
+ if( gridSize.x == 0.0 || gridSize.y == 0.0 )
+ gridOffset = VECTOR2D(0.0, 0.0);
+ else
+ gridOffset = VECTOR2D( (long) gridOrigin.x % (long) gridSize.x,
+ (long) gridOrigin.y % (long) gridSize.y );
+ }
+
+ /**
+ * @brief Set the threshold for grid drawing.
+ *
+ * @param aThreshold is the minimum grid cell size (in pixels) for which the grid is drawn.
+ */
+ inline void SetGridDrawThreshold( int aThreshold )
+ {
+ gridDrawThreshold = aThreshold;
+ }
+
+ /**
+ * @brief Set the grid size.
+ *
+ * @param aGridSize is a vector containing the grid size in x and y direction.
+ */
+ inline void SetGridSize( const VECTOR2D& aGridSize )
+ {
+ gridSize = aGridSize;
+
+ gridOffset = VECTOR2D( (long) gridOrigin.x % (long) gridSize.x,
+ (long) gridOrigin.y % (long) gridSize.y );
+ }
+
+ /**
+ * @brief Returns the grid size.
+ *
+ * @return A vector containing the grid size in x and y direction.
+ */
+ inline const VECTOR2D& GetGridSize() const
+ {
+ return gridSize;
+ }
+
+ /**
+ * @brief Set the grid color.
+ *
+ * @param aGridColor is the grid color, it should have a low alpha value for the best effect.
+ */
+ inline void SetGridColor( const COLOR4D& aGridColor )
+ {
+ gridColor = aGridColor;
+ }
+
+ /**
+ * @brief Draw every tick line wider.
+ *
+ * @param aInterval increase the width of every aInterval line, if 0 do not use this feature.
+ */
+ inline void SetCoarseGrid( int aInterval )
+ {
+ gridTick = aInterval;
+ }
+
+ /**
+ * @brief Get the grid line width.
+ *
+ * @return the grid line width
+ */
+ inline double GetGridLineWidth() const
+ {
+ return gridLineWidth;
+ }
+
+ /**
+ * @brief Set the grid line width.
+ *
+ * @param aGridLineWidth is the rid line width.
+ */
+ inline void SetGridLineWidth( double aGridLineWidth )
+ {
+ gridLineWidth = aGridLineWidth;
+ }
+
+ ///> @brief Draw the grid
+ void DrawGrid();
+
+ /**
+ * Function GetGridPoint()
+ * For a given point it returns the nearest point belonging to the grid in world coordinates.
+ *
+ * @param aPoint is the point for which the grid point is searched.
+ * @return The nearest grid point in world coordinates.
+ */
+ VECTOR2D GetGridPoint( const VECTOR2D& aPoint ) const;
+
+ /**
+ * @brief Change the grid display style.
+ *
+ * @param aGridStyle is the new style for grid.
+ */
+ inline virtual void SetGridStyle( GRID_STYLE aGridStyle )
+ {
+ gridStyle = aGridStyle;
+ }
+
+ /**
+ * @brief Compute the point position in world coordinates from given screen coordinates.
+ *
+ * @param aPoint the pointposition in screen coordinates.
+ * @return the point position in world coordinates.
+ */
+ inline VECTOR2D ToWorld( const VECTOR2D& aPoint ) const
+ {
+ return VECTOR2D( screenWorldMatrix * aPoint );
+ }
+
+ /**
+ * @brief Compute the point position in screen coordinates from given world coordinates.
+ *
+ * @param aPoint the pointposition in world coordinates.
+ * @return the point position in screen coordinates.
+ */
+ inline VECTOR2D ToScreen( const VECTOR2D& aPoint ) const
+ {
+ return VECTOR2D( worldScreenMatrix * aPoint );
+ }
+
+ /**
+ * @brief Enable/disable cursor.
+ *
+ * @param aCursorEnabled is true if the cursor should be drawn, else false.
+ */
+ inline void SetCursorEnabled( bool aCursorEnabled )
+ {
+ isCursorEnabled = aCursorEnabled;
+ }
+
+ /**
+ * @brief Set the cursor color.
+ *
+ * @param aCursorColor is the color of the cursor.
+ */
+ inline void SetCursorColor( const COLOR4D& aCursorColor )
+ {
+ cursorColor = aCursorColor;
+ }
+
+ /**
+ * @brief Returns the cursor size.
+ *
+ * @return The current cursor size (in pixels).
+ */
+ inline unsigned int GetCursorSize() const
+ {
+ return cursorSize;
+ }
+
+ /**
+ * @brief Set the cursor size.
+ *
+ * @param aCursorSize is the size of the cursor expressed in pixels.
+ */
+ virtual inline void SetCursorSize( unsigned int aCursorSize )
+ {
+ cursorSize = aCursorSize;
+ }
+
+ /**
+ * @brief Draw the cursor.
+ *
+ * @param aCursorPosition is the cursor position in screen coordinates.
+ */
+ virtual void DrawCursor( const VECTOR2D& aCursorPosition ) {};
+
+ /**
+ * @brief Changes the current depth to deeper, so it is possible to draw objects right beneath
+ * other.
+ */
+ inline void AdvanceDepth()
+ {
+ layerDepth -= 0.001;
+ }
+
+ /**
+ * @brief Stores current drawing depth on the depth stack.
+ */
+ inline void PushDepth()
+ {
+ depthStack.push( layerDepth );
+ }
+
+ /**
+ * @brief Restores previously stored drawing depth for the depth stack.
+ */
+ inline void PopDepth()
+ {
+ layerDepth = depthStack.top();
+ depthStack.pop();
+ }
+
+ static const double METRIC_UNIT_LENGTH;
+
+protected:
+ std::stack<double> depthStack; ///< Stored depth values
+ VECTOR2I screenSize; ///< Screen size in screen coordinates
+
+ double worldUnitLength; ///< The unit length of the world coordinates [inch]
+ double screenDPI; ///< The dots per inch of the screen
+ VECTOR2D lookAtPoint; ///< Point to be looked at in world space
+
+ double zoomFactor; ///< The zoom factor
+ MATRIX3x3D worldScreenMatrix; ///< World transformation
+ MATRIX3x3D screenWorldMatrix; ///< Screen transformation
+ double worldScale; ///< The scale factor world->screen
+ double flipX; ///< Flag for X axis flipping
+ double flipY; ///< Flag for Y axis flipping
+
+ double lineWidth; ///< The line width
+
+ bool isFillEnabled; ///< Is filling of graphic objects enabled ?
+ bool isStrokeEnabled; ///< Are the outlines stroked ?
+
+ COLOR4D fillColor; ///< The fill color
+ COLOR4D strokeColor; ///< The color of the outlines
+
+ double layerDepth; ///< The actual layer depth
+ VECTOR2D depthRange; ///< Range of the depth
+
+ // Grid settings
+ bool gridVisibility; ///< Should the grid be shown
+ GRID_STYLE gridStyle; ///< Grid display style
+ VECTOR2D gridSize; ///< The grid size
+ VECTOR2D gridOrigin; ///< The grid origin
+ VECTOR2D gridOffset; ///< The grid offset to compensate cursor position
+ COLOR4D gridColor; ///< Color of the grid
+ int gridTick; ///< Every tick line gets the double width
+ double gridLineWidth; ///< Line width of the grid
+ int gridDrawThreshold; ///< Minimum screen size of the grid (pixels)
+ ///< below which the grid is not drawn
+
+ // Cursor settings
+ bool isCursorEnabled; ///< Is the cursor enabled?
+ COLOR4D cursorColor; ///< Cursor color
+ unsigned int cursorSize; ///< Size of the cursor in pixels
+ VECTOR2D cursorPosition; ///< Current cursor position (world coordinates)
+
+ /// Instance of object that stores information about how to draw texts
+ STROKE_FONT strokeFont;
+
+ /// Compute the scaling factor for the world->screen matrix
+ inline void ComputeWorldScale()
+ {
+ worldScale = screenDPI * worldUnitLength * zoomFactor;
+ }
+
+ /**
+ * @brief Draw a grid line (usually a simplified line function).
+ *
+ * @param aStartPoint is the start point of the line.
+ * @param aEndPoint is the end point of the line.
+ */
+ virtual void drawGridLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint ) {};
+
+ /// Possible depth range
+ static const int MIN_DEPTH;
+ static const int MAX_DEPTH;
+
+ /// Depth level on which the grid is drawn
+ static const int GRID_DEPTH;
+
+};
+} // namespace KIGFX
+
+#endif /* GRAPHICSABSTRACTIONLAYER_H_ */
diff --git a/include/gal/opengl/cached_container.h b/include/gal/opengl/cached_container.h
new file mode 100644
index 0000000..7bfc784
--- /dev/null
+++ b/include/gal/opengl/cached_container.h
@@ -0,0 +1,170 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file cached_container.h
+ * @brief Class to store instances of VERTEX with caching. It allows storing VERTEX objects and
+ * associates them with VERTEX_ITEMs. This leads to a possibility of caching vertices data in the
+ * GPU memory and a fast reuse of that data.
+ */
+
+#ifndef CACHED_CONTAINER_H_
+#define CACHED_CONTAINER_H_
+
+#include <gal/opengl/vertex_container.h>
+#include <map>
+#include <set>
+
+// Debug messages verbosity level
+// #define CACHED_CONTAINER_TEST 1
+
+namespace KIGFX
+{
+class VERTEX_ITEM;
+class SHADER;
+
+class CACHED_CONTAINER : public VERTEX_CONTAINER
+{
+public:
+ CACHED_CONTAINER( unsigned int aSize = defaultInitSize );
+
+ ///> @copydoc VERTEX_CONTAINER::SetItem()
+ virtual void SetItem( VERTEX_ITEM* aItem );
+
+ ///> @copydoc VERTEX_CONTAINER::FinishItem()
+ virtual void FinishItem();
+
+ ///> @copydoc VERTEX_CONTAINER::Allocate()
+ virtual VERTEX* Allocate( unsigned int aSize );
+
+ ///> @copydoc VERTEX_CONTAINER::Delete()
+ virtual void Delete( VERTEX_ITEM* aItem );
+
+ ///> @copydoc VERTEX_CONTAINER::Clear()
+ virtual void Clear();
+
+protected:
+ ///> Maps size of free memory chunks to their offsets
+ typedef std::pair<unsigned int, unsigned int> CHUNK;
+ typedef std::multimap<unsigned int, unsigned int> FREE_CHUNK_MAP;
+
+ /// List of all the stored items
+ typedef std::set<VERTEX_ITEM*> ITEMS;
+
+ ///> Stores size & offset of free chunks.
+ FREE_CHUNK_MAP m_freeChunks;
+
+ ///> Stored VERTEX_ITEMs
+ ITEMS m_items;
+
+ ///> Currently modified item
+ VERTEX_ITEM* m_item;
+
+ ///> Properties of currently modified chunk & item
+ unsigned int m_chunkSize;
+ unsigned int m_chunkOffset;
+ unsigned int m_itemSize;
+
+ /**
+ * Function reallocate()
+ * resizes the chunk that stores the current item to the given size.
+ *
+ * @param aSize is the number of vertices to be stored.
+ * @return offset of the new chunk.
+ */
+ virtual unsigned int reallocate( unsigned int aSize );
+
+ /**
+ * Function defragment()
+ * removes empty spaces between chunks, so after that there is a long continous space
+ * for storing vertices at the and of the container.
+ *
+ * @param aTarget is the already allocated destination for defragmented data. It has to be
+ * at least of the same size as the current container. If left NULL, it will be allocated
+ * inside the defragment() function.
+ * @return false in case of failure (eg. memory shortage)
+ */
+ virtual bool defragment( VERTEX* aTarget = NULL );
+
+ /**
+ * Function mergeFreeChunks()
+ * looks for consecutive free memory chunks and merges them, decreasing fragmentation of
+ * memory.
+ */
+ virtual void mergeFreeChunks();
+
+ /**
+ * Function resizeContainer()
+ *
+ * prepares a bigger container of a given size.
+ * @param aNewSize is the new size of container, expressed in vertices
+ * @return false in case of failure (eg. memory shortage)
+ */
+ virtual bool resizeContainer( unsigned int aNewSize );
+
+ /**
+ * Function getPowerOf2()
+ * returns the nearest power of 2, bigger than aNumber.
+ *
+ * @param aNumber is the number for which we look for a bigger power of 2.
+ */
+ unsigned int getPowerOf2( unsigned int aNumber ) const;
+
+private:
+ /**
+ * Function getChunkSize()
+ * returns size of the given chunk.
+ *
+ * @param aChunk is the chunk.
+ */
+ inline int getChunkSize( const CHUNK& aChunk ) const
+ {
+ return aChunk.first;
+ }
+
+ /**
+ * Function getChunkOffset()
+ * returns offset of the chunk.
+ *
+ * @param aChunk is the chunk.
+ */
+ inline unsigned int getChunkOffset( const CHUNK& aChunk ) const
+ {
+ return aChunk.second;
+ }
+
+ /// Debug & test functions
+#if CACHED_CONTAINER_TEST > 0
+ void showFreeChunks();
+ void showReservedChunks();
+ void test();
+#else
+ inline void showFreeChunks() {}
+ inline void showReservedChunks() {}
+ inline void test() {}
+#endif /* CACHED_CONTAINER_TEST */
+};
+} // namespace KIGFX
+
+#endif /* CACHED_CONTAINER_H_ */
diff --git a/include/gal/opengl/glm/core/_detail.hpp b/include/gal/opengl/glm/core/_detail.hpp
new file mode 100644
index 0000000..e6b42c2
--- /dev/null
+++ b/include/gal/opengl/glm/core/_detail.hpp
@@ -0,0 +1,482 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_detail.hpp
+/// @date 2008-07-24 / 2011-06-14
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_detail
+#define glm_core_detail
+
+#include "setup.hpp"
+#include <cassert>
+#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
+#include <cstdint>
+#endif
+
+namespace glm{
+namespace detail
+{
+ class half;
+
+#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
+ typedef int64_t sint64;
+ typedef uint64_t uint64;
+#elif(GLM_COMPILER & GLM_COMPILER_VC)
+ typedef signed __int64 sint64;
+ typedef unsigned __int64 uint64;
+#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
+ __extension__ typedef signed long long sint64;
+ __extension__ typedef unsigned long long uint64;
+#elif(GLM_COMPILER & GLM_COMPILER_BC)
+ typedef Int64 sint64;
+ typedef Uint64 uint64;
+#else//unknown compiler
+ typedef signed long long sint64;
+ typedef unsigned long long uint64;
+#endif//GLM_COMPILER
+
+ template<bool C>
+ struct If
+ {
+ template<typename F, typename T>
+ static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
+ {
+ return functor(val);
+ }
+ };
+
+ template<>
+ struct If<false>
+ {
+ template<typename F, typename T>
+ static GLM_FUNC_QUALIFIER T apply(F, const T& val)
+ {
+ return val;
+ }
+ };
+
+ //template <typename T>
+ //struct traits
+ //{
+ // static const bool is_signed = false;
+ // static const bool is_float = false;
+ // static const bool is_vector = false;
+ // static const bool is_matrix = false;
+ // static const bool is_genType = false;
+ // static const bool is_genIType = false;
+ // static const bool is_genUType = false;
+ //};
+
+ //template <>
+ //struct traits<half>
+ //{
+ // static const bool is_float = true;
+ // static const bool is_genType = true;
+ //};
+
+ //template <>
+ //struct traits<float>
+ //{
+ // static const bool is_float = true;
+ // static const bool is_genType = true;
+ //};
+
+ //template <>
+ //struct traits<double>
+ //{
+ // static const bool is_float = true;
+ // static const bool is_genType = true;
+ //};
+
+ //template <typename genType>
+ //struct desc
+ //{
+ // typedef genType type;
+ // typedef genType * pointer;
+ // typedef genType const* const_pointer;
+ // typedef genType const *const const_pointer_const;
+ // typedef genType *const pointer_const;
+ // typedef genType & reference;
+ // typedef genType const& const_reference;
+ // typedef genType const& param_type;
+
+ // typedef typename genType::value_type value_type;
+ // typedef typename genType::size_type size_type;
+ // static const typename size_type value_size;
+ //};
+
+ //template <typename genType>
+ //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
+
+ union uif32
+ {
+ GLM_FUNC_QUALIFIER uif32() :
+ i(0)
+ {}
+
+ GLM_FUNC_QUALIFIER uif32(float f) :
+ f(f)
+ {}
+
+ GLM_FUNC_QUALIFIER uif32(unsigned int i) :
+ i(i)
+ {}
+
+ float f;
+ unsigned int i;
+ };
+
+ union uif64
+ {
+ GLM_FUNC_QUALIFIER uif64() :
+ i(0)
+ {}
+
+ GLM_FUNC_QUALIFIER uif64(double f) :
+ f(f)
+ {}
+
+ GLM_FUNC_QUALIFIER uif64(uint64 i) :
+ i(i)
+ {}
+
+ double f;
+ uint64 i;
+ };
+
+ typedef uif32 uif;
+
+ //////////////////
+ // int
+
+ template <typename T>
+ struct is_int
+ {
+ enum is_int_enum
+ {
+ _YES = 0,
+ _NO = 1
+ };
+ };
+
+#define GLM_DETAIL_IS_INT(T) \
+ template <> \
+ struct is_int<T> \
+ { \
+ enum is_int_enum \
+ { \
+ _YES = 1, \
+ _NO = 0 \
+ }; \
+ }
+
+ //////////////////
+ // uint
+
+ template <typename T>
+ struct is_uint
+ {
+ enum is_uint_enum
+ {
+ _YES = 0,
+ _NO = 1
+ };
+ };
+
+#define GLM_DETAIL_IS_UINT(T) \
+ template <> \
+ struct is_uint<T> \
+ { \
+ enum is_uint_enum \
+ { \
+ _YES = 1, \
+ _NO = 0 \
+ }; \
+ }
+
+ //GLM_DETAIL_IS_UINT(unsigned long long)
+
+ //////////////////
+ // float
+
+ template <typename T>
+ struct is_float
+ {
+ enum is_float_enum
+ {
+ _YES = 0,
+ _NO = 1
+ };
+ };
+
+#define GLM_DETAIL_IS_FLOAT(T) \
+ template <> \
+ struct is_float<T> \
+ { \
+ enum is_float_enum \
+ { \
+ _YES = 1, \
+ _NO = 0 \
+ }; \
+ }
+
+ GLM_DETAIL_IS_FLOAT(detail::half);
+ GLM_DETAIL_IS_FLOAT(float);
+ GLM_DETAIL_IS_FLOAT(double);
+ GLM_DETAIL_IS_FLOAT(long double);
+
+ //////////////////
+ // bool
+
+ template <typename T>
+ struct is_bool
+ {
+ enum is_bool_enum
+ {
+ _YES = 0,
+ _NO = 1
+ };
+ };
+
+ template <>
+ struct is_bool<bool>
+ {
+ enum is_bool_enum
+ {
+ _YES = 1,
+ _NO = 0
+ };
+ };
+
+ //////////////////
+ // vector
+
+ template <typename T>
+ struct is_vector
+ {
+ enum is_vector_enum
+ {
+ _YES = 0,
+ _NO = 1
+ };
+ };
+
+# define GLM_DETAIL_IS_VECTOR(TYPE) \
+ template <typename T> \
+ struct is_vector<TYPE<T> > \
+ { \
+ enum is_vector_enum \
+ { \
+ _YES = 1, \
+ _NO = 0 \
+ }; \
+ }
+
+ //////////////////
+ // matrix
+
+ template <typename T>
+ struct is_matrix
+ {
+ enum is_matrix_enum
+ {
+ _YES = 0,
+ _NO = 1
+ };
+ };
+
+#define GLM_DETAIL_IS_MATRIX(T) \
+ template <> \
+ struct is_matrix \
+ { \
+ enum is_matrix_enum \
+ { \
+ _YES = 1, \
+ _NO = 0 \
+ }; \
+ }
+
+ //////////////////
+ // type
+
+ template <typename T>
+ struct type
+ {
+ enum type_enum
+ {
+ is_float = is_float<T>::_YES,
+ is_int = is_int<T>::_YES,
+ is_uint = is_uint<T>::_YES,
+ is_bool = is_bool<T>::_YES
+ };
+ };
+
+ //////////////////
+ // type
+
+ typedef signed char int8;
+ typedef signed short int16;
+ typedef signed int int32;
+ typedef detail::sint64 int64;
+
+ typedef unsigned char uint8;
+ typedef unsigned short uint16;
+ typedef unsigned int uint32;
+ typedef detail::uint64 uint64;
+
+ typedef detail::half float16;
+ typedef float float32;
+ typedef double float64;
+
+ //////////////////
+ // float_or_int_trait
+
+ struct float_or_int_value
+ {
+ enum
+ {
+ GLM_ERROR,
+ GLM_FLOAT,
+ GLM_INT
+ };
+ };
+
+ template <typename T>
+ struct float_or_int_trait
+ {
+ enum{ID = float_or_int_value::GLM_ERROR};
+ };
+
+ template <>
+ struct float_or_int_trait<int8>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<int16>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<int32>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<int64>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<uint8>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<uint16>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<uint32>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<uint64>
+ {
+ enum{ID = float_or_int_value::GLM_INT};
+ };
+
+ template <>
+ struct float_or_int_trait<float16>
+ {
+ enum{ID = float_or_int_value::GLM_FLOAT};
+ };
+
+ template <>
+ struct float_or_int_trait<float32>
+ {
+ enum{ID = float_or_int_value::GLM_FLOAT};
+ };
+
+ template <>
+ struct float_or_int_trait<float64>
+ {
+ enum{ID = float_or_int_value::GLM_FLOAT};
+ };
+
+}//namespace detail
+}//namespace glm
+
+#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
+# define GLM_DEPRECATED __declspec(deprecated)
+# define GLM_ALIGN(x) __declspec(align(x))
+# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
+# define GLM_RESTRICT __declspec(restrict)
+# define GLM_RESTRICT_VAR __restrict
+# define GLM_CONSTEXPR
+#elif(GLM_COMPILER & GLM_COMPILER_INTEL)
+# define GLM_DEPRECATED
+# define GLM_ALIGN(x) __declspec(align(x))
+# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
+# define GLM_RESTRICT
+# define GLM_RESTRICT_VAR __restrict
+# define GLM_CONSTEXPR
+#elif(((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) || (GLM_COMPILER & GLM_COMPILER_CLANG))
+# define GLM_DEPRECATED __attribute__((__deprecated__))
+# define GLM_ALIGN(x) __attribute__((aligned(x)))
+# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
+# if(GLM_COMPILER >= GLM_COMPILER_GCC33)
+# define GLM_RESTRICT __restrict__
+# define GLM_RESTRICT_VAR __restrict__
+# else
+# define GLM_RESTRICT
+# define GLM_RESTRICT_VAR
+# endif
+# define GLM_RESTRICT __restrict__
+# define GLM_RESTRICT_VAR __restrict__
+# if((GLM_COMPILER >= GLM_COMPILER_GCC47) && ((GLM_LANG & GLM_LANG_CXX0X) == GLM_LANG_CXX0X))
+# define GLM_CONSTEXPR constexpr
+# else
+# define GLM_CONSTEXPR
+# endif
+#else
+# define GLM_DEPRECATED
+# define GLM_ALIGN
+# define GLM_ALIGNED_STRUCT(x)
+# define GLM_RESTRICT
+# define GLM_RESTRICT_VAR
+# define GLM_CONSTEXPR
+#endif//GLM_COMPILER
+
+#endif//glm_core_detail
diff --git a/include/gal/opengl/glm/core/_fixes.hpp b/include/gal/opengl/glm/core/_fixes.hpp
new file mode 100644
index 0000000..b4cec5f
--- /dev/null
+++ b/include/gal/opengl/glm/core/_fixes.hpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_fixes.hpp
+/// @date 2011-02-21 / 2011-11-22
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <cmath>
+
+//! Workaround for compatibility with other libraries
+#ifdef max
+#undef max
+#endif
+
+//! Workaround for compatibility with other libraries
+#ifdef min
+#undef min
+#endif
+
+//! Workaround for Android
+#ifdef isnan
+#undef isnan
+#endif
+
+//! Workaround for Android
+#ifdef isinf
+#undef isinf
+#endif
+
+//! Workaround for Chrone Native Client
+#ifdef log2
+#undef log2
+#endif
+
diff --git a/include/gal/opengl/glm/core/_swizzle.hpp b/include/gal/opengl/glm/core/_swizzle.hpp
new file mode 100644
index 0000000..dc06944
--- /dev/null
+++ b/include/gal/opengl/glm/core/_swizzle.hpp
@@ -0,0 +1,861 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_swizzle.hpp
+/// @date 2006-04-20 / 2011-02-16
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_swizzle
+#define glm_core_swizzle
+
+#include "_swizzle_func.hpp"
+
+namespace glm
+{
+ enum comp
+ {
+ X = 0,
+ R = 0,
+ S = 0,
+ Y = 1,
+ G = 1,
+ T = 1,
+ Z = 2,
+ B = 2,
+ P = 2,
+ W = 3,
+ A = 3,
+ Q = 3
+ };
+}//namespace glm
+
+namespace glm{
+namespace detail
+{
+ // Internal class for implementing swizzle operators
+ template <typename T, int N>
+ struct _swizzle_base0
+ {
+ typedef T value_type;
+
+ protected:
+ GLM_FUNC_QUALIFIER value_type& elem (size_t i) { return (reinterpret_cast<value_type*>(_buffer))[i]; }
+ GLM_FUNC_QUALIFIER const value_type& elem (size_t i) const { return (reinterpret_cast<const value_type*>(_buffer))[i]; }
+
+ // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
+ // The size 1 buffer is assumed to aligned to the actual members so that the
+ // elem()
+ char _buffer[1];
+ };
+
+ template <typename T, typename V, int E0, int E1, int E2, int E3, int N>
+ struct _swizzle_base1 : public _swizzle_base0<T,N>
+ {
+ };
+
+ template <typename T, typename V, int E0, int E1>
+ struct _swizzle_base1<T,V,E0,E1,-1,-2,2> : public _swizzle_base0<T,2>
+ {
+ GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1)); }
+ };
+
+ template <typename T, typename V, int E0, int E1, int E2>
+ struct _swizzle_base1<T,V,E0,E1,E2,-1,3> : public _swizzle_base0<T,3>
+ {
+ GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); }
+ };
+
+ template <typename T, typename V, int E0, int E1, int E2, int E3>
+ struct _swizzle_base1<T,V,E0,E1,E2,E3,4> : public _swizzle_base0<T,4>
+ {
+ GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
+ };
+
+ // Internal class for implementing swizzle operators
+ /*
+ Template parameters:
+
+ ValueType = type of scalar values (e.g. float, double)
+ VecType = class the swizzle is applies to (e.g. tvec3<float>)
+ N = number of components in the vector (e.g. 3)
+ E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
+
+ DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
+ containing duplicate elements so that they cannot be used as r-values).
+ */
+ template <typename ValueType, typename VecType, int N, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
+ struct _swizzle_base2 : public _swizzle_base1<ValueType,VecType,E0,E1,E2,E3,N>
+ {
+ typedef VecType vec_type;
+ typedef ValueType value_type;
+
+ GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t)
+ {
+ for (int i = 0; i < N; ++i)
+ (*this)[i] = t;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; }
+ };
+ _apply_op(that, op());
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER void operator -= (const VecType& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER void operator += (const VecType& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER void operator *= (const VecType& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER void operator /= (const VecType& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER value_type& operator[] (size_t i)
+ {
+#ifndef __CUDA_ARCH__
+ static
+#endif
+ const int offset_dst[4] = { E0, E1, E2, E3 };
+ return this->elem(offset_dst[i]);
+ }
+ GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const
+ {
+#ifndef __CUDA_ARCH__
+ static
+#endif
+ const int offset_dst[4] = { E0, E1, E2, E3 };
+ return this->elem(offset_dst[i]);
+ }
+ protected:
+ template <typename T>
+ GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T op)
+ {
+ // Make a copy of the data in this == &that.
+ // The copier should optimize out the copy in cases where the function is
+ // properly inlined and the copy is not necessary.
+ ValueType t[N];
+ for (int i = 0; i < N; ++i)
+ t[i] = that[i];
+ for (int i = 0; i < N; ++i)
+ op( (*this)[i], t[i] );
+ }
+ };
+
+ // Specialization for swizzles containing duplicate elements. These cannot be modified.
+ template <typename ValueType, typename VecType, int N, int E0, int E1, int E2, int E3>
+ struct _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,1> : public _swizzle_base1<ValueType,VecType,E0,E1,E2,E3,N>
+ {
+ typedef VecType vec_type;
+ typedef ValueType value_type;
+
+ struct Stub {};
+ GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; }
+
+ GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const
+ {
+#ifndef __CUDA_ARCH__
+ static
+#endif
+ const int offset_dst[4] = { E0, E1, E2, E3 };
+ return this->elem(offset_dst[i]);
+ }
+ };
+
+ template <int N,typename ValueType, typename VecType, int E0,int E1,int E2,int E3>
+ struct swizzle : public _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)>
+ {
+ typedef _swizzle_base2<ValueType,VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)> base_type;
+
+ using base_type::operator=;
+
+ GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); }
+ };
+
+//
+// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
+//
+#define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, typename V, int E0, int E1, int E2, int E3>
+#define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, typename V, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
+#define _GLM_SWIZZLE_TYPE1 glm::detail::swizzle<N,T,V,E0,E1,E2,E3>
+#define _GLM_SWIZZLE_TYPE2 glm::detail::swizzle<N,T,V,F0,F1,F2,F3>
+
+//
+// Wrapper for a binary operator (e.g. u.yy + v.zy)
+//
+#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
+ _GLM_SWIZZLE_TEMPLATE2 \
+ GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
+ { \
+ return a() OPERAND b(); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \
+ { \
+ return a() OPERAND b; \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return a OPERAND b(); \
+ }
+
+//
+// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
+//
+#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \
+ { \
+ return a() OPERAND b; \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return a OPERAND b(); \
+ }
+
+//
+// Macro for wrapping a function taking one argument (e.g. abs())
+//
+#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \
+ { \
+ return FUNCTION(a()); \
+ }
+
+//
+// Macro for wrapping a function taking two vector arguments (e.g. dot()).
+//
+#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
+ _GLM_SWIZZLE_TEMPLATE2 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
+ { \
+ return FUNCTION(a(), b()); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return FUNCTION(a(), b()); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \
+ { \
+ return FUNCTION(a(), b); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return FUNCTION(a, b()); \
+ }
+
+//
+// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
+//
+#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
+ _GLM_SWIZZLE_TEMPLATE2 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \
+ { \
+ return FUNCTION(a(), b(), c); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
+ { \
+ return FUNCTION(a(), b(), c); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
+ { \
+ return FUNCTION(a(), b, c); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
+ { \
+ return FUNCTION(a, b(), c); \
+ }
+
+}//namespace detail
+}//namespace glm
+
+namespace glm
+{
+ namespace detail
+ {
+ _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
+ _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
+ }
+
+ //
+ // Swizzles are distinct types from the unswizzled type. The below macros will
+ // provide template specializations for the swizzle types for the given functions
+ // so that the compiler does not have any ambiguity to choosing how to handle
+ // the function.
+ //
+ // The alternative is to use the operator()() when calling the function in order
+ // to explicitly convert the swizzled type to the unswizzled type.
+ //
+
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
+
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
+}
+
+#define _GLM_SWIZZLE2_2_MEMBERS(T,P,E0,E1) \
+ struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; };
+
+#define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \
+ struct { glm::detail::swizzle<3,T,P2,0,0,0,-1> E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P2,0,0,1,-1> E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P2,0,1,0,-1> E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P2,0,1,1,-1> E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P2,1,0,0,-1> E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P2,1,0,1,-1> E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P2,1,1,0,-1> E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P2,1,1,1,-1> E1 ## E1 ## E1; };
+
+#define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \
+ struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; };
+
+#define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \
+ struct { glm::detail::swizzle<2,T,P2,0,0,-1,-2> E0 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P2,0,1,-1,-2> E0 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P2,0,2,-1,-2> E0 ## E2; }; \
+ struct { glm::detail::swizzle<2,T,P2,1,0,-1,-2> E1 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P2,1,1,-1,-2> E1 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P2,1,2,-1,-2> E1 ## E2; }; \
+ struct { glm::detail::swizzle<2,T,P2,2,0,-1,-2> E2 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P2,2,1,-1,-2> E2 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P2,2,2,-1,-2> E2 ## E2; };
+
+#define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \
+ struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; };
+
+#define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \
+ struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P2,2,2,2,2> E2 ## E2 ## E2 ## E2; };
+
+#define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \
+ struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P,0,2,-1,-2> E0 ## E2; }; \
+ struct { glm::detail::swizzle<2,T,P,0,3,-1,-2> E0 ## E3; }; \
+ struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P,1,2,-1,-2> E1 ## E2; }; \
+ struct { glm::detail::swizzle<2,T,P,1,3,-1,-2> E1 ## E3; }; \
+ struct { glm::detail::swizzle<2,T,P,2,0,-1,-2> E2 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P,2,1,-1,-2> E2 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P,2,2,-1,-2> E2 ## E2; }; \
+ struct { glm::detail::swizzle<2,T,P,2,3,-1,-2> E2 ## E3; }; \
+ struct { glm::detail::swizzle<2,T,P,3,0,-1,-2> E3 ## E0; }; \
+ struct { glm::detail::swizzle<2,T,P,3,1,-1,-2> E3 ## E1; }; \
+ struct { glm::detail::swizzle<2,T,P,3,2,-1,-2> E3 ## E2; }; \
+ struct { glm::detail::swizzle<2,T,P,3,3,-1,-2> E3 ## E3; };
+
+#define _GLM_SWIZZLE4_3_MEMBERS(T,P,E0,E1,E2,E3) \
+ struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,0,0,3,-1> E0 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,0,1,3,-1> E0 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,0,2,3,-1> E0 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,0,3,0,-1> E0 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,0,3,1,-1> E0 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,0,3,2,-1> E0 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,0,3,3,-1> E0 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,0,3,-1> E1 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,1,3,-1> E1 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,2,3,-1> E1 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,1,3,0,-1> E1 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,1,3,1,-1> E1 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,1,3,2,-1> E1 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,1,3,3,-1> E1 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,0,3,-1> E2 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,1,3,-1> E2 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,2,3,-1> E2 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,2,3,0,-1> E2 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,2,3,1,-1> E2 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,2,3,2,-1> E2 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,2,3,3,-1> E2 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,3,0,0,-1> E3 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,3,0,1,-1> E3 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,3,0,2,-1> E3 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,3,0,3,-1> E3 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,3,1,0,-1> E3 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,3,1,1,-1> E3 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,3,1,2,-1> E3 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,3,1,3,-1> E3 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,3,2,0,-1> E3 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,3,2,1,-1> E3 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,3,2,2,-1> E3 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,3,2,3,-1> E3 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<3,T,P,3,3,0,-1> E3 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<3,T,P,3,3,1,-1> E3 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<3,T,P,3,3,2,-1> E3 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<3,T,P,3,3,3,-1> E3 ## E3 ## E3; };
+
+#define _GLM_SWIZZLE4_4_MEMBERS(T,P,E0,E1,E2,E3) \
+ struct { glm::detail::swizzle<4,T,P,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
+ struct { glm::detail::swizzle<4,T,P,3,3,3,3> E3 ## E3 ## E3 ## E3; };
+
+#endif//glm_core_swizzle
diff --git a/include/gal/opengl/glm/core/_swizzle_func.hpp b/include/gal/opengl/glm/core/_swizzle_func.hpp
new file mode 100644
index 0000000..be66784
--- /dev/null
+++ b/include/gal/opengl/glm/core/_swizzle_func.hpp
@@ -0,0 +1,787 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_swizzle_func.hpp
+/// @date 2011-10-16 / 2011-10-16
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_swizzle_func
+#define glm_core_swizzle_func
+
+#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
+ SWIZZLED_TYPE<TMPL_TYPE> A ## B() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
+ SWIZZLED_TYPE<TMPL_TYPE> A ## B ## C() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
+ SWIZZLED_TYPE<TMPL_TYPE> A ## B ## C ## D() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C, this->D); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
+ template <typename TMPL_TYPE> \
+ SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
+ template <typename TMPL_TYPE> \
+ SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B ## C() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
+ template <typename TMPL_TYPE> \
+ SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE>::A ## B ## C ## D() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE>(this->A, this->B, this->C, this->D); \
+ }
+
+#define GLM_MUTABLE
+
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
+
+//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
+
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
+
+#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q)
+
+//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
+
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
+
+#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
+
+#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p)
+
+//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
+
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
+
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
+
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
+
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
+
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
+
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
+
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q)
+
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
+
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
+
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
+
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p)
+
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
+
+#endif//glm_core_swizzle_func
diff --git a/include/gal/opengl/glm/core/_vectorize.hpp b/include/gal/opengl/glm/core/_vectorize.hpp
new file mode 100644
index 0000000..9984014
--- /dev/null
+++ b/include/gal/opengl/glm/core/_vectorize.hpp
@@ -0,0 +1,159 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/_vectorize.hpp
+/// @date 2011-10-14 / 2011-10-14
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#define VECTORIZE2_VEC(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec2<T> func( \
+ detail::tvec2<T> const & v) \
+ { \
+ return detail::tvec2<T>( \
+ func(v.x), \
+ func(v.y)); \
+ }
+
+#define VECTORIZE3_VEC(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec3<T> func( \
+ detail::tvec3<T> const & v) \
+ { \
+ return detail::tvec3<T>( \
+ func(v.x), \
+ func(v.y), \
+ func(v.z)); \
+ }
+
+#define VECTORIZE4_VEC(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec4<T> func( \
+ detail::tvec4<T> const & v) \
+ { \
+ return detail::tvec4<T>( \
+ func(v.x), \
+ func(v.y), \
+ func(v.z), \
+ func(v.w)); \
+ }
+
+#define VECTORIZE_VEC(func) \
+ VECTORIZE2_VEC(func) \
+ VECTORIZE3_VEC(func) \
+ VECTORIZE4_VEC(func)
+
+#define VECTORIZE2_VEC_SCA(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec2<T> func \
+ ( \
+ detail::tvec2<T> const & x, \
+ typename detail::tvec2<T>::value_type const & y \
+ ) \
+ { \
+ return detail::tvec2<T>( \
+ func(x.x, y), \
+ func(x.y, y)); \
+ }
+
+#define VECTORIZE3_VEC_SCA(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec3<T> func \
+ ( \
+ detail::tvec3<T> const & x, \
+ typename detail::tvec3<T>::value_type const & y \
+ ) \
+ { \
+ return detail::tvec3<T>( \
+ func(x.x, y), \
+ func(x.y, y), \
+ func(x.z, y)); \
+ }
+
+#define VECTORIZE4_VEC_SCA(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec4<T> func \
+ ( \
+ detail::tvec4<T> const & x, \
+ typename detail::tvec4<T>::value_type const & y \
+ ) \
+ { \
+ return detail::tvec4<T>( \
+ func(x.x, y), \
+ func(x.y, y), \
+ func(x.z, y), \
+ func(x.w, y)); \
+ }
+
+#define VECTORIZE_VEC_SCA(func) \
+ VECTORIZE2_VEC_SCA(func) \
+ VECTORIZE3_VEC_SCA(func) \
+ VECTORIZE4_VEC_SCA(func)
+
+#define VECTORIZE2_VEC_VEC(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec2<T> func \
+ ( \
+ detail::tvec2<T> const & x, \
+ detail::tvec2<T> const & y \
+ ) \
+ { \
+ return detail::tvec2<T>( \
+ func(x.x, y.x), \
+ func(x.y, y.y)); \
+ }
+
+#define VECTORIZE3_VEC_VEC(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec3<T> func \
+ ( \
+ detail::tvec3<T> const & x, \
+ detail::tvec3<T> const & y \
+ ) \
+ { \
+ return detail::tvec3<T>( \
+ func(x.x, y.x), \
+ func(x.y, y.y), \
+ func(x.z, y.z)); \
+ }
+
+#define VECTORIZE4_VEC_VEC(func) \
+ template <typename T> \
+ GLM_FUNC_QUALIFIER detail::tvec4<T> func \
+ ( \
+ detail::tvec4<T> const & x, \
+ detail::tvec4<T> const & y \
+ ) \
+ { \
+ return detail::tvec4<T>( \
+ func(x.x, y.x), \
+ func(x.y, y.y), \
+ func(x.z, y.z), \
+ func(x.w, y.w)); \
+ }
+
+#define VECTORIZE_VEC_VEC(func) \
+ VECTORIZE2_VEC_VEC(func) \
+ VECTORIZE3_VEC_VEC(func) \
+ VECTORIZE4_VEC_VEC(func)
diff --git a/include/gal/opengl/glm/core/dummy.cpp b/include/gal/opengl/glm/core/dummy.cpp
new file mode 100644
index 0000000..38fcca0
--- /dev/null
+++ b/include/gal/opengl/glm/core/dummy.cpp
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/dummy.cpp
+/// @date 2011-01-19 / 2011-06-15
+/// @author Christophe Riccio
+///
+/// GLM is a header only library. There is nothing to compile.
+/// dummy.cpp exist only a wordaround for CMake file.
+///////////////////////////////////////////////////////////////////////////////////
+
+#define GLM_MESSAGES
+#include "../glm.hpp"
+
+//#error "GLM is a header only library"
+
+int main()
+{
+
+}
diff --git a/include/gal/opengl/glm/core/func_common.hpp b/include/gal/opengl/glm/core/func_common.hpp
new file mode 100644
index 0000000..fcf7eb7
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_common.hpp
@@ -0,0 +1,430 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_common.hpp
+/// @date 2008-03-08 / 2010-01-26
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+///
+/// @defgroup core_func_common Common functions
+/// @ingroup core
+///
+/// These all operate component-wise. The description is per component.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_CORE_func_common
+#define GLM_CORE_func_common GLM_VERSION
+
+#include "_fixes.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_common
+ /// @{
+
+ /// Returns x if x >= 0; otherwise, it returns -x.
+ ///
+ /// @tparam genType floating-point or signed integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType abs(genType const & x);
+
+ /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
+ ///
+ /// @tparam genType Floating-point or signed integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType sign(genType const & x);
+
+ /// Returns a value equal to the nearest integer that is less then or equal to x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType floor(genType const & x);
+
+ /// Returns a value equal to the nearest integer to x
+ /// whose absolute value is not larger than the absolute value of x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType trunc(genType const & x);
+
+ /// Returns a value equal to the nearest integer to x.
+ /// The fraction 0.5 will round in a direction chosen by the
+ /// implementation, presumably the direction that is fastest.
+ /// This includes the possibility that round(x) returns the
+ /// same value as roundEven(x) for all values of x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType round(genType const & x);
+
+ /// Returns a value equal to the nearest integer to x.
+ /// A fractional part of 0.5 will round toward the nearest even
+ /// integer. (Both 3.5 and 4.5 for x will return 4.0.)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ /// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType roundEven(genType const & x);
+
+ /// Returns a value equal to the nearest integer
+ /// that is greater than or equal to x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType ceil(genType const & x);
+
+ /// Return x - floor(x).
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType fract(genType const & x);
+
+ /// Modulus. Returns x - y * floor(x / y)
+ /// for each component in x using the floating point value y.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType mod(
+ genType const & x,
+ genType const & y);
+
+ /// Modulus. Returns x - y * floor(x / y)
+ /// for each component in x using the floating point value y.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType mod(
+ genType const & x,
+ typename genType::value_type const & y);
+
+ /// Returns the fractional part of x and sets i to the integer
+ /// part (as a whole number floating point value). Both the
+ /// return value and the output parameter will have the same
+ /// sign as x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType modf(
+ genType const & x,
+ genType & i);
+
+ /// Returns y if y < x; otherwise, it returns x.
+ ///
+ /// @tparam genType Floating-point or integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType min(
+ genType const & x,
+ genType const & y);
+
+ template <typename genType>
+ GLM_FUNC_DECL genType min(
+ genType const & x,
+ typename genType::value_type const & y);
+
+ /// Returns y if x < y; otherwise, it returns x.
+ ///
+ /// @tparam genType Floating-point or integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType max(
+ genType const & x,
+ genType const & y);
+
+ template <typename genType>
+ GLM_FUNC_DECL genType max(
+ genType const & x,
+ typename genType::value_type const & y);
+
+ /// Returns min(max(x, minVal), maxVal) for each component in x
+ /// using the floating-point values minVal and maxVal.
+ ///
+ /// @tparam genType Floating-point or integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType clamp(
+ genType const & x,
+ genType const & minVal,
+ genType const & maxVal);
+
+ template <typename genType>
+ GLM_FUNC_DECL genType clamp(
+ genType const & x,
+ typename genType::value_type const & minVal,
+ typename genType::value_type const & maxVal);
+
+ /// If genTypeU is a floating scalar or vector:
+ /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of
+ /// x and y using the floating-point value a.
+ /// The value for a is not restricted to the range [0, 1].
+ ///
+ /// If genTypeU is a boolean scalar or vector:
+ /// Selects which vector each returned component comes
+ /// from. For a component of <a> that is false, the
+ /// corresponding component of x is returned. For a
+ /// component of a that is true, the corresponding
+ /// component of y is returned. Components of x and y that
+ /// are not selected are allowed to be invalid floating point
+ /// values and will have no effect on the results. Thus, this
+ /// provides different functionality than
+ /// genType mix(genType x, genType y, genType(a))
+ /// where a is a Boolean vector.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ ///
+ /// @param[in] x Value to interpolate.
+ /// @param[in] y Value to interpolate.
+ /// @param[in] a Interpolant.
+ ///
+ /// @tparam genTypeT Floating point scalar or vector.
+ /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
+ ///
+ /// @code
+ /// #include <glm/glm.hpp>
+ /// ...
+ /// float a;
+ /// bool b;
+ /// glm::dvec3 e;
+ /// glm::dvec3 f;
+ /// glm::vec4 g;
+ /// glm::vec4 h;
+ /// ...
+ /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
+ /// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
+ /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
+ /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
+ /// @endcode
+ template <typename genTypeT, typename genTypeU>
+ GLM_FUNC_DECL genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a);
+
+ //! Returns 0.0 if x < edge, otherwise it returns 1.0.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType step(
+ genType const & edge,
+ genType const & x);
+
+ template <typename genType>
+ GLM_FUNC_DECL genType step(
+ typename genType::value_type const & edge,
+ genType const & x);
+
+ /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
+ /// performs smooth Hermite interpolation between 0 and 1
+ /// when edge0 < x < edge1. This is useful in cases where
+ /// you would want a threshold function with a smooth
+ /// transition. This is equivalent to:
+ /// genType t;
+ /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);
+ /// return t * t * (3 - 2 * t);
+ /// Results are undefined if edge0 >= edge1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType smoothstep(
+ genType const & edge0,
+ genType const & edge1,
+ genType const & x);
+
+ template <typename genType>
+ GLM_FUNC_DECL genType smoothstep(
+ typename genType::value_type const & edge0,
+ typename genType::value_type const & edge1,
+ genType const & x);
+
+ /// Returns true if x holds a NaN (not a number)
+ /// representation in the underlying implementation's set of
+ /// floating point representations. Returns false otherwise,
+ /// including for implementations with no NaN
+ /// representations.
+ ///
+ /// /!\ When using compiler fast math, this function may fail.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::bool_type isnan(genType const & x);
+
+ /// Returns true if x holds a positive infinity or negative
+ /// infinity representation in the underlying implementation's
+ /// set of floating point representations. Returns false
+ /// otherwise, including for implementations with no infinity
+ /// representations.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::bool_type isinf(genType const & x);
+
+ /// Returns a signed integer value representing
+ /// the encoding of a floating-point value. The floatingpoint
+ /// value's bit-level representation is preserved.
+ ///
+ /// @tparam genType Single-precision floating-point scalar or vector types.
+ /// @tparam genIType Signed integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType, typename genIType>
+ GLM_FUNC_DECL genIType floatBitsToInt(genType const & value);
+
+ /// Returns a unsigned integer value representing
+ /// the encoding of a floating-point value. The floatingpoint
+ /// value's bit-level representation is preserved.
+ ///
+ /// @tparam genType Single-precision floating-point scalar or vector types.
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType, typename genUType>
+ GLM_FUNC_DECL genUType floatBitsToUint(genType const & value);
+
+ /// Returns a floating-point value corresponding to a signed
+ /// integer encoding of a floating-point value.
+ /// If an inf or NaN is passed in, it will not signal, and the
+ /// resulting floating point value is unspecified. Otherwise,
+ /// the bit-level representation is preserved.
+ ///
+ /// @tparam genType Single-precision floating-point scalar or vector types.
+ /// @tparam genIType Signed integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ ///
+ /// @todo Clarify this declaration, we don't need to actually specify the return type
+ template <typename genType, typename genIType>
+ GLM_FUNC_DECL genType intBitsToFloat(genIType const & value);
+
+ /// Returns a floating-point value corresponding to a
+ /// unsigned integer encoding of a floating-point value.
+ /// If an inf or NaN is passed in, it will not signal, and the
+ /// resulting floating point value is unspecified. Otherwise,
+ /// the bit-level representation is preserved.
+ ///
+ /// @tparam genType Single-precision floating-point scalar or vector types.
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ ///
+ /// @todo Clarify this declaration, we don't need to actually specify the return type
+ template <typename genType, typename genUType>
+ GLM_FUNC_DECL genType uintBitsToFloat(genUType const & value);
+
+ /// Computes and returns a * b + c.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c);
+
+ /// Splits x into a floating-point significand in the range
+ /// [0.5, 1.0) and an integral exponent of two, such that:
+ /// x = significand * exp(2, exponent)
+ ///
+ /// The significand is returned by the function and the
+ /// exponent is returned in the parameter exp. For a
+ /// floating-point value of zero, the significant and exponent
+ /// are both zero. For a floating-point value that is an
+ /// infinity or is not a number, the results are undefined.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType, typename genIType>
+ GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp);
+
+ /// Builds a floating-point number from x and the
+ /// corresponding integral exponent of two in exp, returning:
+ /// significand * exp(2, exponent)
+ ///
+ /// If this product is too large to be represented in the
+ /// floating-point type, the result is undefined.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType, typename genIType>
+ GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp);
+
+ /// @}
+}//namespace glm
+
+#include "func_common.inl"
+
+#endif//GLM_CORE_func_common
diff --git a/include/gal/opengl/glm/core/func_common.inl b/include/gal/opengl/glm/core/func_common.inl
new file mode 100644
index 0000000..1c0d9df
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_common.inl
@@ -0,0 +1,1226 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_common.inl
+/// @date 2008-08-03 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename genFIType, bool /*signed*/>
+ struct Abs_
+ {};
+
+ template <typename genFIType>
+ struct Abs_<genFIType, true>
+ {
+ GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x)
+ {
+ GLM_STATIC_ASSERT(
+ detail::type<genFIType>::is_float ||
+ detail::type<genFIType>::is_int, "'abs' only accept floating-point and integer inputs");
+ return x >= genFIType(0) ? x : -x;
+ // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;
+ }
+ };
+
+ template <typename genFIType>
+ struct Abs_<genFIType, false>
+ {
+ GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x)
+ {
+ GLM_STATIC_ASSERT(
+ detail::type<genFIType>::is_uint, "'abs' only accept floating-point and integer inputs");
+ return x;
+ }
+ };
+}//namespace detail
+
+ // abs
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType abs
+ (
+ genFIType const & x
+ )
+ {
+ return detail::Abs_<genFIType, std::numeric_limits<genFIType>::is_signed>::get(x);
+ }
+
+ VECTORIZE_VEC(abs)
+
+ // sign
+ //Try something like based on x >> 31 to get the sign bit
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign
+ (
+ genFIType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(
+ detail::type<genFIType>::is_float ||
+ detail::type<genFIType>::is_int, "'sign' only accept signed inputs");
+
+ genFIType result;
+ if(x > genFIType(0))
+ result = genFIType(1);
+ else if(x < genFIType(0))
+ result = genFIType(-1);
+ else
+ result = genFIType(0);
+ return result;
+ }
+
+ VECTORIZE_VEC(sign)
+
+ // floor
+ template <>
+ GLM_FUNC_QUALIFIER detail::half floor<detail::half>(detail::half const & x)
+ {
+ return detail::half(::std::floor(float(x)));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType floor(genType const & x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'floor' only accept floating-point inputs");
+
+ return ::std::floor(x);
+ }
+
+ VECTORIZE_VEC(floor)
+
+ // trunc
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType trunc(genType const & x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'trunc' only accept floating-point inputs");
+ return x < 0 ? -floor(-x) : floor(x);
+ }
+
+ VECTORIZE_VEC(trunc)
+
+ // round
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType round(genType const& x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'round' only accept floating-point inputs");
+
+ if(x < 0)
+ return genType(int(x - genType(0.5)));
+ return genType(int(x + genType(0.5)));
+ }
+
+ VECTORIZE_VEC(round)
+
+/*
+ // roundEven
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType roundEven(genType const& x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'roundEven' only accept floating-point inputs");
+
+ return genType(int(x + genType(int(x) % 2)));
+ }
+*/
+
+ // roundEven
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType roundEven(genType const & x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'roundEven' only accept floating-point inputs");
+
+ int Integer = int(x);
+ genType IntegerPart = genType(Integer);
+ genType FractionalPart = fract(x);
+
+ if(FractionalPart > genType(0.5) || FractionalPart < genType(0.5))
+ {
+ return round(x);
+ }
+ else if((Integer % 2) == 0)
+ {
+ return IntegerPart;
+ }
+ else if(x <= genType(0)) // Work around...
+ {
+ return IntegerPart - 1;
+ }
+ else
+ {
+ return IntegerPart + 1;
+ }
+ //else // Bug on MinGW 4.5.2
+ //{
+ // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0));
+ //}
+ }
+
+ VECTORIZE_VEC(roundEven)
+
+ // ceil
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ceil(genType const & x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'ceil' only accept floating-point inputs");
+
+ return ::std::ceil(x);
+ }
+
+ VECTORIZE_VEC(ceil)
+
+ // fract
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fract
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'fract' only accept floating-point inputs");
+
+ return x - ::std::floor(x);
+ }
+
+ VECTORIZE_VEC(fract)
+
+ // mod
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType mod
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'mod' only accept floating-point inputs");
+
+ return x - y * floor(x / y);
+ }
+
+ VECTORIZE_VEC_SCA(mod)
+ VECTORIZE_VEC_VEC(mod)
+
+ // modf
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType modf
+ (
+ genType const & x,
+ genType & i
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'modf' only accept floating-point inputs");
+
+ return std::modf(x, &i);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> modf
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> & i
+ )
+ {
+ return detail::tvec2<valType>(
+ modf(x.x, i.x),
+ modf(x.y, i.y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> modf
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> & i
+ )
+ {
+ return detail::tvec3<valType>(
+ modf(x.x, i.x),
+ modf(x.y, i.y),
+ modf(x.z, i.z));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> modf
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> & i
+ )
+ {
+ return detail::tvec4<valType>(
+ modf(x.x, i.x),
+ modf(x.y, i.y),
+ modf(x.z, i.z),
+ modf(x.w, i.w));
+ }
+
+ //// Only valid if (INT_MIN <= x-y <= INT_MAX)
+ //// min(x,y)
+ //r = y + ((x - y) & ((x - y) >> (sizeof(int) *
+ //CHAR_BIT - 1)));
+ //// max(x,y)
+ //r = x - ((x - y) & ((x - y) >> (sizeof(int) *
+ //CHAR_BIT - 1)));
+
+ // min
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType min
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(
+ detail::type<genType>::is_float ||
+ detail::type<genType>::is_int ||
+ detail::type<genType>::is_uint, "'min' only accept numbers");
+
+ return x < y ? x : y;
+ }
+
+ VECTORIZE_VEC_SCA(min)
+ VECTORIZE_VEC_VEC(min)
+
+ // max
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType max
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(
+ detail::type<genType>::is_float ||
+ detail::type<genType>::is_int ||
+ detail::type<genType>::is_uint, "'max' only accept numbers");
+
+ return x > y ? x : y;
+ }
+
+ VECTORIZE_VEC_SCA(max)
+ VECTORIZE_VEC_VEC(max)
+
+ // clamp
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType clamp
+ (
+ valType const & x,
+ valType const & minVal,
+ valType const & maxVal
+ )
+ {
+ GLM_STATIC_ASSERT(
+ detail::type<valType>::is_float ||
+ detail::type<valType>::is_int ||
+ detail::type<valType>::is_uint, "'clamp' only accept numbers");
+
+ return min(maxVal, max(minVal, x));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> clamp
+ (
+ detail::tvec2<T> const & x,
+ typename detail::tvec2<T>::value_type const & minVal,
+ typename detail::tvec2<T>::value_type const & maxVal
+ )
+ {
+ return detail::tvec2<T>(
+ clamp(x.x, minVal, maxVal),
+ clamp(x.y, minVal, maxVal));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> clamp
+ (
+ detail::tvec3<T> const & x,
+ typename detail::tvec3<T>::value_type const & minVal,
+ typename detail::tvec3<T>::value_type const & maxVal
+ )
+ {
+ return detail::tvec3<T>(
+ clamp(x.x, minVal, maxVal),
+ clamp(x.y, minVal, maxVal),
+ clamp(x.z, minVal, maxVal));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> clamp
+ (
+ detail::tvec4<T> const & x,
+ typename detail::tvec4<T>::value_type const & minVal,
+ typename detail::tvec4<T>::value_type const & maxVal
+ )
+ {
+ return detail::tvec4<T>(
+ clamp(x.x, minVal, maxVal),
+ clamp(x.y, minVal, maxVal),
+ clamp(x.z, minVal, maxVal),
+ clamp(x.w, minVal, maxVal));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> clamp
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & minVal,
+ detail::tvec2<T> const & maxVal
+ )
+ {
+ return detail::tvec2<T>(
+ clamp(x.x, minVal.x, maxVal.x),
+ clamp(x.y, minVal.y, maxVal.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> clamp
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & minVal,
+ detail::tvec3<T> const & maxVal
+ )
+ {
+ return detail::tvec3<T>(
+ clamp(x.x, minVal.x, maxVal.x),
+ clamp(x.y, minVal.y, maxVal.y),
+ clamp(x.z, minVal.z, maxVal.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> clamp
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & minVal,
+ detail::tvec4<T> const & maxVal
+ )
+ {
+ return detail::tvec4<T>(
+ clamp(x.x, minVal.x, maxVal.x),
+ clamp(x.y, minVal.y, maxVal.y),
+ clamp(x.z, minVal.z, maxVal.z),
+ clamp(x.w, minVal.w, maxVal.w));
+ }
+
+ // mix
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType mix
+ (
+ genType const & x,
+ genType const & y,
+ genType const & a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float , "'genType' is not floating-point type");
+
+ return x + a * (y - x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> mix
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y,
+ valType const & a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<valType>::is_float , "'genType' is not floating-point type");
+
+ return x + a * (y - x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> mix
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ valType const & a
+ )
+ {
+ return x + a * (y - x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> mix
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y,
+ valType const & a
+ )
+ {
+ return x + a * (y - x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> mix
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y,
+ detail::tvec2<valType> const & a
+ )
+ {
+ return x + a * (y - x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> mix
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ detail::tvec3<valType> const & a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<valType>::is_float , "'genType' is not floating-point type");
+
+ return x + a * (y - x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> mix
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y,
+ detail::tvec4<valType> const & a
+ )
+ {
+ return x + a * (y - x);
+ }
+
+ //template <typename genTypeT>
+ //GLM_FUNC_QUALIFIER genTypeT mix
+ //(
+ // genTypeT const & x,
+ // genTypeT const & y,
+ // float const & a
+ //)
+ //{
+ // // It could be a vector too
+ // //GLM_STATIC_ASSERT(
+ // // detail::type<genTypeT>::is_float &&
+ // // detail::type<genTypeU>::is_float);
+
+ // return x + a * (y - x);
+ //}
+
+ template <>
+ GLM_FUNC_QUALIFIER float mix
+ (
+ float const & x,
+ float const & y,
+ bool const & a
+ )
+ {
+ return a ? y : x;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double mix
+ (
+ double const & x,
+ double const & y,
+ bool const & a
+ )
+ {
+ return a ? y : x;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> mix
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y,
+ bool a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
+
+ return a ? y : x;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> mix
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ bool a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
+
+ return a ? y : x;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> mix
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y,
+ bool a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
+
+ return a ? y : x;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> mix
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y,
+ typename detail::tvec2<T>::bool_type a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
+
+ detail::tvec2<T> result;
+ for
+ (
+ typename detail::tvec2<T>::size_type i = 0;
+ i < x.length(); ++i
+ )
+ {
+ result[i] = a[i] ? y[i] : x[i];
+ }
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> mix
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ typename detail::tvec3<T>::bool_type a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
+
+ detail::tvec3<T> result;
+ for
+ (
+ typename detail::tvec3<T>::size_type i = 0;
+ i < x.length(); ++i
+ )
+ {
+ result[i] = a[i] ? y[i] : x[i];
+ }
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> mix
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y,
+ typename detail::tvec4<T>::bool_type a
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'mix' only accept floating-point inputs");
+
+ detail::tvec4<T> result;
+ for
+ (
+ typename detail::tvec4<T>::size_type i = 0;
+ i < x.length(); ++i
+ )
+ {
+ result[i] = a[i] ? y[i] : x[i];
+ }
+ return result;
+ }
+
+ // step
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType step
+ (
+ genType const & edge,
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'step' only accept floating-point inputs");
+
+ return x < edge ? genType(0) : genType(1);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> step
+ (
+ typename detail::tvec2<T>::value_type const & edge,
+ detail::tvec2<T> const & x
+ )
+ {
+ return detail::tvec2<T>(
+ x.x < edge ? T(0) : T(1),
+ x.y < edge ? T(0) : T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> step
+ (
+ typename detail::tvec3<T>::value_type const & edge,
+ detail::tvec3<T> const & x
+ )
+ {
+ return detail::tvec3<T>(
+ x.x < edge ? T(0) : T(1),
+ x.y < edge ? T(0) : T(1),
+ x.z < edge ? T(0) : T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> step
+ (
+ typename detail::tvec4<T>::value_type const & edge,
+ detail::tvec4<T> const & x
+ )
+ {
+ return detail::tvec4<T>(
+ x.x < edge ? T(0) : T(1),
+ x.y < edge ? T(0) : T(1),
+ x.z < edge ? T(0) : T(1),
+ x.w < edge ? T(0) : T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> step
+ (
+ detail::tvec2<T> const & edge,
+ detail::tvec2<T> const & x
+ )
+ {
+ return detail::tvec2<T>(
+ x.x < edge.x ? T(0) : T(1),
+ x.y < edge.y ? T(0) : T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> step
+ (
+ detail::tvec3<T> const & edge,
+ detail::tvec3<T> const & x
+ )
+ {
+ return detail::tvec3<T>(
+ x.x < edge.x ? T(0) : T(1),
+ x.y < edge.y ? T(0) : T(1),
+ x.z < edge.z ? T(0) : T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> step
+ (
+ detail::tvec4<T> const & edge,
+ detail::tvec4<T> const & x
+ )
+ {
+ return detail::tvec4<T>(
+ x.x < edge.x ? T(0) : T(1),
+ x.y < edge.y ? T(0) : T(1),
+ x.z < edge.z ? T(0) : T(1),
+ x.w < edge.w ? T(0) : T(1));
+ }
+
+ // smoothstep
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType smoothstep
+ (
+ genType const & edge0,
+ genType const & edge1,
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'smoothstep' only accept floating-point inputs");
+
+ genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1));
+ return tmp * tmp * (genType(3) - genType(2) * tmp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> smoothstep
+ (
+ typename detail::tvec2<T>::value_type const & edge0,
+ typename detail::tvec2<T>::value_type const & edge1,
+ detail::tvec2<T> const & x
+ )
+ {
+ return detail::tvec2<T>(
+ smoothstep(edge0, edge1, x.x),
+ smoothstep(edge0, edge1, x.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> smoothstep
+ (
+ typename detail::tvec3<T>::value_type const & edge0,
+ typename detail::tvec3<T>::value_type const & edge1,
+ detail::tvec3<T> const & x
+ )
+ {
+ return detail::tvec3<T>(
+ smoothstep(edge0, edge1, x.x),
+ smoothstep(edge0, edge1, x.y),
+ smoothstep(edge0, edge1, x.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> smoothstep
+ (
+ typename detail::tvec4<T>::value_type const & edge0,
+ typename detail::tvec4<T>::value_type const & edge1,
+ detail::tvec4<T> const & x
+ )
+ {
+ return detail::tvec4<T>(
+ smoothstep(edge0, edge1, x.x),
+ smoothstep(edge0, edge1, x.y),
+ smoothstep(edge0, edge1, x.z),
+ smoothstep(edge0, edge1, x.w));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> smoothstep
+ (
+ detail::tvec2<T> const & edge0,
+ detail::tvec2<T> const & edge1,
+ detail::tvec2<T> const & x
+ )
+ {
+ return detail::tvec2<T>(
+ smoothstep(edge0.x, edge1.x, x.x),
+ smoothstep(edge0.y, edge1.y, x.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> smoothstep
+ (
+ detail::tvec3<T> const & edge0,
+ detail::tvec3<T> const & edge1,
+ detail::tvec3<T> const & x
+ )
+ {
+ return detail::tvec3<T>(
+ smoothstep(edge0.x, edge1.x, x.x),
+ smoothstep(edge0.y, edge1.y, x.y),
+ smoothstep(edge0.z, edge1.z, x.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> smoothstep
+ (
+ detail::tvec4<T> const & edge0,
+ detail::tvec4<T> const & edge1,
+ detail::tvec4<T> const & x
+ )
+ {
+ return detail::tvec4<T>(
+ smoothstep(edge0.x, edge1.x, x.x),
+ smoothstep(edge0.y, edge1.y, x.y),
+ smoothstep(edge0.z, edge1.z, x.z),
+ smoothstep(edge0.w, edge1.w, x.w));
+ }
+
+ // TODO: Not working on MinGW...
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isnan(genType const & x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'isnan' only accept floating-point inputs");
+
+# if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL))
+ return _isnan(x) != 0;
+# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG))
+# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return _isnan(x) != 0;
+# else
+ return std::isnan(x);
+# endif
+# elif(GLM_COMPILER & GLM_COMPILER_CUDA)
+ return isnan(x) != 0;
+# else
+ return std::isnan(x);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec2<T>::bool_type isnan
+ (
+ detail::tvec2<T> const & x
+ )
+ {
+ return typename detail::tvec2<T>::bool_type(
+ isnan(x.x),
+ isnan(x.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec3<T>::bool_type isnan
+ (
+ detail::tvec3<T> const & x
+ )
+ {
+ return typename detail::tvec3<T>::bool_type(
+ isnan(x.x),
+ isnan(x.y),
+ isnan(x.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec4<T>::bool_type isnan
+ (
+ detail::tvec4<T> const & x
+ )
+ {
+ return typename detail::tvec4<T>::bool_type(
+ isnan(x.x),
+ isnan(x.y),
+ isnan(x.z),
+ isnan(x.w));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isinf(
+ genType const & x)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'isinf' only accept floating-point inputs");
+
+# if(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC))
+ return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF;
+# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG))
+# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return _isinf(x) != 0;
+# else
+ return std::isinf(x);
+# endif
+# elif(GLM_COMPILER & GLM_COMPILER_CUDA)
+ // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab
+ return isinf(double(x)) != 0;
+# else
+ return std::isinf(x);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec2<T>::bool_type isinf
+ (
+ detail::tvec2<T> const & x
+ )
+ {
+ return typename detail::tvec2<T>::bool_type(
+ isinf(x.x),
+ isinf(x.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec3<T>::bool_type isinf
+ (
+ detail::tvec3<T> const & x
+ )
+ {
+ return typename detail::tvec3<T>::bool_type(
+ isinf(x.x),
+ isinf(x.y),
+ isinf(x.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec4<T>::bool_type isinf
+ (
+ detail::tvec4<T> const & x
+ )
+ {
+ return typename detail::tvec4<T>::bool_type(
+ isinf(x.x),
+ isinf(x.y),
+ isinf(x.z),
+ isinf(x.w));
+ }
+
+ GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value)
+ {
+ union
+ {
+ float f;
+ int i;
+ } fi;
+
+ fi.f = value;
+ return fi.i;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<int> floatBitsToInt
+ (
+ detail::tvec2<float> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ floatBitsToInt(value.x),
+ floatBitsToInt(value.y));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec3<int> floatBitsToInt
+ (
+ detail::tvec3<float> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ floatBitsToInt(value.x),
+ floatBitsToInt(value.y),
+ floatBitsToInt(value.z));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<int> floatBitsToInt
+ (
+ detail::tvec4<float> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ floatBitsToInt(value.x),
+ floatBitsToInt(value.y),
+ floatBitsToInt(value.z),
+ floatBitsToInt(value.w));
+ }
+
+ GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value)
+ {
+ union
+ {
+ float f;
+ uint u;
+ } fu;
+
+ fu.f = value;
+ return fu.u;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<uint> floatBitsToUint
+ (
+ detail::tvec2<float> const & value
+ )
+ {
+ return detail::tvec2<uint>(
+ floatBitsToUint(value.x),
+ floatBitsToUint(value.y));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec3<uint> floatBitsToUint
+ (
+ detail::tvec3<float> const & value
+ )
+ {
+ return detail::tvec3<uint>(
+ floatBitsToUint(value.x),
+ floatBitsToUint(value.y),
+ floatBitsToUint(value.z));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<uint> floatBitsToUint
+ (
+ detail::tvec4<float> const & value
+ )
+ {
+ return detail::tvec4<uint>(
+ floatBitsToUint(value.x),
+ floatBitsToUint(value.y),
+ floatBitsToUint(value.z),
+ floatBitsToUint(value.w));
+ }
+
+ GLM_FUNC_QUALIFIER float intBitsToFloat(int const & value)
+ {
+ union
+ {
+ float f;
+ int i;
+ } fi;
+
+ fi.i = value;
+ return fi.f;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<float> intBitsToFloat
+
+ (
+ detail::tvec2<int> const & value
+ )
+ {
+ return detail::tvec2<float>(
+ intBitsToFloat(value.x),
+ intBitsToFloat(value.y));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec3<float> intBitsToFloat
+ (
+ detail::tvec3<int> const & value
+ )
+ {
+ return detail::tvec3<float>(
+ intBitsToFloat(value.x),
+ intBitsToFloat(value.y),
+ intBitsToFloat(value.z));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<float> intBitsToFloat
+ (
+ detail::tvec4<int> const & value
+ )
+ {
+ return detail::tvec4<float>(
+ intBitsToFloat(value.x),
+ intBitsToFloat(value.y),
+ intBitsToFloat(value.z),
+ intBitsToFloat(value.w));
+ }
+
+ GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value)
+ {
+ union
+ {
+ float f;
+ uint u;
+ } fu;
+
+ fu.u = value;
+ return fu.f;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<float> uintBitsToFloat
+ (
+ detail::tvec2<uint> const & value
+ )
+ {
+ return detail::tvec2<float>(
+ uintBitsToFloat(value.x),
+ uintBitsToFloat(value.y));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec3<float> uintBitsToFloat
+ (
+ detail::tvec3<uint> const & value
+ )
+ {
+ return detail::tvec3<float>(
+ uintBitsToFloat(value.x),
+ uintBitsToFloat(value.y),
+ uintBitsToFloat(value.z));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<float> uintBitsToFloat
+ (
+ detail::tvec4<uint> const & value
+ )
+ {
+ return detail::tvec4<float>(
+ uintBitsToFloat(value.x),
+ uintBitsToFloat(value.y),
+ uintBitsToFloat(value.z),
+ uintBitsToFloat(value.w));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fma
+ (
+ genType const & a,
+ genType const & b,
+ genType const & c
+ )
+ {
+ return a * b + c;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType frexp
+ (
+ genType const & x,
+ int & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> frexp
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<int> & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> frexp
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<int> & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> frexp
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<int> & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ldexp
+ (
+ genType const & x,
+ int const & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> ldexp
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<int> const & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> ldexp
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<int> const & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> ldexp
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<int> const & exp
+ )
+ {
+ return std::frexp(x, exp);
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_exponential.hpp b/include/gal/opengl/glm/core/func_exponential.hpp
new file mode 100644
index 0000000..dc76fcb
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_exponential.hpp
@@ -0,0 +1,123 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_exponential.hpp
+/// @date 2008-08-08 / 2011-06-14
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+///
+/// @defgroup core_func_exponential Exponential functions
+/// @ingroup core
+///
+/// These all operate component-wise. The description is per component.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_func_exponential
+#define glm_core_func_exponential GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_exponential
+ /// @{
+
+ /// Returns 'base' raised to the power 'exponent'.
+ ///
+ /// @param base Floating point value. pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
+ /// @param exponent Floating point value representing the 'exponent'.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType pow(genType const & base, genType const & exponent);
+
+ /// Returns the natural exponentiation of x, i.e., e^x.
+ ///
+ /// @param x exp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType exp(genType const & x);
+
+ /// Returns the natural logarithm of x, i.e.,
+ /// returns the value y which satisfies the equation x = e^y.
+ /// Results are undefined if x <= 0.
+ ///
+ /// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType log(genType const & x);
+
+ /// Returns 2 raised to the x power.
+ ///
+ /// @param x exp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType exp2(genType const & x);
+
+ /// Returns the base 2 log of x, i.e., returns the value y,
+ /// which satisfies the equation x = 2 ^ y.
+ ///
+ /// @param x log2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType log2(genType const & x);
+
+ /// Returns the positive square root of x.
+ ///
+ /// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType sqrt(genType const & x);
+
+ /// Returns the reciprocal of the positive square root of x.
+ ///
+ /// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType inversesqrt(genType const & x);
+
+ /// @}
+}//namespace glm
+
+#include "func_exponential.inl"
+
+#endif//glm_core_func_exponential
diff --git a/include/gal/opengl/glm/core/func_exponential.inl b/include/gal/opengl/glm/core/func_exponential.inl
new file mode 100644
index 0000000..1b08786
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_exponential.inl
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_exponential.inl
+/// @date 2008-08-03 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // pow
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'pow' only accept floating-point input");
+
+ return genType(::std::pow(x, y));
+ }
+
+ VECTORIZE_VEC_VEC(pow)
+
+ // exp
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType exp
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'exp' only accept floating-point input");
+
+ return genType(::std::exp(x));
+ }
+
+ VECTORIZE_VEC(exp)
+
+ // log
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType log
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'log' only accept floating-point input");
+
+ return genType(::std::log(x));
+ }
+
+ VECTORIZE_VEC(log)
+
+ //exp2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType exp2
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'exp2' only accept floating-point input");
+
+ return genType(::std::exp(genType(0.69314718055994530941723212145818) * x));
+ }
+
+ VECTORIZE_VEC(exp2)
+
+namespace _detail
+{
+ template <int _PATH = detail::float_or_int_value::GLM_ERROR>
+ struct _compute_log2
+ {
+ template <typename T>
+ T operator() (T const & Value) const;
+/*
+ {
+ GLM_STATIC_ASSERT(0, "'log2' parameter has an invalid template parameter type. GLM core features only supports floating-point types, include <glm/gtx/integer.hpp> for integer types support. Others types are not supported.");
+ return Value;
+ }
+*/
+ };
+
+ template <>
+ struct _compute_log2<detail::float_or_int_value::GLM_FLOAT>
+ {
+ template <typename T>
+ T operator() (T const & Value) const
+ {
+ return T(::std::log(Value)) / T(0.69314718055994530941723212145818);
+ }
+ };
+
+}//namespace _detail
+
+ // log2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType log2
+ (
+ genType const & x
+ )
+ {
+ assert(x > genType(0)); // log2 is only defined on the range (0, inf]
+ return _detail::_compute_log2<detail::float_or_int_trait<genType>::ID>()(x);
+ }
+
+ VECTORIZE_VEC(log2)
+
+ // sqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sqrt
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sqrt' only accept floating-point input");
+
+ return genType(::std::sqrt(x));
+ }
+
+ VECTORIZE_VEC(sqrt)
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType inversesqrt
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'inversesqrt' only accept floating-point input");
+ assert(x > genType(0));
+
+ return genType(1) / ::std::sqrt(x);
+ }
+
+ VECTORIZE_VEC(inversesqrt)
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_geometric.hpp b/include/gal/opengl/glm/core/func_geometric.hpp
new file mode 100644
index 0000000..c221084
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_geometric.hpp
@@ -0,0 +1,138 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_geometric.hpp
+/// @date 2008-08-03 / 2011-06-14
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+///
+/// @defgroup core_func_geometric Geometric functions
+/// @ingroup core
+///
+/// These operate on vectors as vectors, not component-wise.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_func_geometric
+#define glm_core_func_geometric GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_geometric
+ /// @{
+
+ /// Returns the length of x, i.e., sqrt(x * x).
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type length(
+ genType const & x);
+
+ /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type distance(
+ genType const & p0,
+ genType const & p1);
+
+ /// Returns the dot product of x and y, i.e., result = x * y.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type dot(
+ genType const & x,
+ genType const & y);
+
+ /// Returns the cross product of x and y.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL detail::tvec3<valType> cross(
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y);
+
+ /// Returns a vector in the same direction as x but with length of 1.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType normalize(
+ genType const & x);
+
+ /// If dot(Nref, I) < 0.0, return N, otherwise, return -N.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType faceforward(
+ genType const & N,
+ genType const & I,
+ genType const & Nref);
+
+ /// For the incident vector I and surface orientation N,
+ /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType reflect(
+ genType const & I,
+ genType const & N);
+
+ /// For the incident vector I and surface normal N,
+ /// and the ratio of indices of refraction eta,
+ /// return the refraction vector.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType refract(
+ genType const & I,
+ genType const & N,
+ typename genType::value_type const & eta);
+
+ /// @}
+}//namespace glm
+
+#include "func_geometric.inl"
+
+#endif//glm_core_func_geometric
diff --git a/include/gal/opengl/glm/core/func_geometric.inl b/include/gal/opengl/glm/core/func_geometric.inl
new file mode 100644
index 0000000..259a0ff
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_geometric.inl
@@ -0,0 +1,321 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_geometric.inl
+/// @date 2008-08-03 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // length
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType length
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'length' only accept floating-point inputs");
+
+ genType sqr = x * x;
+ return sqrt(sqr);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type length
+ (
+ detail::tvec2<T> const & v
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
+
+ typename detail::tvec2<T>::value_type sqr = v.x * v.x + v.y * v.y;
+ return sqrt(sqr);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec3<T>::value_type length
+ (
+ detail::tvec3<T> const & v
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
+
+ typename detail::tvec3<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z;
+ return sqrt(sqr);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec4<T>::value_type length
+ (
+ detail::tvec4<T> const & v
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
+
+ typename detail::tvec4<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
+ return sqrt(sqr);
+ }
+
+ // distance
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType distance
+ (
+ genType const & p0,
+ genType const & p1
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'distance' only accept floating-point inputs");
+
+ return length(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type distance
+ (
+ detail::tvec2<T> const & p0,
+ detail::tvec2<T> const & p1
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
+
+ return length(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec3<T>::value_type distance
+ (
+ detail::tvec3<T> const & p0,
+ detail::tvec3<T> const & p1
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
+
+ return length(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec4<T>::value_type distance
+ (
+ detail::tvec4<T> const & p0,
+ detail::tvec4<T> const & p1
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
+
+ return length(p1 - p0);
+ }
+
+ // dot
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType dot
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'dot' only accept floating-point inputs");
+
+ return x * y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type dot
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
+
+ return x.x * y.x + x.y * y.y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T dot
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
+
+ return x.x * y.x + x.y * y.y + x.z * y.z;
+ }
+/* // SSE3
+ GLM_FUNC_QUALIFIER float dot(const tvec4<float>& x, const tvec4<float>& y)
+ {
+ float Result;
+ __asm
+ {
+ mov esi, x
+ mov edi, y
+ movaps xmm0, [esi]
+ mulps xmm0, [edi]
+ haddps( _xmm0, _xmm0 )
+ haddps( _xmm0, _xmm0 )
+ movss Result, xmm0
+ }
+ return Result;
+ }
+*/
+ template <typename T>
+ GLM_FUNC_QUALIFIER T dot
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
+
+ return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w;
+ }
+
+ // cross
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> cross
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'cross' only accept floating-point inputs");
+
+ return detail::tvec3<T>(
+ x.y * y.z - y.y * x.z,
+ x.z * y.x - y.z * x.x,
+ x.x * y.y - y.x * x.y);
+ }
+
+ // normalize
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType normalize
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'normalize' only accept floating-point inputs");
+
+ return x < genType(0) ? genType(-1) : genType(1);
+ }
+
+ // According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> normalize
+ (
+ detail::tvec2<T> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
+
+ typename detail::tvec2<T>::value_type sqr = x.x * x.x + x.y * x.y;
+ return x * inversesqrt(sqr);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> normalize
+ (
+ detail::tvec3<T> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
+
+ typename detail::tvec3<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z;
+ return x * inversesqrt(sqr);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> normalize
+ (
+ detail::tvec4<T> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
+
+ typename detail::tvec4<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
+ return x * inversesqrt(sqr);
+ }
+
+ // faceforward
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType faceforward
+ (
+ genType const & N,
+ genType const & I,
+ genType const & Nref
+ )
+ {
+ return dot(Nref, I) < 0 ? N : -N;
+ }
+
+ // reflect
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType reflect
+ (
+ genType const & I,
+ genType const & N
+ )
+ {
+ return I - N * dot(N, I) * genType(2);
+ }
+
+ // refract
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType refract
+ (
+ genType const & I,
+ genType const & N,
+ genType const & eta
+ )
+ {
+ //It could be a vector
+ //GLM_STATIC_ASSERT(detail::type<genType>::is_float);
+
+ genType dotValue = dot(N, I);
+ genType k = genType(1) - eta * eta * (genType(1) - dotValue * dotValue);
+ if(k < genType(0))
+ return genType(0);
+ else
+ return eta * I - (eta * dotValue + sqrt(k)) * N;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType refract
+ (
+ genType const & I,
+ genType const & N,
+ typename genType::value_type const & eta
+ )
+ {
+ //It could be a vector
+ //GLM_STATIC_ASSERT(detail::type<genType>::is_float);
+
+ typename genType::value_type dotValue = dot(N, I);
+ typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue);
+ if(k < typename genType::value_type(0))
+ return genType(0);
+ else
+ return eta * I - (eta * dotValue + sqrt(k)) * N;
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_integer.hpp b/include/gal/opengl/glm/core/func_integer.hpp
new file mode 100644
index 0000000..df9a401
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_integer.hpp
@@ -0,0 +1,201 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_integer.hpp
+/// @date 2010-03-17 / 2011-06-18
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+///
+/// @defgroup core_func_integer Integer functions
+/// @ingroup core
+///
+/// These all operate component-wise. The description is per component.
+/// The notation [a, b] means the set of bits from bit-number a through bit-number
+/// b, inclusive. The lowest-order bit is bit 0.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_func_integer
+#define glm_core_func_integer GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_integer
+ /// @{
+
+ /// Adds 32-bit unsigned integer x and y, returning the sum
+ /// modulo pow(2, 32). The value carry is set to 0 if the sum was
+ /// less than pow(2, 32), or to 1 otherwise.
+ ///
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml">GLSL uaddCarry man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genUType>
+ GLM_FUNC_DECL genUType uaddCarry(
+ genUType const & x,
+ genUType const & y,
+ genUType & carry);
+
+ /// Subtracts the 32-bit unsigned integer y from x, returning
+ /// the difference if non-negative, or pow(2, 32) plus the difference
+ /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.
+ ///
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml">GLSL usubBorrow man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genUType>
+ GLM_FUNC_DECL genUType usubBorrow(
+ genUType const & x,
+ genUType const & y,
+ genUType & borrow);
+
+ /// Multiplies 32-bit integers x and y, producing a 64-bit
+ /// result. The 32 least-significant bits are returned in lsb.
+ /// The 32 most-significant bits are returned in msb.
+ ///
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml">GLSL umulExtended man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genUType>
+ GLM_FUNC_DECL void umulExtended(
+ genUType const & x,
+ genUType const & y,
+ genUType & msb,
+ genUType & lsb);
+
+ /// Multiplies 32-bit integers x and y, producing a 64-bit
+ /// result. The 32 least-significant bits are returned in lsb.
+ /// The 32 most-significant bits are returned in msb.
+ ///
+ /// @tparam genIType Signed integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml">GLSL imulExtended man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genIType>
+ GLM_FUNC_DECL void imulExtended(
+ genIType const & x,
+ genIType const & y,
+ genIType & msb,
+ genIType & lsb);
+
+ /// Extracts bits [offset, offset + bits - 1] from value,
+ /// returning them in the least significant bits of the result.
+ /// For unsigned data types, the most significant bits of the
+ /// result will be set to zero. For signed data types, the
+ /// most significant bits will be set to the value of bit offset + base - 1.
+ ///
+ /// If bits is zero, the result will be zero. The result will be
+ /// undefined if offset or bits is negative, or if the sum of
+ /// offset and bits is greater than the number of bits used
+ /// to store the operand.
+ ///
+ /// @tparam genIUType Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml">GLSL bitfieldExtract man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldExtract(
+ genIUType const & Value,
+ int const & Offset,
+ int const & Bits);
+
+ /// Returns the insertion the bits least-significant bits of insert into base.
+ ///
+ /// The result will have bits [offset, offset + bits - 1] taken
+ /// from bits [0, bits - 1] of insert, and all other bits taken
+ /// directly from the corresponding bits of base. If bits is
+ /// zero, the result will simply be base. The result will be
+ /// undefined if offset or bits is negative, or if the sum of
+ /// offset and bits is greater than the number of bits used to
+ /// store the operand.
+ ///
+ /// @tparam genIUType Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml">GLSL bitfieldInsert man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldInsert(
+ genIUType const & Base,
+ genIUType const & Insert,
+ int const & Offset,
+ int const & Bits);
+
+ /// Returns the reversal of the bits of value.
+ /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value,
+ /// where bits is the total number of bits used to represent value.
+ ///
+ /// @tparam genIUType Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml">GLSL bitfieldReverse man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldReverse(genIUType const & Value);
+
+ /// Returns the number of bits set to 1 in the binary representation of value.
+ ///
+ /// @tparam genIUType Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ ///
+ /// @todo Clarify the declaration to specify that scalars are suported.
+ template <typename T, template <typename> class genIUType>
+ GLM_FUNC_DECL typename genIUType<T>::signed_type bitCount(genIUType<T> const & Value);
+
+ /// Returns the bit number of the least significant bit set to
+ /// 1 in the binary representation of value.
+ /// If value is zero, -1 will be returned.
+ ///
+ /// @tparam genIUType Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ ///
+ /// @todo Clarify the declaration to specify that scalars are suported.
+ template <typename T, template <typename> class genIUType>
+ GLM_FUNC_DECL typename genIUType<T>::signed_type findLSB(genIUType<T> const & Value);
+
+ /// Returns the bit number of the most significant bit in the binary representation of value.
+ /// For positive integers, the result will be the bit number of the most significant bit set to 1.
+ /// For negative integers, the result will be the bit number of the most significant
+ /// bit set to 0. For a value of zero or negative one, -1 will be returned.
+ ///
+ /// @tparam genIUType Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ ///
+ /// @todo Clarify the declaration to specify that scalars are suported.
+ template <typename T, template <typename> class genIUType>
+ GLM_FUNC_DECL typename genIUType<T>::signed_type findMSB(genIUType<T> const & Value);
+
+ /// @}
+}//namespace glm
+
+#include "func_integer.inl"
+
+#endif//glm_core_func_integer
+
diff --git a/include/gal/opengl/glm/core/func_integer.inl b/include/gal/opengl/glm/core/func_integer.inl
new file mode 100644
index 0000000..ad8b1fe
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_integer.inl
@@ -0,0 +1,648 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_integer.inl
+/// @date 2010-03-17 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(GLM_ARCH != GLM_ARCH_PURE)
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+# include <intrin.h>
+# pragma intrinsic(_BitScanReverse)
+#endif//(GLM_COMPILER & GLM_COMPILER_VC)
+#endif//(GLM_ARCH != GLM_ARCH_PURE)
+
+namespace glm
+{
+ // uaddCarry
+ template <typename genUType>
+ GLM_FUNC_QUALIFIER genUType uaddCarry
+ (
+ genUType const & x,
+ genUType const & y,
+ genUType & Carry
+ )
+ {
+ detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y);
+ genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32)));
+ Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> uaddCarry
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y,
+ detail::tvec2<T> & Carry
+ )
+ {
+ return detail::tvec2<T>(
+ uaddCarry(x[0], y[0], Carry[0]),
+ uaddCarry(x[1], y[1], Carry[1]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> uaddCarry
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ detail::tvec3<T> & Carry
+ )
+ {
+ return detail::tvec3<T>(
+ uaddCarry(x[0], y[0], Carry[0]),
+ uaddCarry(x[1], y[1], Carry[1]),
+ uaddCarry(x[2], y[2], Carry[2]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> uaddCarry
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y,
+ detail::tvec4<T> & Carry
+ )
+ {
+ return detail::tvec4<T>(
+ uaddCarry(x[0], y[0], Carry[0]),
+ uaddCarry(x[1], y[1], Carry[1]),
+ uaddCarry(x[2], y[2], Carry[2]),
+ uaddCarry(x[3], y[3], Carry[3]));
+ }
+
+ // usubBorrow
+ template <typename genUType>
+ GLM_FUNC_QUALIFIER genUType usubBorrow
+ (
+ genUType const & x,
+ genUType const & y,
+ genUType & Borrow
+ )
+ {
+ Borrow = x >= y ? 0 : 1;
+ if(x > y)
+ return genUType(detail::highp_int_t(x) - detail::highp_int_t(y));
+ else
+ return genUType((detail::highp_int_t(1) << detail::highp_int_t(32)) + detail::highp_int_t(x) - detail::highp_int_t(y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> usubBorrow
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y,
+ detail::tvec2<T> & Borrow
+ )
+ {
+ return detail::tvec2<T>(
+ usubBorrow(x[0], y[0], Borrow[0]),
+ usubBorrow(x[1], y[1], Borrow[1]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> usubBorrow
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ detail::tvec3<T> & Borrow
+ )
+ {
+ return detail::tvec3<T>(
+ usubBorrow(x[0], y[0], Borrow[0]),
+ usubBorrow(x[1], y[1], Borrow[1]),
+ usubBorrow(x[2], y[2], Borrow[2]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> usubBorrow
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y,
+ detail::tvec4<T> & Borrow
+ )
+ {
+ return detail::tvec4<T>(
+ usubBorrow(x[0], y[0], Borrow[0]),
+ usubBorrow(x[1], y[1], Borrow[1]),
+ usubBorrow(x[2], y[2], Borrow[2]),
+ usubBorrow(x[3], y[3], Borrow[3]));
+ }
+
+ // umulExtended
+ template <typename genUType>
+ GLM_FUNC_QUALIFIER void umulExtended
+ (
+ genUType const & x,
+ genUType const & y,
+ genUType & msb,
+ genUType & lsb
+ )
+ {
+ detail::highp_uint_t ValueX64 = x;
+ detail::highp_uint_t ValueY64 = y;
+ detail::highp_uint_t Value64 = ValueX64 * ValueY64;
+ msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
+ lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> umulExtended
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y,
+ detail::tvec2<T> & msb,
+ detail::tvec2<T> & lsb
+ )
+ {
+ return detail::tvec2<T>(
+ umulExtended(x[0], y[0], msb, lsb),
+ umulExtended(x[1], y[1], msb, lsb));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> umulExtended
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ detail::tvec3<T> & msb,
+ detail::tvec3<T> & lsb
+ )
+ {
+ return detail::tvec3<T>(
+ umulExtended(x[0], y[0], msb, lsb),
+ umulExtended(x[1], y[1], msb, lsb),
+ umulExtended(x[2], y[2], msb, lsb));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> umulExtended
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y,
+ detail::tvec4<T> & msb,
+ detail::tvec4<T> & lsb
+ )
+ {
+ return detail::tvec4<T>(
+ umulExtended(x[0], y[0], msb, lsb),
+ umulExtended(x[1], y[1], msb, lsb),
+ umulExtended(x[2], y[2], msb, lsb),
+ umulExtended(x[3], y[3], msb, lsb));
+ }
+
+ // imulExtended
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER void imulExtended
+ (
+ genIType const & x,
+ genIType const & y,
+ genIType & msb,
+ genIType & lsb
+ )
+ {
+ detail::highp_int_t ValueX64 = x;
+ detail::highp_int_t ValueY64 = y;
+ detail::highp_int_t Value64 = ValueX64 * ValueY64;
+ msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
+ lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> imulExtended
+ (
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y,
+ detail::tvec2<T> & msb,
+ detail::tvec2<T> & lsb
+ )
+ {
+ return detail::tvec2<T>(
+ imulExtended(x[0], y[0], msb, lsb),
+ imulExtended(x[1], y[1], msb, lsb));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> imulExtended
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ detail::tvec3<T> & msb,
+ detail::tvec3<T> & lsb
+ )
+ {
+ return detail::tvec3<T>(
+ imulExtended(x[0], y[0], msb, lsb),
+ imulExtended(x[1], y[1], msb, lsb),
+ imulExtended(x[2], y[2], msb, lsb));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> imulExtended
+ (
+ detail::tvec4<T> const & x,
+ detail::tvec4<T> const & y,
+ detail::tvec4<T> & msb,
+ detail::tvec4<T> & lsb
+ )
+ {
+ return detail::tvec4<T>(
+ imulExtended(x[0], y[0], msb, lsb),
+ imulExtended(x[1], y[1], msb, lsb),
+ imulExtended(x[2], y[2], msb, lsb),
+ imulExtended(x[3], y[3], msb, lsb));
+ }
+
+ // bitfieldExtract
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldExtract
+ (
+ genIUType const & Value,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ int GenSize = int(sizeof(genIUType)) << int(3);
+
+ assert(Offset + Bits <= GenSize);
+
+ genIUType ShiftLeft = Bits ? Value << (GenSize - (Bits + Offset)) : genIUType(0);
+ genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Bits);
+
+ return ShiftBack;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> bitfieldExtract
+ (
+ detail::tvec2<T> const & Value,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ return detail::tvec2<T>(
+ bitfieldExtract(Value[0], Offset, Bits),
+ bitfieldExtract(Value[1], Offset, Bits));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> bitfieldExtract
+ (
+ detail::tvec3<T> const & Value,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ return detail::tvec3<T>(
+ bitfieldExtract(Value[0], Offset, Bits),
+ bitfieldExtract(Value[1], Offset, Bits),
+ bitfieldExtract(Value[2], Offset, Bits));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> bitfieldExtract
+ (
+ detail::tvec4<T> const & Value,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ return detail::tvec4<T>(
+ bitfieldExtract(Value[0], Offset, Bits),
+ bitfieldExtract(Value[1], Offset, Bits),
+ bitfieldExtract(Value[2], Offset, Bits),
+ bitfieldExtract(Value[3], Offset, Bits));
+ }
+
+ // bitfieldInsert
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldInsert
+ (
+ genIUType const & Base,
+ genIUType const & Insert,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldInsert' only accept integer values");
+ assert(Offset + Bits <= sizeof(genIUType));
+
+ if(Bits == 0)
+ return Base;
+
+ genIUType Mask = 0;
+ for(int Bit = Offset; Bit < Offset + Bits; ++Bit)
+ Mask |= (1 << Bit);
+
+ return (Base & ~Mask) | (Insert & Mask);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> bitfieldInsert
+ (
+ detail::tvec2<T> const & Base,
+ detail::tvec2<T> const & Insert,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ return detail::tvec2<T>(
+ bitfieldInsert(Base[0], Insert[0], Offset, Bits),
+ bitfieldInsert(Base[1], Insert[1], Offset, Bits));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> bitfieldInsert
+ (
+ detail::tvec3<T> const & Base,
+ detail::tvec3<T> const & Insert,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ return detail::tvec3<T>(
+ bitfieldInsert(Base[0], Insert[0], Offset, Bits),
+ bitfieldInsert(Base[1], Insert[1], Offset, Bits),
+ bitfieldInsert(Base[2], Insert[2], Offset, Bits));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> bitfieldInsert
+ (
+ detail::tvec4<T> const & Base,
+ detail::tvec4<T> const & Insert,
+ int const & Offset,
+ int const & Bits
+ )
+ {
+ return detail::tvec4<T>(
+ bitfieldInsert(Base[0], Insert[0], Offset, Bits),
+ bitfieldInsert(Base[1], Insert[1], Offset, Bits),
+ bitfieldInsert(Base[2], Insert[2], Offset, Bits),
+ bitfieldInsert(Base[3], Insert[3], Offset, Bits));
+ }
+
+ // bitfieldReverse
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldReverse' only accept integer values");
+
+ genIUType Out = 0;
+ std::size_t BitSize = sizeof(genIUType) * 8;
+ for(std::size_t i = 0; i < BitSize; ++i)
+ if(Value & (genIUType(1) << i))
+ Out |= genIUType(1) << (BitSize - 1 - i);
+ return Out;
+ }
+
+ VECTORIZE_VEC(bitfieldReverse)
+
+ // bitCount
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int bitCount(genIUType const & Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitCount' only accept integer values");
+
+ int Count = 0;
+ for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i)
+ {
+ if(Value & (1 << i))
+ ++Count;
+ }
+ return Count;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<int> bitCount
+ (
+ detail::tvec2<T> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ bitCount(value[0]),
+ bitCount(value[1]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<int> bitCount
+ (
+ detail::tvec3<T> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ bitCount(value[0]),
+ bitCount(value[1]),
+ bitCount(value[2]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<int> bitCount
+ (
+ detail::tvec4<T> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ bitCount(value[0]),
+ bitCount(value[1]),
+ bitCount(value[2]),
+ bitCount(value[3]));
+ }
+
+ // findLSB
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findLSB
+ (
+ genIUType const & Value
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values");
+ if(Value == 0)
+ return -1;
+
+ genIUType Bit;
+ for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){}
+ return Bit;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<int> findLSB
+ (
+ detail::tvec2<T> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ findLSB(value[0]),
+ findLSB(value[1]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<int> findLSB
+ (
+ detail::tvec3<T> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ findLSB(value[0]),
+ findLSB(value[1]),
+ findLSB(value[2]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<int> findLSB
+ (
+ detail::tvec4<T> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ findLSB(value[0]),
+ findLSB(value[1]),
+ findLSB(value[2]),
+ findLSB(value[3]));
+ }
+
+ // findMSB
+#if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC))
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB
+ (
+ genIUType const & Value
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+ if(Value == 0)
+ return -1;
+
+ unsigned long Result(0);
+ _BitScanReverse(&Result, Value);
+ return int(Result);
+ }
+/*
+// __builtin_clz seems to be buggy as it crasks for some values, from 0x00200000 to 80000000
+#elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40))
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB
+ (
+ genIUType const & Value
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+ if(Value == 0)
+ return -1;
+
+ // clz returns the number or trailing 0-bits; see
+ // http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Other-Builtins.html
+ //
+ // NoteBecause __builtin_clz only works for unsigned ints, this
+ // implementation will not work for 64-bit integers.
+ //
+ return 31 - __builtin_clzl(Value);
+ }
+*/
+#else
+
+/* SSE implementation idea
+
+ __m128i const Zero = _mm_set_epi32( 0, 0, 0, 0);
+ __m128i const One = _mm_set_epi32( 1, 1, 1, 1);
+ __m128i Bit = _mm_set_epi32(-1, -1, -1, -1);
+ __m128i Tmp = _mm_set_epi32(Value, Value, Value, Value);
+ __m128i Mmi = Zero;
+ for(int i = 0; i < 32; ++i)
+ {
+ __m128i Shilt = _mm_and_si128(_mm_cmpgt_epi32(Tmp, One), One);
+ Tmp = _mm_srai_epi32(Tmp, One);
+ Bit = _mm_add_epi32(Bit, _mm_and_si128(Shilt, i));
+ Mmi = _mm_and_si128(Mmi, One);
+ }
+ return Bit;
+
+*/
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB
+ (
+ genIUType const & Value
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+
+ if(Value == genIUType(0) || Value == genIUType(-1))
+ return -1;
+ else if(Value > 0)
+ {
+ genIUType Bit = genIUType(-1);
+ for(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){}
+ return Bit;
+ }
+ else //if(Value < 0)
+ {
+ int const BitCount(sizeof(genIUType) * 8);
+ int MostSignificantBit(-1);
+ for(int BitIndex(0); BitIndex < BitCount; ++BitIndex)
+ MostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex;
+ assert(MostSignificantBit >= 0);
+ return MostSignificantBit;
+ }
+ }
+#endif//(GLM_COMPILER)
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<int> findMSB
+ (
+ detail::tvec2<T> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ findMSB(value[0]),
+ findMSB(value[1]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<int> findMSB
+ (
+ detail::tvec3<T> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ findMSB(value[0]),
+ findMSB(value[1]),
+ findMSB(value[2]));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<int> findMSB
+ (
+ detail::tvec4<T> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ findMSB(value[0]),
+ findMSB(value[1]),
+ findMSB(value[2]),
+ findMSB(value[3]));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_matrix.hpp b/include/gal/opengl/glm/core/func_matrix.hpp
new file mode 100644
index 0000000..3c92cbb
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_matrix.hpp
@@ -0,0 +1,150 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_matrix.hpp
+/// @date 2008-08-03 / 2011-06-15
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+///
+/// @defgroup core_func_matrix Matrix functions
+/// @ingroup core
+///
+/// For each of the following built-in matrix functions, there is both a
+/// single-precision floating point version, where all arguments and return values
+/// are single precision, and a double-precision floating version, where all
+/// arguments and return values are double precision. Only the single-precision
+/// floating point version is shown.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_CORE_func_matrix
+#define GLM_CORE_func_matrix GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_matrix
+ /// @{
+
+ /// Multiply matrix x by matrix y component-wise, i.e.,
+ /// result[i][j] is the scalar product of x[i][j] and y[i][j].
+ ///
+ /// @tparam matType Floating-point matrix types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename matType>
+ GLM_FUNC_DECL matType matrixCompMult(
+ matType const & x,
+ matType const & y);
+
+ /// Treats the first parameter c as a column vector
+ /// and the second parameter r as a row vector
+ /// and does a linear algebraic matrix multiply c * r.
+ ///
+ /// @tparam matType Floating-point matrix types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ ///
+ /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used.
+ template <typename vecType, typename matType>
+ GLM_FUNC_DECL matType outerProduct(
+ vecType const & c,
+ vecType const & r);
+
+ /// Returns the transposed matrix of x
+ ///
+ /// @tparam matType Floating-point matrix types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename matType>
+ GLM_FUNC_DECL typename matType::transpose_type transpose(
+ matType const & x);
+
+ /// Return the determinant of a mat2 matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL typename detail::tmat2x2<valType>::value_type determinant(
+ detail::tmat2x2<valType> const & m);
+
+ /// Return the determinant of a mat3 matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL typename detail::tmat3x3<valType>::value_type determinant(
+ detail::tmat3x3<valType> const & m);
+
+ /// Return the determinant of a mat4 matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL typename detail::tmat4x4<valType>::value_type determinant(
+ detail::tmat4x4<valType> const & m);
+
+ /// Return the inverse of a mat2 matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL detail::tmat2x2<valType> inverse(
+ detail::tmat2x2<valType> const & m);
+
+ /// Return the inverse of a mat3 matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL detail::tmat3x3<valType> inverse(
+ detail::tmat3x3<valType> const & m);
+
+ /// Return the inverse of a mat4 matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename valType>
+ GLM_FUNC_DECL detail::tmat4x4<valType> inverse(
+ detail::tmat4x4<valType> const & m);
+
+ /// @}
+}//namespace glm
+
+#include "func_matrix.inl"
+
+#endif//GLM_CORE_func_matrix
diff --git a/include/gal/opengl/glm/core/func_matrix.inl b/include/gal/opengl/glm/core/func_matrix.inl
new file mode 100644
index 0000000..d89d5d4
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_matrix.inl
@@ -0,0 +1,582 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_matrix.inl
+/// @date 2008-03-08 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // matrixCompMult
+ template <typename matType>
+ GLM_FUNC_QUALIFIER matType matrixCompMult
+ (
+ matType const & x,
+ matType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<typename matType::value_type>::is_float, "'matrixCompMult' only accept floating-point inputs");
+
+ matType result(matType::null);
+ for(typename matType::size_type i = 0; i < matType::row_size(); ++i)
+ result[i] = x[i] * y[i];
+ return result;
+ }
+
+ // outerProduct
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> outerProduct
+ (
+ detail::tvec2<T> const & c,
+ detail::tvec2<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat2x2<T> m(detail::tmat2x2<T>::null);
+ m[0][0] = c[0] * r[0];
+ m[0][1] = c[1] * r[0];
+ m[1][0] = c[0] * r[1];
+ m[1][1] = c[1] * r[1];
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> outerProduct
+ (
+ detail::tvec3<T> const & c,
+ detail::tvec3<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat3x3<T> m(detail::tmat3x3<T>::null);
+ for(typename detail::tmat3x3<T>::size_type i(0); i < m.length(); ++i)
+ m[i] = c * r[i];
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> outerProduct
+ (
+ detail::tvec4<T> const & c,
+ detail::tvec4<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat4x4<T> m(detail::tmat4x4<T>::null);
+ for(typename detail::tmat4x4<T>::size_type i(0); i < m.length(); ++i)
+ m[i] = c * r[i];
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x3<T> outerProduct
+ (
+ detail::tvec3<T> const & c,
+ detail::tvec2<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat2x3<T> m(detail::tmat2x3<T>::null);
+ m[0][0] = c.x * r.x;
+ m[0][1] = c.y * r.x;
+ m[0][2] = c.z * r.x;
+ m[1][0] = c.x * r.y;
+ m[1][1] = c.y * r.y;
+ m[1][2] = c.z * r.y;
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x2<T> outerProduct
+ (
+ detail::tvec2<T> const & c,
+ detail::tvec3<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat3x2<T> m(detail::tmat3x2<T>::null);
+ m[0][0] = c.x * r.x;
+ m[0][1] = c.y * r.x;
+ m[1][0] = c.x * r.y;
+ m[1][1] = c.y * r.y;
+ m[2][0] = c.x * r.z;
+ m[2][1] = c.y * r.z;
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x4<T> outerProduct
+ (
+ detail::tvec4<T> const & c,
+ detail::tvec2<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat2x4<T> m(detail::tmat2x4<T>::null);
+ m[0][0] = c.x * r.x;
+ m[0][1] = c.y * r.x;
+ m[0][2] = c.z * r.x;
+ m[0][3] = c.w * r.x;
+ m[1][0] = c.x * r.y;
+ m[1][1] = c.y * r.y;
+ m[1][2] = c.z * r.y;
+ m[1][3] = c.w * r.y;
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x2<T> outerProduct
+ (
+ detail::tvec2<T> const & c,
+ detail::tvec4<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat4x2<T> m(detail::tmat4x2<T>::null);
+ m[0][0] = c.x * r.x;
+ m[0][1] = c.y * r.x;
+ m[1][0] = c.x * r.y;
+ m[1][1] = c.y * r.y;
+ m[2][0] = c.x * r.z;
+ m[2][1] = c.y * r.z;
+ m[3][0] = c.x * r.w;
+ m[3][1] = c.y * r.w;
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x4<T> outerProduct
+ (
+ detail::tvec4<T> const & c,
+ detail::tvec3<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat3x4<T> m(detail::tmat3x4<T>::null);
+ m[0][0] = c.x * r.x;
+ m[0][1] = c.y * r.x;
+ m[0][2] = c.z * r.x;
+ m[0][3] = c.w * r.x;
+ m[1][0] = c.x * r.y;
+ m[1][1] = c.y * r.y;
+ m[1][2] = c.z * r.y;
+ m[1][3] = c.w * r.y;
+ m[2][0] = c.x * r.z;
+ m[2][1] = c.y * r.z;
+ m[2][2] = c.z * r.z;
+ m[2][3] = c.w * r.z;
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x3<T> outerProduct
+ (
+ detail::tvec3<T> const & c,
+ detail::tvec4<T> const & r
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
+
+ detail::tmat4x3<T> m(detail::tmat4x3<T>::null);
+ m[0][0] = c.x * r.x;
+ m[0][1] = c.y * r.x;
+ m[0][2] = c.z * r.x;
+ m[1][0] = c.x * r.y;
+ m[1][1] = c.y * r.y;
+ m[1][2] = c.z * r.y;
+ m[2][0] = c.x * r.z;
+ m[2][1] = c.y * r.z;
+ m[2][2] = c.z * r.z;
+ m[3][0] = c.x * r.w;
+ m[3][1] = c.y * r.w;
+ m[3][2] = c.z * r.w;
+ return m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> transpose
+ (
+ detail::tmat2x2<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat2x2<T> result(detail::tmat2x2<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> transpose
+ (
+ detail::tmat3x3<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat3x3<T> result(detail::tmat3x3<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> transpose
+ (
+ detail::tmat4x4<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat4x4<T> result(detail::tmat4x4<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[0][3] = m[3][0];
+
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[1][3] = m[3][1];
+
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ result[2][3] = m[3][2];
+
+ result[3][0] = m[0][3];
+ result[3][1] = m[1][3];
+ result[3][2] = m[2][3];
+ result[3][3] = m[3][3];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x3<T> transpose
+ (
+ detail::tmat3x2<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat2x3<T> result(detail::tmat2x3<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x2<T> transpose
+ (
+ detail::tmat2x3<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat3x2<T> result(detail::tmat3x2<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x4<T> transpose
+ (
+ detail::tmat4x2<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat2x4<T> result(detail::tmat2x4<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[0][3] = m[3][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[1][3] = m[3][1];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x2<T> transpose
+ (
+ detail::tmat2x4<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat4x2<T> result(detail::tmat4x2<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[3][0] = m[0][3];
+ result[3][1] = m[1][3];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x4<T> transpose
+ (
+ detail::tmat4x3<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat3x4<T> result(detail::tmat3x4<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[0][3] = m[3][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[1][3] = m[3][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ result[2][3] = m[3][2];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x3<T> transpose
+ (
+ detail::tmat3x4<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
+
+ detail::tmat4x3<T> result(detail::tmat4x3<T>::null);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ result[3][0] = m[0][3];
+ result[3][1] = m[1][3];
+ result[3][2] = m[2][3];
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tmat2x2<T>::value_type determinant
+ (
+ detail::tmat2x2<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'determinant' only accept floating-point inputs");
+
+ return m[0][0] * m[1][1] - m[1][0] * m[0][1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tmat3x3<T>::value_type determinant
+ (
+ detail::tmat3x3<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'determinant' only accept floating-point inputs");
+
+ return
+ + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
+ - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
+ + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename detail::tmat4x4<T>::value_type determinant
+ (
+ detail::tmat4x4<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'determinant' only accept floating-point inputs");
+
+ T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+
+ detail::tvec4<T> DetCof(
+ + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
+ - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
+ + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
+ - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
+
+ return m[0][0] * DetCof[0]
+ + m[0][1] * DetCof[1]
+ + m[0][2] * DetCof[2]
+ + m[0][3] * DetCof[3];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> inverse
+ (
+ detail::tmat2x2<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'inverse' only accept floating-point inputs");
+
+ //valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];
+ T Determinant = determinant(m);
+
+ detail::tmat2x2<T> Inverse(
+ + m[1][1] / Determinant,
+ - m[0][1] / Determinant,
+ - m[1][0] / Determinant,
+ + m[0][0] / Determinant);
+
+ return Inverse;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> inverse
+ (
+ detail::tmat3x3<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'inverse' only accept floating-point inputs");
+
+ //valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
+ // - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
+ // + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
+
+ T Determinant = determinant(m);
+
+ detail::tmat3x3<T> Inverse(detail::tmat3x3<T>::null);
+ Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);
+ Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);
+ Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
+ Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);
+ Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);
+ Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);
+ Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
+ Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);
+ Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);
+ Inverse /= Determinant;
+
+ return Inverse;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> inverse
+ (
+ detail::tmat4x4<T> const & m
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<T>::is_float, "'inverse' only accept floating-point inputs");
+
+ T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ detail::tvec4<T> const SignA(+1, -1, +1, -1);
+ detail::tvec4<T> const SignB(-1, +1, -1, +1);
+
+ detail::tvec4<T> Fac0(Coef00, Coef00, Coef02, Coef03);
+ detail::tvec4<T> Fac1(Coef04, Coef04, Coef06, Coef07);
+ detail::tvec4<T> Fac2(Coef08, Coef08, Coef10, Coef11);
+ detail::tvec4<T> Fac3(Coef12, Coef12, Coef14, Coef15);
+ detail::tvec4<T> Fac4(Coef16, Coef16, Coef18, Coef19);
+ detail::tvec4<T> Fac5(Coef20, Coef20, Coef22, Coef23);
+
+ detail::tvec4<T> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);
+ detail::tvec4<T> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);
+ detail::tvec4<T> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);
+ detail::tvec4<T> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);
+
+ detail::tvec4<T> Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);
+ detail::tvec4<T> Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);
+ detail::tvec4<T> Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);
+ detail::tvec4<T> Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);
+
+ detail::tmat4x4<T> Inverse(Inv0, Inv1, Inv2, Inv3);
+
+ detail::tvec4<T> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);
+
+ T Determinant = glm::dot(m[0], Row0);
+
+ Inverse /= Determinant;
+
+ return Inverse;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_noise.hpp b/include/gal/opengl/glm/core/func_noise.hpp
new file mode 100644
index 0000000..3e5f874
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_noise.hpp
@@ -0,0 +1,87 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_noise.hpp
+/// @date 2008-08-01 / 2011-06-18
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.13 Noise Functions</a>
+///
+/// @defgroup core_func_noise Noise functions
+/// @ingroup core
+///
+/// Noise functions are stochastic functions that can be used to increase visual
+/// complexity. Values returned by the following noise functions give the
+/// appearance of randomness, but are not truly random.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_func_noise
+#define glm_core_func_noise GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_noise
+ /// @{
+
+ /// Returns a 1D noise value based on the input value x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise1.xml">GLSL noise1 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.13 Noise Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type noise1(genType const & x);
+
+ /// Returns a 2D noise value based on the input value x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise2.xml">GLSL noise2 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.13 Noise Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL detail::tvec2<typename genType::value_type> noise2(genType const & x);
+
+ /// Returns a 3D noise value based on the input value x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise3.xml">GLSL noise3 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.13 Noise Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL detail::tvec3<typename genType::value_type> noise3(genType const & x);
+
+ /// Returns a 4D noise value based on the input value x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise4.xml">GLSL noise4 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.13 Noise Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL detail::tvec4<typename genType::value_type> noise4(genType const & x);
+
+ /// @}
+}//namespace glm
+
+#include "func_noise.inl"
+
+#endif//glm_core_func_noise
diff --git a/include/gal/opengl/glm/core/func_noise.inl b/include/gal/opengl/glm/core/func_noise.inl
new file mode 100644
index 0000000..68a1933
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_noise.inl
@@ -0,0 +1,364 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_noise.inl
+/// @date 2008-08-01 / 2011-09-27
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T noise1(T const & x)
+ {
+ return noise1(glm::detail::tvec2<T>(x, T(0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec2<T> noise2(T const & x)
+ {
+ return glm::detail::tvec2<T>(
+ noise1(x + T(0.0)),
+ noise1(x + T(1.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec3<T> noise3(T const & x)
+ {
+ return glm::detail::tvec3<T>(
+ noise1(x - T(1.0)),
+ noise1(x + T(0.0)),
+ noise1(x + T(1.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec4<T> noise4(T const & x)
+ {
+ return glm::detail::tvec4<T>(
+ noise1(x - T(1.0)),
+ noise1(x + T(0.0)),
+ noise1(x + T(1.0)),
+ noise1(x + T(2.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T noise1(glm::detail::tvec2<T> const & v)
+ {
+ detail::tvec4<T> const C = detail::tvec4<T>(
+ T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0
+ T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0)
+ T(-0.577350269189626), // -1.0 + 2.0 * C.x
+ T( 0.024390243902439)); // 1.0 / 41.0
+
+ // First corner
+ detail::tvec2<T> i = floor(v + dot(v, detail::tvec2<T>(C[1])));
+ detail::tvec2<T> x0 = v - i + dot(i, detail::tvec2<T>(C[0]));
+
+ // Other corners
+ //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0
+ //i1.y = 1.0 - i1.x;
+ detail::tvec2<T> i1 = (x0.x > x0.y) ? detail::tvec2<T>(1, 0) : detail::tvec2<T>(0, 1);
+ // x0 = x0 - 0.0 + 0.0 * C.xx ;
+ // x1 = x0 - i1 + 1.0 * C.xx ;
+ // x2 = x0 - 1.0 + 2.0 * C.xx ;
+ detail::tvec4<T> x12 = detail::tvec4<T>(x0.x, x0.y, x0.x, x0.y) + detail::tvec4<T>(C.x, C.x, C.z, C.z);
+ x12 = detail::tvec4<T>(detail::tvec2<T>(x12) - i1, x12.z, x12.w);
+
+ // Permutations
+ i = mod(i, T(289)); // Avoid truncation effects in permutation
+ detail::tvec3<T> p = permute(
+ permute(i.y + detail::tvec3<T>(T(0), i1.y, T(1)))
+ + i.x + detail::tvec3<T>(T(0), i1.x, T(1)));
+
+ detail::tvec3<T> m = max(T(0.5) - detail::tvec3<T>(
+ dot(x0, x0),
+ dot(detail::tvec2<T>(x12.x, x12.y), detail::tvec2<T>(x12.x, x12.y)),
+ dot(detail::tvec2<T>(x12.z, x12.w), detail::tvec2<T>(x12.z, x12.w))), T(0));
+ m = m * m ;
+ m = m * m ;
+
+ // Gradients: 41 points uniformly over a line, mapped onto a diamond.
+ // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)
+
+ detail::tvec3<T> x = T(2) * fract(p * C.w) - T(1);
+ detail::tvec3<T> h = abs(x) - T(0.5);
+ detail::tvec3<T> ox = floor(x + T(0.5));
+ detail::tvec3<T> a0 = x - ox;
+
+ // Normalise gradients implicitly by scaling m
+ // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h );
+ m *= T(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h);
+
+ // Compute final noise value at P
+ detail::tvec3<T> g;
+ g.x = a0.x * x0.x + h.x * x0.y;
+ //g.yz = a0.yz * x12.xz + h.yz * x12.yw;
+ g.y = a0.y * x12.x + h.y * x12.y;
+ g.z = a0.z * x12.z + h.z * x12.w;
+ return T(130) * dot(m, g);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T noise1(detail::tvec3<T> const & v)
+ {
+ detail::tvec2<T> const C(1.0 / 6.0, 1.0 / 3.0);
+ detail::tvec4<T> const D(0.0, 0.5, 1.0, 2.0);
+
+ // First corner
+ detail::tvec3<T> i(floor(v + dot(v, detail::tvec3<T>(C.y))));
+ detail::tvec3<T> x0(v - i + dot(i, detail::tvec3<T>(C.x)));
+
+ // Other corners
+ detail::tvec3<T> g(step(detail::tvec3<T>(x0.y, x0.z, x0.x), x0));
+ detail::tvec3<T> l(T(1) - g);
+ detail::tvec3<T> i1(min(g, detail::tvec3<T>(l.z, l.x, l.y)));
+ detail::tvec3<T> i2(max(g, detail::tvec3<T>(l.z, l.x, l.y)));
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxx;
+ // x1 = x0 - i1 + 1.0 * C.xxx;
+ // x2 = x0 - i2 + 2.0 * C.xxx;
+ // x3 = x0 - 1.0 + 3.0 * C.xxx;
+ detail::tvec3<T> x1(x0 - i1 + C.x);
+ detail::tvec3<T> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y
+ detail::tvec3<T> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y
+
+ // Permutations
+ i = mod289(i);
+ detail::tvec4<T> p(permute(permute(permute(
+ i.z + detail::tvec4<T>(T(0), i1.z, i2.z, T(1))) +
+ i.y + detail::tvec4<T>(T(0), i1.y, i2.y, T(1))) +
+ i.x + detail::tvec4<T>(T(0), i1.x, i2.x, T(1))));
+
+ // Gradients: 7x7 points over a square, mapped onto an octahedron.
+ // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
+ T n_ = T(0.142857142857); // 1.0/7.0
+ detail::tvec3<T> ns(n_ * detail::tvec3<T>(D.w, D.y, D.z) - detail::tvec3<T>(D.x, D.z, D.x));
+
+ detail::tvec4<T> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7)
+
+ detail::tvec4<T> x_(floor(j * ns.z));
+ detail::tvec4<T> y_(floor(j - T(7) * x_)); // mod(j,N)
+
+ detail::tvec4<T> x(x_ * ns.x + ns.y);
+ detail::tvec4<T> y(y_ * ns.x + ns.y);
+ detail::tvec4<T> h(T(1) - abs(x) - abs(y));
+
+ detail::tvec4<T> b0(x.x, x.y, y.x, y.y);
+ detail::tvec4<T> b1(x.z, x.w, y.z, y.w);
+
+ // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
+ // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
+ detail::tvec4<T> s0(floor(b0) * T(2) + T(1));
+ detail::tvec4<T> s1(floor(b1) * T(2) + T(1));
+ detail::tvec4<T> sh(-step(h, detail::tvec4<T>(0.0)));
+
+ detail::tvec4<T> a0 = detail::tvec4<T>(b0.x, b0.z, b0.y, b0.w) + detail::tvec4<T>(s0.x, s0.z, s0.y, s0.w) * detail::tvec4<T>(sh.x, sh.x, sh.y, sh.y);
+ detail::tvec4<T> a1 = detail::tvec4<T>(b1.x, b1.z, b1.y, b1.w) + detail::tvec4<T>(s1.x, s1.z, s1.y, s1.w) * detail::tvec4<T>(sh.z, sh.z, sh.w, sh.w);
+
+ detail::tvec3<T> p0(a0.x, a0.y, h.x);
+ detail::tvec3<T> p1(a0.z, a0.w, h.y);
+ detail::tvec3<T> p2(a1.x, a1.y, h.z);
+ detail::tvec3<T> p3(a1.z, a1.w, h.w);
+
+ // Normalise gradients
+ detail::tvec4<T> norm = taylorInvSqrt(detail::tvec4<T>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+
+ // Mix final noise value
+ detail::tvec4<T> m = max(T(0.6) - detail::tvec4<T>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), T(0));
+ m = m * m;
+ return T(42) * dot(m * m, detail::tvec4<T>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T noise1(detail::tvec4<T> const & v)
+ {
+ detail::tvec4<T> const C(
+ 0.138196601125011, // (5 - sqrt(5))/20 G4
+ 0.276393202250021, // 2 * G4
+ 0.414589803375032, // 3 * G4
+ -0.447213595499958); // -1 + 4 * G4
+
+ // (sqrt(5) - 1)/4 = F4, used once below
+ T const F4 = T(0.309016994374947451);
+
+ // First corner
+ detail::tvec4<T> i = floor(v + dot(v, vec4(F4)));
+ detail::tvec4<T> x0 = v - i + dot(i, vec4(C.x));
+
+ // Other corners
+
+ // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)
+ detail::tvec4<T> i0;
+ detail::tvec3<T> isX = step(detail::tvec3<T>(x0.y, x0.z, x0.w), detail::tvec3<T>(x0.x));
+ detail::tvec3<T> isYZ = step(detail::tvec3<T>(x0.z, x0.w, x0.w), detail::tvec3<T>(x0.y, x0.y, x0.z));
+ // i0.x = dot(isX, vec3(1.0));
+ //i0.x = isX.x + isX.y + isX.z;
+ //i0.yzw = T(1) - isX;
+ i0 = detail::tvec4<T>(isX.x + isX.y + isX.z, T(1) - isX);
+ // i0.y += dot(isYZ.xy, vec2(1.0));
+ i0.y += isYZ.x + isYZ.y;
+ //i0.zw += 1.0 - detail::tvec2<T>(isYZ.x, isYZ.y);
+ i0.z += T(1) - isYZ.x;
+ i0.w += T(1) - isYZ.y;
+ i0.z += isYZ.z;
+ i0.w += T(1) - isYZ.z;
+
+ // i0 now contains the unique values 0,1,2,3 in each channel
+ detail::tvec4<T> i3 = clamp(i0, 0.0, 1.0);
+ detail::tvec4<T> i2 = clamp(i0 - 1.0, 0.0, 1.0);
+ detail::tvec4<T> i1 = clamp(i0 - 2.0, 0.0, 1.0);
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxxx
+ // x1 = x0 - i1 + 0.0 * C.xxxx
+ // x2 = x0 - i2 + 0.0 * C.xxxx
+ // x3 = x0 - i3 + 0.0 * C.xxxx
+ // x4 = x0 - 1.0 + 4.0 * C.xxxx
+ detail::tvec4<T> x1 = x0 - i1 + C.x;
+ detail::tvec4<T> x2 = x0 - i2 + C.y;
+ detail::tvec4<T> x3 = x0 - i3 + C.z;
+ detail::tvec4<T> x4 = x0 + C.w;
+
+ // Permutations
+ i = mod(i, T(289));
+ T j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x);
+ detail::tvec4<T> j1 = permute(permute(permute(permute(
+ i.w + detail::tvec4<T>(i1.w, i2.w, i3.w, T(1)))
+ + i.z + detail::tvec4<T>(i1.z, i2.z, i3.z, T(1)))
+ + i.y + detail::tvec4<T>(i1.y, i2.y, i3.y, T(1)))
+ + i.x + detail::tvec4<T>(i1.x, i2.x, i3.x, T(1)));
+
+ // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope
+ // 7*7*6 = 294, which is close to the ring size 17*17 = 289.
+ detail::tvec4<T> ip = detail::tvec4<T>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0));
+
+ detail::tvec4<T> p0 = grad4(j0, ip);
+ detail::tvec4<T> p1 = grad4(j1.x, ip);
+ detail::tvec4<T> p2 = grad4(j1.y, ip);
+ detail::tvec4<T> p3 = grad4(j1.z, ip);
+ detail::tvec4<T> p4 = grad4(j1.w, ip);
+
+ // Normalise gradients
+ detail::tvec4<T> norm = taylorInvSqrt(detail::tvec4<T>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+ p4 *= taylorInvSqrt(dot(p4, p4));
+
+ // Mix contributions from the five corners
+ detail::tvec3<T> m0 = max(T(0.6) - detail::tvec3<T>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), T(0));
+ detail::tvec2<T> m1 = max(T(0.6) - detail::tvec2<T>(dot(x3, x3), dot(x4, x4) ), T(0));
+ m0 = m0 * m0;
+ m1 = m1 * m1;
+ return T(49) *
+ (dot(m0 * m0, detail::tvec3<T>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) +
+ dot(m1 * m1, detail::tvec2<T>(dot(p3, x3), dot(p4, x4))));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec2<T> noise2(glm::detail::tvec2<T> const & x)
+ {
+ return glm::detail::tvec2<T>(
+ noise1(x + glm::detail::tvec2<T>(0.0)),
+ noise1(glm::detail::tvec2<T>(0.0) - x));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec2<T> noise2(glm::detail::tvec3<T> const & x)
+ {
+ return glm::detail::tvec2<T>(
+ noise1(x + glm::detail::tvec3<T>(0.0)),
+ noise1(glm::detail::tvec3<T>(0.0) - x));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec2<T> noise2(glm::detail::tvec4<T> const & x)
+ {
+ return glm::detail::tvec2<T>(
+ noise1(x + glm::detail::tvec4<T>(0.0)),
+ noise1(glm::detail::tvec4<T>(0.0) - x));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec3<T> noise3(glm::detail::tvec2<T> const & x)
+ {
+ return glm::detail::tvec3<T>(
+ noise1(x - glm::detail::tvec2<T>(1.0)),
+ noise1(x + glm::detail::tvec2<T>(0.0)),
+ noise1(x + glm::detail::tvec2<T>(1.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec3<T> noise3(glm::detail::tvec3<T> const & x)
+ {
+ return glm::detail::tvec3<T>(
+ noise1(x - glm::detail::tvec3<T>(1.0)),
+ noise1(x + glm::detail::tvec3<T>(0.0)),
+ noise1(x + glm::detail::tvec3<T>(1.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec3<T> noise3(glm::detail::tvec4<T> const & x)
+ {
+ return glm::detail::tvec3<T>(
+ noise1(x - glm::detail::tvec4<T>(1.0)),
+ noise1(x + glm::detail::tvec4<T>(0.0)),
+ noise1(x + glm::detail::tvec4<T>(1.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec4<T> noise4(glm::detail::tvec2<T> const & x)
+ {
+ return glm::detail::tvec4<T>(
+ noise1(x - glm::detail::tvec2<T>(1.0)),
+ noise1(x + glm::detail::tvec2<T>(0.0)),
+ noise1(x + glm::detail::tvec2<T>(1.0)),
+ noise1(x + glm::detail::tvec2<T>(2.0)));
+ }
+
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec4<T> noise4(glm::detail::tvec3<T> const & x)
+ {
+ return glm::detail::tvec4<T>(
+ noise1(x - glm::detail::tvec3<T>(1.0)),
+ noise1(x + glm::detail::tvec3<T>(0.0)),
+ noise1(x + glm::detail::tvec3<T>(1.0)),
+ noise1(x + glm::detail::tvec3<T>(2.0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER glm::detail::tvec4<T> noise4(glm::detail::tvec4<T> const & x)
+ {
+ return glm::detail::tvec4<T>(
+ noise1(x - glm::detail::tvec4<T>(1.0)),
+ noise1(x + glm::detail::tvec4<T>(0.0)),
+ noise1(x + glm::detail::tvec4<T>(1.0)),
+ noise1(x + glm::detail::tvec4<T>(2.0)));
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_packing.hpp b/include/gal/opengl/glm/core/func_packing.hpp
new file mode 100644
index 0000000..b4312e1
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_packing.hpp
@@ -0,0 +1,193 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_packing.hpp
+/// @date 2010-03-17 / 2011-06-15
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+///
+/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions
+/// @ingroup core
+///
+/// These functions do not operate component-wise, rather as described in each case.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_CORE_func_packing
+#define GLM_CORE_func_packing GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_packing
+ /// @{
+
+ //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ //! Then, the results are packed into the returned 32-bit unsigned integer.
+ //!
+ //! The conversion for component c of v to fixed point is done as follows:
+ //! packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)
+ //!
+ //! The first component of the vector will be written to the least significant bits of the output;
+ //! the last component will be written to the most significant bits.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml">GLSL packUnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v);
+
+ //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ //! Then, the results are packed into the returned 32-bit unsigned integer.
+ //!
+ //! The conversion for component c of v to fixed point is done as follows:
+ //! packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)
+ //!
+ //! The first component of the vector will be written to the least significant bits of the output;
+ //! the last component will be written to the most significant bits.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml">GLSL packSnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::uint32 packSnorm2x16(detail::tvec2<detail::float32> const & v);
+
+ //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ //! Then, the results are packed into the returned 32-bit unsigned integer.
+ //!
+ //! The conversion for component c of v to fixed point is done as follows:
+ //! packUnorm4x8: round(clamp(c, 0, +1) * 255.0)
+ //!
+ //! The first component of the vector will be written to the least significant bits of the output;
+ //! the last component will be written to the most significant bits.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v);
+
+ //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ //! Then, the results are packed into the returned 32-bit unsigned integer.
+ //!
+ //! The conversion for component c of v to fixed point is done as follows:
+ //! packSnorm4x8: round(clamp(c, -1, +1) * 127.0)
+ //!
+ //! The first component of the vector will be written to the least significant bits of the output;
+ //! the last component will be written to the most significant bits.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v);
+
+ //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ //!
+ //! The conversion for unpacked fixed-point value f to floating point is done as follows:
+ //! unpackUnorm2x16: f / 65535.0
+ //!
+ //! The first component of the returned vector will be extracted from the least significant bits of the input;
+ //! the last component will be extracted from the most significant bits.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p);
+
+ //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ //!
+ //! The conversion for unpacked fixed-point value f to floating point is done as follows:
+ //! unpackSnorm2x16: clamp(f / 32767.0, -1, +1)
+ //!
+ //! The first component of the returned vector will be extracted from the least significant bits of the input;
+ //! the last component will be extracted from the most significant bits.
+ //!
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::tvec2<detail::float32> unpackSnorm2x16(detail::uint32 const & p);
+
+ /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnorm4x8: f / 255.0
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p);
+
+ /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm4x8: clamp(f / 127.0, -1, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p);
+
+ /// Returns a double-precision value obtained by packing the components of v into a 64-bit value.
+ /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified.
+ /// Otherwise, the bit- level representation of v is preserved.
+ /// The first vector component specifies the 32 least significant bits;
+ /// the second component specifies the 32 most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml">GLSL packDouble2x32 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL double packDouble2x32(detail::tvec2<detail::uint32> const & v);
+
+ /// Returns a two-component unsigned integer vector representation of v.
+ /// The bit-level representation of v is preserved.
+ /// The first component of the vector contains the 32 least significant bits of the double;
+ /// the second component consists the 32 most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml">GLSL unpackDouble2x32 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL detail::tvec2<detail::uint32> unpackDouble2x32(double const & v);
+
+ /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector
+ /// to the 16-bit floating-point representation found in the OpenGL Specification,
+ /// and then packing these two 16- bit integers into a 32-bit unsigned integer.
+ /// The first vector component specifies the 16 least-significant bits of the result;
+ /// the second component specifies the 16 most-significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint packHalf2x16(vec2 const & v);
+
+ /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values,
+ /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,
+ /// and converting them to 32-bit floating-point values.
+ /// The first component of the vector is obtained from the 16 least-significant bits of v;
+ /// the second component is obtained from the 16 most-significant bits of v.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec2 unpackHalf2x16(uint const & v);
+
+ /// @}
+}//namespace glm
+
+#include "func_packing.inl"
+
+#endif//GLM_CORE_func_packing
+
diff --git a/include/gal/opengl/glm/core/func_packing.inl b/include/gal/opengl/glm/core/func_packing.inl
new file mode 100644
index 0000000..e10e161
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_packing.inl
@@ -0,0 +1,208 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_packing.inl
+/// @date 2010-03-17 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v)
+ {
+ detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f)));
+ detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f)));
+ return detail::uint32((B << 16) | A);
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p)
+ {
+ detail::uint32 Mask16((1 << 16) - 1);
+ detail::uint32 A((p >> 0) & Mask16);
+ detail::uint32 B((p >> 16) & Mask16);
+ return detail::tvec2<detail::float32>(
+ A * 1.0f / 65535.0f,
+ B * 1.0f / 65535.0f);
+ }
+
+ GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2<detail::float32> const & v)
+ {
+ union iu
+ {
+ detail::int16 i;
+ detail::uint16 u;
+ } A, B;
+
+ detail::tvec2<detail::float32> Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f;
+ A.i = detail::int16(round(Unpack.x));
+ B.i = detail::int16(round(Unpack.y));
+ detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0);
+ return Pack;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<detail::float32> unpackSnorm2x16(detail::uint32 const & p)
+ {
+ union iu
+ {
+ detail::int16 i;
+ detail::uint16 u;
+ } A, B;
+
+ detail::uint32 Mask16((1 << 16) - 1);
+ A.u = detail::uint16((p >> 0) & Mask16);
+ B.u = detail::uint16((p >> 16) & Mask16);
+ detail::tvec2<detail::float32> Pack(A.i, B.i);
+
+ return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v)
+ {
+ detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f));
+ detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f));
+ detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f));
+ detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f));
+ return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p)
+ {
+ detail::uint32 Mask8((1 << 8) - 1);
+ detail::uint32 A((p >> 0) & Mask8);
+ detail::uint32 B((p >> 8) & Mask8);
+ detail::uint32 C((p >> 16) & Mask8);
+ detail::uint32 D((p >> 24) & Mask8);
+ return detail::tvec4<detail::float32>(
+ A * 1.0f / 255.0f,
+ B * 1.0f / 255.0f,
+ C * 1.0f / 255.0f,
+ D * 1.0f / 255.0f);
+ }
+
+ GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v)
+ {
+ union iu
+ {
+ detail::int8 i;
+ detail::uint8 u;
+ } A, B, C, D;
+
+ detail::tvec4<detail::float32> Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f;
+ A.i = detail::int8(round(Unpack.x));
+ B.i = detail::int8(round(Unpack.y));
+ C.i = detail::int8(round(Unpack.z));
+ D.i = detail::int8(round(Unpack.w));
+ detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0);
+ return Pack;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p)
+ {
+ union iu
+ {
+ detail::int8 i;
+ detail::uint8 u;
+ } A, B, C, D;
+
+ detail::uint32 Mask8((1 << 8) - 1);
+ A.u = detail::uint8((p >> 0) & Mask8);
+ B.u = detail::uint8((p >> 8) & Mask8);
+ C.u = detail::uint8((p >> 16) & Mask8);
+ D.u = detail::uint8((p >> 24) & Mask8);
+ detail::tvec4<detail::float32> Pack(A.i, B.i, C.i, D.i);
+
+ return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2<detail::uint32> const & v)
+ {
+ struct uint32_pair
+ {
+ detail::uint32 x;
+ detail::uint32 y;
+ };
+
+ union helper
+ {
+ uint32_pair input;
+ double output;
+ } Helper;
+
+ Helper.input.x = v.x;
+ Helper.input.y = v.y;
+
+ return Helper.output;
+ //return *(double*)&v;
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<uint> unpackDouble2x32(double const & v)
+ {
+ struct uint32_pair
+ {
+ detail::uint32 x;
+ detail::uint32 y;
+ };
+
+ union helper
+ {
+ double input;
+ uint32_pair output;
+ } Helper;
+
+ Helper.input = v;
+
+ return detail::tvec2<uint>(Helper.output.x, Helper.output.y);
+ }
+
+ GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2<float> const & v)
+ {
+ union helper
+ {
+ uint other;
+ struct
+ {
+ detail::hdata a, b;
+ } orig;
+ } Pack;
+
+ Pack.orig.a = detail::toFloat16(v.x);
+ Pack.orig.b = detail::toFloat16(v.y);
+ return Pack.other;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v)
+ {
+ union helper
+ {
+ uint other;
+ struct
+ {
+ detail::hdata a, b;
+ } orig;
+ } Unpack;
+ Unpack.other = v;
+
+ return vec2(detail::toFloat32(Unpack.orig.a), detail::toFloat32(Unpack.orig.b));
+ }
+}//namespace glm
+
diff --git a/include/gal/opengl/glm/core/func_trigonometric.hpp b/include/gal/opengl/glm/core/func_trigonometric.hpp
new file mode 100644
index 0000000..9954d9c
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_trigonometric.hpp
@@ -0,0 +1,203 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_trigonometric.hpp
+/// @date 2008-08-01 / 2011-06-15
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+///
+/// @defgroup core_func_trigonometric Angle and Trigonometry Functions
+/// @ingroup core
+///
+/// Function parameters specified as angle are assumed to be in units of radians.
+/// In no case will any of these functions result in a divide by zero error. If
+/// the divisor of a ratio is 0, then results will be undefined.
+///
+/// These all operate component-wise. The description is per component.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_CORE_func_trigonometric
+#define GLM_CORE_func_trigonometric GLM_VERSION
+
+namespace glm
+{
+ /// @addtogroup core_func_trigonometric
+ /// @{
+
+ /// Converts degrees to radians and returns the result.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType radians(genType const & degrees);
+
+ /// Converts radians to degrees and returns the result.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType degrees(genType const & radians);
+
+ /// The standard trigonometric sine function.
+ /// The values returned by this function will range from [-1, 1].
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType sin(genType const & angle);
+
+ /// The standard trigonometric cosine function.
+ /// The values returned by this function will range from [-1, 1].
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType cos(genType const & angle);
+
+ /// The standard trigonometric tangent function.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType tan(genType const & angle);
+
+ /// Arc sine. Returns an angle whose sine is x.
+ /// The range of values returned by this function is [-PI/2, PI/2].
+ /// Results are undefined if |x| > 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType asin(genType const & x);
+
+ /// Arc cosine. Returns an angle whose sine is x.
+ /// The range of values returned by this function is [0, PI].
+ /// Results are undefined if |x| > 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType acos(genType const & x);
+
+ /// Arc tangent. Returns an angle whose tangent is y/x.
+ /// The signs of x and y are used to determine what
+ /// quadrant the angle is in. The range of values returned
+ /// by this function is [-PI, PI]. Results are undefined
+ /// if x and y are both 0.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType atan(genType const & y, genType const & x);
+
+ /// Arc tangent. Returns an angle whose tangent is y_over_x.
+ /// The range of values returned by this function is [-PI/2, PI/2].
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType atan(genType const & y_over_x);
+
+ /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType sinh(genType const & angle);
+
+ /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType cosh(genType const & angle);
+
+ /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType tanh(genType const & angle);
+
+ /// Arc hyperbolic sine; returns the inverse of sinh.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType asinh(genType const & x);
+
+ /// Arc hyperbolic cosine; returns the non-negative inverse
+ /// of cosh. Results are undefined if x < 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType acosh(genType const & x);
+
+ /// Arc hyperbolic tangent; returns the inverse of tanh.
+ /// Results are undefined if abs(x) >= 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType atanh(genType const & x);
+
+ /// @}
+}//namespace glm
+
+#include "func_trigonometric.inl"
+
+#endif//GLM_CORE_func_trigonometric
+
+
diff --git a/include/gal/opengl/glm/core/func_trigonometric.inl b/include/gal/opengl/glm/core/func_trigonometric.inl
new file mode 100644
index 0000000..bd59cd7
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_trigonometric.inl
@@ -0,0 +1,244 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_trigonometric.inl
+/// @date 2008-08-03 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // radians
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType radians
+ (
+ genType const & degrees
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'radians' only accept floating-point input");
+
+ genType const pi = genType(3.1415926535897932384626433832795);
+ return degrees * (pi / genType(180));
+ }
+
+ VECTORIZE_VEC(radians)
+
+ // degrees
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType degrees
+ (
+ genType const & radians
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'degrees' only accept floating-point input");
+
+ const genType pi = genType(3.1415926535897932384626433832795);
+ return radians * (genType(180) / pi);
+ }
+
+ VECTORIZE_VEC(degrees)
+
+ // sin
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sin
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sin' only accept floating-point input");
+
+ return genType(::std::sin(angle));
+ }
+
+ VECTORIZE_VEC(sin)
+
+ // cos
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType cos(genType const & angle)
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cos' only accept floating-point input");
+
+ return genType(::std::cos(angle));
+ }
+
+ VECTORIZE_VEC(cos)
+
+ // tan
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType tan
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tan' only accept floating-point input");
+
+ return genType(::std::tan(angle));
+ }
+
+ VECTORIZE_VEC(tan)
+
+ // asin
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asin
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asin' only accept floating-point input");
+
+ return genType(::std::asin(x));
+ }
+
+ VECTORIZE_VEC(asin)
+
+ // acos
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acos
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acos' only accept floating-point input");
+
+ return genType(::std::acos(x));
+ }
+
+ VECTORIZE_VEC(acos)
+
+ // atan
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType atan
+ (
+ genType const & y,
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atan' only accept floating-point input");
+
+ return genType(::std::atan2(y, x));
+ }
+
+ VECTORIZE_VEC_VEC(atan)
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType atan
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atan' only accept floating-point input");
+
+ return genType(::std::atan(x));
+ }
+
+ VECTORIZE_VEC(atan)
+
+ // sinh
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sinh
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sinh' only accept floating-point input");
+
+ return genType(std::sinh(angle));
+ }
+
+ VECTORIZE_VEC(sinh)
+
+ // cosh
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType cosh
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cosh' only accept floating-point input");
+
+ return genType(std::cosh(angle));
+ }
+
+ VECTORIZE_VEC(cosh)
+
+ // tanh
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType tanh
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tanh' only accept floating-point input");
+
+ return genType(std::tanh(angle));
+ }
+
+ VECTORIZE_VEC(tanh)
+
+ // asinh
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asinh
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asinh' only accept floating-point input");
+
+ return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x));
+ }
+
+ VECTORIZE_VEC(asinh)
+
+ // acosh
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acosh
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acosh' only accept floating-point input");
+
+ if(x < genType(1))
+ return genType(0);
+ return log(x + sqrt(x * x - genType(1)));
+ }
+
+ VECTORIZE_VEC(acosh)
+
+ // atanh
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType atanh
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atanh' only accept floating-point input");
+
+ if(abs(x) >= genType(1))
+ return 0;
+ return genType(0.5) * log((genType(1) + x) / (genType(1) - x));
+ }
+
+ VECTORIZE_VEC(atanh)
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/func_vector_relational.hpp b/include/gal/opengl/glm/core/func_vector_relational.hpp
new file mode 100644
index 0000000..4ffe14e
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_vector_relational.hpp
@@ -0,0 +1,138 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_vector_relational.hpp
+/// @date 2008-08-03 / 2011-06-15
+/// @author Christophe Riccio
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+///
+/// @defgroup core_func_vector_relational Vector Relational Functions
+/// @ingroup core
+///
+/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to
+/// operate on scalars and produce scalar Boolean results. For vector results,
+/// use the following built-in functions.
+///
+/// In all cases, the sizes of all the input and return vectors for any particular
+/// call must match.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_CORE_func_vector_relational
+#define GLM_CORE_func_vector_relational GLM_VERSION
+
+#include "_detail.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_vector_relational
+ /// @{
+
+ /// Returns the component-wise comparison result of x < y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml">GLSL lessThan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::bool_type lessThan(vecType const & x, vecType const & y);
+
+ /// Returns the component-wise comparison of result x <= y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml">GLSL lessThanEqual man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y);
+
+ /// Returns the component-wise comparison of result x > y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml">GLSL greaterThan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::bool_type greaterThan(vecType const & x, vecType const & y);
+
+ /// Returns the component-wise comparison of result x >= y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml">GLSL greaterThanEqual man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y);
+
+ /// Returns the component-wise comparison of result x == y.
+ ///
+ /// @tparam vecType Floating-point, integer or boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml">GLSL equal man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::bool_type equal(vecType const & x, vecType const & y);
+
+ /// Returns the component-wise comparison of result x != y.
+ ///
+ /// @tparam vecType Floating-point, integer or boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml">GLSL notEqual man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::bool_type notEqual(vecType const & x, vecType const & y);
+
+ /// Returns true if any component of x is true.
+ ///
+ /// @tparam vecType Boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml">GLSL any man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <template <typename> class vecType>
+ GLM_FUNC_DECL bool any(vecType<bool> const & v);
+
+ /// Returns true if all components of x are true.
+ ///
+ /// @tparam vecType Boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml">GLSL all man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <template <typename> class vecType>
+ GLM_FUNC_DECL bool all(vecType<bool> const & v);
+
+ /// Returns the component-wise logical complement of x.
+ /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.
+ ///
+ /// @tparam vecType Boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml">GLSL not man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <template <typename> class vecType>
+ GLM_FUNC_DECL vecType<bool> not_(vecType<bool> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "func_vector_relational.inl"
+
+#endif//GLM_CORE_func_vector_relational
diff --git a/include/gal/opengl/glm/core/func_vector_relational.inl b/include/gal/opengl/glm/core/func_vector_relational.inl
new file mode 100644
index 0000000..7fb4f43
--- /dev/null
+++ b/include/gal/opengl/glm/core/func_vector_relational.inl
@@ -0,0 +1,178 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/func_vector_relational.inl
+/// @date 2008-08-03 / 2011-09-09
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER typename vecType<T>::bool_type lessThan
+ (
+ vecType<T> const & x,
+ vecType<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
+ "Invalid template instantiation of 'lessThan', GLM vector types required");
+ GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
+ "Invalid template instantiation of 'lessThan', GLM vector types required floating-point or integer value types vectors");
+ assert(x.length() == y.length());
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < x.length(); ++i)
+ Result[i] = x[i] < y[i];
+
+ return Result;
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER typename vecType<T>::bool_type lessThanEqual
+ (
+ vecType<T> const & x,
+ vecType<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
+ "Invalid template instantiation of 'lessThanEqual', GLM vector types required");
+ GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
+ "Invalid template instantiation of 'lessThanEqual', GLM vector types required floating-point or integer value types vectors");
+ assert(x.length() == y.length());
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < x.length(); ++i)
+ Result[i] = x[i] <= y[i];
+ return Result;
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER typename vecType<T>::bool_type greaterThan
+ (
+ vecType<T> const & x,
+ vecType<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
+ "Invalid template instantiation of 'greaterThan', GLM vector types required");
+ GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
+ "Invalid template instantiation of 'greaterThan', GLM vector types required floating-point or integer value types vectors");
+ assert(x.length() == y.length());
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < x.length(); ++i)
+ Result[i] = x[i] > y[i];
+ return Result;
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER typename vecType<T>::bool_type greaterThanEqual
+ (
+ vecType<T> const & x,
+ vecType<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
+ "Invalid template instantiation of 'greaterThanEqual', GLM vector types required");
+ GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
+ "Invalid template instantiation of 'greaterThanEqual', GLM vector types required floating-point or integer value types vectors");
+ assert(x.length() == y.length());
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < x.length(); ++i)
+ Result[i] = x[i] >= y[i];
+ return Result;
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER typename vecType<T>::bool_type equal
+ (
+ vecType<T> const & x,
+ vecType<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
+ "Invalid template instantiation of 'equal', GLM vector types required");
+ assert(x.length() == y.length());
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < x.length(); ++i)
+ Result[i] = x[i] == y[i];
+ return Result;
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER typename vecType<T>::bool_type notEqual
+ (
+ vecType<T> const & x,
+ vecType<T> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
+ "Invalid template instantiation of 'notEqual', GLM vector types required");
+ assert(x.length() == y.length());
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < x.length(); ++i)
+ Result[i] = x[i] != y[i];
+ return Result;
+ }
+
+ template <template <typename> class vecType>
+ GLM_FUNC_QUALIFIER bool any(vecType<bool> const & v)
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
+ "Invalid template instantiation of 'any', GLM boolean vector types required");
+
+ bool Result = false;
+ for(typename vecType<bool>::size_type i = 0; i < v.length(); ++i)
+ Result = Result || v[i];
+ return Result;
+ }
+
+ template <template <typename> class vecType>
+ GLM_FUNC_QUALIFIER bool all(vecType<bool> const & v)
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
+ "Invalid template instantiation of 'all', GLM boolean vector types required");
+
+ bool Result = true;
+ for(typename vecType<bool>::size_type i = 0; i < v.length(); ++i)
+ Result = Result && v[i];
+ return Result;
+ }
+
+ template <template <typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool> not_(vecType<bool> const & v)
+ {
+ GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
+ "Invalid template instantiation of 'not_', GLM vector types required");
+
+ typename vecType<bool>::bool_type Result(vecType<bool>::null);
+ for(typename vecType<bool>::size_type i = 0; i < v.length(); ++i)
+ Result[i] = !v[i];
+ return Result;
+ }
+}//namespace glm
+
diff --git a/include/gal/opengl/glm/core/hint.hpp b/include/gal/opengl/glm/core/hint.hpp
new file mode 100644
index 0000000..79433a1
--- /dev/null
+++ b/include/gal/opengl/glm/core/hint.hpp
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/hint.hpp
+/// @date 2008-08-14 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type
+#define glm_core_type
+
+namespace glm
+{
+ // Use dont_care, nicest and fastest to optimize implementations.
+ class dont_care {};
+ class nicest {};
+ class fastest {};
+}//namespace glm
+
+#endif//glm_core_type
diff --git a/include/gal/opengl/glm/core/intrinsic_common.hpp b/include/gal/opengl/glm/core/intrinsic_common.hpp
new file mode 100644
index 0000000..a435522
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_common.hpp
@@ -0,0 +1,89 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_common.hpp
+/// @date 2009-05-11 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_detail_intrinsic_common
+#define glm_detail_intrinsic_common
+
+#include "setup.hpp"
+
+#if(!(GLM_ARCH & GLM_ARCH_SSE2))
+# error "SSE2 instructions not supported or enabled"
+#else
+
+namespace glm{
+namespace detail
+{
+ __m128 sse_abs_ps(__m128 x);
+
+ __m128 sse_sgn_ps(__m128 x);
+
+ //floor
+ __m128 sse_flr_ps(__m128 v);
+
+ //trunc
+ __m128 sse_trc_ps(__m128 v);
+
+ //round
+ __m128 sse_nd_ps(__m128 v);
+
+ //roundEven
+ __m128 sse_rde_ps(__m128 v);
+
+ __m128 sse_rnd_ps(__m128 x);
+
+ __m128 sse_ceil_ps(__m128 v);
+
+ __m128 sse_frc_ps(__m128 x);
+
+ __m128 sse_mod_ps(__m128 x, __m128 y);
+
+ __m128 sse_modf_ps(__m128 x, __m128i & i);
+
+ //GLM_FUNC_QUALIFIER __m128 sse_min_ps(__m128 x, __m128 y)
+
+ //GLM_FUNC_QUALIFIER __m128 sse_max_ps(__m128 x, __m128 y)
+
+ __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
+
+ __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
+
+ __m128 sse_stp_ps(__m128 edge, __m128 x);
+
+ __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
+
+ __m128 sse_nan_ps(__m128 x);
+
+ __m128 sse_inf_ps(__m128 x);
+
+}//namespace detail
+}//namespace glm
+
+#include "intrinsic_common.inl"
+
+#endif//GLM_ARCH
+#endif//glm_detail_intrinsic_common
diff --git a/include/gal/opengl/glm/core/intrinsic_common.inl b/include/gal/opengl/glm/core/intrinsic_common.inl
new file mode 100644
index 0000000..ba7ac94
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_common.inl
@@ -0,0 +1,313 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_common.inl
+/// @date 2009-05-08 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail{
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+#pragma warning(push)
+#pragma warning(disable : 4510 4512 4610)
+#endif
+
+ union ieee754_QNAN
+ {
+ const float f;
+ struct i
+ {
+ const unsigned int mantissa:23, exp:8, sign:1;
+ };
+
+ ieee754_QNAN() : f(0.0)/*, mantissa(0x7FFFFF), exp(0xFF), sign(0x0)*/ {}
+ };
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+#pragma warning(pop)
+#endif
+
+ static const __m128 GLM_VAR_USED zero = _mm_setzero_ps();
+ static const __m128 GLM_VAR_USED one = _mm_set_ps1(1.0f);
+ static const __m128 GLM_VAR_USED minus_one = _mm_set_ps1(-1.0f);
+ static const __m128 GLM_VAR_USED two = _mm_set_ps1(2.0f);
+ static const __m128 GLM_VAR_USED three = _mm_set_ps1(3.0f);
+ static const __m128 GLM_VAR_USED pi = _mm_set_ps1(3.1415926535897932384626433832795f);
+ static const __m128 GLM_VAR_USED hundred_eighty = _mm_set_ps1(180.f);
+ static const __m128 GLM_VAR_USED pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f);
+ static const __m128 GLM_VAR_USED hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f);
+
+ static const ieee754_QNAN absMask;
+ static const __m128 GLM_VAR_USED abs4Mask = _mm_set_ps1(absMask.f);
+
+ static const __m128 GLM_VAR_USED _epi32_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(static_cast<int>(0x80000000)));
+ //static const __m128 GLM_VAR_USED _epi32_inv_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF));
+ //static const __m128 GLM_VAR_USED _epi32_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
+ //static const __m128 GLM_VAR_USED _epi32_inv_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x807FFFFF));
+ //static const __m128 GLM_VAR_USED _epi32_min_norm_pos = _mm_castsi128_ps(_mm_set1_epi32(0x00800000));
+ static const __m128 GLM_VAR_USED _epi32_0 = _mm_set_ps1(0);
+ static const __m128 GLM_VAR_USED _epi32_1 = _mm_set_ps1(1);
+ static const __m128 GLM_VAR_USED _epi32_2 = _mm_set_ps1(2);
+ static const __m128 GLM_VAR_USED _epi32_3 = _mm_set_ps1(3);
+ static const __m128 GLM_VAR_USED _epi32_4 = _mm_set_ps1(4);
+ static const __m128 GLM_VAR_USED _epi32_5 = _mm_set_ps1(5);
+ static const __m128 GLM_VAR_USED _epi32_6 = _mm_set_ps1(6);
+ static const __m128 GLM_VAR_USED _epi32_7 = _mm_set_ps1(7);
+ static const __m128 GLM_VAR_USED _epi32_8 = _mm_set_ps1(8);
+ static const __m128 GLM_VAR_USED _epi32_9 = _mm_set_ps1(9);
+ static const __m128 GLM_VAR_USED _epi32_127 = _mm_set_ps1(127);
+ //static const __m128 GLM_VAR_USED _epi32_ninf = _mm_castsi128_ps(_mm_set1_epi32(0xFF800000));
+ //static const __m128 GLM_VAR_USED _epi32_pinf = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
+
+ static const __m128 GLM_VAR_USED _ps_1_3 = _mm_set_ps1(0.33333333333333333333333333333333f);
+ static const __m128 GLM_VAR_USED _ps_0p5 = _mm_set_ps1(0.5f);
+ static const __m128 GLM_VAR_USED _ps_1 = _mm_set_ps1(1.0f);
+ static const __m128 GLM_VAR_USED _ps_m1 = _mm_set_ps1(-1.0f);
+ static const __m128 GLM_VAR_USED _ps_2 = _mm_set_ps1(2.0f);
+ static const __m128 GLM_VAR_USED _ps_3 = _mm_set_ps1(3.0f);
+ static const __m128 GLM_VAR_USED _ps_127 = _mm_set_ps1(127.0f);
+ static const __m128 GLM_VAR_USED _ps_255 = _mm_set_ps1(255.0f);
+ static const __m128 GLM_VAR_USED _ps_2pow23 = _mm_set_ps1(8388608.0f);
+
+ static const __m128 GLM_VAR_USED _ps_1_0_0_0 = _mm_set_ps(1.0f, 0.0f, 0.0f, 0.0f);
+ static const __m128 GLM_VAR_USED _ps_0_1_0_0 = _mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f);
+ static const __m128 GLM_VAR_USED _ps_0_0_1_0 = _mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f);
+ static const __m128 GLM_VAR_USED _ps_0_0_0_1 = _mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f);
+
+ static const __m128 GLM_VAR_USED _ps_pi = _mm_set_ps1(3.1415926535897932384626433832795f);
+ static const __m128 GLM_VAR_USED _ps_pi2 = _mm_set_ps1(6.283185307179586476925286766560f);
+ static const __m128 GLM_VAR_USED _ps_2_pi = _mm_set_ps1(0.63661977236758134307553505349006f);
+ static const __m128 GLM_VAR_USED _ps_pi_2 = _mm_set_ps1(1.5707963267948966192313216916398f);
+ static const __m128 GLM_VAR_USED _ps_4_pi = _mm_set_ps1(1.2732395447351626861510701069801f);
+ static const __m128 GLM_VAR_USED _ps_pi_4 = _mm_set_ps1(0.78539816339744830961566084581988f);
+
+ static const __m128 GLM_VAR_USED _ps_sincos_p0 = _mm_set_ps1(0.15707963267948963959e1f);
+ static const __m128 GLM_VAR_USED _ps_sincos_p1 = _mm_set_ps1(-0.64596409750621907082e0f);
+ static const __m128 GLM_VAR_USED _ps_sincos_p2 = _mm_set_ps1(0.7969262624561800806e-1f);
+ static const __m128 GLM_VAR_USED _ps_sincos_p3 = _mm_set_ps1(-0.468175413106023168e-2f);
+ static const __m128 GLM_VAR_USED _ps_tan_p0 = _mm_set_ps1(-1.79565251976484877988e7f);
+ static const __m128 GLM_VAR_USED _ps_tan_p1 = _mm_set_ps1(1.15351664838587416140e6f);
+ static const __m128 GLM_VAR_USED _ps_tan_p2 = _mm_set_ps1(-1.30936939181383777646e4f);
+ static const __m128 GLM_VAR_USED _ps_tan_q0 = _mm_set_ps1(-5.38695755929454629881e7f);
+ static const __m128 GLM_VAR_USED _ps_tan_q1 = _mm_set_ps1(2.50083801823357915839e7f);
+ static const __m128 GLM_VAR_USED _ps_tan_q2 = _mm_set_ps1(-1.32089234440210967447e6f);
+ static const __m128 GLM_VAR_USED _ps_tan_q3 = _mm_set_ps1(1.36812963470692954678e4f);
+ static const __m128 GLM_VAR_USED _ps_tan_poleval = _mm_set_ps1(3.68935e19f);
+ static const __m128 GLM_VAR_USED _ps_atan_t0 = _mm_set_ps1(-0.91646118527267623468e-1f);
+ static const __m128 GLM_VAR_USED _ps_atan_t1 = _mm_set_ps1(-0.13956945682312098640e1f);
+ static const __m128 GLM_VAR_USED _ps_atan_t2 = _mm_set_ps1(-0.94393926122725531747e2f);
+ static const __m128 GLM_VAR_USED _ps_atan_t3 = _mm_set_ps1(0.12888383034157279340e2f);
+ static const __m128 GLM_VAR_USED _ps_atan_s0 = _mm_set_ps1(0.12797564625607904396e1f);
+ static const __m128 GLM_VAR_USED _ps_atan_s1 = _mm_set_ps1(0.21972168858277355914e1f);
+ static const __m128 GLM_VAR_USED _ps_atan_s2 = _mm_set_ps1(0.68193064729268275701e1f);
+ static const __m128 GLM_VAR_USED _ps_atan_s3 = _mm_set_ps1(0.28205206687035841409e2f);
+
+ static const __m128 GLM_VAR_USED _ps_exp_hi = _mm_set_ps1(88.3762626647949f);
+ static const __m128 GLM_VAR_USED _ps_exp_lo = _mm_set_ps1(-88.3762626647949f);
+ static const __m128 GLM_VAR_USED _ps_exp_rln2 = _mm_set_ps1(1.4426950408889634073599f);
+ static const __m128 GLM_VAR_USED _ps_exp_p0 = _mm_set_ps1(1.26177193074810590878e-4f);
+ static const __m128 GLM_VAR_USED _ps_exp_p1 = _mm_set_ps1(3.02994407707441961300e-2f);
+ static const __m128 GLM_VAR_USED _ps_exp_q0 = _mm_set_ps1(3.00198505138664455042e-6f);
+ static const __m128 GLM_VAR_USED _ps_exp_q1 = _mm_set_ps1(2.52448340349684104192e-3f);
+ static const __m128 GLM_VAR_USED _ps_exp_q2 = _mm_set_ps1(2.27265548208155028766e-1f);
+ static const __m128 GLM_VAR_USED _ps_exp_q3 = _mm_set_ps1(2.00000000000000000009e0f);
+ static const __m128 GLM_VAR_USED _ps_exp_c1 = _mm_set_ps1(6.93145751953125e-1f);
+ static const __m128 GLM_VAR_USED _ps_exp_c2 = _mm_set_ps1(1.42860682030941723212e-6f);
+ static const __m128 GLM_VAR_USED _ps_exp2_hi = _mm_set_ps1(127.4999961853f);
+ static const __m128 GLM_VAR_USED _ps_exp2_lo = _mm_set_ps1(-127.4999961853f);
+ static const __m128 GLM_VAR_USED _ps_exp2_p0 = _mm_set_ps1(2.30933477057345225087e-2f);
+ static const __m128 GLM_VAR_USED _ps_exp2_p1 = _mm_set_ps1(2.02020656693165307700e1f);
+ static const __m128 GLM_VAR_USED _ps_exp2_p2 = _mm_set_ps1(1.51390680115615096133e3f);
+ static const __m128 GLM_VAR_USED _ps_exp2_q0 = _mm_set_ps1(2.33184211722314911771e2f);
+ static const __m128 GLM_VAR_USED _ps_exp2_q1 = _mm_set_ps1(4.36821166879210612817e3f);
+ static const __m128 GLM_VAR_USED _ps_log_p0 = _mm_set_ps1(-7.89580278884799154124e-1f);
+ static const __m128 GLM_VAR_USED _ps_log_p1 = _mm_set_ps1(1.63866645699558079767e1f);
+ static const __m128 GLM_VAR_USED _ps_log_p2 = _mm_set_ps1(-6.41409952958715622951e1f);
+ static const __m128 GLM_VAR_USED _ps_log_q0 = _mm_set_ps1(-3.56722798256324312549e1f);
+ static const __m128 GLM_VAR_USED _ps_log_q1 = _mm_set_ps1(3.12093766372244180303e2f);
+ static const __m128 GLM_VAR_USED _ps_log_q2 = _mm_set_ps1(-7.69691943550460008604e2f);
+ static const __m128 GLM_VAR_USED _ps_log_c0 = _mm_set_ps1(0.693147180559945f);
+ static const __m128 GLM_VAR_USED _ps_log2_c0 = _mm_set_ps1(1.44269504088896340735992f);
+
+GLM_FUNC_QUALIFIER __m128 sse_abs_ps(__m128 x)
+{
+ return _mm_and_ps(glm::detail::abs4Mask, x);
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_sgn_ps(__m128 x)
+{
+ __m128 Neg = _mm_set1_ps(-1.0f);
+ __m128 Pos = _mm_set1_ps(1.0f);
+
+ __m128 Cmp0 = _mm_cmplt_ps(x, zero);
+ __m128 Cmp1 = _mm_cmpgt_ps(x, zero);
+
+ __m128 And0 = _mm_and_ps(Cmp0, Neg);
+ __m128 And1 = _mm_and_ps(Cmp1, Pos);
+
+ return _mm_or_ps(And0, And1);
+}
+
+//floor
+GLM_FUNC_QUALIFIER __m128 sse_flr_ps(__m128 x)
+{
+ __m128 rnd0 = sse_rnd_ps(x);
+ __m128 cmp0 = _mm_cmplt_ps(x, rnd0);
+ __m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
+ __m128 sub0 = _mm_sub_ps(rnd0, and0);
+ return sub0;
+}
+
+//trunc
+/*
+GLM_FUNC_QUALIFIER __m128 _mm_trc_ps(__m128 v)
+{
+ return __m128();
+}
+*/
+//round
+GLM_FUNC_QUALIFIER __m128 sse_rnd_ps(__m128 x)
+{
+ __m128 and0 = _mm_and_ps(glm::detail::_epi32_sign_mask, x);
+ __m128 or0 = _mm_or_ps(and0, glm::detail::_ps_2pow23);
+ __m128 add0 = _mm_add_ps(x, or0);
+ __m128 sub0 = _mm_sub_ps(add0, or0);
+ return sub0;
+}
+
+//roundEven
+GLM_FUNC_QUALIFIER __m128 sse_rde_ps(__m128 x)
+{
+ __m128 and0 = _mm_and_ps(glm::detail::_epi32_sign_mask, x);
+ __m128 or0 = _mm_or_ps(and0, glm::detail::_ps_2pow23);
+ __m128 add0 = _mm_add_ps(x, or0);
+ __m128 sub0 = _mm_sub_ps(add0, or0);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_ceil_ps(__m128 x)
+{
+ __m128 rnd0 = sse_rnd_ps(x);
+ __m128 cmp0 = _mm_cmpgt_ps(x, rnd0);
+ __m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
+ __m128 add0 = _mm_add_ps(rnd0, and0);
+ return add0;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_frc_ps(__m128 x)
+{
+ __m128 flr0 = sse_flr_ps(x);
+ __m128 sub0 = _mm_sub_ps(x, flr0);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_mod_ps(__m128 x, __m128 y)
+{
+ __m128 div0 = _mm_div_ps(x, y);
+ __m128 flr0 = sse_flr_ps(div0);
+ __m128 mul0 = _mm_mul_ps(y, flr0);
+ __m128 sub0 = _mm_sub_ps(x, mul0);
+ return sub0;
+}
+
+/// TODO
+/*
+GLM_FUNC_QUALIFIER __m128 sse_modf_ps(__m128 x, __m128i & i)
+{
+ __m128 empty;
+ return empty;
+}
+*/
+
+//GLM_FUNC_QUALIFIER __m128 _mm_min_ps(__m128 x, __m128 y)
+
+//GLM_FUNC_QUALIFIER __m128 _mm_max_ps(__m128 x, __m128 y)
+
+GLM_FUNC_QUALIFIER __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal)
+{
+ __m128 min0 = _mm_min_ps(v, maxVal);
+ __m128 max0 = _mm_max_ps(min0, minVal);
+ return max0;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a)
+{
+ __m128 sub0 = _mm_sub_ps(glm::detail::one, a);
+ __m128 mul0 = _mm_mul_ps(v1, sub0);
+ __m128 mul1 = _mm_mul_ps(v2, a);
+ __m128 add0 = _mm_add_ps(mul0, mul1);
+ return add0;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_stp_ps(__m128 edge, __m128 x)
+{
+ __m128 cmp = _mm_cmple_ps(x, edge);
+ if(_mm_movemask_ps(cmp) == 0)
+ return glm::detail::one;
+ else
+ return glm::detail::zero;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x)
+{
+ __m128 sub0 = _mm_sub_ps(x, edge0);
+ __m128 sub1 = _mm_sub_ps(edge1, edge0);
+ __m128 div0 = _mm_sub_ps(sub0, sub1);
+ __m128 clp0 = sse_clp_ps(div0, glm::detail::zero, glm::detail::one);
+ __m128 mul0 = _mm_mul_ps(glm::detail::two, clp0);
+ __m128 sub2 = _mm_sub_ps(glm::detail::three, mul0);
+ __m128 mul1 = _mm_mul_ps(clp0, clp0);
+ __m128 mul2 = _mm_mul_ps(mul1, sub2);
+ return mul2;
+}
+
+/// \todo
+//GLM_FUNC_QUALIFIER __m128 sse_nan_ps(__m128 x)
+//{
+// __m128 empty;
+// return empty;
+//}
+
+/// \todo
+//GLM_FUNC_QUALIFIER __m128 sse_inf_ps(__m128 x)
+//{
+// __m128 empty;
+// return empty;
+//}
+
+// SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration
+// By Elan Ruskin, http://assemblyrequired.crashworks.org/
+GLM_FUNC_QUALIFIER __m128 sse_sqrt_wip_ss(__m128 const & x)
+{
+ __m128 recip = _mm_rsqrt_ss(x); // "estimate" opcode
+ const static __m128 three = {3, 3, 3, 3}; // aligned consts for fast load
+ const static __m128 half = {0.5,0.5,0.5,0.5};
+ __m128 halfrecip = _mm_mul_ss(half, recip);
+ __m128 threeminus_xrr = _mm_sub_ss(three, _mm_mul_ss(x, _mm_mul_ss (recip, recip)));
+ return _mm_mul_ss( halfrecip, threeminus_xrr);
+}
+
+}//namespace detail
+}//namespace glms
diff --git a/include/gal/opengl/glm/core/intrinsic_exponential.hpp b/include/gal/opengl/glm/core/intrinsic_exponential.hpp
new file mode 100644
index 0000000..785527a
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_exponential.hpp
@@ -0,0 +1,79 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_exponential.hpp
+/// @date 2009-05-11 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_detail_intrinsic_exponential
+#define glm_detail_intrinsic_exponential
+
+#include "setup.hpp"
+
+#if(!(GLM_ARCH & GLM_ARCH_SSE2))
+# error "SSE2 instructions not supported or enabled"
+#else
+
+namespace glm{
+namespace detail
+{
+/*
+GLM_FUNC_QUALIFIER __m128 sse_rsqrt_nr_ss(__m128 const x)
+{
+ __m128 recip = _mm_rsqrt_ss( x ); // "estimate" opcode
+ const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
+ const static __m128 half = { 0.5,0.5,0.5,0.5 };
+ __m128 halfrecip = _mm_mul_ss( half, recip );
+ __m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
+ return _mm_mul_ss( halfrecip, threeminus_xrr );
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_normalize_fast_ps( float * RESTRICT vOut, float * RESTRICT vIn )
+{
+ __m128 x = _mm_load_ss(&vIn[0]);
+ __m128 y = _mm_load_ss(&vIn[1]);
+ __m128 z = _mm_load_ss(&vIn[2]);
+
+ const __m128 l = // compute x*x + y*y + z*z
+ _mm_add_ss(
+ _mm_add_ss( _mm_mul_ss(x,x),
+ _mm_mul_ss(y,y)
+ ),
+ _mm_mul_ss( z, z )
+ );
+
+
+ const __m128 rsqt = _mm_rsqrt_nr_ss( l );
+ _mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
+ _mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
+ _mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
+
+ return _mm_mul_ss( l , rsqt );
+}
+*/
+}//namespace detail
+}//namespace glm
+
+#endif//GLM_ARCH
+#endif//glm_detail_intrinsic_exponential
diff --git a/include/gal/opengl/glm/core/intrinsic_exponential.inl b/include/gal/opengl/glm/core/intrinsic_exponential.inl
new file mode 100644
index 0000000..8023e0b
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_exponential.inl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_exponential.inl
+/// @date 2011-06-15 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/core/intrinsic_geometric.hpp b/include/gal/opengl/glm/core/intrinsic_geometric.hpp
new file mode 100644
index 0000000..ff60c48
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_geometric.hpp
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_geometric.hpp
+/// @date 2009-05-08 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_intrinsic_geometric
+#define glm_core_intrinsic_geometric
+
+#include "setup.hpp"
+
+#if(!(GLM_ARCH & GLM_ARCH_SSE2))
+# error "SSE2 instructions not supported or enabled"
+#else
+
+#include "intrinsic_common.hpp"
+
+namespace glm{
+namespace detail
+{
+ //length
+ __m128 sse_len_ps(__m128 x);
+
+ //distance
+ __m128 sse_dst_ps(__m128 p0, __m128 p1);
+
+ //dot
+ __m128 sse_dot_ps(__m128 v1, __m128 v2);
+
+ // SSE1
+ __m128 sse_dot_ss(__m128 v1, __m128 v2);
+
+ //cross
+ __m128 sse_xpd_ps(__m128 v1, __m128 v2);
+
+ //normalize
+ __m128 sse_nrm_ps(__m128 v);
+
+ //faceforward
+ __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
+
+ //reflect
+ __m128 sse_rfe_ps(__m128 I, __m128 N);
+
+ //refract
+ __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
+
+}//namespace detail
+}//namespace glm
+
+#include "intrinsic_geometric.inl"
+
+#endif//GLM_ARCH
+#endif//glm_core_intrinsic_geometric
diff --git a/include/gal/opengl/glm/core/intrinsic_geometric.inl b/include/gal/opengl/glm/core/intrinsic_geometric.inl
new file mode 100644
index 0000000..9411e90
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_geometric.inl
@@ -0,0 +1,146 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_geometric.inl
+/// @date 2009-05-08 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail{
+
+//length
+GLM_FUNC_QUALIFIER __m128 sse_len_ps(__m128 x)
+{
+ __m128 dot0 = sse_dot_ps(x, x);
+ __m128 sqt0 = _mm_sqrt_ps(dot0);
+ return sqt0;
+}
+
+//distance
+GLM_FUNC_QUALIFIER __m128 sse_dst_ps(__m128 p0, __m128 p1)
+{
+ __m128 sub0 = _mm_sub_ps(p0, p1);
+ __m128 len0 = sse_len_ps(sub0);
+ return len0;
+}
+
+//dot
+GLM_FUNC_QUALIFIER __m128 sse_dot_ps(__m128 v1, __m128 v2)
+{
+# if((GLM_ARCH & GLM_ARCH_SSE4) == GLM_ARCH_SSE4)
+ return _mm_dp_ps(v1, v2, 0xff);
+# else
+ __m128 mul0 = _mm_mul_ps(v1, v2);
+ __m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
+ __m128 add0 = _mm_add_ps(mul0, swp0);
+ __m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
+ __m128 add1 = _mm_add_ps(add0, swp1);
+ return add1;
+# endif
+}
+
+// SSE1
+GLM_FUNC_QUALIFIER __m128 sse_dot_ss(__m128 v1, __m128 v2)
+{
+ __m128 mul0 = _mm_mul_ps(v1, v2);
+ __m128 mov0 = _mm_movehl_ps(mul0, mul0);
+ __m128 add0 = _mm_add_ps(mov0, mul0);
+ __m128 swp1 = _mm_shuffle_ps(add0, add0, 1);
+ __m128 add1 = _mm_add_ss(add0, swp1);
+ return add1;
+}
+
+//cross
+GLM_FUNC_QUALIFIER __m128 sse_xpd_ps(__m128 v1, __m128 v2)
+{
+ __m128 swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
+ __m128 swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
+ __m128 swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
+ __m128 swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
+ __m128 mul0 = _mm_mul_ps(swp0, swp3);
+ __m128 mul1 = _mm_mul_ps(swp1, swp2);
+ __m128 sub0 = _mm_sub_ps(mul0, mul1);
+ return sub0;
+}
+
+//normalize
+GLM_FUNC_QUALIFIER __m128 sse_nrm_ps(__m128 v)
+{
+ __m128 dot0 = sse_dot_ps(v, v);
+ __m128 isr0 = _mm_rsqrt_ps(dot0);
+ __m128 mul0 = _mm_mul_ps(v, isr0);
+ return mul0;
+}
+
+//faceforward
+GLM_FUNC_QUALIFIER __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref)
+{
+ //__m128 dot0 = _mm_dot_ps(v, v);
+ //__m128 neg0 = _mm_neg_ps(N);
+ //__m128 sgn0 = _mm_sgn_ps(dot0);
+ //__m128 mix0 = _mm_mix_ps(N, neg0, sgn0);
+ //return mix0;
+
+ __m128 dot0 = sse_dot_ps(Nref, I);
+ __m128 sgn0 = sse_sgn_ps(dot0);
+ __m128 mul0 = _mm_mul_ps(sgn0, glm::detail::minus_one);
+ __m128 mul1 = _mm_mul_ps(N, mul0);
+ return mul1;
+}
+
+//reflect
+GLM_FUNC_QUALIFIER __m128 sse_rfe_ps(__m128 I, __m128 N)
+{
+ __m128 dot0 = sse_dot_ps(N, I);
+ __m128 mul0 = _mm_mul_ps(N, dot0);
+ __m128 mul1 = _mm_mul_ps(mul0, glm::detail::two);
+ __m128 sub0 = _mm_sub_ps(I, mul1);
+ return sub0;
+}
+
+//refract
+GLM_FUNC_QUALIFIER __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta)
+{
+ __m128 dot0 = sse_dot_ps(N, I);
+ __m128 mul0 = _mm_mul_ps(eta, eta);
+ __m128 mul1 = _mm_mul_ps(dot0, dot0);
+ __m128 sub0 = _mm_sub_ps(glm::detail::one, mul0);
+ __m128 sub1 = _mm_sub_ps(glm::detail::one, mul1);
+ __m128 mul2 = _mm_mul_ps(sub0, sub1);
+
+ if(_mm_movemask_ps(_mm_cmplt_ss(mul2, glm::detail::zero)) == 0)
+ return glm::detail::zero;
+
+ __m128 sqt0 = _mm_sqrt_ps(mul2);
+ __m128 mul3 = _mm_mul_ps(eta, dot0);
+ __m128 add0 = _mm_add_ps(mul3, sqt0);
+ __m128 mul4 = _mm_mul_ps(add0, N);
+ __m128 mul5 = _mm_mul_ps(eta, I);
+ __m128 sub2 = _mm_sub_ps(mul5, mul4);
+
+ return sub2;
+}
+
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/intrinsic_matrix.hpp b/include/gal/opengl/glm/core/intrinsic_matrix.hpp
new file mode 100644
index 0000000..b2f4767
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_matrix.hpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_common.hpp
+/// @date 2009-06-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_detail_intrinsic_matrix
+#define glm_detail_intrinsic_matrix
+
+#include "setup.hpp"
+
+#if(!(GLM_ARCH & GLM_ARCH_SSE2))
+# error "SSE2 instructions not supported or enabled"
+#else
+
+#include "intrinsic_geometric.hpp"
+
+namespace glm{
+namespace detail
+{
+ void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
+
+ void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
+
+ __m128 sse_mul_ps(__m128 m[4], __m128 v);
+
+ __m128 sse_mul_ps(__m128 v, __m128 m[4]);
+
+ void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
+
+ void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
+
+ void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
+
+ void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
+
+ __m128 sse_det_ps(__m128 const m[4]);
+
+ __m128 sse_slow_det_ps(__m128 const m[4]);
+
+}//namespace detail
+}//namespace glm
+
+#include "intrinsic_matrix.inl"
+
+#endif//GLM_ARCH
+#endif//glm_detail_intrinsic_matrix
diff --git a/include/gal/opengl/glm/core/intrinsic_matrix.inl b/include/gal/opengl/glm/core/intrinsic_matrix.inl
new file mode 100644
index 0000000..ec53f03
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_matrix.inl
@@ -0,0 +1,1070 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_common.inl
+/// @date 2009-06-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail{
+
+static const __m128 GLM_VAR_USED _m128_rad_ps = _mm_set_ps1(3.141592653589793238462643383279f / 180.f);
+static const __m128 GLM_VAR_USED _m128_deg_ps = _mm_set_ps1(180.f / 3.141592653589793238462643383279f);
+
+template <typename matType>
+GLM_FUNC_QUALIFIER matType sse_comp_mul_ps
+(
+ __m128 const in1[4],
+ __m128 const in2[4],
+ __m128 out[4]
+)
+{
+ out[0] = _mm_mul_ps(in1[0], in2[0]);
+ out[1] = _mm_mul_ps(in1[1], in2[1]);
+ out[2] = _mm_mul_ps(in1[2], in2[2]);
+ out[3] = _mm_mul_ps(in1[3], in2[3]);
+}
+
+GLM_FUNC_QUALIFIER void sse_add_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4])
+{
+ {
+ out[0] = _mm_add_ps(in1[0], in2[0]);
+ out[1] = _mm_add_ps(in1[1], in2[1]);
+ out[2] = _mm_add_ps(in1[2], in2[2]);
+ out[3] = _mm_add_ps(in1[3], in2[3]);
+ }
+}
+
+GLM_FUNC_QUALIFIER void sse_sub_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4])
+{
+ {
+ out[0] = _mm_sub_ps(in1[0], in2[0]);
+ out[1] = _mm_sub_ps(in1[1], in2[1]);
+ out[2] = _mm_sub_ps(in1[2], in2[2]);
+ out[3] = _mm_sub_ps(in1[3], in2[3]);
+ }
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_mul_ps(__m128 const m[4], __m128 v)
+{
+ __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(m[0], v0);
+ __m128 m1 = _mm_mul_ps(m[1], v1);
+ __m128 m2 = _mm_mul_ps(m[2], v2);
+ __m128 m3 = _mm_mul_ps(m[3], v3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ return a2;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_mul_ps(__m128 v, __m128 const m[4])
+{
+ __m128 i0 = m[0];
+ __m128 i1 = m[1];
+ __m128 i2 = m[2];
+ __m128 i3 = m[3];
+
+ __m128 m0 = _mm_mul_ps(v, i0);
+ __m128 m1 = _mm_mul_ps(v, i1);
+ __m128 m2 = _mm_mul_ps(v, i2);
+ __m128 m3 = _mm_mul_ps(v, i3);
+
+ __m128 u0 = _mm_unpacklo_ps(m0, m1);
+ __m128 u1 = _mm_unpackhi_ps(m0, m1);
+ __m128 a0 = _mm_add_ps(u0, u1);
+
+ __m128 u2 = _mm_unpacklo_ps(m2, m3);
+ __m128 u3 = _mm_unpackhi_ps(m2, m3);
+ __m128 a1 = _mm_add_ps(u2, u3);
+
+ __m128 f0 = _mm_movelh_ps(a0, a1);
+ __m128 f1 = _mm_movehl_ps(a1, a0);
+ __m128 f2 = _mm_add_ps(f0, f1);
+
+ return f2;
+}
+
+GLM_FUNC_QUALIFIER void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4])
+{
+ {
+ __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[0] = a2;
+ }
+
+ {
+ __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[1] = a2;
+ }
+
+ {
+ __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[2] = a2;
+ }
+
+ {
+ //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3))
+ __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[3] = a2;
+ }
+}
+
+GLM_FUNC_QUALIFIER void sse_transpose_ps(__m128 const in[4], __m128 out[4])
+{
+ __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44);
+ __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE);
+ __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44);
+ __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE);
+
+ out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88);
+ out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD);
+ out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88);
+ out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD);
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_slow_det_ps(__m128 const in[4])
+{
+ __m128 Fac0;
+ {
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac0 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac1;
+ {
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac1 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+
+ __m128 Fac2;
+ {
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac2 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac3;
+ {
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac3 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac4;
+ {
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac4 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac5;
+ {
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac5 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
+ __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
+
+ // m[1][0]
+ // m[0][0]
+ // m[0][0]
+ // m[0][0]
+ __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][1]
+ // m[0][1]
+ // m[0][1]
+ // m[0][1]
+ __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][2]
+ // m[0][2]
+ // m[0][2]
+ // m[0][2]
+ __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][3]
+ // m[0][3]
+ // m[0][3]
+ // m[0][3]
+ __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // col0
+ // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
+ // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
+ // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
+ // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
+ __m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
+ __m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
+ __m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
+ __m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
+ __m128 Add00 = _mm_add_ps(Sub00, Mul02);
+ __m128 Inv0 = _mm_mul_ps(SignB, Add00);
+
+ // col1
+ // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
+ // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
+ // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
+ // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
+ __m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
+ __m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
+ __m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
+ __m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
+ __m128 Add01 = _mm_add_ps(Sub01, Mul05);
+ __m128 Inv1 = _mm_mul_ps(SignA, Add01);
+
+ // col2
+ // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
+ // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
+ // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
+ // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
+ __m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
+ __m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
+ __m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
+ __m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
+ __m128 Add02 = _mm_add_ps(Sub02, Mul08);
+ __m128 Inv2 = _mm_mul_ps(SignB, Add02);
+
+ // col3
+ // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
+ // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
+ // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
+ // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
+ __m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
+ __m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
+ __m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
+ __m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
+ __m128 Add03 = _mm_add_ps(Sub03, Mul11);
+ __m128 Inv3 = _mm_mul_ps(SignA, Add03);
+
+ __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
+
+ // valType Determinant = m[0][0] * Inverse[0][0]
+ // + m[0][1] * Inverse[1][0]
+ // + m[0][2] * Inverse[2][0]
+ // + m[0][3] * Inverse[3][0];
+ __m128 Det0 = sse_dot_ps(in[0], Row2);
+ return Det0;
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_detd_ps
+(
+ __m128 const m[4]
+)
+{
+ // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(
+
+ //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+
+ // First 2 columns
+ __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2)));
+ __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3)));
+ __m128 MulA = _mm_mul_ps(Swp2A, Swp3A);
+
+ // Second 2 columns
+ __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3)));
+ __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2)));
+ __m128 MulB = _mm_mul_ps(Swp2B, Swp3B);
+
+ // Columns subtraction
+ __m128 SubE = _mm_sub_ps(MulA, MulB);
+
+ // Last 2 rows
+ __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2)));
+ __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0)));
+ __m128 MulC = _mm_mul_ps(Swp2C, Swp3C);
+ __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);
+
+ //detail::tvec4<T> DetCof(
+ // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
+ // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
+ // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
+ // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
+
+ __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0)));
+ __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1)));
+ __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);
+
+ __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));
+ __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1];
+ __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2)));
+ __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);
+
+ __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);
+
+ __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));
+ __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0)));
+ __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3)));
+ __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);
+
+ __m128 AddRes = _mm_add_ps(SubRes, MulFacC);
+ __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));
+
+ //return m[0][0] * DetCof[0]
+ // + m[0][1] * DetCof[1]
+ // + m[0][2] * DetCof[2]
+ // + m[0][3] * DetCof[3];
+
+ return sse_dot_ps(m[0], DetCof);
+}
+
+GLM_FUNC_QUALIFIER __m128 sse_det_ps
+(
+ __m128 const m[4]
+)
+{
+ // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add)
+
+ //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+
+ // First 2 columns
+ __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2));
+ __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3));
+ __m128 MulA = _mm_mul_ps(Swp2A, Swp3A);
+
+ // Second 2 columns
+ __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3));
+ __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2));
+ __m128 MulB = _mm_mul_ps(Swp2B, Swp3B);
+
+ // Columns subtraction
+ __m128 SubE = _mm_sub_ps(MulA, MulB);
+
+ // Last 2 rows
+ __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2));
+ __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0));
+ __m128 MulC = _mm_mul_ps(Swp2C, Swp3C);
+ __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);
+
+ //detail::tvec4<T> DetCof(
+ // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
+ // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
+ // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
+ // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
+
+ __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0));
+ __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1));
+ __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);
+
+ __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));
+ __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1];
+ __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2));
+ __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);
+
+ __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);
+
+ __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));
+ __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0));
+ __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3));
+ __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);
+
+ __m128 AddRes = _mm_add_ps(SubRes, MulFacC);
+ __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));
+
+ //return m[0][0] * DetCof[0]
+ // + m[0][1] * DetCof[1]
+ // + m[0][2] * DetCof[2]
+ // + m[0][3] * DetCof[3];
+
+ return sse_dot_ps(m[0], DetCof);
+}
+
+GLM_FUNC_QUALIFIER void sse_inverse_ps(__m128 const in[4], __m128 out[4])
+{
+ __m128 Fac0;
+ {
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac0 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac1;
+ {
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac1 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+
+ __m128 Fac2;
+ {
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac2 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac3;
+ {
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac3 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac4;
+ {
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac4 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac5;
+ {
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac5 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
+ __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
+
+ // m[1][0]
+ // m[0][0]
+ // m[0][0]
+ // m[0][0]
+ __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][1]
+ // m[0][1]
+ // m[0][1]
+ // m[0][1]
+ __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][2]
+ // m[0][2]
+ // m[0][2]
+ // m[0][2]
+ __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][3]
+ // m[0][3]
+ // m[0][3]
+ // m[0][3]
+ __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // col0
+ // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
+ // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
+ // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
+ // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
+ __m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
+ __m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
+ __m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
+ __m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
+ __m128 Add00 = _mm_add_ps(Sub00, Mul02);
+ __m128 Inv0 = _mm_mul_ps(SignB, Add00);
+
+ // col1
+ // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
+ // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
+ // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
+ // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
+ __m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
+ __m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
+ __m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
+ __m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
+ __m128 Add01 = _mm_add_ps(Sub01, Mul05);
+ __m128 Inv1 = _mm_mul_ps(SignA, Add01);
+
+ // col2
+ // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
+ // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
+ // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
+ // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
+ __m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
+ __m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
+ __m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
+ __m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
+ __m128 Add02 = _mm_add_ps(Sub02, Mul08);
+ __m128 Inv2 = _mm_mul_ps(SignB, Add02);
+
+ // col3
+ // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
+ // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
+ // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
+ // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
+ __m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
+ __m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
+ __m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
+ __m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
+ __m128 Add03 = _mm_add_ps(Sub03, Mul11);
+ __m128 Inv3 = _mm_mul_ps(SignA, Add03);
+
+ __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
+
+ // valType Determinant = m[0][0] * Inverse[0][0]
+ // + m[0][1] * Inverse[1][0]
+ // + m[0][2] * Inverse[2][0]
+ // + m[0][3] * Inverse[3][0];
+ __m128 Det0 = sse_dot_ps(in[0], Row2);
+ __m128 Rcp0 = _mm_div_ps(one, Det0);
+ //__m128 Rcp0 = _mm_rcp_ps(Det0);
+
+ // Inverse /= Determinant;
+ out[0] = _mm_mul_ps(Inv0, Rcp0);
+ out[1] = _mm_mul_ps(Inv1, Rcp0);
+ out[2] = _mm_mul_ps(Inv2, Rcp0);
+ out[3] = _mm_mul_ps(Inv3, Rcp0);
+}
+
+GLM_FUNC_QUALIFIER void sse_inverse_fast_ps(__m128 const in[4], __m128 out[4])
+{
+ __m128 Fac0;
+ {
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac0 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac1;
+ {
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac1 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+
+ __m128 Fac2;
+ {
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac2 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac3;
+ {
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac3 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac4;
+ {
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac4 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac5;
+ {
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac5 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
+ __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
+
+ // m[1][0]
+ // m[0][0]
+ // m[0][0]
+ // m[0][0]
+ __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][1]
+ // m[0][1]
+ // m[0][1]
+ // m[0][1]
+ __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][2]
+ // m[0][2]
+ // m[0][2]
+ // m[0][2]
+ __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][3]
+ // m[0][3]
+ // m[0][3]
+ // m[0][3]
+ __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // col0
+ // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
+ // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
+ // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
+ // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
+ __m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
+ __m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
+ __m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
+ __m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
+ __m128 Add00 = _mm_add_ps(Sub00, Mul02);
+ __m128 Inv0 = _mm_mul_ps(SignB, Add00);
+
+ // col1
+ // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
+ // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
+ // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
+ // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
+ __m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
+ __m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
+ __m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
+ __m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
+ __m128 Add01 = _mm_add_ps(Sub01, Mul05);
+ __m128 Inv1 = _mm_mul_ps(SignA, Add01);
+
+ // col2
+ // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
+ // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
+ // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
+ // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
+ __m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
+ __m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
+ __m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
+ __m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
+ __m128 Add02 = _mm_add_ps(Sub02, Mul08);
+ __m128 Inv2 = _mm_mul_ps(SignB, Add02);
+
+ // col3
+ // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
+ // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
+ // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
+ // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
+ __m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
+ __m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
+ __m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
+ __m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
+ __m128 Add03 = _mm_add_ps(Sub03, Mul11);
+ __m128 Inv3 = _mm_mul_ps(SignA, Add03);
+
+ __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
+
+ // valType Determinant = m[0][0] * Inverse[0][0]
+ // + m[0][1] * Inverse[1][0]
+ // + m[0][2] * Inverse[2][0]
+ // + m[0][3] * Inverse[3][0];
+ __m128 Det0 = sse_dot_ps(in[0], Row2);
+ __m128 Rcp0 = _mm_rcp_ps(Det0);
+ //__m128 Rcp0 = _mm_div_ps(one, Det0);
+ // Inverse /= Determinant;
+ out[0] = _mm_mul_ps(Inv0, Rcp0);
+ out[1] = _mm_mul_ps(Inv1, Rcp0);
+ out[2] = _mm_mul_ps(Inv2, Rcp0);
+ out[3] = _mm_mul_ps(Inv3, Rcp0);
+}
+/*
+GLM_FUNC_QUALIFIER void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4])
+{
+ float a = glm::radians(Angle);
+ float c = cos(a);
+ float s = sin(a);
+
+ glm::vec4 AxisA(v[0], v[1], v[2], float(0));
+ __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x);
+ __m128 AxisC = detail::sse_nrm_ps(AxisB);
+
+ __m128 Cos0 = _mm_set_ss(c);
+ __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Sin0 = _mm_set_ss(s);
+ __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0));
+
+ // detail::tvec3<valType> temp = (valType(1) - c) * axis;
+ __m128 Temp0 = _mm_sub_ps(one, CosA);
+ __m128 Temp1 = _mm_mul_ps(Temp0, AxisC);
+
+ //Rotate[0][0] = c + temp[0] * axis[0];
+ //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
+ //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
+ __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC);
+ __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0));
+ __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0);
+ __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f);
+ __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3));
+ __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2);
+ __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3);
+
+ //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
+ //Rotate[1][1] = c + temp[1] * axis[1];
+ //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
+ __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC);
+ __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1));
+ __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0);
+ __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f);
+ __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2));
+ __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2);
+ __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3);
+
+ //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
+ //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
+ //Rotate[2][2] = c + temp[2] * axis[2];
+ __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC);
+ __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1));
+ __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0);
+ __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f);
+ __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1));
+ __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2);
+ __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3);
+
+ __m128 Result[4];
+ Result[0] = TmpA4;
+ Result[1] = TmpB4;
+ Result[2] = TmpC4;
+ Result[3] = _mm_set_ps(1, 0, 0, 0);
+
+ //detail::tmat4x4<valType> Result(detail::tmat4x4<valType>::null);
+ //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
+ //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];
+ //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
+ //Result[3] = m[3];
+ //return Result;
+ sse_mul_ps(in, Result, out);
+}
+*/
+GLM_FUNC_QUALIFIER void sse_outer_ps(__m128 const & c, __m128 const & r, __m128 out[4])
+{
+ out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0)));
+ out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1)));
+ out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2)));
+ out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3)));
+}
+
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/intrinsic_trigonometric.hpp b/include/gal/opengl/glm/core/intrinsic_trigonometric.hpp
new file mode 100644
index 0000000..b7d298b
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_trigonometric.hpp
@@ -0,0 +1,48 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_trigonometric.hpp
+/// @date 2009-06-09 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_detail_intrinsic_trigonometric
+#define glm_detail_intrinsic_trigonometric
+
+#include "setup.hpp"
+
+#if(!(GLM_ARCH & GLM_ARCH_SSE2))
+# error "SSE2 instructions not supported or enabled"
+#else
+
+namespace glm{
+namespace detail
+{
+
+}//namespace detail
+}//namespace glm
+
+#include "intrinsic_trigonometric.inl"
+
+#endif//GLM_ARCH
+#endif//glm_detail_intrinsic_trigonometric
diff --git a/include/gal/opengl/glm/core/intrinsic_trigonometric.inl b/include/gal/opengl/glm/core/intrinsic_trigonometric.inl
new file mode 100644
index 0000000..93343bc
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_trigonometric.inl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_trigonometric.inl
+/// @date 2011-06-15 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/core/intrinsic_vector_relational.hpp b/include/gal/opengl/glm/core/intrinsic_vector_relational.hpp
new file mode 100644
index 0000000..c9ec82e
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_vector_relational.hpp
@@ -0,0 +1,48 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_vector_relational.hpp
+/// @date 2009-06-09 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_detail_intrinsic_vector_relational
+#define glm_detail_intrinsic_vector_relational
+
+#include "setup.hpp"
+
+#if(!(GLM_ARCH & GLM_ARCH_SSE2))
+# error "SSE2 instructions not supported or enabled"
+#else
+
+namespace glm{
+namespace detail
+{
+
+}//namespace detail
+}//namespace glm
+
+#include "intrinsic_vector_relational.inl"
+
+#endif//GLM_ARCH
+#endif//glm_detail_intrinsic_vector_relational
diff --git a/include/gal/opengl/glm/core/intrinsic_vector_relational.inl b/include/gal/opengl/glm/core/intrinsic_vector_relational.inl
new file mode 100644
index 0000000..8068832
--- /dev/null
+++ b/include/gal/opengl/glm/core/intrinsic_vector_relational.inl
@@ -0,0 +1,366 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/intrinsic_vector_relational.inl
+/// @date 2009-06-09 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+//
+//// lessThan
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type lessThan
+//(
+// detail::tvec2<valType> const & x,
+// detail::tvec2<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec2<bool>::bool_type(x.x < y.x, x.y < y.y);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type lessThan
+//(
+// detail::tvec3<valType> const & x,
+// detail::tvec3<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec3<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type lessThan
+//(
+// detail::tvec4<valType> const & x,
+// detail::tvec4<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec4<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);
+//}
+//
+//// lessThanEqual
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type lessThanEqual
+//(
+// detail::tvec2<valType> const & x,
+// detail::tvec2<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec2<bool>::bool_type(x.x <= y.x, x.y <= y.y);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type lessThanEqual
+//(
+// detail::tvec3<valType> const & x,
+// detail::tvec3<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec3<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type lessThanEqual
+//(
+// detail::tvec4<valType> const & x,
+// detail::tvec4<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec4<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);
+//}
+//
+//// greaterThan
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type greaterThan
+//(
+// detail::tvec2<valType> const & x,
+// detail::tvec2<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec2<bool>::bool_type(x.x > y.x, x.y > y.y);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type greaterThan
+//(
+// detail::tvec3<valType> const & x,
+// detail::tvec3<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec3<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type greaterThan
+//(
+// detail::tvec4<valType> const & x,
+// detail::tvec4<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec4<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);
+//}
+//
+//// greaterThanEqual
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type greaterThanEqual
+//(
+// detail::tvec2<valType> const & x,
+// detail::tvec2<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec2<bool>::bool_type(x.x >= y.x, x.y >= y.y);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type greaterThanEqual
+//(
+// detail::tvec3<valType> const & x,
+// detail::tvec3<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec3<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type greaterThanEqual
+//(
+// detail::tvec4<valType> const & x,
+// detail::tvec4<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint);
+//
+// return typename detail::tvec4<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);
+//}
+//
+//// equal
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type equal
+//(
+// detail::tvec2<valType> const & x,
+// detail::tvec2<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint ||
+// detail::type<valType>::is_bool);
+//
+// return typename detail::tvec2<valType>::bool_type(x.x == y.x, x.y == y.y);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type equal
+//(
+// detail::tvec3<valType> const & x,
+// detail::tvec3<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint ||
+// detail::type<valType>::is_bool);
+//
+// return typename detail::tvec3<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type equal
+//(
+// detail::tvec4<valType> const & x,
+// detail::tvec4<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint ||
+// detail::type<valType>::is_bool);
+//
+// return typename detail::tvec4<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);
+//}
+//
+//// notEqual
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type notEqual
+//(
+// detail::tvec2<valType> const & x,
+// detail::tvec2<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint ||
+// detail::type<valType>::is_bool);
+//
+// return typename detail::tvec2<valType>::bool_type(x.x != y.x, x.y != y.y);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type notEqual
+//(
+// detail::tvec3<valType> const & x,
+// detail::tvec3<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint ||
+// detail::type<valType>::is_bool);
+//
+// return typename detail::tvec3<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z);
+//}
+//
+//template <typename valType>
+//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type notEqual
+//(
+// detail::tvec4<valType> const & x,
+// detail::tvec4<valType> const & y
+//)
+//{
+// GLM_STATIC_ASSERT(
+// detail::type<valType>::is_float ||
+// detail::type<valType>::is_int ||
+// detail::type<valType>::is_uint ||
+// detail::type<valType>::is_bool);
+//
+// return typename detail::tvec4<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);
+//}
+//
+//// any
+//GLM_FUNC_QUALIFIER bool any(detail::tvec2<bool> const & x)
+//{
+// return x.x || x.y;
+//}
+//
+//GLM_FUNC_QUALIFIER bool any(detail::tvec3<bool> const & x)
+//{
+// return x.x || x.y || x.z;
+//}
+//
+//GLM_FUNC_QUALIFIER bool any(detail::tvec4<bool> const & x)
+//{
+// return x.x || x.y || x.z || x.w;
+//}
+//
+//// all
+//GLM_FUNC_QUALIFIER bool all(const detail::tvec2<bool>& x)
+//{
+// return x.x && x.y;
+//}
+//
+//GLM_FUNC_QUALIFIER bool all(const detail::tvec3<bool>& x)
+//{
+// return x.x && x.y && x.z;
+//}
+//
+//GLM_FUNC_QUALIFIER bool all(const detail::tvec4<bool>& x)
+//{
+// return x.x && x.y && x.z && x.w;
+//}
+//
+//// not
+//GLM_FUNC_QUALIFIER detail::tvec2<bool>::bool_type not_
+//(
+// detail::tvec2<bool> const & v
+//)
+//{
+// return detail::tvec2<bool>::bool_type(!v.x, !v.y);
+//}
+//
+//GLM_FUNC_QUALIFIER detail::tvec3<bool>::bool_type not_
+//(
+// detail::tvec3<bool> const & v
+//)
+//{
+// return detail::tvec3<bool>::bool_type(!v.x, !v.y, !v.z);
+//}
+//
+//GLM_FUNC_QUALIFIER detail::tvec4<bool>::bool_type not_
+//(
+// detail::tvec4<bool> const & v
+//)
+//{
+// return detail::tvec4<bool>::bool_type(!v.x, !v.y, !v.z, !v.w);
+//} \ No newline at end of file
diff --git a/include/gal/opengl/glm/core/setup.hpp b/include/gal/opengl/glm/core/setup.hpp
new file mode 100644
index 0000000..95020ea
--- /dev/null
+++ b/include/gal/opengl/glm/core/setup.hpp
@@ -0,0 +1,694 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/setup.hpp
+/// @date 2006-11-13 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_setup
+#define glm_setup
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Version
+
+#define GLM_VERSION 94
+#define GLM_VERSION_MAJOR 0
+#define GLM_VERSION_MINOR 9
+#define GLM_VERSION_PATCH 4
+#define GLM_VERSION_REVISION 7
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Platform
+
+#define GLM_PLATFORM_UNKNOWN 0x00000000
+#define GLM_PLATFORM_WINDOWS 0x00010000
+#define GLM_PLATFORM_LINUX 0x00020000
+#define GLM_PLATFORM_APPLE 0x00040000
+//#define GLM_PLATFORM_IOS 0x00080000
+#define GLM_PLATFORM_ANDROID 0x00100000
+#define GLM_PLATFORM_CHROME_NACL 0x00200000
+#define GLM_PLATFORM_UNIX 0x00400000
+#define GLM_PLATFORM_QNXNTO 0x00800000
+#define GLM_PLATFORM_WINCE 0x01000000
+
+#ifdef GLM_FORCE_PLATFORM_UNKNOWN
+# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
+#elif defined(__QNXNTO__)
+# define GLM_PLATFORM GLM_PLATFORM_QNXNTO
+#elif defined(__APPLE__)
+# define GLM_PLATFORM GLM_PLATFORM_APPLE
+#elif defined(WINCE)
+# define GLM_PLATFORM GLM_PLATFORM_WINCE
+#elif defined(_WIN32)
+# define GLM_PLATFORM GLM_PLATFORM_WINDOWS
+#elif defined(__native_client__)
+# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
+#elif defined(__ANDROID__)
+# define GLM_PLATFORM GLM_PLATFORM_ANDROID
+#elif defined(__linux)
+# define GLM_PLATFORM GLM_PLATFORM_LINUX
+#elif defined(__unix)
+# define GLM_PLATFORM GLM_PLATFORM_UNIX
+#else
+# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
+#endif//
+
+// Report platform detection
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED))
+# define GLM_MESSAGE_PLATFORM_DISPLAYED
+# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
+# pragma message("GLM: QNX platform detected")
+//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
+//# pragma message("GLM: iOS platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
+# pragma message("GLM: Apple platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
+# pragma message("GLM: WinCE platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
+# pragma message("GLM: Windows platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
+# pragma message("GLM: Native Client detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+# pragma message("GLM: Android platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
+# pragma message("GLM: Linux platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
+# pragma message("GLM: UNIX platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
+# pragma message("GLM: platform unknown")
+# else
+# pragma message("GLM: platform not detected")
+# endif
+#endif//GLM_MESSAGE
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Compiler
+
+// User defines: GLM_FORCE_COMPILER_UNKNOWN
+// TODO ? __llvm__
+
+#define GLM_COMPILER_UNKNOWN 0x00000000
+
+// Intel
+#define GLM_COMPILER_INTEL 0x00100000
+#define GLM_COMPILER_INTEL9 0x00100010
+#define GLM_COMPILER_INTEL10_0 0x00100020
+#define GLM_COMPILER_INTEL10_1 0x00100030
+#define GLM_COMPILER_INTEL11_0 0x00100040
+#define GLM_COMPILER_INTEL11_1 0x00100050
+#define GLM_COMPILER_INTEL12_0 0x00100060
+#define GLM_COMPILER_INTEL12_1 0x00100070
+#define GLM_COMPILER_INTEL13_0 0x00100080
+
+// Visual C++ defines
+#define GLM_COMPILER_VC 0x01000000
+#define GLM_COMPILER_VC2 0x01000010
+#define GLM_COMPILER_VC4 0x01000020
+#define GLM_COMPILER_VC5 0x01000030
+#define GLM_COMPILER_VC6 0x01000040
+#define GLM_COMPILER_VC2002 0x01000050
+#define GLM_COMPILER_VC2003 0x01000060
+#define GLM_COMPILER_VC2005 0x01000070
+#define GLM_COMPILER_VC2008 0x01000080
+#define GLM_COMPILER_VC2010 0x01000090
+#define GLM_COMPILER_VC2012 0x010000A0
+#define GLM_COMPILER_VC2013 0x010000B0
+
+// GCC defines
+#define GLM_COMPILER_GCC 0x02000000
+#define GLM_COMPILER_GCC_LLVM 0x02000001
+#define GLM_COMPILER_GCC_CLANG 0x02000002
+#define GLM_COMPILER_GCC30 0x02000010
+#define GLM_COMPILER_GCC31 0x02000020
+#define GLM_COMPILER_GCC32 0x02000030
+#define GLM_COMPILER_GCC33 0x02000040
+#define GLM_COMPILER_GCC34 0x02000050
+#define GLM_COMPILER_GCC35 0x02000060
+#define GLM_COMPILER_GCC40 0x02000070
+#define GLM_COMPILER_GCC41 0x02000080
+#define GLM_COMPILER_GCC42 0x02000090
+#define GLM_COMPILER_GCC43 0x020000A0
+#define GLM_COMPILER_GCC44 0x020000B0
+#define GLM_COMPILER_GCC45 0x020000C0
+#define GLM_COMPILER_GCC46 0x020000D0
+#define GLM_COMPILER_GCC47 0x020000E0
+#define GLM_COMPILER_GCC48 0x020000F0
+#define GLM_COMPILER_GCC49 0x02000100
+
+// G++ command line to display defined
+// echo "" | g++ -E -dM -x c++ - | sort
+
+// Borland C++ defines. How to identify BC?
+#define GLM_COMPILER_BC 0x04000000
+#define GLM_COMPILER_BCB4 0x04000100
+#define GLM_COMPILER_BCB5 0x04000200
+#define GLM_COMPILER_BCB6 0x04000300
+//#define GLM_COMPILER_BCBX 0x04000400 // What's the version value?
+#define GLM_COMPILER_BCB2009 0x04000500
+
+// CodeWarrior
+#define GLM_COMPILER_CODEWARRIOR 0x08000000
+
+// CUDA
+#define GLM_COMPILER_CUDA 0x10000000
+#define GLM_COMPILER_CUDA30 0x10000010
+#define GLM_COMPILER_CUDA31 0x10000020
+#define GLM_COMPILER_CUDA32 0x10000030
+#define GLM_COMPILER_CUDA40 0x10000040
+#define GLM_COMPILER_CUDA41 0x10000050
+#define GLM_COMPILER_CUDA42 0x10000060
+
+// Clang
+#define GLM_COMPILER_CLANG 0x20000000
+#define GLM_COMPILER_CLANG26 0x20000010
+#define GLM_COMPILER_CLANG27 0x20000020
+#define GLM_COMPILER_CLANG28 0x20000030
+#define GLM_COMPILER_CLANG29 0x20000040
+#define GLM_COMPILER_CLANG30 0x20000050
+#define GLM_COMPILER_CLANG31 0x20000060
+#define GLM_COMPILER_CLANG32 0x20000070
+#define GLM_COMPILER_CLANG33 0x20000080
+#define GLM_COMPILER_CLANG40 0x20000090
+#define GLM_COMPILER_CLANG41 0x200000A0
+#define GLM_COMPILER_CLANG42 0x200000B0
+#define GLM_COMPILER_CLANG43 0x200000C0
+
+// LLVM GCC
+#define GLM_COMPILER_LLVM_GCC 0x40000000
+
+// Build model
+#define GLM_MODEL_32 0x00000010
+#define GLM_MODEL_64 0x00000020
+
+// Force generic C++ compiler
+#ifdef GLM_FORCE_COMPILER_UNKNOWN
+# define GLM_COMPILER GLM_COMPILER_UNKNOWN
+
+#elif defined(__INTEL_COMPILER)
+# if __INTEL_COMPILER == 900
+# define GLM_COMPILER GLM_COMPILER_INTEL9
+# elif __INTEL_COMPILER == 1000
+# define GLM_COMPILER GLM_COMPILER_INTEL10_0
+# elif __INTEL_COMPILER == 1010
+# define GLM_COMPILER GLM_COMPILER_INTEL10_1
+# elif __INTEL_COMPILER == 1100
+# define GLM_COMPILER GLM_COMPILER_INTEL11_0
+# elif __INTEL_COMPILER == 1110
+# define GLM_COMPILER GLM_COMPILER_INTEL11_1
+# elif __INTEL_COMPILER == 1200
+# define GLM_COMPILER GLM_COMPILER_INTEL12_0
+# elif __INTEL_COMPILER == 1210
+# define GLM_COMPILER GLM_COMPILER_INTEL12_1
+# elif __INTEL_COMPILER >= 1300
+# define GLM_COMPILER GLM_COMPILER_INTEL13_0
+# else
+# define GLM_COMPILER GLM_COMPILER_INTEL
+# endif
+
+// CUDA
+#elif defined(__CUDACC__)
+# if CUDA_VERSION < 3000
+# error "GLM requires CUDA 3.0 or higher"
+# else
+# define GLM_COMPILER GLM_COMPILER_CUDA
+# endif
+
+// Visual C++
+#elif defined(_MSC_VER)
+# if _MSC_VER < 1400
+# error "GLM requires Visual C++ 2005 or higher"
+# elif _MSC_VER == 1400
+# define GLM_COMPILER GLM_COMPILER_VC2005
+# elif _MSC_VER == 1500
+# define GLM_COMPILER GLM_COMPILER_VC2008
+# elif _MSC_VER == 1600
+# define GLM_COMPILER GLM_COMPILER_VC2010
+# elif _MSC_VER == 1700
+# define GLM_COMPILER GLM_COMPILER_VC2012
+# elif _MSC_VER >= 1800
+# define GLM_COMPILER GLM_COMPILER_VC2013
+# else//_MSC_VER
+# define GLM_COMPILER GLM_COMPILER_VC
+# endif//_MSC_VER
+
+// Clang
+#elif defined(__clang__)
+# if (__clang_major__ <= 1) || ((__clang_major__ == 2) && (__clang_minor__ < 6))
+# error "GLM requires Clang 2.6 or higher"
+# elif(__clang_major__ == 2) && (__clang_minor__ == 6)
+# define GLM_COMPILER GLM_COMPILER_CLANG26
+# elif(__clang_major__ == 2) && (__clang_minor__ == 7)
+# define GLM_COMPILER GLM_COMPILER_CLANG27
+# elif(__clang_major__ == 2) && (__clang_minor__ == 8)
+# define GLM_COMPILER GLM_COMPILER_CLANG28
+# elif(__clang_major__ == 2) && (__clang_minor__ == 9)
+# define GLM_COMPILER GLM_COMPILER_CLANG29
+# elif(__clang_major__ == 3) && (__clang_minor__ == 0)
+# define GLM_COMPILER GLM_COMPILER_CLANG30
+# elif(__clang_major__ == 3) && (__clang_minor__ == 1)
+# define GLM_COMPILER GLM_COMPILER_CLANG31
+# elif(__clang_major__ == 3) && (__clang_minor__ == 2)
+# define GLM_COMPILER GLM_COMPILER_CLANG32
+# elif(__clang_major__ == 3) && (__clang_minor__ == 3)
+# define GLM_COMPILER GLM_COMPILER_CLANG33
+# elif(__clang_major__ == 4) && (__clang_minor__ == 0)
+# define GLM_COMPILER GLM_COMPILER_CLANG40
+# elif(__clang_major__ == 4) && (__clang_minor__ == 1)
+# define GLM_COMPILER GLM_COMPILER_CLANG41
+# elif(__clang_major__ == 4) && (__clang_minor__ == 2)
+# define GLM_COMPILER GLM_COMPILER_CLANG42
+# elif(__clang_major__ == 4) && (__clang_minor__ >= 3)
+# define GLM_COMPILER GLM_COMPILER_CLANG43
+# elif(__clang_major__ > 4)
+# define GLM_COMPILER GLM_COMPILER_CLANG43
+# else
+# define GLM_COMPILER GLM_COMPILER_CLANG
+# endif
+
+// G++
+#elif(defined(__GNUC__) || defined(__MINGW32__))// || defined(__llvm__) || defined(__clang__)
+# if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2)
+# define GLM_COMPILER GLM_COMPILER_GCC32
+# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 3)
+# define GLM_COMPILER GLM_COMPILER_GCC33
+# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 4)
+# define GLM_COMPILER GLM_COMPILER_GCC34
+# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 5)
+# define GLM_COMPILER GLM_COMPILER_GCC35
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
+# define GLM_COMPILER (GLM_COMPILER_GCC40)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 1)
+# define GLM_COMPILER (GLM_COMPILER_GCC41)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
+# define GLM_COMPILER (GLM_COMPILER_GCC42)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+# define GLM_COMPILER (GLM_COMPILER_GCC43)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
+# define GLM_COMPILER (GLM_COMPILER_GCC44)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
+# define GLM_COMPILER (GLM_COMPILER_GCC45)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
+# define GLM_COMPILER (GLM_COMPILER_GCC46)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
+# define GLM_COMPILER (GLM_COMPILER_GCC47)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
+# define GLM_COMPILER (GLM_COMPILER_GCC48)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
+# define GLM_COMPILER (GLM_COMPILER_GCC49)
+# elif (__GNUC__ > 4 )
+# define GLM_COMPILER (GLM_COMPILER_GCC49)
+# else
+# define GLM_COMPILER (GLM_COMPILER_GCC)
+# endif
+
+// Borland C++
+#elif defined(_BORLANDC_)
+# define GLM_COMPILER GLM_COMPILER_BC
+
+// Codewarrior
+#elif defined(__MWERKS__)
+# define GLM_COMPILER GLM_COMPILER_CODEWARRIOR
+
+#else
+# define GLM_COMPILER GLM_COMPILER_UNKNOWN
+#endif
+
+#ifndef GLM_COMPILER
+#error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
+#endif//GLM_COMPILER
+
+// Report compiler detection
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED))
+# define GLM_MESSAGE_COMPILER_DISPLAYED
+# if(GLM_COMPILER & GLM_COMPILER_CUDA)
+# pragma message("GLM: CUDA compiler detected")
+# elif(GLM_COMPILER & GLM_COMPILER_VC)
+# pragma message("GLM: Visual C++ compiler detected")
+# elif(GLM_COMPILER & GLM_COMPILER_CLANG)
+# pragma message("GLM: Clang compiler detected")
+# elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
+# pragma message("GLM: LLVM GCC compiler detected")
+# elif(GLM_COMPILER & GLM_COMPILER_GCC)
+# if(GLM_COMPILER == GLM_COMPILER_GCC_LLVM)
+# pragma message("GLM: LLVM GCC compiler detected")
+# elif(GLM_COMPILER == GLM_COMPILER_GCC_CLANG)
+# pragma message("GLM: CLANG compiler detected")
+# else
+# pragma message("GLM: GCC compiler detected")
+# endif
+# elif(GLM_COMPILER & GLM_COMPILER_BC)
+# pragma message("GLM: Borland compiler detected but not supported")
+# elif(GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
+# pragma message("GLM: Codewarrior compiler detected but not supported")
+# else
+# pragma message("GLM: Compiler not detected")
+# endif
+#endif//GLM_MESSAGE
+
+/////////////////
+// Build model //
+
+#if(defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__))
+# define GLM_MODEL GLM_MODEL_64
+#elif(defined(__i386__) || defined(__ppc__))
+# define GLM_MODEL GLM_MODEL_32
+#else
+# define GLM_MODEL GLM_MODEL_32
+#endif//
+
+#if(!defined(GLM_MODEL) && GLM_COMPILER != 0)
+# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
+#endif//GLM_MODEL
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED))
+# define GLM_MESSAGE_MODEL_DISPLAYED
+# if(GLM_MODEL == GLM_MODEL_64)
+# pragma message("GLM: 64 bits model")
+# elif(GLM_MODEL == GLM_MODEL_32)
+# pragma message("GLM: 32 bits model")
+# endif//GLM_MODEL
+#endif//GLM_MESSAGE
+
+/////////////////
+// C++ Version //
+
+// User defines: GLM_FORCE_CXX98
+
+#define GLM_LANG_CXX (0 << 0)
+#define GLM_LANG_CXX98 ((1 << 1) | GLM_LANG_CXX)
+#define GLM_LANG_CXX03 ((1 << 2) | GLM_LANG_CXX98)
+#define GLM_LANG_CXX0X ((1 << 3) | GLM_LANG_CXX03)
+#define GLM_LANG_CXX11 ((1 << 4) | GLM_LANG_CXX0X)
+#define GLM_LANG_CXXMS (1 << 5)
+#define GLM_LANG_CXXGNU (1 << 6)
+
+#if(defined(GLM_FORCE_CXX11))
+# define GLM_LANG GLM_LANG_CXX11
+#elif(defined(GLM_FORCE_CXX03))
+# define GLM_LANG GLM_LANG_CXX03
+#elif(defined(GLM_FORCE_CXX98))
+# define GLM_LANG GLM_LANG_CXX98
+#else
+# if(__cplusplus >= 201103L)
+# define GLM_LANG GLM_LANG_CXX11
+# elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG)
+# if(GLM_PLATFORM == GLM_PLATFORM_APPLE)
+# define GLM_DETAIL_MAJOR 1
+# else
+# define GLM_DETAIL_MAJOR 0
+# endif
+# if(__clang_major__ < (2 + GLM_DETAIL_MAJOR))
+# define GLM_LANG GLM_LANG_CXX
+# elif(__has_feature(cxx_auto_type))
+# define GLM_LANG GLM_LANG_CXX0X
+# else
+# define GLM_LANG GLM_LANG_CXX98
+# endif
+# elif((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC)
+# if defined(__GXX_EXPERIMENTAL_CXX0X__)
+# define GLM_LANG GLM_LANG_CXX0X
+# else
+# define GLM_LANG GLM_LANG_CXX98
+# endif
+# elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && defined(_MSC_EXTENSIONS))
+# define GLM_LANG GLM_LANG_CXXMS
+# elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && !defined(_MSC_EXTENSIONS))
+# if(GLM_COMPILER >= GLM_COMPILER_VC2010)
+# define GLM_LANG GLM_LANG_CXX0X
+# else
+# define GLM_LANG GLM_LANG_CXX98
+# endif
+# elif(__cplusplus >= 199711L)
+# define GLM_LANG GLM_LANG_CXX98
+# else
+# define GLM_LANG GLM_LANG_CXX
+# endif
+#endif
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
+# define GLM_MESSAGE_LANG_DISPLAYED
+# if(GLM_LANG == GLM_LANG_CXX98)
+# pragma message("GLM: C++98")
+# elif(GLM_LANG == GLM_LANG_CXX03)
+# pragma message("GLM: C++03")
+# elif(GLM_LANG == GLM_LANG_CXX0X)
+# pragma message("GLM: C++0x")
+# elif(GLM_LANG == GLM_LANG_CXX11)
+# pragma message("GLM: C++11")
+# elif(GLM_LANG == GLM_LANG_CXXGNU)
+# pragma message("GLM: C++ with GNU language extensions")
+# elif(GLM_LANG == GLM_LANG_CXXMS)
+# pragma message("GLM: C++ with VC language extensions")
+# else
+# pragma message("GLM: C++ language undetected")
+# endif//GLM_MODEL
+#endif//GLM_MESSAGE
+
+/////////////////
+// Platform
+
+// User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
+
+#define GLM_ARCH_PURE 0x0000
+#define GLM_ARCH_SSE2 0x0001
+#define GLM_ARCH_SSE3 0x0002// | GLM_ARCH_SSE2
+#define GLM_ARCH_SSE4 0x0004// | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
+#define GLM_ARCH_AVX 0x0008// | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
+#define GLM_ARCH_AVX2 0x0010// | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
+
+#if(defined(GLM_FORCE_PURE))
+# define GLM_ARCH GLM_ARCH_PURE
+#elif(defined(GLM_FORCE_AVX2))
+# define GLM_ARCH (GLM_ARCH_AVX2 | GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+#elif(defined(GLM_FORCE_AVX))
+# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+#elif(defined(GLM_FORCE_SSE4))
+# define GLM_ARCH (GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+#elif(defined(GLM_FORCE_SSE3))
+# define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+#elif(defined(GLM_FORCE_SSE2))
+# define GLM_ARCH (GLM_ARCH_SSE2)
+#elif((GLM_COMPILER & GLM_COMPILER_VC) && (defined(_M_IX86) || defined(_M_X64)))
+# if(GLM_PLATFORM == GLM_PLATFORM_WINCE)
+# define GLM_ARCH GLM_ARCH_PURE
+# elif(defined(_M_CEE_PURE))
+# define GLM_ARCH GLM_ARCH_PURE
+/* TODO: Explore auto detection of instruction set support
+# elif(defined(_M_IX86_FP))
+# if(_M_IX86_FP >= 3)
+# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+# elif(_M_IX86_FP >= 2)
+# define GLM_ARCH (GLM_ARCH_SSE2)
+# else
+# define GLM_ARCH GLM_ARCH_PURE
+# endif
+*/
+# elif(GLM_COMPILER >= GLM_COMPILER_VC2012)
+# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+# elif(GLM_COMPILER >= GLM_COMPILER_VC2010)
+# if(_MSC_FULL_VER >= 160031118) //160031118: VC2010 SP1 beta full version
+# define GLM_ARCH (GLM_ARCH_AVX | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)//GLM_ARCH_AVX (Require SP1)
+# else
+# define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+# endif
+# elif(GLM_COMPILER >= GLM_COMPILER_VC2008)
+# define GLM_ARCH (GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+# elif(GLM_COMPILER >= GLM_COMPILER_VC2005)
+# define GLM_ARCH GLM_ARCH_SSE2
+# else
+# define GLM_ARCH GLM_ARCH_PURE
+# endif
+#elif((GLM_PLATFORM & GLM_PLATFORM_APPLE) && (GLM_COMPILER & GLM_COMPILER_GCC))
+# define GLM_ARCH GLM_ARCH_PURE
+#elif(((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__))) || (GLM_COMPILER & GLM_COMPILER_LLVM_GCC))
+# define GLM_ARCH (GLM_ARCH_PURE \
+| (defined(__AVX2__) ? GLM_ARCH_AVX2 : 0) \
+| (defined(__AVX__) ? GLM_ARCH_AVX : 0) \
+| (defined(__SSE4__) ? GLM_ARCH_SSE4 : 0) \
+| (defined(__SSE3__) ? GLM_ARCH_SSE3 : 0) \
+| (defined(__SSE2__) ? GLM_ARCH_SSE2 : 0))
+#else
+# define GLM_ARCH GLM_ARCH_PURE
+#endif
+
+// With MinGW-W64, including intrinsic headers before intrin.h will produce some errors. The problem is
+// that windows.h (and maybe other headers) will silently include intrin.h, which of course causes problems.
+// To fix, we just explicitly include intrin.h here.
+#if defined(__MINGW32__) && (GLM_ARCH != GLM_ARCH_PURE)
+# include <intrin.h>
+#endif
+
+//#if(GLM_ARCH != GLM_ARCH_PURE)
+#if(GLM_ARCH & GLM_ARCH_AVX2)
+# include <immintrin.h>
+#endif//GLM_ARCH
+#if(GLM_ARCH & GLM_ARCH_AVX)
+# include <immintrin.h>
+#endif//GLM_ARCH
+#if(GLM_ARCH & GLM_ARCH_SSE4)
+# include <smmintrin.h>
+#endif//GLM_ARCH
+#if(GLM_ARCH & GLM_ARCH_SSE3)
+# include <pmmintrin.h>
+#endif//GLM_ARCH
+#if(GLM_ARCH & GLM_ARCH_SSE2)
+# include <emmintrin.h>
+#endif//GLM_ARCH
+//#endif//(GLM_ARCH != GLM_ARCH_PURE)
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED))
+# define GLM_MESSAGE_ARCH_DISPLAYED
+# if(GLM_ARCH == GLM_ARCH_PURE)
+# pragma message("GLM: Platform independent")
+# elif(GLM_ARCH & GLM_ARCH_SSE2)
+# pragma message("GLM: SSE2 instruction set")
+# elif(GLM_ARCH & GLM_ARCH_SSE3)
+# pragma message("GLM: SSE3 instruction set")
+# elif(GLM_ARCH & GLM_ARCH_SSE4)
+# pragma message("GLM: SSE4 instruction set")
+# elif(GLM_ARCH & GLM_ARCH_AVX)
+# pragma message("GLM: AVX instruction set")
+# elif(GLM_ARCH & GLM_ARCH_AVX2)
+# pragma message("GLM: AVX2 instruction set")
+# endif//GLM_ARCH
+#endif//GLM_MESSAGE
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Support check macros
+
+#define GLM_SUPPORT_ANONYMOUS_UNION() \
+ ((GLM_LANG & GLM_LANG_CXX98) == GLM_LANG_CXX98)
+
+//#define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() <backslash>
+// (((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_LANG == GLM_LANG_CXX0X)))
+
+#define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() \
+ (((GLM_LANG & GLM_LANG_CXX11) == GLM_LANG_CXX11) || ((GLM_COMPILER & GLM_COMPILER_VC) && ((GLM_LANG & GLM_LANG_CXXMS) == GLM_LANG_CXXMS)) || ((GLM_LANG == GLM_LANG_CXX0X) == GLM_LANG_CXX0X))
+
+#define GLM_SUPPORT_SWIZZLE_OPERATOR() \
+ (/*defined(GLM_SWIZZLE) && */GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
+
+#define GLM_SUPPORT_SWIZZLE_FUNCTION() defined(GLM_SWIZZLE)
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Components
+
+//#define GLM_FORCE_ONLY_XYZW
+#define GLM_COMPONENT_ONLY_XYZW 0 // To disable multiple vector component names access.
+#define GLM_COMPONENT_CXX98 1 //
+#define GLM_COMPONENT_CXX11 2 // To use anonymous union to provide multiple component names access for class valType. Visual C++ only.
+
+#if(GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() && !defined(GLM_FORCE_ONLY_XYZW))
+# define GLM_COMPONENT GLM_COMPONENT_CXX11
+#elif(GLM_SUPPORT_ANONYMOUS_UNION() && !defined(GLM_FORCE_ONLY_XYZW))
+# define GLM_COMPONENT GLM_COMPONENT_CXX98
+#else
+# define GLM_COMPONENT GLM_COMPONENT_ONLY_XYZW
+#endif
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPONENT_DISPLAYED))
+# define GLM_MESSAGE_COMPONENT_DISPLAYED
+# if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+# pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names except of half based vector types")
+# elif(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
+# pragma message("GLM: x,y,z,w component names for all vector types")
+# elif(GLM_COMPONENT == GLM_COMPONENT_CXX11)
+# pragma message("GLM: x,y,z,w; r,g,b,a; s,t,p,q component names for all vector types")
+# else
+# error "GLM: GLM_COMPONENT value unknown"
+# endif//GLM_MESSAGE_COMPONENT_DISPLAYED
+#endif//GLM_MESSAGE
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Radians
+
+//#define GLM_FORCE_RADIANS
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Static assert
+
+#if(GLM_LANG == GLM_LANG_CXX0X)
+# define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
+#elif(defined(BOOST_STATIC_ASSERT))
+# define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
+#elif(GLM_COMPILER & GLM_COMPILER_VC)
+# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
+#else
+# define GLM_STATIC_ASSERT(x, message)
+# define GLM_STATIC_ASSERT_NULL
+#endif//GLM_LANG
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Qualifiers
+
+// User defines: GLM_FORCE_INLINE GLM_FORCE_CUDA
+
+#if(defined(GLM_FORCE_CUDA) || (GLM_COMPILER & GLM_COMPILER_CUDA))
+# define GLM_CUDA_FUNC_DEF __device__ __host__
+# define GLM_CUDA_FUNC_DECL __device__ __host__
+#else
+# define GLM_CUDA_FUNC_DEF
+# define GLM_CUDA_FUNC_DECL
+#endif
+
+#if GLM_COMPILER & GLM_COMPILER_GCC
+# define GLM_VAR_USED __attribute__ ((unused))
+#else
+# define GLM_VAR_USED
+#endif
+
+#if(defined(GLM_FORCE_INLINE))
+# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
+# define GLM_INLINE __forceinline
+# elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
+# define GLM_INLINE __attribute__((always_inline))
+# elif(GLM_COMPILER & GLM_COMPILER_CLANG)
+# define GLM_INLINE __attribute__((always_inline))
+# else
+# define GLM_INLINE inline
+# endif//GLM_COMPILER
+#else
+# define GLM_INLINE inline
+#endif//defined(GLM_FORCE_INLINE)
+
+#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
+#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Swizzle operators
+
+// User defines: GLM_SWIZZLE
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED))
+# define GLM_MESSAGE_SWIZZLE_DISPLAYED
+# if(GLM_SUPPORT_SWIZZLE_OPERATOR())
+# pragma message("GLM: Swizzling operators enabled")
+# elif(GLM_SUPPORT_SWIZZLE_FUNCTION())
+# pragma message("GLM: Swizzling operators supported through swizzling functions")
+# else
+# pragma message("GLM: Swizzling operators disabled")
+# endif
+#endif//GLM_MESSAGE
+
+#endif//glm_setup
diff --git a/include/gal/opengl/glm/core/type.hpp b/include/gal/opengl/glm/core/type.hpp
new file mode 100644
index 0000000..6361e2e
--- /dev/null
+++ b/include/gal/opengl/glm/core/type.hpp
@@ -0,0 +1,341 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type.hpp
+/// @date 2008-01-08 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type
+#define glm_core_type
+
+#include "type_half.hpp"
+#include "type_float.hpp"
+#include "type_int.hpp"
+
+#include "type_gentype.hpp"
+
+#include "type_vec1.hpp"
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+
+#include "type_mat2x2.hpp"
+#include "type_mat2x3.hpp"
+#include "type_mat2x4.hpp"
+#include "type_mat3x2.hpp"
+#include "type_mat3x3.hpp"
+#include "type_mat3x4.hpp"
+#include "type_mat4x2.hpp"
+#include "type_mat4x3.hpp"
+#include "type_mat4x4.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_types
+ /// @{
+
+ //////////////////////////
+ // Float definition
+
+#if(defined(GLM_PRECISION_HIGHP_FLOAT))
+ typedef highp_vec2 vec2;
+ typedef highp_vec3 vec3;
+ typedef highp_vec4 vec4;
+ typedef highp_mat2x2 mat2x2;
+ typedef highp_mat2x3 mat2x3;
+ typedef highp_mat2x4 mat2x4;
+ typedef highp_mat3x2 mat3x2;
+ typedef highp_mat3x3 mat3x3;
+ typedef highp_mat3x4 mat3x4;
+ typedef highp_mat4x2 mat4x2;
+ typedef highp_mat4x3 mat4x3;
+ typedef highp_mat4x4 mat4x4;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef mediump_vec2 vec2;
+ typedef mediump_vec3 vec3;
+ typedef mediump_vec4 vec4;
+ typedef mediump_mat2x2 mat2x2;
+ typedef mediump_mat2x3 mat2x3;
+ typedef mediump_mat2x4 mat2x4;
+ typedef mediump_mat3x2 mat3x2;
+ typedef mediump_mat3x3 mat3x3;
+ typedef mediump_mat3x4 mat3x4;
+ typedef mediump_mat4x2 mat4x2;
+ typedef mediump_mat4x3 mat4x3;
+ typedef mediump_mat4x4 mat4x4;
+#elif(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_vec2 vec2;
+ typedef lowp_vec3 vec3;
+ typedef lowp_vec4 vec4;
+ typedef lowp_mat2x2 mat2x2;
+ typedef lowp_mat2x3 mat2x3;
+ typedef lowp_mat2x4 mat2x4;
+ typedef lowp_mat3x2 mat3x2;
+ typedef lowp_mat3x3 mat3x3;
+ typedef lowp_mat3x4 mat3x4;
+ typedef lowp_mat4x2 mat4x2;
+ typedef lowp_mat4x3 mat4x3;
+ typedef lowp_mat4x4 mat4x4;
+#else
+ /// 2 components vector of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_vec2 vec2;
+
+ //! 3 components vector of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_vec3 vec3;
+
+ //! 4 components vector of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_vec4 vec4;
+
+ //! 2 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat2x2 mat2x2;
+
+ //! 2 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat2x3 mat2x3;
+
+ //! 2 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat2x4 mat2x4;
+
+ //! 3 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat3x2 mat3x2;
+
+ //! 3 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat3x3 mat3x3;
+
+ //! 3 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat3x4 mat3x4;
+
+ //! 4 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat4x2 mat4x2;
+
+ //! 4 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat4x3 mat4x3;
+
+ //! 4 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mediump_mat4x4 mat4x4;
+
+#endif//GLM_PRECISION
+
+ //! 2 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mat2x2 mat2;
+
+ //! 3 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mat3x3 mat3;
+
+ //! 4 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mat4x4 mat4;
+
+ //////////////////////////
+ // Signed integer definition
+
+#if(defined(GLM_PRECISION_HIGHP_INT))
+ typedef highp_ivec2 ivec2;
+ typedef highp_ivec3 ivec3;
+ typedef highp_ivec4 ivec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_ivec2 ivec2;
+ typedef mediump_ivec3 ivec3;
+ typedef mediump_ivec4 ivec4;
+#elif(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_ivec2 ivec2;
+ typedef lowp_ivec3 ivec3;
+ typedef lowp_ivec4 ivec4;
+#else
+ //! 2 components vector of signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_ivec2 ivec2;
+
+ //! 3 components vector of signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_ivec3 ivec3;
+
+ //! 4 components vector of signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_ivec4 ivec4;
+#endif//GLM_PRECISION
+
+ //////////////////////////
+ // Unsigned integer definition
+
+#if(defined(GLM_PRECISION_HIGHP_UINT))
+ typedef highp_uvec2 uvec2;
+ typedef highp_uvec3 uvec3;
+ typedef highp_uvec4 uvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+ typedef mediump_uvec2 uvec2;
+ typedef mediump_uvec3 uvec3;
+ typedef mediump_uvec4 uvec4;
+#elif(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_uvec2 uvec2;
+ typedef lowp_uvec3 uvec3;
+ typedef lowp_uvec4 uvec4;
+#else
+ //! 2 components vector of unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_uvec2 uvec2;
+
+ //! 3 components vector of unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_uvec3 uvec3;
+
+ //! 4 components vector of unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef mediump_uvec4 uvec4;
+#endif//GLM_PRECISION
+
+ //////////////////////////
+ // Boolean definition
+
+ //! 2 components vector of boolean.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef detail::tvec2<bool> bvec2;
+
+ //! 3 components vector of boolean.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef detail::tvec3<bool> bvec3;
+
+ //! 4 components vector of boolean.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef detail::tvec4<bool> bvec4;
+
+ //////////////////////////
+ // Double definition
+
+ //! Vector of 2 double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef detail::tvec2<double> dvec2;
+
+ //! Vector of 3 double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef detail::tvec3<double> dvec3;
+
+ //! Vector of 4 double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef detail::tvec4<double> dvec4;
+
+ //! 2 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat2x2<double> dmat2;
+
+ //! 3 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat3x3<double> dmat3;
+
+ //! 4 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat4x4<double> dmat4;
+
+ //! 2 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat2x2<double> dmat2x2;
+
+ //! 2 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat2x3<double> dmat2x3;
+
+ //! 2 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat2x4<double> dmat2x4;
+
+ //! 3 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat3x2<double> dmat3x2;
+
+ //! 3 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat3x3<double> dmat3x3;
+
+ //! 3 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat3x4<double> dmat3x4;
+
+ //! 4 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat4x2<double> dmat4x2;
+
+ //! 4 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat4x3<double> dmat4x3;
+
+ //! 4 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef detail::tmat4x4<double> dmat4x4;
+
+ /// @}
+}//namespace glm
+
+#endif//glm_core_type
diff --git a/include/gal/opengl/glm/core/type_float.hpp b/include/gal/opengl/glm/core/type_float.hpp
new file mode 100644
index 0000000..095812c
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_float.hpp
@@ -0,0 +1,84 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_float.hpp
+/// @date 2008-08-22 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_float
+#define glm_core_type_float
+
+#include "type_half.hpp"
+#include "setup.hpp"
+
+namespace glm
+{
+#ifdef GLM_USE_HALF_SCALAR
+ typedef detail::half lowp_float_t;
+#else//GLM_USE_HALF_SCALAR
+ typedef float lowp_float_t;
+#endif//GLM_USE_HALF_SCALAR
+ typedef float mediump_float_t;
+ typedef double highp_float_t;
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// Low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef lowp_float_t lowp_float;
+
+ /// Medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef mediump_float_t mediump_float;
+
+ /// High precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef highp_float_t highp_float;
+
+#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef mediump_float float_t;
+#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef highp_float float_t;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef mediump_float float_t;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_float float_t;
+#else
+# error "GLM error: multiple default precision requested for floating-point types"
+#endif
+
+ /// @}
+}//namespace glm
+
+#endif//glm_core_type_float
diff --git a/include/gal/opengl/glm/core/type_gentype.hpp b/include/gal/opengl/glm/core/type_gentype.hpp
new file mode 100644
index 0000000..c79152a
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_gentype.hpp
@@ -0,0 +1,169 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_gentype.hpp
+/// @date 2008-10-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_gentype
+#define glm_core_type_gentype
+
+#include "type_size.hpp"
+
+namespace glm
+{
+ enum profile
+ {
+ nice,
+ fast,
+ simd
+ };
+
+namespace detail
+{
+ template
+ <
+ typename VALTYPE,
+ template <typename> class TYPE
+ >
+ struct genType
+ {
+ public:
+ enum ctor{null};
+
+ typedef VALTYPE value_type;
+ typedef VALTYPE & value_reference;
+ typedef VALTYPE * value_pointer;
+ typedef VALTYPE const * value_const_pointer;
+ typedef TYPE<bool> bool_type;
+
+ typedef sizeType size_type;
+ static bool is_vector();
+ static bool is_matrix();
+
+ typedef TYPE<VALTYPE> type;
+ typedef TYPE<VALTYPE> * pointer;
+ typedef TYPE<VALTYPE> const * const_pointer;
+ typedef TYPE<VALTYPE> const * const const_pointer_const;
+ typedef TYPE<VALTYPE> * const pointer_const;
+ typedef TYPE<VALTYPE> & reference;
+ typedef TYPE<VALTYPE> const & const_reference;
+ typedef TYPE<VALTYPE> const & param_type;
+
+ //////////////////////////////////////
+ // Address (Implementation details)
+
+ value_const_pointer value_address() const{return value_pointer(this);}
+ value_pointer value_address(){return value_pointer(this);}
+
+ //protected:
+ // enum kind
+ // {
+ // GEN_TYPE,
+ // VEC_TYPE,
+ // MAT_TYPE
+ // };
+
+ // typedef typename TYPE::kind kind;
+ };
+
+ template
+ <
+ typename VALTYPE,
+ template <typename> class TYPE
+ >
+ bool genType<VALTYPE, TYPE>::is_vector()
+ {
+ return true;
+ }
+/*
+ template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
+ class base
+ {
+ public:
+ //////////////////////////////////////
+ // Traits
+
+ typedef sizeType size_type;
+ typedef valTypeT value_type;
+
+ typedef base<value_type, colT, rowT> class_type;
+
+ typedef base<bool, colT, rowT> bool_type;
+ typedef base<value_type, rowT, 1> col_type;
+ typedef base<value_type, colT, 1> row_type;
+ typedef base<value_type, rowT, colT> transpose_type;
+
+ static size_type col_size();
+ static size_type row_size();
+ static size_type value_size();
+ static bool is_scalar();
+ static bool is_vector();
+ static bool is_matrix();
+
+ private:
+ // Data
+ col_type value[colT];
+
+ public:
+ //////////////////////////////////////
+ // Constructors
+ base();
+ base(class_type const & m);
+
+ explicit base(value_type const & x);
+ explicit base(value_type const * const x);
+ explicit base(col_type const * const x);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename vU, uint cU, uint rU, profile pU>
+ explicit base(base<vU, cU, rU, pU> const & m);
+
+ //////////////////////////////////////
+ // Accesses
+ col_type& operator[](size_type i);
+ col_type const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Unary updatable operators
+ class_type& operator= (class_type const & x);
+ class_type& operator+= (value_type const & x);
+ class_type& operator+= (class_type const & x);
+ class_type& operator-= (value_type const & x);
+ class_type& operator-= (class_type const & x);
+ class_type& operator*= (value_type const & x);
+ class_type& operator*= (class_type const & x);
+ class_type& operator/= (value_type const & x);
+ class_type& operator/= (class_type const & x);
+ class_type& operator++ ();
+ class_type& operator-- ();
+ };
+*/
+ }//namespace detail
+}//namespace glm
+
+//#include "type_gentype.inl"
+
+#endif//glm_core_type_gentype
diff --git a/include/gal/opengl/glm/core/type_gentype.inl b/include/gal/opengl/glm/core/type_gentype.inl
new file mode 100644
index 0000000..2ca7496
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_gentype.inl
@@ -0,0 +1,366 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_gentype.inl
+/// @date 2008-10-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail{
+
+/////////////////////////////////
+// Static functions
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size()
+{
+ return cT;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size()
+{
+ return rT;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size()
+{
+ return rT * cT;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+bool base<vT, cT, rT, pT>::is_scalar()
+{
+ return rT == 1 && cT == 1;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+bool base<vT, cT, rT, pT>::is_vector()
+{
+ return rT == 1;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+bool base<vT, cT, rT, pT>::is_matrix()
+{
+ return rT != 1;
+}
+
+/////////////////////////////////
+// Constructor
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base()
+{
+ memset(&this->value, 0, cT * rT * sizeof(vT));
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::class_type const & m
+)
+{
+ for
+ (
+ typename genType<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i] = m[i];
+ }
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::value_type const & x
+)
+{
+ if(rT == 1) // vector
+ {
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i][rT] = x;
+ }
+ }
+ else // matrix
+ {
+ memset(&this->value, 0, cT * rT * sizeof(vT));
+
+ typename base<vT, cT, rT, pT>::size_type stop = cT < rT ? cT : rT;
+
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < stop;
+ ++i
+ )
+ {
+ this->value[i][i] = x;
+ }
+ }
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::value_type const * const x
+)
+{
+ memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::col_type const * const x
+)
+{
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i] = x[i];
+ }
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+template <typename vU, uint cU, uint rU, profile pU>
+base<vT, cT, rT, pT>::base
+(
+ base<vU, cU, rU, pU> const & m
+)
+{
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i] = base<vT, cT, rT, pT>(m[i]);
+ }
+}
+
+//////////////////////////////////////
+// Accesses
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[]
+(
+ typename base<vT, cT, rT, pT>::size_type i
+)
+{
+ return this->value[i];
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[]
+(
+ typename base<vT, cT, rT, pT>::size_type i
+) const
+{
+ return this->value[i];
+}
+
+//////////////////////////////////////
+// Unary updatable operators
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
+(
+ typename base<vT, cT, rT, pT>::value_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] += x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] += x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
+(
+ typename base<vT, cT, rT, pT>::value_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] -= x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] -= x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
+(
+ typename base<vT, cT, rT, pT>::value_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] *= x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] *= x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
+(
+ typename base<vT, cT, rT, pT>::value_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] /= x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] /= x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ ()
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ ++this->value[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- ()
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ --this->value[j][i];
+
+ return *this;
+}
+
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_half.hpp b/include/gal/opengl/glm/core/type_half.hpp
new file mode 100644
index 0000000..5f14fbd
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_half.hpp
@@ -0,0 +1,118 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_half.hpp
+/// @date 2008-08-17 / 2011-09-20
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_half
+#define glm_core_type_half
+
+#include <cstdlib>
+
+namespace glm{
+namespace detail
+{
+ typedef short hdata;
+
+ GLM_FUNC_DECL float toFloat32(hdata value);
+ GLM_FUNC_DECL hdata toFloat16(float const & value);
+
+ class half
+ {
+ public:
+ // Constructors
+ GLM_FUNC_DECL half();
+ GLM_FUNC_DECL half(half const & s);
+
+ template <typename U>
+ GLM_FUNC_DECL explicit half(U const & s);
+
+ // Cast
+ //template <typename U>
+ //GLM_FUNC_DECL operator U() const;
+ GLM_FUNC_DECL operator float() const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL half& operator= (half const & s);
+ GLM_FUNC_DECL half& operator+=(half const & s);
+ GLM_FUNC_DECL half& operator-=(half const & s);
+ GLM_FUNC_DECL half& operator*=(half const & s);
+ GLM_FUNC_DECL half& operator/=(half const & s);
+ GLM_FUNC_DECL half& operator++();
+ GLM_FUNC_DECL half& operator--();
+
+ GLM_FUNC_DECL float toFloat() const{return toFloat32(data);}
+
+ GLM_FUNC_DECL hdata _data() const{return data;}
+
+ private:
+ hdata data;
+ };
+
+ GLM_FUNC_DECL half operator+ (half const & s1, half const & s2);
+
+ GLM_FUNC_DECL half operator- (half const & s1, half const & s2);
+
+ GLM_FUNC_DECL half operator* (half const & s1, half const & s2);
+
+ GLM_FUNC_DECL half operator/ (half const & s1, half const & s2);
+
+ // Unary constant operators
+ GLM_FUNC_DECL half operator- (half const & s);
+
+ GLM_FUNC_DECL half operator-- (half const & s, int);
+
+ GLM_FUNC_DECL half operator++ (half const & s, int);
+
+ GLM_FUNC_DECL bool operator==(
+ detail::half const & x,
+ detail::half const & y);
+
+ GLM_FUNC_DECL bool operator!=(
+ detail::half const & x,
+ detail::half const & y);
+
+ GLM_FUNC_DECL bool operator<(
+ detail::half const & x,
+ detail::half const & y);
+
+ GLM_FUNC_DECL bool operator<=(
+ detail::half const & x,
+ detail::half const & y);
+
+ GLM_FUNC_DECL bool operator>(
+ detail::half const & x,
+ detail::half const & y);
+
+ GLM_FUNC_DECL bool operator>=(
+ detail::half const & x,
+ detail::half const & y);
+
+}//namespace detail
+}//namespace glm
+
+#include "type_half.inl"
+
+#endif//glm_core_type_half
diff --git a/include/gal/opengl/glm/core/type_half.inl b/include/gal/opengl/glm/core/type_half.inl
new file mode 100644
index 0000000..9cd72b3
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_half.inl
@@ -0,0 +1,421 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///
+/// This half implementation is based on OpenEXR which is Copyright (c) 2002,
+/// Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
+///
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_half.inl
+/// @date 2008-08-17 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "_detail.hpp"
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER float overflow()
+ {
+ volatile float f = 1e10;
+
+ for(int i = 0; i < 10; ++i)
+ f *= f; // this will overflow before
+ // the for­loop terminates
+ return f;
+ }
+
+ GLM_FUNC_QUALIFIER float toFloat32(hdata value)
+ {
+ int s = (value >> 15) & 0x00000001;
+ int e = (value >> 10) & 0x0000001f;
+ int m = value & 0x000003ff;
+
+ if(e == 0)
+ {
+ if(m == 0)
+ {
+ //
+ // Plus or minus zero
+ //
+
+ detail::uif result;
+ result.i = (unsigned int)(s << 31);
+ return result.f;
+ }
+ else
+ {
+ //
+ // Denormalized number -- renormalize it
+ //
+
+ while(!(m & 0x00000400))
+ {
+ m <<= 1;
+ e -= 1;
+ }
+
+ e += 1;
+ m &= ~0x00000400;
+ }
+ }
+ else if(e == 31)
+ {
+ if(m == 0)
+ {
+ //
+ // Positive or negative infinity
+ //
+
+ uif result;
+ result.i = (unsigned int)((s << 31) | 0x7f800000);
+ return result.f;
+ }
+ else
+ {
+ //
+ // Nan -- preserve sign and significand bits
+ //
+
+ uif result;
+ result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13));
+ return result.f;
+ }
+ }
+
+ //
+ // Normalized number
+ //
+
+ e = e + (127 - 15);
+ m = m << 13;
+
+ //
+ // Assemble s, e and m.
+ //
+
+ uif Result;
+ Result.i = (unsigned int)((s << 31) | (e << 23) | m);
+ return Result.f;
+ }
+
+ GLM_FUNC_QUALIFIER hdata toFloat16(float const & f)
+ {
+ uif Entry;
+ Entry.f = f;
+ int i = (int)Entry.i;
+
+ //
+ // Our floating point number, f, is represented by the bit
+ // pattern in integer i. Disassemble that bit pattern into
+ // the sign, s, the exponent, e, and the significand, m.
+ // Shift s into the position where it will go in in the
+ // resulting half number.
+ // Adjust e, accounting for the different exponent bias
+ // of float and half (127 versus 15).
+ //
+
+ int s = (i >> 16) & 0x00008000;
+ int e = ((i >> 23) & 0x000000ff) - (127 - 15);
+ int m = i & 0x007fffff;
+
+ //
+ // Now reassemble s, e and m into a half:
+ //
+
+ if(e <= 0)
+ {
+ if(e < -10)
+ {
+ //
+ // E is less than -10. The absolute value of f is
+ // less than half_MIN (f may be a small normalized
+ // float, a denormalized float or a zero).
+ //
+ // We convert f to a half zero.
+ //
+
+ return hdata(s);
+ }
+
+ //
+ // E is between -10 and 0. F is a normalized float,
+ // whose magnitude is less than __half_NRM_MIN.
+ //
+ // We convert f to a denormalized half.
+ //
+
+ m = (m | 0x00800000) >> (1 - e);
+
+ //
+ // Round to nearest, round "0.5" up.
+ //
+ // Rounding may cause the significand to overflow and make
+ // our number normalized. Because of the way a half's bits
+ // are laid out, we don't have to treat this case separately;
+ // the code below will handle it correctly.
+ //
+
+ if(m & 0x00001000)
+ m += 0x00002000;
+
+ //
+ // Assemble the half from s, e (zero) and m.
+ //
+
+ return hdata(s | (m >> 13));
+ }
+ else if(e == 0xff - (127 - 15))
+ {
+ if(m == 0)
+ {
+ //
+ // F is an infinity; convert f to a half
+ // infinity with the same sign as f.
+ //
+
+ return hdata(s | 0x7c00);
+ }
+ else
+ {
+ //
+ // F is a NAN; we produce a half NAN that preserves
+ // the sign bit and the 10 leftmost bits of the
+ // significand of f, with one exception: If the 10
+ // leftmost bits are all zero, the NAN would turn
+ // into an infinity, so we have to set at least one
+ // bit in the significand.
+ //
+
+ m >>= 13;
+
+ return hdata(s | 0x7c00 | m | (m == 0));
+ }
+ }
+ else
+ {
+ //
+ // E is greater than zero. F is a normalized float.
+ // We try to convert f to a normalized half.
+ //
+
+ //
+ // Round to nearest, round "0.5" up
+ //
+
+ if(m & 0x00001000)
+ {
+ m += 0x00002000;
+
+ if(m & 0x00800000)
+ {
+ m = 0; // overflow in significand,
+ e += 1; // adjust exponent
+ }
+ }
+
+ //
+ // Handle exponent overflow
+ //
+
+ if (e > 30)
+ {
+ overflow(); // Cause a hardware floating point overflow;
+
+ return hdata(s | 0x7c00);
+ // if this returns, the half becomes an
+ } // infinity with the same sign as f.
+
+ //
+ // Assemble the half from s, e and m.
+ //
+
+ return hdata(s | (e << 10) | (m >> 13));
+ }
+ }
+
+ GLM_FUNC_QUALIFIER half::half() :
+ data(0)
+ {}
+
+ GLM_FUNC_QUALIFIER half::half(half const & s) :
+ data(s.data)
+ {}
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER half::half(U const & s) :
+ data(toFloat16(float(s)))
+ {}
+/*
+ template <typename U>
+ GLM_FUNC_QUALIFIER half::operator U() const
+ {
+ return static_cast<U>(toFloat32(this->data));
+ }
+*/
+
+ GLM_FUNC_QUALIFIER half::operator float() const
+ {
+ return toFloat32(this->data);
+ }
+
+ // Unary updatable operators
+ GLM_FUNC_QUALIFIER half& half::operator= (half const & s)
+ {
+ data = s.data;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER half& half::operator+=(half const & s)
+ {
+ data = toFloat16(toFloat32(data) + toFloat32(s.data));
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER half& half::operator-=(half const & s)
+ {
+ data = toFloat16(toFloat32(data) - toFloat32(s.data));
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER half& half::operator*=(half const & s)
+ {
+ data = toFloat16(toFloat32(data) * toFloat32(s.data));
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER half& half::operator/=(half const & s)
+ {
+ data = toFloat16(toFloat32(data) / toFloat32(s.data));
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER half& half::operator++()
+ {
+ float Casted = toFloat32(data);
+ this->data = toFloat16(++Casted);
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER half& half::operator--()
+ {
+ float Casted = toFloat32(data);
+ this->data = toFloat16(--Casted);
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Binary arithmetic operators
+
+ GLM_FUNC_QUALIFIER detail::half operator+ (detail::half const & s1, detail::half const & s2)
+ {
+ return detail::half(float(s1) + float(s2));
+ }
+
+ GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s1, detail::half const & s2)
+ {
+ return detail::half(float(s1) - float(s2));
+ }
+
+ GLM_FUNC_QUALIFIER detail::half operator* (detail::half const & s1, detail::half const & s2)
+ {
+ return detail::half(float(s1) * float(s2));
+ }
+
+ GLM_FUNC_QUALIFIER detail::half operator/ (detail::half const & s1, detail::half const & s2)
+ {
+ return detail::half(float(s1) / float(s2));
+ }
+
+ // Unary constant operators
+ GLM_FUNC_QUALIFIER detail::half operator- (detail::half const & s)
+ {
+ return detail::half(-float(s));
+ }
+
+ GLM_FUNC_QUALIFIER detail::half operator-- (detail::half const & s, int)
+ {
+ return detail::half(float(s) - 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER detail::half operator++ (detail::half const & s, int)
+ {
+ return detail::half(float(s) + 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ detail::half const & x,
+ detail::half const & y
+ )
+ {
+ return x._data() == y._data();
+ }
+
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ detail::half const & x,
+ detail::half const & y
+ )
+ {
+ return x._data() != y._data();
+ }
+
+ GLM_FUNC_QUALIFIER bool operator<
+ (
+ detail::half const & x,
+ detail::half const & y
+ )
+ {
+ return float(x) < float(y);
+ }
+
+ GLM_FUNC_QUALIFIER bool operator<=
+ (
+ detail::half const & x,
+ detail::half const & y
+ )
+ {
+ return float(x) <= float(y);
+ }
+
+ GLM_FUNC_QUALIFIER bool operator>
+ (
+ detail::half const & x,
+ detail::half const & y
+ )
+ {
+ return float(x) > float(y);
+ }
+
+ GLM_FUNC_QUALIFIER bool operator>=
+ (
+ detail::half const & x,
+ detail::half const & y
+ )
+ {
+ return float(x) >= float(y);
+ }
+
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/type_int.hpp b/include/gal/opengl/glm/core/type_int.hpp
new file mode 100644
index 0000000..c7de0c5
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_int.hpp
@@ -0,0 +1,142 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_int.hpp
+/// @date 2008-08-22 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_int
+#define glm_core_type_int
+
+#include "setup.hpp"
+#include "_detail.hpp"
+
+namespace glm{
+namespace detail
+{
+ typedef signed short lowp_int_t;
+ typedef signed int mediump_int_t;
+ typedef sint64 highp_int_t;
+
+ typedef unsigned short lowp_uint_t;
+ typedef unsigned int mediump_uint_t;
+ typedef uint64 highp_uint_t;
+
+ GLM_DETAIL_IS_INT(signed char);
+ GLM_DETAIL_IS_INT(signed short);
+ GLM_DETAIL_IS_INT(signed int);
+ GLM_DETAIL_IS_INT(signed long);
+
+ GLM_DETAIL_IS_UINT(unsigned char);
+ GLM_DETAIL_IS_UINT(unsigned short);
+ GLM_DETAIL_IS_UINT(unsigned int);
+ GLM_DETAIL_IS_UINT(unsigned long);
+
+#if(GLM_LANG >= GLM_LANG_CXX0X)
+ GLM_DETAIL_IS_INT(signed long long);
+ GLM_DETAIL_IS_UINT(unsigned long long);
+#else
+ GLM_DETAIL_IS_INT(highp_int_t);
+ GLM_DETAIL_IS_UINT(highp_uint_t);
+#endif
+}//namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// Low precision signed integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::lowp_int_t lowp_int;
+
+ /// Medium precision signed integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::mediump_int_t mediump_int;
+
+ /// High precision signed integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::highp_int_t highp_int;
+
+ /// Low precision unsigned integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::lowp_uint_t lowp_uint;
+
+ /// Medium precision unsigned integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::mediump_uint_t mediump_uint;
+
+ /// High precision unsigned integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::highp_uint_t highp_uint;
+
+#if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
+ typedef mediump_int int_t;
+#elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
+ typedef highp_int int_t;
+#elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
+ typedef mediump_int int_t;
+#elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_int int_t;
+#else
+# error "GLM error: multiple default precision requested for signed interger types"
+#endif
+
+#if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
+ typedef mediump_uint uint_t;
+#elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
+ typedef highp_uint uint_t;
+#elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
+ typedef mediump_uint uint_t;
+#elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_uint uint_t;
+#else
+# error "GLM error: multiple default precision requested for unsigned interger types"
+#endif
+
+ /// Unsigned integer type.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ typedef uint_t uint;
+
+ /// @}
+}//namespace glm
+
+#endif//glm_core_type_int
diff --git a/include/gal/opengl/glm/core/type_mat.hpp b/include/gal/opengl/glm/core/type_mat.hpp
new file mode 100644
index 0000000..1520ad5
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat.hpp
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat.hpp
+/// @date 2010-01-26 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat
+#define glm_core_type_mat
+
+#include "type_gentype.hpp"
+
+namespace glm{
+namespace detail
+{
+
+}//namespace detail
+}//namespace glm
+
+#endif//glm_core_type_mat
diff --git a/include/gal/opengl/glm/core/type_mat.inl b/include/gal/opengl/glm/core/type_mat.inl
new file mode 100644
index 0000000..477d17e
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat.inl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat.inl
+/// @date 2011-06-15 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/core/type_mat2x2.hpp b/include/gal/opengl/glm/core/type_mat2x2.hpp
new file mode 100644
index 0000000..432a6b9
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat2x2.hpp
@@ -0,0 +1,314 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat2x2.hpp
+/// @date 2005-01-27 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat2x2
+#define glm_core_type_mat2x2
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat2x2
+ {
+ // Implementation detail
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec2<T> col_type;
+ typedef tvec2<T> row_type;
+ typedef tmat2x2<T> type;
+ typedef tmat2x2<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ public:
+ // Implementation detail
+ GLM_FUNC_DECL tmat2x2<T> _inverse() const;
+
+ private:
+ //////////////////////////////////////
+ // Implementation detail
+ col_type value[2];
+
+ public:
+ //////////////////////////////////////
+ // Constructors
+ GLM_FUNC_DECL tmat2x2();
+ GLM_FUNC_DECL tmat2x2(
+ tmat2x2 const & m);
+
+ GLM_FUNC_DECL explicit tmat2x2(
+ ctor Null);
+ GLM_FUNC_DECL explicit tmat2x2(
+ value_type const & x);
+ GLM_FUNC_DECL explicit tmat2x2(
+ value_type const & x1, value_type const & y1,
+ value_type const & x2, value_type const & y2);
+ GLM_FUNC_DECL explicit tmat2x2(
+ col_type const & v1,
+ col_type const & v2);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat2x2(
+ U const & x);
+
+ template <typename U, typename V, typename M, typename N>
+ GLM_FUNC_DECL explicit tmat2x2(
+ U const & x1, V const & y1,
+ M const & x2, N const & y2);
+
+ template <typename U, typename V>
+ GLM_FUNC_DECL explicit tmat2x2(
+ tvec2<U> const & v1,
+ tvec2<V> const & v2);
+
+ //////////////////////////////////////
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat2x2(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat3x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x2(tmat4x3<T> const & x);
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator+=(tmat2x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator-=(tmat2x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator*=(tmat2x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T> & operator/=(tmat2x2<U> const & m);
+ GLM_FUNC_DECL tmat2x2<T> & operator++();
+ GLM_FUNC_DECL tmat2x2<T> & operator--();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator+ (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator- (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator- (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator- (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator* (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator* (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x2<T>::col_type operator* (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x2<T>::row_type operator* (
+ typename tmat2x2<T>::col_type const & v,
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator* (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator* (
+ tmat2x2<T> const & m1,
+ tmat3x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator* (
+ tmat2x2<T> const & m1,
+ tmat4x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator/ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator/ (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x2<T>::col_type operator/ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x2<T>::row_type operator/ (
+ typename tmat2x2<T>::col_type const & v,
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator/ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> const operator- (
+ tmat2x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> const operator-- (
+ tmat2x2<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> const operator++ (
+ tmat2x2<T> const & m,
+ int);
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x2<lowp_float> lowp_mat2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x2<mediump_float> mediump_mat2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x2<highp_float> highp_mat2;
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x2<lowp_float> lowp_mat2x2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x2<mediump_float> mediump_mat2x2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x2<highp_float> highp_mat2x2;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat2x2.inl"
+#endif
+
+#endif //glm_core_type_mat2x2
diff --git a/include/gal/opengl/glm/core/type_mat2x2.inl b/include/gal/opengl/glm/core/type_mat2x2.inl
new file mode 100644
index 0000000..9d6e191
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat2x2.inl
@@ -0,0 +1,688 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat2x2.inl
+/// @date 2005-01-16 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x2<T>::size_type tmat2x2<T>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::size_type tmat2x2<T>::col_size()
+ {
+ return 2;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::size_type tmat2x2<T>::row_size()
+ {
+ return 2;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type &
+ tmat2x2<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type const &
+ tmat2x2<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2()
+ {
+ this->value[0] = col_type(1, 0);
+ this->value[1] = col_type(0, 1);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero);
+ this->value[1] = col_type(Zero, s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ value_type const & x0, value_type const & y0,
+ value_type const & x1, value_type const & y1
+ )
+ {
+ this->value[0] = col_type(x0, y0);
+ this->value[1] = col_type(x1, y1);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ col_type const & v0,
+ col_type const & v1
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T>::tmat2x2
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec2<T>(value_type(s), Zero);
+ this->value[1] = tvec2<T>(Zero, value_type(s));
+ }
+
+ template <typename T>
+ template <typename X1, typename Y1, typename X2, typename Y2>
+ GLM_FUNC_DECL tmat2x2<T>::tmat2x2
+ (
+ X1 const & x1, Y1 const & y1,
+ X2 const & x2, Y2 const & y2
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1));
+ this->value[1] = col_type(value_type(x2), value_type(y2));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2>
+ GLM_FUNC_DECL tmat2x2<T>::tmat2x2
+ (
+ tvec2<V1> const & v1,
+ tvec2<V2> const & v2
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ }
+
+ //////////////////////////////////////////////////////////////
+ // mat2x2 matrix conversions
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat2x2<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> tmat2x2<T>::_inverse() const
+ {
+ typename tmat2x2<T>::value_type Determinant = this->value[0][0] * this->value[1][1] - this->value[1][0] * this->value[0][1];
+
+ tmat2x2<T> Inverse(
+ + this->value[1][1] / Determinant,
+ - this->value[0][1] / Determinant,
+ - this->value[1][0] / Determinant,
+ + this->value[0][0] / Determinant);
+ return Inverse;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // mat2x2 operators
+
+ // This function shouldn't required but it seems that VC7.1 have an optimisation bug if this operator wasn't declared
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator=
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator=
+ (
+ tmat2x2<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator+=
+ (
+ tmat2x2<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator-=
+ (
+ tmat2x2<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator*=
+ (
+ tmat2x2<U> const & m
+ )
+ {
+ return (*this = *this * m);
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator/=
+ (
+ tmat2x2<U> const & m
+ )
+ {
+ return (*this = *this / m);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator+
+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s
+ )
+ {
+ return tmat2x2<T>(
+ m[0] + s,
+ m[1] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator+
+ (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m
+ )
+ {
+ return tmat2x2<T>(
+ m[0] + s,
+ m[1] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator+
+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return tmat2x2<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator-
+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s
+ )
+ {
+ return tmat2x2<T>(
+ m[0] - s,
+ m[1] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator-
+ (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m
+ )
+ {
+ return tmat2x2<T>(
+ s - m[0],
+ s - m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator-
+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return tmat2x2<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator*
+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s
+ )
+ {
+ return tmat2x2<T>(
+ m[0] * s,
+ m[1] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator*
+ (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m
+ )
+ {
+ return tmat2x2<T>(
+ m[0] * s,
+ m[1] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type operator*
+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::row_type const & v
+ )
+ {
+ return detail::tvec2<T>(
+ m[0][0] * v.x + m[1][0] * v.y,
+ m[0][1] * v.x + m[1][1] * v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::row_type operator*
+ (
+ typename tmat2x2<T>::col_type const & v,
+ tmat2x2<T> const & m
+ )
+ {
+ return detail::tvec2<T>(
+ v.x * m[0][0] + v.y * m[0][1],
+ v.x * m[1][0] + v.y * m[1][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator*
+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return tmat2x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator*
+ (
+ tmat2x2<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ return tmat3x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator*
+ (
+ tmat2x2<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ return tmat4x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator/
+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::value_type const & s
+ )
+ {
+ return tmat2x2<T>(
+ m[0] / s,
+ m[1] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator/
+ (
+ typename tmat2x2<T>::value_type const & s,
+ tmat2x2<T> const & m
+ )
+ {
+ return tmat2x2<T>(
+ s / m[0],
+ s / m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type operator/
+ (
+ tmat2x2<T> const & m,
+ typename tmat2x2<T>::row_type & v
+ )
+ {
+ return m._inverse() * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T>::row_type operator/
+ (
+ typename tmat2x2<T>::col_type const & v,
+ tmat2x2<T> const & m
+ )
+ {
+ return v * m._inverse();
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator/
+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return m1 * m2._inverse();
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> const operator-
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ return tmat2x2<T>(
+ -m[0],
+ -m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> const operator++
+ (
+ tmat2x2<T> const & m,
+ int
+ )
+ {
+ return tmat2x2<T>(
+ m[0] + T(1),
+ m[1] + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> const operator--
+ (
+ tmat2x2<T> const & m,
+ int
+ )
+ {
+ return tmat2x2<T>(
+ m[0] - T(1),
+ m[1] - T(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat2x2<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]);
+ }
+
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat2x3.hpp b/include/gal/opengl/glm/core/type_mat2x3.hpp
new file mode 100644
index 0000000..14f1548
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat2x3.hpp
@@ -0,0 +1,258 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat2x3.hpp
+/// @date 2006-10-01 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat2x3
+#define glm_core_type_mat2x3
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat2x3
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec3<T> col_type;
+ typedef tvec2<T> row_type;
+ typedef tmat2x3<T> type;
+ typedef tmat3x2<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ private:
+ // Data
+ col_type value[2];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat2x3();
+ GLM_FUNC_DECL tmat2x3(tmat2x3 const & m);
+
+ GLM_FUNC_DECL explicit tmat2x3(
+ ctor);
+ GLM_FUNC_DECL explicit tmat2x3(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tmat2x3(
+ value_type const & x0, value_type const & y0, value_type const & z0,
+ value_type const & x1, value_type const & y1, value_type const & z1);
+ GLM_FUNC_DECL explicit tmat2x3(
+ col_type const & v0,
+ col_type const & v1);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat2x3(
+ U const & x);
+
+ template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
+ GLM_FUNC_DECL explicit tmat2x3(
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2);
+
+ template <typename U, typename V>
+ GLM_FUNC_DECL explicit tmat2x3(
+ tvec3<U> const & v1,
+ tvec3<V> const & v2);
+
+ //////////////////////////////////////
+ // Matrix conversion
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat2x3(tmat2x3<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat2x3(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat3x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x3(tmat4x3<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat2x3<T> & operator= (tmat2x3<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator= (tmat2x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator+= (tmat2x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator-= (tmat2x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator*= (tmat2x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T> & operator/= (U s);
+
+ GLM_FUNC_DECL tmat2x3<T> & operator++ ();
+ GLM_FUNC_DECL tmat2x3<T> & operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator+ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator+ (
+ tmat2x3<T> const & m1,
+ tmat2x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator- (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator- (
+ tmat2x3<T> const & m1,
+ tmat2x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator* (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator* (
+ typename tmat2x3<T>::value_type const & s,
+ tmat2x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x3<T>::col_type operator* (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x3<T>::row_type operator* (
+ typename tmat2x3<T>::col_type const & v,
+ tmat2x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator* (
+ tmat2x3<T> const & m1,
+ tmat2x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator* (
+ tmat2x3<T> const & m1,
+ tmat3x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator* (
+ tmat2x3<T> const & m1,
+ tmat4x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator/ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator/ (
+ typename tmat2x3<T>::value_type const & s,
+ tmat2x3<T> const & m);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> const operator- (
+ tmat2x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> const operator-- (
+ tmat2x3<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> const operator++ (
+ tmat2x3<T> const & m,
+ int);
+
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x3<lowp_float> lowp_mat2x3;
+
+ /// 2 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x3<mediump_float> mediump_mat2x3;
+
+ /// 2 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x3<highp_float> highp_mat2x3;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat2x3.inl"
+#endif
+
+#endif //glm_core_type_mat2x3
diff --git a/include/gal/opengl/glm/core/type_mat2x3.inl b/include/gal/opengl/glm/core/type_mat2x3.inl
new file mode 100644
index 0000000..b77f4fa
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat2x3.inl
@@ -0,0 +1,633 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat2x3.inl
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x3<T>::size_type tmat2x3<T>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T>::size_type tmat2x3<T>::col_size()
+ {
+ return 3;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T>::size_type tmat2x3<T>::row_size()
+ {
+ return 2;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T>::col_type &
+ tmat2x3<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T>::col_type const &
+ tmat2x3<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3()
+ {
+ this->value[0] = col_type(T(1), T(0), T(0));
+ this->value[1] = col_type(T(0), T(1), T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ value_type const & s
+ )
+ {
+ this->value[0] = col_type(s, T(0), T(0));
+ this->value[1] = col_type(T(0), s, T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ value_type const & x0, value_type const & y0, value_type const & z0,
+ value_type const & x1, value_type const & y1, value_type const & z1
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0);
+ this->value[1] = col_type(x1, y1, z1);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ col_type const & v0,
+ col_type const & v1
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T>::tmat2x3
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec3<T>(value_type(s), Zero, Zero);
+ this->value[1] = tvec3<T>(Zero, value_type(s), Zero);
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2>
+ GLM_FUNC_DECL tmat2x3<T>::tmat2x3
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1));
+ this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2>
+ GLM_FUNC_DECL tmat2x3<T>::tmat2x3
+ (
+ tvec3<V1> const & v1,
+ tvec3<V2> const & v2
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ }
+
+ //////////////////////////////////////
+ // Matrix conversions
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat2x3<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Unary updatable operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator=
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator=
+ (
+ tmat2x3<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator+=
+ (
+ tmat2x3<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator-=
+ (
+ tmat2x3<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator*=
+ (
+ tmat2x3<U> const & m
+ )
+ {
+ return (*this = tmat2x3<U>(*this * m));
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator+
+ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s
+ )
+ {
+ return tmat2x3<T>(
+ m[0] + s,
+ m[1] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator+
+ (
+ tmat2x3<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ return tmat2x3<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator-
+ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s
+ )
+ {
+ return tmat2x3<T>(
+ m[0] - s,
+ m[1] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator-
+ (
+ tmat2x3<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ return tmat2x3<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator*
+ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s
+ )
+ {
+ return tmat2x3<T>(
+ m[0] * s,
+ m[1] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator*
+ (
+ typename tmat2x3<T>::value_type const & s,
+ tmat2x3<T> const & m
+ )
+ {
+ return tmat2x3<T>(
+ m[0] * s,
+ m[1] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T>::col_type operator*
+ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::row_type const & v)
+ {
+ return typename tmat2x3<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y,
+ m[0][1] * v.x + m[1][1] * v.y,
+ m[0][2] * v.x + m[1][2] * v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T>::row_type operator*
+ (
+ typename tmat2x3<T>::col_type const & v,
+ tmat2x3<T> const & m)
+ {
+ return typename tmat2x3<T>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator*
+ (
+ tmat2x3<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return tmat2x3<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator*
+ (
+ tmat2x3<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ typename tmat2x3<T>::value_type SrcA00 = m1[0][0];
+ typename tmat2x3<T>::value_type SrcA01 = m1[0][1];
+ typename tmat2x3<T>::value_type SrcA02 = m1[0][2];
+ typename tmat2x3<T>::value_type SrcA10 = m1[1][0];
+ typename tmat2x3<T>::value_type SrcA11 = m1[1][1];
+ typename tmat2x3<T>::value_type SrcA12 = m1[1][2];
+
+ typename tmat2x3<T>::value_type SrcB00 = m2[0][0];
+ typename tmat2x3<T>::value_type SrcB01 = m2[0][1];
+ typename tmat2x3<T>::value_type SrcB10 = m2[1][0];
+ typename tmat2x3<T>::value_type SrcB11 = m2[1][1];
+ typename tmat2x3<T>::value_type SrcB20 = m2[2][0];
+ typename tmat2x3<T>::value_type SrcB21 = m2[2][1];
+
+ tmat3x3<T> Result(tmat3x3<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator*
+ (
+ tmat2x3<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ return tmat4x3<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1],
+ m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator/
+ (
+ tmat2x3<T> const & m,
+ typename tmat2x3<T>::value_type const & s
+ )
+ {
+ return tmat2x3<T>(
+ m[0] / s,
+ m[1] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator/
+ (
+ typename tmat2x3<T>::value_type const & s,
+ tmat2x3<T> const & m
+ )
+ {
+ return tmat2x3<T>(
+ s / m[0],
+ s / m[1]);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> const operator-
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ return tmat2x3<T>(
+ -m[0],
+ -m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> const operator++
+ (
+ tmat2x3<T> const & m,
+ int
+ )
+ {
+ return tmat2x3<T>(
+ m[0] + typename tmat2x3<T>::value_type(1),
+ m[1] + typename tmat2x3<T>::value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> const operator--
+ (
+ tmat2x3<T> const & m,
+ int
+ )
+ {
+ return tmat2x3<T>(
+ m[0] - typename tmat2x3<T>::value_type(1),
+ m[1] - typename tmat2x3<T>::value_type(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat2x3<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat2x3<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]);
+ }
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat2x4.hpp b/include/gal/opengl/glm/core/type_mat2x4.hpp
new file mode 100644
index 0000000..c335700
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat2x4.hpp
@@ -0,0 +1,260 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat2x4.hpp
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat2x4
+#define glm_core_type_mat2x4
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat2x4
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec4<T> col_type;
+ typedef tvec2<T> row_type;
+ typedef tmat2x4<T> type;
+ typedef tmat4x2<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ private:
+ // Data
+ col_type value[2];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat2x4();
+ GLM_FUNC_DECL tmat2x4(tmat2x4 const & m);
+
+ GLM_FUNC_DECL explicit tmat2x4(
+ ctor);
+ GLM_FUNC_DECL explicit tmat2x4(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tmat2x4(
+ value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
+ value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1);
+ GLM_FUNC_DECL explicit tmat2x4(
+ col_type const & v0,
+ col_type const & v1);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat2x4(
+ U const & x);
+
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2>
+ GLM_FUNC_DECL explicit tmat2x4(
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2);
+
+ template <typename U, typename V>
+ GLM_FUNC_DECL explicit tmat2x4(
+ tvec4<U> const & v1,
+ tvec4<V> const & v2);
+
+ //////////////////////////////////////
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat2x4(tmat2x4<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat2x4(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat3x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat2x4(tmat4x3<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat2x4<T>& operator= (tmat2x4<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator= (tmat2x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator+= (tmat2x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator-= (tmat2x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator*= (tmat2x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>& operator/= (U s);
+
+ GLM_FUNC_DECL tmat2x4<T>& operator++ ();
+ GLM_FUNC_DECL tmat2x4<T>& operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator+ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator+ (
+ tmat2x4<T> const & m1,
+ tmat2x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator- (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator- (
+ tmat2x4<T> const & m1,
+ tmat2x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator* (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator* (
+ typename tmat2x4<T>::value_type const & s,
+ tmat2x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x4<T>::col_type operator* (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat2x4<T>::row_type operator* (
+ typename tmat2x4<T>::col_type const & v,
+ tmat2x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator* (
+ tmat2x4<T> const & m1,
+ tmat4x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator* (
+ tmat2x4<T> const & m1,
+ tmat2x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator* (
+ tmat2x4<T> const & m1,
+ tmat3x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator/ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator/ (
+ typename tmat2x4<T>::value_type const & s,
+ tmat2x4<T> const & m);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> const operator- (
+ tmat2x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> const operator-- (
+ tmat2x4<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> const operator++ (
+ tmat2x4<T> const & m,
+ int);
+
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x4<lowp_float> lowp_mat2x4;
+
+ /// 2 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x4<mediump_float> mediump_mat2x4;
+
+ /// 2 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat2x4<highp_float> highp_mat2x4;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat2x4.inl"
+#endif
+
+#endif //glm_core_type_mat2x4
diff --git a/include/gal/opengl/glm/core/type_mat2x4.inl b/include/gal/opengl/glm/core/type_mat2x4.inl
new file mode 100644
index 0000000..598bddc
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat2x4.inl
@@ -0,0 +1,652 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat2x4.inl
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x4<T>::size_type tmat2x4<T>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T>::size_type tmat2x4<T>::col_size()
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T>::size_type tmat2x4<T>::row_size()
+ {
+ return 2;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T>::col_type &
+ tmat2x4<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T>::col_type const &
+ tmat2x4<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4()
+ {
+ value_type const Zero(0);
+ value_type const One(1);
+ this->value[0] = col_type(One, Zero, Zero, Zero);
+ this->value[1] = col_type(Zero, One, Zero, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero, Zero, Zero);
+ this->value[1] = col_type(Zero, s, Zero, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
+ value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0, w0);
+ this->value[1] = col_type(x1, y1, z1, w1);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ col_type const & v0,
+ col_type const & v1
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T>::tmat2x4
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec4<T>(value_type(s), Zero, Zero, Zero);
+ this->value[1] = tvec4<T>(Zero, value_type(s), Zero, Zero);
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2>
+ GLM_FUNC_DECL tmat2x4<T>::tmat2x4
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1));
+ this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2>
+ GLM_FUNC_DECL tmat2x4<T>::tmat2x4
+ (
+ tvec4<V1> const & v1,
+ tvec4<V2> const & v2
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ }
+
+ //////////////////////////////////////
+ // Matrix conversions
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat2x4<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(T(0)));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(T(0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Unary updatable operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator=
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator=
+ (
+ tmat2x4<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator+=
+ (
+ tmat2x4<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator-=
+ (
+ tmat2x4<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator*=
+ (
+ tmat2x4<U> const & m
+ )
+ {
+ return (*this = tmat2x4<T>(*this * m));
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T> & tmat2x4<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator+
+ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s
+ )
+ {
+ return tmat2x4<T>(
+ m[0] + s,
+ m[1] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator+
+ (
+ tmat2x4<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ return tmat2x4<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator-
+ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s
+ )
+ {
+ return tmat2x4<T>(
+ m[0] - s,
+ m[1] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator-
+ (
+ tmat2x4<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ return tmat2x4<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator*
+ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s
+ )
+ {
+ return tmat2x4<T>(
+ m[0] * s,
+ m[1] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator*
+ (
+ typename tmat2x4<T>::value_type const & s,
+ tmat2x4<T> const & m
+ )
+ {
+ return tmat2x4<T>(
+ m[0] * s,
+ m[1] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T>::col_type operator*
+ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::row_type const & v
+ )
+ {
+ return typename tmat2x4<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y,
+ m[0][1] * v.x + m[1][1] * v.y,
+ m[0][2] * v.x + m[1][2] * v.y,
+ m[0][3] * v.x + m[1][3] * v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T>::row_type operator*
+ (
+ typename tmat2x4<T>::col_type const & v,
+ tmat2x4<T> const & m
+ )
+ {
+ return typename tmat2x4<T>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator*
+ (
+ tmat2x4<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ typename tmat2x4<T>::value_type SrcA00 = m1[0][0];
+ typename tmat2x4<T>::value_type SrcA01 = m1[0][1];
+ typename tmat2x4<T>::value_type SrcA02 = m1[0][2];
+ typename tmat2x4<T>::value_type SrcA03 = m1[0][3];
+ typename tmat2x4<T>::value_type SrcA10 = m1[1][0];
+ typename tmat2x4<T>::value_type SrcA11 = m1[1][1];
+ typename tmat2x4<T>::value_type SrcA12 = m1[1][2];
+ typename tmat2x4<T>::value_type SrcA13 = m1[1][3];
+
+ typename tmat2x4<T>::value_type SrcB00 = m2[0][0];
+ typename tmat2x4<T>::value_type SrcB01 = m2[0][1];
+ typename tmat2x4<T>::value_type SrcB10 = m2[1][0];
+ typename tmat2x4<T>::value_type SrcB11 = m2[1][1];
+ typename tmat2x4<T>::value_type SrcB20 = m2[2][0];
+ typename tmat2x4<T>::value_type SrcB21 = m2[2][1];
+ typename tmat2x4<T>::value_type SrcB30 = m2[3][0];
+ typename tmat2x4<T>::value_type SrcB31 = m2[3][1];
+
+ tmat4x4<T> Result(tmat4x4<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
+ Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
+ Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
+ Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;
+ Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;
+ Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;
+ Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;
+ Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator*
+ (
+ tmat2x4<T> const & m1,
+ tmat2x2<T> const & m2
+ )
+ {
+ return tmat2x4<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator*
+ (
+ tmat2x4<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ return tmat3x4<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],
+ m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator/
+ (
+ tmat2x4<T> const & m,
+ typename tmat2x4<T>::value_type const & s
+ )
+ {
+ return tmat2x4<T>(
+ m[0] / s,
+ m[1] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator/
+ (
+ typename tmat2x4<T>::value_type const & s,
+ tmat2x4<T> const & m
+ )
+ {
+ return tmat2x4<T>(
+ s / m[0],
+ s / m[1]);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> const operator-
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ return tmat2x4<T>(
+ -m[0],
+ -m[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> const operator++
+ (
+ tmat2x4<T> const & m,
+ int
+ )
+ {
+ return tmat2x4<T>(
+ m[0] + typename tmat2x4<T>::value_type(1),
+ m[1] + typename tmat2x4<T>::value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> const operator--
+ (
+ tmat2x4<T> const & m,
+ int
+ )
+ {
+ return tmat2x4<T>(
+ m[0] - typename tmat2x4<T>::value_type(1),
+ m[1] - typename tmat2x4<T>::value_type(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat2x4<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat2x4<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]);
+ }
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat3x2.hpp b/include/gal/opengl/glm/core/type_mat3x2.hpp
new file mode 100644
index 0000000..06a3228
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat3x2.hpp
@@ -0,0 +1,265 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat3x2.hpp
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat3x2
+#define glm_core_type_mat3x2
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat3x2
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec2<T> col_type;
+ typedef tvec3<T> row_type;
+ typedef tmat3x2<T> type;
+ typedef tmat2x3<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ private:
+ // Data
+ col_type value[3];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat3x2();
+ GLM_FUNC_DECL tmat3x2(tmat3x2 const & m);
+
+ GLM_FUNC_DECL explicit tmat3x2(
+ ctor);
+ GLM_FUNC_DECL explicit tmat3x2(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tmat3x2(
+ value_type const & x0, value_type const & y0,
+ value_type const & x1, value_type const & y1,
+ value_type const & x2, value_type const & y2);
+ GLM_FUNC_DECL explicit tmat3x2(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat3x2(
+ U const & x);
+
+ template
+ <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3
+ >
+ GLM_FUNC_DECL explicit tmat3x2(
+ X1 const & x1, Y1 const & y1,
+ X2 const & x2, Y2 const & y2,
+ X3 const & x3, Y3 const & y3);
+
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL explicit tmat3x2(
+ tvec2<V1> const & v1,
+ tvec2<V2> const & v2,
+ tvec2<V3> const & v3);
+
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat3x2(tmat3x2<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat3x2(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat3x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x2(tmat4x3<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat3x2<T> & operator= (tmat3x2<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator= (tmat3x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator+= (tmat3x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator-= (tmat3x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator*= (tmat3x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T> & operator/= (U s);
+
+ GLM_FUNC_DECL tmat3x2<T> & operator++ ();
+ GLM_FUNC_DECL tmat3x2<T> & operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator+ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator+ (
+ tmat3x2<T> const & m1,
+ tmat3x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator- (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator- (
+ tmat3x2<T> const & m1,
+ tmat3x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator* (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator* (
+ typename tmat3x2<T>::value_type const & s,
+ tmat3x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x2<T>::col_type operator* (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x2<T>::row_type operator* (
+ typename tmat3x2<T>::col_type const & v,
+ tmat3x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T> operator* (
+ tmat3x2<T> const & m1,
+ tmat2x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator* (
+ tmat3x2<T> const & m1,
+ tmat3x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator* (
+ tmat3x2<T> const & m1,
+ tmat4x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator/ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator/ (
+ typename tmat3x2<T>::value_type const & s,
+ tmat3x2<T> const & m);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> const operator- (
+ tmat3x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> const operator-- (
+ tmat3x2<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> const operator++ (
+ tmat3x2<T> const & m,
+ int);
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x2<lowp_float> lowp_mat3x2;
+
+ /// 3 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x2<mediump_float> mediump_mat3x2;
+
+ /// 3 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x2<highp_float> highp_mat3x2;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat3x2.inl"
+#endif
+
+#endif //glm_core_type_mat3x2
diff --git a/include/gal/opengl/glm/core/type_mat3x2.inl b/include/gal/opengl/glm/core/type_mat3x2.inl
new file mode 100644
index 0000000..7d7e16e
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat3x2.inl
@@ -0,0 +1,670 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat3x2.inl
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x2<T>::size_type tmat3x2<T>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T>::size_type tmat3x2<T>::col_size()
+ {
+ return 2;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T>::size_type tmat3x2<T>::row_size()
+ {
+ return 3;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T>::col_type &
+ tmat3x2<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T>::col_type const &
+ tmat3x2<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2()
+ {
+ this->value[0] = col_type(1, 0);
+ this->value[1] = col_type(0, 1);
+ this->value[2] = col_type(0, 0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ value_type const & s
+ )
+ {
+ this->value[0] = col_type(s, 0);
+ this->value[1] = col_type(0, s);
+ this->value[2] = col_type(0, 0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ value_type const & x0, value_type const & y0,
+ value_type const & x1, value_type const & y1,
+ value_type const & x2, value_type const & y2
+ )
+ {
+ this->value[0] = col_type(x0, y0);
+ this->value[1] = col_type(x1, y1);
+ this->value[2] = col_type(x2, y2);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T>::tmat3x2
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec2<T>(value_type(s), Zero);
+ this->value[1] = tvec2<T>(Zero, value_type(s));
+ this->value[2] = tvec2<T>(Zero);
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3>
+ GLM_FUNC_DECL tmat3x2<T>::tmat3x2
+ (
+ X1 const & x1, Y1 const & y1,
+ X2 const & x2, Y2 const & y2,
+ X3 const & x3, Y3 const & y3
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1));
+ this->value[1] = col_type(value_type(x2), value_type(y2));
+ this->value[2] = col_type(value_type(x3), value_type(y3));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL tmat3x2<T>::tmat3x2
+ (
+ tvec2<V1> const & v1,
+ tvec2<V2> const & v2,
+ tvec2<V3> const & v3
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ }
+
+ //////////////////////////////////////////////////////////////
+ // mat3x2 matrix conversions
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat3x2<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = col_type(T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>::tmat3x2
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Unary updatable operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator=
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator=
+ (
+ tmat3x2<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator+=
+ (
+ tmat3x2<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator-=
+ (
+ tmat3x2<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator*=
+ (
+ tmat3x2<U> const & m
+ )
+ {
+ return (*this = tmat3x2<T>(*this * m));
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T> & tmat3x2<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T>& tmat3x2<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator+
+ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s
+ )
+ {
+ return tmat3x2<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator+
+ (
+ tmat3x2<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ return tmat3x2<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator-
+ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s
+ )
+ {
+ return tmat3x2<T>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator-
+ (
+ tmat3x2<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ return tmat3x2<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator*
+ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s
+ )
+ {
+ return tmat3x2<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator*
+ (
+ typename tmat3x2<T>::value_type const & s,
+ tmat3x2<T> const & m
+ )
+ {
+ return tmat3x2<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T>::col_type operator*
+ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::row_type const & v)
+ {
+ return typename tmat3x2<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T>::row_type operator*
+ (
+ typename tmat3x2<T>::col_type const & v,
+ tmat3x2<T> const & m)
+ {
+ return typename tmat3x2<T>::row_type(
+ v.x * m[0][0] + v.y * m[0][1],
+ v.x * m[1][0] + v.y * m[1][1],
+ v.x * m[2][0] + v.y * m[2][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator*
+ (
+ tmat3x2<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ const T SrcA00 = m1[0][0];
+ const T SrcA01 = m1[0][1];
+ const T SrcA10 = m1[1][0];
+ const T SrcA11 = m1[1][1];
+ const T SrcA20 = m1[2][0];
+ const T SrcA21 = m1[2][1];
+
+ const T SrcB00 = m2[0][0];
+ const T SrcB01 = m2[0][1];
+ const T SrcB02 = m2[0][2];
+ const T SrcB10 = m2[1][0];
+ const T SrcB11 = m2[1][1];
+ const T SrcB12 = m2[1][2];
+
+ tmat2x2<T> Result(tmat2x2<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator*
+ (
+ tmat3x2<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return tmat3x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator*
+ (
+ tmat3x2<T> const & m1,
+ tmat4x3<T> const & m2
+ )
+ {
+ return tmat4x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator/
+ (
+ tmat3x2<T> const & m,
+ typename tmat3x2<T>::value_type const & s
+ )
+ {
+ return tmat3x2<T>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator/
+ (
+ typename tmat3x2<T>::value_type const & s,
+ tmat3x2<T> const & m
+ )
+ {
+ return tmat3x2<T>(
+ s / m[0],
+ s / m[1],
+ s / m[2]);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> const operator-
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ return tmat3x2<T>(
+ -m[0],
+ -m[1],
+ -m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> const operator++
+ (
+ tmat3x2<T> const & m,
+ int
+ )
+ {
+ typename tmat3x2<T>::value_type One(1);
+ return tmat3x2<T>(
+ m[0] + One,
+ m[1] + One,
+ m[2] + One);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> const operator--
+ (
+ tmat3x2<T> const & m,
+ int
+ )
+ {
+ typename tmat3x2<T>::value_type One(1);
+ return tmat3x2<T>(
+ m[0] - One,
+ m[1] - One,
+ m[2] - One);
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat3x2<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat3x2<T> const & m1,
+ tmat3x2<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
+ }
+
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat3x3.hpp b/include/gal/opengl/glm/core/type_mat3x3.hpp
new file mode 100644
index 0000000..b2122d8
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat3x3.hpp
@@ -0,0 +1,318 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat3x3.hpp
+/// @date 2005-01-27 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat3x3
+#define glm_core_type_mat3x3
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat3x3
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec3<T> col_type;
+ typedef tvec3<T> row_type;
+ typedef tmat3x3<T> type;
+ typedef tmat3x3<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ public:
+ /// Implementation detail
+ /// @cond DETAIL
+ GLM_FUNC_DECL tmat3x3<T> _inverse() const;
+ /// @endcond
+
+ private:
+ // Data
+ col_type value[3];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat3x3();
+ GLM_FUNC_DECL tmat3x3(tmat3x3 const & m);
+
+ GLM_FUNC_DECL explicit tmat3x3(
+ ctor Null);
+ GLM_FUNC_DECL explicit tmat3x3(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tmat3x3(
+ value_type const & x0, value_type const & y0, value_type const & z0,
+ value_type const & x1, value_type const & y1, value_type const & z1,
+ value_type const & x2, value_type const & y2, value_type const & z2);
+ GLM_FUNC_DECL explicit tmat3x3(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat3x3(
+ U const & x);
+
+ template
+ <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3
+ >
+ GLM_FUNC_DECL explicit tmat3x3(
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3);
+
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL explicit tmat3x3(
+ tvec3<V1> const & v1,
+ tvec3<V2> const & v2,
+ tvec3<V3> const & v3);
+
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat3x3(tmat3x3<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat3x3(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat3x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x3(tmat4x3<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat3x3<T>& operator= (tmat3x3<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator= (tmat3x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator+= (tmat3x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator-= (tmat3x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator*= (tmat3x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator/= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>& operator/= (tmat3x3<U> const & m);
+ GLM_FUNC_DECL tmat3x3<T>& operator++ ();
+ GLM_FUNC_DECL tmat3x3<T>& operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator+ (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator- (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator- (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator- (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator* (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator* (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x3<T>::col_type operator* (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x3<T>::row_type operator* (
+ typename tmat3x3<T>::col_type const & v,
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator* (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator* (
+ tmat3x3<T> const & m1,
+ tmat2x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator* (
+ tmat3x3<T> const & m1,
+ tmat4x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator/ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator/ (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x3<T>::col_type operator/ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x3<T>::row_type operator/ (
+ typename tmat3x3<T>::col_type const & v,
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator/ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> const operator- (
+ tmat3x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> const operator-- (
+ tmat3x3<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> const operator++ (
+ tmat3x3<T> const & m,
+ int);
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x3<lowp_float> lowp_mat3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x3<mediump_float> mediump_mat3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x3<highp_float> highp_mat3;
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x3<lowp_float> lowp_mat3x3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x3<mediump_float> mediump_mat3x3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x3<highp_float> highp_mat3x3;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat3x3.inl"
+#endif
+
+#endif //glm_core_type_mat3x3
diff --git a/include/gal/opengl/glm/core/type_mat3x3.inl b/include/gal/opengl/glm/core/type_mat3x3.inl
new file mode 100644
index 0000000..73731e9
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat3x3.inl
@@ -0,0 +1,800 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat3x3.inl
+/// @date 2005-01-27 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x3<T>::size_type tmat3x3<T>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::size_type tmat3x3<T>::col_size()
+ {
+ return 3;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::size_type tmat3x3<T>::row_size()
+ {
+ return 3;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::col_type &
+ tmat3x3<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::col_type const &
+ tmat3x3<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3()
+ {
+ value_type const Zero(0);
+ value_type const One(1);
+ this->value[0] = col_type(One, Zero, Zero);
+ this->value[1] = col_type(Zero, One, Zero);
+ this->value[2] = col_type(Zero, Zero, One);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero, Zero);
+ this->value[1] = col_type(Zero, s, Zero);
+ this->value[2] = col_type(Zero, Zero, s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ value_type const & x0, value_type const & y0, value_type const & z0,
+ value_type const & x1, value_type const & y1, value_type const & z1,
+ value_type const & x2, value_type const & y2, value_type const & z2
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0);
+ this->value[1] = col_type(x1, y1, z1);
+ this->value[2] = col_type(x2, y2, z2);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T>::tmat3x3
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec3<T>(value_type(s), Zero, Zero);
+ this->value[1] = tvec3<T>(Zero, value_type(s), Zero);
+ this->value[2] = tvec3<T>(Zero, Zero, value_type(s));
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3>
+ GLM_FUNC_DECL tmat3x3<T>::tmat3x3
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1));
+ this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2));
+ this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL tmat3x3<T>::tmat3x3
+ (
+ tvec3<V1> const & v1,
+ tvec3<V2> const & v2,
+ tvec3<V3> const & v3
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Conversions
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat3x3<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(detail::tvec2<T>(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = col_type(detail::tvec2<T>(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(m[2], value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(detail::tvec2<T>(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(m[2], value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T>::tmat3x3
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator=
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator=
+ (
+ tmat3x3<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator+=
+ (
+ tmat3x3<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator-=
+ (
+ tmat3x3<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator*=
+ (
+ tmat3x3<U> const & m
+ )
+ {
+ return (*this = *this * m);
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator/=
+ (
+ tmat3x3<U> const & m
+ )
+ {
+ return (*this = *this / m);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> & tmat3x3<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> tmat3x3<T>::_inverse() const
+ {
+ T S00 = value[0][0];
+ T S01 = value[0][1];
+ T S02 = value[0][2];
+
+ T S10 = value[1][0];
+ T S11 = value[1][1];
+ T S12 = value[1][2];
+
+ T S20 = value[2][0];
+ T S21 = value[2][1];
+ T S22 = value[2][2];
+/*
+ tmat3x3<T> Inverse(
+ + (S11 * S22 - S21 * S12),
+ - (S10 * S22 - S20 * S12),
+ + (S10 * S21 - S20 * S11),
+ - (S01 * S22 - S21 * S02),
+ + (S00 * S22 - S20 * S02),
+ - (S00 * S21 - S20 * S01),
+ + (S01 * S12 - S11 * S02),
+ - (S00 * S12 - S10 * S02),
+ + (S00 * S11 - S10 * S01));
+*/
+ tmat3x3<T> Inverse(
+ S11 * S22 - S21 * S12,
+ S12 * S20 - S22 * S10,
+ S10 * S21 - S20 * S11,
+ S02 * S21 - S01 * S22,
+ S00 * S22 - S02 * S20,
+ S01 * S20 - S00 * S21,
+ S12 * S01 - S11 * S02,
+ S10 * S02 - S12 * S00,
+ S11 * S00 - S10 * S01);
+
+ T Determinant = S00 * (S11 * S22 - S21 * S12)
+ - S10 * (S01 * S22 - S21 * S02)
+ + S20 * (S01 * S12 - S11 * S02);
+
+ Inverse /= Determinant;
+ return Inverse;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator+
+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s
+ )
+ {
+ return tmat3x3<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator+
+ (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m
+ )
+ {
+ return tmat3x3<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator+
+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return tmat3x3<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator-
+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s
+ )
+ {
+ return tmat3x3<T>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator-
+ (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m
+ )
+ {
+ return tmat3x3<T>(
+ s - m[0],
+ s - m[1],
+ s - m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator-
+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return tmat3x3<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator*
+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s
+ )
+ {
+ return tmat3x3<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator*
+ (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m
+ )
+ {
+ return tmat3x3<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::col_type operator*
+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::row_type const & v
+ )
+ {
+ return typename tmat3x3<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::row_type operator*
+ (
+ typename tmat3x3<T>::col_type const & v,
+ tmat3x3<T> const & m
+ )
+ {
+ return typename tmat3x3<T>::row_type(
+ m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z,
+ m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z,
+ m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator*
+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ typename tmat3x3<T>::value_type const SrcA00 = m1[0][0];
+ typename tmat3x3<T>::value_type const SrcA01 = m1[0][1];
+ typename tmat3x3<T>::value_type const SrcA02 = m1[0][2];
+ typename tmat3x3<T>::value_type const SrcA10 = m1[1][0];
+ typename tmat3x3<T>::value_type const SrcA11 = m1[1][1];
+ typename tmat3x3<T>::value_type const SrcA12 = m1[1][2];
+ typename tmat3x3<T>::value_type const SrcA20 = m1[2][0];
+ typename tmat3x3<T>::value_type const SrcA21 = m1[2][1];
+ typename tmat3x3<T>::value_type const SrcA22 = m1[2][2];
+
+ typename tmat3x3<T>::value_type const SrcB00 = m2[0][0];
+ typename tmat3x3<T>::value_type const SrcB01 = m2[0][1];
+ typename tmat3x3<T>::value_type const SrcB02 = m2[0][2];
+ typename tmat3x3<T>::value_type const SrcB10 = m2[1][0];
+ typename tmat3x3<T>::value_type const SrcB11 = m2[1][1];
+ typename tmat3x3<T>::value_type const SrcB12 = m2[1][2];
+ typename tmat3x3<T>::value_type const SrcB20 = m2[2][0];
+ typename tmat3x3<T>::value_type const SrcB21 = m2[2][1];
+ typename tmat3x3<T>::value_type const SrcB22 = m2[2][2];
+
+ tmat3x3<T> Result(tmat3x3<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator*
+ (
+ tmat3x3<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ return tmat2x3<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator*
+ (
+ tmat3x3<T> const & m1,
+ tmat4x3<T> const & m2
+ )
+ {
+ return tmat4x3<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2],
+ m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator/
+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::value_type const & s
+ )
+ {
+ return tmat3x3<T>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator/
+ (
+ typename tmat3x3<T>::value_type const & s,
+ tmat3x3<T> const & m
+ )
+ {
+ return tmat3x3<T>(
+ s / m[0],
+ s / m[1],
+ s / m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::col_type operator/
+ (
+ tmat3x3<T> const & m,
+ typename tmat3x3<T>::row_type const & v
+ )
+ {
+ return m._inverse() * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T>::row_type operator/
+ (
+ typename tmat3x3<T>::col_type const & v,
+ tmat3x3<T> const & m
+ )
+ {
+ return v * m._inverse();
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator/
+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return m1 * m2._inverse();
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> const operator-
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ return tmat3x3<T>(
+ -m[0],
+ -m[1],
+ -m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> const operator++
+ (
+ tmat3x3<T> const & m,
+ int
+ )
+ {
+ return tmat3x3<T>(
+ m[0] + T(1),
+ m[1] + T(1),
+ m[2] + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> const operator--
+ (
+ tmat3x3<T> const & m,
+ int
+ )
+ {
+ return tmat3x3<T>(
+ m[0] - T(1),
+ m[1] - T(1),
+ m[2] - T(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat3x3<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
+ }
+
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat3x4.hpp b/include/gal/opengl/glm/core/type_mat3x4.hpp
new file mode 100644
index 0000000..8fe3106
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat3x4.hpp
@@ -0,0 +1,266 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat3x4.hpp
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat3x4
+#define glm_core_type_mat3x4
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat3x4
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec4<T> col_type;
+ typedef tvec3<T> row_type;
+ typedef tmat3x4<T> type;
+ typedef tmat4x3<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ private:
+ // Data
+ col_type value[3];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat3x4();
+ GLM_FUNC_DECL tmat3x4(tmat3x4 const & m);
+
+ GLM_FUNC_DECL explicit tmat3x4(
+ ctor Null);
+ GLM_FUNC_DECL explicit tmat3x4(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tmat3x4(
+ value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
+ value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
+ value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2);
+ GLM_FUNC_DECL explicit tmat3x4(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat3x4(
+ U const & x);
+
+ template
+ <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3
+ >
+ GLM_FUNC_DECL explicit tmat3x4(
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3);
+
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL explicit tmat3x4(
+ tvec4<V1> const & v1,
+ tvec4<V2> const & v2,
+ tvec4<V3> const & v3);
+
+ // Matrix conversion
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat3x4(tmat3x4<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat3x4(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat3x4(tmat4x3<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat3x4<T> & operator= (tmat3x4<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator= (tmat3x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator+= (tmat3x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator-= (tmat3x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator*= (tmat3x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T> & operator/= (U s);
+
+ GLM_FUNC_DECL tmat3x4<T> & operator++ ();
+ GLM_FUNC_DECL tmat3x4<T> & operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator+ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator+ (
+ tmat3x4<T> const & m1,
+ tmat3x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator- (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator- (
+ tmat3x4<T> const & m1,
+ tmat3x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator* (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator* (
+ typename tmat3x4<T>::value_type const & s,
+ tmat3x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x4<T>::col_type operator* (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat3x4<T>::row_type operator* (
+ typename tmat3x4<T>::col_type const & v,
+ tmat3x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator* (
+ tmat3x4<T> const & m1,
+ tmat4x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator* (
+ tmat3x4<T> const & m1,
+ tmat2x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator* (
+ tmat3x4<T> const & m1,
+ tmat3x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator/ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator/ (
+ typename tmat3x4<T>::value_type const & s,
+ tmat3x4<T> const & m);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> const operator- (
+ tmat3x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> const operator-- (
+ tmat3x4<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> const operator++ (
+ tmat3x4<T> const & m,
+ int);
+
+}//namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x4<lowp_float> lowp_mat3x4;
+
+ /// 3 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x4<mediump_float> mediump_mat3x4;
+
+ /// 3 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat3x4<highp_float> highp_mat3x4;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat3x4.inl"
+#endif
+
+#endif //glm_core_type_mat3x4
diff --git a/include/gal/opengl/glm/core/type_mat3x4.inl b/include/gal/opengl/glm/core/type_mat3x4.inl
new file mode 100644
index 0000000..be613d0
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat3x4.inl
@@ -0,0 +1,700 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat3x4.inl
+/// @date 2006-08-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x4<T>::size_type tmat3x4<T>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T>::size_type tmat3x4<T>::col_size()
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T>::size_type tmat3x4<T>::row_size()
+ {
+ return 3;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T>::col_type &
+ tmat3x4<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T>::col_type const &
+ tmat3x4<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4()
+ {
+ this->value[0] = col_type(1, 0, 0, 0);
+ this->value[1] = col_type(0, 1, 0, 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero, Zero, Zero);
+ this->value[1] = col_type(Zero, s, Zero, Zero);
+ this->value[2] = col_type(Zero, Zero, s, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
+ value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
+ value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0, w0);
+ this->value[1] = col_type(x1, y1, z1, w1);
+ this->value[2] = col_type(x2, y2, z2, w2);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T>::tmat3x4
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec4<T>(value_type(s), Zero, Zero, Zero);
+ this->value[1] = tvec4<T>(Zero, value_type(s), Zero, Zero);
+ this->value[2] = tvec4<T>(Zero, Zero, value_type(s), Zero);
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3>
+ GLM_FUNC_DECL tmat3x4<T>::tmat3x4
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1));
+ this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2));
+ this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3), value_type(w3));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL tmat3x4<T>::tmat3x4
+ (
+ tvec4<V1> const & v1,
+ tvec4<V2> const & v2,
+ tvec4<V3> const & v3
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ }
+
+ // Conversion
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat3x4<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ this->value[2] = col_type(T(0), T(0), T(1), T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ this->value[2] = col_type(m[2], T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ this->value[2] = col_type(T(0), T(0), T(1), T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ this->value[2] = col_type(m[2], T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(T(0), T(0), T(1), T(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(T(0)));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(T(0)));
+ this->value[2] = col_type(m[2], detail::tvec2<T>(T(1), T(0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>::tmat3x4
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ this->value[2] = col_type(m[2], T(0));
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Unary updatable operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator=
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator=
+ (
+ tmat3x4<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator+=
+ (
+ tmat3x4<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator-=
+ (
+ tmat3x4<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator*=
+ (
+ tmat3x4<U> const & m
+ )
+ {
+ return (*this = tmat3x4<T>(*this * m));
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T> & tmat3x4<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T>& tmat3x4<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator+
+ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s
+ )
+ {
+ return tmat3x4<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator+
+ (
+ tmat3x4<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ return tmat3x4<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator-
+ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s
+ )
+ {
+ return tmat3x4<T>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator-
+ (
+ tmat3x4<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ return tmat3x4<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator*
+ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s
+ )
+ {
+ return tmat3x4<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator*
+ (
+ typename tmat3x4<T>::value_type const & s,
+ tmat3x4<T> const & m
+ )
+ {
+ return tmat3x4<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T>::col_type operator*
+ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::row_type const & v
+ )
+ {
+ return typename tmat3x4<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z,
+ m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T>::row_type operator*
+ (
+ typename tmat3x4<T>::col_type const & v,
+ tmat3x4<T> const & m
+ )
+ {
+ return typename tmat3x4<T>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3],
+ v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator*
+ (
+ tmat3x4<T> const & m1,
+ tmat4x3<T> const & m2
+ )
+ {
+ const T SrcA00 = m1[0][0];
+ const T SrcA01 = m1[0][1];
+ const T SrcA02 = m1[0][2];
+ const T SrcA03 = m1[0][3];
+ const T SrcA10 = m1[1][0];
+ const T SrcA11 = m1[1][1];
+ const T SrcA12 = m1[1][2];
+ const T SrcA13 = m1[1][3];
+ const T SrcA20 = m1[2][0];
+ const T SrcA21 = m1[2][1];
+ const T SrcA22 = m1[2][2];
+ const T SrcA23 = m1[2][3];
+
+ const T SrcB00 = m2[0][0];
+ const T SrcB01 = m2[0][1];
+ const T SrcB02 = m2[0][2];
+ const T SrcB10 = m2[1][0];
+ const T SrcB11 = m2[1][1];
+ const T SrcB12 = m2[1][2];
+ const T SrcB20 = m2[2][0];
+ const T SrcB21 = m2[2][1];
+ const T SrcB22 = m2[2][2];
+ const T SrcB30 = m2[3][0];
+ const T SrcB31 = m2[3][1];
+ const T SrcB32 = m2[3][2];
+
+ tmat4x4<T> Result(tmat4x4<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;
+ Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;
+ Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;
+ Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22;
+ Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32;
+ Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32;
+ Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32;
+ Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator*
+ (
+ tmat3x4<T> const & m1,
+ tmat2x3<T> const & m2
+ )
+ {
+ return tmat2x4<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator*
+ (
+ tmat3x4<T> const & m1,
+ tmat3x3<T> const & m2
+ )
+ {
+ return tmat3x4<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],
+ m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator/
+ (
+ tmat3x4<T> const & m,
+ typename tmat3x4<T>::value_type const & s
+ )
+ {
+ return tmat3x4<T>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator/
+ (
+ typename tmat3x4<T>::value_type const & s,
+ tmat3x4<T> const & m
+ )
+ {
+ return tmat3x4<T>(
+ s / m[0],
+ s / m[1],
+ s / m[2]);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> const operator-
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ return tmat3x4<T>(
+ -m[0],
+ -m[1],
+ -m[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> const operator++
+ (
+ tmat3x4<T> const & m,
+ int
+ )
+ {
+ return tmat3x4<T>(
+ m[0] + T(1),
+ m[1] + T(1),
+ m[2] + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> const operator--
+ (
+ tmat3x4<T> const & m,
+ int
+ )
+ {
+ return tmat3x4<T>(
+ m[0] - T(1),
+ m[1] - T(1),
+ m[2] - T(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat3x4<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat3x4<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
+ }
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat4x2.hpp b/include/gal/opengl/glm/core/type_mat4x2.hpp
new file mode 100644
index 0000000..3bc6cc0
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat4x2.hpp
@@ -0,0 +1,270 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat4x2.hpp
+/// @date 2006-10-01 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat4x2
+#define glm_core_type_mat4x2
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat4x2
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec2<T> col_type;
+ typedef tvec4<T> row_type;
+ typedef tmat4x2<T> type;
+ typedef tmat2x4<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ private:
+ // Data
+ col_type value[4];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat4x2();
+ GLM_FUNC_DECL tmat4x2(tmat4x2 const & m);
+
+ GLM_FUNC_DECL explicit tmat4x2(
+ ctor Null);
+ GLM_FUNC_DECL explicit tmat4x2(
+ value_type const & x);
+ GLM_FUNC_DECL explicit tmat4x2(
+ value_type const & x0, value_type const & y0,
+ value_type const & x1, value_type const & y1,
+ value_type const & x2, value_type const & y2,
+ value_type const & x3, value_type const & y3);
+ GLM_FUNC_DECL explicit tmat4x2(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat4x2(
+ U const & x);
+
+ template
+ <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3,
+ typename X4, typename Y4
+ >
+ GLM_FUNC_DECL explicit tmat4x2(
+ X1 const & x1, Y1 const & y1,
+ X2 const & x2, Y2 const & y2,
+ X3 const & x3, Y3 const & y3,
+ X4 const & x4, Y4 const & y4);
+
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL explicit tmat4x2(
+ tvec2<V1> const & v1,
+ tvec2<V2> const & v2,
+ tvec2<V3> const & v3,
+ tvec2<V4> const & v4);
+
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat4x2<T>& operator= (tmat4x2<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator= (tmat4x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator+= (tmat4x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator-= (tmat4x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator*= (tmat4x2<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>& operator/= (U s);
+
+ GLM_FUNC_DECL tmat4x2<T>& operator++ ();
+ GLM_FUNC_DECL tmat4x2<T>& operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator+ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator+ (
+ tmat4x2<T> const & m1,
+ tmat4x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator- (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator- (
+ tmat4x2<T> const & m1,
+ tmat4x2<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator* (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator* (
+ typename tmat4x2<T>::value_type const & s,
+ tmat4x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x2<T>::col_type operator* (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x2<T>::row_type operator* (
+ typename tmat4x2<T>::col_type const & v,
+ tmat4x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x2<T> operator* (
+ tmat4x2<T> const & m1,
+ tmat3x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator* (
+ tmat4x2<T> const & m1,
+ tmat4x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator* (
+ tmat4x3<T> const & m1,
+ tmat2x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator/ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> operator/ (
+ typename tmat4x2<T>::value_type const & s,
+ tmat4x2<T> const & m);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> const operator- (
+ tmat4x2<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> const operator-- (
+ tmat4x2<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x2<T> const operator++ (
+ tmat4x2<T> const & m,
+ int);
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x2<lowp_float> lowp_mat4x2;
+
+ /// 4 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x2<mediump_float> mediump_mat4x2;
+
+ /// 4 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x2<highp_float> highp_mat4x2;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat4x2.inl"
+#endif
+
+#endif //glm_core_type_mat4x2
diff --git a/include/gal/opengl/glm/core/type_mat4x2.inl b/include/gal/opengl/glm/core/type_mat4x2.inl
new file mode 100644
index 0000000..3f65e63
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat4x2.inl
@@ -0,0 +1,716 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat4x2.inl
+/// @date 2006-10-01 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x2<T>::size_type tmat4x2<T>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T>::size_type tmat4x2<T>::col_size()
+ {
+ return 2;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T>::size_type tmat4x2<T>::row_size()
+ {
+ return 4;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T>::col_type &
+ tmat4x2<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T>::col_type const &
+ tmat4x2<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2()
+ {
+ value_type const Zero(0);
+ value_type const One(1);
+ this->value[0] = col_type(One, Zero);
+ this->value[1] = col_type(Zero, One);
+ this->value[2] = col_type(Zero, Zero);
+ this->value[3] = col_type(Zero, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero);
+ this->value[1] = col_type(Zero, s);
+ this->value[2] = col_type(Zero, Zero);
+ this->value[3] = col_type(Zero, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ value_type const & x0, value_type const & y0,
+ value_type const & x1, value_type const & y1,
+ value_type const & x2, value_type const & y2,
+ value_type const & x3, value_type const & y3
+ )
+ {
+ this->value[0] = col_type(x0, y0);
+ this->value[1] = col_type(x1, y1);
+ this->value[2] = col_type(x2, y2);
+ this->value[3] = col_type(x3, y3);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ this->value[3] = v3;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T>::tmat4x2
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec2<T>(value_type(s), Zero);
+ this->value[1] = tvec2<T>(Zero, value_type(s));
+ this->value[2] = tvec2<T>(Zero, Zero);
+ this->value[3] = tvec2<T>(Zero, Zero);
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3,
+ typename X4, typename Y4>
+ GLM_FUNC_DECL tmat4x2<T>::tmat4x2
+ (
+ X1 const & x1, Y1 const & y1,
+ X2 const & x2, Y2 const & y2,
+ X3 const & x3, Y3 const & y3,
+ X4 const & x4, Y4 const & y4
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1));
+ this->value[1] = col_type(value_type(x2), value_type(y2));
+ this->value[2] = col_type(value_type(x3), value_type(y3));
+ this->value[3] = col_type(value_type(x4), value_type(y4));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL tmat4x2<T>::tmat4x2
+ (
+ tvec2<V1> const & v1,
+ tvec2<V2> const & v2,
+ tvec2<V3> const & v3,
+ tvec2<V4> const & v4
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ this->value[3] = col_type(v4);
+ }
+
+ // Conversion
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat4x2<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(value_type(0));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(value_type(0));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(value_type(0));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>::tmat4x2
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(value_type(0));
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Unary updatable operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T>& tmat4x2<T>::operator=
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T>& tmat4x2<T>::operator=
+ (
+ tmat4x2<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ this->value[3] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator+=
+ (
+ tmat4x2<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ this->value[3] += m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ this->value[3] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator-=
+ (
+ tmat4x2<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ this->value[3] -= m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ this->value[3] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator*=
+ (
+ tmat4x2<U> const & m
+ )
+ {
+ return (*this = tmat4x2<T>(*this * m));
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ this->value[3] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ ++this->value[3];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> & tmat4x2<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ --this->value[3];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator+
+ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s
+ )
+ {
+ return tmat4x2<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator+
+ (
+ tmat4x2<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ return tmat4x2<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator-
+ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s
+ )
+ {
+ return tmat4x2<T>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s,
+ m[3] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator-
+ (
+ tmat4x2<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ return tmat4x2<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator*
+ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s
+ )
+ {
+ return tmat4x2<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator*
+ (
+ typename tmat4x2<T>::value_type const & s,
+ tmat4x2<T> const & m
+ )
+ {
+ return tmat4x2<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T>::col_type operator*
+ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::row_type const & v)
+ {
+ return typename tmat4x2<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T>::row_type operator*
+ (
+ typename tmat4x2<T>::col_type const & v,
+ tmat4x2<T> const & m)
+ {
+ return typename tmat4x2<T>::row_type(
+ v.x * m[0][0] + v.y * m[0][1],
+ v.x * m[1][0] + v.y * m[1][1],
+ v.x * m[2][0] + v.y * m[2][1],
+ v.x * m[3][0] + v.y * m[3][1]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T> operator*
+ (
+ tmat4x2<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ T const SrcA00 = m1[0][0];
+ T const SrcA01 = m1[0][1];
+ T const SrcA10 = m1[1][0];
+ T const SrcA11 = m1[1][1];
+ T const SrcA20 = m1[2][0];
+ T const SrcA21 = m1[2][1];
+ T const SrcA30 = m1[3][0];
+ T const SrcA31 = m1[3][1];
+
+ T const SrcB00 = m2[0][0];
+ T const SrcB01 = m2[0][1];
+ T const SrcB02 = m2[0][2];
+ T const SrcB03 = m2[0][3];
+ T const SrcB10 = m2[1][0];
+ T const SrcB11 = m2[1][1];
+ T const SrcB12 = m2[1][2];
+ T const SrcB13 = m2[1][3];
+
+ tmat2x2<T> Result(tmat2x2<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T> operator*
+ (
+ tmat4x2<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ return tmat3x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator*
+ (
+ tmat4x2<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return tmat4x2<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator/
+ (
+ tmat4x2<T> const & m,
+ typename tmat4x2<T>::value_type const & s
+ )
+ {
+ return tmat4x2<T>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s,
+ m[3] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> operator/
+ (
+ typename tmat4x2<T>::value_type const & s,
+ tmat4x2<T> const & m
+ )
+ {
+ return tmat4x2<T>(
+ s / m[0],
+ s / m[1],
+ s / m[2],
+ s / m[3]);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> const operator-
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ return tmat4x2<T>(
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> const operator++
+ (
+ tmat4x2<T> const & m,
+ int
+ )
+ {
+ return tmat4x2<T>(
+ m[0] + typename tmat4x2<T>::value_type(1),
+ m[1] + typename tmat4x2<T>::value_type(1),
+ m[2] + typename tmat4x2<T>::value_type(1),
+ m[3] + typename tmat4x2<T>::value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T> const operator--
+ (
+ tmat4x2<T> const & m,
+ int
+ )
+ {
+ return tmat4x2<T>(
+ m[0] - typename tmat4x2<T>::value_type(1),
+ m[1] - typename tmat4x2<T>::value_type(1),
+ m[2] - typename tmat4x2<T>::value_type(1),
+ m[3] - typename tmat4x2<T>::value_type(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat4x2<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat4x2<T> const & m1,
+ tmat4x2<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
+ }
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_mat4x3.hpp b/include/gal/opengl/glm/core/type_mat4x3.hpp
new file mode 100644
index 0000000..8465a83
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat4x3.hpp
@@ -0,0 +1,268 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat4x3.hpp
+/// @date 2006-08-04 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat4x3
+#define glm_core_type_mat4x3
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat4x3
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec3<T> col_type;
+ typedef tvec4<T> row_type;
+ typedef tmat4x3<T> type;
+ typedef tmat3x4<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ private:
+ // Data
+ col_type value[4];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat4x3();
+ GLM_FUNC_DECL tmat4x3(tmat4x3 const & m);
+
+ GLM_FUNC_DECL explicit tmat4x3(
+ ctor Null);
+ GLM_FUNC_DECL explicit tmat4x3(
+ value_type const & x);
+ GLM_FUNC_DECL explicit tmat4x3(
+ value_type const & x0, value_type const & y0, value_type const & z0,
+ value_type const & x1, value_type const & y1, value_type const & z1,
+ value_type const & x2, value_type const & y2, value_type const & z2,
+ value_type const & x3, value_type const & y3, value_type const & z3);
+ GLM_FUNC_DECL explicit tmat4x3(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat4x3(
+ U const & x);
+
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3,
+ typename X4, typename Y4, typename Z4>
+ GLM_FUNC_DECL explicit tmat4x3(
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4);
+
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL explicit tmat4x3(
+ tvec3<V1> const & v1,
+ tvec3<V2> const & v2,
+ tvec3<V3> const & v3,
+ tvec3<V4> const & v4);
+
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat4x3(tmat4x3<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat4x3(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat4x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x3(tmat3x4<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat4x3<T> & operator= (tmat4x3<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator= (tmat4x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator+= (tmat4x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator-= (tmat4x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator*= (tmat4x3<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T> & operator/= (U s);
+
+ GLM_FUNC_DECL tmat4x3<T> & operator++ ();
+ GLM_FUNC_DECL tmat4x3<T> & operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator+ (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator+ (
+ tmat4x3<T> const & m1,
+ tmat4x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator- (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator- (
+ tmat4x3<T> const & m1,
+ tmat4x3<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator* (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator* (
+ typename tmat4x3<T>::value_type const & s,
+ tmat4x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x3<T>::col_type operator* (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x3<T>::row_type operator* (
+ typename tmat4x3<T>::col_type const & v,
+ tmat4x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x3<T> operator* (
+ tmat4x3<T> const & m1,
+ tmat2x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T> operator* (
+ tmat4x3<T> const & m1,
+ tmat3x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator* (
+ tmat4x3<T> const & m1,
+ tmat4x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator/ (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> operator/ (
+ typename tmat4x3<T>::value_type const & s,
+ tmat4x3<T> const & m);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> const operator- (
+ tmat4x3<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> const operator-- (
+ tmat4x3<T> const & m,
+ int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x3<T> const operator++ (
+ tmat4x3<T> const & m,
+ int);
+}//namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x3<lowp_float> lowp_mat4x3;
+
+ /// 4 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x3<mediump_float> mediump_mat4x3;
+
+ /// 4 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x3<highp_float> highp_mat4x3;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat4x3.inl"
+#endif //GLM_EXTERNAL_TEMPLATE
+
+#endif//glm_core_type_mat4x3
diff --git a/include/gal/opengl/glm/core/type_mat4x3.inl b/include/gal/opengl/glm/core/type_mat4x3.inl
new file mode 100644
index 0000000..75307a5
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat4x3.inl
@@ -0,0 +1,725 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat4x3.inl
+/// @date 2006-04-17 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x3<T>::size_type tmat4x3<T>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T>::size_type tmat4x3<T>::col_size()
+ {
+ return 3;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T>::size_type tmat4x3<T>::row_size()
+ {
+ return 4;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T>::col_type &
+ tmat4x3<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T>::col_type const &
+ tmat4x3<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3()
+ {
+ value_type const Zero(0);
+ value_type const One(1);
+ this->value[0] = col_type(One, Zero, Zero);
+ this->value[1] = col_type(Zero, One, Zero);
+ this->value[2] = col_type(Zero, Zero, One);
+ this->value[3] = col_type(Zero, Zero, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero, Zero);
+ this->value[1] = col_type(Zero, s, Zero);
+ this->value[2] = col_type(Zero, Zero, s);
+ this->value[3] = col_type(Zero, Zero, Zero);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ value_type const & x0, value_type const & y0, value_type const & z0,
+ value_type const & x1, value_type const & y1, value_type const & z1,
+ value_type const & x2, value_type const & y2, value_type const & z2,
+ value_type const & x3, value_type const & y3, value_type const & z3
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0);
+ this->value[1] = col_type(x1, y1, z1);
+ this->value[2] = col_type(x2, y2, z2);
+ this->value[3] = col_type(x3, y3, z3);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ this->value[3] = v3;
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T>::tmat4x3
+ (
+ U const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = tvec3<T>(value_type(s), Zero, Zero);
+ this->value[1] = tvec3<T>(Zero, value_type(s), Zero);
+ this->value[2] = tvec3<T>(Zero, Zero, value_type(s));
+ this->value[3] = tvec3<T>(Zero, Zero, Zero);
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3,
+ typename X4, typename Y4, typename Z4>
+ GLM_FUNC_DECL tmat4x3<T>::tmat4x3
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4
+ )
+ {
+ this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1));
+ this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2));
+ this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3));
+ this->value[3] = col_type(value_type(x4), value_type(y4), value_type(z4));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL tmat4x3<T>::tmat4x3
+ (
+ tvec3<V1> const & v1,
+ tvec3<V2> const & v2,
+ tvec3<V3> const & v3,
+ tvec3<V4> const & v4
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ this->value[3] = col_type(v4);
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Matrix conversions
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat4x3<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(m[2], value_type(1));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(value_type(0), value_type(0), value_type(1));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(m[2], value_type(1));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(value_type(0), value_type(0), value_type(1));
+ this->value[3] = col_type(value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(m[2], value_type(1));
+ this->value[3] = col_type(m[3], value_type(0));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>::tmat4x3
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(value_type(0));
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Unary updatable operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T>& tmat4x3<T>::operator=
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T>& tmat4x3<T>::operator=
+ (
+ tmat4x3<U> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ this->value[3] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator+=
+ (
+ tmat4x3<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ this->value[3] += m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ this->value[3] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator-=
+ (
+ tmat4x3<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ this->value[3] -= m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ this->value[3] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator*=
+ (
+ tmat4x3<U> const & m
+ )
+ {
+ return (*this = tmat4x3<T>(*this * m));
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ this->value[3] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ ++this->value[3];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> & tmat4x3<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ --this->value[3];
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Binary operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator+ (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s)
+ {
+ return tmat4x3<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator+ (
+ tmat4x3<T> const & m1,
+ tmat4x3<T> const & m2)
+ {
+ return tmat4x3<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator- (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s)
+ {
+ return tmat4x3<T>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s,
+ m[3] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator- (
+ tmat4x3<T> const & m1,
+ tmat4x3<T> const & m2)
+ {
+ return tmat4x3<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator* (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s)
+ {
+ return tmat4x3<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator* (
+ typename tmat4x3<T>::value_type const & s,
+ tmat4x3<T> const & m)
+ {
+ return tmat4x3<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T>::col_type operator*
+ (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::row_type const & v)
+ {
+ return typename tmat4x3<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T>::row_type operator*
+ (
+ typename tmat4x3<T>::col_type const & v,
+ tmat4x3<T> const & m)
+ {
+ return typename tmat4x3<T>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2],
+ v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2],
+ v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T> operator*
+ (
+ tmat4x3<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ return tmat2x3<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T> operator*
+ (
+ tmat4x3<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ T const SrcA00 = m1[0][0];
+ T const SrcA01 = m1[0][1];
+ T const SrcA02 = m1[0][2];
+ T const SrcA10 = m1[1][0];
+ T const SrcA11 = m1[1][1];
+ T const SrcA12 = m1[1][2];
+ T const SrcA20 = m1[2][0];
+ T const SrcA21 = m1[2][1];
+ T const SrcA22 = m1[2][2];
+ T const SrcA30 = m1[3][0];
+ T const SrcA31 = m1[3][1];
+ T const SrcA32 = m1[3][2];
+
+ T const SrcB00 = m2[0][0];
+ T const SrcB01 = m2[0][1];
+ T const SrcB02 = m2[0][2];
+ T const SrcB03 = m2[0][3];
+ T const SrcB10 = m2[1][0];
+ T const SrcB11 = m2[1][1];
+ T const SrcB12 = m2[1][2];
+ T const SrcB13 = m2[1][3];
+ T const SrcB20 = m2[2][0];
+ T const SrcB21 = m2[2][1];
+ T const SrcB22 = m2[2][2];
+ T const SrcB23 = m2[2][3];
+
+ tmat3x3<T> Result(tmat3x3<T>::null);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator*
+ (
+ tmat4x3<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return tmat4x3<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3],
+ m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator/
+ (
+ tmat4x3<T> const & m,
+ typename tmat4x3<T>::value_type const & s
+ )
+ {
+ return tmat4x3<T>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s,
+ m[3] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> operator/
+ (
+ typename tmat4x3<T>::value_type const & s,
+ tmat4x3<T> const & m
+ )
+ {
+ return tmat4x3<T>(
+ s / m[0],
+ s / m[1],
+ s / m[2],
+ s / m[3]);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> const operator-
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ return tmat4x3<T>(
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> const operator++
+ (
+ tmat4x3<T> const & m,
+ int
+ )
+ {
+ return tmat4x3<T>(
+ m[0] + T(1),
+ m[1] + T(1),
+ m[2] + T(1),
+ m[3] + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T> const operator--
+ (
+ tmat4x3<T> const & m,
+ int
+ )
+ {
+ return tmat4x3<T>(
+ m[0] - T(1),
+ m[1] - T(1),
+ m[2] - T(1),
+ m[3] - T(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat4x3<T> const & m1,
+ tmat4x3<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat4x3<T> const & m1,
+ tmat4x3<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
+ }
+} //namespace detail
+} //namespace glm
+
diff --git a/include/gal/opengl/glm/core/type_mat4x4.hpp b/include/gal/opengl/glm/core/type_mat4x4.hpp
new file mode 100644
index 0000000..85696b9
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat4x4.hpp
@@ -0,0 +1,320 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat4x4.hpp
+/// @date 2005-01-27 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_mat4x4
+#define glm_core_type_mat4x4
+
+#include "type_mat.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+ template <typename T> struct tmat2x2;
+ template <typename T> struct tmat2x3;
+ template <typename T> struct tmat2x4;
+ template <typename T> struct tmat3x2;
+ template <typename T> struct tmat3x3;
+ template <typename T> struct tmat3x4;
+ template <typename T> struct tmat4x2;
+ template <typename T> struct tmat4x3;
+ template <typename T> struct tmat4x4;
+
+ template <typename T>
+ struct tmat4x4
+ {
+ enum ctor{null};
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec4<T> col_type;
+ typedef tvec4<T> row_type;
+ typedef tmat4x4<T> type;
+ typedef tmat4x4<T> transpose_type;
+
+ static GLM_FUNC_DECL size_type col_size();
+ static GLM_FUNC_DECL size_type row_size();
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ public:
+ /// Implementation detail
+ /// @cond DETAIL
+ GLM_FUNC_DECL tmat4x4<T> _inverse() const;
+ /// @endcond
+
+ private:
+ // Data
+ col_type value[4];
+
+ public:
+ // Constructors
+ GLM_FUNC_DECL tmat4x4();
+ GLM_FUNC_DECL tmat4x4(tmat4x4 const & m);
+
+ GLM_FUNC_DECL explicit tmat4x4(
+ ctor Null);
+ GLM_FUNC_DECL explicit tmat4x4(
+ value_type const & x);
+ GLM_FUNC_DECL explicit tmat4x4(
+ value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
+ value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
+ value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2,
+ value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3);
+ GLM_FUNC_DECL explicit tmat4x4(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat4x4(
+ U const & x);
+
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3,
+ typename X4, typename Y4, typename Z4, typename W4>
+ GLM_FUNC_DECL explicit tmat4x4(
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
+
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL explicit tmat4x4(
+ tvec4<V1> const & v1,
+ tvec4<V2> const & v2,
+ tvec4<V3> const & v3,
+ tvec4<V4> const & v4);
+
+ // Matrix conversions
+ template <typename U>
+ GLM_FUNC_DECL explicit tmat4x4(tmat4x4<U> const & m);
+
+ GLM_FUNC_DECL explicit tmat4x4(tmat2x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat3x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat2x3<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat3x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat2x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat4x2<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat3x4<T> const & x);
+ GLM_FUNC_DECL explicit tmat4x4(tmat4x3<T> const & x);
+
+ // Accesses
+ GLM_FUNC_DECL col_type & operator[](size_type i);
+ GLM_FUNC_DECL col_type const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ GLM_FUNC_DECL tmat4x4<T> & operator= (tmat4x4<T> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator= (tmat4x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator+= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator+= (tmat4x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator-= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator-= (tmat4x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator*= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator*= (tmat4x4<U> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator/= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T> & operator/= (tmat4x4<U> const & m);
+ GLM_FUNC_DECL tmat4x4<T> & operator++ ();
+ GLM_FUNC_DECL tmat4x4<T> & operator-- ();
+ };
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator+ (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator- (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator- (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator- (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator* (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator* (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x4<T>::col_type operator* (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x4<T>::row_type operator* (
+ typename tmat4x4<T>::col_type const & v,
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat2x4<T> operator* (
+ tmat4x4<T> const & m1,
+ tmat2x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat3x4<T> operator* (
+ tmat4x4<T> const & m1,
+ tmat3x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator* (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator/ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator/ (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x4<T>::col_type operator/ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::row_type const & v);
+
+ template <typename T>
+ GLM_FUNC_DECL typename tmat4x4<T>::row_type operator/ (
+ typename tmat4x4<T>::col_type & v,
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> operator/ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2);
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> const operator- (
+ tmat4x4<T> const & m);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> const operator-- (
+ tmat4x4<T> const & m, int);
+
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T> const operator++ (
+ tmat4x4<T> const & m, int);
+
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x4<lowp_float> lowp_mat4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x4<mediump_float> mediump_mat4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x4<highp_float> highp_mat4;
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x4<lowp_float> lowp_mat4x4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x4<mediump_float> mediump_mat4x4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tmat4x4<highp_float> highp_mat4x4;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat4x4.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
+
+#endif//glm_core_type_mat4x4
diff --git a/include/gal/opengl/glm/core/type_mat4x4.inl b/include/gal/opengl/glm/core/type_mat4x4.inl
new file mode 100644
index 0000000..29f80d8
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_mat4x4.inl
@@ -0,0 +1,893 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_mat4x4.inl
+/// @date 2005-01-27 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x4<T>::size_type tmat4x4<T>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::size_type tmat4x4<T>::col_size()
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::size_type tmat4x4<T>::row_size()
+ {
+ return 4;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::col_type &
+ tmat4x4<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::col_type const &
+ tmat4x4<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4()
+ {
+ value_type Zero(0);
+ value_type One(1);
+ this->value[0] = col_type(One, Zero, Zero, Zero);
+ this->value[1] = col_type(Zero, One, Zero, Zero);
+ this->value[2] = col_type(Zero, Zero, One, Zero);
+ this->value[3] = col_type(Zero, Zero, Zero, One);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ value_type const & s
+ )
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(s, Zero, Zero, Zero);
+ this->value[1] = col_type(Zero, s, Zero, Zero);
+ this->value[2] = col_type(Zero, Zero, s, Zero);
+ this->value[3] = col_type(Zero, Zero, Zero, s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
+ value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1,
+ value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2,
+ value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0, w0);
+ this->value[1] = col_type(x1, y1, z1, w1);
+ this->value[2] = col_type(x2, y2, z2, w2);
+ this->value[3] = col_type(x3, y3, z3, w3);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ this->value[3] = v3;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat4x4<U> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T>::tmat4x4
+ (
+ U const & s
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<U>::is_float || std::numeric_limits<U>::is_integer, "*mat4x4 constructor only takes float and integer types");
+
+ value_type const Zero(0);
+ this->value[0] = tvec4<T>(value_type(s), Zero, Zero, Zero);
+ this->value[1] = tvec4<T>(Zero, value_type(s), Zero, Zero);
+ this->value[2] = tvec4<T>(Zero, Zero, value_type(s), Zero);
+ this->value[3] = tvec4<T>(Zero, Zero, Zero, value_type(s));
+ }
+
+ template <typename T>
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3,
+ typename X4, typename Y4, typename Z4, typename W4>
+ GLM_FUNC_DECL tmat4x4<T>::tmat4x4
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<X1>::is_float || std::numeric_limits<X1>::is_integer, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Y1>::is_float || std::numeric_limits<Y1>::is_integer, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Z1>::is_float || std::numeric_limits<Z1>::is_integer, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<W1>::is_float || std::numeric_limits<W1>::is_integer, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.");
+
+ GLM_STATIC_ASSERT(detail::type<X2>::is_float || std::numeric_limits<X2>::is_integer, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Y2>::is_float || std::numeric_limits<Y2>::is_integer, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Z2>::is_float || std::numeric_limits<Z2>::is_integer, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<W2>::is_float || std::numeric_limits<W2>::is_integer, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid.");
+
+ GLM_STATIC_ASSERT(detail::type<X3>::is_float || std::numeric_limits<X3>::is_integer, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Y3>::is_float || std::numeric_limits<Y3>::is_integer, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Z3>::is_float || std::numeric_limits<Z3>::is_integer, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<W3>::is_float || std::numeric_limits<W3>::is_integer, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid.");
+
+ GLM_STATIC_ASSERT(detail::type<X4>::is_float || std::numeric_limits<X4>::is_integer, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Y4>::is_float || std::numeric_limits<Y4>::is_integer, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<Z4>::is_float || std::numeric_limits<Z4>::is_integer, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<W4>::is_float || std::numeric_limits<W4>::is_integer, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid.");
+
+ this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1));
+ this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2));
+ this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3), value_type(w3));
+ this->value[3] = col_type(value_type(x4), value_type(y4), value_type(z4), value_type(w4));
+ }
+
+ template <typename T>
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL tmat4x4<T>::tmat4x4
+ (
+ tvec4<V1> const & v1,
+ tvec4<V2> const & v2,
+ tvec4<V3> const & v3,
+ tvec4<V4> const & v4
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<V1>::is_float || std::numeric_limits<V1>::is_integer, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<V2>::is_float || std::numeric_limits<V2>::is_integer, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<V3>::is_float || std::numeric_limits<V3>::is_integer, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.");
+ GLM_STATIC_ASSERT(detail::type<V4>::is_float || std::numeric_limits<V4>::is_integer, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.");
+
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ this->value[3] = col_type(v4);
+ }
+
+ //////////////////////////////////////
+ // Matrix convertion constructors
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat2x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ this->value[2] = col_type(value_type(0));
+ this->value[3] = col_type(value_type(0), value_type(0), value_type(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(m[2], value_type(0));
+ this->value[3] = col_type(value_type(0), value_type(0), value_type(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat2x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], value_type(0));
+ this->value[1] = col_type(m[1], value_type(0));
+ this->value[2] = col_type(value_type(0));
+ this->value[3] = col_type(value_type(0), value_type(0), value_type(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat3x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ this->value[2] = col_type(m[2], detail::tvec2<T>(0));
+ this->value[3] = col_type(value_type(0), value_type(0), value_type(0), value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat2x4<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = col_type(T(0));
+ this->value[3] = col_type(T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat4x2<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], detail::tvec2<T>(0));
+ this->value[1] = col_type(m[1], detail::tvec2<T>(0));
+ this->value[2] = col_type(T(0));
+ this->value[3] = col_type(T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat3x4<T> const & m
+ )
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = col_type(T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>::tmat4x4
+ (
+ tmat4x3<T> const & m
+ )
+ {
+ this->value[0] = col_type(m[0], T(0));
+ this->value[1] = col_type(m[1], T(0));
+ this->value[2] = col_type(m[2], T(0));
+ this->value[3] = col_type(m[3], T(1));
+ }
+
+ //////////////////////////////////////////////////////////////
+ // Operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T>& tmat4x4<T>::operator=
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ //memcpy could be faster
+ //memcpy(&this->value, &m.value, 16 * sizeof(valType));
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T>& tmat4x4<T>::operator=
+ (
+ tmat4x4<U> const & m
+ )
+ {
+ //memcpy could be faster
+ //memcpy(&this->value, &m.value, 16 * sizeof(valType));
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T>& tmat4x4<T>::operator+= (U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ this->value[3] += s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T>& tmat4x4<T>::operator+=
+ (
+ tmat4x4<U> const & m
+ )
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ this->value[3] += m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator-= (U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ this->value[3] -= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator-=
+ (
+ tmat4x4<U> const & m
+ )
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ this->value[3] -= m[3];
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator*= (U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ this->value[3] *= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator*=
+ (
+ tmat4x4<U> const & m
+ )
+ {
+ return (*this = *this * m);
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator/= (U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ this->value[3] /= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator/=
+ (
+ tmat4x4<U> const & m
+ )
+ {
+ return (*this = *this / m);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator++ ()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ ++this->value[3];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> & tmat4x4<T>::operator-- ()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ --this->value[3];
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> tmat4x4<T>::_inverse() const
+ {
+ // Calculate all mat2 determinants
+ value_type SubFactor00 = this->value[2][2] * this->value[3][3] - this->value[3][2] * this->value[2][3];
+ value_type SubFactor01 = this->value[2][1] * this->value[3][3] - this->value[3][1] * this->value[2][3];
+ value_type SubFactor02 = this->value[2][1] * this->value[3][2] - this->value[3][1] * this->value[2][2];
+ value_type SubFactor03 = this->value[2][0] * this->value[3][3] - this->value[3][0] * this->value[2][3];
+ value_type SubFactor04 = this->value[2][0] * this->value[3][2] - this->value[3][0] * this->value[2][2];
+ value_type SubFactor05 = this->value[2][0] * this->value[3][1] - this->value[3][0] * this->value[2][1];
+ value_type SubFactor06 = this->value[1][2] * this->value[3][3] - this->value[3][2] * this->value[1][3];
+ value_type SubFactor07 = this->value[1][1] * this->value[3][3] - this->value[3][1] * this->value[1][3];
+ value_type SubFactor08 = this->value[1][1] * this->value[3][2] - this->value[3][1] * this->value[1][2];
+ value_type SubFactor09 = this->value[1][0] * this->value[3][3] - this->value[3][0] * this->value[1][3];
+ value_type SubFactor10 = this->value[1][0] * this->value[3][2] - this->value[3][0] * this->value[1][2];
+ value_type SubFactor11 = this->value[1][1] * this->value[3][3] - this->value[3][1] * this->value[1][3];
+ value_type SubFactor12 = this->value[1][0] * this->value[3][1] - this->value[3][0] * this->value[1][1];
+ value_type SubFactor13 = this->value[1][2] * this->value[2][3] - this->value[2][2] * this->value[1][3];
+ value_type SubFactor14 = this->value[1][1] * this->value[2][3] - this->value[2][1] * this->value[1][3];
+ value_type SubFactor15 = this->value[1][1] * this->value[2][2] - this->value[2][1] * this->value[1][2];
+ value_type SubFactor16 = this->value[1][0] * this->value[2][3] - this->value[2][0] * this->value[1][3];
+ value_type SubFactor17 = this->value[1][0] * this->value[2][2] - this->value[2][0] * this->value[1][2];
+ value_type SubFactor18 = this->value[1][0] * this->value[2][1] - this->value[2][0] * this->value[1][1];
+/*
+ tmat4x4<T> Inverse(
+ + (this->value[1][1] * SubFactor00 - this->value[1][2] * SubFactor01 + this->value[1][3] * SubFactor02),
+ - (this->value[1][0] * SubFactor00 - this->value[1][2] * SubFactor03 + this->value[1][3] * SubFactor04),
+ + (this->value[1][0] * SubFactor01 - this->value[1][1] * SubFactor03 + this->value[1][3] * SubFactor05),
+ - (this->value[1][0] * SubFactor02 - this->value[1][1] * SubFactor04 + this->value[1][2] * SubFactor05),
+
+ - (this->value[0][1] * SubFactor00 - this->value[0][2] * SubFactor01 + this->value[0][3] * SubFactor02),
+ + (this->value[0][0] * SubFactor00 - this->value[0][2] * SubFactor03 + this->value[0][3] * SubFactor04),
+ - (this->value[0][0] * SubFactor01 - this->value[0][1] * SubFactor03 + this->value[0][3] * SubFactor05),
+ + (this->value[0][0] * SubFactor02 - this->value[0][1] * SubFactor04 + this->value[0][2] * SubFactor05),
+
+ + (this->value[0][1] * SubFactor06 - this->value[0][2] * SubFactor07 + this->value[0][3] * SubFactor08),
+ - (this->value[0][0] * SubFactor06 - this->value[0][2] * SubFactor09 + this->value[0][3] * SubFactor10),
+ + (this->value[0][0] * SubFactor11 - this->value[0][1] * SubFactor09 + this->value[0][3] * SubFactor12),
+ - (this->value[0][0] * SubFactor08 - this->value[0][1] * SubFactor10 + this->value[0][2] * SubFactor12),
+
+ - (this->value[0][1] * SubFactor13 - this->value[0][2] * SubFactor14 + this->value[0][3] * SubFactor15),
+ + (this->value[0][0] * SubFactor13 - this->value[0][2] * SubFactor16 + this->value[0][3] * SubFactor17),
+ - (this->value[0][0] * SubFactor14 - this->value[0][1] * SubFactor16 + this->value[0][3] * SubFactor18),
+ + (this->value[0][0] * SubFactor15 - this->value[0][1] * SubFactor17 + this->value[0][2] * SubFactor18));
+*/
+ tmat4x4<T> Inverse(
+ + this->value[1][1] * SubFactor00 - this->value[1][2] * SubFactor01 + this->value[1][3] * SubFactor02,
+ - this->value[1][0] * SubFactor00 + this->value[1][2] * SubFactor03 - this->value[1][3] * SubFactor04,
+ + this->value[1][0] * SubFactor01 - this->value[1][1] * SubFactor03 + this->value[1][3] * SubFactor05,
+ - this->value[1][0] * SubFactor02 + this->value[1][1] * SubFactor04 - this->value[1][2] * SubFactor05,
+
+ - this->value[0][1] * SubFactor00 + this->value[0][2] * SubFactor01 - this->value[0][3] * SubFactor02,
+ + this->value[0][0] * SubFactor00 - this->value[0][2] * SubFactor03 + this->value[0][3] * SubFactor04,
+ - this->value[0][0] * SubFactor01 + this->value[0][1] * SubFactor03 - this->value[0][3] * SubFactor05,
+ + this->value[0][0] * SubFactor02 - this->value[0][1] * SubFactor04 + this->value[0][2] * SubFactor05,
+
+ + this->value[0][1] * SubFactor06 - this->value[0][2] * SubFactor07 + this->value[0][3] * SubFactor08,
+ - this->value[0][0] * SubFactor06 + this->value[0][2] * SubFactor09 - this->value[0][3] * SubFactor10,
+ + this->value[0][0] * SubFactor11 - this->value[0][1] * SubFactor09 + this->value[0][3] * SubFactor12,
+ - this->value[0][0] * SubFactor08 + this->value[0][1] * SubFactor10 - this->value[0][2] * SubFactor12,
+
+ - this->value[0][1] * SubFactor13 + this->value[0][2] * SubFactor14 - this->value[0][3] * SubFactor15,
+ + this->value[0][0] * SubFactor13 - this->value[0][2] * SubFactor16 + this->value[0][3] * SubFactor17,
+ - this->value[0][0] * SubFactor14 + this->value[0][1] * SubFactor16 - this->value[0][3] * SubFactor18,
+ + this->value[0][0] * SubFactor15 - this->value[0][1] * SubFactor17 + this->value[0][2] * SubFactor18);
+
+ value_type Determinant =
+ + this->value[0][0] * Inverse[0][0]
+ + this->value[0][1] * Inverse[1][0]
+ + this->value[0][2] * Inverse[2][0]
+ + this->value[0][3] * Inverse[3][0];
+
+ Inverse /= Determinant;
+ return Inverse;
+ }
+
+ // Binary operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator+
+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s
+ )
+ {
+ return tmat4x4<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator+
+ (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m
+ )
+ {
+ return tmat4x4<T>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator+
+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return tmat4x4<T>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator-
+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s
+ )
+ {
+ return tmat4x4<T>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s,
+ m[3] - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator-
+ (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m
+ )
+ {
+ return tmat4x4<T>(
+ s - m[0],
+ s - m[1],
+ s - m[2],
+ s - m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator-
+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return tmat4x4<T>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator*
+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s
+ )
+ {
+ return tmat4x4<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator*
+ (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m
+ )
+ {
+ return tmat4x4<T>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::col_type operator*
+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::row_type const & v
+ )
+ {
+ return typename tmat4x4<T>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w,
+ m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z + m[3][3] * v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::row_type operator*
+ (
+ typename tmat4x4<T>::col_type const & v,
+ tmat4x4<T> const & m
+ )
+ {
+ return typename tmat4x4<T>::row_type(
+ m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] * v.w,
+ m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] * v.w,
+ m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] * v.w,
+ m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] * v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T> operator*
+ (
+ tmat4x4<T> const & m1,
+ tmat2x4<T> const & m2
+ )
+ {
+ return tmat2x4<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T> operator*
+ (
+ tmat4x4<T> const & m1,
+ tmat3x4<T> const & m2
+ )
+ {
+ return tmat3x4<T>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],
+ m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator*
+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ typename tmat4x4<T>::col_type const SrcA0 = m1[0];
+ typename tmat4x4<T>::col_type const SrcA1 = m1[1];
+ typename tmat4x4<T>::col_type const SrcA2 = m1[2];
+ typename tmat4x4<T>::col_type const SrcA3 = m1[3];
+
+ typename tmat4x4<T>::col_type const SrcB0 = m2[0];
+ typename tmat4x4<T>::col_type const SrcB1 = m2[1];
+ typename tmat4x4<T>::col_type const SrcB2 = m2[2];
+ typename tmat4x4<T>::col_type const SrcB3 = m2[3];
+
+ tmat4x4<T> Result(tmat4x4<T>::null);
+ Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3];
+ Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3];
+ Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3];
+ Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator/
+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::value_type const & s
+ )
+ {
+ return tmat4x4<T>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s,
+ m[3] / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator/
+ (
+ typename tmat4x4<T>::value_type const & s,
+ tmat4x4<T> const & m
+ )
+ {
+ return tmat4x4<T>(
+ s / m[0],
+ s / m[1],
+ s / m[2],
+ s / m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::col_type operator/
+ (
+ tmat4x4<T> const & m,
+ typename tmat4x4<T>::row_type const & v
+ )
+ {
+ return m._inverse() * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T>::row_type operator/
+ (
+ typename tmat4x4<T>::col_type const & v,
+ tmat4x4<T> const & m
+ )
+ {
+ return v * m._inverse();
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> operator/
+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return m1 * m2._inverse();
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> const operator-
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ return tmat4x4<T>(
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> const operator++
+ (
+ tmat4x4<T> const & m,
+ int
+ )
+ {
+ return tmat4x4<T>(
+ m[0] + typename tmat4x4<T>::value_type(1),
+ m[1] + typename tmat4x4<T>::value_type(1),
+ m[2] + typename tmat4x4<T>::value_type(1),
+ m[3] + typename tmat4x4<T>::value_type(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T> const operator--
+ (
+ tmat4x4<T> const & m,
+ int
+ )
+ {
+ return tmat4x4<T>(
+ m[0] - typename tmat4x4<T>::value_type(1),
+ m[1] - typename tmat4x4<T>::value_type(1),
+ m[2] - typename tmat4x4<T>::value_type(1),
+ m[3] - typename tmat4x4<T>::value_type(1));
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tmat4x4<T> const & m1,
+ tmat4x4<T> const & m2
+ )
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
+ }
+
+} //namespace detail
+} //namespace glm
diff --git a/include/gal/opengl/glm/core/type_size.hpp b/include/gal/opengl/glm/core/type_size.hpp
new file mode 100644
index 0000000..b7a7c31
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_size.hpp
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_size.hpp
+/// @date 2008-10-05 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_size
+#define glm_core_type_size
+
+#include <cstdlib>
+
+namespace glm{
+namespace detail
+{
+ //typedef std::size_t size_t;
+ typedef int sizeType;
+
+}//namespace detail
+}//namespace glm
+
+#endif//glm_core_type_size
diff --git a/include/gal/opengl/glm/core/type_vec.hpp b/include/gal/opengl/glm/core/type_vec.hpp
new file mode 100644
index 0000000..60e2b70
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec.hpp
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec.hpp
+/// @date 2010-01-26 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_vec
+#define glm_core_type_vec
+
+#include "type_gentype.hpp"
+
+namespace glm{
+namespace detail
+{
+
+}//namespace detail
+}//namespace glm
+
+#endif//glm_core_type_vec
diff --git a/include/gal/opengl/glm/core/type_vec.inl b/include/gal/opengl/glm/core/type_vec.inl
new file mode 100644
index 0000000..ef3f8f4
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec.inl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec.inl
+/// @date 2011-06-15 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/core/type_vec1.hpp b/include/gal/opengl/glm/core/type_vec1.hpp
new file mode 100644
index 0000000..395cc78
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec1.hpp
@@ -0,0 +1,212 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec1.hpp
+/// @date 2008-08-25 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_gentype1
+#define glm_core_type_gentype1
+
+#include "type_vec.hpp"
+#include "type_float.hpp"
+#include "type_int.hpp"
+#include "type_size.hpp"
+#include "_swizzle.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tref1;
+ template <typename T> struct tref2;
+ template <typename T> struct tref3;
+ template <typename T> struct tref4;
+ template <typename T> struct tvec1;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+
+ template <typename T>
+ struct tvec1
+ {
+ enum ctor{null};
+
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec1<T> type;
+ typedef tvec1<bool> bool_type;
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ //////////////////////////////////////
+ // Data
+
+# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
+ value_type x;
+# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
+ union {value_type x, r, s;};
+# endif//GLM_COMPONENT
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL value_type & operator[](size_type i);
+ GLM_FUNC_DECL value_type const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec1();
+ GLM_FUNC_DECL tvec1(tvec1<T> const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec1(
+ ctor);
+ GLM_FUNC_DECL explicit tvec1(
+ value_type const & s);
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec1(tref1<T> const & r);
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec1(U const & s);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
+
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
+ GLM_FUNC_DECL tvec1<T> & operator++();
+ GLM_FUNC_DECL tvec1<T> & operator--();
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL value_type swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref1<T> swizzle(comp X);
+ };
+
+ template <typename T>
+ struct tref1
+ {
+ GLM_FUNC_DECL tref1(T & x);
+ GLM_FUNC_DECL tref1(tref1<T> const & r);
+ GLM_FUNC_DECL tref1(tvec1<T> const & v);
+
+ GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
+ GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
+
+ T& x;
+ };
+
+ GLM_DETAIL_IS_VECTOR(tvec1);
+
+ typedef detail::tvec1<highp_float> highp_vec1_t;
+ typedef detail::tvec1<mediump_float> mediump_vec1_t;
+ typedef detail::tvec1<lowp_float> lowp_vec1_t;
+ typedef detail::tvec1<highp_int> highp_ivec1_t;
+ typedef detail::tvec1<mediump_int> mediump_ivec1_t;
+ typedef detail::tvec1<lowp_int> lowp_ivec1_t;
+ typedef detail::tvec1<highp_uint> highp_uvec1_t;
+ typedef detail::tvec1<mediump_uint> mediump_uvec1_t;
+ typedef detail::tvec1<lowp_uint> lowp_uvec1_t;
+
+}//namespace detail
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec1.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
+
+#endif//glm_core_type_gentype1
diff --git a/include/gal/opengl/glm/core/type_vec1.inl b/include/gal/opengl/glm/core/type_vec1.inl
new file mode 100644
index 0000000..6b12e03
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec1.inl
@@ -0,0 +1,928 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec1.inl
+/// @date 2008-08-25 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec1<T>::size_type tvec1<T>::length() const
+ {
+ return 1;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec1<T>::value_type & tvec1<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec1<T>::value_type const & tvec1<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1() :
+ x(value_type(0))
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ tvec1<T> const & v
+ ) :
+ x(v.x)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ value_type const & s
+ ) :
+ x(s)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ tref1<T> const & r
+ ) :
+ x(r.x)
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ U const & s
+ ) :
+ x(value_type(s))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ tvec2<U> const & v
+ ) :
+ x(value_type(v.x))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ tvec3<U> const & v
+ ) :
+ x(value_type(v.x))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T>::tvec1
+ (
+ tvec4<U> const & v
+ ) :
+ x(value_type(v.x))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator=
+ (
+ tvec1<T> const & v
+ )
+ {
+ this->x = v.x;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x = T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator+=
+ (
+ U const & s
+ )
+ {
+ this->x += T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator+=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x += T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator-=
+ (
+ U const & s
+ )
+ {
+ this->x -= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator-=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x -= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator*=
+ (
+ U const & s
+ )
+ {
+ this->x *= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator*=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x *= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator/=
+ (
+ U const & s
+ )
+ {
+ this->x /= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator/=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x /= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator++()
+ {
+ ++this->x;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator--()
+ {
+ --this->x;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return (v1.x == v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return (v1.x != v2.x);
+ }
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator%=
+ (
+ U const & s
+ )
+ {
+ this->x %= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator%=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x %= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator&=
+ (
+ U const & s
+ )
+ {
+ this->x &= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator&=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x &= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator|=
+ (
+ U const & s
+ )
+ {
+ this->x |= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator|=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x |= U(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator^=
+ (
+ U const & s
+ )
+ {
+ this->x ^= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator^=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x ^= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator<<=
+ (
+ U const & s
+ )
+ {
+ this->x <<= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator<<=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x <<= T(v.x);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator>>=
+ (
+ U const & s
+ )
+ {
+ this->x >>= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T> & tvec1<T>::operator>>=
+ (
+ tvec1<U> const & v
+ )
+ {
+ this->x >>= T(v.x);
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T
+ tvec1<T>::swizzle(comp x) const
+ {
+ return (*this)[x];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>
+ tvec1<T>::swizzle
+ (
+ comp x,
+ comp y
+ ) const
+ {
+ return tvec2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>
+ tvec1<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z
+ ) const
+ {
+ return tvec3<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>
+ tvec1<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z,
+ comp w
+ ) const
+ {
+ return tvec4<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref1<T>
+ tvec1<T>::swizzle
+ (
+ comp x
+ )
+ {
+ return tref1<T>(
+ (*this)[x]);
+ }
+
+ //////////////////////////////////////
+ // Binary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator+
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator+
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s + v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator+
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x + v2.x);
+ }
+
+ //operator-
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator-
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator-
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s - v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator-
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x - v2.x);
+ }
+
+ //operator*
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator*
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator*
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s * v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator*
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x * v2.x);
+ }
+
+ //operator/
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator/
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator/
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s / v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator/
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x / v2.x);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator-
+ (
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ -v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator++
+ (
+ tvec1<T> const & v,
+ int
+ )
+ {
+ return tvec1<T>(
+ v.x + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator--
+ (
+ tvec1<T> const & v,
+ int
+ )
+ {
+ return tvec1<T>(
+ v.x - T(1));
+ }
+
+ //////////////////////////////////////
+ // Binary bit operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator%
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x % s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator%
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s % v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator%
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x % v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator&
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x & s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator&
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s & v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator&
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x & v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator|
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x | s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator|
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s | v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator|
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x | v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator^
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x ^ s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator^
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s ^ v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator^
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x ^ v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator<<
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x << s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator<<
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s << v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator<<
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x << v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator>>
+ (
+ tvec1<T> const & v,
+ typename tvec1<T>::value_type const & s
+ )
+ {
+ return tvec1<T>(
+ v.x >> s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator>>
+ (
+ typename tvec1<T>::value_type const & s,
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ s >> v.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator>>
+ (
+ tvec1<T> const & v1,
+ tvec1<T> const & v2
+ )
+ {
+ return tvec1<T>(
+ v1.x >> v2.x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec1<T> operator~
+ (
+ tvec1<T> const & v
+ )
+ {
+ return tvec1<T>(
+ ~v.x);
+ }
+
+ //////////////////////////////////////
+ // tref definition
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref1<T>::tref1
+ (
+ T & x
+ ) :
+ x(x)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref1<T>::tref1
+ (
+ tref1<T> const & r
+ ) :
+ x(r.x)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref1<T>::tref1
+ (
+ tvec1<T> const & v
+ ) :
+ x(v.x)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref1<T> & tref1<T>::operator=
+ (
+ tref1<T> const & r
+ )
+ {
+ x = r.x;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref1<T> & tref1<T>::operator=
+ (
+ tvec1<T> const & v
+ )
+ {
+ x = v.x;
+ return *this;
+ }
+
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/type_vec2.hpp b/include/gal/opengl/glm/core/type_vec2.hpp
new file mode 100644
index 0000000..a858198
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec2.hpp
@@ -0,0 +1,317 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec2.hpp
+/// @date 2008-08-18 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_gentype2
+#define glm_core_type_gentype2
+
+#include "type_vec.hpp"
+#include "type_float.hpp"
+#include "type_int.hpp"
+#include "type_size.hpp"
+#include "_swizzle.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tref2;
+ template <typename T> struct tref3;
+ template <typename T> struct tref4;
+ template <typename T> struct tvec3;
+ template <typename T> struct tvec4;
+
+ template <typename T>
+ struct tvec2
+ {
+ enum ctor{null};
+
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec2<T> type;
+ typedef tvec2<bool> bool_type;
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ //////////////////////////////////////
+ // Data
+
+# if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
+ union
+ {
+ struct{value_type x, y;};
+ struct{value_type r, g;};
+ struct{value_type s, t;};
+
+# if(defined(GLM_SWIZZLE))
+ _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y)
+ _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g)
+ _GLM_SWIZZLE2_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t)
+ _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y)
+ _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g)
+ _GLM_SWIZZLE2_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t)
+ _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y)
+ _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g)
+ _GLM_SWIZZLE2_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t)
+# endif//(defined(GLM_SWIZZLE))
+ };
+# elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+ union {value_type x, r, s;};
+ union {value_type y, g, t;};
+
+# if(defined(GLM_SWIZZLE))
+ // Defines all he swizzle operator as functions
+ GLM_SWIZZLE_GEN_REF_FROM_VEC2(value_type, detail::tvec2, detail::tref2)
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4)
+# endif//(defined(GLM_SWIZZLE))
+# else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
+ value_type x, y;
+
+# if(defined(GLM_SWIZZLE))
+ // Defines all he swizzle operator as functions
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(value_type, detail::tvec2, detail::tref2, x, y)
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(value_type, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4, x, y)
+# endif//(defined(GLM_SWIZZLE))
+# endif//GLM_COMPONENT
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL value_type & operator[](size_type i);
+ GLM_FUNC_DECL value_type const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec2();
+ GLM_FUNC_DECL tvec2(tvec2<T> const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec2(
+ ctor);
+ GLM_FUNC_DECL explicit tvec2(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tvec2(
+ value_type const & s1,
+ value_type const & s2);
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec2(tref2<T> const & r);
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec2(const glm::detail::swizzle<2,T,tvec2<T>,E0,E1,-1,-2>& that)
+ {
+ *this = that();
+ }
+
+ //////////////////////////////////////
+ // Convertion constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(
+ U const & x);
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, typename V>
+ GLM_FUNC_DECL explicit tvec2(
+ U const & x,
+ V const & y);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(tvec2<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(tvec3<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec2<T> & operator= (tvec2<T> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator= (tvec2<U> const & v);
+
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator+=(tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator-=(tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator*=(tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator/=(tvec2<U> const & v);
+ GLM_FUNC_DECL tvec2<T> & operator++();
+ GLM_FUNC_DECL tvec2<T> & operator--();
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator%= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator%= (tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator&= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator&= (tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator|= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator|= (tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator^= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator^= (tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator<<=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator<<=(tvec2<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator>>=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T> & operator>>=(tvec2<U> const & v);
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL value_type swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
+ };
+
+ template <typename T>
+ struct tref2
+ {
+ GLM_FUNC_DECL tref2(T & x, T & y);
+ GLM_FUNC_DECL tref2(tref2<T> const & r);
+ GLM_FUNC_DECL explicit tref2(tvec2<T> const & v);
+
+ GLM_FUNC_DECL tref2<T> & operator= (tref2<T> const & r);
+ GLM_FUNC_DECL tref2<T> & operator= (tvec2<T> const & v);
+
+ GLM_FUNC_DECL tvec2<T> operator() ();
+
+ T & x;
+ T & y;
+ };
+
+ GLM_DETAIL_IS_VECTOR(tvec2);
+
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 components vector of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<highp_float> highp_vec2;
+
+ /// 2 components vector of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<mediump_float> mediump_vec2;
+
+ /// 2 components vector of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<lowp_float> lowp_vec2;
+
+ /// 2 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<highp_int> highp_ivec2;
+
+ /// 2 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<mediump_int> mediump_ivec2;
+
+ /// 2 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<lowp_int> lowp_ivec2;
+
+ /// 2 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<highp_uint> highp_uvec2;
+
+ /// 2 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<mediump_uint> mediump_uvec2;
+
+ /// 2 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec2<lowp_uint> lowp_uvec2;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec2.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
+
+#endif//glm_core_type_gentype2
diff --git a/include/gal/opengl/glm/core/type_vec2.inl b/include/gal/opengl/glm/core/type_vec2.inl
new file mode 100644
index 0000000..32e4f9f
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec2.inl
@@ -0,0 +1,998 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_tvec2.inl
+/// @date 2008-08-18 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec2<T>::size_type tvec2<T>::length() const
+ {
+ return 2;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec2<T>::value_type &
+ tvec2<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec2<T>::value_type const &
+ tvec2<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2() :
+ x(value_type(0)),
+ y(value_type(0))
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ tvec2<T> const & v
+ ) :
+ x(v.x),
+ y(v.y)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ value_type const & s
+ ) :
+ x(s),
+ y(s)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ value_type const & s1,
+ value_type const & s2
+ ) :
+ x(s1),
+ y(s2)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ tref2<T> const & r
+ ) :
+ x(r.x),
+ y(r.y)
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ U const & x
+ ) :
+ x(value_type(x)),
+ y(value_type(x))
+ {}
+
+ template <typename T>
+ template <typename U, typename V>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ U const & a,
+ V const & b
+ ) :
+ x(value_type(a)),
+ y(value_type(b))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ tvec2<U> const & v
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ tvec3<U> const & v
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T>::tvec2
+ (
+ tvec4<U> const & v
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator=
+ (
+ tvec2<T> const & v
+ )
+ {
+ this->x = v.x;
+ this->y = v.y;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x = T(v.x);
+ this->y = T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator+=(U s)
+ {
+ this->x += T(s);
+ this->y += T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator+=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x += T(v.x);
+ this->y += T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator-=(U s)
+ {
+ this->x -= T(s);
+ this->y -= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator-=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x -= T(v.x);
+ this->y -= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator*=(U s)
+ {
+ this->x *= T(s);
+ this->y *= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator*=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x *= T(v.x);
+ this->y *= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator/=(U s)
+ {
+ this->x /= T(s);
+ this->y /= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator/=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x /= T(v.x);
+ this->y /= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator--()
+ {
+ --this->x;
+ --this->y;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return (v1.x == v2.x) && (v1.y == v2.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return (v1.x != v2.x) || (v1.y != v2.y);
+ }
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator%=(U s)
+ {
+ this->x %= T(s);
+ this->y %= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator%=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x %= T(v.x);
+ this->y %= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator&=(U s)
+ {
+ this->x &= T(s);
+ this->y &= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator&=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x &= T(v.x);
+ this->y &= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator|=(U s)
+ {
+ this->x |= T(s);
+ this->y |= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator|=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x |= T(v.x);
+ this->y |= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator^=(U s)
+ {
+ this->x ^= T(s);
+ this->y ^= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator^=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x ^= T(v.x);
+ this->y ^= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator<<=(U s)
+ {
+ this->x <<= T(s);
+ this->y <<= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator<<=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x <<= T(v.x);
+ this->y <<= T(v.y);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator>>=(U s)
+ {
+ this->x >>= T(s);
+ this->y >>= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T> & tvec2<T>::operator>>=
+ (
+ tvec2<U> const & v
+ )
+ {
+ this->x >>= T(v.x);
+ this->y >>= T(v.y);
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec2<T>::value_type tvec2<T>::swizzle
+ (
+ comp x
+ ) const
+ {
+ return (*this)[x];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> tvec2<T>::swizzle
+ (
+ comp x,
+ comp y
+ ) const
+ {
+ return tvec2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> tvec2<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z
+ ) const
+ {
+ return tvec3<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> tvec2<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z,
+ comp w
+ ) const
+ {
+ return tvec4<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref2<T> tvec2<T>::swizzle
+ (
+ comp x,
+ comp y
+ )
+ {
+ return tref2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ //////////////////////////////////////
+ // Binary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator+
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x + T(s),
+ v.y + T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator+
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) + v.x,
+ T(s) + v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator+
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x + T(v2.x),
+ v1.y + T(v2.y));
+ }
+
+ //operator-
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator-
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x - T(s),
+ v.y - T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator-
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) - v.x,
+ T(s) - v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator-
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x - T(v2.x),
+ v1.y - T(v2.y));
+ }
+
+ //operator*
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator*
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x * T(s),
+ v.y * T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator*
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) * v.x,
+ T(s) * v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator*
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x * T(v2.x),
+ v1.y * T(v2.y));
+ }
+
+ //operator/
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator/
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x / T(s),
+ v.y / T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator/
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) / v.x,
+ T(s) / v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator/
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x / T(v2.x),
+ v1.y / T(v2.y));
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator-
+ (
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ -v.x,
+ -v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator++
+ (
+ tvec2<T> const & v,
+ int
+ )
+ {
+ return tvec2<T>(
+ v.x + T(1),
+ v.y + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator--
+ (
+ tvec2<T> const & v,
+ int
+ )
+ {
+ return tvec2<T>(
+ v.x - T(1),
+ v.y - T(1));
+ }
+
+ //////////////////////////////////////
+ // Binary bit operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator%
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x % T(s),
+ v.y % T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator%
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) % v.x,
+ T(s) % v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator%
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x % T(v2.x),
+ v1.y % T(v2.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator&
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x & T(s),
+ v.y & T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator&
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) & v.x,
+ T(s) & v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator&
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x & T(v2.x),
+ v1.y & T(v2.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator|
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x | T(s),
+ v.y | T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator|
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) | v.x,
+ T(s) | v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator|
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x | T(v2.x),
+ v1.y | T(v2.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator^
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x ^ T(s),
+ v.y ^ T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator^
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) ^ v.x,
+ T(s) ^ v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator^
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x ^ T(v2.x),
+ v1.y ^ T(v2.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator<<
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x << T(s),
+ v.y << T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator<<
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ s << T(v.x),
+ s << T(v.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator<<
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x << T(v2.x),
+ v1.y << T(v2.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator>>
+ (
+ tvec2<T> const & v,
+ T const & s
+ )
+ {
+ return tvec2<T>(
+ v.x >> T(s),
+ v.y >> T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator>>
+ (
+ T const & s,
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ T(s) >> v.x,
+ T(s) >> v.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator>>
+ (
+ tvec2<T> const & v1,
+ tvec2<T> const & v2
+ )
+ {
+ return tvec2<T>(
+ v1.x >> T(v2.x),
+ v1.y >> T(v2.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> operator~
+ (
+ tvec2<T> const & v
+ )
+ {
+ return tvec2<T>(
+ ~v.x,
+ ~v.y);
+ }
+
+ //////////////////////////////////////
+ // tref definition
+
+ template <typename T>
+ tref2<T>::tref2
+ (
+ T & x,
+ T & y
+ ) :
+ x(x),
+ y(y)
+ {}
+
+ template <typename T>
+ tref2<T>::tref2
+ (
+ tref2<T> const & r
+ ) :
+ x(r.x),
+ y(r.y)
+ {}
+
+ template <typename T>
+ tref2<T>::tref2
+ (
+ tvec2<T> const & v
+ ) :
+ x(v.x),
+ y(v.y)
+ {}
+
+ template <typename T>
+ tref2<T>& tref2<T>::operator=
+ (
+ tref2<T> const & r
+ )
+ {
+ x = r.x;
+ y = r.y;
+ return *this;
+ }
+
+ template <typename T>
+ tref2<T>& tref2<T>::operator=
+ (
+ tvec2<T> const & v
+ )
+ {
+ x = v.x;
+ y = v.y;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> tref2<T>::operator() ()
+ {
+ return tvec2<T>(this->x, this->y);
+ }
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/type_vec3.hpp b/include/gal/opengl/glm/core/type_vec3.hpp
new file mode 100644
index 0000000..ea265ca
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec3.hpp
@@ -0,0 +1,342 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec3.hpp
+/// @date 2008-08-22 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_gentype3
+#define glm_core_type_gentype3
+
+#include "type_vec.hpp"
+#include "type_float.hpp"
+#include "type_int.hpp"
+#include "type_size.hpp"
+#include "_swizzle.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tref2;
+ template <typename T> struct tref3;
+ template <typename T> struct tref4;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec4;
+
+ template <typename T>
+ struct tvec3
+ {
+ enum ctor{null};
+
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec3<T> type;
+ typedef tvec3<bool> bool_type;
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ //////////////////////////////////////
+ // Data
+
+# if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
+ union
+ {
+ struct{value_type x, y, z;};
+ struct{value_type r, g, b;};
+ struct{value_type s, t, p;};
+
+# if(defined(GLM_SWIZZLE))
+ _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z)
+ _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b)
+ _GLM_SWIZZLE3_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p)
+ _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z)
+ _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b)
+ _GLM_SWIZZLE3_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p)
+ _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z)
+ _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b)
+ _GLM_SWIZZLE3_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p)
+# endif//(defined(GLM_SWIZZLE))
+ };
+# elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+ union {value_type x, r, s;};
+ union {value_type y, g, t;};
+ union {value_type z, b, p;};
+
+# if(defined(GLM_SWIZZLE))
+ // Defines all he swizzle operator as functions
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, detail::tvec3, detail::tref2, detail::tref3)
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4)
+# endif//(defined(GLM_SWIZZLE))
+# else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
+ value_type x, y, z;
+
+# if(defined(GLM_SWIZZLE))
+ // Defines all he swizzle operator as functions
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, detail::tvec3, detail::tref2, detail::tref3, x, y, z)
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, detail::tvec3, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z)
+# endif//(defined(GLM_SWIZZLE))
+# endif//GLM_COMPONENT
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL value_type & operator[](size_type i);
+ GLM_FUNC_DECL value_type const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec3();
+ GLM_FUNC_DECL tvec3(tvec3<T> const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec3(
+ ctor);
+ GLM_FUNC_DECL explicit tvec3(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tvec3(
+ value_type const & s1,
+ value_type const & s2,
+ value_type const & s3);
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec3(
+ U const & x);
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, typename V, typename W>
+ GLM_FUNC_DECL explicit tvec3(
+ U const & x,
+ V const & y,
+ W const & z);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec3(tref3<T> const & r);
+
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec3(tref2<A> const & v, B const & s);
+
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec3(A const & s, tref2<B> const & v);
+
+ template <int E0, int E1, int E2>
+ GLM_FUNC_DECL tvec3(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & that)
+ {
+ *this = that();
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec3(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & s)
+ {
+ *this = tvec3<T>(v(), s);
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec3(T const & s, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
+ {
+ *this = tvec3<T>(s, v());
+ }
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec3<T> & operator= (tvec3<T> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator= (tvec3<U> const & v);
+
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator+=(tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator-=(tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator*=(tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator/=(tvec3<U> const & v);
+ GLM_FUNC_DECL tvec3<T> & operator++();
+ GLM_FUNC_DECL tvec3<T> & operator--();
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator%= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator%= (tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator&= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator&= (tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator|= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator|= (tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator^= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator^= (tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator<<=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator<<=(tvec3<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator>>=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T> & operator>>=(tvec3<U> const & v);
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL value_type swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
+ GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
+ };
+
+ template <typename T>
+ struct tref3
+ {
+ GLM_FUNC_DECL tref3(T & x, T & y, T & z);
+ GLM_FUNC_DECL tref3(tref3<T> const & r);
+ GLM_FUNC_DECL explicit tref3(tvec3<T> const & v);
+
+ GLM_FUNC_DECL tref3<T> & operator= (tref3<T> const & r);
+ GLM_FUNC_DECL tref3<T> & operator= (tvec3<T> const & v);
+
+ GLM_FUNC_DECL tvec3<T> operator() ();
+
+ T & x;
+ T & y;
+ T & z;
+ };
+
+ GLM_DETAIL_IS_VECTOR(tvec3);
+} //namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 components vector of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<highp_float> highp_vec3;
+
+ /// 3 components vector of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<mediump_float> mediump_vec3;
+
+ /// 3 components vector of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<lowp_float> lowp_vec3;
+
+ /// 3 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<highp_int> highp_ivec3;
+
+ /// 3 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<mediump_int> mediump_ivec3;
+
+ /// 3 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<lowp_int> lowp_ivec3;
+
+ /// 3 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<highp_uint> highp_uvec3;
+
+ /// 3 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<mediump_uint> mediump_uvec3;
+
+ /// 3 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec3<lowp_uint> lowp_uvec3;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec3.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
+
+#endif//glm_core_type_gentype3
diff --git a/include/gal/opengl/glm/core/type_vec3.inl b/include/gal/opengl/glm/core/type_vec3.inl
new file mode 100644
index 0000000..2279abf
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec3.inl
@@ -0,0 +1,1122 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_tvec3.inl
+/// @date 2008-08-22 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3<T>::size_type tvec3<T>::length() const
+ {
+ return 3;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec3<T>::value_type &
+ tvec3<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec3<T>::value_type const &
+ tvec3<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3() :
+ x(value_type(0)),
+ y(value_type(0)),
+ z(value_type(0))
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ tvec3<T> const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ value_type const & s
+ ) :
+ x(s),
+ y(s),
+ z(s)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ value_type const & s0,
+ value_type const & s1,
+ value_type const & s2
+ ) :
+ x(s0),
+ y(s1),
+ z(s2)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ tref3<T> const & r
+ ) :
+ x(r.x),
+ y(r.y),
+ z(r.z)
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ tref2<A> const & v,
+ B const & s
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(s))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ A const & s,
+ tref2<B> const & v
+ ) :
+ x(value_type(s)),
+ y(value_type(v.x)),
+ z(value_type(v.y))
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ U const & s
+ ) :
+ x(value_type(s)),
+ y(value_type(s)),
+ z(value_type(s))
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ A const & x,
+ B const & y,
+ C const & z
+ ) :
+ x(value_type(x)),
+ y(value_type(y)),
+ z(value_type(z))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ tvec2<A> const & v,
+ B const & s
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(s))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ A const & s,
+ tvec2<B> const & v
+ ) :
+ x(value_type(s)),
+ y(value_type(v.x)),
+ z(value_type(v.y))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ tvec3<U> const & v
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(v.z))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T>::tvec3
+ (
+ tvec4<U> const & v
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(v.z))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T>& tvec3<T>::operator=
+ (
+ tvec3<T> const & v
+ )
+ {
+ this->x = v.x;
+ this->y = v.y;
+ this->z = v.z;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T>& tvec3<T>::operator=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x = T(v.x);
+ this->y = T(v.y);
+ this->z = T(v.z);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator+=(U s)
+ {
+ this->x += T(s);
+ this->y += T(s);
+ this->z += T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator+=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x += T(v.x);
+ this->y += T(v.y);
+ this->z += T(v.z);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator-=(U s)
+ {
+ this->x -= T(s);
+ this->y -= T(s);
+ this->z -= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator-=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x -= T(v.x);
+ this->y -= T(v.y);
+ this->z -= T(v.z);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator*=(U s)
+ {
+ this->x *= T(s);
+ this->y *= T(s);
+ this->z *= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator*=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x *= T(v.x);
+ this->y *= T(v.y);
+ this->z *= T(v.z);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator/=(U s)
+ {
+ this->x /= T(s);
+ this->y /= T(s);
+ this->z /= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator/=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x /= T(v.x);
+ this->y /= T(v.y);
+ this->z /= T(v.z);
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ ++this->z;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator--()
+ {
+ --this->x;
+ --this->y;
+ --this->z;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z);
+ }
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator%=(U s)
+ {
+ this->x %= s;
+ this->y %= s;
+ this->z %= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator%=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x %= v.x;
+ this->y %= v.y;
+ this->z %= v.z;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator&=(U s)
+ {
+ this->x &= s;
+ this->y &= s;
+ this->z &= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator&=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x &= v.x;
+ this->y &= v.y;
+ this->z &= v.z;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator|=(U s)
+ {
+ this->x |= s;
+ this->y |= s;
+ this->z |= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator|=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x |= v.x;
+ this->y |= v.y;
+ this->z |= v.z;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator^=(U s)
+ {
+ this->x ^= s;
+ this->y ^= s;
+ this->z ^= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator^=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x ^= v.x;
+ this->y ^= v.y;
+ this->z ^= v.z;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator<<=(U s)
+ {
+ this->x <<= s;
+ this->y <<= s;
+ this->z <<= s;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator<<=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x <<= T(v.x);
+ this->y <<= T(v.y);
+ this->z <<= T(v.z);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator>>=(U s)
+ {
+ this->x >>= T(s);
+ this->y >>= T(s);
+ this->z >>= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T> & tvec3<T>::operator>>=
+ (
+ tvec3<U> const & v
+ )
+ {
+ this->x >>= T(v.x);
+ this->y >>= T(v.y);
+ this->z >>= T(v.z);
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec3<T>::value_type
+ tvec3<T>::swizzle
+ (
+ comp x
+ ) const
+ {
+ return (*this)[x];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> tvec3<T>::swizzle
+ (
+ comp x,
+ comp y
+ ) const
+ {
+ return tvec2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> tvec3<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z
+ ) const
+ {
+ return tvec3<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> tvec3<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z,
+ comp w
+ ) const
+ {
+ return tvec4<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref2<T> tvec3<T>::swizzle
+ (
+ comp x,
+ comp y
+ )
+ {
+ return tref2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T> tvec3<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z
+ )
+ {
+ return tref3<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ //////////////////////////////////////
+ // Binary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator+
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x + T(s),
+ v.y + T(s),
+ v.z + T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator+
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) + v.x,
+ T(s) + v.y,
+ T(s) + v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator+
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x + T(v2.x),
+ v1.y + T(v2.y),
+ v1.z + T(v2.z));
+ }
+
+ //operator-
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator-
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x - T(s),
+ v.y - T(s),
+ v.z - T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator-
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) - v.x,
+ T(s) - v.y,
+ T(s) - v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator-
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x - T(v2.x),
+ v1.y - T(v2.y),
+ v1.z - T(v2.z));
+ }
+
+ //operator*
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator*
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x * T(s),
+ v.y * T(s),
+ v.z * T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator*
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) * v.x,
+ T(s) * v.y,
+ T(s) * v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator*
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x * T(v2.x),
+ v1.y * T(v2.y),
+ v1.z * T(v2.z));
+ }
+
+ //operator/
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator/
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x / T(s),
+ v.y / T(s),
+ v.z / T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator/
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) / v.x,
+ T(s) / v.y,
+ T(s) / v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator/
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x / T(v2.x),
+ v1.y / T(v2.y),
+ v1.z / T(v2.z));
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator-
+ (
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ -v.x,
+ -v.y,
+ -v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator++
+ (
+ tvec3<T> const & v,
+ int
+ )
+ {
+ return tvec3<T>(
+ v.x + T(1),
+ v.y + T(1),
+ v.z + T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator--
+ (
+ tvec3<T> const & v,
+ int
+ )
+ {
+ return tvec3<T>(
+ v.x - T(1),
+ v.y - T(1),
+ v.z - T(1));
+ }
+
+ //////////////////////////////////////
+ // Binary bit operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator%
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x % T(s),
+ v.y % T(s),
+ v.z % T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator%
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) % v.x,
+ T(s) % v.y,
+ T(s) % v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator%
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x % T(v2.x),
+ v1.y % T(v2.y),
+ v1.z % T(v2.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator&
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x & T(s),
+ v.y & T(s),
+ v.z & T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator&
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) & v.x,
+ T(s) & v.y,
+ T(s) & v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator&
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x & T(v2.x),
+ v1.y & T(v2.y),
+ v1.z & T(v2.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator|
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x | T(s),
+ v.y | T(s),
+ v.z | T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator|
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) | v.x,
+ T(s) | v.y,
+ T(s) | v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator|
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x | T(v2.x),
+ v1.y | T(v2.y),
+ v1.z | T(v2.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator^
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x ^ T(s),
+ v.y ^ T(s),
+ v.z ^ T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator^
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) ^ v.x,
+ T(s) ^ v.y,
+ T(s) ^ v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator^
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x ^ T(v2.x),
+ v1.y ^ T(v2.y),
+ v1.z ^ T(v2.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator<<
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x << T(s),
+ v.y << T(s),
+ v.z << T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator<<
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ T(s) << v.x,
+ T(s) << v.y,
+ T(s) << v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator<<
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x << T(v2.x),
+ v1.y << T(v2.y),
+ v1.z << T(v2.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator>>
+ (
+ tvec3<T> const & v,
+ T const & s
+ )
+ {
+ return tvec3<T>(
+ v.x >> T(s),
+ v.y >> T(s),
+ v.z >> T(s));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator>>
+ (
+ T const & s,
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ s >> T(v.x),
+ s >> T(v.y),
+ s >> T(v.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator>>
+ (
+ tvec3<T> const & v1,
+ tvec3<T> const & v2
+ )
+ {
+ return tvec3<T>(
+ v1.x >> T(v2.x),
+ v1.y >> T(v2.y),
+ v1.z >> T(v2.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> operator~
+ (
+ tvec3<T> const & v
+ )
+ {
+ return tvec3<T>(
+ ~v.x,
+ ~v.y,
+ ~v.z);
+ }
+
+ //////////////////////////////////////
+ // tref definition
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T>::tref3(T & x, T & y, T & z) :
+ x(x),
+ y(y),
+ z(z)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T>::tref3
+ (
+ tref3<T> const & r
+ ) :
+ x(r.x),
+ y(r.y),
+ z(r.z)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T>::tref3
+ (
+ tvec3<T> const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T> & tref3<T>::operator=
+ (
+ tref3<T> const & r
+ )
+ {
+ x = r.x;
+ y = r.y;
+ z = r.z;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T> & tref3<T>::operator=
+ (
+ tvec3<T> const & v
+ )
+ {
+ x = v.x;
+ y = v.y;
+ z = v.z;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> tref3<T>::operator() ()
+ {
+ return tvec3<T>(this->x, this->y, this->z);
+ }
+
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/core/type_vec4.hpp b/include/gal/opengl/glm/core/type_vec4.hpp
new file mode 100644
index 0000000..d1e1b71
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec4.hpp
@@ -0,0 +1,399 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_vec4.hpp
+/// @date 2008-08-22 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_type_gentype4
+#define glm_core_type_gentype4
+
+#include "type_vec.hpp"
+#include "type_float.hpp"
+#include "type_int.hpp"
+#include "type_size.hpp"
+#include "_swizzle.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T> struct tref2;
+ template <typename T> struct tref3;
+ template <typename T> struct tref4;
+ template <typename T> struct tvec2;
+ template <typename T> struct tvec3;
+
+ template <typename T>
+ struct tvec4
+ {
+ enum ctor{null};
+
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef tvec4<T> type;
+ typedef tvec4<bool> bool_type;
+
+ GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
+
+ //////////////////////////////////////
+ // Data
+
+# if(GLM_COMPONENT == GLM_COMPONENT_CXX11)
+ union
+ {
+ struct{value_type x, y, z, w;};
+ struct{value_type r, g, b, a;};
+ struct{value_type s, t, p, q;};
+
+# if(defined(GLM_SWIZZLE))
+ _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z, w)
+ _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b, a)
+ _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p, q)
+ _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z, w)
+ _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b, a)
+ _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p, q)
+ _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z, w)
+ _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b, a)
+ _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p, q)
+# endif//(defined(GLM_SWIZZLE))
+ };
+# elif(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+ union {value_type x, r, s;};
+ union {value_type y, g, t;};
+ union {value_type z, b, p;};
+ union {value_type w, a, q;};
+
+# if(defined(GLM_SWIZZLE))
+ // Defines all he swizzle operator as functions
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4)
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4)
+# endif//(defined(GLM_SWIZZLE))
+# else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
+ value_type x, y, z, w;
+
+# if(defined(GLM_SWIZZLE))
+ // Defines all he swizzle operator as functions
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4, x, y, z, w)
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z, w)
+# endif//(defined(GLM_SWIZZLE))
+# endif//GLM_COMPONENT
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL value_type & operator[](size_type i);
+ GLM_FUNC_DECL value_type const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec4();
+ GLM_FUNC_DECL tvec4(type const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec4(
+ ctor);
+ GLM_FUNC_DECL explicit tvec4(
+ value_type const & s);
+ GLM_FUNC_DECL explicit tvec4(
+ value_type const & s0,
+ value_type const & s1,
+ value_type const & s2,
+ value_type const & s3);
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec4(
+ U const & x);
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_DECL explicit tvec4(
+ A const & x,
+ B const & y,
+ C const & z,
+ D const & w);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tvec3<A> const & v, B const & s);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec4(tvec4<U> const & v);
+
+ template <int E0, int E1, int E2, int E3>
+ GLM_FUNC_DECL tvec4(glm::detail::swizzle<4, T, tvec4<T>, E0, E1, E2, E3> const & that)
+ {
+ *this = that();
+ }
+
+ template <int E0, int E1, int F0, int F1>
+ GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, glm::detail::swizzle<2, T, tvec2<T>, F0, F1, -1, -2> const & u)
+ {
+ *this = tvec4<T>(v(), u());
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec4(T const & x, T const & y, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v)
+ {
+ *this = tvec4<T>(x, y, v());
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & w)
+ {
+ *this = tvec4<T>(x, v(), w);
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> const & v, T const & z, T const & w)
+ {
+ *this = tvec4<T>(v(), z, w);
+ }
+
+ template <int E0, int E1, int E2>
+ GLM_FUNC_DECL tvec4(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v, T const & w)
+ {
+ *this = tvec4<T>(v(), w);
+ }
+
+ template <int E0, int E1, int E2>
+ GLM_FUNC_DECL tvec4(T const & x, glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> const & v)
+ {
+ *this = tvec4<T>(x, v());
+ }
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec4(tref4<T> const & r);
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(tref2<A> const & v, B const & s1, C const & s2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(A const & s1, tref2<B> const & v, C const & s2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tref2<C> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tref3<A> const & v, B const & s);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(A const & s, tref3<B> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tref2<B> const & v2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tref2<B> const & v2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tref2<A> const & v1, tvec2<B> const & v2);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec4<T> & operator= (tvec4<T> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator= (tvec4<U> const & v);
+
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator+=(tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator-=(tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator*=(tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator/=(tvec4<U> const & v);
+ GLM_FUNC_DECL tvec4<T> & operator++();
+ GLM_FUNC_DECL tvec4<T> & operator--();
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator%= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator%= (tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator&= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator&= (tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator|= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator|= (tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator^= (U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator^= (tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator<<=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator<<=(tvec4<U> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator>>=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T> & operator>>=(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL value_type swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
+ GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
+ GLM_FUNC_DECL tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
+ };
+
+ template <typename T>
+ struct tref4
+ {
+ GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w);
+ GLM_FUNC_DECL tref4(tref4<T> const & r);
+ GLM_FUNC_DECL explicit tref4(tvec4<T> const & v);
+
+ GLM_FUNC_DECL tref4<T> & operator= (tref4<T> const & r);
+ GLM_FUNC_DECL tref4<T> & operator= (tvec4<T> const & v);
+
+ GLM_FUNC_DECL tvec4<T> operator() ();
+
+ T & x;
+ T & y;
+ T & z;
+ T & w;
+ };
+
+ GLM_DETAIL_IS_VECTOR(tvec4);
+}//namespace detail
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 components vector of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<highp_float> highp_vec4;
+
+ /// 4 components vector of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<mediump_float> mediump_vec4;
+
+ /// 4 components vector of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<lowp_float> lowp_vec4;
+
+ /// 4 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<highp_int> highp_ivec4;
+
+ /// 4 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<mediump_int> mediump_ivec4;
+
+ /// 4 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<lowp_int> lowp_ivec4;
+
+ /// 4 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<highp_uint> highp_uvec4;
+
+ /// 4 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<mediump_uint> mediump_uvec4;
+
+ /// 4 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::tvec4<lowp_uint> lowp_uvec4;
+
+ /// @}
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec4.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
+
+#endif//glm_core_type_gentype4
diff --git a/include/gal/opengl/glm/core/type_vec4.inl b/include/gal/opengl/glm/core/type_vec4.inl
new file mode 100644
index 0000000..7f98c1b
--- /dev/null
+++ b/include/gal/opengl/glm/core/type_vec4.inl
@@ -0,0 +1,1348 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/core/type_tvec4.inl
+/// @date 2008-08-23 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec4<T>::size_type tvec4<T>::length() const
+ {
+ return 4;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec4<T>::value_type &
+ tvec4<T>::operator[]
+ (
+ size_type i
+ )
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec4<T>::value_type const &
+ tvec4<T>::operator[]
+ (
+ size_type i
+ ) const
+ {
+ assert(i < this->length());
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4() :
+ x(value_type(0)),
+ y(value_type(0)),
+ z(value_type(0)),
+ w(value_type(0))
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ ctor
+ )
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ type const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z),
+ w(v.w)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ value_type const & s
+ ) :
+ x(s),
+ y(s),
+ z(s),
+ w(s)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ value_type const & s1,
+ value_type const & s2,
+ value_type const & s3,
+ value_type const & s4
+ ) :
+ x(s1),
+ y(s2),
+ z(s3),
+ w(s4)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tref4<T> const & r
+ ) :
+ x(r.x),
+ y(r.y),
+ z(r.z),
+ w(r.w)
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tref2<A> const & v,
+ B const & s1,
+ C const & s2
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(s1)),
+ w(value_type(s2))
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & s1,
+ tref2<B> const & v,
+ C const & s2
+ ) :
+ x(value_type(s1)),
+ y(value_type(v.x)),
+ z(value_type(v.y)),
+ w(value_type(s2))
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & s1,
+ B const & s2,
+ tref2<C> const & v
+ ) :
+ x(value_type(s1)),
+ y(value_type(s2)),
+ z(value_type(v.x)),
+ w(value_type(v.y))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tref3<A> const & v,
+ B const & s
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(v.z)),
+ w(value_type(s))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & s,
+ tref3<B> const & v
+ ) :
+ x(value_type(s)),
+ y(value_type(v.x)),
+ z(value_type(v.y)),
+ w(value_type(v.z))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tref2<A> const & v1,
+ tref2<B> const & v2
+ ) :
+ x(value_type(v1.x)),
+ y(value_type(v1.y)),
+ z(value_type(v2.x)),
+ w(value_type(v2.y))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tvec2<A> const & v1,
+ tref2<B> const & v2
+ ) :
+ x(value_type(v1.x)),
+ y(value_type(v1.y)),
+ z(value_type(v2.x)),
+ w(value_type(v2.y))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tref2<A> const & v1,
+ tvec2<B> const & v2
+ ) :
+ x(value_type(v1.x)),
+ y(value_type(v1.y)),
+ z(value_type(v2.x)),
+ w(value_type(v2.y))
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ U const & x
+ ) :
+ x(value_type(x)),
+ y(value_type(x)),
+ z(value_type(x)),
+ w(value_type(x))
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & x,
+ B const & y,
+ C const & z,
+ D const & w
+ ) :
+ x(value_type(x)),
+ y(value_type(y)),
+ z(value_type(z)),
+ w(value_type(w))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tvec2<A> const & v,
+ B const & s1,
+ C const & s2
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(s1)),
+ w(value_type(s2))
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & s1,
+ tvec2<B> const & v,
+ C const & s2
+ ) :
+ x(value_type(s1)),
+ y(value_type(v.x)),
+ z(value_type(v.y)),
+ w(value_type(s2))
+ {}
+
+ template <typename T>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & s1,
+ B const & s2,
+ tvec2<C> const & v
+ ) :
+ x(value_type(s1)),
+ y(value_type(s2)),
+ z(value_type(v.x)),
+ w(value_type(v.y))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tvec3<A> const & v,
+ B const & s
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(v.z)),
+ w(value_type(s))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ A const & s,
+ tvec3<B> const & v
+ ) :
+ x(value_type(s)),
+ y(value_type(v.x)),
+ z(value_type(v.y)),
+ w(value_type(v.z))
+ {}
+
+ template <typename T>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tvec2<A> const & v1,
+ tvec2<B> const & v2
+ ) :
+ x(value_type(v1.x)),
+ y(value_type(v1.y)),
+ z(value_type(v2.x)),
+ w(value_type(v2.y))
+ {}
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T>::tvec4
+ (
+ tvec4<U> const & v
+ ) :
+ x(value_type(v.x)),
+ y(value_type(v.y)),
+ z(value_type(v.z)),
+ w(value_type(v.w))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator=
+ (
+ tvec4<T> const & v
+ )
+ {
+ this->x = v.x;
+ this->y = v.y;
+ this->z = v.z;
+ this->w = v.w;
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x = T(v.x);
+ this->y = T(v.y);
+ this->z = T(v.z);
+ this->w = T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator+= (U s)
+ {
+ this->x += T(s);
+ this->y += T(s);
+ this->z += T(s);
+ this->w += T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator+=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x += T(v.x);
+ this->y += T(v.y);
+ this->z += T(v.z);
+ this->w += T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator-= (U s)
+ {
+ this->x -= T(s);
+ this->y -= T(s);
+ this->z -= T(s);
+ this->w -= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator-=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x -= T(v.x);
+ this->y -= T(v.y);
+ this->z -= T(v.z);
+ this->w -= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator*= (U s)
+ {
+ this->x *= T(s);
+ this->y *= T(s);
+ this->z *= T(s);
+ this->w *= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator*=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x *= T(v.x);
+ this->y *= T(v.y);
+ this->z *= T(v.z);
+ this->w *= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator/= (U s)
+ {
+ this->x /= T(s);
+ this->y /= T(s);
+ this->z /= T(s);
+ this->w /= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator/=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x /= T(v.x);
+ this->y /= T(v.y);
+ this->z /= T(v.z);
+ this->w /= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ ++this->z;
+ ++this->w;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator--()
+ {
+ --this->x;
+ --this->y;
+ --this->z;
+ --this->w;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Unary bit operators
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator%= (U s)
+ {
+ this->x %= T(s);
+ this->y %= T(s);
+ this->z %= T(s);
+ this->w %= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator%=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x %= T(v.x);
+ this->y %= T(v.y);
+ this->z %= T(v.z);
+ this->w %= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator&= (U s)
+ {
+ this->x &= T(s);
+ this->y &= T(s);
+ this->z &= T(s);
+ this->w &= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator&=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x &= T(v.x);
+ this->y &= T(v.y);
+ this->z &= T(v.z);
+ this->w &= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator|= (U s)
+ {
+ this->x |= T(s);
+ this->y |= T(s);
+ this->z |= T(s);
+ this->w |= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator|=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x |= T(v.x);
+ this->y |= T(v.y);
+ this->z |= T(v.z);
+ this->w |= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator^= (U s)
+ {
+ this->x ^= T(s);
+ this->y ^= T(s);
+ this->z ^= T(s);
+ this->w ^= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator^=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x ^= T(v.x);
+ this->y ^= T(v.y);
+ this->z ^= T(v.z);
+ this->w ^= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator<<= (U s)
+ {
+ this->x <<= T(s);
+ this->y <<= T(s);
+ this->z <<= T(s);
+ this->w <<= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator<<=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x <<= T(v.x);
+ this->y <<= T(v.y);
+ this->z <<= T(v.z);
+ this->w <<= T(v.w);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator>>= (U s)
+ {
+ this->x >>= T(s);
+ this->y >>= T(s);
+ this->z >>= T(s);
+ this->w >>= T(s);
+ return *this;
+ }
+
+ template <typename T>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T> & tvec4<T>::operator>>=
+ (
+ tvec4<U> const & v
+ )
+ {
+ this->x >>= T(v.x);
+ this->y >>= T(v.y);
+ this->z >>= T(v.z);
+ this->w >>= T(v.w);
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tvec4<T>::value_type
+ tvec4<T>::swizzle
+ (
+ comp x
+ ) const
+ {
+ return (*this)[x];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T> tvec4<T>::swizzle
+ (
+ comp x,
+ comp y
+ ) const
+ {
+ return tvec2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T> tvec4<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z
+ ) const
+ {
+ return tvec3<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> tvec4<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z,
+ comp w
+ ) const
+ {
+ return tvec4<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref2<T> tvec4<T>::swizzle
+ (
+ comp x,
+ comp y
+ )
+ {
+ return tref2<T>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref3<T> tvec4<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z
+ )
+ {
+ return tref3<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tref4<T> tvec4<T>::swizzle
+ (
+ comp x,
+ comp y,
+ comp z,
+ comp w
+ )
+ {
+ return tref4<T>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ //////////////////////////////////////
+ // Binary arithmetic operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator+
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x + s,
+ v.y + s,
+ v.z + s,
+ v.w + s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator+
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s + v.x,
+ s + v.y,
+ s + v.z,
+ s + v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator+
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x + v2.x,
+ v1.y + v2.y,
+ v1.z + v2.z,
+ v1.w + v2.w);
+ }
+
+ //operator-
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator-
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x - s,
+ v.y - s,
+ v.z - s,
+ v.w - s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator-
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s - v.x,
+ s - v.y,
+ s - v.z,
+ s - v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator-
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x - v2.x,
+ v1.y - v2.y,
+ v1.z - v2.z,
+ v1.w - v2.w);
+ }
+
+ //operator*
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator*
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x * s,
+ v.y * s,
+ v.z * s,
+ v.w * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator*
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s * v.x,
+ s * v.y,
+ s * v.z,
+ s * v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator*
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x * v2.x,
+ v1.y * v2.y,
+ v1.z * v2.z,
+ v1.w * v2.w);
+ }
+
+ //operator/
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator/
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x / s,
+ v.y / s,
+ v.z / s,
+ v.w / s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator/
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s / v.x,
+ s / v.y,
+ s / v.z,
+ s / v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator/
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x / v2.x,
+ v1.y / v2.y,
+ v1.z / v2.z,
+ v1.w / v2.w);
+ }
+
+ // Unary constant operators
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator-
+ (
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ -v.x,
+ -v.y,
+ -v.z,
+ -v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator++
+ (
+ tvec4<T> const & v,
+ int
+ )
+ {
+ typename tvec4<T>::value_type One(1);
+ return tvec4<T>(
+ v.x + One,
+ v.y + One,
+ v.z + One,
+ v.w + One);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator--
+ (
+ tvec4<T> const & v,
+ int
+ )
+ {
+ typename tvec4<T>::value_type One(1);
+ return tvec4<T>(
+ v.x - One,
+ v.y - One,
+ v.z - One,
+ v.w - One);
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z) && (v1.w == v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z) || (v1.w != v2.w);
+ }
+
+ //////////////////////////////////////
+ // Binary bit operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator%
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x % s,
+ v.y % s,
+ v.z % s,
+ v.w % s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator%
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s % v.x,
+ s % v.y,
+ s % v.z,
+ s % v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator%
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x % v2.x,
+ v1.y % v2.y,
+ v1.z % v2.z,
+ v1.w % v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator&
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x & s,
+ v.y & s,
+ v.z & s,
+ v.w & s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator&
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s & v.x,
+ s & v.y,
+ s & v.z,
+ s & v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator&
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x & v2.x,
+ v1.y & v2.y,
+ v1.z & v2.z,
+ v1.w & v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator|
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x | s,
+ v.y | s,
+ v.z | s,
+ v.w | s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator|
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s | v.x,
+ s | v.y,
+ s | v.z,
+ s | v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator|
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x | v2.x,
+ v1.y | v2.y,
+ v1.z | v2.z,
+ v1.w | v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator^
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x ^ s,
+ v.y ^ s,
+ v.z ^ s,
+ v.w ^ s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator^
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s ^ v.x,
+ s ^ v.y,
+ s ^ v.z,
+ s ^ v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator^
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x ^ v2.x,
+ v1.y ^ v2.y,
+ v1.z ^ v2.z,
+ v1.w ^ v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator<<
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x << s,
+ v.y << s,
+ v.z << s,
+ v.w << s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator<<
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s << v.x,
+ s << v.y,
+ s << v.z,
+ s << v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator<<
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x << v2.x,
+ v1.y << v2.y,
+ v1.z << v2.z,
+ v1.w << v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator>>
+ (
+ tvec4<T> const & v,
+ typename tvec4<T>::value_type const & s
+ )
+ {
+ return tvec4<T>(
+ v.x >> s,
+ v.y >> s,
+ v.z >> s,
+ v.w >> s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator>>
+ (
+ typename tvec4<T>::value_type const & s,
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ s >> v.x,
+ s >> v.y,
+ s >> v.z,
+ s >> v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator>>
+ (
+ tvec4<T> const & v1,
+ tvec4<T> const & v2
+ )
+ {
+ return tvec4<T>(
+ v1.x >> v2.x,
+ v1.y >> v2.y,
+ v1.z >> v2.z,
+ v1.w >> v2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> operator~
+ (
+ tvec4<T> const & v
+ )
+ {
+ return tvec4<T>(
+ ~v.x,
+ ~v.y,
+ ~v.z,
+ ~v.w);
+ }
+
+ //////////////////////////////////////
+ // tref definition
+
+ template <typename T>
+ tref4<T>::tref4
+ (
+ T & x,
+ T & y,
+ T & z,
+ T & w
+ ) :
+ x(x),
+ y(y),
+ z(z),
+ w(w)
+ {}
+
+ template <typename T>
+ tref4<T>::tref4
+ (
+ tref4<T> const & r
+ ) :
+ x(r.x),
+ y(r.y),
+ z(r.z),
+ w(r.w)
+ {}
+
+ template <typename T>
+ tref4<T>::tref4
+ (
+ tvec4<T> const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z),
+ w(v.w)
+ {}
+
+ template <typename T>
+ tref4<T>& tref4<T>::operator=
+ (
+ tref4<T> const & r
+ )
+ {
+ x = r.x;
+ y = r.y;
+ z = r.z;
+ w = r.w;
+ return *this;
+ }
+
+ template <typename T>
+ tref4<T>& tref4<T>::operator=
+ (
+ tvec4<T> const & v
+ )
+ {
+ x = v.x;
+ y = v.y;
+ z = v.z;
+ w = v.w;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T> tref4<T>::operator() ()
+ {
+ return tvec4<T>(this->x, this->y, this->z, this->w);
+ }
+
+}//namespace detail
+}//namespace glm
diff --git a/include/gal/opengl/glm/ext.hpp b/include/gal/opengl/glm/ext.hpp
new file mode 100644
index 0000000..9ef0c92
--- /dev/null
+++ b/include/gal/opengl/glm/ext.hpp
@@ -0,0 +1,145 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @file glm/glm.hpp
+/// @date 2009-05-01 / 2011-05-16
+/// @author Christophe Riccio
+///
+/// @ref core (Dependence)
+///
+/// @defgroup gtc GTC Extensions (Stable)
+///
+/// @brief Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program.
+///
+/// GTC extensions aim to be stable.
+///
+/// Even if it's highly unrecommended, it's possible to include all the extensions at once by
+/// including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file.
+///
+/// @defgroup gtx GTX Extensions (Experimental)
+///
+/// @brief Functions and types that the GLSL specification doesn't define, but
+/// useful to have for a C++ program.
+///
+/// Experimental extensions are useful functions and types, but the development of
+/// their API and functionality is not necessarily stable. They can change
+/// substantially between versions. Backwards compatibility is not much of an issue
+/// for them.
+///
+/// Even if it's highly unrecommended, it's possible to include all the extensions
+/// at once by including <glm/ext.hpp>. Otherwise, each extension needs to be
+/// included a specific file.
+///
+/// @defgroup virtrev VIRTREV Extensions
+///
+/// @brief Extensions develop and maintain by Mathieu [matrem] Roumillac
+/// (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660).
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_ext
+#define glm_ext
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED))
+# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
+# pragma message("GLM: All extensions included (not recommanded)")
+#endif//GLM_MESSAGES
+
+#include "./gtc/constants.hpp"
+#include "./gtc/epsilon.hpp"
+#include "./gtc/half_float.hpp"
+#include "./gtc/matrix_access.hpp"
+#include "./gtc/matrix_integer.hpp"
+#include "./gtc/matrix_inverse.hpp"
+#include "./gtc/matrix_transform.hpp"
+#include "./gtc/noise.hpp"
+#include "./gtc/quaternion.hpp"
+#include "./gtc/random.hpp"
+#include "./gtc/reciprocal.hpp"
+#include "./gtc/swizzle.hpp"
+#include "./gtc/type_precision.hpp"
+#include "./gtc/type_ptr.hpp"
+#include "./gtc/ulp.hpp"
+
+#include "./gtx/associated_min_max.hpp"
+#include "./gtx/bit.hpp"
+#include "./gtx/closest_point.hpp"
+#include "./gtx/color_cast.hpp"
+#include "./gtx/color_space.hpp"
+#include "./gtx/color_space_YCoCg.hpp"
+#include "./gtx/compatibility.hpp"
+#include "./gtx/component_wise.hpp"
+#include "./gtx/euler_angles.hpp"
+#include "./gtx/extend.hpp"
+#include "./gtx/extented_min_max.hpp"
+#include "./gtx/fast_exponential.hpp"
+#include "./gtx/fast_square_root.hpp"
+#include "./gtx/fast_trigonometry.hpp"
+#include "./gtx/gradient_paint.hpp"
+#include "./gtx/handed_coordinate_space.hpp"
+#include "./gtx/inertia.hpp"
+#include "./gtx/int_10_10_10_2.hpp"
+#include "./gtx/integer.hpp"
+#include "./gtx/intersect.hpp"
+#include "./gtx/log_base.hpp"
+#include "./gtx/matrix_cross_product.hpp"
+#include "./gtx/matrix_interpolation.hpp"
+#include "./gtx/matrix_major_storage.hpp"
+#include "./gtx/matrix_operation.hpp"
+#include "./gtx/matrix_query.hpp"
+#include "./gtx/mixed_product.hpp"
+#include "./gtx/multiple.hpp"
+#include "./gtx/norm.hpp"
+#include "./gtx/normal.hpp"
+#include "./gtx/normalize_dot.hpp"
+#include "./gtx/number_precision.hpp"
+#include "./gtx/ocl_type.hpp"
+#include "./gtx/optimum_pow.hpp"
+#include "./gtx/orthonormalize.hpp"
+#include "./gtx/perpendicular.hpp"
+#include "./gtx/polar_coordinates.hpp"
+#include "./gtx/projection.hpp"
+#include "./gtx/quaternion.hpp"
+#include "./gtx/raw_data.hpp"
+#include "./gtx/rotate_vector.hpp"
+#include "./gtx/spline.hpp"
+#include "./gtx/std_based_type.hpp"
+#include "./gtx/string_cast.hpp"
+#include "./gtx/transform.hpp"
+#include "./gtx/transform2.hpp"
+#include "./gtx/vec1.hpp"
+#include "./gtx/vector_access.hpp"
+#include "./gtx/vector_angle.hpp"
+#include "./gtx/vector_query.hpp"
+#include "./gtx/verbose_operator.hpp"
+#include "./gtx/wrap.hpp"
+
+#if(GLM_ARCH & GLM_ARCH_SSE2)
+# include "./gtx/simd_vec4.hpp"
+# include "./gtx/simd_mat4.hpp"
+#endif
+
+#include "./virtrev/xstream.hpp"
+
+//const float goldenRatio = 1.618033988749894848f;
+//const float pi = 3.141592653589793238f;
+
+#endif //glm_ext
diff --git a/include/gal/opengl/glm/glm.hpp b/include/gal/opengl/glm/glm.hpp
new file mode 100644
index 0000000..5474fe3
--- /dev/null
+++ b/include/gal/opengl/glm/glm.hpp
@@ -0,0 +1,129 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref core
+/// @file glm/glm.hpp
+/// @date 2005-01-14 / 2011-10-24
+/// @author Christophe Riccio
+///
+/// @defgroup core GLM Core
+///
+/// @brief The core of GLM, which implements exactly and only the GLSL specification to the degree possible.
+///
+/// The GLM core consists of @ref core_types "C++ types that mirror GLSL types" and
+/// C++ functions that mirror the GLSL functions. It also includes
+/// @ref core_precision "a set of precision-based types" that can be used in the appropriate
+/// functions. The C++ types are all based on a basic set of @ref core_template "template types".
+///
+/// The best documentation for GLM Core is the current GLSL specification,
+/// <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf">version 4.2
+/// (pdf file)</a>.
+/// There are a few @ref pg_differences "differences" between GLM core and GLSL.
+///
+/// GLM core functionnalities require <glm/glm.hpp> to be included to be used.
+///
+/// @defgroup core_types Types
+///
+/// @brief The standard types defined by the specification.
+///
+/// These types are all typedefs of more generalized, template types. To see the definiton
+/// of these template types, go to @ref core_template.
+///
+/// @ingroup core
+///
+/// @defgroup core_precision Precision types
+///
+/// @brief Non-GLSL types that are used to define precision-based types.
+///
+/// The GLSL language allows the user to define the precision of a particular variable.
+/// In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility
+/// with OpenGL ES's precision qualifiers, where they @em do have an effect.
+///
+/// C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing:
+/// a number of typedefs of the @ref core_template that use a particular precision.
+///
+/// None of these types make any guarantees about the actual precision used.
+///
+/// @ingroup core
+///
+/// @defgroup core_template Template types
+///
+/// @brief The generic template types used as the basis for the core types.
+///
+/// These types are all templates used to define the actual @ref core_types.
+/// These templetes are implementation details of GLM types and should not be used explicitly.
+///
+/// @ingroup core
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "core/_fixes.hpp"
+
+#ifndef glm_glm
+#define glm_glm
+
+#include <cmath>
+#include <climits>
+#include <cfloat>
+#include <limits>
+#include <cstdio>
+//#include <type_traits>
+#include "core/setup.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED))
+# define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
+# pragma message("GLM: Core library included")
+#endif//GLM_MESSAGE
+
+#include "./core/_detail.hpp"
+#include "./core/_vectorize.hpp"
+#include "./core/type.hpp"
+
+#include "./core/func_trigonometric.hpp"
+#include "./core/func_exponential.hpp"
+#include "./core/func_common.hpp"
+#include "./core/func_packing.hpp"
+#include "./core/func_geometric.hpp"
+#include "./core/func_matrix.hpp"
+#include "./core/func_vector_relational.hpp"
+#include "./core/func_integer.hpp"
+#include "./core/func_noise.hpp"
+#include "./core/_swizzle.hpp"
+
+////////////////////
+// check type sizes
+#ifndef GLM_STATIC_ASSERT_NULL
+ GLM_STATIC_ASSERT(sizeof(glm::detail::int8) == 1, "int8 size isn't 1 byte on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::int16) == 2, "int16 size isn't 2 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::int32) == 4, "int32 size isn't 4 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::int64) == 8, "int64 size isn't 8 bytes on this platform");
+
+ GLM_STATIC_ASSERT(sizeof(glm::detail::uint8) == 1, "uint8 size isn't 1 byte on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
+
+ GLM_STATIC_ASSERT(sizeof(glm::detail::float16) == 2, "float16 size isn't 2 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::float32) == 4, "float32 size isn't 4 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::detail::float64) == 8, "float64 size isn't 8 bytes on this platform");
+#endif//GLM_STATIC_ASSERT_NULL
+
+#endif//glm_glm
diff --git a/include/gal/opengl/glm/gtc/constants.hpp b/include/gal/opengl/glm/gtc/constants.hpp
new file mode 100644
index 0000000..4887629
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/constants.hpp
@@ -0,0 +1,186 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_constants
+/// @file glm/gtc/constants.hpp
+/// @date 2011-09-30 / 2012-01-25
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtc_constants GLM_GTC_constants
+/// @ingroup gtc
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtc/constants.hpp> need to be included to use these features.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_constants
+#define GLM_GTC_constants GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_constants extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_constants
+ /// @{
+
+ /// Return the epsilon constant for floating point types.
+ /// @todo Implement epsilon for half-precision floating point type.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType epsilon();
+
+ /// Return 0.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType zero();
+
+ /// Return 1.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType one();
+
+ /// Return the pi constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType pi();
+
+ /// Return square root of pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_pi();
+
+ /// Return pi / 2.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType half_pi();
+
+ /// Return pi / 4.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType quarter_pi();
+
+ /// Return 1 / pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType one_over_pi();
+
+ /// Return 2 / pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType two_over_pi();
+
+ /// Return 2 / sqrt(pi).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType two_over_root_pi();
+
+ /// Return 1 / sqrt(2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType one_over_root_two();
+
+ /// Return sqrt(pi / 2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_half_pi();
+
+ /// Return sqrt(2 * pi).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_two_pi();
+
+ /// Return sqrt(ln(4)).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_ln_four();
+
+ /// Return e constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType e();
+
+ /// Return Euler's constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType euler();
+
+ /// Return sqrt(2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_two();
+
+ /// Return sqrt(3).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_three();
+
+ /// Return sqrt(5).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType root_five();
+
+ /// Return ln(2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType ln_two();
+
+ /// Return ln(10).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType ln_ten();
+
+ /// Return ln(ln(2)).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType ln_ln_two();
+
+ /// Return 1 / 3.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType third();
+
+ /// Return 2 / 3.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType two_thirds();
+
+ /// Return the golden ratio constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL genType golden_ratio();
+
+ /// @}
+} //namespace glm
+
+#include "constants.inl"
+
+#endif//GLM_GTC_constants
diff --git a/include/gal/opengl/glm/gtc/constants.inl b/include/gal/opengl/glm/gtc/constants.inl
new file mode 100644
index 0000000..e9bde75
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/constants.inl
@@ -0,0 +1,186 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_constants
+/// @file glm/gtx/constants.inl
+/// @date 2011-10-14 / 2012-01-25
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType epsilon()
+ {
+ return std::numeric_limits<genType>::epsilon();
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER half epsilon()
+ {
+ return half(1.19209290e-007);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType zero()
+ {
+ return genType(0);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType one()
+ {
+ return genType(1);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pi()
+ {
+ return genType(3.14159265358979323846264338327950288);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_pi()
+ {
+ return genType(1.772453850905516027);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType half_pi()
+ {
+ return genType(1.57079632679489661923132169163975144);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType quarter_pi()
+ {
+ return genType(0.785398163397448309615660845819875721);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType one_over_pi()
+ {
+ return genType(0.318309886183790671537767526745028724);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType two_over_pi()
+ {
+ return genType(0.636619772367581343075535053490057448);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType two_over_root_pi()
+ {
+ return genType(1.12837916709551257389615890312154517);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType one_over_root_two()
+ {
+ return genType(0.707106781186547524400844362104849039);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_half_pi()
+ {
+ return genType(1.253314137315500251);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_two_pi()
+ {
+ return genType(2.506628274631000502);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_ln_four()
+ {
+ return genType(1.17741002251547469);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType e()
+ {
+ return genType(2.71828182845904523536);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType euler()
+ {
+ return genType(0.577215664901532860606);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_two()
+ {
+ return genType(1.41421356237309504880168872420969808);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_three()
+ {
+ return genType(1.73205080756887729352744634150587236);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType root_five()
+ {
+ return genType(2.23606797749978969640917366873127623);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ln_two()
+ {
+ return genType(0.693147180559945309417232121458176568);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ln_ten()
+ {
+ return genType(2.30258509299404568401799145468436421);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ln_ln_two()
+ {
+ return genType(-0.3665129205816643);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType third()
+ {
+ return genType(0.3333333333333333333333333333333333333333);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType two_thirds()
+ {
+ return genType(0.666666666666666666666666666666666666667);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType golden_ratio()
+ {
+ return genType(1.61803398874989484820458683436563811);
+ }
+} //namespace glm
diff --git a/include/gal/opengl/glm/gtc/epsilon.hpp b/include/gal/opengl/glm/gtc/epsilon.hpp
new file mode 100644
index 0000000..b8729f3
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/epsilon.hpp
@@ -0,0 +1,94 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_epsilon
+/// @file glm/gtc/epsilon.hpp
+/// @date 2012-04-07 / 2012-04-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_epsilon GLM_GTC_epsilon
+/// @ingroup gtc
+///
+/// @brief Comparison functions for a user defined epsilon values.
+///
+/// <glm/gtc/epsilon.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_epsilon
+#define GLM_GTC_epsilon GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_epsilon extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_epsilon
+ /// @{
+
+ /// Returns the component-wise compare of |x - y| < epsilon.
+ /// @see gtc_epsilon
+ template <typename genType>
+ typename genType::boolType epsilonEqual(
+ genType const & x,
+ genType const & y,
+ typename genType::value_type const & epsilon);
+
+ /// Returns the component-wise compare of |x - y| < epsilon.
+ /// @see gtc_epsilon
+ template <typename genType>
+ typename genType::boolType epsilonEqual(
+ genType const & x,
+ genType const & y,
+ genType const & epsilon);
+
+ /// Returns the component-wise compare of |x - y| < epsilon.
+ /// @see gtc_epsilon
+ template <typename genType>
+ typename genType::boolType epsilonNotEqual(
+ genType const & x,
+ genType const & y,
+ typename genType::value_type const & epsilon);
+
+ /// Returns the component-wise compare of |x - y| >= epsilon.
+ /// @see gtc_epsilon
+ template <typename genType>
+ typename genType::boolType epsilonNotEqual(
+ genType const & x,
+ genType const & y,
+ genType const & epsilon);
+
+ /// @}
+}//namespace glm
+
+#include "epsilon.inl"
+
+#endif//GLM_GTC_epsilon
diff --git a/include/gal/opengl/glm/gtc/epsilon.inl b/include/gal/opengl/glm/gtc/epsilon.inl
new file mode 100644
index 0000000..ecfc4aa
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/epsilon.inl
@@ -0,0 +1,286 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_epsilon
+/// @file glm/gtc/epsilon.inl
+/// @date 2012-04-07 / 2012-04-07
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ GLM_FUNC_QUALIFIER bool epsilonEqual
+ (
+ glm::half const & x,
+ glm::half const & y,
+ glm::half const & epsilon
+ )
+ {
+ return abs(x - y) < epsilon;
+ }
+
+ GLM_FUNC_QUALIFIER bool epsilonEqual
+ (
+ float const & x,
+ float const & y,
+ float const & epsilon
+ )
+ {
+ return abs(x - y) < epsilon;
+ }
+
+ GLM_FUNC_QUALIFIER bool epsilonEqual
+ (
+ double const & x,
+ double const & y,
+ double const & epsilon
+ )
+ {
+ return abs(x - y) < epsilon;
+ }
+
+ GLM_FUNC_QUALIFIER bool epsilonNotEqual
+ (
+ glm::half const & x,
+ glm::half const & y,
+ glm::half const & epsilon
+ )
+ {
+ return abs(x - y) >= epsilon;
+ }
+
+ GLM_FUNC_QUALIFIER bool epsilonNotEqual
+ (
+ float const & x,
+ float const & y,
+ float const & epsilon
+ )
+ {
+ return abs(x - y) >= epsilon;
+ }
+
+ GLM_FUNC_QUALIFIER bool epsilonNotEqual
+ (
+ double const & x,
+ double const & y,
+ double const & epsilon
+ )
+ {
+ return abs(x - y) >= epsilon;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> epsilonEqual
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y,
+ valType const & epsilon)
+ {
+ return detail::tvec2<bool>(
+ abs(x.x - y.x) < epsilon,
+ abs(x.y - y.y) < epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> epsilonEqual
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y,
+ detail::tvec2<valType> const & epsilon
+ )
+ {
+ return detail::tvec2<bool>(
+ abs(x.x - y.x) < epsilon.x,
+ abs(x.y - y.y) < epsilon.y);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> epsilonEqual
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ valType const & epsilon)
+ {
+ return detail::tvec3<bool>(
+ abs(x.x - y.x) < epsilon,
+ abs(x.y - y.y) < epsilon,
+ abs(x.z - y.z) < epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> epsilonEqual
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ detail::tvec3<valType> const & epsilon
+ )
+ {
+ return detail::tvec3<bool>(
+ abs(x.x - y.x) < epsilon.x,
+ abs(x.y - y.y) < epsilon.y,
+ abs(x.z - y.z) < epsilon.z);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> epsilonEqual
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y,
+ valType const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(x.x - y.x) < epsilon,
+ abs(x.y - y.y) < epsilon,
+ abs(x.z - y.z) < epsilon,
+ abs(x.w - y.w) < epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> epsilonEqual
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y,
+ detail::tvec4<valType> const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(x.x - y.x) < epsilon.x,
+ abs(x.y - y.y) < epsilon.y,
+ abs(x.z - y.z) < epsilon.z,
+ abs(x.w - y.w) < epsilon.w);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> epsilonNotEqual
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y,
+ valType const & epsilon
+ )
+ {
+ return detail::tvec2<bool>(
+ abs(x.x - y.x) >= epsilon,
+ abs(x.y - y.y) >= epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> epsilonNotEqual
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y,
+ detail::tvec2<valType> const & epsilon
+ )
+ {
+ return detail::tvec2<bool>(
+ abs(x.x - y.x) >= epsilon.x,
+ abs(x.y - y.y) >= epsilon.y);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> epsilonNotEqual
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ valType const & epsilon
+ )
+ {
+ return detail::tvec3<bool>(
+ abs(x.x - y.x) >= epsilon,
+ abs(x.y - y.y) >= epsilon,
+ abs(x.z - y.z) >= epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> epsilonNotEqual
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ detail::tvec3<valType> const & epsilon
+ )
+ {
+ return detail::tvec3<bool>(
+ abs(x.x - y.x) >= epsilon.x,
+ abs(x.y - y.y) >= epsilon.y,
+ abs(x.z - y.z) >= epsilon.z);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> epsilonNotEqual
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y,
+ valType const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(x.x - y.x) >= epsilon,
+ abs(x.y - y.y) >= epsilon,
+ abs(x.z - y.z) >= epsilon,
+ abs(x.w - y.w) >= epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> epsilonNotEqual
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y,
+ detail::tvec4<valType> const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(x.x - y.x) >= epsilon.x,
+ abs(x.y - y.y) >= epsilon.y,
+ abs(x.z - y.z) >= epsilon.z,
+ abs(x.w - y.w) >= epsilon.w);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> epsilonEqual
+ (
+ detail::tquat<valType> const & x,
+ detail::tquat<valType> const & y,
+ valType const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(x.x - y.x) < epsilon,
+ abs(x.y - y.y) < epsilon,
+ abs(x.z - y.z) < epsilon,
+ abs(x.w - y.w) < epsilon);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> epsilonNotEqual
+ (
+ detail::tquat<valType> const & x,
+ detail::tquat<valType> const & y,
+ valType const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(x.x - y.x) >= epsilon,
+ abs(x.y - y.y) >= epsilon,
+ abs(x.z - y.z) >= epsilon,
+ abs(x.w - y.w) >= epsilon);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/half_float.hpp b/include/gal/opengl/glm/gtc/half_float.hpp
new file mode 100644
index 0000000..fa0fe1a
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/half_float.hpp
@@ -0,0 +1,454 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_half_float
+/// @file glm/gtc/half_float.hpp
+/// @date 2009-04-29 / 2012-11-06
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_half_float GLM_GTC_half_float
+/// @ingroup gtc
+///
+/// Defines the half-precision floating-point type, along with various typedefs for vectors and matrices.
+/// <glm/gtc/half_float.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_half_float
+#define GLM_GTC_half_float GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_half_float extension included")
+#endif
+
+namespace glm{
+namespace detail
+{
+#if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+ template <>
+ struct tvec2<half>
+ {
+ enum ctor{null};
+ typedef half value_type;
+ typedef std::size_t size_type;
+
+ GLM_FUNC_DECL size_type length() const;
+ static GLM_FUNC_DECL size_type value_size();
+
+ typedef tvec2<half> type;
+ typedef tvec2<bool> bool_type;
+
+ //////////////////////////////////////
+ // Data
+
+ half x, y;
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL half & operator[](size_type i);
+ GLM_FUNC_DECL half const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec2();
+ GLM_FUNC_DECL tvec2(tvec2<half> const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec2(ctor);
+ GLM_FUNC_DECL explicit tvec2(
+ half const & s);
+ GLM_FUNC_DECL explicit tvec2(
+ half const & s1,
+ half const & s2);
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec2(tref2<half> const & r);
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(U const & x);
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, typename V>
+ GLM_FUNC_DECL explicit tvec2(U const & x, V const & y);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(tvec2<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(tvec3<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec2(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec2<half>& operator= (tvec2<half> const & v);
+
+ GLM_FUNC_DECL tvec2<half>& operator+=(half const & s);
+ GLM_FUNC_DECL tvec2<half>& operator+=(tvec2<half> const & v);
+ GLM_FUNC_DECL tvec2<half>& operator-=(half const & s);
+ GLM_FUNC_DECL tvec2<half>& operator-=(tvec2<half> const & v);
+ GLM_FUNC_DECL tvec2<half>& operator*=(half const & s);
+ GLM_FUNC_DECL tvec2<half>& operator*=(tvec2<half> const & v);
+ GLM_FUNC_DECL tvec2<half>& operator/=(half const & s);
+ GLM_FUNC_DECL tvec2<half>& operator/=(tvec2<half> const & v);
+ GLM_FUNC_DECL tvec2<half>& operator++();
+ GLM_FUNC_DECL tvec2<half>& operator--();
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL half swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<half> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<half> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref2<half> swizzle(comp X, comp Y);
+ };
+
+ template <>
+ struct tvec3<half>
+ {
+ enum ctor{null};
+ typedef half value_type;
+ typedef std::size_t size_type;
+ GLM_FUNC_DECL size_type length() const;
+ static GLM_FUNC_DECL size_type value_size();
+
+ typedef tvec3<half> type;
+ typedef tvec3<bool> bool_type;
+
+ //////////////////////////////////////
+ // Data
+
+ half x, y, z;
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL half & operator[](size_type i);
+ GLM_FUNC_DECL half const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec3();
+ GLM_FUNC_DECL tvec3(tvec3<half> const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec3(ctor);
+ GLM_FUNC_DECL explicit tvec3(
+ half const & s);
+ GLM_FUNC_DECL explicit tvec3(
+ half const & s1,
+ half const & s2,
+ half const & s3);
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec3(tref3<half> const & r);
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec3(U const & x);
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, typename V, typename W>
+ GLM_FUNC_DECL explicit tvec3(U const & x, V const & y, W const & z);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec3(tvec2<A> const & v, B const & s);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec3(A const & s, tvec2<B> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec3(tvec3<U> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec3(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec3<half>& operator= (tvec3<half> const & v);
+
+ GLM_FUNC_DECL tvec3<half>& operator+=(half const & s);
+ GLM_FUNC_DECL tvec3<half>& operator+=(tvec3<half> const & v);
+ GLM_FUNC_DECL tvec3<half>& operator-=(half const & s);
+ GLM_FUNC_DECL tvec3<half>& operator-=(tvec3<half> const & v);
+ GLM_FUNC_DECL tvec3<half>& operator*=(half const & s);
+ GLM_FUNC_DECL tvec3<half>& operator*=(tvec3<half> const & v);
+ GLM_FUNC_DECL tvec3<half>& operator/=(half const & s);
+ GLM_FUNC_DECL tvec3<half>& operator/=(tvec3<half> const & v);
+ GLM_FUNC_DECL tvec3<half>& operator++();
+ GLM_FUNC_DECL tvec3<half>& operator--();
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL half swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<half> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<half> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref3<half> swizzle(comp X, comp Y, comp Z);
+ };
+
+ template <>
+ struct tvec4<half>
+ {
+ enum ctor{null};
+ typedef half value_type;
+ typedef std::size_t size_type;
+ GLM_FUNC_DECL size_type length() const;
+ static GLM_FUNC_DECL size_type value_size();
+
+ typedef tvec4<half> type;
+ typedef tvec4<bool> bool_type;
+
+ //////////////////////////////////////
+ // Data
+
+ half x, y, z, w;
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_DECL half & operator[](size_type i);
+ GLM_FUNC_DECL half const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_DECL tvec4();
+ GLM_FUNC_DECL tvec4(tvec4<half> const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_DECL explicit tvec4(ctor);
+ GLM_FUNC_DECL explicit tvec4(
+ half const & s);
+ GLM_FUNC_DECL explicit tvec4(
+ half const & s0,
+ half const & s1,
+ half const & s2,
+ half const & s3);
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_DECL tvec4(tref4<half> const & r);
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec4(U const & x);
+ //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_DECL explicit tvec4(A const & x, B const & y, C const & z, D const & w);
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tvec3<A> const & v, B const & s);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(A const & s, tvec3<B> const & v);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
+ //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U>
+ GLM_FUNC_DECL explicit tvec4(tvec4<U> const & v);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_DECL tvec4<half>& operator= (tvec4<half> const & v);
+
+ GLM_FUNC_DECL tvec4<half>& operator+=(half const & s);
+ GLM_FUNC_DECL tvec4<half>& operator+=(tvec4<half> const & v);
+ GLM_FUNC_DECL tvec4<half>& operator-=(half const & s);
+ GLM_FUNC_DECL tvec4<half>& operator-=(tvec4<half> const & v);
+ GLM_FUNC_DECL tvec4<half>& operator*=(half const & s);
+ GLM_FUNC_DECL tvec4<half>& operator*=(tvec4<half> const & v);
+ GLM_FUNC_DECL tvec4<half>& operator/=(half const & s);
+ GLM_FUNC_DECL tvec4<half>& operator/=(tvec4<half> const & v);
+ GLM_FUNC_DECL tvec4<half>& operator++();
+ GLM_FUNC_DECL tvec4<half>& operator--();
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_DECL half swizzle(comp X) const;
+ GLM_FUNC_DECL tvec2<half> swizzle(comp X, comp Y) const;
+ GLM_FUNC_DECL tvec3<half> swizzle(comp X, comp Y, comp Z) const;
+ GLM_FUNC_DECL tvec4<half> swizzle(comp X, comp Y, comp Z, comp W) const;
+ GLM_FUNC_DECL tref4<half> swizzle(comp X, comp Y, comp Z, comp W);
+ };
+#endif//(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+}
+//namespace detail
+
+ /// @addtogroup gtc_half_float
+ /// @{
+
+ /// Type for half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::half half;
+
+ /// Vector of 2 half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tvec2<detail::half> hvec2;
+
+ /// Vector of 3 half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tvec3<detail::half> hvec3;
+
+ /// Vector of 4 half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tvec4<detail::half> hvec4;
+
+ /// 2 * 2 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat2x2<detail::half> hmat2;
+
+ /// 3 * 3 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat3x3<detail::half> hmat3;
+
+ /// 4 * 4 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat4x4<detail::half> hmat4;
+
+ /// 2 * 2 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat2x2<detail::half> hmat2x2;
+
+ /// 2 * 3 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat2x3<detail::half> hmat2x3;
+
+ /// 2 * 4 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat2x4<detail::half> hmat2x4;
+
+ /// 3 * 2 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat3x2<detail::half> hmat3x2;
+
+ /// 3 * 3 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat3x3<detail::half> hmat3x3;
+
+ /// 3 * 4 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat3x4<detail::half> hmat3x4;
+
+ /// 4 * 2 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat4x2<detail::half> hmat4x2;
+
+ /// 4 * 3 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat4x3<detail::half> hmat4x3;
+
+ /// 4 * 4 matrix of half-precision floating-point numbers.
+ /// @see gtc_half_float
+ typedef detail::tmat4x4<detail::half> hmat4x4;
+
+ /// Returns the absolute value of a half-precision floating-point value
+ /// @see gtc_half_float
+ GLM_FUNC_DECL half abs(half const & x);
+
+ /// Returns the absolute value of a half-precision floating-point two dimensional vector
+ /// @see gtc_half_float
+ GLM_FUNC_DECL hvec2 abs(hvec2 const & x);
+
+ /// Returns the absolute value of a half-precision floating-point three dimensional vector
+ /// @see gtc_half_float
+ GLM_FUNC_DECL hvec3 abs(hvec3 const & x);
+
+ /// Returns the absolute value of a half-precision floating-point four dimensional vector
+ /// @see gtc_half_float
+ GLM_FUNC_DECL hvec4 abs(hvec4 const & x);
+
+ /// Selects which vector each returned component comes
+ /// from. For a component of <a> that is false, the
+ /// corresponding component of x is returned. For a
+ /// component of a that is true, the corresponding
+ /// component of y is returned. Components of x and y that
+ /// are not selected are allowed to be invalid floating point
+ /// values and will have no effect on the results. Thus, this
+ /// provides different functionality than
+ /// genType mix(genType x, genType y, genType(a))
+ /// where a is a Boolean vector.
+ ///
+ /// @see gtc_half_float
+ GLM_FUNC_DECL half mix(half const & x, half const & y, bool const & a);
+
+ /// @}
+}// namespace glm
+
+#include "half_float.inl"
+
+#endif//GLM_GTC_half_float
diff --git a/include/gal/opengl/glm/gtc/half_float.inl b/include/gal/opengl/glm/gtc/half_float.inl
new file mode 100644
index 0000000..57dae8e
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/half_float.inl
@@ -0,0 +1,1050 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_half_float
+/// @file glm/gtc/half_float.inl
+/// @date 2009-04-29 / 2012-11-06
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail
+{
+#if(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+
+ //////////////////////////////////////
+ // hvec2
+
+ GLM_FUNC_QUALIFIER tvec2<half>::size_type tvec2<half>::length() const
+ {
+ return 2;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half>::size_type tvec2<half>::value_size()
+ {
+ return 2;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_QUALIFIER half & tvec2<half>::operator[](tvec2<half>::size_type i)
+ {
+ assert(/*i >= tvec2<half>::size_type(0) && */i < tvec2<half>::value_size());
+ return (&x)[i];
+ }
+
+ GLM_FUNC_QUALIFIER half const & tvec2<half>::operator[](tvec2<half>::size_type i) const
+ {
+ assert(/*i >= tvec2<half>::size_type(0) && */i < tvec2<half>::value_size());
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2() :
+ x(half(0.f)),
+ y(half(0.f))
+ {}
+
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ tvec2<half> const & v
+ ) :
+ x(v.x),
+ y(v.y)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ half const & s
+ ) :
+ x(s),
+ y(s)
+ {}
+
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ half const & s1,
+ half const & s2
+ ) :
+ x(s1),
+ y(s2)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ tref2<half> const & r
+ ) :
+ x(r.x),
+ y(r.y)
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ U const & x
+ ) :
+ x(half(x)),
+ y(half(x))
+ {}
+
+ template <typename U, typename V>
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ U const & x,
+ V const & y
+ ) :
+ x(half(x)),
+ y(half(y))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ tvec2<U> const & v
+ ) :
+ x(half(v.x)),
+ y(half(v.y))
+ {}
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ tvec3<U> const & v
+ ) :
+ x(half(v.x)),
+ y(half(v.y))
+ {}
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<half>::tvec2
+ (
+ tvec4<U> const & v
+ ) :
+ x(half(v.x)),
+ y(half(v.y))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator=
+ (
+ tvec2<half> const & v
+ )
+ {
+ this->x = v.x;
+ this->y = v.y;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator+=
+ (
+ half const & s
+ )
+ {
+ this->x += s;
+ this->y += s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator+=
+ (
+ tvec2<half> const & v
+ )
+ {
+ this->x += v.x;
+ this->y += v.y;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator-=
+ (
+ half const & s
+ )
+ {
+ this->x -= s;
+ this->y -= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator-=
+ (
+ tvec2<half> const & v
+ )
+ {
+ this->x -= v.x;
+ this->y -= v.y;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half>& tvec2<half>::operator*=
+ (
+ half const & s
+ )
+ {
+ this->x *= s;
+ this->y *= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator*=
+ (
+ tvec2<half> const & v
+ )
+ {
+ this->x *= v.x;
+ this->y *= v.y;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator/=
+ (
+ half const & s
+ )
+ {
+ this->x /= s;
+ this->y /= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator/=
+ (
+ tvec2<half> const & v
+ )
+ {
+ this->x /= v.x;
+ this->y /= v.y;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> & tvec2<half>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half>& tvec2<half>::operator--()
+ {
+ --this->x;
+ --this->y;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_QUALIFIER half tvec2<half>::swizzle(comp x) const
+ {
+ return (*this)[x];
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> tvec2<half>::swizzle(comp x, comp y) const
+ {
+ return tvec2<half>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> tvec2<half>::swizzle(comp x, comp y, comp z) const
+ {
+ return tvec3<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half> tvec2<half>::swizzle(comp x, comp y, comp z, comp w) const
+ {
+ return tvec4<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ GLM_FUNC_QUALIFIER tref2<half> tvec2<half>::swizzle(comp x, comp y)
+ {
+ return tref2<half>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ //////////////////////////////////////
+ // hvec3
+
+ GLM_FUNC_QUALIFIER tvec3<half>::size_type tvec3<half>::length() const
+ {
+ return 3;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half>::size_type tvec3<half>::value_size()
+ {
+ return 3;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_QUALIFIER half & tvec3<half>::operator[]
+ (
+ tvec3<half>::size_type i
+ )
+ {
+ assert(/*i >= tvec3<half>::size_type(0) &&*/ i < tvec3<half>::value_size());
+
+ return (&x)[i];
+ }
+
+ GLM_FUNC_QUALIFIER half const & tvec3<half>::operator[]
+ (
+ tvec3<half>::size_type i
+ ) const
+ {
+ assert(/*i >= tvec3<half>::size_type(0) &&*/ i < tvec3<half>::value_size());
+
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3() :
+ x(half(0)),
+ y(half(0)),
+ z(half(0))
+ {}
+
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ tvec3<half> const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ half const & s
+ ) :
+ x(s),
+ y(s),
+ z(s)
+ {}
+
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ half const & s0,
+ half const & s1,
+ half const & s2
+ ) :
+ x(s0),
+ y(s1),
+ z(s2)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ tref3<half> const & r
+ ) :
+ x(r.x),
+ y(r.y),
+ z(r.z)
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ U const & x
+ ) :
+ x(half(x)),
+ y(half(x)),
+ z(half(x))
+ {}
+
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ A const & x,
+ B const & y,
+ C const & z
+ ) :
+ x(half(x)),
+ y(half(y)),
+ z(half(z))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ tvec2<A> const & v,
+ B const & s
+ ) :
+ x(half(v.x)),
+ y(half(v.y)),
+ z(half(s))
+ {}
+
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ A const & s,
+ tvec2<B> const & v
+ ) :
+ x(half(s)),
+ y(half(v.x)),
+ z(half(v.y))
+ {}
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ tvec3<U> const & v
+ ) :
+ x(half(v.x)),
+ y(half(v.y)),
+ z(half(v.z))
+ {}
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<half>::tvec3
+ (
+ tvec4<U> const & v
+ ) :
+ x(half(v.x)),
+ y(half(v.y)),
+ z(half(v.z))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator=
+ (
+ tvec3<half> const & v
+ )
+ {
+ this->x = v.x;
+ this->y = v.y;
+ this->z = v.z;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator+=
+ (
+ half const & s
+ )
+ {
+ this->x += s;
+ this->y += s;
+ this->z += s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator+=
+ (
+ tvec3<half> const & v
+ )
+ {
+ this->x += v.x;
+ this->y += v.y;
+ this->z += v.z;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator-=
+ (
+ half const & s
+ )
+ {
+ this->x -= s;
+ this->y -= s;
+ this->z -= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator-=
+ (
+ tvec3<half> const & v
+ )
+ {
+ this->x -= v.x;
+ this->y -= v.y;
+ this->z -= v.z;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator*=
+ (
+ half const & s
+ )
+ {
+ this->x *= s;
+ this->y *= s;
+ this->z *= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator*=
+ (
+ tvec3<half> const & v
+ )
+ {
+ this->x *= v.x;
+ this->y *= v.y;
+ this->z *= v.z;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator/=
+ (
+ half const & s
+ )
+ {
+ this->x /= s;
+ this->y /= s;
+ this->z /= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator/=
+ (
+ tvec3<half> const & v
+ )
+ {
+ this->x /= v.x;
+ this->y /= v.y;
+ this->z /= v.z;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ ++this->z;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> & tvec3<half>::operator--()
+ {
+ --this->x;
+ --this->y;
+ --this->z;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_QUALIFIER half tvec3<half>::swizzle(comp x) const
+ {
+ return (*this)[x];
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> tvec3<half>::swizzle(comp x, comp y) const
+ {
+ return tvec2<half>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> tvec3<half>::swizzle(comp x, comp y, comp z) const
+ {
+ return tvec3<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half> tvec3<half>::swizzle(comp x, comp y, comp z, comp w) const
+ {
+ return tvec4<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ GLM_FUNC_QUALIFIER tref3<half> tvec3<half>::swizzle(comp x, comp y, comp z)
+ {
+ return tref3<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ //////////////////////////////////////
+ // hvec4
+
+ GLM_FUNC_QUALIFIER tvec4<half>::size_type tvec4<half>::length() const
+ {
+ return 4;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>::size_type tvec4<half>::value_size()
+ {
+ return 4;
+ }
+
+ //////////////////////////////////////
+ // Accesses
+
+ GLM_FUNC_QUALIFIER half & tvec4<half>::operator[]
+ (
+ tvec4<half>::size_type i
+ )
+ {
+ assert(/*i >= tvec4<half>::size_type(0) && */i < tvec4<half>::value_size());
+
+ return (&x)[i];
+ }
+
+ GLM_FUNC_QUALIFIER half const & tvec4<half>::operator[]
+ (
+ tvec4<half>::size_type i
+ ) const
+ {
+ assert(/*i >= tvec4<half>::size_type(0) && */i < tvec4<half>::value_size());
+
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4() :
+ x(half(0)),
+ y(half(0)),
+ z(half(0)),
+ w(half(0))
+ {}
+
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ tvec4<half> const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z),
+ w(v.w)
+ {}
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ half const & s
+ ) :
+ x(s),
+ y(s),
+ z(s),
+ w(s)
+ {}
+
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ half const & s1,
+ half const & s2,
+ half const & s3,
+ half const & s4
+ ) :
+ x(s1),
+ y(s2),
+ z(s3),
+ w(s4)
+ {}
+
+ //////////////////////////////////////
+ // Swizzle constructors
+
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ tref4<half> const & r
+ ) :
+ x(r.x),
+ y(r.y),
+ z(r.z),
+ w(r.w)
+ {}
+
+ //////////////////////////////////////
+ // Convertion scalar constructors
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ U const & x
+ ) :
+ x(half(x)),
+ y(half(x)),
+ z(half(x)),
+ w(half(x))
+ {}
+
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ A const & x,
+ B const & y,
+ C const & z,
+ D const & w
+ ) :
+ x(half(x)),
+ y(half(y)),
+ z(half(z)),
+ w(half(w))
+ {}
+
+ //////////////////////////////////////
+ // Convertion vector constructors
+
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ tvec2<A> const & v,
+ B const & s1,
+ C const & s2
+ ) :
+ x(half(v.x)),
+ y(half(v.y)),
+ z(half(s1)),
+ w(half(s2))
+ {}
+
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ A const & s1,
+ tvec2<B> const & v,
+ C const & s2
+ ) :
+ x(half(s1)),
+ y(half(v.x)),
+ z(half(v.y)),
+ w(half(s2))
+ {}
+
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ A const & s1,
+ B const & s2,
+ tvec2<C> const & v
+ ) :
+ x(half(s1)),
+ y(half(s2)),
+ z(half(v.x)),
+ w(half(v.y))
+ {}
+
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ tvec3<A> const & v,
+ B const & s
+ ) :
+ x(half(v.x)),
+ y(half(v.y)),
+ z(half(v.z)),
+ w(half(s))
+ {}
+
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ A const & s,
+ tvec3<B> const & v
+ ) :
+ x(half(s)),
+ y(half(v.x)),
+ z(half(v.y)),
+ w(half(v.z))
+ {}
+
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ tvec2<A> const & v1,
+ tvec2<B> const & v2
+ ) :
+ x(half(v1.x)),
+ y(half(v1.y)),
+ z(half(v2.x)),
+ w(half(v2.y))
+ {}
+
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<half>::tvec4
+ (
+ tvec4<U> const & v
+ ) :
+ x(half(v.x)),
+ y(half(v.y)),
+ z(half(v.z)),
+ w(half(v.w))
+ {}
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator=
+ (
+ tvec4<half> const & v
+ )
+ {
+ this->x = v.x;
+ this->y = v.y;
+ this->z = v.z;
+ this->w = v.w;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator+=
+ (
+ half const & s
+ )
+ {
+ this->x += s;
+ this->y += s;
+ this->z += s;
+ this->w += s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator+=
+ (
+ tvec4<half> const & v
+ )
+ {
+ this->x += v.x;
+ this->y += v.y;
+ this->z += v.z;
+ this->w += v.w;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator-=
+ (
+ half const & s
+ )
+ {
+ this->x -= s;
+ this->y -= s;
+ this->z -= s;
+ this->w -= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator-=
+ (
+ tvec4<half> const & v
+ )
+ {
+ this->x -= v.x;
+ this->y -= v.y;
+ this->z -= v.z;
+ this->w -= v.w;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator*=
+ (
+ half const & s
+ )
+ {
+ this->x *= s;
+ this->y *= s;
+ this->z *= s;
+ this->w *= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator*=
+ (
+ tvec4<half> const & v
+ )
+ {
+ this->x *= v.x;
+ this->y *= v.y;
+ this->z *= v.z;
+ this->w *= v.w;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator/=
+ (
+ half const & s
+ )
+ {
+ this->x /= s;
+ this->y /= s;
+ this->z /= s;
+ this->w /= s;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator/=
+ (
+ tvec4<half> const & v
+ )
+ {
+ this->x /= v.x;
+ this->y /= v.y;
+ this->z /= v.z;
+ this->w /= v.w;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ ++this->z;
+ ++this->w;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half>& tvec4<half>::operator--()
+ {
+ --this->x;
+ --this->y;
+ --this->z;
+ --this->w;
+ return *this;
+ }
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ GLM_FUNC_QUALIFIER half tvec4<half>::swizzle(comp x) const
+ {
+ return (*this)[x];
+ }
+
+ GLM_FUNC_QUALIFIER tvec2<half> tvec4<half>::swizzle(comp x, comp y) const
+ {
+ return tvec2<half>(
+ (*this)[x],
+ (*this)[y]);
+ }
+
+ GLM_FUNC_QUALIFIER tvec3<half> tvec4<half>::swizzle(comp x, comp y, comp z) const
+ {
+ return tvec3<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z]);
+ }
+
+ GLM_FUNC_QUALIFIER tvec4<half> tvec4<half>::swizzle(comp x, comp y, comp z, comp w) const
+ {
+ return tvec4<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+ GLM_FUNC_QUALIFIER tref4<half> tvec4<half>::swizzle(comp x, comp y, comp z, comp w)
+ {
+ return tref4<half>(
+ (*this)[x],
+ (*this)[y],
+ (*this)[z],
+ (*this)[w]);
+ }
+
+#endif//(GLM_COMPONENT == GLM_COMPONENT_CXX98)
+
+}//namespace detail
+
+ GLM_FUNC_QUALIFIER half abs(half const & x)
+ {
+ return float(x) >= float(0) ? x : -x;
+ }
+
+ GLM_FUNC_QUALIFIER hvec2 abs(hvec2 const & v)
+ {
+ return hvec2(
+ float(v.x) >= float(0) ? v.x : -v.x,
+ float(v.y) >= float(0) ? v.y : -v.y);
+ }
+
+ GLM_FUNC_QUALIFIER hvec3 abs(hvec3 const & v)
+ {
+ return hvec3(
+ float(v.x) >= float(0) ? v.x : -v.x,
+ float(v.y) >= float(0) ? v.y : -v.y,
+ float(v.z) >= float(0) ? v.z : -v.z);
+ }
+
+ GLM_FUNC_QUALIFIER hvec4 abs(hvec4 const & v)
+ {
+ return hvec4(
+ float(v.x) >= float(0) ? v.x : -v.x,
+ float(v.y) >= float(0) ? v.y : -v.y,
+ float(v.z) >= float(0) ? v.z : -v.z,
+ float(v.w) >= float(0) ? v.w : -v.w);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::half mix
+ (
+ glm::half const & x,
+ glm::half const & y,
+ bool const & a
+ )
+ {
+ return a ? y : x;
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/matrix_access.hpp b/include/gal/opengl/glm/gtc/matrix_access.hpp
new file mode 100644
index 0000000..201317e
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_access.hpp
@@ -0,0 +1,87 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_access
+/// @file glm/gtc/matrix_access.hpp
+/// @date 2005-12-27 / 2011-05-16
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_matrix_access GLM_GTC_matrix_access
+/// @ingroup gtc
+///
+/// Defines functions to access rows or columns of a matrix easily.
+/// <glm/gtc/matrix_access.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_matrix_access
+#define GLM_GTC_matrix_access GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_matrix_access extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_access
+ /// @{
+
+ /// Get a specific row of a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ typename genType::row_type row(
+ genType const & m,
+ int index);
+
+ /// Set a specific row to a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ genType row(
+ genType const & m,
+ int index,
+ typename genType::row_type const & x);
+
+ /// Get a specific column of a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ typename genType::col_type column(
+ genType const & m,
+ int index);
+
+ /// Set a specific column to a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ genType column(
+ genType const & m,
+ int index,
+ typename genType::col_type const & x);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_access.inl"
+
+#endif//GLM_GTC_matrix_access
diff --git a/include/gal/opengl/glm/gtc/matrix_access.inl b/include/gal/opengl/glm/gtc/matrix_access.inl
new file mode 100644
index 0000000..a9e48bb
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_access.inl
@@ -0,0 +1,80 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_access
+/// @file glm/gtc/matrix_access.inl
+/// @date 2005-12-27 / 2011-06-05
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType row
+ (
+ genType const & m,
+ int index,
+ typename genType::row_type const & x
+ )
+ {
+ genType Result = m;
+ for(typename genType::size_type i = 0; i < genType::row_size(); ++i)
+ Result[i][index] = x[i];
+ return Result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::row_type row
+ (
+ genType const & m,
+ int index
+ )
+ {
+ typename genType::row_type Result;
+ for(typename genType::size_type i = 0; i < genType::row_size(); ++i)
+ Result[i] = m[i][index];
+ return Result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType column
+ (
+ genType const & m,
+ int index,
+ typename genType::col_type const & x
+ )
+ {
+ genType Result = m;
+ Result[index] = x;
+ return Result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::col_type column
+ (
+ genType const & m,
+ int index
+ )
+ {
+ return m[index];
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/matrix_integer.hpp b/include/gal/opengl/glm/gtc/matrix_integer.hpp
new file mode 100644
index 0000000..caed807
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_integer.hpp
@@ -0,0 +1,506 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_integer
+/// @file glm/gtc/matrix_integer.hpp
+/// @date 2011-01-20 / 2011-06-05
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer
+/// @ingroup gtc
+///
+/// Defines a number of matrices with integer types.
+/// <glm/gtc/matrix_integer.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_matrix_integer
+#define GLM_GTC_matrix_integer GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_matrix_integer extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_integer
+ /// @{
+
+ /// High-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<highp_int> highp_imat2;
+
+ /// High-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<highp_int> highp_imat3;
+
+ /// High-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<highp_int> highp_imat4;
+
+ /// High-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<highp_int> highp_imat2x2;
+
+ /// High-precision signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x3<highp_int> highp_imat2x3;
+
+ /// High-precision signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x4<highp_int> highp_imat2x4;
+
+ /// High-precision signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x2<highp_int> highp_imat3x2;
+
+ /// High-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<highp_int> highp_imat3x3;
+
+ /// High-precision signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x4<highp_int> highp_imat3x4;
+
+ /// High-precision signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x2<highp_int> highp_imat4x2;
+
+ /// High-precision signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x3<highp_int> highp_imat4x3;
+
+ /// High-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<highp_int> highp_imat4x4;
+
+
+ /// Medium-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<mediump_int> mediump_imat2;
+
+ /// Medium-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<mediump_int> mediump_imat3;
+
+ /// Medium-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<mediump_int> mediump_imat4;
+
+
+ /// Medium-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<mediump_int> mediump_imat2x2;
+
+ /// Medium-precision signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x3<mediump_int> mediump_imat2x3;
+
+ /// Medium-precision signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x4<mediump_int> mediump_imat2x4;
+
+ /// Medium-precision signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x2<mediump_int> mediump_imat3x2;
+
+ /// Medium-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<mediump_int> mediump_imat3x3;
+
+ /// Medium-precision signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x4<mediump_int> mediump_imat3x4;
+
+ /// Medium-precision signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x2<mediump_int> mediump_imat4x2;
+
+ /// Medium-precision signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x3<mediump_int> mediump_imat4x3;
+
+ /// Medium-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<mediump_int> mediump_imat4x4;
+
+
+ /// Low-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<lowp_int> lowp_imat2;
+
+ /// Low-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<lowp_int> lowp_imat3;
+
+ /// Low-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<lowp_int> lowp_imat4;
+
+
+ /// Low-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<lowp_int> lowp_imat2x2;
+
+ /// Low-precision signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x3<lowp_int> lowp_imat2x3;
+
+ /// Low-precision signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x4<lowp_int> lowp_imat2x4;
+
+ /// Low-precision signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x2<lowp_int> lowp_imat3x2;
+
+ /// Low-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<lowp_int> lowp_imat3x3;
+
+ /// Low-precision signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x4<lowp_int> lowp_imat3x4;
+
+ /// Low-precision signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x2<lowp_int> lowp_imat4x2;
+
+ /// Low-precision signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x3<lowp_int> lowp_imat4x3;
+
+ /// Low-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<lowp_int> lowp_imat4x4;
+
+
+ /// High-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<highp_uint> highp_umat2;
+
+ /// High-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<highp_uint> highp_umat3;
+
+ /// High-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<highp_uint> highp_umat4;
+
+ /// High-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<highp_uint> highp_umat2x2;
+
+ /// High-precision unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x3<highp_uint> highp_umat2x3;
+
+ /// High-precision unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x4<highp_uint> highp_umat2x4;
+
+ /// High-precision unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x2<highp_uint> highp_umat3x2;
+
+ /// High-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<highp_uint> highp_umat3x3;
+
+ /// High-precision unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x4<highp_uint> highp_umat3x4;
+
+ /// High-precision unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x2<highp_uint> highp_umat4x2;
+
+ /// High-precision unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x3<highp_uint> highp_umat4x3;
+
+ /// High-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<highp_uint> highp_umat4x4;
+
+
+ /// Medium-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<mediump_uint> mediump_umat2;
+
+ /// Medium-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<mediump_uint> mediump_umat3;
+
+ /// Medium-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<mediump_uint> mediump_umat4;
+
+
+ /// Medium-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<mediump_uint> mediump_umat2x2;
+
+ /// Medium-precision unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x3<mediump_uint> mediump_umat2x3;
+
+ /// Medium-precision unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x4<mediump_uint> mediump_umat2x4;
+
+ /// Medium-precision unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x2<mediump_uint> mediump_umat3x2;
+
+ /// Medium-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<mediump_uint> mediump_umat3x3;
+
+ /// Medium-precision unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x4<mediump_uint> mediump_umat3x4;
+
+ /// Medium-precision unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x2<mediump_uint> mediump_umat4x2;
+
+ /// Medium-precision unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x3<mediump_uint> mediump_umat4x3;
+
+ /// Medium-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<mediump_uint> mediump_umat4x4;
+
+
+ /// Low-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<lowp_uint> lowp_umat2;
+
+ /// Low-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<lowp_uint> lowp_umat3;
+
+ /// Low-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<lowp_uint> lowp_umat4;
+
+
+ /// Low-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x2<lowp_uint> lowp_umat2x2;
+
+ /// Low-precision unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x3<lowp_uint> lowp_umat2x3;
+
+ /// Low-precision unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat2x4<lowp_uint> lowp_umat2x4;
+
+ /// Low-precision unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x2<lowp_uint> lowp_umat3x2;
+
+ /// Low-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x3<lowp_uint> lowp_umat3x3;
+
+ /// Low-precision unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat3x4<lowp_uint> lowp_umat3x4;
+
+ /// Low-precision unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x2<lowp_uint> lowp_umat4x2;
+
+ /// Low-precision unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x3<lowp_uint> lowp_umat4x3;
+
+ /// Low-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef detail::tmat4x4<lowp_uint> lowp_umat4x4;
+
+#if(defined(GLM_PRECISION_HIGHP_INT))
+ typedef highp_imat2 imat2;
+ typedef highp_imat3 imat3;
+ typedef highp_imat4 imat4;
+ typedef highp_imat2x2 imat2x2;
+ typedef highp_imat2x3 imat2x3;
+ typedef highp_imat2x4 imat2x4;
+ typedef highp_imat3x2 imat3x2;
+ typedef highp_imat3x3 imat3x3;
+ typedef highp_imat3x4 imat3x4;
+ typedef highp_imat4x2 imat4x2;
+ typedef highp_imat4x3 imat4x3;
+ typedef highp_imat4x4 imat4x4;
+#elif(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_imat2 imat2;
+ typedef lowp_imat3 imat3;
+ typedef lowp_imat4 imat4;
+ typedef lowp_imat2x2 imat2x2;
+ typedef lowp_imat2x3 imat2x3;
+ typedef lowp_imat2x4 imat2x4;
+ typedef lowp_imat3x2 imat3x2;
+ typedef lowp_imat3x3 imat3x3;
+ typedef lowp_imat3x4 imat3x4;
+ typedef lowp_imat4x2 imat4x2;
+ typedef lowp_imat4x3 imat4x3;
+ typedef lowp_imat4x4 imat4x4;
+#else //if(defined(GLM_PRECISION_MEDIUMP_INT))
+
+ /// Signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2 imat2;
+
+ /// Signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3 imat3;
+
+ /// Signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4 imat4;
+
+ /// Signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2x2 imat2x2;
+
+ /// Signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2x3 imat2x3;
+
+ /// Signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2x4 imat2x4;
+
+ /// Signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3x2 imat3x2;
+
+ /// Signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3x3 imat3x3;
+
+ /// Signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3x4 imat3x4;
+
+ /// Signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4x2 imat4x2;
+
+ /// Signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4x3 imat4x3;
+
+ /// Signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4x4 imat4x4;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_UINT))
+ typedef highp_umat2 umat2;
+ typedef highp_umat3 umat3;
+ typedef highp_umat4 umat4;
+ typedef highp_umat2x2 umat2x2;
+ typedef highp_umat2x3 umat2x3;
+ typedef highp_umat2x4 umat2x4;
+ typedef highp_umat3x2 umat3x2;
+ typedef highp_umat3x3 umat3x3;
+ typedef highp_umat3x4 umat3x4;
+ typedef highp_umat4x2 umat4x2;
+ typedef highp_umat4x3 umat4x3;
+ typedef highp_umat4x4 umat4x4;
+#elif(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_umat2 umat2;
+ typedef lowp_umat3 umat3;
+ typedef lowp_umat4 umat4;
+ typedef lowp_umat2x2 umat2x2;
+ typedef lowp_umat2x3 umat2x3;
+ typedef lowp_umat2x4 umat2x4;
+ typedef lowp_umat3x2 umat3x2;
+ typedef lowp_umat3x3 umat3x3;
+ typedef lowp_umat3x4 umat3x4;
+ typedef lowp_umat4x2 umat4x2;
+ typedef lowp_umat4x3 umat4x3;
+ typedef lowp_umat4x4 umat4x4;
+#else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
+
+ /// Unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2 umat2;
+
+ /// Unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3 umat3;
+
+ /// Unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4 umat4;
+
+ /// Unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2x2 umat2x2;
+
+ /// Unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2x3 umat2x3;
+
+ /// Unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2x4 umat2x4;
+
+ /// Unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3x2 umat3x2;
+
+ /// Unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3x3 umat3x3;
+
+ /// Unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3x4 umat3x4;
+
+ /// Unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4x2 umat4x2;
+
+ /// Unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4x3 umat4x3;
+
+ /// Unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4x4 umat4x4;
+#endif//GLM_PRECISION
+
+ /// @}
+}//namespace glm
+
+#endif//GLM_GTC_matrix_integer
diff --git a/include/gal/opengl/glm/gtc/matrix_inverse.hpp b/include/gal/opengl/glm/gtc/matrix_inverse.hpp
new file mode 100644
index 0000000..6ccfe35
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_inverse.hpp
@@ -0,0 +1,74 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_inverse
+/// @file glm/gtc/matrix_inverse.hpp
+/// @date 2005-12-21 / 2011-06-05
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse
+/// @ingroup gtc
+///
+/// Defines additional matrix inverting functions.
+/// <glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_matrix_inverse
+#define GLM_GTC_matrix_inverse GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_matrix_inverse extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_inverse
+ /// @{
+
+ /// Fast matrix inverse for affine matrix.
+ ///
+ /// @param m Input matrix to invert.
+ /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
+ /// @see gtc_matrix_inverse
+ template <typename genType>
+ genType affineInverse(genType const & m);
+
+ /// Compute the inverse transpose of a matrix.
+ ///
+ /// @param m Input matrix to invert transpose.
+ /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
+ /// @see gtc_matrix_inverse
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::value_type inverseTranspose(
+ genType const & m);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_inverse.inl"
+
+#endif//GLM_GTC_matrix_inverse
diff --git a/include/gal/opengl/glm/gtc/matrix_inverse.inl b/include/gal/opengl/glm/gtc/matrix_inverse.inl
new file mode 100644
index 0000000..470dca8
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_inverse.inl
@@ -0,0 +1,159 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_inverse
+/// @file glm/gtc/matrix_inverse.inl
+/// @date 2005-12-21 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> affineInverse
+ (
+ detail::tmat3x3<T> const & m
+ )
+ {
+ detail::tmat3x3<T> Result(m);
+ Result[2] = detail::tvec3<T>(0, 0, 1);
+ Result = transpose(Result);
+ detail::tvec3<T> Translation = Result * detail::tvec3<T>(-detail::tvec2<T>(m[2]), m[2][2]);
+ Result[2] = Translation;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> affineInverse
+ (
+ detail::tmat4x4<T> const & m
+ )
+ {
+ detail::tmat4x4<T> Result(m);
+ Result[3] = detail::tvec4<T>(0, 0, 0, 1);
+ Result = transpose(Result);
+ detail::tvec4<T> Translation = Result * detail::tvec4<T>(-detail::tvec3<T>(m[3]), m[3][3]);
+ Result[3] = Translation;
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<valType> inverseTranspose
+ (
+ detail::tmat2x2<valType> const & m
+ )
+ {
+ valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];
+
+ detail::tmat2x2<valType> Inverse(
+ + m[1][1] / Determinant,
+ - m[0][1] / Determinant,
+ - m[1][0] / Determinant,
+ + m[0][0] / Determinant);
+
+ return Inverse;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<valType> inverseTranspose
+ (
+ detail::tmat3x3<valType> const & m
+ )
+ {
+ valType Determinant =
+ + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
+ - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
+ + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
+
+ detail::tmat3x3<valType> Inverse;
+ Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);
+ Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);
+ Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
+ Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);
+ Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);
+ Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);
+ Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
+ Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);
+ Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);
+ Inverse /= Determinant;
+
+ return Inverse;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> inverseTranspose
+ (
+ detail::tmat4x4<valType> const & m
+ )
+ {
+ valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ valType SubFactor11 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+ valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+ valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+ valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+ valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+ valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ detail::tmat4x4<valType> Inverse;
+ Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02);
+ Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04);
+ Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05);
+ Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05);
+
+ Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02);
+ Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04);
+ Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05);
+ Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05);
+
+ Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08);
+ Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10);
+ Inverse[2][2] = + (m[0][0] * SubFactor11 - m[0][1] * SubFactor09 + m[0][3] * SubFactor12);
+ Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor12);
+
+ Inverse[3][0] = - (m[0][1] * SubFactor13 - m[0][2] * SubFactor14 + m[0][3] * SubFactor15);
+ Inverse[3][1] = + (m[0][0] * SubFactor13 - m[0][2] * SubFactor16 + m[0][3] * SubFactor17);
+ Inverse[3][2] = - (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][3] * SubFactor18);
+ Inverse[3][3] = + (m[0][0] * SubFactor15 - m[0][1] * SubFactor17 + m[0][2] * SubFactor18);
+
+ valType Determinant =
+ + m[0][0] * Inverse[0][0]
+ + m[0][1] * Inverse[0][1]
+ + m[0][2] * Inverse[0][2]
+ + m[0][3] * Inverse[0][3];
+
+ Inverse /= Determinant;
+
+ return Inverse;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/matrix_transform.hpp b/include/gal/opengl/glm/gtc/matrix_transform.hpp
new file mode 100644
index 0000000..020c6dd
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_transform.hpp
@@ -0,0 +1,291 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_transform
+/// @file glm/gtc/matrix_transform.hpp
+/// @date 2009-04-29 / 2011-05-16
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_transform
+/// @see gtx_transform2
+///
+/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform
+/// @ingroup gtc
+///
+/// @brief Defines functions that generate common transformation matrices.
+///
+/// The matrices generated by this extension use standard OpenGL fixed-function
+/// conventions. For example, the lookAt function generates a transform from world
+/// space into the specific eye space that the projective matrix functions
+/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility
+/// specifications defines the particular layout of this eye space.
+///
+/// <glm/gtc/matrix_transform.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_matrix_transform
+#define GLM_GTC_matrix_transform GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_matrix_transform extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_transform
+ /// @{
+
+ /// Builds a translation 4 * 4 matrix created from a vector of 3 components.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param v Coordinates of a translation vector.
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @code
+ /// #include <glm/glm.hpp>
+ /// #include <glm/gtc/matrix_transform.hpp>
+ /// ...
+ /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
+ /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
+ /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
+ /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
+ /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
+ /// @endcode
+ /// @see gtc_matrix_transform
+ /// @see gtx_transform
+ /// @see - translate(T x, T y, T z)
+ /// @see - translate(detail::tmat4x4<T> const & m, T x, T y, T z)
+ /// @see - translate(detail::tvec3<T> const & v)
+ template <typename T>
+ detail::tmat4x4<T> translate(
+ detail::tmat4x4<T> const & m,
+ detail::tvec3<T> const & v);
+
+ /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
+ ///
+ /// @param m Input matrix multiplied by this rotation matrix.
+ /// @param angle Rotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param axis Rotation axis, recommanded to be normalized.
+ /// @tparam T Value type used to build the matrix. Supported: half, float or double.
+ /// @see gtc_matrix_transform
+ /// @see gtx_transform
+ /// @see - rotate(T angle, T x, T y, T z)
+ /// @see - rotate(detail::tmat4x4<T> const & m, T angle, T x, T y, T z)
+ /// @see - rotate(T angle, detail::tvec3<T> const & v)
+ template <typename T>
+ detail::tmat4x4<T> rotate(
+ detail::tmat4x4<T> const & m,
+ T const & angle,
+ detail::tvec3<T> const & axis);
+
+ /// Builds a scale 4 * 4 matrix created from 3 scalars.
+ ///
+ /// @param m Input matrix multiplied by this scale matrix.
+ /// @param v Ratio of scaling for each axis.
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see gtx_transform
+ /// @see - scale(T x, T y, T z) scale(T const & x, T const & y, T const & z)
+ /// @see - scale(detail::tmat4x4<T> const & m, T x, T y, T z)
+ /// @see - scale(detail::tvec3<T> const & v)
+ template <typename T>
+ detail::tmat4x4<T> scale(
+ detail::tmat4x4<T> const & m,
+ detail::tvec3<T> const & v);
+
+ /// Creates a matrix for an orthographic parallel viewing volume.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param zNear
+ /// @param zFar
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
+ template <typename T>
+ detail::tmat4x4<T> ortho(
+ T const & left,
+ T const & right,
+ T const & bottom,
+ T const & top,
+ T const & zNear,
+ T const & zFar);
+
+ /// Creates a matrix for projecting two-dimensional coordinates onto the screen.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
+ template <typename T>
+ detail::tmat4x4<T> ortho(
+ T const & left,
+ T const & right,
+ T const & bottom,
+ T const & top);
+
+ /// Creates a frustum matrix.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param near
+ /// @param far
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ detail::tmat4x4<T> frustum(
+ T const & left,
+ T const & right,
+ T const & bottom,
+ T const & top,
+ T const & near,
+ T const & far);
+
+ /// Creates a matrix for a symetric perspective-view frustum.
+ ///
+ /// @param fovy Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param aspect
+ /// @param near
+ /// @param far
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ detail::tmat4x4<T> perspective(
+ T const & fovy,
+ T const & aspect,
+ T const & near,
+ T const & far);
+
+ /// Builds a perspective projection matrix based on a field of view.
+ ///
+ /// @param fov Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param width
+ /// @param height
+ /// @param near
+ /// @param far
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename valType>
+ detail::tmat4x4<valType> perspectiveFov(
+ valType const & fov,
+ valType const & width,
+ valType const & height,
+ valType const & near,
+ valType const & far);
+
+ /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite.
+ ///
+ /// @param fovy Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param aspect
+ /// @param near
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ detail::tmat4x4<T> infinitePerspective(
+ T fovy, T aspect, T near);
+
+ /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.
+ ///
+ /// @param fovy Expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param aspect
+ /// @param near
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ detail::tmat4x4<T> tweakedInfinitePerspective(
+ T fovy, T aspect, T near);
+
+ /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
+ ///
+ /// @param obj
+ /// @param model
+ /// @param proj
+ /// @param viewport
+ /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double.
+ /// @tparam U Currently supported: Floating-point types and integer types.
+ /// @see gtc_matrix_transform
+ template <typename T, typename U>
+ detail::tvec3<T> project(
+ detail::tvec3<T> const & obj,
+ detail::tmat4x4<T> const & model,
+ detail::tmat4x4<T> const & proj,
+ detail::tvec4<U> const & viewport);
+
+ /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
+ ///
+ /// @param win
+ /// @param model
+ /// @param proj
+ /// @param viewport
+ /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double.
+ /// @tparam U Currently supported: Floating-point types and integer types.
+ /// @see gtc_matrix_transform
+ template <typename T, typename U>
+ detail::tvec3<T> unProject(
+ detail::tvec3<T> const & win,
+ detail::tmat4x4<T> const & model,
+ detail::tmat4x4<T> const & proj,
+ detail::tvec4<U> const & viewport);
+
+ /// Define a picking region
+ ///
+ /// @param center
+ /// @param delta
+ /// @param viewport
+ /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double.
+ /// @tparam U Currently supported: Floating-point types and integer types.
+ /// @see gtc_matrix_transform
+ template <typename T, typename U>
+ detail::tmat4x4<T> pickMatrix(
+ detail::tvec2<T> const & center,
+ detail::tvec2<T> const & delta,
+ detail::tvec4<U> const & viewport);
+
+ /// Build a look at view matrix.
+ ///
+ /// @param eye Position of the camera
+ /// @param center Position where the camera is looking at
+ /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)
+ /// @see gtc_matrix_transform
+ /// @see - frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
+ template <typename T>
+ detail::tmat4x4<T> lookAt(
+ detail::tvec3<T> const & eye,
+ detail::tvec3<T> const & center,
+ detail::tvec3<T> const & up);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_transform.inl"
+
+#endif//GLM_GTC_matrix_transform
diff --git a/include/gal/opengl/glm/gtc/matrix_transform.inl b/include/gal/opengl/glm/gtc/matrix_transform.inl
new file mode 100644
index 0000000..6f20b4c
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/matrix_transform.inl
@@ -0,0 +1,434 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_matrix_transform
+/// @file glm/gtc/matrix_transform.inl
+/// @date 2009-04-29 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate
+ (
+ detail::tmat4x4<T> const & m,
+ detail::tvec3<T> const & v
+ )
+ {
+ detail::tmat4x4<T> Result(m);
+ Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate
+ (
+ detail::tmat4x4<T> const & m,
+ T const & angle,
+ detail::tvec3<T> const & v
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ T a = angle;
+#else
+ T a = radians(angle);
+#endif
+ T c = cos(a);
+ T s = sin(a);
+
+ detail::tvec3<T> axis = normalize(v);
+
+ detail::tvec3<T> temp = (T(1) - c) * axis;
+
+ detail::tmat4x4<T> Rotate(detail::tmat4x4<T>::null);
+ Rotate[0][0] = c + temp[0] * axis[0];
+ Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
+ Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
+
+ Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
+ Rotate[1][1] = c + temp[1] * axis[1];
+ Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
+
+ Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
+ Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
+ Rotate[2][2] = c + temp[2] * axis[2];
+
+ detail::tmat4x4<T> Result(detail::tmat4x4<T>::null);
+ Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
+ Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];
+ Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
+ Result[3] = m[3];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale
+ (
+ detail::tmat4x4<T> const & m,
+ detail::tvec3<T> const & v
+ )
+ {
+ detail::tmat4x4<T> Result(detail::tmat4x4<T>::null);
+ Result[0] = m[0] * v[0];
+ Result[1] = m[1] * v[1];
+ Result[2] = m[2] * v[2];
+ Result[3] = m[3];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate_slow
+ (
+ detail::tmat4x4<T> const & m,
+ detail::tvec3<T> const & v
+ )
+ {
+ detail::tmat4x4<T> Result(T(1));
+ Result[3] = detail::tvec4<T>(v, T(1));
+ return m * Result;
+
+ //detail::tmat4x4<valType> Result(m);
+ Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
+ //Result[3][0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0];
+ //Result[3][1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1];
+ //Result[3][2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2];
+ //Result[3][3] = m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3];
+ //return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate_slow
+ (
+ detail::tmat4x4<T> const & m,
+ T const & angle,
+ detail::tvec3<T> const & v
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ T const a = angle;
+#else
+ T const a = radians(angle);
+#endif
+ T c = cos(a);
+ T s = sin(a);
+ detail::tmat4x4<T> Result;
+
+ detail::tvec3<T> axis = normalize(v);
+
+ Result[0][0] = c + (1 - c) * axis.x * axis.x;
+ Result[0][1] = (1 - c) * axis.x * axis.y + s * axis.z;
+ Result[0][2] = (1 - c) * axis.x * axis.z - s * axis.y;
+ Result[0][3] = 0;
+
+ Result[1][0] = (1 - c) * axis.y * axis.x - s * axis.z;
+ Result[1][1] = c + (1 - c) * axis.y * axis.y;
+ Result[1][2] = (1 - c) * axis.y * axis.z + s * axis.x;
+ Result[1][3] = 0;
+
+ Result[2][0] = (1 - c) * axis.z * axis.x + s * axis.y;
+ Result[2][1] = (1 - c) * axis.z * axis.y - s * axis.x;
+ Result[2][2] = c + (1 - c) * axis.z * axis.z;
+ Result[2][3] = 0;
+
+ Result[3] = detail::tvec4<T>(0, 0, 0, 1);
+ return m * Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale_slow
+ (
+ detail::tmat4x4<T> const & m,
+ detail::tvec3<T> const & v
+ )
+ {
+ detail::tmat4x4<T> Result(T(1));
+ Result[0][0] = v.x;
+ Result[1][1] = v.y;
+ Result[2][2] = v.z;
+ return m * Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> ortho
+ (
+ valType const & left,
+ valType const & right,
+ valType const & bottom,
+ valType const & top,
+ valType const & zNear,
+ valType const & zFar
+ )
+ {
+ detail::tmat4x4<valType> Result(1);
+ Result[0][0] = valType(2) / (right - left);
+ Result[1][1] = valType(2) / (top - bottom);
+ Result[2][2] = - valType(2) / (zFar - zNear);
+ Result[3][0] = - (right + left) / (right - left);
+ Result[3][1] = - (top + bottom) / (top - bottom);
+ Result[3][2] = - (zFar + zNear) / (zFar - zNear);
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> ortho(
+ valType const & left,
+ valType const & right,
+ valType const & bottom,
+ valType const & top)
+ {
+ detail::tmat4x4<valType> Result(1);
+ Result[0][0] = valType(2) / (right - left);
+ Result[1][1] = valType(2) / (top - bottom);
+ Result[2][2] = - valType(1);
+ Result[3][0] = - (right + left) / (right - left);
+ Result[3][1] = - (top + bottom) / (top - bottom);
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> frustum
+ (
+ valType const & left,
+ valType const & right,
+ valType const & bottom,
+ valType const & top,
+ valType const & nearVal,
+ valType const & farVal
+ )
+ {
+ detail::tmat4x4<valType> Result(0);
+ Result[0][0] = (valType(2) * nearVal) / (right - left);
+ Result[1][1] = (valType(2) * nearVal) / (top - bottom);
+ Result[2][0] = (right + left) / (right - left);
+ Result[2][1] = (top + bottom) / (top - bottom);
+ Result[2][2] = -(farVal + nearVal) / (farVal - nearVal);
+ Result[2][3] = valType(-1);
+ Result[3][2] = -(valType(2) * farVal * nearVal) / (farVal - nearVal);
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> perspective
+ (
+ valType const & fovy,
+ valType const & aspect,
+ valType const & zNear,
+ valType const & zFar
+ )
+ {
+ assert(aspect != valType(0));
+ assert(zFar != zNear);
+
+#ifdef GLM_FORCE_RADIANS
+ valType const rad = fovy;
+#else
+ valType const rad = glm::radians(fovy);
+#endif
+
+ valType tanHalfFovy = tan(rad / valType(2));
+ detail::tmat4x4<valType> Result(valType(0));
+ Result[0][0] = valType(1) / (aspect * tanHalfFovy);
+ Result[1][1] = valType(1) / (tanHalfFovy);
+ Result[2][2] = - (zFar + zNear) / (zFar - zNear);
+ Result[2][3] = - valType(1);
+ Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> perspectiveFov
+ (
+ valType const & fov,
+ valType const & width,
+ valType const & height,
+ valType const & zNear,
+ valType const & zFar
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ valType rad = fov;
+#else
+ valType rad = glm::radians(fov);
+#endif
+ valType h = glm::cos(valType(0.5) * rad) / glm::sin(valType(0.5) * rad);
+ valType w = h * height / width; ///todo max(width , Height) / min(width , Height)?
+
+ detail::tmat4x4<valType> Result(valType(0));
+ Result[0][0] = w;
+ Result[1][1] = h;
+ Result[2][2] = - (zFar + zNear) / (zFar - zNear);
+ Result[2][3] = - valType(1);
+ Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> infinitePerspective
+ (
+ T fovy,
+ T aspect,
+ T zNear
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ T const range = tan(fovy / T(2)) * zNear;
+#else
+ T const range = tan(radians(fovy / T(2))) * zNear;
+#endif
+ T left = -range * aspect;
+ T right = range * aspect;
+ T bottom = -range;
+ T top = range;
+
+ detail::tmat4x4<T> Result(T(0));
+ Result[0][0] = (T(2) * zNear) / (right - left);
+ Result[1][1] = (T(2) * zNear) / (top - bottom);
+ Result[2][2] = - T(1);
+ Result[2][3] = - T(1);
+ Result[3][2] = - T(2) * zNear;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> tweakedInfinitePerspective
+ (
+ T fovy,
+ T aspect,
+ T zNear
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ T range = tan(fovy / T(2)) * zNear;
+#else
+ T range = tan(radians(fovy / T(2))) * zNear;
+#endif
+ T left = -range * aspect;
+ T right = range * aspect;
+ T bottom = -range;
+ T top = range;
+
+ detail::tmat4x4<T> Result(T(0));
+ Result[0][0] = (T(2) * zNear) / (right - left);
+ Result[1][1] = (T(2) * zNear) / (top - bottom);
+ Result[2][2] = T(0.0001) - T(1);
+ Result[2][3] = T(-1);
+ Result[3][2] = - (T(0.0001) - T(2)) * zNear;
+ return Result;
+ }
+
+ template <typename T, typename U>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> project
+ (
+ detail::tvec3<T> const & obj,
+ detail::tmat4x4<T> const & model,
+ detail::tmat4x4<T> const & proj,
+ detail::tvec4<U> const & viewport
+ )
+ {
+ detail::tvec4<T> tmp = detail::tvec4<T>(obj, T(1));
+ tmp = model * tmp;
+ tmp = proj * tmp;
+
+ tmp /= tmp.w;
+ tmp = tmp * T(0.5) + T(0.5);
+ tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);
+ tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);
+
+ return detail::tvec3<T>(tmp);
+ }
+
+ template <typename T, typename U>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> unProject
+ (
+ detail::tvec3<T> const & win,
+ detail::tmat4x4<T> const & model,
+ detail::tmat4x4<T> const & proj,
+ detail::tvec4<U> const & viewport
+ )
+ {
+ detail::tmat4x4<T> inverse = glm::inverse(proj * model);
+
+ detail::tvec4<T> tmp = detail::tvec4<T>(win, T(1));
+ tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);
+ tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);
+ tmp = tmp * T(2) - T(1);
+
+ detail::tvec4<T> obj = inverse * tmp;
+ obj /= obj.w;
+
+ return detail::tvec3<T>(obj);
+ }
+
+ template <typename T, typename U>
+ detail::tmat4x4<T> pickMatrix
+ (
+ detail::tvec2<T> const & center,
+ detail::tvec2<T> const & delta,
+ detail::tvec4<U> const & viewport
+ )
+ {
+ assert(delta.x > T(0) && delta.y > T(0));
+ detail::tmat4x4<T> Result(1.0f);
+
+ if(!(delta.x > T(0) && delta.y > T(0)))
+ return Result; // Error
+
+ detail::tvec3<T> Temp(
+ (T(viewport[2]) - T(2) * (center.x - T(viewport[0]))) / delta.x,
+ (T(viewport[3]) - T(2) * (center.y - T(viewport[1]))) / delta.y,
+ T(0));
+
+ // Translate and scale the picked region to the entire window
+ Result = translate(Result, Temp);
+ return scale(Result, detail::tvec3<T>(T(viewport[2]) / delta.x, T(viewport[3]) / delta.y, T(1)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> lookAt
+ (
+ detail::tvec3<T> const & eye,
+ detail::tvec3<T> const & center,
+ detail::tvec3<T> const & up
+ )
+ {
+ detail::tvec3<T> f = normalize(center - eye);
+ detail::tvec3<T> u = normalize(up);
+ detail::tvec3<T> s = normalize(cross(f, u));
+ u = cross(s, f);
+
+ detail::tmat4x4<T> Result(1);
+ Result[0][0] = s.x;
+ Result[1][0] = s.y;
+ Result[2][0] = s.z;
+ Result[0][1] = u.x;
+ Result[1][1] = u.y;
+ Result[2][1] = u.z;
+ Result[0][2] =-f.x;
+ Result[1][2] =-f.y;
+ Result[2][2] =-f.z;
+ Result[3][0] =-dot(s, eye);
+ Result[3][1] =-dot(u, eye);
+ Result[3][2] = dot(f, eye);
+ return Result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/noise.hpp b/include/gal/opengl/glm/gtc/noise.hpp
new file mode 100644
index 0000000..1768bd2
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/noise.hpp
@@ -0,0 +1,80 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_noise
+/// @file glm/gtc/noise.hpp
+/// @date 2011-04-21 / 2011-09-27
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_noise GLM_GTC_noise
+/// @ingroup gtc
+///
+/// Defines 2D, 3D and 4D procedural noise functions
+/// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise":
+/// https://github.com/ashima/webgl-noise
+/// Following Stefan Gustavson's paper "Simplex noise demystified":
+/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
+/// <glm/gtc/noise.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_noise
+#define GLM_GTC_noise GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_noise extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_noise
+ /// @{
+
+ /// Classic perlin noise.
+ /// @see gtc_noise
+ template <typename T, template<typename> class vecType>
+ T perlin(
+ vecType<T> const & p);
+
+ /// Periodic perlin noise.
+ /// @see gtc_noise
+ template <typename T, template<typename> class vecType>
+ T perlin(
+ vecType<T> const & p,
+ vecType<T> const & rep);
+
+ /// Simplex noise.
+ /// @see gtc_noise
+ template <typename T, template<typename> class vecType>
+ T simplex(
+ vecType<T> const & p);
+
+ /// @}
+}//namespace glm
+
+#include "noise.inl"
+
+#endif//GLM_GTC_noise
diff --git a/include/gal/opengl/glm/gtc/noise.inl b/include/gal/opengl/glm/gtc/noise.inl
new file mode 100644
index 0000000..1c6d557
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/noise.inl
@@ -0,0 +1,867 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_noise
+/// @file glm/gtc/noise.inl
+/// @date 2011-04-21 / 2012-04-07
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise":
+// https://github.com/ashima/webgl-noise
+// Following Stefan Gustavson's paper "Simplex noise demystified":
+// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T mod289(T const & x)
+ {
+ return x - floor(x * T(1.0 / 289.0)) * T(289.0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T permute(T const & x)
+ {
+ return mod289(((x * T(34)) + T(1)) * x);
+ }
+
+ template <typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> permute(vecType<T> const & x)
+ {
+ return mod289(((x * T(34)) + T(1)) * x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+
+ template <typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> taylorInvSqrt(vecType<T> const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> fade(vecType<T> const & t)
+ {
+ return t * t * t * (t * (t * T(6) - T(15)) + T(10));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> grad4(T const & j, detail::tvec4<T> const & ip)
+ {
+ detail::tvec3<T> pXYZ = floor(fract(detail::tvec3<T>(j) * detail::tvec3<T>(ip)) * T(7)) * ip[2] - T(1);
+ T pW = T(1.5) - dot(abs(pXYZ), detail::tvec3<T>(1));
+ detail::tvec4<T> s = detail::tvec4<T>(lessThan(detail::tvec4<T>(pXYZ, pW), detail::tvec4<T>(0.0)));
+ pXYZ = pXYZ + (detail::tvec3<T>(s) * T(2) - T(1)) * s.w;
+ return detail::tvec4<T>(pXYZ, pW);
+ }
+
+ // Classic Perlin noise
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec2<T> const & P)
+ {
+ detail::tvec4<T> Pi = glm::floor(detail::tvec4<T>(P.x, P.y, P.x, P.y)) + detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
+ detail::tvec4<T> Pf = glm::fract(detail::tvec4<T>(P.x, P.y, P.x, P.y)) - detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
+ Pi = mod(Pi, T(289)); // To avoid truncation effects in permutation
+ detail::tvec4<T> ix(Pi.x, Pi.z, Pi.x, Pi.z);
+ detail::tvec4<T> iy(Pi.y, Pi.y, Pi.w, Pi.w);
+ detail::tvec4<T> fx(Pf.x, Pf.z, Pf.x, Pf.z);
+ detail::tvec4<T> fy(Pf.y, Pf.y, Pf.w, Pf.w);
+
+ detail::tvec4<T> i = glm::permute(glm::permute(ix) + iy);
+
+ detail::tvec4<T> gx = T(2) * glm::fract(i / T(41)) - T(1);
+ detail::tvec4<T> gy = glm::abs(gx) - T(0.5);
+ detail::tvec4<T> tx = glm::floor(gx + T(0.5));
+ gx = gx - tx;
+
+ detail::tvec2<T> g00(gx.x, gy.x);
+ detail::tvec2<T> g10(gx.y, gy.y);
+ detail::tvec2<T> g01(gx.z, gy.z);
+ detail::tvec2<T> g11(gx.w, gy.w);
+
+ detail::tvec4<T> norm = taylorInvSqrt(detail::tvec4<T>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
+ g00 *= norm.x;
+ g01 *= norm.y;
+ g10 *= norm.z;
+ g11 *= norm.w;
+
+ T n00 = dot(g00, detail::tvec2<T>(fx.x, fy.x));
+ T n10 = dot(g10, detail::tvec2<T>(fx.y, fy.y));
+ T n01 = dot(g01, detail::tvec2<T>(fx.z, fy.z));
+ T n11 = dot(g11, detail::tvec2<T>(fx.w, fy.w));
+
+ detail::tvec2<T> fade_xy = fade(detail::tvec2<T>(Pf.x, Pf.y));
+ detail::tvec2<T> n_x = mix(detail::tvec2<T>(n00, n01), detail::tvec2<T>(n10, n11), fade_xy.x);
+ T n_xy = mix(n_x.x, n_x.y, fade_xy.y);
+ return T(2.3) * n_xy;
+ }
+
+ // Classic Perlin noise
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec3<T> const & P)
+ {
+ detail::tvec3<T> Pi0 = floor(P); // Integer part for indexing
+ detail::tvec3<T> Pi1 = Pi0 + T(1); // Integer part + 1
+ Pi0 = mod289(Pi0);
+ Pi1 = mod289(Pi1);
+ detail::tvec3<T> Pf0 = fract(P); // Fractional part for interpolation
+ detail::tvec3<T> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ detail::tvec4<T> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ detail::tvec4<T> iy = detail::tvec4<T>(detail::tvec2<T>(Pi0.y), detail::tvec2<T>(Pi1.y));
+ detail::tvec4<T> iz0(Pi0.z);
+ detail::tvec4<T> iz1(Pi1.z);
+
+ detail::tvec4<T> ixy = permute(permute(ix) + iy);
+ detail::tvec4<T> ixy0 = permute(ixy + iz0);
+ detail::tvec4<T> ixy1 = permute(ixy + iz1);
+
+ detail::tvec4<T> gx0 = ixy0 * T(1.0 / 7.0);
+ detail::tvec4<T> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5);
+ gx0 = fract(gx0);
+ detail::tvec4<T> gz0 = detail::tvec4<T>(0.5) - abs(gx0) - abs(gy0);
+ detail::tvec4<T> sz0 = step(gz0, detail::tvec4<T>(0.0));
+ gx0 -= sz0 * (step(T(0), gx0) - T(0.5));
+ gy0 -= sz0 * (step(T(0), gy0) - T(0.5));
+
+ detail::tvec4<T> gx1 = ixy1 * T(1.0 / 7.0);
+ detail::tvec4<T> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5);
+ gx1 = fract(gx1);
+ detail::tvec4<T> gz1 = detail::tvec4<T>(0.5) - abs(gx1) - abs(gy1);
+ detail::tvec4<T> sz1 = step(gz1, detail::tvec4<T>(0.0));
+ gx1 -= sz1 * (step(T(0), gx1) - T(0.5));
+ gy1 -= sz1 * (step(T(0), gy1) - T(0.5));
+
+ detail::tvec3<T> g000(gx0.x, gy0.x, gz0.x);
+ detail::tvec3<T> g100(gx0.y, gy0.y, gz0.y);
+ detail::tvec3<T> g010(gx0.z, gy0.z, gz0.z);
+ detail::tvec3<T> g110(gx0.w, gy0.w, gz0.w);
+ detail::tvec3<T> g001(gx1.x, gy1.x, gz1.x);
+ detail::tvec3<T> g101(gx1.y, gy1.y, gz1.y);
+ detail::tvec3<T> g011(gx1.z, gy1.z, gz1.z);
+ detail::tvec3<T> g111(gx1.w, gy1.w, gz1.w);
+
+ detail::tvec4<T> norm0 = taylorInvSqrt(detail::tvec4<T>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
+ g000 *= norm0.x;
+ g010 *= norm0.y;
+ g100 *= norm0.z;
+ g110 *= norm0.w;
+ detail::tvec4<T> norm1 = taylorInvSqrt(detail::tvec4<T>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
+ g001 *= norm1.x;
+ g011 *= norm1.y;
+ g101 *= norm1.z;
+ g111 *= norm1.w;
+
+ T n000 = dot(g000, Pf0);
+ T n100 = dot(g100, detail::tvec3<T>(Pf1.x, Pf0.y, Pf0.z));
+ T n010 = dot(g010, detail::tvec3<T>(Pf0.x, Pf1.y, Pf0.z));
+ T n110 = dot(g110, detail::tvec3<T>(Pf1.x, Pf1.y, Pf0.z));
+ T n001 = dot(g001, detail::tvec3<T>(Pf0.x, Pf0.y, Pf1.z));
+ T n101 = dot(g101, detail::tvec3<T>(Pf1.x, Pf0.y, Pf1.z));
+ T n011 = dot(g011, detail::tvec3<T>(Pf0.x, Pf1.y, Pf1.z));
+ T n111 = dot(g111, Pf1);
+
+ detail::tvec3<T> fade_xyz = fade(Pf0);
+ detail::tvec4<T> n_z = mix(detail::tvec4<T>(n000, n100, n010, n110), detail::tvec4<T>(n001, n101, n011, n111), fade_xyz.z);
+ detail::tvec2<T> n_yz = mix(detail::tvec2<T>(n_z.x, n_z.y), detail::tvec2<T>(n_z.z, n_z.w), fade_xyz.y);
+ T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
+ return T(2.2) * n_xyz;
+ }
+ /*
+ // Classic Perlin noise
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec3<T> const & P)
+ {
+ detail::tvec3<T> Pi0 = floor(P); // Integer part for indexing
+ detail::tvec3<T> Pi1 = Pi0 + T(1); // Integer part + 1
+ Pi0 = mod(Pi0, T(289));
+ Pi1 = mod(Pi1, T(289));
+ detail::tvec3<T> Pf0 = fract(P); // Fractional part for interpolation
+ detail::tvec3<T> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ detail::tvec4<T> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ detail::tvec4<T> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ detail::tvec4<T> iz0(Pi0.z);
+ detail::tvec4<T> iz1(Pi1.z);
+
+ detail::tvec4<T> ixy = permute(permute(ix) + iy);
+ detail::tvec4<T> ixy0 = permute(ixy + iz0);
+ detail::tvec4<T> ixy1 = permute(ixy + iz1);
+
+ detail::tvec4<T> gx0 = ixy0 / T(7);
+ detail::tvec4<T> gy0 = fract(floor(gx0) / T(7)) - T(0.5);
+ gx0 = fract(gx0);
+ detail::tvec4<T> gz0 = detail::tvec4<T>(0.5) - abs(gx0) - abs(gy0);
+ detail::tvec4<T> sz0 = step(gz0, detail::tvec4<T>(0.0));
+ gx0 -= sz0 * (step(0.0, gx0) - T(0.5));
+ gy0 -= sz0 * (step(0.0, gy0) - T(0.5));
+
+ detail::tvec4<T> gx1 = ixy1 / T(7);
+ detail::tvec4<T> gy1 = fract(floor(gx1) / T(7)) - T(0.5);
+ gx1 = fract(gx1);
+ detail::tvec4<T> gz1 = detail::tvec4<T>(0.5) - abs(gx1) - abs(gy1);
+ detail::tvec4<T> sz1 = step(gz1, detail::tvec4<T>(0.0));
+ gx1 -= sz1 * (step(T(0), gx1) - T(0.5));
+ gy1 -= sz1 * (step(T(0), gy1) - T(0.5));
+
+ detail::tvec3<T> g000(gx0.x, gy0.x, gz0.x);
+ detail::tvec3<T> g100(gx0.y, gy0.y, gz0.y);
+ detail::tvec3<T> g010(gx0.z, gy0.z, gz0.z);
+ detail::tvec3<T> g110(gx0.w, gy0.w, gz0.w);
+ detail::tvec3<T> g001(gx1.x, gy1.x, gz1.x);
+ detail::tvec3<T> g101(gx1.y, gy1.y, gz1.y);
+ detail::tvec3<T> g011(gx1.z, gy1.z, gz1.z);
+ detail::tvec3<T> g111(gx1.w, gy1.w, gz1.w);
+
+ detail::tvec4<T> norm0 = taylorInvSqrt(detail::tvec4<T>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
+ g000 *= norm0.x;
+ g010 *= norm0.y;
+ g100 *= norm0.z;
+ g110 *= norm0.w;
+ detail::tvec4<T> norm1 = taylorInvSqrt(detail::tvec4<T>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
+ g001 *= norm1.x;
+ g011 *= norm1.y;
+ g101 *= norm1.z;
+ g111 *= norm1.w;
+
+ T n000 = dot(g000, Pf0);
+ T n100 = dot(g100, detail::tvec3<T>(Pf1.x, Pf0.y, Pf0.z));
+ T n010 = dot(g010, detail::tvec3<T>(Pf0.x, Pf1.y, Pf0.z));
+ T n110 = dot(g110, detail::tvec3<T>(Pf1.x, Pf1.y, Pf0.z));
+ T n001 = dot(g001, detail::tvec3<T>(Pf0.x, Pf0.y, Pf1.z));
+ T n101 = dot(g101, detail::tvec3<T>(Pf1.x, Pf0.y, Pf1.z));
+ T n011 = dot(g011, detail::tvec3<T>(Pf0.x, Pf1.y, Pf1.z));
+ T n111 = dot(g111, Pf1);
+
+ detail::tvec3<T> fade_xyz = fade(Pf0);
+ detail::tvec4<T> n_z = mix(detail::tvec4<T>(n000, n100, n010, n110), detail::tvec4<T>(n001, n101, n011, n111), fade_xyz.z);
+ detail::tvec2<T> n_yz = mix(
+ detail::tvec2<T>(n_z.x, n_z.y),
+ detail::tvec2<T>(n_z.z, n_z.w), fade_xyz.y);
+ T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
+ return T(2.2) * n_xyz;
+ }
+ */
+ // Classic Perlin noise
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec4<T> const & P)
+ {
+ detail::tvec4<T> Pi0 = floor(P); // Integer part for indexing
+ detail::tvec4<T> Pi1 = Pi0 + T(1); // Integer part + 1
+ Pi0 = mod(Pi0, T(289));
+ Pi1 = mod(Pi1, T(289));
+ detail::tvec4<T> Pf0 = fract(P); // Fractional part for interpolation
+ detail::tvec4<T> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ detail::tvec4<T> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ detail::tvec4<T> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ detail::tvec4<T> iz0(Pi0.z);
+ detail::tvec4<T> iz1(Pi1.z);
+ detail::tvec4<T> iw0(Pi0.w);
+ detail::tvec4<T> iw1(Pi1.w);
+
+ detail::tvec4<T> ixy = permute(permute(ix) + iy);
+ detail::tvec4<T> ixy0 = permute(ixy + iz0);
+ detail::tvec4<T> ixy1 = permute(ixy + iz1);
+ detail::tvec4<T> ixy00 = permute(ixy0 + iw0);
+ detail::tvec4<T> ixy01 = permute(ixy0 + iw1);
+ detail::tvec4<T> ixy10 = permute(ixy1 + iw0);
+ detail::tvec4<T> ixy11 = permute(ixy1 + iw1);
+
+ detail::tvec4<T> gx00 = ixy00 / T(7);
+ detail::tvec4<T> gy00 = floor(gx00) / T(7);
+ detail::tvec4<T> gz00 = floor(gy00) / T(6);
+ gx00 = fract(gx00) - T(0.5);
+ gy00 = fract(gy00) - T(0.5);
+ gz00 = fract(gz00) - T(0.5);
+ detail::tvec4<T> gw00 = detail::tvec4<T>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);
+ detail::tvec4<T> sw00 = step(gw00, detail::tvec4<T>(0.0));
+ gx00 -= sw00 * (step(T(0), gx00) - T(0.5));
+ gy00 -= sw00 * (step(T(0), gy00) - T(0.5));
+
+ detail::tvec4<T> gx01 = ixy01 / T(7);
+ detail::tvec4<T> gy01 = floor(gx01) / T(7);
+ detail::tvec4<T> gz01 = floor(gy01) / T(6);
+ gx01 = fract(gx01) - T(0.5);
+ gy01 = fract(gy01) - T(0.5);
+ gz01 = fract(gz01) - T(0.5);
+ detail::tvec4<T> gw01 = detail::tvec4<T>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);
+ detail::tvec4<T> sw01 = step(gw01, detail::tvec4<T>(0.0));
+ gx01 -= sw01 * (step(T(0), gx01) - T(0.5));
+ gy01 -= sw01 * (step(T(0), gy01) - T(0.5));
+
+ detail::tvec4<T> gx10 = ixy10 / T(7);
+ detail::tvec4<T> gy10 = floor(gx10) / T(7);
+ detail::tvec4<T> gz10 = floor(gy10) / T(6);
+ gx10 = fract(gx10) - T(0.5);
+ gy10 = fract(gy10) - T(0.5);
+ gz10 = fract(gz10) - T(0.5);
+ detail::tvec4<T> gw10 = detail::tvec4<T>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);
+ detail::tvec4<T> sw10 = step(gw10, detail::tvec4<T>(0));
+ gx10 -= sw10 * (step(T(0), gx10) - T(0.5));
+ gy10 -= sw10 * (step(T(0), gy10) - T(0.5));
+
+ detail::tvec4<T> gx11 = ixy11 / T(7);
+ detail::tvec4<T> gy11 = floor(gx11) / T(7);
+ detail::tvec4<T> gz11 = floor(gy11) / T(6);
+ gx11 = fract(gx11) - T(0.5);
+ gy11 = fract(gy11) - T(0.5);
+ gz11 = fract(gz11) - T(0.5);
+ detail::tvec4<T> gw11 = detail::tvec4<T>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);
+ detail::tvec4<T> sw11 = step(gw11, detail::tvec4<T>(0.0));
+ gx11 -= sw11 * (step(T(0), gx11) - T(0.5));
+ gy11 -= sw11 * (step(T(0), gy11) - T(0.5));
+
+ detail::tvec4<T> g0000(gx00.x, gy00.x, gz00.x, gw00.x);
+ detail::tvec4<T> g1000(gx00.y, gy00.y, gz00.y, gw00.y);
+ detail::tvec4<T> g0100(gx00.z, gy00.z, gz00.z, gw00.z);
+ detail::tvec4<T> g1100(gx00.w, gy00.w, gz00.w, gw00.w);
+ detail::tvec4<T> g0010(gx10.x, gy10.x, gz10.x, gw10.x);
+ detail::tvec4<T> g1010(gx10.y, gy10.y, gz10.y, gw10.y);
+ detail::tvec4<T> g0110(gx10.z, gy10.z, gz10.z, gw10.z);
+ detail::tvec4<T> g1110(gx10.w, gy10.w, gz10.w, gw10.w);
+ detail::tvec4<T> g0001(gx01.x, gy01.x, gz01.x, gw01.x);
+ detail::tvec4<T> g1001(gx01.y, gy01.y, gz01.y, gw01.y);
+ detail::tvec4<T> g0101(gx01.z, gy01.z, gz01.z, gw01.z);
+ detail::tvec4<T> g1101(gx01.w, gy01.w, gz01.w, gw01.w);
+ detail::tvec4<T> g0011(gx11.x, gy11.x, gz11.x, gw11.x);
+ detail::tvec4<T> g1011(gx11.y, gy11.y, gz11.y, gw11.y);
+ detail::tvec4<T> g0111(gx11.z, gy11.z, gz11.z, gw11.z);
+ detail::tvec4<T> g1111(gx11.w, gy11.w, gz11.w, gw11.w);
+
+ detail::tvec4<T> norm00 = taylorInvSqrt(detail::tvec4<T>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));
+ g0000 *= norm00.x;
+ g0100 *= norm00.y;
+ g1000 *= norm00.z;
+ g1100 *= norm00.w;
+
+ detail::tvec4<T> norm01 = taylorInvSqrt(detail::tvec4<T>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));
+ g0001 *= norm01.x;
+ g0101 *= norm01.y;
+ g1001 *= norm01.z;
+ g1101 *= norm01.w;
+
+ detail::tvec4<T> norm10 = taylorInvSqrt(detail::tvec4<T>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));
+ g0010 *= norm10.x;
+ g0110 *= norm10.y;
+ g1010 *= norm10.z;
+ g1110 *= norm10.w;
+
+ detail::tvec4<T> norm11 = taylorInvSqrt(detail::tvec4<T>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));
+ g0011 *= norm11.x;
+ g0111 *= norm11.y;
+ g1011 *= norm11.z;
+ g1111 *= norm11.w;
+
+ T n0000 = dot(g0000, Pf0);
+ T n1000 = dot(g1000, detail::tvec4<T>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));
+ T n0100 = dot(g0100, detail::tvec4<T>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));
+ T n1100 = dot(g1100, detail::tvec4<T>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));
+ T n0010 = dot(g0010, detail::tvec4<T>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));
+ T n1010 = dot(g1010, detail::tvec4<T>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));
+ T n0110 = dot(g0110, detail::tvec4<T>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));
+ T n1110 = dot(g1110, detail::tvec4<T>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));
+ T n0001 = dot(g0001, detail::tvec4<T>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));
+ T n1001 = dot(g1001, detail::tvec4<T>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));
+ T n0101 = dot(g0101, detail::tvec4<T>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));
+ T n1101 = dot(g1101, detail::tvec4<T>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));
+ T n0011 = dot(g0011, detail::tvec4<T>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));
+ T n1011 = dot(g1011, detail::tvec4<T>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));
+ T n0111 = dot(g0111, detail::tvec4<T>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));
+ T n1111 = dot(g1111, Pf1);
+
+ detail::tvec4<T> fade_xyzw = fade(Pf0);
+ detail::tvec4<T> n_0w = mix(detail::tvec4<T>(n0000, n1000, n0100, n1100), detail::tvec4<T>(n0001, n1001, n0101, n1101), fade_xyzw.w);
+ detail::tvec4<T> n_1w = mix(detail::tvec4<T>(n0010, n1010, n0110, n1110), detail::tvec4<T>(n0011, n1011, n0111, n1111), fade_xyzw.w);
+ detail::tvec4<T> n_zw = mix(n_0w, n_1w, fade_xyzw.z);
+ detail::tvec2<T> n_yzw = mix(detail::tvec2<T>(n_zw.x, n_zw.y), detail::tvec2<T>(n_zw.z, n_zw.w), fade_xyzw.y);
+ T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);
+ return T(2.2) * n_xyzw;
+ }
+
+ // Classic Perlin noise, periodic variant
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec2<T> const & P, detail::tvec2<T> const & rep)
+ {
+ detail::tvec4<T> Pi = floor(detail::tvec4<T>(P.x, P.y, P.x, P.y)) + detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
+ detail::tvec4<T> Pf = fract(detail::tvec4<T>(P.x, P.y, P.x, P.y)) - detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
+ Pi = mod(Pi, detail::tvec4<T>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period
+ Pi = mod(Pi, T(289)); // To avoid truncation effects in permutation
+ detail::tvec4<T> ix(Pi.x, Pi.z, Pi.x, Pi.z);
+ detail::tvec4<T> iy(Pi.y, Pi.y, Pi.w, Pi.w);
+ detail::tvec4<T> fx(Pf.x, Pf.z, Pf.x, Pf.z);
+ detail::tvec4<T> fy(Pf.y, Pf.y, Pf.w, Pf.w);
+
+ detail::tvec4<T> i = permute(permute(ix) + iy);
+
+ detail::tvec4<T> gx = T(2) * fract(i / T(41)) - T(1);
+ detail::tvec4<T> gy = abs(gx) - T(0.5);
+ detail::tvec4<T> tx = floor(gx + T(0.5));
+ gx = gx - tx;
+
+ detail::tvec2<T> g00(gx.x, gy.x);
+ detail::tvec2<T> g10(gx.y, gy.y);
+ detail::tvec2<T> g01(gx.z, gy.z);
+ detail::tvec2<T> g11(gx.w, gy.w);
+
+ detail::tvec4<T> norm = taylorInvSqrt(detail::tvec4<T>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
+ g00 *= norm.x;
+ g01 *= norm.y;
+ g10 *= norm.z;
+ g11 *= norm.w;
+
+ T n00 = dot(g00, detail::tvec2<T>(fx.x, fy.x));
+ T n10 = dot(g10, detail::tvec2<T>(fx.y, fy.y));
+ T n01 = dot(g01, detail::tvec2<T>(fx.z, fy.z));
+ T n11 = dot(g11, detail::tvec2<T>(fx.w, fy.w));
+
+ detail::tvec2<T> fade_xy = fade(detail::tvec2<T>(Pf.x, Pf.y));
+ detail::tvec2<T> n_x = mix(detail::tvec2<T>(n00, n01), detail::tvec2<T>(n10, n11), fade_xy.x);
+ T n_xy = mix(n_x.x, n_x.y, fade_xy.y);
+ return T(2.3) * n_xy;
+ }
+
+ // Classic Perlin noise, periodic variant
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec3<T> const & P, detail::tvec3<T> const & rep)
+ {
+ detail::tvec3<T> Pi0 = mod(floor(P), rep); // Integer part, modulo period
+ detail::tvec3<T> Pi1 = mod(Pi0 + detail::tvec3<T>(1.0), rep); // Integer part + 1, mod period
+ Pi0 = mod(Pi0, T(289));
+ Pi1 = mod(Pi1, T(289));
+ detail::tvec3<T> Pf0 = fract(P); // Fractional part for interpolation
+ detail::tvec3<T> Pf1 = Pf0 - detail::tvec3<T>(1.0); // Fractional part - 1.0
+ detail::tvec4<T> ix = detail::tvec4<T>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ detail::tvec4<T> iy = detail::tvec4<T>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ detail::tvec4<T> iz0(Pi0.z);
+ detail::tvec4<T> iz1(Pi1.z);
+
+ detail::tvec4<T> ixy = permute(permute(ix) + iy);
+ detail::tvec4<T> ixy0 = permute(ixy + iz0);
+ detail::tvec4<T> ixy1 = permute(ixy + iz1);
+
+ detail::tvec4<T> gx0 = ixy0 / T(7);
+ detail::tvec4<T> gy0 = fract(floor(gx0) / T(7)) - T(0.5);
+ gx0 = fract(gx0);
+ detail::tvec4<T> gz0 = detail::tvec4<T>(0.5) - abs(gx0) - abs(gy0);
+ detail::tvec4<T> sz0 = step(gz0, detail::tvec4<T>(0));
+ gx0 -= sz0 * (step(0.0, gx0) - T(0.5));
+ gy0 -= sz0 * (step(0.0, gy0) - T(0.5));
+
+ detail::tvec4<T> gx1 = ixy1 / T(7);
+ detail::tvec4<T> gy1 = fract(floor(gx1) / T(7)) - T(0.5);
+ gx1 = fract(gx1);
+ detail::tvec4<T> gz1 = detail::tvec4<T>(0.5) - abs(gx1) - abs(gy1);
+ detail::tvec4<T> sz1 = step(gz1, detail::tvec4<T>(0.0));
+ gx1 -= sz1 * (step(0.0, gx1) - T(0.5));
+ gy1 -= sz1 * (step(0.0, gy1) - T(0.5));
+
+ detail::tvec3<T> g000 = detail::tvec3<T>(gx0.x, gy0.x, gz0.x);
+ detail::tvec3<T> g100 = detail::tvec3<T>(gx0.y, gy0.y, gz0.y);
+ detail::tvec3<T> g010 = detail::tvec3<T>(gx0.z, gy0.z, gz0.z);
+ detail::tvec3<T> g110 = detail::tvec3<T>(gx0.w, gy0.w, gz0.w);
+ detail::tvec3<T> g001 = detail::tvec3<T>(gx1.x, gy1.x, gz1.x);
+ detail::tvec3<T> g101 = detail::tvec3<T>(gx1.y, gy1.y, gz1.y);
+ detail::tvec3<T> g011 = detail::tvec3<T>(gx1.z, gy1.z, gz1.z);
+ detail::tvec3<T> g111 = detail::tvec3<T>(gx1.w, gy1.w, gz1.w);
+
+ detail::tvec4<T> norm0 = taylorInvSqrt(detail::tvec4<T>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
+ g000 *= norm0.x;
+ g010 *= norm0.y;
+ g100 *= norm0.z;
+ g110 *= norm0.w;
+ detail::tvec4<T> norm1 = taylorInvSqrt(detail::tvec4<T>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
+ g001 *= norm1.x;
+ g011 *= norm1.y;
+ g101 *= norm1.z;
+ g111 *= norm1.w;
+
+ T n000 = dot(g000, Pf0);
+ T n100 = dot(g100, detail::tvec3<T>(Pf1.x, Pf0.y, Pf0.z));
+ T n010 = dot(g010, detail::tvec3<T>(Pf0.x, Pf1.y, Pf0.z));
+ T n110 = dot(g110, detail::tvec3<T>(Pf1.x, Pf1.y, Pf0.z));
+ T n001 = dot(g001, detail::tvec3<T>(Pf0.x, Pf0.y, Pf1.z));
+ T n101 = dot(g101, detail::tvec3<T>(Pf1.x, Pf0.y, Pf1.z));
+ T n011 = dot(g011, detail::tvec3<T>(Pf0.x, Pf1.y, Pf1.z));
+ T n111 = dot(g111, Pf1);
+
+ detail::tvec3<T> fade_xyz = fade(Pf0);
+ detail::tvec4<T> n_z = mix(detail::tvec4<T>(n000, n100, n010, n110), detail::tvec4<T>(n001, n101, n011, n111), fade_xyz.z);
+ detail::tvec2<T> n_yz = mix(detail::tvec2<T>(n_z.x, n_z.y), detail::tvec2<T>(n_z.z, n_z.w), fade_xyz.y);
+ T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
+ return T(2.2) * n_xyz;
+ }
+
+ // Classic Perlin noise, periodic version
+ template <typename T>
+ GLM_FUNC_QUALIFIER T perlin(detail::tvec4<T> const & P, detail::tvec4<T> const & rep)
+ {
+ detail::tvec4<T> Pi0 = mod(floor(P), rep); // Integer part modulo rep
+ detail::tvec4<T> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep
+ detail::tvec4<T> Pf0 = fract(P); // Fractional part for interpolation
+ detail::tvec4<T> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ detail::tvec4<T> ix = detail::tvec4<T>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ detail::tvec4<T> iy = detail::tvec4<T>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ detail::tvec4<T> iz0(Pi0.z);
+ detail::tvec4<T> iz1(Pi1.z);
+ detail::tvec4<T> iw0(Pi0.w);
+ detail::tvec4<T> iw1(Pi1.w);
+
+ detail::tvec4<T> ixy = permute(permute(ix) + iy);
+ detail::tvec4<T> ixy0 = permute(ixy + iz0);
+ detail::tvec4<T> ixy1 = permute(ixy + iz1);
+ detail::tvec4<T> ixy00 = permute(ixy0 + iw0);
+ detail::tvec4<T> ixy01 = permute(ixy0 + iw1);
+ detail::tvec4<T> ixy10 = permute(ixy1 + iw0);
+ detail::tvec4<T> ixy11 = permute(ixy1 + iw1);
+
+ detail::tvec4<T> gx00 = ixy00 / T(7);
+ detail::tvec4<T> gy00 = floor(gx00) / T(7);
+ detail::tvec4<T> gz00 = floor(gy00) / T(6);
+ gx00 = fract(gx00) - T(0.5);
+ gy00 = fract(gy00) - T(0.5);
+ gz00 = fract(gz00) - T(0.5);
+ detail::tvec4<T> gw00 = detail::tvec4<T>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);
+ detail::tvec4<T> sw00 = step(gw00, detail::tvec4<T>(0));
+ gx00 -= sw00 * (step(0.0, gx00) - T(0.5));
+ gy00 -= sw00 * (step(0.0, gy00) - T(0.5));
+
+ detail::tvec4<T> gx01 = ixy01 / T(7);
+ detail::tvec4<T> gy01 = floor(gx01) / T(7);
+ detail::tvec4<T> gz01 = floor(gy01) / T(6);
+ gx01 = fract(gx01) - T(0.5);
+ gy01 = fract(gy01) - T(0.5);
+ gz01 = fract(gz01) - T(0.5);
+ detail::tvec4<T> gw01 = detail::tvec4<T>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);
+ detail::tvec4<T> sw01 = step(gw01, detail::tvec4<T>(0.0));
+ gx01 -= sw01 * (step(0.0, gx01) - T(0.5));
+ gy01 -= sw01 * (step(0.0, gy01) - T(0.5));
+
+ detail::tvec4<T> gx10 = ixy10 / T(7);
+ detail::tvec4<T> gy10 = floor(gx10) / T(7);
+ detail::tvec4<T> gz10 = floor(gy10) / T(6);
+ gx10 = fract(gx10) - T(0.5);
+ gy10 = fract(gy10) - T(0.5);
+ gz10 = fract(gz10) - T(0.5);
+ detail::tvec4<T> gw10 = detail::tvec4<T>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);
+ detail::tvec4<T> sw10 = step(gw10, detail::tvec4<T>(0.0));
+ gx10 -= sw10 * (step(0.0, gx10) - T(0.5));
+ gy10 -= sw10 * (step(0.0, gy10) - T(0.5));
+
+ detail::tvec4<T> gx11 = ixy11 / T(7);
+ detail::tvec4<T> gy11 = floor(gx11) / T(7);
+ detail::tvec4<T> gz11 = floor(gy11) / T(6);
+ gx11 = fract(gx11) - T(0.5);
+ gy11 = fract(gy11) - T(0.5);
+ gz11 = fract(gz11) - T(0.5);
+ detail::tvec4<T> gw11 = detail::tvec4<T>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);
+ detail::tvec4<T> sw11 = step(gw11, detail::tvec4<T>(0.0));
+ gx11 -= sw11 * (step(0.0, gx11) - T(0.5));
+ gy11 -= sw11 * (step(0.0, gy11) - T(0.5));
+
+ detail::tvec4<T> g0000(gx00.x, gy00.x, gz00.x, gw00.x);
+ detail::tvec4<T> g1000(gx00.y, gy00.y, gz00.y, gw00.y);
+ detail::tvec4<T> g0100(gx00.z, gy00.z, gz00.z, gw00.z);
+ detail::tvec4<T> g1100(gx00.w, gy00.w, gz00.w, gw00.w);
+ detail::tvec4<T> g0010(gx10.x, gy10.x, gz10.x, gw10.x);
+ detail::tvec4<T> g1010(gx10.y, gy10.y, gz10.y, gw10.y);
+ detail::tvec4<T> g0110(gx10.z, gy10.z, gz10.z, gw10.z);
+ detail::tvec4<T> g1110(gx10.w, gy10.w, gz10.w, gw10.w);
+ detail::tvec4<T> g0001(gx01.x, gy01.x, gz01.x, gw01.x);
+ detail::tvec4<T> g1001(gx01.y, gy01.y, gz01.y, gw01.y);
+ detail::tvec4<T> g0101(gx01.z, gy01.z, gz01.z, gw01.z);
+ detail::tvec4<T> g1101(gx01.w, gy01.w, gz01.w, gw01.w);
+ detail::tvec4<T> g0011(gx11.x, gy11.x, gz11.x, gw11.x);
+ detail::tvec4<T> g1011(gx11.y, gy11.y, gz11.y, gw11.y);
+ detail::tvec4<T> g0111(gx11.z, gy11.z, gz11.z, gw11.z);
+ detail::tvec4<T> g1111(gx11.w, gy11.w, gz11.w, gw11.w);
+
+ detail::tvec4<T> norm00 = taylorInvSqrt(detail::tvec4<T>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));
+ g0000 *= norm00.x;
+ g0100 *= norm00.y;
+ g1000 *= norm00.z;
+ g1100 *= norm00.w;
+
+ detail::tvec4<T> norm01 = taylorInvSqrt(detail::tvec4<T>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));
+ g0001 *= norm01.x;
+ g0101 *= norm01.y;
+ g1001 *= norm01.z;
+ g1101 *= norm01.w;
+
+ detail::tvec4<T> norm10 = taylorInvSqrt(detail::tvec4<T>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));
+ g0010 *= norm10.x;
+ g0110 *= norm10.y;
+ g1010 *= norm10.z;
+ g1110 *= norm10.w;
+
+ detail::tvec4<T> norm11 = taylorInvSqrt(detail::tvec4<T>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));
+ g0011 *= norm11.x;
+ g0111 *= norm11.y;
+ g1011 *= norm11.z;
+ g1111 *= norm11.w;
+
+ T n0000 = dot(g0000, Pf0);
+ T n1000 = dot(g1000, detail::tvec4<T>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));
+ T n0100 = dot(g0100, detail::tvec4<T>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));
+ T n1100 = dot(g1100, detail::tvec4<T>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));
+ T n0010 = dot(g0010, detail::tvec4<T>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));
+ T n1010 = dot(g1010, detail::tvec4<T>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));
+ T n0110 = dot(g0110, detail::tvec4<T>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));
+ T n1110 = dot(g1110, detail::tvec4<T>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));
+ T n0001 = dot(g0001, detail::tvec4<T>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));
+ T n1001 = dot(g1001, detail::tvec4<T>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));
+ T n0101 = dot(g0101, detail::tvec4<T>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));
+ T n1101 = dot(g1101, detail::tvec4<T>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));
+ T n0011 = dot(g0011, detail::tvec4<T>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));
+ T n1011 = dot(g1011, detail::tvec4<T>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));
+ T n0111 = dot(g0111, detail::tvec4<T>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));
+ T n1111 = dot(g1111, Pf1);
+
+ detail::tvec4<T> fade_xyzw = fade(Pf0);
+ detail::tvec4<T> n_0w = mix(detail::tvec4<T>(n0000, n1000, n0100, n1100), detail::tvec4<T>(n0001, n1001, n0101, n1101), fade_xyzw.w);
+ detail::tvec4<T> n_1w = mix(detail::tvec4<T>(n0010, n1010, n0110, n1110), detail::tvec4<T>(n0011, n1011, n0111, n1111), fade_xyzw.w);
+ detail::tvec4<T> n_zw = mix(n_0w, n_1w, fade_xyzw.z);
+ detail::tvec2<T> n_yzw = mix(detail::tvec2<T>(n_zw.x, n_zw.y), detail::tvec2<T>(n_zw.z, n_zw.w), fade_xyzw.y);
+ T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);
+ return T(2.2) * n_xyzw;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T simplex(glm::detail::tvec2<T> const & v)
+ {
+ detail::tvec4<T> const C = detail::tvec4<T>(
+ T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0
+ T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0)
+ T(-0.577350269189626), // -1.0 + 2.0 * C.x
+ T( 0.024390243902439)); // 1.0 / 41.0
+
+ // First corner
+ detail::tvec2<T> i = floor(v + dot(v, detail::tvec2<T>(C[1])));
+ detail::tvec2<T> x0 = v - i + dot(i, detail::tvec2<T>(C[0]));
+
+ // Other corners
+ //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0
+ //i1.y = 1.0 - i1.x;
+ detail::tvec2<T> i1 = (x0.x > x0.y) ? detail::tvec2<T>(1, 0) : detail::tvec2<T>(0, 1);
+ // x0 = x0 - 0.0 + 0.0 * C.xx ;
+ // x1 = x0 - i1 + 1.0 * C.xx ;
+ // x2 = x0 - 1.0 + 2.0 * C.xx ;
+ detail::tvec4<T> x12 = detail::tvec4<T>(x0.x, x0.y, x0.x, x0.y) + detail::tvec4<T>(C.x, C.x, C.z, C.z);
+ x12 = detail::tvec4<T>(detail::tvec2<T>(x12) - i1, x12.z, x12.w);
+
+ // Permutations
+ i = mod(i, T(289)); // Avoid truncation effects in permutation
+ detail::tvec3<T> p = permute(
+ permute(i.y + detail::tvec3<T>(T(0), i1.y, T(1)))
+ + i.x + detail::tvec3<T>(T(0), i1.x, T(1)));
+
+ detail::tvec3<T> m = max(T(0.5) - detail::tvec3<T>(
+ dot(x0, x0),
+ dot(detail::tvec2<T>(x12.x, x12.y), detail::tvec2<T>(x12.x, x12.y)),
+ dot(detail::tvec2<T>(x12.z, x12.w), detail::tvec2<T>(x12.z, x12.w))), T(0));
+ m = m * m ;
+ m = m * m ;
+
+ // Gradients: 41 points uniformly over a line, mapped onto a diamond.
+ // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)
+
+ detail::tvec3<T> x = T(2) * fract(p * C.w) - T(1);
+ detail::tvec3<T> h = abs(x) - T(0.5);
+ detail::tvec3<T> ox = floor(x + T(0.5));
+ detail::tvec3<T> a0 = x - ox;
+
+ // Normalise gradients implicitly by scaling m
+ // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h );
+ m *= T(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h);
+
+ // Compute final noise value at P
+ detail::tvec3<T> g;
+ g.x = a0.x * x0.x + h.x * x0.y;
+ //g.yz = a0.yz * x12.xz + h.yz * x12.yw;
+ g.y = a0.y * x12.x + h.y * x12.y;
+ g.z = a0.z * x12.z + h.z * x12.w;
+ return T(130) * dot(m, g);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T simplex(detail::tvec3<T> const & v)
+ {
+ detail::tvec2<T> const C(1.0 / 6.0, 1.0 / 3.0);
+ detail::tvec4<T> const D(0.0, 0.5, 1.0, 2.0);
+
+ // First corner
+ detail::tvec3<T> i(floor(v + dot(v, detail::tvec3<T>(C.y))));
+ detail::tvec3<T> x0(v - i + dot(i, detail::tvec3<T>(C.x)));
+
+ // Other corners
+ detail::tvec3<T> g(step(detail::tvec3<T>(x0.y, x0.z, x0.x), x0));
+ detail::tvec3<T> l(T(1) - g);
+ detail::tvec3<T> i1(min(g, detail::tvec3<T>(l.z, l.x, l.y)));
+ detail::tvec3<T> i2(max(g, detail::tvec3<T>(l.z, l.x, l.y)));
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxx;
+ // x1 = x0 - i1 + 1.0 * C.xxx;
+ // x2 = x0 - i2 + 2.0 * C.xxx;
+ // x3 = x0 - 1.0 + 3.0 * C.xxx;
+ detail::tvec3<T> x1(x0 - i1 + C.x);
+ detail::tvec3<T> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y
+ detail::tvec3<T> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y
+
+ // Permutations
+ i = mod289(i);
+ detail::tvec4<T> p(permute(permute(permute(
+ i.z + detail::tvec4<T>(T(0), i1.z, i2.z, T(1))) +
+ i.y + detail::tvec4<T>(T(0), i1.y, i2.y, T(1))) +
+ i.x + detail::tvec4<T>(T(0), i1.x, i2.x, T(1))));
+
+ // Gradients: 7x7 points over a square, mapped onto an octahedron.
+ // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
+ T n_ = T(0.142857142857); // 1.0/7.0
+ detail::tvec3<T> ns(n_ * detail::tvec3<T>(D.w, D.y, D.z) - detail::tvec3<T>(D.x, D.z, D.x));
+
+ detail::tvec4<T> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7)
+
+ detail::tvec4<T> x_(floor(j * ns.z));
+ detail::tvec4<T> y_(floor(j - T(7) * x_)); // mod(j,N)
+
+ detail::tvec4<T> x(x_ * ns.x + ns.y);
+ detail::tvec4<T> y(y_ * ns.x + ns.y);
+ detail::tvec4<T> h(T(1) - abs(x) - abs(y));
+
+ detail::tvec4<T> b0(x.x, x.y, y.x, y.y);
+ detail::tvec4<T> b1(x.z, x.w, y.z, y.w);
+
+ // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
+ // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
+ detail::tvec4<T> s0(floor(b0) * T(2) + T(1));
+ detail::tvec4<T> s1(floor(b1) * T(2) + T(1));
+ detail::tvec4<T> sh(-step(h, detail::tvec4<T>(0.0)));
+
+ detail::tvec4<T> a0 = detail::tvec4<T>(b0.x, b0.z, b0.y, b0.w) + detail::tvec4<T>(s0.x, s0.z, s0.y, s0.w) * detail::tvec4<T>(sh.x, sh.x, sh.y, sh.y);
+ detail::tvec4<T> a1 = detail::tvec4<T>(b1.x, b1.z, b1.y, b1.w) + detail::tvec4<T>(s1.x, s1.z, s1.y, s1.w) * detail::tvec4<T>(sh.z, sh.z, sh.w, sh.w);
+
+ detail::tvec3<T> p0(a0.x, a0.y, h.x);
+ detail::tvec3<T> p1(a0.z, a0.w, h.y);
+ detail::tvec3<T> p2(a1.x, a1.y, h.z);
+ detail::tvec3<T> p3(a1.z, a1.w, h.w);
+
+ // Normalise gradients
+ detail::tvec4<T> norm = taylorInvSqrt(detail::tvec4<T>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+
+ // Mix final noise value
+ detail::tvec4<T> m = max(T(0.6) - detail::tvec4<T>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), T(0));
+ m = m * m;
+ return T(42) * dot(m * m, detail::tvec4<T>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T simplex(detail::tvec4<T> const & v)
+ {
+ detail::tvec4<T> const C(
+ 0.138196601125011, // (5 - sqrt(5))/20 G4
+ 0.276393202250021, // 2 * G4
+ 0.414589803375032, // 3 * G4
+ -0.447213595499958); // -1 + 4 * G4
+
+ // (sqrt(5) - 1)/4 = F4, used once below
+ T const F4 = T(0.309016994374947451);
+
+ // First corner
+ detail::tvec4<T> i = floor(v + dot(v, vec4(F4)));
+ detail::tvec4<T> x0 = v - i + dot(i, vec4(C.x));
+
+ // Other corners
+
+ // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)
+ detail::tvec4<T> i0;
+ detail::tvec3<T> isX = step(detail::tvec3<T>(x0.y, x0.z, x0.w), detail::tvec3<T>(x0.x));
+ detail::tvec3<T> isYZ = step(detail::tvec3<T>(x0.z, x0.w, x0.w), detail::tvec3<T>(x0.y, x0.y, x0.z));
+ // i0.x = dot(isX, vec3(1.0));
+ //i0.x = isX.x + isX.y + isX.z;
+ //i0.yzw = T(1) - isX;
+ i0 = detail::tvec4<T>(isX.x + isX.y + isX.z, T(1) - isX);
+ // i0.y += dot(isYZ.xy, vec2(1.0));
+ i0.y += isYZ.x + isYZ.y;
+ //i0.zw += 1.0 - detail::tvec2<T>(isYZ.x, isYZ.y);
+ i0.z += T(1) - isYZ.x;
+ i0.w += T(1) - isYZ.y;
+ i0.z += isYZ.z;
+ i0.w += T(1) - isYZ.z;
+
+ // i0 now contains the unique values 0,1,2,3 in each channel
+ detail::tvec4<T> i3 = clamp(i0, 0.0, 1.0);
+ detail::tvec4<T> i2 = clamp(i0 - 1.0, 0.0, 1.0);
+ detail::tvec4<T> i1 = clamp(i0 - 2.0, 0.0, 1.0);
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxxx
+ // x1 = x0 - i1 + 0.0 * C.xxxx
+ // x2 = x0 - i2 + 0.0 * C.xxxx
+ // x3 = x0 - i3 + 0.0 * C.xxxx
+ // x4 = x0 - 1.0 + 4.0 * C.xxxx
+ detail::tvec4<T> x1 = x0 - i1 + C.x;
+ detail::tvec4<T> x2 = x0 - i2 + C.y;
+ detail::tvec4<T> x3 = x0 - i3 + C.z;
+ detail::tvec4<T> x4 = x0 + C.w;
+
+ // Permutations
+ i = mod(i, T(289));
+ T j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x);
+ detail::tvec4<T> j1 = permute(permute(permute(permute(
+ i.w + detail::tvec4<T>(i1.w, i2.w, i3.w, T(1)))
+ + i.z + detail::tvec4<T>(i1.z, i2.z, i3.z, T(1)))
+ + i.y + detail::tvec4<T>(i1.y, i2.y, i3.y, T(1)))
+ + i.x + detail::tvec4<T>(i1.x, i2.x, i3.x, T(1)));
+
+ // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope
+ // 7*7*6 = 294, which is close to the ring size 17*17 = 289.
+ detail::tvec4<T> ip = detail::tvec4<T>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0));
+
+ detail::tvec4<T> p0 = grad4(j0, ip);
+ detail::tvec4<T> p1 = grad4(j1.x, ip);
+ detail::tvec4<T> p2 = grad4(j1.y, ip);
+ detail::tvec4<T> p3 = grad4(j1.z, ip);
+ detail::tvec4<T> p4 = grad4(j1.w, ip);
+
+ // Normalise gradients
+ detail::tvec4<T> norm = taylorInvSqrt(detail::tvec4<T>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+ p4 *= taylorInvSqrt(dot(p4, p4));
+
+ // Mix contributions from the five corners
+ detail::tvec3<T> m0 = max(T(0.6) - detail::tvec3<T>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), T(0));
+ detail::tvec2<T> m1 = max(T(0.6) - detail::tvec2<T>(dot(x3, x3), dot(x4, x4) ), T(0));
+ m0 = m0 * m0;
+ m1 = m1 * m1;
+ return T(49) *
+ (dot(m0 * m0, detail::tvec3<T>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) +
+ dot(m1 * m1, detail::tvec2<T>(dot(p3, x3), dot(p4, x4))));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/quaternion.hpp b/include/gal/opengl/glm/gtc/quaternion.hpp
new file mode 100644
index 0000000..705d3d3
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/quaternion.hpp
@@ -0,0 +1,381 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_quaternion
+/// @file glm/gtc/quaternion.hpp
+/// @date 2009-05-21 / 2012-12-20
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_constants (dependence)
+///
+/// @defgroup gtc_quaternion GLM_GTC_quaternion
+/// @ingroup gtc
+///
+/// @brief Defines a templated quaternion type and several quaternion operations.
+///
+/// <glm/gtc/quaternion.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_quaternion
+#define GLM_GTC_quaternion GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+#include "../gtc/constants.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_quaternion extension included")
+#endif
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ struct tquat// : public genType<T, tquat>
+ {
+ enum ctor{null};
+
+ typedef T value_type;
+ typedef std::size_t size_type;
+
+ public:
+ value_type x, y, z, w;
+
+ GLM_FUNC_DECL size_type length() const;
+
+ // Constructors
+ tquat();
+ explicit tquat(
+ value_type const & s,
+ glm::detail::tvec3<T> const & v);
+ explicit tquat(
+ value_type const & w,
+ value_type const & x,
+ value_type const & y,
+ value_type const & z);
+
+ // Convertions
+
+ /// Build a quaternion from euler angles (pitch, yaw, roll), in radians.
+ explicit tquat(
+ tvec3<T> const & eulerAngles);
+ explicit tquat(
+ tmat3x3<T> const & m);
+ explicit tquat(
+ tmat4x4<T> const & m);
+
+ // Accesses
+ value_type & operator[](int i);
+ value_type const & operator[](int i) const;
+
+ // Operators
+ tquat<T> & operator*=(value_type const & s);
+ tquat<T> & operator/=(value_type const & s);
+ };
+
+ template <typename T>
+ detail::tquat<T> operator- (
+ detail::tquat<T> const & q);
+
+ template <typename T>
+ detail::tquat<T> operator+ (
+ detail::tquat<T> const & q,
+ detail::tquat<T> const & p);
+
+ template <typename T>
+ detail::tquat<T> operator* (
+ detail::tquat<T> const & q,
+ detail::tquat<T> const & p);
+
+ template <typename T>
+ detail::tvec3<T> operator* (
+ detail::tquat<T> const & q,
+ detail::tvec3<T> const & v);
+
+ template <typename T>
+ detail::tvec3<T> operator* (
+ detail::tvec3<T> const & v,
+ detail::tquat<T> const & q);
+
+ template <typename T>
+ detail::tvec4<T> operator* (
+ detail::tquat<T> const & q,
+ detail::tvec4<T> const & v);
+
+ template <typename T>
+ detail::tvec4<T> operator* (
+ detail::tvec4<T> const & v,
+ detail::tquat<T> const & q);
+
+ template <typename T>
+ detail::tquat<T> operator* (
+ detail::tquat<T> const & q,
+ typename detail::tquat<T>::value_type const & s);
+
+ template <typename T>
+ detail::tquat<T> operator* (
+ typename detail::tquat<T>::value_type const & s,
+ detail::tquat<T> const & q);
+
+ template <typename T>
+ detail::tquat<T> operator/ (
+ detail::tquat<T> const & q,
+ typename detail::tquat<T>::value_type const & s);
+
+} //namespace detail
+
+ /// @addtogroup gtc_quaternion
+ /// @{
+
+ /// Returns the length of the quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ T length(
+ detail::tquat<T> const & q);
+
+ /// Returns the normalized quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> normalize(
+ detail::tquat<T> const & q);
+
+ /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ T dot(
+ detail::tquat<T> const & q1,
+ detail::tquat<T> const & q2);
+
+ /// Spherical linear interpolation of two quaternions.
+ /// The interpolation is oriented and the rotation is performed at constant speed.
+ /// For short path spherical linear interpolation, use the slerp function.
+ ///
+ /// @param x A quaternion
+ /// @param y A quaternion
+ /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].
+ /// @tparam T Value type used to build the quaternion. Supported: half, float or double.
+ /// @see gtc_quaternion
+ /// @see - slerp(detail::tquat<T> const & x, detail::tquat<T> const & y, T const & a)
+ template <typename T>
+ detail::tquat<T> mix(
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a);
+
+ /// Linear interpolation of two quaternions.
+ /// The interpolation is oriented.
+ ///
+ /// @param x A quaternion
+ /// @param y A quaternion
+ /// @param a Interpolation factor. The interpolation is defined in the range [0, 1].
+ /// @tparam T Value type used to build the quaternion. Supported: half, float or double.
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> lerp(
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a);
+
+ /// Spherical linear interpolation of two quaternions.
+ /// The interpolation always take the short path and the rotation is performed at constant speed.
+ ///
+ /// @param x A quaternion
+ /// @param y A quaternion
+ /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].
+ /// @tparam T Value type used to build the quaternion. Supported: half, float or double.
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> slerp(
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a);
+
+ /// Returns the q conjugate.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> conjugate(
+ detail::tquat<T> const & q);
+
+ /// Returns the q inverse.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> inverse(
+ detail::tquat<T> const & q);
+
+ /// Rotates a quaternion from an vector of 3 components axis and an angle.
+ ///
+ /// @param q Source orientation
+ /// @param angle Angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param axis Axis of the rotation, must be normalized.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> rotate(
+ detail::tquat<T> const & q,
+ typename detail::tquat<T>::value_type const & angle,
+ detail::tvec3<T> const & axis);
+
+ /// Returns euler angles, yitch as x, yaw as y, roll as z.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tvec3<T> eulerAngles(
+ detail::tquat<T> const & x);
+
+ /// Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ valType roll(
+ detail::tquat<valType> const & x);
+
+ /// Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ valType pitch(
+ detail::tquat<valType> const & x);
+
+ /// Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ valType yaw(
+ detail::tquat<valType> const & x);
+
+ /// Converts a quaternion to a 3 * 3 matrix.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tmat3x3<T> mat3_cast(
+ detail::tquat<T> const & x);
+
+ /// Converts a quaternion to a 4 * 4 matrix.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tmat4x4<T> mat4_cast(
+ detail::tquat<T> const & x);
+
+ /// Converts a 3 * 3 matrix to a quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> quat_cast(
+ detail::tmat3x3<T> const & x);
+
+ /// Converts a 4 * 4 matrix to a quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T>
+ detail::tquat<T> quat_cast(
+ detail::tmat4x4<T> const & x);
+
+ /// Returns the quaternion rotation angle.
+ ///
+ /// @see gtc_quaternion
+ template <typename valType>
+ valType angle(
+ detail::tquat<valType> const & x);
+
+ /// Returns the q rotation axis.
+ ///
+ /// @see gtc_quaternion
+ template <typename valType>
+ detail::tvec3<valType> axis(
+ detail::tquat<valType> const & x);
+
+ /// Build a quaternion from an angle and a normalized axis.
+ ///
+ /// @param angle Angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param x x component of the x-axis, x, y, z must be a normalized axis
+ /// @param y y component of the y-axis, x, y, z must be a normalized axis
+ /// @param z z component of the z-axis, x, y, z must be a normalized axis
+ ///
+ /// @see gtc_quaternion
+ template <typename valType>
+ detail::tquat<valType> angleAxis(
+ valType const & angle,
+ valType const & x,
+ valType const & y,
+ valType const & z);
+
+ /// Build a quaternion from an angle and a normalized axis.
+ ///
+ /// @param angle Angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param axis Axis of the quaternion, must be normalized.
+ ///
+ /// @see gtc_quaternion
+ template <typename valType>
+ detail::tquat<valType> angleAxis(
+ valType const & angle,
+ detail::tvec3<valType> const & axis);
+
+ /// Quaternion of floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<float> quat;
+
+ /// Quaternion of half-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<detail::half> hquat;
+
+ /// Quaternion of single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<float> fquat;
+
+ /// Quaternion of double-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<double> dquat;
+
+ /// Quaternion of low precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<lowp_float> lowp_quat;
+
+ /// Quaternion of medium precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<mediump_float> mediump_quat;
+
+ /// Quaternion of high precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef detail::tquat<highp_float> highp_quat;
+
+ /// @}
+} //namespace glm
+
+#include "quaternion.inl"
+
+#endif//GLM_GTC_quaternion
diff --git a/include/gal/opengl/glm/gtc/quaternion.inl b/include/gal/opengl/glm/gtc/quaternion.inl
new file mode 100644
index 0000000..8b83865
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/quaternion.inl
@@ -0,0 +1,792 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_quaternion
+/// @file glm/gtc/quaternion.inl
+/// @date 2009-05-21 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <limits>
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tquat<T>::size_type tquat<T>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T>::tquat() :
+ x(0),
+ y(0),
+ z(0),
+ w(1)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T>::tquat
+ (
+ value_type const & s,
+ tvec3<T> const & v
+ ) :
+ x(v.x),
+ y(v.y),
+ z(v.z),
+ w(s)
+ {}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T>::tquat
+ (
+ value_type const & w,
+ value_type const & x,
+ value_type const & y,
+ value_type const & z
+ ) :
+ x(x),
+ y(y),
+ z(z),
+ w(w)
+ {}
+
+ //////////////////////////////////////////////////////////////
+ // tquat conversions
+
+ //template <typename valType>
+ //GLM_FUNC_QUALIFIER tquat<valType>::tquat
+ //(
+ // valType const & pitch,
+ // valType const & yaw,
+ // valType const & roll
+ //)
+ //{
+ // tvec3<valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5));
+ // tvec3<valType> c = glm::cos(eulerAngle * valType(0.5));
+ // tvec3<valType> s = glm::sin(eulerAngle * valType(0.5));
+ //
+ // this->w = c.x * c.y * c.z + s.x * s.y * s.z;
+ // this->x = s.x * c.y * c.z - c.x * s.y * s.z;
+ // this->y = c.x * s.y * c.z + s.x * c.y * s.z;
+ // this->z = c.x * c.y * s.z - s.x * s.y * c.z;
+ //}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T>::tquat
+ (
+ tvec3<T> const & eulerAngle
+ )
+ {
+ tvec3<T> c = glm::cos(eulerAngle * value_type(0.5));
+ tvec3<T> s = glm::sin(eulerAngle * value_type(0.5));
+
+ this->w = c.x * c.y * c.z + s.x * s.y * s.z;
+ this->x = s.x * c.y * c.z - c.x * s.y * s.z;
+ this->y = c.x * s.y * c.z + s.x * c.y * s.z;
+ this->z = c.x * c.y * s.z - s.x * s.y * c.z;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T>::tquat
+ (
+ tmat3x3<T> const & m
+ )
+ {
+ *this = quat_cast(m);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T>::tquat
+ (
+ tmat4x4<T> const & m
+ )
+ {
+ *this = quat_cast(m);
+ }
+
+ //////////////////////////////////////////////////////////////
+ // tquat<T> accesses
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tquat<T>::value_type & tquat<T>::operator [] (int i)
+ {
+ return (&x)[i];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER typename tquat<T>::value_type const & tquat<T>::operator [] (int i) const
+ {
+ return (&x)[i];
+ }
+
+ //////////////////////////////////////////////////////////////
+ // tquat<valType> operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T> & tquat<T>::operator *=
+ (
+ value_type const & s
+ )
+ {
+ this->w *= s;
+ this->x *= s;
+ this->y *= s;
+ this->z *= s;
+ return *this;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T> & tquat<T>::operator /=
+ (
+ value_type const & s
+ )
+ {
+ this->w /= s;
+ this->x /= s;
+ this->y /= s;
+ this->z /= s;
+ return *this;
+ }
+
+ //////////////////////////////////////////////////////////////
+ // tquat<valType> external operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> operator-
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return detail::tquat<T>(-q.w, -q.x, -q.y, -q.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> operator+
+ (
+ detail::tquat<T> const & q,
+ detail::tquat<T> const & p
+ )
+ {
+ return detail::tquat<T>(
+ q.w + p.w,
+ q.x + p.x,
+ q.y + p.y,
+ q.z + p.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> operator*
+ (
+ detail::tquat<T> const & q,
+ detail::tquat<T> const & p
+ )
+ {
+ return detail::tquat<T>(
+ q.w * p.w - q.x * p.x - q.y * p.y - q.z * p.z,
+ q.w * p.x + q.x * p.w + q.y * p.z - q.z * p.y,
+ q.w * p.y + q.y * p.w + q.z * p.x - q.x * p.z,
+ q.w * p.z + q.z * p.w + q.x * p.y - q.y * p.x);
+ }
+
+ // Transformation
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> operator*
+ (
+ detail::tquat<T> const & q,
+ detail::tvec3<T> const & v
+ )
+ {
+ typename detail::tquat<T>::value_type Two(2);
+
+ detail::tvec3<T> uv, uuv;
+ detail::tvec3<T> QuatVector(q.x, q.y, q.z);
+ uv = glm::cross(QuatVector, v);
+ uuv = glm::cross(QuatVector, uv);
+ uv *= (Two * q.w);
+ uuv *= Two;
+
+ return v + uv + uuv;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> operator*
+ (
+ detail::tvec3<T> const & v,
+ detail::tquat<T> const & q
+ )
+ {
+ return inverse(q) * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> operator*
+ (
+ detail::tquat<T> const & q,
+ detail::tvec4<T> const & v
+ )
+ {
+ return detail::tvec4<T>(q * detail::tvec3<T>(v), v.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> operator*
+ (
+ detail::tvec4<T> const & v,
+ detail::tquat<T> const & q
+ )
+ {
+ return inverse(q) * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> operator*
+ (
+ detail::tquat<T> const & q,
+ typename detail::tquat<T>::value_type const & s
+ )
+ {
+ return detail::tquat<T>(
+ q.w * s, q.x * s, q.y * s, q.z * s);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> operator*
+ (
+ typename detail::tquat<T>::value_type const & s,
+ detail::tquat<T> const & q
+ )
+ {
+ return q * s;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> operator/
+ (
+ detail::tquat<T> const & q,
+ typename detail::tquat<T>::value_type const & s
+ )
+ {
+ return detail::tquat<T>(
+ q.w / s, q.x / s, q.y / s, q.z / s);
+ }
+
+ //////////////////////////////////////
+ // Boolean operators
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator==
+ (
+ detail::tquat<T> const & q1,
+ detail::tquat<T> const & q2
+ )
+ {
+ return (q1.x == q2.x) && (q1.y == q2.y) && (q1.z == q2.z) && (q1.w == q2.w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool operator!=
+ (
+ detail::tquat<T> const & q1,
+ detail::tquat<T> const & q2
+ )
+ {
+ return (q1.x != q2.x) || (q1.y != q2.y) || (q1.z != q2.z) || (q1.w != q2.w);
+ }
+
+}//namespace detail
+
+ ////////////////////////////////////////////////////////
+ template <typename T>
+ GLM_FUNC_QUALIFIER T length
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return glm::sqrt(dot(q, q));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> normalize
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ typename detail::tquat<T>::value_type len = length(q);
+ if(len <= typename detail::tquat<T>::value_type(0)) // Problem
+ return detail::tquat<T>(1, 0, 0, 0);
+ typename detail::tquat<T>::value_type oneOverLen = typename detail::tquat<T>::value_type(1) / len;
+ return detail::tquat<T>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T dot
+ (
+ detail::tquat<T> const & q1,
+ detail::tquat<T> const & q2
+ )
+ {
+ return q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> cross
+ (
+ detail::tquat<T> const & q1,
+ detail::tquat<T> const & q2
+ )
+ {
+ return detail::tquat<T>(
+ q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,
+ q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,
+ q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z,
+ q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x);
+ }
+/*
+ // (x * sin(1 - a) * angle / sin(angle)) + (y * sin(a) * angle / sin(angle))
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> mix
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ typename detail::tquat<T>::value_type const & a
+ )
+ {
+ if(a <= typename detail::tquat<T>::value_type(0)) return x;
+ if(a >= typename detail::tquat<T>::value_type(1)) return y;
+
+ float fCos = dot(x, y);
+ detail::tquat<T> y2(y); //BUG!!! tquat<T> y2;
+ if(fCos < typename detail::tquat<T>::value_type(0))
+ {
+ y2 = -y;
+ fCos = -fCos;
+ }
+
+ //if(fCos > 1.0f) // problem
+ float k0, k1;
+ if(fCos > typename detail::tquat<T>::value_type(0.9999))
+ {
+ k0 = typename detail::tquat<T>::value_type(1) - a;
+ k1 = typename detail::tquat<T>::value_type(0) + a; //BUG!!! 1.0f + a;
+ }
+ else
+ {
+ typename detail::tquat<T>::value_type fSin = sqrt(T(1) - fCos * fCos);
+ typename detail::tquat<T>::value_type fAngle = atan(fSin, fCos);
+ typename detail::tquat<T>::value_type fOneOverSin = T(1) / fSin;
+ k0 = sin((typename detail::tquat<T>::value_type(1) - a) * fAngle) * fOneOverSin;
+ k1 = sin((typename detail::tquat<T>::value_type(0) + a) * fAngle) * fOneOverSin;
+ }
+
+ return detail::tquat<T>(
+ k0 * x.w + k1 * y2.w,
+ k0 * x.x + k1 * y2.x,
+ k0 * x.y + k1 * y2.y,
+ k0 * x.z + k1 * y2.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> mix2
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a
+ )
+ {
+ bool flip = false;
+ if(a <= T(0)) return x;
+ if(a >= T(1)) return y;
+
+ T cos_t = dot(x, y);
+ if(cos_t < T(0))
+ {
+ cos_t = -cos_t;
+ flip = true;
+ }
+
+ T alpha(0), beta(0);
+
+ if(T(1) - cos_t < 1e-7)
+ beta = T(1) - alpha;
+ else
+ {
+ T theta = acos(cos_t);
+ T sin_t = sin(theta);
+ beta = sin(theta * (T(1) - alpha)) / sin_t;
+ alpha = sin(alpha * theta) / sin_t;
+ }
+
+ if(flip)
+ alpha = -alpha;
+
+ return normalize(beta * x + alpha * y);
+ }
+*/
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> mix
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a
+ )
+ {
+ T cosTheta = dot(x, y);
+
+ // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator
+ if(cosTheta > T(1) - epsilon<T>())
+ {
+ // Linear interpolation
+ return detail::tquat<T>(
+ mix(x.w, y.w, a),
+ mix(x.x, y.x, a),
+ mix(x.y, y.y, a),
+ mix(x.z, y.z, a));
+ }
+ else
+ {
+ // Essential Mathematics, page 467
+ T angle = acos(cosTheta);
+ return (sin((T(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle);
+ }
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> lerp
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a
+ )
+ {
+ // Lerp is only defined in [0, 1]
+ assert(a >= T(0));
+ assert(a <= T(1));
+
+ return x * (T(1) - a) + (y * a);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> slerp
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a
+ )
+ {
+ detail::tquat<T> z = y;
+
+ T cosTheta = dot(x, y);
+
+ // If cosTheta < 0, the interpolation will take the long way around the sphere.
+ // To fix this, one quat must be negated.
+ if (cosTheta < T(0))
+ {
+ z = -y;
+ cosTheta = -cosTheta;
+ }
+
+ // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator
+ if(cosTheta > T(1) - epsilon<T>())
+ {
+ // Linear interpolation
+ return detail::tquat<T>(
+ mix(x.w, z.w, a),
+ mix(x.x, z.x, a),
+ mix(x.y, z.y, a),
+ mix(x.z, z.z, a));
+ }
+ else
+ {
+ // Essential Mathematics, page 467
+ T angle = acos(cosTheta);
+ return (sin((T(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle);
+ }
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> conjugate
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return detail::tquat<T>(q.w, -q.x, -q.y, -q.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> inverse
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return conjugate(q) / dot(q, q);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> rotate
+ (
+ detail::tquat<T> const & q,
+ typename detail::tquat<T>::value_type const & angle,
+ detail::tvec3<T> const & v
+ )
+ {
+ detail::tvec3<T> Tmp = v;
+
+ // Axis of rotation must be normalised
+ typename detail::tquat<T>::value_type len = glm::length(Tmp);
+ if(abs(len - T(1)) > T(0.001))
+ {
+ T oneOverLen = T(1) / len;
+ Tmp.x *= oneOverLen;
+ Tmp.y *= oneOverLen;
+ Tmp.z *= oneOverLen;
+ }
+
+#ifdef GLM_FORCE_RADIANS
+ typename detail::tquat<T>::value_type const AngleRad(angle);
+#else
+ typename detail::tquat<T>::value_type const AngleRad = radians(angle);
+#endif
+ typename detail::tquat<T>::value_type const Sin = sin(AngleRad * T(0.5));
+
+ return q * detail::tquat<T>(cos(AngleRad * T(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);
+ //return gtc::quaternion::cross(q, detail::tquat<T>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> eulerAngles
+ (
+ detail::tquat<T> const & x
+ )
+ {
+ return detail::tvec3<T>(pitch(x), yaw(x), roll(x));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType roll
+ (
+ detail::tquat<valType> const & q
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ return valType(atan2(valType(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z));
+#else
+ return glm::degrees(atan(valType(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z));
+#endif
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType pitch
+ (
+ detail::tquat<valType> const & q
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ return valType(atan2(valType(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z));
+#else
+ return glm::degrees(atan(valType(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z));
+#endif
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType yaw
+ (
+ detail::tquat<valType> const & q
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ return asin(valType(-2) * (q.x * q.z - q.w * q.y));
+#else
+ return glm::degrees(asin(valType(-2) * (q.x * q.z - q.w * q.y)));
+#endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> mat3_cast
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ detail::tmat3x3<T> Result(T(1));
+ Result[0][0] = 1 - 2 * q.y * q.y - 2 * q.z * q.z;
+ Result[0][1] = 2 * q.x * q.y + 2 * q.w * q.z;
+ Result[0][2] = 2 * q.x * q.z - 2 * q.w * q.y;
+
+ Result[1][0] = 2 * q.x * q.y - 2 * q.w * q.z;
+ Result[1][1] = 1 - 2 * q.x * q.x - 2 * q.z * q.z;
+ Result[1][2] = 2 * q.y * q.z + 2 * q.w * q.x;
+
+ Result[2][0] = 2 * q.x * q.z + 2 * q.w * q.y;
+ Result[2][1] = 2 * q.y * q.z - 2 * q.w * q.x;
+ Result[2][2] = 1 - 2 * q.x * q.x - 2 * q.y * q.y;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> mat4_cast
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return detail::tmat4x4<T>(mat3_cast(q));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> quat_cast
+ (
+ detail::tmat3x3<T> const & m
+ )
+ {
+ typename detail::tquat<T>::value_type fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];
+ typename detail::tquat<T>::value_type fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];
+ typename detail::tquat<T>::value_type fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];
+ typename detail::tquat<T>::value_type fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];
+
+ int biggestIndex = 0;
+ typename detail::tquat<T>::value_type fourBiggestSquaredMinus1 = fourWSquaredMinus1;
+ if(fourXSquaredMinus1 > fourBiggestSquaredMinus1)
+ {
+ fourBiggestSquaredMinus1 = fourXSquaredMinus1;
+ biggestIndex = 1;
+ }
+ if(fourYSquaredMinus1 > fourBiggestSquaredMinus1)
+ {
+ fourBiggestSquaredMinus1 = fourYSquaredMinus1;
+ biggestIndex = 2;
+ }
+ if(fourZSquaredMinus1 > fourBiggestSquaredMinus1)
+ {
+ fourBiggestSquaredMinus1 = fourZSquaredMinus1;
+ biggestIndex = 3;
+ }
+
+ typename detail::tquat<T>::value_type biggestVal = sqrt(fourBiggestSquaredMinus1 + T(1)) * T(0.5);
+ typename detail::tquat<T>::value_type mult = T(0.25) / biggestVal;
+
+ detail::tquat<T> Result;
+ switch(biggestIndex)
+ {
+ case 0:
+ Result.w = biggestVal;
+ Result.x = (m[1][2] - m[2][1]) * mult;
+ Result.y = (m[2][0] - m[0][2]) * mult;
+ Result.z = (m[0][1] - m[1][0]) * mult;
+ break;
+ case 1:
+ Result.w = (m[1][2] - m[2][1]) * mult;
+ Result.x = biggestVal;
+ Result.y = (m[0][1] + m[1][0]) * mult;
+ Result.z = (m[2][0] + m[0][2]) * mult;
+ break;
+ case 2:
+ Result.w = (m[2][0] - m[0][2]) * mult;
+ Result.x = (m[0][1] + m[1][0]) * mult;
+ Result.y = biggestVal;
+ Result.z = (m[1][2] + m[2][1]) * mult;
+ break;
+ case 3:
+ Result.w = (m[0][1] - m[1][0]) * mult;
+ Result.x = (m[2][0] + m[0][2]) * mult;
+ Result.y = (m[1][2] + m[2][1]) * mult;
+ Result.z = biggestVal;
+ break;
+
+ default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity.
+ assert(false);
+ break;
+ }
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> quat_cast
+ (
+ detail::tmat4x4<T> const & m4
+ )
+ {
+ return quat_cast(detail::tmat3x3<T>(m4));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T angle
+ (
+ detail::tquat<T> const & x
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ return acos(x.w) * T(2);
+#else
+ return glm::degrees(acos(x.w) * T(2));
+#endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> axis
+ (
+ detail::tquat<T> const & x
+ )
+ {
+ T tmp1 = T(1) - x.w * x.w;
+ if(tmp1 <= T(0))
+ return detail::tvec3<T>(0, 0, 1);
+ T tmp2 = T(1) / sqrt(tmp1);
+ return detail::tvec3<T>(x.x * tmp2, x.y * tmp2, x.z * tmp2);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tquat<valType> angleAxis
+ (
+ valType const & angle,
+ valType const & x,
+ valType const & y,
+ valType const & z
+ )
+ {
+ return angleAxis(angle, detail::tvec3<valType>(x, y, z));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tquat<valType> angleAxis
+ (
+ valType const & angle,
+ detail::tvec3<valType> const & v
+ )
+ {
+ detail::tquat<valType> result;
+
+#ifdef GLM_FORCE_RADIANS
+ valType a(angle);
+#else
+ valType a(glm::radians(angle));
+#endif
+ valType s = glm::sin(a * valType(0.5));
+
+ result.w = glm::cos(a * valType(0.5));
+ result.x = v.x * s;
+ result.y = v.y * s;
+ result.z = v.z * s;
+ return result;
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/random.hpp b/include/gal/opengl/glm/gtc/random.hpp
new file mode 100644
index 0000000..3cda59c
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/random.hpp
@@ -0,0 +1,114 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_random
+/// @file glm/gtc/random.hpp
+/// @date 2011-09-18 / 2011-09-18
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtx_random (extended)
+///
+/// @defgroup gtc_random GLM_GTC_random
+/// @ingroup gtc
+///
+/// @brief Generate random number from various distribution methods.
+///
+/// <glm/gtc/random.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_random
+#define GLM_GTC_random GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_random extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_random
+ /// @{
+
+ /// Generate random numbers in the interval [Min, Max], according a linear distribution
+ ///
+ /// @param Min
+ /// @param Max
+ /// @tparam genType Value type. Currently supported: half (not recommanded), float or double scalars and vectors.
+ /// @see gtc_random
+ template <typename genType>
+ genType linearRand(
+ genType const & Min,
+ genType const & Max);
+
+ /// Generate random numbers in the interval [Min, Max], according a gaussian distribution
+ ///
+ /// @param Mean
+ /// @param Deviation
+ /// @see gtc_random
+ template <typename genType>
+ genType gaussRand(
+ genType const & Mean,
+ genType const & Deviation);
+
+ /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ detail::tvec2<T> circularRand(
+ T const & Radius);
+
+ /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ detail::tvec3<T> sphericalRand(
+ T const & Radius);
+
+ /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ detail::tvec2<T> diskRand(
+ T const & Radius);
+
+ /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> ballRand(
+ T const & Radius);
+
+ /// @}
+}//namespace glm
+
+#include "random.inl"
+
+#endif//GLM_GTC_random
diff --git a/include/gal/opengl/glm/gtc/random.inl b/include/gal/opengl/glm/gtc/random.inl
new file mode 100644
index 0000000..ca1bd7e
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/random.inl
@@ -0,0 +1,170 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_random
+/// @file glm/gtc/random.inl
+/// @date 2011-09-19 / 2012-04-07
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <ctime>
+#include <cassert>
+
+namespace glm{
+namespace detail
+{
+ struct compute_linearRand
+ {
+ template <typename T>
+ GLM_FUNC_QUALIFIER T operator() (T const & Min, T const & Max) const;
+/*
+ {
+ GLM_STATIC_ASSERT(0, "'linearRand' invalid template parameter type. GLM_GTC_random only supports floating-point template types.");
+ return Min;
+ }
+*/
+ };
+
+ template <>
+ GLM_FUNC_QUALIFIER half compute_linearRand::operator()<half> (half const & Min, half const & Max) const
+ {
+ return half(float(std::rand()) / float(RAND_MAX) * (float(Max) - float(Min)) + float(Min));
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER float compute_linearRand::operator()<float> (float const & Min, float const & Max) const
+ {
+ return float(std::rand()) / float(RAND_MAX) * (Max - Min) + Min;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double compute_linearRand::operator()<double> (double const & Min, double const & Max) const
+ {
+ return double(std::rand()) / double(RAND_MAX) * (Max - Min) + Min;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER long double compute_linearRand::operator()<long double> (long double const & Min, long double const & Max) const
+ {
+ return (long double)(std::rand()) / (long double)(RAND_MAX) * (Max - Min) + Min;
+ }
+}//namespace detail
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType linearRand
+ (
+ genType const & Min,
+ genType const & Max
+ )
+ {
+ return detail::compute_linearRand()(Min, Max);
+ }
+
+ VECTORIZE_VEC_VEC(linearRand)
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType gaussRand
+ (
+ genType const & Mean,
+ genType const & Deviation
+ )
+ {
+ genType w, x1, x2;
+
+ do
+ {
+ x1 = linearRand(genType(-1), genType(1));
+ x2 = linearRand(genType(-1), genType(1));
+
+ w = x1 * x1 + x2 * x2;
+ } while(w > genType(1));
+
+ return x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean;
+ }
+
+ VECTORIZE_VEC_VEC(gaussRand)
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> diskRand
+ (
+ T const & Radius
+ )
+ {
+ detail::tvec2<T> Result(T(0));
+ T LenRadius(T(0));
+
+ do
+ {
+ Result = linearRand(detail::tvec2<T>(-Radius), detail::tvec2<T>(Radius));
+ LenRadius = length(Result);
+ }
+ while(LenRadius > Radius);
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> ballRand
+ (
+ T const & Radius
+ )
+ {
+ detail::tvec3<T> Result(T(0));
+ T LenRadius(T(0));
+
+ do
+ {
+ Result = linearRand(detail::tvec3<T>(-Radius), detail::tvec3<T>(Radius));
+ LenRadius = length(Result);
+ }
+ while(LenRadius > Radius);
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> circularRand
+ (
+ T const & Radius
+ )
+ {
+ T a = linearRand(T(0), T(6.283185307179586476925286766559f));
+ return detail::tvec2<T>(cos(a), sin(a)) * Radius;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> sphericalRand
+ (
+ T const & Radius
+ )
+ {
+ T z = linearRand(T(-1), T(1));
+ T a = linearRand(T(0), T(6.283185307179586476925286766559f));
+
+ T r = sqrt(T(1) - z * z);
+
+ T x = r * cos(a);
+ T y = r * sin(a);
+
+ return detail::tvec3<T>(x, y, z) * Radius;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/reciprocal.hpp b/include/gal/opengl/glm/gtc/reciprocal.hpp
new file mode 100644
index 0000000..4b04b66
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/reciprocal.hpp
@@ -0,0 +1,133 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_reciprocal
+/// @file glm/gtc/reciprocal.hpp
+/// @date 2008-10-09 / 2012-01-25
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_reciprocal GLM_GTC_reciprocal
+/// @ingroup gtc
+///
+/// @brief Define secant, cosecant and cotangent functions.
+///
+/// <glm/gtc/reciprocal.hpp> need to be included to use these features.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_reciprocal
+#define GLM_GTC_reciprocal GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_reciprocal extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_reciprocal
+ /// @{
+
+ /// Secant function.
+ /// hypotenuse / adjacent or 1 / cos(x)
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType sec(genType const & angle);
+
+ /// Cosecant function.
+ /// hypotenuse / opposite or 1 / sin(x)
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType csc(genType const & angle);
+
+ /// Cotangent function.
+ /// adjacent / opposite or 1 / tan(x)
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType cot(genType const & angle);
+
+ /// Inverse secant function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType asec(genType const & x);
+
+ /// Inverse cosecant function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType acsc(genType const & x);
+
+ /// Inverse cotangent function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType acot(genType const & x);
+
+ /// Secant hyperbolic function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType sech(genType const & angle);
+
+ /// Cosecant hyperbolic function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType csch(genType const & angle);
+
+ /// Cotangent hyperbolic function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType coth(genType const & angle);
+
+ /// Inverse secant hyperbolic function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType asech(genType const & x);
+
+ /// Inverse cosecant hyperbolic function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType acsch(genType const & x);
+
+ /// Inverse cotangent hyperbolic function.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ genType acoth(genType const & x);
+
+ /// @}
+}//namespace glm
+
+#include "reciprocal.inl"
+
+#endif//GLM_GTC_reciprocal
diff --git a/include/gal/opengl/glm/gtc/reciprocal.inl b/include/gal/opengl/glm/gtc/reciprocal.inl
new file mode 100644
index 0000000..84f5cb7
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/reciprocal.inl
@@ -0,0 +1,199 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_reciprocal
+/// @file glm/gtc/reciprocal.inl
+/// @date 2008-10-09 / 2012-04-07
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // sec
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sec
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sec' only accept floating-point values");
+
+ return genType(1) / glm::cos(angle);
+ }
+
+ VECTORIZE_VEC(sec)
+
+ // csc
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType csc
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'csc' only accept floating-point values");
+
+ return genType(1) / glm::sin(angle);
+ }
+
+ VECTORIZE_VEC(csc)
+
+ // cot
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType cot
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cot' only accept floating-point values");
+
+ return genType(1) / glm::tan(angle);
+ }
+
+ VECTORIZE_VEC(cot)
+
+ // asec
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asec
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asec' only accept floating-point values");
+
+ return acos(genType(1) / x);
+ }
+
+ VECTORIZE_VEC(asec)
+
+ // acsc
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acsc
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acsc' only accept floating-point values");
+
+ return asin(genType(1) / x);
+ }
+
+ VECTORIZE_VEC(acsc)
+
+ // acot
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acot
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acot' only accept floating-point values");
+
+ genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);
+ return pi_over_2 - atan(x);
+ }
+
+ VECTORIZE_VEC(acot)
+
+ // sech
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sech
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sech' only accept floating-point values");
+
+ return genType(1) / glm::cosh(angle);
+ }
+
+ VECTORIZE_VEC(sech)
+
+ // csch
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType csch
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'csch' only accept floating-point values");
+
+ return genType(1) / glm::sinh(angle);
+ }
+
+ VECTORIZE_VEC(csch)
+
+ // coth
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType coth
+ (
+ genType const & angle
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'coth' only accept floating-point values");
+
+ return glm::cosh(angle) / glm::sinh(angle);
+ }
+
+ VECTORIZE_VEC(coth)
+
+ // asech
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asech
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asech' only accept floating-point values");
+
+ return acosh(genType(1) / x);
+ }
+
+ VECTORIZE_VEC(asech)
+
+ // acsch
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acsch
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acsch' only accept floating-point values");
+
+ return asinh(genType(1) / x);
+ }
+
+ VECTORIZE_VEC(acsch)
+
+ // acoth
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acoth
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acoth' only accept floating-point values");
+
+ return atanh(genType(1) / x);
+ }
+
+ VECTORIZE_VEC(acoth)
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/swizzle.hpp b/include/gal/opengl/glm/gtc/swizzle.hpp
new file mode 100644
index 0000000..31fdf61
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/swizzle.hpp
@@ -0,0 +1,375 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_swizzle
+/// @file glm/gtc/swizzle.hpp
+/// @date 2010-02-20 / 2011-06-05
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_swizzle GLM_GTC_swizzle
+/// @ingroup gtc
+///
+/// @brief Provide functions to emulate GLSL swizzle operator fonctionalities.
+///
+/// <glm/gtc/swizzle.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_swizzle
+#define GLM_GTC_swizzle GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/type_precision.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_swizzle extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_swizzle
+ /// @{
+
+ template <typename T, template <typename> class vecType>
+ T const & swizzle(
+ vecType<T> const & v,
+ comp x);
+
+ template <typename T, template <typename> class vecType>
+ detail::tvec2<T> const & swizzle(
+ vecType<T> const & v,
+ comp x, comp y);
+
+ template <typename T, template <typename> class vecType>
+ detail::tvec3<T> const & swizzle(
+ vecType<T> const & v,
+ comp x, comp y, comp z);
+
+ template <typename T, template <typename> class vecType>
+ detail::tvec4<T> const & swizzle(
+ vecType<T> const & v,
+ comp x, comp y, comp z, comp w);
+
+ template <typename T, template <typename> class vecType>
+ T & swizzle(
+ vecType<T> & v,
+ comp x);
+
+ template <typename T, template <typename> class vecType>
+ detail::tref2<T> swizzle(
+ vecType<T> & v,
+ comp x, comp y);
+
+ template <typename T, template <typename> class vecType>
+ detail::tref3<T> swizzle(
+ vecType<T> & v,
+ comp x, comp y, comp z);
+
+ template <typename T, template <typename> class vecType>
+ detail::tref4<T> swizzle(
+ vecType<T> & v,
+ comp x, comp y, comp z, comp w);
+
+# define static_swizzle1_const(TYPE, SIZE) \
+ template <comp x> \
+ GLM_FUNC_QUALIFIER TYPE swizzle(detail::tvec##SIZE<TYPE> const & v) \
+ {return v[x];}
+
+# define static_swizzle1_ref(TYPE, SIZE) \
+ template <comp x> \
+ GLM_FUNC_QUALIFIER TYPE& swizzle(detail::tvec##SIZE<TYPE> & v) \
+ {return v[x];}
+
+ static_swizzle1_ref(detail::float16, 2)
+ static_swizzle1_ref(detail::float16, 3)
+ static_swizzle1_ref(detail::float16, 4)
+ static_swizzle1_ref(detail::float32, 2)
+ static_swizzle1_ref(detail::float32, 3)
+ static_swizzle1_ref(detail::float32, 4)
+ static_swizzle1_ref(detail::float64, 2)
+ static_swizzle1_ref(detail::float64, 3)
+ static_swizzle1_ref(detail::float64, 4)
+
+ static_swizzle1_ref(detail::int8, 2)
+ static_swizzle1_ref(detail::int8, 3)
+ static_swizzle1_ref(detail::int8, 4)
+ static_swizzle1_ref(detail::int16, 2)
+ static_swizzle1_ref(detail::int16, 3)
+ static_swizzle1_ref(detail::int16, 4)
+ static_swizzle1_ref(detail::int32, 2)
+ static_swizzle1_ref(detail::int32, 3)
+ static_swizzle1_ref(detail::int32, 4)
+ static_swizzle1_ref(detail::int64, 2)
+ static_swizzle1_ref(detail::int64, 3)
+ static_swizzle1_ref(detail::int64, 4)
+
+ static_swizzle1_ref(detail::uint8, 2)
+ static_swizzle1_ref(detail::uint8, 3)
+ static_swizzle1_ref(detail::uint8, 4)
+ static_swizzle1_ref(detail::uint16, 2)
+ static_swizzle1_ref(detail::uint16, 3)
+ static_swizzle1_ref(detail::uint16, 4)
+ static_swizzle1_ref(detail::uint32, 2)
+ static_swizzle1_ref(detail::uint32, 3)
+ static_swizzle1_ref(detail::uint32, 4)
+ static_swizzle1_ref(detail::uint64, 2)
+ static_swizzle1_ref(detail::uint64, 3)
+ static_swizzle1_ref(detail::uint64, 4)
+/*
+# define static_swizzle2_const(TYPE) \
+ template <comp x, comp y> \
+ GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
+ {return TYPE(v[x], v[y]);}
+
+# define static_swizzle3_const(TYPE) \
+ template <comp x, comp y, comp z> \
+ GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
+ {return TYPE(v[x], v[y], v[z]);}
+
+# define static_swizzle4_const(TYPE) \
+ template <comp x, comp y, comp z, comp w> \
+ GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
+ {return TYPE(v[x], v[y], v[z], v[w]);}
+*/
+
+# define static_swizzle2_const(TYPE, SIZE) \
+ template <comp x, comp y> \
+ GLM_FUNC_QUALIFIER detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
+ {return detail::tvec2<TYPE>(v[x], v[y]);}
+
+# define static_swizzle3_const(TYPE, SIZE) \
+ template <comp x, comp y, comp z> \
+ GLM_FUNC_QUALIFIER detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
+ {return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
+
+# define static_swizzle4_const(TYPE, SIZE) \
+ template <comp x, comp y, comp z, comp w> \
+ GLM_FUNC_QUALIFIER detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v) \
+ {return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
+
+
+ static_swizzle2_const(glm::f16, 2)
+ static_swizzle2_const(glm::f16, 3)
+ static_swizzle2_const(glm::f16, 4)
+ static_swizzle2_const(glm::f32, 2)
+ static_swizzle2_const(glm::f32, 3)
+ static_swizzle2_const(glm::f32, 4)
+ static_swizzle2_const(glm::f64, 2)
+ static_swizzle2_const(glm::f64, 3)
+ static_swizzle2_const(glm::f64, 4)
+
+ static_swizzle2_const(glm::i8, 2)
+ static_swizzle2_const(glm::i8, 3)
+ static_swizzle2_const(glm::i8, 4)
+ static_swizzle2_const(glm::i16, 2)
+ static_swizzle2_const(glm::i16, 3)
+ static_swizzle2_const(glm::i16, 4)
+ static_swizzle2_const(glm::i32, 2)
+ static_swizzle2_const(glm::i32, 3)
+ static_swizzle2_const(glm::i32, 4)
+ static_swizzle2_const(glm::i64, 2)
+ static_swizzle2_const(glm::i64, 3)
+ static_swizzle2_const(glm::i64, 4)
+
+ static_swizzle2_const(glm::u8, 2)
+ static_swizzle2_const(glm::u8, 3)
+ static_swizzle2_const(glm::u8, 4)
+ static_swizzle2_const(glm::u16, 2)
+ static_swizzle2_const(glm::u16, 3)
+ static_swizzle2_const(glm::u16, 4)
+ static_swizzle2_const(glm::u32, 2)
+ static_swizzle2_const(glm::u32, 3)
+ static_swizzle2_const(glm::u32, 4)
+ static_swizzle2_const(glm::u64, 2)
+ static_swizzle2_const(glm::u64, 3)
+ static_swizzle2_const(glm::u64, 4)
+
+ static_swizzle3_const(glm::f16, 2)
+ static_swizzle3_const(glm::f16, 3)
+ static_swizzle3_const(glm::f16, 4)
+ static_swizzle3_const(glm::f32, 2)
+ static_swizzle3_const(glm::f32, 3)
+ static_swizzle3_const(glm::f32, 4)
+ static_swizzle3_const(glm::f64, 2)
+ static_swizzle3_const(glm::f64, 3)
+ static_swizzle3_const(glm::f64, 4)
+
+ static_swizzle3_const(glm::i8, 2)
+ static_swizzle3_const(glm::i8, 3)
+ static_swizzle3_const(glm::i8, 4)
+ static_swizzle3_const(glm::i16, 2)
+ static_swizzle3_const(glm::i16, 3)
+ static_swizzle3_const(glm::i16, 4)
+ static_swizzle3_const(glm::i32, 2)
+ static_swizzle3_const(glm::i32, 3)
+ static_swizzle3_const(glm::i32, 4)
+ static_swizzle3_const(glm::i64, 2)
+ static_swizzle3_const(glm::i64, 3)
+ static_swizzle3_const(glm::i64, 4)
+
+ static_swizzle3_const(glm::u8, 2)
+ static_swizzle3_const(glm::u8, 3)
+ static_swizzle3_const(glm::u8, 4)
+ static_swizzle3_const(glm::u16, 2)
+ static_swizzle3_const(glm::u16, 3)
+ static_swizzle3_const(glm::u16, 4)
+ static_swizzle3_const(glm::u32, 2)
+ static_swizzle3_const(glm::u32, 3)
+ static_swizzle3_const(glm::u32, 4)
+ static_swizzle3_const(glm::u64, 2)
+ static_swizzle3_const(glm::u64, 3)
+ static_swizzle3_const(glm::u64, 4)
+
+ static_swizzle4_const(glm::f16, 2)
+ static_swizzle4_const(glm::f16, 3)
+ static_swizzle4_const(glm::f16, 4)
+ static_swizzle4_const(glm::f32, 2)
+ static_swizzle4_const(glm::f32, 3)
+ static_swizzle4_const(glm::f32, 4)
+ static_swizzle4_const(glm::f64, 2)
+ static_swizzle4_const(glm::f64, 3)
+ static_swizzle4_const(glm::f64, 4)
+
+ static_swizzle4_const(glm::i8, 2)
+ static_swizzle4_const(glm::i8, 3)
+ static_swizzle4_const(glm::i8, 4)
+ static_swizzle4_const(glm::i16, 2)
+ static_swizzle4_const(glm::i16, 3)
+ static_swizzle4_const(glm::i16, 4)
+ static_swizzle4_const(glm::i32, 2)
+ static_swizzle4_const(glm::i32, 3)
+ static_swizzle4_const(glm::i32, 4)
+ static_swizzle4_const(glm::i64, 2)
+ static_swizzle4_const(glm::i64, 3)
+ static_swizzle4_const(glm::i64, 4)
+
+ static_swizzle4_const(glm::u8, 2)
+ static_swizzle4_const(glm::u8, 3)
+ static_swizzle4_const(glm::u8, 4)
+ static_swizzle4_const(glm::u16, 2)
+ static_swizzle4_const(glm::u16, 3)
+ static_swizzle4_const(glm::u16, 4)
+ static_swizzle4_const(glm::u32, 2)
+ static_swizzle4_const(glm::u32, 3)
+ static_swizzle4_const(glm::u32, 4)
+ static_swizzle4_const(glm::u64, 2)
+ static_swizzle4_const(glm::u64, 3)
+ static_swizzle4_const(glm::u64, 4)
+
+# define static_swizzle2_ref(TYPE, SIZE) \
+ template <glm::comp x, glm::comp y> \
+ GLM_FUNC_QUALIFIER glm::detail::tref2<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
+ {return glm::detail::tref2<TYPE>(v[x], v[y]);}
+
+# define static_swizzle3_ref(TYPE, SIZE) \
+ template <glm::comp x, glm::comp y, glm::comp z> \
+ GLM_FUNC_QUALIFIER glm::detail::tref3<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
+ {return glm::detail::tref3<TYPE>(v[x], v[y], v[z]);}
+
+# define static_swizzle4_ref(TYPE, SIZE) \
+ template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
+ GLM_FUNC_QUALIFIER glm::detail::tref4<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
+ {return glm::detail::tref4<TYPE>(v[x], v[y], v[z], v[w]);}
+
+ static_swizzle2_ref(glm::f16, 2)
+ static_swizzle2_ref(glm::f16, 3)
+ static_swizzle2_ref(glm::f16, 4)
+ static_swizzle2_ref(glm::f32, 2)
+ static_swizzle2_ref(glm::f32, 3)
+ static_swizzle2_ref(glm::f32, 4)
+ static_swizzle2_ref(glm::f64, 2)
+ static_swizzle2_ref(glm::f64, 3)
+ static_swizzle2_ref(glm::f64, 4)
+
+ static_swizzle2_ref(glm::i8, 2)
+ static_swizzle2_ref(glm::i8, 3)
+ static_swizzle2_ref(glm::i8, 4)
+ static_swizzle2_ref(glm::i16, 2)
+ static_swizzle2_ref(glm::i16, 3)
+ static_swizzle2_ref(glm::i16, 4)
+ static_swizzle2_ref(glm::i32, 2)
+ static_swizzle2_ref(glm::i32, 3)
+ static_swizzle2_ref(glm::i32, 4)
+ static_swizzle2_ref(glm::i64, 2)
+ static_swizzle2_ref(glm::i64, 3)
+ static_swizzle2_ref(glm::i64, 4)
+
+ static_swizzle2_ref(glm::u8, 2)
+ static_swizzle2_ref(glm::u8, 3)
+ static_swizzle2_ref(glm::u8, 4)
+ static_swizzle2_ref(glm::u16, 2)
+ static_swizzle2_ref(glm::u16, 3)
+ static_swizzle2_ref(glm::u16, 4)
+ static_swizzle2_ref(glm::u32, 2)
+ static_swizzle2_ref(glm::u32, 3)
+ static_swizzle2_ref(glm::u32, 4)
+ static_swizzle2_ref(glm::u64, 2)
+ static_swizzle2_ref(glm::u64, 3)
+ static_swizzle2_ref(glm::u64, 4)
+
+ static_swizzle3_ref(glm::f16, 3)
+ static_swizzle3_ref(glm::f16, 4)
+ static_swizzle3_ref(glm::f32, 3)
+ static_swizzle3_ref(glm::f32, 4)
+ static_swizzle3_ref(glm::f64, 3)
+ static_swizzle3_ref(glm::f64, 4)
+
+ static_swizzle3_ref(glm::i8, 3)
+ static_swizzle3_ref(glm::i8, 4)
+ static_swizzle3_ref(glm::i16, 3)
+ static_swizzle3_ref(glm::i16, 4)
+ static_swizzle3_ref(glm::i32, 3)
+ static_swizzle3_ref(glm::i32, 4)
+ static_swizzle3_ref(glm::i64, 3)
+ static_swizzle3_ref(glm::i64, 4)
+
+ static_swizzle3_ref(glm::u8, 3)
+ static_swizzle3_ref(glm::u8, 4)
+ static_swizzle3_ref(glm::u16, 3)
+ static_swizzle3_ref(glm::u16, 4)
+ static_swizzle3_ref(glm::u32, 3)
+ static_swizzle3_ref(glm::u32, 4)
+ static_swizzle3_ref(glm::u64, 3)
+ static_swizzle3_ref(glm::u64, 4)
+
+ static_swizzle4_ref(glm::f16, 4)
+ static_swizzle4_ref(glm::f32, 4)
+ static_swizzle4_ref(glm::f64, 4)
+
+ static_swizzle4_ref(glm::i8, 4)
+ static_swizzle4_ref(glm::i16, 4)
+ static_swizzle4_ref(glm::i32, 4)
+ static_swizzle4_ref(glm::i64, 4)
+
+ static_swizzle4_ref(glm::u8, 4)
+ static_swizzle4_ref(glm::u16, 4)
+ static_swizzle4_ref(glm::u32, 4)
+ static_swizzle4_ref(glm::u64, 4)
+
+ /// @}
+}//namespace glm
+
+#include "swizzle.inl"
+
+#endif//GLM_GTC_swizzle
diff --git a/include/gal/opengl/glm/gtc/swizzle.inl b/include/gal/opengl/glm/gtc/swizzle.inl
new file mode 100644
index 0000000..043b8fc
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/swizzle.inl
@@ -0,0 +1,116 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_swizzle
+/// @file glm/gtc/swizzle.inl
+/// @date 2011-01-15 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER T swizzle
+ (
+ vecType<T> const & v,
+ comp x
+ )
+ {
+ assert(int(x) < int(vecType<T>::value_size));
+ return v[x];
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> swizzle
+ (
+ vecType<T> const & v,
+ comp x, comp y
+ )
+ {
+ return detail::tvec2<T>(
+ v[x],
+ v[y]);
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> swizzle
+ (
+ vecType<T> const & v,
+ comp x, comp y, comp z
+ )
+ {
+ return detail::tvec3<T>(
+ v[x],
+ v[y],
+ v[z]);
+ }
+
+ template <typename T, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> swizzle
+ (
+ vecType<T> const & v,
+ comp x, comp y, comp z, comp w
+ )
+ {
+ return detail::tvec4<T>(v[x], v[y], v[z], v[w]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T& swizzle
+ (
+ detail::tvec4<T> & v,
+ comp x
+ )
+ {
+ return v[x];
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tref2<T> swizzle
+ (
+ detail::tvec4<T> & v,
+ comp x, comp y
+ )
+ {
+ return detail::tref2<T>(v[x], v[y]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tref3<T> swizzle
+ (
+ detail::tvec4<T> & v,
+ comp x, comp y, comp z
+ )
+ {
+ return detail::tref3<T>(v[x], v[y], v[z]);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tref4<T> swizzle
+ (
+ detail::tvec4<T> & v,
+ comp x, comp y, comp z, comp w
+ )
+ {
+ return detail::tref4<T>(v[x], v[y], v[z], v[w]);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtc/type_precision.hpp b/include/gal/opengl/glm/gtc/type_precision.hpp
new file mode 100644
index 0000000..80a96c3
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/type_precision.hpp
@@ -0,0 +1,669 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_type_precision
+/// @file glm/gtc/type_precision.hpp
+/// @date 2009-06-04 / 2011-12-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_type_precision GLM_GTC_type_precision
+/// @ingroup gtc
+///
+/// @brief Defines specific C++-based precision types.
+///
+/// @ref core_precision defines types based on GLSL's precision qualifiers. This
+/// extension defines types based on explicitly-sized C++ data types.
+///
+/// <glm/gtc/type_precision.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_type_precision
+#define GLM_GTC_type_precision GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_type_precision extension included")
+#endif
+
+namespace glm
+{
+ ///////////////////////////
+ // Signed int vector types
+
+ /// @addtogroup gtc_type_precision
+ /// @{
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 int8;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 int16;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 int32;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 int64;
+
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 int8_t;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 int16_t;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 int32_t;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 int64_t;
+
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 i8;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 i16;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 i32;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 i64;
+
+
+ /// 8 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<i8> i8vec1;
+
+ /// 8 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<i8> i8vec2;
+
+ /// 8 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<i8> i8vec3;
+
+ /// 8 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<i8> i8vec4;
+
+
+ /// 16 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<i16> i16vec1;
+
+ /// 16 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<i16> i16vec2;
+
+ /// 16 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<i16> i16vec3;
+
+ /// 16 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<i16> i16vec4;
+
+
+ /// 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<i32> i32vec1;
+
+ /// 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<i32> i32vec2;
+
+ /// 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<i32> i32vec3;
+
+ /// 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<i32> i32vec4;
+
+
+ /// 64 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<i64> i64vec1;
+
+ /// 64 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<i64> i64vec2;
+
+ /// 64 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<i64> i64vec3;
+
+ /// 64 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<i64> i64vec4;
+
+
+ /////////////////////////////
+ // Unsigned int vector types
+
+ /// 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 uint8;
+
+ /// 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 uint16;
+
+ /// 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 uint32;
+
+ /// 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 uint64;
+
+
+ /// 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 uint8_t;
+
+ /// 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 uint16_t;
+
+ /// 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 uint32_t;
+
+ /// 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 uint64_t;
+
+
+ /// 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 u8;
+
+ /// 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 u16;
+
+ /// 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 u32;
+
+ /// 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 u64;
+
+
+ /// 8 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<u8> u8vec1;
+
+ /// 8 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<u8> u8vec2;
+
+ /// 8 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<u8> u8vec3;
+
+ /// 8 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<u8> u8vec4;
+
+
+ /// 16 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<u16> u16vec1;
+
+ /// 16 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<u16> u16vec2;
+
+ /// 16 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<u16> u16vec3;
+
+ /// 16 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<u16> u16vec4;
+
+
+ /// 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<u32> u32vec1;
+
+ /// 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<u32> u32vec2;
+
+ /// 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<u32> u32vec3;
+
+ /// 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<u32> u32vec4;
+
+
+ /// 64 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<u64> u64vec1;
+
+ /// 64 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<u64> u64vec2;
+
+ /// 64 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<u64> u64vec3;
+
+ /// 64 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<u64> u64vec4;
+
+
+ //////////////////////
+ // Float vector types
+
+ /// 16 bit half-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float16 float16;
+
+ /// 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 float32;
+
+ /// 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 float64;
+
+
+ /// 16 bit half-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float16 float16_t;
+
+ /// 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 float32_t;
+
+ /// 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 float64_t;
+
+
+ /// 16 bit half-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float16 f16;
+
+ /// 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 f32;
+
+ /// 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 f64;
+
+
+ /// Single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<float> fvec1;
+
+ /// Single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<float> fvec2;
+
+ /// Single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<float> fvec3;
+
+ /// Single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<float> fvec4;
+
+
+ /// Half-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<f16> f16vec1;
+
+ /// Half-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<f16> f16vec2;
+
+ /// Half-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<f16> f16vec3;
+
+ /// Half-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<f16> f16vec4;
+
+
+ /// Single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<f32> f32vec1;
+
+ /// Single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<f32> f32vec2;
+
+ /// Single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<f32> f32vec3;
+
+ /// Single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<f32> f32vec4;
+
+
+ /// Double-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef detail::tvec1<f64> f64vec1;
+
+ /// Double-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec2<f64> f64vec2;
+
+ /// Double-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec3<f64> f64vec3;
+
+ /// Double-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef detail::tvec4<f64> f64vec4;
+
+
+ //////////////////////
+ // Float matrix types
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32> fmat1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f32> fmat2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f32> fmat3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f32> fmat4;
+
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 fmat1x1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f32> fmat2x2;
+
+ /// Single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x3<f32> fmat2x3;
+
+ /// Single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x4<f32> fmat2x4;
+
+ /// Single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x2<f32> fmat3x2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f32> fmat3x3;
+
+ /// Single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x4<f32> fmat3x4;
+
+ /// Single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x2<f32> fmat4x2;
+
+ /// Single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x3<f32> fmat4x3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f32> fmat4x4;
+
+
+ /// Half-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f16> f16mat1;
+
+ /// Half-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f16> f16mat2;
+
+ /// Half-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f16> f16mat3;
+
+ /// Half-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f16> f16mat4;
+
+
+ /// Half-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f16 f16mat1x1;
+
+ /// Half-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f16> f16mat2x2;
+
+ /// Half-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x3<f16> f16mat2x3;
+
+ /// Half-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x4<f16> f16mat2x4;
+
+ /// Half-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x2<f16> f16mat3x2;
+
+ /// Half-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f16> f16mat3x3;
+
+ /// Half-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x4<f16> f16mat3x4;
+
+ /// Half-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x2<f16> f16mat4x2;
+
+ /// Half-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x3<f16> f16mat4x3;
+
+ /// Half-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f16> f16mat4x4;
+
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32> f32mat1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f32> f32mat2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f32> f32mat3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f32> f32mat4;
+
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 f32mat1x1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f32> f32mat2x2;
+
+ /// Single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x3<f32> f32mat2x3;
+
+ /// Single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x4<f32> f32mat2x4;
+
+ /// Single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x2<f32> f32mat3x2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f32> f32mat3x3;
+
+ /// Single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x4<f32> f32mat3x4;
+
+ /// Single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x2<f32> f32mat4x2;
+
+ /// Single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x3<f32> f32mat4x3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f32> f32mat4x4;
+
+
+ /// Double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f64> f64mat1;
+
+ /// Double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f64> f64mat2;
+
+ /// Double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f64> f64mat3;
+
+ /// Double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f64> f64mat4;
+
+
+ /// Double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f64 f64mat1x1;
+
+ /// Double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x2<f64> f64mat2x2;
+
+ /// Double-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x3<f64> f64mat2x3;
+
+ /// Double-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat2x4<f64> f64mat2x4;
+
+ /// Double-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x2<f64> f64mat3x2;
+
+ /// Double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x3<f64> f64mat3x3;
+
+ /// Double-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat3x4<f64> f64mat3x4;
+
+ /// Double-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x2<f64> f64mat4x2;
+
+ /// Double-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x3<f64> f64mat4x3;
+
+ /// Double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef detail::tmat4x4<f64> f64mat4x4;
+
+
+ //////////////////////////
+ // Quaternion types
+
+ /// Half-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef detail::tquat<f16> f16quat;
+
+ /// Single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef detail::tquat<f32> f32quat;
+
+ /// Double-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef detail::tquat<f64> f64quat;
+
+ /// @}
+}//namespace glm
+
+#include "type_precision.inl"
+
+#endif//GLM_GTC_type_precision
diff --git a/include/gal/opengl/glm/gtc/type_precision.inl b/include/gal/opengl/glm/gtc/type_precision.inl
new file mode 100644
index 0000000..5bb4ab8
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/type_precision.inl
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_swizzle
+/// @file glm/gtc/swizzle.inl
+/// @date 2009-06-14 / 2011-06-15
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+
+}
diff --git a/include/gal/opengl/glm/gtc/type_ptr.hpp b/include/gal/opengl/glm/gtc/type_ptr.hpp
new file mode 100644
index 0000000..4939573
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/type_ptr.hpp
@@ -0,0 +1,169 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_type_ptr
+/// @file glm/gtc/type_ptr.hpp
+/// @date 2009-05-06 / 2011-06-05
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_type_ptr GLM_GTC_type_ptr
+/// @ingroup gtc
+///
+/// @brief Handles the interaction between pointers and vector, matrix types.
+///
+/// This extension defines an overloaded function, glm::value_ptr, which
+/// takes any of the \ref core_template "core template types". It returns
+/// a pointer to the memory layout of the object. Matrix types store their values
+/// in column-major order.
+///
+/// This is useful for uploading data to matrices or copying data to buffer objects.
+///
+/// Example:
+/// @code
+/// #include <glm/glm.hpp>
+/// #include <glm/gtc/type_ptr.hpp>
+///
+/// glm::vec3 aVector(3);
+/// glm::mat4 someMatrix(1.0);
+///
+/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
+/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));
+/// @endcode
+///
+/// <glm/gtc/type_ptr.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_type_ptr
+#define GLM_GTC_type_ptr GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+#include "../gtc/quaternion.hpp"
+#include <cstring>
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_type_ptr extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_type_ptr
+ /// @{
+
+ /// Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename genType>
+ typename genType::value_type const * value_ptr(genType const & vec);
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tvec2<T> make_vec2(T const * const ptr);
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tvec3<T> make_vec3(T const * const ptr);
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tvec4<T> make_vec4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat2x2<T> make_mat2x2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat2x3<T> make_mat2x3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat2x4<T> make_mat2x4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat3x2<T> make_mat3x2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat3x3<T> make_mat3x3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat3x4<T> make_mat3x4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat4x2<T> make_mat4x2(
+ T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat4x3<T> make_mat4x3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat4x4<T> make_mat4x4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat2x2<T> make_mat2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat3x3<T> make_mat3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tmat4x4<T> make_mat4(T const * const ptr);
+
+ /// Build a quaternion from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ detail::tquat<T> make_quat(T const * const ptr);
+
+ /// @}
+}//namespace glm
+
+#include "type_ptr.inl"
+
+#endif//GLM_GTC_type_ptr
+
diff --git a/include/gal/opengl/glm/gtc/type_ptr.inl b/include/gal/opengl/glm/gtc/type_ptr.inl
new file mode 100644
index 0000000..6c5a157
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/type_ptr.inl
@@ -0,0 +1,473 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_type_ptr
+/// @file glm/gtc/type_ptr.inl
+/// @date 2011-06-15 / 2011-12-07
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ /// @addtogroup gtc_type_ptr
+ /// @{
+
+ /// Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tvec2<T> const & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tvec2<T> & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tvec3<T> const & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tvec3<T> & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tvec4<T> const & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ //! From GLM_GTC_type_ptr extension.
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tvec4<T> & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat2x2<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat2x2<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat3x3<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat3x3<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat4x4<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ //! From GLM_GTC_type_ptr extension.
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat4x4<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat2x3<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat2x3<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat3x2<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat3x2<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat2x4<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat2x4<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat4x2<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat4x2<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat3x4<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tmat3x4<T> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tmat4x3<T> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Get the address of the matrix content.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return &(q[0]);
+ }
+
+ //! Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ detail::tquat<T> & q
+ )
+ {
+ return &(q[0]);
+ }
+
+ //! Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
+ {
+ detail::tvec2<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
+ return Result;
+ }
+
+ //! Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
+ {
+ detail::tvec3<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
+ return Result;
+ }
+
+ //! Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
+ {
+ detail::tvec4<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
+ {
+ detail::tmat2x2<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
+ {
+ detail::tmat2x3<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
+ {
+ detail::tmat2x4<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
+ {
+ detail::tmat3x2<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
+ {
+ detail::tmat3x3<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
+ {
+ detail::tmat3x4<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
+ {
+ detail::tmat4x2<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
+ {
+ detail::tmat4x3<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
+ {
+ detail::tmat4x4<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
+ {
+ return make_mat2x2(ptr);
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
+ {
+ return make_mat3x3(ptr);
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
+ {
+ return make_mat4x4(ptr);
+ }
+
+ //! Build a quaternion from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> make_quat(T const * const ptr)
+ {
+ detail::tquat<T> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(detail::tquat<T>));
+ return Result;
+ }
+
+ /// @}
+}//namespace glm
+
diff --git a/include/gal/opengl/glm/gtc/ulp.hpp b/include/gal/opengl/glm/gtc/ulp.hpp
new file mode 100644
index 0000000..7ab0d6a
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/ulp.hpp
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_ulp
+/// @file glm/gtc/ulp.hpp
+/// @date 2011-02-21 / 2011-12-12
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_ulp GLM_GTC_ulp
+/// @ingroup gtc
+///
+/// @brief Allow the measurement of the accuracy of a function against a reference
+/// implementation. This extension works on floating-point data and provide results
+/// in ULP.
+/// <glm/gtc/ulp.hpp> need to be included to use these features.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTC_ulp
+#define GLM_GTC_ulp GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTC_ulp extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_ulp
+ /// @{
+
+ /// Return the next ULP value(s) after the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ genType next_float(genType const & x);
+
+ /// Return the previous ULP value(s) before the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ genType prev_float(genType const & x);
+
+ /// Return the value(s) ULP distance after the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ genType next_float(genType const & x, uint const & Distance);
+
+ /// Return the value(s) ULP distance before the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ genType prev_float(genType const & x, uint const & Distance);
+
+ /// Return the distance in the number of ULP between 2 scalars.
+ /// @see gtc_ulp
+ template <typename T>
+ uint float_distance(T const & x, T const & y);
+
+ /// Return the distance in the number of ULP between 2 vectors.
+ /// @see gtc_ulp
+ template<typename T, template<typename> class vecType>
+ vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y);
+
+ /// @}
+}// namespace glm
+
+#include "ulp.inl"
+
+#endif//GLM_GTC_ulp
+
diff --git a/include/gal/opengl/glm/gtc/ulp.inl b/include/gal/opengl/glm/gtc/ulp.inl
new file mode 100644
index 0000000..997a816
--- /dev/null
+++ b/include/gal/opengl/glm/gtc/ulp.inl
@@ -0,0 +1,318 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtc_ulp
+/// @file glm/gtc/ulp.inl
+/// @date 2011-03-07 / 2012-04-07
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+///
+/// Developed at SunPro, a Sun Microsystems, Inc. business.
+/// Permission to use, copy, modify, and distribute this
+/// software is freely granted, provided that this notice
+/// is preserved.
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <cmath>
+#include <cfloat>
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+# pragma warning(push)
+# pragma warning(disable : 4127)
+#endif
+
+typedef union
+{
+ float value;
+ /* FIXME: Assumes 32 bit int. */
+ unsigned int word;
+} ieee_float_shape_type;
+
+typedef union
+{
+ double value;
+ struct
+ {
+ glm::detail::int32 lsw;
+ glm::detail::int32 msw;
+ } parts;
+} ieee_double_shape_type;
+
+#define GLM_EXTRACT_WORDS(ix0,ix1,d) \
+ do { \
+ ieee_double_shape_type ew_u; \
+ ew_u.value = (d); \
+ (ix0) = ew_u.parts.msw; \
+ (ix1) = ew_u.parts.lsw; \
+ } while (0)
+
+#define GLM_GET_FLOAT_WORD(i,d) \
+ do { \
+ ieee_float_shape_type gf_u; \
+ gf_u.value = (d); \
+ (i) = gf_u.word; \
+ } while (0)
+
+#define GLM_SET_FLOAT_WORD(d,i) \
+ do { \
+ ieee_float_shape_type sf_u; \
+ sf_u.word = (i); \
+ (d) = sf_u.value; \
+ } while (0)
+
+#define GLM_INSERT_WORDS(d,ix0,ix1) \
+ do { \
+ ieee_double_shape_type iw_u; \
+ iw_u.parts.msw = (ix0); \
+ iw_u.parts.lsw = (ix1); \
+ (d) = iw_u.value; \
+ } while (0)
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER float nextafterf(float x, float y)
+ {
+ volatile float t;
+ glm::detail::int32 hx, hy, ix, iy;
+
+ GLM_GET_FLOAT_WORD(hx, x);
+ GLM_GET_FLOAT_WORD(hy, y);
+ ix = hx&0x7fffffff; // |x|
+ iy = hy&0x7fffffff; // |y|
+
+ if((ix>0x7f800000) || // x is nan
+ (iy>0x7f800000)) // y is nan
+ return x+y;
+ if(x==y) return y; // x=y, return y
+ if(ix==0) { // x == 0
+ GLM_SET_FLOAT_WORD(x,(hy&0x80000000)|1);// return +-minsubnormal
+ t = x*x;
+ if(t==x) return t; else return x; // raise underflow flag
+ }
+ if(hx>=0) { // x > 0
+ if(hx>hy) { // x > y, x -= ulp
+ hx -= 1;
+ } else { // x < y, x += ulp
+ hx += 1;
+ }
+ } else { // x < 0
+ if(hy>=0||hx>hy){ // x < y, x -= ulp
+ hx -= 1;
+ } else { // x > y, x += ulp
+ hx += 1;
+ }
+ }
+ hy = hx&0x7f800000;
+ if(hy>=0x7f800000) return x+x; // overflow
+ if(hy<0x00800000) { // underflow
+ t = x*x;
+ if(t!=x) { // raise underflow flag
+ GLM_SET_FLOAT_WORD(y,hx);
+ return y;
+ }
+ }
+ GLM_SET_FLOAT_WORD(x,hx);
+ return x;
+ }
+
+ GLM_FUNC_QUALIFIER double nextafter(double x, double y)
+ {
+ volatile double t;
+ glm::detail::int32 hx, hy, ix, iy;
+ glm::detail::uint32 lx, ly;
+
+ GLM_EXTRACT_WORDS(hx, lx, x);
+ GLM_EXTRACT_WORDS(hy, ly, y);
+ ix = hx & 0x7fffffff; // |x|
+ iy = hy & 0x7fffffff; // |y|
+
+ if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || // x is nan
+ ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) // y is nan
+ return x+y;
+ if(x==y) return y; // x=y, return y
+ if((ix|lx)==0) { // x == 0
+ GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal
+ t = x*x;
+ if(t==x) return t; else return x; // raise underflow flag
+ }
+ if(hx>=0) { // x > 0
+ if(hx>hy||((hx==hy)&&(lx>ly))) { // x > y, x -= ulp
+ if(lx==0) hx -= 1;
+ lx -= 1;
+ } else { // x < y, x += ulp
+ lx += 1;
+ if(lx==0) hx += 1;
+ }
+ } else { // x < 0
+ if(hy>=0||hx>hy||((hx==hy)&&(lx>ly))){// x < y, x -= ulp
+ if(lx==0) hx -= 1;
+ lx -= 1;
+ } else { // x > y, x += ulp
+ lx += 1;
+ if(lx==0) hx += 1;
+ }
+ }
+ hy = hx&0x7ff00000;
+ if(hy>=0x7ff00000) return x+x; // overflow
+ if(hy<0x00100000) { // underflow
+ t = x*x;
+ if(t!=x) { // raise underflow flag
+ GLM_INSERT_WORDS(y,hx,lx);
+ return y;
+ }
+ }
+ GLM_INSERT_WORDS(x,hx,lx);
+ return x;
+ }
+}//namespace detail
+}//namespace glm
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+# pragma warning(pop)
+#endif
+
+#if((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
+# define GLM_NEXT_AFTER_FLT(x, toward) glm::detail::nextafterf((x), (toward))
+# define GLM_NEXT_AFTER_DBL(x, toward) _nextafter((x), (toward))
+#else
+# define GLM_NEXT_AFTER_FLT(x, toward) nextafterf((x), (toward))
+# define GLM_NEXT_AFTER_DBL(x, toward) nextafter((x), (toward))
+#endif
+
+namespace glm
+{
+ GLM_FUNC_QUALIFIER float next_float(float const & x)
+ {
+ return GLM_NEXT_AFTER_FLT(x, std::numeric_limits<float>::max());
+ }
+
+ GLM_FUNC_QUALIFIER double next_float(double const & x)
+ {
+ return GLM_NEXT_AFTER_DBL(x, std::numeric_limits<double>::max());
+ }
+
+ template<typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> next_float(vecType<T> const & x)
+ {
+ vecType<T> Result;
+ for(std::size_t i = 0; i < Result.length(); ++i)
+ Result[i] = next_float(x[i]);
+ return Result;
+ }
+
+ GLM_FUNC_QUALIFIER float prev_float(float const & x)
+ {
+ return GLM_NEXT_AFTER_FLT(x, std::numeric_limits<float>::min());
+ }
+
+ GLM_FUNC_QUALIFIER double prev_float(double const & x)
+ {
+ return GLM_NEXT_AFTER_DBL(x, std::numeric_limits<double>::min());
+ }
+
+ template<typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> prev_float(vecType<T> const & x)
+ {
+ vecType<T> Result;
+ for(std::size_t i = 0; i < Result.length(); ++i)
+ Result[i] = prev_float(x[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T next_float(T const & x, uint const & ulps)
+ {
+ T temp = x;
+ for(std::size_t i = 0; i < ulps; ++i)
+ temp = next_float(temp);
+ return temp;
+ }
+
+ template<typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> next_float(vecType<T> const & x, vecType<uint> const & ulps)
+ {
+ vecType<T> Result;
+ for(std::size_t i = 0; i < Result.length(); ++i)
+ Result[i] = next_float(x[i], ulps[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T prev_float(T const & x, uint const & ulps)
+ {
+ T temp = x;
+ for(std::size_t i = 0; i < ulps; ++i)
+ temp = prev_float(temp);
+ return temp;
+ }
+
+ template<typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T> prev_float(vecType<T> const & x, vecType<uint> const & ulps)
+ {
+ vecType<T> Result;
+ for(std::size_t i = 0; i < Result.length(); ++i)
+ Result[i] = prev_float(x[i], ulps[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint float_distance(T const & x, T const & y)
+ {
+ uint ulp = 0;
+
+ if(x < y)
+ {
+ T temp = x;
+ while(temp != y && ulp < std::numeric_limits<std::size_t>::max())
+ {
+ ++ulp;
+ temp = next_float(temp);
+ }
+ }
+ else if(y < x)
+ {
+ T temp = y;
+ while(temp != x && ulp < std::numeric_limits<std::size_t>::max())
+ {
+ ++ulp;
+ temp = next_float(temp);
+ }
+ }
+ else // ==
+ {
+
+ }
+
+ return ulp;
+ }
+
+ template<typename T, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y)
+ {
+ vecType<uint> Result;
+ for(std::size_t i = 0; i < Result.length(); ++i)
+ Result[i] = float_distance(x[i], y[i]);
+ return Result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/associated_min_max.hpp b/include/gal/opengl/glm/gtx/associated_min_max.hpp
new file mode 100644
index 0000000..7283b69
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/associated_min_max.hpp
@@ -0,0 +1,106 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_associated_min_max
+/// @file glm/gtx/associated_min_max.hpp
+/// @date 2008-03-10 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max
+/// @ingroup gtx
+///
+/// @brief Min and max functions that return associated values not the compared onces.
+/// <glm/gtx/associated_min_max.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_associated_min_max
+#define GLM_GTX_associated_min_max GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_associated_min_max extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_associated_min_max
+ /// @{
+
+ /// Min comparison between 2 variables
+ /// @see gtx_associated_min_max
+ template<typename genTypeT, typename genTypeU>
+ genTypeU associatedMin(
+ const genTypeT& x, const genTypeU& a,
+ const genTypeT& y, const genTypeU& b);
+
+ /// Min comparison between 3 variables
+ /// @see gtx_associated_min_max
+ template<typename genTypeT, typename genTypeU>
+ genTypeU associatedMin(
+ const genTypeT& x, const genTypeU& a,
+ const genTypeT& y, const genTypeU& b,
+ const genTypeT& z, const genTypeU& c);
+
+ /// Min comparison between 4 variables
+ /// @see gtx_associated_min_max
+ template<typename genTypeT, typename genTypeU>
+ genTypeU associatedMin(
+ const genTypeT& x, const genTypeU& a,
+ const genTypeT& y, const genTypeU& b,
+ const genTypeT& z, const genTypeU& c,
+ const genTypeT& w, const genTypeU& d);
+
+ /// Max comparison between 2 variables
+ /// @see gtx_associated_min_max
+ template<typename genTypeT, typename genTypeU>
+ genTypeU associatedMax(
+ const genTypeT& x, const genTypeU& a,
+ const genTypeT& y, const genTypeU& b);
+
+ /// Max comparison between 3 variables
+ /// @see gtx_associated_min_max
+ template<typename genTypeT, typename genTypeU>
+ genTypeU associatedMax(
+ const genTypeT& x, const genTypeU& a,
+ const genTypeT& y, const genTypeU& b,
+ const genTypeT& z, const genTypeU& c);
+
+ /// Max comparison between 4 variables
+ /// @see gtx_associated_min_max
+ template<typename genTypeT, typename genTypeU>
+ genTypeU associatedMax(
+ const genTypeT& x, const genTypeU& a,
+ const genTypeT& y, const genTypeU& b,
+ const genTypeT& z, const genTypeU& c,
+ const genTypeT& w, const genTypeU& d);
+
+ /// @}
+} //namespace glm
+
+#include "associated_min_max.inl"
+
+#endif//GLM_GTX_associated_min_max
diff --git a/include/gal/opengl/glm/gtx/associated_min_max.inl b/include/gal/opengl/glm/gtx/associated_min_max.inl
new file mode 100644
index 0000000..ffaa1ef
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/associated_min_max.inl
@@ -0,0 +1,912 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-03-10
+// Updated : 2008-03-15
+// Licence : This source is under MIT License
+// File : gtx_associated_min_max.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+
+// Min comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b)
+{
+ return x < y ? a : b;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ const detail::tvec2<T>& x, const detail::tvec2<U>& a,
+ const detail::tvec2<T>& y, const detail::tvec2<U>& b
+)
+{
+ detail::tvec2<U> Result;
+ //Result.x = x[0] < y[0] ? a[0] : b[0];
+ //Result.y = x[1] < y[1] ? a[1] : b[1];
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x[i] < y[i] ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ const detail::tvec3<T>& x, const detail::tvec3<U>& a,
+ const detail::tvec3<T>& y, const detail::tvec3<U>& b
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x[i] < y[i] ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ const detail::tvec4<T>& x, const detail::tvec4<U>& a,
+ const detail::tvec4<T>& y, const detail::tvec4<U>& b
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x[i] < y[i] ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ T x, const detail::tvec2<U>& a,
+ T y, const detail::tvec2<U>& b
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x < y ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ T x, const detail::tvec3<U>& a,
+ T y, const detail::tvec3<U>& b
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x < y ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ T x, const detail::tvec4<U>& a,
+ T y, const detail::tvec4<U>& b
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x < y ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ const detail::tvec2<T>& x, U a,
+ const detail::tvec2<T>& y, U b
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ Result[i] = x[i] < y[i] ? a : b;
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ const detail::tvec3<T>& x, U a,
+ const detail::tvec3<T>& y, U b
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ Result[i] = x[i] < y[i] ? a : b;
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ const detail::tvec4<T>& x, U a,
+ const detail::tvec4<T>& y, U b
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ Result[i] = x[i] < y[i] ? a : b;
+ return Result;
+}
+
+// Min comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMin
+(
+ T x, U a,
+ T y, U b,
+ T z, U c
+)
+{
+ U Result = x < y ? (x < z ? a : c) : (y < z ? b : c);
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ const detail::tvec2<T>& x, const detail::tvec2<U>& a,
+ const detail::tvec2<T>& y, const detail::tvec2<U>& b,
+ const detail::tvec2<T>& z, const detail::tvec2<U>& c
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ const detail::tvec3<T>& x, const detail::tvec3<U>& a,
+ const detail::tvec3<T>& y, const detail::tvec3<U>& b,
+ const detail::tvec3<T>& z, const detail::tvec3<U>& c
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ const detail::tvec4<T>& x, const detail::tvec4<U>& a,
+ const detail::tvec4<T>& y, const detail::tvec4<U>& b,
+ const detail::tvec4<T>& z, const detail::tvec4<U>& c
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMin
+(
+ T x, U a,
+ T y, U b,
+ T z, U c,
+ T w, U d
+)
+{
+ T Test1 = min(x, y);
+ T Test2 = min(z, w);;
+ U Result1 = x < y ? a : b;
+ U Result2 = z < w ? c : d;
+ U Result = Test1 < Test2 ? Result1 : Result2;
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ const detail::tvec2<T>& x, const detail::tvec2<U>& a,
+ const detail::tvec2<T>& y, const detail::tvec2<U>& b,
+ const detail::tvec2<T>& z, const detail::tvec2<U>& c,
+ const detail::tvec2<T>& w, const detail::tvec2<U>& d
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);
+ U Result1 = x[i] < y[i] ? a[i] : b[i];
+ U Result2 = z[i] < w[i] ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ const detail::tvec3<T>& x, const detail::tvec3<U>& a,
+ const detail::tvec3<T>& y, const detail::tvec3<U>& b,
+ const detail::tvec3<T>& z, const detail::tvec3<U>& c,
+ const detail::tvec3<T>& w, const detail::tvec3<U>& d
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);
+ U Result1 = x[i] < y[i] ? a[i] : b[i];
+ U Result2 = z[i] < w[i] ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ const detail::tvec4<T>& x, const detail::tvec4<U>& a,
+ const detail::tvec4<T>& y, const detail::tvec4<U>& b,
+ const detail::tvec4<T>& z, const detail::tvec4<U>& c,
+ const detail::tvec4<T>& w, const detail::tvec4<U>& d
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);
+ U Result1 = x[i] < y[i] ? a[i] : b[i];
+ U Result2 = z[i] < w[i] ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ T x, const detail::tvec2<U>& a,
+ T y, const detail::tvec2<U>& b,
+ T z, const detail::tvec2<U>& c,
+ T w, const detail::tvec2<U>& d
+)
+{
+ T Test1 = min(x, y);
+ T Test2 = min(z, w);
+
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ {
+ U Result1 = x < y ? a[i] : b[i];
+ U Result2 = z < w ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ T x, const detail::tvec3<U>& a,
+ T y, const detail::tvec3<U>& b,
+ T z, const detail::tvec3<U>& c,
+ T w, const detail::tvec3<U>& d
+)
+{
+ T Test1 = min(x, y);
+ T Test2 = min(z, w);
+
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ {
+ U Result1 = x < y ? a[i] : b[i];
+ U Result2 = z < w ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ T x, const detail::tvec4<U>& a,
+ T y, const detail::tvec4<U>& b,
+ T z, const detail::tvec4<U>& c,
+ T w, const detail::tvec4<U>& d
+)
+{
+ T Test1 = min(x, y);
+ T Test2 = min(z, w);
+
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ {
+ U Result1 = x < y ? a[i] : b[i];
+ U Result2 = z < w ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMin
+(
+ const detail::tvec2<T>& x, U a,
+ const detail::tvec2<T>& y, U b,
+ const detail::tvec2<T>& z, U c,
+ const detail::tvec2<T>& w, U d
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);;
+ U Result1 = x[i] < y[i] ? a : b;
+ U Result2 = z[i] < w[i] ? c : d;
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMin
+(
+ const detail::tvec3<T>& x, U a,
+ const detail::tvec3<T>& y, U b,
+ const detail::tvec3<T>& z, U c,
+ const detail::tvec3<T>& w, U d
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);;
+ U Result1 = x[i] < y[i] ? a : b;
+ U Result2 = z[i] < w[i] ? c : d;
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMin
+(
+ const detail::tvec4<T>& x, U a,
+ const detail::tvec4<T>& y, U b,
+ const detail::tvec4<T>& z, U c,
+ const detail::tvec4<T>& w, U d
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);;
+ U Result1 = x[i] < y[i] ? a : b;
+ U Result2 = z[i] < w[i] ? c : d;
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b)
+{
+ return x > y ? a : b;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ const detail::tvec2<T>& x, const detail::tvec2<U>& a,
+ const detail::tvec2<T>& y, const detail::tvec2<U>& b
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x[i] > y[i] ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ const detail::tvec3<T>& x, const detail::tvec3<U>& a,
+ const detail::tvec3<T>& y, const detail::tvec3<U>& b
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x[i] > y[i] ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ const detail::tvec4<T>& x, const detail::tvec4<U>& a,
+ const detail::tvec4<T>& y, const detail::tvec4<U>& b
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x[i] > y[i] ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ T x, const detail::tvec2<U>& a,
+ T y, const detail::tvec2<U>& b
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x > y ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ T x, const detail::tvec3<U>& a,
+ T y, const detail::tvec3<U>& b
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x > y ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ T x, const detail::tvec4<U>& a,
+ T y, const detail::tvec4<U>& b
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x > y ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ const detail::tvec2<T>& x, U a,
+ const detail::tvec2<T>& y, U b
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ Result[i] = x[i] > y[i] ? a : b;
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ const detail::tvec3<T>& x, U a,
+ const detail::tvec3<T>& y, U b
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ Result[i] = x[i] > y[i] ? a : b;
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ const detail::tvec4<T>& x, U a,
+ const detail::tvec4<T>& y, U b
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ Result[i] = x[i] > y[i] ? a : b;
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMax
+(
+ T x, U a,
+ T y, U b,
+ T z, U c
+)
+{
+ U Result = x > y ? (x > z ? a : c) : (y > z ? b : c);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ const detail::tvec2<T>& x, const detail::tvec2<U>& a,
+ const detail::tvec2<T>& y, const detail::tvec2<U>& b,
+ const detail::tvec2<T>& z, const detail::tvec2<U>& c
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ const detail::tvec3<T>& x, const detail::tvec3<U>& a,
+ const detail::tvec3<T>& y, const detail::tvec3<U>& b,
+ const detail::tvec3<T>& z, const detail::tvec3<U>& c
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ const detail::tvec4<T>& x, const detail::tvec4<U>& a,
+ const detail::tvec4<T>& y, const detail::tvec4<U>& b,
+ const detail::tvec4<T>& z, const detail::tvec4<U>& c
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ T x, const detail::tvec2<U>& a,
+ T y, const detail::tvec2<U>& b,
+ T z, const detail::tvec2<U>& c
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ T x, const detail::tvec3<U>& a,
+ T y, const detail::tvec3<U>& b,
+ T z, const detail::tvec3<U>& c
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ T x, const detail::tvec4<U>& a,
+ T y, const detail::tvec4<U>& b,
+ T z, const detail::tvec4<U>& c
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ const detail::tvec2<T>& x, U a,
+ const detail::tvec2<T>& y, U b,
+ const detail::tvec2<T>& z, U c
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ const detail::tvec3<T>& x, U a,
+ const detail::tvec3<T>& y, U b,
+ const detail::tvec3<T>& z, U c
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ const detail::tvec4<T>& x, U a,
+ const detail::tvec4<T>& y, U b,
+ const detail::tvec4<T>& z, U c
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMax
+(
+ T x, U a,
+ T y, U b,
+ T z, U c,
+ T w, U d
+)
+{
+ T Test1 = max(x, y);
+ T Test2 = max(z, w);;
+ U Result1 = x > y ? a : b;
+ U Result2 = z > w ? c : d;
+ U Result = Test1 > Test2 ? Result1 : Result2;
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ const detail::tvec2<T>& x, const detail::tvec2<U>& a,
+ const detail::tvec2<T>& y, const detail::tvec2<U>& b,
+ const detail::tvec2<T>& z, const detail::tvec2<U>& c,
+ const detail::tvec2<T>& w, const detail::tvec2<U>& d
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);
+ U Result1 = x[i] > y[i] ? a[i] : b[i];
+ U Result2 = z[i] > w[i] ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ const detail::tvec3<T>& x, const detail::tvec3<U>& a,
+ const detail::tvec3<T>& y, const detail::tvec3<U>& b,
+ const detail::tvec3<T>& z, const detail::tvec3<U>& c,
+ const detail::tvec3<T>& w, const detail::tvec3<U>& d
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);
+ U Result1 = x[i] > y[i] ? a[i] : b[i];
+ U Result2 = z[i] > w[i] ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ const detail::tvec4<T>& x, const detail::tvec4<U>& a,
+ const detail::tvec4<T>& y, const detail::tvec4<U>& b,
+ const detail::tvec4<T>& z, const detail::tvec4<U>& c,
+ const detail::tvec4<T>& w, const detail::tvec4<U>& d
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);
+ U Result1 = x[i] > y[i] ? a[i] : b[i];
+ U Result2 = z[i] > w[i] ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ T x, const detail::tvec2<U>& a,
+ T y, const detail::tvec2<U>& b,
+ T z, const detail::tvec2<U>& c,
+ T w, const detail::tvec2<U>& d
+)
+{
+ T Test1 = max(x, y);
+ T Test2 = max(z, w);
+
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<U>::size_type i = 0; i < detail::tvec2<U>::value_size; ++i)
+ {
+ U Result1 = x > y ? a[i] : b[i];
+ U Result2 = z > w ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ T x, const detail::tvec3<U>& a,
+ T y, const detail::tvec3<U>& b,
+ T z, const detail::tvec3<U>& c,
+ T w, const detail::tvec3<U>& d
+)
+{
+ T Test1 = max(x, y);
+ T Test2 = max(z, w);
+
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<U>::size_type i = 0; i < detail::tvec3<U>::value_size; ++i)
+ {
+ U Result1 = x > y ? a[i] : b[i];
+ U Result2 = z > w ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ T x, const detail::tvec4<U>& a,
+ T y, const detail::tvec4<U>& b,
+ T z, const detail::tvec4<U>& c,
+ T w, const detail::tvec4<U>& d
+)
+{
+ T Test1 = max(x, y);
+ T Test2 = max(z, w);
+
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<U>::size_type i = 0; i < detail::tvec4<U>::value_size; ++i)
+ {
+ U Result1 = x > y ? a[i] : b[i];
+ U Result2 = z > w ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec2<U> associatedMax
+(
+ const detail::tvec2<T>& x, U a,
+ const detail::tvec2<T>& y, U b,
+ const detail::tvec2<T>& z, U c,
+ const detail::tvec2<T>& w, U d
+)
+{
+ detail::tvec2<U> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);;
+ U Result1 = x[i] > y[i] ? a : b;
+ U Result2 = z[i] > w[i] ? c : d;
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec3<U> associatedMax
+(
+ const detail::tvec3<T>& x, U a,
+ const detail::tvec3<T>& y, U b,
+ const detail::tvec3<T>& z, U c,
+ const detail::tvec3<T>& w, U d
+)
+{
+ detail::tvec3<U> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);;
+ U Result1 = x[i] > y[i] ? a : b;
+ U Result2 = z[i] > w[i] ? c : d;
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER detail::tvec4<U> associatedMax
+(
+ const detail::tvec4<T>& x, U a,
+ const detail::tvec4<T>& y, U b,
+ const detail::tvec4<T>& z, U c,
+ const detail::tvec4<T>& w, U d
+)
+{
+ detail::tvec4<U> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);;
+ U Result1 = x[i] > y[i] ? a : b;
+ U Result2 = z[i] > w[i] ? c : d;
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/bit.hpp b/include/gal/opengl/glm/gtx/bit.hpp
new file mode 100644
index 0000000..94aaae5
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/bit.hpp
@@ -0,0 +1,140 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_bit
+/// @file glm/gtx/bit.hpp
+/// @date 2007-03-14 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_bit GLM_GTX_bit
+/// @ingroup gtx
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtx/bit.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_bit
+#define GLM_GTX_bit GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_bit extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_bit
+ /// @{
+
+ /// Build a mask of 'count' bits
+ /// @see gtx_bit
+ template <typename genIType>
+ genIType mask(genIType const & count);
+
+ /// Component wise extraction of bit fields.
+ /// genType and genIType could be a scalar or a vector.
+ /// @see gtx_bit
+ template <typename genIUType, typename sizeType>
+ GLM_DEPRECATED genIUType extractField(
+ genIUType const & v,
+ sizeType const & first,
+ sizeType const & count);
+
+ //! Find the lowest bit set to 1 in a integer variable.
+ /// @see gtx_bit
+ template <typename genType>
+ GLM_DEPRECATED int lowestBit(genType const & value);
+
+ //! Find the highest bit set to 1 in a integer variable.
+ /// @see gtx_bit
+ template <typename genType>
+ GLM_DEPRECATED int highestBit(genType const & value);
+
+ //! Find the highest bit set to 1 in a integer variable and return its value.
+ /// @see gtx_bit
+ template <typename genType>
+ genType highestBitValue(genType const & value);
+
+ //! Return true if the value is a power of two number.
+ /// @see gtx_bit
+ template <typename genType>
+ bool isPowerOfTwo(genType const & value);
+
+ //! Return the power of two number which value is just higher the input value.
+ /// @see gtx_bit
+ template <typename genType>
+ genType powerOfTwoAbove(genType const & value);
+
+ //! Return the power of two number which value is just lower the input value.
+ /// @see gtx_bit
+ template <typename genType>
+ genType powerOfTwoBelow(genType const & value);
+
+ //! Return the power of two number which value is the closet to the input value.
+ /// @see gtx_bit
+ template <typename genType>
+ genType powerOfTwoNearest(genType const & value);
+
+ //! Revert all bits of any integer based type.
+ /// @see gtx_bit
+ template <typename genType>
+ GLM_DEPRECATED genType bitRevert(genType const & value);
+
+ //! Rotate all bits to the right.
+ /// @see gtx_bit
+ template <typename genType>
+ genType bitRotateRight(genType const & In, std::size_t Shift);
+
+ //! Rotate all bits to the left.
+ /// @see gtx_bit
+ template <typename genType>
+ genType bitRotateLeft(genType const & In, std::size_t Shift);
+
+ //! Set to 1 a range of bits.
+ /// @see gtx_bit
+ template <typename genIUType>
+ genIUType fillBitfieldWithOne(
+ genIUType const & Value,
+ int const & FromBit,
+ int const & ToBit);
+
+ //! Set to 0 a range of bits.
+ /// @see gtx_bit
+ template <typename genIUType>
+ genIUType fillBitfieldWithZero(
+ genIUType const & Value,
+ int const & FromBit,
+ int const & ToBit);
+
+ /// @}
+} //namespace glm
+
+#include "bit.inl"
+
+#endif//GLM_GTX_bit
diff --git a/include/gal/opengl/glm/gtx/bit.inl b/include/gal/opengl/glm/gtx/bit.inl
new file mode 100644
index 0000000..27647ae
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/bit.inl
@@ -0,0 +1,600 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-03-14
+// Updated : 2008-11-14
+// Licence : This source is under MIT License
+// File : glm/gtx/bit.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER genIType mask
+ (
+ genIType const & count
+ )
+ {
+ return ((genIType(1) << (count)) - genIType(1));
+ }
+
+ VECTORIZE_VEC(mask)
+
+ // extractField
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER genIType extractField
+ (
+ half const & value,
+ genIType const & first,
+ genIType const & count
+ )
+ {
+ assert(first + count < sizeof(half));
+ return (value._data() << first) >> ((sizeof(half) << 3) - count);
+ }
+
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER genIType extractField
+ (
+ float const & value,
+ genIType const & first,
+ genIType const & count
+ )
+ {
+ assert(first + count < sizeof(float));
+ return (detail::uif32(value).i << first) >> ((sizeof(float) << 3) - count);
+ }
+
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER genIType extractField
+ (
+ double const & value,
+ genIType const & first,
+ genIType const & count
+ )
+ {
+ assert(first + count < sizeof(double));
+ return (detail::uif64(value).i << first) >> ((sizeof(double) << genIType(3)) - count);
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER genIUType extractField
+ (
+ genIUType const & Value,
+ sizeType const & First,
+ sizeType const & Count
+ )
+ {
+ sizeType GenSize = sizeof(genIUType) << 3;
+
+ assert(First + Count <= GenSize);
+
+ genIUType ShiftLeft = Count ? Value << (GenSize - (Count + First)) : 0;
+ genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Count);
+
+ return ShiftBack;
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec2<genIUType> extractField
+ (
+ detail::tvec2<genIUType> const & value,
+ sizeType const & first,
+ sizeType const & count
+ )
+ {
+ return detail::tvec2<genIUType>(
+ extractField(value[0], first, count),
+ extractField(value[1], first, count));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec3<genIUType> extractField
+ (
+ detail::tvec3<genIUType> const & value,
+ sizeType const & first,
+ sizeType const & count
+ )
+ {
+ return detail::tvec3<genIUType>(
+ extractField(value[0], first, count),
+ extractField(value[1], first, count),
+ extractField(value[2], first, count));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec4<genIUType> extractField
+ (
+ detail::tvec4<genIUType> const & value,
+ sizeType const & first,
+ sizeType const & count
+ )
+ {
+ return detail::tvec4<genIUType>(
+ extractField(value[0], first, count),
+ extractField(value[1], first, count),
+ extractField(value[2], first, count),
+ extractField(value[3], first, count));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec2<genIUType> extractField
+ (
+ detail::tvec2<genIUType> const & value,
+ detail::tvec2<sizeType> const & first,
+ detail::tvec2<sizeType> const & count
+ )
+ {
+ return detail::tvec2<genIUType>(
+ extractField(value[0], first[0], count[0]),
+ extractField(value[1], first[1], count[1]));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec3<genIUType> extractField
+ (
+ detail::tvec3<genIUType> const & value,
+ detail::tvec3<sizeType> const & first,
+ detail::tvec3<sizeType> const & count
+ )
+ {
+ return detail::tvec3<genIUType>(
+ extractField(value[0], first[0], count[0]),
+ extractField(value[1], first[1], count[1]),
+ extractField(value[2], first[2], count[2]));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec4<genIUType> extractField
+ (
+ detail::tvec4<genIUType> const & value,
+ detail::tvec4<sizeType> const & first,
+ detail::tvec4<sizeType> const & count
+ )
+ {
+ return detail::tvec4<genIUType>(
+ extractField(value[0], first[0], count[0]),
+ extractField(value[1], first[1], count[1]),
+ extractField(value[2], first[2], count[2]),
+ extractField(value[3], first[3], count[3]));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec2<genIUType> extractField
+ (
+ genIUType const & value,
+ detail::tvec2<sizeType> const & first,
+ detail::tvec2<sizeType> const & count
+ )
+ {
+ return detail::tvec2<genIUType>(
+ extractField(value, first[0], count[0]),
+ extractField(value, first[1], count[1]));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec3<genIUType> extractField
+ (
+ genIUType const & value,
+ detail::tvec3<sizeType> const & first,
+ detail::tvec3<sizeType> const & count
+ )
+ {
+ return detail::tvec3<genIUType>(
+ extractField(value, first[0], count[0]),
+ extractField(value, first[1], count[1]),
+ extractField(value, first[2], count[2]));
+ }
+
+ template <typename genIUType, typename sizeType>
+ GLM_FUNC_QUALIFIER detail::tvec4<genIUType> extractField
+ (
+ genIUType const & value,
+ detail::tvec4<sizeType> const & first,
+ detail::tvec4<sizeType> const & count
+ )
+ {
+ return detail::tvec4<genIUType>(
+ extractField(value, first[0], count[0]),
+ extractField(value, first[1], count[1]),
+ extractField(value, first[2], count[2]),
+ extractField(value, first[3], count[3]));
+ }
+
+ // lowestBit
+ template <typename genType>
+ GLM_FUNC_QUALIFIER int lowestBit
+ (
+ genType const & Value
+ )
+ {
+ assert(Value != genType(0)); // not valid call
+
+ genType Bit;
+ for(Bit = genType(0); !(Value & (1 << Bit)); ++Bit){}
+ return Bit;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<int> lowestBit
+ (
+ detail::tvec2<valType> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ lowestBit(value[0]),
+ lowestBit(value[1]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<int> lowestBit
+ (
+ detail::tvec3<valType> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ lowestBit(value[0]),
+ lowestBit(value[1]),
+ lowestBit(value[2]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<int> lowestBit
+ (
+ detail::tvec4<valType> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ lowestBit(value[0]),
+ lowestBit(value[1]),
+ lowestBit(value[2]),
+ lowestBit(value[3]));
+ }
+
+ // highestBit
+ template <typename genType>
+ GLM_FUNC_QUALIFIER int highestBit
+ (
+ genType const & value
+ )
+ {
+ assert(value != genType(0)); // not valid call
+
+ genType bit = genType(-1);
+ for(genType tmp = value; tmp; tmp >>= 1, ++bit){}
+ return bit;
+ }
+
+ //template <>
+ //GLM_FUNC_QUALIFIER int highestBit<int>
+ //(
+ // int value
+ //)
+ //{
+ // int bit = -1;
+ // for(int tmp = value; tmp; tmp >>= 1, ++bit);
+ // return bit;
+ //}
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<int> highestBit
+ (
+ detail::tvec2<valType> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ highestBit(value[0]),
+ highestBit(value[1]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<int> highestBit
+ (
+ detail::tvec3<valType> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ highestBit(value[0]),
+ highestBit(value[1]),
+ highestBit(value[2]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<int> highestBit
+ (
+ detail::tvec4<valType> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ highestBit(value[0]),
+ highestBit(value[1]),
+ highestBit(value[2]),
+ highestBit(value[3]));
+ }
+
+ // highestBitValue
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType highestBitValue
+ (
+ genType const & value
+ )
+ {
+ genType tmp = value;
+ genType result = genType(0);
+ while(tmp)
+ {
+ result = (tmp & (~tmp + 1)); // grab lowest bit
+ tmp &= ~result; // clear lowest bit
+ }
+ return result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<int> highestBitValue
+ (
+ detail::tvec2<valType> const & value
+ )
+ {
+ return detail::tvec2<int>(
+ highestBitValue(value[0]),
+ highestBitValue(value[1]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<int> highestBitValue
+ (
+ detail::tvec3<valType> const & value
+ )
+ {
+ return detail::tvec3<int>(
+ highestBitValue(value[0]),
+ highestBitValue(value[1]),
+ highestBitValue(value[2]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<int> highestBitValue
+ (
+ detail::tvec4<valType> const & value
+ )
+ {
+ return detail::tvec4<int>(
+ highestBitValue(value[0]),
+ highestBitValue(value[1]),
+ highestBitValue(value[2]),
+ highestBitValue(value[3]));
+ }
+
+ // isPowerOfTwo
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isPowerOfTwo(genType const & Value)
+ {
+ //detail::If<std::numeric_limits<genType>::is_signed>::apply(abs, Value);
+ //return !(Value & (Value - 1));
+
+ // For old complier?
+ genType Result = Value;
+ if(std::numeric_limits<genType>::is_signed)
+ Result = abs(Result);
+ return !(Result & (Result - 1));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> isPowerOfTwo
+ (
+ detail::tvec2<valType> const & value
+ )
+ {
+ return detail::tvec2<bool>(
+ isPowerOfTwo(value[0]),
+ isPowerOfTwo(value[1]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> isPowerOfTwo
+ (
+ detail::tvec3<valType> const & value
+ )
+ {
+ return detail::tvec3<bool>(
+ isPowerOfTwo(value[0]),
+ isPowerOfTwo(value[1]),
+ isPowerOfTwo(value[2]));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> isPowerOfTwo
+ (
+ detail::tvec4<valType> const & value
+ )
+ {
+ return detail::tvec4<bool>(
+ isPowerOfTwo(value[0]),
+ isPowerOfTwo(value[1]),
+ isPowerOfTwo(value[2]),
+ isPowerOfTwo(value[3]));
+ }
+
+ // powerOfTwoAbove
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType const & value)
+ {
+ return isPowerOfTwo(value) ? value : highestBitValue(value) << 1;
+ }
+
+ VECTORIZE_VEC(powerOfTwoAbove)
+
+ // powerOfTwoBelow
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType powerOfTwoBelow
+ (
+ genType const & value
+ )
+ {
+ return isPowerOfTwo(value) ? value : highestBitValue(value);
+ }
+
+ VECTORIZE_VEC(powerOfTwoBelow)
+
+ // powerOfTwoNearest
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType powerOfTwoNearest
+ (
+ genType const & value
+ )
+ {
+ if(isPowerOfTwo(value))
+ return value;
+
+ genType prev = highestBitValue(value);
+ genType next = prev << 1;
+ return (next - value) < (value - prev) ? next : prev;
+ }
+
+ VECTORIZE_VEC(powerOfTwoNearest)
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType bitRevert(genType const & In)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_integer, "'bitRevert' only accept integer values");
+
+ genType Out = 0;
+ std::size_t BitSize = sizeof(genType) * 8;
+ for(std::size_t i = 0; i < BitSize; ++i)
+ if(In & (genType(1) << i))
+ Out |= genType(1) << (BitSize - 1 - i);
+ return Out;
+ }
+
+ VECTORIZE_VEC(bitRevert)
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType bitRotateRight(genType const & In, std::size_t Shift)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_integer, "'bitRotateRight' only accept integer values");
+
+ std::size_t BitSize = sizeof(genType) * 8;
+ return (In << Shift) | (In >> (BitSize - Shift));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> bitRotateRight
+ (
+ detail::tvec2<valType> const & Value,
+ std::size_t Shift
+ )
+ {
+ return detail::tvec2<valType>(
+ bitRotateRight(Value[0], Shift),
+ bitRotateRight(Value[1], Shift));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> bitRotateRight
+ (
+ detail::tvec3<valType> const & Value,
+ std::size_t Shift
+ )
+ {
+ return detail::tvec3<valType>(
+ bitRotateRight(Value[0], Shift),
+ bitRotateRight(Value[1], Shift),
+ bitRotateRight(Value[2], Shift));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> bitRotateRight
+ (
+ detail::tvec4<valType> const & Value,
+ std::size_t Shift
+ )
+ {
+ return detail::tvec4<valType>(
+ bitRotateRight(Value[0], Shift),
+ bitRotateRight(Value[1], Shift),
+ bitRotateRight(Value[2], Shift),
+ bitRotateRight(Value[3], Shift));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType bitRotateLeft(genType const & In, std::size_t Shift)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_integer, "'bitRotateLeft' only accept integer values");
+
+ std::size_t BitSize = sizeof(genType) * 8;
+ return (In >> Shift) | (In << (BitSize - Shift));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> bitRotateLeft
+ (
+ detail::tvec2<valType> const & Value,
+ std::size_t Shift
+ )
+ {
+ return detail::tvec2<valType>(
+ bitRotateLeft(Value[0], Shift),
+ bitRotateLeft(Value[1], Shift));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> bitRotateLeft
+ (
+ detail::tvec3<valType> const & Value,
+ std::size_t Shift
+ )
+ {
+ return detail::tvec3<valType>(
+ bitRotateLeft(Value[0], Shift),
+ bitRotateLeft(Value[1], Shift),
+ bitRotateLeft(Value[2], Shift));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> bitRotateLeft
+ (
+ detail::tvec4<valType> const & Value,
+ std::size_t Shift
+ )
+ {
+ return detail::tvec4<valType>(
+ bitRotateLeft(Value[0], Shift),
+ bitRotateLeft(Value[1], Shift),
+ bitRotateLeft(Value[2], Shift),
+ bitRotateLeft(Value[3], Shift));
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType fillBitfieldWithOne
+ (
+ genIUType const & Value,
+ int const & FromBit,
+ int const & ToBit
+ )
+ {
+ assert(FromBit <= ToBit);
+ assert(ToBit <= sizeof(genIUType) * std::size_t(8));
+
+ genIUType Result = Value;
+ for(std::size_t i = 0; i <= ToBit; ++i)
+ Result |= (1 << i);
+ return Result;
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType fillBitfieldWithZero
+ (
+ genIUType const & Value,
+ int const & FromBit,
+ int const & ToBit
+ )
+ {
+ assert(FromBit <= ToBit);
+ assert(ToBit <= sizeof(genIUType) * std::size_t(8));
+
+ genIUType Result = Value;
+ for(std::size_t i = 0; i <= ToBit; ++i)
+ Result &= ~(1 << i);
+ return Result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/closest_point.hpp b/include/gal/opengl/glm/gtx/closest_point.hpp
new file mode 100644
index 0000000..7f79556
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/closest_point.hpp
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_bit
+/// @file glm/gtx/bit.hpp
+/// @date 2005-12-30 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_closest_point GLM_GTX_closest_point
+/// @ingroup gtx
+///
+/// @brief Find the point on a straight line which is the closet of a point.
+///
+/// <glm/gtx/closest_point.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_closest_point
+#define GLM_GTX_closest_point GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_closest_point extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_closest_point
+ /// @{
+
+ /// Find the point on a straight line which is the closet of a point.
+ /// @see gtx_closest_point
+ template <typename T>
+ detail::tvec3<T> closestPointOnLine(
+ detail::tvec3<T> const & point,
+ detail::tvec3<T> const & a,
+ detail::tvec3<T> const & b);
+
+ /// @}
+}// namespace glm
+
+#include "closest_point.inl"
+
+#endif//GLM_GTX_closest_point
diff --git a/include/gal/opengl/glm/gtx/closest_point.inl b/include/gal/opengl/glm/gtx/closest_point.inl
new file mode 100644
index 0000000..d018c1d
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/closest_point.inl
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-30
+// Updated : 2008-10-05
+// Licence : This source is under MIT License
+// File : glm/gtx/closest_point.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_gtx_closest_point
+#define glm_gtx_closest_point
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> closestPointOnLine
+ (
+ detail::tvec3<valType> const & point,
+ detail::tvec3<valType> const & a,
+ detail::tvec3<valType> const & b
+ )
+ {
+ valType LineLength = distance(a, b);
+ detail::tvec3<valType> Vector = point - a;
+ detail::tvec3<valType> LineDirection = (b - a) / LineLength;
+
+ // Project Vector to LineDirection to get the distance of point from a
+ valType Distance = dot(Vector, LineDirection);
+
+ if(Distance <= valType(0)) return a;
+ if(Distance >= LineLength) return b;
+ return a + LineDirection * Distance;
+ }
+}//namespace glm
+
+#endif//glm_gtx_closest_point
diff --git a/include/gal/opengl/glm/gtx/color_cast.hpp b/include/gal/opengl/glm/gtx/color_cast.hpp
new file mode 100644
index 0000000..5dada88
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/color_cast.hpp
@@ -0,0 +1,124 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_color_cast
+/// @file glm/gtx/color_cast.hpp
+/// @date 2007-06-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_number_precision (dependence)
+///
+/// @defgroup gtx_color_cast GLM_GTX_color_cast
+/// @ingroup gtx
+///
+/// @brief Conversion between two color types.
+///
+/// <glm/gtx/color_cast.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_color_cast
+#define GLM_GTX_color_cast GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/number_precision.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_color_cast extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_color_cast
+ /// @{
+
+ //! Conversion of a floating value into a 8bit unsigned int value.
+ /// @see gtx_color_cast
+ template <typename valType> uint8 u8channel_cast(valType a);
+
+ /// Conversion of a floating value into a 16bit unsigned int value.
+ /// @see gtx_color_cast
+ template <typename valType> uint16 u16channel_cast(valType a);
+
+ template <typename T> uint32 u32_rgbx_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint32 u32_xrgb_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint32 u32_bgrx_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint32 u32_xbgr_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> uint32 u32_rgba_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint32 u32_argb_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint32 u32_bgra_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint32 u32_abgr_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> uint64 u64_rgbx_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint64 u64_xrgb_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint64 u64_bgrx_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint64 u64_xbgr_cast(const detail::tvec3<T>& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> uint64 u64_rgba_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint64 u64_argb_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint64 u64_bgra_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+ template <typename T> uint64 u64_abgr_cast(const detail::tvec4<T>& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f16 f16_channel_cast(T a); //!< \brief Conversion of a u8 or u16 value to a single channel floating value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f16vec3 f16_rgbx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f16vec3 f16_xrgb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f16vec3 f16_bgrx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f16vec3 f16_xbgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f16vec4 f16_rgba_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f16vec4 f16_argb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f16vec4 f16_bgra_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f16vec4 f16_abgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f32 f32_channel_cast(T a); //!< \brief Conversion of a u8 or u16 value to a single channel floating value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f32vec3 f32_rgbx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f32vec3 f32_xrgb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f32vec3 f32_bgrx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f32vec3 f32_xbgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f32vec4 f32_rgba_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f32vec4 f32_argb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f32vec4 f32_bgra_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f32vec4 f32_abgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f64 f64_channel_cast(T a); //!< \brief Conversion of a u8 or u16 value to a single channel floating value. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f64vec3 f64_rgbx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f64vec3 f64_xrgb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f64vec3 f64_bgrx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f64vec3 f64_xbgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension)
+
+ template <typename T> f64vec4 f64_rgba_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f64vec4 f64_argb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f64vec4 f64_bgra_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+ template <typename T> f64vec4 f64_abgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension)
+
+ /// @}
+}//namespace glm
+
+#include "color_cast.inl"
+
+#endif//GLM_GTX_color_cast
diff --git a/include/gal/opengl/glm/gtx/color_cast.inl b/include/gal/opengl/glm/gtx/color_cast.inl
new file mode 100644
index 0000000..55fd1ce
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/color_cast.inl
@@ -0,0 +1,733 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-06-21
+// Updated : 2007-08-03
+// Licence : This source is under MIT License
+// File : glm/gtx/color_cast.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint8 u8channel_cast(T a)
+ {
+ return static_cast<uint8>(a * T(255));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint16 u16channel_cast(T a)
+ {
+ return static_cast<uint16>(a * T(65535));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_rgbx_cast(const detail::tvec3<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec3<T>::value_type(255)) << 0;
+ result += static_cast<uint32>(c.y * detail::tvec3<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.z * detail::tvec3<T>::value_type(255)) << 16;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_xrgb_cast(const detail::tvec3<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec3<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.y * detail::tvec3<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.z * detail::tvec3<T>::value_type(255)) << 24;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_bgrx_cast(const detail::tvec3<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec3<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.y * detail::tvec3<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.z * detail::tvec3<T>::value_type(255)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_xbgr_cast(const detail::tvec3<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec3<T>::value_type(255)) << 24;
+ result += static_cast<uint32>(c.y * detail::tvec3<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.z * detail::tvec3<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.w * detail::tvec3<T>::value_type(255)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_rgba_cast(const detail::tvec4<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec4<T>::value_type(255)) << 0;
+ result += static_cast<uint32>(c.y * detail::tvec4<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.z * detail::tvec4<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.w * detail::tvec4<T>::value_type(255)) << 24;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_argb_cast(const detail::tvec4<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec4<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.y * detail::tvec4<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.z * detail::tvec4<T>::value_type(255)) << 24;
+ result += static_cast<uint32>(c.w * detail::tvec4<T>::value_type(255)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_bgra_cast(const detail::tvec4<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec4<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.y * detail::tvec4<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.z * detail::tvec4<T>::value_type(255)) << 0;
+ result += static_cast<uint32>(c.w * detail::tvec4<T>::value_type(255)) << 24;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint32 u32_abgr_cast(const detail::tvec4<T>& c)
+ {
+ uint32 result = 0;
+ result += static_cast<uint32>(c.x * detail::tvec4<T>::value_type(255)) << 24;
+ result += static_cast<uint32>(c.y * detail::tvec4<T>::value_type(255)) << 16;
+ result += static_cast<uint32>(c.z * detail::tvec4<T>::value_type(255)) << 8;
+ result += static_cast<uint32>(c.w * detail::tvec4<T>::value_type(255)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u64_rgbx_cast(const detail::tvec3<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec3<T>::value_type(65535)) << 0;
+ result += static_cast<uint64>(c.y * detail::tvec3<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.z * detail::tvec3<T>::value_type(65535)) << 32;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u32_xrgb_cast(const detail::tvec3<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec3<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.y * detail::tvec3<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.z * detail::tvec3<T>::value_type(65535)) << 48;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u32_bgrx_cast(const detail::tvec3<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec3<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.y * detail::tvec3<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.z * detail::tvec3<T>::value_type(65535)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u32_xbgr_cast(const detail::tvec3<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec3<T>::value_type(65535)) << 48;
+ result += static_cast<uint64>(c.y * detail::tvec3<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.z * detail::tvec3<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.w * detail::tvec3<T>::value_type(65535)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u64_rgba_cast(const detail::tvec4<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec4<T>::value_type(65535)) << 0;
+ result += static_cast<uint64>(c.y * detail::tvec4<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.z * detail::tvec4<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.w * detail::tvec4<T>::value_type(65535)) << 48;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u64_argb_cast(const detail::tvec4<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec4<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.y * detail::tvec4<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.z * detail::tvec4<T>::value_type(65535)) << 48;
+ result += static_cast<uint64>(c.w * detail::tvec4<T>::value_type(65535)) << 0;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u64_bgra_cast(const detail::tvec4<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec4<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.y * detail::tvec4<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.z * detail::tvec4<T>::value_type(65535)) << 0;
+ result += static_cast<uint64>(c.w * detail::tvec4<T>::value_type(65535)) << 48;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint64 u64_abgr_cast(const detail::tvec4<T>& c)
+ {
+ uint64 result = 0;
+ result += static_cast<uint64>(c.x * detail::tvec4<T>::value_type(65535)) << 48;
+ result += static_cast<uint64>(c.y * detail::tvec4<T>::value_type(65535)) << 32;
+ result += static_cast<uint64>(c.z * detail::tvec4<T>::value_type(65535)) << 16;
+ result += static_cast<uint64>(c.w * detail::tvec4<T>::value_type(65535)) << 0;
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16 f16_channel_cast<uint32>(uint32 color)
+ {
+ return f16(static_cast<float>(color >> 0) / static_cast<float>(255));
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec3 f16_rgbx_cast<uint32>(uint32 color)
+ {
+ f16vec3 result;
+ result.x = f16(static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec3 f16_xrgb_cast<uint32>(uint32 color)
+ {
+ f16vec3 result;
+ result.x = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec3 f16_bgrx_cast<uint32>(uint32 color)
+ {
+ f16vec3 result;
+ result.x = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec3 f16_xbgr_cast<uint32>(uint32 color)
+ {
+ f16vec3 result;
+ result.x = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec4 f16_rgba_cast<uint32>(uint32 color)
+ {
+ f16vec4 result;
+ result.x = f16(static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.w = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec4 f16_argb_cast<uint32>(uint32 color)
+ {
+ f16vec4 result;
+ result.x = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+ result.w = f16(static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec4 f16_bgra_cast<uint32>(uint32 color)
+ {
+ f16vec4 result;
+ result.x = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255));
+ result.w = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER f16vec4 f16_abgr_cast<uint32>(uint32 color)
+ {
+ f16vec4 result;
+ result.x = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+ result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+ result.z = f16(static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255));
+ result.w = f16(static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER float f32_channel_cast<uint8>(uint8 color)
+ {
+ return static_cast<float>(color >> 0) / static_cast<float>(255);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_rgbx_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xrgb_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_bgrx_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xbgr_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_rgba_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.w = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_argb_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+ result.w = static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_bgra_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255);
+ result.w = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_abgr_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+ result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+ result.z = static_cast<float>((color >> 8) & 0xFF) / static_cast<float>(255);
+ result.w = static_cast<float>((color >> 0) & 0xFF) / static_cast<float>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double f64_channel_cast<uint8>(uint8 color)
+ {
+ return static_cast<double>(color >> 0) / static_cast<double>(255);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_rgbx_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 0) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xrgb_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_bgrx_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 0) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xbgr_cast<uint32>(uint32 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_rgba_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 0) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.w = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_argb_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+ result.w = static_cast<double>((color >> 0) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_bgra_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 0) & 0xFF) / static_cast<double>(255);
+ result.w = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_abgr_cast<uint32>(uint32 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+ result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+ result.z = static_cast<double>((color >> 8) & 0xFF) / static_cast<double>(255);
+ result.w = static_cast<double>((color >> 0) & 0xFF) / static_cast<double>(255);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::half f16_channel_cast<uint16>(uint16 color)
+ {
+ return detail::half(static_cast<float>(color >> 0) / static_cast<float>(65535));
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<detail::half> f16_rgbx_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<detail::half> f16_xrgb_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<detail::half> f16_bgrx_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<detail::half> f16_xbgr_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<detail::half> f16_rgba_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.w = detail::half(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<detail::half> f16_argb_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+ result.w = detail::half(static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<detail::half> f16_bgra_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535));
+ result.w = detail::half(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<detail::half> f16_abgr_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<detail::half> result;
+ result.x = detail::half(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+ result.y = detail::half(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+ result.z = detail::half(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+ result.w = detail::half(static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535));
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER float f32_channel_cast<uint16>(uint16 color)
+ {
+ return static_cast<float>(color >> 0) / static_cast<float>(65535);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_rgbx_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xrgb_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_bgrx_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xbgr_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<float> result;
+ result.x = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_rgba_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.w = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_argb_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+ result.w = static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_bgra_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535);
+ result.w = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<float> f32_abgr_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<float> result;
+ result.x = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+ result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+ result.z = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+ result.w = static_cast<float>((color >> 0) & 0xFFFF) / static_cast<float>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double f64_channel_cast<uint16>(uint16 color)
+ {
+ return static_cast<double>(color >> 0) / static_cast<double>(65535);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_rgbx_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 0) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xrgb_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_bgrx_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 0) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xbgr_cast<uint64>(uint64 color)
+ {
+ detail::tvec3<double> result;
+ result.x = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_rgba_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 0) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.w = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_argb_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+ result.w = static_cast<double>((color >> 0) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_bgra_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 0) & 0xFFFF) / static_cast<double>(65535);
+ result.w = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::tvec4<double> f64_abgr_cast<uint64>(uint64 color)
+ {
+ detail::tvec4<double> result;
+ result.x = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+ result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+ result.z = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+ result.w = static_cast<double>((color >> 0) & 0xFFFF) / static_cast<double>(65535);
+ return result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/color_space.hpp b/include/gal/opengl/glm/gtx/color_space.hpp
new file mode 100644
index 0000000..f144378
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/color_space.hpp
@@ -0,0 +1,96 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_color_space
+/// @file glm/gtx/color_space.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_color_space GLM_GTX_color_space
+/// @ingroup gtx
+///
+/// @brief Related to RGB to HSV conversions and operations.
+///
+/// <glm/gtx/color_space.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_color_space
+#define GLM_GTX_color_space GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_color_space extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_color_space
+ /// @{
+
+ /// Converts a color from HSV color space to its color in RGB color space.
+ /// @see gtx_color_space
+ template <typename valType>
+ detail::tvec3<valType> rgbColor(
+ detail::tvec3<valType> const & hsvValue);
+
+ /// Converts a color from RGB color space to its color in HSV color space.
+ /// @see gtx_color_space
+ template <typename valType>
+ detail::tvec3<valType> hsvColor(
+ detail::tvec3<valType> const & rgbValue);
+
+ /// Build a saturation matrix.
+ /// @see gtx_color_space
+ template <typename valType>
+ detail::tmat4x4<valType> saturation(
+ valType const s);
+
+ /// Modify the saturation of a color.
+ /// @see gtx_color_space
+ template <typename valType>
+ detail::tvec3<valType> saturation(
+ valType const s,
+ detail::tvec3<valType> const & color);
+
+ /// Modify the saturation of a color.
+ /// @see gtx_color_space
+ template <typename valType>
+ detail::tvec4<valType> saturation(
+ valType const s,
+ detail::tvec4<valType> const & color);
+
+ /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.
+ /// @see gtx_color_space
+ template <typename valType>
+ valType luminosity(
+ detail::tvec3<valType> const & color);
+
+ /// @}
+}//namespace glm
+
+#include "color_space.inl"
+
+#endif//GLM_GTX_color_space
diff --git a/include/gal/opengl/glm/gtx/color_space.inl b/include/gal/opengl/glm/gtx/color_space.inl
new file mode 100644
index 0000000..15cdc35
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/color_space.inl
@@ -0,0 +1,149 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2007-02-22
+// Licence : This source is under MIT License
+// File : glm/gtx/color_space.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rgbColor(const detail::tvec3<T>& hsvColor)
+ {
+ detail::tvec3<T> hsv = hsvColor;
+ detail::tvec3<T> rgbColor;
+
+ if(hsv.y == T(0))
+ // achromatic (grey)
+ rgbColor = detail::tvec3<T>(hsv.z);
+ else
+ {
+ T sector = floor(hsv.x / T(60));
+ T frac = (hsv.x / T(60)) - sector;
+ // factorial part of h
+ T o = hsv.z * (T(1) - hsv.y);
+ T p = hsv.z * (T(1) - hsv.y * frac);
+ T q = hsv.z * (T(1) - hsv.y * (T(1) - frac));
+
+ switch(int(sector))
+ {
+ default:
+ case 0:
+ rgbColor.r = hsv.z;
+ rgbColor.g = q;
+ rgbColor.b = o;
+ break;
+ case 1:
+ rgbColor.r = p;
+ rgbColor.g = hsv.z;
+ rgbColor.b = o;
+ break;
+ case 2:
+ rgbColor.r = o;
+ rgbColor.g = hsv.z;
+ rgbColor.b = q;
+ break;
+ case 3:
+ rgbColor.r = o;
+ rgbColor.g = p;
+ rgbColor.b = hsv.z;
+ break;
+ case 4:
+ rgbColor.r = q;
+ rgbColor.g = o;
+ rgbColor.b = hsv.z;
+ break;
+ case 5:
+ rgbColor.r = hsv.z;
+ rgbColor.g = o;
+ rgbColor.b = p;
+ break;
+ }
+ }
+
+ return rgbColor;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> hsvColor(const detail::tvec3<T>& rgbColor)
+ {
+ detail::tvec3<T> hsv = rgbColor;
+ float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b);
+ float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b);
+ float Delta = Max - Min;
+
+ hsv.z = Max;
+
+ if(Max != T(0))
+ {
+ hsv.y = Delta / hsv.z;
+ T h = T(0);
+
+ if(rgbColor.r == Max)
+ // between yellow & magenta
+ h = T(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta;
+ else if(rgbColor.g == Max)
+ // between cyan & yellow
+ h = T(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta;
+ else
+ // between magenta & cyan
+ h = T(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta;
+
+ if(h < T(0))
+ hsv.x = h + T(360);
+ else
+ hsv.x = h;
+ }
+ else
+ {
+ // If r = g = b = 0 then s = 0, h is undefined
+ hsv.y = T(0);
+ hsv.x = T(0);
+ }
+
+ return hsv;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> saturation(const T s)
+ {
+ detail::tvec3<T> rgbw = detail::tvec3<T>(T(0.2126), T(0.7152), T(0.0722));
+
+ T col0 = (T(1) - s) * rgbw.r;
+ T col1 = (T(1) - s) * rgbw.g;
+ T col2 = (T(1) - s) * rgbw.b;
+
+ detail::tmat4x4<T> result(T(1));
+ result[0][0] = col0 + s;
+ result[0][1] = col0;
+ result[0][2] = col0;
+ result[1][0] = col1;
+ result[1][1] = col1 + s;
+ result[1][2] = col1;
+ result[2][0] = col2;
+ result[2][1] = col2;
+ result[2][2] = col2 + s;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> saturation(const T s, const detail::tvec3<T>& color)
+ {
+ return detail::tvec3<T>(saturation(s) * detail::tvec4<T>(color, T(0)));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> saturation(const T s, const detail::tvec4<T>& color)
+ {
+ return saturation(s) * color;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T luminosity(const detail::tvec3<T>& color)
+ {
+ const detail::tvec3<T> tmp = detail::tvec3<T>(0.33, 0.59, 0.11);
+ return dot(color, tmp);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/color_space_YCoCg.hpp b/include/gal/opengl/glm/gtx/color_space_YCoCg.hpp
new file mode 100644
index 0000000..8ca4b10
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/color_space_YCoCg.hpp
@@ -0,0 +1,84 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_color_space_YCoCg
+/// @file glm/gtx/color_space_YCoCg.hpp
+/// @date 2008-10-28 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg
+/// @ingroup gtx
+///
+/// @brief RGB to YCoCg conversions and operations
+///
+/// <glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_gtx_color_space_YCoCg
+#define glm_gtx_color_space_YCoCg GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_color_space_YCoCg
+ /// @{
+
+ /// Convert a color from RGB color space to YCoCg color space.
+ /// @see gtx_color_space_YCoCg
+ template <typename valType>
+ detail::tvec3<valType> rgb2YCoCg(
+ detail::tvec3<valType> const & rgbColor);
+
+ /// Convert a color from YCoCg color space to RGB color space.
+ /// @see gtx_color_space_YCoCg
+ template <typename valType>
+ detail::tvec3<valType> YCoCg2rgb(
+ detail::tvec3<valType> const & YCoCgColor);
+
+ /// Convert a color from RGB color space to YCoCgR color space.
+ /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
+ /// @see gtx_color_space_YCoCg
+ template <typename valType>
+ detail::tvec3<valType> rgb2YCoCgR(
+ detail::tvec3<valType> const & rgbColor);
+
+ /// Convert a color from YCoCgR color space to RGB color space.
+ /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
+ /// @see gtx_color_space_YCoCg
+ template <typename valType>
+ detail::tvec3<valType> YCoCgR2rgb(
+ detail::tvec3<valType> const & YCoCgColor);
+
+ /// @}
+}//namespace glm
+
+#include "color_space_YCoCg.inl"
+
+#endif//glm_gtx_color_space_YCoCg
diff --git a/include/gal/opengl/glm/gtx/color_space_YCoCg.inl b/include/gal/opengl/glm/gtx/color_space_YCoCg.inl
new file mode 100644
index 0000000..08d8440
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/color_space_YCoCg.inl
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-10-28
+// Updated : 2008-10-28
+// Licence : This source is under MIT License
+// File : glm/gtx/color_space_YCoCg.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> rgb2YCoCg
+ (
+ detail::tvec3<valType> const & rgbColor
+ )
+ {
+ detail::tvec3<valType> result;
+ result.x/*Y */ = rgbColor.r / valType(4) + rgbColor.g / valType(2) + rgbColor.b / valType(4);
+ result.y/*Co*/ = rgbColor.r / valType(2) + rgbColor.g * valType(0) - rgbColor.b / valType(2);
+ result.z/*Cg*/ = - rgbColor.r / valType(4) + rgbColor.g / valType(2) - rgbColor.b / valType(4);
+ return result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> rgb2YCoCgR
+ (
+ detail::tvec3<valType> const & rgbColor
+ )
+ {
+ detail::tvec3<valType> result;
+ result.x/*Y */ = rgbColor.g / valType(2) + (rgbColor.r + rgbColor.b) / valType(4);
+ result.y/*Co*/ = rgbColor.r - rgbColor.b;
+ result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) / valType(2);
+ return result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> YCoCg2rgb
+ (
+ detail::tvec3<valType> const & YCoCgColor
+ )
+ {
+ detail::tvec3<valType> result;
+ result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z;
+ result.g = YCoCgColor.x + YCoCgColor.z;
+ result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z;
+ return result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> YCoCgR2rgb
+ (
+ detail::tvec3<valType> const & YCoCgRColor
+ )
+ {
+ detail::tvec3<valType> result;
+ valType tmp = YCoCgRColor.x - (YCoCgRColor.z / valType(2));
+ result.g = YCoCgRColor.z + tmp;
+ result.b = tmp - (YCoCgRColor.y / valType(2));
+ result.r = result.b + YCoCgRColor.y;
+ return result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/compatibility.hpp b/include/gal/opengl/glm/gtx/compatibility.hpp
new file mode 100644
index 0000000..c394a43
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/compatibility.hpp
@@ -0,0 +1,176 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_compatibility
+/// @file glm/gtx/compatibility.hpp
+/// @date 2007-01-24 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_compatibility GLM_GTX_compatibility
+/// @ingroup gtx
+///
+/// @brief Provide functions to increase the compatibility with Cg and HLSL languages
+///
+/// <glm/gtx/compatibility.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_compatibility
+#define GLM_GTX_compatibility GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_compatibility extension included")
+#endif
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+# include <cfloat>
+#elif(GLM_COMPILER & GLM_COMPILER_GCC)
+# include <cmath>
+# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+# undef isfinite
+# endif
+#endif//GLM_COMPILER
+
+namespace glm
+{
+ /// @addtogroup gtx_compatibility
+ /// @{
+
+ template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, const detail::tvec2<T>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, const detail::tvec3<T>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, const detail::tvec4<T>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+
+ template <typename T> GLM_FUNC_QUALIFIER T slerp(detail::tquat<T> const & x, detail::tquat<T> const & y, T const & a){return mix(x, y, a);} //!< \brief Returns the slurp interpolation between two quaternions.
+
+ template <typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> saturate(const detail::tvec2<T>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> saturate(const detail::tvec3<T>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> saturate(const detail::tvec4<T>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+
+ template <typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> atan2(const detail::tvec2<T>& x, const detail::tvec2<T>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> atan2(const detail::tvec3<T>& x, const detail::tvec3<T>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+ template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> atan2(const detail::tvec4<T>& x, const detail::tvec4<T>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+
+ template <typename genType> bool isfinite(genType const & x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename valType> detail::tvec2<bool> isfinite(const detail::tvec2<valType>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename valType> detail::tvec3<bool> isfinite(const detail::tvec3<valType>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename valType> detail::tvec4<bool> isfinite(const detail::tvec4<valType>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+
+ typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec2<bool> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec3<bool> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec4<bool> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x2<bool> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x3<bool> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x4<bool> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x2<bool> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x3<bool> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x4<bool> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x2<bool> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x3<bool> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x4<bool> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec2<int> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec3<int> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec4<int> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x2<int> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x3<int> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x4<int> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x2<int> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x3<int> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x4<int> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x2<int> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x3<int> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x4<int> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef detail::half half1; //!< \brief half-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec2<detail::half> half2; //!< \brief half-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec3<detail::half> half3; //!< \brief half-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec4<detail::half> half4; //!< \brief half-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+
+ typedef detail::half half1x1; //!< \brief half-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x2<detail::half> half2x2; //!< \brief half-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x3<detail::half> half2x3; //!< \brief half-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x4<detail::half> half2x4; //!< \brief half-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x2<detail::half> half3x2; //!< \brief half-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x3<detail::half> half3x3; //!< \brief half-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x4<detail::half> half3x4; //!< \brief half-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x2<detail::half> half4x2; //!< \brief half-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x3<detail::half> half4x3; //!< \brief half-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x4<detail::half> half4x4; //!< \brief half-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef float float1; //!< \brief single-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec2<float> float2; //!< \brief single-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec3<float> float3; //!< \brief single-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec4<float> float4; //!< \brief single-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef float float1x1; //!< \brief single-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x2<float> float2x2; //!< \brief single-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x3<float> float2x3; //!< \brief single-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x4<float> float2x4; //!< \brief single-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x2<float> float3x2; //!< \brief single-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x3<float> float3x3; //!< \brief single-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x4<float> float3x4; //!< \brief single-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x2<float> float4x2; //!< \brief single-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x3<float> float4x3; //!< \brief single-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x4<float> float4x4; //!< \brief single-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef double double1; //!< \brief double-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec2<double> double2; //!< \brief double-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec3<double> double3; //!< \brief double-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tvec4<double> double4; //!< \brief double-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef double double1x1; //!< \brief double-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x2<double> double2x2; //!< \brief double-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x3<double> double2x3; //!< \brief double-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat2x4<double> double2x4; //!< \brief double-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x2<double> double3x2; //!< \brief double-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x3<double> double3x3; //!< \brief double-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat3x4<double> double3x4; //!< \brief double-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x2<double> double4x2; //!< \brief double-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x3<double> double4x3; //!< \brief double-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef detail::tmat4x4<double> double4x4; //!< \brief double-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ /// @}
+}//namespace glm
+
+#include "compatibility.inl"
+
+#endif//GLM_GTX_compatibility
+
diff --git a/include/gal/opengl/glm/gtx/compatibility.inl b/include/gal/opengl/glm/gtx/compatibility.inl
new file mode 100644
index 0000000..073c694
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/compatibility.inl
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-03-16
+// Updated : 2008-10-24
+// Licence : This source is under MIT License
+// File : glm/gtx/compatibility.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // isfinite
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isfinite(
+ genType const & x)
+ {
+# if(GLM_COMPILER & GLM_COMPILER_VC)
+ return _finite(x);
+# elif(GLM_COMPILER & GLM_COMPILER_GCC)
+# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return _isfinite(x) != 0;
+# else
+ return std::isfinite(x) != 0;
+# endif
+# else
+ return std::isfinite(x) != 0;
+# endif
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> isfinite(
+ detail::tvec2<valType> const & x)
+ {
+ return detail::tvec2<bool>(
+ isfinite(x.x),
+ isfinite(x.y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> isfinite(
+ detail::tvec3<valType> const & x)
+ {
+ return detail::tvec3<bool>(
+ isfinite(x.x),
+ isfinite(x.y),
+ isfinite(x.z));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> isfinite(
+ detail::tvec4<valType> const & x)
+ {
+ return detail::tvec4<bool>(
+ isfinite(x.x),
+ isfinite(x.y),
+ isfinite(x.z),
+ isfinite(x.w));
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/component_wise.hpp b/include/gal/opengl/glm/gtx/component_wise.hpp
new file mode 100644
index 0000000..d3274be
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/component_wise.hpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_component_wise
+/// @file glm/gtx/component_wise.hpp
+/// @date 2007-05-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_component_wise GLM_GTX_component_wise
+/// @ingroup gtx
+///
+/// @brief Operations between components of a type
+///
+/// <glm/gtx/component_wise.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_component_wise
+#define GLM_GTX_component_wise GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_component_wise extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_component_wise
+ /// @{
+
+ /// Add all vector components together.
+ /// @see gtx_component_wise
+ template <typename genType>
+ typename genType::value_type compAdd(
+ genType const & v);
+
+ /// Multiply all vector components together.
+ /// @see gtx_component_wise
+ template <typename genType>
+ typename genType::value_type compMul(
+ genType const & v);
+
+ /// Find the minimum value between single vector components.
+ /// @see gtx_component_wise
+ template <typename genType>
+ typename genType::value_type compMin(
+ genType const & v);
+
+ /// Find the maximum value between single vector components.
+ /// @see gtx_component_wise
+ template <typename genType>
+ typename genType::value_type compMax(
+ genType const & v);
+
+ /// @}
+}//namespace glm
+
+#include "component_wise.inl"
+
+#endif//GLM_GTX_component_wise
diff --git a/include/gal/opengl/glm/gtx/component_wise.inl b/include/gal/opengl/glm/gtx/component_wise.inl
new file mode 100644
index 0000000..8baea62
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/component_wise.inl
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-05-21
+// Updated : 2010-02-12
+// Licence : This source is under MIT License
+// File : gtx_component_wise.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::value_type compAdd(genType const & v)
+ {
+ typename genType::value_type result = typename genType::value_type(0);
+ for(typename genType::size_type i = 0; i < v.length(); ++i)
+ result += v[i];
+ return result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::value_type compMul(genType const & v)
+ {
+ typename genType::value_type result = typename genType::value_type(1);
+ for(typename genType::size_type i = 0; i < v.length(); ++i)
+ result *= v[i];
+ return result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::value_type compMin(genType const & v)
+ {
+ typename genType::value_type result = typename genType::value_type(v[0]);
+ for(typename genType::size_type i = 1; i < v.length(); ++i)
+ result = min(result, v[i]);
+ return result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::value_type compMax(genType const & v)
+ {
+ typename genType::value_type result = typename genType::value_type(v[0]);
+ for(typename genType::size_type i = 1; i < v.length(); ++i)
+ result = max(result, v[i]);
+ return result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/constants.hpp b/include/gal/opengl/glm/gtx/constants.hpp
new file mode 100644
index 0000000..78356ff
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/constants.hpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_constants
+#define GLM_GTX_constants GLM_VERSION
+
+#include "../gtc/constants.hpp"
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_constants extension is deprecated, include GLM_GTC_constants (glm/gtc/constants.hpp) instead")
+#endif
+
+#endif//GLM_GTX_constants
diff --git a/include/gal/opengl/glm/gtx/epsilon.hpp b/include/gal/opengl/glm/gtx/epsilon.hpp
new file mode 100644
index 0000000..9cb91cb
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/epsilon.hpp
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_epsilon extension is deprecated, include GLM_GTC_epsilon (glm/gtc/epsilon) instead")
+#endif
+
+// Promoted:
+#include "../gtc/epsilon.hpp"
diff --git a/include/gal/opengl/glm/gtx/euler_angles.hpp b/include/gal/opengl/glm/gtx/euler_angles.hpp
new file mode 100644
index 0000000..ab04042
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/euler_angles.hpp
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_euler_angles
+/// @file glm/gtx/euler_angles.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_euler_angles GLM_GTX_euler_angles
+/// @ingroup gtx
+///
+/// @brief Build matrices from Euler angles.
+///
+/// <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_euler_angles
+#define GLM_GTX_euler_angles GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_euler_angles extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_euler_angles
+ /// @{
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleX(
+ valType const & angleX);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleY(
+ valType const & angleY);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleZ(
+ valType const & angleZ);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleXY(
+ valType const & angleX,
+ valType const & angleY);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleYX(
+ valType const & angleY,
+ valType const & angleX);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleXZ(
+ valType const & angleX,
+ valType const & angleZ);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleZX(
+ valType const & angleZ,
+ valType const & angleX);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleYZ(
+ valType const & angleY,
+ valType const & angleZ);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleZY(
+ valType const & angleZ,
+ valType const & angleY);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> eulerAngleYXZ(
+ valType const & yaw,
+ valType const & pitch,
+ valType const & roll);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename valType>
+ detail::tmat4x4<valType> yawPitchRoll(
+ valType const & yaw,
+ valType const & pitch,
+ valType const & roll);
+
+ /// Creates a 2D 2 * 2 rotation matrix from an euler angle.
+ /// @see gtx_euler_angles
+ template <typename T>
+ detail::tmat2x2<T> orientate2(T const & angle);
+
+ /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.
+ /// @see gtx_euler_angles
+ template <typename T>
+ detail::tmat3x3<T> orientate3(T const & angle);
+
+ /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ detail::tmat3x3<T> orientate3(detail::tvec3<T> const & angles);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ detail::tmat4x4<T> orientate4(detail::tvec3<T> const & angles);
+
+ /// @}
+}//namespace glm
+
+#include "euler_angles.inl"
+
+#endif//GLM_GTX_euler_angles
diff --git a/include/gal/opengl/glm/gtx/euler_angles.inl b/include/gal/opengl/glm/gtx/euler_angles.inl
new file mode 100644
index 0000000..a6ca0ab
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/euler_angles.inl
@@ -0,0 +1,244 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2007-08-14
+// Licence : This source is under MIT License
+// File : glm/gtx/euler_angles.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleX
+ (
+ valType const & angleX
+ )
+ {
+ valType cosX = glm::cos(angleX);
+ valType sinX = glm::sin(angleX);
+
+ return detail::tmat4x4<valType>(
+ valType(1), valType(0), valType(0), valType(0),
+ valType(0), cosX, sinX, valType(0),
+ valType(0),-sinX, cosX, valType(0),
+ valType(0), valType(0), valType(0), valType(1));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleY
+ (
+ valType const & angleY
+ )
+ {
+ valType cosY = glm::cos(angleY);
+ valType sinY = glm::sin(angleY);
+
+ return detail::tmat4x4<valType>(
+ cosY, valType(0),-sinY, valType(0),
+ valType(0), valType(1), valType(0), valType(0),
+ sinY, valType(0), cosY, valType(0),
+ valType(0), valType(0), valType(0), valType(1));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleZ
+ (
+ valType const & angleZ
+ )
+ {
+ valType cosZ = glm::cos(angleZ);
+ valType sinZ = glm::sin(angleZ);
+
+ return detail::tmat4x4<valType>(
+ cosZ, sinZ, valType(0), valType(0),
+ -sinZ, cosZ, valType(0), valType(0),
+ valType(0), valType(0), valType(1), valType(0),
+ valType(0), valType(0), valType(0), valType(1));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleXY
+ (
+ valType const & angleX,
+ valType const & angleY
+ )
+ {
+ valType cosX = glm::cos(angleX);
+ valType sinX = glm::sin(angleX);
+ valType cosY = glm::cos(angleY);
+ valType sinY = glm::sin(angleY);
+
+ return detail::tmat4x4<valType>(
+ cosY, -sinX * sinY, cosX * sinY, valType(0),
+ valType(0), cosX, sinX, valType(0),
+ -sinY , -sinX * cosY, cosX * cosY, valType(0),
+ valType(0), valType(0), valType(0), valType(1));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleYX
+ (
+ valType const & angleY,
+ valType const & angleX
+ )
+ {
+ valType cosX = glm::cos(angleX);
+ valType sinX = glm::sin(angleX);
+ valType cosY = glm::cos(angleY);
+ valType sinY = glm::sin(angleY);
+
+ return detail::tmat4x4<valType>(
+ cosY, valType(0), sinY, valType(0),
+ -sinX * sinY, cosX, sinX * cosY, valType(0),
+ -cosX * sinY, -sinX, cosX * cosY, valType(0),
+ valType(0), valType(0), valType(0), valType(1));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleXZ
+ (
+ valType const & angleX,
+ valType const & angleZ
+ )
+ {
+ return eulerAngleX(angleX) * eulerAngleZ(angleZ);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleZX
+ (
+ valType const & angleZ,
+ valType const & angleX
+ )
+ {
+ return eulerAngleZ(angleZ) * eulerAngleX(angleX);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> eulerAngleYXZ
+ (
+ valType const & yaw,
+ valType const & pitch,
+ valType const & roll
+ )
+ {
+ valType tmp_ch = glm::cos(yaw);
+ valType tmp_sh = glm::sin(yaw);
+ valType tmp_cp = glm::cos(pitch);
+ valType tmp_sp = glm::sin(pitch);
+ valType tmp_cb = glm::cos(roll);
+ valType tmp_sb = glm::sin(roll);
+
+ detail::tmat4x4<valType> Result;
+ Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;
+ Result[0][1] = tmp_sb * tmp_cp;
+ Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;
+ Result[0][3] = valType(0);
+ Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;
+ Result[1][1] = tmp_cb * tmp_cp;
+ Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;
+ Result[1][3] = valType(0);
+ Result[2][0] = tmp_sh * tmp_cp;
+ Result[2][1] = -tmp_sp;
+ Result[2][2] = tmp_ch * tmp_cp;
+ Result[2][3] = valType(0);
+ Result[3][0] = valType(0);
+ Result[3][1] = valType(0);
+ Result[3][2] = valType(0);
+ Result[3][3] = valType(1);
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> yawPitchRoll
+ (
+ valType const & yaw,
+ valType const & pitch,
+ valType const & roll
+ )
+ {
+ valType tmp_ch = glm::cos(yaw);
+ valType tmp_sh = glm::sin(yaw);
+ valType tmp_cp = glm::cos(pitch);
+ valType tmp_sp = glm::sin(pitch);
+ valType tmp_cb = glm::cos(roll);
+ valType tmp_sb = glm::sin(roll);
+
+ detail::tmat4x4<valType> Result;
+ Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;
+ Result[0][1] = tmp_sb * tmp_cp;
+ Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;
+ Result[0][3] = valType(0);
+ Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;
+ Result[1][1] = tmp_cb * tmp_cp;
+ Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;
+ Result[1][3] = valType(0);
+ Result[2][0] = tmp_sh * tmp_cp;
+ Result[2][1] = -tmp_sp;
+ Result[2][2] = tmp_ch * tmp_cp;
+ Result[2][3] = valType(0);
+ Result[3][0] = valType(0);
+ Result[3][1] = valType(0);
+ Result[3][2] = valType(0);
+ Result[3][3] = valType(1);
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<valType> orientate2
+ (
+ valType const & angle
+ )
+ {
+ valType c = glm::cos(angle);
+ valType s = glm::sin(angle);
+
+ detail::tmat2x2<valType> Result;
+ Result[0][0] = c;
+ Result[0][1] = s;
+ Result[1][0] = -s;
+ Result[1][1] = c;
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<valType> orientate3
+ (
+ valType const & angle
+ )
+ {
+ valType c = glm::cos(angle);
+ valType s = glm::sin(angle);
+
+ detail::tmat3x3<valType> Result;
+ Result[0][0] = c;
+ Result[0][1] = s;
+ Result[0][2] = 0.0f;
+ Result[1][0] = -s;
+ Result[1][1] = c;
+ Result[1][2] = 0.0f;
+ Result[2][0] = 0.0f;
+ Result[2][1] = 0.0f;
+ Result[2][2] = 1.0f;
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<valType> orientate3
+ (
+ detail::tvec3<valType> const & angles
+ )
+ {
+ return detail::tmat3x3<valType>(yawPitchRoll(angles.x, angles.y, angles.z));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> orientate4
+ (
+ detail::tvec3<valType> const & angles
+ )
+ {
+ return yawPitchRoll(angles.z, angles.x, angles.y);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/extend.hpp b/include/gal/opengl/glm/gtx/extend.hpp
new file mode 100644
index 0000000..d23beba
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/extend.hpp
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_extend
+/// @file glm/gtx/extend.hpp
+/// @date 2006-01-07 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_extend GLM_GTX_extend
+/// @ingroup gtx
+///
+/// @brief Extend a position from a source to a position at a defined length.
+///
+/// <glm/gtx/extend.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_extend
+#define GLM_GTX_extend GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_extend extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_extend
+ /// @{
+
+ /// Extends of Length the Origin position using the (Source - Origin) direction.
+ /// @see gtx_extend
+ template <typename genType>
+ genType extend(
+ genType const & Origin,
+ genType const & Source,
+ typename genType::value_type const Length);
+
+ /// @}
+}//namespace glm
+
+#include "extend.inl"
+
+#endif//GLM_GTX_extend
diff --git a/include/gal/opengl/glm/gtx/extend.inl b/include/gal/opengl/glm/gtx/extend.inl
new file mode 100644
index 0000000..9827401
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/extend.inl
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-01-07
+// Updated : 2008-10-05
+// Licence : This source is under MIT License
+// File : glm/gtx/extend.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ genType extend
+ (
+ genType const & Origin,
+ genType const & Source,
+ genType const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+
+ template <typename valType>
+ detail::tvec2<valType> extend
+ (
+ detail::tvec2<valType> const & Origin,
+ detail::tvec2<valType> const & Source,
+ valType const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+
+ template <typename valType>
+ detail::tvec3<valType> extend
+ (
+ detail::tvec3<valType> const & Origin,
+ detail::tvec3<valType> const & Source,
+ valType const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+
+ template <typename valType>
+ detail::tvec4<valType> extend
+ (
+ detail::tvec4<valType> const & Origin,
+ detail::tvec4<valType> const & Source,
+ valType const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/extented_min_max.hpp b/include/gal/opengl/glm/gtx/extented_min_max.hpp
new file mode 100644
index 0000000..c623409
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/extented_min_max.hpp
@@ -0,0 +1,194 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_extented_min_max
+/// @file glm/gtx/extented_min_max.hpp
+/// @date 2007-03-14 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_half_float (dependence)
+///
+/// @defgroup gtx_extented_min_max GLM_GTX_extented_min_max
+/// @ingroup gtx
+///
+/// Min and max functions for 3 to 4 parameters.
+///
+/// <glm/gtx/extented_min_max.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_extented_min_max
+#define GLM_GTX_extented_min_max GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_extented_min_max extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_extented_min_max
+ /// @{
+
+ /// Return the minimum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ T min(
+ T const & x,
+ T const & y,
+ T const & z);
+
+ /// Return the minimum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> min(
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z);
+
+ /// Return the minimum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> min(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z);
+
+ /// Return the minimum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ T min(
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w);
+
+ /// Return the minimum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> min(
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z,
+ typename C<T>::value_type const & w);
+
+ /// Return the minimum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> min(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w);
+
+ /// Return the maximum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ T max(
+ T const & x,
+ T const & y,
+ T const & z);
+
+ /// Return the maximum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> max(
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z);
+
+ /// Return the maximum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> max(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z);
+
+ /// Return the maximum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ T max(
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w);
+
+ /// Return the maximum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> max(
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z,
+ typename C<T>::value_type const & w);
+
+ /// Return the maximum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ C<T> max(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w);
+
+ /// @}
+}//namespace glm
+
+#include "extented_min_max.inl"
+
+#endif//GLM_GTX_extented_min_max
diff --git a/include/gal/opengl/glm/gtx/extented_min_max.inl b/include/gal/opengl/glm/gtx/extented_min_max.inl
new file mode 100644
index 0000000..d0a74ef
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/extented_min_max.inl
@@ -0,0 +1,178 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-03-14
+// Updated : 2010-02-19
+// Licence : This source is under MIT License
+// File : gtx_extented_min_max.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T min(
+ T const & x,
+ T const & y,
+ T const & z)
+ {
+ return glm::min(glm::min(x, y), z);
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z
+ )
+ {
+ return glm::min(glm::min(x, y), z);
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z
+ )
+ {
+ return glm::min(glm::min(x, y), z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T min
+ (
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w
+ )
+ {
+ return glm::min(glm::min(x, y), glm::min(z, w));
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z,
+ typename C<T>::value_type const & w
+ )
+ {
+ return glm::min(glm::min(x, y), glm::min(z, w));
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w
+ )
+ {
+ return glm::min(glm::min(x, y), glm::min(z, w));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T max(
+ T const & x,
+ T const & y,
+ T const & z)
+ {
+ return glm::max(glm::max(x, y), z);
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z
+ )
+ {
+ return glm::max(glm::max(x, y), z);
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z
+ )
+ {
+ return glm::max(glm::max(x, y), z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T max
+ (
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w
+ )
+ {
+ return glm::max(glm::max(x, y), glm::max(z, w));
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ typename C<T>::value_type const & y,
+ typename C<T>::value_type const & z,
+ typename C<T>::value_type const & w
+ )
+ {
+ return glm::max(glm::max(x, y), glm::max(z, w));
+ }
+
+ template
+ <
+ typename T,
+ template <typename> class C
+ >
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w
+ )
+ {
+ return glm::max(glm::max(x, y), glm::max(z, w));
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/fast_exponential.hpp b/include/gal/opengl/glm/gtx/fast_exponential.hpp
new file mode 100644
index 0000000..ff50eec
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/fast_exponential.hpp
@@ -0,0 +1,99 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_fast_exponential
+/// @file glm/gtx/fast_exponential.hpp
+/// @date 2006-01-09 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_half_float (dependence)
+///
+/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential
+/// @ingroup gtx
+///
+/// @brief Fast but less accurate implementations of exponential based functions.
+///
+/// <glm/gtx/fast_exponential.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_fast_exponential
+#define GLM_GTX_fast_exponential GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_fast_exponential extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_fast_exponential
+ /// @{
+
+ /// Faster than the common pow function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename genType>
+ genType fastPow(
+ genType const & x,
+ genType const & y);
+
+ /// Faster than the common pow function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename genTypeT, typename genTypeU>
+ genTypeT fastPow(
+ genTypeT const & x,
+ genTypeU const & y);
+
+ /// Faster than the common exp function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ T fastExp(const T& x);
+
+ /// Faster than the common log function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ T fastLog(const T& x);
+
+ /// Faster than the common exp2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ T fastExp2(const T& x);
+
+ /// Faster than the common log2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ T fastLog2(const T& x);
+
+ /// Faster than the common ln function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ T fastLn(const T& x);
+
+ /// @}
+}//namespace glm
+
+#include "fast_exponential.inl"
+
+#endif//GLM_GTX_fast_exponential
diff --git a/include/gal/opengl/glm/gtx/fast_exponential.inl b/include/gal/opengl/glm/gtx/fast_exponential.inl
new file mode 100644
index 0000000..80837ff
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/fast_exponential.inl
@@ -0,0 +1,148 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-01-09
+// Updated : 2006-01-09
+// Licence : This source is under MIT License
+// File : glm/gtx/fast_exponential.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // fastPow:
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastPow(genType const & x, genType const & y)
+ {
+ return exp(y * log(x));
+ }
+
+ VECTORIZE_VEC_VEC(fastPow)
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastPow(const T x, int y)
+ {
+ T f = T(1);
+ for(int i = 0; i < y; ++i)
+ f *= x;
+ return f;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> fastPow(
+ const detail::tvec2<T>& x,
+ const detail::tvec2<int>& y)
+ {
+ return detail::tvec2<T>(
+ fastPow(x.x, y.x),
+ fastPow(x.y, y.y));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> fastPow(
+ const detail::tvec3<T>& x,
+ const detail::tvec3<int>& y)
+ {
+ return detail::tvec3<T>(
+ fastPow(x.x, y.x),
+ fastPow(x.y, y.y),
+ fastPow(x.z, y.z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> fastPow(
+ const detail::tvec4<T>& x,
+ const detail::tvec4<int>& y)
+ {
+ return detail::tvec4<T>(
+ fastPow(x.x, y.x),
+ fastPow(x.y, y.y),
+ fastPow(x.z, y.z),
+ fastPow(x.w, y.w));
+ }
+
+ // fastExp
+ // Note: This function provides accurate results only for value between -1 and 1, else avoid it.
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastExp(const T x)
+ {
+ // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.
+ // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));
+ T x2 = x * x;
+ T x3 = x2 * x;
+ T x4 = x3 * x;
+ T x5 = x4 * x;
+ return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333));
+ }
+ /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance
+ GLM_FUNC_QUALIFIER float fastExp(float x)
+ {
+ const float e = 2.718281828f;
+ const float IntegerPart = floor(x);
+ const float FloatPart = x - IntegerPart;
+ float z = 1.f;
+
+ for(int i = 0; i < int(IntegerPart); ++i)
+ z *= e;
+
+ const float x2 = FloatPart * FloatPart;
+ const float x3 = x2 * FloatPart;
+ const float x4 = x3 * FloatPart;
+ const float x5 = x4 * FloatPart;
+ return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f));
+ }
+
+ // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers
+ GLM_FUNC_QUALIFIER float fastExp(float x)
+ {
+ // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.
+ // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));
+ float x2 = x * x;
+ float x3 = x2 * x;
+ float x4 = x3 * x;
+ float x5 = x4 * x;
+ float x6 = x5 * x;
+ float x7 = x6 * x;
+ float x8 = x7 * x;
+ return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);;
+ }
+ */
+
+ VECTORIZE_VEC(fastExp)
+
+ // fastLog
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLog(genType const & x)
+ {
+ return std::log(x);
+ }
+
+ /* Slower than the VC7.1 function...
+ GLM_FUNC_QUALIFIER float fastLog(float x)
+ {
+ float y1 = (x - 1.0f) / (x + 1.0f);
+ float y2 = y1 * y1;
+ return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f)));
+ }
+ */
+
+ VECTORIZE_VEC(fastLog)
+
+ //fastExp2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastExp2(genType const & x)
+ {
+ return fastExp(0.69314718055994530941723212145818f * x);
+ }
+
+ VECTORIZE_VEC(fastExp2)
+
+ // fastLog2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLog2(genType const & x)
+ {
+ return fastLog(x) / 0.69314718055994530941723212145818f;
+ }
+
+ VECTORIZE_VEC(fastLog2)
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/fast_square_root.hpp b/include/gal/opengl/glm/gtx/fast_square_root.hpp
new file mode 100644
index 0000000..a49ae94
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/fast_square_root.hpp
@@ -0,0 +1,85 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_fast_square_root
+/// @file glm/gtx/fast_square_root.hpp
+/// @date 2006-01-04 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root
+/// @ingroup gtx
+///
+/// @brief Fast but less accurate implementations of square root based functions.
+/// - Sqrt optimisation based on Newton's method,
+/// www.gamedev.net/community/forums/topic.asp?topic id=139956
+///
+/// <glm/gtx/fast_square_root.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_fast_square_root
+#define GLM_GTX_fast_square_root GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_fast_square_root extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_fast_square_root
+ /// @{
+
+ //! Faster than the common sqrt function but less accurate.
+ //! From GLM_GTX_fast_square_root extension.
+ template <typename genType>
+ genType fastSqrt(genType const & x);
+
+ //! Faster than the common inversesqrt function but less accurate.
+ //! From GLM_GTX_fast_square_root extension.
+ template <typename genType>
+ genType fastInverseSqrt(genType const & x);
+
+ //! Faster than the common length function but less accurate.
+ //! From GLM_GTX_fast_square_root extension.
+ template <typename genType>
+ typename genType::value_type fastLength(genType const & x);
+
+ //! Faster than the common distance function but less accurate.
+ //! From GLM_GTX_fast_square_root extension.
+ template <typename genType>
+ typename genType::value_type fastDistance(genType const & x, genType const & y);
+
+ //! Faster than the common normalize function but less accurate.
+ //! From GLM_GTX_fast_square_root extension.
+ template <typename genType>
+ genType fastNormalize(genType const & x);
+
+ /// @}
+}// namespace glm
+
+#include "fast_square_root.inl"
+
+#endif//GLM_GTX_fast_square_root
diff --git a/include/gal/opengl/glm/gtx/fast_square_root.inl b/include/gal/opengl/glm/gtx/fast_square_root.inl
new file mode 100644
index 0000000..0f51fbb
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/fast_square_root.inl
@@ -0,0 +1,136 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-01-04
+// Updated : 2011-10-14
+// Licence : This source is under MIT License
+// File : glm/gtx/fast_square_root.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // fastSqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastSqrt
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'fastSqrt' only accept floating-point input");
+
+ return genType(1) / fastInverseSqrt(x);
+ }
+
+ VECTORIZE_VEC(fastSqrt)
+
+ // fastInversesqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastInverseSqrt
+ (
+ genType const & x
+ )
+ {
+ genType tmp = x;
+ float xhalf = 0.5f * float(tmp);
+ uint i = *(uint*)&x;
+ i = 0x5f375a86 - (i >> 1);
+ //x = *(float*)&i;
+ //x = *((float*)(char*)&i);
+ tmp = detail::uif(i).f;
+ tmp = tmp * (1.5f - xhalf * tmp * tmp);
+ return genType(tmp);
+ }
+
+ VECTORIZE_VEC(fastInverseSqrt)
+
+ // fastLength
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLength
+ (
+ genType const & x
+ )
+ {
+ return abs(x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastLength
+ (
+ detail::tvec2<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y;
+ return fastSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastLength
+ (
+ detail::tvec3<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z;
+ return fastSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastLength
+ (
+ detail::tvec4<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
+ return fastSqrt(sqr);
+ }
+
+ // fastDistance
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastDistance
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ return fastLength(y - x);
+ }
+
+ // fastNormalize
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastNormalize
+ (
+ genType const & x
+ )
+ {
+ return x > genType(0) ? genType(1) : -genType(1);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> fastNormalize
+ (
+ detail::tvec2<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y;
+ return x * fastInverseSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> fastNormalize
+ (
+ detail::tvec3<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z;
+ return x * fastInverseSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> fastNormalize
+ (
+ detail::tvec4<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
+ return x * fastInverseSqrt(sqr);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/fast_trigonometry.hpp b/include/gal/opengl/glm/gtx/fast_trigonometry.hpp
new file mode 100644
index 0000000..16f326d
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/fast_trigonometry.hpp
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_fast_trigonometry
+/// @file glm/gtx/fast_trigonometry.hpp
+/// @date 2006-01-08 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry
+/// @ingroup gtx
+///
+/// @brief Fast but less accurate implementations of trigonometric functions.
+///
+/// <glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_fast_trigonometry
+#define GLM_GTX_fast_trigonometry GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_fast_trigonometry
+ /// @{
+
+ //! Faster than the common sin function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastSin(const T& angle);
+
+ //! Faster than the common cos function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastCos(const T& angle);
+
+ //! Faster than the common tan function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastTan(const T& angle);
+
+ //! Faster than the common asin function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastAsin(const T& angle);
+
+ //! Faster than the common acos function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastAcos(const T& angle);
+
+ //! Faster than the common atan function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastAtan(const T& y, const T& x);
+
+ //! Faster than the common atan function but less accurate.
+ //! Defined between -2pi and 2pi.
+ //! From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ T fastAtan(const T& angle);
+
+ /// @}
+}//namespace glm
+
+#include "fast_trigonometry.inl"
+
+#endif//GLM_GTX_fast_trigonometry
diff --git a/include/gal/opengl/glm/gtx/fast_trigonometry.inl b/include/gal/opengl/glm/gtx/fast_trigonometry.inl
new file mode 100644
index 0000000..b2179a6
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/fast_trigonometry.inl
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-01-08
+// Updated : 2011-10-14
+// Licence : This source is under MIT License
+// File : glm/gtx/fast_trigonometry.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // sin
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastSin(T const & x)
+ {
+ return x - ((x * x * x) / T(6)) + ((x * x * x * x * x) / T(120)) - ((x * x * x * x * x * x * x) / T(5040));
+ }
+
+ VECTORIZE_VEC(fastSin)
+
+ // cos
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastCos(T const & x)
+ {
+ return T(1) - (x * x * T(0.5)) + (x * x * x * x * T(0.041666666666)) - (x * x * x * x * x * x * T(0.00138888888888));
+ }
+
+ VECTORIZE_VEC(fastCos)
+
+ // tan
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastTan(T const & x)
+ {
+ return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539));
+ }
+
+ VECTORIZE_VEC(fastTan)
+
+ // asin
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAsin(T const & x)
+ {
+ return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159));
+ }
+
+ VECTORIZE_VEC(fastAsin)
+
+ // acos
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAcos(T const & x)
+ {
+ return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2)
+ }
+
+ VECTORIZE_VEC(fastAcos)
+
+ // atan
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAtan(T const & y, T const & x)
+ {
+ T sgn = sign(y) * sign(x);
+ return abs(fastAtan(y / x)) * sgn;
+ }
+
+ VECTORIZE_VEC_VEC(fastAtan)
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAtan(T const & x)
+ {
+ return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909));
+ }
+
+ VECTORIZE_VEC(fastAtan)
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/gradient_paint.hpp b/include/gal/opengl/glm/gtx/gradient_paint.hpp
new file mode 100644
index 0000000..f3bfde7
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/gradient_paint.hpp
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_gradient_paint
+/// @file glm/gtx/gradient_paint.hpp
+/// @date 2009-03-06 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_optimum_pow (dependence)
+///
+/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint
+/// @ingroup gtx
+///
+/// @brief Functions that return the color of procedural gradient for specific coordinates.
+/// <glm/gtx/gradient_paint.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_gradient_paint
+#define GLM_GTX_gradient_paint GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/optimum_pow.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_gradient_paint extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_gradient_paint
+ /// @{
+
+ /// Return a color from a radial gradient.
+ /// @see - gtx_gradient_paint
+ template <typename valType>
+ valType radialGradient(
+ detail::tvec2<valType> const & Center,
+ valType const & Radius,
+ detail::tvec2<valType> const & Focal,
+ detail::tvec2<valType> const & Position);
+
+ /// Return a color from a linear gradient.
+ /// @see - gtx_gradient_paint
+ template <typename valType>
+ valType linearGradient(
+ detail::tvec2<valType> const & Point0,
+ detail::tvec2<valType> const & Point1,
+ detail::tvec2<valType> const & Position);
+
+ /// @}
+}// namespace glm
+
+#include "gradient_paint.inl"
+
+#endif//GLM_GTX_gradient_paint
diff --git a/include/gal/opengl/glm/gtx/gradient_paint.inl b/include/gal/opengl/glm/gtx/gradient_paint.inl
new file mode 100644
index 0000000..bdf5a65
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/gradient_paint.inl
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2009-03-06
+// Updated : 2009-03-09
+// Licence : This source is under MIT License
+// File : glm/gtx/gradient_paint.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename valType>
+ valType radialGradient
+ (
+ detail::tvec2<valType> const & Center,
+ valType const & Radius,
+ detail::tvec2<valType> const & Focal,
+ detail::tvec2<valType> const & Position
+ )
+ {
+ detail::tvec2<valType> F = Focal - Center;
+ detail::tvec2<valType> D = Position - Focal;
+ valType Radius2 = pow2(Radius);
+ valType Fx2 = pow2(F.x);
+ valType Fy2 = pow2(F.y);
+
+ valType Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x));
+ valType Denominator = Radius2 - (Fx2 + Fy2);
+ return Numerator / Denominator;
+ }
+
+ template <typename valType>
+ valType linearGradient
+ (
+ detail::tvec2<valType> const & Point0,
+ detail::tvec2<valType> const & Point1,
+ detail::tvec2<valType> const & Position
+ )
+ {
+ detail::tvec2<valType> Dist = Point1 - Point0;
+ return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/handed_coordinate_space.hpp b/include/gal/opengl/glm/gtx/handed_coordinate_space.hpp
new file mode 100644
index 0000000..5ed0b0b
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/handed_coordinate_space.hpp
@@ -0,0 +1,74 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_handed_coordinate_space
+/// @file glm/gtx/handed_coordinate_space.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space
+/// @ingroup gtx
+///
+/// @brief To know if a set of three basis vectors defines a right or left-handed coordinate system.
+///
+/// <glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_handed_coordinate_space
+#define GLM_GTX_handed_coordinate_space GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_handed_coordinate_space
+ /// @{
+
+ //! Return if a trihedron right handed or not.
+ //! From GLM_GTX_handed_coordinate_space extension.
+ template <typename T>
+ bool rightHanded(
+ detail::tvec3<T> const & tangent,
+ detail::tvec3<T> const & binormal,
+ detail::tvec3<T> const & normal);
+
+ //! Return if a trihedron left handed or not.
+ //! From GLM_GTX_handed_coordinate_space extension.
+ template <typename T>
+ bool leftHanded(
+ detail::tvec3<T> const & tangent,
+ detail::tvec3<T> const & binormal,
+ detail::tvec3<T> const & normal);
+
+ /// @}
+}// namespace glm
+
+#include "handed_coordinate_space.inl"
+
+#endif//GLM_GTX_handed_coordinate_space
diff --git a/include/gal/opengl/glm/gtx/handed_coordinate_space.inl b/include/gal/opengl/glm/gtx/handed_coordinate_space.inl
new file mode 100644
index 0000000..51a0553
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/handed_coordinate_space.inl
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2009-02-19
+// Licence : This source is under MIT License
+// File : glm/gtx/handed_coordinate_space.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool rightHanded
+ (
+ detail::tvec3<T> const & tangent,
+ detail::tvec3<T> const & binormal,
+ detail::tvec3<T> const & normal
+ )
+ {
+ return dot(cross(normal, tangent), binormal) > T(0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool leftHanded
+ (
+ detail::tvec3<T> const & tangent,
+ detail::tvec3<T> const & binormal,
+ detail::tvec3<T> const & normal
+ )
+ {
+ return dot(cross(normal, tangent), binormal) < T(0);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/inertia.hpp b/include/gal/opengl/glm/gtx/inertia.hpp
new file mode 100644
index 0000000..9133299
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/inertia.hpp
@@ -0,0 +1,115 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_inertia
+/// @file glm/gtx/inertia.hpp
+/// @date 2006-04-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_inertia GLM_GTX_inertia
+/// @ingroup gtx
+///
+/// @brief Create inertia matrices
+///
+/// <glm/gtx/inertia.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_inertia
+#define GLM_GTX_inertia GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_inertia extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_inertia
+ /// @{
+
+ //! Build an inertia matrix for a box.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat3x3<T> boxInertia3(
+ T const & Mass,
+ detail::tvec3<T> const & Scale);
+
+ //! Build an inertia matrix for a box.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat4x4<T> boxInertia4(
+ T const & Mass,
+ detail::tvec3<T> const & Scale);
+
+ //! Build an inertia matrix for a disk.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat3x3<T> diskInertia3(
+ T const & Mass,
+ T const & Radius);
+
+ //! Build an inertia matrix for a disk.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat4x4<T> diskInertia4(
+ T const & Mass,
+ T const & Radius);
+
+ //! Build an inertia matrix for a ball.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat3x3<T> ballInertia3(
+ T const & Mass,
+ T const & Radius);
+
+ //! Build an inertia matrix for a ball.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat4x4<T> ballInertia4(
+ T const & Mass,
+ T const & Radius);
+
+ //! Build an inertia matrix for a sphere.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat3x3<T> sphereInertia3(
+ T const & Mass,
+ T const & Radius);
+
+ //! Build an inertia matrix for a sphere.
+ //! From GLM_GTX_inertia extension.
+ template <typename T>
+ detail::tmat4x4<T> sphereInertia4(
+ T const & Mass,
+ T const & Radius);
+
+ /// @}
+}// namespace glm
+
+#include "inertia.inl"
+
+#endif//GLM_GTX_inertia
diff --git a/include/gal/opengl/glm/gtx/inertia.inl b/include/gal/opengl/glm/gtx/inertia.inl
new file mode 100644
index 0000000..a8f2ad7
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/inertia.inl
@@ -0,0 +1,114 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-04-21
+// Updated : 2006-12-06
+// Licence : This source is under MIT License
+// File : glm/gtx/inertia.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> boxInertia3
+ (
+ T const & Mass,
+ detail::tvec3<T> const & Scale
+ )
+ {
+ detail::tmat3x3<T> Result(T(1));
+ Result[0][0] = (Scale.y * Scale.y + Scale.z * Scale.z) * Mass / T(12);
+ Result[1][1] = (Scale.x * Scale.x + Scale.z * Scale.z) * Mass / T(12);
+ Result[2][2] = (Scale.x * Scale.x + Scale.y * Scale.y) * Mass / T(12);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> boxInertia4
+ (
+ T const & Mass,
+ detail::tvec3<T> const & Scale
+ )
+ {
+ detail::tmat4x4<T> Result(T(1));
+ Result[0][0] = (Scale.y * Scale.y + Scale.z * Scale.z) * Mass / T(12);
+ Result[1][1] = (Scale.x * Scale.x + Scale.z * Scale.z) * Mass / T(12);
+ Result[2][2] = (Scale.x * Scale.x + Scale.y * Scale.y) * Mass / T(12);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> diskInertia3
+ (
+ T const & Mass,
+ T const & Radius
+ )
+ {
+ T a = Mass * Radius * Radius / T(2);
+ detail::tmat3x3<T> Result(a);
+ Result[2][2] *= T(2);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> diskInertia4
+ (
+ T const & Mass,
+ T const & Radius
+ )
+ {
+ T a = Mass * Radius * Radius / T(2);
+ detail::tmat4x4<T> Result(a);
+ Result[2][2] *= T(2);
+ Result[3][3] = T(1);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> ballInertia3
+ (
+ T const & Mass,
+ T const & Radius
+ )
+ {
+ T a = T(2) * Mass * Radius * Radius / T(5);
+ return detail::tmat3x3<T>(a);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> ballInertia4
+ (
+ T const & Mass,
+ T const & Radius
+ )
+ {
+ T a = T(2) * Mass * Radius * Radius / T(5);
+ detail::tmat4x4<T> Result(a);
+ Result[3][3] = T(1);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> sphereInertia3
+ (
+ T const & Mass,
+ T const & Radius
+ )
+ {
+ T a = T(2) * Mass * Radius * Radius / T(3);
+ return detail::tmat3x3<T>(a);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> sphereInertia4
+ (
+ T const & Mass,
+ T const & Radius
+ )
+ {
+ T a = T(2) * Mass * Radius * Radius / T(3);
+ detail::tmat4x4<T> Result(a);
+ Result[3][3] = T(1);
+ return Result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/int_10_10_10_2.hpp b/include/gal/opengl/glm/gtx/int_10_10_10_2.hpp
new file mode 100644
index 0000000..1270481
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/int_10_10_10_2.hpp
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_int_10_10_10_2
+/// @file glm/gtx/int_10_10_10_2.hpp
+/// @date 2010-07-07 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_raw_data (dependence)
+///
+/// @defgroup gtx_int_10_10_10_2 GLM_GTX_int_10_10_10_2
+/// @ingroup gtx
+///
+/// @brief Pack vector to 1010102 integers. Storage only.
+///
+/// <glm/gtx/int_10_10_10_2.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_int_10_10_10_2
+#define GLM_GTX_int_10_10_10_2 GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/raw_data.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_int_10_10_10_2 extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_int_10_10_10_2
+ /// @{
+
+ //! From GLM_GTX_int_10_10_10_2 extension.
+ //! Cast a vec4 to an u_10_10_10_2.
+ dword uint10_10_10_2_cast(glm::vec4 const & v);
+
+ /// @}
+}//namespace glm
+
+#include "int_10_10_10_2.inl"
+
+#endif//GLM_GTX_int_10_10_10_2
diff --git a/include/gal/opengl/glm/gtx/int_10_10_10_2.inl b/include/gal/opengl/glm/gtx/int_10_10_10_2.inl
new file mode 100644
index 0000000..c1ec201
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/int_10_10_10_2.inl
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-07-07
+// Updated : 2010-07-07
+// Licence : This source is under MIT License
+// File : glm/gtx/int_10_10_10_2.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ GLM_FUNC_QUALIFIER dword uint10_10_10_2_cast
+ (
+ glm::vec4 const & v
+ )
+ {
+ return dword(uint(v.x * 2047.f) << 0 | uint(v.y * 2047.f) << 10 | uint(v.z * 2047.f) << 20 | uint(v.w * 3.f) << 30);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/integer.hpp b/include/gal/opengl/glm/gtx/integer.hpp
new file mode 100644
index 0000000..b3e21fd
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/integer.hpp
@@ -0,0 +1,104 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_integer
+/// @file glm/gtx/integer.hpp
+/// @date 2005-12-24 / 2011-10-13
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_integer GLM_GTX_integer
+/// @ingroup gtx
+///
+/// @brief Add support for integer for core functions
+///
+/// <glm/gtx/integer.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_integer
+#define GLM_GTX_integer GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_integer extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_integer
+ /// @{
+
+ //! Returns x raised to the y power.
+ //! From GLM_GTX_integer extension.
+ int pow(int x, int y);
+
+ //! Returns the positive square root of x.
+ //! From GLM_GTX_integer extension.
+ int sqrt(int x);
+
+ //! Returns the log2 of x. Can be reliably using to compute mipmap count from the texture size.
+ //! From GLM_GTX_integer extension.
+ template <typename genIUType>
+ genIUType log2(genIUType const & x);
+
+ //! Returns the floor log2 of x.
+ //! From GLM_GTX_integer extension.
+ unsigned int floor_log2(unsigned int x);
+
+ //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.
+ //! From GLM_GTX_integer extension.
+ int mod(int x, int y);
+
+ //! Return the factorial value of a number (!12 max, integer only)
+ //! From GLM_GTX_integer extension.
+ template <typename genType>
+ genType factorial(genType const & x);
+
+ //! 32bit signed integer.
+ //! From GLM_GTX_integer extension.
+ typedef signed int sint;
+
+ //! Returns x raised to the y power.
+ //! From GLM_GTX_integer extension.
+ uint pow(uint x, uint y);
+
+ //! Returns the positive square root of x.
+ //! From GLM_GTX_integer extension.
+ uint sqrt(uint x);
+
+ //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.
+ //! From GLM_GTX_integer extension.
+ uint mod(uint x, uint y);
+
+ //! Returns the number of leading zeros.
+ //! From GLM_GTX_integer extension.
+ uint nlz(uint x);
+
+ /// @}
+}//namespace glm
+
+#include "integer.inl"
+
+#endif//GLM_GTX_integer
diff --git a/include/gal/opengl/glm/gtx/integer.inl b/include/gal/opengl/glm/gtx/integer.inl
new file mode 100644
index 0000000..2478616
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/integer.inl
@@ -0,0 +1,203 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-24
+// Updated : 2011-10-13
+// Licence : This source is under MIT License
+// File : glm/gtx/integer.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // pow
+ GLM_FUNC_QUALIFIER int pow(int x, int y)
+ {
+ if(y == 0)
+ return 1;
+ int result = x;
+ for(int i = 1; i < y; ++i)
+ result *= x;
+ return result;
+ }
+
+ // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387
+ GLM_FUNC_QUALIFIER int sqrt(int x)
+ {
+ if(x <= 1) return x;
+
+ int NextTrial = x >> 1;
+ int CurrentAnswer;
+
+ do
+ {
+ CurrentAnswer = NextTrial;
+ NextTrial = (NextTrial + x / NextTrial) >> 1;
+ } while(NextTrial < CurrentAnswer);
+
+ return CurrentAnswer;
+ }
+
+// Henry Gordon Dietz: http://aggregate.org/MAGIC/
+namespace _detail
+{
+ GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x)
+ {
+ /* 32-bit recursive reduction using SWAR...
+ but first step is mapping 2-bit values
+ into sum of 2 1-bit values in sneaky way
+ */
+ x -= ((x >> 1) & 0x55555555);
+ x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
+ x = (((x >> 4) + x) & 0x0f0f0f0f);
+ x += (x >> 8);
+ x += (x >> 16);
+ return(x & 0x0000003f);
+ }
+
+ template <>
+ struct _compute_log2<detail::float_or_int_value::GLM_INT>
+ {
+ template <typename T>
+ GLM_FUNC_QUALIFIER T operator() (T const & Value) const
+ {
+#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC))
+ return Value <= T(1) ? T(0) : T(32) - nlz(Value - T(1));
+#else
+ return T(32) - nlz(Value - T(1));
+#endif
+ }
+ };
+
+}//namespace _detail
+
+ // Henry Gordon Dietz: http://aggregate.org/MAGIC/
+/*
+ GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x)
+ {
+ x |= (x >> 1);
+ x |= (x >> 2);
+ x |= (x >> 4);
+ x |= (x >> 8);
+ x |= (x >> 16);
+
+ return _detail::ones32(x) >> 1;
+ }
+*/
+ // mod
+ GLM_FUNC_QUALIFIER int mod(int x, int y)
+ {
+ return x - y * (x / y);
+ }
+
+ // factorial (!12 max, integer only)
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType factorial(genType const & x)
+ {
+ genType Temp = x;
+ genType Result;
+ for(Result = 1; Temp > 1; --Temp)
+ Result *= Temp;
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> factorial(
+ detail::tvec2<valType> const & x)
+ {
+ return detail::tvec2<valType>(
+ factorial(x.x),
+ factorial(x.y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> factorial(
+ detail::tvec3<valType> const & x)
+ {
+ return detail::tvec3<valType>(
+ factorial(x.x),
+ factorial(x.y),
+ factorial(x.z));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> factorial(
+ detail::tvec4<valType> const & x)
+ {
+ return detail::tvec4<valType>(
+ factorial(x.x),
+ factorial(x.y),
+ factorial(x.z),
+ factorial(x.w));
+ }
+
+ GLM_FUNC_QUALIFIER uint pow(uint x, uint y)
+ {
+ uint result = x;
+ for(uint i = 1; i < y; ++i)
+ result *= x;
+ return result;
+ }
+
+ GLM_FUNC_QUALIFIER uint sqrt(uint x)
+ {
+ if(x <= 1) return x;
+
+ uint NextTrial = x >> 1;
+ uint CurrentAnswer;
+
+ do
+ {
+ CurrentAnswer = NextTrial;
+ NextTrial = (NextTrial + x / NextTrial) >> 1;
+ } while(NextTrial < CurrentAnswer);
+
+ return CurrentAnswer;
+ }
+
+ GLM_FUNC_QUALIFIER uint mod(uint x, uint y)
+ {
+ return x - y * (x / y);
+ }
+
+#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC))
+
+ GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)
+ {
+ return 31u - findMSB(x);
+ }
+
+#else
+
+ // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt
+ GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)
+ {
+ int y, m, n;
+
+ y = -int(x >> 16); // If left half of x is 0,
+ m = (y >> 16) & 16; // set n = 16. If left half
+ n = 16 - m; // is nonzero, set n = 0 and
+ x = x >> m; // shift x right 16.
+ // Now x is of the form 0000xxxx.
+ y = x - 0x100; // If positions 8-15 are 0,
+ m = (y >> 16) & 8; // add 8 to n and shift x left 8.
+ n = n + m;
+ x = x << m;
+
+ y = x - 0x1000; // If positions 12-15 are 0,
+ m = (y >> 16) & 4; // add 4 to n and shift x left 4.
+ n = n + m;
+ x = x << m;
+
+ y = x - 0x4000; // If positions 14-15 are 0,
+ m = (y >> 16) & 2; // add 2 to n and shift x left 2.
+ n = n + m;
+ x = x << m;
+
+ y = x >> 14; // Set y = 0, 1, 2, or 3.
+ m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp.
+ return unsigned(n + 2 - m);
+ }
+
+#endif//(GLM_COMPILER)
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/intersect.hpp b/include/gal/opengl/glm/gtx/intersect.hpp
new file mode 100644
index 0000000..e3319ee
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/intersect.hpp
@@ -0,0 +1,102 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_intersect
+/// @file glm/gtx/intersect.hpp
+/// @date 2007-04-03 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_closest_point (dependence)
+///
+/// @defgroup gtx_intersect GLM_GTX_intersect
+/// @ingroup gtx
+///
+/// @brief Add intersection functions
+///
+/// <glm/gtx/intersect.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_intersect
+#define GLM_GTX_intersect GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/closest_point.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_closest_point extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_intersect
+ /// @{
+
+ //! Compute the intersection of a ray and a triangle.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ bool intersectRayTriangle(
+ genType const & orig, genType const & dir,
+ genType const & vert0, genType const & vert1, genType const & vert2,
+ genType & baryPosition);
+
+ //! Compute the intersection of a line and a triangle.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ bool intersectLineTriangle(
+ genType const & orig, genType const & dir,
+ genType const & vert0, genType const & vert1, genType const & vert2,
+ genType & position);
+
+ //! Compute the intersection distance of a ray and a sphere.
+ //! The ray direction vector is unit length.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ bool intersectRaySphere(
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadiusSquered,
+ typename genType::value_type & intersectionDistance);
+
+ //! Compute the intersection of a ray and a sphere.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ bool intersectRaySphere(
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadius,
+ genType & intersectionPosition, genType & intersectionNormal);
+
+ //! Compute the intersection of a line and a sphere.
+ //! From GLM_GTX_intersect extension
+ template <typename genType>
+ bool intersectLineSphere(
+ genType const & point0, genType const & point1,
+ genType const & sphereCenter, typename genType::value_type sphereRadius,
+ genType & intersectionPosition1, genType & intersectionNormal1,
+ genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
+
+ /// @}
+}//namespace glm
+
+#include "intersect.inl"
+
+#endif//GLM_GTX_intersect
diff --git a/include/gal/opengl/glm/gtx/intersect.inl b/include/gal/opengl/glm/gtx/intersect.inl
new file mode 100644
index 0000000..3fd8cea
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/intersect.inl
@@ -0,0 +1,196 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-04-03
+// Updated : 2009-01-20
+// Licence : This source is under MIT licence
+// File : glm/gtx/intersect.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <cfloat>
+#include <limits>
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRayTriangle
+ (
+ genType const & orig, genType const & dir,
+ genType const & v0, genType const & v1, genType const & v2,
+ genType & baryPosition
+ )
+ {
+ genType e1 = v1 - v0;
+ genType e2 = v2 - v0;
+
+ genType p = glm::cross(dir, e2);
+
+ typename genType::value_type a = glm::dot(e1, p);
+
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ if(a < Epsilon)
+ return false;
+
+ typename genType::value_type f = typename genType::value_type(1.0f) / a;
+
+ genType s = orig - v0;
+ baryPosition.x = f * glm::dot(s, p);
+ if(baryPosition.x < typename genType::value_type(0.0f))
+ return false;
+ if(baryPosition.x > typename genType::value_type(1.0f))
+ return false;
+
+ genType q = glm::cross(s, e1);
+ baryPosition.y = f * glm::dot(dir, q);
+ if(baryPosition.y < typename genType::value_type(0.0f))
+ return false;
+ if(baryPosition.y + baryPosition.x > typename genType::value_type(1.0f))
+ return false;
+
+ baryPosition.z = f * glm::dot(e2, q);
+
+ return baryPosition.z >= typename genType::value_type(0.0f);
+ }
+
+ //template <typename genType>
+ //GLM_FUNC_QUALIFIER bool intersectRayTriangle
+ //(
+ // genType const & orig, genType const & dir,
+ // genType const & vert0, genType const & vert1, genType const & vert2,
+ // genType & position
+ //)
+ //{
+ // typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ //
+ // genType edge1 = vert1 - vert0;
+ // genType edge2 = vert2 - vert0;
+ //
+ // genType pvec = cross(dir, edge2);
+ //
+ // float det = dot(edge1, pvec);
+ // if(det < Epsilon)
+ // return false;
+ //
+ // genType tvec = orig - vert0;
+ //
+ // position.y = dot(tvec, pvec);
+ // if (position.y < typename genType::value_type(0) || position.y > det)
+ // return typename genType::value_type(0);
+ //
+ // genType qvec = cross(tvec, edge1);
+ //
+ // position.z = dot(dir, qvec);
+ // if (position.z < typename genType::value_type(0) || position.y + position.z > det)
+ // return typename genType::value_type(0);
+ //
+ // position.x = dot(edge2, qvec);
+ // position *= typename genType::value_type(1) / det;
+ //
+ // return typename genType::value_type(1);
+ //}
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectLineTriangle
+ (
+ genType const & orig, genType const & dir,
+ genType const & vert0, genType const & vert1, genType const & vert2,
+ genType & position
+ )
+ {
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+
+ genType edge1 = vert1 - vert0;
+ genType edge2 = vert2 - vert0;
+
+ genType pvec = cross(dir, edge2);
+
+ float det = dot(edge1, pvec);
+
+ if (det > -Epsilon && det < Epsilon)
+ return false;
+ float inv_det = typename genType::value_type(1) / det;
+
+ genType tvec = orig - vert0;
+
+ position.y = dot(tvec, pvec) * inv_det;
+ if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1))
+ return false;
+
+ genType qvec = cross(tvec, edge1);
+
+ position.z = dot(dir, qvec) * inv_det;
+ if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1))
+ return false;
+
+ position.x = dot(edge2, qvec) * inv_det;
+
+ return true;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRaySphere
+ (
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadiusSquered,
+ typename genType::value_type & intersectionDistance
+ )
+ {
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ genType diff = sphereCenter - rayStarting;
+ typename genType::value_type t0 = dot(diff, rayNormalizedDirection);
+ typename genType::value_type dSquared = dot(diff, diff) - t0 * t0;
+ if( dSquared > sphereRadiusSquered )
+ {
+ return false;
+ }
+ typename genType::value_type t1 = sqrt( sphereRadiusSquered - dSquared );
+ intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1;
+ return intersectionDistance > Epsilon;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRaySphere
+ (
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadius,
+ genType & intersectionPosition, genType & intersectionNormal
+ )
+ {
+ typename genType::value_type distance;
+ if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) )
+ {
+ intersectionPosition = rayStarting + rayNormalizedDirection * distance;
+ intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius;
+ return true;
+ }
+ return false;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectLineSphere
+ (
+ genType const & point0, genType const & point1,
+ genType const & sphereCenter, typename genType::value_type sphereRadius,
+ genType & intersectionPoint1, genType & intersectionNormal1,
+ genType & intersectionPoint2, genType & intersectionNormal2
+ )
+ {
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ genType dir = normalize(point1 - point0);
+ genType diff = sphereCenter - point0;
+ typename genType::value_type t0 = dot(diff, dir);
+ typename genType::value_type dSquared = dot(diff, diff) - t0 * t0;
+ if( dSquared > sphereRadius * sphereRadius )
+ {
+ return false;
+ }
+ typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared );
+ if( t0 < t1 + Epsilon )
+ t1 = -t1;
+ intersectionPoint1 = point0 + dir * (t0 - t1);
+ intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius;
+ intersectionPoint2 = point0 + dir * (t0 + t1);
+ intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius;
+ return true;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/log_base.hpp b/include/gal/opengl/glm/gtx/log_base.hpp
new file mode 100644
index 0000000..0f2033e
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/log_base.hpp
@@ -0,0 +1,65 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_log_base
+/// @file glm/gtx/log_base.hpp
+/// @date 2008-10-24 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_log_base GLM_GTX_log_base
+/// @ingroup gtx
+///
+/// @brief Logarithm for any base. base can be a vector or a scalar.
+///
+/// <glm/gtx/log_base.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_log_base
+#define GLM_GTX_log_base GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_log_base extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_log_base
+ /// @{
+
+ //! Logarithm for any base.
+ //! From GLM_GTX_log_base.
+ template <typename genType>
+ genType log(
+ genType const & x,
+ genType const & base);
+
+ /// @}
+}//namespace glm
+
+#include "log_base.inl"
+
+#endif//GLM_GTX_log_base
diff --git a/include/gal/opengl/glm/gtx/log_base.inl b/include/gal/opengl/glm/gtx/log_base.inl
new file mode 100644
index 0000000..d8be51e
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/log_base.inl
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-10-24
+// Updated : 2008-10-24
+// Licence : This source is under MIT License
+// File : glm/gtx/log_base.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType log(
+ genType const & x,
+ genType const & base)
+ {
+ assert(x != genType(0));
+
+ return glm::log(x) / glm::log(base);
+ }
+
+ VECTORIZE_VEC_SCA(log)
+ VECTORIZE_VEC_VEC(log)
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/matrix_cross_product.hpp b/include/gal/opengl/glm/gtx/matrix_cross_product.hpp
new file mode 100644
index 0000000..a298ab8
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_cross_product.hpp
@@ -0,0 +1,71 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_matrix_cross_product
+/// @file glm/gtx/matrix_cross_product.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product
+/// @ingroup gtx
+///
+/// @brief Build cross product matrices
+///
+/// <glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_matrix_cross_product
+#define GLM_GTX_matrix_cross_product GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_cross_product
+ /// @{
+
+ //! Build a cross product matrix.
+ //! From GLM_GTX_matrix_cross_product extension.
+ template <typename T>
+ detail::tmat3x3<T> matrixCross3(
+ detail::tvec3<T> const & x);
+
+ //! Build a cross product matrix.
+ //! From GLM_GTX_matrix_cross_product extension.
+ template <typename T>
+ detail::tmat4x4<T> matrixCross4(
+ detail::tvec3<T> const & x);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_cross_product.inl"
+
+#endif//GLM_GTX_matrix_cross_product
diff --git a/include/gal/opengl/glm/gtx/matrix_cross_product.inl b/include/gal/opengl/glm/gtx/matrix_cross_product.inl
new file mode 100644
index 0000000..5da4403
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_cross_product.inl
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2005-12-21
+// Licence : This source is under MIT License
+// File : glm/gtx/matrix_cross_product.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> matrixCross3
+ (
+ detail::tvec3<T> const & x
+ )
+ {
+ detail::tmat3x3<T> Result(T(0));
+ Result[0][1] = x.z;
+ Result[1][0] = -x.z;
+ Result[0][2] = -x.y;
+ Result[2][0] = x.y;
+ Result[1][2] = x.x;
+ Result[2][1] = -x.x;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> matrixCross4
+ (
+ detail::tvec3<T> const & x
+ )
+ {
+ detail::tmat4x4<T> Result(T(0));
+ Result[0][1] = x.z;
+ Result[1][0] = -x.z;
+ Result[0][2] = -x.y;
+ Result[2][0] = x.y;
+ Result[1][2] = x.x;
+ Result[2][1] = -x.x;
+ return Result;
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/matrix_interpolation.hpp b/include/gal/opengl/glm/gtx/matrix_interpolation.hpp
new file mode 100644
index 0000000..75f2047
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_interpolation.hpp
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_matrix_interpolation
+/// @file glm/gtx/matrix_interpolation.hpp
+/// @date 2011-03-05 / 2011-06-07
+/// @author Ghenadii Ursachi (the.asteroth@gmail.com)
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation
+/// @ingroup gtx
+///
+/// @brief Allows to directly interpolate two exiciting matrices.
+///
+/// <glm/gtx/matrix_interpolation.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_matrix_interpolation
+#define GLM_GTX_matrix_interpolation GLM_VERSION
+
+// Dependency:
+//#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_interpolation
+ /// @{
+
+ //! Get the axis and angle of the rotation from a matrix.
+ //! From GLM_GTX_matrix_interpolation extension.
+ template <typename T>
+ void axisAngle(
+ detail::tmat4x4<T> const & mat,
+ detail::tvec3<T> & axis,
+ T & angle);
+
+ //! Build a matrix from axis and angle.
+ //! From GLM_GTX_matrix_interpolation extension.
+ template <typename T>
+ detail::tmat4x4<T> axisAngleMatrix(
+ detail::tvec3<T> const & axis,
+ T const angle);
+
+ //! Extracts the rotation part of a matrix.
+ //! From GLM_GTX_matrix_interpolation extension.
+ template <typename T>
+ detail::tmat4x4<T> extractMatrixRotation(
+ detail::tmat4x4<T> const & mat);
+
+ //! Build a interpolation of 4 * 4 matrixes.
+ //! From GLM_GTX_matrix_interpolation extension.
+ //! Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.
+ template <typename T>
+ detail::tmat4x4<T> interpolate(
+ detail::tmat4x4<T> const & m1,
+ detail::tmat4x4<T> const & m2,
+ T const delta);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_interpolation.inl"
+
+#endif//GLM_GTX_matrix_interpolation
diff --git a/include/gal/opengl/glm/gtx/matrix_interpolation.inl b/include/gal/opengl/glm/gtx/matrix_interpolation.inl
new file mode 100644
index 0000000..8ab1343
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_interpolation.inl
@@ -0,0 +1,131 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-03-05
+// Updated : 2011-03-05
+// Licence : This source is under MIT License
+// File : glm/gtx/matrix_interpolation.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER void axisAngle
+ (
+ detail::tmat4x4<T> const & mat,
+ detail::tvec3<T> & axis,
+ T & angle
+ )
+ {
+ T epsilon = (T)0.01;
+ T epsilon2 = (T)0.1;
+
+ if ((fabs(mat[1][0] - mat[0][1]) < epsilon) && (fabs(mat[2][0] - mat[0][2]) < epsilon) && (fabs(mat[2][1] - mat[1][2]) < epsilon)) {
+ if ((fabs(mat[1][0] + mat[0][1]) < epsilon2) && (fabs(mat[2][0] + mat[0][2]) < epsilon2) && (fabs(mat[2][1] + mat[1][2]) < epsilon2) && (fabs(mat[0][0] + mat[1][1] + mat[2][2] - (T)3.0) < epsilon2)) {
+ angle = (T)0.0;
+ axis.x = (T)1.0;
+ axis.y = (T)0.0;
+ axis.z = (T)0.0;
+ return;
+ }
+ angle = T(3.1415926535897932384626433832795);
+ T xx = (mat[0][0] + (T)1.0) / (T)2.0;
+ T yy = (mat[1][1] + (T)1.0) / (T)2.0;
+ T zz = (mat[2][2] + (T)1.0) / (T)2.0;
+ T xy = (mat[1][0] + mat[0][1]) / (T)4.0;
+ T xz = (mat[2][0] + mat[0][2]) / (T)4.0;
+ T yz = (mat[2][1] + mat[1][2]) / (T)4.0;
+ if ((xx > yy) && (xx > zz)) {
+ if (xx < epsilon) {
+ axis.x = (T)0.0;
+ axis.y = (T)0.7071;
+ axis.z = (T)0.7071;
+ } else {
+ axis.x = sqrt(xx);
+ axis.y = xy / axis.x;
+ axis.z = xz / axis.x;
+ }
+ } else if (yy > zz) {
+ if (yy < epsilon) {
+ axis.x = (T)0.7071;
+ axis.y = (T)0.0;
+ axis.z = (T)0.7071;
+ } else {
+ axis.y = sqrt(yy);
+ axis.x = xy / axis.y;
+ axis.z = yz / axis.y;
+ }
+ } else {
+ if (zz < epsilon) {
+ axis.x = (T)0.7071;
+ axis.y = (T)0.7071;
+ axis.z = (T)0.0;
+ } else {
+ axis.z = sqrt(zz);
+ axis.x = xz / axis.z;
+ axis.y = yz / axis.z;
+ }
+ }
+ return;
+ }
+ T s = sqrt((mat[2][1] - mat[1][2]) * (mat[2][1] - mat[1][2]) + (mat[2][0] - mat[0][2]) * (mat[2][0] - mat[0][2]) + (mat[1][0] - mat[0][1]) * (mat[1][0] - mat[0][1]));
+ if (glm::abs(s) < T(0.001))
+ s = (T)1.0;
+ angle = acos((mat[0][0] + mat[1][1] + mat[2][2] - (T)1.0) / (T)2.0);
+ axis.x = (mat[1][2] - mat[2][1]) / s;
+ axis.y = (mat[2][0] - mat[0][2]) / s;
+ axis.z = (mat[0][1] - mat[1][0]) / s;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> axisAngleMatrix
+ (
+ detail::tvec3<T> const & axis,
+ T const angle
+ )
+ {
+ T c = cos(angle);
+ T s = sin(angle);
+ T t = T(1) - c;
+ detail::tvec3<T> n = normalize(axis);
+
+ return detail::tmat4x4<T>(
+ t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, T(0),
+ t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, T(0),
+ t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, T(0),
+ T(0), T(0), T(0), T(1)
+ );
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> extractMatrixRotation(
+ detail::tmat4x4<T> const & mat)
+ {
+ return detail::tmat4x4<T>(
+ mat[0][0], mat[0][1], mat[0][2], 0.0,
+ mat[1][0], mat[1][1], mat[1][2], 0.0,
+ mat[2][0], mat[2][1], mat[2][2], 0.0,
+ 0.0, 0.0, 0.0, 1.0
+ );
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> interpolate
+ (
+ detail::tmat4x4<T> const & m1,
+ detail::tmat4x4<T> const & m2,
+ T const delta
+ )
+ {
+ detail::tmat4x4<T> m1rot = extractMatrixRotation(m1);
+ detail::tmat4x4<T> dltRotation = m2 * transpose(m1rot);
+ detail::tvec3<T> dltAxis;
+ T dltAngle;
+ axisAngle(dltRotation, dltAxis, dltAngle);
+ detail::tmat4x4<T> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot;
+ out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]);
+ out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]);
+ out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]);
+ return out;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/matrix_major_storage.hpp b/include/gal/opengl/glm/gtx/matrix_major_storage.hpp
new file mode 100644
index 0000000..74b5db0
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_major_storage.hpp
@@ -0,0 +1,143 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_matrix_major_storage
+/// @file glm/gtx/matrix_major_storage.hpp
+/// @date 2006-04-19 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage
+/// @ingroup gtx
+///
+/// @brief Build matrices with specific matrix order, row or column
+///
+/// <glm/gtx/matrix_major_storage.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_matrix_major_storage
+#define GLM_GTX_matrix_major_storage GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_major_storage
+ /// @{
+
+ //! Build a row major matrix from row vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat2x2<T> rowMajor2(
+ detail::tvec2<T> const & v1,
+ detail::tvec2<T> const & v2);
+
+ //! Build a row major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat2x2<T> rowMajor2(
+ detail::tmat2x2<T> const & m);
+
+ //! Build a row major matrix from row vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat3x3<T> rowMajor3(
+ detail::tvec3<T> const & v1,
+ detail::tvec3<T> const & v2,
+ detail::tvec3<T> const & v3);
+
+ //! Build a row major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat3x3<T> rowMajor3(
+ detail::tmat3x3<T> const & m);
+
+ //! Build a row major matrix from row vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat4x4<T> rowMajor4(
+ detail::tvec4<T> const & v1,
+ detail::tvec4<T> const & v2,
+ detail::tvec4<T> const & v3,
+ detail::tvec4<T> const & v4);
+
+ //! Build a row major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat4x4<T> rowMajor4(
+ detail::tmat4x4<T> const & m);
+
+ //! Build a column major matrix from column vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat2x2<T> colMajor2(
+ detail::tvec2<T> const & v1,
+ detail::tvec2<T> const & v2);
+
+ //! Build a column major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat2x2<T> colMajor2(
+ detail::tmat2x2<T> const & m);
+
+ //! Build a column major matrix from column vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat3x3<T> colMajor3(
+ detail::tvec3<T> const & v1,
+ detail::tvec3<T> const & v2,
+ detail::tvec3<T> const & v3);
+
+ //! Build a column major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat3x3<T> colMajor3(
+ detail::tmat3x3<T> const & m);
+
+ //! Build a column major matrix from column vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat4x4<T> colMajor4(
+ detail::tvec4<T> const & v1,
+ detail::tvec4<T> const & v2,
+ detail::tvec4<T> const & v3,
+ detail::tvec4<T> const & v4);
+
+ //! Build a column major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T>
+ detail::tmat4x4<T> colMajor4(
+ detail::tmat4x4<T> const & m);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_major_storage.inl"
+
+#endif//GLM_GTX_matrix_major_storage
diff --git a/include/gal/opengl/glm/gtx/matrix_major_storage.inl b/include/gal/opengl/glm/gtx/matrix_major_storage.inl
new file mode 100644
index 0000000..a12ed36
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_major_storage.inl
@@ -0,0 +1,173 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-04-19
+// Updated : 2009-02-19
+// Licence : This source is under MIT License
+// File : glm/gtx/matrix_major_storage.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> rowMajor2
+ (
+ detail::tvec2<T> const & v1,
+ detail::tvec2<T> const & v2
+ )
+ {
+ detail::tmat2x2<T> Result;
+ Result[0][0] = v1.x;
+ Result[1][0] = v1.y;
+ Result[0][1] = v2.x;
+ Result[1][1] = v2.y;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> rowMajor2(
+ const detail::tmat2x2<T>& m)
+ {
+ detail::tmat2x2<T> Result;
+ Result[0][0] = m[0][0];
+ Result[0][1] = m[1][0];
+ Result[1][0] = m[0][1];
+ Result[1][1] = m[1][1];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> rowMajor3(
+ const detail::tvec3<T>& v1,
+ const detail::tvec3<T>& v2,
+ const detail::tvec3<T>& v3)
+ {
+ detail::tmat3x3<T> Result;
+ Result[0][0] = v1.x;
+ Result[1][0] = v1.y;
+ Result[2][0] = v1.z;
+ Result[0][1] = v2.x;
+ Result[1][1] = v2.y;
+ Result[2][1] = v2.z;
+ Result[0][2] = v3.x;
+ Result[1][2] = v3.y;
+ Result[2][2] = v3.z;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> rowMajor3(
+ const detail::tmat3x3<T>& m)
+ {
+ detail::tmat3x3<T> Result;
+ Result[0][0] = m[0][0];
+ Result[0][1] = m[1][0];
+ Result[0][2] = m[2][0];
+ Result[1][0] = m[0][1];
+ Result[1][1] = m[1][1];
+ Result[1][2] = m[2][1];
+ Result[2][0] = m[0][2];
+ Result[2][1] = m[1][2];
+ Result[2][2] = m[2][2];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rowMajor4(
+ const detail::tvec4<T>& v1,
+ const detail::tvec4<T>& v2,
+ const detail::tvec4<T>& v3,
+ const detail::tvec4<T>& v4)
+ {
+ detail::tmat4x4<T> Result;
+ Result[0][0] = v1.x;
+ Result[1][0] = v1.y;
+ Result[2][0] = v1.z;
+ Result[3][0] = v1.w;
+ Result[0][1] = v2.x;
+ Result[1][1] = v2.y;
+ Result[2][1] = v2.z;
+ Result[3][1] = v2.w;
+ Result[0][2] = v3.x;
+ Result[1][2] = v3.y;
+ Result[2][2] = v3.z;
+ Result[3][2] = v3.w;
+ Result[0][3] = v4.x;
+ Result[1][3] = v4.y;
+ Result[2][3] = v4.z;
+ Result[3][3] = v4.w;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rowMajor4(
+ const detail::tmat4x4<T>& m)
+ {
+ detail::tmat4x4<T> Result;
+ Result[0][0] = m[0][0];
+ Result[0][1] = m[1][0];
+ Result[0][2] = m[2][0];
+ Result[0][3] = m[3][0];
+ Result[1][0] = m[0][1];
+ Result[1][1] = m[1][1];
+ Result[1][2] = m[2][1];
+ Result[1][3] = m[3][1];
+ Result[2][0] = m[0][2];
+ Result[2][1] = m[1][2];
+ Result[2][2] = m[2][2];
+ Result[2][3] = m[3][2];
+ Result[3][0] = m[0][3];
+ Result[3][1] = m[1][3];
+ Result[3][2] = m[2][3];
+ Result[3][3] = m[3][3];
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> colMajor2(
+ const detail::tvec2<T>& v1,
+ const detail::tvec2<T>& v2)
+ {
+ return detail::tmat2x2<T>(v1, v2);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> colMajor2(
+ const detail::tmat2x2<T>& m)
+ {
+ return detail::tmat2x2<T>(m);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> colMajor3(
+ const detail::tvec3<T>& v1,
+ const detail::tvec3<T>& v2,
+ const detail::tvec3<T>& v3)
+ {
+ return detail::tmat3x3<T>(v1, v2, v3);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> colMajor3(
+ const detail::tmat3x3<T>& m)
+ {
+ return detail::tmat3x3<T>(m);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> colMajor4(
+ const detail::tvec4<T>& v1,
+ const detail::tvec4<T>& v2,
+ const detail::tvec4<T>& v3,
+ const detail::tvec4<T>& v4)
+ {
+ return detail::tmat4x4<T>(v1, v2, v3, v4);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> colMajor4(
+ const detail::tmat4x4<T>& m)
+ {
+ return detail::tmat4x4<T>(m);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/matrix_operation.hpp b/include/gal/opengl/glm/gtx/matrix_operation.hpp
new file mode 100644
index 0000000..8a57324
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_operation.hpp
@@ -0,0 +1,112 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_matrix_operation
+/// @file glm/gtx/matrix_operation.hpp
+/// @date 2009-08-29 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation
+/// @ingroup gtx
+///
+/// @brief Build diagonal matrices from vectors.
+///
+/// <glm/gtx/matrix_operation.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_matrix_operation
+#define GLM_GTX_matrix_operation GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_matrix_operation extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_operation
+ /// @{
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat2x2<valType> diagonal2x2(
+ detail::tvec2<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat2x3<valType> diagonal2x3(
+ detail::tvec2<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat2x4<valType> diagonal2x4(
+ detail::tvec2<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat3x2<valType> diagonal3x2(
+ detail::tvec2<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat3x3<valType> diagonal3x3(
+ detail::tvec3<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat3x4<valType> diagonal3x4(
+ detail::tvec3<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat4x2<valType> diagonal4x2(
+ detail::tvec2<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat4x3<valType> diagonal4x3(
+ detail::tvec3<valType> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename valType>
+ detail::tmat4x4<valType> diagonal4x4(
+ detail::tvec4<valType> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_operation.inl"
+
+#endif//GLM_GTX_matrix_operation
diff --git a/include/gal/opengl/glm/gtx/matrix_operation.inl b/include/gal/opengl/glm/gtx/matrix_operation.inl
new file mode 100644
index 0000000..37b2b02
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_operation.inl
@@ -0,0 +1,124 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2009-08-29
+// Updated : 2009-08-29
+// Licence : This source is under MIT License
+// File : glm/gtx/matrix_operation.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<valType> diagonal2x2
+ (
+ detail::tvec2<valType> const & v
+ )
+ {
+ detail::tmat2x2<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat2x3<valType> diagonal2x3
+ (
+ detail::tvec2<valType> const & v
+ )
+ {
+ detail::tmat2x3<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat2x4<valType> diagonal2x4
+ (
+ detail::tvec2<valType> const & v
+ )
+ {
+ detail::tmat2x4<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat3x2<valType> diagonal3x2
+ (
+ detail::tvec2<valType> const & v
+ )
+ {
+ detail::tmat3x2<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<valType> diagonal3x3
+ (
+ detail::tvec3<valType> const & v
+ )
+ {
+ detail::tmat3x3<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat3x4<valType> diagonal3x4
+ (
+ detail::tvec3<valType> const & v
+ )
+ {
+ detail::tmat3x4<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<valType> diagonal4x4
+ (
+ detail::tvec4<valType> const & v
+ )
+ {
+ detail::tmat4x4<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ Result[3][3] = v[3];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x3<valType> diagonal4x3
+ (
+ detail::tvec3<valType> const & v
+ )
+ {
+ detail::tmat4x3<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ return Result;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tmat4x2<valType> diagonal4x2
+ (
+ detail::tvec2<valType> const & v
+ )
+ {
+ detail::tmat4x2<valType> Result(valType(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/matrix_query.hpp b/include/gal/opengl/glm/gtx/matrix_query.hpp
new file mode 100644
index 0000000..bba233b
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_query.hpp
@@ -0,0 +1,117 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_matrix_query
+/// @file glm/gtx/matrix_query.hpp
+/// @date 2007-03-05 / 2011-08-28
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_vector_query (dependence)
+///
+/// @defgroup gtx_matrix_query GLM_GTX_matrix_query
+/// @ingroup gtx
+///
+/// @brief Query to evaluate matrix properties
+///
+/// <glm/gtx/matrix_query.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_matrix_query
+#define GLM_GTX_matrix_query GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/vector_query.hpp"
+#include <limits>
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_matrix_query extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_query
+ /// @{
+
+ /// Return whether a matrix a null matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T>
+ bool isNull(
+ detail::tmat2x2<T> const & m,
+ T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
+
+ /// Return whether a matrix a null matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T>
+ bool isNull(
+ detail::tmat3x3<T> const & m,
+ T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
+
+ /// Return whether a matrix is a null matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T>
+ bool isNull(
+ detail::tmat4x4<T> const & m,
+ T const & epsilon/* = std::numeric_limits<T>::epsilon()*/);
+
+ /// Return whether a matrix is an identity matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename genType>
+ bool isIdentity(
+ genType const & m,
+ typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ /// Return whether a matrix is a normalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename valType>
+ bool isNormalized(
+ detail::tmat2x2<valType> const & m,
+ valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
+
+ /// Return whether a matrix is a normalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename valType>
+ bool isNormalized(
+ detail::tmat3x3<valType> const & m,
+ valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
+
+ /// Return whether a matrix is a normalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename valType>
+ bool isNormalized(
+ detail::tmat4x4<valType> const & m,
+ valType const & epsilon/* = std::numeric_limits<valType>::epsilon()*/);
+
+ /// Return whether a matrix is an orthonormalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename valType, template <typename> class matType>
+ bool isOrthogonal(
+ matType<valType> const & m,
+ valType const & epsilon/* = std::numeric_limits<genType>::epsilon()*/);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_query.inl"
+
+#endif//GLM_GTX_matrix_query
diff --git a/include/gal/opengl/glm/gtx/matrix_query.inl b/include/gal/opengl/glm/gtx/matrix_query.inl
new file mode 100644
index 0000000..6db3391
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/matrix_query.inl
@@ -0,0 +1,154 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-03-05
+// Updated : 2007-03-05
+// Licence : This source is under MIT License
+// File : glm/gtx/matrix_query.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Dependency:
+// - GLM core
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template<typename T>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ detail::tmat2x2<T> const & m,
+ T const & epsilon)
+ {
+ bool result = true;
+ for(int i = 0; result && i < 2 ; ++i)
+ result = isNull(m[i], epsilon);
+ return result;
+ }
+
+ template<typename T>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ detail::tmat3x3<T> const & m,
+ T const & epsilon
+ )
+ {
+ bool result = true;
+ for(int i = 0; result && i < 3 ; ++i)
+ result = isNull(m[i], epsilon);
+ return result;
+ }
+
+ template<typename T>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ detail::tmat4x4<T> const & m,
+ T const & epsilon
+ )
+ {
+ bool result = true;
+ for(int i = 0; result && i < 4 ; ++i)
+ result = isNull(m[i], epsilon);
+ return result;
+ }
+
+ template<typename genType>
+ GLM_FUNC_QUALIFIER bool isIdentity
+ (
+ genType const & m,
+ typename genType::value_type const & epsilon
+ )
+ {
+ bool result = true;
+ for(typename genType::size_type i = typename genType::size_type(0); result && i < genType::col_size(); ++i)
+ {
+ for(typename genType::size_type j = typename genType::size_type(0); result && j < i ; ++j)
+ result = abs(m[i][j]) <= epsilon;
+ if(result)
+ result = abs(m[i][i] - typename genType::value_type(1)) <= epsilon;
+ for(typename genType::size_type j = i + typename genType::size_type(1); result && j < genType::row_size(); ++j)
+ result = abs(m[i][j]) <= epsilon;
+ }
+ return result;
+ }
+
+ template<typename genType>
+ GLM_FUNC_QUALIFIER bool isNormalized
+ (
+ detail::tmat2x2<genType> const & m,
+ genType const & epsilon
+ )
+ {
+ bool result(true);
+ for(typename detail::tmat2x2<genType>::size_type i(0); result && i < m.length(); ++i)
+ result = isNormalized(m[i], epsilon);
+ for(typename detail::tmat2x2<genType>::size_type i(0); result && i < m.length(); ++i)
+ {
+ typename detail::tmat2x2<genType>::col_type v;
+ for(typename detail::tmat2x2<genType>::size_type j(0); j < m.length(); ++j)
+ v[j] = m[j][i];
+ result = isNormalized(v, epsilon);
+ }
+ return result;
+ }
+
+ template<typename genType>
+ GLM_FUNC_QUALIFIER bool isNormalized
+ (
+ detail::tmat3x3<genType> const & m,
+ genType const & epsilon
+ )
+ {
+ bool result(true);
+ for(typename detail::tmat3x3<genType>::size_type i(0); result && i < m.length(); ++i)
+ result = isNormalized(m[i], epsilon);
+ for(typename detail::tmat3x3<genType>::size_type i(0); result && i < m.length(); ++i)
+ {
+ typename detail::tmat3x3<genType>::col_type v;
+ for(typename detail::tmat3x3<genType>::size_type j(0); j < m.length(); ++j)
+ v[j] = m[j][i];
+ result = isNormalized(v, epsilon);
+ }
+ return result;
+ }
+
+ template<typename genType>
+ GLM_FUNC_QUALIFIER bool isNormalized
+ (
+ detail::tmat4x4<genType> const & m,
+ genType const & epsilon
+ )
+ {
+ bool result(true);
+ for(typename detail::tmat4x4<genType>::size_type i(0); result && i < m.length(); ++i)
+ result = isNormalized(m[i], epsilon);
+ for(typename detail::tmat4x4<genType>::size_type i(0); result && i < m.length(); ++i)
+ {
+ typename detail::tmat4x4<genType>::col_type v;
+ for(typename detail::tmat4x4<genType>::size_type j(0); j < m.length(); ++j)
+ v[j] = m[j][i];
+ result = isNormalized(v, epsilon);
+ }
+ return result;
+ }
+
+ template<typename genType, template <typename> class matType>
+ GLM_FUNC_QUALIFIER bool isOrthogonal
+ (
+ matType<genType> const & m,
+ genType const & epsilon
+ )
+ {
+ bool result(true);
+ for(typename matType<genType>::size_type i(0); result && i < m.length() - 1; ++i)
+ for(typename matType<genType>::size_type j(i + 1); result && j < m.length(); ++j)
+ result = areOrthogonal(m[i], m[j], epsilon);
+
+ if(result)
+ {
+ matType<genType> tmp = transpose(m);
+ for(typename matType<genType>::size_type i(0); result && i < m.length() - 1 ; ++i)
+ for(typename matType<genType>::size_type j(i + 1); result && j < m.length(); ++j)
+ result = areOrthogonal(tmp[i], tmp[j], epsilon);
+ }
+ return result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/mixed_product.hpp b/include/gal/opengl/glm/gtx/mixed_product.hpp
new file mode 100644
index 0000000..b222271
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/mixed_product.hpp
@@ -0,0 +1,65 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_mixed_product
+/// @file glm/gtx/mixed_product.hpp
+/// @date 2007-04-03 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte
+/// @ingroup gtx
+///
+/// @brief Mixed product of 3 vectors.
+///
+/// <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_mixed_product
+#define GLM_GTX_mixed_product GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_mixed_product extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_mixed_product
+ /// @{
+
+ /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
+ template <typename valType>
+ valType mixedProduct(
+ detail::tvec3<valType> const & v1,
+ detail::tvec3<valType> const & v2,
+ detail::tvec3<valType> const & v3);
+
+ /// @}
+}// namespace glm
+
+#include "mixed_product.inl"
+
+#endif//GLM_GTX_mixed_product
diff --git a/include/gal/opengl/glm/gtx/mixed_product.inl b/include/gal/opengl/glm/gtx/mixed_product.inl
new file mode 100644
index 0000000..9c3a179
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/mixed_product.inl
@@ -0,0 +1,22 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-04-03
+// Updated : 2008-09-17
+// Licence : This source is under MIT License
+// File : glm/gtx/mixed_product.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType mixedProduct
+ (
+ detail::tvec3<valType> const & v1,
+ detail::tvec3<valType> const & v2,
+ detail::tvec3<valType> const & v3
+ )
+ {
+ return dot(cross(v1, v2), v3);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/multiple.hpp b/include/gal/opengl/glm/gtx/multiple.hpp
new file mode 100644
index 0000000..0092802
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/multiple.hpp
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_multiple
+/// @file glm/gtx/multiple.hpp
+/// @date 2009-10-26 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_multiple GLM_GTX_multiple
+/// @ingroup gtx
+///
+/// @brief Find the closest number of a number multiple of other number.
+///
+/// <glm/gtx/multiple.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_multiple
+#define GLM_GTX_multiple GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_multiple extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_multiple
+ /// @{
+
+ //! Higher Multiple number of Source.
+ //! From GLM_GTX_multiple extension.
+ template <typename genType>
+ genType higherMultiple(
+ genType const & Source,
+ genType const & Multiple);
+
+ //! Lower Multiple number of Source.
+ //! From GLM_GTX_multiple extension.
+ template <typename genType>
+ genType lowerMultiple(
+ genType const & Source,
+ genType const & Multiple);
+
+ /// @}
+}//namespace glm
+
+#include "multiple.inl"
+
+#endif//GLM_GTX_multiple
diff --git a/include/gal/opengl/glm/gtx/multiple.inl b/include/gal/opengl/glm/gtx/multiple.inl
new file mode 100644
index 0000000..e7d25b0
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/multiple.inl
@@ -0,0 +1,128 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2009-10-26
+// Updated : 2011-06-07
+// Licence : This source is under MIT License
+// File : glm/gtx/multiple.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Dependency:
+// - GLM core
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ //////////////////////
+ // higherMultiple
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType higherMultiple
+ (
+ genType const & Source,
+ genType const & Multiple
+ )
+ {
+ if (Source > 0)
+ {
+ genType Tmp = Source - 1;
+ return Tmp + (Multiple - (Tmp % Multiple));
+ }
+ else
+ return Source + (-Source % Multiple);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::half higherMultiple
+ (
+ detail::half const & SourceH,
+ detail::half const & MultipleH
+ )
+ {
+ float Source = SourceH.toFloat();
+ float Multiple = MultipleH.toFloat();
+
+ int Tmp = int(float(Source)) % int(Multiple);
+ return detail::half(Tmp ? Source + Multiple - float(Tmp) : Source);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER float higherMultiple
+ (
+ float const & Source,
+ float const & Multiple
+ )
+ {
+ int Tmp = int(Source) % int(Multiple);
+ return Tmp ? Source + Multiple - float(Tmp) : Source;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double higherMultiple
+ (
+ double const & Source,
+ double const & Multiple
+ )
+ {
+ long Tmp = long(Source) % long(Multiple);
+ return Tmp ? Source + Multiple - double(Tmp) : Source;
+ }
+
+ VECTORIZE_VEC_VEC(higherMultiple)
+
+ //////////////////////
+ // lowerMultiple
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType lowerMultiple
+ (
+ genType const & Source,
+ genType const & Multiple
+ )
+ {
+ if (Source >= 0)
+ return Source - Source % Multiple;
+ else
+ {
+ genType Tmp = Source + 1;
+ return Tmp - Tmp % Multiple - Multiple;
+ }
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER detail::half lowerMultiple
+ (
+ detail::half const & SourceH,
+ detail::half const & MultipleH
+ )
+ {
+ float Source = SourceH.toFloat();
+ float Multiple = MultipleH.toFloat();
+
+ int Tmp = int(float(Source)) % int(float(Multiple));
+ return detail::half(Tmp ? Source - float(Tmp) : Source);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER float lowerMultiple
+ (
+ float const & Source,
+ float const & Multiple
+ )
+ {
+ int Tmp = int(Source) % int(Multiple);
+ return Tmp ? Source - float(Tmp) : Source;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double lowerMultiple
+ (
+ double const & Source,
+ double const & Multiple
+ )
+ {
+ long Tmp = long(Source) % long(Multiple);
+ return Tmp ? Source - double(Tmp) : Source;
+ }
+
+ VECTORIZE_VEC_VEC(lowerMultiple)
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/noise.hpp b/include/gal/opengl/glm/gtx/noise.hpp
new file mode 100644
index 0000000..f081dac
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/noise.hpp
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_random extension is deprecated, include GLM_GTC_random (glm/gtc/noise.hpp) instead")
+#endif
+
+// Promoted:
+#include "../gtc/noise.hpp"
diff --git a/include/gal/opengl/glm/gtx/norm.hpp b/include/gal/opengl/glm/gtx/norm.hpp
new file mode 100644
index 0000000..2b065f4
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/norm.hpp
@@ -0,0 +1,133 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_norm
+/// @file glm/gtx/norm.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_quaternion (dependence)
+///
+/// @defgroup gtx_norm GLM_GTX_norm
+/// @ingroup gtx
+///
+/// @brief Various ways to compute vector norms.
+///
+/// <glm/gtx/norm.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_norm
+#define GLM_GTX_norm GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/quaternion.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_norm extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_norm
+ /// @{
+
+ //! Returns the squared length of x.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T length2(
+ T const & x);
+
+ //! Returns the squared length of x.
+ //! From GLM_GTX_norm extension.
+ template <typename genType>
+ typename genType::value_type length2(
+ genType const & x);
+
+ //! Returns the squared length of x.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T length2(
+ detail::tquat<T> const & q);
+
+ //! Returns the squared distance between p0 and p1, i.e., length(p0 - p1).
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T distance2(
+ T const & p0,
+ T const & p1);
+
+ //! Returns the squared distance between p0 and p1, i.e., length(p0 - p1).
+ //! From GLM_GTX_norm extension.
+ template <typename genType>
+ typename genType::value_type distance2(
+ genType const & p0,
+ genType const & p1);
+
+ //! Returns the L1 norm between x and y.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T l1Norm(
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y);
+
+ //! Returns the L1 norm of v.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T l1Norm(
+ detail::tvec3<T> const & v);
+
+ //! Returns the L2 norm between x and y.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T l2Norm(
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y);
+
+ //! Returns the L2 norm of v.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T l2Norm(
+ detail::tvec3<T> const & x);
+
+ //! Returns the L norm between x and y.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T lxNorm(
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ unsigned int Depth);
+
+ //! Returns the L norm of v.
+ //! From GLM_GTX_norm extension.
+ template <typename T>
+ T lxNorm(
+ detail::tvec3<T> const & x,
+ unsigned int Depth);
+
+ /// @}
+}//namespace glm
+
+#include "norm.inl"
+
+#endif//GLM_GTX_norm
diff --git a/include/gal/opengl/glm/gtx/norm.inl b/include/gal/opengl/glm/gtx/norm.inl
new file mode 100644
index 0000000..427a5a1
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/norm.inl
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2008-07-24
+// Licence : This source is under MIT License
+// File : glm/gtx/norm.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T length2
+ (
+ T const & x
+ )
+ {
+ return x * x;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T length2
+ (
+ detail::tvec2<T> const & x
+ )
+ {
+ return dot(x, x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T length2
+ (
+ detail::tvec3<T> const & x
+ )
+ {
+ return dot(x, x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T length2
+ (
+ detail::tvec4<T> const & x
+ )
+ {
+ return dot(x, x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T length2
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T distance2
+ (
+ T const & p0,
+ T const & p1
+ )
+ {
+ return length2(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T distance2
+ (
+ detail::tvec2<T> const & p0,
+ detail::tvec2<T> const & p1
+ )
+ {
+ return length2(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T distance2
+ (
+ detail::tvec3<T> const & p0,
+ detail::tvec3<T> const & p1
+ )
+ {
+ return length2(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T distance2
+ (
+ detail::tvec4<T> const & p0,
+ detail::tvec4<T> const & p1
+ )
+ {
+ return length2(p1 - p0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T l1Norm
+ (
+ detail::tvec3<T> const & a,
+ detail::tvec3<T> const & b
+ )
+ {
+ return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T l1Norm
+ (
+ detail::tvec3<T> const & v
+ )
+ {
+ return abs(v.x) + abs(v.y) + abs(v.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T l2Norm
+ (
+ detail::tvec3<T> const & a,
+ detail::tvec3<T> const & b
+ )
+ {
+ return length(b - a);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T l2Norm
+ (
+ detail::tvec3<T> const & v
+ )
+ {
+ return length(v);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T lxNorm
+ (
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ unsigned int Depth
+ )
+ {
+ return pow(pow(y.x - x.x, T(Depth)) + pow(y.y - x.y, T(Depth)) + pow(y.z - x.z, T(Depth)), T(1) / T(Depth));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T lxNorm
+ (
+ detail::tvec3<T> const & v,
+ unsigned int Depth
+ )
+ {
+ return pow(pow(v.x, T(Depth)) + pow(v.y, T(Depth)) + pow(v.z, T(Depth)), T(1) / T(Depth));
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/normal.hpp b/include/gal/opengl/glm/gtx/normal.hpp
new file mode 100644
index 0000000..a04e304
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/normal.hpp
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_normal
+/// @file glm/gtx/normal.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_normal GLM_GTX_normal
+/// @ingroup gtx
+///
+/// @brief Compute the normal of a triangle.
+///
+/// <glm/gtx/normal.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_normal
+#define GLM_GTX_normal GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_normal extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_normal
+ /// @{
+
+ //! Computes triangle normal from triangle points.
+ //! From GLM_GTX_normal extension.
+ template <typename T>
+ detail::tvec3<T> triangleNormal(
+ detail::tvec3<T> const & p1,
+ detail::tvec3<T> const & p2,
+ detail::tvec3<T> const & p3);
+
+ /// @}
+}//namespace glm
+
+#include "normal.inl"
+
+#endif//GLM_GTX_normal
diff --git a/include/gal/opengl/glm/gtx/normal.inl b/include/gal/opengl/glm/gtx/normal.inl
new file mode 100644
index 0000000..5aedcc7
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/normal.inl
@@ -0,0 +1,22 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2011-06-07
+// Licence : This source is under MIT License
+// File : glm/gtx/normal.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> triangleNormal
+ (
+ detail::tvec3<T> const & p1,
+ detail::tvec3<T> const & p2,
+ detail::tvec3<T> const & p3
+ )
+ {
+ return normalize(cross(p1 - p2, p1 - p3));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/normalize_dot.hpp b/include/gal/opengl/glm/gtx/normalize_dot.hpp
new file mode 100644
index 0000000..1ba027a
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/normalize_dot.hpp
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_normalize_dot
+/// @file glm/gtx/normalize_dot.hpp
+/// @date 2007-09-28 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_fast_square_root (dependence)
+///
+/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot
+/// @ingroup gtx
+///
+/// @brief Dot product of vectors that need to be normalize with a single square root.
+///
+/// <glm/gtx/normalized_dot.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_normalize_dot
+#define GLM_GTX_normalize_dot GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/fast_square_root.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_normalize_dot extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_normalize_dot
+ /// @{
+
+ //! Normalize parameters and returns the dot product of x and y.
+ //! It's faster that dot(normalize(x), normalize(y)).
+ //! From GLM_GTX_normalize_dot extension.
+ template <typename genType>
+ typename genType::value_type normalizeDot(
+ genType const & x,
+ genType const & y);
+
+ //! Normalize parameters and returns the dot product of x and y.
+ //! Faster that dot(fastNormalize(x), fastNormalize(y)).
+ //! From GLM_GTX_normalize_dot extension.
+ template <typename genType>
+ typename genType::value_type fastNormalizeDot(
+ genType const & x,
+ genType const & y);
+
+ /// @}
+}//namespace glm
+
+#include "normalize_dot.inl"
+
+#endif//GLM_GTX_normalize_dot
diff --git a/include/gal/opengl/glm/gtx/normalize_dot.inl b/include/gal/opengl/glm/gtx/normalize_dot.inl
new file mode 100644
index 0000000..5058eac
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/normalize_dot.inl
@@ -0,0 +1,115 @@
+//////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+//////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-09-28
+// Updated : 2008-10-07
+// Licence : This source is under MIT License
+// File : glm/gtx/normalize_dot.inl
+//////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType normalizeDot
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ glm::inversesqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType normalizeDot
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ glm::inversesqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType normalizeDot
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ glm::inversesqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType normalizeDot
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ glm::inversesqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastNormalizeDot
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ fastInverseSqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastNormalizeDot
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ fastInverseSqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastNormalizeDot
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ fastInverseSqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastNormalizeDot
+ (
+ detail::tvec4<valType> const & x,
+ detail::tvec4<valType> const & y
+ )
+ {
+ return
+ glm::dot(x, y) *
+ fastInverseSqrt(glm::dot(x, x) *
+ glm::dot(y, y));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/number_precision.hpp b/include/gal/opengl/glm/gtx/number_precision.hpp
new file mode 100644
index 0000000..1597936
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/number_precision.hpp
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_number_precision
+/// @file glm/gtx/number_precision.hpp
+/// @date 2007-05-10 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_type_precision (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtx_number_precision GLM_GTX_number_precision
+/// @ingroup gtx
+///
+/// @brief Defined size types.
+///
+/// <glm/gtx/number_precision.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_number_precision
+#define GLM_GTX_number_precision GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/type_precision.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_number_precision extension included")
+#endif
+
+namespace glm{
+namespace gtx
+{
+ /////////////////////////////
+ // Unsigned int vector types
+
+ /// @addtogroup gtx_number_precision
+ /// @{
+
+ typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+ typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+ typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+ typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+
+ //////////////////////
+ // Float vector types
+
+ typedef f16 f16vec1; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f32 f32vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f64 f64vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+
+ //////////////////////
+ // Float matrix types
+
+ typedef f16 f16mat1; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f16 f16mat1x1; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f32 f32mat1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f32 f32mat1x1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f64 f64mat1; //!< \brief Double-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f64 f64mat1x1; //!< \brief Double-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+
+ /// @}
+}//namespace gtx
+}//namespace glm
+
+#include "number_precision.inl"
+
+#endif//GLM_GTX_number_precision
diff --git a/include/gal/opengl/glm/gtx/number_precision.inl b/include/gal/opengl/glm/gtx/number_precision.inl
new file mode 100644
index 0000000..3981856
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/number_precision.inl
@@ -0,0 +1,13 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-05-10
+// Updated : 2007-05-10
+// Licence : This source is under MIT License
+// File : glm/gtx/number_precision.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+
+}
diff --git a/include/gal/opengl/glm/gtx/ocl_type.hpp b/include/gal/opengl/glm/gtx/ocl_type.hpp
new file mode 100644
index 0000000..7e8af09
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/ocl_type.hpp
@@ -0,0 +1,132 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_ocl_type
+/// @file glm/gtx/ocl_type.hpp
+/// @date 2009-05-07 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_ocl_type GLM_GTX_ocl_type
+/// @ingroup gtx
+///
+/// @brief OpenCL types.
+///
+/// <glm/gtx/ocl_type.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_ocl_type
+#define GLM_GTX_ocl_type GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_ocl_type extension included")
+#endif
+
+namespace glm{
+namespace gtx
+{
+ ///////////////////////////
+ // Scalar types
+
+ /// @addtogroup gtx_ocl_type
+ /// @{
+
+ typedef detail::int8 cl_char; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::int16 cl_short; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::int32 cl_int; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::int64 cl_long; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ typedef detail::uint8 cl_uchar; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::uint16 cl_ushort; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::uint32 cl_uint; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::uint64 cl_ulong; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ typedef detail::float16 cl_half; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+ typedef detail::float32 cl_float; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+
+
+ typedef detail::int8 cl_char1; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::int16 cl_short1; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::int32 cl_int1; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::int64 cl_long1; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ typedef detail::uint8 cl_uchar1; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::uint16 cl_ushort1; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::uint32 cl_uint1; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::uint64 cl_ulong1; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ //typedef detail::float16 cl_half1; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+ typedef detail::float32 cl_float1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+
+
+ typedef detail::tvec2<detail::int8> cl_char2; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::int16> cl_short2; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::int32> cl_int2; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::int64> cl_long2; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ typedef detail::tvec2<detail::uint8> cl_uchar2; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::uint16> cl_ushort2; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::uint32> cl_uint2; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::uint64> cl_ulong2; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ //typedef detail::tvec2<detail::float16> cl_half2; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec2<detail::float32> cl_float2; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+
+
+ typedef detail::tvec3<detail::int8> cl_char3; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::int16> cl_short3; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::int32> cl_int3; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::int64> cl_long3; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ typedef detail::tvec3<detail::uint8> cl_uchar3; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::uint16> cl_ushort3; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::uint32> cl_uint3; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::uint64> cl_ulong3; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ //typedef detail::tvec3<detail::float16> cl_half3; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec3<detail::float32> cl_float3; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+
+
+ typedef detail::tvec4<detail::int8> cl_char4; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::int16> cl_short4; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::int32> cl_int4; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::int64> cl_long4; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::uint8> cl_uchar4; //!< \brief 8bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::uint16> cl_ushort4; //!< \brief 16bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::uint32> cl_uint4; //!< \brief 32bit signed integer. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::uint64> cl_ulong4; //!< \brief 64bit signed integer. (from GLM_GTX_ocl_type extension)
+
+ //typedef detail::tvec4<detail::float16> cl_half4; //!< \brief Half-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+ typedef detail::tvec4<detail::float32> cl_float4; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_ocl_type extension)
+
+ /// @}
+}//namespace gtx
+}//namespace glm
+
+#include "ocl_type.inl"
+
+#endif//GLM_GTX_ocl_type
diff --git a/include/gal/opengl/glm/gtx/ocl_type.inl b/include/gal/opengl/glm/gtx/ocl_type.inl
new file mode 100644
index 0000000..ac15145
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/ocl_type.inl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_ocl_type
+/// @file glm/gtx/ocl_type.inl
+/// @date 2013-03-16 / 2013-03-16
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/gtx/optimum_pow.hpp b/include/gal/opengl/glm/gtx/optimum_pow.hpp
new file mode 100644
index 0000000..d348473
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/optimum_pow.hpp
@@ -0,0 +1,91 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_optimum_pow
+/// @file glm/gtx/optimum_pow.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow
+/// @ingroup gtx
+///
+/// @brief Integer exponentiation of power functions.
+///
+/// <glm/gtx/optimum_pow.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_optimum_pow
+#define GLM_GTX_optimum_pow GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_optimum_pow extension included")
+#endif
+
+namespace glm{
+namespace gtx
+{
+ /// @addtogroup gtx_optimum_pow
+ /// @{
+
+ //! Returns x raised to the power of 2.
+ //! From GLM_GTX_optimum_pow extension.
+ template <typename genType>
+ genType pow2(const genType& x);
+
+ //! Returns x raised to the power of 3.
+ //! From GLM_GTX_optimum_pow extension.
+ template <typename genType>
+ genType pow3(const genType& x);
+
+ //! Returns x raised to the power of 4.
+ //! From GLM_GTX_optimum_pow extension.
+ template <typename genType>
+ genType pow4(const genType& x);
+
+ //! Checks if the parameter is a power of 2 number.
+ //! From GLM_GTX_optimum_pow extension.
+ bool powOfTwo(int num);
+
+ //! Checks to determine if the parameter component are power of 2 numbers.
+ //! From GLM_GTX_optimum_pow extension.
+ detail::tvec2<bool> powOfTwo(const detail::tvec2<int>& x);
+
+ //! Checks to determine if the parameter component are power of 2 numbers.
+ //! From GLM_GTX_optimum_pow extension.
+ detail::tvec3<bool> powOfTwo(const detail::tvec3<int>& x);
+
+ //! Checks to determine if the parameter component are power of 2 numbers.
+ //! From GLM_GTX_optimum_pow extension.
+ detail::tvec4<bool> powOfTwo(const detail::tvec4<int>& x);
+
+ /// @}
+}//namespace gtx
+}//namespace glm
+
+#include "optimum_pow.inl"
+
+#endif//GLM_GTX_optimum_pow
diff --git a/include/gal/opengl/glm/gtx/optimum_pow.inl b/include/gal/opengl/glm/gtx/optimum_pow.inl
new file mode 100644
index 0000000..1e6f226
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/optimum_pow.inl
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2005-12-27
+// Licence : This source is under MIT License
+// File : glm/gtx/optimum_pow.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow2(const genType& x)
+ {
+ return x * x;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow3(const genType& x)
+ {
+ return x * x * x;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow4(const genType& x)
+ {
+ return x * x * x * x;
+ }
+
+ GLM_FUNC_QUALIFIER bool powOfTwo(int x)
+ {
+ return !(x & (x - 1));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> powOfTwo(const detail::tvec2<int>& x)
+ {
+ return detail::tvec2<bool>(
+ powOfTwo(x.x),
+ powOfTwo(x.y));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> powOfTwo(const detail::tvec3<int>& x)
+ {
+ return detail::tvec3<bool>(
+ powOfTwo(x.x),
+ powOfTwo(x.y),
+ powOfTwo(x.z));
+ }
+
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> powOfTwo(const detail::tvec4<int>& x)
+ {
+ return detail::tvec4<bool>(
+ powOfTwo(x.x),
+ powOfTwo(x.y),
+ powOfTwo(x.z),
+ powOfTwo(x.w));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/orthonormalize.hpp b/include/gal/opengl/glm/gtx/orthonormalize.hpp
new file mode 100644
index 0000000..9f97f66
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/orthonormalize.hpp
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_orthonormalize
+/// @file glm/gtx/orthonormalize.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize
+/// @ingroup gtx
+///
+/// @brief Orthonormalize matrices.
+///
+/// <glm/gtx/orthonormalize.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_orthonormalize
+#define GLM_GTX_orthonormalize GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_orthonormalize extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_orthonormalize
+ /// @{
+
+ //! Returns the orthonormalized matrix of m.
+ //! From GLM_GTX_orthonormalize extension.
+ template <typename T>
+ detail::tmat3x3<T> orthonormalize(
+ const detail::tmat3x3<T>& m);
+
+ //! Orthonormalizes x according y.
+ //! From GLM_GTX_orthonormalize extension.
+ template <typename T>
+ detail::tvec3<T> orthonormalize(
+ const detail::tvec3<T>& x,
+ const detail::tvec3<T>& y);
+
+ /// @}
+}//namespace glm
+
+#include "orthonormalize.inl"
+
+#endif//GLM_GTX_orthonormalize
diff --git a/include/gal/opengl/glm/gtx/orthonormalize.inl b/include/gal/opengl/glm/gtx/orthonormalize.inl
new file mode 100644
index 0000000..ea9ff7f
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/orthonormalize.inl
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2005-12-21
+// Licence : This source is under MIT License
+// File : glm/gtx/orthonormalize.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> orthonormalize
+ (
+ const detail::tmat3x3<T>& m
+ )
+ {
+ detail::tmat3x3<T> r = m;
+
+ r[0] = normalize(r[0]);
+
+ float d0 = dot(r[0], r[1]);
+ r[1] -= r[0] * d0;
+ r[1] = normalize(r[1]);
+
+ float d1 = dot(r[1], r[2]);
+ d0 = dot(r[0], r[2]);
+ r[2] -= r[0] * d0 + r[1] * d1;
+ r[2] = normalize(r[2]);
+
+ return r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> orthonormalize
+ (
+ const detail::tvec3<T>& x,
+ const detail::tvec3<T>& y
+ )
+ {
+ return normalize(x - y * dot(y, x));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/perpendicular.hpp b/include/gal/opengl/glm/gtx/perpendicular.hpp
new file mode 100644
index 0000000..f6515ab
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/perpendicular.hpp
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_perpendicular
+/// @file glm/gtx/perpendicular.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_projection (dependence)
+///
+/// @defgroup gtx_perpendicular GLM_GTX_perpendicular
+/// @ingroup gtx
+///
+/// @brief Perpendicular of a vector from other one
+///
+/// <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_perpendicular
+#define GLM_GTX_perpendicular GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/projection.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_perpendicular extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_perpendicular
+ /// @{
+
+ //! Projects x a perpendicular axis of Normal.
+ //! From GLM_GTX_perpendicular extension.
+ template <typename vecType>
+ vecType perp(
+ vecType const & x,
+ vecType const & Normal);
+
+ /// @}
+}//namespace glm
+
+#include "perpendicular.inl"
+
+#endif//GLM_GTX_perpendicular
diff --git a/include/gal/opengl/glm/gtx/perpendicular.inl b/include/gal/opengl/glm/gtx/perpendicular.inl
new file mode 100644
index 0000000..c96812a
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/perpendicular.inl
@@ -0,0 +1,21 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2009-03-06
+// Licence : This source is under MIT License
+// File : glm/gtx/perpendicular.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename vecType>
+ GLM_FUNC_QUALIFIER vecType perp
+ (
+ vecType const & x,
+ vecType const & Normal
+ )
+ {
+ return x - proj(x, Normal);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/polar_coordinates.hpp b/include/gal/opengl/glm/gtx/polar_coordinates.hpp
new file mode 100644
index 0000000..1cba486
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/polar_coordinates.hpp
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_polar_coordinates
+/// @file glm/gtx/polar_coordinates.hpp
+/// @date 2007-03-06 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates
+/// @ingroup gtx
+///
+/// @brief Conversion from Euclidean space to polar space and revert.
+///
+/// <glm/gtx/polar_coordinates.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_polar_coordinates
+#define GLM_GTX_polar_coordinates GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_polar_coordinates extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_polar_coordinates
+ /// @{
+
+ /// Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.
+ ///
+ /// @see gtx_polar_coordinates
+ template <typename T>
+ detail::tvec3<T> polar(
+ detail::tvec3<T> const & euclidean);
+
+ /// Convert Polar to Euclidean coordinates.
+ ///
+ /// @see gtx_polar_coordinates
+ template <typename T>
+ detail::tvec3<T> euclidean(
+ detail::tvec2<T> const & polar);
+
+ /// @}
+}//namespace glm
+
+#include "polar_coordinates.inl"
+
+#endif//GLM_GTX_polar_coordinates
diff --git a/include/gal/opengl/glm/gtx/polar_coordinates.inl b/include/gal/opengl/glm/gtx/polar_coordinates.inl
new file mode 100644
index 0000000..376a31c
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/polar_coordinates.inl
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-03-06
+// Updated : 2009-05-01
+// Licence : This source is under MIT License
+// File : glm/gtx/polar_coordinates.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> polar
+ (
+ detail::tvec3<T> const & euclidean
+ )
+ {
+ T const Length(length(euclidean));
+ detail::tvec3<T> const tmp(euclidean / Length);
+ T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z));
+
+#ifdef GLM_FORCE_RADIANS
+ return detail::tvec3<T>(
+ atan(xz_dist, tmp.y), // latitude
+ atan(tmp.x, tmp.z), // longitude
+ xz_dist); // xz distance
+#else
+ return detail::tvec3<T>(
+ degrees(atan(xz_dist, tmp.y)), // latitude
+ degrees(atan(tmp.x, tmp.z)), // longitude
+ xz_dist); // xz distance
+#endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> euclidean
+ (
+ detail::tvec2<T> const & polar
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ T const latitude(polar.x);
+ T const longitude(polar.y);
+#else
+ T const latitude(radians(polar.x));
+ T const longitude(radians(polar.y));
+#endif
+
+ return detail::tvec3<T>(
+ cos(latitude) * sin(longitude),
+ sin(latitude),
+ cos(latitude) * cos(longitude));
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/projection.hpp b/include/gal/opengl/glm/gtx/projection.hpp
new file mode 100644
index 0000000..6e20922
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/projection.hpp
@@ -0,0 +1,65 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_projection
+/// @file glm/gtx/projection.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_projection GLM_GTX_projection
+/// @ingroup gtx
+///
+/// @brief Projection of a vector to other one
+///
+/// <glm/gtx/projection.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_projection
+#define GLM_GTX_projection GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_projection extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_projection
+ /// @{
+
+ //! Projects x on Normal.
+ //! From GLM_GTX_projection extension.
+ template <typename vecType>
+ vecType proj(
+ vecType const & x,
+ vecType const & Normal);
+
+ /// @}
+}//namespace glm
+
+#include "projection.inl"
+
+#endif//GLM_GTX_projection
diff --git a/include/gal/opengl/glm/gtx/projection.inl b/include/gal/opengl/glm/gtx/projection.inl
new file mode 100644
index 0000000..4107d89
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/projection.inl
@@ -0,0 +1,21 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2009-03-06
+// Licence : This source is under MIT License
+// File : glm/gtx/projection.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename vecType>
+ GLM_FUNC_QUALIFIER vecType proj
+ (
+ vecType const & x,
+ vecType const & Normal
+ )
+ {
+ return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/quaternion.hpp b/include/gal/opengl/glm/gtx/quaternion.hpp
new file mode 100644
index 0000000..3c9e8b0
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/quaternion.hpp
@@ -0,0 +1,195 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_quaternion
+/// @file glm/gtx/quaternion.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_quaternion GLM_GTX_quaternion
+/// @ingroup gtx
+///
+/// @brief Extented quaternion types and functions
+///
+/// <glm/gtx/quaternion.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_quaternion
+#define GLM_GTX_quaternion GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_quaternion extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_quaternion
+ /// @{
+
+ //! Compute a cross product between a quaternion and a vector.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tvec3<valType> cross(
+ detail::tquat<valType> const & q,
+ detail::tvec3<valType> const & v);
+
+ //! Compute a cross product between a vector and a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tvec3<valType> cross(
+ detail::tvec3<valType> const & v,
+ detail::tquat<valType> const & q);
+
+ //! Compute a point on a path according squad equation.
+ //! q1 and q2 are control points; s1 and s2 are intermediate control points.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> squad(
+ detail::tquat<valType> const & q1,
+ detail::tquat<valType> const & q2,
+ detail::tquat<valType> const & s1,
+ detail::tquat<valType> const & s2,
+ valType const & h);
+
+ //! Returns an intermediate control point for squad interpolation.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> intermediate(
+ detail::tquat<valType> const & prev,
+ detail::tquat<valType> const & curr,
+ detail::tquat<valType> const & next);
+
+ //! Returns a exp of a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> exp(
+ detail::tquat<valType> const & q);
+
+ //! Returns a log of a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> log(
+ detail::tquat<valType> const & q);
+
+ /// Returns x raised to the y power.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> pow(
+ detail::tquat<valType> const & x,
+ valType const & y);
+
+ //! Returns quarternion square root.
+ ///
+ /// @see gtx_quaternion
+ //template <typename valType>
+ //detail::tquat<valType> sqrt(
+ // detail::tquat<valType> const & q);
+
+ //! Rotates a 3 components vector by a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tvec3<valType> rotate(
+ detail::tquat<valType> const & q,
+ detail::tvec3<valType> const & v);
+
+ /// Rotates a 4 components vector by a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tvec4<valType> rotate(
+ detail::tquat<valType> const & q,
+ detail::tvec4<valType> const & v);
+
+ /// Extract the real component of a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ valType extractRealComponent(
+ detail::tquat<valType> const & q);
+
+ /// Converts a quaternion to a 3 * 3 matrix.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tmat3x3<valType> toMat3(
+ detail::tquat<valType> const & x){return mat3_cast(x);}
+
+ /// Converts a quaternion to a 4 * 4 matrix.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tmat4x4<valType> toMat4(
+ detail::tquat<valType> const & x){return mat4_cast(x);}
+
+ /// Converts a 3 * 3 matrix to a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> toQuat(
+ detail::tmat3x3<valType> const & x){return quat_cast(x);}
+
+ /// Converts a 4 * 4 matrix to a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template <typename valType>
+ detail::tquat<valType> toQuat(
+ detail::tmat4x4<valType> const & x){return quat_cast(x);}
+
+ /// Quaternion interpolation using the rotation short path.
+ ///
+ /// @see gtx_quaternion
+ template <typename T>
+ detail::tquat<T> shortMix(
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a);
+
+ /// Quaternion normalized linear interpolation.
+ ///
+ /// @see gtx_quaternion
+ template <typename T>
+ detail::tquat<T> fastMix(
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a);
+
+ /// @}
+}//namespace glm
+
+#include "quaternion.inl"
+
+#endif//GLM_GTX_quaternion
diff --git a/include/gal/opengl/glm/gtx/quaternion.inl b/include/gal/opengl/glm/gtx/quaternion.inl
new file mode 100644
index 0000000..32155ce
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/quaternion.inl
@@ -0,0 +1,208 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2008-11-27
+// Licence : This source is under MIT License
+// File : glm/gtx/quaternion.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <limits>
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> cross
+ (
+ detail::tvec3<valType> const & v,
+ detail::tquat<valType> const & q
+ )
+ {
+ return inverse(q) * v;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> cross
+ (
+ detail::tquat<valType> const & q,
+ detail::tvec3<valType> const & v
+ )
+ {
+ return q * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> squad
+ (
+ detail::tquat<T> const & q1,
+ detail::tquat<T> const & q2,
+ detail::tquat<T> const & s1,
+ detail::tquat<T> const & s2,
+ T const & h)
+ {
+ return mix(mix(q1, q2, h), mix(s1, s2, h), T(2) * (T(1) - h) * h);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> intermediate
+ (
+ detail::tquat<T> const & prev,
+ detail::tquat<T> const & curr,
+ detail::tquat<T> const & next
+ )
+ {
+ detail::tquat<T> invQuat = inverse(curr);
+ return exp((log(next + invQuat) + log(prev + invQuat)) / T(-4)) * curr;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> exp
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ detail::tvec3<T> u(q.x, q.y, q.z);
+ float Angle = glm::length(u);
+ detail::tvec3<T> v(u / Angle);
+ return detail::tquat<T>(cos(Angle), sin(Angle) * v);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> log
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ if((q.x == T(0)) && (q.y == T(0)) && (q.z == T(0)))
+ {
+ if(q.w > T(0))
+ return detail::tquat<T>(log(q.w), T(0), T(0), T(0));
+ else if(q.w < T(0))
+ return detail::tquat<T>(log(-q.w), T(3.1415926535897932384626433832795), T(0),T(0));
+ else
+ return detail::tquat<T>(std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity());
+ }
+ else
+ {
+ T Vec3Len = sqrt(q.x * q.x + q.y * q.y + q.z * q.z);
+ T QuatLen = sqrt(Vec3Len * Vec3Len + q.w * q.w);
+ T t = atan(Vec3Len, T(q.w)) / Vec3Len;
+ return detail::tquat<T>(t * q.x, t * q.y, t * q.z, log(QuatLen));
+ }
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> pow
+ (
+ detail::tquat<T> const & x,
+ T const & y
+ )
+ {
+ if(abs(x.w) > T(0.9999))
+ return x;
+ float Angle = acos(y);
+ float NewAngle = Angle * y;
+ float Div = sin(NewAngle) / sin(Angle);
+ return detail::tquat<T>(
+ cos(NewAngle),
+ x.x * Div,
+ x.y * Div,
+ x.z * Div);
+ }
+
+ //template <typename T>
+ //GLM_FUNC_QUALIFIER detail::tquat<T> sqrt
+ //(
+ // detail::tquat<T> const & q
+ //)
+ //{
+ // T q0 = T(1) - dot(q, q);
+ // return T(2) * (T(1) + q0) * q;
+ //}
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rotate
+ (
+ detail::tquat<T> const & q,
+ detail::tvec3<T> const & v
+ )
+ {
+ return q * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> rotate
+ (
+ detail::tquat<T> const & q,
+ detail::tvec4<T> const & v
+ )
+ {
+ return q * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T extractRealComponent
+ (
+ detail::tquat<T> const & q
+ )
+ {
+ T w = T(1.0) - q.x * q.x - q.y * q.y - q.z * q.z;
+ if(w < T(0))
+ return T(0);
+ else
+ return -sqrt(w);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> shortMix
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a
+ )
+ {
+ if(a <= typename detail::tquat<T>::value_type(0)) return x;
+ if(a >= typename detail::tquat<T>::value_type(1)) return y;
+
+ T fCos = dot(x, y);
+ detail::tquat<T> y2(y); //BUG!!! tquat<T> y2;
+ if(fCos < T(0))
+ {
+ y2 = -y;
+ fCos = -fCos;
+ }
+
+ //if(fCos > 1.0f) // problem
+ T k0, k1;
+ if(fCos > T(0.9999))
+ {
+ k0 = T(1) - a;
+ k1 = T(0) + a; //BUG!!! 1.0f + a;
+ }
+ else
+ {
+ T fSin = sqrt(T(1) - fCos * fCos);
+ T fAngle = atan(fSin, fCos);
+ T fOneOverSin = T(1) / fSin;
+ k0 = sin((T(1) - a) * fAngle) * fOneOverSin;
+ k1 = sin((T(0) + a) * fAngle) * fOneOverSin;
+ }
+
+ return detail::tquat<T>(
+ k0 * x.w + k1 * y2.w,
+ k0 * x.x + k1 * y2.x,
+ k0 * x.y + k1 * y2.y,
+ k0 * x.z + k1 * y2.z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tquat<T> fastMix
+ (
+ detail::tquat<T> const & x,
+ detail::tquat<T> const & y,
+ T const & a
+ )
+ {
+ return glm::normalize(x * (T(1) - a) + (y * a));
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/random.hpp b/include/gal/opengl/glm/gtx/random.hpp
new file mode 100644
index 0000000..a23d894
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/random.hpp
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_random extension is deprecated, include GLM_GTC_random instead")
+#endif
+
+// Promoted:
+#include "../gtc/random.hpp"
diff --git a/include/gal/opengl/glm/gtx/raw_data.hpp b/include/gal/opengl/glm/gtx/raw_data.hpp
new file mode 100644
index 0000000..4ec6cf0
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/raw_data.hpp
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_raw_data
+/// @file glm/gtx/raw_data.hpp
+/// @date 2008-11-19 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_raw_data GLM_GTX_raw_data
+/// @ingroup gtx
+///
+/// @brief Projection of a vector to other one
+///
+/// <glm/gtx/raw_data.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_raw_data
+#define GLM_GTX_raw_data GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/type_precision.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_raw_data extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_raw_data
+ /// @{
+
+ //! Type for byte numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef uint8 byte;
+
+ //! Type for word numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef uint16 word;
+
+ //! Type for dword numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef uint32 dword;
+
+ //! Type for qword numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef uint64 qword;
+
+ /// @}
+}// namespace glm
+
+#include "raw_data.inl"
+
+#endif//GLM_GTX_raw_data
diff --git a/include/gal/opengl/glm/gtx/raw_data.inl b/include/gal/opengl/glm/gtx/raw_data.inl
new file mode 100644
index 0000000..526e3cd
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/raw_data.inl
@@ -0,0 +1,11 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-11-19
+// Updated : 2008-11-19
+// Licence : This source is under MIT License
+// File : glm/gtx/raw_data.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Dependency:
+// - GLM core
+///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/gtx/reciprocal.hpp b/include/gal/opengl/glm/gtx/reciprocal.hpp
new file mode 100644
index 0000000..3519861
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/reciprocal.hpp
@@ -0,0 +1,26 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_reciprocal extension is deprecated, include GLM_GTC_reciprocal instead")
+#endif
diff --git a/include/gal/opengl/glm/gtx/rotate_vector.hpp b/include/gal/opengl/glm/gtx/rotate_vector.hpp
new file mode 100644
index 0000000..70c5e03
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/rotate_vector.hpp
@@ -0,0 +1,132 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_rotate_vector
+/// @file glm/gtx/rotate_vector.hpp
+/// @date 2006-11-02 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_transform (dependence)
+///
+/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector
+/// @ingroup gtx
+///
+/// @brief Function to directly rotate a vector
+///
+/// <glm/gtx/rotate_vector.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_rotate_vector
+#define GLM_GTX_rotate_vector GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/transform.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_rotate_vector extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_rotate_vector
+ /// @{
+
+ //! Rotate a two dimensional vector.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec2<T> rotate(
+ detail::tvec2<T> const & v,
+ T const & angle);
+
+ //! Rotate a three dimensional vector around an axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec3<T> rotate(
+ detail::tvec3<T> const & v,
+ T const & angle,
+ detail::tvec3<T> const & normal);
+
+ //! Rotate a four dimensional vector around an axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec4<T> rotate(
+ detail::tvec4<T> const & v,
+ T const & angle,
+ detail::tvec3<T> const & normal);
+
+ //! Rotate a three dimensional vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec3<T> rotateX(
+ detail::tvec3<T> const & v,
+ T const & angle);
+
+ //! Rotate a three dimensional vector around the Y axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec3<T> rotateY(
+ detail::tvec3<T> const & v,
+ T const & angle);
+
+ //! Rotate a three dimensional vector around the Z axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec3<T> rotateZ(
+ detail::tvec3<T> const & v,
+ T const & angle);
+
+ //! Rotate a four dimentionnals vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec4<T> rotateX(
+ detail::tvec4<T> const & v,
+ T const & angle);
+
+ //! Rotate a four dimensional vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec4<T> rotateY(
+ detail::tvec4<T> const & v,
+ T const & angle);
+
+ //! Rotate a four dimensional vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tvec4<T> rotateZ(
+ detail::tvec4<T> const & v,
+ T const & angle);
+
+ //! Build a rotation matrix from a normal and a up vector.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T>
+ detail::tmat4x4<T> orientation(
+ detail::tvec3<T> const & Normal,
+ detail::tvec3<T> const & Up);
+
+ /// @}
+}//namespace glm
+
+#include "rotate_vector.inl"
+
+#endif//GLM_GTX_rotate_vector
diff --git a/include/gal/opengl/glm/gtx/rotate_vector.inl b/include/gal/opengl/glm/gtx/rotate_vector.inl
new file mode 100644
index 0000000..1ec1717
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/rotate_vector.inl
@@ -0,0 +1,215 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-11-02
+// Updated : 2009-02-19
+// Licence : This source is under MIT License
+// File : glm/gtx/rotate_vector.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> rotate
+ (
+ detail::tvec2<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec2<T> Result;
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos = cos(radians(angle));
+ T const Sin = sin(radians(angle));
+#endif
+ Result.x = v.x * Cos - v.y * Sin;
+ Result.y = v.x * Sin + v.y * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rotate
+ (
+ detail::tvec3<T> const & v,
+ T const & angle,
+ detail::tvec3<T> const & normal
+ )
+ {
+ return detail::tmat3x3<T>(glm::rotate(angle, normal)) * v;
+ }
+ /*
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rotateGTX(
+ const detail::tvec3<T>& x,
+ T angle,
+ const detail::tvec3<T>& normal)
+ {
+ const T Cos = cos(radians(angle));
+ const T Sin = sin(radians(angle));
+ return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin;
+ }
+ */
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> rotate
+ (
+ detail::tvec4<T> const & v,
+ T const & angle,
+ detail::tvec3<T> const & normal
+ )
+ {
+ return rotate(angle, normal) * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rotateX
+ (
+ detail::tvec3<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec3<T> Result(v);
+
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos = cos(radians(angle));
+ T const Sin = sin(radians(angle));
+#endif
+
+ Result.y = v.y * Cos - v.z * Sin;
+ Result.z = v.y * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rotateY
+ (
+ detail::tvec3<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec3<T> Result = v;
+
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos(cos(radians(angle)));
+ T const Sin(sin(radians(angle)));
+#endif
+
+ Result.x = v.x * Cos + v.z * Sin;
+ Result.z = -v.x * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> rotateZ
+ (
+ detail::tvec3<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec3<T> Result = v;
+
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos(cos(radians(angle)));
+ T const Sin(sin(radians(angle)));
+#endif
+
+ Result.x = v.x * Cos - v.y * Sin;
+ Result.y = v.x * Sin + v.y * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> rotateX
+ (
+ detail::tvec4<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec4<T> Result = v;
+
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos(cos(radians(angle)));
+ T const Sin(sin(radians(angle)));
+#endif
+
+ Result.y = v.y * Cos - v.z * Sin;
+ Result.z = v.y * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> rotateY
+ (
+ detail::tvec4<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec4<T> Result = v;
+
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos(cos(radians(angle)));
+ T const Sin(sin(radians(angle)));
+#endif
+
+ Result.x = v.x * Cos + v.z * Sin;
+ Result.z = -v.x * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> rotateZ
+ (
+ detail::tvec4<T> const & v,
+ T const & angle
+ )
+ {
+ detail::tvec4<T> Result = v;
+
+#ifdef GLM_FORCE_RADIANS
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+#else
+ T const Cos(cos(radians(angle)));
+ T const Sin(sin(radians(angle)));
+#endif
+
+ Result.x = v.x * Cos - v.y * Sin;
+ Result.y = v.x * Sin + v.y * Cos;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> orientation
+ (
+ detail::tvec3<T> const & Normal,
+ detail::tvec3<T> const & Up
+ )
+ {
+ if(all(equal(Normal, Up)))
+ return detail::tmat4x4<T>(T(1));
+
+ detail::tvec3<T> RotationAxis = cross(Up, Normal);
+# ifdef GLM_FORCE_RADIANS
+ T Angle = acos(dot(Normal, Up));
+# else
+ T Angle = degrees(acos(dot(Normal, Up)));
+# endif
+ return rotate(Angle, RotationAxis);
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/simd_mat4.hpp b/include/gal/opengl/glm/gtx/simd_mat4.hpp
new file mode 100644
index 0000000..b435b11
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/simd_mat4.hpp
@@ -0,0 +1,206 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_simd_vec4
+/// @file glm/gtx/simd_vec4.hpp
+/// @date 2009-05-07 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_simd_mat4 GLM_GTX_simd_mat4
+/// @ingroup gtx
+///
+/// @brief SIMD implementation of mat4 type.
+///
+/// <glm/gtx/simd_mat4.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_simd_mat4
+#define GLM_GTX_simd_mat4 GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(GLM_ARCH != GLM_ARCH_PURE)
+
+#if(GLM_ARCH & GLM_ARCH_SSE2)
+# include "../core/intrinsic_matrix.hpp"
+# include "../gtx/simd_vec4.hpp"
+#else
+# error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"
+#endif
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_simd_mat4 extension included")
+#endif
+
+namespace glm{
+namespace detail
+{
+ /// 4x4 Matrix implemented using SIMD SEE intrinsics.
+ /// \ingroup gtx_simd_mat4
+ GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
+ {
+ enum ctor{null};
+
+ typedef float value_type;
+ typedef fvec4SIMD col_type;
+ typedef fvec4SIMD row_type;
+ typedef std::size_t size_type;
+ static size_type value_size();
+ static size_type col_size();
+ static size_type row_size();
+ static bool is_matrix();
+
+ fvec4SIMD Data[4];
+
+ //////////////////////////////////////
+ // Constructors
+
+ fmat4x4SIMD();
+ explicit fmat4x4SIMD(float const & s);
+ explicit fmat4x4SIMD(
+ float const & x0, float const & y0, float const & z0, float const & w0,
+ float const & x1, float const & y1, float const & z1, float const & w1,
+ float const & x2, float const & y2, float const & z2, float const & w2,
+ float const & x3, float const & y3, float const & z3, float const & w3);
+ explicit fmat4x4SIMD(
+ fvec4SIMD const & v0,
+ fvec4SIMD const & v1,
+ fvec4SIMD const & v2,
+ fvec4SIMD const & v3);
+ explicit fmat4x4SIMD(
+ tmat4x4<float> const & m);
+ explicit fmat4x4SIMD(
+ __m128 const in[4]);
+
+ // Conversions
+ //template <typename U>
+ //explicit tmat4x4(tmat4x4<U> const & m);
+
+ //explicit tmat4x4(tmat2x2<T> const & x);
+ //explicit tmat4x4(tmat3x3<T> const & x);
+ //explicit tmat4x4(tmat2x3<T> const & x);
+ //explicit tmat4x4(tmat3x2<T> const & x);
+ //explicit tmat4x4(tmat2x4<T> const & x);
+ //explicit tmat4x4(tmat4x2<T> const & x);
+ //explicit tmat4x4(tmat3x4<T> const & x);
+ //explicit tmat4x4(tmat4x3<T> const & x);
+
+ // Accesses
+ fvec4SIMD & operator[](size_type i);
+ fvec4SIMD const & operator[](size_type i) const;
+
+ // Unary updatable operators
+ fmat4x4SIMD & operator= (fmat4x4SIMD const & m);
+ fmat4x4SIMD & operator+= (float const & s);
+ fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);
+ fmat4x4SIMD & operator-= (float const & s);
+ fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);
+ fmat4x4SIMD & operator*= (float const & s);
+ fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);
+ fmat4x4SIMD & operator/= (float const & s);
+ fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);
+ fmat4x4SIMD & operator++ ();
+ fmat4x4SIMD & operator-- ();
+ };
+
+ // Binary operators
+ fmat4x4SIMD operator+ (fmat4x4SIMD const & m, float const & s);
+ fmat4x4SIMD operator+ (float const & s, fmat4x4SIMD const & m);
+ fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
+
+ fmat4x4SIMD operator- (fmat4x4SIMD const & m, float const & s);
+ fmat4x4SIMD operator- (float const & s, fmat4x4SIMD const & m);
+ fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
+
+ fmat4x4SIMD operator* (fmat4x4SIMD const & m, float const & s);
+ fmat4x4SIMD operator* (float const & s, fmat4x4SIMD const & m);
+
+ fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);
+ fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);
+
+ fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
+
+ fmat4x4SIMD operator/ (fmat4x4SIMD const & m, float const & s);
+ fmat4x4SIMD operator/ (float const & s, fmat4x4SIMD const & m);
+
+ fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);
+ fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);
+
+ fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
+
+ // Unary constant operators
+ fmat4x4SIMD const operator- (fmat4x4SIMD const & m);
+ fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, int);
+ fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, int);
+}//namespace detail
+
+ typedef detail::fmat4x4SIMD simdMat4;
+
+ /// @addtogroup gtx_simd_mat4
+ /// @{
+
+ //! Convert a simdMat4 to a mat4.
+ //! (From GLM_GTX_simd_mat4 extension)
+ detail::tmat4x4<float> mat4_cast(
+ detail::fmat4x4SIMD const & x);
+
+ //! Multiply matrix x by matrix y component-wise, i.e.,
+ //! result[i][j] is the scalar product of x[i][j] and y[i][j].
+ //! (From GLM_GTX_simd_mat4 extension).
+ detail::fmat4x4SIMD matrixCompMult(
+ detail::fmat4x4SIMD const & x,
+ detail::fmat4x4SIMD const & y);
+
+ //! Treats the first parameter c as a column vector
+ //! and the second parameter r as a row vector
+ //! and does a linear algebraic matrix multiply c * r.
+ //! (From GLM_GTX_simd_mat4 extension).
+ detail::fmat4x4SIMD outerProduct(
+ detail::fvec4SIMD const & c,
+ detail::fvec4SIMD const & r);
+
+ //! Returns the transposed matrix of x
+ //! (From GLM_GTX_simd_mat4 extension).
+ detail::fmat4x4SIMD transpose(
+ detail::fmat4x4SIMD const & x);
+
+ //! Return the determinant of a mat4 matrix.
+ //! (From GLM_GTX_simd_mat4 extension).
+ float determinant(
+ detail::fmat4x4SIMD const & m);
+
+ //! Return the inverse of a mat4 matrix.
+ //! (From GLM_GTX_simd_mat4 extension).
+ detail::fmat4x4SIMD inverse(
+ detail::fmat4x4SIMD const & m);
+
+ /// @}
+}// namespace glm
+
+#include "simd_mat4.inl"
+
+#endif//(GLM_ARCH != GLM_ARCH_PURE)
+
+#endif//GLM_GTX_simd_mat4
diff --git a/include/gal/opengl/glm/gtx/simd_mat4.inl b/include/gal/opengl/glm/gtx/simd_mat4.inl
new file mode 100644
index 0000000..d6ec8ca
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/simd_mat4.inl
@@ -0,0 +1,590 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2009-05-19
+// Updated : 2009-05-19
+// Licence : This source is under MIT License
+// File : glm/gtx/simd_mat4.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail{
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::size_type fmat4x4SIMD::value_size()
+{
+ return sizeof(value_type);
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::size_type fmat4x4SIMD::col_size()
+{
+ return 4;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::size_type fmat4x4SIMD::row_size()
+{
+ return 4;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD()
+{
+#ifndef GLM_SIMD_ENABLE_DEFAULT_INIT
+ this->Data[0] = fvec4SIMD(1.0f, 0, 0, 0);
+ this->Data[1] = fvec4SIMD(0, 1.0f, 0, 0);
+ this->Data[2] = fvec4SIMD(0, 0, 1.0f, 0);
+ this->Data[3] = fvec4SIMD(0, 0, 0, 1.0f);
+#endif
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD(float const & s)
+{
+ this->Data[0] = fvec4SIMD(s, 0, 0, 0);
+ this->Data[1] = fvec4SIMD(0, s, 0, 0);
+ this->Data[2] = fvec4SIMD(0, 0, s, 0);
+ this->Data[3] = fvec4SIMD(0, 0, 0, s);
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD
+(
+ float const & x0, float const & y0, float const & z0, float const & w0,
+ float const & x1, float const & y1, float const & z1, float const & w1,
+ float const & x2, float const & y2, float const & z2, float const & w2,
+ float const & x3, float const & y3, float const & z3, float const & w3
+)
+{
+ this->Data[0] = fvec4SIMD(x0, y0, z0, w0);
+ this->Data[1] = fvec4SIMD(x1, y1, z1, w1);
+ this->Data[2] = fvec4SIMD(x2, y2, z2, w2);
+ this->Data[3] = fvec4SIMD(x3, y3, z3, w3);
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD
+(
+ fvec4SIMD const & v0,
+ fvec4SIMD const & v1,
+ fvec4SIMD const & v2,
+ fvec4SIMD const & v3
+)
+{
+ this->Data[0] = v0;
+ this->Data[1] = v1;
+ this->Data[2] = v2;
+ this->Data[3] = v3;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD
+(
+ tmat4x4<float> const & m
+)
+{
+ this->Data[0] = fvec4SIMD(m[0]);
+ this->Data[1] = fvec4SIMD(m[1]);
+ this->Data[2] = fvec4SIMD(m[2]);
+ this->Data[3] = fvec4SIMD(m[3]);
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD
+(
+ __m128 const in[4]
+)
+{
+ this->Data[0] = in[0];
+ this->Data[1] = in[1];
+ this->Data[2] = in[2];
+ this->Data[3] = in[3];
+}
+
+//////////////////////////////////////
+// Accesses
+
+GLM_FUNC_QUALIFIER fvec4SIMD & fmat4x4SIMD::operator[]
+(
+ fmat4x4SIMD::size_type i
+)
+{
+ assert(
+ //i >= fmat4x4SIMD::size_type(0) &&
+ i < fmat4x4SIMD::col_size());
+
+ return this->Data[i];
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD const & fmat4x4SIMD::operator[]
+(
+ fmat4x4SIMD::size_type i
+) const
+{
+ assert(
+ //i >= fmat4x4SIMD::size_type(0) &&
+ i < fmat4x4SIMD::col_size());
+
+ return this->Data[i];
+}
+
+//////////////////////////////////////////////////////////////
+// mat4 operators
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD& fmat4x4SIMD::operator=
+(
+ fmat4x4SIMD const & m
+)
+{
+ this->Data[0] = m[0];
+ this->Data[1] = m[1];
+ this->Data[2] = m[2];
+ this->Data[3] = m[3];
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator+=
+(
+ fmat4x4SIMD const & m
+)
+{
+ this->Data[0].Data = _mm_add_ps(this->Data[0].Data, m[0].Data);
+ this->Data[1].Data = _mm_add_ps(this->Data[1].Data, m[1].Data);
+ this->Data[2].Data = _mm_add_ps(this->Data[2].Data, m[2].Data);
+ this->Data[3].Data = _mm_add_ps(this->Data[3].Data, m[3].Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator-=
+(
+ fmat4x4SIMD const & m
+)
+{
+ this->Data[0].Data = _mm_sub_ps(this->Data[0].Data, m[0].Data);
+ this->Data[1].Data = _mm_sub_ps(this->Data[1].Data, m[1].Data);
+ this->Data[2].Data = _mm_sub_ps(this->Data[2].Data, m[2].Data);
+ this->Data[3].Data = _mm_sub_ps(this->Data[3].Data, m[3].Data);
+
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator*=
+(
+ fmat4x4SIMD const & m
+)
+{
+ sse_mul_ps(&this->Data[0].Data, &m.Data[0].Data, &this->Data[0].Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator/=
+(
+ fmat4x4SIMD const & m
+)
+{
+ __m128 Inv[4];
+ sse_inverse_ps(&m.Data[0].Data, Inv);
+ sse_mul_ps(&this->Data[0].Data, Inv, &this->Data[0].Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator+=
+(
+ float const & s
+)
+{
+ __m128 Operand = _mm_set_ps1(s);
+ this->Data[0].Data = _mm_add_ps(this->Data[0].Data, Operand);
+ this->Data[1].Data = _mm_add_ps(this->Data[1].Data, Operand);
+ this->Data[2].Data = _mm_add_ps(this->Data[2].Data, Operand);
+ this->Data[3].Data = _mm_add_ps(this->Data[3].Data, Operand);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator-=
+(
+ float const & s
+)
+{
+ __m128 Operand = _mm_set_ps1(s);
+ this->Data[0].Data = _mm_sub_ps(this->Data[0].Data, Operand);
+ this->Data[1].Data = _mm_sub_ps(this->Data[1].Data, Operand);
+ this->Data[2].Data = _mm_sub_ps(this->Data[2].Data, Operand);
+ this->Data[3].Data = _mm_sub_ps(this->Data[3].Data, Operand);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator*=
+(
+ float const & s
+)
+{
+ __m128 Operand = _mm_set_ps1(s);
+ this->Data[0].Data = _mm_mul_ps(this->Data[0].Data, Operand);
+ this->Data[1].Data = _mm_mul_ps(this->Data[1].Data, Operand);
+ this->Data[2].Data = _mm_mul_ps(this->Data[2].Data, Operand);
+ this->Data[3].Data = _mm_mul_ps(this->Data[3].Data, Operand);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator/=
+(
+ float const & s
+)
+{
+ __m128 Operand = _mm_div_ps(one, _mm_set_ps1(s));
+ this->Data[0].Data = _mm_mul_ps(this->Data[0].Data, Operand);
+ this->Data[1].Data = _mm_mul_ps(this->Data[1].Data, Operand);
+ this->Data[2].Data = _mm_mul_ps(this->Data[2].Data, Operand);
+ this->Data[3].Data = _mm_mul_ps(this->Data[3].Data, Operand);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator++ ()
+{
+ this->Data[0].Data = _mm_add_ps(this->Data[0].Data, one);
+ this->Data[1].Data = _mm_add_ps(this->Data[1].Data, one);
+ this->Data[2].Data = _mm_add_ps(this->Data[2].Data, one);
+ this->Data[3].Data = _mm_add_ps(this->Data[3].Data, one);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD & fmat4x4SIMD::operator-- ()
+{
+ this->Data[0].Data = _mm_sub_ps(this->Data[0].Data, one);
+ this->Data[1].Data = _mm_sub_ps(this->Data[1].Data, one);
+ this->Data[2].Data = _mm_sub_ps(this->Data[2].Data, one);
+ this->Data[3].Data = _mm_sub_ps(this->Data[3].Data, one);
+ return *this;
+}
+
+
+//////////////////////////////////////////////////////////////
+// Binary operators
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator+
+(
+ const fmat4x4SIMD &m,
+ float const & s
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator+
+(
+ float const & s,
+ const fmat4x4SIMD &m
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator+
+(
+ const fmat4x4SIMD &m1,
+ const fmat4x4SIMD &m2
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]
+ );
+}
+
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator-
+(
+ const fmat4x4SIMD &m,
+ float const & s
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] - s,
+ m[1] - s,
+ m[2] - s,
+ m[3] - s
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator-
+(
+ float const & s,
+ const fmat4x4SIMD &m
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ s - m[0],
+ s - m[1],
+ s - m[2],
+ s - m[3]
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator-
+(
+ const fmat4x4SIMD &m1,
+ const fmat4x4SIMD &m2
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]
+ );
+}
+
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator*
+(
+ const fmat4x4SIMD &m,
+ float const & s
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator*
+(
+ float const & s,
+ const fmat4x4SIMD &m
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s
+ );
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator*
+(
+ const fmat4x4SIMD &m,
+ fvec4SIMD const & v
+)
+{
+ return sse_mul_ps(&m.Data[0].Data, v.Data);
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator*
+(
+ fvec4SIMD const & v,
+ const fmat4x4SIMD &m
+)
+{
+ return sse_mul_ps(v.Data, &m.Data[0].Data);
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator*
+(
+ const fmat4x4SIMD &m1,
+ const fmat4x4SIMD &m2
+)
+{
+ fmat4x4SIMD result;
+ sse_mul_ps(&m1.Data[0].Data, &m2.Data[0].Data, &result.Data[0].Data);
+
+ return result;
+}
+
+
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator/
+(
+ const fmat4x4SIMD &m,
+ float const & s
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] / s,
+ m[1] / s,
+ m[2] / s,
+ m[3] / s
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator/
+(
+ float const & s,
+ const fmat4x4SIMD &m
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ s / m[0],
+ s / m[1],
+ s / m[2],
+ s / m[3]
+ );
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator/
+(
+ const fmat4x4SIMD &m,
+ fvec4SIMD const & v
+)
+{
+ return inverse(m) * v;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator/
+(
+ fvec4SIMD const & v,
+ const fmat4x4SIMD &m
+)
+{
+ return v * inverse(m);
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD operator/
+(
+ const fmat4x4SIMD &m1,
+ const fmat4x4SIMD &m2
+)
+{
+ __m128 result[4];
+ __m128 inv[4];
+
+ sse_inverse_ps(&m2.Data[0].Data, inv);
+ sse_mul_ps(&m1.Data[0].Data, inv, result);
+
+ return fmat4x4SIMD(result);
+}
+
+
+//////////////////////////////////////////////////////////////
+// Unary constant operators
+GLM_FUNC_QUALIFIER fmat4x4SIMD const operator-
+(
+ fmat4x4SIMD const & m
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD const operator--
+(
+ fmat4x4SIMD const & m,
+ int
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] - 1.0f,
+ m[1] - 1.0f,
+ m[2] - 1.0f,
+ m[3] - 1.0f
+ );
+}
+
+GLM_FUNC_QUALIFIER fmat4x4SIMD const operator++
+(
+ fmat4x4SIMD const & m,
+ int
+)
+{
+ return detail::fmat4x4SIMD
+ (
+ m[0] + 1.0f,
+ m[1] + 1.0f,
+ m[2] + 1.0f,
+ m[3] + 1.0f
+ );
+}
+
+}//namespace detail
+
+GLM_FUNC_QUALIFIER detail::tmat4x4<float> mat4_cast
+(
+ detail::fmat4x4SIMD const & x
+)
+{
+ GLM_ALIGN(16) detail::tmat4x4<float> Result;
+ _mm_store_ps(&Result[0][0], x.Data[0].Data);
+ _mm_store_ps(&Result[1][0], x.Data[1].Data);
+ _mm_store_ps(&Result[2][0], x.Data[2].Data);
+ _mm_store_ps(&Result[3][0], x.Data[3].Data);
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER detail::fmat4x4SIMD matrixCompMult
+(
+ detail::fmat4x4SIMD const & x,
+ detail::fmat4x4SIMD const & y
+)
+{
+ detail::fmat4x4SIMD result;
+ result[0] = x[0] * y[0];
+ result[1] = x[1] * y[1];
+ result[2] = x[2] * y[2];
+ result[3] = x[3] * y[3];
+ return result;
+}
+
+GLM_FUNC_QUALIFIER detail::fmat4x4SIMD outerProduct
+(
+ detail::fvec4SIMD const & c,
+ detail::fvec4SIMD const & r
+)
+{
+ __m128 Shu0 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Shu1 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Shu2 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Shu3 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(3, 3, 3, 3));
+
+ detail::fmat4x4SIMD result(detail::fmat4x4SIMD::null);
+ result[0].Data = _mm_mul_ps(c.Data, Shu0);
+ result[1].Data = _mm_mul_ps(c.Data, Shu1);
+ result[2].Data = _mm_mul_ps(c.Data, Shu2);
+ result[3].Data = _mm_mul_ps(c.Data, Shu3);
+ return result;
+}
+
+GLM_FUNC_QUALIFIER detail::fmat4x4SIMD transpose(detail::fmat4x4SIMD const & m)
+{
+ detail::fmat4x4SIMD result;
+ detail::sse_transpose_ps(&m[0].Data, &result[0].Data);
+ return result;
+}
+
+GLM_FUNC_QUALIFIER float determinant(detail::fmat4x4SIMD const & m)
+{
+ float Result;
+ _mm_store_ss(&Result, detail::sse_det_ps(&m[0].Data));
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER detail::fmat4x4SIMD inverse(detail::fmat4x4SIMD const & m)
+{
+ detail::fmat4x4SIMD result;
+ detail::sse_inverse_ps(&m[0].Data, &result[0].Data);
+ return result;
+}
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/simd_vec4.hpp b/include/gal/opengl/glm/gtx/simd_vec4.hpp
new file mode 100644
index 0000000..6f60060
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/simd_vec4.hpp
@@ -0,0 +1,517 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_simd_vec4
+/// @file glm/gtx/simd_vec4.hpp
+/// @date 2009-05-07 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_simd_vec4 GLM_GTX_simd_vec4
+/// @ingroup gtx
+///
+/// @brief SIMD implementation of vec4 type.
+///
+/// <glm/gtx/simd_vec4.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_simd_vec4
+#define GLM_GTX_simd_vec4 GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(GLM_ARCH != GLM_ARCH_PURE)
+
+#if(GLM_ARCH & GLM_ARCH_SSE2)
+# include "../core/intrinsic_common.hpp"
+# include "../core/intrinsic_geometric.hpp"
+#else
+# error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
+#endif
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_simd_vec4 extension included")
+#endif
+
+
+// Warning silencer for nameless struct/union.
+#if (GLM_COMPILER & GLM_COMPILER_VC)
+# pragma warning(push)
+# pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
+#endif
+
+
+namespace glm{
+namespace detail
+{
+ /// 4-dimensional vector implemented using SIMD SEE intrinsics.
+ /// \ingroup gtx_simd_vec4
+ GLM_ALIGNED_STRUCT(16) fvec4SIMD
+ {
+ enum ctor{null};
+ typedef __m128 value_type;
+ typedef std::size_t size_type;
+ static size_type value_size();
+
+ typedef fvec4SIMD type;
+ typedef tvec4<bool> bool_type;
+
+#ifdef GLM_SIMD_ENABLE_XYZW_UNION
+ union
+ {
+ __m128 Data;
+ struct {float x, y, z, w;};
+ };
+#else
+ __m128 Data;
+#endif
+
+ //////////////////////////////////////
+ // Implicit basic constructors
+
+ fvec4SIMD();
+ fvec4SIMD(__m128 const & Data);
+ fvec4SIMD(fvec4SIMD const & v);
+
+ //////////////////////////////////////
+ // Explicit basic constructors
+
+ explicit fvec4SIMD(
+ ctor);
+ explicit fvec4SIMD(
+ float const & s);
+ explicit fvec4SIMD(
+ float const & x,
+ float const & y,
+ float const & z,
+ float const & w);
+ explicit fvec4SIMD(
+ tvec4<float> const & v);
+
+ ////////////////////////////////////////
+ //// Convertion vector constructors
+
+ fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
+ fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
+ fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
+ fvec4SIMD(vec3 const & v, float const & s);
+ fvec4SIMD(float const & s, vec3 const & v);
+ fvec4SIMD(vec2 const & v1, vec2 const & v2);
+ //fvec4SIMD(ivec4SIMD const & v);
+
+ //////////////////////////////////////
+ // Unary arithmetic operators
+
+ fvec4SIMD& operator= (fvec4SIMD const & v);
+ fvec4SIMD& operator+=(fvec4SIMD const & v);
+ fvec4SIMD& operator-=(fvec4SIMD const & v);
+ fvec4SIMD& operator*=(fvec4SIMD const & v);
+ fvec4SIMD& operator/=(fvec4SIMD const & v);
+
+ fvec4SIMD& operator+=(float const & s);
+ fvec4SIMD& operator-=(float const & s);
+ fvec4SIMD& operator*=(float const & s);
+ fvec4SIMD& operator/=(float const & s);
+
+ fvec4SIMD& operator++();
+ fvec4SIMD& operator--();
+
+ //////////////////////////////////////
+ // Swizzle operators
+
+ template <comp X, comp Y, comp Z, comp W>
+ fvec4SIMD& swizzle();
+ template <comp X, comp Y, comp Z, comp W>
+ fvec4SIMD swizzle() const;
+ template <comp X, comp Y, comp Z>
+ fvec4SIMD swizzle() const;
+ template <comp X, comp Y>
+ fvec4SIMD swizzle() const;
+ template <comp X>
+ fvec4SIMD swizzle() const;
+ };
+}//namespace detail
+
+ typedef glm::detail::fvec4SIMD simdVec4;
+
+ /// @addtogroup gtx_simd_vec4
+ /// @{
+
+ //! Convert a simdVec4 to a vec4.
+ //! (From GLM_GTX_simd_vec4 extension)
+ detail::tvec4<float> vec4_cast(
+ detail::fvec4SIMD const & x);
+
+ //! Returns x if x >= 0; otherwise, it returns -x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
+
+ //! Returns 1.0 if x > 0, 0.0 if x = 0, or -1.0 if x < 0.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
+
+ //! Returns a value equal to the nearest integer that is less then or equal to x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
+
+ //! Returns a value equal to the nearest integer to x
+ //! whose absolute value is not larger than the absolute value of x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
+
+ //! Returns a value equal to the nearest integer to x.
+ //! The fraction 0.5 will round in a direction chosen by the
+ //! implementation, presumably the direction that is fastest.
+ //! This includes the possibility that round(x) returns the
+ //! same value as roundEven(x) for all values of x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD round(detail::fvec4SIMD const & x);
+
+ //! Returns a value equal to the nearest integer to x.
+ //! A fractional part of 0.5 will round toward the nearest even
+ //! integer. (Both 3.5 and 4.5 for x will return 4.0.)
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
+
+ //! Returns a value equal to the nearest integer
+ //! that is greater than or equal to x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
+
+ //! Return x - floor(x).
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
+
+ //! Modulus. Returns x - y * floor(x / y)
+ //! for each component in x using the floating point value y.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD mod(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y);
+
+ //! Modulus. Returns x - y * floor(x / y)
+ //! for each component in x using the floating point value y.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD mod(
+ detail::fvec4SIMD const & x,
+ float const & y);
+
+ //! Returns the fractional part of x and sets i to the integer
+ //! part (as a whole number floating point value). Both the
+ //! return value and the output parameter will have the same
+ //! sign as x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //detail::fvec4SIMD modf(
+ // detail::fvec4SIMD const & x,
+ // detail::fvec4SIMD & i);
+
+ //! Returns y if y < x; otherwise, it returns x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD min(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y);
+
+ detail::fvec4SIMD min(
+ detail::fvec4SIMD const & x,
+ float const & y);
+
+ //! Returns y if x < y; otherwise, it returns x.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD max(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y);
+
+ detail::fvec4SIMD max(
+ detail::fvec4SIMD const & x,
+ float const & y);
+
+ //! Returns min(max(x, minVal), maxVal) for each component in x
+ //! using the floating-point values minVal and maxVal.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD clamp(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & minVal,
+ detail::fvec4SIMD const & maxVal);
+
+ detail::fvec4SIMD clamp(
+ detail::fvec4SIMD const & x,
+ float const & minVal,
+ float const & maxVal);
+
+ //! \return If genTypeU is a floating scalar or vector:
+ //! Returns x * (1.0 - a) + y * a, i.e., the linear blend of
+ //! x and y using the floating-point value a.
+ //! The value for a is not restricted to the range [0, 1].
+ //!
+ //! \return If genTypeU is a boolean scalar or vector:
+ //! Selects which vector each returned component comes
+ //! from. For a component of a that is false, the
+ //! corresponding component of x is returned. For a
+ //! component of a that is true, the corresponding
+ //! component of y is returned. Components of x and y that
+ //! are not selected are allowed to be invalid floating point
+ //! values and will have no effect on the results. Thus, this
+ //! provides different functionality than
+ //! genType mix(genType x, genType y, genType(a))
+ //! where a is a Boolean vector.
+ //!
+ //! From GLSL 1.30.08 specification, section 8.3
+ //!
+ //! \param[in] x Floating point scalar or vector.
+ //! \param[in] y Floating point scalar or vector.
+ //! \param[in] a Floating point or boolean scalar or vector.
+ //!
+ // \todo Test when 'a' is a boolean.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD mix(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y,
+ detail::fvec4SIMD const & a);
+
+ //! Returns 0.0 if x < edge, otherwise it returns 1.0.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD step(
+ detail::fvec4SIMD const & edge,
+ detail::fvec4SIMD const & x);
+
+ detail::fvec4SIMD step(
+ float const & edge,
+ detail::fvec4SIMD const & x);
+
+ //! Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
+ //! performs smooth Hermite interpolation between 0 and 1
+ //! when edge0 < x < edge1. This is useful in cases where
+ //! you would want a threshold function with a smooth
+ //! transition. This is equivalent to:
+ //! genType t;
+ //! t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);
+ //! return t * t * (3 - 2 * t);
+ //! Results are undefined if edge0 >= edge1.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD smoothstep(
+ detail::fvec4SIMD const & edge0,
+ detail::fvec4SIMD const & edge1,
+ detail::fvec4SIMD const & x);
+
+ detail::fvec4SIMD smoothstep(
+ float const & edge0,
+ float const & edge1,
+ detail::fvec4SIMD const & x);
+
+ //! Returns true if x holds a NaN (not a number)
+ //! representation in the underlying implementation's set of
+ //! floating point representations. Returns false otherwise,
+ //! including for implementations with no NaN
+ //! representations.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //bvec4 isnan(detail::fvec4SIMD const & x);
+
+ //! Returns true if x holds a positive infinity or negative
+ //! infinity representation in the underlying implementation's
+ //! set of floating point representations. Returns false
+ //! otherwise, including for implementations with no infinity
+ //! representations.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //bvec4 isinf(detail::fvec4SIMD const & x);
+
+ //! Returns a signed or unsigned integer value representing
+ //! the encoding of a floating-point value. The floatingpoint
+ //! value's bit-level representation is preserved.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
+
+ //! Returns a floating-point value corresponding to a signed
+ //! or unsigned integer encoding of a floating-point value.
+ //! If an inf or NaN is passed in, it will not signal, and the
+ //! resulting floating point value is unspecified. Otherwise,
+ //! the bit-level representation is preserved.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
+
+ //! Computes and returns a * b + c.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ detail::fvec4SIMD fma(
+ detail::fvec4SIMD const & a,
+ detail::fvec4SIMD const & b,
+ detail::fvec4SIMD const & c);
+
+ //! Splits x into a floating-point significand in the range
+ //! [0.5, 1.0) and an integral exponent of two, such that:
+ //! x = significand * exp(2, exponent)
+ //! The significand is returned by the function and the
+ //! exponent is returned in the parameter exp. For a
+ //! floating-point value of zero, the significant and exponent
+ //! are both zero. For a floating-point value that is an
+ //! infinity or is not a number, the results are undefined.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
+
+ //! Builds a floating-point number from x and the
+ //! corresponding integral exponent of two in exp, returning:
+ //! significand * exp(2, exponent)
+ //! If this product is too large to be represented in the
+ //! floating-point type, the result is undefined.
+ //! (From GLM_GTX_simd_vec4 extension, common function)
+ //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
+
+ //! Returns the length of x, i.e., sqrt(x * x).
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ float length(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the length of x, i.e., sqrt(x * x).
+ //! Less accurate but much faster than simdLength.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ float fastLength(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the length of x, i.e., sqrt(x * x).
+ //! Slightly more accurate but much slower than simdLength.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ float niceLength(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the length of x, i.e., sqrt(x * x).
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD length4(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the length of x, i.e., sqrt(x * x).
+ //! Less accurate but much faster than simdLength4.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD fastLength4(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the length of x, i.e., sqrt(x * x).
+ //! Slightly more accurate but much slower than simdLength4.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD niceLength4(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ float distance(
+ detail::fvec4SIMD const & p0,
+ detail::fvec4SIMD const & p1);
+
+ //! Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD distance4(
+ detail::fvec4SIMD const & p0,
+ detail::fvec4SIMD const & p1);
+
+ //! Returns the dot product of x and y, i.e., result = x * y.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ float simdDot(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y);
+
+ //! Returns the dot product of x and y, i.e., result = x * y.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD dot4(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y);
+
+ //! Returns the cross product of x and y.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD cross(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y);
+
+ //! Returns a vector in the same direction as x but with length of 1.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD normalize(
+ detail::fvec4SIMD const & x);
+
+ //! Returns a vector in the same direction as x but with length of 1.
+ //! Less accurate but much faster than simdNormalize.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD fastNormalize(
+ detail::fvec4SIMD const & x);
+
+ //! If dot(Nref, I) < 0.0, return N, otherwise, return -N.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD simdFaceforward(
+ detail::fvec4SIMD const & N,
+ detail::fvec4SIMD const & I,
+ detail::fvec4SIMD const & Nref);
+
+ //! For the incident vector I and surface orientation N,
+ //! returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD reflect(
+ detail::fvec4SIMD const & I,
+ detail::fvec4SIMD const & N);
+
+ //! For the incident vector I and surface normal N,
+ //! and the ratio of indices of refraction eta,
+ //! return the refraction vector.
+ //! (From GLM_GTX_simd_vec4 extension, geometry functions)
+ detail::fvec4SIMD refract(
+ detail::fvec4SIMD const & I,
+ detail::fvec4SIMD const & N,
+ float const & eta);
+
+ //! Returns the positive square root of x.
+ //! (From GLM_GTX_simd_vec4 extension, exponential function)
+ detail::fvec4SIMD sqrt(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the positive square root of x with the nicest quality but very slow.
+ //! Slightly more accurate but much slower than simdSqrt.
+ //! (From GLM_GTX_simd_vec4 extension, exponential function)
+ detail::fvec4SIMD niceSqrt(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the positive square root of x
+ //! Less accurate but much faster than sqrt.
+ //! (From GLM_GTX_simd_vec4 extension, exponential function)
+ detail::fvec4SIMD fastSqrt(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the reciprocal of the positive square root of x.
+ //! (From GLM_GTX_simd_vec4 extension, exponential function)
+ detail::fvec4SIMD inversesqrt(
+ detail::fvec4SIMD const & x);
+
+ //! Returns the reciprocal of the positive square root of x.
+ //! Faster than inversesqrt but less accurate.
+ //! (From GLM_GTX_simd_vec4 extension, exponential function)
+ detail::fvec4SIMD fastInversesqrt(
+ detail::fvec4SIMD const & x);
+
+ /// @}
+}//namespace glm
+
+#include "simd_vec4.inl"
+
+
+#if (GLM_COMPILER & GLM_COMPILER_VC)
+# pragma warning(pop)
+#endif
+
+
+#endif//(GLM_ARCH != GLM_ARCH_PURE)
+
+#endif//GLM_GTX_simd_vec4
diff --git a/include/gal/opengl/glm/gtx/simd_vec4.inl b/include/gal/opengl/glm/gtx/simd_vec4.inl
new file mode 100644
index 0000000..0b22115
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/simd_vec4.inl
@@ -0,0 +1,727 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2009-05-07
+// Updated : 2009-05-07
+// Licence : This source is under MIT License
+// File : glm/gtx/simd_vec4.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+namespace detail{
+
+template <int Value>
+struct mask
+{
+ enum{value = Value};
+};
+
+//////////////////////////////////////
+// Implicit basic constructors
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD()
+#ifdef GLM_SIMD_ENABLE_DEFAULT_INIT
+ : Data(_mm_set_ps(0.0f, 0.0f, 0.0f, 0.0f))
+#endif
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(__m128 const & Data) :
+ Data(Data)
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(fvec4SIMD const & v) :
+ Data(v.Data)
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(tvec4<float> const & v) :
+ Data(_mm_set_ps(v.w, v.z, v.y, v.x))
+{}
+
+//////////////////////////////////////
+// Explicit basic constructors
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(float const & s) :
+ Data(_mm_set1_ps(s))
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(float const & x, float const & y, float const & z, float const & w) :
+// Data(_mm_setr_ps(x, y, z, w))
+ Data(_mm_set_ps(w, z, y, x))
+{}
+/*
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(float const v[4]) :
+ Data(_mm_load_ps(v))
+{}
+*/
+//////////////////////////////////////
+// Swizzle constructors
+
+//fvec4SIMD(ref4<float> const & r);
+
+//////////////////////////////////////
+// Convertion vector constructors
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(vec2 const & v, float const & s1, float const & s2) :
+ Data(_mm_set_ps(s2, s1, v.y, v.x))
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(float const & s1, vec2 const & v, float const & s2) :
+ Data(_mm_set_ps(s2, v.y, v.x, s1))
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(float const & s1, float const & s2, vec2 const & v) :
+ Data(_mm_set_ps(v.y, v.x, s2, s1))
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(vec3 const & v, float const & s) :
+ Data(_mm_set_ps(s, v.z, v.y, v.x))
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(float const & s, vec3 const & v) :
+ Data(_mm_set_ps(v.z, v.y, v.x, s))
+{}
+
+GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(vec2 const & v1, vec2 const & v2) :
+ Data(_mm_set_ps(v2.y, v2.x, v1.y, v1.x))
+{}
+
+//GLM_FUNC_QUALIFIER fvec4SIMD::fvec4SIMD(ivec4SIMD const & v) :
+// Data(_mm_cvtepi32_ps(v.Data))
+//{}
+
+//////////////////////////////////////
+// Unary arithmetic operators
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator=(fvec4SIMD const & v)
+{
+ this->Data = v.Data;
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator+=(float const & s)
+{
+ this->Data = _mm_add_ps(Data, _mm_set_ps1(s));
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator+=(fvec4SIMD const & v)
+{
+ this->Data = _mm_add_ps(this->Data , v.Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator-=(float const & s)
+{
+ this->Data = _mm_sub_ps(Data, _mm_set_ps1(s));
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator-=(fvec4SIMD const & v)
+{
+ this->Data = _mm_sub_ps(this->Data , v.Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator*=(float const & s)
+{
+ this->Data = _mm_mul_ps(this->Data, _mm_set_ps1(s));
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator*=(fvec4SIMD const & v)
+{
+ this->Data = _mm_mul_ps(this->Data , v.Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator/=(float const & s)
+{
+ this->Data = _mm_div_ps(Data, _mm_set1_ps(s));
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator/=(fvec4SIMD const & v)
+{
+ this->Data = _mm_div_ps(this->Data , v.Data);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator++()
+{
+ this->Data = _mm_add_ps(this->Data , glm::detail::one);
+ return *this;
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator--()
+{
+ this->Data = _mm_sub_ps(this->Data, glm::detail::one);
+ return *this;
+}
+
+//////////////////////////////////////
+// Swizzle operators
+
+template <comp X, comp Y, comp Z, comp W>
+GLM_FUNC_QUALIFIER fvec4SIMD fvec4SIMD::swizzle() const
+{
+ __m128 Data = _mm_shuffle_ps(
+ this->Data, this->Data,
+ mask<(W << 6) | (Z << 4) | (Y << 2) | (X << 0)>::value);
+ return fvec4SIMD(Data);
+}
+
+template <comp X, comp Y, comp Z, comp W>
+GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::swizzle()
+{
+ this->Data = _mm_shuffle_ps(
+ this->Data, this->Data,
+ mask<(W << 6) | (Z << 4) | (Y << 2) | (X << 0)>::value);
+ return *this;
+}
+
+// operator+
+GLM_FUNC_QUALIFIER fvec4SIMD operator+ (fvec4SIMD const & v, float s)
+{
+ return fvec4SIMD(_mm_add_ps(v.Data, _mm_set1_ps(s)));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator+ (float s, fvec4SIMD const & v)
+{
+ return fvec4SIMD(_mm_add_ps(_mm_set1_ps(s), v.Data));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator+ (fvec4SIMD const & v1, fvec4SIMD const & v2)
+{
+ return fvec4SIMD(_mm_add_ps(v1.Data, v2.Data));
+}
+
+//operator-
+GLM_FUNC_QUALIFIER fvec4SIMD operator- (fvec4SIMD const & v, float s)
+{
+ return fvec4SIMD(_mm_sub_ps(v.Data, _mm_set1_ps(s)));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator- (float s, fvec4SIMD const & v)
+{
+ return fvec4SIMD(_mm_sub_ps(_mm_set1_ps(s), v.Data));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator- (fvec4SIMD const & v1, fvec4SIMD const & v2)
+{
+ return fvec4SIMD(_mm_sub_ps(v1.Data, v2.Data));
+}
+
+//operator*
+GLM_FUNC_QUALIFIER fvec4SIMD operator* (fvec4SIMD const & v, float s)
+{
+ __m128 par0 = v.Data;
+ __m128 par1 = _mm_set1_ps(s);
+ return fvec4SIMD(_mm_mul_ps(par0, par1));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator* (float s, fvec4SIMD const & v)
+{
+ __m128 par0 = _mm_set1_ps(s);
+ __m128 par1 = v.Data;
+ return fvec4SIMD(_mm_mul_ps(par0, par1));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator* (fvec4SIMD const & v1, fvec4SIMD const & v2)
+{
+ return fvec4SIMD(_mm_mul_ps(v1.Data, v2.Data));
+}
+
+//operator/
+GLM_FUNC_QUALIFIER fvec4SIMD operator/ (fvec4SIMD const & v, float s)
+{
+ __m128 par0 = v.Data;
+ __m128 par1 = _mm_set1_ps(s);
+ return fvec4SIMD(_mm_div_ps(par0, par1));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator/ (float s, fvec4SIMD const & v)
+{
+ __m128 par0 = _mm_set1_ps(s);
+ __m128 par1 = v.Data;
+ return fvec4SIMD(_mm_div_ps(par0, par1));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator/ (fvec4SIMD const & v1, fvec4SIMD const & v2)
+{
+ return fvec4SIMD(_mm_div_ps(v1.Data, v2.Data));
+}
+
+// Unary constant operators
+GLM_FUNC_QUALIFIER fvec4SIMD operator- (fvec4SIMD const & v)
+{
+ return fvec4SIMD(_mm_sub_ps(_mm_setzero_ps(), v.Data));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator++ (fvec4SIMD const & v, int)
+{
+ return fvec4SIMD(_mm_add_ps(v.Data, glm::detail::one));
+}
+
+GLM_FUNC_QUALIFIER fvec4SIMD operator-- (fvec4SIMD const & v, int)
+{
+ return fvec4SIMD(_mm_sub_ps(v.Data, glm::detail::one));
+}
+
+}//namespace detail
+
+GLM_FUNC_QUALIFIER detail::tvec4<float> vec4_cast
+(
+ detail::fvec4SIMD const & x
+)
+{
+ GLM_ALIGN(16) detail::tvec4<float> Result;
+ _mm_store_ps(&Result[0], x.Data);
+ return Result;
+}
+
+// Other possible implementation
+//float abs(float a)
+//{
+// return max(-a, a);
+//}
+GLM_FUNC_QUALIFIER detail::fvec4SIMD abs
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_abs_ps(x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD sign
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_sgn_ps(x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD floor
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_flr_ps(x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD trunc
+(
+ detail::fvec4SIMD const & x
+)
+{
+ //return x < 0 ? -floor(-x) : floor(x);
+
+ __m128 Flr0 = detail::sse_flr_ps(_mm_sub_ps(_mm_setzero_ps(), x.Data));
+ __m128 Sub0 = _mm_sub_ps(Flr0, x.Data);
+ __m128 Flr1 = detail::sse_flr_ps(x.Data);
+
+ __m128 Cmp0 = _mm_cmplt_ps(x.Data, glm::detail::zero);
+ __m128 Cmp1 = _mm_cmpnlt_ps(x.Data, glm::detail::zero);
+
+ __m128 And0 = _mm_and_ps(Sub0, Cmp0);
+ __m128 And1 = _mm_and_ps(Flr1, Cmp1);
+
+ return _mm_or_ps(And0, And1);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD round
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_rnd_ps(x.Data);
+}
+
+//GLM_FUNC_QUALIFIER detail::fvec4SIMD roundEven
+//(
+// detail::fvec4SIMD const & x
+//)
+//{
+
+//}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD ceil
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_ceil_ps(x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD fract
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_frc_ps(x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD mod
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y
+)
+{
+ return detail::sse_mod_ps(x.Data, y.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD mod
+(
+ detail::fvec4SIMD const & x,
+ float const & y
+)
+{
+ return detail::sse_mod_ps(x.Data, _mm_set1_ps(y));
+}
+
+//GLM_FUNC_QUALIFIER detail::fvec4SIMD modf
+//(
+// detail::fvec4SIMD const & x,
+// detail::fvec4SIMD & i
+//)
+//{
+
+//}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD min
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y
+)
+{
+ return _mm_min_ps(x.Data, y.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD min
+(
+ detail::fvec4SIMD const & x,
+ float const & y
+)
+{
+ return _mm_min_ps(x.Data, _mm_set1_ps(y));
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD max
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y
+)
+{
+ return _mm_max_ps(x.Data, y.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD max
+(
+ detail::fvec4SIMD const & x,
+ float const & y
+)
+{
+ return _mm_max_ps(x.Data, _mm_set1_ps(y));
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD clamp
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & minVal,
+ detail::fvec4SIMD const & maxVal
+)
+{
+ return detail::sse_clp_ps(x.Data, minVal.Data, maxVal.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD clamp
+(
+ detail::fvec4SIMD const & x,
+ float const & minVal,
+ float const & maxVal
+)
+{
+ return detail::sse_clp_ps(x.Data, _mm_set1_ps(minVal), _mm_set1_ps(maxVal));
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD mix
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y,
+ detail::fvec4SIMD const & a
+)
+{
+ __m128 Sub0 = _mm_sub_ps(y.Data, x.Data);
+ __m128 Mul0 = _mm_mul_ps(a.Data, Sub0);
+ return _mm_add_ps(x.Data, Mul0);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD step
+(
+ detail::fvec4SIMD const & edge,
+ detail::fvec4SIMD const & x
+)
+{
+ __m128 cmp0 = _mm_cmpngt_ps(x.Data, edge.Data);
+ return _mm_max_ps(_mm_min_ps(cmp0, _mm_setzero_ps()), detail::one);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD step
+(
+ float const & edge,
+ detail::fvec4SIMD const & x
+)
+{
+ __m128 cmp0 = _mm_cmpngt_ps(x.Data, _mm_set1_ps(edge));
+ return _mm_max_ps(_mm_min_ps(cmp0, _mm_setzero_ps()), detail::one);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD smoothstep
+(
+ detail::fvec4SIMD const & edge0,
+ detail::fvec4SIMD const & edge1,
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_ssp_ps(edge0.Data, edge1.Data, x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD smoothstep
+(
+ float const & edge0,
+ float const & edge1,
+ detail::fvec4SIMD const & x
+)
+{
+ return detail::sse_ssp_ps(_mm_set1_ps(edge0), _mm_set1_ps(edge1), x.Data);
+}
+
+//GLM_FUNC_QUALIFIER bvec4 isnan(detail::fvec4SIMD const & x)
+//{
+
+//}
+
+//GLM_FUNC_QUALIFIER bvec4 isinf(detail::fvec4SIMD const & x)
+//{
+
+//}
+
+//GLM_FUNC_QUALIFIER detail::ivec4SIMD floatBitsToInt
+//(
+// detail::fvec4SIMD const & value
+//)
+//{
+
+//}
+
+//GLM_FUNC_QUALIFIER detail::fvec4SIMD intBitsToFloat
+//(
+// detail::ivec4SIMD const & value
+//)
+//{
+
+//}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD fma
+(
+ detail::fvec4SIMD const & a,
+ detail::fvec4SIMD const & b,
+ detail::fvec4SIMD const & c
+)
+{
+ return _mm_add_ps(_mm_mul_ps(a.Data, b.Data), c.Data);
+}
+
+GLM_FUNC_QUALIFIER float length
+(
+ detail::fvec4SIMD const & x
+)
+{
+ detail::fvec4SIMD dot0 = detail::sse_dot_ss(x.Data, x.Data);
+ detail::fvec4SIMD sqt0 = sqrt(dot0);
+ float Result = 0;
+ _mm_store_ss(&Result, sqt0.Data);
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER float fastLength
+(
+ detail::fvec4SIMD const & x
+)
+{
+ detail::fvec4SIMD dot0 = detail::sse_dot_ss(x.Data, x.Data);
+ detail::fvec4SIMD sqt0 = fastSqrt(dot0);
+ float Result = 0;
+ _mm_store_ss(&Result, sqt0.Data);
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER float niceLength
+(
+ detail::fvec4SIMD const & x
+)
+{
+ detail::fvec4SIMD dot0 = detail::sse_dot_ss(x.Data, x.Data);
+ detail::fvec4SIMD sqt0 = niceSqrt(dot0);
+ float Result = 0;
+ _mm_store_ss(&Result, sqt0.Data);
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD length4
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return sqrt(dot4(x, x));
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD fastLength4
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return fastSqrt(dot4(x, x));
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD niceLength4
+(
+ detail::fvec4SIMD const & x
+)
+{
+ return niceSqrt(dot4(x, x));
+}
+
+GLM_FUNC_QUALIFIER float distance
+(
+ detail::fvec4SIMD const & p0,
+ detail::fvec4SIMD const & p1
+)
+{
+ float Result = 0;
+ _mm_store_ss(&Result, detail::sse_dst_ps(p0.Data, p1.Data));
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD distance4
+(
+ detail::fvec4SIMD const & p0,
+ detail::fvec4SIMD const & p1
+)
+{
+ return detail::sse_dst_ps(p0.Data, p1.Data);
+}
+
+GLM_FUNC_QUALIFIER float dot
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y
+)
+{
+ float Result = 0;
+ _mm_store_ss(&Result, detail::sse_dot_ss(x.Data, y.Data));
+ return Result;
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD dot4
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y
+)
+{
+ return detail::sse_dot_ps(x.Data, y.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD cross
+(
+ detail::fvec4SIMD const & x,
+ detail::fvec4SIMD const & y
+)
+{
+ return detail::sse_xpd_ps(x.Data, y.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD normalize
+(
+ detail::fvec4SIMD const & x
+)
+{
+ __m128 dot0 = detail::sse_dot_ps(x.Data, x.Data);
+ __m128 isr0 = inversesqrt(detail::fvec4SIMD(dot0)).Data;
+ __m128 mul0 = _mm_mul_ps(x.Data, isr0);
+ return mul0;
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD fastNormalize
+(
+ detail::fvec4SIMD const & x
+)
+{
+ __m128 dot0 = detail::sse_dot_ps(x.Data, x.Data);
+ __m128 isr0 = fastInversesqrt(dot0).Data;
+ __m128 mul0 = _mm_mul_ps(x.Data, isr0);
+ return mul0;
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD faceforward
+(
+ detail::fvec4SIMD const & N,
+ detail::fvec4SIMD const & I,
+ detail::fvec4SIMD const & Nref
+)
+{
+ return detail::sse_ffd_ps(N.Data, I.Data, Nref.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD reflect
+(
+ detail::fvec4SIMD const & I,
+ detail::fvec4SIMD const & N
+)
+{
+ return detail::sse_rfe_ps(I.Data, N.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD refract
+(
+ detail::fvec4SIMD const & I,
+ detail::fvec4SIMD const & N,
+ float const & eta
+)
+{
+ return detail::sse_rfa_ps(I.Data, N.Data, _mm_set1_ps(eta));
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD sqrt(detail::fvec4SIMD const & x)
+{
+ return _mm_mul_ps(inversesqrt(x).Data, x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD niceSqrt(detail::fvec4SIMD const & x)
+{
+ return _mm_sqrt_ps(x.Data);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD fastSqrt(detail::fvec4SIMD const & x)
+{
+ return _mm_mul_ps(fastInversesqrt(x.Data).Data, x.Data);
+}
+
+// SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration
+// By Elan Ruskin, http://assemblyrequired.crashworks.org/
+GLM_FUNC_QUALIFIER detail::fvec4SIMD inversesqrt(detail::fvec4SIMD const & x)
+{
+ GLM_ALIGN(4) static const __m128 three = {3, 3, 3, 3}; // aligned consts for fast load
+ GLM_ALIGN(4) static const __m128 half = {0.5,0.5,0.5,0.5};
+
+ __m128 recip = _mm_rsqrt_ps(x.Data); // "estimate" opcode
+ __m128 halfrecip = _mm_mul_ps(half, recip);
+ __m128 threeminus_xrr = _mm_sub_ps(three, _mm_mul_ps(x.Data, _mm_mul_ps(recip, recip)));
+ return _mm_mul_ps(halfrecip, threeminus_xrr);
+}
+
+GLM_FUNC_QUALIFIER detail::fvec4SIMD fastInversesqrt(detail::fvec4SIMD const & x)
+{
+ return _mm_rsqrt_ps(x.Data);
+}
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/spline.hpp b/include/gal/opengl/glm/gtx/spline.hpp
new file mode 100644
index 0000000..e9035ce
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/spline.hpp
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_spline
+/// @file glm/gtx/spline.hpp
+/// @date 2007-01-25 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_spline GLM_GTX_spline
+/// @ingroup gtx
+///
+/// @brief Spline functions
+///
+/// <glm/gtx/spline.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_spline
+#define GLM_GTX_spline GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/optimum_pow.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_spline extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_spline
+ /// @{
+
+ //! Return a point from a catmull rom curve.
+ //! From GLM_GTX_spline extension.
+ template <typename genType>
+ genType catmullRom(
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s);
+
+ //! Return a point from a hermite curve.
+ //! From GLM_GTX_spline extension.
+ template <typename genType>
+ genType hermite(
+ genType const & v1,
+ genType const & t1,
+ genType const & v2,
+ genType const & t2,
+ typename genType::value_type const & s);
+
+ //! Return a point from a cubic curve.
+ //! From GLM_GTX_spline extension.
+ template <typename genType>
+ genType cubic(
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s);
+
+ /// @}
+}//namespace glm
+
+#include "spline.inl"
+
+#endif//GLM_GTX_spline
+
diff --git a/include/gal/opengl/glm/gtx/spline.inl b/include/gal/opengl/glm/gtx/spline.inl
new file mode 100644
index 0000000..6a6509e
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/spline.inl
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-01-25
+// Updated : 2009-02-19
+// Licence : This source is under MIT License
+// File : glm/gtx/spline.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm{
+
+template <typename genType>
+GLM_FUNC_QUALIFIER genType catmullRom
+(
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s
+)
+{
+ typename genType::value_type s1 = s;
+ typename genType::value_type s2 = pow2(s);
+ typename genType::value_type s3 = pow3(s);
+
+ typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s;
+ typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2);
+ typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s;
+ typename genType::value_type f4 = s3 - s2;
+
+ return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2);
+
+}
+
+template <typename genType>
+GLM_FUNC_QUALIFIER genType hermite
+(
+ genType const & v1,
+ genType const & t1,
+ genType const & v2,
+ genType const & t2,
+ typename genType::value_type const & s
+)
+{
+ typename genType::value_type s1 = s;
+ typename genType::value_type s2 = pow2(s);
+ typename genType::value_type s3 = pow3(s);
+
+ typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1);
+ typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2;
+ typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s;
+ typename genType::value_type f4 = s3 - s2;
+
+ return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2;
+}
+
+template <typename genType>
+GLM_FUNC_QUALIFIER genType cubic
+(
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s
+)
+{
+ return ((v1 * s + v2) * s + v3) * s + v4;
+}
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/std_based_type.hpp b/include/gal/opengl/glm/gtx/std_based_type.hpp
new file mode 100644
index 0000000..c5c04dc
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/std_based_type.hpp
@@ -0,0 +1,83 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_std_based_type
+/// @file glm/gtx/std_based_type.hpp
+/// @date 2008-06-08 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_std_based_type GLM_GTX_std_based_type
+/// @ingroup gtx
+///
+/// @brief Adds vector types based on STL value types.
+/// <glm/gtx/std_based_type.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_std_based_type
+#define GLM_GTX_std_based_type GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include <cstdlib>
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_std_based_type extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_std_based_type
+ /// @{
+
+ /// Vector type based of two std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef detail::tvec2<std::size_t> size2;
+
+ /// Vector type based of three std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef detail::tvec3<std::size_t> size3;
+
+ /// Vector type based of four std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef detail::tvec4<std::size_t> size4;
+
+ /// Vector type based of two std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef detail::tvec2<std::size_t> size2_t;
+
+ /// Vector type based of three std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef detail::tvec3<std::size_t> size3_t;
+
+ /// Vector type based of four std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef detail::tvec4<std::size_t> size4_t;
+
+ /// @}
+}//namespace glm
+
+#include "std_based_type.inl"
+
+#endif//GLM_GTX_std_based_type
diff --git a/include/gal/opengl/glm/gtx/std_based_type.inl b/include/gal/opengl/glm/gtx/std_based_type.inl
new file mode 100644
index 0000000..e349c4a
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/std_based_type.inl
@@ -0,0 +1,13 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-06-08
+// Updated : 2008-06-08
+// Licence : This source is under MIT License
+// File : glm/gtx/std_based_type.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+
+}
diff --git a/include/gal/opengl/glm/gtx/string_cast.hpp b/include/gal/opengl/glm/gtx/string_cast.hpp
new file mode 100644
index 0000000..b306093
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/string_cast.hpp
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_string_cast
+/// @file glm/gtx/string_cast.hpp
+/// @date 2008-04-26 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtx_integer (dependence)
+/// @see gtx_quaternion (dependence)
+///
+/// @defgroup gtx_string_cast GLM_GTX_string_cast
+/// @ingroup gtx
+///
+/// @brief Setup strings for GLM type values
+///
+/// <glm/gtx/string_cast.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_string_cast
+#define GLM_GTX_string_cast GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/half_float.hpp"
+#include "../gtx/integer.hpp"
+#include "../gtx/quaternion.hpp"
+#include <string>
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_string_cast extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_string_cast
+ /// @{
+
+ /// Create a string from a GLM type value.
+ /// From GLM_GTX_string_cast extension.
+ template <typename genType>
+ std::string to_string(genType const & x);
+
+ /// @}
+}//namespace glm
+
+#include "string_cast.inl"
+
+#endif//GLM_GTX_string_cast
diff --git a/include/gal/opengl/glm/gtx/string_cast.inl b/include/gal/opengl/glm/gtx/string_cast.inl
new file mode 100644
index 0000000..d0e8f43
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/string_cast.inl
@@ -0,0 +1,588 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2006 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-04-27
+// Updated : 2008-05-24
+// Licence : This source is under MIT License
+// File : glm/gtx/string_cast.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <cstdarg>
+#include <cstdio>
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER std::string format(const char* msg, ...)
+ {
+ std::size_t const STRING_BUFFER(4096);
+ char text[STRING_BUFFER];
+ va_list list;
+
+ if(msg == 0)
+ return std::string();
+
+ va_start(list, msg);
+
+#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
+ vsprintf_s(text, STRING_BUFFER, msg, list);
+#else//
+ vsprintf(text, msg, list);
+#endif//
+ va_end(list);
+
+ return std::string(text);
+ }
+
+ static const char* True = "true";
+ static const char* False = "false";
+}//namespace detail
+
+ ////////////////////////////////
+ // Scalars
+
+ GLM_FUNC_QUALIFIER std::string to_string(detail::half const & x)
+ {
+ return detail::format("half(%2.4f)", float(x));
+ }
+
+ GLM_FUNC_QUALIFIER std::string to_string(float x)
+ {
+ return detail::format("float(%f)", x);
+ }
+
+ GLM_FUNC_QUALIFIER std::string to_string(double x)
+ {
+ return detail::format("double(%f)", x);
+ }
+
+ GLM_FUNC_QUALIFIER std::string to_string(int x)
+ {
+ return detail::format("int(%d)", x);
+ }
+
+ GLM_FUNC_QUALIFIER std::string to_string(unsigned int x)
+ {
+ return detail::format("uint(%d)", x);
+ }
+
+ ////////////////////////////////
+ // Bool vectors
+
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec2<bool> const & v
+ )
+ {
+ return detail::format("bvec2(%s, %s)",
+ v.x ? detail::True : detail::False,
+ v.y ? detail::True : detail::False);
+ }
+
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec3<bool> const & v
+ )
+ {
+ return detail::format("bvec3(%s, %s, %s)",
+ v.x ? detail::True : detail::False,
+ v.y ? detail::True : detail::False,
+ v.z ? detail::True : detail::False);
+ }
+
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec4<bool> const & v
+ )
+ {
+ return detail::format("bvec4(%s, %s, %s, %s)",
+ v.x ? detail::True : detail::False,
+ v.y ? detail::True : detail::False,
+ v.z ? detail::True : detail::False,
+ v.w ? detail::True : detail::False);
+ }
+
+ ////////////////////////////////
+ // Half vectors
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec2<detail::half> const & v
+ )
+ {
+ return detail::format("hvec2(%2.4f, %2.4f)", v.x.toFloat(), v.y.toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec3<detail::half> const & v
+ )
+ {
+ return detail::format("hvec3(%2.4f, %2.4f, %2.4f)", v.x.toFloat(), v.y.toFloat(), v.z.toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec4<detail::half> const & v
+ )
+ {
+ return detail::format("hvec4(%2.4f, %2.4f, %2.4f, %2.4f)", v.x.toFloat(), v.y.toFloat(), v.z.toFloat(), v.w.toFloat());
+ }
+
+ ////////////////////////////////
+ // Float vectors
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec2<float> const & v
+ )
+ {
+ return detail::format("fvec2(%f, %f)", v.x, v.y);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec3<float> const & v
+ )
+ {
+ return detail::format("fvec3(%f, %f, %f)", v.x, v.y, v.z);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec4<float> const & v
+ )
+ {
+ return detail::format("fvec4(%f, %f, %f, %f)", v.x, v.y, v.z, v.w);
+ }
+
+ ////////////////////////////////
+ // Double vectors
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec2<double> const & v
+ )
+ {
+ return detail::format("dvec2(%f, %f)", v.x, v.y);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec3<double> const & v
+ )
+ {
+ return detail::format("dvec3(%f, %f, %f)", v.x, v.y, v.z);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec4<double> const & v
+ )
+ {
+ return detail::format("dvec4(%f, %f, %f, %f)", v.x, v.y, v.z, v.w);
+ }
+
+ ////////////////////////////////
+ // Int vectors
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec2<int> const & v
+ )
+ {
+ return detail::format("ivec2(%d, %d)", v.x, v.y);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec3<int> const & v
+ )
+ {
+ return detail::format("ivec3(%d, %d, %d)", v.x, v.y, v.z);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec4<int> const & v
+ )
+ {
+ return detail::format("ivec4(%d, %d, %d, %d)", v.x, v.y, v.z, v.w);
+ }
+
+ ////////////////////////////////
+ // Unsigned int vectors
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec2<unsigned int> const & v
+ )
+ {
+ return detail::format("uvec2(%d, %d)", v.x, v.y);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec3<unsigned int> const & v
+ )
+ {
+ return detail::format("uvec3(%d, %d, %d)", v.x, v.y, v.z);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tvec4<unsigned int> const & v
+ )
+ {
+ return detail::format("uvec4(%d, %d, %d, %d)", v.x, v.y, v.z, v.w);
+ }
+
+ ////////////////////////////////
+ // Half matrices
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x2<detail::half> const & m
+ )
+ {
+ return detail::format("hmat2x2((%f, %f), (%f, %f))",
+ m[0][0].toFloat(), m[0][1].toFloat(),
+ m[1][0].toFloat(), m[1][1].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x3<detail::half> const & x
+ )
+ {
+ return detail::format("hmat2x3((%f, %f, %f), (%f, %f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(), x[0][2].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(), x[1][2].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x4<detail::half> const & x
+ )
+ {
+ return detail::format("hmat2x4((%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(), x[0][2].toFloat(), x[0][3].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(), x[1][2].toFloat(), x[1][3].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x2<detail::half> const & x
+ )
+ {
+ return detail::format("hmat3x2((%f, %f), (%f, %f), (%f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(),
+ x[2][0].toFloat(), x[2][1].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x3<detail::half> const & x
+ )
+ {
+ return detail::format("hmat3x3((%f, %f, %f), (%f, %f, %f), (%f, %f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(), x[0][2].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(), x[1][2].toFloat(),
+ x[2][0].toFloat(), x[2][1].toFloat(), x[2][2].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x4<detail::half> const & x
+ )
+ {
+ return detail::format("hmat3x4((%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(), x[0][2].toFloat(), x[0][3].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(), x[1][2].toFloat(), x[1][3].toFloat(),
+ x[2][0].toFloat(), x[2][1].toFloat(), x[2][2].toFloat(), x[2][3].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x2<detail::half> const & x
+ )
+ {
+ return detail::format("hmat4x2((%f, %f), (%f, %f), (%f, %f), (%f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(),
+ x[2][0].toFloat(), x[2][1].toFloat(),
+ x[3][0].toFloat(), x[3][1].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x3<detail::half> const & x
+ )
+ {
+ return detail::format("hmat4x3((%f, %f, %f), (%f, %f, %f), (%f, %f, %f), (%f, %f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(), x[0][2].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(), x[1][2].toFloat(),
+ x[2][0].toFloat(), x[2][1].toFloat(), x[2][2].toFloat(),
+ x[3][0].toFloat(), x[3][1].toFloat(), x[3][2].toFloat());
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x4<detail::half> const & x
+ )
+ {
+ return detail::format("hmat4x4((%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0].toFloat(), x[0][1].toFloat(), x[0][2].toFloat(), x[0][3].toFloat(),
+ x[1][0].toFloat(), x[1][1].toFloat(), x[1][2].toFloat(), x[1][3].toFloat(),
+ x[2][0].toFloat(), x[2][1].toFloat(), x[2][2].toFloat(), x[2][3].toFloat(),
+ x[3][0].toFloat(), x[3][1].toFloat(), x[3][2].toFloat(), x[3][3].toFloat());
+ }
+
+ ////////////////////////////////
+ // Float matrices
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x2<float> const & x
+ )
+ {
+ return detail::format("mat2x2((%f, %f), (%f, %f))",
+ x[0][0], x[0][1],
+ x[1][0], x[1][1]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x3<float> const & x
+ )
+ {
+ return detail::format("mat2x3((%f, %f, %f), (%f, %f, %f))",
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x4<float> const & x
+ )
+ {
+ return detail::format("mat2x4((%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x2<float> const & x
+ )
+ {
+ return detail::format("mat3x2((%f, %f), (%f, %f), (%f, %f))",
+ x[0][0], x[0][1],
+ x[1][0], x[1][1],
+ x[2][0], x[2][1]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x3<float> const & x
+ )
+ {
+ return detail::format("mat3x3((%f, %f, %f), (%f, %f, %f), (%f, %f, %f))",
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2],
+ x[2][0], x[2][1], x[2][2]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x4<float> const & x
+ )
+ {
+ return detail::format("mat3x4((%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3],
+ x[2][0], x[2][1], x[2][2], x[2][3]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x2<float> const & x
+ )
+ {
+ return detail::format("mat4x2((%f, %f), (%f, %f), (%f, %f), (%f, %f))",
+ x[0][0], x[0][1],
+ x[1][0], x[1][1],
+ x[2][0], x[2][1],
+ x[3][0], x[3][1]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x3<float> const & x
+ )
+ {
+ return detail::format("mat4x3((%f, %f, %f), (%f, %f, %f), (%f, %f, %f), (%f, %f, %f))",
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2],
+ x[2][0], x[2][1], x[2][2],
+ x[3][0], x[3][1], x[3][2]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x4<float> const & x
+ )
+ {
+ return detail::format("mat4x4((%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3],
+ x[2][0], x[2][1], x[2][2], x[2][3],
+ x[3][0], x[3][1], x[3][2], x[3][3]);
+ }
+
+ ////////////////////////////////
+ // Double matrices
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x2<double> const & x
+ )
+ {
+ return detail::format("dmat2x2((%f, %f), (%f, %f))",
+ x[0][0], x[0][1],
+ x[1][0], x[1][1]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x3<double> const & x
+ )
+ {
+ return detail::format("dmat2x3((%f, %f, %f), (%f, %f, %f))",
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat2x4<double> const & x
+ )
+ {
+ return detail::format("dmat2x4((%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x2<double> const & x
+ )
+ {
+ return detail::format("dmat3x2((%f, %f), (%f, %f), (%f, %f))",
+ x[0][0], x[0][1],
+ x[1][0], x[1][1],
+ x[2][0], x[2][1]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x3<double> const & x
+ )
+ {
+ return detail::format("dmat3x3((%f, %f, %f), (%f, %f, %f), (%f, %f, %f))",
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2],
+ x[2][0], x[2][1], x[2][2]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat3x4<double> const & x
+ )
+ {
+ return detail::format("dmat3x4((%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3],
+ x[2][0], x[2][1], x[2][2], x[2][3]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x2<double> const & x
+ )
+ {
+ return detail::format("dmat4x2((%f, %f), (%f, %f), (%f, %f), (%f, %f))",
+ x[0][0], x[0][1],
+ x[1][0], x[1][1],
+ x[2][0], x[2][1],
+ x[3][0], x[3][1]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x3<double> const & x
+ )
+ {
+ return detail::format("dmat4x3((%f, %f, %f), (%f, %f, %f), (%f, %f, %f), (%f, %f, %f))",
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2],
+ x[2][0], x[2][1], x[2][2],
+ x[3][0], x[3][1], x[3][2]);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER std::string to_string
+ (
+ detail::tmat4x4<double> const & x
+ )
+ {
+ return detail::format("dmat4x4((%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f), (%f, %f, %f, %f))",
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3],
+ x[2][0], x[2][1], x[2][2], x[2][3],
+ x[3][0], x[3][1], x[3][2], x[3][3]);
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/transform.hpp b/include/gal/opengl/glm/gtx/transform.hpp
new file mode 100644
index 0000000..8929e46
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/transform.hpp
@@ -0,0 +1,131 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_transform
+/// @file glm/gtx/transform.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtc_matrix_transform (dependence)
+/// @see gtx_transform
+/// @see gtx_transform2
+///
+/// @defgroup gtx_transform GLM_GTX_transform
+/// @ingroup gtx
+///
+/// @brief Add transformation matrices
+///
+/// <glm/gtx/transform.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_transform
+#define GLM_GTX_transform GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/matrix_transform.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_transform extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_transform
+ /// @{
+
+ //! Builds a translation 4 * 4 matrix created from 3 scalars.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> translate(
+ T x, T y, T z);
+
+ //! Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> translate(
+ detail::tmat4x4<T> const & m,
+ T x, T y, T z);
+
+ //! Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::translate GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> translate(
+ detail::tvec3<T> const & v);
+
+ //! Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> rotate(
+ T angle,
+ T x, T y, T z);
+
+ //! Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> rotate(
+ T angle,
+ detail::tvec3<T> const & v);
+
+ //! Transforms a matrix with a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::rotate GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> rotate(
+ detail::tmat4x4<T> const & m,
+ T angle,
+ T x, T y, T z);
+
+ //! Builds a scale 4 * 4 matrix created from 3 scalars.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> scale(
+ T x, T y, T z);
+
+ //! Transforms a matrix with a scale 4 * 4 matrix created from 3 scalars.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> scale(
+ detail::tmat4x4<T> const & m,
+ T x, T y, T z);
+
+ //! Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.
+ //! - From \link gtx_transform GLM_GTX_transform \endlink extension
+ // - See also: \link glm::scale GLM_GTC_matrix_transform \endlink
+ template <typename T>
+ detail::tmat4x4<T> scale(
+ detail::tvec3<T> const & v);
+
+ /// @}
+}// namespace glm
+
+#include "transform.inl"
+
+#endif//GLM_GTX_transform
diff --git a/include/gal/opengl/glm/gtx/transform.inl b/include/gal/opengl/glm/gtx/transform.inl
new file mode 100644
index 0000000..8f8c921
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/transform.inl
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-21
+// Updated : 2009-04-29
+// Licence : This source is under MIT License
+// File : glm/gtx/transform.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate(
+ T x, T y, T z)
+ {
+ return translate(
+ detail::tmat4x4<T>(1.0f),
+ detail::tvec3<T>(x, y , z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate(
+ detail::tmat4x4<T> const & m,
+ T x, T y, T z)
+ {
+ return translate(
+ m, detail::tvec3<T>(x, y , z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate(
+ detail::tvec3<T> const & v)
+ {
+ return translate(
+ detail::tmat4x4<T>(1.0f), v);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate(
+ T angle,
+ T x, T y, T z)
+ {
+ return rotate(
+ detail::tmat4x4<T>(1), angle, detail::tvec3<T>(x, y, z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate(
+ T angle,
+ detail::tvec3<T> const & v)
+ {
+ return rotate(
+ detail::tmat4x4<T>(1), angle, v);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> rotate(
+ detail::tmat4x4<T> const & m,
+ T angle,
+ T x, T y, T z)
+ {
+ return rotate(
+ m, angle, detail::tvec3<T>(x, y, z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale(T x, T y, T z)
+ {
+ return scale(
+ detail::tmat4x4<T>(1), detail::tvec3<T>(x, y, z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale(
+ detail::tmat4x4<T> const & m,
+ T x, T y, T z)
+ {
+ return scale(
+ m, detail::tvec3<T>(x, y, z));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scale(
+ detail::tvec3<T> const & v)
+ {
+ return scale(
+ detail::tmat4x4<T>(1.0f), v);
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/transform2.hpp b/include/gal/opengl/glm/gtx/transform2.hpp
new file mode 100644
index 0000000..4c6bd15
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/transform2.hpp
@@ -0,0 +1,135 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_transform2
+/// @file glm/gtx/transform2.hpp
+/// @date 2005-12-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_transform (dependence)
+///
+/// @defgroup gtx_transform2 GLM_GTX_transform2
+/// @ingroup gtx
+///
+/// @brief Add extra transformation matrices
+///
+/// <glm/gtx/transform2.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_transform2
+#define GLM_GTX_transform2 GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/transform.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_transform2 extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_transform2
+ /// @{
+
+ //! Transforms a matrix with a shearing on X axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat3x3<T> shearX2D(
+ detail::tmat3x3<T> const & m,
+ T y);
+
+ //! Transforms a matrix with a shearing on Y axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat3x3<T> shearY2D(
+ detail::tmat3x3<T> const & m,
+ T x);
+
+ //! Transforms a matrix with a shearing on X axis
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat4x4<T> shearX3D(
+ const detail::tmat4x4<T> & m,
+ T y,
+ T z);
+
+ //! Transforms a matrix with a shearing on Y axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat4x4<T> shearY3D(
+ const detail::tmat4x4<T> & m,
+ T x,
+ T z);
+
+ //! Transforms a matrix with a shearing on Z axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat4x4<T> shearZ3D(
+ const detail::tmat4x4<T> & m,
+ T x,
+ T y);
+
+ //template <typename T> GLM_FUNC_QUALIFIER detail::tmat4x4<T> shear(const detail::tmat4x4<T> & m, shearPlane, planePoint, angle)
+ // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0
+ // - dot(PointOnPlane, normal) * OnPlaneVector 1
+
+ // Reflect functions seem to don't work
+ //template <typename T> detail::tmat3x3<T> reflect2D(const detail::tmat3x3<T> & m, const detail::tvec3<T>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
+ //template <typename T> detail::tmat4x4<T> reflect3D(const detail::tmat4x4<T> & m, const detail::tvec3<T>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
+
+ //! Build planar projection matrix along normal axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat3x3<T> proj2D(
+ const detail::tmat3x3<T> & m,
+ const detail::tvec3<T>& normal);
+
+ //! Build planar projection matrix along normal axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T>
+ detail::tmat4x4<T> proj3D(
+ const detail::tmat4x4<T> & m,
+ const detail::tvec3<T>& normal);
+
+ //! Build a scale bias matrix.
+ //! From GLM_GTX_transform2 extension.
+ template <typename valType>
+ detail::tmat4x4<valType> scaleBias(
+ valType scale,
+ valType bias);
+
+ //! Build a scale bias matrix.
+ //! From GLM_GTX_transform2 extension.
+ template <typename valType>
+ detail::tmat4x4<valType> scaleBias(
+ detail::tmat4x4<valType> const & m,
+ valType scale,
+ valType bias);
+
+ /// @}
+}// namespace glm
+
+#include "transform2.inl"
+
+#endif//GLM_GTX_transform2
diff --git a/include/gal/opengl/glm/gtx/transform2.inl b/include/gal/opengl/glm/gtx/transform2.inl
new file mode 100644
index 0000000..06b65f5
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/transform2.inl
@@ -0,0 +1,154 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-02-28
+// Updated : 2005-04-23
+// Licence : This source is under MIT License
+// File : glm/gtx/transform2.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> shearX2D(
+ const detail::tmat3x3<T>& m,
+ T s)
+ {
+ detail::tmat3x3<T> r(1);
+ r[0][1] = s;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> shearY2D(
+ const detail::tmat3x3<T>& m,
+ T s)
+ {
+ detail::tmat3x3<T> r(1);
+ r[1][0] = s;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> shearX3D(
+ const detail::tmat4x4<T>& m,
+ T s,
+ T t)
+ {
+ detail::tmat4x4<T> r(1);
+ r[1][0] = s;
+ r[2][0] = t;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> shearY3D(
+ const detail::tmat4x4<T>& m,
+ T s,
+ T t)
+ {
+ detail::tmat4x4<T> r(1);
+ r[0][1] = s;
+ r[2][1] = t;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> shearZ3D(
+ const detail::tmat4x4<T>& m,
+ T s,
+ T t)
+ {
+ detail::tmat4x4<T> r(1);
+ r[0][2] = s;
+ r[1][2] = t;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> reflect2D(
+ const detail::tmat3x3<T>& m,
+ const detail::tvec3<T>& normal)
+ {
+ detail::tmat3x3<T> r(1);
+ r[0][0] = 1 - 2 * normal.x * normal.x;
+ r[0][1] = -2 * normal.x * normal.y;
+ r[1][0] = -2 * normal.x * normal.y;
+ r[1][1] = 1 - 2 * normal.y * normal.y;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> reflect3D(
+ const detail::tmat4x4<T>& m,
+ const detail::tvec3<T>& normal)
+ {
+ detail::tmat4x4<T> r(1);
+ r[0][0] = 1 - 2 * normal.x * normal.x;
+ r[0][1] = -2 * normal.x * normal.y;
+ r[0][2] = -2 * normal.x * normal.z;
+
+ r[1][0] = -2 * normal.x * normal.y;
+ r[1][1] = 1 - 2 * normal.y * normal.y;
+ r[1][2] = -2 * normal.y * normal.z;
+
+ r[2][0] = -2 * normal.x * normal.z;
+ r[2][1] = -2 * normal.y * normal.z;
+ r[2][2] = 1 - 2 * normal.z * normal.z;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> proj2D(
+ const detail::tmat3x3<T>& m,
+ const detail::tvec3<T>& normal)
+ {
+ detail::tmat3x3<T> r(1);
+ r[0][0] = 1 - normal.x * normal.x;
+ r[0][1] = - normal.x * normal.y;
+ r[1][0] = - normal.x * normal.y;
+ r[1][1] = 1 - normal.y * normal.y;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> proj3D(
+ const detail::tmat4x4<T>& m,
+ const detail::tvec3<T>& normal)
+ {
+ detail::tmat4x4<T> r(1);
+ r[0][0] = 1 - normal.x * normal.x;
+ r[0][1] = - normal.x * normal.y;
+ r[0][2] = - normal.x * normal.z;
+ r[1][0] = - normal.x * normal.y;
+ r[1][1] = 1 - normal.y * normal.y;
+ r[1][2] = - normal.y * normal.z;
+ r[2][0] = - normal.x * normal.z;
+ r[2][1] = - normal.y * normal.z;
+ r[2][2] = 1 - normal.z * normal.z;
+ return m * r;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scaleBias(
+ T scale,
+ T bias)
+ {
+ detail::tmat4x4<T> result;
+ result[3] = detail::tvec4<T>(detail::tvec3<T>(bias), T(1));
+ result[0][0] = scale;
+ result[1][1] = scale;
+ result[2][2] = scale;
+ return result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> scaleBias(
+ const detail::tmat4x4<T>& m,
+ T scale,
+ T bias)
+ {
+ return m * scaleBias(scale, bias);
+ }
+}//namespace glm
+
diff --git a/include/gal/opengl/glm/gtx/ulp.hpp b/include/gal/opengl/glm/gtx/ulp.hpp
new file mode 100644
index 0000000..b74f480
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/ulp.hpp
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_ulp extension is deprecated, include GLM_GTC_ulp (glm/gtc/ulp.hpp) instead")
+#endif
+
+// Promoted:
+#include "../gtc/ulp.hpp"
diff --git a/include/gal/opengl/glm/gtx/unsigned_int.hpp b/include/gal/opengl/glm/gtx/unsigned_int.hpp
new file mode 100644
index 0000000..340cfd4
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/unsigned_int.hpp
@@ -0,0 +1,26 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///////////////////////////////////////////////////////////////////////////////////
+
+#if(defined(GLM_MESSAGES))
+# pragma message("GLM: GLM_GTX_unsigned_int extension is deprecated, include GLM_GTX_integer instead")
+#endif
diff --git a/include/gal/opengl/glm/gtx/unsigned_int.inl b/include/gal/opengl/glm/gtx/unsigned_int.inl
new file mode 100644
index 0000000..b08a387
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/unsigned_int.inl
@@ -0,0 +1,13 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-24
+// Updated : 2008-10-07
+// Licence : This source is under MIT License
+// File : glm/gtx/unsigned_int.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/vec1.hpp b/include/gal/opengl/glm/gtx/vec1.hpp
new file mode 100644
index 0000000..7d37e6d
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vec1.hpp
@@ -0,0 +1,137 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_vec1
+/// @file glm/gtx/vec1.hpp
+/// @date 2010-02-08 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_vec1 GLM_GTX_vec1
+/// @ingroup gtx
+///
+/// @brief Add vec1, ivec1, uvec1 and bvec1 types.
+/// <glm/gtx/vec1.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_vec1
+#define GLM_GTX_vec1 GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../core/type_vec1.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_vec1 extension included")
+#endif
+
+namespace glm
+{
+ //! 1 component vector of high precision floating-point numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::highp_vec1_t highp_vec1;
+ //! 1 component vector of medium precision floating-point numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::mediump_vec1_t mediump_vec1;
+ //! 1 component vector of low precision floating-point numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::lowp_vec1_t lowp_vec1;
+
+ //! 1 component vector of high precision signed integer numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::highp_ivec1_t highp_ivec1;
+ //! 1 component vector of medium precision signed integer numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::mediump_ivec1_t mediump_ivec1;
+ //! 1 component vector of low precision signed integer numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::lowp_ivec1_t lowp_ivec1;
+
+ //! 1 component vector of high precision unsigned integer numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::highp_uvec1_t highp_uvec1;
+ //! 1 component vector of medium precision unsigned integer numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::mediump_uvec1_t mediump_uvec1;
+ //! 1 component vector of low precision unsigned integer numbers.
+ //! There is no guarantee on the actual precision.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::lowp_uvec1_t lowp_uvec1;
+
+ //////////////////////////
+ // vec1 definition
+
+ //! 1 component vector of boolean.
+ //! From GLM_GTX_vec1 extension.
+ typedef detail::tvec1<bool> bvec1;
+
+#if(defined(GLM_PRECISION_HIGHP_FLOAT))
+ typedef highp_vec1 vec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef mediump_vec1 vec1;
+#elif(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_vec1 vec1;
+#else
+ //! 1 component vector of floating-point numbers.
+ //! From GLM_GTX_vec1 extension.
+ typedef mediump_vec1 vec1;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_INT))
+ typedef highp_ivec1 ivec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_ivec1 ivec1;
+#elif(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_ivec1 ivec1;
+#else
+ //! 1 component vector of signed integer numbers.
+ //! From GLM_GTX_vec1 extension.
+ typedef mediump_ivec1 ivec1;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_UINT))
+ typedef highp_uvec1 uvec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+ typedef mediump_uvec1 uvec1;
+#elif(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_uvec1 uvec1;
+#else
+ //! 1 component vector of unsigned integer numbers.
+ //! From GLM_GTX_vec1 extension.
+ typedef mediump_uvec1 uvec1;
+#endif//GLM_PRECISION
+
+}// namespace glm
+
+#include "vec1.inl"
+
+#endif//GLM_GTX_vec1
+
diff --git a/include/gal/opengl/glm/gtx/vec1.inl b/include/gal/opengl/glm/gtx/vec1.inl
new file mode 100644
index 0000000..782a8ec
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vec1.inl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_vec1
+/// @file glm/gtx/vec1.inl
+/// @date 2013-03-16 / 2013-03-16
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
diff --git a/include/gal/opengl/glm/gtx/vector_access.hpp b/include/gal/opengl/glm/gtx/vector_access.hpp
new file mode 100644
index 0000000..8942661
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vector_access.hpp
@@ -0,0 +1,85 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_vector_access
+/// @file glm/gtx/vector_access.hpp
+/// @date 2006-01-16 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_vector_access GLM_GTX_vector_access
+/// @ingroup gtx
+///
+/// @brief Function to set values to vectors
+///
+/// <glm/gtx/vector_access.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_vector_access
+#define GLM_GTX_vector_access GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_vector_access extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_vector_access
+ /// @{
+
+ //! Set values to a 2 components vector.
+ //! From GLM_GTX_vector_access extension.
+ template <typename valType>
+ void set(
+ detail::tvec2<valType> & v,
+ valType const & x,
+ valType const & y);
+
+ //! Set values to a 3 components vector.
+ //! From GLM_GTX_vector_access extension.
+ template <typename valType>
+ void set(
+ detail::tvec3<valType> & v,
+ valType const & x,
+ valType const & y,
+ valType const & z);
+
+ //! Set values to a 4 components vector.
+ //! From GLM_GTX_vector_access extension.
+ template <typename valType>
+ void set(
+ detail::tvec4<valType> & v,
+ valType const & x,
+ valType const & y,
+ valType const & z,
+ valType const & w);
+
+ /// @}
+}//namespace glm
+
+#include "vector_access.inl"
+
+#endif//GLM_GTX_vector_access
diff --git a/include/gal/opengl/glm/gtx/vector_access.inl b/include/gal/opengl/glm/gtx/vector_access.inl
new file mode 100644
index 0000000..b5a5603
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vector_access.inl
@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-01-16
+// Updated : 2008-10-07
+// Licence : This source is under MIT License
+// File : glm/gtx/vector_access.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename valType>
+ GLM_FUNC_QUALIFIER void set
+ (
+ detail::tvec2<valType>& v,
+ valType const & x,
+ valType const & y
+ )
+ {
+ v.x = x;
+ v.y = y;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER void set
+ (
+ detail::tvec3<valType>& v,
+ valType const & x,
+ valType const & y,
+ valType const & z
+ )
+ {
+ v.x = x;
+ v.y = y;
+ v.z = z;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER void set
+ (
+ detail::tvec4<valType>& v,
+ valType const & x,
+ valType const & y,
+ valType const & z,
+ valType const & w
+ )
+ {
+ v.x = x;
+ v.y = y;
+ v.z = z;
+ v.w = w;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/vector_angle.hpp b/include/gal/opengl/glm/gtx/vector_angle.hpp
new file mode 100644
index 0000000..fea8f65
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vector_angle.hpp
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_vector_angle
+/// @file glm/gtx/vector_angle.hpp
+/// @date 2005-12-30 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+/// @see gtx_quaternion (dependence)
+/// @see gtx_epsilon (dependence)
+///
+/// @defgroup gtx_vector_angle GLM_GTX_vector_angle
+/// @ingroup gtx
+///
+/// @brief Compute angle between vectors
+///
+/// <glm/gtx/vector_angle.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_vector_angle
+#define GLM_GTX_vector_angle GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/epsilon.hpp"
+#include "../gtx/quaternion.hpp"
+#include "../gtx/rotate_vector.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_vector_angle extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_vector_angle
+ /// @{
+
+ //! Returns the absolute angle between two vectors
+ //! Parameters need to be normalized.
+ //! From GLM_GTX_vector_angle extension
+ template <typename vecType>
+ GLM_FUNC_QUALIFIER typename vecType::value_type angle(
+ vecType const & x,
+ vecType const & y);
+
+ //! Returns the oriented angle between two 2d vectors
+ //! Parameters need to be normalized.
+ //! From GLM_GTX_vector_angle extension.
+ template <typename T>
+ GLM_FUNC_QUALIFIER T orientedAngle(
+ detail::tvec2<T> const & x,
+ detail::tvec2<T> const & y);
+
+ //! Returns the oriented angle between two 3d vectors based from a reference axis.
+ //! Parameters need to be normalized.
+ //! From GLM_GTX_vector_angle extension.
+ template <typename T>
+ GLM_FUNC_QUALIFIER T orientedAngle(
+ detail::tvec3<T> const & x,
+ detail::tvec3<T> const & y,
+ detail::tvec3<T> const & ref);
+
+ /// @}
+}// namespace glm
+
+#include "vector_angle.inl"
+
+#endif//GLM_GTX_vector_angle
diff --git a/include/gal/opengl/glm/gtx/vector_angle.inl b/include/gal/opengl/glm/gtx/vector_angle.inl
new file mode 100644
index 0000000..ad221b1
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vector_angle.inl
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2005-12-30
+// Updated : 2008-09-29
+// Licence : This source is under MIT License
+// File : glm/gtx/vector_angle.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::value_type angle
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ return degrees(acos(dot(x, y)));
+ }
+
+ //! \todo epsilon is hard coded to 0.01
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType orientedAngle
+ (
+ detail::tvec2<valType> const & x,
+ detail::tvec2<valType> const & y
+ )
+ {
+#ifdef GLM_FORCE_RADIANS
+ valType const Angle(acos(dot(x, y)));
+#else
+ valType const Angle(glm::degrees(acos(dot(x, y))));
+#endif
+ detail::tvec2<valType> const TransformedVector(glm::rotate(x, Angle));
+ if(all(epsilonEqual(y, TransformedVector, valType(0.01))))
+ return Angle;
+ else
+ return -Angle;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType orientedAngle
+ (
+ detail::tvec3<valType> const & x,
+ detail::tvec3<valType> const & y,
+ detail::tvec3<valType> const & ref
+ )
+ {
+ valType const Angle(glm::degrees(glm::acos(glm::dot(x, y))));
+
+ if(glm::dot(ref, glm::cross(x, y)) < valType(0))
+ return -Angle;
+ else
+ return Angle;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/vector_query.hpp b/include/gal/opengl/glm/gtx/vector_query.hpp
new file mode 100644
index 0000000..f49f9e9
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vector_query.hpp
@@ -0,0 +1,112 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_vector_query
+/// @file glm/gtx/vector_query.hpp
+/// @date 2008-03-10 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_vector_query GLM_GTX_vector_query
+/// @ingroup gtx
+///
+/// @brief Query informations of vector types
+///
+/// <glm/gtx/vector_query.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_vector_query
+#define GLM_GTX_vector_query GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+#include <cfloat>
+#include <limits>
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_vector_query extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_vector_query
+ /// @{
+
+ //! Check whether two vectors are collinears.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename genType>
+ bool areCollinear(
+ genType const & v0,
+ genType const & v1,
+ typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ //! Check whether two vectors are orthogonals.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename genType>
+ bool areOrthogonal(
+ genType const & v0,
+ genType const & v1,
+ typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ //! Check whether a vector is normalized.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename genType, template <typename> class vecType>
+ bool isNormalized(
+ vecType<genType> const & v,
+ genType const & epsilon/* = std::numeric_limits<genType>::epsilon()*/);
+
+ //! Check whether a vector is null.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename valType>
+ bool isNull(
+ detail::tvec2<valType> const & v,
+ valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ //! Check whether a vector is null.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename valType>
+ bool isNull(
+ detail::tvec3<valType> const & v,
+ valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ //! Check whether a vector is null.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename valType>
+ bool isNull(
+ detail::tvec4<valType> const & v,
+ valType const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ //! Check whether two vectors are orthonormal.
+ //! From GLM_GTX_vector_query extensions.
+ template <typename genType>
+ bool areOrthonormal(
+ genType const & v0,
+ genType const & v1,
+ typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
+
+ /// @}
+}// namespace glm
+
+#include "vector_query.inl"
+
+#endif//GLM_GTX_vector_query
diff --git a/include/gal/opengl/glm/gtx/vector_query.inl b/include/gal/opengl/glm/gtx/vector_query.inl
new file mode 100644
index 0000000..c955315
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/vector_query.inl
@@ -0,0 +1,164 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2007-03-05
+// Updated : 2010-02-16
+// Licence : This source is under MIT License
+// File : glm/gtx/vector_query.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Dependency:
+// - GLM core
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <cassert>
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool areCollinear
+ (
+ detail::tvec2<T> const & v0,
+ detail::tvec2<T> const & v1,
+ typename detail::tvec2<T>::value_type const & epsilon
+ )
+ {
+ return length(cross(detail::tvec3<T>(v0, T(0)), detail::tvec3<T>(v1, T(0)))) < epsilon;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool areCollinear
+ (
+ detail::tvec3<T> const & v0,
+ detail::tvec3<T> const & v1,
+ typename detail::tvec3<T>::value_type const & epsilon
+ )
+ {
+ return length(cross(v0, v1)) < epsilon;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool areCollinear
+ (
+ detail::tvec4<T> const & v0,
+ detail::tvec4<T> const & v1,
+ typename detail::tvec4<T>::value_type const & epsilon
+ )
+ {
+ return length(cross(detail::tvec3<T>(v0), detail::tvec3<T>(v1))) < epsilon;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool areOrthogonal
+ (
+ genType const & v0,
+ genType const & v1,
+ typename genType::value_type const & epsilon
+ )
+ {
+ return abs(dot(v0, v1)) <= max(
+ typename genType::value_type(1),
+ length(v0)) * max(
+ typename genType::value_type(1),
+ length(v1)) * epsilon;
+ }
+
+ template <typename genType, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER bool isNormalized
+ (
+ vecType<genType> const & v,
+ genType const & epsilon
+ )
+ {
+ return abs(length(v) - genType(1)) <= genType(2) * epsilon;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ detail::tvec2<valType> const & v,
+ valType const & epsilon
+ )
+ {
+ return length(v) <= epsilon;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ detail::tvec3<valType> const & v,
+ valType const & epsilon
+ )
+ {
+ return length(v) <= epsilon;
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ detail::tvec4<valType> const & v,
+ valType const & epsilon
+ )
+ {
+ return length(v) <= epsilon;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool isCompNull
+ (
+ T const & s,
+ T const & epsilon
+ )
+ {
+ return abs(s) < epsilon;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<bool> isCompNull
+ (
+ detail::tvec2<T> const & v,
+ T const & epsilon)
+ {
+ return detail::tvec2<bool>(
+ (abs(v.x) < epsilon),
+ (abs(v.y) < epsilon));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<bool> isCompNull
+ (
+ detail::tvec3<T> const & v,
+ T const & epsilon
+ )
+ {
+ return detail::tvec3<bool>(
+ abs(v.x) < epsilon,
+ abs(v.y) < epsilon,
+ abs(v.z) < epsilon);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<bool> isCompNull
+ (
+ detail::tvec4<T> const & v,
+ T const & epsilon
+ )
+ {
+ return detail::tvec4<bool>(
+ abs(v.x) < epsilon,
+ abs(v.y) < epsilon,
+ abs(v.z) < epsilon,
+ abs(v.w) < epsilon);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool areOrthonormal
+ (
+ genType const & v0,
+ genType const & v1,
+ typename genType::value_type const & epsilon
+ )
+ {
+ return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);
+ }
+
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/verbose_operator.hpp b/include/gal/opengl/glm/gtx/verbose_operator.hpp
new file mode 100644
index 0000000..0a2f0e3
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/verbose_operator.hpp
@@ -0,0 +1,83 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_verbose_operator
+/// @file glm/gtx/verbose_operator.hpp
+/// @date 2007-05-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_verbose_operator GLM_GTX_verbose_operator
+/// @ingroup gtx
+///
+/// @brief Use words to replace operators
+///
+/// <glm/gtx/verbose_operator.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_verbose_operator
+#define GLM_GTX_verbose_operator GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_verbose_operator extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_verbose_operator
+ /// @{
+
+ //! Addition of two values
+ //! From GLM_GTX_verbose_operator extension.
+ template <typename genTypeT, typename genTypeU>
+ genTypeT add(genTypeT const & a, genTypeU const & b);
+
+ //! Substration of two values
+ //! From GLM_GTX_verbose_operator extension.
+ template <typename genTypeT, typename genTypeU>
+ genTypeT sub(genTypeT const & a, genTypeU const & b);
+
+ //! Multiplication of two values
+ //! From GLM_GTX_verbose_operator extension.
+ template <typename genTypeT, typename genTypeU>
+ genTypeT mul(genTypeT const & a, genTypeU const & b);
+
+ //! Division of two values
+ //! From GLM_GTX_verbose_operator extension.
+ template <typename genTypeT, typename genTypeU>
+ genTypeT div(genTypeT const & a, genTypeU const & b);
+
+ //! Multiplication and addition of three values
+ //! From GLM_GTX_verbose_operator extension.
+ template <typename genTypeT, typename genTypeU, typename genTypeV>
+ genTypeT mad(genTypeT const & a, genTypeU const & b, genTypeV const & c);
+
+ /// @}
+}// namespace glm
+
+#include "verbose_operator.inl"
+
+#endif//GLM_GTX_verbose_operator
diff --git a/include/gal/opengl/glm/gtx/verbose_operator.inl b/include/gal/opengl/glm/gtx/verbose_operator.inl
new file mode 100644
index 0000000..468bdd4
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/verbose_operator.inl
@@ -0,0 +1,124 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-04-20
+// Updated : 2008-09-29
+// Licence : This source is under MIT License
+// File : glm/gtx/verbose_operator.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType add(genType const & a, genType const & b)
+ {
+ return a + b;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sub(genType const & a, genType const & b)
+ {
+ return a - b;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat2x2<T> mul
+ (
+ detail::tmat2x2<T> const & a,
+ detail::tmat2x2<T> const & b
+ )
+ {
+ return a * b;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat3x3<T> mul
+ (
+ detail::tmat3x3<T> const & a,
+ detail::tmat3x3<T> const & b
+ )
+ {
+ return a * b;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tmat4x4<T> mul
+ (
+ detail::tmat4x4<T> const & a,
+ detail::tmat4x4<T> const & b
+ )
+ {
+ return a * b;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> mul
+ (
+ detail::tmat2x2<T> const & m,
+ detail::tvec2<T> const & v
+ )
+ {
+ return m * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> mul
+ (
+ detail::tmat3x3<T> const & m,
+ detail::tvec3<T> const & v)
+ {
+ return m * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> mul
+ (
+ detail::tmat4x4<T> const & m,
+ detail::tvec4<T> const & v
+ )
+ {
+ return m * v;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> mul
+ (
+ detail::tvec2<T> const & v,
+ detail::tmat2x2<T> const & m
+ )
+ {
+ return v * m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> mul
+ (
+ detail::tvec3<T> const & v,
+ detail::tmat3x3<T> const & m
+ )
+ {
+ return v * m;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> mul
+ (
+ detail::tvec4<T> const & v,
+ detail::tmat4x4<T> const & m
+ )
+ {
+ return v * m;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType div(genType const & a, genType const & b)
+ {
+ return a / b;
+ }
+
+ template <typename genTypeT, typename genTypeU, typename genTypeV>
+ GLM_FUNC_QUALIFIER genTypeT mad(genTypeT const & a, genTypeU const & b, genTypeV const & c)
+ {
+ return a * b + c;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/gtx/wrap.hpp b/include/gal/opengl/glm/gtx/wrap.hpp
new file mode 100644
index 0000000..a671327
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/wrap.hpp
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref gtx_wrap
+/// @file glm/gtx/wrap.hpp
+/// @date 2009-11-25 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_wrap GLM_GTX_wrap
+/// @ingroup gtx
+///
+/// @brief Wrapping mode of texture coordinates.
+///
+/// <glm/gtx/wrap.hpp> need to be included to use these functionalities.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_GTX_wrap
+#define GLM_GTX_wrap GLM_VERSION
+
+// Dependency:
+#include "../glm.hpp"
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_GTX_wrap extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_wrap
+ /// @{
+
+ //! Simulate GL_CLAMP OpenGL wrap mode
+ //! From GLM_GTX_wrap extension.
+ template <typename genType>
+ genType clamp(genType const & Texcoord);
+
+ //! Simulate GL_REPEAT OpenGL wrap mode
+ //! From GLM_GTX_wrap extension.
+ template <typename genType>
+ genType repeat(genType const & Texcoord);
+
+ //! Simulate GL_MIRROR_REPEAT OpenGL wrap mode
+ //! From GLM_GTX_wrap extension.
+ template <typename genType>
+ genType mirrorRepeat(genType const & Texcoord);
+
+ /// @}
+}// namespace glm
+
+#include "wrap.inl"
+
+#endif//GLM_GTX_wrap
diff --git a/include/gal/opengl/glm/gtx/wrap.inl b/include/gal/opengl/glm/gtx/wrap.inl
new file mode 100644
index 0000000..41c7d47
--- /dev/null
+++ b/include/gal/opengl/glm/gtx/wrap.inl
@@ -0,0 +1,165 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2009-11-25
+// Updated : 2010-02-13
+// Licence : This source is under MIT License
+// File : glm/gtx/wrap.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Dependency:
+// - GLM core
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType clamp
+ (
+ genType const & Texcoord
+ )
+ {
+ return glm::clamp(Texcoord, genType(0), genType(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> clamp
+ (
+ detail::tvec2<T> const & Texcoord
+ )
+ {
+ detail::tvec2<T> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ Result[i] = clamp(Texcoord[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> clamp
+ (
+ detail::tvec3<T> const & Texcoord
+ )
+ {
+ detail::tvec3<T> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ Result[i] = clamp(Texcoord[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> clamp
+ (
+ detail::tvec4<T> const & Texcoord
+ )
+ {
+ detail::tvec4<T> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ Result[i] = clamp(Texcoord[i]);
+ return Result;
+ }
+
+ ////////////////////////
+ // repeat
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType repeat
+ (
+ genType const & Texcoord
+ )
+ {
+ return glm::fract(Texcoord);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> repeat
+ (
+ detail::tvec2<T> const & Texcoord
+ )
+ {
+ detail::tvec2<T> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ Result[i] = repeat(Texcoord[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> repeat
+ (
+ detail::tvec3<T> const & Texcoord
+ )
+ {
+ detail::tvec3<T> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ Result[i] = repeat(Texcoord[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> repeat
+ (
+ detail::tvec4<T> const & Texcoord
+ )
+ {
+ detail::tvec4<T> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ Result[i] = repeat(Texcoord[i]);
+ return Result;
+ }
+
+ ////////////////////////
+ // mirrorRepeat
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType mirrorRepeat
+ (
+ genType const & Texcoord
+ )
+ {
+ genType const Clamp = genType(int(glm::floor(Texcoord)) % 2);
+ genType const Floor = glm::floor(Texcoord);
+ genType const Rest = Texcoord - Floor;
+ genType const Mirror = Clamp + Rest;
+
+ genType Out;
+ if(Mirror >= genType(1))
+ Out = genType(1) - Rest;
+ else
+ Out = Rest;
+ return Out;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec2<T> mirrorRepeat
+ (
+ detail::tvec2<T> const & Texcoord
+ )
+ {
+ detail::tvec2<T> Result;
+ for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
+ Result[i] = mirrorRepeat(Texcoord[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec3<T> mirrorRepeat
+ (
+ detail::tvec3<T> const & Texcoord
+ )
+ {
+ detail::tvec3<T> Result;
+ for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
+ Result[i] = mirrorRepeat(Texcoord[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER detail::tvec4<T> mirrorRepeat
+ (
+ detail::tvec4<T> const & Texcoord
+ )
+ {
+ detail::tvec4<T> Result;
+ for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
+ Result[i] = mirrorRepeat(Texcoord[i]);
+ return Result;
+ }
+}//namespace glm
diff --git a/include/gal/opengl/glm/virtrev/xstream.hpp b/include/gal/opengl/glm/virtrev/xstream.hpp
new file mode 100644
index 0000000..3be1f98
--- /dev/null
+++ b/include/gal/opengl/glm/virtrev/xstream.hpp
@@ -0,0 +1,166 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @ref virtrev_xstream
+/// @file glm/virtrev/xstream.hpp
+/// @date 2008-05-24 / 2008-05-26
+/// @author Mathieu Roumillac (matrem84.free.fr)
+///
+/// @see core (dependence)
+/// @see gtc_matrix_access (dependence)
+///
+/// @defgroup virtrev_xstream GLM_VIRTREV_xstream: xml like output
+/// @ingroup virtrev
+///
+/// @brief Streaming vector and matrix in a xml way.
+///
+/// Include <glm/virtrev/xstream.hpp> for this functionality.
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLM_VIRTREV_xstream
+#define GLM_VIRTREV_xstream GLM_VERSION
+
+#include "../glm.hpp"
+#include "../gtc/matrix_access.hpp"
+#include <iostream>
+
+#if(defined(GLM_MESSAGES) && !defined(glm_ext))
+# pragma message("GLM: GLM_VIRTREV_xstream extension included")
+#endif
+/*
+namespace glm{
+namespace detail
+{
+ template<typename T>
+ std::ostream & operator << (std::ostream & stream, glm::detail::tvec2<T> const & vec)
+ {
+ stream << "<glm_vec2 ";
+ stream << "x=\"" << vec.x << "\" ";
+ stream << "y=\"" << vec.y << "\" ";
+ stream << "/>";
+
+ return stream;
+ }
+
+ template<typename T>
+ std::ostream & operator << (std::ostream & stream, glm::detail::tvec3<T> const & vec)
+ {
+ stream << "<glm_vec3 ";
+ stream << "x=\"" << vec.x << "\" ";
+ stream << "y=\"" << vec.y << "\" ";
+ stream << "z=\"" << vec.z << "\" ";
+ stream << "/>";
+
+ return stream;
+ }
+
+ template<typename T>
+ std::ostream & operator << (std::ostream & stream, glm::detail::tvec4<T> const & vec)
+ {
+ stream << "<glm_vec4 ";
+ stream << "x=\"" << vec.x << "\" ";
+ stream << "y=\"" << vec.y << "\" ";
+ stream << "z=\"" << vec.z << "\" ";
+ stream << "w=\"" << vec.w << "\" ";
+ stream << "/>";
+
+ return stream;
+ }
+
+ template<typename T>
+ std::ostream & operator << (std::ostream & stream, glm::detail::tmat2x2<T> const & mat)
+ {
+ stream << "<glm_mat2>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "</glm_mat2>";
+
+ return stream;
+ }
+
+ template<typename T>
+ std::ostream & operator << (std::ostream & stream, glm::detail::tmat3x3<T> const & mat)
+ {
+ stream << "<glm_mat3>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "</glm_mat3>";
+
+ return stream;
+ }
+
+ template<typename T>
+ std::ostream & operator << (std::ostream & stream, glm::detail::tmat4x4<T> const & mat)
+ {
+ stream << "<glm_mat4>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
+ stream << "w=\"" << glm::row(mat, 0)[3] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
+ stream << "w=\"" << glm::row(mat, 1)[3] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
+ stream << "w=\"" << glm::row(mat, 2)[3] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "<row ";
+ stream << "x=\"" << glm::row(mat, 3)[0] << "\" ";
+ stream << "y=\"" << glm::row(mat, 3)[1] << "\" ";
+ stream << "z=\"" << glm::row(mat, 3)[2] << "\" ";
+ stream << "w=\"" << glm::row(mat, 3)[3] << "\" ";
+ stream << "/>" << std::endl;
+ stream << "</glm_mat4>";
+
+ return stream;
+ }
+
+}//namespace detail
+}//namespace glm
+*/
+#endif//GLM_VIRTREV_xstream
diff --git a/include/gal/opengl/gpu_manager.h b/include/gal/opengl/gpu_manager.h
new file mode 100644
index 0000000..5ed2a08
--- /dev/null
+++ b/include/gal/opengl/gpu_manager.h
@@ -0,0 +1,182 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file gpu_manager.h
+ * @brief Class to handle uploading vertices and indices to GPU in drawing purposes.
+ */
+
+#ifndef GPU_MANAGER_H_
+#define GPU_MANAGER_H_
+
+#include <gal/opengl/vertex_common.h>
+#include <boost/scoped_array.hpp>
+
+namespace KIGFX
+{
+class SHADER;
+class VERTEX_CONTAINER;
+class CACHED_CONTAINER;
+class NONCACHED_CONTAINER;
+
+class GPU_MANAGER
+{
+public:
+ static GPU_MANAGER* MakeManager( VERTEX_CONTAINER* aContainer );
+
+ virtual ~GPU_MANAGER();
+
+ /**
+ * @brief Initializes everything needed to use vertex buffer objects (should be called when
+ * there is an OpenGL context available).
+ */
+ virtual void Initialize() = 0;
+
+ /**
+ * Function BeginDrawing()
+ * Prepares the stored data to be drawn.
+ */
+ virtual void BeginDrawing() = 0;
+
+ /**
+ * Function DrawIndices()
+ * Makes the GPU draw given range of vertices.
+ * @param aOffset is the beginning of the range.
+ * @param aSize is the number of vertices to be drawn.
+ */
+ virtual void DrawIndices( unsigned int aOffset, unsigned int aSize ) = 0;
+
+ /**
+ * Function DrawIndices()
+ * Makes the GPU draw all the vertices stored in the container.
+ */
+ virtual void DrawAll() = 0;
+
+ /**
+ * Function EndDrawing()
+ * Clears the container after drawing routines.
+ */
+ virtual void EndDrawing() = 0;
+
+ /**
+ * Function SetShader()
+ * Allows using shaders with the stored data.
+ * @param aShader is the object that allows using shaders.
+ */
+ virtual void SetShader( SHADER& aShader );
+
+protected:
+ GPU_MANAGER( VERTEX_CONTAINER* aContainer );
+
+ ///> Drawing status flag.
+ bool m_isDrawing;
+
+ ///> Container that stores vertices data.
+ VERTEX_CONTAINER* m_container;
+
+ ///> Shader handling
+ SHADER* m_shader;
+
+ ///> Location of shader attributes (for glVertexAttribPointer)
+ int m_shaderAttrib;
+};
+
+
+class GPU_CACHED_MANAGER : public GPU_MANAGER
+{
+public:
+ GPU_CACHED_MANAGER( VERTEX_CONTAINER* aContainer );
+ ~GPU_CACHED_MANAGER();
+
+ ///> @copydoc GPU_MANAGER::Initialize()
+ virtual void Initialize();
+
+ ///> @copydoc GPU_MANAGER::BeginDrawing()
+ virtual void BeginDrawing();
+
+ ///> @copydoc GPU_MANAGER::DrawIndices()
+ virtual void DrawIndices( unsigned int aOffset, unsigned int aSize );
+
+ ///> @copydoc GPU_MANAGER::DrawAll()
+ virtual void DrawAll();
+
+ ///> @copydoc GPU_MANAGER::EndDrawing()
+ virtual void EndDrawing();
+
+protected:
+ /**
+ * Function uploadToGpu
+ * Rebuilds vertex buffer object using stored VERTEX_ITEMs and sends it to the graphics card
+ * memory.
+ */
+ virtual void uploadToGpu();
+
+ ///> Resizes the indices buffer to aNewSize if necessary
+ void resizeIndices( unsigned int aNewSize );
+
+ ///> Buffers initialization flag
+ bool m_buffersInitialized;
+
+ ///> Pointer to the current indices buffer
+ boost::scoped_array<GLuint> m_indices;
+
+ ///> Pointer to the first free cell in the indices buffer
+ GLuint* m_indicesPtr;
+
+ ///> Handle to vertices buffer
+ GLuint m_verticesBuffer;
+
+ ///> Handle to indices buffer
+ GLuint m_indicesBuffer;
+
+ ///> Number of indices stored in the indices buffer
+ unsigned int m_indicesSize;
+
+ ///> Current indices buffer size
+ unsigned int m_indicesCapacity;
+};
+
+
+class GPU_NONCACHED_MANAGER : public GPU_MANAGER
+{
+public:
+ GPU_NONCACHED_MANAGER( VERTEX_CONTAINER* aContainer );
+
+ ///> @copydoc GPU_MANAGER::Initialize()
+ virtual void Initialize();
+
+ ///> @copydoc GPU_MANAGER::BeginDrawing()
+ virtual void BeginDrawing();
+
+ ///> @copydoc GPU_MANAGER::DrawIndices()
+ virtual void DrawIndices( unsigned int aOffset, unsigned int aSize );
+
+ ///> @copydoc GPU_MANAGER::DrawAll()
+ virtual void DrawAll();
+
+ ///> @copydoc GPU_MANAGER::EndDrawing()
+ virtual void EndDrawing();
+};
+} // namespace KIGFX
+#endif /* GPU_MANAGER_H_ */
diff --git a/include/gal/opengl/noncached_container.h b/include/gal/opengl/noncached_container.h
new file mode 100644
index 0000000..3a51e6d
--- /dev/null
+++ b/include/gal/opengl/noncached_container.h
@@ -0,0 +1,73 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file noncached_container.h
+ * @brief Class to store instances of VERTEX without caching. It allows a fast one-frame drawing
+ * and then clearing the buffer and starting from scratch.
+ */
+
+#ifndef NONCACHED_CONTAINER_H_
+#define NONCACHED_CONTAINER_H_
+
+#include <gal/opengl/vertex_container.h>
+
+namespace KIGFX
+{
+class VERTEX_ITEM;
+class SHADER;
+
+class NONCACHED_CONTAINER : public VERTEX_CONTAINER
+{
+public:
+ NONCACHED_CONTAINER( unsigned int aSize = defaultInitSize );
+ virtual ~NONCACHED_CONTAINER();
+
+ ///< @copydoc VERTEX_CONTAINER::SetItem( VERTEX_ITEM* aItem )
+ virtual void SetItem( VERTEX_ITEM* aItem );
+
+ ///< @copydoc VERTEX_CONTAINER::Allocate( unsigned int aSize )
+ virtual VERTEX* Allocate( unsigned int aSize );
+
+ ///< @copydoc VERTEX_CONTAINER::Delete( VERTEX_ITEM* aItem )
+ void Delete( VERTEX_ITEM* aItem ) {};
+
+ ///< @copydoc VERTEX_CONTAINER::Clear()
+ virtual void Clear();
+
+ ///< @copydoc VERTEX_CONTAINER::GetSize()
+ virtual inline unsigned int GetSize() const
+ {
+ // As the m_freePtr points to the first free space, we can safely assume
+ // that this is the number of vertices stored inside
+ return m_freePtr;
+ }
+
+protected:
+ ///< Index of the free first space where a vertex can be stored
+ unsigned int m_freePtr;
+};
+} // namespace KIGFX
+
+#endif /* NONCACHED_CONTAINER_H_ */
diff --git a/include/gal/opengl/opengl_compositor.h b/include/gal/opengl/opengl_compositor.h
new file mode 100644
index 0000000..c06add7
--- /dev/null
+++ b/include/gal/opengl/opengl_compositor.h
@@ -0,0 +1,109 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file opengl_compositor.h
+ * @brief Class that handles multitarget rendering (ie. to different textures/surfaces) and
+ * later compositing into a single image (OpenGL flavour).
+ */
+
+#ifndef OPENGL_COMPOSITOR_H_
+#define OPENGL_COMPOSITOR_H_
+
+#include <gal/compositor.h>
+#include <GL/glew.h>
+#include <deque>
+
+namespace KIGFX
+{
+class OPENGL_COMPOSITOR : public COMPOSITOR
+{
+public:
+ OPENGL_COMPOSITOR();
+ virtual ~OPENGL_COMPOSITOR();
+
+ /// @copydoc COMPOSITOR::Initialize()
+ virtual void Initialize();
+
+ /// @copydoc COMPOSITOR::Resize()
+ virtual void Resize( unsigned int aWidth, unsigned int aHeight );
+
+ /// @copydoc COMPOSITOR::CreateBuffer()
+ virtual unsigned int CreateBuffer();
+
+ /// @copydoc COMPOSITOR::SetBuffer()
+ virtual void SetBuffer( unsigned int aBufferHandle );
+
+ /// @copydoc COMPOSITOR::GetBuffer()
+ inline virtual unsigned int GetBuffer() const
+ {
+ if( m_currentFbo == DIRECT_RENDERING )
+ return DIRECT_RENDERING;
+
+ return m_current + 1;
+ }
+
+ /// @copydoc COMPOSITOR::ClearBuffer()
+ virtual void ClearBuffer();
+
+ /// @copydoc COMPOSITOR::DrawBuffer()
+ virtual void DrawBuffer( unsigned int aBufferHandle );
+
+ // Constant used by glBindFramebuffer to turn off rendering to framebuffers
+ static const unsigned int DIRECT_RENDERING = 0;
+
+protected:
+ typedef struct
+ {
+ GLuint textureTarget; ///< Main texture handle
+ GLuint attachmentPoint; ///< Point to which an image from texture is attached
+ } OPENGL_BUFFER;
+
+ bool m_initialized; ///< Initialization status flag
+ unsigned int m_current; ///< Currently used buffer handle
+ GLuint m_framebuffer; ///< Main FBO handle
+ GLuint m_depthBuffer; ///< Depth buffer handle
+ typedef std::deque<OPENGL_BUFFER> OPENGL_BUFFERS;
+
+ /// Stores information about initialized buffers
+ OPENGL_BUFFERS m_buffers;
+
+ /// Store the currently used FBO name in case there was more than one compositor used
+ GLuint m_currentFbo;
+
+ /**
+ * Function clean()
+ * performs freeing of resources.
+ */
+ void clean();
+
+ /// Returns number of used buffers
+ inline unsigned int usedBuffers()
+ {
+ return m_buffers.size();
+ }
+};
+} // namespace KIGFX
+
+#endif /* COMPOSITOR_H_ */
diff --git a/include/gal/opengl/opengl_gal.h b/include/gal/opengl/opengl_gal.h
new file mode 100644
index 0000000..83598ba
--- /dev/null
+++ b/include/gal/opengl/opengl_gal.h
@@ -0,0 +1,394 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2013-2016 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Graphics Abstraction Layer (GAL) for OpenGL
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef OPENGLGAL_H_
+#define OPENGLGAL_H_
+
+// GAL imports
+#include <gal/graphics_abstraction_layer.h>
+#include <gal/opengl/shader.h>
+#include <gal/opengl/vertex_manager.h>
+#include <gal/opengl/vertex_item.h>
+#include <gal/opengl/noncached_container.h>
+#include <gal/opengl/opengl_compositor.h>
+
+#include <wx/glcanvas.h>
+
+#include <map>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/shared_array.hpp>
+
+#ifndef CALLBACK
+#define CALLBACK
+#endif
+
+namespace KIGFX
+{
+class SHADER;
+
+/**
+ * @brief Class OpenGL_GAL is the OpenGL implementation of the Graphics Abstraction Layer.
+ *
+ * This is a direct OpenGL-implementation and uses low-level graphics primitives like triangles
+ * and quads. The purpose is to provide a fast graphics interface, that takes advantage of modern
+ * graphics card GPUs. All methods here benefit thus from the hardware acceleration.
+ */
+class OPENGL_GAL : public GAL, public wxGLCanvas
+{
+public:
+
+ /**
+ * @brief Constructor OPENGL_GAL
+ *
+ * @param aParent is the wxWidgets immediate wxWindow parent of this object.
+ *
+ * @param aMouseListener is the wxEvtHandler that should receive the mouse events,
+ * this can be can be any wxWindow, but is often a wxFrame container.
+ *
+ * @param aPaintListener is the wxEvtHandler that should receive the paint
+ * event. This can be any wxWindow, but is often a derived instance
+ * of this class or a containing wxFrame. The "paint event" here is
+ * a wxCommandEvent holding EVT_GAL_REDRAW, as sent by PostPaint().
+ *
+ * @param aName is the name of this window for use by wxWindow::FindWindowByName()
+ */
+ OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener = NULL,
+ wxEvtHandler* aPaintListener = NULL, const wxString& aName = wxT( "GLCanvas" ) );
+
+ virtual ~OPENGL_GAL();
+
+ /// @copydoc GAL::IsInitialized()
+ virtual bool IsInitialized() const { return IsShownOnScreen(); }
+
+ // ---------------
+ // Drawing methods
+ // ---------------
+
+ /// @copydoc GAL::BeginDrawing()
+ virtual void BeginDrawing();
+
+ /// @copydoc GAL::EndDrawing()
+ virtual void EndDrawing();
+
+ /// @copydoc GAL::DrawLine()
+ virtual void DrawLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+ /// @copydoc GAL::DrawSegment()
+ virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint,
+ double aWidth );
+
+ /// @copydoc GAL::DrawCircle()
+ virtual void DrawCircle( const VECTOR2D& aCenterPoint, double aRadius );
+
+ /// @copydoc GAL::DrawArc()
+ virtual void DrawArc( const VECTOR2D& aCenterPoint, double aRadius,
+ double aStartAngle, double aEndAngle );
+
+ /// @copydoc GAL::DrawRectangle()
+ virtual void DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+ /// @copydoc GAL::DrawPolyline()
+ virtual void DrawPolyline( const std::deque<VECTOR2D>& aPointList );
+ virtual void DrawPolyline( const VECTOR2D aPointList[], int aListSize );
+
+ /// @copydoc GAL::DrawPolygon()
+ virtual void DrawPolygon( const std::deque<VECTOR2D>& aPointList );
+ virtual void DrawPolygon( const VECTOR2D aPointList[], int aListSize );
+
+ /// @copydoc GAL::DrawCurve()
+ virtual void DrawCurve( const VECTOR2D& startPoint, const VECTOR2D& controlPointA,
+ const VECTOR2D& controlPointB, const VECTOR2D& endPoint );
+
+ // --------------
+ // Screen methods
+ // --------------
+
+ /// @brief Resizes the canvas.
+ virtual void ResizeScreen( int aWidth, int aHeight );
+
+ /// @brief Shows/hides the GAL canvas
+ virtual bool Show( bool aShow );
+
+ /// @copydoc GAL::Flush()
+ virtual void Flush();
+
+ /// @copydoc GAL::ClearScreen()
+ virtual void ClearScreen( const COLOR4D& aColor );
+
+ // --------------
+ // Transformation
+ // --------------
+
+ /// @copydoc GAL::Transform()
+ virtual void Transform( const MATRIX3x3D& aTransformation );
+
+ /// @copydoc GAL::Rotate()
+ virtual void Rotate( double aAngle );
+
+ /// @copydoc GAL::Translate()
+ virtual void Translate( const VECTOR2D& aTranslation );
+
+ /// @copydoc GAL::Scale()
+ virtual void Scale( const VECTOR2D& aScale );
+
+ /// @copydoc GAL::Save()
+ virtual void Save();
+
+ /// @copydoc GAL::Restore()
+ virtual void Restore();
+
+ // --------------------------------------------
+ // Group methods
+ // ---------------------------------------------
+
+ /// @copydoc GAL::BeginGroup()
+ virtual int BeginGroup();
+
+ /// @copydoc GAL::EndGroup()
+ virtual void EndGroup();
+
+ /// @copydoc GAL::DrawGroup()
+ virtual void DrawGroup( int aGroupNumber );
+
+ /// @copydoc GAL::ChangeGroupColor()
+ virtual void ChangeGroupColor( int aGroupNumber, const COLOR4D& aNewColor );
+
+ /// @copydoc GAL::ChangeGroupDepth()
+ virtual void ChangeGroupDepth( int aGroupNumber, int aDepth );
+
+ /// @copydoc GAL::DeleteGroup()
+ virtual void DeleteGroup( int aGroupNumber );
+
+ /// @copydoc GAL::ClearCache()
+ virtual void ClearCache();
+
+ // --------------------------------------------------------
+ // Handling the world <-> screen transformation
+ // --------------------------------------------------------
+
+ /// @copydoc GAL::SaveScreen()
+ virtual void SaveScreen();
+
+ /// @copydoc GAL::RestoreScreen()
+ virtual void RestoreScreen();
+
+ /// @copydoc GAL::SetTarget()
+ virtual void SetTarget( RENDER_TARGET aTarget );
+
+ /// @copydoc GAL::GetTarget()
+ virtual RENDER_TARGET GetTarget() const;
+
+ /// @copydoc GAL::ClearTarget()
+ virtual void ClearTarget( RENDER_TARGET aTarget );
+
+ // -------
+ // Cursor
+ // -------
+
+ /// @copydoc GAL::DrawCursor()
+ virtual void DrawCursor( const VECTOR2D& aCursorPosition );
+
+ /**
+ * @brief Function PostPaint
+ * posts an event to m_paint_listener. A post is used so that the actual drawing
+ * function can use a device context type that is not specific to the wxEVT_PAINT event.
+ */
+ void PostPaint()
+ {
+ if( paintListener )
+ {
+ wxPaintEvent redrawEvent;
+ wxPostEvent( paintListener, redrawEvent );
+ }
+ }
+
+ void SetMouseListener( wxEvtHandler* aMouseListener )
+ {
+ mouseListener = aMouseListener;
+ }
+
+ void SetPaintListener( wxEvtHandler* aPaintListener )
+ {
+ paintListener = aPaintListener;
+ }
+
+ ///< Parameters passed to the GLU tesselator
+ typedef struct
+ {
+ /// Manager used for storing new vertices
+ VERTEX_MANAGER* vboManager;
+
+ /// Intersect points, that have to be freed after tessellation
+ std::deque< boost::shared_array<GLdouble> >& intersectPoints;
+ } TessParams;
+
+protected:
+ virtual void drawGridLine( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+private:
+ /// Super class definition
+ typedef GAL super;
+
+ static const int CIRCLE_POINTS = 64; ///< The number of points for circle approximation
+ static const int CURVE_POINTS = 32; ///< The number of points for curve approximation
+
+ wxClientDC* clientDC; ///< Drawing context
+ static wxGLContext* glContext; ///< OpenGL context of wxWidgets
+ wxEvtHandler* mouseListener;
+ wxEvtHandler* paintListener;
+
+ // Vertex buffer objects related fields
+ typedef std::map< unsigned int, boost::shared_ptr<VERTEX_ITEM> > GROUPS_MAP;
+ GROUPS_MAP groups; ///< Stores informations about VBO objects (groups)
+ unsigned int groupCounter; ///< Counter used for generating keys for groups
+ VERTEX_MANAGER* currentManager; ///< Currently used VERTEX_MANAGER (for storing VERTEX_ITEMs)
+ VERTEX_MANAGER cachedManager; ///< Container for storing cached VERTEX_ITEMs
+ VERTEX_MANAGER nonCachedManager; ///< Container for storing non-cached VERTEX_ITEMs
+ VERTEX_MANAGER overlayManager; ///< Container for storing overlaid VERTEX_ITEMs
+
+ // Framebuffer & compositing
+ OPENGL_COMPOSITOR compositor; ///< Handles multiple rendering targets
+ unsigned int mainBuffer; ///< Main rendering target
+ unsigned int overlayBuffer; ///< Auxiliary rendering target (for menus etc.)
+ RENDER_TARGET currentTarget; ///< Current rendering target
+
+ // Shader
+ SHADER shader; ///< There is only one shader used for different objects
+
+ // Internal flags
+ bool isFramebufferInitialized; ///< Are the framebuffers initialized?
+ bool isGrouping; ///< Was a group started?
+
+ // Polygon tesselation
+ /// The tessellator
+ GLUtesselator* tesselator;
+ /// Storage for intersecting points
+ std::deque< boost::shared_array<GLdouble> > tessIntersects;
+
+ /**
+ * @brief Draw a quad for the line.
+ *
+ * @param aStartPoint is the start point of the line.
+ * @param aEndPoint is the end point of the line.
+ */
+ void drawLineQuad( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
+
+ /**
+ * @brief Draw a semicircle. Depending on settings (isStrokeEnabled & isFilledEnabled) it runs
+ * the proper function (drawStrokedSemiCircle or drawFilledSemiCircle).
+ *
+ * @param aCenterPoint is the center point.
+ * @param aRadius is the radius of the semicircle.
+ * @param aAngle is the angle of the semicircle.
+ *
+ */
+ void drawSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle );
+
+ /**
+ * @brief Draw a filled semicircle.
+ *
+ * @param aCenterPoint is the center point.
+ * @param aRadius is the radius of the semicircle.
+ * @param aAngle is the angle of the semicircle.
+ *
+ */
+ void drawFilledSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle );
+
+ /**
+ * @brief Draw a stroked semicircle.
+ *
+ * @param aCenterPoint is the center point.
+ * @param aRadius is the radius of the semicircle.
+ * @param aAngle is the angle of the semicircle.
+ *
+ */
+ void drawStrokedSemiCircle( const VECTOR2D& aCenterPoint, double aRadius, double aAngle );
+
+ // Event handling
+ /**
+ * @brief This is the OnPaint event handler.
+ *
+ * @param aEvent is the OnPaint event.
+ */
+ void onPaint( wxPaintEvent& aEvent );
+
+ /**
+ * @brief Skip the mouse event to the parent.
+ *
+ * @param aEvent is the mouse event.
+ */
+ void skipMouseEvent( wxMouseEvent& aEvent );
+
+ /**
+ * @brief Blits cursor into the current screen.
+ */
+ void blitCursor();
+
+ /**
+ * @brief Returns a valid key that can be used as a new group number.
+ *
+ * @return An unique group number that is not used by any other group.
+ */
+ unsigned int getNewGroupNumber();
+
+ /**
+ * @brief Checks if the required OpenGL version and extensions are supported.
+ * @return true in case of success.
+ */
+ bool runTest();
+
+ // Helper class to determine OpenGL capabilities
+ class OPENGL_TEST: public wxGLCanvas
+ {
+ public:
+ OPENGL_TEST( wxDialog* aParent, OPENGL_GAL* aGal );
+
+ void Render( wxPaintEvent& aEvent );
+ void OnTimeout( wxTimerEvent& aEvent );
+ void OnDialogPaint( wxPaintEvent& aEvent );
+
+ inline bool IsTested() const { return m_tested; }
+ inline bool IsOk() const { return m_result && m_tested; }
+ inline std::string GetError() const { return m_error; }
+
+ private:
+ void error( const std::string& aError );
+
+ wxDialog* m_parent;
+ OPENGL_GAL* m_gal;
+ bool m_tested;
+ bool m_result;
+ std::string m_error;
+ wxTimer m_timeoutTimer;
+ };
+
+ friend class OPENGL_TEST;
+};
+} // namespace KIGFX
+
+#endif // OPENGLGAL_H_
diff --git a/include/gal/opengl/shader.h b/include/gal/opengl/shader.h
new file mode 100644
index 0000000..a83de84
--- /dev/null
+++ b/include/gal/opengl/shader.h
@@ -0,0 +1,210 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Graphics Abstraction Layer (GAL) for OpenGL
+ *
+ * Shader class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SHADER_H_
+#define SHADER_H_
+
+#include <GL/glew.h>
+
+#include <string>
+#include <deque>
+
+namespace KIGFX
+{
+class OPENGL_GAL;
+
+/// Type definition for the shader
+enum SHADER_TYPE
+{
+ SHADER_TYPE_VERTEX = GL_VERTEX_SHADER, ///< Vertex shader
+ SHADER_TYPE_FRAGMENT = GL_FRAGMENT_SHADER, ///< Fragment shader
+ SHADER_TYPE_GEOMETRY = GL_GEOMETRY_SHADER ///< Geometry shader
+};
+
+/**
+ * @brief Class SHADER provides the access to the OpenGL shaders.
+ *
+ * The purpose of this class is advanced drawing with OpenGL. One example is using the pixel
+ * shader for drawing exact circles or for anti-aliasing. This class supports vertex, geometry
+ * and fragment shaders.
+ * <br>
+ * Make sure that the hardware supports these features. This can be identified with the "GLEW"
+ * library.
+ */
+class SHADER
+{
+public:
+
+ /**
+ * @brief Constructor
+ */
+ SHADER();
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~SHADER();
+
+ /**
+ * @brief Loads one of the built-in shaders and compiles it.
+ *
+ * @param aShaderNumber is the shader number (indexing from 0).
+ * @param aShaderType is the type of the shader.
+ * @return True in case of success, false otherwise.
+ */
+ bool LoadBuiltinShader( unsigned int aShaderNumber, SHADER_TYPE aShaderType );
+
+ /**
+ * @brief Loads one of the built-in shaders and compiles it.
+ *
+ * @param aShaderSourceName is the shader source file name.
+ * @param aShaderType is the type of the shader.
+ * @return True in case of success, false otherwise.
+ */
+ bool LoadShaderFromFile( const std::string& aShaderSourceName, SHADER_TYPE aShaderType );
+
+ /**
+ * @brief Link the shaders.
+ *
+ * @return true in case of success, false otherwise.
+ */
+ bool Link();
+
+ /**
+ * @brief Use the shader.
+ */
+ inline void Use()
+ {
+ glUseProgram( programNumber );
+ active = true;
+ }
+
+ /**
+ * @brief Deactivate the shader and use the default OpenGL program.
+ */
+ inline void Deactivate()
+ {
+ glUseProgram( 0 );
+ active = false;
+ }
+
+ /**
+ * @brief Returns the current state of the shader.
+ *
+ * @return True if any of shaders is enabled.
+ */
+ inline bool IsActive() const
+ {
+ return active;
+ }
+
+ /**
+ * @brief Configure the geometry shader - has to be done before linking!
+ *
+ * @param maxVertices is the maximum of vertices to be generated.
+ * @param geometryInputType is the input type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]
+ * @param geometryOutputType is the output type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]
+ */
+ void ConfigureGeometryShader( GLuint maxVertices, GLuint geometryInputType,
+ GLuint geometryOutputType );
+
+ /**
+ * @brief Add a parameter to the parameter queue.
+ *
+ * To communicate with the shader use this function to set up the names for the uniform
+ * variables. These are queued in a list and can be assigned with the SetParameter(..)
+ * method using the queue position.
+ *
+ * @param aParameterName is the name of the parameter.
+ * @return the added parameter location.
+ */
+ int AddParameter( const std::string& aParameterName );
+
+ /**
+ * @brief Set a parameter of the shader.
+ *
+ * @param aParameterNumber is the number of the parameter.
+ * @param aValue is the value of the parameter.
+ */
+ void SetParameter( int aParameterNumber, float aValue ) const;
+ void SetParameter( int aParameterNumber, int aValue ) const;
+
+ /**
+ * @brief Gets an attribute location.
+ *
+ * @param aAttributeName is the name of the attribute.
+ * @return the location.
+ */
+ int GetAttribute( std::string aAttributeName ) const;
+
+private:
+
+ /**
+ * @brief Get the shader program information.
+ *
+ * @param aProgram is the program number.
+ */
+ void programInfo( GLuint aProgram );
+
+ /**
+ * @brief Get the shader information.
+ *
+ * @param aShader is the shader number.
+ */
+ void shaderInfo( GLuint aShader );
+
+ /**
+ * @brief Read the shader source file
+ *
+ * @param aShaderSourceName is the shader source file name.
+ * @return the source as string
+ */
+ std::string readSource( std::string aShaderSourceName );
+
+ /**
+ * @brief Add a shader and compile the shader sources.
+ *
+ * @param aShaderSource is the shader source content.
+ * @param aShaderType is the type of the shader.
+ * @return True in case of success, false otherwise.
+ */
+ bool addSource( const std::string& aShaderSource, SHADER_TYPE aShaderType );
+
+ std::deque<GLuint> shaderNumbers; ///< Shader number list
+ GLuint programNumber; ///< Shader program number
+ bool isProgramCreated; ///< Flag for program creation
+ bool isShaderLinked; ///< Is the shader linked?
+ bool active; ///< Is any of shaders used?
+ GLuint maximumVertices; ///< The maximum of vertices to be generated
+ GLuint geomInputType; ///< Input type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]
+ GLuint geomOutputType; ///< Output type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]
+ std::deque<GLint> parameterLocation; ///< Location of the parameter
+};
+} // namespace KIGFX
+
+#endif /* SHADER_H_ */
diff --git a/include/gal/opengl/vertex_common.h b/include/gal/opengl/vertex_common.h
new file mode 100644
index 0000000..0d8eb9d
--- /dev/null
+++ b/include/gal/opengl/vertex_common.h
@@ -0,0 +1,76 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_common.h
+ * @brief Common defines and consts used in vertex related classes.
+ */
+
+#ifndef VERTEX_COMMON_H_
+#define VERTEX_COMMON_H_
+
+#include <GL/glew.h>
+
+#include <cstddef>
+
+namespace KIGFX
+{
+// Possible types of shaders
+enum SHADER_MODE
+{
+ SHADER_NONE = 0,
+ SHADER_LINE,
+ SHADER_FILLED_CIRCLE,
+ SHADER_STROKED_CIRCLE,
+};
+
+typedef struct
+{
+ GLfloat x, y, z; // Coordinates
+ GLubyte r, g, b, a; // Color
+ GLfloat shader[4]; // Shader type & params
+} VERTEX;
+
+///< Data structure for vertices {X,Y,Z,R,G,B,A,shader&param} (@see VERTEX).
+const unsigned int VertexSize = sizeof(VERTEX);
+const unsigned int VertexStride = VertexSize / sizeof(GLfloat);
+
+const unsigned int CoordSize = sizeof(VERTEX().x) + sizeof(VERTEX().y) + sizeof(VERTEX().z);
+const unsigned int CoordStride = CoordSize / sizeof(GLfloat);
+
+// Offset of color data from the beginning of each vertex data
+const unsigned int ColorOffset = offsetof(VERTEX, r);
+const unsigned int ColorSize = sizeof(VERTEX().r) + sizeof(VERTEX().g) +
+ sizeof(VERTEX().b) + sizeof(VERTEX().a);
+const unsigned int ColorStride = ColorSize / sizeof(GLubyte);
+
+// Shader attributes
+const unsigned int ShaderOffset = offsetof(VERTEX, shader);
+const unsigned int ShaderSize = sizeof(VERTEX().shader);
+const unsigned int ShaderStride = ShaderSize / sizeof(GLfloat);
+
+const unsigned int IndexSize = sizeof(GLuint);
+} // namespace KIGFX
+
+#endif /* VERTEX_COMMON_H_ */
diff --git a/include/gal/opengl/vertex_container.h b/include/gal/opengl/vertex_container.h
new file mode 100644
index 0000000..1c7b00b
--- /dev/null
+++ b/include/gal/opengl/vertex_container.h
@@ -0,0 +1,176 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_container.h
+ * @brief Class to store vertices and handle transfers between system memory and GPU memory.
+ */
+
+#ifndef VERTEX_CONTAINER_H_
+#define VERTEX_CONTAINER_H_
+
+#include <gal/opengl/vertex_common.h>
+
+namespace KIGFX
+{
+class VERTEX_ITEM;
+class SHADER;
+
+class VERTEX_CONTAINER
+{
+public:
+ /**
+ * Function MakeContainer()
+ * Returns a pointer to a new container of an appropriate type.
+ */
+ static VERTEX_CONTAINER* MakeContainer( bool aCached );
+
+ virtual ~VERTEX_CONTAINER();
+
+ /**
+ * Function SetItem()
+ * sets the item in order to modify or finishes its current modifications.
+ * @param aItem is the item or NULL in case of finishing the item.
+ */
+ virtual void SetItem( VERTEX_ITEM* aItem ) = 0;
+
+ /**
+ * Function FinishItem()
+ * does the cleaning after adding an item.
+ */
+ virtual void FinishItem() {};
+
+ /**
+ * Function Allocate()
+ * returns allocated space (possibly resizing the reserved memory chunk or allocating a new
+ * chunk if it was not stored before) for the given number of vertices associated with the
+ * current item (set by SetItem()). The newly allocated space is added at the end of the chunk
+ * used by the current item and may serve to store new vertices.
+ * @param aSize is the number of vertices to be allocated.
+ * @return Pointer to the allocated space or NULL in case of failure.
+ */
+ virtual VERTEX* Allocate( unsigned int aSize ) = 0;
+
+ /**
+ * Function Delete()
+ * erases the selected item.
+ *
+ * @param aItem is the item to be erased.
+ */
+ virtual void Delete( VERTEX_ITEM* aItem ) = 0;
+
+ /**
+ * Function Clear()
+ * removes all the data stored in the container and restores its original state.
+ */
+ virtual void Clear() = 0;
+
+ /**
+ * Function GetAllVertices()
+ * returns all the vertices stored in the container. It is especially useful for transferring
+ * data to the GPU memory.
+ */
+ inline virtual VERTEX* GetAllVertices() const
+ {
+ return m_vertices;
+ }
+
+ /**
+ * Function GetVertices()
+ * returns vertices stored at the specific offset.
+ * @param aOffset is the offset.
+ */
+ virtual inline VERTEX* GetVertices( unsigned int aOffset ) const
+ {
+ return &m_vertices[aOffset];
+ }
+
+ /**
+ * Function GetSize()
+ * returns amount of vertices currently stored in the container.
+ */
+ virtual inline unsigned int GetSize() const
+ {
+ return m_currentSize;
+ }
+
+ /**
+ * Function IsDirty()
+ * returns information about container cache state. Clears the flag after calling the function.
+ * @return true in case the vertices have to be reuploaded.
+ */
+ inline bool IsDirty()
+ {
+ bool state = m_dirty;
+
+ m_dirty = false;
+
+ return state;
+ }
+
+ /**
+ * Function SetDirty()
+ * sets the dirty flag, so vertices in the container are going to be reuploaded to the GPU on
+ * the next frame.
+ */
+ inline void SetDirty()
+ {
+ m_dirty = true;
+ }
+
+protected:
+ VERTEX_CONTAINER( unsigned int aSize = defaultInitSize );
+
+ ///< How many vertices we can store in the container
+ unsigned int m_freeSpace;
+
+ ///< How big is the current container, expressed in vertices
+ unsigned int m_currentSize;
+
+ ///< Store the initial size, so it can be resized to this on Clear()
+ unsigned int m_initialSize;
+
+ ///< Actual storage memory (should be handled using malloc/realloc/free to speed up resizing)
+ VERTEX* m_vertices;
+
+ ///< State flags
+ bool m_failed;
+ bool m_dirty;
+
+ /**
+ * Function reservedSpace()
+ * returns size of the reserved memory space.
+ * @return Size of the reserved memory space (expressed as a number of vertices).
+ */
+ inline unsigned int reservedSpace()
+ {
+ return m_currentSize - m_freeSpace;
+ }
+
+ ///< Default initial size of a container (expressed in vertices)
+ static const unsigned int defaultInitSize = 1048576;
+};
+} // namespace KIGFX
+
+#endif /* VERTEX_CONTAINER_H_ */
diff --git a/include/gal/opengl/vertex_item.h b/include/gal/opengl/vertex_item.h
new file mode 100644
index 0000000..c5bf962
--- /dev/null
+++ b/include/gal/opengl/vertex_item.h
@@ -0,0 +1,103 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_item.h
+ * @brief Class to handle an item held in a container.
+ */
+
+#ifndef VERTEX_ITEM_H_
+#define VERTEX_ITEM_H_
+
+#include <gal/opengl/vertex_common.h>
+#include <gal/color4d.h>
+#include <cstddef>
+
+namespace KIGFX
+{
+class VERTEX_MANAGER;
+
+class VERTEX_ITEM
+{
+public:
+ friend class CACHED_CONTAINER;
+ friend class VERTEX_MANAGER;
+
+ VERTEX_ITEM( const VERTEX_MANAGER& aManager );
+ virtual ~VERTEX_ITEM();
+
+ /**
+ * Function GetSize()
+ * Returns information about number of vertices stored.
+ * @return Number of vertices.
+ */
+ inline unsigned int GetSize() const
+ {
+ return m_size;
+ }
+
+ /**
+ * Function GetOffset()
+ * Returns data offset in the container.
+ * @return Data offset expressed as a number of vertices.
+ */
+ inline unsigned int GetOffset() const
+ {
+ return m_offset;
+ }
+
+ /**
+ * Function GetVertices()
+ * Returns pointer to the data used by the VERTEX_ITEM.
+ */
+ VERTEX* GetVertices() const;
+
+private:
+ const VERTEX_MANAGER& m_manager;
+ unsigned int m_offset;
+ unsigned int m_size;
+
+ /**
+ * Function SetOffset()
+ * Sets data offset in the container.
+ * @param aOffset is the offset expressed as a number of vertices.
+ */
+ inline void setOffset( unsigned int aOffset )
+ {
+ m_offset = aOffset;
+ }
+
+ /**
+ * Function SetSize()
+ * Sets data size in the container.
+ * @param aSize is the size expressed as a number of vertices.
+ */
+ inline void setSize( unsigned int aSize )
+ {
+ m_size = aSize;
+ }
+};
+} // namespace KIGFX
+
+#endif /* VERTEX_ITEM_H_ */
diff --git a/include/gal/opengl/vertex_manager.h b/include/gal/opengl/vertex_manager.h
new file mode 100644
index 0000000..56c84a6
--- /dev/null
+++ b/include/gal/opengl/vertex_manager.h
@@ -0,0 +1,347 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file vertex_manager.h
+ * @brief Class to control vertex container and GPU with possibility of emulating old-style OpenGL
+ * 1.0 state machine using modern OpenGL methods.
+ */
+
+#ifndef VERTEX_MANAGER_H_
+#define VERTEX_MANAGER_H_
+
+#define GLM_FORCE_RADIANS
+#include <gal/opengl/glm/gtc/matrix_transform.hpp>
+#include <gal/opengl/glm/glm.hpp>
+#include <gal/opengl/vertex_common.h>
+#include <gal/color4d.h>
+#include <stack>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <wx/log.h>
+
+namespace KIGFX
+{
+class SHADER;
+class VERTEX_ITEM;
+class VERTEX_CONTAINER;
+class GPU_MANAGER;
+
+class VERTEX_MANAGER
+{
+public:
+ /**
+ * @brief Constructor.
+ *
+ * @param aCached says if vertices should be cached in GPU or system memory. For data that
+ * does not change every frame, it is better to store vertices in GPU memory.
+ */
+ VERTEX_MANAGER( bool aCached );
+
+ /**
+ * Function Vertex()
+ * adds a vertex with the given coordinates to the currently set item. Color & shader
+ * parameters stored in aVertex are ignored, instead color & shader set by Color() and
+ * Shader() functions are used. Vertex coordinates will have the current transformation
+ * matrix applied.
+ *
+ * @param aVertex contains vertex coordinates.
+ */
+ inline void Vertex( const VERTEX& aVertex ) const
+ {
+ Vertex( aVertex.x, aVertex.y, aVertex.z );
+ }
+
+ /**
+ * Function Vertex()
+ * adds a vertex with the given coordinates to the currently set item. Vertex coordinates will
+ * have the current transformation matrix applied.
+ *
+ * @param aX is the X coordinate of the new vertex.
+ * @param aY is the Y coordinate of the new vertex.
+ * @param aZ is the Z coordinate of the new vertex.
+ */
+ void Vertex( GLfloat aX, GLfloat aY, GLfloat aZ ) const;
+
+ /**
+ * Function Vertices()
+ * adds one or more vertices to the currently set item. It takes advantage of allocating memory
+ * in advance, so should be faster than adding vertices one by one. Color & shader
+ * parameters stored in aVertices are ignored, instead color & shader set by Color() and
+ * Shader() functions are used. All the vertex coordinates will have the current
+ * transformation matrix applied.
+ *
+ * @param aVertices contains vertices to be added
+ * @param aSize is the number of vertices to be added.
+ */
+ void Vertices( const VERTEX aVertices[], unsigned int aSize ) const;
+
+ /**
+ * Function Color()
+ * changes currently used color that will be applied to newly added vertices.
+ *
+ * @param aColor is the new color.
+ */
+ inline void Color( const COLOR4D& aColor )
+ {
+ m_color[0] = aColor.r * 255.0;
+ m_color[1] = aColor.g * 255.0;
+ m_color[2] = aColor.b * 255.0;
+ m_color[3] = aColor.a * 255.0;
+ }
+
+ /**
+ * Function Color()
+ * changes currently used color that will be applied to newly added vertices. It is the
+ * equivalent of glColor4f() function.
+ * @param aRed is the red component of the new color.
+ * @param aGreen is the green component of the new color.
+ * @param aBlue is the blue component of the new color.
+ * @param aAlpha is the alpha component of the new color.
+ */
+ inline void Color( GLfloat aRed, GLfloat aGreen, GLfloat aBlue, GLfloat aAlpha )
+ {
+ m_color[0] = aRed * 255.0;
+ m_color[1] = aGreen * 255.0;
+ m_color[2] = aBlue * 255.0;
+ m_color[3] = aAlpha * 255.0;
+ }
+
+ /**
+ * Function Shader()
+ * changes currently used shader and its parameters that will be applied to newly added
+ * vertices. Parameters depend on shader, for more information have a look at shaders source
+ * code.
+ * @see SHADER_TYPE
+ *
+ * @param aShaderType is the a shader type to be applied.
+ * @param aParam1 is the optional parameter for a shader.
+ * @param aParam2 is the optional parameter for a shader.
+ * @param aParam3 is the optional parameter for a shader.
+ */
+ inline void Shader( GLfloat aShaderType, GLfloat aParam1 = 0.0f,
+ GLfloat aParam2 = 0.0f, GLfloat aParam3 = 0.0f )
+ {
+ m_shader[0] = aShaderType;
+ m_shader[1] = aParam1;
+ m_shader[2] = aParam2;
+ m_shader[3] = aParam3;
+ }
+
+ /**
+ * Function Translate()
+ * multiplies the current matrix by a translation matrix, so newly vertices will be
+ * translated by the given vector. It is the equivalent of the glTranslatef() function.
+ *
+ * @param aX is the X coordinate of a translation vector.
+ * @param aY is the X coordinate of a translation vector.
+ * @param aZ is the X coordinate of a translation vector.
+ */
+ inline void Translate( GLfloat aX, GLfloat aY, GLfloat aZ )
+ {
+ m_transform = glm::translate( m_transform, glm::vec3( aX, aY, aZ ) );
+ }
+
+ /**
+ * Function Rotate()
+ * multiplies the current matrix by a rotation matrix, so the newly vertices will be
+ * rotated by the given angles. It is the equivalent of the glRotatef() function.
+ *
+ * @param aAngle is the angle of rotation, in radians.
+ * @param aX is a multiplier for the X axis
+ * @param aY is a multiplier for the Y axis
+ * @param aZ is a multiplier for the Z axis.
+ */
+ inline void Rotate( GLfloat aAngle, GLfloat aX, GLfloat aY, GLfloat aZ )
+ {
+ m_transform = glm::rotate( m_transform, aAngle, glm::vec3( aX, aY, aZ ) );
+ }
+
+ /**
+ * Function Scale()
+ * multiplies the current matrix by a scaling matrix, so the newly vertices will be
+ * scaled by the given factors. It is the equivalent of the glScalef() function.
+ *
+ * @param aX is the X axis scaling factor.
+ * @param aY is the Y axis scaling factor.
+ * @param aZ is the Z axis scaling factor.
+ */
+ inline void Scale( GLfloat aX, GLfloat aY, GLfloat aZ )
+ {
+ m_transform = glm::scale( m_transform, glm::vec3( aX, aY, aZ ) );
+ }
+
+ /**
+ * Function PushMatrix()
+ * pushes the current transformation matrix stack. It is the equivalent of the glPushMatrix()
+ * function.
+ */
+ inline void PushMatrix()
+ {
+ m_transformStack.push( m_transform );
+
+ // Every transformation starts with PushMatrix
+ m_noTransform = false;
+ }
+
+ /**
+ * Function PopMatrix()
+ * pops the current transformation matrix stack. It is the equivalent of the glPopMatrix()
+ * function.
+ */
+ void PopMatrix()
+ {
+ wxASSERT( !m_transformStack.empty() );
+
+ m_transform = m_transformStack.top();
+ m_transformStack.pop();
+
+ if( m_transformStack.empty() )
+ {
+ // We return back to the identity matrix, thus no vertex transformation is needed
+ m_noTransform = true;
+ }
+ }
+
+ /**
+ * Function SetItem()
+ * sets an item to start its modifications. After calling the function it is possible to add
+ * vertices using function Add().
+ *
+ * @param aItem is the item that is going to store vertices in the container.
+ */
+ void SetItem( VERTEX_ITEM& aItem ) const;
+
+ /**
+ * Function FinishItem()
+ * does the cleaning after adding an item.
+ */
+ void FinishItem() const;
+
+ /**
+ * Function FreeItem()
+ * frees the memory occupied by the item, so it is no longer stored in the container.
+ *
+ * @param aItem is the item to be freed
+ */
+ void FreeItem( VERTEX_ITEM& aItem ) const;
+
+ /**
+ * Function ChangeItemColor()
+ * changes the color of all vertices owned by an item.
+ *
+ * @param aItem is the item to change.
+ * @param aColor is the new color to be applied.
+ */
+ void ChangeItemColor( const VERTEX_ITEM& aItem, const COLOR4D& aColor ) const;
+
+ /**
+ * Function ChangeItemDepth()
+ * changes the depth of all vertices owned by an item.
+ *
+ * @param aItem is the item to change.
+ * @param aDepth is the new color to be applied.
+ */
+ void ChangeItemDepth( const VERTEX_ITEM& aItem, GLfloat aDepth ) const;
+
+ /**
+ * Function GetVertices()
+ * returns a pointer to the vertices owned by an item.
+ *
+ * @param aItem is the owner of vertices that are going to be returned.
+ * @return Pointer to the vertices or NULL if the item is not stored at the container.
+ */
+ VERTEX* GetVertices( const VERTEX_ITEM& aItem ) const;
+
+ const glm::mat4& GetTransformation() const
+ {
+ return m_transform;
+ }
+
+ /**
+ * Function SetShader()
+ * sets a shader program that is going to be used during rendering.
+ * @param aShader is the object containing compiled and linked shader program.
+ */
+ void SetShader( SHADER& aShader ) const;
+
+ /**
+ * Function Clear()
+ * removes all the stored vertices from the container.
+ */
+ void Clear() const;
+
+ /**
+ * Function BeginDrawing()
+ * prepares buffers and items to start drawing.
+ */
+ void BeginDrawing() const;
+
+ /**
+ * Function DrawItem()
+ * draws an item to the buffer.
+ *
+ * @param aItem is the item to be drawn.
+ */
+ void DrawItem( const VERTEX_ITEM& aItem ) const;
+
+ /**
+ * Function EndDrawing()
+ * finishes drawing operations.
+ */
+ void EndDrawing() const;
+
+protected:
+ /**
+ * Function putVertex()
+ * applies all transformation to the given coordinates and store them at the specified target.
+ *
+ * @param aTarget is the place where the new vertex is going to be stored (it has to be
+ * allocated first).
+ * @param aX is the X coordinate of the new vertex.
+ * @param aY is the Y coordinate of the new vertex.
+ * @param aZ is the Z coordinate of the new vertex.
+ */
+ void putVertex( VERTEX& aTarget, GLfloat aX, GLfloat aY, GLfloat aZ ) const;
+
+ /// Container for vertices, may be cached or noncached
+ boost::shared_ptr<VERTEX_CONTAINER> m_container;
+ /// GPU manager for data transfers and drawing operations
+ boost::shared_ptr<GPU_MANAGER> m_gpu;
+
+ /// State machine variables
+ /// True in case there is no need to transform vertices
+ bool m_noTransform;
+ /// Currently used transform matrix
+ glm::mat4 m_transform;
+ /// Stack of transformation matrices, used for Push/PopMatrix
+ std::stack<glm::mat4> m_transformStack;
+ /// Currently used color
+ GLubyte m_color[ColorStride];
+ /// Currently used shader and its parameters
+ GLfloat m_shader[ShaderStride];
+};
+
+} // namespace KIGFX
+
+#endif /* VERTEX_MANAGER_H_ */
diff --git a/include/gal/stroke_font.h b/include/gal/stroke_font.h
new file mode 100644
index 0000000..2cea7fd
--- /dev/null
+++ b/include/gal/stroke_font.h
@@ -0,0 +1,226 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Stroke font class
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef STROKE_FONT_H_
+#define STROKE_FONT_H_
+
+#include <deque>
+#include <utf8.h>
+
+#include <eda_text.h>
+
+#include <math/box2.h>
+
+namespace KIGFX
+{
+class GAL;
+
+typedef std::deque< std::deque<VECTOR2D> > GLYPH;
+typedef std::vector<GLYPH> GLYPH_LIST;
+
+/**
+ * @brief Class STROKE_FONT implements stroke font drawing.
+ *
+ * A stroke font is composed of lines.
+ */
+class STROKE_FONT
+{
+public:
+ /// Constructor
+ STROKE_FONT( GAL* aGal );
+
+ /**
+ * @brief Load the new stroke font.
+ *
+ * @param aNewStrokeFont is the pointer to the font data.
+ * @param aNewStrokeFontSize is the size of the font data.
+ * @return True, if the font was successfully loaded, else false.
+ */
+ bool LoadNewStrokeFont( const char* const aNewStrokeFont[], int aNewStrokeFontSize );
+
+ /**
+ * @brief Draw a string.
+ *
+ * @param aText is the text to be drawn.
+ * @param aPosition is the text position in world coordinates.
+ * @param aRotationAngle is the text rotation angle.
+ */
+ void Draw( const UTF8& aText, const VECTOR2D& aPosition, double aRotationAngle );
+
+ /**
+ * @brief Set the glyph size.
+ *
+ * @param aGlyphSize is the glyph size.
+ */
+ inline void SetGlyphSize( const VECTOR2D aGlyphSize )
+ {
+ m_glyphSize = aGlyphSize;
+ }
+
+ /**
+ * @brief Set a bold property of current font.
+ *
+ * @param aBold tells if the font should be bold or not.
+ */
+ inline void SetBold( const bool aBold )
+ {
+ m_bold = aBold;
+ }
+
+ /**
+ * @brief Set an italic property of current font.
+ *
+ * @param aItalic tells if the font should be italic or not.
+ */
+ inline void SetItalic( const bool aItalic )
+ {
+ m_italic = aItalic;
+ }
+
+ /**
+ * @brief Set a mirrored property of text.
+ *
+ * @param aMirrored tells if the text should be mirrored or not.
+ */
+ inline void SetMirrored( const bool aMirrored )
+ {
+ m_mirrored = aMirrored;
+ }
+
+ /**
+ * @brief Set the horizontal justify for text drawing.
+ *
+ * @param aHorizontalJustify is the horizontal justify value.
+ */
+ inline void SetHorizontalJustify( const EDA_TEXT_HJUSTIFY_T aHorizontalJustify )
+ {
+ m_horizontalJustify = aHorizontalJustify;
+ }
+
+ /**
+ * @brief Set the vertical justify for text drawing.
+ *
+ * @param aVerticalJustify is the vertical justify value.
+ */
+ inline void SetVerticalJustify( const EDA_TEXT_VJUSTIFY_T aVerticalJustify )
+ {
+ m_verticalJustify = aVerticalJustify;
+ }
+
+ /**
+ * Function SetGAL
+ * Changes Graphics Abstraction Layer used for drawing items for a new one.
+ * @param aGal is the new GAL instance.
+ */
+ void SetGAL( GAL* aGal )
+ {
+ m_gal = aGal;
+ }
+
+private:
+ GAL* m_gal; ///< Pointer to the GAL
+ GLYPH_LIST m_glyphs; ///< Glyph list
+ std::vector<BOX2D> m_glyphBoundingBoxes; ///< Bounding boxes of the glyphs
+ VECTOR2D m_glyphSize; ///< Size of the glyphs
+ EDA_TEXT_HJUSTIFY_T m_horizontalJustify; ///< Horizontal justification
+ EDA_TEXT_VJUSTIFY_T m_verticalJustify; ///< Vertical justification
+ bool m_bold, m_italic, m_mirrored, m_overbar; ///< Properties of text
+
+ /**
+ * @brief Returns a single line height using current settings.
+ *
+ * @return The line height.
+ */
+ int getInterline() const;
+
+ /**
+ * @brief Compute the bounding box of a given glyph.
+ *
+ * @param aGlyph is the glyph.
+ * @param aGlyphBoundingX is the x-component of the bounding box size.
+ * @return is the complete bounding box size.
+ */
+ BOX2D computeBoundingBox( const GLYPH& aGlyph, const VECTOR2D& aGlyphBoundingX ) const;
+
+ /**
+ * @brief Draws a single line of text. Multiline texts should be split before using the
+ * function.
+ *
+ * @param aText is the text to be drawn.
+ */
+ void drawSingleLineText( const UTF8& aText );
+
+ /**
+ * @brief Compute the size of a given text.
+ *
+ * @param aText is the text string.
+ * @return is the text size.
+ */
+ VECTOR2D computeTextSize( const UTF8& aText ) const;
+
+ /**
+ * @brief Returns number of lines for a given text.
+ *
+ * @param aText is the text to be checked.
+ * @return unsigned - The number of lines in aText.
+ */
+ inline unsigned linesCount( const UTF8& aText ) const
+ {
+ if( aText.empty() )
+ return 0; // std::count does not work well with empty strings
+ else
+ // aText.end() - 1 is to skip a newline character that is potentially at the end
+ return std::count( aText.begin(), aText.end() - 1, '\n' ) + 1;
+ }
+
+public:
+ // These members are declared public only to be (temporary, I am expecting)
+ // used in legacy canvas, to avoid multiple declarations of the same constants,
+ // having multiple declarations of the same constants is really a thing to avoid.
+ //
+ // They will be private later, when the legacy canvas is removed.
+
+ ///> Factor that determines the pitch between 2 lines.
+ static const double INTERLINE_PITCH_RATIO;
+
+ ///> Factor that determines relative height of overbar.
+ static const double OVERBAR_HEIGHT;
+
+ ///> Factor that determines relative line width for bold text.
+ static const double BOLD_FACTOR;
+
+ ///> Scale factor for a glyph
+ static const double STROKE_FONT_SCALE;
+
+ ///> Tilt factor for italic style (the is is the scaling factor
+ ///> on dY relative coordinates to give a tilst shape
+ static const double ITALIC_TILT;
+};
+} // namespace KIGFX
+
+#endif // STROKE_FONT_H_
diff --git a/include/geometry/rtree.h b/include/geometry/rtree.h
new file mode 100644
index 0000000..35ccadb
--- /dev/null
+++ b/include/geometry/rtree.h
@@ -0,0 +1,1905 @@
+//TITLE
+//
+// R-TREES: A DYNAMIC INDEX STRUCTURE FOR SPATIAL SEARCHING
+//
+//DESCRIPTION
+//
+// A C++ templated version of the RTree algorithm.
+// For more information please read the comments in RTree.h
+//
+//AUTHORS
+//
+// * 1983 Original algorithm and test code by Antonin Guttman and Michael Stonebraker, UC Berkely
+// * 1994 ANCI C ported from original test code by Melinda Green - melinda@superliminal.com
+// * 1995 Sphere volume fix for degeneracy problem submitted by Paul Brook
+// * 2004 Templated C++ port by Greg Douglas
+// * 2013 CERN (www.cern.ch)
+//
+//LICENSE:
+//
+// Entirely free for all uses. Enjoy!
+
+#ifndef RTREE_H
+#define RTREE_H
+
+// NOTE This file compiles under MSVC 6 SP5 and MSVC .Net 2003 it may not work on other compilers without modification.
+
+// NOTE These next few lines may be win32 specific, you may need to modify them to compile on other platform
+#include <stdio.h>
+#include <math.h>
+#include <assert.h>
+#include <stdlib.h>
+
+#define ASSERT assert // RTree uses ASSERT( condition )
+#ifndef rMin
+ #define rMin std::min
+#endif // rMin
+#ifndef rMax
+ #define rMax std::max
+#endif // rMax
+
+//
+// RTree.h
+//
+
+#define RTREE_TEMPLATE template <class DATATYPE, class ELEMTYPE, int NUMDIMS, \
+ class ELEMTYPEREAL, int TMAXNODES, int TMINNODES>
+#define RTREE_SEARCH_TEMPLATE template <class DATATYPE, class ELEMTYPE, int NUMDIMS, \
+ class ELEMTYPEREAL, int TMAXNODES, int TMINNODES, class VISITOR>
+#define RTREE_QUAL RTree<DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, \
+ TMINNODES>
+#define RTREE_SEARCH_QUAL RTree<DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, \
+ TMINNODES, VISITOR>
+
+#define RTREE_DONT_USE_MEMPOOLS // This version does not contain a fixed memory allocator, fill in lines with EXAMPLE to implement one.
+#define RTREE_USE_SPHERICAL_VOLUME // Better split classification, may be slower on some systems
+
+// Fwd decl
+class RTFileStream; // File I/O helper class, look below for implementation and notes.
+
+
+/// \class RTree
+/// Implementation of RTree, a multidimensional bounding rectangle tree.
+/// Example usage: For a 3-dimensional tree use RTree<Object*, float, 3> myTree;
+///
+/// This modified, templated C++ version by Greg Douglas at Auran (http://www.auran.com)
+///
+/// DATATYPE Referenced data, should be int, void*, obj* etc. no larger than sizeof<void*> and simple type
+/// ELEMTYPE Type of element such as int or float
+/// NUMDIMS Number of dimensions such as 2 or 3
+/// ELEMTYPEREAL Type of element that allows fractional and large values such as float or double, for use in volume calcs
+///
+/// NOTES: Inserting and removing data requires the knowledge of its constant Minimal Bounding Rectangle.
+/// This version uses new/delete for nodes, I recommend using a fixed size allocator for efficiency.
+/// Instead of using a callback function for returned results, I recommend and efficient pre-sized, grow-only memory
+/// array similar to MFC CArray or STL Vector for returning search query result.
+///
+template <class DATATYPE, class ELEMTYPE, int NUMDIMS,
+ class ELEMTYPEREAL = ELEMTYPE, int TMAXNODES = 8, int TMINNODES = TMAXNODES / 2>
+class RTree
+{
+protected:
+
+ struct Node; // Fwd decl. Used by other internal structs and iterator
+public:
+
+ // These constant must be declared after Branch and before Node struct
+ // Stuck up here for MSVC 6 compiler. NSVC .NET 2003 is much happier.
+ enum {
+ MAXNODES = TMAXNODES, ///< Max elements in node
+ MINNODES = TMINNODES, ///< Min elements in node
+ };
+
+ struct Statistics {
+ int maxDepth;
+ int avgDepth;
+
+ int maxNodeLoad;
+ int avgNodeLoad;
+ int totalItems;
+ };
+
+public:
+
+ RTree();
+ virtual ~RTree();
+
+ /// Insert entry
+ /// \param a_min Min of bounding rect
+ /// \param a_max Max of bounding rect
+ /// \param a_dataId Positive Id of data. Maybe zero, but negative numbers not allowed.
+ void Insert( const ELEMTYPE a_min[NUMDIMS],
+ const ELEMTYPE a_max[NUMDIMS],
+ const DATATYPE& a_dataId );
+
+ /// Remove entry
+ /// \param a_min Min of bounding rect
+ /// \param a_max Max of bounding rect
+ /// \param a_dataId Positive Id of data. Maybe zero, but negative numbers not allowed.
+ void Remove( const ELEMTYPE a_min[NUMDIMS],
+ const ELEMTYPE a_max[NUMDIMS],
+ const DATATYPE& a_dataId );
+
+ /// Find all within search rectangle
+ /// \param a_min Min of search bounding rect
+ /// \param a_max Max of search bounding rect
+ /// \param a_resultCallback Callback function to return result. Callback should return 'true' to continue searching
+ /// \param a_context User context to pass as parameter to a_resultCallback
+ /// \return Returns the number of entries found
+ int Search( const ELEMTYPE a_min[NUMDIMS],
+ const ELEMTYPE a_max[NUMDIMS],
+ bool a_resultCallback( DATATYPE a_data, void* a_context ),
+ void* a_context );
+
+ template <class VISITOR>
+ int Search( const ELEMTYPE a_min[NUMDIMS], const ELEMTYPE a_max[NUMDIMS], VISITOR& a_visitor )
+ {
+ #ifdef _DEBUG
+
+ for( int index = 0; index<NUMDIMS; ++index )
+ {
+ ASSERT( a_min[index] <= a_max[index] );
+ }
+
+ #endif // _DEBUG
+
+ Rect rect;
+
+ for( int axis = 0; axis<NUMDIMS; ++axis )
+ {
+ rect.m_min[axis] = a_min[axis];
+ rect.m_max[axis] = a_max[axis];
+ }
+
+
+ // NOTE: May want to return search result another way, perhaps returning the number of found elements here.
+ int cnt;
+
+ Search( m_root, &rect, a_visitor, cnt );
+
+ return cnt;
+ }
+
+ /// Calculate Statistics
+
+ Statistics CalcStats();
+
+ /// Remove all entries from tree
+ void RemoveAll();
+
+ /// Count the data elements in this container. This is slow as no internal counter is maintained.
+ int Count();
+
+ /// Load tree contents from file
+ bool Load( const char* a_fileName );
+
+ /// Load tree contents from stream
+ bool Load( RTFileStream& a_stream );
+
+
+ /// Save tree contents to file
+ bool Save( const char* a_fileName );
+
+ /// Save tree contents to stream
+ bool Save( RTFileStream& a_stream );
+
+ /// Find the nearest neighbor of a specific point.
+ /// It uses the MINDIST method, simplifying the one from "R-Trees: Theory and Applications" by Yannis Manolopoulos et al.
+ /// The bounding rectangle is used to calculate the distance to the DATATYPE.
+ /// \param a_point point to start the search
+ /// \return Returns the DATATYPE located closest to a_point, 0 if the tree is empty.
+ DATATYPE NearestNeighbor( const ELEMTYPE a_point[NUMDIMS] );
+
+ /// Find the nearest neighbor of a specific point.
+ /// It uses the MINDIST method, simplifying the one from "R-Trees: Theory and Applications" by Yannis Manolopoulos et al.
+ /// It receives a callback function to calculate the distance to a DATATYPE object, instead of using the bounding rectangle.
+ /// \param a_point point to start the search
+ /// \param a_squareDistanceCallback function that performs the square distance calculation for the selected DATATYPE.
+ /// \param a_squareDistance Pointer in which the square distance to the nearest neighbour will be returned.
+ /// \return Returns the DATATYPE located closest to a_point, 0 if the tree is empty.
+ DATATYPE NearestNeighbor( const ELEMTYPE a_point[NUMDIMS],
+ ELEMTYPE a_squareDistanceCallback( const ELEMTYPE a_point[NUMDIMS], DATATYPE a_data ),
+ ELEMTYPE* a_squareDistance );
+
+ /// Iterator is not remove safe.
+ class Iterator
+ {
+ private:
+
+ enum { MAX_STACK = 32 }; // Max stack size. Allows almost n^32 where n is number of branches in node
+
+ struct StackElement
+ {
+ Node* m_node;
+ int m_branchIndex;
+ };
+ public:
+
+ Iterator() { Init(); }
+
+ ~Iterator() { }
+
+ /// Is iterator invalid
+ bool IsNull() { return m_tos <= 0; }
+
+ /// Is iterator pointing to valid data
+ bool IsNotNull() { return m_tos > 0; }
+
+ /// Access the current data element. Caller must be sure iterator is not NULL first.
+ DATATYPE& operator*()
+ {
+ ASSERT( IsNotNull() );
+ StackElement& curTos = m_stack[m_tos - 1];
+ return curTos.m_node->m_branch[curTos.m_branchIndex].m_data;
+ }
+
+ /// Access the current data element. Caller must be sure iterator is not NULL first.
+ const DATATYPE& operator*() const
+ {
+ ASSERT( IsNotNull() );
+ StackElement& curTos = m_stack[m_tos - 1];
+ return curTos.m_node->m_branch[curTos.m_branchIndex].m_data;
+ }
+
+ /// Find the next data element
+ bool operator++() { return FindNextData(); }
+
+ /// Get the bounds for this node
+ void GetBounds( ELEMTYPE a_min[NUMDIMS], ELEMTYPE a_max[NUMDIMS] )
+ {
+ ASSERT( IsNotNull() );
+ StackElement& curTos = m_stack[m_tos - 1];
+ Branch& curBranch = curTos.m_node->m_branch[curTos.m_branchIndex];
+
+ for( int index = 0; index < NUMDIMS; ++index )
+ {
+ a_min[index] = curBranch.m_rect.m_min[index];
+ a_max[index] = curBranch.m_rect.m_max[index];
+ }
+ }
+
+ private:
+
+ /// Reset iterator
+ void Init() { m_tos = 0; }
+
+ /// Find the next data element in the tree (For internal use only)
+ bool FindNextData()
+ {
+ for( ; ; )
+ {
+ if( m_tos <= 0 )
+ {
+ return false;
+ }
+
+ StackElement curTos = Pop(); // Copy stack top cause it may change as we use it
+
+ if( curTos.m_node->IsLeaf() )
+ {
+ // Keep walking through data while we can
+ if( curTos.m_branchIndex + 1 < curTos.m_node->m_count )
+ {
+ // There is more data, just point to the next one
+ Push( curTos.m_node, curTos.m_branchIndex + 1 );
+ return true;
+ }
+
+ // No more data, so it will fall back to previous level
+ }
+ else
+ {
+ if( curTos.m_branchIndex + 1 < curTos.m_node->m_count )
+ {
+ // Push sibling on for future tree walk
+ // This is the 'fall back' node when we finish with the current level
+ Push( curTos.m_node, curTos.m_branchIndex + 1 );
+ }
+
+ // Since cur node is not a leaf, push first of next level to get deeper into the tree
+ Node* nextLevelnode = curTos.m_node->m_branch[curTos.m_branchIndex].m_child;
+ Push( nextLevelnode, 0 );
+
+ // If we pushed on a new leaf, exit as the data is ready at TOS
+ if( nextLevelnode->IsLeaf() )
+ {
+ return true;
+ }
+ }
+ }
+ }
+
+ /// Push node and branch onto iteration stack (For internal use only)
+ void Push( Node* a_node, int a_branchIndex )
+ {
+ m_stack[m_tos].m_node = a_node;
+ m_stack[m_tos].m_branchIndex = a_branchIndex;
+ ++m_tos;
+ ASSERT( m_tos <= MAX_STACK );
+ }
+
+ /// Pop element off iteration stack (For internal use only)
+ StackElement& Pop()
+ {
+ ASSERT( m_tos > 0 );
+ --m_tos;
+ return m_stack[m_tos];
+ }
+
+ StackElement m_stack[MAX_STACK]; ///< Stack as we are doing iteration instead of recursion
+ int m_tos; ///< Top Of Stack index
+
+ friend class RTree; // Allow hiding of non-public functions while allowing manipulation by logical owner
+ };
+
+
+ /// Get 'first' for iteration
+ void GetFirst( Iterator& a_it )
+ {
+ a_it.Init();
+ Node* first = m_root;
+
+ while( first )
+ {
+ if( first->IsInternalNode() && first->m_count > 1 )
+ {
+ a_it.Push( first, 1 ); // Descend sibling branch later
+ }
+ else if( first->IsLeaf() )
+ {
+ if( first->m_count )
+ {
+ a_it.Push( first, 0 );
+ }
+
+ break;
+ }
+
+ first = first->m_branch[0].m_child;
+ }
+ }
+
+ /// Get Next for iteration
+ void GetNext( Iterator& a_it ) { ++a_it; }
+
+ /// Is iterator NULL, or at end?
+ bool IsNull( Iterator& a_it ) { return a_it.IsNull(); }
+
+ /// Get object at iterator position
+ DATATYPE& GetAt( Iterator& a_it ) { return *a_it; }
+protected:
+
+ /// Minimal bounding rectangle (n-dimensional)
+ struct Rect
+ {
+ ELEMTYPE m_min[NUMDIMS]; ///< Min dimensions of bounding box
+ ELEMTYPE m_max[NUMDIMS]; ///< Max dimensions of bounding box
+ };
+
+ /// May be data or may be another subtree
+ /// The parents level determines this.
+ /// If the parents level is 0, then this is data
+ struct Branch
+ {
+ Rect m_rect; ///< Bounds
+ union
+ {
+ Node* m_child; ///< Child node
+ DATATYPE m_data; ///< Data Id or Ptr
+ };
+ };
+
+ /// Node for each branch level
+ struct Node
+ {
+ bool IsInternalNode() { return m_level > 0; } // Not a leaf, but a internal node
+ bool IsLeaf() { return m_level == 0; } // A leaf, contains data
+
+ int m_count; ///< Count
+ int m_level; ///< Leaf is zero, others positive
+ Branch m_branch[MAXNODES]; ///< Branch
+ };
+
+ /// A link list of nodes for reinsertion after a delete operation
+ struct ListNode
+ {
+ ListNode* m_next; ///< Next in list
+ Node* m_node; ///< Node
+ };
+
+ /// Variables for finding a split partition
+ struct PartitionVars
+ {
+ int m_partition[MAXNODES + 1];
+ int m_total;
+ int m_minFill;
+ int m_taken[MAXNODES + 1];
+ int m_count[2];
+ Rect m_cover[2];
+ ELEMTYPEREAL m_area[2];
+
+ Branch m_branchBuf[MAXNODES + 1];
+ int m_branchCount;
+ Rect m_coverSplit;
+ ELEMTYPEREAL m_coverSplitArea;
+ };
+
+ /// Data structure used for Nearest Neighbor search implementation
+ struct NNNode
+ {
+ Branch m_branch;
+ ELEMTYPE minDist;
+ bool isLeaf;
+ };
+
+ Node* AllocNode();
+ void FreeNode( Node* a_node );
+ void InitNode( Node* a_node );
+ void InitRect( Rect* a_rect );
+ bool InsertRectRec( Rect* a_rect,
+ const DATATYPE& a_id,
+ Node* a_node,
+ Node** a_newNode,
+ int a_level );
+ bool InsertRect( Rect* a_rect, const DATATYPE& a_id, Node** a_root, int a_level );
+ Rect NodeCover( Node* a_node );
+ bool AddBranch( Branch* a_branch, Node* a_node, Node** a_newNode );
+ void DisconnectBranch( Node* a_node, int a_index );
+ int PickBranch( Rect* a_rect, Node* a_node );
+ Rect CombineRect( Rect* a_rectA, Rect* a_rectB );
+ void SplitNode( Node* a_node, Branch* a_branch, Node** a_newNode );
+ ELEMTYPEREAL RectSphericalVolume( Rect* a_rect );
+ ELEMTYPEREAL RectVolume( Rect* a_rect );
+ ELEMTYPEREAL CalcRectVolume( Rect* a_rect );
+ void GetBranches( Node* a_node, Branch* a_branch, PartitionVars* a_parVars );
+ void ChoosePartition( PartitionVars* a_parVars, int a_minFill );
+ void LoadNodes( Node* a_nodeA, Node* a_nodeB, PartitionVars* a_parVars );
+ void InitParVars( PartitionVars* a_parVars, int a_maxRects, int a_minFill );
+ void PickSeeds( PartitionVars* a_parVars );
+ void Classify( int a_index, int a_group, PartitionVars* a_parVars );
+ bool RemoveRect( Rect* a_rect, const DATATYPE& a_id, Node** a_root );
+ bool RemoveRectRec( Rect* a_rect,
+ const DATATYPE& a_id,
+ Node* a_node,
+ ListNode** a_listNode );
+ ListNode* AllocListNode();
+ void FreeListNode( ListNode* a_listNode );
+ bool Overlap( Rect* a_rectA, Rect* a_rectB );
+ void ReInsert( Node* a_node, ListNode** a_listNode );
+ ELEMTYPE MinDist( const ELEMTYPE a_point[NUMDIMS], Rect* a_rect );
+ void InsertNNListSorted( std::vector<NNNode*>* nodeList, NNNode* newNode );
+
+ bool Search( Node * a_node, Rect * a_rect, int& a_foundCount, bool a_resultCallback(
+ DATATYPE a_data,
+ void* a_context ), void* a_context );
+
+ template <class VISITOR>
+ bool Search( Node* a_node, Rect* a_rect, VISITOR& a_visitor, int& a_foundCount )
+ {
+ ASSERT( a_node );
+ ASSERT( a_node->m_level >= 0 );
+ ASSERT( a_rect );
+
+ if( a_node->IsInternalNode() ) // This is an internal node in the tree
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( Overlap( a_rect, &a_node->m_branch[index].m_rect ) )
+ {
+ if( !Search( a_node->m_branch[index].m_child, a_rect, a_visitor, a_foundCount ) )
+ {
+ return false; // Don't continue searching
+ }
+ }
+ }
+ }
+ else // This is a leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( Overlap( a_rect, &a_node->m_branch[index].m_rect ) )
+ {
+ DATATYPE& id = a_node->m_branch[index].m_data;
+
+ if( !a_visitor( id ) )
+ return false;
+
+ a_foundCount++;
+ }
+ }
+ }
+
+ return true; // Continue searching
+ }
+
+ void RemoveAllRec( Node* a_node );
+ void Reset();
+ void CountRec( Node* a_node, int& a_count );
+
+ bool SaveRec( Node* a_node, RTFileStream& a_stream );
+ bool LoadRec( Node* a_node, RTFileStream& a_stream );
+
+ Node* m_root; ///< Root of tree
+ ELEMTYPEREAL m_unitSphereVolume; ///< Unit sphere constant for required number of dimensions
+};
+
+
+// Because there is not stream support, this is a quick and dirty file I/O helper.
+// Users will likely replace its usage with a Stream implementation from their favorite API.
+class RTFileStream
+{
+ FILE* m_file;
+public:
+
+
+ RTFileStream()
+ {
+ m_file = NULL;
+ }
+
+ ~RTFileStream()
+ {
+ Close();
+ }
+
+ bool OpenRead( const char* a_fileName )
+ {
+ m_file = fopen( a_fileName, "rb" );
+
+ if( !m_file )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool OpenWrite( const char* a_fileName )
+ {
+ m_file = fopen( a_fileName, "wb" );
+
+ if( !m_file )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ void Close()
+ {
+ if( m_file )
+ {
+ fclose( m_file );
+ m_file = NULL;
+ }
+ }
+
+ template <typename TYPE>
+ size_t Write( const TYPE& a_value )
+ {
+ ASSERT( m_file );
+ return fwrite( (void*) &a_value, sizeof(a_value), 1, m_file );
+ }
+
+ template <typename TYPE>
+ size_t WriteArray( const TYPE* a_array, int a_count )
+ {
+ ASSERT( m_file );
+ return fwrite( (void*) a_array, sizeof(TYPE) * a_count, 1, m_file );
+ }
+
+ template <typename TYPE>
+ size_t Read( TYPE& a_value )
+ {
+ ASSERT( m_file );
+ return fread( (void*) &a_value, sizeof(a_value), 1, m_file );
+ }
+
+ template <typename TYPE>
+ size_t ReadArray( TYPE* a_array, int a_count )
+ {
+ ASSERT( m_file );
+ return fread( (void*) a_array, sizeof(TYPE) * a_count, 1, m_file );
+ }
+};
+
+
+RTREE_TEMPLATE RTREE_QUAL::RTree()
+{
+ ASSERT( MAXNODES > MINNODES );
+ ASSERT( MINNODES > 0 );
+
+
+ // We only support machine word size simple data type eg. integer index or object pointer.
+ // Since we are storing as union with non data branch
+ ASSERT( sizeof(DATATYPE) == sizeof(void*) || sizeof(DATATYPE) == sizeof(int) );
+
+ // Precomputed volumes of the unit spheres for the first few dimensions
+ const float UNIT_SPHERE_VOLUMES[] =
+ {
+ 0.000000f, 2.000000f, 3.141593f, // Dimension 0,1,2
+ 4.188790f, 4.934802f, 5.263789f, // Dimension 3,4,5
+ 5.167713f, 4.724766f, 4.058712f, // Dimension 6,7,8
+ 3.298509f, 2.550164f, 1.884104f, // Dimension 9,10,11
+ 1.335263f, 0.910629f, 0.599265f, // Dimension 12,13,14
+ 0.381443f, 0.235331f, 0.140981f, // Dimension 15,16,17
+ 0.082146f, 0.046622f, 0.025807f, // Dimension 18,19,20
+ };
+
+ m_root = AllocNode();
+ m_root->m_level = 0;
+ m_unitSphereVolume = (ELEMTYPEREAL) UNIT_SPHERE_VOLUMES[NUMDIMS];
+}
+
+
+RTREE_TEMPLATE
+RTREE_QUAL::~RTree() {
+ Reset(); // Free, or reset node memory
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::Insert( const ELEMTYPE a_min[NUMDIMS],
+ const ELEMTYPE a_max[NUMDIMS],
+ const DATATYPE& a_dataId )
+{
+#ifdef _DEBUG
+
+ for( int index = 0; index<NUMDIMS; ++index )
+ {
+ ASSERT( a_min[index] <= a_max[index] );
+ }
+
+#endif // _DEBUG
+
+ Rect rect;
+
+ for( int axis = 0; axis<NUMDIMS; ++axis )
+ {
+ rect.m_min[axis] = a_min[axis];
+ rect.m_max[axis] = a_max[axis];
+ }
+
+ InsertRect( &rect, a_dataId, &m_root, 0 );
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::Remove( const ELEMTYPE a_min[NUMDIMS],
+ const ELEMTYPE a_max[NUMDIMS],
+ const DATATYPE& a_dataId )
+{
+#ifdef _DEBUG
+
+ for( int index = 0; index<NUMDIMS; ++index )
+ {
+ ASSERT( a_min[index] <= a_max[index] );
+ }
+
+#endif // _DEBUG
+
+ Rect rect;
+
+ for( int axis = 0; axis<NUMDIMS; ++axis )
+ {
+ rect.m_min[axis] = a_min[axis];
+ rect.m_max[axis] = a_max[axis];
+ }
+
+ RemoveRect( &rect, a_dataId, &m_root );
+}
+
+
+RTREE_TEMPLATE
+int RTREE_QUAL::Search( const ELEMTYPE a_min[NUMDIMS],
+ const ELEMTYPE a_max[NUMDIMS],
+ bool a_resultCallback( DATATYPE a_data, void* a_context ),
+ void* a_context )
+{
+#ifdef _DEBUG
+
+ for( int index = 0; index<NUMDIMS; ++index )
+ {
+ ASSERT( a_min[index] <= a_max[index] );
+ }
+
+#endif // _DEBUG
+
+ Rect rect;
+
+ for( int axis = 0; axis<NUMDIMS; ++axis )
+ {
+ rect.m_min[axis] = a_min[axis];
+ rect.m_max[axis] = a_max[axis];
+ }
+
+ // NOTE: May want to return search result another way, perhaps returning the number of found elements here.
+
+ int foundCount = 0;
+ Search( m_root, &rect, foundCount, a_resultCallback, a_context );
+
+ return foundCount;
+}
+
+
+RTREE_TEMPLATE
+DATATYPE RTREE_QUAL::NearestNeighbor( const ELEMTYPE a_point[NUMDIMS] )
+{
+ return this->NearestNeighbor( a_point, 0, 0 );
+}
+
+
+RTREE_TEMPLATE
+DATATYPE RTREE_QUAL::NearestNeighbor( const ELEMTYPE a_point[NUMDIMS],
+ ELEMTYPE a_squareDistanceCallback( const ELEMTYPE a_point[NUMDIMS], DATATYPE a_data ),
+ ELEMTYPE* a_squareDistance )
+{
+ typedef typename std::vector<NNNode*>::iterator iterator;
+ std::vector<NNNode*> nodeList;
+ Node* node = m_root;
+ NNNode* closestNode = 0;
+ while( !closestNode || !closestNode->isLeaf )
+ {
+ //check every node on this level
+ for( int index = 0; index < node->m_count; ++index )
+ {
+ NNNode* newNode = new NNNode;
+ newNode->isLeaf = node->IsLeaf();
+ newNode->m_branch = node->m_branch[index];
+ if( newNode->isLeaf && a_squareDistanceCallback )
+ newNode->minDist = a_squareDistanceCallback( a_point, newNode->m_branch.m_data );
+ else
+ newNode->minDist = this->MinDist( a_point, &(node->m_branch[index].m_rect) );
+
+ //TODO: a custom list could be more efficient than a vector
+ this->InsertNNListSorted( &nodeList, newNode );
+ }
+ if( nodeList.size() == 0 )
+ {
+ return 0;
+ }
+ closestNode = nodeList.back();
+ node = closestNode->m_branch.m_child;
+ nodeList.pop_back();
+ free(closestNode);
+ }
+
+ // free memory used for remaining NNNodes in nodeList
+ for( iterator iter = nodeList.begin(); iter != nodeList.end(); ++iter )
+ {
+ NNNode* node = *iter;
+ free(node);
+ }
+
+ *a_squareDistance = closestNode->minDist;
+ return closestNode->m_branch.m_data;
+}
+
+
+RTREE_TEMPLATE
+int RTREE_QUAL::Count()
+{
+ int count = 0;
+
+ CountRec( m_root, count );
+
+ return count;
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::CountRec( Node* a_node, int& a_count )
+{
+ if( a_node->IsInternalNode() ) // not a leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ CountRec( a_node->m_branch[index].m_child, a_count );
+ }
+ }
+ else // A leaf node
+ {
+ a_count += a_node->m_count;
+ }
+}
+
+
+RTREE_TEMPLATE
+bool RTREE_QUAL::Load( const char* a_fileName )
+{
+ RemoveAll(); // Clear existing tree
+
+ RTFileStream stream;
+
+ if( !stream.OpenRead( a_fileName ) )
+ {
+ return false;
+ }
+
+ bool result = Load( stream );
+
+ stream.Close();
+
+ return result;
+};
+
+
+RTREE_TEMPLATE
+bool RTREE_QUAL::Load( RTFileStream& a_stream )
+{
+ // Write some kind of header
+ int _dataFileId = ('R' << 0) | ('T' << 8) | ('R' << 16) | ('E' << 24);
+ int _dataSize = sizeof(DATATYPE);
+ int _dataNumDims = NUMDIMS;
+ int _dataElemSize = sizeof(ELEMTYPE);
+ int _dataElemRealSize = sizeof(ELEMTYPEREAL);
+ int _dataMaxNodes = TMAXNODES;
+ int _dataMinNodes = TMINNODES;
+
+ int dataFileId = 0;
+ int dataSize = 0;
+ int dataNumDims = 0;
+ int dataElemSize = 0;
+ int dataElemRealSize = 0;
+ int dataMaxNodes = 0;
+ int dataMinNodes = 0;
+
+ a_stream.Read( dataFileId );
+ a_stream.Read( dataSize );
+ a_stream.Read( dataNumDims );
+ a_stream.Read( dataElemSize );
+ a_stream.Read( dataElemRealSize );
+ a_stream.Read( dataMaxNodes );
+ a_stream.Read( dataMinNodes );
+
+ bool result = false;
+
+ // Test if header was valid and compatible
+ if( (dataFileId == _dataFileId)
+ && (dataSize == _dataSize)
+ && (dataNumDims == _dataNumDims)
+ && (dataElemSize == _dataElemSize)
+ && (dataElemRealSize == _dataElemRealSize)
+ && (dataMaxNodes == _dataMaxNodes)
+ && (dataMinNodes == _dataMinNodes)
+ )
+ {
+ // Recursively load tree
+ result = LoadRec( m_root, a_stream );
+ }
+
+ return result;
+}
+
+
+RTREE_TEMPLATE
+bool RTREE_QUAL::LoadRec( Node* a_node, RTFileStream& a_stream )
+{
+ a_stream.Read( a_node->m_level );
+ a_stream.Read( a_node->m_count );
+
+ if( a_node->IsInternalNode() ) // not a leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ Branch* curBranch = &a_node->m_branch[index];
+
+ a_stream.ReadArray( curBranch->m_rect.m_min, NUMDIMS );
+ a_stream.ReadArray( curBranch->m_rect.m_max, NUMDIMS );
+
+ curBranch->m_child = AllocNode();
+ LoadRec( curBranch->m_child, a_stream );
+ }
+ }
+ else // A leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ Branch* curBranch = &a_node->m_branch[index];
+
+ a_stream.ReadArray( curBranch->m_rect.m_min, NUMDIMS );
+ a_stream.ReadArray( curBranch->m_rect.m_max, NUMDIMS );
+
+ a_stream.Read( curBranch->m_data );
+ }
+ }
+
+ return true; // Should do more error checking on I/O operations
+}
+
+
+RTREE_TEMPLATE
+bool RTREE_QUAL::Save( const char* a_fileName )
+{
+ RTFileStream stream;
+
+ if( !stream.OpenWrite( a_fileName ) )
+ {
+ return false;
+ }
+
+ bool result = Save( stream );
+
+ stream.Close();
+
+ return result;
+}
+
+
+RTREE_TEMPLATE
+bool RTREE_QUAL::Save( RTFileStream& a_stream )
+{
+ // Write some kind of header
+ int dataFileId = ('R' << 0) | ('T' << 8) | ('R' << 16) | ('E' << 24);
+ int dataSize = sizeof(DATATYPE);
+ int dataNumDims = NUMDIMS;
+ int dataElemSize = sizeof(ELEMTYPE);
+ int dataElemRealSize = sizeof(ELEMTYPEREAL);
+ int dataMaxNodes = TMAXNODES;
+ int dataMinNodes = TMINNODES;
+
+ a_stream.Write( dataFileId );
+ a_stream.Write( dataSize );
+ a_stream.Write( dataNumDims );
+ a_stream.Write( dataElemSize );
+ a_stream.Write( dataElemRealSize );
+ a_stream.Write( dataMaxNodes );
+ a_stream.Write( dataMinNodes );
+
+ // Recursively save tree
+ bool result = SaveRec( m_root, a_stream );
+
+ return result;
+}
+
+
+RTREE_TEMPLATE
+bool RTREE_QUAL::SaveRec( Node* a_node, RTFileStream& a_stream )
+{
+ a_stream.Write( a_node->m_level );
+ a_stream.Write( a_node->m_count );
+
+ if( a_node->IsInternalNode() ) // not a leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ Branch* curBranch = &a_node->m_branch[index];
+
+ a_stream.WriteArray( curBranch->m_rect.m_min, NUMDIMS );
+ a_stream.WriteArray( curBranch->m_rect.m_max, NUMDIMS );
+
+ SaveRec( curBranch->m_child, a_stream );
+ }
+ }
+ else // A leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ Branch* curBranch = &a_node->m_branch[index];
+
+ a_stream.WriteArray( curBranch->m_rect.m_min, NUMDIMS );
+ a_stream.WriteArray( curBranch->m_rect.m_max, NUMDIMS );
+
+ a_stream.Write( curBranch->m_data );
+ }
+ }
+
+ return true; // Should do more error checking on I/O operations
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::RemoveAll()
+{
+ // Delete all existing nodes
+ Reset();
+
+ m_root = AllocNode();
+ m_root->m_level = 0;
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::Reset()
+{
+#ifdef RTREE_DONT_USE_MEMPOOLS
+ // Delete all existing nodes
+ RemoveAllRec( m_root );
+#else // RTREE_DONT_USE_MEMPOOLS
+ // Just reset memory pools. We are not using complex types
+ // EXAMPLE
+#endif // RTREE_DONT_USE_MEMPOOLS
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::RemoveAllRec( Node* a_node )
+{
+ ASSERT( a_node );
+ ASSERT( a_node->m_level >= 0 );
+
+ if( a_node->IsInternalNode() ) // This is an internal node in the tree
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ RemoveAllRec( a_node->m_branch[index].m_child );
+ }
+ }
+
+ FreeNode( a_node );
+}
+
+
+RTREE_TEMPLATE
+typename RTREE_QUAL::Node* RTREE_QUAL::AllocNode()
+{
+ Node* newNode;
+
+#ifdef RTREE_DONT_USE_MEMPOOLS
+ newNode = new Node;
+#else // RTREE_DONT_USE_MEMPOOLS
+ // EXAMPLE
+#endif // RTREE_DONT_USE_MEMPOOLS
+ InitNode( newNode );
+ return newNode;
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::FreeNode( Node* a_node )
+{
+ ASSERT( a_node );
+
+#ifdef RTREE_DONT_USE_MEMPOOLS
+ delete a_node;
+#else // RTREE_DONT_USE_MEMPOOLS
+ // EXAMPLE
+#endif // RTREE_DONT_USE_MEMPOOLS
+}
+
+
+// Allocate space for a node in the list used in DeletRect to
+// store Nodes that are too empty.
+RTREE_TEMPLATE
+typename RTREE_QUAL::ListNode* RTREE_QUAL::AllocListNode()
+{
+#ifdef RTREE_DONT_USE_MEMPOOLS
+ return new ListNode;
+#else // RTREE_DONT_USE_MEMPOOLS
+ // EXAMPLE
+#endif // RTREE_DONT_USE_MEMPOOLS
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::FreeListNode( ListNode* a_listNode )
+{
+#ifdef RTREE_DONT_USE_MEMPOOLS
+ delete a_listNode;
+#else // RTREE_DONT_USE_MEMPOOLS
+ // EXAMPLE
+#endif // RTREE_DONT_USE_MEMPOOLS
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::InitNode( Node* a_node )
+{
+ a_node->m_count = 0;
+ a_node->m_level = -1;
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::InitRect( Rect* a_rect )
+{
+ for( int index = 0; index < NUMDIMS; ++index )
+ {
+ a_rect->m_min[index] = (ELEMTYPE) 0;
+ a_rect->m_max[index] = (ELEMTYPE) 0;
+ }
+}
+
+
+// Inserts a new data rectangle into the index structure.
+// Recursively descends tree, propagates splits back up.
+// Returns 0 if node was not split. Old node updated.
+// If node was split, returns 1 and sets the pointer pointed to by
+// new_node to point to the new node. Old node updated to become one of two.
+// The level argument specifies the number of steps up from the leaf
+// level to insert; e.g. a data rectangle goes in at level = 0.
+RTREE_TEMPLATE
+bool RTREE_QUAL::InsertRectRec( Rect* a_rect,
+ const DATATYPE& a_id,
+ Node* a_node,
+ Node** a_newNode,
+ int a_level )
+{
+ ASSERT( a_rect && a_node && a_newNode );
+ ASSERT( a_level >= 0 && a_level <= a_node->m_level );
+
+ int index;
+ Branch branch;
+ Node* otherNode;
+
+ // Still above level for insertion, go down tree recursively
+ if( a_node->m_level > a_level )
+ {
+ index = PickBranch( a_rect, a_node );
+
+ if( !InsertRectRec( a_rect, a_id, a_node->m_branch[index].m_child, &otherNode, a_level ) )
+ {
+ // Child was not split
+ a_node->m_branch[index].m_rect =
+ CombineRect( a_rect, &(a_node->m_branch[index].m_rect) );
+ return false;
+ }
+ else // Child was split
+ {
+ a_node->m_branch[index].m_rect = NodeCover( a_node->m_branch[index].m_child );
+ branch.m_child = otherNode;
+ branch.m_rect = NodeCover( otherNode );
+ return AddBranch( &branch, a_node, a_newNode );
+ }
+ }
+ else if( a_node->m_level == a_level ) // Have reached level for insertion. Add rect, split if necessary
+ {
+ branch.m_rect = *a_rect;
+ branch.m_child = (Node*) a_id;
+ // Child field of leaves contains id of data record
+ return AddBranch( &branch, a_node, a_newNode );
+ }
+ else
+ {
+ // Should never occur
+ ASSERT( 0 );
+ return false;
+ }
+}
+
+
+// Insert a data rectangle into an index structure.
+// InsertRect provides for splitting the root;
+// returns 1 if root was split, 0 if it was not.
+// The level argument specifies the number of steps up from the leaf
+// level to insert; e.g. a data rectangle goes in at level = 0.
+// InsertRect2 does the recursion.
+//
+RTREE_TEMPLATE
+bool RTREE_QUAL::InsertRect( Rect* a_rect, const DATATYPE& a_id, Node** a_root, int a_level )
+{
+ ASSERT( a_rect && a_root );
+ ASSERT( a_level >= 0 && a_level <= (*a_root)->m_level );
+#ifdef _DEBUG
+
+ for( int index = 0; index < NUMDIMS; ++index )
+ {
+ ASSERT( a_rect->m_min[index] <= a_rect->m_max[index] );
+ }
+
+#endif // _DEBUG
+
+ Node* newRoot;
+ Node* newNode;
+ Branch branch;
+
+ if( InsertRectRec( a_rect, a_id, *a_root, &newNode, a_level ) ) // Root split
+ {
+ newRoot = AllocNode(); // Grow tree taller and new root
+ newRoot->m_level = (*a_root)->m_level + 1;
+ branch.m_rect = NodeCover( *a_root );
+ branch.m_child = *a_root;
+ AddBranch( &branch, newRoot, NULL );
+ branch.m_rect = NodeCover( newNode );
+ branch.m_child = newNode;
+ AddBranch( &branch, newRoot, NULL );
+ *a_root = newRoot;
+ return true;
+ }
+
+ return false;
+}
+
+
+// Find the smallest rectangle that includes all rectangles in branches of a node.
+RTREE_TEMPLATE
+typename RTREE_QUAL::Rect RTREE_QUAL::NodeCover( Node* a_node )
+{
+ ASSERT( a_node );
+
+ int firstTime = true;
+ Rect rect;
+ InitRect( &rect );
+
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( firstTime )
+ {
+ rect = a_node->m_branch[index].m_rect;
+ firstTime = false;
+ }
+ else
+ {
+ rect = CombineRect( &rect, &(a_node->m_branch[index].m_rect) );
+ }
+ }
+
+ return rect;
+}
+
+
+// Add a branch to a node. Split the node if necessary.
+// Returns 0 if node not split. Old node updated.
+// Returns 1 if node split, sets *new_node to address of new node.
+// Old node updated, becomes one of two.
+RTREE_TEMPLATE
+bool RTREE_QUAL::AddBranch( Branch* a_branch, Node* a_node, Node** a_newNode )
+{
+ ASSERT( a_branch );
+ ASSERT( a_node );
+
+ if( a_node->m_count < MAXNODES ) // Split won't be necessary
+ {
+ a_node->m_branch[a_node->m_count] = *a_branch;
+ ++a_node->m_count;
+
+ return false;
+ }
+ else
+ {
+ ASSERT( a_newNode );
+
+ SplitNode( a_node, a_branch, a_newNode );
+ return true;
+ }
+}
+
+
+// Disconnect a dependent node.
+// Caller must return (or stop using iteration index) after this as count has changed
+RTREE_TEMPLATE
+void RTREE_QUAL::DisconnectBranch( Node* a_node, int a_index )
+{
+ ASSERT( a_node && (a_index >= 0) && (a_index < MAXNODES) );
+ ASSERT( a_node->m_count > 0 );
+
+ // Remove element by swapping with the last element to prevent gaps in array
+ a_node->m_branch[a_index] = a_node->m_branch[a_node->m_count - 1];
+
+ --a_node->m_count;
+}
+
+
+// Pick a branch. Pick the one that will need the smallest increase
+// in area to accomodate the new rectangle. This will result in the
+// least total area for the covering rectangles in the current node.
+// In case of a tie, pick the one which was smaller before, to get
+// the best resolution when searching.
+RTREE_TEMPLATE
+int RTREE_QUAL::PickBranch( Rect* a_rect, Node* a_node )
+{
+ ASSERT( a_rect && a_node );
+
+ bool firstTime = true;
+ ELEMTYPEREAL increase;
+ ELEMTYPEREAL bestIncr = (ELEMTYPEREAL) -1;
+ ELEMTYPEREAL area;
+ ELEMTYPEREAL bestArea = 0;
+ int best = 0;
+ Rect tempRect;
+
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ Rect* curRect = &a_node->m_branch[index].m_rect;
+ area = CalcRectVolume( curRect );
+ tempRect = CombineRect( a_rect, curRect );
+ increase = CalcRectVolume( &tempRect ) - area;
+
+ if( (increase < bestIncr) || firstTime )
+ {
+ best = index;
+ bestArea = area;
+ bestIncr = increase;
+ firstTime = false;
+ }
+ else if( (increase == bestIncr) && (area < bestArea) )
+ {
+ best = index;
+ bestArea = area;
+ bestIncr = increase;
+ }
+ }
+
+ return best;
+}
+
+
+// Combine two rectangles into larger one containing both
+RTREE_TEMPLATE
+typename RTREE_QUAL::Rect RTREE_QUAL::CombineRect( Rect* a_rectA, Rect* a_rectB )
+{
+ ASSERT( a_rectA && a_rectB );
+
+ Rect newRect;
+
+ for( int index = 0; index < NUMDIMS; ++index )
+ {
+ newRect.m_min[index] = rMin( a_rectA->m_min[index], a_rectB->m_min[index] );
+ newRect.m_max[index] = rMax( a_rectA->m_max[index], a_rectB->m_max[index] );
+ }
+
+ return newRect;
+}
+
+
+// Split a node.
+// Divides the nodes branches and the extra one between two nodes.
+// Old node is one of the new ones, and one really new one is created.
+// Tries more than one method for choosing a partition, uses best result.
+RTREE_TEMPLATE
+void RTREE_QUAL::SplitNode( Node* a_node, Branch* a_branch, Node** a_newNode )
+{
+ ASSERT( a_node );
+ ASSERT( a_branch );
+
+ // Could just use local here, but member or external is faster since it is reused
+ PartitionVars localVars;
+ PartitionVars* parVars = &localVars;
+ int level;
+
+ // Load all the branches into a buffer, initialize old node
+ level = a_node->m_level;
+ GetBranches( a_node, a_branch, parVars );
+
+ // Find partition
+ ChoosePartition( parVars, MINNODES );
+
+ // Put branches from buffer into 2 nodes according to chosen partition
+ *a_newNode = AllocNode();
+ (*a_newNode)->m_level = a_node->m_level = level;
+ LoadNodes( a_node, *a_newNode, parVars );
+
+ ASSERT( (a_node->m_count + (*a_newNode)->m_count) == parVars->m_total );
+}
+
+
+// Calculate the n-dimensional volume of a rectangle
+RTREE_TEMPLATE
+ELEMTYPEREAL RTREE_QUAL::RectVolume( Rect* a_rect )
+{
+ ASSERT( a_rect );
+
+ ELEMTYPEREAL volume = (ELEMTYPEREAL) 1;
+
+ for( int index = 0; index<NUMDIMS; ++index )
+ {
+ volume *= a_rect->m_max[index] - a_rect->m_min[index];
+ }
+
+ ASSERT( volume >= (ELEMTYPEREAL) 0 );
+
+ return volume;
+}
+
+
+// The exact volume of the bounding sphere for the given Rect
+RTREE_TEMPLATE
+ELEMTYPEREAL RTREE_QUAL::RectSphericalVolume( Rect* a_rect )
+{
+ ASSERT( a_rect );
+
+ ELEMTYPEREAL sumOfSquares = (ELEMTYPEREAL) 0;
+ ELEMTYPEREAL radius;
+
+ for( int index = 0; index < NUMDIMS; ++index )
+ {
+ ELEMTYPEREAL halfExtent =
+ ( (ELEMTYPEREAL) a_rect->m_max[index] - (ELEMTYPEREAL) a_rect->m_min[index] ) * 0.5f;
+ sumOfSquares += halfExtent * halfExtent;
+ }
+
+ radius = (ELEMTYPEREAL) sqrt( sumOfSquares );
+
+ // Pow maybe slow, so test for common dims like 2,3 and just use x*x, x*x*x.
+ if( NUMDIMS == 3 )
+ {
+ return radius * radius * radius * m_unitSphereVolume;
+ }
+ else if( NUMDIMS == 2 )
+ {
+ return radius * radius * m_unitSphereVolume;
+ }
+ else
+ {
+ return (ELEMTYPEREAL) (pow( radius, NUMDIMS ) * m_unitSphereVolume);
+ }
+}
+
+
+// Use one of the methods to calculate retangle volume
+RTREE_TEMPLATE
+ELEMTYPEREAL RTREE_QUAL::CalcRectVolume( Rect* a_rect )
+{
+#ifdef RTREE_USE_SPHERICAL_VOLUME
+ return RectSphericalVolume( a_rect ); // Slower but helps certain merge cases
+#else // RTREE_USE_SPHERICAL_VOLUME
+ return RectVolume( a_rect ); // Faster but can cause poor merges
+#endif // RTREE_USE_SPHERICAL_VOLUME
+}
+
+
+// Load branch buffer with branches from full node plus the extra branch.
+RTREE_TEMPLATE
+void RTREE_QUAL::GetBranches( Node* a_node, Branch* a_branch, PartitionVars* a_parVars )
+{
+ ASSERT( a_node );
+ ASSERT( a_branch );
+
+ ASSERT( a_node->m_count == MAXNODES );
+
+ // Load the branch buffer
+ for( int index = 0; index < MAXNODES; ++index )
+ {
+ a_parVars->m_branchBuf[index] = a_node->m_branch[index];
+ }
+
+ a_parVars->m_branchBuf[MAXNODES] = *a_branch;
+ a_parVars->m_branchCount = MAXNODES + 1;
+
+ // Calculate rect containing all in the set
+ a_parVars->m_coverSplit = a_parVars->m_branchBuf[0].m_rect;
+
+ for( int index = 1; index < MAXNODES + 1; ++index )
+ {
+ a_parVars->m_coverSplit =
+ CombineRect( &a_parVars->m_coverSplit, &a_parVars->m_branchBuf[index].m_rect );
+ }
+
+ a_parVars->m_coverSplitArea = CalcRectVolume( &a_parVars->m_coverSplit );
+
+ InitNode( a_node );
+}
+
+
+// Method #0 for choosing a partition:
+// As the seeds for the two groups, pick the two rects that would waste the
+// most area if covered by a single rectangle, i.e. evidently the worst pair
+// to have in the same group.
+// Of the remaining, one at a time is chosen to be put in one of the two groups.
+// The one chosen is the one with the greatest difference in area expansion
+// depending on which group - the rect most strongly attracted to one group
+// and repelled from the other.
+// If one group gets too full (more would force other group to violate min
+// fill requirement) then other group gets the rest.
+// These last are the ones that can go in either group most easily.
+RTREE_TEMPLATE
+void RTREE_QUAL::ChoosePartition( PartitionVars* a_parVars, int a_minFill )
+{
+ ASSERT( a_parVars );
+
+ ELEMTYPEREAL biggestDiff;
+ int group, chosen = 0, betterGroup = 0;
+
+ InitParVars( a_parVars, a_parVars->m_branchCount, a_minFill );
+ PickSeeds( a_parVars );
+
+ while( ( (a_parVars->m_count[0] + a_parVars->m_count[1]) < a_parVars->m_total )
+ && ( a_parVars->m_count[0] < (a_parVars->m_total - a_parVars->m_minFill) )
+ && ( a_parVars->m_count[1] < (a_parVars->m_total - a_parVars->m_minFill) ) )
+ {
+ biggestDiff = (ELEMTYPEREAL) -1;
+
+ for( int index = 0; index<a_parVars->m_total; ++index )
+ {
+ if( !a_parVars->m_taken[index] )
+ {
+ Rect* curRect = &a_parVars->m_branchBuf[index].m_rect;
+ Rect rect0 = CombineRect( curRect, &a_parVars->m_cover[0] );
+ Rect rect1 = CombineRect( curRect, &a_parVars->m_cover[1] );
+ ELEMTYPEREAL growth0 = CalcRectVolume( &rect0 ) - a_parVars->m_area[0];
+ ELEMTYPEREAL growth1 = CalcRectVolume( &rect1 ) - a_parVars->m_area[1];
+ ELEMTYPEREAL diff = growth1 - growth0;
+
+ if( diff >= 0 )
+ {
+ group = 0;
+ }
+ else
+ {
+ group = 1;
+ diff = -diff;
+ }
+
+ if( diff > biggestDiff )
+ {
+ biggestDiff = diff;
+ chosen = index;
+ betterGroup = group;
+ }
+ else if( (diff == biggestDiff)
+ && (a_parVars->m_count[group] < a_parVars->m_count[betterGroup]) )
+ {
+ chosen = index;
+ betterGroup = group;
+ }
+ }
+ }
+
+ Classify( chosen, betterGroup, a_parVars );
+ }
+
+ // If one group too full, put remaining rects in the other
+ if( (a_parVars->m_count[0] + a_parVars->m_count[1]) < a_parVars->m_total )
+ {
+ if( a_parVars->m_count[0] >= a_parVars->m_total - a_parVars->m_minFill )
+ {
+ group = 1;
+ }
+ else
+ {
+ group = 0;
+ }
+
+ for( int index = 0; index<a_parVars->m_total; ++index )
+ {
+ if( !a_parVars->m_taken[index] )
+ {
+ Classify( index, group, a_parVars );
+ }
+ }
+ }
+
+ ASSERT( (a_parVars->m_count[0] + a_parVars->m_count[1]) == a_parVars->m_total );
+ ASSERT( (a_parVars->m_count[0] >= a_parVars->m_minFill)
+ && (a_parVars->m_count[1] >= a_parVars->m_minFill) );
+}
+
+
+// Copy branches from the buffer into two nodes according to the partition.
+RTREE_TEMPLATE
+void RTREE_QUAL::LoadNodes( Node* a_nodeA, Node* a_nodeB, PartitionVars* a_parVars )
+{
+ ASSERT( a_nodeA );
+ ASSERT( a_nodeB );
+ ASSERT( a_parVars );
+
+ for( int index = 0; index < a_parVars->m_total; ++index )
+ {
+ ASSERT( a_parVars->m_partition[index] == 0 || a_parVars->m_partition[index] == 1 );
+
+ if( a_parVars->m_partition[index] == 0 )
+ {
+ AddBranch( &a_parVars->m_branchBuf[index], a_nodeA, NULL );
+ }
+ else if( a_parVars->m_partition[index] == 1 )
+ {
+ AddBranch( &a_parVars->m_branchBuf[index], a_nodeB, NULL );
+ }
+ }
+}
+
+
+// Initialize a PartitionVars structure.
+RTREE_TEMPLATE
+void RTREE_QUAL::InitParVars( PartitionVars* a_parVars, int a_maxRects, int a_minFill )
+{
+ ASSERT( a_parVars );
+
+ a_parVars->m_count[0] = a_parVars->m_count[1] = 0;
+ a_parVars->m_area[0] = a_parVars->m_area[1] = (ELEMTYPEREAL) 0;
+ a_parVars->m_total = a_maxRects;
+ a_parVars->m_minFill = a_minFill;
+
+ for( int index = 0; index < a_maxRects; ++index )
+ {
+ a_parVars->m_taken[index] = false;
+ a_parVars->m_partition[index] = -1;
+ }
+}
+
+
+RTREE_TEMPLATE
+void RTREE_QUAL::PickSeeds( PartitionVars* a_parVars )
+{
+ int seed0 = 0, seed1 = 0;
+ ELEMTYPEREAL worst, waste;
+ ELEMTYPEREAL area[MAXNODES + 1];
+
+ for( int index = 0; index<a_parVars->m_total; ++index )
+ {
+ area[index] = CalcRectVolume( &a_parVars->m_branchBuf[index].m_rect );
+ }
+
+ worst = -a_parVars->m_coverSplitArea - 1;
+
+ for( int indexA = 0; indexA < a_parVars->m_total - 1; ++indexA )
+ {
+ for( int indexB = indexA + 1; indexB < a_parVars->m_total; ++indexB )
+ {
+ Rect oneRect = CombineRect( &a_parVars->m_branchBuf[indexA].m_rect,
+ &a_parVars->m_branchBuf[indexB].m_rect );
+ waste = CalcRectVolume( &oneRect ) - area[indexA] - area[indexB];
+
+ if( waste >= worst )
+ {
+ worst = waste;
+ seed0 = indexA;
+ seed1 = indexB;
+ }
+ }
+ }
+
+ Classify( seed0, 0, a_parVars );
+ Classify( seed1, 1, a_parVars );
+}
+
+
+// Put a branch in one of the groups.
+RTREE_TEMPLATE
+void RTREE_QUAL::Classify( int a_index, int a_group, PartitionVars* a_parVars )
+{
+ ASSERT( a_parVars );
+ ASSERT( !a_parVars->m_taken[a_index] );
+
+ a_parVars->m_partition[a_index] = a_group;
+ a_parVars->m_taken[a_index] = true;
+
+ if( a_parVars->m_count[a_group] == 0 )
+ {
+ a_parVars->m_cover[a_group] = a_parVars->m_branchBuf[a_index].m_rect;
+ }
+ else
+ {
+ a_parVars->m_cover[a_group] = CombineRect( &a_parVars->m_branchBuf[a_index].m_rect,
+ &a_parVars->m_cover[a_group] );
+ }
+
+ a_parVars->m_area[a_group] = CalcRectVolume( &a_parVars->m_cover[a_group] );
+ ++a_parVars->m_count[a_group];
+}
+
+
+// Delete a data rectangle from an index structure.
+// Pass in a pointer to a Rect, the tid of the record, ptr to ptr to root node.
+// Returns 1 if record not found, 0 if success.
+// RemoveRect provides for eliminating the root.
+RTREE_TEMPLATE
+bool RTREE_QUAL::RemoveRect( Rect* a_rect, const DATATYPE& a_id, Node** a_root )
+{
+ ASSERT( a_rect && a_root );
+ ASSERT( *a_root );
+
+ Node* tempNode;
+ ListNode* reInsertList = NULL;
+
+ if( !RemoveRectRec( a_rect, a_id, *a_root, &reInsertList ) )
+ {
+ // Found and deleted a data item
+ // Reinsert any branches from eliminated nodes
+ while( reInsertList )
+ {
+ tempNode = reInsertList->m_node;
+
+ for( int index = 0; index < tempNode->m_count; ++index )
+ {
+ InsertRect( &(tempNode->m_branch[index].m_rect),
+ tempNode->m_branch[index].m_data,
+ a_root,
+ tempNode->m_level );
+ }
+
+ ListNode* remLNode = reInsertList;
+ reInsertList = reInsertList->m_next;
+
+ FreeNode( remLNode->m_node );
+ FreeListNode( remLNode );
+ }
+
+ // Check for redundant root (not leaf, 1 child) and eliminate
+ if( (*a_root)->m_count == 1 && (*a_root)->IsInternalNode() )
+ {
+ tempNode = (*a_root)->m_branch[0].m_child;
+
+ ASSERT( tempNode );
+ FreeNode( *a_root );
+ *a_root = tempNode;
+ }
+
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+
+// Delete a rectangle from non-root part of an index structure.
+// Called by RemoveRect. Descends tree recursively,
+// merges branches on the way back up.
+// Returns 1 if record not found, 0 if success.
+RTREE_TEMPLATE
+bool RTREE_QUAL::RemoveRectRec( Rect* a_rect,
+ const DATATYPE& a_id,
+ Node* a_node,
+ ListNode** a_listNode )
+{
+ ASSERT( a_rect && a_node && a_listNode );
+ ASSERT( a_node->m_level >= 0 );
+
+ if( a_node->IsInternalNode() ) // not a leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( Overlap( a_rect, &(a_node->m_branch[index].m_rect) ) )
+ {
+ if( !RemoveRectRec( a_rect, a_id, a_node->m_branch[index].m_child, a_listNode ) )
+ {
+ if( a_node->m_branch[index].m_child->m_count >= MINNODES )
+ {
+ // child removed, just resize parent rect
+ a_node->m_branch[index].m_rect =
+ NodeCover( a_node->m_branch[index].m_child );
+ }
+ else
+ {
+ // child removed, not enough entries in node, eliminate node
+ ReInsert( a_node->m_branch[index].m_child, a_listNode );
+ DisconnectBranch( a_node, index ); // Must return after this call as count has changed
+ }
+
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+ else // A leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( a_node->m_branch[index].m_child == (Node*) a_id )
+ {
+ DisconnectBranch( a_node, index ); // Must return after this call as count has changed
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
+
+
+// Decide whether two rectangles overlap.
+RTREE_TEMPLATE
+bool RTREE_QUAL::Overlap( Rect* a_rectA, Rect* a_rectB )
+{
+ ASSERT( a_rectA && a_rectB );
+
+ for( int index = 0; index < NUMDIMS; ++index )
+ {
+ if( a_rectA->m_min[index] > a_rectB->m_max[index]
+ || a_rectB->m_min[index] > a_rectA->m_max[index] )
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+// Add a node to the reinsertion list. All its branches will later
+// be reinserted into the index structure.
+RTREE_TEMPLATE
+void RTREE_QUAL::ReInsert( Node* a_node, ListNode** a_listNode )
+{
+ ListNode* newListNode;
+
+ newListNode = AllocListNode();
+ newListNode->m_node = a_node;
+ newListNode->m_next = *a_listNode;
+ *a_listNode = newListNode;
+}
+
+
+// Search in an index tree or subtree for all data retangles that overlap the argument rectangle.
+RTREE_TEMPLATE
+bool RTREE_QUAL::Search( Node* a_node, Rect* a_rect, int& a_foundCount, bool a_resultCallback(
+ DATATYPE a_data,
+ void* a_context ), void* a_context )
+{
+ ASSERT( a_node );
+ ASSERT( a_node->m_level >= 0 );
+ ASSERT( a_rect );
+
+ if( a_node->IsInternalNode() ) // This is an internal node in the tree
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( Overlap( a_rect, &a_node->m_branch[index].m_rect ) )
+ {
+ if( !Search( a_node->m_branch[index].m_child, a_rect, a_foundCount,
+ a_resultCallback, a_context ) )
+ {
+ return false; // Don't continue searching
+ }
+ }
+ }
+ }
+ else // This is a leaf node
+ {
+ for( int index = 0; index < a_node->m_count; ++index )
+ {
+ if( Overlap( a_rect, &a_node->m_branch[index].m_rect ) )
+ {
+ DATATYPE& id = a_node->m_branch[index].m_data;
+
+ // NOTE: There are different ways to return results. Here's where to modify
+ if( &a_resultCallback )
+ {
+ ++a_foundCount;
+
+ if( !a_resultCallback( id, a_context ) )
+ {
+ return false; // Don't continue searching
+ }
+ }
+ }
+ }
+ }
+
+ return true; // Continue searching
+}
+
+
+//calculate the minimum distance between a point and a rectangle as defined by Manolopoulos et al.
+//it uses the square distance to avoid the use of ELEMTYPEREAL values, which are slower.
+RTREE_TEMPLATE
+ELEMTYPE RTREE_QUAL::MinDist( const ELEMTYPE a_point[NUMDIMS], Rect* a_rect )
+{
+ ELEMTYPE *q, *s, *t;
+ q = (ELEMTYPE*) a_point;
+ s = a_rect->m_min;
+ t = a_rect->m_max;
+ int minDist = 0;
+ for( int index = 0; index < NUMDIMS; index++ )
+ {
+ int r = q[index];
+ if( q[index] < s[index] )
+ {
+ r = s[index];
+ }
+ else if( q[index] >t[index] )
+ {
+ r = t[index];
+ }
+ int addend = q[index] - r;
+ minDist += addend * addend;
+ }
+ return minDist;
+}
+
+
+//insert a NNNode in a list sorted by its minDist (desc.)
+RTREE_TEMPLATE
+void RTREE_QUAL::InsertNNListSorted( std::vector<NNNode*>* nodeList, NNNode* newNode )
+{
+ typedef typename std::vector<NNNode*>::iterator iterator;
+ iterator iter = nodeList->begin();
+ while( iter != nodeList->end() && (*iter)->minDist > newNode->minDist )
+ {
+ ++iter;
+ }
+ nodeList->insert(iter, newNode);
+}
+
+
+#undef RTREE_TEMPLATE
+#undef RTREE_QUAL
+#undef RTREE_SEARCH_TEMPLATE
+#undef RTREE_SEARCH_QUAL
+
+#endif // RTREE_H
diff --git a/include/geometry/seg.h b/include/geometry/seg.h
new file mode 100644
index 0000000..164457b
--- /dev/null
+++ b/include/geometry/seg.h
@@ -0,0 +1,384 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SEG_H
+#define __SEG_H
+
+#include <cstdio>
+#include <climits>
+
+#include <math/vector2d.h>
+
+#include <boost/optional/optional.hpp>
+
+typedef boost::optional<VECTOR2I> OPT_VECTOR2I;
+
+class SEG
+{
+private:
+ typedef VECTOR2I::extended_type ecoord;
+
+public:
+ friend inline std::ostream& operator<<( std::ostream& aStream, const SEG& aSeg );
+
+ /* Start and the of the segment. Public, to make access simpler. These are references
+ * to an object the segment belongs to (e.g. a line chain) or references to locally stored
+ * points (m_a, m_b).
+ */
+ VECTOR2I A;
+ VECTOR2I B;
+
+ /** Default constructor
+ * Creates an empty (0, 0) segment, locally-referenced
+ */
+ SEG()
+ {
+ m_index = -1;
+ }
+
+ /**
+ * Constructor
+ * Creates a segment between (aX1, aY1) and (aX2, aY2), locally referenced
+ */
+ SEG( int aX1, int aY1, int aX2, int aY2 ) :
+ A ( VECTOR2I( aX1, aY1 ) ),
+ B ( VECTOR2I( aX2, aY2 ) )
+ {
+ m_index = -1;
+ }
+
+ /**
+ * Constructor
+ * Creates a segment between (aA) and (aB), locally referenced
+ */
+ SEG( const VECTOR2I& aA, const VECTOR2I& aB ) : A( aA ), B( aB )
+ {
+ m_index = -1;
+ }
+
+ /**
+ * Constructor
+ * Creates a segment between (aA) and (aB), referenced to a multi-segment shape
+ * @param aA reference to the start point in the parent shape
+ * @param aB reference to the end point in the parent shape
+ * @param aIndex index of the segment within the parent shape
+ */
+ SEG( const VECTOR2I& aA, const VECTOR2I& aB, int aIndex ) : A( aA ), B( aB )
+ {
+ m_index = aIndex;
+ }
+
+ /**
+ * Copy constructor
+ */
+ SEG( const SEG& aSeg ) : A( aSeg.A ), B( aSeg.B ), m_index( aSeg.m_index )
+ {
+ }
+
+ SEG& operator=( const SEG& aSeg )
+ {
+ A = aSeg.A;
+ B = aSeg.B;
+ m_index = aSeg.m_index;
+
+ return *this;
+ }
+
+ /**
+ * Function LineProject()
+ *
+ * Computes the perpendicular projection point of aP on a line passing through
+ * ends of the segment.
+ * @param aP point to project
+ * @return projected point
+ */
+ VECTOR2I LineProject( const VECTOR2I& aP ) const;
+
+ /**
+ * Function Side()
+ *
+ * Determines on which side of directed line passing via segment ends point aP lies.
+ * @param aP point to determine the orientation wrs to self
+ * @return: < 0: left, 0 : on the line, > 0 : right
+ */
+ int Side( const VECTOR2I& aP ) const
+ {
+ const ecoord det = ( B - A ).Cross( aP - A );
+
+ return det < 0 ? -1 : ( det > 0 ? 1 : 0 );
+ }
+
+ /**
+ * Function LineDistance()
+ *
+ * Returns the closest Euclidean distance between point aP and the line defined by
+ * the ends of segment (this).
+ * @param aDetermineSide: when true, the sign of the returned value indicates
+ * the side of the line at which we are (negative = left)
+ * @return the distance
+ */
+ int LineDistance( const VECTOR2I& aP, bool aDetermineSide = false ) const;
+
+ /**
+ * Function NearestPoint()
+ *
+ * Computes a point on the segment (this) that is closest to point aP.
+ * @return: nearest point
+ */
+ const VECTOR2I NearestPoint( const VECTOR2I &aP ) const;
+
+ /**
+ * Function Intersect()
+ *
+ * Computes intersection point of segment (this) with segment aSeg.
+ * @param aSeg: segment to intersect with
+ * @param aIgnoreEndpoints: don't treat corner cases (i.e. end of one segment touching the
+ * other) as intersections.
+ * @param aLines: treat segments as infinite lines
+ * @return intersection point, if exists
+ */
+ OPT_VECTOR2I Intersect( const SEG& aSeg, bool aIgnoreEndpoints = false,
+ bool aLines = false ) const;
+
+ /**
+ * Function IntersectLines()
+ *
+ * Computes the intersection point of lines passing through ends of (this) and aSeg
+ * @param aSeg segment defining the line to intersect with
+ * @return intersection point, if exists
+ */
+ OPT_VECTOR2I IntersectLines( const SEG& aSeg ) const
+ {
+ return Intersect( aSeg, false, true );
+ }
+
+ bool Collide( const SEG& aSeg, int aClearance ) const;
+
+ ecoord SquaredDistance( const SEG& aSeg ) const;
+
+ /**
+ * Function Distance()
+ *
+ * Computes minimum Euclidean distance to segment aSeg.
+ * @param aSeg other segment
+ * @return minimum distance
+ */
+ int Distance( const SEG& aSeg ) const
+ {
+ return sqrt( SquaredDistance( aSeg ) );
+ }
+
+ ecoord SquaredDistance( const VECTOR2I& aP ) const
+ {
+ return ( NearestPoint( aP ) - aP ).SquaredEuclideanNorm();
+ }
+
+ /**
+ * Function Distance()
+ *
+ * Computes minimum Euclidean distance to point aP.
+ * @param aP the point
+ * @return minimum distance
+ */
+ int Distance( const VECTOR2I& aP ) const
+ {
+ return sqrt( SquaredDistance( aP ) );
+ }
+
+ void CanonicalCoefs( ecoord& qA, ecoord& qB, ecoord& qC ) const
+ {
+ qA = A.y - B.y;
+ qB = B.x - A.x;
+ qC = -qA * A.x - qB * A.y;
+ }
+
+ /**
+ * Function Collinear()
+ *
+ * Checks if segment aSeg lies on the same line as (this).
+ * @param aSeg the segment to chech colinearity with
+ * @return true, when segments are collinear.
+ */
+ bool Collinear( const SEG& aSeg ) const
+ {
+ ecoord qa, qb, qc;
+ CanonicalCoefs( qa, qb, qc );
+
+ ecoord d1 = std::abs( aSeg.A.x * qa + aSeg.A.y * qb + qc );
+ ecoord d2 = std::abs( aSeg.B.x * qa + aSeg.B.y * qb + qc );
+
+ return ( d1 <= 1 && d2 <= 1 );
+ }
+
+ bool ApproxCollinear( const SEG& aSeg ) const
+ {
+ ecoord p, q, r;
+ CanonicalCoefs( p, q, r );
+
+ ecoord dist1 = ( p * aSeg.A.x + q * aSeg.A.y + r ) / sqrt( p * p + q * q );
+ ecoord dist2 = ( p * aSeg.B.x + q * aSeg.B.y + r ) / sqrt( p * p + q * q );
+
+ return std::abs( dist1 ) <= 1 && std::abs( dist2 ) <= 1;
+ }
+
+ bool ApproxParallel ( const SEG& aSeg ) const
+ {
+ ecoord p, q, r;
+ CanonicalCoefs( p, q, r );
+
+ ecoord dist1 = ( p * aSeg.A.x + q * aSeg.A.y + r ) / sqrt( p * p + q * q );
+ ecoord dist2 = ( p * aSeg.B.x + q * aSeg.B.y + r ) / sqrt( p * p + q * q );
+
+ return std::abs( dist1 - dist2 ) <= 1;
+ }
+
+
+ bool Overlaps( const SEG& aSeg ) const
+ {
+ if( aSeg.A == aSeg.B ) // single point corner case
+ {
+ if( A == aSeg.A || B == aSeg.A )
+ return false;
+
+ return Contains( aSeg.A );
+ }
+
+ if( !Collinear( aSeg ) )
+ return false;
+
+ if( Contains( aSeg.A ) || Contains( aSeg.B ) )
+ return true;
+ if( aSeg.Contains( A ) || aSeg.Contains( B ) )
+ return true;
+
+ return false;
+ }
+
+ /**
+ * Function Length()
+ *
+ * Returns the length (this)
+ * @return length
+ */
+ int Length() const
+ {
+ return ( A - B ).EuclideanNorm();
+ }
+
+ ecoord SquaredLength() const
+ {
+ return ( A - B ).SquaredEuclideanNorm();
+ }
+
+ ecoord TCoef( const VECTOR2I& aP ) const;
+
+ /**
+ * Function Index()
+ *
+ * Return the index of this segment in its parent shape (applicable only to non-local segments)
+ * @return index value
+ */
+ int Index() const
+ {
+ return m_index;
+ }
+
+ bool Contains( const VECTOR2I& aP ) const;
+
+ bool PointCloserThan( const VECTOR2I& aP, int aDist ) const;
+
+ void Reverse()
+ {
+ std::swap( A, B );
+ }
+
+private:
+ bool ccw( const VECTOR2I& aA, const VECTOR2I& aB, const VECTOR2I &aC ) const;
+
+ ///> index withing the parent shape (used when m_is_local == false)
+ int m_index;
+};
+
+inline VECTOR2I SEG::LineProject( const VECTOR2I& aP ) const
+{
+ VECTOR2I d = B - A;
+ ecoord l_squared = d.Dot( d );
+
+ if( l_squared == 0 )
+ return A;
+
+ ecoord t = d.Dot( aP - A );
+
+ int xp = rescale( t, (ecoord)d.x, l_squared );
+ int yp = rescale( t, (ecoord)d.y, l_squared );
+
+ return A + VECTOR2I( xp, yp );
+}
+
+inline int SEG::LineDistance( const VECTOR2I& aP, bool aDetermineSide ) const
+{
+ ecoord p = A.y - B.y;
+ ecoord q = B.x - A.x;
+ ecoord r = -p * A.x - q * A.y;
+
+ ecoord dist = ( p * aP.x + q * aP.y + r ) / sqrt( p * p + q * q );
+
+ return aDetermineSide ? dist : std::abs( dist );
+}
+
+inline SEG::ecoord SEG::TCoef( const VECTOR2I& aP ) const
+{
+ VECTOR2I d = B - A;
+ return d.Dot( aP - A);
+}
+
+inline const VECTOR2I SEG::NearestPoint( const VECTOR2I& aP ) const
+{
+ VECTOR2I d = B - A;
+ ecoord l_squared = d.Dot( d );
+
+ if( l_squared == 0 )
+ return A;
+
+ ecoord t = d.Dot( aP - A );
+
+ if( t < 0 )
+ return A;
+ else if( t > l_squared )
+ return B;
+
+ int xp = rescale( t, (ecoord)d.x, l_squared );
+ int yp = rescale( t, (ecoord)d.y, l_squared );
+
+ return A + VECTOR2I( xp, yp );
+}
+
+inline std::ostream& operator<<( std::ostream& aStream, const SEG& aSeg )
+{
+ aStream << "[ " << aSeg.A << " - " << aSeg.B << " ]";
+
+ return aStream;
+}
+
+#endif // __SEG_H
diff --git a/include/geometry/shape.h b/include/geometry/shape.h
new file mode 100644
index 0000000..300de61
--- /dev/null
+++ b/include/geometry/shape.h
@@ -0,0 +1,171 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_H
+#define __SHAPE_H
+
+#include <string>
+#include <sstream>
+
+#include <math/vector2d.h>
+#include <math/box2.h>
+
+#include <geometry/seg.h>
+
+/**
+ * Enum SHAPE_TYPE
+ * Lists all supported shapes
+ */
+
+enum SHAPE_TYPE
+{
+ SH_RECT = 0, ///> axis-aligned rectangle
+ SH_SEGMENT, ///> line segment
+ SH_LINE_CHAIN, ///> line chain (polyline)
+ SH_CIRCLE, ///> circle
+ SH_CONVEX, ///> convex polygon
+ SH_POLY_SET, ///> any polygon (with holes, etc.)
+ SH_COMPOUND ///> compound shape, consisting of multiple simple shapes
+};
+
+/**
+ * Class SHAPE
+ *
+ * Represents an abstract shape on 2D plane.
+ */
+class SHAPE
+{
+protected:
+ typedef VECTOR2I::extended_type ecoord;
+
+public:
+ /**
+ * Constructor
+ *
+ * Creates an empty shape of type aType
+ */
+
+ SHAPE( SHAPE_TYPE aType ) : m_type( aType )
+ {}
+
+ // Destructor
+ virtual ~SHAPE()
+ {}
+
+ /**
+ * Function Type()
+ *
+ * Returns the type of the shape.
+ * @retval the type
+ */
+ SHAPE_TYPE Type() const
+ {
+ return m_type;
+ }
+
+ /**
+ * Function Clone()
+ *
+ * Returns a dynamically allocated copy of the shape
+ * @retval copy of the shape
+ */
+ virtual SHAPE* Clone() const
+ {
+ assert( false );
+ return NULL;
+ };
+
+ /**
+ * Function Collide()
+ *
+ * Checks if the boundary of shape (this) lies closer to the point aP than aClearance,
+ * indicating a collision.
+ * @return true, if there is a collision.
+ */
+ virtual bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const
+ {
+ return Collide( SEG( aP, aP ), aClearance );
+ }
+
+ /**
+ * Function Collide()
+ *
+ * Checks if the boundary of shape (this) lies closer to the shape aShape than aClearance,
+ * indicating a collision.
+ * @param aShape shape to check collision against
+ * @param aClearance minimum clearance
+ * @param aMTV minimum translation vector
+ * @return true, if there is a collision.
+ */
+ virtual bool Collide( const SHAPE* aShape, int aClearance, VECTOR2I& aMTV ) const;
+ virtual bool Collide( const SHAPE* aShape, int aClearance = 0 ) const;
+
+ /**
+ * Function Collide()
+ *
+ * Checks if the boundary of shape (this) lies closer to the segment aSeg than aClearance,
+ * indicating a collision.
+ * @return true, if there is a collision.
+ */
+ virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const = 0;
+
+ /**
+ * Function BBox()
+ *
+ * Computes a bounding box of the shape, with a margin of aClearance
+ * a collision.
+ * @param aClearance how much the bounding box is expanded wrs to the minimum enclosing rectangle
+ * for the shape.
+ * @return the bounding box.
+ */
+ virtual const BOX2I BBox( int aClearance = 0 ) const = 0;
+
+ /**
+ * Function Centre()
+ *
+ * Computes a center-of-mass of the shape
+ * @return the center-of-mass point
+ */
+ virtual VECTOR2I Centre() const
+ {
+ return BBox( 0 ).Centre(); // if nothing better is available....
+ }
+
+ virtual void Move ( const VECTOR2I& aVector ) = 0;
+
+ virtual bool IsSolid() const = 0;
+
+ virtual bool Parse( std::stringstream& aStream );
+
+ virtual const std::string Format( ) const;
+
+protected:
+ ///> type of our shape
+ SHAPE_TYPE m_type;
+};
+
+bool CollideShapes( const SHAPE* aA, const SHAPE* aB, int aClearance,
+ bool aNeedMTV, VECTOR2I& aMTV );
+
+#endif // __SHAPE_H
diff --git a/include/geometry/shape_circle.h b/include/geometry/shape_circle.h
new file mode 100644
index 0000000..a915ef9
--- /dev/null
+++ b/include/geometry/shape_circle.h
@@ -0,0 +1,103 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_CIRCLE_H
+#define __SHAPE_CIRCLE_H
+
+#include "shape.h"
+
+class SHAPE_CIRCLE : public SHAPE
+{
+public:
+ SHAPE_CIRCLE() :
+ SHAPE( SH_CIRCLE ), m_radius( 0 )
+ {}
+
+ SHAPE_CIRCLE( const VECTOR2I& aCenter, int aRadius ) :
+ SHAPE( SH_CIRCLE ), m_radius( aRadius ), m_center( aCenter )
+ {}
+
+ SHAPE_CIRCLE( const SHAPE_CIRCLE& aOther ) :
+ SHAPE( SH_CIRCLE ),
+ m_radius( aOther.m_radius ),
+ m_center( aOther.m_center )
+ {};
+
+ ~SHAPE_CIRCLE()
+ {}
+
+ SHAPE* Clone() const
+ {
+ return new SHAPE_CIRCLE( *this );
+ }
+
+ const BOX2I BBox( int aClearance = 0 ) const
+ {
+ const VECTOR2I rc( m_radius + aClearance, m_radius + aClearance );
+
+ return BOX2I( m_center - rc, rc * 2 );
+ }
+
+ bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+ {
+ int rc = aClearance + m_radius;
+
+ return aSeg.Distance( m_center ) < rc;
+ }
+
+ void SetRadius( int aRadius )
+ {
+ m_radius = aRadius;
+ }
+
+ void SetCenter( const VECTOR2I& aCenter )
+ {
+ m_center = aCenter;
+ }
+
+ int GetRadius() const
+ {
+ return m_radius;
+ }
+
+ const VECTOR2I GetCenter() const
+ {
+ return m_center;
+ }
+
+ void Move( const VECTOR2I& aVector )
+ {
+ m_center += aVector;
+ }
+
+ bool IsSolid() const
+ {
+ return true;
+ }
+private:
+ int m_radius;
+ VECTOR2I m_center;
+};
+
+#endif
diff --git a/include/geometry/shape_convex.h b/include/geometry/shape_convex.h
new file mode 100644
index 0000000..308a1b3
--- /dev/null
+++ b/include/geometry/shape_convex.h
@@ -0,0 +1,189 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Kicad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_CONVEX_H
+#define __SHAPE_CONVEX_H
+
+#include <vector>
+
+#include <geometry/shape.h>
+#include <geometry/seg.h>
+#include <geometry/shape_line_chain.h>
+
+/**
+ * Class SHAPE_CONVEX
+ *
+ * Represents a convex polygon consisting of a zero-thickness closed chain of
+ * connected line segments.
+ *
+ * Internally the vertices are held in a SHAPE_LINE_CHAIN, please note that
+ * there is a "virtual" line segment between the last and first vertex.
+ */
+class SHAPE_CONVEX : public SHAPE
+{
+public:
+ /**
+ * Constructor
+ * Creates an empty polygon
+ */
+ SHAPE_CONVEX() :
+ SHAPE( SH_CONVEX )
+ {
+ m_points.SetClosed( true );
+ }
+
+ SHAPE_CONVEX( const SHAPE_CONVEX& aOther ) :
+ SHAPE( SH_CONVEX ), m_points( aOther.m_points )
+ {}
+
+ SHAPE* Clone() const
+ {
+ return new SHAPE_CONVEX( *this );
+ }
+
+ /**
+ * Function Clear()
+ * Removes all points from the polygon.
+ */
+ void Clear()
+ {
+ m_points.Clear();
+ }
+
+ /// @copydoc SHAPE::BBox()
+ const BOX2I BBox( int aClearance = 0 ) const
+ {
+ return m_points.BBox( aClearance );
+ }
+
+ /**
+ * Function PointCount()
+ *
+ * Returns the number of points (vertices) in this polygon
+ * @return number of points
+ */
+ int PointCount() const
+ {
+ return m_points.PointCount();
+ }
+
+ /**
+ * Function Point()
+ *
+ * Returns a reference to a given point in the polygon. Negative indices
+ * count from the end of the point list, e.g. -1 means "last point", -2
+ * means "second to last point" and so on.
+ * @param aIndex index of the point
+ * @return reference to the point
+ */
+ VECTOR2I& Point( int aIndex )
+ {
+ return m_points.Point( aIndex );
+ }
+
+ /**
+ * Function CPoint()
+ *
+ * Returns a const reference to a given point in the polygon. Negative
+ * indices count from the end of the point list, e.g. -1 means "last
+ * point", -2 means "second to last point" and so on.
+ * @param aIndex index of the point
+ * @return const reference to the point
+ */
+ const VECTOR2I& CPoint( int aIndex ) const
+ {
+ return m_points.CPoint( aIndex );
+ }
+
+ /**
+ * Function CDPoint()
+ *
+ * Returns a given point as a vector with elements of type double.
+ *
+ * @param aIndex index of the point
+ * @return the point with elements of type double
+ */
+ const VECTOR2D CDPoint( int aIndex ) const
+ {
+ const VECTOR2I& v = CPoint( aIndex );
+ return VECTOR2D( v.x, v.y );
+ }
+
+ /**
+ * Function Vertices()
+ *
+ * Returns the list of vertices defining this convex polygon.
+ *
+ * @return the list of vertices defining this convex polygon
+ */
+ const SHAPE_LINE_CHAIN& Vertices() const
+ {
+ return m_points;
+ }
+
+ /**
+ * Function Append()
+ *
+ * Appends a new point at the end of the polygon.
+ * @param aX is X coordinate of the new point
+ * @param aY is Y coordinate of the new point
+ */
+ void Append( int aX, int aY )
+ {
+ VECTOR2I v( aX, aY );
+ Append( v );
+ }
+
+ /**
+ * Function Append()
+ *
+ * Appends a new point at the end of the polygon.
+ * @param aP the new point
+ */
+ void Append( const VECTOR2I& aP )
+ {
+ m_points.Append( aP );
+ }
+
+ /// @copydoc SHAPE::Collide()
+ bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+ {
+ return m_points.Collide( aSeg, aClearance );
+ }
+
+ void Move( const VECTOR2I& aVector )
+ {
+ m_points.Move( aVector );
+ }
+
+ bool IsSolid() const
+ {
+ return true;
+ }
+
+private:
+ // vertices
+ SHAPE_LINE_CHAIN m_points;
+};
+
+#endif // __SHAPE_CONVEX_H
diff --git a/include/geometry/shape_file_io.h b/include/geometry/shape_file_io.h
new file mode 100644
index 0000000..78784d7
--- /dev/null
+++ b/include/geometry/shape_file_io.h
@@ -0,0 +1,69 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef __SHAPE_FILE_IO_H
+#define __SHAPE_FILE_IO_H
+
+#include <cstdio>
+
+class SHAPE;
+
+/**
+ * Class SHAPE_FILE_IO
+ *
+ * Helper class for saving/loading shapes from a file.
+ */
+class SHAPE_FILE_IO
+{
+ public:
+ enum IO_MODE
+ {
+ IOM_READ = 0,
+ IOM_APPEND,
+ IOM_WRITE
+ };
+
+ SHAPE_FILE_IO( const std::string& aFilename, IO_MODE aMode = IOM_READ );
+ ~SHAPE_FILE_IO();
+
+ void BeginGroup( const std::string aName = "<noname>");
+ void EndGroup();
+
+ SHAPE* Read();
+
+ void Write( const SHAPE* aShape, const std::string aName = "<noname>" );
+
+ void Write( const SHAPE& aShape, const std::string aName = "<noname>" )
+ {
+ Write( &aShape, aName );
+ }
+
+ private:
+ FILE* m_file;
+ bool m_groupActive;
+ IO_MODE m_mode;
+};
+
+#endif
diff --git a/include/geometry/shape_index.h b/include/geometry/shape_index.h
new file mode 100644
index 0000000..94703ce
--- /dev/null
+++ b/include/geometry/shape_index.h
@@ -0,0 +1,363 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jacobo Aragunde Pérez
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_INDEX_H
+#define __SHAPE_INDEX_H
+
+#include <vector>
+#include <geometry/shape.h>
+#include <geometry/rtree.h>
+
+
+/**
+ * shapeFunctor template function
+ *
+ * It is used by SHAPE_INDEX to get a SHAPE* from another type.
+ * By default relies on T::GetShape() method, should be specialized if the T object
+ * doesn't allow that method.
+ * @param aItem generic T object
+ * @return a SHAPE* object equivalent to object.
+ */
+template <class T>
+static const SHAPE* shapeFunctor( T aItem )
+{
+ return aItem->Shape();
+}
+
+/**
+ * boundingBox template method
+ *
+ * It is used by SHAPE_INDEX to get the bounding box of a generic T object.
+ * By default relies on T::BBox() method, should be specialized if the T object
+ * doesn't allow that method.
+ * @param aObject generic T object
+ * @return a BOX2I object containing the bounding box of the T object.
+ */
+template <class T>
+BOX2I boundingBox( T aObject )
+{
+ return shapeFunctor( aObject )->BBox();
+}
+
+/**
+ * acceptVisitor template method
+ *
+ * It is used by SHAPE_INDEX to implement Accept().
+ * By default relies on V::operation() redefinition, should be specialized if V class
+ * doesn't have its () operation defined to accept T objects.
+ * @param aObject generic T object
+ * @param aVisitor V visitor object
+ */
+template <class T, class V>
+void acceptVisitor( T aObject, V aVisitor )
+{
+ aVisitor( aObject );
+}
+
+/**
+ * collide template method
+ *
+ * It is used by SHAPE_INDEX to implement Query().
+ * By default relies on T::Collide(U) method, should be specialized if the T object
+ * doesn't allow that method.
+ * @param aObject generic T object
+ * @param aAnotherObject generic U object
+ * @param aMinDistance minimum collision distance
+ * @return if object and anotherObject collide
+ */
+template <class T, class U>
+bool collide( T aObject, U aAnotherObject, int aMinDistance )
+{
+ return shapeFunctor( aObject )->Collide( aAnotherObject, aMinDistance );
+}
+
+template <class T, class V>
+bool queryCallback( T aShape, void* aContext )
+{
+ V* visitor = (V*) aContext;
+
+ acceptVisitor<T, V>( aShape, *visitor );
+
+ return true;
+}
+
+template <class T = SHAPE*>
+class SHAPE_INDEX
+{
+ public:
+ class Iterator
+ {
+ private:
+ typedef typename RTree<T, int, 2, float>::Iterator RTreeIterator;
+ RTreeIterator iterator;
+
+ /**
+ * Function Init()
+ *
+ * Setup the internal tree iterator.
+ * @param aTree pointer to a RTREE object
+ */
+ void Init( RTree<T, int, 2, float>* aTree )
+ {
+ aTree->GetFirst( iterator );
+ }
+
+ public:
+ /**
+ * Iterator constructor
+ *
+ * Creates an iterator for the index object
+ * @param aIndex SHAPE_INDEX object to iterate
+ */
+ Iterator( SHAPE_INDEX* aIndex )
+ {
+ Init( aIndex->m_tree );
+ }
+
+ /**
+ * Operator * (prefix)
+ *
+ * Returns the next data element.
+ */
+ T operator*()
+ {
+ return *iterator;
+ }
+
+ /**
+ * Operator ++ (prefix)
+ *
+ * Shifts the iterator to the next element.
+ */
+ bool operator++()
+ {
+ return ++iterator;
+ }
+
+ /**
+ * Operator ++ (postfix)
+ *
+ * Shifts the iterator to the next element.
+ */
+ bool operator++( int )
+ {
+ return ++iterator;
+ }
+
+ /**
+ * Function IsNull()
+ *
+ * Checks if the iterator has reached the end.
+ * @return true if it is in an invalid position (data finished)
+ */
+ bool IsNull()
+ {
+ return iterator.IsNull();
+ }
+
+ /**
+ * Function IsNotNull()
+ *
+ * Checks if the iterator has not reached the end.
+ * @return true if it is in an valid position (data not finished)
+ */
+ bool IsNotNull()
+ {
+ return iterator.IsNotNull();
+ }
+
+ /**
+ * Function Next()
+ *
+ * Returns the current element of the iterator and moves to the next
+ * position.
+ * @return SHAPE object pointed by the iterator before moving to the next position.
+ */
+ T Next()
+ {
+ T object = *iterator;
+ ++iterator;
+
+ return object;
+ }
+ };
+
+ SHAPE_INDEX();
+
+ ~SHAPE_INDEX();
+
+ /**
+ * Function Add()
+ *
+ * Adds a SHAPE to the index.
+ * @param aShape is the new SHAPE.
+ */
+ void Add( T aShape );
+
+ /**
+ * Function Remove()
+ *
+ * Removes a SHAPE to the index.
+ * @param aShape is the new SHAPE.
+ */
+ void Remove( T aShape );
+
+ /**
+ * Function RemoveAll()
+ *
+ * Removes all the contents of the index.
+ */
+ void RemoveAll();
+
+ /**
+ * Function Accept()
+ *
+ * Accepts a visitor for every SHAPE object contained in this INDEX.
+ * @param aVisitor Visitor object to be run
+ */
+ template <class V>
+ void Accept( V aVisitor )
+ {
+ Iterator iter = this->Begin();
+
+ while( !iter.IsNull() )
+ {
+ T shape = *iter;
+ acceptVisitor( shape, aVisitor );
+ iter++;
+ }
+ }
+
+ /**
+ * Function Reindex()
+ *
+ * Rebuilds the index. This should be used if the geometry of the objects
+ * contained by the index has changed.
+ */
+ void Reindex();
+
+ /**
+ * Function Query()
+ *
+ * Runs a callback on every SHAPE object contained in the bounding box of (shape).
+ * @param aShape shape to search against
+ * @param aMinDistance distance threshold
+ * @param aVisitor object to be invoked on every object contained in the search area.
+ */
+ template <class V>
+ int Query( const SHAPE *aShape, int aMinDistance, V& aVisitor, bool aExact )
+ {
+ BOX2I box = aShape->BBox();
+ box.Inflate( aMinDistance );
+
+ int min[2] = { box.GetX(), box.GetY() };
+ int max[2] = { box.GetRight(), box.GetBottom() };
+
+ return this->m_tree->Search( min, max, aVisitor );
+ }
+
+ /**
+ * Function Begin()
+ *
+ * Creates an iterator for the current index object
+ * @return iterator
+ */
+ Iterator Begin();
+
+ private:
+ RTree<T, int, 2, float>* m_tree;
+};
+
+/*
+ * Class members implementation
+ */
+
+template <class T>
+SHAPE_INDEX<T>::SHAPE_INDEX()
+{
+ this->m_tree = new RTree<T, int, 2, float>();
+}
+
+template <class T>
+SHAPE_INDEX<T>::~SHAPE_INDEX()
+{
+ delete this->m_tree;
+}
+
+template <class T>
+void SHAPE_INDEX<T>::Add( T aShape )
+{
+ BOX2I box = boundingBox( aShape );
+ int min[2] = { box.GetX(), box.GetY() };
+ int max[2] = { box.GetRight(), box.GetBottom() };
+
+ this->m_tree->Insert( min, max, aShape );
+}
+
+template <class T>
+void SHAPE_INDEX<T>::Remove( T aShape )
+{
+ BOX2I box = boundingBox( aShape );
+ int min[2] = { box.GetX(), box.GetY() };
+ int max[2] = { box.GetRight(), box.GetBottom() };
+
+ this->m_tree->Remove( min, max, aShape );
+}
+
+template <class T>
+void SHAPE_INDEX<T>::RemoveAll()
+{
+ this->m_tree->RemoveAll();
+}
+
+template <class T>
+void SHAPE_INDEX<T>::Reindex()
+{
+ RTree<T, int, 2, float>* newTree;
+ newTree = new RTree<T, int, 2, float>();
+
+ Iterator iter = this->Begin();
+
+ while( !iter.IsNull() )
+ {
+ T shape = *iter;
+ BOX2I box = boundingBox( shape );
+ int min[2] = { box.GetX(), box.GetY() };
+ int max[2] = { box.GetRight(), box.GetBottom() };
+ newTree->Insert( min, max, shape );
+ iter++;
+ }
+
+ delete this->m_tree;
+ this->m_tree = newTree;
+}
+
+template <class T>
+typename SHAPE_INDEX<T>::Iterator SHAPE_INDEX<T>::Begin()
+{
+ return Iterator( this );
+}
+
+#endif
diff --git a/include/geometry/shape_index_list.h b/include/geometry/shape_index_list.h
new file mode 100644
index 0000000..194ae5f
--- /dev/null
+++ b/include/geometry/shape_index_list.h
@@ -0,0 +1,291 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_INDEX_LIST_H
+#define __SHAPE_INDEX_LIST_H
+
+#include <boost/unordered_map.hpp>
+
+template <class T>
+const SHAPE* defaultShapeFunctor( const T aItem )
+{
+ return aItem->Shape();
+}
+
+template <class T, const SHAPE* (ShapeFunctor) (const T) = defaultShapeFunctor<T> >
+class SHAPE_INDEX_LIST
+{
+ struct SHAPE_ENTRY
+ {
+ SHAPE_ENTRY( T aParent )
+ {
+ shape = ShapeFunctor( aParent );
+ bbox = shape->BBox( 0 );
+ parent = aParent;
+ }
+
+ ~SHAPE_ENTRY()
+ {
+ }
+
+ T parent;
+ const SHAPE* shape;
+ BOX2I bbox;
+ };
+
+ typedef std::vector<SHAPE_ENTRY> SHAPE_VEC;
+ typedef typename std::vector<SHAPE_ENTRY>::iterator SHAPE_VEC_ITER;
+
+public:
+ // "Normal" iterator interface, for STL algorithms.
+ class iterator
+ {
+ public:
+ iterator()
+ {}
+
+ iterator( SHAPE_VEC_ITER aCurrent ) :
+ m_current( aCurrent )
+ {}
+
+ iterator( const iterator& aB ) :
+ m_current( aB.m_current )
+ {}
+
+ T operator*() const
+ {
+ return (*m_current).parent;
+ }
+
+ void operator++()
+ {
+ ++m_current;
+ }
+
+ iterator& operator++( int aDummy )
+ {
+ ++m_current;
+ return *this;
+ }
+
+ bool operator==( const iterator& aRhs ) const
+ {
+ return m_current == aRhs.m_current;
+ }
+
+ bool operator!=( const iterator& aRhs ) const
+ {
+ return m_current != aRhs.m_current;
+ }
+
+ const iterator& operator=( const iterator& aRhs )
+ {
+ m_current = aRhs.m_current;
+ return *this;
+ }
+
+ private:
+ SHAPE_VEC_ITER m_current;
+ };
+
+ // "Query" iterator, for iterating over a set of spatially matching shapes.
+ class query_iterator
+ {
+ public:
+ query_iterator()
+ {
+ }
+
+ query_iterator( SHAPE_VEC_ITER aCurrent, SHAPE_VEC_ITER aEnd, SHAPE* aShape,
+ int aMinDistance, bool aExact ) :
+ m_end( aEnd ),
+ m_current( aCurrent ),
+ m_shape( aShape ),
+ m_minDistance( aMinDistance ),
+ m_exact( aExact )
+ {
+ if( aShape )
+ {
+ m_refBBox = aShape->BBox();
+ next();
+ }
+ }
+
+ query_iterator( const query_iterator& aB ) :
+ m_end( aB.m_end ),
+ m_current( aB.m_current ),
+ m_shape( aB.m_shape ),
+ m_minDistance( aB.m_minDistance ),
+ m_exact( aB.m_exact ),
+ m_refBBox( aB.m_refBBox )
+ {
+ }
+
+ T operator*() const
+ {
+ return (*m_current).parent;
+ }
+
+ query_iterator& operator++()
+ {
+ ++m_current;
+ next();
+ return *this;
+ }
+
+ query_iterator& operator++( int aDummy )
+ {
+ ++m_current;
+ next();
+ return *this;
+ }
+
+ bool operator==( const query_iterator& aRhs ) const
+ {
+ return m_current == aRhs.m_current;
+ }
+
+ bool operator!=( const query_iterator& aRhs ) const
+ {
+ return m_current != aRhs.m_current;
+ }
+
+ const query_iterator& operator=( const query_iterator& aRhs )
+ {
+ m_end = aRhs.m_end;
+ m_current = aRhs.m_current;
+ m_shape = aRhs.m_shape;
+ m_minDistance = aRhs.m_minDistance;
+ m_exact = aRhs.m_exact;
+ m_refBBox = aRhs.m_refBBox;
+ return *this;
+ }
+
+ private:
+ void next()
+ {
+ while( m_current != m_end )
+ {
+ if( m_refBBox.Distance( m_current->bbox ) <= m_minDistance )
+ {
+ if( !m_exact || m_current->shape->Collide( m_shape, m_minDistance ) )
+ return;
+ }
+
+ ++m_current;
+ }
+ }
+
+ SHAPE_VEC_ITER m_end;
+ SHAPE_VEC_ITER m_current;
+ BOX2I m_refBBox;
+ bool m_exact;
+ SHAPE* m_shape;
+ int m_minDistance;
+ };
+
+ void Add( T aItem )
+ {
+ SHAPE_ENTRY s( aItem );
+
+ m_shapes.push_back( s );
+ }
+
+ void Remove( const T aItem )
+ {
+ SHAPE_VEC_ITER i;
+
+ for( i = m_shapes.begin(); i != m_shapes.end(); ++i )
+ {
+ if( i->parent == aItem )
+ break;
+ }
+
+ if( i == m_shapes.end() )
+ return;
+
+ m_shapes.erase( i );
+ }
+
+ int Size() const
+ {
+ return m_shapes.size();
+ }
+
+ template <class Visitor>
+ int Query( const SHAPE* aShape, int aMinDistance, Visitor& aV, bool aExact = true ) // const
+ {
+ SHAPE_VEC_ITER i;
+ int n = 0;
+ VECTOR2I::extended_type minDistSq = (VECTOR2I::extended_type) aMinDistance * aMinDistance;
+
+ BOX2I refBBox = aShape->BBox();
+
+ for( i = m_shapes.begin(); i != m_shapes.end(); ++i )
+ {
+ if( refBBox.SquaredDistance( i->bbox ) <= minDistSq )
+ {
+ if( !aExact || i->shape->Collide( aShape, aMinDistance ) )
+ {
+ n++;
+
+ if( !aV( i->parent ) )
+ return n;
+ }
+ }
+ }
+
+ return n;
+ }
+
+ void Clear()
+ {
+ m_shapes.clear();
+ }
+
+ query_iterator qbegin( SHAPE* aShape, int aMinDistance, bool aExact )
+ {
+ return query_iterator( m_shapes.begin(), m_shapes.end(), aShape, aMinDistance, aExact );
+ }
+
+ const query_iterator qend()
+ {
+ return query_iterator( m_shapes.end(), m_shapes.end(), NULL, 0, false );
+ }
+
+ iterator begin()
+ {
+ return iterator( m_shapes.begin() );
+ }
+
+ iterator end()
+ {
+ return iterator( m_shapes.end() );
+ }
+
+private:
+ SHAPE_VEC m_shapes;
+};
+
+#endif
diff --git a/include/geometry/shape_line_chain.h b/include/geometry/shape_line_chain.h
new file mode 100644
index 0000000..ae2bf5e
--- /dev/null
+++ b/include/geometry/shape_line_chain.h
@@ -0,0 +1,598 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_LINE_CHAIN
+#define __SHAPE_LINE_CHAIN
+
+#include <vector>
+#include <sstream>
+
+#include <boost/optional.hpp>
+
+#include <math/vector2d.h>
+#include <geometry/shape.h>
+#include <geometry/seg.h>
+
+/**
+ * Class SHAPE_LINE_CHAIN
+ *
+ * Represents a polyline (an zero-thickness chain of connected line segments).
+ * I purposedly didn't name it "polyline" to avoid confusion with the existing CPolyLine
+ * class in pcbnew.
+ *
+ * SHAPE_LINE_CHAIN class shall not be used for polygons!
+ */
+class SHAPE_LINE_CHAIN : public SHAPE
+{
+private:
+ typedef std::vector<VECTOR2I>::iterator point_iter;
+ typedef std::vector<VECTOR2I>::const_iterator point_citer;
+
+public:
+ /**
+ * Struct INTERSECTION
+ *
+ * Represents an intersection between two line segments
+ */
+ struct INTERSECTION
+ {
+ /// segment belonging from the (this) argument of Intersect()
+ SEG our;
+ /// segment belonging from the aOther argument of Intersect()
+ SEG their;
+ /// point of intersection between our and their.
+ VECTOR2I p;
+ };
+
+ typedef std::vector<INTERSECTION> INTERSECTIONS;
+
+ /**
+ * Constructor
+ * Initializes an empty line chain.
+ */
+ SHAPE_LINE_CHAIN() :
+ SHAPE( SH_LINE_CHAIN ), m_closed( false )
+ {}
+
+ /**
+ * Copy Constructor
+ */
+ SHAPE_LINE_CHAIN( const SHAPE_LINE_CHAIN& aShape ) :
+ SHAPE( SH_LINE_CHAIN ), m_points( aShape.m_points ), m_closed( aShape.m_closed )
+ {}
+
+ /**
+ * Constructor
+ * Initializes a 2-point line chain (a single segment)
+ */
+ SHAPE_LINE_CHAIN( const VECTOR2I& aA, const VECTOR2I& aB ) :
+ SHAPE( SH_LINE_CHAIN ), m_closed( false )
+ {
+ m_points.resize( 2 );
+ m_points[0] = aA;
+ m_points[1] = aB;
+ }
+
+ SHAPE_LINE_CHAIN( const VECTOR2I& aA, const VECTOR2I& aB, const VECTOR2I& aC ) :
+ SHAPE( SH_LINE_CHAIN ), m_closed( false )
+ {
+ m_points.resize( 3 );
+ m_points[0] = aA;
+ m_points[1] = aB;
+ m_points[2] = aC;
+ }
+
+ SHAPE_LINE_CHAIN( const VECTOR2I& aA, const VECTOR2I& aB, const VECTOR2I& aC, const VECTOR2I& aD ) :
+ SHAPE( SH_LINE_CHAIN ), m_closed( false )
+ {
+ m_points.resize( 4 );
+ m_points[0] = aA;
+ m_points[1] = aB;
+ m_points[2] = aC;
+ m_points[3] = aD;
+ }
+
+
+ SHAPE_LINE_CHAIN( const VECTOR2I* aV, int aCount ) :
+ SHAPE( SH_LINE_CHAIN ),
+ m_closed( false )
+ {
+ m_points.resize( aCount );
+
+ for( int i = 0; i < aCount; i++ )
+ m_points[i] = *aV++;
+ }
+
+ ~SHAPE_LINE_CHAIN()
+ {}
+
+ SHAPE* Clone() const;
+
+ /**
+ * Function Clear()
+ * Removes all points from the line chain.
+ */
+ void Clear()
+ {
+ m_points.clear();
+ m_closed = false;
+ }
+
+ /**
+ * Function SetClosed()
+ *
+ * Marks the line chain as closed (i.e. with a segment connecting the last point with
+ * the first point).
+ * @param aClosed: whether the line chain is to be closed or not.
+ */
+ void SetClosed( bool aClosed )
+ {
+ m_closed = aClosed;
+ }
+
+ /**
+ * Function IsClosed()
+ *
+ * @return aClosed: true, when our line is closed.
+ */
+ bool IsClosed() const
+ {
+ return m_closed;
+ }
+
+ /**
+ * Function SegmentCount()
+ *
+ * Returns number of segments in this line chain.
+ * @return number of segments
+ */
+ int SegmentCount() const
+ {
+ int c = m_points.size() - 1;
+ if( m_closed )
+ c++;
+
+ return std::max( 0, c );
+ }
+
+ /**
+ * Function PointCount()
+ *
+ * Returns the number of points (vertices) in this line chain
+ * @return number of points
+ */
+ int PointCount() const
+ {
+ return m_points.size();
+ }
+
+ /**
+ * Function Segment()
+ *
+ * Returns a segment referencing to the segment (index) in the line chain.
+ * Modifying ends of the returned segment will modify corresponding points in the line chain.
+ * @param aIndex: index of the segment in the line chain. Negative values are counted from
+ * the end (i.e. -1 means the last segment in the line chain)
+ * @return SEG referenced to given segment in the line chain
+ */
+ SEG Segment( int aIndex )
+ {
+ if( aIndex < 0 )
+ aIndex += SegmentCount();
+
+ if( aIndex == (int)( m_points.size() - 1 ) && m_closed )
+ return SEG( m_points[aIndex], m_points[0], aIndex );
+ else
+ return SEG( m_points[aIndex], m_points[aIndex + 1], aIndex );
+ }
+
+ /**
+ * Function CSegment()
+ *
+ * Returns a read-only segment referencing to the segment (index) in the line chain.
+ * @param aIndex: index of the segment in the line chain. Negative values are counted from
+ * the end (i.e. -1 means the last segment in the line chain)
+ * @return SEG referenced to given segment in the line chain
+ */
+ const SEG CSegment( int aIndex ) const
+ {
+ if( aIndex < 0 )
+ aIndex += SegmentCount();
+
+ if( aIndex == (int)( m_points.size() - 1 ) && m_closed )
+ return SEG( const_cast<VECTOR2I&>( m_points[aIndex] ),
+ const_cast<VECTOR2I&>( m_points[0] ), aIndex );
+ else
+ return SEG( const_cast<VECTOR2I&>( m_points[aIndex] ),
+ const_cast<VECTOR2I&>( m_points[aIndex + 1] ), aIndex );
+ }
+
+ /**
+ * Function Point()
+ *
+ * Returns a reference to a given point in the line chain.
+ * @param aIndex index of the point
+ * @return reference to the point
+ */
+ VECTOR2I& Point( int aIndex )
+ {
+ if( aIndex < 0 )
+ aIndex += PointCount();
+
+ return m_points[aIndex];
+ }
+
+ /**
+ * Function CPoint()
+ *
+ * Returns a const reference to a given point in the line chain.
+ * @param aIndex index of the point
+ * @return const reference to the point
+ */
+ const VECTOR2I& CPoint( int aIndex ) const
+ {
+ if( aIndex < 0 )
+ aIndex += PointCount();
+ else if( aIndex >= PointCount() )
+ aIndex -= PointCount();
+
+ return m_points[aIndex];
+ }
+
+ /// @copydoc SHAPE::BBox()
+ const BOX2I BBox( int aClearance = 0 ) const
+ {
+ BOX2I bbox;
+ bbox.Compute( m_points );
+
+ if( aClearance != 0 )
+ bbox.Inflate( aClearance );
+
+ return bbox;
+ }
+
+ /**
+ * Function Collide()
+ *
+ * Checks if point aP lies closer to us than aClearance.
+ * @param aP the point to check for collisions with
+ * @param aClearance minimum distance that does not qualify as a collision.
+ * @return true, when a collision has been found
+ */
+ bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const;
+
+ /**
+ * Function Collide()
+ *
+ * Checks if segment aSeg lies closer to us than aClearance.
+ * @param aSeg the segment to check for collisions with
+ * @param aClearance minimum distance that does not qualify as a collision.
+ * @return true, when a collision has been found
+ */
+ bool Collide( const SEG& aSeg, int aClearance = 0 ) const;
+
+ /**
+ * Function Distance()
+ *
+ * Computes the minimum distance between the line chain and a point aP.
+ * @param aP the point
+ * @return minimum distance.
+ */
+ int Distance( const VECTOR2I& aP ) const;
+
+ /**
+ * Function Reverse()
+ *
+ * Reverses point order in the line chain.
+ * @return line chain with reversed point order (original A-B-C-D: returned D-C-B-A)
+ */
+ const SHAPE_LINE_CHAIN Reverse() const;
+
+ /**
+ * Function Length()
+ *
+ * Returns length of the line chain in Euclidean metric.
+ * @return length of the line chain
+ */
+ int Length() const;
+
+ /**
+ * Function Append()
+ *
+ * Appends a new point at the end of the line chain.
+ * @param aX is X coordinate of the new point
+ * @param aY is Y coordinate of the new point
+ */
+ void Append( int aX, int aY, bool aAllowDuplication = false )
+ {
+ VECTOR2I v( aX, aY );
+ Append( v, aAllowDuplication );
+ }
+
+ /**
+ * Function Append()
+ *
+ * Appends a new point at the end of the line chain.
+ * @param aP the new point
+ */
+ void Append( const VECTOR2I& aP, bool aAllowDuplication = false )
+ {
+ if( m_points.size() == 0 )
+ m_bbox = BOX2I( aP, VECTOR2I( 0, 0 ) );
+
+ if( m_points.size() == 0 || aAllowDuplication || CPoint( -1 ) != aP )
+ {
+ m_points.push_back( aP );
+ m_bbox.Merge( aP );
+ }
+ }
+
+ /**
+ * Function Append()
+ *
+ * Appends another line chain at the end.
+ * @param aOtherLine the line chain to be appended.
+ */
+ void Append( const SHAPE_LINE_CHAIN& aOtherLine )
+ {
+ if( aOtherLine.PointCount() == 0 )
+ return;
+
+ else if( PointCount() == 0 || aOtherLine.CPoint( 0 ) != CPoint( -1 ) )
+ {
+ const VECTOR2I p = aOtherLine.CPoint( 0 );
+ m_points.push_back( p );
+ m_bbox.Merge( p );
+ }
+
+ for( int i = 1; i < aOtherLine.PointCount(); i++ )
+ {
+ const VECTOR2I p = aOtherLine.CPoint( i );
+ m_points.push_back( p );
+ m_bbox.Merge( p );
+ }
+ }
+
+ void Insert( int aVertex, const VECTOR2I& aP )
+ {
+ m_points.insert( m_points.begin() + aVertex, aP );
+ }
+
+ /**
+ * Function Replace()
+ *
+ * Replaces points with indices in range [start_index, end_index] with a single
+ * point aP.
+ * @param aStartIndex start of the point range to be replaced (inclusive)
+ * @param aEndIndex end of the point range to be replaced (inclusive)
+ * @param aP replacement point
+ */
+ void Replace( int aStartIndex, int aEndIndex, const VECTOR2I& aP );
+
+ /**
+ * Function Replace()
+ *
+ * Replaces points with indices in range [start_index, end_index] with the points from
+ * line chain aLine.
+ * @param aStartIndex start of the point range to be replaced (inclusive)
+ * @param aEndIndex end of the point range to be replaced (inclusive)
+ * @param aLine replacement line chain.
+ */
+ void Replace( int aStartIndex, int aEndIndex, const SHAPE_LINE_CHAIN& aLine );
+
+ /**
+ * Function Remove()
+ *
+ * Removes the range of points [start_index, end_index] from the line chain.
+ * @param aStartIndex start of the point range to be replaced (inclusive)
+ * @param aEndIndex end of the point range to be replaced (inclusive)
+ */
+ void Remove( int aStartIndex, int aEndIndex );
+
+ /**
+ * Function Split()
+ *
+ * Inserts the point aP belonging to one of the our segments, splitting the adjacent
+ * segment in two.
+ * @param aP the point to be inserted
+ * @return index of the newly inserted point (or a negative value if aP does not lie on
+ * our line)
+ */
+ int Split( const VECTOR2I& aP );
+
+ /**
+ * Function Find()
+ *
+ * Searches for point aP.
+ * @param aP the point to be looked for
+ * @return index of the correspoinding point in the line chain or negative when not found.
+ */
+ int Find( const VECTOR2I& aP ) const;
+
+ /**
+ * Function FindSegment()
+ *
+ * Searches for segment containing point aP.
+ * @param aP the point to be looked for
+ * @return index of the correspoinding segment in the line chain or negative when not found.
+ */
+ int FindSegment( const VECTOR2I& aP ) const;
+
+ /**
+ * Function Slice()
+ *
+ * Returns a subset of this line chain containing the [start_index, end_index] range of points.
+ * @param aStartIndex start of the point range to be returned (inclusive)
+ * @param aEndIndex end of the point range to be returned (inclusive)
+ * @return cut line chain.
+ */
+ const SHAPE_LINE_CHAIN Slice( int aStartIndex, int aEndIndex = -1 ) const;
+
+ struct compareOriginDistance
+ {
+ compareOriginDistance( const VECTOR2I& aOrigin ):
+ m_origin( aOrigin )
+ {}
+
+ bool operator()( const INTERSECTION& aA, const INTERSECTION& aB )
+ {
+ return ( m_origin - aA.p ).EuclideanNorm() < ( m_origin - aB.p ).EuclideanNorm();
+ }
+
+ VECTOR2I m_origin;
+ };
+
+ bool Intersects( const SHAPE_LINE_CHAIN& aChain ) const;
+
+ /**
+ * Function Intersect()
+ *
+ * Finds all intersection points between our line chain and the segment aSeg.
+ * @param aSeg the segment chain to find intersections with
+ * @param aIp reference to a vector to store found intersections. Intersection points
+ * are sorted with increasing distances from point aSeg.a.
+ * @return number of intersections found
+ */
+ int Intersect( const SEG& aSeg, INTERSECTIONS& aIp ) const;
+
+ /**
+ * Function Intersect()
+ *
+ * Finds all intersection points between our line chain and the line chain aChain.
+ * @param aChain the line chain to find intersections with
+ * @param aIp reference to a vector to store found intersections. Intersection points
+ * are sorted with increasing path lengths from the starting point of aChain.
+ * @return number of intersections found
+ */
+ int Intersect( const SHAPE_LINE_CHAIN& aChain, INTERSECTIONS& aIp ) const;
+
+ /**
+ * Function PathLength()
+ *
+ * Computes the walk path length from the beginning of the line chain and
+ * the point aP belonging to our line.
+ * @return: path length in Euclidean metric or negative if aP does not belong to
+ * the line chain.
+ */
+ int PathLength( const VECTOR2I& aP ) const;
+
+ /**
+ * Function PointInside()
+ *
+ * Checks if point aP lies inside a convex polygon defined by the line chain. For closed
+ * shapes only.
+ * @param aP point to check
+ * @return true if the point is inside the shape (edge is not treated as being inside).
+ */
+ bool PointInside( const VECTOR2I& aP ) const;
+
+ /**
+ * Function PointOnEdge()
+ *
+ * Checks if point aP lies on an edge or vertex of the line chain.
+ * @param aP point to check
+ * @return true if the point lies on the edge.
+ */
+ bool PointOnEdge( const VECTOR2I& aP ) const;
+
+ /**
+ * Function SelfIntersecting()
+ *
+ * Checks if the line chain is self-intersecting.
+ * @return (optional) first found self-intersection point.
+ */
+ const boost::optional<INTERSECTION> SelfIntersecting() const;
+
+ /**
+ * Function Simplify()
+ *
+ * Simplifies the line chain by removing colinear adjacent segments and duplicate vertices.
+ * @return reference to self.
+ */
+ SHAPE_LINE_CHAIN& Simplify();
+
+ /**
+ * Function NearestPoint()
+ *
+ * Finds a point on the line chain that is closest to point aP.
+ * @return the nearest point.
+ */
+ const VECTOR2I NearestPoint( const VECTOR2I& aP ) const;
+
+ /**
+ * Function NearestPoint()
+ *
+ * Finds a point on the line chain that is closest to the line defined
+ * by the points of segment aSeg, also returns the distance.
+ * @param aSeg Segment defining the line.
+ * @param dist reference receiving the distance to the nearest point.
+ * @return the nearest point.
+ */
+ const VECTOR2I NearestPoint( const SEG& aSeg, int& dist ) const;
+
+ /// @copydoc SHAPE::Format()
+ const std::string Format() const;
+
+ /// @copydoc SHAPE::Parse()
+ bool Parse( std::stringstream& aStream );
+
+ bool operator!=( const SHAPE_LINE_CHAIN& aRhs ) const
+ {
+ if( PointCount() != aRhs.PointCount() )
+ return true;
+
+ for( int i = 0; i < PointCount(); i++ )
+ {
+ if( CPoint( i ) != aRhs.CPoint( i ) )
+ return true;
+ }
+
+ return false;
+ }
+
+ bool CompareGeometry( const SHAPE_LINE_CHAIN & aOther ) const;
+
+ void Move( const VECTOR2I& aVector )
+ {
+ for( std::vector<VECTOR2I>::iterator i = m_points.begin(); i != m_points.end(); ++i )
+ (*i) += aVector;
+ }
+
+ bool IsSolid() const
+ {
+ return false;
+ }
+
+private:
+ /// array of vertices
+ std::vector<VECTOR2I> m_points;
+
+ /// is the line chain closed?
+ bool m_closed;
+
+ /// cached bounding box
+ BOX2I m_bbox;
+};
+
+#endif // __SHAPE_LINE_CHAIN
diff --git a/include/geometry/shape_poly_set.h b/include/geometry/shape_poly_set.h
new file mode 100644
index 0000000..24c4a91
--- /dev/null
+++ b/include/geometry/shape_poly_set.h
@@ -0,0 +1,374 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_POLY_SET_H
+#define __SHAPE_POLY_SET_H
+
+#include <vector>
+#include <cstdio>
+#include <geometry/shape.h>
+#include <geometry/shape_line_chain.h>
+
+#include "clipper.hpp"
+
+
+/**
+ * Class SHAPE_POLY_SET
+ *
+ * Represents a set of closed polygons. Polygons may be nonconvex, self-intersecting
+ * and have holes. Provides boolean operations (using Clipper library as the backend).
+ *
+ * TODO: add convex partitioning & spatial index
+ */
+class SHAPE_POLY_SET : public SHAPE
+{
+ public:
+ ///> represents a single polygon outline with holes. The first entry is the outline,
+ ///> the remaining (if any), are the holes
+ typedef std::vector<SHAPE_LINE_CHAIN> POLYGON;
+
+ /**
+ * Class ITERATOR_TEMPLATE
+ *
+ * Base class for iterating over all vertices in a given SHAPE_POLY_SET
+ */
+ template <class T>
+ class ITERATOR_TEMPLATE
+ {
+ public:
+
+ bool IsEndContour() const
+ {
+ return m_currentVertex + 1 == m_poly->CPolygon( m_currentOutline )[0].PointCount();
+ }
+
+ bool IsLastContour() const
+ {
+ return m_currentOutline == m_lastOutline;
+ }
+
+ operator bool() const
+ {
+ return m_currentOutline <= m_lastOutline;
+ }
+
+ void Advance()
+ {
+ m_currentVertex ++;
+
+ if( m_currentVertex >= m_poly->CPolygon( m_currentOutline )[0].PointCount() )
+ {
+ m_currentVertex = 0;
+ m_currentOutline++;
+ }
+ }
+
+ void operator++( int dummy )
+ {
+ Advance();
+ }
+
+ void operator++()
+ {
+ Advance();
+ }
+
+ T& Get()
+ {
+ return m_poly->Polygon( m_currentOutline )[0].Point( m_currentVertex );
+ }
+
+ T& operator*()
+ {
+ return Get();
+ }
+
+ T* operator->()
+ {
+ return &Get();
+ }
+
+
+ private:
+ friend class SHAPE_POLY_SET;
+
+ SHAPE_POLY_SET* m_poly;
+ int m_currentOutline;
+ int m_lastOutline;
+ int m_currentVertex;
+ };
+
+ typedef ITERATOR_TEMPLATE<VECTOR2I> ITERATOR;
+ typedef ITERATOR_TEMPLATE<const VECTOR2I> CONST_ITERATOR;
+
+ SHAPE_POLY_SET();
+ ~SHAPE_POLY_SET();
+
+ ///> Creates a new empty polygon in the set and returns its index
+ int NewOutline();
+
+ ///> Creates a new hole in a given outline
+ int NewHole( int aOutline = -1 );
+
+ ///> Adds a new outline to the set and returns its index
+ int AddOutline( const SHAPE_LINE_CHAIN& aOutline );
+
+ ///> Adds a new hole to the given outline (default: last) and returns its index
+ int AddHole( const SHAPE_LINE_CHAIN& aHole, int aOutline = -1 );
+
+ ///> Appends a vertex at the end of the given outline/hole (default: the last outline)
+ int Append( int x, int y, int aOutline = -1, int aHole = -1 );
+
+ ///> Merges polygons from two sets.
+ void Append( const SHAPE_POLY_SET& aSet );
+
+ ///> Appends a vertex at the end of the given outline/hole (default: the last outline)
+ void Append( const VECTOR2I& aP, int aOutline = -1, int aHole = -1 );
+
+ ///> Returns the index-th vertex in a given hole outline within a given outline
+ VECTOR2I& Vertex( int index, int aOutline = -1, int aHole = -1 );
+
+ ///> Returns the index-th vertex in a given hole outline within a given outline
+ const VECTOR2I& CVertex( int index, int aOutline = -1, int aHole = -1 ) const;
+
+ ///> Returns true if any of the outlines is self-intersecting
+ bool IsSelfIntersecting();
+
+ ///> Returns the number of outlines in the set
+ int OutlineCount() const { return m_polys.size(); }
+
+ ///> Returns the number of vertices in a given outline/hole
+ int VertexCount( int aOutline = -1, int aHole = -1 ) const;
+
+ ///> Returns the number of holes in a given outline
+ int HoleCount( int aOutline ) const
+ {
+ if( (aOutline > (int)m_polys.size()) || (m_polys[aOutline].size() < 2) )
+ return 0;
+ return m_polys[aOutline].size() - 1;
+ }
+
+ ///> Returns the reference to aIndex-th outline in the set
+ SHAPE_LINE_CHAIN& Outline( int aIndex )
+ {
+ return m_polys[aIndex][0];
+ }
+
+ ///> Returns the reference to aHole-th hole in the aIndex-th outline
+ SHAPE_LINE_CHAIN& Hole( int aOutline, int aHole )
+ {
+ return m_polys[aOutline][aHole + 1];
+ }
+
+ ///> Returns the aIndex-th subpolygon in the set
+ POLYGON& Polygon( int aIndex )
+ {
+ return m_polys[aIndex];
+ }
+
+ const SHAPE_LINE_CHAIN& COutline( int aIndex ) const
+ {
+ return m_polys[aIndex][0];
+ }
+
+ const SHAPE_LINE_CHAIN& CHole( int aOutline, int aHole ) const
+ {
+ return m_polys[aOutline][aHole + 1];
+ }
+
+ const POLYGON& CPolygon( int aIndex ) const
+ {
+ return m_polys[aIndex];
+ }
+
+ ///> Returns an iterator object, for iterating between aFirst and aLast outline.
+ ITERATOR Iterate( int aFirst, int aLast )
+ {
+ ITERATOR iter;
+
+ iter.m_poly = this;
+ iter.m_currentOutline = aFirst;
+ iter.m_lastOutline = aLast < 0 ? OutlineCount() - 1 : aLast;
+ iter.m_currentVertex = 0;
+
+ return iter;
+ }
+
+ ///> Returns an iterator object, for iterating aOutline-th outline
+ ITERATOR Iterate( int aOutline )
+ {
+ return Iterate( aOutline, aOutline );
+ }
+
+ ///> Returns an iterator object, for all outlines in the set (no holes)
+ ITERATOR Iterate()
+ {
+ return Iterate( 0, OutlineCount() - 1 );
+ }
+
+ CONST_ITERATOR CIterate( int aFirst, int aLast ) const
+ {
+ CONST_ITERATOR iter;
+
+ iter.m_poly = const_cast<SHAPE_POLY_SET*>( this );
+ iter.m_currentOutline = aFirst;
+ iter.m_lastOutline = aLast < 0 ? OutlineCount() - 1 : aLast;
+ iter.m_currentVertex = 0;
+
+ return iter;
+ }
+
+ CONST_ITERATOR CIterate( int aOutline ) const
+ {
+ return CIterate( aOutline, aOutline );
+ }
+
+ CONST_ITERATOR CIterate() const
+ {
+ return CIterate( 0, OutlineCount() - 1 );
+ }
+
+
+ ///> Performs boolean polyset union
+ ///> For aFastMode meaning, see function booleanOp
+ void BooleanAdd( const SHAPE_POLY_SET& b, bool aFastMode = false );
+
+ ///> Performs boolean polyset difference
+ ///> For aFastMode meaning, see function booleanOp
+ void BooleanSubtract( const SHAPE_POLY_SET& b, bool aFastMode = false );
+
+ ///> Performs boolean polyset intersection
+ ///> For aFastMode meaning, see function booleanOp
+ void BooleanIntersection( const SHAPE_POLY_SET& b, bool aFastMode = false );
+
+ ///> Performs boolean polyset union between a and b, store the result in it self
+ ///> For aFastMode meaning, see function booleanOp
+ void BooleanAdd( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b, bool aFastMode = false );
+
+ ///> Performs boolean polyset difference between a and b, store the result in it self
+ ///> For aFastMode meaning, see function booleanOp
+ void BooleanSubtract( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b, bool aFastMode = false );
+
+ ///> Performs boolean polyset intersection between a and b, store the result in it self
+ ///> For aFastMode meaning, see function booleanOp
+ void BooleanIntersection( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b, bool aFastMode = false );
+
+ ///> Performs outline inflation/deflation, using round corners.
+ void Inflate( int aFactor, int aCircleSegmentsCount );
+
+ ///> Converts a set of polygons with holes to a singe outline with "slits"/"fractures" connecting the outer ring
+ ///> to the inner holes
+ ///> For aFastMode meaning, see function booleanOp
+ void Fracture( bool aFastMode = false );
+
+ ///> Converts a set of slitted polygons to a set of polygons with holes
+ void Unfracture();
+
+ ///> Returns true if the polygon set has any holes.
+ bool HasHoles() const;
+
+ ///> Simplifies the polyset (merges overlapping polys, eliminates degeneracy/self-intersections)
+ ///> For aFastMode meaning, see function booleanOp
+ void Simplify( bool aFastMode = false);
+
+ /// @copydoc SHAPE::Format()
+ const std::string Format() const;
+
+ /// @copydoc SHAPE::Parse()
+ bool Parse( std::stringstream& aStream );
+
+ /// @copydoc SHAPE::Move()
+ void Move( const VECTOR2I& aVector );
+
+ /// @copydoc SHAPE::IsSolid()
+ bool IsSolid() const
+ {
+ return true;
+ }
+
+ const BOX2I BBox( int aClearance = 0 ) const;
+
+ // fixme: add collision support
+ bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const { return false; }
+ bool Collide( const SEG& aSeg, int aClearance = 0 ) const { return false; }
+
+
+ ///> Returns true is a given subpolygon contains the point aP. If aSubpolyIndex < 0 (default value),
+ ///> checks all polygons in the set
+ bool Contains( const VECTOR2I& aP, int aSubpolyIndex = -1 ) const;
+
+ ///> Returns true if the set is empty (no polygons at all)
+ bool IsEmpty() const
+ {
+ return m_polys.size() == 0;
+ }
+
+ ///> Removes all outlines & holes (clears) the polygon set.
+ void RemoveAllContours();
+
+ ///> Returns total number of vertices stored in the set.
+ int TotalVertices() const;
+
+ ///> Deletes aIdx-th polygon from the set
+ void DeletePolygon( int aIdx );
+
+ private:
+
+ SHAPE_LINE_CHAIN& getContourForCorner( int aCornerId, int& aIndexWithinContour );
+ VECTOR2I& vertex( int aCornerId );
+ const VECTOR2I& cvertex( int aCornerId ) const;
+
+
+ void fractureSingle( POLYGON& paths );
+ void importTree( ClipperLib::PolyTree* tree );
+
+ /** Function booleanOp
+ * this is the engine to execute all polygon boolean transforms
+ * (AND, OR, ... and polygon simplification (merging overlaping polygons)
+ * @param aType is the transform type ( see ClipperLib::ClipType )
+ * @param aOtherShape is the SHAPE_LINE_CHAIN to combine with me.
+ * @param aFastMode is an option to choos if the result is a weak polygon
+ * or a stricty simple polygon.
+ * if aFastMode is true the result can be a weak polygon
+ * if aFastMode is false (default) the result is (theorically) a strictly
+ * simple polygon, but calculations can be really significantly time consuming
+ */
+ void booleanOp( ClipperLib::ClipType aType,
+ const SHAPE_POLY_SET& aOtherShape, bool aFastMode = false );
+
+ void booleanOp( ClipperLib::ClipType aType,
+ const SHAPE_POLY_SET& aShape,
+ const SHAPE_POLY_SET& aOtherShape, bool aFastMode = false );
+
+ bool pointInPolygon( const VECTOR2I& aP, const SHAPE_LINE_CHAIN& aPath ) const;
+
+ const ClipperLib::Path convertToClipper( const SHAPE_LINE_CHAIN& aPath, bool aRequiredOrientation );
+ const SHAPE_LINE_CHAIN convertFromClipper( const ClipperLib::Path& aPath );
+
+ typedef std::vector<POLYGON> Polyset;
+
+ Polyset m_polys;
+};
+
+#endif
diff --git a/include/geometry/shape_rect.h b/include/geometry/shape_rect.h
new file mode 100644
index 0000000..47e6b13
--- /dev/null
+++ b/include/geometry/shape_rect.h
@@ -0,0 +1,168 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_RECT_H
+#define __SHAPE_RECT_H
+
+#include <geometry/shape.h>
+#include <geometry/shape_line_chain.h>
+#include <geometry/shape_circle.h>
+#include <geometry/seg.h>
+
+class SHAPE_RECT : public SHAPE
+{
+public:
+ /**
+ * Constructor
+ * Creates an empty (0-sized) rectangle
+ */
+ SHAPE_RECT() :
+ SHAPE( SH_RECT ), m_w( 0 ), m_h( 0 )
+ {}
+
+ /**
+ * Constructor
+ * Creates a rectangle defined by top-left corner (aX0, aY0), width aW and height aH.
+ */
+ SHAPE_RECT( int aX0, int aY0, int aW, int aH ) :
+ SHAPE( SH_RECT ), m_p0( aX0, aY0 ), m_w( aW ), m_h( aH )
+ {}
+
+ /**
+ * Constructor
+ * Creates a rectangle defined by top-left corner aP0, width aW and height aH.
+ */
+ SHAPE_RECT( const VECTOR2I& aP0, int aW, int aH ) :
+ SHAPE( SH_RECT ), m_p0( aP0 ), m_w( aW ), m_h( aH )
+ {}
+
+ SHAPE_RECT( const SHAPE_RECT& aOther ) :
+ SHAPE( SH_RECT ),
+ m_p0( aOther.m_p0 ),
+ m_w( aOther.m_w ),
+ m_h( aOther.m_h )
+ {};
+
+ SHAPE* Clone() const
+ {
+ return new SHAPE_RECT( *this );
+ }
+
+ /// @copydoc SHAPE::BBox()
+ const BOX2I BBox( int aClearance = 0 ) const
+ {
+ BOX2I bbox( VECTOR2I( m_p0.x - aClearance, m_p0.y - aClearance ),
+ VECTOR2I( m_w + 2 * aClearance, m_h + 2 * aClearance ) );
+ //printf("bb : %s\n",bbox.Format().c_str());
+ return bbox;
+ }
+
+ /**
+ * Function Diagonal()
+ *
+ * Returns length of the diagonal of the rectangle
+ * @return diagonal length
+ */
+ int Diagonal() const
+ {
+ return VECTOR2I( m_w, m_h ).EuclideanNorm();
+ }
+
+ /// @copydoc SHAPE::Collide()
+ bool Collide( const SEG& aSeg, int aClearance = 0 ) const;
+
+ /**
+ * Function GetPosition()
+ *
+ * @return top-left corner of the rectangle
+ */
+ const VECTOR2I& GetPosition() const
+ {
+ return m_p0;
+ }
+
+ /**
+ * Function GetSize()
+ *
+ * @return size of the rectangle
+ */
+ const VECTOR2I GetSize() const
+ {
+ return VECTOR2I( m_w, m_h );
+ }
+
+ /**
+ * Function GetWidth()
+ *
+ * @return width of the rectangle
+ */
+ const int GetWidth() const
+ {
+ return m_w;
+ }
+
+ /**
+ * Function GetHeight()
+ *
+ * @return height of the rectangle
+ */
+ const int GetHeight() const
+ {
+ return m_h;
+ }
+
+ void Move( const VECTOR2I& aVector )
+ {
+ m_p0 += aVector;
+ }
+
+ bool IsSolid() const
+ {
+ return true;
+ }
+
+ const SHAPE_LINE_CHAIN Outline() const
+ {
+ SHAPE_LINE_CHAIN rv;
+ rv.Append( m_p0 );
+ rv.Append( m_p0.x, m_p0.y + m_w );
+ rv.Append( m_p0.x + m_h, m_p0.y + m_w );
+ rv.Append( m_p0.x + m_h, m_p0.y );
+ rv.Append( m_p0 );
+ rv.SetClosed( true );
+ return rv;
+ }
+
+private:
+ ///> Top-left corner
+ VECTOR2I m_p0;
+
+ ///> Width
+ int m_w;
+
+ ///> Height
+ int m_h;
+};
+
+#endif // __SHAPE_RECT_H
diff --git a/include/geometry/shape_segment.h b/include/geometry/shape_segment.h
new file mode 100644
index 0000000..71ed5b1
--- /dev/null
+++ b/include/geometry/shape_segment.h
@@ -0,0 +1,101 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __SHAPE_SEGMENT_H
+#define __SHAPE_SEGMENT_H
+
+#include <geometry/shape.h>
+#include <geometry/seg.h>
+
+class SHAPE_SEGMENT : public SHAPE {
+
+public:
+ SHAPE_SEGMENT():
+ SHAPE( SH_SEGMENT ), m_width( 0 ) {};
+
+ SHAPE_SEGMENT( const VECTOR2I& aA, const VECTOR2I& aB, int aWidth = 0 ):
+ SHAPE( SH_SEGMENT ), m_seg( aA, aB ), m_width( aWidth ) {};
+
+ SHAPE_SEGMENT( const SEG& aSeg, int aWidth = 0 ):
+ SHAPE( SH_SEGMENT ), m_seg( aSeg ), m_width( aWidth ) {};
+
+ ~SHAPE_SEGMENT() {};
+
+ SHAPE* Clone() const
+ {
+ return new SHAPE_SEGMENT( m_seg, m_width );
+ }
+
+ const BOX2I BBox( int aClearance = 0 ) const
+ {
+ return BOX2I( m_seg.A, m_seg.B - m_seg.A ).Inflate( aClearance + ( m_width + 1 ) / 2 );
+ }
+
+ bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+ {
+ return m_seg.Distance( aSeg ) < ( m_width + 1 ) / 2 + aClearance;
+ }
+
+ bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const
+ {
+ return m_seg.Distance( aP ) < ( m_width + 1 ) / 2 + aClearance;
+ }
+
+ void SetSeg( const SEG& aSeg )
+ {
+ m_seg = aSeg;
+ }
+
+ const SEG& GetSeg() const
+ {
+ return m_seg;
+ }
+
+ void SetWidth( int aWidth )
+ {
+ m_width = aWidth;
+ }
+
+ int GetWidth() const
+ {
+ return m_width;
+ }
+
+ bool IsSolid() const
+ {
+ return true;
+ }
+
+ void Move( const VECTOR2I& aVector )
+ {
+ m_seg.A += aVector;
+ m_seg.B += aVector;
+ }
+
+private:
+ SEG m_seg;
+ int m_width;
+};
+
+#endif
diff --git a/include/gestfich.h b/include/gestfich.h
new file mode 100644
index 0000000..e8699b7
--- /dev/null
+++ b/include/gestfich.h
@@ -0,0 +1,165 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2014 Jerry Jacobs
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * This file is part of the common library
+ * TODO brief description
+ * @file gestfich.h
+ * @see common.h
+ */
+
+
+#ifndef __INCLUDE__GESTFICH_H__
+#define __INCLUDE__GESTFICH_H__ 1
+
+#include <wx/filename.h>
+#include <wx/process.h>
+
+
+/**
+ * @note Do we really need these defined?
+ */
+#define UNIX_STRING_DIR_SEP wxT( "/" )
+#define WIN_STRING_DIR_SEP wxT( "\\" )
+
+/* Forward class declarations. */
+class EDA_LIST_DIALOG;
+
+
+/**
+ * Function OpenPDF
+ * run the PDF viewer and display a PDF file
+ * @param file = PDF file to open
+ * @return true is success, false if no PDF viewer found
+ */
+bool OpenPDF( const wxString& file );
+
+void OpenFile( const wxString& file );
+
+/**
+ * Function EDA_PATH_SELECTOR
+ *
+ * is a helper function that wraps wxDirDialog.
+ *
+ * @param aTitle is a string to display in the dialog title bar.
+ * @param aPath is a string contain the default path for the path dialog. This string also
+ * contains the result of the wxDirDialog when the OK button is used to dismiss
+ * the dialog.
+ * @param aFlags is the style of the path dialog, wxDD_???.
+ * @param aParaent is the parent window of the dialog.
+ * @param aPosition is the position of the dialog.
+ * @return true if a path was selected.
+ */
+bool EDA_PATH_SELECTOR( const wxString& aTitle,
+ wxString& aPath,
+ int aFlags, /* reserve */
+ wxWindow* aParent,
+ const wxPoint& aPosition = wxDefaultPosition );
+
+/**
+ * Function EDA_FILE_SELECTOR
+ *
+ * is a helper function that wraps a call to wxFileSelector.
+ *
+ * @param aTitle is a string to display in the dialog title bar.
+ * @param aPath is a string contain the default path for the path dialog.
+ * @param aFileName is a string containing the default file name.
+ * @param aExtension is a string containing the default file extension.
+ * @param aWildcard is a string containing the default wildcard.
+ * @param aParaent is the parent window of the dialog.
+ * @param aFlags is the style of the path dialog, wxFD_???.
+ * @param aKeepWorkingDirectory determines if current working directory should be set to the
+ * user selected path.
+ * @param aPosition is the position of the dialog.
+ * @param aMruPath is a pointer to a string to copy the path selected by the user when
+ * the OK button is pressed to dismiss the dialog. This can be NULL.
+ * @return the full path and file name of the selected file or wxEmptyString if the user
+ * pressed the cancel button to dismiss the dialog.
+ */
+wxString EDA_FILE_SELECTOR( const wxString& aTitle,
+ const wxString& aPath,
+ const wxString& aFileName,
+ const wxString& aExtension,
+ const wxString& aWildcard,
+ wxWindow* aParent,
+ int aStyle,
+ const bool aKeepWorkingDirectory,
+ const wxPoint& aPosition = wxDefaultPosition,
+ wxString* aMruPath = NULL );
+
+EDA_LIST_DIALOG* GetFileNames( char* Directory, char* Mask );
+
+
+/**
+ * Function ExecuteFile
+ * calls the executable file \a ExecFile with the command line parameters \a param.
+ */
+int ExecuteFile( wxWindow* frame, const wxString& ExecFile,
+ const wxString& param = wxEmptyString, wxProcess *callback = NULL );
+
+/**
+ * Function AddDelimiterString
+ * Add un " to the start and the end of string (if not already done).
+ * @param string = string to modify
+ */
+void AddDelimiterString( wxString& string );
+
+/**
+ * Function KicadDatasPath
+ * returns the data path common to KiCad.
+ * If environment variable KICAD is defined (KICAD = path to kicad)
+ * Returns \<KICAD\> /;
+ * Otherwise returns \<path of binaries\> / (if "kicad" is in the path name)
+ * Otherwise returns /usr /share/kicad/
+ *
+ * Note:
+ * The \\ are replaced by / (a la Unix)
+ */
+wxString KicadDatasPath();
+
+/**
+ * Function FindKicadFile
+ * searches the executable file shortname in KiCad binary path and return full file
+ * name if found or shortname if the kicad binary path is kicad/bin.
+ *
+ * kicad binary path is found from:
+ * BinDir
+ * or environment variable KICAD
+ * or (default) c:\\kicad or /usr/local/kicad
+ * or default binary path
+ */
+wxString FindKicadFile( const wxString& shortname );
+
+/**
+ * Quote return value of wxFileName::GetFullPath().
+ *
+ * This allows file name paths with spaces to be used as parameters to
+ * ProcessExecute function calls.
+ * @param fn is the filename to wrap
+ * @param format if provided, can be used to transform the nature of the
+ * wrapped filename to another platform.
+ */
+extern wxString QuoteFullPath( wxFileName& fn, wxPathFormat format = wxPATH_NATIVE );
+
+#endif /* __INCLUDE__GESTFICH_H__ */
diff --git a/include/gr_basic.h b/include/gr_basic.h
new file mode 100644
index 0000000..c68ea5a
--- /dev/null
+++ b/include/gr_basic.h
@@ -0,0 +1,258 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file gr_basic.h
+ */
+
+#ifndef GR_BASIC
+#define GR_BASIC
+
+#include <colors.h>
+#include <vector>
+class EDA_RECT;
+
+
+/// Drawmode. Compositing mode plus a flag or two
+enum GR_DRAWMODE {
+ GR_OR = 0x01000000,
+ GR_XOR = 0x02000000,
+ GR_AND = 0x04000000,
+ GR_NXOR = 0x08000000,
+ GR_INVERT = 0x10000000,
+ GR_ALLOW_HIGHCONTRAST = 0x20000000,
+ GR_COPY = 0x40000000,
+ GR_HIGHLIGHT = 0x80000000,
+ UNSPECIFIED_DRAWMODE = -1
+};
+
+inline void DrawModeAddHighlight(GR_DRAWMODE *mode)
+{
+ *mode = static_cast<GR_DRAWMODE>( int( *mode ) | GR_HIGHLIGHT );
+}
+
+inline void DrawModeAllowHighContrast(GR_DRAWMODE *mode)
+{
+ *mode = static_cast<GR_DRAWMODE>( int( *mode ) | GR_ALLOW_HIGHCONTRAST );
+}
+
+inline GR_DRAWMODE operator ~(const GR_DRAWMODE& a)
+{
+ return static_cast<GR_DRAWMODE>( ~int( a ) );
+}
+
+inline GR_DRAWMODE operator |(const GR_DRAWMODE& a, const GR_DRAWMODE& b)
+{
+ return static_cast<GR_DRAWMODE>( int( a ) | int( b ) );
+}
+
+inline GR_DRAWMODE operator &(const GR_DRAWMODE& a, const GR_DRAWMODE& b)
+{
+ return static_cast<GR_DRAWMODE>( int( a ) & int( b ) );
+}
+
+#define GR_M_LEFT_DOWN 0x10000000
+#define GR_M_RIGHT_DOWN 0x20000000
+#define GR_M_MIDDLE_DOWN 0x40000000
+#define GR_M_DCLICK 0x80000000
+
+
+extern GR_DRAWMODE g_XorMode;
+
+typedef enum {
+ /* Line styles for Get/SetLineStyle. */
+ GR_SOLID_LINE = 0,
+ GR_DOTTED_LINE = 1,
+ GR_DASHED_LINE = 3
+} GRLineStypeType;
+
+
+class EDA_DRAW_PANEL;
+
+void GRSetDrawMode( wxDC* DC, GR_DRAWMODE mode );
+GR_DRAWMODE GRGetDrawMode( wxDC* DC );
+void GRResetPenAndBrush( wxDC* DC );
+void GRSetColorPen( wxDC* DC, EDA_COLOR_T Color, int width = 1, wxPenStyle stype = wxPENSTYLE_SOLID );
+void GRSetBrush( wxDC* DC, EDA_COLOR_T Color, bool fill = false );
+
+/**
+ * Function GRForceBlackPen
+ * @param flagforce True to force a black pen whenever the asked color
+ */
+void GRForceBlackPen( bool flagforce );
+
+/**
+ * Function GetGRForceBlackPenState
+ * @return ForceBlackPen (True if a black pen was forced)
+ */
+bool GetGRForceBlackPenState( void );
+
+void GRLine( EDA_RECT* aClipBox, wxDC* aDC,
+ wxPoint aStart, wxPoint aEnd, int aWidth, EDA_COLOR_T aColor );
+void GRLine( EDA_RECT* ClipBox, wxDC* DC,
+ int x1, int y1, int x2, int y2, int width, EDA_COLOR_T Color );
+void GRMixedLine( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color );
+void GRDashedLine( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color );
+void GRMoveTo( int x, int y );
+void GRLineTo( EDA_RECT* ClipBox, wxDC* DC,
+ int x, int y, int width, EDA_COLOR_T Color );
+
+void GRPoly( EDA_RECT* ClipBox, wxDC* DC, int n, wxPoint Points[], bool Fill,
+ int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+
+void GRBezier( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int x3, int y3, int width, EDA_COLOR_T Color );
+void GRBezier( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int x3, int y3, int x4, int y4, int width, EDA_COLOR_T Color );
+
+/**
+ * Function GRClosedPoly
+ * draws a closed polygon onto the drawing context \a aDC and optionally fills
+ * and/or draws a border around it.
+ * @param ClipBox defines a rectangular boundary outside of which no drawing will occur.
+ * @param aDC the device context into which drawing should occur.
+ * @param aPointCount the number of points in the array \a aPoints.
+ * @param aPoints The points to draw.
+ * @param doFill true if polygon is to be filled, else false and only the boundary is drawn.
+ * @param aPenColor the color index of the border.
+ * @param aFillColor the fill color of the polygon's interior.
+ */
+void GRClosedPoly( EDA_RECT* ClipBox,
+ wxDC * aDC,
+ int aPointCount,
+ wxPoint aPoints[],
+ bool doFill,
+ EDA_COLOR_T aPenColor,
+ EDA_COLOR_T aFillColor );
+
+// @todo could make these 2 closed polygons calls a single function and default
+// the aPenWidth argument
+
+/**
+ * Function GRClosedPoly
+ * draws a closed polygon onto the drawing context \a aDC and optionally fills
+ * and/or draws a border around it.
+ * @param ClipBox defines a rectangular boundary outside of which no drawing will occur.
+ * @param aDC the device context into which drawing should occur.
+ * @param aPointCount the number of points in the array \a aPointArray.
+ * @param aPoints the points to draw.
+ * @param doFill true if polygon is to be filled, else false and only the boundary is drawn.
+ * @param aPenWidth is the width of the pen to use on the perimeter, can be zero.
+ * @param aPenColor the color index of the border.
+ * @param aFillColor the fill color of the polygon's interior.
+ */
+void GRClosedPoly( EDA_RECT* ClipBox,
+ wxDC* aDC,
+ int aPointCount,
+ wxPoint aPoints[],
+ bool doFill,
+ int aPenWidth,
+ EDA_COLOR_T aPenColor,
+ EDA_COLOR_T aFillColor );
+
+
+/**
+ * Function GRCircle
+ * draws a circle onto the drawing context \a aDC centered at the user
+ * coordinates (x,y)
+ *
+ * @param ClipBox defines a rectangular boundary outside of which no drawing will occur.
+ * @param aDC the device context into which drawing should occur.
+ * @param x The x coordinate in user space of the center of the circle.
+ * @param y The y coordinate in user space of the center of the circle.
+ * @param aRadius is the radius of the circle.
+ * @param aColor is an index into our color table of RGB colors.
+ * @see EDA_COLOR_T and colors.h
+ */
+void GRCircle( EDA_RECT* ClipBox, wxDC* aDC, int x, int y, int aRadius, EDA_COLOR_T aColor );
+void GRCircle( EDA_RECT* ClipBox, wxDC* DC, int x, int y, int r, int width, EDA_COLOR_T Color );
+void GRFilledCircle( EDA_RECT* ClipBox, wxDC* DC, int x, int y, int r, int width,
+ EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+void GRFilledCircle( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aPos, int aRadius, EDA_COLOR_T aColor );
+void GRCircle( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aPos, int aRadius, int aWidth, EDA_COLOR_T aColor );
+
+void GRArc( EDA_RECT* ClipBox, wxDC* DC, int x, int y, double StAngle,
+ double EndAngle, int r, EDA_COLOR_T Color );
+void GRArc( EDA_RECT* ClipBox, wxDC* DC, int x, int y, double StAngle,
+ double EndAngle, int r, int width, EDA_COLOR_T Color );
+void GRArc1( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int xc, int yc, EDA_COLOR_T Color );
+void GRArc1( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int xc, int yc, int width, EDA_COLOR_T Color );
+void GRArc1( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
+ wxPoint aCenter, int aWidth, EDA_COLOR_T aColor );
+void GRFilledArc( EDA_RECT* ClipBox, wxDC* DC, int x, int y,
+ double StAngle, double EndAngle, int r, EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+void GRFilledArc( EDA_RECT* ClipBox, wxDC* DC, int x, int y, double StAngle,
+ double EndAngle, int r, int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int width, EDA_COLOR_T Color );
+
+void GRFillCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, EDA_COLOR_T Color );
+void GRFilledSegment( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
+ int aWidth, EDA_COLOR_T aColor );
+
+void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2,
+ int width, int aPenSize, EDA_COLOR_T Color );
+void GRCSegm( EDA_RECT* aClipBox, wxDC* aDC, wxPoint aStart, wxPoint aEnd,
+ int aWidth, EDA_COLOR_T aColor );
+
+void GRSetColor( EDA_COLOR_T Color );
+void GRSetDefaultPalette();
+EDA_COLOR_T GRGetColor();
+void GRPutPixel( EDA_RECT* ClipBox, wxDC* DC, int x, int y, EDA_COLOR_T color );
+void GRFilledRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1,
+ int x2, int y2, EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+void GRFilledRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1,
+ int x2, int y2, int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+void GRRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, EDA_COLOR_T Color );
+void GRRect( EDA_RECT* ClipBox, wxDC* DC,const EDA_RECT& aRect, int aWidth, EDA_COLOR_T Color );
+void GRRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1,
+ int x2, int y2, int width, EDA_COLOR_T Color );
+void GRRectPs( EDA_RECT* aClipBox, wxDC* aDC,const EDA_RECT& aRect,
+ int aWidth, EDA_COLOR_T aColor, wxPenStyle aStyle = wxPENSTYLE_SOLID );
+
+void GRSFilledRect( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1,
+ int x2, int y2, int width, EDA_COLOR_T Color, EDA_COLOR_T BgColor );
+
+/**
+ * Function GRLineArray
+ * draws an array of lines (not a polygon).
+ * @param aClipBox = the clip box
+ * @param aDC = the device context into which drawing should occur.
+ * @param aLines = a list of pair of coordinate in user space: a pair for each line.
+ * @param aWidth = the width of each line.
+ * @param aColor = an index into our color table of RGB colors.
+ * @see EDA_COLOR_T and colors.h
+ */
+void GRLineArray( EDA_RECT* aClipBox, wxDC* aDC,std::vector<wxPoint>& aLines,
+ int aWidth, EDA_COLOR_T aColor );
+
+void GRDrawAnchor( EDA_RECT* aClipBox, wxDC *aDC, int x, int y, int aSize,
+ EDA_COLOR_T aColor );
+
+#endif /* define GR_BASIC */
diff --git a/include/grid_tricks.h b/include/grid_tricks.h
new file mode 100644
index 0000000..b4f1ae8
--- /dev/null
+++ b/include/grid_tricks.h
@@ -0,0 +1,96 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <wx/grid.h>
+#include <wx/event.h>
+
+
+/**
+ * Class GRID_TRICKS
+ * is used to add cut, copy, and paste to an otherwise unmodied wxGrid instance.
+ */
+class GRID_TRICKS : public wxEvtHandler
+{
+public:
+
+ GRID_TRICKS( wxGrid* aGrid );
+
+
+protected:
+ wxGrid* m_grid; ///< I don't own the grid, but he owns me
+
+ // row & col "selection" acquisition
+ // selected area by cell coordinate and count
+ int m_sel_row_start;
+ int m_sel_col_start;
+ int m_sel_row_count;
+ int m_sel_col_count;
+
+ /// If the cursor is not on a valid cell, because there are no rows at all, return -1,
+ /// else return a 0 based column index.
+ int getCursorCol() const
+ {
+ return m_grid->GetGridCursorCol();
+ }
+
+ /// If the cursor is not on a valid cell, because there are no rows at all, return -1,
+ /// else return a 0 based row index.
+ int getCursorRow() const
+ {
+ return m_grid->GetGridCursorRow();
+ }
+
+ /// Puts the selected area into a sensible rectangle of m_sel_{row,col}_{start,count} above.
+ void getSelectedArea();
+
+ static bool isCtl( int aChar, const wxKeyEvent& e )
+ {
+ return e.GetKeyCode() == aChar && e.ControlDown() && !e.AltDown() && !e.ShiftDown() && !e.MetaDown();
+ }
+
+ void onGridCellRightClick( wxGridEvent& event )
+ {
+ showPopupMenu();
+ }
+
+ void onRightDown( wxMouseEvent& event )
+ {
+ showPopupMenu();
+ }
+
+ virtual void showPopupMenu();
+
+ // the user clicked on a popup menu choice:
+ void onPopupSelection( wxCommandEvent& event );
+
+ void onKeyDown( wxKeyEvent& ev );
+
+ virtual void paste_clipboard();
+
+ virtual void paste_text( const wxString& cb_text );
+
+ virtual void cutcopy( bool doCut );
+};
+
diff --git a/include/hashtables.h b/include/hashtables.h
new file mode 100644
index 0000000..72bc1fd
--- /dev/null
+++ b/include/hashtables.h
@@ -0,0 +1,144 @@
+#ifndef HASHTABLES_H_
+#define HASHTABLES_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <base_struct.h>
+#include <wx/string.h>
+
+// Three strategies for providing a portable hashtable are given.
+// C++, boost, and wx, in that order. C++ solution is no good for mingw.
+// So boost seems best for all platforms.
+
+
+#if 0 // C++ std::unordered_map, maybe in the future
+
+#include <unordered_map>
+
+
+/// Map a C string to an integer. Used in DSNLEXER.
+typedef std::unordered_map< std::string, int > KEYWORD_MAP;
+
+/// Map a C string to an EDA_RECT.
+/// The key is the classname of the derived wxformbuilder dialog.
+typedef std::unordered_map< std::string, EDA_RECT > RECT_MAP;
+
+
+#elif 1 // boost::unordered_map
+
+// fix a compile bug at line 97 of boost/detail/container_fwd.hpp
+#define BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD
+
+#include <boost/unordered_map.hpp>
+
+// see http://www.boost.org/doc/libs/1_49_0/doc/html/boost/unordered_map.html
+
+/// Equality test for "const char*" type used in very specialized KEYWORD_MAP below
+struct iequal_to : std::binary_function< const char*, const char*, bool >
+{
+ bool operator()( const char* x, const char* y ) const
+ {
+ return !strcmp( x, y );
+ }
+};
+
+
+/// Very fast and efficient hash function for "const char*" type, used in specialized
+/// KEYWORD_MAP below.
+/// taken from: http://www.boost.org/doc/libs/1_53_0/libs/unordered/examples/fnv1.hpp
+struct fnv_1a
+{
+ /* not used, std::string is too slow:
+ std::size_t operator()( std::string const& text ) const
+ {
+ std::size_t hash = 2166136261u;
+
+ for( std::string::const_iterator it = text.begin(), end = text.end();
+ it != end; ++it )
+ {
+ hash ^= *it;
+ hash *= 16777619;
+ }
+ return hash;
+ }
+ */
+
+ std::size_t operator()( const char* it ) const
+ {
+ std::size_t hash = 2166136261u;
+
+ for( ; *it; ++it )
+ {
+ hash ^= (unsigned char) *it;
+ hash *= 16777619;
+ }
+ return hash;
+ }
+};
+
+
+/// Hash function for wxString, counterpart of std::string hash
+struct WXSTRING_HASH : std::unary_function<wxString, std::size_t>
+{
+ std::size_t operator()( const wxString& aString ) const
+ {
+ std::size_t hash = 2166136261u;
+
+ for( wxString::const_iterator it = aString.begin(); it != aString.end(); ++it )
+ {
+ unsigned ch = static_cast<unsigned>( *it );
+ hash ^= ch;
+ hash *= 16777619;
+ }
+ return hash;
+ }
+};
+
+
+/**
+ * Type KEYWORD_MAP
+ * is a hashtable made of a const char* and an int. Note that use of this
+ * type outside very specific circumstances is foolish since there is no storage
+ * provided for the actual C string itself. This type assumes use with type KEYWORD
+ * that is created by CMake and that table creates *constant* storage for C strings
+ * (and pointers to those C strings). Here we are only interested in the C strings
+ * themselves and only the pointers are duplicated within the hashtable.
+ * If the strings were not constant and fixed, this type would not work.
+ * Also note that normally a hashtable (i.e. unordered_map) using a const char* key
+ * would simply compare the 32 bit or 64 bit pointers themselves, rather than
+ * the C strings which they are known to point to in this context.
+ * I force the latter behavior by supplying both "hash" and "equality" overloads
+ * to the hashtable (unordered_map) template.
+ * @author Dick Hollenbeck
+ */
+typedef boost::unordered_map< const char*, int, fnv_1a, iequal_to > KEYWORD_MAP;
+
+
+/// Map a std::string to an EDA_RECT.
+/// The key is the classname of the derived wxformbuilder dialog.
+typedef boost::unordered_map< std::string, EDA_RECT > RECT_MAP;
+
+#endif
+
+#endif // HASHTABLES_H_
diff --git a/include/hotkeys_basic.h b/include/hotkeys_basic.h
new file mode 100644
index 0000000..a402f5a
--- /dev/null
+++ b/include/hotkeys_basic.h
@@ -0,0 +1,245 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file hotkeys_basic.h
+ * @brief Some functions to handle hotkeys in KiCad
+ */
+
+#ifndef HOTKEYS_BASIC_H
+#define HOTKEYS_BASIC_H
+
+#define DEFAULT_HOTKEY_FILENAME_EXT wxT( "hotkeys" )
+
+// A define to allow translation of Hot Key message Info in hotkey help menu
+// We do not want to use the _( x ) usual macro from wxWidgets, which calls wxGetTranslation(),
+// because the English string is used in key file configuration
+// The translated string is used only when displaying the help window.
+// Therefore translation tools have to use the "_" and the "_HKI" prefix to extract
+// strings to translate
+#include <i18n_utility.h> // _HKI definition
+
+class EDA_BASE_FRAME;
+
+
+/* Identifiers (tags) in key code configuration file (or section names)
+ * .m_SectionTag member of a EDA_HOTKEY_CONFIG
+ */
+extern wxString g_CommonSectionTag;
+
+/**
+ * class EDA_HOTKEY
+ * is a class to handle hot key commands. Hot keys have a default value.
+ * This class allows the real key code changed by user(from a key code list file)
+ */
+class EDA_HOTKEY
+{
+public:
+ int m_KeyCode; // Key code (ascii value for ascii keys or wxWidgets code for function key
+ wxString m_InfoMsg; // info message.
+ int m_Idcommand; // internal id for the corresponding command (see hotkey_id_commnand list)
+ int m_IdMenuEvent; // id to call the corresponding event (if any) (see id.h)
+
+public:
+ EDA_HOTKEY( const wxChar* infomsg, int idcommand, int keycode, int idmenuevent = 0 );
+ EDA_HOTKEY( const EDA_HOTKEY* base);
+};
+
+
+/**
+ * Structure EDA_HOTKEY_CONFIG
+ * contains the information required to save hot key information to a configuration file.
+ * a Section name and the corresponding list of hotkeys (EDA_HOTKEY list)
+ * hotkeys are grouped by section.
+ * a section is a list of hotkey infos ( a EDA_HOTKEY list).
+ * A full list of hotkeys can used one or many sections
+ * for instance:
+ * the schematic editor uses a common section (zoom hotkeys list ..) and a specific section
+ * the library editor uses the same common section and a specific section
+ * this feature avoid duplications and made hotkey file config easier to understand and edit
+ */
+struct EDA_HOTKEY_CONFIG
+{
+public:
+ wxString* m_SectionTag; // The configuration file section name.
+ EDA_HOTKEY** m_HK_InfoList; // List of EDA_HOTKEY pointers
+ wxString* m_Title; // Title displayed in hotkey editor and used as comment in file
+};
+
+
+/**
+ * Class EDA_HOTKEY_CLIENT_DATA
+ * provides client data member for hotkeys to include in command events generated
+ * by the hot key.
+ */
+class EDA_HOTKEY_CLIENT_DATA : public wxClientData
+{
+ //< Logical position of the mouse cursor when the hot key was pressed.
+ wxPoint m_position;
+
+public:
+ EDA_HOTKEY_CLIENT_DATA( const wxPoint& aPosition = wxDefaultPosition ) :
+ m_position( aPosition ) {}
+
+ ~EDA_HOTKEY_CLIENT_DATA();
+
+ void SetPosition( const wxPoint& aPosition ) { m_position = aPosition; }
+
+ wxPoint GetPosition() { return m_position; }
+};
+
+
+/* Functions:
+ */
+void AddHotkeyConfigMenu( wxMenu* menu );
+void HandleHotkeyConfigMenuSelection( EDA_BASE_FRAME* frame, int id );
+
+/**
+ * Function KeyNameFromKeyCode
+ * return the key name from the key code
+ * * Only some wxWidgets key values are handled for function key ( see
+ * s_Hotkey_Name_List[] )
+ * @param aKeycode = key code (ascii value, or wxWidgets value for function keys)
+ * @param aIsFound = a pointer to a bool to return true if found, or false. an be NULL default)
+ * @return the key name in a wxString
+ */
+wxString KeyNameFromKeyCode( int aKeycode, bool * aIsFound = NULL );
+
+/**
+ * Function KeyNameFromCommandId
+ * return the key name from the Command id value ( m_Idcommand member value)
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @param aCommandId = Command Id value
+ * @return the key name in a wxString
+ */
+wxString KeyNameFromCommandId( EDA_HOTKEY** aList, int aCommandId );
+
+/**
+
+ * Function KeyCodeFromKeyName
+ * return the key code from its key name
+ * Only some wxWidgets key values are handled for function key
+ * @param keyname = wxString key name to find in s_Hotkey_Name_List[],
+ * like F2 or space or an usual (ascii) char.
+ * @return the key code
+ */
+int KeyCodeFromKeyName( const wxString& keyname );
+
+/**
+ * An helper enum for AddHotkeyName function
+ * In menus we can add a hot key, or an accelerator , or sometimes just a comment
+ * Hot keys can perform actions using the current mouse cursor position
+ * Accelerators perform the same action as the associated menu
+ * A comment is used in tool tips for some tools (zoom ..)
+ * to show the hot key that performs this action
+ */
+enum HOTKEY_ACTION_TYPE
+{
+ IS_HOTKEY,
+ IS_ACCELERATOR,
+ IS_COMMENT
+};
+
+/**
+ * Function AddHotkeyName
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * @param aText = a wxString. returns aText + key name
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @param aCommandId = Command Id value
+ * @param aShortCutType The #HOTKEY_ACTION_TYPE of the shortcut.
+ * @return a wxString (aTest + key name) if key found or aText without modification
+ */
+wxString AddHotkeyName( const wxString& aText, EDA_HOTKEY** aList, int aCommandId,
+ HOTKEY_ACTION_TYPE aShortCutType = IS_HOTKEY);
+
+/**
+ * Function AddHotkeyName
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * @param aText = a wxString. returns aText + key name
+ * @param aDescrList = pointer to a EDA_HOTKEY_CONFIG DescrList of commands
+ * @param aCommandId = Command Id value
+ * @param aShortCutType The #HOTKEY_ACTION_TYPE of the shortcut.
+ * @return a wxString (aTest + key name) if key found or aText without modification
+ */
+wxString AddHotkeyName( const wxString& aText,
+ struct EDA_HOTKEY_CONFIG* aDescrList,
+ int aCommandId,
+ HOTKEY_ACTION_TYPE aShortCutType = IS_HOTKEY );
+
+/**
+ * Function DisplayHotkeyList
+ * Displays the current hotkey list
+ * @param aFrame = current active frame
+ * @param aList = pointer to a EDA_HOTKEY_CONFIG list (Null terminated)
+ */
+void DisplayHotkeyList( EDA_BASE_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aList );
+
+/**
+ * Function GetDescriptorFromHotkey
+ * Returns a EDA_HOTKEY* pointer from a key code for OnHotKey() function
+ * @param aKey = key code (ascii value, or wxWidgets value for function keys
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
+ */
+EDA_HOTKEY* GetDescriptorFromHotkey( int aKey, EDA_HOTKEY** aList );
+
+/**
+ * Function GetDescriptorFromCommand
+ * Returns a EDA_HOTKEY* pointer from a hot key identifier.
+ * @param aCommand = hot key identifier (@see hotkeys.h)
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
+ */
+EDA_HOTKEY* GetDescriptorFromCommand( int aCommand, EDA_HOTKEY** aList );
+
+/**
+ * Function ReadHotkeyConfig
+ * Read hotkey configuration for a given app,
+ * possibly before the frame for that app has been created
+ * @param Appname = the value of the app's m_FrameName
+ * @param aDescList = the hotkey data
+*/
+void ReadHotkeyConfig( const wxString& Appname, struct EDA_HOTKEY_CONFIG* aDescList );
+
+void ParseHotkeyConfig( const wxString& data, struct EDA_HOTKEY_CONFIG* aDescList );
+
+
+// common hotkeys event id
+// these hotkey ID are used in many files, so they are define here only once.
+enum common_hotkey_id_commnand {
+ HK_NOT_FOUND = 0,
+ HK_RESET_LOCAL_COORD,
+ HK_SET_GRID_ORIGIN,
+ HK_RESET_GRID_ORIGIN,
+ HK_HELP,
+ HK_ZOOM_IN,
+ HK_ZOOM_OUT,
+ HK_ZOOM_REDRAW,
+ HK_ZOOM_CENTER,
+ HK_ZOOM_AUTO,
+ HK_UNDO,
+ HK_REDO,
+ HK_COMMON_END
+};
+
+#endif // HOTKEYS_BASIC_H
diff --git a/include/html_messagebox.h b/include/html_messagebox.h
new file mode 100644
index 0000000..8527630
--- /dev/null
+++ b/include/html_messagebox.h
@@ -0,0 +1,85 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _html_messagebox_
+#define _html_messagebox_
+
+
+/**
+@file
+Subclass of DIALOG_DISPLAY_HTML_TEXT_BASE, which is generated by wxFormBuilder.
+*/
+
+#include <../common/dialogs/dialog_display_info_HTML_base.h>
+
+
+/**
+ * Class HTML_MESSAGE_BOX
+ */
+class HTML_MESSAGE_BOX : public DIALOG_DISPLAY_HTML_TEXT_BASE
+{
+protected:
+ // Handlers for HTML_MESSAGE_BOX_BASE events.
+ void OnCloseButtonClick( wxCommandEvent& event );
+
+public:
+ /**
+ * Constructor
+ */
+ HTML_MESSAGE_BOX( wxWindow* parent, const wxString& aTitle,
+ wxPoint aPos = wxDefaultPosition,
+ wxSize aSize = wxSize( 450, 250 ) );
+
+ /**
+ * Function ListSet
+ * Add a list of items.
+ * @param aList = a string containing items. Items are separated by '\n'
+ */
+ void ListSet( const wxString& aList );
+
+ /**
+ * Function ListSet
+ * Add a list of items.
+ * @param aList = a wxArrayString containing items.
+ */
+ void ListSet( const wxArrayString& aList );
+
+ void ListClear();
+
+ /**
+ * Function MessageSet
+ * adds a message (in bold) to message list.
+ * @param message = the message
+ */
+ void MessageSet( const wxString& message );
+
+ /**
+ * Function AddHTML_Text
+ * adds html text (without any change) to message list.
+ * @param message = the text to add
+ */
+ void AddHTML_Text( const wxString& message );
+};
+
+#endif // _html_messagebox_
diff --git a/include/i18n_utility.h b/include/i18n_utility.h
new file mode 100644
index 0000000..2da1fd0
--- /dev/null
+++ b/include/i18n_utility.h
@@ -0,0 +1,41 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file i18n_utility.h
+ * @brief Some functions to handle hotkeys in KiCad
+ */
+
+#ifndef I18N_UTILITY_H
+#define I18N_UTILITY_H
+
+// A define to allow translation of strings which must be stored in English (for instance
+// because they are used both as keywords and as messages in dialogs
+// We do not want to use the _( x ) usual macro from wxWidgets, which calls wxGetTranslation(),
+// because the English string is used in key file configuration
+// The translated string is used only when displaying the help window.
+// Therefore translation tools have to use the "_" and the "_HKI" prefix to extract
+// strings to translate
+#define _HKI( x ) wxT( x )
+
+#endif // I18N_UTILITY_H
diff --git a/include/id.h b/include/id.h
new file mode 100644
index 0000000..b3bf1ea
--- /dev/null
+++ b/include/id.h
@@ -0,0 +1,294 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2009-2016 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file id.h
+ */
+
+
+#ifndef ID_H_
+#define ID_H_
+
+/**
+ * Common command IDs shared by more than one of the KiCad applications.
+ *
+ * Only place command IDs used in base window class event tables or shared
+ * across multple applications such as the zoom, grid, and language IDs.
+ * Application specific IDs should be defined in the appropriate header
+ * file to prevent the entire project from being rebuilt.
+ *
+ * However, we must avoid duplicate IDs in menus and toolbar items, when wxUpdateUIEvent
+ * are associated to menuitems and/or toolbar items
+ * The reason is the fact wxWidgets try to send a wxUpdateUIEvent event to a given window and,
+ * if a wxUpdateUIEvent event function is not defined for a menuitem, wxWidgets
+ * propagates this event ID to parents of the given window.
+ * Therefore duplicate IDs could create strange behavior in menus and subtle bugs, depending
+ * on the code inside the wxUpdateUIEvent event functions called in parent frames.
+ * I did not seen this propagation to child frames, only to parent frames
+ *
+ * Issues exist only if 2 menus have the same ID, and only one menu is associated to
+ * a wxUpdateUIEvent event, and this one is defined in a parent Window.
+ * The probability it happens is low, but not null.
+ *
+ * Therefore we reserve room in ID list for each sub application.
+ * Please, change these values if needed
+ */
+
+// Define room for IDs, for each sub application
+#define ROOM_FOR_KICADMANAGER 50
+#define ROOM_FOR_3D_VIEWER 100
+
+enum main_id
+{
+ ID_RUN_PCB = wxID_HIGHEST,
+ ID_RUN_PCB_MODULE_EDITOR,
+ ID_RUN_CVPCB,
+ ID_RUN_LIBRARY, // pcbnew & eeschema each use this internally to load their respective lib editors
+
+ ID_LOAD_PROJECT,
+ ID_APPEND_PROJECT,
+ ID_NEW_PROJECT,
+ ID_NEW_PROJECT_FROM_TEMPLATE,
+ ID_SAVE_PROJECT,
+ ID_SAVE_PROJECT_AS,
+ ID_LOAD_FILE,
+ ID_APPEND_FILE,
+ ID_NEW_BOARD,
+ ID_SAVE_BOARD,
+ ID_SAVE_BOARD_AS,
+ ID_AUTO_SAVE_TIMER,
+
+ ID_CONFIG_REQ,
+ ID_CONFIG_SAVE,
+ ID_CONFIG_READ,
+
+ ID_PREFERENCES_HOTKEY_START,
+ ID_PREFERENCES_HOTKEY_EXPORT_CONFIG,
+ ID_PREFERENCES_HOTKEY_IMPORT_CONFIG,
+ ID_PREFERENCES_HOTKEY_SHOW_EDITOR,
+ ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST,
+ ID_PREFERENCES_HOTKEY_END,
+ ID_PREFERENCES_CONFIGURE_PATHS,
+
+ ID_PREFRENCES_MACROS,
+ ID_PREFRENCES_MACROS_SAVE,
+ ID_PREFRENCES_MACROS_READ,
+
+ ID_GEN_PLOT,
+ ID_GEN_PLOT_PS,
+ ID_GEN_PLOT_HPGL,
+ ID_GEN_PLOT_GERBER,
+ ID_GEN_PLOT_SVG,
+ ID_GEN_PLOT_DXF,
+ ID_GEN_PLOT_PDF,
+ ID_GEN_COPY_SHEET_TO_CLIPBOARD,
+ ID_GEN_COPY_BLOCK_TO_CLIPBOARD,
+
+ ID_GEN_EXPORT_FILE,
+ ID_GEN_IMPORT_FILE,
+
+ ID_EXIT,
+ ID_OPTIONS_SETUP,
+
+ // id for toolbars
+ ID_H_TOOLBAR,
+ ID_V_TOOLBAR,
+ ID_OPT_TOOLBAR,
+ ID_AUX_TOOLBAR,
+
+ ID_HELP_COPY_VERSION_STRING,
+
+ ID_EDIT,
+ ID_NO_TOOL_SELECTED,
+ ID_SEL_BG_COLOR,
+
+ ID_COLORS_SETUP,
+
+ ID_REPEAT_BUTT,
+
+ ID_LANGUAGE_CHOICE,
+ ID_LANGUAGE_DEFAULT,
+ ID_LANGUAGE_ENGLISH,
+ ID_LANGUAGE_FRENCH,
+ ID_LANGUAGE_FINNISH,
+ ID_LANGUAGE_SPANISH,
+ ID_LANGUAGE_GERMAN,
+ ID_LANGUAGE_GREEK,
+ ID_LANGUAGE_RUSSIAN,
+ ID_LANGUAGE_PORTUGUESE,
+ ID_LANGUAGE_ITALIAN,
+ ID_LANGUAGE_SLOVENIAN,
+ ID_LANGUAGE_HUNGARIAN,
+ ID_LANGUAGE_POLISH,
+ ID_LANGUAGE_CZECH,
+ ID_LANGUAGE_KOREAN,
+ ID_LANGUAGE_CATALAN,
+ ID_LANGUAGE_CHINESE_SIMPLIFIED,
+ ID_LANGUAGE_DUTCH,
+ ID_LANGUAGE_JAPANESE,
+ ID_LANGUAGE_BULGARIAN,
+ ID_LANGUAGE_CHOICE_END,
+
+ ID_SET_REPEAT_OPTION,
+
+ // Popup Menu (mouse Right button) (id consecutifs)
+
+ ID_POPUP_GENERAL_START_RANGE, // first number
+ ID_POPUP_CANCEL_CURRENT_COMMAND,
+ ID_POPUP_CLOSE_CURRENT_TOOL,
+ ID_POPUP_MOVE_BLOCK,
+ ID_POPUP_MOVE_BLOCK_EXACT,
+ ID_POPUP_DRAG_BLOCK,
+ ID_POPUP_COPY_BLOCK,
+ ID_POPUP_ROTATE_BLOCK,
+ ID_POPUP_DELETE_BLOCK,
+ ID_POPUP_FLIP_BLOCK,
+ ID_POPUP_PLACE_BLOCK,
+ ID_POPUP_ZOOM_BLOCK,
+ ID_POPUP_SELECT_ITEMS_BLOCK,
+ ID_POPUP_MIRROR_X_BLOCK,
+ ID_POPUP_MIRROR_Y_BLOCK,
+ ID_POPUP_OTHER_COMMANDS,
+ ID_POPUP_GENERAL_END_RANGE, // last number
+
+ ID_POPUP_ENTER_MENU,
+
+ ID_ON_ZOOM_SELECT,
+ ID_POPUP_ZOOM_START_RANGE, // first zoom id
+ ID_POPUP_CANCEL,
+ ID_POPUP_ZOOM_IN,
+ ID_POPUP_ZOOM_OUT,
+ ID_POPUP_ZOOM_SELECT,
+ ID_POPUP_ZOOM_CENTER,
+ ID_POPUP_ZOOM_PAGE,
+ ID_POPUP_ZOOM_REDRAW,
+
+ /* Reserve IDs for popup menu zoom levels. If you need more
+ * levels of zoom, change ID_POPUP_ZOOM_LEVEL_END. Note that more
+ * than 15 entries in a context submenu may get too large to display
+ * cleanly. Add any additional popup zoom IDs above here or the
+ * zoom event handler will not work properly.
+ * currently room is provided for 32 levels (this is a very large value).
+ * Pcbnew use 18 values. For schematic 15 is enought
+ */
+ ID_POPUP_ZOOM_LEVEL_START,
+ ID_POPUP_ZOOM_LEVEL_END = ID_POPUP_ZOOM_LEVEL_START + 32,
+ ID_POPUP_ZOOM_END_RANGE, // last zoom id
+
+ ID_ON_GRID_SELECT,
+ ID_POPUP_GRID_PLUS,
+ ID_POPUP_GRID_MOINS,
+ ID_POPUP_GRID_SELECT,
+ ID_POPUP_GRID_LEVEL_1000, // id for first predefined grid in inches (1000 * 0.0001 inch)
+ ID_POPUP_GRID_LEVEL_500,
+ ID_POPUP_GRID_LEVEL_250,
+ ID_POPUP_GRID_LEVEL_200,
+ ID_POPUP_GRID_LEVEL_100,
+ ID_POPUP_GRID_LEVEL_50,
+ ID_POPUP_GRID_LEVEL_25,
+ ID_POPUP_GRID_LEVEL_20,
+ ID_POPUP_GRID_LEVEL_10,
+ ID_POPUP_GRID_LEVEL_5,
+ ID_POPUP_GRID_LEVEL_2,
+ ID_POPUP_GRID_LEVEL_1, // id for last predefined grid in inches ( 0.0001 inch)
+ ID_POPUP_GRID_LEVEL_5MM,
+ ID_POPUP_GRID_LEVEL_2_5MM,
+ ID_POPUP_GRID_LEVEL_1MM, // id for first predefined grid in mm (1mm)
+ ID_POPUP_GRID_LEVEL_0_5MM,
+ ID_POPUP_GRID_LEVEL_0_25MM,
+ ID_POPUP_GRID_LEVEL_0_2MM,
+ ID_POPUP_GRID_LEVEL_0_1MM,
+ ID_POPUP_GRID_LEVEL_0_0_5MM,
+ ID_POPUP_GRID_LEVEL_0_0_25MM,
+ ID_POPUP_GRID_LEVEL_0_0_1MM,
+ ID_POPUP_GRID_USER,
+
+ ID_SHEET_SET,
+ ID_COMPONENT_BUTT,
+
+ ID_ZOOM_BEGIN,
+ ID_ZOOM_IN = ID_ZOOM_BEGIN,
+ ID_ZOOM_OUT,
+ ID_ZOOM_PAGE,
+ ID_ZOOM_REDRAW,
+ ID_VIEWER_ZOOM_IN,
+ ID_VIEWER_ZOOM_OUT,
+ ID_VIEWER_ZOOM_PAGE,
+ ID_VIEWER_ZOOM_REDRAW,
+ // zoom commands for non center zooming
+ ID_OFFCENTER_ZOOM_IN,
+ ID_OFFCENTER_ZOOM_OUT,
+ ID_ZOOM_END,
+
+ // Panning command event IDs.
+ ID_PAN_UP,
+ ID_PAN_DOWN,
+ ID_PAN_LEFT,
+ ID_PAN_RIGHT,
+
+ ID_GET_NETLIST,
+ ID_GET_TOOLS,
+ ID_FIND_ITEMS,
+
+ ID_EDA_SOCKET_EVENT_SERV,
+ ID_EDA_SOCKET_EVENT,
+
+ // Common to all
+ ID_TB_OPTIONS_SELECT_UNIT_MM,
+ ID_TB_OPTIONS_SELECT_UNIT_INCH,
+ ID_TB_OPTIONS_SELECT_CURSOR,
+ ID_TB_OPTIONS_SHOW_POLAR_COORD,
+ ID_TB_OPTIONS_SHOW_GRID,
+
+ // Common to Pcbnew and CvPcb
+ ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH,
+ ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH,
+ ID_TB_OPTIONS_SHOW_PADS_SKETCH,
+
+ ID_DIALOG_ERC, ///< eeschema ERC modeless dialog ID
+
+ // IDs specifics to a sub-application (Eeschema, Kicad manager....) start here
+ //
+ // We reserve here Ids for each sub-application, to avoid duplicate IDs
+ // between them.
+ // mainly we experienced issues related to wxUpdateUIEvent calls when 2 (or more) wxFrames
+ // share the same ID in menus, mainly in menubars/toolbars
+ // The reason is the fact wxWidgets propagates the wxUpdateUIEvent to all parent windows
+ // to find wxUpdateUIEvent event functions matching the menuitem IDs found when activate a menu in the first frame.
+
+ // Reserve ROOM_FOR_KICADMANAGER IDs, for Kicad manager
+ // Change it if this count is too small.
+ ID_KICAD_MANAGER_START,
+ ID_KICAD_MANAGER_END = ID_KICAD_MANAGER_START + ROOM_FOR_KICADMANAGER,
+
+ // Reserve ROOM_FOR_KICADMANAGER IDs, for Kicad manager
+ // Change it if this count is too small.
+ ID_KICAD_3D_VIEWER_START,
+ ID_KICAD_3D_VIEWER_END = ID_KICAD_3D_VIEWER_START + ROOM_FOR_3D_VIEWER,
+
+ ID_END_LIST
+};
+
+#endif // ID_H_
diff --git a/include/import_export.h b/include/import_export.h
new file mode 100644
index 0000000..57de9f9
--- /dev/null
+++ b/include/import_export.h
@@ -0,0 +1,60 @@
+#ifndef IMPORT_EXPORT_H_
+#define IMPORT_EXPORT_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/// Macros which export functions from a DLL/DSO.
+/// See: http://gcc.gnu.org/wiki/Visibility
+
+#if defined(__MINGW32__)
+ #define APIEXPORT __declspec(dllexport)
+ #define APIIMPORT __declspec(dllimport)
+ #define APILOCAL
+
+#elif defined(__GNUC__) && __GNUC__ >= 4
+ // On ELF, we compile with hidden visibility, so unwrap that for specific symbols:
+ #define APIEXPORT __attribute__ ((visibility("default")))
+ #define APIIMPORT __attribute__ ((visibility("default")))
+ #define APILOCAL __attribute__ ((visibility("hidden")))
+
+#else
+ #pragma message ( "warning: a supported C++ compiler is required" )
+ #define APIEXPORT
+ #define APIIMPORT
+ #define APILOCAL
+#endif
+
+
+#if defined(COMPILING_DLL)
+ // Be sure and define COMPILING_DLL when compiling implementation, and NOT when
+ // compiling the client.
+ #define MY_API(rettype) APIEXPORT rettype
+#else
+ #define MY_API(rettype) APIIMPORT rettype
+#endif
+
+#define MY_LOCAL(rettype) APILOCAL rettype
+
+#endif // IMPORT_EXPORT_H_
diff --git a/include/ki_mutex.h b/include/ki_mutex.h
new file mode 100644
index 0000000..3eab58e
--- /dev/null
+++ b/include/ki_mutex.h
@@ -0,0 +1,56 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef KI_MUTEX_H_
+#define KI_MUTEX_H_
+
+
+/// Establish KiCad MUTEX choices here in this file:
+/// typedef MUTEX and typedef MUTLOCK.
+///
+/// Using an unnamed resource is easier, providing a textual name for a
+/// constructor is cumbersome, so we make choice on that criteria mostly:
+
+#if 1
+
+// This is a fine choice between the two, but requires linking to ${Boost_LIBRARIES}
+
+#include <boost/interprocess/sync/interprocess_mutex.hpp>
+#include <boost/interprocess/sync/scoped_lock.hpp>
+
+typedef boost::interprocess::interprocess_mutex MUTEX;
+typedef boost::interprocess::scoped_lock<MUTEX> MUTLOCK;
+
+#else
+
+// This choice also works.
+
+#include <wx/thread.h>
+
+typedef wxMutex MUTEX;
+typedef wxMutexLocker MUTLOCK;
+
+#endif
+
+#endif // KI_MUTEX_H_
diff --git a/include/kicad_curl/kicad_curl.h b/include/kicad_curl/kicad_curl.h
new file mode 100644
index 0000000..51655a9
--- /dev/null
+++ b/include/kicad_curl/kicad_curl.h
@@ -0,0 +1,108 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+#ifndef KICAD_CURL_H_
+#define KICAD_CURL_H_
+
+/*
+ * KICAD_CURL.h must be included before wxWidgets because on Windows,
+ * wxWidgets ends up including windows.h before winsocks2.h inside curl
+ * this causes build warnings
+ * Because we are before wx, we must explicitly define we are building with unicode.
+ * wxWidgets defaults to supporting unicode now, so this should be safe.
+ */
+#if defined(WIN32)
+ #ifndef UNICODE
+ # define UNICODE
+ #endif
+
+ #ifndef _UNICODE
+ # define _UNICODE
+ #endif
+#endif
+
+#include <curl/curl.h>
+#include <string>
+
+// CURL_EXTERN expands to dllimport on MinGW which causes gcc warnings. This really should
+// expand to nothing on MinGW.
+#if defined( __MINGW32__)
+# if defined( CURL_EXTERN )
+# undef CURL_EXTERN
+# define CURL_EXTERN
+# endif
+#endif
+
+
+struct DYN_LOOKUP;
+
+
+/**
+ * Class KICAD_CURL
+ * simple wrapper class to call curl_global_init and curl_global_cleanup for KiCad.
+ */
+class KICAD_CURL
+{
+ friend class KICAD_CURL_EASY;
+
+public:
+ /**
+ * Function Init
+ * calls curl_global_init for the application. It must be used only once
+ * and before any curl functions that perform requests.
+ *
+ * @return bool - True if successful, false if CURL returned an error
+ * @throw IO_ERROR on failure, hopefully with helpful text in it.
+ */
+ static void Init();
+
+ /**
+ * Function Cleanup
+ * calls curl_global_cleanup for the application. It must be used only after
+ * curl_global_init was called.
+ */
+ static void Cleanup();
+
+ /**
+ * Function GetVersion
+ * wrapper for curl_version(). Reports back a short string of loaded libraries.
+ *
+ * @return const char* - String reported by libcurl and owned by it.
+ * @throw IO_ERROR on failure, hopefully with helpful text in it.
+ */
+ static const char* GetVersion()
+ {
+ return curl_version();
+ }
+
+
+ /**
+ * Function GetSimpleVersion
+ * Reports back curl version only and SSL library support
+ *
+ * @return std::string - Generated version string
+ */
+ static std::string GetSimpleVersion();
+};
+
+#endif // KICAD_CURL_H_
diff --git a/include/kicad_curl/kicad_curl_easy.h b/include/kicad_curl/kicad_curl_easy.h
new file mode 100644
index 0000000..80d427c
--- /dev/null
+++ b/include/kicad_curl/kicad_curl_easy.h
@@ -0,0 +1,184 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+#ifndef KICAD_CURL_EASY_H_
+#define KICAD_CURL_EASY_H_
+
+/*
+ * KICAD_CURL_EASY.h must included before wxWidgets because on Windows,
+ * wxWidgets ends up including windows.h before winsocks2.h inside curl
+ * this causes build warnings
+ * Because we are before wx, we must explicitly define we are building with unicode
+ * wxWidgets defaults to supporting unicode now, so this should be safe.
+ */
+#if defined(WIN32)
+ #ifndef UNICODE
+ # define UNICODE
+ #endif
+
+ #ifndef _UNICODE
+ # define _UNICODE
+ #endif
+#endif
+
+
+#include <string>
+#include <curl/curl.h>
+#include <kicad_curl/kicad_curl.h>
+
+
+/**
+ * Class KICAD_CURL_EASY
+ * wrapper interface around the curl_easy API
+ *
+ * Handling of using the curl_easy API to make a request and save the response to
+ * a memory buffer
+ *
+ * Here is a small example usage:
+ * @code
+ * KICAD_CURL_EASY curl;
+ *
+ * curl.SetURL( "http://github.com" );
+ * curl.SetUserAgent( <http-client-indentifier> );
+ * curl.SetHeader( "Accept", "application/json" );
+ * curl.Perform();
+ * @endcode
+ */
+class KICAD_CURL_EASY
+{
+public:
+ KICAD_CURL_EASY();
+ ~KICAD_CURL_EASY();
+
+ /**
+ * Function perform
+ * equivalent to curl_easy_perform. Executes the request
+ * that was previously setup.
+ *
+ * @throw IO_ERROR, if there is a CURL request error
+ */
+ void Perform();
+
+ /**
+ * Function SetHeader
+ * sets an arbitrary header for the HTTP(s) request.
+ *
+ * @param aName is the left hand side of the header, i.e. Accept without the colon
+ * @param aValue is the right hand side of the header, i.e. application/json
+ */
+ void SetHeader( const std::string& aName, const std::string& aValue )
+ {
+ std::string header = aName + ':' + aValue;
+ m_headers = curl_slist_append( m_headers, header.c_str() );
+ }
+
+ /**
+ * Function SetUserAgent
+ * sets the request user agent
+ *
+ * @param aAgent is the string to set for the user agent
+ * @return bool - True if successful, false if not
+ */
+ bool SetUserAgent( const std::string& aAgent )
+ {
+ if( SetOption<const char*>( CURLOPT_USERAGENT, aAgent.c_str() ) == CURLE_OK )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Function SetURL
+ * sets the request URL
+ *
+ * @param aURL is the URL
+ * @return bool - True if successful, false if not
+ */
+ bool SetURL( const std::string& aURL )
+ {
+ if( SetOption<const char *>( CURLOPT_URL, aURL.c_str() ) == CURLE_OK )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Function SetFollowRedirects
+ * enables the following of HTTP(s) and other redirects, by default curl
+ * does not follow redirects.
+ *
+ * @param aFollow is a boolean where true will enable following redirects
+ * @return bool - True if successful, false if not
+ */
+ bool SetFollowRedirects( bool aFollow )
+ {
+ if( SetOption<long>( CURLOPT_FOLLOWLOCATION , (aFollow ? 1 : 0) ) == CURLE_OK )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Function GetErrorText
+ * fetches CURL's "friendly" error string for a given error code
+ *
+ * @param aCode is CURL error code
+ * @return const std::string - the corresponding error string for the given code
+ */
+ const std::string GetErrorText( CURLcode aCode )
+ {
+ return curl_easy_strerror( aCode );
+ }
+
+ /**
+ * Function SetOption
+ * sets a curl option, only supports single parameter curl options
+ *
+ * @param aOption is CURL option, see CURL manual for options
+ * @param aArg is the argument being passed to CURL, ensure it is the right type per manual
+ * @return CURLcode - CURL error code, will return CURLE_OK unless a problem was encountered
+ */
+ template <typename T> CURLcode SetOption( CURLoption aOption, T aArg )
+ {
+ return curl_easy_setopt( m_CURL, aOption, aArg );
+ }
+
+ /**
+ * Function GetBuffer
+ * returns a const reference to the recevied data buffer
+ */
+ const std::string& GetBuffer()
+ {
+ return m_buffer;
+ }
+
+private:
+ CURL* m_CURL;
+ curl_slist* m_headers;
+ std::string m_buffer;
+};
+
+#endif // KICAD_CURL_EASY_H_
diff --git a/include/kicad_device_context.h b/include/kicad_device_context.h
new file mode 100644
index 0000000..f4bc6a8
--- /dev/null
+++ b/include/kicad_device_context.h
@@ -0,0 +1,204 @@
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 jean-pierre.charras@gipsa-lab.inpg.fr
+ * Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * a helper to handle the real device context used in KiCad
+ * @file kicad_device_context.h
+ */
+
+#ifndef __KICAD_DEVICE_CONTEXT_H__
+#define __KICAD_DEVICE_CONTEXT_H__
+
+#include <wx/dcbuffer.h>
+
+#if defined(KICAD_USE_BUFFERED_PAINTDC)
+#undef KICAD_USE_BUFFERED_PAINTDC
+#endif
+
+#if defined(KICAD_USE_BUFFERED_DC)
+#undef KICAD_USE_BUFFERED_DC
+#endif
+
+// wxWidgets defines the platforms where device context buffering is well behaved. These
+// definitions take advantage of their experience in this area. See <wx/dcbuffer.h> for
+// more information.
+#if wxALWAYS_NATIVE_DOUBLE_BUFFER
+#define KICAD_USE_BUFFERED_PAINTDC 1
+#define KICAD_USE_BUFFERED_DC_HELPER 0
+#define KICAD_USE_BUFFERED_DC 0
+#else
+#define KICAD_USE_BUFFERED_PAINTDC 1
+#define KICAD_USE_BUFFERED_DC_HELPER 1
+#define KICAD_USE_BUFFERED_DC 1
+#endif
+
+
+/**
+ * Class BUFFERED_DC_HELPER
+ * fixes a bug on Windows when using buffered device context.
+ *
+ * <p>
+ * When using buffered device context drawing in Windows, the user scaling must be set to 1
+ * and the logical offset must be set to zero before the bitmap blit operation occurs in
+ * the destructor of wxBufferdDC but after the normal drawing takes place.
+ * </p>
+ */
+class BUFFERED_DC_HELPER
+{
+public:
+ BUFFERED_DC_HELPER( wxBufferedDC* aDC )
+ : m_dc( aDC ) {}
+
+ virtual ~BUFFERED_DC_HELPER()
+ {
+ if( m_dc )
+ {
+ m_dc->SetLogicalOrigin( 0, 0 );
+ m_dc->SetUserScale( 1.0, 1.0 );
+ }
+ }
+
+private:
+ wxBufferedDC* m_dc;
+};
+
+
+/**
+ * Class EDA_BLIT_NORMALIZER
+ * is a helper class for clearing a device context scale and offset parameters before
+ * performing a Blit operation.
+ * <p>
+ * This class keeps a temporary copy of the scale and offset parameters of a device
+ * context and then restores them when it goes out of scope.
+ * </p>
+ */
+class EDA_BLIT_NORMALIZER
+{
+public:
+ EDA_BLIT_NORMALIZER( wxDC* aDC )
+ : m_dc( aDC )
+ {
+ if( aDC )
+ {
+ aDC->GetUserScale( &m_userScaleX, &m_userScaleY );
+ aDC->GetLogicalOrigin( &m_logicalOriginX, &m_logicalOriginY );
+ aDC->GetDeviceOrigin( &m_deviceOriginX, &m_deviceOriginY );
+ aDC->SetUserScale( 1.0, 1.0 );
+ aDC->SetLogicalOrigin( 0, 0 );
+ aDC->SetDeviceOrigin( 0, 0 );
+ }
+ }
+
+ ~EDA_BLIT_NORMALIZER()
+ {
+ if( m_dc )
+ {
+ m_dc->SetUserScale( m_userScaleX, m_userScaleY );
+ m_dc->SetLogicalOrigin( m_logicalOriginX, m_logicalOriginY );
+ m_dc->SetDeviceOrigin( m_deviceOriginX, m_deviceOriginY );
+ }
+ }
+
+private:
+ wxDC* m_dc;
+ double m_userScaleX;
+ double m_userScaleY;
+ int m_logicalOriginX;
+ int m_logicalOriginY;
+ int m_deviceOriginX;
+ int m_deviceOriginY;
+
+ DECLARE_NO_COPY_CLASS( EDA_BLIT_NORMALIZER )
+};
+
+
+#if USE_WX_GRAPHICS_CONTEXT
+ #include <wx/dcgraph.h>
+#endif
+
+// Macro used to declare a device context in KiCad:
+#if USE_WX_GRAPHICS_CONTEXT
+//#pragma message( "INSTALL_DC is wxClientDC with wxGCDC" )
+#define INSTALL_DC( name, parent ) \
+ wxClientDC _cDC( parent ); \
+ wxGCDC name( _cDC ); \
+ parent->DoPrepareDC( name ); \
+ name.GetGraphicsContext()->Translate( 0.5, 0.5 );
+#else
+#if KICAD_USE_BUFFERED_DC && !KICAD_USE_BUFFERED_DC_HELPER
+//#pragma message( "INSTALL_DC is wxClientDC with wxBufferedDC" )
+#define INSTALL_DC( name, parent ) \
+ wxClientDC _cDC( parent ); \
+ wxBufferedDC name(&_cDC, _cDC.GetSize() ); \
+ parent->DoPrepareDC( name );
+#elif KICAD_USE_BUFFERED_DC && KICAD_USE_BUFFERED_DC_HELPER
+//#pragma message( "INSTALL_DC is wxBufferedDC with BUFFERED_DC_HELPER" )
+#define INSTALL_DC( name, parent ) \
+ wxClientDC _cDC( parent ); \
+ wxBufferedDC name(&_cDC, _cDC.GetSize() ); \
+ parent->DoPrepareDC( name ); \
+ BUFFERED_DC_HELPER helper( &name );
+#else
+//#pragma message( "INSTALL_DC is wxClientDC" )
+#define INSTALL_DC( name, parent ) \
+ wxClientDC name( parent ); \
+ parent->DoPrepareDC( name );
+#endif
+#endif
+
+#if USE_WX_GRAPHICS_CONTEXT
+//#pragma message( "INSTALL_PAINTDC is wxPaintDC with wxGCDC" )
+#define INSTALL_PAINTDC( name, parent) \
+ wxPaintDC _pDC( parent ); \
+ wxGCDC name( _pDC ); \
+ parent->DoPrepareDC( name ); \
+ name.GetGraphicsContext()->Translate( 0.5, 0.5 );
+#elif KICAD_USE_BUFFERED_PAINTDC && !KICAD_USE_BUFFERED_DC_HELPER
+//#pragma message( "INSTALL_PAINTDC is wxAutoBufferedPaintDC" )
+#define INSTALL_PAINTDC( name, parent ) \
+ wxAutoBufferedPaintDC name( parent ); \
+ parent->DoPrepareDC( name );
+#elif KICAD_USE_BUFFERED_PAINTDC && KICAD_USE_BUFFERED_DC_HELPER
+//#pragma message( "INSTALL_PAINTDC is wxBufferedPaintDC with BUFFERED_DC_HELPER" )
+#define INSTALL_PAINTDC( name, parent ) \
+ wxBufferedPaintDC name( parent ); \
+ parent->DoPrepareDC( name ); \
+ BUFFERED_DC_HELPER help( &name );
+#else
+//#pragma message( "INSTALL_PAINTDC is wxPaintDC" )
+#define INSTALL_PAINTDC(name,parent) \
+ wxPaintDC name( parent ); \
+ parent->DoPrepareDC( name );
+#endif
+
+
+// This macro should be used when drawing objects directly without drawing the background.
+#define INSTALL_UNBUFFERED_DC( name, parent ) \
+ wxClientDC name( parent ); \
+ parent->DoPrepareDC( name );
+
+
+#endif // __KICAD_DEVICE_CONTEXT_H__
diff --git a/include/kicad_string.h b/include/kicad_string.h
new file mode 100644
index 0000000..2c17f10
--- /dev/null
+++ b/include/kicad_string.h
@@ -0,0 +1,174 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file kicad_string.h
+ * @see common.h, string.cpp
+ */
+
+
+#ifndef KICAD_STRING_H_
+#define KICAD_STRING_H_
+
+#include <wx/string.h>
+#include <wx/filename.h>
+
+
+/**
+ * Function ReadDelimitedText
+ * copies bytes from @a aSource delimited string segment to @a aDest buffer.
+ * The extracted string will be null terminated even if truncation is necessary
+ * because aDestSize was not large enough.
+ *
+ * @param aDest is the destination byte buffer.
+ * @param aSource is the source bytes as a C string.
+ * @param aDestSize is the size of the destination byte buffer.
+ * @return int - the number of bytes read from source, which may be more than
+ * the number copied, due to escaping of double quotes and the escape byte itself.
+ * @deprecated should use the one which fetches a wxString, below.
+ */
+int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize );
+
+/**
+ * Function ReadDelimitedText
+ * copies bytes from @a aSource delimited string segment to @a aDest wxString.
+ *
+ * @param aDest is the destination wxString
+ * @param aSource is the source C string holding utf8 encoded bytes.
+ * @return int - the number of bytes read from source, which may be more than
+ * the number copied, due to escaping of double quotes and the escape byte itself.
+ */
+int ReadDelimitedText( wxString* aDest, const char* aSource );
+
+/**
+ * Function EscapedUTF8
+ * returns an 8 bit UTF8 string given aString in unicode form.
+ * Any double quoted or back slashes are prefixed with a '\\' byte and the form
+ * of this UTF8 byte string is compatible with function ReadDelimitedText().
+ *
+ * @param aString is the input string to convert.
+ * @return std::string - the escaped input text, without the wrapping double quotes.
+ */
+std::string EscapedUTF8( const wxString& aString );
+
+/**
+ * Function GetLine
+ * reads one line line from \a aFile.
+ * @return A pointer the first useful line read by eliminating blank lines and comments.
+ */
+char* GetLine( FILE* aFile, char* Line, int* LineNum = NULL, int SizeLine = 255 );
+
+/**
+ * Function StrPurge
+ * removes leading and training spaces, tabs and end of line chars in \a text
+ * return a pointer on the first n char in text
+ */
+char* StrPurge( char* text );
+
+/**
+ * Function DateAndTime
+ * @return a string giving the current date and time.
+ */
+wxString DateAndTime();
+
+/**
+ * Function StrLenNumCmp
+ * is a routine compatible with qsort() to sort by alphabetical order.
+ *
+ * This function is equivalent to strncmp() or strnicmp() if \a aIgnoreCase is true
+ * except that strings containing numbers are compared by their integer value not
+ * by their ASCII code.
+ *
+ * @param aString1 A wxString reference to the reference string.
+ * @param aString2 A wxString reference to the comparison string.
+ * @param aLength The number of characters to compare. Set to -1 to compare
+ * the entire string.
+ * @param aIgnoreCase Use true to make the comparison case insensitive.
+ * @return An integer value of -1 if \a aString1 is less than \a aString2, 0 if
+ * \a aString1 is equal to \a aString2, or 1 if \a aString1 is greater
+ * than \a aString2.
+ */
+int StrNumCmp( const wxString& aString1, const wxString& aString2, int aLength = INT_MAX,
+ bool aIgnoreCase = false );
+
+/**
+ * Function WildCompareString
+ * compares a string against wild card (* and ?) pattern using the usual rules.
+ * @return true if pattern matched otherwise false.
+ */
+bool WildCompareString( const wxString& pattern,
+ const wxString& string_to_tst,
+ bool case_sensitive = true );
+
+/**
+ * Function RefDesStringCompare
+ * acts just like the strcmp function but treats numbers within the string text
+ * correctly for sorting. eg. A10 > A2
+ * return -1 if first string is less than the second
+ * return 0 if the strings are equal
+ * return 1 if the first string is greater than the second
+ */
+int RefDesStringCompare( const wxString& lhs, const wxString& rhs );
+
+/**
+ * Function SplitString
+ * breaks a string into three parts.
+ * The alphabetic preamble
+ * The numeric part
+ * Any alphabetic ending
+ * For example C10A is split to C 10 A
+ */
+int SplitString( wxString strToSplit,
+ wxString* strBeginning,
+ wxString* strDigits,
+ wxString* strEnd );
+
+/**
+ * Function GetIllegalFileNameWxChars
+ * @return a wString object containing the illegal file name characters for all platforms.
+ */
+wxString GetIllegalFileNameWxChars();
+
+/**
+ * Function ReplaceIllegalFileNameChars
+ * checks \a aName for illegal file name characters.
+ *
+ * The Windows (DOS) file system forbidden characters already include the forbidden file
+ * name characters for both Posix and OSX systems. The characters \/?*|"\<\> are illegal
+ * and are replaced with %xx where xx the hexadecimal equivalent of the replaced character.
+ * This replacement may not be as elegant as using an underscore ('_') or hyphen ('-') but
+ * it guarentees that there will be no naming conflicts when fixing footprint library names.
+ * however, if aReplaceChar is given, it will replace the illegal chars
+ *
+ * @param aName is a point to a std::string object containing the footprint name to verify.
+ * @param aReplaceChar (if not 0) is the replacement char.
+ * @return true if any characters have been replaced in \a aName.
+ */
+bool ReplaceIllegalFileNameChars( std::string* aName, int aReplaceChar = 0 );
+
+#ifndef HAVE_STRTOKR
+// common/strtok_r.c optionally:
+extern "C" char* strtok_r( char* str, const char* delim, char** nextp );
+#endif
+
+#endif // KICAD_STRING_H_
diff --git a/include/kiface_i.h b/include/kiface_i.h
new file mode 100644
index 0000000..23f0535
--- /dev/null
+++ b/include/kiface_i.h
@@ -0,0 +1,140 @@
+#ifndef KIFACE_I_H_
+#define KIFACE_I_H_
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <kiway.h>
+#include <bin_mod.h>
+
+
+/**
+ * Class KIFACE_I
+ * is a KIFACE (I)mplementation,
+ * with some features useful for DSOs which implement a KIFACE.
+ * It is abstract, a few functions must be implemented in derivations.
+ */
+class KIFACE_I : public KIFACE
+{
+public:
+
+ //-----<KIFACE API>----------------------------------------------------------
+
+ // see base class KIFACE in kiway.h for doxygen docs
+
+ VTBL_ENTRY bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) = 0;
+ /*
+ {
+ typically call start_common() in your overload
+ return start_common();
+ }
+ */
+
+ VTBL_ENTRY void OnKifaceEnd()
+ {
+ // overload this if you want, end_common() may be handy.
+ end_common();
+ }
+
+ VTBL_ENTRY wxWindow* CreateWindow( wxWindow* aParent,
+ int aClassId, KIWAY* aKIWAY, int aCtlBits = 0 ) = 0;
+
+ VTBL_ENTRY void* IfaceOrAddress( int aDataId ) = 0;
+
+ //-----</KIFACE API>---------------------------------------------------------
+
+ // The remainder are DSO specific helpers, not part of the KIFACE API
+
+ /**
+ * Constructor
+ *
+ * @param aKifaceName should point to a C string in permanent storage,
+ * which contains the name of the DSO. Examples: "eeschema", "pcbnew", etc.
+ * This controls the name of the wxConfigBase established in m_bm,
+ * so it should be lowercase.
+ */
+ KIFACE_I( const char* aKifaceName, KIWAY::FACE_T aId ) :
+ m_id( aId ),
+ m_bm( aKifaceName ),
+ m_start_flags( 0 )
+ {
+ }
+
+ // ~KIFACE_I();
+
+protected:
+
+ /// Common things to do for a top program module, during OnKifaceStart().
+ bool start_common( int aCtlBits );
+
+ /// Common things to do for a top program module, during OnKifaceEnd();
+ void end_common();
+
+ // From here down should probably not be in a KIFACE, even though they
+ // are DSO specific, they have nothing to do with KIWAY's use of KIFACE,
+ // so its a questionable choice to put non KIWAY client code in this class.
+
+public:
+
+ const wxString Name() { return wxString::FromUTF8( m_bm.m_name ); }
+
+ wxConfigBase* KifaceSettings() const { return m_bm.m_config; }
+
+ /**
+ * Function StartFlags
+ * returns whatever was passed as @a aCtlBits to OnKifaceStart()
+ */
+ int StartFlags() const { return m_start_flags; }
+
+ /**
+ * Function IsSingle
+ * is this KIFACE_I running under single_top?
+ */
+ bool IsSingle() const { return m_start_flags & KFCTL_STANDALONE; }
+
+ /**
+ * Function GetHelpFileName
+ * returns just the basename portion of the current help file.
+ */
+ const wxString& GetHelpFileName() const { return m_bm.m_help_file; }
+
+ wxFileHistory& GetFileHistory() { return m_bm.m_history; }
+
+ /// Only for DSO specific 'non-library' files.
+ /// (The library search path is in the PROJECT class.)
+ SEARCH_STACK& KifaceSearch() { return m_bm.m_search; }
+
+private:
+ KIWAY::FACE_T m_id;
+
+ BIN_MOD m_bm;
+
+ int m_start_flags; ///< flags provided in OnKifaceStart()
+};
+
+
+/// Global KIFACE_I "get" accessor.
+KIFACE_I& Kiface();
+
+#endif // KIFACE_I_H_
diff --git a/include/kiway.h b/include/kiway.h
new file mode 100644
index 0000000..3ec5af8
--- /dev/null
+++ b/include/kiway.h
@@ -0,0 +1,431 @@
+#ifndef KIWAY_H_
+#define KIWAY_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+
+The KIWAY and KIFACE classes are used to communicate between various process
+modules, all residing within a single process. The program modules are either
+top level like an *.exe or subsidiary like a *.dll. In much of the documentation
+the term DSO is used to refer to the *.dll portions, that is the term used on
+linux. But it should be taken to mean DLL on Windows.
+
+<p>These are a couple of reasons why this design was chosen:
+
+<ol>
+
+<li>By using DSOs within a single process, it is not necessary to use IPC.
+The DSOs can send wxEvents between themselves using wxEvtHandler interfaces in
+a platform independent way. There can also be function calls from one DSO to
+another.</li>
+
+<li>The use of a number of separately linked DSOs closely resembles the original
+KiCad program design, consisting of Eeschema and Pcbnew. But it also allows
+separate compilation and linking of those two DSOs without a ton of inter-DSO
+dependencies and common data structures. Linking smaller, purpose specific DSOs
+is thought to be better for maintenance simplicity than a large single link
+image. </li>
+
+<li>By keeping the core functionality in DSOs rather than EXE tops, it becomes
+possible to re-use the DSOs under different program tops. For example, a DSO
+named _pcbnew.so can be used under a C++ top or under a python top. Only one
+CMake target must be defined to build either. Whether that is a separate build
+or not is not the important thing. Simply having a single CMake target has
+advantages. (Each builder person will have his/her own intentions relative to
+use of python or not.) Once a DSO is python capable, it can be driven by any
+number of python program tops, including demo-ing (automation) and testing
+separately.</li>
+
+
+</ol>
+
+All KiCad source code is UTF8 encoded by law, so make sure your editor is set
+as such! As such, it is OK to use UTF8 characters:
+
+┠┗ ┓ ┛ ┠┃
+
+<pre>
+
+ â”â”â”â”process topâ”â”â”â”â”┓
+ ┃ ┃ wxEvent channels
+ â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”-â”[KIWAY project 1]â”-â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”┓
+ ┃ ┃ ┃ ┃
+ ┃ â”â”â”â”â”â”â”â”â”â”â”â”â”â”-â”[KIWAY project 2]â”-â”â”â”â”â”â”â”â”â”â”┓ ┃
+ ┃ ┃ ┃ ┃ ┃ ┃
+ ┃ ┃ â”â”-â”[KIWAY project 3]â”-â”┓ ┃ ┃
+ ┃ ┃ ┃ â”—â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”› ┃ ┃ ┃
+ ┃ ┃ ┃ ┃ ┃ ┃
+ ┃ ┃ ┃ ┃ ┃ ┃
+â”â”â”â”â”â”â”â”â”|â”â”â”â”â”|â”â”â”â”â”â”â”â”â”â”â”|â”â”â”â”â”â”â”â”â”┓ â”â”â”â”â”â”â”â”â”|â”â”â”â”â”â”â”â”|â”â”â”â”â”â”â”â”â”â”â”|â”â”â”â”â”┓
+┃ KIFACE ┃ ┃ ┃ ┃ ┃ KIFACE ┃ ┃ ┃ ┃
+┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
+┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
+┃â”â”â”â”â”â”â”â”+â”┓ â”â”+â”â”â”â”â”â”â”┓ â”â”+â”â”â”â”â”â”â”┓ ┃ ┃â”â”â”â”â”â”â”â”+â”┓ â”â”â”â”â”+â”â”â”â”┓ â”â”â”â”â”+â”â”â”â”┓┃
+┃┃wxFrame ┃ ┃wxFrame ┃ ┃wxFrame ┃ ┃ ┃┃wxFrame ┃ ┃wxFrame ┃ ┃wxFrame ┃┃
+┃┃project 1┃ ┃project 2┃ ┃project 3┃ ┃ ┃┃project 3┃ ┃project 2┃ ┃project 1┃┃
+┃┗â”â”â”â”â”â”â”â”â”â”› â”—â”â”â”â”â”â”â”â”â”â”› â”—â”â”â”â”â”â”â”â”â”â”› ┃ ┃┗â”â”â”â”â”â”â”â”â”â”› â”—â”â”â”â”â”â”â”â”â”â”› â”—â”â”â”â”â”â”â”â”â”┛┃
+┃ ┃ ┃ ┃
+┃ ┃ ┃ ┃
+â”—â”â”â”â”â”â” eeschema DSO â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”› â”—â”â”â”â”â”â” pcbnew DSO â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”›
+
+</pre>
+
+*/
+
+
+#include <wx/event.h>
+#include <wx/dynlib.h>
+#include <import_export.h>
+#include <search_stack.h>
+#include <project.h>
+#include <frame_type.h>
+#include <mail_type.h>
+
+
+#define VTBL_ENTRY virtual
+
+#define KIFACE_VERSION 1
+#define KIFACE_GETTER KIFACE_1
+
+// The KIFACE acquistion function is declared extern "C" so its name should not
+// be mangled.
+#define KIFACE_INSTANCE_NAME_AND_VERSION "KIFACE_1"
+
+#if defined(__linux__) || defined(__FreeBSD__)
+ #define LIB_ENV_VAR wxT( "LD_LIBRARY_PATH" )
+#elif defined(__WXMAC__)
+ #define LIB_ENV_VAR wxT( "DYLD_LIBRARY_PATH" )
+#elif defined(__MINGW32__)
+ #define LIB_ENV_VAR wxT( "PATH" )
+#endif
+
+
+class wxConfigBase;
+class wxWindow;
+class wxConfigBase;
+class PGM_BASE;
+class KIWAY;
+class KIWAY_PLAYER;
+
+
+/**
+ * Class KIFACE
+ * is used by a participant in the KIWAY alchemy. KIWAY is a minimalistic
+ * software bus for communications between various DLLs/DSOs (DSOs) within the same
+ * KiCad process. It makes it possible to call between DSOs without having to link
+ * them together. Most all calls are via virtual functions which means C++ vtables
+ * are used to hold function pointers and eliminate the need to link to specific
+ * object code libraries. There is one KIWAY in the launching portion of the process
+ * for each open KiCad project. Each project has its own KIWAY. Within a KIWAY
+ * is an actual PROJECT data structure. A KIWAY also facilitates communicating
+ * between DSOs on the topic of the project in question.
+ */
+struct KIFACE
+{
+ // The order of functions establishes the vtable sequence, do not change the
+ // order of functions in this listing unless you recompile all clients of
+ // this interface.
+
+#define KFCTL_STANDALONE (1<<0) ///< Am running as a standalone Top.
+#define KFCTL_CPP_PROJECT_SUITE (1<<1) ///< Am running under C++ project mgr, possibly with others
+#define KFCTL_PY_PROJECT_SUITE (1<<2) ///< Am running under python project mgr, possibly with others
+
+
+ /**
+ * Function OnKifaceStart
+ * is called just once shortly after the DSO is loaded. It is the second
+ * function called, immediately after the KIFACE_GETTER(). However before
+ * either of those, static C++ constructors are called. The DSO implementation
+ * should do process level initialization here, not project specific since there
+ * will be multiple projects open eventually.
+ *
+ * @param aProgram is the process block: PGM_BASE*
+ *
+ * @param aCtlBits consists of bit flags from the set of KFCTL_* \#defines above.
+ *
+ * @return bool - true if DSO initialized OK, false if not. When returning
+ * false, the loader may optionally decide to terminate the process or not,
+ * but will not put out any UI because that is the duty of this function to say
+ * why it is returning false. Never return false without having reported
+ * to the UI why.
+ */
+ VTBL_ENTRY bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) = 0;
+
+ /**
+ * Function OnKifaceEnd
+ * is called just once just before the DSO is to be unloaded. It is called
+ * before static C++ destructors are called. A default implementation is supplied.
+ */
+ VTBL_ENTRY void OnKifaceEnd() = 0;
+
+ /**
+ * Function CreateWindow
+ * creates a wxWindow for the current project. The caller
+ * must cast the return value into the known type.
+ *
+ * @param aParent may be NULL, or is otherwise the parent to connect under. If NULL
+ * then caller may want to connect the returned wxWindow into some hierarchy after
+ * this function returns.
+ *
+ * @param aClassId identifies which wxFrame or wxDialog to retrieve, using a value
+ * known to the implementing KIFACE.
+ *
+ * @param aKIWAY tells the window which KIWAY (and PROJECT) it is a participant in.
+ *
+ * @param aCtlBits consists of bit flags from the set of KFCTL_* \#defines above.
+ *
+ * @return wxWindow* - and if not NULL, should be cast into the known type using
+ * and old school cast. dynamic_cast is problematic since it needs typeinfo probably
+ * not contained in the caller's link image.
+ */
+ VTBL_ENTRY wxWindow* CreateWindow( wxWindow* aParent, int aClassId,
+ KIWAY* aKIWAY, int aCtlBits = 0 ) = 0;
+
+ /**
+ * Function IfaceOrAddress
+ * returns a pointer to the requested object. The safest way to use this
+ * is to retrieve a pointer to a static instance of an interface, similar to
+ * how the KIFACE interface is exported. But if you know what you are doing
+ * use it to retrieve anything you want. Segfaults are your fault.
+ *
+ * @param aDataId identifies which object you want the address of, and consists
+ * of choices known in advance by the implementing KIFACE.
+ *
+ * @return void* - and must be cast into the known type.
+ */
+ VTBL_ENTRY void* IfaceOrAddress( int aDataId ) = 0;
+};
+
+
+/**
+ * Class KIWAY
+ * is a minimalistic software bus for communications between various
+ * DLLs/DSOs (DSOs) within the same KiCad process. It makes it possible
+ * to call between DSOs without having to link them together, and without
+ * having to link to the top process module which houses the KIWAY(s). More importantly
+ * it makes it possible to send custom wxEvents between DSOs and from the top
+ * process module down into the DSOs. The latter capability is thought useful
+ * for driving the lower DSOs from a python test rig or for demo (automation) purposes.
+ * <p>
+ * Most all calls are via virtual functions, which means C++ vtables
+ * are used to hold function pointers and eliminate the need to link to specific
+ * object code libraries, speeding development and encouraging clearly defined
+ * interface design. Unlike Microsoft COM, which is a multi-vendor design supporting
+ * DLL's built at various points in time, the KIWAY alchemy is single project, with
+ * all components being built at the same time. So one should expect solid compatibility
+ * between all KiCad components, as long at they are compiled at the same time.
+ * <p>
+ * There is one KIWAY in the launching portion of the process
+ * for each open KiCad project. Each project has its own KIWAY. Available to
+ * each KIWAY is an actual PROJECT data structure. If you have a KIWAY, you
+ * can get to the PROJECT using KIWAY::Prj().
+ * <p>
+ * In summary, a KIWAY facilitates communicating between DSOs, where the topic
+ * of the communication is project specific. Here a "project" means a BOARD
+ * and a SCHEMATIC and a NETLIST, (anything relating to production of a single BOARD
+ * and added to class PROJECT.)
+ */
+class KIWAY : public wxEvtHandler
+{
+ friend struct PGM_SINGLE_TOP; // can use set_kiface()
+
+public:
+ /// Known KIFACE implementations
+ enum FACE_T
+ {
+ FACE_SCH, ///< eeschema DSO
+ FACE_PCB, ///< pcbnew DSO
+ FACE_CVPCB,
+ FACE_GERBVIEW,
+ FACE_PL_EDITOR,
+ FACE_PCB_CALCULATOR,
+ FACE_BMP2CMP,
+
+ KIWAY_FACE_COUNT
+ };
+
+ /**
+ * Function KifaceType
+ * is a simple mapping function which returns the FACE_T which is known to
+ * implement @a aFrameType.
+ *
+ * @return KIWAY::FACE_T - a valid value or FACE_T(-1) if given a bad aFrameType.
+ */
+ static FACE_T KifaceType( FRAME_T aFrameType );
+
+
+ // If you change the vtable, recompile all of KiCad.
+
+ /**
+ * Function KiFACE
+ * returns the KIFACE* given a FACE_T. If it is not already loaded, the
+ * KIFACE is loaded and initialized with a call to KIFACE::OnKifaceStart()
+ */
+ VTBL_ENTRY KIFACE* KiFACE( FACE_T aFaceId, bool doLoad = true );
+
+ /**
+ * Function Player
+ * returns the KIWAY_PLAYER* given a FRAME_T. If it is not already created,
+ * the required KIFACE is found and loaded and initialized if necessary, then
+ * the KIWAY_PLAYER window is created but not shown. Caller must Show() it.
+ * If it is already created, then the existing KIWAY_PLAYER* pointer is returned.
+ *
+ * @param aFrameType is from enum #FRAME_T.
+ * @param doCreate when true asks that the player be created if it is not
+ * already created, false means do not create and maybe return NULL.
+ *
+ * @return KIWAY_PLAYER* - a valid opened KIWAY_PLAYER or NULL if there
+ * is something wrong or doCreate was false and the player has yet to be created.
+ */
+ VTBL_ENTRY KIWAY_PLAYER* Player( FRAME_T aFrameType, bool doCreate = true );
+
+ /**
+ * Function PlayerClose
+ * calls the KIWAY_PLAYER::Close( bool force ) function on the window and
+ * if not vetoed, returns true, else false. If window actually closes, then
+ * this KIWAY marks it as not opened internally.
+ *
+ * @return bool - true the window is closed and not vetoed, else false.
+ */
+ VTBL_ENTRY bool PlayerClose( FRAME_T aFrameType, bool doForce );
+
+ /**
+ * Function PlayersClose
+ * calls the KIWAY_PLAYER::Close( bool force ) function on all the windows and
+ * if none are vetoed, returns true, else false. If any window actually closes, then
+ * this KIWAY marks it as not opened internally.
+ *
+ * @return bool - true indicates that all windows closed because none were vetoed,
+ * false means at least one cast a veto. Any that cast a veto are still open.
+ */
+ VTBL_ENTRY bool PlayersClose( bool doForce );
+
+ /**
+ * Function ExpressMail
+ * send aPayload to aDestination from aSource. Recipient receives this in its
+ * KIWAY_PLAYER::KiwayMailIn() function and can efficiently switch() based on
+ * aCommand in there.
+ */
+ VTBL_ENTRY void ExpressMail( FRAME_T aDestination, MAIL_T aCommand,
+ const std::string& aPayload, wxWindow* aSource = NULL );
+
+ /**
+ * Function Prj
+ * returns the PROJECT associated with this KIWAY. This is here as an
+ * accessor, so that there is freedom to put the actual PROJECT storage
+ * in a place decided by the implementation, and not known to the caller.
+ */
+ VTBL_ENTRY PROJECT& Prj() const;
+
+ /**
+ * Function SetLanguage
+ * changes the language and then calls ShowChangedLanguage() on all KIWAY_PLAYERs.
+ */
+ VTBL_ENTRY void SetLanguage( int aLanguage );
+
+ KIWAY( PGM_BASE* aProgram, int aCtlBits, wxFrame* aTop = NULL );
+
+ /**
+ * Function SetTop
+ * tells this KIWAY about the top most frame in the program and optionally
+ * allows it to play the role of one of the KIWAY_PLAYERs if launched from
+ * single_top.cpp.
+ *
+ * @param aTop is the top most wxFrame in the entire program.
+ */
+ void SetTop( wxFrame* aTop );
+
+ void OnKiwayEnd();
+
+ bool ProcessEvent( wxEvent& aEvent ); // overload virtual
+
+private:
+
+ /// Get the full path & name of the DSO holding the requested FACE_T.
+ static const wxString dso_full_path( FACE_T aFaceId );
+
+ /// hooked into m_top in SetTop(), marks child frame as closed.
+ void player_destroy_handler( wxWindowDestroyEvent& event );
+
+ bool set_kiface( FACE_T aFaceType, KIFACE* aKiface )
+ {
+ if( unsigned( aFaceType ) < unsigned( KIWAY_FACE_COUNT ) )
+ {
+ m_kiface[aFaceType] = aKiface;
+ return true;
+ }
+ return false;
+ }
+
+ static KIFACE* m_kiface[KIWAY_FACE_COUNT];
+ static int m_kiface_version[KIWAY_FACE_COUNT];
+
+ PGM_BASE* m_program;
+ int m_ctl;
+ wxFrame* m_top;
+
+ KIWAY_PLAYER* m_player[KIWAY_PLAYER_COUNT]; // from frame_type.h
+
+ PROJECT m_project; // do not assume this is here, use Prj().
+};
+
+
+/*
+/// Given aProject, return its KIWAY*
+inline KIWAY* PrjToKiway( PROJECT* aProject )
+{
+ // It's ugly, but isolated. The compiler should simply do what's
+ // it's told to do here and shut up.
+ KIWAY* p = 0;
+ ptrdiff_t offset = (char*) &p->m_project - (char*) p;
+
+ return (KIWAY*) ((char*)aProject - offset);
+}
+*/
+
+extern KIWAY Kiway; // provided by single_top.cpp and kicad.cpp
+
+
+/**
+ * Function Pointer KIFACE_GETTER_FUNC
+ * points to the one and only KIFACE export. The export's address
+ * is looked up via symbolic string and should be extern "C" to avoid name
+ * mangling. This function will only be called one time. The DSO itself however
+ * may be asked to support multiple Top windows, i.e. multiple projects
+ * within its lifetime.
+ *
+ * @param aKIFACEversion is where to put the API version implemented by the KIFACE.
+ * @param aKIWAYversion tells the KIFACE what KIWAY version will be available.
+ * @param aProgram is a pointer to the PGM_BASE for this process.
+ * @return KIFACE* - unconditionally, cannot fail.
+ */
+typedef KIFACE* KIFACE_GETTER_FUNC( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram );
+
+/// No name mangling. Each KIFACE (DSO/DLL) will implement this once.
+extern "C" KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram );
+
+
+#endif // KIWAY_H_
diff --git a/include/kiway_express.h b/include/kiway_express.h
new file mode 100644
index 0000000..cebc9df
--- /dev/null
+++ b/include/kiway_express.h
@@ -0,0 +1,105 @@
+#ifndef KIWAY_EXPRESS_H_
+#define KIWAY_EXPRESS_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+// @see http://wiki.wxwidgets.org/Custom_Events_Tutorial
+
+#include <wx/wx.h>
+#include <frame_type.h>
+#include <mail_type.h>
+
+
+/**
+ * Class KIWAY_EXPRESS
+ * carries a payload from one KIWAY_PLAYER to another within a PROJECT.
+ */
+class KIWAY_EXPRESS : public wxEvent
+{
+public:
+ /**
+ * Function Dest
+ * returns the destination player id of the message.
+ */
+ FRAME_T Dest() { return m_destination; }
+
+ /**
+ * Function Command
+ * returns the MAIL_T associated with this mail.
+ */
+ MAIL_T Command()
+ {
+ return (MAIL_T) GetId(); // re-purposed control id.
+ }
+
+ /**
+ * Function Payload
+ * returns the payload, which can be any text but it typicall self
+ * identifying s-expression.
+ */
+ const std::string& GetPayload() { return m_payload; }
+ void SetPayload( const std::string& aPayload ) { m_payload = aPayload; }
+
+ KIWAY_EXPRESS* Clone() const { return new KIWAY_EXPRESS( *this ); }
+
+ //KIWAY_EXPRESS() {}
+
+ KIWAY_EXPRESS( FRAME_T aDestination,
+ MAIL_T aCommand,
+ const std::string& aPayload,
+ wxWindow* aSource = NULL );
+
+ KIWAY_EXPRESS( const KIWAY_EXPRESS& anOther );
+
+ /// The wxEventType argument to wxEvent() and identifies an event class
+ /// in a hurry. These wxEventTypes also allow a common class to be used
+ /// multiple ways. Should be allocated at startup by wxNewEventType();
+ static const wxEventType wxEVENT_ID;
+
+ //DECLARE_DYNAMIC_CLASS( KIWAY_EXPRESS )
+
+private:
+ FRAME_T m_destination; ///< could have been a bitmap indicating multiple recipients
+ std::string m_payload; ///< very often s-expression text, but not always
+
+ // possible new ideas here.
+};
+
+
+typedef void ( wxEvtHandler::*kiwayExpressFunction )( KIWAY_EXPRESS& );
+
+#define wxKiwayExressHandler(func) \
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(kiwayExpressFunction, &func)
+
+
+#define EVT_KIWAY_EXPRESS( func ) \
+ DECLARE_EVENT_TABLE_ENTRY( \
+ KIWAY_EXPRESS::wxEVENT_ID, -1, -1, \
+ (wxObjectEventFunction) \
+ (kiwayExpressFunction) & func, \
+ (wxObject*) NULL ),
+
+
+#endif // KIWAY_EXPRESS_H_
+
diff --git a/include/kiway_mgr.h b/include/kiway_mgr.h
new file mode 100644
index 0000000..4dde97c
--- /dev/null
+++ b/include/kiway_mgr.h
@@ -0,0 +1,68 @@
+
+#ifndef KIWAY_MGR_H_
+#define KIWAY_MGR_H_
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <kiway.h>
+#include <boost/ptr_container/ptr_vector.hpp>
+
+
+/**
+ * Class KIWAY_MGR
+ * is a container for all KIWAYS [and PROJECTS]. This class needs to work both
+ * for a C++ project manager and an a wxPython one (after being moved into a
+ * header later).
+ */
+class KIWAY_MGR
+{
+public:
+ //KIWAY_MGR();
+ // ~KIWAY_MGR();
+
+ bool OnStart( wxApp* aProcess );
+
+ void OnEnd();
+
+ KIWAY& operator[]( int aIndex )
+ {
+ wxASSERT( m_kiways.size() ); // stuffed in OnStart()
+ return m_kiways[aIndex];
+ }
+
+private:
+
+ // KIWAYs may not be moved once doled out, since window DNA depends on the
+ // pointer being good forever.
+ // boost_ptr::vector however never moves the object pointed to.
+ typedef boost::ptr_vector<KIWAY> KIWAYS;
+
+ KIWAYS m_kiways;
+};
+
+extern KIWAY_MGR Kiways;
+
+#endif // KIWAY_MGR_H_
diff --git a/include/kiway_player.h b/include/kiway_player.h
new file mode 100644
index 0000000..7b63bd3
--- /dev/null
+++ b/include/kiway_player.h
@@ -0,0 +1,309 @@
+#ifndef KIWAY_PLAYER_H_
+#define KIWAY_PLAYER_H_
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/frame.h>
+#include <vector>
+#include <wxstruct.h>
+
+
+class KIWAY;
+class PROJECT;
+struct KIFACE;
+class KIFACE_I;
+
+#define VTBL_ENTRY virtual
+
+
+/**
+ * Class KIWAY_HOLDER
+ * is a mix in class which holds the location of a wxWindow's KIWAY. It allows
+ * calls to Kiway() and SetKiway().
+ *
+ * Known to be used in at least DIALOG_SHIM and KIWAY_PLAYER classes.
+ */
+class KIWAY_HOLDER
+{
+public:
+ KIWAY_HOLDER( KIWAY* aKiway ) :
+ m_kiway( aKiway )
+ {}
+
+ /**
+ * Function Kiway
+ * returns a reference to the KIWAY that this object has an opportunity
+ * to participate in. A KIWAY_HOLDER is not necessarily a KIWAY_PLAYER.
+ */
+ KIWAY& Kiway() const
+ {
+ wxASSERT( m_kiway ); // smoke out bugs in Debug build, then Release runs fine.
+ return *m_kiway;
+ }
+
+ /**
+ * Function Prj
+ * returns a reference to the PROJECT "associated with" this KIWAY.
+ */
+ PROJECT& Prj() const;
+
+ /**
+ * Function SetKiway
+ *
+ * @param aDest is the recipient of aKiway pointer.
+ * It is only used for debugging, since "this" is not a wxWindow*. "this" is
+ * a KIWAY_HOLDER mix-in.
+ *
+ * @param aKiway is often from a parent window, or from KIFACE::CreateWindow().
+ */
+ void SetKiway( wxWindow* aDest, KIWAY* aKiway );
+
+private:
+ // private, all setting is done through SetKiway().
+ KIWAY* m_kiway; // no ownership.
+};
+
+
+class KIWAY_EXPRESS;
+
+#define WX_EVENT_LOOP wxGUIEventLoop
+
+
+class WX_EVENT_LOOP;
+
+
+/**
+ * Class KIWAY_PLAYER
+ * is a wxFrame capable of the OpenProjectFiles function, meaning it can load
+ * a portion of a KiCad project. Because this class provides a dummy implementation,
+ * it is not a certainty that all classes which inherit from this clas intend to
+ * participate in a KIWAY. Those that do must actually interact with the provided
+ * KIWAY*.
+ * <p>
+ * EDA_BASE_FRAME would not have sufficed because BM2CMP_FRAME_BASE is not
+ * derived from it.
+ */
+class KIWAY_PLAYER : public EDA_BASE_FRAME, public KIWAY_HOLDER
+{
+public:
+ KIWAY_PLAYER( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
+ const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString& aWdoName = wxFrameNameStr );
+
+ /// Don't use this one, only wxformbuilder uses it, and it must be augmented with
+ /// a SetKiway() early in derived constructor.
+ KIWAY_PLAYER( wxWindow* aParent, wxWindowID aId, const wxString& aTitle,
+ const wxPoint& aPos, const wxSize& aSize, long aStyle,
+ const wxString& aWdoName = wxFrameNameStr );
+
+ ~KIWAY_PLAYER();
+
+ //----<Cross Module API>-----------------------------------------------------
+
+ // For the aCtl argument of OpenProjectFiles()
+#define KICTL_EAGLE_BRD (1<<0) ///< chosen *.brd file is Eagle according to user.
+#define KICTL_CREATE (1<<1) ///< caller thinks requested project files may not exist
+
+ /**
+ * Function OpenProjectFiles
+ * is abstract, and opens a project or set of files given by @a aFileList.
+ * This is generalized in the direction of worst case. In a typical case
+ * @a aFileList will only hold a single file, like "myboard.kicad_pcb",
+ * because any KIWAY_PLAYER is only in one KIWAY and the KIWAY owns the
+ * PROJECT. Therefore opening files from multiple projects into the same
+ * KIWAY_PLAYER is precluded.
+ * <p>
+ * Each derived class should handle this in a way specific to its needs.
+ * No filename prompting is done inside here for any file or project. There should
+ * be no need to call this with aFileList which is empty. However, calling it with
+ * a single filename which does not exist should indicate to the implementor
+ * that a new session is being started and that the given name is the desired
+ * name for the data file at time of save.
+ * <p>
+ * This function does not support "appending". Use a different function for that.
+ * Any prior project data tree should be cleared before loading the new stuff.
+ * <p>
+ * Therefore, one of the first things an implementation should do is test for
+ * existence of the first file in the list, and if it does not exist, treat
+ * it as a new session, possibly with a UI notification to that effect.
+ * <p>
+ * After loading the window should update its Title as part of this operation.
+ * If the KIWAY_PLAYER needs to, it can load the *.pro file as part of this operation.
+ * <p>
+ * If the KIWAY_PLAYER cannot load any of the file(s) in the list, then it
+ * should say why through some GUI interface, and return false.
+ *
+ * @param aFileList includes files that this frame should open
+ * according to the knowledge in the derived wxFrame. In almost every case,
+ * the list will have only a single file in it.
+ *
+ * @param aCtl is a set of bit flags ORed together from the set of KICTL_* \#defined above.
+ *
+ * @return bool - true if all requested files were opened OK, else false.
+ */
+ VTBL_ENTRY bool OpenProjectFiles( const std::vector<wxString>& aFileList, int aCtl = 0 )
+ {
+ // overload me for your wxFrame type.
+
+ // Any overload should probably do this also:
+ // Prj().MaybeLoadProjectSettings();
+
+ // Then update the window title.
+
+ return false;
+ }
+
+ /**
+ * Function ShowModal
+ * puts up this wxFrame as if it were a modal dialog, with all other instantiated
+ * wxFrames disabled until this KIWAY_PLAYER derivative calls DismissModal().
+ * That is, behavior is similar to a modal dialog window. Not all KIWAY_PLAYERs
+ * use this interface, so don't call this unless the implementation knows how
+ * to call DismissModal() on a button click or double click or some special
+ * event which ends the modal behavior.
+ *
+ * @param aResult if not NULL, indicates a place to put a resultant string.
+ * @param aResultantFocusWindow if not NULL, indicates what window to pass focus to on return.
+ *
+ * @return bool - true if frame implementation called KIWAY_PLAYER::DismissModal()
+ * with aRetVal of true.
+ */
+ VTBL_ENTRY bool ShowModal( wxString* aResult = NULL, wxWindow* aResultantFocusWindow = NULL );
+
+ //----</Cross Module API>----------------------------------------------------
+
+
+ /**
+ * Function KiwayMailIn
+ * receives KIWAY_EXPRESS messages from other players. Merely override it
+ * in derived classes.
+ */
+ virtual void KiwayMailIn( KIWAY_EXPRESS& aEvent );
+
+ /**
+ * Our version of Destroy() which is virtual from wxWidgets
+ */
+ bool Destroy();
+
+protected:
+
+ bool IsModal() { return m_modal; }
+ void SetModal( bool IsModal ) { m_modal = IsModal; }
+
+ /**
+ * Function IsDismissed
+ * returns false only if both the frame is acting in modal mode and it has not been
+ * dismissed yet with DismissModal(). IOW, it will return true if the dialog is
+ * not modal or if it is modal and has been dismissed.
+ */
+ bool IsDismissed();
+
+ void DismissModal( bool aRetVal, const wxString& aResult = wxEmptyString );
+
+ /// event handler, routes to derivative specific virtual KiwayMailIn()
+ void kiway_express( KIWAY_EXPRESS& aEvent );
+
+ /**
+ * Function language_change
+ * is an event handler called on a language menu selection.
+ */
+ void language_change( wxCommandEvent& event );
+
+ // variables for modal behavior support, only used by a few derivatives.
+ bool m_modal; // true if frame is intended to be modal, not modeless
+ WX_EVENT_LOOP* m_modal_loop; // points to nested event_loop, NULL means not modal and dismissed
+ wxWindow* m_modal_resultant_parent; // the window caller in modal mode
+ wxString m_modal_string;
+ bool m_modal_ret_val; // true if a selection was made
+
+ DECLARE_EVENT_TABLE()
+};
+
+
+// psuedo code for OpenProjectFiles
+#if 0
+
+bool OpenProjectFiles( const std::vector<wxString>& aFileList, int aCtl = 0 )
+{
+ if( aFileList.size() != 1 )
+ {
+ complain via UI.
+ return false
+ }
+
+ assert( aFileList[0] is absolute ) // bug in single_top.cpp or project manager.
+
+ if( !Pgm().LockFile( fullFileName ) )
+ {
+ DisplayError( this, _( "This file is already open." ) );
+ return false;
+ }
+
+ if current open project files have been modified
+ {
+ ask if user wants to save them and if yes save.
+ }
+
+ unload any currently open project files.
+
+ Prj().SetProjectFullName( )
+
+ if( aFileList[0] does not exist )
+ {
+ notify user file does not exist and ask if he wants to create it
+ if( yes )
+ {
+ create empty project file(s)
+ mark file as modified.
+
+ use the default project config file.
+ }
+ else
+ return false
+ }
+ else
+ {
+ load aFileList[0]
+
+ use the project config file for project given by aFileList[0]s full path.
+ }
+
+ UpdateFileHistory( g_RootSheet->GetScreen()->GetFileName() );
+
+ /* done in ReDraw typically:
+ UpdateTitle();
+ */
+
+ show contents.
+}
+
+
+
+#endif
+
+
+
+
+#endif // KIWAY_PLAYER_H_
diff --git a/include/layers_id_colors_and_visibility.h b/include/layers_id_colors_and_visibility.h
new file mode 100644
index 0000000..b424aea
--- /dev/null
+++ b/include/layers_id_colors_and_visibility.h
@@ -0,0 +1,678 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file layers_id_colors_and_visibility.h
+ * @brief Board layer functions and definitions.
+ */
+
+#ifndef LAYERS_ID_AND_VISIBILITY_H_
+#define LAYERS_ID_AND_VISIBILITY_H_
+
+#include <vector>
+#include <bitset>
+#include <wx/string.h>
+#include <macros.h>
+
+class BOARD;
+
+
+/**
+ * Type LAYER_NUM
+ * can be replaced with int and removed. Until then, it is something you can increment,
+ * and its meaning is only advisory but can extend beyond PCB layers into view layers
+ * and gerber layers.
+ */
+typedef int LAYER_NUM;
+
+
+/**
+ * Enum LAYER_ID
+ * is the set of PCB layers. It has nothing to do with gerbers or view layers.
+ * One of these cannot be "incremented".
+ */
+enum LAYER_ID
+#if __cplusplus >= 201103L
+ : unsigned char
+#endif
+{
+ F_Cu, // 0
+ In1_Cu,
+ In2_Cu,
+ In3_Cu,
+ In4_Cu,
+ In5_Cu,
+ In6_Cu,
+ In7_Cu,
+ In8_Cu,
+ In9_Cu,
+ In10_Cu,
+ In11_Cu,
+ In12_Cu,
+ In13_Cu,
+ In14_Cu,
+ In15_Cu,
+ In16_Cu,
+ In17_Cu,
+ In18_Cu,
+ In19_Cu,
+ In20_Cu,
+ In21_Cu,
+ In22_Cu,
+ In23_Cu,
+ In24_Cu,
+ In25_Cu,
+ In26_Cu,
+ In27_Cu,
+ In28_Cu,
+ In29_Cu,
+ In30_Cu,
+ B_Cu, // 31
+
+ B_Adhes,
+ F_Adhes,
+
+ B_Paste,
+ F_Paste,
+
+ B_SilkS,
+ F_SilkS,
+
+ B_Mask,
+ F_Mask,
+
+ Dwgs_User,
+ Cmts_User,
+ Eco1_User,
+ Eco2_User,
+ Edge_Cuts,
+ Margin,
+
+ B_CrtYd,
+ F_CrtYd,
+
+ B_Fab,
+ F_Fab,
+
+ LAYER_ID_COUNT
+};
+
+
+#define UNDEFINED_LAYER LAYER_ID(-1)
+#define UNSELECTED_LAYER LAYER_ID(-2)
+
+#define MAX_CU_LAYERS (B_Cu - F_Cu + 1)
+
+/// A sequence of layers, a sequence provides a certain order.
+typedef std::vector<LAYER_ID> BASE_SEQ;
+
+
+/**
+ * Class LSEQ
+ * is a sequence (and therefore also a set) of LAYER_IDs. A sequence provides
+ * a certain order.
+ * <p>
+ * It can also be used as an iterator:
+ * <code>
+ *
+ * for( LSEQ cu_stack = aSet.CuStack(); cu_stack; ++cu_stack )
+ * {
+ * layer_id = *cu_stack;
+ * :
+ * things to do with layer_id;
+ * }
+ *
+ * </code>
+ */
+class LSEQ : public BASE_SEQ
+{
+ unsigned m_index;
+
+public:
+
+ LSEQ() :
+ m_index( 0 )
+ {}
+
+ template <class InputIterator>
+ LSEQ( InputIterator start, InputIterator end ) :
+ BASE_SEQ( start, end ),
+ m_index( 0 )
+ {}
+
+ void Rewind() { m_index = 0; }
+
+ void operator ++ () { ++m_index; } // returns nothing, used in simple statements only.
+
+ void operator ++ (int) { ++m_index; }
+
+ operator bool () { return m_index < size(); }
+
+ LAYER_ID operator * () const
+ {
+ return at( m_index ); // throws std::out_of_range
+ }
+};
+
+
+typedef std::bitset<LAYER_ID_COUNT> BASE_SET;
+
+
+/**
+ * Class LSET
+ * is a set of LAYER_IDs. It can be converted to numerous purpose LSEQs using
+ * the various member functions, most of which are based on Seq(). The advantage
+ * of converting to LSEQ using purposeful code, is it removes any dependency
+ * on order/sequence inherent in this set.
+ */
+class LSET : public BASE_SET
+{
+public:
+
+ // The constructor flavors are carefully chosen to prevent LSET( int ) from compiling.
+ // That excludes "LSET s = 0;" and excludes "LSET s = -1;", etc.
+ // LSET s = 0; needs to be removed from the code, this accomplishes that.
+ // Remember LSET( LAYER_ID(0) ) sets bit 0, so "LSET s = 0;" is illegal
+ // to prevent that surprize. Therefore LSET's constructor suite is significantly
+ // different than the base class from which it is derived.
+
+ // Other member functions (non-constructor functions) are identical to the base
+ // class's and therefore are re-used from the base class.
+
+ /**
+ * Constructor LSET()
+ * creates an empty (cleared) set.
+ */
+ LSET() :
+ BASE_SET() // all bits are set to zero in BASE_SET()
+ {
+ }
+
+ LSET( const BASE_SET& aOther ) :
+ BASE_SET( aOther )
+ {
+ }
+
+ /**
+ * Constructor LSET( LAYER_ID )
+ * takes a LAYER_ID and sets that bit. This makes the following code into
+ * a bug:
+ *
+ * <code> LSET s = 0; </code>
+ *
+ * Instead use:
+ *
+ * <code>
+ * LSET s;
+ * </code>
+ *
+ * for an empty set.
+ */
+ LSET( LAYER_ID aLayer ) : // LAYER_ID deliberately exludes int and relatives
+ BASE_SET()
+ {
+ set( aLayer );
+ }
+
+ /**
+ * Constructor LSET( const LAYER_ID* aArray, unsigned aCount )
+ * works well with an arry or LSEQ.
+ */
+ LSET( const LAYER_ID* aArray, unsigned aCount );
+
+ /**
+ * Constructor LSET( unsigned, LAYER_ID, ...)
+ * takes one or more LAYER_IDs in the argument list to construct
+ * the set. Typically only used in static construction.
+ *
+ * @param aIdCount is the number of LAYER_IDs which follow.
+ * @param aFirst is the first included in @a aIdCount and must always be present, and can
+ * be followed by any number of additional LAYER_IDs so long as @a aIdCount accurately
+ * reflects the count.
+ */
+ LSET( unsigned aIdCount, LAYER_ID aFirst, ... ); // args chosen to prevent LSET( int ) from compiling
+
+ /**
+ * Function Name
+ * returns the fixed name association with aLayerId.
+ */
+ static const wxChar* Name( LAYER_ID aLayerId );
+
+ /**
+ * Function InternalCuMask()
+ * returns a complete set of internal copper layers, which is all Cu layers
+ * except F_Cu and B_Cu.
+ */
+ static LSET InternalCuMask();
+
+ /**
+ * Function AllCuMask
+ * returns a mask holding the requested number of Cu LAYER_IDs.
+ */
+ static LSET AllCuMask( int aCuLayerCount = MAX_CU_LAYERS );
+
+ /**
+ * Function AllNonCuMask
+ * returns a mask holding all layer minus CU layers.
+ */
+ static LSET AllNonCuMask();
+
+ static LSET AllLayersMask();
+
+ /**
+ * Function FrontTechMask
+ * returns a mask holding all technical layers (no CU layer) on front side.
+ */
+ static LSET FrontTechMask();
+
+ /**
+ * Function BackTechMask
+ * returns a mask holding all technical layers (no CU layer) on back side.
+ */
+ static LSET BackTechMask();
+ static LSET AllTechMask();
+
+ /**
+ * Function FrontMask
+ * returns a mask holding all technical layers and the external CU layer on front side.
+ */
+ static LSET FrontMask();
+
+ /**
+ * Function BackMask
+ * returns a mask holding all technical layers and the external CU layer on back side.
+ */
+ static LSET BackMask();
+
+ static LSET UserMask();
+
+
+ /**
+ * Function CuStack
+ * returns a sequence of copper layers in starting from the front/top
+ * and extending to the back/bottom. This specific sequence is depended upon
+ * in numerous places.
+ */
+ LSEQ CuStack() const;
+
+ /**
+ * Function Technicals
+ * returns a sequence of technical layers. A sequence provides a certain
+ * order.
+ * @param aSubToOmit is the subset of the techical layers to omit, defaults to none.
+ */
+ LSEQ Technicals( LSET aSubToOmit = LSET() ) const;
+
+ /// *_User layers.
+ LSEQ Users() const;
+
+ LSEQ UIOrder() const;
+
+ /**
+ * Function Seq
+ * returns an LSEQ from the union of this LSET and a desired sequence. The LSEQ
+ * element will be in the same sequence as aWishListSequence if they are present.
+ * @param aWishListSequence establishes the order of the returned LSEQ, and the LSEQ will only
+ * contiain LAYER_IDs which are present in this set.
+ * @param aCount is the length of aWishListSequence array.
+ */
+ LSEQ Seq( const LAYER_ID* aWishListSequence, unsigned aCount ) const;
+
+ /**
+ * Function Seq
+ * returns a LSEQ from this LSET in ascending LAYER_ID order. Each LSEQ
+ * element will be in the same sequence as in LAYER_ID and only present
+ * in the resultant LSEQ if present in this set. Therefore the sequence is
+ * subject to change, use it only when enumeration and not order is important.
+ */
+ LSEQ Seq() const;
+
+ /**
+ * Function SeqStackBottom2Top
+ * returns the sequence that is typical for a bottom-to-top stack-up.
+ * For instance, to plot multiple layers in a single image, the top layers output last.
+ */
+ LSEQ SeqStackupBottom2Top() const;
+
+ /**
+ * Function FmtHex
+ * returns a hex string showing contents of this LSEQ.
+ */
+ std::string FmtHex() const;
+
+ /**
+ * Function ParseHex
+ * understands the output of FmtHex() and replaces this set's values
+ * with those given in the input string. Parsing stops at the first
+ * non hex ASCII byte, except that marker bytes output from FmtHex are
+ * not terminators.
+ * @return int - number of bytes consumed
+ */
+ int ParseHex( const char* aStart, int aCount );
+
+ /**
+ * Function FmtBin
+ * returns a binary string showing contents of this LSEQ.
+ */
+ std::string FmtBin() const;
+
+ /**
+ * Find the first set LAYER_ID. Returns UNDEFINED_LAYER if more
+ * than one is set or UNSELECTED_LAYER if none is set.
+ */
+ LAYER_ID ExtractLayer() const;
+
+private:
+
+ /// Take this off the market, it may not be used because of LSET( LAYER_ID ).
+ LSET( unsigned long __val )
+ {
+ // not usable, it's private.
+ }
+};
+
+
+/**
+ * Enum PCB_VISIBLE
+ * is a set of visible PCB elements.
+ * @see BOARD::SetVisibleElementColor()
+ * @see BOARD::SetVisibleElement()
+ */
+enum PCB_VISIBLE
+{
+ VIAS_VISIBLE,
+ VIA_MICROVIA_VISIBLE,
+ VIA_BBLIND_VISIBLE,
+ VIA_THROUGH_VISIBLE,
+ NON_PLATED_VISIBLE,
+ MOD_TEXT_FR_VISIBLE,
+ MOD_TEXT_BK_VISIBLE,
+ MOD_TEXT_INVISIBLE, ///< text marked as invisible
+ ANCHOR_VISIBLE,
+ PAD_FR_VISIBLE,
+ PAD_BK_VISIBLE,
+ RATSNEST_VISIBLE,
+ GRID_VISIBLE,
+
+ // the rest of these do not currently support color changes:
+ NO_CONNECTS_VISIBLE, ///< show a marker on pads with no nets
+ MOD_FR_VISIBLE, ///< show modules on front
+ MOD_BK_VISIBLE, ///< show modules on back
+ MOD_VALUES_VISIBLE, ///< show modules values (when texts are visibles)
+ MOD_REFERENCES_VISIBLE, ///< show modules references (when texts are visibles)
+
+ TRACKS_VISIBLE,
+ PADS_VISIBLE, ///< multilayer pads, usually with holes
+ PADS_HOLES_VISIBLE,
+ VIAS_HOLES_VISIBLE,
+
+ DRC_VISIBLE, ///< drc markers
+ WORKSHEET, ///< worksheet frame
+ GP_OVERLAY, ///< general purpose overlay
+
+ END_PCB_VISIBLE_LIST // sentinel
+};
+
+// Some elements do not have yet a visibility control
+// from a dialog, but have a visibility control flag.
+// Here is a mask to set them visible, to be sure they are displayed
+// after loading a board for instance
+#define MIN_VISIBILITY_MASK int( (1 << TRACKS_VISIBLE) +\
+ (1 << PADS_VISIBLE) +\
+ (1 << PADS_HOLES_VISIBLE) +\
+ (1 << VIAS_HOLES_VISIBLE) +\
+ (1 << DRC_VISIBLE) +\
+ (1 << WORKSHEET) +\
+ (1 << GP_OVERLAY) )
+
+/**
+ * Enum NETNAMES_VISIBLE
+ * is a set of layers specific for displaying net names.
+ * Their visiblity is not supposed to be saved in a board file,
+ * they are only to be used by the GAL.
+ */
+#if 0
+// was:
+enum NETNAMES_VISIBLE
+{
+ LAYER_1_NETNAMES_VISIBLE, // bottom layer
+ LAYER_2_NETNAMES_VISIBLE,
+ LAYER_3_NETNAMES_VISIBLE,
+ LAYER_4_NETNAMES_VISIBLE,
+ LAYER_5_NETNAMES_VISIBLE,
+ LAYER_6_NETNAMES_VISIBLE,
+ LAYER_7_NETNAMES_VISIBLE,
+ LAYER_8_NETNAMES_VISIBLE,
+ LAYER_9_NETNAMES_VISIBLE,
+ LAYER_10_NETNAMES_VISIBLE,
+ LAYER_11_NETNAMES_VISIBLE,
+ LAYER_12_NETNAMES_VISIBLE,
+ LAYER_13_NETNAMES_VISIBLE,
+ LAYER_14_NETNAMES_VISIBLE,
+ LAYER_15_NETNAMES_VISIBLE,
+ LAYER_16_NETNAMES_VISIBLE, // top layer
+
+ PAD_FR_NETNAMES_VISIBLE,
+ PAD_BK_NETNAMES_VISIBLE,
+ PADS_NETNAMES_VISIBLE,
+
+ END_NETNAMES_VISIBLE_LIST // sentinel
+};
+#else
+enum NETNAMES_VISIBLE
+{
+ PAD_FR_NETNAMES_VISIBLE = B_Cu+1,
+ PAD_BK_NETNAMES_VISIBLE,
+ PADS_NETNAMES_VISIBLE,
+
+ END_NETNAMES_VISIBLE_LIST // sentinel
+};
+#endif
+
+
+/// macro for obtaining layer number for specific item (eg. pad or text)
+#define ITEM_GAL_LAYER(layer) (LAYER_ID_COUNT + layer)
+
+#define NETNAMES_GAL_LAYER(layer) (LAYER_ID_COUNT + END_PCB_VISIBLE_LIST + layer )
+
+/// number of *all* GAL layers including PCB and item layers
+#define TOTAL_LAYER_COUNT (LAYER_ID_COUNT + END_PCB_VISIBLE_LIST + END_NETNAMES_VISIBLE_LIST)
+
+/**
+ * Function IsValidLayer
+ * tests whether a given integer is a valid layer index, i.e. can
+ * be safely put in a LAYER_ID
+ * @param aLayerId = Layer index to test. It can be an int, so its
+ * useful during I/O
+ * @return true if aLayerIndex is a valid layer index
+ */
+inline bool IsValidLayer( LAYER_NUM aLayerId )
+{
+ return unsigned( aLayerId ) < LAYER_ID_COUNT;
+}
+
+/**
+ * Function IsPcbLayer
+ * tests whether a layer is a valid layer for pcbnew
+ * @param aLayer = Layer to test
+ * @return true if aLayer is a layer valid in pcbnew
+ */
+inline bool IsPcbLayer( LAYER_NUM aLayer )
+{
+ return aLayer >= F_Cu && aLayer < LAYER_ID_COUNT;
+}
+
+/**
+ * Function IsCopperLayer
+ * tests whether a layer is a copper layer
+ * @param aLayerId = Layer to test
+ * @return true if aLayer is a valid copper layer
+ */
+inline bool IsCopperLayer( LAYER_NUM aLayerId )
+{
+ return aLayerId >= F_Cu && aLayerId <= B_Cu;
+}
+
+/**
+ * Function IsNonCopperLayer
+ * tests whether a layer is a non copper layer
+ * @param aLayerId = Layer to test
+ * @return true if aLayer is a non copper layer
+ */
+inline bool IsNonCopperLayer( LAYER_NUM aLayerId )
+{
+ return aLayerId > B_Cu && aLayerId <= LAYER_ID_COUNT;
+}
+
+/**
+ * Function IsUserLayer
+ * tests whether a layer is a non copper and a non tech layer
+ * @param aLayerId = Layer to test
+ * @return true if aLayer is a user layer
+ */
+inline bool IsUserLayer( LAYER_ID aLayerId )
+{
+ return aLayerId >= Dwgs_User && aLayerId <= Eco2_User;
+}
+
+/* IMPORTANT: If a layer is not a front layer not necessarily is true
+ the converse. The same hold for a back layer.
+ So a layer can be:
+ - Front
+ - Back
+ - Neither (internal or auxiliary)
+
+ The check most frequent is for back layers, since it involves flips */
+
+
+/**
+ * Layer classification: check if it's a front layer
+ */
+inline bool IsFrontLayer( LAYER_ID aLayerId )
+{
+ switch( aLayerId )
+ {
+ case F_Cu:
+ case F_Adhes:
+ case F_Paste:
+ case F_SilkS:
+ case F_Mask:
+ case F_CrtYd:
+ case F_Fab:
+ return true;
+ default:
+ ;
+ }
+
+ return false;
+}
+
+
+/**
+ * Layer classification: check if it's a back layer
+ */
+inline bool IsBackLayer( LAYER_ID aLayerId )
+{
+ switch( aLayerId )
+ {
+ case B_Cu:
+ case B_Adhes:
+ case B_Paste:
+ case B_SilkS:
+ case B_Mask:
+ case B_CrtYd:
+ case B_Fab:
+ return true;
+ default:
+ ;
+ }
+
+ return false;
+}
+
+
+/**
+ * Function FlippedLayerNumber
+ * @return the layer number after flipping an item
+ * some (not all) layers: external copper, and paired layers( Mask, Paste, solder ... )
+ * are swapped between front and back sides
+ * internal layers are flipped only if the copper layers count is known
+ * @param aLayer = the LAYER_ID to flip
+ * @param aCopperLayersCount = the number of copper layers. if 0 (in fact if < 4 )
+ * internal layers will be not flipped because the layer count is not known
+ */
+LAYER_ID FlipLayer( LAYER_ID aLayerId, int aCopperLayersCount = 0 );
+
+/**
+ * Calculate the mask layer when flipping a footprint
+ * BACK and FRONT copper layers, mask, paste, solder layers are swapped
+ * internal layers are flipped only if the copper layers count is known
+ * @param aMask = the LSET to flip
+ * @param aCopperLayersCount = the number of copper layers. if 0 (in fact if < 4 )
+ * internal layers will be not flipped because the layer count is not known
+ */
+LSET FlipLayerMask( LSET aMask, int aCopperLayersCount = 0 );
+
+/**
+ * Return a string (to be shown to the user) describing a layer mask.
+ * Useful for showing where is a pad, track, entity, etc.
+ * The BOARD is needed because layer names are (somewhat) customizable
+ */
+wxString LayerMaskDescribe( const BOARD* aBoard, LSET aMask );
+
+/**
+ * Returns a netname layer corresponding to the given layer.
+ */
+inline int GetNetnameLayer( int aLayer )
+{
+ if( IsCopperLayer( aLayer ) )
+ return NETNAMES_GAL_LAYER( aLayer );
+ else if( aLayer == ITEM_GAL_LAYER( PADS_VISIBLE ) )
+ return NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE );
+ else if( aLayer == ITEM_GAL_LAYER( PAD_FR_VISIBLE ) )
+ return NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE );
+ else if( aLayer == ITEM_GAL_LAYER( PAD_BK_VISIBLE ) )
+ return NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE );
+
+ // Fallback
+ return Cmts_User;
+}
+
+/**
+ * Function IsNetnameLayer
+ * tests whether a layer is a netname layer
+ * @param aLayer = Layer to test
+ * @return true if aLayer is a valid netname layer
+ */
+inline bool IsNetnameLayer( LAYER_NUM aLayer )
+{
+ return aLayer >= NETNAMES_GAL_LAYER( F_Cu ) &&
+ aLayer < NETNAMES_GAL_LAYER( END_NETNAMES_VISIBLE_LIST );
+}
+
+
+LAYER_ID ToLAYER_ID( int aLayer );
+
+#endif // LAYERS_ID_AND_VISIBILITY_H_
diff --git a/include/length.h.usuned b/include/length.h.usuned
new file mode 100644
index 0000000..abd7f2d
--- /dev/null
+++ b/include/length.h.usuned
@@ -0,0 +1,278 @@
+/**
+ * The physical length library. Made for nanometer scale.
+ * @file length.h
+ */
+
+/* sorry it is not styled correctly, i'll work on it further */
+
+#ifndef LENGTH_H_INCLUDED
+#define LENGTH_H_INCLUDED 1
+
+/* type to be used by length units by default */
+typedef int DEF_LENGTH_VALUE;
+
+/**
+ * Length template class
+ * @param T actual type holding a value (be aware of precision and range!)
+ * @param P power of length unit: 1 - length, 2 - area, 3 - volume, -1 - lin. density etc...
+ * This class check length dimension in compile time. In runtime it behaves
+ * exactly like contained type t (which should be numeric type, like int or double)
+ * This class can be replaced with its contained type or simple stub.
+ * Check rules:
+ * - comparisons (< = etc.), addition, subtraction require values of same dimension
+ * e. g. length with length, area with area etc.
+ * - multiplication and division result have appropriate dimension (powers
+ * added and subtracted respectively)
+ * - sqrt and cbrt have appropriate dimensions (P/2 and P/3).
+ * Limitations:
+ * - functions which should not be applied to dimensioned values are not implemeted:
+ * they include algebraic (exp, log...), trigo (sin, cos...), hyperbolic (sinh, cosh..)
+ * - pow function is not implemented as it is require dimension check in runtime
+ * you should use multiplication, division, sqrt and cbrt functions instead.
+ * - sqrt and cbrt result type should be instantiated before they used
+ * Be aware when using them in complex formulae, e. g.
+ * LENGTH< double, 1 > len = cbrt(vol) - is ok, but
+ * LENGTH< double, 2 > vol = sqrt(area*area*area*area)/length - will fail
+ * if LENGTH<..., 4> is not instantiated
+ * - non-integer power values do not supported
+ * they should be implemented carefully using natural fractions, not floats, to be exact
+ * but they are very rare so you should not worry about.
+ * e. g. linear electric noise density should be in mV/sqrt(m)
+ * - automatic numeric type casts are not performed. You even have to manually
+ * cast LENGTH< short > to LENGTH< int > or LENGTH< float >
+ * to LENGTH< double >. Anyway it is not such trouble as progremmer should be
+ * very careful when mixing numeric types and avoid automatic casts.
+ *
+ */
+
+template < typename T = DEF_LENGTH_VALUE, int P = 1 > class LENGTH;
+
+/**
+ * Length units contained in this class
+ */
+
+template <typename T> class LENGTH_UNITS;
+
+/**
+ * For internal needs
+ */
+template < typename T, int P > struct LENGTH_TRAITS
+{
+ typedef LENGTH<T, P> flat;
+};
+
+template < typename T > struct LENGTH_TRAITS< T, 0 >
+{
+ /* length dimension to power 0 is just a number, so LENGTH<T, 0> should be automatically converted to T */
+ typedef T flat;
+};
+
+template < typename T, int P > class LENGTH
+{
+ friend class LENGTH_UNITS< T >;
+ friend class LENGTH_TRAITS< T, P >;
+ template < typename Y, int R > friend class LENGTH;
+protected:
+
+ T m_U;
+ LENGTH( T units ) : m_U( units )
+ {
+ }
+ static T RawValue( const LENGTH<T, P> &x )
+ {
+ return x.m_U;
+ }
+ static T RawValue( const T& x )
+ {
+ return x;
+ }
+public:
+ typedef T value_type;
+ enum
+ {
+ dimension = P
+ };
+ LENGTH( const LENGTH <T, P> &orig ) : m_U( orig.m_U )
+ {
+ }
+ LENGTH( void ) : m_U()
+ {
+ }
+
+ static LENGTH<T, P> zero ( void )
+ {
+ return T(0);
+ }
+
+ LENGTH<T, P> & operator = ( const LENGTH<T, P> & y )
+ {
+ this->m_U = y.m_U;
+ return *this;
+ }
+ template <typename Y> operator LENGTH< Y, P > ( void )
+ {
+ return this->m_U;
+ }
+ /*************************/
+ /* comparisons and tests */
+ /*************************/
+ bool operator ==( const LENGTH < T, P > y ) const
+ {
+ return m_U == y.m_U;
+ }
+ bool operator !=( const LENGTH < T, P > y ) const
+ {
+ return m_U != y.m_U;
+ }
+ bool operator <( const LENGTH < T, P > y ) const
+ {
+ return m_U < y.m_U;
+ }
+ bool operator >=( const LENGTH < T, P > y ) const
+ {
+ return m_U >= y.m_U;
+ }
+ bool operator >( const LENGTH < T, P > y ) const
+ {
+ return m_U > y.m_U;
+ }
+ bool operator <=( const LENGTH < T, P > y ) const
+ {
+ return m_U <= y.m_U;
+ }
+ bool operator !( void ) const
+ {
+ return !m_U;
+ }
+ /*************************/
+ /* basic arithmetic */
+ /*************************/
+ LENGTH< T, P > operator - ( void ) const
+ {
+ return LENGTH<T, P>(-this->m_U);
+ }
+ LENGTH< T, P > operator - ( const LENGTH< T, P > y ) const
+ {
+ return m_U - y.m_U;
+ }
+ LENGTH< T, P > operator + ( const LENGTH< T, P > y ) const
+ {
+ return m_U + y.m_U;
+ }
+ template < int R >
+ typename LENGTH_TRAITS< T, P + R >::flat operator * ( const LENGTH<T, R> &y ) const
+ {
+ return m_U * y.m_U;
+ }
+ LENGTH< T, P > operator * ( const T & y) const
+ {
+ return m_U * y;
+ }
+ LENGTH< T, P > friend operator * ( const T &y, const LENGTH<T, P> &x )
+ {
+ return x.m_U * y;
+ }
+
+ template < int R >
+ typename LENGTH_TRAITS< T, P - R >::flat operator / ( const LENGTH<T, R> &y ) const
+ {
+ return m_U / y.m_U;
+ }
+ LENGTH< T, P > operator / ( const T &y ) const
+ {
+ return m_U / y;
+ }
+ LENGTH< T, -P > friend operator / ( const T &y, const LENGTH< T, P > &x )
+ {
+ return y / x.m_U;
+ }
+
+ friend LENGTH< T, P > sqrt( LENGTH< T, P*2 > y )
+ {
+ return sqrt( y.m_U );
+ }
+ friend LENGTH< T, P > cbrt( LENGTH< T, P*3 > y )
+ {
+ return cbrt( y.m_U );
+ }
+ /*************************/
+ /* assignment arithmetic */
+ /*************************/
+ LENGTH< T, P >& operator -= ( const LENGTH< T, P > y )
+ {
+ return m_U -= y.m_U;
+ }
+ LENGTH< T, P >& operator += ( const LENGTH< T, P > y )
+ {
+ return m_U += y.m_U;
+ }
+ LENGTH< T, P >& operator *= ( const T y )
+ {
+ return m_U *= y;
+ }
+ LENGTH< T, P >& operator /= ( const T y )
+ {
+ return m_U /= y;
+ }
+ /*************************/
+ /* more arithmetic */
+ /*************************/
+};
+
+/**
+ * Units of length
+ *
+ * How to use them:
+ * there are several functions, named LENGTH_UNITS< T >::METRE, which return
+ * named unit (1 meter in example) which have type LENGTH< T, P >.
+ * to get specific length you should use a multiplication:
+ * 3*LENGTH_UNITS::metre() gives 3 metres
+ * 0.01*LENGTH_UNITS::metre() gives 0.01 inch
+ * to get numeric value of length in specific units you should use a division
+ * length/LENGTH_UNITS::metre() gives number of metres in length
+ * legnth/LENGTH_UNITS::foot() gives number of feet in length
+ */
+
+template < typename T = DEF_LENGTH_VALUE > class LENGTH_UNITS {
+protected:
+ enum
+ {
+ METRE = 1000000000, /* The ONLY constant connecting length to the real world */
+
+ INCH = METRE / 10000 * 254
+ };
+ public:
+ static LENGTH< T, 1 > metre( void ) {
+ return T( METRE );
+ }
+ static LENGTH< T, 1 > decimetre( void ) {
+ return T( METRE / 10 );
+ }
+ static LENGTH< T, 1 > centimetre( void ) {
+ return T( METRE / 100 );
+ }
+ static LENGTH< T, 1 > millimetre( void ) {
+ return T( METRE / 1000 );
+ }
+ static LENGTH< T, 1 > micrometre( void ) {
+ return T( METRE / 1000000 );
+ }
+ static LENGTH< T, 1 > foot( void ) { /* do not think this will ever need */
+ return T( INCH * 12 );
+ }
+ static LENGTH< T, 1 > inch( void ) {
+ return T( INCH );
+ }
+ static LENGTH< T, 1 > mil( void ) {
+ return T( INCH / 1000 );
+ }
+};
+
+/**
+ * shortcut to get units of given length type
+ */
+template < typename T, int D > class LENGTH_UNITS< LENGTH< T, D > >: public LENGTH_UNITS< T >
+{
+};
+
+#endif
diff --git a/include/macros.h b/include/macros.h
new file mode 100644
index 0000000..95bcb04
--- /dev/null
+++ b/include/macros.h
@@ -0,0 +1,119 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file macros.h
+ * @brief This file contains miscellaneous helper definitions and functions.
+ */
+
+#ifndef MACROS_H
+#define MACROS_H
+
+#include <wx/wx.h>
+
+/**
+ * Macro TO_UTF8
+ * converts a wxString to a UTF8 encoded C string for all wxWidgets build modes.
+ * wxstring is a wxString, not a wxT() or _(). The scope of the return value
+ * is very limited and volatile, but can be used with printf() style functions well.
+ * NOTE: Trying to convert it to a function is tricky because of the
+ * type of the parameter!
+ */
+#define TO_UTF8( wxstring ) ( (const char*) (wxstring).utf8_str() )
+
+/**
+ * function FROM_UTF8
+ * converts a UTF8 encoded C string to a wxString for all wxWidgets build modes.
+ */
+static inline wxString FROM_UTF8( const char* cstring )
+{
+ wxString line = wxString::FromUTF8( cstring );
+
+ if( line.IsEmpty() ) // happens when cstring is not a valid UTF8 sequence
+ line = wxConvCurrent->cMB2WC( cstring ); // try to use locale conversion
+
+ return line;
+}
+
+/**
+ * Function GetChars
+ * returns a wxChar* to the actual wxChar* data within a wxString, and is
+ * helpful for passing strings to wxString::Printf() and wxString::Format().
+ * It can also be passed a UTF8 parameter which will be converted to wxString
+ * by the compiler.
+ * <p>
+ * Example: wxString::Format( wxT( "%s" ), GetChars( UTF( "some text" ) ) );
+ * <p>
+ * When wxWidgets is properly built for KiCad, a const wxChar* points to either:
+ * <ul>
+ * <li> 32 bit unicode characters on linux/OSX or </li>
+ * <li> 16 bit UTF16 characters on windows. </li>
+ * </ul>
+ * Note that you cannot pass 8 bit strings to wxString::Format() or Printf() so this
+ * is a useful conversion function to wxChar*, which is needed by wxString::Format().
+ *
+ * @return const wxChar* - a pointer to the UNICODE or UTF16 (on windows) text.
+ */
+static inline const wxChar* GetChars( const wxString& s )
+{
+ return (const wxChar*) s.c_str();
+}
+
+/// # of elements in an array
+#define DIM( x ) unsigned( sizeof(x) / sizeof( (x)[0] ) ) // not size_t
+
+
+/**
+ * Function MIRROR
+ * Mirror @a aPoint in @a aMirrorRef.
+ */
+template<typename T>
+void MIRROR( T& aPoint, const T& aMirrorRef )
+{
+ aPoint = -( aPoint - aMirrorRef ) + aMirrorRef;
+}
+
+
+/**
+ * Function Clamp
+ * limits @a value within the range @a lower <= @a value <= @a upper. It will work
+ * on temporary expressions, since they are evaluated only once, and it should work
+ * on most if not all numeric types, string types, or any type for which "operator < ()"
+ * is present. The arguments are accepted in this order so you can remember the
+ * expression as a memory aid:
+ * <p>
+ * result is: lower <= value <= upper
+ */
+template <typename T> inline const T& Clamp( const T& lower, const T& value, const T& upper )
+{
+ wxASSERT( lower <= upper );
+ if( value < lower )
+ return lower;
+ else if( upper < value )
+ return upper;
+ return value;
+}
+
+
+#endif /* ifdef MACRO_H */
diff --git a/include/mail_type.h b/include/mail_type.h
new file mode 100644
index 0000000..dc9d03e
--- /dev/null
+++ b/include/mail_type.h
@@ -0,0 +1,44 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef MAIL_TYPE_H_
+#define MAIL_TYPE_H_
+
+/**
+ * Enum MAIL_T
+ * is the set of mail types sendable via KIWAY::ExpressMail() and supplied as
+ * the @a aCommand parameter to that function. Such mail will be received in
+ * KIWAY_PLAYER::KiwayMailIn( KIWAY_EXPRESS& aEvent ) and aEvent.Command() will
+ * match aCommand to KIWAY::ExpressMail().
+ */
+enum MAIL_T
+{
+ MAIL_CROSS_PROBE, ///< PCB<->SCH, CVPCB->SCH cross-probing.
+ MAIL_BACKANNOTATE_FOOTPRINTS, ///< CVPCB->SCH footprint stuffing at cvpcb termination
+ MAIL_EESCHEMA_NETLIST, ///< EESCHEMA->CVPCB netlist immediately after launching CVPCB
+};
+
+#endif // MAIL_TYPE_H_
diff --git a/include/math/box2.h b/include/math/box2.h
new file mode 100644
index 0000000..5bf6ddd
--- /dev/null
+++ b/include/math/box2.h
@@ -0,0 +1,476 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __BOX2_H
+#define __BOX2_H
+
+#include <math/vector2d.h>
+#include <limits>
+
+#include <boost/optional.hpp>
+
+/**
+ * Class BOX2
+ * handles a 2-D bounding box, built on top of an origin point
+ * and size vector, both of templated class Vec
+ */
+template <class Vec>
+class BOX2
+{
+private:
+ Vec m_Pos; // Rectangle Origin
+ Vec m_Size; // Rectangle Size
+
+public:
+ typedef typename Vec::coord_type coord_type;
+ typedef typename Vec::extended_type ecoord_type;
+ typedef typename std::numeric_limits<coord_type> coord_limits;
+
+ BOX2() {};
+
+ BOX2( const Vec& aPos, const Vec& aSize ) :
+ m_Pos( aPos ),
+ m_Size( aSize )
+ {
+ Normalize();
+ }
+
+ void SetMaximum()
+ {
+ m_Pos.x = m_Pos.y = coord_limits::min() / 2 + coord_limits::epsilon();
+ m_Size.x = m_Size.y = coord_limits::max() - coord_limits::epsilon();
+ }
+
+ Vec Centre() const
+ {
+ return Vec( m_Pos.x + ( m_Size.x / 2 ),
+ m_Pos.y + ( m_Size.y / 2 ) );
+ }
+
+ /**
+ * @brief Compute the bounding box from a given list of points.
+ *
+ * @param aPointList is the list points of the object.
+ */
+ template <class Container>
+ void Compute( const Container& aPointList )
+ {
+ Vec vmin, vmax;
+
+ typename Container::const_iterator i;
+
+ if( !aPointList.size() )
+ return;
+
+ vmin = vmax = aPointList[0];
+
+ for( i = aPointList.begin(); i != aPointList.end(); ++i )
+ {
+ Vec p( *i );
+ vmin.x = std::min( vmin.x, p.x );
+ vmin.y = std::min( vmin.y, p.y );
+ vmax.x = std::max( vmax.x, p.x );
+ vmax.y = std::max( vmax.y, p.y );
+ }
+
+ SetOrigin( vmin );
+ SetSize( vmax - vmin );
+ }
+
+ /**
+ * Function Move
+ * moves the rectangle by the \a aMoveVector.
+ * @param aMoveVector A point that is the value to move this rectangle
+ */
+ void Move( const Vec& aMoveVector )
+ {
+ m_Pos += aMoveVector;
+ }
+
+ /**
+ * Function Normalize
+ * ensures that the height ant width are positive.
+ */
+ BOX2<Vec>& Normalize()
+ {
+ if( m_Size.y < 0 )
+ {
+ m_Size.y = -m_Size.y;
+ m_Pos.y -= m_Size.y;
+ }
+
+ if( m_Size.x < 0 )
+ {
+ m_Size.x = -m_Size.x;
+ m_Pos.x -= m_Size.x;
+ }
+
+ return *this;
+ }
+
+ /**
+ * Function Contains
+ * @param aPoint = the point to test
+ * @return true if aPoint is inside the boundary box. A point on a edge is seen as inside
+ */
+ bool Contains( const Vec& aPoint ) const
+ {
+ Vec rel_pos = aPoint - m_Pos;
+ Vec size = m_Size;
+
+ if( size.x < 0 )
+ {
+ size.x = -size.x;
+ rel_pos.x += size.x;
+ }
+
+ if( size.y < 0 )
+ {
+ size.y = -size.y;
+ rel_pos.y += size.y;
+ }
+
+ return ( rel_pos.x >= 0 ) && ( rel_pos.y >= 0 ) && ( rel_pos.y <= size.y) && ( rel_pos.x <= size.x);
+ }
+
+ /**
+ * Function Contains
+ * @param x = the x coordinate of the point to test
+ * @param y = the x coordinate of the point to test
+ * @return true if point is inside the boundary box. A point on a edge is seen as inside
+ */
+ bool Contains( coord_type x, coord_type y ) const { return Contains( Vec( x, y ) ); }
+
+ /**
+ * Function Contains
+ * @param aRect = the BOX2 to test
+ * @return true if aRect is Contained. A common edge is seen as contained
+ */
+ bool Contains( const BOX2<Vec>& aRect ) const
+ {
+ return Contains( aRect.GetOrigin() ) && Contains( aRect.GetEnd() );
+ }
+
+ const Vec& GetSize() const { return m_Size; }
+ coord_type GetX() const { return m_Pos.x; }
+ coord_type GetY() const { return m_Pos.y; }
+
+ const Vec& GetOrigin() const { return m_Pos; }
+ const Vec& GetPosition() const { return m_Pos; }
+ const Vec GetEnd() const { return Vec( GetRight(), GetBottom() ); }
+
+ coord_type GetWidth() const { return m_Size.x; }
+ coord_type GetHeight() const { return m_Size.y; }
+ coord_type GetRight() const { return m_Pos.x + m_Size.x; }
+ coord_type GetBottom() const { return m_Pos.y + m_Size.y; }
+
+ // Compatibility aliases
+ coord_type GetLeft() const { return GetX(); }
+ coord_type GetTop() const { return GetY(); }
+ void MoveTopTo( coord_type aTop ) { m_Pos.y = aTop; }
+ void MoveBottomTo( coord_type aBottom ) { m_Size.y = aBottom - m_Pos.y; }
+ void MoveLeftTo( coord_type aLeft ) { m_Pos.x = aLeft; }
+ void MoveRightTo( coord_type aRight ) { m_Size.x = aRight - m_Pos.x; }
+
+ void SetOrigin( const Vec& pos ) { m_Pos = pos; }
+ void SetOrigin( coord_type x, coord_type y ) { m_Pos.x = x; m_Pos.y = y; }
+ void SetSize( const Vec& size ) { m_Size = size; }
+ void SetSize( coord_type w, coord_type h ) { m_Size.x = w; m_Size.y = h; }
+ void Offset( coord_type dx, coord_type dy ) { m_Pos.x += dx; m_Pos.y += dy; }
+ void Offset( const Vec& offset )
+ {
+ m_Pos.x += offset.x; m_Pos.y +=
+ offset.y;
+ }
+
+ void SetX( coord_type val ) { m_Pos.x = val; }
+ void SetY( coord_type val ) { m_Pos.y = val; }
+ void SetWidth( coord_type val ) { m_Size.x = val; }
+ void SetHeight( coord_type val ) { m_Size.y = val; }
+ void SetEnd( coord_type x, coord_type y ) { SetEnd( Vec( x, y ) ); }
+ void SetEnd( const Vec& pos )
+ {
+ m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y;
+ }
+
+ /**
+ * Function Intersects
+ * @return bool - true if the argument rectangle intersects this rectangle.
+ * (i.e. if the 2 rectangles have at least a common point)
+ */
+ bool Intersects( const BOX2<Vec>& aRect ) const
+ {
+ // this logic taken from wxWidgets' geometry.cpp file:
+ bool rc;
+
+ BOX2<Vec> me( *this );
+ BOX2<Vec> rect( aRect );
+ me.Normalize(); // ensure size is >= 0
+ rect.Normalize(); // ensure size is >= 0
+
+ // calculate the left common area coordinate:
+ int left = std::max( me.m_Pos.x, rect.m_Pos.x );
+ // calculate the right common area coordinate:
+ int right = std::min( me.m_Pos.x + me.m_Size.x, rect.m_Pos.x + rect.m_Size.x );
+ // calculate the upper common area coordinate:
+ int top = std::max( me.m_Pos.y, aRect.m_Pos.y );
+ // calculate the lower common area coordinate:
+ int bottom = std::min( me.m_Pos.y + me.m_Size.y, rect.m_Pos.y + rect.m_Size.y );
+
+ // if a common area exists, it must have a positive (null accepted) size
+ if( left <= right && top <= bottom )
+ rc = true;
+ else
+ rc = false;
+
+ return rc;
+ }
+
+ const std::string Format() const
+ {
+ std::stringstream ss;
+
+ ss << "( box corner " << m_Pos.Format() << " w " << m_Size.x << " h " << m_Size.y << " )";
+
+ return ss.str();
+ }
+
+ /**
+ * Function Inflate
+ * inflates the rectangle horizontally by \a dx and vertically by \a dy. If \a dx
+ * and/or \a dy is negative the rectangle is deflated.
+ */
+ BOX2<Vec>& Inflate( coord_type dx, coord_type dy )
+ {
+ if( m_Size.x >= 0 )
+ {
+ if( m_Size.x < -2 * dx )
+ {
+ // Don't allow deflate to eat more width than we have,
+ m_Pos.x += m_Size.x / 2;
+ m_Size.x = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.x -= dx;
+ m_Size.x += 2 * dx;
+ }
+ }
+ else // size.x < 0:
+ {
+ if( m_Size.x > -2 * dx )
+ {
+ // Don't allow deflate to eat more width than we have,
+ m_Pos.x -= m_Size.x / 2;
+ m_Size.x = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.x += dx;
+ m_Size.x -= 2 * dx; // m_Size.x <0: inflate when dx > 0
+ }
+ }
+
+ if( m_Size.y >= 0 )
+ {
+ if( m_Size.y < -2 * dy )
+ {
+ // Don't allow deflate to eat more height than we have,
+ m_Pos.y += m_Size.y / 2;
+ m_Size.y = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.y -= dy;
+ m_Size.y += 2 * dy;
+ }
+ }
+ else // size.y < 0:
+ {
+ if( m_Size.y > 2 * dy )
+ {
+ // Don't allow deflate to eat more height than we have,
+ m_Pos.y -= m_Size.y / 2;
+ m_Size.y = 0;
+ }
+ else
+ {
+ // The inflate is valid.
+ m_Pos.y += dy;
+ m_Size.y -= 2 * dy; // m_Size.y <0: inflate when dy > 0
+ }
+ }
+
+ return *this;
+ }
+
+ /**
+ * Function Inflate
+ * inflates the rectangle horizontally and vertically by \a aDelta. If \a aDelta
+ * is negative the rectangle is deflated.
+ */
+ BOX2<Vec>& Inflate( int aDelta )
+ {
+ Inflate( aDelta, aDelta );
+ return *this;
+ }
+
+ /**
+ * Function Merge
+ * modifies the position and size of the rectangle in order to contain \a aRect. It is
+ * mainly used to calculate bounding boxes.
+ * @param aRect The rectangle to merge with this rectangle.
+ */
+ BOX2<Vec>& Merge( const BOX2<Vec>& aRect )
+ {
+ Normalize(); // ensure width and height >= 0
+ BOX2<Vec> rect = aRect;
+ rect.Normalize(); // ensure width and height >= 0
+ Vec end = GetEnd();
+ Vec rect_end = rect.GetEnd();
+
+ // Change origin and size in order to contain the given rect
+ m_Pos.x = std::min( m_Pos.x, rect.m_Pos.x );
+ m_Pos.y = std::min( m_Pos.y, rect.m_Pos.y );
+ end.x = std::max( end.x, rect_end.x );
+ end.y = std::max( end.y, rect_end.y );
+ SetEnd( end );
+ return *this;
+ }
+
+ /**
+ * Function Merge
+ * modifies the position and size of the rectangle in order to contain the given point.
+ * @param aPoint The point to merge with the rectangle.
+ */
+ BOX2<Vec>& Merge( const Vec& aPoint )
+ {
+ Normalize(); // ensure width and height >= 0
+
+ Vec end = GetEnd();
+ // Change origin and size in order to contain the given rect
+ m_Pos.x = std::min( m_Pos.x, aPoint.x );
+ m_Pos.y = std::min( m_Pos.y, aPoint.y );
+ end.x = std::max( end.x, aPoint.x );
+ end.y = std::max( end.y, aPoint.y );
+ SetEnd( end );
+ return *this;
+ }
+
+ /**
+ * Function GetArea
+ * returns the area of the rectangle.
+ * @return The area of the rectangle.
+ */
+ ecoord_type GetArea() const
+ {
+ return (ecoord_type) GetWidth() * (ecoord_type) GetHeight();
+ }
+
+ /**
+ * Function GetArea
+ * returns the length of the diagonal of the rectangle.
+ * @return The area of the diagonal.
+ */
+ ecoord_type Diagonal() const
+ {
+ return m_Size.EuclideanNorm();
+ }
+
+ ecoord_type SquaredDistance( const Vec& aP ) const
+ {
+ ecoord_type x2 = m_Pos.x + m_Size.x;
+ ecoord_type y2 = m_Pos.y + m_Size.y;
+ ecoord_type xdiff = std::max( aP.x < m_Pos.x ? m_Pos.x - aP.x : m_Pos.x - x2, (ecoord_type) 0 );
+ ecoord_type ydiff = std::max( aP.y < m_Pos.y ? m_Pos.y - aP.y : m_Pos.y - y2, (ecoord_type) 0 );
+ return xdiff * xdiff + ydiff * ydiff;
+ }
+
+ ecoord_type Distance( const Vec& aP ) const
+ {
+ return sqrt( SquaredDistance( aP ) );
+ }
+
+ /**
+ * Function SquaredDistance
+ * returns the square of the minimum distance between self and box aBox
+ * @param aBox: the other box
+ * @return The distance, squared
+ */
+ ecoord_type SquaredDistance( const BOX2<Vec>& aBox ) const
+ {
+ ecoord_type s = 0;
+
+ if( aBox.m_Pos.x + aBox.m_Size.x < m_Pos.x )
+ {
+ ecoord_type d = aBox.m_Pos.x + aBox.m_Size.x - m_Pos.x;
+ s += d * d;
+ }
+ else if( aBox.m_Pos.x > m_Pos.x + m_Size.x )
+ {
+ ecoord_type d = aBox.m_Pos.x - m_Size.x - m_Pos.x;
+ s += d * d;
+ }
+
+ if( aBox.m_Pos.y + aBox.m_Size.y < m_Pos.y )
+ {
+ ecoord_type d = aBox.m_Pos.y + aBox.m_Size.y - m_Pos.y;
+ s += d * d;
+ }
+ else if( aBox.m_Pos.y > m_Pos.y + m_Size.y )
+ {
+ ecoord_type d = aBox.m_Pos.y - m_Size.y - m_Pos.y;
+ s += d * d;
+ }
+
+ return s;
+ }
+
+ /**
+ * Function Distance
+ * returns the minimum distance between self and box aBox
+ * @param aBox: the other box
+ * @return The distance
+ */
+ ecoord_type Distance( const BOX2<Vec>& aBox ) const
+ {
+ return sqrt( SquaredDistance( aBox ) );
+ }
+};
+
+/* Default specializations */
+typedef BOX2<VECTOR2I> BOX2I;
+typedef BOX2<VECTOR2D> BOX2D;
+
+typedef boost::optional<BOX2I> OPT_BOX2I;
+
+// FIXME should be removed to avoid multiple typedefs for the same type
+typedef BOX2D DBOX;
+
+#endif
diff --git a/include/math/math_util.h b/include/math/math_util.h
new file mode 100644
index 0000000..cb3ce50
--- /dev/null
+++ b/include/math/math_util.h
@@ -0,0 +1,56 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
+ * Copyright (C) CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __MATH_UTIL_H
+#define __MATH_UTIL_H
+
+#include <stdint.h>
+
+/**
+ * Function rescale()
+ *
+ * Scales a number (value) by rational (numerator/denominator). Numerator must be <= denominator.
+ */
+
+template <typename T>
+T rescale( T aNumerator, T aValue, T aDenominator )
+{
+ return aNumerator * aValue / aDenominator;
+}
+
+template <typename T>
+int sign( T val )
+{
+ return ( T( 0 ) < val) - ( val < T( 0 ) );
+}
+
+// explicit specializations for integer types, taking care of overflow.
+template <>
+int rescale( int aNumerator, int aValue, int aDenominator );
+
+template <>
+int64_t rescale( int64_t aNumerator, int64_t aValue, int64_t aDenominator );
+
+#endif // __MATH_UTIL_H
diff --git a/include/math/matrix3x3.h b/include/math/matrix3x3.h
new file mode 100644
index 0000000..7719cb3
--- /dev/null
+++ b/include/math/matrix3x3.h
@@ -0,0 +1,404 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ *
+ * Matrix class (3x3)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *-
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef MATRIX3X3_H_
+#define MATRIX3X3_H_
+
+#include <math/vector2d.h>
+
+/**
+ * Class MATRIX3x3 describes a general 3x3 matrix.
+ *
+ * Any linear transformation in 2D can be represented
+ * by a homogeneous 3x3 transformation matrix. Given a vector x, the linear transformation
+ * with the transformation matrix M is given as
+ *
+ * x' = M * x
+ *
+ * To represent an affine transformation, homogeneous coordinates have to be used. That means
+ * the 2D-vector (x, y) has to be extended to a 3D-vector by a third component (x, y, 1).
+ *
+ * Transformations can be easily combined by matrix multiplication.
+ *
+ * A * (B * x ) = (A * B) * x
+ * ( A, B: transformation matrices, x: vector )
+ *
+ * This class was implemented using templates, so flexible type combinations are possible.
+ *
+ */
+
+// Forward declaration for template friends
+template <class T>
+class MATRIX3x3;
+
+template <class T>
+std::ostream& operator<<( std::ostream& aStream, const MATRIX3x3<T>& aMatrix );
+
+template <class T>
+class MATRIX3x3
+{
+public:
+ T m_data[3][3];
+
+ /**
+ * @brief Constructor
+ *
+ * Initialize all matrix members to zero.
+ */
+ MATRIX3x3();
+
+ /**
+ * @brief Constructor
+ *
+ * Initialize with given matrix members
+ *
+ * @param a00 is the component [0,0].
+ * @param a01 is the component [0,1].
+ * @param a02 is the component [0,2].
+ * @param a10 is the component [1,0].
+ * @param a11 is the component [1,1].
+ * @param a12 is the component [1,2].
+ * @param a20 is the component [2,0].
+ * @param a21 is the component [2,1].
+ * @param a22 is the component [2,2].
+ */
+ MATRIX3x3( T a00, T a01, T a02, T a10, T a11, T a12, T a20, T a21, T a22 );
+
+ /**
+ * @brief Set the matrix to the identity matrix.
+ *
+ * The diagonal components of the matrix are set to 1.
+ */
+ void SetIdentity();
+
+ /**
+ * @brief Set the translation components of the matrix.
+ *
+ * @param aTranslation is the translation, specified as 2D-vector.
+ */
+ void SetTranslation( VECTOR2<T> aTranslation );
+
+ /**
+ * @brief Get the translation components of the matrix.
+ *
+ * @return is the translation (2D-vector).
+ */
+ VECTOR2<T> GetTranslation() const;
+
+ /**
+ * @brief Set the rotation components of the matrix.
+ *
+ * The angle needs to have a positive value for an anti-clockwise rotation.
+ *
+ * @param aAngle is the rotation angle in [rad].
+ */
+ void SetRotation( T aAngle );
+
+ /**
+ * @brief Set the scale components of the matrix.
+ *
+ * @param aScale contains the scale factors, specified as 2D-vector.
+ */
+ void SetScale( VECTOR2<T> aScale );
+
+ /**
+ * @brief Get the scale components of the matrix.
+ *
+ * @return the scale factors, specified as 2D-vector.
+ */
+ VECTOR2<T> GetScale() const;
+
+ /**
+ * @brief Compute the determinant of the matrix.
+ *
+ * @return the determinant value.
+ */
+ T Determinant() const;
+
+ /**
+ * @brief Determine the inverse of the matrix.
+ *
+ * The inverse of a transformation matrix can be used to revert a transformation.
+ *
+ * x = Minv * ( M * x )
+ * ( M: transformation matrix, Minv: inverse transformation matrix, x: vector)
+ *
+ * @return the inverse matrix.
+ */
+ MATRIX3x3 Inverse() const;
+
+ /**
+ * @brief Get the transpose of the matrix.
+ *
+ * @return the transpose matrix.
+ */
+ MATRIX3x3 Transpose() const;
+
+ /**
+ * @brief Output to a stream.
+ */
+ friend std::ostream& operator<<<T>( std::ostream& aStream, const MATRIX3x3<T>& aMatrix );
+
+};
+
+// Operators
+
+//! @brief Matrix multiplication
+template <class T> MATRIX3x3<T> const operator*( MATRIX3x3<T> const& aA, MATRIX3x3<T> const& aB );
+
+//! @brief Multiplication with a 2D vector, the 3rd z-component is assumed to be 1
+template <class T> VECTOR2<T> const operator*( MATRIX3x3<T> const& aA, VECTOR2<T> const& aB );
+
+//! @brief Multiplication with a scalar
+template <class T, class S> MATRIX3x3<T> const operator*( MATRIX3x3<T> const& aA, T aScalar );
+template <class T, class S> MATRIX3x3<T> const operator*( T aScalar, MATRIX3x3<T> const& aMatrix );
+
+// ----------------------
+// --- Implementation ---
+// ----------------------
+
+template <class T>
+MATRIX3x3<T>::MATRIX3x3()
+{
+ for( int j = 0; j < 3; j++ )
+ {
+ for( int i = 0; i < 3; i++ )
+ {
+ m_data[i][j] = 0.0;
+ }
+ }
+}
+
+
+template <class T>
+MATRIX3x3<T>::MATRIX3x3( T a00, T a01, T a02, T a10, T a11, T a12, T a20, T a21, T a22 )
+{
+ m_data[0][0] = a00;
+ m_data[0][1] = a01;
+ m_data[0][2] = a02;
+
+ m_data[1][0] = a10;
+ m_data[1][1] = a11;
+ m_data[1][2] = a12;
+
+ m_data[2][0] = a20;
+ m_data[2][1] = a21;
+ m_data[2][2] = a22;
+}
+
+
+template <class T>
+void MATRIX3x3<T>::SetIdentity( void )
+{
+ for( int j = 0; j < 3; j++ )
+ {
+ for( int i = 0; i < 3; i++ )
+ {
+ if( i == j )
+ m_data[i][j] = 1.0;
+ else
+ m_data[i][j] = 0.0;
+ }
+ }
+}
+
+
+template <class T>
+void MATRIX3x3<T>::SetTranslation( VECTOR2<T> aTranslation )
+{
+ m_data[0][2] = aTranslation.x;
+ m_data[1][2] = aTranslation.y;
+}
+
+
+template <class T>
+VECTOR2<T> MATRIX3x3<T>::GetTranslation() const
+{
+ VECTOR2<T> result;
+ result.x = m_data[0][2];
+ result.y = m_data[1][2];
+
+ return result;
+}
+
+
+template <class T>
+void MATRIX3x3<T>::SetRotation( T aAngle )
+{
+ T cosValue = cos( aAngle );
+ T sinValue = sin( aAngle );
+ m_data[0][0] = cosValue;
+ m_data[0][1] = -sinValue;
+ m_data[1][0] = sinValue;
+ m_data[1][1] = cosValue;
+}
+
+
+template <class T>
+void MATRIX3x3<T>::SetScale( VECTOR2<T> aScale )
+{
+ m_data[0][0] = aScale.x;
+ m_data[1][1] = aScale.y;
+}
+
+
+template <class T>
+VECTOR2<T> MATRIX3x3<T>::GetScale() const
+{
+ VECTOR2<T> result( m_data[0][0], m_data[1][1] );
+
+ return result;
+}
+
+
+template <class T>
+MATRIX3x3<T> const operator*( MATRIX3x3<T> const& aA, MATRIX3x3<T> const& aB )
+{
+ MATRIX3x3<T> result;
+
+ for( int i = 0; i < 3; i++ )
+ {
+ for( int j = 0; j < 3; j++ )
+ {
+ result.m_data[i][j] = aA.m_data[i][0] * aB.m_data[0][j] +
+ aA.m_data[i][1] * aB.m_data[1][j] +
+ aA.m_data[i][2] * aB.m_data[2][j];
+ }
+ }
+
+ return result;
+}
+
+
+template <class T>
+VECTOR2<T> const operator*( MATRIX3x3<T> const& aMatrix, VECTOR2<T> const& aVector )
+{
+ VECTOR2<T> result( 0, 0 );
+ result.x = aMatrix.m_data[0][0] * aVector.x + aMatrix.m_data[0][1] * aVector.y
+ + aMatrix.m_data[0][2];
+ result.y = aMatrix.m_data[1][0] * aVector.x + aMatrix.m_data[1][1] * aVector.y
+ + aMatrix.m_data[1][2];
+
+ return result;
+}
+
+
+template <class T>
+T MATRIX3x3<T>::Determinant() const
+{
+ return m_data[0][0] * ( m_data[1][1] * m_data[2][2] - m_data[1][2] * m_data[2][1] )
+ - m_data[0][1] * ( m_data[1][0] * m_data[2][2] - m_data[1][2] * m_data[2][0] )
+ + m_data[0][2] * ( m_data[1][0] * m_data[2][1] - m_data[1][1] * m_data[2][0] );
+}
+
+
+template <class T, class S>
+MATRIX3x3<T> const operator*( MATRIX3x3<T> const& aMatrix, S aScalar )
+{
+ MATRIX3x3<T> result;
+
+ for( int i = 0; i < 3; i++ )
+ {
+ for( int j = 0; j < 3; j++ )
+ {
+ result.m_data[i][j] = aMatrix.m_data[i][j] * aScalar;
+ }
+ }
+
+ return result;
+}
+
+
+template <class T, class S>
+MATRIX3x3<T> const operator*( S aScalar, MATRIX3x3<T> const& aMatrix )
+{
+ return aMatrix * aScalar;
+}
+
+
+template <class T>
+MATRIX3x3<T> MATRIX3x3<T>::Inverse() const
+{
+ MATRIX3x3<T> result;
+
+ result.m_data[0][0] = m_data[1][1] * m_data[2][2] - m_data[2][1] * m_data[1][2];
+ result.m_data[0][1] = m_data[0][2] * m_data[2][1] - m_data[2][2] * m_data[0][1];
+ result.m_data[0][2] = m_data[0][1] * m_data[1][2] - m_data[1][1] * m_data[0][2];
+
+ result.m_data[1][0] = m_data[1][2] * m_data[2][0] - m_data[2][2] * m_data[1][0];
+ result.m_data[1][1] = m_data[0][0] * m_data[2][2] - m_data[2][0] * m_data[0][2];
+ result.m_data[1][2] = m_data[0][2] * m_data[1][0] - m_data[1][2] * m_data[0][0];
+
+ result.m_data[2][0] = m_data[1][0] * m_data[2][1] - m_data[2][0] * m_data[1][1];
+ result.m_data[2][1] = m_data[0][1] * m_data[2][0] - m_data[2][1] * m_data[0][0];
+ result.m_data[2][2] = m_data[0][0] * m_data[1][1] - m_data[1][0] * m_data[0][1];
+
+ return result * ( 1.0 / Determinant() );
+}
+
+
+template <class T>
+MATRIX3x3<T> MATRIX3x3<T>::Transpose() const
+{
+ MATRIX3x3<T> result;
+
+ for( int i = 0; i < 3; i++ )
+ {
+ for( int j = 0; j < 3; j++ )
+ {
+ result.m_data[j][i] = m_data[i][j];
+ }
+ }
+
+ return result;
+}
+
+
+template <class T>
+std::ostream& operator<<( std::ostream& aStream, const MATRIX3x3<T>& aMatrix )
+{
+ for( int i = 0; i < 3; i++ )
+ {
+ aStream << "| ";
+
+ for( int j = 0; j < 3; j++ )
+ {
+ aStream << aMatrix.m_data[i][j];
+ aStream << " ";
+ }
+
+ aStream << "|";
+ aStream << "\n";
+ }
+
+ return aStream;
+}
+
+
+/* Default specializations */
+typedef MATRIX3x3<double> MATRIX3x3D;
+
+#endif /* MATRIX3X3_H_ */
diff --git a/include/math/vector2d.h b/include/math/vector2d.h
new file mode 100644
index 0000000..bba2a4a
--- /dev/null
+++ b/include/math/vector2d.h
@@ -0,0 +1,579 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Virtenio GmbH, Torsten Hueter, torsten.hueter <at> virtenio.de
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef VECTOR2D_H_
+#define VECTOR2D_H_
+
+#include <cmath>
+#include <climits>
+#include <iostream>
+#include <sstream>
+#include <cmath>
+
+#include <math/math_util.h>
+
+#ifdef WX_COMPATIBILITY
+ #include <wx/gdicmn.h>
+#endif
+
+/**
+ * Class VECTOR2_TRAITS
+ * traits class for VECTOR2.
+ */
+template <class T>
+struct VECTOR2_TRAITS
+{
+ ///> extended range/precision types used by operations involving multiple
+ ///> multiplications to prevent overflow.
+ typedef T extended_type;
+};
+
+template <>
+struct VECTOR2_TRAITS<int>
+{
+ typedef int64_t extended_type;
+ static const extended_type ECOORD_MAX = 0x7fffffffffffffffULL;
+ static const extended_type ECOORD_MIN = 0x8000000000000000ULL;
+};
+
+// Forward declarations for template friends
+template <class T>
+class VECTOR2;
+template <class T>
+std::ostream& operator<<( std::ostream& aStream, const VECTOR2<T>& aVector );
+
+/**
+ * Class VECTOR2
+ * defines a general 2D-vector/point.
+ *
+ * This class uses templates to be universal. Several operators are provided to help
+ * easy implementing of linear algebra equations.
+ *
+ */
+template <class T = int>
+class VECTOR2 : public VECTOR2_TRAITS<T>
+{
+public:
+ typedef typename VECTOR2_TRAITS<T>::extended_type extended_type;
+ typedef T coord_type;
+
+ T x, y;
+
+ // Constructors
+
+ /// Construct a 2D-vector with x, y = 0
+ VECTOR2();
+
+#ifdef WX_COMPATIBILITY
+ /// Constructor with a wxPoint as argument
+ VECTOR2( const wxPoint& aPoint );
+
+ /// Constructor with a wxSize as argument
+ VECTOR2( const wxSize& aSize );
+#endif
+
+ /// Construct a vector with given components x, y
+ VECTOR2( T x, T y );
+
+ /// Initializes a vector from another specialization. Beware of rouding
+ /// issues.
+ template <typename CastingType>
+ VECTOR2( const VECTOR2<CastingType>& aVec )
+ {
+ x = (T) aVec.x;
+ y = (T) aVec.y;
+ }
+
+ /// Casts a vector to another specialized subclass. Beware of rouding
+ /// issues.
+ template <typename CastedType>
+ VECTOR2<CastedType> operator()() const
+ {
+ return VECTOR2<CastedType>( (CastedType) x, (CastedType) y );
+ }
+
+ /// Destructor
+ // virtual ~VECTOR2();
+
+ /**
+ * Function Euclidean Norm
+ * computes the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
+ * It is used to calculate the length of the vector.
+ * @return Scalar, the euclidean norm
+ */
+ T EuclideanNorm() const;
+
+ /**
+ * Function Squared Euclidean Norm
+ * computes the squared euclidean norm of the vector, which is defined as (x ** 2 + y ** 2).
+ * It is used to calculate the length of the vector.
+ * @return Scalar, the euclidean norm
+ */
+ extended_type SquaredEuclideanNorm() const;
+
+
+ /**
+ * Function Perpendicular
+ * computes the perpendicular vector
+ * @return Perpendicular vector
+ */
+ VECTOR2<T> Perpendicular() const;
+
+ /**
+ * Function Resize
+ * returns a vector of the same direction, but length specified in aNewLength
+ * @param aNewLength: length of the rescaled vector
+ * @return rescaled vector
+ */
+ VECTOR2<T> Resize( T aNewLength ) const;
+
+ /**
+ * Function Angle
+ * computes the angle of the vector
+ * @return vector angle, in radians
+ */
+ double Angle() const;
+
+ /**
+ * Function Rotate
+ * rotates the vector by a given angle
+ * @param aAngle rotation angle in radians
+ * @return rotated vector
+ */
+ VECTOR2<T> Rotate( double aAngle ) const;
+
+ /**
+ * Function Format
+ * returns the vector formatted as a string
+ * @return the formatted string
+ */
+ const std::string Format() const;
+
+ /**
+ * Function Cross()
+ * computes cross product of self with aVector
+ */
+ extended_type Cross( const VECTOR2<T>& aVector ) const;
+
+ /**
+ * Function Dot()
+ * computes dot product of self with aVector
+ */
+ extended_type Dot( const VECTOR2<T>& aVector ) const;
+
+
+ // Operators
+
+ /// Assignment operator
+ VECTOR2<T>& operator=( const VECTOR2<T>& aVector );
+
+ /// Vector addition operator
+ VECTOR2<T> operator+( const VECTOR2<T>& aVector ) const;
+
+ /// Scalar addition operator
+ VECTOR2<T> operator+( const T& aScalar ) const;
+
+ /// Compound assignment operator
+ VECTOR2<T>& operator+=( const VECTOR2<T>& aVector );
+
+ /// Compound assignment operator
+ VECTOR2<T>& operator+=( const T& aScalar );
+
+ /// Vector subtraction operator
+ VECTOR2<T> operator-( const VECTOR2<T>& aVector ) const;
+
+ /// Scalar subtraction operator
+ VECTOR2<T> operator-( const T& aScalar ) const;
+
+ /// Compound assignment operator
+ VECTOR2<T>& operator-=( const VECTOR2<T>& aVector );
+
+ /// Compound assignment operator
+ VECTOR2<T>& operator-=( const T& aScalar );
+
+ /// Negate Vector operator
+ VECTOR2<T> operator-();
+
+ /// Scalar product operator
+ extended_type operator*( const VECTOR2<T>& aVector ) const;
+
+ /// Multiplication with a factor
+ VECTOR2<T> operator*( const T& aFactor ) const;
+
+ /// Division with a factor
+ VECTOR2<T> operator/( const T& aFactor ) const;
+
+ /// Equality operator
+ bool operator==( const VECTOR2<T>& aVector ) const;
+
+ /// Not equality operator
+ bool operator!=( const VECTOR2<T>& aVector ) const;
+
+ /// Smaller than operator
+ bool operator<( const VECTOR2<T>& aVector ) const;
+ bool operator<=( const VECTOR2<T>& aVector ) const;
+
+ /// Greater than operator
+ bool operator>( const VECTOR2<T>& aVector ) const;
+ bool operator>=( const VECTOR2<T>& aVector ) const;
+
+ friend std::ostream & operator<< <T> ( std::ostream & stream, const VECTOR2<T> &vector );
+};
+
+
+// ----------------------
+// --- Implementation ---
+// ----------------------
+
+template <class T>
+VECTOR2<T>::VECTOR2()
+{
+ x = y = 0.0;
+}
+
+
+#ifdef WX_COMPATIBILITY
+template <class T>
+VECTOR2<T>::VECTOR2( wxPoint const& aPoint )
+{
+ x = T( aPoint.x );
+ y = T( aPoint.y );
+}
+
+
+template <class T>
+VECTOR2<T>::VECTOR2( wxSize const& aSize )
+{
+ x = T( aSize.x );
+ y = T( aSize.y );
+}
+#endif
+
+template <class T>
+VECTOR2<T>::VECTOR2( T aX, T aY )
+{
+ x = aX;
+ y = aY;
+}
+
+
+template <class T>
+T VECTOR2<T>::EuclideanNorm() const
+{
+ return sqrt( (extended_type) x * x + (extended_type) y * y );
+}
+
+
+template <class T>
+typename VECTOR2<T>::extended_type VECTOR2<T>::SquaredEuclideanNorm() const
+{
+ return (extended_type) x * x + (extended_type) y * y;
+}
+
+
+template <class T>
+double VECTOR2<T>::Angle() const
+{
+ return atan2( y, x );
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::Perpendicular() const
+{
+ VECTOR2<T> perpendicular( -y, x );
+ return perpendicular;
+}
+
+
+template <class T>
+VECTOR2<T>& VECTOR2<T>::operator=( const VECTOR2<T>& aVector )
+{
+ x = aVector.x;
+ y = aVector.y;
+ return *this;
+}
+
+
+template <class T>
+VECTOR2<T>& VECTOR2<T>::operator+=( const VECTOR2<T>& aVector )
+{
+ x += aVector.x;
+ y += aVector.y;
+ return *this;
+}
+
+
+template <class T>
+VECTOR2<T>& VECTOR2<T>::operator+=( const T& aScalar )
+{
+ x += aScalar;
+ y += aScalar;
+ return *this;
+}
+
+
+template <class T>
+VECTOR2<T>& VECTOR2<T>::operator-=( const VECTOR2<T>& aVector )
+{
+ x -= aVector.x;
+ y -= aVector.y;
+ return *this;
+}
+
+
+template <class T>
+VECTOR2<T>& VECTOR2<T>::operator-=( const T& aScalar )
+{
+ x -= aScalar;
+ y -= aScalar;
+ return *this;
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::Rotate( double aAngle ) const
+{
+ double sa = sin( aAngle );
+ double ca = cos( aAngle );
+
+ return VECTOR2<T> ( T( (double) x * ca - (double) y * sa ),
+ T( (double) x * sa + (double) y * ca ) );
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::Resize( T aNewLength ) const
+{
+ if( x == 0 && y == 0 )
+ return VECTOR2<T> ( 0, 0 );
+
+ extended_type l_sq_current = (extended_type) x * x + (extended_type) y * y;
+ extended_type l_sq_new = (extended_type) aNewLength * aNewLength;
+
+ return VECTOR2<T> (
+ ( x < 0 ? -1 : 1 ) * sqrt( rescale( l_sq_new, (extended_type) x * x, l_sq_current ) ),
+ ( y < 0 ? -1 : 1 ) * sqrt( rescale( l_sq_new, (extended_type) y * y, l_sq_current ) ) ) * sign( aNewLength );
+}
+
+
+template <class T>
+const std::string VECTOR2<T>::Format() const
+{
+ std::stringstream ss;
+
+ ss << "( xy " << x << " " << y << " )";
+
+ return ss.str();
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator+( const VECTOR2<T>& aVector ) const
+{
+ return VECTOR2<T> ( x + aVector.x, y + aVector.y );
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator+( const T& aScalar ) const
+{
+ return VECTOR2<T> ( x + aScalar, y + aScalar );
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator-( const VECTOR2<T>& aVector ) const
+{
+ return VECTOR2<T> ( x - aVector.x, y - aVector.y );
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator-( const T& aScalar ) const
+{
+ return VECTOR2<T> ( x - aScalar, y - aScalar );
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator-()
+{
+ return VECTOR2<T> ( -x, -y );
+}
+
+
+template <class T>
+typename VECTOR2<T>::extended_type VECTOR2<T>::operator*( const VECTOR2<T>& aVector ) const
+{
+ return aVector.x * x + aVector.y * y;
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator*( const T& aFactor ) const
+{
+ VECTOR2<T> vector( x * aFactor, y * aFactor );
+ return vector;
+}
+
+
+template <class T>
+VECTOR2<T> VECTOR2<T>::operator/( const T& aFactor ) const
+{
+ VECTOR2<T> vector( x / aFactor, y / aFactor );
+ return vector;
+}
+
+
+template <class T>
+VECTOR2<T> operator*( const T& aFactor, const VECTOR2<T>& aVector )
+{
+ VECTOR2<T> vector( aVector.x * aFactor, aVector.y * aFactor );
+ return vector;
+}
+
+
+template <class T>
+typename VECTOR2<T>::extended_type VECTOR2<T>::Cross( const VECTOR2<T>& aVector ) const
+{
+ return (extended_type) x * (extended_type) aVector.y -
+ (extended_type) y * (extended_type) aVector.x;
+}
+
+
+template <class T>
+typename VECTOR2<T>::extended_type VECTOR2<T>::Dot( const VECTOR2<T>& aVector ) const
+{
+ return (extended_type) x * (extended_type) aVector.x +
+ (extended_type) y * (extended_type) aVector.y;
+}
+
+
+template <class T>
+bool VECTOR2<T>::operator<( const VECTOR2<T>& aVector ) const
+{
+ return ( *this * *this ) < ( aVector * aVector );
+}
+
+
+template <class T>
+bool VECTOR2<T>::operator<=( const VECTOR2<T>& aVector ) const
+{
+ return ( *this * *this ) <= ( aVector * aVector );
+}
+
+
+template <class T>
+bool VECTOR2<T>::operator>( const VECTOR2<T>& aVector ) const
+{
+ return ( *this * *this ) > ( aVector * aVector );
+}
+
+
+template <class T>
+bool VECTOR2<T>::operator>=( const VECTOR2<T>& aVector ) const
+{
+ return ( *this * *this ) >= ( aVector * aVector );
+}
+
+
+template <class T>
+bool VECTOR2<T>::operator==( VECTOR2<T> const& aVector ) const
+{
+ return ( aVector.x == x ) && ( aVector.y == y );
+}
+
+
+template <class T>
+bool VECTOR2<T>::operator!=( VECTOR2<T> const& aVector ) const
+{
+ return ( aVector.x != x ) || ( aVector.y != y );
+}
+
+
+template <class T>
+const VECTOR2<T> LexicographicalMax( const VECTOR2<T>& aA, const VECTOR2<T>& aB )
+{
+ if( aA.x > aB.x )
+ return aA;
+ else if( aA.x == aB.x && aA.y > aB.y )
+ return aA;
+
+ return aB;
+}
+
+
+template <class T>
+const VECTOR2<T> LexicographicalMin( const VECTOR2<T>& aA, const VECTOR2<T>& aB )
+{
+ if( aA.x < aB.x )
+ return aA;
+ else if( aA.x == aB.x && aA.y < aB.y )
+ return aA;
+
+ return aB;
+}
+
+
+template <class T>
+const int LexicographicalCompare( const VECTOR2<T>& aA, const VECTOR2<T>& aB )
+{
+ if( aA.x < aB.x )
+ return -1;
+ else if( aA.x > aB.x )
+ return 1;
+ else // aA.x == aB.x
+ {
+ if( aA.y < aB.y )
+ return -1;
+ else if( aA.y > aB.y )
+ return 1;
+ else
+ return 0;
+ }
+}
+
+
+template <class T>
+std::ostream& operator<<( std::ostream& aStream, const VECTOR2<T>& aVector )
+{
+ aStream << "[ " << aVector.x << " | " << aVector.y << " ]";
+ return aStream;
+}
+
+
+/* Default specializations */
+typedef VECTOR2<double> VECTOR2D;
+typedef VECTOR2<int> VECTOR2I;
+
+/* Compatibility typedefs */
+// FIXME should be removed to avoid multiple typedefs for the same type
+typedef VECTOR2<double> DPOINT;
+typedef DPOINT DSIZE;
+
+#endif // VECTOR2D_H_
diff --git a/include/menus_helpers.h b/include/menus_helpers.h
new file mode 100644
index 0000000..9b0d351
--- /dev/null
+++ b/include/menus_helpers.h
@@ -0,0 +1,205 @@
+/**
+ * @file menus_helpers.h
+ * @brief Usefull macros and inline functions to create menus items
+ * in menubars or popup menus
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2014 KiCad Developers.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <bitmaps.h>
+
+/**
+ * Definition SETBITMAPS
+ * is a macro use to add a bitmaps to check menu item.
+ * @note Do not use with normal menu items or any platform other than Windows.
+ * @param aImage is the image to add the menu item.
+ */
+#if defined( USE_IMAGES_IN_MENUS ) && defined( __WINDOWS__ )
+# define SETBITMAPS( aImage ) item->SetBitmaps( KiBitmap( checked_ok_xpm ), KiBitmap( aImage ) )
+#else
+# define SETBITMAPS( aImage )
+#endif
+
+/**
+ * Definition SETBITMAP
+ * is a macro use to add a bitmap to a menu items.
+ * @note Do not use with checked menu items.
+ * @param aImage is the image to add the menu item.
+ */
+#if !defined( USE_IMAGES_IN_MENUS )
+# define SET_BITMAP( aImage )
+#else
+# define SET_BITMAP( aImage ) item->SetBitmap( aImage )
+#endif
+
+/**
+ * Function AddMenuItem
+ * is an inline helper function to create and insert a menu item with an icon
+ * into \a aMenu
+ *
+ * @param aMenu is the menu to add the new item.
+ * @param aId is the command ID for the new menu item.
+ * @param aText is the string for the new menu item.
+ * @param aImage is the icon to add to the new menu item.
+ * @param aType is the type of menu :wxITEM_NORMAL (default), wxITEM_CHECK ...
+ * @return a pointer to the new created wxMenuItem
+ */
+static inline wxMenuItem* AddMenuItem( wxMenu* aMenu,
+ int aId,
+ const wxString& aText,
+ const wxBitmap& aImage,
+ wxItemKind aType = wxITEM_NORMAL )
+{
+ wxMenuItem* item;
+
+ item = new wxMenuItem( aMenu, aId, aText, wxEmptyString, aType );
+
+ if( aType == wxITEM_CHECK )
+ {
+#if defined( USE_IMAGES_IN_MENUS ) && defined( __WINDOWS__ )
+ item->SetBitmaps( KiBitmap( checked_ok_xpm ), aImage );
+ // A workaround to a strange bug on Windows, wx Widgets 3.0:
+ // size of bitmaps is not taken in account for wxITEM_CHECK menu
+ // unless we call SetFont
+ item->SetFont(*wxNORMAL_FONT);
+#endif
+ }
+ else
+ {
+ SET_BITMAP( aImage );
+ }
+
+ aMenu->Append( item );
+
+ return item;
+}
+
+
+/**
+ * Function AddMenuItem
+ * is an inline helper function to create and insert a menu item with an icon
+ * and a help message string into \a aMenu
+ *
+ * @param aMenu is the menu to add the new item.
+ * @param aId is the command ID for the new menu item.
+ * @param aText is the string for the new menu item.
+ * @param aHelpText is the help message string for the new menu item.
+ * @param aImage is the icon to add to the new menu item.
+ * @param aType is the type of menu :wxITEM_NORMAL (default), wxITEM_CHECK ...
+ * @return a pointer to the new created wxMenuItem
+ */
+static inline wxMenuItem* AddMenuItem( wxMenu* aMenu,
+ int aId,
+ const wxString& aText,
+ const wxString& aHelpText,
+ const wxBitmap& aImage,
+ wxItemKind aType = wxITEM_NORMAL )
+{
+ wxMenuItem* item;
+
+ item = new wxMenuItem( aMenu, aId, aText, aHelpText, aType );
+
+ if( aType == wxITEM_CHECK )
+ {
+#if defined( USE_IMAGES_IN_MENUS ) && defined( __WINDOWS__ )
+ item->SetBitmaps( KiBitmap( checked_ok_xpm ), aImage );
+ // A workaround to a strange bug on Windows, wx Widgets 3.0:
+ // size of bitmaps is not taken in account for wxITEM_CHECK menu
+ // unless we call SetFont
+ item->SetFont(*wxNORMAL_FONT);
+#endif
+ }
+ else
+ {
+ SET_BITMAP( aImage );
+ }
+
+ aMenu->Append( item );
+
+ return item;
+}
+
+
+/**
+ * Function AddMenuItem
+ * is an inline helper function to create and insert a menu item with an icon
+ * into \a aSubMenu in \a aMenu
+ *
+ * @param aMenu is the menu to add the new submenu item.
+ * @param aSubMenu is the submenu to add the new menu.
+ * @param aId is the command ID for the new menu item.
+ * @param aText is the string for the new menu item.
+ * @param aImage is the icon to add to the new menu item.
+ * @return a pointer to the new created wxMenuItem
+ */
+static inline wxMenuItem* AddMenuItem( wxMenu* aMenu,
+ wxMenu* aSubMenu,
+ int aId,
+ const wxString& aText,
+ const wxBitmap& aImage )
+{
+ wxMenuItem* item;
+
+ item = new wxMenuItem( aMenu, aId, aText );
+ item->SetSubMenu( aSubMenu );
+
+ SET_BITMAP( aImage );
+
+ aMenu->Append( item );
+
+ return item;
+};
+
+
+/**
+ * Function AddMenuItem
+ * is an inline helper function to create and insert a menu item with an icon
+ * and a help message string into \a aSubMenu in \a aMenu
+ *
+ * @param aMenu is the menu to add the new submenu item.
+ * @param aSubMenu is the submenu to add the new menu.
+ * @param aId is the command ID for the new menu item.
+ * @param aText is the string for the new menu item.
+ * @param aHelpText is the help message string for the new menu item.
+ * @param aImage is the icon to add to the new menu item.
+ * @return a pointer to the new created wxMenuItem
+ */
+static inline wxMenuItem* AddMenuItem( wxMenu* aMenu,
+ wxMenu* aSubMenu,
+ int aId,
+ const wxString& aText,
+ const wxString& aHelpText,
+ const wxBitmap& aImage )
+{
+ wxMenuItem* item;
+
+ item = new wxMenuItem( aMenu, aId, aText, aHelpText );
+ item->SetSubMenu( aSubMenu );
+
+ SET_BITMAP( aImage );
+
+ aMenu->Append( item );
+
+ return item;
+};
diff --git a/include/msgpanel.h b/include/msgpanel.h
new file mode 100644
index 0000000..31478f2
--- /dev/null
+++ b/include/msgpanel.h
@@ -0,0 +1,195 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2011-2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file msgpanel.h
+ * @brief Message panel definition file.
+ */
+
+#ifndef _MSGPANEL_H_
+#define _MSGPANEL_H_
+
+
+#include <colors.h>
+
+#include <wx/window.h>
+
+#include <vector>
+
+
+#define MSG_PANEL_DEFAULT_PAD 6 ///< The default number of spaces between each text string.
+
+
+class EDA_MSG_PANEL;
+
+
+/**
+ * Class EDA_MSG_ITEM
+ * is used EDA_MSG_PANEL as the item type for displaying messages.
+ */
+class MSG_PANEL_ITEM
+{
+ int m_X;
+ int m_UpperY;
+ int m_LowerY;
+ wxString m_UpperText;
+ wxString m_LowerText;
+ EDA_COLOR_T m_Color;
+ int m_Pad;
+
+ friend class EDA_MSG_PANEL;
+
+public:
+ MSG_PANEL_ITEM( const wxString& aUpperText, const wxString& aLowerText, EDA_COLOR_T aColor,
+ int aPad = MSG_PANEL_DEFAULT_PAD ) :
+ m_UpperText( aUpperText ),
+ m_LowerText( aLowerText ),
+ m_Color( aColor ),
+ m_Pad( aPad )
+ {
+ m_X = 0;
+ m_UpperY = 0;
+ m_LowerY = 0;
+ }
+
+ MSG_PANEL_ITEM() :
+ m_Pad( MSG_PANEL_DEFAULT_PAD )
+
+ {
+ m_X = 0;
+ m_UpperY = 0;
+ m_LowerY = 0;
+ m_Color = UNSPECIFIED_COLOR;
+ }
+
+ void SetUpperText( const wxString& aUpperText ) { m_UpperText = aUpperText; }
+ const wxString& GetUpperText() const { return m_UpperText; }
+
+ void SetLowerText( const wxString& aLowerText ) { m_LowerText = aLowerText; }
+ const wxString& GetLowerText() const { return m_LowerText; }
+
+ void SetColor( EDA_COLOR_T aColor ) { m_Color = aColor; }
+ EDA_COLOR_T GetColor() const { return m_Color; }
+
+ void SetPadding( int aPad ) { m_Pad = aPad; }
+ int GetPadding() const { return m_Pad; }
+};
+
+
+typedef std::vector<MSG_PANEL_ITEM> MSG_PANEL_ITEMS;
+typedef MSG_PANEL_ITEMS::iterator MSG_PANEL_ITEMS_ITER;
+typedef MSG_PANEL_ITEMS::const_iterator MSG_PANEL_ITEMS_CITER;
+
+
+/**
+ * class EDA_MSG_PANEL
+ * is a panel to display various information messages.
+ */
+class EDA_MSG_PANEL : public wxPanel
+{
+protected:
+ MSG_PANEL_ITEMS m_Items;
+ int m_last_x; ///< the last used x coordinate
+ wxSize m_fontSize;
+
+ void showItem( wxDC& dc, const MSG_PANEL_ITEM& aItem );
+
+ void erase( wxDC* DC );
+
+ /**
+ * Function getFontSize
+ * computes the height and width of a 'W' in the system font.
+ */
+ static wxSize computeFontSize();
+
+ /**
+ * Calculate the width and height of a text string using the system UI font.
+ */
+ wxSize computeTextSize( const wxString& text ) const;
+
+public:
+ EDA_MSG_PANEL( wxWindow* aParent, int aId,
+ const wxPoint& aPosition, const wxSize& aSize,
+ long style=wxTAB_TRAVERSAL, const wxString &name=wxPanelNameStr);
+ ~EDA_MSG_PANEL();
+
+ /**
+ * Function GetRequiredHeight
+ * returns the required height (in pixels) of a EDA_MSG_PANEL. This takes
+ * into consideration the system gui font, wxSYS_DEFAULT_GUI_FONT.
+ */
+ static int GetRequiredHeight();
+
+ void OnPaint( wxPaintEvent& aEvent );
+ void EraseMsgBox();
+
+ /**
+ * Function SetMessage
+ * sets a message at \a aXPosition to \a aUpperText and \a aLowerText in the message panel.
+ *
+ * @param aXPosition The horizontal position to display the message or less than zero
+ * to set the message using the last message position.
+ * @param aUpperText The text to be displayed in top line.
+ * @param aLowerText The text to be displayed in bottom line.
+ * @param aColor Color of the text to display.
+ */
+ void SetMessage( int aXPosition, const wxString& aUpperText,
+ const wxString& aLowerText, EDA_COLOR_T aColor );
+
+ /**
+ * Function AppendMessage
+ * appends a message to the message panel.
+ *
+ * This method automatically adjusts for the width of the text string.
+ * Making consecutive calls to AppendMessage will append each message
+ * to the right of the last message. This message is not compatible
+ * with Affiche_1_Parametre.
+ *
+ * @param aUpperText The message upper text.
+ * @param aLowerText The message lower text.
+ * @param aColor A color ID from the KiCad color list (see colors.h).
+ * @param aPad Number of spaces to pad between messages (default = 4).
+ */
+ void AppendMessage( const wxString& aUpperText, const wxString& aLowerText,
+ EDA_COLOR_T aColor, int aPad = 6 );
+
+ /**
+ * Function AppendMessage
+ * appends \a aMessageItem to the message panel.
+ *
+ * @param aMessageItem is a reference to an #MSG_PANEL_ITEM containing the message to
+ * append to the panel.
+ */
+ void AppendMessage( const MSG_PANEL_ITEM& aMessageItem )
+ {
+ AppendMessage( aMessageItem.GetUpperText(), aMessageItem.GetLowerText(),
+ aMessageItem.GetColor(), aMessageItem.GetPadding() );
+ }
+
+ DECLARE_EVENT_TABLE()
+};
+
+
+#endif // _MSGPANEL_H_
diff --git a/include/newstroke_font.h b/include/newstroke_font.h
new file mode 100644
index 0000000..70a2c0a
--- /dev/null
+++ b/include/newstroke_font.h
@@ -0,0 +1,35 @@
+/*
+ * newstroke_font.h - header for automatically converted font
+ *
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 vladimir uryvaev <vovanius@bk.ru>
+ * Copyright (C) 1992-2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+#ifndef __NEWSTROKE_FONT_H__
+#define __NEWSTROKE_FONT_H__
+
+/**
+ * Array containing strokes for unicode glyphs
+ */
+extern const char* const newstroke_font[]; //The font
+extern const int newstroke_font_bufsize; //font buffer size
+
+#endif /* __NEWSTROKE_FONT_H__ */
diff --git a/include/online_help.h b/include/online_help.h
new file mode 100644
index 0000000..e8ec66f
--- /dev/null
+++ b/include/online_help.h
@@ -0,0 +1,13 @@
+/**
+ * @file online_help.h
+ * @brief Definitions for online help for KiCad.
+ */
+
+#ifndef ONLINE_HELP_H
+#define ONLINE_HELP_H
+
+/*
+ * KiCad uses HTML or PDF file format in the online help (help command)
+ */
+
+#endif /* #ifndef ONLINE_HELP_H */
diff --git a/include/origin_viewitem.h b/include/origin_viewitem.h
new file mode 100644
index 0000000..7735641
--- /dev/null
+++ b/include/origin_viewitem.h
@@ -0,0 +1,146 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2016 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __ORIGIN_VIEWITEM_H
+#define __ORIGIN_VIEWITEM_H
+
+#include <math/box2.h>
+#include <view/view.h>
+#include <class_board_item.h>
+#include <layers_id_colors_and_visibility.h>
+#include <gal/color4d.h>
+
+/**
+ * Class ORIGIN_VIEWITEM
+ *
+ * View item to draw an origin marker.
+ */
+namespace KIGFX {
+
+class ORIGIN_VIEWITEM : public EDA_ITEM
+{
+public:
+ ///> Marker symbol styles
+ enum MARKER_STYLE { NONE, CROSS, X, DOT, CIRCLE_CROSS, CIRCLE_X, CIRCLE_DOT };
+
+ ORIGIN_VIEWITEM( const COLOR4D& aColor = COLOR4D( 1.0, 1.0, 1.0, 1.0 ),
+ MARKER_STYLE aStyle = CIRCLE_X, int aSize = 16,
+ const VECTOR2D& aPosition = VECTOR2D( 0, 0 ) );
+
+ const BOX2I ViewBBox() const;
+
+ void ViewDraw( int aLayer, KIGFX::GAL* aGal ) const;
+
+ void ViewGetLayers( int aLayers[], int& aCount ) const
+ {
+ aLayers[0] = ITEM_GAL_LAYER( GP_OVERLAY );
+ aCount = 1;
+ }
+
+#if defined(DEBUG)
+ void Show( int x, std::ostream& st ) const
+ {
+ }
+#endif
+
+ /** Get class name
+ * @return string "ORIGIN_VIEWITEM"
+ */
+ wxString GetClass() const
+ {
+ return wxT( "ORIGIN_VIEWITEM" );
+ }
+
+ /**
+ * Function SetDrawAtZero()
+ * Set the draw at zero flag. When set the marker will be drawn when it's position is 0,0.
+ * Otherwise it will not be drawn when its position is 0,0
+ * @param aDrawFlag The value to set the draw at zero flag
+ */
+ inline void SetDrawAtZero( bool aDrawFlag )
+ {
+ m_drawAtZero = aDrawFlag;
+ }
+
+ inline void SetPosition( const VECTOR2D& aPosition )
+ {
+ m_position = aPosition;
+ ViewUpdate();
+ }
+
+ inline const VECTOR2D& GetPosition() const
+ {
+ return m_position;
+ }
+
+ inline void SetSize( int aSize )
+ {
+ m_size = aSize;
+ }
+
+ inline int GetSize() const
+ {
+ return m_size;
+ }
+
+ inline void SetColor( const KIGFX::COLOR4D& aColor )
+ {
+ m_color = aColor;
+ }
+
+ inline const KIGFX::COLOR4D& GetColor() const
+ {
+ return m_color;
+ }
+
+ inline void SetStyle( MARKER_STYLE aStyle )
+ {
+ m_style = aStyle;
+ }
+
+ inline MARKER_STYLE GetStyle() const
+ {
+ return m_style;
+ }
+
+protected:
+ ///> Marker coordinates.
+ VECTOR2D m_position;
+
+ ///> Marker size (in pixels).
+ int m_size;
+
+ ///> Marker color.
+ COLOR4D m_color;
+
+ ///> Marker symbol.
+ MARKER_STYLE m_style;
+
+ ///> If set, the marker will be drawn even if its position is 0,0
+ bool m_drawAtZero;
+};
+
+} // namespace KIGFX
+
+#endif
diff --git a/include/pad_shapes.h b/include/pad_shapes.h
new file mode 100644
index 0000000..9dd5e5d
--- /dev/null
+++ b/include/pad_shapes.h
@@ -0,0 +1,55 @@
+/******************/
+/* pad_shapes.h */
+/******************/
+
+#ifndef PAD_SHAPES_H_
+#define PAD_SHAPES_H_
+
+/**
+ * Enum PAD_SHAPE_T
+ * is the set of pad shapes, used with D_PAD::{Set,Get}Shape()
+ */
+enum PAD_SHAPE_T
+{
+ PAD_SHAPE_CIRCLE,
+ PAD_CIRCLE = PAD_SHAPE_CIRCLE,
+ PAD_SHAPE_RECT,
+ PAD_RECT = PAD_SHAPE_RECT,
+ PAD_SHAPE_OVAL,
+ PAD_OVAL = PAD_SHAPE_OVAL,
+ PAD_SHAPE_TRAPEZOID,
+ PAD_TRAPEZOID = PAD_SHAPE_TRAPEZOID
+};
+
+/**
+ * Enum PAD_DRILL_SHAPE_T
+ * is the set of pad drill shapes, used with D_PAD::{Set,Get}DrillShape()
+ * The double name is for convenience of Python devs
+ */
+enum PAD_DRILL_SHAPE_T
+{
+ PAD_DRILL_SHAPE_CIRCLE,
+ PAD_DRILL_SHAPE_OBLONG,
+};
+
+
+/**
+ * Enum PAD_ATTR_T
+ * is the set of pad shapes, used with D_PAD::{Set,Get}Attribute()
+ * The double name is for convenience of Python devs
+ */
+enum PAD_ATTR_T
+{
+ PAD_ATTRIB_STANDARD, ///< Usual pad
+ PAD_STANDARD = PAD_ATTRIB_STANDARD,
+ PAD_ATTRIB_SMD, ///< Smd pad, appears on the solder paste layer (default)
+ PAD_SMD = PAD_ATTRIB_SMD,
+ PAD_ATTRIB_CONN, ///< Like smd, does not appear on the solder paste layer (default)
+ PAD_CONN = PAD_ATTRIB_CONN,
+ PAD_ATTRIB_HOLE_NOT_PLATED, ///< like PAD_STANDARD, but not plated
+ ///< mechanical use only, no connection allowed
+ PAD_HOLE_NOT_PLATED = PAD_ATTRIB_HOLE_NOT_PLATED
+};
+
+
+#endif // PAD_SHAPES_H_
diff --git a/include/painter.h b/include/painter.h
new file mode 100644
index 0000000..727533c
--- /dev/null
+++ b/include/painter.h
@@ -0,0 +1,314 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __CLASS_PAINTER_H
+#define __CLASS_PAINTER_H
+
+#include <map>
+#include <set>
+
+#include <gal/color4d.h>
+#include <colors.h>
+#include <worksheet_shape_builder.h>
+#include <boost/shared_ptr.hpp>
+
+class EDA_ITEM;
+class COLORS_DESIGN_SETTINGS;
+
+namespace KIGFX
+{
+class GAL;
+class VIEW_ITEM;
+
+/**
+ * Class RENDER_SETTINGS
+ * Contains all the knowledge about how graphical objects are drawn on
+ * any output surface/device. This includes:
+ * - color/transparency settings
+ * - highlighting and high contrast mode control
+ * - drawing quality control (sketch/outline mode)
+ * The class acts as an interface between the PAINTER object and the GUI (i.e. Layers/Items
+ * widget or display options dialog).
+ */
+class RENDER_SETTINGS
+{
+public:
+ RENDER_SETTINGS();
+ virtual ~RENDER_SETTINGS();
+
+ /**
+ * Function ImportLegacyColors
+ * Loads a list of color settings for layers.
+ * @param aSettings is a list of color settings.
+ */
+ virtual void ImportLegacyColors( const COLORS_DESIGN_SETTINGS* aSettings ) = 0;
+
+ /**
+ * Function SetActiveLayer
+ * Sets the specified layer as active - it means that it can be drawn in a specific mode
+ * (eg. highlighted, so it differs from other layers).
+ * @param aLayerId is a layer number that should be displayed in a specific mode.
+ */
+ inline void SetActiveLayer( int aLayerId, bool aEnabled = true )
+ {
+ if( aEnabled )
+ m_activeLayers.insert( aLayerId );
+ else
+ m_activeLayers.erase( aLayerId );
+ }
+
+ /**
+ * Function GetActiveLayers()
+ * Returns the set of currently active layers.
+ * @return The set of currently active layers.
+ */
+ const std::set<unsigned int> GetActiveLayers()
+ {
+ return m_activeLayers;
+ }
+
+ /**
+ * Function ClearActiveLayers
+ * Clears the list of active layers.
+ */
+ inline void ClearActiveLayers()
+ {
+ m_activeLayers.clear();
+ }
+
+ /**
+ * Function IsActiveLayer
+ * Returns information whether the queried layer is marked as active.
+ * @return True if the queried layer is marked as active.
+ */
+ inline bool IsActiveLayer( int aLayerId ) const
+ {
+ return ( m_activeLayers.count( aLayerId ) > 0 );
+ }
+
+ /**
+ * Function IsHighlightEnabled
+ * Returns current highlight setting.
+ * @return True if highlight is enabled, false otherwise.
+ */
+ inline bool IsHighlightEnabled() const
+ {
+ return m_highlightEnabled;
+ }
+
+ /**
+ * Function GetHighlightNetCode
+ * Returns netcode of currently highlighted net.
+ * @return Netcode of currently highlighted net.
+ */
+ inline int GetHighlightNetCode() const
+ {
+ return m_highlightNetcode;
+ }
+
+ /**
+ * Function SetHighlight
+ * Turns on/off highlighting - it may be done for the active layer or the specified net.
+ * @param aEnabled tells if highlighting should be enabled.
+ * @param aNetcode is optional and if specified, turns on higlighting only for the net with
+ * number given as the parameter.
+ */
+ inline void SetHighlight( bool aEnabled, int aNetcode = -1 )
+ {
+ m_highlightEnabled = aEnabled;
+ m_highlightNetcode = aEnabled ? aNetcode : -1;
+ }
+
+ /**
+ * Function SetHighContrast
+ * Turns on/off high contrast display mode.
+ * @param aEnabled determines if high contrast display mode should be enabled or not.
+ */
+ inline void SetHighContrast( bool aEnabled )
+ {
+ m_hiContrastEnabled = aEnabled;
+ }
+
+ /**
+ * Function GetHighContrast
+ * Returns information about high contrast display mode.
+ * @return True if the high contrast mode is on, false otherwise.
+ */
+ inline bool GetHighContrast() const
+ {
+ return m_hiContrastEnabled;
+ }
+
+ /**
+ * Function GetColor
+ * Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer
+ * using currently used render settings.
+ * @param aItem is the VIEW_ITEM.
+ * @param aLayer is the layer.
+ * @return The color.
+ */
+ virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) const = 0;
+
+ float GetWorksheetLineWidth() const
+ {
+ return m_worksheetLineWidth;
+ }
+
+ /**
+ * Function TranslateColor
+ * Returns the color responding to the one of EDA_COLOR_T enum values.
+ * @param aColor equivalent.
+ */
+ inline const COLOR4D& TranslateColor( EDA_COLOR_T aColor )
+ {
+ return m_legacyColorMap[aColor];
+ }
+
+ /**
+ * Function GetBackgroundColor
+ * Returns current background color settings.
+ * @return Background color.
+ */
+ inline const COLOR4D& GetBackgroundColor() const
+ {
+ return m_backgroundColor;
+ }
+
+ /**
+ * Function SetBackgroundColor
+ * Sets new color for background.
+ * @param aColor is the new background color.
+ */
+ inline void SetBackgroundColor( const COLOR4D& aColor )
+ {
+ m_backgroundColor = aColor;
+ }
+
+protected:
+ /**
+ * Function update
+ * Precalculates extra colors for layers (e.g. highlighted, darkened and any needed version
+ * of base colors).
+ */
+ virtual void update();
+
+ std::set<unsigned int> m_activeLayers; ///< Stores active layers number
+
+ /// Parameters for display modes
+ bool m_hiContrastEnabled; ///< High contrast display mode on/off
+ COLOR4D m_hiContrastColor; ///< Color used for high contrast display mode
+ float m_hiContrastFactor; ///< Factor used for computing high contrast color
+
+ bool m_highlightEnabled; ///< Highlight display mode on/off
+ int m_highlightNetcode; ///< Net number that is displayed in highlight
+ ///< -1 means that there is no specific net, and whole active
+ ///< layer is highlighted
+ float m_highlightFactor; ///< Factor used for computing hightlight color
+
+ float m_selectFactor; ///< Specifies how color of selected items is changed
+ float m_layerOpacity; ///< Determines opacity of all layers
+ float m_outlineWidth; ///< Line width used when drawing outlines
+ float m_worksheetLineWidth; ///< Line width used when drawing worksheet
+
+ COLOR4D m_backgroundColor; ///< The background color
+
+ /// Map of colors that were usually used for display
+ std::map<EDA_COLOR_T, COLOR4D> m_legacyColorMap;
+};
+
+
+/**
+ * Class PAINTER
+ * contains all the knowledge about how to draw graphical object onto
+ * any particular output device.
+ * This knowledge is held outside the individual graphical objects so that
+ * alternative output devices may be used, and so that the graphical objects
+ * themselves to not contain drawing routines. Drawing routines in the objects
+ * cause problems with usages of the objects as simple container objects in
+ * DLL/DSOs.
+ * PAINTER is an abstract layer, because every module (pcbnew, eeschema, etc.)
+ * has to draw different kinds of objects.
+ */
+class PAINTER
+{
+public:
+ /*
+ * Constructor PAINTER( GAL* )
+ * initializes this object for painting on any of the polymorphic
+ * GRAPHICS_ABSTRACTION_LAYER* derivatives.
+ *
+ * @param aGal is a pointer to a polymorphic GAL device on which
+ * to draw (i.e. Cairo, OpenGL, wxDC)
+ * No ownership is given to this PAINTER of aGal.
+ */
+ PAINTER( GAL* aGal );
+ virtual ~PAINTER();
+
+ /**
+ * Function SetGAL
+ * Changes Graphics Abstraction Layer used for drawing items for a new one.
+ * @param aGal is the new GAL instance.
+ */
+ void SetGAL( GAL* aGal )
+ {
+ m_gal = aGal;
+ }
+
+ /**
+ * Function ApplySettings
+ * Loads colors and display modes settings that are going to be used when drawing items.
+ * @param aSettings are settings to be applied.
+ */
+ virtual void ApplySettings( const RENDER_SETTINGS* aSettings ) = 0;
+
+ /**
+ * Function GetSettings
+ * Returns pointer to current settings that are going to be used when drawing items.
+ * @return Current rendering settings.
+ */
+ virtual RENDER_SETTINGS* GetSettings() = 0;
+
+ /**
+ * Function Draw
+ * Takes an instance of VIEW_ITEM and passes it to a function that know how to draw the item.
+ * @param aItem is an item to be drawn.
+ * @param aLayer tells which layer is currently rendered so that draw functions
+ * may know what to draw (eg. for pads there are separate layers for holes, because they
+ * have other dimensions then the pad itself.
+ */
+ virtual bool Draw( const VIEW_ITEM* aItem, int aLayer ) = 0;
+
+protected:
+ /// Instance of graphic abstraction layer that gives an interface to call
+ /// commands used to draw (eg. DrawLine, DrawCircle, etc.)
+ GAL* m_gal;
+
+ /// Color of brightened item frame
+ COLOR4D m_brightenedColor;
+};
+} // namespace KIGFX
+
+#endif /* __CLASS_PAINTER_H */
diff --git a/include/pcbcommon.h b/include/pcbcommon.h
new file mode 100644
index 0000000..7dbb5b6
--- /dev/null
+++ b/include/pcbcommon.h
@@ -0,0 +1,42 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file pcbcommon.h
+ */
+
+#ifndef PCBCOMMON_H_
+#define PCBCOMMON_H_
+
+class PGM_BASE;
+
+
+/// Utility for comma separated lists
+inline void AccumulateDescription( wxString &aDesc, const wxString &aItem )
+{
+ if( !aDesc.IsEmpty() )
+ aDesc << wxT(", ");
+ aDesc << aItem;
+}
+
+#endif // PCBCOMMON_H_
diff --git a/include/pcbstruct.h b/include/pcbstruct.h
new file mode 100644
index 0000000..4920709
--- /dev/null
+++ b/include/pcbstruct.h
@@ -0,0 +1,106 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file pcbstruct.h
+ * @brief Classes and definitions used in Pcbnew.
+ */
+
+#ifndef PCBSTRUCT_H_
+#define PCBSTRUCT_H_
+
+
+/// Values for m_DisplayViaMode member:
+enum VIA_DISPLAY_MODE_T {
+ VIA_HOLE_NOT_SHOW = 0,
+ VIA_SPECIAL_HOLE_SHOW,
+ ALL_VIA_HOLE_SHOW,
+ OPT_VIA_HOLE_END
+};
+
+
+/**
+ * Enum TRACE_CLEARANCE_DISPLAY_MODE_T
+ * is the set of values for DISPLAY_OPTIONS.ShowTrackClearanceMode parameter option.
+ * This parameter controls how to show tracks and vias clearance area.
+ */
+enum TRACE_CLEARANCE_DISPLAY_MODE_T {
+ DO_NOT_SHOW_CLEARANCE = 0, // Do not show clearance areas
+ SHOW_CLEARANCE_NEW_TRACKS, /* Show clearance areas only for new track
+ * during track creation. */
+ SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS, /* Show clearance areas only for new track
+ * during track creation, and shows a via
+ * clearance area at end of current new
+ * segment (guide to place a new via
+ */
+ SHOW_CLEARANCE_NEW_AND_EDITED_TRACKS_AND_VIA_AREAS,
+ /* Show clearance for new, moving and
+ * dragging tracks and vias
+ */
+ SHOW_CLEARANCE_ALWAYS /* Show Always clearance areas
+ * for track and vias
+ */
+};
+
+
+/**
+ * Class DISPLAY_OPTIONS
+ * handles display options like enable/disable some optional drawings.
+ */
+class DISPLAY_OPTIONS
+{
+public:
+ bool m_DisplayPadFill;
+ bool m_DisplayViaFill;
+ bool m_DisplayPadNum; // show pads numbers
+ bool m_DisplayPadIsol;
+ bool m_DisplayModEdgeFill; // How to display module drawings ( sketch/ filled )
+ bool m_DisplayModTextFill; // How to display module texts ( sketch/ filled )
+ bool m_DisplayPcbTrackFill; // false : tracks are show in sketch mode, true = filled.
+
+ /// How trace clearances are displayed. @see TRACE_CLEARANCE_DISPLAY_MODE_T.
+ TRACE_CLEARANCE_DISPLAY_MODE_T m_ShowTrackClearanceMode;
+
+ VIA_DISPLAY_MODE_T m_DisplayViaMode; /* 0 do not show via hole,
+ * 1 show via hole for non default value
+ * 2 show all via hole */
+
+ bool m_DisplayPolarCood;
+ int m_DisplayZonesMode;
+ int m_DisplayNetNamesMode; /* 0 do not show netnames,
+ * 1 show netnames on pads
+ * 2 show netnames on tracks
+ * 3 show netnames on tracks and pads
+ */
+
+ bool m_DisplayDrawItemsFill; // How to display graphic items on board ( sketch/ filled )
+ bool m_ContrastModeDisplay;
+ int m_MaxLinksShowed; // in track creation: number of hairwires shown
+ bool m_Show_Module_Ratsnest; // When moving a footprint: allows displaying a ratsnest
+
+public:
+ DISPLAY_OPTIONS();
+};
+
+#endif // PCBSTRUCT_H_
diff --git a/include/pgm_base.h b/include/pgm_base.h
new file mode 100644
index 0000000..0c6d6c3
--- /dev/null
+++ b/include/pgm_base.h
@@ -0,0 +1,372 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file pgm_base.h
+ * @brief see class PGM_BASE
+ */
+
+#ifndef PGM_BASE_H_
+#define PGM_BASE_H_
+
+#include <map>
+#include <wx/filename.h>
+#include <search_stack.h>
+#include <wx/gdicmn.h>
+
+
+class wxConfigBase;
+class wxSingleInstanceChecker;
+class wxApp;
+class wxMenu;
+class wxWindow;
+
+
+// inter program module calling
+#define VTBL_ENTRY virtual
+
+
+/**
+ * Class ENV_VAR_ITEM
+ *
+ * is a simple helper class to store environment variable values and the status of whether
+ * or not they were defined externally to the process created when any of the KiCad applications
+ * was launched.
+ */
+class ENV_VAR_ITEM
+{
+public:
+ ENV_VAR_ITEM( const wxString& aValue = wxEmptyString, bool aIsDefinedExternally = false ) :
+ m_value( aValue ),
+ m_isDefinedExternally( aIsDefinedExternally )
+ {
+ }
+
+ bool GetDefinedExternally() const { return m_isDefinedExternally; }
+ void SetDefinedExternally( bool aIsDefinedExternally )
+ {
+ m_isDefinedExternally = aIsDefinedExternally;
+ }
+
+ const wxString& GetValue() const { return m_value; }
+ void SetValue( const wxString& aValue ) { m_value = aValue; }
+
+private:
+ /// The environment variable string value.
+ wxString m_value;
+
+ /// Flag to indicate if the environment variable was defined externally to the process.
+ bool m_isDefinedExternally;
+};
+
+
+typedef std::map<wxString, ENV_VAR_ITEM> ENV_VAR_MAP;
+typedef std::map<wxString, ENV_VAR_ITEM>::iterator ENV_VAR_MAP_ITER;
+typedef std::map<wxString, ENV_VAR_ITEM>::const_iterator ENV_VAR_MAP_CITER;
+
+
+/**
+ * Class PGM_BASE
+ * keeps program (whole process) data for KiCad programs.
+ * The VTBL_ENTRY functions are VTBL_ENTRY so we can do cross module calls
+ * without linking to them. This used to be a wxApp derivative, but that
+ * is difficult under wxPython which shapes the wxApp. So now this is a "side-car"
+ * (like a motorcycle side-car) object with a back pointer into the wxApp
+ * which initializes it.
+ * <p>
+ * OnPgmStart() is virtual, may be overridden, and parallels
+ * wxApp::OnInit(), from where it should called.
+ * <p>
+ * OnPgmEnd() is virtual, may be overridden, and parallels wxApp::OnExit(),
+ * from where it should be called.
+ */
+class PGM_BASE
+{
+public:
+ PGM_BASE();
+ ~PGM_BASE();
+
+ /**
+ * Function OnPgmInit
+ * this is the first executed function (like main() )
+ * @return true if the application can be started.
+ */
+ virtual bool OnPgmInit( wxApp* aWxApp ) = 0; // call this from wxApp::OnInit()
+
+ virtual void OnPgmExit() = 0; // call this from wxApp::OnExit()
+
+ /**
+ * Function MacOpenFile
+ * is specific to MacOSX (not used under Linux or Windows).
+ * MacOSX requires it for file association.
+ * @see http://wiki.wxwidgets.org/WxMac-specific_topics
+ */
+ virtual void MacOpenFile( const wxString& aFileName ) = 0;
+
+ //----<Cross Module API>-----------------------------------------------------
+
+ VTBL_ENTRY wxConfigBase* CommonSettings() const { return m_common_settings; }
+
+ VTBL_ENTRY void SetEditorName( const wxString& aFileName );
+
+ /**
+ * Return the preferred editor name.
+ * @param aCanShowFileChooser If no editor is currently set and this argument is
+ * 'true' then this method will show a file chooser dialog asking for the
+ * editor's executable.
+ * @return Returns the full path of the editor, or an empty string if no editor has
+ * been set.
+ */
+ VTBL_ENTRY const wxString& GetEditorName( bool aCanShowFileChooser = true );
+
+ /**
+ * Shows a dialog that instructs the user to select a new preferred editor.
+ * @param aDefaultEditor Default full path for the default editor this dialog should
+ * show by default.
+ * @return Returns the full path of the editor, or an empty string if no editor was
+ * chosen.
+ */
+ VTBL_ENTRY const wxString AskUserForPreferredEditor(
+ const wxString& aDefaultEditor = wxEmptyString );
+
+ VTBL_ENTRY bool IsKicadEnvVariableDefined() const { return !m_kicad_env.IsEmpty(); }
+
+ VTBL_ENTRY const wxString& GetKicadEnvVariable() const { return m_kicad_env; }
+
+ VTBL_ENTRY const wxString& GetExecutablePath() const { return m_bin_dir; }
+
+ VTBL_ENTRY wxLocale* GetLocale() { return m_locale; }
+
+ VTBL_ENTRY const wxString& GetPdfBrowserName() const { return m_pdf_browser; }
+
+ VTBL_ENTRY void SetPdfBrowserName( const wxString& aFileName ) { m_pdf_browser = aFileName; }
+
+ /**
+ * Function UseSystemPdfBrowser
+ * returns true if the PDF browser is the default (system) PDF browser
+ * and false if the PDF browser is the preferred (selected) browser, else
+ * returns false if there is no selected browser
+ */
+ VTBL_ENTRY bool UseSystemPdfBrowser() const
+ {
+ return m_use_system_pdf_browser || m_pdf_browser.IsEmpty();
+ }
+
+ /**
+ * Function ForceSystemPdfBrowser
+ * forces the use of system PDF browser, even if a preferred PDF browser is set.
+ */
+ VTBL_ENTRY void ForceSystemPdfBrowser( bool aFlg ) { m_use_system_pdf_browser = aFlg; }
+
+ /**
+ * Function SetLanguage
+ * sets the dictionary file name for internationalization.
+ * <p>
+ * The files are in kicad/internat/xx or kicad/internat/xx_XX and are named kicad.mo
+ * </p>
+ * @param first_time must be set to true the first time this funct is
+ * called, false otherwise
+ * @return true if the language can be set (i.e. if the locale is available)
+ */
+ VTBL_ENTRY bool SetLanguage( bool first_time = false );
+
+ /**
+ * Function AddMenuLanguageList
+ * creates a menu list for language choice, and add it as submenu to \a MasterMenu.
+ *
+ * @param MasterMenu The main menu. The sub menu list will be accessible from the menu
+ * item with id ID_LANGUAGE_CHOICE
+ */
+ VTBL_ENTRY void AddMenuLanguageList( wxMenu* MasterMenu );
+
+ /**
+ * Function SetLanguageIdentifier
+ * sets in .m_language_id member the wxWidgets language identifier Id from
+ * the KiCad menu id (internal menu identifier).
+ *
+ * @param menu_id The KiCad menuitem id (returned by Menu Event, when
+ * clicking on a menu item)
+ */
+ VTBL_ENTRY void SetLanguageIdentifier( int menu_id );
+
+ VTBL_ENTRY void SetLanguagePath();
+
+ /**
+ * Function ReadPdfBrowserInfos
+ * reads the PDF browser choice from the common configuration.
+ */
+ VTBL_ENTRY void ReadPdfBrowserInfos();
+
+ /**
+ * Function WritePdfBrowserInfos
+ * saves the PDF browser choice to the common configuration.
+ */
+ VTBL_ENTRY void WritePdfBrowserInfos();
+
+ /**
+ * Function SetLocalEnvVariable
+ *
+ * Sets the environment variable \a aName to \a aValue.
+ *
+ * This function first checks to see if the environment variable \a aName is already
+ * defined. If it is not defined, then the environment variable \a aName is set to
+ * a value. Otherwise, the environment variable is left unchanged. This allows the user
+ * to override environment variables for testing purposes.
+ *
+ * @param aName is a wxString containing the environment variable name.
+ * @param aValue is a wxString containing the environment variable value.
+ * @return true if the environment variable \a Name was set to \a aValue.
+ */
+ VTBL_ENTRY bool SetLocalEnvVariable( const wxString& aName, const wxString& aValue );
+
+ /**
+ * Function SetLocalEnvVariables
+ *
+ * sets the internal local environment variable map to \a aEnvVarMap, updates the entries
+ * in the .kicad_common configuration file, and sets the environment variable to the new
+ * settings.
+ *
+ * @param aEnvVarMap is a ENV_VAR_MAP object containing the new environment variables.
+ */
+ VTBL_ENTRY void SetLocalEnvVariables( const ENV_VAR_MAP& aEnvVarMap );
+
+ VTBL_ENTRY const ENV_VAR_MAP& GetLocalEnvVariables() const
+ {
+ return m_local_env_vars;
+ }
+
+ /**
+ * Function ConfigurePaths
+ *
+ * presents a dialog to the user to edit local environment variable settings for use in
+ * the footprint library table and the 3D model importer. It was added to PGM_BASE because
+ * it will eventually find use for in schematic I/O design so it needs to accessible by
+ * almost every KiCad application.
+ *
+ * @param aParent - a pointer the wxWindow parent of the dialog or NULL to use the top level
+ * window.
+ */
+ VTBL_ENTRY void ConfigurePaths( wxWindow* aParent = NULL );
+
+ /**
+ * Function App
+ * returns a bare naked wxApp, which may come from wxPython, SINGLE_TOP, or kicad.exe.
+ * Use this function instead of wxGetApp().
+ */
+ VTBL_ENTRY wxApp& App()
+ {
+ wxASSERT( m_wx_app );
+ return *m_wx_app;
+ }
+
+ //----</Cross Module API>----------------------------------------------------
+
+ static const wxChar workingDirKey[];
+
+protected:
+
+ /**
+ * Function initPgm
+ * initializes this program (process) in a KiCad standard way,
+ * using some generalized techniques.
+ * - Default paths (help, libs, bin) and configuration file names
+ * - Language and locale
+ * - fonts
+ * <p>
+ * But nothing relating to DSOs or projects.
+ * @return bool - true if success, false if failure and program is to terminate.
+ */
+ bool initPgm();
+
+ /**
+ * Function loadCommonSettings
+ * loads the program (process) settings subset which are stored in .kicad_common
+ */
+ void loadCommonSettings();
+
+ /**
+ * Function saveCommonSettings
+ * saves the program (process) settings subset which are stored .kicad_common
+ */
+ void saveCommonSettings();
+
+ /// prevents multiple instances of a program from being run at the same time.
+ wxSingleInstanceChecker* m_pgm_checker;
+
+ /// Configuration settings common to all KiCad program modules,
+ /// like as in $HOME/.kicad_common
+ wxConfigBase* m_common_settings;
+
+ /// full path to this program
+ wxString m_bin_dir;
+
+ /// The KICAD system environment variable.
+ wxString m_kicad_env;
+
+ /// The current locale.
+ wxLocale* m_locale;
+
+ /// The current language setting.
+ int m_language_id;
+
+ /// true to use the selected PDF browser, if exists, or false to use the default
+ bool m_use_system_pdf_browser;
+
+ /// Trap all changes in here, simplifies debugging
+ void setLanguageId( int aId ) { m_language_id = aId; }
+
+ /**
+ * Function setExecutablePath
+ * finds the path to the executable and stores it in PGM_BASE::m_bin_dir
+ * @return bool - true if success, else false.
+ */
+ bool setExecutablePath();
+
+ /// The file name of the the program selected for browsing pdf files.
+ wxString m_pdf_browser;
+ wxString m_editor_name;
+ wxSize m_help_size;
+
+ /// Local environment variable expansion settings such as KIGITHUB, KISYSMOD, and KISYS3DMOD.
+ ENV_VAR_MAP m_local_env_vars;
+
+ /// Flag to indicate if the environment variable overwrite warning dialog should be shown.
+ bool m_show_env_var_dialog;
+
+ wxApp* m_wx_app;
+
+ // The PGM_* classes can have difficulties at termination if they
+ // are not destroyed soon enough. Relying on a static destructor can be
+ // too late for contained objects like wxSingleInstanceChecker.
+ void destroy();
+};
+
+
+#if !defined(PGM_KICAD_H_) // PGM_KICAD has an alternate
+/// The global Program "get" accessor.
+extern PGM_BASE& Pgm();
+#endif
+
+#endif // PGM_BASE_H_
diff --git a/include/plot_common.h b/include/plot_common.h
new file mode 100644
index 0000000..334b955
--- /dev/null
+++ b/include/plot_common.h
@@ -0,0 +1,1104 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * Common plot library \n
+ * Plot settings, and plotting engines (Postscript, Gerber, HPGL and DXF)
+ *
+ * @file plot_common.h
+ */
+
+#ifndef PLOT_COMMON_H_
+#define PLOT_COMMON_H_
+
+#include <vector>
+#include <math/box2.h>
+#include <drawtxt.h>
+#include <class_page_info.h>
+#include <eda_text.h> // FILL_T
+
+/**
+ * Enum PlotFormat
+ * is the set of supported output plot formats. They should be kept in order
+ * of the radio buttons in the plot panel/windows.
+ */
+enum PlotFormat {
+ PLOT_FIRST_FORMAT = 0,
+ PLOT_FORMAT_HPGL = PLOT_FIRST_FORMAT,
+ PLOT_FORMAT_GERBER,
+ PLOT_FORMAT_POST,
+ PLOT_FORMAT_DXF,
+ PLOT_FORMAT_PDF,
+ PLOT_FORMAT_SVG,
+ PLOT_LAST_FORMAT = PLOT_FORMAT_SVG
+};
+
+/**
+ * Enum for choosing which kind of text to output with the PSLIKE
+ * plotters. You can:
+ * 1) only use the internal vector font
+ * 2) only use native postscript fonts
+ * 3) use the internal vector font and add 'phantom' text to aid
+ * searching
+ * 4) keep the default for the plot driver
+ *
+ * This is recognized by the DXF driver too, where NATIVE emits
+ * TEXT entities instead of stroking the text
+ */
+enum PlotTextMode {
+ PLOTTEXTMODE_STROKE,
+ PLOTTEXTMODE_NATIVE,
+ PLOTTEXTMODE_PHANTOM,
+ PLOTTEXTMODE_DEFAULT
+};
+
+
+/**
+ * Base plotter engine class. General rule: all the interface with the caller
+ * is done in IU, the IU size is specified with SetViewport. Internal and
+ * output processing is usually done in decimils (or whatever unit the
+ * effective engine class need to use)
+ */
+class PLOTTER
+{
+private:
+ double m_dashMarkLength_mm ; ///< Dashed line parameter in mm: segment
+ double m_dashGapLength_mm; ///< Dashed line parameter in mm: gap
+
+public:
+ static const int USE_DEFAULT_LINE_WIDTH = -1;
+
+ PLOTTER();
+
+ virtual ~PLOTTER();
+
+ /**
+ * Returns the effective plot engine in use. It's not very OO but for
+ * now is required since some things are only done with some output devices
+ * (like drill marks, emitted only for postscript
+ */
+ virtual PlotFormat GetPlotterType() const = 0;
+
+ virtual bool StartPlot() = 0;
+ virtual bool EndPlot() = 0;
+
+ virtual void SetNegative( bool _negative )
+ {
+ negativeMode = _negative;
+ }
+
+ virtual void SetColorMode( bool _color_mode )
+ {
+ colorMode = _color_mode;
+ }
+
+ bool GetColorMode() const
+ {
+ return colorMode;
+ }
+
+ virtual void SetPageSettings( const PAGE_INFO& aPageSettings );
+
+ /**
+ * Set the line width for the next drawing.
+ * @param width is specified in IUs
+ */
+ virtual void SetCurrentLineWidth( int width ) = 0;
+
+ /**
+ * Set the default line width. Used at the beginning and when a width
+ * of -1 (USE_DEFAULT_LINE_WIDTH) is requested.
+ * @param width is specified in IUs
+ */
+ virtual void SetDefaultLineWidth( int width ) = 0;
+
+ virtual int GetCurrentLineWidth() const
+ {
+ return currentPenWidth;
+ }
+
+ virtual void SetColor( EDA_COLOR_T color ) = 0;
+
+ virtual void SetDash( bool dashed ) = 0;
+
+ virtual void SetCreator( const wxString& aCreator )
+ {
+ creator = aCreator;
+ }
+
+ /**
+ * Function AddLineToHeader
+ * Add a line to the list of free lines to print at the beginning of the file
+ * @param aExtraString is the string to print
+ */
+ void AddLineToHeader( const wxString& aExtraString )
+ {
+ m_headerExtraLines.Add( aExtraString );
+ }
+
+ /**
+ * Function ClearHeaderLinesList
+ * remove all lines from the list of free lines to print at the beginning of the file
+ */
+ void ClearHeaderLinesList()
+ {
+ m_headerExtraLines.Clear();
+ }
+
+ /**
+ * Set the plot offset and scaling for the current plot
+ * @param aOffset is the plot offset
+ * @param aIusPerDecimil gives the scaling factor from IUs to device units
+ * @param aScale is the user set plot scaling factor (either explicitly
+ * or using 'fit to A4')
+ * @param aMirror flips the plot in the Y direction (useful for toner
+ * transfers or some kind of film)
+ */
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror ) = 0;
+
+ /**
+ * Open or create the plot file aFullFilename
+ * @param aFullFilename = the full file name of the file to create
+ * @return true if success, false if the file cannot be created/opened
+ *
+ * Virtual because some plotters use ascii files, some others binary files (PDF)
+ * The base class open the file in text mode
+ */
+ virtual bool OpenFile( const wxString& aFullFilename );
+
+ /**
+ * The IUs per decimil are an essential scaling factor when
+ * plotting; they are set and saved when establishing the viewport.
+ * Here they can be get back again
+ */
+ double GetIUsPerDecimil() const { return m_IUsPerDecimil; }
+
+ // Low level primitives
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH ) = 0;
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH ) = 0;
+
+ /**
+ * Generic fallback: arc rendered as a polyline
+ */
+ virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH );
+
+ /**
+ * moveto/lineto primitive, moves the 'pen' to the specified direction
+ * @param pos is the target position
+ * @param plume specifies the kind of motion: 'U' only moves the pen,
+ * 'D' draw a line from the current position and 'Z' finish
+ * the drawing and returns the 'pen' to rest (flushes the trace)
+ */
+ virtual void PenTo( const wxPoint& pos, char plume ) = 0;
+
+ // Convenience functions for PenTo
+ void MoveTo( const wxPoint& pos )
+ {
+ PenTo( pos, 'U' );
+ }
+
+ void LineTo( const wxPoint& pos )
+ {
+ PenTo( pos, 'D' );
+ }
+
+ void FinishTo( const wxPoint& pos )
+ {
+ PenTo( pos, 'D' );
+ PenTo( pos, 'Z' );
+ }
+
+ void PenFinish()
+ {
+ // The point is not important with Z motion
+ PenTo( wxPoint( 0, 0 ), 'Z' );
+ }
+
+ /**
+ * Function PlotPoly
+ * @brief Draw a polygon ( filled or not )
+ * @param aCornerList = corners list
+ * @param aFill = type of fill
+ * @param aWidth = line width
+ */
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill,
+ int aWidth = USE_DEFAULT_LINE_WIDTH ) = 0;
+
+ /**
+ * Function PlotImage
+ * Only Postscript plotters can plot bitmaps
+ * for plotters that cannot plot a bitmap, a rectangle is plotted
+ * @brief Draw an image bitmap
+ * @param aImage = the bitmap
+ * @param aPos = position of the center of the bitmap
+ * @param aScaleFactor = the scale factor to apply to the bitmap size
+ * (this is not the plot scale factor)
+ */
+ virtual void PlotImage( const wxImage & aImage, const wxPoint& aPos,
+ double aScaleFactor );
+
+ // Higher level primitives -- can be drawn as line, sketch or 'filled'
+ virtual void ThickSegment( const wxPoint& start, const wxPoint& end, int width,
+ EDA_DRAW_MODE_T tracemode );
+ virtual void ThickArc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, int width, EDA_DRAW_MODE_T tracemode );
+ virtual void ThickRect( const wxPoint& p1, const wxPoint& p2, int width,
+ EDA_DRAW_MODE_T tracemode );
+ virtual void ThickCircle( const wxPoint& pos, int diametre, int width,
+ EDA_DRAW_MODE_T tracemode );
+
+ // Flash primitives
+ virtual void FlashPadCircle( const wxPoint& aPadPos, int aDiameter,
+ EDA_DRAW_MODE_T aTraceMode ) = 0;
+ virtual void FlashPadOval( const wxPoint& aPadPos, const wxSize& aSize, double aPadOrient,
+ EDA_DRAW_MODE_T aTraceMode ) = 0;
+ virtual void FlashPadRect( const wxPoint& aPadPos, const wxSize& aSize,
+ double aPadOrient, EDA_DRAW_MODE_T aTraceMode ) = 0;
+
+ /** virtual function FlashPadTrapez
+ * flash a trapezoidal pad
+ * @param aPadPos = the position of the shape
+ * @param aCorners = the list of 4 corners positions,
+ * relative to the shape position, pad orientation 0
+ * @param aPadOrient = the rotation of the shape
+ * @param aTrace_Mode = FILLED or SKETCH
+ */
+ virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTraceMode ) = 0;
+
+
+ /**
+ * Draws text with the plotter. For convenience it accept the color to use
+ */
+ virtual void Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed = false );
+
+ /**
+ * Draw a marker (used for the drill map)
+ */
+ static const unsigned MARKER_COUNT = 58;
+
+ /**
+ * Draw a pattern shape number aShapeId, to coord x0, y0.
+ * x0, y0 = coordinates tables
+ * Diameter diameter = (coord table) hole
+ * AShapeId = index (used to generate forms characters)
+ */
+ void Marker( const wxPoint& position, int diametre, unsigned aShapeId );
+
+ /**
+ * Function SetLayerPolarity
+ * sets current Gerber layer polarity to positive or negative
+ * by writing \%LPD*\% or \%LPC*\% to the Gerber file, respectively.
+ * (obviously starts a new Gerber layer, too)
+ * @param aPositive is the layer polarity and true for positive.
+ * It's not useful with most other plotter since they can't 'scratch'
+ * the film like photoplotter imagers do
+ */
+ virtual void SetLayerPolarity( bool aPositive )
+ {
+ // NOP for most plotters
+ }
+
+ /**
+ * Change the current text mode. See the PlotTextMode
+ * explanation at the beginning of the file
+ */
+ virtual void SetTextMode( PlotTextMode mode )
+ {
+ // NOP for most plotters.
+ }
+
+ virtual void SetGerberCoordinatesFormat( int aResolution, bool aUseInches = false )
+ {
+ // NOP for most plotters. Only for Gerber plotter
+ }
+
+protected:
+ // These are marker subcomponents
+ /**
+ * Plot a circle centered on the position. Building block for markers
+ */
+ void markerCircle( const wxPoint& pos, int radius );
+
+ /**
+ * Plot a - bar centered on the position. Building block for markers
+ */
+ void markerHBar( const wxPoint& pos, int radius );
+
+ /**
+ * Plot a / bar centered on the position. Building block for markers
+ */
+ void markerSlash( const wxPoint& pos, int radius );
+
+ /**
+ * Plot a \ bar centered on the position. Building block for markers
+ */
+ void markerBackSlash( const wxPoint& pos, int radius );
+
+ /**
+ * Plot a | bar centered on the position. Building block for markers
+ */
+ void markerVBar( const wxPoint& pos, int radius );
+
+ /**
+ * Plot a square centered on the position. Building block for markers
+ */
+ void markerSquare( const wxPoint& position, int radius );
+
+ /**
+ * Plot a lozenge centered on the position. Building block for markers
+ */
+ void markerLozenge( const wxPoint& position, int radius );
+
+ // Helper function for sketched filler segment
+
+ /**
+ * Cdonvert a thick segment and plot it as an oval
+ */
+ void segmentAsOval( const wxPoint& start, const wxPoint& end, int width,
+ EDA_DRAW_MODE_T tracemode );
+
+ void sketchOval( const wxPoint& pos, const wxSize& size, double orient, int width );
+
+ // Coordinate and scaling conversion functions
+
+ /**
+ * Modifies coordinates according to the orientation,
+ * scale factor, and offsets trace. Also convert from a wxPoint to DPOINT,
+ * since some output engines needs floating point coordinates.
+ */
+ virtual DPOINT userToDeviceCoordinates( const wxPoint& aCoordinate );
+
+ /**
+ * Modifies size according to the plotter scale factors
+ * (wxSize version, returns a DPOINT)
+ */
+ virtual DPOINT userToDeviceSize( const wxSize& size );
+
+ /**
+ * Modifies size according to the plotter scale factors
+ * (simple double version)
+ */
+ virtual double userToDeviceSize( double size ) const;
+
+ double GetDashMarkLenIU() const;
+
+ double GetDashGapLenIU() const;
+
+protected: // variables used in most of plotters:
+ /// Plot scale - chosen by the user (even implicitly with 'fit in a4')
+ double plotScale;
+
+ /* Caller scale (how many IUs in a decimil - always); it's a double
+ * because in eeschema there are 0.1 IUs in a decimil (eeschema
+ * always works in mils internally) while pcbnew can work in decimil
+ * or nanometers, so this value would be >= 1 */
+ double m_IUsPerDecimil;
+
+ /// Device scale (from IUs to plotter device units - usually decimils)
+ double iuPerDeviceUnit;
+
+ /// Plot offset (in IUs)
+ wxPoint plotOffset;
+
+ /// X axis orientation (SVG)
+ /// and plot mirrored (only for PS, PDF HPGL and SVG)
+ bool m_plotMirror;
+ bool m_mirrorIsHorizontal; /// true to mirror horizontally (else vertically)
+ bool m_yaxisReversed; /// true if the Y axis is top to bottom (SVG)
+
+ /// Output file
+ FILE* outputFile;
+
+ // Pen handling
+ bool colorMode; /// true to plot in color, false to plot in black and white
+ bool negativeMode; /// true to generate a negative image (PS mode mainly)
+ int defaultPenWidth;
+ int currentPenWidth;
+ /// Current pen state: 'U', 'D' or 'Z' (see PenTo)
+ char penState;
+ /// Last pen positions; set to -1,-1 when the pen is at rest
+ wxPoint penLastpos;
+ wxString creator;
+ wxString filename;
+ PAGE_INFO pageInfo;
+ /// Paper size in IU - not in mils
+ wxSize paperSize;
+
+ wxArrayString m_headerExtraLines; /// a set of string to print in header file
+};
+
+
+class HPGL_PLOTTER : public PLOTTER
+{
+public:
+ HPGL_PLOTTER();
+
+ virtual PlotFormat GetPlotterType() const
+ {
+ return PLOT_FORMAT_HPGL;
+ }
+
+ static wxString GetDefaultFileExtension()
+ {
+ return wxString( wxT( "plt" ) );
+ }
+
+ virtual bool StartPlot();
+ virtual bool EndPlot();
+
+ /// HPGL doesn't handle line thickness or color
+ virtual void SetCurrentLineWidth( int width )
+ {
+ // This is the truth
+ currentPenWidth = userToDeviceSize( penDiameter );
+ }
+
+ virtual void SetDefaultLineWidth( int width ) {};
+ virtual void SetDash( bool dashed );
+
+ virtual void SetColor( EDA_COLOR_T color ) {};
+
+ virtual void SetPenSpeed( int speed )
+ {
+ penSpeed = speed;
+ }
+
+ virtual void SetPenNumber( int number )
+ {
+ penNumber = number;
+ }
+
+ virtual void SetPenDiameter( double diameter )
+ {
+ penDiameter = diameter;
+ }
+
+ virtual void SetPenOverlap( double overlap )
+ {
+ penOverlap = overlap;
+ }
+
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror );
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH);
+
+ virtual void ThickSegment( const wxPoint& start, const wxPoint& end, int width,
+ EDA_DRAW_MODE_T tracemode );
+ virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void PenTo( const wxPoint& pos, char plume );
+ virtual void FlashPadCircle( const wxPoint& pos, int diametre,
+ EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadOval( const wxPoint& pos, const wxSize& size, double orient,
+ EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadRect( const wxPoint& pos, const wxSize& size,
+ double orient, EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode );
+
+protected:
+ void penControl( char plume );
+
+ int penSpeed;
+ int penNumber;
+ double penDiameter;
+ double penOverlap;
+};
+
+/**
+ * The PSLIKE_PLOTTER class is an intermediate class to handle common
+ * routines for engines working more or less with the postscript imaging
+ * model
+ */
+class PSLIKE_PLOTTER : public PLOTTER
+{
+public:
+ PSLIKE_PLOTTER() : plotScaleAdjX( 1 ), plotScaleAdjY( 1 ),
+ m_textMode( PLOTTEXTMODE_PHANTOM )
+ {
+ }
+
+ /**
+ * PS and PDF fully implement native text (for the Latin-1 subset)
+ */
+ virtual void SetTextMode( PlotTextMode mode )
+ {
+ if( mode != PLOTTEXTMODE_DEFAULT )
+ m_textMode = mode;
+ }
+
+ virtual void SetDefaultLineWidth( int width );
+
+ /**
+ * Set the 'fine' scaling for the postscript engine
+ */
+ void SetScaleAdjust( double scaleX, double scaleY )
+ {
+ plotScaleAdjX = scaleX;
+ plotScaleAdjY = scaleY;
+ }
+
+ // Pad routines are handled with lower level primitives
+ virtual void FlashPadCircle( const wxPoint& pos, int diametre,
+ EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadOval( const wxPoint& pos, const wxSize& size, double orient,
+ EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadRect( const wxPoint& pos, const wxSize& size,
+ double orient, EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode );
+
+ /** The SetColor implementation is split with the subclasses:
+ * The PSLIKE computes the rgb values, the subclass emits the
+ * operator to actually do it
+ */
+ virtual void SetColor( EDA_COLOR_T color );
+
+protected:
+ void computeTextParameters( const wxPoint& aPos,
+ const wxString& aText,
+ int aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ double *wideningFactor,
+ double *ctm_a,
+ double *ctm_b,
+ double *ctm_c,
+ double *ctm_d,
+ double *ctm_e,
+ double *ctm_f,
+ double *heightFactor );
+ void postscriptOverlinePositions( const wxString& aText, int aXSize,
+ bool aItalic, bool aBold,
+ std::vector<int> *pos_pairs );
+ void fputsPostscriptString(FILE *fout, const wxString& txt);
+
+ /// Virtual primitive for emitting the setrgbcolor operator
+ virtual void emitSetRGBColor( double r, double g, double b ) = 0;
+
+ /// Height of the postscript font (from the AFM)
+ static const double postscriptTextAscent; // = 0.718;
+
+ int returnPostscriptTextWidth( const wxString& aText, int aXSize,
+ bool aItalic, bool aBold );
+
+ /// Fine user scale adjust ( = 1.0 if no correction)
+ double plotScaleAdjX, plotScaleAdjY;
+
+ /// How to draw text
+ PlotTextMode m_textMode;
+};
+
+
+class PS_PLOTTER : public PSLIKE_PLOTTER
+{
+public:
+ PS_PLOTTER()
+ {
+ // The phantom plot in postscript is an hack and reportedly
+ // crashes Adobe's own postscript interpreter!
+ m_textMode = PLOTTEXTMODE_STROKE;
+ }
+
+ static wxString GetDefaultFileExtension()
+ {
+ return wxString( wxT( "ps" ) );
+ }
+
+ virtual PlotFormat GetPlotterType() const
+ {
+ return PLOT_FORMAT_POST;
+ }
+
+ virtual bool StartPlot();
+ virtual bool EndPlot();
+ virtual void SetCurrentLineWidth( int width );
+ virtual void SetDash( bool dashed );
+
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror );
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH );
+
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH );
+
+ virtual void PlotImage( const wxImage& aImage, const wxPoint& aPos,
+ double aScaleFactor );
+
+ virtual void PenTo( const wxPoint& pos, char plume );
+ virtual void Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed = false );
+protected:
+ virtual void emitSetRGBColor( double r, double g, double b );
+};
+
+class PDF_PLOTTER : public PSLIKE_PLOTTER
+{
+public:
+ PDF_PLOTTER() : pageStreamHandle( 0 ), workFile( NULL )
+ {
+ // Avoid non initialized variables:
+ pageStreamHandle = streamLengthHandle = fontResDictHandle = 0;
+ pageTreeHandle = 0;
+ }
+
+ virtual PlotFormat GetPlotterType() const
+ {
+ return PLOT_FORMAT_PDF;
+ }
+
+ static wxString GetDefaultFileExtension()
+ {
+ return wxString( wxT( "pdf" ) );
+ }
+
+ /**
+ * Open or create the plot file aFullFilename
+ * @param aFullFilename = the full file name of the file to create
+ * @return true if success, false if the file cannot be created/opened
+ *
+ * The base class open the file in text mode, so we should have this
+ * function overlaid for PDF files, which are binary files
+ */
+ virtual bool OpenFile( const wxString& aFullFilename );
+
+ virtual bool StartPlot();
+ virtual bool EndPlot();
+ virtual void StartPage();
+ virtual void ClosePage();
+ virtual void SetCurrentLineWidth( int width );
+ virtual void SetDash( bool dashed );
+
+ /** PDF can have multiple pages, so SetPageSettings can be called
+ * with the outputFile open (but not inside a page stream!) */
+ virtual void SetPageSettings( const PAGE_INFO& aPageSettings );
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror );
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH );
+
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH);
+
+ virtual void PenTo( const wxPoint& pos, char plume );
+
+ virtual void Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed = false );
+
+ virtual void PlotImage( const wxImage& aImage, const wxPoint& aPos,
+ double aScaleFactor );
+
+
+protected:
+ virtual void emitSetRGBColor( double r, double g, double b );
+ int allocPdfObject();
+ int startPdfObject(int handle = -1);
+ void closePdfObject();
+ int startPdfStream(int handle = -1);
+ void closePdfStream();
+ int pageTreeHandle; /// Handle to the root of the page tree object
+ int fontResDictHandle; /// Font resource dictionary
+ std::vector<int> pageHandles;/// Handles to the page objects
+ int pageStreamHandle; /// Handle of the page content object
+ int streamLengthHandle; /// Handle to the deferred stream length
+ wxString workFilename;
+ FILE* workFile; /// Temporary file to costruct the stream before zipping
+ std::vector<long> xrefTable; /// The PDF xref offset table
+};
+
+class SVG_PLOTTER : public PSLIKE_PLOTTER
+{
+public:
+ SVG_PLOTTER();
+
+ static wxString GetDefaultFileExtension()
+ {
+ return wxString( wxT( "svg" ) );
+ }
+
+ virtual PlotFormat GetPlotterType() const
+ {
+ return PLOT_FORMAT_SVG;
+ }
+
+ virtual void SetColor( EDA_COLOR_T color );
+ virtual bool StartPlot();
+ virtual bool EndPlot();
+ virtual void SetCurrentLineWidth( int width );
+ virtual void SetDash( bool dashed );
+
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror );
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH );
+
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH );
+
+ virtual void PlotImage( const wxImage& aImage, const wxPoint& aPos,
+ double aScaleFactor );
+
+ virtual void PenTo( const wxPoint& pos, char plume );
+ virtual void Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed = false );
+
+protected:
+ FILL_T m_fillMode; // true if the current contour
+ // rect, arc, circle, polygon must be filled
+ long m_pen_rgb_color; // current rgb color value: each color has
+ // a value 0 ... 255, and the 3 colors are
+ // grouped in a 3x8 bits value
+ // (written in hex to svg files)
+ long m_brush_rgb_color; // same as m_pen_rgb_color, used to fill
+ // some contours.
+ bool m_graphics_changed; // true if a pen/brush parameter is modified
+ // color, pen size, fil mode ...
+ // the new SVG stype must be output on file
+ bool m_dashed; // true to use plot dashed line style
+
+ /**
+ * function emitSetRGBColor()
+ * initialize m_pen_rgb_color from reduced values r, g ,b
+ * ( reduced values are 0.0 to 1.0 )
+ */
+ virtual void emitSetRGBColor( double r, double g, double b );
+
+ /**
+ * function setSVGPlotStyle()
+ * output the string which define pen and brush color, shape, transparence
+ */
+ void setSVGPlotStyle();
+
+ /**
+ * function setFillMode()
+ * prepare parameters for setSVGPlotStyle()
+ */
+ void setFillMode( FILL_T fill );
+};
+
+/* Class to handle a D_CODE when plotting a board : */
+#define FIRST_DCODE_VALUE 10 // D_CODE < 10 is a command, D_CODE >= 10 is a tool
+
+struct APERTURE
+{
+ enum APERTURE_TYPE {
+ Circle = 1,
+ Rect = 2,
+ Plotting = 3,
+ Oval = 4
+ };
+
+ wxSize Size; // horiz and Vert size
+ APERTURE_TYPE Type; // Type ( Line, rect , circulaire , ovale .. )
+ int DCode; // code number ( >= 10 );
+
+ /* Trivia question: WHY Gerber decided to use D instead of the usual T for
+ * tool change? */
+};
+
+
+class GERBER_PLOTTER : public PLOTTER
+{
+public:
+ GERBER_PLOTTER();
+
+ virtual PlotFormat GetPlotterType() const
+ {
+ return PLOT_FORMAT_GERBER;
+ }
+
+ static wxString GetDefaultFileExtension()
+ {
+ return wxString( wxT( "gbr" ) );
+ }
+
+ /**
+ * Function StartPlot
+ * Write GERBER header to file
+ * initialize global variable g_Plot_PlotOutputFile
+ */
+ virtual bool StartPlot();
+ virtual bool EndPlot();
+ virtual void SetCurrentLineWidth( int width );
+ virtual void SetDefaultLineWidth( int width );
+
+ // RS274X has no dashing, nor colours
+ virtual void SetDash( bool dashed ) {};
+ virtual void SetColor( EDA_COLOR_T color ) {};
+ // Currently, aScale and aMirror are not used in gerber plotter
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror );
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Arc( const wxPoint& aCenter, double aStAngle, double aEndAngle,
+ int aRadius, FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH );
+
+ /**
+ * Gerber polygon: they can (and *should*) be filled with the
+ * appropriate G36/G37 sequence
+ */
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH );
+
+ virtual void PenTo( const wxPoint& pos, char plume );
+
+ /**
+ * Filled circular flashes are stored as apertures
+ */
+ virtual void FlashPadCircle( const wxPoint& pos, int diametre,
+ EDA_DRAW_MODE_T trace_mode );
+
+ /**
+ * Filled oval flashes are handled as aperture in the 90 degree positions only
+ */
+ virtual void FlashPadOval( const wxPoint& pos, const wxSize& size, double orient,
+ EDA_DRAW_MODE_T trace_mode );
+
+ /**
+ * Filled rect flashes are handled as aperture in the 90 degree positions only
+ */
+ virtual void FlashPadRect( const wxPoint& pos, const wxSize& size,
+ double orient, EDA_DRAW_MODE_T trace_mode );
+
+ /**
+ * Trapezoidal pad at the moment are *never* handled as aperture, since
+ * they require aperture macros
+ */
+ virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode );
+
+ /**
+ * Change the plot polarity and begin a new layer
+ * Used to 'scratch off' silk screen away from solder mask
+ */
+ virtual void SetLayerPolarity( bool aPositive );
+
+ /**
+ * Function SetGerberCoordinatesFormat
+ * selection of Gerber units and resolution (number of digits in mantissa)
+ * @param aResolution = number of digits in mantissa of coordinate
+ * use 5 or 6 for mm and 6 or 7 for inches
+ * do not use value > 6 (mm) or > 7 (in) to avoid overflow
+ * @param aUseInches = true to use inches, false to use mm (default)
+ *
+ * Should be called only after SetViewport() is called
+ */
+ virtual void SetGerberCoordinatesFormat( int aResolution, bool aUseInches = false );
+
+protected:
+ void selectAperture( const wxSize& size, APERTURE::APERTURE_TYPE type );
+
+ /**
+ * Emit a D-Code record, using proper conversions
+ * to format a leading zero omitted gerber coordinate
+ * (for n decimal positions, see header generation in start_plot
+ */
+ void emitDcode( const DPOINT& pt, int dcode );
+
+ std::vector<APERTURE>::iterator
+ getAperture( const wxSize& size, APERTURE::APERTURE_TYPE type );
+
+ FILE* workFile;
+ FILE* finalFile;
+ wxString m_workFilename;
+
+ /**
+ * Generate the table of D codes
+ */
+ void writeApertureList();
+
+ std::vector<APERTURE> apertures;
+ std::vector<APERTURE>::iterator currentAperture;
+
+ bool m_gerberUnitInch; // true if the gerber units are inches, false for mm
+ int m_gerberUnitFmt; // number of digits in mantissa.
+ // usually 6 in Inches and 5 or 6 in mm
+};
+
+
+class DXF_PLOTTER : public PLOTTER
+{
+public:
+ DXF_PLOTTER() : textAsLines( false )
+ {
+ textAsLines = true;
+ m_currentColor = BLACK;
+ }
+
+ virtual PlotFormat GetPlotterType() const
+ {
+ return PLOT_FORMAT_DXF;
+ }
+
+ static wxString GetDefaultFileExtension()
+ {
+ return wxString( wxT( "dxf" ) );
+ }
+
+ /**
+ * DXF handles NATIVE text emitting TEXT entities
+ */
+ virtual void SetTextMode( PlotTextMode mode )
+ {
+ if( mode != PLOTTEXTMODE_DEFAULT )
+ textAsLines = ( mode != PLOTTEXTMODE_NATIVE );
+ }
+
+ virtual bool StartPlot();
+ virtual bool EndPlot();
+
+ // For now we don't use 'thick' primitives, so no line width
+ virtual void SetCurrentLineWidth( int width )
+ {
+ currentPenWidth = 0;
+ }
+
+ virtual void SetDefaultLineWidth( int width )
+ {
+ // DXF lines are infinitesimal
+ defaultPenWidth = 0;
+ }
+
+ virtual void SetDash( bool dashed );
+
+ virtual void SetColor( EDA_COLOR_T color );
+
+ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
+ double aScale, bool aMirror );
+ virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
+ int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
+ FILL_T aFill, int aWidth = USE_DEFAULT_LINE_WIDTH );
+ virtual void ThickSegment( const wxPoint& start, const wxPoint& end, int width,
+ EDA_DRAW_MODE_T tracemode );
+ virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
+ int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH );
+ virtual void PenTo( const wxPoint& pos, char plume );
+ virtual void FlashPadCircle( const wxPoint& pos, int diametre,
+ EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadOval( const wxPoint& pos, const wxSize& size, double orient,
+ EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadRect( const wxPoint& pos, const wxSize& size,
+ double orient, EDA_DRAW_MODE_T trace_mode );
+ virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
+ double aPadOrient, EDA_DRAW_MODE_T aTrace_Mode );
+
+ virtual void Text( const wxPoint& aPos,
+ enum EDA_COLOR_T aColor,
+ const wxString& aText,
+ double aOrient,
+ const wxSize& aSize,
+ enum EDA_TEXT_HJUSTIFY_T aH_justify,
+ enum EDA_TEXT_VJUSTIFY_T aV_justify,
+ int aWidth,
+ bool aItalic,
+ bool aBold,
+ bool aMultilineAllowed = false );
+
+protected:
+ bool textAsLines;
+ EDA_COLOR_T m_currentColor;
+};
+
+class TITLE_BLOCK;
+void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock,
+ const PAGE_INFO& aPageInfo,
+ int aSheetNumber, int aNumberOfSheets,
+ const wxString &aSheetDesc,
+ const wxString &aFilename );
+
+/** Returns the default plot extension for a format
+ */
+wxString GetDefaultPlotExtension( PlotFormat aFormat );
+
+
+#endif // PLOT_COMMON_H_
diff --git a/include/profile.h b/include/profile.h
new file mode 100644
index 0000000..acf9166
--- /dev/null
+++ b/include/profile.h
@@ -0,0 +1,90 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file profile.h:
+ * @brief Simple profiling functions for measuring code execution time.
+ */
+
+#ifndef __TPROFILE_H
+#define __TPROFILE_H
+
+#include <sys/time.h>
+#include <stdint.h>
+
+/**
+ * Function get_tics
+ * Returns the number of microseconds that have elapsed since the system was started.
+ * @return uint64_t Number of microseconds.
+ */
+static inline uint64_t get_tics()
+{
+ struct timeval tv;
+ gettimeofday( &tv, NULL );
+
+ return (uint64_t) tv.tv_sec * 1000000ULL + (uint64_t) tv.tv_usec;
+}
+
+/**
+ * Structure for storing data related to profiling counters.
+ */
+struct prof_counter
+{
+ uint64_t start, end; // Stored timer value
+
+ uint64_t usecs() const
+ {
+ return end - start;
+ }
+
+ float msecs() const
+ {
+ return ( end - start ) / 1000.0;
+ }
+};
+
+/**
+ * Function prof_start
+ * Begins code execution time counting for a given profiling counter.
+ * @param aCnt is the counter which should be started.
+ * use_rdtsc tells if processor's time-stamp counter should be used for time counting.
+ * Otherwise is system tics method will be used. IMPORTANT: time-stamp counter should not
+ * be used on multicore machines executing threaded code.
+ */
+static inline void prof_start( prof_counter* aCnt )
+{
+ aCnt->start = get_tics();
+}
+
+/**
+ * Function prof_stop
+ * Ends code execution time counting for a given profiling counter.
+ * @param aCnt is the counter which should be stopped.
+ */
+static inline void prof_end( prof_counter* aCnt )
+{
+ aCnt->end = get_tics();
+}
+
+#endif
diff --git a/include/project.h b/include/project.h
new file mode 100644
index 0000000..5e5898f
--- /dev/null
+++ b/include/project.h
@@ -0,0 +1,322 @@
+#ifndef PROJECT_H_
+#define PROJECT_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <vector>
+#include <wx/string.h>
+#include <wx/filename.h>
+
+/// A variable name whose value holds the current project directory.
+/// Currently an environment variable, eventually a project variable.
+#define PROJECT_VAR_NAME wxT( "KIPRJMOD" )
+
+
+class wxConfigBase;
+class PARAM_CFG_ARRAY;
+class FP_LIB_TABLE;
+class PART_LIBS;
+class SEARCH_STACK;
+
+#define VTBL_ENTRY virtual
+
+/**
+ * Class PROJECT
+ * holds project specific data. Because it is in the neutral program top, which
+ * is not linked to by subsidiarly DSOs, any functions in this interface must
+ * be VTBL_ENTRYs.
+ */
+class PROJECT
+{
+public:
+
+ /// A PROJECT can hold stuff it knows nothing about, in the form of
+ /// _ELEM derivatives. Derive PROJECT elements from this, it has a virtual
+ /// destructor, and Elem*() functions can work with it. Implementation is
+ /// opaque in class PROJECT. If find you have to include derived class headers
+ /// in this file, you are doing incompatible with the goal of this class.
+ /// Keep knowledge of derived classes opaque to class PROJECT please.
+ class _ELEM
+ {
+ public:
+ virtual ~_ELEM() {}
+ };
+
+ PROJECT();
+ ~PROJECT();
+
+ //-----<Cross Module API>----------------------------------------------------
+
+ // VTBL_ENTRY bool MaybeLoadProjectSettings( const std::vector<wxString>& aFileSet );
+
+ /**
+ * Function SetProjectFullName
+ * sets the:
+ * 1) full directory, 2) basename, and 3) extension of the project. This is
+ * the name of the *.pro file with full absolute path and it also defines
+ * the name of the project. The project name and the *.pro file names are
+ * exactly the same, providing the *.pro filename is absolute.
+ */
+ VTBL_ENTRY void SetProjectFullName( const wxString& aFullPathAndName );
+
+ /**
+ * Function GetProjectFullName
+ * returns the full path and name of the project. This is the same as the
+ * name of the *.pro file and will always be an absolute path.
+ */
+ VTBL_ENTRY const wxString GetProjectFullName() const;
+
+ /**
+ * Function GetProjectPath
+ * returns the full path of the project. This is the path
+ * of the *.pro file and will always be an absolute path, ending by a dir separator.
+ */
+ VTBL_ENTRY const wxString GetProjectPath() const;
+
+ /**
+ * Function GetProjectName
+ * returns the short name of the project. This is the file name without
+ * extension or path.
+ */
+ VTBL_ENTRY const wxString GetProjectName() const;
+
+ /**
+ * Function FootprintLibTblName
+ * returns the path and filename of this project's fp-lib-table,
+ * i.e. the project specific one, not the global one.
+ */
+ VTBL_ENTRY const wxString FootprintLibTblName() const;
+
+ /**
+ * Function ConfigSave
+ * saves the current "project" parameters into the wxConfigBase* derivative.
+ * Then the wxConfigBase derivative is written to the *.pro file for the project.
+ *
+ * @param aSList a SEARCH_STACK
+ * @param aGroupName is the name of the group inside the config which contains parameters
+ * @param aParams is a ptr vector of PARAM_CFG_BASE derivatives.
+ * Saved parameters are the subset in this array having the .m_Setup member
+ * set to false.
+ * @param aFileName is where to save the *.pro file and if NULL means use this PROJECT's
+ * @a m_project_name.
+ */
+ VTBL_ENTRY void ConfigSave( const SEARCH_STACK& aSList, const wxString& aGroupName,
+ const PARAM_CFG_ARRAY& aParams, const wxString& aFileName = wxEmptyString );
+
+ /**
+ * Function ConfigLoad
+ * reads a subset of parameters from the "project" file. Parameters are the
+ * subset of variables given in @a aParams array which have the .m_Setup member
+ * set to false. The file which is read in and then extracted from is the
+ * '*.pro' file for the project.
+ * <p>
+ * set:
+ * m_pro_date_and_time
+ *
+ * @param aSearchS a SEARCH_STACK where a kicad.pro template file may be found.
+ * @param aGroupName
+ * @param aParams is ptr vector of PARAM_CFG_BASE derivatives.
+ * @param aForeignConfigFileName when NULL means load the *.pro filename given
+ * in this PROJECT's @a m_project_name field, otherwise load the provided filename.
+ *
+ * @return bool - true if loaded OK.
+ */
+ VTBL_ENTRY bool ConfigLoad( const SEARCH_STACK& aSearchS, const wxString& aGroupName,
+ const PARAM_CFG_ARRAY& aParams, const wxString& aForeignConfigFileName = wxEmptyString );
+
+ /// Retain a number of project specific wxStrings, enumerated here:
+ enum RSTRING_T
+ {
+ DOC_PATH,
+ SCH_LIB_PATH,
+ SCH_LIB_SELECT, // eeschema/selpart.cpp
+ SCH_LIBEDIT_CUR_LIB,
+ SCH_LIBEDIT_CUR_PART, // eeschema/libeditframe.cpp
+
+ VIEWER_3D_PATH,
+
+ PCB_LIB_NICKNAME,
+ PCB_FOOTPRINT,
+ PCB_FOOTPRINT_VIEWER_FPNAME,
+ PCB_FOOTPRINT_VIEWER_NICKNAME,
+
+ RSTRING_COUNT
+ };
+
+ /**
+ * Function GetRString
+ * returns a "retained string", which is any session and project specific string
+ * identified in enum RSTRING_T. Retained strings are not written to disk, and
+ * are therefore good only for the current session.
+ */
+ VTBL_ENTRY const wxString& GetRString( RSTRING_T aStringId );
+
+ /**
+ * Function SetRString
+ * stores a "retained string", which is any session and project specific string
+ * identified in enum RSTRING_T. Retained strings are not written to disk, and
+ * are therefore good only for the current session.
+ */
+ VTBL_ENTRY void SetRString( RSTRING_T aStringId, const wxString& aString );
+
+ /**
+ * Enum ELEM_T
+ * is the set of _ELEMs that a PROJECT can hold.
+ */
+ enum ELEM_T
+ {
+ ELEM_FPTBL,
+
+ ELEM_SCH_PART_LIBS,
+ ELEM_SCH_SEARCH_STACK,
+
+ ELEM_COUNT
+ };
+
+ /**
+ * Typically wrapped somewhere else in a more meaningful function wrapper.
+ * This is a cross module API, therefore the _ELEM destructor is virtual and
+ * can point to a destructor function in another link image. Be careful that
+ * that program module is resident at time of destruction.
+ * <p>
+ * Summary: 1) cross module API, 2) PROJECT knows nothing about _ELEM objects,
+ * except how to delete them and set and get pointers to them.
+ */
+ VTBL_ENTRY _ELEM* GetElem( ELEM_T aIndex );
+ VTBL_ENTRY void SetElem( ELEM_T aIndex, _ELEM* aElem );
+
+ /**
+ * Function ElemsClear
+ * deletes all the _ELEMs and set their pointers to NULL.
+ */
+ VTBL_ENTRY void ElemsClear();
+
+ /**
+ * Function Clear
+ * clears the _ELEMs and RSTRINGs.
+ */
+ void Clear() // inline not virtual
+ {
+ ElemsClear();
+
+ for( unsigned i = 0; i<RSTRING_COUNT; ++i )
+ SetRString( RSTRING_T( i ), wxEmptyString );
+ }
+
+ /**
+ * Function AbsolutePath
+ * fixes up @a aFileName if it is relative to the project's directory to
+ * be an absolute path and filename. This intends to overcome the now missing
+ * chdir() into the project directory.
+ */
+ VTBL_ENTRY const wxString AbsolutePath( const wxString& aFileName ) const;
+
+
+ //-----</Cross Module API>---------------------------------------------------
+
+ //-----<KIFACE Specific APIs>------------------------------------------------
+
+ // These are the non-virtual DATA LOAD ON DEMAND members. They load project related
+ // data on demand, and do so typicallly into m_elems[] at a particular index using
+ // SetElem() & GetElem(). That is, they wrap SetElem() and GetElem().
+ // To get the data to reload on demand, first SetProjectFullName(),
+ // then call SetElem( ELEM_T, NULL ) from client code.
+
+ // non-virtuals resident in PCBNEW link image(s). By being non-virtual, these
+ // functions can get linked into the KIFACE that needs them, and only there.
+ // In fact, the other KIFACEs don't even know they exist.
+#if defined(PCBNEW) || defined(CVPCB)
+ // These are all prefaced with "Pcb"
+ FP_LIB_TABLE* PcbFootprintLibs();
+#endif
+
+
+#if defined(EESCHEMA)
+ // These are all prefaced with "Sch"
+ PART_LIBS* SchLibs();
+
+ /// Accessor for Eeschema search stack.
+ SEARCH_STACK* SchSearchS();
+#endif
+
+ //-----</KIFACE Specific APIs>-----------------------------------------------
+
+private:
+
+ /**
+ * Function configCreate
+ * loads a *.pro file and returns a wxConfigBase.
+ *
+ * @param aSList is the KIFACE or PGM's SEARCH_STACK
+ * @param aGroupName is the default config file subset to use.
+ * @param aProjectFileName is the *.pro file to open.
+ */
+ wxConfigBase* configCreate( const SEARCH_STACK& aSList,
+ const wxString& aGroupName, const wxString& aProjectFileName = wxEmptyString );
+
+ wxFileName m_project_name; ///< \<fullpath\>/\<basename\>.pro
+ wxString m_pro_date_and_time;
+
+ /// @see this::SetRString(), GetRString(), and enum RSTRING_T.
+ wxString m_rstrings[RSTRING_COUNT];
+
+ /// @see this::Elem() and enum ELEM_T.
+ _ELEM* m_elems[ELEM_COUNT];
+};
+
+
+//-----<possible futures>---------------------------------------------------------
+
+#if 0
+ /**
+ * Function Value
+ * fetches a project variable @a aVariable and returns true if that variable was
+ * found, else false. If not found, aFetchedValue is not touched. Any environment
+ * variable is also a project variable.
+ *
+ * @param aVariable is the property or option to look for.
+ * @param aFetchedValue is where to put the value of the property if it exists
+ * and aFetchedValue is not NULL.
+ * @return bool - true if variable was found, else false.
+ */
+ VTBL_ENTRY bool Value( const wxString& aVariable, wxString* aFetchedValue = NULL );
+
+ /**
+ * Function Substitute
+ * replaces any project variable references found within @a aString with their
+ * values. Any referenced variable is first sought in the PROJECT space, and if
+ * not found, then sought in the environment.
+ */
+ VTBL_ENTRY const wxString Substitute( const wxString& aString );
+
+ /**
+ * Function SubstituteAndEvaluate
+ * replaces any project variable references found within @a aString with their
+ * values, and evaluates aString as an expression.
+ * Any referenced variable is first sought in the PROJECT space, and if
+ * not found, then sought in the environment.
+ */
+ VTBL_ENTRY const wxString SubstituteAndEvaluate( const wxString& aString );
+#endif
+
+#endif // PROJECT_H_
diff --git a/include/ptree.h b/include/ptree.h
new file mode 100644
index 0000000..a117462
--- /dev/null
+++ b/include/ptree.h
@@ -0,0 +1,96 @@
+#ifndef PTREE_H_
+#define PTREE_H_
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+/*
+
+Implement "KiCad s-epression" support for boost::property_tree's ptree, the 8
+bit string version of property_tree. The ram resident structure of the ptree is
+mostly compatible with one created using the xml_parser from
+boost::property_tree, with slight differences in the way atoms are stored. The
+result is you can use Format() to convert from xml to s-expression, but not the
+other way around. You can write a simple s-expression beautifier in just a few
+lines of code.
+
+The main value however is the s-expression parser, i.e. Scan(), which is an
+alternative to crafting a custom recursive descent parser for a particular
+grammar. The tipping point depends on whether you want to read only a small
+portion of a much larger document. If so, then using the ptree will likely be a
+"faster to code" route. Documentation on how to navigate a ptree can be found on
+the boost website and there are a number of examples in the
+pcbnew/eagle_plugin.cpp file in this project. Powerful path navigation support
+makes it easy to extract a subset of a ptree.
+
+*/
+
+
+#include <boost/property_tree/ptree_fwd.hpp>
+#include <richio.h>
+#include <dsnlexer.h>
+
+typedef boost::property_tree::ptree PTREE;
+typedef const PTREE CPTREE;
+typedef boost::property_tree::ptree_error PTREE_ERROR;
+
+/**
+ * Function Scan
+ * fills an empty PTREE with information from a KiCad s-expresion stream. Use
+ * a DSNLEXER with an empty keyword table as @a aLexer. Useful for parsing
+ * s-expression files or strings of arbitrary grammars, say from a file or clipboard.
+ * The s-expression must be "KiCad compatible". See Documentation/s-expressions.txt
+ * for this KiCad compatible definition (it is the non-specctra mode).
+ * And also see in tools/property_tree.cpp for example usage.
+ *
+ * <code>
+ *
+ * FILE* fp = fopen( argv[1], "r" );
+ *
+ * static const KEYWORD empty_keywords[1] = {};
+ *
+ * DSNLEXER lexer( empty_keywords, 0, fp, wxString( FROM_UTF8( argv[1] ) ) );
+ *
+ * try
+ * {
+ * PTREE doc;
+ * Scan( &doc, &lexer );
+ * }
+ * catch( const IO_ERROR& ioe )
+ * {
+ * fprintf( stderr, "%s\n", TO_UTF8( ioe.errorText ) );
+ * }
+ *
+ * </code>
+ */
+void Scan( PTREE* aTree, DSNLEXER* aLexer ) throw ( IO_ERROR );
+
+/**
+ * Function Format
+ * outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
+ */
+void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree ) throw( IO_ERROR );
+
+#endif // PTREE_H_
diff --git a/include/reporter.h b/include/reporter.h
new file mode 100644
index 0000000..47fc17f
--- /dev/null
+++ b/include/reporter.h
@@ -0,0 +1,168 @@
+#ifndef _REPORTER_H_
+#define _REPORTER_H_
+
+/**
+ * @file reporter.h
+ * @author Wayne Stambaugh
+ * @note A special thanks to Dick Hollenbeck who came up with the idea that inspired
+ * me to write this.
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+class wxString;
+class wxTextCtrl;
+class wxHtmlListbox;
+class WX_HTML_REPORT_PANEL;
+
+
+/**
+ * Class REPORTER
+ * is a pure virtual class used to derive REPORTER objects from.
+ *
+ * The purpose of the REPORTER object is to offer a way for a procedural function
+ * to report multiple errors without having to:
+ * <ul>
+ * <li> know too much about the caller's UI, i.e. wx. </li>
+ * <li> stop after the first error </li>
+ * </ul>
+ * the reporter has 4 severity levels (flags) tagging the messages:
+ * - information
+ * - warning
+ * - error
+ * - action (i.e. indication of changes - add component, change footprint, etc. )
+ * They are indicators for the message formatting and displaying code,
+ * filtering is not made here.
+ */
+
+class REPORTER {
+
+public:
+ ///> Severity of the reported messages.
+ enum SEVERITY {
+ RPT_UNDEFINED = 0x0,
+ RPT_INFO = 0x1,
+ RPT_WARNING = 0x2,
+ RPT_ERROR = 0x4,
+ RPT_ACTION = 0x8
+ };
+
+ /**
+ * Function Report
+ * is a pure virtual function to override in the derived object.
+ *
+ * @param aText is the string to report.
+ */
+
+ virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED ) = 0;
+
+ REPORTER& Report( const char* aText, SEVERITY aSeverity = RPT_UNDEFINED );
+
+ REPORTER& operator <<( const wxString& aText ) { return Report( aText ); }
+
+ REPORTER& operator <<( const wxChar* aText ) { return Report( wxString( aText ) ); }
+
+ REPORTER& operator <<( wxChar aChar ) { return Report( wxString( aChar ) ); }
+
+ REPORTER& operator <<( const char* aText ) { return Report( aText ); }
+};
+
+
+/**
+ * Class WX_TEXT_CTRL_REPORTER
+ * is wrapper for reporting to a wxTextCtrl object.
+ */
+class WX_TEXT_CTRL_REPORTER : public REPORTER
+{
+ wxTextCtrl* m_textCtrl;
+
+public:
+ WX_TEXT_CTRL_REPORTER( wxTextCtrl* aTextCtrl ) :
+ REPORTER(),
+ m_textCtrl( aTextCtrl )
+ {
+ }
+
+ REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+};
+
+
+/**
+ * Class WX_STRING_REPORTER
+ * is a wrapper for reporting to a wxString object.
+ */
+class WX_STRING_REPORTER : public REPORTER
+{
+ wxString* m_string;
+
+public:
+ WX_STRING_REPORTER( wxString* aString ) :
+ REPORTER(),
+ m_string( aString )
+ {
+ }
+
+ REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+};
+
+
+/**
+ * Class WX_HTML_PANEL_REPORTER
+ * is a wrapper for reporting to a wx HTML window
+ */
+class WX_HTML_PANEL_REPORTER : public REPORTER
+{
+ WX_HTML_REPORT_PANEL* m_panel;
+
+public:
+ WX_HTML_PANEL_REPORTER( WX_HTML_REPORT_PANEL* aPanel ) :
+ REPORTER(),
+ m_panel( aPanel )
+ {
+ }
+
+ REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+};
+
+/**
+ * Class NULL_REPORTER
+ *
+ * A singleton reporter that reports to nowhere. Used as to simplify code by
+ * avoiding the reportee to check for a non-NULL reporter object.
+ */
+class NULL_REPORTER : public REPORTER
+{
+ public:
+ NULL_REPORTER()
+ {
+ };
+
+ static REPORTER& GetInstance();
+
+ REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+};
+
+#endif // _REPORTER_H_
diff --git a/include/richio.h b/include/richio.h
new file mode 100644
index 0000000..a19dd76
--- /dev/null
+++ b/include/richio.h
@@ -0,0 +1,715 @@
+#ifndef RICHIO_H_
+#define RICHIO_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+// This file defines 3 classes useful for working with DSN text files and is named
+// "richio" after its author, Richard Hollenbeck, aka Dick Hollenbeck.
+
+
+#include <vector>
+#include <utf8.h>
+
+// I really did not want to be dependent on wxWidgets in richio
+// but the errorText needs to be wide char so wxString rules.
+#include <wx/wx.h>
+#include <stdio.h>
+
+
+/**
+ * Function StrPrintf
+ * is like sprintf() but the output is appended to a std::string instead of to a
+ * character array.
+ * @param aResult is the string to append to, previous text is not clear()ed.
+ * @param aFormat is a printf() style format string.
+ * @return int - the count of bytes appended to the result string, no terminating
+ * nul is included.
+ */
+int
+#if defined(__GNUG__)
+ __attribute__ ((format (printf, 2, 3)))
+#endif
+ StrPrintf( std::string* aResult, const char* aFormat, ... );
+
+
+/**
+ * Function StrPrintf
+ * is like sprintf() but the output is returned in a std::string instead of to a
+ * character array.
+ * @param format is a printf() style format string.
+ * @return std::string - the result of the sprintf().
+ */
+std::string
+#if defined(__GNUG__)
+ __attribute__ ((format (printf, 1, 2)))
+#endif
+ StrPrintf( const char* format, ... );
+
+
+/**
+ * @ingroup exception_types
+ * @{
+ */
+
+
+#define IO_FORMAT _( "IO_ERROR: %s\nfrom %s : %s" )
+#define PARSE_FORMAT _( "PARSE_ERROR: %s in input/source\n'%s'\nline %d\noffset %d\nfrom %s : %s" )
+
+// references:
+// http://stackoverflow.com/questions/2670816/how-can-i-use-the-compile-time-constant-line-in-a-string
+#define STRINGIFY(x) #x
+#define TOSTRING(x) STRINGIFY(x)
+
+// use one of the following __LOC__ defs, depending on whether your
+// compiler supports __func__ or not, and how it handles __LINE__
+#define __LOC__ ((std::string(__FUNCTION__) + "() : line ") + TOSTRING(__LINE__)).c_str()
+//#define __LOC__ TOSTRING(__LINE__)
+
+/// macro which captures the "call site" values of __FILE_ & __LOC__
+#define THROW_IO_ERROR( msg ) throw IO_ERROR( __FILE__, __LOC__, msg )
+
+/**
+ * Struct IO_ERROR
+ * is a class used to hold an error message and may be used when throwing exceptions
+ * containing meaningful error messages.
+ * @author Dick Hollenbeck
+ */
+struct IO_ERROR // : std::exception
+{
+ wxString errorText;
+
+ /**
+ * Constructor
+ *
+ * @param aThrowersFile is the __FILE__ preprocessor macro but generated
+ * at the source file of thrower.
+ *
+ * @param aThrowersLoc can be either a function name, such as __func__
+ * or a stringified __LINE__ preprocessor macro but generated
+ * at the source function of the thrower, or concatonation. Use macro
+ * THROW_IO_ERROR() to wrap a call to this constructor at the call site.
+ *
+ * @param aMsg is error text that will be streamed through wxString.Printf()
+ * using the format string IO_FORMAT above.
+ */
+ explicit IO_ERROR( const char* aThrowersFile,
+ const char* aThrowersLoc,
+ const wxString& aMsg )
+ {
+ init( aThrowersFile, aThrowersLoc, aMsg );
+ }
+
+ explicit IO_ERROR( const char* aThrowersFile,
+ const char* aThrowersLoc,
+ const std::string& aMsg )
+ {
+ init( aThrowersFile, aThrowersLoc, wxString::FromUTF8( aMsg.c_str() ) );
+ }
+
+ explicit IO_ERROR( const char* aThrowersFile,
+ const char* aThrowersLoc,
+ const char* aMsg )
+ {
+ init( aThrowersFile, aThrowersLoc, wxString::FromUTF8( aMsg ) );
+ }
+
+ /// handle the case where _() is passed as aMsg.
+ explicit IO_ERROR( const char* aThrowersFile,
+ const char* aThrowersLoc,
+ const wxChar* aMsg )
+ {
+ init( aThrowersFile, aThrowersLoc, wxString( aMsg ) );
+ }
+
+ void init( const char* aThrowersFile, const char* aThrowersLoc, const wxString& aMsg );
+
+ IO_ERROR() {}
+
+ // Destructor is virtual because PARSE_ERROR is derived from it and
+ // boost::ptr_vector lists consisting of both will need a virtual destructor.
+ virtual ~IO_ERROR() throw ( /*none*/ ){}
+};
+
+
+/**
+ * Struct PARSE_ERROR
+ * contains a filename or source description, a problem input line, a line number,
+ * a byte offset, and an error message which contains the the caller's report and his
+ * call site information: CPP source file, function, and line number.
+ * @author Dick Hollenbeck
+ */
+struct PARSE_ERROR : public IO_ERROR
+{
+ // wxString errorText is still public from IO_ERROR
+
+ int lineNumber; ///< at which line number, 1 based index.
+ int byteIndex; ///< at which byte offset within the line, 1 based index
+
+ /// problem line of input [say, from a LINE_READER].
+ /// this is brought up in original byte format rather than wxString form, incase
+ /// there was a problem with the encoding, in which case converting to wxString is
+ /// not reliable in this context.
+ std::string inputLine;
+
+ /**
+ * Constructor
+ * which is normally called via the macro THROW_PARSE_ERROR so that
+ * __FILE__ and __LOC__ can be captured from the call site.
+ */
+ PARSE_ERROR( const char* aThrowersFile, const char* aThrowersLoc,
+ const wxString& aMsg, const wxString& aSource,
+ const char* aInputLine,
+ int aLineNumber, int aByteIndex ) :
+ IO_ERROR()
+ {
+ init( aThrowersFile, aThrowersLoc, aMsg, aSource, aInputLine, aLineNumber, aByteIndex );
+ }
+
+ void init( const char* aThrowersFile, const char* aThrowersLoc,
+ const wxString& aMsg, const wxString& aSource,
+ const char* aInputLine,
+ int aLineNumber, int aByteIndex );
+
+ virtual ~PARSE_ERROR() throw ( /*none*/ ){}
+
+protected:
+ PARSE_ERROR(): IO_ERROR() {}
+};
+
+
+#define THROW_PARSE_ERROR( aMsg, aSource, aInputLine, aLineNumber, aByteIndex ) \
+ throw PARSE_ERROR( __FILE__, __LOC__, aMsg, aSource, aInputLine, aLineNumber, aByteIndex )
+
+
+/**
+ * Struct FUTURE_FORMAT_ERROR
+ * variant of PARSE_ERROR indicating that a syntax or related error was likely caused
+ * by a file generated by a newer version of KiCad than this. Can be used to generate
+ * more informative error messages.
+ */
+struct FUTURE_FORMAT_ERROR : public PARSE_ERROR
+{
+ wxString requiredVersion; ///< version or date of KiCad required to open file
+
+ FUTURE_FORMAT_ERROR( const PARSE_ERROR& aParseError, const wxString& aRequiredVersion ) :
+ PARSE_ERROR(), requiredVersion( aRequiredVersion )
+ {
+ errorText.Printf( _(
+ "KiCad was unable to open this file, as it was created with a more "
+ "recent version than the one you are running. To open it, you'll need "
+ "to upgrade KiCad to a more recent version.\n\n"
+ "Date of KiCad version required (or newer): %s\n\n"
+ "Full error text:\n%s" ),
+ requiredVersion, aParseError.errorText );
+
+ lineNumber = aParseError.lineNumber;
+ byteIndex = aParseError.byteIndex;
+ inputLine = aParseError.inputLine;
+ }
+
+ ~FUTURE_FORMAT_ERROR() throw () {}
+};
+
+
+/** @} exception_types */
+
+
+#define LINE_READER_LINE_DEFAULT_MAX 100000
+#define LINE_READER_LINE_INITIAL_SIZE 5000
+
+/**
+ * Class LINE_READER
+ * is an abstract class from which implementation specific LINE_READERs may
+ * be derived to read single lines of text and manage a line number counter.
+ */
+class LINE_READER
+{
+protected:
+ unsigned length; ///< no. bytes in line before trailing nul.
+ unsigned lineNum;
+
+ char* line; ///< the read line of UTF8 text
+ unsigned capacity; ///< no. bytes allocated for line.
+
+ unsigned maxLineLength; ///< maximum allowed capacity using resizing.
+
+ wxString source; ///< origin of text lines, e.g. filename or "clipboard"
+
+ /**
+ * Function expandCapacity
+ * will expand the capacity of @a line up to maxLineLength but not greater, so
+ * be careful about making assumptions of @a capacity after calling this.
+ */
+ void expandCapacity( unsigned newsize );
+
+
+public:
+
+ /**
+ * Constructor LINE_READER
+ * builds a line reader and fixes the length of the maximum supported
+ * line length to @a aMaxLineLength.
+ */
+ LINE_READER( unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
+
+ virtual ~LINE_READER();
+
+ /**
+ * Function ReadLine
+ * reads a line of text into the buffer and increments the line number
+ * counter. If the line is larger than aMaxLineLength passed to the
+ * constructor, then an exception is thrown. The line is nul terminated.
+ * @return char* - The beginning of the read line, or NULL if EOF.
+ * @throw IO_ERROR when a line is too long.
+ */
+ virtual char* ReadLine() throw( IO_ERROR ) = 0;
+
+ /**
+ * Function GetSource
+ * returns the name of the source of the lines in an abstract sense.
+ * This may be a file or it may be the clipboard or any other source
+ * of lines of text. The returned string is useful for reporting error
+ * messages.
+ */
+ virtual const wxString& GetSource() const
+ {
+ return source;
+ }
+
+ /**
+ * Function Line
+ * returns a pointer to the last line that was read in.
+ */
+ char* Line() const
+ {
+ return line;
+ }
+
+ /**
+ * Operator char*
+ * is a casting operator that returns a char* pointer to the start of the
+ * line buffer.
+ */
+ operator char* () const
+ {
+ return Line();
+ }
+
+ /**
+ * Function Line Number
+ * returns the line number of the last line read from this LINE_READER. Lines
+ * start from 1.
+ */
+ virtual unsigned LineNumber() const
+ {
+ return lineNum;
+ }
+
+ /**
+ * Function Length
+ * returns the number of bytes in the last line read from this LINE_READER.
+ */
+ unsigned Length() const
+ {
+ return length;
+ }
+};
+
+
+/**
+ * Class FILE_LINE_READER
+ * is a LINE_READER that reads from an open file. File must be already open
+ * so that this class can exist without any UI policy.
+ */
+class FILE_LINE_READER : public LINE_READER
+{
+protected:
+
+ bool iOwn; ///< if I own the file, I'll promise to close it, else not.
+ FILE* fp; ///< I may own this file, but might not.
+
+public:
+
+ /**
+ * Constructor FILE_LINE_READER
+ * takes @a aFileName and the size of the desired line buffer and opens
+ * the file and assumes the obligation to close it.
+ *
+ * @param aFileName is the name of the file to open and to use for error reporting purposes.
+ *
+ * @param aStartingLineNumber is the initial line number to report on error, and is
+ * accessible here for the case where multiple DSNLEXERs are reading from the
+ * same file in sequence, all from the same open file (with @a doOwn = false).
+ * Internally it is incremented by one after each ReadLine(), so the first
+ * reported line number will always be one greater than what is provided here.
+ *
+ * @param aMaxLineLength is the number of bytes to use in the line buffer.
+ *
+ * @throw IO_ERROR if @a aFileName cannot be opened.
+ */
+ FILE_LINE_READER( const wxString& aFileName,
+ unsigned aStartingLineNumber = 0,
+ unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX ) throw( IO_ERROR );
+
+ /**
+ * Constructor FILE_LINE_READER
+ * takes an open FILE and the size of the desired line buffer and takes
+ * ownership of the open file, i.e. assumes the obligation to close it.
+ *
+ * @param aFile is an open file.
+ * @param aFileName is the name of the file for error reporting purposes.
+ * @param doOwn if true, means I should close the open file, else not.
+ * @param aStartingLineNumber is the initial line number to report on error, and is
+ * accessible here for the case where multiple DSNLEXERs are reading from the
+ * same file in sequence, all from the same open file (with @a doOwn = false).
+ * Internally it is incremented by one after each ReadLine(), so the first
+ * reported line number will always be one greater than what is provided here.
+ * @param aMaxLineLength is the number of bytes to use in the line buffer.
+ */
+ FILE_LINE_READER( FILE* aFile, const wxString& aFileName, bool doOwn = true,
+ unsigned aStartingLineNumber = 0,
+ unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
+
+ /**
+ * Destructor
+ * may or may not close the open file, depending on @a doOwn in constructor.
+ */
+ ~FILE_LINE_READER();
+
+ char* ReadLine() throw( IO_ERROR ); // see LINE_READER::ReadLine() description
+
+ /**
+ * Function Rewind
+ * rewinds the file and resets the line number back to zero. Line number
+ * will go to 1 on first ReadLine().
+ */
+ void Rewind()
+ {
+ rewind( fp );
+ lineNum = 0;
+ }
+};
+
+
+/**
+ * Class STRING_LINE_READER
+ * is a LINE_READER that reads from a multiline 8 bit wide std::string
+ */
+class STRING_LINE_READER : public LINE_READER
+{
+protected:
+ std::string lines;
+ size_t ndx;
+
+public:
+
+ /**
+ * Constructor STRING_LINE_READER( const std::string&, const wxString& )
+ *
+ * @param aString is a source string consisting of one or more lines
+ * of text, where multiple lines are separated with a '\n' character.
+ * The last line does not necessarily need a trailing '\n'.
+ *
+ * @param aSource describes the source of aString for error reporting purposes
+ * can be anything meaninful, such as wxT( "clipboard" ).
+ */
+ STRING_LINE_READER( const std::string& aString, const wxString& aSource );
+
+ /**
+ * Constructor STRING_LINE_READER( const STRING_LINE_READER& )
+ * allows for a continuation of the reading of a stream started by another
+ * STRING_LINE_READER. Any stream offset and source name are used from
+ * @a aStartingPoint.
+ */
+ STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint );
+
+ char* ReadLine() throw( IO_ERROR ); // see LINE_READER::ReadLine() description
+};
+
+
+/**
+ * Class INPUTSTREAM_LINE_READER
+ * is a LINE_READER that reads from a wxInputStream object.
+ */
+class INPUTSTREAM_LINE_READER : public LINE_READER
+{
+protected:
+ wxInputStream* m_stream; //< The input stream to read. No ownership of this pointer.
+
+public:
+
+ /**
+ * Constructor WXINPUTSTREAM_LINE_READER
+ *
+ * @param aStream A pointer to a wxInputStream object to read.
+ * @param aSource The name of the stream source, for error reporting purposes.
+ */
+ INPUTSTREAM_LINE_READER( wxInputStream* aStream, const wxString& aSource );
+
+ char* ReadLine() throw( IO_ERROR ); // see LINE_READER::ReadLine() description
+};
+
+
+#define OUTPUTFMTBUFZ 500 ///< default buffer size for any OUTPUT_FORMATTER
+
+/**
+ * Class OUTPUTFORMATTER
+ * is an important interface (abstract class) used to output 8 bit text in
+ * a convenient way. The primary interface is "printf() - like" but
+ * with support for indentation control. The destination of the 8 bit
+ * wide text is up to the implementer.
+ * <p>
+ * The implementer only has to implement the write() function, but can
+ * also optionally re-implement GetQuoteChar().
+ * <p>
+ * If you want to output a wxString, then use TO_UTF8() on it
+ * before passing it as an argument to Print().
+ * <p>
+ * Since this is an abstract interface, only classes derived from
+ * this one may actually be used.
+ */
+class OUTPUTFORMATTER
+{
+ std::vector<char> buffer;
+ char quoteChar[2];
+
+ int sprint( const char* fmt, ... ) throw( IO_ERROR );
+ int vprint( const char* fmt, va_list ap ) throw( IO_ERROR );
+
+
+protected:
+ OUTPUTFORMATTER( int aReserve = OUTPUTFMTBUFZ, char aQuoteChar = '"' ) :
+ buffer( aReserve, '\0' )
+ {
+ quoteChar[0] = aQuoteChar;
+ quoteChar[1] = '\0';
+ }
+
+ virtual ~OUTPUTFORMATTER() {}
+
+ /**
+ * Function GetQuoteChar
+ * performs quote character need determination according to the Specctra DSN
+ * specification.
+
+ * @param wrapee A string that might need wrapping on each end.
+ * @param quote_char A single character C string which provides the current
+ * quote character, should it be needed by the wrapee.
+ *
+ * @return const char* - the quote_char as a single character string, or ""
+ * if the wrapee does not need to be wrapped.
+ */
+ static const char* GetQuoteChar( const char* wrapee, const char* quote_char );
+
+ /**
+ * Function write
+ * should be coded in the interface implementation (derived) classes.
+ *
+ * @param aOutBuf is the start of a byte buffer to write.
+ * @param aCount tells how many bytes to write.
+ * @throw IO_ERROR, if there is a problem outputting, such as a full disk.
+ */
+ virtual void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) = 0;
+
+#if defined(__GNUG__) // The GNU C++ compiler defines this
+
+ // When used on a C++ function, we must account for the "this" pointer,
+ // so increase the STRING-INDEX and FIRST-TO_CHECK by one.
+ // See http://docs.freebsd.org/info/gcc/gcc.info.Function_Attributes.html
+ // Then to get format checking during the compile, compile with -Wall or -Wformat
+#define PRINTF_FUNC __attribute__ ((format (printf, 3, 4)))
+
+#else
+#define PRINTF_FUNC // nothing
+#endif
+
+public:
+
+ //-----<interface functions>------------------------------------------
+
+ /**
+ * Function Print
+ * formats and writes text to the output stream.
+ *
+ * @param nestLevel The multiple of spaces to precede the output with.
+ * @param fmt A printf() style format string.
+ * @param ... a variable list of parameters that will get blended into
+ * the output under control of the format string.
+ * @return int - the number of characters output.
+ * @throw IO_ERROR, if there is a problem outputting, such as a full disk.
+ */
+ int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IO_ERROR );
+
+ /**
+ * Function GetQuoteChar
+ * performs quote character need determination.
+ * It returns the quote character as a single character string for a given
+ * input wrapee string. If the wrappee does not need to be quoted,
+ * the return value is "" (the null string), such as when there are no
+ * delimiters in the input wrapee string. If you want the quote_char
+ * to be assuredly not "", then pass in "(" as the wrappee.
+ * <p>
+ * Implementations are free to override the default behavior, which is to
+ * call the static function of the same name.
+
+ * @param wrapee A string that might need wrapping on each end.
+ * @return const char* - the quote_char as a single character string, or ""
+ * if the wrapee does not need to be wrapped.
+ */
+ virtual const char* GetQuoteChar( const char* wrapee );
+
+ /**
+ * Function Quotes
+ * checks \a aWrapee input string for a need to be quoted
+ * (e.g. contains a ')' character or a space), and for \" double quotes
+ * within the string that need to be escaped such that the DSNLEXER
+ * will correctly parse the string from a file later.
+ *
+ * @param aWrapee is a string that might need wraping in double quotes,
+ * and it might need to have its internal content escaped, or not.
+ *
+ * @return std::string - whose c_str() function can be called for passing
+ * to printf() style functions that output UTF8 encoded s-expression streams.
+ *
+ * @throw IO_ERROR, if there is any kind of problem with the input string.
+ */
+ virtual std::string Quotes( const std::string& aWrapee ) throw( IO_ERROR );
+
+ std::string Quotew( const wxString& aWrapee ) throw( IO_ERROR );
+
+ //-----</interface functions>-----------------------------------------
+};
+
+
+/**
+ * Class STRING_FORMATTER
+ * implements OUTPUTFORMATTER to a memory buffer. After Print()ing the
+ * string is available through GetString()
+*/
+class STRING_FORMATTER : public OUTPUTFORMATTER
+{
+ std::string mystring;
+
+public:
+
+ /**
+ * Constructor STRING_FORMATTER
+ * reserves space in the buffer
+ */
+ STRING_FORMATTER( int aReserve = OUTPUTFMTBUFZ, char aQuoteChar = '"' ) :
+ OUTPUTFORMATTER( aReserve, aQuoteChar )
+ {
+ }
+
+ /**
+ * Function Clear
+ * clears the buffer and empties the internal string.
+ */
+ void Clear()
+ {
+ mystring.clear();
+ }
+
+ /**
+ * Function StripUseless
+ * removes whitespace, '(', and ')' from the mystring.
+ */
+ void StripUseless();
+
+ const std::string& GetString()
+ {
+ return mystring;
+ }
+
+protected:
+ //-----<OUTPUTFORMATTER>------------------------------------------------
+ void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
+ //-----</OUTPUTFORMATTER>-----------------------------------------------
+};
+
+
+/**
+ * Class FILE_OUTPUTFORMATTER
+ * may be used for text file output. It is about 8 times faster than
+ * STREAM_OUTPUTFORMATTER for file streams.
+ */
+class FILE_OUTPUTFORMATTER : public OUTPUTFORMATTER
+{
+public:
+
+ /**
+ * Constructor
+ * @param aFileName is the full filename to open and save to as a text file.
+ * @param aMode is what you would pass to wxFopen()'s mode, defaults to wxT( "wt" )
+ * for text files that are to be created here and now.
+ * @param aQuoteChar is a char used for quoting problematic strings
+ (with whitespace or special characters in them).
+ * @throw IO_ERROR if the file cannot be opened.
+ */
+ FILE_OUTPUTFORMATTER( const wxString& aFileName,
+ const wxChar* aMode = wxT( "wt" ),
+ char aQuoteChar = '"' )
+ throw( IO_ERROR );
+
+ ~FILE_OUTPUTFORMATTER();
+
+protected:
+ //-----<OUTPUTFORMATTER>------------------------------------------------
+ void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
+ //-----</OUTPUTFORMATTER>-----------------------------------------------
+
+ FILE* m_fp; ///< takes ownership
+ wxString m_filename;
+};
+
+
+/**
+ * Class STREAM_OUTPUTFORMATTER
+ * implements OUTPUTFORMATTER to a wxWidgets wxOutputStream. The stream is
+ * neither opened nor closed by this class.
+ */
+class STREAM_OUTPUTFORMATTER : public OUTPUTFORMATTER
+{
+ wxOutputStream& os;
+
+public:
+ /**
+ * Constructor STREAM_OUTPUTFORMATTER
+ * can take any number of wxOutputStream derivations, so it can write
+ * to a file, socket, or zip file.
+ */
+ STREAM_OUTPUTFORMATTER( wxOutputStream& aStream, char aQuoteChar = '"' ) :
+ OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar ),
+ os( aStream )
+ {
+ }
+
+protected:
+ //-----<OUTPUTFORMATTER>------------------------------------------------
+ void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
+ //-----</OUTPUTFORMATTER>-----------------------------------------------
+};
+
+#endif // RICHIO_H_
diff --git a/include/search_stack.h b/include/search_stack.h
new file mode 100644
index 0000000..2c6af78
--- /dev/null
+++ b/include/search_stack.h
@@ -0,0 +1,127 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SEARCH_STACK_H_
+#define SEARCH_STACK_H_
+
+#include <wx/filefn.h>
+#include <wx/filename.h>
+#include <project.h>
+
+
+/**
+ * Class SEARCH_STACK
+ * looks for files in a number of places. Augments wxPathList.
+ * I chose the name because it sounded like a stack of work, as a reminder
+ * that anything you put in here means searching work at some point in time.
+ * (An alternative is to simply know where something is.)
+ */
+class SEARCH_STACK : public wxPathList, public PROJECT::_ELEM
+{
+public:
+
+#if defined(DEBUG)
+ void Show( const wxString& aPrefix ) const;
+#endif
+
+ /**
+ * Function FilenameWithRelativePathInSearchList
+ * returns the shortest possible path which can be use later to find
+ * a full path from this SEARCH_STACK.
+ * <p>
+ * If the library path is already in the library search paths list,
+ * just add the library name to the list. Otherwise, add the library
+ * name with the full or relative path. The relative path is preferable
+ * because it preserves use of default libraries paths, when the path
+ * is a sub path of these default paths. Note we accept only sub paths
+ * not relative paths starting by ../ that are not subpaths and are
+ * outside kicad libs paths
+ *
+ * @param aFullFilename The filename with path and extension.
+ * @param aBaseDir The absolute path on which relative paths in this
+ * SEARCH_STACK are based.
+ * @return a short filename (with extension) with only a relative path if
+ * this filename can be found in library paths
+ */
+ wxString FilenameWithRelativePathInSearchList(
+ const wxString& aFullFilename, const wxString& aBaseDir );
+
+ wxString FindValidPath( const wxString& aFileName ) const
+ {
+#if 1 // might not be needed
+
+ if( wxFileName::FileExists( aFileName ) )
+ return aFileName;
+ else
+#endif
+ return wxPathList::FindValidPath( aFileName );
+ }
+
+ /**
+ * Function AddPaths
+ * insert or append path(s)
+ *
+ * @param aPaths = path or path list to add. paths must be
+ * separated by ";" on windows, or ":" | ";" on unix.
+ *
+ * @param aIndex = insertion point, -1 for append.
+ */
+ void AddPaths( const wxString& aPaths, int aIndex = -1 );
+
+ /**
+ * Function RemovePaths
+ * removes the given path(s) from the library path list
+ * @param aPaths = path or list of paths to remove. If list, paths must be separated by
+ * ";" on windows, or ":" | ";" on unix.
+ */
+ void RemovePaths( const wxString& aPaths );
+
+ /**
+ * Function Split
+ * separates aPathString into individual paths.
+ * @param aResult is where to put the paths, it should be empty upon entry.
+ * @param aPathString is concatonated string with interposing ';' or ':' separators.
+ * @return int - the count of paths found in aPathString
+ */
+ static int Split( wxArrayString* aResult, const wxString aPathString );
+
+#if 1 // this function is so poorly designed it deserves not to exist.
+ /**
+ * Function LastVisitedPath
+ * is a quirky function inherited from old code that seems to serve particular
+ * needs in the UI. It returns what is called the last visited directory, or
+ * if aSubPathToSearch is empty, the first path in this SEARCH_STACK
+ * ( but not the CWD ).
+ *
+ * @todo add more here if you can figure it out.
+ *
+ * @param aSubPathToSearch is the preferred sub path to search in path list
+ */
+ const wxString LastVisitedPath( const wxString& aSubPathToSearch = wxEmptyString );
+#endif
+
+};
+
+#endif // SEARCH_STACK_H_
diff --git a/include/tool/action_manager.h b/include/tool/action_manager.h
new file mode 100644
index 0000000..34809e0
--- /dev/null
+++ b/include/tool/action_manager.h
@@ -0,0 +1,138 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef ACTION_MANAGER_H_
+#define ACTION_MANAGER_H_
+
+#include <list>
+#include <map>
+#include <string>
+
+class TOOL_BASE;
+class TOOL_MANAGER;
+class TOOL_ACTION;
+
+/**
+ * Class ACTION_MANAGER
+ *
+ * Takes care of TOOL_ACTION objects. Registers them and allows to run them using associated
+ * hot keys, names or ids.
+ */
+class ACTION_MANAGER
+{
+public:
+ /**
+ * Constructor.
+ * @param aToolManager is a tool manager instance that is used to pass events to tools.
+ */
+ ACTION_MANAGER( TOOL_MANAGER* aToolManager );
+
+ /**
+ * Destructor.
+ * Unregisters every registered action.
+ */
+ ~ACTION_MANAGER();
+
+ /**
+ * Function RegisterAction()
+ * Adds a tool action to the manager and sets it up. After that is is possible to invoke
+ * the action using hotkeys or sending a command event with its name.
+ * @param aAction: action to be added. Ownership is not transferred.
+ */
+ void RegisterAction( TOOL_ACTION* aAction );
+
+ /**
+ * Function UnregisterAction()
+ * Removes a tool action from the manager and makes it unavailable for further usage.
+ * @param aAction: action to be removed.
+ */
+ void UnregisterAction( TOOL_ACTION* aAction );
+
+ /**
+ * Generates an unique ID from for an action with given name.
+ */
+ static int MakeActionId( const std::string& aActionName );
+
+ /**
+ * Function FindAction()
+ * Finds an action with a given name (if there is one available).
+ * @param aActionName is the searched action.
+ * @return Pointer to a TOOL_ACTION object or NULL if there is no such action.
+ */
+ TOOL_ACTION* FindAction( const std::string& aActionName ) const;
+
+ /**
+ * Function RunHotKey()
+ * Runs an action associated with a hotkey (if there is one available).
+ * @param aHotKey is the hotkey to be handled.
+ * @return True if there was an action associated with the hotkey, false otherwise.
+ */
+ bool RunHotKey( int aHotKey ) const;
+
+ /**
+ * Function GetHotKey()
+ * Returns the hot key associated with a given action or 0 if there is none.
+ * @param aAction is the queried action.
+ */
+ int GetHotKey( const TOOL_ACTION& aAction ) const;
+
+ /**
+ * Function UpdateHotKeys()
+ * Updates TOOL_ACTIONs hot key assignment according to the current frame's Hot Key Editor settings.
+ */
+ void UpdateHotKeys();
+
+ /**
+ * Function GetActionList()
+ * Returns list of TOOL_ACTIONs. TOOL_ACTIONs add themselves to the list upon their
+ * creation.
+ * @return List of TOOL_ACTIONs.
+ */
+ static std::list<TOOL_ACTION*>& GetActionList()
+ {
+ static std::list<TOOL_ACTION*> actionList;
+
+ return actionList;
+ }
+
+private:
+ ///> Resolves a reference to legacy hot key settings to a particular hot key.
+ ///> @param aAction is the action to be resolved.
+ int processHotKey( TOOL_ACTION* aAction );
+
+ ///> Tool manager needed to run actions
+ TOOL_MANAGER* m_toolMgr;
+
+ ///> Map for indexing actions by their names
+ std::map<std::string, TOOL_ACTION*> m_actionNameIndex;
+
+ ///> Map for indexing actions by their hotkeys
+ typedef std::map<int, std::list<TOOL_ACTION*> > HOTKEY_LIST;
+ HOTKEY_LIST m_actionHotKeys;
+
+ ///> Quick action<->hot key lookup
+ std::map<int, int> m_hotkeys;
+};
+
+#endif /* ACTION_MANAGER_H_ */
diff --git a/include/tool/context_menu.h b/include/tool/context_menu.h
new file mode 100644
index 0000000..819cb5e
--- /dev/null
+++ b/include/tool/context_menu.h
@@ -0,0 +1,230 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __CONTEXT_MENU_H
+#define __CONTEXT_MENU_H
+
+#include <map>
+#include <list>
+#include <boost/function.hpp>
+
+#include <wx/menu.h>
+#include <tool/tool_action.h>
+
+class TOOL_INTERACTIVE;
+
+/**
+ * Class CONTEXT_MENU
+ *
+ * Defines the structure of a context (usually right-click) popup menu
+ * for a given tool.
+ */
+class CONTEXT_MENU : public wxMenu
+{
+public:
+ ///> Default constructor
+ CONTEXT_MENU();
+
+ ///> Copy constructor
+ CONTEXT_MENU( const CONTEXT_MENU& aMenu );
+
+ virtual ~CONTEXT_MENU();
+
+ CONTEXT_MENU& operator=( const CONTEXT_MENU& aMenu );
+
+ /**
+ * Function SetTitle()
+ * Sets title for the context menu. The title is shown as a text label shown on the top of
+ * the menu.
+ * @param aTitle is the new title.
+ */
+ void SetTitle( const wxString& aTitle );
+
+ /**
+ * Function SetIcon()
+ * Assigns an icon for the entry.
+ * @param aIcon is the icon to be assigned. NULL is used to remove icon.
+ */
+ inline void SetIcon( const BITMAP_OPAQUE* aIcon )
+ {
+ m_icon = aIcon;
+ }
+
+ /**
+ * Function Add()
+ * Adds an entry to the menu. After highlighting/selecting the entry, a TOOL_EVENT command is
+ * sent that contains ID of the entry.
+ * @param aLabel is the text label show in the menu.
+ * @param aId is the ID that is sent in the TOOL_EVENT. It should be unique for every entry.
+ * @param aIcon is an optional icon.
+ */
+ wxMenuItem* Add( const wxString& aLabel, int aId, const BITMAP_OPAQUE* aIcon = NULL );
+
+ /**
+ * Function Add()
+ * Adds an entry to the menu, basing on the TOOL_ACTION object. After selecting the entry,
+ * a TOOL_EVENT command containing name of the action is sent.
+ * @param aAction is the action to be added to menu entry.
+ */
+ wxMenuItem* Add( const TOOL_ACTION& aAction );
+
+ /**
+ * Function Add()
+ * Adds a context menu as a submenu. The difference between this function and wxMenu::AppendSubMenu()
+ * is the capability to handle icons.
+ * @param aMenu is the submenu to be added.
+ * @param aLabel is the caption displayed for the menu entry.
+ * @param aExpand allows to add all entries from the menu as individual entries rather than
+ * add everything as a submenu.
+ */
+ std::list<wxMenuItem*> Add( CONTEXT_MENU* aMenu, const wxString& aLabel, bool aExpand = false );
+
+ /**
+ * Function Clear()
+ * Removes all the entries from the menu (as well as its title). It leaves the menu in the
+ * initial state.
+ */
+ void Clear();
+
+ /**
+ * Function GetSelected()
+ * Returns the position of selected item. If the returned value is negative, that means that
+ * menu was dismissed.
+ * @return The position of selected item in the context menu.
+ */
+ inline int GetSelected() const
+ {
+ return m_selected;
+ }
+
+ /**
+ * Function UpdateAll()
+ * Runs update handlers for the menu and its submenus.
+ */
+ void UpdateAll();
+
+ // Helper typedefs
+ typedef boost::function<OPT_TOOL_EVENT(const wxMenuEvent&)> MENU_HANDLER;
+ typedef boost::function<void()> UPDATE_HANDLER;
+
+ /**
+ * Function SetMenuHandler()
+ * Sets the menu event handler to another function.
+ */
+ inline void SetMenuHandler( MENU_HANDLER aMenuHandler )
+ {
+ m_menu_handler = aMenuHandler;
+ }
+
+ /**
+ * Function SetUpdateHandler()
+ * Sets the update handler to a different function.
+ */
+ inline void SetUpdateHandler( UPDATE_HANDLER aUpdateHandler )
+ {
+ m_update_handler = aUpdateHandler;
+ }
+
+ /**
+ * Function SetTool()
+ * Sets a tool that is the creator of the menu.
+ * @param aTool is the tool that created the menu.
+ */
+ void SetTool( TOOL_INTERACTIVE* aTool );
+
+protected:
+ ///> Returns an instance of TOOL_MANAGER class.
+ TOOL_MANAGER* getToolManager();
+
+ ///> Returns the corresponding wxMenuItem identifier for a TOOL_ACTION object.
+ static inline int getMenuId( const TOOL_ACTION& aAction )
+ {
+ return aAction.GetId() + ACTION_ID;
+ }
+
+private:
+ // Empty stubs used by the default constructor
+ static OPT_TOOL_EVENT menuHandlerStub(const wxMenuEvent& );
+ static void updateHandlerStub();
+
+ /**
+ * Function appendCopy
+ * Appends a copy of wxMenuItem.
+ */
+ wxMenuItem* appendCopy( const wxMenuItem* aSource );
+
+ ///> Common part of copy constructor and assignment operator.
+ void copyFrom( const CONTEXT_MENU& aMenu );
+
+ ///> Initializes handlers for events.
+ void setupEvents();
+
+ ///> The default menu event handler.
+ void onMenuEvent( wxMenuEvent& aEvent );
+
+ ///> Updates hot key settings for TOOL_ACTIONs in this menu.
+ void updateHotKeys();
+
+ ///> Traverses the submenus tree looking for a submenu capable of handling a particular menu
+ ///> event. In case it is handled, it is returned the aToolEvent parameter.
+ void runEventHandlers( const wxMenuEvent& aMenuEvent, OPT_TOOL_EVENT& aToolEvent );
+
+ ///> Runs a function on the menu and all its submenus.
+ void runOnSubmenus( boost::function<void(CONTEXT_MENU*)> aFunction );
+
+ ///> Flag indicating that the menu title was set up.
+ bool m_titleSet;
+
+ ///> Stores the id number of selected item.
+ int m_selected;
+
+ ///> Creator of the menu
+ TOOL_INTERACTIVE* m_tool;
+
+ ///> Menu items with ID higher than that are considered TOOL_ACTIONs
+ static const int ACTION_ID = 30000;
+
+ ///> Associates tool actions with menu item IDs. Non-owning.
+ std::map<int, const TOOL_ACTION*> m_toolActions;
+
+ ///> List of submenus.
+ std::list<CONTEXT_MENU*> m_submenus;
+
+ ///> Parent CONTEXT_MENU.
+ CONTEXT_MENU* m_parent;
+
+ ///> Optional icon
+ const BITMAP_OPAQUE* m_icon;
+
+ ///> Optional callback to translate wxMenuEvents to TOOL_EVENTs.
+ MENU_HANDLER m_menu_handler;
+
+ ///> Optional callback to update the menu state before it is displayed.
+ UPDATE_HANDLER m_update_handler;
+
+ friend class TOOL_INTERACTIVE;
+};
+
+#endif
diff --git a/include/tool/coroutine.h b/include/tool/coroutine.h
new file mode 100644
index 0000000..c7eaf5f
--- /dev/null
+++ b/include/tool/coroutine.h
@@ -0,0 +1,268 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __COROUTINE_H
+#define __COROUTINE_H
+
+#include <cstdlib>
+
+#include <boost/context/fcontext.hpp>
+#include <boost/version.hpp>
+
+#include "delegate.h"
+
+/**
+ * Class COROUNTINE.
+ * Implements a coroutine. Wikipedia has a good explanation:
+ *
+ * "Coroutines are computer program components that generalize subroutines to
+ * allow multiple entry points for suspending and resuming execution at certain locations.
+ * Coroutines are well-suited for implementing more familiar program components such as cooperative
+ * tasks, exceptions, event loop, iterators, infinite lists and pipes."
+ *
+ * In other words, a coroutine can be considered a lightweight thread - which can be
+ * preempted only when it deliberately yields the control to the caller. This way,
+ * we avoid concurrency problems such as locking / race conditions.
+ *
+ * Uses boost::context library to do the actual context switching.
+ *
+ * This particular version takes a DELEGATE as an entry point, so it can invoke
+ * methods within a given object as separate coroutines.
+ *
+ * See coroutine_example.cpp for sample code.
+ */
+
+template <class ReturnType, class ArgType>
+class COROUTINE
+{
+public:
+ COROUTINE() :
+ m_saved( NULL ), m_self( NULL ), m_stack( NULL ), m_stackSize( c_defaultStackSize ),
+ m_running( false )
+ {
+ }
+
+ /**
+ * Constructor
+ * Creates a coroutine from a member method of an object
+ */
+ template <class T>
+ COROUTINE( T* object, ReturnType(T::* ptr)( ArgType ) ) :
+ m_func( object, ptr ), m_self( NULL ), m_saved( NULL ), m_stack( NULL ),
+ m_stackSize( c_defaultStackSize ), m_running( false )
+ {
+ }
+
+ /**
+ * Constructor
+ * Creates a coroutine from a delegate object
+ */
+ COROUTINE( DELEGATE<ReturnType, ArgType> aEntry ) :
+ m_func( aEntry ), m_saved( NULL ), m_self( NULL ), m_stack( NULL ),
+ m_stackSize( c_defaultStackSize ), m_running( false )
+ {
+ // Avoid not initialized members, and make static analysers quiet
+ m_args = 0;
+ m_retVal = 0;
+ }
+
+ ~COROUTINE()
+ {
+ if( m_saved )
+ delete m_saved;
+
+#if BOOST_VERSION >= 105600
+ if( m_self )
+ delete m_self;
+#endif
+
+ if( m_stack )
+ free( m_stack );
+ }
+
+ /**
+ * Function Yield()
+ *
+ * Stops execution of the coroutine and returns control to the caller.
+ * After a yield, Call() or Resume() methods invoked by the caller will
+ * immediately return true, indicating that we are not done yet, just asleep.
+ */
+ void Yield()
+ {
+ jump( m_self, m_saved, 0 );
+ }
+
+ /**
+ * Function Yield()
+ *
+ * Yield with a value - passes a value of given type to the caller.
+ * Useful for implementing generator objects.
+ */
+ void Yield( ReturnType& aRetVal )
+ {
+ m_retVal = aRetVal;
+ jump( m_self, m_saved, 0 );
+ }
+
+ /**
+ * Function SetEntry()
+ *
+ * Defines the entry point for the coroutine, if not set in the constructor.
+ */
+ void SetEntry( DELEGATE<ReturnType, ArgType> aEntry )
+ {
+ m_func = aEntry;
+ }
+
+ /* Function Call()
+ *
+ * Starts execution of a coroutine, passing args as its arguments.
+ * @return true, if the coroutine has yielded and false if it has finished its
+ * execution (returned).
+ */
+ bool Call( ArgType aArgs )
+ {
+ // fixme: Clean up stack stuff. Add a guard
+ m_stack = malloc( c_defaultStackSize );
+
+ // align to 16 bytes
+ void* sp = (void*) ( ( ( (ptrdiff_t) m_stack ) + m_stackSize - 0xf ) & ( ~0x0f ) );
+
+ // correct the stack size
+ m_stackSize -= ( (size_t) m_stack + m_stackSize - (size_t) sp );
+
+ assert( m_self == NULL );
+ assert( m_saved == NULL );
+
+ m_args = &aArgs;
+#if BOOST_VERSION >= 105600
+ m_self = new boost::context::fcontext_t();
+ *m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
+#else
+ m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
+#endif
+ m_saved = new boost::context::fcontext_t();
+
+ m_running = true;
+ // off we go!
+ jump( m_saved, m_self, reinterpret_cast<intptr_t>( this ) );
+ return m_running;
+ }
+
+ /**
+ * Function Resume()
+ *
+ * Resumes execution of a previously yielded coroutine.
+ * @return true, if the coroutine has yielded again and false if it has finished its
+ * execution (returned).
+ */
+ bool Resume()
+ {
+ jump( m_saved, m_self, 0 );
+
+ return m_running;
+ }
+
+ /**
+ * Function ReturnValue()
+ *
+ * Returns the yielded value (the argument Yield() was called with)
+ */
+ const ReturnType& ReturnValue() const
+ {
+ return m_retVal;
+ }
+
+ /**
+ * Function Running()
+ *
+ * @return true, if the coroutine is active
+ */
+ bool Running() const
+ {
+ return m_running;
+ }
+
+private:
+ static const int c_defaultStackSize = 2000000; // fixme: make configurable
+
+ /* real entry point of the coroutine */
+ static void callerStub( intptr_t aData )
+ {
+ // get pointer to self
+ COROUTINE<ReturnType, ArgType>* cor = reinterpret_cast<COROUTINE<ReturnType, ArgType>*>( aData );
+
+ // call the coroutine method
+ cor->m_retVal = cor->m_func( *cor->m_args );
+ cor->m_running = false;
+
+ // go back to wherever we came from.
+ jump( cor->m_self, cor->m_saved, 0 ); // reinterpret_cast<intptr_t>( this ));
+ }
+
+ ///> Wrapper for jump_fcontext to assure compatibility between different boost versions
+ static inline intptr_t jump(boost::context::fcontext_t* aOld, boost::context::fcontext_t* aNew,
+ intptr_t aP, bool aPreserveFPU = true )
+ {
+#if BOOST_VERSION >= 105600
+ return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
+#else
+ return boost::context::jump_fcontext( aOld, aNew, aP, aPreserveFPU );
+#endif
+ }
+
+ template <typename T>
+ struct strip_ref
+ {
+ typedef T result;
+ };
+
+ template <typename T>
+ struct strip_ref<T&>
+ {
+ typedef T result;
+ };
+
+ DELEGATE<ReturnType, ArgType> m_func;
+
+ ///< pointer to coroutine entry arguments. Stripped of references
+ ///< to avoid compiler errors.
+ typename strip_ref<ArgType>::result* m_args;
+ ReturnType m_retVal;
+
+ ///< saved caller context
+ boost::context::fcontext_t* m_saved;
+
+ ///< saved coroutine context
+ boost::context::fcontext_t* m_self;
+
+ ///< coroutine stack
+ void* m_stack;
+
+ size_t m_stackSize;
+
+ bool m_running;
+};
+
+#endif
diff --git a/include/tool/delegate.h b/include/tool/delegate.h
new file mode 100644
index 0000000..a350dec
--- /dev/null
+++ b/include/tool/delegate.h
@@ -0,0 +1,100 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __DELEGATE_H
+#define __DELEGATE_H
+
+
+/**
+ * class DELEGATE
+ * A trivial delegate (pointer to member method of an object) pattern implementation.
+ * Check delegate_example.cpp for a coding sample.
+ */
+
+template <class ReturnType, class Arg>
+class DELEGATE
+{
+public:
+ typedef ReturnType (DELEGATE<ReturnType, Arg>::* MemberPointer)( Arg );
+ typedef ReturnType _ReturnType;
+ typedef Arg _ArgType;
+
+ DELEGATE()
+ {
+ }
+
+ template <class T>
+ DELEGATE( T* aObject, ReturnType(T::* aPtr)( Arg ) )
+ {
+ m_ptr = reinterpret_cast<MemberPointer>( aPtr );
+ m_object = reinterpret_cast<void*>( aObject );
+ };
+
+
+ ReturnType operator()( Arg aA ) const
+ {
+ DELEGATE<ReturnType, Arg>* casted = reinterpret_cast<DELEGATE<ReturnType, Arg>*>( m_object );
+ return (casted->*m_ptr)( aA );
+ }
+
+private:
+ MemberPointer m_ptr;
+ void* m_object;
+};
+
+/**
+ * Class DELEGATE0
+ * Same as DELEGATE, but with no arguments.
+ */
+template <class ReturnType>
+class DELEGATE0
+{
+public:
+ typedef ReturnType ( DELEGATE0<ReturnType>::* MemberPointer )();
+ typedef ReturnType _ReturnType;
+
+ DELEGATE0()
+ {
+ }
+
+ template <class T>
+ DELEGATE0( T* aObject, ReturnType(T::* aPtr)() )
+ {
+ m_ptr = reinterpret_cast<MemberPointer>( aPtr );
+ m_object = reinterpret_cast<void*>( aObject );
+ };
+
+
+ ReturnType operator()() const
+ {
+ DELEGATE0<ReturnType>* casted = reinterpret_cast<DELEGATE0<ReturnType>*>( m_object );
+ return ( casted->*m_ptr )();
+ }
+
+private:
+ MemberPointer m_ptr;
+ void* m_object;
+};
+
+#endif
diff --git a/include/tool/examples/Makefile b/include/tool/examples/Makefile
new file mode 100644
index 0000000..a605263
--- /dev/null
+++ b/include/tool/examples/Makefile
@@ -0,0 +1,9 @@
+CXXFLAGS = -I../.. -I../../boost
+
+all: delegate_example coroutine_example
+
+delegate_example: delegate_example.cpp
+ g++ -o $@ $^ $(CXXFLAGS)
+
+coroutine_example: coroutine_example.cpp
+ g++ -o $@ $^ $(CXXFLAGS) -lboost_context \ No newline at end of file
diff --git a/include/tool/examples/coroutine_example.cpp b/include/tool/examples/coroutine_example.cpp
new file mode 100644
index 0000000..c36de8b
--- /dev/null
+++ b/include/tool/examples/coroutine_example.cpp
@@ -0,0 +1,49 @@
+#include <cstdio>
+#include <string>
+
+#include <tool/coroutine.h>
+
+typedef COROUTINE<int, int> MyCoroutine;
+
+class MyClass
+{
+public:
+ int CountTo( int n )
+ {
+ printf( "%s: Coroutine says hi. I will count from 1 to %d and yield each value.\n",
+ __FUNCTION__,
+ n );
+
+ for( int i = 1; i <= n; i++ )
+ {
+ printf( "%s: Yielding %d\n", __FUNCTION__, i );
+ cofunc.Yield( i );
+ }
+ }
+
+ void Run()
+ {
+ cofunc = MyCoroutine( this, &MyClass::CountTo );
+ printf( "%s: Calling coroutine that will count from 1 to 5.\n", __FUNCTION__ );
+ cofunc.Call( 5 );
+
+ while( cofunc.Running() )
+ {
+ printf( "%s: Got value: %d\n", __FUNCTION__, cofunc.ReturnValue() );
+ cofunc.Resume();
+ }
+
+ printf( "%s: Done!\n", __FUNCTION__ );
+ }
+
+ MyCoroutine cofunc;
+};
+
+
+main() {
+ MyClass obj;
+
+ obj.Run();
+
+ return 0;
+}
diff --git a/include/tool/examples/delegate_example.cpp b/include/tool/examples/delegate_example.cpp
new file mode 100644
index 0000000..3d3c782
--- /dev/null
+++ b/include/tool/examples/delegate_example.cpp
@@ -0,0 +1,34 @@
+#include <cstdio>
+#include <string>
+
+#include <tool/delegate.h>
+
+class MyClass
+{
+public:
+ int MyMethod( const string& arg )
+ {
+ printf( "MyClass(this = %p)::MyMethod() called with string '%s', length %d\n", this,
+ arg.c_str(), arg.length() );
+ return arg.length();
+ }
+};
+
+typedef DELEGATE<int, const string&> MyDelegate;
+
+main()
+{
+ MyClass t1;
+ MyClass t2;
+
+ MyDelegate ptr1( &t1, &MyClass::MyMethod );
+ MyDelegate ptr2( &t2, &MyClass::MyMethod );
+
+ int retval1, retval2;
+
+ retval1 = ptr1( "apples" );
+ retval2 = ptr2( "cherries" );
+
+ printf( "Object 1 returned %d, object 2 returned %d\n", retval1, retval2 );
+ return 0;
+}
diff --git a/include/tool/tool_action.h b/include/tool/tool_action.h
new file mode 100644
index 0000000..727397a
--- /dev/null
+++ b/include/tool/tool_action.h
@@ -0,0 +1,223 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __TOOL_ACTION_H
+#define __TOOL_ACTION_H
+
+#include <string>
+#include <cassert>
+
+#include <tool/tool_event.h>
+
+struct BITMAP_OPAQUE;
+
+/**
+ * Class TOOL_ACTION
+ *
+ * Represents a single user action. For instance:
+ * - changing layer to top by pressing PgUp
+ * - running the DRC from the menu
+ * and so on, and so forth....
+ * Action class groups all necessary properties of an action, including explanation,
+ * icons, hotkeys, menu items, etc.
+ */
+class TOOL_ACTION
+{
+public:
+ TOOL_ACTION( const std::string& aName, TOOL_ACTION_SCOPE aScope = AS_CONTEXT,
+ int aDefaultHotKey = 0, const wxString aMenuItem = wxEmptyString,
+ const wxString& aMenuDesc = wxEmptyString, const BITMAP_OPAQUE* aIcon = NULL,
+ TOOL_ACTION_FLAGS aFlags = AF_NONE, void* aParam = NULL );
+
+ ~TOOL_ACTION();
+
+ bool operator==( const TOOL_ACTION& aRhs ) const
+ {
+ return m_id == aRhs.m_id;
+ }
+
+ bool operator!=( const TOOL_ACTION& aRhs ) const
+ {
+ return m_id != aRhs.m_id;
+ }
+
+ /**
+ * Function GetName()
+ * Returns name of the action. It is the same one that is contained in TOOL_EVENT that is
+ * sent by activating the TOOL_ACTION.
+ *
+ * @return Name of the action.
+ */
+ const std::string& GetName() const
+ {
+ return m_name;
+ }
+
+ /**
+ * Function GetId()
+ * Returns the unique id of the TOOL_ACTION object. It is valid only after registering the
+ * TOOL_ACTION by ACTION_MANAGER.
+ *
+ * @return The unique identification number. If the number is negative, then it is not valid.
+ */
+ int GetId() const
+ {
+ return m_id;
+ }
+
+ /**
+ * Function HasHotKey()
+ * Checks if the action has a hot key assigned.
+ *
+ * @return True if there is a hot key assigned, false otherwise.
+ */
+
+ /**
+ * Function MakeEvent()
+ * Returns the event associated with the action (i.e. the event that will be sent after
+ * activating the action).
+ *
+ * @return The event associated with the action.
+ */
+ TOOL_EVENT MakeEvent() const
+ {
+ if( IsActivation() )
+ return TOOL_EVENT( TC_COMMAND, TA_ACTIVATE, m_name, m_scope, m_param );
+ else if( IsNotification() )
+ return TOOL_EVENT( TC_MESSAGE, TA_NONE, m_name, m_scope, m_param );
+ else
+ return TOOL_EVENT( TC_COMMAND, TA_ACTION, m_name, m_scope, m_param );
+ }
+
+ const wxString& GetMenuItem() const
+ {
+ return m_menuItem;
+ }
+
+ void SetMenuItem( const wxString& aItem )
+ {
+ m_menuItem = aItem;
+ }
+
+ const wxString& GetDescription() const
+ {
+ return m_menuDescription;
+ }
+
+ void SetDescription( const wxString& aDescription )
+ {
+ m_menuDescription = aDescription;
+ }
+
+ TOOL_ACTION_SCOPE GetScope() const
+ {
+ return m_scope;
+ }
+
+ /**
+ * Returns name of the tool associated with the action. It is basically the action name
+ * stripped of the last part (e.g. for "pcbnew.InteractiveDrawing.drawCircle" it is
+ * "pcbnew.InteractiveDrawing").
+ */
+ std::string GetToolName() const;
+
+ /**
+ * Returns true if the action is intended to activate a tool.
+ */
+ bool IsActivation() const
+ {
+ return m_flags & AF_ACTIVATE;
+ }
+
+ /**
+ * Returns true if the action is a notification.
+ */
+ bool IsNotification() const
+ {
+ return m_flags & AF_NOTIFY;
+ }
+
+ /**
+ * Returns an icon associated with the action. It is used in context menu.
+ */
+ const BITMAP_OPAQUE* GetIcon() const
+ {
+ return m_icon;
+ }
+
+ /**
+ * Creates a hot key code that refers to a legacy hot key setting, instead of a particular key.
+ * @param aHotKey is an ID of hot key to be referred (see @hotkeys.h).
+ */
+ inline static int LegacyHotKey( int aHotKey )
+ {
+ assert( ( aHotKey & LEGACY_HK ) == 0 );
+
+ return aHotKey | LEGACY_HK;
+ }
+
+private:
+ friend class ACTION_MANAGER;
+
+ /// Returns the hot key assigned in the object definition. It may refer to a legacy hot key setting
+ /// (if LEGACY_HK flag is set).
+ int getDefaultHotKey()
+ {
+ return m_defaultHotKey;
+ }
+
+ /// Name of the action (convention is: app.[tool.]action.name)
+ std::string m_name;
+
+ /// Scope of the action
+ TOOL_ACTION_SCOPE m_scope;
+
+ /// Default hot key that activates the action.
+ const int m_defaultHotKey;
+
+ /// Menu entry text
+ wxString m_menuItem;
+
+ /// Pop-up help
+ wxString m_menuDescription;
+
+ // Icon for menu entry
+ const BITMAP_OPAQUE* m_icon;
+
+ /// Unique ID for fast matching. Assigned by ACTION_MANAGER.
+ int m_id;
+
+ /// Action flags
+ TOOL_ACTION_FLAGS m_flags;
+
+ /// Generic parameter
+ void* m_param;
+
+ /// Flag to determine the hot key settings is not a particular key, but a reference to legacy
+ /// hot key setting.
+ static const int LEGACY_HK = 0x800000;
+};
+
+#endif
diff --git a/include/tool/tool_base.h b/include/tool/tool_base.h
new file mode 100644
index 0000000..584a979
--- /dev/null
+++ b/include/tool/tool_base.h
@@ -0,0 +1,226 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __TOOL_BASE_H
+#define __TOOL_BASE_H
+
+#include <cassert>
+#include <base_struct.h> // for KICAD_T
+
+#include <tool/tool_event.h>
+#include <tool/tool_settings.h>
+
+#include <tool/delegate.h>
+
+class EDA_ITEM;
+class TOOL_MANAGER;
+
+namespace KIGFX
+{
+class VIEW;
+class VIEW_CONTROLS;
+};
+
+enum TOOL_TYPE
+{
+ ///> Tool that interacts with the user
+ INTERACTIVE = 0x01,
+
+ ///> Tool that runs in the background without any user intervention
+ BATCH = 0x02
+};
+
+/// Unique identifier for tools
+typedef int TOOL_ID;
+typedef DELEGATE<int, const TOOL_EVENT&> TOOL_STATE_FUNC;
+
+/**
+ * Class TOOL_BASE
+ *
+ * Base abstract interface for all kinds of tools.
+ */
+
+class TOOL_BASE
+{
+public:
+ TOOL_BASE( TOOL_TYPE aType, TOOL_ID aId, const std::string& aName = std::string( "" ) ) :
+ m_type( aType ),
+ m_toolId( aId ),
+ m_toolName( aName ),
+ m_toolMgr( NULL ) {};
+
+ virtual ~TOOL_BASE() {};
+
+ ///> Determines the reason of reset for a tool
+ enum RESET_REASON
+ {
+ RUN, ///< Tool is invoked after being inactive
+ MODEL_RELOAD, ///< Model changes
+ GAL_SWITCH ///< Rendering engine changes
+ };
+
+ /**
+ * Function Init()
+ * Init() is called once upon a registration of the tool.
+ *
+ * @return True if the initialization went fine, false - otherwise.
+ */
+ virtual bool Init()
+ {
+ return true;
+ }
+
+ /**
+ * Function Reset()
+ * Brings the tool to a known, initial state. If the tool claimed anything from
+ * the model or the view, it must release it when its reset.
+ * @param aReason contains information about the reason of tool reset.
+ */
+ virtual void Reset( RESET_REASON aReason ) = 0;
+
+ /**
+ * Function GetType()
+ * Returns the type of the tool.
+ * @return The type of the tool.
+ */
+ TOOL_TYPE GetType() const
+ {
+ return m_type;
+ }
+
+ /**
+ * Function GetId()
+ * Returns the unique identifier of the tool. The identifier is set by an instance of
+ * TOOL_MANAGER.
+ * @return Identifier of the tool.
+ */
+ TOOL_ID GetId() const
+ {
+ return m_toolId;
+ }
+
+ /**
+ * Function GetName()
+ * Returns the name of the tool. Tool names are expected to obey the format:
+ * application.ToolName (eg. pcbnew.InteractiveSelection).
+ * @return The name of the tool.
+ */
+ const std::string& GetName() const
+ {
+ return m_toolName;
+ }
+
+ /**
+ * Function GetManager()
+ * Returns the instance of TOOL_MANAGER that takes care of the tool.
+ * @return Instance of the TOOL_MANAGER. If there is no TOOL_MANAGER associated, it returns
+ * NULL.
+ */
+ TOOL_MANAGER* GetManager() const
+ {
+ return m_toolMgr;
+ }
+
+ /**
+ * Function SetTransitions()
+ * This method is meant to be overridden in order to specify handlers for events. It is called
+ * every time tool is reset or finished.
+ */
+ virtual void SetTransitions() {};
+
+ TOOL_SETTINGS& GetSettings();
+
+protected:
+ friend class TOOL_MANAGER;
+ friend class TOOL_SETTINGS;
+
+ /**
+ * Function attachManager()
+ *
+ * Sets the TOOL_MANAGER the tool will belong to.
+ * Called by TOOL_MANAGER::RegisterTool()
+ */
+ void attachManager( TOOL_MANAGER* aManager );
+
+ /**
+ * Function getView()
+ *
+ * Returns the instance of VIEW object used in the application. It allows tools to draw.
+ * @return The instance of VIEW.
+ */
+ KIGFX::VIEW* getView() const;
+
+ /**
+ * Function getViewControls()
+ *
+ * Returns the instance of VIEW_CONTROLS object used in the application. It allows tools to
+ * read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.)
+ * @return The instance of VIEW_CONTROLS.
+ */
+ KIGFX::VIEW_CONTROLS* getViewControls() const;
+
+ /**
+ * Function getEditFrame()
+ *
+ * Returns the application window object, casted to requested user type.
+ */
+ template <typename T>
+ T* getEditFrame() const
+ {
+ return static_cast<T*>( getEditFrameInt() );
+ }
+
+ /**
+ * Function getModel()
+ *
+ * Returns the model object if it matches the requested type.
+ */
+ template <typename T>
+ T* getModel() const
+ {
+ EDA_ITEM* m = getModelInt();
+
+ return static_cast<T*>( m );
+ }
+
+ ///> Stores the type of the tool.
+ TOOL_TYPE m_type;
+
+ ///> Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
+ TOOL_ID m_toolId;
+
+ ///> Name of the tool. Names are expected to obey the format application.ToolName
+ ///> (eg. pcbnew.InteractiveSelection).
+ std::string m_toolName;
+ TOOL_MANAGER* m_toolMgr;
+ TOOL_SETTINGS m_toolSettings;
+
+private:
+ // hide the implementation to avoid spreading half of
+ // kicad and wxWidgets headers to the tools that may not need them at all!
+ EDA_ITEM* getModelInt() const;
+ wxWindow* getEditFrameInt() const;
+};
+
+#endif
diff --git a/include/tool/tool_dispatcher.h b/include/tool/tool_dispatcher.h
new file mode 100644
index 0000000..cf6e852
--- /dev/null
+++ b/include/tool/tool_dispatcher.h
@@ -0,0 +1,135 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __TOOL_DISPATCHER_H
+#define __TOOL_DISPATCHER_H
+
+#include <vector>
+#include <wx/event.h>
+#include <tool/tool_event.h>
+
+class TOOL_MANAGER;
+class PCB_BASE_FRAME;
+
+namespace KIGFX
+{
+class VIEW;
+};
+
+/**
+ * Class TOOL_DISPATCHER
+ *
+ * - takes wx events,
+ * - fixes all wx quirks (mouse warping, panning, ordering problems, etc)
+ * - translates coordinates to world space
+ * - low-level input conditioning (drag/click threshold), updating mouse position during view auto-scroll/pan.
+ * - issues TOOL_EVENTS to the tool manager
+ */
+
+class TOOL_DISPATCHER : public wxEvtHandler
+{
+public:
+ /**
+ * Constructor
+ *
+ * @param aToolMgr: tool manager instance the events will be sent to
+ */
+ TOOL_DISPATCHER( TOOL_MANAGER* aToolMgr );
+
+ virtual ~TOOL_DISPATCHER();
+
+ /**
+ * Function ResetState()
+ * Brings the dispatcher to its initial state.
+ */
+ virtual void ResetState();
+
+ /**
+ * Function DispatchWxEvent()
+ * Processes wxEvents (mostly UI events), translates them to TOOL_EVENTs, and makes tools
+ * handle those.
+ * @param aEvent is the wxWidgets event to be processed.
+ */
+ virtual void DispatchWxEvent( wxEvent& aEvent );
+
+ /**
+ * Function DispatchWxCommand()
+ * Processes wxCommands (mostly menu related events) and runs appropriate actions (eg. run the
+ * specified tool).
+ * @param aEvent is the wxCommandEvent to be processed.
+ */
+ virtual void DispatchWxCommand( wxCommandEvent& aEvent );
+
+private:
+ ///> Number of mouse buttons that is handled in events.
+ static const int MouseButtonCount = 3;
+
+ ///> The time threshold for a mouse button press that distinguishes between a single mouse
+ ///> click and a beginning of drag event (expressed in milliseconds).
+ static const int DragTimeThreshold = 300;
+
+ ///> The distance threshold for mouse cursor that disinguishes between a single mouse click
+ ///> and a beginning of drag event (expressed in screen pixels).
+ static const int DragDistanceThreshold = 8;
+
+ ///> Handles mouse related events (click, motion, dragging).
+ bool handleMouseButton( wxEvent& aEvent, int aIndex, bool aMotion );
+
+ ///> Saves the state of key modifiers (Alt, Ctrl and so on).
+ static int decodeModifiers( const wxKeyboardState* aState )
+ {
+ int mods = 0;
+
+ if( aState->ControlDown() )
+ mods |= MD_CTRL;
+
+ if( aState->AltDown() )
+ mods |= MD_ALT;
+
+ if( aState->ShiftDown() )
+ mods |= MD_SHIFT;
+
+ return mods;
+ }
+
+ ///> Redraws the status bar and message panel.
+ void updateUI();
+
+ ///> Stores all the informations regarding a mouse button state.
+ struct BUTTON_STATE;
+
+ ///> The last mouse cursor position (in world coordinates).
+ VECTOR2D m_lastMousePos;
+
+ ///> State of mouse buttons.
+ std::vector<BUTTON_STATE*> m_buttons;
+
+ ///> Returns the instance of VIEW, used by the application.
+ KIGFX::VIEW* getView();
+
+ ///> Instance of tool manager that cooperates with the dispatcher.
+ TOOL_MANAGER* m_toolMgr;
+};
+
+#endif
diff --git a/include/tool/tool_event.h b/include/tool/tool_event.h
new file mode 100644
index 0000000..4def191
--- /dev/null
+++ b/include/tool/tool_event.h
@@ -0,0 +1,585 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __TOOL_EVENT_H
+#define __TOOL_EVENT_H
+
+#include <cstdio>
+#include <deque>
+
+#include <math/vector2d.h>
+#include <cassert>
+
+#include <boost/optional.hpp>
+
+class TOOL_ACTION;
+class TOOL_MANAGER;
+
+/**
+ * Internal (GUI-independent) event definitions.
+ * Enums are mostly self-explanatory.
+ */
+enum TOOL_EVENT_CATEGORY
+{
+ TC_NONE = 0x00,
+ TC_MOUSE = 0x01,
+ TC_KEYBOARD = 0x02,
+ TC_COMMAND = 0x04,
+ TC_MESSAGE = 0x08,
+ TC_VIEW = 0x10,
+ TC_ANY = 0xffffffff
+};
+
+enum TOOL_ACTIONS
+{
+ // UI input events
+ TA_NONE = 0x0000,
+ TA_MOUSE_CLICK = 0x0001,
+ TA_MOUSE_DBLCLICK = 0x0002,
+ TA_MOUSE_UP = 0x0004,
+ TA_MOUSE_DOWN = 0x0008,
+ TA_MOUSE_DRAG = 0x0010,
+ TA_MOUSE_MOTION = 0x0020,
+ TA_MOUSE_WHEEL = 0x0040,
+ TA_MOUSE = 0x007f,
+
+ TA_KEY_PRESSED = 0x0080,
+ TA_KEYBOARD = TA_KEY_PRESSED,
+
+ // View related events
+ TA_VIEW_REFRESH = 0x0100,
+ TA_VIEW_ZOOM = 0x0200,
+ TA_VIEW_PAN = 0x0400,
+ TA_VIEW_DIRTY = 0x0800,
+ TA_VIEW = 0x0f00,
+
+ TA_CHANGE_LAYER = 0x1000,
+
+ // Tool cancel event. Issued automagically when the user hits escape or selects End Tool from
+ // the context menu.
+ TA_CANCEL_TOOL = 0x2000,
+
+ // Context menu update. Issued whenever context menu is open and the user hovers the mouse
+ // over one of choices. Used in dynamic highligting in disambiguation menu
+ TA_CONTEXT_MENU_UPDATE = 0x4000,
+
+ // Context menu choice. Sent if the user picked something from the context menu or
+ // closed it without selecting anything.
+ TA_CONTEXT_MENU_CHOICE = 0x8000,
+
+ // Context menu is closed, no matter whether anything has been chosen or not.
+ TA_CONTEXT_MENU_CLOSED = 0x10000,
+
+ TA_CONTEXT_MENU = TA_CONTEXT_MENU_UPDATE | TA_CONTEXT_MENU_CHOICE | TA_CONTEXT_MENU_CLOSED,
+
+ // This event is sent *before* undo/redo command is performed.
+ TA_UNDO_REDO = 0x20000,
+
+ // Tool action (allows to control tools).
+ TA_ACTION = 0x40000,
+
+ // Tool activation event.
+ TA_ACTIVATE = 0x80000,
+
+ TA_ANY = 0xffffffff
+};
+
+enum TOOL_MOUSE_BUTTONS
+{
+ BUT_NONE = 0x0,
+ BUT_LEFT = 0x1,
+ BUT_RIGHT = 0x2,
+ BUT_MIDDLE = 0x4,
+ BUT_BUTTON_MASK = BUT_LEFT | BUT_RIGHT | BUT_MIDDLE,
+ BUT_ANY = 0xffffffff
+};
+
+enum TOOL_MODIFIERS
+{
+ MD_SHIFT = 0x1000,
+ MD_CTRL = 0x2000,
+ MD_ALT = 0x4000,
+ MD_MODIFIER_MASK = MD_SHIFT | MD_CTRL | MD_ALT,
+};
+
+/// Scope of tool actions
+enum TOOL_ACTION_SCOPE
+{
+ AS_CONTEXT = 1, ///> Action belongs to a particular tool (i.e. a part of a pop-up menu)
+ AS_ACTIVE, ///> All active tools
+ AS_GLOBAL ///> Global action (toolbar/main menu event, global shortcut)
+};
+
+/// Flags for tool actions
+enum TOOL_ACTION_FLAGS
+{
+ AF_NONE = 0,
+ AF_ACTIVATE = 1, ///> Action activates a tool
+ AF_NOTIFY = 2 ///> Action is a notification (it is by default passed to all tools)
+};
+
+/// Defines when a context menu is opened.
+enum CONTEXT_MENU_TRIGGER
+{
+ CMENU_BUTTON = 0, // On the right button
+ CMENU_NOW, // Right now (after TOOL_INTERACTIVE::SetContextMenu)
+ CMENU_OFF // Never
+};
+
+/**
+ * Class TOOL_EVENT
+ *
+ * Generic, UI-independent tool event.
+ */
+class TOOL_EVENT
+{
+public:
+ /**
+ * Function Format()
+ * Returns information about event in form of a human-readable string.
+ *
+ * @return Event information.
+ */
+ const std::string Format() const;
+
+ TOOL_EVENT( TOOL_EVENT_CATEGORY aCategory = TC_NONE, TOOL_ACTIONS aAction = TA_NONE,
+ TOOL_ACTION_SCOPE aScope = AS_GLOBAL, void* aParameter = NULL ) :
+ m_category( aCategory ),
+ m_actions( aAction ),
+ m_scope( aScope ),
+ m_mouseButtons( 0 ),
+ m_keyCode( 0 ),
+ m_modifiers( 0 ),
+ m_param( aParameter ) {}
+
+ TOOL_EVENT( TOOL_EVENT_CATEGORY aCategory, TOOL_ACTIONS aAction, int aExtraParam,
+ TOOL_ACTION_SCOPE aScope = AS_GLOBAL, void* aParameter = NULL ) :
+ m_category( aCategory ),
+ m_actions( aAction ),
+ m_scope( aScope ),
+ m_mouseButtons( 0 ),
+ m_keyCode( 0 ),
+ m_modifiers( 0 ),
+ m_param( aParameter )
+ {
+ if( aCategory == TC_MOUSE )
+ {
+ setMouseButtons( aExtraParam & BUT_BUTTON_MASK );
+ }
+ else if( aCategory == TC_KEYBOARD )
+ {
+ m_keyCode = aExtraParam & ~MD_MODIFIER_MASK; // Filter out modifiers
+ }
+ else if( aCategory == TC_COMMAND )
+ {
+ m_commandId = aExtraParam;
+ }
+
+ if( aCategory & ( TC_MOUSE | TC_KEYBOARD ) )
+ {
+ m_modifiers = aExtraParam & MD_MODIFIER_MASK;
+ }
+ }
+
+ TOOL_EVENT( TOOL_EVENT_CATEGORY aCategory, TOOL_ACTIONS aAction,
+ const std::string& aExtraParam, TOOL_ACTION_SCOPE aScope = AS_GLOBAL,
+ void* aParameter = NULL ) :
+ m_category( aCategory ),
+ m_actions( aAction ),
+ m_scope( aScope ),
+ m_mouseButtons( 0 ),
+ m_keyCode( 0 ),
+ m_modifiers( 0 ),
+ m_param( aParameter )
+ {
+ if( aCategory == TC_COMMAND || aCategory == TC_MESSAGE )
+ m_commandStr = aExtraParam;
+ }
+
+ ///> Returns the category (eg. mouse/keyboard/action) of an event..
+ TOOL_EVENT_CATEGORY Category() const
+ {
+ return m_category;
+ }
+
+ ///> Returns more specific information about the type of an event.
+ TOOL_ACTIONS Action() const
+ {
+ return m_actions;
+ }
+
+ ///> Returns information about difference between current mouse cursor position and the place
+ ///> where dragging has started.
+ const VECTOR2D& Delta() const
+ {
+ assert( m_category == TC_MOUSE ); // this should be used only with mouse events
+ return m_mouseDelta;
+ }
+
+ ///> Returns mouse cursor position in world coordinates.
+ const VECTOR2D& Position() const
+ {
+ assert( m_category == TC_MOUSE ); // this should be used only with mouse events
+ return m_mousePos;
+ }
+
+ ///> Returns the point where dragging has started.
+ const VECTOR2D& DragOrigin() const
+ {
+ assert( m_category == TC_MOUSE ); // this should be used only with mouse events
+ return m_mouseDragOrigin;
+ }
+
+ ///> Returns information about mouse buttons state.
+ int Buttons() const
+ {
+ assert( m_category == TC_MOUSE ); // this should be used only with mouse events
+ return m_mouseButtons;
+ }
+
+ bool IsClick( int aButtonMask = BUT_ANY ) const
+ {
+ return ( m_actions == TA_MOUSE_CLICK )
+ && ( ( m_mouseButtons & aButtonMask ) == aButtonMask );
+ }
+
+ bool IsDblClick( int aButtonMask = BUT_ANY ) const
+ {
+ return ( m_actions == TA_MOUSE_DBLCLICK )
+ && ( ( m_mouseButtons & aButtonMask ) == aButtonMask );
+ }
+
+ bool IsDrag( int aButtonMask = BUT_ANY ) const
+ {
+ return ( m_actions == TA_MOUSE_DRAG ) && ( ( m_mouseButtons & aButtonMask ) == aButtonMask );
+ }
+
+ bool IsMouseUp( int aButtonMask = BUT_ANY ) const
+ {
+ return ( m_actions == TA_MOUSE_UP ) && ( ( m_mouseButtons & aButtonMask ) == aButtonMask );
+ }
+
+ bool IsMotion() const
+ {
+ return m_actions == TA_MOUSE_MOTION;
+ }
+
+ bool IsCancel() const
+ {
+ return m_actions == TA_CANCEL_TOOL;
+ }
+
+ bool IsActivate() const
+ {
+ return m_actions == TA_ACTIVATE;
+ }
+
+ ///> Returns information about key modifiers state (Ctrl, Alt, etc.)
+ int Modifier( int aMask = MD_MODIFIER_MASK ) const
+ {
+ return m_modifiers & aMask;
+ }
+
+ int KeyCode() const
+ {
+ return m_keyCode;
+ }
+
+ bool IsKeyPressed() const
+ {
+ return m_actions == TA_KEY_PRESSED;
+ }
+
+ /**
+ * Function Matches()
+ * Tests whether two events match in terms of category & action or command.
+ *
+ * @param aEvent is the event to test against.
+ * @return True if two events match, false otherwise.
+ */
+ bool Matches( const TOOL_EVENT& aEvent ) const
+ {
+ if( !( m_category & aEvent.m_category ) )
+ return false;
+
+ if( m_category == TC_COMMAND || m_category == TC_MESSAGE )
+ {
+ if( (bool) m_commandStr && (bool) aEvent.m_commandStr )
+ return *m_commandStr == *aEvent.m_commandStr;
+
+ if( (bool) m_commandId && (bool) aEvent.m_commandId )
+ return *m_commandId == *aEvent.m_commandId;
+ }
+
+ // BUGFIX: TA_ANY should match EVERYTHING, even TA_NONE (for TC_MESSAGE)
+ if( m_actions == TA_ANY && aEvent.m_actions == TA_NONE && aEvent.m_category == TC_MESSAGE )
+ return true;
+
+ // BUGFIX: This check must happen after the TC_COMMAND check because otherwise events of
+ // the form { TC_COMMAND, TA_NONE } will be incorrectly skipped
+ if( !( m_actions & aEvent.m_actions ) )
+ return false;
+
+ return true;
+ }
+
+ /**
+ * Function IsAction()
+ * Tests if the event contains an action issued upon activation of the given TOOL_ACTION.
+ * @param aAction is the TOOL_ACTION to be checked against.
+ * @return True if it matches the given TOOL_ACTION.
+ */
+ bool IsAction( const TOOL_ACTION* aAction ) const;
+
+ /**
+ * Function Parameter()
+ * Returns a non-standard parameter assigned to the event. Its meaning depends on the
+ * target tool.
+ */
+ template<typename T>
+ inline T Parameter() const
+ {
+ return reinterpret_cast<T>( m_param );
+ }
+
+ /**
+ * Function SetParameter()
+ * Sets a non-standard parameter assigned to the event. Its meaning depends on the
+ * target tool.
+ * @param aParam is the new parameter.
+ */
+ template<typename T>
+ void SetParameter(T aParam)
+ {
+ m_param = (void*) aParam;
+ }
+
+ boost::optional<int> GetCommandId() const
+ {
+ return m_commandId;
+ }
+
+ boost::optional<std::string> GetCommandStr() const
+ {
+ return m_commandStr;
+ }
+
+ void SetMousePosition( const VECTOR2D& aP )
+ {
+ m_mousePos = aP;
+ }
+
+private:
+ friend class TOOL_DISPATCHER;
+
+ void setMouseDragOrigin( const VECTOR2D& aP )
+ {
+ m_mouseDragOrigin = aP;
+ }
+
+ void setMouseDelta( const VECTOR2D& aP )
+ {
+ m_mouseDelta = aP;
+ }
+
+ void setMouseButtons( int aButtons )
+ {
+ assert( ( aButtons & ~BUT_BUTTON_MASK ) == 0 );
+ m_mouseButtons = aButtons;
+ }
+
+ void setModifiers( int aMods )
+ {
+ assert( ( aMods & ~MD_MODIFIER_MASK ) == 0 );
+ m_modifiers = aMods;
+ }
+
+ TOOL_EVENT_CATEGORY m_category;
+ TOOL_ACTIONS m_actions;
+ TOOL_ACTION_SCOPE m_scope;
+
+ ///> Difference between mouse cursor position and
+ ///> the point where dragging event has started
+ VECTOR2D m_mouseDelta;
+
+ ///> Current mouse cursor position
+ VECTOR2D m_mousePos;
+
+ ///> Point where dragging has started
+ VECTOR2D m_mouseDragOrigin;
+
+ ///> State of mouse buttons
+ int m_mouseButtons;
+
+ ///> Stores code of pressed/released key
+ int m_keyCode;
+
+ ///> State of key modifierts (Ctrl/Alt/etc.)
+ int m_modifiers;
+
+ ///> Generic parameter used for passing non-standard data.
+ void* m_param;
+
+ boost::optional<int> m_commandId;
+ boost::optional<std::string> m_commandStr;
+};
+
+typedef boost::optional<TOOL_EVENT> OPT_TOOL_EVENT;
+
+/**
+ * Class TOOL_EVENT_LIST
+ *
+ * A list of TOOL_EVENTs, with overloaded || operators allowing for
+ * concatenating TOOL_EVENTs with little code.
+ */
+class TOOL_EVENT_LIST
+{
+public:
+ typedef TOOL_EVENT value_type;
+ typedef std::deque<TOOL_EVENT>::iterator iterator;
+ typedef std::deque<TOOL_EVENT>::const_iterator const_iterator;
+
+ ///> Default constructor. Creates an empty list.
+ TOOL_EVENT_LIST()
+ {}
+
+ ///> Constructor for a list containing only one TOOL_EVENT.
+ TOOL_EVENT_LIST( const TOOL_EVENT& aSingleEvent )
+ {
+ m_events.push_back( aSingleEvent );
+ }
+
+ /**
+ * Function Format()
+ * Returns information about event in form of a human-readable string.
+ *
+ * @return Event information.
+ */
+ const std::string Format() const;
+
+ boost::optional<const TOOL_EVENT&> Matches( const TOOL_EVENT& aEvent ) const
+ {
+ for( const_iterator i = m_events.begin(); i != m_events.end(); ++i )
+ if( i->Matches( aEvent ) )
+ return *i;
+
+ return boost::optional<const TOOL_EVENT&>();
+ }
+
+ /**
+ * Function Add()
+ * Adds a tool event to the list.
+ * @param aEvent is the tool event to be addded.
+ */
+ void Add( const TOOL_EVENT& aEvent )
+ {
+ m_events.push_back( aEvent );
+ }
+
+ iterator begin()
+ {
+ return m_events.begin();
+ }
+
+ iterator end()
+ {
+ return m_events.end();
+ }
+
+ const_iterator cbegin() const
+ {
+ return m_events.begin();
+ }
+
+ const_iterator cend() const
+ {
+ return m_events.end();
+ }
+
+ int size() const
+ {
+ return m_events.size();
+ }
+
+ void clear()
+ {
+ m_events.clear();
+ }
+
+ TOOL_EVENT_LIST& operator=( const TOOL_EVENT_LIST& aEventList )
+ {
+ m_events.clear();
+
+ for( std::deque<TOOL_EVENT>::const_iterator i = aEventList.m_events.begin();
+ i != aEventList.m_events.end(); ++i )
+ {
+ m_events.push_back( *i );
+ }
+
+ return *this;
+ }
+
+ TOOL_EVENT_LIST& operator=( const TOOL_EVENT& aEvent )
+ {
+ m_events.clear();
+ m_events.push_back( aEvent );
+ return *this;
+ }
+
+ TOOL_EVENT_LIST& operator||( const TOOL_EVENT& aEvent )
+ {
+ Add( aEvent );
+ return *this;
+ }
+
+ TOOL_EVENT_LIST& operator||( const TOOL_EVENT_LIST& aEvent )
+ {
+ std::copy( aEvent.m_events.begin(), aEvent.m_events.end(), std::back_inserter( m_events ) );
+ return *this;
+ }
+
+private:
+ std::deque<TOOL_EVENT> m_events;
+};
+
+inline const TOOL_EVENT_LIST operator||( const TOOL_EVENT& aEventA, const TOOL_EVENT& aEventB )
+{
+ TOOL_EVENT_LIST l;
+
+ l.Add( aEventA );
+ l.Add( aEventB );
+
+ return l;
+}
+
+inline const TOOL_EVENT_LIST operator||( const TOOL_EVENT& aEvent,
+ const TOOL_EVENT_LIST& aEventList )
+{
+ TOOL_EVENT_LIST l( aEventList );
+
+ l.Add( aEvent );
+ return l;
+}
+
+#endif
diff --git a/include/tool/tool_interactive.h b/include/tool/tool_interactive.h
new file mode 100644
index 0000000..17d2de7
--- /dev/null
+++ b/include/tool/tool_interactive.h
@@ -0,0 +1,121 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __TOOL_INTERACTIVE_H
+#define __TOOL_INTERACTIVE_H
+
+#include <string>
+
+#include <tool/tool_event.h>
+#include <tool/tool_base.h>
+
+class CONTEXT_MENU;
+
+class TOOL_INTERACTIVE : public TOOL_BASE
+{
+public:
+ /**
+ * Constructor
+ *
+ * Creates a tool with given id & name. The name must be unique. */
+ TOOL_INTERACTIVE( TOOL_ID aId, const std::string& aName );
+
+ /**
+ * Constructor
+ *
+ * Creates a tool with given name. The name must be unique. */
+ TOOL_INTERACTIVE( const std::string& aName );
+ virtual ~TOOL_INTERACTIVE();
+
+ /**
+ * Function Activate()
+ * Runs the tool. After activation, the tool starts receiving events until it is finished.
+ */
+ void Activate();
+
+ /**
+ * Function SetContextMenu()
+ *
+ * Assigns a context menu and tells when it should be activated.
+ * @param aMenu is the menu to be assigned.
+ * @param aTrigger determines conditions upon which the context menu is activated.
+ */
+ void SetContextMenu( CONTEXT_MENU* aMenu, CONTEXT_MENU_TRIGGER aTrigger = CMENU_BUTTON );
+
+ /**
+ * Function Go()
+ *
+ * Defines which state (aStateFunc) to go when a certain event arrives (aConditions).
+ * No conditions means any event.
+ */
+ template <class T>
+ void Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
+ const TOOL_EVENT_LIST& aConditions = TOOL_EVENT( TC_ANY, TA_ANY ) );
+
+ /**
+ * Function Wait()
+ *
+ * Suspends execution of the tool until an event specified in aEventList arrives.
+ * No parameters means waiting for any event.
+ */
+ OPT_TOOL_EVENT Wait( const TOOL_EVENT_LIST& aEventList = TOOL_EVENT( TC_ANY, TA_ANY ) );
+
+ /** functions below are not yet implemented - their interface may change */
+ /*template <class Parameters, class ReturnValue>
+ bool InvokeTool( const std::string& aToolName, const Parameters& parameters,
+ ReturnValue& returnValue );
+
+ template <class Parameters, class ReturnValue>
+ bool InvokeWindow( const std::string& aWindowName, const Parameters& parameters,
+ ReturnValue& returnValue );
+
+ template <class T>
+ void Yield( const T& returnValue );*/
+
+protected:
+ /* helper functions for constructing events for Wait() and Go() with less typing */
+ const TOOL_EVENT evActivate( std::string aToolName = "" );
+ const TOOL_EVENT evCommand( int aCommandId = -1 );
+ const TOOL_EVENT evCommand( std::string aCommandStr = "" );
+ const TOOL_EVENT evMotion();
+ const TOOL_EVENT evClick( int aButton = BUT_ANY );
+ const TOOL_EVENT evDrag( int aButton = BUT_ANY );
+ const TOOL_EVENT evButtonUp( int aButton = BUT_ANY );
+ const TOOL_EVENT evButtonDown(int aButton = BUT_ANY );
+
+private:
+ void goInternal( TOOL_STATE_FUNC& aState, const TOOL_EVENT_LIST& aConditions );
+};
+
+// hide TOOL_MANAGER implementation
+template <class T>
+void TOOL_INTERACTIVE::Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
+ const TOOL_EVENT_LIST& aConditions )
+{
+ TOOL_STATE_FUNC sptr( static_cast<T*>( this ), aStateFunc );
+
+ goInternal( sptr, aConditions );
+}
+
+#endif
diff --git a/include/tool/tool_manager.h b/include/tool/tool_manager.h
new file mode 100644
index 0000000..9b28f23
--- /dev/null
+++ b/include/tool/tool_manager.h
@@ -0,0 +1,455 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __TOOL_MANAGER_H
+#define __TOOL_MANAGER_H
+
+#include <deque>
+#include <typeinfo>
+#include <map>
+
+#include <tool/tool_base.h>
+
+class TOOL_BASE;
+class ACTION_MANAGER;
+class CONTEXT_MENU;
+class wxWindow;
+
+/**
+ * Class TOOL_MANAGER.
+ * Master controller class:
+ * - registers editing tools
+ * - pumps UI events to tools requesting them
+ * - manages tool state machines (transitions and wait requests)
+ */
+class TOOL_MANAGER
+{
+public:
+ TOOL_MANAGER();
+
+ ~TOOL_MANAGER();
+
+ /**
+ * Generates a unique ID from for a tool with given name.
+ */
+ static TOOL_ID MakeToolId( const std::string& aToolName );
+
+ /**
+ * Function RegisterTool()
+ * Adds a tool to the manager set and sets it up. Called once for
+ * each tool during application initialization.
+ * @param aTool: tool to be added. Ownership is transferred.
+ */
+ void RegisterTool( TOOL_BASE* aTool );
+
+ /**
+ * Function InvokeTool()
+ * Calls a tool by sending a tool activation event to tool of given ID.
+ *
+ * @param aToolId is the ID number of the requested tool.
+ * @return True if the requested tool was invoked successfully.
+ */
+ bool InvokeTool( TOOL_ID aToolId );
+
+ /**
+ * Function InvokeTool()
+ * Calls a tool by sending a tool activation event to tool of given name.
+ *
+ * @param aToolName is the name of the requested tool.
+ * @return True if the requested tool was invoked successfully.
+ */
+ bool InvokeTool( const std::string& aToolName );
+
+ /**
+ * Function RegisterAction()
+ * Registers an action that can be used to control tools (eg. invoke, trigger specific
+ * behaviours).
+ *
+ * @param aAction is the action to be registered.
+ */
+ void RegisterAction( TOOL_ACTION* aAction );
+
+ /**
+ * Function UnregisterAction()
+ * Unregisters an action, so it is no longer active.
+ *
+ * @param aAction is the action to be unregistered.
+ */
+ void UnregisterAction( TOOL_ACTION* aAction );
+
+ /**
+ * Function RunAction()
+ * Runs the specified action. The common format for action names is "application.ToolName.Action".
+ *
+ * @param aActionName is the name of action to be invoked.
+ * @param aNow decides if the action has to be run immediately or after the current coroutine
+ * is preemptied.
+ * @param aParam is an optional parameter that might be used by the invoked action. Its meaning
+ * depends on the action.
+ * @return False if the action was not found.
+ */
+ template<typename T>
+ bool RunAction( const std::string& aActionName, bool aNow = false, T aParam = NULL )
+ {
+ return RunAction( aActionName, aNow, reinterpret_cast<void*>( aParam ) );
+ }
+
+ bool RunAction( const std::string& aActionName, bool aNow, void* aParam );
+
+ bool RunAction( const std::string& aActionName, bool aNow = false )
+ {
+ return RunAction( aActionName, aNow, (void*) NULL );
+ }
+
+ /**
+ * Function RunAction()
+ * Runs the specified action.
+ *
+ * @param aAction is the action to be invoked.
+ * @param aNow decides if the action has to be run immediately or after the current coroutine
+ * is preemptied.
+ * @param aParam is an optional parameter that might be used by the invoked action. Its meaning
+ * depends on the action.
+ */
+ template<typename T>
+ void RunAction( const TOOL_ACTION& aAction, bool aNow = false, T aParam = NULL )
+ {
+ RunAction( aAction, aNow, reinterpret_cast<void*>( aParam ) );
+ }
+
+ void RunAction( const TOOL_ACTION& aAction, bool aNow, void* aParam );
+
+ void RunAction( const TOOL_ACTION& aAction, bool aNow = false )
+ {
+ RunAction( aAction, aNow, (void*) NULL );
+ }
+
+ ///> @copydoc ACTION_MANAGER::GetHotKey()
+ int GetHotKey( const TOOL_ACTION& aAction );
+
+ ///> @copydoc ACTION_MANAGER::UpdateHotKeys()
+ void UpdateHotKeys();
+
+ /**
+ * Function FindTool()
+ * Searches for a tool with given ID.
+ *
+ * @param aId is the ID number of the requested tool.
+ * @return Pointer to the requested tool or NULL in case of failure.
+ */
+ TOOL_BASE* FindTool( int aId ) const;
+
+ /**
+ * Function FindTool()
+ * Searches for a tool with given name.
+ *
+ * @param aName is the name of the requested tool.
+ * @return Pointer to the requested tool or NULL in case of failure.
+ */
+ TOOL_BASE* FindTool( const std::string& aName ) const;
+
+ /*
+ * Function GetTool()
+ * Returns the tool of given type or NULL if there is no such tool registered.
+ */
+ template<typename T>
+ T* GetTool()
+ {
+ std::map<const char*, TOOL_BASE*>::iterator tool = m_toolTypes.find( typeid( T ).name() );
+
+ if( tool != m_toolTypes.end() )
+ return static_cast<T*>( tool->second );
+
+ return NULL;
+ }
+
+ /**
+ * Function DeactivateTool()
+ * Deactivates the currently active tool.
+ */
+ void DeactivateTool();
+
+ /**
+ * Function ResetTools()
+ * Resets all tools (i.e. calls their Reset() method).
+ */
+ void ResetTools( TOOL_BASE::RESET_REASON aReason );
+
+ /**
+ * Propagates an event to tools that requested events of matching type(s).
+ * @param aEvent is the event to be processed.
+ */
+ bool ProcessEvent( const TOOL_EVENT& aEvent );
+
+ /**
+ * Puts an event to the event queue to be processed at the end of event processing cycle.
+ * @param aEvent is the event to be put into the queue.
+ */
+ inline void PostEvent( const TOOL_EVENT& aEvent )
+ {
+ m_eventQueue.push_back( aEvent );
+ }
+
+ /**
+ * Sets the work environment (model, view, view controls and the parent window).
+ * These are made available to the tool. Called by the parent frame (PCB_EDIT_FRAME)
+ * when the board is set up.
+ */
+ void SetEnvironment( EDA_ITEM* aModel, KIGFX::VIEW* aView,
+ KIGFX::VIEW_CONTROLS* aViewControls, wxWindow* aFrame );
+
+ /* Accessors for the environment objects (view, model, etc.) */
+ KIGFX::VIEW* GetView() const
+ {
+ return m_view;
+ }
+
+ inline KIGFX::VIEW_CONTROLS* GetViewControls() const
+ {
+ return m_viewControls;
+ }
+
+ inline EDA_ITEM* GetModel() const
+ {
+ return m_model;
+ }
+
+ inline wxWindow* GetEditFrame() const
+ {
+ return m_editFrame;
+ }
+
+ /**
+ * Returns id of the tool that is on the top of the active tools stack
+ * (was invoked the most recently).
+ * @return Id of the currently used tool.
+ */
+ inline int GetCurrentToolId() const
+ {
+ return m_activeTools.front();
+ }
+
+ /**
+ * Returns the tool that is on the top of the active tools stack
+ * (was invoked the most recently).
+ * @return Pointer to the currently used tool.
+ */
+ inline TOOL_BASE* GetCurrentTool() const
+ {
+ return FindTool( GetCurrentToolId() );
+ }
+
+ /**
+ * Returns priority of a given tool. Higher number means that the tool is closer to the
+ * beginning of the active tools queue (i.e. receives events earlier, tools with lower
+ * priority receive events later).
+ * @param aToolId is the id of queried tool.
+ * @return The priority of a given tool. If returned number is negative, then it means that
+ * the tool id is invalid or the tool is not active.
+ */
+ int GetPriority( int aToolId ) const;
+
+ /**
+ * Defines a state transition - the events that cause a given handler method in the tool
+ * to be called. Called by TOOL_INTERACTIVE::Go(). May be called from a coroutine context.
+ */
+ void ScheduleNextState( TOOL_BASE* aTool, TOOL_STATE_FUNC& aHandler,
+ const TOOL_EVENT_LIST& aConditions );
+
+ /**
+ * Pauses execution of a given tool until one or more events matching aConditions arrives.
+ * The pause/resume operation is done through COROUTINE object.
+ * Called only from coroutines.
+ */
+ boost::optional<TOOL_EVENT> ScheduleWait( TOOL_BASE* aTool,
+ const TOOL_EVENT_LIST& aConditions );
+
+ /**
+ * Sets behaviour of the tool's context popup menu.
+ * @param aTool - the parent tool
+ * @param aMenu - the menu structure, defined by the tool
+ * @param aTrigger - when the menu is activated:
+ * CMENU_NOW: opens the menu right now
+ * CMENU_BUTTON: opens the menu when RMB is pressed
+ * CMENU_OFF: menu is disabled.
+ * May be called from a coroutine context.
+ */
+ void ScheduleContextMenu( TOOL_BASE* aTool, CONTEXT_MENU* aMenu,
+ CONTEXT_MENU_TRIGGER aTrigger );
+
+ /**
+ * Allows a tool to pass the already handled event to the next tool on the stack.
+ */
+ void PassEvent()
+ {
+ m_passEvent = true;
+ }
+
+ /**
+ * Stores an information to the system clipboard.
+ * @param aText is the information to be stored.
+ * @return False if error occured.
+ */
+ bool SaveClipboard( const std::string& aText );
+
+ /**
+ * Returns the information currently stored in the system clipboard. If data stored in the
+ * clipboard is in non-text format, empty string is returned.
+ */
+ std::string GetClipboard() const;
+
+private:
+ struct TOOL_STATE;
+ typedef std::pair<TOOL_EVENT_LIST, TOOL_STATE_FUNC> TRANSITION;
+
+ /**
+ * Function dispatchInternal
+ * Passes an event at first to the active tools, then to all others.
+ */
+ void dispatchInternal( const TOOL_EVENT& aEvent );
+
+ /**
+ * Function dispatchStandardEvents()
+ * Handles specific events, that are intended for TOOL_MANAGER rather than tools.
+ * @param aEvent is the event to be processed.
+ * @return False if the event was processed and should not go any further.
+ */
+ bool dispatchStandardEvents( const TOOL_EVENT& aEvent );
+
+ /**
+ * Function dispatchActivation()
+ * Checks if it is a valid activation event and invokes a proper tool.
+ * @param aEvent is an event to be tested.
+ * @return True if a tool was invoked, false otherwise.
+ */
+ bool dispatchActivation( const TOOL_EVENT& aEvent );
+
+ /**
+ * Function dispatchContextMenu()
+ * Handles context menu related events.
+ */
+ void dispatchContextMenu( const TOOL_EVENT& aEvent );
+
+ /**
+ * Function invokeTool()
+ * Invokes a tool by sending a proper event (in contrary to runTool, which makes the tool run
+ * for real).
+ * @param aTool is the tool to be invoked.
+ */
+ bool invokeTool( TOOL_BASE* aTool );
+
+ /**
+ * Function runTool()
+ * Makes a tool active, so it can receive events and react to them. Activated tool is pushed
+ * on the active tools stack, so the last activated tool receives events first.
+ *
+ * @param aToolId is the ID number of tool to be run.
+ */
+ bool runTool( TOOL_ID aToolId );
+
+ /**
+ * Function runTool()
+ * Makes a tool active, so it can receive events and react to them. Activated tool is pushed
+ * on the active tools stack, so the last activated tool receives events first.
+ *
+ * @param aName is the name of tool to be run.
+ */
+ bool runTool( const std::string& aName );
+
+ /**
+ * Function runTool()
+ * Makes a tool active, so it can receive events and react to them. Activated tool is pushed
+ * on the active tools stack, so the last activated tool receives events first.
+ *
+ * @param aTool is the tool to be run.
+ */
+ bool runTool( TOOL_BASE* aTool );
+
+ template <class Parameters>
+ void invokeTool( const std::string& aName, const Parameters& aToolParams );
+
+ /**
+ * Function finishTool()
+ * Deactivates a tool and does the necessary clean up.
+ *
+ * @param aState is the state variable of the tool to be stopped.
+ * @param aDeactivate decides if the tool should be removed from the active tools set.
+ * @return True if the tool should be deactivated (note it does not necessarily mean it has
+ * been deactivated, aDeactivate parameter decides).
+ */
+ bool finishTool( TOOL_STATE* aState, bool aDeactivate = true );
+
+ /**
+ * Function isRegistered()
+ * Returns information about a tool registration status.
+ *
+ * @param aTool is the tool to be checked.
+ * @return true if the tool is in the registered tools list, false otherwise.
+ */
+ bool isRegistered( TOOL_BASE* aTool ) const
+ {
+ return m_toolState.count( aTool ) > 0;
+ }
+
+ /**
+ * Function isActive()
+ * Returns information about a tool activation status.
+ *
+ * @param aTool is the tool to be checked.
+ * @return True if the tool is on the active tools stack, false otherwise.
+ */
+ bool isActive( TOOL_BASE* aTool );
+
+ /// Index of registered tools current states, associated by tools' objects.
+ std::map<TOOL_BASE*, TOOL_STATE*> m_toolState;
+
+ /// Index of the registered tools current states, associated by tools' names.
+ std::map<std::string, TOOL_STATE*> m_toolNameIndex;
+
+ /// Index of the registered tools to easily lookup by their type.
+ std::map<const char*, TOOL_BASE*> m_toolTypes;
+
+ /// Index of the registered tools current states, associated by tools' ID numbers.
+ std::map<TOOL_ID, TOOL_STATE*> m_toolIdIndex;
+
+ /// Stack of the active tools
+ std::list<TOOL_ID> m_activeTools;
+
+ /// Instance of ACTION_MANAGER that handles TOOL_ACTIONs
+ ACTION_MANAGER* m_actionMgr;
+
+ EDA_ITEM* m_model;
+ KIGFX::VIEW* m_view;
+ KIGFX::VIEW_CONTROLS* m_viewControls;
+ wxWindow* m_editFrame;
+
+ /// Queue that stores events to be processed at the end of the event processing cycle.
+ std::list<TOOL_EVENT> m_eventQueue;
+
+ /// Flag saying if the currently processed event should be passed to other tools.
+ bool m_passEvent;
+};
+
+#endif
diff --git a/include/tool/tool_settings.h b/include/tool/tool_settings.h
new file mode 100644
index 0000000..64d2612
--- /dev/null
+++ b/include/tool/tool_settings.h
@@ -0,0 +1,80 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef __TOOL_SETTINGS_H
+#define __TOOL_SETTINGS_H
+
+#include <wx/confbase.h>
+
+/**
+ * Class TOOL_SETTINGS
+ *
+ * Manages persistent settings for a tool (just a simple wrapper to wxConfigBase)
+ */
+class TOOL_BASE;
+
+class TOOL_SETTINGS
+{
+ public:
+ TOOL_SETTINGS( TOOL_BASE* aTool = NULL );
+ ~TOOL_SETTINGS();
+
+ template<class T>
+ T Get( const wxString& aName, T aDefaultValue ) const
+ {
+ wxConfigBase* config = getConfigBase();
+
+ if( !config )
+ return aDefaultValue;
+
+ T tmp = aDefaultValue;
+
+ config->Read( getKeyName( aName ), &tmp );
+ return tmp;
+ }
+
+ template<class T>
+ void Set( const wxString& aName, const T &aValue )
+ {
+ wxConfigBase* config = getConfigBase();
+
+ if( !config )
+ return;
+
+ config->Write( getKeyName( aName ), aValue );
+ }
+
+ private:
+ wxString getKeyName( const wxString& aEntryName ) const;
+
+ ///> Returns pointer to currently used wxConfigBase. It might be NULL, if there is no
+ ///> TOOL_BASE assigned.
+ wxConfigBase* getConfigBase() const;
+
+ TOOL_BASE* m_tool;
+
+};
+
+#endif
diff --git a/include/trigo.h b/include/trigo.h
new file mode 100644
index 0000000..c48d763
--- /dev/null
+++ b/include/trigo.h
@@ -0,0 +1,274 @@
+/**
+ * @file trigo.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef TRIGO_H
+#define TRIGO_H
+#include <math.h>
+#include <wx/gdicmn.h> // For wxPoint
+
+/**
+ * Function IsPointOnSegment
+ * @param aSegStart The first point of the segment S.
+ * @param aSegEnd The second point of the segment S.
+ * @param aTestPoint The point P to test.
+ * @return true if the point P is on the segment S.
+ * faster than TestSegmentHit() because P should be exactly on S
+ * therefore works fine only for H, V and 45 deg segm.
+ * suitable for busses and wires in eeschema, otherwise use TestSegmentHit()
+ */
+bool IsPointOnSegment( const wxPoint& aSegStart, const wxPoint& aSegEnd,
+ const wxPoint& aTestPoint );
+
+/**
+ * Function SegmentIntersectsSegment
+ *
+ * @param a_p1_l1 The first point of the first line.
+ * @param a_p2_l1 The second point of the first line.
+ * @param a_p1_l2 The first point of the second line.
+ * @param a_p2_l2 The second point of the second line.
+ * @return bool - true if the two segments defined by four points intersect.
+ * (i.e. if the 2 segments have at least a common point)
+ */
+bool SegmentIntersectsSegment( const wxPoint &a_p1_l1, const wxPoint &a_p2_l1,
+ const wxPoint &a_p1_l2, const wxPoint &a_p2_l2 );
+
+/*
+ * Calculate the new point of coord coord pX, pY,
+ * for a rotation center 0, 0, and angle in (1 / 10 degree)
+ */
+void RotatePoint( int *pX, int *pY, double angle );
+
+/*
+ * Calculate the new point of coord coord pX, pY,
+ * for a rotation center cx, cy, and angle in (1 / 10 degree)
+ */
+void RotatePoint( int *pX, int *pY, int cx, int cy, double angle );
+
+/*
+ * Calculates the new coord point point
+ * for a rotation angle in (1 / 10 degree)
+ */
+inline void RotatePoint( wxPoint* point, double angle )
+{
+ RotatePoint( &point->x, &point->y, angle );
+}
+
+/*
+ * Calculates the new coord point point
+ * for a center rotation center and angle in (1 / 10 degree)
+ */
+void RotatePoint( wxPoint *point, const wxPoint & centre, double angle );
+
+void RotatePoint( double *pX, double *pY, double angle );
+
+void RotatePoint( double *pX, double *pY, double cx, double cy, double angle );
+
+/* Return the arc tangent of 0.1 degrees coord vector dx, dy
+ * between -1800 and 1800
+ * Equivalent to atan2 (but faster for calculations if
+ * the angle is 0 to -1800, or + - 900)
+ * Lorenzo: In fact usually atan2 already has to do these optimizations
+ * (due to the discontinuity in tan) but this function also returns
+ * in decidegrees instead of radians, so it's handier
+ */
+double ArcTangente( int dy, int dx );
+
+//! @brief Euclidean norm of a 2D vector
+//! @param vector Two-dimensional vector
+//! @return Euclidean norm of the vector
+inline double EuclideanNorm( const wxPoint &vector )
+{
+ // this is working with doubles
+ return hypot( vector.x, vector.y );
+}
+
+inline double EuclideanNorm( const wxSize &vector )
+{
+ // this is working with doubles, too
+ return hypot( vector.x, vector.y );
+}
+
+//! @brief Compute the distance between a line and a reference point
+//! Reference: http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html
+//! @param linePointA Point on line
+//! @param linePointB Point on line
+//! @param referencePoint Reference point
+inline double DistanceLinePoint( const wxPoint &linePointA,
+ const wxPoint &linePointB,
+ const wxPoint &referencePoint )
+{
+ // Some of the multiple double casts are redundant. However in the previous
+ // definition the cast was (implicitly) done too late, just before
+ // the division (EuclideanNorm gives a double so from int it would
+ // be promoted); that means that the whole expression were
+ // vulnerable to overflow during int multiplications
+ return fabs( ( double(linePointB.x - linePointA.x) *
+ double(linePointA.y - referencePoint.y) -
+ double(linePointA.x - referencePoint.x ) *
+ double(linePointB.y - linePointA.y) )
+ / EuclideanNorm( linePointB - linePointA ) );
+}
+
+//! @brief Test, if two points are near each other
+//! @param pointA First point
+//! @param pointB Second point
+//! @param threshold The maximum distance
+//! @return True or false
+inline bool HitTestPoints( const wxPoint &pointA, const wxPoint &pointB,
+ double threshold )
+{
+ wxPoint vectorAB = pointB - pointA;
+
+ // Compare the distances squared. The double is needed to avoid
+ // overflow during int multiplication
+ double sqdistance = (double)vectorAB.x * vectorAB.x +
+ (double)vectorAB.y * vectorAB.y;
+
+ return sqdistance < threshold * threshold;
+}
+
+//! @brief Determine the cross product
+//! @param vectorA Two-dimensional vector
+//! @param vectorB Two-dimensional vector
+inline double CrossProduct( const wxPoint &vectorA, const wxPoint &vectorB )
+{
+ // As before the cast is to avoid int overflow
+ return (double)vectorA.x * vectorB.y - (double)vectorA.y * vectorB.x;
+}
+
+/**
+ * Function TestSegmentHit
+ * test for hit on line segment
+ * i.e. a reference point is within a given distance from segment
+ * @param aRefPoint = reference point to test
+ * @param aStart is the first end-point of the line segment
+ * @param aEnd is the second end-point of the line segment
+ * @param aDist = maximum distance for hit
+*/
+bool TestSegmentHit( const wxPoint &aRefPoint, wxPoint aStart,
+ wxPoint aEnd, int aDist );
+
+/**
+ * Function GetLineLength
+ * returns the length of a line segment defined by \a aPointA and \a aPointB.
+ * See also EuclideanNorm and Distance for the single vector or four
+ * scalar versions
+ * @return Length of a line (as double)
+ */
+inline double GetLineLength( const wxPoint& aPointA, const wxPoint& aPointB )
+{
+ // Implicitly casted to double
+ return hypot( aPointA.x - aPointB.x,
+ aPointA.y - aPointB.y );
+}
+
+// These are the usual degrees <-> radians conversion routines
+inline double DEG2RAD( double deg ) { return deg * M_PI / 180.0; }
+inline double RAD2DEG( double rad ) { return rad * 180.0 / M_PI; }
+
+// These are the same *but* work with the internal 'decidegrees' unit
+inline double DECIDEG2RAD( double deg ) { return deg * M_PI / 1800.0; }
+inline double RAD2DECIDEG( double rad ) { return rad * 1800.0 / M_PI; }
+
+/* These are templated over T (and not simply double) because eeschema
+ is still using int for angles in some place */
+
+/// Normalize angle to be in the -360.0 .. 360.0:
+template <class T> inline void NORMALIZE_ANGLE_360( T &Angle )
+{
+ while( Angle < -3600 )
+ Angle += 3600;
+ while( Angle > 3600 )
+ Angle -= 3600;
+}
+
+/// Normalize angle to be in the 0.0 .. 360.0 range:
+template <class T> inline void NORMALIZE_ANGLE_POS( T &Angle )
+{
+ while( Angle < 0 )
+ Angle += 3600;
+ while( Angle >= 3600 )
+ Angle -= 3600;
+}
+
+/// Add two angles (keeping the result normalized). T2 is here
+// because most of the time it's an int (and templates don't promote in
+// that way)
+template <class T, class T2> inline T AddAngles( T a1, T2 a2 )
+{
+ a1 += a2;
+ NORMALIZE_ANGLE_POS( a1 );
+ return a1;
+}
+
+template <class T> inline void NEGATE_AND_NORMALIZE_ANGLE_POS( T &Angle )
+{
+ Angle = -Angle;
+ while( Angle < 0 )
+ Angle += 3600;
+ while( Angle >= 3600 )
+ Angle -= 3600;
+}
+
+/// Normalize angle to be in the -90.0 .. 90.0 range
+template <class T> inline void NORMALIZE_ANGLE_90( T &Angle )
+{
+ while( Angle < -900 )
+ Angle += 1800;
+ while( Angle > 900 )
+ Angle -= 1800;
+}
+
+/// Normalize angle to be in the -180.0 .. 180.0 range
+template <class T> inline void NORMALIZE_ANGLE_180( T &Angle )
+{
+ while( Angle <= -1800 )
+ Angle += 3600;
+ while( Angle > 1800 )
+ Angle -= 3600;
+}
+
+/**
+ * Circle generation utility: computes r * sin(a)
+ * Where a is in decidegrees, not in radians.
+ */
+inline double sindecideg( double r, double a )
+{
+ return r * sin( DECIDEG2RAD( a ) );
+}
+
+/**
+ * Circle generation utility: computes r * cos(a)
+ * Where a is in decidegrees, not in radians.
+ */
+inline double cosdecideg( double r, double a )
+{
+ return r * cos( DECIDEG2RAD( a ) );
+}
+
+#endif
diff --git a/include/ttl/halfedge/hedart.h b/include/ttl/halfedge/hedart.h
new file mode 100644
index 0000000..2749c50
--- /dev/null
+++ b/include/ttl/halfedge/hedart.h
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
+ * Applied Mathematics, Norway.
+ *
+ * Contact information: E-mail: tor.dokken@sintef.no
+ * SINTEF ICT, Department of Applied Mathematics,
+ * P.O. Box 124 Blindern,
+ * 0314 Oslo, Norway.
+ *
+ * This file is part of TTL.
+ *
+ * TTL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * TTL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with TTL. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public
+ * License, a covered work must retain the producer line in every data
+ * file that is created or manipulated using TTL.
+ *
+ * Other Usage
+ * You can be released from the requirements of the license by purchasing
+ * a commercial license. Buying such a license is mandatory as soon as you
+ * develop commercial activities involving the TTL library without
+ * disclosing the source code of your own applications.
+ *
+ * This file may be used in accordance with the terms contained in a
+ * written agreement between you and SINTEF ICT.
+ */
+
+#ifndef _HALF_EDGE_DART_
+#define _HALF_EDGE_DART_
+
+#include <ttl/halfedge/hetriang.h>
+
+namespace hed
+{
+/**
+ * \class Dart
+ * \brief \b %Dart class for the half-edge data structure.
+ *
+ * See \ref api for a detailed description of how the member functions
+ * should be implemented.
+ */
+class DART
+{
+ EDGE_PTR m_edge;
+
+ /// Dart direction: true if dart is counterclockwise in face
+ bool m_dir;
+
+public:
+ /// Default constructor
+ DART()
+ {
+ m_dir = true;
+ }
+
+ /// Constructor
+ DART( const EDGE_PTR& aEdge, bool aDir = true )
+ {
+ m_edge = aEdge;
+ m_dir = aDir;
+ }
+
+ /// Copy constructor
+ DART( const DART& aDart )
+ {
+ m_edge = aDart.m_edge;
+ m_dir = aDart.m_dir;
+ }
+
+ /// Destructor
+ ~DART()
+ {
+ }
+
+ /// Assignment operator
+ DART& operator=( const DART& aDart )
+ {
+ if( this == &aDart )
+ return *this;
+
+ m_edge = aDart.m_edge;
+ m_dir = aDart.m_dir;
+
+ return *this;
+ }
+
+ /// Comparing dart objects
+ bool operator==( const DART& aDart ) const
+ {
+ return ( aDart.m_edge == m_edge && aDart.m_dir == m_dir );
+ }
+
+ /// Comparing dart objects
+ bool operator!=( const DART& aDart ) const
+ {
+ return !( aDart == *this );
+ }
+
+ /// Maps the dart to a different node
+ DART& Alpha0()
+ {
+ m_dir = !m_dir;
+ return *this;
+ }
+
+ /// Maps the dart to a different edge
+ DART& Alpha1()
+ {
+ if( m_dir )
+ {
+ m_edge = m_edge->GetNextEdgeInFace()->GetNextEdgeInFace();
+ m_dir = false;
+ }
+ else
+ {
+ m_edge = m_edge->GetNextEdgeInFace();
+ m_dir = true;
+ }
+
+ return *this;
+ }
+
+ /// Maps the dart to a different triangle. \b Note: the dart is not changed if it is at the boundary!
+ DART& Alpha2()
+ {
+ if( m_edge->GetTwinEdge() )
+ {
+ m_edge = m_edge->GetTwinEdge();
+ m_dir = !m_dir;
+ }
+
+ // else, the dart is at the boundary and should not be changed
+ return *this;
+ }
+
+ /** @name Utilities not required by TTL */
+ //@{
+ void Init( const EDGE_PTR& aEdge, bool aDir = true )
+ {
+ m_edge = aEdge;
+ m_dir = aDir;
+ }
+
+ double X() const
+ {
+ return GetNode()->GetX();
+ }
+
+ double Y() const
+ {
+ return GetNode()->GetY();
+ }
+
+ bool IsCCW() const
+ {
+ return m_dir;
+ }
+
+ const NODE_PTR& GetNode() const
+ {
+ return m_dir ? m_edge->GetSourceNode() : m_edge->GetTargetNode();
+ }
+
+ const NODE_PTR& GetOppositeNode() const
+ {
+ return m_dir ? m_edge->GetTargetNode() : m_edge->GetSourceNode();
+ }
+
+ EDGE_PTR& GetEdge()
+ {
+ return m_edge;
+ }
+
+ //@} // End of Utilities not required by TTL
+};
+
+} // End of hed namespace
+
+#endif
diff --git a/include/ttl/halfedge/hetraits.h b/include/ttl/halfedge/hetraits.h
new file mode 100644
index 0000000..04288a0
--- /dev/null
+++ b/include/ttl/halfedge/hetraits.h
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
+ * Applied Mathematics, Norway.
+ *
+ * Contact information: E-mail: tor.dokken@sintef.no
+ * SINTEF ICT, Department of Applied Mathematics,
+ * P.O. Box 124 Blindern,
+ * 0314 Oslo, Norway.
+ *
+ * This file is part of TTL.
+ *
+ * TTL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * TTL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with TTL. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public
+ * License, a covered work must retain the producer line in every data
+ * file that is created or manipulated using TTL.
+ *
+ * Other Usage
+ * You can be released from the requirements of the license by purchasing
+ * a commercial license. Buying such a license is mandatory as soon as you
+ * develop commercial activities involving the TTL library without
+ * disclosing the source code of your own applications.
+ *
+ * This file may be used in accordance with the terms contained in a
+ * written agreement between you and SINTEF ICT.
+ */
+
+#ifndef _HALF_EDGE_TRAITS_
+#define _HALF_EDGE_TRAITS_
+
+#include <ttl/halfedge/hetriang.h>
+#include <ttl/halfedge/hedart.h>
+
+namespace hed
+{
+/**
+ * \struct TTLtraits
+ * \brief \b Traits class (static struct) for the half-edge data structure.
+ *
+ * The member functions are those required by different function templates
+ * in the TTL. Documentation is given here to explain what actions
+ * should be carried out on the actual data structure as required by the functions
+ * in the \ref ttl namespace.
+ *
+ * The source code of \c %HeTraits.h shows how the traits class is implemented for the
+ * half-edge data structure.
+ *
+ * \see \ref api
+ */
+struct TTLtraits
+{
+ /**
+ * The floating point type used in calculations involving scalar products and cross products.
+ */
+ typedef double REAL_TYPE;
+
+ /** @name Geometric Predicates */
+ //@{
+ /**
+ * Scalar product between two 2D vectors represented as darts.\n
+ *
+ * ttl_util::scalarProduct2d can be used.
+ */
+ static REAL_TYPE ScalarProduct2D( const DART& aV1, const DART& aV2 )
+ {
+ DART v10 = aV1;
+ v10.Alpha0();
+
+ DART v20 = aV2;
+ v20.Alpha0();
+
+ return ttl_util::ScalarProduct2D( v10.X() - aV1.X(), v10.Y() - aV1.Y(),
+ v20.X() - aV2.X(), v20.Y() - aV2.Y() );
+ }
+
+ /**
+ * Scalar product between two 2D vectors.
+ * The first vector is represented by a dart \e v, and the second
+ * vector has direction from the source node of \e v to the point \e p.\n
+ *
+ * ttl_util::ScalarProduct2D can be used.
+ */
+ static REAL_TYPE ScalarProduct2D( const DART& aV, const NODE_PTR& aP )
+ {
+ DART d0 = aV;
+ d0.Alpha0();
+
+ return ttl_util::ScalarProduct2D( d0.X() - aV.X(), d0.Y() - aV.Y(),
+ aP->GetX() - aV.X(), aP->GetY() - aV.Y() );
+ }
+
+ /**
+ * Cross product between two vectors in the plane represented as darts.
+ * The z-component of the cross product is returned.\n
+ *
+ * ttl_util::CrossProduct2D can be used.
+ */
+ static REAL_TYPE CrossProduct2D( const DART& aV1, const DART& aV2 )
+ {
+ DART v10 = aV1;
+ v10.Alpha0();
+
+ DART v20 = aV2;
+ v20.Alpha0();
+
+ return ttl_util::CrossProduct2D( v10.X() - aV1.X(), v10.Y() - aV1.Y(),
+ v20.X() - aV2.X(), v20.Y() - aV2.Y() );
+ }
+
+ /**
+ * Cross product between two vectors in the plane.
+ * The first vector is represented by a dart \e v, and the second
+ * vector has direction from the source node of \e v to the point \e p.
+ * The z-component of the cross product is returned.\n
+ *
+ * ttl_util::CrossProduct2d can be used.
+ */
+ static REAL_TYPE CrossProduct2D( const DART& aV, const NODE_PTR& aP )
+ {
+ DART d0 = aV;
+ d0.Alpha0();
+
+ return ttl_util::CrossProduct2D( d0.X() - aV.X(), d0.Y() - aV.Y(),
+ aP->GetX() - aV.X(), aP->GetY() - aV.Y() );
+ }
+
+ /**
+ * Let \e n1 and \e n2 be the nodes associated with two darts, and let \e p
+ * be a point in the plane. Return a positive value if \e n1, \e n2,
+ * and \e p occur in counterclockwise order; a negative value if they occur
+ * in clockwise order; and zero if they are collinear.
+ */
+ static REAL_TYPE Orient2D( const DART& aN1, const DART& aN2, const NODE_PTR& aP )
+ {
+ REAL_TYPE pa[2];
+ REAL_TYPE pb[2];
+ REAL_TYPE pc[2];
+
+ pa[0] = aN1.X();
+ pa[1] = aN1.Y();
+ pb[0] = aN2.X();
+ pb[1] = aN2.Y();
+ pc[0] = aP->GetX();
+ pc[1] = aP->GetY();
+
+ return ttl_util::Orient2DFast( pa, pb, pc );
+ }
+
+ /**
+ * This is the same predicate as represented with the function above,
+ * but with a slighty different interface:
+ * The last parameter is given as a dart where the source node of the dart
+ * represents a point in the plane.
+ * This function is required for constrained triangulation.
+ */
+ static REAL_TYPE Orient2D( const DART& aN1, const DART& aN2, const DART& aP )
+ {
+ REAL_TYPE pa[2];
+ REAL_TYPE pb[2];
+ REAL_TYPE pc[2];
+
+ pa[0] = aN1.X();
+ pa[1] = aN1.Y();
+ pb[0] = aN2.X();
+ pb[1] = aN2.Y();
+ pc[0] = aP.X();
+ pc[1] = aP.Y();
+
+ return ttl_util::Orient2DFast( pa, pb, pc );
+ }
+
+ //@} // End of Geometric Predicates Group
+};
+
+}; // End of hed namespace
+
+#endif
diff --git a/include/ttl/halfedge/hetriang.h b/include/ttl/halfedge/hetriang.h
new file mode 100644
index 0000000..1642e92
--- /dev/null
+++ b/include/ttl/halfedge/hetriang.h
@@ -0,0 +1,514 @@
+/*
+ * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
+ * Applied Mathematics, Norway.
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * Contact information: E-mail: tor.dokken@sintef.no
+ * SINTEF ICT, Department of Applied Mathematics,
+ * P.O. Box 124 Blindern,
+ * 0314 Oslo, Norway.
+ *
+ * This file is part of TTL.
+ *
+ * TTL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * TTL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with TTL. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public
+ * License, a covered work must retain the producer line in every data
+ * file that is created or manipulated using TTL.
+ *
+ * Other Usage
+ * You can be released from the requirements of the license by purchasing
+ * a commercial license. Buying such a license is mandatory as soon as you
+ * develop commercial activities involving the TTL library without
+ * disclosing the source code of your own applications.
+ *
+ * This file may be used in accordance with the terms contained in a
+ * written agreement between you and SINTEF ICT.
+ */
+
+#ifndef _HE_TRIANG_H_
+#define _HE_TRIANG_H_
+
+//#define TTL_USE_NODE_ID // Each node gets it's own unique id
+#define TTL_USE_NODE_FLAG // Each node gets a flag (can be set to true or false)
+
+#include <list>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <ttl/ttl_util.h>
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <layers_id_colors_and_visibility.h>
+
+class BOARD_CONNECTED_ITEM;
+
+namespace ttl
+{
+ class TRIANGULATION_HELPER;
+};
+
+/**
+ * The half-edge data structure
+ */
+namespace hed
+{
+// Helper typedefs
+class NODE;
+class EDGE;
+typedef boost::shared_ptr<NODE> NODE_PTR;
+typedef boost::shared_ptr<EDGE> EDGE_PTR;
+typedef boost::weak_ptr<EDGE> EDGE_WEAK_PTR;
+typedef std::vector<NODE_PTR> NODES_CONTAINER;
+
+/**
+ * \class NODE
+ * \brief \b Node class for data structures (Inherits from HandleId)
+ *
+ * \note
+ * - To enable node IDs, TTL_USE_NODE_ID must be defined.
+ * - To enable node flags, TTL_USE_NODE_FLAG must be defined.
+ * - TTL_USE_NODE_ID and TTL_USE_NODE_FLAG should only be enabled if this functionality is
+ * required by the application, because they increase the memory usage for each Node object.
+ */
+class NODE
+{
+protected:
+#ifdef TTL_USE_NODE_FLAG
+ /// TTL_USE_NODE_FLAG must be defined
+ bool m_flag;
+#endif
+
+#ifdef TTL_USE_NODE_ID
+ /// TTL_USE_NODE_ID must be defined
+ static int id_count;
+
+ /// A unique id for each node (TTL_USE_NODE_ID must be defined)
+ int m_id;
+#endif
+
+ /// Node coordinates
+ int m_x, m_y;
+
+ /// Tag for quick connection resolution
+ int m_tag;
+
+ /// List of board items that share this node
+ std::list<const BOARD_CONNECTED_ITEM*> m_parents;
+
+ /// Layers that are occupied by this node
+ LSET m_layers;
+
+ /// Recomputes the layers used by this node
+ void updateLayers();
+
+public:
+ /// Constructor
+ NODE( int aX = 0, int aY = 0 ) :
+#ifdef TTL_USE_NODE_FLAG
+ m_flag( false ),
+#endif
+#ifdef TTL_USE_NODE_ID
+ m_id( id_count++ ),
+#endif
+ m_x( aX ), m_y( aY ), m_tag( -1 )
+ {
+ m_layers.reset();
+ }
+
+ /// Destructor
+ ~NODE() {}
+
+ /// Returns the x-coordinate
+ inline int GetX() const
+ {
+ return m_x;
+ }
+
+ /// Returns the y-coordinate
+ inline int GetY() const
+ {
+ return m_y;
+ }
+
+ /// Returns tag, common identifier for connected nodes
+ inline int GetTag() const
+ {
+ return m_tag;
+ }
+
+ /// Sets tag, common identifier for connected nodes
+ inline void SetTag( int aTag )
+ {
+ m_tag = aTag;
+ }
+
+#ifdef TTL_USE_NODE_ID
+ /// Returns the id (TTL_USE_NODE_ID must be defined)
+ inline int Id() const
+ {
+ return m_id;
+ }
+#endif
+
+#ifdef TTL_USE_NODE_FLAG
+ /// Sets the flag (TTL_USE_NODE_FLAG must be defined)
+ inline void SetFlag( bool aFlag )
+ {
+ m_flag = aFlag;
+ }
+
+ /// Returns the flag (TTL_USE_NODE_FLAG must be defined)
+ inline const bool& GetFlag() const
+ {
+ return m_flag;
+ }
+#endif
+
+ inline unsigned int GetRefCount() const
+ {
+ return m_parents.size();
+ }
+
+ inline void AddParent( const BOARD_CONNECTED_ITEM* aParent )
+ {
+ m_parents.push_back( aParent );
+ m_layers.reset(); // mark as needs updating
+ }
+
+ inline void RemoveParent( const BOARD_CONNECTED_ITEM* aParent )
+ {
+ m_parents.remove( aParent );
+ m_layers.reset(); // mark as needs updating
+ }
+
+ const LSET& GetLayers()
+ {
+ if( m_layers.none() )
+ updateLayers();
+
+ return m_layers;
+ }
+
+ // Tag used for unconnected items.
+ static const int TAG_UNCONNECTED = -1;
+};
+
+
+/**
+ * \class EDGE
+ * \brief \b %Edge class in the in the half-edge data structure.
+ */
+class EDGE
+{
+public:
+ /// Constructor
+ EDGE() : m_weight( 0 ), m_isLeadingEdge( false )
+ {
+ }
+
+ /// Destructor
+ virtual ~EDGE()
+ {
+ }
+
+ /// Returns tag, common identifier for connected nodes
+ inline int GetTag() const
+ {
+ int tag = GetSourceNode()->GetTag();
+ if( tag >= 0 )
+ return tag;
+
+ return GetTargetNode()->GetTag();
+ }
+
+ /// Sets the source node
+ inline void SetSourceNode( const NODE_PTR& aNode )
+ {
+ m_sourceNode = aNode;
+ }
+
+ /// Sets the next edge in face
+ inline void SetNextEdgeInFace( const EDGE_PTR& aEdge )
+ {
+ m_nextEdgeInFace = aEdge;
+ }
+
+ /// Sets the twin edge
+ inline void SetTwinEdge( const EDGE_PTR& aEdge )
+ {
+ m_twinEdge = aEdge;
+ }
+
+ /// Sets the edge as a leading edge
+ inline void SetAsLeadingEdge( bool aLeading = true )
+ {
+ m_isLeadingEdge = aLeading;
+ }
+
+ /// Checks if an edge is a leading edge
+ inline bool IsLeadingEdge() const
+ {
+ return m_isLeadingEdge;
+ }
+
+ /// Returns the twin edge
+ inline EDGE_PTR GetTwinEdge() const
+ {
+ return m_twinEdge.lock();
+ }
+
+ inline void ClearTwinEdge()
+ {
+ m_twinEdge.reset();
+ }
+
+ /// Returns the next edge in face
+ inline const EDGE_PTR& GetNextEdgeInFace() const
+ {
+ return m_nextEdgeInFace;
+ }
+
+ /// Retuns the source node
+ inline const NODE_PTR& GetSourceNode() const
+ {
+ return m_sourceNode;
+ }
+
+ /// Returns the target node
+ virtual const NODE_PTR& GetTargetNode() const
+ {
+ return m_nextEdgeInFace->GetSourceNode();
+ }
+
+ inline void SetWeight( unsigned int weight )
+ {
+ m_weight = weight;
+ }
+
+ inline unsigned int GetWeight() const
+ {
+ return m_weight;
+ }
+
+ void Clear()
+ {
+ m_sourceNode.reset();
+ m_nextEdgeInFace.reset();
+
+ if( !m_twinEdge.expired() )
+ {
+ m_twinEdge.lock()->ClearTwinEdge();
+ m_twinEdge.reset();
+ }
+ }
+
+protected:
+ NODE_PTR m_sourceNode;
+ EDGE_WEAK_PTR m_twinEdge;
+ EDGE_PTR m_nextEdgeInFace;
+ unsigned int m_weight;
+ bool m_isLeadingEdge;
+};
+
+
+ /**
+ * \class EDGE_MST
+ * \brief \b Specialization of %EDGE class to be used for Minimum Spanning Tree algorithm.
+ */
+class EDGE_MST : public EDGE
+{
+private:
+ NODE_PTR m_target;
+
+public:
+ EDGE_MST( const NODE_PTR& aSource, const NODE_PTR& aTarget, unsigned int aWeight = 0 ) :
+ m_target( aTarget )
+ {
+ m_sourceNode = aSource;
+ m_weight = aWeight;
+ }
+
+ /// @copydoc Edge::setSourceNode()
+ virtual const NODE_PTR& GetTargetNode() const
+ {
+ return m_target;
+ }
+
+private:
+ EDGE_MST( const EDGE& aEdge )
+ {
+ assert( false );
+ }
+};
+
+class DART; // Forward declaration (class in this namespace)
+
+/**
+ * \class TRIANGULATION
+ * \brief \b %Triangulation class for the half-edge data structure with adaption to TTL.
+ */
+class TRIANGULATION
+{
+protected:
+ /// One half-edge for each arc
+ std::list<EDGE_PTR> m_leadingEdges;
+
+ ttl::TRIANGULATION_HELPER* m_helper;
+
+ void addLeadingEdge( EDGE_PTR& aEdge )
+ {
+ aEdge->SetAsLeadingEdge();
+ m_leadingEdges.push_front( aEdge );
+ }
+
+ bool removeLeadingEdgeFromList( EDGE_PTR& aLeadingEdge );
+
+ void cleanAll();
+
+ /** Swaps the edge associated with \e dart in the actual data structure.
+ *
+ * <center>
+ * \image html swapEdge.gif
+ * </center>
+ *
+ * \param aDart
+ * Some of the functions require a dart as output.
+ * If this is required by the actual function, the dart should be delivered
+ * back in a position as seen if it was glued to the edge when swapping (rotating)
+ * the edge CCW; see the figure.
+ *
+ * \note
+ * - If the edge is \e constrained, or if it should not be swapped for
+ * some other reason, this function need not do the actual swap of the edge.
+ * - Some functions in TTL require that \c swapEdge is implemented such that
+ * darts outside the quadrilateral are not affected by the swap.
+ */
+ void swapEdge( DART& aDart );
+
+ /**
+ * Splits the triangle associated with \e dart in the actual data structure into
+ * three new triangles joining at \e point.
+ *
+ * <center>
+ * \image html splitTriangle.gif
+ * </center>
+ *
+ * \param aDart
+ * Output: A CCW dart incident with the new node; see the figure.
+ */
+ void splitTriangle( DART& aDart, const NODE_PTR& aPoint );
+
+ /**
+ * The reverse operation of TTLtraits::splitTriangle.
+ * This function is only required for functions that involve
+ * removal of interior nodes; see for example TrinagulationHelper::RemoveInteriorNode.
+ *
+ * <center>
+ * \image html reverse_splitTriangle.gif
+ * </center>
+ */
+ void reverseSplitTriangle( DART& aDart );
+
+ /**
+ * Removes a triangle with an edge at the boundary of the triangulation
+ * in the actual data structure
+ */
+ void removeBoundaryTriangle( DART& aDart );
+
+public:
+ /// Default constructor
+ TRIANGULATION();
+
+ /// Copy constructor
+ TRIANGULATION( const TRIANGULATION& aTriangulation );
+
+ /// Destructor
+ ~TRIANGULATION();
+
+ /// Creates a Delaunay triangulation from a set of points
+ void CreateDelaunay( NODES_CONTAINER::iterator aFirst, NODES_CONTAINER::iterator aLast );
+
+ /// Creates an initial Delaunay triangulation from two enclosing triangles
+ // When using rectangular boundary - loop through all points and expand.
+ // (Called from createDelaunay(...) when starting)
+ EDGE_PTR InitTwoEnclosingTriangles( NODES_CONTAINER::iterator aFirst,
+ NODES_CONTAINER::iterator aLast );
+
+ // These two functions are required by TTL for Delaunay triangulation
+
+ /// Swaps the edge associated with diagonal
+ void SwapEdge( EDGE_PTR& aDiagonal );
+
+ /// Splits the triangle associated with edge into three new triangles joining at point
+ EDGE_PTR SplitTriangle( EDGE_PTR& aEdge, const NODE_PTR& aPoint );
+
+ // Functions required by TTL for removing nodes in a Delaunay triangulation
+
+ /// Removes the boundary triangle associated with edge
+ void RemoveTriangle( EDGE_PTR& aEdge ); // boundary triangle required
+
+ /// The reverse operation of removeTriangle
+ void ReverseSplitTriangle( EDGE_PTR& aEdge );
+
+ /// Creates an arbitrary CCW dart
+ DART CreateDart();
+
+ /// Returns a list of "triangles" (one leading half-edge for each triangle)
+ const std::list<EDGE_PTR>& GetLeadingEdges() const
+ {
+ return m_leadingEdges;
+ }
+
+ /// Returns the number of triangles
+ int NoTriangles() const
+ {
+ return (int) m_leadingEdges.size();
+ }
+
+ /// Returns a list of half-edges (one half-edge for each arc)
+ std::list<EDGE_PTR>* GetEdges( bool aSkipBoundaryEdges = false ) const;
+
+#ifdef TTL_USE_NODE_FLAG
+ /// Sets flag in all the nodes
+ void FlagNodes( bool aFlag ) const;
+
+ /// Returns a list of nodes. This function requires TTL_USE_NODE_FLAG to be defined. \see Node.
+ std::list<NODE_PTR>* GetNodes() const;
+#endif
+
+ /// Swaps edges until the triangulation is Delaunay (constrained edges are not swapped)
+ void OptimizeDelaunay();
+
+ /// Checks if the triangulation is Delaunay
+ bool CheckDelaunay() const;
+
+ /// Returns an arbitrary interior node (as the source node of the returned edge)
+ EDGE_PTR GetInteriorNode() const;
+
+ EDGE_PTR GetBoundaryEdgeInTriangle( const EDGE_PTR& aEdge ) const;
+
+ /// Returns an arbitrary boundary edge
+ EDGE_PTR GetBoundaryEdge() const;
+
+ /// Print edges for plotting with, e.g., gnuplot
+ void PrintEdges( std::ofstream& aOutput ) const;
+
+ friend class ttl::TRIANGULATION_HELPER;
+};
+}; // End of hed namespace
+
+#endif
diff --git a/include/ttl/ttl.h b/include/ttl/ttl.h
new file mode 100644
index 0000000..bbcf86a
--- /dev/null
+++ b/include/ttl/ttl.h
@@ -0,0 +1,1901 @@
+/*
+ * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
+ * Applied Mathematics, Norway.
+ *
+ * Contact information: E-mail: tor.dokken@sintef.no
+ * SINTEF ICT, Department of Applied Mathematics,
+ * P.O. Box 124 Blindern,
+ * 0314 Oslo, Norway.
+ *
+ * This file is part of TTL.
+ *
+ * TTL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * TTL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with TTL. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public
+ * License, a covered work must retain the producer line in every data
+ * file that is created or manipulated using TTL.
+ *
+ * Other Usage
+ * You can be released from the requirements of the license by purchasing
+ * a commercial license. Buying such a license is mandatory as soon as you
+ * develop commercial activities involving the TTL library without
+ * disclosing the source code of your own applications.
+ *
+ * This file may be used in accordance with the terms contained in a
+ * written agreement between you and SINTEF ICT.
+ */
+
+#ifndef _TTL_H_
+#define _TTL_H_
+
+#include <list>
+#include <iterator>
+
+// Debugging
+#ifdef DEBUG_TTL
+static void errorAndExit( char* aMessage )
+{
+ cout << "\n!!! ERROR: " << aMessage << " !!!\n" << endl;
+ exit(-1);
+}
+#endif
+
+// Next on TOPOLOGY:
+// - get triangle strips
+// - weighted graph, algorithms using a weight (real) for each edge,
+// e.g. an "abstract length". Use for minimum spanning tree
+// or some arithmetics on weights?
+// - Circulators as defined in CGAL with more STL compliant code
+
+// - analyze in detail locateFace: e.g. detect 0-orbit in case of infinite loop
+// around a node etc.
+
+/**
+ * \brief Main interface to TTL
+*
+* This namespace contains the basic generic algorithms for the TTL,
+* the Triangulation Template Library.\n
+*
+* Examples of functionality are:
+* - Incremental Delaunay triangulation
+* - Constrained triangulation
+* - Insert/remove nodes and constrained edges
+* - Traversal operations
+* - Misc. queries for extracting information for visualisation systems etc.
+*
+* \par General requirements and assumptions:
+* - \e DART_TYPE and \e TRAITS_TYPE should be implemented in accordance with the description
+* in \ref api.
+* - A \b "Requires:" section in the documentation of a function template
+* shows which functionality is required in \e TRAITS_TYPE to
+* support that specific function.\n
+* Functionalty required in \e DART_TYPE is the same (almost) for all
+* function templates; see \ref api and the example referred to.
+* - When a reference to a \e dart object is passed to a function in TTL,
+* it is assumed that it is oriented \e counterclockwise (CCW) in a triangle
+* unless it is explicitly mentioned that it can also be \e clockwise (CW).
+* The same applies for a dart that is passed from a function in TTL to
+* the users TRAITS_TYPE class (or struct).
+* - When an edge (represented with a dart) is swapped, it is assumed that darts
+* outside the quadrilateral where the edge is a diagonal are not affected by
+* the swap. Thus, \ref hed::TTLtraits::swapEdge "TRAITS_TYPE::swapEdge"
+* must be implemented in accordance with this rule.
+*
+* \par Glossary:
+* - General terms are explained in \ref api.
+* - \e CCW - counterclockwise
+* - \e CW - clockwise
+* - \e 0_orbit, \e 1_orbit and \e 2_orbit: A sequence of darts around
+* a node, around an edge and in a triangle respectively;
+* see get_0_orbit_interior and get_0_orbit_boundary
+* - \e arc - In a triangulation an arc is equivalent with an edge
+*
+* \see
+* \ref ttl_util and \ref api
+*
+* \author
+* �yvind Hjelle, oyvindhj@ifi.uio.no
+*/
+
+
+namespace ttl
+{
+class TRIANGULATION_HELPER
+{
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+public:
+ TRIANGULATION_HELPER( hed::TRIANGULATION& aTriang ) :
+ m_triangulation( aTriang )
+ {
+ }
+
+ // Delaunay Triangulation
+ template <class TRAITS_TYPE, class DART_TYPE, class POINT_TYPE>
+ bool InsertNode( DART_TYPE& aDart, POINT_TYPE& aPoint );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ void RemoveRectangularBoundary( DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ void RemoveNode( DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ void RemoveBoundaryNode( DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ void RemoveInteriorNode( DART_TYPE& aDart );
+
+ // Topological and Geometric Queries
+ // ---------------------------------
+ template <class TRAITS_TYPE, class POINT_TYPE, class DART_TYPE>
+ static bool LocateFaceSimplest( const POINT_TYPE& aPoint, DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class POINT_TYPE, class DART_TYPE>
+ static bool LocateTriangle( const POINT_TYPE& aPoint, DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class POINT_TYPE, class DART_TYPE>
+ static bool InTriangle( const POINT_TYPE& aPoint, const DART_TYPE& aDart );
+
+ template <class DART_TYPE, class DART_LIST_TYPE>
+ static void GetBoundary( const DART_TYPE& aDart, DART_LIST_TYPE& aBoundary );
+
+ template <class DART_TYPE>
+ static bool IsBoundaryEdge( const DART_TYPE& aDart );
+
+ template <class DART_TYPE>
+ static bool IsBoundaryFace( const DART_TYPE& aDart );
+
+ template <class DART_TYPE>
+ static bool IsBoundaryNode( const DART_TYPE& aDart );
+
+ template <class DART_TYPE>
+ static int GetDegreeOfNode( const DART_TYPE& aDart );
+
+ template <class DART_TYPE, class DART_LIST_TYPE>
+ static void Get0OrbitInterior( const DART_TYPE& aDart, DART_LIST_TYPE& aOrbit );
+
+ template <class DART_TYPE, class DART_LIST_TYPE>
+ static void Get0OrbitBoundary( const DART_TYPE& aDart, DART_LIST_TYPE& aOrbit );
+
+ template <class DART_TYPE>
+ static bool Same0Orbit( const DART_TYPE& aD1, const DART_TYPE& aD2 );
+
+ template <class DART_TYPE>
+ static bool Same1Orbit( const DART_TYPE& aD1, const DART_TYPE& aD2 );
+
+ template <class DART_TYPE>
+ static bool Same2Orbit( const DART_TYPE& aD1, const DART_TYPE& aD2 );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ static bool SwappableEdge( const DART_TYPE& aDart, bool aAllowDegeneracy = false );
+
+ template <class DART_TYPE>
+ static void PositionAtNextBoundaryEdge( DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ static bool ConvexBoundary( const DART_TYPE& aDart );
+
+ // Utilities for Delaunay Triangulation
+ // ------------------------------------
+ template <class TRAITS_TYPE, class DART_TYPE, class DART_LIST_TYPE>
+ void OptimizeDelaunay( DART_LIST_TYPE& aElist );
+
+ template <class TRAITS_TYPE, class DART_TYPE, class DART_LIST_TYPE>
+ void OptimizeDelaunay( DART_LIST_TYPE& aElist, const typename DART_LIST_TYPE::iterator aEnd );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ bool SwapTestDelaunay( const DART_TYPE& aDart, bool aCyclingCheck = false ) const;
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ void RecSwapDelaunay( DART_TYPE& aDiagonal );
+
+ template <class TRAITS_TYPE, class DART_TYPE, class LIST_TYPE>
+ void SwapEdgesAwayFromInteriorNode( DART_TYPE& aDart, LIST_TYPE& aSwappedEdges );
+
+ template <class TRAITS_TYPE, class DART_TYPE, class LIST_TYPE>
+ void SwapEdgesAwayFromBoundaryNode( DART_TYPE& aDart, LIST_TYPE& aSwappedEdges );
+
+ template <class TRAITS_TYPE, class DART_TYPE, class DART_LIST_TYPE>
+ void SwapEdgeInList( const typename DART_LIST_TYPE::iterator& aIt, DART_LIST_TYPE& aElist );
+
+ // Constrained Triangulation
+ // -------------------------
+ template <class TRAITS_TYPE, class DART_TYPE>
+ static DART_TYPE InsertConstraint( DART_TYPE& aDStart, DART_TYPE& aDEnd, bool aOptimizeDelaunay );
+
+private:
+ hed::TRIANGULATION& m_triangulation;
+
+ template <class TRAITS_TYPE, class FORWARD_ITERATOR, class DART_TYPE>
+ void insertNodes( FORWARD_ITERATOR aFirst, FORWARD_ITERATOR aLast, DART_TYPE& aDart );
+
+ template <class TOPOLOGY_ELEMENT_TYPE, class DART_TYPE>
+ static bool isMemberOfFace( const TOPOLOGY_ELEMENT_TYPE& aTopologyElement, const DART_TYPE& aDart );
+
+ template <class TRAITS_TYPE, class NODE_TYPE, class DART_TYPE>
+ static bool locateFaceWithNode( const NODE_TYPE& aNode, DART_TYPE& aDartIter );
+
+ template <class DART_TYPE>
+ static void getAdjacentTriangles( const DART_TYPE& aDart, DART_TYPE& aT1, DART_TYPE& aT2,
+ DART_TYPE& aT3 );
+
+ template <class DART_TYPE>
+ static void getNeighborNodes( const DART_TYPE& aDart, std::list<DART_TYPE>& aNodeList,
+ bool& aBoundary );
+
+ template <class TRAITS_TYPE, class DART_TYPE>
+ static bool degenerateTriangle( const DART_TYPE& aDart );
+};
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+
+ /** @name Delaunay Triangulation */
+//@{
+/**
+ * Inserts a new node in an existing Delaunay triangulation and
+ * swaps edges to obtain a new Delaunay triangulation.
+ * This is the basic function for incremental Delaunay triangulation.
+ * When starting from a set of points, an initial Delaunay triangulation
+ * can be created as two triangles forming a rectangle that contains
+ * all the points.
+ * After \c insertNode has been called repeatedly with all the points,
+ * removeRectangularBoundary can be called to remove triangles
+ * at the boundary of the triangulation so that the boundary
+ * form the convex hull of the points.
+ *
+ * Note that this incremetal scheme will run much faster if the points
+ * have been sorted lexicographically on \e x and \e y.
+ *
+ * \param aDart
+ * An arbitrary CCW dart in the tringulation.\n
+ * Output: A CCW dart incident to the new node.
+ *
+ * \param aPoint
+ * A point (node) to be inserted in the triangulation.
+ *
+ * \retval bool
+ * \c true if \e point was inserted; \c false if not.\n
+ * If \e point is outside the triangulation, or the input dart is not valid,
+ * \c false is returned.
+ *
+ * \require
+ * - \ref hed::TTLtraits::splitTriangle "TRAITS_TYPE::splitTriangle" (DART_TYPE&, const POINT_TYPE&)
+ *
+ * \using
+ * - locateTriangle
+ * - RecSwapDelaunay
+ *
+ * \note
+ * - For efficiency reasons \e dart should be close to the insertion \e point.
+ *
+ * \see
+ * removeRectangularBoundary
+ */
+template <class TRAITS_TYPE, class DART_TYPE, class POINT_TYPE>
+bool TRIANGULATION_HELPER::InsertNode( DART_TYPE& aDart, POINT_TYPE& aPoint )
+{
+ bool found = LocateTriangle<TRAITS_TYPE>( aPoint, aDart );
+
+ if( !found )
+ {
+#ifdef DEBUG_TTL
+ cout << "ERROR: Triangulation::insertNode: NO triangle found. /n";
+#endif
+ return false;
+ }
+
+ // ??? can we hide the dart? this is not possible if one triangle only
+ m_triangulation.splitTriangle( aDart, aPoint );
+
+ DART_TYPE d1 = aDart;
+ d1.Alpha2().Alpha1().Alpha2().Alpha0().Alpha1();
+
+ DART_TYPE d2 = aDart;
+ d2.Alpha1().Alpha0().Alpha1();
+
+ // Preserve a dart as output incident to the node and CCW
+ DART_TYPE d3 = aDart;
+ d3.Alpha2();
+ aDart = d3; // and see below
+ //DART_TYPE dsav = d3;
+ d3.Alpha0().Alpha1();
+
+ //if (!TRAITS_TYPE::fixedEdge(d1) && !IsBoundaryEdge(d1)) {
+ if( !IsBoundaryEdge( d1 ) )
+ {
+ d1.Alpha2();
+ RecSwapDelaunay<TRAITS_TYPE>( d1 );
+ }
+
+ //if (!TRAITS_TYPE::fixedEdge(d2) && !IsBoundaryEdge(d2)) {
+ if( !IsBoundaryEdge( d2 ) )
+ {
+ d2.Alpha2();
+ RecSwapDelaunay<TRAITS_TYPE>( d2 );
+ }
+
+ // Preserve the incoming dart as output incident to the node and CCW
+ //d = dsav.Alpha2();
+ aDart.Alpha2();
+ //if (!TRAITS_TYPE::fixedEdge(d3) && !IsBoundaryEdge(d3)) {
+ if( !IsBoundaryEdge( d3 ) )
+ {
+ d3.Alpha2();
+ RecSwapDelaunay<TRAITS_TYPE>( d3 );
+ }
+
+ return true;
+}
+
+//------------------------------------------------------------------------------------------------
+// Private/Hidden function (might change later)
+template <class TRAITS_TYPE, class FORWARD_ITERATOR, class DART_TYPE>
+void TRIANGULATION_HELPER::insertNodes( FORWARD_ITERATOR aFirst, FORWARD_ITERATOR aLast,
+ DART_TYPE& aDart )
+{
+
+ // Assumes that the dereferenced point objects are pointers.
+ // References to the point objects are then passed to TTL.
+
+ FORWARD_ITERATOR it;
+ for( it = aFirst; it != aLast; ++it )
+ {
+ InsertNode<TRAITS_TYPE>( aDart, **it );
+ }
+}
+
+
+/** Removes the rectangular boundary of a triangulation as a final step of an
+ * incremental Delaunay triangulation.
+ * The four nodes at the corners will be removed and the resulting triangulation
+ * will have a convex boundary and be Delaunay.
+ *
+ * \param dart
+ * A CCW dart at the boundary of the triangulation\n
+ * Output: A CCW dart at the new boundary
+ *
+ * \using
+ * - RemoveBoundaryNode
+ *
+ * \note
+ * - This function requires that the boundary of the m_triangulation is
+ * a rectangle with four nodes (one in each corner).
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+void TRIANGULATION_HELPER::RemoveRectangularBoundary( DART_TYPE& aDart )
+{
+ DART_TYPE d_next = aDart;
+ DART_TYPE d_iter;
+
+ for( int i = 0; i < 4; i++ )
+ {
+ d_iter = d_next;
+ d_next.Alpha0();
+ PositionAtNextBoundaryEdge( d_next );
+ RemoveBoundaryNode<TRAITS_TYPE>( d_iter );
+ }
+
+ aDart = d_next; // Return a dart at the new boundary
+}
+
+/** Removes the node associated with \e dart and
+ * updates the triangulation to be Delaunay.
+ *
+ * \using
+ * - RemoveBoundaryNode if \e dart represents a node at the boundary
+ * - RemoveInteriorNode if \e dart represents an interior node
+ *
+ * \note
+ * - The node cannot belong to a fixed (constrained) edge that is not
+ * swappable. (An endless loop is likely to occur in this case).
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+void TRIANGULATION_HELPER::RemoveNode( DART_TYPE& aDart )
+{
+
+ if( isBoundaryNode( aDart ) )
+ RemoveBoundaryNode<TRAITS_TYPE>( aDart );
+ else
+ RemoveInteriorNode<TRAITS_TYPE>( aDart );
+}
+
+/** Removes the boundary node associated with \e dart and
+ * updates the triangulation to be Delaunay.
+ *
+ * \using
+ * - SwapEdgesAwayFromBoundaryNode
+ * - OptimizeDelaunay
+ *
+ * \require
+ * - \ref hed::TTLtraits::removeBoundaryTriangle "TRAITS_TYPE::removeBoundaryTriangle" (Dart&)
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+void TRIANGULATION_HELPER::RemoveBoundaryNode( DART_TYPE& aDart )
+{
+
+ // ... and update Delaunay
+ // - CCW dart must be given (for remove)
+ // - No dart is delivered back now (but this is possible if
+ // we assume that there is not only one triangle left in the m_triangulation.
+
+ // Position at boundary edge and CCW
+ if( !IsBoundaryEdge( aDart ) )
+ {
+ aDart.Alpha1(); // ensures that next function delivers back a CCW dart (if the given dart is CCW)
+ PositionAtNextBoundaryEdge( aDart );
+ }
+
+ std::list<DART_TYPE> swapped_edges;
+ SwapEdgesAwayFromBoundaryNode<TRAITS_TYPE>( aDart, swapped_edges );
+
+ // Remove boundary triangles and remove the new boundary from the list
+ // of swapped edges, see below.
+ DART_TYPE d_iter = aDart;
+ DART_TYPE dnext = aDart;
+ bool bend = false;
+ while( bend == false )
+ {
+ dnext.Alpha1().Alpha2();
+ if( IsBoundaryEdge( dnext ) )
+ bend = true; // Stop when boundary
+
+ // Generic: Also remove the new boundary from the list of swapped edges
+ DART_TYPE n_bedge = d_iter;
+ n_bedge.Alpha1().Alpha0().Alpha1().Alpha2(); // new boundary edge
+
+ // ??? can we avoid find if we do this in swap away?
+ typename std::list<DART_TYPE>::iterator it;
+ it = find( swapped_edges.begin(), swapped_edges.end(), n_bedge );
+
+ if( it != swapped_edges.end() )
+ swapped_edges.erase( it );
+
+ // Remove the boundary triangle
+ m_triangulation.removeBoundaryTriangle( d_iter );
+ d_iter = dnext;
+ }
+
+ // Optimize Delaunay
+ typedef std::list<DART_TYPE> DART_LIST_TYPE;
+ OptimizeDelaunay<TRAITS_TYPE, DART_TYPE, DART_LIST_TYPE>( swapped_edges );
+}
+
+
+/** Removes the interior node associated with \e dart and
+ * updates the triangulation to be Delaunay.
+ *
+ * \using
+ * - SwapEdgesAwayFromInteriorNode
+ * - OptimizeDelaunay
+ *
+ * \require
+ * - \ref hed::TTLtraits::reverse_splitTriangle "TRAITS_TYPE::reverse_splitTriangle" (Dart&)
+ *
+ * \note
+ * - The node cannot belong to a fixed (constrained) edge that is not
+ * swappable. (An endless loop is likely to occur in this case).
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+void TRIANGULATION_HELPER::RemoveInteriorNode( DART_TYPE& aDart )
+{
+ // ... and update to Delaunay.
+ // Must allow degeneracy temporarily, see comments in swap edges away
+ // Assumes:
+ // - revese_splitTriangle does not affect darts
+ // outside the resulting triangle.
+
+ // 1) Swaps edges away from the node until degree=3 (generic)
+ // 2) Removes the remaining 3 triangles and creates a new to fill the hole
+ // unsplitTriangle which is required
+ // 3) Runs LOP on the platelet to obtain a Delaunay m_triangulation
+ // (No dart is delivered as output)
+
+ // Assumes dart is counterclockwise
+
+ std::list<DART_TYPE> swapped_edges;
+ SwapEdgesAwayFromInteriorNode<TRAITS_TYPE>( aDart, swapped_edges );
+
+ // The reverse operation of split triangle:
+ // Make one triangle of the three triangles at the node associated with dart
+ // TRAITS_TYPE::
+ m_triangulation.reverseSplitTriangle( aDart );
+
+ // ???? Not generic yet if we are very strict:
+ // When calling unsplit triangle, darts at the three opposite sides may
+ // change!
+ // Should we hide them longer away??? This is possible since they cannot
+ // be boundary edges.
+ // ----> Or should we just require that they are not changed???
+
+ // Make the swapped-away edges Delaunay.
+ // Note the theoretical result: if there are no edges in the list,
+ // the triangulation is Delaunay already
+
+ OptimizeDelaunay<TRAITS_TYPE, DART_TYPE>( swapped_edges );
+}
+
+//@} // End of Delaunay Triangulation Group
+
+/** @name Topological and Geometric Queries */
+//@{
+//------------------------------------------------------------------------------------------------
+// Private/Hidden function (might change later)
+template <class TOPOLOGY_ELEMENT_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::isMemberOfFace( const TOPOLOGY_ELEMENT_TYPE& aTopologyElement,
+ const DART_TYPE& aDart )
+{
+ // Check if the given topology element (node, edge or face) is a member of the face
+ // Assumes:
+ // - DART_TYPE::isMember(TOPOLOGY_ELEMENT_TYPE)
+
+ DART_TYPE dart_iter = aDart;
+
+ do
+ {
+ if( dart_iter.isMember( aTopologyElement ) )
+ return true;
+ dart_iter.Alpha0().Alpha1();
+ }
+ while( dart_iter != aDart );
+
+ return false;
+}
+
+//------------------------------------------------------------------------------------------------
+// Private/Hidden function (might change later)
+template <class TRAITS_TYPE, class NODE_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::locateFaceWithNode( const NODE_TYPE& aNode, DART_TYPE& aDartIter )
+{
+ // Locate a face in the topology structure with the given node as a member
+ // Assumes:
+ // - TRAITS_TYPE::Orient2D(DART_TYPE, DART_TYPE, NODE_TYPE)
+ // - DART_TYPE::isMember(NODE_TYPE)
+ // - Note that if false is returned, the node might still be in the
+ // topology structure. Application programmer
+ // should check all if by hypothesis the node is in the topology structure;
+ // see doc. on LocateTriangle.
+
+ bool status = LocateFaceSimplest<TRAITS_TYPE>( aNode, aDartIter );
+
+ if( status == false )
+ return status;
+
+ // True was returned from LocateFaceSimplest, but if the located triangle is
+ // degenerate and the node is on the extension of the edges,
+ // the node might still be inside. Check if node is a member and return false
+ // if not. (Still the node might be in the topology structure, see doc. above
+ // and in locateTriangle(const POINT_TYPE& point, DART_TYPE& dart_iter)
+
+ return isMemberOfFace( aNode, aDartIter );
+}
+
+/** Locates the face containing a given point.
+ * It is assumed that the tessellation (e.g. a triangulation) is \e regular in the sense that
+ * there are no holes, the boundary is convex and there are no degenerate faces.
+ *
+ * \param aPoint
+ * A point to be located
+ *
+ * \param aDart
+ * An arbitrary CCW dart in the triangulation\n
+ * Output: A CCW dart in the located face
+ *
+ * \retval bool
+ * \c true if a face is found; \c false if not.
+ *
+ * \require
+ * - \ref hed::TTLtraits::Orient2D "TRAITS_TYPE::Orient2D" (DART_TYPE&, DART_TYPE&, POINT_TYPE&)
+ *
+ * \note
+ * - If \c false is returned, \e point may still be inside a face if the tessellation is not
+ * \e regular as explained above.
+ *
+ * \see
+ * LocateTriangle
+ */
+template <class TRAITS_TYPE, class POINT_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::LocateFaceSimplest( const POINT_TYPE& aPoint, DART_TYPE& aDart )
+{
+ // Not degenerate triangles if point is on the extension of the edges
+ // But inTriangle may be called in case of true (may update to inFace2)
+ // Convex boundary
+ // no holes
+ // convex faces (works for general convex faces)
+ // Not specialized for triangles, but ok?
+ //
+ // TRAITS_TYPE::orint2d(POINT_TYPE) is the half open half-plane defined
+ // by the dart:
+ // n1 = dart.node()
+ // n2 = dart.Alpha0().node
+ // Only the following gives true:
+ // ((n2->x()-n1->x())*(point.y()-n1->y()) >= (point.x()-n1->x())*(n2->y()-n1->y()))
+
+ DART_TYPE dart_start;
+ dart_start = aDart;
+ DART_TYPE dart_prev;
+
+ DART_TYPE d0;
+ for( ;; )
+ {
+ d0 = aDart;
+ d0.Alpha0();
+
+ if( TRAITS_TYPE::Orient2D( aDart, d0, aPoint ) >= 0 )
+ {
+ aDart.Alpha0().Alpha1();
+ if( aDart == dart_start )
+ return true; // left to all edges in face
+ }
+ else
+ {
+ dart_prev = aDart;
+ aDart.Alpha2();
+
+ if( aDart == dart_prev )
+ return false; // iteration to outside boundary
+
+ dart_start = aDart;
+ dart_start.Alpha0();
+
+ aDart.Alpha1(); // avoid twice on same edge and ccw in next
+ }
+ }
+}
+
+
+/** Locates the triangle containing a given point.
+ * It is assumed that the triangulation is \e regular in the sense that there
+ * are no holes and the boundary is convex.
+ * This function deals with degeneracy to some extent, but round-off errors may still
+ * lead to a wrong result if triangles are degenerate.
+ *
+ * \param point
+ * A point to be located
+ *
+ * \param dart
+ * An arbitrary CCW dart in the triangulation\n
+ * Output: A CCW dart in the located triangle
+ *
+ * \retval bool
+ * \c true if a triangle is found; \c false if not.\n
+ * If \e point is outside the m_triangulation, in which case \c false is returned,
+ * then the edge associated with \e dart will be at the boundary of the m_triangulation.
+ *
+ * \using
+ * - LocateFaceSimplest
+ * - InTriangle
+ */
+template <class TRAITS_TYPE, class POINT_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::LocateTriangle( const POINT_TYPE& aPoint, DART_TYPE& aDart )
+{
+ // The purpose is to have a fast and stable procedure that
+ // i) avoids concluding that a point is inside a triangle if it is not inside
+ // ii) avoids infinite loops
+
+ // Thus, if false is returned, the point might still be inside a triangle in
+ // the triangulation. But this will probably only occur in the following cases:
+ // i) There are holes in the triangulation which causes the procedure to stop.
+ // ii) The boundary of the m_triangulation is not convex.
+ // ii) There might be degenerate triangles interior to the triangulation, or on the
+ // the boundary, which in some cases might cause the procedure to stop there due
+ // to the logic of the algorithm.
+
+ // It is the application programmer's responsibility to check further if false is
+ // returned. For example, if by hypothesis the point is inside a triangle
+ // in the triangulation and and false is returned, then all triangles in the
+ // triangulation should be checked by the application. This can be done using
+ // the function:
+ // bool inTriangle(const POINT_TYPE& point, const DART_TYPE& dart).
+
+ // Assumes:
+ // - CrossProduct2D, ScalarProduct2D etc., see functions called
+
+ bool status = LocateFaceSimplest<TRAITS_TYPE>( aPoint, aDart );
+
+ if( status == false )
+ return status;
+
+ // There may be degeneracy, i.e., the point might be outside the triangle
+ // on the extension of the edges of a degenerate triangle.
+
+ // The next call returns true if inside a non-degenerate or a degenerate triangle,
+ // but false if the point coincides with the "supernode" in the case where all
+ // edges are degenerate.
+ return InTriangle<TRAITS_TYPE>( aPoint, aDart );
+}
+
+/** Checks if \e point is inside the triangle associated with \e dart.
+ * This function deals with degeneracy to some extent, but round-off errors may still
+ * lead to wrong result if the triangle is degenerate.
+ *
+ * \param aDart
+ * A CCW dart in the triangle
+ *
+ * \require
+ * - \ref hed::TTLtraits::CrossProduct2D "TRAITS_TYPE::CrossProduct2D" (DART_TYPE&, POINT_TYPE&)
+ * - \ref hed::TTLtraits::ScalarProduct2D "TRAITS_TYPE::ScalarProduct2D" (DART_TYPE&, POINT_TYPE&)
+ *
+ * \see
+ * InTriangleSimplest
+ */
+template <class TRAITS_TYPE, class POINT_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::InTriangle( const POINT_TYPE& aPoint, const DART_TYPE& aDart )
+{
+
+ // SHOULD WE INCLUDE A STRATEGY WITH EDGE X e_1 ETC? TO GUARANTEE THAT
+ // ONLY ON ONE EDGE? BUT THIS DOES NOT SOLVE PROBLEMS WITH
+ // notInE1 && notInE1.neghbour ?
+
+ // Returns true if inside (but not necessarily strictly inside)
+ // Works for degenerate triangles, but not when all edges are degenerate,
+ // and the aPoint coincides with all nodes;
+ // then false is always returned.
+
+ typedef typename TRAITS_TYPE::REAL_TYPE REAL_TYPE;
+
+ DART_TYPE dart_iter = aDart;
+
+ REAL_TYPE cr1 = TRAITS_TYPE::CrossProduct2D( dart_iter, aPoint );
+ if( cr1 < 0 )
+ return false;
+
+ dart_iter.Alpha0().Alpha1();
+ REAL_TYPE cr2 = TRAITS_TYPE::CrossProduct2D( dart_iter, aPoint );
+
+ if( cr2 < 0 )
+ return false;
+
+ dart_iter.Alpha0().Alpha1();
+ REAL_TYPE cr3 = TRAITS_TYPE::CrossProduct2D( dart_iter, aPoint );
+ if( cr3 < 0 )
+ return false;
+
+ // All cross products are >= 0
+ // Check for degeneracy
+ if( cr1 != 0 || cr2 != 0 || cr3 != 0 )
+ return true; // inside non-degenerate face
+
+ // All cross-products are zero, i.e. degenerate triangle, check if inside
+ // Strategy: d.ScalarProduct2D >= 0 && alpha0(d).d.ScalarProduct2D >= 0 for one of
+ // the edges. But if all edges are degenerate and the aPoint is on (all) the nodes,
+ // then "false is returned".
+
+ DART_TYPE dart_tmp = dart_iter;
+ REAL_TYPE sc1 = TRAITS_TYPE::ScalarProduct2D( dart_tmp, aPoint );
+ REAL_TYPE sc2 = TRAITS_TYPE::ScalarProduct2D( dart_tmp.Alpha0(), aPoint );
+
+ if( sc1 >= 0 && sc2 >= 0 )
+ {
+ // test for degenerate edge
+ if( sc1 != 0 || sc2 != 0 )
+ return true; // interior to this edge or on a node (but see comment above)
+ }
+
+ dart_tmp = dart_iter.Alpha0().Alpha1();
+ sc1 = TRAITS_TYPE::ScalarProduct2D( dart_tmp, aPoint );
+ sc2 = TRAITS_TYPE::ScalarProduct2D( dart_tmp.Alpha0(), aPoint );
+
+ if( sc1 >= 0 && sc2 >= 0 )
+ {
+ // test for degenerate edge
+ if( sc1 != 0 || sc2 != 0 )
+ return true; // interior to this edge or on a node (but see comment above)
+ }
+
+ dart_tmp = dart_iter.Alpha1();
+ sc1 = TRAITS_TYPE::ScalarProduct2D( dart_tmp, aPoint );
+ sc2 = TRAITS_TYPE::ScalarProduct2D( dart_tmp.Alpha0(), aPoint );
+
+ if( sc1 >= 0 && sc2 >= 0 )
+ {
+ // test for degenerate edge
+ if( sc1 != 0 || sc2 != 0 )
+ return true; // interior to this edge or on a node (but see comment above)
+ }
+
+ // Not on any of the edges of the degenerate triangle.
+ // The only possibility for the aPoint to be "inside" is that all edges are degenerate
+ // and the point coincide with all nodes. So false is returned in this case.
+
+ return false;
+}
+
+
+ //------------------------------------------------------------------------------------------------
+// Private/Hidden function (might change later)
+template <class DART_TYPE>
+void TRIANGULATION_HELPER::getAdjacentTriangles( const DART_TYPE& aDart, DART_TYPE& aT1,
+ DART_TYPE& aT2, DART_TYPE& aT3 )
+{
+
+ DART_TYPE dart_iter = aDart;
+
+ // add first
+ if( dart_iter.Alpha2() != aDart )
+ {
+ aT1 = dart_iter;
+ dart_iter = aDart;
+ }
+
+ // add second
+ dart_iter.Alpha0();
+ dart_iter.Alpha1();
+ DART_TYPE dart_prev = dart_iter;
+
+ if( ( dart_iter.Alpha2() ) != dart_prev )
+ {
+ aT2 = dart_iter;
+ dart_iter = dart_prev;
+ }
+
+ // add third
+ dart_iter.Alpha0();
+ dart_iter.Alpha1();
+ dart_prev = dart_iter;
+
+ if( ( dart_iter.Alpha2() ) != dart_prev )
+ aT3 = dart_iter;
+}
+
+//------------------------------------------------------------------------------------------------
+/** Gets the boundary as sequence of darts, where the edges associated with the darts are boundary
+ * edges, given a dart with an associating edge at the boundary of a topology structure.
+ * The first dart in the sequence will be the given one, and the others will have the same
+ * orientation (CCW or CW) as the first.
+ * Assumes that the given dart is at the boundary.
+ *
+ * \param aDart
+ * A dart at the boundary (CCW or CW)
+ *
+ * \param aBoundary
+ * A sequence of darts, where the associated edges are the boundary edges
+ *
+ * \require
+ * - DART_LIST_TYPE::push_back (DART_TYPE&)
+ */
+template <class DART_TYPE, class DART_LIST_TYPE>
+void TRIANGULATION_HELPER::GetBoundary( const DART_TYPE& aDart, DART_LIST_TYPE& aBoundary )
+{
+ // assumes the given dart is at the boundary (by edge)
+
+ DART_TYPE dart_iter( aDart );
+ aBoundary.push_back( dart_iter ); // Given dart as first element
+ dart_iter.Alpha0();
+ PositionAtNextBoundaryEdge( dart_iter );
+
+ while( dart_iter != aDart )
+ {
+ aBoundary.push_back( dart_iter );
+ dart_iter.Alpha0();
+ PositionAtNextBoundaryEdge( dart_iter );
+ }
+}
+
+/** Checks if the edge associated with \e dart is at
+ * the boundary of the m_triangulation.
+ *
+ * \par Implements:
+ * \code
+ * DART_TYPE dart_iter = dart;
+ * if (dart_iter.Alpha2() == dart)
+ * return true;
+ * else
+ * return false;
+ * \endcode
+ */
+template <class DART_TYPE>
+bool TRIANGULATION_HELPER::IsBoundaryEdge( const DART_TYPE& aDart )
+{
+ DART_TYPE dart_iter = aDart;
+
+ if( dart_iter.Alpha2() == aDart )
+ return true;
+ else
+ return false;
+}
+
+/** Checks if the face associated with \e dart is at
+ * the boundary of the m_triangulation.
+ */
+template <class DART_TYPE>
+bool TRIANGULATION_HELPER::IsBoundaryFace( const DART_TYPE& aDart )
+{
+ // Strategy: boundary if alpha2(d)=d
+
+ DART_TYPE dart_iter( aDart );
+ DART_TYPE dart_prev;
+
+ do
+ {
+ dart_prev = dart_iter;
+
+ if( dart_iter.Alpha2() == dart_prev )
+ return true;
+ else
+ dart_iter = dart_prev; // back again
+
+ dart_iter.Alpha0();
+ dart_iter.Alpha1();
+
+ } while( dart_iter != aDart );
+
+ return false;
+}
+
+/** Checks if the node associated with \e dart is at
+ * the boundary of the m_triangulation.
+ */
+template <class DART_TYPE>
+bool TRIANGULATION_HELPER::IsBoundaryNode( const DART_TYPE& aDart )
+{
+ // Strategy: boundary if alpha2(d)=d
+
+ DART_TYPE dart_iter( aDart );
+ DART_TYPE dart_prev;
+
+ // If input dart is reached again, then internal node
+ // If alpha2(d)=d, then boundary
+
+ do
+ {
+ dart_iter.Alpha1();
+ dart_prev = dart_iter;
+ dart_iter.Alpha2();
+
+ if( dart_iter == dart_prev )
+ return true;
+
+ } while( dart_iter != aDart );
+
+ return false;
+}
+
+/** Returns the degree of the node associated with \e dart.
+ *
+ * \par Definition:
+ * The \e degree (or valency) of a node \e V in a m_triangulation,
+ * is defined as the number of edges incident with \e V, i.e.,
+ * the number of edges joining \e V with another node in the triangulation.
+ */
+template <class DART_TYPE>
+int TRIANGULATION_HELPER::GetDegreeOfNode( const DART_TYPE& aDart )
+{
+ DART_TYPE dart_iter( aDart );
+ DART_TYPE dart_prev;
+
+ // If input dart is reached again, then interior node
+ // If alpha2(d)=d, then boundary
+
+ int degree = 0;
+ bool boundaryVisited = false;
+ do
+ {
+ dart_iter.Alpha1();
+ degree++;
+ dart_prev = dart_iter;
+
+ dart_iter.Alpha2();
+
+ if( dart_iter == dart_prev )
+ {
+ if( !boundaryVisited )
+ {
+ boundaryVisited = true;
+ // boundary is reached first time, count in the reversed direction
+ degree++; // count the start since it is not done above
+ dart_iter = aDart;
+ dart_iter.Alpha2();
+ } else
+ return degree;
+ }
+
+ } while( dart_iter != aDart );
+
+ return degree;
+}
+
+// Modification of GetDegreeOfNode:
+// Strategy, reverse the list and start in the other direction if the boundary
+// is reached. NB. copying of darts but ok., or we could have collected pointers,
+// but the memory management.
+
+// NOTE: not symmetry if we choose to collect opposite edges
+// now we collect darts with radiating edges
+
+// Remember that we must also copy the node, but ok with push_back
+// The size of the list will be the degree of the node
+
+// No CW/CCW since topology only
+
+// Each dart consists of an incident edge and an adjacent node.
+// But note that this is only how we interpret the dart in this implementation.
+// Given this list, how can we find the opposite edges:
+// We can perform alpha1 on each, but for boundary nodes we will get one edge twice.
+// But this is will always be the last dart!
+// The darts in the list are in sequence and starts with the alpha0(dart)
+// alpha0, alpha1 and alpha2
+
+// Private/Hidden function
+template <class DART_TYPE>
+void TRIANGULATION_HELPER::getNeighborNodes( const DART_TYPE& aDart,
+ std::list<DART_TYPE>& aNodeList, bool& aBoundary )
+{
+ DART_TYPE dart_iter( aDart );
+ dart_iter.Alpha0(); // position the dart at an opposite node
+
+ DART_TYPE dart_prev = dart_iter;
+ bool start_at_boundary = false;
+ dart_iter.Alpha2();
+
+ if( dart_iter == dart_prev )
+ start_at_boundary = true;
+ else
+ dart_iter = dart_prev; // back again
+
+ DART_TYPE dart_start = dart_iter;
+
+ do
+ {
+ aNodeList.push_back( dart_iter );
+ dart_iter.Alpha1();
+ dart_iter.Alpha0();
+ dart_iter.Alpha1();
+ dart_prev = dart_iter;
+ dart_iter.Alpha2();
+
+ if( dart_iter == dart_prev )
+ {
+ // boundary reached
+ aBoundary = true;
+
+ if( start_at_boundary == true )
+ {
+ // add the dart which now is positioned at the opposite boundary
+ aNodeList.push_back( dart_iter );
+ return;
+ }
+ else
+ {
+ // call the function again such that we start at the boundary
+ // first clear the list and reposition to the initial node
+ dart_iter.Alpha0();
+ aNodeList.clear();
+ getNeighborNodes( dart_iter, aNodeList, aBoundary );
+
+ return; // after one recursive step
+ }
+ }
+ }
+ while( dart_iter != dart_start );
+
+ aBoundary = false;
+}
+
+/** Gets the 0-orbit around an interior node.
+ *
+ * \param aDart
+ * A dart (CCW or CW) positioned at an \e interior node.
+ *
+ * \retval aOrbit
+ * Sequence of darts with one orbit for each arc. All the darts have the same
+ * orientation (CCW or CW) as \e dart, and \e dart is the first element
+ * in the sequence.
+ *
+ * \require
+ * - DART_LIST_TYPE::push_back (DART_TYPE&)
+ *
+ * \see
+ * Get0OrbitBoundary
+ */
+template <class DART_TYPE, class DART_LIST_TYPE>
+void TRIANGULATION_HELPER::Get0OrbitInterior( const DART_TYPE& aDart, DART_LIST_TYPE& aOrbit )
+{
+ DART_TYPE d_iter = aDart;
+ aOrbit.push_back( d_iter );
+ d_iter.Alpha1().Alpha2();
+
+ while( d_iter != aDart )
+ {
+ aOrbit.push_back( d_iter );
+ d_iter.Alpha1().Alpha2();
+ }
+}
+
+/** Gets the 0-orbit around a node at the boundary
+ *
+ * \param aDart
+ * A dart (CCW or CW) positioned at a \e boundary \e node and at a \e boundary \e edge.
+ *
+ * \retval orbit
+ * Sequence of darts with one orbit for each arc. All the darts, \e exept \e the \e last one,
+ * have the same orientation (CCW or CW) as \e dart, and \e dart is the first element
+ * in the sequence.
+ *
+ * \require
+ * - DART_LIST_TYPE::push_back (DART_TYPE&)
+ *
+ * \note
+ * - The last dart in the sequence have opposite orientation compared to the others!
+ *
+ * \see
+ * Get0OrbitInterior
+ */
+template <class DART_TYPE, class DART_LIST_TYPE>
+void TRIANGULATION_HELPER::Get0OrbitBoundary( const DART_TYPE& aDart, DART_LIST_TYPE& aOrbit )
+{
+ DART_TYPE dart_prev;
+ DART_TYPE d_iter = aDart;
+
+ do
+ {
+ aOrbit.push_back( d_iter );
+ d_iter.Alpha1();
+ dart_prev = d_iter;
+ d_iter.Alpha2();
+ }
+ while( d_iter != dart_prev );
+
+ aOrbit.push_back( d_iter ); // the last one with opposite orientation
+}
+
+/** Checks if the two darts belong to the same 0-orbit, i.e.,
+ * if they share a node.
+ * \e d1 and/or \e d2 can be CCW or CW.
+ *
+ * (This function also examines if the the node associated with
+ * \e d1 is at the boundary, which slows down the function (slightly).
+ * If it is known that the node associated with \e d1 is an interior
+ * node and a faster version is needed, the user should implement his/her
+ * own version.)
+ */
+template <class DART_TYPE>
+bool TRIANGULATION_HELPER::Same0Orbit( const DART_TYPE& aD1, const DART_TYPE& aD2 )
+{
+ // Two copies of the same dart
+ DART_TYPE d_iter = aD2;
+ DART_TYPE d_end = aD2;
+
+ if( isBoundaryNode( d_iter ) )
+ {
+ // position at both boundary edges
+ PositionAtNextBoundaryEdge( d_iter );
+ d_end.Alpha1();
+ PositionAtNextBoundaryEdge( d_end );
+ }
+
+ for( ;; )
+ {
+ if( d_iter == aD1 )
+ return true;
+
+ d_iter.Alpha1();
+
+ if( d_iter == aD1 )
+ return true;
+
+ d_iter.Alpha2();
+
+ if( d_iter == d_end )
+ break;
+ }
+
+ return false;
+}
+
+/** Checks if the two darts belong to the same 1-orbit, i.e.,
+ * if they share an edge.
+ * \e d1 and/or \e d2 can be CCW or CW.
+ */
+template <class DART_TYPE>
+bool TRIANGULATION_HELPER::Same1Orbit( const DART_TYPE& aD1, const DART_TYPE& aD2 )
+{
+ DART_TYPE d_iter = aD2;
+
+ // (Also works at the boundary)
+ return ( d_iter == aD1 || d_iter.Alpha0() == aD1 ||
+ d_iter.Alpha2() == aD1 || d_iter.Alpha0() == aD1 );
+}
+
+//------------------------------------------------------------------------------------------------
+/** Checks if the two darts belong to the same 2-orbit, i.e.,
+ * if they lie in the same triangle.
+ * \e d1 and/or \e d2 can be CCW or CW
+ */
+template <class DART_TYPE>
+bool TRIANGULATION_HELPER::Same2Orbit( const DART_TYPE& aD1, const DART_TYPE& aD2 )
+{
+ DART_TYPE d_iter = aD2;
+
+ return ( d_iter == aD1 || d_iter.Alpha0() == aD1 || d_iter.Alpha1() == aD1 ||
+ d_iter.Alpha0() == aD1 || d_iter.Alpha1() == aD1 || d_iter.Alpha0() == aD1 );
+}
+
+// Private/Hidden function
+template <class TRAITS_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::degenerateTriangle( const DART_TYPE& aDart )
+{
+ // Check if triangle is degenerate
+ // Assumes CCW dart
+
+ DART_TYPE d1 = aDart;
+ DART_TYPE d2 = d1;
+ d2.Alpha1();
+
+ return ( TRAITS_TYPE::CrossProduct2D( d1, d2 ) == 0 );
+}
+
+/** Checks if the edge associated with \e dart is swappable, i.e., if the edge
+ * is a diagonal in a \e strictly convex (or convex) quadrilateral.
+ *
+ * \param aAllowDegeneracy
+ * If set to true, the function will also return true if the numerical calculations
+ * indicate that the quadrilateral is convex only, and not necessarily strictly
+ * convex.
+ *
+ * \require
+ * - \ref hed::TTLtraits::CrossProduct2D "TRAITS_TYPE::CrossProduct2D" (Dart&, Dart&)
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::SwappableEdge( const DART_TYPE& aDart, bool aAllowDegeneracy )
+{
+ // How "safe" is it?
+
+ if( IsBoundaryEdge( aDart ) )
+ return false;
+
+ // "angles" are at the diagonal
+ DART_TYPE d1 = aDart;
+ d1.Alpha2().Alpha1();
+ DART_TYPE d2 = aDart;
+ d2.Alpha1();
+
+ if( aAllowDegeneracy )
+ {
+ if( TRAITS_TYPE::CrossProduct2D( d1, d2 ) < 0.0 )
+ return false;
+ }
+ else
+ {
+ if( TRAITS_TYPE::CrossProduct2D( d1, d2 ) <= 0.0 )
+ return false;
+ }
+
+ // Opposite side (still angle at the diagonal)
+ d1 = aDart;
+ d1.Alpha0();
+ d2 = d1;
+ d1.Alpha1();
+ d2.Alpha2().Alpha1();
+
+ if( aAllowDegeneracy )
+ {
+ if( TRAITS_TYPE::CrossProduct2D( d1, d2 ) < 0.0 )
+ return false;
+ }
+ else
+ {
+ if( TRAITS_TYPE::CrossProduct2D( d1, d2 ) <= 0.0 )
+ return false;
+ }
+
+ return true;
+}
+
+/** Given a \e dart, CCW or CW, positioned in a 0-orbit at the boundary of a tessellation.
+ * Position \e dart at a boundary edge in the same 0-orbit.\n
+ * If the given \e dart is CCW, \e dart is positioned at the left boundary edge
+ * and will be CW.\n
+ * If the given \e dart is CW, \e dart is positioned at the right boundary edge
+ * and will be CCW.
+ *
+ * \note
+ * - The given \e dart must have a source node at the boundary, otherwise an
+ * infinit loop occurs.
+ */
+template <class DART_TYPE>
+void TRIANGULATION_HELPER::PositionAtNextBoundaryEdge( DART_TYPE& aDart )
+{
+ DART_TYPE dart_prev;
+
+ // If alpha2(d)=d, then boundary
+
+ //old convention: dart.Alpha0();
+ do
+ {
+ aDart.Alpha1();
+ dart_prev = aDart;
+ aDart.Alpha2();
+ }
+ while( aDart != dart_prev );
+}
+
+/** Checks if the boundary of a triangulation is convex.
+ *
+ * \param dart
+ * A CCW dart at the boundary of the m_triangulation
+ *
+ * \require
+ * - \ref hed::TTLtraits::CrossProduct2D "TRAITS_TYPE::CrossProduct2D" (const Dart&, const Dart&)
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+bool TRIANGULATION_HELPER::ConvexBoundary( const DART_TYPE& aDart )
+{
+ std::list<DART_TYPE> blist;
+ getBoundary( aDart, blist );
+
+ int no;
+ no = (int) blist.size();
+ typename std::list<DART_TYPE>::const_iterator bit = blist.begin();
+ DART_TYPE d1 = *bit;
+ ++bit;
+ DART_TYPE d2;
+ bool convex = true;
+
+ for( ; bit != blist.end(); ++bit )
+ {
+ d2 = *bit;
+ double crossProd = TRAITS_TYPE::CrossProduct2D( d1, d2 );
+
+ if( crossProd < 0.0 )
+ {
+ //cout << "!!! Boundary is NOT convex: crossProd = " << crossProd << endl;
+ convex = false;
+ return convex;
+ }
+
+ d1 = d2;
+ }
+
+ // Check the last angle
+ d2 = *blist.begin();
+ double crossProd = TRAITS_TYPE::CrossProduct2D( d1, d2 );
+
+ if( crossProd < 0.0 )
+ {
+ //cout << "!!! Boundary is NOT convex: crossProd = " << crossProd << endl;
+ convex = false;
+ }
+
+ //if (convex)
+ // cout << "\n---> Boundary is convex\n" << endl;
+ //cout << endl;
+ return convex;
+}
+
+//@} // End of Topological and Geometric Queries Group
+
+/** @name Utilities for Delaunay Triangulation */
+//@{
+//------------------------------------------------------------------------------------------------
+/** Optimizes the edges in the given sequence according to the
+ * \e Delaunay criterion, i.e., such that the edge will fullfill the
+ * \e circumcircle criterion (or equivalently the \e MaxMin
+ * angle criterion) with respect to the quadrilaterals where
+ * they are diagonals.
+ *
+ * \param aElist
+ * The sequence of edges
+ *
+ * \require
+ * - \ref hed::TTLtraits::swapEdge "TRAITS_TYPE::swapEdge" (DART_TYPE& \e dart)\n
+ * \b Note: Must be implemented such that \e dart is delivered back in a position as
+ * seen if it was glued to the edge when swapping (rotating) the edge CCW
+ *
+ * \using
+ * - swapTestDelaunay
+ */
+template <class TRAITS_TYPE, class DART_TYPE, class DART_LIST_TYPE>
+void TRIANGULATION_HELPER::OptimizeDelaunay( DART_LIST_TYPE& aElist )
+{
+ OptimizeDelaunay<TRAITS_TYPE, DART_TYPE, DART_LIST_TYPE>( aElist, aElist.end() );
+}
+
+//------------------------------------------------------------------------------------------------
+template <class TRAITS_TYPE, class DART_TYPE, class DART_LIST_TYPE>
+void TRIANGULATION_HELPER::OptimizeDelaunay( DART_LIST_TYPE& aElist,
+ const typename DART_LIST_TYPE::iterator aEnd )
+{
+ // CCW darts
+ // Optimize here means Delaunay, but could be any criterion by
+ // requiring a "should swap" in the traits class, or give
+ // a function object?
+ // Assumes that elist has only one dart for each arc.
+ // Darts outside the quadrilateral are preserved
+
+ // For some data structures it is possible to preserve
+ // all darts when swapping. Thus a preserve_darts_when swapping
+ // ccould be given to indicate this and we would gain performance by avoiding
+ // find in list.
+
+ // Requires that swap retuns a dart in the "same position when rotated CCW"
+ // (A vector instead of a list may be better.)
+
+ // First check that elist is not empty
+ if( aElist.empty() )
+ return;
+
+ // Avoid cycling by more extensive circumcircle test
+ bool cycling_check = true;
+ bool optimal = false;
+ typename DART_LIST_TYPE::iterator it;
+
+ typename DART_LIST_TYPE::iterator end_opt = aEnd;
+
+ // Hmm... The following code is trying to derefence an iterator that may
+ // be invalid. This may lead to debug error on Windows, so we comment out
+ // this code. Checking elist.empty() above will prevent some
+ // problems...
+ //
+ // last_opt is passed the end of the "active list"
+ //typename DART_LIST_TYPE::iterator end_opt;
+ //if (*end != NULL)
+ // end_opt = end;
+ //else
+ // end_opt = elist.end();
+
+ while( !optimal )
+ {
+ optimal = true;
+ for( it = aElist.begin(); it != end_opt; ++it )
+ {
+ if( SwapTestDelaunay<TRAITS_TYPE>( *it, cycling_check ) )
+ {
+ // Preserve darts. Potential darts in the list are:
+ // - The current dart
+ // - the four CCW darts on the boundary of the quadrilateral
+ // (the current arc has only one dart)
+
+ SwapEdgeInList<TRAITS_TYPE, DART_TYPE>( it, aElist );
+
+ optimal = false;
+ } // end if should swap
+ } // end for
+ } // end pass
+}
+
+/** Checks if the edge associated with \e dart should be swapped according
+ * to the \e Delaunay criterion, i.e., the \e circumcircle criterion (or
+ * equivalently the \e MaxMin angle criterion).
+ *
+ * \param aCyclingCheck
+ * Must be set to \c true when used in connection with optimization algorithms,
+ * e.g., OptimizeDelaunay. This will avoid cycling and infinite loops in nearly
+ * neutral cases.
+ *
+ * \require
+ * - \ref hed::TTLtraits::ScalarProduct2D "TRAITS_TYPE::ScalarProduct2D" (DART_TYPE&, DART_TYPE&)
+ * - \ref hed::TTLtraits::CrossProduct2D "TRAITS_TYPE::CrossProduct2D" (DART_TYPE&, DART_TYPE&)
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+#if ((_MSC_VER > 0) && (_MSC_VER < 1300))//#ifdef _MSC_VER
+bool TRIANGULATION_HELPER::SwapTestDelaunay(const DART_TYPE& aDart, bool aCyclingCheck = false) const
+{
+#else
+bool TRIANGULATION_HELPER::SwapTestDelaunay( const DART_TYPE& aDart, bool aCyclingCheck ) const
+{
+#endif
+ // The general strategy is taken from Cline & Renka. They claim that
+ // their algorithm insure numerical stability, but experiments show
+ // that this is not correct for neutral, or almost neutral cases.
+ // I have extended this strategy (without using tolerances) to avoid
+ // cycling and infinit loops when used in connection with LOP algorithms;
+ // see the comments below.
+
+ typedef typename TRAITS_TYPE::REAL_TYPE REAL_TYPE;
+
+ if( IsBoundaryEdge( aDart ) )
+ return false;
+
+ DART_TYPE v11 = aDart;
+ v11.Alpha1().Alpha0();
+ DART_TYPE v12 = v11;
+ v12.Alpha1();
+
+ DART_TYPE v22 = aDart;
+ v22.Alpha2().Alpha1().Alpha0();
+ DART_TYPE v21 = v22;
+ v21.Alpha1();
+
+ REAL_TYPE cos1 = TRAITS_TYPE::ScalarProduct2D( v11, v12 );
+ REAL_TYPE cos2 = TRAITS_TYPE::ScalarProduct2D( v21, v22 );
+
+ // "Angles" are opposite to the diagonal.
+ // The diagonals should be swapped iff (t1+t2) .gt. 180
+ // degrees. The following two tests insure numerical
+ // stability according to Cline & Renka. But experiments show
+ // that cycling may still happen; see the aditional test below.
+ if( cos1 >= 0 && cos2 >= 0 ) // both angles are grater or equual 90
+ return false;
+
+ if( cos1 < 0 && cos2 < 0 ) // both angles are less than 90
+ return true;
+
+ REAL_TYPE sin1 = TRAITS_TYPE::CrossProduct2D( v11, v12 );
+ REAL_TYPE sin2 = TRAITS_TYPE::CrossProduct2D( v21, v22 );
+ REAL_TYPE sin12 = sin1 * cos2 + cos1 * sin2;
+
+ if( sin12 >= 0 ) // equality represents a neutral case
+ return false;
+
+ if( aCyclingCheck )
+ {
+ // situation so far is sin12 < 0. Test if this also
+ // happens for the swapped edge.
+
+ // The numerical calculations so far indicate that the edge is
+ // not Delaunay and should not be swapped. But experiments show that
+ // in neutral cases, or almost neutral cases, it may happen that
+ // the swapped edge may again be found to be not Delaunay and thus
+ // be swapped if we return true here. This may lead to cycling and
+ // an infinte loop when used, e.g., in connection with OptimizeDelaunay.
+ //
+ // In an attempt to avoid this we test if the swapped edge will
+ // also be found to be not Delaunay by repeating the last test above
+ // for the swapped edge.
+ // We now rely on the general requirement for TRAITS_TYPE::swapEdge which
+ // should deliver CCW dart back in "the same position"; see the general
+ // description. This will insure numerical stability as the next calculation
+ // is the same as if this function was called again with the swapped edge.
+ // Cycling is thus impossible provided that the initial tests above does
+ // not result in ambiguity (and they should probably not do so).
+
+ v11.Alpha0();
+ v12.Alpha0();
+ v21.Alpha0();
+ v22.Alpha0();
+ // as if the edge was swapped/rotated CCW
+ cos1 = TRAITS_TYPE::ScalarProduct2D( v22, v11 );
+ cos2 = TRAITS_TYPE::ScalarProduct2D( v12, v21 );
+ sin1 = TRAITS_TYPE::CrossProduct2D( v22, v11 );
+ sin2 = TRAITS_TYPE::CrossProduct2D( v12, v21 );
+ sin12 = sin1 * cos2 + cos1 * sin2;
+
+ if( sin12 < 0 )
+ {
+ // A neutral case, but the tests above lead to swapping
+ return false;
+ }
+ }
+
+ return true;
+}
+
+//-----------------------------------------------------------------------
+//
+// x
+//" / \ "
+// / | \ Darts:
+//oe2 / | \ oe2 = oppEdge2
+// x....|....x
+// \ d| d/ d = diagonal (input and output)
+// \ | /
+// oe1 \ / oe1 = oppEdge1
+// x
+//
+//-----------------------------------------------------------------------
+/** Recursively swaps edges in the triangulation according to the \e Delaunay criterion.
+ *
+ * \param aDiagonal
+ * A CCW dart representing the edge where the recursion starts from.
+ *
+ * \require
+ * - \ref hed::TTLtraits::swapEdge "TRAITS_TYPE::swapEdge" (DART_TYPE&)\n
+ * \b Note: Must be implemented such that the darts outside the quadrilateral
+ * are not affected by the swap.
+ *
+ * \using
+ * - Calls itself recursively
+ */
+template <class TRAITS_TYPE, class DART_TYPE>
+void TRIANGULATION_HELPER::RecSwapDelaunay( DART_TYPE& aDiagonal )
+{
+ if( !SwapTestDelaunay<TRAITS_TYPE>( aDiagonal ) )
+ // ??? swapTestDelaunay also checks if boundary, so this can be optimized
+ return;
+
+ // Get the other "edges" of the current triangle; see illustration above.
+ DART_TYPE oppEdge1 = aDiagonal;
+ oppEdge1.Alpha1();
+ bool b1;
+
+ if( IsBoundaryEdge( oppEdge1 ) )
+ b1 = true;
+ else
+ {
+ b1 = false;
+ oppEdge1.Alpha2();
+ }
+
+ DART_TYPE oppEdge2 = aDiagonal;
+ oppEdge2.Alpha0().Alpha1().Alpha0();
+ bool b2;
+
+ if( IsBoundaryEdge( oppEdge2 ) )
+ b2 = true;
+ else
+ {
+ b2 = false;
+ oppEdge2.Alpha2();
+ }
+
+ // Swap the given diagonal
+ m_triangulation.swapEdge( aDiagonal );
+
+ if( !b1 )
+ RecSwapDelaunay<TRAITS_TYPE>( oppEdge1 );
+
+ if( !b2 )
+ RecSwapDelaunay<TRAITS_TYPE>( oppEdge2 );
+}
+
+/** Swaps edges away from the (interior) node associated with
+ * \e dart such that that exactly three edges remain incident
+ * with the node.
+ * This function is used as a first step in RemoveInteriorNode
+ *
+ * \retval dart
+ * A CCW dart incident with the node
+ *
+ * \par Assumes:
+ * - The node associated with \e dart is interior to the
+ * triangulation.
+ *
+ * \require
+ * - \ref hed::TTLtraits::swapEdge "TRAITS_TYPE::swapEdge" (DART_TYPE& \e dart)\n
+ * \b Note: Must be implemented such that \e dart is delivered back in a position as
+ * seen if it was glued to the edge when swapping (rotating) the edge CCW
+ *
+ * \note
+ * - A degenerate triangle may be left at the node.
+ * - The function is not unique as it depends on which dart
+ * at the node that is given as input.
+ *
+ * \see
+ * SwapEdgesAwayFromBoundaryNode
+ */
+template <class TRAITS_TYPE, class DART_TYPE, class LIST_TYPE>
+void TRIANGULATION_HELPER::SwapEdgesAwayFromInteriorNode( DART_TYPE& aDart,
+ LIST_TYPE& aSwappedEdges )
+{
+
+ // Same iteration as in fixEdgesAtCorner, but not boundary
+ DART_TYPE dnext = aDart;
+
+ // Allow degeneracy, otherwise we might end up with degree=4.
+ // For example, the reverse operation of inserting a point on an
+ // existing edge gives a situation where all edges are non-swappable.
+ // Ideally, degeneracy in this case should be along the actual node,
+ // but there is no strategy for this now.
+ // ??? An alternative here is to wait with degeneracy till we get an
+ // infinite loop with degree > 3.
+ bool allowDegeneracy = true;
+
+ int degree = getDegreeOfNode( aDart );
+ DART_TYPE d_iter;
+
+ while( degree > 3 )
+ {
+ d_iter = dnext;
+ dnext.Alpha1().Alpha2();
+
+ if( SwappableEdge<TRAITS_TYPE>( d_iter, allowDegeneracy ) )
+ {
+ m_triangulation.swapEdge( d_iter ); // swap the edge away
+ // Collect swapped edges in the list
+ // "Hide" the dart on the other side of the edge to avoid it being changed for
+ // other swaps
+ DART_TYPE swapped_edge = d_iter; // it was delivered back
+ swapped_edge.Alpha2().Alpha0(); // CCW (if not at boundary)
+ aSwappedEdges.push_back( swapped_edge );
+
+ degree--;
+ }
+ }
+
+ // Output, incident to the node
+ aDart = dnext;
+}
+
+/** Swaps edges away from the (boundary) node associated with
+ * \e dart in such a way that when removing the edges that remain incident
+ * with the node, the boundary of the triangulation will be convex.
+ * This function is used as a first step in RemoveBoundaryNode
+ *
+ * \retval dart
+ * A CCW dart incident with the node
+ *
+ * \require
+ * - \ref hed::TTLtraits::swapEdge "TRAITS_TYPE::swapEdge" (DART_TYPE& \e dart)\n
+ * \b Note: Must be implemented such that \e dart is delivered back in a position as
+ * seen if it was glued to the edge when swapping (rotating) the edge CCW
+ *
+ * \par Assumes:
+ * - The node associated with \e dart is at the boundary of the m_triangulation.
+ *
+ * \see
+ * SwapEdgesAwayFromInteriorNode
+ */
+template <class TRAITS_TYPE, class DART_TYPE, class LIST_TYPE>
+void TRIANGULATION_HELPER::SwapEdgesAwayFromBoundaryNode( DART_TYPE& aDart,
+ LIST_TYPE& aSwappedEdges )
+{
+ // All darts that are swappable.
+ // To treat collinear nodes at an existing boundary, we must allow degeneracy
+ // when swapping to the boundary.
+ // dart is CCW and at the boundary.
+ // The 0-orbit runs CCW
+ // Deliver the dart back in the "same position".
+ // Assume for the swap in the traits class:
+ // - A dart on the swapped edge is delivered back in a position as
+ // seen if it was glued to the edge when swapping (rotating) the edge CCW
+
+ //int degree = getDegreeOfNode(dart);
+
+ passes:
+ // Swap swappable edges that radiate from the node away
+ DART_TYPE d_iter = aDart; // ???? can simply use dart
+ d_iter.Alpha1().Alpha2(); // first not at boundary
+ DART_TYPE d_next = d_iter;
+ bool bend = false;
+ bool swapped_next_to_boundary = false;
+ bool swapped_in_pass = false;
+
+ bool allowDegeneracy; // = true;
+ DART_TYPE tmp1, tmp2;
+
+ while( !bend )
+ {
+ d_next.Alpha1().Alpha2();
+
+ if( IsBoundaryEdge( d_next ) )
+ bend = true; // then it is CW since alpha2
+
+ // To allow removing among collinear nodes at the boundary,
+ // degenerate triangles must be allowed
+ // (they will be removed when used in connection with RemoveBoundaryNode)
+ tmp1 = d_iter;
+ tmp1.Alpha1();
+ tmp2 = d_iter;
+ tmp2.Alpha2().Alpha1(); // don't bother with boundary (checked later)
+
+ if( IsBoundaryEdge( tmp1 ) && IsBoundaryEdge( tmp2 ) )
+ allowDegeneracy = true;
+ else
+ allowDegeneracy = false;
+
+ if( SwappableEdge<TRAITS_TYPE>( d_iter, allowDegeneracy ) )
+ {
+ m_triangulation.swapEdge( d_iter );
+
+ // Collect swapped edges in the list
+ // "Hide" the dart on the other side of the edge to avoid it being changed for
+ // other swapps
+ DART_TYPE swapped_edge = d_iter; // it was delivered back
+ swapped_edge.Alpha2().Alpha0(); // CCW
+ aSwappedEdges.push_back( swapped_edge );
+
+ //degree--; // if degree is 2, or bend=true, we are done
+ swapped_in_pass = true;
+ if( bend )
+ swapped_next_to_boundary = true;
+ }
+
+ if( !bend )
+ d_iter = d_next;
+ }
+
+ // Deliver a dart as output in the same position as the incoming dart
+ if( swapped_next_to_boundary )
+ {
+ // Assume that "swapping is CCW and dart is preserved in the same position
+ d_iter.Alpha1().Alpha0().Alpha1(); // CW and see below
+ }
+ else
+ {
+ d_iter.Alpha1(); // CW and see below
+ }
+ PositionAtNextBoundaryEdge( d_iter ); // CCW
+
+ aDart = d_iter; // for next pass or output
+
+ // If a dart was swapped in this iteration we must run it more
+ if( swapped_in_pass )
+ goto passes;
+}
+
+/** Swap the the edge associated with iterator \e it and update affected darts
+ * in \e elist accordingly.
+ * The darts affected by the swap are those in the same quadrilateral.
+ * Thus, if one want to preserve one or more of these darts on should
+ * keep them in \e elist.
+ */
+template <class TRAITS_TYPE, class DART_TYPE, class DART_LIST_TYPE>
+void TRIANGULATION_HELPER::SwapEdgeInList( const typename DART_LIST_TYPE::iterator& aIt,
+ DART_LIST_TYPE& aElist )
+{
+
+ typename DART_LIST_TYPE::iterator it1, it2, it3, it4;
+ DART_TYPE dart( *aIt );
+
+ //typename TRAITS_TYPE::DART_TYPE d1 = dart; d1.Alpha2().Alpha1();
+ //typename TRAITS_TYPE::DART_TYPE d2 = d1; d2.Alpha0().Alpha1();
+ //typename TRAITS_TYPE::DART_TYPE d3 = dart; d3.Alpha0().Alpha1();
+ //typename TRAITS_TYPE::DART_TYPE d4 = d3; d4.Alpha0().Alpha1();
+ DART_TYPE d1 = dart;
+ d1.Alpha2().Alpha1();
+ DART_TYPE d2 = d1;
+ d2.Alpha0().Alpha1();
+ DART_TYPE d3 = dart;
+ d3.Alpha0().Alpha1();
+ DART_TYPE d4 = d3;
+ d4.Alpha0().Alpha1();
+
+ // Find pinters to the darts that may change.
+ // ??? Note, this is not very efficient since we must use find, which is O(N),
+ // four times.
+ // - Solution?: replace elist with a vector of pair (dart,number)
+ // and avoid find?
+ // - make a function for swapping generically?
+ // - sould we use another container type or,
+ // - erase them and reinsert?
+ // - or use two lists?
+ it1 = find( aElist.begin(), aElist.end(), d1 );
+ it2 = find( aElist.begin(), aElist.end(), d2 );
+ it3 = find( aElist.begin(), aElist.end(), d3 );
+ it4 = find( aElist.begin(), aElist.end(), d4 );
+
+ m_triangulation.swapEdge( dart );
+ // Update the current dart which may have changed
+ *aIt = dart;
+
+ // Update darts that may have changed again (if they were present)
+ // Note that dart is delivered back after swapping
+ if( it1 != aElist.end() )
+ {
+ d1 = dart;
+ d1.Alpha1().Alpha0();
+ *it1 = d1;
+ }
+
+ if( it2 != aElist.end() )
+ {
+ d2 = dart;
+ d2.Alpha2().Alpha1();
+ *it2 = d2;
+ }
+
+ if( it3 != aElist.end() )
+ {
+ d3 = dart;
+ d3.Alpha2().Alpha1().Alpha0().Alpha1();
+ *it3 = d3;
+ }
+
+ if( it4 != aElist.end() )
+ {
+ d4 = dart;
+ d4.Alpha0().Alpha1();
+ *it4 = d4;
+ }
+}
+
+//@} // End of Utilities for Delaunay Triangulation Group
+
+}
+// End of ttl namespace scope (but other files may also contain functions for ttl)
+
+#endif // _TTL_H_
diff --git a/include/ttl/ttl_util.h b/include/ttl/ttl_util.h
new file mode 100644
index 0000000..398f6f3
--- /dev/null
+++ b/include/ttl/ttl_util.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT,
+ * Applied Mathematics, Norway.
+ *
+ * Contact information: E-mail: tor.dokken@sintef.no
+ * SINTEF ICT, DeaPArtment of Applied Mathematics,
+ * P.O. Box 124 Blindern,
+ * 0314 Oslo, Norway.
+ *
+ * This file is aPArt of TTL.
+ *
+ * TTL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * TTL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A aPARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with TTL. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public
+ * License, a covered work must retain the producer line in every data
+ * file that is created or manipulated using TTL.
+ *
+ * Other Usage
+ * You can be released from the requirements of the license by purchasing
+ * a commercial license. Buying such a license is mandatory as soon as you
+ * develop commercial activities involving the TTL library without
+ * disclosing the source code of your own applications.
+ *
+ * This file may be used in accordance with the terms contained in a
+ * written agreement between you and SINTEF ICT.
+ */
+
+#ifndef _TTL_UTIL_H_
+#define _TTL_UTIL_H_
+
+#include <vector>
+#include <algorithm>
+
+#ifdef _MSC_VER
+# if _MSC_VER < 1300
+# include <minmax.h>
+# endif
+#endif
+
+/** \brief Utilities
+*
+* This name saPAce contains utility functions for TTL.\n
+*
+* Point and vector algebra such as scalar product and cross product
+* between vectors are implemented here.
+* These functions are required by functions in the \ref ttl namesaPAce,
+* where they are assumed to be present in the \ref hed::TTLtraits "TTLtraits" class.
+* Thus, the user can call these functions from the traits class.
+* For efficiency reasons, the user may consider implementing these
+* functions in the the API directly on the actual data structure;
+* see \ref api.
+*
+* \note
+* - Cross product between vectors in the xy-plane delivers a scalar,
+* which is the z-component of the actual cross product
+* (the x and y components are both zero).
+*
+* \see
+* ttl and \ref api
+*
+* \author
+* �yvind Hjelle, oyvindhj@ifi.uio.no
+*/
+
+namespace ttl_util
+{
+/** @name Computational geometry */
+//@{
+/** Scalar product between two 2D vectors.
+ *
+ * \aPAr Returns:
+ * \code
+ * aDX1*aDX2 + aDY1*aDY2
+ * \endcode
+ */
+template <class REAL_TYPE>
+REAL_TYPE ScalarProduct2D( REAL_TYPE aDX1, REAL_TYPE aDY1, REAL_TYPE aDX2, REAL_TYPE aDY2 )
+{
+ return aDX1 * aDX2 + aDY1 * aDY2;
+}
+
+/** Cross product between two 2D vectors. (The z-component of the actual cross product.)
+ *
+ * \aPAr Returns:
+ * \code
+ * aDX1*aDY2 - aDY1*aDX2
+ * \endcode
+ */
+template <class REAL_TYPE>
+REAL_TYPE CrossProduct2D( REAL_TYPE aDX1, REAL_TYPE aDY1, REAL_TYPE aDX2, REAL_TYPE aDY2 )
+{
+ return aDX1 * aDY2 - aDY1 * aDX2;
+}
+
+/** Returns a positive value if the 2D nodes/points \e aPA, \e aPB, and
+ * \e aPC occur in counterclockwise order; a negative value if they occur
+ * in clockwise order; and zero if they are collinear.
+ *
+ * \note
+ * - This is a finite arithmetic fast version. It can be made more robust using
+ * exact arithmetic schemes by Jonathan Richard Shewchuk. See
+ * http://www-2.cs.cmu.edu/~quake/robust.html
+ */
+template <class REAL_TYPE>
+REAL_TYPE Orient2DFast( REAL_TYPE aPA[2], REAL_TYPE aPB[2], REAL_TYPE aPC[2] )
+{
+ REAL_TYPE acx = aPA[0] - aPC[0];
+ REAL_TYPE bcx = aPB[0] - aPC[0];
+ REAL_TYPE acy = aPA[1] - aPC[1];
+ REAL_TYPE bcy = aPB[1] - aPC[1];
+
+ return acx * bcy - acy * bcx;
+}
+
+} // namespace ttl_util
+
+#endif // _TTL_UTIL_H_
diff --git a/include/utf8.h b/include/utf8.h
new file mode 100644
index 0000000..b4f6f98
--- /dev/null
+++ b/include/utf8.h
@@ -0,0 +1,229 @@
+#ifndef UTF8_H_
+#define UTF8_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <string>
+#include <wx/string.h>
+
+/**
+ * Class UTF8
+ * is an 8 bit std::string that is assuredly encoded in UTF8, and supplies special
+ * conversion support to and from wxString, and has iteration over unicode characters.
+ *
+ * <p>I've been careful to supply only conversion facilities and not try
+ * and duplicate wxString() with many member functions. In the end it is
+ * to be a std::string. There are multiple ways to create text into a std::string
+ * without the need of too many member functions:
+ *
+ * <ul>
+ * <li>richio.h's StrPrintf()</li>
+ * <li>std::ostringstream.</li>
+ * </ul>
+ *
+ * <p>Because this class used no virtuals, it should be possible to cast any
+ * std::string into a UTF8 using this kind of cast: (UTF8 &) without construction
+ * or copying being the effect of the cast. Be sure the source std::string holds
+ * UTF8 encoded text before you do that.
+ *
+ * @author Dick Hollenbeck
+ */
+class UTF8 : public std::string
+{
+public:
+
+ UTF8( const wxString& o );
+
+ /// This is a constructor for which you could end up with
+ /// non-UTF8 encoding, but that would be your fault.
+ UTF8( const char* txt ) :
+ std::string( txt )
+ {
+ }
+
+ /// For use with _() function on wx 2.8.
+ /// BTW _() on wx >= 2.9 returns wxString, not wchar_t* like on 2.8.
+ UTF8( const wchar_t* txt );
+
+ UTF8( const std::string& o ) :
+ std::string( o )
+ {
+ }
+
+ UTF8() :
+ std::string()
+ {
+ }
+
+ ~UTF8() // Needed mainly to build python wrapper
+ {
+ }
+
+ UTF8& operator=( const wxString& o );
+
+ UTF8& operator=( const std::string& o )
+ {
+ std::string::operator=( o );
+ return *this;
+ }
+
+ UTF8& operator=( const char* s )
+ {
+ std::string::operator=( s );
+ return *this;
+ }
+
+ UTF8& operator=( char c )
+ {
+ std::string::operator=( c );
+ return *this;
+ }
+
+ UTF8 substr( size_t pos = 0, size_t len = npos ) const
+ {
+ return std::string::substr( pos, len );
+ }
+
+ operator wxString () const;
+
+ /// This one is not in std::string, and one wonders why... might be a solid
+ /// enough reason to remove it still.
+ operator char* () const
+ {
+ return (char*) c_str();
+ }
+
+ /**
+ * Function uni_forward
+ * advances over a single UTF8 encoded multibyte character, capturing the
+ * unicode character as it goes, and returning the number of bytes consumed.
+ *
+ * @param aSequence is the UTF8 byte sequence, must be aligned on start of character.
+ * @param aResult is where to put the unicode character, and may be NULL if no interest.
+ * @return int - the count of bytes consumed.
+ */
+ static int uni_forward( const unsigned char* aSequence, unsigned* aResult = NULL );
+
+ /**
+ * class uni_iter
+ * is a non-muting iterator that walks through unicode code points in the UTF8 encoded
+ * string. The normal ++(), ++(int), ->(), and *() operators are all supported
+ * for read only access and some return an unsigned holding the unicode character
+ * appropriate for the respective operator.
+ */
+ class uni_iter
+ {
+ friend class UTF8;
+
+ const unsigned char* it;
+
+ // private constructor.
+ uni_iter( const char* start ) :
+ it( (const unsigned char*) start )
+ {
+ // for the human: assert( sizeof(unsigned) >= 4 );
+ }
+
+
+ public:
+
+ uni_iter() // Needed only to build python wrapper, not used outside the wrapper
+ {
+ it = NULL;
+ }
+
+ uni_iter( const uni_iter& o )
+ {
+ it = o.it;
+ }
+
+ /// pre-increment and return uni_iter at new position
+ const uni_iter& operator++()
+ {
+ it += uni_forward( it );
+ return *this;
+ }
+
+ /// post-increment and return uni_iter at initial position
+ uni_iter operator++( int )
+ {
+ uni_iter ret = *this;
+
+ it += uni_forward( it );
+ return ret;
+ }
+
+ /*
+ /// return unicode at current position
+ unsigned operator->() const
+ {
+ unsigned result;
+
+ // grab the result, do not advance
+ uni_forward( it, &result );
+ return result;
+ }
+ */
+
+ /// return unicode at current position
+ unsigned operator*() const
+ {
+ unsigned result;
+
+ // grab the result, do not advance
+ uni_forward( it, &result );
+ return result;
+ }
+
+ bool operator==( const uni_iter& other ) const { return it == other.it; }
+ bool operator!=( const uni_iter& other ) const { return it != other.it; }
+
+ /// Since the ++ operators advance more than one byte, this is your best
+ /// loop termination test, < end(), not == end().
+ bool operator< ( const uni_iter& other ) const { return it < other.it; }
+ bool operator<=( const uni_iter& other ) const { return it <= other.it; }
+ bool operator> ( const uni_iter& other ) const { return it > other.it; }
+ bool operator>=( const uni_iter& other ) const { return it >= other.it; }
+ };
+
+ /**
+ * Function ubegin
+ * returns a @a uni_iter initialized to the start of "this" UTF8 byte sequence.
+ */
+ uni_iter ubegin() const
+ {
+ return uni_iter( data() );
+ }
+
+ /**
+ * Function uend
+ * returns a @a uni_iter initialized to the end of "this" UTF8 byte sequence.
+ */
+ uni_iter uend() const
+ {
+ return uni_iter( data() + size() );
+ }
+};
+
+#endif // UTF8_H_
diff --git a/include/validators.h b/include/validators.h
new file mode 100644
index 0000000..f08fe08
--- /dev/null
+++ b/include/validators.h
@@ -0,0 +1,81 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file validators.h
+ * @brief Custom text control validator definitions.
+ */
+
+#ifndef VALIDATORS_H
+#define VALIDATORS_H
+
+#include <wx/valtext.h>
+
+/**
+ * Class FILE_NAME_CHAR_VALIDATOR
+ *
+ * This class provides a custom wxValidator object for limiting the allowable characters when
+ * defining footprint names. Since the introduction of the PRETTY footprint library format,
+ * footprint names cannot have any characters that would prevent file creation on any platform.
+ * The characters \/:*?|"<> are illegal and filtered by the validator.
+ */
+class FILE_NAME_CHAR_VALIDATOR : public wxTextValidator
+{
+public:
+ FILE_NAME_CHAR_VALIDATOR( wxString* aValue = NULL );
+};
+
+
+/**
+ * Class FILE_NAME_WITH_PATH_CHAR_VALIDATOR
+ *
+ * This class provides a custom wxValidator object for limiting the allowable characters when
+ * defining file names with path, for instance in schematic sheet file names.
+ * The characters *?|"<> are illegal and filtered by the validator,
+ * but /\: are valid (\ and : only on Windows.)
+ */
+class FILE_NAME_WITH_PATH_CHAR_VALIDATOR : public wxTextValidator
+{
+public:
+ FILE_NAME_WITH_PATH_CHAR_VALIDATOR( wxString* aValue = NULL );
+};
+
+
+/**
+ * Class ENVIRONMENT_VARIABLE_CHAR_VALIDATOR
+ *
+ * This class provides a custome wxValidator object for limiting the allowable characters
+ * when defining an environment varaible name in a text edit control. Only uppercase,
+ * numbers, and underscore (_) characters are valid and the first character of the name
+ * cannot start with a number. This is according to IEEE Std 1003.1-2001. Even though
+ * most systems support other characters, these characters guarantee compatibility for
+ * all shells.
+ */
+class ENVIRONMENT_VARIABLE_CHAR_VALIDATOR : public wxTextValidator
+{
+public:
+ ENVIRONMENT_VARIABLE_CHAR_VALIDATOR( wxString* aValue = NULL );
+};
+
+#endif // #ifndef VALIDATORS_H
diff --git a/include/view/view.h b/include/view/view.h
new file mode 100644
index 0000000..e26562e
--- /dev/null
+++ b/include/view/view.h
@@ -0,0 +1,721 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __VIEW_H
+#define __VIEW_H
+
+#include <vector>
+#include <set>
+#include <boost/unordered/unordered_map.hpp>
+
+#include <math/box2.h>
+#include <gal/definitions.h>
+
+namespace KIGFX
+{
+class PAINTER;
+class GAL;
+class VIEW_ITEM;
+class VIEW_GROUP;
+class VIEW_RTREE;
+
+/**
+ * Class VIEW.
+ * Holds a (potentially large) number of VIEW_ITEMs and renders them on a graphics device
+ * provided by the GAL. VIEWs can exist in two flavors:
+ * - dynamic - where items can be added, removed or changed anytime, intended for the main
+ * editing panel. Each VIEW_ITEM can be added to a single dynamic view.
+ * - static - where items are added once at the startup and are not linked with the VIEW.
+ * Foreseen for preview windows and printing.
+ * Items in a view are grouped in layers (not to be confused with Kicad's PCB layers). Each layer is
+ * identified by an integer number. Visibility and rendering order can be set individually for each
+ * of the layers. Future versions of the VIEW will also allow to assign different layers to different
+ * rendering targets, which will be composited at the final stage by the GAL.
+ * The VIEW class also provides fast methods for finding all visible objects that are within a given
+ * rectangular area, useful for object selection/hit testing.
+ */
+class VIEW
+{
+public:
+ friend class VIEW_ITEM;
+
+ typedef std::pair<VIEW_ITEM*, int> LAYER_ITEM_PAIR;
+
+ /**
+ * Constructor.
+ * @param aIsDynamic decides whether we are creating a static or a dynamic VIEW.
+ */
+ VIEW( bool aIsDynamic = true );
+
+ ~VIEW();
+
+ /**
+ * Function Add()
+ * Adds a VIEW_ITEM to the view.
+ * @param aItem: item to be added. No ownership is given
+ */
+ void Add( VIEW_ITEM* aItem );
+
+ /**
+ * Function Remove()
+ * Removes a VIEW_ITEM from the view.
+ * @param aItem: item to be removed. Caller must dispose the removed item if necessary
+ */
+ void Remove( VIEW_ITEM* aItem );
+
+ /**
+ * Function Query()
+ * Finds all visible items that touch or are within the rectangle aRect.
+ * @param aRect area to search for items
+ * @param aResult result of the search, containing VIEW_ITEMs associated with their layers.
+ * Sorted according to the rendering order (items that are on top of the rendering stack as
+ * first).
+ * @return Number of found items.
+ */
+ int Query( const BOX2I& aRect, std::vector<LAYER_ITEM_PAIR>& aResult ) const;
+
+ /**
+ * Function SetRequired()
+ * Marks the aRequiredId layer as required for the aLayerId layer. In order to display the
+ * layer, all of its required layers have to be enabled.
+ * @param aLayerId is the id of the layer for which we enable/disable the required layer.
+ * @param aRequiredId is the id of the required layer.
+ * @param aRequired tells if the required layer should be added or removed from the list.
+ */
+ void SetRequired( int aLayerId, int aRequiredId, bool aRequired = true );
+
+ /**
+ * Function CopySettings()
+ * Copies layers and visibility settings from another view.
+ * @param aOtherView: view from which settings will be copied.
+ */
+ void CopySettings( const VIEW* aOtherView );
+
+ /*
+ * Convenience wrappers for adding multiple items
+ * template <class T> void AddItems( const T& aItems );
+ * template <class T> void RemoveItems( const T& aItems );
+ */
+
+ /**
+ * Function SetGAL()
+ * Assigns a rendering device for the VIEW.
+ * @param aGal: pointer to the GAL output device
+ */
+ void SetGAL( GAL* aGal );
+
+ /**
+ * Function GetGAL()
+ * Returns the GAL this view is using to draw graphical primitives.
+ * @return Pointer to the currently used GAL instance.
+ */
+ inline GAL* GetGAL() const
+ {
+ return m_gal;
+ }
+
+ /**
+ * Function SetPainter()
+ * Sets the painter object used by the view for drawing VIEW_ITEMS.
+ */
+ inline void SetPainter( PAINTER* aPainter )
+ {
+ m_painter = aPainter;
+ }
+
+ /**
+ * Function GetPainter()
+ * Returns the painter object used by the view for drawing VIEW_ITEMS.
+ * @return Pointer to the currently used Painter instance.
+ */
+ inline PAINTER* GetPainter() const
+ {
+ return m_painter;
+ }
+
+ /**
+ * Function SetViewport()
+ * Sets the visible area of the VIEW.
+ * @param aViewport: desired visible area, in world space coordinates.
+ */
+ void SetViewport( const BOX2D& aViewport );
+
+ /**
+ * Function GetViewport()
+ * Returns the current viewport visible area rectangle.
+ * @return Current viewport rectangle
+ */
+ BOX2D GetViewport() const;
+
+ /**
+ * Function SetMirror()
+ * Controls the mirroring of the VIEW.
+ * @param aMirrorX: when true, the X axis is mirrored
+ * @param aMirrorY: when true, the Y axis is mirrored.
+ */
+ void SetMirror( bool aMirrorX, bool aMirrorY );
+
+ /**
+ * Function SetScale()
+ * Sets the scaling factor. Scale = 1 corresponds to the real world size of the objects
+ * (depending on correct GAL unit length & DPI settings).
+ * @param aScale: the scalefactor
+ */
+ inline void SetScale( double aScale )
+ {
+ SetScale( aScale, m_center );
+ }
+
+ /**
+ * Function SetScale()
+ * Sets the scaling factor, zooming around a given anchor point.
+ * (depending on correct GAL unit length & DPI settings).
+ * @param aAnchor: the zooming anchor point
+ * @param aScale: the scale factor
+ */
+ void SetScale( double aScale, const VECTOR2D& aAnchor );
+
+ /**
+ * Function GetScale()
+ * @return Current scale factor of this VIEW.
+ */
+ inline double GetScale() const
+ {
+ return m_scale;
+ }
+
+ /**
+ * Function SetBoundary()
+ * Sets limits for view area.
+ * @param aBoundary is the box that limits view area.
+ */
+ inline void SetBoundary( const BOX2I& aBoundary )
+ {
+ m_boundary = aBoundary;
+ }
+
+ /**
+ * Function GetBoundary()
+ * @return Current view area boundary.
+ */
+ inline const BOX2I& GetBoundary() const
+ {
+ return m_boundary;
+ }
+
+ /**
+ * Function SetScaleLimits()
+ * Sets minimum and maximum values for scale.
+ * @param aMaximum is the maximum value for scale.
+ * @param aMinimum is the minimum value for scale.
+ */
+ void SetScaleLimits( double aMaximum, double aMinimum )
+ {
+ wxASSERT_MSG( aMaximum > aMinimum, wxT( "I guess you passed parameters in wrong order" ) );
+
+ m_minScale = aMinimum;
+ m_maxScale = aMaximum;
+ }
+
+ /**
+ * Function SetCenter()
+ * Sets the center point of the VIEW (i.e. the point in world space that will be drawn in the middle
+ * of the screen).
+ * @param aCenter: the new center point, in world space coordinates.
+ */
+ void SetCenter( const VECTOR2D& aCenter );
+
+ /**
+ * Function GetCenter()
+ * Returns the center point of this VIEW (in world space coordinates)
+ * @return center point of the view
+ */
+ const VECTOR2D& GetCenter() const
+ {
+ return m_center;
+ }
+
+ /**
+ * Function ToWorld()
+ * Converts a screen space point/vector to a point/vector in world space coordinates.
+ * @param aCoord: the point/vector to be converted
+ * @param aAbsolute: when true, aCoord is treated as a point, otherwise - as a direction (vector)
+ */
+ VECTOR2D ToWorld( const VECTOR2D& aCoord, bool aAbsolute = true ) const;
+
+ /**
+ * Function ToWorld()
+ * Converts a screen space one dimensional size to a one dimensional size in world
+ * space coordinates.
+ * @param aSize : the size to be converted
+ */
+ double ToWorld( double aSize ) const;
+
+ /**
+ * Function ToScreen()
+ * Converts a world space point/vector to a point/vector in screen space coordinates.
+ * @param aCoord: the point/vector to be converted
+ * @param aAbsolute: when true, aCoord is treated as a point, otherwise - as a direction (vector)
+ */
+ VECTOR2D ToScreen( const VECTOR2D& aCoord, bool aAbsolute = true ) const;
+
+ /**
+ * Function ToScreen()
+ * Converts a world space one dimensionsal size to a one dimensional size in screen space.
+ * @param aCoord: the size to be transformed.
+ */
+ double ToScreen( double aSize ) const;
+
+ /**
+ * Function GetScreenPixelSize()
+ * Returns the size of the our rendering area, in pixels.
+ * @return viewport screen size
+ */
+ const VECTOR2I& GetScreenPixelSize() const;
+
+ /**
+ * Function AddLayer()
+ * Adds a new layer to the view.
+ * @param aLayer: unique ID of the layer to be added.
+ * @param aDisplayOnly: layer is display-only (example: selection boxes, floating hints/menus).
+ * Objects belonging to this layer are not taken into account by Query() method.
+ */
+ void AddLayer( int aLayer, bool aDisplayOnly = false );
+
+ /**
+ * Function ClearLayer()
+ * Removes all items from a given layer.
+ * @param aLayer: ID of the layer to be cleared
+ */
+ void ClearLayer( int aLayer );
+
+ /**
+ * Function Clear()
+ * Removes all items from the view.
+ */
+ void Clear();
+
+ /**
+ * Function SetLayerVisible()
+ * Controls the visibility of a particular layer.
+ * @param aLayer: the layer to show/hide.
+ * @param aVisible: the obvious.
+ */
+ inline void SetLayerVisible( int aLayer, bool aVisible = true )
+ {
+ wxASSERT( aLayer < (int) m_layers.size() );
+
+ if( m_layers[aLayer].visible != aVisible )
+ {
+ // Target has to be redrawn after changing its visibility
+ MarkTargetDirty( m_layers[aLayer].target );
+ m_layers[aLayer].visible = aVisible;
+ }
+ }
+
+ /**
+ * Function IsLayerVisible()
+ * Returns information about visibility of a particular layer.
+ * @param aLayer: true if the layer is visible, false otherwise
+ */
+ inline bool IsLayerVisible( int aLayer ) const
+ {
+ wxASSERT( aLayer < (int) m_layers.size() );
+
+ return m_layers.at( aLayer ).visible;
+ }
+
+ inline void SetLayerDisplayOnly( int aLayer, bool aDisplayOnly = true )
+ {
+ wxASSERT( aLayer < (int) m_layers.size() );
+
+ m_layers[aLayer].displayOnly = aDisplayOnly;
+ }
+
+ /**
+ * Function SetLayerTarget()
+ * Changes the rendering target for a particular layer.
+ * @param aLayer is the layer.
+ * @param aTarget is the rendering target.
+ */
+ inline void SetLayerTarget( int aLayer, RENDER_TARGET aTarget )
+ {
+ wxASSERT( aLayer < (int) m_layers.size() );
+
+ m_layers[aLayer].target = aTarget;
+ }
+
+ /**
+ * Function SetLayerOrder()
+ * Sets rendering order of a particular layer. Lower values are rendered first.
+ * @param aLayer: the layer
+ * @param aRenderingOrder: arbitrary number denoting the rendering order.
+ */
+ void SetLayerOrder( int aLayer, int aRenderingOrder );
+
+ /**
+ * Function GetLayerOrder()
+ * Returns rendering order of a particular layer. Lower values are rendered first.
+ * @param aLayer: the layer
+ * @return Rendering order of a particular layer.
+ */
+ int GetLayerOrder( int aLayer ) const;
+
+ /**
+ * Function SortLayers()
+ * Changes the order of given layer ids, so after sorting the order corresponds to layers
+ * rendering order (descending, ie. order in which layers should be drawn - from the bottom to
+ * the top).
+ * @param aLayers stores id of layers to be sorted.
+ * @param aCount stores the number of layers.
+ */
+ void SortLayers( int aLayers[], int& aCount ) const;
+
+ /**
+ * Function UpdateLayerColor()
+ * Applies the new coloring scheme held by RENDER_SETTINGS in case that it has changed.
+ * @param aLayer is a number of the layer to be updated.
+ * @see RENDER_SETTINGS
+ */
+ void UpdateLayerColor( int aLayer );
+
+ /**
+ * Function UpdateAllLayersColor()
+ * Applies the new coloring scheme to all layers. The used scheme is held by RENDER_SETTINGS.
+ * @see RENDER_SETTINGS
+ */
+ void UpdateAllLayersColor();
+
+ /**
+ * Function ChangeLayerDepth()
+ * Changes the depth of items on the given layer.
+ * @param aLayer is a number of the layer to be updated.
+ * @param aDepth is the new depth.
+ */
+ void ChangeLayerDepth( int aLayer, int aDepth );
+
+ /**
+ * Function SetTopLayer()
+ * Sets given layer to be displayed on the top or sets back the default order of layers.
+ * @param aLayer: the layer or -1 in case when no particular layer should
+ * be displayed on the top.
+ */
+ void SetTopLayer( int aLayer, bool aEnabled = true );
+
+ /**
+ * Function EnableTopLayer()
+ * Enables or disables display of the top layer. When disabled - layers are rendered as usual
+ * with no influence from SetTopLayer function. Otherwise on the top there is displayed the
+ * layer set previously with SetTopLayer function.
+ * @param aEnable whether to enable or disable display of the top layer.
+ */
+ void EnableTopLayer( bool aEnable );
+
+ int GetTopLayer() const;
+
+ /**
+ * Function ClearTopLayers()
+ * Removes all layers from the on-the-top set (they are no longer displayed over the rest of
+ * layers).
+ */
+ void ClearTopLayers();
+
+ /**
+ * Function UpdateLayerOrder()
+ * Does everything that is needed to apply the rendering order of layers. It has to be called
+ * after modification of renderingOrder field of LAYER.
+ */
+ void UpdateAllLayersOrder();
+
+ /**
+ * Function ClearTargets()
+ * Clears targets that are marked as dirty.
+ */
+ void ClearTargets();
+
+ /**
+ * Function Redraw()
+ * Immediately redraws the whole view.
+ */
+ void Redraw();
+
+ /**
+ * Function RecacheAllItems()
+ * Rebuilds GAL display lists.
+ * @param aForceNow decides if every item should be instantly recached. Otherwise items are
+ * going to be recached when they become visible.
+ */
+ void RecacheAllItems( bool aForceNow = false );
+
+ /**
+ * Function IsDynamic()
+ * Tells if the VIEW is dynamic (ie. can be changed, for example displaying PCBs in a window)
+ * or static (that cannot be modified, eg. displaying image/PDF).
+ */
+ bool IsDynamic() const
+ {
+ return m_dynamic;
+ }
+
+ /**
+ * Function IsDirty()
+ * Returns true if any of the VIEW layers needs to be refreshened.
+ * @return True in case if any of layers is marked as dirty.
+ */
+ bool IsDirty() const
+ {
+ for( int i = 0; i < TARGETS_NUMBER; ++i )
+ {
+ if( IsTargetDirty( i ) )
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Function IsTargetDirty()
+ * Returns true if any of layers belonging to the target or the target itself should be
+ * redrawn.
+ * @return True if the above condition is fulfilled.
+ */
+ bool IsTargetDirty( int aTarget ) const
+ {
+ wxASSERT( aTarget < TARGETS_NUMBER );
+
+ return m_dirtyTargets[aTarget];
+ }
+
+ /**
+ * Function MarkTargetDirty()
+ * Sets or clears target 'dirty' flag.
+ * @param aTarget is the target to set.
+ */
+ inline void MarkTargetDirty( int aTarget )
+ {
+ wxASSERT( aTarget < TARGETS_NUMBER );
+
+ m_dirtyTargets[aTarget] = true;
+ }
+
+ /// Returns true if the layer is cached
+ inline bool IsCached( int aLayer ) const
+ {
+ wxASSERT( aLayer < (int) m_layers.size() );
+
+ try
+ {
+ return m_layers.at( aLayer ).target == TARGET_CACHED;
+ }
+ catch( std::out_of_range )
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Function MarkDirty()
+ * Forces redraw of view on the next rendering.
+ */
+ void MarkDirty()
+ {
+ for( int i = 0; i < TARGETS_NUMBER; ++i )
+ m_dirtyTargets[i] = true;
+ }
+
+ /**
+ * Function MarkForUpdate()
+ * Adds an item to a list of items that are going to be refreshed upon the next frame rendering.
+ * @param aItem is the item to be refreshed.
+ */
+ void MarkForUpdate( VIEW_ITEM* aItem )
+ {
+ m_needsUpdate.push_back( aItem );
+ }
+
+ /**
+ * Function UpdateItems()
+ * Iterates through the list of items that asked for updating and updates them.
+ */
+ void UpdateItems();
+
+ const BOX2I CalculateExtents() ;
+
+ static const int VIEW_MAX_LAYERS = 256; ///< maximum number of layers that may be shown
+
+private:
+ struct VIEW_LAYER
+ {
+ bool visible; ///< is the layer to be rendered?
+ bool displayOnly; ///< is the layer display only?
+ VIEW_RTREE* items; ///< R-tree indexing all items on this layer.
+ int renderingOrder; ///< rendering order of this layer
+ int id; ///< layer ID
+ RENDER_TARGET target; ///< where the layer should be rendered
+ std::set<int> requiredLayers; ///< layers that have to be enabled to show the layer
+ };
+
+ // Convenience typedefs
+ typedef boost::unordered_map<int, VIEW_LAYER> LAYER_MAP;
+ typedef LAYER_MAP::iterator LAYER_MAP_ITER;
+ typedef std::vector<VIEW_LAYER*> LAYER_ORDER;
+ typedef std::vector<VIEW_LAYER*>::iterator LAYER_ORDER_ITER;
+
+ // Function objects that need to access VIEW/VIEW_ITEM private/protected members
+ struct clearLayerCache;
+ struct recacheItem;
+ struct drawItem;
+ struct unlinkItem;
+ struct updateItemsColor;
+ struct changeItemsDepth;
+ struct extentsVisitor;
+
+
+ ///* Redraws contents within rect aRect
+ void redrawRect( const BOX2I& aRect );
+
+ inline void markTargetClean( int aTarget )
+ {
+ wxASSERT( aTarget < TARGETS_NUMBER );
+
+ m_dirtyTargets[aTarget] = false;
+ }
+
+ /**
+ * Function draw()
+ * Draws an item, but on a specified layers. It has to be marked that some of drawing settings
+ * are based on the layer on which an item is drawn.
+ *
+ * @param aItem is the item to be drawn.
+ * @param aLayer is the layer which should be drawn.
+ * @param aImmediate dictates the way of drawing - it allows to force immediate drawing mode
+ * for cached items.
+ */
+ void draw( VIEW_ITEM* aItem, int aLayer, bool aImmediate = false );
+
+ /**
+ * Function draw()
+ * Draws an item on all layers that the item uses.
+ *
+ * @param aItem is the item to be drawn.
+ * @param aImmediate dictates the way of drawing - it allows to force immediate drawing mode
+ * for cached items.
+ */
+ void draw( VIEW_ITEM* aItem, bool aImmediate = false );
+
+ /**
+ * Function draw()
+ * Draws a group of items on all layers that those items use.
+ *
+ * @param aGroup is the group to be drawn.
+ * @param aImmediate dictates the way of drawing - it allows to force immediate drawing mode
+ * for cached items.
+ */
+ void draw( VIEW_GROUP* aGroup, bool aImmediate = false );
+
+ ///* Sorts m_orderedLayers when layer rendering order has changed
+ void sortLayers();
+
+ ///* Clears cached GAL group numbers (*ONLY* numbers stored in VIEW_ITEMs, not group objects
+ ///* used by GAL)
+ void clearGroupCache();
+
+ /**
+ * Function invalidateItem()
+ * Manages dirty flags & redraw queueing when updating an item.
+ * @param aItem is the item to be updated.
+ * @param aUpdateFlags determines the way an item is refreshed.
+ */
+ void invalidateItem( VIEW_ITEM* aItem, int aUpdateFlags );
+
+ /// Updates colors that are used for an item to be drawn
+ void updateItemColor( VIEW_ITEM* aItem, int aLayer );
+
+ /// Updates all informations needed to draw an item
+ void updateItemGeometry( VIEW_ITEM* aItem, int aLayer );
+
+ /// Updates bounding box of an item
+ void updateBbox( VIEW_ITEM* aItem );
+
+ /// Updates set of layers that an item occupies
+ void updateLayers( VIEW_ITEM* aItem );
+
+ /// Determines rendering order of layers. Used in display order sorting function.
+ static bool compareRenderingOrder( VIEW_LAYER* aI, VIEW_LAYER* aJ )
+ {
+ return aI->renderingOrder > aJ->renderingOrder;
+ }
+
+ /// Checks if every layer required by the aLayerId layer is enabled.
+ bool areRequiredLayersEnabled( int aLayerId ) const;
+
+ ///* Whether to use rendering order modifier or not
+ bool m_enableOrderModifier;
+
+ /// Contains set of possible displayed layers and its properties
+ LAYER_MAP m_layers;
+
+ /// Sorted list of pointers to members of m_layers
+ LAYER_ORDER m_orderedLayers;
+
+ /// Stores set of layers that are displayed on the top
+ std::set<unsigned int> m_topLayers;
+
+ /// Center point of the VIEW (the point at which we are looking at)
+ VECTOR2D m_center;
+
+ /// Scale of displayed VIEW_ITEMs
+ double m_scale;
+
+ /// View boundaries
+ BOX2I m_boundary;
+
+ /// Scale lower limit
+ double m_minScale;
+
+ /// Scale upper limit
+ double m_maxScale;
+
+ /// PAINTER contains information how do draw items
+ PAINTER* m_painter;
+
+ /// Gives interface to PAINTER, that is used to draw items
+ GAL* m_gal;
+
+ /// Dynamic VIEW (eg. display PCB in window) allows changes once it is built,
+ /// static (eg. image/PDF) - does not.
+ bool m_dynamic;
+
+ /// Flags to mark targets as dirty, so they have to be redrawn on the next refresh event
+ bool m_dirtyTargets[TARGETS_NUMBER];
+
+ /// Rendering order modifier for layers that are marked as top layers
+ static const int TOP_LAYER_MODIFIER;
+
+ /// Items to be updated
+ std::vector<VIEW_ITEM*> m_needsUpdate;
+};
+} // namespace KIGFX
+
+#endif
diff --git a/include/view/view_controls.h b/include/view/view_controls.h
new file mode 100644
index 0000000..d91a0f2
--- /dev/null
+++ b/include/view/view_controls.h
@@ -0,0 +1,269 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2013 CERN
+ * Copyright (C) 2013-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/**
+ * @file view_controls.h
+ * @brief VIEW_CONTROLS class definition.
+ */
+
+#ifndef __VIEW_CONTROLS_H
+#define __VIEW_CONTROLS_H
+
+#include <math/box2.h>
+
+namespace KIGFX
+{
+class VIEW;
+
+/**
+ * Class VIEW_CONTROLS
+ * is an interface for classes handling user events controlling the view behaviour
+ * (such as zooming, panning, mouse grab, etc.)
+ */
+class VIEW_CONTROLS
+{
+public:
+ VIEW_CONTROLS( VIEW* aView ) : m_view( aView ),
+ m_forceCursorPosition( false ), m_cursorCaptured( false ), m_snappingEnabled( false ),
+ m_grabMouse( false ), m_autoPanEnabled( false ), m_autoPanMargin( 0.1 ),
+ m_autoPanSpeed( 0.15 ), m_warpCursor( false ), m_enableMousewheelPan( false )
+ {
+ }
+
+ virtual ~VIEW_CONTROLS()
+ {}
+
+ /**
+ * Function SetSnapping()
+ * Enables/disables snapping cursor to grid.
+ *
+ * @param aEnabled says whether the opion should be enabled or disabled.
+ */
+ virtual void SetSnapping( bool aEnabled )
+ {
+ m_snappingEnabled = aEnabled;
+ }
+
+ /**
+ * Function SetGrabMouse
+ * Turns on/off mouse grabbing. When the mouse is grabbed, it cannot go outside the VIEW.
+ * @param aEnabled tells if mouse should be grabbed or not.
+ */
+ virtual void SetGrabMouse( bool aEnabled )
+ {
+ m_grabMouse = aEnabled;
+ }
+
+ /**
+ * Function SetAutoPan
+ * Turns on/off auto panning (this feature is used when there is a tool active (eg. drawing a
+ * track) and user moves mouse to the VIEW edge - then the view can be translated or not).
+ * @param aEnabled tells if the autopanning should be active.
+ */
+ virtual void SetAutoPan( bool aEnabled )
+ {
+ m_autoPanEnabled = aEnabled;
+ }
+
+ /**
+ * Function SetAutoPanSpeed()
+ * Sets speed of autopanning.
+ * @param aSpeed is a new speed for autopanning.
+ */
+ virtual void SetAutoPanSpeed( float aSpeed )
+ {
+ m_autoPanSpeed = aSpeed;
+ }
+
+ /**
+ * Function SetAutoPanMArgin()
+ * Sets margin for autopanning (ie. the area when autopanning becomes active).
+ * @param aMargin is a new margin for autopanning.
+ */
+ virtual void SetAutoPanMargin( float aMargin )
+ {
+ m_autoPanMargin = aMargin;
+ }
+
+ /**
+ * Function GetMousePosition()
+ * Returns the current mouse pointer position in screen coordinates. Note, that it may be
+ * different from the cursor position if snapping is enabled (@see GetCursorPosition()).
+ *
+ * @return The current mouse pointer position in the screen coordinates.
+ */
+ virtual VECTOR2I GetMousePosition() const = 0;
+
+ /**
+ * Function GetCursorPosition()
+ * Returns the current cursor position in world coordinates. Note, that it may be
+ * different from the mouse pointer position if snapping is enabled or cursor position
+ * is forced to specific point.
+ *
+ * @return The current cursor position in world coordinates.
+ */
+ virtual VECTOR2D GetCursorPosition() const = 0;
+
+ /**
+ * Function ForceCursorPosition()
+ * Places the cursor immediately at a given point. Mouse movement is ignored.
+ * @param aEnabled enable forced cursor position
+ * @param aPosition the position (world coordinates).
+ */
+ virtual void ForceCursorPosition( bool aEnabled, const VECTOR2D& aPosition = VECTOR2D( 0, 0 ) )
+ {
+ m_forcedPosition = aPosition;
+ m_forceCursorPosition = aEnabled;
+ }
+
+ /**
+ * Function ShowCursor()
+ * Enables or disables display of cursor.
+ * @param aEnabled decides if the cursor should be shown.
+ */
+ virtual void ShowCursor( bool aEnabled );
+
+ /**
+ * Function CaptureCursor()
+ * Forces the cursor to stay within the drawing panel area.
+ * @param aEnabled determines if the cursor should be captured.
+ */
+ virtual void CaptureCursor( bool aEnabled )
+ {
+ m_cursorCaptured = aEnabled;
+ }
+
+ inline bool IsCursorPositionForced() const
+ {
+ return m_forceCursorPosition;
+ }
+
+ /**
+ * Function WarpCursor()
+ * If enabled (@see SetEnableCursorWarping(), warps the cursor to the specified position,
+ * expressed either in the screen coordinates or the world coordinates.
+ * @param aPosition is the position where the cursor should be warped.
+ * @param aWorldCoordinates if true treats aPosition as the world coordinates, otherwise it
+ * uses it as the screen coordinates.
+ * @param aWarpView determines if the view can be warped too (only matters if the position is
+ * specified in the world coordinates and its not visible in the current viewport).
+ */
+ virtual void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
+ bool aWarpView = false ) const = 0;
+
+ /**
+ * Function EnableCursorWarping()
+ * Enables or disables warping the cursor.
+ * @param aEnabled is true if the cursor is allowed to be warped.
+ */
+ void EnableCursorWarping( bool aEnable )
+ {
+ m_warpCursor = aEnable;
+ }
+
+ /**
+ * Function IsCursorWarpingEnabled()
+ * Returns the current setting for cursor warping.
+ */
+ bool IsCursorWarpingEnabled() const
+ {
+ return m_warpCursor;
+ }
+
+ /**
+ * Function EnableMousewheelPan()
+ * Enables or disables mousewheel panning.
+ * @param aEnabled is true if mouse-wheel panning is enabled.
+ */
+ virtual void EnableMousewheelPan( bool aEnable )
+ {
+ m_enableMousewheelPan = aEnable;
+ }
+
+ /**
+ * Function IsMousewheelPanEnabled()
+ * Returns the current setting for mousewheel panning
+ */
+ virtual bool IsMousewheelPanEnabled() const
+ {
+ return m_enableMousewheelPan;
+ }
+
+ /**
+ * Function CenterOnCursor()
+ * Sets the viewport center to the current cursor position and warps the cursor to the
+ * screen center.
+ */
+ virtual void CenterOnCursor() const = 0;
+
+ /**
+ * Function Reset()
+ * Restores the default VIEW_CONTROLS settings.
+ */
+ virtual void Reset();
+
+protected:
+ /// Pointer to controlled VIEW.
+ VIEW* m_view;
+
+ /// Current cursor position
+ VECTOR2D m_cursorPosition;
+
+ /// Forced cursor position
+ VECTOR2D m_forcedPosition;
+
+ /// Is the forced cursor position enabled
+ bool m_forceCursorPosition;
+
+ /// Should the cursor be locked within the parent window area
+ bool m_cursorCaptured;
+
+ /// Should the cursor snap to grid or move freely
+ bool m_snappingEnabled;
+
+ /// Flag for grabbing the mouse cursor
+ bool m_grabMouse;
+
+ /// Flag for turning on autopanning
+ bool m_autoPanEnabled;
+
+ /// Distance from cursor to VIEW edge when panning is active
+ float m_autoPanMargin;
+
+ /// How fast is panning when in auto mode
+ float m_autoPanSpeed;
+
+ /// If the cursor is allowed to be warped
+ bool m_warpCursor;
+
+ /// Mousewheel (2-finger touchpad) panning
+ bool m_enableMousewheelPan;
+};
+} // namespace KIGFX
+
+#endif
diff --git a/include/view/view_group.h b/include/view/view_group.h
new file mode 100644
index 0000000..2a1ad62
--- /dev/null
+++ b/include/view/view_group.h
@@ -0,0 +1,205 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/**
+ * @file view_group.h
+ * @brief VIEW_GROUP extends VIEW_ITEM by possibility of grouping items into a single object.
+ * VIEW_GROUP does not take over ownership of the held items. The main purpose of this class is
+ * to group items and draw them on a single layer (in particular the overlay).
+ */
+
+#ifndef VIEW_GROUP_H_
+#define VIEW_GROUP_H_
+
+#include <view/view_item.h>
+#include <deque>
+
+namespace KIGFX
+{
+class VIEW_GROUP : public VIEW_ITEM
+{
+public:
+ VIEW_GROUP( VIEW* aView = NULL );
+ virtual ~VIEW_GROUP();
+
+ /// Helper typedefs
+ typedef std::set<VIEW_ITEM*>::const_iterator const_iter;
+ typedef std::set<VIEW_ITEM*>::iterator iter;
+
+ /**
+ * Function Add()
+ * Adds an item to the group.
+ *
+ * @param aItem is the item to be added.
+ */
+ virtual void Add( VIEW_ITEM* aItem );
+
+ /**
+ * Function Remove()
+ * Removes an item from the group.
+ *
+ * @param aItem is the item to be removed.
+ */
+ virtual void Remove( VIEW_ITEM* aItem );
+
+ /**
+ * Function Clear()
+ * Removes all the stored items from the group.
+ */
+ virtual void Clear();
+
+ /**
+ * Function Begin()
+ * Returns iterator to beginning.
+ */
+ inline const_iter Begin() const
+ {
+ return m_items.begin();
+ }
+
+ /**
+ * Function End()
+ * Returns iterator to end.
+ */
+ inline const_iter End() const
+ {
+ return m_items.end();
+ }
+
+ /**
+ * Function GetSize()
+ * Returns the number of stored items.
+ *
+ * @return Number of stored items.
+ */
+ virtual unsigned int GetSize() const;
+
+ /**
+ * Function ViewBBox()
+ * Returns the bounding box for all stored items covering all its layers.
+ *
+ * @return The current bounding box
+ */
+ virtual const BOX2I ViewBBox() const;
+
+ /**
+ * Function ViewDraw()
+ * Draws all the stored items in the group on the given layer.
+ *
+ * @param aLayer is the layer which should be drawn.
+ * @param aGal is the GAL that should be used for drawing.
+ */
+ virtual void ViewDraw( int aLayer, GAL* aGal ) const;
+
+ /**
+ * Function ViewGetLayers()
+ * Returns all the layers used by the stored items.
+ *
+ * @param aLayers[] is the output layer index array.
+ * @param aCount is the number of layer indices in aLayers[].
+ */
+ virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
+
+ /**
+ * Function SetLayer()
+ * Sets layer used to draw the group.
+ *
+ * @param aLayer is the layer used for drawing.
+ */
+ inline virtual void SetLayer( int aLayer )
+ {
+ m_layer = aLayer;
+ }
+
+ /**
+ * Function FreeItems()
+ * Frees all the items that were added to the group.
+ */
+ void FreeItems();
+
+ /**
+ * Function GetView()
+ * Returns pointer to the VIEW instance used by items.
+ *
+ * @return Pointer to the VIEW instance.
+ */
+ KIGFX::VIEW* GetView() const
+ {
+ return m_view;
+ }
+
+ /**
+ * Function ItemsSetVisibility()
+ * Sets visibility of items stored in the VIEW_GROUP.
+ *
+ * @param aVisible decides if items should be visible or not.
+ */
+ virtual void ItemsSetVisibility( bool aVisible );
+
+ /**
+ * Function ItemsViewUpdate()
+ * Updates items stored in the VIEW_GROUP.
+ *
+ * @param aFlags determines the way in which items will be updated.
+ */
+ virtual void ItemsViewUpdate( VIEW_ITEM::VIEW_UPDATE_FLAGS aFlags );
+
+protected:
+ /// These functions cannot be used with VIEW_GROUP as they are intended only to work with
+ /// singular VIEW_ITEMs (there is only one-to-one relation between item/layer combination and
+ /// its group).
+ int getGroup( int aLayer ) const
+ {
+ return -1;
+ }
+
+ std::vector<int> getAllGroups() const
+ {
+ return std::vector<int>();
+ }
+
+ void setGroup( int aLayer, int aGroup )
+ {}
+
+ void deleteGroups()
+ {}
+
+ bool storesGroups() const
+ {
+ return false;
+ }
+
+ /// Layer on which the group is drawn
+ int m_layer;
+
+private:
+ void updateBbox();
+
+ /// Container for storing VIEW_ITEMs
+ std::set<VIEW_ITEM*> m_items;
+};
+} // namespace KIGFX
+
+#endif // VIEW_GROUP_H_
diff --git a/include/view/view_item.h b/include/view/view_item.h
new file mode 100644
index 0000000..878c8e7
--- /dev/null
+++ b/include/view/view_item.h
@@ -0,0 +1,356 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file view_item.h
+ * @brief VIEW_ITEM class definition.
+ */
+
+#ifndef __VIEW_ITEM_H
+#define __VIEW_ITEM_H
+
+#include <vector>
+#include <bitset>
+#include <math/box2.h>
+#include <view/view.h>
+#include <gal/definitions.h>
+
+
+namespace KIGFX
+{
+// Forward declarations
+class GAL;
+class PAINTER;
+
+/**
+ * Class VIEW_ITEM -
+ * is an abstract base class for deriving all objects that can be added to a VIEW.
+ * It's role is to:
+ * - communicte geometry, appearance and visibility updates to the associated dynamic VIEW,
+ * - provide a bounding box for redraw area calculation,
+ * - (optional) draw the object using the GAL API functions for PAINTER-less implementations.
+ * VIEW_ITEM objects are never owned by a VIEW. A single VIEW_ITEM can belong to any number of
+ * static VIEWs, but only one dynamic VIEW due to storage of only one VIEW reference.
+ */
+class VIEW_ITEM
+{
+public:
+ /**
+ * Enum VIEW_UPDATE_FLAGS.
+ * Defines the how severely the shape/appearance of the item has been changed:
+ * - NONE: TODO
+ * - APPEARANCE: shape or layer set of the item have not been affected,
+ * only colors or visibility.
+ * - COLOR:
+ * - GEOMETRY: shape or layer set of the item have changed, VIEW may need to reindex it.
+ * - LAYERS: TODO
+ * - ALL: all the flags above */
+
+ enum VIEW_UPDATE_FLAGS {
+ NONE = 0x00, /// No updates are required
+ APPEARANCE = 0x01, /// Visibility flag has changed
+ COLOR = 0x02, /// Color has changed
+ GEOMETRY = 0x04, /// Position or shape has changed
+ LAYERS = 0x08, /// Layers have changed
+ ALL = 0xff
+ };
+
+ /**
+ * Enum VIEW_VISIBILITY_FLAGS.
+ * Defines the visibility of the item (temporarily hidden, invisible, etc).
+ */
+ enum VIEW_VISIBILITY_FLAGS {
+ VISIBLE = 0x01, /// Item is visible (in general)
+ HIDDEN = 0x02 /// Item is temporarily hidden (e.g. being used by a tool). Overrides VISIBLE flag.
+ };
+
+ VIEW_ITEM() : m_view( NULL ), m_flags( VISIBLE ), m_requiredUpdate( NONE ),
+ m_groups( NULL ), m_groupsSize( 0 ) {}
+
+ /**
+ * Destructor. For dynamic views, removes the item from the view.
+ */
+ virtual ~VIEW_ITEM()
+ {
+ ViewRelease();
+ delete[] m_groups;
+ }
+
+ /**
+ * Function ViewBBox()
+ * returns the bounding box of the item covering all its layers.
+ * @return BOX2I - the current bounding box
+ */
+ virtual const BOX2I ViewBBox() const = 0;
+
+ /**
+ * Function ViewDraw()
+ * Draws the parts of the object belonging to layer aLayer.
+ * viewDraw() is an alternative way for drawing objects if
+ * if there is no PAINTER assigned for the view or if the PAINTER
+ * doesn't know how to paint this particular implementation of
+ * VIEW_ITEM. The preferred way of drawing is to design an
+ * appropriate PAINTER object, the method below is intended only
+ * for quick hacks and debugging purposes.
+ *
+ * @param aLayer: current drawing layer
+ * @param aGal: pointer to the GAL device we are drawing on
+ */
+ virtual void ViewDraw( int aLayer, GAL* aGal ) const
+ {}
+
+ /**
+ * Function ViewGetLayers()
+ * Returns the all the layers within the VIEW the object is painted on. For instance, a D_PAD
+ * spans zero or more copper layers and a few technical layers. ViewDraw() or PAINTER::Draw() is
+ * repeatedly called for each of the layers returned by ViewGetLayers(), depending on the
+ * rendering order.
+ * @param aLayers[]: output layer index array
+ * @param aCount: number of layer indices in aLayers[]
+ */
+ virtual void ViewGetLayers( int aLayers[], int& aCount ) const = 0;
+
+ /**
+ * Function ViewSetVisible()
+ * Sets the item visibility.
+ *
+ * @param aIsVisible: whether the item is visible (on all layers), or not.
+ */
+ void ViewSetVisible( bool aIsVisible = true )
+ {
+ bool cur_visible = m_flags & VISIBLE;
+
+ if( cur_visible != aIsVisible )
+ {
+ if( aIsVisible )
+ m_flags |= VISIBLE;
+ else
+ m_flags &= ~VISIBLE;
+
+ ViewUpdate( APPEARANCE | COLOR );
+ }
+ }
+
+ /**
+ * Function ViewHide()
+ * Temporarily hides the item in the view (e.g. for overlaying)
+ *
+ * @param aHide: whether the item is hidden (on all layers), or not.
+ */
+ void ViewHide( bool aHide = true )
+ {
+ if( !( m_flags & VISIBLE ) )
+ return;
+
+ if( aHide )
+ m_flags |= HIDDEN;
+ else
+ m_flags &= ~HIDDEN;
+
+ ViewUpdate( APPEARANCE );
+ }
+
+ /**
+ * Function ViewIsVisible()
+ * Returns information if the item is visible (or not).
+ *
+ * @return when true, the item is visible (i.e. to be displayed, not visible in the
+ * *current* viewport)
+ */
+ bool ViewIsVisible() const
+ {
+ return m_flags & VISIBLE;
+ }
+
+ /**
+ * Function ViewGetLOD()
+ * Returns the level of detail of the item. A level of detail is the minimal VIEW scale that
+ * is sufficient for an item to be shown on a given layer.
+ */
+ virtual unsigned int ViewGetLOD( int aLayer ) const
+ {
+ // By default always show the item
+ return 0;
+ }
+
+ /**
+ * Function ViewUpdate()
+ * For dynamic VIEWs, informs the associated VIEW that the graphical representation of
+ * this item has changed. For static views calling has no effect.
+ *
+ * @param aUpdateFlags: how much the object has changed.
+ */
+ virtual void ViewUpdate( int aUpdateFlags = ALL )
+ {
+ if( m_view )
+ {
+ assert( aUpdateFlags != NONE );
+
+ if( m_requiredUpdate == NONE )
+ m_view->MarkForUpdate( this );
+
+ m_requiredUpdate |= aUpdateFlags;
+ }
+ }
+
+ /**
+ * Function ViewRelease()
+ * Releases the item from an associated dynamic VIEW. For static views calling has no effect.
+ */
+ virtual void ViewRelease();
+
+protected:
+ friend class VIEW;
+
+ /**
+ * Function getLayers()
+ * Returns layer numbers used by the item.
+ *
+ * @param aLayers[]: output layer index array
+ * @param aCount: number of layer indices in aLayers[]
+ */
+ virtual void getLayers( int* aLayers, int& aCount ) const;
+
+ /**
+ * Function viewAssign()
+ * Assigns the item to a given dynamic VIEW. Called internally by the VIEW.
+ *
+ * @param aView[]: dynamic VIEW instance the item is being added to.
+ */
+ virtual void viewAssign( VIEW* aView )
+ {
+ // release the item from a previously assigned dynamic view (if there is any)
+ ViewRelease();
+ m_view = aView;
+ deleteGroups();
+ }
+
+ VIEW* m_view; ///< Current dynamic view the item is assigned to.
+ int m_flags; ///< Visibility flags
+ int m_requiredUpdate; ///< Flag required for updating
+
+ ///* Helper for storing cached items group ids
+ typedef std::pair<int, int> GroupPair;
+
+ ///* Indexes of cached GAL display lists corresponding to the item (for every layer it occupies).
+ ///* (in the std::pair "first" stores layer number, "second" stores group id).
+ GroupPair* m_groups;
+ int m_groupsSize;
+
+ /**
+ * Function getGroup()
+ * Returns number of the group id for the given layer, or -1 in case it was not cached before.
+ *
+ * @param aLayer is the layer number for which group id is queried.
+ * @return group id or -1 in case there is no group id (ie. item is not cached).
+ */
+ virtual int getGroup( int aLayer ) const;
+
+ /**
+ * Function getAllGroups()
+ * Returns all group ids for the item (collected from all layers the item occupies).
+ *
+ * @return vector of group ids.
+ */
+ virtual std::vector<int> getAllGroups() const;
+
+ /**
+ * Function setGroup()
+ * Sets a group id for the item and the layer combination.
+ *
+ * @param aLayer is the layer numbe.
+ * @param aGroup is the group id.
+ */
+ virtual void setGroup( int aLayer, int aGroup );
+
+ /**
+ * Function deleteGroups()
+ * Removes all of the stored group ids. Forces recaching of the item.
+ */
+ virtual void deleteGroups();
+
+ /**
+ * Function storesGroups()
+ * Returns information if the item uses at least one group id (ie. if it is cached at all).
+ *
+ * @returns true in case it is cached at least for one layer.
+ */
+ inline virtual bool storesGroups() const
+ {
+ return m_groupsSize > 0;
+ }
+
+ /// Stores layer numbers used by the item.
+ std::bitset<VIEW::VIEW_MAX_LAYERS> m_layers;
+
+ /**
+ * Function saveLayers()
+ * Saves layers used by the item.
+ *
+ * @param aLayers is an array containing layer numbers to be saved.
+ * @param aCount is the size of the array.
+ */
+ virtual void saveLayers( int* aLayers, int aCount )
+ {
+ m_layers.reset();
+
+ for( int i = 0; i < aCount; ++i )
+ {
+ // this fires on some eagle board after EAGLE_PLUGIN::Load()
+ wxASSERT( unsigned( aLayers[i] ) <= unsigned( VIEW::VIEW_MAX_LAYERS ) );
+
+ m_layers.set( aLayers[i] );
+ }
+ }
+
+ /**
+ * Function viewRequiredUpdate()
+ * Returns current update flag for an item.
+ */
+ virtual int viewRequiredUpdate() const
+ {
+ return m_requiredUpdate;
+ }
+
+ /**
+ * Function clearUpdateFlags()
+ * Marks an item as already updated, so it is not going to be redrawn.
+ */
+ void clearUpdateFlags()
+ {
+ m_requiredUpdate = NONE;
+ }
+
+ /**
+ * Function isRenderable()
+ * Returns if the item should be drawn or not.
+ */
+ bool isRenderable() const
+ {
+ return m_flags == VISIBLE;
+ }
+};
+} // namespace KIGFX
+
+#endif
diff --git a/include/view/view_rtree.h b/include/view/view_rtree.h
new file mode 100644
index 0000000..b9ddb58
--- /dev/null
+++ b/include/view/view_rtree.h
@@ -0,0 +1,92 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __VIEW_RTREE_H
+#define __VIEW_RTREE_H
+
+#include <math/box2.h>
+
+#include <geometry/rtree.h>
+
+namespace KIGFX
+{
+typedef RTree<VIEW_ITEM*, int, 2, float> VIEW_RTREE_BASE;
+
+/**
+ * Class VIEW_RTREE -
+ * Implements an R-tree for fast spatial indexing of VIEW items.
+ * Non-owning.
+ */
+class VIEW_RTREE : public VIEW_RTREE_BASE
+{
+public:
+
+ /**
+ * Function Insert()
+ * Inserts an item into the tree. Item's bounding box is taken via its ViewBBox() method.
+ */
+ void Insert( VIEW_ITEM* aItem )
+ {
+ const BOX2I& bbox = aItem->ViewBBox();
+ const int mmin[2] = { bbox.GetX(), bbox.GetY() };
+ const int mmax[2] = { bbox.GetRight(), bbox.GetBottom() };
+
+ VIEW_RTREE_BASE::Insert( mmin, mmax, aItem );
+ }
+
+ /**
+ * Function Remove()
+ * Removes an item from the tree. Removal is done by comparing pointers, attepmting to remove a copy
+ * of the item will fail.
+ */
+ void Remove( VIEW_ITEM* aItem )
+ {
+ // const BOX2I& bbox = aItem->ViewBBox();
+
+ // FIXME: use cached bbox or ptr_map to speed up pointer <-> node lookups.
+ const int mmin[2] = { INT_MIN, INT_MIN };
+ const int mmax[2] = { INT_MAX, INT_MAX };
+
+ VIEW_RTREE_BASE::Remove( mmin, mmax, aItem );
+ }
+
+ /**
+ * Function Query()
+ * Executes a function object aVisitor for each item whose bounding box intersects
+ * with aBounds.
+ */
+ template <class Visitor>
+ void Query( const BOX2I& aBounds, Visitor& aVisitor ) // const
+ {
+ const int mmin[2] = { aBounds.GetX(), aBounds.GetY() };
+ const int mmax[2] = { aBounds.GetRight(), aBounds.GetBottom() };
+
+ VIEW_RTREE_BASE::Search( mmin, mmax, aVisitor );
+ }
+
+private:
+};
+} // namespace KIGFX
+
+#endif
diff --git a/include/view/wx_view_controls.h b/include/view/wx_view_controls.h
new file mode 100644
index 0000000..0338e58
--- /dev/null
+++ b/include/view/wx_view_controls.h
@@ -0,0 +1,153 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
+ * Copyright (C) 2013 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file wx_view_controls.h
+ * @brief WX_VIEW_CONTROLS class definition.
+ */
+
+#ifndef __WX_VIEW_CONTROLS_H
+#define __WX_VIEW_CONTROLS_H
+
+#include <wx/wx.h>
+#include <wx/event.h>
+
+#include <view/view_controls.h>
+
+class EDA_DRAW_PANEL_GAL;
+
+namespace KIGFX
+{
+/**
+ * Class WX_VIEW_CONTROLS
+ * is a specific implementation of class VIEW_CONTROLS for wxWidgets library.
+ */
+class WX_VIEW_CONTROLS : public VIEW_CONTROLS, public wxEvtHandler
+{
+public:
+ WX_VIEW_CONTROLS( VIEW* aView, wxScrolledCanvas* aParentPanel );
+ ~WX_VIEW_CONTROLS()
+ {}
+
+ /// Handler functions
+ void onWheel( wxMouseEvent& aEvent );
+ void onMotion( wxMouseEvent& aEvent );
+#ifdef USE_OSX_MAGNIFY_EVENT
+ void onMagnify( wxMouseEvent& aEvent );
+#endif
+ void onButton( wxMouseEvent& aEvent );
+ void onEnter( wxMouseEvent& WXUNUSED( aEvent ) );
+ void onLeave( wxMouseEvent& WXUNUSED( aEvent ) );
+ void onTimer( wxTimerEvent& WXUNUSED( aEvent ) );
+ void onScroll( wxScrollWinEvent& aEvent );
+
+ /**
+ * Function SetGrabMouse()
+ * Enables/disables mouse cursor grabbing (limits the movement field only to the panel area).
+ *
+ * @param aEnabled says whether the option should be enabled or disabled.
+ */
+ void SetGrabMouse( bool aEnabled );
+
+ /**
+ * Function SetAutoPan()
+ * Enables/disables autopanning (panning when mouse cursor reaches the panel border).
+ *
+ * @param aEnabled says whether the option should enabled or disabled.
+ */
+ void SetAutoPan( bool aEnabled )
+ {
+ m_autoPanEnabled = aEnabled;
+
+ if( m_state == AUTO_PANNING )
+ m_state = IDLE;
+ }
+
+ /// @copydoc VIEW_CONTROLS::GetMousePosition()
+ VECTOR2I GetMousePosition() const;
+
+ /// @copydoc VIEW_CONTROLS::GetCursorPosition()
+ VECTOR2D GetCursorPosition() const;
+
+ /// @copydoc VIEW_CONTROLS::CursorWarp()
+ void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
+ bool aWarpView = false ) const;
+
+ /// @copydoc VIEW_CONTROLS::CenterOnCursor()
+ void CenterOnCursor() const;
+
+ /// Adjusts the scrollbars position to match the current viewport.
+ void UpdateScrollbars();
+
+ /// Event that forces mouse move event in the dispatcher (eg. used in autopanning, when mouse
+ /// cursor does not move in screen coordinates, but does in world coordinates)
+ static const wxEventType EVT_REFRESH_MOUSE;
+
+private:
+ /// Possible states for WX_VIEW_CONTROLS
+ enum STATE
+ {
+ IDLE = 1, /// Nothing is happening
+ DRAG_PANNING, /// Panning with mouse button pressed
+ AUTO_PANNING, /// Panning on approaching borders of the frame
+ };
+
+ /**
+ * Function handleAutoPanning()
+ * Computes new viewport settings while in autopanning mode.
+ *
+ * @param aEvent is an event to be processed and decide if autopanning should happen.
+ * @return true if it is currently autopanning (ie. autopanning is active and mouse cursor
+ * is in the area that causes autopanning to happen).
+ */
+ bool handleAutoPanning( const wxMouseEvent& aEvent );
+
+ /// Current state of VIEW_CONTROLS
+ STATE m_state;
+
+ /// Panel that is affected by VIEW_CONTROLS
+ wxScrolledCanvas* m_parentPanel;
+
+ /// Stores information about point where dragging has started
+ VECTOR2D m_dragStartPoint;
+
+ /// Stores information about the center of viewport when dragging has started
+ VECTOR2D m_lookStartPoint;
+
+ /// Current direction of panning (only autopanning mode)
+ VECTOR2D m_panDirection;
+
+ /// Used for determining time intervals between scroll & zoom events
+ wxLongLong m_timeStamp;
+
+ /// Timer repsonsible for handling autopanning
+ wxTimer m_panTimer;
+
+ /// Ratio used for scaling world coordinates to scrollbar position.
+ VECTOR2D m_scrollScale;
+};
+} // namespace KIGFX
+
+#endif
diff --git a/include/wildcards_and_files_ext.h b/include/wildcards_and_files_ext.h
new file mode 100644
index 0000000..63b43fc
--- /dev/null
+++ b/include/wildcards_and_files_ext.h
@@ -0,0 +1,110 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2007-2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2008-2012 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * The common library
+ * @file wildcards_and_files_ext.h
+ */
+
+#ifndef INCLUDE_WILDCARDS_AND_FILES_EXT_H_
+#define INCLUDE_WILDCARDS_AND_FILES_EXT_H_
+
+#include <wx/wx.h>
+
+/**
+ * File extension definitions. Please do not changes these. If a different
+ * file extension is needed, create a new definition in the application.
+ * Please note, just because they are defined as const doesn't guarantee
+ * that they cannot be changed.
+ * Mainly wild cards are most of time translated when displayed
+ */
+
+extern const wxString SchematicSymbolFileExtension;
+extern const wxString SchematicLibraryFileExtension;
+extern const wxString SchematicBackupFileExtension;
+
+extern const wxString VrmlFileExtension;
+extern const wxString ProjectFileExtension;
+extern const wxString SchematicFileExtension;
+extern const wxString NetlistFileExtension;
+extern const wxString GerberFileExtension;
+extern const wxString HtmlFileExtension;
+
+extern const wxString LegacyPcbFileExtension;
+extern const wxString KiCadPcbFileExtension;
+#define PcbFileExtension KiCadPcbFileExtension // symlink choice
+extern const wxString PageLayoutDescrFileExtension;
+
+extern const wxString LegacyFootprintLibPathExtension;
+extern const wxString PdfFileExtension;
+extern const wxString MacrosFileExtension;
+extern const wxString ComponentFileExtension;
+extern const wxString DrillFileExtension;
+extern const wxString SVGFileExtension;
+extern const wxString ReportFileExtension;
+extern const wxString FootprintPlaceFileExtension;
+extern const wxString KiCadFootprintFileExtension;
+extern const wxString KiCadFootprintLibPathExtension;
+extern const wxString GedaPcbFootprintLibFileExtension;
+extern const wxString EagleFootprintLibPathExtension;
+extern const wxString ComponentFileExtensionWildcard;
+extern const wxString PageLayoutDescrFileWildcard;
+extern const wxString KiCadLib3DShapesPathExtension;
+
+/// Proper wxFileDialog wild card definitions.
+extern const wxString SchematicSymbolFileWildcard;
+extern const wxString SchematicLibraryFileWildcard;
+extern const wxString ProjectFileWildcard;
+extern const wxString SchematicFileWildcard;
+extern const wxString BoardFileWildcard;
+extern const wxString NetlistFileWildcard;
+extern const wxString GerberFileWildcard;
+extern const wxString HtmlFileWildcard;
+extern const wxString LegacyPcbFileWildcard;
+extern const wxString PcbFileWildcard;
+extern const wxString EaglePcbFileWildcard;
+extern const wxString PCadPcbFileWildcard;
+extern const wxString PdfFileWildcard;
+extern const wxString PSFileWildcard;
+extern const wxString MacrosFileWildcard;
+extern const wxString AllFilesWildcard;
+extern const wxString ComponentFileWildcard;
+extern const wxString DrillFileWildcard;
+extern const wxString SVGFileWildcard;
+extern const wxString ReportFileWildcard;
+extern const wxString FootprintPlaceFileWildcard;
+extern const wxString Shapes3DFileWildcard;
+extern const wxString IDF3DFileWildcard;
+extern const wxString DocModulesFileName;
+extern const wxString LegacyFootprintLibPathWildcard;
+extern const wxString KiCadFootprintLibFileWildcard;
+extern const wxString KiCadFootprintLibPathWildcard;
+extern const wxString GedaPcbFootprintLibFileWildcard;
+extern const wxString EagleFootprintLibPathWildcard;
+extern const wxString TextWildcard;
+
+
+#endif // INCLUDE_WILDCARDS_AND_FILES_EXT_H_
diff --git a/include/worksheet.h b/include/worksheet.h
new file mode 100644
index 0000000..d4bed64
--- /dev/null
+++ b/include/worksheet.h
@@ -0,0 +1,49 @@
+/***************/
+/* worksheet.h */
+/***************/
+
+// For page and paper size, values are in 1/1000 inch
+
+#ifndef WORKSHEET_H_
+#define WORKSHEET_H_
+
+#include <colors.h> // EDA_COLOR_T definition
+#include <class_page_info.h>
+
+// Forward declarations:
+class EDA_DRAW_PANEL;
+class EDA_RECT;
+class TITLE_BLOCK;
+
+/**
+ * Function DrawPageLayout is a core function to draw the page layout with
+ * the frame and the basic inscriptions.
+ * @param aDC The device context.
+ * @param aClipBox = the clipping rect, or NULL if no clipping.
+ * @param aPageInfo for margins and page size (in mils).
+ * @param aFullSheetName The sheetpath (full sheet name), for basic inscriptions.
+ * @param aFileName The file name, for basic inscriptions.
+ * @param aTitleBlock The sheet title block, for basic inscriptions.
+ * @param aSheetCount The number of sheets (for basic inscriptions).
+ * @param aSheetNumber The sheet number (for basic inscriptions).
+ * @param aPenWidth the pen size The line width for drawing.
+ * @param aScalar the scale factor to convert from mils to internal units.
+ * @param aColor The color for drawing.
+ * @param aAltColor The color for items which need to be "hightlighted".
+ *
+ * Parameters used in aPageInfo
+ * - the size of the page layout.
+ * - the LTmargin The left top margin of the page layout.
+ * - the RBmargin The right bottom margin of the page layout.
+ */
+void DrawPageLayout( wxDC* aDC, EDA_RECT* aClipBox,
+ const PAGE_INFO& aPageInfo,
+ const wxString &aFullSheetName,
+ const wxString& aFileName,
+ TITLE_BLOCK& aTitleBlock,
+ int aSheetCount, int aSheetNumber,
+ int aPenWidth, double aScalar,
+ EDA_COLOR_T aColor, EDA_COLOR_T aAltColor );
+
+
+#endif // WORKSHEET_H_
diff --git a/include/worksheet_shape_builder.h b/include/worksheet_shape_builder.h
new file mode 100644
index 0000000..a54a361
--- /dev/null
+++ b/include/worksheet_shape_builder.h
@@ -0,0 +1,695 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file worksheet_shape_builder.h
+ * @brief classes and function to generate graphics to plt or draw titles blocks
+ * and frame references
+ */
+
+#ifndef WORKSHEET_SHAPE_BUILDER_H
+#define WORKSHEET_SHAPE_BUILDER_H
+
+#include <math/vector2d.h>
+#include <eda_text.h>
+#include <eda_text.h>
+#include <class_bitmap_base.h>
+
+class WORKSHEET_DATAITEM; // Forward declaration
+class TITLE_BLOCK;
+class PAGE_INFO;
+
+#define TB_DEFAULT_TEXTSIZE 1.5 // default worksheet text size in mm
+
+/*
+ * Helper classes to handle basic graphic items used to raw/plot
+ * title blocks and frame references
+ * segments
+ * rect
+ * polygons (for logos)
+ * graphic texts
+ * bitmaps, also for logos, but they cannot be plot by SVG, GERBER
+ * and HPGL plotters (In this case, only the bounding box is plotted)
+ */
+class WS_DRAW_ITEM_BASE // This basic class, not directly usable.
+{
+public:
+ enum WS_DRAW_TYPE {
+ wsg_line, wsg_rect, wsg_poly, wsg_text, wsg_bitmap
+ };
+ int m_Flags; // temporary flgs used in page layout editor
+ // to locate the item;
+
+protected:
+ WS_DRAW_TYPE m_type; // wsg_line, wsg_rect, wsg_poly, wsg_text
+ EDA_COLOR_T m_color;
+ WORKSHEET_DATAITEM* m_parent; // an unique identifier, used as link
+ // to the parent WORKSHEET_DATAITEM item,
+ // in page layout editor
+
+ WS_DRAW_ITEM_BASE( WORKSHEET_DATAITEM* aParent,
+ WS_DRAW_TYPE aType, EDA_COLOR_T aColor )
+ {
+ m_type = aType;
+ m_color = aColor;
+ m_parent = aParent;
+ m_Flags = 0;
+ }
+
+public:
+ virtual ~WS_DRAW_ITEM_BASE() {}
+
+ // Accessors:
+ EDA_COLOR_T GetColor() const { return m_color; }
+ WS_DRAW_TYPE GetType() const { return m_type; };
+
+ WORKSHEET_DATAITEM* GetParent() const { return m_parent; }
+
+ /** The function to draw a WS_DRAW_ITEM
+ */
+ virtual void DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC ) = 0;
+
+ /**
+ * Abstract function: should exist for derived items
+ * return true if the point aPosition is on the item
+ */
+ virtual bool HitTest( const wxPoint& aPosition) const = 0;
+
+ /**
+ * Abstract function: should exist for derived items
+ * return true if the point aPosition is near the starting point of this item,
+ * for items defined by 2 points (segments, rect)
+ * or the position of the item, for items having only one point
+ * (texts or polygons)
+ * the maxi dist is WORKSHEET_DATAITEM::GetMarkerSizeUi()/2
+ */
+ virtual bool HitTestStartPoint( const wxPoint& aPosition) = 0;
+
+ /**
+ * return true if the point aPosition is near the ending point of this item
+ * This is avirtual function which should be overriden for items defien by
+ * 2 points
+ * the maxi dist is WORKSHEET_DATAITEM::GetMarkerSizeUi()/2
+ */
+ virtual bool HitTestEndPoint( const wxPoint& aPosition)
+ {
+ return false;
+ }
+};
+
+// This class draws a thick segment
+class WS_DRAW_ITEM_LINE : public WS_DRAW_ITEM_BASE
+{
+ wxPoint m_start; // start point of line/rect
+ wxPoint m_end; // end point
+ int m_penWidth;
+
+public:
+ WS_DRAW_ITEM_LINE( WORKSHEET_DATAITEM* aParent,
+ wxPoint aStart, wxPoint aEnd,
+ int aPenWidth, EDA_COLOR_T aColor ) :
+ WS_DRAW_ITEM_BASE( aParent, wsg_line, aColor )
+ {
+ m_start = aStart;
+ m_end = aEnd;
+ m_penWidth = aPenWidth;
+ }
+
+ // Accessors:
+ int GetPenWidth() const { return m_penWidth; }
+ const wxPoint& GetStart() const { return m_start; }
+ const wxPoint& GetEnd() const { return m_end; }
+
+ /** The function to draw a WS_DRAW_ITEM_LINE
+ */
+ virtual void DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC );
+
+ /**
+ * Virtual function
+ * return true if the point aPosition is on the line
+ */
+ virtual bool HitTest( const wxPoint& aPosition) const;
+
+ /**
+ * return true if the point aPosition is on the starting point of this item.
+ */
+ virtual bool HitTestStartPoint( const wxPoint& aPosition);
+
+ /**
+ * return true if the point aPosition is on the ending point of this item
+ * This is avirtual function which should be overriden for items defien by
+ * 2 points
+ */
+ virtual bool HitTestEndPoint( const wxPoint& aPosition);
+};
+
+// This class draws a polygon
+class WS_DRAW_ITEM_POLYGON : public WS_DRAW_ITEM_BASE
+{
+ wxPoint m_pos; // position of reference point, from the
+ // WORKSHEET_DATAITEM_POLYPOLYGON parent
+ // (used only in page layout editor to draw anchors)
+ int m_penWidth;
+ bool m_fill;
+
+public:
+ std::vector <wxPoint> m_Corners;
+
+public:
+ WS_DRAW_ITEM_POLYGON( WORKSHEET_DATAITEM* aParent, wxPoint aPos,
+ bool aFill, int aPenWidth, EDA_COLOR_T aColor ) :
+ WS_DRAW_ITEM_BASE( aParent, wsg_poly, aColor )
+ {
+ m_penWidth = aPenWidth;
+ m_fill = aFill;
+ m_pos = aPos;
+ }
+
+ // Accessors:
+ int GetPenWidth() const { return m_penWidth; }
+ bool IsFilled() const { return m_fill; }
+ const wxPoint& GetPosition() const { return m_pos; }
+
+ /** The function to draw a WS_DRAW_ITEM_POLYGON
+ */
+ virtual void DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC );
+
+ /**
+ * Virtual function
+ * return true if the point aPosition is inside one polygon
+ */
+ virtual bool HitTest( const wxPoint& aPosition) const;
+
+ /**
+ * return true if the point aPosition is on the starting point of this item.
+ */
+ virtual bool HitTestStartPoint( const wxPoint& aPosition);
+};
+
+// This class draws a not filled rectangle with thick segment
+class WS_DRAW_ITEM_RECT : public WS_DRAW_ITEM_LINE
+{
+public:
+ WS_DRAW_ITEM_RECT( WORKSHEET_DATAITEM* aParent,
+ wxPoint aStart, wxPoint aEnd,
+ int aPenWidth, EDA_COLOR_T aColor ) :
+ WS_DRAW_ITEM_LINE( aParent, aStart, aEnd, aPenWidth, aColor )
+ {
+ m_type = wsg_rect;
+ }
+
+ /** The function to draw a WS_DRAW_ITEM_RECT
+ */
+ virtual void DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC );
+
+ /**
+ * Virtual function
+ * return true if the point aPosition is on one edge of the rectangle
+ */
+ virtual bool HitTest( const wxPoint& aPosition) const;
+
+ /**
+ * return true if the point aPosition is on the starting point of this item.
+ */
+ virtual bool HitTestStartPoint( const wxPoint& aPosition);
+
+ /**
+ * return true if the point aPosition is on the ending point of this item
+ * This is avirtual function which should be overriden for items defien by
+ * 2 points
+ */
+ virtual bool HitTestEndPoint( const wxPoint& aPosition);
+};
+
+// This class draws a graphic text.
+// it is derived from an EDA_TEXT, so it handle all caracteristics
+// of this graphic text (justification, rotation ... )
+class WS_DRAW_ITEM_TEXT : public WS_DRAW_ITEM_BASE, public EDA_TEXT
+{
+public:
+ WS_DRAW_ITEM_TEXT( WORKSHEET_DATAITEM* aParent,
+ wxString& aText, wxPoint aPos, wxSize aSize,
+ int aPenWidth, EDA_COLOR_T aColor,
+ bool aItalic = false, bool aBold = false );
+
+ /** The function to draw a WS_DRAW_ITEM_TEXT
+ */
+ virtual void DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC );
+
+ // Accessors:
+ int GetPenWidth() { return GetThickness(); }
+
+ /**
+ * Virtual function
+ * return true if the point aPosition is on the text
+ */
+ virtual bool HitTest( const wxPoint& aPosition) const;
+
+ /**
+ * return true if the point aPosition is on the starting point of this item.
+ */
+ virtual bool HitTestStartPoint( const wxPoint& aPosition);
+};
+
+// This class draws a bitmap.
+class WS_DRAW_ITEM_BITMAP : public WS_DRAW_ITEM_BASE
+{
+ wxPoint m_pos; // position of reference point
+
+public:
+ WS_DRAW_ITEM_BITMAP( WORKSHEET_DATAITEM* aParent, wxPoint aPos )
+ :WS_DRAW_ITEM_BASE( aParent, wsg_bitmap, UNSPECIFIED_COLOR )
+ {
+ m_pos = aPos;
+ }
+
+ WS_DRAW_ITEM_BITMAP()
+ :WS_DRAW_ITEM_BASE( NULL, wsg_bitmap, UNSPECIFIED_COLOR )
+ {
+ }
+
+ ~WS_DRAW_ITEM_BITMAP() {}
+
+ /** The function to draw a WS_DRAW_ITEM_BITMAP
+ */
+ virtual void DrawWsItem( EDA_RECT* aClipBox, wxDC* aDC );
+
+ /**
+ * Virtual function
+ * return true if the point aPosition is on bitmap
+ */
+ virtual bool HitTest( const wxPoint& aPosition) const;
+
+ /**
+ * return true if the point aPosition is on the reference point of this item.
+ */
+ virtual bool HitTestStartPoint( const wxPoint& aPosition);
+
+ const wxPoint& GetPosition() { return m_pos; }
+};
+
+/*
+ * this class stores the list of graphic items:
+ * rect, lines, polygons and texts to draw/plot
+ * the title block and frame references, and parameters to
+ * draw/plot them
+ */
+class WS_DRAW_ITEM_LIST
+{
+protected:
+ std::vector <WS_DRAW_ITEM_BASE*> m_graphicList; // Items to draw/plot
+ unsigned m_idx; // for GetFirst, GetNext functions
+ wxPoint m_LTmargin; // The left top margin in mils of the page layout.
+ wxPoint m_RBmargin; // The right bottom margin in mils of the page layout.
+ wxSize m_pageSize; // the page size in mils
+ double m_milsToIu; // the scalar to convert pages units ( mils)
+ // to draw/plot units.
+ int m_penSize; // The default line width for drawings.
+ // used when an item has a pen size = 0
+ int m_sheetNumber; // the value of the sheet number, for basic inscriptions
+ int m_sheetCount; // the value of the number of sheets, in schematic
+ // for basic inscriptions, in schematic
+ const TITLE_BLOCK* m_titleBlock; // for basic inscriptions
+ const wxString* m_paperFormat; // for basic inscriptions
+ wxString m_fileName; // for basic inscriptions
+ const wxString* m_sheetFullName; // for basic inscriptions
+
+
+public:
+ WS_DRAW_ITEM_LIST()
+ {
+ m_idx = 0;
+ m_milsToIu = 1.0;
+ m_penSize = 1;
+ m_sheetNumber = 1;
+ m_sheetCount = 1;
+ m_titleBlock = NULL;
+ m_paperFormat = NULL;
+ m_sheetFullName = NULL;
+ }
+
+ ~WS_DRAW_ITEM_LIST()
+ {
+ for( unsigned ii = 0; ii < m_graphicList.size(); ii++ )
+ delete m_graphicList[ii];
+ }
+
+ /**
+ * Set the filename to draw/plot
+ * @param aFileName = the text to display by the "filename" format
+ */
+ void SetFileName( const wxString & aFileName )
+ {
+ m_fileName = aFileName;
+ }
+
+ /**
+ * Set the sheet name to draw/plot
+ * @param aSheetName = the text to draw/plot by the "sheetname" format
+ */
+ void SetSheetName( const wxString & aSheetName )
+ {
+ m_sheetFullName = &aSheetName;
+ }
+
+ /** Function SetPenSize
+ * Set the default pen size to draw/plot lines and texts
+ * @param aPenSize the thickness of lines
+ */
+ void SetPenSize( int aPenSize )
+ {
+ m_penSize = aPenSize;
+ }
+
+ /** Function SetMilsToIUfactor
+ * Set the scalar to convert pages units ( mils) to draw/plot units
+ * @param aScale the conversion factor
+ */
+ void SetMilsToIUfactor( double aScale )
+ {
+ m_milsToIu = aScale;
+ }
+
+ /** Function SetPageSize
+ * Set the size of the page layout
+ * @param aPageSize size (in mils) of the page layout.
+ */
+ void SetPageSize( const wxSize& aPageSize )
+ {
+ m_pageSize = aPageSize;
+ }
+
+ /**
+ * Function SetSheetNumber
+ * Set the value of the sheet number, for basic inscriptions
+ * @param aSheetNumber the number to display.
+ */
+ void SetSheetNumber( int aSheetNumber )
+ {
+ m_sheetNumber = aSheetNumber;
+ }
+
+ /**
+ * Function SetSheetCount
+ * Set the value of the count of sheets, for basic inscriptions
+ * @param aSheetCount the number of esheets to display.
+ */
+ void SetSheetCount( int aSheetCount )
+ {
+ m_sheetCount = aSheetCount;
+ }
+
+ /** Function SetMargins
+ * Set the left top margin and the right bottom margin
+ * of the page layout
+ * @param aLTmargin The left top margin of the page layout.
+ * @param aRBmargin The right bottom margin of the page layout.
+ */
+ void SetMargins( const wxPoint& aLTmargin, const wxPoint& aRBmargin )
+ {
+ m_LTmargin = aLTmargin;
+ m_RBmargin = aRBmargin;
+ }
+
+ void Append( WS_DRAW_ITEM_BASE* aItem )
+ {
+ m_graphicList.push_back( aItem );
+ }
+
+ WS_DRAW_ITEM_BASE* GetFirst()
+ {
+ m_idx = 0;
+
+ if( m_graphicList.size() )
+ return m_graphicList[0];
+ else
+ return NULL;
+ }
+
+ WS_DRAW_ITEM_BASE* GetNext()
+ {
+ m_idx++;
+
+ if( m_graphicList.size() > m_idx )
+ return m_graphicList[m_idx];
+ else
+ return NULL;
+ }
+
+ /**
+ * Draws the item list created by BuildWorkSheetGraphicList
+ * @param aClipBox = the clipping rect, or NULL if no clipping
+ * @param aDC = the current Device Context
+ */
+ void Draw( EDA_RECT* aClipBox, wxDC* aDC );
+
+ /**
+ * Function BuildWorkSheetGraphicList is a core function for
+ * drawing or plotting the page layout with
+ * the frame and the basic inscriptions.
+ * It populates the list of basic graphic items to draw or plot.
+ * currently lines, rect, polygons and texts
+ * before calling this function, some parameters should be initialized:
+ * by calling:
+ * SetPenSize( aPenWidth );
+ * SetMilsToIUfactor( aScalar );
+ * SetSheetNumber( aSheetNumber );
+ * SetSheetCount( aSheetCount );
+ * SetFileName( aFileName );
+ * SetSheetName( aFullSheetName );
+ *
+ * @param aPageInfo The PAGE_INFO, for page size, margins...
+ * @param aTitleBlock The sheet title block, for basic inscriptions.
+ * @param aColor The color for drawing.
+ * @param aAltColor The color for items which need to be "hightlighted".
+ */
+ void BuildWorkSheetGraphicList( const PAGE_INFO& aPageInfo,
+ const TITLE_BLOCK& aTitleBlock,
+ EDA_COLOR_T aColor, EDA_COLOR_T aAltColor );
+ /**
+ * Function BuildFullText
+ * returns the full text corresponding to the aTextbase,
+ * after replacing format symbols by the corresponding value
+ *
+ * Basic texts in Ki_WorkSheetData struct use format notation
+ * like "Title %T" to identify at run time the full text
+ * to display.
+ * Currently format identifier is % followed by a letter or 2 letters
+ *
+ * %% = replaced by %
+ * %K = Kicad version
+ * %Z = paper format name (A4, USLetter)
+ * %Y = company name
+ * %D = date
+ * %R = revision
+ * %S = sheet number
+ * %N = number of sheets
+ * %Cx = comment (x = 0 to 9 to identify the comment)
+ * %F = filename
+ * %P = sheet path or sheet full name
+ * %T = title
+ * Other fields like Developer, Verifier, Approver could use %Cx
+ * and are seen as comments for format
+ *
+ * @param aTextbase = the text with format symbols
+ * @return the text, after replacing the format symbols by the actual value
+ */
+ wxString BuildFullText( const wxString& aTextbase );
+
+ /**
+ * Locate graphic items in m_graphicList at location aPosition
+ * @param aList = the list of items found
+ * @param aPosition the position (in user units) to locate items
+ */
+ void Locate(std::vector <WS_DRAW_ITEM_BASE*>& aList, const wxPoint& aPosition);
+};
+
+
+/**
+ * WORKSHEET_LAYOUT handles the graphic items list to draw/plot
+ * the title block and other items (page references ...
+ */
+class WORKSHEET_LAYOUT
+{
+ std::vector <WORKSHEET_DATAITEM*> m_list;
+ bool m_allowVoidList; // If false, the default page layout
+ // will be loaded the first time
+ // WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList
+ // is run (useful mainly for page layout editor)
+ double m_leftMargin; // the left page margin in mm
+ double m_rightMargin; // the right page margin in mm
+ double m_topMargin; // the top page margin in mm
+ double m_bottomMargin; // the bottom page margin in mm
+
+public:
+ WORKSHEET_LAYOUT();
+ ~WORKSHEET_LAYOUT() {ClearList(); }
+
+ /**
+ * static function: returns the instance of WORKSHEET_LAYOUT
+ * used in the application
+ */
+ static WORKSHEET_LAYOUT& GetTheInstance();
+
+ /**
+ * static function: Set an alternate instance of WORKSHEET_LAYOUT
+ * mainly used in page setting dialog
+ * @param aLayout = the alternate page layout.
+ * if null, restore the basic page layout
+ */
+ static void SetAltInstance( WORKSHEET_LAYOUT* aLayout = NULL );
+
+ // Accessors:
+ double GetLeftMargin() { return m_leftMargin; }
+ double GetRightMargin() { return m_rightMargin; }
+ double GetTopMargin() { return m_topMargin; }
+ double GetBottomMargin() { return m_bottomMargin; }
+
+ void SetLeftMargin( double aMargin );
+ void SetRightMargin( double aMargin );
+ void SetTopMargin( double aMargin );
+ void SetBottomMargin( double aMargin );
+
+ /**
+ * In Kicad applications, a page layout description is needed
+ * So if the list is empty, a default description is loaded,
+ * the first time a page layout is drawn.
+ * However, in page layout editor, an empty list is acceptable.
+ * AllowVoidList allows or not the empty list
+ */
+ void AllowVoidList( bool Allow ) { m_allowVoidList = Allow; }
+
+ /**
+ * @return true if an empty list is allowed
+ * (mainly allowed for page layout editor).
+ */
+ bool VoidListAllowed() { return m_allowVoidList; }
+
+ /**
+ * erase the list of items
+ */
+ void ClearList();
+
+ /**
+ * Save the description in a file
+ * @param aFullFileName the filename of the file to created
+ */
+ void Save( const wxString& aFullFileName );
+
+ /**
+ * Save the description in a buffer
+ * @param aOutputString = a wxString to store the S expr string
+ */
+ void SaveInString( wxString& aOutputString );
+
+ /**
+ * Add an item to the list of items
+ */
+ void Append( WORKSHEET_DATAITEM* aItem )
+ {
+ m_list.push_back( aItem );
+ }
+
+ /**
+ *Insert an item to the list of items at position aIdx
+ */
+ void Insert( WORKSHEET_DATAITEM* aItem, unsigned aIdx );
+
+ /**
+ *Remove the item to the list of items at position aIdx
+ */
+ bool Remove( unsigned aIdx );
+
+ /**
+ *Remove the item to the list of items at position aIdx
+ */
+ bool Remove( WORKSHEET_DATAITEM* aItem );
+
+ /**
+ * @return the index of aItem, or -1 if does not exist
+ */
+ int GetItemIndex( WORKSHEET_DATAITEM* aItem ) const;
+
+ /**
+ * @return the item from its index aIdx, or NULL if does not exist
+ */
+ WORKSHEET_DATAITEM* GetItem( unsigned aIdx ) const;
+
+ /**
+ * @return the item count
+ */
+ unsigned GetCount() const { return m_list.size(); }
+
+ /**
+ * Fills the list with the default layout shape
+ */
+ void SetDefaultLayout();
+
+ /**
+ * Populates the list with a custom layout, or
+ * the default layout, if no custom layout available
+ * @param aFullFileName = the custom page layout description file.
+ * if empty, loads the file defined by KICAD_WKSFILE
+ * and if its is not defined, uses the default internal description
+ * @param Append = if true: do not delete old layout, and load only
+ aFullFileName.
+ */
+ void SetPageLayout( const wxString& aFullFileName = wxEmptyString,
+ bool Append = false );
+
+ /**
+ * Populates the list from a S expr description stored in a string
+ * @param aPageLayout = the S expr string
+ * @param Append Do not delete old layout if true and append \a aPageLayout
+ * the existing one.
+ */
+ void SetPageLayout( const char* aPageLayout, bool Append = false );
+
+ /**
+ * @return a short filename from a full filename:
+ * if the path is the current project path, or if the path
+ * is the same as kicad.pro (in template), returns the shortname
+ * else do nothing and returns a full filename
+ * @param aFullFileName = the full filename, which can be a relative
+ * @param aProjectPath = the curr project absolute path (can be empty)
+ */
+ static const wxString MakeShortFileName( const wxString& aFullFileName,
+ const wxString& aProjectPath );
+
+ /**
+ * Static function
+ * @return a full filename from a short filename.
+ * @param aShortFileName = the short filename, which can be a relative
+ * @param aProjectPath = the curr project absolute path (can be empty)
+ * or absolute path, and can include env variable reference ( ${envvar} expression )
+ * if the short filename path is relative, it is expected relative to the project path
+ * or (if aProjectPath is empty or if the file does not exist)
+ * relative to kicad.pro (in template)
+ * If aShortFileName is absolute return aShortFileName
+ */
+ static const wxString MakeFullFileName( const wxString& aShortFileName,
+ const wxString& aProjectPath );
+};
+
+#endif // WORKSHEET_SHAPE_BUILDER_H
diff --git a/include/worksheet_viewitem.h b/include/worksheet_viewitem.h
new file mode 100644
index 0000000..149f804
--- /dev/null
+++ b/include/worksheet_viewitem.h
@@ -0,0 +1,171 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file worksheet_viewitem.h
+ * @brief Class that handles properties and drawing of worksheet layout.
+ */
+
+#ifndef WORKSHEET_VIEWITEM_H
+#define WORKSHEET_VIEWITEM_H
+
+#include <base_struct.h>
+
+class BOARD;
+class PAGE_INFO;
+class TITLE_BLOCK;
+class WS_DRAW_ITEM_LINE;
+class WS_DRAW_ITEM_RECT;
+class WS_DRAW_ITEM_POLYGON;
+class WS_DRAW_ITEM_TEXT;
+
+namespace KIGFX
+{
+class GAL;
+
+class WORKSHEET_VIEWITEM : public EDA_ITEM
+{
+public:
+ WORKSHEET_VIEWITEM( const PAGE_INFO* aPageInfo, const TITLE_BLOCK* aTitleBlock );
+
+ /**
+ * Function SetFileName()
+ * Sets the file name displayed in the title block.
+ *
+ * @param aFileName is the new file name.
+ */
+ void SetFileName( const std::string& aFileName )
+ {
+ m_fileName = aFileName;
+ ViewUpdate( GEOMETRY );
+ }
+
+ /**
+ * Function SetSheetName()
+ * Sets the sheet name displayed in the title block.
+ *
+ * @param aSheetName is the new sheet name.
+ */
+ void SetSheetName( const std::string& aSheetName )
+ {
+ m_sheetName = aSheetName;
+ ViewUpdate( GEOMETRY );
+ }
+
+ /**
+ * Function SetPageInfo()
+ * Changes the PAGE_INFO object used to draw the worksheet.
+ *
+ * @param aPageInfo is the new PAGE_INFO object.
+ */
+ void SetPageInfo( const PAGE_INFO* aPageInfo );
+
+ /**
+ * Function SetTitleBlock()
+ * Changes the TITLE_BLOCK object used to draw the worksheet.
+ *
+ * @param aTitleBlock is the new TITLE_BLOCK object.
+ */
+ void SetTitleBlock( const TITLE_BLOCK* aTitleBlock );
+
+ /**
+ * Function SetSheetNumber()
+ * Changes the sheet number displayed in the title block.
+ *
+ * @param aSheetNumber is the new sheet number.
+ */
+ void SetSheetNumber( int aSheetNumber )
+ {
+ m_sheetNumber = aSheetNumber;
+ ViewUpdate( GEOMETRY );
+
+ }
+
+ /**
+ * Function SetSheetCount()
+ * Changes the sheets count number displayed in the title block.
+ *
+ * @param aSheetCount is the new sheets count number.
+ */
+ void SetSheetCount( int aSheetCount )
+ {
+ m_sheetCount = aSheetCount;
+ ViewUpdate( GEOMETRY );
+ }
+
+ /// @copydoc VIEW_ITEM::ViewBBox()
+ const BOX2I ViewBBox() const;
+
+ /// @copydoc VIEW_ITEM::ViewDraw()
+ void ViewDraw( int aLayer, GAL* aGal ) const;
+
+ /// @copydoc VIEW_ITEM::ViewGetLayers()
+ void ViewGetLayers( int aLayers[], int& aCount ) const;
+
+#if defined(DEBUG)
+ /// @copydoc EDA_ITEM::Show()
+ void Show( int x, std::ostream& st ) const
+ {
+ }
+#endif
+
+ /** Get class name
+ * @return string "WORKSHEET_VIEWITEM"
+ */
+ virtual wxString GetClass() const
+ {
+ return wxT( "WORKSHEET_VIEWITEM" );
+ }
+
+protected:
+ /// File name displayed in the title block
+ std::string m_fileName;
+
+ /// Sheet name displayed in the title block
+ std::string m_sheetName;
+
+ /// Title block that contains properties of the title block displayed in the worksheet.
+ const TITLE_BLOCK* m_titleBlock;
+
+ /// Worksheet page information.
+ const PAGE_INFO* m_pageInfo;
+
+ /// Sheet number displayed in the title block.
+ int m_sheetNumber;
+
+ /// Sheets count number displayed in the title block.
+ int m_sheetCount;
+
+ // Functions for drawing items that makes a worksheet
+ void draw( const WS_DRAW_ITEM_LINE* aItem, GAL* aGal ) const;
+ void draw( const WS_DRAW_ITEM_RECT* aItem, GAL* aGal ) const;
+ void draw( const WS_DRAW_ITEM_POLYGON* aItem, GAL* aGal ) const;
+ void draw( const WS_DRAW_ITEM_TEXT* aItem, GAL* aGal ) const;
+
+ /// Draws a border that determines the page size.
+ void drawBorder( GAL* aGal ) const;
+};
+}
+
+#endif /* WORKSHEET_VIEWITEM_H */
diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h
new file mode 100644
index 0000000..d860755
--- /dev/null
+++ b/include/wxBasePcbFrame.h
@@ -0,0 +1,703 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file wxBasePcbFrame.h
+ * @brief Classes used in Pcbnew, CvPcb and GerbView.
+ */
+
+#ifndef WX_BASE_PCB_FRAME_H_
+#define WX_BASE_PCB_FRAME_H_
+
+
+#include <vector>
+#include <boost/interprocess/exceptions.hpp>
+
+#include <draw_frame.h>
+#include <base_struct.h>
+#include <eda_text.h> // EDA_DRAW_MODE_T
+#include <richio.h>
+#include <class_pcb_screen.h>
+#include <pcbstruct.h>
+#include <class_draw_panel_gal.h>
+
+
+/* Forward declarations of classes. */
+class BOARD;
+class BOARD_CONNECTED_ITEM;
+class MODULE;
+class TRACK;
+class D_PAD;
+class TEXTE_MODULE;
+class EDA_3D_FRAME;
+class GENERAL_COLLECTOR;
+class GENERAL_COLLECTORS_GUIDE;
+class BOARD_DESIGN_SETTINGS;
+class ZONE_SETTINGS;
+class PCB_PLOT_PARAMS;
+class FP_LIB_TABLE;
+class FPID;
+class TOOL_MANAGER;
+class TOOL_DISPATCHER;
+
+/**
+ * class PCB_BASE_FRAME
+ * basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
+ */
+class PCB_BASE_FRAME : public EDA_DRAW_FRAME
+{
+public:
+ DISPLAY_OPTIONS m_DisplayOptions;
+ EDA_UNITS_T m_UserGridUnit;
+ wxRealPoint m_UserGridSize;
+
+ int m_FastGrid1; // 1st fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox)
+ int m_FastGrid2; // 2nd fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox)
+
+ EDA_3D_FRAME* m_Draw3DFrame;
+
+
+protected:
+ BOARD* m_Pcb;
+ GENERAL_COLLECTOR* m_Collector;
+
+ /// Auxiliary tool bar typically shown below the main tool bar at the top of the
+ /// main window.
+ wxAuiToolBar* m_auxiliaryToolBar;
+
+ void updateGridSelectBox();
+ void updateZoomSelectBox();
+ virtual void unitsChangeRefresh();
+
+ /**
+ * Function loadFootprint
+ * attempts to load \a aFootprintId from the footprint library table.
+ *
+ * @param aFootprintId is the #FPID of component footprint to load.
+ * @return the #MODULE if found or NULL if \a aFootprintId not found in any of the
+ * libraries in the table returned from #Prj().PcbFootprintLibs().
+ * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
+ * occurs while reading footprint library files.
+ */
+ MODULE* loadFootprint( const FPID& aFootprintId )
+ throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+
+public:
+ PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
+ const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString& aFrameName );
+
+ ~PCB_BASE_FRAME();
+
+ /**
+ * Function LoadFootprint
+ * attempts to load \a aFootprintId from the footprint library table.
+ *
+ * @param aFootprintId is the #FPID of component footprint to load.
+ * @return the #MODULE if found or NULL if \a aFootprintId not found in any of the
+ * libraries in table returned from #Prj().PcbFootprintLibs().
+ */
+ MODULE* LoadFootprint( const FPID& aFootprintId );
+
+ /**
+ * Function GetBoardBoundingBox
+ * calculates the bounding box containing all board items (or board edge segments).
+ * @param aBoardEdgesOnly is true if we are interested in board edge segments only.
+ * @return EDA_RECT - the board's bounding box
+ */
+ EDA_RECT GetBoardBoundingBox( bool aBoardEdgesOnly = false ) const;
+
+ virtual void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload
+ const PAGE_INFO& GetPageSettings() const; // overload
+ const wxSize GetPageSizeIU() const; // overload
+
+ const wxPoint& GetAuxOrigin() const; // overload
+ void SetAuxOrigin( const wxPoint& aPoint ); // overload
+
+ const wxPoint& GetGridOrigin() const; // overload
+ void SetGridOrigin( const wxPoint& aPoint ); // overload
+
+ const TITLE_BLOCK& GetTitleBlock() const; // overload
+ void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ); // overload
+
+ /**
+ * Function GetDesignSettings
+ * returns the BOARD_DESIGN_SETTINGS for the BOARD owned by this frame.
+ * Overloaded in FOOTPRINT_EDIT_FRAME.
+ */
+ virtual BOARD_DESIGN_SETTINGS& GetDesignSettings() const;
+ virtual void SetDesignSettings( const BOARD_DESIGN_SETTINGS& aSettings );
+
+ /**
+ * Function GetDisplayOptions
+ * returns the display options current in use
+ * Display options are relative to the way tracks, vias, outlines
+ * and other things are shown (for instance solid or sketch mode)
+ * Must be overloaded in frames which have display options
+ * (board editor and footprint editor)
+ */
+ void* GetDisplayOptions() { return &m_DisplayOptions; }
+
+ const ZONE_SETTINGS& GetZoneSettings() const;
+ void SetZoneSettings( const ZONE_SETTINGS& aSettings );
+
+ /**
+ * Function GetPlotSettings
+ * returns the PCB_PLOT_PARAMS for the BOARD owned by this frame.
+ * Overloaded in FOOTPRINT_EDIT_FRAME.
+ */
+ virtual const PCB_PLOT_PARAMS& GetPlotSettings() const;
+ virtual void SetPlotSettings( const PCB_PLOT_PARAMS& aSettings );
+
+ /**
+ * Function SetBoard
+ * sets the m_Pcb member in such as way as to ensure deleting any previous
+ * BOARD.
+ * @param aBoard The BOARD to put into the frame.
+ */
+ virtual void SetBoard( BOARD* aBoard );
+
+ BOARD* GetBoard() const
+ {
+ wxASSERT( m_Pcb );
+ return m_Pcb;
+ }
+
+ // General
+ virtual void OnCloseWindow( wxCloseEvent& Event ) = 0;
+ virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg ) { }
+ virtual void ReCreateHToolbar() = 0;
+ virtual void ReCreateVToolbar() = 0;
+ virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos ) = 0;
+ virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) = 0;
+ virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) = 0;
+ virtual void ReCreateMenuBar();
+ virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg );
+ virtual void UpdateStatusBar();
+
+ PCB_SCREEN* GetScreen() const { return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); }
+
+ /**
+ * Function BestZoom
+ * @return the "best" zoom to show the entire board or footprint on the screen.
+ */
+ virtual double BestZoom();
+
+ /**
+ * Function GetZoomLevelIndicator
+ * returns a human readable value which can be displayed as zoom
+ * level indicator in dialogs.
+ * Virtual from the base class
+ */
+ const wxString GetZoomLevelIndicator() const;
+
+ virtual void Show3D_Frame( wxCommandEvent& event );
+
+ // Read/write functions:
+ EDA_ITEM* ReadDrawSegmentDescr( LINE_READER* aReader );
+ int ReadListeSegmentDescr( LINE_READER* aReader,
+ TRACK* PtSegm,
+ int StructType,
+ int NumSegm );
+
+ int ReadSetup( LINE_READER* aReader );
+ int ReadGeneralDescrPcb( LINE_READER* aReader );
+
+
+ /**
+ * Function PcbGeneralLocateAndDisplay
+ * searches for an item under the mouse cursor.
+ * Items are searched first on the current working layer.
+ * If nothing found, an item will be searched without layer restriction.
+ * If more than one item is found meeting the current working layer
+ * criterion, then a popup menu is shown which allows the user to pick
+ * which item he/she is interested in. Once an item is chosen, then it
+ * is make the "current item" and the status window is updated to reflect
+ * this.
+ *
+ * @param aHotKeyCode The hotkey which relates to the caller and determines
+ * the type of search to be performed. If zero, then
+ * the mouse tools will be tested instead.
+ */
+ BOARD_ITEM* PcbGeneralLocateAndDisplay( int aHotKeyCode = 0 );
+
+ void ProcessItemSelection( wxCommandEvent& event );
+
+ /**
+ * Function SetCurItem
+ * sets the currently selected item and displays it in the MsgPanel.
+ * If the given item is NULL then the MsgPanel is erased and there is no
+ * currently selected item. This function is intended to make the process
+ * of "selecting" an item more formal, and to indivisibly tie the operation
+ * of selecting an item to displaying it using BOARD_ITEM::Display_Infos().
+ * @param aItem The BOARD_ITEM to make the selected item or NULL if none.
+ * @param aDisplayInfo = true to display item info, false if not (default = true)
+ */
+ void SetCurItem( BOARD_ITEM* aItem, bool aDisplayInfo = true );
+
+ BOARD_ITEM* GetCurItem();
+
+ ///> @copydoc EDA_DRAW_FRAME::UpdateMsgPanel()
+ void UpdateMsgPanel();
+
+ /**
+ * Function GetCollectorsGuide
+ * @return GENERAL_COLLECTORS_GUIDE - that considers the global
+ *configuration options.
+ */
+ GENERAL_COLLECTORS_GUIDE GetCollectorsGuide();
+
+ /**
+ * Function CursorGoto
+ * positions the cursor at a given coordinate and reframes the drawing if the
+ * requested point is out of view.
+ * @param aPos is the point to go to.
+ * @param aWarp is true if the pointer should be warped to the new position.
+ */
+ void CursorGoto( const wxPoint& aPos, bool aWarp = true );
+
+ /**
+ * Function SelectLibrary
+ * puts up a dialog and allows the user to pick a library, for unspecified use.
+ *
+ * @param aNicknameExisting is the current choice to highlight
+ *
+ * @return wxString - the library or wxEmptyString on abort.
+ */
+ wxString SelectLibrary( const wxString& aNicknameExisting );
+
+ MODULE* GetModuleByName();
+
+ /**
+ * Function OnModify
+ * Virtual
+ * Must be called after a change
+ * in order to set the "modify" flag of the current screen
+ * and update the date in frame reference
+ * do not forget to call this basic OnModify function to update info
+ * in derived OnModify functions
+ */
+ virtual void OnModify();
+
+ // Modules (footprints)
+
+ /**
+ * Function CreateNewModule
+ * Creates a new module or footprint, at position 0,0
+ * The new module contains only 2 texts: a reference and a value:
+ * Reference = REF**
+ * Value = "VAL**" or Footprint name in lib
+ * Note: they are dummy texts, which will be replaced by the actual texts
+ * when the fooprint is placed on a board and a netlist is read
+ * @param aModuleName = name of the new footprint in library
+ * @return a reference to the new module
+ */
+ MODULE* CreateNewModule( const wxString& aModuleName );
+
+ void Edit_Module( MODULE* module, wxDC* DC );
+ void Rotate_Module( wxDC* DC, MODULE* module, double angle, bool incremental );
+
+ /**
+ * Function PlaceModule
+ * places \a aModule at the current cursor position and updates module coordinates
+ * with the new position.
+ *
+ * @param aModule A MODULE object point of the module to be placed.
+ * @param aDC A wxDC object point of the device context to draw \a aModule on
+ * or NULL if no display screen need updated.
+ * @param aDoNotRecreateRatsnest A bool true redraws the module rats nest.
+ */
+ void PlaceModule( MODULE* aModule, wxDC* aDC, bool aDoNotRecreateRatsnest = false );
+
+ // module texts
+ void RotateTextModule( TEXTE_MODULE* Text, wxDC* DC );
+ void DeleteTextModule( TEXTE_MODULE* Text );
+ void PlaceTexteModule( TEXTE_MODULE* Text, wxDC* DC );
+ void StartMoveTexteModule( TEXTE_MODULE* Text, wxDC* DC );
+
+ /**
+ * Function ResetTextSize
+ * resets given field text size and width to current settings in
+ * Preferences->Dimensions->Texts and Drawings.
+ * @param aItem is the item to be reset, either TEXTE_PCB or TEXTE_MODULE.
+ * @param aDC is the drawing context.
+ */
+ void ResetTextSize( BOARD_ITEM* aItem, wxDC* aDC );
+
+ /**
+ * Function ResetModuleTextSizes
+ * resets text size and width of all module text fields of given field
+ * type to current settings in Preferences->Dimensions->Texts and Drawings.
+ * @param aFilter is a filter: footprint names must match this filter.
+ * an empty filter, or "*" do not filter anything.
+ * @param aRef = true to modify the reference of footprints.
+ * @param aValue = true to modify the value of footprints.
+ * @param aOthers = true to modify the other fields of footprints.
+ */
+ void ResetModuleTextSizes( const wxString & aFilter, bool aRef,
+ bool aValue, bool aOthers );
+
+ void InstallPadOptionsFrame( D_PAD* pad );
+ void InstallTextModOptionsFrame( TEXTE_MODULE* TextMod, wxDC* DC );
+
+ void AddPad( MODULE* Module, bool draw );
+
+ /**
+ * Function DeletePad
+ * Delete the pad aPad.
+ * Refresh the modified screen area
+ * Refresh modified parameters of the parent module (bounding box, last date)
+ * @param aPad = the pad to delete
+ * @param aQuery = true to prompt for confirmation, false to delete silently
+ */
+ void DeletePad( D_PAD* aPad, bool aQuery = true );
+
+ /**
+ * Function StartMovePad
+ * Initialize a drag or move pad command
+ * @param aPad = the pad to move or drag
+ * @param aDC = the current device context
+ * @param aDragConnectedTracks = true to drag connected tracks,
+ * false to just move the pad
+ */
+ void StartMovePad( D_PAD* aPad, wxDC* aDC, bool aDragConnectedTracks );
+
+ void RotatePad( D_PAD* Pad, wxDC* DC );
+ void PlacePad( D_PAD* Pad, wxDC* DC );
+ void Export_Pad_Settings( D_PAD* aPad );
+ void Import_Pad_Settings( D_PAD* aPad, bool aDraw );
+
+ /**
+ * Function GlobalChange_PadSettings
+ * Function to change pad caracteristics for the given footprint
+ * or all footprints which look like the given footprint
+ * @param aPad is the pattern. The given footprint is the parent of this pad
+ * @param aSameFootprints: if true, make changes on all identical footprints
+ * @param aPadShapeFilter: if true, make changes only on pads having the same shape as aPad
+ * @param aPadOrientFilter: if true, make changes only on pads having the same orientation as aPad
+ * @param aPadLayerFilter: if true, make changes only on pads having the same layers as aPad
+ * @param aRedraw: if true: redraws the footprint
+ * @param aSaveForUndo: if true: create an entry in the Undo/Redo list
+ * (usually: true in Schematic editor, false in Module editor)
+ */
+ void GlobalChange_PadSettings( D_PAD* aPad,
+ bool aSameFootprints,
+ bool aPadShapeFilter,
+ bool aPadOrientFilter,
+ bool aPadLayerFilter,
+ bool aRedraw,
+ bool aSaveForUndo );
+
+ /**
+ * Function SelectFootprint
+ * displays a list of modules found in all libraries or a given library
+ *
+ * @param aWindow = the current window ( parent window )
+ *
+ * @param aLibraryName = library to list (if aLibraryFullFilename is empty, then list all modules).
+ * This is a nickname for the FP_LIB_TABLE build.
+ *
+ * @param aMask = Display filter (wildcart)( Mask = wxEmptyString if not used )
+ *
+ * @param aKeyWord = keyword list, to display a filtered list of module
+ * having one (or more) of these keywords in their
+ * keyword list ( aKeyWord = wxEmptyString if not used )
+ *
+ * @param aTable is the #FP_LIB_TABLE to search.
+ *
+ * @return wxEmptyString if abort or fails, or the selected module name if Ok
+ */
+ wxString SelectFootprint( EDA_DRAW_FRAME* aWindow,
+ const wxString& aLibraryName,
+ const wxString& aMask,
+ const wxString& aKeyWord,
+ FP_LIB_TABLE* aTable );
+
+ /**
+ * Function LoadModuleFromLibrary
+ * opens a dialog to select a footprint, and loads it into current board.
+ *
+ * @param aLibrary = the library name to use, or empty string to search
+ * in all loaded libraries
+ * @param aTable is the #FP_LIB_TABLE containing the avaiable footprint libraries.
+ * @param aUseFootprintViewer = true to show the option
+ * allowing the footprint selection by the footprint viewer
+ * @param aDC (can be NULL ) = the current Device Context, to draw the new footprint
+ */
+ MODULE* LoadModuleFromLibrary( const wxString& aLibrary,
+ FP_LIB_TABLE* aTable,
+ bool aUseFootprintViewer = true,
+ wxDC* aDC = NULL );
+
+ /**
+ * Function SelectFootprintFromLibBrowser
+ * launches the footprint viewer to select the name of a footprint to load.
+ *
+ * @return the selected footprint name or an empty string if no selection was made.
+ */
+ wxString SelectFootprintFromLibBrowser();
+
+ // ratsnest functions
+ /**
+ * Function Compile_Ratsnest
+ * Create the entire board ratsnest.
+ * Must be called after a board change (changes for
+ * pads, footprints or a read netlist ).
+ * @param aDC = the current device context (can be NULL)
+ * @param aDisplayStatus : if true, display the computation results
+ */
+ void Compile_Ratsnest( wxDC* aDC, bool aDisplayStatus );
+
+ /**
+ * Function build_ratsnest_module
+ * Build a ratsnest relative to one footprint. This is a simplified computation
+ * used only in move footprint. It is not optimal, but it is fast and sufficient
+ * to help a footprint placement
+ * It shows the connections from a pad to the nearest connected pad
+ * @param aModule = module to consider.
+ */
+ void build_ratsnest_module( MODULE* aModule );
+
+ /**
+ * Function TraceModuleRatsNest
+ * display the rats nest of a moving footprint, computed by
+ * build_ratsnest_module()
+ */
+ void TraceModuleRatsNest( wxDC* aDC );
+
+ /**
+ * Function Build_Board_Ratsnest.
+ * Calculates the full ratsnest depending only on pads.
+ */
+ void Build_Board_Ratsnest();
+
+ /**
+ * function Displays the general ratsnest
+ * Only ratsnest with the status bit CH_VISIBLE is set are displayed
+ * @param aDC = the current device context (can be NULL)
+ * @param aNetcode if > 0, Display only the ratsnest relative to the
+ * corresponding net_code
+ */
+ void DrawGeneralRatsnest( wxDC* aDC, int aNetcode = 0 );
+
+ /**
+ * Function TraceAirWiresToTargets
+ * This functions shows airwires to nearest connecting points (pads)
+ * from the current new track end during track creation
+ * Uses data prepared by BuildAirWiresTargetsList()
+ * @param aDC = the current device context
+ */
+ void TraceAirWiresToTargets( wxDC* aDC );
+
+ /**
+ * Function BuildAirWiresTargetsList
+ * Build a list of candidates that can be a coonection point
+ * when a track is started.
+ * This functions prepares data to show airwires to nearest connecting points (pads)
+ * from the current new track to candidates during track creation
+ * @param aItemRef = the item connected to the starting point of the new track (track or pad)
+ * @param aPosition = the position of the new track end (usually the mouse cursor on grid)
+ * @param aInit = true to build full candidate list or false to update data
+ * When aInit = false, aItemRef is not used (can be NULL)
+ */
+ void BuildAirWiresTargetsList( BOARD_CONNECTED_ITEM* aItemRef,
+ const wxPoint& aPosition, bool aInit );
+
+ /**
+ * Function TestForActiveLinksInRatsnest
+ * Explores the full rats nest list (which must exist) to determine
+ * the ACTIVE links in the full rats nest list
+ * When tracks exist between pads, a link can connect 2 pads already connected by a track
+ * and the link is said inactive.
+ * When a link connects 2 pads not already connected by a track, the link is said active.
+ * @param aNetCode = net code to test. If 0, test all nets
+ */
+ void TestForActiveLinksInRatsnest( int aNetCode );
+
+ /**
+ * Function TestConnections
+ * tests the connections relative to all nets.
+ * <p>
+ * This function update the status of the ratsnest ( flag CH_ACTIF = 0 if a connection
+ * is found, = 1 else) track segments are assumed to be sorted by net codes.
+ * This is the case because when a new track is added, it is inserted in the linked list
+ * according to its net code. and when nets are changed (when a new netlist is read)
+ * tracks are sorted before using this function.
+ * </p>
+ */
+ void TestConnections();
+
+ /**
+ * Function TestNetConnection
+ * tests the connections relative to \a aNetCode. Track segments are assumed to be
+ * sorted by net codes.
+ * @param aDC Current Device Context
+ * @param aNetCode The net code to test
+ */
+ void TestNetConnection( wxDC* aDC, int aNetCode );
+
+ /**
+ * Function RecalculateAllTracksNetcode
+ * search connections between tracks and pads and propagate pad net codes to the track
+ * segments.
+ */
+ void RecalculateAllTracksNetcode();
+
+ /* Functions relative to Undo/redo commands:
+ */
+
+ /**
+ * Function SaveCopyInUndoList (virtual pure)
+ * Creates a new entry in undo list of commands.
+ * add a picker to handle aItemToCopy
+ * @param aItemToCopy = the board item modified by the command to undo
+ * @param aTypeCommand = command type (see enum UNDO_REDO_T)
+ * @param aTransformPoint = the reference point of the transformation, for
+ * commands like move
+ */
+ virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy,
+ UNDO_REDO_T aTypeCommand,
+ const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
+
+ /**
+ * Function SaveCopyInUndoList (virtual pure, overloaded).
+ * Creates a new entry in undo list of commands.
+ * add a list of pickers to handle a list of items
+ * @param aItemsList = the list of items modified by the command to undo
+ * @param aTypeCommand = command type (see enum UNDO_REDO_T)
+ * @param aTransformPoint = the reference point of the transformation,
+ * for commands like move
+ */
+ virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
+ UNDO_REDO_T aTypeCommand,
+ const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
+
+
+ /** Install the dialog box for layer selection
+ * @param aDefaultLayer = Preselection (NB_PCB_LAYERS for "(Deselect)" layer)
+ * @param aNotAllowedLayersMask = a layer mask for not allowed layers
+ * (= 0 to show all layers in use)
+ * @param aDlgPosition = position of dialog ( defualt = centered)
+ * @return the selected layer id
+ */
+ LAYER_ID SelectLayer( LAYER_ID aDefaultLayer,
+ LSET aNotAllowedLayersMask = LSET(),
+ wxPoint aDlgPosition = wxDefaultPosition );
+
+ /* Display a list of two copper layers to choose a pair of copper layers
+ * the layer pair is used to fast switch between copper layers when placing vias
+ */
+ void SelectCopperLayerPair();
+
+ virtual void SwitchLayer( wxDC* DC, LAYER_ID layer );
+
+ /**
+ * Function SetActiveLayer
+ * will change the currently active layer to \a aLayer.
+ */
+ virtual void SetActiveLayer( LAYER_ID aLayer )
+ {
+ GetScreen()->m_Active_Layer = aLayer;
+ }
+
+ /**
+ * Function GetActiveLayer
+ * returns the active layer
+ */
+ virtual LAYER_ID GetActiveLayer() const
+ {
+ return GetScreen()->m_Active_Layer;
+ }
+
+ void LoadSettings( wxConfigBase* aCfg ); // override virtual
+ void SaveSettings( wxConfigBase* aCfg ); // override virtual
+
+ bool InvokeDialogGrid();
+
+ void OnTogglePolarCoords( wxCommandEvent& aEvent );
+ void OnTogglePadDrawMode( wxCommandEvent& aEvent );
+
+ // User interface update event handlers.
+ void OnUpdateCoordType( wxUpdateUIEvent& aEvent );
+ void OnUpdatePadDrawMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectGrid( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectZoom( wxUpdateUIEvent& aEvent );
+
+ /**
+ * Function SetFastGrid1()
+ *
+ * Switches grid settings to the 1st "fast" setting predefined by user.
+ */
+ void SetFastGrid1();
+
+ /**
+ * Function SetFastGrid2()
+ *
+ * Switches grid settings to the 1st "fast" setting predefined by user.
+ */
+ void SetFastGrid2();
+
+ /**
+ * Virtual function SetNextGrid()
+ * changes the grid size settings to the next one available.
+ */
+ void SetNextGrid();
+
+ /**
+ * Virtual function SetPrevGrid()
+ * changes the grid size settings to the previous one available.
+ */
+ void SetPrevGrid();
+
+ void ClearSelection();
+
+ ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas
+ virtual void UseGalCanvas( bool aEnable );
+
+ /**
+ * Function SwitchCanvas
+ * switches currently used canvas (default / Cairo / OpenGL).
+ */
+ void SwitchCanvas( wxCommandEvent& aEvent );
+
+ /**
+ * Function LoadCanvasTypeSetting()
+ * Returns the canvas type stored in the application settings.
+ */
+ EDA_DRAW_PANEL_GAL::GAL_TYPE LoadCanvasTypeSetting() const;
+
+ /**
+ * Function SaveCanvasTypeSetting()
+ * Stores the canvas type in the application settings.
+ */
+ bool SaveCanvasTypeSetting( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType );
+
+ ///> Key in KifaceSettings to store the canvas type.
+ static const wxChar CANVAS_TYPE_KEY[];
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif // WX_BASE_PCB_FRAME_H_
diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h
new file mode 100644
index 0000000..f47625c
--- /dev/null
+++ b/include/wxPcbStruct.h
@@ -0,0 +1,1740 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Jean-Pierre Charras, jp.charras@wanadoo.fr
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file wxPcbStruct.h
+ */
+
+#ifndef WXPCB_STRUCT_H_
+#define WXPCB_STRUCT_H_
+
+
+#include <pcb_base_edit_frame.h>
+#include <config_params.h>
+#include <class_macros_record.h>
+#include <class_undoredo_container.h>
+#include <zones.h>
+
+
+/* Forward declarations of classes. */
+class PCB_SCREEN;
+class BOARD;
+class TEXTE_PCB;
+class MODULE;
+class TRACK;
+class SEGZONE;
+class VIA;
+class D_PAD;
+class TEXTE_MODULE;
+class PCB_TARGET;
+class DIMENSION;
+class EDGE_MODULE;
+class DRC;
+class ZONE_CONTAINER;
+class DRAWSEGMENT;
+class GENERAL_COLLECTOR;
+class GENERAL_COLLECTORS_GUIDE;
+class PCB_LAYER_WIDGET;
+class MARKER_PCB;
+class BOARD_ITEM;
+class PCB_LAYER_BOX_SELECTOR;
+class NETLIST;
+class REPORTER;
+struct PARSE_ERROR;
+struct IO_ERROR;
+class FP_LIB_TABLE;
+
+namespace PCB { struct IFACE; } // KIFACE_I is in pcbnew.cpp
+
+/**
+ * Class PCB_EDIT_FRAME
+ * is the main frame for Pcbnew.
+ *
+ * See also class PCB_BASE_FRAME(): Basic class for Pcbnew and GerbView.
+ */
+#define PCB_EDIT_FRAME_NAME wxT( "PcbFrame" )
+
+
+class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME
+{
+ friend struct PCB::IFACE;
+ friend class PCB_LAYER_WIDGET;
+
+ void updateTraceWidthSelectBox();
+ void updateViaSizeSelectBox();
+
+ int m_RecordingMacros;
+ MACROS_RECORDED m_Macros[10];
+
+ /// The auxiliary right vertical tool bar used to access the microwave tools.
+ wxAuiToolBar* m_microWaveToolBar;
+
+ /**
+ * Function loadFootprints
+ * loads the footprints for each #COMPONENT in \a aNetlist from the list of libraries.
+ *
+ * @param aNetlist is the netlist of components to load the footprints into.
+ * @param aReporter is the #REPORTER object to report to.
+ * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
+ * occurs while reading footprint library files.
+ */
+ void loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
+ throw( IO_ERROR, PARSE_ERROR );
+
+protected:
+ PCB_LAYER_WIDGET* m_Layers;
+
+ DRC* m_drc; ///< the DRC controller, see drc.cpp
+
+ PARAM_CFG_ARRAY m_configSettings; ///< List of Pcbnew configuration settings.
+
+ wxString m_lastNetListRead; ///< Last net list read with relative path.
+
+ // The Tool Framework initalization
+ void setupTools();
+
+ // we'll use lower case function names for private member functions.
+ void createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* aPopMenu );
+ void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu );
+ void createPopUpMenuForFpTexts( TEXTE_MODULE* aText, wxMenu* aPopMenu );
+ void createPopUpMenuForFpPads( D_PAD* aPad, wxMenu* aPopMenu );
+ void createPopupMenuForTracks( TRACK* aTrack, wxMenu* aPopMenu );
+ void createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu );
+ void createPopUpBlockMenu( wxMenu* menu );
+ void createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu );
+
+ /**
+ * an helper function to enable some menus only active when the display
+ * is switched to GAL mode and which do nothing in legacy mode
+ */
+ void enableGALSpecificMenus();
+
+
+ // Has meaning only if DKICAD_SCRIPTING_WXPYTHON option is on
+ /**
+ * @return the frame name identifier for the python console frame
+ */
+ static const wxChar * pythonConsoleNameId()
+ {
+ return wxT( "PythonConsole" );
+ }
+
+ /**
+ * @return a pointer to the python console frame, or NULL if not exist
+ */
+ static wxWindow * findPythonConsole()
+ {
+ return FindWindowByName( pythonConsoleNameId() );
+ }
+
+ /**
+ * Function syncLayerWidgetLayer
+ * updates the currently layer "selection" within the PCB_LAYER_WIDGET.
+ * The currently selected layer is defined by the return value of GetActiveLayer().
+ * <p>
+ * This function cannot be inline without including layer_widget.h in
+ * here and we do not want to do that.
+ * </p>
+ */
+ void syncLayerWidgetLayer();
+
+ /**
+ * Function syncRenderStates
+ * updates the "Render" checkboxes in the layer widget according
+ * to current toggle values determined by IsElementVisible(), and is helpful
+ * immediately after loading a BOARD which may have state information in it.
+ */
+ void syncRenderStates();
+
+ /**
+ * Function syncLayerVisibilities
+ * updates each "Layer" checkbox in the layer widget according
+ * to each layer's current visibility determined by IsLayerVisible(), and is
+ * helpful immediately after loading a BOARD which may have state information in it.
+ */
+ void syncLayerVisibilities();
+
+ virtual void unitsChangeRefresh();
+
+ /**
+ * Function doAutoSave
+ * performs auto save when the board has been modified and not saved within the
+ * auto save interval.
+ *
+ * @return true if the auto save was successful.
+ */
+ virtual bool doAutoSave();
+
+ /**
+ * Function isautoSaveRequired
+ * returns true if the board has been modified.
+ */
+ virtual bool isAutoSaveRequired() const;
+
+ /**
+ * Function duplicateZone
+ * duplicates the given zone.
+ * @param aDC is the current Device Context.
+ * @param aZone is the zone to duplicate
+ */
+ void duplicateZone( wxDC* aDC, ZONE_CONTAINER* aZone );
+
+ /**
+ * Function moveExact
+ * Move the selected item exactly
+ */
+ void moveExact();
+
+ /**
+ * Function duplicateItems
+ * Duplicate selected item if possible and start a move
+ * @param aIncrement increment the item number if appropriate
+ */
+ void duplicateItems( bool aIncrement ); //override
+
+ // protected so that PCB::IFACE::CreateWindow() is the only factory.
+ PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
+
+public:
+ PCB_LAYER_BOX_SELECTOR* m_SelLayerBox; // a combo box to display and select active layer
+ wxChoice* m_SelTrackWidthBox; // a choice box to display and select current track width
+ wxChoice* m_SelViaSizeBox; // a choice box to display and select current via diameter
+
+ bool m_show_microwave_tools;
+ bool m_show_layer_manager_tools;
+
+ virtual ~PCB_EDIT_FRAME();
+
+ void OnQuit( wxCommandEvent& event );
+
+ /**
+ * Function GetAutoSaveFilePrefix
+ *
+ * @return the string to prepend to a file name for automatic save.
+ */
+ static wxString GetAutoSaveFilePrefix();
+
+ /**
+ * Execute a remote command send by Eeschema via a socket,
+ * port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242)
+ * this is a virtual function called by EDA_DRAW_FRAME::OnSockRequest().
+ * @param cmdline = received command from socket
+ */
+ virtual void ExecuteRemoteCommand( const char* cmdline );
+
+ void KiwayMailIn( KIWAY_EXPRESS& aEvent ); // virtual overload from KIWAY_PLAYER
+
+ /**
+ * Function ToPlotter
+ * Open a dialog frame to create plot and drill files
+ * relative to the current board
+ */
+ void ToPlotter( wxCommandEvent& event );
+
+ /**
+ * Function ToPrinter
+ * Install the print dialog
+ */
+ void ToPrinter( wxCommandEvent& event );
+
+ /**
+ * Function SVG_Print
+ * shows the print SVG file dialog.
+ */
+ void SVG_Print( wxCommandEvent& event );
+
+ // User interface update command event handlers.
+ void OnUpdateSave( wxUpdateUIEvent& aEvent );
+ void OnUpdateLayerPair( wxUpdateUIEvent& aEvent );
+ void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
+ void OnUpdateDrcEnable( wxUpdateUIEvent& aEvent );
+ void OnUpdateShowBoardRatsnest( wxUpdateUIEvent& aEvent );
+ void OnUpdateShowModuleRatsnest( wxUpdateUIEvent& aEvent );
+ void OnUpdateAutoDeleteTrack( wxUpdateUIEvent& aEvent );
+ void OnUpdateViaDrawMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateTraceDrawMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateHighContrastDisplayMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateShowLayerManager( wxUpdateUIEvent& aEvent );
+ void OnUpdateShowMicrowaveToolbar( wxUpdateUIEvent& aEvent );
+ void OnUpdateVerticalToolbar( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent );
+ void OnUpdateZoneDisplayStyle( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectAutoTrackWidth( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectCustomTrackWidth( wxUpdateUIEvent& aEvent );
+ void OnUpdateAutoPlaceModulesMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateAutoPlaceTracksMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateMuWaveToolbar( wxUpdateUIEvent& aEvent );
+ void OnLayerColorChange( wxCommandEvent& aEvent );
+ void OnConfigurePaths( wxCommandEvent& aEvent );
+
+ /**
+ * Function RecordMacros.
+ * records sequence of hotkeys and cursor positions to a macro.
+ * @param aDC = current device context
+ * @param aNumber The current number macros.
+ */
+ void RecordMacros( wxDC* aDC, int aNumber );
+
+ /**
+ * Function CallMacros
+ * play hotkeys and cursor position from a recorded macro.
+ * @param aDC = current device context
+ * @param aPosition The current cursor position in logical (drawing) units.
+ * @param aNumber The current number macros.
+ */
+ void CallMacros( wxDC* aDC, const wxPoint& aPosition, int aNumber );
+
+ void SaveMacros();
+
+ void ReadMacros();
+
+ /**
+ * Function PrintPage , virtual
+ * used to print a page
+ * Print the page pointed by the current screen, set by the calling print function
+ * @param aDC = wxDC given by the calling print function
+ * @param aPrintMaskLayer = a 32 bits mask: bit n = 1 -> layer n is printed
+ * @param aPrintMirrorMode = true to plot mirrored
+ * @param aData = a pointer on an auxiliary data (NULL if not used)
+ */
+ virtual void PrintPage( wxDC* aDC, LSET aPrintMaskLayer, bool aPrintMirrorMode,
+ void* aData = NULL );
+
+ void GetKicadAbout( wxCommandEvent& event );
+
+ /**
+ * Function IsGridVisible() , virtual
+ * @return true if the grid must be shown
+ */
+ virtual bool IsGridVisible() const;
+
+ /**
+ * Function SetGridVisibility() , virtual
+ * It may be overloaded by derived classes
+ * if you want to store/retrieve the grid visibility in configuration.
+ * @param aVisible = true if the grid must be shown
+ */
+ virtual void SetGridVisibility( bool aVisible );
+
+ /**
+ * Function GetGridColor() , virtual
+ * @return the color of the grid
+ */
+ virtual EDA_COLOR_T GetGridColor() const;
+
+ /**
+ * Function SetGridColor() , virtual
+ * @param aColor = the new color of the grid
+ */
+ virtual void SetGridColor( EDA_COLOR_T aColor );
+
+ ///> @copydoc EDA_DRAW_FRAME::SetCursorShape()
+ virtual void SetCursorShape( int aCursorShape );
+
+ // Configurations:
+ void Process_Config( wxCommandEvent& event );
+
+ /**
+ * Function GetProjectFileParameters
+ * returns a project file parameter list for Pcbnew.
+ * <p>
+ * Populate a project file parameter array specific to Pcbnew.
+ * Creating the parameter list at run time has the advantage of being able
+ * to define local variables. The old method of statically building the array
+ * at compile time requiring global variable definitions by design.
+ * </p>
+ * @return PARAM_CFG_ARRAY - it is only good until SetBoard() is called, so
+ * don't keep it around past that event.
+ */
+ PARAM_CFG_ARRAY GetProjectFileParameters();
+
+ /**
+ * Function SaveProjectSettings
+ * saves changes to the project settings to the project (.pro) file.
+ * @param aAskForSave = true to open a dialog before saving the settings
+ */
+ void SaveProjectSettings( bool aAskForSave );
+
+ /**
+ * Load the current project's file configuration settings which are pertinent
+ * to this PCB_EDIT_FRAME instance.
+ *
+ * @return always returns true.
+ */
+ bool LoadProjectSettings();
+
+ /**
+ * Function GetConfigurationSettings
+ * returns the Pcbnew applications settings list.
+ *
+ * This replaces the old statically defined list that had the project
+ * file settings and the application settings mixed together. This
+ * was confusing and caused some settings to get saved and loaded
+ * incorrectly. Currently, only the settings that are needed at start
+ * up by the main window are defined here. There are other locally used
+ * settings that are scattered throughout the Pcbnew source code. If you need
+ * to define a configuration setting that needs to be loaded at run time,
+ * this is the place to define it.
+ *
+ * @return - Reference to the list of applications settings.
+ */
+ PARAM_CFG_ARRAY& GetConfigurationSettings();
+
+ void LoadSettings( wxConfigBase* aCfg ); // override virtual
+
+ void SaveSettings( wxConfigBase* aCfg ); // override virtual
+
+ wxConfigBase* GetSettings() { return config(); };
+
+ /**
+ * Get the last net list read with the net list dialog box.
+ *
+ * @return - Absolute path and file name of the last net list file successfully read.
+ */
+ wxString GetLastNetListRead();
+
+ /**
+ * Set the last net list successfully read by the net list dialog box.
+ *
+ * Note: the file path is converted to a path relative to the project file path. If
+ * the path cannot be made relative, than m_lastNetListRead is set to and empty
+ * string. This could happen when the net list file is on a different drive than
+ * the project file. The advantage of relative paths is that is more likely to
+ * work when opening the same project from both Windows and Linux.
+ *
+ * @param aNetListFile - The last net list file with full path successfully read.
+ */
+ void SetLastNetListRead( const wxString& aNetListFile );
+
+ ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
+ EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+
+ /**
+ * Function OnHotKey.
+ * ** Commands are case insensitive **
+ * Some commands are relatives to the item under the mouse cursor
+ * @param aDC = current device context
+ * @param aHotkeyCode = hotkey code (ascii or wxWidget code for special keys)
+ * @param aPosition The cursor position in logical (drawing) units.
+ * @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor
+ */
+ bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+
+ /**
+ * Function OnHotkeyDeleteItem
+ * Delete the item found under the mouse cursor
+ * Depending on the current active tool::
+ * Tool track
+ * if a track is in progress: Delete the last segment
+ * else delete the entire track
+ * Tool module (footprint):
+ * Delete the module.
+ * @param aDC = current device context
+ * @return true if an item was deleted
+ */
+ bool OnHotkeyDeleteItem( wxDC* aDC );
+
+ /**
+ * Function OnHotkeyPlaceItem
+ * Place the item (footprint, track, text .. ) found under the mouse cursor
+ * An item can be placed only if there is this item currently edited
+ * Only a footprint, a pad or a track can be placed
+ * @param aDC = current device context
+ * @return true if an item was placed
+ */
+ bool OnHotkeyPlaceItem( wxDC* aDC );
+
+ bool OnHotkeyEditItem( int aIdCommand );
+
+ /**
+ * Function OnHotkeyCopyItem
+ * returns the copy event id for copyable items.
+ * @return Event id of a suitable copy event, zero when no copyable item found.
+ */
+ int OnHotkeyCopyItem();
+
+ /**
+ * Function OnHotkeyDuplicateOrArrayItem
+ * Duplicate an item (optionally incrementing if necessary and possible)
+ * or invoke array dialog and create an array
+ * @param aIdCommand = the hotkey command id
+ * @return true if item duplicated or arrayed
+ */
+ bool OnHotkeyDuplicateOrArrayItem( int aIdCommand );
+
+ /**
+ * Function OnHotkeyMoveItem
+ * Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
+ * Only a footprint or a track can be dragged
+ * @param aIdCommand = the hotkey command id
+ * @return true if an item was moved
+ */
+ bool OnHotkeyMoveItem( int aIdCommand );
+
+ /**
+ * Function OnHotkeyRotateItem
+ * Rotate the item (text or footprint) found under the mouse cursor
+ * @note This command can be used with an item currently in edit.
+ * Only some items can be rotated (footprints and texts).
+ * @param aIdCommand = the hotkey command id
+ * @return true if an item was moved
+ */
+ bool OnHotkeyRotateItem( int aIdCommand );
+
+ /**
+ * Function OnHotkeyFlipItem
+ * Flip the item (text or footprint) found under the mouse cursor
+ * @note This command can be used with an item currently in edit.
+ * Only some items can be rotated (footprints and texts).
+ * @param aIdCommand = the hotkey command id
+ * @return true if an item was moved
+ */
+ bool OnHotkeyFlipItem( int aIdCommand );
+
+ /**
+ * Function OnHotkeyBeginRoute
+ * If the current active layer is a copper layer,
+ * and if no item currently edited, start a new track segmenton
+ * the current copper layer.
+ * If a new track is in progress, terminate the current segment and
+ * start a new one.
+ * @param aDC = current device context
+ * @return a reference to the track if a track is created, or NULL
+ */
+ TRACK * OnHotkeyBeginRoute( wxDC* aDC );
+
+ void OnCloseWindow( wxCloseEvent& Event );
+ void Process_Special_Functions( wxCommandEvent& event );
+ void Tracks_and_Vias_Size_Event( wxCommandEvent& event );
+ void OnSelectTool( wxCommandEvent& aEvent );
+
+ /**
+ * Function OnResetModuleTextSizes
+ * resets text size and width of all module text fields of given field
+ * type to current settings in Preferences
+ */
+ void OnResetModuleTextSizes( wxCommandEvent& event );
+
+ void ProcessMuWaveFunctions( wxCommandEvent& event );
+ void MuWaveCommand( wxDC* DC, const wxPoint& MousePos );
+
+ void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+ void ReCreateHToolbar();
+ void ReCreateAuxiliaryToolbar();
+ void ReCreateVToolbar();
+ void ReCreateMicrowaveVToolbar();
+ void ReCreateOptToolbar();
+ void ReCreateMenuBar();
+
+ /**
+ * Re create the layer Box by clearing the old list, and building
+ * le new one, from the new layers names and cole layers
+ * @param aForceResizeToolbar = true to resize the parent toolbar
+ * false if not needed (mainly in parent toolbar creation,
+ * or when the layers names are not modified)
+ */
+ void ReCreateLayerBox( bool aForceResizeToolbar = true );
+
+
+ /**
+ * Function SetCurrentNetClass
+ * Must be called after a netclass selection (or after a netclass parameter change
+ * calls BOARD_DESIGN_SETTINGS::SetCurrentNetClass() and update trace width and via size
+ * combo boxes on main toolbar
+ * Initialize vias and tracks values displayed in comb boxes of the auxiliary toolbar
+ * and some others parameters (netclass name ....)
+ * @param aNetClassName = the new netclass name
+ * @return true if lists of tracks and vias sizes are modified
+ */
+ bool SetCurrentNetClass( const wxString& aNetClassName );
+
+ /**
+ * Function OnModify
+ * must be called after a board change to set the modified flag.
+ * <p>
+ * Reloads the 3D view if required and calls the base PCB_BASE_FRAME::OnModify function
+ * to update auxiliary information.
+ * </p>
+ */
+ virtual void OnModify();
+
+ /**
+ * Function SetActiveLayer
+ * will change the currently active layer to \a aLayer and also
+ * update the PCB_LAYER_WIDGET.
+ */
+ virtual void SetActiveLayer( LAYER_ID aLayer );
+
+ /**
+ * Function IsElementVisible
+ * tests whether a given element category is visible. Keep this as an
+ * inline function.
+ * @param aElement is from the enum by the same name
+ * @return bool - true if the element is visible.
+ * @see enum PCB_VISIBLE
+ */
+ bool IsElementVisible( int aElement ) const;
+
+ /**
+ * Function SetElementVisibility
+ * changes the visibility of an element category
+ * @param aElement is from the enum by the same name
+ * @param aNewState = The new visibility state of the element category
+ * @see enum PCB_VISIBLE
+ */
+ void SetElementVisibility( int aElement, bool aNewState );
+
+ /**
+ * Function SetVisibleAlls
+ * Set the status of all visible element categories and layers to VISIBLE
+ */
+ void SetVisibleAlls();
+
+ /**
+ * Function ReFillLayerWidget
+ * changes out all the layers in m_Layers and may be called upon
+ * loading a new BOARD.
+ */
+ void ReFillLayerWidget();
+
+ /**
+ * Function Show3D_Frame
+ * displays the 3D view of current printed circuit board.
+ */
+ void Show3D_Frame( wxCommandEvent& event );
+
+ ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas()
+ void UseGalCanvas( bool aEnable );
+
+ bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+
+ /**
+ * Function ShowDesignRulesEditor
+ * displays the Design Rules Editor.
+ */
+ void ShowDesignRulesEditor( wxCommandEvent& event );
+
+ /* toolbars update UI functions: */
+
+ void PrepareLayerIndicator();
+
+ /* mouse functions events: */
+ void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+ void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+
+ /**
+ * Function OnRightClick
+ * populates a popup menu with the choices appropriate for the current context.
+ * The caller will add the ZOOM menu choices afterward.
+ * @param aMousePos The current mouse position
+ * @param aPopMenu The menu to add to.
+ */
+ bool OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
+
+ void OnSelectOptionToolbar( wxCommandEvent& event );
+ void ToolOnRightClick( wxCommandEvent& event );
+
+ /**
+ * Function SaveCopyInUndoList.
+ * Creates a new entry in undo list of commands.
+ * add a picker to handle aItemToCopy
+ * @param aItemToCopy = the board item modified by the command to undo
+ * @param aTypeCommand = command type (see enum UNDO_REDO_T)
+ * @param aTransformPoint = the reference point of the transformation, for
+ * commands like move
+ */
+ virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy,
+ UNDO_REDO_T aTypeCommand,
+ const wxPoint& aTransformPoint = wxPoint( 0, 0 ) );
+
+ /**
+ * Function SaveCopyInUndoList (overloaded).
+ * Creates a new entry in undo list of commands.
+ * add a list of pickers to handle a list of items
+ * @param aItemsList = the list of items modified by the command to undo
+ * @param aTypeCommand = command type (see enum UNDO_REDO_T)
+ * @param aTransformPoint = the reference point of the transformation, for
+ * commands like move
+ */
+ virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
+ UNDO_REDO_T aTypeCommand,
+ const wxPoint& aTransformPoint = wxPoint( 0, 0 ) );
+
+ /**
+ * Function PutDataInPreviousState
+ * Used in undo or redo command.
+ * Put data pointed by List in the previous state, i.e. the state memorized by List
+ * @param aList = a PICKED_ITEMS_LIST pointer to the list of items to undo/redo
+ * @param aRedoCommand = a bool: true for redo, false for undo
+ * @param aRebuildRatsnet = a bool: true to rebuild ratsnest (normal use), false
+ * to just retrieve last state (used in abort commands that do not need to
+ * rebuild ratsnest)
+ */
+ void PutDataInPreviousState( PICKED_ITEMS_LIST* aList,
+ bool aRedoCommand,
+ bool aRebuildRatsnet = true );
+
+ /**
+ * Function RestoreCopyFromRedoList
+ * Redo the last edition:
+ * - Save the current board in Undo list
+ * - Get an old version of the board from Redo list
+ * @return none
+ */
+ void RestoreCopyFromRedoList( wxCommandEvent& aEvent );
+
+ /**
+ * Function RestoreCopyFromUndoList
+ * Undo the last edition:
+ * - Save the current board in Redo list
+ * - Get an old version of the board from Undo list
+ * @return none
+ */
+ void RestoreCopyFromUndoList( wxCommandEvent& aEvent );
+
+ /* Block operations: */
+
+ /**
+ * Function BlockCommand
+ * Returns the block command internat code (BLOCK_MOVE, BLOCK_COPY...)
+ * corresponding to the keys pressed (ALT, SHIFT, SHIFT ALT ..) when
+ * block command is started by dragging the mouse.
+ * @param aKey = the key modifiers (Alt, Shift ...)
+ * @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
+ */
+ virtual int BlockCommand( int aKey );
+
+ /**
+ * Function HandleBlockPlace()
+ * Called after HandleBlockEnd, when a block command needs to be
+ * executed after the block is moved to its new place
+ * (bloc move, drag, copy .. )
+ * Parameters must be initialized in GetScreen()->m_BlockLocate
+ */
+ virtual void HandleBlockPlace( wxDC* DC );
+
+ /**
+ * Function HandleBlockEnd()
+ * Handle the "end" of a block command,
+ * i.e. is called at the end of the definition of the area of a block.
+ * depending on the current block command, this command is executed
+ * or parameters are initialized to prepare a call to HandleBlockPlace
+ * in GetScreen()->m_BlockLocate
+ * @return false if no item selected, or command finished,
+ * true if some items found and HandleBlockPlace must be called later
+ */
+ virtual bool HandleBlockEnd( wxDC* DC );
+
+ /**
+ * Function Block_SelectItems
+ * Uses GetScreen()->m_BlockLocate
+ * select items within the selected block.
+ * selected items are put in the pick list
+ */
+ void Block_SelectItems();
+
+ /**
+ * Function Block_Delete
+ * deletes all items within the selected block.
+ */
+ void Block_Delete();
+
+ /**
+ * Function Block_Rotate
+ * Rotate all items within the selected block.
+ * The rotation center is the center of the block
+ */
+ void Block_Rotate();
+
+ /**
+ * Function Block_Flip
+ * Flip items within the selected block.
+ * The flip center is the center of the block
+ */
+ void Block_Flip();
+
+ /**
+ * Function Block_Move
+ * move all items within the selected block.
+ * New location is determined by the current offset from the selected
+ * block's original location.
+ */
+ void Block_Move();
+
+ /**
+ * Function Block_Mirror_X
+ * mirrors all items within the currently selected block in the X axis.
+ */
+ void Block_Mirror_X();
+
+ /**
+ * Function Block_Duplicate
+ * Duplicate all items within the selected block.
+ * New location is determined by the current offset from the selected
+ * block's original location.
+ */
+ void Block_Duplicate( bool aIncrement );
+
+ void Process_Settings( wxCommandEvent& event );
+ void OnConfigurePcbOptions( wxCommandEvent& aEvent );
+ void InstallDisplayOptionsDialog( wxCommandEvent& aEvent );
+ void InstallPcbGlobalDeleteFrame( const wxPoint& pos );
+
+ /**
+ * Function GenFootprintsPositionFile
+ * Calls DoGenFootprintsPositionFile to create a footprint position file
+ * See DoGenFootprintsPositionFile for options and file format
+ */
+ void GenFootprintsPositionFile( wxCommandEvent& event );
+
+ /**
+ * Function DoGenFootprintsPositionFile
+ * Creates an ascii footprint position file
+ * @param aFullFileName = the full file name of the file to create
+ * @param aUnitsMM = false to use inches, true to use mm in coordinates
+ * @param aForceSmdItems = true to force all footprints with smd pads in list
+ * = false to put only footprints with option "INSERT" in list
+ * @param aSide = 0 to list footprints on BACK side,
+ * 1 to list footprints on FRONT side
+ * 2 to list footprints on both sides
+ * @return the number of footprints found on aSide side,
+ * or -1 if the file could not be created
+ */
+ int DoGenFootprintsPositionFile( const wxString& aFullFileName, bool aUnitsMM,
+ bool aForceSmdItems, int aSide );
+
+ /**
+ * Function GenFootprintsReport
+ * Calls DoGenFootprintsReport to create a footprint reprot file
+ * See DoGenFootprintsReport for file format
+ */
+ void GenFootprintsReport( wxCommandEvent& event );
+
+ /**
+ * Function DoGenFootprintsReport
+ * Creates an ascii footprint report file giving some infos on footprints
+ * and board outlines
+ * @param aFullFilename = the full file name of the file to create
+ * @param aUnitsMM = false to use inches, true to use mm in coordinates
+ * @return true if OK, false if error
+ */
+ bool DoGenFootprintsReport( const wxString& aFullFilename, bool aUnitsMM );
+
+ void InstallDrillFrame( wxCommandEvent& event );
+ void GenD356File( wxCommandEvent& event );
+ void ToPostProcess( wxCommandEvent& event );
+
+ void OnFileHistory( wxCommandEvent& event );
+
+ /**
+ * Function Files_io
+ * @param event is the command event handler.
+ * do nothing else than call Files_io_from_id with the
+ * wxCommandEvent id
+ */
+ void Files_io( wxCommandEvent& event );
+
+ /**
+ * Function Files_io_from_id
+ * Read and write board files
+ * @param aId is an event ID ciming from file command events:
+ * ID_LOAD_FILE
+ * ID_MENU_READ_BOARD_BACKUP_FILE
+ * ID_MENU_RECOVER_BOARD_AUTOSAVE
+ * ID_APPEND_FILE
+ * ID_NEW_BOARD
+ * ID_SAVE_BOARD
+ * ID_COPY_BOARD_AS
+ * ID_SAVE_BOARD_AS
+ * Files_io_from_id prepare parameters and calls the specialized function
+ */
+ void Files_io_from_id( int aId );
+
+ /**
+ * Function OpenProjectFiles (was LoadOnePcbFile)
+ * loads a KiCad board (.kicad_pcb) from \a aFileName.
+ *
+ * @param aFileSet - hold the BOARD file to load, a vector of one element.
+ *
+ * @param aCtl - KICTL_ bits, one to indicate that an append of the board file
+ * aFileName to the currently loaded file is desired.
+ * @see #KIWAY_PLAYER for bit defines.
+ *
+ * @return bool - false if file load fails, otherwise true.
+ bool LoadOnePcbFile( const wxString& aFileName, bool aAppend = false,
+ bool aForceFileDialog = false );
+ */
+ bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 );
+
+ /**
+ * Function AppendBoardFile
+ * appends a board file onto the current one, creating God knows what.
+ * the main purpose is only to allow panelizing boards.
+ */
+ bool AppendBoardFile( const wxString& aFullFileName, int aCtl );
+
+ /**
+ * Function SavePcbFile
+ * writes the board data structures to \a a aFileName
+ * Creates backup when requested and update flags (modified and saved flgs)
+ *
+ * @param aFileName The file name to write or wxEmptyString to prompt user for
+ * file name.
+ * @param aCreateBackupFile Creates a back of \a aFileName if true. Helper
+ * definitions #CREATE_BACKUP_FILE and #NO_BACKUP_FILE
+ * are defined for improved code readability.
+ * @return True if file was saved successfully.
+ */
+ bool SavePcbFile( const wxString& aFileName, bool aCreateBackupFile = CREATE_BACKUP_FILE );
+
+ /**
+ * Function SavePcbCopy
+ * writes the board data structures to \a a aFileName
+ * but unlike SavePcbFile, does not make anything else
+ * (no backup, borad fliename change, no flag changes ...)
+ * Used under a project mgr to save under a new name the current board
+ *
+ * When not under a project mgr, the full SavePcbFile is used.
+ * @param aFileName The file name to write.
+ * @return True if file was saved successfully.
+ */
+ bool SavePcbCopy( const wxString& aFileName );
+
+ // BOARD handling
+
+ /**
+ * Function Clear_Pcb
+ * delete all and reinitialize the current board
+ * @param aQuery = true to prompt user for confirmation, false to initialize silently
+ */
+ bool Clear_Pcb( bool aQuery );
+
+ ///> @copydoc PCB_BASE_FRAME::SetBoard()
+ void SetBoard( BOARD* aBoard );
+
+ ///> @copydoc PCB_BASE_FRAME::SetPageSettings()
+ void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload
+
+ // Drc control
+
+ /* function GetDrcController
+ * @return the DRC controller
+ */
+ DRC* GetDrcController() { return m_drc; }
+
+ /**
+ * Function RecreateBOMFileFromBoard
+ * Recreates a .cmp file from the current loaded board
+ * this is the same as created by CvPcb.
+ * can be used if this file is lost
+ */
+ void RecreateCmpFileFromBoard( wxCommandEvent& aEvent );
+
+ /**
+ * Function ArchiveModulesOnBoard
+ * Save modules in a library:
+ * @param aStoreInNewLib:
+ * true : save modules in a existing lib. Existing footprints will be kept
+ * or updated.
+ * This lib should be in fp lib table, and is type is .pretty
+ * false: save modules in a new lib. It it is an existing lib,
+ * previous footprints will be removed
+ */
+ void ArchiveModulesOnBoard( bool aStoreInNewLib );
+
+ /**
+ * Function RecreateBOMFileFromBoard
+ * Creates a BOM file from the current loaded board
+ */
+ void RecreateBOMFileFromBoard( wxCommandEvent& aEvent );
+
+ /**
+ * Function ExportToGenCAD
+ * creates a file in GenCAD 1.4 format from the current board.
+ */
+ void ExportToGenCAD( wxCommandEvent& event );
+
+ /**
+ * Function OnExportVRML
+ * will export the current BOARD to a VRML file.
+ */
+ void OnExportVRML( wxCommandEvent& event );
+
+ /**
+ * Function ExportVRML_File
+ * Creates the file(s) exporting current BOARD to a VRML file.
+ *
+ * @note When copying 3D shapes files, the new filename is build from the full path
+ * name, changing the separators by underscore. This is needed because files
+ * with the same shortname can exist in different directories
+ * @note ExportVRML_File generates coordinates in board units (BIU) inside the file.
+ * @todo Use mm inside the file. A general scale transform is applied to the whole
+ * file (1.0 to have the actual WRML unit im mm, 0.001 to have the actual WRML
+ * unit in meters.
+ * @note For 3D models built by a 3D modeler, the unit is 0,1 inches. A specific scale
+ * is applied to 3D models to convert them to internal units.
+ *
+ * @param aFullFileName = the full filename of the file to create
+ * @param aMMtoWRMLunit = the VRML scaling factor:
+ * 1.0 to export in mm. 0.001 for meters
+ * @param aExport3DFiles = true to copy 3D shapes in the subir a3D_Subdir
+ * @param aUseRelativePaths set to true to use relative paths instead of absolute paths
+ * in the board VRML file URLs.
+ * @param aUsePlainPCB set to true to export a board with no copper or silkskreen;
+ * this is useful for generating a VRML file which can be
+ * converted to a STEP model.
+ * @param a3D_Subdir = sub directory where 3D shapes files are copied. This is only used
+ * when aExport3DFiles == true
+ * @param aXRef = X value of PCB (0,0) reference point
+ * @param aYRef = Y value of PCB (0,0) reference point
+ * @return true if Ok.
+ */
+ bool ExportVRML_File( const wxString & aFullFileName, double aMMtoWRMLunit,
+ bool aExport3DFiles, bool aUseRelativePaths,
+ bool aUsePlainPCB, const wxString & a3D_Subdir,
+ double aXRef, double aYRef );
+
+ /**
+ * Function ExportToIDF3
+ * will export the current BOARD to a IDFv3 board and lib files.
+ */
+ void ExportToIDF3( wxCommandEvent& event );
+
+ /**
+ * Function ExporttoSPECCTRA
+ * Ask for a filename and call ExportSpecctraFile to export the current BOARD
+ * to a specctra dsn file.
+ */
+ void ExportToSpecctra( wxCommandEvent& event );
+
+ /**
+ * Function ExportSpecctraFile
+ * will export the current BOARD to a specctra dsn file.
+ * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
+ * specification.
+ * @return true if OK
+ */
+ bool ExportSpecctraFile( const wxString& aFullFilename );
+
+ /**
+ * Function ImportSpecctraSession
+ * will import a specctra *.ses file and use it to relocate MODULEs and
+ * to replace all vias and tracks in an existing and loaded BOARD.
+ * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
+ * specification.
+ */
+ void ImportSpecctraSession( wxCommandEvent& event );
+
+ /**
+ * Function ImportSpecctraDesign
+ * will import a specctra *.dsn file and use it to replace an entire BOARD.
+ * The new board will not have any graphics, only components, tracks and
+ * vias.
+ * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
+ * specification.
+ */
+ void ImportSpecctraDesign( wxCommandEvent& event );
+
+ /**
+ * Function Access_to_External_Tool
+ * Run an external tool (like freeroute )
+ */
+ void Access_to_External_Tool( wxCommandEvent& event );
+
+ /**
+ * Function ListAndSelectModuleName
+ * builds and shows a list of existing modules on board that the user can select.
+ * @return a pointer to the selected module or NULL.
+ */
+ MODULE* ListAndSelectModuleName();
+
+ /**
+ * Function ListNetsAndSelect
+ * called by a command event
+ * displays the sorted list of nets in a dialog frame
+ * If a net is selected, it is highlighted
+ */
+ void ListNetsAndSelect( wxCommandEvent& event );
+
+ void Swap_Layers( wxCommandEvent& event );
+
+ // Handling texts on the board
+ void Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
+ void FlipTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC );
+ TEXTE_PCB* CreateTextePcb( wxDC* aDC, TEXTE_PCB* aText = NULL );
+ void Delete_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
+ void StartMoveTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC, bool aErase = true );
+ void Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
+ void InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC );
+
+ // Graphic Segments type DRAWSEGMENT
+ void Start_Move_DrawItem( DRAWSEGMENT* drawitem, wxDC* DC );
+ void Place_DrawItem( DRAWSEGMENT* drawitem, wxDC* DC );
+ void InstallGraphicItemPropertiesDialog( DRAWSEGMENT* aItem, wxDC* aDC );
+
+ // Footprint edition (see also PCB_BASE_FRAME)
+ void InstallModuleOptionsFrame( MODULE* Module, wxDC* DC );
+
+ /**
+ * Function StartMoveModule
+ * Initialize a drag or move pad command
+ * @param aModule = the module to move or drag
+ * @param aDC = the current device context
+ * @param aDragConnectedTracks = true to drag connected tracks,
+ * false to just move the module
+ */
+ void StartMoveModule( MODULE* aModule, wxDC* aDC, bool aDragConnectedTracks );
+
+ /**
+ * Function DlgGlobalChange_PadSettings
+ * Function to change pad caracteristics for the given footprint
+ * or all footprints which look like the given footprint
+ * Options are set by the opened dialog.
+ * @param aPad is the pattern. The given footprint is the parent of this pad
+ * @param aRedraw: if true: redraws the footprint
+ */
+ void DlgGlobalChange_PadSettings( D_PAD* aPad, bool aRedraw );
+
+ /**
+ * Function Delete Module
+ * Remove a footprint from m_Modules linked list and put it in undelete buffer
+ * The ratsnest and pad list are recalculated
+ * @param aModule = footprint to delete
+ * @param aDC = currentDevice Context. if NULL: do not redraw new ratsnest
+ */
+ bool Delete_Module( MODULE* aModule, wxDC* aDC );
+
+ /**
+ * Function Change_Side_Module
+ * Flip a footprint (switch layer from component or component to copper)
+ * The mirroring is made from X axis
+ * if a footprint is not on copper or component layer it is not flipped
+ * (it could be on an adhesive layer, not supported at this time)
+ * @param Module the footprint to flip
+ * @param DC Current Device Context. if NULL, no redraw
+ */
+ void Change_Side_Module( MODULE* Module, wxDC* DC );
+
+ int InstallExchangeModuleFrame( MODULE* ExchangeModuleModule );
+
+ /**
+ * Function Exchange_Module
+ * Replaces OldModule by NewModule, using OldModule settings:
+ * position, orientation, pad netnames ...)
+ * OldModule is deleted or put in undo list.
+ * @param aOldModule = footprint to replace
+ * @param aNewModule = footprint to put
+ * @param aUndoPickList = the undo list used to save OldModule. If null,
+ * OldModule is deleted
+ */
+ void Exchange_Module( MODULE* aOldModule, MODULE* aNewModule,
+ PICKED_ITEMS_LIST* aUndoPickList );
+
+ // loading modules: see PCB_BASE_FRAME
+
+ // Board handling
+ void RemoveStruct( BOARD_ITEM* Item, wxDC* DC );
+
+ /**
+ * Function OnEditItemRequest
+ * Install the corresponding dialog editor for the given item
+ * @param aDC = the current device context
+ * @param aItem = a pointer to the BOARD_ITEM to edit
+ */
+ void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem );
+
+ /**
+ * Locate track or pad and highlight the corresponding net.
+ * @return The Netcode, or -1 if no net located.
+ */
+ int SelectHighLight( wxDC* DC );
+
+ /**
+ * Function HighLight.
+ * highlights the net at the current cursor position.
+ */
+ void HighLight( wxDC* DC );
+
+ // Track and via edition:
+ void Via_Edit_Control( wxCommandEvent& event );
+
+ /**
+ * Function IsMicroViaAcceptable
+ * return true if a microvia can be placed on the board.
+ * <p>
+ * A microvia is a small via restricted to 2 near neighbor layers
+ * because its is hole is made by laser which can penetrate only one layer
+ * It is mainly used to connect BGA to the first inner layer
+ * And it is allowed from an external layer to the first inner layer
+ * </p>
+ */
+ bool IsMicroViaAcceptable( void );
+
+ /**
+ * Function Other_Layer_Route
+ * operates in one of two ways. If argument track is NULL, then swap the
+ * active layer between m_Route_Layer_TOP and m_Route_Layer_BOTTOM. If a
+ * track is in progress (track is not NULL), and if DRC allows it, place
+ * a via on the end of the current track, and then swap the current active
+ * layer and start a new segment on the new layer.
+ * @param track A TRACK* to append the via to or NULL.
+ * @param DC A device context to draw on.
+ * @return bool - true if the operation was successful, else false such as
+ * the case where DRC would not allow a via.
+ */
+ bool Other_Layer_Route( TRACK* track, wxDC* DC );
+ void HighlightUnconnectedPads( wxDC* DC );
+
+ /**
+ * Function Delete_Segment
+ * removes a track segment.
+ * If a new track is in progress: delete the current new segment.
+ * Otherwise, delete segment under the mouse cursor.
+ */
+ TRACK* Delete_Segment( wxDC* DC, TRACK* Track );
+
+ void Delete_Track( wxDC* DC, TRACK* Track );
+ void Delete_net( wxDC* DC, TRACK* Track );
+
+ /**
+ * Function Remove_One_Track
+ * removes 1 track/
+ * The leading segment is removed and all adjacent segments
+ * until a pad or a junction point of more than 2 segments is found
+ */
+ void Remove_One_Track( wxDC* DC, TRACK* pt_segm );
+
+ /**
+ * Function Reset_All_Tracks_And_Vias_To_Netclass_Values
+ * Reset all tracks width and/or vias diameters and drill
+ * to their default Netclass value
+ * @param aTrack : bool true to modify tracks
+ * @param aVia : bool true to modify vias
+ */
+ bool Reset_All_Tracks_And_Vias_To_Netclass_Values( bool aTrack, bool aVia );
+
+ /**
+ * Function Change_Net_Tracks_And_Vias_Sizes
+ * Reset all tracks width and vias diameters and drill
+ * to their default Netclass value or current values
+ * @param aNetcode : the netcode of the net to edit
+ * @param aUseNetclassValue : bool. True to use netclass values, false to
+ * use current values
+ */
+ bool Change_Net_Tracks_And_Vias_Sizes( int aNetcode, bool aUseNetclassValue );
+
+ /**
+ * Function Edit_Track_Width
+ * Modify a full track width (using DRC control).
+ * a full track is the set of track segments between 2 ends: pads or a
+ * point that has more than 2 segments ends connected
+ * @param aDC = the curred device context (can be NULL)
+ * @param aTrackSegment = a segment or via on the track to change
+ */
+ void Edit_Track_Width( wxDC* aDC, TRACK* aTrackSegment );
+
+ /**
+ * Function Edit_TrackSegm_Width
+ * Modify one track segment width or one via diameter (using DRC control).
+ * @param aDC = the current device context (can be NULL)
+ * @param aTrackItem = the track segment or via to modify
+ */
+ void Edit_TrackSegm_Width( wxDC* aDC, TRACK* aTrackItem );
+
+ /**
+ * Function Begin_Route
+ * Starts a new track and/or establish of a new track point.
+ *
+ * For a new track:
+ * - Search the netname of the new track from the starting point
+ * if it is on a pad or an existing track
+ * - Highlight all this net
+ * If a track is in progress:
+ * - Call DRC
+ * - If DRC is OK: finish the track segment and starts a new one.
+ * @param aTrack = the current track segment, or NULL to start a new track
+ * @param aDC = the current device context
+ * @return a pointer to the new track segment or null if not created (DRC error)
+ */
+ TRACK* Begin_Route( TRACK* aTrack, wxDC* aDC );
+
+ /**
+ * Function End_Route
+ * Terminates a track currently being created
+ * @param aTrack = the current track segment in progress
+ * @param aDC = the current device context
+ * @return true if the track was created, false if not (due to a DRC error)
+ */
+ bool End_Route( TRACK* aTrack, wxDC* aDC );
+
+ void Attribut_Segment( TRACK* track, wxDC* DC, bool Flag_On );
+ void Attribut_Track( TRACK* track, wxDC* DC, bool Flag_On );
+ void Attribut_net( wxDC* DC, int net_code, bool Flag_On );
+
+ /**
+ * Function StartMoveOneNodeOrSegment
+ * initializes the parameters to move one via or/and a terminal point of a track segment
+ * The terminal point of other connected segments (if any) are moved too.
+ */
+ void StartMoveOneNodeOrSegment( TRACK* aTrack, wxDC* aDC, int aCommand );
+
+ bool PlaceDraggedOrMovedTrackSegment( TRACK* Track, wxDC* DC );
+
+ /**
+ * @todo This function is broken, because it merge segments having different
+ * widths or without any connectivity test.
+ * 2 collinear segments can be merged only if no other segment or via is
+ * connected to the common point and if they have the same width. See
+ * cleanup.cpp for merge functions and consider MarkTrace() to locate segments
+ * that can be merged
+ */
+ bool MergeCollinearTracks( TRACK* track, wxDC* DC, int end );
+
+ void Start_DragTrackSegmentAndKeepSlope( TRACK* track, wxDC* DC );
+ void SwitchLayer( wxDC* DC, LAYER_ID layer );
+
+ /**
+ * Function Add45DegreeSegment
+ * adds a track segment between 2 tracks segments if these 2 segments
+ * make a 90 deg angle, in order to have 45 deg track segments
+ * Its only works on horizontal or vertical segments.
+ *
+ * @param aDC The wxDC device context to draw on.
+ * @return A bool value true if ok or false if not.
+ */
+ bool Add45DegreeSegment( wxDC* aDC );
+
+ /**
+ * Function EraseRedundantTrack
+ * Called after creating a track
+ * Remove (if exists) the old track that have the same starting and the
+ * same ending point as the new created track
+ * (this is the redunding track)
+ * @param aDC = the current device context (can be NULL)
+ * @param aNewTrack = the new created track (a pointer to a segment of the
+ * track list)
+ * @param aNewTrackSegmentsCount = number of segments in this new track
+ * @param aItemsListPicker = the list picker to use for an undo command
+ * (can be NULL)
+ */
+ int EraseRedundantTrack( wxDC* aDC,
+ TRACK* aNewTrack,
+ int aNewTrackSegmentsCount,
+ PICKED_ITEMS_LIST* aItemsListPicker );
+
+ /**
+ * Function SetTrackSegmentWidth
+ * Modify one track segment width or one via diameter (using DRC control).
+ * Basic routine used by other routines when editing tracks or vias
+ * @param aTrackItem = the track segment or via to modify
+ * @param aItemsListPicker = the list picker to use for an undo command
+ * (can be NULL)
+ * @param aUseNetclassValue = true to use NetClass value, false to use
+ * current designSettings value
+ * @return true if done, false if no not change (because DRC error)
+ */
+ bool SetTrackSegmentWidth( TRACK* aTrackItem,
+ PICKED_ITEMS_LIST* aItemsListPicker,
+ bool aUseNetclassValue );
+
+
+ // zone handling
+
+ /**
+ * Function Delete_OldZone_Fill (obsolete)
+ * Used for compatibility with old boards
+ * Remove the zone filling which include the segment aZone, or the zone
+ * which have the given time stamp.
+ * For old boards, a zone is a group of SEGZONE segments which have the same TimeStamp
+ * @param aZone = zone segment within the zone to delete. Can be NULL
+ * @param aTimestamp = Timestamp for the zone to delete, used if aZone ==
+ * NULL
+ */
+ void Delete_OldZone_Fill( SEGZONE* aZone, time_t aTimestamp = 0 );
+
+ /**
+ * Function Delete_LastCreatedCorner
+ * Used only while creating a new zone outline
+ * Remove and delete the current outline segment in progress
+ * @return 0 if no corner in list, or corner number
+ */
+ int Delete_LastCreatedCorner( wxDC* DC );
+
+ /**
+ * Function Begin_Zone
+ * either initializes the first segment of a new zone, or adds an
+ * intermediate segment.
+ * A new zone can be:
+ * created from scratch: the user will be prompted to define parameters (layer, clearence ...)
+ * created from a similar zone (s_CurrentZone is used): parameters are copied from
+ * s_CurrentZone
+ * created as a cutout (an hole) inside s_CurrentZone
+ */
+ int Begin_Zone( wxDC* DC );
+
+ /**
+ * Function End_Zone
+ * terminates (if no DRC error ) the zone edge creation process
+ * @param DC = current Device Context
+ * @return true if Ok, false if DRC error
+ */
+ bool End_Zone( wxDC* DC );
+
+ /**
+ * Function Fill_Zone
+ * Calculate the zone filling for the outline zone_container
+ * The zone outline is a frontier, and can be complex (with holes)
+ * The filling starts from starting points like pads, tracks.
+ * If exists the old filling is removed
+ * @param aZone = zone to fill
+ * @return error level (0 = no error)
+ */
+ int Fill_Zone( ZONE_CONTAINER* aZone );
+
+ /**
+ * Function Fill_All_Zones
+ * Fill all zones on the board
+ * The old fillings are removed
+ * @param aActiveWindow = the current active window, if a progress bar is shown
+ * = NULL to do not display a progress bar
+ * @param aVerbose = true to show error messages
+ */
+ int Fill_All_Zones( wxWindow * aActiveWindow, bool aVerbose = true );
+
+
+ /**
+ * Function Add_Zone_Cutout
+ * Add a cutout zone to a given zone outline
+ * @param DC = current Device Context
+ * @param zone_container = parent zone outline
+ */
+ void Add_Zone_Cutout( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ /**
+ * Function Add_Similar_Zone
+ * Add a zone to a given zone outline.
+ * if the zones are overlapping they will be merged
+ * @param DC = current Device Context
+ * @param zone_container = parent zone outline
+ */
+ void Add_Similar_Zone( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ /**
+ * Function Edit_Zone_Params
+ * Edit params (layer, clearance, ...) for a zone outline
+ */
+ void Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ /**
+ * Function Start_Move_Zone_Corner
+ * Prepares a move corner in a zone outline,
+ * called from a move corner command (IsNewCorner = false),
+ * or a create new cornet command (IsNewCorner = true )
+ */
+ void Start_Move_Zone_Corner( wxDC* DC,
+ ZONE_CONTAINER* zone_container,
+ int corner_id,
+ bool IsNewCorner );
+
+ /**
+ * Function Start_Move_Zone_Corner
+ * Prepares a drag edge in an existing zone outline,
+ */
+ void Start_Move_Zone_Drag_Outline_Edge( wxDC* DC,
+ ZONE_CONTAINER* zone_container,
+ int corner_id );
+
+ /**
+ * Function End_Move_Zone_Corner_Or_Outlines
+ * Terminates a move corner in a zone outline, or a move zone outlines
+ * @param DC = current Device Context (can be NULL)
+ * @param zone_container: the given zone
+ */
+ void End_Move_Zone_Corner_Or_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ /**
+ * Function End_Move_Zone_Corner_Or_Outlines
+ * Remove the currently selected corner in a zone outline
+ * the .m_CornerSelection is used as corner selection
+ */
+ void Remove_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ /**
+ * Function Delete_Zone
+ * Remove the zone which include the segment aZone, or the zone which have
+ * the given time stamp. A zone is a group of segments which have the
+ * same TimeStamp
+ * @param DC = current Device Context (can be NULL)
+ * @param zone_container = zone to modify
+ * the member .m_CornerSelection is used to find the outline to remove.
+ * if the outline is the main outline, all the zone is removed
+ * otherwise, the hole is deleted
+ */
+ void Delete_Zone_Contour( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ /**
+ * Function Start_Move_Zone_Outlines
+ * Initialize parameters to move an existing zone outlines.
+ * @param DC = current Device Context (can be NULL)
+ * @param zone_container: the given zone to move
+ */
+ void Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container );
+
+ // Target handling
+ PCB_TARGET* CreateTarget( wxDC* DC );
+ void DeleteTarget( PCB_TARGET* aTarget, wxDC* DC );
+ void BeginMoveTarget( PCB_TARGET* aTarget, wxDC* DC );
+ void PlaceTarget( PCB_TARGET* aTarget, wxDC* DC );
+ void ShowTargetOptionsDialog( PCB_TARGET* aTarget, wxDC* DC );
+
+ // Graphic segments type DRAWSEGMENT handling:
+ DRAWSEGMENT* Begin_DrawSegment( DRAWSEGMENT* Segment, STROKE_T shape, wxDC* DC );
+ void End_Edge( DRAWSEGMENT* Segment, wxDC* DC );
+ void Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC );
+ void Delete_Drawings_All_Layer( LAYER_ID aLayer );
+
+ // Dimension handling:
+ void ShowDimensionPropertyDialog( DIMENSION* aDimension, wxDC* aDC );
+ DIMENSION* EditDimension( DIMENSION* aDimension, wxDC* aDC );
+ void DeleteDimension( DIMENSION* aDimension, wxDC* aDC );
+ void BeginMoveDimensionText( DIMENSION* aItem, wxDC* DC );
+ void PlaceDimensionText( DIMENSION* aItem, wxDC* DC );
+
+
+ // netlist handling:
+ void InstallNetlistFrame( wxDC* DC );
+
+ /**
+ * Function ReadPcbNetlist
+ * reads \a aNetlistFileName and updates the footprints (load missing footprints and
+ * delete on demand extra footprints) on the board.
+ * Update connectivity info, references, values and "TIME STAMP"
+ *
+ * @param aNetlistFileName = netlist file name (*.net)
+ * @param aCmpFileName = cmp/footprint link file name (*.cmp).
+ * if not found or empty, only the netlist will be used
+ * @param aReporter is a pointer to a #REPORTER object to write display messages.
+ * can be NULL.
+ * @param aChangeFootprint if true, footprints that have changed in netlist will be changed
+ * @param aDeleteBadTracks if true, erroneous tracks will be deleted
+ * @param aDeleteExtraFootprints if true, remove unlocked footprints that are not in netlist
+ * @param aSelectByTimestamp if true, use timestamp instead of reference to identify
+ * footprints from components (use after reannotation of the
+ * schematic)
+ * @param aDeleteSinglePadNets if true, remove nets counting only one pad
+ * and set net code to 0 for these pads
+ * @param aIsDryRun performs a dry run without making any changes if true.
+ */
+ void ReadPcbNetlist( const wxString& aNetlistFileName,
+ const wxString& aCmpFileName,
+ REPORTER* aReporter,
+ bool aChangeFootprint,
+ bool aDeleteBadTracks,
+ bool aDeleteExtraFootprints,
+ bool aSelectByTimestamp,
+ bool aDeleteSinglePadNets,
+ bool aIsDryRun );
+
+ /**
+ * Function RemoveMisConnectedTracks
+ * finds all track segments which are mis-connected (to more than one net).
+ * When such a bad segment is found, it is flagged to be removed.
+ * All tracks having at least one flagged segment are removed.
+ * @return true if any change is made
+ */
+ bool RemoveMisConnectedTracks();
+
+
+ // Autoplacement:
+ void OnPlaceOrRouteFootprints( wxCommandEvent& event );
+
+ /**
+ * Function ScriptingConsoleEnableDisable
+ * enables or disabled the scripting console
+ */
+ void ScriptingConsoleEnableDisable( wxCommandEvent& aEvent );
+
+ void OnUpdateScriptingConsoleState( wxUpdateUIEvent& aEvent );
+
+ void OnSelectAutoPlaceMode( wxCommandEvent& aEvent );
+
+ /**
+ * Function OnOrientFootprints
+ * install the dialog box for the common Orient Footprints
+ */
+ void OnOrientFootprints( wxCommandEvent& event );
+
+ /**
+ * Function ReOrientModules
+ * Set the orientation of footprints
+ * @param ModuleMask = mask (wildcard allowed) selection
+ * @param Orient = new orientation
+ * @param include_fixe = true to orient locked footprints
+ * @return true if some footprints modified, false if no change
+ */
+ bool ReOrientModules( const wxString& ModuleMask, double Orient, bool include_fixe );
+ void LockModule( MODULE* aModule, bool aLocked );
+
+ /**
+ * Function SpreadFootprints
+ * Footprints (after loaded by reading a netlist for instance) are moved
+ * to be in a small free area (outside the current board) without overlapping.
+ * @param aFootprintsOutsideBoardOnly: true to move only
+ * footprints outside the board outlines
+ * (they are outside if the position of a footprint is outside
+ * the board outlines bounding box
+ */
+ void SpreadFootprints( bool aFootprintsOutsideBoardOnly );
+
+ /**
+ * Function AutoPlaceModule
+ * automatically places footprints within the confines of the PCB edges.
+ * The components with the FIXED status are not moved. If the menu is
+ * calling the placement of 1 module, it will be replaced.
+ */
+ void AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC );
+
+ // Autorouting:
+ int Solve( wxDC* DC, int two_sides );
+ void Reset_Noroutable( wxDC* DC );
+ void Autoroute( wxDC* DC, int mode );
+ void ReadAutoroutedTracks( wxDC* DC );
+ void GlobalRoute( wxDC* DC );
+
+ /**
+ * Function Show_1_Ratsnest
+ * draw ratsnest.
+ *
+ * The net edge pad with mouse or module locates the mouse.
+ * Delete the ratsnest if no module or pad is selected.
+ */
+ void Show_1_Ratsnest( EDA_ITEM* item, wxDC* DC );
+
+ /**
+ * Function Clean_Pcb
+ * Clean up the board (remove redundant vias, not connected tracks
+ * and merges collinear track segments)
+ * Install the cleanup dialog frame to know what should be cleaned
+ * and run the cleanup function
+ */
+ void Clean_Pcb();
+
+ void InstallFindFrame();
+
+ /**
+ * Function SendMessageToEESCHEMA
+ * sends a message to the schematic editor so that it may move its cursor
+ * to a part with the same reference as the objectToSync
+ * @param objectToSync The object whose reference is used to synchronize Eeschema.
+ */
+ void SendMessageToEESCHEMA( BOARD_ITEM* objectToSync );
+
+ /**
+ * Function Edit_Gap
+ * edits the GAP module if it has changed the position and/or size of the pads that
+ * form the gap get a new value.
+ */
+ void Edit_Gap( wxDC* DC, MODULE* Module );
+
+ /**
+ * Function CreateMuWaveBaseFootprint
+ * create a basic footprint for micro wave applications.
+ * @param aValue = the text value
+ * @param aTextSize = the size of ref and value texts ( <= 0 to use board default values )
+ * @param aPadCount = number of pads
+ * Pads settings are:
+ * PAD_ATTRIB_SMD, rectangular, H size = V size = current track width.
+ */
+ MODULE* CreateMuWaveBaseFootprint( const wxString& aValue, int aTextSize, int aPadCount );
+
+ /**
+ * Create_MuWaveComponent
+ * creates a module "GAP" or "STUB" used in micro wave designs.
+ * This module has 2 pads:
+ * PAD_ATTRIB_SMD, rectangular, H size = V size = current track width.
+ * the "gap" is isolation created between this 2 pads
+ */
+ MODULE* Create_MuWaveComponent( int shape_type );
+
+ MODULE* Create_MuWavePolygonShape();
+
+ void Begin_Self( wxDC* DC );
+
+ /**
+ * Function Genre_Self
+ * creates a self-shaped coil for microwave applications.
+ * - Length Mself.lng
+ * - Extremities Mself.m_Start and Mself.m_End
+ *
+ * We must determine:
+ * Mself.nbrin = number of segments perpendicular to the direction
+ * (The coil nbrin will demicercles + 1 + 2 1 / 4 circle)
+ * Mself.lbrin = length of a strand
+ * Mself.radius = radius of rounded parts of the coil
+ * Mself.delta = segments extremities connection between him and the coil even
+ *
+ * The equations are
+ * Mself.m_Size.x = 2 * Mself.radius + Mself.lbrin
+ * Mself.m_Size.y * Mself.delta = 2 + 2 * Mself.nbrin * Mself.radius
+ * Mself.lng = 2 * Mself.delta / / connections to the coil
+ + (Mself.nbrin-2) * Mself.lbrin / / length of the strands except 1st and last
+ + (Mself.nbrin 1) * (PI * Mself.radius) / / length of rounded
+ * Mself.lbrin + / 2 - Melf.radius * 2) / / length of 1st and last bit
+ *
+ * The constraints are:
+ * Nbrin >= 2
+ * Mself.radius < Mself.m_Size.x
+ * Mself.m_Size.y = Mself.radius * 4 + 2 * Mself.raccord
+ * Mself.lbrin> Mself.radius * 2
+ *
+ * The calculation is conducted in the following way:
+ * Initially:
+ * Nbrin = 2
+ * Radius = 4 * m_Size.x (arbitrarily fixed value)
+ * Then:
+ * Increasing the number of segments to the desired length
+ * (Radius decreases if necessary)
+ *
+ */
+ MODULE* Genere_Self( wxDC* DC );
+
+ void ShowChangedLanguage(); // override EDA_BASE_FRAME virtual
+
+ /**
+ * Function UpdateTitle
+ * sets the main window title bar text.
+ * <p>
+ * If file name defined by PCB_SCREEN::m_FileName is not set, the title is set to the
+ * application name appended with no file. Otherwise, the title is set to the full path
+ * and file name and read only is appended to the title if the user does not have write
+ * access to the file.
+ * </p>
+ */
+ void UpdateTitle();
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif // WXPCB_STRUCT_H_
diff --git a/include/wx_status_popup.h b/include/wx_status_popup.h
new file mode 100644
index 0000000..93e8e7f
--- /dev/null
+++ b/include/wx_status_popup.h
@@ -0,0 +1,58 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 CERN
+ * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WX_STATUS_POPUP_H_
+#define __WX_STATUS_POPUP_H_
+
+
+#include <common.h>
+#include <wx/popupwin.h>
+
+class PCB_EDIT_FRAME;
+
+/**
+ * Class WX_STATUS_POPUP
+ *
+ * A tiny, headerless popup window used to display useful status (e.g. line length
+ * tuning info) next to the mouse cursor.
+ */
+
+class WX_STATUS_POPUP: public wxPopupWindow
+{
+public:
+ WX_STATUS_POPUP( PCB_EDIT_FRAME* aParent );
+ virtual ~WX_STATUS_POPUP();
+
+ virtual void Popup(wxWindow* aFocus = NULL);
+ virtual void Move( const wxPoint &aWhere );
+
+protected:
+
+ void updateSize();
+
+ wxPanel* m_panel;
+ wxBoxSizer* m_topSizer;
+};
+
+#endif /* __WX_STATUS_POPUP_H_*/
diff --git a/include/wx_unit_binder.h b/include/wx_unit_binder.h
new file mode 100644
index 0000000..ad4741d
--- /dev/null
+++ b/include/wx_unit_binder.h
@@ -0,0 +1,97 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014-2015 CERN
+ * Author: Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WX_UNIT_BINDER_H_
+#define __WX_UNIT_BINDER_H_
+
+#include <common.h>
+#include <wx/spinbutt.h>
+
+class wxTextCtrl;
+class wxSpinButton;
+class wxStaticText;
+
+class WX_UNIT_BINDER
+{
+public:
+
+ /**
+ * Constructor.
+ * @param aParent is the parent window.
+ * @param aTextInput is the text input widget used to edit the given value.
+ * @param aUnitLabel is the units label displayed next to the text field.
+ * @param aSpinButton is an optional spin button (for adjusting the input value)
+ */
+ WX_UNIT_BINDER( wxWindow* aParent, wxTextCtrl* aTextInput, wxStaticText* aUnitLabel, wxSpinButton* aSpinButton = NULL );
+
+ virtual ~WX_UNIT_BINDER();
+
+ /**
+ * Function SetValue
+ * Sets new value (in Internal Units) for the text field, taking care of units conversion.
+ * @param aValue is the new value.
+ */
+ virtual void SetValue( int aValue );
+
+ /**
+ * Function GetValue
+ * Returns the current value in Internal Units.
+ */
+ virtual int GetValue() const;
+
+ /**
+ * Function Valid
+ * Returns true if the text control contains a real number.
+ */
+ bool Valid() const;
+
+ /**
+ * Function Enable
+ * Enables/diasables the binded widgets
+ */
+ void Enable( bool aEnable );
+
+protected:
+
+ void onTextChanged( wxEvent& aEvent );
+
+ ///> Text input control.
+ wxTextCtrl* m_textCtrl;
+
+ ///> Label showing currently used units.
+ wxStaticText* m_unitLabel;
+
+ ///> Currently used units.
+ EDA_UNITS_T m_units;
+
+ ///> Step size (added/subtracted difference if spin buttons are used).
+ int m_step;
+ int m_min;
+ int m_max;
+
+ ///> Default value (or non-specified)
+ static const wxString DEFAULT_VALUE;
+};
+
+#endif /* __WX_UNIT_BINDER_H_ */
diff --git a/include/wxstruct.h b/include/wxstruct.h
new file mode 100644
index 0000000..ab5ff7c
--- /dev/null
+++ b/include/wxstruct.h
@@ -0,0 +1,527 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2009-2015 Jean-Pierre Charras, jp.charras wanadoo.fr
+ * Copyright (C) 2011-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file wxstruct.h
+ * @brief Base window classes and related definitions.
+ */
+
+#ifndef WXSTRUCT_H_
+#define WXSTRUCT_H_
+
+
+#include <vector>
+
+#include <wx/socket.h>
+#include <wx/log.h>
+#include <wx/config.h>
+#include <wx/wxhtml.h>
+#include <wx/laywin.h>
+#include <wx/aui/aui.h>
+#include <wx/docview.h>
+
+#include <colors.h>
+#include <fctsys.h>
+#include <common.h>
+#include <layers_id_colors_and_visibility.h>
+#include <frame_type.h>
+
+#ifdef USE_WX_OVERLAY
+#include <wx/overlay.h>
+#endif
+
+// Option for main frames
+#define KICAD_DEFAULT_DRAWFRAME_STYLE wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS
+
+
+// Readability helper definitions for creating backup files.
+#define CREATE_BACKUP_FILE true
+#define NO_BACKUP_FILE false
+
+/**
+ * a prefix to create filenames for schematic files or other difile when auto-saved
+ * to retrieve a crash
+ * The auto-saved filenames are AUTOSAVE_PREFIX_FILENAME + <sourcefilename>
+ * where <sourcefilename> is the flename without path of the auto-saved file
+ * Warning: avoid any special char like / \ $ % which can create issues on Unix
+ * or Window with filenames or env var expansion.
+ */
+#define AUTOSAVE_PREFIX_FILENAME wxT( "_saved_" )
+
+
+class EDA_ITEM;
+class EDA_RECT;
+class EDA_DRAW_PANEL;
+class EDA_DRAW_PANEL_GAL;
+class EDA_MSG_PANEL;
+class BASE_SCREEN;
+class PARAM_CFG_BASE;
+class PAGE_INFO;
+class PLOTTER;
+class TITLE_BLOCK;
+class MSG_PANEL_ITEM;
+class TOOL_MANAGER;
+class TOOL_DISPATCHER;
+
+
+enum id_librarytype {
+ LIBRARY_TYPE_EESCHEMA,
+ LIBRARY_TYPE_PCBNEW,
+ LIBRARY_TYPE_DOC,
+ LIBRARY_TYPE_SYMBOL
+};
+
+
+/// Custom trace mask to enable and disable auto save tracing.
+extern const wxChar traceAutoSave[];
+
+
+/**
+ * Class EDA_BASE_FRAME
+ * is the base frame for deriving all KiCad main window classes. This class is not
+ * intended to be used directly. It provides support for automatic calls to
+ * a SaveSettings() function. SaveSettings() for a derived class can choose
+ * to do nothing, or rely on basic SaveSettings() support in this base class to do
+ * most of the work by calling it from the derived class's SaveSettings().
+ * <p>
+ * This class is not a KIWAY_PLAYER because KICAD_MANAGER_FRAME is derived from it
+ * and that class is not a player.
+ */
+class EDA_BASE_FRAME : public wxFrame
+{
+ /**
+ * Function windowClosing
+ * (with its unexpected name so it does not collide with the real OnWindowClose()
+ * function provided in derived classes) is called just before a window
+ * closing, and is used to call a derivation specific
+ * SaveSettings(). SaveSettings() is called for all derived wxFrames in this
+ * base class overload. (Calling it from a destructor is deprecated since the
+ * wxFrame's position is not available in the destructor on linux.) In other words,
+ * you should not need to call SaveSettings() anywhere, except in this
+ * one function found only in this class.
+ */
+ void windowClosing( wxCloseEvent& event );
+
+protected:
+ FRAME_T m_Ident; ///< Id Type (pcb, schematic, library..)
+ wxPoint m_FramePos;
+ wxSize m_FrameSize;
+
+ wxString m_configFrameName; ///< prefix used in config to identify some params (frame size...)
+ ///< if empty, the frame name defined in CTOR is used
+
+ wxAuiToolBar* m_mainToolBar; ///< Standard horizontal Toolbar
+
+ wxString m_AboutTitle; ///< Name of program displayed in About.
+
+ wxAuiManager m_auimgr;
+
+ /// Flag to indicate if this frame supports auto save.
+ bool m_hasAutoSave;
+
+ /// Flag to indicate the last auto save state.
+ bool m_autoSaveState;
+
+ /// The auto save interval time in seconds.
+ int m_autoSaveInterval;
+
+ /// The timer used to implement the auto save feature;
+ wxTimer* m_autoSaveTimer;
+
+ wxString m_perspective; ///< wxAuiManager perspective.
+
+ wxString m_mruPath; ///< Most recently used path.
+
+ /**
+ * Function onAutoSaveTimer
+ * handles the auto save timer event.
+ */
+ void onAutoSaveTimer( wxTimerEvent& aEvent );
+
+ /**
+ * Function autoSaveRequired
+ * returns the auto save status of the application. Override this function if
+ * your derived frame supports automatic file saving.
+ */
+ virtual bool isAutoSaveRequired() const { return false; }
+
+ /**
+ * Function doAutoSave
+ * should be overridden by the derived class to handle the auto save feature.
+ *
+ * @return true if the auto save was successful otherwise false.
+ */
+ virtual bool doAutoSave();
+
+ /**
+ * Function config
+ * returns the wxConfigBase used in SaveSettings(), and is overloaded in
+ * KICAD_MANAGER_FRAME
+ */
+ virtual wxConfigBase* config();
+
+ /**
+ * Function sys_search
+ * returns a SEARCH_STACK pertaining to entire program, and is overloaded in
+ * KICAD_MANAGER_FRAME
+ */
+ virtual const SEARCH_STACK& sys_search();
+
+ virtual wxString help_name();
+
+public:
+ EDA_BASE_FRAME( wxWindow* aParent, FRAME_T aFrameType,
+ const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString& aFrameName );
+
+ ~EDA_BASE_FRAME();
+
+ /**
+ * Function ProcessEvent
+ * overrides the default process event handler to implement the auto save feature.
+ *
+ * @warning If you override this function in a derived class, make sure you call
+ * down to this or the auto save feature will be disabled.
+ */
+ bool ProcessEvent( wxEvent& aEvent ); // override wxFrame::ProcessEvent()
+
+ bool Enable( bool enable ); // override wxFrame::Enable virtual
+
+ void SetAutoSaveInterval( int aInterval ) { m_autoSaveInterval = aInterval; }
+
+ int GetAutoSaveInterval() const { return m_autoSaveInterval; }
+
+ bool IsType( FRAME_T aType ) const { return m_Ident == aType; }
+
+ void GetKicadHelp( wxCommandEvent& event );
+
+ void GetKicadAbout( wxCommandEvent& event );
+
+ /**
+ * Function CopyVersionInfoToClipboard
+ * copies the version information to the clipboard for bug reporting purposes.
+ */
+ void CopyVersionInfoToClipboard( wxCommandEvent& event );
+
+ void PrintMsg( const wxString& text );
+
+ /**
+ * Append the copy version information to clipboard help menu entry to \a aMenu.
+ *
+ * @param aMenu - The menu to append.
+ */
+ void AddHelpVersionInfoMenuEntry( wxMenu* aMenu );
+
+ /**
+ * Function LoadSettings
+ * loads common frame parameters from a configuration file.
+ *
+ * Don't forget to call the base method or your frames won't
+ * remember their positions and sizes.
+ */
+ virtual void LoadSettings( wxConfigBase* aCfg );
+
+ /**
+ * Function SaveSettings
+ * saves common frame parameters to a configuration data file.
+ *
+ * Don't forget to call the base class's SaveSettings() from
+ * your derived SaveSettings() otherwise the frames won't remember their
+ * positions and sizes.
+ */
+ virtual void SaveSettings( wxConfigBase* aCfg );
+
+ /**
+ * Function ConfigBaseName
+ * @return a base name prefix used in Load/Save settings to build
+ * the full name of keys used in config.
+ * This is usually the name of the frame set by CTOR, unless m_configFrameName
+ * contains a base name.
+ * this is the case of frames which can be shown in normal or modal mode.
+ * This is needed because we want only one base name prefix,
+ * regardless the mode used.
+ */
+ wxString ConfigBaseName()
+ {
+ wxString baseCfgName = m_configFrameName.IsEmpty() ? GetName() : m_configFrameName;
+ return baseCfgName;
+ }
+
+
+ /**
+ * Function SaveProjectSettings
+ * saves changes to the project settings to the project (.pro) file.
+ * The method is virtual so you can override it to call the suitable save method.
+ * The base method do nothing
+ * @param aAskForSave = true to open a dialog before saving the settings
+ */
+ virtual void SaveProjectSettings( bool aAskForSave ) {};
+
+ /**
+ * Function OnSelectPreferredEditor
+ * Open a dialog to select the editor that will used in KiCad
+ * to edit or display files (reports ... )
+ * The full filename editor is saved in configuration (global params)
+ */
+ virtual void OnSelectPreferredEditor( wxCommandEvent& event );
+
+ // Read/Save and Import/export hotkeys config
+
+ /**
+ * Function ReadHotkeyConfig
+ * Read configuration data and fill the current hotkey list with hotkeys
+ * @param aDescList = current hotkey list descr. to initialize.
+ */
+ int ReadHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList );
+
+ /**
+ * Function WriteHotkeyConfig
+ * Store the current hotkey list
+ * It is stored using the standard wxConfig mechanism or a file.
+ *
+ * @param aDescList = pointer to the current hotkey list.
+ * @param aFullFileName = a wxString pointer to a full file name.
+ * if NULL, use the standard wxConfig mechanism (default)
+ * the output format is: shortcut "key" "function"
+ * lines starting with # are comments
+ */
+ virtual int WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList, wxString* aFullFileName = NULL );
+
+ /**
+ * Function ReadHotkeyConfigFile
+ * Read an old configuration file (&ltfile&gt.key) and fill the current hotkey list
+ * with hotkeys
+ * @param aFilename = file name to read.
+ * @param aDescList = current hotkey list descr. to initialize.
+ */
+ int ReadHotkeyConfigFile( const wxString& aFilename, struct EDA_HOTKEY_CONFIG* aDescList );
+
+ /**
+ * Function ImportHotkeyConfigFromFile
+ * Prompt the user for an old hotkey file to read, and read it.
+ * @param aDescList = current hotkey list descr. to initialize.
+ * @param aDefaultShortname = a default short name (extention not needed)
+ * like eechema, kicad...
+ */
+ void ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList,
+ const wxString& aDefaultShortname );
+
+ /**
+ * Function ExportHotkeyConfigToFile
+ * Prompt the user for an old hotkey file to read, and read it.
+ * @param aDescList = current hotkey list descr. to initialize.
+ * @param aDefaultShortname = a default short name (extention not needed)
+ * like eechema, kicad...
+ */
+ void ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList,
+ const wxString& aDefaultShortname );
+
+ /**
+ * Function GetFileFromHistory
+ * fetches the file name from the file history list.
+ * and removes the selected file, if this file does not exists
+ * Note also the menu is updated, if wxFileHistory::UseMenu
+ * was called at init time
+ * @param cmdId The command ID associated with the \a aFileHistory object.
+ * @param type Please document me!
+ * @param aFileHistory The wxFileHistory in use. If null, the main application file
+ * history is used
+ * @return a wxString containing the selected filename
+ */
+ wxString GetFileFromHistory( int cmdId, const wxString& type,
+ wxFileHistory* aFileHistory = NULL );
+
+ /**
+ * Function UpdateFileHistory
+ * Updates the list of recently opened files.
+ * Note also the menu is updated, if wxFileHistory::UseMenu
+ * was called at init time
+ * @param FullFileName The full file name including the path.
+ * @param aFileHistory The wxFileHistory in use.
+ * If NULL, the main application file history is used.
+ */
+ void UpdateFileHistory( const wxString& FullFileName, wxFileHistory * aFileHistory = NULL );
+
+ void SetMruPath( const wxString& aPath ) { m_mruPath = aPath; }
+
+ wxString GetMruPath() const { return m_mruPath; }
+
+ /**
+ * Function ReCreateMenuBar
+ * Creates recreates the menu bar.
+ * Needed when the language is changed
+ */
+ virtual void ReCreateMenuBar();
+
+ /**
+ * Function IsWritable
+ * checks if \a aFileName can be written.
+ * <p>
+ * The function performs a number of tests on \a aFileName to verify that it
+ * can be saved. If \a aFileName defines a path with no file name, them the
+ * path is tested for user write permission. If \a aFileName defines a file
+ * name that does not exist in the path, the path is tested for user write
+ * permission. If \a aFileName defines a file that already exits, the file
+ * name is tested for user write permissions.
+ * </p>
+ *
+ * @note The file name path must be set or an assertion will be raised on debug
+ * builds and return false on release builds.
+ * @param aFileName The full path and/or file name of the file to test.
+ * @return False if \a aFileName cannot be written.
+ */
+ bool IsWritable( const wxFileName& aFileName );
+
+ /**
+ * Function CheckForAutoSaveFile
+ * checks if an auto save file exists for \a aFileName and takes the appropriate
+ * action depending on the user input.
+ * <p>
+ * If an auto save file exists for \a aFileName, the user is prompted if they wish
+ * to replace file \a aFileName with the auto saved file. If the user chooses to
+ * replace the file, the backup file of \a aFileName is removed, \a aFileName is
+ * renamed to the backup file name, and the auto save file is renamed to \a aFileName.
+ * If user chooses to keep the existing version of \a aFileName, the auto save file
+ * is removed.
+ * </p>
+ * @param aFileName A wxFileName object containing the file name to check.
+ * @param aBackupFileExtension A wxString object containing the backup file extension
+ * used to create the backup file name.
+ */
+ void CheckForAutoSaveFile( const wxFileName& aFileName, const wxString& aBackupFileExtension );
+
+ /**
+ * Function ShowChangedLanguage
+ * redraws the menus and what not in current language.
+ */
+ virtual void ShowChangedLanguage();
+};
+
+
+/**
+ * Specialization of the wxAuiPaneInfo class for KiCad panels.
+ *
+ * Documentation for wxAui is poor at this time. The following notes spring from errors made in
+ * previous KiCad implementations:
+ *
+ * wxAuiPaneInfo.ToolbarPane() and .Defaults() are used to clear and then prepare the objects so
+ * only use them once at the beginning of configuration..
+ *
+ * Panels are organized in layers, from 0 (close to the center) and increasing outward. Note
+ * that for ToolbarPanes, layer 0 considered a special default value, and ToolbarPanes on
+ * layer 0 are pushed to layer 10 automatically. Use Layer 1 for the inner layer as a work-
+ * around.
+ *
+ * Each panel has rows, starting at 0. Each row has positions starting at 0. Each item in a panel
+ * can have it's row and position set.
+ *
+ * Eventually panels will be movable. Each initialization function sets up the panel for this,
+ * then after a //==// break has additional calls to anchor toolbars in a way that matches
+ * present functionality.
+ */
+class EDA_PANEINFO : public wxAuiPaneInfo
+{
+
+public:
+
+ /**
+ * Function HorizontalToolbarPane
+ * Change *this to a horizontal toolbar for KiCad.
+ */
+ EDA_PANEINFO& HorizontalToolbarPane()
+ {
+ ToolbarPane();
+ CloseButton( false );
+ LeftDockable( false );
+ RightDockable( false );
+ //==================== Remove calls below here for movable toolbars //
+ Gripper( false );
+ DockFixed( true );
+ Movable( false );
+ Resizable( true );
+ return *this;
+ }
+
+ /**
+ * Function VerticalToolbarPane
+ * Change *this to a vertical toolbar for KiCad.
+ */
+ EDA_PANEINFO& VerticalToolbarPane()
+ {
+ ToolbarPane();
+ CloseButton( false );
+ TopDockable( false );
+ BottomDockable( false );
+ //==================== Remove calls below here for movable toolbars //
+ Gripper( false );
+ DockFixed( true );
+ Movable( false );
+ Resizable( true );
+ return *this;
+ }
+
+ /**
+ * Function MessageToolbarPane
+ * Change *this to a message pane for KiCad.
+ *
+ */
+ EDA_PANEINFO& MessageToolbarPane()
+ {
+ Gripper( false );
+ DockFixed( true );
+ Movable( false );
+ Floatable( false );
+ CloseButton( false );
+ CaptionVisible( false );
+ return *this;
+ }
+
+ /**
+ * Function LayersToolbarPane
+ * Change *this to a layers toolbar for KiCad.
+ */
+ EDA_PANEINFO& LayersToolbarPane()
+ {
+ CloseButton( false );
+ return *this;
+ }
+
+ /**
+ * Function InfoToolbarPane
+ * Change *this to a information panel for for KiCad.
+ *
+ * Info panes are used for vertical display of information next to the center pane.
+ * Used in CvPcb and the library viewer primarily.
+ */
+ EDA_PANEINFO& InfoToolbarPane()
+ {
+ Gripper( false );
+ CloseButton( false );
+ CaptionVisible( false );
+ return *this;
+ }
+};
+
+#endif // WXSTRUCT_H_
diff --git a/include/wxunittext.h b/include/wxunittext.h
new file mode 100644
index 0000000..f86d4aa
--- /dev/null
+++ b/include/wxunittext.h
@@ -0,0 +1,144 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 CERN
+ * Author: Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef WXUNITTEXT_H_
+#define WXUNITTEXT_H_
+
+#include <common.h>
+#include <wx/spinbutt.h>
+
+namespace boost
+{
+ template <class T>
+ class optional;
+}
+class wxTextCtrl;
+class wxSpinButton;
+class wxStaticText;
+
+class WX_UNIT_TEXT : public wxPanel
+{
+public:
+ /**
+ * Constructor.
+ * @param aParent is the parent window.
+ * @param aLabel is the label displayed next to the text input control.
+ * @param aValue is the initial value for the control.
+ * @param aStep is the step size when using spin buttons.
+ */
+ WX_UNIT_TEXT( wxWindow* aParent, const wxString& aLabel = _( "Size:" ),
+ double aValue = 0.0, double aStep = 0.1 );
+
+ virtual ~WX_UNIT_TEXT();
+
+ /**
+ * Function SetUnits
+ * Changes the units used by the control.
+ * @param aUnits is the new unit to be used.
+ * @param aConvert decides if the current value should be converted to the value in new units
+ * or should it stay the same.
+ */
+ void SetUnits( EDA_UNITS_T aUnits, bool aConvert = false );
+
+ /**
+ * Function SetValue
+ * Sets new value for the control.
+ * @param aValue is the new value.
+ */
+ virtual void SetValue( double aValue );
+
+ /*
+ * Function GetValue
+ * Returns the current value using specified units (if currently used units are different, then
+ * they are converted first).
+ * @param aUnits is the wanted unit.
+ */
+ //virtual double GetValue( EDA_UNITS_T aUnits ) const;
+
+ /**
+ * Function GetValue
+ * Returns the current value in currently used units.
+ */
+ virtual boost::optional<double> GetValue() const;
+
+ /**
+ * Function GetUnits
+ * Returns currently used units.
+ */
+ EDA_UNITS_T GetUnits() const
+ {
+ return m_units;
+ }
+
+ /**
+ * Function SetStep
+ * Sets the difference introduced by a single spin button click.
+ * @param aStep is new step size.
+ */
+ void SetStep( double aStep )
+ {
+ assert( aStep > 0.0 );
+
+ m_step = aStep;
+ }
+
+ /**
+ * Function GetStep
+ * Returns the difference introduced by a single spin button click.
+ */
+ double GetStep() const
+ {
+ return m_step;
+ }
+
+protected:
+ ///> Spin up button click event handler.
+ void onSpinUpEvent( wxSpinEvent& aEvent );
+
+ ///> Spin down button click event handler.
+ void onSpinDownEvent( wxSpinEvent& aEvent );
+
+ ///> Label for the input (e.g. "Size:")
+ wxStaticText* m_inputLabel;
+
+ ///> Text input control.
+ wxTextCtrl* m_inputValue;
+
+ ///> Spin buttons for changing the value using mouse.
+ wxSpinButton* m_spinButton;
+
+ ///> Label showing currently used units.
+ wxStaticText* m_unitLabel;
+
+ ///> Currently used units.
+ EDA_UNITS_T m_units;
+
+ ///> Step size (added/subtracted difference if spin buttons are used).
+ double m_step;
+
+ ///> Default value (or non-specified)
+ static const wxString DEFAULT_VALUE;
+};
+
+#endif /* WXUNITTEXT_H_ */
diff --git a/include/xnode.h b/include/xnode.h
new file mode 100644
index 0000000..7217420
--- /dev/null
+++ b/include/xnode.h
@@ -0,0 +1,100 @@
+#ifndef XATTR_H_
+#define XATTR_H_
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 1992-2010 KiCAd Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <richio.h>
+
+// quiet the deprecated warnings with 3 lines:
+#include <wx/defs.h>
+#undef wxDEPRECATED
+#define wxDEPRECATED(x) x
+
+#include <wx/xml/xml.h>
+
+
+/**
+ * Class XNODE
+ * holds an XML or S-expression element. It is used for eXporting
+ * a document tree in EITHER XML or S-expression.
+ */
+class XNODE : public wxXmlNode
+{
+public:
+ //-----<overloads>---------------------------------------------------------
+ XNODE() :
+ wxXmlNode()
+ {
+ }
+
+ XNODE( wxXmlNodeType aType, const wxString& aName, const wxString& aContent = wxEmptyString ) :
+ wxXmlNode( NULL, aType, aName, aContent )
+ {
+ }
+
+ XNODE( XNODE* aParent, wxXmlNodeType aType, const wxString& aName,
+ const wxString& aContent = wxEmptyString, wxXmlAttribute* aProperties = NULL ) :
+ wxXmlNode( aParent, aType, aName, aContent, aProperties )
+ {
+ }
+
+ XNODE* GetChildren() const
+ {
+ return (XNODE* )wxXmlNode::GetChildren();
+ }
+
+ XNODE* GetNext() const
+ {
+ return (XNODE* )wxXmlNode::GetNext();
+ }
+
+ XNODE* GetParent() const
+ {
+ return (XNODE* )wxXmlNode::GetParent();
+ }
+ //-----</overloads>--------------------------------------------------------
+
+ /**
+ * Function Format
+ * writes this object as UTF8 out to an OUTPUTFORMATTER as an S-expression.
+ * @param out The formatter to write to.
+ * @param nestLevel A multiple of the number of spaces to preceed the output with.
+ * @throw IO_ERROR if a system error writing the output, such as a full disk.
+ */
+ virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+
+ /**
+ * Function FormatContents
+ * writes the contents of object as UTF8 out to an OUTPUTFORMATTER as an S-expression.
+ * This is the same as Format() except that the outer wrapper is not included.
+ * @param out The formatter to write to.
+ * @param nestLevel A multiple of the number of spaces to preceed the output with.
+ * @throw IO_ERROR if a system error writing the output, such as a full disk.
+ */
+ virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+
+};
+
+#endif // XATTR_H_
diff --git a/kicad/CMakeLists.txt b/kicad/CMakeLists.txt
new file mode 100644
index 0000000..f0e2438
--- /dev/null
+++ b/kicad/CMakeLists.txt
@@ -0,0 +1,148 @@
+add_definitions( -DKICAD )
+
+include_directories( BEFORE ${INC_BEFORE} )
+include_directories(
+ ${INC_AFTER}
+ )
+
+
+set( KICAD_SRCS
+ class_treeprojectfiles.cpp
+ class_treeproject_item.cpp
+ commandframe.cpp
+ dialogs/dialog_template_selector_base.cpp
+ dialogs/dialog_template_selector.cpp
+ files-io.cpp
+ kicad.cpp
+ mainframe.cpp
+ menubar.cpp
+ preferences.cpp
+ prjconfig.cpp
+ project_template.cpp
+ tree_project_frame.cpp
+ )
+
+if( MINGW )
+ # KICAD_RESOURCES variable is set by the macro.
+ mingw_resource_compiler( kicad )
+else()
+ set( KICAD_RESOURCES kicad.rc )
+endif()
+
+if( APPLE )
+ set( KICAD_RESOURCES kicad.icns kicad_doc.icns )
+ set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/kicad.icns" PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources
+ )
+ set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/kicad_doc.icns" PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources
+ )
+ set( MACOSX_BUNDLE_ICON_FILE kicad.icns )
+ set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-pcb.kicad )
+ set( MACOSX_BUNDLE_NAME kicad )
+endif()
+
+add_executable( kicad WIN32 MACOSX_BUNDLE
+ ${KICAD_SRCS}
+ ${KICAD_EXTRA_SRCS}
+ ${KICAD_RESOURCES}
+ )
+
+if( UNIX )
+ # for build directory: create kiface symlinks so kicad (exe) can be run in-situ
+ add_custom_target( kiface_sym_links
+ COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_BINARY_DIR}/eeschema/_eeschema.kiface" "${CMAKE_BINARY_DIR}/kicad/_eeschema.kiface"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.kiface" "${CMAKE_BINARY_DIR}/kicad/_pcbnew.kiface"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_BINARY_DIR}/cvpcb/_cvpcb.kiface" "${CMAKE_BINARY_DIR}/kicad/_cvpcb.kiface"
+ COMMENT "Making <build-dir>/kicad/<kiface.symlinks>"
+ )
+endif()
+
+if( APPLE )
+ set_target_properties( kicad PROPERTIES
+ MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
+ )
+ target_link_libraries( kicad
+ common
+ bitmaps
+ polygon
+ ${wxWidgets_LIBRARIES}
+ )
+else()
+ target_link_libraries( kicad
+ common
+ bitmaps
+ polygon
+ ${wxWidgets_LIBRARIES}
+ ${GDI_PLUS_LIBRARIES}
+ )
+endif()
+
+install( TARGETS kicad
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+if( APPLE )
+ # "install( CODE ... )" will launch its own CMake, so no variables from
+ # this CMake instance are accessible... use helper to transfer
+ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
+ set( SCRIPTING_HELPER "1" )
+ else()
+ set( SCRIPTING_HELPER "0" )
+ endif()
+
+ # make main bundle relocatable
+ install( CODE "
+ # find all libs and modules
+ file( GLOB BUNDLE_FIX_LIBS ${OSX_BUNDLE_INSTALL_KIFACE_DIR}/*.kiface )
+ if( ${SCRIPTING_HELPER} )
+ file( GLOB WXPYTHON_DIR RELATIVE ${OSX_BUNDLE_INSTALL_LIB_DIR}/${PYTHON_LIB_DIR} ${OSX_BUNDLE_INSTALL_LIB_DIR}/${PYTHON_LIB_DIR}/wx-?.?-osx_cocoa )
+ file( GLOB PYTHON_SCRIPTING_SO ${OSX_BUNDLE_INSTALL_LIB_DIR}/${PYTHON_LIB_DIR}/*.so )
+ set( BUNDLE_FIX_LIBS \${BUNDLE_FIX_LIBS} \${PYTHON_SCRIPTING_SO} )
+ file( GLOB PYTHON_SCRIPTING_SO ${OSX_BUNDLE_INSTALL_LIB_DIR}/${PYTHON_LIB_DIR}/\${WXPYTHON_DIR}/wx/*.so )
+ set( BUNDLE_FIX_LIBS \${BUNDLE_FIX_LIBS} \${PYTHON_SCRIPTING_SO} )
+ endif()
+
+ # override default embedded path settings
+ ${OSX_BUNDLE_OVERRIDE_PATHS}
+
+ # do all the work
+ include( BundleUtilities )
+
+ # If `BU_CHMOD_BUNDLE_ITEMS` is not set, `install_name_tool` will fail to re-write some loader paths due to lack of writable permissions if the build dependencies were installed by brew (or didn't have writable permissions)
+ set(BU_CHMOD_BUNDLE_ITEMS ON)
+
+ fixup_bundle( ${OSX_BUNDLE_INSTALL_BIN_DIR}/kicad
+ \"\${BUNDLE_FIX_LIBS}\"
+ \"\"
+ )
+ " COMPONENT Runtime
+ )
+
+ # move all individual app bundles into main bundle
+ install( CODE "
+ # helper function to move a bundle into main bundle
+ function( move_to_main_bundle bundle_name )
+ message( STATUS \"Moving \${bundle_name} into main bundle...\" )
+ file( MAKE_DIRECTORY ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_APP_DIR} )
+ file( REMOVE_RECURSE ${KICAD_BIN}/\${bundle_name}/${OSX_BUNDLE_LIB_DIR} )
+ file( RENAME ${KICAD_BIN}/\${bundle_name} ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_APP_DIR}/\${bundle_name} )
+ execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink \"../../../Frameworks\" \"Frameworks\"
+ WORKING_DIRECTORY ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_APP_DIR}/\${bundle_name}/Contents
+ )
+ # create a top-level link pointing inside main bundle
+ execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink \"${OSX_BUNDLE_MAIN}/${OSX_BUNDLE_APP_DIR}/\${bundle_name}\" \"\${bundle_name}\"
+ WORKING_DIRECTORY ${KICAD_BIN}
+ )
+ endfunction( move_to_main_bundle )
+
+ # move all app bundles
+ move_to_main_bundle( bitmap2component.app )
+ move_to_main_bundle( eeschema.app )
+ move_to_main_bundle( gerbview.app )
+ move_to_main_bundle( pcb_calculator.app )
+ move_to_main_bundle( pcbnew.app )
+ move_to_main_bundle( pl_editor.app )
+ " COMPONENT Runtime
+ )
+endif()
diff --git a/kicad/Info.plist b/kicad/Info.plist
new file mode 100644
index 0000000..9bb140d
--- /dev/null
+++ b/kicad/Info.plist
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeRole</key> <string>Editor</string>
+ <key>CFBundleTypeIconFile</key> <string>kicad_doc.icns</string>
+ <key>CFBundleTypeExtensions</key> <array>
+ <string>pro</string>
+ </array>
+ <key>CFBundleTypeName</key> <string>kicad project files</string>
+ <key>LSHandlerRank</key> <string>Owner</string>
+ </dict>
+ </array>
+ <key>CFBundleDevelopmentRegion</key> <string>English</string>
+ <key>CFBundleExecutable</key> <string>kicad</string>
+ <key>CFBundleGetInfoString</key> <string></string>
+ <key>CFBundleIconFile</key> <string>kicad.icns</string>
+ <key>CFBundleIdentifier</key> <string>org.kicad-pcb.kicad</string>
+ <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string>
+ <key>CFBundleLongVersionString</key> <string></string>
+ <key>CFBundleName</key> <string>KiCad</string>
+ <key>CFBundlePackageType</key> <string>APPL</string>
+ <key>CFBundleShortVersionString</key> <string></string>
+ <key>CFBundleSignature</key> <string>????</string>
+ <key>CFBundleVersion</key> <string></string>
+ <key>CSResourcesFileMapped</key> <true/>
+ <key>LSRequiresCarbon</key> <true/>
+ <key>NSHumanReadableCopyright</key> <string></string>
+ <key>NSHighResolutionCapable</key> <string>True</string>
+</dict>
+</plist>
diff --git a/kicad/class_treeproject_item.cpp b/kicad/class_treeproject_item.cpp
new file mode 100644
index 0000000..56c5709
--- /dev/null
+++ b/kicad/class_treeproject_item.cpp
@@ -0,0 +1,262 @@
+/**
+ * @file class_treeproject_item.cpp
+ *
+ * @brief Class TREEPROJECT_ITEM is a derived class from wxTreeItemData and
+ * store info about a file or directory shown in the KiCad tree project files
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <gestfich.h>
+#include <macros.h>
+
+#include <kicad.h>
+#include <project.h>
+#include <pgm_base.h>
+#include <tree_project_frame.h>
+#include <class_treeprojectfiles.h>
+#include <class_treeproject_item.h>
+#include <wx/imaglist.h>
+
+#include <wx/regex.h>
+#include <wx/dir.h>
+
+TREEPROJECT_ITEM::TREEPROJECT_ITEM( enum TreeFileType type, const wxString& data,
+ wxTreeCtrl* parent ) :
+ wxTreeItemData()
+{
+ m_parent = parent;
+ SetType( type );
+ SetFileName( data );
+ SetRootFile( false ); // true only for the root item of the tree (the project name)
+ SetPopulated( false );
+ m_state = 0;
+}
+
+
+void TREEPROJECT_ITEM::SetState( int state )
+{
+ wxImageList* imglist = m_parent->GetImageList();
+
+ if( !imglist || state < 0 || state >= imglist->GetImageCount() / ( TREE_MAX - 2 ) )
+ return;
+
+ m_state = state;
+ int imgid = m_Type - 1 + state * ( TREE_MAX - 1 );
+ m_parent->SetItemImage( GetId(), imgid );
+ m_parent->SetItemImage( GetId(), imgid, wxTreeItemIcon_Selected );
+}
+
+
+const wxString TREEPROJECT_ITEM::GetDir() const
+{
+ if( TREE_DIRECTORY == m_Type )
+ return GetFileName();
+
+ return wxFileName( GetFileName() ).GetPath();
+}
+
+
+bool TREEPROJECT_ITEM::Rename( const wxString& name, bool check )
+{
+ // this is broken & unsafe to use on linux.
+ if( m_Type == TREE_DIRECTORY )
+ return false;
+
+ if( name.IsEmpty() )
+ return false;
+
+ const wxString sep = wxFileName().GetPathSeparator();
+ wxString newFile;
+ wxString dirs = GetDir();
+
+ if( !dirs.IsEmpty() && GetType() != TREE_DIRECTORY )
+ newFile = dirs + sep + name;
+ else
+ newFile = name;
+
+ if( newFile == GetFileName() )
+ return false;
+
+ wxString ext = TREE_PROJECT_FRAME::GetFileExt( GetType() );
+
+ wxRegEx reg( wxT( "^.*\\" ) + ext + wxT( "$" ), wxRE_ICASE );
+
+ if( check && !ext.IsEmpty() && !reg.Matches( newFile ) )
+ {
+ wxMessageDialog dialog( m_parent, _(
+ "Changing file extension will change file type.\n Do you want to continue ?" ),
+ _( "Rename File" ),
+ wxYES_NO | wxICON_QUESTION );
+
+ if( wxID_YES != dialog.ShowModal() )
+ return false;
+ }
+
+ if( !wxRenameFile( GetFileName(), newFile, false ) )
+ {
+ wxMessageDialog( m_parent, _( "Unable to rename file ... " ),
+ _( "Permission error ?" ), wxICON_ERROR | wxOK );
+ return false;
+ }
+
+ SetFileName( newFile );
+
+ return true;
+}
+
+
+bool TREEPROJECT_ITEM::Delete( bool check )
+{
+ wxString msg = wxString::Format( _(
+ "Do you really want to delete '%s'" ),
+ GetChars( GetFileName() )
+ );
+
+ wxMessageDialog dialog( m_parent, msg,
+ _( "Delete File" ), wxYES_NO | wxICON_QUESTION );
+
+ if( !check || wxID_YES == dialog.ShowModal() )
+ {
+ bool success;
+
+ if( !wxDirExists( GetFileName() ) )
+ success = wxRemoveFile( GetFileName() );
+ else
+ {
+ wxArrayString filelist;
+
+ wxDir::GetAllFiles( GetFileName(), &filelist );
+
+ for( unsigned int i = 0; i < filelist.Count(); i++ )
+ wxRemoveFile( filelist[i] );
+
+ success = wxRmdir( GetFileName() );
+ }
+
+ if( success )
+ m_parent->Delete( GetId() );
+
+ return success;
+ }
+
+ return false;
+}
+
+
+void TREEPROJECT_ITEM::Activate( TREE_PROJECT_FRAME* prjframe )
+{
+ wxString sep = wxFileName().GetPathSeparator();
+ wxString fullFileName = GetFileName();
+ wxTreeItemId id = GetId();
+
+ KICAD_MANAGER_FRAME* frame = prjframe->m_Parent;
+ wxASSERT( frame );
+
+ switch( GetType() )
+ {
+ case TREE_PROJECT:
+ break;
+
+ case TREE_DIRECTORY:
+ m_parent->Toggle( id );
+ break;
+
+ case TREE_SCHEMA:
+ if( fullFileName == frame->SchFileName() )
+ {
+ // the project's schematic is opened using the *.kiface as part of this process.
+ // We do not call frame->RunEeschema( fullFileName ),
+ // because after the double click, for some reason,
+ // the tree project frame is brought to the foreground after Eeschema is called from here.
+ // Instead, we post an event, equivalent to click on the eeschema tool in command frame
+ wxCommandEvent evt( wxEVT_COMMAND_TOOL_CLICKED, ID_TO_SCH );
+ wxPostEvent( frame, evt );
+ }
+ else
+ {
+ // schematics not part of the project are opened in a separate process.
+ frame->Execute( m_parent, EESCHEMA_EXE, fullFileName );
+ }
+ break;
+
+ case TREE_LEGACY_PCB:
+ case TREE_SEXP_PCB:
+ if( fullFileName == frame->PcbFileName() || fullFileName == frame->PcbLegacyFileName() )
+ {
+ // the project's BOARD is opened using the *.kiface as part of this process.
+ // We do not call frame->RunPcbNew( fullFileName ),
+ // because after the double click, for some reason,
+ // the tree project frame is brought to the foreground after PcbNew is called from here.
+ // Instead, we post an event, equivalent to simple click on the pcb editor tool in command frame
+ wxCommandEvent evt( wxEVT_COMMAND_TOOL_CLICKED, ID_TO_PCB );
+ wxPostEvent( frame, evt );
+ }
+ else
+ {
+ // boards not part of the project are opened in a separate process.
+ frame->Execute( m_parent, PCBNEW_EXE, fullFileName );
+ }
+ break;
+
+ case TREE_GERBER:
+ frame->Execute( m_parent, GERBVIEW_EXE, fullFileName );
+ break;
+
+ case TREE_HTML:
+ wxLaunchDefaultBrowser( fullFileName );
+ break;
+
+ case TREE_PDF:
+ OpenPDF( fullFileName );
+ break;
+
+/* No, use a text editor. Netlists can only be handled sanely now from within
+ eeschema's launcher for the *.kiface, NOT THE EXE which is now gone.
+ case TREE_NET:
+ frame->Execute( m_parent, CVPCB_EXE, fullFileName );
+ break;
+*/
+
+ case TREE_TXT:
+ {
+ wxString editorname = Pgm().GetEditorName();
+
+ if( !editorname.IsEmpty() )
+ frame->Execute( m_parent, editorname, fullFileName );
+ }
+ break;
+
+ case TREE_PAGE_LAYOUT_DESCR:
+ frame->Execute( m_parent, PL_EDITOR_EXE, fullFileName );
+ break;
+
+ default:
+ AddDelimiterString( fullFileName );
+ OpenFile( fullFileName );
+ break;
+ }
+}
diff --git a/kicad/class_treeproject_item.h b/kicad/class_treeproject_item.h
new file mode 100644
index 0000000..052f462
--- /dev/null
+++ b/kicad/class_treeproject_item.h
@@ -0,0 +1,84 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2014 Jean-Pierre Charras
+ * Copyright (C) 2004-2014 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef TREEPROJECT_ITEM_H_
+#define TREEPROJECT_ITEM_H_
+
+/**
+ * Class TREEPROJECT_ITEM
+ * handles one item (a file or a directory name) for the tree file
+ */
+class TREEPROJECT_ITEM : public wxTreeItemData
+{
+ //friend class KICAD_MANAGER_FRAME;
+
+public:
+
+ TREEPROJECT_ITEM( TreeFileType type, const wxString& data,
+ wxTreeCtrl* parent );
+
+ TREEPROJECT_ITEM() : m_parent( NULL ) { }
+
+ TREEPROJECT_ITEM( const TREEPROJECT_ITEM& src ) :
+ m_Type( src.m_Type ), m_file_name( src.m_file_name ), m_parent( src.m_parent )
+ {
+ SetState( src.m_state );
+ m_IsPopulated = false;
+ }
+
+ TreeFileType GetType() const { return m_Type; }
+ void SetType( TreeFileType aType ) { m_Type = aType; }
+
+ const wxString& GetFileName() const { return m_file_name; }
+ void SetFileName( const wxString& name ) { m_file_name = name; }
+
+ bool IsRootFile() const { return m_IsRootFile; }
+ void SetRootFile( bool aValue ) { m_IsRootFile = aValue; }
+
+ bool IsPopulated() const { return m_IsPopulated; }
+ void SetPopulated( bool aValue ) { m_IsPopulated = aValue; }
+
+ /**
+ * @return the path of an item.
+ * if this item is a directory, returns the stored filename
+ * if this is a file, returns its path
+ */
+ const wxString GetDir() const;
+
+ bool Rename( const wxString& name, bool check = true );
+ bool Delete( bool check = true );
+ void Activate( TREE_PROJECT_FRAME* prjframe );
+ void SetState( int state );
+
+
+private:
+ TreeFileType m_Type; // = TREE_PROJECT, TREE_DIRECTORY ...
+ wxString m_file_name; // Filename for a file, or directory name
+ bool m_IsRootFile; // True if m_Filename is a root schematic (same name as project)
+ bool m_IsPopulated; // True if the name is a directory, and its content was read
+ wxTreeCtrl* m_parent;
+ int m_state;
+};
+
+#endif // TREEPROJECT_ITEM_H_
diff --git a/kicad/class_treeprojectfiles.cpp b/kicad/class_treeprojectfiles.cpp
new file mode 100644
index 0000000..1d2b317
--- /dev/null
+++ b/kicad/class_treeprojectfiles.cpp
@@ -0,0 +1,112 @@
+/**
+ * @file class_treeprojectfiles.cpp
+ * this is the wxTreeCtrl that shows a KiCad tree project files
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2012 Jean-Pierre Charras
+ * Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+
+#include <kicad.h>
+#include <tree_project_frame.h>
+#include <class_treeprojectfiles.h>
+#include <class_treeproject_item.h>
+
+#include <wx/regex.h>
+#include <wx/imaglist.h>
+#include <menus_helpers.h>
+
+
+IMPLEMENT_ABSTRACT_CLASS( TREEPROJECTFILES, wxTreeCtrl )
+
+
+TREEPROJECTFILES::TREEPROJECTFILES( TREE_PROJECT_FRAME* parent ) :
+ wxTreeCtrl( parent, ID_PROJECT_TREE,
+ wxDefaultPosition, wxDefaultSize,
+ wxTR_HAS_BUTTONS, wxDefaultValidator,
+ wxT( "EDATreeCtrl" ) )
+{
+ m_Parent = parent;
+
+ // icons size is not know (depending on they are built)
+ // so get it:
+ wxSize iconsize;
+ wxBitmap dummy = KiBitmap( eeschema_xpm );
+ iconsize.x = dummy.GetWidth();
+ iconsize.y = dummy.GetHeight();
+
+ // Make an image list containing small icons
+ m_ImageList = new wxImageList( iconsize.x, iconsize.y, true, TREE_MAX );
+
+ m_ImageList->Add( KiBitmap( kicad_icon_small_xpm ) ); // TREE_PROJECT
+ m_ImageList->Add( KiBitmap( eeschema_xpm ) ); // TREE_SCHEMA
+ m_ImageList->Add( KiBitmap( pcbnew_xpm ) ); // TREE_LEGACY_PCB
+ m_ImageList->Add( KiBitmap( pcbnew_xpm ) ); // TREE_SFMT_PCB
+ m_ImageList->Add( KiBitmap( icon_gerbview_small_xpm ) ); // TREE_GERBER
+ m_ImageList->Add( KiBitmap( html_xpm ) ); // TREE_HTML
+ m_ImageList->Add( KiBitmap( datasheet_xpm ) ); // TREE_PDF
+ m_ImageList->Add( KiBitmap( icon_txt_xpm ) ); // TREE_TXT
+ m_ImageList->Add( KiBitmap( netlist_xpm ) ); // TREE_NET
+ m_ImageList->Add( KiBitmap( unknown_xpm ) ); // TREE_UNKNOWN
+ m_ImageList->Add( KiBitmap( directory_xpm ) ); // TREE_DIRECTORY
+ m_ImageList->Add( KiBitmap( icon_cvpcb_small_xpm ) ); // TREE_CMP_LINK
+ m_ImageList->Add( KiBitmap( tools_xpm ) ); // TREE_REPORT
+ m_ImageList->Add( KiBitmap( post_compo_xpm ) ); // TREE_POS
+ m_ImageList->Add( KiBitmap( post_drill_xpm ) ); // TREE_DRILL
+ m_ImageList->Add( KiBitmap( svg_file_xpm ) ); // TREE_SVG
+ m_ImageList->Add( KiBitmap( pagelayout_load_default_xpm ) );// TREE_PAGE_LAYOUT_DESCR
+ m_ImageList->Add( KiBitmap( module_xpm ) ); // TREE_FOOTPRINT_FILE
+ m_ImageList->Add( KiBitmap( library_xpm ) ); // TREE_SCHEMATIC_LIBFILE
+
+ SetImageList( m_ImageList );
+}
+
+
+TREEPROJECTFILES::~TREEPROJECTFILES()
+{
+ delete m_ImageList;
+}
+
+
+int TREEPROJECTFILES::OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 )
+{
+ TREEPROJECT_ITEM* myitem1 = (TREEPROJECT_ITEM*) GetItemData( item1 );
+ TREEPROJECT_ITEM* myitem2 = (TREEPROJECT_ITEM*) GetItemData( item2 );
+
+ if( myitem1->GetType() == TREE_DIRECTORY && myitem2->GetType() != TREE_DIRECTORY )
+ return -1;
+
+ if( myitem2->GetType() == TREE_DIRECTORY && myitem1->GetType() != TREE_DIRECTORY )
+ return 1;
+
+ if( myitem1->IsRootFile() && !myitem2->IsRootFile() )
+ return -1;
+
+ if( myitem2->IsRootFile() && !myitem1->IsRootFile() )
+ return 1;
+
+ return myitem1->GetFileName().CmpNoCase( myitem2->GetFileName() );
+}
+
diff --git a/kicad/class_treeprojectfiles.h b/kicad/class_treeprojectfiles.h
new file mode 100644
index 0000000..d10c53e
--- /dev/null
+++ b/kicad/class_treeprojectfiles.h
@@ -0,0 +1,57 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2014 Jean-Pierre Charras
+ * Copyright (C) 2004-2014 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * file class_treeprojectfiles.h
+ */
+
+#ifndef CLASS_TREEPROJECTFILES_H
+#define CLASS_TREEPROJECTFILES_H
+
+/** Class TREEPROJECTFILES
+ * This is the class to show (as a tree) the files in the project directory
+ */
+class TREEPROJECTFILES : public wxTreeCtrl
+{
+ DECLARE_DYNAMIC_CLASS( TREEPROJECTFILES )
+private:
+ TREE_PROJECT_FRAME* m_Parent;
+ wxImageList* m_ImageList;
+
+public:
+
+ TREE_PROJECT_FRAME* GetParent() const
+ {
+ return m_Parent;
+ }
+
+
+ TREEPROJECTFILES( TREE_PROJECT_FRAME* parent );
+ ~TREEPROJECTFILES();
+private:
+ /* overridden sort function */
+ int OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 );
+};
+
+#endif // CLASS_TREEPROJECTFILES_H
diff --git a/kicad/commandframe.cpp b/kicad/commandframe.cpp
new file mode 100644
index 0000000..dca9580
--- /dev/null
+++ b/kicad/commandframe.cpp
@@ -0,0 +1,116 @@
+/**
+ * @file commandframe.cpp
+ * @brief Frame showing fast launch buttons and messages box
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2012 Jean-Pierre Charras
+ * Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <macros.h>
+
+#include <kicad.h>
+#include <menus_helpers.h>
+
+
+LAUNCHER_PANEL::LAUNCHER_PANEL( wxWindow* parent ) :
+ wxPanel( parent, wxID_ANY )
+{
+ m_bitmapButtons_maxHeigth = 0;
+ m_buttonSeparation = 10; // control of command buttons position
+ m_buttonsListPosition.x = m_buttonSeparation;
+ m_buttonsListPosition.y = m_buttonSeparation;
+ m_buttonLastPosition = m_buttonsListPosition;
+
+ // Add bitmap buttons to launch KiCad utilities:
+ CreateCommandToolbar();
+}
+
+int LAUNCHER_PANEL::GetPanelHeight() const
+{
+ int height = m_buttonsListPosition.y + m_bitmapButtons_maxHeigth
+ + m_buttonSeparation;
+ return height;
+}
+
+/**
+ * Function CreateCommandToolbar
+ * create the buttons to call Eeschema CvPcb, Pcbnew and GerbView
+ */
+void LAUNCHER_PANEL::CreateCommandToolbar()
+{
+ wxBitmapButton* btn;
+
+ btn = AddBitmapButton( ID_TO_SCH, KiBitmap( icon_eeschema_xpm ) );
+ btn->SetToolTip( _( "Eeschema - Electronic schematic editor" ) );
+
+ btn = AddBitmapButton( ID_TO_SCH_LIB_EDITOR, KiBitmap( libedit_icon_xpm ) );
+ btn->SetToolTip( _( "Schematic library editor" ) );
+
+ btn = AddBitmapButton( ID_TO_PCB, KiBitmap( icon_pcbnew_xpm ) );
+ btn->SetToolTip( _( "Pcbnew - Printed circuit board editor" ) );
+
+ btn = AddBitmapButton( ID_TO_PCB_FP_EDITOR, KiBitmap( icon_modedit_xpm ) );
+ btn->SetToolTip( _( "PCB footprint editor" ) );
+
+ btn = AddBitmapButton( ID_TO_GERBVIEW, KiBitmap( icon_gerbview_xpm ) );
+ btn->SetToolTip( _( "GerbView - Gerber viewer" ) );
+
+ btn = AddBitmapButton( ID_TO_BITMAP_CONVERTER, KiBitmap( icon_bitmap2component_xpm ) );
+ btn->SetToolTip( _(
+ "Bitmap2Component - Convert bitmap images to Eeschema\n"
+ "or Pcbnew elements" ) );
+
+ btn = AddBitmapButton( ID_TO_PCB_CALCULATOR, KiBitmap( icon_pcbcalculator_xpm ) );
+ btn->SetToolTip( _( "Pcb calculator - Calculator for components, track width, etc." ) );
+
+ btn = AddBitmapButton( ID_TO_PL_EDITOR, KiBitmap( icon_pagelayout_editor_xpm ) );
+ btn->SetToolTip( _( "Pl editor - Worksheet layout editor" ) );
+}
+
+
+/**
+ * Function AddBitmapButton
+ * add a Bitmap Button (fast launch button) to the buttons panel
+ * @param aId = the button id
+ * @param aBitmap = the wxBitmap used to create the button
+ */
+wxBitmapButton* LAUNCHER_PANEL::AddBitmapButton( wxWindowID aId, const wxBitmap& aBitmap )
+{
+ wxPoint buttPos = m_buttonLastPosition;
+ wxSize buttSize;
+ int btn_margin = 10; // extra margin around the bitmap.
+
+ buttSize.x = aBitmap.GetWidth() + btn_margin;
+ buttSize.y = aBitmap.GetHeight() + btn_margin;
+
+ if( m_bitmapButtons_maxHeigth < buttSize.y )
+ m_bitmapButtons_maxHeigth = buttSize.y;
+
+ wxBitmapButton* btn = new wxBitmapButton( this, aId, aBitmap, buttPos, buttSize );
+ m_buttonLastPosition.x += buttSize.x + m_buttonSeparation;
+
+ return btn;
+}
diff --git a/kicad/dialogs/dialog_template_selector.cpp b/kicad/dialogs/dialog_template_selector.cpp
new file mode 100644
index 0000000..f36f66d
--- /dev/null
+++ b/kicad/dialogs/dialog_template_selector.cpp
@@ -0,0 +1,280 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Brian Sidebotham <brian.sidebotham@gmail.com>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "dialog_template_selector.h"
+
+#include <wx/dir.h>
+#include <wx/settings.h>
+
+
+TEMPLATE_SELECTION_PANEL::TEMPLATE_SELECTION_PANEL( wxNotebookPage* aParent,
+ const wxString& aPath ) :
+ TEMPLATE_SELECTION_PANEL_BASE( aParent )
+{
+ m_parent = aParent;
+ m_templatesPath = aPath;
+}
+
+
+TEMPLATE_WIDGET::TEMPLATE_WIDGET( wxWindow* aParent, DIALOG_TEMPLATE_SELECTOR* aDialog ) :
+ TEMPLATE_WIDGET_BASE( aParent )
+{
+ m_parent = aParent;
+ m_dialog = aDialog;
+
+ // wxWidgets_3.xx way of doing the same...
+ // Bind(wxEVT_LEFT_DOWN, &TEMPLATE_WIDGET::OnMouse, this );
+
+ m_bitmapIcon->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( TEMPLATE_WIDGET::OnMouse ), NULL, this );
+ m_staticTitle->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( TEMPLATE_WIDGET::OnMouse ), NULL, this );
+
+ // We're not selected until we're clicked
+ Unselect();
+
+ // Start with template being NULL
+ m_currTemplate = NULL;
+}
+
+
+void TEMPLATE_WIDGET::Select()
+{
+ m_dialog->SetWidget( this );
+ SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNHIGHLIGHT ) );
+ m_selected = true;
+ Refresh();
+}
+
+
+void TEMPLATE_WIDGET::Unselect()
+{
+ SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+ m_selected = false;
+ Refresh();
+}
+
+
+void TEMPLATE_WIDGET::SetTemplate(PROJECT_TEMPLATE* aTemplate)
+{
+ m_currTemplate = aTemplate;
+ m_staticTitle->SetLabel( *(aTemplate->GetTitle()) );
+ m_bitmapIcon->SetBitmap( *(aTemplate->GetIcon()) );
+}
+
+
+void TEMPLATE_WIDGET::OnMouse( wxMouseEvent& event )
+{
+ // Toggle selection here
+ Select();
+ event.Skip();
+}
+
+
+void DIALOG_TEMPLATE_SELECTOR::onNotebookResize(wxSizeEvent& event)
+{
+ for( size_t i=0; i < m_notebook->GetPageCount(); i++ )
+ {
+ m_panels[i]->SetSize( m_notebook->GetSize().GetWidth() - 6, 140 );
+ m_panels[i]->m_SizerBase->FitInside( m_panels[i] );
+ m_panels[i]->m_scrolledWindow->SetSize( m_panels[i]->GetSize().GetWidth() - 6,
+ m_panels[i]->GetSize().GetHeight() - 6 );
+ m_panels[i]->m_SizerChoice->FitInside( m_panels[i]->m_scrolledWindow );
+ }
+ m_notebook->Refresh();
+
+ event.Skip();
+}
+
+void DIALOG_TEMPLATE_SELECTOR::OnPageChange( wxNotebookEvent& event )
+{
+ int page = m_notebook->GetSelection();
+
+ if( page != wxNOT_FOUND && (unsigned)page < m_panels.size() )
+ m_tcTemplatePath->SetValue( m_panels[page]->GetPath() );
+}
+
+
+DIALOG_TEMPLATE_SELECTOR::DIALOG_TEMPLATE_SELECTOR( wxWindow* aParent ) :
+ DIALOG_TEMPLATE_SELECTOR_BASE( aParent )
+{
+ m_htmlWin->SetPage( _( "<html><h1>Template Selector</h1></html>" ) );
+ m_notebook->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_TEMPLATE_SELECTOR::onNotebookResize ), NULL, this );
+ m_selectedWidget = NULL;
+}
+
+
+void DIALOG_TEMPLATE_SELECTOR::SetWidget( TEMPLATE_WIDGET* aWidget )
+{
+ if( m_selectedWidget != NULL )
+ m_selectedWidget->Unselect();
+
+ m_selectedWidget = aWidget;
+ SetHtml( m_selectedWidget->GetTemplate()->GetHtmlFile() );
+}
+
+void DIALOG_TEMPLATE_SELECTOR::AddTemplate( int aPage, PROJECT_TEMPLATE* aTemplate )
+{
+ TEMPLATE_WIDGET* w = new TEMPLATE_WIDGET( m_panels[aPage]->m_scrolledWindow, this );
+ w->SetTemplate( aTemplate );
+
+ m_panels[aPage]->m_SizerChoice->Add( w );
+ m_panels[aPage]->m_SizerChoice->Layout();
+ m_panels[aPage]->SetSize( m_notebook->GetSize().GetWidth() - 6, 140 );
+ m_panels[aPage]->m_SizerBase->FitInside( m_panels[aPage] );
+ m_panels[aPage]->m_scrolledWindow->SetSize( m_panels[aPage]->GetSize().GetWidth() - 6,
+ m_panels[aPage]->GetSize().GetHeight() - 6 );
+ m_panels[aPage]->m_SizerChoice->FitInside( m_panels[aPage]->m_scrolledWindow );
+
+ m_notebook->Refresh();
+}
+
+
+PROJECT_TEMPLATE* DIALOG_TEMPLATE_SELECTOR::GetSelectedTemplate()
+{
+ return m_selectedWidget? m_selectedWidget->GetTemplate() : NULL;
+}
+
+void DIALOG_TEMPLATE_SELECTOR::AddTemplatesPage( const wxString& aTitle, wxFileName& aPath )
+{
+ wxNotebookPage* newPage = new wxNotebookPage( m_notebook, wxID_ANY );
+
+ aPath.Normalize();
+ wxString path = aPath.GetFullPath(); // caller ensures this ends with file separator.
+
+ TEMPLATE_SELECTION_PANEL* tpanel = new TEMPLATE_SELECTION_PANEL( newPage, path );
+ m_panels.push_back( tpanel );
+
+ m_notebook->AddPage( newPage, aTitle );
+
+ if( m_notebook->GetPageCount() == 1 )
+ m_tcTemplatePath->SetValue( path );
+
+ buildPageContent( path, m_notebook->GetPageCount() - 1 );
+}
+
+void DIALOG_TEMPLATE_SELECTOR::buildPageContent( const wxString& aPath, int aPage )
+{
+ // Get a list of files under the template path to include as choices...
+ wxArrayString files;
+ wxDir dir;
+
+ if( dir.Open( aPath ) )
+ {
+ wxDir sub_dir;
+ wxString sub_name;
+
+ bool cont = dir.GetFirst( &sub_name, wxEmptyString, wxDIR_DIRS );
+ while( cont )
+ {
+ wxString sub_full = aPath + sub_name;
+ if( sub_dir.Open( sub_full ) )
+ {
+ files.Add( sub_name );
+
+ PROJECT_TEMPLATE* pt = new PROJECT_TEMPLATE( sub_full );
+ AddTemplate( aPage, pt );
+ }
+
+ cont = dir.GetNext( &sub_name );
+ }
+ }
+}
+
+
+void DIALOG_TEMPLATE_SELECTOR::onDirectoryBrowseClicked( wxCommandEvent& event )
+{
+ wxFileName fn;
+ fn.AssignDir( m_tcTemplatePath->GetValue() );
+ fn.Normalize();
+ wxString currPath = fn.GetFullPath();
+
+ wxDirDialog dirDialog( this, _( "Select Templates Directory" ),
+ currPath,
+ wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST );
+
+ if( dirDialog.ShowModal() != wxID_OK )
+ return;
+
+ wxFileName dirName = wxFileName::DirName( dirDialog.GetPath() );
+
+ m_tcTemplatePath->SetValue( dirName.GetFullPath() );
+
+ if( currPath == m_tcTemplatePath->GetValue() )
+ return; // No change
+
+ // Rebuild the page from the new templates path:
+ replaceCurrentPage();
+}
+
+
+void DIALOG_TEMPLATE_SELECTOR::onValidatePath( wxCommandEvent& event )
+{
+ int page = m_notebook->GetSelection();
+
+ if( page < 0 )
+ return; // Should not happen
+
+ wxString currPath = m_tcTemplatePath->GetValue();
+
+ if( currPath == m_panels[page]->GetPath() ) // No change
+ return;
+
+ wxFileName fn;
+ fn.AssignDir( m_tcTemplatePath->GetValue() );
+ fn.Normalize();
+ currPath = fn.GetFullPath();
+ m_tcTemplatePath->SetValue( currPath );
+
+ replaceCurrentPage();
+}
+
+
+void DIALOG_TEMPLATE_SELECTOR::replaceCurrentPage()
+{
+ // Rebuild the page from the new templates path:
+ int page = m_notebook->GetSelection();
+
+ if( page < 0 )
+ return; // Should not happen
+
+ wxString title = m_notebook->GetPageText( page );
+ wxString currPath = m_tcTemplatePath->GetValue();
+
+ m_notebook->DeletePage( page );
+
+ wxNotebookPage* newPage = new wxNotebookPage( m_notebook, wxID_ANY );
+ TEMPLATE_SELECTION_PANEL* tpanel = new TEMPLATE_SELECTION_PANEL( newPage, currPath );
+ m_panels[page] = tpanel;
+ m_notebook->InsertPage( page, newPage, title, true );
+
+ buildPageContent( m_tcTemplatePath->GetValue(), page );
+
+ m_selectedWidget = NULL;
+}
+
+
+void DIALOG_TEMPLATE_SELECTOR::OnHtmlLinkActivated( wxHtmlLinkEvent& event )
+{
+ wxString url = event.GetLinkInfo().GetHref();
+ wxLaunchDefaultBrowser( url);
+}
diff --git a/kicad/dialogs/dialog_template_selector.fbp b/kicad/dialogs/dialog_template_selector.fbp
new file mode 100644
index 0000000..687a923
--- /dev/null
+++ b/kicad/dialogs/dialog_template_selector.fbp
@@ -0,0 +1,1105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_template_selector_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">DIALOG_TEMPLATE_SELECTOR_BASE</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center">wxBOTH</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size">640,480</property>
+ <property name="name">DIALOG_TEMPLATE_SELECTOR_BASE</property>
+ <property name="pos"></property>
+ <property name="size">640,480</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title">Project Template Selector</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bmainSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">3</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxNotebook" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmapsize"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size">-1,-1</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_notebook</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnNotebookPageChanged">OnPageChange</event>
+ <event name="OnNotebookPageChanging"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">3</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxHtmlWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_htmlWin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size">-1,-1</property>
+ <property name="style">wxHW_SCROLLBAR_AUTO</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHtmlCellClicked"></event>
+ <event name="OnHtmlCellHover"></event>
+ <event name="OnHtmlLinkClicked">OnHtmlLinkActivated</event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Template path</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextTpath</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bsizerTemplateSelector</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_tcTemplatePath</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_PROCESS_ENTER</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Browse</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonBrowse</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxBU_EXACTFIT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">onDirectoryBrowseClicked</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Validate</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonValidate</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxBU_EXACTFIT</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">onValidatePath</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">3</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick"></event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick"></event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="Panel" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size">-1,-1</property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="name">TEMPLATE_SELECTION_PANEL_BASE</property>
+ <property name="pos"></property>
+ <property name="size">-1,140</property>
+ <property name="subclass"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxNO_BORDER|wxTAB_TRAVERSAL</property>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerBase</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">public</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">3</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxScrolledWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_scrolledWindow</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">public</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="scroll_rate_x">5</property>
+ <property name="scroll_rate_y">5</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxHSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerChoice</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">public</property>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="Panel" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size">74,-1</property>
+ <property name="minimum_size">74,-1</property>
+ <property name="name">TEMPLATE_WIDGET_BASE</property>
+ <property name="pos"></property>
+ <property name="size">74,-1</property>
+ <property name="subclass"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxTAB_TRAVERSAL</property>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer4</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">3</property>
+ <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticBitmap" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmap"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_bitmapIcon</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size">64,64</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">3</property>
+ <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Project Template Title</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTitle</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">150</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/kicad/dialogs/dialog_template_selector.h b/kicad/dialogs/dialog_template_selector.h
new file mode 100644
index 0000000..17a7a62
--- /dev/null
+++ b/kicad/dialogs/dialog_template_selector.h
@@ -0,0 +1,128 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Brian Sidebotham <brian.sidebotham@gmail.com>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef PROJECT_TEMPLATE_SELECTOR_H
+#define PROJECT_TEMPLATE_SELECTOR_H
+
+#include <dialogs/dialog_template_selector_base.h>
+#include "project_template.h"
+
+class DIALOG_TEMPLATE_SELECTOR;
+
+class TEMPLATE_WIDGET : public TEMPLATE_WIDGET_BASE
+{
+protected:
+ DIALOG_TEMPLATE_SELECTOR* m_dialog;
+ wxWindow* m_parent;
+ wxPanel* m_panel;
+ bool m_selected;
+
+ PROJECT_TEMPLATE* m_currTemplate;
+
+ void OnKillFocus( wxFocusEvent& event );
+ void OnMouse( wxMouseEvent& event );
+
+public:
+ TEMPLATE_WIDGET( wxWindow* aParent, DIALOG_TEMPLATE_SELECTOR* aDialog );
+
+ /**
+ * Set the project template for this widget, which will determine the icon and title
+ * associated with this project template widget
+ */
+ void SetTemplate(PROJECT_TEMPLATE* aTemplate);
+
+ PROJECT_TEMPLATE* GetTemplate() { return m_currTemplate; }
+
+ void Select();
+ void Unselect();
+
+private:
+ bool IsSelected() { return m_selected; }
+};
+
+
+class TEMPLATE_SELECTION_PANEL : public TEMPLATE_SELECTION_PANEL_BASE
+{
+protected:
+ wxNotebookPage* m_parent;
+ wxString m_templatesPath; ///< the path to access to the folder
+ ///< containing the templates (which are also folders)
+
+public:
+ /**
+ * @param aParent The window creating the dialog
+ * @param aPath the path
+ */
+ TEMPLATE_SELECTION_PANEL( wxNotebookPage* aParent, const wxString& aPath );
+
+ const wxString& GetPath() { return m_templatesPath; }
+};
+
+
+class DIALOG_TEMPLATE_SELECTOR : public DIALOG_TEMPLATE_SELECTOR_BASE
+{
+protected:
+ std::vector<TEMPLATE_SELECTION_PANEL*> m_panels;
+ TEMPLATE_WIDGET* m_selectedWidget;
+
+ void AddTemplate( int aPage, PROJECT_TEMPLATE* aTemplate );
+
+public:
+ DIALOG_TEMPLATE_SELECTOR( wxWindow* aParent );
+
+ /**
+ * Add a new page with \a aTitle, populated with templates from \a aPath
+ * - All directories under the path are treated as templates
+ * @param aTitle = the title of the wxNoteBook page
+ * @param aPath = the path of the main folder containing templates
+ */
+ void AddTemplatesPage( const wxString& aTitle, wxFileName& aPath );
+
+ /**
+ * @return the selected template, or NULL
+ */
+ PROJECT_TEMPLATE* GetSelectedTemplate();
+
+private:
+
+ void SetHtml( wxFileName aFilename )
+ {
+ m_htmlWin->LoadPage( aFilename.GetFullPath() );
+ }
+
+public:
+ void SetWidget( TEMPLATE_WIDGET* aWidget );
+
+private:
+ void buildPageContent( const wxString& aPath, int aPage );
+ void replaceCurrentPage();
+
+ void onNotebookResize( wxSizeEvent& event );
+ void OnPageChange( wxNotebookEvent& event );
+ void onDirectoryBrowseClicked( wxCommandEvent& event );
+ void onValidatePath( wxCommandEvent& event );
+ void OnHtmlLinkActivated( wxHtmlLinkEvent& event );
+};
+
+#endif
diff --git a/kicad/dialogs/dialog_template_selector_base.cpp b/kicad/dialogs/dialog_template_selector_base.cpp
new file mode 100644
index 0000000..7328f89
--- /dev/null
+++ b/kicad/dialogs/dialog_template_selector_base.cpp
@@ -0,0 +1,125 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_template_selector_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_TEMPLATE_SELECTOR_BASE::DIALOG_TEMPLATE_SELECTOR_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxSize( 640,480 ), wxDefaultSize );
+
+ wxBoxSizer* bmainSizer;
+ bmainSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ bmainSizer->Add( m_notebook, 0, wxEXPAND | wxALL, 3 );
+
+ m_htmlWin = new wxHtmlWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHW_SCROLLBAR_AUTO );
+ bmainSizer->Add( m_htmlWin, 1, wxALL|wxEXPAND, 3 );
+
+ m_staticTextTpath = new wxStaticText( this, wxID_ANY, _("Template path"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTpath->Wrap( -1 );
+ bmainSizer->Add( m_staticTextTpath, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bsizerTemplateSelector;
+ bsizerTemplateSelector = new wxBoxSizer( wxHORIZONTAL );
+
+ m_tcTemplatePath = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
+ bsizerTemplateSelector->Add( m_tcTemplatePath, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonBrowse = new wxButton( this, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ bsizerTemplateSelector->Add( m_buttonBrowse, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
+
+ m_buttonValidate = new wxButton( this, wxID_ANY, _("Validate"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ bsizerTemplateSelector->Add( m_buttonValidate, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bmainSizer->Add( bsizerTemplateSelector, 0, wxEXPAND, 5 );
+
+ m_staticline = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bmainSizer->Add( m_staticline, 0, wxEXPAND | wxALL, 5 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer->AddButton( m_sdbSizerCancel );
+ m_sdbSizer->Realize();
+
+ bmainSizer->Add( m_sdbSizer, 0, wxALL|wxEXPAND, 3 );
+
+
+ this->SetSizer( bmainSizer );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ m_notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::OnPageChange ), NULL, this );
+ m_htmlWin->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::OnHtmlLinkActivated ), NULL, this );
+ m_buttonBrowse->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::onDirectoryBrowseClicked ), NULL, this );
+ m_buttonValidate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::onValidatePath ), NULL, this );
+}
+
+DIALOG_TEMPLATE_SELECTOR_BASE::~DIALOG_TEMPLATE_SELECTOR_BASE()
+{
+ // Disconnect Events
+ m_notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::OnPageChange ), NULL, this );
+ m_htmlWin->Disconnect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::OnHtmlLinkActivated ), NULL, this );
+ m_buttonBrowse->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::onDirectoryBrowseClicked ), NULL, this );
+ m_buttonValidate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEMPLATE_SELECTOR_BASE::onValidatePath ), NULL, this );
+
+}
+
+TEMPLATE_SELECTION_PANEL_BASE::TEMPLATE_SELECTION_PANEL_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+ m_SizerBase = new wxBoxSizer( wxHORIZONTAL );
+
+ m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL );
+ m_scrolledWindow->SetScrollRate( 5, 5 );
+ m_SizerChoice = new wxBoxSizer( wxHORIZONTAL );
+
+
+ m_scrolledWindow->SetSizer( m_SizerChoice );
+ m_scrolledWindow->Layout();
+ m_SizerChoice->Fit( m_scrolledWindow );
+ m_SizerBase->Add( m_scrolledWindow, 0, wxEXPAND | wxALL, 3 );
+
+
+ this->SetSizer( m_SizerBase );
+ this->Layout();
+}
+
+TEMPLATE_SELECTION_PANEL_BASE::~TEMPLATE_SELECTION_PANEL_BASE()
+{
+}
+
+TEMPLATE_WIDGET_BASE::TEMPLATE_WIDGET_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+ this->SetMinSize( wxSize( 74,-1 ) );
+ this->SetMaxSize( wxSize( 74,-1 ) );
+
+ wxBoxSizer* bSizer4;
+ bSizer4 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapIcon = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 64,64 ), 0 );
+ bSizer4->Add( m_bitmapIcon, 0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3 );
+
+ m_staticTitle = new wxStaticText( this, wxID_ANY, _("Project Template Title"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTitle->Wrap( 150 );
+ bSizer4->Add( m_staticTitle, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3 );
+
+
+ this->SetSizer( bSizer4 );
+ this->Layout();
+}
+
+TEMPLATE_WIDGET_BASE::~TEMPLATE_WIDGET_BASE()
+{
+}
diff --git a/kicad/dialogs/dialog_template_selector_base.h b/kicad/dialogs/dialog_template_selector_base.h
new file mode 100644
index 0000000..6bfcbea
--- /dev/null
+++ b/kicad/dialogs/dialog_template_selector_base.h
@@ -0,0 +1,110 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_TEMPLATE_SELECTOR_BASE_H__
+#define __DIALOG_TEMPLATE_SELECTOR_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/gdicmn.h>
+#include <wx/notebook.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/html/htmlwin.h>
+#include <wx/stattext.h>
+#include <wx/textctrl.h>
+#include <wx/button.h>
+#include <wx/sizer.h>
+#include <wx/statline.h>
+#include <wx/dialog.h>
+#include <wx/scrolwin.h>
+#include <wx/panel.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/statbmp.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_TEMPLATE_SELECTOR_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_TEMPLATE_SELECTOR_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxNotebook* m_notebook;
+ wxHtmlWindow* m_htmlWin;
+ wxStaticText* m_staticTextTpath;
+ wxTextCtrl* m_tcTemplatePath;
+ wxButton* m_buttonBrowse;
+ wxButton* m_buttonValidate;
+ wxStaticLine* m_staticline;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+ wxButton* m_sdbSizerCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnPageChange( wxNotebookEvent& event ) { event.Skip(); }
+ virtual void OnHtmlLinkActivated( wxHtmlLinkEvent& event ) { event.Skip(); }
+ virtual void onDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onValidatePath( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_TEMPLATE_SELECTOR_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Project Template Selector"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 640,480 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_TEMPLATE_SELECTOR_BASE();
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class TEMPLATE_SELECTION_PANEL_BASE
+///////////////////////////////////////////////////////////////////////////////
+class TEMPLATE_SELECTION_PANEL_BASE : public wxPanel
+{
+ private:
+
+ protected:
+
+ public:
+ wxBoxSizer* m_SizerBase;
+ wxScrolledWindow* m_scrolledWindow;
+ wxBoxSizer* m_SizerChoice;
+
+ TEMPLATE_SELECTION_PANEL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,140 ), long style = wxNO_BORDER|wxTAB_TRAVERSAL );
+ ~TEMPLATE_SELECTION_PANEL_BASE();
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class TEMPLATE_WIDGET_BASE
+///////////////////////////////////////////////////////////////////////////////
+class TEMPLATE_WIDGET_BASE : public wxPanel
+{
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmapIcon;
+ wxStaticText* m_staticTitle;
+
+ public:
+
+ TEMPLATE_WIDGET_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 74,-1 ), long style = wxTAB_TRAVERSAL );
+ ~TEMPLATE_WIDGET_BASE();
+
+};
+
+#endif //__DIALOG_TEMPLATE_SELECTOR_BASE_H__
diff --git a/kicad/file_pro.icns b/kicad/file_pro.icns
new file mode 100644
index 0000000..28921b1
--- /dev/null
+++ b/kicad/file_pro.icns
Binary files differ
diff --git a/kicad/files-io.cpp b/kicad/files-io.cpp
new file mode 100644
index 0000000..805c722
--- /dev/null
+++ b/kicad/files-io.cpp
@@ -0,0 +1,249 @@
+/**
+ * @file kicad/files-io.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2017 Jean-Pierre Charras
+ * Copyright (C) 2004-2017 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <pgm_kicad.h>
+#include <kiway.h>
+#include <wx/fs_zip.h>
+#include <wx/zipstrm.h>
+#include <wx/docview.h>
+#include <wx/wfstream.h>
+#include <wx/zstream.h>
+#include <wx/dir.h>
+
+#include <confirm.h>
+#include <gestfich.h>
+#include <macros.h>
+
+#include <kicad.h>
+
+#define ZipFileExtension wxT( "zip" )
+#define ZipFileWildcard _( "Zip file (*.zip)|*.zip" )
+
+
+void KICAD_MANAGER_FRAME::OnFileHistory( wxCommandEvent& event )
+{
+ wxString fn = GetFileFromHistory( event.GetId(),
+ _( "KiCad project file" ), &Pgm().GetFileHistory() );
+
+ if( fn.size() )
+ {
+ // Any open KIFACE's must be closed before changing the project.
+ // We never want a KIWAY_PLAYER open on a KIWAY that isn't in the same project,
+ // and then break one project.
+ // Remember when saving files, the full path is build from the current project path
+ // User is prompted here to close those KIWAY_PLAYERs:
+ if( !Kiway.PlayersClose( false ) )
+ return;
+
+ // We can now set the new project filename and load this project
+ SetProjectFileName( fn );
+ wxCommandEvent cmd( 0, wxID_ANY );
+ OnLoadProject( cmd );
+ }
+}
+
+
+void KICAD_MANAGER_FRAME::OnUnarchiveFiles( wxCommandEvent& event )
+{
+ wxFileName fn = GetProjectFileName();
+
+ fn.SetExt( ZipFileExtension );
+
+ wxFileDialog zipfiledlg( this, _( "Unzip Project" ), fn.GetPath(),
+ fn.GetFullName(), ZipFileWildcard,
+ wxFD_OPEN | wxFD_FILE_MUST_EXIST );
+
+ if( zipfiledlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ wxString msg = wxString::Format( _("\nOpen '%s'\n" ), GetChars( zipfiledlg.GetPath() ) );
+ PrintMsg( msg );
+
+ wxDirDialog dirDlg( this, _( "Target Directory" ), fn.GetPath(),
+ wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST );
+
+ if( dirDlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ wxString unzipDir = dirDlg.GetPath() + wxT( "/" );
+ msg.Printf( _( "Unzipping project in '%s'\n" ), GetChars( unzipDir ) );
+ PrintMsg( msg );
+
+ wxFileSystem zipfilesys;
+
+ zipfilesys.AddHandler( new wxZipFSHandler );
+ zipfilesys.ChangePathTo( zipfiledlg.GetPath() + wxT( "#zip:" ), true );
+
+ wxFSFile* zipfile = NULL;
+ wxString localfilename = zipfilesys.FindFirst( wxT( "*.*" ) );
+
+ while( !localfilename.IsEmpty() )
+ {
+ zipfile = zipfilesys.OpenFile( localfilename );
+ if( !zipfile )
+ {
+ DisplayError( this, wxT( "Zip file read error" ) );
+ break;
+ }
+
+ wxFileName uzfn = localfilename.AfterLast( ':' );
+ uzfn.MakeAbsolute( unzipDir );
+ wxString unzipfilename = uzfn.GetFullPath();
+
+ msg.Printf( _( "Extract file '%s'" ), GetChars( unzipfilename ) );
+ PrintMsg( msg );
+
+ wxInputStream* stream = zipfile->GetStream();
+ wxFFileOutputStream* ofile = new wxFFileOutputStream( unzipfilename );
+
+ if( ofile->Ok() )
+ {
+ ofile->Write( *stream );
+ PrintMsg( _( " OK\n" ) );
+ }
+ else
+ PrintMsg( _( " *ERROR*\n" ) );
+
+ delete ofile;
+ delete zipfile;
+
+ localfilename = zipfilesys.FindNext();
+ }
+
+ PrintMsg( wxT( "** end **\n" ) );
+}
+
+
+void KICAD_MANAGER_FRAME::OnArchiveFiles( wxCommandEvent& event )
+{
+ // List of file extensions to save.
+ static const wxChar* extentionList[] = {
+ wxT( "*.sch" ), wxT( "*.lib" ), wxT( "*.mod" ), wxT( "*.cmp" ),
+ wxT( "*.brd" ), wxT( "*.kicad_pcb" ), wxT( "*.gbr" ), wxT( "*.pos" ),
+ wxT( "*.net" ), wxT( "*.pro" ), wxT( "*.drl" ), wxT( "*.py" ),
+ wxT( "*.pdf" ), wxT( "*.txt" ), wxT( "*.dcm" ), wxT( "*.kicad_wks" ),
+ };
+
+ wxString msg;
+ wxFileName fileName = GetProjectFileName();
+ wxString oldCwd = wxGetCwd();
+
+ fileName.SetExt( wxT( "zip" ) );
+
+ wxFileDialog dlg( this, _( "Archive Project Files" ),
+ fileName.GetPath(), fileName.GetFullName(),
+ ZipFileWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
+
+ if( dlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ wxFileName zip = dlg.GetPath();
+
+ wxString currdirname = fileName.GetPathWithSep();
+ wxDir dir( currdirname );
+
+ if( !dir.IsOpened() ) // wxWidgets display a error message on issue.
+ return;
+
+ wxSetWorkingDirectory( currdirname );
+
+ // Prepare the zip file
+ wxString zipfilename = zip.GetFullPath();
+
+ wxFFileOutputStream ostream( zipfilename );
+
+ if( !ostream.IsOk() ) // issue to create the file. Perhaps not writable dir
+ {
+ wxMessageBox( wxString::Format( _( "Unable to create zip archive file '%s'" ), zipfilename ) );
+ return;
+ }
+
+ wxZipOutputStream zipstream( ostream );
+
+ // Build list of filenames to put in zip archive
+ wxString currFilename;
+
+ wxArrayString files;
+
+ for( unsigned ii = 0; ii < DIM( extentionList ); ii++ )
+ wxDir::GetAllFiles( currdirname, &files, extentionList[ii] );
+
+ files.Sort();
+
+ int zipBytesCnt = 0;
+
+ for( unsigned ii = 0; ii < files.GetCount(); ii++ )
+ {
+ wxFileSystem fsfile;
+
+ wxFileName curr_fn( files[ii] );
+ curr_fn.MakeRelativeTo( currdirname );
+ currFilename = curr_fn.GetFullPath();
+
+ msg.Printf( _( "Archive file <%s>" ), GetChars( currFilename ) );
+ PrintMsg( msg );
+
+ // Read input file and add it to the zip file:
+ wxFSFile* infile = fsfile.OpenFile( currFilename );
+
+ if( infile )
+ {
+ zipstream.PutNextEntry( currFilename, infile->GetModificationTime() );
+ infile->GetStream()->Read( zipstream );
+ zipstream.CloseEntry();
+ int zippedsize = zipstream.GetSize() - zipBytesCnt;
+ zipBytesCnt = zipstream.GetSize();
+ PrintMsg( wxT(" ") );
+ msg.Printf( _( "(%lu bytes, compressed %d bytes)\n" ),
+ (unsigned long)infile->GetStream()->GetSize(), zippedsize );
+ PrintMsg( msg );
+ delete infile;
+ }
+ else
+ PrintMsg( _( " >>Error\n" ) );
+ }
+
+ zipBytesCnt = ostream.GetSize();
+
+ if( zipstream.Close() )
+ {
+ msg.Printf( _( "\nZip archive <%s> created (%d bytes)" ),
+ GetChars( zipfilename ), zipBytesCnt );
+ PrintMsg( msg );
+ PrintMsg( wxT( "\n** end **\n" ) );
+ }
+ else
+ {
+ msg.Printf( wxT( "Unable to create archive <%s>, abort\n" ),
+ GetChars( zipfilename ) );
+ PrintMsg( msg );
+ }
+
+ wxSetWorkingDirectory( oldCwd );
+}
diff --git a/kicad/kicad.cpp b/kicad/kicad.cpp
new file mode 100644
index 0000000..4a2d25a
--- /dev/null
+++ b/kicad/kicad.cpp
@@ -0,0 +1,310 @@
+/**
+ * @file kicad.cpp
+ * @brief Main KiCad Project manager file
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <macros.h>
+#include <fctsys.h>
+#include <wx/stdpaths.h>
+#include <kicad.h>
+#include <kiway.h>
+#include <pgm_kicad.h>
+#include <tree_project_frame.h>
+#include <online_help.h>
+#include <wildcards_and_files_ext.h>
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <hotkeys_basic.h>
+
+#include <build_version.h>
+
+
+// a dummy to quiet linking with EDA_BASE_FRAME::config();
+#include <kiface_i.h>
+KIFACE_I& Kiface()
+{
+ // This function should never be called. It is only referenced from
+ // EDA_BASE_FRAME::config() and this is only provided to satisfy the linker,
+ // not to be actually called.
+ wxLogFatalError( wxT( "Unexpected call to Kiface() in kicad/kicad.cpp" ) );
+
+ return (KIFACE_I&) *(KIFACE_I*) 0;
+}
+
+static PGM_KICAD program;
+
+PGM_KICAD& Pgm()
+{
+ return program;
+}
+
+
+bool PGM_KICAD::OnPgmInit( wxApp* aWxApp )
+{
+ m_wx_app = aWxApp; // first thing.
+
+ wxString absoluteArgv0 = wxStandardPaths::Get().GetExecutablePath();
+
+ if( !wxIsAbsolutePath( absoluteArgv0 ) )
+ {
+ wxLogError( wxT( "No meaningful argv[0]" ) );
+ return false;
+ }
+
+ if( !initPgm() )
+ return false;
+
+ m_bm.Init();
+
+ // Add search paths to feed the PGM_KICAD::SysSearch() function,
+ // currenly limited in support to only look for project templates
+ {
+ SEARCH_STACK bases;
+
+ SystemDirsAppend( &bases );
+
+ // DBG( bases.Show( (std::string(__func__) + " bases").c_str() );)
+
+ for( unsigned i = 0; i < bases.GetCount(); ++i )
+ {
+ wxFileName fn( bases[i], wxEmptyString );
+
+ // Add KiCad template file path to search path list.
+ fn.AppendDir( wxT( "template" ) );
+ m_bm.m_search.AddPaths( fn.GetPath() );
+ }
+
+ //DBG( m_bm.m_search.Show( (std::string( __func__ ) + " SysSearch()").c_str() );)
+ }
+
+ // Must be called before creating the main frame in order to
+ // display the real hotkeys in menus or tool tips
+ extern struct EDA_HOTKEY_CONFIG kicad_Manager_Hokeys_Descr[];
+ ReadHotkeyConfig( KICAD_MANAGER_FRAME_NAME, kicad_Manager_Hokeys_Descr );
+
+ KICAD_MANAGER_FRAME* frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ),
+ wxDefaultPosition, wxDefaultSize );
+ App().SetTopWindow( frame );
+
+ Kiway.SetTop( frame );
+
+ bool prjloaded = false; // true when the project is loaded
+
+ if( App().argc > 1 )
+ frame->SetProjectFileName( App().argv[1] );
+
+ else if( GetFileHistory().GetCount() )
+ {
+ wxString last_pro = GetFileHistory().GetHistoryFile( 0 );
+
+ if( !wxFileExists( last_pro ) )
+ {
+ GetFileHistory().RemoveFileFromHistory( 0 );
+
+ wxFileName namelessProject( wxStandardPaths::Get().GetDocumentsDir(), NAMELESS_PROJECT,
+ ProjectFileExtension );
+
+ frame->SetProjectFileName( namelessProject.GetFullPath() );
+ }
+ else
+ {
+ // Try to open the last opened project,
+ // if a project name is not given when starting Kicad
+ frame->SetProjectFileName( last_pro );
+
+ wxCommandEvent cmd( 0, wxID_FILE1 );
+
+ frame->OnFileHistory( cmd );
+ prjloaded = true; // OnFileHistory() loads the project
+ }
+ }
+ else // there is no history
+ {
+ wxFileName namelessProject( wxStandardPaths::Get().GetDocumentsDir(), NAMELESS_PROJECT,
+ ProjectFileExtension );
+
+ frame->SetProjectFileName( namelessProject.GetFullPath() );
+ }
+
+ if( !prjloaded )
+ {
+ wxCommandEvent cmd( 0, wxID_ANY );
+
+ frame->OnLoadProject( cmd );
+ }
+
+ frame->Show( true );
+ frame->Raise();
+
+ return true;
+}
+
+
+void PGM_KICAD::OnPgmExit()
+{
+ Kiway.OnKiwayEnd();
+
+ saveCommonSettings();
+
+ // write common settings to disk, and destroy everything in PGM_KICAD,
+ // especially wxSingleInstanceCheckerImpl earlier than wxApp and earlier
+ // than static destruction would.
+ destroy();
+}
+
+
+void PGM_KICAD::MacOpenFile( const wxString& aFileName )
+{
+#if defined(__WXMAC__)
+
+ KICAD_MANAGER_FRAME* frame = (KICAD_MANAGER_FRAME*) App().GetTopWindow();
+
+ frame->SetProjectFileName( aFileName );
+
+ wxCommandEvent loadEvent( 0, wxID_ANY );
+
+ frame->OnLoadProject( loadEvent );
+#endif
+}
+
+
+void PGM_KICAD::destroy()
+{
+ // unlike a normal destructor, this is designed to be called more
+ // than once safely:
+
+ m_bm.End();
+
+ PGM_BASE::destroy();
+}
+
+
+KIWAY Kiway( &Pgm(), KFCTL_CPP_PROJECT_SUITE );
+
+
+/**
+ * Struct APP_KICAD
+ * is not publicly visible because most of the action is in PGM_KICAD these days.
+ */
+struct APP_KICAD : public wxApp
+{
+#if defined (__LINUX__)
+ APP_KICAD(): wxApp()
+ {
+ // Disable proxy menu in Unity window manager. Only usual menubar works with wxWidgets (at least <= 3.1)
+ // When the proxy menu menubar is enable, some important things for us do not work: menuitems UI events and shortcuts.
+ wxString wm;
+
+ if( wxGetEnv( wxT( "XDG_CURRENT_DESKTOP" ), &wm ) && wm.CmpNoCase( wxT( "Unity" ) ) == 0 )
+ {
+ wxSetEnv ( wxT("UBUNTU_MENUPROXY" ), wxT( "0" ) );
+ }
+ }
+#endif
+
+ bool OnInit() // overload wxApp virtual
+ {
+ // if( Kiways.OnStart( this ) )
+ {
+ return Pgm().OnPgmInit( this );
+ }
+ return false;
+ }
+
+ int OnExit() // overload wxApp virtual
+ {
+ // Kiways.OnEnd();
+
+ Pgm().OnPgmExit();
+
+ return wxApp::OnExit();
+ }
+
+ int OnRun() // overload wxApp virtual
+ {
+ try
+ {
+ return wxApp::OnRun();
+ }
+ catch( const std::exception& e )
+ {
+ wxLogError( wxT( "Unhandled exception class: %s what: %s" ),
+ GetChars( FROM_UTF8( typeid(e).name() )),
+ GetChars( FROM_UTF8( e.what() ) ) );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxLogError( GetChars( ioe.errorText ) );
+ }
+ catch(...)
+ {
+ wxLogError( wxT( "Unhandled exception of unknown type" ) );
+ }
+
+ return -1;
+ }
+
+ /**
+ * Function MacOpenFile
+ * is specific to MacOSX (not used under Linux or Windows).
+ * MacOSX requires it for file association.
+ * @see http://wiki.wxwidgets.org/WxMac-specific_topics
+ */
+ void MacOpenFile( const wxString& aFileName ) // overload wxApp virtual
+ {
+ Pgm().MacOpenFile( aFileName );
+ }
+};
+
+IMPLEMENT_APP( APP_KICAD );
+
+
+// The C++ project manager supports one open PROJECT, so Prj() calls within
+// this link image need this function.
+PROJECT& Prj()
+{
+ return Kiway.Prj();
+}
+
+
+#if 0 // there can be only one in C++ project manager.
+
+bool KIWAY_MGR::OnStart( wxApp* aProcess )
+{
+ // The C++ project manager supports only one open PROJECT
+ // We should need no copy constructor for KIWAY to push a pointer.
+ m_kiways.push_back( new KIWAY() );
+
+ return true;
+}
+
+
+void KIWAY_MGR::OnEnd()
+{
+}
+
+#endif
diff --git a/kicad/kicad.h b/kicad/kicad.h
new file mode 100644
index 0000000..aa98820
--- /dev/null
+++ b/kicad/kicad.h
@@ -0,0 +1,337 @@
+/**
+ * @file kicad/kicad.h
+ * @brief KICAD_MANAGER_FRAME is the KiCad main frame.
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN (www.cern.ch)
+ * Copyright (C) 2015 KiCad Developers, see CHANGELOG.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef KICAD_H
+#define KICAD_H
+
+#include <vector>
+
+#include <wx/treectrl.h>
+#include <wx/dragimag.h>
+#include <wx/filename.h>
+#include <wx/process.h>
+
+#include <id.h>
+#include <wxstruct.h>
+
+#define KICAD_MANAGER_FRAME_NAME wxT( "KicadFrame" )
+
+class LAUNCHER_PANEL;
+class TREEPROJECTFILES;
+class TREE_PROJECT_FRAME;
+
+// Enum to identify the type of files handled by Kicad manager
+//
+// When changing this enum please verify (and perhaps update)
+// TREE_PROJECT_FRAME::GetFileExt(),
+// s_AllowedExtensionsToList[]
+
+enum TreeFileType {
+ TREE_PROJECT = 1,
+ TREE_SCHEMA, // Schematic file (.sch)
+ TREE_LEGACY_PCB, // board file (.brd) legacy format
+ TREE_SEXP_PCB, // board file (.kicad_brd) new s expression format
+ TREE_GERBER, // Gerber file (.pho, .g*)
+ TREE_HTML, // HTML file (.htm, *.html)
+ TREE_PDF, // PDF file (.pdf)
+ TREE_TXT, // ascii text file (.txt)
+ TREE_NET, // netlist file (.net)
+ TREE_UNKNOWN,
+ TREE_DIRECTORY,
+ TREE_CMP_LINK, // cmp/footprint link file (.cmp)
+ TREE_REPORT, // report file (.rpt)
+ TREE_FP_PLACE, // fooprints position (place) file (.pos)
+ TREE_DRILL, // Excellon drill file (.drl)
+ TREE_SVG, // SVG file (.svg)
+ TREE_PAGE_LAYOUT_DESCR, // Page layout and title block descr file (.kicad_wks)
+ TREE_FOOTPRINT_FILE, // footprint file (.kicad_mod)
+ TREE_SCHEMATIC_LIBFILE, // schematic library file (.lib)
+ TREE_MAX
+};
+
+
+/**
+ * Command IDs for KiCad.
+ *
+ * Please add IDs that are unique to Kicad here and not in the global id.h file.
+ * This will prevent the entire project from being rebuilt when adding
+ * new commands to KiCad.
+ *
+ * However, now the Kicad manager and other sub applications are running inside
+ * the same application, these IDs are kept unique inside the whole Kicad code
+ * See the global id.h which reserves room for the Kicad manager IDs
+ * and expand this room if needed
+ *
+ * We have experienced issues with duplicate menus IDs between frames
+ * because wxUpdateUIEvent events are sent to parent frames, when a wxUpdateUIEvent
+ * event function does not exists for some menuitems ID, and therefore
+ * with duplicate menuitems IDs in different frames, the wrong menuitem can be used
+ * by a function called by the wxUpdateUIEvent event loop.
+ *
+ * The number of items in this list should be less than ROOM_FOR_KICADMANAGER (see id.h)
+ */
+
+enum id_kicad_frm {
+ ID_LEFT_FRAME = ID_KICAD_MANAGER_START,
+ ID_PROJECT_TREE,
+ ID_PROJECT_TXTEDIT,
+ ID_PROJECT_TREE_REFRESH,
+ ID_PROJECT_NEWDIR,
+ ID_PROJECT_DELETE,
+ ID_PROJECT_RENAME,
+ ID_PROJECT_OPEN_FILE_WITH_TEXT_EDITOR,
+
+ ID_TO_SCH,
+ ID_TO_SCH_LIB_EDITOR,
+ ID_TO_PCB,
+ ID_TO_PCB_FP_EDITOR,
+ ID_TO_CVPCB,
+ ID_TO_GERBVIEW,
+ ID_TO_BITMAP_CONVERTER,
+ ID_TO_PCB_CALCULATOR,
+ ID_TO_PL_EDITOR,
+
+ ID_TO_TEXT_EDITOR,
+ ID_BROWSE_AN_SELECT_FILE,
+ ID_SELECT_PREFERED_EDITOR,
+ ID_SELECT_PREFERED_PDF_BROWSER_NAME,
+ ID_SELECT_PREFERED_PDF_BROWSER,
+ ID_SELECT_DEFAULT_PDF_BROWSER,
+ ID_SAVE_AND_ZIP_FILES,
+ ID_READ_ZIP_ARCHIVE,
+ ID_INIT_WATCHED_PATHS,
+
+ // Please, verify: the number of items in this list should be
+ // less than ROOM_FOR_KICADMANAGER (see id.h)
+ ID_KICADMANAGER_END_LIST
+};
+
+
+/**
+ * Class KICAD_MANAGER_FRAME
+ * is the main KiCad project manager frame. It is not a KIWAY_PLAYER.
+ */
+class KICAD_MANAGER_FRAME : public EDA_BASE_FRAME
+{
+public:
+ KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& title,
+ const wxPoint& pos, const wxSize& size );
+
+ ~KICAD_MANAGER_FRAME();
+
+ void OnCloseWindow( wxCloseEvent& Event );
+ void OnSize( wxSizeEvent& event );
+
+ /**
+ * Function OnLoadProject
+ * loads an exiting or creates a new project (.pro) file.
+ */
+ void OnLoadProject( wxCommandEvent& event );
+
+ /**
+ * Function OnCreateProjectFromTemplate
+ * Creates a new project folder, copy a template into this new folder.
+ * and open this new projrct as working project
+ */
+ void OnCreateProjectFromTemplate( wxCommandEvent& event );
+
+ /**
+ * Function OnSaveProject
+ * is the command event hendler to Save the project (.pro) file containing the top level
+ * configuration parameters.
+ */
+ void OnSaveProject( wxCommandEvent& event );
+
+ void OnArchiveFiles( wxCommandEvent& event );
+ void OnUnarchiveFiles( wxCommandEvent& event );
+
+ void OnRunEeschema( wxCommandEvent& event );
+ void OnRunSchLibEditor( wxCommandEvent& event );
+ void OnRunPcbNew( wxCommandEvent& event );
+ void OnRunPcbFpEditor( wxCommandEvent& event );
+ void OnRunGerbview( wxCommandEvent& event );
+ void OnRunBitmapConverter( wxCommandEvent& event );
+ void OnRunPcbCalculator( wxCommandEvent& event );
+ void OnRunPageLayoutEditor( wxCommandEvent& event );
+
+ void OnConfigurePaths( wxCommandEvent& aEvent );
+ void OnOpenTextEditor( wxCommandEvent& event );
+ void OnOpenFileInTextEditor( wxCommandEvent& event );
+ void OnOpenFileInEditor( wxCommandEvent& event );
+
+ void OnFileHistory( wxCommandEvent& event );
+ void OnExit( wxCommandEvent& event );
+ void Process_Preferences( wxCommandEvent& event );
+
+ void Process_Config( wxCommandEvent& event );
+
+ void ReCreateMenuBar();
+ void RecreateBaseHToolbar();
+
+ /**
+ * Function PrintMsg
+ * displays \a aText in the text panel.
+ *
+ * @param aText The text to display.
+ */
+ void PrintMsg( const wxString& aText );
+
+ /**
+ * a minor helper function:
+ * Prints the Current Working Dir name and the projet name on the text panel.
+ */
+ void PrintPrjInfo();
+
+ /**
+ * a minor helper function:
+ * Erase the text panel.
+ */
+ void ClearMsg();
+
+ void OnRefresh( wxCommandEvent& event );
+ void OnSelectDefaultPdfBrowser( wxCommandEvent& event );
+ void OnSelectPreferredPdfBrowser( wxCommandEvent& event );
+
+ void OnUpdateDefaultPdfBrowser( wxUpdateUIEvent& event );
+ void OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event );
+ void OnUpdateRequiresProject( wxUpdateUIEvent& event );
+
+ void CreateNewProject( const wxString& aPrjFullFileName, bool aTemplateSelector );
+
+ void LoadSettings( wxConfigBase* aCfg );
+
+ void SaveSettings( wxConfigBase* aCfg );
+
+ /**
+ * Function Execute
+ * opens another KiCad application and logs a message.
+ * @param frame = owner frame.
+ * @param execFile = name of the executable file.
+ * @param param = parameters to be passed to the executable.
+ */
+ void Execute( wxWindow* frame, const wxString& execFile,
+ wxString param = wxEmptyString );
+
+ class TERMINATE_HANDLER : public wxProcess
+ {
+ private:
+ wxString appName;
+
+ public:
+ TERMINATE_HANDLER( const wxString& appName ) :
+ appName(appName)
+ {
+ }
+
+ void OnTerminate( int pid, int status );
+ };
+
+ /**
+ * Called by sending a event with id = ID_INIT_WATCHED_PATHS
+ * rebuild the list of wahtched paths
+ */
+ void OnChangeWatchedPaths(wxCommandEvent& aEvent );
+
+
+ void SetProjectFileName( const wxString& aFullProjectProFileName );
+ const wxString GetProjectFileName();
+
+ // read only accessors
+ const wxString SchFileName();
+ const wxString PcbFileName();
+ const wxString PcbLegacyFileName();
+
+ void ReCreateTreePrj();
+
+ /// Call this only for a PCB associated with the current project. That is,
+ /// it must have the same path and name as the project *.pro file.
+ void RunPcbNew( const wxString& aProjectBoardFileName );
+
+ /// Call this only for a SCH associated with the current project. That is,
+ /// it must have the same path and name as the project *.pro file.
+ void RunEeschema( const wxString& aProjectSchematicFileName );
+
+ DECLARE_EVENT_TABLE()
+
+private:
+
+ wxConfigBase* config(); // override EDA_BASE_FRAME virtual
+
+ const SEARCH_STACK& sys_search(); // override EDA_BASE_FRAME virtual
+
+ wxString help_name(); // override EDA_BASE_FRAME virtual
+
+ TREE_PROJECT_FRAME* m_LeftWin;
+ LAUNCHER_PANEL* m_Launcher;
+ wxTextCtrl* m_MessagesBox;
+ wxAuiToolBar* m_VToolBar; // Vertical toolbar (not used)
+
+ int m_leftWinWidth;
+ EDA_HOTKEY_CONFIG* m_manager_Hokeys_Descr;
+
+ void language_change( wxCommandEvent& event );
+
+ bool m_active_project;
+};
+
+
+/** class LAUNCHER_PANEL
+ */
+class LAUNCHER_PANEL : public wxPanel
+{
+private:
+ int m_buttonSeparation; // button distance in pixels
+ wxPoint m_buttonsListPosition; /* position of the left bottom corner
+ * of the first bitmap button
+ */
+ wxPoint m_buttonLastPosition; // position of the last button in the window
+ int m_bitmapButtons_maxHeigth; // height of bigger bitmap buttons
+ // Used to calculate the height of the panel.
+
+public: LAUNCHER_PANEL( wxWindow* parent );
+ ~LAUNCHER_PANEL() { };
+
+ int GetPanelHeight() const;
+
+private:
+
+ /**
+ * Function CreateCommandToolbar
+ * creates the main tool bar buttons (fast launch buttons)
+ */
+ void CreateCommandToolbar( void );
+
+ wxBitmapButton* AddBitmapButton( wxWindowID aId, const wxBitmap& aBitmap );
+};
+
+// The C++ project manager includes a single PROJECT in its link image.
+class PROJECT;
+extern PROJECT& Prj();
+
+#endif
diff --git a/kicad/kicad.icns b/kicad/kicad.icns
new file mode 100644
index 0000000..01307df
--- /dev/null
+++ b/kicad/kicad.icns
Binary files differ
diff --git a/kicad/kicad.rc b/kicad/kicad.rc
new file mode 100644
index 0000000..578d82c
--- /dev/null
+++ b/kicad/kicad.rc
@@ -0,0 +1,3 @@
+icon_kicad ICON "../bitmaps_png/icons/icon_kicad.ico"
+
+#include "wx/msw/wx.rc"
diff --git a/kicad/kicad_doc.icns b/kicad/kicad_doc.icns
new file mode 100644
index 0000000..b877d8c
--- /dev/null
+++ b/kicad/kicad_doc.icns
Binary files differ
diff --git a/kicad/logokicad.png b/kicad/logokicad.png
new file mode 100644
index 0000000..a7e5f82
--- /dev/null
+++ b/kicad/logokicad.png
Binary files differ
diff --git a/kicad/mainframe.cpp b/kicad/mainframe.cpp
new file mode 100644
index 0000000..df0122a
--- /dev/null
+++ b/kicad/mainframe.cpp
@@ -0,0 +1,547 @@
+/**
+ * @file kicad/mainframe.cpp
+ * @brief KICAD_MANAGER_FRAME is the KiCad main frame.
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2013 CERN (www.cern.ch)
+ * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <pgm_kicad.h>
+#include <draw_frame.h>
+#include <kiway.h>
+#include <kiway_player.h>
+#include <confirm.h>
+#include <gestfich.h>
+#include <macros.h>
+
+#include <kicad.h>
+#include <tree_project_frame.h>
+#include <wildcards_and_files_ext.h>
+#include <menus_helpers.h>
+#include <dialog_hotkeys_editor.h>
+
+#include <wx/filefn.h>
+
+
+#define TREE_FRAME_WIDTH_ENTRY wxT( "LeftWinWidth" )
+
+KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent,
+ const wxString& title, const wxPoint& pos, const wxSize& size ) :
+ EDA_BASE_FRAME( parent, KICAD_MAIN_FRAME_T, title, pos, size,
+ KICAD_DEFAULT_DRAWFRAME_STYLE, KICAD_MANAGER_FRAME_NAME )
+{
+ m_active_project = false;
+ m_leftWinWidth = 60;
+ m_manager_Hokeys_Descr = NULL;
+
+ // Create the status line (bottom of the frame
+ static const int dims[3] = { -1, -1, 100 };
+
+ CreateStatusBar( 3 );
+ SetStatusWidths( 3, dims );
+
+ // Give an icon
+ wxIcon icon;
+ icon.CopyFromBitmap( KiBitmap( icon_kicad_xpm ) );
+ SetIcon( icon );
+
+ // Give the last sise and pos to main window
+ LoadSettings( config() );
+ SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
+
+ // Left window: is the box which display tree project
+ m_LeftWin = new TREE_PROJECT_FRAME( this );
+
+ // Right top Window: buttons to launch applications
+ m_Launcher = new LAUNCHER_PANEL( this );
+
+ // Add the wxTextCtrl showing all messages from KiCad:
+ m_MessagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString,
+ wxDefaultPosition, wxDefaultSize,
+ wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY );
+
+ RecreateBaseHToolbar();
+ ReCreateMenuBar();
+
+ m_auimgr.SetManagedWindow( this );
+
+ EDA_PANEINFO horiztb;
+ horiztb.HorizontalToolbarPane();
+
+ EDA_PANEINFO info;
+ info.InfoToolbarPane();
+
+ m_auimgr.AddPane( m_mainToolBar,
+ wxAuiPaneInfo( horiztb ).Name( wxT( "m_mainToolBar" ) ).Top() );
+
+ m_auimgr.AddPane( m_LeftWin,
+ wxAuiPaneInfo(info).Name( wxT( "m_LeftWin" ) ).Left().
+ BestSize( m_leftWinWidth, -1 ).
+ Layer( 1 ) );
+
+ m_auimgr.AddPane( m_Launcher, wxTOP );
+ m_auimgr.GetPane( m_Launcher).CaptionVisible( false ).Row(1)
+ .BestSize( -1, m_Launcher->GetPanelHeight() ).PaneBorder( false ).Resizable( false );
+
+ m_auimgr.AddPane( m_MessagesBox,
+ wxAuiPaneInfo().Name( wxT( "m_MessagesBox" ) ).CentrePane().Layer( 2 ) );
+
+ m_auimgr.GetPane( m_LeftWin ).MinSize( wxSize( 80, -1) );
+ m_auimgr.GetPane( m_LeftWin ).BestSize(wxSize(m_leftWinWidth, -1) );
+
+ m_auimgr.Update();
+}
+
+
+KICAD_MANAGER_FRAME::~KICAD_MANAGER_FRAME()
+{
+ m_auimgr.UnInit();
+}
+
+
+wxConfigBase* KICAD_MANAGER_FRAME::config()
+{
+ wxConfigBase* ret = Pgm().PgmSettings();
+ wxASSERT( ret );
+ return ret;
+}
+
+
+void KICAD_MANAGER_FRAME::SetProjectFileName( const wxString& aFullProjectProFileName )
+{
+ // ensure file name is absolute:
+ wxFileName fn( aFullProjectProFileName );
+
+ if( !fn.IsAbsolute() )
+ fn.MakeAbsolute();
+
+ Prj().SetProjectFullName( fn.GetFullPath() );
+}
+
+
+const wxString KICAD_MANAGER_FRAME::GetProjectFileName()
+{
+ return Prj().GetProjectFullName();
+}
+
+
+const wxString KICAD_MANAGER_FRAME::SchFileName()
+{
+ wxFileName fn( GetProjectFileName() );
+
+ fn.SetExt( SchematicFileExtension );
+
+ return fn.GetFullPath();
+}
+
+
+const wxString KICAD_MANAGER_FRAME::PcbFileName()
+{
+ wxFileName fn( GetProjectFileName() );
+
+ fn.SetExt( PcbFileExtension );
+
+ return fn.GetFullPath();
+}
+
+
+const wxString KICAD_MANAGER_FRAME::PcbLegacyFileName()
+{
+ wxFileName fn( GetProjectFileName() );
+
+ fn.SetExt( LegacyPcbFileExtension );
+
+ return fn.GetFullPath();
+}
+
+
+void KICAD_MANAGER_FRAME::ReCreateTreePrj()
+{
+ m_LeftWin->ReCreateTreePrj();
+}
+
+
+const SEARCH_STACK& KICAD_MANAGER_FRAME::sys_search()
+{
+ return Pgm().SysSearch();
+}
+
+
+wxString KICAD_MANAGER_FRAME::help_name()
+{
+ return Pgm().GetHelpFileName();
+}
+
+
+void KICAD_MANAGER_FRAME::PrintMsg( const wxString& aText )
+{
+ m_MessagesBox->AppendText( aText );
+}
+
+
+void KICAD_MANAGER_FRAME::OnSize( wxSizeEvent& event )
+{
+ if( m_auimgr.GetManagedWindow() )
+ m_auimgr.Update();
+
+ event.Skip();
+}
+
+
+void KICAD_MANAGER_FRAME::OnCloseWindow( wxCloseEvent& Event )
+{
+ if( Kiway.PlayersClose( false ) )
+ {
+ int px, py;
+
+ UpdateFileHistory( GetProjectFileName(), &Pgm().GetFileHistory() );
+
+ if( !IsIconized() ) // save main frame position and size
+ {
+ GetPosition( &px, &py );
+ m_FramePos.x = px;
+ m_FramePos.y = py;
+
+ GetSize( &px, &py );
+ m_FrameSize.x = px;
+ m_FrameSize.y = py;
+ }
+
+ Event.SetCanVeto( true );
+
+ m_LeftWin->Show( false );
+
+ Destroy();
+ }
+}
+
+
+void KICAD_MANAGER_FRAME::OnExit( wxCommandEvent& event )
+{
+ Close( true );
+}
+
+
+void KICAD_MANAGER_FRAME::TERMINATE_HANDLER::OnTerminate( int pid, int status )
+{
+ wxString msg = wxString::Format( _( "%s closed [pid=%d]\n" ),
+ GetChars( appName ), pid );
+
+ wxWindow* window = wxWindow::FindWindowByName( KICAD_MANAGER_FRAME_NAME );
+
+ if( window ) // Should always happen.
+ {
+ // Be sure the kicad frame manager is found
+ // This dynamic cast is not really mandatory, but ...
+ KICAD_MANAGER_FRAME* frame = dynamic_cast<KICAD_MANAGER_FRAME*> (window);
+
+ if( frame )
+ frame->PrintMsg( msg );
+ }
+
+ delete this;
+}
+
+
+void KICAD_MANAGER_FRAME::Execute( wxWindow* frame, const wxString& execFile,
+ wxString params )
+{
+ if( params.size() )
+ AddDelimiterString( params );
+
+ TERMINATE_HANDLER* callback = new TERMINATE_HANDLER( execFile );
+
+ long pid = ExecuteFile( frame, execFile, params, callback );
+
+ if( pid > 0 )
+ {
+ wxString msg = wxString::Format( _( "%s %s opened [pid=%ld]\n" ),
+ GetChars( execFile ), GetChars( params ), pid );
+
+ PrintMsg( msg );
+ }
+ else
+ {
+ delete callback;
+ }
+}
+
+
+void KICAD_MANAGER_FRAME::RunEeschema( const wxString& aProjectSchematicFileName )
+{
+ KIWAY_PLAYER* frame = Kiway.Player( FRAME_SCH, false );
+
+ // Please: note: DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers() calls
+ // Kiway.Player( FRAME_SCH, true )
+ // therefore, the schematic editor is sometimes running, but the schematic project
+ // is not loaded, if the library editor was called, and the dialog field editor was used.
+ // On linux, it happens the first time the schematic editor is launched, if
+ // library editor was running, and the dialog field editor was open
+ // On Windows, it happens always after the library editor was called,
+ // and the dialog field editor was used
+ if( !frame )
+ {
+ frame = Kiway.Player( FRAME_SCH, true );
+ }
+
+ if( !frame->IsShown() ) // the frame exists, (created by the dialog field editor)
+ // but no project loaded.
+ {
+ frame->OpenProjectFiles( std::vector<wxString>( 1, aProjectSchematicFileName ) );
+ frame->Show( true );
+ }
+
+ // On Windows, Raise() does not bring the window on screen, when iconized or not shown
+ // On linux, Raise() brings the window on screen, but this code works fine
+ if( frame->IsIconized() )
+ frame->Iconize( false );
+
+ frame->Raise();
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunEeschema( wxCommandEvent& event )
+{
+ wxFileName fn( GetProjectFileName() );
+ fn.SetExt( SchematicFileExtension );
+ RunEeschema( fn.GetFullPath() );
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunSchLibEditor( wxCommandEvent& event )
+{
+ KIWAY_PLAYER* frame = Kiway.Player( FRAME_SCH_LIB_EDITOR, false );
+
+ if( !frame )
+ {
+ frame = Kiway.Player( FRAME_SCH_LIB_EDITOR, true );
+ // frame->OpenProjectFiles( std::vector<wxString>( 1, aProjectSchematicFileName ) );
+ frame->Show( true );
+ }
+
+ // On Windows, Raise() does not bring the window on screen, when iconized
+ if( frame->IsIconized() )
+ frame->Iconize( false );
+
+ frame->Raise();
+}
+
+
+void KICAD_MANAGER_FRAME::RunPcbNew( const wxString& aProjectBoardFileName )
+{
+ KIWAY_PLAYER* frame = Kiway.Player( FRAME_PCB, true );
+
+ // a pcb frame can be already existing, but not yet used.
+ // this is the case when running the footprint editor, or the footprint viewer first
+ // if the frame is not visible, the board is not yet loaded
+ if( !frame->IsVisible() )
+ {
+ frame->OpenProjectFiles( std::vector<wxString>( 1, aProjectBoardFileName ) );
+ frame->Show( true );
+ }
+
+ // On Windows, Raise() does not bring the window on screen, when iconized
+ if( frame->IsIconized() )
+ frame->Iconize( false );
+
+ frame->Raise();
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunPcbNew( wxCommandEvent& event )
+{
+ wxFileName kicad_board( PcbFileName() );
+ wxFileName legacy_board( PcbLegacyFileName() );
+
+ wxFileName& board = ( !legacy_board.FileExists() || kicad_board.FileExists() ) ?
+ kicad_board : legacy_board;
+
+ RunPcbNew( board.GetFullPath() );
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunPcbFpEditor( wxCommandEvent& event )
+{
+ KIWAY_PLAYER* frame = Kiway.Player( FRAME_PCB_MODULE_EDITOR, false );
+
+ if( !frame )
+ {
+ frame = Kiway.Player( FRAME_PCB_MODULE_EDITOR, true );
+// frame->OpenProjectFiles( std::vector<wxString>( 1, aProjectBoardFileName ) );
+ frame->Show( true );
+ }
+
+ // On Windows, Raise() does not bring the window on screen, when iconized
+ if( frame->IsIconized() )
+ frame->Iconize( false );
+
+ frame->Raise();
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunBitmapConverter( wxCommandEvent& event )
+{
+ Execute( this, BITMAPCONVERTER_EXE );
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunPcbCalculator( wxCommandEvent& event )
+{
+ Execute( this, PCB_CALCULATOR_EXE );
+}
+
+
+void KICAD_MANAGER_FRAME::OnRunPageLayoutEditor( wxCommandEvent& event )
+{
+ Execute( this, PL_EDITOR_EXE );
+}
+
+
+
+void KICAD_MANAGER_FRAME::OnRunGerbview( wxCommandEvent& event )
+{
+ // Gerbview is called without any file to open, because we do not know
+ // the list and the name of files to open (if any...).
+ // however we run it in the path of the project
+ Execute( this, GERBVIEW_EXE, Prj().GetProjectPath() );
+}
+
+
+void KICAD_MANAGER_FRAME::OnOpenTextEditor( wxCommandEvent& event )
+{
+ wxString editorname = Pgm().GetEditorName();
+
+ if( !editorname.IsEmpty() )
+ Execute( this, editorname, wxEmptyString );
+}
+
+
+void KICAD_MANAGER_FRAME::OnOpenFileInTextEditor( wxCommandEvent& event )
+{
+ wxString mask( wxT( "*" ) );
+
+#ifdef __WINDOWS__
+ mask += wxT( ".*" );
+#endif
+
+ mask = _( "Text file (" ) + mask + wxT( ")|" ) + mask;
+ wxString default_dir = Prj().GetProjectPath();
+
+ wxFileDialog dlg( this, _( "Load File to Edit" ), default_dir,
+ wxEmptyString, mask, wxFD_OPEN );
+
+ if( dlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ wxString filename = wxT( "\"" );
+ filename += dlg.GetPath() + wxT( "\"" );
+
+ if( !dlg.GetPath().IsEmpty() && !Pgm().GetEditorName().IsEmpty() )
+ Execute( this, Pgm().GetEditorName(), filename );
+}
+
+
+void KICAD_MANAGER_FRAME::OnRefresh( wxCommandEvent& event )
+{
+ m_LeftWin->ReCreateTreePrj();
+}
+
+
+void KICAD_MANAGER_FRAME::language_change( wxCommandEvent& event )
+{
+ int id = event.GetId();
+
+ Kiway.SetLanguage( id );
+}
+
+
+void KICAD_MANAGER_FRAME::ClearMsg()
+{
+ m_MessagesBox->Clear();
+}
+
+
+void KICAD_MANAGER_FRAME::LoadSettings( wxConfigBase* aCfg )
+{
+ EDA_BASE_FRAME::LoadSettings( aCfg );
+ aCfg->Read( TREE_FRAME_WIDTH_ENTRY, &m_leftWinWidth );
+}
+
+
+void KICAD_MANAGER_FRAME::SaveSettings( wxConfigBase* aCfg )
+{
+ EDA_BASE_FRAME::SaveSettings( aCfg );
+ aCfg->Write( TREE_FRAME_WIDTH_ENTRY, m_LeftWin->GetSize().x );
+}
+
+
+/**
+ * a minor helper function:
+ * Prints the Current Project full name on the text panel.
+ */
+void KICAD_MANAGER_FRAME::PrintPrjInfo()
+{
+ wxString msg = wxString::Format( _( "Project name:\n%s\n" ),
+ GetChars( GetProjectFileName() ) );
+ PrintMsg( msg );
+}
+
+void KICAD_MANAGER_FRAME::Process_Config( wxCommandEvent& event )
+{
+ int id = event.GetId();
+ wxFileName fn;
+
+ switch( id )
+ {
+ // Hotkey IDs
+ case ID_PREFERENCES_HOTKEY_SHOW_EDITOR:
+ InstallHotkeyFrame( this, m_manager_Hokeys_Descr );
+ break;
+
+ case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
+ ExportHotkeyConfigToFile( m_manager_Hokeys_Descr, wxT( "kicad" ) );
+ break;
+
+ case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
+ ImportHotkeyConfigFromFile( m_manager_Hokeys_Descr, wxT( "kicad" ) );
+ break;
+
+ case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST:
+ // Display current hotkey list for LibEdit.
+ DisplayHotkeyList( this, m_manager_Hokeys_Descr );
+ break;
+
+ default:
+ wxFAIL_MSG( wxT( "KICAD_MANAGER_FRAME::Process_Config error" ) );
+ break;
+ }
+}
+
+
+void KICAD_MANAGER_FRAME::OnConfigurePaths( wxCommandEvent& aEvent )
+{
+ Pgm().ConfigurePaths( this );
+}
diff --git a/kicad/menubar.cpp b/kicad/menubar.cpp
new file mode 100644
index 0000000..130b661
--- /dev/null
+++ b/kicad/menubar.cpp
@@ -0,0 +1,501 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2009-2015 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file kicad/menubar.cpp
+ * @brief (Re)Create the project manager menubar for KiCad
+ */
+#include <fctsys.h>
+#include <pgm_kicad.h>
+#include <kicad.h>
+#include <menus_helpers.h>
+#include <tree_project_frame.h>
+#include <hotkeys_basic.h>
+
+// Menubar and toolbar event table
+BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME )
+ // Window events
+ EVT_SIZE( KICAD_MANAGER_FRAME::OnSize )
+ EVT_CLOSE( KICAD_MANAGER_FRAME::OnCloseWindow )
+
+ // Toolbar events
+ EVT_TOOL( ID_NEW_PROJECT, KICAD_MANAGER_FRAME::OnLoadProject )
+ EVT_TOOL( ID_NEW_PROJECT_FROM_TEMPLATE, KICAD_MANAGER_FRAME::OnCreateProjectFromTemplate )
+ EVT_TOOL( ID_LOAD_PROJECT, KICAD_MANAGER_FRAME::OnLoadProject )
+
+ // Menu events
+ EVT_MENU( ID_SAVE_PROJECT, KICAD_MANAGER_FRAME::OnSaveProject )
+ EVT_MENU( wxID_EXIT, KICAD_MANAGER_FRAME::OnExit )
+ EVT_MENU( ID_TO_TEXT_EDITOR, KICAD_MANAGER_FRAME::OnOpenTextEditor )
+ EVT_MENU( ID_BROWSE_AN_SELECT_FILE, KICAD_MANAGER_FRAME::OnOpenFileInTextEditor )
+ EVT_MENU( ID_PREFERENCES_CONFIGURE_PATHS, KICAD_MANAGER_FRAME::OnConfigurePaths )
+ EVT_MENU( ID_SELECT_PREFERED_EDITOR, EDA_BASE_FRAME::OnSelectPreferredEditor )
+ EVT_MENU( ID_SELECT_DEFAULT_PDF_BROWSER, KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser )
+ EVT_MENU( ID_SELECT_PREFERED_PDF_BROWSER, KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser )
+ EVT_MENU( ID_SELECT_PREFERED_PDF_BROWSER_NAME,
+ KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser )
+ EVT_MENU( ID_SAVE_AND_ZIP_FILES, KICAD_MANAGER_FRAME::OnArchiveFiles )
+ EVT_MENU( ID_READ_ZIP_ARCHIVE, KICAD_MANAGER_FRAME::OnUnarchiveFiles )
+ EVT_MENU( ID_PROJECT_TREE_REFRESH, KICAD_MANAGER_FRAME::OnRefresh )
+ EVT_MENU( wxID_HELP, KICAD_MANAGER_FRAME::GetKicadHelp )
+ EVT_MENU( wxID_INDEX, KICAD_MANAGER_FRAME::GetKicadHelp )
+ EVT_MENU( wxID_ABOUT, KICAD_MANAGER_FRAME::GetKicadAbout )
+
+ // Range menu events
+ EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, KICAD_MANAGER_FRAME::language_change )
+
+ EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, KICAD_MANAGER_FRAME::OnFileHistory )
+
+ // Hotkey management (show list, edit ...) events
+ EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, ID_PREFERENCES_HOTKEY_END,
+ KICAD_MANAGER_FRAME::Process_Config )
+
+
+ // Special functions
+ EVT_MENU( ID_INIT_WATCHED_PATHS, KICAD_MANAGER_FRAME::OnChangeWatchedPaths )
+
+ // Button events (in command frame), and menu events equivalent to buttons
+ EVT_BUTTON( ID_TO_SCH, KICAD_MANAGER_FRAME::OnRunEeschema )
+ EVT_MENU( ID_TO_SCH, KICAD_MANAGER_FRAME::OnRunEeschema )
+
+ EVT_BUTTON( ID_TO_SCH_LIB_EDITOR, KICAD_MANAGER_FRAME::OnRunSchLibEditor )
+ EVT_MENU( ID_TO_SCH_LIB_EDITOR, KICAD_MANAGER_FRAME::OnRunSchLibEditor )
+
+ EVT_BUTTON( ID_TO_PCB, KICAD_MANAGER_FRAME::OnRunPcbNew )
+ EVT_MENU( ID_TO_PCB, KICAD_MANAGER_FRAME::OnRunPcbNew )
+
+ EVT_BUTTON( ID_TO_PCB_FP_EDITOR, KICAD_MANAGER_FRAME::OnRunPcbFpEditor )
+ EVT_MENU( ID_TO_PCB_FP_EDITOR, KICAD_MANAGER_FRAME::OnRunPcbFpEditor )
+
+ EVT_BUTTON( ID_TO_GERBVIEW, KICAD_MANAGER_FRAME::OnRunGerbview )
+ EVT_MENU( ID_TO_GERBVIEW, KICAD_MANAGER_FRAME::OnRunGerbview )
+
+ EVT_BUTTON( ID_TO_BITMAP_CONVERTER, KICAD_MANAGER_FRAME::OnRunBitmapConverter )
+ EVT_MENU( ID_TO_BITMAP_CONVERTER, KICAD_MANAGER_FRAME::OnRunBitmapConverter )
+
+ EVT_BUTTON( ID_TO_PCB_CALCULATOR, KICAD_MANAGER_FRAME::OnRunPcbCalculator )
+ EVT_MENU( ID_TO_PCB_CALCULATOR, KICAD_MANAGER_FRAME::OnRunPcbCalculator )
+
+ EVT_BUTTON( ID_TO_PL_EDITOR, KICAD_MANAGER_FRAME::OnRunPageLayoutEditor )
+ EVT_MENU( ID_TO_PL_EDITOR, KICAD_MANAGER_FRAME::OnRunPageLayoutEditor )
+
+ EVT_UPDATE_UI( ID_SELECT_DEFAULT_PDF_BROWSER, KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser )
+ EVT_UPDATE_UI( ID_SELECT_PREFERED_PDF_BROWSER,
+ KICAD_MANAGER_FRAME::OnUpdatePreferredPdfBrowser )
+ EVT_UPDATE_UI_RANGE( ID_TO_SCH, ID_TO_PCB_FP_EDITOR,
+ KICAD_MANAGER_FRAME::OnUpdateRequiresProject )
+
+END_EVENT_TABLE()
+
+enum hotkey_id_commnand
+{
+ HK_RUN_EESCHEMA = HK_COMMON_END,
+ HK_LOAD_PROJECT,
+ HK_SAVE_PROJECT,
+ HK_NEW_PRJ,
+ HK_NEW_PRJ_TEMPLATE,
+ HK_RUN_LIBEDIT,
+ HK_RUN_PCBNEW,
+ HK_RUN_FPEDITOR,
+ HK_RUN_GERBVIEW,
+ HK_RUN_BM2COMPONENT,
+ HK_RUN_PCBCALCULATOR,
+ HK_RUN_PLEDITOR
+};
+
+///////////// Hotkeys management ///////////////////////////////////////
+
+// Remark: the hotkey message info is used as keyword in hotkey config files and
+// as comments in help windows, therefore translated only when displayed
+// they are marked _HKI to be extracted by translation tools
+// See hotkeys_basic.h for more info
+
+// hotkeys command:
+static EDA_HOTKEY HkHelp( _HKI( "Help (this window)" ), HK_HELP, '?' );
+static EDA_HOTKEY HkLoadPrj( _HKI( "Load project" ), HK_LOAD_PROJECT, 'O' + GR_KB_CTRL );
+static EDA_HOTKEY HkSavePrj( _HKI( "Save project" ), HK_SAVE_PROJECT, 'S' + GR_KB_CTRL );
+static EDA_HOTKEY HkNewProject( _HKI( "New Project" ), HK_NEW_PRJ, 'N' + GR_KB_CTRL );
+static EDA_HOTKEY HkNewPrjFromTemplate( _HKI( "New Prj From Template" ),
+ HK_NEW_PRJ_TEMPLATE, 'T' + GR_KB_CTRL );
+
+static EDA_HOTKEY HkRunEeschema( _HKI( "Run Eeschema" ), HK_RUN_EESCHEMA, 'E' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunLibedit( _HKI( "Run LibEdit" ), HK_RUN_LIBEDIT, 'L' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunPcbnew( _HKI( "Run Pcbnew" ), HK_RUN_PCBNEW, 'P' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunModedit( _HKI( "Run FpEditor" ), HK_RUN_FPEDITOR, 'F' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunGerbview( _HKI( "Run Gerbview" ), HK_RUN_GERBVIEW, 'G' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunBm2Cmp( _HKI( "Run Bitmap2Component" ),
+ HK_RUN_BM2COMPONENT, 'B' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunPcbCalc( _HKI( "Run PcbCalculator" ),
+ HK_RUN_PCBCALCULATOR, 'C' + GR_KB_CTRL, 0 );
+static EDA_HOTKEY HkRunPleditor( _HKI( "Run PlEditor" ), HK_RUN_PLEDITOR, 'Y' + GR_KB_CTRL, 0 );
+
+// List of hotkey descriptors
+EDA_HOTKEY* common_Hotkey_List[] =
+{
+ &HkHelp,
+ &HkLoadPrj, &HkSavePrj, &HkNewProject, &HkNewPrjFromTemplate,
+ &HkRunEeschema, &HkRunLibedit,
+ &HkRunPcbnew, &HkRunModedit, &HkRunGerbview,
+ &HkRunBm2Cmp, &HkRunPcbCalc, &HkRunPleditor,
+ NULL
+};
+
+// list of sections and corresponding hotkey list for Kicad
+// (used to create an hotkey config file, and edit hotkeys )
+// here we have only one section.
+static wxString sectionTitle( _HKI( "Kicad Manager Hotkeys" ) );
+
+struct EDA_HOTKEY_CONFIG kicad_Manager_Hokeys_Descr[] = {
+ { &g_CommonSectionTag, common_Hotkey_List, &sectionTitle },
+ { NULL, NULL, NULL }
+};
+///////////// End hotkeys management ///////////////////////////////////////
+
+
+/**
+ * @brief (Re)Create the menubar
+ */
+void KICAD_MANAGER_FRAME::ReCreateMenuBar()
+{
+ wxString msg;
+ static wxMenu* openRecentMenu; // Open Recent submenu,
+ // static to remember this menu
+
+ m_manager_Hokeys_Descr = kicad_Manager_Hokeys_Descr;
+
+ // Create and try to get the current menubar
+ wxMenuBar* menuBar = GetMenuBar();
+
+ if( !menuBar )
+ menuBar = new wxMenuBar();
+
+ // Delete all existing menus so they can be rebuilt.
+ // This allows language changes of the menu text on the fly.
+ menuBar->Freeze();
+
+ // Before deleting, remove the menus managed by m_fileHistory
+ // (the file history will be updated when adding/removing files in history)
+ if( openRecentMenu )
+ Pgm().GetFileHistory().RemoveMenu( openRecentMenu );
+
+ // Delete all existing menus
+ while( menuBar->GetMenuCount() )
+ delete menuBar->Remove( 0 );
+
+ // Recreate all menus:
+
+ // Menu File:
+ wxMenu* fileMenu = new wxMenu;
+
+ // Open
+ msg = AddHotkeyName( _( "&Open Project" ), kicad_Manager_Hokeys_Descr, HK_LOAD_PROJECT );
+ AddMenuItem( fileMenu, ID_LOAD_PROJECT, msg,
+ _( "Open existing project" ),
+ KiBitmap( open_project_xpm ) );
+
+ // File history
+ openRecentMenu = new wxMenu();
+ Pgm().GetFileHistory().UseMenu( openRecentMenu );
+ Pgm().GetFileHistory().AddFilesToMenu( );
+ AddMenuItem( fileMenu, openRecentMenu,
+ wxID_ANY,
+ _( "Open &Recent" ),
+ _( "Open recent schematic project" ),
+ KiBitmap( open_project_xpm ) );
+
+ // New project creation
+ wxMenu* newprjSubMenu = new wxMenu();
+
+ msg = AddHotkeyName( _( "&New Project" ), kicad_Manager_Hokeys_Descr, HK_NEW_PRJ );
+ AddMenuItem( newprjSubMenu, ID_NEW_PROJECT, msg,
+ _( "Create new blank project" ),
+ KiBitmap( new_project_xpm ) );
+
+ msg = AddHotkeyName( _( "New Project from &Template" ),
+ kicad_Manager_Hokeys_Descr, HK_NEW_PRJ_TEMPLATE );
+ AddMenuItem( newprjSubMenu, ID_NEW_PROJECT_FROM_TEMPLATE, msg,
+ _( "Create a new project from a template" ),
+ KiBitmap( new_project_with_template_xpm ) );
+
+ AddMenuItem( fileMenu, newprjSubMenu,
+ wxID_ANY,
+ _( "New Project" ),
+ _( "Create new project" ),
+ KiBitmap( new_project_xpm ) );
+
+ // Currently there is nothing to save
+ // (Kicad manager does not save any info in .pro file)
+#if 0
+ // Save
+ msg = AddHotkeyName( _( "&Save" ), kicad_Manager_Hokeys_Descr, HK_SAVE_PROJECT );
+ AddMenuItem( fileMenu, ID_SAVE_PROJECT, msg,
+ _( "Save current project" ),
+ KiBitmap( save_project_xpm ) );
+#endif
+
+ // Archive
+ fileMenu->AppendSeparator();
+ AddMenuItem( fileMenu,
+ ID_SAVE_AND_ZIP_FILES,
+ _( "&Archive" ),
+ _( "Archive project files in zip archive" ),
+ KiBitmap( zip_xpm ) );
+
+ // Unarchive
+ AddMenuItem( fileMenu,
+ ID_READ_ZIP_ARCHIVE,
+ _( "&Unarchive" ),
+ _( "Unarchive project files from zip file" ),
+ KiBitmap( unzip_xpm ) );
+
+ // Separator
+ fileMenu->AppendSeparator();
+
+ // Quit
+ AddMenuItem( fileMenu,
+ wxID_EXIT,
+ _( "&Close" ),
+ _( "Close KiCad" ),
+ KiBitmap( exit_xpm ) );
+
+ // Menu Browse:
+ wxMenu* browseMenu = new wxMenu();
+
+ // Text editor
+ AddMenuItem( browseMenu,
+ ID_TO_TEXT_EDITOR,
+ _( "Open Text E&ditor" ),
+ _( "Launch preferred text editor" ),
+ KiBitmap( editor_xpm ) );
+
+ // View file
+ AddMenuItem( browseMenu,
+ ID_BROWSE_AN_SELECT_FILE,
+ _( "&Open Local File" ),
+ _( "Edit local file" ),
+ KiBitmap( browse_files_xpm ) );
+
+ // Menu Preferences:
+ wxMenu* preferencesMenu = new wxMenu;
+
+ // Path configuration edit dialog.
+ AddMenuItem( preferencesMenu,
+ ID_PREFERENCES_CONFIGURE_PATHS,
+ _( "Configure Pa&ths" ),
+ _( "Edit path configuration environment variables" ),
+ KiBitmap( editor_xpm ) );
+
+ // Text editor
+ AddMenuItem( preferencesMenu,
+ ID_SELECT_PREFERED_EDITOR,
+ _( "&Set Text Editor" ),
+ _( "Set your preferred text editor" ),
+ KiBitmap( editor_xpm ) );
+
+ // PDF Viewer submenu:System browser or user defined checkbox
+ wxMenu* SubMenuPdfBrowserChoice = new wxMenu;
+
+ // Default
+ AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_DEFAULT_PDF_BROWSER,
+ _( "System &Default PDF Viewer" ),
+ _( "Use system default PDF viewer" ),
+ KiBitmap( datasheet_xpm ),
+ wxITEM_CHECK );
+ SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER,
+ Pgm().UseSystemPdfBrowser() );
+
+ // Favourite
+ AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER,
+ _( "&Favourite PDF Viewer" ),
+ _( "Use favourite PDF viewer" ),
+ KiBitmap( datasheet_xpm ),
+ wxITEM_CHECK );
+ SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER,
+ !Pgm().UseSystemPdfBrowser() );
+
+ SubMenuPdfBrowserChoice->AppendSeparator();
+ // Append PDF Viewer submenu to preferences
+ AddMenuItem( SubMenuPdfBrowserChoice,
+ ID_SELECT_PREFERED_PDF_BROWSER_NAME,
+ _( "Set &PDF Viewer" ),
+ _( "Set favourite PDF viewer" ),
+ KiBitmap( datasheet_xpm ) );
+
+ // PDF viewer submenu
+ AddMenuItem( preferencesMenu, SubMenuPdfBrowserChoice, -1,
+ _( "&PDF Viewer" ),
+ _( "PDF viewer preferences" ),
+ KiBitmap( datasheet_xpm ) );
+
+ // Hotkey submenu
+ preferencesMenu->AppendSeparator();
+ AddHotkeyConfigMenu( preferencesMenu );
+
+ // Language submenu
+ preferencesMenu->AppendSeparator();
+ Pgm().AddMenuLanguageList( preferencesMenu );
+
+ // Menu Tools:
+ wxMenu* toolsMenu = new wxMenu;
+
+ msg = AddHotkeyName( _( "Run Eeschema" ), kicad_Manager_Hokeys_Descr, HK_RUN_EESCHEMA );
+ AddMenuItem( toolsMenu, ID_TO_SCH, msg, KiBitmap( eeschema_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Library Editor" ),
+ kicad_Manager_Hokeys_Descr, HK_RUN_LIBEDIT );
+ AddMenuItem( toolsMenu, ID_TO_SCH_LIB_EDITOR, msg, KiBitmap( libedit_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Pcbnew" ),
+ kicad_Manager_Hokeys_Descr, HK_RUN_PCBNEW );
+ AddMenuItem( toolsMenu, ID_TO_PCB, msg, KiBitmap( pcbnew_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Footprint Editor" ),
+ kicad_Manager_Hokeys_Descr, HK_RUN_FPEDITOR );
+ AddMenuItem( toolsMenu, ID_TO_PCB_FP_EDITOR, msg, KiBitmap( module_editor_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Gerbview" ),
+ kicad_Manager_Hokeys_Descr, HK_RUN_GERBVIEW );
+ AddMenuItem( toolsMenu, ID_TO_GERBVIEW, msg, KiBitmap( icon_gerbview_small_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Bitmap2Component" ),
+ kicad_Manager_Hokeys_Descr, HK_RUN_BM2COMPONENT );
+ AddMenuItem( toolsMenu, ID_TO_BITMAP_CONVERTER, msg,
+ _( "Bitmap2Component - Convert bitmap images to Eeschema\n"
+ "or Pcbnew elements" ),
+ KiBitmap( image_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Pcb Calculator" ), kicad_Manager_Hokeys_Descr, HK_RUN_PCBCALCULATOR );
+ AddMenuItem( toolsMenu, ID_TO_PCB_CALCULATOR, msg,
+ _( "Pcb calculator - Calculator for components, track width, etc." ),
+ KiBitmap( options_module_xpm ) );
+
+ msg = AddHotkeyName( _( "Run Page Layout Editor" ), kicad_Manager_Hokeys_Descr, HK_RUN_PLEDITOR );
+ AddMenuItem( toolsMenu, ID_TO_PL_EDITOR, msg,
+ _( "Pl editor - Worksheet layout editor" ),
+ KiBitmap( pagelayout_load_xpm ) );
+
+ // Menu Help:
+ wxMenu* helpMenu = new wxMenu;
+
+ // Version info
+ AddHelpVersionInfoMenuEntry( helpMenu );
+
+ // Contents
+ AddMenuItem( helpMenu, wxID_HELP,
+ _( "KiCad &Manual" ),
+ _( "Open KiCad user manual" ),
+ KiBitmap( online_help_xpm ) );
+
+ AddMenuItem( helpMenu, wxID_INDEX,
+ _( "&Getting Started in KiCad" ),
+ _( "Open \"Getting Started in KiCad\" guide for beginners" ),
+ KiBitmap( help_xpm ) );
+
+ // Separator
+ helpMenu->AppendSeparator();
+
+ // About
+ AddMenuItem( helpMenu, wxID_ABOUT,
+ _( "&About KiCad" ),
+ _( "About KiCad" ),
+ KiBitmap( info_xpm ) );
+
+ // Create the menubar and append all submenus
+ menuBar->Append( fileMenu, _( "&File" ) );
+ menuBar->Append( browseMenu, _( "&Browse" ) );
+ menuBar->Append( preferencesMenu, _( "&Preferences" ) );
+ menuBar->Append( toolsMenu, _( "&Tools" ) );
+ menuBar->Append( helpMenu, _( "&Help" ) );
+
+ menuBar->Thaw();
+
+ // Associate the menu bar with the frame, if no previous menubar
+ if( GetMenuBar() == NULL )
+ SetMenuBar( menuBar );
+ else
+ menuBar->Refresh();
+
+ // Add the hotkey to the "show hotkey list" menu, because we do not have
+ // a management of the keyboard keys in Kicad.
+ // So all hotheys should be added to the menubar
+ // Note Use wxMenuBar::SetLabel only after the menubar
+ // has been associated with a frame. (see wxWidgets doc)
+ msg = AddHotkeyName( menuBar->GetLabel( ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST ),
+ kicad_Manager_Hokeys_Descr, HK_HELP );
+ menuBar->SetLabel( ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST, msg );
+}
+
+
+/**
+ * @brief (Re)Create the horizontal toolbar
+ */
+void KICAD_MANAGER_FRAME::RecreateBaseHToolbar()
+{
+ // Check if toolbar is not already created
+ if( m_mainToolBar != NULL )
+ return;
+
+ // Allocate memory for m_mainToolBar
+ m_mainToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
+ wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT );
+
+ // New
+ m_mainToolBar->AddTool( ID_NEW_PROJECT, wxEmptyString,
+ KiBitmap( new_project_xpm ),
+ _( "Create new project" ) );
+
+ m_mainToolBar->AddTool( ID_NEW_PROJECT_FROM_TEMPLATE, wxEmptyString,
+ KiBitmap( new_project_with_template_xpm ),
+ _( "Create new project from template" ) );
+
+ // Load
+ m_mainToolBar->AddTool( ID_LOAD_PROJECT, wxEmptyString,
+ KiBitmap( open_project_xpm ),
+ _( "Open existing project" ) );
+
+ // Save
+ m_mainToolBar->AddTool( ID_SAVE_PROJECT, wxEmptyString,
+ KiBitmap( save_project_xpm ),
+ _( "Save current project" ) );
+
+ // Separator
+ m_mainToolBar->AddSeparator();
+
+ // Archive
+ m_mainToolBar->AddTool( ID_SAVE_AND_ZIP_FILES, wxEmptyString,
+ KiBitmap( zip_xpm ),
+ _( "Archive all project files" ) );
+
+ // Separator
+ m_mainToolBar->AddSeparator();
+
+ // Refresh project tree
+ m_mainToolBar->AddTool( ID_PROJECT_TREE_REFRESH, wxEmptyString,
+ KiBitmap( reload_xpm ),
+ _( "Refresh project tree" ) );
+
+ // Create m_mainToolBar
+ m_mainToolBar->Realize();
+}
diff --git a/kicad/pgm_kicad.h b/kicad/pgm_kicad.h
new file mode 100644
index 0000000..bb1069e
--- /dev/null
+++ b/kicad/pgm_kicad.h
@@ -0,0 +1,76 @@
+#ifndef PGM_KICAD_H_
+#define PGM_KICAD_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <pgm_base.h>
+#include <bin_mod.h>
+
+
+/**
+ * Class PGM_KICAD
+ * extends PGM_BASE to bring in FileHistory() and PdfBrowser() which were moved
+ * from EDA_APP into KIFACE_I. KIFACE_I is not applicable in the project manager
+ * since it is not a KIFACE. This header is in the kicad directory since nobody
+ * else needs to know about it.
+ */
+class PGM_KICAD : public PGM_BASE
+{
+public:
+ PGM_KICAD() :
+ m_bm( "kicad" ) // indicates a "$HOME/.kicad wxConfig like" config file.
+ {}
+
+ ~PGM_KICAD()
+ {
+ destroy();
+ }
+
+ bool OnPgmInit( wxApp* aWxApp ); // overload PGM_BASE virtual
+ void OnPgmExit(); // overload PGM_BASE virtual
+ void MacOpenFile( const wxString& aFileName ); // overload PGM_BASE virtual
+
+ wxFileHistory& GetFileHistory() { return m_bm.m_history; }
+
+ wxConfigBase* PgmSettings() { return m_bm.m_config; }
+
+ SEARCH_STACK& SysSearch() { return m_bm.m_search; }
+
+ wxString GetHelpFileName() { return m_bm.m_help_file; }
+
+protected:
+
+ // The PGM_* classes can have difficulties at termination if they
+ // are not destroyed soon enough. Relying on a static destructor can be
+ // too late for contained objects like wxSingleInstanceChecker.
+ void destroy();
+
+ BIN_MOD m_bm;
+};
+
+
+extern PGM_KICAD& Pgm();
+
+#endif // PGM_KICAD_H_
diff --git a/kicad/preferences.cpp b/kicad/preferences.cpp
new file mode 100644
index 0000000..2f0e02c
--- /dev/null
+++ b/kicad/preferences.cpp
@@ -0,0 +1,96 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2008-2014 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file preferences.cpp
+ */
+
+#include <fctsys.h>
+#include <pgm_kicad.h>
+#include <confirm.h>
+#include <gestfich.h>
+
+#include <kicad.h>
+
+#include <wx/fontdlg.h>
+
+
+void KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser( wxUpdateUIEvent& event )
+{
+ event.Check( Pgm().UseSystemPdfBrowser() );
+}
+
+
+void KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser( wxCommandEvent& event )
+{
+ Pgm().ForceSystemPdfBrowser( true );
+ Pgm().WritePdfBrowserInfos();
+}
+
+
+void KICAD_MANAGER_FRAME::OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event )
+{
+ event.Check( !Pgm().UseSystemPdfBrowser() );
+}
+
+
+void KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser( wxCommandEvent& event )
+{
+ bool setPdfBrowserName = event.GetId() == ID_SELECT_PREFERED_PDF_BROWSER_NAME;
+
+ if( !Pgm().GetPdfBrowserName() && !setPdfBrowserName )
+ {
+ DisplayError( this,
+ _( "You must choose a PDF viewer before using this option." ) );
+ setPdfBrowserName = true;
+ }
+
+ if( setPdfBrowserName )
+ {
+ wxString mask( wxT( "*" ) );
+
+ #ifdef __WINDOWS__
+ mask += wxT( ".exe" );
+ #endif
+
+ wxString wildcard = _( "Executable files (" ) + mask + wxT( ")|" ) + mask;
+
+ Pgm().ReadPdfBrowserInfos();
+ wxFileName fn = Pgm().GetPdfBrowserName();
+
+ wxFileDialog dlg( this, _( "Select Preferred PDF Browser" ), fn.GetPath(),
+ fn.GetFullPath(), wildcard,
+ wxFD_OPEN | wxFD_FILE_MUST_EXIST );
+
+ if( dlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ Pgm().SetPdfBrowserName( dlg.GetPath() );
+ }
+
+ Pgm().ForceSystemPdfBrowser( false );
+ Pgm().WritePdfBrowserInfos();
+}
+
diff --git a/kicad/prjconfig.cpp b/kicad/prjconfig.cpp
new file mode 100644
index 0000000..c8ed495
--- /dev/null
+++ b/kicad/prjconfig.cpp
@@ -0,0 +1,398 @@
+/**
+ * @file prjconfig.cpp
+ * Load and save project configuration files (*.pro)
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2015 Jean-Pierre Charras
+ * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <pgm_kicad.h>
+#include <kiway.h>
+#include <project.h>
+#include <confirm.h>
+#include <gestfich.h>
+#include <kicad.h>
+#include <config_params.h>
+#include <project_template.h>
+#include <tree_project_frame.h>
+#include <wildcards_and_files_ext.h>
+#include <vector>
+#include <build_version.h>
+#include <macros.h>
+#include <common.h>
+
+#include <wx/dir.h>
+#include <wx/filename.h>
+#include <wx/stdpaths.h>
+
+#include "dialogs/dialog_template_selector.h"
+
+#define SEP() wxFileName::GetPathSeparator()
+
+// Not really useful, provided to save/restore params in project config file,
+// (Add them in s_KicadManagerParams if any)
+// Used also to create new .pro files from the kicad.pro template file
+// for new projects
+#define GeneralGroupName wxT( "/general" )
+
+PARAM_CFG_ARRAY s_KicadManagerParams;
+
+void KICAD_MANAGER_FRAME::CreateNewProject( const wxString& aPrjFullFileName,
+ bool aTemplateSelector = false )
+{
+ wxFileName newProjectName = aPrjFullFileName;
+ wxChar sep[2] = { SEP(), 0 }; // nul terminated separator wxChar string.
+
+ ClearMsg();
+
+ // If we are creating a project from a template, make sure the template directory is sane
+ if( aTemplateSelector )
+ {
+ DIALOG_TEMPLATE_SELECTOR* ps = new DIALOG_TEMPLATE_SELECTOR( this );
+
+ wxFileName templatePath;
+ wxString envStr;
+
+#ifndef __WXMAC__
+ wxGetEnv( wxT( "KICAD" ), &envStr );
+
+ // Add a new tab for system templates
+ if( !envStr.empty() )
+ {
+ // user may or may not have including terminating separator.
+ if( !envStr.EndsWith( sep ) )
+ envStr += sep;
+
+ templatePath = envStr + wxT( "template" ) + sep;
+ }
+ else
+ {
+ // The standard path should be in the share directory for kicad. As
+ // it is normal on Windows to only have the share directory and not
+ // the kicad sub-directory we fall back to that if the directory
+ // doesn't exist
+ templatePath = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) +
+ sep + wxT( ".." ) + sep + wxT( "share" ) + sep + wxT( "kicad" ) +
+ sep + wxT( "template" ) + sep;
+
+ if( !wxDirExists( templatePath.GetFullPath() ) )
+ {
+ templatePath = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) +
+ sep + wxT( ".." ) + sep + wxT( "share" ) + sep + wxT( "template" ) + sep;
+ }
+ }
+#else
+ // Use what is provided in the bundle data dir
+ templatePath = GetOSXKicadDataDir() + sep + wxT( "template" );
+#endif
+
+ ps->AddTemplatesPage( _( "System Templates" ), templatePath );
+
+ // Add a new tab for user templates
+ wxFileName userPath = wxStandardPaths::Get().GetDocumentsDir() +
+ sep + wxT( "kicad" ) + sep + wxT( "template" ) + sep;
+
+ ps->AddTemplatesPage( _( "User Templates" ), userPath );
+
+ // Check to see if a custom template location is available and setup a
+ // new selection tab if there is.
+ envStr.clear();
+ wxGetEnv( wxT( "KICAD_PTEMPLATES" ), &envStr );
+
+ if( !envStr.empty() )
+ {
+ if( !envStr.EndsWith( sep ) )
+ envStr += sep;
+
+ wxFileName envPath = envStr;
+
+ ps->AddTemplatesPage( _( "Portable Templates" ), envPath );
+ }
+
+ // Show the project template selector dialog
+ int result = ps->ShowModal();
+
+ if( ( result != wxID_OK ) || ( ps->GetSelectedTemplate() == NULL ) )
+ {
+ if( ps->GetSelectedTemplate() == NULL )
+ {
+ wxMessageBox( _( "No project template was selected. Cannot generate new "
+ "project." ),
+ _( "Error" ),
+ wxOK | wxICON_ERROR,
+ this );
+ }
+ }
+ else
+ {
+ // The selected template widget contains the template we're attempting to use to
+ // create a project
+ if( !ps->GetSelectedTemplate()->CreateProject( newProjectName ) )
+ {
+ wxMessageBox( _( "Problem whilst creating new project from template!" ),
+ _( "Template Error" ),
+ wxOK | wxICON_ERROR,
+ this );
+ }
+ }
+ }
+
+ // Init project filename
+ SetProjectFileName( newProjectName.GetFullPath() );
+
+ // Write settings to project file
+ // was: wxGetApp().WriteProjectConfig( aPrjFullFileName, GeneralGroupName, s_KicadManagerParams );
+ Prj().ConfigSave( Pgm().SysSearch(), GeneralGroupName, s_KicadManagerParams );
+
+ // Ensure a "stub" for a schematic root sheet and a board exist.
+ // It will avoid messages from the schematic editor or the board editor to create a new file
+ // And forces the user to create main files under the right name for the project manager
+ wxFileName fn( newProjectName.GetFullPath() );
+ fn.SetExt( SchematicFileExtension );
+
+ // If a <project>.sch file does not exist, create a "stub" file
+ if( !fn.FileExists() )
+ {
+ wxFile file( fn.GetFullPath(), wxFile::write );
+
+ if( file.IsOpened() )
+ file.Write( wxT( "EESchema Schematic File Version 2\n" ) );
+
+ // wxFile dtor will close the file
+ }
+
+ // If a <project>.kicad_pcb or <project>.brd file does not exist,
+ // create a .kicad_pcb "stub" file
+ fn.SetExt( KiCadPcbFileExtension );
+ wxFileName leg_fn( fn );
+ leg_fn.SetExt( LegacyPcbFileExtension );
+
+ if( !fn.FileExists() && !leg_fn.FileExists() )
+ {
+ wxFile file( fn.GetFullPath(), wxFile::write );
+
+ if( file.IsOpened() )
+ file.Write( wxT( "(kicad_pcb (version 4) (host kicad \"dummy file\") )\n" ) );
+
+ // wxFile dtor will close the file
+ }
+
+ // Enable the toolbar and menubar buttons and clear the help text.
+ m_active_project = true;
+ m_MessagesBox->Clear();
+}
+
+
+void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event )
+{
+ // Any open KIFACE's must be closed if they are not part of the new project.
+ // (We never want a KIWAY_PLAYER open on a KIWAY that isn't in the same project.)
+ // User is prompted here to close those KIWAY_PLAYERs:
+ if( !Kiway.PlayersClose( false ) )
+ return;
+
+ // evt_id can be one of:
+ // ID_NEW_PROJECT, ID_NEW_PROJECT_FROM_TEMPLATE, ID_LOAD_PROJECT, and
+ // wxID_ANY from 3 different places.
+ int evt_id = event.GetId();
+
+ wxString title;
+
+ ClearMsg();
+
+ bool newProject = ( evt_id == ID_NEW_PROJECT ) ||
+ ( evt_id == ID_NEW_PROJECT_FROM_TEMPLATE );
+
+ if( evt_id != wxID_ANY )
+ {
+ int style;
+
+ if( newProject )
+ {
+ title = _( "Create New Project" );
+ style = wxFD_SAVE | wxFD_OVERWRITE_PROMPT;
+ }
+ else
+ {
+ title = _( "Open Existing Project" );
+ style = wxFD_OPEN | wxFD_FILE_MUST_EXIST;
+ }
+
+ wxString default_dir = GetMruPath();
+ wxFileDialog dlg( this, title, default_dir, wxEmptyString,
+ ProjectFileWildcard, style );
+
+ if( dlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ //DBG( printf( "%s: wxFileDialog::GetPath=%s\n", __func__, TO_UTF8( dlg.GetPath() ) );)
+
+ wxFileName pro( dlg.GetPath() );
+ pro.SetExt( ProjectFileExtension ); // enforce extension
+
+ if( !pro.IsAbsolute() )
+ pro.MakeAbsolute();
+
+ if( newProject )
+ {
+ // Check if the project directory is empty
+ wxDir directory( pro.GetPath() );
+
+ if( directory.HasFiles() )
+ {
+ wxString msg = _( "The selected directory is not empty. We recommend you "
+ "create projects in their own clean directory.\n\nDo you "
+ "want to create a new empty directory for the project?" );
+
+ if( IsOK( this, msg ) )
+ {
+ // Append a new directory with the same name of the project file
+ // and try to create it
+ pro.AppendDir( pro.GetName() );
+
+ if( !wxMkdir( pro.GetPath() ) )
+ // There was a problem, undo
+ pro.RemoveLastDir();
+ }
+ }
+
+ if( evt_id == ID_NEW_PROJECT )
+ {
+ CreateNewProject( pro.GetFullPath() );
+ }
+ else if( evt_id == ID_NEW_PROJECT_FROM_TEMPLATE )
+ {
+ // Launch the template selector dialog
+ CreateNewProject( pro.GetFullPath(), true );
+ }
+ }
+
+ SetProjectFileName( pro.GetFullPath() );
+ }
+
+ wxString prj_filename = GetProjectFileName();
+
+ wxString nameless_prj = NAMELESS_PROJECT wxT( ".pro" );
+
+ wxLogDebug( wxT( "%s: %s" ),
+ GetChars( wxFileName( prj_filename ).GetFullName() ),
+ GetChars( nameless_prj ) );
+
+ // Check if project file exists and if it is not noname.pro
+ if( !wxFileExists( prj_filename )
+ && !wxFileName( prj_filename ).GetFullName().IsSameAs( nameless_prj ) )
+ {
+ wxString msg = wxString::Format( _(
+ "KiCad project file '%s' not found" ),
+ GetChars( prj_filename ) );
+
+ DisplayError( this, msg );
+ return;
+ }
+
+ // Either this is the first time kicad has been run or one of the projects in the
+ // history list is no longer valid. This prevents kicad from automatically creating
+ // a noname.pro file in the same folder as the kicad binary.
+ if( wxFileName( prj_filename ).GetFullName().IsSameAs( nameless_prj ) && !newProject )
+ {
+ m_active_project = false;
+ m_MessagesBox->SetValue( _( "To proceed, you can use the File menu to start a new project." ) );
+ return;
+ }
+ else
+ {
+ m_active_project = true;
+ m_MessagesBox->Clear();
+ }
+
+ Prj().ConfigLoad( Pgm().SysSearch(), GeneralGroupName, s_KicadManagerParams );
+
+ title = wxT( "KiCad " ) + GetBuildVersion() + wxT( ' ' ) + prj_filename;
+
+ if( !wxFileName( prj_filename ).IsDirWritable() )
+ title += _( " [Read Only]" );
+ else
+ SetMruPath( Prj().GetProjectPath() ); // Only set MRU path if we have write access.
+
+ SetTitle( title );
+
+ if( !prj_filename.IsSameAs( nameless_prj ) )
+ UpdateFileHistory( prj_filename, &Pgm().GetFileHistory() );
+
+ m_LeftWin->ReCreateTreePrj();
+
+ // Rebuild the list of watched paths.
+ // however this is possible only when the main loop event handler is running,
+ // so we use it to run the rebuild function.
+ wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_INIT_WATCHED_PATHS );
+
+ wxPostEvent( this, cmd );
+
+ PrintPrjInfo();
+}
+
+
+/* Creates a new project folder, copy a template into this new folder.
+ * and open this new project as working project
+ */
+void KICAD_MANAGER_FRAME::OnCreateProjectFromTemplate( wxCommandEvent& event )
+{
+ wxString default_dir = wxFileName( Prj().GetProjectFullName() ).GetPathWithSep();
+ wxString title = _("New Project Folder");
+ wxDirDialog dlg( this, title, default_dir );
+
+ if( dlg.ShowModal() == wxID_CANCEL )
+ return;
+
+ // Builds the project .pro filename, from the new project folder name
+ wxFileName fn;
+ fn.AssignDir( dlg.GetPath() );
+ fn.SetName( dlg.GetPath().AfterLast( SEP() ) );
+ fn.SetExt( wxT( "pro" ) );
+
+ // Launch the template selector dialog, and copy files
+ CreateNewProject( fn.GetFullPath(), true );
+
+ // Initialize the project
+ event.SetId( wxID_ANY );
+ OnLoadProject( event );
+}
+
+
+void KICAD_MANAGER_FRAME::OnSaveProject( wxCommandEvent& event )
+{
+ if( !wxIsWritable( GetProjectFileName() ) )
+ return;
+
+ // was: wxGetApp().WriteProjectConfig( m_ProjectFileName.GetFullPath(),
+ // GeneralGroupName, s_KicadManagerParams );
+ Prj().ConfigSave( Pgm().SysSearch(), GeneralGroupName, s_KicadManagerParams );
+}
+
+
+void KICAD_MANAGER_FRAME::OnUpdateRequiresProject( wxUpdateUIEvent& event )
+{
+ event.Enable( m_active_project );
+}
diff --git a/kicad/project_template.cpp b/kicad/project_template.cpp
new file mode 100644
index 0000000..b4f088c
--- /dev/null
+++ b/kicad/project_template.cpp
@@ -0,0 +1,236 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Brian Sidebotham <brian.sidebotham@gmail.com>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "project_template.h"
+
+#include <vector>
+
+#include <wx/wx.h>
+#include <wx/arrstr.h>
+#include <wx/dir.h>
+#include <wx/filename.h>
+#include <wx/txtstrm.h>
+#include <wx/wfstream.h>
+
+#include <macros.h>
+
+
+#define SEP() wxFileName::GetPathSeparator()
+
+
+PROJECT_TEMPLATE::PROJECT_TEMPLATE( const wxString& aPath )
+{
+ templateBasePath = wxFileName::DirName( aPath );
+ templateMetaPath = wxFileName::DirName( aPath + SEP() + METADIR );
+ templateMetaHtmlFile = wxFileName::FileName( aPath + SEP() + METADIR + SEP() +
+ METAFILE_INFO_HTML );
+ templateMetaIconFile = wxFileName::FileName( aPath + SEP() + METADIR + SEP() + METAFILE_ICON );
+
+ title = wxEmptyString;
+
+ // Test the project template requirements to make sure aPath is a valid
+ // template structure
+ if( !wxFileName::DirExists( templateBasePath.GetPath() ) )
+ {
+ // Error, the path doesn't exist!
+ title = wxT( "Could open the template path! " + aPath );
+ }
+ else if( !wxFileName::DirExists( templateMetaPath.GetPath() ) )
+ {
+ // Error, the meta information directory doesn't exist!
+ title = wxT( "Couldn't open the meta information directory for this template! " +
+ templateMetaPath.GetPath() );
+ }
+ else if( !wxFileName::FileExists( templateMetaHtmlFile.GetFullPath() ) )
+ {
+ // Error, the meta information directory doesn't contain the informational html file!
+ title = wxT( "Cound't find the meta html information file for this template!" );
+ }
+
+ // Try to load an icon
+ metaIcon = new wxBitmap( templateMetaIconFile.GetFullPath(), wxBITMAP_TYPE_PNG );
+}
+
+std::vector<wxFileName> PROJECT_TEMPLATE::GetFileList()
+{
+ std::vector<wxFileName> files;
+ wxString f = templateBasePath.GetPath();
+ wxArrayString allfiles;
+ wxFileName p;
+
+ wxDir::GetAllFiles( f, &allfiles );
+
+ // Create the vector and ignore all of the meta data files!
+ for( size_t i=0; i < allfiles.size(); i++ )
+ {
+ p = allfiles[i];
+
+ // Files that are in the meta directory must not be included
+ if( !p.GetPath().StartsWith( templateMetaPath.GetPath() ) )
+ files.push_back(allfiles[i]);
+ }
+
+ return files;
+}
+
+
+wxString PROJECT_TEMPLATE::GetPrjDirName()
+{
+ return templateBasePath.GetDirs()[ templateBasePath.GetDirCount()-1 ];
+}
+
+
+PROJECT_TEMPLATE::~PROJECT_TEMPLATE()
+{
+
+}
+
+
+wxFileName PROJECT_TEMPLATE::GetHtmlFile()
+{
+ return templateMetaHtmlFile;
+}
+
+
+wxBitmap* PROJECT_TEMPLATE::GetIcon()
+{
+ return metaIcon;
+}
+
+
+bool PROJECT_TEMPLATE::CreateProject( wxFileName& aNewProjectPath )
+{
+ // CreateProject copy the files from template to the new project folder
+ // and rename files which have the same name as the template .pro file
+ bool result = true;
+
+ std::vector<wxFileName> srcFiles = GetFileList();
+
+ // Find the template file name base. this is the name of the .pro templte file
+ wxString basename;
+ for( size_t i=0; i < srcFiles.size(); i++ )
+ {
+ if( srcFiles[i].GetExt() == wxT( "pro" ) )
+ {
+ basename = srcFiles[i].GetName();
+ break;
+ }
+ }
+
+ for( size_t i=0; i < srcFiles.size(); i++ )
+ {
+ // Replace the template path
+ wxFileName destination = srcFiles[i];
+
+ // Replace the template filename with the project filename for the new project creation
+ wxString currname = destination.GetName();
+ currname.Replace( basename, aNewProjectPath.GetName() );
+ destination.SetName( currname );
+
+ // Replace the template path with the project path for the new project creation
+ // but keep the sub directory name, if exists
+ wxString destpath = destination.GetPathWithSep();
+ destpath.Replace( templateBasePath.GetPathWithSep(), aNewProjectPath.GetPathWithSep() );
+
+ // Check to see if the path already exists, if not attempt to create it here. Don't worry
+ // about error checking, if the path isn't created the file copy will fail anyway
+
+ if( !wxFileName::DirExists( destpath ) )
+ wxFileName::Mkdir( destpath, 0777, wxPATH_MKDIR_FULL );
+
+ destination.SetPath( destpath );
+
+ wxString srcFile = srcFiles[i].GetFullPath();
+ wxString dstFile = destination.GetFullPath();
+
+ if( !wxCopyFile( srcFile, dstFile ) )
+ {
+ result = false;
+ break;
+ }
+ }
+
+ return result;
+}
+
+
+wxString* PROJECT_TEMPLATE::GetTitle(void)
+{
+ wxFileInputStream input( GetHtmlFile().GetFullPath() );
+ wxString separator( wxT( "\x9" ) );
+ wxTextInputStream text( input, separator, wxConvUTF8 );
+
+ /* Open HTML file and get the text between the title tags */
+ if( title == wxEmptyString )
+ {
+ int start = 0;
+ int finish = 0;
+ bool done = false;
+
+ while( input.IsOk() && !input.Eof() && !done )
+ {
+ wxString line = text.ReadLine();
+
+ start = line.Find( wxT( "<title>" ) );
+ if( start == wxNOT_FOUND )
+ start = line.Find( wxT( "<TITLE>" ) );
+
+ finish = line.Find( wxT( "</title>" ) );
+ if( finish == wxNOT_FOUND )
+ finish = line.Find( wxT( "</TITLE>" ) );
+
+ // find the opening tag
+ if( start != wxNOT_FOUND )
+ {
+ if( finish != wxNOT_FOUND )
+ {
+ title = line.SubString( start + 7, finish );
+ }
+ else
+ {
+ title = line.SubString( start + 7, line.Len() - 1 );
+ done = true;
+ }
+ }
+ else
+ {
+ if( finish != wxNOT_FOUND )
+ {
+ title += line.SubString( 0, finish );
+ done = true;
+ }
+ else
+ {
+ title += line;
+ }
+ }
+
+ // Remove line endings
+ title.Replace( wxT( "\r" ), wxT( "" ) );
+ title.Replace( wxT( "\n" ), wxT( "" ) );
+ }
+ }
+
+ return &title;
+}
diff --git a/kicad/project_template.h b/kicad/project_template.h
new file mode 100644
index 0000000..aaef83e
--- /dev/null
+++ b/kicad/project_template.h
@@ -0,0 +1,204 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Brian Sidebotham <brian.sidebotham@gmail.com>
+ * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ @page prj_tmp Project Templates
+
+ Author: Brian Sidebotham
+
+ Proposal
+ --------
+
+ To add new project template functionality to KiCad to facilitate the easy setup of projects
+ which have common attributes such as pre-defined board outlines, connector positions,
+ schematic elements, design rules, etc.
+
+
+ Definitions
+ -----------
+
+ A template is a directory of files, which includes a directory of metadata. The template system
+ name (SYSNAME) is the directory name under which the template files are stored. The metadata
+ directory (METADIR) contains pre-defined files which provide information about the template.
+
+ All files and directories in a template are copied to the new project path when a project is
+ created using a template, except METADIR.
+
+ All files and directories which start with SYSNAME will have SYSNAME replaced by the new
+ project file name, excluding the file extension.
+
+
+ Metadata
+ --------
+
+ A template's METADIR must contain the required files, and might optionally contain any of the
+ optional files
+
+ Required Files
+ ~~~~~~~~~~~~~~
+
+ /info.html - Contains html formatted information about the template which is used by the
+ user to determine if the template is what they are after. The &lt;title&gt; tag
+ determines the actual name of the template that is exposed to the user for
+ template selection. Using html to format this document means that images can
+ be in-lined without having to invent a new scheme. Only HTML supported by
+ wxHTML can be used to format this document.
+
+ Optional Files
+ ~~~~~~~~~~~~~~
+
+ /icon.png - A 64 x 64px PNG icon file which is used as a clickable icon in the template
+ selection dialog.
+
+
+ Operation
+ ---------
+
+ The KiCad File menu will be modified to change New from a menu item to a pop-out menu item, in
+ the same manor as Open Recent. There will be two options on the pop-out menu:
+
+ Blank -> Will act exactly the same as the current new menu item so that anyone who wishes to
+ create a blank project won't have their settings lost or feel alienated.
+
+ From Template -> Will open the template selection dialog.
+
+ The template selection dialog will have a list of icons on the left, and a wxHTML window to the
+ right. A single click on a template's icon on the left will load that templates info.html
+ metadata file and display it in the wxHTML window.
+
+ A double click on a template's icon will start the new project creation and will open a new
+ file dialog. If the user selects a valid location for the new project, the template will be
+ copied to the new project location ( excluding METADIR as mentioned earlier ) and any files
+ that match the string replacement rules will be renamed to reflect the new project's name.
+
+ The list of available templates will be gathered from the following sources:
+
+ wxStandardPaths::GetExecutableDir()/../share/template/
+ wxStandardPaths::GetUserDataDir()/templates/
+ wxGetEnv(wxT("KICAD_PTEMPLATES"))
+ wxGetEnv(wxT("KICAD"))/template/
+
+*/
+
+#ifndef PROJECT_TEMPLATE_H
+#define PROJECT_TEMPLATE_H
+
+#include <vector>
+
+#include <wx/wx.h>
+#include <wx/image.h>
+#include <wx/filename.h>
+
+/**
+ * @brief A directory which contains information about the project template and does not get
+ * copied. This define is the default filename for this directory
+ *
+ */
+#define METADIR wxT("meta")
+
+
+/**
+ * @brief A required html formatted file which contains information about the project template.
+ * This define is the default filename for this file
+ *
+ */
+#define METAFILE_INFO_HTML wxT("info.html")
+
+
+/**
+ * @brief An optional png icon, exactly 64px x 64px which is used in the template selector if
+ * present. This define is the default filename for this file
+ *
+ */
+#define METAFILE_ICON wxT("icon.png")
+
+/**
+ * @brief A class which provides project template functionality.
+ *
+ *
+ *
+ */
+class PROJECT_TEMPLATE {
+private:
+protected:
+ wxFileName templateBasePath;
+ wxFileName templateMetaPath;
+ wxFileName templateMetaHtmlFile;
+ wxFileName templateMetaIconFile;
+ wxBitmap* metaIcon;
+ wxString title;
+
+public:
+
+ /**
+ * @brief Create a new project instance from \a aPath. \a aPath should be a directory that
+ * conforms to the project template requirements
+ *
+ * @param aPath Should be a directory containing the template
+ */
+ PROJECT_TEMPLATE( const wxString& aPath );
+
+ /**
+ * @brief Non-virtual destructor (so no dervied classes)
+ */
+ ~PROJECT_TEMPLATE();
+
+ /**
+ * @brief Get the dir name of the project template
+ * (i.e. the name of the last folder containing the template files)
+ * @return the dir name of the template
+ */
+ wxString GetPrjDirName();
+
+ /**
+ * @brief Get the full Html filename for the project template
+ * @return the html meta information file for this template
+ */
+ wxFileName GetHtmlFile();
+
+ /**
+ * @brief Copies and renames all template files to create a new project.
+ * @param aNewProjectPath The full path of the new project file to create
+ */
+ bool CreateProject( wxFileName& aNewProjectPath );
+
+ /**
+ * @brief Get the 64px^2 icon for the project template
+ * @return an image file of 64px x 64px which is the templates icon
+ */
+ wxBitmap* GetIcon();
+
+ /**
+ * @brief Get the title of the project (extracted from the html title tag)
+ */
+ wxString* GetTitle();
+
+ /**
+ * @brief Get a vector list of filenames for the template. The files are the source files,
+ * and have not yet been through any renaming
+ */
+ std::vector<wxFileName> GetFileList();
+};
+
+#endif
diff --git a/kicad/tree_project_frame.cpp b/kicad/tree_project_frame.cpp
new file mode 100644
index 0000000..88df16a
--- /dev/null
+++ b/kicad/tree_project_frame.cpp
@@ -0,0 +1,1093 @@
+/**
+ * @file tree_project_frame.cpp
+ * @brief Function to build the tree of files in the current project directory
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2016 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <confirm.h>
+#include <gestfich.h>
+#include <pgm_base.h>
+#include <macros.h>
+
+#include <tree_project_frame.h>
+#include <class_treeprojectfiles.h>
+#include <class_treeproject_item.h>
+#include <wildcards_and_files_ext.h>
+
+#include <wx/regex.h>
+#include <wx/dir.h>
+#include <wx/imaglist.h>
+#include <wx/stdpaths.h>
+#include <menus_helpers.h>
+#include <stack>
+
+
+/* Note about the tree project build process:
+ * Building the tree project can be *very* long if there are a lot of subdirectories
+ * in the working directory.
+ * Unfortunately, this happens easily if the project file *.pro is in the home directory
+ * So the tree project is built "on demand":
+ * First the tree is built from the current directory and shows files and subdirs.
+ * > First level subdirs trees are built (i.e subdirs contents are not read)
+ * > When expanding a subdir, each subdir contains is read,
+ * and the corresponding sub tree is populated on the fly.
+ */
+
+// list of files extensions listed in the tree project window
+// *.sch files are always allowed, do not add here
+// Add extensions in a compatible regex format to see others files types
+static const wxChar* s_allowedExtensionsToList[] =
+{
+ wxT( "^.*\\.pro$" ),
+ wxT( "^.*\\.pdf$" ),
+ wxT( "^[^$].*\\.brd$" ), // Legacy Pcbnew files
+ wxT( "^[^$].*\\.kicad_pcb$" ), // S format Pcbnew board files
+ wxT( "^[^$].*\\.kicad_wks$" ), // S format kicad page layout descr files
+ wxT( "^[^$].*\\.kicad_mod$" ), // S format kicad footprint files, currently not listed
+ wxT( "^.*\\.net$" ),
+ wxT( "^.*\\.lib$" ), // Schematic library file
+ wxT( "^.*\\.txt$" ),
+ wxT( "^.*\\.pho$" ), // Gerber file (Old Kicad extension)
+ wxT( "^.*\\.gbr$" ), // Gerber file
+ wxT( "^.*\\.gb[alops]$" ), // Gerber back (or bottom) layer file
+ wxT( "^.*\\.gt[alops]$" ), // Gerber front (or top) layer file
+ wxT( "^.*\\.g[0-9]{1,2}$" ), // Gerber inner layer file
+ wxT( "^.*\\.odt$" ),
+ wxT( "^.*\\.htm$" ),
+ wxT( "^.*\\.html$" ),
+ wxT( "^.*\\.rpt$" ), // Report files
+ wxT( "^.*\\.csv$" ), // Report files in comma separated format
+ wxT( "^.*\\.pos$" ), // Footprint position files
+ wxT( "^.*\\.cmp$" ), // Cvpcb cmp/footprint link files
+ wxT( "^.*\\.drl$" ), // Excellon drill files
+ wxT( "^.*\\.svg$" ), // SVG print/plot files
+ NULL // end of list
+};
+
+
+/* TODO: Check if these file extension and wildcard definitions are used
+ * in any of the other KiCad programs and move them into the common
+ * library as required.
+ */
+
+// File extension definitions.
+const wxChar TextFileExtension[] = wxT( "txt" );
+
+// File wildcard definitions.
+const wxChar TextFileWildcard[] = wxT( "Text files (*.txt)|*.txt" );
+
+
+/**
+ * @brief class TREE_PROJECT_FRAME is the frame that shows the tree list
+ * of files and subdirs inside the working directory
+ * Files are filtered (see s_allowedExtensionsToList) so
+ * only useful files are shown.
+ */
+
+
+BEGIN_EVENT_TABLE( TREE_PROJECT_FRAME, wxSashLayoutWindow )
+ EVT_TREE_ITEM_ACTIVATED( ID_PROJECT_TREE, TREE_PROJECT_FRAME::OnSelect )
+ EVT_TREE_ITEM_EXPANDED( ID_PROJECT_TREE, TREE_PROJECT_FRAME::OnExpand )
+ EVT_TREE_ITEM_RIGHT_CLICK( ID_PROJECT_TREE, TREE_PROJECT_FRAME::OnRight )
+ EVT_MENU( ID_PROJECT_TXTEDIT, TREE_PROJECT_FRAME::OnOpenSelectedFileWithTextEditor )
+ EVT_MENU( ID_PROJECT_NEWDIR, TREE_PROJECT_FRAME::OnCreateNewDirectory )
+ EVT_MENU( ID_PROJECT_DELETE, TREE_PROJECT_FRAME::OnDeleteFile )
+ EVT_MENU( ID_PROJECT_RENAME, TREE_PROJECT_FRAME::OnRenameFile )
+END_EVENT_TABLE()
+
+
+TREE_PROJECT_FRAME::TREE_PROJECT_FRAME( KICAD_MANAGER_FRAME* parent ) :
+ wxSashLayoutWindow( parent,
+ ID_LEFT_FRAME,
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxNO_BORDER | wxSW_3D | wxTAB_TRAVERSAL )
+{
+ m_Parent = parent;
+ m_TreeProject = NULL;
+
+ m_watcher = NULL;
+ Connect( wxEVT_FSWATCHER,
+ wxFileSystemWatcherEventHandler( TREE_PROJECT_FRAME::OnFileSystemEvent ) );
+
+ /*
+ * Filtering is now inverted: the filters are actually used to _enable_ support
+ * for a given file type.
+ */
+
+ // NOTE: sch filter must be first because of a test in AddFile() below
+ m_filters.push_back( wxT( "^.*\\.sch$" ) );
+
+ for( int ii = 0; s_allowedExtensionsToList[ii] != NULL; ii++ )
+ m_filters.push_back( s_allowedExtensionsToList[ii] );
+
+ m_filters.push_back( wxT( "^no KiCad files found" ) );
+
+ ReCreateTreePrj();
+}
+
+
+TREE_PROJECT_FRAME::~TREE_PROJECT_FRAME()
+{
+ if( m_watcher )
+ {
+ m_watcher->RemoveAll();
+ m_watcher->SetOwner( NULL );
+ delete m_watcher;
+ }
+}
+
+
+void TREE_PROJECT_FRAME::RemoveFilter( const wxString& filter )
+{
+ for( unsigned int i = 0; i < m_filters.size(); i++ )
+ {
+ if( filter == m_filters[i] )
+ {
+ m_filters.erase( m_filters.begin() + i );
+ return;
+ }
+ }
+}
+
+
+void TREE_PROJECT_FRAME::OnCreateNewDirectory( wxCommandEvent& event )
+{
+ // Get the root directory name:
+ TREEPROJECT_ITEM* treeData = GetSelectedData();
+
+ if( !treeData )
+ return;
+
+ TreeFileType rootType = treeData->GetType();
+ wxTreeItemId root;
+
+ if( TREE_DIRECTORY == rootType )
+ {
+ root = m_TreeProject->GetSelection();
+ }
+ else
+ {
+ root = m_TreeProject->GetItemParent( m_TreeProject->GetSelection() );
+
+ if( !root.IsOk() )
+ root = m_TreeProject->GetSelection();
+ }
+
+ wxString prj_dir = wxPathOnly( m_Parent->GetProjectFileName() );
+
+ // Ask for the new sub directory name
+ wxString curr_dir = treeData->GetDir();
+
+ if( !curr_dir.IsEmpty() ) // A subdir is selected
+ {
+ // Make this subdir name relative to the current path.
+ // It will be more easy to read by the user, in the next dialog
+ wxFileName fn;
+ fn.AssignDir( curr_dir );
+ fn.MakeRelativeTo( prj_dir );
+ curr_dir = fn.GetPath();
+
+ if( !curr_dir.IsEmpty() )
+ curr_dir += wxFileName::GetPathSeparator();
+ }
+
+ wxString msg = wxString::Format( _( "Current project directory:\n%s" ), GetChars( prj_dir ) );
+ wxString subdir = wxGetTextFromUser( msg, _( "Create New Directory" ), curr_dir );
+
+ if( subdir.IsEmpty() )
+ return;
+
+ wxString full_dirname = prj_dir + wxFileName::GetPathSeparator() + subdir;
+
+ if( wxMkdir( full_dirname ) )
+ {
+ // the new itel will be added by the file watcher
+ // AddItemToTreeProject( subdir, root );
+ }
+}
+
+
+wxString TREE_PROJECT_FRAME::GetFileExt( TreeFileType type )
+{
+ wxString ext;
+
+ switch( type )
+ {
+ case TREE_PROJECT:
+ ext = ProjectFileExtension;
+ break;
+
+ case TREE_SCHEMA:
+ ext = SchematicFileExtension;
+ break;
+
+ case TREE_LEGACY_PCB:
+ ext = LegacyPcbFileExtension;
+ break;
+
+ case TREE_SEXP_PCB:
+ ext = KiCadPcbFileExtension;
+ break;
+
+ case TREE_GERBER:
+ ext = GerberFileExtension;
+ break;
+
+ case TREE_HTML:
+ ext = HtmlFileExtension;
+ break;
+
+ case TREE_PDF:
+ ext = PdfFileExtension;
+ break;
+
+ case TREE_TXT:
+ ext = TextFileExtension;
+ break;
+
+ case TREE_NET:
+ ext = NetlistFileExtension;
+ break;
+
+ case TREE_CMP_LINK:
+ ext = ComponentFileExtension;
+ break;
+
+ case TREE_REPORT:
+ ext = ReportFileExtension;
+ break;
+
+ case TREE_FP_PLACE:
+ ext = FootprintPlaceFileExtension;
+ break;
+
+ case TREE_DRILL:
+ ext = DrillFileExtension;
+ break;
+
+ case TREE_SVG:
+ ext = SVGFileExtension;
+ break;
+
+ case TREE_PAGE_LAYOUT_DESCR:
+ ext = PageLayoutDescrFileExtension;
+ break;
+
+ case TREE_FOOTPRINT_FILE:
+ ext = KiCadFootprintFileExtension;
+ break;
+
+ case TREE_SCHEMATIC_LIBFILE:
+ ext = SchematicLibraryFileExtension;
+ break;
+
+ default: // Eliminates unnecessary GCC warning.
+ break;
+ }
+
+ return ext;
+}
+
+
+/*
+ * Return the wxFileDialog wildcard string for the selected file type.
+ */
+wxString TREE_PROJECT_FRAME::GetFileWildcard( TreeFileType type )
+{
+ wxString ext;
+
+ switch( type )
+ {
+ case TREE_PROJECT:
+ ext = ProjectFileWildcard;
+ break;
+
+ case TREE_SCHEMA:
+ ext = SchematicFileWildcard;
+ break;
+
+ case TREE_LEGACY_PCB:
+ case TREE_SEXP_PCB:
+ ext = PcbFileWildcard;
+ break;
+
+ case TREE_GERBER:
+ ext = GerberFileWildcard;
+ break;
+
+ case TREE_HTML:
+ ext = HtmlFileWildcard;
+ break;
+
+ case TREE_PDF:
+ ext = PdfFileWildcard;
+ break;
+
+ case TREE_TXT:
+ ext = TextFileWildcard;
+ break;
+
+ case TREE_NET:
+ ext = NetlistFileWildcard;
+ break;
+
+ case TREE_CMP_LINK:
+ ext = ComponentFileWildcard;
+ break;
+
+ case TREE_REPORT:
+ ext = ReportFileWildcard;
+ break;
+
+ case TREE_FP_PLACE:
+ ext = FootprintPlaceFileWildcard;
+ break;
+
+ case TREE_DRILL:
+ ext = DrillFileWildcard;
+ break;
+
+ case TREE_SVG:
+ ext = SVGFileWildcard;
+ break;
+
+ case TREE_PAGE_LAYOUT_DESCR:
+ ext = PageLayoutDescrFileWildcard;
+ break;
+
+ case TREE_FOOTPRINT_FILE:
+ ext = KiCadFootprintLibFileWildcard;
+ break;
+
+ case TREE_SCHEMATIC_LIBFILE:
+ ext = SchematicLibraryFileWildcard;
+ break;
+
+ default: // Eliminates unnecessary GCC warning.
+ break;
+ }
+
+ return ext;
+}
+
+
+bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
+ wxTreeItemId& aRoot, bool aRecurse )
+{
+ wxTreeItemId cellule;
+
+ // Check the file type
+ TreeFileType type = TREE_UNKNOWN;
+
+ // Skip not visible files and dirs
+ wxFileName fn( aName );
+
+ // Files/dirs names starting by "." are not visible files under unices.
+ // Skip them also under Windows
+ if( fn.GetName().StartsWith( wxT( "." ) ) )
+ return false;
+
+ if( wxDirExists( aName ) )
+ {
+ type = TREE_DIRECTORY;
+ }
+ else
+ {
+ // Filter
+ wxRegEx reg;
+
+ bool isSchematic = false;
+ bool addFile = false;
+
+ for( unsigned i = 0; i < m_filters.size(); i++ )
+ {
+ wxCHECK2_MSG( reg.Compile( m_filters[i], wxRE_ICASE ), continue,
+ wxT( "Regular expression " ) + m_filters[i] +
+ wxT( " failed to compile." ) );
+
+ if( reg.Matches( aName ) )
+ {
+ addFile = true;
+
+ if( i==0 )
+ isSchematic = true;
+
+ break;
+ }
+ }
+
+ if( !addFile )
+ return false;
+
+ // only show the schematic if it is a top level schematic. Eeschema
+ // cannot open a schematic and display it properly unless it starts
+ // at the top of the hierarchy. The schematic is top level only if
+ // there is a line in the header saying:
+ // "Sheet 1 "
+ // However if the file has the same name as the project, it is always
+ // shown, because it is expected the root sheet.
+ // (and to fix an issue (under XP but could exist under other OS),
+ // when a .sch file is created, the file
+ // create is sent to the wxFileSystemWatcher, but the file still has 0 byte
+ // so it cannot detected as root sheet
+ // This is an ugly fix.
+ if( isSchematic )
+ {
+ wxString fullFileName = aName.BeforeLast( '.' );
+ wxString rootName;
+ TREEPROJECT_ITEM* itemData = GetItemIdData( m_root );
+ if( itemData )
+ rootName = itemData->GetFileName().BeforeLast( '.' );
+
+ if( fullFileName != rootName )
+ {
+ char line[128]; // small because we just need a few bytes from the start of a line
+ FILE* fp;
+
+ fullFileName = aName;
+ fp = wxFopen( fullFileName, wxT( "rt" ) );
+
+ if( fp == NULL )
+ return false;
+
+ addFile = false;
+
+ // check the first 100 lines for the "Sheet 1" string
+ for( int i = 0; i<100; ++i )
+ {
+ if( !fgets( line, sizeof(line), fp ) )
+ break;
+
+ if( !strncmp( line, "Sheet 1 ", 8 ) )
+ {
+ addFile = true;
+ break;
+ }
+ }
+
+ fclose( fp );
+
+ if( !addFile )
+ return false; // it is a non-top-level schematic
+ }
+ }
+
+ for( int i = TREE_PROJECT; i < TREE_MAX; i++ )
+ {
+ wxString ext = GetFileExt( (TreeFileType) i );
+
+ if( ext == wxT( "" ) )
+ continue;
+
+ reg.Compile( wxString::FromAscii( "^.*\\" ) + ext +
+ wxString::FromAscii( "$" ), wxRE_ICASE );
+
+ if( reg.Matches( aName ) )
+ {
+ type = (TreeFileType) i;
+ break;
+ }
+ }
+ }
+
+ // also check to see if it is already there.
+ wxTreeItemIdValue cookie;
+ wxTreeItemId kid = m_TreeProject->GetFirstChild( aRoot, cookie );
+
+ while( kid.IsOk() )
+ {
+ TREEPROJECT_ITEM* itemData = GetItemIdData( kid );
+
+ if( itemData )
+ {
+ if( itemData->GetFileName() == aName )
+ {
+ return true; // well, we would have added it, but it is already here!
+ }
+ }
+
+ kid = m_TreeProject->GetNextChild( aRoot, cookie );
+ }
+
+ // Append the item (only appending the filename not the full path):
+ wxString file = wxFileNameFromPath( aName );
+ cellule = m_TreeProject->AppendItem( aRoot, file );
+ TREEPROJECT_ITEM* data = new TREEPROJECT_ITEM( type, aName, m_TreeProject );
+
+ m_TreeProject->SetItemData( cellule, data );
+ data->SetState( 0 );
+
+ // Mark root files (files which have the same aName as the project)
+ wxFileName project( m_Parent->GetProjectFileName() );
+ wxFileName currfile( file );
+
+ if( currfile.GetName().CmpNoCase( project.GetName() ) == 0 )
+ data->SetRootFile( true );
+ else
+ data->SetRootFile( false );
+
+ // This section adds dirs and files found in the subdirs
+ // in this case AddFile is recursive, but for the first level only.
+ if( TREE_DIRECTORY == type && aRecurse )
+ {
+ wxDir dir( aName );
+
+ if( dir.IsOpened() ) // protected dirs will not open properly.
+ {
+ wxString dir_filename;
+
+ data->SetPopulated( true );
+
+ if( dir.GetFirst( &dir_filename ) )
+ {
+ do // Add name in tree, but do not recurse
+ {
+ wxString path = aName + wxFileName::GetPathSeparator() + dir_filename;
+ AddItemToTreeProject( path, cellule, false );
+ } while( dir.GetNext( &dir_filename ) );
+ }
+ }
+
+ // Sort filenames by alphabetic order
+ m_TreeProject->SortChildren( cellule );
+ }
+
+ return true;
+}
+
+
+void TREE_PROJECT_FRAME::ReCreateTreePrj()
+{
+ wxTreeItemId rootcellule;
+ bool prjOpened = false;
+ wxString pro_dir = m_Parent->GetProjectFileName();
+
+ if( !m_TreeProject )
+ m_TreeProject = new TREEPROJECTFILES( this );
+ else
+ m_TreeProject->DeleteAllItems();
+
+ if( !pro_dir ) // This is empty from TREE_PROJECT_FRAME constructor
+ return;
+
+ wxFileName fn = pro_dir;
+
+ if( !fn.IsOk() )
+ {
+ fn.Clear();
+ fn.SetPath( wxStandardPaths::Get().GetDocumentsDir() );
+ fn.SetName( NAMELESS_PROJECT );
+ fn.SetExt( ProjectFileExtension );
+ }
+
+ prjOpened = fn.FileExists();
+
+ // root tree:
+ m_root = rootcellule = m_TreeProject->AddRoot( fn.GetFullName(),
+ TREE_PROJECT - 1,
+ TREE_PROJECT - 1 );
+
+ m_TreeProject->SetItemBold( rootcellule, true );
+
+ m_TreeProject->SetItemData( rootcellule,
+ new TREEPROJECT_ITEM( TREE_PROJECT,
+ fn.GetFullPath(),
+ m_TreeProject ) );
+
+ // Now adding all current files if available
+ if( prjOpened )
+ {
+ wxString pro_dir = wxPathOnly( m_Parent->GetProjectFileName() );
+ wxDir dir( pro_dir );
+
+ if( dir.IsOpened() ) // protected dirs will not open, see "man opendir()"
+ {
+ wxString filename;
+ bool cont = dir.GetFirst( &filename );
+
+ while( cont )
+ {
+ if( filename != fn.GetFullName() )
+ {
+ wxString name = dir.GetName() + wxFileName::GetPathSeparator() + filename;
+ AddItemToTreeProject( name, m_root );
+ }
+
+ cont = dir.GetNext( &filename );
+ }
+ }
+ }
+ else
+ {
+ m_TreeProject->AppendItem( m_root, wxT( "Empty project" ) );
+ }
+
+ m_TreeProject->Expand( rootcellule );
+
+ // Sort filenames by alphabetic order
+ m_TreeProject->SortChildren( m_root );
+}
+
+
+void TREE_PROJECT_FRAME::OnRight( wxTreeEvent& Event )
+{
+ int tree_id;
+ TREEPROJECT_ITEM* tree_data;
+ wxString fullFileName;
+ wxTreeItemId curr_item = Event.GetItem();
+
+ // Ensure item is selected (Under Windows right click does not select the item)
+ m_TreeProject->SelectItem( curr_item );
+
+ tree_data = GetSelectedData();
+
+ if( !tree_data )
+ return;
+
+ tree_id = tree_data->GetType();
+ fullFileName = tree_data->GetFileName();
+
+ wxMenu popupMenu;
+
+ switch( tree_id )
+ {
+ case TREE_PROJECT:
+ AddMenuItem( &popupMenu, ID_PROJECT_NEWDIR,
+ _( "New D&irectory" ),
+ _( "Create a New Directory" ),
+ KiBitmap( directory_xpm ) );
+ break;
+
+ case TREE_DIRECTORY:
+ AddMenuItem( &popupMenu, ID_PROJECT_NEWDIR,
+ _( "New D&irectory" ),
+ _( "Create a New Directory" ),
+ KiBitmap( directory_xpm ) );
+ AddMenuItem( &popupMenu, ID_PROJECT_DELETE,
+ _( "&Delete Directory" ),
+ _( "Delete the Directory and its content" ),
+ KiBitmap( delete_xpm ) );
+ break;
+
+ default:
+ AddMenuItem( &popupMenu, ID_PROJECT_TXTEDIT,
+ _( "&Edit in a text editor" ),
+ _( "Open the file in a Text Editor" ),
+ KiBitmap( icon_txt_xpm ) );
+ AddMenuItem( &popupMenu, ID_PROJECT_RENAME,
+ _( "&Rename file" ),
+ _( "Rename file" ),
+ KiBitmap( right_xpm ) );
+ AddMenuItem( &popupMenu, ID_PROJECT_DELETE,
+ _( "&Delete File" ),
+ _( "Delete the Directory and its content" ),
+ KiBitmap( delete_xpm ) );
+ break;
+ }
+
+ PopupMenu( &popupMenu );
+}
+
+
+void TREE_PROJECT_FRAME::OnOpenSelectedFileWithTextEditor( wxCommandEvent& event )
+{
+ TREEPROJECT_ITEM* tree_data = GetSelectedData();
+
+ if( !tree_data )
+ return;
+
+ if( tree_data->GetType() == TREE_DIRECTORY )
+ return;
+
+ wxString fullFileName = tree_data->GetFileName();
+ AddDelimiterString( fullFileName );
+ wxString editorname = Pgm().GetEditorName();
+
+ if( !editorname.IsEmpty() )
+ ExecuteFile( this, editorname, fullFileName );
+}
+
+
+void TREE_PROJECT_FRAME::OnDeleteFile( wxCommandEvent& )
+{
+ TREEPROJECT_ITEM* tree_data = GetSelectedData();
+
+ if( !tree_data )
+ return;
+
+ tree_data->Delete();
+}
+
+
+void TREE_PROJECT_FRAME::OnRenameFile( wxCommandEvent& )
+{
+ wxTreeItemId curr_item = m_TreeProject->GetSelection();
+ TREEPROJECT_ITEM* tree_data = GetSelectedData();
+
+ if( !tree_data )
+ return;
+
+ wxString buffer = m_TreeProject->GetItemText( curr_item );
+ wxString msg = wxString::Format(
+ _( "Change filename: '%s'" ),
+ GetChars( tree_data->GetFileName() ) );
+
+ wxTextEntryDialog dlg( this, msg, _( "Change filename" ), buffer );
+
+ if( dlg.ShowModal() != wxID_OK )
+ return; // canceled by user
+
+ buffer = dlg.GetValue();
+ buffer.Trim( true );
+ buffer.Trim( false );
+
+ if( buffer.IsEmpty() )
+ return; // empty file name not allowed
+
+ if( tree_data->Rename( buffer, true ) )
+ m_TreeProject->SetItemText( curr_item, buffer );
+}
+
+
+void TREE_PROJECT_FRAME::OnSelect( wxTreeEvent& Event )
+{
+ TREEPROJECT_ITEM* tree_data = GetSelectedData();
+
+ if( !tree_data )
+ return;
+
+ tree_data->Activate( this );
+}
+
+
+void TREE_PROJECT_FRAME::OnExpand( wxTreeEvent& Event )
+{
+ wxTreeItemId itemId = Event.GetItem();
+ TREEPROJECT_ITEM* tree_data = GetItemIdData( itemId );
+
+ if( !tree_data )
+ return;
+
+ if( tree_data->GetType() != TREE_DIRECTORY )
+ return;
+
+ // explore list of non populated subdirs, and populate them
+ wxTreeItemIdValue cookie;
+ wxTreeItemId kid = m_TreeProject->GetFirstChild( itemId, cookie );
+
+ bool subdir_populated = false;
+
+ for( ; kid.IsOk(); kid = m_TreeProject->GetNextChild( itemId, cookie ) )
+ {
+ TREEPROJECT_ITEM* itemData = GetItemIdData( kid );
+
+ if( !itemData || itemData->GetType() != TREE_DIRECTORY )
+ continue;
+
+ if( itemData->IsPopulated() )
+ continue;
+
+ wxString fileName = itemData->GetFileName();
+ wxDir dir( fileName );
+
+ if( dir.IsOpened() )
+ {
+ wxString dir_filename;
+
+ if( dir.GetFirst( &dir_filename ) )
+ {
+ do // Add name to tree item, but do not recurse in subdirs:
+ {
+ wxString name = fileName + wxFileName::GetPathSeparator() + dir_filename;
+ AddItemToTreeProject( name, kid, false );
+ } while( dir.GetNext( &dir_filename ) );
+ }
+
+ itemData->SetPopulated( true ); // set state to populated
+ subdir_populated = true;
+ }
+
+ // Sort filenames by alphabetic order
+ m_TreeProject->SortChildren( kid );
+ }
+
+ if( subdir_populated )
+ {
+ #ifndef __WINDOWS__
+ FileWatcherReset();
+ #endif
+ }
+}
+
+
+TREEPROJECT_ITEM* TREE_PROJECT_FRAME::GetSelectedData()
+{
+ return dynamic_cast<TREEPROJECT_ITEM*>( m_TreeProject->GetItemData
+ ( m_TreeProject->GetSelection() ) );
+}
+
+
+TREEPROJECT_ITEM* TREE_PROJECT_FRAME::GetItemIdData( wxTreeItemId aId )
+{
+ return dynamic_cast<TREEPROJECT_ITEM*>( m_TreeProject->GetItemData( aId ) );
+}
+
+
+wxTreeItemId TREE_PROJECT_FRAME::findSubdirTreeItem( const wxString& aSubDir )
+{
+ wxString prj_dir = wxPathOnly( m_Parent->GetProjectFileName() );
+
+ // If the subdir is the current working directory, return m_root
+ // in main list:
+ if( prj_dir == aSubDir )
+ return m_root;
+
+ // The subdir is in the main tree or in a subdir: Locate it
+ wxTreeItemIdValue cookie;
+ wxTreeItemId root_id = m_root;
+ std::stack < wxTreeItemId > subdirs_id;
+
+ wxTreeItemId kid = m_TreeProject->GetFirstChild( root_id, cookie );
+
+ while( 1 )
+ {
+ if( ! kid.IsOk() )
+ {
+ if( subdirs_id.empty() ) // all items were explored
+ {
+ root_id = kid; // Not found: return an invalid wxTreeItemId
+ break;
+ }
+ else
+ {
+ root_id = subdirs_id.top();
+ subdirs_id.pop();
+ kid = m_TreeProject->GetFirstChild( root_id, cookie );
+
+ if( ! kid.IsOk() )
+ continue;
+ }
+ }
+
+ TREEPROJECT_ITEM* itemData = GetItemIdData( kid );
+
+ if( itemData && ( itemData->GetType() == TREE_DIRECTORY ) )
+ {
+ if( itemData->GetFileName() == aSubDir ) // Found!
+ {
+ root_id = kid;
+ break;
+ }
+
+ // kid is a subdir, push in list to explore it later
+ if( itemData->IsPopulated() )
+ subdirs_id.push( kid );
+ }
+
+ kid = m_TreeProject->GetNextChild( root_id, cookie );
+ }
+
+ return root_id;
+}
+
+
+void TREE_PROJECT_FRAME::OnFileSystemEvent( wxFileSystemWatcherEvent& event )
+{
+ wxFileName pathModified = event.GetPath();
+ wxString subdir = pathModified.GetPath();
+ wxString fn = pathModified.GetFullPath();
+
+ switch( event.GetChangeType() )
+ {
+ case wxFSW_EVENT_DELETE:
+ break;
+
+ case wxFSW_EVENT_CREATE:
+ break;
+
+ case wxFSW_EVENT_RENAME:
+ break;
+
+ case wxFSW_EVENT_MODIFY:
+ case wxFSW_EVENT_ACCESS:
+ default:
+ return;
+ }
+
+ wxTreeItemId root_id = findSubdirTreeItem( subdir );
+
+ if( !root_id.IsOk() )
+ return;
+
+ wxTreeItemIdValue cookie; // dummy variable needed by GetFirstChild()
+ wxTreeItemId kid = m_TreeProject->GetFirstChild( root_id, cookie );
+
+ switch( event.GetChangeType() )
+ {
+ case wxFSW_EVENT_CREATE:
+ AddItemToTreeProject( pathModified.GetFullPath(), root_id, false );
+ break;
+
+ case wxFSW_EVENT_DELETE:
+ while( kid.IsOk() )
+ {
+ TREEPROJECT_ITEM* itemData = GetItemIdData( kid );
+
+ if( itemData && itemData->GetFileName() == fn )
+ {
+ m_TreeProject->Delete( kid );
+ return;
+ }
+ kid = m_TreeProject->GetNextChild( root_id, cookie );
+ }
+ break;
+
+ case wxFSW_EVENT_RENAME :
+ {
+ wxFileName newpath = event.GetNewPath();
+ wxString newfn = newpath.GetFullPath();
+
+ while( kid.IsOk() )
+ {
+ TREEPROJECT_ITEM* itemData = GetItemIdData( kid );
+
+ if( itemData && itemData->GetFileName() == fn )
+ {
+ m_TreeProject->Delete( kid );
+ break;
+ }
+
+ kid = m_TreeProject->GetNextChild( root_id, cookie );
+ }
+
+ AddItemToTreeProject( newfn, root_id, false );
+ }
+ break;
+ }
+
+ // Sort filenames by alphabetic order
+ m_TreeProject->SortChildren( root_id );
+}
+
+
+void TREE_PROJECT_FRAME::FileWatcherReset()
+{
+ // Prepare file watcher:
+ if( m_watcher )
+ {
+ m_watcher->RemoveAll();
+ }
+ else
+ {
+ m_watcher = new wxFileSystemWatcher();
+ m_watcher->SetOwner( this );
+ }
+
+ // Add directories which should be monitored.
+ // under windows, we add the curr dir and all subdirs
+ // under unix, we add only the curr dir and the populated subdirs
+ // see http://docs.wxwidgets.org/trunk/classwx_file_system_watcher.htm
+ // under unix, the file watcher needs more work to be efficient
+ // moreover, under wxWidgets 2.9.4, AddTree does not work properly.
+
+ // We can see wxString under a debugger, not a wxFileName
+ wxString prj_dir = wxPathOnly( m_Parent->GetProjectFileName() );
+ wxFileName fn;
+ fn.AssignDir( prj_dir );
+ fn.DontFollowLink();
+
+#ifdef __WINDOWS__
+ m_watcher->AddTree( fn );
+#else
+ m_watcher->Add( fn );
+
+ // Add subdirs
+ wxTreeItemIdValue cookie;
+ wxTreeItemId root_id = m_root;
+
+ std::stack < wxTreeItemId > subdirs_id;
+
+ wxTreeItemId kid = m_TreeProject->GetFirstChild( root_id, cookie );
+
+ while( 1 )
+ {
+ if( !kid.IsOk() )
+ {
+ if( subdirs_id.empty() ) // all items were explored
+ break;
+ else
+ {
+ root_id = subdirs_id.top();
+ subdirs_id.pop();
+ kid = m_TreeProject->GetFirstChild( root_id, cookie );
+
+ if( !kid.IsOk() )
+ continue;
+ }
+ }
+
+ TREEPROJECT_ITEM* itemData = GetItemIdData( kid );
+
+ if( itemData && itemData->GetType() == TREE_DIRECTORY )
+ {
+ // we can see wxString under a debugger, not a wxFileName
+ wxString path = itemData->GetFileName();
+
+ wxLogDebug( "%s: add '%s'\n", __func__, TO_UTF8( path ) );
+
+ if( wxFileName::IsDirReadable( path ) ) // linux whines about watching protected dir
+ {
+ fn.AssignDir( path );
+ m_watcher->Add( fn );
+
+ // if kid is a subdir, push in list to explore it later
+ if( itemData->IsPopulated() && m_TreeProject->GetChildrenCount( kid ) )
+ subdirs_id.push( kid );
+ }
+ }
+
+ kid = m_TreeProject->GetNextChild( root_id, cookie );
+ }
+#endif
+
+#if defined(DEBUG) && 1
+ wxArrayString paths;
+ m_watcher->GetWatchedPaths( &paths );
+ wxLogDebug( "%s: watched paths:", __func__ );
+
+ for( unsigned ii = 0; ii < paths.GetCount(); ii++ )
+ wxLogDebug( " %s\n", TO_UTF8( paths[ii] ) );
+#endif
+}
+
+
+void KICAD_MANAGER_FRAME::OnChangeWatchedPaths( wxCommandEvent& aEvent )
+{
+ m_LeftWin->FileWatcherReset();
+}
diff --git a/kicad/tree_project_frame.h b/kicad/tree_project_frame.h
new file mode 100644
index 0000000..908e8a3
--- /dev/null
+++ b/kicad/tree_project_frame.h
@@ -0,0 +1,184 @@
+/**
+ * @file tree_project_frame.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef TREEPRJ_FRAME_H
+#define TREEPRJ_FRAME_H
+
+#include <kicad.h>
+#include <wx/fswatcher.h>
+
+
+class TREEPROJECT_ITEM;
+
+/** class TREE_PROJECT_FRAME
+ * Window to display the tree files
+ */
+class TREE_PROJECT_FRAME : public wxSashLayoutWindow
+{
+ friend class TREEPROJECT_ITEM;
+public:
+ KICAD_MANAGER_FRAME* m_Parent;
+ TREEPROJECTFILES* m_TreeProject;
+
+private:
+ wxTreeItemId m_root;
+ std::vector<wxString> m_filters;
+ wxFileSystemWatcher* m_watcher; // file system watcher (since wxWidgets 2.9.2)
+
+public:
+ TREE_PROJECT_FRAME( KICAD_MANAGER_FRAME* parent );
+ ~TREE_PROJECT_FRAME();
+
+ /**
+ * Create or modify the tree showing project file names
+ */
+ void ReCreateTreePrj();
+
+ /**
+ * Reinit the watched paths
+ * Should be called after opening a new project to
+ * rebuild the list of watched paths.
+ * Should be called *atfer* the main loop event handler is started
+ */
+ void FileWatcherReset();
+
+protected:
+ static wxString GetFileExt( TreeFileType type );
+ static wxString GetFileWildcard( TreeFileType type );
+
+ /**
+ * Function GetSelectedData
+ * return the item data from item currently selected (highlighted)
+ * Note this is not necessary the "clicked" item,
+ * because when expanding, collapsing an item this item is not selected
+ */
+ TREEPROJECT_ITEM* GetSelectedData();
+
+ /**
+ * Function GetItemIdData
+ * return the item data corresponding to a wxTreeItemId identifier
+ * @param aId = the wxTreeItemId identifier.
+ * @return a TREEPROJECT_ITEM pointer correspondinfg to item id aId
+ */
+ TREEPROJECT_ITEM* GetItemIdData( wxTreeItemId aId );
+
+private:
+ /**
+ * Called on a double click on an item
+ */
+ void OnSelect( wxTreeEvent& Event );
+
+ /**
+ * Called on a click on the + or - button of an item with children
+ */
+ void OnExpand( wxTreeEvent& Event );
+
+ /**
+ * Called on a right click on an item
+ */
+ void OnRight( wxTreeEvent& Event );
+
+ /**
+ * Function OnOpenSelectedFileWithTextEditor
+ * Called via the popup menu, when right clicking on a file name
+ * Call the text editor to open the selected file
+ * in the tree project
+ */
+ void OnOpenSelectedFileWithTextEditor( wxCommandEvent& event );
+
+ /**
+ * Function OnDeleteFile
+ * Called via the popup menu, when right clicking on a file name
+ * or a directory name to delete the selected file or directory
+ * in the tree project
+ */
+ void OnDeleteFile( wxCommandEvent& event );
+
+ /**
+ * Function OnRenameFile
+ * Called via the popup menu, when right clicking on a file name
+ * or a directory name to rename the selected file or directory
+ * in the tree project
+ */
+ void OnRenameFile( wxCommandEvent& event );
+
+ /**
+ * Function OnCreateNewDirectory
+ * Creates a new subdirectory inside the current kicad project directory
+ * the user is prompted to enter a directory name
+ */
+ void OnCreateNewDirectory( wxCommandEvent& event );
+
+ void ClearFilters()
+ {
+ m_filters.clear();
+ }
+
+ const std::vector<wxString>& GetFilters()
+ {
+ return m_filters;
+ }
+
+ void RemoveFilter( const wxString& filter );
+
+ /**
+ * Function AddItemToTreeProject
+ * @brief Add the file or directory aName to the project tree
+ * @param aName = the filename or the directory name to add in tree
+ * @param aRoot = the wxTreeItemId item where to add sub tree items
+ * @param aRecurse = true to add file or subdir names to the current tree item
+ * false to stop file add.
+ * @return true if the file (or directory) is added.
+ */
+ bool AddItemToTreeProject( const wxString& aName,
+ wxTreeItemId& aRoot,
+ bool aRecurse = true );
+
+ /**
+ * Function findSubdirTreeItem
+ * searches for the item in tree project which is the
+ * node of the subdirectory aSubDir
+ * @param aSubDir = the directory to find in tree
+ * @return the opaque reference to the tree item.
+ * if not found, return an invalid tree item.
+ * therefore wxTreeItemId::IsOk should be used to test
+ * the returned value
+ */
+ wxTreeItemId findSubdirTreeItem( const wxString& aSubDir );
+
+ /**
+ * called when a file or directory is modified/created/deleted
+ * The tree project is modified when a file or directory
+ * is created/deleted/renamed to reflect the file change
+ */
+ void OnFileSystemEvent( wxFileSystemWatcherEvent& event );
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif // TREEPRJ_FRAME_H
diff --git a/lib_dxf/CMakeLists.txt b/lib_dxf/CMakeLists.txt
new file mode 100644
index 0000000..1a72982
--- /dev/null
+++ b/lib_dxf/CMakeLists.txt
@@ -0,0 +1,12 @@
+include_directories(intern)
+
+set(LIBDXF_SRCS
+ libdxfrw.cpp
+ intern/dxfwriter.cpp
+ intern/drw_textcodec.cpp
+ intern/dxfreader.cpp
+ drw_objects.cpp
+ drw_entities.cpp
+ )
+
+add_library(lib_dxf STATIC ${LIBDXF_SRCS})
diff --git a/lib_dxf/CREDITS.txt b/lib_dxf/CREDITS.txt
new file mode 100644
index 0000000..04a1e7e
--- /dev/null
+++ b/lib_dxf/CREDITS.txt
@@ -0,0 +1,4 @@
+This library comes from the LibreCAD project, a 2D CAD program.
+see http://sourceforge.net/projects/libdxfrw/
+the latest sources are on:
+https://github.com/LibreCAD/LibreCAD/tree/master/libraries/libdxfrw/src
diff --git a/lib_dxf/drw_base.h b/lib_dxf/drw_base.h
new file mode 100644
index 0000000..df8f155
--- /dev/null
+++ b/lib_dxf/drw_base.h
@@ -0,0 +1,493 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef DRW_BASE_H
+#define DRW_BASE_H
+
+#define DRW_VERSION "0.5.13"
+
+#include <string>
+#include <cmath>
+
+#define UTF8STRING std::string
+#define DRW_UNUSED( x ) (void) x
+
+#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
+# define DRW_WIN
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
+# define DRW_WIN
+#elif defined(__MWERKS__) && defined(__INTEL__)
+# define DRW_WIN
+#else
+# define DRW_POSIX
+#endif
+
+#ifndef M_PI
+ #define M_PI 3.141592653589793238462643
+#endif
+#ifndef M_PI_2
+ #define M_PI_2 1.57079632679489661923
+#endif
+#define M_PIx2 6.283185307179586 // 2*PI
+#define ARAD 57.29577951308232
+
+namespace DRW {
+// ! Version numbers for the DXF Format.
+enum Version
+{
+ UNKNOWNV, /*!< UNKNOWN VERSION. */
+ AC1006, /*!< R10. */
+ AC1009, /*!< R11 & R12. */
+ AC1012, /*!< R13. */
+ AC1014, /*!< R14. */
+ AC1015, /*!< ACAD 2000. */
+ AC1018, /*!< ACAD 2004. */
+ AC1021, /*!< ACAD 2007. */
+ AC1024 /*!< ACAD 2010. */
+};
+
+enum error
+{
+ BAD_NONE, /*!< No error. */
+ BAD_UNKNOWN, /*!< UNKNOWN. */
+ BAD_OPEN, /*!< error opening file. */
+ BAD_VERSION, /*!< unsupported version. */
+ BAD_READ_FILE_HEADER, /*!< error in file header read process. */
+ BAD_READ_HEADER, /*!< error in header vars read process. */
+ BAD_READ_OFFSETS, /*!< error in object map read process. */
+ BAD_READ_CLASSES, /*!< error in classes read process. */
+ BAD_READ_TABLES, /*!< error in tables read process. */
+ BAD_READ_ENTITIES /*!< error in entities read process. */
+};
+}
+
+// ! Class to handle 3D coordinate point
+/*!
+ * Class to handle 3D coordinate point
+ * @author Rallaz
+ */
+class DRW_Coord
+{
+public:
+ DRW_Coord(): x(0), y(0), z(0) {}
+ DRW_Coord( double ix, double iy, double iz )
+ {
+ x = ix; y = iy; z = iz;
+ }
+
+ DRW_Coord operator =( const DRW_Coord& data )
+ {
+ x = data.x; y = data.y; z = data.z;
+ return *this;
+ }
+
+/*!< convert to unitary vector */
+ void unitize()
+ {
+ double dist;
+
+ dist = sqrt( x * x + y * y + z * z );
+
+ if( dist > 0.0 )
+ {
+ x = x / dist;
+ y = y / dist;
+ z = z / dist;
+ }
+ }
+
+public:
+ double x;
+ double y;
+ double z;
+};
+
+
+// ! Class to handle vertex
+/*!
+ * Class to handle vertex for lwpolyline entity
+ * @author Rallaz
+ */
+class DRW_Vertex2D
+{
+public:
+ DRW_Vertex2D()
+ {
+// eType = DRW::LWPOLYLINE;
+ x = y = stawidth = endwidth = bulge = 0.0;
+ }
+
+ DRW_Vertex2D( double sx, double sy, double b )
+ {
+ stawidth = endwidth = 0;
+ x = sx;
+ y = sy;
+ bulge = b;
+ }
+
+public:
+ double x; /*!< x coordinate, code 10 */
+ double y; /*!< y coordinate, code 20 */
+ double stawidth; /*!< Start width, code 40 */
+ double endwidth; /*!< End width, code 41 */
+ double bulge; /*!< bulge, code 42 */
+};
+
+
+// ! Class to handle header vars
+/*!
+ * Class to handle header vars
+ * @author Rallaz
+ */
+class DRW_Variant
+{
+public:
+ enum TYPE
+ {
+ STRING,
+ INTEGER,
+ DOUBLE,
+ COORD,
+ INVALID
+ };
+
+ DRW_Variant()
+ {
+ type = INVALID;
+ code = 0;
+ }
+
+ DRW_Variant( const DRW_Variant& d )
+ {
+ code = d.code;
+ type = d.type;
+
+ if( d.type == COORD ) vdata = d.vdata;
+
+ if( d.type == STRING ) sdata = d.sdata;
+
+ content = d.content;
+ }
+
+ DRW_Variant( int c, UTF8STRING s ) { addString( s ); code = c; }
+ DRW_Variant( int c, int i ) { addInt( i ); code = c; }
+ DRW_Variant( int c, double d ) { addDouble( d ); code = c; }
+ DRW_Variant( int c, double x, double y, double z )
+ {
+ setType( COORD ); vdata.x = x; vdata.y = y;
+ vdata.z = z; content.v = &vdata; code = c;
+ }
+
+ ~DRW_Variant()
+ {
+ }
+
+ void addString( UTF8STRING s ) { setType( STRING ); sdata = s; content.s = &sdata; }
+ void addInt( int i ) { setType( INTEGER ); content.i = i; }
+ void addDouble( double d ) { setType( DOUBLE ); content.d = d; }
+ void addCoord()
+ {
+ setType( COORD ); vdata.x = 0.0; vdata.y = 0.0; vdata.z = 0.0; content.v =
+ &vdata;
+ }
+
+ void addCoord( DRW_Coord v ) { setType( COORD ); vdata = v; content.v = &vdata; }
+ void setType( enum TYPE t ) { type = t; }
+ void setCoordX( double d ) { if( type == COORD ) vdata.x = d; }
+ void setCoordY( double d ) { if( type == COORD ) vdata.y = d; }
+ void setCoordZ( double d ) { if( type == COORD ) vdata.z = d; }
+
+private:
+ typedef union
+ {
+ UTF8STRING* s;
+ int i;
+ double d;
+ DRW_Coord* v;
+ } DRW_VarContent;
+
+public:
+ DRW_VarContent content;
+ enum TYPE type;
+ int code; /*!< dxf code of this value*/
+
+private:
+ std::string sdata;
+ DRW_Coord vdata;
+};
+
+
+// ! Class to convert between line width and integer
+/*!
+ * Class to convert between line width and integer
+ * verifing valid values, if value is not valid
+ * returns widthDefault.
+ * @author Rallaz
+ */
+class DRW_LW_Conv
+{
+public:
+ enum lineWidth
+ {
+ width00 = 0, /*!< 0.00mm (dxf 0)*/
+ width01 = 1, /*!< 0.05mm (dxf 5)*/
+ width02 = 2, /*!< 0.09mm (dxf 9)*/
+ width03 = 3, /*!< 0.13mm (dxf 13)*/
+ width04 = 4, /*!< 0.15mm (dxf 15)*/
+ width05 = 5, /*!< 0.18mm (dxf 18)*/
+ width06 = 6, /*!< 0.20mm (dxf 20)*/
+ width07 = 7, /*!< 0.25mm (dxf 25)*/
+ width08 = 8, /*!< 0.30mm (dxf 30)*/
+ width09 = 9, /*!< 0.35mm (dxf 35)*/
+ width10 = 10, /*!< 0.40mm (dxf 40)*/
+ width11 = 11, /*!< 0.50mm (dxf 50)*/
+ width12 = 12, /*!< 0.53mm (dxf 53)*/
+ width13 = 13, /*!< 0.60mm (dxf 60)*/
+ width14 = 14, /*!< 0.70mm (dxf 70)*/
+ width15 = 15, /*!< 0.80mm (dxf 80)*/
+ width16 = 16, /*!< 0.90mm (dxf 90)*/
+ width17 = 17, /*!< 1.00mm (dxf 100)*/
+ width18 = 18, /*!< 1.06mm (dxf 106)*/
+ width19 = 19, /*!< 1.20mm (dxf 120)*/
+ width20 = 20, /*!< 1.40mm (dxf 140)*/
+ width21 = 21, /*!< 1.58mm (dxf 158)*/
+ width22 = 22, /*!< 2.00mm (dxf 200)*/
+ width23 = 23, /*!< 2.11mm (dxf 211)*/
+ widthByLayer = 29, /*!< by layer (dxf -1) */
+ widthByBlock = 30, /*!< by block (dxf -2) */
+ widthDefault = 31 /*!< by default (dxf -3) */
+ };
+
+ static int lineWidth2dxfInt( enum lineWidth lw )
+ {
+ switch( lw )
+ {
+ case widthByLayer:
+ return -1;
+
+ case widthByBlock:
+ return -2;
+
+ case widthDefault:
+ return -3;
+
+ case width00:
+ return 0;
+
+ case width01:
+ return 5;
+
+ case width02:
+ return 9;
+
+ case width03:
+ return 13;
+
+ case width04:
+ return 15;
+
+ case width05:
+ return 18;
+
+ case width06:
+ return 20;
+
+ case width07:
+ return 25;
+
+ case width08:
+ return 30;
+
+ case width09:
+ return 35;
+
+ case width10:
+ return 40;
+
+ case width11:
+ return 50;
+
+ case width12:
+ return 53;
+
+ case width13:
+ return 60;
+
+ case width14:
+ return 70;
+
+ case width15:
+ return 80;
+
+ case width16:
+ return 90;
+
+ case width17:
+ return 100;
+
+ case width18:
+ return 106;
+
+ case width19:
+ return 120;
+
+ case width20:
+ return 140;
+
+ case width21:
+ return 158;
+
+ case width22:
+ return 200;
+
+ case width23:
+ return 211;
+
+ default:
+ return -3;
+ }
+
+ return static_cast<int> (lw);
+ }
+
+ static int lineWidth2dwgInt( enum lineWidth lw )
+ {
+ return static_cast<int> (lw);
+ }
+
+ static enum lineWidth dxfInt2lineWidth( int i )
+ {
+ if( i<0 )
+ {
+ if( i==-1 )
+ return widthByLayer;
+ else if( i==-2 )
+ return widthByBlock;
+ else if( i==-3 )
+ return widthDefault;
+ }
+ else if( i<3 )
+ {
+ return width00;
+ }
+ else if( i<7 )
+ {
+ return width01;
+ }
+ else if( i<11 )
+ {
+ return width02;
+ }
+ else if( i<14 )
+ {
+ return width03;
+ }
+ else if( i<16 )
+ {
+ return width04;
+ }
+ else if( i<19 )
+ {
+ return width05;
+ }
+ else if( i<22 )
+ {
+ return width06;
+ }
+ else if( i<27 )
+ {
+ return width07;
+ }
+ else if( i<32 )
+ {
+ return width08;
+ }
+ else if( i<37 )
+ {
+ return width09;
+ }
+ else if( i<45 )
+ {
+ return width10;
+ }
+ else if( i<52 )
+ {
+ return width11;
+ }
+ else if( i<57 )
+ {
+ return width12;
+ }
+ else if( i<65 )
+ {
+ return width13;
+ }
+ else if( i<75 )
+ {
+ return width14;
+ }
+ else if( i<85 )
+ {
+ return width15;
+ }
+ else if( i<95 )
+ {
+ return width16;
+ }
+ else if( i<103 )
+ {
+ return width17;
+ }
+ else if( i<112 )
+ {
+ return width18;
+ }
+ else if( i<130 )
+ {
+ return width19;
+ }
+ else if( i<149 )
+ {
+ return width20;
+ }
+ else if( i<180 )
+ {
+ return width21;
+ }
+ else if( i<205 )
+ {
+ return width22;
+ }
+ else
+ {
+ return width23;
+ }
+
+ // default by default
+ return widthDefault;
+ }
+
+ static enum lineWidth dwgInt2lineWidth( int i )
+ {
+ if( (i>-1 && i<24) || (i>28 && i<32) )
+ {
+ return static_cast<lineWidth> (i);
+ }
+
+ // default by default
+ return widthDefault;
+ }
+};
+
+#endif
+
+// EOF
diff --git a/lib_dxf/drw_entities.cpp b/lib_dxf/drw_entities.cpp
new file mode 100644
index 0000000..c970e61
--- /dev/null
+++ b/lib_dxf/drw_entities.cpp
@@ -0,0 +1,1517 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#include <cstdlib>
+#include "drw_entities.h"
+#include "intern/dxfreader.h"
+
+
+// ! Calculate arbitary axis
+/*!
+ * Calculate arbitary axis for apply extrusions
+ * @author Rallaz
+ */
+void DRW_Entity::calculateAxis( DRW_Coord extPoint )
+{
+ // Follow the arbitrary DXF definitions for extrusion axes.
+ if( fabs( extPoint.x ) < 0.015625 && fabs( extPoint.y ) < 0.015625 )
+ {
+ // If we get here, implement Ax = Wy x N where Wy is [0,1,0] per the DXF spec.
+ // The cross product works out to Wy.y*N.z-Wy.z*N.y, Wy.z*N.x-Wy.x*N.z, Wy.x*N.y-Wy.y*N.x
+ // Factoring in the fixed values for Wy gives N.z,0,-N.x
+ extAxisX.x = extPoint.z;
+ extAxisX.y = 0;
+ extAxisX.z = -extPoint.x;
+ }
+ else
+ {
+ // Otherwise, implement Ax = Wz x N where Wz is [0,0,1] per the DXF spec.
+ // The cross product works out to Wz.y*N.z-Wz.z*N.y, Wz.z*N.x-Wz.x*N.z, Wz.x*N.y-Wz.y*N.x
+ // Factoring in the fixed values for Wz gives -N.y,N.x,0.
+ extAxisX.x = -extPoint.y;
+ extAxisX.y = extPoint.x;
+ extAxisX.z = 0;
+ }
+
+ extAxisX.unitize();
+
+ // Ay = N x Ax
+ extAxisY.x = (extPoint.y * extAxisX.z) - (extAxisX.y * extPoint.z);
+ extAxisY.y = (extPoint.z * extAxisX.x) - (extAxisX.z * extPoint.x);
+ extAxisY.z = (extPoint.x * extAxisX.y) - (extAxisX.x * extPoint.y);
+
+ extAxisY.unitize();
+}
+
+
+// ! Extrude a point using arbitary axis
+/*!
+ * apply extrusion in a point using arbitary axis (previous calculated)
+ * @author Rallaz
+ */
+void DRW_Entity::extrudePoint( DRW_Coord extPoint, DRW_Coord* point )
+{
+ double px, py, pz;
+
+ px = (extAxisX.x * point->x) + (extAxisY.x * point->y) + (extPoint.x * point->z);
+ py = (extAxisX.y * point->x) + (extAxisY.y * point->y) + (extPoint.y * point->z);
+ pz = (extAxisX.z * point->x) + (extAxisY.z * point->y) + (extPoint.z * point->z);
+
+ point->x = px;
+ point->y = py;
+ point->z = pz;
+}
+
+
+void DRW_Entity::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 5:
+ handle = reader->getHandleString();
+ break;
+
+ case 330:
+ handleBlock = reader->getHandleString();
+ break;
+
+ case 8:
+ layer = reader->getUtf8String();
+ break;
+
+ case 6:
+ lineType = reader->getUtf8String();
+ break;
+
+ case 62:
+ color = reader->getInt32();
+ break;
+
+ case 370:
+ lWeight = DRW_LW_Conv::dxfInt2lineWidth( reader->getInt32() );
+ break;
+
+ case 48:
+ ltypeScale = reader->getDouble();
+ break;
+
+ case 60:
+ visible = reader->getBool();
+ break;
+
+ case 420:
+ color24 = reader->getInt32();
+ break;
+
+ case 430:
+ colorName = reader->getString();
+ break;
+
+ case 67:
+ space = reader->getInt32();
+ break;
+
+ case 1000:
+ case 1001:
+ case 1002:
+ case 1003:
+ case 1004:
+ case 1005:
+ extData.push_back( new DRW_Variant( code, reader->getString() ) );
+ break;
+
+ case 1010:
+ case 1011:
+ case 1012:
+ case 1013:
+ curr = new DRW_Variant();
+ curr->addCoord();
+ curr->setCoordX( reader->getDouble() );
+ curr->code = code;
+ extData.push_back( curr );
+ break;
+
+ case 1020:
+ case 1021:
+ case 1022:
+ case 1023:
+
+ if( curr )
+ curr->setCoordY( reader->getDouble() );
+
+ break;
+
+ case 1030:
+ case 1031:
+ case 1032:
+ case 1033:
+
+ if( curr )
+ curr->setCoordZ( reader->getDouble() );
+
+ curr = NULL;
+ break;
+
+ case 1040:
+ case 1041:
+ case 1042:
+ extData.push_back( new DRW_Variant( code, reader->getDouble() ) );
+ break;
+
+ case 1070:
+ case 1071:
+ extData.push_back( new DRW_Variant( code, reader->getInt32() ) );
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void DRW_Point::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 10:
+ basePoint.x = reader->getDouble();
+ break;
+
+ case 20:
+ basePoint.y = reader->getDouble();
+ break;
+
+ case 30:
+ basePoint.z = reader->getDouble();
+ break;
+
+ case 39:
+ thickness = reader->getDouble();
+ break;
+
+ case 210:
+ haveExtrusion = true;
+ extPoint.x = reader->getDouble();
+ break;
+
+ case 220:
+ extPoint.y = reader->getDouble();
+ break;
+
+ case 230:
+ extPoint.z = reader->getDouble();
+ break;
+
+ default:
+ DRW_Entity::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Line::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 11:
+ secPoint.x = reader->getDouble();
+ break;
+
+ case 21:
+ secPoint.y = reader->getDouble();
+ break;
+
+ case 31:
+ secPoint.z = reader->getDouble();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Circle::applyExtrusion()
+{
+ if( haveExtrusion )
+ {
+ // NOTE: Commenting these out causes the the arcs being tested to be located
+ // on the other side of the y axis (all x dimensions are negated).
+ calculateAxis( extPoint );
+ extrudePoint( extPoint, &basePoint );
+ }
+}
+
+
+void DRW_Circle::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 40:
+ radious = reader->getDouble();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Arc::applyExtrusion()
+{
+ DRW_Circle::applyExtrusion();
+
+ if( haveExtrusion )
+ {
+ // If the extrusion vector has a z value less than 0, the angles for the arc
+ // have to be mirrored since DXF files use the right hand rule.
+ // Note that the following code only handles the special case where there is a 2D
+ // drawing with the z axis heading into the paper (or rather screen). An arbitrary
+ // extrusion axis (with x and y values greater than 1/64) may still have issues.
+ if( fabs( extPoint.x ) < 0.015625 && fabs( extPoint.y ) < 0.015625 && extPoint.z < 0.0 )
+ {
+ staangle = M_PI - staangle;
+ endangle = M_PI - endangle;
+
+ double temp = staangle;
+ staangle = endangle;
+ endangle = temp;
+ }
+ }
+}
+
+
+void DRW_Arc::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 50:
+ staangle = reader->getDouble() / ARAD;
+ break;
+
+ case 51:
+ endangle = reader->getDouble() / ARAD;
+ break;
+
+ default:
+ DRW_Circle::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Ellipse::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 40:
+ ratio = reader->getDouble();
+ break;
+
+ case 41:
+ staparam = reader->getDouble();
+ break;
+
+ case 42:
+ endparam = reader->getDouble();
+ break;
+
+ default:
+ DRW_Line::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Ellipse::applyExtrusion()
+{
+ if( haveExtrusion )
+ {
+ calculateAxis( extPoint );
+ extrudePoint( extPoint, &secPoint );
+ double intialparam = staparam;
+
+ if( extPoint.z < 0. )
+ {
+ staparam = M_PIx2 - endparam;
+ endparam = M_PIx2 - intialparam;
+ }
+ }
+}
+
+
+// if ratio > 1 minor axis are greather than major axis, correct it
+void DRW_Ellipse::correctAxis()
+{
+ bool complete = false;
+
+ if( staparam == endparam )
+ {
+ staparam = 0.0;
+ endparam = M_PIx2; // 2*M_PI;
+ complete = true;
+ }
+
+ if( ratio > 1 )
+ {
+ if( fabs( endparam - staparam - M_PIx2 ) < 1.0e-10 )
+ complete = true;
+
+ double incX = secPoint.x;
+ secPoint.x = -(secPoint.y * ratio);
+ secPoint.y = incX * ratio;
+ ratio = 1 / ratio;
+
+ if( !complete )
+ {
+ if( staparam < M_PI_2 )
+ staparam += M_PI * 2;
+
+ if( endparam < M_PI_2 )
+ endparam += M_PI * 2;
+
+ endparam -= M_PI_2;
+ staparam -= M_PI_2;
+ }
+ }
+}
+
+
+// parts are the number of vertex to split polyline, default 128
+void DRW_Ellipse::toPolyline( DRW_Polyline* pol, int parts )
+{
+ double radMajor, radMinor, cosRot, sinRot, incAngle, curAngle;
+ double cosCurr, sinCurr;
+
+ radMajor = sqrt( secPoint.x * secPoint.x + secPoint.y * secPoint.y );
+ radMinor = radMajor * ratio;
+ // calculate sin & cos of included angle
+ incAngle = atan2( secPoint.y, secPoint.x );
+ cosRot = cos( incAngle );
+ sinRot = sin( incAngle );
+ incAngle = M_PIx2 / parts;
+ curAngle = staparam;
+ int i = curAngle / incAngle;
+
+ do {
+ if( curAngle > endparam )
+ {
+ curAngle = endparam;
+ i = parts + 2;
+ }
+
+ cosCurr = cos( curAngle );
+ sinCurr = sin( curAngle );
+ double x = basePoint.x + (cosCurr * cosRot * radMajor) - (sinCurr * sinRot * radMinor);
+ double y = basePoint.y + (cosCurr * sinRot * radMajor) + (sinCurr * cosRot * radMinor);
+ pol->addVertex( DRW_Vertex( x, y, 0.0, 0.0 ) );
+ curAngle = (++i) * incAngle;
+ } while( i<parts );
+
+ if( fabs( endparam - staparam - M_PIx2 ) < 1.0e-10 )
+ {
+ pol->flags = 1;
+ }
+
+ pol->layer = this->layer;
+ pol->lineType = this->lineType;
+ pol->color = this->color;
+ pol->lWeight = this->lWeight;
+ pol->extPoint = this->extPoint;
+}
+
+
+void DRW_Trace::applyExtrusion()
+{
+ if( haveExtrusion )
+ {
+ calculateAxis( extPoint );
+ extrudePoint( extPoint, &basePoint );
+ extrudePoint( extPoint, &secPoint );
+ extrudePoint( extPoint, &thirdPoint );
+ extrudePoint( extPoint, &fourPoint );
+ }
+}
+
+
+void DRW_Trace::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 12:
+ thirdPoint.x = reader->getDouble();
+ break;
+
+ case 22:
+ thirdPoint.y = reader->getDouble();
+ break;
+
+ case 32:
+ thirdPoint.z = reader->getDouble();
+ break;
+
+ case 13:
+ fourPoint.x = reader->getDouble();
+ break;
+
+ case 23:
+ fourPoint.y = reader->getDouble();
+ break;
+
+ case 33:
+ fourPoint.z = reader->getDouble();
+ break;
+
+ default:
+ DRW_Line::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Solid::parseCode( int code, dxfReader* reader )
+{
+ DRW_Trace::parseCode( code, reader );
+}
+
+
+void DRW_3Dface::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 70:
+ invisibleflag = reader->getInt32();
+ break;
+
+ default:
+ DRW_Trace::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Block::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 2:
+ name = reader->getUtf8String();
+ break;
+
+ case 70:
+ flags = reader->getInt32();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Insert::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 2:
+ name = reader->getUtf8String();
+ break;
+
+ case 41:
+ xscale = reader->getDouble();
+ break;
+
+ case 42:
+ yscale = reader->getDouble();
+ break;
+
+ case 43:
+ zscale = reader->getDouble();
+ break;
+
+ case 50:
+ angle = reader->getDouble();
+ break;
+
+ case 70:
+ colcount = reader->getInt32();
+ break;
+
+ case 71:
+ rowcount = reader->getInt32();
+ break;
+
+ case 44:
+ colspace = reader->getDouble();
+ break;
+
+ case 45:
+ rowspace = reader->getDouble();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_LWPolyline::applyExtrusion()
+{
+ if( haveExtrusion )
+ {
+ calculateAxis( extPoint );
+
+ for( unsigned int i = 0; i<vertlist.size(); i++ )
+ {
+ DRW_Vertex2D* vert = vertlist.at( i );
+ DRW_Coord v( vert->x, vert->y, elevation );
+ extrudePoint( extPoint, &v );
+ vert->x = v.x;
+ vert->y = v.y;
+ }
+ }
+}
+
+
+void DRW_LWPolyline::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 10:
+ {
+ vertex = new DRW_Vertex2D();
+ vertlist.push_back( vertex );
+ vertex->x = reader->getDouble();
+ break;
+ }
+
+ case 20:
+
+ if( vertex != NULL )
+ vertex->y = reader->getDouble();
+
+ break;
+
+ case 40:
+
+ if( vertex != NULL )
+ vertex->stawidth = reader->getDouble();
+
+ break;
+
+ case 41:
+
+ if( vertex != NULL )
+ vertex->endwidth = reader->getDouble();
+
+ break;
+
+ case 42:
+
+ if( vertex != NULL )
+ vertex->bulge = reader->getDouble();
+
+ break;
+
+ case 38:
+ elevation = reader->getDouble();
+ break;
+
+ case 39:
+ thickness = reader->getDouble();
+ break;
+
+ case 43:
+ width = reader->getDouble();
+ break;
+
+ case 70:
+ flags = reader->getInt32();
+ break;
+
+ case 90:
+ vertexnum = reader->getInt32();
+ vertlist.reserve( vertexnum );
+ break;
+
+ case 210:
+ haveExtrusion = true;
+ extPoint.x = reader->getDouble();
+ break;
+
+ case 220:
+ extPoint.y = reader->getDouble();
+ break;
+
+ case 230:
+ extPoint.z = reader->getDouble();
+ break;
+
+ default:
+ DRW_Entity::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Text::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 40:
+ height = reader->getDouble();
+ break;
+
+ case 41:
+ widthscale = reader->getDouble();
+ break;
+
+ case 50:
+ angle = reader->getDouble();
+ break;
+
+ case 51:
+ oblique = reader->getDouble();
+ break;
+
+ case 71:
+ textgen = reader->getInt32();
+ break;
+
+ case 72:
+ alignH = (HAlign) reader->getInt32();
+ break;
+
+ case 73:
+ alignV = (VAlign) reader->getInt32();
+ break;
+
+ case 1:
+ text = reader->getUtf8String();
+ break;
+
+ case 7:
+ style = reader->getUtf8String();
+ break;
+
+ default:
+ DRW_Line::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_MText::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 1:
+ text += reader->getString();
+ text = reader->toUtf8String( text );
+ break;
+
+ case 11:
+ haveXAxis = true;
+ DRW_Text::parseCode( code, reader );
+ break;
+
+ case 3:
+ text += reader->getString();
+ break;
+
+ case 44:
+ interlin = reader->getDouble();
+ break;
+
+ default:
+ DRW_Text::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_MText::updateAngle()
+{
+ if( haveXAxis )
+ {
+ angle = atan2( secPoint.y, secPoint.x ) * 180 / M_PI;
+ }
+}
+
+
+void DRW_Polyline::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 70:
+ flags = reader->getInt32();
+ break;
+
+ case 40:
+ defstawidth = reader->getDouble();
+ break;
+
+ case 41:
+ defendwidth = reader->getDouble();
+ break;
+
+ case 71:
+ vertexcount = reader->getInt32();
+ break;
+
+ case 72:
+ facecount = reader->getInt32();
+ break;
+
+ case 73:
+ smoothM = reader->getInt32();
+ break;
+
+ case 74:
+ smoothN = reader->getInt32();
+ break;
+
+ case 75:
+ curvetype = reader->getInt32();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Vertex::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 70:
+ flags = reader->getInt32();
+ break;
+
+ case 40:
+ stawidth = reader->getDouble();
+ break;
+
+ case 41:
+ endwidth = reader->getDouble();
+ break;
+
+ case 42:
+ bulge = reader->getDouble();
+ break;
+
+ case 50:
+ tgdir = reader->getDouble();
+ break;
+
+ case 71:
+ vindex1 = reader->getInt32();
+ break;
+
+ case 72:
+ vindex2 = reader->getInt32();
+ break;
+
+ case 73:
+ vindex3 = reader->getInt32();
+ break;
+
+ case 74:
+ vindex4 = reader->getInt32();
+ break;
+
+ case 91:
+ identifier = reader->getInt32();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Hatch::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 2:
+ name = reader->getUtf8String();
+ break;
+
+ case 70:
+ solid = reader->getInt32();
+ break;
+
+ case 71:
+ associative = reader->getInt32();
+ break;
+
+ case 72: /*edge type*/
+
+ if( ispol ) // if is polyline is a as_bulge flag
+ {
+ break;
+ }
+ else if( reader->getInt32() == 1 ) // line
+ {
+ addLine();
+ }
+ else if( reader->getInt32() == 2 ) // arc
+ {
+ addArc();
+ }
+ else if( reader->getInt32() == 3 ) // elliptic arc
+ {
+ addEllipse();
+ }
+ else if( reader->getInt32() == 4 ) // spline
+ {
+ addSpline();
+ }
+
+ break;
+
+ case 10:
+
+ if( pt )
+ pt->basePoint.x = reader->getDouble();
+ else if( pline )
+ {
+ plvert = pline->addVertex();
+ plvert->x = reader->getDouble();
+ }
+
+ break;
+
+ case 20:
+
+ if( pt )
+ pt->basePoint.y = reader->getDouble();
+ else if( plvert )
+ plvert->y = reader->getDouble();
+
+ break;
+
+ case 11:
+
+ if( line )
+ line->secPoint.x = reader->getDouble();
+ else if( ellipse )
+ ellipse->secPoint.x = reader->getDouble();
+
+ break;
+
+ case 21:
+
+ if( line )
+ line->secPoint.y = reader->getDouble();
+ else if( ellipse )
+ ellipse->secPoint.y = reader->getDouble();
+
+ break;
+
+ case 40:
+
+ if( arc )
+ arc->radious = reader->getDouble();
+ else if( ellipse )
+ ellipse->ratio = reader->getDouble();
+
+ break;
+
+ case 41:
+ scale = reader->getDouble();
+ break;
+
+ case 42:
+
+ if( plvert )
+ plvert->bulge = reader->getDouble();
+
+ break;
+
+ case 50:
+
+ if( arc )
+ arc->staangle = reader->getDouble() / ARAD;
+ else if( ellipse )
+ ellipse->staparam = reader->getDouble() / ARAD;
+
+ break;
+
+ case 51:
+
+ if( arc )
+ arc->endangle = reader->getDouble() / ARAD;
+ else if( ellipse )
+ ellipse->endparam = reader->getDouble() / ARAD;
+
+ break;
+
+ case 52:
+ angle = reader->getDouble();
+ break;
+
+ case 73:
+
+ if( arc )
+ arc->isccw = reader->getInt32();
+ else if( pline )
+ pline->flags = reader->getInt32();
+
+ break;
+
+ case 75:
+ hstyle = reader->getInt32();
+ break;
+
+ case 76:
+ hpattern = reader->getInt32();
+ break;
+
+ case 77:
+ doubleflag = reader->getInt32();
+ break;
+
+ case 78:
+ deflines = reader->getInt32();
+ break;
+
+ case 91:
+ loopsnum = reader->getInt32();
+ looplist.reserve( loopsnum );
+ break;
+
+ case 92:
+ loop = new DRW_HatchLoop( reader->getInt32() );
+ looplist.push_back( loop );
+
+ if( reader->getInt32() & 2 )
+ {
+ ispol = true;
+ clearEntities();
+ pline = new DRW_LWPolyline;
+ loop->objlist.push_back( pline );
+ }
+ else
+ ispol = false;
+
+ break;
+
+ case 93:
+
+ if( pline )
+ pline->vertexnum = reader->getInt32();
+ else
+ loop->numedges = reader->getInt32(); // aqui reserve
+
+ break;
+
+ case 98: // seed points ??
+ clearEntities();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Spline::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 210:
+ ex = reader->getDouble();
+ break;
+
+ case 220:
+ ey = reader->getDouble();
+ break;
+
+ case 230:
+ ez = reader->getDouble();
+ break;
+
+ case 12:
+ tgsx = reader->getDouble();
+ break;
+
+ case 22:
+ tgsy = reader->getDouble();
+ break;
+
+ case 32:
+ tgsz = reader->getDouble();
+ break;
+
+ case 13:
+ tgex = reader->getDouble();
+ break;
+
+ case 23:
+ tgey = reader->getDouble();
+ break;
+
+ case 33:
+ tgez = reader->getDouble();
+ break;
+
+ case 70:
+ flags = reader->getInt32();
+ break;
+
+ case 71:
+ degree = reader->getInt32();
+ break;
+
+ case 72:
+ nknots = reader->getInt32();
+ break;
+
+ case 73:
+ ncontrol = reader->getInt32();
+ break;
+
+ case 74:
+ nfit = reader->getInt32();
+ break;
+
+ case 42:
+ tolknot = reader->getDouble();
+ break;
+
+ case 43:
+ tolcontrol = reader->getDouble();
+ break;
+
+ case 44:
+ tolfit = reader->getDouble();
+ break;
+
+ case 10:
+ {
+ controlpoint = new DRW_Coord();
+ controllist.push_back( controlpoint );
+ controlpoint->x = reader->getDouble();
+ break;
+ }
+
+ case 20:
+
+ if( controlpoint != NULL )
+ controlpoint->y = reader->getDouble();
+
+ break;
+
+ case 30:
+
+ if( controlpoint != NULL )
+ controlpoint->z = reader->getDouble();
+
+ break;
+
+ case 11:
+ {
+ fitpoint = new DRW_Coord();
+ fitlist.push_back( fitpoint );
+ fitpoint->x = reader->getDouble();
+ break;
+ }
+
+ case 21:
+
+ if( fitpoint != NULL )
+ fitpoint->y = reader->getDouble();
+
+ break;
+
+ case 31:
+
+ if( fitpoint != NULL )
+ fitpoint->z = reader->getDouble();
+
+ break;
+
+ case 40:
+ knotslist.push_back( reader->getDouble() );
+ break;
+
+// case 41:
+// break;
+ default:
+ DRW_Entity::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Image::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 12:
+ vx = reader->getDouble();
+ break;
+
+ case 22:
+ vy = reader->getDouble();
+ break;
+
+ case 32:
+ vz = reader->getDouble();
+ break;
+
+ case 13:
+ sizeu = reader->getDouble();
+ break;
+
+ case 23:
+ sizev = reader->getDouble();
+ break;
+
+ case 340:
+ ref = reader->getString();
+ break;
+
+ case 280:
+ clip = reader->getInt32();
+ break;
+
+ case 281:
+ brightness = reader->getInt32();
+ break;
+
+ case 282:
+ contrast = reader->getInt32();
+ break;
+
+ case 283:
+ fade = reader->getInt32();
+ break;
+
+ default:
+ DRW_Line::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Dimension::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 1:
+ text = reader->getUtf8String();
+ break;
+
+ case 2:
+ name = reader->getString();
+ break;
+
+ case 3:
+ style = reader->getUtf8String();
+ break;
+
+ case 70:
+ type = reader->getInt32();
+ break;
+
+ case 71:
+ align = reader->getInt32();
+ break;
+
+ case 72:
+ linesty = reader->getInt32();
+ break;
+
+ case 10:
+ defPoint.x = reader->getDouble();
+ break;
+
+ case 20:
+ defPoint.y = reader->getDouble();
+ break;
+
+ case 30:
+ defPoint.z = reader->getDouble();
+ break;
+
+ case 11:
+ textPoint.x = reader->getDouble();
+ break;
+
+ case 21:
+ textPoint.y = reader->getDouble();
+ break;
+
+ case 31:
+ textPoint.z = reader->getDouble();
+ break;
+
+ case 12:
+ clonePoint.x = reader->getDouble();
+ break;
+
+ case 22:
+ clonePoint.y = reader->getDouble();
+ break;
+
+ case 32:
+ clonePoint.z = reader->getDouble();
+ break;
+
+ case 13:
+ def1.x = reader->getDouble();
+ break;
+
+ case 23:
+ def1.y = reader->getDouble();
+ break;
+
+ case 33:
+ def1.z = reader->getDouble();
+ break;
+
+ case 14:
+ def2.x = reader->getDouble();
+ break;
+
+ case 24:
+ def2.y = reader->getDouble();
+ break;
+
+ case 34:
+ def2.z = reader->getDouble();
+ break;
+
+ case 15:
+ circlePoint.x = reader->getDouble();
+ break;
+
+ case 25:
+ circlePoint.y = reader->getDouble();
+ break;
+
+ case 35:
+ circlePoint.z = reader->getDouble();
+ break;
+
+ case 16:
+ arcPoint.x = reader->getDouble();
+ break;
+
+ case 26:
+ arcPoint.y = reader->getDouble();
+ break;
+
+ case 36:
+ arcPoint.z = reader->getDouble();
+ break;
+
+ case 41:
+ linefactor = reader->getDouble();
+ break;
+
+ case 53:
+ rot = reader->getDouble();
+ break;
+
+ case 50:
+ angle = reader->getDouble();
+ break;
+
+ case 52:
+ oblique = reader->getDouble();
+ break;
+
+ case 40:
+ length = reader->getDouble();
+ break;
+
+/* case 51:
+ * hdir = reader->getDouble();
+ * break;*/
+ default:
+ DRW_Entity::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Leader::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 3:
+ style = reader->getUtf8String();
+ break;
+
+ case 71:
+ arrow = reader->getInt32();
+ break;
+
+ case 72:
+ leadertype = reader->getInt32();
+ break;
+
+ case 73:
+ flag = reader->getInt32();
+ break;
+
+ case 74:
+ hookline = reader->getInt32();
+ break;
+
+ case 75:
+ hookflag = reader->getInt32();
+ break;
+
+ case 76:
+ vertnum = reader->getInt32();
+ break;
+
+ case 77:
+ coloruse = reader->getInt32();
+ break;
+
+ case 40:
+ textheight = reader->getDouble();
+ break;
+
+ case 41:
+ textwidth = reader->getDouble();
+ break;
+
+ case 10:
+ {
+ vertexpoint = new DRW_Coord();
+ vertexlist.push_back( vertexpoint );
+ vertexpoint->x = reader->getDouble();
+ break;
+ }
+
+ case 20:
+
+ if( vertexpoint != NULL )
+ vertexpoint->y = reader->getDouble();
+
+ break;
+
+ case 30:
+
+ if( vertexpoint != NULL )
+ vertexpoint->z = reader->getDouble();
+
+ break;
+
+ case 340:
+ handle = reader->getString();
+ break;
+
+ case 210:
+ extrusionPoint.x = reader->getDouble();
+ break;
+
+ case 220:
+ extrusionPoint.y = reader->getDouble();
+ break;
+
+ case 230:
+ extrusionPoint.z = reader->getDouble();
+ break;
+
+ case 211:
+ horizdir.x = reader->getDouble();
+ break;
+
+ case 221:
+ horizdir.y = reader->getDouble();
+ break;
+
+ case 231:
+ horizdir.z = reader->getDouble();
+ break;
+
+ case 212:
+ offsetblock.x = reader->getDouble();
+ break;
+
+ case 222:
+ offsetblock.y = reader->getDouble();
+ break;
+
+ case 232:
+ offsetblock.z = reader->getDouble();
+ break;
+
+ case 213:
+ offsettext.x = reader->getDouble();
+ break;
+
+ case 223:
+ offsettext.y = reader->getDouble();
+ break;
+
+ case 233:
+ offsettext.z = reader->getDouble();
+ break;
+
+ default:
+ DRW_Entity::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_Viewport::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 40:
+ pswidth = reader->getDouble();
+ break;
+
+ case 41:
+ psheight = reader->getDouble();
+ break;
+
+ case 68:
+ vpstatus = reader->getInt32();
+ break;
+
+ case 69:
+ vpID = reader->getInt32();
+ break;
+
+ case 12:
+ {
+ centerPX = reader->getDouble();
+ break;
+ }
+
+ case 22:
+ centerPY = reader->getDouble();
+ break;
+
+ default:
+ DRW_Point::parseCode( code, reader );
+ break;
+ }
+}
diff --git a/lib_dxf/drw_entities.h b/lib_dxf/drw_entities.h
new file mode 100644
index 0000000..7f7b085
--- /dev/null
+++ b/lib_dxf/drw_entities.h
@@ -0,0 +1,1342 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef DRW_ENTITIES_H
+#define DRW_ENTITIES_H
+
+
+#include <string>
+#include <vector>
+#include "drw_base.h"
+
+class dxfReader;
+class DRW_Polyline;
+
+namespace DRW {
+// ! Entity's type.
+enum ETYPE
+{
+ POINT,
+ LINE,
+ CIRCLE,
+ ARC,
+ ELLIPSE,
+ TRACE,
+ SOLID,
+ BLOCK,
+ INSERT,
+ LWPOLYLINE,
+ POLYLINE,
+ VERTEX,
+ SPLINE,
+ HATCH,
+ TEXT,
+ MTEXT,
+ E3DFACE,
+ IMAGE,
+ LEADER,
+ DIMENSION,
+ DIMALIGNED,
+ DIMLINEAR,
+ DIMRADIAL,
+ DIMDIAMETRIC,
+ DIMANGULAR,
+ DIMANGULAR3P,
+ DIMORDINATE,
+
+// OVERLAYBOX,
+// CONSTRUCTIONLINE,
+ RAY,
+ XLINE,
+ VIEWPORT,
+ UNKNOWN
+};
+}
+
+// ! Base class for entities
+/*!
+ * Base class for entities
+ * @author Rallaz
+ */
+class DRW_Entity
+{
+public:
+ // initializes default values
+ DRW_Entity()
+ {
+ eType = DRW::UNKNOWN;
+ lineType = "BYLAYER";
+ color = 256; // default BYLAYER (256)
+ ltypeScale = 1.0;
+ visible = true;
+ layer = "0";
+ lWeight = DRW_LW_Conv::widthByLayer; // default BYLAYER (dxf -1, dwg 29)
+ handleBlock = space = 0; // default ModelSpace (0) & handleBlock = no handle (0)
+ haveExtrusion = false;
+ color24 = -1; // default -1 not set
+ handle = 0;
+ curr = NULL;
+ }
+
+ virtual ~DRW_Entity()
+ {
+ for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
+ delete *it;
+
+ extData.clear();
+ }
+
+ DRW_Entity( const DRW_Entity& d )
+ {
+ eType = d.eType;
+ handle = d.handle;
+ handleBlock = d.handleBlock;
+ layer = d.layer;
+ lineType = d.lineType;
+ color = d.color;
+ color24 = d.color24;
+ colorName = d.colorName;
+ ltypeScale = d.ltypeScale;
+ visible = d.visible;
+ lWeight = d.lWeight;
+ space = d.space;
+ haveExtrusion = d.haveExtrusion;
+ curr = NULL;
+ }
+
+ virtual void applyExtrusion() = 0;
+
+protected:
+ void parseCode( int code, dxfReader* reader );
+ void calculateAxis( DRW_Coord extPoint );
+ void extrudePoint( DRW_Coord extPoint, DRW_Coord* point );
+
+public:
+ enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */
+ int handle; /*!< entity identifier, code 5 */
+ int handleBlock; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */
+ UTF8STRING layer; /*!< layer name, code 8 */
+ UTF8STRING lineType; /*!< line type, code 6 */
+ int color; /*!< entity color, code 62 */
+ enum DRW_LW_Conv::lineWidth lWeight; /*!< entity lineweight, code 370 */
+ double ltypeScale; /*!< linetype scale, code 48 */
+ bool visible; /*!< entity visibility, code 60 */
+ int color24; /*!< 24-bit color, code 420 */
+ std::string colorName; /*!< color name, code 430 */
+ int space; /*!< space indicator 0 = model, 1 paper, code 67*/
+ bool haveExtrusion; /*!< set to true if the entity have extrusion*/
+ std::vector<DRW_Variant*> extData; /*!< FIFO list of extended data, codes 1000 to 1071*/
+
+private:
+ DRW_Coord extAxisX;
+ DRW_Coord extAxisY;
+ DRW_Variant* curr;
+};
+
+
+// ! Class to handle point entity
+/*!
+ * Class to handle point entity
+ * @author Rallaz
+ */
+class DRW_Point : public DRW_Entity
+{
+public:
+ DRW_Point()
+ {
+ eType = DRW::POINT;
+ basePoint.z = extPoint.x = extPoint.y = 0;
+ extPoint.z = 1;
+ thickness = 0;
+ }
+
+ virtual void applyExtrusion() {}
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ DRW_Coord basePoint; /*!< base point, code 10, 20 & 30 */
+ double thickness; /*!< thickness, code 39 */
+ DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */
+};
+
+// ! Class to handle line entity
+/*!
+ * Class to handle line entity
+ * @author Rallaz
+ */
+class DRW_Line : public DRW_Point
+{
+public:
+ DRW_Line()
+ {
+ eType = DRW::LINE;
+ secPoint.z = 0;
+ }
+
+ virtual void applyExtrusion() {}
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ DRW_Coord secPoint; /*!< second point, code 11, 21 & 31 */
+};
+
+// ! Class to handle ray entity
+/*!
+ * Class to handle ray entity
+ * @author Rallaz
+ */
+class DRW_Ray : public DRW_Line
+{
+public:
+ DRW_Ray()
+ {
+ eType = DRW::RAY;
+ }
+};
+
+// ! Class to handle xline entity
+/*!
+ * Class to handle xline entity
+ * @author Rallaz
+ */
+class DRW_Xline : public DRW_Line
+{
+public:
+ DRW_Xline()
+ {
+ eType = DRW::XLINE;
+ }
+};
+
+// ! Class to handle circle entity
+/*!
+ * Class to handle circle entity
+ * @author Rallaz
+ */
+class DRW_Circle : public DRW_Point
+{
+public:
+ DRW_Circle()
+ {
+ eType = DRW::CIRCLE;
+ radious = 0.0;
+ }
+
+ virtual void applyExtrusion();
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double radious; /*!< radius, code 40 */
+};
+
+// ! Class to handle arc entity
+/*!
+ * Class to handle arc entity
+ * @author Rallaz
+ */
+class DRW_Arc : public DRW_Circle
+{
+public:
+ DRW_Arc()
+ {
+ eType = DRW::ARC;
+ isccw = 1;
+ staangle = 0.0;
+ endangle = 0.0;
+ }
+
+ virtual void applyExtrusion();
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double staangle; /*!< start angle, code 50 in radians*/
+ double endangle; /*!< end angle, code 51 in radians */
+ int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */
+};
+
+// ! Class to handle ellipse entity
+/*!
+ * Class to handle ellipse and elliptic arc entity
+ * Note: start/end parameter are in radians for ellipse entity but
+ * for hatch boundary are in degrees
+ * @author Rallaz
+ */
+class DRW_Ellipse : public DRW_Line
+{
+public:
+ DRW_Ellipse()
+ {
+ eType = DRW::ELLIPSE;
+ isccw = 1;
+ ratio = 1.0;
+ staparam = endparam = 0;
+ }
+
+ void parseCode( int code, dxfReader* reader );
+ void toPolyline( DRW_Polyline* pol, int parts = 128 );
+ virtual void applyExtrusion();
+ void correctAxis();
+
+public:
+ double ratio; /*!< ratio, code 40 */
+ double staparam; /*!< start parameter, code 41, 0.0 for full ellipse*/
+ double endparam; /*!< end parameter, code 42, 2*PI for full ellipse */
+ int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */
+};
+
+// ! Class to handle trace entity
+/*!
+ * Class to handle trace entity
+ * @author Rallaz
+ */
+class DRW_Trace : public DRW_Line
+{
+public:
+ DRW_Trace()
+ {
+ eType = DRW::TRACE;
+ thirdPoint.z = 0;
+ fourPoint.z = 0;
+ }
+
+ virtual void applyExtrusion();
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ DRW_Coord thirdPoint; /*!< third point, code 12, 22 & 32 */
+ DRW_Coord fourPoint; /*!< four point, code 13, 23 & 33 */
+};
+
+// ! Class to handle solid entity
+/*!
+ * Class to handle solid entity
+ * @author Rallaz
+ */
+class DRW_Solid : public DRW_Trace
+{
+public:
+ DRW_Solid()
+ {
+ eType = DRW::SOLID;
+ }
+
+ void parseCode( int code, dxfReader* reader );
+};
+
+// ! Class to handle 3dface entity
+/*!
+ * Class to handle 3dface entity
+ * @author Rallaz
+ */
+class DRW_3Dface : public DRW_Trace
+{
+public:
+ DRW_3Dface()
+ {
+ eType = DRW::E3DFACE;
+ invisibleflag = 0;
+ }
+
+ virtual void applyExtrusion() {}
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ int invisibleflag; /*!< invisible edge flag, code 70 */
+};
+
+// ! Class to handle block entries
+/*!
+ * Class to handle block entries
+ * @author Rallaz
+ */
+class DRW_Block : public DRW_Point
+{
+public:
+ DRW_Block()
+ {
+ eType = DRW::BLOCK;
+ layer = "0";
+ flags = 0;
+ name = "*U0";
+ }
+
+ virtual void applyExtrusion() {}
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ UTF8STRING name; /*!< block name, code 2 */
+ int flags; /*!< block type, code 70 */
+};
+
+
+// ! Class to handle insert entries
+/*!
+ * Class to handle insert entries
+ * @author Rallaz
+ */
+class DRW_Insert : public DRW_Point
+{
+public:
+ DRW_Insert()
+ {
+ eType = DRW::INSERT;
+ xscale = 1;
+ yscale = 1;
+ zscale = 1;
+ angle = 0;
+ colcount = 1;
+ rowcount = 1;
+ colspace = 0;
+ rowspace = 0;
+ }
+
+ virtual void applyExtrusion() { DRW_Point::applyExtrusion(); }
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ UTF8STRING name; /*!< block name, code 2 */
+ double xscale; /*!< x scale factor, code 41 */
+ double yscale; /*!< y scale factor, code 42 */
+ double zscale; /*!< z scale factor, code 43 */
+ double angle; /*!< rotation angle, code 50 */
+ int colcount; /*!< column count, code 70 */
+ int rowcount; /*!< row count, code 71 */
+ double colspace; /*!< column space, code 44 */
+ double rowspace; /*!< row space, code 45 */
+};
+
+// ! Class to handle lwpolyline entity
+/*!
+ * Class to handle lwpolyline entity
+ * @author Rallaz
+ */
+class DRW_LWPolyline : public DRW_Entity
+{
+public:
+ DRW_LWPolyline()
+ {
+ eType = DRW::LWPOLYLINE;
+ elevation = thickness = width = 0.0;
+ flags = 0;
+ extPoint.x = extPoint.y = 0;
+ extPoint.z = 1;
+ vertex = NULL;
+ vertexnum = 0;
+ }
+
+ ~DRW_LWPolyline()
+ {
+ while( !vertlist.empty() )
+ {
+ vertlist.pop_back();
+ }
+ }
+
+ virtual void applyExtrusion();
+
+ void addVertex( DRW_Vertex2D v )
+ {
+ DRW_Vertex2D* vert = new DRW_Vertex2D();
+
+ vert->x = v.x;
+ vert->y = v.y;
+ vert->stawidth = v.stawidth;
+ vert->endwidth = v.endwidth;
+ vert->bulge = v.bulge;
+ vertlist.push_back( vert );
+ }
+
+ DRW_Vertex2D* addVertex()
+ {
+ DRW_Vertex2D* vert = new DRW_Vertex2D();
+
+ vert->stawidth = 0;
+ vert->endwidth = 0;
+ vert->bulge = 0;
+ vertlist.push_back( vert );
+ return vert;
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ int vertexnum; /*!< number of vertex, code 90 */
+ int flags; /*!< polyline flag, code 70, default 0 */
+ double width; /*!< constant width, code 43 */
+ double elevation; /*!< elevation, code 38 */
+ double thickness; /*!< thickness, code 39 */
+ DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */
+ DRW_Vertex2D* vertex; /*!< current vertex to add data */
+ std::vector<DRW_Vertex2D*> vertlist; /*!< vertex list */
+};
+
+// ! Class to handle insert entries
+/*!
+ * Class to handle insert entries
+ * @author Rallaz
+ */
+class DRW_Text : public DRW_Line
+{
+public:
+ // ! Vertical alignments.
+ enum VAlign
+ {
+ VBaseLine = 0, /*!< Top = 0 */
+ VBottom, /*!< Bottom = 1 */
+ VMiddle, /*!< Middle = 2 */
+ VTop /*!< Top = 3 */
+ };
+
+ // ! Horizontal alignments.
+ enum HAlign
+ {
+ HLeft = 0, /*!< Left = 0 */
+ HCenter, /*!< Centered = 1 */
+ HRight, /*!< Right = 2 */
+ HAligned, /*!< Aligned = 3 (if VAlign==0) */
+ HMiddle, /*!< middle = 4 (if VAlign==0) */
+ HFit /*!< fit into point = 5 (if VAlign==0) */
+ };
+
+ DRW_Text()
+ {
+ eType = DRW::TEXT;
+ angle = 0;
+ widthscale = 1;
+ oblique = 0;
+ style = "STANDARD";
+ textgen = 0;
+ alignH = HLeft;
+ alignV = VBaseLine;
+ height = 0.0;
+ }
+
+ virtual void applyExtrusion() {} // RLZ TODO
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double height; /*!< height text, code 40 */
+ UTF8STRING text; /*!< text string, code 1 */
+ double angle; /*!< rotation angle in degrees (360), code 50 */
+ double widthscale; /*!< width factor, code 41 */
+ double oblique; /*!< oblique angle, code 51 */
+ UTF8STRING style; /*!< style name, code 7 */
+ int textgen; /*!< text generation, code 71 */
+ enum HAlign alignH; /*!< horizontal align, code 72 */
+ enum VAlign alignV; /*!< vertical align, code 73 */
+};
+
+// ! Class to handle insert entries
+/*!
+ * Class to handle insert entries
+ * @author Rallaz
+ */
+class DRW_MText : public DRW_Text
+{
+public:
+ // ! Attachments.
+ enum Attach
+ {
+ TopLeft = 1,
+ TopCenter,
+ TopRight,
+ MiddleLeft,
+ MiddleCenter,
+ MiddleRight,
+ BottomLeft,
+ BottomCenter,
+ BottomRight
+ };
+
+ DRW_MText()
+ {
+ eType = DRW::MTEXT;
+ interlin = 1;
+ alignV = (VAlign) TopLeft;
+ textgen = 1;
+ haveXAxis = false; // if true needed to recalculate angle
+ }
+
+ void parseCode( int code, dxfReader* reader );
+ void updateAngle(); // recalculate angle if 'haveXAxis' is true
+
+public:
+ double interlin; /*!< width factor, code 44 */
+
+private:
+ bool haveXAxis;
+};
+
+// ! Class to handle vertex
+/*!
+ * Class to handle vertex for polyline entity
+ * @author Rallaz
+ */
+class DRW_Vertex : public DRW_Point
+{
+public:
+ DRW_Vertex()
+ {
+ eType = DRW::VERTEX;
+ stawidth = endwidth = bulge = 0;
+ vindex1 = vindex2 = vindex3 = vindex4 = 0;
+ flags = identifier = 0;
+ tgdir = 0.0;
+ }
+
+ DRW_Vertex( double sx, double sy, double sz, double b )
+ {
+ stawidth = endwidth = 0;
+ vindex1 = vindex2 = vindex3 = vindex4 = 0;
+ flags = identifier = 0;
+ basePoint.x = sx;
+ basePoint.y = sy;
+ basePoint.z = sz;
+ bulge = b;
+ tgdir = 0.0;
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double stawidth; /*!< Start width, code 40 */
+ double endwidth; /*!< End width, code 41 */
+ double bulge; /*!< bulge, code 42 */
+
+ int flags; /*!< vertex flag, code 70, default 0 */
+ double tgdir; /*!< curve fit tangent direction, code 50 */
+ int vindex1; /*!< polyface mesh vertex index, code 71, default 0 */
+ int vindex2; /*!< polyface mesh vertex index, code 72, default 0 */
+ int vindex3; /*!< polyface mesh vertex index, code 73, default 0 */
+ int vindex4; /*!< polyface mesh vertex index, code 74, default 0 */
+ int identifier; /*!< vertex identifier, code 91, default 0 */
+};
+
+// ! Class to handle polyline entity
+/*!
+ * Class to handle polyline entity
+ * @author Rallaz
+ */
+class DRW_Polyline : public DRW_Point
+{
+public:
+ DRW_Polyline()
+ {
+ eType = DRW::POLYLINE;
+ defstawidth = defendwidth = 0.0;
+ basePoint.x = basePoint.y = 0.0;
+ flags = vertexcount = facecount = 0;
+ smoothM = smoothN = curvetype = 0;
+ }
+
+ ~DRW_Polyline()
+ {
+ while( !vertlist.empty() )
+ {
+ vertlist.pop_back();
+ }
+ }
+
+ void addVertex( DRW_Vertex v )
+ {
+ DRW_Vertex* vert = new DRW_Vertex();
+
+ vert->basePoint.x = v.basePoint.x;
+ vert->basePoint.y = v.basePoint.y;
+ vert->basePoint.z = v.basePoint.z;
+ vert->stawidth = v.stawidth;
+ vert->endwidth = v.endwidth;
+ vert->bulge = v.bulge;
+ vertlist.push_back( vert );
+ }
+
+ void appendVertex( DRW_Vertex* v )
+ {
+ vertlist.push_back( v );
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ int flags; /*!< polyline flag, code 70, default 0 */
+ double defstawidth; /*!< Start width, code 40, default 0 */
+ double defendwidth; /*!< End width, code 41, default 0 */
+ int vertexcount; /*!< polygon mesh M vertex or polyface vertex num, code 71, default 0 */
+ int facecount; /*!< polygon mesh N vertex or polyface face num, code 72, default 0 */
+ int smoothM; /*!< smooth surface M density, code 73, default 0 */
+ int smoothN; /*!< smooth surface M density, code 74, default 0 */
+ int curvetype; /*!< curves & smooth surface type, code 75, default 0 */
+
+ std::vector<DRW_Vertex*> vertlist; /*!< vertex list */
+};
+
+
+// ! Class to handle spline entity
+/*!
+ * Class to handle spline entity
+ * @author Rallaz
+ */
+class DRW_Spline : public DRW_Entity
+{
+public:
+ DRW_Spline()
+ {
+ eType = DRW::SPLINE;
+ flags = nknots = ncontrol = nfit = 0;
+ ex = ey = 0.0;
+ ez = 1.0;
+ tolknot = tolcontrol = tolfit = 0.0000001;
+ tgsx = tgsy = tgsz = tgex = tgey = tgez = 0.0;
+ degree = 0;
+ controlpoint = 0;
+ fitpoint = 0;
+ }
+
+ ~DRW_Spline()
+ {
+ while( !controllist.empty() )
+ {
+ controllist.pop_back();
+ }
+
+ while( !fitlist.empty() )
+ {
+ fitlist.pop_back();
+ }
+ }
+
+ virtual void applyExtrusion() {}
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double ex; /*!< normal vector x coordinate, code 210 */
+ double ey; /*!< normal vector y coordinate, code 220 */
+ double ez; /*!< normal vector z coordinate, code 230 */
+ double tgsx; /*!< start tangent x coordinate, code 12 */
+ double tgsy; /*!< start tangent y coordinate, code 22 */
+ double tgsz; /*!< start tangent z coordinate, code 32 */
+ double tgex; /*!< end tangent x coordinate, code 13 */
+ double tgey; /*!< end tangent y coordinate, code 23 */
+ double tgez; /*!< end tangent z coordinate, code 33 */
+ int flags; /*!< spline flag, code 70 */
+ int degree; /*!< degree of the spline, code 71 */
+ int nknots; /*!< number of knots, code 72, default 0 */
+ int ncontrol; /*!< number of control points, code 73, default 0 */
+ int nfit; /*!< number of fit points, code 74, default 0 */
+ double tolknot; /*!< knot tolerance, code 42, default 0.0000001 */
+ double tolcontrol; /*!< control point tolerance, code 43, default 0.0000001 */
+ double tolfit; /*!< fit point tolerance, code 44, default 0.0000001 */
+
+ std::vector<double> knotslist; /*!< knots list, code 40 */
+ std::vector<DRW_Coord*> controllist; /*!< control points list, code 10, 20 & 30 */
+ std::vector<DRW_Coord*> fitlist; /*!< fit points list, code 11, 21 & 31 */
+
+private:
+ DRW_Coord* controlpoint; /*!< current control point to add data */
+ DRW_Coord* fitpoint; /*!< current fit point to add data */
+};
+
+// ! Class to handle hatch loop
+/*!
+ * Class to handle hatch loop
+ * @author Rallaz
+ */
+class DRW_HatchLoop
+{
+public:
+ DRW_HatchLoop( int t )
+ {
+ type = t;
+ numedges = 0;
+ }
+
+ ~DRW_HatchLoop()
+ {
+/* while (!pollist.empty()) {
+ * pollist.pop_back();
+ * }*/
+ while( !objlist.empty() )
+ {
+ objlist.pop_back();
+ }
+ }
+
+ void update()
+ {
+ numedges = objlist.size();
+ }
+
+public:
+ int type; /*!< boundary path type, code 92, polyline=2, default=0 */
+ int numedges; /*!< number of edges (if not a polyline), code 93 */
+// TODO: store lwpolylines as entities
+// std::vector<DRW_LWPolyline *> pollist; /*!< polyline list */
+ std::vector<DRW_Entity*> objlist; /*!< entities list */
+};
+
+// ! Class to handle hatch entity
+/*!
+ * Class to handle hatch entity
+ * @author Rallaz
+ */
+// TODO: handle lwpolylines, splines and ellipses
+class DRW_Hatch : public DRW_Point
+{
+public:
+ DRW_Hatch()
+ {
+ eType = DRW::HATCH;
+ angle = scale = 0.0;
+ basePoint.x = basePoint.y = basePoint.z = 0.0;
+ loopsnum = hstyle = associative = 0;
+ solid = hpattern = 1;
+ deflines = doubleflag = 0;
+ loop = NULL;
+ clearEntities();
+ ispol = false;
+ }
+
+ ~DRW_Hatch()
+ {
+ while( !looplist.empty() )
+ {
+ looplist.pop_back();
+ }
+ }
+
+ void appendLoop( DRW_HatchLoop* v )
+ {
+ looplist.push_back( v );
+ }
+
+ virtual void applyExtrusion() {}
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ UTF8STRING name; /*!< hatch pattern name, code 2 */
+ int solid; /*!< solid fill flag, code 70, solid=1, pattern=0 */
+ int associative; /*!< associativity, code 71, associatve=1, non-assoc.=0 */
+ int hstyle; /*!< hatch style, code 75 */
+ int hpattern; /*!< hatch pattern type, code 76 */
+ int doubleflag; /*!< hatch pattern double flag, code 77, double=1, single=0 */
+ int loopsnum; /*!< namber of boundary paths (loops), code 91 */
+ double angle; /*!< hatch pattern angle, code 52 */
+ double scale; /*!< hatch pattern scale, code 41 */
+ int deflines; /*!< number of pattern definition lines, code 78 */
+
+ std::vector<DRW_HatchLoop*> looplist; /*!< polyline list */
+
+private:
+ void clearEntities()
+ {
+ pt = line = NULL;
+ pline = NULL;
+ arc = NULL;
+ ellipse = NULL;
+ spline = NULL;
+ plvert = NULL;
+ }
+
+ void addLine()
+ {
+ clearEntities();
+
+ if( loop )
+ {
+ pt = line = new DRW_Line;
+ loop->objlist.push_back( line );
+ }
+ }
+
+ void addArc()
+ {
+ clearEntities();
+
+ if( loop )
+ {
+ pt = arc = new DRW_Arc;
+ loop->objlist.push_back( arc );
+ }
+ }
+
+ void addEllipse()
+ {
+ clearEntities();
+
+ if( loop )
+ {
+ pt = ellipse = new DRW_Ellipse;
+ loop->objlist.push_back( ellipse );
+ }
+ }
+
+ void addSpline()
+ {
+ clearEntities();
+
+ if( loop )
+ {
+ pt = NULL;
+ spline = new DRW_Spline;
+ loop->objlist.push_back( spline );
+ }
+ }
+
+ DRW_HatchLoop* loop; /*!< current loop to add data */
+ DRW_Line* line;
+ DRW_Arc* arc;
+ DRW_Ellipse* ellipse;
+ DRW_Spline* spline;
+ DRW_LWPolyline* pline;
+ DRW_Point* pt;
+ DRW_Vertex2D* plvert;
+ bool ispol;
+};
+
+// ! Class to handle image entity
+/*!
+ * Class to handle image entity
+ * @author Rallaz
+ */
+class DRW_Image : public DRW_Line
+{
+public:
+ DRW_Image()
+ {
+ eType = DRW::IMAGE;
+ vz = fade = clip = 0;
+ brightness = contrast = 50;
+ vx = vy = sizeu = sizev = dz = 0.0;
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ std::string ref; /*!< Hard reference to imagedef object, code 340 */
+ double vx; /*!< V-vector of single pixel, x coordinate, code 12 */
+ double vy; /*!< V-vector of single pixel, y coordinate, code 22 */
+ double vz; /*!< V-vector of single pixel, z coordinate, code 32 */
+ double sizeu; /*!< image size in pixels, U value, code 13 */
+ double sizev; /*!< image size in pixels, V value, code 23 */
+ double dz; /*!< z coordinate, code 33 */
+ int clip; /*!< Clipping state, code 280, 0=off 1=on */
+ int brightness; /*!< Brightness value, code 281, (0-100) default 50 */
+ int contrast; /*!< Brightness value, code 282, (0-100) default 50 */
+ int fade; /*!< Brightness value, code 283, (0-100) default 0 */
+};
+
+
+// ! Base class for dimension entity
+/*!
+ * Base class for dimension entity
+ * @author Rallaz
+ */
+class DRW_Dimension : public DRW_Entity
+{
+public:
+ DRW_Dimension()
+ {
+ eType = DRW::DIMENSION;
+ linesty = 1;
+ linefactor = extPoint.z = 1.0;
+ angle = oblique = rot = 0.0;
+ align = 5;
+ style = "STANDARD";
+ defPoint.z = extPoint.x = extPoint.y = 0;
+ textPoint.z = rot = 0;
+ clonePoint.x = clonePoint.y = clonePoint.z = 0;
+ type = 0;
+ length = 0.0;
+ }
+
+ DRW_Dimension( const DRW_Dimension& d ) : DRW_Entity( d )
+ {
+ eType = DRW::DIMENSION;
+ type = d.type;
+ name = d.name;
+ defPoint = d.defPoint;
+ textPoint = d.textPoint;
+ text = d.text;
+ style = d.style;
+ align = d.align;
+ linesty = d.linesty;
+ linefactor = d.linefactor;
+ rot = d.rot;
+ extPoint = d.extPoint;
+ clonePoint = d.clonePoint;
+ def1 = d.def1;
+ def2 = d.def2;
+ angle = d.angle;
+ oblique = d.oblique;
+ arcPoint = d.arcPoint;
+ circlePoint = d.circlePoint;
+ length = d.length;
+ }
+
+ virtual ~DRW_Dimension() {}
+
+ void parseCode( int code, dxfReader* reader );
+
+ virtual void applyExtrusion() {}
+
+ DRW_Coord getDefPoint() const { return defPoint; } /*!< Definition point, code 10, 20 & 30 */
+ void setDefPoint( const DRW_Coord& p ) { defPoint = p; }
+ DRW_Coord getTextPoint() const { return textPoint; } /*!< Middle point of text, code 11, 21 & 31 */
+ void setTextPoint( const DRW_Coord& p ) { textPoint = p; }
+ std::string getStyle() const { return style; } /*!< Dimension style, code 3 */
+ void setStyle( const std::string& s ) { style = s; }
+ int getAlign() const { return align; } /*!< attachment point, code 71 */
+ void setAlign( const int a ) { align = a; }
+ int getTextLineStyle() const { return linesty; } /*!< Dimension text line spacing style, code 72, default 1 */
+ void setTextLineStyle( const int l ) { linesty = l; }
+ std::string getText() const { return text; } /*!< Dimension text explicitly entered by the user, code 1 */
+ void setText( const std::string& t ) { text = t; }
+ double getTextLineFactor() const { return linefactor; } /*!< Dimension text line spacing factor, code 41, default 1? */
+ void setTextLineFactor( const double l ) { linefactor = l; }
+ double getDir() const { return rot; } /*!< rotation angle of the dimension text, code 53 (optional) default 0 */
+ void setDir( const double d ) { rot = d; }
+
+ DRW_Coord getExtrusion() { return extPoint; } /*!< extrusion, code 210, 220 & 230 */
+ void setExtrusion( const DRW_Coord& p ) { extPoint = p; }
+ std::string getName() { return name; } /*!< Name of the block that contains the entities, code 2 */
+ void setName( const std::string& s ) { name = s; }
+// int getType(){ return type;} /*!< Dimension type, code 70 */
+
+protected:
+ DRW_Coord getPt2() const { return clonePoint; }
+ void setPt2( const DRW_Coord& p ) { clonePoint = p; }
+ DRW_Coord getPt3() const { return def1; }
+ void setPt3( const DRW_Coord& p ) { def1 = p; }
+ DRW_Coord getPt4() const { return def2; }
+ void setPt4( const DRW_Coord& p ) { def2 = p; }
+ DRW_Coord getPt5() const { return circlePoint; }
+ void setPt5( const DRW_Coord& p ) { circlePoint = p; }
+ DRW_Coord getPt6() const { return arcPoint; }
+ void setPt6( const DRW_Coord& p ) { arcPoint = p; }
+ double getAn50() const { return angle; } /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */
+ void setAn50( const double d ) { angle = d; }
+ double getOb52() const { return oblique; } /*!< oblique angle, code 52 */
+ void setOb52( const double d ) { oblique = d; }
+ double getRa40() const { return length; } /*!< Leader length, code 40 */
+ void setRa40( const double d ) { length = d; }
+
+public:
+ int type; /*!< Dimension type, code 70 */
+
+private:
+ std::string name; /*!< Name of the block that contains the entities, code 2 */
+ DRW_Coord defPoint; /*!< definition point, code 10, 20 & 30 (WCS) */
+ DRW_Coord textPoint; /*!< Middle point of text, code 11, 21 & 31 (OCS) */
+ UTF8STRING text; /*!< Dimension text explicitly entered by the user, code 1 */
+ UTF8STRING style; /*!< Dimension style, code 3 */
+ int align; /*!< attachment point, code 71 */
+ int linesty; /*!< Dimension text line spacing style, code 72, default 1 */
+ double linefactor; /*!< Dimension text line spacing factor, code 41, default 1? (value range 0.25 to 4.00*/
+ double rot; /*!< rotation angle of the dimension text, code 53 */
+ DRW_Coord extPoint; /*!< extrusion normal vector, code 210, 220 & 230 */
+
+ // double hdir; /*!< horizontal direction for the dimension, code 51, default ? */
+ DRW_Coord clonePoint; /*!< Insertion point for clones (Baseline & Continue), code 12, 22 & 32 (OCS) */
+ DRW_Coord def1; /*!< Definition point 1for linear & angular, code 13, 23 & 33 (WCS) */
+ DRW_Coord def2; /*!< Definition point 2, code 14, 24 & 34 (WCS) */
+ double angle; /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */
+ double oblique; /*!< oblique angle, code 52 */
+
+ DRW_Coord circlePoint; /*!< Definition point for diameter, radius & angular dims code 15, 25 & 35 (WCS) */
+ DRW_Coord arcPoint; /*!< Point defining dimension arc, x coordinate, code 16, 26 & 36 (OCS) */
+ double length; /*!< Leader length, code 40 */
+};
+
+
+// ! Class to handle aligned dimension entity
+/*!
+ * Class to handle aligned dimension entity
+ * @author Rallaz
+ */
+class DRW_DimAligned : public DRW_Dimension
+{
+public:
+ DRW_DimAligned()
+ {
+ eType = DRW::DIMALIGNED;
+ }
+
+ DRW_DimAligned( const DRW_Dimension& d ) : DRW_Dimension( d )
+ {
+ eType = DRW::DIMALIGNED;
+ }
+
+ DRW_Coord getClonepoint() const { return getPt2(); } /*!< Insertion for clones (Baseline & Continue), 12, 22 & 32 */
+ void setClonePoint( DRW_Coord& c ) { setPt2( c ); }
+
+ DRW_Coord getDimPoint() const { return getDefPoint(); } /*!< dim line location point, code 10, 20 & 30 */
+ void setDimPoint( const DRW_Coord& p ) { setDefPoint( p ); }
+ DRW_Coord getDef1Point() const { return getPt3(); } /*!< Definition point 1, code 13, 23 & 33 */
+ void setDef1Point( const DRW_Coord& p ) { setPt3( p ); }
+ DRW_Coord getDef2Point() const { return getPt4(); } /*!< Definition point 2, code 14, 24 & 34 */
+ void setDef2Point( const DRW_Coord& p ) { setPt4( p ); }
+};
+
+// ! Class to handle linear or rotated dimension entity
+/*!
+ * Class to handle linear or rotated dimension entity
+ * @author Rallaz
+ */
+class DRW_DimLinear : public DRW_DimAligned
+{
+public:
+ DRW_DimLinear()
+ {
+ eType = DRW::DIMLINEAR;
+ }
+
+ DRW_DimLinear( const DRW_Dimension& d ) : DRW_DimAligned( d )
+ {
+ eType = DRW::DIMLINEAR;
+ }
+
+ double getAngle() const { return getAn50(); } /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */
+ void setAngle( const double d ) { setAn50( d ); }
+ double getOblique() const { return getOb52(); } /*!< oblique angle, code 52 */
+ void setOblique( const double d ) { setOb52( d ); }
+};
+
+// ! Class to handle radial dimension entity
+/*!
+ * Class to handle aligned, linear or rotated dimension entity
+ * @author Rallaz
+ */
+class DRW_DimRadial : public DRW_Dimension
+{
+public:
+ DRW_DimRadial()
+ {
+ eType = DRW::DIMRADIAL;
+ }
+
+ DRW_DimRadial( const DRW_Dimension& d ) : DRW_Dimension( d )
+ {
+ eType = DRW::DIMRADIAL;
+ }
+
+ DRW_Coord getCenterPoint() const { return getDefPoint(); } /*!< center point, code 10, 20 & 30 */
+ void setCenterPoint( const DRW_Coord& p ) { setDefPoint( p ); }
+ DRW_Coord getDiameterPoint() const { return getPt5(); } /*!< Definition point for radius, code 15, 25 & 35 */
+ void setDiameterPoint( const DRW_Coord& p ) { setPt5( p ); }
+ double getLeaderLength() const { return getRa40(); } /*!< Leader length, code 40 */
+ void setLeaderLength( const double d ) { setRa40( d ); }
+};
+
+// ! Class to handle radial dimension entity
+/*!
+ * Class to handle aligned, linear or rotated dimension entity
+ * @author Rallaz
+ */
+class DRW_DimDiametric : public DRW_Dimension
+{
+public:
+ DRW_DimDiametric()
+ {
+ eType = DRW::DIMDIAMETRIC;
+ }
+
+ DRW_DimDiametric( const DRW_Dimension& d ) : DRW_Dimension( d )
+ {
+ eType = DRW::DIMDIAMETRIC;
+ }
+
+ DRW_Coord getDiameter1Point() const { return getPt5(); } /*!< First definition point for diameter, code 15, 25 & 35 */
+ void setDiameter1Point( const DRW_Coord& p ) { setPt5( p ); }
+ DRW_Coord getDiameter2Point() const { return getDefPoint(); } /*!< Oposite point for diameter, code 10, 20 & 30 */
+ void setDiameter2Point( const DRW_Coord& p ) { setDefPoint( p ); }
+ double getLeaderLength() const { return getRa40(); } /*!< Leader length, code 40 */
+ void setLeaderLength( const double d ) { setRa40( d ); }
+};
+
+// ! Class to handle angular dimension entity
+/*!
+ * Class to handle angular dimension entity
+ * @author Rallaz
+ */
+class DRW_DimAngular : public DRW_Dimension
+{
+public:
+ DRW_DimAngular()
+ {
+ eType = DRW::DIMANGULAR;
+ }
+
+ DRW_DimAngular( const DRW_Dimension& d ) : DRW_Dimension( d )
+ {
+ eType = DRW::DIMANGULAR;
+ }
+
+ DRW_Coord getFirstLine1() const { return getPt3(); } /*!< Definition point line 1-1, code 13, 23 & 33 */
+ void setFirstLine1( const DRW_Coord& p ) { setPt3( p ); }
+ DRW_Coord getFirstLine2() const { return getPt4(); } /*!< Definition point line 1-2, code 14, 24 & 34 */
+ void setFirstLine2( const DRW_Coord& p ) { setPt4( p ); }
+ DRW_Coord getSecondLine1() const { return getPt5(); } /*!< Definition point line 2-1, code 15, 25 & 35 */
+ void setSecondLine1( const DRW_Coord& p ) { setPt5( p ); }
+ DRW_Coord getSecondLine2() const { return getDefPoint(); } /*!< Definition point line 2-2, code 10, 20 & 30 */
+ void setSecondLine2( const DRW_Coord& p ) { setDefPoint( p ); }
+ DRW_Coord getDimPoint() const { return getPt6(); } /*!< Dimension definition point, code 16, 26 & 36 */
+ void setDimPoint( const DRW_Coord& p ) { setPt6( p ); }
+};
+
+
+// ! Class to handle angular 3p dimension entity
+/*!
+ * Class to handle angular 3p dimension entity
+ * @author Rallaz
+ */
+class DRW_DimAngular3p : public DRW_Dimension
+{
+public:
+ DRW_DimAngular3p()
+ {
+ eType = DRW::DIMANGULAR3P;
+ }
+
+ DRW_DimAngular3p( const DRW_Dimension& d ) : DRW_Dimension( d )
+ {
+ eType = DRW::DIMANGULAR3P;
+ }
+
+ DRW_Coord getFirstLine() const { return getPt3(); } /*!< Definition point line 1, code 13, 23 & 33 */
+ void setFirstLine( const DRW_Coord& p ) { setPt3( p ); }
+ DRW_Coord getSecondLine() const { return getPt4(); } /*!< Definition point line 2, code 14, 24 & 34 */
+ void setSecondLine( const DRW_Coord& p ) { setPt4( p ); }
+ DRW_Coord getVertexPoint() const { return getPt5(); } /*!< Vertex point, code 15, 25 & 35 */
+ void SetVertexPoint( const DRW_Coord& p ) { setPt5( p ); }
+ DRW_Coord getDimPoint() const { return getDefPoint(); } /*!< Dimension definition point, code 10, 20 & 30 */
+ void setDimPoint( const DRW_Coord& p ) { setDefPoint( p ); }
+};
+
+// ! Class to handle ordinate dimension entity
+/*!
+ * Class to handle ordinate dimension entity
+ * @author Rallaz
+ */
+class DRW_DimOrdinate : public DRW_Dimension
+{
+public:
+ DRW_DimOrdinate()
+ {
+ eType = DRW::DIMORDINATE;
+ }
+
+ DRW_DimOrdinate( const DRW_Dimension& d ) : DRW_Dimension( d )
+ {
+ eType = DRW::DIMORDINATE;
+ }
+
+ DRW_Coord getOriginPoint() const { return getDefPoint(); } /*!< Origin definition point, code 10, 20 & 30 */
+ void setOriginPoint( const DRW_Coord& p ) { setDefPoint( p ); }
+ DRW_Coord getFirstLine() const { return getPt3(); } /*!< Feature location point, code 13, 23 & 33 */
+ void setFirstLine( const DRW_Coord& p ) { setPt3( p ); }
+ DRW_Coord getSecondLine() const { return getPt4(); } /*!< Leader end point, code 14, 24 & 34 */
+ void setSecondLine( const DRW_Coord& p ) { setPt4( p ); }
+};
+
+
+// ! Class to handle leader entity
+/*!
+ * Class to handle leader entity
+ * @author Rallaz
+ */
+class DRW_Leader : public DRW_Entity
+{
+public:
+ DRW_Leader()
+ {
+ eType = DRW::LEADER;
+ flag = 3;
+ hookflag = vertnum = leadertype = 0;
+ extrusionPoint.x = extrusionPoint.y = 0.0;
+ arrow = 1;
+ extrusionPoint.z = 1.0;
+ hookline = 0;
+ textheight = textwidth = 0.0;
+ coloruse = 0;
+ vertexpoint = NULL;
+ }
+
+ ~DRW_Leader()
+ {
+ while( !vertexlist.empty() )
+ {
+ vertexlist.pop_back();
+ }
+ }
+
+ virtual void applyExtrusion() {}
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ UTF8STRING style; /*!< Dimension style name, code 3 */
+ int arrow; /*!< Arrowhead flag, code 71, 0=Disabled; 1=Enabled */
+ int leadertype; /*!< Leader path type, code 72, 0=Straight line segments; 1=Spline */
+ int flag; /*!< Leader creation flag, code 73, default 3 */
+ int hookline; /*!< Hook line direction flag, code 74, default 1 */
+ int hookflag; /*!< Hook line flag, code 75 */
+ double textheight; /*!< Text annotation height, code 40 */
+ double textwidth; /*!< Text annotation width, code 41 */
+ int vertnum; /*!< Number of vertices, code 76 */
+ int coloruse; /*!< Color to use if leader's DIMCLRD = BYBLOCK, code 77 */
+ std::string handle; /*!< Hard reference to associated annotation, code 340 */
+ DRW_Coord extrusionPoint; /*!< Normal vector, code 210, 220 & 230 */
+ DRW_Coord horizdir; /*!< "Horizontal" direction for leader, code 211, 221 & 231 */
+ DRW_Coord offsetblock; /*!< Offset of last leader vertex from block, code 212, 222 & 232 */
+ DRW_Coord offsettext; /*!< Offset of last leader vertex from annotation, code 213, 223 & 233 */
+
+ std::vector<DRW_Coord*> vertexlist; /*!< vertex points list, code 10, 20 & 30 */
+
+private:
+ DRW_Coord* vertexpoint; /*!< current control point to add data */
+};
+
+// ! Class to handle viewport entity
+/*!
+ * Class to handle viewport entity
+ * @author Rallaz
+ */
+class DRW_Viewport : public DRW_Point
+{
+public:
+ DRW_Viewport()
+ {
+ eType = DRW::VIEWPORT;
+ vpID = vpstatus = 0;
+ pswidth = 205;
+ psheight = 156;
+ centerPX = 128.5;
+ centerPY = 97.5;
+ }
+
+ virtual void applyExtrusion() {}
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double pswidth; /*!< Width in paper space units, code 40 */
+ double psheight; /*!< Height in paper space units, code 41 */
+ int vpstatus; /*!< Viewport status, code 68 */
+ int vpID; /*!< Viewport ID, code 69 */
+ double centerPX; /*!< view center piont X, code 12 */
+ double centerPY; /*!< view center piont Y, code 22 */
+};
+
+
+#endif
+
+// EOF
diff --git a/lib_dxf/drw_interface.h b/lib_dxf/drw_interface.h
new file mode 100644
index 0000000..0797b29
--- /dev/null
+++ b/lib_dxf/drw_interface.h
@@ -0,0 +1,227 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef DRW_INTERFACE_H
+#define DRW_INTERFACE_H
+
+#include <string.h>
+
+#include "drw_entities.h"
+#include "drw_objects.h"
+// #include "dl_extrusion.h"
+
+/**
+ * Abstract class (interface) for comunicate dxfReader with the application.
+ * Inherit your class which takes care of the entities in the
+ * processed DXF file from this interface.
+ *
+ * @author Rallaz
+ */
+class DRW_Interface
+{
+public:
+ DRW_Interface()
+ {
+// extrusion = new DL_Extrusion;
+ }
+
+ virtual ~DRW_Interface()
+ {
+// delete extrusion;
+ }
+
+ /** Called when header is parsed. */
+ virtual void addHeader( const DRW_Header* data ) = 0;
+
+ /** Called for every line Type. */
+ virtual void addLType( const DRW_LType& data ) = 0;
+
+ /** Called for every layer. */
+ virtual void addLayer( const DRW_Layer& data ) = 0;
+
+ /** Called for every dim style. */
+ virtual void addDimStyle( const DRW_Dimstyle& data ) = 0;
+
+ /** Called for every VPORT table. */
+ virtual void addVport( const DRW_Vport& data ) = 0;
+
+ /** Called for every text style. */
+ virtual void addTextStyle( const DRW_Textstyle& data ) = 0;
+
+ /** Called for every AppId entry. */
+ virtual void addAppId( const DRW_AppId& data ) = 0;
+
+ /**
+ * Called for every block. Note: all entities added after this
+ * command go into this block until endBlock() is called.
+ *
+ * @see endBlock()
+ */
+ virtual void addBlock( const DRW_Block& data ) = 0;
+
+ /**
+ * In DWG called when the following entities corresponding to a
+ * block different from the current. Note: all entities added after this
+ * command go into this block until setBlock() is called already.
+ *
+ * int handle are the value of DRW_Block::handleBlock added with addBlock()
+ */
+ virtual void setBlock( const int handle ) = 0;
+
+ /** Called to end the current block */
+ virtual void endBlock() = 0;
+
+ /** Called for every point */
+ virtual void addPoint( const DRW_Point& data ) = 0;
+
+ /** Called for every line */
+ virtual void addLine( const DRW_Line& data ) = 0;
+
+ /** Called for every ray */
+ virtual void addRay( const DRW_Ray& data ) = 0;
+
+ /** Called for every xline */
+ virtual void addXline( const DRW_Xline& data ) = 0;
+
+ /** Called for every arc */
+ virtual void addArc( const DRW_Arc& data ) = 0;
+
+ /** Called for every circle */
+ virtual void addCircle( const DRW_Circle& data ) = 0;
+
+ /** Called for every ellipse */
+ virtual void addEllipse( const DRW_Ellipse& data ) = 0;
+
+ /** Called for every lwpolyline */
+ virtual void addLWPolyline( const DRW_LWPolyline& data ) = 0;
+
+ /** Called for every polyline start */
+ virtual void addPolyline( const DRW_Polyline& data ) = 0;
+
+ /** Called for every spline */
+ virtual void addSpline( const DRW_Spline* data ) = 0;
+
+ /** Called for every spline knot value */
+ virtual void addKnot( const DRW_Entity& data ) = 0;
+
+ /** Called for every insert. */
+ virtual void addInsert( const DRW_Insert& data ) = 0;
+
+ /** Called for every trace start */
+ virtual void addTrace( const DRW_Trace& data ) = 0;
+
+ /** Called for every 3dface start */
+ virtual void add3dFace( const DRW_3Dface& data ) = 0;
+
+ /** Called for every solid start */
+ virtual void addSolid( const DRW_Solid& data ) = 0;
+
+
+ /** Called for every Multi Text entity. */
+ virtual void addMText( const DRW_MText& data ) = 0;
+
+ /** Called for every Text entity. */
+ virtual void addText( const DRW_Text& data ) = 0;
+
+ /**
+ * Called for every aligned dimension entity.
+ */
+ virtual void addDimAlign( const DRW_DimAligned* data ) = 0;
+
+ /**
+ * Called for every linear or rotated dimension entity.
+ */
+ virtual void addDimLinear( const DRW_DimLinear* data ) = 0;
+
+ /**
+ * Called for every radial dimension entity.
+ */
+ virtual void addDimRadial( const DRW_DimRadial* data ) = 0;
+
+ /**
+ * Called for every diametric dimension entity.
+ */
+ virtual void addDimDiametric( const DRW_DimDiametric* data ) = 0;
+
+ /**
+ * Called for every angular dimension (2 lines version) entity.
+ */
+ virtual void addDimAngular( const DRW_DimAngular* data ) = 0;
+
+ /**
+ * Called for every angular dimension (3 points version) entity.
+ */
+ virtual void addDimAngular3P( const DRW_DimAngular3p* data ) = 0;
+
+ /**
+ * Called for every ordinate dimension entity.
+ */
+ virtual void addDimOrdinate( const DRW_DimOrdinate* data ) = 0;
+
+ /**
+ * Called for every leader start.
+ */
+ virtual void addLeader( const DRW_Leader* data ) = 0;
+
+ /**
+ * Called for every hatch entity.
+ */
+ virtual void addHatch( const DRW_Hatch* data ) = 0;
+
+ /**
+ * Called for every viewport entity.
+ */
+ virtual void addViewport( const DRW_Viewport& data ) = 0;
+
+ /**
+ * Called for every image entity.
+ */
+ virtual void addImage( const DRW_Image* data ) = 0;
+
+ /**
+ * Called for every image definition.
+ */
+ virtual void linkImage( const DRW_ImageDef* data ) = 0;
+
+ /**
+ * Called for every comment in the DXF file (code 999).
+ */
+ virtual void addComment( const char* comment ) = 0;
+
+ /** Sets the current attributes for entities. */
+/* void setExtrusion(double dx, double dy, double dz, double elevation) {
+ * extrusion->setDirection(dx, dy, dz);
+ * extrusion->setElevation(elevation);
+ * }*/
+
+ /** @return the current attributes used for new entities. */
+// DL_Extrusion* getExtrusion() {
+// return extrusion;
+// }
+
+ virtual void writeHeader( DRW_Header& data ) = 0;
+ virtual void writeBlocks() = 0;
+ virtual void writeBlockRecords() = 0;
+ virtual void writeEntities() = 0;
+ virtual void writeLTypes() = 0;
+ virtual void writeLayers() = 0;
+ virtual void writeTextstyles() = 0;
+ virtual void writeVports() = 0;
+ virtual void writeDimstyles() = 0;
+ virtual void writeAppId() = 0;
+
+protected:
+// DL_Attributes attributes;
+// DL_Extrusion *extrusion;
+};
+
+#endif
diff --git a/lib_dxf/drw_objects.cpp b/lib_dxf/drw_objects.cpp
new file mode 100644
index 0000000..128ab8d
--- /dev/null
+++ b/lib_dxf/drw_objects.cpp
@@ -0,0 +1,1435 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#include <iostream>
+#include <math.h>
+#include "drw_objects.h"
+#include "intern/dxfreader.h"
+#include "intern/dxfwriter.h"
+
+// ! Base class for tables entries
+/*!
+ * Base class for tables entries
+ * @author Rallaz
+ */
+void DRW_TableEntry::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 5:
+ handle = reader->getHandleString();
+ break;
+
+ case 330:
+ handleBlock = reader->getHandleString();
+ break;
+
+ case 2:
+ name = reader->getUtf8String();
+ break;
+
+ case 70:
+ flags = reader->getInt32();
+ break;
+
+ case 1000:
+ case 1001:
+ case 1002:
+ case 1003:
+ case 1004:
+ case 1005:
+ extData.push_back( new DRW_Variant( code, reader->getString() ) );
+ break;
+
+ case 1010:
+ case 1011:
+ case 1012:
+ case 1013:
+ curr = new DRW_Variant();
+ curr->addCoord();
+ curr->setCoordX( reader->getDouble() );
+ curr->code = code;
+ extData.push_back( curr );
+ break;
+
+ case 1020:
+ case 1021:
+ case 1022:
+ case 1023:
+
+ if( curr )
+ curr->setCoordY( reader->getDouble() );
+
+ break;
+
+ case 1030:
+ case 1031:
+ case 1032:
+ case 1033:
+
+ if( curr )
+ curr->setCoordZ( reader->getDouble() );
+
+ curr = NULL;
+ break;
+
+ case 1040:
+ case 1041:
+ case 1042:
+ extData.push_back( new DRW_Variant( code, reader->getDouble() ) );
+ break;
+
+ case 1070:
+ case 1071:
+ extData.push_back( new DRW_Variant( code, reader->getInt32() ) );
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+// ! Class to handle dimstyle entries
+/*!
+ * Class to handle ldim style symbol table entries
+ * @author Rallaz
+ */
+void DRW_Dimstyle::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 105:
+ handle = reader->getHandleString();
+ break;
+
+ case 3:
+ dimpost = reader->getUtf8String();
+ break;
+
+ case 4:
+ dimapost = reader->getUtf8String();
+ break;
+
+ case 5:
+ dimblk = reader->getUtf8String();
+ break;
+
+ case 6:
+ dimblk1 = reader->getUtf8String();
+ break;
+
+ case 7:
+ dimblk2 = reader->getUtf8String();
+ break;
+
+ case 40:
+ dimscale = reader->getDouble();
+ break;
+
+ case 41:
+ dimasz = reader->getDouble();
+ break;
+
+ case 42:
+ dimexo = reader->getDouble();
+ break;
+
+ case 43:
+ dimdli = reader->getDouble();
+ break;
+
+ case 44:
+ dimexe = reader->getDouble();
+ break;
+
+ case 45:
+ dimrnd = reader->getDouble();
+ break;
+
+ case 46:
+ dimdle = reader->getDouble();
+ break;
+
+ case 47:
+ dimtp = reader->getDouble();
+ break;
+
+ case 48:
+ dimtm = reader->getDouble();
+ break;
+
+ case 140:
+ dimtxt = reader->getDouble();
+ break;
+
+ case 141:
+ dimcen = reader->getDouble();
+ break;
+
+ case 142:
+ dimtsz = reader->getDouble();
+ break;
+
+ case 143:
+ dimaltf = reader->getDouble();
+ break;
+
+ case 144:
+ dimlfac = reader->getDouble();
+ break;
+
+ case 145:
+ dimtvp = reader->getDouble();
+ break;
+
+ case 146:
+ dimtfac = reader->getDouble();
+ break;
+
+ case 147:
+ dimgap = reader->getDouble();
+ break;
+
+ case 148:
+ dimaltrnd = reader->getDouble();
+ break;
+
+ case 71:
+ dimtol = reader->getInt32();
+ break;
+
+ case 72:
+ dimlim = reader->getInt32();
+ break;
+
+ case 73:
+ dimtih = reader->getInt32();
+ break;
+
+ case 74:
+ dimtoh = reader->getInt32();
+ break;
+
+ case 75:
+ dimse1 = reader->getInt32();
+ break;
+
+ case 76:
+ dimse2 = reader->getInt32();
+ break;
+
+ case 77:
+ dimtad = reader->getInt32();
+ break;
+
+ case 78:
+ dimzin = reader->getInt32();
+ break;
+
+ case 79:
+ dimazin = reader->getInt32();
+ break;
+
+ case 170:
+ dimalt = reader->getInt32();
+ break;
+
+ case 171:
+ dimaltd = reader->getInt32();
+ break;
+
+ case 172:
+ dimtofl = reader->getInt32();
+ break;
+
+ case 173:
+ dimsah = reader->getInt32();
+ break;
+
+ case 174:
+ dimtix = reader->getInt32();
+ break;
+
+ case 175:
+ dimsoxd = reader->getInt32();
+ break;
+
+ case 176:
+ dimclrd = reader->getInt32();
+ break;
+
+ case 177:
+ dimclre = reader->getInt32();
+ break;
+
+ case 178:
+ dimclrt = reader->getInt32();
+ break;
+
+ case 179:
+ dimadec = reader->getInt32();
+ break;
+
+ case 270:
+ dimunit = reader->getInt32();
+ break;
+
+ case 271:
+ dimdec = reader->getInt32();
+ break;
+
+ case 272:
+ dimtdec = reader->getInt32();
+ break;
+
+ case 273:
+ dimaltu = reader->getInt32();
+ break;
+
+ case 274:
+ dimalttd = reader->getInt32();
+ break;
+
+ case 275:
+ dimaunit = reader->getInt32();
+ break;
+
+ case 276:
+ dimfrac = reader->getInt32();
+ break;
+
+ case 277:
+ dimlunit = reader->getInt32();
+ break;
+
+ case 278:
+ dimdsep = reader->getInt32();
+ break;
+
+ case 279:
+ dimtmove = reader->getInt32();
+ break;
+
+ case 280:
+ dimjust = reader->getInt32();
+ break;
+
+ case 281:
+ dimsd1 = reader->getInt32();
+ break;
+
+ case 282:
+ dimsd2 = reader->getInt32();
+ break;
+
+ case 283:
+ dimtolj = reader->getInt32();
+ break;
+
+ case 284:
+ dimtzin = reader->getInt32();
+ break;
+
+ case 285:
+ dimaltz = reader->getInt32();
+ break;
+
+ case 286:
+ dimaltttz = reader->getInt32();
+ break;
+
+ case 287:
+ dimfit = reader->getInt32();
+ break;
+
+ case 288:
+ dimupt = reader->getInt32();
+ break;
+
+ case 289:
+ dimatfit = reader->getInt32();
+ break;
+
+ case 340:
+ dimtxsty = reader->getUtf8String();
+ break;
+
+ case 341:
+ dimldrblk = reader->getUtf8String();
+ break;
+
+ case 342:
+ dimblk = reader->getUtf8String();
+ break;
+
+ case 343:
+ dimblk1 = reader->getUtf8String();
+ break;
+
+ case 344:
+ dimblk2 = reader->getUtf8String();
+ break;
+
+ default:
+ DRW_TableEntry::parseCode( code, reader );
+ break;
+ }
+}
+
+
+// ! Class to handle line type entries
+/*!
+ * Class to handle line type symbol table entries
+ * @author Rallaz
+ */
+void DRW_LType::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 3:
+ desc = reader->getUtf8String();
+ break;
+
+ case 73:
+ size = reader->getInt32();
+ path.reserve( size );
+ break;
+
+ case 40:
+ length = reader->getDouble();
+ break;
+
+ case 49:
+ path.push_back( reader->getDouble() );
+ pathIdx++;
+ break;
+
+/* case 74:
+ * haveShape = reader->getInt32();
+ * break;*/
+ default:
+ DRW_TableEntry::parseCode( code, reader );
+ break;
+ }
+}
+
+
+// ! Update line type
+/*!
+ * Update the size and length of line type acording to the path
+ * @author Rallaz
+ */
+/*TODO: control max length permited */
+void DRW_LType::update()
+{
+ double d = 0;
+
+ size = path.size();
+
+ for( int i = 0; i< size; i++ )
+ {
+ d += fabs( path.at( i ) );
+ }
+
+ length = d;
+}
+
+
+// ! Class to handle layer entries
+/*!
+ * Class to handle layer symbol table entries
+ * @author Rallaz
+ */
+void DRW_Layer::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 6:
+ lineType = reader->getUtf8String();
+ break;
+
+ case 62:
+ color = reader->getInt32();
+ break;
+
+ case 290:
+ plotF = reader->getBool();
+ break;
+
+ case 370:
+ lWeight = DRW_LW_Conv::dxfInt2lineWidth( reader->getInt32() );
+ break;
+
+ case 390:
+ handlePlotS = reader->getString();
+ break;
+
+ case 347:
+ handlePlotM = reader->getString();
+ break;
+
+ case 420:
+ color24 = reader->getInt32();
+ break;
+
+ default:
+ DRW_TableEntry::parseCode( code, reader );
+ break;
+ }
+}
+
+
+// ! Class to handle text style entries
+/*!
+ * Class to handle text style symbol table entries
+ * @author Rallaz
+ */
+void DRW_Textstyle::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 3:
+ font = reader->getUtf8String();
+ break;
+
+ case 4:
+ bigFont = reader->getUtf8String();
+ break;
+
+ case 40:
+ height = reader->getDouble();
+ break;
+
+ case 41:
+ width = reader->getDouble();
+ break;
+
+ case 50:
+ oblique = reader->getDouble();
+ break;
+
+ case 42:
+ lastHeight = reader->getDouble();
+ break;
+
+ case 71:
+ genFlag = reader->getInt32();
+ break;
+
+ case 1071:
+ fontFamily = reader->getInt32();
+ break;
+
+ default:
+ DRW_TableEntry::parseCode( code, reader );
+ break;
+ }
+}
+
+
+// ! Class to handle vport entries
+/*!
+ * Class to handle vport symbol table entries
+ * @author Rallaz
+ */
+void DRW_Vport::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 10:
+ lowerLeft.x = reader->getDouble();
+ break;
+
+ case 20:
+ lowerLeft.y = reader->getDouble();
+ break;
+
+ case 11:
+ UpperRight.x = reader->getDouble();
+ break;
+
+ case 21:
+ UpperRight.y = reader->getDouble();
+ break;
+
+ case 12:
+ center.x = reader->getDouble();
+ break;
+
+ case 22:
+ center.y = reader->getDouble();
+ break;
+
+ case 13:
+ snapBase.x = reader->getDouble();
+ break;
+
+ case 23:
+ snapBase.y = reader->getDouble();
+ break;
+
+ case 14:
+ snapSpacing.x = reader->getDouble();
+ break;
+
+ case 24:
+ snapSpacing.y = reader->getDouble();
+ break;
+
+ case 15:
+ gridSpacing.x = reader->getDouble();
+ break;
+
+ case 25:
+ gridSpacing.y = reader->getDouble();
+ break;
+
+ case 16:
+ viewDir.x = reader->getDouble();
+ break;
+
+ case 26:
+ viewDir.y = reader->getDouble();
+ break;
+
+ case 36:
+ viewDir.z = reader->getDouble();
+ break;
+
+ case 17:
+ viewTarget.x = reader->getDouble();
+ break;
+
+ case 27:
+ viewTarget.y = reader->getDouble();
+ break;
+
+ case 37:
+ viewTarget.z = reader->getDouble();
+ break;
+
+ case 40:
+ height = reader->getDouble();
+ break;
+
+ case 41:
+ ratio = reader->getDouble();
+ break;
+
+ case 42:
+ lensHeight = reader->getDouble();
+ break;
+
+ case 43:
+ frontClip = reader->getDouble();
+ break;
+
+ case 44:
+ backClip = reader->getDouble();
+ break;
+
+ case 50:
+ snapAngle = reader->getDouble();
+ break;
+
+ case 51:
+ twistAngle = reader->getDouble();
+ break;
+
+ case 71:
+ viewMode = reader->getInt32();
+ break;
+
+ case 72:
+ circleZoom = reader->getInt32();
+ break;
+
+ case 73:
+ fastZoom = reader->getInt32();
+ break;
+
+ case 74:
+ ucsIcon = reader->getInt32();
+ break;
+
+ case 75:
+ snap = reader->getInt32();
+ break;
+
+ case 76:
+ grid = reader->getInt32();
+ break;
+
+ case 77:
+ snapStyle = reader->getInt32();
+ break;
+
+ case 78:
+ snapIsopair = reader->getInt32();
+ break;
+
+ default:
+ DRW_TableEntry::parseCode( code, reader );
+ break;
+ }
+}
+
+
+void DRW_ImageDef::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 1:
+ name = reader->getUtf8String();
+ break;
+
+ case 5:
+ handle = reader->getString();
+ break;
+
+ case 10:
+ u = reader->getDouble();
+ break;
+
+ case 20:
+ v = reader->getDouble();
+ break;
+
+ case 11:
+ up = reader->getDouble();
+ break;
+
+ case 12:
+ vp = reader->getDouble();
+ break;
+
+ case 21:
+ vp = reader->getDouble();
+ break;
+
+ case 280:
+ loaded = reader->getInt32();
+ break;
+
+ case 281:
+ resolution = reader->getInt32();
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void DRW_Header::addComment( std::string c )
+{
+ if( !comments.empty() )
+ comments += '\n';
+
+ comments += c;
+}
+
+
+void DRW_Header::parseCode( int code, dxfReader* reader )
+{
+ switch( code )
+ {
+ case 9:
+ curr = new DRW_Variant();
+ name = reader->getString();
+
+ if( version < DRW::AC1015 && name == "$DIMUNIT" )
+ name = "$DIMLUNIT";
+
+ vars[name] = curr;
+ break;
+
+ case 1:
+ curr->addString( reader->getUtf8String() );
+
+ if( name =="$ACADVER" )
+ {
+ reader->setVersion( curr->content.s );
+ version = reader->getVersion();
+ }
+
+ curr->code = code;
+ break;
+
+ case 2:
+ curr->addString( reader->getUtf8String() );
+ curr->code = code;
+ break;
+
+ case 3:
+ curr->addString( reader->getUtf8String() );
+
+ if( name =="$DWGCODEPAGE" )
+ {
+ reader->setCodePage( curr->content.s );
+ curr->addString( reader->getCodePage() );
+ }
+
+ curr->code = code;
+ break;
+
+ case 6:
+ curr->addString( reader->getUtf8String() );
+ curr->code = code;
+ break;
+
+ case 7:
+ curr->addString( reader->getUtf8String() );
+ curr->code = code;
+ break;
+
+ case 8:
+ curr->addString( reader->getUtf8String() );
+ curr->code = code;
+ break;
+
+ case 10:
+ curr->addCoord();
+ curr->setCoordX( reader->getDouble() );
+ curr->code = code;
+ break;
+
+ case 20:
+ curr->setCoordY( reader->getDouble() );
+ break;
+
+ case 30:
+ curr->setCoordZ( reader->getDouble() );
+ curr->code = code;
+ break;
+
+ case 40:
+ curr->addDouble( reader->getDouble() );
+ curr->code = code;
+ break;
+
+ case 50:
+ curr->addDouble( reader->getDouble() );
+ curr->code = code;
+ break;
+
+ case 62:
+ curr->addInt( reader->getInt32() );
+ curr->code = code;
+ break;
+
+ case 70:
+ curr->addInt( reader->getInt32() );
+ curr->code = code;
+ break;
+
+ case 280:
+ curr->addInt( reader->getInt32() );
+ curr->code = code;
+ break;
+
+ case 290:
+ curr->addInt( reader->getInt32() );
+ curr->code = code;
+ break;
+
+ case 370:
+ curr->addInt( reader->getInt32() );
+ curr->code = code;
+ break;
+
+ case 380:
+ curr->addInt( reader->getInt32() );
+ curr->code = code;
+ break;
+
+ case 390:
+ curr->addString( reader->getUtf8String() );
+ curr->code = code;
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+void DRW_Header::write( dxfWriter* writer, DRW::Version ver )
+{
+/*RLZ: TODO complete all vars to AC1024*/
+ double varDouble;
+ int varInt;
+ std::string varStr;
+ DRW_Coord varCoord;
+
+ writer->writeString( 2, "HEADER" );
+ writer->writeString( 9, "$ACADVER" );
+
+ switch( ver )
+ {
+ case DRW::AC1006: // unsupported version acad 10
+ case DRW::AC1009: // acad 11 & 12
+ varStr = "AC1009";
+ break;
+
+ case DRW::AC1012: // unsupported version acad 13
+ case DRW::AC1014: // acad 14
+ varStr = "AC1014";
+ break;
+
+ case DRW::AC1015: // acad 2000
+ varStr = "AC1015";
+ break;
+
+ case DRW::AC1018: // acad 2004
+ varStr = "AC1018";
+ break;
+
+/* case DRW::AC1021: //acad 2007
+ * varStr = "AC1021";
+ * break;*/
+ case DRW::AC1024: // acad 2010
+ varStr = "AC1024";
+ break;
+
+ default: // acad 2007 default version
+ varStr = "AC1021";
+ break;
+ }
+
+ writer->writeString( 1, varStr );
+ writer->setVersion( &varStr );
+
+ getStr( "$ACADVER", &varStr );
+ getStr( "$ACADMAINTVER", &varStr );
+
+ if( ver > DRW::AC1012 )
+ {
+ writer->writeString( 9, "$HANDSEED" );
+// RLZ dxfHex(5, 0xFFFF);
+ writer->writeString( 5, "20000" );
+ }
+
+ if( !getStr( "$DWGCODEPAGE", &varStr ) )
+ {
+ varStr = "ANSI_1252";
+ }
+
+ writer->writeString( 9, "$DWGCODEPAGE" );
+ writer->setCodePage( &varStr );
+ writer->writeString( 3, writer->getCodePage() );
+ writer->writeString( 9, "$INSBASE" );
+
+ if( getCoord( "$INSBASE", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ writer->writeDouble( 30, varCoord.z );
+ }
+ else
+ {
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ writer->writeDouble( 30, 0.0 );
+ }
+
+ writer->writeString( 9, "$EXTMIN" );
+
+ if( getCoord( "$EXTMIN", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ writer->writeDouble( 30, varCoord.z );
+ }
+ else
+ {
+ writer->writeDouble( 10, 1.0000000000000000E+020 );
+ writer->writeDouble( 20, 1.0000000000000000E+020 );
+ writer->writeDouble( 30, 1.0000000000000000E+020 );
+ }
+
+ writer->writeString( 9, "$EXTMAX" );
+
+ if( getCoord( "$EXTMAX", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ writer->writeDouble( 30, varCoord.z );
+ }
+ else
+ {
+ writer->writeDouble( 10, -1.0000000000000000E+020 );
+ writer->writeDouble( 20, -1.0000000000000000E+020 );
+ writer->writeDouble( 30, -1.0000000000000000E+020 );
+ }
+
+ writer->writeString( 9, "$LIMMIN" );
+
+ if( getCoord( "$LIMMIN", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ }
+ else
+ {
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ }
+
+ writer->writeString( 9, "$LIMMAX" );
+
+ if( getCoord( "$LIMMAX", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ }
+ else
+ {
+ writer->writeDouble( 10, 420.0 );
+ writer->writeDouble( 20, 297.0 );
+ }
+
+ writer->writeString( 9, "$ORTHOMODE" );
+
+ if( getInt( "$ORTHOMODE", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 0 );
+
+ writer->writeString( 9, "$LTSCALE" );
+
+ if( getDouble( "$LTSCALE", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 1.0 );
+
+ writer->writeString( 9, "$TEXTSTYLE" );
+
+ if( getStr( "$TEXTSTYLE", &varStr ) )
+ if( ver == DRW::AC1009 )
+ writer->writeUtf8Caps( 7, varStr );
+ else
+ writer->writeUtf8String( 7, varStr );
+
+
+
+
+ else
+ writer->writeString( 7, "STANDARD" );
+
+ writer->writeString( 9, "$CLAYER" );
+
+ if( getStr( "$CLAYER", &varStr ) )
+ if( ver == DRW::AC1009 )
+ writer->writeUtf8Caps( 8, varStr );
+ else
+ writer->writeUtf8String( 8, varStr );
+
+
+
+
+ else
+ writer->writeString( 8, "0" );
+
+ writer->writeString( 9, "$DIMASZ" );
+
+ if( getDouble( "$DIMASZ", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 2.5 );
+
+ writer->writeString( 9, "$DIMLFAC" );
+
+ if( getDouble( "$DIMLFAC", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 1.0 );
+
+ writer->writeString( 9, "$DIMSCALE" );
+
+ if( getDouble( "$DIMSCALE", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 1.0 );
+
+ writer->writeString( 9, "$DIMEXO" );
+
+ if( getDouble( "$DIMEXO", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 0.625 );
+
+ writer->writeString( 9, "$DIMEXE" );
+
+ if( getDouble( "$DIMEXE", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 1.25 );
+
+ writer->writeString( 9, "$DIMTXT" );
+
+ if( getDouble( "$DIMTXT", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 2.5 );
+
+ writer->writeString( 9, "$DIMTSZ" );
+
+ if( getDouble( "$DIMTSZ", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 0.0 );
+
+ if( ver > DRW::AC1009 )
+ {
+ writer->writeString( 9, "$DIMAUNIT" );
+
+ if( getInt( "$DIMAUNIT", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 0 );
+
+ writer->writeString( 9, "$DIMADEC" );
+
+ if( getInt( "$DIMADEC", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 0 );
+ }
+
+ // verify if exist "$DIMLUNIT" or obsolete "$DIMUNIT" (pre v2000)
+ if( !getInt( "$DIMLUNIT", &varInt ) )
+ {
+ if( !getInt( "$DIMUNIT", &varInt ) )
+ varInt = 2;
+ }
+
+ // verify valid values from 1 to 6
+ if( varInt<1 || varInt>6 )
+ varInt = 2;
+
+ if( ver > DRW::AC1014 )
+ {
+ writer->writeString( 9, "$DIMLUNIT" );
+ writer->writeInt16( 70, varInt );
+ }
+ else
+ {
+ writer->writeString( 9, "$DIMUNIT" );
+ writer->writeInt16( 70, varInt );
+ }
+
+ writer->writeString( 9, "$DIMSTYLE" );
+
+ if( getStr( "$DIMSTYLE", &varStr ) )
+ if( ver == DRW::AC1009 )
+ writer->writeUtf8Caps( 2, varStr );
+ else
+ writer->writeUtf8String( 2, varStr );
+
+
+
+
+ else
+ writer->writeString( 2, "STANDARD" );
+
+ writer->writeString( 9, "$DIMGAP" );
+
+ if( getDouble( "$DIMGAP", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 0.625 );
+
+ writer->writeString( 9, "$DIMTIH" );
+
+ if( getInt( "$DIMTIH", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 0 );
+
+ writer->writeString( 9, "$LUNITS" );
+
+ if( getInt( "$LUNITS", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 2 );
+
+ writer->writeString( 9, "$LUPREC" );
+
+ if( getInt( "$LUPREC", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 4 );
+
+ writer->writeString( 9, "$AUNITS" );
+
+ if( getInt( "$AUNITS", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 0 );
+
+ writer->writeString( 9, "$AUPREC" );
+
+ if( getInt( "$AUPREC", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 2 );
+
+ if( ver > DRW::AC1009 )
+ {
+ writer->writeString( 9, "$SPLINESEGS" );
+
+ if( getInt( "$SPLINESEGS", &varInt ) )
+ {
+ writer->writeInt16( 70, varInt );
+ }
+ else
+ writer->writeInt16( 70, 8 );
+ }
+
+/* RLZ: moved to active VPORT, but can write in header if present*/
+ if( getInt( "$GRIDMODE", &varInt ) )
+ {
+ writer->writeString( 9, "$GRIDMODE" );
+ writer->writeInt16( 70, varInt );
+ }
+
+ if( getInt( "$SNAPSTYLE", &varInt ) )
+ {
+ writer->writeString( 9, "$SNAPSTYLE" );
+ writer->writeInt16( 70, varInt );
+ }
+
+ if( getCoord( "$GRIDUNIT", &varCoord ) )
+ {
+ writer->writeString( 9, "$GRIDUNIT" );
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ }
+
+ if( getCoord( "$VIEWCTR", &varCoord ) )
+ {
+ writer->writeString( 9, "$VIEWCTR" );
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ }
+
+/* RLZ: moved to active VPORT, but can write in header if present*/
+
+ if( ver > DRW::AC1009 )
+ {
+ writer->writeString( 9, "$PINSBASE" );
+
+ if( getCoord( "$PINSBASE", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ writer->writeDouble( 30, varCoord.z );
+ }
+ else
+ {
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ writer->writeDouble( 30, 0.0 );
+ }
+ }
+
+ writer->writeString( 9, "$PLIMMIN" );
+
+ if( getCoord( "$PLIMMIN", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ }
+ else
+ {
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ }
+
+ writer->writeString( 9, "$PLIMMAX" );
+
+ if( getCoord( "$PLIMMAX", &varCoord ) )
+ {
+ writer->writeDouble( 10, varCoord.x );
+ writer->writeDouble( 20, varCoord.y );
+ }
+ else
+ {
+ writer->writeDouble( 10, 297.0 );
+ writer->writeDouble( 20, 210.0 );
+ }
+
+ if( ver > DRW::AC1014 )
+ {
+ writer->writeString( 9, "$INSUNITS" );
+
+ if( getInt( "$INSUNITS", &varInt ) )
+ writer->writeInt16( 70, varInt );
+ else
+ writer->writeInt16( 70, 0 );
+ }
+
+ if( ver > DRW::AC1009 )
+ {
+ writer->writeString( 9, "$PSVPSCALE" );
+
+ if( getDouble( "$PSVPSCALE", &varDouble ) )
+ writer->writeDouble( 40, varDouble );
+ else
+ writer->writeDouble( 40, 0.0 );
+ }
+
+#ifdef DRW_DBG
+ std::map<std::string, DRW_Variant*>::const_iterator it;
+
+ for( it = vars.begin(); it != vars.end(); ++it )
+ {
+// QString key = QString::fromStdString((*it).first);
+ std::cerr << (*it).first << std::endl;
+ }
+
+#endif
+}
+
+
+void DRW_Header::addDouble( std::string key, double value, int code )
+{
+ curr = new DRW_Variant();
+ curr->addDouble( value );
+ curr->code = code;
+ vars[key] = curr;
+}
+
+
+void DRW_Header::addInt( std::string key, int value, int code )
+{
+ curr = new DRW_Variant();
+ curr->addInt( value );
+ curr->code = code;
+ vars[key] = curr;
+}
+
+
+void DRW_Header::addStr( std::string key, std::string value, int code )
+{
+ curr = new DRW_Variant();
+ curr->addString( value );
+ curr->code = code;
+ vars[key] = curr;
+}
+
+
+void DRW_Header::addCoord( std::string key, DRW_Coord value, int code )
+{
+ curr = new DRW_Variant();
+ curr->addCoord( value );
+ curr->code = code;
+ vars[key] = curr;
+}
+
+
+bool DRW_Header::getDouble( std::string key, double* varDouble )
+{
+ bool result = false;
+ std::map<std::string, DRW_Variant*>::iterator it;
+
+ it = vars.find( key );
+
+ if( it != vars.end() )
+ {
+ DRW_Variant* var = (*it).second;
+
+ if( var->type == DRW_Variant::DOUBLE )
+ {
+ *varDouble = var->content.d;
+ result = true;
+ }
+
+ vars.erase( it );
+ }
+
+ return result;
+}
+
+
+bool DRW_Header::getInt( std::string key, int* varInt )
+{
+ bool result = false;
+ std::map<std::string, DRW_Variant*>::iterator it;
+
+ it = vars.find( key );
+
+ if( it != vars.end() )
+ {
+ DRW_Variant* var = (*it).second;
+
+ if( var->type == DRW_Variant::INTEGER )
+ {
+ *varInt = var->content.i;
+ result = true;
+ }
+
+ vars.erase( it );
+ }
+
+ return result;
+}
+
+
+bool DRW_Header::getStr( std::string key, std::string* varStr )
+{
+ bool result = false;
+ std::map<std::string, DRW_Variant*>::iterator it;
+
+ it = vars.find( key );
+
+ if( it != vars.end() )
+ {
+ DRW_Variant* var = (*it).second;
+
+ if( var->type == DRW_Variant::STRING )
+ {
+ *varStr = *var->content.s;
+ result = true;
+ }
+
+ vars.erase( it );
+ }
+
+ return result;
+}
+
+
+bool DRW_Header::getCoord( std::string key, DRW_Coord* varCoord )
+{
+ bool result = false;
+ std::map<std::string, DRW_Variant*>::iterator it;
+
+ it = vars.find( key );
+
+ if( it != vars.end() )
+ {
+ DRW_Variant* var = (*it).second;
+
+ if( var->type == DRW_Variant::COORD )
+ {
+ *varCoord = *var->content.v;
+ result = true;
+ }
+
+ vars.erase( it );
+ }
+
+ return result;
+}
diff --git a/lib_dxf/drw_objects.h b/lib_dxf/drw_objects.h
new file mode 100644
index 0000000..46c9a3c
--- /dev/null
+++ b/lib_dxf/drw_objects.h
@@ -0,0 +1,743 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef DRW_OBJECTS_H
+#define DRW_OBJECTS_H
+
+
+#include <string>
+#include <vector>
+#include <map>
+#include "drw_base.h"
+
+class dxfReader;
+class dxfWriter;
+
+namespace DRW {
+// ! Table entries type.
+enum TTYPE
+{
+ UNKNOWNT,
+ LTYPE,
+ LAYER,
+ STYLE,
+ DIMSTYLE,
+ VPORT,
+ BLOCK_RECORD,
+ APPID
+};
+}
+
+// ! Base class for tables entries
+/*!
+ * Base class for tables entries
+ * @author Rallaz
+ */
+class DRW_TableEntry
+{
+public:
+ // initializes default values
+ DRW_TableEntry()
+ {
+ tType = DRW::UNKNOWNT;
+ flags = 0;
+ curr = NULL;
+ handle = 0;
+ handleBlock = 0;
+ }
+
+ virtual ~DRW_TableEntry()
+ {
+ for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
+ delete *it;
+
+ extData.clear();
+ }
+
+protected:
+ void parseCode( int code, dxfReader* reader );
+
+ void reset()
+ {
+ flags = 0;
+
+ for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
+ delete *it;
+
+ extData.clear();
+ }
+
+public:
+ enum DRW::TTYPE tType; /*!< enum: entity type, code 0 */
+ int handle; /*!< entity identifier, code 5 */
+ int handleBlock; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */
+ UTF8STRING name; /*!< entry name, code 2 */
+ int flags; /*!< Flags relevant to entry, code 70 */
+ std::vector<DRW_Variant*> extData; /*!< FIFO list of extended data, codes 1000 to 1071*/
+
+private:
+ DRW_Variant* curr;
+};
+
+
+// ! Class to handle dimstyle entries
+/*!
+ * Class to handle dim style symbol table entries
+ * @author Rallaz
+ */
+class DRW_Dimstyle : public DRW_TableEntry
+{
+public:
+ DRW_Dimstyle() { reset(); }
+
+ void reset()
+ {
+ tType = DRW::DIMSTYLE;
+ dimasz = dimtxt = dimexe = 0.18;
+ dimexo = 0.0625;
+ dimgap = dimcen = 0.09;
+ dimtxsty = "Standard";
+ dimscale = dimlfac = dimtfac = 1.0;
+ dimdli = 0.38;
+ dimrnd = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0;
+ dimaltf = 25.4;
+ dimtol = dimlim = dimse1 = dimse2 = dimtad = dimzin = 0;
+ dimtoh = dimtolj = 1;
+ dimalt = dimtofl = dimsah = dimtix = dimsoxd = 0;
+ dimaltd = dimunit = dimaltu = dimalttd = dimlunit = 2;
+ dimclrd = dimclre = dimclrt = dimjust = dimupt = 0;
+ dimazin = dimaltz = dimaltttz = dimtzin = dimfrac = 0;
+ dimtih = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0;
+ dimaltrnd = 0.0;
+ dimdec = dimtdec = 4;
+ dimfit = dimatfit = 3;
+ dimdsep = '.';
+ dimlwd = dimlwe = -2;
+ DRW_TableEntry::reset();
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ // V12
+ UTF8STRING dimpost; /*!< code 3 */
+ UTF8STRING dimapost; /*!< code 4 */
+/* handle are code 105 */
+ UTF8STRING dimblk; /*!< code 5, code 342 V2000+ */
+ UTF8STRING dimblk1; /*!< code 6, code 343 V2000+ */
+ UTF8STRING dimblk2; /*!< code 7, code 344 V2000+ */
+ double dimscale; /*!< code 40 */
+ double dimasz; /*!< code 41 */
+ double dimexo; /*!< code 42 */
+ double dimdli; /*!< code 43 */
+ double dimexe; /*!< code 44 */
+ double dimrnd; /*!< code 45 */
+ double dimdle; /*!< code 46 */
+ double dimtp; /*!< code 47 */
+ double dimtm; /*!< code 48 */
+ double dimtxt; /*!< code 140 */
+ double dimcen; /*!< code 141 */
+ double dimtsz; /*!< code 142 */
+ double dimaltf; /*!< code 143 */
+ double dimlfac; /*!< code 144 */
+ double dimtvp; /*!< code 145 */
+ double dimtfac; /*!< code 146 */
+ double dimgap; /*!< code 147 */
+ double dimaltrnd; /*!< code 148 V2000+ */
+ int dimtol; /*!< code 71 */
+ int dimlim; /*!< code 72 */
+ int dimtih; /*!< code 73 */
+ int dimtoh; /*!< code 74 */
+ int dimse1; /*!< code 75 */
+ int dimse2; /*!< code 76 */
+ int dimtad; /*!< code 77 */
+ int dimzin; /*!< code 78 */
+ int dimazin; /*!< code 79 V2000+ */
+ int dimalt; /*!< code 170 */
+ int dimaltd; /*!< code 171 */
+ int dimtofl; /*!< code 172 */
+ int dimsah; /*!< code 173 */
+ int dimtix; /*!< code 174 */
+ int dimsoxd; /*!< code 175 */
+ int dimclrd; /*!< code 176 */
+ int dimclre; /*!< code 177 */
+ int dimclrt; /*!< code 178 */
+ int dimadec; /*!< code 179 V2000+ */
+ int dimunit; /*!< code 270 R13+ (obsolete 2000+, use dimlunit & dimfrac) */
+ int dimdec; /*!< code 271 R13+ */
+ int dimtdec; /*!< code 272 R13+ */
+ int dimaltu; /*!< code 273 R13+ */
+ int dimalttd; /*!< code 274 R13+ */
+ int dimaunit; /*!< code 275 R13+ */
+ int dimfrac; /*!< code 276 V2000+ */
+ int dimlunit; /*!< code 277 V2000+ */
+ int dimdsep; /*!< code 278 V2000+ */
+ int dimtmove; /*!< code 279 V2000+ */
+ int dimjust; /*!< code 280 R13+ */
+ int dimsd1; /*!< code 281 R13+ */
+ int dimsd2; /*!< code 282 R13+ */
+ int dimtolj; /*!< code 283 R13+ */
+ int dimtzin; /*!< code 284 R13+ */
+ int dimaltz; /*!< code 285 R13+ */
+ int dimaltttz; /*!< code 286 R13+ */
+ int dimfit; /*!< code 287 R13+ (obsolete 2000+, use dimatfit & dimtmove)*/
+ int dimupt; /*!< code 288 R13+ */
+ int dimatfit; /*!< code 289 V2000+ */
+ UTF8STRING dimtxsty; /*!< code 340 R13+ */
+ UTF8STRING dimldrblk; /*!< code 341 V2000+ */
+ int dimlwd; /*!< code 371 V2000+ */
+ int dimlwe; /*!< code 372 V2000+ */
+};
+
+
+// ! Class to handle line type entries
+/*!
+ * Class to handle line type symbol table entries
+ * @author Rallaz
+ */
+/*TODO: handle complex lineType*/
+class DRW_LType : public DRW_TableEntry
+{
+public:
+ DRW_LType() { reset(); }
+
+ void reset()
+ {
+ tType = DRW::LTYPE;
+ desc = "";
+ size = 0;
+ length = 0.0;
+ pathIdx = 0;
+ DRW_TableEntry::reset();
+ }
+
+ void parseCode( int code, dxfReader* reader );
+ void update();
+
+public:
+ UTF8STRING desc; /*!< descriptive string, code 3 */
+// int align; /*!< align code, always 65 ('A') code 72 */
+ int size; /*!< element number, code 73 */
+ double length; /*!< total length of pattern, code 40 */
+// int haveShape; /*!< complex linetype type, code 74 */
+ std::vector<double> path; /*!< trace, point or space length sequence, code 49 */
+
+private:
+ int pathIdx;
+};
+
+
+// ! Class to handle layer entries
+/*!
+ * Class to handle layer symbol table entries
+ * @author Rallaz
+ */
+class DRW_Layer : public DRW_TableEntry
+{
+public:
+ DRW_Layer() { reset(); }
+
+ void reset()
+ {
+ tType = DRW::LAYER;
+ lineType = "CONTINUOUS";
+ color = 7; // default BYLAYER (256)
+ plotF = true; // default TRUE (plot yes)
+ lWeight = DRW_LW_Conv::widthDefault; // default BYDEFAULT (dxf -3, dwg 31)
+ color24 = -1; // default -1 not set
+ DRW_TableEntry::reset();
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ UTF8STRING lineType; /*!< line type, code 6 */
+ int color; /*!< layer color, code 62 */
+ int color24; /*!< 24-bit color, code 420 */
+ bool plotF; /*!< Plot flag, code 290 */
+ enum DRW_LW_Conv::lineWidth lWeight; /*!< layer lineweight, code 370 */
+ std::string handlePlotS; /*!< Hard-pointer ID/handle of plotstyle, code 390 */
+ std::string handlePlotM; /*!< Hard-pointer ID/handle of materialstyle, code 347 */
+};
+
+// ! Class to handle text style entries
+/*!
+ * Class to handle text style symbol table entries
+ * @author Rallaz
+ */
+class DRW_Textstyle : public DRW_TableEntry
+{
+public:
+ DRW_Textstyle() { reset(); }
+
+ void reset()
+ {
+ tType = DRW::STYLE;
+ height = oblique = 0.0;
+ width = lastHeight = 1.0;
+ font = "txt";
+ genFlag = 0; // 2= X mirror, 4= Y mirror
+ fontFamily = 0;
+ DRW_TableEntry::reset();
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ double height; /*!< Fixed text height (0 not set), code 40 */
+ double width; /*!< Width factor, code 41 */
+ double oblique; /*!< Oblique angle, code 50 */
+ int genFlag; /*!< Text generation flags, code 71 */
+ double lastHeight; /*!< Last height used, code 42 */
+ UTF8STRING font; /*!< primary font file name, code 3 */
+ UTF8STRING bigFont; /*!< bigfont file name or blank if none, code 4 */
+ int fontFamily; /*!< ttf font family, italic and bold flags, code 1071 */
+};
+
+// ! Class to handle vport entries
+/*!
+ * Class to handle vport symbol table entries
+ * @author Rallaz
+ */
+class DRW_Vport : public DRW_TableEntry
+{
+public:
+ DRW_Vport() { reset(); }
+
+ void reset()
+ {
+ UpperRight.x = UpperRight.y = 1.0;
+ snapSpacing.x = snapSpacing.y = 10.0;
+ gridSpacing = snapSpacing;
+ center.x = 0.651828;
+ center.y = -0.16;
+ viewDir.z = 1;
+ height = 5.13732;
+ ratio = 2.4426877;
+ lensHeight = 50;
+ frontClip = backClip = snapAngle = twistAngle = 0.0;
+ viewMode = snap = grid = snapStyle = snapIsopair = 0;
+ fastZoom = 1;
+ circleZoom = 100;
+ ucsIcon = 3;
+ gridBehavior = 7;
+ DRW_TableEntry::reset();
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ DRW_Coord lowerLeft; /*!< Lower left corner, code 10 & 20 */
+ DRW_Coord UpperRight; /*!< Upper right corner, code 11 & 21 */
+ DRW_Coord center; /*!< center point in WCS, code 12 & 22 */
+ DRW_Coord snapBase; /*!< snap base point in DCS, code 13 & 23 */
+ DRW_Coord snapSpacing; /*!< snap Spacing, code 14 & 24 */
+ DRW_Coord gridSpacing; /*!< grid Spacing, code 15 & 25 */
+ DRW_Coord viewDir; /*!< view direction from target point, code 16, 26 & 36 */
+ DRW_Coord viewTarget; /*!< view target point, code 17, 27 & 37 */
+ double height; /*!< view height, code 40 */
+ double ratio; /*!< viewport aspect ratio, code 41 */
+ double lensHeight; /*!< lens height, code 42 */
+ double frontClip; /*!< front clipping plane, code 43 */
+ double backClip; /*!< back clipping plane, code 44 */
+ double snapAngle; /*!< snap rotation angle, code 50 */
+ double twistAngle; /*!< view twist angle, code 51 */
+ int viewMode; /*!< view mode, code 71 */
+ int circleZoom; /*!< circle zoom percent, code 72 */
+ int fastZoom; /*!< fast zoom setting, code 73 */
+ int ucsIcon; /*!< UCSICON setting, code 74 */
+ int snap; /*!< snap on/off, code 75 */
+ int grid; /*!< grid on/off, code 76 */
+ int snapStyle; /*!< snap style, code 77 */
+ int snapIsopair; /*!< snap isopair, code 78 */
+ int gridBehavior; /*!< grid behavior, code 60, undocummented */
+ /** code 60, bit coded possible value are
+ * bit 1 (1) show out of limits
+ * bit 2 (2) adaptive grid
+ * bit 3 (4) allow subdivision
+ * bit 4 (8) follow dinamic SCP
+ **/
+};
+
+
+// ! Class to handle imagedef entries
+/*!
+ * Class to handle image definitions object entries
+ * @author Rallaz
+ */
+class DRW_ImageDef
+{
+public:
+ DRW_ImageDef()
+ {
+ version = 0;
+ u = v = up = vp = 0.0;
+ loaded = 0;
+ resolution = 0;
+ }
+
+ void parseCode( int code, dxfReader* reader );
+
+public:
+ std::string handle; /*!< entity identifier, code 5 */
+ UTF8STRING name; /*!< File name of image, code 1 */
+ int version; /*!< class version, code 90, 0=R14 version */
+ double u; /*!< image size in pixels U value, code 10 */
+ double v; /*!< image size in pixels V value, code 20 */
+ double up; /*!< default size of one pixel U value, code 11 */
+ double vp; /*!< default size of one pixel V value, code 12 really is 21*/
+ int loaded; /*!< image is loaded flag, code 280, 0=unloaded, 1=loaded */
+ int resolution; /*!< resolution units, code 281, 0=no, 2=centimeters, 5=inch */
+
+ std::map<std::string, std::string> reactors;
+};
+
+
+// ! Class to handle header entries
+/*!
+ * Class to handle header vars, to read iterate over "std::map vars"
+ * to write add a DRW_Variant* into "std::map vars" (do not delete it, are cleared in dtor)
+ * or use add* helper functions.
+ * @author Rallaz
+ */
+class DRW_Header
+{
+public:
+ DRW_Header()
+ {
+ version = 0;
+ curr = 0;
+ }
+
+ ~DRW_Header()
+ {
+ for( std::map<std::string, DRW_Variant*>::iterator it = vars.begin(); it!=vars.end(); ++it )
+ delete it->second;
+
+ vars.clear();
+ }
+
+ void addDouble( std::string key, double value, int code );
+ void addInt( std::string key, int value, int code );
+ void addStr( std::string key, std::string value, int code );
+ void addCoord( std::string key, DRW_Coord value, int code );
+
+ std::string getComments() const { return comments; }
+
+ void parseCode( int code, dxfReader* reader );
+ void write( dxfWriter* writer, DRW::Version ver );
+ void addComment( std::string c );
+
+private:
+ bool getDouble( std::string key, double* varDouble );
+ bool getInt( std::string key, int* varInt );
+ bool getStr( std::string key, std::string* varStr );
+ bool getCoord( std::string key, DRW_Coord* varStr );
+
+public:
+ std::map<std::string, DRW_Variant*> vars;
+
+private:
+ std::string comments;
+ std::string name;
+ DRW_Variant* curr;
+ int version; // to use on read
+};
+
+// ! Class to handle AppId entries
+/*!
+ * Class to handle AppId symbol table entries
+ * @author Rallaz
+ */
+class DRW_AppId : public DRW_TableEntry
+{
+public:
+ DRW_AppId() { reset(); }
+
+ void reset()
+ {
+ tType = DRW::APPID;
+ flags = 0;
+ name = "";
+ }
+
+ void parseCode( int code, dxfReader* reader ) { DRW_TableEntry::parseCode( code, reader ); }
+};
+
+namespace DRW {
+// Extended color palette:
+// The first entry is only for direct indexing starting with [1]
+// Color 1 is red (1,0,0)
+const unsigned char dxfColors[][3] =
+{
+ { 0, 0, 0 }, // unused
+ { 255, 0, 0 }, // 1 red
+ { 255, 255, 0 }, // 2 yellow
+ { 0, 255, 0 }, // 3 green
+ { 0, 255, 255 }, // 4 cyan
+ { 0, 0, 255 }, // 5 blue
+ { 255, 0, 255 }, // 6 magenta
+ { 0, 0, 0 }, // 7 black or white
+ { 128, 128, 128 }, // 8 50% gray
+ { 192, 192, 192 }, // 9 75% gray
+ { 255, 0, 0 }, // 10
+ { 255, 127, 127 },
+ { 204, 0, 0 },
+ { 204, 102, 102 },
+ { 153, 0, 0 },
+ { 153, 76, 76 }, // 15
+ { 127, 0, 0 },
+ { 127, 63, 63 },
+ { 76, 0, 0 },
+ { 76, 38, 38 },
+ { 255, 63, 0 }, // 20
+ { 255, 159, 127 },
+ { 204, 51, 0 },
+ { 204, 127, 102 },
+ { 153, 38, 0 },
+ { 153, 95, 76 }, // 25
+ { 127, 31, 0 },
+ { 127, 79, 63 },
+ { 76, 19, 0 },
+ { 76, 47, 38 },
+ { 255, 127, 0 }, // 30
+ { 255, 191, 127 },
+ { 204, 102, 0 },
+ { 204, 153, 102 },
+ { 153, 76, 0 },
+ { 153, 114, 76 }, // 35
+ { 127, 63, 0 },
+ { 127, 95, 63 },
+ { 76, 38, 0 },
+ { 76, 57, 38 },
+ { 255, 191, 0 }, // 40
+ { 255, 223, 127 },
+ { 204, 153, 0 },
+ { 204, 178, 102 },
+ { 153, 114, 0 },
+ { 153, 133, 76 }, // 45
+ { 127, 95, 0 },
+ { 127, 111, 63 },
+ { 76, 57, 0 },
+ { 76, 66, 38 },
+ { 255, 255, 0 }, // 50
+ { 255, 255, 127 },
+ { 204, 204, 0 },
+ { 204, 204, 102 },
+ { 153, 153, 0 },
+ { 153, 153, 76 }, // 55
+ { 127, 127, 0 },
+ { 127, 127, 63 },
+ { 76, 76, 0 },
+ { 76, 76, 38 },
+ { 191, 255, 0 }, // 60
+ { 223, 255, 127 },
+ { 153, 204, 0 },
+ { 178, 204, 102 },
+ { 114, 153, 0 },
+ { 133, 153, 76 }, // 65
+ { 95, 127, 0 },
+ { 111, 127, 63 },
+ { 57, 76, 0 },
+ { 66, 76, 38 },
+ { 127, 255, 0 }, // 70
+ { 191, 255, 127 },
+ { 102, 204, 0 },
+ { 153, 204, 102 },
+ { 76, 153, 0 },
+ { 114, 153, 76 }, // 75
+ { 63, 127, 0 },
+ { 95, 127, 63 },
+ { 38, 76, 0 },
+ { 57, 76, 38 },
+ { 63, 255, 0 }, // 80
+ { 159, 255, 127 },
+ { 51, 204, 0 },
+ { 127, 204, 102 },
+ { 38, 153, 0 },
+ { 95, 153, 76 }, // 85
+ { 31, 127, 0 },
+ { 79, 127, 63 },
+ { 19, 76, 0 },
+ { 47, 76, 38 },
+ { 0, 255, 0 }, // 90
+ { 127, 255, 127 },
+ { 0, 204, 0 },
+ { 102, 204, 102 },
+ { 0, 153, 0 },
+ { 76, 153, 76 }, // 95
+ { 0, 127, 0 },
+ { 63, 127, 63 },
+ { 0, 76, 0 },
+ { 38, 76, 38 },
+ { 0, 255, 63 }, // 100
+ { 127, 255, 159 },
+ { 0, 204, 51 },
+ { 102, 204, 127 },
+ { 0, 153, 38 },
+ { 76, 153, 95 }, // 105
+ { 0, 127, 31 },
+ { 63, 127, 79 },
+ { 0, 76, 19 },
+ { 38, 76, 47 },
+ { 0, 255, 127 }, // 110
+ { 127, 255, 191 },
+ { 0, 204, 102 },
+ { 102, 204, 153 },
+ { 0, 153, 76 },
+ { 76, 153, 114 }, // 115
+ { 0, 127, 63 },
+ { 63, 127, 95 },
+ { 0, 76, 38 },
+ { 38, 76, 57 },
+ { 0, 255, 191 }, // 120
+ { 127, 255, 223 },
+ { 0, 204, 153 },
+ { 102, 204, 178 },
+ { 0, 153, 114 },
+ { 76, 153, 133 }, // 125
+ { 0, 127, 95 },
+ { 63, 127, 111 },
+ { 0, 76, 57 },
+ { 38, 76, 66 },
+ { 0, 255, 255 }, // 130
+ { 127, 255, 255 },
+ { 0, 204, 204 },
+ { 102, 204, 204 },
+ { 0, 153, 153 },
+ { 76, 153, 153 }, // 135
+ { 0, 127, 127 },
+ { 63, 127, 127 },
+ { 0, 76, 76 },
+ { 38, 76, 76 },
+ { 0, 191, 255 }, // 140
+ { 127, 223, 255 },
+ { 0, 153, 204 },
+ { 102, 178, 204 },
+ { 0, 114, 153 },
+ { 76, 133, 153 }, // 145
+ { 0, 95, 127 },
+ { 63, 111, 127 },
+ { 0, 57, 76 },
+ { 38, 66, 76 },
+ { 0, 127, 255 }, // 150
+ { 127, 191, 255 },
+ { 0, 102, 204 },
+ { 102, 153, 204 },
+ { 0, 76, 153 },
+ { 76, 114, 153 }, // 155
+ { 0, 63, 127 },
+ { 63, 95, 127 },
+ { 0, 38, 76 },
+ { 38, 57, 76 },
+ { 0, 66, 255 }, // 160
+ { 127, 159, 255 },
+ { 0, 51, 204 },
+ { 102, 127, 204 },
+ { 0, 38, 153 },
+ { 76, 95, 153 }, // 165
+ { 0, 31, 127 },
+ { 63, 79, 127 },
+ { 0, 19, 76 },
+ { 38, 47, 76 },
+ { 0, 0, 255 }, // 170
+ { 127, 127, 255 },
+ { 0, 0, 204 },
+ { 102, 102, 204 },
+ { 0, 0, 153 },
+ { 76, 76, 153 }, // 175
+ { 0, 0, 127 },
+ { 63, 63, 127 },
+ { 0, 0, 76 },
+ { 38, 38, 76 },
+ { 63, 0, 255 }, // 180
+ { 159, 127, 255 },
+ { 50, 0, 204 },
+ { 127, 102, 204 },
+ { 38, 0, 153 },
+ { 95, 76, 153 }, // 185
+ { 31, 0, 127 },
+ { 79, 63, 127 },
+ { 19, 0, 76 },
+ { 47, 38, 76 },
+ { 127, 0, 255 }, // 190
+ { 191, 127, 255 },
+ { 102, 0, 204 },
+ { 153, 102, 204 },
+ { 76, 0, 153 },
+ { 114, 76, 153 }, // 195
+ { 63, 0, 127 },
+ { 95, 63, 127 },
+ { 38, 0, 76 },
+ { 57, 38, 76 },
+ { 191, 0, 255 }, // 200
+ { 223, 127, 255 },
+ { 153, 0, 204 },
+ { 178, 102, 204 },
+ { 114, 0, 153 },
+ { 133, 76, 153 }, // 205
+ { 95, 0, 127 },
+ { 111, 63, 127 },
+ { 57, 0, 76 },
+ { 66, 38, 76 },
+ { 255, 0, 255 }, // 210
+ { 255, 127, 255 },
+ { 204, 0, 204 },
+ { 204, 102, 204 },
+ { 153, 0, 153 },
+ { 153, 76, 153 }, // 215
+ { 127, 0, 127 },
+ { 127, 63, 127 },
+ { 76, 0, 76 },
+ { 76, 38, 76 },
+ { 255, 0, 191 }, // 220
+ { 255, 127, 223 },
+ { 204, 0, 153 },
+ { 204, 102, 178 },
+ { 153, 0, 114 },
+ { 153, 76, 133 }, // 225
+ { 127, 0, 95 },
+ { 127, 63, 11 },
+ { 76, 0, 57 },
+ { 76, 38, 66 },
+ { 255, 0, 127 }, // 230
+ { 255, 127, 191 },
+ { 204, 0, 102 },
+ { 204, 102, 153 },
+ { 153, 0, 76 },
+ { 153, 76, 114 }, // 235
+ { 127, 0, 63 },
+ { 127, 63, 95 },
+ { 76, 0, 38 },
+ { 76, 38, 57 },
+ { 255, 0, 63 }, // 240
+ { 255, 127, 159 },
+ { 204, 0, 51 },
+ { 204, 102, 127 },
+ { 153, 0, 38 },
+ { 153, 76, 95 }, // 245
+ { 127, 0, 31 },
+ { 127, 63, 79 },
+ { 76, 0, 19 },
+ { 76, 38, 47 },
+ { 51, 51, 51 }, // 250
+ { 91, 91, 91 },
+ { 132, 132, 132 },
+ { 173, 173, 173 },
+ { 214, 214, 214 },
+ { 255, 255, 255 } // 255
+};
+}
+
+#endif
+
+// EOF
diff --git a/lib_dxf/intern/drw_cptable932.h b/lib_dxf/intern/drw_cptable932.h
new file mode 100644
index 0000000..0d9be10
--- /dev/null
+++ b/lib_dxf/intern/drw_cptable932.h
@@ -0,0 +1,7812 @@
+#ifndef DRW_CPTABLE932_H
+#define DRW_CPTABLE932_H
+
+//Japanese
+
+//first entry in this table are 0xA1
+#define CPOFFSET932 0xFEC0
+//#define CP1LENGHT932 63
+#define CPLENGHT932 7724
+#define NOTFOUND932 0x30FB
+
+//Table 932 one byte are
+//from 0xA1 -> 0xFF61
+//to 0xDF .> 0xFF9F
+static const int DRW_Table932[1] = {
+};
+
+//Table 932 lead byte
+//pairs of start/end in DRW_DoubleTable932
+static const int DRW_LeadTable932[] = {
+ 0, //1 #DBCS LEAD BYTE 0x81
+ 147, //2 #DBCS LEAD BYTE 0x82
+ 292, //3 #DBCS LEAD BYTE 0x83
+ 426, //4 #DBCS LEAD BYTE 0x84
+ 524, //5 #DBCS LEAD BYTE 0x85, empty
+ 524, //6 #DBCS LEAD BYTE 0x86, empty
+ 524, //7 #DBCS LEAD BYTE 0x87
+ 607, //8 #DBCS LEAD BYTE 0x88
+ 701, //9 #DBCS LEAD BYTE 0x89
+ 889, //10 #DBCS LEAD BYTE 0x8A
+ 1077, //11 #DBCS LEAD BYTE 0x8B
+ 1265, //12 #DBCS LEAD BYTE 0x8C
+ 1453, //13 #DBCS LEAD BYTE 0x8D
+ 1641, //14 #DBCS LEAD BYTE 0x8E
+ 1829, //15 #DBCS LEAD BYTE 0x8F
+ 2017, //16 #DBCS LEAD BYTE 0x90
+ 2205, //17 #DBCS LEAD BYTE 0x91
+ 2393, //18 #DBCS LEAD BYTE 0x92
+ 2581, //19 #DBCS LEAD BYTE 0x93
+ 2769, //20 #DBCS LEAD BYTE 0x94
+ 2957, //21 #DBCS LEAD BYTE 0x95
+ 3145, //22 #DBCS LEAD BYTE 0x96
+ 3333, //23 #DBCS LEAD BYTE 0x97
+ 3521, //24 #DBCS LEAD BYTE 0x98
+ 3666, //25 #DBCS LEAD BYTE 0x99
+ 3854, //26 #DBCS LEAD BYTE 0x9A
+ 4042, //27 #DBCS LEAD BYTE 0x9B
+ 4230, //28 #DBCS LEAD BYTE 0x9C
+ 4418, //29 #DBCS LEAD BYTE 0x9D
+ 4606, //30 #DBCS LEAD BYTE 0x9E
+ 4794, //31 #DBCS LEAD BYTE 0x9F
+//0xA0 to 0xDF are empty
+ 4982, //32 #DBCS LEAD BYTE 0xE0
+ 5170, //33 #DBCS LEAD BYTE 0xE1
+ 5358, //34 #DBCS LEAD BYTE 0xE2
+ 5546, //35 #DBCS LEAD BYTE 0xE3
+ 5734, //36 #DBCS LEAD BYTE 0xE4
+ 5922, //37 #DBCS LEAD BYTE 0xE5
+ 6110, //38 #DBCS LEAD BYTE 0xE6
+ 6298, //39 #DBCS LEAD BYTE 0xE7
+ 6486, //40 #DBCS LEAD BYTE 0xE8
+ 6674, //41 #DBCS LEAD BYTE 0xE9
+ 6862, //42 #DBCS LEAD BYTE 0xEA
+ 6962, //43 #DBCS LEAD BYTE 0xEB, empty
+ 6962, //44 #DBCS LEAD BYTE 0xEC, empty
+ 6962, //45 #DBCS LEAD BYTE 0xED
+ 7150, //46 #DBCS LEAD BYTE 0xEE
+ 7336, //47 #DBCS LEAD BYTE 0xEF, empty
+ 7336, //48 #DBCS LEAD BYTE 0xF0, empty
+ 7336, //49 #DBCS LEAD BYTE 0xF1, empty
+ 7336, //50 #DBCS LEAD BYTE 0xF2, empty
+ 7336, //51 #DBCS LEAD BYTE 0xF3, empty
+ 7336, //52 #DBCS LEAD BYTE 0xF4, empty
+ 7336, //53 #DBCS LEAD BYTE 0xF5, empty
+ 7336, //54 #DBCS LEAD BYTE 0xF6, empty
+ 7336, //55 #DBCS LEAD BYTE 0xF7, empty
+ 7336, //56 #DBCS LEAD BYTE 0xF8, empty
+ 7336, //57 #DBCS LEAD BYTE 0xF9, empty
+ 7336, //58 #DBCS LEAD BYTE 0xFA
+ 7524, //59 #DBCS LEAD BYTE 0xFB
+ 7712, //60 #DBCS LEAD BYTE 0xFC
+ 7724 //61 #END OF TABLE 0xFD
+};
+
+//Table 932 tail byte
+static const int DRW_DoubleTable932[][2] = {
+ {0x8140, 0x3000}, //1 #IDEOGRAPHIC SPACE
+ {0x8141, 0x3001}, //2 #IDEOGRAPHIC COMMA
+ {0x8142, 0x3002}, //3 #IDEOGRAPHIC FULL STOP
+ {0x8143, 0xFF0C}, //4 #FULLWIDTH COMMA
+ {0x8144, 0xFF0E}, //5 #FULLWIDTH FULL STOP
+ {0x8145, 0x30FB}, //6 #KATAKANA MIDDLE DOT
+ {0x8146, 0xFF1A}, //7 #FULLWIDTH COLON
+ {0x8147, 0xFF1B}, //8 #FULLWIDTH SEMICOLON
+ {0x8148, 0xFF1F}, //9 #FULLWIDTH QUESTION MARK
+ {0x8149, 0xFF01}, //10 #FULLWIDTH EXCLAMATION MARK
+ {0x814A, 0x309B}, //11 #KATAKANA-HIRAGANA VOICED SOUND MARK
+ {0x814B, 0x309C}, //12 #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ {0x814C, 0x00B4}, //13 #ACUTE ACCENT
+ {0x814D, 0xFF40}, //14 #FULLWIDTH GRAVE ACCENT
+ {0x814E, 0x00A8}, //15 #DIAERESIS
+ {0x814F, 0xFF3E}, //16 #FULLWIDTH CIRCUMFLEX ACCENT
+ {0x8150, 0xFFE3}, //17 #FULLWIDTH MACRON
+ {0x8151, 0xFF3F}, //18 #FULLWIDTH LOW LINE
+ {0x8152, 0x30FD}, //19 #KATAKANA ITERATION MARK
+ {0x8153, 0x30FE}, //20 #KATAKANA VOICED ITERATION MARK
+ {0x8154, 0x309D}, //21 #HIRAGANA ITERATION MARK
+ {0x8155, 0x309E}, //22 #HIRAGANA VOICED ITERATION MARK
+ {0x8156, 0x3003}, //23 #DITTO MARK
+ {0x8157, 0x4EDD}, //24 #CJK UNIFIED IDEOGRAPH
+ {0x8158, 0x3005}, //25 #IDEOGRAPHIC ITERATION MARK
+ {0x8159, 0x3006}, //26 #IDEOGRAPHIC CLOSING MARK
+ {0x815A, 0x3007}, //27 #IDEOGRAPHIC NUMBER ZERO
+ {0x815B, 0x30FC}, //28 #KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ {0x815C, 0x2015}, //29 #HORIZONTAL BAR
+ {0x815D, 0x2010}, //30 #HYPHEN
+ {0x815E, 0xFF0F}, //31 #FULLWIDTH SOLIDUS
+ {0x815F, 0xFF3C}, //32 #FULLWIDTH REVERSE SOLIDUS
+ {0x8160, 0xFF5E}, //33 #FULLWIDTH TILDE
+ {0x8161, 0x2225}, //34 #PARALLEL TO
+ {0x8162, 0xFF5C}, //35 #FULLWIDTH VERTICAL LINE
+ {0x8163, 0x2026}, //36 #HORIZONTAL ELLIPSIS
+ {0x8164, 0x2025}, //37 #TWO DOT LEADER
+ {0x8165, 0x2018}, //38 #LEFT SINGLE QUOTATION MARK
+ {0x8166, 0x2019}, //39 #RIGHT SINGLE QUOTATION MARK
+ {0x8167, 0x201C}, //40 #LEFT DOUBLE QUOTATION MARK
+ {0x8168, 0x201D}, //41 #RIGHT DOUBLE QUOTATION MARK
+ {0x8169, 0xFF08}, //42 #FULLWIDTH LEFT PARENTHESIS
+ {0x816A, 0xFF09}, //43 #FULLWIDTH RIGHT PARENTHESIS
+ {0x816B, 0x3014}, //44 #LEFT TORTOISE SHELL BRACKET
+ {0x816C, 0x3015}, //45 #RIGHT TORTOISE SHELL BRACKET
+ {0x816D, 0xFF3B}, //46 #FULLWIDTH LEFT SQUARE BRACKET
+ {0x816E, 0xFF3D}, //47 #FULLWIDTH RIGHT SQUARE BRACKET
+ {0x816F, 0xFF5B}, //48 #FULLWIDTH LEFT CURLY BRACKET
+ {0x8170, 0xFF5D}, //49 #FULLWIDTH RIGHT CURLY BRACKET
+ {0x8171, 0x3008}, //50 #LEFT ANGLE BRACKET
+ {0x8172, 0x3009}, //51 #RIGHT ANGLE BRACKET
+ {0x8173, 0x300A}, //52 #LEFT DOUBLE ANGLE BRACKET
+ {0x8174, 0x300B}, //53 #RIGHT DOUBLE ANGLE BRACKET
+ {0x8175, 0x300C}, //54 #LEFT CORNER BRACKET
+ {0x8176, 0x300D}, //55 #RIGHT CORNER BRACKET
+ {0x8177, 0x300E}, //56 #LEFT WHITE CORNER BRACKET
+ {0x8178, 0x300F}, //57 #RIGHT WHITE CORNER BRACKET
+ {0x8179, 0x3010}, //58 #LEFT BLACK LENTICULAR BRACKET
+ {0x817A, 0x3011}, //59 #RIGHT BLACK LENTICULAR BRACKET
+ {0x817B, 0xFF0B}, //60 #FULLWIDTH PLUS SIGN
+ {0x817C, 0xFF0D}, //61 #FULLWIDTH HYPHEN-MINUS
+ {0x817D, 0x00B1}, //62 #PLUS-MINUS SIGN
+ {0x817E, 0x00D7}, //63 #MULTIPLICATION SIGN
+ {0x8180, 0x00F7}, //64 #DIVISION SIGN
+ {0x8181, 0xFF1D}, //65 #FULLWIDTH EQUALS SIGN
+ {0x8182, 0x2260}, //66 #NOT EQUAL TO
+ {0x8183, 0xFF1C}, //67 #FULLWIDTH LESS-THAN SIGN
+ {0x8184, 0xFF1E}, //68 #FULLWIDTH GREATER-THAN SIGN
+ {0x8185, 0x2266}, //69 #LESS-THAN OVER EQUAL TO
+ {0x8186, 0x2267}, //70 #GREATER-THAN OVER EQUAL TO
+ {0x8187, 0x221E}, //71 #INFINITY
+ {0x8188, 0x2234}, //72 #THEREFORE
+ {0x8189, 0x2642}, //73 #MALE SIGN
+ {0x818A, 0x2640}, //74 #FEMALE SIGN
+ {0x818B, 0x00B0}, //75 #DEGREE SIGN
+ {0x818C, 0x2032}, //76 #PRIME
+ {0x818D, 0x2033}, //77 #DOUBLE PRIME
+ {0x818E, 0x2103}, //78 #DEGREE CELSIUS
+ {0x818F, 0xFFE5}, //79 #FULLWIDTH YEN SIGN
+ {0x8190, 0xFF04}, //80 #FULLWIDTH DOLLAR SIGN
+ {0x8191, 0xFFE0}, //81 #FULLWIDTH CENT SIGN
+ {0x8192, 0xFFE1}, //82 #FULLWIDTH POUND SIGN
+ {0x8193, 0xFF05}, //83 #FULLWIDTH PERCENT SIGN
+ {0x8194, 0xFF03}, //84 #FULLWIDTH NUMBER SIGN
+ {0x8195, 0xFF06}, //85 #FULLWIDTH AMPERSAND
+ {0x8196, 0xFF0A}, //86 #FULLWIDTH ASTERISK
+ {0x8197, 0xFF20}, //87 #FULLWIDTH COMMERCIAL AT
+ {0x8198, 0x00A7}, //88 #SECTION SIGN
+ {0x8199, 0x2606}, //89 #WHITE STAR
+ {0x819A, 0x2605}, //90 #BLACK STAR
+ {0x819B, 0x25CB}, //91 #WHITE CIRCLE
+ {0x819C, 0x25CF}, //92 #BLACK CIRCLE
+ {0x819D, 0x25CE}, //93 #BULLSEYE
+ {0x819E, 0x25C7}, //94 #WHITE DIAMOND
+ {0x819F, 0x25C6}, //95 #BLACK DIAMOND
+ {0x81A0, 0x25A1}, //96 #WHITE SQUARE
+ {0x81A1, 0x25A0}, //97 #BLACK SQUARE
+ {0x81A2, 0x25B3}, //98 #WHITE UP-POINTING TRIANGLE
+ {0x81A3, 0x25B2}, //99 #BLACK UP-POINTING TRIANGLE
+ {0x81A4, 0x25BD}, //100 #WHITE DOWN-POINTING TRIANGLE
+ {0x81A5, 0x25BC}, //101 #BLACK DOWN-POINTING TRIANGLE
+ {0x81A6, 0x203B}, //102 #REFERENCE MARK
+ {0x81A7, 0x3012}, //103 #POSTAL MARK
+ {0x81A8, 0x2192}, //104 #RIGHTWARDS ARROW
+ {0x81A9, 0x2190}, //105 #LEFTWARDS ARROW
+ {0x81AA, 0x2191}, //106 #UPWARDS ARROW
+ {0x81AB, 0x2193}, //107 #DOWNWARDS ARROW
+ {0x81AC, 0x3013}, //108 #GETA MARK
+ {0x81B8, 0x2208}, //109 #ELEMENT OF
+ {0x81B9, 0x220B}, //110 #CONTAINS AS MEMBER
+ {0x81BA, 0x2286}, //111 #SUBSET OF OR EQUAL TO
+ {0x81BB, 0x2287}, //112 #SUPERSET OF OR EQUAL TO
+ {0x81BC, 0x2282}, //113 #SUBSET OF
+ {0x81BD, 0x2283}, //114 #SUPERSET OF
+ {0x81BE, 0x222A}, //115 #UNION
+ {0x81BF, 0x2229}, //116 #INTERSECTION
+ {0x81C8, 0x2227}, //117 #LOGICAL AND
+ {0x81C9, 0x2228}, //118 #LOGICAL OR
+ {0x81CA, 0xFFE2}, //119 #FULLWIDTH NOT SIGN
+ {0x81CB, 0x21D2}, //120 #RIGHTWARDS DOUBLE ARROW
+ {0x81CC, 0x21D4}, //121 #LEFT RIGHT DOUBLE ARROW
+ {0x81CD, 0x2200}, //122 #FOR ALL
+ {0x81CE, 0x2203}, //123 #THERE EXISTS
+ {0x81DA, 0x2220}, //124 #ANGLE
+ {0x81DB, 0x22A5}, //125 #UP TACK
+ {0x81DC, 0x2312}, //126 #ARC
+ {0x81DD, 0x2202}, //127 #PARTIAL DIFFERENTIAL
+ {0x81DE, 0x2207}, //128 #NABLA
+ {0x81DF, 0x2261}, //129 #IDENTICAL TO
+ {0x81E0, 0x2252}, //130 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ {0x81E1, 0x226A}, //131 #MUCH LESS-THAN
+ {0x81E2, 0x226B}, //132 #MUCH GREATER-THAN
+ {0x81E3, 0x221A}, //133 #SQUARE ROOT
+ {0x81E4, 0x223D}, //134 #REVERSED TILDE
+ {0x81E5, 0x221D}, //135 #PROPORTIONAL TO
+ {0x81E6, 0x2235}, //136 #BECAUSE
+ {0x81E7, 0x222B}, //137 #INTEGRAL
+ {0x81E8, 0x222C}, //138 #DOUBLE INTEGRAL
+ {0x81F0, 0x212B}, //139 #ANGSTROM SIGN
+ {0x81F1, 0x2030}, //140 #PER MILLE SIGN
+ {0x81F2, 0x266F}, //141 #MUSIC SHARP SIGN
+ {0x81F3, 0x266D}, //142 #MUSIC FLAT SIGN
+ {0x81F4, 0x266A}, //143 #EIGHTH NOTE
+ {0x81F5, 0x2020}, //144 #DAGGER
+ {0x81F6, 0x2021}, //145 #DOUBLE DAGGER
+ {0x81F7, 0x00B6}, //146 #PILCROW SIGN
+ {0x81FC, 0x25EF}, //147 #LARGE CIRCLE
+ {0x824F, 0xFF10}, //148 #FULLWIDTH DIGIT ZERO
+ {0x8250, 0xFF11}, //149 #FULLWIDTH DIGIT ONE
+ {0x8251, 0xFF12}, //150 #FULLWIDTH DIGIT TWO
+ {0x8252, 0xFF13}, //151 #FULLWIDTH DIGIT THREE
+ {0x8253, 0xFF14}, //152 #FULLWIDTH DIGIT FOUR
+ {0x8254, 0xFF15}, //153 #FULLWIDTH DIGIT FIVE
+ {0x8255, 0xFF16}, //154 #FULLWIDTH DIGIT SIX
+ {0x8256, 0xFF17}, //155 #FULLWIDTH DIGIT SEVEN
+ {0x8257, 0xFF18}, //156 #FULLWIDTH DIGIT EIGHT
+ {0x8258, 0xFF19}, //157 #FULLWIDTH DIGIT NINE
+ {0x8260, 0xFF21}, //158 #FULLWIDTH LATIN CAPITAL LETTER A
+ {0x8261, 0xFF22}, //159 #FULLWIDTH LATIN CAPITAL LETTER B
+ {0x8262, 0xFF23}, //160 #FULLWIDTH LATIN CAPITAL LETTER C
+ {0x8263, 0xFF24}, //161 #FULLWIDTH LATIN CAPITAL LETTER D
+ {0x8264, 0xFF25}, //162 #FULLWIDTH LATIN CAPITAL LETTER E
+ {0x8265, 0xFF26}, //163 #FULLWIDTH LATIN CAPITAL LETTER F
+ {0x8266, 0xFF27}, //164 #FULLWIDTH LATIN CAPITAL LETTER G
+ {0x8267, 0xFF28}, //165 #FULLWIDTH LATIN CAPITAL LETTER H
+ {0x8268, 0xFF29}, //166 #FULLWIDTH LATIN CAPITAL LETTER I
+ {0x8269, 0xFF2A}, //167 #FULLWIDTH LATIN CAPITAL LETTER J
+ {0x826A, 0xFF2B}, //168 #FULLWIDTH LATIN CAPITAL LETTER K
+ {0x826B, 0xFF2C}, //169 #FULLWIDTH LATIN CAPITAL LETTER L
+ {0x826C, 0xFF2D}, //170 #FULLWIDTH LATIN CAPITAL LETTER M
+ {0x826D, 0xFF2E}, //171 #FULLWIDTH LATIN CAPITAL LETTER N
+ {0x826E, 0xFF2F}, //172 #FULLWIDTH LATIN CAPITAL LETTER O
+ {0x826F, 0xFF30}, //173 #FULLWIDTH LATIN CAPITAL LETTER P
+ {0x8270, 0xFF31}, //174 #FULLWIDTH LATIN CAPITAL LETTER Q
+ {0x8271, 0xFF32}, //175 #FULLWIDTH LATIN CAPITAL LETTER R
+ {0x8272, 0xFF33}, //176 #FULLWIDTH LATIN CAPITAL LETTER S
+ {0x8273, 0xFF34}, //177 #FULLWIDTH LATIN CAPITAL LETTER T
+ {0x8274, 0xFF35}, //178 #FULLWIDTH LATIN CAPITAL LETTER U
+ {0x8275, 0xFF36}, //179 #FULLWIDTH LATIN CAPITAL LETTER V
+ {0x8276, 0xFF37}, //180 #FULLWIDTH LATIN CAPITAL LETTER W
+ {0x8277, 0xFF38}, //181 #FULLWIDTH LATIN CAPITAL LETTER X
+ {0x8278, 0xFF39}, //182 #FULLWIDTH LATIN CAPITAL LETTER Y
+ {0x8279, 0xFF3A}, //183 #FULLWIDTH LATIN CAPITAL LETTER Z
+ {0x8281, 0xFF41}, //184 #FULLWIDTH LATIN SMALL LETTER A
+ {0x8282, 0xFF42}, //185 #FULLWIDTH LATIN SMALL LETTER B
+ {0x8283, 0xFF43}, //186 #FULLWIDTH LATIN SMALL LETTER C
+ {0x8284, 0xFF44}, //187 #FULLWIDTH LATIN SMALL LETTER D
+ {0x8285, 0xFF45}, //188 #FULLWIDTH LATIN SMALL LETTER E
+ {0x8286, 0xFF46}, //189 #FULLWIDTH LATIN SMALL LETTER F
+ {0x8287, 0xFF47}, //190 #FULLWIDTH LATIN SMALL LETTER G
+ {0x8288, 0xFF48}, //191 #FULLWIDTH LATIN SMALL LETTER H
+ {0x8289, 0xFF49}, //192 #FULLWIDTH LATIN SMALL LETTER I
+ {0x828A, 0xFF4A}, //193 #FULLWIDTH LATIN SMALL LETTER J
+ {0x828B, 0xFF4B}, //194 #FULLWIDTH LATIN SMALL LETTER K
+ {0x828C, 0xFF4C}, //195 #FULLWIDTH LATIN SMALL LETTER L
+ {0x828D, 0xFF4D}, //196 #FULLWIDTH LATIN SMALL LETTER M
+ {0x828E, 0xFF4E}, //197 #FULLWIDTH LATIN SMALL LETTER N
+ {0x828F, 0xFF4F}, //198 #FULLWIDTH LATIN SMALL LETTER O
+ {0x8290, 0xFF50}, //199 #FULLWIDTH LATIN SMALL LETTER P
+ {0x8291, 0xFF51}, //200 #FULLWIDTH LATIN SMALL LETTER Q
+ {0x8292, 0xFF52}, //201 #FULLWIDTH LATIN SMALL LETTER R
+ {0x8293, 0xFF53}, //202 #FULLWIDTH LATIN SMALL LETTER S
+ {0x8294, 0xFF54}, //203 #FULLWIDTH LATIN SMALL LETTER T
+ {0x8295, 0xFF55}, //204 #FULLWIDTH LATIN SMALL LETTER U
+ {0x8296, 0xFF56}, //205 #FULLWIDTH LATIN SMALL LETTER V
+ {0x8297, 0xFF57}, //206 #FULLWIDTH LATIN SMALL LETTER W
+ {0x8298, 0xFF58}, //207 #FULLWIDTH LATIN SMALL LETTER X
+ {0x8299, 0xFF59}, //208 #FULLWIDTH LATIN SMALL LETTER Y
+ {0x829A, 0xFF5A}, //209 #FULLWIDTH LATIN SMALL LETTER Z
+ {0x829F, 0x3041}, //210 #HIRAGANA LETTER SMALL A
+ {0x82A0, 0x3042}, //211 #HIRAGANA LETTER A
+ {0x82A1, 0x3043}, //212 #HIRAGANA LETTER SMALL I
+ {0x82A2, 0x3044}, //213 #HIRAGANA LETTER I
+ {0x82A3, 0x3045}, //214 #HIRAGANA LETTER SMALL U
+ {0x82A4, 0x3046}, //215 #HIRAGANA LETTER U
+ {0x82A5, 0x3047}, //216 #HIRAGANA LETTER SMALL E
+ {0x82A6, 0x3048}, //217 #HIRAGANA LETTER E
+ {0x82A7, 0x3049}, //218 #HIRAGANA LETTER SMALL O
+ {0x82A8, 0x304A}, //219 #HIRAGANA LETTER O
+ {0x82A9, 0x304B}, //220 #HIRAGANA LETTER KA
+ {0x82AA, 0x304C}, //221 #HIRAGANA LETTER GA
+ {0x82AB, 0x304D}, //222 #HIRAGANA LETTER KI
+ {0x82AC, 0x304E}, //223 #HIRAGANA LETTER GI
+ {0x82AD, 0x304F}, //224 #HIRAGANA LETTER KU
+ {0x82AE, 0x3050}, //225 #HIRAGANA LETTER GU
+ {0x82AF, 0x3051}, //226 #HIRAGANA LETTER KE
+ {0x82B0, 0x3052}, //227 #HIRAGANA LETTER GE
+ {0x82B1, 0x3053}, //228 #HIRAGANA LETTER KO
+ {0x82B2, 0x3054}, //229 #HIRAGANA LETTER GO
+ {0x82B3, 0x3055}, //230 #HIRAGANA LETTER SA
+ {0x82B4, 0x3056}, //231 #HIRAGANA LETTER ZA
+ {0x82B5, 0x3057}, //232 #HIRAGANA LETTER SI
+ {0x82B6, 0x3058}, //233 #HIRAGANA LETTER ZI
+ {0x82B7, 0x3059}, //234 #HIRAGANA LETTER SU
+ {0x82B8, 0x305A}, //235 #HIRAGANA LETTER ZU
+ {0x82B9, 0x305B}, //236 #HIRAGANA LETTER SE
+ {0x82BA, 0x305C}, //237 #HIRAGANA LETTER ZE
+ {0x82BB, 0x305D}, //238 #HIRAGANA LETTER SO
+ {0x82BC, 0x305E}, //239 #HIRAGANA LETTER ZO
+ {0x82BD, 0x305F}, //240 #HIRAGANA LETTER TA
+ {0x82BE, 0x3060}, //241 #HIRAGANA LETTER DA
+ {0x82BF, 0x3061}, //242 #HIRAGANA LETTER TI
+ {0x82C0, 0x3062}, //243 #HIRAGANA LETTER DI
+ {0x82C1, 0x3063}, //244 #HIRAGANA LETTER SMALL TU
+ {0x82C2, 0x3064}, //245 #HIRAGANA LETTER TU
+ {0x82C3, 0x3065}, //246 #HIRAGANA LETTER DU
+ {0x82C4, 0x3066}, //247 #HIRAGANA LETTER TE
+ {0x82C5, 0x3067}, //248 #HIRAGANA LETTER DE
+ {0x82C6, 0x3068}, //249 #HIRAGANA LETTER TO
+ {0x82C7, 0x3069}, //250 #HIRAGANA LETTER DO
+ {0x82C8, 0x306A}, //251 #HIRAGANA LETTER NA
+ {0x82C9, 0x306B}, //252 #HIRAGANA LETTER NI
+ {0x82CA, 0x306C}, //253 #HIRAGANA LETTER NU
+ {0x82CB, 0x306D}, //254 #HIRAGANA LETTER NE
+ {0x82CC, 0x306E}, //255 #HIRAGANA LETTER NO
+ {0x82CD, 0x306F}, //256 #HIRAGANA LETTER HA
+ {0x82CE, 0x3070}, //257 #HIRAGANA LETTER BA
+ {0x82CF, 0x3071}, //258 #HIRAGANA LETTER PA
+ {0x82D0, 0x3072}, //259 #HIRAGANA LETTER HI
+ {0x82D1, 0x3073}, //260 #HIRAGANA LETTER BI
+ {0x82D2, 0x3074}, //261 #HIRAGANA LETTER PI
+ {0x82D3, 0x3075}, //262 #HIRAGANA LETTER HU
+ {0x82D4, 0x3076}, //263 #HIRAGANA LETTER BU
+ {0x82D5, 0x3077}, //264 #HIRAGANA LETTER PU
+ {0x82D6, 0x3078}, //265 #HIRAGANA LETTER HE
+ {0x82D7, 0x3079}, //266 #HIRAGANA LETTER BE
+ {0x82D8, 0x307A}, //267 #HIRAGANA LETTER PE
+ {0x82D9, 0x307B}, //268 #HIRAGANA LETTER HO
+ {0x82DA, 0x307C}, //269 #HIRAGANA LETTER BO
+ {0x82DB, 0x307D}, //270 #HIRAGANA LETTER PO
+ {0x82DC, 0x307E}, //271 #HIRAGANA LETTER MA
+ {0x82DD, 0x307F}, //272 #HIRAGANA LETTER MI
+ {0x82DE, 0x3080}, //273 #HIRAGANA LETTER MU
+ {0x82DF, 0x3081}, //274 #HIRAGANA LETTER ME
+ {0x82E0, 0x3082}, //275 #HIRAGANA LETTER MO
+ {0x82E1, 0x3083}, //276 #HIRAGANA LETTER SMALL YA
+ {0x82E2, 0x3084}, //277 #HIRAGANA LETTER YA
+ {0x82E3, 0x3085}, //278 #HIRAGANA LETTER SMALL YU
+ {0x82E4, 0x3086}, //279 #HIRAGANA LETTER YU
+ {0x82E5, 0x3087}, //280 #HIRAGANA LETTER SMALL YO
+ {0x82E6, 0x3088}, //281 #HIRAGANA LETTER YO
+ {0x82E7, 0x3089}, //282 #HIRAGANA LETTER RA
+ {0x82E8, 0x308A}, //283 #HIRAGANA LETTER RI
+ {0x82E9, 0x308B}, //284 #HIRAGANA LETTER RU
+ {0x82EA, 0x308C}, //285 #HIRAGANA LETTER RE
+ {0x82EB, 0x308D}, //286 #HIRAGANA LETTER RO
+ {0x82EC, 0x308E}, //287 #HIRAGANA LETTER SMALL WA
+ {0x82ED, 0x308F}, //288 #HIRAGANA LETTER WA
+ {0x82EE, 0x3090}, //289 #HIRAGANA LETTER WI
+ {0x82EF, 0x3091}, //290 #HIRAGANA LETTER WE
+ {0x82F0, 0x3092}, //291 #HIRAGANA LETTER WO
+ {0x82F1, 0x3093}, //292 #HIRAGANA LETTER N
+ {0x8340, 0x30A1}, //293 #KATAKANA LETTER SMALL A
+ {0x8341, 0x30A2}, //294 #KATAKANA LETTER A
+ {0x8342, 0x30A3}, //295 #KATAKANA LETTER SMALL I
+ {0x8343, 0x30A4}, //296 #KATAKANA LETTER I
+ {0x8344, 0x30A5}, //297 #KATAKANA LETTER SMALL U
+ {0x8345, 0x30A6}, //298 #KATAKANA LETTER U
+ {0x8346, 0x30A7}, //299 #KATAKANA LETTER SMALL E
+ {0x8347, 0x30A8}, //300 #KATAKANA LETTER E
+ {0x8348, 0x30A9}, //301 #KATAKANA LETTER SMALL O
+ {0x8349, 0x30AA}, //302 #KATAKANA LETTER O
+ {0x834A, 0x30AB}, //303 #KATAKANA LETTER KA
+ {0x834B, 0x30AC}, //304 #KATAKANA LETTER GA
+ {0x834C, 0x30AD}, //305 #KATAKANA LETTER KI
+ {0x834D, 0x30AE}, //306 #KATAKANA LETTER GI
+ {0x834E, 0x30AF}, //307 #KATAKANA LETTER KU
+ {0x834F, 0x30B0}, //308 #KATAKANA LETTER GU
+ {0x8350, 0x30B1}, //309 #KATAKANA LETTER KE
+ {0x8351, 0x30B2}, //310 #KATAKANA LETTER GE
+ {0x8352, 0x30B3}, //311 #KATAKANA LETTER KO
+ {0x8353, 0x30B4}, //312 #KATAKANA LETTER GO
+ {0x8354, 0x30B5}, //313 #KATAKANA LETTER SA
+ {0x8355, 0x30B6}, //314 #KATAKANA LETTER ZA
+ {0x8356, 0x30B7}, //315 #KATAKANA LETTER SI
+ {0x8357, 0x30B8}, //316 #KATAKANA LETTER ZI
+ {0x8358, 0x30B9}, //317 #KATAKANA LETTER SU
+ {0x8359, 0x30BA}, //318 #KATAKANA LETTER ZU
+ {0x835A, 0x30BB}, //319 #KATAKANA LETTER SE
+ {0x835B, 0x30BC}, //320 #KATAKANA LETTER ZE
+ {0x835C, 0x30BD}, //321 #KATAKANA LETTER SO
+ {0x835D, 0x30BE}, //322 #KATAKANA LETTER ZO
+ {0x835E, 0x30BF}, //323 #KATAKANA LETTER TA
+ {0x835F, 0x30C0}, //324 #KATAKANA LETTER DA
+ {0x8360, 0x30C1}, //325 #KATAKANA LETTER TI
+ {0x8361, 0x30C2}, //326 #KATAKANA LETTER DI
+ {0x8362, 0x30C3}, //327 #KATAKANA LETTER SMALL TU
+ {0x8363, 0x30C4}, //328 #KATAKANA LETTER TU
+ {0x8364, 0x30C5}, //329 #KATAKANA LETTER DU
+ {0x8365, 0x30C6}, //330 #KATAKANA LETTER TE
+ {0x8366, 0x30C7}, //331 #KATAKANA LETTER DE
+ {0x8367, 0x30C8}, //332 #KATAKANA LETTER TO
+ {0x8368, 0x30C9}, //333 #KATAKANA LETTER DO
+ {0x8369, 0x30CA}, //334 #KATAKANA LETTER NA
+ {0x836A, 0x30CB}, //335 #KATAKANA LETTER NI
+ {0x836B, 0x30CC}, //336 #KATAKANA LETTER NU
+ {0x836C, 0x30CD}, //337 #KATAKANA LETTER NE
+ {0x836D, 0x30CE}, //338 #KATAKANA LETTER NO
+ {0x836E, 0x30CF}, //339 #KATAKANA LETTER HA
+ {0x836F, 0x30D0}, //340 #KATAKANA LETTER BA
+ {0x8370, 0x30D1}, //341 #KATAKANA LETTER PA
+ {0x8371, 0x30D2}, //342 #KATAKANA LETTER HI
+ {0x8372, 0x30D3}, //343 #KATAKANA LETTER BI
+ {0x8373, 0x30D4}, //344 #KATAKANA LETTER PI
+ {0x8374, 0x30D5}, //345 #KATAKANA LETTER HU
+ {0x8375, 0x30D6}, //346 #KATAKANA LETTER BU
+ {0x8376, 0x30D7}, //347 #KATAKANA LETTER PU
+ {0x8377, 0x30D8}, //348 #KATAKANA LETTER HE
+ {0x8378, 0x30D9}, //349 #KATAKANA LETTER BE
+ {0x8379, 0x30DA}, //350 #KATAKANA LETTER PE
+ {0x837A, 0x30DB}, //351 #KATAKANA LETTER HO
+ {0x837B, 0x30DC}, //352 #KATAKANA LETTER BO
+ {0x837C, 0x30DD}, //353 #KATAKANA LETTER PO
+ {0x837D, 0x30DE}, //354 #KATAKANA LETTER MA
+ {0x837E, 0x30DF}, //355 #KATAKANA LETTER MI
+ {0x8380, 0x30E0}, //356 #KATAKANA LETTER MU
+ {0x8381, 0x30E1}, //357 #KATAKANA LETTER ME
+ {0x8382, 0x30E2}, //358 #KATAKANA LETTER MO
+ {0x8383, 0x30E3}, //359 #KATAKANA LETTER SMALL YA
+ {0x8384, 0x30E4}, //360 #KATAKANA LETTER YA
+ {0x8385, 0x30E5}, //361 #KATAKANA LETTER SMALL YU
+ {0x8386, 0x30E6}, //362 #KATAKANA LETTER YU
+ {0x8387, 0x30E7}, //363 #KATAKANA LETTER SMALL YO
+ {0x8388, 0x30E8}, //364 #KATAKANA LETTER YO
+ {0x8389, 0x30E9}, //365 #KATAKANA LETTER RA
+ {0x838A, 0x30EA}, //366 #KATAKANA LETTER RI
+ {0x838B, 0x30EB}, //367 #KATAKANA LETTER RU
+ {0x838C, 0x30EC}, //368 #KATAKANA LETTER RE
+ {0x838D, 0x30ED}, //369 #KATAKANA LETTER RO
+ {0x838E, 0x30EE}, //370 #KATAKANA LETTER SMALL WA
+ {0x838F, 0x30EF}, //371 #KATAKANA LETTER WA
+ {0x8390, 0x30F0}, //372 #KATAKANA LETTER WI
+ {0x8391, 0x30F1}, //373 #KATAKANA LETTER WE
+ {0x8392, 0x30F2}, //374 #KATAKANA LETTER WO
+ {0x8393, 0x30F3}, //375 #KATAKANA LETTER N
+ {0x8394, 0x30F4}, //376 #KATAKANA LETTER VU
+ {0x8395, 0x30F5}, //377 #KATAKANA LETTER SMALL KA
+ {0x8396, 0x30F6}, //378 #KATAKANA LETTER SMALL KE
+ {0x839F, 0x0391}, //379 #GREEK CAPITAL LETTER ALPHA
+ {0x83A0, 0x0392}, //380 #GREEK CAPITAL LETTER BETA
+ {0x83A1, 0x0393}, //381 #GREEK CAPITAL LETTER GAMMA
+ {0x83A2, 0x0394}, //382 #GREEK CAPITAL LETTER DELTA
+ {0x83A3, 0x0395}, //383 #GREEK CAPITAL LETTER EPSILON
+ {0x83A4, 0x0396}, //384 #GREEK CAPITAL LETTER ZETA
+ {0x83A5, 0x0397}, //385 #GREEK CAPITAL LETTER ETA
+ {0x83A6, 0x0398}, //386 #GREEK CAPITAL LETTER THETA
+ {0x83A7, 0x0399}, //387 #GREEK CAPITAL LETTER IOTA
+ {0x83A8, 0x039A}, //388 #GREEK CAPITAL LETTER KAPPA
+ {0x83A9, 0x039B}, //389 #GREEK CAPITAL LETTER LAMDA
+ {0x83AA, 0x039C}, //390 #GREEK CAPITAL LETTER MU
+ {0x83AB, 0x039D}, //391 #GREEK CAPITAL LETTER NU
+ {0x83AC, 0x039E}, //392 #GREEK CAPITAL LETTER XI
+ {0x83AD, 0x039F}, //393 #GREEK CAPITAL LETTER OMICRON
+ {0x83AE, 0x03A0}, //394 #GREEK CAPITAL LETTER PI
+ {0x83AF, 0x03A1}, //395 #GREEK CAPITAL LETTER RHO
+ {0x83B0, 0x03A3}, //396 #GREEK CAPITAL LETTER SIGMA
+ {0x83B1, 0x03A4}, //397 #GREEK CAPITAL LETTER TAU
+ {0x83B2, 0x03A5}, //398 #GREEK CAPITAL LETTER UPSILON
+ {0x83B3, 0x03A6}, //399 #GREEK CAPITAL LETTER PHI
+ {0x83B4, 0x03A7}, //400 #GREEK CAPITAL LETTER CHI
+ {0x83B5, 0x03A8}, //401 #GREEK CAPITAL LETTER PSI
+ {0x83B6, 0x03A9}, //402 #GREEK CAPITAL LETTER OMEGA
+ {0x83BF, 0x03B1}, //403 #GREEK SMALL LETTER ALPHA
+ {0x83C0, 0x03B2}, //404 #GREEK SMALL LETTER BETA
+ {0x83C1, 0x03B3}, //405 #GREEK SMALL LETTER GAMMA
+ {0x83C2, 0x03B4}, //406 #GREEK SMALL LETTER DELTA
+ {0x83C3, 0x03B5}, //407 #GREEK SMALL LETTER EPSILON
+ {0x83C4, 0x03B6}, //408 #GREEK SMALL LETTER ZETA
+ {0x83C5, 0x03B7}, //409 #GREEK SMALL LETTER ETA
+ {0x83C6, 0x03B8}, //410 #GREEK SMALL LETTER THETA
+ {0x83C7, 0x03B9}, //411 #GREEK SMALL LETTER IOTA
+ {0x83C8, 0x03BA}, //412 #GREEK SMALL LETTER KAPPA
+ {0x83C9, 0x03BB}, //413 #GREEK SMALL LETTER LAMDA
+ {0x83CA, 0x03BC}, //414 #GREEK SMALL LETTER MU
+ {0x83CB, 0x03BD}, //415 #GREEK SMALL LETTER NU
+ {0x83CC, 0x03BE}, //416 #GREEK SMALL LETTER XI
+ {0x83CD, 0x03BF}, //417 #GREEK SMALL LETTER OMICRON
+ {0x83CE, 0x03C0}, //418 #GREEK SMALL LETTER PI
+ {0x83CF, 0x03C1}, //419 #GREEK SMALL LETTER RHO
+ {0x83D0, 0x03C3}, //420 #GREEK SMALL LETTER SIGMA
+ {0x83D1, 0x03C4}, //421 #GREEK SMALL LETTER TAU
+ {0x83D2, 0x03C5}, //422 #GREEK SMALL LETTER UPSILON
+ {0x83D3, 0x03C6}, //423 #GREEK SMALL LETTER PHI
+ {0x83D4, 0x03C7}, //424 #GREEK SMALL LETTER CHI
+ {0x83D5, 0x03C8}, //425 #GREEK SMALL LETTER PSI
+ {0x83D6, 0x03C9}, //426 #GREEK SMALL LETTER OMEGA
+ {0x8440, 0x0410}, //427 #CYRILLIC CAPITAL LETTER A
+ {0x8441, 0x0411}, //428 #CYRILLIC CAPITAL LETTER BE
+ {0x8442, 0x0412}, //429 #CYRILLIC CAPITAL LETTER VE
+ {0x8443, 0x0413}, //430 #CYRILLIC CAPITAL LETTER GHE
+ {0x8444, 0x0414}, //431 #CYRILLIC CAPITAL LETTER DE
+ {0x8445, 0x0415}, //432 #CYRILLIC CAPITAL LETTER IE
+ {0x8446, 0x0401}, //433 #CYRILLIC CAPITAL LETTER IO
+ {0x8447, 0x0416}, //434 #CYRILLIC CAPITAL LETTER ZHE
+ {0x8448, 0x0417}, //435 #CYRILLIC CAPITAL LETTER ZE
+ {0x8449, 0x0418}, //436 #CYRILLIC CAPITAL LETTER I
+ {0x844A, 0x0419}, //437 #CYRILLIC CAPITAL LETTER SHORT I
+ {0x844B, 0x041A}, //438 #CYRILLIC CAPITAL LETTER KA
+ {0x844C, 0x041B}, //439 #CYRILLIC CAPITAL LETTER EL
+ {0x844D, 0x041C}, //440 #CYRILLIC CAPITAL LETTER EM
+ {0x844E, 0x041D}, //441 #CYRILLIC CAPITAL LETTER EN
+ {0x844F, 0x041E}, //442 #CYRILLIC CAPITAL LETTER O
+ {0x8450, 0x041F}, //443 #CYRILLIC CAPITAL LETTER PE
+ {0x8451, 0x0420}, //444 #CYRILLIC CAPITAL LETTER ER
+ {0x8452, 0x0421}, //445 #CYRILLIC CAPITAL LETTER ES
+ {0x8453, 0x0422}, //446 #CYRILLIC CAPITAL LETTER TE
+ {0x8454, 0x0423}, //447 #CYRILLIC CAPITAL LETTER U
+ {0x8455, 0x0424}, //448 #CYRILLIC CAPITAL LETTER EF
+ {0x8456, 0x0425}, //449 #CYRILLIC CAPITAL LETTER HA
+ {0x8457, 0x0426}, //450 #CYRILLIC CAPITAL LETTER TSE
+ {0x8458, 0x0427}, //451 #CYRILLIC CAPITAL LETTER CHE
+ {0x8459, 0x0428}, //452 #CYRILLIC CAPITAL LETTER SHA
+ {0x845A, 0x0429}, //453 #CYRILLIC CAPITAL LETTER SHCHA
+ {0x845B, 0x042A}, //454 #CYRILLIC CAPITAL LETTER HARD SIGN
+ {0x845C, 0x042B}, //455 #CYRILLIC CAPITAL LETTER YERU
+ {0x845D, 0x042C}, //456 #CYRILLIC CAPITAL LETTER SOFT SIGN
+ {0x845E, 0x042D}, //457 #CYRILLIC CAPITAL LETTER E
+ {0x845F, 0x042E}, //458 #CYRILLIC CAPITAL LETTER YU
+ {0x8460, 0x042F}, //459 #CYRILLIC CAPITAL LETTER YA
+ {0x8470, 0x0430}, //460 #CYRILLIC SMALL LETTER A
+ {0x8471, 0x0431}, //461 #CYRILLIC SMALL LETTER BE
+ {0x8472, 0x0432}, //462 #CYRILLIC SMALL LETTER VE
+ {0x8473, 0x0433}, //463 #CYRILLIC SMALL LETTER GHE
+ {0x8474, 0x0434}, //464 #CYRILLIC SMALL LETTER DE
+ {0x8475, 0x0435}, //465 #CYRILLIC SMALL LETTER IE
+ {0x8476, 0x0451}, //466 #CYRILLIC SMALL LETTER IO
+ {0x8477, 0x0436}, //467 #CYRILLIC SMALL LETTER ZHE
+ {0x8478, 0x0437}, //468 #CYRILLIC SMALL LETTER ZE
+ {0x8479, 0x0438}, //469 #CYRILLIC SMALL LETTER I
+ {0x847A, 0x0439}, //470 #CYRILLIC SMALL LETTER SHORT I
+ {0x847B, 0x043A}, //471 #CYRILLIC SMALL LETTER KA
+ {0x847C, 0x043B}, //472 #CYRILLIC SMALL LETTER EL
+ {0x847D, 0x043C}, //473 #CYRILLIC SMALL LETTER EM
+ {0x847E, 0x043D}, //474 #CYRILLIC SMALL LETTER EN
+ {0x8480, 0x043E}, //475 #CYRILLIC SMALL LETTER O
+ {0x8481, 0x043F}, //476 #CYRILLIC SMALL LETTER PE
+ {0x8482, 0x0440}, //477 #CYRILLIC SMALL LETTER ER
+ {0x8483, 0x0441}, //478 #CYRILLIC SMALL LETTER ES
+ {0x8484, 0x0442}, //479 #CYRILLIC SMALL LETTER TE
+ {0x8485, 0x0443}, //480 #CYRILLIC SMALL LETTER U
+ {0x8486, 0x0444}, //481 #CYRILLIC SMALL LETTER EF
+ {0x8487, 0x0445}, //482 #CYRILLIC SMALL LETTER HA
+ {0x8488, 0x0446}, //483 #CYRILLIC SMALL LETTER TSE
+ {0x8489, 0x0447}, //484 #CYRILLIC SMALL LETTER CHE
+ {0x848A, 0x0448}, //485 #CYRILLIC SMALL LETTER SHA
+ {0x848B, 0x0449}, //486 #CYRILLIC SMALL LETTER SHCHA
+ {0x848C, 0x044A}, //487 #CYRILLIC SMALL LETTER HARD SIGN
+ {0x848D, 0x044B}, //488 #CYRILLIC SMALL LETTER YERU
+ {0x848E, 0x044C}, //489 #CYRILLIC SMALL LETTER SOFT SIGN
+ {0x848F, 0x044D}, //490 #CYRILLIC SMALL LETTER E
+ {0x8490, 0x044E}, //491 #CYRILLIC SMALL LETTER YU
+ {0x8491, 0x044F}, //492 #CYRILLIC SMALL LETTER YA
+ {0x849F, 0x2500}, //493 #BOX DRAWINGS LIGHT HORIZONTAL
+ {0x84A0, 0x2502}, //494 #BOX DRAWINGS LIGHT VERTICAL
+ {0x84A1, 0x250C}, //495 #BOX DRAWINGS LIGHT DOWN AND RIGHT
+ {0x84A2, 0x2510}, //496 #BOX DRAWINGS LIGHT DOWN AND LEFT
+ {0x84A3, 0x2518}, //497 #BOX DRAWINGS LIGHT UP AND LEFT
+ {0x84A4, 0x2514}, //498 #BOX DRAWINGS LIGHT UP AND RIGHT
+ {0x84A5, 0x251C}, //499 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ {0x84A6, 0x252C}, //500 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ {0x84A7, 0x2524}, //501 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ {0x84A8, 0x2534}, //502 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ {0x84A9, 0x253C}, //503 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ {0x84AA, 0x2501}, //504 #BOX DRAWINGS HEAVY HORIZONTAL
+ {0x84AB, 0x2503}, //505 #BOX DRAWINGS HEAVY VERTICAL
+ {0x84AC, 0x250F}, //506 #BOX DRAWINGS HEAVY DOWN AND RIGHT
+ {0x84AD, 0x2513}, //507 #BOX DRAWINGS HEAVY DOWN AND LEFT
+ {0x84AE, 0x251B}, //508 #BOX DRAWINGS HEAVY UP AND LEFT
+ {0x84AF, 0x2517}, //509 #BOX DRAWINGS HEAVY UP AND RIGHT
+ {0x84B0, 0x2523}, //510 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+ {0x84B1, 0x2533}, //511 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+ {0x84B2, 0x252B}, //512 #BOX DRAWINGS HEAVY VERTICAL AND LEFT
+ {0x84B3, 0x253B}, //513 #BOX DRAWINGS HEAVY UP AND HORIZONTAL
+ {0x84B4, 0x254B}, //514 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+ {0x84B5, 0x2520}, //515 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+ {0x84B6, 0x252F}, //516 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+ {0x84B7, 0x2528}, //517 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+ {0x84B8, 0x2537}, //518 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+ {0x84B9, 0x253F}, //519 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+ {0x84BA, 0x251D}, //520 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+ {0x84BB, 0x2530}, //521 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+ {0x84BC, 0x2525}, //522 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+ {0x84BD, 0x2538}, //523 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+ {0x84BE, 0x2542}, //524 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+ {0x8740, 0x2460}, //525 #CIRCLED DIGIT ONE
+ {0x8741, 0x2461}, //526 #CIRCLED DIGIT TWO
+ {0x8742, 0x2462}, //527 #CIRCLED DIGIT THREE
+ {0x8743, 0x2463}, //528 #CIRCLED DIGIT FOUR
+ {0x8744, 0x2464}, //529 #CIRCLED DIGIT FIVE
+ {0x8745, 0x2465}, //530 #CIRCLED DIGIT SIX
+ {0x8746, 0x2466}, //531 #CIRCLED DIGIT SEVEN
+ {0x8747, 0x2467}, //532 #CIRCLED DIGIT EIGHT
+ {0x8748, 0x2468}, //533 #CIRCLED DIGIT NINE
+ {0x8749, 0x2469}, //534 #CIRCLED NUMBER TEN
+ {0x874A, 0x246A}, //535 #CIRCLED NUMBER ELEVEN
+ {0x874B, 0x246B}, //536 #CIRCLED NUMBER TWELVE
+ {0x874C, 0x246C}, //537 #CIRCLED NUMBER THIRTEEN
+ {0x874D, 0x246D}, //538 #CIRCLED NUMBER FOURTEEN
+ {0x874E, 0x246E}, //539 #CIRCLED NUMBER FIFTEEN
+ {0x874F, 0x246F}, //540 #CIRCLED NUMBER SIXTEEN
+ {0x8750, 0x2470}, //541 #CIRCLED NUMBER SEVENTEEN
+ {0x8751, 0x2471}, //542 #CIRCLED NUMBER EIGHTEEN
+ {0x8752, 0x2472}, //543 #CIRCLED NUMBER NINETEEN
+ {0x8753, 0x2473}, //544 #CIRCLED NUMBER TWENTY
+ {0x8754, 0x2160}, //545 #ROMAN NUMERAL ONE
+ {0x8755, 0x2161}, //546 #ROMAN NUMERAL TWO
+ {0x8756, 0x2162}, //547 #ROMAN NUMERAL THREE
+ {0x8757, 0x2163}, //548 #ROMAN NUMERAL FOUR
+ {0x8758, 0x2164}, //549 #ROMAN NUMERAL FIVE
+ {0x8759, 0x2165}, //550 #ROMAN NUMERAL SIX
+ {0x875A, 0x2166}, //551 #ROMAN NUMERAL SEVEN
+ {0x875B, 0x2167}, //552 #ROMAN NUMERAL EIGHT
+ {0x875C, 0x2168}, //553 #ROMAN NUMERAL NINE
+ {0x875D, 0x2169}, //554 #ROMAN NUMERAL TEN
+ {0x875F, 0x3349}, //555 #SQUARE MIRI
+ {0x8760, 0x3314}, //556 #SQUARE KIRO
+ {0x8761, 0x3322}, //557 #SQUARE SENTI
+ {0x8762, 0x334D}, //558 #SQUARE MEETORU
+ {0x8763, 0x3318}, //559 #SQUARE GURAMU
+ {0x8764, 0x3327}, //560 #SQUARE TON
+ {0x8765, 0x3303}, //561 #SQUARE AARU
+ {0x8766, 0x3336}, //562 #SQUARE HEKUTAARU
+ {0x8767, 0x3351}, //563 #SQUARE RITTORU
+ {0x8768, 0x3357}, //564 #SQUARE WATTO
+ {0x8769, 0x330D}, //565 #SQUARE KARORII
+ {0x876A, 0x3326}, //566 #SQUARE DORU
+ {0x876B, 0x3323}, //567 #SQUARE SENTO
+ {0x876C, 0x332B}, //568 #SQUARE PAASENTO
+ {0x876D, 0x334A}, //569 #SQUARE MIRIBAARU
+ {0x876E, 0x333B}, //570 #SQUARE PEEZI
+ {0x876F, 0x339C}, //571 #SQUARE MM
+ {0x8770, 0x339D}, //572 #SQUARE CM
+ {0x8771, 0x339E}, //573 #SQUARE KM
+ {0x8772, 0x338E}, //574 #SQUARE MG
+ {0x8773, 0x338F}, //575 #SQUARE KG
+ {0x8774, 0x33C4}, //576 #SQUARE CC
+ {0x8775, 0x33A1}, //577 #SQUARE M SQUARED
+ {0x877E, 0x337B}, //578 #SQUARE ERA NAME HEISEI
+ {0x8780, 0x301D}, //579 #REVERSED DOUBLE PRIME QUOTATION MARK
+ {0x8781, 0x301F}, //580 #LOW DOUBLE PRIME QUOTATION MARK
+ {0x8782, 0x2116}, //581 #NUMERO SIGN
+ {0x8783, 0x33CD}, //582 #SQUARE KK
+ {0x8784, 0x2121}, //583 #TELEPHONE SIGN
+ {0x8785, 0x32A4}, //584 #CIRCLED IDEOGRAPH HIGH
+ {0x8786, 0x32A5}, //585 #CIRCLED IDEOGRAPH CENTRE
+ {0x8787, 0x32A6}, //586 #CIRCLED IDEOGRAPH LOW
+ {0x8788, 0x32A7}, //587 #CIRCLED IDEOGRAPH LEFT
+ {0x8789, 0x32A8}, //588 #CIRCLED IDEOGRAPH RIGHT
+ {0x878A, 0x3231}, //589 #PARENTHESIZED IDEOGRAPH STOCK
+ {0x878B, 0x3232}, //590 #PARENTHESIZED IDEOGRAPH HAVE
+ {0x878C, 0x3239}, //591 #PARENTHESIZED IDEOGRAPH REPRESENT
+ {0x878D, 0x337E}, //592 #SQUARE ERA NAME MEIZI
+ {0x878E, 0x337D}, //593 #SQUARE ERA NAME TAISYOU
+ {0x878F, 0x337C}, //594 #SQUARE ERA NAME SYOUWA
+ {0x8790, 0x2252}, //595 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ {0x8791, 0x2261}, //596 #IDENTICAL TO
+ {0x8792, 0x222B}, //597 #INTEGRAL
+ {0x8793, 0x222E}, //598 #CONTOUR INTEGRAL
+ {0x8794, 0x2211}, //599 #N-ARY SUMMATION
+ {0x8795, 0x221A}, //600 #SQUARE ROOT
+ {0x8796, 0x22A5}, //601 #UP TACK
+ {0x8797, 0x2220}, //602 #ANGLE
+ {0x8798, 0x221F}, //603 #RIGHT ANGLE
+ {0x8799, 0x22BF}, //604 #RIGHT TRIANGLE
+ {0x879A, 0x2235}, //605 #BECAUSE
+ {0x879B, 0x2229}, //606 #INTERSECTION
+ {0x879C, 0x222A}, //607 #UNION
+ {0x889F, 0x4E9C}, //608 #CJK UNIFIED IDEOGRAPH
+ {0x88A0, 0x5516}, //609 #CJK UNIFIED IDEOGRAPH
+ {0x88A1, 0x5A03}, //610 #CJK UNIFIED IDEOGRAPH
+ {0x88A2, 0x963F}, //611 #CJK UNIFIED IDEOGRAPH
+ {0x88A3, 0x54C0}, //612 #CJK UNIFIED IDEOGRAPH
+ {0x88A4, 0x611B}, //613 #CJK UNIFIED IDEOGRAPH
+ {0x88A5, 0x6328}, //614 #CJK UNIFIED IDEOGRAPH
+ {0x88A6, 0x59F6}, //615 #CJK UNIFIED IDEOGRAPH
+ {0x88A7, 0x9022}, //616 #CJK UNIFIED IDEOGRAPH
+ {0x88A8, 0x8475}, //617 #CJK UNIFIED IDEOGRAPH
+ {0x88A9, 0x831C}, //618 #CJK UNIFIED IDEOGRAPH
+ {0x88AA, 0x7A50}, //619 #CJK UNIFIED IDEOGRAPH
+ {0x88AB, 0x60AA}, //620 #CJK UNIFIED IDEOGRAPH
+ {0x88AC, 0x63E1}, //621 #CJK UNIFIED IDEOGRAPH
+ {0x88AD, 0x6E25}, //622 #CJK UNIFIED IDEOGRAPH
+ {0x88AE, 0x65ED}, //623 #CJK UNIFIED IDEOGRAPH
+ {0x88AF, 0x8466}, //624 #CJK UNIFIED IDEOGRAPH
+ {0x88B0, 0x82A6}, //625 #CJK UNIFIED IDEOGRAPH
+ {0x88B1, 0x9BF5}, //626 #CJK UNIFIED IDEOGRAPH
+ {0x88B2, 0x6893}, //627 #CJK UNIFIED IDEOGRAPH
+ {0x88B3, 0x5727}, //628 #CJK UNIFIED IDEOGRAPH
+ {0x88B4, 0x65A1}, //629 #CJK UNIFIED IDEOGRAPH
+ {0x88B5, 0x6271}, //630 #CJK UNIFIED IDEOGRAPH
+ {0x88B6, 0x5B9B}, //631 #CJK UNIFIED IDEOGRAPH
+ {0x88B7, 0x59D0}, //632 #CJK UNIFIED IDEOGRAPH
+ {0x88B8, 0x867B}, //633 #CJK UNIFIED IDEOGRAPH
+ {0x88B9, 0x98F4}, //634 #CJK UNIFIED IDEOGRAPH
+ {0x88BA, 0x7D62}, //635 #CJK UNIFIED IDEOGRAPH
+ {0x88BB, 0x7DBE}, //636 #CJK UNIFIED IDEOGRAPH
+ {0x88BC, 0x9B8E}, //637 #CJK UNIFIED IDEOGRAPH
+ {0x88BD, 0x6216}, //638 #CJK UNIFIED IDEOGRAPH
+ {0x88BE, 0x7C9F}, //639 #CJK UNIFIED IDEOGRAPH
+ {0x88BF, 0x88B7}, //640 #CJK UNIFIED IDEOGRAPH
+ {0x88C0, 0x5B89}, //641 #CJK UNIFIED IDEOGRAPH
+ {0x88C1, 0x5EB5}, //642 #CJK UNIFIED IDEOGRAPH
+ {0x88C2, 0x6309}, //643 #CJK UNIFIED IDEOGRAPH
+ {0x88C3, 0x6697}, //644 #CJK UNIFIED IDEOGRAPH
+ {0x88C4, 0x6848}, //645 #CJK UNIFIED IDEOGRAPH
+ {0x88C5, 0x95C7}, //646 #CJK UNIFIED IDEOGRAPH
+ {0x88C6, 0x978D}, //647 #CJK UNIFIED IDEOGRAPH
+ {0x88C7, 0x674F}, //648 #CJK UNIFIED IDEOGRAPH
+ {0x88C8, 0x4EE5}, //649 #CJK UNIFIED IDEOGRAPH
+ {0x88C9, 0x4F0A}, //650 #CJK UNIFIED IDEOGRAPH
+ {0x88CA, 0x4F4D}, //651 #CJK UNIFIED IDEOGRAPH
+ {0x88CB, 0x4F9D}, //652 #CJK UNIFIED IDEOGRAPH
+ {0x88CC, 0x5049}, //653 #CJK UNIFIED IDEOGRAPH
+ {0x88CD, 0x56F2}, //654 #CJK UNIFIED IDEOGRAPH
+ {0x88CE, 0x5937}, //655 #CJK UNIFIED IDEOGRAPH
+ {0x88CF, 0x59D4}, //656 #CJK UNIFIED IDEOGRAPH
+ {0x88D0, 0x5A01}, //657 #CJK UNIFIED IDEOGRAPH
+ {0x88D1, 0x5C09}, //658 #CJK UNIFIED IDEOGRAPH
+ {0x88D2, 0x60DF}, //659 #CJK UNIFIED IDEOGRAPH
+ {0x88D3, 0x610F}, //660 #CJK UNIFIED IDEOGRAPH
+ {0x88D4, 0x6170}, //661 #CJK UNIFIED IDEOGRAPH
+ {0x88D5, 0x6613}, //662 #CJK UNIFIED IDEOGRAPH
+ {0x88D6, 0x6905}, //663 #CJK UNIFIED IDEOGRAPH
+ {0x88D7, 0x70BA}, //664 #CJK UNIFIED IDEOGRAPH
+ {0x88D8, 0x754F}, //665 #CJK UNIFIED IDEOGRAPH
+ {0x88D9, 0x7570}, //666 #CJK UNIFIED IDEOGRAPH
+ {0x88DA, 0x79FB}, //667 #CJK UNIFIED IDEOGRAPH
+ {0x88DB, 0x7DAD}, //668 #CJK UNIFIED IDEOGRAPH
+ {0x88DC, 0x7DEF}, //669 #CJK UNIFIED IDEOGRAPH
+ {0x88DD, 0x80C3}, //670 #CJK UNIFIED IDEOGRAPH
+ {0x88DE, 0x840E}, //671 #CJK UNIFIED IDEOGRAPH
+ {0x88DF, 0x8863}, //672 #CJK UNIFIED IDEOGRAPH
+ {0x88E0, 0x8B02}, //673 #CJK UNIFIED IDEOGRAPH
+ {0x88E1, 0x9055}, //674 #CJK UNIFIED IDEOGRAPH
+ {0x88E2, 0x907A}, //675 #CJK UNIFIED IDEOGRAPH
+ {0x88E3, 0x533B}, //676 #CJK UNIFIED IDEOGRAPH
+ {0x88E4, 0x4E95}, //677 #CJK UNIFIED IDEOGRAPH
+ {0x88E5, 0x4EA5}, //678 #CJK UNIFIED IDEOGRAPH
+ {0x88E6, 0x57DF}, //679 #CJK UNIFIED IDEOGRAPH
+ {0x88E7, 0x80B2}, //680 #CJK UNIFIED IDEOGRAPH
+ {0x88E8, 0x90C1}, //681 #CJK UNIFIED IDEOGRAPH
+ {0x88E9, 0x78EF}, //682 #CJK UNIFIED IDEOGRAPH
+ {0x88EA, 0x4E00}, //683 #CJK UNIFIED IDEOGRAPH
+ {0x88EB, 0x58F1}, //684 #CJK UNIFIED IDEOGRAPH
+ {0x88EC, 0x6EA2}, //685 #CJK UNIFIED IDEOGRAPH
+ {0x88ED, 0x9038}, //686 #CJK UNIFIED IDEOGRAPH
+ {0x88EE, 0x7A32}, //687 #CJK UNIFIED IDEOGRAPH
+ {0x88EF, 0x8328}, //688 #CJK UNIFIED IDEOGRAPH
+ {0x88F0, 0x828B}, //689 #CJK UNIFIED IDEOGRAPH
+ {0x88F1, 0x9C2F}, //690 #CJK UNIFIED IDEOGRAPH
+ {0x88F2, 0x5141}, //691 #CJK UNIFIED IDEOGRAPH
+ {0x88F3, 0x5370}, //692 #CJK UNIFIED IDEOGRAPH
+ {0x88F4, 0x54BD}, //693 #CJK UNIFIED IDEOGRAPH
+ {0x88F5, 0x54E1}, //694 #CJK UNIFIED IDEOGRAPH
+ {0x88F6, 0x56E0}, //695 #CJK UNIFIED IDEOGRAPH
+ {0x88F7, 0x59FB}, //696 #CJK UNIFIED IDEOGRAPH
+ {0x88F8, 0x5F15}, //697 #CJK UNIFIED IDEOGRAPH
+ {0x88F9, 0x98F2}, //698 #CJK UNIFIED IDEOGRAPH
+ {0x88FA, 0x6DEB}, //699 #CJK UNIFIED IDEOGRAPH
+ {0x88FB, 0x80E4}, //700 #CJK UNIFIED IDEOGRAPH
+ {0x88FC, 0x852D}, //701 #CJK UNIFIED IDEOGRAPH
+ {0x8940, 0x9662}, //702 #CJK UNIFIED IDEOGRAPH
+ {0x8941, 0x9670}, //703 #CJK UNIFIED IDEOGRAPH
+ {0x8942, 0x96A0}, //704 #CJK UNIFIED IDEOGRAPH
+ {0x8943, 0x97FB}, //705 #CJK UNIFIED IDEOGRAPH
+ {0x8944, 0x540B}, //706 #CJK UNIFIED IDEOGRAPH
+ {0x8945, 0x53F3}, //707 #CJK UNIFIED IDEOGRAPH
+ {0x8946, 0x5B87}, //708 #CJK UNIFIED IDEOGRAPH
+ {0x8947, 0x70CF}, //709 #CJK UNIFIED IDEOGRAPH
+ {0x8948, 0x7FBD}, //710 #CJK UNIFIED IDEOGRAPH
+ {0x8949, 0x8FC2}, //711 #CJK UNIFIED IDEOGRAPH
+ {0x894A, 0x96E8}, //712 #CJK UNIFIED IDEOGRAPH
+ {0x894B, 0x536F}, //713 #CJK UNIFIED IDEOGRAPH
+ {0x894C, 0x9D5C}, //714 #CJK UNIFIED IDEOGRAPH
+ {0x894D, 0x7ABA}, //715 #CJK UNIFIED IDEOGRAPH
+ {0x894E, 0x4E11}, //716 #CJK UNIFIED IDEOGRAPH
+ {0x894F, 0x7893}, //717 #CJK UNIFIED IDEOGRAPH
+ {0x8950, 0x81FC}, //718 #CJK UNIFIED IDEOGRAPH
+ {0x8951, 0x6E26}, //719 #CJK UNIFIED IDEOGRAPH
+ {0x8952, 0x5618}, //720 #CJK UNIFIED IDEOGRAPH
+ {0x8953, 0x5504}, //721 #CJK UNIFIED IDEOGRAPH
+ {0x8954, 0x6B1D}, //722 #CJK UNIFIED IDEOGRAPH
+ {0x8955, 0x851A}, //723 #CJK UNIFIED IDEOGRAPH
+ {0x8956, 0x9C3B}, //724 #CJK UNIFIED IDEOGRAPH
+ {0x8957, 0x59E5}, //725 #CJK UNIFIED IDEOGRAPH
+ {0x8958, 0x53A9}, //726 #CJK UNIFIED IDEOGRAPH
+ {0x8959, 0x6D66}, //727 #CJK UNIFIED IDEOGRAPH
+ {0x895A, 0x74DC}, //728 #CJK UNIFIED IDEOGRAPH
+ {0x895B, 0x958F}, //729 #CJK UNIFIED IDEOGRAPH
+ {0x895C, 0x5642}, //730 #CJK UNIFIED IDEOGRAPH
+ {0x895D, 0x4E91}, //731 #CJK UNIFIED IDEOGRAPH
+ {0x895E, 0x904B}, //732 #CJK UNIFIED IDEOGRAPH
+ {0x895F, 0x96F2}, //733 #CJK UNIFIED IDEOGRAPH
+ {0x8960, 0x834F}, //734 #CJK UNIFIED IDEOGRAPH
+ {0x8961, 0x990C}, //735 #CJK UNIFIED IDEOGRAPH
+ {0x8962, 0x53E1}, //736 #CJK UNIFIED IDEOGRAPH
+ {0x8963, 0x55B6}, //737 #CJK UNIFIED IDEOGRAPH
+ {0x8964, 0x5B30}, //738 #CJK UNIFIED IDEOGRAPH
+ {0x8965, 0x5F71}, //739 #CJK UNIFIED IDEOGRAPH
+ {0x8966, 0x6620}, //740 #CJK UNIFIED IDEOGRAPH
+ {0x8967, 0x66F3}, //741 #CJK UNIFIED IDEOGRAPH
+ {0x8968, 0x6804}, //742 #CJK UNIFIED IDEOGRAPH
+ {0x8969, 0x6C38}, //743 #CJK UNIFIED IDEOGRAPH
+ {0x896A, 0x6CF3}, //744 #CJK UNIFIED IDEOGRAPH
+ {0x896B, 0x6D29}, //745 #CJK UNIFIED IDEOGRAPH
+ {0x896C, 0x745B}, //746 #CJK UNIFIED IDEOGRAPH
+ {0x896D, 0x76C8}, //747 #CJK UNIFIED IDEOGRAPH
+ {0x896E, 0x7A4E}, //748 #CJK UNIFIED IDEOGRAPH
+ {0x896F, 0x9834}, //749 #CJK UNIFIED IDEOGRAPH
+ {0x8970, 0x82F1}, //750 #CJK UNIFIED IDEOGRAPH
+ {0x8971, 0x885B}, //751 #CJK UNIFIED IDEOGRAPH
+ {0x8972, 0x8A60}, //752 #CJK UNIFIED IDEOGRAPH
+ {0x8973, 0x92ED}, //753 #CJK UNIFIED IDEOGRAPH
+ {0x8974, 0x6DB2}, //754 #CJK UNIFIED IDEOGRAPH
+ {0x8975, 0x75AB}, //755 #CJK UNIFIED IDEOGRAPH
+ {0x8976, 0x76CA}, //756 #CJK UNIFIED IDEOGRAPH
+ {0x8977, 0x99C5}, //757 #CJK UNIFIED IDEOGRAPH
+ {0x8978, 0x60A6}, //758 #CJK UNIFIED IDEOGRAPH
+ {0x8979, 0x8B01}, //759 #CJK UNIFIED IDEOGRAPH
+ {0x897A, 0x8D8A}, //760 #CJK UNIFIED IDEOGRAPH
+ {0x897B, 0x95B2}, //761 #CJK UNIFIED IDEOGRAPH
+ {0x897C, 0x698E}, //762 #CJK UNIFIED IDEOGRAPH
+ {0x897D, 0x53AD}, //763 #CJK UNIFIED IDEOGRAPH
+ {0x897E, 0x5186}, //764 #CJK UNIFIED IDEOGRAPH
+ {0x8980, 0x5712}, //765 #CJK UNIFIED IDEOGRAPH
+ {0x8981, 0x5830}, //766 #CJK UNIFIED IDEOGRAPH
+ {0x8982, 0x5944}, //767 #CJK UNIFIED IDEOGRAPH
+ {0x8983, 0x5BB4}, //768 #CJK UNIFIED IDEOGRAPH
+ {0x8984, 0x5EF6}, //769 #CJK UNIFIED IDEOGRAPH
+ {0x8985, 0x6028}, //770 #CJK UNIFIED IDEOGRAPH
+ {0x8986, 0x63A9}, //771 #CJK UNIFIED IDEOGRAPH
+ {0x8987, 0x63F4}, //772 #CJK UNIFIED IDEOGRAPH
+ {0x8988, 0x6CBF}, //773 #CJK UNIFIED IDEOGRAPH
+ {0x8989, 0x6F14}, //774 #CJK UNIFIED IDEOGRAPH
+ {0x898A, 0x708E}, //775 #CJK UNIFIED IDEOGRAPH
+ {0x898B, 0x7114}, //776 #CJK UNIFIED IDEOGRAPH
+ {0x898C, 0x7159}, //777 #CJK UNIFIED IDEOGRAPH
+ {0x898D, 0x71D5}, //778 #CJK UNIFIED IDEOGRAPH
+ {0x898E, 0x733F}, //779 #CJK UNIFIED IDEOGRAPH
+ {0x898F, 0x7E01}, //780 #CJK UNIFIED IDEOGRAPH
+ {0x8990, 0x8276}, //781 #CJK UNIFIED IDEOGRAPH
+ {0x8991, 0x82D1}, //782 #CJK UNIFIED IDEOGRAPH
+ {0x8992, 0x8597}, //783 #CJK UNIFIED IDEOGRAPH
+ {0x8993, 0x9060}, //784 #CJK UNIFIED IDEOGRAPH
+ {0x8994, 0x925B}, //785 #CJK UNIFIED IDEOGRAPH
+ {0x8995, 0x9D1B}, //786 #CJK UNIFIED IDEOGRAPH
+ {0x8996, 0x5869}, //787 #CJK UNIFIED IDEOGRAPH
+ {0x8997, 0x65BC}, //788 #CJK UNIFIED IDEOGRAPH
+ {0x8998, 0x6C5A}, //789 #CJK UNIFIED IDEOGRAPH
+ {0x8999, 0x7525}, //790 #CJK UNIFIED IDEOGRAPH
+ {0x899A, 0x51F9}, //791 #CJK UNIFIED IDEOGRAPH
+ {0x899B, 0x592E}, //792 #CJK UNIFIED IDEOGRAPH
+ {0x899C, 0x5965}, //793 #CJK UNIFIED IDEOGRAPH
+ {0x899D, 0x5F80}, //794 #CJK UNIFIED IDEOGRAPH
+ {0x899E, 0x5FDC}, //795 #CJK UNIFIED IDEOGRAPH
+ {0x899F, 0x62BC}, //796 #CJK UNIFIED IDEOGRAPH
+ {0x89A0, 0x65FA}, //797 #CJK UNIFIED IDEOGRAPH
+ {0x89A1, 0x6A2A}, //798 #CJK UNIFIED IDEOGRAPH
+ {0x89A2, 0x6B27}, //799 #CJK UNIFIED IDEOGRAPH
+ {0x89A3, 0x6BB4}, //800 #CJK UNIFIED IDEOGRAPH
+ {0x89A4, 0x738B}, //801 #CJK UNIFIED IDEOGRAPH
+ {0x89A5, 0x7FC1}, //802 #CJK UNIFIED IDEOGRAPH
+ {0x89A6, 0x8956}, //803 #CJK UNIFIED IDEOGRAPH
+ {0x89A7, 0x9D2C}, //804 #CJK UNIFIED IDEOGRAPH
+ {0x89A8, 0x9D0E}, //805 #CJK UNIFIED IDEOGRAPH
+ {0x89A9, 0x9EC4}, //806 #CJK UNIFIED IDEOGRAPH
+ {0x89AA, 0x5CA1}, //807 #CJK UNIFIED IDEOGRAPH
+ {0x89AB, 0x6C96}, //808 #CJK UNIFIED IDEOGRAPH
+ {0x89AC, 0x837B}, //809 #CJK UNIFIED IDEOGRAPH
+ {0x89AD, 0x5104}, //810 #CJK UNIFIED IDEOGRAPH
+ {0x89AE, 0x5C4B}, //811 #CJK UNIFIED IDEOGRAPH
+ {0x89AF, 0x61B6}, //812 #CJK UNIFIED IDEOGRAPH
+ {0x89B0, 0x81C6}, //813 #CJK UNIFIED IDEOGRAPH
+ {0x89B1, 0x6876}, //814 #CJK UNIFIED IDEOGRAPH
+ {0x89B2, 0x7261}, //815 #CJK UNIFIED IDEOGRAPH
+ {0x89B3, 0x4E59}, //816 #CJK UNIFIED IDEOGRAPH
+ {0x89B4, 0x4FFA}, //817 #CJK UNIFIED IDEOGRAPH
+ {0x89B5, 0x5378}, //818 #CJK UNIFIED IDEOGRAPH
+ {0x89B6, 0x6069}, //819 #CJK UNIFIED IDEOGRAPH
+ {0x89B7, 0x6E29}, //820 #CJK UNIFIED IDEOGRAPH
+ {0x89B8, 0x7A4F}, //821 #CJK UNIFIED IDEOGRAPH
+ {0x89B9, 0x97F3}, //822 #CJK UNIFIED IDEOGRAPH
+ {0x89BA, 0x4E0B}, //823 #CJK UNIFIED IDEOGRAPH
+ {0x89BB, 0x5316}, //824 #CJK UNIFIED IDEOGRAPH
+ {0x89BC, 0x4EEE}, //825 #CJK UNIFIED IDEOGRAPH
+ {0x89BD, 0x4F55}, //826 #CJK UNIFIED IDEOGRAPH
+ {0x89BE, 0x4F3D}, //827 #CJK UNIFIED IDEOGRAPH
+ {0x89BF, 0x4FA1}, //828 #CJK UNIFIED IDEOGRAPH
+ {0x89C0, 0x4F73}, //829 #CJK UNIFIED IDEOGRAPH
+ {0x89C1, 0x52A0}, //830 #CJK UNIFIED IDEOGRAPH
+ {0x89C2, 0x53EF}, //831 #CJK UNIFIED IDEOGRAPH
+ {0x89C3, 0x5609}, //832 #CJK UNIFIED IDEOGRAPH
+ {0x89C4, 0x590F}, //833 #CJK UNIFIED IDEOGRAPH
+ {0x89C5, 0x5AC1}, //834 #CJK UNIFIED IDEOGRAPH
+ {0x89C6, 0x5BB6}, //835 #CJK UNIFIED IDEOGRAPH
+ {0x89C7, 0x5BE1}, //836 #CJK UNIFIED IDEOGRAPH
+ {0x89C8, 0x79D1}, //837 #CJK UNIFIED IDEOGRAPH
+ {0x89C9, 0x6687}, //838 #CJK UNIFIED IDEOGRAPH
+ {0x89CA, 0x679C}, //839 #CJK UNIFIED IDEOGRAPH
+ {0x89CB, 0x67B6}, //840 #CJK UNIFIED IDEOGRAPH
+ {0x89CC, 0x6B4C}, //841 #CJK UNIFIED IDEOGRAPH
+ {0x89CD, 0x6CB3}, //842 #CJK UNIFIED IDEOGRAPH
+ {0x89CE, 0x706B}, //843 #CJK UNIFIED IDEOGRAPH
+ {0x89CF, 0x73C2}, //844 #CJK UNIFIED IDEOGRAPH
+ {0x89D0, 0x798D}, //845 #CJK UNIFIED IDEOGRAPH
+ {0x89D1, 0x79BE}, //846 #CJK UNIFIED IDEOGRAPH
+ {0x89D2, 0x7A3C}, //847 #CJK UNIFIED IDEOGRAPH
+ {0x89D3, 0x7B87}, //848 #CJK UNIFIED IDEOGRAPH
+ {0x89D4, 0x82B1}, //849 #CJK UNIFIED IDEOGRAPH
+ {0x89D5, 0x82DB}, //850 #CJK UNIFIED IDEOGRAPH
+ {0x89D6, 0x8304}, //851 #CJK UNIFIED IDEOGRAPH
+ {0x89D7, 0x8377}, //852 #CJK UNIFIED IDEOGRAPH
+ {0x89D8, 0x83EF}, //853 #CJK UNIFIED IDEOGRAPH
+ {0x89D9, 0x83D3}, //854 #CJK UNIFIED IDEOGRAPH
+ {0x89DA, 0x8766}, //855 #CJK UNIFIED IDEOGRAPH
+ {0x89DB, 0x8AB2}, //856 #CJK UNIFIED IDEOGRAPH
+ {0x89DC, 0x5629}, //857 #CJK UNIFIED IDEOGRAPH
+ {0x89DD, 0x8CA8}, //858 #CJK UNIFIED IDEOGRAPH
+ {0x89DE, 0x8FE6}, //859 #CJK UNIFIED IDEOGRAPH
+ {0x89DF, 0x904E}, //860 #CJK UNIFIED IDEOGRAPH
+ {0x89E0, 0x971E}, //861 #CJK UNIFIED IDEOGRAPH
+ {0x89E1, 0x868A}, //862 #CJK UNIFIED IDEOGRAPH
+ {0x89E2, 0x4FC4}, //863 #CJK UNIFIED IDEOGRAPH
+ {0x89E3, 0x5CE8}, //864 #CJK UNIFIED IDEOGRAPH
+ {0x89E4, 0x6211}, //865 #CJK UNIFIED IDEOGRAPH
+ {0x89E5, 0x7259}, //866 #CJK UNIFIED IDEOGRAPH
+ {0x89E6, 0x753B}, //867 #CJK UNIFIED IDEOGRAPH
+ {0x89E7, 0x81E5}, //868 #CJK UNIFIED IDEOGRAPH
+ {0x89E8, 0x82BD}, //869 #CJK UNIFIED IDEOGRAPH
+ {0x89E9, 0x86FE}, //870 #CJK UNIFIED IDEOGRAPH
+ {0x89EA, 0x8CC0}, //871 #CJK UNIFIED IDEOGRAPH
+ {0x89EB, 0x96C5}, //872 #CJK UNIFIED IDEOGRAPH
+ {0x89EC, 0x9913}, //873 #CJK UNIFIED IDEOGRAPH
+ {0x89ED, 0x99D5}, //874 #CJK UNIFIED IDEOGRAPH
+ {0x89EE, 0x4ECB}, //875 #CJK UNIFIED IDEOGRAPH
+ {0x89EF, 0x4F1A}, //876 #CJK UNIFIED IDEOGRAPH
+ {0x89F0, 0x89E3}, //877 #CJK UNIFIED IDEOGRAPH
+ {0x89F1, 0x56DE}, //878 #CJK UNIFIED IDEOGRAPH
+ {0x89F2, 0x584A}, //879 #CJK UNIFIED IDEOGRAPH
+ {0x89F3, 0x58CA}, //880 #CJK UNIFIED IDEOGRAPH
+ {0x89F4, 0x5EFB}, //881 #CJK UNIFIED IDEOGRAPH
+ {0x89F5, 0x5FEB}, //882 #CJK UNIFIED IDEOGRAPH
+ {0x89F6, 0x602A}, //883 #CJK UNIFIED IDEOGRAPH
+ {0x89F7, 0x6094}, //884 #CJK UNIFIED IDEOGRAPH
+ {0x89F8, 0x6062}, //885 #CJK UNIFIED IDEOGRAPH
+ {0x89F9, 0x61D0}, //886 #CJK UNIFIED IDEOGRAPH
+ {0x89FA, 0x6212}, //887 #CJK UNIFIED IDEOGRAPH
+ {0x89FB, 0x62D0}, //888 #CJK UNIFIED IDEOGRAPH
+ {0x89FC, 0x6539}, //889 #CJK UNIFIED IDEOGRAPH
+ {0x8A40, 0x9B41}, //890 #CJK UNIFIED IDEOGRAPH
+ {0x8A41, 0x6666}, //891 #CJK UNIFIED IDEOGRAPH
+ {0x8A42, 0x68B0}, //892 #CJK UNIFIED IDEOGRAPH
+ {0x8A43, 0x6D77}, //893 #CJK UNIFIED IDEOGRAPH
+ {0x8A44, 0x7070}, //894 #CJK UNIFIED IDEOGRAPH
+ {0x8A45, 0x754C}, //895 #CJK UNIFIED IDEOGRAPH
+ {0x8A46, 0x7686}, //896 #CJK UNIFIED IDEOGRAPH
+ {0x8A47, 0x7D75}, //897 #CJK UNIFIED IDEOGRAPH
+ {0x8A48, 0x82A5}, //898 #CJK UNIFIED IDEOGRAPH
+ {0x8A49, 0x87F9}, //899 #CJK UNIFIED IDEOGRAPH
+ {0x8A4A, 0x958B}, //900 #CJK UNIFIED IDEOGRAPH
+ {0x8A4B, 0x968E}, //901 #CJK UNIFIED IDEOGRAPH
+ {0x8A4C, 0x8C9D}, //902 #CJK UNIFIED IDEOGRAPH
+ {0x8A4D, 0x51F1}, //903 #CJK UNIFIED IDEOGRAPH
+ {0x8A4E, 0x52BE}, //904 #CJK UNIFIED IDEOGRAPH
+ {0x8A4F, 0x5916}, //905 #CJK UNIFIED IDEOGRAPH
+ {0x8A50, 0x54B3}, //906 #CJK UNIFIED IDEOGRAPH
+ {0x8A51, 0x5BB3}, //907 #CJK UNIFIED IDEOGRAPH
+ {0x8A52, 0x5D16}, //908 #CJK UNIFIED IDEOGRAPH
+ {0x8A53, 0x6168}, //909 #CJK UNIFIED IDEOGRAPH
+ {0x8A54, 0x6982}, //910 #CJK UNIFIED IDEOGRAPH
+ {0x8A55, 0x6DAF}, //911 #CJK UNIFIED IDEOGRAPH
+ {0x8A56, 0x788D}, //912 #CJK UNIFIED IDEOGRAPH
+ {0x8A57, 0x84CB}, //913 #CJK UNIFIED IDEOGRAPH
+ {0x8A58, 0x8857}, //914 #CJK UNIFIED IDEOGRAPH
+ {0x8A59, 0x8A72}, //915 #CJK UNIFIED IDEOGRAPH
+ {0x8A5A, 0x93A7}, //916 #CJK UNIFIED IDEOGRAPH
+ {0x8A5B, 0x9AB8}, //917 #CJK UNIFIED IDEOGRAPH
+ {0x8A5C, 0x6D6C}, //918 #CJK UNIFIED IDEOGRAPH
+ {0x8A5D, 0x99A8}, //919 #CJK UNIFIED IDEOGRAPH
+ {0x8A5E, 0x86D9}, //920 #CJK UNIFIED IDEOGRAPH
+ {0x8A5F, 0x57A3}, //921 #CJK UNIFIED IDEOGRAPH
+ {0x8A60, 0x67FF}, //922 #CJK UNIFIED IDEOGRAPH
+ {0x8A61, 0x86CE}, //923 #CJK UNIFIED IDEOGRAPH
+ {0x8A62, 0x920E}, //924 #CJK UNIFIED IDEOGRAPH
+ {0x8A63, 0x5283}, //925 #CJK UNIFIED IDEOGRAPH
+ {0x8A64, 0x5687}, //926 #CJK UNIFIED IDEOGRAPH
+ {0x8A65, 0x5404}, //927 #CJK UNIFIED IDEOGRAPH
+ {0x8A66, 0x5ED3}, //928 #CJK UNIFIED IDEOGRAPH
+ {0x8A67, 0x62E1}, //929 #CJK UNIFIED IDEOGRAPH
+ {0x8A68, 0x64B9}, //930 #CJK UNIFIED IDEOGRAPH
+ {0x8A69, 0x683C}, //931 #CJK UNIFIED IDEOGRAPH
+ {0x8A6A, 0x6838}, //932 #CJK UNIFIED IDEOGRAPH
+ {0x8A6B, 0x6BBB}, //933 #CJK UNIFIED IDEOGRAPH
+ {0x8A6C, 0x7372}, //934 #CJK UNIFIED IDEOGRAPH
+ {0x8A6D, 0x78BA}, //935 #CJK UNIFIED IDEOGRAPH
+ {0x8A6E, 0x7A6B}, //936 #CJK UNIFIED IDEOGRAPH
+ {0x8A6F, 0x899A}, //937 #CJK UNIFIED IDEOGRAPH
+ {0x8A70, 0x89D2}, //938 #CJK UNIFIED IDEOGRAPH
+ {0x8A71, 0x8D6B}, //939 #CJK UNIFIED IDEOGRAPH
+ {0x8A72, 0x8F03}, //940 #CJK UNIFIED IDEOGRAPH
+ {0x8A73, 0x90ED}, //941 #CJK UNIFIED IDEOGRAPH
+ {0x8A74, 0x95A3}, //942 #CJK UNIFIED IDEOGRAPH
+ {0x8A75, 0x9694}, //943 #CJK UNIFIED IDEOGRAPH
+ {0x8A76, 0x9769}, //944 #CJK UNIFIED IDEOGRAPH
+ {0x8A77, 0x5B66}, //945 #CJK UNIFIED IDEOGRAPH
+ {0x8A78, 0x5CB3}, //946 #CJK UNIFIED IDEOGRAPH
+ {0x8A79, 0x697D}, //947 #CJK UNIFIED IDEOGRAPH
+ {0x8A7A, 0x984D}, //948 #CJK UNIFIED IDEOGRAPH
+ {0x8A7B, 0x984E}, //949 #CJK UNIFIED IDEOGRAPH
+ {0x8A7C, 0x639B}, //950 #CJK UNIFIED IDEOGRAPH
+ {0x8A7D, 0x7B20}, //951 #CJK UNIFIED IDEOGRAPH
+ {0x8A7E, 0x6A2B}, //952 #CJK UNIFIED IDEOGRAPH
+ {0x8A80, 0x6A7F}, //953 #CJK UNIFIED IDEOGRAPH
+ {0x8A81, 0x68B6}, //954 #CJK UNIFIED IDEOGRAPH
+ {0x8A82, 0x9C0D}, //955 #CJK UNIFIED IDEOGRAPH
+ {0x8A83, 0x6F5F}, //956 #CJK UNIFIED IDEOGRAPH
+ {0x8A84, 0x5272}, //957 #CJK UNIFIED IDEOGRAPH
+ {0x8A85, 0x559D}, //958 #CJK UNIFIED IDEOGRAPH
+ {0x8A86, 0x6070}, //959 #CJK UNIFIED IDEOGRAPH
+ {0x8A87, 0x62EC}, //960 #CJK UNIFIED IDEOGRAPH
+ {0x8A88, 0x6D3B}, //961 #CJK UNIFIED IDEOGRAPH
+ {0x8A89, 0x6E07}, //962 #CJK UNIFIED IDEOGRAPH
+ {0x8A8A, 0x6ED1}, //963 #CJK UNIFIED IDEOGRAPH
+ {0x8A8B, 0x845B}, //964 #CJK UNIFIED IDEOGRAPH
+ {0x8A8C, 0x8910}, //965 #CJK UNIFIED IDEOGRAPH
+ {0x8A8D, 0x8F44}, //966 #CJK UNIFIED IDEOGRAPH
+ {0x8A8E, 0x4E14}, //967 #CJK UNIFIED IDEOGRAPH
+ {0x8A8F, 0x9C39}, //968 #CJK UNIFIED IDEOGRAPH
+ {0x8A90, 0x53F6}, //969 #CJK UNIFIED IDEOGRAPH
+ {0x8A91, 0x691B}, //970 #CJK UNIFIED IDEOGRAPH
+ {0x8A92, 0x6A3A}, //971 #CJK UNIFIED IDEOGRAPH
+ {0x8A93, 0x9784}, //972 #CJK UNIFIED IDEOGRAPH
+ {0x8A94, 0x682A}, //973 #CJK UNIFIED IDEOGRAPH
+ {0x8A95, 0x515C}, //974 #CJK UNIFIED IDEOGRAPH
+ {0x8A96, 0x7AC3}, //975 #CJK UNIFIED IDEOGRAPH
+ {0x8A97, 0x84B2}, //976 #CJK UNIFIED IDEOGRAPH
+ {0x8A98, 0x91DC}, //977 #CJK UNIFIED IDEOGRAPH
+ {0x8A99, 0x938C}, //978 #CJK UNIFIED IDEOGRAPH
+ {0x8A9A, 0x565B}, //979 #CJK UNIFIED IDEOGRAPH
+ {0x8A9B, 0x9D28}, //980 #CJK UNIFIED IDEOGRAPH
+ {0x8A9C, 0x6822}, //981 #CJK UNIFIED IDEOGRAPH
+ {0x8A9D, 0x8305}, //982 #CJK UNIFIED IDEOGRAPH
+ {0x8A9E, 0x8431}, //983 #CJK UNIFIED IDEOGRAPH
+ {0x8A9F, 0x7CA5}, //984 #CJK UNIFIED IDEOGRAPH
+ {0x8AA0, 0x5208}, //985 #CJK UNIFIED IDEOGRAPH
+ {0x8AA1, 0x82C5}, //986 #CJK UNIFIED IDEOGRAPH
+ {0x8AA2, 0x74E6}, //987 #CJK UNIFIED IDEOGRAPH
+ {0x8AA3, 0x4E7E}, //988 #CJK UNIFIED IDEOGRAPH
+ {0x8AA4, 0x4F83}, //989 #CJK UNIFIED IDEOGRAPH
+ {0x8AA5, 0x51A0}, //990 #CJK UNIFIED IDEOGRAPH
+ {0x8AA6, 0x5BD2}, //991 #CJK UNIFIED IDEOGRAPH
+ {0x8AA7, 0x520A}, //992 #CJK UNIFIED IDEOGRAPH
+ {0x8AA8, 0x52D8}, //993 #CJK UNIFIED IDEOGRAPH
+ {0x8AA9, 0x52E7}, //994 #CJK UNIFIED IDEOGRAPH
+ {0x8AAA, 0x5DFB}, //995 #CJK UNIFIED IDEOGRAPH
+ {0x8AAB, 0x559A}, //996 #CJK UNIFIED IDEOGRAPH
+ {0x8AAC, 0x582A}, //997 #CJK UNIFIED IDEOGRAPH
+ {0x8AAD, 0x59E6}, //998 #CJK UNIFIED IDEOGRAPH
+ {0x8AAE, 0x5B8C}, //999 #CJK UNIFIED IDEOGRAPH
+ {0x8AAF, 0x5B98}, //1000 #CJK UNIFIED IDEOGRAPH
+ {0x8AB0, 0x5BDB}, //1001 #CJK UNIFIED IDEOGRAPH
+ {0x8AB1, 0x5E72}, //1002 #CJK UNIFIED IDEOGRAPH
+ {0x8AB2, 0x5E79}, //1003 #CJK UNIFIED IDEOGRAPH
+ {0x8AB3, 0x60A3}, //1004 #CJK UNIFIED IDEOGRAPH
+ {0x8AB4, 0x611F}, //1005 #CJK UNIFIED IDEOGRAPH
+ {0x8AB5, 0x6163}, //1006 #CJK UNIFIED IDEOGRAPH
+ {0x8AB6, 0x61BE}, //1007 #CJK UNIFIED IDEOGRAPH
+ {0x8AB7, 0x63DB}, //1008 #CJK UNIFIED IDEOGRAPH
+ {0x8AB8, 0x6562}, //1009 #CJK UNIFIED IDEOGRAPH
+ {0x8AB9, 0x67D1}, //1010 #CJK UNIFIED IDEOGRAPH
+ {0x8ABA, 0x6853}, //1011 #CJK UNIFIED IDEOGRAPH
+ {0x8ABB, 0x68FA}, //1012 #CJK UNIFIED IDEOGRAPH
+ {0x8ABC, 0x6B3E}, //1013 #CJK UNIFIED IDEOGRAPH
+ {0x8ABD, 0x6B53}, //1014 #CJK UNIFIED IDEOGRAPH
+ {0x8ABE, 0x6C57}, //1015 #CJK UNIFIED IDEOGRAPH
+ {0x8ABF, 0x6F22}, //1016 #CJK UNIFIED IDEOGRAPH
+ {0x8AC0, 0x6F97}, //1017 #CJK UNIFIED IDEOGRAPH
+ {0x8AC1, 0x6F45}, //1018 #CJK UNIFIED IDEOGRAPH
+ {0x8AC2, 0x74B0}, //1019 #CJK UNIFIED IDEOGRAPH
+ {0x8AC3, 0x7518}, //1020 #CJK UNIFIED IDEOGRAPH
+ {0x8AC4, 0x76E3}, //1021 #CJK UNIFIED IDEOGRAPH
+ {0x8AC5, 0x770B}, //1022 #CJK UNIFIED IDEOGRAPH
+ {0x8AC6, 0x7AFF}, //1023 #CJK UNIFIED IDEOGRAPH
+ {0x8AC7, 0x7BA1}, //1024 #CJK UNIFIED IDEOGRAPH
+ {0x8AC8, 0x7C21}, //1025 #CJK UNIFIED IDEOGRAPH
+ {0x8AC9, 0x7DE9}, //1026 #CJK UNIFIED IDEOGRAPH
+ {0x8ACA, 0x7F36}, //1027 #CJK UNIFIED IDEOGRAPH
+ {0x8ACB, 0x7FF0}, //1028 #CJK UNIFIED IDEOGRAPH
+ {0x8ACC, 0x809D}, //1029 #CJK UNIFIED IDEOGRAPH
+ {0x8ACD, 0x8266}, //1030 #CJK UNIFIED IDEOGRAPH
+ {0x8ACE, 0x839E}, //1031 #CJK UNIFIED IDEOGRAPH
+ {0x8ACF, 0x89B3}, //1032 #CJK UNIFIED IDEOGRAPH
+ {0x8AD0, 0x8ACC}, //1033 #CJK UNIFIED IDEOGRAPH
+ {0x8AD1, 0x8CAB}, //1034 #CJK UNIFIED IDEOGRAPH
+ {0x8AD2, 0x9084}, //1035 #CJK UNIFIED IDEOGRAPH
+ {0x8AD3, 0x9451}, //1036 #CJK UNIFIED IDEOGRAPH
+ {0x8AD4, 0x9593}, //1037 #CJK UNIFIED IDEOGRAPH
+ {0x8AD5, 0x9591}, //1038 #CJK UNIFIED IDEOGRAPH
+ {0x8AD6, 0x95A2}, //1039 #CJK UNIFIED IDEOGRAPH
+ {0x8AD7, 0x9665}, //1040 #CJK UNIFIED IDEOGRAPH
+ {0x8AD8, 0x97D3}, //1041 #CJK UNIFIED IDEOGRAPH
+ {0x8AD9, 0x9928}, //1042 #CJK UNIFIED IDEOGRAPH
+ {0x8ADA, 0x8218}, //1043 #CJK UNIFIED IDEOGRAPH
+ {0x8ADB, 0x4E38}, //1044 #CJK UNIFIED IDEOGRAPH
+ {0x8ADC, 0x542B}, //1045 #CJK UNIFIED IDEOGRAPH
+ {0x8ADD, 0x5CB8}, //1046 #CJK UNIFIED IDEOGRAPH
+ {0x8ADE, 0x5DCC}, //1047 #CJK UNIFIED IDEOGRAPH
+ {0x8ADF, 0x73A9}, //1048 #CJK UNIFIED IDEOGRAPH
+ {0x8AE0, 0x764C}, //1049 #CJK UNIFIED IDEOGRAPH
+ {0x8AE1, 0x773C}, //1050 #CJK UNIFIED IDEOGRAPH
+ {0x8AE2, 0x5CA9}, //1051 #CJK UNIFIED IDEOGRAPH
+ {0x8AE3, 0x7FEB}, //1052 #CJK UNIFIED IDEOGRAPH
+ {0x8AE4, 0x8D0B}, //1053 #CJK UNIFIED IDEOGRAPH
+ {0x8AE5, 0x96C1}, //1054 #CJK UNIFIED IDEOGRAPH
+ {0x8AE6, 0x9811}, //1055 #CJK UNIFIED IDEOGRAPH
+ {0x8AE7, 0x9854}, //1056 #CJK UNIFIED IDEOGRAPH
+ {0x8AE8, 0x9858}, //1057 #CJK UNIFIED IDEOGRAPH
+ {0x8AE9, 0x4F01}, //1058 #CJK UNIFIED IDEOGRAPH
+ {0x8AEA, 0x4F0E}, //1059 #CJK UNIFIED IDEOGRAPH
+ {0x8AEB, 0x5371}, //1060 #CJK UNIFIED IDEOGRAPH
+ {0x8AEC, 0x559C}, //1061 #CJK UNIFIED IDEOGRAPH
+ {0x8AED, 0x5668}, //1062 #CJK UNIFIED IDEOGRAPH
+ {0x8AEE, 0x57FA}, //1063 #CJK UNIFIED IDEOGRAPH
+ {0x8AEF, 0x5947}, //1064 #CJK UNIFIED IDEOGRAPH
+ {0x8AF0, 0x5B09}, //1065 #CJK UNIFIED IDEOGRAPH
+ {0x8AF1, 0x5BC4}, //1066 #CJK UNIFIED IDEOGRAPH
+ {0x8AF2, 0x5C90}, //1067 #CJK UNIFIED IDEOGRAPH
+ {0x8AF3, 0x5E0C}, //1068 #CJK UNIFIED IDEOGRAPH
+ {0x8AF4, 0x5E7E}, //1069 #CJK UNIFIED IDEOGRAPH
+ {0x8AF5, 0x5FCC}, //1070 #CJK UNIFIED IDEOGRAPH
+ {0x8AF6, 0x63EE}, //1071 #CJK UNIFIED IDEOGRAPH
+ {0x8AF7, 0x673A}, //1072 #CJK UNIFIED IDEOGRAPH
+ {0x8AF8, 0x65D7}, //1073 #CJK UNIFIED IDEOGRAPH
+ {0x8AF9, 0x65E2}, //1074 #CJK UNIFIED IDEOGRAPH
+ {0x8AFA, 0x671F}, //1075 #CJK UNIFIED IDEOGRAPH
+ {0x8AFB, 0x68CB}, //1076 #CJK UNIFIED IDEOGRAPH
+ {0x8AFC, 0x68C4}, //1077 #CJK UNIFIED IDEOGRAPH
+ {0x8B40, 0x6A5F}, //1078 #CJK UNIFIED IDEOGRAPH
+ {0x8B41, 0x5E30}, //1079 #CJK UNIFIED IDEOGRAPH
+ {0x8B42, 0x6BC5}, //1080 #CJK UNIFIED IDEOGRAPH
+ {0x8B43, 0x6C17}, //1081 #CJK UNIFIED IDEOGRAPH
+ {0x8B44, 0x6C7D}, //1082 #CJK UNIFIED IDEOGRAPH
+ {0x8B45, 0x757F}, //1083 #CJK UNIFIED IDEOGRAPH
+ {0x8B46, 0x7948}, //1084 #CJK UNIFIED IDEOGRAPH
+ {0x8B47, 0x5B63}, //1085 #CJK UNIFIED IDEOGRAPH
+ {0x8B48, 0x7A00}, //1086 #CJK UNIFIED IDEOGRAPH
+ {0x8B49, 0x7D00}, //1087 #CJK UNIFIED IDEOGRAPH
+ {0x8B4A, 0x5FBD}, //1088 #CJK UNIFIED IDEOGRAPH
+ {0x8B4B, 0x898F}, //1089 #CJK UNIFIED IDEOGRAPH
+ {0x8B4C, 0x8A18}, //1090 #CJK UNIFIED IDEOGRAPH
+ {0x8B4D, 0x8CB4}, //1091 #CJK UNIFIED IDEOGRAPH
+ {0x8B4E, 0x8D77}, //1092 #CJK UNIFIED IDEOGRAPH
+ {0x8B4F, 0x8ECC}, //1093 #CJK UNIFIED IDEOGRAPH
+ {0x8B50, 0x8F1D}, //1094 #CJK UNIFIED IDEOGRAPH
+ {0x8B51, 0x98E2}, //1095 #CJK UNIFIED IDEOGRAPH
+ {0x8B52, 0x9A0E}, //1096 #CJK UNIFIED IDEOGRAPH
+ {0x8B53, 0x9B3C}, //1097 #CJK UNIFIED IDEOGRAPH
+ {0x8B54, 0x4E80}, //1098 #CJK UNIFIED IDEOGRAPH
+ {0x8B55, 0x507D}, //1099 #CJK UNIFIED IDEOGRAPH
+ {0x8B56, 0x5100}, //1100 #CJK UNIFIED IDEOGRAPH
+ {0x8B57, 0x5993}, //1101 #CJK UNIFIED IDEOGRAPH
+ {0x8B58, 0x5B9C}, //1102 #CJK UNIFIED IDEOGRAPH
+ {0x8B59, 0x622F}, //1103 #CJK UNIFIED IDEOGRAPH
+ {0x8B5A, 0x6280}, //1104 #CJK UNIFIED IDEOGRAPH
+ {0x8B5B, 0x64EC}, //1105 #CJK UNIFIED IDEOGRAPH
+ {0x8B5C, 0x6B3A}, //1106 #CJK UNIFIED IDEOGRAPH
+ {0x8B5D, 0x72A0}, //1107 #CJK UNIFIED IDEOGRAPH
+ {0x8B5E, 0x7591}, //1108 #CJK UNIFIED IDEOGRAPH
+ {0x8B5F, 0x7947}, //1109 #CJK UNIFIED IDEOGRAPH
+ {0x8B60, 0x7FA9}, //1110 #CJK UNIFIED IDEOGRAPH
+ {0x8B61, 0x87FB}, //1111 #CJK UNIFIED IDEOGRAPH
+ {0x8B62, 0x8ABC}, //1112 #CJK UNIFIED IDEOGRAPH
+ {0x8B63, 0x8B70}, //1113 #CJK UNIFIED IDEOGRAPH
+ {0x8B64, 0x63AC}, //1114 #CJK UNIFIED IDEOGRAPH
+ {0x8B65, 0x83CA}, //1115 #CJK UNIFIED IDEOGRAPH
+ {0x8B66, 0x97A0}, //1116 #CJK UNIFIED IDEOGRAPH
+ {0x8B67, 0x5409}, //1117 #CJK UNIFIED IDEOGRAPH
+ {0x8B68, 0x5403}, //1118 #CJK UNIFIED IDEOGRAPH
+ {0x8B69, 0x55AB}, //1119 #CJK UNIFIED IDEOGRAPH
+ {0x8B6A, 0x6854}, //1120 #CJK UNIFIED IDEOGRAPH
+ {0x8B6B, 0x6A58}, //1121 #CJK UNIFIED IDEOGRAPH
+ {0x8B6C, 0x8A70}, //1122 #CJK UNIFIED IDEOGRAPH
+ {0x8B6D, 0x7827}, //1123 #CJK UNIFIED IDEOGRAPH
+ {0x8B6E, 0x6775}, //1124 #CJK UNIFIED IDEOGRAPH
+ {0x8B6F, 0x9ECD}, //1125 #CJK UNIFIED IDEOGRAPH
+ {0x8B70, 0x5374}, //1126 #CJK UNIFIED IDEOGRAPH
+ {0x8B71, 0x5BA2}, //1127 #CJK UNIFIED IDEOGRAPH
+ {0x8B72, 0x811A}, //1128 #CJK UNIFIED IDEOGRAPH
+ {0x8B73, 0x8650}, //1129 #CJK UNIFIED IDEOGRAPH
+ {0x8B74, 0x9006}, //1130 #CJK UNIFIED IDEOGRAPH
+ {0x8B75, 0x4E18}, //1131 #CJK UNIFIED IDEOGRAPH
+ {0x8B76, 0x4E45}, //1132 #CJK UNIFIED IDEOGRAPH
+ {0x8B77, 0x4EC7}, //1133 #CJK UNIFIED IDEOGRAPH
+ {0x8B78, 0x4F11}, //1134 #CJK UNIFIED IDEOGRAPH
+ {0x8B79, 0x53CA}, //1135 #CJK UNIFIED IDEOGRAPH
+ {0x8B7A, 0x5438}, //1136 #CJK UNIFIED IDEOGRAPH
+ {0x8B7B, 0x5BAE}, //1137 #CJK UNIFIED IDEOGRAPH
+ {0x8B7C, 0x5F13}, //1138 #CJK UNIFIED IDEOGRAPH
+ {0x8B7D, 0x6025}, //1139 #CJK UNIFIED IDEOGRAPH
+ {0x8B7E, 0x6551}, //1140 #CJK UNIFIED IDEOGRAPH
+ {0x8B80, 0x673D}, //1141 #CJK UNIFIED IDEOGRAPH
+ {0x8B81, 0x6C42}, //1142 #CJK UNIFIED IDEOGRAPH
+ {0x8B82, 0x6C72}, //1143 #CJK UNIFIED IDEOGRAPH
+ {0x8B83, 0x6CE3}, //1144 #CJK UNIFIED IDEOGRAPH
+ {0x8B84, 0x7078}, //1145 #CJK UNIFIED IDEOGRAPH
+ {0x8B85, 0x7403}, //1146 #CJK UNIFIED IDEOGRAPH
+ {0x8B86, 0x7A76}, //1147 #CJK UNIFIED IDEOGRAPH
+ {0x8B87, 0x7AAE}, //1148 #CJK UNIFIED IDEOGRAPH
+ {0x8B88, 0x7B08}, //1149 #CJK UNIFIED IDEOGRAPH
+ {0x8B89, 0x7D1A}, //1150 #CJK UNIFIED IDEOGRAPH
+ {0x8B8A, 0x7CFE}, //1151 #CJK UNIFIED IDEOGRAPH
+ {0x8B8B, 0x7D66}, //1152 #CJK UNIFIED IDEOGRAPH
+ {0x8B8C, 0x65E7}, //1153 #CJK UNIFIED IDEOGRAPH
+ {0x8B8D, 0x725B}, //1154 #CJK UNIFIED IDEOGRAPH
+ {0x8B8E, 0x53BB}, //1155 #CJK UNIFIED IDEOGRAPH
+ {0x8B8F, 0x5C45}, //1156 #CJK UNIFIED IDEOGRAPH
+ {0x8B90, 0x5DE8}, //1157 #CJK UNIFIED IDEOGRAPH
+ {0x8B91, 0x62D2}, //1158 #CJK UNIFIED IDEOGRAPH
+ {0x8B92, 0x62E0}, //1159 #CJK UNIFIED IDEOGRAPH
+ {0x8B93, 0x6319}, //1160 #CJK UNIFIED IDEOGRAPH
+ {0x8B94, 0x6E20}, //1161 #CJK UNIFIED IDEOGRAPH
+ {0x8B95, 0x865A}, //1162 #CJK UNIFIED IDEOGRAPH
+ {0x8B96, 0x8A31}, //1163 #CJK UNIFIED IDEOGRAPH
+ {0x8B97, 0x8DDD}, //1164 #CJK UNIFIED IDEOGRAPH
+ {0x8B98, 0x92F8}, //1165 #CJK UNIFIED IDEOGRAPH
+ {0x8B99, 0x6F01}, //1166 #CJK UNIFIED IDEOGRAPH
+ {0x8B9A, 0x79A6}, //1167 #CJK UNIFIED IDEOGRAPH
+ {0x8B9B, 0x9B5A}, //1168 #CJK UNIFIED IDEOGRAPH
+ {0x8B9C, 0x4EA8}, //1169 #CJK UNIFIED IDEOGRAPH
+ {0x8B9D, 0x4EAB}, //1170 #CJK UNIFIED IDEOGRAPH
+ {0x8B9E, 0x4EAC}, //1171 #CJK UNIFIED IDEOGRAPH
+ {0x8B9F, 0x4F9B}, //1172 #CJK UNIFIED IDEOGRAPH
+ {0x8BA0, 0x4FA0}, //1173 #CJK UNIFIED IDEOGRAPH
+ {0x8BA1, 0x50D1}, //1174 #CJK UNIFIED IDEOGRAPH
+ {0x8BA2, 0x5147}, //1175 #CJK UNIFIED IDEOGRAPH
+ {0x8BA3, 0x7AF6}, //1176 #CJK UNIFIED IDEOGRAPH
+ {0x8BA4, 0x5171}, //1177 #CJK UNIFIED IDEOGRAPH
+ {0x8BA5, 0x51F6}, //1178 #CJK UNIFIED IDEOGRAPH
+ {0x8BA6, 0x5354}, //1179 #CJK UNIFIED IDEOGRAPH
+ {0x8BA7, 0x5321}, //1180 #CJK UNIFIED IDEOGRAPH
+ {0x8BA8, 0x537F}, //1181 #CJK UNIFIED IDEOGRAPH
+ {0x8BA9, 0x53EB}, //1182 #CJK UNIFIED IDEOGRAPH
+ {0x8BAA, 0x55AC}, //1183 #CJK UNIFIED IDEOGRAPH
+ {0x8BAB, 0x5883}, //1184 #CJK UNIFIED IDEOGRAPH
+ {0x8BAC, 0x5CE1}, //1185 #CJK UNIFIED IDEOGRAPH
+ {0x8BAD, 0x5F37}, //1186 #CJK UNIFIED IDEOGRAPH
+ {0x8BAE, 0x5F4A}, //1187 #CJK UNIFIED IDEOGRAPH
+ {0x8BAF, 0x602F}, //1188 #CJK UNIFIED IDEOGRAPH
+ {0x8BB0, 0x6050}, //1189 #CJK UNIFIED IDEOGRAPH
+ {0x8BB1, 0x606D}, //1190 #CJK UNIFIED IDEOGRAPH
+ {0x8BB2, 0x631F}, //1191 #CJK UNIFIED IDEOGRAPH
+ {0x8BB3, 0x6559}, //1192 #CJK UNIFIED IDEOGRAPH
+ {0x8BB4, 0x6A4B}, //1193 #CJK UNIFIED IDEOGRAPH
+ {0x8BB5, 0x6CC1}, //1194 #CJK UNIFIED IDEOGRAPH
+ {0x8BB6, 0x72C2}, //1195 #CJK UNIFIED IDEOGRAPH
+ {0x8BB7, 0x72ED}, //1196 #CJK UNIFIED IDEOGRAPH
+ {0x8BB8, 0x77EF}, //1197 #CJK UNIFIED IDEOGRAPH
+ {0x8BB9, 0x80F8}, //1198 #CJK UNIFIED IDEOGRAPH
+ {0x8BBA, 0x8105}, //1199 #CJK UNIFIED IDEOGRAPH
+ {0x8BBB, 0x8208}, //1200 #CJK UNIFIED IDEOGRAPH
+ {0x8BBC, 0x854E}, //1201 #CJK UNIFIED IDEOGRAPH
+ {0x8BBD, 0x90F7}, //1202 #CJK UNIFIED IDEOGRAPH
+ {0x8BBE, 0x93E1}, //1203 #CJK UNIFIED IDEOGRAPH
+ {0x8BBF, 0x97FF}, //1204 #CJK UNIFIED IDEOGRAPH
+ {0x8BC0, 0x9957}, //1205 #CJK UNIFIED IDEOGRAPH
+ {0x8BC1, 0x9A5A}, //1206 #CJK UNIFIED IDEOGRAPH
+ {0x8BC2, 0x4EF0}, //1207 #CJK UNIFIED IDEOGRAPH
+ {0x8BC3, 0x51DD}, //1208 #CJK UNIFIED IDEOGRAPH
+ {0x8BC4, 0x5C2D}, //1209 #CJK UNIFIED IDEOGRAPH
+ {0x8BC5, 0x6681}, //1210 #CJK UNIFIED IDEOGRAPH
+ {0x8BC6, 0x696D}, //1211 #CJK UNIFIED IDEOGRAPH
+ {0x8BC7, 0x5C40}, //1212 #CJK UNIFIED IDEOGRAPH
+ {0x8BC8, 0x66F2}, //1213 #CJK UNIFIED IDEOGRAPH
+ {0x8BC9, 0x6975}, //1214 #CJK UNIFIED IDEOGRAPH
+ {0x8BCA, 0x7389}, //1215 #CJK UNIFIED IDEOGRAPH
+ {0x8BCB, 0x6850}, //1216 #CJK UNIFIED IDEOGRAPH
+ {0x8BCC, 0x7C81}, //1217 #CJK UNIFIED IDEOGRAPH
+ {0x8BCD, 0x50C5}, //1218 #CJK UNIFIED IDEOGRAPH
+ {0x8BCE, 0x52E4}, //1219 #CJK UNIFIED IDEOGRAPH
+ {0x8BCF, 0x5747}, //1220 #CJK UNIFIED IDEOGRAPH
+ {0x8BD0, 0x5DFE}, //1221 #CJK UNIFIED IDEOGRAPH
+ {0x8BD1, 0x9326}, //1222 #CJK UNIFIED IDEOGRAPH
+ {0x8BD2, 0x65A4}, //1223 #CJK UNIFIED IDEOGRAPH
+ {0x8BD3, 0x6B23}, //1224 #CJK UNIFIED IDEOGRAPH
+ {0x8BD4, 0x6B3D}, //1225 #CJK UNIFIED IDEOGRAPH
+ {0x8BD5, 0x7434}, //1226 #CJK UNIFIED IDEOGRAPH
+ {0x8BD6, 0x7981}, //1227 #CJK UNIFIED IDEOGRAPH
+ {0x8BD7, 0x79BD}, //1228 #CJK UNIFIED IDEOGRAPH
+ {0x8BD8, 0x7B4B}, //1229 #CJK UNIFIED IDEOGRAPH
+ {0x8BD9, 0x7DCA}, //1230 #CJK UNIFIED IDEOGRAPH
+ {0x8BDA, 0x82B9}, //1231 #CJK UNIFIED IDEOGRAPH
+ {0x8BDB, 0x83CC}, //1232 #CJK UNIFIED IDEOGRAPH
+ {0x8BDC, 0x887F}, //1233 #CJK UNIFIED IDEOGRAPH
+ {0x8BDD, 0x895F}, //1234 #CJK UNIFIED IDEOGRAPH
+ {0x8BDE, 0x8B39}, //1235 #CJK UNIFIED IDEOGRAPH
+ {0x8BDF, 0x8FD1}, //1236 #CJK UNIFIED IDEOGRAPH
+ {0x8BE0, 0x91D1}, //1237 #CJK UNIFIED IDEOGRAPH
+ {0x8BE1, 0x541F}, //1238 #CJK UNIFIED IDEOGRAPH
+ {0x8BE2, 0x9280}, //1239 #CJK UNIFIED IDEOGRAPH
+ {0x8BE3, 0x4E5D}, //1240 #CJK UNIFIED IDEOGRAPH
+ {0x8BE4, 0x5036}, //1241 #CJK UNIFIED IDEOGRAPH
+ {0x8BE5, 0x53E5}, //1242 #CJK UNIFIED IDEOGRAPH
+ {0x8BE6, 0x533A}, //1243 #CJK UNIFIED IDEOGRAPH
+ {0x8BE7, 0x72D7}, //1244 #CJK UNIFIED IDEOGRAPH
+ {0x8BE8, 0x7396}, //1245 #CJK UNIFIED IDEOGRAPH
+ {0x8BE9, 0x77E9}, //1246 #CJK UNIFIED IDEOGRAPH
+ {0x8BEA, 0x82E6}, //1247 #CJK UNIFIED IDEOGRAPH
+ {0x8BEB, 0x8EAF}, //1248 #CJK UNIFIED IDEOGRAPH
+ {0x8BEC, 0x99C6}, //1249 #CJK UNIFIED IDEOGRAPH
+ {0x8BED, 0x99C8}, //1250 #CJK UNIFIED IDEOGRAPH
+ {0x8BEE, 0x99D2}, //1251 #CJK UNIFIED IDEOGRAPH
+ {0x8BEF, 0x5177}, //1252 #CJK UNIFIED IDEOGRAPH
+ {0x8BF0, 0x611A}, //1253 #CJK UNIFIED IDEOGRAPH
+ {0x8BF1, 0x865E}, //1254 #CJK UNIFIED IDEOGRAPH
+ {0x8BF2, 0x55B0}, //1255 #CJK UNIFIED IDEOGRAPH
+ {0x8BF3, 0x7A7A}, //1256 #CJK UNIFIED IDEOGRAPH
+ {0x8BF4, 0x5076}, //1257 #CJK UNIFIED IDEOGRAPH
+ {0x8BF5, 0x5BD3}, //1258 #CJK UNIFIED IDEOGRAPH
+ {0x8BF6, 0x9047}, //1259 #CJK UNIFIED IDEOGRAPH
+ {0x8BF7, 0x9685}, //1260 #CJK UNIFIED IDEOGRAPH
+ {0x8BF8, 0x4E32}, //1261 #CJK UNIFIED IDEOGRAPH
+ {0x8BF9, 0x6ADB}, //1262 #CJK UNIFIED IDEOGRAPH
+ {0x8BFA, 0x91E7}, //1263 #CJK UNIFIED IDEOGRAPH
+ {0x8BFB, 0x5C51}, //1264 #CJK UNIFIED IDEOGRAPH
+ {0x8BFC, 0x5C48}, //1265 #CJK UNIFIED IDEOGRAPH
+ {0x8C40, 0x6398}, //1266 #CJK UNIFIED IDEOGRAPH
+ {0x8C41, 0x7A9F}, //1267 #CJK UNIFIED IDEOGRAPH
+ {0x8C42, 0x6C93}, //1268 #CJK UNIFIED IDEOGRAPH
+ {0x8C43, 0x9774}, //1269 #CJK UNIFIED IDEOGRAPH
+ {0x8C44, 0x8F61}, //1270 #CJK UNIFIED IDEOGRAPH
+ {0x8C45, 0x7AAA}, //1271 #CJK UNIFIED IDEOGRAPH
+ {0x8C46, 0x718A}, //1272 #CJK UNIFIED IDEOGRAPH
+ {0x8C47, 0x9688}, //1273 #CJK UNIFIED IDEOGRAPH
+ {0x8C48, 0x7C82}, //1274 #CJK UNIFIED IDEOGRAPH
+ {0x8C49, 0x6817}, //1275 #CJK UNIFIED IDEOGRAPH
+ {0x8C4A, 0x7E70}, //1276 #CJK UNIFIED IDEOGRAPH
+ {0x8C4B, 0x6851}, //1277 #CJK UNIFIED IDEOGRAPH
+ {0x8C4C, 0x936C}, //1278 #CJK UNIFIED IDEOGRAPH
+ {0x8C4D, 0x52F2}, //1279 #CJK UNIFIED IDEOGRAPH
+ {0x8C4E, 0x541B}, //1280 #CJK UNIFIED IDEOGRAPH
+ {0x8C4F, 0x85AB}, //1281 #CJK UNIFIED IDEOGRAPH
+ {0x8C50, 0x8A13}, //1282 #CJK UNIFIED IDEOGRAPH
+ {0x8C51, 0x7FA4}, //1283 #CJK UNIFIED IDEOGRAPH
+ {0x8C52, 0x8ECD}, //1284 #CJK UNIFIED IDEOGRAPH
+ {0x8C53, 0x90E1}, //1285 #CJK UNIFIED IDEOGRAPH
+ {0x8C54, 0x5366}, //1286 #CJK UNIFIED IDEOGRAPH
+ {0x8C55, 0x8888}, //1287 #CJK UNIFIED IDEOGRAPH
+ {0x8C56, 0x7941}, //1288 #CJK UNIFIED IDEOGRAPH
+ {0x8C57, 0x4FC2}, //1289 #CJK UNIFIED IDEOGRAPH
+ {0x8C58, 0x50BE}, //1290 #CJK UNIFIED IDEOGRAPH
+ {0x8C59, 0x5211}, //1291 #CJK UNIFIED IDEOGRAPH
+ {0x8C5A, 0x5144}, //1292 #CJK UNIFIED IDEOGRAPH
+ {0x8C5B, 0x5553}, //1293 #CJK UNIFIED IDEOGRAPH
+ {0x8C5C, 0x572D}, //1294 #CJK UNIFIED IDEOGRAPH
+ {0x8C5D, 0x73EA}, //1295 #CJK UNIFIED IDEOGRAPH
+ {0x8C5E, 0x578B}, //1296 #CJK UNIFIED IDEOGRAPH
+ {0x8C5F, 0x5951}, //1297 #CJK UNIFIED IDEOGRAPH
+ {0x8C60, 0x5F62}, //1298 #CJK UNIFIED IDEOGRAPH
+ {0x8C61, 0x5F84}, //1299 #CJK UNIFIED IDEOGRAPH
+ {0x8C62, 0x6075}, //1300 #CJK UNIFIED IDEOGRAPH
+ {0x8C63, 0x6176}, //1301 #CJK UNIFIED IDEOGRAPH
+ {0x8C64, 0x6167}, //1302 #CJK UNIFIED IDEOGRAPH
+ {0x8C65, 0x61A9}, //1303 #CJK UNIFIED IDEOGRAPH
+ {0x8C66, 0x63B2}, //1304 #CJK UNIFIED IDEOGRAPH
+ {0x8C67, 0x643A}, //1305 #CJK UNIFIED IDEOGRAPH
+ {0x8C68, 0x656C}, //1306 #CJK UNIFIED IDEOGRAPH
+ {0x8C69, 0x666F}, //1307 #CJK UNIFIED IDEOGRAPH
+ {0x8C6A, 0x6842}, //1308 #CJK UNIFIED IDEOGRAPH
+ {0x8C6B, 0x6E13}, //1309 #CJK UNIFIED IDEOGRAPH
+ {0x8C6C, 0x7566}, //1310 #CJK UNIFIED IDEOGRAPH
+ {0x8C6D, 0x7A3D}, //1311 #CJK UNIFIED IDEOGRAPH
+ {0x8C6E, 0x7CFB}, //1312 #CJK UNIFIED IDEOGRAPH
+ {0x8C6F, 0x7D4C}, //1313 #CJK UNIFIED IDEOGRAPH
+ {0x8C70, 0x7D99}, //1314 #CJK UNIFIED IDEOGRAPH
+ {0x8C71, 0x7E4B}, //1315 #CJK UNIFIED IDEOGRAPH
+ {0x8C72, 0x7F6B}, //1316 #CJK UNIFIED IDEOGRAPH
+ {0x8C73, 0x830E}, //1317 #CJK UNIFIED IDEOGRAPH
+ {0x8C74, 0x834A}, //1318 #CJK UNIFIED IDEOGRAPH
+ {0x8C75, 0x86CD}, //1319 #CJK UNIFIED IDEOGRAPH
+ {0x8C76, 0x8A08}, //1320 #CJK UNIFIED IDEOGRAPH
+ {0x8C77, 0x8A63}, //1321 #CJK UNIFIED IDEOGRAPH
+ {0x8C78, 0x8B66}, //1322 #CJK UNIFIED IDEOGRAPH
+ {0x8C79, 0x8EFD}, //1323 #CJK UNIFIED IDEOGRAPH
+ {0x8C7A, 0x981A}, //1324 #CJK UNIFIED IDEOGRAPH
+ {0x8C7B, 0x9D8F}, //1325 #CJK UNIFIED IDEOGRAPH
+ {0x8C7C, 0x82B8}, //1326 #CJK UNIFIED IDEOGRAPH
+ {0x8C7D, 0x8FCE}, //1327 #CJK UNIFIED IDEOGRAPH
+ {0x8C7E, 0x9BE8}, //1328 #CJK UNIFIED IDEOGRAPH
+ {0x8C80, 0x5287}, //1329 #CJK UNIFIED IDEOGRAPH
+ {0x8C81, 0x621F}, //1330 #CJK UNIFIED IDEOGRAPH
+ {0x8C82, 0x6483}, //1331 #CJK UNIFIED IDEOGRAPH
+ {0x8C83, 0x6FC0}, //1332 #CJK UNIFIED IDEOGRAPH
+ {0x8C84, 0x9699}, //1333 #CJK UNIFIED IDEOGRAPH
+ {0x8C85, 0x6841}, //1334 #CJK UNIFIED IDEOGRAPH
+ {0x8C86, 0x5091}, //1335 #CJK UNIFIED IDEOGRAPH
+ {0x8C87, 0x6B20}, //1336 #CJK UNIFIED IDEOGRAPH
+ {0x8C88, 0x6C7A}, //1337 #CJK UNIFIED IDEOGRAPH
+ {0x8C89, 0x6F54}, //1338 #CJK UNIFIED IDEOGRAPH
+ {0x8C8A, 0x7A74}, //1339 #CJK UNIFIED IDEOGRAPH
+ {0x8C8B, 0x7D50}, //1340 #CJK UNIFIED IDEOGRAPH
+ {0x8C8C, 0x8840}, //1341 #CJK UNIFIED IDEOGRAPH
+ {0x8C8D, 0x8A23}, //1342 #CJK UNIFIED IDEOGRAPH
+ {0x8C8E, 0x6708}, //1343 #CJK UNIFIED IDEOGRAPH
+ {0x8C8F, 0x4EF6}, //1344 #CJK UNIFIED IDEOGRAPH
+ {0x8C90, 0x5039}, //1345 #CJK UNIFIED IDEOGRAPH
+ {0x8C91, 0x5026}, //1346 #CJK UNIFIED IDEOGRAPH
+ {0x8C92, 0x5065}, //1347 #CJK UNIFIED IDEOGRAPH
+ {0x8C93, 0x517C}, //1348 #CJK UNIFIED IDEOGRAPH
+ {0x8C94, 0x5238}, //1349 #CJK UNIFIED IDEOGRAPH
+ {0x8C95, 0x5263}, //1350 #CJK UNIFIED IDEOGRAPH
+ {0x8C96, 0x55A7}, //1351 #CJK UNIFIED IDEOGRAPH
+ {0x8C97, 0x570F}, //1352 #CJK UNIFIED IDEOGRAPH
+ {0x8C98, 0x5805}, //1353 #CJK UNIFIED IDEOGRAPH
+ {0x8C99, 0x5ACC}, //1354 #CJK UNIFIED IDEOGRAPH
+ {0x8C9A, 0x5EFA}, //1355 #CJK UNIFIED IDEOGRAPH
+ {0x8C9B, 0x61B2}, //1356 #CJK UNIFIED IDEOGRAPH
+ {0x8C9C, 0x61F8}, //1357 #CJK UNIFIED IDEOGRAPH
+ {0x8C9D, 0x62F3}, //1358 #CJK UNIFIED IDEOGRAPH
+ {0x8C9E, 0x6372}, //1359 #CJK UNIFIED IDEOGRAPH
+ {0x8C9F, 0x691C}, //1360 #CJK UNIFIED IDEOGRAPH
+ {0x8CA0, 0x6A29}, //1361 #CJK UNIFIED IDEOGRAPH
+ {0x8CA1, 0x727D}, //1362 #CJK UNIFIED IDEOGRAPH
+ {0x8CA2, 0x72AC}, //1363 #CJK UNIFIED IDEOGRAPH
+ {0x8CA3, 0x732E}, //1364 #CJK UNIFIED IDEOGRAPH
+ {0x8CA4, 0x7814}, //1365 #CJK UNIFIED IDEOGRAPH
+ {0x8CA5, 0x786F}, //1366 #CJK UNIFIED IDEOGRAPH
+ {0x8CA6, 0x7D79}, //1367 #CJK UNIFIED IDEOGRAPH
+ {0x8CA7, 0x770C}, //1368 #CJK UNIFIED IDEOGRAPH
+ {0x8CA8, 0x80A9}, //1369 #CJK UNIFIED IDEOGRAPH
+ {0x8CA9, 0x898B}, //1370 #CJK UNIFIED IDEOGRAPH
+ {0x8CAA, 0x8B19}, //1371 #CJK UNIFIED IDEOGRAPH
+ {0x8CAB, 0x8CE2}, //1372 #CJK UNIFIED IDEOGRAPH
+ {0x8CAC, 0x8ED2}, //1373 #CJK UNIFIED IDEOGRAPH
+ {0x8CAD, 0x9063}, //1374 #CJK UNIFIED IDEOGRAPH
+ {0x8CAE, 0x9375}, //1375 #CJK UNIFIED IDEOGRAPH
+ {0x8CAF, 0x967A}, //1376 #CJK UNIFIED IDEOGRAPH
+ {0x8CB0, 0x9855}, //1377 #CJK UNIFIED IDEOGRAPH
+ {0x8CB1, 0x9A13}, //1378 #CJK UNIFIED IDEOGRAPH
+ {0x8CB2, 0x9E78}, //1379 #CJK UNIFIED IDEOGRAPH
+ {0x8CB3, 0x5143}, //1380 #CJK UNIFIED IDEOGRAPH
+ {0x8CB4, 0x539F}, //1381 #CJK UNIFIED IDEOGRAPH
+ {0x8CB5, 0x53B3}, //1382 #CJK UNIFIED IDEOGRAPH
+ {0x8CB6, 0x5E7B}, //1383 #CJK UNIFIED IDEOGRAPH
+ {0x8CB7, 0x5F26}, //1384 #CJK UNIFIED IDEOGRAPH
+ {0x8CB8, 0x6E1B}, //1385 #CJK UNIFIED IDEOGRAPH
+ {0x8CB9, 0x6E90}, //1386 #CJK UNIFIED IDEOGRAPH
+ {0x8CBA, 0x7384}, //1387 #CJK UNIFIED IDEOGRAPH
+ {0x8CBB, 0x73FE}, //1388 #CJK UNIFIED IDEOGRAPH
+ {0x8CBC, 0x7D43}, //1389 #CJK UNIFIED IDEOGRAPH
+ {0x8CBD, 0x8237}, //1390 #CJK UNIFIED IDEOGRAPH
+ {0x8CBE, 0x8A00}, //1391 #CJK UNIFIED IDEOGRAPH
+ {0x8CBF, 0x8AFA}, //1392 #CJK UNIFIED IDEOGRAPH
+ {0x8CC0, 0x9650}, //1393 #CJK UNIFIED IDEOGRAPH
+ {0x8CC1, 0x4E4E}, //1394 #CJK UNIFIED IDEOGRAPH
+ {0x8CC2, 0x500B}, //1395 #CJK UNIFIED IDEOGRAPH
+ {0x8CC3, 0x53E4}, //1396 #CJK UNIFIED IDEOGRAPH
+ {0x8CC4, 0x547C}, //1397 #CJK UNIFIED IDEOGRAPH
+ {0x8CC5, 0x56FA}, //1398 #CJK UNIFIED IDEOGRAPH
+ {0x8CC6, 0x59D1}, //1399 #CJK UNIFIED IDEOGRAPH
+ {0x8CC7, 0x5B64}, //1400 #CJK UNIFIED IDEOGRAPH
+ {0x8CC8, 0x5DF1}, //1401 #CJK UNIFIED IDEOGRAPH
+ {0x8CC9, 0x5EAB}, //1402 #CJK UNIFIED IDEOGRAPH
+ {0x8CCA, 0x5F27}, //1403 #CJK UNIFIED IDEOGRAPH
+ {0x8CCB, 0x6238}, //1404 #CJK UNIFIED IDEOGRAPH
+ {0x8CCC, 0x6545}, //1405 #CJK UNIFIED IDEOGRAPH
+ {0x8CCD, 0x67AF}, //1406 #CJK UNIFIED IDEOGRAPH
+ {0x8CCE, 0x6E56}, //1407 #CJK UNIFIED IDEOGRAPH
+ {0x8CCF, 0x72D0}, //1408 #CJK UNIFIED IDEOGRAPH
+ {0x8CD0, 0x7CCA}, //1409 #CJK UNIFIED IDEOGRAPH
+ {0x8CD1, 0x88B4}, //1410 #CJK UNIFIED IDEOGRAPH
+ {0x8CD2, 0x80A1}, //1411 #CJK UNIFIED IDEOGRAPH
+ {0x8CD3, 0x80E1}, //1412 #CJK UNIFIED IDEOGRAPH
+ {0x8CD4, 0x83F0}, //1413 #CJK UNIFIED IDEOGRAPH
+ {0x8CD5, 0x864E}, //1414 #CJK UNIFIED IDEOGRAPH
+ {0x8CD6, 0x8A87}, //1415 #CJK UNIFIED IDEOGRAPH
+ {0x8CD7, 0x8DE8}, //1416 #CJK UNIFIED IDEOGRAPH
+ {0x8CD8, 0x9237}, //1417 #CJK UNIFIED IDEOGRAPH
+ {0x8CD9, 0x96C7}, //1418 #CJK UNIFIED IDEOGRAPH
+ {0x8CDA, 0x9867}, //1419 #CJK UNIFIED IDEOGRAPH
+ {0x8CDB, 0x9F13}, //1420 #CJK UNIFIED IDEOGRAPH
+ {0x8CDC, 0x4E94}, //1421 #CJK UNIFIED IDEOGRAPH
+ {0x8CDD, 0x4E92}, //1422 #CJK UNIFIED IDEOGRAPH
+ {0x8CDE, 0x4F0D}, //1423 #CJK UNIFIED IDEOGRAPH
+ {0x8CDF, 0x5348}, //1424 #CJK UNIFIED IDEOGRAPH
+ {0x8CE0, 0x5449}, //1425 #CJK UNIFIED IDEOGRAPH
+ {0x8CE1, 0x543E}, //1426 #CJK UNIFIED IDEOGRAPH
+ {0x8CE2, 0x5A2F}, //1427 #CJK UNIFIED IDEOGRAPH
+ {0x8CE3, 0x5F8C}, //1428 #CJK UNIFIED IDEOGRAPH
+ {0x8CE4, 0x5FA1}, //1429 #CJK UNIFIED IDEOGRAPH
+ {0x8CE5, 0x609F}, //1430 #CJK UNIFIED IDEOGRAPH
+ {0x8CE6, 0x68A7}, //1431 #CJK UNIFIED IDEOGRAPH
+ {0x8CE7, 0x6A8E}, //1432 #CJK UNIFIED IDEOGRAPH
+ {0x8CE8, 0x745A}, //1433 #CJK UNIFIED IDEOGRAPH
+ {0x8CE9, 0x7881}, //1434 #CJK UNIFIED IDEOGRAPH
+ {0x8CEA, 0x8A9E}, //1435 #CJK UNIFIED IDEOGRAPH
+ {0x8CEB, 0x8AA4}, //1436 #CJK UNIFIED IDEOGRAPH
+ {0x8CEC, 0x8B77}, //1437 #CJK UNIFIED IDEOGRAPH
+ {0x8CED, 0x9190}, //1438 #CJK UNIFIED IDEOGRAPH
+ {0x8CEE, 0x4E5E}, //1439 #CJK UNIFIED IDEOGRAPH
+ {0x8CEF, 0x9BC9}, //1440 #CJK UNIFIED IDEOGRAPH
+ {0x8CF0, 0x4EA4}, //1441 #CJK UNIFIED IDEOGRAPH
+ {0x8CF1, 0x4F7C}, //1442 #CJK UNIFIED IDEOGRAPH
+ {0x8CF2, 0x4FAF}, //1443 #CJK UNIFIED IDEOGRAPH
+ {0x8CF3, 0x5019}, //1444 #CJK UNIFIED IDEOGRAPH
+ {0x8CF4, 0x5016}, //1445 #CJK UNIFIED IDEOGRAPH
+ {0x8CF5, 0x5149}, //1446 #CJK UNIFIED IDEOGRAPH
+ {0x8CF6, 0x516C}, //1447 #CJK UNIFIED IDEOGRAPH
+ {0x8CF7, 0x529F}, //1448 #CJK UNIFIED IDEOGRAPH
+ {0x8CF8, 0x52B9}, //1449 #CJK UNIFIED IDEOGRAPH
+ {0x8CF9, 0x52FE}, //1450 #CJK UNIFIED IDEOGRAPH
+ {0x8CFA, 0x539A}, //1451 #CJK UNIFIED IDEOGRAPH
+ {0x8CFB, 0x53E3}, //1452 #CJK UNIFIED IDEOGRAPH
+ {0x8CFC, 0x5411}, //1453 #CJK UNIFIED IDEOGRAPH
+ {0x8D40, 0x540E}, //1454 #CJK UNIFIED IDEOGRAPH
+ {0x8D41, 0x5589}, //1455 #CJK UNIFIED IDEOGRAPH
+ {0x8D42, 0x5751}, //1456 #CJK UNIFIED IDEOGRAPH
+ {0x8D43, 0x57A2}, //1457 #CJK UNIFIED IDEOGRAPH
+ {0x8D44, 0x597D}, //1458 #CJK UNIFIED IDEOGRAPH
+ {0x8D45, 0x5B54}, //1459 #CJK UNIFIED IDEOGRAPH
+ {0x8D46, 0x5B5D}, //1460 #CJK UNIFIED IDEOGRAPH
+ {0x8D47, 0x5B8F}, //1461 #CJK UNIFIED IDEOGRAPH
+ {0x8D48, 0x5DE5}, //1462 #CJK UNIFIED IDEOGRAPH
+ {0x8D49, 0x5DE7}, //1463 #CJK UNIFIED IDEOGRAPH
+ {0x8D4A, 0x5DF7}, //1464 #CJK UNIFIED IDEOGRAPH
+ {0x8D4B, 0x5E78}, //1465 #CJK UNIFIED IDEOGRAPH
+ {0x8D4C, 0x5E83}, //1466 #CJK UNIFIED IDEOGRAPH
+ {0x8D4D, 0x5E9A}, //1467 #CJK UNIFIED IDEOGRAPH
+ {0x8D4E, 0x5EB7}, //1468 #CJK UNIFIED IDEOGRAPH
+ {0x8D4F, 0x5F18}, //1469 #CJK UNIFIED IDEOGRAPH
+ {0x8D50, 0x6052}, //1470 #CJK UNIFIED IDEOGRAPH
+ {0x8D51, 0x614C}, //1471 #CJK UNIFIED IDEOGRAPH
+ {0x8D52, 0x6297}, //1472 #CJK UNIFIED IDEOGRAPH
+ {0x8D53, 0x62D8}, //1473 #CJK UNIFIED IDEOGRAPH
+ {0x8D54, 0x63A7}, //1474 #CJK UNIFIED IDEOGRAPH
+ {0x8D55, 0x653B}, //1475 #CJK UNIFIED IDEOGRAPH
+ {0x8D56, 0x6602}, //1476 #CJK UNIFIED IDEOGRAPH
+ {0x8D57, 0x6643}, //1477 #CJK UNIFIED IDEOGRAPH
+ {0x8D58, 0x66F4}, //1478 #CJK UNIFIED IDEOGRAPH
+ {0x8D59, 0x676D}, //1479 #CJK UNIFIED IDEOGRAPH
+ {0x8D5A, 0x6821}, //1480 #CJK UNIFIED IDEOGRAPH
+ {0x8D5B, 0x6897}, //1481 #CJK UNIFIED IDEOGRAPH
+ {0x8D5C, 0x69CB}, //1482 #CJK UNIFIED IDEOGRAPH
+ {0x8D5D, 0x6C5F}, //1483 #CJK UNIFIED IDEOGRAPH
+ {0x8D5E, 0x6D2A}, //1484 #CJK UNIFIED IDEOGRAPH
+ {0x8D5F, 0x6D69}, //1485 #CJK UNIFIED IDEOGRAPH
+ {0x8D60, 0x6E2F}, //1486 #CJK UNIFIED IDEOGRAPH
+ {0x8D61, 0x6E9D}, //1487 #CJK UNIFIED IDEOGRAPH
+ {0x8D62, 0x7532}, //1488 #CJK UNIFIED IDEOGRAPH
+ {0x8D63, 0x7687}, //1489 #CJK UNIFIED IDEOGRAPH
+ {0x8D64, 0x786C}, //1490 #CJK UNIFIED IDEOGRAPH
+ {0x8D65, 0x7A3F}, //1491 #CJK UNIFIED IDEOGRAPH
+ {0x8D66, 0x7CE0}, //1492 #CJK UNIFIED IDEOGRAPH
+ {0x8D67, 0x7D05}, //1493 #CJK UNIFIED IDEOGRAPH
+ {0x8D68, 0x7D18}, //1494 #CJK UNIFIED IDEOGRAPH
+ {0x8D69, 0x7D5E}, //1495 #CJK UNIFIED IDEOGRAPH
+ {0x8D6A, 0x7DB1}, //1496 #CJK UNIFIED IDEOGRAPH
+ {0x8D6B, 0x8015}, //1497 #CJK UNIFIED IDEOGRAPH
+ {0x8D6C, 0x8003}, //1498 #CJK UNIFIED IDEOGRAPH
+ {0x8D6D, 0x80AF}, //1499 #CJK UNIFIED IDEOGRAPH
+ {0x8D6E, 0x80B1}, //1500 #CJK UNIFIED IDEOGRAPH
+ {0x8D6F, 0x8154}, //1501 #CJK UNIFIED IDEOGRAPH
+ {0x8D70, 0x818F}, //1502 #CJK UNIFIED IDEOGRAPH
+ {0x8D71, 0x822A}, //1503 #CJK UNIFIED IDEOGRAPH
+ {0x8D72, 0x8352}, //1504 #CJK UNIFIED IDEOGRAPH
+ {0x8D73, 0x884C}, //1505 #CJK UNIFIED IDEOGRAPH
+ {0x8D74, 0x8861}, //1506 #CJK UNIFIED IDEOGRAPH
+ {0x8D75, 0x8B1B}, //1507 #CJK UNIFIED IDEOGRAPH
+ {0x8D76, 0x8CA2}, //1508 #CJK UNIFIED IDEOGRAPH
+ {0x8D77, 0x8CFC}, //1509 #CJK UNIFIED IDEOGRAPH
+ {0x8D78, 0x90CA}, //1510 #CJK UNIFIED IDEOGRAPH
+ {0x8D79, 0x9175}, //1511 #CJK UNIFIED IDEOGRAPH
+ {0x8D7A, 0x9271}, //1512 #CJK UNIFIED IDEOGRAPH
+ {0x8D7B, 0x783F}, //1513 #CJK UNIFIED IDEOGRAPH
+ {0x8D7C, 0x92FC}, //1514 #CJK UNIFIED IDEOGRAPH
+ {0x8D7D, 0x95A4}, //1515 #CJK UNIFIED IDEOGRAPH
+ {0x8D7E, 0x964D}, //1516 #CJK UNIFIED IDEOGRAPH
+ {0x8D80, 0x9805}, //1517 #CJK UNIFIED IDEOGRAPH
+ {0x8D81, 0x9999}, //1518 #CJK UNIFIED IDEOGRAPH
+ {0x8D82, 0x9AD8}, //1519 #CJK UNIFIED IDEOGRAPH
+ {0x8D83, 0x9D3B}, //1520 #CJK UNIFIED IDEOGRAPH
+ {0x8D84, 0x525B}, //1521 #CJK UNIFIED IDEOGRAPH
+ {0x8D85, 0x52AB}, //1522 #CJK UNIFIED IDEOGRAPH
+ {0x8D86, 0x53F7}, //1523 #CJK UNIFIED IDEOGRAPH
+ {0x8D87, 0x5408}, //1524 #CJK UNIFIED IDEOGRAPH
+ {0x8D88, 0x58D5}, //1525 #CJK UNIFIED IDEOGRAPH
+ {0x8D89, 0x62F7}, //1526 #CJK UNIFIED IDEOGRAPH
+ {0x8D8A, 0x6FE0}, //1527 #CJK UNIFIED IDEOGRAPH
+ {0x8D8B, 0x8C6A}, //1528 #CJK UNIFIED IDEOGRAPH
+ {0x8D8C, 0x8F5F}, //1529 #CJK UNIFIED IDEOGRAPH
+ {0x8D8D, 0x9EB9}, //1530 #CJK UNIFIED IDEOGRAPH
+ {0x8D8E, 0x514B}, //1531 #CJK UNIFIED IDEOGRAPH
+ {0x8D8F, 0x523B}, //1532 #CJK UNIFIED IDEOGRAPH
+ {0x8D90, 0x544A}, //1533 #CJK UNIFIED IDEOGRAPH
+ {0x8D91, 0x56FD}, //1534 #CJK UNIFIED IDEOGRAPH
+ {0x8D92, 0x7A40}, //1535 #CJK UNIFIED IDEOGRAPH
+ {0x8D93, 0x9177}, //1536 #CJK UNIFIED IDEOGRAPH
+ {0x8D94, 0x9D60}, //1537 #CJK UNIFIED IDEOGRAPH
+ {0x8D95, 0x9ED2}, //1538 #CJK UNIFIED IDEOGRAPH
+ {0x8D96, 0x7344}, //1539 #CJK UNIFIED IDEOGRAPH
+ {0x8D97, 0x6F09}, //1540 #CJK UNIFIED IDEOGRAPH
+ {0x8D98, 0x8170}, //1541 #CJK UNIFIED IDEOGRAPH
+ {0x8D99, 0x7511}, //1542 #CJK UNIFIED IDEOGRAPH
+ {0x8D9A, 0x5FFD}, //1543 #CJK UNIFIED IDEOGRAPH
+ {0x8D9B, 0x60DA}, //1544 #CJK UNIFIED IDEOGRAPH
+ {0x8D9C, 0x9AA8}, //1545 #CJK UNIFIED IDEOGRAPH
+ {0x8D9D, 0x72DB}, //1546 #CJK UNIFIED IDEOGRAPH
+ {0x8D9E, 0x8FBC}, //1547 #CJK UNIFIED IDEOGRAPH
+ {0x8D9F, 0x6B64}, //1548 #CJK UNIFIED IDEOGRAPH
+ {0x8DA0, 0x9803}, //1549 #CJK UNIFIED IDEOGRAPH
+ {0x8DA1, 0x4ECA}, //1550 #CJK UNIFIED IDEOGRAPH
+ {0x8DA2, 0x56F0}, //1551 #CJK UNIFIED IDEOGRAPH
+ {0x8DA3, 0x5764}, //1552 #CJK UNIFIED IDEOGRAPH
+ {0x8DA4, 0x58BE}, //1553 #CJK UNIFIED IDEOGRAPH
+ {0x8DA5, 0x5A5A}, //1554 #CJK UNIFIED IDEOGRAPH
+ {0x8DA6, 0x6068}, //1555 #CJK UNIFIED IDEOGRAPH
+ {0x8DA7, 0x61C7}, //1556 #CJK UNIFIED IDEOGRAPH
+ {0x8DA8, 0x660F}, //1557 #CJK UNIFIED IDEOGRAPH
+ {0x8DA9, 0x6606}, //1558 #CJK UNIFIED IDEOGRAPH
+ {0x8DAA, 0x6839}, //1559 #CJK UNIFIED IDEOGRAPH
+ {0x8DAB, 0x68B1}, //1560 #CJK UNIFIED IDEOGRAPH
+ {0x8DAC, 0x6DF7}, //1561 #CJK UNIFIED IDEOGRAPH
+ {0x8DAD, 0x75D5}, //1562 #CJK UNIFIED IDEOGRAPH
+ {0x8DAE, 0x7D3A}, //1563 #CJK UNIFIED IDEOGRAPH
+ {0x8DAF, 0x826E}, //1564 #CJK UNIFIED IDEOGRAPH
+ {0x8DB0, 0x9B42}, //1565 #CJK UNIFIED IDEOGRAPH
+ {0x8DB1, 0x4E9B}, //1566 #CJK UNIFIED IDEOGRAPH
+ {0x8DB2, 0x4F50}, //1567 #CJK UNIFIED IDEOGRAPH
+ {0x8DB3, 0x53C9}, //1568 #CJK UNIFIED IDEOGRAPH
+ {0x8DB4, 0x5506}, //1569 #CJK UNIFIED IDEOGRAPH
+ {0x8DB5, 0x5D6F}, //1570 #CJK UNIFIED IDEOGRAPH
+ {0x8DB6, 0x5DE6}, //1571 #CJK UNIFIED IDEOGRAPH
+ {0x8DB7, 0x5DEE}, //1572 #CJK UNIFIED IDEOGRAPH
+ {0x8DB8, 0x67FB}, //1573 #CJK UNIFIED IDEOGRAPH
+ {0x8DB9, 0x6C99}, //1574 #CJK UNIFIED IDEOGRAPH
+ {0x8DBA, 0x7473}, //1575 #CJK UNIFIED IDEOGRAPH
+ {0x8DBB, 0x7802}, //1576 #CJK UNIFIED IDEOGRAPH
+ {0x8DBC, 0x8A50}, //1577 #CJK UNIFIED IDEOGRAPH
+ {0x8DBD, 0x9396}, //1578 #CJK UNIFIED IDEOGRAPH
+ {0x8DBE, 0x88DF}, //1579 #CJK UNIFIED IDEOGRAPH
+ {0x8DBF, 0x5750}, //1580 #CJK UNIFIED IDEOGRAPH
+ {0x8DC0, 0x5EA7}, //1581 #CJK UNIFIED IDEOGRAPH
+ {0x8DC1, 0x632B}, //1582 #CJK UNIFIED IDEOGRAPH
+ {0x8DC2, 0x50B5}, //1583 #CJK UNIFIED IDEOGRAPH
+ {0x8DC3, 0x50AC}, //1584 #CJK UNIFIED IDEOGRAPH
+ {0x8DC4, 0x518D}, //1585 #CJK UNIFIED IDEOGRAPH
+ {0x8DC5, 0x6700}, //1586 #CJK UNIFIED IDEOGRAPH
+ {0x8DC6, 0x54C9}, //1587 #CJK UNIFIED IDEOGRAPH
+ {0x8DC7, 0x585E}, //1588 #CJK UNIFIED IDEOGRAPH
+ {0x8DC8, 0x59BB}, //1589 #CJK UNIFIED IDEOGRAPH
+ {0x8DC9, 0x5BB0}, //1590 #CJK UNIFIED IDEOGRAPH
+ {0x8DCA, 0x5F69}, //1591 #CJK UNIFIED IDEOGRAPH
+ {0x8DCB, 0x624D}, //1592 #CJK UNIFIED IDEOGRAPH
+ {0x8DCC, 0x63A1}, //1593 #CJK UNIFIED IDEOGRAPH
+ {0x8DCD, 0x683D}, //1594 #CJK UNIFIED IDEOGRAPH
+ {0x8DCE, 0x6B73}, //1595 #CJK UNIFIED IDEOGRAPH
+ {0x8DCF, 0x6E08}, //1596 #CJK UNIFIED IDEOGRAPH
+ {0x8DD0, 0x707D}, //1597 #CJK UNIFIED IDEOGRAPH
+ {0x8DD1, 0x91C7}, //1598 #CJK UNIFIED IDEOGRAPH
+ {0x8DD2, 0x7280}, //1599 #CJK UNIFIED IDEOGRAPH
+ {0x8DD3, 0x7815}, //1600 #CJK UNIFIED IDEOGRAPH
+ {0x8DD4, 0x7826}, //1601 #CJK UNIFIED IDEOGRAPH
+ {0x8DD5, 0x796D}, //1602 #CJK UNIFIED IDEOGRAPH
+ {0x8DD6, 0x658E}, //1603 #CJK UNIFIED IDEOGRAPH
+ {0x8DD7, 0x7D30}, //1604 #CJK UNIFIED IDEOGRAPH
+ {0x8DD8, 0x83DC}, //1605 #CJK UNIFIED IDEOGRAPH
+ {0x8DD9, 0x88C1}, //1606 #CJK UNIFIED IDEOGRAPH
+ {0x8DDA, 0x8F09}, //1607 #CJK UNIFIED IDEOGRAPH
+ {0x8DDB, 0x969B}, //1608 #CJK UNIFIED IDEOGRAPH
+ {0x8DDC, 0x5264}, //1609 #CJK UNIFIED IDEOGRAPH
+ {0x8DDD, 0x5728}, //1610 #CJK UNIFIED IDEOGRAPH
+ {0x8DDE, 0x6750}, //1611 #CJK UNIFIED IDEOGRAPH
+ {0x8DDF, 0x7F6A}, //1612 #CJK UNIFIED IDEOGRAPH
+ {0x8DE0, 0x8CA1}, //1613 #CJK UNIFIED IDEOGRAPH
+ {0x8DE1, 0x51B4}, //1614 #CJK UNIFIED IDEOGRAPH
+ {0x8DE2, 0x5742}, //1615 #CJK UNIFIED IDEOGRAPH
+ {0x8DE3, 0x962A}, //1616 #CJK UNIFIED IDEOGRAPH
+ {0x8DE4, 0x583A}, //1617 #CJK UNIFIED IDEOGRAPH
+ {0x8DE5, 0x698A}, //1618 #CJK UNIFIED IDEOGRAPH
+ {0x8DE6, 0x80B4}, //1619 #CJK UNIFIED IDEOGRAPH
+ {0x8DE7, 0x54B2}, //1620 #CJK UNIFIED IDEOGRAPH
+ {0x8DE8, 0x5D0E}, //1621 #CJK UNIFIED IDEOGRAPH
+ {0x8DE9, 0x57FC}, //1622 #CJK UNIFIED IDEOGRAPH
+ {0x8DEA, 0x7895}, //1623 #CJK UNIFIED IDEOGRAPH
+ {0x8DEB, 0x9DFA}, //1624 #CJK UNIFIED IDEOGRAPH
+ {0x8DEC, 0x4F5C}, //1625 #CJK UNIFIED IDEOGRAPH
+ {0x8DED, 0x524A}, //1626 #CJK UNIFIED IDEOGRAPH
+ {0x8DEE, 0x548B}, //1627 #CJK UNIFIED IDEOGRAPH
+ {0x8DEF, 0x643E}, //1628 #CJK UNIFIED IDEOGRAPH
+ {0x8DF0, 0x6628}, //1629 #CJK UNIFIED IDEOGRAPH
+ {0x8DF1, 0x6714}, //1630 #CJK UNIFIED IDEOGRAPH
+ {0x8DF2, 0x67F5}, //1631 #CJK UNIFIED IDEOGRAPH
+ {0x8DF3, 0x7A84}, //1632 #CJK UNIFIED IDEOGRAPH
+ {0x8DF4, 0x7B56}, //1633 #CJK UNIFIED IDEOGRAPH
+ {0x8DF5, 0x7D22}, //1634 #CJK UNIFIED IDEOGRAPH
+ {0x8DF6, 0x932F}, //1635 #CJK UNIFIED IDEOGRAPH
+ {0x8DF7, 0x685C}, //1636 #CJK UNIFIED IDEOGRAPH
+ {0x8DF8, 0x9BAD}, //1637 #CJK UNIFIED IDEOGRAPH
+ {0x8DF9, 0x7B39}, //1638 #CJK UNIFIED IDEOGRAPH
+ {0x8DFA, 0x5319}, //1639 #CJK UNIFIED IDEOGRAPH
+ {0x8DFB, 0x518A}, //1640 #CJK UNIFIED IDEOGRAPH
+ {0x8DFC, 0x5237}, //1641 #CJK UNIFIED IDEOGRAPH
+ {0x8E40, 0x5BDF}, //1642 #CJK UNIFIED IDEOGRAPH
+ {0x8E41, 0x62F6}, //1643 #CJK UNIFIED IDEOGRAPH
+ {0x8E42, 0x64AE}, //1644 #CJK UNIFIED IDEOGRAPH
+ {0x8E43, 0x64E6}, //1645 #CJK UNIFIED IDEOGRAPH
+ {0x8E44, 0x672D}, //1646 #CJK UNIFIED IDEOGRAPH
+ {0x8E45, 0x6BBA}, //1647 #CJK UNIFIED IDEOGRAPH
+ {0x8E46, 0x85A9}, //1648 #CJK UNIFIED IDEOGRAPH
+ {0x8E47, 0x96D1}, //1649 #CJK UNIFIED IDEOGRAPH
+ {0x8E48, 0x7690}, //1650 #CJK UNIFIED IDEOGRAPH
+ {0x8E49, 0x9BD6}, //1651 #CJK UNIFIED IDEOGRAPH
+ {0x8E4A, 0x634C}, //1652 #CJK UNIFIED IDEOGRAPH
+ {0x8E4B, 0x9306}, //1653 #CJK UNIFIED IDEOGRAPH
+ {0x8E4C, 0x9BAB}, //1654 #CJK UNIFIED IDEOGRAPH
+ {0x8E4D, 0x76BF}, //1655 #CJK UNIFIED IDEOGRAPH
+ {0x8E4E, 0x6652}, //1656 #CJK UNIFIED IDEOGRAPH
+ {0x8E4F, 0x4E09}, //1657 #CJK UNIFIED IDEOGRAPH
+ {0x8E50, 0x5098}, //1658 #CJK UNIFIED IDEOGRAPH
+ {0x8E51, 0x53C2}, //1659 #CJK UNIFIED IDEOGRAPH
+ {0x8E52, 0x5C71}, //1660 #CJK UNIFIED IDEOGRAPH
+ {0x8E53, 0x60E8}, //1661 #CJK UNIFIED IDEOGRAPH
+ {0x8E54, 0x6492}, //1662 #CJK UNIFIED IDEOGRAPH
+ {0x8E55, 0x6563}, //1663 #CJK UNIFIED IDEOGRAPH
+ {0x8E56, 0x685F}, //1664 #CJK UNIFIED IDEOGRAPH
+ {0x8E57, 0x71E6}, //1665 #CJK UNIFIED IDEOGRAPH
+ {0x8E58, 0x73CA}, //1666 #CJK UNIFIED IDEOGRAPH
+ {0x8E59, 0x7523}, //1667 #CJK UNIFIED IDEOGRAPH
+ {0x8E5A, 0x7B97}, //1668 #CJK UNIFIED IDEOGRAPH
+ {0x8E5B, 0x7E82}, //1669 #CJK UNIFIED IDEOGRAPH
+ {0x8E5C, 0x8695}, //1670 #CJK UNIFIED IDEOGRAPH
+ {0x8E5D, 0x8B83}, //1671 #CJK UNIFIED IDEOGRAPH
+ {0x8E5E, 0x8CDB}, //1672 #CJK UNIFIED IDEOGRAPH
+ {0x8E5F, 0x9178}, //1673 #CJK UNIFIED IDEOGRAPH
+ {0x8E60, 0x9910}, //1674 #CJK UNIFIED IDEOGRAPH
+ {0x8E61, 0x65AC}, //1675 #CJK UNIFIED IDEOGRAPH
+ {0x8E62, 0x66AB}, //1676 #CJK UNIFIED IDEOGRAPH
+ {0x8E63, 0x6B8B}, //1677 #CJK UNIFIED IDEOGRAPH
+ {0x8E64, 0x4ED5}, //1678 #CJK UNIFIED IDEOGRAPH
+ {0x8E65, 0x4ED4}, //1679 #CJK UNIFIED IDEOGRAPH
+ {0x8E66, 0x4F3A}, //1680 #CJK UNIFIED IDEOGRAPH
+ {0x8E67, 0x4F7F}, //1681 #CJK UNIFIED IDEOGRAPH
+ {0x8E68, 0x523A}, //1682 #CJK UNIFIED IDEOGRAPH
+ {0x8E69, 0x53F8}, //1683 #CJK UNIFIED IDEOGRAPH
+ {0x8E6A, 0x53F2}, //1684 #CJK UNIFIED IDEOGRAPH
+ {0x8E6B, 0x55E3}, //1685 #CJK UNIFIED IDEOGRAPH
+ {0x8E6C, 0x56DB}, //1686 #CJK UNIFIED IDEOGRAPH
+ {0x8E6D, 0x58EB}, //1687 #CJK UNIFIED IDEOGRAPH
+ {0x8E6E, 0x59CB}, //1688 #CJK UNIFIED IDEOGRAPH
+ {0x8E6F, 0x59C9}, //1689 #CJK UNIFIED IDEOGRAPH
+ {0x8E70, 0x59FF}, //1690 #CJK UNIFIED IDEOGRAPH
+ {0x8E71, 0x5B50}, //1691 #CJK UNIFIED IDEOGRAPH
+ {0x8E72, 0x5C4D}, //1692 #CJK UNIFIED IDEOGRAPH
+ {0x8E73, 0x5E02}, //1693 #CJK UNIFIED IDEOGRAPH
+ {0x8E74, 0x5E2B}, //1694 #CJK UNIFIED IDEOGRAPH
+ {0x8E75, 0x5FD7}, //1695 #CJK UNIFIED IDEOGRAPH
+ {0x8E76, 0x601D}, //1696 #CJK UNIFIED IDEOGRAPH
+ {0x8E77, 0x6307}, //1697 #CJK UNIFIED IDEOGRAPH
+ {0x8E78, 0x652F}, //1698 #CJK UNIFIED IDEOGRAPH
+ {0x8E79, 0x5B5C}, //1699 #CJK UNIFIED IDEOGRAPH
+ {0x8E7A, 0x65AF}, //1700 #CJK UNIFIED IDEOGRAPH
+ {0x8E7B, 0x65BD}, //1701 #CJK UNIFIED IDEOGRAPH
+ {0x8E7C, 0x65E8}, //1702 #CJK UNIFIED IDEOGRAPH
+ {0x8E7D, 0x679D}, //1703 #CJK UNIFIED IDEOGRAPH
+ {0x8E7E, 0x6B62}, //1704 #CJK UNIFIED IDEOGRAPH
+ {0x8E80, 0x6B7B}, //1705 #CJK UNIFIED IDEOGRAPH
+ {0x8E81, 0x6C0F}, //1706 #CJK UNIFIED IDEOGRAPH
+ {0x8E82, 0x7345}, //1707 #CJK UNIFIED IDEOGRAPH
+ {0x8E83, 0x7949}, //1708 #CJK UNIFIED IDEOGRAPH
+ {0x8E84, 0x79C1}, //1709 #CJK UNIFIED IDEOGRAPH
+ {0x8E85, 0x7CF8}, //1710 #CJK UNIFIED IDEOGRAPH
+ {0x8E86, 0x7D19}, //1711 #CJK UNIFIED IDEOGRAPH
+ {0x8E87, 0x7D2B}, //1712 #CJK UNIFIED IDEOGRAPH
+ {0x8E88, 0x80A2}, //1713 #CJK UNIFIED IDEOGRAPH
+ {0x8E89, 0x8102}, //1714 #CJK UNIFIED IDEOGRAPH
+ {0x8E8A, 0x81F3}, //1715 #CJK UNIFIED IDEOGRAPH
+ {0x8E8B, 0x8996}, //1716 #CJK UNIFIED IDEOGRAPH
+ {0x8E8C, 0x8A5E}, //1717 #CJK UNIFIED IDEOGRAPH
+ {0x8E8D, 0x8A69}, //1718 #CJK UNIFIED IDEOGRAPH
+ {0x8E8E, 0x8A66}, //1719 #CJK UNIFIED IDEOGRAPH
+ {0x8E8F, 0x8A8C}, //1720 #CJK UNIFIED IDEOGRAPH
+ {0x8E90, 0x8AEE}, //1721 #CJK UNIFIED IDEOGRAPH
+ {0x8E91, 0x8CC7}, //1722 #CJK UNIFIED IDEOGRAPH
+ {0x8E92, 0x8CDC}, //1723 #CJK UNIFIED IDEOGRAPH
+ {0x8E93, 0x96CC}, //1724 #CJK UNIFIED IDEOGRAPH
+ {0x8E94, 0x98FC}, //1725 #CJK UNIFIED IDEOGRAPH
+ {0x8E95, 0x6B6F}, //1726 #CJK UNIFIED IDEOGRAPH
+ {0x8E96, 0x4E8B}, //1727 #CJK UNIFIED IDEOGRAPH
+ {0x8E97, 0x4F3C}, //1728 #CJK UNIFIED IDEOGRAPH
+ {0x8E98, 0x4F8D}, //1729 #CJK UNIFIED IDEOGRAPH
+ {0x8E99, 0x5150}, //1730 #CJK UNIFIED IDEOGRAPH
+ {0x8E9A, 0x5B57}, //1731 #CJK UNIFIED IDEOGRAPH
+ {0x8E9B, 0x5BFA}, //1732 #CJK UNIFIED IDEOGRAPH
+ {0x8E9C, 0x6148}, //1733 #CJK UNIFIED IDEOGRAPH
+ {0x8E9D, 0x6301}, //1734 #CJK UNIFIED IDEOGRAPH
+ {0x8E9E, 0x6642}, //1735 #CJK UNIFIED IDEOGRAPH
+ {0x8E9F, 0x6B21}, //1736 #CJK UNIFIED IDEOGRAPH
+ {0x8EA0, 0x6ECB}, //1737 #CJK UNIFIED IDEOGRAPH
+ {0x8EA1, 0x6CBB}, //1738 #CJK UNIFIED IDEOGRAPH
+ {0x8EA2, 0x723E}, //1739 #CJK UNIFIED IDEOGRAPH
+ {0x8EA3, 0x74BD}, //1740 #CJK UNIFIED IDEOGRAPH
+ {0x8EA4, 0x75D4}, //1741 #CJK UNIFIED IDEOGRAPH
+ {0x8EA5, 0x78C1}, //1742 #CJK UNIFIED IDEOGRAPH
+ {0x8EA6, 0x793A}, //1743 #CJK UNIFIED IDEOGRAPH
+ {0x8EA7, 0x800C}, //1744 #CJK UNIFIED IDEOGRAPH
+ {0x8EA8, 0x8033}, //1745 #CJK UNIFIED IDEOGRAPH
+ {0x8EA9, 0x81EA}, //1746 #CJK UNIFIED IDEOGRAPH
+ {0x8EAA, 0x8494}, //1747 #CJK UNIFIED IDEOGRAPH
+ {0x8EAB, 0x8F9E}, //1748 #CJK UNIFIED IDEOGRAPH
+ {0x8EAC, 0x6C50}, //1749 #CJK UNIFIED IDEOGRAPH
+ {0x8EAD, 0x9E7F}, //1750 #CJK UNIFIED IDEOGRAPH
+ {0x8EAE, 0x5F0F}, //1751 #CJK UNIFIED IDEOGRAPH
+ {0x8EAF, 0x8B58}, //1752 #CJK UNIFIED IDEOGRAPH
+ {0x8EB0, 0x9D2B}, //1753 #CJK UNIFIED IDEOGRAPH
+ {0x8EB1, 0x7AFA}, //1754 #CJK UNIFIED IDEOGRAPH
+ {0x8EB2, 0x8EF8}, //1755 #CJK UNIFIED IDEOGRAPH
+ {0x8EB3, 0x5B8D}, //1756 #CJK UNIFIED IDEOGRAPH
+ {0x8EB4, 0x96EB}, //1757 #CJK UNIFIED IDEOGRAPH
+ {0x8EB5, 0x4E03}, //1758 #CJK UNIFIED IDEOGRAPH
+ {0x8EB6, 0x53F1}, //1759 #CJK UNIFIED IDEOGRAPH
+ {0x8EB7, 0x57F7}, //1760 #CJK UNIFIED IDEOGRAPH
+ {0x8EB8, 0x5931}, //1761 #CJK UNIFIED IDEOGRAPH
+ {0x8EB9, 0x5AC9}, //1762 #CJK UNIFIED IDEOGRAPH
+ {0x8EBA, 0x5BA4}, //1763 #CJK UNIFIED IDEOGRAPH
+ {0x8EBB, 0x6089}, //1764 #CJK UNIFIED IDEOGRAPH
+ {0x8EBC, 0x6E7F}, //1765 #CJK UNIFIED IDEOGRAPH
+ {0x8EBD, 0x6F06}, //1766 #CJK UNIFIED IDEOGRAPH
+ {0x8EBE, 0x75BE}, //1767 #CJK UNIFIED IDEOGRAPH
+ {0x8EBF, 0x8CEA}, //1768 #CJK UNIFIED IDEOGRAPH
+ {0x8EC0, 0x5B9F}, //1769 #CJK UNIFIED IDEOGRAPH
+ {0x8EC1, 0x8500}, //1770 #CJK UNIFIED IDEOGRAPH
+ {0x8EC2, 0x7BE0}, //1771 #CJK UNIFIED IDEOGRAPH
+ {0x8EC3, 0x5072}, //1772 #CJK UNIFIED IDEOGRAPH
+ {0x8EC4, 0x67F4}, //1773 #CJK UNIFIED IDEOGRAPH
+ {0x8EC5, 0x829D}, //1774 #CJK UNIFIED IDEOGRAPH
+ {0x8EC6, 0x5C61}, //1775 #CJK UNIFIED IDEOGRAPH
+ {0x8EC7, 0x854A}, //1776 #CJK UNIFIED IDEOGRAPH
+ {0x8EC8, 0x7E1E}, //1777 #CJK UNIFIED IDEOGRAPH
+ {0x8EC9, 0x820E}, //1778 #CJK UNIFIED IDEOGRAPH
+ {0x8ECA, 0x5199}, //1779 #CJK UNIFIED IDEOGRAPH
+ {0x8ECB, 0x5C04}, //1780 #CJK UNIFIED IDEOGRAPH
+ {0x8ECC, 0x6368}, //1781 #CJK UNIFIED IDEOGRAPH
+ {0x8ECD, 0x8D66}, //1782 #CJK UNIFIED IDEOGRAPH
+ {0x8ECE, 0x659C}, //1783 #CJK UNIFIED IDEOGRAPH
+ {0x8ECF, 0x716E}, //1784 #CJK UNIFIED IDEOGRAPH
+ {0x8ED0, 0x793E}, //1785 #CJK UNIFIED IDEOGRAPH
+ {0x8ED1, 0x7D17}, //1786 #CJK UNIFIED IDEOGRAPH
+ {0x8ED2, 0x8005}, //1787 #CJK UNIFIED IDEOGRAPH
+ {0x8ED3, 0x8B1D}, //1788 #CJK UNIFIED IDEOGRAPH
+ {0x8ED4, 0x8ECA}, //1789 #CJK UNIFIED IDEOGRAPH
+ {0x8ED5, 0x906E}, //1790 #CJK UNIFIED IDEOGRAPH
+ {0x8ED6, 0x86C7}, //1791 #CJK UNIFIED IDEOGRAPH
+ {0x8ED7, 0x90AA}, //1792 #CJK UNIFIED IDEOGRAPH
+ {0x8ED8, 0x501F}, //1793 #CJK UNIFIED IDEOGRAPH
+ {0x8ED9, 0x52FA}, //1794 #CJK UNIFIED IDEOGRAPH
+ {0x8EDA, 0x5C3A}, //1795 #CJK UNIFIED IDEOGRAPH
+ {0x8EDB, 0x6753}, //1796 #CJK UNIFIED IDEOGRAPH
+ {0x8EDC, 0x707C}, //1797 #CJK UNIFIED IDEOGRAPH
+ {0x8EDD, 0x7235}, //1798 #CJK UNIFIED IDEOGRAPH
+ {0x8EDE, 0x914C}, //1799 #CJK UNIFIED IDEOGRAPH
+ {0x8EDF, 0x91C8}, //1800 #CJK UNIFIED IDEOGRAPH
+ {0x8EE0, 0x932B}, //1801 #CJK UNIFIED IDEOGRAPH
+ {0x8EE1, 0x82E5}, //1802 #CJK UNIFIED IDEOGRAPH
+ {0x8EE2, 0x5BC2}, //1803 #CJK UNIFIED IDEOGRAPH
+ {0x8EE3, 0x5F31}, //1804 #CJK UNIFIED IDEOGRAPH
+ {0x8EE4, 0x60F9}, //1805 #CJK UNIFIED IDEOGRAPH
+ {0x8EE5, 0x4E3B}, //1806 #CJK UNIFIED IDEOGRAPH
+ {0x8EE6, 0x53D6}, //1807 #CJK UNIFIED IDEOGRAPH
+ {0x8EE7, 0x5B88}, //1808 #CJK UNIFIED IDEOGRAPH
+ {0x8EE8, 0x624B}, //1809 #CJK UNIFIED IDEOGRAPH
+ {0x8EE9, 0x6731}, //1810 #CJK UNIFIED IDEOGRAPH
+ {0x8EEA, 0x6B8A}, //1811 #CJK UNIFIED IDEOGRAPH
+ {0x8EEB, 0x72E9}, //1812 #CJK UNIFIED IDEOGRAPH
+ {0x8EEC, 0x73E0}, //1813 #CJK UNIFIED IDEOGRAPH
+ {0x8EED, 0x7A2E}, //1814 #CJK UNIFIED IDEOGRAPH
+ {0x8EEE, 0x816B}, //1815 #CJK UNIFIED IDEOGRAPH
+ {0x8EEF, 0x8DA3}, //1816 #CJK UNIFIED IDEOGRAPH
+ {0x8EF0, 0x9152}, //1817 #CJK UNIFIED IDEOGRAPH
+ {0x8EF1, 0x9996}, //1818 #CJK UNIFIED IDEOGRAPH
+ {0x8EF2, 0x5112}, //1819 #CJK UNIFIED IDEOGRAPH
+ {0x8EF3, 0x53D7}, //1820 #CJK UNIFIED IDEOGRAPH
+ {0x8EF4, 0x546A}, //1821 #CJK UNIFIED IDEOGRAPH
+ {0x8EF5, 0x5BFF}, //1822 #CJK UNIFIED IDEOGRAPH
+ {0x8EF6, 0x6388}, //1823 #CJK UNIFIED IDEOGRAPH
+ {0x8EF7, 0x6A39}, //1824 #CJK UNIFIED IDEOGRAPH
+ {0x8EF8, 0x7DAC}, //1825 #CJK UNIFIED IDEOGRAPH
+ {0x8EF9, 0x9700}, //1826 #CJK UNIFIED IDEOGRAPH
+ {0x8EFA, 0x56DA}, //1827 #CJK UNIFIED IDEOGRAPH
+ {0x8EFB, 0x53CE}, //1828 #CJK UNIFIED IDEOGRAPH
+ {0x8EFC, 0x5468}, //1829 #CJK UNIFIED IDEOGRAPH
+ {0x8F40, 0x5B97}, //1830 #CJK UNIFIED IDEOGRAPH
+ {0x8F41, 0x5C31}, //1831 #CJK UNIFIED IDEOGRAPH
+ {0x8F42, 0x5DDE}, //1832 #CJK UNIFIED IDEOGRAPH
+ {0x8F43, 0x4FEE}, //1833 #CJK UNIFIED IDEOGRAPH
+ {0x8F44, 0x6101}, //1834 #CJK UNIFIED IDEOGRAPH
+ {0x8F45, 0x62FE}, //1835 #CJK UNIFIED IDEOGRAPH
+ {0x8F46, 0x6D32}, //1836 #CJK UNIFIED IDEOGRAPH
+ {0x8F47, 0x79C0}, //1837 #CJK UNIFIED IDEOGRAPH
+ {0x8F48, 0x79CB}, //1838 #CJK UNIFIED IDEOGRAPH
+ {0x8F49, 0x7D42}, //1839 #CJK UNIFIED IDEOGRAPH
+ {0x8F4A, 0x7E4D}, //1840 #CJK UNIFIED IDEOGRAPH
+ {0x8F4B, 0x7FD2}, //1841 #CJK UNIFIED IDEOGRAPH
+ {0x8F4C, 0x81ED}, //1842 #CJK UNIFIED IDEOGRAPH
+ {0x8F4D, 0x821F}, //1843 #CJK UNIFIED IDEOGRAPH
+ {0x8F4E, 0x8490}, //1844 #CJK UNIFIED IDEOGRAPH
+ {0x8F4F, 0x8846}, //1845 #CJK UNIFIED IDEOGRAPH
+ {0x8F50, 0x8972}, //1846 #CJK UNIFIED IDEOGRAPH
+ {0x8F51, 0x8B90}, //1847 #CJK UNIFIED IDEOGRAPH
+ {0x8F52, 0x8E74}, //1848 #CJK UNIFIED IDEOGRAPH
+ {0x8F53, 0x8F2F}, //1849 #CJK UNIFIED IDEOGRAPH
+ {0x8F54, 0x9031}, //1850 #CJK UNIFIED IDEOGRAPH
+ {0x8F55, 0x914B}, //1851 #CJK UNIFIED IDEOGRAPH
+ {0x8F56, 0x916C}, //1852 #CJK UNIFIED IDEOGRAPH
+ {0x8F57, 0x96C6}, //1853 #CJK UNIFIED IDEOGRAPH
+ {0x8F58, 0x919C}, //1854 #CJK UNIFIED IDEOGRAPH
+ {0x8F59, 0x4EC0}, //1855 #CJK UNIFIED IDEOGRAPH
+ {0x8F5A, 0x4F4F}, //1856 #CJK UNIFIED IDEOGRAPH
+ {0x8F5B, 0x5145}, //1857 #CJK UNIFIED IDEOGRAPH
+ {0x8F5C, 0x5341}, //1858 #CJK UNIFIED IDEOGRAPH
+ {0x8F5D, 0x5F93}, //1859 #CJK UNIFIED IDEOGRAPH
+ {0x8F5E, 0x620E}, //1860 #CJK UNIFIED IDEOGRAPH
+ {0x8F5F, 0x67D4}, //1861 #CJK UNIFIED IDEOGRAPH
+ {0x8F60, 0x6C41}, //1862 #CJK UNIFIED IDEOGRAPH
+ {0x8F61, 0x6E0B}, //1863 #CJK UNIFIED IDEOGRAPH
+ {0x8F62, 0x7363}, //1864 #CJK UNIFIED IDEOGRAPH
+ {0x8F63, 0x7E26}, //1865 #CJK UNIFIED IDEOGRAPH
+ {0x8F64, 0x91CD}, //1866 #CJK UNIFIED IDEOGRAPH
+ {0x8F65, 0x9283}, //1867 #CJK UNIFIED IDEOGRAPH
+ {0x8F66, 0x53D4}, //1868 #CJK UNIFIED IDEOGRAPH
+ {0x8F67, 0x5919}, //1869 #CJK UNIFIED IDEOGRAPH
+ {0x8F68, 0x5BBF}, //1870 #CJK UNIFIED IDEOGRAPH
+ {0x8F69, 0x6DD1}, //1871 #CJK UNIFIED IDEOGRAPH
+ {0x8F6A, 0x795D}, //1872 #CJK UNIFIED IDEOGRAPH
+ {0x8F6B, 0x7E2E}, //1873 #CJK UNIFIED IDEOGRAPH
+ {0x8F6C, 0x7C9B}, //1874 #CJK UNIFIED IDEOGRAPH
+ {0x8F6D, 0x587E}, //1875 #CJK UNIFIED IDEOGRAPH
+ {0x8F6E, 0x719F}, //1876 #CJK UNIFIED IDEOGRAPH
+ {0x8F6F, 0x51FA}, //1877 #CJK UNIFIED IDEOGRAPH
+ {0x8F70, 0x8853}, //1878 #CJK UNIFIED IDEOGRAPH
+ {0x8F71, 0x8FF0}, //1879 #CJK UNIFIED IDEOGRAPH
+ {0x8F72, 0x4FCA}, //1880 #CJK UNIFIED IDEOGRAPH
+ {0x8F73, 0x5CFB}, //1881 #CJK UNIFIED IDEOGRAPH
+ {0x8F74, 0x6625}, //1882 #CJK UNIFIED IDEOGRAPH
+ {0x8F75, 0x77AC}, //1883 #CJK UNIFIED IDEOGRAPH
+ {0x8F76, 0x7AE3}, //1884 #CJK UNIFIED IDEOGRAPH
+ {0x8F77, 0x821C}, //1885 #CJK UNIFIED IDEOGRAPH
+ {0x8F78, 0x99FF}, //1886 #CJK UNIFIED IDEOGRAPH
+ {0x8F79, 0x51C6}, //1887 #CJK UNIFIED IDEOGRAPH
+ {0x8F7A, 0x5FAA}, //1888 #CJK UNIFIED IDEOGRAPH
+ {0x8F7B, 0x65EC}, //1889 #CJK UNIFIED IDEOGRAPH
+ {0x8F7C, 0x696F}, //1890 #CJK UNIFIED IDEOGRAPH
+ {0x8F7D, 0x6B89}, //1891 #CJK UNIFIED IDEOGRAPH
+ {0x8F7E, 0x6DF3}, //1892 #CJK UNIFIED IDEOGRAPH
+ {0x8F80, 0x6E96}, //1893 #CJK UNIFIED IDEOGRAPH
+ {0x8F81, 0x6F64}, //1894 #CJK UNIFIED IDEOGRAPH
+ {0x8F82, 0x76FE}, //1895 #CJK UNIFIED IDEOGRAPH
+ {0x8F83, 0x7D14}, //1896 #CJK UNIFIED IDEOGRAPH
+ {0x8F84, 0x5DE1}, //1897 #CJK UNIFIED IDEOGRAPH
+ {0x8F85, 0x9075}, //1898 #CJK UNIFIED IDEOGRAPH
+ {0x8F86, 0x9187}, //1899 #CJK UNIFIED IDEOGRAPH
+ {0x8F87, 0x9806}, //1900 #CJK UNIFIED IDEOGRAPH
+ {0x8F88, 0x51E6}, //1901 #CJK UNIFIED IDEOGRAPH
+ {0x8F89, 0x521D}, //1902 #CJK UNIFIED IDEOGRAPH
+ {0x8F8A, 0x6240}, //1903 #CJK UNIFIED IDEOGRAPH
+ {0x8F8B, 0x6691}, //1904 #CJK UNIFIED IDEOGRAPH
+ {0x8F8C, 0x66D9}, //1905 #CJK UNIFIED IDEOGRAPH
+ {0x8F8D, 0x6E1A}, //1906 #CJK UNIFIED IDEOGRAPH
+ {0x8F8E, 0x5EB6}, //1907 #CJK UNIFIED IDEOGRAPH
+ {0x8F8F, 0x7DD2}, //1908 #CJK UNIFIED IDEOGRAPH
+ {0x8F90, 0x7F72}, //1909 #CJK UNIFIED IDEOGRAPH
+ {0x8F91, 0x66F8}, //1910 #CJK UNIFIED IDEOGRAPH
+ {0x8F92, 0x85AF}, //1911 #CJK UNIFIED IDEOGRAPH
+ {0x8F93, 0x85F7}, //1912 #CJK UNIFIED IDEOGRAPH
+ {0x8F94, 0x8AF8}, //1913 #CJK UNIFIED IDEOGRAPH
+ {0x8F95, 0x52A9}, //1914 #CJK UNIFIED IDEOGRAPH
+ {0x8F96, 0x53D9}, //1915 #CJK UNIFIED IDEOGRAPH
+ {0x8F97, 0x5973}, //1916 #CJK UNIFIED IDEOGRAPH
+ {0x8F98, 0x5E8F}, //1917 #CJK UNIFIED IDEOGRAPH
+ {0x8F99, 0x5F90}, //1918 #CJK UNIFIED IDEOGRAPH
+ {0x8F9A, 0x6055}, //1919 #CJK UNIFIED IDEOGRAPH
+ {0x8F9B, 0x92E4}, //1920 #CJK UNIFIED IDEOGRAPH
+ {0x8F9C, 0x9664}, //1921 #CJK UNIFIED IDEOGRAPH
+ {0x8F9D, 0x50B7}, //1922 #CJK UNIFIED IDEOGRAPH
+ {0x8F9E, 0x511F}, //1923 #CJK UNIFIED IDEOGRAPH
+ {0x8F9F, 0x52DD}, //1924 #CJK UNIFIED IDEOGRAPH
+ {0x8FA0, 0x5320}, //1925 #CJK UNIFIED IDEOGRAPH
+ {0x8FA1, 0x5347}, //1926 #CJK UNIFIED IDEOGRAPH
+ {0x8FA2, 0x53EC}, //1927 #CJK UNIFIED IDEOGRAPH
+ {0x8FA3, 0x54E8}, //1928 #CJK UNIFIED IDEOGRAPH
+ {0x8FA4, 0x5546}, //1929 #CJK UNIFIED IDEOGRAPH
+ {0x8FA5, 0x5531}, //1930 #CJK UNIFIED IDEOGRAPH
+ {0x8FA6, 0x5617}, //1931 #CJK UNIFIED IDEOGRAPH
+ {0x8FA7, 0x5968}, //1932 #CJK UNIFIED IDEOGRAPH
+ {0x8FA8, 0x59BE}, //1933 #CJK UNIFIED IDEOGRAPH
+ {0x8FA9, 0x5A3C}, //1934 #CJK UNIFIED IDEOGRAPH
+ {0x8FAA, 0x5BB5}, //1935 #CJK UNIFIED IDEOGRAPH
+ {0x8FAB, 0x5C06}, //1936 #CJK UNIFIED IDEOGRAPH
+ {0x8FAC, 0x5C0F}, //1937 #CJK UNIFIED IDEOGRAPH
+ {0x8FAD, 0x5C11}, //1938 #CJK UNIFIED IDEOGRAPH
+ {0x8FAE, 0x5C1A}, //1939 #CJK UNIFIED IDEOGRAPH
+ {0x8FAF, 0x5E84}, //1940 #CJK UNIFIED IDEOGRAPH
+ {0x8FB0, 0x5E8A}, //1941 #CJK UNIFIED IDEOGRAPH
+ {0x8FB1, 0x5EE0}, //1942 #CJK UNIFIED IDEOGRAPH
+ {0x8FB2, 0x5F70}, //1943 #CJK UNIFIED IDEOGRAPH
+ {0x8FB3, 0x627F}, //1944 #CJK UNIFIED IDEOGRAPH
+ {0x8FB4, 0x6284}, //1945 #CJK UNIFIED IDEOGRAPH
+ {0x8FB5, 0x62DB}, //1946 #CJK UNIFIED IDEOGRAPH
+ {0x8FB6, 0x638C}, //1947 #CJK UNIFIED IDEOGRAPH
+ {0x8FB7, 0x6377}, //1948 #CJK UNIFIED IDEOGRAPH
+ {0x8FB8, 0x6607}, //1949 #CJK UNIFIED IDEOGRAPH
+ {0x8FB9, 0x660C}, //1950 #CJK UNIFIED IDEOGRAPH
+ {0x8FBA, 0x662D}, //1951 #CJK UNIFIED IDEOGRAPH
+ {0x8FBB, 0x6676}, //1952 #CJK UNIFIED IDEOGRAPH
+ {0x8FBC, 0x677E}, //1953 #CJK UNIFIED IDEOGRAPH
+ {0x8FBD, 0x68A2}, //1954 #CJK UNIFIED IDEOGRAPH
+ {0x8FBE, 0x6A1F}, //1955 #CJK UNIFIED IDEOGRAPH
+ {0x8FBF, 0x6A35}, //1956 #CJK UNIFIED IDEOGRAPH
+ {0x8FC0, 0x6CBC}, //1957 #CJK UNIFIED IDEOGRAPH
+ {0x8FC1, 0x6D88}, //1958 #CJK UNIFIED IDEOGRAPH
+ {0x8FC2, 0x6E09}, //1959 #CJK UNIFIED IDEOGRAPH
+ {0x8FC3, 0x6E58}, //1960 #CJK UNIFIED IDEOGRAPH
+ {0x8FC4, 0x713C}, //1961 #CJK UNIFIED IDEOGRAPH
+ {0x8FC5, 0x7126}, //1962 #CJK UNIFIED IDEOGRAPH
+ {0x8FC6, 0x7167}, //1963 #CJK UNIFIED IDEOGRAPH
+ {0x8FC7, 0x75C7}, //1964 #CJK UNIFIED IDEOGRAPH
+ {0x8FC8, 0x7701}, //1965 #CJK UNIFIED IDEOGRAPH
+ {0x8FC9, 0x785D}, //1966 #CJK UNIFIED IDEOGRAPH
+ {0x8FCA, 0x7901}, //1967 #CJK UNIFIED IDEOGRAPH
+ {0x8FCB, 0x7965}, //1968 #CJK UNIFIED IDEOGRAPH
+ {0x8FCC, 0x79F0}, //1969 #CJK UNIFIED IDEOGRAPH
+ {0x8FCD, 0x7AE0}, //1970 #CJK UNIFIED IDEOGRAPH
+ {0x8FCE, 0x7B11}, //1971 #CJK UNIFIED IDEOGRAPH
+ {0x8FCF, 0x7CA7}, //1972 #CJK UNIFIED IDEOGRAPH
+ {0x8FD0, 0x7D39}, //1973 #CJK UNIFIED IDEOGRAPH
+ {0x8FD1, 0x8096}, //1974 #CJK UNIFIED IDEOGRAPH
+ {0x8FD2, 0x83D6}, //1975 #CJK UNIFIED IDEOGRAPH
+ {0x8FD3, 0x848B}, //1976 #CJK UNIFIED IDEOGRAPH
+ {0x8FD4, 0x8549}, //1977 #CJK UNIFIED IDEOGRAPH
+ {0x8FD5, 0x885D}, //1978 #CJK UNIFIED IDEOGRAPH
+ {0x8FD6, 0x88F3}, //1979 #CJK UNIFIED IDEOGRAPH
+ {0x8FD7, 0x8A1F}, //1980 #CJK UNIFIED IDEOGRAPH
+ {0x8FD8, 0x8A3C}, //1981 #CJK UNIFIED IDEOGRAPH
+ {0x8FD9, 0x8A54}, //1982 #CJK UNIFIED IDEOGRAPH
+ {0x8FDA, 0x8A73}, //1983 #CJK UNIFIED IDEOGRAPH
+ {0x8FDB, 0x8C61}, //1984 #CJK UNIFIED IDEOGRAPH
+ {0x8FDC, 0x8CDE}, //1985 #CJK UNIFIED IDEOGRAPH
+ {0x8FDD, 0x91A4}, //1986 #CJK UNIFIED IDEOGRAPH
+ {0x8FDE, 0x9266}, //1987 #CJK UNIFIED IDEOGRAPH
+ {0x8FDF, 0x937E}, //1988 #CJK UNIFIED IDEOGRAPH
+ {0x8FE0, 0x9418}, //1989 #CJK UNIFIED IDEOGRAPH
+ {0x8FE1, 0x969C}, //1990 #CJK UNIFIED IDEOGRAPH
+ {0x8FE2, 0x9798}, //1991 #CJK UNIFIED IDEOGRAPH
+ {0x8FE3, 0x4E0A}, //1992 #CJK UNIFIED IDEOGRAPH
+ {0x8FE4, 0x4E08}, //1993 #CJK UNIFIED IDEOGRAPH
+ {0x8FE5, 0x4E1E}, //1994 #CJK UNIFIED IDEOGRAPH
+ {0x8FE6, 0x4E57}, //1995 #CJK UNIFIED IDEOGRAPH
+ {0x8FE7, 0x5197}, //1996 #CJK UNIFIED IDEOGRAPH
+ {0x8FE8, 0x5270}, //1997 #CJK UNIFIED IDEOGRAPH
+ {0x8FE9, 0x57CE}, //1998 #CJK UNIFIED IDEOGRAPH
+ {0x8FEA, 0x5834}, //1999 #CJK UNIFIED IDEOGRAPH
+ {0x8FEB, 0x58CC}, //2000 #CJK UNIFIED IDEOGRAPH
+ {0x8FEC, 0x5B22}, //2001 #CJK UNIFIED IDEOGRAPH
+ {0x8FED, 0x5E38}, //2002 #CJK UNIFIED IDEOGRAPH
+ {0x8FEE, 0x60C5}, //2003 #CJK UNIFIED IDEOGRAPH
+ {0x8FEF, 0x64FE}, //2004 #CJK UNIFIED IDEOGRAPH
+ {0x8FF0, 0x6761}, //2005 #CJK UNIFIED IDEOGRAPH
+ {0x8FF1, 0x6756}, //2006 #CJK UNIFIED IDEOGRAPH
+ {0x8FF2, 0x6D44}, //2007 #CJK UNIFIED IDEOGRAPH
+ {0x8FF3, 0x72B6}, //2008 #CJK UNIFIED IDEOGRAPH
+ {0x8FF4, 0x7573}, //2009 #CJK UNIFIED IDEOGRAPH
+ {0x8FF5, 0x7A63}, //2010 #CJK UNIFIED IDEOGRAPH
+ {0x8FF6, 0x84B8}, //2011 #CJK UNIFIED IDEOGRAPH
+ {0x8FF7, 0x8B72}, //2012 #CJK UNIFIED IDEOGRAPH
+ {0x8FF8, 0x91B8}, //2013 #CJK UNIFIED IDEOGRAPH
+ {0x8FF9, 0x9320}, //2014 #CJK UNIFIED IDEOGRAPH
+ {0x8FFA, 0x5631}, //2015 #CJK UNIFIED IDEOGRAPH
+ {0x8FFB, 0x57F4}, //2016 #CJK UNIFIED IDEOGRAPH
+ {0x8FFC, 0x98FE}, //2017 #CJK UNIFIED IDEOGRAPH
+ {0x9040, 0x62ED}, //2018 #CJK UNIFIED IDEOGRAPH
+ {0x9041, 0x690D}, //2019 #CJK UNIFIED IDEOGRAPH
+ {0x9042, 0x6B96}, //2020 #CJK UNIFIED IDEOGRAPH
+ {0x9043, 0x71ED}, //2021 #CJK UNIFIED IDEOGRAPH
+ {0x9044, 0x7E54}, //2022 #CJK UNIFIED IDEOGRAPH
+ {0x9045, 0x8077}, //2023 #CJK UNIFIED IDEOGRAPH
+ {0x9046, 0x8272}, //2024 #CJK UNIFIED IDEOGRAPH
+ {0x9047, 0x89E6}, //2025 #CJK UNIFIED IDEOGRAPH
+ {0x9048, 0x98DF}, //2026 #CJK UNIFIED IDEOGRAPH
+ {0x9049, 0x8755}, //2027 #CJK UNIFIED IDEOGRAPH
+ {0x904A, 0x8FB1}, //2028 #CJK UNIFIED IDEOGRAPH
+ {0x904B, 0x5C3B}, //2029 #CJK UNIFIED IDEOGRAPH
+ {0x904C, 0x4F38}, //2030 #CJK UNIFIED IDEOGRAPH
+ {0x904D, 0x4FE1}, //2031 #CJK UNIFIED IDEOGRAPH
+ {0x904E, 0x4FB5}, //2032 #CJK UNIFIED IDEOGRAPH
+ {0x904F, 0x5507}, //2033 #CJK UNIFIED IDEOGRAPH
+ {0x9050, 0x5A20}, //2034 #CJK UNIFIED IDEOGRAPH
+ {0x9051, 0x5BDD}, //2035 #CJK UNIFIED IDEOGRAPH
+ {0x9052, 0x5BE9}, //2036 #CJK UNIFIED IDEOGRAPH
+ {0x9053, 0x5FC3}, //2037 #CJK UNIFIED IDEOGRAPH
+ {0x9054, 0x614E}, //2038 #CJK UNIFIED IDEOGRAPH
+ {0x9055, 0x632F}, //2039 #CJK UNIFIED IDEOGRAPH
+ {0x9056, 0x65B0}, //2040 #CJK UNIFIED IDEOGRAPH
+ {0x9057, 0x664B}, //2041 #CJK UNIFIED IDEOGRAPH
+ {0x9058, 0x68EE}, //2042 #CJK UNIFIED IDEOGRAPH
+ {0x9059, 0x699B}, //2043 #CJK UNIFIED IDEOGRAPH
+ {0x905A, 0x6D78}, //2044 #CJK UNIFIED IDEOGRAPH
+ {0x905B, 0x6DF1}, //2045 #CJK UNIFIED IDEOGRAPH
+ {0x905C, 0x7533}, //2046 #CJK UNIFIED IDEOGRAPH
+ {0x905D, 0x75B9}, //2047 #CJK UNIFIED IDEOGRAPH
+ {0x905E, 0x771F}, //2048 #CJK UNIFIED IDEOGRAPH
+ {0x905F, 0x795E}, //2049 #CJK UNIFIED IDEOGRAPH
+ {0x9060, 0x79E6}, //2050 #CJK UNIFIED IDEOGRAPH
+ {0x9061, 0x7D33}, //2051 #CJK UNIFIED IDEOGRAPH
+ {0x9062, 0x81E3}, //2052 #CJK UNIFIED IDEOGRAPH
+ {0x9063, 0x82AF}, //2053 #CJK UNIFIED IDEOGRAPH
+ {0x9064, 0x85AA}, //2054 #CJK UNIFIED IDEOGRAPH
+ {0x9065, 0x89AA}, //2055 #CJK UNIFIED IDEOGRAPH
+ {0x9066, 0x8A3A}, //2056 #CJK UNIFIED IDEOGRAPH
+ {0x9067, 0x8EAB}, //2057 #CJK UNIFIED IDEOGRAPH
+ {0x9068, 0x8F9B}, //2058 #CJK UNIFIED IDEOGRAPH
+ {0x9069, 0x9032}, //2059 #CJK UNIFIED IDEOGRAPH
+ {0x906A, 0x91DD}, //2060 #CJK UNIFIED IDEOGRAPH
+ {0x906B, 0x9707}, //2061 #CJK UNIFIED IDEOGRAPH
+ {0x906C, 0x4EBA}, //2062 #CJK UNIFIED IDEOGRAPH
+ {0x906D, 0x4EC1}, //2063 #CJK UNIFIED IDEOGRAPH
+ {0x906E, 0x5203}, //2064 #CJK UNIFIED IDEOGRAPH
+ {0x906F, 0x5875}, //2065 #CJK UNIFIED IDEOGRAPH
+ {0x9070, 0x58EC}, //2066 #CJK UNIFIED IDEOGRAPH
+ {0x9071, 0x5C0B}, //2067 #CJK UNIFIED IDEOGRAPH
+ {0x9072, 0x751A}, //2068 #CJK UNIFIED IDEOGRAPH
+ {0x9073, 0x5C3D}, //2069 #CJK UNIFIED IDEOGRAPH
+ {0x9074, 0x814E}, //2070 #CJK UNIFIED IDEOGRAPH
+ {0x9075, 0x8A0A}, //2071 #CJK UNIFIED IDEOGRAPH
+ {0x9076, 0x8FC5}, //2072 #CJK UNIFIED IDEOGRAPH
+ {0x9077, 0x9663}, //2073 #CJK UNIFIED IDEOGRAPH
+ {0x9078, 0x976D}, //2074 #CJK UNIFIED IDEOGRAPH
+ {0x9079, 0x7B25}, //2075 #CJK UNIFIED IDEOGRAPH
+ {0x907A, 0x8ACF}, //2076 #CJK UNIFIED IDEOGRAPH
+ {0x907B, 0x9808}, //2077 #CJK UNIFIED IDEOGRAPH
+ {0x907C, 0x9162}, //2078 #CJK UNIFIED IDEOGRAPH
+ {0x907D, 0x56F3}, //2079 #CJK UNIFIED IDEOGRAPH
+ {0x907E, 0x53A8}, //2080 #CJK UNIFIED IDEOGRAPH
+ {0x9080, 0x9017}, //2081 #CJK UNIFIED IDEOGRAPH
+ {0x9081, 0x5439}, //2082 #CJK UNIFIED IDEOGRAPH
+ {0x9082, 0x5782}, //2083 #CJK UNIFIED IDEOGRAPH
+ {0x9083, 0x5E25}, //2084 #CJK UNIFIED IDEOGRAPH
+ {0x9084, 0x63A8}, //2085 #CJK UNIFIED IDEOGRAPH
+ {0x9085, 0x6C34}, //2086 #CJK UNIFIED IDEOGRAPH
+ {0x9086, 0x708A}, //2087 #CJK UNIFIED IDEOGRAPH
+ {0x9087, 0x7761}, //2088 #CJK UNIFIED IDEOGRAPH
+ {0x9088, 0x7C8B}, //2089 #CJK UNIFIED IDEOGRAPH
+ {0x9089, 0x7FE0}, //2090 #CJK UNIFIED IDEOGRAPH
+ {0x908A, 0x8870}, //2091 #CJK UNIFIED IDEOGRAPH
+ {0x908B, 0x9042}, //2092 #CJK UNIFIED IDEOGRAPH
+ {0x908C, 0x9154}, //2093 #CJK UNIFIED IDEOGRAPH
+ {0x908D, 0x9310}, //2094 #CJK UNIFIED IDEOGRAPH
+ {0x908E, 0x9318}, //2095 #CJK UNIFIED IDEOGRAPH
+ {0x908F, 0x968F}, //2096 #CJK UNIFIED IDEOGRAPH
+ {0x9090, 0x745E}, //2097 #CJK UNIFIED IDEOGRAPH
+ {0x9091, 0x9AC4}, //2098 #CJK UNIFIED IDEOGRAPH
+ {0x9092, 0x5D07}, //2099 #CJK UNIFIED IDEOGRAPH
+ {0x9093, 0x5D69}, //2100 #CJK UNIFIED IDEOGRAPH
+ {0x9094, 0x6570}, //2101 #CJK UNIFIED IDEOGRAPH
+ {0x9095, 0x67A2}, //2102 #CJK UNIFIED IDEOGRAPH
+ {0x9096, 0x8DA8}, //2103 #CJK UNIFIED IDEOGRAPH
+ {0x9097, 0x96DB}, //2104 #CJK UNIFIED IDEOGRAPH
+ {0x9098, 0x636E}, //2105 #CJK UNIFIED IDEOGRAPH
+ {0x9099, 0x6749}, //2106 #CJK UNIFIED IDEOGRAPH
+ {0x909A, 0x6919}, //2107 #CJK UNIFIED IDEOGRAPH
+ {0x909B, 0x83C5}, //2108 #CJK UNIFIED IDEOGRAPH
+ {0x909C, 0x9817}, //2109 #CJK UNIFIED IDEOGRAPH
+ {0x909D, 0x96C0}, //2110 #CJK UNIFIED IDEOGRAPH
+ {0x909E, 0x88FE}, //2111 #CJK UNIFIED IDEOGRAPH
+ {0x909F, 0x6F84}, //2112 #CJK UNIFIED IDEOGRAPH
+ {0x90A0, 0x647A}, //2113 #CJK UNIFIED IDEOGRAPH
+ {0x90A1, 0x5BF8}, //2114 #CJK UNIFIED IDEOGRAPH
+ {0x90A2, 0x4E16}, //2115 #CJK UNIFIED IDEOGRAPH
+ {0x90A3, 0x702C}, //2116 #CJK UNIFIED IDEOGRAPH
+ {0x90A4, 0x755D}, //2117 #CJK UNIFIED IDEOGRAPH
+ {0x90A5, 0x662F}, //2118 #CJK UNIFIED IDEOGRAPH
+ {0x90A6, 0x51C4}, //2119 #CJK UNIFIED IDEOGRAPH
+ {0x90A7, 0x5236}, //2120 #CJK UNIFIED IDEOGRAPH
+ {0x90A8, 0x52E2}, //2121 #CJK UNIFIED IDEOGRAPH
+ {0x90A9, 0x59D3}, //2122 #CJK UNIFIED IDEOGRAPH
+ {0x90AA, 0x5F81}, //2123 #CJK UNIFIED IDEOGRAPH
+ {0x90AB, 0x6027}, //2124 #CJK UNIFIED IDEOGRAPH
+ {0x90AC, 0x6210}, //2125 #CJK UNIFIED IDEOGRAPH
+ {0x90AD, 0x653F}, //2126 #CJK UNIFIED IDEOGRAPH
+ {0x90AE, 0x6574}, //2127 #CJK UNIFIED IDEOGRAPH
+ {0x90AF, 0x661F}, //2128 #CJK UNIFIED IDEOGRAPH
+ {0x90B0, 0x6674}, //2129 #CJK UNIFIED IDEOGRAPH
+ {0x90B1, 0x68F2}, //2130 #CJK UNIFIED IDEOGRAPH
+ {0x90B2, 0x6816}, //2131 #CJK UNIFIED IDEOGRAPH
+ {0x90B3, 0x6B63}, //2132 #CJK UNIFIED IDEOGRAPH
+ {0x90B4, 0x6E05}, //2133 #CJK UNIFIED IDEOGRAPH
+ {0x90B5, 0x7272}, //2134 #CJK UNIFIED IDEOGRAPH
+ {0x90B6, 0x751F}, //2135 #CJK UNIFIED IDEOGRAPH
+ {0x90B7, 0x76DB}, //2136 #CJK UNIFIED IDEOGRAPH
+ {0x90B8, 0x7CBE}, //2137 #CJK UNIFIED IDEOGRAPH
+ {0x90B9, 0x8056}, //2138 #CJK UNIFIED IDEOGRAPH
+ {0x90BA, 0x58F0}, //2139 #CJK UNIFIED IDEOGRAPH
+ {0x90BB, 0x88FD}, //2140 #CJK UNIFIED IDEOGRAPH
+ {0x90BC, 0x897F}, //2141 #CJK UNIFIED IDEOGRAPH
+ {0x90BD, 0x8AA0}, //2142 #CJK UNIFIED IDEOGRAPH
+ {0x90BE, 0x8A93}, //2143 #CJK UNIFIED IDEOGRAPH
+ {0x90BF, 0x8ACB}, //2144 #CJK UNIFIED IDEOGRAPH
+ {0x90C0, 0x901D}, //2145 #CJK UNIFIED IDEOGRAPH
+ {0x90C1, 0x9192}, //2146 #CJK UNIFIED IDEOGRAPH
+ {0x90C2, 0x9752}, //2147 #CJK UNIFIED IDEOGRAPH
+ {0x90C3, 0x9759}, //2148 #CJK UNIFIED IDEOGRAPH
+ {0x90C4, 0x6589}, //2149 #CJK UNIFIED IDEOGRAPH
+ {0x90C5, 0x7A0E}, //2150 #CJK UNIFIED IDEOGRAPH
+ {0x90C6, 0x8106}, //2151 #CJK UNIFIED IDEOGRAPH
+ {0x90C7, 0x96BB}, //2152 #CJK UNIFIED IDEOGRAPH
+ {0x90C8, 0x5E2D}, //2153 #CJK UNIFIED IDEOGRAPH
+ {0x90C9, 0x60DC}, //2154 #CJK UNIFIED IDEOGRAPH
+ {0x90CA, 0x621A}, //2155 #CJK UNIFIED IDEOGRAPH
+ {0x90CB, 0x65A5}, //2156 #CJK UNIFIED IDEOGRAPH
+ {0x90CC, 0x6614}, //2157 #CJK UNIFIED IDEOGRAPH
+ {0x90CD, 0x6790}, //2158 #CJK UNIFIED IDEOGRAPH
+ {0x90CE, 0x77F3}, //2159 #CJK UNIFIED IDEOGRAPH
+ {0x90CF, 0x7A4D}, //2160 #CJK UNIFIED IDEOGRAPH
+ {0x90D0, 0x7C4D}, //2161 #CJK UNIFIED IDEOGRAPH
+ {0x90D1, 0x7E3E}, //2162 #CJK UNIFIED IDEOGRAPH
+ {0x90D2, 0x810A}, //2163 #CJK UNIFIED IDEOGRAPH
+ {0x90D3, 0x8CAC}, //2164 #CJK UNIFIED IDEOGRAPH
+ {0x90D4, 0x8D64}, //2165 #CJK UNIFIED IDEOGRAPH
+ {0x90D5, 0x8DE1}, //2166 #CJK UNIFIED IDEOGRAPH
+ {0x90D6, 0x8E5F}, //2167 #CJK UNIFIED IDEOGRAPH
+ {0x90D7, 0x78A9}, //2168 #CJK UNIFIED IDEOGRAPH
+ {0x90D8, 0x5207}, //2169 #CJK UNIFIED IDEOGRAPH
+ {0x90D9, 0x62D9}, //2170 #CJK UNIFIED IDEOGRAPH
+ {0x90DA, 0x63A5}, //2171 #CJK UNIFIED IDEOGRAPH
+ {0x90DB, 0x6442}, //2172 #CJK UNIFIED IDEOGRAPH
+ {0x90DC, 0x6298}, //2173 #CJK UNIFIED IDEOGRAPH
+ {0x90DD, 0x8A2D}, //2174 #CJK UNIFIED IDEOGRAPH
+ {0x90DE, 0x7A83}, //2175 #CJK UNIFIED IDEOGRAPH
+ {0x90DF, 0x7BC0}, //2176 #CJK UNIFIED IDEOGRAPH
+ {0x90E0, 0x8AAC}, //2177 #CJK UNIFIED IDEOGRAPH
+ {0x90E1, 0x96EA}, //2178 #CJK UNIFIED IDEOGRAPH
+ {0x90E2, 0x7D76}, //2179 #CJK UNIFIED IDEOGRAPH
+ {0x90E3, 0x820C}, //2180 #CJK UNIFIED IDEOGRAPH
+ {0x90E4, 0x8749}, //2181 #CJK UNIFIED IDEOGRAPH
+ {0x90E5, 0x4ED9}, //2182 #CJK UNIFIED IDEOGRAPH
+ {0x90E6, 0x5148}, //2183 #CJK UNIFIED IDEOGRAPH
+ {0x90E7, 0x5343}, //2184 #CJK UNIFIED IDEOGRAPH
+ {0x90E8, 0x5360}, //2185 #CJK UNIFIED IDEOGRAPH
+ {0x90E9, 0x5BA3}, //2186 #CJK UNIFIED IDEOGRAPH
+ {0x90EA, 0x5C02}, //2187 #CJK UNIFIED IDEOGRAPH
+ {0x90EB, 0x5C16}, //2188 #CJK UNIFIED IDEOGRAPH
+ {0x90EC, 0x5DDD}, //2189 #CJK UNIFIED IDEOGRAPH
+ {0x90ED, 0x6226}, //2190 #CJK UNIFIED IDEOGRAPH
+ {0x90EE, 0x6247}, //2191 #CJK UNIFIED IDEOGRAPH
+ {0x90EF, 0x64B0}, //2192 #CJK UNIFIED IDEOGRAPH
+ {0x90F0, 0x6813}, //2193 #CJK UNIFIED IDEOGRAPH
+ {0x90F1, 0x6834}, //2194 #CJK UNIFIED IDEOGRAPH
+ {0x90F2, 0x6CC9}, //2195 #CJK UNIFIED IDEOGRAPH
+ {0x90F3, 0x6D45}, //2196 #CJK UNIFIED IDEOGRAPH
+ {0x90F4, 0x6D17}, //2197 #CJK UNIFIED IDEOGRAPH
+ {0x90F5, 0x67D3}, //2198 #CJK UNIFIED IDEOGRAPH
+ {0x90F6, 0x6F5C}, //2199 #CJK UNIFIED IDEOGRAPH
+ {0x90F7, 0x714E}, //2200 #CJK UNIFIED IDEOGRAPH
+ {0x90F8, 0x717D}, //2201 #CJK UNIFIED IDEOGRAPH
+ {0x90F9, 0x65CB}, //2202 #CJK UNIFIED IDEOGRAPH
+ {0x90FA, 0x7A7F}, //2203 #CJK UNIFIED IDEOGRAPH
+ {0x90FB, 0x7BAD}, //2204 #CJK UNIFIED IDEOGRAPH
+ {0x90FC, 0x7DDA}, //2205 #CJK UNIFIED IDEOGRAPH
+ {0x9140, 0x7E4A}, //2206 #CJK UNIFIED IDEOGRAPH
+ {0x9141, 0x7FA8}, //2207 #CJK UNIFIED IDEOGRAPH
+ {0x9142, 0x817A}, //2208 #CJK UNIFIED IDEOGRAPH
+ {0x9143, 0x821B}, //2209 #CJK UNIFIED IDEOGRAPH
+ {0x9144, 0x8239}, //2210 #CJK UNIFIED IDEOGRAPH
+ {0x9145, 0x85A6}, //2211 #CJK UNIFIED IDEOGRAPH
+ {0x9146, 0x8A6E}, //2212 #CJK UNIFIED IDEOGRAPH
+ {0x9147, 0x8CCE}, //2213 #CJK UNIFIED IDEOGRAPH
+ {0x9148, 0x8DF5}, //2214 #CJK UNIFIED IDEOGRAPH
+ {0x9149, 0x9078}, //2215 #CJK UNIFIED IDEOGRAPH
+ {0x914A, 0x9077}, //2216 #CJK UNIFIED IDEOGRAPH
+ {0x914B, 0x92AD}, //2217 #CJK UNIFIED IDEOGRAPH
+ {0x914C, 0x9291}, //2218 #CJK UNIFIED IDEOGRAPH
+ {0x914D, 0x9583}, //2219 #CJK UNIFIED IDEOGRAPH
+ {0x914E, 0x9BAE}, //2220 #CJK UNIFIED IDEOGRAPH
+ {0x914F, 0x524D}, //2221 #CJK UNIFIED IDEOGRAPH
+ {0x9150, 0x5584}, //2222 #CJK UNIFIED IDEOGRAPH
+ {0x9151, 0x6F38}, //2223 #CJK UNIFIED IDEOGRAPH
+ {0x9152, 0x7136}, //2224 #CJK UNIFIED IDEOGRAPH
+ {0x9153, 0x5168}, //2225 #CJK UNIFIED IDEOGRAPH
+ {0x9154, 0x7985}, //2226 #CJK UNIFIED IDEOGRAPH
+ {0x9155, 0x7E55}, //2227 #CJK UNIFIED IDEOGRAPH
+ {0x9156, 0x81B3}, //2228 #CJK UNIFIED IDEOGRAPH
+ {0x9157, 0x7CCE}, //2229 #CJK UNIFIED IDEOGRAPH
+ {0x9158, 0x564C}, //2230 #CJK UNIFIED IDEOGRAPH
+ {0x9159, 0x5851}, //2231 #CJK UNIFIED IDEOGRAPH
+ {0x915A, 0x5CA8}, //2232 #CJK UNIFIED IDEOGRAPH
+ {0x915B, 0x63AA}, //2233 #CJK UNIFIED IDEOGRAPH
+ {0x915C, 0x66FE}, //2234 #CJK UNIFIED IDEOGRAPH
+ {0x915D, 0x66FD}, //2235 #CJK UNIFIED IDEOGRAPH
+ {0x915E, 0x695A}, //2236 #CJK UNIFIED IDEOGRAPH
+ {0x915F, 0x72D9}, //2237 #CJK UNIFIED IDEOGRAPH
+ {0x9160, 0x758F}, //2238 #CJK UNIFIED IDEOGRAPH
+ {0x9161, 0x758E}, //2239 #CJK UNIFIED IDEOGRAPH
+ {0x9162, 0x790E}, //2240 #CJK UNIFIED IDEOGRAPH
+ {0x9163, 0x7956}, //2241 #CJK UNIFIED IDEOGRAPH
+ {0x9164, 0x79DF}, //2242 #CJK UNIFIED IDEOGRAPH
+ {0x9165, 0x7C97}, //2243 #CJK UNIFIED IDEOGRAPH
+ {0x9166, 0x7D20}, //2244 #CJK UNIFIED IDEOGRAPH
+ {0x9167, 0x7D44}, //2245 #CJK UNIFIED IDEOGRAPH
+ {0x9168, 0x8607}, //2246 #CJK UNIFIED IDEOGRAPH
+ {0x9169, 0x8A34}, //2247 #CJK UNIFIED IDEOGRAPH
+ {0x916A, 0x963B}, //2248 #CJK UNIFIED IDEOGRAPH
+ {0x916B, 0x9061}, //2249 #CJK UNIFIED IDEOGRAPH
+ {0x916C, 0x9F20}, //2250 #CJK UNIFIED IDEOGRAPH
+ {0x916D, 0x50E7}, //2251 #CJK UNIFIED IDEOGRAPH
+ {0x916E, 0x5275}, //2252 #CJK UNIFIED IDEOGRAPH
+ {0x916F, 0x53CC}, //2253 #CJK UNIFIED IDEOGRAPH
+ {0x9170, 0x53E2}, //2254 #CJK UNIFIED IDEOGRAPH
+ {0x9171, 0x5009}, //2255 #CJK UNIFIED IDEOGRAPH
+ {0x9172, 0x55AA}, //2256 #CJK UNIFIED IDEOGRAPH
+ {0x9173, 0x58EE}, //2257 #CJK UNIFIED IDEOGRAPH
+ {0x9174, 0x594F}, //2258 #CJK UNIFIED IDEOGRAPH
+ {0x9175, 0x723D}, //2259 #CJK UNIFIED IDEOGRAPH
+ {0x9176, 0x5B8B}, //2260 #CJK UNIFIED IDEOGRAPH
+ {0x9177, 0x5C64}, //2261 #CJK UNIFIED IDEOGRAPH
+ {0x9178, 0x531D}, //2262 #CJK UNIFIED IDEOGRAPH
+ {0x9179, 0x60E3}, //2263 #CJK UNIFIED IDEOGRAPH
+ {0x917A, 0x60F3}, //2264 #CJK UNIFIED IDEOGRAPH
+ {0x917B, 0x635C}, //2265 #CJK UNIFIED IDEOGRAPH
+ {0x917C, 0x6383}, //2266 #CJK UNIFIED IDEOGRAPH
+ {0x917D, 0x633F}, //2267 #CJK UNIFIED IDEOGRAPH
+ {0x917E, 0x63BB}, //2268 #CJK UNIFIED IDEOGRAPH
+ {0x9180, 0x64CD}, //2269 #CJK UNIFIED IDEOGRAPH
+ {0x9181, 0x65E9}, //2270 #CJK UNIFIED IDEOGRAPH
+ {0x9182, 0x66F9}, //2271 #CJK UNIFIED IDEOGRAPH
+ {0x9183, 0x5DE3}, //2272 #CJK UNIFIED IDEOGRAPH
+ {0x9184, 0x69CD}, //2273 #CJK UNIFIED IDEOGRAPH
+ {0x9185, 0x69FD}, //2274 #CJK UNIFIED IDEOGRAPH
+ {0x9186, 0x6F15}, //2275 #CJK UNIFIED IDEOGRAPH
+ {0x9187, 0x71E5}, //2276 #CJK UNIFIED IDEOGRAPH
+ {0x9188, 0x4E89}, //2277 #CJK UNIFIED IDEOGRAPH
+ {0x9189, 0x75E9}, //2278 #CJK UNIFIED IDEOGRAPH
+ {0x918A, 0x76F8}, //2279 #CJK UNIFIED IDEOGRAPH
+ {0x918B, 0x7A93}, //2280 #CJK UNIFIED IDEOGRAPH
+ {0x918C, 0x7CDF}, //2281 #CJK UNIFIED IDEOGRAPH
+ {0x918D, 0x7DCF}, //2282 #CJK UNIFIED IDEOGRAPH
+ {0x918E, 0x7D9C}, //2283 #CJK UNIFIED IDEOGRAPH
+ {0x918F, 0x8061}, //2284 #CJK UNIFIED IDEOGRAPH
+ {0x9190, 0x8349}, //2285 #CJK UNIFIED IDEOGRAPH
+ {0x9191, 0x8358}, //2286 #CJK UNIFIED IDEOGRAPH
+ {0x9192, 0x846C}, //2287 #CJK UNIFIED IDEOGRAPH
+ {0x9193, 0x84BC}, //2288 #CJK UNIFIED IDEOGRAPH
+ {0x9194, 0x85FB}, //2289 #CJK UNIFIED IDEOGRAPH
+ {0x9195, 0x88C5}, //2290 #CJK UNIFIED IDEOGRAPH
+ {0x9196, 0x8D70}, //2291 #CJK UNIFIED IDEOGRAPH
+ {0x9197, 0x9001}, //2292 #CJK UNIFIED IDEOGRAPH
+ {0x9198, 0x906D}, //2293 #CJK UNIFIED IDEOGRAPH
+ {0x9199, 0x9397}, //2294 #CJK UNIFIED IDEOGRAPH
+ {0x919A, 0x971C}, //2295 #CJK UNIFIED IDEOGRAPH
+ {0x919B, 0x9A12}, //2296 #CJK UNIFIED IDEOGRAPH
+ {0x919C, 0x50CF}, //2297 #CJK UNIFIED IDEOGRAPH
+ {0x919D, 0x5897}, //2298 #CJK UNIFIED IDEOGRAPH
+ {0x919E, 0x618E}, //2299 #CJK UNIFIED IDEOGRAPH
+ {0x919F, 0x81D3}, //2300 #CJK UNIFIED IDEOGRAPH
+ {0x91A0, 0x8535}, //2301 #CJK UNIFIED IDEOGRAPH
+ {0x91A1, 0x8D08}, //2302 #CJK UNIFIED IDEOGRAPH
+ {0x91A2, 0x9020}, //2303 #CJK UNIFIED IDEOGRAPH
+ {0x91A3, 0x4FC3}, //2304 #CJK UNIFIED IDEOGRAPH
+ {0x91A4, 0x5074}, //2305 #CJK UNIFIED IDEOGRAPH
+ {0x91A5, 0x5247}, //2306 #CJK UNIFIED IDEOGRAPH
+ {0x91A6, 0x5373}, //2307 #CJK UNIFIED IDEOGRAPH
+ {0x91A7, 0x606F}, //2308 #CJK UNIFIED IDEOGRAPH
+ {0x91A8, 0x6349}, //2309 #CJK UNIFIED IDEOGRAPH
+ {0x91A9, 0x675F}, //2310 #CJK UNIFIED IDEOGRAPH
+ {0x91AA, 0x6E2C}, //2311 #CJK UNIFIED IDEOGRAPH
+ {0x91AB, 0x8DB3}, //2312 #CJK UNIFIED IDEOGRAPH
+ {0x91AC, 0x901F}, //2313 #CJK UNIFIED IDEOGRAPH
+ {0x91AD, 0x4FD7}, //2314 #CJK UNIFIED IDEOGRAPH
+ {0x91AE, 0x5C5E}, //2315 #CJK UNIFIED IDEOGRAPH
+ {0x91AF, 0x8CCA}, //2316 #CJK UNIFIED IDEOGRAPH
+ {0x91B0, 0x65CF}, //2317 #CJK UNIFIED IDEOGRAPH
+ {0x91B1, 0x7D9A}, //2318 #CJK UNIFIED IDEOGRAPH
+ {0x91B2, 0x5352}, //2319 #CJK UNIFIED IDEOGRAPH
+ {0x91B3, 0x8896}, //2320 #CJK UNIFIED IDEOGRAPH
+ {0x91B4, 0x5176}, //2321 #CJK UNIFIED IDEOGRAPH
+ {0x91B5, 0x63C3}, //2322 #CJK UNIFIED IDEOGRAPH
+ {0x91B6, 0x5B58}, //2323 #CJK UNIFIED IDEOGRAPH
+ {0x91B7, 0x5B6B}, //2324 #CJK UNIFIED IDEOGRAPH
+ {0x91B8, 0x5C0A}, //2325 #CJK UNIFIED IDEOGRAPH
+ {0x91B9, 0x640D}, //2326 #CJK UNIFIED IDEOGRAPH
+ {0x91BA, 0x6751}, //2327 #CJK UNIFIED IDEOGRAPH
+ {0x91BB, 0x905C}, //2328 #CJK UNIFIED IDEOGRAPH
+ {0x91BC, 0x4ED6}, //2329 #CJK UNIFIED IDEOGRAPH
+ {0x91BD, 0x591A}, //2330 #CJK UNIFIED IDEOGRAPH
+ {0x91BE, 0x592A}, //2331 #CJK UNIFIED IDEOGRAPH
+ {0x91BF, 0x6C70}, //2332 #CJK UNIFIED IDEOGRAPH
+ {0x91C0, 0x8A51}, //2333 #CJK UNIFIED IDEOGRAPH
+ {0x91C1, 0x553E}, //2334 #CJK UNIFIED IDEOGRAPH
+ {0x91C2, 0x5815}, //2335 #CJK UNIFIED IDEOGRAPH
+ {0x91C3, 0x59A5}, //2336 #CJK UNIFIED IDEOGRAPH
+ {0x91C4, 0x60F0}, //2337 #CJK UNIFIED IDEOGRAPH
+ {0x91C5, 0x6253}, //2338 #CJK UNIFIED IDEOGRAPH
+ {0x91C6, 0x67C1}, //2339 #CJK UNIFIED IDEOGRAPH
+ {0x91C7, 0x8235}, //2340 #CJK UNIFIED IDEOGRAPH
+ {0x91C8, 0x6955}, //2341 #CJK UNIFIED IDEOGRAPH
+ {0x91C9, 0x9640}, //2342 #CJK UNIFIED IDEOGRAPH
+ {0x91CA, 0x99C4}, //2343 #CJK UNIFIED IDEOGRAPH
+ {0x91CB, 0x9A28}, //2344 #CJK UNIFIED IDEOGRAPH
+ {0x91CC, 0x4F53}, //2345 #CJK UNIFIED IDEOGRAPH
+ {0x91CD, 0x5806}, //2346 #CJK UNIFIED IDEOGRAPH
+ {0x91CE, 0x5BFE}, //2347 #CJK UNIFIED IDEOGRAPH
+ {0x91CF, 0x8010}, //2348 #CJK UNIFIED IDEOGRAPH
+ {0x91D0, 0x5CB1}, //2349 #CJK UNIFIED IDEOGRAPH
+ {0x91D1, 0x5E2F}, //2350 #CJK UNIFIED IDEOGRAPH
+ {0x91D2, 0x5F85}, //2351 #CJK UNIFIED IDEOGRAPH
+ {0x91D3, 0x6020}, //2352 #CJK UNIFIED IDEOGRAPH
+ {0x91D4, 0x614B}, //2353 #CJK UNIFIED IDEOGRAPH
+ {0x91D5, 0x6234}, //2354 #CJK UNIFIED IDEOGRAPH
+ {0x91D6, 0x66FF}, //2355 #CJK UNIFIED IDEOGRAPH
+ {0x91D7, 0x6CF0}, //2356 #CJK UNIFIED IDEOGRAPH
+ {0x91D8, 0x6EDE}, //2357 #CJK UNIFIED IDEOGRAPH
+ {0x91D9, 0x80CE}, //2358 #CJK UNIFIED IDEOGRAPH
+ {0x91DA, 0x817F}, //2359 #CJK UNIFIED IDEOGRAPH
+ {0x91DB, 0x82D4}, //2360 #CJK UNIFIED IDEOGRAPH
+ {0x91DC, 0x888B}, //2361 #CJK UNIFIED IDEOGRAPH
+ {0x91DD, 0x8CB8}, //2362 #CJK UNIFIED IDEOGRAPH
+ {0x91DE, 0x9000}, //2363 #CJK UNIFIED IDEOGRAPH
+ {0x91DF, 0x902E}, //2364 #CJK UNIFIED IDEOGRAPH
+ {0x91E0, 0x968A}, //2365 #CJK UNIFIED IDEOGRAPH
+ {0x91E1, 0x9EDB}, //2366 #CJK UNIFIED IDEOGRAPH
+ {0x91E2, 0x9BDB}, //2367 #CJK UNIFIED IDEOGRAPH
+ {0x91E3, 0x4EE3}, //2368 #CJK UNIFIED IDEOGRAPH
+ {0x91E4, 0x53F0}, //2369 #CJK UNIFIED IDEOGRAPH
+ {0x91E5, 0x5927}, //2370 #CJK UNIFIED IDEOGRAPH
+ {0x91E6, 0x7B2C}, //2371 #CJK UNIFIED IDEOGRAPH
+ {0x91E7, 0x918D}, //2372 #CJK UNIFIED IDEOGRAPH
+ {0x91E8, 0x984C}, //2373 #CJK UNIFIED IDEOGRAPH
+ {0x91E9, 0x9DF9}, //2374 #CJK UNIFIED IDEOGRAPH
+ {0x91EA, 0x6EDD}, //2375 #CJK UNIFIED IDEOGRAPH
+ {0x91EB, 0x7027}, //2376 #CJK UNIFIED IDEOGRAPH
+ {0x91EC, 0x5353}, //2377 #CJK UNIFIED IDEOGRAPH
+ {0x91ED, 0x5544}, //2378 #CJK UNIFIED IDEOGRAPH
+ {0x91EE, 0x5B85}, //2379 #CJK UNIFIED IDEOGRAPH
+ {0x91EF, 0x6258}, //2380 #CJK UNIFIED IDEOGRAPH
+ {0x91F0, 0x629E}, //2381 #CJK UNIFIED IDEOGRAPH
+ {0x91F1, 0x62D3}, //2382 #CJK UNIFIED IDEOGRAPH
+ {0x91F2, 0x6CA2}, //2383 #CJK UNIFIED IDEOGRAPH
+ {0x91F3, 0x6FEF}, //2384 #CJK UNIFIED IDEOGRAPH
+ {0x91F4, 0x7422}, //2385 #CJK UNIFIED IDEOGRAPH
+ {0x91F5, 0x8A17}, //2386 #CJK UNIFIED IDEOGRAPH
+ {0x91F6, 0x9438}, //2387 #CJK UNIFIED IDEOGRAPH
+ {0x91F7, 0x6FC1}, //2388 #CJK UNIFIED IDEOGRAPH
+ {0x91F8, 0x8AFE}, //2389 #CJK UNIFIED IDEOGRAPH
+ {0x91F9, 0x8338}, //2390 #CJK UNIFIED IDEOGRAPH
+ {0x91FA, 0x51E7}, //2391 #CJK UNIFIED IDEOGRAPH
+ {0x91FB, 0x86F8}, //2392 #CJK UNIFIED IDEOGRAPH
+ {0x91FC, 0x53EA}, //2393 #CJK UNIFIED IDEOGRAPH
+ {0x9240, 0x53E9}, //2394 #CJK UNIFIED IDEOGRAPH
+ {0x9241, 0x4F46}, //2395 #CJK UNIFIED IDEOGRAPH
+ {0x9242, 0x9054}, //2396 #CJK UNIFIED IDEOGRAPH
+ {0x9243, 0x8FB0}, //2397 #CJK UNIFIED IDEOGRAPH
+ {0x9244, 0x596A}, //2398 #CJK UNIFIED IDEOGRAPH
+ {0x9245, 0x8131}, //2399 #CJK UNIFIED IDEOGRAPH
+ {0x9246, 0x5DFD}, //2400 #CJK UNIFIED IDEOGRAPH
+ {0x9247, 0x7AEA}, //2401 #CJK UNIFIED IDEOGRAPH
+ {0x9248, 0x8FBF}, //2402 #CJK UNIFIED IDEOGRAPH
+ {0x9249, 0x68DA}, //2403 #CJK UNIFIED IDEOGRAPH
+ {0x924A, 0x8C37}, //2404 #CJK UNIFIED IDEOGRAPH
+ {0x924B, 0x72F8}, //2405 #CJK UNIFIED IDEOGRAPH
+ {0x924C, 0x9C48}, //2406 #CJK UNIFIED IDEOGRAPH
+ {0x924D, 0x6A3D}, //2407 #CJK UNIFIED IDEOGRAPH
+ {0x924E, 0x8AB0}, //2408 #CJK UNIFIED IDEOGRAPH
+ {0x924F, 0x4E39}, //2409 #CJK UNIFIED IDEOGRAPH
+ {0x9250, 0x5358}, //2410 #CJK UNIFIED IDEOGRAPH
+ {0x9251, 0x5606}, //2411 #CJK UNIFIED IDEOGRAPH
+ {0x9252, 0x5766}, //2412 #CJK UNIFIED IDEOGRAPH
+ {0x9253, 0x62C5}, //2413 #CJK UNIFIED IDEOGRAPH
+ {0x9254, 0x63A2}, //2414 #CJK UNIFIED IDEOGRAPH
+ {0x9255, 0x65E6}, //2415 #CJK UNIFIED IDEOGRAPH
+ {0x9256, 0x6B4E}, //2416 #CJK UNIFIED IDEOGRAPH
+ {0x9257, 0x6DE1}, //2417 #CJK UNIFIED IDEOGRAPH
+ {0x9258, 0x6E5B}, //2418 #CJK UNIFIED IDEOGRAPH
+ {0x9259, 0x70AD}, //2419 #CJK UNIFIED IDEOGRAPH
+ {0x925A, 0x77ED}, //2420 #CJK UNIFIED IDEOGRAPH
+ {0x925B, 0x7AEF}, //2421 #CJK UNIFIED IDEOGRAPH
+ {0x925C, 0x7BAA}, //2422 #CJK UNIFIED IDEOGRAPH
+ {0x925D, 0x7DBB}, //2423 #CJK UNIFIED IDEOGRAPH
+ {0x925E, 0x803D}, //2424 #CJK UNIFIED IDEOGRAPH
+ {0x925F, 0x80C6}, //2425 #CJK UNIFIED IDEOGRAPH
+ {0x9260, 0x86CB}, //2426 #CJK UNIFIED IDEOGRAPH
+ {0x9261, 0x8A95}, //2427 #CJK UNIFIED IDEOGRAPH
+ {0x9262, 0x935B}, //2428 #CJK UNIFIED IDEOGRAPH
+ {0x9263, 0x56E3}, //2429 #CJK UNIFIED IDEOGRAPH
+ {0x9264, 0x58C7}, //2430 #CJK UNIFIED IDEOGRAPH
+ {0x9265, 0x5F3E}, //2431 #CJK UNIFIED IDEOGRAPH
+ {0x9266, 0x65AD}, //2432 #CJK UNIFIED IDEOGRAPH
+ {0x9267, 0x6696}, //2433 #CJK UNIFIED IDEOGRAPH
+ {0x9268, 0x6A80}, //2434 #CJK UNIFIED IDEOGRAPH
+ {0x9269, 0x6BB5}, //2435 #CJK UNIFIED IDEOGRAPH
+ {0x926A, 0x7537}, //2436 #CJK UNIFIED IDEOGRAPH
+ {0x926B, 0x8AC7}, //2437 #CJK UNIFIED IDEOGRAPH
+ {0x926C, 0x5024}, //2438 #CJK UNIFIED IDEOGRAPH
+ {0x926D, 0x77E5}, //2439 #CJK UNIFIED IDEOGRAPH
+ {0x926E, 0x5730}, //2440 #CJK UNIFIED IDEOGRAPH
+ {0x926F, 0x5F1B}, //2441 #CJK UNIFIED IDEOGRAPH
+ {0x9270, 0x6065}, //2442 #CJK UNIFIED IDEOGRAPH
+ {0x9271, 0x667A}, //2443 #CJK UNIFIED IDEOGRAPH
+ {0x9272, 0x6C60}, //2444 #CJK UNIFIED IDEOGRAPH
+ {0x9273, 0x75F4}, //2445 #CJK UNIFIED IDEOGRAPH
+ {0x9274, 0x7A1A}, //2446 #CJK UNIFIED IDEOGRAPH
+ {0x9275, 0x7F6E}, //2447 #CJK UNIFIED IDEOGRAPH
+ {0x9276, 0x81F4}, //2448 #CJK UNIFIED IDEOGRAPH
+ {0x9277, 0x8718}, //2449 #CJK UNIFIED IDEOGRAPH
+ {0x9278, 0x9045}, //2450 #CJK UNIFIED IDEOGRAPH
+ {0x9279, 0x99B3}, //2451 #CJK UNIFIED IDEOGRAPH
+ {0x927A, 0x7BC9}, //2452 #CJK UNIFIED IDEOGRAPH
+ {0x927B, 0x755C}, //2453 #CJK UNIFIED IDEOGRAPH
+ {0x927C, 0x7AF9}, //2454 #CJK UNIFIED IDEOGRAPH
+ {0x927D, 0x7B51}, //2455 #CJK UNIFIED IDEOGRAPH
+ {0x927E, 0x84C4}, //2456 #CJK UNIFIED IDEOGRAPH
+ {0x9280, 0x9010}, //2457 #CJK UNIFIED IDEOGRAPH
+ {0x9281, 0x79E9}, //2458 #CJK UNIFIED IDEOGRAPH
+ {0x9282, 0x7A92}, //2459 #CJK UNIFIED IDEOGRAPH
+ {0x9283, 0x8336}, //2460 #CJK UNIFIED IDEOGRAPH
+ {0x9284, 0x5AE1}, //2461 #CJK UNIFIED IDEOGRAPH
+ {0x9285, 0x7740}, //2462 #CJK UNIFIED IDEOGRAPH
+ {0x9286, 0x4E2D}, //2463 #CJK UNIFIED IDEOGRAPH
+ {0x9287, 0x4EF2}, //2464 #CJK UNIFIED IDEOGRAPH
+ {0x9288, 0x5B99}, //2465 #CJK UNIFIED IDEOGRAPH
+ {0x9289, 0x5FE0}, //2466 #CJK UNIFIED IDEOGRAPH
+ {0x928A, 0x62BD}, //2467 #CJK UNIFIED IDEOGRAPH
+ {0x928B, 0x663C}, //2468 #CJK UNIFIED IDEOGRAPH
+ {0x928C, 0x67F1}, //2469 #CJK UNIFIED IDEOGRAPH
+ {0x928D, 0x6CE8}, //2470 #CJK UNIFIED IDEOGRAPH
+ {0x928E, 0x866B}, //2471 #CJK UNIFIED IDEOGRAPH
+ {0x928F, 0x8877}, //2472 #CJK UNIFIED IDEOGRAPH
+ {0x9290, 0x8A3B}, //2473 #CJK UNIFIED IDEOGRAPH
+ {0x9291, 0x914E}, //2474 #CJK UNIFIED IDEOGRAPH
+ {0x9292, 0x92F3}, //2475 #CJK UNIFIED IDEOGRAPH
+ {0x9293, 0x99D0}, //2476 #CJK UNIFIED IDEOGRAPH
+ {0x9294, 0x6A17}, //2477 #CJK UNIFIED IDEOGRAPH
+ {0x9295, 0x7026}, //2478 #CJK UNIFIED IDEOGRAPH
+ {0x9296, 0x732A}, //2479 #CJK UNIFIED IDEOGRAPH
+ {0x9297, 0x82E7}, //2480 #CJK UNIFIED IDEOGRAPH
+ {0x9298, 0x8457}, //2481 #CJK UNIFIED IDEOGRAPH
+ {0x9299, 0x8CAF}, //2482 #CJK UNIFIED IDEOGRAPH
+ {0x929A, 0x4E01}, //2483 #CJK UNIFIED IDEOGRAPH
+ {0x929B, 0x5146}, //2484 #CJK UNIFIED IDEOGRAPH
+ {0x929C, 0x51CB}, //2485 #CJK UNIFIED IDEOGRAPH
+ {0x929D, 0x558B}, //2486 #CJK UNIFIED IDEOGRAPH
+ {0x929E, 0x5BF5}, //2487 #CJK UNIFIED IDEOGRAPH
+ {0x929F, 0x5E16}, //2488 #CJK UNIFIED IDEOGRAPH
+ {0x92A0, 0x5E33}, //2489 #CJK UNIFIED IDEOGRAPH
+ {0x92A1, 0x5E81}, //2490 #CJK UNIFIED IDEOGRAPH
+ {0x92A2, 0x5F14}, //2491 #CJK UNIFIED IDEOGRAPH
+ {0x92A3, 0x5F35}, //2492 #CJK UNIFIED IDEOGRAPH
+ {0x92A4, 0x5F6B}, //2493 #CJK UNIFIED IDEOGRAPH
+ {0x92A5, 0x5FB4}, //2494 #CJK UNIFIED IDEOGRAPH
+ {0x92A6, 0x61F2}, //2495 #CJK UNIFIED IDEOGRAPH
+ {0x92A7, 0x6311}, //2496 #CJK UNIFIED IDEOGRAPH
+ {0x92A8, 0x66A2}, //2497 #CJK UNIFIED IDEOGRAPH
+ {0x92A9, 0x671D}, //2498 #CJK UNIFIED IDEOGRAPH
+ {0x92AA, 0x6F6E}, //2499 #CJK UNIFIED IDEOGRAPH
+ {0x92AB, 0x7252}, //2500 #CJK UNIFIED IDEOGRAPH
+ {0x92AC, 0x753A}, //2501 #CJK UNIFIED IDEOGRAPH
+ {0x92AD, 0x773A}, //2502 #CJK UNIFIED IDEOGRAPH
+ {0x92AE, 0x8074}, //2503 #CJK UNIFIED IDEOGRAPH
+ {0x92AF, 0x8139}, //2504 #CJK UNIFIED IDEOGRAPH
+ {0x92B0, 0x8178}, //2505 #CJK UNIFIED IDEOGRAPH
+ {0x92B1, 0x8776}, //2506 #CJK UNIFIED IDEOGRAPH
+ {0x92B2, 0x8ABF}, //2507 #CJK UNIFIED IDEOGRAPH
+ {0x92B3, 0x8ADC}, //2508 #CJK UNIFIED IDEOGRAPH
+ {0x92B4, 0x8D85}, //2509 #CJK UNIFIED IDEOGRAPH
+ {0x92B5, 0x8DF3}, //2510 #CJK UNIFIED IDEOGRAPH
+ {0x92B6, 0x929A}, //2511 #CJK UNIFIED IDEOGRAPH
+ {0x92B7, 0x9577}, //2512 #CJK UNIFIED IDEOGRAPH
+ {0x92B8, 0x9802}, //2513 #CJK UNIFIED IDEOGRAPH
+ {0x92B9, 0x9CE5}, //2514 #CJK UNIFIED IDEOGRAPH
+ {0x92BA, 0x52C5}, //2515 #CJK UNIFIED IDEOGRAPH
+ {0x92BB, 0x6357}, //2516 #CJK UNIFIED IDEOGRAPH
+ {0x92BC, 0x76F4}, //2517 #CJK UNIFIED IDEOGRAPH
+ {0x92BD, 0x6715}, //2518 #CJK UNIFIED IDEOGRAPH
+ {0x92BE, 0x6C88}, //2519 #CJK UNIFIED IDEOGRAPH
+ {0x92BF, 0x73CD}, //2520 #CJK UNIFIED IDEOGRAPH
+ {0x92C0, 0x8CC3}, //2521 #CJK UNIFIED IDEOGRAPH
+ {0x92C1, 0x93AE}, //2522 #CJK UNIFIED IDEOGRAPH
+ {0x92C2, 0x9673}, //2523 #CJK UNIFIED IDEOGRAPH
+ {0x92C3, 0x6D25}, //2524 #CJK UNIFIED IDEOGRAPH
+ {0x92C4, 0x589C}, //2525 #CJK UNIFIED IDEOGRAPH
+ {0x92C5, 0x690E}, //2526 #CJK UNIFIED IDEOGRAPH
+ {0x92C6, 0x69CC}, //2527 #CJK UNIFIED IDEOGRAPH
+ {0x92C7, 0x8FFD}, //2528 #CJK UNIFIED IDEOGRAPH
+ {0x92C8, 0x939A}, //2529 #CJK UNIFIED IDEOGRAPH
+ {0x92C9, 0x75DB}, //2530 #CJK UNIFIED IDEOGRAPH
+ {0x92CA, 0x901A}, //2531 #CJK UNIFIED IDEOGRAPH
+ {0x92CB, 0x585A}, //2532 #CJK UNIFIED IDEOGRAPH
+ {0x92CC, 0x6802}, //2533 #CJK UNIFIED IDEOGRAPH
+ {0x92CD, 0x63B4}, //2534 #CJK UNIFIED IDEOGRAPH
+ {0x92CE, 0x69FB}, //2535 #CJK UNIFIED IDEOGRAPH
+ {0x92CF, 0x4F43}, //2536 #CJK UNIFIED IDEOGRAPH
+ {0x92D0, 0x6F2C}, //2537 #CJK UNIFIED IDEOGRAPH
+ {0x92D1, 0x67D8}, //2538 #CJK UNIFIED IDEOGRAPH
+ {0x92D2, 0x8FBB}, //2539 #CJK UNIFIED IDEOGRAPH
+ {0x92D3, 0x8526}, //2540 #CJK UNIFIED IDEOGRAPH
+ {0x92D4, 0x7DB4}, //2541 #CJK UNIFIED IDEOGRAPH
+ {0x92D5, 0x9354}, //2542 #CJK UNIFIED IDEOGRAPH
+ {0x92D6, 0x693F}, //2543 #CJK UNIFIED IDEOGRAPH
+ {0x92D7, 0x6F70}, //2544 #CJK UNIFIED IDEOGRAPH
+ {0x92D8, 0x576A}, //2545 #CJK UNIFIED IDEOGRAPH
+ {0x92D9, 0x58F7}, //2546 #CJK UNIFIED IDEOGRAPH
+ {0x92DA, 0x5B2C}, //2547 #CJK UNIFIED IDEOGRAPH
+ {0x92DB, 0x7D2C}, //2548 #CJK UNIFIED IDEOGRAPH
+ {0x92DC, 0x722A}, //2549 #CJK UNIFIED IDEOGRAPH
+ {0x92DD, 0x540A}, //2550 #CJK UNIFIED IDEOGRAPH
+ {0x92DE, 0x91E3}, //2551 #CJK UNIFIED IDEOGRAPH
+ {0x92DF, 0x9DB4}, //2552 #CJK UNIFIED IDEOGRAPH
+ {0x92E0, 0x4EAD}, //2553 #CJK UNIFIED IDEOGRAPH
+ {0x92E1, 0x4F4E}, //2554 #CJK UNIFIED IDEOGRAPH
+ {0x92E2, 0x505C}, //2555 #CJK UNIFIED IDEOGRAPH
+ {0x92E3, 0x5075}, //2556 #CJK UNIFIED IDEOGRAPH
+ {0x92E4, 0x5243}, //2557 #CJK UNIFIED IDEOGRAPH
+ {0x92E5, 0x8C9E}, //2558 #CJK UNIFIED IDEOGRAPH
+ {0x92E6, 0x5448}, //2559 #CJK UNIFIED IDEOGRAPH
+ {0x92E7, 0x5824}, //2560 #CJK UNIFIED IDEOGRAPH
+ {0x92E8, 0x5B9A}, //2561 #CJK UNIFIED IDEOGRAPH
+ {0x92E9, 0x5E1D}, //2562 #CJK UNIFIED IDEOGRAPH
+ {0x92EA, 0x5E95}, //2563 #CJK UNIFIED IDEOGRAPH
+ {0x92EB, 0x5EAD}, //2564 #CJK UNIFIED IDEOGRAPH
+ {0x92EC, 0x5EF7}, //2565 #CJK UNIFIED IDEOGRAPH
+ {0x92ED, 0x5F1F}, //2566 #CJK UNIFIED IDEOGRAPH
+ {0x92EE, 0x608C}, //2567 #CJK UNIFIED IDEOGRAPH
+ {0x92EF, 0x62B5}, //2568 #CJK UNIFIED IDEOGRAPH
+ {0x92F0, 0x633A}, //2569 #CJK UNIFIED IDEOGRAPH
+ {0x92F1, 0x63D0}, //2570 #CJK UNIFIED IDEOGRAPH
+ {0x92F2, 0x68AF}, //2571 #CJK UNIFIED IDEOGRAPH
+ {0x92F3, 0x6C40}, //2572 #CJK UNIFIED IDEOGRAPH
+ {0x92F4, 0x7887}, //2573 #CJK UNIFIED IDEOGRAPH
+ {0x92F5, 0x798E}, //2574 #CJK UNIFIED IDEOGRAPH
+ {0x92F6, 0x7A0B}, //2575 #CJK UNIFIED IDEOGRAPH
+ {0x92F7, 0x7DE0}, //2576 #CJK UNIFIED IDEOGRAPH
+ {0x92F8, 0x8247}, //2577 #CJK UNIFIED IDEOGRAPH
+ {0x92F9, 0x8A02}, //2578 #CJK UNIFIED IDEOGRAPH
+ {0x92FA, 0x8AE6}, //2579 #CJK UNIFIED IDEOGRAPH
+ {0x92FB, 0x8E44}, //2580 #CJK UNIFIED IDEOGRAPH
+ {0x92FC, 0x9013}, //2581 #CJK UNIFIED IDEOGRAPH
+ {0x9340, 0x90B8}, //2582 #CJK UNIFIED IDEOGRAPH
+ {0x9341, 0x912D}, //2583 #CJK UNIFIED IDEOGRAPH
+ {0x9342, 0x91D8}, //2584 #CJK UNIFIED IDEOGRAPH
+ {0x9343, 0x9F0E}, //2585 #CJK UNIFIED IDEOGRAPH
+ {0x9344, 0x6CE5}, //2586 #CJK UNIFIED IDEOGRAPH
+ {0x9345, 0x6458}, //2587 #CJK UNIFIED IDEOGRAPH
+ {0x9346, 0x64E2}, //2588 #CJK UNIFIED IDEOGRAPH
+ {0x9347, 0x6575}, //2589 #CJK UNIFIED IDEOGRAPH
+ {0x9348, 0x6EF4}, //2590 #CJK UNIFIED IDEOGRAPH
+ {0x9349, 0x7684}, //2591 #CJK UNIFIED IDEOGRAPH
+ {0x934A, 0x7B1B}, //2592 #CJK UNIFIED IDEOGRAPH
+ {0x934B, 0x9069}, //2593 #CJK UNIFIED IDEOGRAPH
+ {0x934C, 0x93D1}, //2594 #CJK UNIFIED IDEOGRAPH
+ {0x934D, 0x6EBA}, //2595 #CJK UNIFIED IDEOGRAPH
+ {0x934E, 0x54F2}, //2596 #CJK UNIFIED IDEOGRAPH
+ {0x934F, 0x5FB9}, //2597 #CJK UNIFIED IDEOGRAPH
+ {0x9350, 0x64A4}, //2598 #CJK UNIFIED IDEOGRAPH
+ {0x9351, 0x8F4D}, //2599 #CJK UNIFIED IDEOGRAPH
+ {0x9352, 0x8FED}, //2600 #CJK UNIFIED IDEOGRAPH
+ {0x9353, 0x9244}, //2601 #CJK UNIFIED IDEOGRAPH
+ {0x9354, 0x5178}, //2602 #CJK UNIFIED IDEOGRAPH
+ {0x9355, 0x586B}, //2603 #CJK UNIFIED IDEOGRAPH
+ {0x9356, 0x5929}, //2604 #CJK UNIFIED IDEOGRAPH
+ {0x9357, 0x5C55}, //2605 #CJK UNIFIED IDEOGRAPH
+ {0x9358, 0x5E97}, //2606 #CJK UNIFIED IDEOGRAPH
+ {0x9359, 0x6DFB}, //2607 #CJK UNIFIED IDEOGRAPH
+ {0x935A, 0x7E8F}, //2608 #CJK UNIFIED IDEOGRAPH
+ {0x935B, 0x751C}, //2609 #CJK UNIFIED IDEOGRAPH
+ {0x935C, 0x8CBC}, //2610 #CJK UNIFIED IDEOGRAPH
+ {0x935D, 0x8EE2}, //2611 #CJK UNIFIED IDEOGRAPH
+ {0x935E, 0x985B}, //2612 #CJK UNIFIED IDEOGRAPH
+ {0x935F, 0x70B9}, //2613 #CJK UNIFIED IDEOGRAPH
+ {0x9360, 0x4F1D}, //2614 #CJK UNIFIED IDEOGRAPH
+ {0x9361, 0x6BBF}, //2615 #CJK UNIFIED IDEOGRAPH
+ {0x9362, 0x6FB1}, //2616 #CJK UNIFIED IDEOGRAPH
+ {0x9363, 0x7530}, //2617 #CJK UNIFIED IDEOGRAPH
+ {0x9364, 0x96FB}, //2618 #CJK UNIFIED IDEOGRAPH
+ {0x9365, 0x514E}, //2619 #CJK UNIFIED IDEOGRAPH
+ {0x9366, 0x5410}, //2620 #CJK UNIFIED IDEOGRAPH
+ {0x9367, 0x5835}, //2621 #CJK UNIFIED IDEOGRAPH
+ {0x9368, 0x5857}, //2622 #CJK UNIFIED IDEOGRAPH
+ {0x9369, 0x59AC}, //2623 #CJK UNIFIED IDEOGRAPH
+ {0x936A, 0x5C60}, //2624 #CJK UNIFIED IDEOGRAPH
+ {0x936B, 0x5F92}, //2625 #CJK UNIFIED IDEOGRAPH
+ {0x936C, 0x6597}, //2626 #CJK UNIFIED IDEOGRAPH
+ {0x936D, 0x675C}, //2627 #CJK UNIFIED IDEOGRAPH
+ {0x936E, 0x6E21}, //2628 #CJK UNIFIED IDEOGRAPH
+ {0x936F, 0x767B}, //2629 #CJK UNIFIED IDEOGRAPH
+ {0x9370, 0x83DF}, //2630 #CJK UNIFIED IDEOGRAPH
+ {0x9371, 0x8CED}, //2631 #CJK UNIFIED IDEOGRAPH
+ {0x9372, 0x9014}, //2632 #CJK UNIFIED IDEOGRAPH
+ {0x9373, 0x90FD}, //2633 #CJK UNIFIED IDEOGRAPH
+ {0x9374, 0x934D}, //2634 #CJK UNIFIED IDEOGRAPH
+ {0x9375, 0x7825}, //2635 #CJK UNIFIED IDEOGRAPH
+ {0x9376, 0x783A}, //2636 #CJK UNIFIED IDEOGRAPH
+ {0x9377, 0x52AA}, //2637 #CJK UNIFIED IDEOGRAPH
+ {0x9378, 0x5EA6}, //2638 #CJK UNIFIED IDEOGRAPH
+ {0x9379, 0x571F}, //2639 #CJK UNIFIED IDEOGRAPH
+ {0x937A, 0x5974}, //2640 #CJK UNIFIED IDEOGRAPH
+ {0x937B, 0x6012}, //2641 #CJK UNIFIED IDEOGRAPH
+ {0x937C, 0x5012}, //2642 #CJK UNIFIED IDEOGRAPH
+ {0x937D, 0x515A}, //2643 #CJK UNIFIED IDEOGRAPH
+ {0x937E, 0x51AC}, //2644 #CJK UNIFIED IDEOGRAPH
+ {0x9380, 0x51CD}, //2645 #CJK UNIFIED IDEOGRAPH
+ {0x9381, 0x5200}, //2646 #CJK UNIFIED IDEOGRAPH
+ {0x9382, 0x5510}, //2647 #CJK UNIFIED IDEOGRAPH
+ {0x9383, 0x5854}, //2648 #CJK UNIFIED IDEOGRAPH
+ {0x9384, 0x5858}, //2649 #CJK UNIFIED IDEOGRAPH
+ {0x9385, 0x5957}, //2650 #CJK UNIFIED IDEOGRAPH
+ {0x9386, 0x5B95}, //2651 #CJK UNIFIED IDEOGRAPH
+ {0x9387, 0x5CF6}, //2652 #CJK UNIFIED IDEOGRAPH
+ {0x9388, 0x5D8B}, //2653 #CJK UNIFIED IDEOGRAPH
+ {0x9389, 0x60BC}, //2654 #CJK UNIFIED IDEOGRAPH
+ {0x938A, 0x6295}, //2655 #CJK UNIFIED IDEOGRAPH
+ {0x938B, 0x642D}, //2656 #CJK UNIFIED IDEOGRAPH
+ {0x938C, 0x6771}, //2657 #CJK UNIFIED IDEOGRAPH
+ {0x938D, 0x6843}, //2658 #CJK UNIFIED IDEOGRAPH
+ {0x938E, 0x68BC}, //2659 #CJK UNIFIED IDEOGRAPH
+ {0x938F, 0x68DF}, //2660 #CJK UNIFIED IDEOGRAPH
+ {0x9390, 0x76D7}, //2661 #CJK UNIFIED IDEOGRAPH
+ {0x9391, 0x6DD8}, //2662 #CJK UNIFIED IDEOGRAPH
+ {0x9392, 0x6E6F}, //2663 #CJK UNIFIED IDEOGRAPH
+ {0x9393, 0x6D9B}, //2664 #CJK UNIFIED IDEOGRAPH
+ {0x9394, 0x706F}, //2665 #CJK UNIFIED IDEOGRAPH
+ {0x9395, 0x71C8}, //2666 #CJK UNIFIED IDEOGRAPH
+ {0x9396, 0x5F53}, //2667 #CJK UNIFIED IDEOGRAPH
+ {0x9397, 0x75D8}, //2668 #CJK UNIFIED IDEOGRAPH
+ {0x9398, 0x7977}, //2669 #CJK UNIFIED IDEOGRAPH
+ {0x9399, 0x7B49}, //2670 #CJK UNIFIED IDEOGRAPH
+ {0x939A, 0x7B54}, //2671 #CJK UNIFIED IDEOGRAPH
+ {0x939B, 0x7B52}, //2672 #CJK UNIFIED IDEOGRAPH
+ {0x939C, 0x7CD6}, //2673 #CJK UNIFIED IDEOGRAPH
+ {0x939D, 0x7D71}, //2674 #CJK UNIFIED IDEOGRAPH
+ {0x939E, 0x5230}, //2675 #CJK UNIFIED IDEOGRAPH
+ {0x939F, 0x8463}, //2676 #CJK UNIFIED IDEOGRAPH
+ {0x93A0, 0x8569}, //2677 #CJK UNIFIED IDEOGRAPH
+ {0x93A1, 0x85E4}, //2678 #CJK UNIFIED IDEOGRAPH
+ {0x93A2, 0x8A0E}, //2679 #CJK UNIFIED IDEOGRAPH
+ {0x93A3, 0x8B04}, //2680 #CJK UNIFIED IDEOGRAPH
+ {0x93A4, 0x8C46}, //2681 #CJK UNIFIED IDEOGRAPH
+ {0x93A5, 0x8E0F}, //2682 #CJK UNIFIED IDEOGRAPH
+ {0x93A6, 0x9003}, //2683 #CJK UNIFIED IDEOGRAPH
+ {0x93A7, 0x900F}, //2684 #CJK UNIFIED IDEOGRAPH
+ {0x93A8, 0x9419}, //2685 #CJK UNIFIED IDEOGRAPH
+ {0x93A9, 0x9676}, //2686 #CJK UNIFIED IDEOGRAPH
+ {0x93AA, 0x982D}, //2687 #CJK UNIFIED IDEOGRAPH
+ {0x93AB, 0x9A30}, //2688 #CJK UNIFIED IDEOGRAPH
+ {0x93AC, 0x95D8}, //2689 #CJK UNIFIED IDEOGRAPH
+ {0x93AD, 0x50CD}, //2690 #CJK UNIFIED IDEOGRAPH
+ {0x93AE, 0x52D5}, //2691 #CJK UNIFIED IDEOGRAPH
+ {0x93AF, 0x540C}, //2692 #CJK UNIFIED IDEOGRAPH
+ {0x93B0, 0x5802}, //2693 #CJK UNIFIED IDEOGRAPH
+ {0x93B1, 0x5C0E}, //2694 #CJK UNIFIED IDEOGRAPH
+ {0x93B2, 0x61A7}, //2695 #CJK UNIFIED IDEOGRAPH
+ {0x93B3, 0x649E}, //2696 #CJK UNIFIED IDEOGRAPH
+ {0x93B4, 0x6D1E}, //2697 #CJK UNIFIED IDEOGRAPH
+ {0x93B5, 0x77B3}, //2698 #CJK UNIFIED IDEOGRAPH
+ {0x93B6, 0x7AE5}, //2699 #CJK UNIFIED IDEOGRAPH
+ {0x93B7, 0x80F4}, //2700 #CJK UNIFIED IDEOGRAPH
+ {0x93B8, 0x8404}, //2701 #CJK UNIFIED IDEOGRAPH
+ {0x93B9, 0x9053}, //2702 #CJK UNIFIED IDEOGRAPH
+ {0x93BA, 0x9285}, //2703 #CJK UNIFIED IDEOGRAPH
+ {0x93BB, 0x5CE0}, //2704 #CJK UNIFIED IDEOGRAPH
+ {0x93BC, 0x9D07}, //2705 #CJK UNIFIED IDEOGRAPH
+ {0x93BD, 0x533F}, //2706 #CJK UNIFIED IDEOGRAPH
+ {0x93BE, 0x5F97}, //2707 #CJK UNIFIED IDEOGRAPH
+ {0x93BF, 0x5FB3}, //2708 #CJK UNIFIED IDEOGRAPH
+ {0x93C0, 0x6D9C}, //2709 #CJK UNIFIED IDEOGRAPH
+ {0x93C1, 0x7279}, //2710 #CJK UNIFIED IDEOGRAPH
+ {0x93C2, 0x7763}, //2711 #CJK UNIFIED IDEOGRAPH
+ {0x93C3, 0x79BF}, //2712 #CJK UNIFIED IDEOGRAPH
+ {0x93C4, 0x7BE4}, //2713 #CJK UNIFIED IDEOGRAPH
+ {0x93C5, 0x6BD2}, //2714 #CJK UNIFIED IDEOGRAPH
+ {0x93C6, 0x72EC}, //2715 #CJK UNIFIED IDEOGRAPH
+ {0x93C7, 0x8AAD}, //2716 #CJK UNIFIED IDEOGRAPH
+ {0x93C8, 0x6803}, //2717 #CJK UNIFIED IDEOGRAPH
+ {0x93C9, 0x6A61}, //2718 #CJK UNIFIED IDEOGRAPH
+ {0x93CA, 0x51F8}, //2719 #CJK UNIFIED IDEOGRAPH
+ {0x93CB, 0x7A81}, //2720 #CJK UNIFIED IDEOGRAPH
+ {0x93CC, 0x6934}, //2721 #CJK UNIFIED IDEOGRAPH
+ {0x93CD, 0x5C4A}, //2722 #CJK UNIFIED IDEOGRAPH
+ {0x93CE, 0x9CF6}, //2723 #CJK UNIFIED IDEOGRAPH
+ {0x93CF, 0x82EB}, //2724 #CJK UNIFIED IDEOGRAPH
+ {0x93D0, 0x5BC5}, //2725 #CJK UNIFIED IDEOGRAPH
+ {0x93D1, 0x9149}, //2726 #CJK UNIFIED IDEOGRAPH
+ {0x93D2, 0x701E}, //2727 #CJK UNIFIED IDEOGRAPH
+ {0x93D3, 0x5678}, //2728 #CJK UNIFIED IDEOGRAPH
+ {0x93D4, 0x5C6F}, //2729 #CJK UNIFIED IDEOGRAPH
+ {0x93D5, 0x60C7}, //2730 #CJK UNIFIED IDEOGRAPH
+ {0x93D6, 0x6566}, //2731 #CJK UNIFIED IDEOGRAPH
+ {0x93D7, 0x6C8C}, //2732 #CJK UNIFIED IDEOGRAPH
+ {0x93D8, 0x8C5A}, //2733 #CJK UNIFIED IDEOGRAPH
+ {0x93D9, 0x9041}, //2734 #CJK UNIFIED IDEOGRAPH
+ {0x93DA, 0x9813}, //2735 #CJK UNIFIED IDEOGRAPH
+ {0x93DB, 0x5451}, //2736 #CJK UNIFIED IDEOGRAPH
+ {0x93DC, 0x66C7}, //2737 #CJK UNIFIED IDEOGRAPH
+ {0x93DD, 0x920D}, //2738 #CJK UNIFIED IDEOGRAPH
+ {0x93DE, 0x5948}, //2739 #CJK UNIFIED IDEOGRAPH
+ {0x93DF, 0x90A3}, //2740 #CJK UNIFIED IDEOGRAPH
+ {0x93E0, 0x5185}, //2741 #CJK UNIFIED IDEOGRAPH
+ {0x93E1, 0x4E4D}, //2742 #CJK UNIFIED IDEOGRAPH
+ {0x93E2, 0x51EA}, //2743 #CJK UNIFIED IDEOGRAPH
+ {0x93E3, 0x8599}, //2744 #CJK UNIFIED IDEOGRAPH
+ {0x93E4, 0x8B0E}, //2745 #CJK UNIFIED IDEOGRAPH
+ {0x93E5, 0x7058}, //2746 #CJK UNIFIED IDEOGRAPH
+ {0x93E6, 0x637A}, //2747 #CJK UNIFIED IDEOGRAPH
+ {0x93E7, 0x934B}, //2748 #CJK UNIFIED IDEOGRAPH
+ {0x93E8, 0x6962}, //2749 #CJK UNIFIED IDEOGRAPH
+ {0x93E9, 0x99B4}, //2750 #CJK UNIFIED IDEOGRAPH
+ {0x93EA, 0x7E04}, //2751 #CJK UNIFIED IDEOGRAPH
+ {0x93EB, 0x7577}, //2752 #CJK UNIFIED IDEOGRAPH
+ {0x93EC, 0x5357}, //2753 #CJK UNIFIED IDEOGRAPH
+ {0x93ED, 0x6960}, //2754 #CJK UNIFIED IDEOGRAPH
+ {0x93EE, 0x8EDF}, //2755 #CJK UNIFIED IDEOGRAPH
+ {0x93EF, 0x96E3}, //2756 #CJK UNIFIED IDEOGRAPH
+ {0x93F0, 0x6C5D}, //2757 #CJK UNIFIED IDEOGRAPH
+ {0x93F1, 0x4E8C}, //2758 #CJK UNIFIED IDEOGRAPH
+ {0x93F2, 0x5C3C}, //2759 #CJK UNIFIED IDEOGRAPH
+ {0x93F3, 0x5F10}, //2760 #CJK UNIFIED IDEOGRAPH
+ {0x93F4, 0x8FE9}, //2761 #CJK UNIFIED IDEOGRAPH
+ {0x93F5, 0x5302}, //2762 #CJK UNIFIED IDEOGRAPH
+ {0x93F6, 0x8CD1}, //2763 #CJK UNIFIED IDEOGRAPH
+ {0x93F7, 0x8089}, //2764 #CJK UNIFIED IDEOGRAPH
+ {0x93F8, 0x8679}, //2765 #CJK UNIFIED IDEOGRAPH
+ {0x93F9, 0x5EFF}, //2766 #CJK UNIFIED IDEOGRAPH
+ {0x93FA, 0x65E5}, //2767 #CJK UNIFIED IDEOGRAPH
+ {0x93FB, 0x4E73}, //2768 #CJK UNIFIED IDEOGRAPH
+ {0x93FC, 0x5165}, //2769 #CJK UNIFIED IDEOGRAPH
+ {0x9440, 0x5982}, //2770 #CJK UNIFIED IDEOGRAPH
+ {0x9441, 0x5C3F}, //2771 #CJK UNIFIED IDEOGRAPH
+ {0x9442, 0x97EE}, //2772 #CJK UNIFIED IDEOGRAPH
+ {0x9443, 0x4EFB}, //2773 #CJK UNIFIED IDEOGRAPH
+ {0x9444, 0x598A}, //2774 #CJK UNIFIED IDEOGRAPH
+ {0x9445, 0x5FCD}, //2775 #CJK UNIFIED IDEOGRAPH
+ {0x9446, 0x8A8D}, //2776 #CJK UNIFIED IDEOGRAPH
+ {0x9447, 0x6FE1}, //2777 #CJK UNIFIED IDEOGRAPH
+ {0x9448, 0x79B0}, //2778 #CJK UNIFIED IDEOGRAPH
+ {0x9449, 0x7962}, //2779 #CJK UNIFIED IDEOGRAPH
+ {0x944A, 0x5BE7}, //2780 #CJK UNIFIED IDEOGRAPH
+ {0x944B, 0x8471}, //2781 #CJK UNIFIED IDEOGRAPH
+ {0x944C, 0x732B}, //2782 #CJK UNIFIED IDEOGRAPH
+ {0x944D, 0x71B1}, //2783 #CJK UNIFIED IDEOGRAPH
+ {0x944E, 0x5E74}, //2784 #CJK UNIFIED IDEOGRAPH
+ {0x944F, 0x5FF5}, //2785 #CJK UNIFIED IDEOGRAPH
+ {0x9450, 0x637B}, //2786 #CJK UNIFIED IDEOGRAPH
+ {0x9451, 0x649A}, //2787 #CJK UNIFIED IDEOGRAPH
+ {0x9452, 0x71C3}, //2788 #CJK UNIFIED IDEOGRAPH
+ {0x9453, 0x7C98}, //2789 #CJK UNIFIED IDEOGRAPH
+ {0x9454, 0x4E43}, //2790 #CJK UNIFIED IDEOGRAPH
+ {0x9455, 0x5EFC}, //2791 #CJK UNIFIED IDEOGRAPH
+ {0x9456, 0x4E4B}, //2792 #CJK UNIFIED IDEOGRAPH
+ {0x9457, 0x57DC}, //2793 #CJK UNIFIED IDEOGRAPH
+ {0x9458, 0x56A2}, //2794 #CJK UNIFIED IDEOGRAPH
+ {0x9459, 0x60A9}, //2795 #CJK UNIFIED IDEOGRAPH
+ {0x945A, 0x6FC3}, //2796 #CJK UNIFIED IDEOGRAPH
+ {0x945B, 0x7D0D}, //2797 #CJK UNIFIED IDEOGRAPH
+ {0x945C, 0x80FD}, //2798 #CJK UNIFIED IDEOGRAPH
+ {0x945D, 0x8133}, //2799 #CJK UNIFIED IDEOGRAPH
+ {0x945E, 0x81BF}, //2800 #CJK UNIFIED IDEOGRAPH
+ {0x945F, 0x8FB2}, //2801 #CJK UNIFIED IDEOGRAPH
+ {0x9460, 0x8997}, //2802 #CJK UNIFIED IDEOGRAPH
+ {0x9461, 0x86A4}, //2803 #CJK UNIFIED IDEOGRAPH
+ {0x9462, 0x5DF4}, //2804 #CJK UNIFIED IDEOGRAPH
+ {0x9463, 0x628A}, //2805 #CJK UNIFIED IDEOGRAPH
+ {0x9464, 0x64AD}, //2806 #CJK UNIFIED IDEOGRAPH
+ {0x9465, 0x8987}, //2807 #CJK UNIFIED IDEOGRAPH
+ {0x9466, 0x6777}, //2808 #CJK UNIFIED IDEOGRAPH
+ {0x9467, 0x6CE2}, //2809 #CJK UNIFIED IDEOGRAPH
+ {0x9468, 0x6D3E}, //2810 #CJK UNIFIED IDEOGRAPH
+ {0x9469, 0x7436}, //2811 #CJK UNIFIED IDEOGRAPH
+ {0x946A, 0x7834}, //2812 #CJK UNIFIED IDEOGRAPH
+ {0x946B, 0x5A46}, //2813 #CJK UNIFIED IDEOGRAPH
+ {0x946C, 0x7F75}, //2814 #CJK UNIFIED IDEOGRAPH
+ {0x946D, 0x82AD}, //2815 #CJK UNIFIED IDEOGRAPH
+ {0x946E, 0x99AC}, //2816 #CJK UNIFIED IDEOGRAPH
+ {0x946F, 0x4FF3}, //2817 #CJK UNIFIED IDEOGRAPH
+ {0x9470, 0x5EC3}, //2818 #CJK UNIFIED IDEOGRAPH
+ {0x9471, 0x62DD}, //2819 #CJK UNIFIED IDEOGRAPH
+ {0x9472, 0x6392}, //2820 #CJK UNIFIED IDEOGRAPH
+ {0x9473, 0x6557}, //2821 #CJK UNIFIED IDEOGRAPH
+ {0x9474, 0x676F}, //2822 #CJK UNIFIED IDEOGRAPH
+ {0x9475, 0x76C3}, //2823 #CJK UNIFIED IDEOGRAPH
+ {0x9476, 0x724C}, //2824 #CJK UNIFIED IDEOGRAPH
+ {0x9477, 0x80CC}, //2825 #CJK UNIFIED IDEOGRAPH
+ {0x9478, 0x80BA}, //2826 #CJK UNIFIED IDEOGRAPH
+ {0x9479, 0x8F29}, //2827 #CJK UNIFIED IDEOGRAPH
+ {0x947A, 0x914D}, //2828 #CJK UNIFIED IDEOGRAPH
+ {0x947B, 0x500D}, //2829 #CJK UNIFIED IDEOGRAPH
+ {0x947C, 0x57F9}, //2830 #CJK UNIFIED IDEOGRAPH
+ {0x947D, 0x5A92}, //2831 #CJK UNIFIED IDEOGRAPH
+ {0x947E, 0x6885}, //2832 #CJK UNIFIED IDEOGRAPH
+ {0x9480, 0x6973}, //2833 #CJK UNIFIED IDEOGRAPH
+ {0x9481, 0x7164}, //2834 #CJK UNIFIED IDEOGRAPH
+ {0x9482, 0x72FD}, //2835 #CJK UNIFIED IDEOGRAPH
+ {0x9483, 0x8CB7}, //2836 #CJK UNIFIED IDEOGRAPH
+ {0x9484, 0x58F2}, //2837 #CJK UNIFIED IDEOGRAPH
+ {0x9485, 0x8CE0}, //2838 #CJK UNIFIED IDEOGRAPH
+ {0x9486, 0x966A}, //2839 #CJK UNIFIED IDEOGRAPH
+ {0x9487, 0x9019}, //2840 #CJK UNIFIED IDEOGRAPH
+ {0x9488, 0x877F}, //2841 #CJK UNIFIED IDEOGRAPH
+ {0x9489, 0x79E4}, //2842 #CJK UNIFIED IDEOGRAPH
+ {0x948A, 0x77E7}, //2843 #CJK UNIFIED IDEOGRAPH
+ {0x948B, 0x8429}, //2844 #CJK UNIFIED IDEOGRAPH
+ {0x948C, 0x4F2F}, //2845 #CJK UNIFIED IDEOGRAPH
+ {0x948D, 0x5265}, //2846 #CJK UNIFIED IDEOGRAPH
+ {0x948E, 0x535A}, //2847 #CJK UNIFIED IDEOGRAPH
+ {0x948F, 0x62CD}, //2848 #CJK UNIFIED IDEOGRAPH
+ {0x9490, 0x67CF}, //2849 #CJK UNIFIED IDEOGRAPH
+ {0x9491, 0x6CCA}, //2850 #CJK UNIFIED IDEOGRAPH
+ {0x9492, 0x767D}, //2851 #CJK UNIFIED IDEOGRAPH
+ {0x9493, 0x7B94}, //2852 #CJK UNIFIED IDEOGRAPH
+ {0x9494, 0x7C95}, //2853 #CJK UNIFIED IDEOGRAPH
+ {0x9495, 0x8236}, //2854 #CJK UNIFIED IDEOGRAPH
+ {0x9496, 0x8584}, //2855 #CJK UNIFIED IDEOGRAPH
+ {0x9497, 0x8FEB}, //2856 #CJK UNIFIED IDEOGRAPH
+ {0x9498, 0x66DD}, //2857 #CJK UNIFIED IDEOGRAPH
+ {0x9499, 0x6F20}, //2858 #CJK UNIFIED IDEOGRAPH
+ {0x949A, 0x7206}, //2859 #CJK UNIFIED IDEOGRAPH
+ {0x949B, 0x7E1B}, //2860 #CJK UNIFIED IDEOGRAPH
+ {0x949C, 0x83AB}, //2861 #CJK UNIFIED IDEOGRAPH
+ {0x949D, 0x99C1}, //2862 #CJK UNIFIED IDEOGRAPH
+ {0x949E, 0x9EA6}, //2863 #CJK UNIFIED IDEOGRAPH
+ {0x949F, 0x51FD}, //2864 #CJK UNIFIED IDEOGRAPH
+ {0x94A0, 0x7BB1}, //2865 #CJK UNIFIED IDEOGRAPH
+ {0x94A1, 0x7872}, //2866 #CJK UNIFIED IDEOGRAPH
+ {0x94A2, 0x7BB8}, //2867 #CJK UNIFIED IDEOGRAPH
+ {0x94A3, 0x8087}, //2868 #CJK UNIFIED IDEOGRAPH
+ {0x94A4, 0x7B48}, //2869 #CJK UNIFIED IDEOGRAPH
+ {0x94A5, 0x6AE8}, //2870 #CJK UNIFIED IDEOGRAPH
+ {0x94A6, 0x5E61}, //2871 #CJK UNIFIED IDEOGRAPH
+ {0x94A7, 0x808C}, //2872 #CJK UNIFIED IDEOGRAPH
+ {0x94A8, 0x7551}, //2873 #CJK UNIFIED IDEOGRAPH
+ {0x94A9, 0x7560}, //2874 #CJK UNIFIED IDEOGRAPH
+ {0x94AA, 0x516B}, //2875 #CJK UNIFIED IDEOGRAPH
+ {0x94AB, 0x9262}, //2876 #CJK UNIFIED IDEOGRAPH
+ {0x94AC, 0x6E8C}, //2877 #CJK UNIFIED IDEOGRAPH
+ {0x94AD, 0x767A}, //2878 #CJK UNIFIED IDEOGRAPH
+ {0x94AE, 0x9197}, //2879 #CJK UNIFIED IDEOGRAPH
+ {0x94AF, 0x9AEA}, //2880 #CJK UNIFIED IDEOGRAPH
+ {0x94B0, 0x4F10}, //2881 #CJK UNIFIED IDEOGRAPH
+ {0x94B1, 0x7F70}, //2882 #CJK UNIFIED IDEOGRAPH
+ {0x94B2, 0x629C}, //2883 #CJK UNIFIED IDEOGRAPH
+ {0x94B3, 0x7B4F}, //2884 #CJK UNIFIED IDEOGRAPH
+ {0x94B4, 0x95A5}, //2885 #CJK UNIFIED IDEOGRAPH
+ {0x94B5, 0x9CE9}, //2886 #CJK UNIFIED IDEOGRAPH
+ {0x94B6, 0x567A}, //2887 #CJK UNIFIED IDEOGRAPH
+ {0x94B7, 0x5859}, //2888 #CJK UNIFIED IDEOGRAPH
+ {0x94B8, 0x86E4}, //2889 #CJK UNIFIED IDEOGRAPH
+ {0x94B9, 0x96BC}, //2890 #CJK UNIFIED IDEOGRAPH
+ {0x94BA, 0x4F34}, //2891 #CJK UNIFIED IDEOGRAPH
+ {0x94BB, 0x5224}, //2892 #CJK UNIFIED IDEOGRAPH
+ {0x94BC, 0x534A}, //2893 #CJK UNIFIED IDEOGRAPH
+ {0x94BD, 0x53CD}, //2894 #CJK UNIFIED IDEOGRAPH
+ {0x94BE, 0x53DB}, //2895 #CJK UNIFIED IDEOGRAPH
+ {0x94BF, 0x5E06}, //2896 #CJK UNIFIED IDEOGRAPH
+ {0x94C0, 0x642C}, //2897 #CJK UNIFIED IDEOGRAPH
+ {0x94C1, 0x6591}, //2898 #CJK UNIFIED IDEOGRAPH
+ {0x94C2, 0x677F}, //2899 #CJK UNIFIED IDEOGRAPH
+ {0x94C3, 0x6C3E}, //2900 #CJK UNIFIED IDEOGRAPH
+ {0x94C4, 0x6C4E}, //2901 #CJK UNIFIED IDEOGRAPH
+ {0x94C5, 0x7248}, //2902 #CJK UNIFIED IDEOGRAPH
+ {0x94C6, 0x72AF}, //2903 #CJK UNIFIED IDEOGRAPH
+ {0x94C7, 0x73ED}, //2904 #CJK UNIFIED IDEOGRAPH
+ {0x94C8, 0x7554}, //2905 #CJK UNIFIED IDEOGRAPH
+ {0x94C9, 0x7E41}, //2906 #CJK UNIFIED IDEOGRAPH
+ {0x94CA, 0x822C}, //2907 #CJK UNIFIED IDEOGRAPH
+ {0x94CB, 0x85E9}, //2908 #CJK UNIFIED IDEOGRAPH
+ {0x94CC, 0x8CA9}, //2909 #CJK UNIFIED IDEOGRAPH
+ {0x94CD, 0x7BC4}, //2910 #CJK UNIFIED IDEOGRAPH
+ {0x94CE, 0x91C6}, //2911 #CJK UNIFIED IDEOGRAPH
+ {0x94CF, 0x7169}, //2912 #CJK UNIFIED IDEOGRAPH
+ {0x94D0, 0x9812}, //2913 #CJK UNIFIED IDEOGRAPH
+ {0x94D1, 0x98EF}, //2914 #CJK UNIFIED IDEOGRAPH
+ {0x94D2, 0x633D}, //2915 #CJK UNIFIED IDEOGRAPH
+ {0x94D3, 0x6669}, //2916 #CJK UNIFIED IDEOGRAPH
+ {0x94D4, 0x756A}, //2917 #CJK UNIFIED IDEOGRAPH
+ {0x94D5, 0x76E4}, //2918 #CJK UNIFIED IDEOGRAPH
+ {0x94D6, 0x78D0}, //2919 #CJK UNIFIED IDEOGRAPH
+ {0x94D7, 0x8543}, //2920 #CJK UNIFIED IDEOGRAPH
+ {0x94D8, 0x86EE}, //2921 #CJK UNIFIED IDEOGRAPH
+ {0x94D9, 0x532A}, //2922 #CJK UNIFIED IDEOGRAPH
+ {0x94DA, 0x5351}, //2923 #CJK UNIFIED IDEOGRAPH
+ {0x94DB, 0x5426}, //2924 #CJK UNIFIED IDEOGRAPH
+ {0x94DC, 0x5983}, //2925 #CJK UNIFIED IDEOGRAPH
+ {0x94DD, 0x5E87}, //2926 #CJK UNIFIED IDEOGRAPH
+ {0x94DE, 0x5F7C}, //2927 #CJK UNIFIED IDEOGRAPH
+ {0x94DF, 0x60B2}, //2928 #CJK UNIFIED IDEOGRAPH
+ {0x94E0, 0x6249}, //2929 #CJK UNIFIED IDEOGRAPH
+ {0x94E1, 0x6279}, //2930 #CJK UNIFIED IDEOGRAPH
+ {0x94E2, 0x62AB}, //2931 #CJK UNIFIED IDEOGRAPH
+ {0x94E3, 0x6590}, //2932 #CJK UNIFIED IDEOGRAPH
+ {0x94E4, 0x6BD4}, //2933 #CJK UNIFIED IDEOGRAPH
+ {0x94E5, 0x6CCC}, //2934 #CJK UNIFIED IDEOGRAPH
+ {0x94E6, 0x75B2}, //2935 #CJK UNIFIED IDEOGRAPH
+ {0x94E7, 0x76AE}, //2936 #CJK UNIFIED IDEOGRAPH
+ {0x94E8, 0x7891}, //2937 #CJK UNIFIED IDEOGRAPH
+ {0x94E9, 0x79D8}, //2938 #CJK UNIFIED IDEOGRAPH
+ {0x94EA, 0x7DCB}, //2939 #CJK UNIFIED IDEOGRAPH
+ {0x94EB, 0x7F77}, //2940 #CJK UNIFIED IDEOGRAPH
+ {0x94EC, 0x80A5}, //2941 #CJK UNIFIED IDEOGRAPH
+ {0x94ED, 0x88AB}, //2942 #CJK UNIFIED IDEOGRAPH
+ {0x94EE, 0x8AB9}, //2943 #CJK UNIFIED IDEOGRAPH
+ {0x94EF, 0x8CBB}, //2944 #CJK UNIFIED IDEOGRAPH
+ {0x94F0, 0x907F}, //2945 #CJK UNIFIED IDEOGRAPH
+ {0x94F1, 0x975E}, //2946 #CJK UNIFIED IDEOGRAPH
+ {0x94F2, 0x98DB}, //2947 #CJK UNIFIED IDEOGRAPH
+ {0x94F3, 0x6A0B}, //2948 #CJK UNIFIED IDEOGRAPH
+ {0x94F4, 0x7C38}, //2949 #CJK UNIFIED IDEOGRAPH
+ {0x94F5, 0x5099}, //2950 #CJK UNIFIED IDEOGRAPH
+ {0x94F6, 0x5C3E}, //2951 #CJK UNIFIED IDEOGRAPH
+ {0x94F7, 0x5FAE}, //2952 #CJK UNIFIED IDEOGRAPH
+ {0x94F8, 0x6787}, //2953 #CJK UNIFIED IDEOGRAPH
+ {0x94F9, 0x6BD8}, //2954 #CJK UNIFIED IDEOGRAPH
+ {0x94FA, 0x7435}, //2955 #CJK UNIFIED IDEOGRAPH
+ {0x94FB, 0x7709}, //2956 #CJK UNIFIED IDEOGRAPH
+ {0x94FC, 0x7F8E}, //2957 #CJK UNIFIED IDEOGRAPH
+ {0x9540, 0x9F3B}, //2958 #CJK UNIFIED IDEOGRAPH
+ {0x9541, 0x67CA}, //2959 #CJK UNIFIED IDEOGRAPH
+ {0x9542, 0x7A17}, //2960 #CJK UNIFIED IDEOGRAPH
+ {0x9543, 0x5339}, //2961 #CJK UNIFIED IDEOGRAPH
+ {0x9544, 0x758B}, //2962 #CJK UNIFIED IDEOGRAPH
+ {0x9545, 0x9AED}, //2963 #CJK UNIFIED IDEOGRAPH
+ {0x9546, 0x5F66}, //2964 #CJK UNIFIED IDEOGRAPH
+ {0x9547, 0x819D}, //2965 #CJK UNIFIED IDEOGRAPH
+ {0x9548, 0x83F1}, //2966 #CJK UNIFIED IDEOGRAPH
+ {0x9549, 0x8098}, //2967 #CJK UNIFIED IDEOGRAPH
+ {0x954A, 0x5F3C}, //2968 #CJK UNIFIED IDEOGRAPH
+ {0x954B, 0x5FC5}, //2969 #CJK UNIFIED IDEOGRAPH
+ {0x954C, 0x7562}, //2970 #CJK UNIFIED IDEOGRAPH
+ {0x954D, 0x7B46}, //2971 #CJK UNIFIED IDEOGRAPH
+ {0x954E, 0x903C}, //2972 #CJK UNIFIED IDEOGRAPH
+ {0x954F, 0x6867}, //2973 #CJK UNIFIED IDEOGRAPH
+ {0x9550, 0x59EB}, //2974 #CJK UNIFIED IDEOGRAPH
+ {0x9551, 0x5A9B}, //2975 #CJK UNIFIED IDEOGRAPH
+ {0x9552, 0x7D10}, //2976 #CJK UNIFIED IDEOGRAPH
+ {0x9553, 0x767E}, //2977 #CJK UNIFIED IDEOGRAPH
+ {0x9554, 0x8B2C}, //2978 #CJK UNIFIED IDEOGRAPH
+ {0x9555, 0x4FF5}, //2979 #CJK UNIFIED IDEOGRAPH
+ {0x9556, 0x5F6A}, //2980 #CJK UNIFIED IDEOGRAPH
+ {0x9557, 0x6A19}, //2981 #CJK UNIFIED IDEOGRAPH
+ {0x9558, 0x6C37}, //2982 #CJK UNIFIED IDEOGRAPH
+ {0x9559, 0x6F02}, //2983 #CJK UNIFIED IDEOGRAPH
+ {0x955A, 0x74E2}, //2984 #CJK UNIFIED IDEOGRAPH
+ {0x955B, 0x7968}, //2985 #CJK UNIFIED IDEOGRAPH
+ {0x955C, 0x8868}, //2986 #CJK UNIFIED IDEOGRAPH
+ {0x955D, 0x8A55}, //2987 #CJK UNIFIED IDEOGRAPH
+ {0x955E, 0x8C79}, //2988 #CJK UNIFIED IDEOGRAPH
+ {0x955F, 0x5EDF}, //2989 #CJK UNIFIED IDEOGRAPH
+ {0x9560, 0x63CF}, //2990 #CJK UNIFIED IDEOGRAPH
+ {0x9561, 0x75C5}, //2991 #CJK UNIFIED IDEOGRAPH
+ {0x9562, 0x79D2}, //2992 #CJK UNIFIED IDEOGRAPH
+ {0x9563, 0x82D7}, //2993 #CJK UNIFIED IDEOGRAPH
+ {0x9564, 0x9328}, //2994 #CJK UNIFIED IDEOGRAPH
+ {0x9565, 0x92F2}, //2995 #CJK UNIFIED IDEOGRAPH
+ {0x9566, 0x849C}, //2996 #CJK UNIFIED IDEOGRAPH
+ {0x9567, 0x86ED}, //2997 #CJK UNIFIED IDEOGRAPH
+ {0x9568, 0x9C2D}, //2998 #CJK UNIFIED IDEOGRAPH
+ {0x9569, 0x54C1}, //2999 #CJK UNIFIED IDEOGRAPH
+ {0x956A, 0x5F6C}, //3000 #CJK UNIFIED IDEOGRAPH
+ {0x956B, 0x658C}, //3001 #CJK UNIFIED IDEOGRAPH
+ {0x956C, 0x6D5C}, //3002 #CJK UNIFIED IDEOGRAPH
+ {0x956D, 0x7015}, //3003 #CJK UNIFIED IDEOGRAPH
+ {0x956E, 0x8CA7}, //3004 #CJK UNIFIED IDEOGRAPH
+ {0x956F, 0x8CD3}, //3005 #CJK UNIFIED IDEOGRAPH
+ {0x9570, 0x983B}, //3006 #CJK UNIFIED IDEOGRAPH
+ {0x9571, 0x654F}, //3007 #CJK UNIFIED IDEOGRAPH
+ {0x9572, 0x74F6}, //3008 #CJK UNIFIED IDEOGRAPH
+ {0x9573, 0x4E0D}, //3009 #CJK UNIFIED IDEOGRAPH
+ {0x9574, 0x4ED8}, //3010 #CJK UNIFIED IDEOGRAPH
+ {0x9575, 0x57E0}, //3011 #CJK UNIFIED IDEOGRAPH
+ {0x9576, 0x592B}, //3012 #CJK UNIFIED IDEOGRAPH
+ {0x9577, 0x5A66}, //3013 #CJK UNIFIED IDEOGRAPH
+ {0x9578, 0x5BCC}, //3014 #CJK UNIFIED IDEOGRAPH
+ {0x9579, 0x51A8}, //3015 #CJK UNIFIED IDEOGRAPH
+ {0x957A, 0x5E03}, //3016 #CJK UNIFIED IDEOGRAPH
+ {0x957B, 0x5E9C}, //3017 #CJK UNIFIED IDEOGRAPH
+ {0x957C, 0x6016}, //3018 #CJK UNIFIED IDEOGRAPH
+ {0x957D, 0x6276}, //3019 #CJK UNIFIED IDEOGRAPH
+ {0x957E, 0x6577}, //3020 #CJK UNIFIED IDEOGRAPH
+ {0x9580, 0x65A7}, //3021 #CJK UNIFIED IDEOGRAPH
+ {0x9581, 0x666E}, //3022 #CJK UNIFIED IDEOGRAPH
+ {0x9582, 0x6D6E}, //3023 #CJK UNIFIED IDEOGRAPH
+ {0x9583, 0x7236}, //3024 #CJK UNIFIED IDEOGRAPH
+ {0x9584, 0x7B26}, //3025 #CJK UNIFIED IDEOGRAPH
+ {0x9585, 0x8150}, //3026 #CJK UNIFIED IDEOGRAPH
+ {0x9586, 0x819A}, //3027 #CJK UNIFIED IDEOGRAPH
+ {0x9587, 0x8299}, //3028 #CJK UNIFIED IDEOGRAPH
+ {0x9588, 0x8B5C}, //3029 #CJK UNIFIED IDEOGRAPH
+ {0x9589, 0x8CA0}, //3030 #CJK UNIFIED IDEOGRAPH
+ {0x958A, 0x8CE6}, //3031 #CJK UNIFIED IDEOGRAPH
+ {0x958B, 0x8D74}, //3032 #CJK UNIFIED IDEOGRAPH
+ {0x958C, 0x961C}, //3033 #CJK UNIFIED IDEOGRAPH
+ {0x958D, 0x9644}, //3034 #CJK UNIFIED IDEOGRAPH
+ {0x958E, 0x4FAE}, //3035 #CJK UNIFIED IDEOGRAPH
+ {0x958F, 0x64AB}, //3036 #CJK UNIFIED IDEOGRAPH
+ {0x9590, 0x6B66}, //3037 #CJK UNIFIED IDEOGRAPH
+ {0x9591, 0x821E}, //3038 #CJK UNIFIED IDEOGRAPH
+ {0x9592, 0x8461}, //3039 #CJK UNIFIED IDEOGRAPH
+ {0x9593, 0x856A}, //3040 #CJK UNIFIED IDEOGRAPH
+ {0x9594, 0x90E8}, //3041 #CJK UNIFIED IDEOGRAPH
+ {0x9595, 0x5C01}, //3042 #CJK UNIFIED IDEOGRAPH
+ {0x9596, 0x6953}, //3043 #CJK UNIFIED IDEOGRAPH
+ {0x9597, 0x98A8}, //3044 #CJK UNIFIED IDEOGRAPH
+ {0x9598, 0x847A}, //3045 #CJK UNIFIED IDEOGRAPH
+ {0x9599, 0x8557}, //3046 #CJK UNIFIED IDEOGRAPH
+ {0x959A, 0x4F0F}, //3047 #CJK UNIFIED IDEOGRAPH
+ {0x959B, 0x526F}, //3048 #CJK UNIFIED IDEOGRAPH
+ {0x959C, 0x5FA9}, //3049 #CJK UNIFIED IDEOGRAPH
+ {0x959D, 0x5E45}, //3050 #CJK UNIFIED IDEOGRAPH
+ {0x959E, 0x670D}, //3051 #CJK UNIFIED IDEOGRAPH
+ {0x959F, 0x798F}, //3052 #CJK UNIFIED IDEOGRAPH
+ {0x95A0, 0x8179}, //3053 #CJK UNIFIED IDEOGRAPH
+ {0x95A1, 0x8907}, //3054 #CJK UNIFIED IDEOGRAPH
+ {0x95A2, 0x8986}, //3055 #CJK UNIFIED IDEOGRAPH
+ {0x95A3, 0x6DF5}, //3056 #CJK UNIFIED IDEOGRAPH
+ {0x95A4, 0x5F17}, //3057 #CJK UNIFIED IDEOGRAPH
+ {0x95A5, 0x6255}, //3058 #CJK UNIFIED IDEOGRAPH
+ {0x95A6, 0x6CB8}, //3059 #CJK UNIFIED IDEOGRAPH
+ {0x95A7, 0x4ECF}, //3060 #CJK UNIFIED IDEOGRAPH
+ {0x95A8, 0x7269}, //3061 #CJK UNIFIED IDEOGRAPH
+ {0x95A9, 0x9B92}, //3062 #CJK UNIFIED IDEOGRAPH
+ {0x95AA, 0x5206}, //3063 #CJK UNIFIED IDEOGRAPH
+ {0x95AB, 0x543B}, //3064 #CJK UNIFIED IDEOGRAPH
+ {0x95AC, 0x5674}, //3065 #CJK UNIFIED IDEOGRAPH
+ {0x95AD, 0x58B3}, //3066 #CJK UNIFIED IDEOGRAPH
+ {0x95AE, 0x61A4}, //3067 #CJK UNIFIED IDEOGRAPH
+ {0x95AF, 0x626E}, //3068 #CJK UNIFIED IDEOGRAPH
+ {0x95B0, 0x711A}, //3069 #CJK UNIFIED IDEOGRAPH
+ {0x95B1, 0x596E}, //3070 #CJK UNIFIED IDEOGRAPH
+ {0x95B2, 0x7C89}, //3071 #CJK UNIFIED IDEOGRAPH
+ {0x95B3, 0x7CDE}, //3072 #CJK UNIFIED IDEOGRAPH
+ {0x95B4, 0x7D1B}, //3073 #CJK UNIFIED IDEOGRAPH
+ {0x95B5, 0x96F0}, //3074 #CJK UNIFIED IDEOGRAPH
+ {0x95B6, 0x6587}, //3075 #CJK UNIFIED IDEOGRAPH
+ {0x95B7, 0x805E}, //3076 #CJK UNIFIED IDEOGRAPH
+ {0x95B8, 0x4E19}, //3077 #CJK UNIFIED IDEOGRAPH
+ {0x95B9, 0x4F75}, //3078 #CJK UNIFIED IDEOGRAPH
+ {0x95BA, 0x5175}, //3079 #CJK UNIFIED IDEOGRAPH
+ {0x95BB, 0x5840}, //3080 #CJK UNIFIED IDEOGRAPH
+ {0x95BC, 0x5E63}, //3081 #CJK UNIFIED IDEOGRAPH
+ {0x95BD, 0x5E73}, //3082 #CJK UNIFIED IDEOGRAPH
+ {0x95BE, 0x5F0A}, //3083 #CJK UNIFIED IDEOGRAPH
+ {0x95BF, 0x67C4}, //3084 #CJK UNIFIED IDEOGRAPH
+ {0x95C0, 0x4E26}, //3085 #CJK UNIFIED IDEOGRAPH
+ {0x95C1, 0x853D}, //3086 #CJK UNIFIED IDEOGRAPH
+ {0x95C2, 0x9589}, //3087 #CJK UNIFIED IDEOGRAPH
+ {0x95C3, 0x965B}, //3088 #CJK UNIFIED IDEOGRAPH
+ {0x95C4, 0x7C73}, //3089 #CJK UNIFIED IDEOGRAPH
+ {0x95C5, 0x9801}, //3090 #CJK UNIFIED IDEOGRAPH
+ {0x95C6, 0x50FB}, //3091 #CJK UNIFIED IDEOGRAPH
+ {0x95C7, 0x58C1}, //3092 #CJK UNIFIED IDEOGRAPH
+ {0x95C8, 0x7656}, //3093 #CJK UNIFIED IDEOGRAPH
+ {0x95C9, 0x78A7}, //3094 #CJK UNIFIED IDEOGRAPH
+ {0x95CA, 0x5225}, //3095 #CJK UNIFIED IDEOGRAPH
+ {0x95CB, 0x77A5}, //3096 #CJK UNIFIED IDEOGRAPH
+ {0x95CC, 0x8511}, //3097 #CJK UNIFIED IDEOGRAPH
+ {0x95CD, 0x7B86}, //3098 #CJK UNIFIED IDEOGRAPH
+ {0x95CE, 0x504F}, //3099 #CJK UNIFIED IDEOGRAPH
+ {0x95CF, 0x5909}, //3100 #CJK UNIFIED IDEOGRAPH
+ {0x95D0, 0x7247}, //3101 #CJK UNIFIED IDEOGRAPH
+ {0x95D1, 0x7BC7}, //3102 #CJK UNIFIED IDEOGRAPH
+ {0x95D2, 0x7DE8}, //3103 #CJK UNIFIED IDEOGRAPH
+ {0x95D3, 0x8FBA}, //3104 #CJK UNIFIED IDEOGRAPH
+ {0x95D4, 0x8FD4}, //3105 #CJK UNIFIED IDEOGRAPH
+ {0x95D5, 0x904D}, //3106 #CJK UNIFIED IDEOGRAPH
+ {0x95D6, 0x4FBF}, //3107 #CJK UNIFIED IDEOGRAPH
+ {0x95D7, 0x52C9}, //3108 #CJK UNIFIED IDEOGRAPH
+ {0x95D8, 0x5A29}, //3109 #CJK UNIFIED IDEOGRAPH
+ {0x95D9, 0x5F01}, //3110 #CJK UNIFIED IDEOGRAPH
+ {0x95DA, 0x97AD}, //3111 #CJK UNIFIED IDEOGRAPH
+ {0x95DB, 0x4FDD}, //3112 #CJK UNIFIED IDEOGRAPH
+ {0x95DC, 0x8217}, //3113 #CJK UNIFIED IDEOGRAPH
+ {0x95DD, 0x92EA}, //3114 #CJK UNIFIED IDEOGRAPH
+ {0x95DE, 0x5703}, //3115 #CJK UNIFIED IDEOGRAPH
+ {0x95DF, 0x6355}, //3116 #CJK UNIFIED IDEOGRAPH
+ {0x95E0, 0x6B69}, //3117 #CJK UNIFIED IDEOGRAPH
+ {0x95E1, 0x752B}, //3118 #CJK UNIFIED IDEOGRAPH
+ {0x95E2, 0x88DC}, //3119 #CJK UNIFIED IDEOGRAPH
+ {0x95E3, 0x8F14}, //3120 #CJK UNIFIED IDEOGRAPH
+ {0x95E4, 0x7A42}, //3121 #CJK UNIFIED IDEOGRAPH
+ {0x95E5, 0x52DF}, //3122 #CJK UNIFIED IDEOGRAPH
+ {0x95E6, 0x5893}, //3123 #CJK UNIFIED IDEOGRAPH
+ {0x95E7, 0x6155}, //3124 #CJK UNIFIED IDEOGRAPH
+ {0x95E8, 0x620A}, //3125 #CJK UNIFIED IDEOGRAPH
+ {0x95E9, 0x66AE}, //3126 #CJK UNIFIED IDEOGRAPH
+ {0x95EA, 0x6BCD}, //3127 #CJK UNIFIED IDEOGRAPH
+ {0x95EB, 0x7C3F}, //3128 #CJK UNIFIED IDEOGRAPH
+ {0x95EC, 0x83E9}, //3129 #CJK UNIFIED IDEOGRAPH
+ {0x95ED, 0x5023}, //3130 #CJK UNIFIED IDEOGRAPH
+ {0x95EE, 0x4FF8}, //3131 #CJK UNIFIED IDEOGRAPH
+ {0x95EF, 0x5305}, //3132 #CJK UNIFIED IDEOGRAPH
+ {0x95F0, 0x5446}, //3133 #CJK UNIFIED IDEOGRAPH
+ {0x95F1, 0x5831}, //3134 #CJK UNIFIED IDEOGRAPH
+ {0x95F2, 0x5949}, //3135 #CJK UNIFIED IDEOGRAPH
+ {0x95F3, 0x5B9D}, //3136 #CJK UNIFIED IDEOGRAPH
+ {0x95F4, 0x5CF0}, //3137 #CJK UNIFIED IDEOGRAPH
+ {0x95F5, 0x5CEF}, //3138 #CJK UNIFIED IDEOGRAPH
+ {0x95F6, 0x5D29}, //3139 #CJK UNIFIED IDEOGRAPH
+ {0x95F7, 0x5E96}, //3140 #CJK UNIFIED IDEOGRAPH
+ {0x95F8, 0x62B1}, //3141 #CJK UNIFIED IDEOGRAPH
+ {0x95F9, 0x6367}, //3142 #CJK UNIFIED IDEOGRAPH
+ {0x95FA, 0x653E}, //3143 #CJK UNIFIED IDEOGRAPH
+ {0x95FB, 0x65B9}, //3144 #CJK UNIFIED IDEOGRAPH
+ {0x95FC, 0x670B}, //3145 #CJK UNIFIED IDEOGRAPH
+ {0x9640, 0x6CD5}, //3146 #CJK UNIFIED IDEOGRAPH
+ {0x9641, 0x6CE1}, //3147 #CJK UNIFIED IDEOGRAPH
+ {0x9642, 0x70F9}, //3148 #CJK UNIFIED IDEOGRAPH
+ {0x9643, 0x7832}, //3149 #CJK UNIFIED IDEOGRAPH
+ {0x9644, 0x7E2B}, //3150 #CJK UNIFIED IDEOGRAPH
+ {0x9645, 0x80DE}, //3151 #CJK UNIFIED IDEOGRAPH
+ {0x9646, 0x82B3}, //3152 #CJK UNIFIED IDEOGRAPH
+ {0x9647, 0x840C}, //3153 #CJK UNIFIED IDEOGRAPH
+ {0x9648, 0x84EC}, //3154 #CJK UNIFIED IDEOGRAPH
+ {0x9649, 0x8702}, //3155 #CJK UNIFIED IDEOGRAPH
+ {0x964A, 0x8912}, //3156 #CJK UNIFIED IDEOGRAPH
+ {0x964B, 0x8A2A}, //3157 #CJK UNIFIED IDEOGRAPH
+ {0x964C, 0x8C4A}, //3158 #CJK UNIFIED IDEOGRAPH
+ {0x964D, 0x90A6}, //3159 #CJK UNIFIED IDEOGRAPH
+ {0x964E, 0x92D2}, //3160 #CJK UNIFIED IDEOGRAPH
+ {0x964F, 0x98FD}, //3161 #CJK UNIFIED IDEOGRAPH
+ {0x9650, 0x9CF3}, //3162 #CJK UNIFIED IDEOGRAPH
+ {0x9651, 0x9D6C}, //3163 #CJK UNIFIED IDEOGRAPH
+ {0x9652, 0x4E4F}, //3164 #CJK UNIFIED IDEOGRAPH
+ {0x9653, 0x4EA1}, //3165 #CJK UNIFIED IDEOGRAPH
+ {0x9654, 0x508D}, //3166 #CJK UNIFIED IDEOGRAPH
+ {0x9655, 0x5256}, //3167 #CJK UNIFIED IDEOGRAPH
+ {0x9656, 0x574A}, //3168 #CJK UNIFIED IDEOGRAPH
+ {0x9657, 0x59A8}, //3169 #CJK UNIFIED IDEOGRAPH
+ {0x9658, 0x5E3D}, //3170 #CJK UNIFIED IDEOGRAPH
+ {0x9659, 0x5FD8}, //3171 #CJK UNIFIED IDEOGRAPH
+ {0x965A, 0x5FD9}, //3172 #CJK UNIFIED IDEOGRAPH
+ {0x965B, 0x623F}, //3173 #CJK UNIFIED IDEOGRAPH
+ {0x965C, 0x66B4}, //3174 #CJK UNIFIED IDEOGRAPH
+ {0x965D, 0x671B}, //3175 #CJK UNIFIED IDEOGRAPH
+ {0x965E, 0x67D0}, //3176 #CJK UNIFIED IDEOGRAPH
+ {0x965F, 0x68D2}, //3177 #CJK UNIFIED IDEOGRAPH
+ {0x9660, 0x5192}, //3178 #CJK UNIFIED IDEOGRAPH
+ {0x9661, 0x7D21}, //3179 #CJK UNIFIED IDEOGRAPH
+ {0x9662, 0x80AA}, //3180 #CJK UNIFIED IDEOGRAPH
+ {0x9663, 0x81A8}, //3181 #CJK UNIFIED IDEOGRAPH
+ {0x9664, 0x8B00}, //3182 #CJK UNIFIED IDEOGRAPH
+ {0x9665, 0x8C8C}, //3183 #CJK UNIFIED IDEOGRAPH
+ {0x9666, 0x8CBF}, //3184 #CJK UNIFIED IDEOGRAPH
+ {0x9667, 0x927E}, //3185 #CJK UNIFIED IDEOGRAPH
+ {0x9668, 0x9632}, //3186 #CJK UNIFIED IDEOGRAPH
+ {0x9669, 0x5420}, //3187 #CJK UNIFIED IDEOGRAPH
+ {0x966A, 0x982C}, //3188 #CJK UNIFIED IDEOGRAPH
+ {0x966B, 0x5317}, //3189 #CJK UNIFIED IDEOGRAPH
+ {0x966C, 0x50D5}, //3190 #CJK UNIFIED IDEOGRAPH
+ {0x966D, 0x535C}, //3191 #CJK UNIFIED IDEOGRAPH
+ {0x966E, 0x58A8}, //3192 #CJK UNIFIED IDEOGRAPH
+ {0x966F, 0x64B2}, //3193 #CJK UNIFIED IDEOGRAPH
+ {0x9670, 0x6734}, //3194 #CJK UNIFIED IDEOGRAPH
+ {0x9671, 0x7267}, //3195 #CJK UNIFIED IDEOGRAPH
+ {0x9672, 0x7766}, //3196 #CJK UNIFIED IDEOGRAPH
+ {0x9673, 0x7A46}, //3197 #CJK UNIFIED IDEOGRAPH
+ {0x9674, 0x91E6}, //3198 #CJK UNIFIED IDEOGRAPH
+ {0x9675, 0x52C3}, //3199 #CJK UNIFIED IDEOGRAPH
+ {0x9676, 0x6CA1}, //3200 #CJK UNIFIED IDEOGRAPH
+ {0x9677, 0x6B86}, //3201 #CJK UNIFIED IDEOGRAPH
+ {0x9678, 0x5800}, //3202 #CJK UNIFIED IDEOGRAPH
+ {0x9679, 0x5E4C}, //3203 #CJK UNIFIED IDEOGRAPH
+ {0x967A, 0x5954}, //3204 #CJK UNIFIED IDEOGRAPH
+ {0x967B, 0x672C}, //3205 #CJK UNIFIED IDEOGRAPH
+ {0x967C, 0x7FFB}, //3206 #CJK UNIFIED IDEOGRAPH
+ {0x967D, 0x51E1}, //3207 #CJK UNIFIED IDEOGRAPH
+ {0x967E, 0x76C6}, //3208 #CJK UNIFIED IDEOGRAPH
+ {0x9680, 0x6469}, //3209 #CJK UNIFIED IDEOGRAPH
+ {0x9681, 0x78E8}, //3210 #CJK UNIFIED IDEOGRAPH
+ {0x9682, 0x9B54}, //3211 #CJK UNIFIED IDEOGRAPH
+ {0x9683, 0x9EBB}, //3212 #CJK UNIFIED IDEOGRAPH
+ {0x9684, 0x57CB}, //3213 #CJK UNIFIED IDEOGRAPH
+ {0x9685, 0x59B9}, //3214 #CJK UNIFIED IDEOGRAPH
+ {0x9686, 0x6627}, //3215 #CJK UNIFIED IDEOGRAPH
+ {0x9687, 0x679A}, //3216 #CJK UNIFIED IDEOGRAPH
+ {0x9688, 0x6BCE}, //3217 #CJK UNIFIED IDEOGRAPH
+ {0x9689, 0x54E9}, //3218 #CJK UNIFIED IDEOGRAPH
+ {0x968A, 0x69D9}, //3219 #CJK UNIFIED IDEOGRAPH
+ {0x968B, 0x5E55}, //3220 #CJK UNIFIED IDEOGRAPH
+ {0x968C, 0x819C}, //3221 #CJK UNIFIED IDEOGRAPH
+ {0x968D, 0x6795}, //3222 #CJK UNIFIED IDEOGRAPH
+ {0x968E, 0x9BAA}, //3223 #CJK UNIFIED IDEOGRAPH
+ {0x968F, 0x67FE}, //3224 #CJK UNIFIED IDEOGRAPH
+ {0x9690, 0x9C52}, //3225 #CJK UNIFIED IDEOGRAPH
+ {0x9691, 0x685D}, //3226 #CJK UNIFIED IDEOGRAPH
+ {0x9692, 0x4EA6}, //3227 #CJK UNIFIED IDEOGRAPH
+ {0x9693, 0x4FE3}, //3228 #CJK UNIFIED IDEOGRAPH
+ {0x9694, 0x53C8}, //3229 #CJK UNIFIED IDEOGRAPH
+ {0x9695, 0x62B9}, //3230 #CJK UNIFIED IDEOGRAPH
+ {0x9696, 0x672B}, //3231 #CJK UNIFIED IDEOGRAPH
+ {0x9697, 0x6CAB}, //3232 #CJK UNIFIED IDEOGRAPH
+ {0x9698, 0x8FC4}, //3233 #CJK UNIFIED IDEOGRAPH
+ {0x9699, 0x4FAD}, //3234 #CJK UNIFIED IDEOGRAPH
+ {0x969A, 0x7E6D}, //3235 #CJK UNIFIED IDEOGRAPH
+ {0x969B, 0x9EBF}, //3236 #CJK UNIFIED IDEOGRAPH
+ {0x969C, 0x4E07}, //3237 #CJK UNIFIED IDEOGRAPH
+ {0x969D, 0x6162}, //3238 #CJK UNIFIED IDEOGRAPH
+ {0x969E, 0x6E80}, //3239 #CJK UNIFIED IDEOGRAPH
+ {0x969F, 0x6F2B}, //3240 #CJK UNIFIED IDEOGRAPH
+ {0x96A0, 0x8513}, //3241 #CJK UNIFIED IDEOGRAPH
+ {0x96A1, 0x5473}, //3242 #CJK UNIFIED IDEOGRAPH
+ {0x96A2, 0x672A}, //3243 #CJK UNIFIED IDEOGRAPH
+ {0x96A3, 0x9B45}, //3244 #CJK UNIFIED IDEOGRAPH
+ {0x96A4, 0x5DF3}, //3245 #CJK UNIFIED IDEOGRAPH
+ {0x96A5, 0x7B95}, //3246 #CJK UNIFIED IDEOGRAPH
+ {0x96A6, 0x5CAC}, //3247 #CJK UNIFIED IDEOGRAPH
+ {0x96A7, 0x5BC6}, //3248 #CJK UNIFIED IDEOGRAPH
+ {0x96A8, 0x871C}, //3249 #CJK UNIFIED IDEOGRAPH
+ {0x96A9, 0x6E4A}, //3250 #CJK UNIFIED IDEOGRAPH
+ {0x96AA, 0x84D1}, //3251 #CJK UNIFIED IDEOGRAPH
+ {0x96AB, 0x7A14}, //3252 #CJK UNIFIED IDEOGRAPH
+ {0x96AC, 0x8108}, //3253 #CJK UNIFIED IDEOGRAPH
+ {0x96AD, 0x5999}, //3254 #CJK UNIFIED IDEOGRAPH
+ {0x96AE, 0x7C8D}, //3255 #CJK UNIFIED IDEOGRAPH
+ {0x96AF, 0x6C11}, //3256 #CJK UNIFIED IDEOGRAPH
+ {0x96B0, 0x7720}, //3257 #CJK UNIFIED IDEOGRAPH
+ {0x96B1, 0x52D9}, //3258 #CJK UNIFIED IDEOGRAPH
+ {0x96B2, 0x5922}, //3259 #CJK UNIFIED IDEOGRAPH
+ {0x96B3, 0x7121}, //3260 #CJK UNIFIED IDEOGRAPH
+ {0x96B4, 0x725F}, //3261 #CJK UNIFIED IDEOGRAPH
+ {0x96B5, 0x77DB}, //3262 #CJK UNIFIED IDEOGRAPH
+ {0x96B6, 0x9727}, //3263 #CJK UNIFIED IDEOGRAPH
+ {0x96B7, 0x9D61}, //3264 #CJK UNIFIED IDEOGRAPH
+ {0x96B8, 0x690B}, //3265 #CJK UNIFIED IDEOGRAPH
+ {0x96B9, 0x5A7F}, //3266 #CJK UNIFIED IDEOGRAPH
+ {0x96BA, 0x5A18}, //3267 #CJK UNIFIED IDEOGRAPH
+ {0x96BB, 0x51A5}, //3268 #CJK UNIFIED IDEOGRAPH
+ {0x96BC, 0x540D}, //3269 #CJK UNIFIED IDEOGRAPH
+ {0x96BD, 0x547D}, //3270 #CJK UNIFIED IDEOGRAPH
+ {0x96BE, 0x660E}, //3271 #CJK UNIFIED IDEOGRAPH
+ {0x96BF, 0x76DF}, //3272 #CJK UNIFIED IDEOGRAPH
+ {0x96C0, 0x8FF7}, //3273 #CJK UNIFIED IDEOGRAPH
+ {0x96C1, 0x9298}, //3274 #CJK UNIFIED IDEOGRAPH
+ {0x96C2, 0x9CF4}, //3275 #CJK UNIFIED IDEOGRAPH
+ {0x96C3, 0x59EA}, //3276 #CJK UNIFIED IDEOGRAPH
+ {0x96C4, 0x725D}, //3277 #CJK UNIFIED IDEOGRAPH
+ {0x96C5, 0x6EC5}, //3278 #CJK UNIFIED IDEOGRAPH
+ {0x96C6, 0x514D}, //3279 #CJK UNIFIED IDEOGRAPH
+ {0x96C7, 0x68C9}, //3280 #CJK UNIFIED IDEOGRAPH
+ {0x96C8, 0x7DBF}, //3281 #CJK UNIFIED IDEOGRAPH
+ {0x96C9, 0x7DEC}, //3282 #CJK UNIFIED IDEOGRAPH
+ {0x96CA, 0x9762}, //3283 #CJK UNIFIED IDEOGRAPH
+ {0x96CB, 0x9EBA}, //3284 #CJK UNIFIED IDEOGRAPH
+ {0x96CC, 0x6478}, //3285 #CJK UNIFIED IDEOGRAPH
+ {0x96CD, 0x6A21}, //3286 #CJK UNIFIED IDEOGRAPH
+ {0x96CE, 0x8302}, //3287 #CJK UNIFIED IDEOGRAPH
+ {0x96CF, 0x5984}, //3288 #CJK UNIFIED IDEOGRAPH
+ {0x96D0, 0x5B5F}, //3289 #CJK UNIFIED IDEOGRAPH
+ {0x96D1, 0x6BDB}, //3290 #CJK UNIFIED IDEOGRAPH
+ {0x96D2, 0x731B}, //3291 #CJK UNIFIED IDEOGRAPH
+ {0x96D3, 0x76F2}, //3292 #CJK UNIFIED IDEOGRAPH
+ {0x96D4, 0x7DB2}, //3293 #CJK UNIFIED IDEOGRAPH
+ {0x96D5, 0x8017}, //3294 #CJK UNIFIED IDEOGRAPH
+ {0x96D6, 0x8499}, //3295 #CJK UNIFIED IDEOGRAPH
+ {0x96D7, 0x5132}, //3296 #CJK UNIFIED IDEOGRAPH
+ {0x96D8, 0x6728}, //3297 #CJK UNIFIED IDEOGRAPH
+ {0x96D9, 0x9ED9}, //3298 #CJK UNIFIED IDEOGRAPH
+ {0x96DA, 0x76EE}, //3299 #CJK UNIFIED IDEOGRAPH
+ {0x96DB, 0x6762}, //3300 #CJK UNIFIED IDEOGRAPH
+ {0x96DC, 0x52FF}, //3301 #CJK UNIFIED IDEOGRAPH
+ {0x96DD, 0x9905}, //3302 #CJK UNIFIED IDEOGRAPH
+ {0x96DE, 0x5C24}, //3303 #CJK UNIFIED IDEOGRAPH
+ {0x96DF, 0x623B}, //3304 #CJK UNIFIED IDEOGRAPH
+ {0x96E0, 0x7C7E}, //3305 #CJK UNIFIED IDEOGRAPH
+ {0x96E1, 0x8CB0}, //3306 #CJK UNIFIED IDEOGRAPH
+ {0x96E2, 0x554F}, //3307 #CJK UNIFIED IDEOGRAPH
+ {0x96E3, 0x60B6}, //3308 #CJK UNIFIED IDEOGRAPH
+ {0x96E4, 0x7D0B}, //3309 #CJK UNIFIED IDEOGRAPH
+ {0x96E5, 0x9580}, //3310 #CJK UNIFIED IDEOGRAPH
+ {0x96E6, 0x5301}, //3311 #CJK UNIFIED IDEOGRAPH
+ {0x96E7, 0x4E5F}, //3312 #CJK UNIFIED IDEOGRAPH
+ {0x96E8, 0x51B6}, //3313 #CJK UNIFIED IDEOGRAPH
+ {0x96E9, 0x591C}, //3314 #CJK UNIFIED IDEOGRAPH
+ {0x96EA, 0x723A}, //3315 #CJK UNIFIED IDEOGRAPH
+ {0x96EB, 0x8036}, //3316 #CJK UNIFIED IDEOGRAPH
+ {0x96EC, 0x91CE}, //3317 #CJK UNIFIED IDEOGRAPH
+ {0x96ED, 0x5F25}, //3318 #CJK UNIFIED IDEOGRAPH
+ {0x96EE, 0x77E2}, //3319 #CJK UNIFIED IDEOGRAPH
+ {0x96EF, 0x5384}, //3320 #CJK UNIFIED IDEOGRAPH
+ {0x96F0, 0x5F79}, //3321 #CJK UNIFIED IDEOGRAPH
+ {0x96F1, 0x7D04}, //3322 #CJK UNIFIED IDEOGRAPH
+ {0x96F2, 0x85AC}, //3323 #CJK UNIFIED IDEOGRAPH
+ {0x96F3, 0x8A33}, //3324 #CJK UNIFIED IDEOGRAPH
+ {0x96F4, 0x8E8D}, //3325 #CJK UNIFIED IDEOGRAPH
+ {0x96F5, 0x9756}, //3326 #CJK UNIFIED IDEOGRAPH
+ {0x96F6, 0x67F3}, //3327 #CJK UNIFIED IDEOGRAPH
+ {0x96F7, 0x85AE}, //3328 #CJK UNIFIED IDEOGRAPH
+ {0x96F8, 0x9453}, //3329 #CJK UNIFIED IDEOGRAPH
+ {0x96F9, 0x6109}, //3330 #CJK UNIFIED IDEOGRAPH
+ {0x96FA, 0x6108}, //3331 #CJK UNIFIED IDEOGRAPH
+ {0x96FB, 0x6CB9}, //3332 #CJK UNIFIED IDEOGRAPH
+ {0x96FC, 0x7652}, //3333 #CJK UNIFIED IDEOGRAPH
+ {0x9740, 0x8AED}, //3334 #CJK UNIFIED IDEOGRAPH
+ {0x9741, 0x8F38}, //3335 #CJK UNIFIED IDEOGRAPH
+ {0x9742, 0x552F}, //3336 #CJK UNIFIED IDEOGRAPH
+ {0x9743, 0x4F51}, //3337 #CJK UNIFIED IDEOGRAPH
+ {0x9744, 0x512A}, //3338 #CJK UNIFIED IDEOGRAPH
+ {0x9745, 0x52C7}, //3339 #CJK UNIFIED IDEOGRAPH
+ {0x9746, 0x53CB}, //3340 #CJK UNIFIED IDEOGRAPH
+ {0x9747, 0x5BA5}, //3341 #CJK UNIFIED IDEOGRAPH
+ {0x9748, 0x5E7D}, //3342 #CJK UNIFIED IDEOGRAPH
+ {0x9749, 0x60A0}, //3343 #CJK UNIFIED IDEOGRAPH
+ {0x974A, 0x6182}, //3344 #CJK UNIFIED IDEOGRAPH
+ {0x974B, 0x63D6}, //3345 #CJK UNIFIED IDEOGRAPH
+ {0x974C, 0x6709}, //3346 #CJK UNIFIED IDEOGRAPH
+ {0x974D, 0x67DA}, //3347 #CJK UNIFIED IDEOGRAPH
+ {0x974E, 0x6E67}, //3348 #CJK UNIFIED IDEOGRAPH
+ {0x974F, 0x6D8C}, //3349 #CJK UNIFIED IDEOGRAPH
+ {0x9750, 0x7336}, //3350 #CJK UNIFIED IDEOGRAPH
+ {0x9751, 0x7337}, //3351 #CJK UNIFIED IDEOGRAPH
+ {0x9752, 0x7531}, //3352 #CJK UNIFIED IDEOGRAPH
+ {0x9753, 0x7950}, //3353 #CJK UNIFIED IDEOGRAPH
+ {0x9754, 0x88D5}, //3354 #CJK UNIFIED IDEOGRAPH
+ {0x9755, 0x8A98}, //3355 #CJK UNIFIED IDEOGRAPH
+ {0x9756, 0x904A}, //3356 #CJK UNIFIED IDEOGRAPH
+ {0x9757, 0x9091}, //3357 #CJK UNIFIED IDEOGRAPH
+ {0x9758, 0x90F5}, //3358 #CJK UNIFIED IDEOGRAPH
+ {0x9759, 0x96C4}, //3359 #CJK UNIFIED IDEOGRAPH
+ {0x975A, 0x878D}, //3360 #CJK UNIFIED IDEOGRAPH
+ {0x975B, 0x5915}, //3361 #CJK UNIFIED IDEOGRAPH
+ {0x975C, 0x4E88}, //3362 #CJK UNIFIED IDEOGRAPH
+ {0x975D, 0x4F59}, //3363 #CJK UNIFIED IDEOGRAPH
+ {0x975E, 0x4E0E}, //3364 #CJK UNIFIED IDEOGRAPH
+ {0x975F, 0x8A89}, //3365 #CJK UNIFIED IDEOGRAPH
+ {0x9760, 0x8F3F}, //3366 #CJK UNIFIED IDEOGRAPH
+ {0x9761, 0x9810}, //3367 #CJK UNIFIED IDEOGRAPH
+ {0x9762, 0x50AD}, //3368 #CJK UNIFIED IDEOGRAPH
+ {0x9763, 0x5E7C}, //3369 #CJK UNIFIED IDEOGRAPH
+ {0x9764, 0x5996}, //3370 #CJK UNIFIED IDEOGRAPH
+ {0x9765, 0x5BB9}, //3371 #CJK UNIFIED IDEOGRAPH
+ {0x9766, 0x5EB8}, //3372 #CJK UNIFIED IDEOGRAPH
+ {0x9767, 0x63DA}, //3373 #CJK UNIFIED IDEOGRAPH
+ {0x9768, 0x63FA}, //3374 #CJK UNIFIED IDEOGRAPH
+ {0x9769, 0x64C1}, //3375 #CJK UNIFIED IDEOGRAPH
+ {0x976A, 0x66DC}, //3376 #CJK UNIFIED IDEOGRAPH
+ {0x976B, 0x694A}, //3377 #CJK UNIFIED IDEOGRAPH
+ {0x976C, 0x69D8}, //3378 #CJK UNIFIED IDEOGRAPH
+ {0x976D, 0x6D0B}, //3379 #CJK UNIFIED IDEOGRAPH
+ {0x976E, 0x6EB6}, //3380 #CJK UNIFIED IDEOGRAPH
+ {0x976F, 0x7194}, //3381 #CJK UNIFIED IDEOGRAPH
+ {0x9770, 0x7528}, //3382 #CJK UNIFIED IDEOGRAPH
+ {0x9771, 0x7AAF}, //3383 #CJK UNIFIED IDEOGRAPH
+ {0x9772, 0x7F8A}, //3384 #CJK UNIFIED IDEOGRAPH
+ {0x9773, 0x8000}, //3385 #CJK UNIFIED IDEOGRAPH
+ {0x9774, 0x8449}, //3386 #CJK UNIFIED IDEOGRAPH
+ {0x9775, 0x84C9}, //3387 #CJK UNIFIED IDEOGRAPH
+ {0x9776, 0x8981}, //3388 #CJK UNIFIED IDEOGRAPH
+ {0x9777, 0x8B21}, //3389 #CJK UNIFIED IDEOGRAPH
+ {0x9778, 0x8E0A}, //3390 #CJK UNIFIED IDEOGRAPH
+ {0x9779, 0x9065}, //3391 #CJK UNIFIED IDEOGRAPH
+ {0x977A, 0x967D}, //3392 #CJK UNIFIED IDEOGRAPH
+ {0x977B, 0x990A}, //3393 #CJK UNIFIED IDEOGRAPH
+ {0x977C, 0x617E}, //3394 #CJK UNIFIED IDEOGRAPH
+ {0x977D, 0x6291}, //3395 #CJK UNIFIED IDEOGRAPH
+ {0x977E, 0x6B32}, //3396 #CJK UNIFIED IDEOGRAPH
+ {0x9780, 0x6C83}, //3397 #CJK UNIFIED IDEOGRAPH
+ {0x9781, 0x6D74}, //3398 #CJK UNIFIED IDEOGRAPH
+ {0x9782, 0x7FCC}, //3399 #CJK UNIFIED IDEOGRAPH
+ {0x9783, 0x7FFC}, //3400 #CJK UNIFIED IDEOGRAPH
+ {0x9784, 0x6DC0}, //3401 #CJK UNIFIED IDEOGRAPH
+ {0x9785, 0x7F85}, //3402 #CJK UNIFIED IDEOGRAPH
+ {0x9786, 0x87BA}, //3403 #CJK UNIFIED IDEOGRAPH
+ {0x9787, 0x88F8}, //3404 #CJK UNIFIED IDEOGRAPH
+ {0x9788, 0x6765}, //3405 #CJK UNIFIED IDEOGRAPH
+ {0x9789, 0x83B1}, //3406 #CJK UNIFIED IDEOGRAPH
+ {0x978A, 0x983C}, //3407 #CJK UNIFIED IDEOGRAPH
+ {0x978B, 0x96F7}, //3408 #CJK UNIFIED IDEOGRAPH
+ {0x978C, 0x6D1B}, //3409 #CJK UNIFIED IDEOGRAPH
+ {0x978D, 0x7D61}, //3410 #CJK UNIFIED IDEOGRAPH
+ {0x978E, 0x843D}, //3411 #CJK UNIFIED IDEOGRAPH
+ {0x978F, 0x916A}, //3412 #CJK UNIFIED IDEOGRAPH
+ {0x9790, 0x4E71}, //3413 #CJK UNIFIED IDEOGRAPH
+ {0x9791, 0x5375}, //3414 #CJK UNIFIED IDEOGRAPH
+ {0x9792, 0x5D50}, //3415 #CJK UNIFIED IDEOGRAPH
+ {0x9793, 0x6B04}, //3416 #CJK UNIFIED IDEOGRAPH
+ {0x9794, 0x6FEB}, //3417 #CJK UNIFIED IDEOGRAPH
+ {0x9795, 0x85CD}, //3418 #CJK UNIFIED IDEOGRAPH
+ {0x9796, 0x862D}, //3419 #CJK UNIFIED IDEOGRAPH
+ {0x9797, 0x89A7}, //3420 #CJK UNIFIED IDEOGRAPH
+ {0x9798, 0x5229}, //3421 #CJK UNIFIED IDEOGRAPH
+ {0x9799, 0x540F}, //3422 #CJK UNIFIED IDEOGRAPH
+ {0x979A, 0x5C65}, //3423 #CJK UNIFIED IDEOGRAPH
+ {0x979B, 0x674E}, //3424 #CJK UNIFIED IDEOGRAPH
+ {0x979C, 0x68A8}, //3425 #CJK UNIFIED IDEOGRAPH
+ {0x979D, 0x7406}, //3426 #CJK UNIFIED IDEOGRAPH
+ {0x979E, 0x7483}, //3427 #CJK UNIFIED IDEOGRAPH
+ {0x979F, 0x75E2}, //3428 #CJK UNIFIED IDEOGRAPH
+ {0x97A0, 0x88CF}, //3429 #CJK UNIFIED IDEOGRAPH
+ {0x97A1, 0x88E1}, //3430 #CJK UNIFIED IDEOGRAPH
+ {0x97A2, 0x91CC}, //3431 #CJK UNIFIED IDEOGRAPH
+ {0x97A3, 0x96E2}, //3432 #CJK UNIFIED IDEOGRAPH
+ {0x97A4, 0x9678}, //3433 #CJK UNIFIED IDEOGRAPH
+ {0x97A5, 0x5F8B}, //3434 #CJK UNIFIED IDEOGRAPH
+ {0x97A6, 0x7387}, //3435 #CJK UNIFIED IDEOGRAPH
+ {0x97A7, 0x7ACB}, //3436 #CJK UNIFIED IDEOGRAPH
+ {0x97A8, 0x844E}, //3437 #CJK UNIFIED IDEOGRAPH
+ {0x97A9, 0x63A0}, //3438 #CJK UNIFIED IDEOGRAPH
+ {0x97AA, 0x7565}, //3439 #CJK UNIFIED IDEOGRAPH
+ {0x97AB, 0x5289}, //3440 #CJK UNIFIED IDEOGRAPH
+ {0x97AC, 0x6D41}, //3441 #CJK UNIFIED IDEOGRAPH
+ {0x97AD, 0x6E9C}, //3442 #CJK UNIFIED IDEOGRAPH
+ {0x97AE, 0x7409}, //3443 #CJK UNIFIED IDEOGRAPH
+ {0x97AF, 0x7559}, //3444 #CJK UNIFIED IDEOGRAPH
+ {0x97B0, 0x786B}, //3445 #CJK UNIFIED IDEOGRAPH
+ {0x97B1, 0x7C92}, //3446 #CJK UNIFIED IDEOGRAPH
+ {0x97B2, 0x9686}, //3447 #CJK UNIFIED IDEOGRAPH
+ {0x97B3, 0x7ADC}, //3448 #CJK UNIFIED IDEOGRAPH
+ {0x97B4, 0x9F8D}, //3449 #CJK UNIFIED IDEOGRAPH
+ {0x97B5, 0x4FB6}, //3450 #CJK UNIFIED IDEOGRAPH
+ {0x97B6, 0x616E}, //3451 #CJK UNIFIED IDEOGRAPH
+ {0x97B7, 0x65C5}, //3452 #CJK UNIFIED IDEOGRAPH
+ {0x97B8, 0x865C}, //3453 #CJK UNIFIED IDEOGRAPH
+ {0x97B9, 0x4E86}, //3454 #CJK UNIFIED IDEOGRAPH
+ {0x97BA, 0x4EAE}, //3455 #CJK UNIFIED IDEOGRAPH
+ {0x97BB, 0x50DA}, //3456 #CJK UNIFIED IDEOGRAPH
+ {0x97BC, 0x4E21}, //3457 #CJK UNIFIED IDEOGRAPH
+ {0x97BD, 0x51CC}, //3458 #CJK UNIFIED IDEOGRAPH
+ {0x97BE, 0x5BEE}, //3459 #CJK UNIFIED IDEOGRAPH
+ {0x97BF, 0x6599}, //3460 #CJK UNIFIED IDEOGRAPH
+ {0x97C0, 0x6881}, //3461 #CJK UNIFIED IDEOGRAPH
+ {0x97C1, 0x6DBC}, //3462 #CJK UNIFIED IDEOGRAPH
+ {0x97C2, 0x731F}, //3463 #CJK UNIFIED IDEOGRAPH
+ {0x97C3, 0x7642}, //3464 #CJK UNIFIED IDEOGRAPH
+ {0x97C4, 0x77AD}, //3465 #CJK UNIFIED IDEOGRAPH
+ {0x97C5, 0x7A1C}, //3466 #CJK UNIFIED IDEOGRAPH
+ {0x97C6, 0x7CE7}, //3467 #CJK UNIFIED IDEOGRAPH
+ {0x97C7, 0x826F}, //3468 #CJK UNIFIED IDEOGRAPH
+ {0x97C8, 0x8AD2}, //3469 #CJK UNIFIED IDEOGRAPH
+ {0x97C9, 0x907C}, //3470 #CJK UNIFIED IDEOGRAPH
+ {0x97CA, 0x91CF}, //3471 #CJK UNIFIED IDEOGRAPH
+ {0x97CB, 0x9675}, //3472 #CJK UNIFIED IDEOGRAPH
+ {0x97CC, 0x9818}, //3473 #CJK UNIFIED IDEOGRAPH
+ {0x97CD, 0x529B}, //3474 #CJK UNIFIED IDEOGRAPH
+ {0x97CE, 0x7DD1}, //3475 #CJK UNIFIED IDEOGRAPH
+ {0x97CF, 0x502B}, //3476 #CJK UNIFIED IDEOGRAPH
+ {0x97D0, 0x5398}, //3477 #CJK UNIFIED IDEOGRAPH
+ {0x97D1, 0x6797}, //3478 #CJK UNIFIED IDEOGRAPH
+ {0x97D2, 0x6DCB}, //3479 #CJK UNIFIED IDEOGRAPH
+ {0x97D3, 0x71D0}, //3480 #CJK UNIFIED IDEOGRAPH
+ {0x97D4, 0x7433}, //3481 #CJK UNIFIED IDEOGRAPH
+ {0x97D5, 0x81E8}, //3482 #CJK UNIFIED IDEOGRAPH
+ {0x97D6, 0x8F2A}, //3483 #CJK UNIFIED IDEOGRAPH
+ {0x97D7, 0x96A3}, //3484 #CJK UNIFIED IDEOGRAPH
+ {0x97D8, 0x9C57}, //3485 #CJK UNIFIED IDEOGRAPH
+ {0x97D9, 0x9E9F}, //3486 #CJK UNIFIED IDEOGRAPH
+ {0x97DA, 0x7460}, //3487 #CJK UNIFIED IDEOGRAPH
+ {0x97DB, 0x5841}, //3488 #CJK UNIFIED IDEOGRAPH
+ {0x97DC, 0x6D99}, //3489 #CJK UNIFIED IDEOGRAPH
+ {0x97DD, 0x7D2F}, //3490 #CJK UNIFIED IDEOGRAPH
+ {0x97DE, 0x985E}, //3491 #CJK UNIFIED IDEOGRAPH
+ {0x97DF, 0x4EE4}, //3492 #CJK UNIFIED IDEOGRAPH
+ {0x97E0, 0x4F36}, //3493 #CJK UNIFIED IDEOGRAPH
+ {0x97E1, 0x4F8B}, //3494 #CJK UNIFIED IDEOGRAPH
+ {0x97E2, 0x51B7}, //3495 #CJK UNIFIED IDEOGRAPH
+ {0x97E3, 0x52B1}, //3496 #CJK UNIFIED IDEOGRAPH
+ {0x97E4, 0x5DBA}, //3497 #CJK UNIFIED IDEOGRAPH
+ {0x97E5, 0x601C}, //3498 #CJK UNIFIED IDEOGRAPH
+ {0x97E6, 0x73B2}, //3499 #CJK UNIFIED IDEOGRAPH
+ {0x97E7, 0x793C}, //3500 #CJK UNIFIED IDEOGRAPH
+ {0x97E8, 0x82D3}, //3501 #CJK UNIFIED IDEOGRAPH
+ {0x97E9, 0x9234}, //3502 #CJK UNIFIED IDEOGRAPH
+ {0x97EA, 0x96B7}, //3503 #CJK UNIFIED IDEOGRAPH
+ {0x97EB, 0x96F6}, //3504 #CJK UNIFIED IDEOGRAPH
+ {0x97EC, 0x970A}, //3505 #CJK UNIFIED IDEOGRAPH
+ {0x97ED, 0x9E97}, //3506 #CJK UNIFIED IDEOGRAPH
+ {0x97EE, 0x9F62}, //3507 #CJK UNIFIED IDEOGRAPH
+ {0x97EF, 0x66A6}, //3508 #CJK UNIFIED IDEOGRAPH
+ {0x97F0, 0x6B74}, //3509 #CJK UNIFIED IDEOGRAPH
+ {0x97F1, 0x5217}, //3510 #CJK UNIFIED IDEOGRAPH
+ {0x97F2, 0x52A3}, //3511 #CJK UNIFIED IDEOGRAPH
+ {0x97F3, 0x70C8}, //3512 #CJK UNIFIED IDEOGRAPH
+ {0x97F4, 0x88C2}, //3513 #CJK UNIFIED IDEOGRAPH
+ {0x97F5, 0x5EC9}, //3514 #CJK UNIFIED IDEOGRAPH
+ {0x97F6, 0x604B}, //3515 #CJK UNIFIED IDEOGRAPH
+ {0x97F7, 0x6190}, //3516 #CJK UNIFIED IDEOGRAPH
+ {0x97F8, 0x6F23}, //3517 #CJK UNIFIED IDEOGRAPH
+ {0x97F9, 0x7149}, //3518 #CJK UNIFIED IDEOGRAPH
+ {0x97FA, 0x7C3E}, //3519 #CJK UNIFIED IDEOGRAPH
+ {0x97FB, 0x7DF4}, //3520 #CJK UNIFIED IDEOGRAPH
+ {0x97FC, 0x806F}, //3521 #CJK UNIFIED IDEOGRAPH
+ {0x9840, 0x84EE}, //3522 #CJK UNIFIED IDEOGRAPH
+ {0x9841, 0x9023}, //3523 #CJK UNIFIED IDEOGRAPH
+ {0x9842, 0x932C}, //3524 #CJK UNIFIED IDEOGRAPH
+ {0x9843, 0x5442}, //3525 #CJK UNIFIED IDEOGRAPH
+ {0x9844, 0x9B6F}, //3526 #CJK UNIFIED IDEOGRAPH
+ {0x9845, 0x6AD3}, //3527 #CJK UNIFIED IDEOGRAPH
+ {0x9846, 0x7089}, //3528 #CJK UNIFIED IDEOGRAPH
+ {0x9847, 0x8CC2}, //3529 #CJK UNIFIED IDEOGRAPH
+ {0x9848, 0x8DEF}, //3530 #CJK UNIFIED IDEOGRAPH
+ {0x9849, 0x9732}, //3531 #CJK UNIFIED IDEOGRAPH
+ {0x984A, 0x52B4}, //3532 #CJK UNIFIED IDEOGRAPH
+ {0x984B, 0x5A41}, //3533 #CJK UNIFIED IDEOGRAPH
+ {0x984C, 0x5ECA}, //3534 #CJK UNIFIED IDEOGRAPH
+ {0x984D, 0x5F04}, //3535 #CJK UNIFIED IDEOGRAPH
+ {0x984E, 0x6717}, //3536 #CJK UNIFIED IDEOGRAPH
+ {0x984F, 0x697C}, //3537 #CJK UNIFIED IDEOGRAPH
+ {0x9850, 0x6994}, //3538 #CJK UNIFIED IDEOGRAPH
+ {0x9851, 0x6D6A}, //3539 #CJK UNIFIED IDEOGRAPH
+ {0x9852, 0x6F0F}, //3540 #CJK UNIFIED IDEOGRAPH
+ {0x9853, 0x7262}, //3541 #CJK UNIFIED IDEOGRAPH
+ {0x9854, 0x72FC}, //3542 #CJK UNIFIED IDEOGRAPH
+ {0x9855, 0x7BED}, //3543 #CJK UNIFIED IDEOGRAPH
+ {0x9856, 0x8001}, //3544 #CJK UNIFIED IDEOGRAPH
+ {0x9857, 0x807E}, //3545 #CJK UNIFIED IDEOGRAPH
+ {0x9858, 0x874B}, //3546 #CJK UNIFIED IDEOGRAPH
+ {0x9859, 0x90CE}, //3547 #CJK UNIFIED IDEOGRAPH
+ {0x985A, 0x516D}, //3548 #CJK UNIFIED IDEOGRAPH
+ {0x985B, 0x9E93}, //3549 #CJK UNIFIED IDEOGRAPH
+ {0x985C, 0x7984}, //3550 #CJK UNIFIED IDEOGRAPH
+ {0x985D, 0x808B}, //3551 #CJK UNIFIED IDEOGRAPH
+ {0x985E, 0x9332}, //3552 #CJK UNIFIED IDEOGRAPH
+ {0x985F, 0x8AD6}, //3553 #CJK UNIFIED IDEOGRAPH
+ {0x9860, 0x502D}, //3554 #CJK UNIFIED IDEOGRAPH
+ {0x9861, 0x548C}, //3555 #CJK UNIFIED IDEOGRAPH
+ {0x9862, 0x8A71}, //3556 #CJK UNIFIED IDEOGRAPH
+ {0x9863, 0x6B6A}, //3557 #CJK UNIFIED IDEOGRAPH
+ {0x9864, 0x8CC4}, //3558 #CJK UNIFIED IDEOGRAPH
+ {0x9865, 0x8107}, //3559 #CJK UNIFIED IDEOGRAPH
+ {0x9866, 0x60D1}, //3560 #CJK UNIFIED IDEOGRAPH
+ {0x9867, 0x67A0}, //3561 #CJK UNIFIED IDEOGRAPH
+ {0x9868, 0x9DF2}, //3562 #CJK UNIFIED IDEOGRAPH
+ {0x9869, 0x4E99}, //3563 #CJK UNIFIED IDEOGRAPH
+ {0x986A, 0x4E98}, //3564 #CJK UNIFIED IDEOGRAPH
+ {0x986B, 0x9C10}, //3565 #CJK UNIFIED IDEOGRAPH
+ {0x986C, 0x8A6B}, //3566 #CJK UNIFIED IDEOGRAPH
+ {0x986D, 0x85C1}, //3567 #CJK UNIFIED IDEOGRAPH
+ {0x986E, 0x8568}, //3568 #CJK UNIFIED IDEOGRAPH
+ {0x986F, 0x6900}, //3569 #CJK UNIFIED IDEOGRAPH
+ {0x9870, 0x6E7E}, //3570 #CJK UNIFIED IDEOGRAPH
+ {0x9871, 0x7897}, //3571 #CJK UNIFIED IDEOGRAPH
+ {0x9872, 0x8155}, //3572 #CJK UNIFIED IDEOGRAPH
+ {0x989F, 0x5F0C}, //3573 #CJK UNIFIED IDEOGRAPH
+ {0x98A0, 0x4E10}, //3574 #CJK UNIFIED IDEOGRAPH
+ {0x98A1, 0x4E15}, //3575 #CJK UNIFIED IDEOGRAPH
+ {0x98A2, 0x4E2A}, //3576 #CJK UNIFIED IDEOGRAPH
+ {0x98A3, 0x4E31}, //3577 #CJK UNIFIED IDEOGRAPH
+ {0x98A4, 0x4E36}, //3578 #CJK UNIFIED IDEOGRAPH
+ {0x98A5, 0x4E3C}, //3579 #CJK UNIFIED IDEOGRAPH
+ {0x98A6, 0x4E3F}, //3580 #CJK UNIFIED IDEOGRAPH
+ {0x98A7, 0x4E42}, //3581 #CJK UNIFIED IDEOGRAPH
+ {0x98A8, 0x4E56}, //3582 #CJK UNIFIED IDEOGRAPH
+ {0x98A9, 0x4E58}, //3583 #CJK UNIFIED IDEOGRAPH
+ {0x98AA, 0x4E82}, //3584 #CJK UNIFIED IDEOGRAPH
+ {0x98AB, 0x4E85}, //3585 #CJK UNIFIED IDEOGRAPH
+ {0x98AC, 0x8C6B}, //3586 #CJK UNIFIED IDEOGRAPH
+ {0x98AD, 0x4E8A}, //3587 #CJK UNIFIED IDEOGRAPH
+ {0x98AE, 0x8212}, //3588 #CJK UNIFIED IDEOGRAPH
+ {0x98AF, 0x5F0D}, //3589 #CJK UNIFIED IDEOGRAPH
+ {0x98B0, 0x4E8E}, //3590 #CJK UNIFIED IDEOGRAPH
+ {0x98B1, 0x4E9E}, //3591 #CJK UNIFIED IDEOGRAPH
+ {0x98B2, 0x4E9F}, //3592 #CJK UNIFIED IDEOGRAPH
+ {0x98B3, 0x4EA0}, //3593 #CJK UNIFIED IDEOGRAPH
+ {0x98B4, 0x4EA2}, //3594 #CJK UNIFIED IDEOGRAPH
+ {0x98B5, 0x4EB0}, //3595 #CJK UNIFIED IDEOGRAPH
+ {0x98B6, 0x4EB3}, //3596 #CJK UNIFIED IDEOGRAPH
+ {0x98B7, 0x4EB6}, //3597 #CJK UNIFIED IDEOGRAPH
+ {0x98B8, 0x4ECE}, //3598 #CJK UNIFIED IDEOGRAPH
+ {0x98B9, 0x4ECD}, //3599 #CJK UNIFIED IDEOGRAPH
+ {0x98BA, 0x4EC4}, //3600 #CJK UNIFIED IDEOGRAPH
+ {0x98BB, 0x4EC6}, //3601 #CJK UNIFIED IDEOGRAPH
+ {0x98BC, 0x4EC2}, //3602 #CJK UNIFIED IDEOGRAPH
+ {0x98BD, 0x4ED7}, //3603 #CJK UNIFIED IDEOGRAPH
+ {0x98BE, 0x4EDE}, //3604 #CJK UNIFIED IDEOGRAPH
+ {0x98BF, 0x4EED}, //3605 #CJK UNIFIED IDEOGRAPH
+ {0x98C0, 0x4EDF}, //3606 #CJK UNIFIED IDEOGRAPH
+ {0x98C1, 0x4EF7}, //3607 #CJK UNIFIED IDEOGRAPH
+ {0x98C2, 0x4F09}, //3608 #CJK UNIFIED IDEOGRAPH
+ {0x98C3, 0x4F5A}, //3609 #CJK UNIFIED IDEOGRAPH
+ {0x98C4, 0x4F30}, //3610 #CJK UNIFIED IDEOGRAPH
+ {0x98C5, 0x4F5B}, //3611 #CJK UNIFIED IDEOGRAPH
+ {0x98C6, 0x4F5D}, //3612 #CJK UNIFIED IDEOGRAPH
+ {0x98C7, 0x4F57}, //3613 #CJK UNIFIED IDEOGRAPH
+ {0x98C8, 0x4F47}, //3614 #CJK UNIFIED IDEOGRAPH
+ {0x98C9, 0x4F76}, //3615 #CJK UNIFIED IDEOGRAPH
+ {0x98CA, 0x4F88}, //3616 #CJK UNIFIED IDEOGRAPH
+ {0x98CB, 0x4F8F}, //3617 #CJK UNIFIED IDEOGRAPH
+ {0x98CC, 0x4F98}, //3618 #CJK UNIFIED IDEOGRAPH
+ {0x98CD, 0x4F7B}, //3619 #CJK UNIFIED IDEOGRAPH
+ {0x98CE, 0x4F69}, //3620 #CJK UNIFIED IDEOGRAPH
+ {0x98CF, 0x4F70}, //3621 #CJK UNIFIED IDEOGRAPH
+ {0x98D0, 0x4F91}, //3622 #CJK UNIFIED IDEOGRAPH
+ {0x98D1, 0x4F6F}, //3623 #CJK UNIFIED IDEOGRAPH
+ {0x98D2, 0x4F86}, //3624 #CJK UNIFIED IDEOGRAPH
+ {0x98D3, 0x4F96}, //3625 #CJK UNIFIED IDEOGRAPH
+ {0x98D4, 0x5118}, //3626 #CJK UNIFIED IDEOGRAPH
+ {0x98D5, 0x4FD4}, //3627 #CJK UNIFIED IDEOGRAPH
+ {0x98D6, 0x4FDF}, //3628 #CJK UNIFIED IDEOGRAPH
+ {0x98D7, 0x4FCE}, //3629 #CJK UNIFIED IDEOGRAPH
+ {0x98D8, 0x4FD8}, //3630 #CJK UNIFIED IDEOGRAPH
+ {0x98D9, 0x4FDB}, //3631 #CJK UNIFIED IDEOGRAPH
+ {0x98DA, 0x4FD1}, //3632 #CJK UNIFIED IDEOGRAPH
+ {0x98DB, 0x4FDA}, //3633 #CJK UNIFIED IDEOGRAPH
+ {0x98DC, 0x4FD0}, //3634 #CJK UNIFIED IDEOGRAPH
+ {0x98DD, 0x4FE4}, //3635 #CJK UNIFIED IDEOGRAPH
+ {0x98DE, 0x4FE5}, //3636 #CJK UNIFIED IDEOGRAPH
+ {0x98DF, 0x501A}, //3637 #CJK UNIFIED IDEOGRAPH
+ {0x98E0, 0x5028}, //3638 #CJK UNIFIED IDEOGRAPH
+ {0x98E1, 0x5014}, //3639 #CJK UNIFIED IDEOGRAPH
+ {0x98E2, 0x502A}, //3640 #CJK UNIFIED IDEOGRAPH
+ {0x98E3, 0x5025}, //3641 #CJK UNIFIED IDEOGRAPH
+ {0x98E4, 0x5005}, //3642 #CJK UNIFIED IDEOGRAPH
+ {0x98E5, 0x4F1C}, //3643 #CJK UNIFIED IDEOGRAPH
+ {0x98E6, 0x4FF6}, //3644 #CJK UNIFIED IDEOGRAPH
+ {0x98E7, 0x5021}, //3645 #CJK UNIFIED IDEOGRAPH
+ {0x98E8, 0x5029}, //3646 #CJK UNIFIED IDEOGRAPH
+ {0x98E9, 0x502C}, //3647 #CJK UNIFIED IDEOGRAPH
+ {0x98EA, 0x4FFE}, //3648 #CJK UNIFIED IDEOGRAPH
+ {0x98EB, 0x4FEF}, //3649 #CJK UNIFIED IDEOGRAPH
+ {0x98EC, 0x5011}, //3650 #CJK UNIFIED IDEOGRAPH
+ {0x98ED, 0x5006}, //3651 #CJK UNIFIED IDEOGRAPH
+ {0x98EE, 0x5043}, //3652 #CJK UNIFIED IDEOGRAPH
+ {0x98EF, 0x5047}, //3653 #CJK UNIFIED IDEOGRAPH
+ {0x98F0, 0x6703}, //3654 #CJK UNIFIED IDEOGRAPH
+ {0x98F1, 0x5055}, //3655 #CJK UNIFIED IDEOGRAPH
+ {0x98F2, 0x5050}, //3656 #CJK UNIFIED IDEOGRAPH
+ {0x98F3, 0x5048}, //3657 #CJK UNIFIED IDEOGRAPH
+ {0x98F4, 0x505A}, //3658 #CJK UNIFIED IDEOGRAPH
+ {0x98F5, 0x5056}, //3659 #CJK UNIFIED IDEOGRAPH
+ {0x98F6, 0x506C}, //3660 #CJK UNIFIED IDEOGRAPH
+ {0x98F7, 0x5078}, //3661 #CJK UNIFIED IDEOGRAPH
+ {0x98F8, 0x5080}, //3662 #CJK UNIFIED IDEOGRAPH
+ {0x98F9, 0x509A}, //3663 #CJK UNIFIED IDEOGRAPH
+ {0x98FA, 0x5085}, //3664 #CJK UNIFIED IDEOGRAPH
+ {0x98FB, 0x50B4}, //3665 #CJK UNIFIED IDEOGRAPH
+ {0x98FC, 0x50B2}, //3666 #CJK UNIFIED IDEOGRAPH
+ {0x9940, 0x50C9}, //3667 #CJK UNIFIED IDEOGRAPH
+ {0x9941, 0x50CA}, //3668 #CJK UNIFIED IDEOGRAPH
+ {0x9942, 0x50B3}, //3669 #CJK UNIFIED IDEOGRAPH
+ {0x9943, 0x50C2}, //3670 #CJK UNIFIED IDEOGRAPH
+ {0x9944, 0x50D6}, //3671 #CJK UNIFIED IDEOGRAPH
+ {0x9945, 0x50DE}, //3672 #CJK UNIFIED IDEOGRAPH
+ {0x9946, 0x50E5}, //3673 #CJK UNIFIED IDEOGRAPH
+ {0x9947, 0x50ED}, //3674 #CJK UNIFIED IDEOGRAPH
+ {0x9948, 0x50E3}, //3675 #CJK UNIFIED IDEOGRAPH
+ {0x9949, 0x50EE}, //3676 #CJK UNIFIED IDEOGRAPH
+ {0x994A, 0x50F9}, //3677 #CJK UNIFIED IDEOGRAPH
+ {0x994B, 0x50F5}, //3678 #CJK UNIFIED IDEOGRAPH
+ {0x994C, 0x5109}, //3679 #CJK UNIFIED IDEOGRAPH
+ {0x994D, 0x5101}, //3680 #CJK UNIFIED IDEOGRAPH
+ {0x994E, 0x5102}, //3681 #CJK UNIFIED IDEOGRAPH
+ {0x994F, 0x5116}, //3682 #CJK UNIFIED IDEOGRAPH
+ {0x9950, 0x5115}, //3683 #CJK UNIFIED IDEOGRAPH
+ {0x9951, 0x5114}, //3684 #CJK UNIFIED IDEOGRAPH
+ {0x9952, 0x511A}, //3685 #CJK UNIFIED IDEOGRAPH
+ {0x9953, 0x5121}, //3686 #CJK UNIFIED IDEOGRAPH
+ {0x9954, 0x513A}, //3687 #CJK UNIFIED IDEOGRAPH
+ {0x9955, 0x5137}, //3688 #CJK UNIFIED IDEOGRAPH
+ {0x9956, 0x513C}, //3689 #CJK UNIFIED IDEOGRAPH
+ {0x9957, 0x513B}, //3690 #CJK UNIFIED IDEOGRAPH
+ {0x9958, 0x513F}, //3691 #CJK UNIFIED IDEOGRAPH
+ {0x9959, 0x5140}, //3692 #CJK UNIFIED IDEOGRAPH
+ {0x995A, 0x5152}, //3693 #CJK UNIFIED IDEOGRAPH
+ {0x995B, 0x514C}, //3694 #CJK UNIFIED IDEOGRAPH
+ {0x995C, 0x5154}, //3695 #CJK UNIFIED IDEOGRAPH
+ {0x995D, 0x5162}, //3696 #CJK UNIFIED IDEOGRAPH
+ {0x995E, 0x7AF8}, //3697 #CJK UNIFIED IDEOGRAPH
+ {0x995F, 0x5169}, //3698 #CJK UNIFIED IDEOGRAPH
+ {0x9960, 0x516A}, //3699 #CJK UNIFIED IDEOGRAPH
+ {0x9961, 0x516E}, //3700 #CJK UNIFIED IDEOGRAPH
+ {0x9962, 0x5180}, //3701 #CJK UNIFIED IDEOGRAPH
+ {0x9963, 0x5182}, //3702 #CJK UNIFIED IDEOGRAPH
+ {0x9964, 0x56D8}, //3703 #CJK UNIFIED IDEOGRAPH
+ {0x9965, 0x518C}, //3704 #CJK UNIFIED IDEOGRAPH
+ {0x9966, 0x5189}, //3705 #CJK UNIFIED IDEOGRAPH
+ {0x9967, 0x518F}, //3706 #CJK UNIFIED IDEOGRAPH
+ {0x9968, 0x5191}, //3707 #CJK UNIFIED IDEOGRAPH
+ {0x9969, 0x5193}, //3708 #CJK UNIFIED IDEOGRAPH
+ {0x996A, 0x5195}, //3709 #CJK UNIFIED IDEOGRAPH
+ {0x996B, 0x5196}, //3710 #CJK UNIFIED IDEOGRAPH
+ {0x996C, 0x51A4}, //3711 #CJK UNIFIED IDEOGRAPH
+ {0x996D, 0x51A6}, //3712 #CJK UNIFIED IDEOGRAPH
+ {0x996E, 0x51A2}, //3713 #CJK UNIFIED IDEOGRAPH
+ {0x996F, 0x51A9}, //3714 #CJK UNIFIED IDEOGRAPH
+ {0x9970, 0x51AA}, //3715 #CJK UNIFIED IDEOGRAPH
+ {0x9971, 0x51AB}, //3716 #CJK UNIFIED IDEOGRAPH
+ {0x9972, 0x51B3}, //3717 #CJK UNIFIED IDEOGRAPH
+ {0x9973, 0x51B1}, //3718 #CJK UNIFIED IDEOGRAPH
+ {0x9974, 0x51B2}, //3719 #CJK UNIFIED IDEOGRAPH
+ {0x9975, 0x51B0}, //3720 #CJK UNIFIED IDEOGRAPH
+ {0x9976, 0x51B5}, //3721 #CJK UNIFIED IDEOGRAPH
+ {0x9977, 0x51BD}, //3722 #CJK UNIFIED IDEOGRAPH
+ {0x9978, 0x51C5}, //3723 #CJK UNIFIED IDEOGRAPH
+ {0x9979, 0x51C9}, //3724 #CJK UNIFIED IDEOGRAPH
+ {0x997A, 0x51DB}, //3725 #CJK UNIFIED IDEOGRAPH
+ {0x997B, 0x51E0}, //3726 #CJK UNIFIED IDEOGRAPH
+ {0x997C, 0x8655}, //3727 #CJK UNIFIED IDEOGRAPH
+ {0x997D, 0x51E9}, //3728 #CJK UNIFIED IDEOGRAPH
+ {0x997E, 0x51ED}, //3729 #CJK UNIFIED IDEOGRAPH
+ {0x9980, 0x51F0}, //3730 #CJK UNIFIED IDEOGRAPH
+ {0x9981, 0x51F5}, //3731 #CJK UNIFIED IDEOGRAPH
+ {0x9982, 0x51FE}, //3732 #CJK UNIFIED IDEOGRAPH
+ {0x9983, 0x5204}, //3733 #CJK UNIFIED IDEOGRAPH
+ {0x9984, 0x520B}, //3734 #CJK UNIFIED IDEOGRAPH
+ {0x9985, 0x5214}, //3735 #CJK UNIFIED IDEOGRAPH
+ {0x9986, 0x520E}, //3736 #CJK UNIFIED IDEOGRAPH
+ {0x9987, 0x5227}, //3737 #CJK UNIFIED IDEOGRAPH
+ {0x9988, 0x522A}, //3738 #CJK UNIFIED IDEOGRAPH
+ {0x9989, 0x522E}, //3739 #CJK UNIFIED IDEOGRAPH
+ {0x998A, 0x5233}, //3740 #CJK UNIFIED IDEOGRAPH
+ {0x998B, 0x5239}, //3741 #CJK UNIFIED IDEOGRAPH
+ {0x998C, 0x524F}, //3742 #CJK UNIFIED IDEOGRAPH
+ {0x998D, 0x5244}, //3743 #CJK UNIFIED IDEOGRAPH
+ {0x998E, 0x524B}, //3744 #CJK UNIFIED IDEOGRAPH
+ {0x998F, 0x524C}, //3745 #CJK UNIFIED IDEOGRAPH
+ {0x9990, 0x525E}, //3746 #CJK UNIFIED IDEOGRAPH
+ {0x9991, 0x5254}, //3747 #CJK UNIFIED IDEOGRAPH
+ {0x9992, 0x526A}, //3748 #CJK UNIFIED IDEOGRAPH
+ {0x9993, 0x5274}, //3749 #CJK UNIFIED IDEOGRAPH
+ {0x9994, 0x5269}, //3750 #CJK UNIFIED IDEOGRAPH
+ {0x9995, 0x5273}, //3751 #CJK UNIFIED IDEOGRAPH
+ {0x9996, 0x527F}, //3752 #CJK UNIFIED IDEOGRAPH
+ {0x9997, 0x527D}, //3753 #CJK UNIFIED IDEOGRAPH
+ {0x9998, 0x528D}, //3754 #CJK UNIFIED IDEOGRAPH
+ {0x9999, 0x5294}, //3755 #CJK UNIFIED IDEOGRAPH
+ {0x999A, 0x5292}, //3756 #CJK UNIFIED IDEOGRAPH
+ {0x999B, 0x5271}, //3757 #CJK UNIFIED IDEOGRAPH
+ {0x999C, 0x5288}, //3758 #CJK UNIFIED IDEOGRAPH
+ {0x999D, 0x5291}, //3759 #CJK UNIFIED IDEOGRAPH
+ {0x999E, 0x8FA8}, //3760 #CJK UNIFIED IDEOGRAPH
+ {0x999F, 0x8FA7}, //3761 #CJK UNIFIED IDEOGRAPH
+ {0x99A0, 0x52AC}, //3762 #CJK UNIFIED IDEOGRAPH
+ {0x99A1, 0x52AD}, //3763 #CJK UNIFIED IDEOGRAPH
+ {0x99A2, 0x52BC}, //3764 #CJK UNIFIED IDEOGRAPH
+ {0x99A3, 0x52B5}, //3765 #CJK UNIFIED IDEOGRAPH
+ {0x99A4, 0x52C1}, //3766 #CJK UNIFIED IDEOGRAPH
+ {0x99A5, 0x52CD}, //3767 #CJK UNIFIED IDEOGRAPH
+ {0x99A6, 0x52D7}, //3768 #CJK UNIFIED IDEOGRAPH
+ {0x99A7, 0x52DE}, //3769 #CJK UNIFIED IDEOGRAPH
+ {0x99A8, 0x52E3}, //3770 #CJK UNIFIED IDEOGRAPH
+ {0x99A9, 0x52E6}, //3771 #CJK UNIFIED IDEOGRAPH
+ {0x99AA, 0x98ED}, //3772 #CJK UNIFIED IDEOGRAPH
+ {0x99AB, 0x52E0}, //3773 #CJK UNIFIED IDEOGRAPH
+ {0x99AC, 0x52F3}, //3774 #CJK UNIFIED IDEOGRAPH
+ {0x99AD, 0x52F5}, //3775 #CJK UNIFIED IDEOGRAPH
+ {0x99AE, 0x52F8}, //3776 #CJK UNIFIED IDEOGRAPH
+ {0x99AF, 0x52F9}, //3777 #CJK UNIFIED IDEOGRAPH
+ {0x99B0, 0x5306}, //3778 #CJK UNIFIED IDEOGRAPH
+ {0x99B1, 0x5308}, //3779 #CJK UNIFIED IDEOGRAPH
+ {0x99B2, 0x7538}, //3780 #CJK UNIFIED IDEOGRAPH
+ {0x99B3, 0x530D}, //3781 #CJK UNIFIED IDEOGRAPH
+ {0x99B4, 0x5310}, //3782 #CJK UNIFIED IDEOGRAPH
+ {0x99B5, 0x530F}, //3783 #CJK UNIFIED IDEOGRAPH
+ {0x99B6, 0x5315}, //3784 #CJK UNIFIED IDEOGRAPH
+ {0x99B7, 0x531A}, //3785 #CJK UNIFIED IDEOGRAPH
+ {0x99B8, 0x5323}, //3786 #CJK UNIFIED IDEOGRAPH
+ {0x99B9, 0x532F}, //3787 #CJK UNIFIED IDEOGRAPH
+ {0x99BA, 0x5331}, //3788 #CJK UNIFIED IDEOGRAPH
+ {0x99BB, 0x5333}, //3789 #CJK UNIFIED IDEOGRAPH
+ {0x99BC, 0x5338}, //3790 #CJK UNIFIED IDEOGRAPH
+ {0x99BD, 0x5340}, //3791 #CJK UNIFIED IDEOGRAPH
+ {0x99BE, 0x5346}, //3792 #CJK UNIFIED IDEOGRAPH
+ {0x99BF, 0x5345}, //3793 #CJK UNIFIED IDEOGRAPH
+ {0x99C0, 0x4E17}, //3794 #CJK UNIFIED IDEOGRAPH
+ {0x99C1, 0x5349}, //3795 #CJK UNIFIED IDEOGRAPH
+ {0x99C2, 0x534D}, //3796 #CJK UNIFIED IDEOGRAPH
+ {0x99C3, 0x51D6}, //3797 #CJK UNIFIED IDEOGRAPH
+ {0x99C4, 0x535E}, //3798 #CJK UNIFIED IDEOGRAPH
+ {0x99C5, 0x5369}, //3799 #CJK UNIFIED IDEOGRAPH
+ {0x99C6, 0x536E}, //3800 #CJK UNIFIED IDEOGRAPH
+ {0x99C7, 0x5918}, //3801 #CJK UNIFIED IDEOGRAPH
+ {0x99C8, 0x537B}, //3802 #CJK UNIFIED IDEOGRAPH
+ {0x99C9, 0x5377}, //3803 #CJK UNIFIED IDEOGRAPH
+ {0x99CA, 0x5382}, //3804 #CJK UNIFIED IDEOGRAPH
+ {0x99CB, 0x5396}, //3805 #CJK UNIFIED IDEOGRAPH
+ {0x99CC, 0x53A0}, //3806 #CJK UNIFIED IDEOGRAPH
+ {0x99CD, 0x53A6}, //3807 #CJK UNIFIED IDEOGRAPH
+ {0x99CE, 0x53A5}, //3808 #CJK UNIFIED IDEOGRAPH
+ {0x99CF, 0x53AE}, //3809 #CJK UNIFIED IDEOGRAPH
+ {0x99D0, 0x53B0}, //3810 #CJK UNIFIED IDEOGRAPH
+ {0x99D1, 0x53B6}, //3811 #CJK UNIFIED IDEOGRAPH
+ {0x99D2, 0x53C3}, //3812 #CJK UNIFIED IDEOGRAPH
+ {0x99D3, 0x7C12}, //3813 #CJK UNIFIED IDEOGRAPH
+ {0x99D4, 0x96D9}, //3814 #CJK UNIFIED IDEOGRAPH
+ {0x99D5, 0x53DF}, //3815 #CJK UNIFIED IDEOGRAPH
+ {0x99D6, 0x66FC}, //3816 #CJK UNIFIED IDEOGRAPH
+ {0x99D7, 0x71EE}, //3817 #CJK UNIFIED IDEOGRAPH
+ {0x99D8, 0x53EE}, //3818 #CJK UNIFIED IDEOGRAPH
+ {0x99D9, 0x53E8}, //3819 #CJK UNIFIED IDEOGRAPH
+ {0x99DA, 0x53ED}, //3820 #CJK UNIFIED IDEOGRAPH
+ {0x99DB, 0x53FA}, //3821 #CJK UNIFIED IDEOGRAPH
+ {0x99DC, 0x5401}, //3822 #CJK UNIFIED IDEOGRAPH
+ {0x99DD, 0x543D}, //3823 #CJK UNIFIED IDEOGRAPH
+ {0x99DE, 0x5440}, //3824 #CJK UNIFIED IDEOGRAPH
+ {0x99DF, 0x542C}, //3825 #CJK UNIFIED IDEOGRAPH
+ {0x99E0, 0x542D}, //3826 #CJK UNIFIED IDEOGRAPH
+ {0x99E1, 0x543C}, //3827 #CJK UNIFIED IDEOGRAPH
+ {0x99E2, 0x542E}, //3828 #CJK UNIFIED IDEOGRAPH
+ {0x99E3, 0x5436}, //3829 #CJK UNIFIED IDEOGRAPH
+ {0x99E4, 0x5429}, //3830 #CJK UNIFIED IDEOGRAPH
+ {0x99E5, 0x541D}, //3831 #CJK UNIFIED IDEOGRAPH
+ {0x99E6, 0x544E}, //3832 #CJK UNIFIED IDEOGRAPH
+ {0x99E7, 0x548F}, //3833 #CJK UNIFIED IDEOGRAPH
+ {0x99E8, 0x5475}, //3834 #CJK UNIFIED IDEOGRAPH
+ {0x99E9, 0x548E}, //3835 #CJK UNIFIED IDEOGRAPH
+ {0x99EA, 0x545F}, //3836 #CJK UNIFIED IDEOGRAPH
+ {0x99EB, 0x5471}, //3837 #CJK UNIFIED IDEOGRAPH
+ {0x99EC, 0x5477}, //3838 #CJK UNIFIED IDEOGRAPH
+ {0x99ED, 0x5470}, //3839 #CJK UNIFIED IDEOGRAPH
+ {0x99EE, 0x5492}, //3840 #CJK UNIFIED IDEOGRAPH
+ {0x99EF, 0x547B}, //3841 #CJK UNIFIED IDEOGRAPH
+ {0x99F0, 0x5480}, //3842 #CJK UNIFIED IDEOGRAPH
+ {0x99F1, 0x5476}, //3843 #CJK UNIFIED IDEOGRAPH
+ {0x99F2, 0x5484}, //3844 #CJK UNIFIED IDEOGRAPH
+ {0x99F3, 0x5490}, //3845 #CJK UNIFIED IDEOGRAPH
+ {0x99F4, 0x5486}, //3846 #CJK UNIFIED IDEOGRAPH
+ {0x99F5, 0x54C7}, //3847 #CJK UNIFIED IDEOGRAPH
+ {0x99F6, 0x54A2}, //3848 #CJK UNIFIED IDEOGRAPH
+ {0x99F7, 0x54B8}, //3849 #CJK UNIFIED IDEOGRAPH
+ {0x99F8, 0x54A5}, //3850 #CJK UNIFIED IDEOGRAPH
+ {0x99F9, 0x54AC}, //3851 #CJK UNIFIED IDEOGRAPH
+ {0x99FA, 0x54C4}, //3852 #CJK UNIFIED IDEOGRAPH
+ {0x99FB, 0x54C8}, //3853 #CJK UNIFIED IDEOGRAPH
+ {0x99FC, 0x54A8}, //3854 #CJK UNIFIED IDEOGRAPH
+ {0x9A40, 0x54AB}, //3855 #CJK UNIFIED IDEOGRAPH
+ {0x9A41, 0x54C2}, //3856 #CJK UNIFIED IDEOGRAPH
+ {0x9A42, 0x54A4}, //3857 #CJK UNIFIED IDEOGRAPH
+ {0x9A43, 0x54BE}, //3858 #CJK UNIFIED IDEOGRAPH
+ {0x9A44, 0x54BC}, //3859 #CJK UNIFIED IDEOGRAPH
+ {0x9A45, 0x54D8}, //3860 #CJK UNIFIED IDEOGRAPH
+ {0x9A46, 0x54E5}, //3861 #CJK UNIFIED IDEOGRAPH
+ {0x9A47, 0x54E6}, //3862 #CJK UNIFIED IDEOGRAPH
+ {0x9A48, 0x550F}, //3863 #CJK UNIFIED IDEOGRAPH
+ {0x9A49, 0x5514}, //3864 #CJK UNIFIED IDEOGRAPH
+ {0x9A4A, 0x54FD}, //3865 #CJK UNIFIED IDEOGRAPH
+ {0x9A4B, 0x54EE}, //3866 #CJK UNIFIED IDEOGRAPH
+ {0x9A4C, 0x54ED}, //3867 #CJK UNIFIED IDEOGRAPH
+ {0x9A4D, 0x54FA}, //3868 #CJK UNIFIED IDEOGRAPH
+ {0x9A4E, 0x54E2}, //3869 #CJK UNIFIED IDEOGRAPH
+ {0x9A4F, 0x5539}, //3870 #CJK UNIFIED IDEOGRAPH
+ {0x9A50, 0x5540}, //3871 #CJK UNIFIED IDEOGRAPH
+ {0x9A51, 0x5563}, //3872 #CJK UNIFIED IDEOGRAPH
+ {0x9A52, 0x554C}, //3873 #CJK UNIFIED IDEOGRAPH
+ {0x9A53, 0x552E}, //3874 #CJK UNIFIED IDEOGRAPH
+ {0x9A54, 0x555C}, //3875 #CJK UNIFIED IDEOGRAPH
+ {0x9A55, 0x5545}, //3876 #CJK UNIFIED IDEOGRAPH
+ {0x9A56, 0x5556}, //3877 #CJK UNIFIED IDEOGRAPH
+ {0x9A57, 0x5557}, //3878 #CJK UNIFIED IDEOGRAPH
+ {0x9A58, 0x5538}, //3879 #CJK UNIFIED IDEOGRAPH
+ {0x9A59, 0x5533}, //3880 #CJK UNIFIED IDEOGRAPH
+ {0x9A5A, 0x555D}, //3881 #CJK UNIFIED IDEOGRAPH
+ {0x9A5B, 0x5599}, //3882 #CJK UNIFIED IDEOGRAPH
+ {0x9A5C, 0x5580}, //3883 #CJK UNIFIED IDEOGRAPH
+ {0x9A5D, 0x54AF}, //3884 #CJK UNIFIED IDEOGRAPH
+ {0x9A5E, 0x558A}, //3885 #CJK UNIFIED IDEOGRAPH
+ {0x9A5F, 0x559F}, //3886 #CJK UNIFIED IDEOGRAPH
+ {0x9A60, 0x557B}, //3887 #CJK UNIFIED IDEOGRAPH
+ {0x9A61, 0x557E}, //3888 #CJK UNIFIED IDEOGRAPH
+ {0x9A62, 0x5598}, //3889 #CJK UNIFIED IDEOGRAPH
+ {0x9A63, 0x559E}, //3890 #CJK UNIFIED IDEOGRAPH
+ {0x9A64, 0x55AE}, //3891 #CJK UNIFIED IDEOGRAPH
+ {0x9A65, 0x557C}, //3892 #CJK UNIFIED IDEOGRAPH
+ {0x9A66, 0x5583}, //3893 #CJK UNIFIED IDEOGRAPH
+ {0x9A67, 0x55A9}, //3894 #CJK UNIFIED IDEOGRAPH
+ {0x9A68, 0x5587}, //3895 #CJK UNIFIED IDEOGRAPH
+ {0x9A69, 0x55A8}, //3896 #CJK UNIFIED IDEOGRAPH
+ {0x9A6A, 0x55DA}, //3897 #CJK UNIFIED IDEOGRAPH
+ {0x9A6B, 0x55C5}, //3898 #CJK UNIFIED IDEOGRAPH
+ {0x9A6C, 0x55DF}, //3899 #CJK UNIFIED IDEOGRAPH
+ {0x9A6D, 0x55C4}, //3900 #CJK UNIFIED IDEOGRAPH
+ {0x9A6E, 0x55DC}, //3901 #CJK UNIFIED IDEOGRAPH
+ {0x9A6F, 0x55E4}, //3902 #CJK UNIFIED IDEOGRAPH
+ {0x9A70, 0x55D4}, //3903 #CJK UNIFIED IDEOGRAPH
+ {0x9A71, 0x5614}, //3904 #CJK UNIFIED IDEOGRAPH
+ {0x9A72, 0x55F7}, //3905 #CJK UNIFIED IDEOGRAPH
+ {0x9A73, 0x5616}, //3906 #CJK UNIFIED IDEOGRAPH
+ {0x9A74, 0x55FE}, //3907 #CJK UNIFIED IDEOGRAPH
+ {0x9A75, 0x55FD}, //3908 #CJK UNIFIED IDEOGRAPH
+ {0x9A76, 0x561B}, //3909 #CJK UNIFIED IDEOGRAPH
+ {0x9A77, 0x55F9}, //3910 #CJK UNIFIED IDEOGRAPH
+ {0x9A78, 0x564E}, //3911 #CJK UNIFIED IDEOGRAPH
+ {0x9A79, 0x5650}, //3912 #CJK UNIFIED IDEOGRAPH
+ {0x9A7A, 0x71DF}, //3913 #CJK UNIFIED IDEOGRAPH
+ {0x9A7B, 0x5634}, //3914 #CJK UNIFIED IDEOGRAPH
+ {0x9A7C, 0x5636}, //3915 #CJK UNIFIED IDEOGRAPH
+ {0x9A7D, 0x5632}, //3916 #CJK UNIFIED IDEOGRAPH
+ {0x9A7E, 0x5638}, //3917 #CJK UNIFIED IDEOGRAPH
+ {0x9A80, 0x566B}, //3918 #CJK UNIFIED IDEOGRAPH
+ {0x9A81, 0x5664}, //3919 #CJK UNIFIED IDEOGRAPH
+ {0x9A82, 0x562F}, //3920 #CJK UNIFIED IDEOGRAPH
+ {0x9A83, 0x566C}, //3921 #CJK UNIFIED IDEOGRAPH
+ {0x9A84, 0x566A}, //3922 #CJK UNIFIED IDEOGRAPH
+ {0x9A85, 0x5686}, //3923 #CJK UNIFIED IDEOGRAPH
+ {0x9A86, 0x5680}, //3924 #CJK UNIFIED IDEOGRAPH
+ {0x9A87, 0x568A}, //3925 #CJK UNIFIED IDEOGRAPH
+ {0x9A88, 0x56A0}, //3926 #CJK UNIFIED IDEOGRAPH
+ {0x9A89, 0x5694}, //3927 #CJK UNIFIED IDEOGRAPH
+ {0x9A8A, 0x568F}, //3928 #CJK UNIFIED IDEOGRAPH
+ {0x9A8B, 0x56A5}, //3929 #CJK UNIFIED IDEOGRAPH
+ {0x9A8C, 0x56AE}, //3930 #CJK UNIFIED IDEOGRAPH
+ {0x9A8D, 0x56B6}, //3931 #CJK UNIFIED IDEOGRAPH
+ {0x9A8E, 0x56B4}, //3932 #CJK UNIFIED IDEOGRAPH
+ {0x9A8F, 0x56C2}, //3933 #CJK UNIFIED IDEOGRAPH
+ {0x9A90, 0x56BC}, //3934 #CJK UNIFIED IDEOGRAPH
+ {0x9A91, 0x56C1}, //3935 #CJK UNIFIED IDEOGRAPH
+ {0x9A92, 0x56C3}, //3936 #CJK UNIFIED IDEOGRAPH
+ {0x9A93, 0x56C0}, //3937 #CJK UNIFIED IDEOGRAPH
+ {0x9A94, 0x56C8}, //3938 #CJK UNIFIED IDEOGRAPH
+ {0x9A95, 0x56CE}, //3939 #CJK UNIFIED IDEOGRAPH
+ {0x9A96, 0x56D1}, //3940 #CJK UNIFIED IDEOGRAPH
+ {0x9A97, 0x56D3}, //3941 #CJK UNIFIED IDEOGRAPH
+ {0x9A98, 0x56D7}, //3942 #CJK UNIFIED IDEOGRAPH
+ {0x9A99, 0x56EE}, //3943 #CJK UNIFIED IDEOGRAPH
+ {0x9A9A, 0x56F9}, //3944 #CJK UNIFIED IDEOGRAPH
+ {0x9A9B, 0x5700}, //3945 #CJK UNIFIED IDEOGRAPH
+ {0x9A9C, 0x56FF}, //3946 #CJK UNIFIED IDEOGRAPH
+ {0x9A9D, 0x5704}, //3947 #CJK UNIFIED IDEOGRAPH
+ {0x9A9E, 0x5709}, //3948 #CJK UNIFIED IDEOGRAPH
+ {0x9A9F, 0x5708}, //3949 #CJK UNIFIED IDEOGRAPH
+ {0x9AA0, 0x570B}, //3950 #CJK UNIFIED IDEOGRAPH
+ {0x9AA1, 0x570D}, //3951 #CJK UNIFIED IDEOGRAPH
+ {0x9AA2, 0x5713}, //3952 #CJK UNIFIED IDEOGRAPH
+ {0x9AA3, 0x5718}, //3953 #CJK UNIFIED IDEOGRAPH
+ {0x9AA4, 0x5716}, //3954 #CJK UNIFIED IDEOGRAPH
+ {0x9AA5, 0x55C7}, //3955 #CJK UNIFIED IDEOGRAPH
+ {0x9AA6, 0x571C}, //3956 #CJK UNIFIED IDEOGRAPH
+ {0x9AA7, 0x5726}, //3957 #CJK UNIFIED IDEOGRAPH
+ {0x9AA8, 0x5737}, //3958 #CJK UNIFIED IDEOGRAPH
+ {0x9AA9, 0x5738}, //3959 #CJK UNIFIED IDEOGRAPH
+ {0x9AAA, 0x574E}, //3960 #CJK UNIFIED IDEOGRAPH
+ {0x9AAB, 0x573B}, //3961 #CJK UNIFIED IDEOGRAPH
+ {0x9AAC, 0x5740}, //3962 #CJK UNIFIED IDEOGRAPH
+ {0x9AAD, 0x574F}, //3963 #CJK UNIFIED IDEOGRAPH
+ {0x9AAE, 0x5769}, //3964 #CJK UNIFIED IDEOGRAPH
+ {0x9AAF, 0x57C0}, //3965 #CJK UNIFIED IDEOGRAPH
+ {0x9AB0, 0x5788}, //3966 #CJK UNIFIED IDEOGRAPH
+ {0x9AB1, 0x5761}, //3967 #CJK UNIFIED IDEOGRAPH
+ {0x9AB2, 0x577F}, //3968 #CJK UNIFIED IDEOGRAPH
+ {0x9AB3, 0x5789}, //3969 #CJK UNIFIED IDEOGRAPH
+ {0x9AB4, 0x5793}, //3970 #CJK UNIFIED IDEOGRAPH
+ {0x9AB5, 0x57A0}, //3971 #CJK UNIFIED IDEOGRAPH
+ {0x9AB6, 0x57B3}, //3972 #CJK UNIFIED IDEOGRAPH
+ {0x9AB7, 0x57A4}, //3973 #CJK UNIFIED IDEOGRAPH
+ {0x9AB8, 0x57AA}, //3974 #CJK UNIFIED IDEOGRAPH
+ {0x9AB9, 0x57B0}, //3975 #CJK UNIFIED IDEOGRAPH
+ {0x9ABA, 0x57C3}, //3976 #CJK UNIFIED IDEOGRAPH
+ {0x9ABB, 0x57C6}, //3977 #CJK UNIFIED IDEOGRAPH
+ {0x9ABC, 0x57D4}, //3978 #CJK UNIFIED IDEOGRAPH
+ {0x9ABD, 0x57D2}, //3979 #CJK UNIFIED IDEOGRAPH
+ {0x9ABE, 0x57D3}, //3980 #CJK UNIFIED IDEOGRAPH
+ {0x9ABF, 0x580A}, //3981 #CJK UNIFIED IDEOGRAPH
+ {0x9AC0, 0x57D6}, //3982 #CJK UNIFIED IDEOGRAPH
+ {0x9AC1, 0x57E3}, //3983 #CJK UNIFIED IDEOGRAPH
+ {0x9AC2, 0x580B}, //3984 #CJK UNIFIED IDEOGRAPH
+ {0x9AC3, 0x5819}, //3985 #CJK UNIFIED IDEOGRAPH
+ {0x9AC4, 0x581D}, //3986 #CJK UNIFIED IDEOGRAPH
+ {0x9AC5, 0x5872}, //3987 #CJK UNIFIED IDEOGRAPH
+ {0x9AC6, 0x5821}, //3988 #CJK UNIFIED IDEOGRAPH
+ {0x9AC7, 0x5862}, //3989 #CJK UNIFIED IDEOGRAPH
+ {0x9AC8, 0x584B}, //3990 #CJK UNIFIED IDEOGRAPH
+ {0x9AC9, 0x5870}, //3991 #CJK UNIFIED IDEOGRAPH
+ {0x9ACA, 0x6BC0}, //3992 #CJK UNIFIED IDEOGRAPH
+ {0x9ACB, 0x5852}, //3993 #CJK UNIFIED IDEOGRAPH
+ {0x9ACC, 0x583D}, //3994 #CJK UNIFIED IDEOGRAPH
+ {0x9ACD, 0x5879}, //3995 #CJK UNIFIED IDEOGRAPH
+ {0x9ACE, 0x5885}, //3996 #CJK UNIFIED IDEOGRAPH
+ {0x9ACF, 0x58B9}, //3997 #CJK UNIFIED IDEOGRAPH
+ {0x9AD0, 0x589F}, //3998 #CJK UNIFIED IDEOGRAPH
+ {0x9AD1, 0x58AB}, //3999 #CJK UNIFIED IDEOGRAPH
+ {0x9AD2, 0x58BA}, //4000 #CJK UNIFIED IDEOGRAPH
+ {0x9AD3, 0x58DE}, //4001 #CJK UNIFIED IDEOGRAPH
+ {0x9AD4, 0x58BB}, //4002 #CJK UNIFIED IDEOGRAPH
+ {0x9AD5, 0x58B8}, //4003 #CJK UNIFIED IDEOGRAPH
+ {0x9AD6, 0x58AE}, //4004 #CJK UNIFIED IDEOGRAPH
+ {0x9AD7, 0x58C5}, //4005 #CJK UNIFIED IDEOGRAPH
+ {0x9AD8, 0x58D3}, //4006 #CJK UNIFIED IDEOGRAPH
+ {0x9AD9, 0x58D1}, //4007 #CJK UNIFIED IDEOGRAPH
+ {0x9ADA, 0x58D7}, //4008 #CJK UNIFIED IDEOGRAPH
+ {0x9ADB, 0x58D9}, //4009 #CJK UNIFIED IDEOGRAPH
+ {0x9ADC, 0x58D8}, //4010 #CJK UNIFIED IDEOGRAPH
+ {0x9ADD, 0x58E5}, //4011 #CJK UNIFIED IDEOGRAPH
+ {0x9ADE, 0x58DC}, //4012 #CJK UNIFIED IDEOGRAPH
+ {0x9ADF, 0x58E4}, //4013 #CJK UNIFIED IDEOGRAPH
+ {0x9AE0, 0x58DF}, //4014 #CJK UNIFIED IDEOGRAPH
+ {0x9AE1, 0x58EF}, //4015 #CJK UNIFIED IDEOGRAPH
+ {0x9AE2, 0x58FA}, //4016 #CJK UNIFIED IDEOGRAPH
+ {0x9AE3, 0x58F9}, //4017 #CJK UNIFIED IDEOGRAPH
+ {0x9AE4, 0x58FB}, //4018 #CJK UNIFIED IDEOGRAPH
+ {0x9AE5, 0x58FC}, //4019 #CJK UNIFIED IDEOGRAPH
+ {0x9AE6, 0x58FD}, //4020 #CJK UNIFIED IDEOGRAPH
+ {0x9AE7, 0x5902}, //4021 #CJK UNIFIED IDEOGRAPH
+ {0x9AE8, 0x590A}, //4022 #CJK UNIFIED IDEOGRAPH
+ {0x9AE9, 0x5910}, //4023 #CJK UNIFIED IDEOGRAPH
+ {0x9AEA, 0x591B}, //4024 #CJK UNIFIED IDEOGRAPH
+ {0x9AEB, 0x68A6}, //4025 #CJK UNIFIED IDEOGRAPH
+ {0x9AEC, 0x5925}, //4026 #CJK UNIFIED IDEOGRAPH
+ {0x9AED, 0x592C}, //4027 #CJK UNIFIED IDEOGRAPH
+ {0x9AEE, 0x592D}, //4028 #CJK UNIFIED IDEOGRAPH
+ {0x9AEF, 0x5932}, //4029 #CJK UNIFIED IDEOGRAPH
+ {0x9AF0, 0x5938}, //4030 #CJK UNIFIED IDEOGRAPH
+ {0x9AF1, 0x593E}, //4031 #CJK UNIFIED IDEOGRAPH
+ {0x9AF2, 0x7AD2}, //4032 #CJK UNIFIED IDEOGRAPH
+ {0x9AF3, 0x5955}, //4033 #CJK UNIFIED IDEOGRAPH
+ {0x9AF4, 0x5950}, //4034 #CJK UNIFIED IDEOGRAPH
+ {0x9AF5, 0x594E}, //4035 #CJK UNIFIED IDEOGRAPH
+ {0x9AF6, 0x595A}, //4036 #CJK UNIFIED IDEOGRAPH
+ {0x9AF7, 0x5958}, //4037 #CJK UNIFIED IDEOGRAPH
+ {0x9AF8, 0x5962}, //4038 #CJK UNIFIED IDEOGRAPH
+ {0x9AF9, 0x5960}, //4039 #CJK UNIFIED IDEOGRAPH
+ {0x9AFA, 0x5967}, //4040 #CJK UNIFIED IDEOGRAPH
+ {0x9AFB, 0x596C}, //4041 #CJK UNIFIED IDEOGRAPH
+ {0x9AFC, 0x5969}, //4042 #CJK UNIFIED IDEOGRAPH
+ {0x9B40, 0x5978}, //4043 #CJK UNIFIED IDEOGRAPH
+ {0x9B41, 0x5981}, //4044 #CJK UNIFIED IDEOGRAPH
+ {0x9B42, 0x599D}, //4045 #CJK UNIFIED IDEOGRAPH
+ {0x9B43, 0x4F5E}, //4046 #CJK UNIFIED IDEOGRAPH
+ {0x9B44, 0x4FAB}, //4047 #CJK UNIFIED IDEOGRAPH
+ {0x9B45, 0x59A3}, //4048 #CJK UNIFIED IDEOGRAPH
+ {0x9B46, 0x59B2}, //4049 #CJK UNIFIED IDEOGRAPH
+ {0x9B47, 0x59C6}, //4050 #CJK UNIFIED IDEOGRAPH
+ {0x9B48, 0x59E8}, //4051 #CJK UNIFIED IDEOGRAPH
+ {0x9B49, 0x59DC}, //4052 #CJK UNIFIED IDEOGRAPH
+ {0x9B4A, 0x598D}, //4053 #CJK UNIFIED IDEOGRAPH
+ {0x9B4B, 0x59D9}, //4054 #CJK UNIFIED IDEOGRAPH
+ {0x9B4C, 0x59DA}, //4055 #CJK UNIFIED IDEOGRAPH
+ {0x9B4D, 0x5A25}, //4056 #CJK UNIFIED IDEOGRAPH
+ {0x9B4E, 0x5A1F}, //4057 #CJK UNIFIED IDEOGRAPH
+ {0x9B4F, 0x5A11}, //4058 #CJK UNIFIED IDEOGRAPH
+ {0x9B50, 0x5A1C}, //4059 #CJK UNIFIED IDEOGRAPH
+ {0x9B51, 0x5A09}, //4060 #CJK UNIFIED IDEOGRAPH
+ {0x9B52, 0x5A1A}, //4061 #CJK UNIFIED IDEOGRAPH
+ {0x9B53, 0x5A40}, //4062 #CJK UNIFIED IDEOGRAPH
+ {0x9B54, 0x5A6C}, //4063 #CJK UNIFIED IDEOGRAPH
+ {0x9B55, 0x5A49}, //4064 #CJK UNIFIED IDEOGRAPH
+ {0x9B56, 0x5A35}, //4065 #CJK UNIFIED IDEOGRAPH
+ {0x9B57, 0x5A36}, //4066 #CJK UNIFIED IDEOGRAPH
+ {0x9B58, 0x5A62}, //4067 #CJK UNIFIED IDEOGRAPH
+ {0x9B59, 0x5A6A}, //4068 #CJK UNIFIED IDEOGRAPH
+ {0x9B5A, 0x5A9A}, //4069 #CJK UNIFIED IDEOGRAPH
+ {0x9B5B, 0x5ABC}, //4070 #CJK UNIFIED IDEOGRAPH
+ {0x9B5C, 0x5ABE}, //4071 #CJK UNIFIED IDEOGRAPH
+ {0x9B5D, 0x5ACB}, //4072 #CJK UNIFIED IDEOGRAPH
+ {0x9B5E, 0x5AC2}, //4073 #CJK UNIFIED IDEOGRAPH
+ {0x9B5F, 0x5ABD}, //4074 #CJK UNIFIED IDEOGRAPH
+ {0x9B60, 0x5AE3}, //4075 #CJK UNIFIED IDEOGRAPH
+ {0x9B61, 0x5AD7}, //4076 #CJK UNIFIED IDEOGRAPH
+ {0x9B62, 0x5AE6}, //4077 #CJK UNIFIED IDEOGRAPH
+ {0x9B63, 0x5AE9}, //4078 #CJK UNIFIED IDEOGRAPH
+ {0x9B64, 0x5AD6}, //4079 #CJK UNIFIED IDEOGRAPH
+ {0x9B65, 0x5AFA}, //4080 #CJK UNIFIED IDEOGRAPH
+ {0x9B66, 0x5AFB}, //4081 #CJK UNIFIED IDEOGRAPH
+ {0x9B67, 0x5B0C}, //4082 #CJK UNIFIED IDEOGRAPH
+ {0x9B68, 0x5B0B}, //4083 #CJK UNIFIED IDEOGRAPH
+ {0x9B69, 0x5B16}, //4084 #CJK UNIFIED IDEOGRAPH
+ {0x9B6A, 0x5B32}, //4085 #CJK UNIFIED IDEOGRAPH
+ {0x9B6B, 0x5AD0}, //4086 #CJK UNIFIED IDEOGRAPH
+ {0x9B6C, 0x5B2A}, //4087 #CJK UNIFIED IDEOGRAPH
+ {0x9B6D, 0x5B36}, //4088 #CJK UNIFIED IDEOGRAPH
+ {0x9B6E, 0x5B3E}, //4089 #CJK UNIFIED IDEOGRAPH
+ {0x9B6F, 0x5B43}, //4090 #CJK UNIFIED IDEOGRAPH
+ {0x9B70, 0x5B45}, //4091 #CJK UNIFIED IDEOGRAPH
+ {0x9B71, 0x5B40}, //4092 #CJK UNIFIED IDEOGRAPH
+ {0x9B72, 0x5B51}, //4093 #CJK UNIFIED IDEOGRAPH
+ {0x9B73, 0x5B55}, //4094 #CJK UNIFIED IDEOGRAPH
+ {0x9B74, 0x5B5A}, //4095 #CJK UNIFIED IDEOGRAPH
+ {0x9B75, 0x5B5B}, //4096 #CJK UNIFIED IDEOGRAPH
+ {0x9B76, 0x5B65}, //4097 #CJK UNIFIED IDEOGRAPH
+ {0x9B77, 0x5B69}, //4098 #CJK UNIFIED IDEOGRAPH
+ {0x9B78, 0x5B70}, //4099 #CJK UNIFIED IDEOGRAPH
+ {0x9B79, 0x5B73}, //4100 #CJK UNIFIED IDEOGRAPH
+ {0x9B7A, 0x5B75}, //4101 #CJK UNIFIED IDEOGRAPH
+ {0x9B7B, 0x5B78}, //4102 #CJK UNIFIED IDEOGRAPH
+ {0x9B7C, 0x6588}, //4103 #CJK UNIFIED IDEOGRAPH
+ {0x9B7D, 0x5B7A}, //4104 #CJK UNIFIED IDEOGRAPH
+ {0x9B7E, 0x5B80}, //4105 #CJK UNIFIED IDEOGRAPH
+ {0x9B80, 0x5B83}, //4106 #CJK UNIFIED IDEOGRAPH
+ {0x9B81, 0x5BA6}, //4107 #CJK UNIFIED IDEOGRAPH
+ {0x9B82, 0x5BB8}, //4108 #CJK UNIFIED IDEOGRAPH
+ {0x9B83, 0x5BC3}, //4109 #CJK UNIFIED IDEOGRAPH
+ {0x9B84, 0x5BC7}, //4110 #CJK UNIFIED IDEOGRAPH
+ {0x9B85, 0x5BC9}, //4111 #CJK UNIFIED IDEOGRAPH
+ {0x9B86, 0x5BD4}, //4112 #CJK UNIFIED IDEOGRAPH
+ {0x9B87, 0x5BD0}, //4113 #CJK UNIFIED IDEOGRAPH
+ {0x9B88, 0x5BE4}, //4114 #CJK UNIFIED IDEOGRAPH
+ {0x9B89, 0x5BE6}, //4115 #CJK UNIFIED IDEOGRAPH
+ {0x9B8A, 0x5BE2}, //4116 #CJK UNIFIED IDEOGRAPH
+ {0x9B8B, 0x5BDE}, //4117 #CJK UNIFIED IDEOGRAPH
+ {0x9B8C, 0x5BE5}, //4118 #CJK UNIFIED IDEOGRAPH
+ {0x9B8D, 0x5BEB}, //4119 #CJK UNIFIED IDEOGRAPH
+ {0x9B8E, 0x5BF0}, //4120 #CJK UNIFIED IDEOGRAPH
+ {0x9B8F, 0x5BF6}, //4121 #CJK UNIFIED IDEOGRAPH
+ {0x9B90, 0x5BF3}, //4122 #CJK UNIFIED IDEOGRAPH
+ {0x9B91, 0x5C05}, //4123 #CJK UNIFIED IDEOGRAPH
+ {0x9B92, 0x5C07}, //4124 #CJK UNIFIED IDEOGRAPH
+ {0x9B93, 0x5C08}, //4125 #CJK UNIFIED IDEOGRAPH
+ {0x9B94, 0x5C0D}, //4126 #CJK UNIFIED IDEOGRAPH
+ {0x9B95, 0x5C13}, //4127 #CJK UNIFIED IDEOGRAPH
+ {0x9B96, 0x5C20}, //4128 #CJK UNIFIED IDEOGRAPH
+ {0x9B97, 0x5C22}, //4129 #CJK UNIFIED IDEOGRAPH
+ {0x9B98, 0x5C28}, //4130 #CJK UNIFIED IDEOGRAPH
+ {0x9B99, 0x5C38}, //4131 #CJK UNIFIED IDEOGRAPH
+ {0x9B9A, 0x5C39}, //4132 #CJK UNIFIED IDEOGRAPH
+ {0x9B9B, 0x5C41}, //4133 #CJK UNIFIED IDEOGRAPH
+ {0x9B9C, 0x5C46}, //4134 #CJK UNIFIED IDEOGRAPH
+ {0x9B9D, 0x5C4E}, //4135 #CJK UNIFIED IDEOGRAPH
+ {0x9B9E, 0x5C53}, //4136 #CJK UNIFIED IDEOGRAPH
+ {0x9B9F, 0x5C50}, //4137 #CJK UNIFIED IDEOGRAPH
+ {0x9BA0, 0x5C4F}, //4138 #CJK UNIFIED IDEOGRAPH
+ {0x9BA1, 0x5B71}, //4139 #CJK UNIFIED IDEOGRAPH
+ {0x9BA2, 0x5C6C}, //4140 #CJK UNIFIED IDEOGRAPH
+ {0x9BA3, 0x5C6E}, //4141 #CJK UNIFIED IDEOGRAPH
+ {0x9BA4, 0x4E62}, //4142 #CJK UNIFIED IDEOGRAPH
+ {0x9BA5, 0x5C76}, //4143 #CJK UNIFIED IDEOGRAPH
+ {0x9BA6, 0x5C79}, //4144 #CJK UNIFIED IDEOGRAPH
+ {0x9BA7, 0x5C8C}, //4145 #CJK UNIFIED IDEOGRAPH
+ {0x9BA8, 0x5C91}, //4146 #CJK UNIFIED IDEOGRAPH
+ {0x9BA9, 0x5C94}, //4147 #CJK UNIFIED IDEOGRAPH
+ {0x9BAA, 0x599B}, //4148 #CJK UNIFIED IDEOGRAPH
+ {0x9BAB, 0x5CAB}, //4149 #CJK UNIFIED IDEOGRAPH
+ {0x9BAC, 0x5CBB}, //4150 #CJK UNIFIED IDEOGRAPH
+ {0x9BAD, 0x5CB6}, //4151 #CJK UNIFIED IDEOGRAPH
+ {0x9BAE, 0x5CBC}, //4152 #CJK UNIFIED IDEOGRAPH
+ {0x9BAF, 0x5CB7}, //4153 #CJK UNIFIED IDEOGRAPH
+ {0x9BB0, 0x5CC5}, //4154 #CJK UNIFIED IDEOGRAPH
+ {0x9BB1, 0x5CBE}, //4155 #CJK UNIFIED IDEOGRAPH
+ {0x9BB2, 0x5CC7}, //4156 #CJK UNIFIED IDEOGRAPH
+ {0x9BB3, 0x5CD9}, //4157 #CJK UNIFIED IDEOGRAPH
+ {0x9BB4, 0x5CE9}, //4158 #CJK UNIFIED IDEOGRAPH
+ {0x9BB5, 0x5CFD}, //4159 #CJK UNIFIED IDEOGRAPH
+ {0x9BB6, 0x5CFA}, //4160 #CJK UNIFIED IDEOGRAPH
+ {0x9BB7, 0x5CED}, //4161 #CJK UNIFIED IDEOGRAPH
+ {0x9BB8, 0x5D8C}, //4162 #CJK UNIFIED IDEOGRAPH
+ {0x9BB9, 0x5CEA}, //4163 #CJK UNIFIED IDEOGRAPH
+ {0x9BBA, 0x5D0B}, //4164 #CJK UNIFIED IDEOGRAPH
+ {0x9BBB, 0x5D15}, //4165 #CJK UNIFIED IDEOGRAPH
+ {0x9BBC, 0x5D17}, //4166 #CJK UNIFIED IDEOGRAPH
+ {0x9BBD, 0x5D5C}, //4167 #CJK UNIFIED IDEOGRAPH
+ {0x9BBE, 0x5D1F}, //4168 #CJK UNIFIED IDEOGRAPH
+ {0x9BBF, 0x5D1B}, //4169 #CJK UNIFIED IDEOGRAPH
+ {0x9BC0, 0x5D11}, //4170 #CJK UNIFIED IDEOGRAPH
+ {0x9BC1, 0x5D14}, //4171 #CJK UNIFIED IDEOGRAPH
+ {0x9BC2, 0x5D22}, //4172 #CJK UNIFIED IDEOGRAPH
+ {0x9BC3, 0x5D1A}, //4173 #CJK UNIFIED IDEOGRAPH
+ {0x9BC4, 0x5D19}, //4174 #CJK UNIFIED IDEOGRAPH
+ {0x9BC5, 0x5D18}, //4175 #CJK UNIFIED IDEOGRAPH
+ {0x9BC6, 0x5D4C}, //4176 #CJK UNIFIED IDEOGRAPH
+ {0x9BC7, 0x5D52}, //4177 #CJK UNIFIED IDEOGRAPH
+ {0x9BC8, 0x5D4E}, //4178 #CJK UNIFIED IDEOGRAPH
+ {0x9BC9, 0x5D4B}, //4179 #CJK UNIFIED IDEOGRAPH
+ {0x9BCA, 0x5D6C}, //4180 #CJK UNIFIED IDEOGRAPH
+ {0x9BCB, 0x5D73}, //4181 #CJK UNIFIED IDEOGRAPH
+ {0x9BCC, 0x5D76}, //4182 #CJK UNIFIED IDEOGRAPH
+ {0x9BCD, 0x5D87}, //4183 #CJK UNIFIED IDEOGRAPH
+ {0x9BCE, 0x5D84}, //4184 #CJK UNIFIED IDEOGRAPH
+ {0x9BCF, 0x5D82}, //4185 #CJK UNIFIED IDEOGRAPH
+ {0x9BD0, 0x5DA2}, //4186 #CJK UNIFIED IDEOGRAPH
+ {0x9BD1, 0x5D9D}, //4187 #CJK UNIFIED IDEOGRAPH
+ {0x9BD2, 0x5DAC}, //4188 #CJK UNIFIED IDEOGRAPH
+ {0x9BD3, 0x5DAE}, //4189 #CJK UNIFIED IDEOGRAPH
+ {0x9BD4, 0x5DBD}, //4190 #CJK UNIFIED IDEOGRAPH
+ {0x9BD5, 0x5D90}, //4191 #CJK UNIFIED IDEOGRAPH
+ {0x9BD6, 0x5DB7}, //4192 #CJK UNIFIED IDEOGRAPH
+ {0x9BD7, 0x5DBC}, //4193 #CJK UNIFIED IDEOGRAPH
+ {0x9BD8, 0x5DC9}, //4194 #CJK UNIFIED IDEOGRAPH
+ {0x9BD9, 0x5DCD}, //4195 #CJK UNIFIED IDEOGRAPH
+ {0x9BDA, 0x5DD3}, //4196 #CJK UNIFIED IDEOGRAPH
+ {0x9BDB, 0x5DD2}, //4197 #CJK UNIFIED IDEOGRAPH
+ {0x9BDC, 0x5DD6}, //4198 #CJK UNIFIED IDEOGRAPH
+ {0x9BDD, 0x5DDB}, //4199 #CJK UNIFIED IDEOGRAPH
+ {0x9BDE, 0x5DEB}, //4200 #CJK UNIFIED IDEOGRAPH
+ {0x9BDF, 0x5DF2}, //4201 #CJK UNIFIED IDEOGRAPH
+ {0x9BE0, 0x5DF5}, //4202 #CJK UNIFIED IDEOGRAPH
+ {0x9BE1, 0x5E0B}, //4203 #CJK UNIFIED IDEOGRAPH
+ {0x9BE2, 0x5E1A}, //4204 #CJK UNIFIED IDEOGRAPH
+ {0x9BE3, 0x5E19}, //4205 #CJK UNIFIED IDEOGRAPH
+ {0x9BE4, 0x5E11}, //4206 #CJK UNIFIED IDEOGRAPH
+ {0x9BE5, 0x5E1B}, //4207 #CJK UNIFIED IDEOGRAPH
+ {0x9BE6, 0x5E36}, //4208 #CJK UNIFIED IDEOGRAPH
+ {0x9BE7, 0x5E37}, //4209 #CJK UNIFIED IDEOGRAPH
+ {0x9BE8, 0x5E44}, //4210 #CJK UNIFIED IDEOGRAPH
+ {0x9BE9, 0x5E43}, //4211 #CJK UNIFIED IDEOGRAPH
+ {0x9BEA, 0x5E40}, //4212 #CJK UNIFIED IDEOGRAPH
+ {0x9BEB, 0x5E4E}, //4213 #CJK UNIFIED IDEOGRAPH
+ {0x9BEC, 0x5E57}, //4214 #CJK UNIFIED IDEOGRAPH
+ {0x9BED, 0x5E54}, //4215 #CJK UNIFIED IDEOGRAPH
+ {0x9BEE, 0x5E5F}, //4216 #CJK UNIFIED IDEOGRAPH
+ {0x9BEF, 0x5E62}, //4217 #CJK UNIFIED IDEOGRAPH
+ {0x9BF0, 0x5E64}, //4218 #CJK UNIFIED IDEOGRAPH
+ {0x9BF1, 0x5E47}, //4219 #CJK UNIFIED IDEOGRAPH
+ {0x9BF2, 0x5E75}, //4220 #CJK UNIFIED IDEOGRAPH
+ {0x9BF3, 0x5E76}, //4221 #CJK UNIFIED IDEOGRAPH
+ {0x9BF4, 0x5E7A}, //4222 #CJK UNIFIED IDEOGRAPH
+ {0x9BF5, 0x9EBC}, //4223 #CJK UNIFIED IDEOGRAPH
+ {0x9BF6, 0x5E7F}, //4224 #CJK UNIFIED IDEOGRAPH
+ {0x9BF7, 0x5EA0}, //4225 #CJK UNIFIED IDEOGRAPH
+ {0x9BF8, 0x5EC1}, //4226 #CJK UNIFIED IDEOGRAPH
+ {0x9BF9, 0x5EC2}, //4227 #CJK UNIFIED IDEOGRAPH
+ {0x9BFA, 0x5EC8}, //4228 #CJK UNIFIED IDEOGRAPH
+ {0x9BFB, 0x5ED0}, //4229 #CJK UNIFIED IDEOGRAPH
+ {0x9BFC, 0x5ECF}, //4230 #CJK UNIFIED IDEOGRAPH
+ {0x9C40, 0x5ED6}, //4231 #CJK UNIFIED IDEOGRAPH
+ {0x9C41, 0x5EE3}, //4232 #CJK UNIFIED IDEOGRAPH
+ {0x9C42, 0x5EDD}, //4233 #CJK UNIFIED IDEOGRAPH
+ {0x9C43, 0x5EDA}, //4234 #CJK UNIFIED IDEOGRAPH
+ {0x9C44, 0x5EDB}, //4235 #CJK UNIFIED IDEOGRAPH
+ {0x9C45, 0x5EE2}, //4236 #CJK UNIFIED IDEOGRAPH
+ {0x9C46, 0x5EE1}, //4237 #CJK UNIFIED IDEOGRAPH
+ {0x9C47, 0x5EE8}, //4238 #CJK UNIFIED IDEOGRAPH
+ {0x9C48, 0x5EE9}, //4239 #CJK UNIFIED IDEOGRAPH
+ {0x9C49, 0x5EEC}, //4240 #CJK UNIFIED IDEOGRAPH
+ {0x9C4A, 0x5EF1}, //4241 #CJK UNIFIED IDEOGRAPH
+ {0x9C4B, 0x5EF3}, //4242 #CJK UNIFIED IDEOGRAPH
+ {0x9C4C, 0x5EF0}, //4243 #CJK UNIFIED IDEOGRAPH
+ {0x9C4D, 0x5EF4}, //4244 #CJK UNIFIED IDEOGRAPH
+ {0x9C4E, 0x5EF8}, //4245 #CJK UNIFIED IDEOGRAPH
+ {0x9C4F, 0x5EFE}, //4246 #CJK UNIFIED IDEOGRAPH
+ {0x9C50, 0x5F03}, //4247 #CJK UNIFIED IDEOGRAPH
+ {0x9C51, 0x5F09}, //4248 #CJK UNIFIED IDEOGRAPH
+ {0x9C52, 0x5F5D}, //4249 #CJK UNIFIED IDEOGRAPH
+ {0x9C53, 0x5F5C}, //4250 #CJK UNIFIED IDEOGRAPH
+ {0x9C54, 0x5F0B}, //4251 #CJK UNIFIED IDEOGRAPH
+ {0x9C55, 0x5F11}, //4252 #CJK UNIFIED IDEOGRAPH
+ {0x9C56, 0x5F16}, //4253 #CJK UNIFIED IDEOGRAPH
+ {0x9C57, 0x5F29}, //4254 #CJK UNIFIED IDEOGRAPH
+ {0x9C58, 0x5F2D}, //4255 #CJK UNIFIED IDEOGRAPH
+ {0x9C59, 0x5F38}, //4256 #CJK UNIFIED IDEOGRAPH
+ {0x9C5A, 0x5F41}, //4257 #CJK UNIFIED IDEOGRAPH
+ {0x9C5B, 0x5F48}, //4258 #CJK UNIFIED IDEOGRAPH
+ {0x9C5C, 0x5F4C}, //4259 #CJK UNIFIED IDEOGRAPH
+ {0x9C5D, 0x5F4E}, //4260 #CJK UNIFIED IDEOGRAPH
+ {0x9C5E, 0x5F2F}, //4261 #CJK UNIFIED IDEOGRAPH
+ {0x9C5F, 0x5F51}, //4262 #CJK UNIFIED IDEOGRAPH
+ {0x9C60, 0x5F56}, //4263 #CJK UNIFIED IDEOGRAPH
+ {0x9C61, 0x5F57}, //4264 #CJK UNIFIED IDEOGRAPH
+ {0x9C62, 0x5F59}, //4265 #CJK UNIFIED IDEOGRAPH
+ {0x9C63, 0x5F61}, //4266 #CJK UNIFIED IDEOGRAPH
+ {0x9C64, 0x5F6D}, //4267 #CJK UNIFIED IDEOGRAPH
+ {0x9C65, 0x5F73}, //4268 #CJK UNIFIED IDEOGRAPH
+ {0x9C66, 0x5F77}, //4269 #CJK UNIFIED IDEOGRAPH
+ {0x9C67, 0x5F83}, //4270 #CJK UNIFIED IDEOGRAPH
+ {0x9C68, 0x5F82}, //4271 #CJK UNIFIED IDEOGRAPH
+ {0x9C69, 0x5F7F}, //4272 #CJK UNIFIED IDEOGRAPH
+ {0x9C6A, 0x5F8A}, //4273 #CJK UNIFIED IDEOGRAPH
+ {0x9C6B, 0x5F88}, //4274 #CJK UNIFIED IDEOGRAPH
+ {0x9C6C, 0x5F91}, //4275 #CJK UNIFIED IDEOGRAPH
+ {0x9C6D, 0x5F87}, //4276 #CJK UNIFIED IDEOGRAPH
+ {0x9C6E, 0x5F9E}, //4277 #CJK UNIFIED IDEOGRAPH
+ {0x9C6F, 0x5F99}, //4278 #CJK UNIFIED IDEOGRAPH
+ {0x9C70, 0x5F98}, //4279 #CJK UNIFIED IDEOGRAPH
+ {0x9C71, 0x5FA0}, //4280 #CJK UNIFIED IDEOGRAPH
+ {0x9C72, 0x5FA8}, //4281 #CJK UNIFIED IDEOGRAPH
+ {0x9C73, 0x5FAD}, //4282 #CJK UNIFIED IDEOGRAPH
+ {0x9C74, 0x5FBC}, //4283 #CJK UNIFIED IDEOGRAPH
+ {0x9C75, 0x5FD6}, //4284 #CJK UNIFIED IDEOGRAPH
+ {0x9C76, 0x5FFB}, //4285 #CJK UNIFIED IDEOGRAPH
+ {0x9C77, 0x5FE4}, //4286 #CJK UNIFIED IDEOGRAPH
+ {0x9C78, 0x5FF8}, //4287 #CJK UNIFIED IDEOGRAPH
+ {0x9C79, 0x5FF1}, //4288 #CJK UNIFIED IDEOGRAPH
+ {0x9C7A, 0x5FDD}, //4289 #CJK UNIFIED IDEOGRAPH
+ {0x9C7B, 0x60B3}, //4290 #CJK UNIFIED IDEOGRAPH
+ {0x9C7C, 0x5FFF}, //4291 #CJK UNIFIED IDEOGRAPH
+ {0x9C7D, 0x6021}, //4292 #CJK UNIFIED IDEOGRAPH
+ {0x9C7E, 0x6060}, //4293 #CJK UNIFIED IDEOGRAPH
+ {0x9C80, 0x6019}, //4294 #CJK UNIFIED IDEOGRAPH
+ {0x9C81, 0x6010}, //4295 #CJK UNIFIED IDEOGRAPH
+ {0x9C82, 0x6029}, //4296 #CJK UNIFIED IDEOGRAPH
+ {0x9C83, 0x600E}, //4297 #CJK UNIFIED IDEOGRAPH
+ {0x9C84, 0x6031}, //4298 #CJK UNIFIED IDEOGRAPH
+ {0x9C85, 0x601B}, //4299 #CJK UNIFIED IDEOGRAPH
+ {0x9C86, 0x6015}, //4300 #CJK UNIFIED IDEOGRAPH
+ {0x9C87, 0x602B}, //4301 #CJK UNIFIED IDEOGRAPH
+ {0x9C88, 0x6026}, //4302 #CJK UNIFIED IDEOGRAPH
+ {0x9C89, 0x600F}, //4303 #CJK UNIFIED IDEOGRAPH
+ {0x9C8A, 0x603A}, //4304 #CJK UNIFIED IDEOGRAPH
+ {0x9C8B, 0x605A}, //4305 #CJK UNIFIED IDEOGRAPH
+ {0x9C8C, 0x6041}, //4306 #CJK UNIFIED IDEOGRAPH
+ {0x9C8D, 0x606A}, //4307 #CJK UNIFIED IDEOGRAPH
+ {0x9C8E, 0x6077}, //4308 #CJK UNIFIED IDEOGRAPH
+ {0x9C8F, 0x605F}, //4309 #CJK UNIFIED IDEOGRAPH
+ {0x9C90, 0x604A}, //4310 #CJK UNIFIED IDEOGRAPH
+ {0x9C91, 0x6046}, //4311 #CJK UNIFIED IDEOGRAPH
+ {0x9C92, 0x604D}, //4312 #CJK UNIFIED IDEOGRAPH
+ {0x9C93, 0x6063}, //4313 #CJK UNIFIED IDEOGRAPH
+ {0x9C94, 0x6043}, //4314 #CJK UNIFIED IDEOGRAPH
+ {0x9C95, 0x6064}, //4315 #CJK UNIFIED IDEOGRAPH
+ {0x9C96, 0x6042}, //4316 #CJK UNIFIED IDEOGRAPH
+ {0x9C97, 0x606C}, //4317 #CJK UNIFIED IDEOGRAPH
+ {0x9C98, 0x606B}, //4318 #CJK UNIFIED IDEOGRAPH
+ {0x9C99, 0x6059}, //4319 #CJK UNIFIED IDEOGRAPH
+ {0x9C9A, 0x6081}, //4320 #CJK UNIFIED IDEOGRAPH
+ {0x9C9B, 0x608D}, //4321 #CJK UNIFIED IDEOGRAPH
+ {0x9C9C, 0x60E7}, //4322 #CJK UNIFIED IDEOGRAPH
+ {0x9C9D, 0x6083}, //4323 #CJK UNIFIED IDEOGRAPH
+ {0x9C9E, 0x609A}, //4324 #CJK UNIFIED IDEOGRAPH
+ {0x9C9F, 0x6084}, //4325 #CJK UNIFIED IDEOGRAPH
+ {0x9CA0, 0x609B}, //4326 #CJK UNIFIED IDEOGRAPH
+ {0x9CA1, 0x6096}, //4327 #CJK UNIFIED IDEOGRAPH
+ {0x9CA2, 0x6097}, //4328 #CJK UNIFIED IDEOGRAPH
+ {0x9CA3, 0x6092}, //4329 #CJK UNIFIED IDEOGRAPH
+ {0x9CA4, 0x60A7}, //4330 #CJK UNIFIED IDEOGRAPH
+ {0x9CA5, 0x608B}, //4331 #CJK UNIFIED IDEOGRAPH
+ {0x9CA6, 0x60E1}, //4332 #CJK UNIFIED IDEOGRAPH
+ {0x9CA7, 0x60B8}, //4333 #CJK UNIFIED IDEOGRAPH
+ {0x9CA8, 0x60E0}, //4334 #CJK UNIFIED IDEOGRAPH
+ {0x9CA9, 0x60D3}, //4335 #CJK UNIFIED IDEOGRAPH
+ {0x9CAA, 0x60B4}, //4336 #CJK UNIFIED IDEOGRAPH
+ {0x9CAB, 0x5FF0}, //4337 #CJK UNIFIED IDEOGRAPH
+ {0x9CAC, 0x60BD}, //4338 #CJK UNIFIED IDEOGRAPH
+ {0x9CAD, 0x60C6}, //4339 #CJK UNIFIED IDEOGRAPH
+ {0x9CAE, 0x60B5}, //4340 #CJK UNIFIED IDEOGRAPH
+ {0x9CAF, 0x60D8}, //4341 #CJK UNIFIED IDEOGRAPH
+ {0x9CB0, 0x614D}, //4342 #CJK UNIFIED IDEOGRAPH
+ {0x9CB1, 0x6115}, //4343 #CJK UNIFIED IDEOGRAPH
+ {0x9CB2, 0x6106}, //4344 #CJK UNIFIED IDEOGRAPH
+ {0x9CB3, 0x60F6}, //4345 #CJK UNIFIED IDEOGRAPH
+ {0x9CB4, 0x60F7}, //4346 #CJK UNIFIED IDEOGRAPH
+ {0x9CB5, 0x6100}, //4347 #CJK UNIFIED IDEOGRAPH
+ {0x9CB6, 0x60F4}, //4348 #CJK UNIFIED IDEOGRAPH
+ {0x9CB7, 0x60FA}, //4349 #CJK UNIFIED IDEOGRAPH
+ {0x9CB8, 0x6103}, //4350 #CJK UNIFIED IDEOGRAPH
+ {0x9CB9, 0x6121}, //4351 #CJK UNIFIED IDEOGRAPH
+ {0x9CBA, 0x60FB}, //4352 #CJK UNIFIED IDEOGRAPH
+ {0x9CBB, 0x60F1}, //4353 #CJK UNIFIED IDEOGRAPH
+ {0x9CBC, 0x610D}, //4354 #CJK UNIFIED IDEOGRAPH
+ {0x9CBD, 0x610E}, //4355 #CJK UNIFIED IDEOGRAPH
+ {0x9CBE, 0x6147}, //4356 #CJK UNIFIED IDEOGRAPH
+ {0x9CBF, 0x613E}, //4357 #CJK UNIFIED IDEOGRAPH
+ {0x9CC0, 0x6128}, //4358 #CJK UNIFIED IDEOGRAPH
+ {0x9CC1, 0x6127}, //4359 #CJK UNIFIED IDEOGRAPH
+ {0x9CC2, 0x614A}, //4360 #CJK UNIFIED IDEOGRAPH
+ {0x9CC3, 0x613F}, //4361 #CJK UNIFIED IDEOGRAPH
+ {0x9CC4, 0x613C}, //4362 #CJK UNIFIED IDEOGRAPH
+ {0x9CC5, 0x612C}, //4363 #CJK UNIFIED IDEOGRAPH
+ {0x9CC6, 0x6134}, //4364 #CJK UNIFIED IDEOGRAPH
+ {0x9CC7, 0x613D}, //4365 #CJK UNIFIED IDEOGRAPH
+ {0x9CC8, 0x6142}, //4366 #CJK UNIFIED IDEOGRAPH
+ {0x9CC9, 0x6144}, //4367 #CJK UNIFIED IDEOGRAPH
+ {0x9CCA, 0x6173}, //4368 #CJK UNIFIED IDEOGRAPH
+ {0x9CCB, 0x6177}, //4369 #CJK UNIFIED IDEOGRAPH
+ {0x9CCC, 0x6158}, //4370 #CJK UNIFIED IDEOGRAPH
+ {0x9CCD, 0x6159}, //4371 #CJK UNIFIED IDEOGRAPH
+ {0x9CCE, 0x615A}, //4372 #CJK UNIFIED IDEOGRAPH
+ {0x9CCF, 0x616B}, //4373 #CJK UNIFIED IDEOGRAPH
+ {0x9CD0, 0x6174}, //4374 #CJK UNIFIED IDEOGRAPH
+ {0x9CD1, 0x616F}, //4375 #CJK UNIFIED IDEOGRAPH
+ {0x9CD2, 0x6165}, //4376 #CJK UNIFIED IDEOGRAPH
+ {0x9CD3, 0x6171}, //4377 #CJK UNIFIED IDEOGRAPH
+ {0x9CD4, 0x615F}, //4378 #CJK UNIFIED IDEOGRAPH
+ {0x9CD5, 0x615D}, //4379 #CJK UNIFIED IDEOGRAPH
+ {0x9CD6, 0x6153}, //4380 #CJK UNIFIED IDEOGRAPH
+ {0x9CD7, 0x6175}, //4381 #CJK UNIFIED IDEOGRAPH
+ {0x9CD8, 0x6199}, //4382 #CJK UNIFIED IDEOGRAPH
+ {0x9CD9, 0x6196}, //4383 #CJK UNIFIED IDEOGRAPH
+ {0x9CDA, 0x6187}, //4384 #CJK UNIFIED IDEOGRAPH
+ {0x9CDB, 0x61AC}, //4385 #CJK UNIFIED IDEOGRAPH
+ {0x9CDC, 0x6194}, //4386 #CJK UNIFIED IDEOGRAPH
+ {0x9CDD, 0x619A}, //4387 #CJK UNIFIED IDEOGRAPH
+ {0x9CDE, 0x618A}, //4388 #CJK UNIFIED IDEOGRAPH
+ {0x9CDF, 0x6191}, //4389 #CJK UNIFIED IDEOGRAPH
+ {0x9CE0, 0x61AB}, //4390 #CJK UNIFIED IDEOGRAPH
+ {0x9CE1, 0x61AE}, //4391 #CJK UNIFIED IDEOGRAPH
+ {0x9CE2, 0x61CC}, //4392 #CJK UNIFIED IDEOGRAPH
+ {0x9CE3, 0x61CA}, //4393 #CJK UNIFIED IDEOGRAPH
+ {0x9CE4, 0x61C9}, //4394 #CJK UNIFIED IDEOGRAPH
+ {0x9CE5, 0x61F7}, //4395 #CJK UNIFIED IDEOGRAPH
+ {0x9CE6, 0x61C8}, //4396 #CJK UNIFIED IDEOGRAPH
+ {0x9CE7, 0x61C3}, //4397 #CJK UNIFIED IDEOGRAPH
+ {0x9CE8, 0x61C6}, //4398 #CJK UNIFIED IDEOGRAPH
+ {0x9CE9, 0x61BA}, //4399 #CJK UNIFIED IDEOGRAPH
+ {0x9CEA, 0x61CB}, //4400 #CJK UNIFIED IDEOGRAPH
+ {0x9CEB, 0x7F79}, //4401 #CJK UNIFIED IDEOGRAPH
+ {0x9CEC, 0x61CD}, //4402 #CJK UNIFIED IDEOGRAPH
+ {0x9CED, 0x61E6}, //4403 #CJK UNIFIED IDEOGRAPH
+ {0x9CEE, 0x61E3}, //4404 #CJK UNIFIED IDEOGRAPH
+ {0x9CEF, 0x61F6}, //4405 #CJK UNIFIED IDEOGRAPH
+ {0x9CF0, 0x61FA}, //4406 #CJK UNIFIED IDEOGRAPH
+ {0x9CF1, 0x61F4}, //4407 #CJK UNIFIED IDEOGRAPH
+ {0x9CF2, 0x61FF}, //4408 #CJK UNIFIED IDEOGRAPH
+ {0x9CF3, 0x61FD}, //4409 #CJK UNIFIED IDEOGRAPH
+ {0x9CF4, 0x61FC}, //4410 #CJK UNIFIED IDEOGRAPH
+ {0x9CF5, 0x61FE}, //4411 #CJK UNIFIED IDEOGRAPH
+ {0x9CF6, 0x6200}, //4412 #CJK UNIFIED IDEOGRAPH
+ {0x9CF7, 0x6208}, //4413 #CJK UNIFIED IDEOGRAPH
+ {0x9CF8, 0x6209}, //4414 #CJK UNIFIED IDEOGRAPH
+ {0x9CF9, 0x620D}, //4415 #CJK UNIFIED IDEOGRAPH
+ {0x9CFA, 0x620C}, //4416 #CJK UNIFIED IDEOGRAPH
+ {0x9CFB, 0x6214}, //4417 #CJK UNIFIED IDEOGRAPH
+ {0x9CFC, 0x621B}, //4418 #CJK UNIFIED IDEOGRAPH
+ {0x9D40, 0x621E}, //4419 #CJK UNIFIED IDEOGRAPH
+ {0x9D41, 0x6221}, //4420 #CJK UNIFIED IDEOGRAPH
+ {0x9D42, 0x622A}, //4421 #CJK UNIFIED IDEOGRAPH
+ {0x9D43, 0x622E}, //4422 #CJK UNIFIED IDEOGRAPH
+ {0x9D44, 0x6230}, //4423 #CJK UNIFIED IDEOGRAPH
+ {0x9D45, 0x6232}, //4424 #CJK UNIFIED IDEOGRAPH
+ {0x9D46, 0x6233}, //4425 #CJK UNIFIED IDEOGRAPH
+ {0x9D47, 0x6241}, //4426 #CJK UNIFIED IDEOGRAPH
+ {0x9D48, 0x624E}, //4427 #CJK UNIFIED IDEOGRAPH
+ {0x9D49, 0x625E}, //4428 #CJK UNIFIED IDEOGRAPH
+ {0x9D4A, 0x6263}, //4429 #CJK UNIFIED IDEOGRAPH
+ {0x9D4B, 0x625B}, //4430 #CJK UNIFIED IDEOGRAPH
+ {0x9D4C, 0x6260}, //4431 #CJK UNIFIED IDEOGRAPH
+ {0x9D4D, 0x6268}, //4432 #CJK UNIFIED IDEOGRAPH
+ {0x9D4E, 0x627C}, //4433 #CJK UNIFIED IDEOGRAPH
+ {0x9D4F, 0x6282}, //4434 #CJK UNIFIED IDEOGRAPH
+ {0x9D50, 0x6289}, //4435 #CJK UNIFIED IDEOGRAPH
+ {0x9D51, 0x627E}, //4436 #CJK UNIFIED IDEOGRAPH
+ {0x9D52, 0x6292}, //4437 #CJK UNIFIED IDEOGRAPH
+ {0x9D53, 0x6293}, //4438 #CJK UNIFIED IDEOGRAPH
+ {0x9D54, 0x6296}, //4439 #CJK UNIFIED IDEOGRAPH
+ {0x9D55, 0x62D4}, //4440 #CJK UNIFIED IDEOGRAPH
+ {0x9D56, 0x6283}, //4441 #CJK UNIFIED IDEOGRAPH
+ {0x9D57, 0x6294}, //4442 #CJK UNIFIED IDEOGRAPH
+ {0x9D58, 0x62D7}, //4443 #CJK UNIFIED IDEOGRAPH
+ {0x9D59, 0x62D1}, //4444 #CJK UNIFIED IDEOGRAPH
+ {0x9D5A, 0x62BB}, //4445 #CJK UNIFIED IDEOGRAPH
+ {0x9D5B, 0x62CF}, //4446 #CJK UNIFIED IDEOGRAPH
+ {0x9D5C, 0x62FF}, //4447 #CJK UNIFIED IDEOGRAPH
+ {0x9D5D, 0x62C6}, //4448 #CJK UNIFIED IDEOGRAPH
+ {0x9D5E, 0x64D4}, //4449 #CJK UNIFIED IDEOGRAPH
+ {0x9D5F, 0x62C8}, //4450 #CJK UNIFIED IDEOGRAPH
+ {0x9D60, 0x62DC}, //4451 #CJK UNIFIED IDEOGRAPH
+ {0x9D61, 0x62CC}, //4452 #CJK UNIFIED IDEOGRAPH
+ {0x9D62, 0x62CA}, //4453 #CJK UNIFIED IDEOGRAPH
+ {0x9D63, 0x62C2}, //4454 #CJK UNIFIED IDEOGRAPH
+ {0x9D64, 0x62C7}, //4455 #CJK UNIFIED IDEOGRAPH
+ {0x9D65, 0x629B}, //4456 #CJK UNIFIED IDEOGRAPH
+ {0x9D66, 0x62C9}, //4457 #CJK UNIFIED IDEOGRAPH
+ {0x9D67, 0x630C}, //4458 #CJK UNIFIED IDEOGRAPH
+ {0x9D68, 0x62EE}, //4459 #CJK UNIFIED IDEOGRAPH
+ {0x9D69, 0x62F1}, //4460 #CJK UNIFIED IDEOGRAPH
+ {0x9D6A, 0x6327}, //4461 #CJK UNIFIED IDEOGRAPH
+ {0x9D6B, 0x6302}, //4462 #CJK UNIFIED IDEOGRAPH
+ {0x9D6C, 0x6308}, //4463 #CJK UNIFIED IDEOGRAPH
+ {0x9D6D, 0x62EF}, //4464 #CJK UNIFIED IDEOGRAPH
+ {0x9D6E, 0x62F5}, //4465 #CJK UNIFIED IDEOGRAPH
+ {0x9D6F, 0x6350}, //4466 #CJK UNIFIED IDEOGRAPH
+ {0x9D70, 0x633E}, //4467 #CJK UNIFIED IDEOGRAPH
+ {0x9D71, 0x634D}, //4468 #CJK UNIFIED IDEOGRAPH
+ {0x9D72, 0x641C}, //4469 #CJK UNIFIED IDEOGRAPH
+ {0x9D73, 0x634F}, //4470 #CJK UNIFIED IDEOGRAPH
+ {0x9D74, 0x6396}, //4471 #CJK UNIFIED IDEOGRAPH
+ {0x9D75, 0x638E}, //4472 #CJK UNIFIED IDEOGRAPH
+ {0x9D76, 0x6380}, //4473 #CJK UNIFIED IDEOGRAPH
+ {0x9D77, 0x63AB}, //4474 #CJK UNIFIED IDEOGRAPH
+ {0x9D78, 0x6376}, //4475 #CJK UNIFIED IDEOGRAPH
+ {0x9D79, 0x63A3}, //4476 #CJK UNIFIED IDEOGRAPH
+ {0x9D7A, 0x638F}, //4477 #CJK UNIFIED IDEOGRAPH
+ {0x9D7B, 0x6389}, //4478 #CJK UNIFIED IDEOGRAPH
+ {0x9D7C, 0x639F}, //4479 #CJK UNIFIED IDEOGRAPH
+ {0x9D7D, 0x63B5}, //4480 #CJK UNIFIED IDEOGRAPH
+ {0x9D7E, 0x636B}, //4481 #CJK UNIFIED IDEOGRAPH
+ {0x9D80, 0x6369}, //4482 #CJK UNIFIED IDEOGRAPH
+ {0x9D81, 0x63BE}, //4483 #CJK UNIFIED IDEOGRAPH
+ {0x9D82, 0x63E9}, //4484 #CJK UNIFIED IDEOGRAPH
+ {0x9D83, 0x63C0}, //4485 #CJK UNIFIED IDEOGRAPH
+ {0x9D84, 0x63C6}, //4486 #CJK UNIFIED IDEOGRAPH
+ {0x9D85, 0x63E3}, //4487 #CJK UNIFIED IDEOGRAPH
+ {0x9D86, 0x63C9}, //4488 #CJK UNIFIED IDEOGRAPH
+ {0x9D87, 0x63D2}, //4489 #CJK UNIFIED IDEOGRAPH
+ {0x9D88, 0x63F6}, //4490 #CJK UNIFIED IDEOGRAPH
+ {0x9D89, 0x63C4}, //4491 #CJK UNIFIED IDEOGRAPH
+ {0x9D8A, 0x6416}, //4492 #CJK UNIFIED IDEOGRAPH
+ {0x9D8B, 0x6434}, //4493 #CJK UNIFIED IDEOGRAPH
+ {0x9D8C, 0x6406}, //4494 #CJK UNIFIED IDEOGRAPH
+ {0x9D8D, 0x6413}, //4495 #CJK UNIFIED IDEOGRAPH
+ {0x9D8E, 0x6426}, //4496 #CJK UNIFIED IDEOGRAPH
+ {0x9D8F, 0x6436}, //4497 #CJK UNIFIED IDEOGRAPH
+ {0x9D90, 0x651D}, //4498 #CJK UNIFIED IDEOGRAPH
+ {0x9D91, 0x6417}, //4499 #CJK UNIFIED IDEOGRAPH
+ {0x9D92, 0x6428}, //4500 #CJK UNIFIED IDEOGRAPH
+ {0x9D93, 0x640F}, //4501 #CJK UNIFIED IDEOGRAPH
+ {0x9D94, 0x6467}, //4502 #CJK UNIFIED IDEOGRAPH
+ {0x9D95, 0x646F}, //4503 #CJK UNIFIED IDEOGRAPH
+ {0x9D96, 0x6476}, //4504 #CJK UNIFIED IDEOGRAPH
+ {0x9D97, 0x644E}, //4505 #CJK UNIFIED IDEOGRAPH
+ {0x9D98, 0x652A}, //4506 #CJK UNIFIED IDEOGRAPH
+ {0x9D99, 0x6495}, //4507 #CJK UNIFIED IDEOGRAPH
+ {0x9D9A, 0x6493}, //4508 #CJK UNIFIED IDEOGRAPH
+ {0x9D9B, 0x64A5}, //4509 #CJK UNIFIED IDEOGRAPH
+ {0x9D9C, 0x64A9}, //4510 #CJK UNIFIED IDEOGRAPH
+ {0x9D9D, 0x6488}, //4511 #CJK UNIFIED IDEOGRAPH
+ {0x9D9E, 0x64BC}, //4512 #CJK UNIFIED IDEOGRAPH
+ {0x9D9F, 0x64DA}, //4513 #CJK UNIFIED IDEOGRAPH
+ {0x9DA0, 0x64D2}, //4514 #CJK UNIFIED IDEOGRAPH
+ {0x9DA1, 0x64C5}, //4515 #CJK UNIFIED IDEOGRAPH
+ {0x9DA2, 0x64C7}, //4516 #CJK UNIFIED IDEOGRAPH
+ {0x9DA3, 0x64BB}, //4517 #CJK UNIFIED IDEOGRAPH
+ {0x9DA4, 0x64D8}, //4518 #CJK UNIFIED IDEOGRAPH
+ {0x9DA5, 0x64C2}, //4519 #CJK UNIFIED IDEOGRAPH
+ {0x9DA6, 0x64F1}, //4520 #CJK UNIFIED IDEOGRAPH
+ {0x9DA7, 0x64E7}, //4521 #CJK UNIFIED IDEOGRAPH
+ {0x9DA8, 0x8209}, //4522 #CJK UNIFIED IDEOGRAPH
+ {0x9DA9, 0x64E0}, //4523 #CJK UNIFIED IDEOGRAPH
+ {0x9DAA, 0x64E1}, //4524 #CJK UNIFIED IDEOGRAPH
+ {0x9DAB, 0x62AC}, //4525 #CJK UNIFIED IDEOGRAPH
+ {0x9DAC, 0x64E3}, //4526 #CJK UNIFIED IDEOGRAPH
+ {0x9DAD, 0x64EF}, //4527 #CJK UNIFIED IDEOGRAPH
+ {0x9DAE, 0x652C}, //4528 #CJK UNIFIED IDEOGRAPH
+ {0x9DAF, 0x64F6}, //4529 #CJK UNIFIED IDEOGRAPH
+ {0x9DB0, 0x64F4}, //4530 #CJK UNIFIED IDEOGRAPH
+ {0x9DB1, 0x64F2}, //4531 #CJK UNIFIED IDEOGRAPH
+ {0x9DB2, 0x64FA}, //4532 #CJK UNIFIED IDEOGRAPH
+ {0x9DB3, 0x6500}, //4533 #CJK UNIFIED IDEOGRAPH
+ {0x9DB4, 0x64FD}, //4534 #CJK UNIFIED IDEOGRAPH
+ {0x9DB5, 0x6518}, //4535 #CJK UNIFIED IDEOGRAPH
+ {0x9DB6, 0x651C}, //4536 #CJK UNIFIED IDEOGRAPH
+ {0x9DB7, 0x6505}, //4537 #CJK UNIFIED IDEOGRAPH
+ {0x9DB8, 0x6524}, //4538 #CJK UNIFIED IDEOGRAPH
+ {0x9DB9, 0x6523}, //4539 #CJK UNIFIED IDEOGRAPH
+ {0x9DBA, 0x652B}, //4540 #CJK UNIFIED IDEOGRAPH
+ {0x9DBB, 0x6534}, //4541 #CJK UNIFIED IDEOGRAPH
+ {0x9DBC, 0x6535}, //4542 #CJK UNIFIED IDEOGRAPH
+ {0x9DBD, 0x6537}, //4543 #CJK UNIFIED IDEOGRAPH
+ {0x9DBE, 0x6536}, //4544 #CJK UNIFIED IDEOGRAPH
+ {0x9DBF, 0x6538}, //4545 #CJK UNIFIED IDEOGRAPH
+ {0x9DC0, 0x754B}, //4546 #CJK UNIFIED IDEOGRAPH
+ {0x9DC1, 0x6548}, //4547 #CJK UNIFIED IDEOGRAPH
+ {0x9DC2, 0x6556}, //4548 #CJK UNIFIED IDEOGRAPH
+ {0x9DC3, 0x6555}, //4549 #CJK UNIFIED IDEOGRAPH
+ {0x9DC4, 0x654D}, //4550 #CJK UNIFIED IDEOGRAPH
+ {0x9DC5, 0x6558}, //4551 #CJK UNIFIED IDEOGRAPH
+ {0x9DC6, 0x655E}, //4552 #CJK UNIFIED IDEOGRAPH
+ {0x9DC7, 0x655D}, //4553 #CJK UNIFIED IDEOGRAPH
+ {0x9DC8, 0x6572}, //4554 #CJK UNIFIED IDEOGRAPH
+ {0x9DC9, 0x6578}, //4555 #CJK UNIFIED IDEOGRAPH
+ {0x9DCA, 0x6582}, //4556 #CJK UNIFIED IDEOGRAPH
+ {0x9DCB, 0x6583}, //4557 #CJK UNIFIED IDEOGRAPH
+ {0x9DCC, 0x8B8A}, //4558 #CJK UNIFIED IDEOGRAPH
+ {0x9DCD, 0x659B}, //4559 #CJK UNIFIED IDEOGRAPH
+ {0x9DCE, 0x659F}, //4560 #CJK UNIFIED IDEOGRAPH
+ {0x9DCF, 0x65AB}, //4561 #CJK UNIFIED IDEOGRAPH
+ {0x9DD0, 0x65B7}, //4562 #CJK UNIFIED IDEOGRAPH
+ {0x9DD1, 0x65C3}, //4563 #CJK UNIFIED IDEOGRAPH
+ {0x9DD2, 0x65C6}, //4564 #CJK UNIFIED IDEOGRAPH
+ {0x9DD3, 0x65C1}, //4565 #CJK UNIFIED IDEOGRAPH
+ {0x9DD4, 0x65C4}, //4566 #CJK UNIFIED IDEOGRAPH
+ {0x9DD5, 0x65CC}, //4567 #CJK UNIFIED IDEOGRAPH
+ {0x9DD6, 0x65D2}, //4568 #CJK UNIFIED IDEOGRAPH
+ {0x9DD7, 0x65DB}, //4569 #CJK UNIFIED IDEOGRAPH
+ {0x9DD8, 0x65D9}, //4570 #CJK UNIFIED IDEOGRAPH
+ {0x9DD9, 0x65E0}, //4571 #CJK UNIFIED IDEOGRAPH
+ {0x9DDA, 0x65E1}, //4572 #CJK UNIFIED IDEOGRAPH
+ {0x9DDB, 0x65F1}, //4573 #CJK UNIFIED IDEOGRAPH
+ {0x9DDC, 0x6772}, //4574 #CJK UNIFIED IDEOGRAPH
+ {0x9DDD, 0x660A}, //4575 #CJK UNIFIED IDEOGRAPH
+ {0x9DDE, 0x6603}, //4576 #CJK UNIFIED IDEOGRAPH
+ {0x9DDF, 0x65FB}, //4577 #CJK UNIFIED IDEOGRAPH
+ {0x9DE0, 0x6773}, //4578 #CJK UNIFIED IDEOGRAPH
+ {0x9DE1, 0x6635}, //4579 #CJK UNIFIED IDEOGRAPH
+ {0x9DE2, 0x6636}, //4580 #CJK UNIFIED IDEOGRAPH
+ {0x9DE3, 0x6634}, //4581 #CJK UNIFIED IDEOGRAPH
+ {0x9DE4, 0x661C}, //4582 #CJK UNIFIED IDEOGRAPH
+ {0x9DE5, 0x664F}, //4583 #CJK UNIFIED IDEOGRAPH
+ {0x9DE6, 0x6644}, //4584 #CJK UNIFIED IDEOGRAPH
+ {0x9DE7, 0x6649}, //4585 #CJK UNIFIED IDEOGRAPH
+ {0x9DE8, 0x6641}, //4586 #CJK UNIFIED IDEOGRAPH
+ {0x9DE9, 0x665E}, //4587 #CJK UNIFIED IDEOGRAPH
+ {0x9DEA, 0x665D}, //4588 #CJK UNIFIED IDEOGRAPH
+ {0x9DEB, 0x6664}, //4589 #CJK UNIFIED IDEOGRAPH
+ {0x9DEC, 0x6667}, //4590 #CJK UNIFIED IDEOGRAPH
+ {0x9DED, 0x6668}, //4591 #CJK UNIFIED IDEOGRAPH
+ {0x9DEE, 0x665F}, //4592 #CJK UNIFIED IDEOGRAPH
+ {0x9DEF, 0x6662}, //4593 #CJK UNIFIED IDEOGRAPH
+ {0x9DF0, 0x6670}, //4594 #CJK UNIFIED IDEOGRAPH
+ {0x9DF1, 0x6683}, //4595 #CJK UNIFIED IDEOGRAPH
+ {0x9DF2, 0x6688}, //4596 #CJK UNIFIED IDEOGRAPH
+ {0x9DF3, 0x668E}, //4597 #CJK UNIFIED IDEOGRAPH
+ {0x9DF4, 0x6689}, //4598 #CJK UNIFIED IDEOGRAPH
+ {0x9DF5, 0x6684}, //4599 #CJK UNIFIED IDEOGRAPH
+ {0x9DF6, 0x6698}, //4600 #CJK UNIFIED IDEOGRAPH
+ {0x9DF7, 0x669D}, //4601 #CJK UNIFIED IDEOGRAPH
+ {0x9DF8, 0x66C1}, //4602 #CJK UNIFIED IDEOGRAPH
+ {0x9DF9, 0x66B9}, //4603 #CJK UNIFIED IDEOGRAPH
+ {0x9DFA, 0x66C9}, //4604 #CJK UNIFIED IDEOGRAPH
+ {0x9DFB, 0x66BE}, //4605 #CJK UNIFIED IDEOGRAPH
+ {0x9DFC, 0x66BC}, //4606 #CJK UNIFIED IDEOGRAPH
+ {0x9E40, 0x66C4}, //4607 #CJK UNIFIED IDEOGRAPH
+ {0x9E41, 0x66B8}, //4608 #CJK UNIFIED IDEOGRAPH
+ {0x9E42, 0x66D6}, //4609 #CJK UNIFIED IDEOGRAPH
+ {0x9E43, 0x66DA}, //4610 #CJK UNIFIED IDEOGRAPH
+ {0x9E44, 0x66E0}, //4611 #CJK UNIFIED IDEOGRAPH
+ {0x9E45, 0x663F}, //4612 #CJK UNIFIED IDEOGRAPH
+ {0x9E46, 0x66E6}, //4613 #CJK UNIFIED IDEOGRAPH
+ {0x9E47, 0x66E9}, //4614 #CJK UNIFIED IDEOGRAPH
+ {0x9E48, 0x66F0}, //4615 #CJK UNIFIED IDEOGRAPH
+ {0x9E49, 0x66F5}, //4616 #CJK UNIFIED IDEOGRAPH
+ {0x9E4A, 0x66F7}, //4617 #CJK UNIFIED IDEOGRAPH
+ {0x9E4B, 0x670F}, //4618 #CJK UNIFIED IDEOGRAPH
+ {0x9E4C, 0x6716}, //4619 #CJK UNIFIED IDEOGRAPH
+ {0x9E4D, 0x671E}, //4620 #CJK UNIFIED IDEOGRAPH
+ {0x9E4E, 0x6726}, //4621 #CJK UNIFIED IDEOGRAPH
+ {0x9E4F, 0x6727}, //4622 #CJK UNIFIED IDEOGRAPH
+ {0x9E50, 0x9738}, //4623 #CJK UNIFIED IDEOGRAPH
+ {0x9E51, 0x672E}, //4624 #CJK UNIFIED IDEOGRAPH
+ {0x9E52, 0x673F}, //4625 #CJK UNIFIED IDEOGRAPH
+ {0x9E53, 0x6736}, //4626 #CJK UNIFIED IDEOGRAPH
+ {0x9E54, 0x6741}, //4627 #CJK UNIFIED IDEOGRAPH
+ {0x9E55, 0x6738}, //4628 #CJK UNIFIED IDEOGRAPH
+ {0x9E56, 0x6737}, //4629 #CJK UNIFIED IDEOGRAPH
+ {0x9E57, 0x6746}, //4630 #CJK UNIFIED IDEOGRAPH
+ {0x9E58, 0x675E}, //4631 #CJK UNIFIED IDEOGRAPH
+ {0x9E59, 0x6760}, //4632 #CJK UNIFIED IDEOGRAPH
+ {0x9E5A, 0x6759}, //4633 #CJK UNIFIED IDEOGRAPH
+ {0x9E5B, 0x6763}, //4634 #CJK UNIFIED IDEOGRAPH
+ {0x9E5C, 0x6764}, //4635 #CJK UNIFIED IDEOGRAPH
+ {0x9E5D, 0x6789}, //4636 #CJK UNIFIED IDEOGRAPH
+ {0x9E5E, 0x6770}, //4637 #CJK UNIFIED IDEOGRAPH
+ {0x9E5F, 0x67A9}, //4638 #CJK UNIFIED IDEOGRAPH
+ {0x9E60, 0x677C}, //4639 #CJK UNIFIED IDEOGRAPH
+ {0x9E61, 0x676A}, //4640 #CJK UNIFIED IDEOGRAPH
+ {0x9E62, 0x678C}, //4641 #CJK UNIFIED IDEOGRAPH
+ {0x9E63, 0x678B}, //4642 #CJK UNIFIED IDEOGRAPH
+ {0x9E64, 0x67A6}, //4643 #CJK UNIFIED IDEOGRAPH
+ {0x9E65, 0x67A1}, //4644 #CJK UNIFIED IDEOGRAPH
+ {0x9E66, 0x6785}, //4645 #CJK UNIFIED IDEOGRAPH
+ {0x9E67, 0x67B7}, //4646 #CJK UNIFIED IDEOGRAPH
+ {0x9E68, 0x67EF}, //4647 #CJK UNIFIED IDEOGRAPH
+ {0x9E69, 0x67B4}, //4648 #CJK UNIFIED IDEOGRAPH
+ {0x9E6A, 0x67EC}, //4649 #CJK UNIFIED IDEOGRAPH
+ {0x9E6B, 0x67B3}, //4650 #CJK UNIFIED IDEOGRAPH
+ {0x9E6C, 0x67E9}, //4651 #CJK UNIFIED IDEOGRAPH
+ {0x9E6D, 0x67B8}, //4652 #CJK UNIFIED IDEOGRAPH
+ {0x9E6E, 0x67E4}, //4653 #CJK UNIFIED IDEOGRAPH
+ {0x9E6F, 0x67DE}, //4654 #CJK UNIFIED IDEOGRAPH
+ {0x9E70, 0x67DD}, //4655 #CJK UNIFIED IDEOGRAPH
+ {0x9E71, 0x67E2}, //4656 #CJK UNIFIED IDEOGRAPH
+ {0x9E72, 0x67EE}, //4657 #CJK UNIFIED IDEOGRAPH
+ {0x9E73, 0x67B9}, //4658 #CJK UNIFIED IDEOGRAPH
+ {0x9E74, 0x67CE}, //4659 #CJK UNIFIED IDEOGRAPH
+ {0x9E75, 0x67C6}, //4660 #CJK UNIFIED IDEOGRAPH
+ {0x9E76, 0x67E7}, //4661 #CJK UNIFIED IDEOGRAPH
+ {0x9E77, 0x6A9C}, //4662 #CJK UNIFIED IDEOGRAPH
+ {0x9E78, 0x681E}, //4663 #CJK UNIFIED IDEOGRAPH
+ {0x9E79, 0x6846}, //4664 #CJK UNIFIED IDEOGRAPH
+ {0x9E7A, 0x6829}, //4665 #CJK UNIFIED IDEOGRAPH
+ {0x9E7B, 0x6840}, //4666 #CJK UNIFIED IDEOGRAPH
+ {0x9E7C, 0x684D}, //4667 #CJK UNIFIED IDEOGRAPH
+ {0x9E7D, 0x6832}, //4668 #CJK UNIFIED IDEOGRAPH
+ {0x9E7E, 0x684E}, //4669 #CJK UNIFIED IDEOGRAPH
+ {0x9E80, 0x68B3}, //4670 #CJK UNIFIED IDEOGRAPH
+ {0x9E81, 0x682B}, //4671 #CJK UNIFIED IDEOGRAPH
+ {0x9E82, 0x6859}, //4672 #CJK UNIFIED IDEOGRAPH
+ {0x9E83, 0x6863}, //4673 #CJK UNIFIED IDEOGRAPH
+ {0x9E84, 0x6877}, //4674 #CJK UNIFIED IDEOGRAPH
+ {0x9E85, 0x687F}, //4675 #CJK UNIFIED IDEOGRAPH
+ {0x9E86, 0x689F}, //4676 #CJK UNIFIED IDEOGRAPH
+ {0x9E87, 0x688F}, //4677 #CJK UNIFIED IDEOGRAPH
+ {0x9E88, 0x68AD}, //4678 #CJK UNIFIED IDEOGRAPH
+ {0x9E89, 0x6894}, //4679 #CJK UNIFIED IDEOGRAPH
+ {0x9E8A, 0x689D}, //4680 #CJK UNIFIED IDEOGRAPH
+ {0x9E8B, 0x689B}, //4681 #CJK UNIFIED IDEOGRAPH
+ {0x9E8C, 0x6883}, //4682 #CJK UNIFIED IDEOGRAPH
+ {0x9E8D, 0x6AAE}, //4683 #CJK UNIFIED IDEOGRAPH
+ {0x9E8E, 0x68B9}, //4684 #CJK UNIFIED IDEOGRAPH
+ {0x9E8F, 0x6874}, //4685 #CJK UNIFIED IDEOGRAPH
+ {0x9E90, 0x68B5}, //4686 #CJK UNIFIED IDEOGRAPH
+ {0x9E91, 0x68A0}, //4687 #CJK UNIFIED IDEOGRAPH
+ {0x9E92, 0x68BA}, //4688 #CJK UNIFIED IDEOGRAPH
+ {0x9E93, 0x690F}, //4689 #CJK UNIFIED IDEOGRAPH
+ {0x9E94, 0x688D}, //4690 #CJK UNIFIED IDEOGRAPH
+ {0x9E95, 0x687E}, //4691 #CJK UNIFIED IDEOGRAPH
+ {0x9E96, 0x6901}, //4692 #CJK UNIFIED IDEOGRAPH
+ {0x9E97, 0x68CA}, //4693 #CJK UNIFIED IDEOGRAPH
+ {0x9E98, 0x6908}, //4694 #CJK UNIFIED IDEOGRAPH
+ {0x9E99, 0x68D8}, //4695 #CJK UNIFIED IDEOGRAPH
+ {0x9E9A, 0x6922}, //4696 #CJK UNIFIED IDEOGRAPH
+ {0x9E9B, 0x6926}, //4697 #CJK UNIFIED IDEOGRAPH
+ {0x9E9C, 0x68E1}, //4698 #CJK UNIFIED IDEOGRAPH
+ {0x9E9D, 0x690C}, //4699 #CJK UNIFIED IDEOGRAPH
+ {0x9E9E, 0x68CD}, //4700 #CJK UNIFIED IDEOGRAPH
+ {0x9E9F, 0x68D4}, //4701 #CJK UNIFIED IDEOGRAPH
+ {0x9EA0, 0x68E7}, //4702 #CJK UNIFIED IDEOGRAPH
+ {0x9EA1, 0x68D5}, //4703 #CJK UNIFIED IDEOGRAPH
+ {0x9EA2, 0x6936}, //4704 #CJK UNIFIED IDEOGRAPH
+ {0x9EA3, 0x6912}, //4705 #CJK UNIFIED IDEOGRAPH
+ {0x9EA4, 0x6904}, //4706 #CJK UNIFIED IDEOGRAPH
+ {0x9EA5, 0x68D7}, //4707 #CJK UNIFIED IDEOGRAPH
+ {0x9EA6, 0x68E3}, //4708 #CJK UNIFIED IDEOGRAPH
+ {0x9EA7, 0x6925}, //4709 #CJK UNIFIED IDEOGRAPH
+ {0x9EA8, 0x68F9}, //4710 #CJK UNIFIED IDEOGRAPH
+ {0x9EA9, 0x68E0}, //4711 #CJK UNIFIED IDEOGRAPH
+ {0x9EAA, 0x68EF}, //4712 #CJK UNIFIED IDEOGRAPH
+ {0x9EAB, 0x6928}, //4713 #CJK UNIFIED IDEOGRAPH
+ {0x9EAC, 0x692A}, //4714 #CJK UNIFIED IDEOGRAPH
+ {0x9EAD, 0x691A}, //4715 #CJK UNIFIED IDEOGRAPH
+ {0x9EAE, 0x6923}, //4716 #CJK UNIFIED IDEOGRAPH
+ {0x9EAF, 0x6921}, //4717 #CJK UNIFIED IDEOGRAPH
+ {0x9EB0, 0x68C6}, //4718 #CJK UNIFIED IDEOGRAPH
+ {0x9EB1, 0x6979}, //4719 #CJK UNIFIED IDEOGRAPH
+ {0x9EB2, 0x6977}, //4720 #CJK UNIFIED IDEOGRAPH
+ {0x9EB3, 0x695C}, //4721 #CJK UNIFIED IDEOGRAPH
+ {0x9EB4, 0x6978}, //4722 #CJK UNIFIED IDEOGRAPH
+ {0x9EB5, 0x696B}, //4723 #CJK UNIFIED IDEOGRAPH
+ {0x9EB6, 0x6954}, //4724 #CJK UNIFIED IDEOGRAPH
+ {0x9EB7, 0x697E}, //4725 #CJK UNIFIED IDEOGRAPH
+ {0x9EB8, 0x696E}, //4726 #CJK UNIFIED IDEOGRAPH
+ {0x9EB9, 0x6939}, //4727 #CJK UNIFIED IDEOGRAPH
+ {0x9EBA, 0x6974}, //4728 #CJK UNIFIED IDEOGRAPH
+ {0x9EBB, 0x693D}, //4729 #CJK UNIFIED IDEOGRAPH
+ {0x9EBC, 0x6959}, //4730 #CJK UNIFIED IDEOGRAPH
+ {0x9EBD, 0x6930}, //4731 #CJK UNIFIED IDEOGRAPH
+ {0x9EBE, 0x6961}, //4732 #CJK UNIFIED IDEOGRAPH
+ {0x9EBF, 0x695E}, //4733 #CJK UNIFIED IDEOGRAPH
+ {0x9EC0, 0x695D}, //4734 #CJK UNIFIED IDEOGRAPH
+ {0x9EC1, 0x6981}, //4735 #CJK UNIFIED IDEOGRAPH
+ {0x9EC2, 0x696A}, //4736 #CJK UNIFIED IDEOGRAPH
+ {0x9EC3, 0x69B2}, //4737 #CJK UNIFIED IDEOGRAPH
+ {0x9EC4, 0x69AE}, //4738 #CJK UNIFIED IDEOGRAPH
+ {0x9EC5, 0x69D0}, //4739 #CJK UNIFIED IDEOGRAPH
+ {0x9EC6, 0x69BF}, //4740 #CJK UNIFIED IDEOGRAPH
+ {0x9EC7, 0x69C1}, //4741 #CJK UNIFIED IDEOGRAPH
+ {0x9EC8, 0x69D3}, //4742 #CJK UNIFIED IDEOGRAPH
+ {0x9EC9, 0x69BE}, //4743 #CJK UNIFIED IDEOGRAPH
+ {0x9ECA, 0x69CE}, //4744 #CJK UNIFIED IDEOGRAPH
+ {0x9ECB, 0x5BE8}, //4745 #CJK UNIFIED IDEOGRAPH
+ {0x9ECC, 0x69CA}, //4746 #CJK UNIFIED IDEOGRAPH
+ {0x9ECD, 0x69DD}, //4747 #CJK UNIFIED IDEOGRAPH
+ {0x9ECE, 0x69BB}, //4748 #CJK UNIFIED IDEOGRAPH
+ {0x9ECF, 0x69C3}, //4749 #CJK UNIFIED IDEOGRAPH
+ {0x9ED0, 0x69A7}, //4750 #CJK UNIFIED IDEOGRAPH
+ {0x9ED1, 0x6A2E}, //4751 #CJK UNIFIED IDEOGRAPH
+ {0x9ED2, 0x6991}, //4752 #CJK UNIFIED IDEOGRAPH
+ {0x9ED3, 0x69A0}, //4753 #CJK UNIFIED IDEOGRAPH
+ {0x9ED4, 0x699C}, //4754 #CJK UNIFIED IDEOGRAPH
+ {0x9ED5, 0x6995}, //4755 #CJK UNIFIED IDEOGRAPH
+ {0x9ED6, 0x69B4}, //4756 #CJK UNIFIED IDEOGRAPH
+ {0x9ED7, 0x69DE}, //4757 #CJK UNIFIED IDEOGRAPH
+ {0x9ED8, 0x69E8}, //4758 #CJK UNIFIED IDEOGRAPH
+ {0x9ED9, 0x6A02}, //4759 #CJK UNIFIED IDEOGRAPH
+ {0x9EDA, 0x6A1B}, //4760 #CJK UNIFIED IDEOGRAPH
+ {0x9EDB, 0x69FF}, //4761 #CJK UNIFIED IDEOGRAPH
+ {0x9EDC, 0x6B0A}, //4762 #CJK UNIFIED IDEOGRAPH
+ {0x9EDD, 0x69F9}, //4763 #CJK UNIFIED IDEOGRAPH
+ {0x9EDE, 0x69F2}, //4764 #CJK UNIFIED IDEOGRAPH
+ {0x9EDF, 0x69E7}, //4765 #CJK UNIFIED IDEOGRAPH
+ {0x9EE0, 0x6A05}, //4766 #CJK UNIFIED IDEOGRAPH
+ {0x9EE1, 0x69B1}, //4767 #CJK UNIFIED IDEOGRAPH
+ {0x9EE2, 0x6A1E}, //4768 #CJK UNIFIED IDEOGRAPH
+ {0x9EE3, 0x69ED}, //4769 #CJK UNIFIED IDEOGRAPH
+ {0x9EE4, 0x6A14}, //4770 #CJK UNIFIED IDEOGRAPH
+ {0x9EE5, 0x69EB}, //4771 #CJK UNIFIED IDEOGRAPH
+ {0x9EE6, 0x6A0A}, //4772 #CJK UNIFIED IDEOGRAPH
+ {0x9EE7, 0x6A12}, //4773 #CJK UNIFIED IDEOGRAPH
+ {0x9EE8, 0x6AC1}, //4774 #CJK UNIFIED IDEOGRAPH
+ {0x9EE9, 0x6A23}, //4775 #CJK UNIFIED IDEOGRAPH
+ {0x9EEA, 0x6A13}, //4776 #CJK UNIFIED IDEOGRAPH
+ {0x9EEB, 0x6A44}, //4777 #CJK UNIFIED IDEOGRAPH
+ {0x9EEC, 0x6A0C}, //4778 #CJK UNIFIED IDEOGRAPH
+ {0x9EED, 0x6A72}, //4779 #CJK UNIFIED IDEOGRAPH
+ {0x9EEE, 0x6A36}, //4780 #CJK UNIFIED IDEOGRAPH
+ {0x9EEF, 0x6A78}, //4781 #CJK UNIFIED IDEOGRAPH
+ {0x9EF0, 0x6A47}, //4782 #CJK UNIFIED IDEOGRAPH
+ {0x9EF1, 0x6A62}, //4783 #CJK UNIFIED IDEOGRAPH
+ {0x9EF2, 0x6A59}, //4784 #CJK UNIFIED IDEOGRAPH
+ {0x9EF3, 0x6A66}, //4785 #CJK UNIFIED IDEOGRAPH
+ {0x9EF4, 0x6A48}, //4786 #CJK UNIFIED IDEOGRAPH
+ {0x9EF5, 0x6A38}, //4787 #CJK UNIFIED IDEOGRAPH
+ {0x9EF6, 0x6A22}, //4788 #CJK UNIFIED IDEOGRAPH
+ {0x9EF7, 0x6A90}, //4789 #CJK UNIFIED IDEOGRAPH
+ {0x9EF8, 0x6A8D}, //4790 #CJK UNIFIED IDEOGRAPH
+ {0x9EF9, 0x6AA0}, //4791 #CJK UNIFIED IDEOGRAPH
+ {0x9EFA, 0x6A84}, //4792 #CJK UNIFIED IDEOGRAPH
+ {0x9EFB, 0x6AA2}, //4793 #CJK UNIFIED IDEOGRAPH
+ {0x9EFC, 0x6AA3}, //4794 #CJK UNIFIED IDEOGRAPH
+ {0x9F40, 0x6A97}, //4795 #CJK UNIFIED IDEOGRAPH
+ {0x9F41, 0x8617}, //4796 #CJK UNIFIED IDEOGRAPH
+ {0x9F42, 0x6ABB}, //4797 #CJK UNIFIED IDEOGRAPH
+ {0x9F43, 0x6AC3}, //4798 #CJK UNIFIED IDEOGRAPH
+ {0x9F44, 0x6AC2}, //4799 #CJK UNIFIED IDEOGRAPH
+ {0x9F45, 0x6AB8}, //4800 #CJK UNIFIED IDEOGRAPH
+ {0x9F46, 0x6AB3}, //4801 #CJK UNIFIED IDEOGRAPH
+ {0x9F47, 0x6AAC}, //4802 #CJK UNIFIED IDEOGRAPH
+ {0x9F48, 0x6ADE}, //4803 #CJK UNIFIED IDEOGRAPH
+ {0x9F49, 0x6AD1}, //4804 #CJK UNIFIED IDEOGRAPH
+ {0x9F4A, 0x6ADF}, //4805 #CJK UNIFIED IDEOGRAPH
+ {0x9F4B, 0x6AAA}, //4806 #CJK UNIFIED IDEOGRAPH
+ {0x9F4C, 0x6ADA}, //4807 #CJK UNIFIED IDEOGRAPH
+ {0x9F4D, 0x6AEA}, //4808 #CJK UNIFIED IDEOGRAPH
+ {0x9F4E, 0x6AFB}, //4809 #CJK UNIFIED IDEOGRAPH
+ {0x9F4F, 0x6B05}, //4810 #CJK UNIFIED IDEOGRAPH
+ {0x9F50, 0x8616}, //4811 #CJK UNIFIED IDEOGRAPH
+ {0x9F51, 0x6AFA}, //4812 #CJK UNIFIED IDEOGRAPH
+ {0x9F52, 0x6B12}, //4813 #CJK UNIFIED IDEOGRAPH
+ {0x9F53, 0x6B16}, //4814 #CJK UNIFIED IDEOGRAPH
+ {0x9F54, 0x9B31}, //4815 #CJK UNIFIED IDEOGRAPH
+ {0x9F55, 0x6B1F}, //4816 #CJK UNIFIED IDEOGRAPH
+ {0x9F56, 0x6B38}, //4817 #CJK UNIFIED IDEOGRAPH
+ {0x9F57, 0x6B37}, //4818 #CJK UNIFIED IDEOGRAPH
+ {0x9F58, 0x76DC}, //4819 #CJK UNIFIED IDEOGRAPH
+ {0x9F59, 0x6B39}, //4820 #CJK UNIFIED IDEOGRAPH
+ {0x9F5A, 0x98EE}, //4821 #CJK UNIFIED IDEOGRAPH
+ {0x9F5B, 0x6B47}, //4822 #CJK UNIFIED IDEOGRAPH
+ {0x9F5C, 0x6B43}, //4823 #CJK UNIFIED IDEOGRAPH
+ {0x9F5D, 0x6B49}, //4824 #CJK UNIFIED IDEOGRAPH
+ {0x9F5E, 0x6B50}, //4825 #CJK UNIFIED IDEOGRAPH
+ {0x9F5F, 0x6B59}, //4826 #CJK UNIFIED IDEOGRAPH
+ {0x9F60, 0x6B54}, //4827 #CJK UNIFIED IDEOGRAPH
+ {0x9F61, 0x6B5B}, //4828 #CJK UNIFIED IDEOGRAPH
+ {0x9F62, 0x6B5F}, //4829 #CJK UNIFIED IDEOGRAPH
+ {0x9F63, 0x6B61}, //4830 #CJK UNIFIED IDEOGRAPH
+ {0x9F64, 0x6B78}, //4831 #CJK UNIFIED IDEOGRAPH
+ {0x9F65, 0x6B79}, //4832 #CJK UNIFIED IDEOGRAPH
+ {0x9F66, 0x6B7F}, //4833 #CJK UNIFIED IDEOGRAPH
+ {0x9F67, 0x6B80}, //4834 #CJK UNIFIED IDEOGRAPH
+ {0x9F68, 0x6B84}, //4835 #CJK UNIFIED IDEOGRAPH
+ {0x9F69, 0x6B83}, //4836 #CJK UNIFIED IDEOGRAPH
+ {0x9F6A, 0x6B8D}, //4837 #CJK UNIFIED IDEOGRAPH
+ {0x9F6B, 0x6B98}, //4838 #CJK UNIFIED IDEOGRAPH
+ {0x9F6C, 0x6B95}, //4839 #CJK UNIFIED IDEOGRAPH
+ {0x9F6D, 0x6B9E}, //4840 #CJK UNIFIED IDEOGRAPH
+ {0x9F6E, 0x6BA4}, //4841 #CJK UNIFIED IDEOGRAPH
+ {0x9F6F, 0x6BAA}, //4842 #CJK UNIFIED IDEOGRAPH
+ {0x9F70, 0x6BAB}, //4843 #CJK UNIFIED IDEOGRAPH
+ {0x9F71, 0x6BAF}, //4844 #CJK UNIFIED IDEOGRAPH
+ {0x9F72, 0x6BB2}, //4845 #CJK UNIFIED IDEOGRAPH
+ {0x9F73, 0x6BB1}, //4846 #CJK UNIFIED IDEOGRAPH
+ {0x9F74, 0x6BB3}, //4847 #CJK UNIFIED IDEOGRAPH
+ {0x9F75, 0x6BB7}, //4848 #CJK UNIFIED IDEOGRAPH
+ {0x9F76, 0x6BBC}, //4849 #CJK UNIFIED IDEOGRAPH
+ {0x9F77, 0x6BC6}, //4850 #CJK UNIFIED IDEOGRAPH
+ {0x9F78, 0x6BCB}, //4851 #CJK UNIFIED IDEOGRAPH
+ {0x9F79, 0x6BD3}, //4852 #CJK UNIFIED IDEOGRAPH
+ {0x9F7A, 0x6BDF}, //4853 #CJK UNIFIED IDEOGRAPH
+ {0x9F7B, 0x6BEC}, //4854 #CJK UNIFIED IDEOGRAPH
+ {0x9F7C, 0x6BEB}, //4855 #CJK UNIFIED IDEOGRAPH
+ {0x9F7D, 0x6BF3}, //4856 #CJK UNIFIED IDEOGRAPH
+ {0x9F7E, 0x6BEF}, //4857 #CJK UNIFIED IDEOGRAPH
+ {0x9F80, 0x9EBE}, //4858 #CJK UNIFIED IDEOGRAPH
+ {0x9F81, 0x6C08}, //4859 #CJK UNIFIED IDEOGRAPH
+ {0x9F82, 0x6C13}, //4860 #CJK UNIFIED IDEOGRAPH
+ {0x9F83, 0x6C14}, //4861 #CJK UNIFIED IDEOGRAPH
+ {0x9F84, 0x6C1B}, //4862 #CJK UNIFIED IDEOGRAPH
+ {0x9F85, 0x6C24}, //4863 #CJK UNIFIED IDEOGRAPH
+ {0x9F86, 0x6C23}, //4864 #CJK UNIFIED IDEOGRAPH
+ {0x9F87, 0x6C5E}, //4865 #CJK UNIFIED IDEOGRAPH
+ {0x9F88, 0x6C55}, //4866 #CJK UNIFIED IDEOGRAPH
+ {0x9F89, 0x6C62}, //4867 #CJK UNIFIED IDEOGRAPH
+ {0x9F8A, 0x6C6A}, //4868 #CJK UNIFIED IDEOGRAPH
+ {0x9F8B, 0x6C82}, //4869 #CJK UNIFIED IDEOGRAPH
+ {0x9F8C, 0x6C8D}, //4870 #CJK UNIFIED IDEOGRAPH
+ {0x9F8D, 0x6C9A}, //4871 #CJK UNIFIED IDEOGRAPH
+ {0x9F8E, 0x6C81}, //4872 #CJK UNIFIED IDEOGRAPH
+ {0x9F8F, 0x6C9B}, //4873 #CJK UNIFIED IDEOGRAPH
+ {0x9F90, 0x6C7E}, //4874 #CJK UNIFIED IDEOGRAPH
+ {0x9F91, 0x6C68}, //4875 #CJK UNIFIED IDEOGRAPH
+ {0x9F92, 0x6C73}, //4876 #CJK UNIFIED IDEOGRAPH
+ {0x9F93, 0x6C92}, //4877 #CJK UNIFIED IDEOGRAPH
+ {0x9F94, 0x6C90}, //4878 #CJK UNIFIED IDEOGRAPH
+ {0x9F95, 0x6CC4}, //4879 #CJK UNIFIED IDEOGRAPH
+ {0x9F96, 0x6CF1}, //4880 #CJK UNIFIED IDEOGRAPH
+ {0x9F97, 0x6CD3}, //4881 #CJK UNIFIED IDEOGRAPH
+ {0x9F98, 0x6CBD}, //4882 #CJK UNIFIED IDEOGRAPH
+ {0x9F99, 0x6CD7}, //4883 #CJK UNIFIED IDEOGRAPH
+ {0x9F9A, 0x6CC5}, //4884 #CJK UNIFIED IDEOGRAPH
+ {0x9F9B, 0x6CDD}, //4885 #CJK UNIFIED IDEOGRAPH
+ {0x9F9C, 0x6CAE}, //4886 #CJK UNIFIED IDEOGRAPH
+ {0x9F9D, 0x6CB1}, //4887 #CJK UNIFIED IDEOGRAPH
+ {0x9F9E, 0x6CBE}, //4888 #CJK UNIFIED IDEOGRAPH
+ {0x9F9F, 0x6CBA}, //4889 #CJK UNIFIED IDEOGRAPH
+ {0x9FA0, 0x6CDB}, //4890 #CJK UNIFIED IDEOGRAPH
+ {0x9FA1, 0x6CEF}, //4891 #CJK UNIFIED IDEOGRAPH
+ {0x9FA2, 0x6CD9}, //4892 #CJK UNIFIED IDEOGRAPH
+ {0x9FA3, 0x6CEA}, //4893 #CJK UNIFIED IDEOGRAPH
+ {0x9FA4, 0x6D1F}, //4894 #CJK UNIFIED IDEOGRAPH
+ {0x9FA5, 0x884D}, //4895 #CJK UNIFIED IDEOGRAPH
+ {0x9FA6, 0x6D36}, //4896 #CJK UNIFIED IDEOGRAPH
+ {0x9FA7, 0x6D2B}, //4897 #CJK UNIFIED IDEOGRAPH
+ {0x9FA8, 0x6D3D}, //4898 #CJK UNIFIED IDEOGRAPH
+ {0x9FA9, 0x6D38}, //4899 #CJK UNIFIED IDEOGRAPH
+ {0x9FAA, 0x6D19}, //4900 #CJK UNIFIED IDEOGRAPH
+ {0x9FAB, 0x6D35}, //4901 #CJK UNIFIED IDEOGRAPH
+ {0x9FAC, 0x6D33}, //4902 #CJK UNIFIED IDEOGRAPH
+ {0x9FAD, 0x6D12}, //4903 #CJK UNIFIED IDEOGRAPH
+ {0x9FAE, 0x6D0C}, //4904 #CJK UNIFIED IDEOGRAPH
+ {0x9FAF, 0x6D63}, //4905 #CJK UNIFIED IDEOGRAPH
+ {0x9FB0, 0x6D93}, //4906 #CJK UNIFIED IDEOGRAPH
+ {0x9FB1, 0x6D64}, //4907 #CJK UNIFIED IDEOGRAPH
+ {0x9FB2, 0x6D5A}, //4908 #CJK UNIFIED IDEOGRAPH
+ {0x9FB3, 0x6D79}, //4909 #CJK UNIFIED IDEOGRAPH
+ {0x9FB4, 0x6D59}, //4910 #CJK UNIFIED IDEOGRAPH
+ {0x9FB5, 0x6D8E}, //4911 #CJK UNIFIED IDEOGRAPH
+ {0x9FB6, 0x6D95}, //4912 #CJK UNIFIED IDEOGRAPH
+ {0x9FB7, 0x6FE4}, //4913 #CJK UNIFIED IDEOGRAPH
+ {0x9FB8, 0x6D85}, //4914 #CJK UNIFIED IDEOGRAPH
+ {0x9FB9, 0x6DF9}, //4915 #CJK UNIFIED IDEOGRAPH
+ {0x9FBA, 0x6E15}, //4916 #CJK UNIFIED IDEOGRAPH
+ {0x9FBB, 0x6E0A}, //4917 #CJK UNIFIED IDEOGRAPH
+ {0x9FBC, 0x6DB5}, //4918 #CJK UNIFIED IDEOGRAPH
+ {0x9FBD, 0x6DC7}, //4919 #CJK UNIFIED IDEOGRAPH
+ {0x9FBE, 0x6DE6}, //4920 #CJK UNIFIED IDEOGRAPH
+ {0x9FBF, 0x6DB8}, //4921 #CJK UNIFIED IDEOGRAPH
+ {0x9FC0, 0x6DC6}, //4922 #CJK UNIFIED IDEOGRAPH
+ {0x9FC1, 0x6DEC}, //4923 #CJK UNIFIED IDEOGRAPH
+ {0x9FC2, 0x6DDE}, //4924 #CJK UNIFIED IDEOGRAPH
+ {0x9FC3, 0x6DCC}, //4925 #CJK UNIFIED IDEOGRAPH
+ {0x9FC4, 0x6DE8}, //4926 #CJK UNIFIED IDEOGRAPH
+ {0x9FC5, 0x6DD2}, //4927 #CJK UNIFIED IDEOGRAPH
+ {0x9FC6, 0x6DC5}, //4928 #CJK UNIFIED IDEOGRAPH
+ {0x9FC7, 0x6DFA}, //4929 #CJK UNIFIED IDEOGRAPH
+ {0x9FC8, 0x6DD9}, //4930 #CJK UNIFIED IDEOGRAPH
+ {0x9FC9, 0x6DE4}, //4931 #CJK UNIFIED IDEOGRAPH
+ {0x9FCA, 0x6DD5}, //4932 #CJK UNIFIED IDEOGRAPH
+ {0x9FCB, 0x6DEA}, //4933 #CJK UNIFIED IDEOGRAPH
+ {0x9FCC, 0x6DEE}, //4934 #CJK UNIFIED IDEOGRAPH
+ {0x9FCD, 0x6E2D}, //4935 #CJK UNIFIED IDEOGRAPH
+ {0x9FCE, 0x6E6E}, //4936 #CJK UNIFIED IDEOGRAPH
+ {0x9FCF, 0x6E2E}, //4937 #CJK UNIFIED IDEOGRAPH
+ {0x9FD0, 0x6E19}, //4938 #CJK UNIFIED IDEOGRAPH
+ {0x9FD1, 0x6E72}, //4939 #CJK UNIFIED IDEOGRAPH
+ {0x9FD2, 0x6E5F}, //4940 #CJK UNIFIED IDEOGRAPH
+ {0x9FD3, 0x6E3E}, //4941 #CJK UNIFIED IDEOGRAPH
+ {0x9FD4, 0x6E23}, //4942 #CJK UNIFIED IDEOGRAPH
+ {0x9FD5, 0x6E6B}, //4943 #CJK UNIFIED IDEOGRAPH
+ {0x9FD6, 0x6E2B}, //4944 #CJK UNIFIED IDEOGRAPH
+ {0x9FD7, 0x6E76}, //4945 #CJK UNIFIED IDEOGRAPH
+ {0x9FD8, 0x6E4D}, //4946 #CJK UNIFIED IDEOGRAPH
+ {0x9FD9, 0x6E1F}, //4947 #CJK UNIFIED IDEOGRAPH
+ {0x9FDA, 0x6E43}, //4948 #CJK UNIFIED IDEOGRAPH
+ {0x9FDB, 0x6E3A}, //4949 #CJK UNIFIED IDEOGRAPH
+ {0x9FDC, 0x6E4E}, //4950 #CJK UNIFIED IDEOGRAPH
+ {0x9FDD, 0x6E24}, //4951 #CJK UNIFIED IDEOGRAPH
+ {0x9FDE, 0x6EFF}, //4952 #CJK UNIFIED IDEOGRAPH
+ {0x9FDF, 0x6E1D}, //4953 #CJK UNIFIED IDEOGRAPH
+ {0x9FE0, 0x6E38}, //4954 #CJK UNIFIED IDEOGRAPH
+ {0x9FE1, 0x6E82}, //4955 #CJK UNIFIED IDEOGRAPH
+ {0x9FE2, 0x6EAA}, //4956 #CJK UNIFIED IDEOGRAPH
+ {0x9FE3, 0x6E98}, //4957 #CJK UNIFIED IDEOGRAPH
+ {0x9FE4, 0x6EC9}, //4958 #CJK UNIFIED IDEOGRAPH
+ {0x9FE5, 0x6EB7}, //4959 #CJK UNIFIED IDEOGRAPH
+ {0x9FE6, 0x6ED3}, //4960 #CJK UNIFIED IDEOGRAPH
+ {0x9FE7, 0x6EBD}, //4961 #CJK UNIFIED IDEOGRAPH
+ {0x9FE8, 0x6EAF}, //4962 #CJK UNIFIED IDEOGRAPH
+ {0x9FE9, 0x6EC4}, //4963 #CJK UNIFIED IDEOGRAPH
+ {0x9FEA, 0x6EB2}, //4964 #CJK UNIFIED IDEOGRAPH
+ {0x9FEB, 0x6ED4}, //4965 #CJK UNIFIED IDEOGRAPH
+ {0x9FEC, 0x6ED5}, //4966 #CJK UNIFIED IDEOGRAPH
+ {0x9FED, 0x6E8F}, //4967 #CJK UNIFIED IDEOGRAPH
+ {0x9FEE, 0x6EA5}, //4968 #CJK UNIFIED IDEOGRAPH
+ {0x9FEF, 0x6EC2}, //4969 #CJK UNIFIED IDEOGRAPH
+ {0x9FF0, 0x6E9F}, //4970 #CJK UNIFIED IDEOGRAPH
+ {0x9FF1, 0x6F41}, //4971 #CJK UNIFIED IDEOGRAPH
+ {0x9FF2, 0x6F11}, //4972 #CJK UNIFIED IDEOGRAPH
+ {0x9FF3, 0x704C}, //4973 #CJK UNIFIED IDEOGRAPH
+ {0x9FF4, 0x6EEC}, //4974 #CJK UNIFIED IDEOGRAPH
+ {0x9FF5, 0x6EF8}, //4975 #CJK UNIFIED IDEOGRAPH
+ {0x9FF6, 0x6EFE}, //4976 #CJK UNIFIED IDEOGRAPH
+ {0x9FF7, 0x6F3F}, //4977 #CJK UNIFIED IDEOGRAPH
+ {0x9FF8, 0x6EF2}, //4978 #CJK UNIFIED IDEOGRAPH
+ {0x9FF9, 0x6F31}, //4979 #CJK UNIFIED IDEOGRAPH
+ {0x9FFA, 0x6EEF}, //4980 #CJK UNIFIED IDEOGRAPH
+ {0x9FFB, 0x6F32}, //4981 #CJK UNIFIED IDEOGRAPH
+ {0x9FFC, 0x6ECC}, //4982 #CJK UNIFIED IDEOGRAPH
+ {0xE040, 0x6F3E}, //4983 #CJK UNIFIED IDEOGRAPH
+ {0xE041, 0x6F13}, //4984 #CJK UNIFIED IDEOGRAPH
+ {0xE042, 0x6EF7}, //4985 #CJK UNIFIED IDEOGRAPH
+ {0xE043, 0x6F86}, //4986 #CJK UNIFIED IDEOGRAPH
+ {0xE044, 0x6F7A}, //4987 #CJK UNIFIED IDEOGRAPH
+ {0xE045, 0x6F78}, //4988 #CJK UNIFIED IDEOGRAPH
+ {0xE046, 0x6F81}, //4989 #CJK UNIFIED IDEOGRAPH
+ {0xE047, 0x6F80}, //4990 #CJK UNIFIED IDEOGRAPH
+ {0xE048, 0x6F6F}, //4991 #CJK UNIFIED IDEOGRAPH
+ {0xE049, 0x6F5B}, //4992 #CJK UNIFIED IDEOGRAPH
+ {0xE04A, 0x6FF3}, //4993 #CJK UNIFIED IDEOGRAPH
+ {0xE04B, 0x6F6D}, //4994 #CJK UNIFIED IDEOGRAPH
+ {0xE04C, 0x6F82}, //4995 #CJK UNIFIED IDEOGRAPH
+ {0xE04D, 0x6F7C}, //4996 #CJK UNIFIED IDEOGRAPH
+ {0xE04E, 0x6F58}, //4997 #CJK UNIFIED IDEOGRAPH
+ {0xE04F, 0x6F8E}, //4998 #CJK UNIFIED IDEOGRAPH
+ {0xE050, 0x6F91}, //4999 #CJK UNIFIED IDEOGRAPH
+ {0xE051, 0x6FC2}, //5000 #CJK UNIFIED IDEOGRAPH
+ {0xE052, 0x6F66}, //5001 #CJK UNIFIED IDEOGRAPH
+ {0xE053, 0x6FB3}, //5002 #CJK UNIFIED IDEOGRAPH
+ {0xE054, 0x6FA3}, //5003 #CJK UNIFIED IDEOGRAPH
+ {0xE055, 0x6FA1}, //5004 #CJK UNIFIED IDEOGRAPH
+ {0xE056, 0x6FA4}, //5005 #CJK UNIFIED IDEOGRAPH
+ {0xE057, 0x6FB9}, //5006 #CJK UNIFIED IDEOGRAPH
+ {0xE058, 0x6FC6}, //5007 #CJK UNIFIED IDEOGRAPH
+ {0xE059, 0x6FAA}, //5008 #CJK UNIFIED IDEOGRAPH
+ {0xE05A, 0x6FDF}, //5009 #CJK UNIFIED IDEOGRAPH
+ {0xE05B, 0x6FD5}, //5010 #CJK UNIFIED IDEOGRAPH
+ {0xE05C, 0x6FEC}, //5011 #CJK UNIFIED IDEOGRAPH
+ {0xE05D, 0x6FD4}, //5012 #CJK UNIFIED IDEOGRAPH
+ {0xE05E, 0x6FD8}, //5013 #CJK UNIFIED IDEOGRAPH
+ {0xE05F, 0x6FF1}, //5014 #CJK UNIFIED IDEOGRAPH
+ {0xE060, 0x6FEE}, //5015 #CJK UNIFIED IDEOGRAPH
+ {0xE061, 0x6FDB}, //5016 #CJK UNIFIED IDEOGRAPH
+ {0xE062, 0x7009}, //5017 #CJK UNIFIED IDEOGRAPH
+ {0xE063, 0x700B}, //5018 #CJK UNIFIED IDEOGRAPH
+ {0xE064, 0x6FFA}, //5019 #CJK UNIFIED IDEOGRAPH
+ {0xE065, 0x7011}, //5020 #CJK UNIFIED IDEOGRAPH
+ {0xE066, 0x7001}, //5021 #CJK UNIFIED IDEOGRAPH
+ {0xE067, 0x700F}, //5022 #CJK UNIFIED IDEOGRAPH
+ {0xE068, 0x6FFE}, //5023 #CJK UNIFIED IDEOGRAPH
+ {0xE069, 0x701B}, //5024 #CJK UNIFIED IDEOGRAPH
+ {0xE06A, 0x701A}, //5025 #CJK UNIFIED IDEOGRAPH
+ {0xE06B, 0x6F74}, //5026 #CJK UNIFIED IDEOGRAPH
+ {0xE06C, 0x701D}, //5027 #CJK UNIFIED IDEOGRAPH
+ {0xE06D, 0x7018}, //5028 #CJK UNIFIED IDEOGRAPH
+ {0xE06E, 0x701F}, //5029 #CJK UNIFIED IDEOGRAPH
+ {0xE06F, 0x7030}, //5030 #CJK UNIFIED IDEOGRAPH
+ {0xE070, 0x703E}, //5031 #CJK UNIFIED IDEOGRAPH
+ {0xE071, 0x7032}, //5032 #CJK UNIFIED IDEOGRAPH
+ {0xE072, 0x7051}, //5033 #CJK UNIFIED IDEOGRAPH
+ {0xE073, 0x7063}, //5034 #CJK UNIFIED IDEOGRAPH
+ {0xE074, 0x7099}, //5035 #CJK UNIFIED IDEOGRAPH
+ {0xE075, 0x7092}, //5036 #CJK UNIFIED IDEOGRAPH
+ {0xE076, 0x70AF}, //5037 #CJK UNIFIED IDEOGRAPH
+ {0xE077, 0x70F1}, //5038 #CJK UNIFIED IDEOGRAPH
+ {0xE078, 0x70AC}, //5039 #CJK UNIFIED IDEOGRAPH
+ {0xE079, 0x70B8}, //5040 #CJK UNIFIED IDEOGRAPH
+ {0xE07A, 0x70B3}, //5041 #CJK UNIFIED IDEOGRAPH
+ {0xE07B, 0x70AE}, //5042 #CJK UNIFIED IDEOGRAPH
+ {0xE07C, 0x70DF}, //5043 #CJK UNIFIED IDEOGRAPH
+ {0xE07D, 0x70CB}, //5044 #CJK UNIFIED IDEOGRAPH
+ {0xE07E, 0x70DD}, //5045 #CJK UNIFIED IDEOGRAPH
+ {0xE080, 0x70D9}, //5046 #CJK UNIFIED IDEOGRAPH
+ {0xE081, 0x7109}, //5047 #CJK UNIFIED IDEOGRAPH
+ {0xE082, 0x70FD}, //5048 #CJK UNIFIED IDEOGRAPH
+ {0xE083, 0x711C}, //5049 #CJK UNIFIED IDEOGRAPH
+ {0xE084, 0x7119}, //5050 #CJK UNIFIED IDEOGRAPH
+ {0xE085, 0x7165}, //5051 #CJK UNIFIED IDEOGRAPH
+ {0xE086, 0x7155}, //5052 #CJK UNIFIED IDEOGRAPH
+ {0xE087, 0x7188}, //5053 #CJK UNIFIED IDEOGRAPH
+ {0xE088, 0x7166}, //5054 #CJK UNIFIED IDEOGRAPH
+ {0xE089, 0x7162}, //5055 #CJK UNIFIED IDEOGRAPH
+ {0xE08A, 0x714C}, //5056 #CJK UNIFIED IDEOGRAPH
+ {0xE08B, 0x7156}, //5057 #CJK UNIFIED IDEOGRAPH
+ {0xE08C, 0x716C}, //5058 #CJK UNIFIED IDEOGRAPH
+ {0xE08D, 0x718F}, //5059 #CJK UNIFIED IDEOGRAPH
+ {0xE08E, 0x71FB}, //5060 #CJK UNIFIED IDEOGRAPH
+ {0xE08F, 0x7184}, //5061 #CJK UNIFIED IDEOGRAPH
+ {0xE090, 0x7195}, //5062 #CJK UNIFIED IDEOGRAPH
+ {0xE091, 0x71A8}, //5063 #CJK UNIFIED IDEOGRAPH
+ {0xE092, 0x71AC}, //5064 #CJK UNIFIED IDEOGRAPH
+ {0xE093, 0x71D7}, //5065 #CJK UNIFIED IDEOGRAPH
+ {0xE094, 0x71B9}, //5066 #CJK UNIFIED IDEOGRAPH
+ {0xE095, 0x71BE}, //5067 #CJK UNIFIED IDEOGRAPH
+ {0xE096, 0x71D2}, //5068 #CJK UNIFIED IDEOGRAPH
+ {0xE097, 0x71C9}, //5069 #CJK UNIFIED IDEOGRAPH
+ {0xE098, 0x71D4}, //5070 #CJK UNIFIED IDEOGRAPH
+ {0xE099, 0x71CE}, //5071 #CJK UNIFIED IDEOGRAPH
+ {0xE09A, 0x71E0}, //5072 #CJK UNIFIED IDEOGRAPH
+ {0xE09B, 0x71EC}, //5073 #CJK UNIFIED IDEOGRAPH
+ {0xE09C, 0x71E7}, //5074 #CJK UNIFIED IDEOGRAPH
+ {0xE09D, 0x71F5}, //5075 #CJK UNIFIED IDEOGRAPH
+ {0xE09E, 0x71FC}, //5076 #CJK UNIFIED IDEOGRAPH
+ {0xE09F, 0x71F9}, //5077 #CJK UNIFIED IDEOGRAPH
+ {0xE0A0, 0x71FF}, //5078 #CJK UNIFIED IDEOGRAPH
+ {0xE0A1, 0x720D}, //5079 #CJK UNIFIED IDEOGRAPH
+ {0xE0A2, 0x7210}, //5080 #CJK UNIFIED IDEOGRAPH
+ {0xE0A3, 0x721B}, //5081 #CJK UNIFIED IDEOGRAPH
+ {0xE0A4, 0x7228}, //5082 #CJK UNIFIED IDEOGRAPH
+ {0xE0A5, 0x722D}, //5083 #CJK UNIFIED IDEOGRAPH
+ {0xE0A6, 0x722C}, //5084 #CJK UNIFIED IDEOGRAPH
+ {0xE0A7, 0x7230}, //5085 #CJK UNIFIED IDEOGRAPH
+ {0xE0A8, 0x7232}, //5086 #CJK UNIFIED IDEOGRAPH
+ {0xE0A9, 0x723B}, //5087 #CJK UNIFIED IDEOGRAPH
+ {0xE0AA, 0x723C}, //5088 #CJK UNIFIED IDEOGRAPH
+ {0xE0AB, 0x723F}, //5089 #CJK UNIFIED IDEOGRAPH
+ {0xE0AC, 0x7240}, //5090 #CJK UNIFIED IDEOGRAPH
+ {0xE0AD, 0x7246}, //5091 #CJK UNIFIED IDEOGRAPH
+ {0xE0AE, 0x724B}, //5092 #CJK UNIFIED IDEOGRAPH
+ {0xE0AF, 0x7258}, //5093 #CJK UNIFIED IDEOGRAPH
+ {0xE0B0, 0x7274}, //5094 #CJK UNIFIED IDEOGRAPH
+ {0xE0B1, 0x727E}, //5095 #CJK UNIFIED IDEOGRAPH
+ {0xE0B2, 0x7282}, //5096 #CJK UNIFIED IDEOGRAPH
+ {0xE0B3, 0x7281}, //5097 #CJK UNIFIED IDEOGRAPH
+ {0xE0B4, 0x7287}, //5098 #CJK UNIFIED IDEOGRAPH
+ {0xE0B5, 0x7292}, //5099 #CJK UNIFIED IDEOGRAPH
+ {0xE0B6, 0x7296}, //5100 #CJK UNIFIED IDEOGRAPH
+ {0xE0B7, 0x72A2}, //5101 #CJK UNIFIED IDEOGRAPH
+ {0xE0B8, 0x72A7}, //5102 #CJK UNIFIED IDEOGRAPH
+ {0xE0B9, 0x72B9}, //5103 #CJK UNIFIED IDEOGRAPH
+ {0xE0BA, 0x72B2}, //5104 #CJK UNIFIED IDEOGRAPH
+ {0xE0BB, 0x72C3}, //5105 #CJK UNIFIED IDEOGRAPH
+ {0xE0BC, 0x72C6}, //5106 #CJK UNIFIED IDEOGRAPH
+ {0xE0BD, 0x72C4}, //5107 #CJK UNIFIED IDEOGRAPH
+ {0xE0BE, 0x72CE}, //5108 #CJK UNIFIED IDEOGRAPH
+ {0xE0BF, 0x72D2}, //5109 #CJK UNIFIED IDEOGRAPH
+ {0xE0C0, 0x72E2}, //5110 #CJK UNIFIED IDEOGRAPH
+ {0xE0C1, 0x72E0}, //5111 #CJK UNIFIED IDEOGRAPH
+ {0xE0C2, 0x72E1}, //5112 #CJK UNIFIED IDEOGRAPH
+ {0xE0C3, 0x72F9}, //5113 #CJK UNIFIED IDEOGRAPH
+ {0xE0C4, 0x72F7}, //5114 #CJK UNIFIED IDEOGRAPH
+ {0xE0C5, 0x500F}, //5115 #CJK UNIFIED IDEOGRAPH
+ {0xE0C6, 0x7317}, //5116 #CJK UNIFIED IDEOGRAPH
+ {0xE0C7, 0x730A}, //5117 #CJK UNIFIED IDEOGRAPH
+ {0xE0C8, 0x731C}, //5118 #CJK UNIFIED IDEOGRAPH
+ {0xE0C9, 0x7316}, //5119 #CJK UNIFIED IDEOGRAPH
+ {0xE0CA, 0x731D}, //5120 #CJK UNIFIED IDEOGRAPH
+ {0xE0CB, 0x7334}, //5121 #CJK UNIFIED IDEOGRAPH
+ {0xE0CC, 0x732F}, //5122 #CJK UNIFIED IDEOGRAPH
+ {0xE0CD, 0x7329}, //5123 #CJK UNIFIED IDEOGRAPH
+ {0xE0CE, 0x7325}, //5124 #CJK UNIFIED IDEOGRAPH
+ {0xE0CF, 0x733E}, //5125 #CJK UNIFIED IDEOGRAPH
+ {0xE0D0, 0x734E}, //5126 #CJK UNIFIED IDEOGRAPH
+ {0xE0D1, 0x734F}, //5127 #CJK UNIFIED IDEOGRAPH
+ {0xE0D2, 0x9ED8}, //5128 #CJK UNIFIED IDEOGRAPH
+ {0xE0D3, 0x7357}, //5129 #CJK UNIFIED IDEOGRAPH
+ {0xE0D4, 0x736A}, //5130 #CJK UNIFIED IDEOGRAPH
+ {0xE0D5, 0x7368}, //5131 #CJK UNIFIED IDEOGRAPH
+ {0xE0D6, 0x7370}, //5132 #CJK UNIFIED IDEOGRAPH
+ {0xE0D7, 0x7378}, //5133 #CJK UNIFIED IDEOGRAPH
+ {0xE0D8, 0x7375}, //5134 #CJK UNIFIED IDEOGRAPH
+ {0xE0D9, 0x737B}, //5135 #CJK UNIFIED IDEOGRAPH
+ {0xE0DA, 0x737A}, //5136 #CJK UNIFIED IDEOGRAPH
+ {0xE0DB, 0x73C8}, //5137 #CJK UNIFIED IDEOGRAPH
+ {0xE0DC, 0x73B3}, //5138 #CJK UNIFIED IDEOGRAPH
+ {0xE0DD, 0x73CE}, //5139 #CJK UNIFIED IDEOGRAPH
+ {0xE0DE, 0x73BB}, //5140 #CJK UNIFIED IDEOGRAPH
+ {0xE0DF, 0x73C0}, //5141 #CJK UNIFIED IDEOGRAPH
+ {0xE0E0, 0x73E5}, //5142 #CJK UNIFIED IDEOGRAPH
+ {0xE0E1, 0x73EE}, //5143 #CJK UNIFIED IDEOGRAPH
+ {0xE0E2, 0x73DE}, //5144 #CJK UNIFIED IDEOGRAPH
+ {0xE0E3, 0x74A2}, //5145 #CJK UNIFIED IDEOGRAPH
+ {0xE0E4, 0x7405}, //5146 #CJK UNIFIED IDEOGRAPH
+ {0xE0E5, 0x746F}, //5147 #CJK UNIFIED IDEOGRAPH
+ {0xE0E6, 0x7425}, //5148 #CJK UNIFIED IDEOGRAPH
+ {0xE0E7, 0x73F8}, //5149 #CJK UNIFIED IDEOGRAPH
+ {0xE0E8, 0x7432}, //5150 #CJK UNIFIED IDEOGRAPH
+ {0xE0E9, 0x743A}, //5151 #CJK UNIFIED IDEOGRAPH
+ {0xE0EA, 0x7455}, //5152 #CJK UNIFIED IDEOGRAPH
+ {0xE0EB, 0x743F}, //5153 #CJK UNIFIED IDEOGRAPH
+ {0xE0EC, 0x745F}, //5154 #CJK UNIFIED IDEOGRAPH
+ {0xE0ED, 0x7459}, //5155 #CJK UNIFIED IDEOGRAPH
+ {0xE0EE, 0x7441}, //5156 #CJK UNIFIED IDEOGRAPH
+ {0xE0EF, 0x745C}, //5157 #CJK UNIFIED IDEOGRAPH
+ {0xE0F0, 0x7469}, //5158 #CJK UNIFIED IDEOGRAPH
+ {0xE0F1, 0x7470}, //5159 #CJK UNIFIED IDEOGRAPH
+ {0xE0F2, 0x7463}, //5160 #CJK UNIFIED IDEOGRAPH
+ {0xE0F3, 0x746A}, //5161 #CJK UNIFIED IDEOGRAPH
+ {0xE0F4, 0x7476}, //5162 #CJK UNIFIED IDEOGRAPH
+ {0xE0F5, 0x747E}, //5163 #CJK UNIFIED IDEOGRAPH
+ {0xE0F6, 0x748B}, //5164 #CJK UNIFIED IDEOGRAPH
+ {0xE0F7, 0x749E}, //5165 #CJK UNIFIED IDEOGRAPH
+ {0xE0F8, 0x74A7}, //5166 #CJK UNIFIED IDEOGRAPH
+ {0xE0F9, 0x74CA}, //5167 #CJK UNIFIED IDEOGRAPH
+ {0xE0FA, 0x74CF}, //5168 #CJK UNIFIED IDEOGRAPH
+ {0xE0FB, 0x74D4}, //5169 #CJK UNIFIED IDEOGRAPH
+ {0xE0FC, 0x73F1}, //5170 #CJK UNIFIED IDEOGRAPH
+ {0xE140, 0x74E0}, //5171 #CJK UNIFIED IDEOGRAPH
+ {0xE141, 0x74E3}, //5172 #CJK UNIFIED IDEOGRAPH
+ {0xE142, 0x74E7}, //5173 #CJK UNIFIED IDEOGRAPH
+ {0xE143, 0x74E9}, //5174 #CJK UNIFIED IDEOGRAPH
+ {0xE144, 0x74EE}, //5175 #CJK UNIFIED IDEOGRAPH
+ {0xE145, 0x74F2}, //5176 #CJK UNIFIED IDEOGRAPH
+ {0xE146, 0x74F0}, //5177 #CJK UNIFIED IDEOGRAPH
+ {0xE147, 0x74F1}, //5178 #CJK UNIFIED IDEOGRAPH
+ {0xE148, 0x74F8}, //5179 #CJK UNIFIED IDEOGRAPH
+ {0xE149, 0x74F7}, //5180 #CJK UNIFIED IDEOGRAPH
+ {0xE14A, 0x7504}, //5181 #CJK UNIFIED IDEOGRAPH
+ {0xE14B, 0x7503}, //5182 #CJK UNIFIED IDEOGRAPH
+ {0xE14C, 0x7505}, //5183 #CJK UNIFIED IDEOGRAPH
+ {0xE14D, 0x750C}, //5184 #CJK UNIFIED IDEOGRAPH
+ {0xE14E, 0x750E}, //5185 #CJK UNIFIED IDEOGRAPH
+ {0xE14F, 0x750D}, //5186 #CJK UNIFIED IDEOGRAPH
+ {0xE150, 0x7515}, //5187 #CJK UNIFIED IDEOGRAPH
+ {0xE151, 0x7513}, //5188 #CJK UNIFIED IDEOGRAPH
+ {0xE152, 0x751E}, //5189 #CJK UNIFIED IDEOGRAPH
+ {0xE153, 0x7526}, //5190 #CJK UNIFIED IDEOGRAPH
+ {0xE154, 0x752C}, //5191 #CJK UNIFIED IDEOGRAPH
+ {0xE155, 0x753C}, //5192 #CJK UNIFIED IDEOGRAPH
+ {0xE156, 0x7544}, //5193 #CJK UNIFIED IDEOGRAPH
+ {0xE157, 0x754D}, //5194 #CJK UNIFIED IDEOGRAPH
+ {0xE158, 0x754A}, //5195 #CJK UNIFIED IDEOGRAPH
+ {0xE159, 0x7549}, //5196 #CJK UNIFIED IDEOGRAPH
+ {0xE15A, 0x755B}, //5197 #CJK UNIFIED IDEOGRAPH
+ {0xE15B, 0x7546}, //5198 #CJK UNIFIED IDEOGRAPH
+ {0xE15C, 0x755A}, //5199 #CJK UNIFIED IDEOGRAPH
+ {0xE15D, 0x7569}, //5200 #CJK UNIFIED IDEOGRAPH
+ {0xE15E, 0x7564}, //5201 #CJK UNIFIED IDEOGRAPH
+ {0xE15F, 0x7567}, //5202 #CJK UNIFIED IDEOGRAPH
+ {0xE160, 0x756B}, //5203 #CJK UNIFIED IDEOGRAPH
+ {0xE161, 0x756D}, //5204 #CJK UNIFIED IDEOGRAPH
+ {0xE162, 0x7578}, //5205 #CJK UNIFIED IDEOGRAPH
+ {0xE163, 0x7576}, //5206 #CJK UNIFIED IDEOGRAPH
+ {0xE164, 0x7586}, //5207 #CJK UNIFIED IDEOGRAPH
+ {0xE165, 0x7587}, //5208 #CJK UNIFIED IDEOGRAPH
+ {0xE166, 0x7574}, //5209 #CJK UNIFIED IDEOGRAPH
+ {0xE167, 0x758A}, //5210 #CJK UNIFIED IDEOGRAPH
+ {0xE168, 0x7589}, //5211 #CJK UNIFIED IDEOGRAPH
+ {0xE169, 0x7582}, //5212 #CJK UNIFIED IDEOGRAPH
+ {0xE16A, 0x7594}, //5213 #CJK UNIFIED IDEOGRAPH
+ {0xE16B, 0x759A}, //5214 #CJK UNIFIED IDEOGRAPH
+ {0xE16C, 0x759D}, //5215 #CJK UNIFIED IDEOGRAPH
+ {0xE16D, 0x75A5}, //5216 #CJK UNIFIED IDEOGRAPH
+ {0xE16E, 0x75A3}, //5217 #CJK UNIFIED IDEOGRAPH
+ {0xE16F, 0x75C2}, //5218 #CJK UNIFIED IDEOGRAPH
+ {0xE170, 0x75B3}, //5219 #CJK UNIFIED IDEOGRAPH
+ {0xE171, 0x75C3}, //5220 #CJK UNIFIED IDEOGRAPH
+ {0xE172, 0x75B5}, //5221 #CJK UNIFIED IDEOGRAPH
+ {0xE173, 0x75BD}, //5222 #CJK UNIFIED IDEOGRAPH
+ {0xE174, 0x75B8}, //5223 #CJK UNIFIED IDEOGRAPH
+ {0xE175, 0x75BC}, //5224 #CJK UNIFIED IDEOGRAPH
+ {0xE176, 0x75B1}, //5225 #CJK UNIFIED IDEOGRAPH
+ {0xE177, 0x75CD}, //5226 #CJK UNIFIED IDEOGRAPH
+ {0xE178, 0x75CA}, //5227 #CJK UNIFIED IDEOGRAPH
+ {0xE179, 0x75D2}, //5228 #CJK UNIFIED IDEOGRAPH
+ {0xE17A, 0x75D9}, //5229 #CJK UNIFIED IDEOGRAPH
+ {0xE17B, 0x75E3}, //5230 #CJK UNIFIED IDEOGRAPH
+ {0xE17C, 0x75DE}, //5231 #CJK UNIFIED IDEOGRAPH
+ {0xE17D, 0x75FE}, //5232 #CJK UNIFIED IDEOGRAPH
+ {0xE17E, 0x75FF}, //5233 #CJK UNIFIED IDEOGRAPH
+ {0xE180, 0x75FC}, //5234 #CJK UNIFIED IDEOGRAPH
+ {0xE181, 0x7601}, //5235 #CJK UNIFIED IDEOGRAPH
+ {0xE182, 0x75F0}, //5236 #CJK UNIFIED IDEOGRAPH
+ {0xE183, 0x75FA}, //5237 #CJK UNIFIED IDEOGRAPH
+ {0xE184, 0x75F2}, //5238 #CJK UNIFIED IDEOGRAPH
+ {0xE185, 0x75F3}, //5239 #CJK UNIFIED IDEOGRAPH
+ {0xE186, 0x760B}, //5240 #CJK UNIFIED IDEOGRAPH
+ {0xE187, 0x760D}, //5241 #CJK UNIFIED IDEOGRAPH
+ {0xE188, 0x7609}, //5242 #CJK UNIFIED IDEOGRAPH
+ {0xE189, 0x761F}, //5243 #CJK UNIFIED IDEOGRAPH
+ {0xE18A, 0x7627}, //5244 #CJK UNIFIED IDEOGRAPH
+ {0xE18B, 0x7620}, //5245 #CJK UNIFIED IDEOGRAPH
+ {0xE18C, 0x7621}, //5246 #CJK UNIFIED IDEOGRAPH
+ {0xE18D, 0x7622}, //5247 #CJK UNIFIED IDEOGRAPH
+ {0xE18E, 0x7624}, //5248 #CJK UNIFIED IDEOGRAPH
+ {0xE18F, 0x7634}, //5249 #CJK UNIFIED IDEOGRAPH
+ {0xE190, 0x7630}, //5250 #CJK UNIFIED IDEOGRAPH
+ {0xE191, 0x763B}, //5251 #CJK UNIFIED IDEOGRAPH
+ {0xE192, 0x7647}, //5252 #CJK UNIFIED IDEOGRAPH
+ {0xE193, 0x7648}, //5253 #CJK UNIFIED IDEOGRAPH
+ {0xE194, 0x7646}, //5254 #CJK UNIFIED IDEOGRAPH
+ {0xE195, 0x765C}, //5255 #CJK UNIFIED IDEOGRAPH
+ {0xE196, 0x7658}, //5256 #CJK UNIFIED IDEOGRAPH
+ {0xE197, 0x7661}, //5257 #CJK UNIFIED IDEOGRAPH
+ {0xE198, 0x7662}, //5258 #CJK UNIFIED IDEOGRAPH
+ {0xE199, 0x7668}, //5259 #CJK UNIFIED IDEOGRAPH
+ {0xE19A, 0x7669}, //5260 #CJK UNIFIED IDEOGRAPH
+ {0xE19B, 0x766A}, //5261 #CJK UNIFIED IDEOGRAPH
+ {0xE19C, 0x7667}, //5262 #CJK UNIFIED IDEOGRAPH
+ {0xE19D, 0x766C}, //5263 #CJK UNIFIED IDEOGRAPH
+ {0xE19E, 0x7670}, //5264 #CJK UNIFIED IDEOGRAPH
+ {0xE19F, 0x7672}, //5265 #CJK UNIFIED IDEOGRAPH
+ {0xE1A0, 0x7676}, //5266 #CJK UNIFIED IDEOGRAPH
+ {0xE1A1, 0x7678}, //5267 #CJK UNIFIED IDEOGRAPH
+ {0xE1A2, 0x767C}, //5268 #CJK UNIFIED IDEOGRAPH
+ {0xE1A3, 0x7680}, //5269 #CJK UNIFIED IDEOGRAPH
+ {0xE1A4, 0x7683}, //5270 #CJK UNIFIED IDEOGRAPH
+ {0xE1A5, 0x7688}, //5271 #CJK UNIFIED IDEOGRAPH
+ {0xE1A6, 0x768B}, //5272 #CJK UNIFIED IDEOGRAPH
+ {0xE1A7, 0x768E}, //5273 #CJK UNIFIED IDEOGRAPH
+ {0xE1A8, 0x7696}, //5274 #CJK UNIFIED IDEOGRAPH
+ {0xE1A9, 0x7693}, //5275 #CJK UNIFIED IDEOGRAPH
+ {0xE1AA, 0x7699}, //5276 #CJK UNIFIED IDEOGRAPH
+ {0xE1AB, 0x769A}, //5277 #CJK UNIFIED IDEOGRAPH
+ {0xE1AC, 0x76B0}, //5278 #CJK UNIFIED IDEOGRAPH
+ {0xE1AD, 0x76B4}, //5279 #CJK UNIFIED IDEOGRAPH
+ {0xE1AE, 0x76B8}, //5280 #CJK UNIFIED IDEOGRAPH
+ {0xE1AF, 0x76B9}, //5281 #CJK UNIFIED IDEOGRAPH
+ {0xE1B0, 0x76BA}, //5282 #CJK UNIFIED IDEOGRAPH
+ {0xE1B1, 0x76C2}, //5283 #CJK UNIFIED IDEOGRAPH
+ {0xE1B2, 0x76CD}, //5284 #CJK UNIFIED IDEOGRAPH
+ {0xE1B3, 0x76D6}, //5285 #CJK UNIFIED IDEOGRAPH
+ {0xE1B4, 0x76D2}, //5286 #CJK UNIFIED IDEOGRAPH
+ {0xE1B5, 0x76DE}, //5287 #CJK UNIFIED IDEOGRAPH
+ {0xE1B6, 0x76E1}, //5288 #CJK UNIFIED IDEOGRAPH
+ {0xE1B7, 0x76E5}, //5289 #CJK UNIFIED IDEOGRAPH
+ {0xE1B8, 0x76E7}, //5290 #CJK UNIFIED IDEOGRAPH
+ {0xE1B9, 0x76EA}, //5291 #CJK UNIFIED IDEOGRAPH
+ {0xE1BA, 0x862F}, //5292 #CJK UNIFIED IDEOGRAPH
+ {0xE1BB, 0x76FB}, //5293 #CJK UNIFIED IDEOGRAPH
+ {0xE1BC, 0x7708}, //5294 #CJK UNIFIED IDEOGRAPH
+ {0xE1BD, 0x7707}, //5295 #CJK UNIFIED IDEOGRAPH
+ {0xE1BE, 0x7704}, //5296 #CJK UNIFIED IDEOGRAPH
+ {0xE1BF, 0x7729}, //5297 #CJK UNIFIED IDEOGRAPH
+ {0xE1C0, 0x7724}, //5298 #CJK UNIFIED IDEOGRAPH
+ {0xE1C1, 0x771E}, //5299 #CJK UNIFIED IDEOGRAPH
+ {0xE1C2, 0x7725}, //5300 #CJK UNIFIED IDEOGRAPH
+ {0xE1C3, 0x7726}, //5301 #CJK UNIFIED IDEOGRAPH
+ {0xE1C4, 0x771B}, //5302 #CJK UNIFIED IDEOGRAPH
+ {0xE1C5, 0x7737}, //5303 #CJK UNIFIED IDEOGRAPH
+ {0xE1C6, 0x7738}, //5304 #CJK UNIFIED IDEOGRAPH
+ {0xE1C7, 0x7747}, //5305 #CJK UNIFIED IDEOGRAPH
+ {0xE1C8, 0x775A}, //5306 #CJK UNIFIED IDEOGRAPH
+ {0xE1C9, 0x7768}, //5307 #CJK UNIFIED IDEOGRAPH
+ {0xE1CA, 0x776B}, //5308 #CJK UNIFIED IDEOGRAPH
+ {0xE1CB, 0x775B}, //5309 #CJK UNIFIED IDEOGRAPH
+ {0xE1CC, 0x7765}, //5310 #CJK UNIFIED IDEOGRAPH
+ {0xE1CD, 0x777F}, //5311 #CJK UNIFIED IDEOGRAPH
+ {0xE1CE, 0x777E}, //5312 #CJK UNIFIED IDEOGRAPH
+ {0xE1CF, 0x7779}, //5313 #CJK UNIFIED IDEOGRAPH
+ {0xE1D0, 0x778E}, //5314 #CJK UNIFIED IDEOGRAPH
+ {0xE1D1, 0x778B}, //5315 #CJK UNIFIED IDEOGRAPH
+ {0xE1D2, 0x7791}, //5316 #CJK UNIFIED IDEOGRAPH
+ {0xE1D3, 0x77A0}, //5317 #CJK UNIFIED IDEOGRAPH
+ {0xE1D4, 0x779E}, //5318 #CJK UNIFIED IDEOGRAPH
+ {0xE1D5, 0x77B0}, //5319 #CJK UNIFIED IDEOGRAPH
+ {0xE1D6, 0x77B6}, //5320 #CJK UNIFIED IDEOGRAPH
+ {0xE1D7, 0x77B9}, //5321 #CJK UNIFIED IDEOGRAPH
+ {0xE1D8, 0x77BF}, //5322 #CJK UNIFIED IDEOGRAPH
+ {0xE1D9, 0x77BC}, //5323 #CJK UNIFIED IDEOGRAPH
+ {0xE1DA, 0x77BD}, //5324 #CJK UNIFIED IDEOGRAPH
+ {0xE1DB, 0x77BB}, //5325 #CJK UNIFIED IDEOGRAPH
+ {0xE1DC, 0x77C7}, //5326 #CJK UNIFIED IDEOGRAPH
+ {0xE1DD, 0x77CD}, //5327 #CJK UNIFIED IDEOGRAPH
+ {0xE1DE, 0x77D7}, //5328 #CJK UNIFIED IDEOGRAPH
+ {0xE1DF, 0x77DA}, //5329 #CJK UNIFIED IDEOGRAPH
+ {0xE1E0, 0x77DC}, //5330 #CJK UNIFIED IDEOGRAPH
+ {0xE1E1, 0x77E3}, //5331 #CJK UNIFIED IDEOGRAPH
+ {0xE1E2, 0x77EE}, //5332 #CJK UNIFIED IDEOGRAPH
+ {0xE1E3, 0x77FC}, //5333 #CJK UNIFIED IDEOGRAPH
+ {0xE1E4, 0x780C}, //5334 #CJK UNIFIED IDEOGRAPH
+ {0xE1E5, 0x7812}, //5335 #CJK UNIFIED IDEOGRAPH
+ {0xE1E6, 0x7926}, //5336 #CJK UNIFIED IDEOGRAPH
+ {0xE1E7, 0x7820}, //5337 #CJK UNIFIED IDEOGRAPH
+ {0xE1E8, 0x792A}, //5338 #CJK UNIFIED IDEOGRAPH
+ {0xE1E9, 0x7845}, //5339 #CJK UNIFIED IDEOGRAPH
+ {0xE1EA, 0x788E}, //5340 #CJK UNIFIED IDEOGRAPH
+ {0xE1EB, 0x7874}, //5341 #CJK UNIFIED IDEOGRAPH
+ {0xE1EC, 0x7886}, //5342 #CJK UNIFIED IDEOGRAPH
+ {0xE1ED, 0x787C}, //5343 #CJK UNIFIED IDEOGRAPH
+ {0xE1EE, 0x789A}, //5344 #CJK UNIFIED IDEOGRAPH
+ {0xE1EF, 0x788C}, //5345 #CJK UNIFIED IDEOGRAPH
+ {0xE1F0, 0x78A3}, //5346 #CJK UNIFIED IDEOGRAPH
+ {0xE1F1, 0x78B5}, //5347 #CJK UNIFIED IDEOGRAPH
+ {0xE1F2, 0x78AA}, //5348 #CJK UNIFIED IDEOGRAPH
+ {0xE1F3, 0x78AF}, //5349 #CJK UNIFIED IDEOGRAPH
+ {0xE1F4, 0x78D1}, //5350 #CJK UNIFIED IDEOGRAPH
+ {0xE1F5, 0x78C6}, //5351 #CJK UNIFIED IDEOGRAPH
+ {0xE1F6, 0x78CB}, //5352 #CJK UNIFIED IDEOGRAPH
+ {0xE1F7, 0x78D4}, //5353 #CJK UNIFIED IDEOGRAPH
+ {0xE1F8, 0x78BE}, //5354 #CJK UNIFIED IDEOGRAPH
+ {0xE1F9, 0x78BC}, //5355 #CJK UNIFIED IDEOGRAPH
+ {0xE1FA, 0x78C5}, //5356 #CJK UNIFIED IDEOGRAPH
+ {0xE1FB, 0x78CA}, //5357 #CJK UNIFIED IDEOGRAPH
+ {0xE1FC, 0x78EC}, //5358 #CJK UNIFIED IDEOGRAPH
+ {0xE240, 0x78E7}, //5359 #CJK UNIFIED IDEOGRAPH
+ {0xE241, 0x78DA}, //5360 #CJK UNIFIED IDEOGRAPH
+ {0xE242, 0x78FD}, //5361 #CJK UNIFIED IDEOGRAPH
+ {0xE243, 0x78F4}, //5362 #CJK UNIFIED IDEOGRAPH
+ {0xE244, 0x7907}, //5363 #CJK UNIFIED IDEOGRAPH
+ {0xE245, 0x7912}, //5364 #CJK UNIFIED IDEOGRAPH
+ {0xE246, 0x7911}, //5365 #CJK UNIFIED IDEOGRAPH
+ {0xE247, 0x7919}, //5366 #CJK UNIFIED IDEOGRAPH
+ {0xE248, 0x792C}, //5367 #CJK UNIFIED IDEOGRAPH
+ {0xE249, 0x792B}, //5368 #CJK UNIFIED IDEOGRAPH
+ {0xE24A, 0x7940}, //5369 #CJK UNIFIED IDEOGRAPH
+ {0xE24B, 0x7960}, //5370 #CJK UNIFIED IDEOGRAPH
+ {0xE24C, 0x7957}, //5371 #CJK UNIFIED IDEOGRAPH
+ {0xE24D, 0x795F}, //5372 #CJK UNIFIED IDEOGRAPH
+ {0xE24E, 0x795A}, //5373 #CJK UNIFIED IDEOGRAPH
+ {0xE24F, 0x7955}, //5374 #CJK UNIFIED IDEOGRAPH
+ {0xE250, 0x7953}, //5375 #CJK UNIFIED IDEOGRAPH
+ {0xE251, 0x797A}, //5376 #CJK UNIFIED IDEOGRAPH
+ {0xE252, 0x797F}, //5377 #CJK UNIFIED IDEOGRAPH
+ {0xE253, 0x798A}, //5378 #CJK UNIFIED IDEOGRAPH
+ {0xE254, 0x799D}, //5379 #CJK UNIFIED IDEOGRAPH
+ {0xE255, 0x79A7}, //5380 #CJK UNIFIED IDEOGRAPH
+ {0xE256, 0x9F4B}, //5381 #CJK UNIFIED IDEOGRAPH
+ {0xE257, 0x79AA}, //5382 #CJK UNIFIED IDEOGRAPH
+ {0xE258, 0x79AE}, //5383 #CJK UNIFIED IDEOGRAPH
+ {0xE259, 0x79B3}, //5384 #CJK UNIFIED IDEOGRAPH
+ {0xE25A, 0x79B9}, //5385 #CJK UNIFIED IDEOGRAPH
+ {0xE25B, 0x79BA}, //5386 #CJK UNIFIED IDEOGRAPH
+ {0xE25C, 0x79C9}, //5387 #CJK UNIFIED IDEOGRAPH
+ {0xE25D, 0x79D5}, //5388 #CJK UNIFIED IDEOGRAPH
+ {0xE25E, 0x79E7}, //5389 #CJK UNIFIED IDEOGRAPH
+ {0xE25F, 0x79EC}, //5390 #CJK UNIFIED IDEOGRAPH
+ {0xE260, 0x79E1}, //5391 #CJK UNIFIED IDEOGRAPH
+ {0xE261, 0x79E3}, //5392 #CJK UNIFIED IDEOGRAPH
+ {0xE262, 0x7A08}, //5393 #CJK UNIFIED IDEOGRAPH
+ {0xE263, 0x7A0D}, //5394 #CJK UNIFIED IDEOGRAPH
+ {0xE264, 0x7A18}, //5395 #CJK UNIFIED IDEOGRAPH
+ {0xE265, 0x7A19}, //5396 #CJK UNIFIED IDEOGRAPH
+ {0xE266, 0x7A20}, //5397 #CJK UNIFIED IDEOGRAPH
+ {0xE267, 0x7A1F}, //5398 #CJK UNIFIED IDEOGRAPH
+ {0xE268, 0x7980}, //5399 #CJK UNIFIED IDEOGRAPH
+ {0xE269, 0x7A31}, //5400 #CJK UNIFIED IDEOGRAPH
+ {0xE26A, 0x7A3B}, //5401 #CJK UNIFIED IDEOGRAPH
+ {0xE26B, 0x7A3E}, //5402 #CJK UNIFIED IDEOGRAPH
+ {0xE26C, 0x7A37}, //5403 #CJK UNIFIED IDEOGRAPH
+ {0xE26D, 0x7A43}, //5404 #CJK UNIFIED IDEOGRAPH
+ {0xE26E, 0x7A57}, //5405 #CJK UNIFIED IDEOGRAPH
+ {0xE26F, 0x7A49}, //5406 #CJK UNIFIED IDEOGRAPH
+ {0xE270, 0x7A61}, //5407 #CJK UNIFIED IDEOGRAPH
+ {0xE271, 0x7A62}, //5408 #CJK UNIFIED IDEOGRAPH
+ {0xE272, 0x7A69}, //5409 #CJK UNIFIED IDEOGRAPH
+ {0xE273, 0x9F9D}, //5410 #CJK UNIFIED IDEOGRAPH
+ {0xE274, 0x7A70}, //5411 #CJK UNIFIED IDEOGRAPH
+ {0xE275, 0x7A79}, //5412 #CJK UNIFIED IDEOGRAPH
+ {0xE276, 0x7A7D}, //5413 #CJK UNIFIED IDEOGRAPH
+ {0xE277, 0x7A88}, //5414 #CJK UNIFIED IDEOGRAPH
+ {0xE278, 0x7A97}, //5415 #CJK UNIFIED IDEOGRAPH
+ {0xE279, 0x7A95}, //5416 #CJK UNIFIED IDEOGRAPH
+ {0xE27A, 0x7A98}, //5417 #CJK UNIFIED IDEOGRAPH
+ {0xE27B, 0x7A96}, //5418 #CJK UNIFIED IDEOGRAPH
+ {0xE27C, 0x7AA9}, //5419 #CJK UNIFIED IDEOGRAPH
+ {0xE27D, 0x7AC8}, //5420 #CJK UNIFIED IDEOGRAPH
+ {0xE27E, 0x7AB0}, //5421 #CJK UNIFIED IDEOGRAPH
+ {0xE280, 0x7AB6}, //5422 #CJK UNIFIED IDEOGRAPH
+ {0xE281, 0x7AC5}, //5423 #CJK UNIFIED IDEOGRAPH
+ {0xE282, 0x7AC4}, //5424 #CJK UNIFIED IDEOGRAPH
+ {0xE283, 0x7ABF}, //5425 #CJK UNIFIED IDEOGRAPH
+ {0xE284, 0x9083}, //5426 #CJK UNIFIED IDEOGRAPH
+ {0xE285, 0x7AC7}, //5427 #CJK UNIFIED IDEOGRAPH
+ {0xE286, 0x7ACA}, //5428 #CJK UNIFIED IDEOGRAPH
+ {0xE287, 0x7ACD}, //5429 #CJK UNIFIED IDEOGRAPH
+ {0xE288, 0x7ACF}, //5430 #CJK UNIFIED IDEOGRAPH
+ {0xE289, 0x7AD5}, //5431 #CJK UNIFIED IDEOGRAPH
+ {0xE28A, 0x7AD3}, //5432 #CJK UNIFIED IDEOGRAPH
+ {0xE28B, 0x7AD9}, //5433 #CJK UNIFIED IDEOGRAPH
+ {0xE28C, 0x7ADA}, //5434 #CJK UNIFIED IDEOGRAPH
+ {0xE28D, 0x7ADD}, //5435 #CJK UNIFIED IDEOGRAPH
+ {0xE28E, 0x7AE1}, //5436 #CJK UNIFIED IDEOGRAPH
+ {0xE28F, 0x7AE2}, //5437 #CJK UNIFIED IDEOGRAPH
+ {0xE290, 0x7AE6}, //5438 #CJK UNIFIED IDEOGRAPH
+ {0xE291, 0x7AED}, //5439 #CJK UNIFIED IDEOGRAPH
+ {0xE292, 0x7AF0}, //5440 #CJK UNIFIED IDEOGRAPH
+ {0xE293, 0x7B02}, //5441 #CJK UNIFIED IDEOGRAPH
+ {0xE294, 0x7B0F}, //5442 #CJK UNIFIED IDEOGRAPH
+ {0xE295, 0x7B0A}, //5443 #CJK UNIFIED IDEOGRAPH
+ {0xE296, 0x7B06}, //5444 #CJK UNIFIED IDEOGRAPH
+ {0xE297, 0x7B33}, //5445 #CJK UNIFIED IDEOGRAPH
+ {0xE298, 0x7B18}, //5446 #CJK UNIFIED IDEOGRAPH
+ {0xE299, 0x7B19}, //5447 #CJK UNIFIED IDEOGRAPH
+ {0xE29A, 0x7B1E}, //5448 #CJK UNIFIED IDEOGRAPH
+ {0xE29B, 0x7B35}, //5449 #CJK UNIFIED IDEOGRAPH
+ {0xE29C, 0x7B28}, //5450 #CJK UNIFIED IDEOGRAPH
+ {0xE29D, 0x7B36}, //5451 #CJK UNIFIED IDEOGRAPH
+ {0xE29E, 0x7B50}, //5452 #CJK UNIFIED IDEOGRAPH
+ {0xE29F, 0x7B7A}, //5453 #CJK UNIFIED IDEOGRAPH
+ {0xE2A0, 0x7B04}, //5454 #CJK UNIFIED IDEOGRAPH
+ {0xE2A1, 0x7B4D}, //5455 #CJK UNIFIED IDEOGRAPH
+ {0xE2A2, 0x7B0B}, //5456 #CJK UNIFIED IDEOGRAPH
+ {0xE2A3, 0x7B4C}, //5457 #CJK UNIFIED IDEOGRAPH
+ {0xE2A4, 0x7B45}, //5458 #CJK UNIFIED IDEOGRAPH
+ {0xE2A5, 0x7B75}, //5459 #CJK UNIFIED IDEOGRAPH
+ {0xE2A6, 0x7B65}, //5460 #CJK UNIFIED IDEOGRAPH
+ {0xE2A7, 0x7B74}, //5461 #CJK UNIFIED IDEOGRAPH
+ {0xE2A8, 0x7B67}, //5462 #CJK UNIFIED IDEOGRAPH
+ {0xE2A9, 0x7B70}, //5463 #CJK UNIFIED IDEOGRAPH
+ {0xE2AA, 0x7B71}, //5464 #CJK UNIFIED IDEOGRAPH
+ {0xE2AB, 0x7B6C}, //5465 #CJK UNIFIED IDEOGRAPH
+ {0xE2AC, 0x7B6E}, //5466 #CJK UNIFIED IDEOGRAPH
+ {0xE2AD, 0x7B9D}, //5467 #CJK UNIFIED IDEOGRAPH
+ {0xE2AE, 0x7B98}, //5468 #CJK UNIFIED IDEOGRAPH
+ {0xE2AF, 0x7B9F}, //5469 #CJK UNIFIED IDEOGRAPH
+ {0xE2B0, 0x7B8D}, //5470 #CJK UNIFIED IDEOGRAPH
+ {0xE2B1, 0x7B9C}, //5471 #CJK UNIFIED IDEOGRAPH
+ {0xE2B2, 0x7B9A}, //5472 #CJK UNIFIED IDEOGRAPH
+ {0xE2B3, 0x7B8B}, //5473 #CJK UNIFIED IDEOGRAPH
+ {0xE2B4, 0x7B92}, //5474 #CJK UNIFIED IDEOGRAPH
+ {0xE2B5, 0x7B8F}, //5475 #CJK UNIFIED IDEOGRAPH
+ {0xE2B6, 0x7B5D}, //5476 #CJK UNIFIED IDEOGRAPH
+ {0xE2B7, 0x7B99}, //5477 #CJK UNIFIED IDEOGRAPH
+ {0xE2B8, 0x7BCB}, //5478 #CJK UNIFIED IDEOGRAPH
+ {0xE2B9, 0x7BC1}, //5479 #CJK UNIFIED IDEOGRAPH
+ {0xE2BA, 0x7BCC}, //5480 #CJK UNIFIED IDEOGRAPH
+ {0xE2BB, 0x7BCF}, //5481 #CJK UNIFIED IDEOGRAPH
+ {0xE2BC, 0x7BB4}, //5482 #CJK UNIFIED IDEOGRAPH
+ {0xE2BD, 0x7BC6}, //5483 #CJK UNIFIED IDEOGRAPH
+ {0xE2BE, 0x7BDD}, //5484 #CJK UNIFIED IDEOGRAPH
+ {0xE2BF, 0x7BE9}, //5485 #CJK UNIFIED IDEOGRAPH
+ {0xE2C0, 0x7C11}, //5486 #CJK UNIFIED IDEOGRAPH
+ {0xE2C1, 0x7C14}, //5487 #CJK UNIFIED IDEOGRAPH
+ {0xE2C2, 0x7BE6}, //5488 #CJK UNIFIED IDEOGRAPH
+ {0xE2C3, 0x7BE5}, //5489 #CJK UNIFIED IDEOGRAPH
+ {0xE2C4, 0x7C60}, //5490 #CJK UNIFIED IDEOGRAPH
+ {0xE2C5, 0x7C00}, //5491 #CJK UNIFIED IDEOGRAPH
+ {0xE2C6, 0x7C07}, //5492 #CJK UNIFIED IDEOGRAPH
+ {0xE2C7, 0x7C13}, //5493 #CJK UNIFIED IDEOGRAPH
+ {0xE2C8, 0x7BF3}, //5494 #CJK UNIFIED IDEOGRAPH
+ {0xE2C9, 0x7BF7}, //5495 #CJK UNIFIED IDEOGRAPH
+ {0xE2CA, 0x7C17}, //5496 #CJK UNIFIED IDEOGRAPH
+ {0xE2CB, 0x7C0D}, //5497 #CJK UNIFIED IDEOGRAPH
+ {0xE2CC, 0x7BF6}, //5498 #CJK UNIFIED IDEOGRAPH
+ {0xE2CD, 0x7C23}, //5499 #CJK UNIFIED IDEOGRAPH
+ {0xE2CE, 0x7C27}, //5500 #CJK UNIFIED IDEOGRAPH
+ {0xE2CF, 0x7C2A}, //5501 #CJK UNIFIED IDEOGRAPH
+ {0xE2D0, 0x7C1F}, //5502 #CJK UNIFIED IDEOGRAPH
+ {0xE2D1, 0x7C37}, //5503 #CJK UNIFIED IDEOGRAPH
+ {0xE2D2, 0x7C2B}, //5504 #CJK UNIFIED IDEOGRAPH
+ {0xE2D3, 0x7C3D}, //5505 #CJK UNIFIED IDEOGRAPH
+ {0xE2D4, 0x7C4C}, //5506 #CJK UNIFIED IDEOGRAPH
+ {0xE2D5, 0x7C43}, //5507 #CJK UNIFIED IDEOGRAPH
+ {0xE2D6, 0x7C54}, //5508 #CJK UNIFIED IDEOGRAPH
+ {0xE2D7, 0x7C4F}, //5509 #CJK UNIFIED IDEOGRAPH
+ {0xE2D8, 0x7C40}, //5510 #CJK UNIFIED IDEOGRAPH
+ {0xE2D9, 0x7C50}, //5511 #CJK UNIFIED IDEOGRAPH
+ {0xE2DA, 0x7C58}, //5512 #CJK UNIFIED IDEOGRAPH
+ {0xE2DB, 0x7C5F}, //5513 #CJK UNIFIED IDEOGRAPH
+ {0xE2DC, 0x7C64}, //5514 #CJK UNIFIED IDEOGRAPH
+ {0xE2DD, 0x7C56}, //5515 #CJK UNIFIED IDEOGRAPH
+ {0xE2DE, 0x7C65}, //5516 #CJK UNIFIED IDEOGRAPH
+ {0xE2DF, 0x7C6C}, //5517 #CJK UNIFIED IDEOGRAPH
+ {0xE2E0, 0x7C75}, //5518 #CJK UNIFIED IDEOGRAPH
+ {0xE2E1, 0x7C83}, //5519 #CJK UNIFIED IDEOGRAPH
+ {0xE2E2, 0x7C90}, //5520 #CJK UNIFIED IDEOGRAPH
+ {0xE2E3, 0x7CA4}, //5521 #CJK UNIFIED IDEOGRAPH
+ {0xE2E4, 0x7CAD}, //5522 #CJK UNIFIED IDEOGRAPH
+ {0xE2E5, 0x7CA2}, //5523 #CJK UNIFIED IDEOGRAPH
+ {0xE2E6, 0x7CAB}, //5524 #CJK UNIFIED IDEOGRAPH
+ {0xE2E7, 0x7CA1}, //5525 #CJK UNIFIED IDEOGRAPH
+ {0xE2E8, 0x7CA8}, //5526 #CJK UNIFIED IDEOGRAPH
+ {0xE2E9, 0x7CB3}, //5527 #CJK UNIFIED IDEOGRAPH
+ {0xE2EA, 0x7CB2}, //5528 #CJK UNIFIED IDEOGRAPH
+ {0xE2EB, 0x7CB1}, //5529 #CJK UNIFIED IDEOGRAPH
+ {0xE2EC, 0x7CAE}, //5530 #CJK UNIFIED IDEOGRAPH
+ {0xE2ED, 0x7CB9}, //5531 #CJK UNIFIED IDEOGRAPH
+ {0xE2EE, 0x7CBD}, //5532 #CJK UNIFIED IDEOGRAPH
+ {0xE2EF, 0x7CC0}, //5533 #CJK UNIFIED IDEOGRAPH
+ {0xE2F0, 0x7CC5}, //5534 #CJK UNIFIED IDEOGRAPH
+ {0xE2F1, 0x7CC2}, //5535 #CJK UNIFIED IDEOGRAPH
+ {0xE2F2, 0x7CD8}, //5536 #CJK UNIFIED IDEOGRAPH
+ {0xE2F3, 0x7CD2}, //5537 #CJK UNIFIED IDEOGRAPH
+ {0xE2F4, 0x7CDC}, //5538 #CJK UNIFIED IDEOGRAPH
+ {0xE2F5, 0x7CE2}, //5539 #CJK UNIFIED IDEOGRAPH
+ {0xE2F6, 0x9B3B}, //5540 #CJK UNIFIED IDEOGRAPH
+ {0xE2F7, 0x7CEF}, //5541 #CJK UNIFIED IDEOGRAPH
+ {0xE2F8, 0x7CF2}, //5542 #CJK UNIFIED IDEOGRAPH
+ {0xE2F9, 0x7CF4}, //5543 #CJK UNIFIED IDEOGRAPH
+ {0xE2FA, 0x7CF6}, //5544 #CJK UNIFIED IDEOGRAPH
+ {0xE2FB, 0x7CFA}, //5545 #CJK UNIFIED IDEOGRAPH
+ {0xE2FC, 0x7D06}, //5546 #CJK UNIFIED IDEOGRAPH
+ {0xE340, 0x7D02}, //5547 #CJK UNIFIED IDEOGRAPH
+ {0xE341, 0x7D1C}, //5548 #CJK UNIFIED IDEOGRAPH
+ {0xE342, 0x7D15}, //5549 #CJK UNIFIED IDEOGRAPH
+ {0xE343, 0x7D0A}, //5550 #CJK UNIFIED IDEOGRAPH
+ {0xE344, 0x7D45}, //5551 #CJK UNIFIED IDEOGRAPH
+ {0xE345, 0x7D4B}, //5552 #CJK UNIFIED IDEOGRAPH
+ {0xE346, 0x7D2E}, //5553 #CJK UNIFIED IDEOGRAPH
+ {0xE347, 0x7D32}, //5554 #CJK UNIFIED IDEOGRAPH
+ {0xE348, 0x7D3F}, //5555 #CJK UNIFIED IDEOGRAPH
+ {0xE349, 0x7D35}, //5556 #CJK UNIFIED IDEOGRAPH
+ {0xE34A, 0x7D46}, //5557 #CJK UNIFIED IDEOGRAPH
+ {0xE34B, 0x7D73}, //5558 #CJK UNIFIED IDEOGRAPH
+ {0xE34C, 0x7D56}, //5559 #CJK UNIFIED IDEOGRAPH
+ {0xE34D, 0x7D4E}, //5560 #CJK UNIFIED IDEOGRAPH
+ {0xE34E, 0x7D72}, //5561 #CJK UNIFIED IDEOGRAPH
+ {0xE34F, 0x7D68}, //5562 #CJK UNIFIED IDEOGRAPH
+ {0xE350, 0x7D6E}, //5563 #CJK UNIFIED IDEOGRAPH
+ {0xE351, 0x7D4F}, //5564 #CJK UNIFIED IDEOGRAPH
+ {0xE352, 0x7D63}, //5565 #CJK UNIFIED IDEOGRAPH
+ {0xE353, 0x7D93}, //5566 #CJK UNIFIED IDEOGRAPH
+ {0xE354, 0x7D89}, //5567 #CJK UNIFIED IDEOGRAPH
+ {0xE355, 0x7D5B}, //5568 #CJK UNIFIED IDEOGRAPH
+ {0xE356, 0x7D8F}, //5569 #CJK UNIFIED IDEOGRAPH
+ {0xE357, 0x7D7D}, //5570 #CJK UNIFIED IDEOGRAPH
+ {0xE358, 0x7D9B}, //5571 #CJK UNIFIED IDEOGRAPH
+ {0xE359, 0x7DBA}, //5572 #CJK UNIFIED IDEOGRAPH
+ {0xE35A, 0x7DAE}, //5573 #CJK UNIFIED IDEOGRAPH
+ {0xE35B, 0x7DA3}, //5574 #CJK UNIFIED IDEOGRAPH
+ {0xE35C, 0x7DB5}, //5575 #CJK UNIFIED IDEOGRAPH
+ {0xE35D, 0x7DC7}, //5576 #CJK UNIFIED IDEOGRAPH
+ {0xE35E, 0x7DBD}, //5577 #CJK UNIFIED IDEOGRAPH
+ {0xE35F, 0x7DAB}, //5578 #CJK UNIFIED IDEOGRAPH
+ {0xE360, 0x7E3D}, //5579 #CJK UNIFIED IDEOGRAPH
+ {0xE361, 0x7DA2}, //5580 #CJK UNIFIED IDEOGRAPH
+ {0xE362, 0x7DAF}, //5581 #CJK UNIFIED IDEOGRAPH
+ {0xE363, 0x7DDC}, //5582 #CJK UNIFIED IDEOGRAPH
+ {0xE364, 0x7DB8}, //5583 #CJK UNIFIED IDEOGRAPH
+ {0xE365, 0x7D9F}, //5584 #CJK UNIFIED IDEOGRAPH
+ {0xE366, 0x7DB0}, //5585 #CJK UNIFIED IDEOGRAPH
+ {0xE367, 0x7DD8}, //5586 #CJK UNIFIED IDEOGRAPH
+ {0xE368, 0x7DDD}, //5587 #CJK UNIFIED IDEOGRAPH
+ {0xE369, 0x7DE4}, //5588 #CJK UNIFIED IDEOGRAPH
+ {0xE36A, 0x7DDE}, //5589 #CJK UNIFIED IDEOGRAPH
+ {0xE36B, 0x7DFB}, //5590 #CJK UNIFIED IDEOGRAPH
+ {0xE36C, 0x7DF2}, //5591 #CJK UNIFIED IDEOGRAPH
+ {0xE36D, 0x7DE1}, //5592 #CJK UNIFIED IDEOGRAPH
+ {0xE36E, 0x7E05}, //5593 #CJK UNIFIED IDEOGRAPH
+ {0xE36F, 0x7E0A}, //5594 #CJK UNIFIED IDEOGRAPH
+ {0xE370, 0x7E23}, //5595 #CJK UNIFIED IDEOGRAPH
+ {0xE371, 0x7E21}, //5596 #CJK UNIFIED IDEOGRAPH
+ {0xE372, 0x7E12}, //5597 #CJK UNIFIED IDEOGRAPH
+ {0xE373, 0x7E31}, //5598 #CJK UNIFIED IDEOGRAPH
+ {0xE374, 0x7E1F}, //5599 #CJK UNIFIED IDEOGRAPH
+ {0xE375, 0x7E09}, //5600 #CJK UNIFIED IDEOGRAPH
+ {0xE376, 0x7E0B}, //5601 #CJK UNIFIED IDEOGRAPH
+ {0xE377, 0x7E22}, //5602 #CJK UNIFIED IDEOGRAPH
+ {0xE378, 0x7E46}, //5603 #CJK UNIFIED IDEOGRAPH
+ {0xE379, 0x7E66}, //5604 #CJK UNIFIED IDEOGRAPH
+ {0xE37A, 0x7E3B}, //5605 #CJK UNIFIED IDEOGRAPH
+ {0xE37B, 0x7E35}, //5606 #CJK UNIFIED IDEOGRAPH
+ {0xE37C, 0x7E39}, //5607 #CJK UNIFIED IDEOGRAPH
+ {0xE37D, 0x7E43}, //5608 #CJK UNIFIED IDEOGRAPH
+ {0xE37E, 0x7E37}, //5609 #CJK UNIFIED IDEOGRAPH
+ {0xE380, 0x7E32}, //5610 #CJK UNIFIED IDEOGRAPH
+ {0xE381, 0x7E3A}, //5611 #CJK UNIFIED IDEOGRAPH
+ {0xE382, 0x7E67}, //5612 #CJK UNIFIED IDEOGRAPH
+ {0xE383, 0x7E5D}, //5613 #CJK UNIFIED IDEOGRAPH
+ {0xE384, 0x7E56}, //5614 #CJK UNIFIED IDEOGRAPH
+ {0xE385, 0x7E5E}, //5615 #CJK UNIFIED IDEOGRAPH
+ {0xE386, 0x7E59}, //5616 #CJK UNIFIED IDEOGRAPH
+ {0xE387, 0x7E5A}, //5617 #CJK UNIFIED IDEOGRAPH
+ {0xE388, 0x7E79}, //5618 #CJK UNIFIED IDEOGRAPH
+ {0xE389, 0x7E6A}, //5619 #CJK UNIFIED IDEOGRAPH
+ {0xE38A, 0x7E69}, //5620 #CJK UNIFIED IDEOGRAPH
+ {0xE38B, 0x7E7C}, //5621 #CJK UNIFIED IDEOGRAPH
+ {0xE38C, 0x7E7B}, //5622 #CJK UNIFIED IDEOGRAPH
+ {0xE38D, 0x7E83}, //5623 #CJK UNIFIED IDEOGRAPH
+ {0xE38E, 0x7DD5}, //5624 #CJK UNIFIED IDEOGRAPH
+ {0xE38F, 0x7E7D}, //5625 #CJK UNIFIED IDEOGRAPH
+ {0xE390, 0x8FAE}, //5626 #CJK UNIFIED IDEOGRAPH
+ {0xE391, 0x7E7F}, //5627 #CJK UNIFIED IDEOGRAPH
+ {0xE392, 0x7E88}, //5628 #CJK UNIFIED IDEOGRAPH
+ {0xE393, 0x7E89}, //5629 #CJK UNIFIED IDEOGRAPH
+ {0xE394, 0x7E8C}, //5630 #CJK UNIFIED IDEOGRAPH
+ {0xE395, 0x7E92}, //5631 #CJK UNIFIED IDEOGRAPH
+ {0xE396, 0x7E90}, //5632 #CJK UNIFIED IDEOGRAPH
+ {0xE397, 0x7E93}, //5633 #CJK UNIFIED IDEOGRAPH
+ {0xE398, 0x7E94}, //5634 #CJK UNIFIED IDEOGRAPH
+ {0xE399, 0x7E96}, //5635 #CJK UNIFIED IDEOGRAPH
+ {0xE39A, 0x7E8E}, //5636 #CJK UNIFIED IDEOGRAPH
+ {0xE39B, 0x7E9B}, //5637 #CJK UNIFIED IDEOGRAPH
+ {0xE39C, 0x7E9C}, //5638 #CJK UNIFIED IDEOGRAPH
+ {0xE39D, 0x7F38}, //5639 #CJK UNIFIED IDEOGRAPH
+ {0xE39E, 0x7F3A}, //5640 #CJK UNIFIED IDEOGRAPH
+ {0xE39F, 0x7F45}, //5641 #CJK UNIFIED IDEOGRAPH
+ {0xE3A0, 0x7F4C}, //5642 #CJK UNIFIED IDEOGRAPH
+ {0xE3A1, 0x7F4D}, //5643 #CJK UNIFIED IDEOGRAPH
+ {0xE3A2, 0x7F4E}, //5644 #CJK UNIFIED IDEOGRAPH
+ {0xE3A3, 0x7F50}, //5645 #CJK UNIFIED IDEOGRAPH
+ {0xE3A4, 0x7F51}, //5646 #CJK UNIFIED IDEOGRAPH
+ {0xE3A5, 0x7F55}, //5647 #CJK UNIFIED IDEOGRAPH
+ {0xE3A6, 0x7F54}, //5648 #CJK UNIFIED IDEOGRAPH
+ {0xE3A7, 0x7F58}, //5649 #CJK UNIFIED IDEOGRAPH
+ {0xE3A8, 0x7F5F}, //5650 #CJK UNIFIED IDEOGRAPH
+ {0xE3A9, 0x7F60}, //5651 #CJK UNIFIED IDEOGRAPH
+ {0xE3AA, 0x7F68}, //5652 #CJK UNIFIED IDEOGRAPH
+ {0xE3AB, 0x7F69}, //5653 #CJK UNIFIED IDEOGRAPH
+ {0xE3AC, 0x7F67}, //5654 #CJK UNIFIED IDEOGRAPH
+ {0xE3AD, 0x7F78}, //5655 #CJK UNIFIED IDEOGRAPH
+ {0xE3AE, 0x7F82}, //5656 #CJK UNIFIED IDEOGRAPH
+ {0xE3AF, 0x7F86}, //5657 #CJK UNIFIED IDEOGRAPH
+ {0xE3B0, 0x7F83}, //5658 #CJK UNIFIED IDEOGRAPH
+ {0xE3B1, 0x7F88}, //5659 #CJK UNIFIED IDEOGRAPH
+ {0xE3B2, 0x7F87}, //5660 #CJK UNIFIED IDEOGRAPH
+ {0xE3B3, 0x7F8C}, //5661 #CJK UNIFIED IDEOGRAPH
+ {0xE3B4, 0x7F94}, //5662 #CJK UNIFIED IDEOGRAPH
+ {0xE3B5, 0x7F9E}, //5663 #CJK UNIFIED IDEOGRAPH
+ {0xE3B6, 0x7F9D}, //5664 #CJK UNIFIED IDEOGRAPH
+ {0xE3B7, 0x7F9A}, //5665 #CJK UNIFIED IDEOGRAPH
+ {0xE3B8, 0x7FA3}, //5666 #CJK UNIFIED IDEOGRAPH
+ {0xE3B9, 0x7FAF}, //5667 #CJK UNIFIED IDEOGRAPH
+ {0xE3BA, 0x7FB2}, //5668 #CJK UNIFIED IDEOGRAPH
+ {0xE3BB, 0x7FB9}, //5669 #CJK UNIFIED IDEOGRAPH
+ {0xE3BC, 0x7FAE}, //5670 #CJK UNIFIED IDEOGRAPH
+ {0xE3BD, 0x7FB6}, //5671 #CJK UNIFIED IDEOGRAPH
+ {0xE3BE, 0x7FB8}, //5672 #CJK UNIFIED IDEOGRAPH
+ {0xE3BF, 0x8B71}, //5673 #CJK UNIFIED IDEOGRAPH
+ {0xE3C0, 0x7FC5}, //5674 #CJK UNIFIED IDEOGRAPH
+ {0xE3C1, 0x7FC6}, //5675 #CJK UNIFIED IDEOGRAPH
+ {0xE3C2, 0x7FCA}, //5676 #CJK UNIFIED IDEOGRAPH
+ {0xE3C3, 0x7FD5}, //5677 #CJK UNIFIED IDEOGRAPH
+ {0xE3C4, 0x7FD4}, //5678 #CJK UNIFIED IDEOGRAPH
+ {0xE3C5, 0x7FE1}, //5679 #CJK UNIFIED IDEOGRAPH
+ {0xE3C6, 0x7FE6}, //5680 #CJK UNIFIED IDEOGRAPH
+ {0xE3C7, 0x7FE9}, //5681 #CJK UNIFIED IDEOGRAPH
+ {0xE3C8, 0x7FF3}, //5682 #CJK UNIFIED IDEOGRAPH
+ {0xE3C9, 0x7FF9}, //5683 #CJK UNIFIED IDEOGRAPH
+ {0xE3CA, 0x98DC}, //5684 #CJK UNIFIED IDEOGRAPH
+ {0xE3CB, 0x8006}, //5685 #CJK UNIFIED IDEOGRAPH
+ {0xE3CC, 0x8004}, //5686 #CJK UNIFIED IDEOGRAPH
+ {0xE3CD, 0x800B}, //5687 #CJK UNIFIED IDEOGRAPH
+ {0xE3CE, 0x8012}, //5688 #CJK UNIFIED IDEOGRAPH
+ {0xE3CF, 0x8018}, //5689 #CJK UNIFIED IDEOGRAPH
+ {0xE3D0, 0x8019}, //5690 #CJK UNIFIED IDEOGRAPH
+ {0xE3D1, 0x801C}, //5691 #CJK UNIFIED IDEOGRAPH
+ {0xE3D2, 0x8021}, //5692 #CJK UNIFIED IDEOGRAPH
+ {0xE3D3, 0x8028}, //5693 #CJK UNIFIED IDEOGRAPH
+ {0xE3D4, 0x803F}, //5694 #CJK UNIFIED IDEOGRAPH
+ {0xE3D5, 0x803B}, //5695 #CJK UNIFIED IDEOGRAPH
+ {0xE3D6, 0x804A}, //5696 #CJK UNIFIED IDEOGRAPH
+ {0xE3D7, 0x8046}, //5697 #CJK UNIFIED IDEOGRAPH
+ {0xE3D8, 0x8052}, //5698 #CJK UNIFIED IDEOGRAPH
+ {0xE3D9, 0x8058}, //5699 #CJK UNIFIED IDEOGRAPH
+ {0xE3DA, 0x805A}, //5700 #CJK UNIFIED IDEOGRAPH
+ {0xE3DB, 0x805F}, //5701 #CJK UNIFIED IDEOGRAPH
+ {0xE3DC, 0x8062}, //5702 #CJK UNIFIED IDEOGRAPH
+ {0xE3DD, 0x8068}, //5703 #CJK UNIFIED IDEOGRAPH
+ {0xE3DE, 0x8073}, //5704 #CJK UNIFIED IDEOGRAPH
+ {0xE3DF, 0x8072}, //5705 #CJK UNIFIED IDEOGRAPH
+ {0xE3E0, 0x8070}, //5706 #CJK UNIFIED IDEOGRAPH
+ {0xE3E1, 0x8076}, //5707 #CJK UNIFIED IDEOGRAPH
+ {0xE3E2, 0x8079}, //5708 #CJK UNIFIED IDEOGRAPH
+ {0xE3E3, 0x807D}, //5709 #CJK UNIFIED IDEOGRAPH
+ {0xE3E4, 0x807F}, //5710 #CJK UNIFIED IDEOGRAPH
+ {0xE3E5, 0x8084}, //5711 #CJK UNIFIED IDEOGRAPH
+ {0xE3E6, 0x8086}, //5712 #CJK UNIFIED IDEOGRAPH
+ {0xE3E7, 0x8085}, //5713 #CJK UNIFIED IDEOGRAPH
+ {0xE3E8, 0x809B}, //5714 #CJK UNIFIED IDEOGRAPH
+ {0xE3E9, 0x8093}, //5715 #CJK UNIFIED IDEOGRAPH
+ {0xE3EA, 0x809A}, //5716 #CJK UNIFIED IDEOGRAPH
+ {0xE3EB, 0x80AD}, //5717 #CJK UNIFIED IDEOGRAPH
+ {0xE3EC, 0x5190}, //5718 #CJK UNIFIED IDEOGRAPH
+ {0xE3ED, 0x80AC}, //5719 #CJK UNIFIED IDEOGRAPH
+ {0xE3EE, 0x80DB}, //5720 #CJK UNIFIED IDEOGRAPH
+ {0xE3EF, 0x80E5}, //5721 #CJK UNIFIED IDEOGRAPH
+ {0xE3F0, 0x80D9}, //5722 #CJK UNIFIED IDEOGRAPH
+ {0xE3F1, 0x80DD}, //5723 #CJK UNIFIED IDEOGRAPH
+ {0xE3F2, 0x80C4}, //5724 #CJK UNIFIED IDEOGRAPH
+ {0xE3F3, 0x80DA}, //5725 #CJK UNIFIED IDEOGRAPH
+ {0xE3F4, 0x80D6}, //5726 #CJK UNIFIED IDEOGRAPH
+ {0xE3F5, 0x8109}, //5727 #CJK UNIFIED IDEOGRAPH
+ {0xE3F6, 0x80EF}, //5728 #CJK UNIFIED IDEOGRAPH
+ {0xE3F7, 0x80F1}, //5729 #CJK UNIFIED IDEOGRAPH
+ {0xE3F8, 0x811B}, //5730 #CJK UNIFIED IDEOGRAPH
+ {0xE3F9, 0x8129}, //5731 #CJK UNIFIED IDEOGRAPH
+ {0xE3FA, 0x8123}, //5732 #CJK UNIFIED IDEOGRAPH
+ {0xE3FB, 0x812F}, //5733 #CJK UNIFIED IDEOGRAPH
+ {0xE3FC, 0x814B}, //5734 #CJK UNIFIED IDEOGRAPH
+ {0xE440, 0x968B}, //5735 #CJK UNIFIED IDEOGRAPH
+ {0xE441, 0x8146}, //5736 #CJK UNIFIED IDEOGRAPH
+ {0xE442, 0x813E}, //5737 #CJK UNIFIED IDEOGRAPH
+ {0xE443, 0x8153}, //5738 #CJK UNIFIED IDEOGRAPH
+ {0xE444, 0x8151}, //5739 #CJK UNIFIED IDEOGRAPH
+ {0xE445, 0x80FC}, //5740 #CJK UNIFIED IDEOGRAPH
+ {0xE446, 0x8171}, //5741 #CJK UNIFIED IDEOGRAPH
+ {0xE447, 0x816E}, //5742 #CJK UNIFIED IDEOGRAPH
+ {0xE448, 0x8165}, //5743 #CJK UNIFIED IDEOGRAPH
+ {0xE449, 0x8166}, //5744 #CJK UNIFIED IDEOGRAPH
+ {0xE44A, 0x8174}, //5745 #CJK UNIFIED IDEOGRAPH
+ {0xE44B, 0x8183}, //5746 #CJK UNIFIED IDEOGRAPH
+ {0xE44C, 0x8188}, //5747 #CJK UNIFIED IDEOGRAPH
+ {0xE44D, 0x818A}, //5748 #CJK UNIFIED IDEOGRAPH
+ {0xE44E, 0x8180}, //5749 #CJK UNIFIED IDEOGRAPH
+ {0xE44F, 0x8182}, //5750 #CJK UNIFIED IDEOGRAPH
+ {0xE450, 0x81A0}, //5751 #CJK UNIFIED IDEOGRAPH
+ {0xE451, 0x8195}, //5752 #CJK UNIFIED IDEOGRAPH
+ {0xE452, 0x81A4}, //5753 #CJK UNIFIED IDEOGRAPH
+ {0xE453, 0x81A3}, //5754 #CJK UNIFIED IDEOGRAPH
+ {0xE454, 0x815F}, //5755 #CJK UNIFIED IDEOGRAPH
+ {0xE455, 0x8193}, //5756 #CJK UNIFIED IDEOGRAPH
+ {0xE456, 0x81A9}, //5757 #CJK UNIFIED IDEOGRAPH
+ {0xE457, 0x81B0}, //5758 #CJK UNIFIED IDEOGRAPH
+ {0xE458, 0x81B5}, //5759 #CJK UNIFIED IDEOGRAPH
+ {0xE459, 0x81BE}, //5760 #CJK UNIFIED IDEOGRAPH
+ {0xE45A, 0x81B8}, //5761 #CJK UNIFIED IDEOGRAPH
+ {0xE45B, 0x81BD}, //5762 #CJK UNIFIED IDEOGRAPH
+ {0xE45C, 0x81C0}, //5763 #CJK UNIFIED IDEOGRAPH
+ {0xE45D, 0x81C2}, //5764 #CJK UNIFIED IDEOGRAPH
+ {0xE45E, 0x81BA}, //5765 #CJK UNIFIED IDEOGRAPH
+ {0xE45F, 0x81C9}, //5766 #CJK UNIFIED IDEOGRAPH
+ {0xE460, 0x81CD}, //5767 #CJK UNIFIED IDEOGRAPH
+ {0xE461, 0x81D1}, //5768 #CJK UNIFIED IDEOGRAPH
+ {0xE462, 0x81D9}, //5769 #CJK UNIFIED IDEOGRAPH
+ {0xE463, 0x81D8}, //5770 #CJK UNIFIED IDEOGRAPH
+ {0xE464, 0x81C8}, //5771 #CJK UNIFIED IDEOGRAPH
+ {0xE465, 0x81DA}, //5772 #CJK UNIFIED IDEOGRAPH
+ {0xE466, 0x81DF}, //5773 #CJK UNIFIED IDEOGRAPH
+ {0xE467, 0x81E0}, //5774 #CJK UNIFIED IDEOGRAPH
+ {0xE468, 0x81E7}, //5775 #CJK UNIFIED IDEOGRAPH
+ {0xE469, 0x81FA}, //5776 #CJK UNIFIED IDEOGRAPH
+ {0xE46A, 0x81FB}, //5777 #CJK UNIFIED IDEOGRAPH
+ {0xE46B, 0x81FE}, //5778 #CJK UNIFIED IDEOGRAPH
+ {0xE46C, 0x8201}, //5779 #CJK UNIFIED IDEOGRAPH
+ {0xE46D, 0x8202}, //5780 #CJK UNIFIED IDEOGRAPH
+ {0xE46E, 0x8205}, //5781 #CJK UNIFIED IDEOGRAPH
+ {0xE46F, 0x8207}, //5782 #CJK UNIFIED IDEOGRAPH
+ {0xE470, 0x820A}, //5783 #CJK UNIFIED IDEOGRAPH
+ {0xE471, 0x820D}, //5784 #CJK UNIFIED IDEOGRAPH
+ {0xE472, 0x8210}, //5785 #CJK UNIFIED IDEOGRAPH
+ {0xE473, 0x8216}, //5786 #CJK UNIFIED IDEOGRAPH
+ {0xE474, 0x8229}, //5787 #CJK UNIFIED IDEOGRAPH
+ {0xE475, 0x822B}, //5788 #CJK UNIFIED IDEOGRAPH
+ {0xE476, 0x8238}, //5789 #CJK UNIFIED IDEOGRAPH
+ {0xE477, 0x8233}, //5790 #CJK UNIFIED IDEOGRAPH
+ {0xE478, 0x8240}, //5791 #CJK UNIFIED IDEOGRAPH
+ {0xE479, 0x8259}, //5792 #CJK UNIFIED IDEOGRAPH
+ {0xE47A, 0x8258}, //5793 #CJK UNIFIED IDEOGRAPH
+ {0xE47B, 0x825D}, //5794 #CJK UNIFIED IDEOGRAPH
+ {0xE47C, 0x825A}, //5795 #CJK UNIFIED IDEOGRAPH
+ {0xE47D, 0x825F}, //5796 #CJK UNIFIED IDEOGRAPH
+ {0xE47E, 0x8264}, //5797 #CJK UNIFIED IDEOGRAPH
+ {0xE480, 0x8262}, //5798 #CJK UNIFIED IDEOGRAPH
+ {0xE481, 0x8268}, //5799 #CJK UNIFIED IDEOGRAPH
+ {0xE482, 0x826A}, //5800 #CJK UNIFIED IDEOGRAPH
+ {0xE483, 0x826B}, //5801 #CJK UNIFIED IDEOGRAPH
+ {0xE484, 0x822E}, //5802 #CJK UNIFIED IDEOGRAPH
+ {0xE485, 0x8271}, //5803 #CJK UNIFIED IDEOGRAPH
+ {0xE486, 0x8277}, //5804 #CJK UNIFIED IDEOGRAPH
+ {0xE487, 0x8278}, //5805 #CJK UNIFIED IDEOGRAPH
+ {0xE488, 0x827E}, //5806 #CJK UNIFIED IDEOGRAPH
+ {0xE489, 0x828D}, //5807 #CJK UNIFIED IDEOGRAPH
+ {0xE48A, 0x8292}, //5808 #CJK UNIFIED IDEOGRAPH
+ {0xE48B, 0x82AB}, //5809 #CJK UNIFIED IDEOGRAPH
+ {0xE48C, 0x829F}, //5810 #CJK UNIFIED IDEOGRAPH
+ {0xE48D, 0x82BB}, //5811 #CJK UNIFIED IDEOGRAPH
+ {0xE48E, 0x82AC}, //5812 #CJK UNIFIED IDEOGRAPH
+ {0xE48F, 0x82E1}, //5813 #CJK UNIFIED IDEOGRAPH
+ {0xE490, 0x82E3}, //5814 #CJK UNIFIED IDEOGRAPH
+ {0xE491, 0x82DF}, //5815 #CJK UNIFIED IDEOGRAPH
+ {0xE492, 0x82D2}, //5816 #CJK UNIFIED IDEOGRAPH
+ {0xE493, 0x82F4}, //5817 #CJK UNIFIED IDEOGRAPH
+ {0xE494, 0x82F3}, //5818 #CJK UNIFIED IDEOGRAPH
+ {0xE495, 0x82FA}, //5819 #CJK UNIFIED IDEOGRAPH
+ {0xE496, 0x8393}, //5820 #CJK UNIFIED IDEOGRAPH
+ {0xE497, 0x8303}, //5821 #CJK UNIFIED IDEOGRAPH
+ {0xE498, 0x82FB}, //5822 #CJK UNIFIED IDEOGRAPH
+ {0xE499, 0x82F9}, //5823 #CJK UNIFIED IDEOGRAPH
+ {0xE49A, 0x82DE}, //5824 #CJK UNIFIED IDEOGRAPH
+ {0xE49B, 0x8306}, //5825 #CJK UNIFIED IDEOGRAPH
+ {0xE49C, 0x82DC}, //5826 #CJK UNIFIED IDEOGRAPH
+ {0xE49D, 0x8309}, //5827 #CJK UNIFIED IDEOGRAPH
+ {0xE49E, 0x82D9}, //5828 #CJK UNIFIED IDEOGRAPH
+ {0xE49F, 0x8335}, //5829 #CJK UNIFIED IDEOGRAPH
+ {0xE4A0, 0x8334}, //5830 #CJK UNIFIED IDEOGRAPH
+ {0xE4A1, 0x8316}, //5831 #CJK UNIFIED IDEOGRAPH
+ {0xE4A2, 0x8332}, //5832 #CJK UNIFIED IDEOGRAPH
+ {0xE4A3, 0x8331}, //5833 #CJK UNIFIED IDEOGRAPH
+ {0xE4A4, 0x8340}, //5834 #CJK UNIFIED IDEOGRAPH
+ {0xE4A5, 0x8339}, //5835 #CJK UNIFIED IDEOGRAPH
+ {0xE4A6, 0x8350}, //5836 #CJK UNIFIED IDEOGRAPH
+ {0xE4A7, 0x8345}, //5837 #CJK UNIFIED IDEOGRAPH
+ {0xE4A8, 0x832F}, //5838 #CJK UNIFIED IDEOGRAPH
+ {0xE4A9, 0x832B}, //5839 #CJK UNIFIED IDEOGRAPH
+ {0xE4AA, 0x8317}, //5840 #CJK UNIFIED IDEOGRAPH
+ {0xE4AB, 0x8318}, //5841 #CJK UNIFIED IDEOGRAPH
+ {0xE4AC, 0x8385}, //5842 #CJK UNIFIED IDEOGRAPH
+ {0xE4AD, 0x839A}, //5843 #CJK UNIFIED IDEOGRAPH
+ {0xE4AE, 0x83AA}, //5844 #CJK UNIFIED IDEOGRAPH
+ {0xE4AF, 0x839F}, //5845 #CJK UNIFIED IDEOGRAPH
+ {0xE4B0, 0x83A2}, //5846 #CJK UNIFIED IDEOGRAPH
+ {0xE4B1, 0x8396}, //5847 #CJK UNIFIED IDEOGRAPH
+ {0xE4B2, 0x8323}, //5848 #CJK UNIFIED IDEOGRAPH
+ {0xE4B3, 0x838E}, //5849 #CJK UNIFIED IDEOGRAPH
+ {0xE4B4, 0x8387}, //5850 #CJK UNIFIED IDEOGRAPH
+ {0xE4B5, 0x838A}, //5851 #CJK UNIFIED IDEOGRAPH
+ {0xE4B6, 0x837C}, //5852 #CJK UNIFIED IDEOGRAPH
+ {0xE4B7, 0x83B5}, //5853 #CJK UNIFIED IDEOGRAPH
+ {0xE4B8, 0x8373}, //5854 #CJK UNIFIED IDEOGRAPH
+ {0xE4B9, 0x8375}, //5855 #CJK UNIFIED IDEOGRAPH
+ {0xE4BA, 0x83A0}, //5856 #CJK UNIFIED IDEOGRAPH
+ {0xE4BB, 0x8389}, //5857 #CJK UNIFIED IDEOGRAPH
+ {0xE4BC, 0x83A8}, //5858 #CJK UNIFIED IDEOGRAPH
+ {0xE4BD, 0x83F4}, //5859 #CJK UNIFIED IDEOGRAPH
+ {0xE4BE, 0x8413}, //5860 #CJK UNIFIED IDEOGRAPH
+ {0xE4BF, 0x83EB}, //5861 #CJK UNIFIED IDEOGRAPH
+ {0xE4C0, 0x83CE}, //5862 #CJK UNIFIED IDEOGRAPH
+ {0xE4C1, 0x83FD}, //5863 #CJK UNIFIED IDEOGRAPH
+ {0xE4C2, 0x8403}, //5864 #CJK UNIFIED IDEOGRAPH
+ {0xE4C3, 0x83D8}, //5865 #CJK UNIFIED IDEOGRAPH
+ {0xE4C4, 0x840B}, //5866 #CJK UNIFIED IDEOGRAPH
+ {0xE4C5, 0x83C1}, //5867 #CJK UNIFIED IDEOGRAPH
+ {0xE4C6, 0x83F7}, //5868 #CJK UNIFIED IDEOGRAPH
+ {0xE4C7, 0x8407}, //5869 #CJK UNIFIED IDEOGRAPH
+ {0xE4C8, 0x83E0}, //5870 #CJK UNIFIED IDEOGRAPH
+ {0xE4C9, 0x83F2}, //5871 #CJK UNIFIED IDEOGRAPH
+ {0xE4CA, 0x840D}, //5872 #CJK UNIFIED IDEOGRAPH
+ {0xE4CB, 0x8422}, //5873 #CJK UNIFIED IDEOGRAPH
+ {0xE4CC, 0x8420}, //5874 #CJK UNIFIED IDEOGRAPH
+ {0xE4CD, 0x83BD}, //5875 #CJK UNIFIED IDEOGRAPH
+ {0xE4CE, 0x8438}, //5876 #CJK UNIFIED IDEOGRAPH
+ {0xE4CF, 0x8506}, //5877 #CJK UNIFIED IDEOGRAPH
+ {0xE4D0, 0x83FB}, //5878 #CJK UNIFIED IDEOGRAPH
+ {0xE4D1, 0x846D}, //5879 #CJK UNIFIED IDEOGRAPH
+ {0xE4D2, 0x842A}, //5880 #CJK UNIFIED IDEOGRAPH
+ {0xE4D3, 0x843C}, //5881 #CJK UNIFIED IDEOGRAPH
+ {0xE4D4, 0x855A}, //5882 #CJK UNIFIED IDEOGRAPH
+ {0xE4D5, 0x8484}, //5883 #CJK UNIFIED IDEOGRAPH
+ {0xE4D6, 0x8477}, //5884 #CJK UNIFIED IDEOGRAPH
+ {0xE4D7, 0x846B}, //5885 #CJK UNIFIED IDEOGRAPH
+ {0xE4D8, 0x84AD}, //5886 #CJK UNIFIED IDEOGRAPH
+ {0xE4D9, 0x846E}, //5887 #CJK UNIFIED IDEOGRAPH
+ {0xE4DA, 0x8482}, //5888 #CJK UNIFIED IDEOGRAPH
+ {0xE4DB, 0x8469}, //5889 #CJK UNIFIED IDEOGRAPH
+ {0xE4DC, 0x8446}, //5890 #CJK UNIFIED IDEOGRAPH
+ {0xE4DD, 0x842C}, //5891 #CJK UNIFIED IDEOGRAPH
+ {0xE4DE, 0x846F}, //5892 #CJK UNIFIED IDEOGRAPH
+ {0xE4DF, 0x8479}, //5893 #CJK UNIFIED IDEOGRAPH
+ {0xE4E0, 0x8435}, //5894 #CJK UNIFIED IDEOGRAPH
+ {0xE4E1, 0x84CA}, //5895 #CJK UNIFIED IDEOGRAPH
+ {0xE4E2, 0x8462}, //5896 #CJK UNIFIED IDEOGRAPH
+ {0xE4E3, 0x84B9}, //5897 #CJK UNIFIED IDEOGRAPH
+ {0xE4E4, 0x84BF}, //5898 #CJK UNIFIED IDEOGRAPH
+ {0xE4E5, 0x849F}, //5899 #CJK UNIFIED IDEOGRAPH
+ {0xE4E6, 0x84D9}, //5900 #CJK UNIFIED IDEOGRAPH
+ {0xE4E7, 0x84CD}, //5901 #CJK UNIFIED IDEOGRAPH
+ {0xE4E8, 0x84BB}, //5902 #CJK UNIFIED IDEOGRAPH
+ {0xE4E9, 0x84DA}, //5903 #CJK UNIFIED IDEOGRAPH
+ {0xE4EA, 0x84D0}, //5904 #CJK UNIFIED IDEOGRAPH
+ {0xE4EB, 0x84C1}, //5905 #CJK UNIFIED IDEOGRAPH
+ {0xE4EC, 0x84C6}, //5906 #CJK UNIFIED IDEOGRAPH
+ {0xE4ED, 0x84D6}, //5907 #CJK UNIFIED IDEOGRAPH
+ {0xE4EE, 0x84A1}, //5908 #CJK UNIFIED IDEOGRAPH
+ {0xE4EF, 0x8521}, //5909 #CJK UNIFIED IDEOGRAPH
+ {0xE4F0, 0x84FF}, //5910 #CJK UNIFIED IDEOGRAPH
+ {0xE4F1, 0x84F4}, //5911 #CJK UNIFIED IDEOGRAPH
+ {0xE4F2, 0x8517}, //5912 #CJK UNIFIED IDEOGRAPH
+ {0xE4F3, 0x8518}, //5913 #CJK UNIFIED IDEOGRAPH
+ {0xE4F4, 0x852C}, //5914 #CJK UNIFIED IDEOGRAPH
+ {0xE4F5, 0x851F}, //5915 #CJK UNIFIED IDEOGRAPH
+ {0xE4F6, 0x8515}, //5916 #CJK UNIFIED IDEOGRAPH
+ {0xE4F7, 0x8514}, //5917 #CJK UNIFIED IDEOGRAPH
+ {0xE4F8, 0x84FC}, //5918 #CJK UNIFIED IDEOGRAPH
+ {0xE4F9, 0x8540}, //5919 #CJK UNIFIED IDEOGRAPH
+ {0xE4FA, 0x8563}, //5920 #CJK UNIFIED IDEOGRAPH
+ {0xE4FB, 0x8558}, //5921 #CJK UNIFIED IDEOGRAPH
+ {0xE4FC, 0x8548}, //5922 #CJK UNIFIED IDEOGRAPH
+ {0xE540, 0x8541}, //5923 #CJK UNIFIED IDEOGRAPH
+ {0xE541, 0x8602}, //5924 #CJK UNIFIED IDEOGRAPH
+ {0xE542, 0x854B}, //5925 #CJK UNIFIED IDEOGRAPH
+ {0xE543, 0x8555}, //5926 #CJK UNIFIED IDEOGRAPH
+ {0xE544, 0x8580}, //5927 #CJK UNIFIED IDEOGRAPH
+ {0xE545, 0x85A4}, //5928 #CJK UNIFIED IDEOGRAPH
+ {0xE546, 0x8588}, //5929 #CJK UNIFIED IDEOGRAPH
+ {0xE547, 0x8591}, //5930 #CJK UNIFIED IDEOGRAPH
+ {0xE548, 0x858A}, //5931 #CJK UNIFIED IDEOGRAPH
+ {0xE549, 0x85A8}, //5932 #CJK UNIFIED IDEOGRAPH
+ {0xE54A, 0x856D}, //5933 #CJK UNIFIED IDEOGRAPH
+ {0xE54B, 0x8594}, //5934 #CJK UNIFIED IDEOGRAPH
+ {0xE54C, 0x859B}, //5935 #CJK UNIFIED IDEOGRAPH
+ {0xE54D, 0x85EA}, //5936 #CJK UNIFIED IDEOGRAPH
+ {0xE54E, 0x8587}, //5937 #CJK UNIFIED IDEOGRAPH
+ {0xE54F, 0x859C}, //5938 #CJK UNIFIED IDEOGRAPH
+ {0xE550, 0x8577}, //5939 #CJK UNIFIED IDEOGRAPH
+ {0xE551, 0x857E}, //5940 #CJK UNIFIED IDEOGRAPH
+ {0xE552, 0x8590}, //5941 #CJK UNIFIED IDEOGRAPH
+ {0xE553, 0x85C9}, //5942 #CJK UNIFIED IDEOGRAPH
+ {0xE554, 0x85BA}, //5943 #CJK UNIFIED IDEOGRAPH
+ {0xE555, 0x85CF}, //5944 #CJK UNIFIED IDEOGRAPH
+ {0xE556, 0x85B9}, //5945 #CJK UNIFIED IDEOGRAPH
+ {0xE557, 0x85D0}, //5946 #CJK UNIFIED IDEOGRAPH
+ {0xE558, 0x85D5}, //5947 #CJK UNIFIED IDEOGRAPH
+ {0xE559, 0x85DD}, //5948 #CJK UNIFIED IDEOGRAPH
+ {0xE55A, 0x85E5}, //5949 #CJK UNIFIED IDEOGRAPH
+ {0xE55B, 0x85DC}, //5950 #CJK UNIFIED IDEOGRAPH
+ {0xE55C, 0x85F9}, //5951 #CJK UNIFIED IDEOGRAPH
+ {0xE55D, 0x860A}, //5952 #CJK UNIFIED IDEOGRAPH
+ {0xE55E, 0x8613}, //5953 #CJK UNIFIED IDEOGRAPH
+ {0xE55F, 0x860B}, //5954 #CJK UNIFIED IDEOGRAPH
+ {0xE560, 0x85FE}, //5955 #CJK UNIFIED IDEOGRAPH
+ {0xE561, 0x85FA}, //5956 #CJK UNIFIED IDEOGRAPH
+ {0xE562, 0x8606}, //5957 #CJK UNIFIED IDEOGRAPH
+ {0xE563, 0x8622}, //5958 #CJK UNIFIED IDEOGRAPH
+ {0xE564, 0x861A}, //5959 #CJK UNIFIED IDEOGRAPH
+ {0xE565, 0x8630}, //5960 #CJK UNIFIED IDEOGRAPH
+ {0xE566, 0x863F}, //5961 #CJK UNIFIED IDEOGRAPH
+ {0xE567, 0x864D}, //5962 #CJK UNIFIED IDEOGRAPH
+ {0xE568, 0x4E55}, //5963 #CJK UNIFIED IDEOGRAPH
+ {0xE569, 0x8654}, //5964 #CJK UNIFIED IDEOGRAPH
+ {0xE56A, 0x865F}, //5965 #CJK UNIFIED IDEOGRAPH
+ {0xE56B, 0x8667}, //5966 #CJK UNIFIED IDEOGRAPH
+ {0xE56C, 0x8671}, //5967 #CJK UNIFIED IDEOGRAPH
+ {0xE56D, 0x8693}, //5968 #CJK UNIFIED IDEOGRAPH
+ {0xE56E, 0x86A3}, //5969 #CJK UNIFIED IDEOGRAPH
+ {0xE56F, 0x86A9}, //5970 #CJK UNIFIED IDEOGRAPH
+ {0xE570, 0x86AA}, //5971 #CJK UNIFIED IDEOGRAPH
+ {0xE571, 0x868B}, //5972 #CJK UNIFIED IDEOGRAPH
+ {0xE572, 0x868C}, //5973 #CJK UNIFIED IDEOGRAPH
+ {0xE573, 0x86B6}, //5974 #CJK UNIFIED IDEOGRAPH
+ {0xE574, 0x86AF}, //5975 #CJK UNIFIED IDEOGRAPH
+ {0xE575, 0x86C4}, //5976 #CJK UNIFIED IDEOGRAPH
+ {0xE576, 0x86C6}, //5977 #CJK UNIFIED IDEOGRAPH
+ {0xE577, 0x86B0}, //5978 #CJK UNIFIED IDEOGRAPH
+ {0xE578, 0x86C9}, //5979 #CJK UNIFIED IDEOGRAPH
+ {0xE579, 0x8823}, //5980 #CJK UNIFIED IDEOGRAPH
+ {0xE57A, 0x86AB}, //5981 #CJK UNIFIED IDEOGRAPH
+ {0xE57B, 0x86D4}, //5982 #CJK UNIFIED IDEOGRAPH
+ {0xE57C, 0x86DE}, //5983 #CJK UNIFIED IDEOGRAPH
+ {0xE57D, 0x86E9}, //5984 #CJK UNIFIED IDEOGRAPH
+ {0xE57E, 0x86EC}, //5985 #CJK UNIFIED IDEOGRAPH
+ {0xE580, 0x86DF}, //5986 #CJK UNIFIED IDEOGRAPH
+ {0xE581, 0x86DB}, //5987 #CJK UNIFIED IDEOGRAPH
+ {0xE582, 0x86EF}, //5988 #CJK UNIFIED IDEOGRAPH
+ {0xE583, 0x8712}, //5989 #CJK UNIFIED IDEOGRAPH
+ {0xE584, 0x8706}, //5990 #CJK UNIFIED IDEOGRAPH
+ {0xE585, 0x8708}, //5991 #CJK UNIFIED IDEOGRAPH
+ {0xE586, 0x8700}, //5992 #CJK UNIFIED IDEOGRAPH
+ {0xE587, 0x8703}, //5993 #CJK UNIFIED IDEOGRAPH
+ {0xE588, 0x86FB}, //5994 #CJK UNIFIED IDEOGRAPH
+ {0xE589, 0x8711}, //5995 #CJK UNIFIED IDEOGRAPH
+ {0xE58A, 0x8709}, //5996 #CJK UNIFIED IDEOGRAPH
+ {0xE58B, 0x870D}, //5997 #CJK UNIFIED IDEOGRAPH
+ {0xE58C, 0x86F9}, //5998 #CJK UNIFIED IDEOGRAPH
+ {0xE58D, 0x870A}, //5999 #CJK UNIFIED IDEOGRAPH
+ {0xE58E, 0x8734}, //6000 #CJK UNIFIED IDEOGRAPH
+ {0xE58F, 0x873F}, //6001 #CJK UNIFIED IDEOGRAPH
+ {0xE590, 0x8737}, //6002 #CJK UNIFIED IDEOGRAPH
+ {0xE591, 0x873B}, //6003 #CJK UNIFIED IDEOGRAPH
+ {0xE592, 0x8725}, //6004 #CJK UNIFIED IDEOGRAPH
+ {0xE593, 0x8729}, //6005 #CJK UNIFIED IDEOGRAPH
+ {0xE594, 0x871A}, //6006 #CJK UNIFIED IDEOGRAPH
+ {0xE595, 0x8760}, //6007 #CJK UNIFIED IDEOGRAPH
+ {0xE596, 0x875F}, //6008 #CJK UNIFIED IDEOGRAPH
+ {0xE597, 0x8778}, //6009 #CJK UNIFIED IDEOGRAPH
+ {0xE598, 0x874C}, //6010 #CJK UNIFIED IDEOGRAPH
+ {0xE599, 0x874E}, //6011 #CJK UNIFIED IDEOGRAPH
+ {0xE59A, 0x8774}, //6012 #CJK UNIFIED IDEOGRAPH
+ {0xE59B, 0x8757}, //6013 #CJK UNIFIED IDEOGRAPH
+ {0xE59C, 0x8768}, //6014 #CJK UNIFIED IDEOGRAPH
+ {0xE59D, 0x876E}, //6015 #CJK UNIFIED IDEOGRAPH
+ {0xE59E, 0x8759}, //6016 #CJK UNIFIED IDEOGRAPH
+ {0xE59F, 0x8753}, //6017 #CJK UNIFIED IDEOGRAPH
+ {0xE5A0, 0x8763}, //6018 #CJK UNIFIED IDEOGRAPH
+ {0xE5A1, 0x876A}, //6019 #CJK UNIFIED IDEOGRAPH
+ {0xE5A2, 0x8805}, //6020 #CJK UNIFIED IDEOGRAPH
+ {0xE5A3, 0x87A2}, //6021 #CJK UNIFIED IDEOGRAPH
+ {0xE5A4, 0x879F}, //6022 #CJK UNIFIED IDEOGRAPH
+ {0xE5A5, 0x8782}, //6023 #CJK UNIFIED IDEOGRAPH
+ {0xE5A6, 0x87AF}, //6024 #CJK UNIFIED IDEOGRAPH
+ {0xE5A7, 0x87CB}, //6025 #CJK UNIFIED IDEOGRAPH
+ {0xE5A8, 0x87BD}, //6026 #CJK UNIFIED IDEOGRAPH
+ {0xE5A9, 0x87C0}, //6027 #CJK UNIFIED IDEOGRAPH
+ {0xE5AA, 0x87D0}, //6028 #CJK UNIFIED IDEOGRAPH
+ {0xE5AB, 0x96D6}, //6029 #CJK UNIFIED IDEOGRAPH
+ {0xE5AC, 0x87AB}, //6030 #CJK UNIFIED IDEOGRAPH
+ {0xE5AD, 0x87C4}, //6031 #CJK UNIFIED IDEOGRAPH
+ {0xE5AE, 0x87B3}, //6032 #CJK UNIFIED IDEOGRAPH
+ {0xE5AF, 0x87C7}, //6033 #CJK UNIFIED IDEOGRAPH
+ {0xE5B0, 0x87C6}, //6034 #CJK UNIFIED IDEOGRAPH
+ {0xE5B1, 0x87BB}, //6035 #CJK UNIFIED IDEOGRAPH
+ {0xE5B2, 0x87EF}, //6036 #CJK UNIFIED IDEOGRAPH
+ {0xE5B3, 0x87F2}, //6037 #CJK UNIFIED IDEOGRAPH
+ {0xE5B4, 0x87E0}, //6038 #CJK UNIFIED IDEOGRAPH
+ {0xE5B5, 0x880F}, //6039 #CJK UNIFIED IDEOGRAPH
+ {0xE5B6, 0x880D}, //6040 #CJK UNIFIED IDEOGRAPH
+ {0xE5B7, 0x87FE}, //6041 #CJK UNIFIED IDEOGRAPH
+ {0xE5B8, 0x87F6}, //6042 #CJK UNIFIED IDEOGRAPH
+ {0xE5B9, 0x87F7}, //6043 #CJK UNIFIED IDEOGRAPH
+ {0xE5BA, 0x880E}, //6044 #CJK UNIFIED IDEOGRAPH
+ {0xE5BB, 0x87D2}, //6045 #CJK UNIFIED IDEOGRAPH
+ {0xE5BC, 0x8811}, //6046 #CJK UNIFIED IDEOGRAPH
+ {0xE5BD, 0x8816}, //6047 #CJK UNIFIED IDEOGRAPH
+ {0xE5BE, 0x8815}, //6048 #CJK UNIFIED IDEOGRAPH
+ {0xE5BF, 0x8822}, //6049 #CJK UNIFIED IDEOGRAPH
+ {0xE5C0, 0x8821}, //6050 #CJK UNIFIED IDEOGRAPH
+ {0xE5C1, 0x8831}, //6051 #CJK UNIFIED IDEOGRAPH
+ {0xE5C2, 0x8836}, //6052 #CJK UNIFIED IDEOGRAPH
+ {0xE5C3, 0x8839}, //6053 #CJK UNIFIED IDEOGRAPH
+ {0xE5C4, 0x8827}, //6054 #CJK UNIFIED IDEOGRAPH
+ {0xE5C5, 0x883B}, //6055 #CJK UNIFIED IDEOGRAPH
+ {0xE5C6, 0x8844}, //6056 #CJK UNIFIED IDEOGRAPH
+ {0xE5C7, 0x8842}, //6057 #CJK UNIFIED IDEOGRAPH
+ {0xE5C8, 0x8852}, //6058 #CJK UNIFIED IDEOGRAPH
+ {0xE5C9, 0x8859}, //6059 #CJK UNIFIED IDEOGRAPH
+ {0xE5CA, 0x885E}, //6060 #CJK UNIFIED IDEOGRAPH
+ {0xE5CB, 0x8862}, //6061 #CJK UNIFIED IDEOGRAPH
+ {0xE5CC, 0x886B}, //6062 #CJK UNIFIED IDEOGRAPH
+ {0xE5CD, 0x8881}, //6063 #CJK UNIFIED IDEOGRAPH
+ {0xE5CE, 0x887E}, //6064 #CJK UNIFIED IDEOGRAPH
+ {0xE5CF, 0x889E}, //6065 #CJK UNIFIED IDEOGRAPH
+ {0xE5D0, 0x8875}, //6066 #CJK UNIFIED IDEOGRAPH
+ {0xE5D1, 0x887D}, //6067 #CJK UNIFIED IDEOGRAPH
+ {0xE5D2, 0x88B5}, //6068 #CJK UNIFIED IDEOGRAPH
+ {0xE5D3, 0x8872}, //6069 #CJK UNIFIED IDEOGRAPH
+ {0xE5D4, 0x8882}, //6070 #CJK UNIFIED IDEOGRAPH
+ {0xE5D5, 0x8897}, //6071 #CJK UNIFIED IDEOGRAPH
+ {0xE5D6, 0x8892}, //6072 #CJK UNIFIED IDEOGRAPH
+ {0xE5D7, 0x88AE}, //6073 #CJK UNIFIED IDEOGRAPH
+ {0xE5D8, 0x8899}, //6074 #CJK UNIFIED IDEOGRAPH
+ {0xE5D9, 0x88A2}, //6075 #CJK UNIFIED IDEOGRAPH
+ {0xE5DA, 0x888D}, //6076 #CJK UNIFIED IDEOGRAPH
+ {0xE5DB, 0x88A4}, //6077 #CJK UNIFIED IDEOGRAPH
+ {0xE5DC, 0x88B0}, //6078 #CJK UNIFIED IDEOGRAPH
+ {0xE5DD, 0x88BF}, //6079 #CJK UNIFIED IDEOGRAPH
+ {0xE5DE, 0x88B1}, //6080 #CJK UNIFIED IDEOGRAPH
+ {0xE5DF, 0x88C3}, //6081 #CJK UNIFIED IDEOGRAPH
+ {0xE5E0, 0x88C4}, //6082 #CJK UNIFIED IDEOGRAPH
+ {0xE5E1, 0x88D4}, //6083 #CJK UNIFIED IDEOGRAPH
+ {0xE5E2, 0x88D8}, //6084 #CJK UNIFIED IDEOGRAPH
+ {0xE5E3, 0x88D9}, //6085 #CJK UNIFIED IDEOGRAPH
+ {0xE5E4, 0x88DD}, //6086 #CJK UNIFIED IDEOGRAPH
+ {0xE5E5, 0x88F9}, //6087 #CJK UNIFIED IDEOGRAPH
+ {0xE5E6, 0x8902}, //6088 #CJK UNIFIED IDEOGRAPH
+ {0xE5E7, 0x88FC}, //6089 #CJK UNIFIED IDEOGRAPH
+ {0xE5E8, 0x88F4}, //6090 #CJK UNIFIED IDEOGRAPH
+ {0xE5E9, 0x88E8}, //6091 #CJK UNIFIED IDEOGRAPH
+ {0xE5EA, 0x88F2}, //6092 #CJK UNIFIED IDEOGRAPH
+ {0xE5EB, 0x8904}, //6093 #CJK UNIFIED IDEOGRAPH
+ {0xE5EC, 0x890C}, //6094 #CJK UNIFIED IDEOGRAPH
+ {0xE5ED, 0x890A}, //6095 #CJK UNIFIED IDEOGRAPH
+ {0xE5EE, 0x8913}, //6096 #CJK UNIFIED IDEOGRAPH
+ {0xE5EF, 0x8943}, //6097 #CJK UNIFIED IDEOGRAPH
+ {0xE5F0, 0x891E}, //6098 #CJK UNIFIED IDEOGRAPH
+ {0xE5F1, 0x8925}, //6099 #CJK UNIFIED IDEOGRAPH
+ {0xE5F2, 0x892A}, //6100 #CJK UNIFIED IDEOGRAPH
+ {0xE5F3, 0x892B}, //6101 #CJK UNIFIED IDEOGRAPH
+ {0xE5F4, 0x8941}, //6102 #CJK UNIFIED IDEOGRAPH
+ {0xE5F5, 0x8944}, //6103 #CJK UNIFIED IDEOGRAPH
+ {0xE5F6, 0x893B}, //6104 #CJK UNIFIED IDEOGRAPH
+ {0xE5F7, 0x8936}, //6105 #CJK UNIFIED IDEOGRAPH
+ {0xE5F8, 0x8938}, //6106 #CJK UNIFIED IDEOGRAPH
+ {0xE5F9, 0x894C}, //6107 #CJK UNIFIED IDEOGRAPH
+ {0xE5FA, 0x891D}, //6108 #CJK UNIFIED IDEOGRAPH
+ {0xE5FB, 0x8960}, //6109 #CJK UNIFIED IDEOGRAPH
+ {0xE5FC, 0x895E}, //6110 #CJK UNIFIED IDEOGRAPH
+ {0xE640, 0x8966}, //6111 #CJK UNIFIED IDEOGRAPH
+ {0xE641, 0x8964}, //6112 #CJK UNIFIED IDEOGRAPH
+ {0xE642, 0x896D}, //6113 #CJK UNIFIED IDEOGRAPH
+ {0xE643, 0x896A}, //6114 #CJK UNIFIED IDEOGRAPH
+ {0xE644, 0x896F}, //6115 #CJK UNIFIED IDEOGRAPH
+ {0xE645, 0x8974}, //6116 #CJK UNIFIED IDEOGRAPH
+ {0xE646, 0x8977}, //6117 #CJK UNIFIED IDEOGRAPH
+ {0xE647, 0x897E}, //6118 #CJK UNIFIED IDEOGRAPH
+ {0xE648, 0x8983}, //6119 #CJK UNIFIED IDEOGRAPH
+ {0xE649, 0x8988}, //6120 #CJK UNIFIED IDEOGRAPH
+ {0xE64A, 0x898A}, //6121 #CJK UNIFIED IDEOGRAPH
+ {0xE64B, 0x8993}, //6122 #CJK UNIFIED IDEOGRAPH
+ {0xE64C, 0x8998}, //6123 #CJK UNIFIED IDEOGRAPH
+ {0xE64D, 0x89A1}, //6124 #CJK UNIFIED IDEOGRAPH
+ {0xE64E, 0x89A9}, //6125 #CJK UNIFIED IDEOGRAPH
+ {0xE64F, 0x89A6}, //6126 #CJK UNIFIED IDEOGRAPH
+ {0xE650, 0x89AC}, //6127 #CJK UNIFIED IDEOGRAPH
+ {0xE651, 0x89AF}, //6128 #CJK UNIFIED IDEOGRAPH
+ {0xE652, 0x89B2}, //6129 #CJK UNIFIED IDEOGRAPH
+ {0xE653, 0x89BA}, //6130 #CJK UNIFIED IDEOGRAPH
+ {0xE654, 0x89BD}, //6131 #CJK UNIFIED IDEOGRAPH
+ {0xE655, 0x89BF}, //6132 #CJK UNIFIED IDEOGRAPH
+ {0xE656, 0x89C0}, //6133 #CJK UNIFIED IDEOGRAPH
+ {0xE657, 0x89DA}, //6134 #CJK UNIFIED IDEOGRAPH
+ {0xE658, 0x89DC}, //6135 #CJK UNIFIED IDEOGRAPH
+ {0xE659, 0x89DD}, //6136 #CJK UNIFIED IDEOGRAPH
+ {0xE65A, 0x89E7}, //6137 #CJK UNIFIED IDEOGRAPH
+ {0xE65B, 0x89F4}, //6138 #CJK UNIFIED IDEOGRAPH
+ {0xE65C, 0x89F8}, //6139 #CJK UNIFIED IDEOGRAPH
+ {0xE65D, 0x8A03}, //6140 #CJK UNIFIED IDEOGRAPH
+ {0xE65E, 0x8A16}, //6141 #CJK UNIFIED IDEOGRAPH
+ {0xE65F, 0x8A10}, //6142 #CJK UNIFIED IDEOGRAPH
+ {0xE660, 0x8A0C}, //6143 #CJK UNIFIED IDEOGRAPH
+ {0xE661, 0x8A1B}, //6144 #CJK UNIFIED IDEOGRAPH
+ {0xE662, 0x8A1D}, //6145 #CJK UNIFIED IDEOGRAPH
+ {0xE663, 0x8A25}, //6146 #CJK UNIFIED IDEOGRAPH
+ {0xE664, 0x8A36}, //6147 #CJK UNIFIED IDEOGRAPH
+ {0xE665, 0x8A41}, //6148 #CJK UNIFIED IDEOGRAPH
+ {0xE666, 0x8A5B}, //6149 #CJK UNIFIED IDEOGRAPH
+ {0xE667, 0x8A52}, //6150 #CJK UNIFIED IDEOGRAPH
+ {0xE668, 0x8A46}, //6151 #CJK UNIFIED IDEOGRAPH
+ {0xE669, 0x8A48}, //6152 #CJK UNIFIED IDEOGRAPH
+ {0xE66A, 0x8A7C}, //6153 #CJK UNIFIED IDEOGRAPH
+ {0xE66B, 0x8A6D}, //6154 #CJK UNIFIED IDEOGRAPH
+ {0xE66C, 0x8A6C}, //6155 #CJK UNIFIED IDEOGRAPH
+ {0xE66D, 0x8A62}, //6156 #CJK UNIFIED IDEOGRAPH
+ {0xE66E, 0x8A85}, //6157 #CJK UNIFIED IDEOGRAPH
+ {0xE66F, 0x8A82}, //6158 #CJK UNIFIED IDEOGRAPH
+ {0xE670, 0x8A84}, //6159 #CJK UNIFIED IDEOGRAPH
+ {0xE671, 0x8AA8}, //6160 #CJK UNIFIED IDEOGRAPH
+ {0xE672, 0x8AA1}, //6161 #CJK UNIFIED IDEOGRAPH
+ {0xE673, 0x8A91}, //6162 #CJK UNIFIED IDEOGRAPH
+ {0xE674, 0x8AA5}, //6163 #CJK UNIFIED IDEOGRAPH
+ {0xE675, 0x8AA6}, //6164 #CJK UNIFIED IDEOGRAPH
+ {0xE676, 0x8A9A}, //6165 #CJK UNIFIED IDEOGRAPH
+ {0xE677, 0x8AA3}, //6166 #CJK UNIFIED IDEOGRAPH
+ {0xE678, 0x8AC4}, //6167 #CJK UNIFIED IDEOGRAPH
+ {0xE679, 0x8ACD}, //6168 #CJK UNIFIED IDEOGRAPH
+ {0xE67A, 0x8AC2}, //6169 #CJK UNIFIED IDEOGRAPH
+ {0xE67B, 0x8ADA}, //6170 #CJK UNIFIED IDEOGRAPH
+ {0xE67C, 0x8AEB}, //6171 #CJK UNIFIED IDEOGRAPH
+ {0xE67D, 0x8AF3}, //6172 #CJK UNIFIED IDEOGRAPH
+ {0xE67E, 0x8AE7}, //6173 #CJK UNIFIED IDEOGRAPH
+ {0xE680, 0x8AE4}, //6174 #CJK UNIFIED IDEOGRAPH
+ {0xE681, 0x8AF1}, //6175 #CJK UNIFIED IDEOGRAPH
+ {0xE682, 0x8B14}, //6176 #CJK UNIFIED IDEOGRAPH
+ {0xE683, 0x8AE0}, //6177 #CJK UNIFIED IDEOGRAPH
+ {0xE684, 0x8AE2}, //6178 #CJK UNIFIED IDEOGRAPH
+ {0xE685, 0x8AF7}, //6179 #CJK UNIFIED IDEOGRAPH
+ {0xE686, 0x8ADE}, //6180 #CJK UNIFIED IDEOGRAPH
+ {0xE687, 0x8ADB}, //6181 #CJK UNIFIED IDEOGRAPH
+ {0xE688, 0x8B0C}, //6182 #CJK UNIFIED IDEOGRAPH
+ {0xE689, 0x8B07}, //6183 #CJK UNIFIED IDEOGRAPH
+ {0xE68A, 0x8B1A}, //6184 #CJK UNIFIED IDEOGRAPH
+ {0xE68B, 0x8AE1}, //6185 #CJK UNIFIED IDEOGRAPH
+ {0xE68C, 0x8B16}, //6186 #CJK UNIFIED IDEOGRAPH
+ {0xE68D, 0x8B10}, //6187 #CJK UNIFIED IDEOGRAPH
+ {0xE68E, 0x8B17}, //6188 #CJK UNIFIED IDEOGRAPH
+ {0xE68F, 0x8B20}, //6189 #CJK UNIFIED IDEOGRAPH
+ {0xE690, 0x8B33}, //6190 #CJK UNIFIED IDEOGRAPH
+ {0xE691, 0x97AB}, //6191 #CJK UNIFIED IDEOGRAPH
+ {0xE692, 0x8B26}, //6192 #CJK UNIFIED IDEOGRAPH
+ {0xE693, 0x8B2B}, //6193 #CJK UNIFIED IDEOGRAPH
+ {0xE694, 0x8B3E}, //6194 #CJK UNIFIED IDEOGRAPH
+ {0xE695, 0x8B28}, //6195 #CJK UNIFIED IDEOGRAPH
+ {0xE696, 0x8B41}, //6196 #CJK UNIFIED IDEOGRAPH
+ {0xE697, 0x8B4C}, //6197 #CJK UNIFIED IDEOGRAPH
+ {0xE698, 0x8B4F}, //6198 #CJK UNIFIED IDEOGRAPH
+ {0xE699, 0x8B4E}, //6199 #CJK UNIFIED IDEOGRAPH
+ {0xE69A, 0x8B49}, //6200 #CJK UNIFIED IDEOGRAPH
+ {0xE69B, 0x8B56}, //6201 #CJK UNIFIED IDEOGRAPH
+ {0xE69C, 0x8B5B}, //6202 #CJK UNIFIED IDEOGRAPH
+ {0xE69D, 0x8B5A}, //6203 #CJK UNIFIED IDEOGRAPH
+ {0xE69E, 0x8B6B}, //6204 #CJK UNIFIED IDEOGRAPH
+ {0xE69F, 0x8B5F}, //6205 #CJK UNIFIED IDEOGRAPH
+ {0xE6A0, 0x8B6C}, //6206 #CJK UNIFIED IDEOGRAPH
+ {0xE6A1, 0x8B6F}, //6207 #CJK UNIFIED IDEOGRAPH
+ {0xE6A2, 0x8B74}, //6208 #CJK UNIFIED IDEOGRAPH
+ {0xE6A3, 0x8B7D}, //6209 #CJK UNIFIED IDEOGRAPH
+ {0xE6A4, 0x8B80}, //6210 #CJK UNIFIED IDEOGRAPH
+ {0xE6A5, 0x8B8C}, //6211 #CJK UNIFIED IDEOGRAPH
+ {0xE6A6, 0x8B8E}, //6212 #CJK UNIFIED IDEOGRAPH
+ {0xE6A7, 0x8B92}, //6213 #CJK UNIFIED IDEOGRAPH
+ {0xE6A8, 0x8B93}, //6214 #CJK UNIFIED IDEOGRAPH
+ {0xE6A9, 0x8B96}, //6215 #CJK UNIFIED IDEOGRAPH
+ {0xE6AA, 0x8B99}, //6216 #CJK UNIFIED IDEOGRAPH
+ {0xE6AB, 0x8B9A}, //6217 #CJK UNIFIED IDEOGRAPH
+ {0xE6AC, 0x8C3A}, //6218 #CJK UNIFIED IDEOGRAPH
+ {0xE6AD, 0x8C41}, //6219 #CJK UNIFIED IDEOGRAPH
+ {0xE6AE, 0x8C3F}, //6220 #CJK UNIFIED IDEOGRAPH
+ {0xE6AF, 0x8C48}, //6221 #CJK UNIFIED IDEOGRAPH
+ {0xE6B0, 0x8C4C}, //6222 #CJK UNIFIED IDEOGRAPH
+ {0xE6B1, 0x8C4E}, //6223 #CJK UNIFIED IDEOGRAPH
+ {0xE6B2, 0x8C50}, //6224 #CJK UNIFIED IDEOGRAPH
+ {0xE6B3, 0x8C55}, //6225 #CJK UNIFIED IDEOGRAPH
+ {0xE6B4, 0x8C62}, //6226 #CJK UNIFIED IDEOGRAPH
+ {0xE6B5, 0x8C6C}, //6227 #CJK UNIFIED IDEOGRAPH
+ {0xE6B6, 0x8C78}, //6228 #CJK UNIFIED IDEOGRAPH
+ {0xE6B7, 0x8C7A}, //6229 #CJK UNIFIED IDEOGRAPH
+ {0xE6B8, 0x8C82}, //6230 #CJK UNIFIED IDEOGRAPH
+ {0xE6B9, 0x8C89}, //6231 #CJK UNIFIED IDEOGRAPH
+ {0xE6BA, 0x8C85}, //6232 #CJK UNIFIED IDEOGRAPH
+ {0xE6BB, 0x8C8A}, //6233 #CJK UNIFIED IDEOGRAPH
+ {0xE6BC, 0x8C8D}, //6234 #CJK UNIFIED IDEOGRAPH
+ {0xE6BD, 0x8C8E}, //6235 #CJK UNIFIED IDEOGRAPH
+ {0xE6BE, 0x8C94}, //6236 #CJK UNIFIED IDEOGRAPH
+ {0xE6BF, 0x8C7C}, //6237 #CJK UNIFIED IDEOGRAPH
+ {0xE6C0, 0x8C98}, //6238 #CJK UNIFIED IDEOGRAPH
+ {0xE6C1, 0x621D}, //6239 #CJK UNIFIED IDEOGRAPH
+ {0xE6C2, 0x8CAD}, //6240 #CJK UNIFIED IDEOGRAPH
+ {0xE6C3, 0x8CAA}, //6241 #CJK UNIFIED IDEOGRAPH
+ {0xE6C4, 0x8CBD}, //6242 #CJK UNIFIED IDEOGRAPH
+ {0xE6C5, 0x8CB2}, //6243 #CJK UNIFIED IDEOGRAPH
+ {0xE6C6, 0x8CB3}, //6244 #CJK UNIFIED IDEOGRAPH
+ {0xE6C7, 0x8CAE}, //6245 #CJK UNIFIED IDEOGRAPH
+ {0xE6C8, 0x8CB6}, //6246 #CJK UNIFIED IDEOGRAPH
+ {0xE6C9, 0x8CC8}, //6247 #CJK UNIFIED IDEOGRAPH
+ {0xE6CA, 0x8CC1}, //6248 #CJK UNIFIED IDEOGRAPH
+ {0xE6CB, 0x8CE4}, //6249 #CJK UNIFIED IDEOGRAPH
+ {0xE6CC, 0x8CE3}, //6250 #CJK UNIFIED IDEOGRAPH
+ {0xE6CD, 0x8CDA}, //6251 #CJK UNIFIED IDEOGRAPH
+ {0xE6CE, 0x8CFD}, //6252 #CJK UNIFIED IDEOGRAPH
+ {0xE6CF, 0x8CFA}, //6253 #CJK UNIFIED IDEOGRAPH
+ {0xE6D0, 0x8CFB}, //6254 #CJK UNIFIED IDEOGRAPH
+ {0xE6D1, 0x8D04}, //6255 #CJK UNIFIED IDEOGRAPH
+ {0xE6D2, 0x8D05}, //6256 #CJK UNIFIED IDEOGRAPH
+ {0xE6D3, 0x8D0A}, //6257 #CJK UNIFIED IDEOGRAPH
+ {0xE6D4, 0x8D07}, //6258 #CJK UNIFIED IDEOGRAPH
+ {0xE6D5, 0x8D0F}, //6259 #CJK UNIFIED IDEOGRAPH
+ {0xE6D6, 0x8D0D}, //6260 #CJK UNIFIED IDEOGRAPH
+ {0xE6D7, 0x8D10}, //6261 #CJK UNIFIED IDEOGRAPH
+ {0xE6D8, 0x9F4E}, //6262 #CJK UNIFIED IDEOGRAPH
+ {0xE6D9, 0x8D13}, //6263 #CJK UNIFIED IDEOGRAPH
+ {0xE6DA, 0x8CCD}, //6264 #CJK UNIFIED IDEOGRAPH
+ {0xE6DB, 0x8D14}, //6265 #CJK UNIFIED IDEOGRAPH
+ {0xE6DC, 0x8D16}, //6266 #CJK UNIFIED IDEOGRAPH
+ {0xE6DD, 0x8D67}, //6267 #CJK UNIFIED IDEOGRAPH
+ {0xE6DE, 0x8D6D}, //6268 #CJK UNIFIED IDEOGRAPH
+ {0xE6DF, 0x8D71}, //6269 #CJK UNIFIED IDEOGRAPH
+ {0xE6E0, 0x8D73}, //6270 #CJK UNIFIED IDEOGRAPH
+ {0xE6E1, 0x8D81}, //6271 #CJK UNIFIED IDEOGRAPH
+ {0xE6E2, 0x8D99}, //6272 #CJK UNIFIED IDEOGRAPH
+ {0xE6E3, 0x8DC2}, //6273 #CJK UNIFIED IDEOGRAPH
+ {0xE6E4, 0x8DBE}, //6274 #CJK UNIFIED IDEOGRAPH
+ {0xE6E5, 0x8DBA}, //6275 #CJK UNIFIED IDEOGRAPH
+ {0xE6E6, 0x8DCF}, //6276 #CJK UNIFIED IDEOGRAPH
+ {0xE6E7, 0x8DDA}, //6277 #CJK UNIFIED IDEOGRAPH
+ {0xE6E8, 0x8DD6}, //6278 #CJK UNIFIED IDEOGRAPH
+ {0xE6E9, 0x8DCC}, //6279 #CJK UNIFIED IDEOGRAPH
+ {0xE6EA, 0x8DDB}, //6280 #CJK UNIFIED IDEOGRAPH
+ {0xE6EB, 0x8DCB}, //6281 #CJK UNIFIED IDEOGRAPH
+ {0xE6EC, 0x8DEA}, //6282 #CJK UNIFIED IDEOGRAPH
+ {0xE6ED, 0x8DEB}, //6283 #CJK UNIFIED IDEOGRAPH
+ {0xE6EE, 0x8DDF}, //6284 #CJK UNIFIED IDEOGRAPH
+ {0xE6EF, 0x8DE3}, //6285 #CJK UNIFIED IDEOGRAPH
+ {0xE6F0, 0x8DFC}, //6286 #CJK UNIFIED IDEOGRAPH
+ {0xE6F1, 0x8E08}, //6287 #CJK UNIFIED IDEOGRAPH
+ {0xE6F2, 0x8E09}, //6288 #CJK UNIFIED IDEOGRAPH
+ {0xE6F3, 0x8DFF}, //6289 #CJK UNIFIED IDEOGRAPH
+ {0xE6F4, 0x8E1D}, //6290 #CJK UNIFIED IDEOGRAPH
+ {0xE6F5, 0x8E1E}, //6291 #CJK UNIFIED IDEOGRAPH
+ {0xE6F6, 0x8E10}, //6292 #CJK UNIFIED IDEOGRAPH
+ {0xE6F7, 0x8E1F}, //6293 #CJK UNIFIED IDEOGRAPH
+ {0xE6F8, 0x8E42}, //6294 #CJK UNIFIED IDEOGRAPH
+ {0xE6F9, 0x8E35}, //6295 #CJK UNIFIED IDEOGRAPH
+ {0xE6FA, 0x8E30}, //6296 #CJK UNIFIED IDEOGRAPH
+ {0xE6FB, 0x8E34}, //6297 #CJK UNIFIED IDEOGRAPH
+ {0xE6FC, 0x8E4A}, //6298 #CJK UNIFIED IDEOGRAPH
+ {0xE740, 0x8E47}, //6299 #CJK UNIFIED IDEOGRAPH
+ {0xE741, 0x8E49}, //6300 #CJK UNIFIED IDEOGRAPH
+ {0xE742, 0x8E4C}, //6301 #CJK UNIFIED IDEOGRAPH
+ {0xE743, 0x8E50}, //6302 #CJK UNIFIED IDEOGRAPH
+ {0xE744, 0x8E48}, //6303 #CJK UNIFIED IDEOGRAPH
+ {0xE745, 0x8E59}, //6304 #CJK UNIFIED IDEOGRAPH
+ {0xE746, 0x8E64}, //6305 #CJK UNIFIED IDEOGRAPH
+ {0xE747, 0x8E60}, //6306 #CJK UNIFIED IDEOGRAPH
+ {0xE748, 0x8E2A}, //6307 #CJK UNIFIED IDEOGRAPH
+ {0xE749, 0x8E63}, //6308 #CJK UNIFIED IDEOGRAPH
+ {0xE74A, 0x8E55}, //6309 #CJK UNIFIED IDEOGRAPH
+ {0xE74B, 0x8E76}, //6310 #CJK UNIFIED IDEOGRAPH
+ {0xE74C, 0x8E72}, //6311 #CJK UNIFIED IDEOGRAPH
+ {0xE74D, 0x8E7C}, //6312 #CJK UNIFIED IDEOGRAPH
+ {0xE74E, 0x8E81}, //6313 #CJK UNIFIED IDEOGRAPH
+ {0xE74F, 0x8E87}, //6314 #CJK UNIFIED IDEOGRAPH
+ {0xE750, 0x8E85}, //6315 #CJK UNIFIED IDEOGRAPH
+ {0xE751, 0x8E84}, //6316 #CJK UNIFIED IDEOGRAPH
+ {0xE752, 0x8E8B}, //6317 #CJK UNIFIED IDEOGRAPH
+ {0xE753, 0x8E8A}, //6318 #CJK UNIFIED IDEOGRAPH
+ {0xE754, 0x8E93}, //6319 #CJK UNIFIED IDEOGRAPH
+ {0xE755, 0x8E91}, //6320 #CJK UNIFIED IDEOGRAPH
+ {0xE756, 0x8E94}, //6321 #CJK UNIFIED IDEOGRAPH
+ {0xE757, 0x8E99}, //6322 #CJK UNIFIED IDEOGRAPH
+ {0xE758, 0x8EAA}, //6323 #CJK UNIFIED IDEOGRAPH
+ {0xE759, 0x8EA1}, //6324 #CJK UNIFIED IDEOGRAPH
+ {0xE75A, 0x8EAC}, //6325 #CJK UNIFIED IDEOGRAPH
+ {0xE75B, 0x8EB0}, //6326 #CJK UNIFIED IDEOGRAPH
+ {0xE75C, 0x8EC6}, //6327 #CJK UNIFIED IDEOGRAPH
+ {0xE75D, 0x8EB1}, //6328 #CJK UNIFIED IDEOGRAPH
+ {0xE75E, 0x8EBE}, //6329 #CJK UNIFIED IDEOGRAPH
+ {0xE75F, 0x8EC5}, //6330 #CJK UNIFIED IDEOGRAPH
+ {0xE760, 0x8EC8}, //6331 #CJK UNIFIED IDEOGRAPH
+ {0xE761, 0x8ECB}, //6332 #CJK UNIFIED IDEOGRAPH
+ {0xE762, 0x8EDB}, //6333 #CJK UNIFIED IDEOGRAPH
+ {0xE763, 0x8EE3}, //6334 #CJK UNIFIED IDEOGRAPH
+ {0xE764, 0x8EFC}, //6335 #CJK UNIFIED IDEOGRAPH
+ {0xE765, 0x8EFB}, //6336 #CJK UNIFIED IDEOGRAPH
+ {0xE766, 0x8EEB}, //6337 #CJK UNIFIED IDEOGRAPH
+ {0xE767, 0x8EFE}, //6338 #CJK UNIFIED IDEOGRAPH
+ {0xE768, 0x8F0A}, //6339 #CJK UNIFIED IDEOGRAPH
+ {0xE769, 0x8F05}, //6340 #CJK UNIFIED IDEOGRAPH
+ {0xE76A, 0x8F15}, //6341 #CJK UNIFIED IDEOGRAPH
+ {0xE76B, 0x8F12}, //6342 #CJK UNIFIED IDEOGRAPH
+ {0xE76C, 0x8F19}, //6343 #CJK UNIFIED IDEOGRAPH
+ {0xE76D, 0x8F13}, //6344 #CJK UNIFIED IDEOGRAPH
+ {0xE76E, 0x8F1C}, //6345 #CJK UNIFIED IDEOGRAPH
+ {0xE76F, 0x8F1F}, //6346 #CJK UNIFIED IDEOGRAPH
+ {0xE770, 0x8F1B}, //6347 #CJK UNIFIED IDEOGRAPH
+ {0xE771, 0x8F0C}, //6348 #CJK UNIFIED IDEOGRAPH
+ {0xE772, 0x8F26}, //6349 #CJK UNIFIED IDEOGRAPH
+ {0xE773, 0x8F33}, //6350 #CJK UNIFIED IDEOGRAPH
+ {0xE774, 0x8F3B}, //6351 #CJK UNIFIED IDEOGRAPH
+ {0xE775, 0x8F39}, //6352 #CJK UNIFIED IDEOGRAPH
+ {0xE776, 0x8F45}, //6353 #CJK UNIFIED IDEOGRAPH
+ {0xE777, 0x8F42}, //6354 #CJK UNIFIED IDEOGRAPH
+ {0xE778, 0x8F3E}, //6355 #CJK UNIFIED IDEOGRAPH
+ {0xE779, 0x8F4C}, //6356 #CJK UNIFIED IDEOGRAPH
+ {0xE77A, 0x8F49}, //6357 #CJK UNIFIED IDEOGRAPH
+ {0xE77B, 0x8F46}, //6358 #CJK UNIFIED IDEOGRAPH
+ {0xE77C, 0x8F4E}, //6359 #CJK UNIFIED IDEOGRAPH
+ {0xE77D, 0x8F57}, //6360 #CJK UNIFIED IDEOGRAPH
+ {0xE77E, 0x8F5C}, //6361 #CJK UNIFIED IDEOGRAPH
+ {0xE780, 0x8F62}, //6362 #CJK UNIFIED IDEOGRAPH
+ {0xE781, 0x8F63}, //6363 #CJK UNIFIED IDEOGRAPH
+ {0xE782, 0x8F64}, //6364 #CJK UNIFIED IDEOGRAPH
+ {0xE783, 0x8F9C}, //6365 #CJK UNIFIED IDEOGRAPH
+ {0xE784, 0x8F9F}, //6366 #CJK UNIFIED IDEOGRAPH
+ {0xE785, 0x8FA3}, //6367 #CJK UNIFIED IDEOGRAPH
+ {0xE786, 0x8FAD}, //6368 #CJK UNIFIED IDEOGRAPH
+ {0xE787, 0x8FAF}, //6369 #CJK UNIFIED IDEOGRAPH
+ {0xE788, 0x8FB7}, //6370 #CJK UNIFIED IDEOGRAPH
+ {0xE789, 0x8FDA}, //6371 #CJK UNIFIED IDEOGRAPH
+ {0xE78A, 0x8FE5}, //6372 #CJK UNIFIED IDEOGRAPH
+ {0xE78B, 0x8FE2}, //6373 #CJK UNIFIED IDEOGRAPH
+ {0xE78C, 0x8FEA}, //6374 #CJK UNIFIED IDEOGRAPH
+ {0xE78D, 0x8FEF}, //6375 #CJK UNIFIED IDEOGRAPH
+ {0xE78E, 0x9087}, //6376 #CJK UNIFIED IDEOGRAPH
+ {0xE78F, 0x8FF4}, //6377 #CJK UNIFIED IDEOGRAPH
+ {0xE790, 0x9005}, //6378 #CJK UNIFIED IDEOGRAPH
+ {0xE791, 0x8FF9}, //6379 #CJK UNIFIED IDEOGRAPH
+ {0xE792, 0x8FFA}, //6380 #CJK UNIFIED IDEOGRAPH
+ {0xE793, 0x9011}, //6381 #CJK UNIFIED IDEOGRAPH
+ {0xE794, 0x9015}, //6382 #CJK UNIFIED IDEOGRAPH
+ {0xE795, 0x9021}, //6383 #CJK UNIFIED IDEOGRAPH
+ {0xE796, 0x900D}, //6384 #CJK UNIFIED IDEOGRAPH
+ {0xE797, 0x901E}, //6385 #CJK UNIFIED IDEOGRAPH
+ {0xE798, 0x9016}, //6386 #CJK UNIFIED IDEOGRAPH
+ {0xE799, 0x900B}, //6387 #CJK UNIFIED IDEOGRAPH
+ {0xE79A, 0x9027}, //6388 #CJK UNIFIED IDEOGRAPH
+ {0xE79B, 0x9036}, //6389 #CJK UNIFIED IDEOGRAPH
+ {0xE79C, 0x9035}, //6390 #CJK UNIFIED IDEOGRAPH
+ {0xE79D, 0x9039}, //6391 #CJK UNIFIED IDEOGRAPH
+ {0xE79E, 0x8FF8}, //6392 #CJK UNIFIED IDEOGRAPH
+ {0xE79F, 0x904F}, //6393 #CJK UNIFIED IDEOGRAPH
+ {0xE7A0, 0x9050}, //6394 #CJK UNIFIED IDEOGRAPH
+ {0xE7A1, 0x9051}, //6395 #CJK UNIFIED IDEOGRAPH
+ {0xE7A2, 0x9052}, //6396 #CJK UNIFIED IDEOGRAPH
+ {0xE7A3, 0x900E}, //6397 #CJK UNIFIED IDEOGRAPH
+ {0xE7A4, 0x9049}, //6398 #CJK UNIFIED IDEOGRAPH
+ {0xE7A5, 0x903E}, //6399 #CJK UNIFIED IDEOGRAPH
+ {0xE7A6, 0x9056}, //6400 #CJK UNIFIED IDEOGRAPH
+ {0xE7A7, 0x9058}, //6401 #CJK UNIFIED IDEOGRAPH
+ {0xE7A8, 0x905E}, //6402 #CJK UNIFIED IDEOGRAPH
+ {0xE7A9, 0x9068}, //6403 #CJK UNIFIED IDEOGRAPH
+ {0xE7AA, 0x906F}, //6404 #CJK UNIFIED IDEOGRAPH
+ {0xE7AB, 0x9076}, //6405 #CJK UNIFIED IDEOGRAPH
+ {0xE7AC, 0x96A8}, //6406 #CJK UNIFIED IDEOGRAPH
+ {0xE7AD, 0x9072}, //6407 #CJK UNIFIED IDEOGRAPH
+ {0xE7AE, 0x9082}, //6408 #CJK UNIFIED IDEOGRAPH
+ {0xE7AF, 0x907D}, //6409 #CJK UNIFIED IDEOGRAPH
+ {0xE7B0, 0x9081}, //6410 #CJK UNIFIED IDEOGRAPH
+ {0xE7B1, 0x9080}, //6411 #CJK UNIFIED IDEOGRAPH
+ {0xE7B2, 0x908A}, //6412 #CJK UNIFIED IDEOGRAPH
+ {0xE7B3, 0x9089}, //6413 #CJK UNIFIED IDEOGRAPH
+ {0xE7B4, 0x908F}, //6414 #CJK UNIFIED IDEOGRAPH
+ {0xE7B5, 0x90A8}, //6415 #CJK UNIFIED IDEOGRAPH
+ {0xE7B6, 0x90AF}, //6416 #CJK UNIFIED IDEOGRAPH
+ {0xE7B7, 0x90B1}, //6417 #CJK UNIFIED IDEOGRAPH
+ {0xE7B8, 0x90B5}, //6418 #CJK UNIFIED IDEOGRAPH
+ {0xE7B9, 0x90E2}, //6419 #CJK UNIFIED IDEOGRAPH
+ {0xE7BA, 0x90E4}, //6420 #CJK UNIFIED IDEOGRAPH
+ {0xE7BB, 0x6248}, //6421 #CJK UNIFIED IDEOGRAPH
+ {0xE7BC, 0x90DB}, //6422 #CJK UNIFIED IDEOGRAPH
+ {0xE7BD, 0x9102}, //6423 #CJK UNIFIED IDEOGRAPH
+ {0xE7BE, 0x9112}, //6424 #CJK UNIFIED IDEOGRAPH
+ {0xE7BF, 0x9119}, //6425 #CJK UNIFIED IDEOGRAPH
+ {0xE7C0, 0x9132}, //6426 #CJK UNIFIED IDEOGRAPH
+ {0xE7C1, 0x9130}, //6427 #CJK UNIFIED IDEOGRAPH
+ {0xE7C2, 0x914A}, //6428 #CJK UNIFIED IDEOGRAPH
+ {0xE7C3, 0x9156}, //6429 #CJK UNIFIED IDEOGRAPH
+ {0xE7C4, 0x9158}, //6430 #CJK UNIFIED IDEOGRAPH
+ {0xE7C5, 0x9163}, //6431 #CJK UNIFIED IDEOGRAPH
+ {0xE7C6, 0x9165}, //6432 #CJK UNIFIED IDEOGRAPH
+ {0xE7C7, 0x9169}, //6433 #CJK UNIFIED IDEOGRAPH
+ {0xE7C8, 0x9173}, //6434 #CJK UNIFIED IDEOGRAPH
+ {0xE7C9, 0x9172}, //6435 #CJK UNIFIED IDEOGRAPH
+ {0xE7CA, 0x918B}, //6436 #CJK UNIFIED IDEOGRAPH
+ {0xE7CB, 0x9189}, //6437 #CJK UNIFIED IDEOGRAPH
+ {0xE7CC, 0x9182}, //6438 #CJK UNIFIED IDEOGRAPH
+ {0xE7CD, 0x91A2}, //6439 #CJK UNIFIED IDEOGRAPH
+ {0xE7CE, 0x91AB}, //6440 #CJK UNIFIED IDEOGRAPH
+ {0xE7CF, 0x91AF}, //6441 #CJK UNIFIED IDEOGRAPH
+ {0xE7D0, 0x91AA}, //6442 #CJK UNIFIED IDEOGRAPH
+ {0xE7D1, 0x91B5}, //6443 #CJK UNIFIED IDEOGRAPH
+ {0xE7D2, 0x91B4}, //6444 #CJK UNIFIED IDEOGRAPH
+ {0xE7D3, 0x91BA}, //6445 #CJK UNIFIED IDEOGRAPH
+ {0xE7D4, 0x91C0}, //6446 #CJK UNIFIED IDEOGRAPH
+ {0xE7D5, 0x91C1}, //6447 #CJK UNIFIED IDEOGRAPH
+ {0xE7D6, 0x91C9}, //6448 #CJK UNIFIED IDEOGRAPH
+ {0xE7D7, 0x91CB}, //6449 #CJK UNIFIED IDEOGRAPH
+ {0xE7D8, 0x91D0}, //6450 #CJK UNIFIED IDEOGRAPH
+ {0xE7D9, 0x91D6}, //6451 #CJK UNIFIED IDEOGRAPH
+ {0xE7DA, 0x91DF}, //6452 #CJK UNIFIED IDEOGRAPH
+ {0xE7DB, 0x91E1}, //6453 #CJK UNIFIED IDEOGRAPH
+ {0xE7DC, 0x91DB}, //6454 #CJK UNIFIED IDEOGRAPH
+ {0xE7DD, 0x91FC}, //6455 #CJK UNIFIED IDEOGRAPH
+ {0xE7DE, 0x91F5}, //6456 #CJK UNIFIED IDEOGRAPH
+ {0xE7DF, 0x91F6}, //6457 #CJK UNIFIED IDEOGRAPH
+ {0xE7E0, 0x921E}, //6458 #CJK UNIFIED IDEOGRAPH
+ {0xE7E1, 0x91FF}, //6459 #CJK UNIFIED IDEOGRAPH
+ {0xE7E2, 0x9214}, //6460 #CJK UNIFIED IDEOGRAPH
+ {0xE7E3, 0x922C}, //6461 #CJK UNIFIED IDEOGRAPH
+ {0xE7E4, 0x9215}, //6462 #CJK UNIFIED IDEOGRAPH
+ {0xE7E5, 0x9211}, //6463 #CJK UNIFIED IDEOGRAPH
+ {0xE7E6, 0x925E}, //6464 #CJK UNIFIED IDEOGRAPH
+ {0xE7E7, 0x9257}, //6465 #CJK UNIFIED IDEOGRAPH
+ {0xE7E8, 0x9245}, //6466 #CJK UNIFIED IDEOGRAPH
+ {0xE7E9, 0x9249}, //6467 #CJK UNIFIED IDEOGRAPH
+ {0xE7EA, 0x9264}, //6468 #CJK UNIFIED IDEOGRAPH
+ {0xE7EB, 0x9248}, //6469 #CJK UNIFIED IDEOGRAPH
+ {0xE7EC, 0x9295}, //6470 #CJK UNIFIED IDEOGRAPH
+ {0xE7ED, 0x923F}, //6471 #CJK UNIFIED IDEOGRAPH
+ {0xE7EE, 0x924B}, //6472 #CJK UNIFIED IDEOGRAPH
+ {0xE7EF, 0x9250}, //6473 #CJK UNIFIED IDEOGRAPH
+ {0xE7F0, 0x929C}, //6474 #CJK UNIFIED IDEOGRAPH
+ {0xE7F1, 0x9296}, //6475 #CJK UNIFIED IDEOGRAPH
+ {0xE7F2, 0x9293}, //6476 #CJK UNIFIED IDEOGRAPH
+ {0xE7F3, 0x929B}, //6477 #CJK UNIFIED IDEOGRAPH
+ {0xE7F4, 0x925A}, //6478 #CJK UNIFIED IDEOGRAPH
+ {0xE7F5, 0x92CF}, //6479 #CJK UNIFIED IDEOGRAPH
+ {0xE7F6, 0x92B9}, //6480 #CJK UNIFIED IDEOGRAPH
+ {0xE7F7, 0x92B7}, //6481 #CJK UNIFIED IDEOGRAPH
+ {0xE7F8, 0x92E9}, //6482 #CJK UNIFIED IDEOGRAPH
+ {0xE7F9, 0x930F}, //6483 #CJK UNIFIED IDEOGRAPH
+ {0xE7FA, 0x92FA}, //6484 #CJK UNIFIED IDEOGRAPH
+ {0xE7FB, 0x9344}, //6485 #CJK UNIFIED IDEOGRAPH
+ {0xE7FC, 0x932E}, //6486 #CJK UNIFIED IDEOGRAPH
+ {0xE840, 0x9319}, //6487 #CJK UNIFIED IDEOGRAPH
+ {0xE841, 0x9322}, //6488 #CJK UNIFIED IDEOGRAPH
+ {0xE842, 0x931A}, //6489 #CJK UNIFIED IDEOGRAPH
+ {0xE843, 0x9323}, //6490 #CJK UNIFIED IDEOGRAPH
+ {0xE844, 0x933A}, //6491 #CJK UNIFIED IDEOGRAPH
+ {0xE845, 0x9335}, //6492 #CJK UNIFIED IDEOGRAPH
+ {0xE846, 0x933B}, //6493 #CJK UNIFIED IDEOGRAPH
+ {0xE847, 0x935C}, //6494 #CJK UNIFIED IDEOGRAPH
+ {0xE848, 0x9360}, //6495 #CJK UNIFIED IDEOGRAPH
+ {0xE849, 0x937C}, //6496 #CJK UNIFIED IDEOGRAPH
+ {0xE84A, 0x936E}, //6497 #CJK UNIFIED IDEOGRAPH
+ {0xE84B, 0x9356}, //6498 #CJK UNIFIED IDEOGRAPH
+ {0xE84C, 0x93B0}, //6499 #CJK UNIFIED IDEOGRAPH
+ {0xE84D, 0x93AC}, //6500 #CJK UNIFIED IDEOGRAPH
+ {0xE84E, 0x93AD}, //6501 #CJK UNIFIED IDEOGRAPH
+ {0xE84F, 0x9394}, //6502 #CJK UNIFIED IDEOGRAPH
+ {0xE850, 0x93B9}, //6503 #CJK UNIFIED IDEOGRAPH
+ {0xE851, 0x93D6}, //6504 #CJK UNIFIED IDEOGRAPH
+ {0xE852, 0x93D7}, //6505 #CJK UNIFIED IDEOGRAPH
+ {0xE853, 0x93E8}, //6506 #CJK UNIFIED IDEOGRAPH
+ {0xE854, 0x93E5}, //6507 #CJK UNIFIED IDEOGRAPH
+ {0xE855, 0x93D8}, //6508 #CJK UNIFIED IDEOGRAPH
+ {0xE856, 0x93C3}, //6509 #CJK UNIFIED IDEOGRAPH
+ {0xE857, 0x93DD}, //6510 #CJK UNIFIED IDEOGRAPH
+ {0xE858, 0x93D0}, //6511 #CJK UNIFIED IDEOGRAPH
+ {0xE859, 0x93C8}, //6512 #CJK UNIFIED IDEOGRAPH
+ {0xE85A, 0x93E4}, //6513 #CJK UNIFIED IDEOGRAPH
+ {0xE85B, 0x941A}, //6514 #CJK UNIFIED IDEOGRAPH
+ {0xE85C, 0x9414}, //6515 #CJK UNIFIED IDEOGRAPH
+ {0xE85D, 0x9413}, //6516 #CJK UNIFIED IDEOGRAPH
+ {0xE85E, 0x9403}, //6517 #CJK UNIFIED IDEOGRAPH
+ {0xE85F, 0x9407}, //6518 #CJK UNIFIED IDEOGRAPH
+ {0xE860, 0x9410}, //6519 #CJK UNIFIED IDEOGRAPH
+ {0xE861, 0x9436}, //6520 #CJK UNIFIED IDEOGRAPH
+ {0xE862, 0x942B}, //6521 #CJK UNIFIED IDEOGRAPH
+ {0xE863, 0x9435}, //6522 #CJK UNIFIED IDEOGRAPH
+ {0xE864, 0x9421}, //6523 #CJK UNIFIED IDEOGRAPH
+ {0xE865, 0x943A}, //6524 #CJK UNIFIED IDEOGRAPH
+ {0xE866, 0x9441}, //6525 #CJK UNIFIED IDEOGRAPH
+ {0xE867, 0x9452}, //6526 #CJK UNIFIED IDEOGRAPH
+ {0xE868, 0x9444}, //6527 #CJK UNIFIED IDEOGRAPH
+ {0xE869, 0x945B}, //6528 #CJK UNIFIED IDEOGRAPH
+ {0xE86A, 0x9460}, //6529 #CJK UNIFIED IDEOGRAPH
+ {0xE86B, 0x9462}, //6530 #CJK UNIFIED IDEOGRAPH
+ {0xE86C, 0x945E}, //6531 #CJK UNIFIED IDEOGRAPH
+ {0xE86D, 0x946A}, //6532 #CJK UNIFIED IDEOGRAPH
+ {0xE86E, 0x9229}, //6533 #CJK UNIFIED IDEOGRAPH
+ {0xE86F, 0x9470}, //6534 #CJK UNIFIED IDEOGRAPH
+ {0xE870, 0x9475}, //6535 #CJK UNIFIED IDEOGRAPH
+ {0xE871, 0x9477}, //6536 #CJK UNIFIED IDEOGRAPH
+ {0xE872, 0x947D}, //6537 #CJK UNIFIED IDEOGRAPH
+ {0xE873, 0x945A}, //6538 #CJK UNIFIED IDEOGRAPH
+ {0xE874, 0x947C}, //6539 #CJK UNIFIED IDEOGRAPH
+ {0xE875, 0x947E}, //6540 #CJK UNIFIED IDEOGRAPH
+ {0xE876, 0x9481}, //6541 #CJK UNIFIED IDEOGRAPH
+ {0xE877, 0x947F}, //6542 #CJK UNIFIED IDEOGRAPH
+ {0xE878, 0x9582}, //6543 #CJK UNIFIED IDEOGRAPH
+ {0xE879, 0x9587}, //6544 #CJK UNIFIED IDEOGRAPH
+ {0xE87A, 0x958A}, //6545 #CJK UNIFIED IDEOGRAPH
+ {0xE87B, 0x9594}, //6546 #CJK UNIFIED IDEOGRAPH
+ {0xE87C, 0x9596}, //6547 #CJK UNIFIED IDEOGRAPH
+ {0xE87D, 0x9598}, //6548 #CJK UNIFIED IDEOGRAPH
+ {0xE87E, 0x9599}, //6549 #CJK UNIFIED IDEOGRAPH
+ {0xE880, 0x95A0}, //6550 #CJK UNIFIED IDEOGRAPH
+ {0xE881, 0x95A8}, //6551 #CJK UNIFIED IDEOGRAPH
+ {0xE882, 0x95A7}, //6552 #CJK UNIFIED IDEOGRAPH
+ {0xE883, 0x95AD}, //6553 #CJK UNIFIED IDEOGRAPH
+ {0xE884, 0x95BC}, //6554 #CJK UNIFIED IDEOGRAPH
+ {0xE885, 0x95BB}, //6555 #CJK UNIFIED IDEOGRAPH
+ {0xE886, 0x95B9}, //6556 #CJK UNIFIED IDEOGRAPH
+ {0xE887, 0x95BE}, //6557 #CJK UNIFIED IDEOGRAPH
+ {0xE888, 0x95CA}, //6558 #CJK UNIFIED IDEOGRAPH
+ {0xE889, 0x6FF6}, //6559 #CJK UNIFIED IDEOGRAPH
+ {0xE88A, 0x95C3}, //6560 #CJK UNIFIED IDEOGRAPH
+ {0xE88B, 0x95CD}, //6561 #CJK UNIFIED IDEOGRAPH
+ {0xE88C, 0x95CC}, //6562 #CJK UNIFIED IDEOGRAPH
+ {0xE88D, 0x95D5}, //6563 #CJK UNIFIED IDEOGRAPH
+ {0xE88E, 0x95D4}, //6564 #CJK UNIFIED IDEOGRAPH
+ {0xE88F, 0x95D6}, //6565 #CJK UNIFIED IDEOGRAPH
+ {0xE890, 0x95DC}, //6566 #CJK UNIFIED IDEOGRAPH
+ {0xE891, 0x95E1}, //6567 #CJK UNIFIED IDEOGRAPH
+ {0xE892, 0x95E5}, //6568 #CJK UNIFIED IDEOGRAPH
+ {0xE893, 0x95E2}, //6569 #CJK UNIFIED IDEOGRAPH
+ {0xE894, 0x9621}, //6570 #CJK UNIFIED IDEOGRAPH
+ {0xE895, 0x9628}, //6571 #CJK UNIFIED IDEOGRAPH
+ {0xE896, 0x962E}, //6572 #CJK UNIFIED IDEOGRAPH
+ {0xE897, 0x962F}, //6573 #CJK UNIFIED IDEOGRAPH
+ {0xE898, 0x9642}, //6574 #CJK UNIFIED IDEOGRAPH
+ {0xE899, 0x964C}, //6575 #CJK UNIFIED IDEOGRAPH
+ {0xE89A, 0x964F}, //6576 #CJK UNIFIED IDEOGRAPH
+ {0xE89B, 0x964B}, //6577 #CJK UNIFIED IDEOGRAPH
+ {0xE89C, 0x9677}, //6578 #CJK UNIFIED IDEOGRAPH
+ {0xE89D, 0x965C}, //6579 #CJK UNIFIED IDEOGRAPH
+ {0xE89E, 0x965E}, //6580 #CJK UNIFIED IDEOGRAPH
+ {0xE89F, 0x965D}, //6581 #CJK UNIFIED IDEOGRAPH
+ {0xE8A0, 0x965F}, //6582 #CJK UNIFIED IDEOGRAPH
+ {0xE8A1, 0x9666}, //6583 #CJK UNIFIED IDEOGRAPH
+ {0xE8A2, 0x9672}, //6584 #CJK UNIFIED IDEOGRAPH
+ {0xE8A3, 0x966C}, //6585 #CJK UNIFIED IDEOGRAPH
+ {0xE8A4, 0x968D}, //6586 #CJK UNIFIED IDEOGRAPH
+ {0xE8A5, 0x9698}, //6587 #CJK UNIFIED IDEOGRAPH
+ {0xE8A6, 0x9695}, //6588 #CJK UNIFIED IDEOGRAPH
+ {0xE8A7, 0x9697}, //6589 #CJK UNIFIED IDEOGRAPH
+ {0xE8A8, 0x96AA}, //6590 #CJK UNIFIED IDEOGRAPH
+ {0xE8A9, 0x96A7}, //6591 #CJK UNIFIED IDEOGRAPH
+ {0xE8AA, 0x96B1}, //6592 #CJK UNIFIED IDEOGRAPH
+ {0xE8AB, 0x96B2}, //6593 #CJK UNIFIED IDEOGRAPH
+ {0xE8AC, 0x96B0}, //6594 #CJK UNIFIED IDEOGRAPH
+ {0xE8AD, 0x96B4}, //6595 #CJK UNIFIED IDEOGRAPH
+ {0xE8AE, 0x96B6}, //6596 #CJK UNIFIED IDEOGRAPH
+ {0xE8AF, 0x96B8}, //6597 #CJK UNIFIED IDEOGRAPH
+ {0xE8B0, 0x96B9}, //6598 #CJK UNIFIED IDEOGRAPH
+ {0xE8B1, 0x96CE}, //6599 #CJK UNIFIED IDEOGRAPH
+ {0xE8B2, 0x96CB}, //6600 #CJK UNIFIED IDEOGRAPH
+ {0xE8B3, 0x96C9}, //6601 #CJK UNIFIED IDEOGRAPH
+ {0xE8B4, 0x96CD}, //6602 #CJK UNIFIED IDEOGRAPH
+ {0xE8B5, 0x894D}, //6603 #CJK UNIFIED IDEOGRAPH
+ {0xE8B6, 0x96DC}, //6604 #CJK UNIFIED IDEOGRAPH
+ {0xE8B7, 0x970D}, //6605 #CJK UNIFIED IDEOGRAPH
+ {0xE8B8, 0x96D5}, //6606 #CJK UNIFIED IDEOGRAPH
+ {0xE8B9, 0x96F9}, //6607 #CJK UNIFIED IDEOGRAPH
+ {0xE8BA, 0x9704}, //6608 #CJK UNIFIED IDEOGRAPH
+ {0xE8BB, 0x9706}, //6609 #CJK UNIFIED IDEOGRAPH
+ {0xE8BC, 0x9708}, //6610 #CJK UNIFIED IDEOGRAPH
+ {0xE8BD, 0x9713}, //6611 #CJK UNIFIED IDEOGRAPH
+ {0xE8BE, 0x970E}, //6612 #CJK UNIFIED IDEOGRAPH
+ {0xE8BF, 0x9711}, //6613 #CJK UNIFIED IDEOGRAPH
+ {0xE8C0, 0x970F}, //6614 #CJK UNIFIED IDEOGRAPH
+ {0xE8C1, 0x9716}, //6615 #CJK UNIFIED IDEOGRAPH
+ {0xE8C2, 0x9719}, //6616 #CJK UNIFIED IDEOGRAPH
+ {0xE8C3, 0x9724}, //6617 #CJK UNIFIED IDEOGRAPH
+ {0xE8C4, 0x972A}, //6618 #CJK UNIFIED IDEOGRAPH
+ {0xE8C5, 0x9730}, //6619 #CJK UNIFIED IDEOGRAPH
+ {0xE8C6, 0x9739}, //6620 #CJK UNIFIED IDEOGRAPH
+ {0xE8C7, 0x973D}, //6621 #CJK UNIFIED IDEOGRAPH
+ {0xE8C8, 0x973E}, //6622 #CJK UNIFIED IDEOGRAPH
+ {0xE8C9, 0x9744}, //6623 #CJK UNIFIED IDEOGRAPH
+ {0xE8CA, 0x9746}, //6624 #CJK UNIFIED IDEOGRAPH
+ {0xE8CB, 0x9748}, //6625 #CJK UNIFIED IDEOGRAPH
+ {0xE8CC, 0x9742}, //6626 #CJK UNIFIED IDEOGRAPH
+ {0xE8CD, 0x9749}, //6627 #CJK UNIFIED IDEOGRAPH
+ {0xE8CE, 0x975C}, //6628 #CJK UNIFIED IDEOGRAPH
+ {0xE8CF, 0x9760}, //6629 #CJK UNIFIED IDEOGRAPH
+ {0xE8D0, 0x9764}, //6630 #CJK UNIFIED IDEOGRAPH
+ {0xE8D1, 0x9766}, //6631 #CJK UNIFIED IDEOGRAPH
+ {0xE8D2, 0x9768}, //6632 #CJK UNIFIED IDEOGRAPH
+ {0xE8D3, 0x52D2}, //6633 #CJK UNIFIED IDEOGRAPH
+ {0xE8D4, 0x976B}, //6634 #CJK UNIFIED IDEOGRAPH
+ {0xE8D5, 0x9771}, //6635 #CJK UNIFIED IDEOGRAPH
+ {0xE8D6, 0x9779}, //6636 #CJK UNIFIED IDEOGRAPH
+ {0xE8D7, 0x9785}, //6637 #CJK UNIFIED IDEOGRAPH
+ {0xE8D8, 0x977C}, //6638 #CJK UNIFIED IDEOGRAPH
+ {0xE8D9, 0x9781}, //6639 #CJK UNIFIED IDEOGRAPH
+ {0xE8DA, 0x977A}, //6640 #CJK UNIFIED IDEOGRAPH
+ {0xE8DB, 0x9786}, //6641 #CJK UNIFIED IDEOGRAPH
+ {0xE8DC, 0x978B}, //6642 #CJK UNIFIED IDEOGRAPH
+ {0xE8DD, 0x978F}, //6643 #CJK UNIFIED IDEOGRAPH
+ {0xE8DE, 0x9790}, //6644 #CJK UNIFIED IDEOGRAPH
+ {0xE8DF, 0x979C}, //6645 #CJK UNIFIED IDEOGRAPH
+ {0xE8E0, 0x97A8}, //6646 #CJK UNIFIED IDEOGRAPH
+ {0xE8E1, 0x97A6}, //6647 #CJK UNIFIED IDEOGRAPH
+ {0xE8E2, 0x97A3}, //6648 #CJK UNIFIED IDEOGRAPH
+ {0xE8E3, 0x97B3}, //6649 #CJK UNIFIED IDEOGRAPH
+ {0xE8E4, 0x97B4}, //6650 #CJK UNIFIED IDEOGRAPH
+ {0xE8E5, 0x97C3}, //6651 #CJK UNIFIED IDEOGRAPH
+ {0xE8E6, 0x97C6}, //6652 #CJK UNIFIED IDEOGRAPH
+ {0xE8E7, 0x97C8}, //6653 #CJK UNIFIED IDEOGRAPH
+ {0xE8E8, 0x97CB}, //6654 #CJK UNIFIED IDEOGRAPH
+ {0xE8E9, 0x97DC}, //6655 #CJK UNIFIED IDEOGRAPH
+ {0xE8EA, 0x97ED}, //6656 #CJK UNIFIED IDEOGRAPH
+ {0xE8EB, 0x9F4F}, //6657 #CJK UNIFIED IDEOGRAPH
+ {0xE8EC, 0x97F2}, //6658 #CJK UNIFIED IDEOGRAPH
+ {0xE8ED, 0x7ADF}, //6659 #CJK UNIFIED IDEOGRAPH
+ {0xE8EE, 0x97F6}, //6660 #CJK UNIFIED IDEOGRAPH
+ {0xE8EF, 0x97F5}, //6661 #CJK UNIFIED IDEOGRAPH
+ {0xE8F0, 0x980F}, //6662 #CJK UNIFIED IDEOGRAPH
+ {0xE8F1, 0x980C}, //6663 #CJK UNIFIED IDEOGRAPH
+ {0xE8F2, 0x9838}, //6664 #CJK UNIFIED IDEOGRAPH
+ {0xE8F3, 0x9824}, //6665 #CJK UNIFIED IDEOGRAPH
+ {0xE8F4, 0x9821}, //6666 #CJK UNIFIED IDEOGRAPH
+ {0xE8F5, 0x9837}, //6667 #CJK UNIFIED IDEOGRAPH
+ {0xE8F6, 0x983D}, //6668 #CJK UNIFIED IDEOGRAPH
+ {0xE8F7, 0x9846}, //6669 #CJK UNIFIED IDEOGRAPH
+ {0xE8F8, 0x984F}, //6670 #CJK UNIFIED IDEOGRAPH
+ {0xE8F9, 0x984B}, //6671 #CJK UNIFIED IDEOGRAPH
+ {0xE8FA, 0x986B}, //6672 #CJK UNIFIED IDEOGRAPH
+ {0xE8FB, 0x986F}, //6673 #CJK UNIFIED IDEOGRAPH
+ {0xE8FC, 0x9870}, //6674 #CJK UNIFIED IDEOGRAPH
+ {0xE940, 0x9871}, //6675 #CJK UNIFIED IDEOGRAPH
+ {0xE941, 0x9874}, //6676 #CJK UNIFIED IDEOGRAPH
+ {0xE942, 0x9873}, //6677 #CJK UNIFIED IDEOGRAPH
+ {0xE943, 0x98AA}, //6678 #CJK UNIFIED IDEOGRAPH
+ {0xE944, 0x98AF}, //6679 #CJK UNIFIED IDEOGRAPH
+ {0xE945, 0x98B1}, //6680 #CJK UNIFIED IDEOGRAPH
+ {0xE946, 0x98B6}, //6681 #CJK UNIFIED IDEOGRAPH
+ {0xE947, 0x98C4}, //6682 #CJK UNIFIED IDEOGRAPH
+ {0xE948, 0x98C3}, //6683 #CJK UNIFIED IDEOGRAPH
+ {0xE949, 0x98C6}, //6684 #CJK UNIFIED IDEOGRAPH
+ {0xE94A, 0x98E9}, //6685 #CJK UNIFIED IDEOGRAPH
+ {0xE94B, 0x98EB}, //6686 #CJK UNIFIED IDEOGRAPH
+ {0xE94C, 0x9903}, //6687 #CJK UNIFIED IDEOGRAPH
+ {0xE94D, 0x9909}, //6688 #CJK UNIFIED IDEOGRAPH
+ {0xE94E, 0x9912}, //6689 #CJK UNIFIED IDEOGRAPH
+ {0xE94F, 0x9914}, //6690 #CJK UNIFIED IDEOGRAPH
+ {0xE950, 0x9918}, //6691 #CJK UNIFIED IDEOGRAPH
+ {0xE951, 0x9921}, //6692 #CJK UNIFIED IDEOGRAPH
+ {0xE952, 0x991D}, //6693 #CJK UNIFIED IDEOGRAPH
+ {0xE953, 0x991E}, //6694 #CJK UNIFIED IDEOGRAPH
+ {0xE954, 0x9924}, //6695 #CJK UNIFIED IDEOGRAPH
+ {0xE955, 0x9920}, //6696 #CJK UNIFIED IDEOGRAPH
+ {0xE956, 0x992C}, //6697 #CJK UNIFIED IDEOGRAPH
+ {0xE957, 0x992E}, //6698 #CJK UNIFIED IDEOGRAPH
+ {0xE958, 0x993D}, //6699 #CJK UNIFIED IDEOGRAPH
+ {0xE959, 0x993E}, //6700 #CJK UNIFIED IDEOGRAPH
+ {0xE95A, 0x9942}, //6701 #CJK UNIFIED IDEOGRAPH
+ {0xE95B, 0x9949}, //6702 #CJK UNIFIED IDEOGRAPH
+ {0xE95C, 0x9945}, //6703 #CJK UNIFIED IDEOGRAPH
+ {0xE95D, 0x9950}, //6704 #CJK UNIFIED IDEOGRAPH
+ {0xE95E, 0x994B}, //6705 #CJK UNIFIED IDEOGRAPH
+ {0xE95F, 0x9951}, //6706 #CJK UNIFIED IDEOGRAPH
+ {0xE960, 0x9952}, //6707 #CJK UNIFIED IDEOGRAPH
+ {0xE961, 0x994C}, //6708 #CJK UNIFIED IDEOGRAPH
+ {0xE962, 0x9955}, //6709 #CJK UNIFIED IDEOGRAPH
+ {0xE963, 0x9997}, //6710 #CJK UNIFIED IDEOGRAPH
+ {0xE964, 0x9998}, //6711 #CJK UNIFIED IDEOGRAPH
+ {0xE965, 0x99A5}, //6712 #CJK UNIFIED IDEOGRAPH
+ {0xE966, 0x99AD}, //6713 #CJK UNIFIED IDEOGRAPH
+ {0xE967, 0x99AE}, //6714 #CJK UNIFIED IDEOGRAPH
+ {0xE968, 0x99BC}, //6715 #CJK UNIFIED IDEOGRAPH
+ {0xE969, 0x99DF}, //6716 #CJK UNIFIED IDEOGRAPH
+ {0xE96A, 0x99DB}, //6717 #CJK UNIFIED IDEOGRAPH
+ {0xE96B, 0x99DD}, //6718 #CJK UNIFIED IDEOGRAPH
+ {0xE96C, 0x99D8}, //6719 #CJK UNIFIED IDEOGRAPH
+ {0xE96D, 0x99D1}, //6720 #CJK UNIFIED IDEOGRAPH
+ {0xE96E, 0x99ED}, //6721 #CJK UNIFIED IDEOGRAPH
+ {0xE96F, 0x99EE}, //6722 #CJK UNIFIED IDEOGRAPH
+ {0xE970, 0x99F1}, //6723 #CJK UNIFIED IDEOGRAPH
+ {0xE971, 0x99F2}, //6724 #CJK UNIFIED IDEOGRAPH
+ {0xE972, 0x99FB}, //6725 #CJK UNIFIED IDEOGRAPH
+ {0xE973, 0x99F8}, //6726 #CJK UNIFIED IDEOGRAPH
+ {0xE974, 0x9A01}, //6727 #CJK UNIFIED IDEOGRAPH
+ {0xE975, 0x9A0F}, //6728 #CJK UNIFIED IDEOGRAPH
+ {0xE976, 0x9A05}, //6729 #CJK UNIFIED IDEOGRAPH
+ {0xE977, 0x99E2}, //6730 #CJK UNIFIED IDEOGRAPH
+ {0xE978, 0x9A19}, //6731 #CJK UNIFIED IDEOGRAPH
+ {0xE979, 0x9A2B}, //6732 #CJK UNIFIED IDEOGRAPH
+ {0xE97A, 0x9A37}, //6733 #CJK UNIFIED IDEOGRAPH
+ {0xE97B, 0x9A45}, //6734 #CJK UNIFIED IDEOGRAPH
+ {0xE97C, 0x9A42}, //6735 #CJK UNIFIED IDEOGRAPH
+ {0xE97D, 0x9A40}, //6736 #CJK UNIFIED IDEOGRAPH
+ {0xE97E, 0x9A43}, //6737 #CJK UNIFIED IDEOGRAPH
+ {0xE980, 0x9A3E}, //6738 #CJK UNIFIED IDEOGRAPH
+ {0xE981, 0x9A55}, //6739 #CJK UNIFIED IDEOGRAPH
+ {0xE982, 0x9A4D}, //6740 #CJK UNIFIED IDEOGRAPH
+ {0xE983, 0x9A5B}, //6741 #CJK UNIFIED IDEOGRAPH
+ {0xE984, 0x9A57}, //6742 #CJK UNIFIED IDEOGRAPH
+ {0xE985, 0x9A5F}, //6743 #CJK UNIFIED IDEOGRAPH
+ {0xE986, 0x9A62}, //6744 #CJK UNIFIED IDEOGRAPH
+ {0xE987, 0x9A65}, //6745 #CJK UNIFIED IDEOGRAPH
+ {0xE988, 0x9A64}, //6746 #CJK UNIFIED IDEOGRAPH
+ {0xE989, 0x9A69}, //6747 #CJK UNIFIED IDEOGRAPH
+ {0xE98A, 0x9A6B}, //6748 #CJK UNIFIED IDEOGRAPH
+ {0xE98B, 0x9A6A}, //6749 #CJK UNIFIED IDEOGRAPH
+ {0xE98C, 0x9AAD}, //6750 #CJK UNIFIED IDEOGRAPH
+ {0xE98D, 0x9AB0}, //6751 #CJK UNIFIED IDEOGRAPH
+ {0xE98E, 0x9ABC}, //6752 #CJK UNIFIED IDEOGRAPH
+ {0xE98F, 0x9AC0}, //6753 #CJK UNIFIED IDEOGRAPH
+ {0xE990, 0x9ACF}, //6754 #CJK UNIFIED IDEOGRAPH
+ {0xE991, 0x9AD1}, //6755 #CJK UNIFIED IDEOGRAPH
+ {0xE992, 0x9AD3}, //6756 #CJK UNIFIED IDEOGRAPH
+ {0xE993, 0x9AD4}, //6757 #CJK UNIFIED IDEOGRAPH
+ {0xE994, 0x9ADE}, //6758 #CJK UNIFIED IDEOGRAPH
+ {0xE995, 0x9ADF}, //6759 #CJK UNIFIED IDEOGRAPH
+ {0xE996, 0x9AE2}, //6760 #CJK UNIFIED IDEOGRAPH
+ {0xE997, 0x9AE3}, //6761 #CJK UNIFIED IDEOGRAPH
+ {0xE998, 0x9AE6}, //6762 #CJK UNIFIED IDEOGRAPH
+ {0xE999, 0x9AEF}, //6763 #CJK UNIFIED IDEOGRAPH
+ {0xE99A, 0x9AEB}, //6764 #CJK UNIFIED IDEOGRAPH
+ {0xE99B, 0x9AEE}, //6765 #CJK UNIFIED IDEOGRAPH
+ {0xE99C, 0x9AF4}, //6766 #CJK UNIFIED IDEOGRAPH
+ {0xE99D, 0x9AF1}, //6767 #CJK UNIFIED IDEOGRAPH
+ {0xE99E, 0x9AF7}, //6768 #CJK UNIFIED IDEOGRAPH
+ {0xE99F, 0x9AFB}, //6769 #CJK UNIFIED IDEOGRAPH
+ {0xE9A0, 0x9B06}, //6770 #CJK UNIFIED IDEOGRAPH
+ {0xE9A1, 0x9B18}, //6771 #CJK UNIFIED IDEOGRAPH
+ {0xE9A2, 0x9B1A}, //6772 #CJK UNIFIED IDEOGRAPH
+ {0xE9A3, 0x9B1F}, //6773 #CJK UNIFIED IDEOGRAPH
+ {0xE9A4, 0x9B22}, //6774 #CJK UNIFIED IDEOGRAPH
+ {0xE9A5, 0x9B23}, //6775 #CJK UNIFIED IDEOGRAPH
+ {0xE9A6, 0x9B25}, //6776 #CJK UNIFIED IDEOGRAPH
+ {0xE9A7, 0x9B27}, //6777 #CJK UNIFIED IDEOGRAPH
+ {0xE9A8, 0x9B28}, //6778 #CJK UNIFIED IDEOGRAPH
+ {0xE9A9, 0x9B29}, //6779 #CJK UNIFIED IDEOGRAPH
+ {0xE9AA, 0x9B2A}, //6780 #CJK UNIFIED IDEOGRAPH
+ {0xE9AB, 0x9B2E}, //6781 #CJK UNIFIED IDEOGRAPH
+ {0xE9AC, 0x9B2F}, //6782 #CJK UNIFIED IDEOGRAPH
+ {0xE9AD, 0x9B32}, //6783 #CJK UNIFIED IDEOGRAPH
+ {0xE9AE, 0x9B44}, //6784 #CJK UNIFIED IDEOGRAPH
+ {0xE9AF, 0x9B43}, //6785 #CJK UNIFIED IDEOGRAPH
+ {0xE9B0, 0x9B4F}, //6786 #CJK UNIFIED IDEOGRAPH
+ {0xE9B1, 0x9B4D}, //6787 #CJK UNIFIED IDEOGRAPH
+ {0xE9B2, 0x9B4E}, //6788 #CJK UNIFIED IDEOGRAPH
+ {0xE9B3, 0x9B51}, //6789 #CJK UNIFIED IDEOGRAPH
+ {0xE9B4, 0x9B58}, //6790 #CJK UNIFIED IDEOGRAPH
+ {0xE9B5, 0x9B74}, //6791 #CJK UNIFIED IDEOGRAPH
+ {0xE9B6, 0x9B93}, //6792 #CJK UNIFIED IDEOGRAPH
+ {0xE9B7, 0x9B83}, //6793 #CJK UNIFIED IDEOGRAPH
+ {0xE9B8, 0x9B91}, //6794 #CJK UNIFIED IDEOGRAPH
+ {0xE9B9, 0x9B96}, //6795 #CJK UNIFIED IDEOGRAPH
+ {0xE9BA, 0x9B97}, //6796 #CJK UNIFIED IDEOGRAPH
+ {0xE9BB, 0x9B9F}, //6797 #CJK UNIFIED IDEOGRAPH
+ {0xE9BC, 0x9BA0}, //6798 #CJK UNIFIED IDEOGRAPH
+ {0xE9BD, 0x9BA8}, //6799 #CJK UNIFIED IDEOGRAPH
+ {0xE9BE, 0x9BB4}, //6800 #CJK UNIFIED IDEOGRAPH
+ {0xE9BF, 0x9BC0}, //6801 #CJK UNIFIED IDEOGRAPH
+ {0xE9C0, 0x9BCA}, //6802 #CJK UNIFIED IDEOGRAPH
+ {0xE9C1, 0x9BB9}, //6803 #CJK UNIFIED IDEOGRAPH
+ {0xE9C2, 0x9BC6}, //6804 #CJK UNIFIED IDEOGRAPH
+ {0xE9C3, 0x9BCF}, //6805 #CJK UNIFIED IDEOGRAPH
+ {0xE9C4, 0x9BD1}, //6806 #CJK UNIFIED IDEOGRAPH
+ {0xE9C5, 0x9BD2}, //6807 #CJK UNIFIED IDEOGRAPH
+ {0xE9C6, 0x9BE3}, //6808 #CJK UNIFIED IDEOGRAPH
+ {0xE9C7, 0x9BE2}, //6809 #CJK UNIFIED IDEOGRAPH
+ {0xE9C8, 0x9BE4}, //6810 #CJK UNIFIED IDEOGRAPH
+ {0xE9C9, 0x9BD4}, //6811 #CJK UNIFIED IDEOGRAPH
+ {0xE9CA, 0x9BE1}, //6812 #CJK UNIFIED IDEOGRAPH
+ {0xE9CB, 0x9C3A}, //6813 #CJK UNIFIED IDEOGRAPH
+ {0xE9CC, 0x9BF2}, //6814 #CJK UNIFIED IDEOGRAPH
+ {0xE9CD, 0x9BF1}, //6815 #CJK UNIFIED IDEOGRAPH
+ {0xE9CE, 0x9BF0}, //6816 #CJK UNIFIED IDEOGRAPH
+ {0xE9CF, 0x9C15}, //6817 #CJK UNIFIED IDEOGRAPH
+ {0xE9D0, 0x9C14}, //6818 #CJK UNIFIED IDEOGRAPH
+ {0xE9D1, 0x9C09}, //6819 #CJK UNIFIED IDEOGRAPH
+ {0xE9D2, 0x9C13}, //6820 #CJK UNIFIED IDEOGRAPH
+ {0xE9D3, 0x9C0C}, //6821 #CJK UNIFIED IDEOGRAPH
+ {0xE9D4, 0x9C06}, //6822 #CJK UNIFIED IDEOGRAPH
+ {0xE9D5, 0x9C08}, //6823 #CJK UNIFIED IDEOGRAPH
+ {0xE9D6, 0x9C12}, //6824 #CJK UNIFIED IDEOGRAPH
+ {0xE9D7, 0x9C0A}, //6825 #CJK UNIFIED IDEOGRAPH
+ {0xE9D8, 0x9C04}, //6826 #CJK UNIFIED IDEOGRAPH
+ {0xE9D9, 0x9C2E}, //6827 #CJK UNIFIED IDEOGRAPH
+ {0xE9DA, 0x9C1B}, //6828 #CJK UNIFIED IDEOGRAPH
+ {0xE9DB, 0x9C25}, //6829 #CJK UNIFIED IDEOGRAPH
+ {0xE9DC, 0x9C24}, //6830 #CJK UNIFIED IDEOGRAPH
+ {0xE9DD, 0x9C21}, //6831 #CJK UNIFIED IDEOGRAPH
+ {0xE9DE, 0x9C30}, //6832 #CJK UNIFIED IDEOGRAPH
+ {0xE9DF, 0x9C47}, //6833 #CJK UNIFIED IDEOGRAPH
+ {0xE9E0, 0x9C32}, //6834 #CJK UNIFIED IDEOGRAPH
+ {0xE9E1, 0x9C46}, //6835 #CJK UNIFIED IDEOGRAPH
+ {0xE9E2, 0x9C3E}, //6836 #CJK UNIFIED IDEOGRAPH
+ {0xE9E3, 0x9C5A}, //6837 #CJK UNIFIED IDEOGRAPH
+ {0xE9E4, 0x9C60}, //6838 #CJK UNIFIED IDEOGRAPH
+ {0xE9E5, 0x9C67}, //6839 #CJK UNIFIED IDEOGRAPH
+ {0xE9E6, 0x9C76}, //6840 #CJK UNIFIED IDEOGRAPH
+ {0xE9E7, 0x9C78}, //6841 #CJK UNIFIED IDEOGRAPH
+ {0xE9E8, 0x9CE7}, //6842 #CJK UNIFIED IDEOGRAPH
+ {0xE9E9, 0x9CEC}, //6843 #CJK UNIFIED IDEOGRAPH
+ {0xE9EA, 0x9CF0}, //6844 #CJK UNIFIED IDEOGRAPH
+ {0xE9EB, 0x9D09}, //6845 #CJK UNIFIED IDEOGRAPH
+ {0xE9EC, 0x9D08}, //6846 #CJK UNIFIED IDEOGRAPH
+ {0xE9ED, 0x9CEB}, //6847 #CJK UNIFIED IDEOGRAPH
+ {0xE9EE, 0x9D03}, //6848 #CJK UNIFIED IDEOGRAPH
+ {0xE9EF, 0x9D06}, //6849 #CJK UNIFIED IDEOGRAPH
+ {0xE9F0, 0x9D2A}, //6850 #CJK UNIFIED IDEOGRAPH
+ {0xE9F1, 0x9D26}, //6851 #CJK UNIFIED IDEOGRAPH
+ {0xE9F2, 0x9DAF}, //6852 #CJK UNIFIED IDEOGRAPH
+ {0xE9F3, 0x9D23}, //6853 #CJK UNIFIED IDEOGRAPH
+ {0xE9F4, 0x9D1F}, //6854 #CJK UNIFIED IDEOGRAPH
+ {0xE9F5, 0x9D44}, //6855 #CJK UNIFIED IDEOGRAPH
+ {0xE9F6, 0x9D15}, //6856 #CJK UNIFIED IDEOGRAPH
+ {0xE9F7, 0x9D12}, //6857 #CJK UNIFIED IDEOGRAPH
+ {0xE9F8, 0x9D41}, //6858 #CJK UNIFIED IDEOGRAPH
+ {0xE9F9, 0x9D3F}, //6859 #CJK UNIFIED IDEOGRAPH
+ {0xE9FA, 0x9D3E}, //6860 #CJK UNIFIED IDEOGRAPH
+ {0xE9FB, 0x9D46}, //6861 #CJK UNIFIED IDEOGRAPH
+ {0xE9FC, 0x9D48}, //6862 #CJK UNIFIED IDEOGRAPH
+ {0xEA40, 0x9D5D}, //6863 #CJK UNIFIED IDEOGRAPH
+ {0xEA41, 0x9D5E}, //6864 #CJK UNIFIED IDEOGRAPH
+ {0xEA42, 0x9D64}, //6865 #CJK UNIFIED IDEOGRAPH
+ {0xEA43, 0x9D51}, //6866 #CJK UNIFIED IDEOGRAPH
+ {0xEA44, 0x9D50}, //6867 #CJK UNIFIED IDEOGRAPH
+ {0xEA45, 0x9D59}, //6868 #CJK UNIFIED IDEOGRAPH
+ {0xEA46, 0x9D72}, //6869 #CJK UNIFIED IDEOGRAPH
+ {0xEA47, 0x9D89}, //6870 #CJK UNIFIED IDEOGRAPH
+ {0xEA48, 0x9D87}, //6871 #CJK UNIFIED IDEOGRAPH
+ {0xEA49, 0x9DAB}, //6872 #CJK UNIFIED IDEOGRAPH
+ {0xEA4A, 0x9D6F}, //6873 #CJK UNIFIED IDEOGRAPH
+ {0xEA4B, 0x9D7A}, //6874 #CJK UNIFIED IDEOGRAPH
+ {0xEA4C, 0x9D9A}, //6875 #CJK UNIFIED IDEOGRAPH
+ {0xEA4D, 0x9DA4}, //6876 #CJK UNIFIED IDEOGRAPH
+ {0xEA4E, 0x9DA9}, //6877 #CJK UNIFIED IDEOGRAPH
+ {0xEA4F, 0x9DB2}, //6878 #CJK UNIFIED IDEOGRAPH
+ {0xEA50, 0x9DC4}, //6879 #CJK UNIFIED IDEOGRAPH
+ {0xEA51, 0x9DC1}, //6880 #CJK UNIFIED IDEOGRAPH
+ {0xEA52, 0x9DBB}, //6881 #CJK UNIFIED IDEOGRAPH
+ {0xEA53, 0x9DB8}, //6882 #CJK UNIFIED IDEOGRAPH
+ {0xEA54, 0x9DBA}, //6883 #CJK UNIFIED IDEOGRAPH
+ {0xEA55, 0x9DC6}, //6884 #CJK UNIFIED IDEOGRAPH
+ {0xEA56, 0x9DCF}, //6885 #CJK UNIFIED IDEOGRAPH
+ {0xEA57, 0x9DC2}, //6886 #CJK UNIFIED IDEOGRAPH
+ {0xEA58, 0x9DD9}, //6887 #CJK UNIFIED IDEOGRAPH
+ {0xEA59, 0x9DD3}, //6888 #CJK UNIFIED IDEOGRAPH
+ {0xEA5A, 0x9DF8}, //6889 #CJK UNIFIED IDEOGRAPH
+ {0xEA5B, 0x9DE6}, //6890 #CJK UNIFIED IDEOGRAPH
+ {0xEA5C, 0x9DED}, //6891 #CJK UNIFIED IDEOGRAPH
+ {0xEA5D, 0x9DEF}, //6892 #CJK UNIFIED IDEOGRAPH
+ {0xEA5E, 0x9DFD}, //6893 #CJK UNIFIED IDEOGRAPH
+ {0xEA5F, 0x9E1A}, //6894 #CJK UNIFIED IDEOGRAPH
+ {0xEA60, 0x9E1B}, //6895 #CJK UNIFIED IDEOGRAPH
+ {0xEA61, 0x9E1E}, //6896 #CJK UNIFIED IDEOGRAPH
+ {0xEA62, 0x9E75}, //6897 #CJK UNIFIED IDEOGRAPH
+ {0xEA63, 0x9E79}, //6898 #CJK UNIFIED IDEOGRAPH
+ {0xEA64, 0x9E7D}, //6899 #CJK UNIFIED IDEOGRAPH
+ {0xEA65, 0x9E81}, //6900 #CJK UNIFIED IDEOGRAPH
+ {0xEA66, 0x9E88}, //6901 #CJK UNIFIED IDEOGRAPH
+ {0xEA67, 0x9E8B}, //6902 #CJK UNIFIED IDEOGRAPH
+ {0xEA68, 0x9E8C}, //6903 #CJK UNIFIED IDEOGRAPH
+ {0xEA69, 0x9E92}, //6904 #CJK UNIFIED IDEOGRAPH
+ {0xEA6A, 0x9E95}, //6905 #CJK UNIFIED IDEOGRAPH
+ {0xEA6B, 0x9E91}, //6906 #CJK UNIFIED IDEOGRAPH
+ {0xEA6C, 0x9E9D}, //6907 #CJK UNIFIED IDEOGRAPH
+ {0xEA6D, 0x9EA5}, //6908 #CJK UNIFIED IDEOGRAPH
+ {0xEA6E, 0x9EA9}, //6909 #CJK UNIFIED IDEOGRAPH
+ {0xEA6F, 0x9EB8}, //6910 #CJK UNIFIED IDEOGRAPH
+ {0xEA70, 0x9EAA}, //6911 #CJK UNIFIED IDEOGRAPH
+ {0xEA71, 0x9EAD}, //6912 #CJK UNIFIED IDEOGRAPH
+ {0xEA72, 0x9761}, //6913 #CJK UNIFIED IDEOGRAPH
+ {0xEA73, 0x9ECC}, //6914 #CJK UNIFIED IDEOGRAPH
+ {0xEA74, 0x9ECE}, //6915 #CJK UNIFIED IDEOGRAPH
+ {0xEA75, 0x9ECF}, //6916 #CJK UNIFIED IDEOGRAPH
+ {0xEA76, 0x9ED0}, //6917 #CJK UNIFIED IDEOGRAPH
+ {0xEA77, 0x9ED4}, //6918 #CJK UNIFIED IDEOGRAPH
+ {0xEA78, 0x9EDC}, //6919 #CJK UNIFIED IDEOGRAPH
+ {0xEA79, 0x9EDE}, //6920 #CJK UNIFIED IDEOGRAPH
+ {0xEA7A, 0x9EDD}, //6921 #CJK UNIFIED IDEOGRAPH
+ {0xEA7B, 0x9EE0}, //6922 #CJK UNIFIED IDEOGRAPH
+ {0xEA7C, 0x9EE5}, //6923 #CJK UNIFIED IDEOGRAPH
+ {0xEA7D, 0x9EE8}, //6924 #CJK UNIFIED IDEOGRAPH
+ {0xEA7E, 0x9EEF}, //6925 #CJK UNIFIED IDEOGRAPH
+ {0xEA80, 0x9EF4}, //6926 #CJK UNIFIED IDEOGRAPH
+ {0xEA81, 0x9EF6}, //6927 #CJK UNIFIED IDEOGRAPH
+ {0xEA82, 0x9EF7}, //6928 #CJK UNIFIED IDEOGRAPH
+ {0xEA83, 0x9EF9}, //6929 #CJK UNIFIED IDEOGRAPH
+ {0xEA84, 0x9EFB}, //6930 #CJK UNIFIED IDEOGRAPH
+ {0xEA85, 0x9EFC}, //6931 #CJK UNIFIED IDEOGRAPH
+ {0xEA86, 0x9EFD}, //6932 #CJK UNIFIED IDEOGRAPH
+ {0xEA87, 0x9F07}, //6933 #CJK UNIFIED IDEOGRAPH
+ {0xEA88, 0x9F08}, //6934 #CJK UNIFIED IDEOGRAPH
+ {0xEA89, 0x76B7}, //6935 #CJK UNIFIED IDEOGRAPH
+ {0xEA8A, 0x9F15}, //6936 #CJK UNIFIED IDEOGRAPH
+ {0xEA8B, 0x9F21}, //6937 #CJK UNIFIED IDEOGRAPH
+ {0xEA8C, 0x9F2C}, //6938 #CJK UNIFIED IDEOGRAPH
+ {0xEA8D, 0x9F3E}, //6939 #CJK UNIFIED IDEOGRAPH
+ {0xEA8E, 0x9F4A}, //6940 #CJK UNIFIED IDEOGRAPH
+ {0xEA8F, 0x9F52}, //6941 #CJK UNIFIED IDEOGRAPH
+ {0xEA90, 0x9F54}, //6942 #CJK UNIFIED IDEOGRAPH
+ {0xEA91, 0x9F63}, //6943 #CJK UNIFIED IDEOGRAPH
+ {0xEA92, 0x9F5F}, //6944 #CJK UNIFIED IDEOGRAPH
+ {0xEA93, 0x9F60}, //6945 #CJK UNIFIED IDEOGRAPH
+ {0xEA94, 0x9F61}, //6946 #CJK UNIFIED IDEOGRAPH
+ {0xEA95, 0x9F66}, //6947 #CJK UNIFIED IDEOGRAPH
+ {0xEA96, 0x9F67}, //6948 #CJK UNIFIED IDEOGRAPH
+ {0xEA97, 0x9F6C}, //6949 #CJK UNIFIED IDEOGRAPH
+ {0xEA98, 0x9F6A}, //6950 #CJK UNIFIED IDEOGRAPH
+ {0xEA99, 0x9F77}, //6951 #CJK UNIFIED IDEOGRAPH
+ {0xEA9A, 0x9F72}, //6952 #CJK UNIFIED IDEOGRAPH
+ {0xEA9B, 0x9F76}, //6953 #CJK UNIFIED IDEOGRAPH
+ {0xEA9C, 0x9F95}, //6954 #CJK UNIFIED IDEOGRAPH
+ {0xEA9D, 0x9F9C}, //6955 #CJK UNIFIED IDEOGRAPH
+ {0xEA9E, 0x9FA0}, //6956 #CJK UNIFIED IDEOGRAPH
+ {0xEA9F, 0x582F}, //6957 #CJK UNIFIED IDEOGRAPH
+ {0xEAA0, 0x69C7}, //6958 #CJK UNIFIED IDEOGRAPH
+ {0xEAA1, 0x9059}, //6959 #CJK UNIFIED IDEOGRAPH
+ {0xEAA2, 0x7464}, //6960 #CJK UNIFIED IDEOGRAPH
+ {0xEAA3, 0x51DC}, //6961 #CJK UNIFIED IDEOGRAPH
+ {0xEAA4, 0x7199}, //6962 #CJK UNIFIED IDEOGRAPH
+ {0xED40, 0x7E8A}, //6963 #CJK UNIFIED IDEOGRAPH
+ {0xED41, 0x891C}, //6964 #CJK UNIFIED IDEOGRAPH
+ {0xED42, 0x9348}, //6965 #CJK UNIFIED IDEOGRAPH
+ {0xED43, 0x9288}, //6966 #CJK UNIFIED IDEOGRAPH
+ {0xED44, 0x84DC}, //6967 #CJK UNIFIED IDEOGRAPH
+ {0xED45, 0x4FC9}, //6968 #CJK UNIFIED IDEOGRAPH
+ {0xED46, 0x70BB}, //6969 #CJK UNIFIED IDEOGRAPH
+ {0xED47, 0x6631}, //6970 #CJK UNIFIED IDEOGRAPH
+ {0xED48, 0x68C8}, //6971 #CJK UNIFIED IDEOGRAPH
+ {0xED49, 0x92F9}, //6972 #CJK UNIFIED IDEOGRAPH
+ {0xED4A, 0x66FB}, //6973 #CJK UNIFIED IDEOGRAPH
+ {0xED4B, 0x5F45}, //6974 #CJK UNIFIED IDEOGRAPH
+ {0xED4C, 0x4E28}, //6975 #CJK UNIFIED IDEOGRAPH
+ {0xED4D, 0x4EE1}, //6976 #CJK UNIFIED IDEOGRAPH
+ {0xED4E, 0x4EFC}, //6977 #CJK UNIFIED IDEOGRAPH
+ {0xED4F, 0x4F00}, //6978 #CJK UNIFIED IDEOGRAPH
+ {0xED50, 0x4F03}, //6979 #CJK UNIFIED IDEOGRAPH
+ {0xED51, 0x4F39}, //6980 #CJK UNIFIED IDEOGRAPH
+ {0xED52, 0x4F56}, //6981 #CJK UNIFIED IDEOGRAPH
+ {0xED53, 0x4F92}, //6982 #CJK UNIFIED IDEOGRAPH
+ {0xED54, 0x4F8A}, //6983 #CJK UNIFIED IDEOGRAPH
+ {0xED55, 0x4F9A}, //6984 #CJK UNIFIED IDEOGRAPH
+ {0xED56, 0x4F94}, //6985 #CJK UNIFIED IDEOGRAPH
+ {0xED57, 0x4FCD}, //6986 #CJK UNIFIED IDEOGRAPH
+ {0xED58, 0x5040}, //6987 #CJK UNIFIED IDEOGRAPH
+ {0xED59, 0x5022}, //6988 #CJK UNIFIED IDEOGRAPH
+ {0xED5A, 0x4FFF}, //6989 #CJK UNIFIED IDEOGRAPH
+ {0xED5B, 0x501E}, //6990 #CJK UNIFIED IDEOGRAPH
+ {0xED5C, 0x5046}, //6991 #CJK UNIFIED IDEOGRAPH
+ {0xED5D, 0x5070}, //6992 #CJK UNIFIED IDEOGRAPH
+ {0xED5E, 0x5042}, //6993 #CJK UNIFIED IDEOGRAPH
+ {0xED5F, 0x5094}, //6994 #CJK UNIFIED IDEOGRAPH
+ {0xED60, 0x50F4}, //6995 #CJK UNIFIED IDEOGRAPH
+ {0xED61, 0x50D8}, //6996 #CJK UNIFIED IDEOGRAPH
+ {0xED62, 0x514A}, //6997 #CJK UNIFIED IDEOGRAPH
+ {0xED63, 0x5164}, //6998 #CJK UNIFIED IDEOGRAPH
+ {0xED64, 0x519D}, //6999 #CJK UNIFIED IDEOGRAPH
+ {0xED65, 0x51BE}, //7000 #CJK UNIFIED IDEOGRAPH
+ {0xED66, 0x51EC}, //7001 #CJK UNIFIED IDEOGRAPH
+ {0xED67, 0x5215}, //7002 #CJK UNIFIED IDEOGRAPH
+ {0xED68, 0x529C}, //7003 #CJK UNIFIED IDEOGRAPH
+ {0xED69, 0x52A6}, //7004 #CJK UNIFIED IDEOGRAPH
+ {0xED6A, 0x52C0}, //7005 #CJK UNIFIED IDEOGRAPH
+ {0xED6B, 0x52DB}, //7006 #CJK UNIFIED IDEOGRAPH
+ {0xED6C, 0x5300}, //7007 #CJK UNIFIED IDEOGRAPH
+ {0xED6D, 0x5307}, //7008 #CJK UNIFIED IDEOGRAPH
+ {0xED6E, 0x5324}, //7009 #CJK UNIFIED IDEOGRAPH
+ {0xED6F, 0x5372}, //7010 #CJK UNIFIED IDEOGRAPH
+ {0xED70, 0x5393}, //7011 #CJK UNIFIED IDEOGRAPH
+ {0xED71, 0x53B2}, //7012 #CJK UNIFIED IDEOGRAPH
+ {0xED72, 0x53DD}, //7013 #CJK UNIFIED IDEOGRAPH
+ {0xED73, 0xFA0E}, //7014 #CJK COMPATIBILITY IDEOGRAPH
+ {0xED74, 0x549C}, //7015 #CJK UNIFIED IDEOGRAPH
+ {0xED75, 0x548A}, //7016 #CJK UNIFIED IDEOGRAPH
+ {0xED76, 0x54A9}, //7017 #CJK UNIFIED IDEOGRAPH
+ {0xED77, 0x54FF}, //7018 #CJK UNIFIED IDEOGRAPH
+ {0xED78, 0x5586}, //7019 #CJK UNIFIED IDEOGRAPH
+ {0xED79, 0x5759}, //7020 #CJK UNIFIED IDEOGRAPH
+ {0xED7A, 0x5765}, //7021 #CJK UNIFIED IDEOGRAPH
+ {0xED7B, 0x57AC}, //7022 #CJK UNIFIED IDEOGRAPH
+ {0xED7C, 0x57C8}, //7023 #CJK UNIFIED IDEOGRAPH
+ {0xED7D, 0x57C7}, //7024 #CJK UNIFIED IDEOGRAPH
+ {0xED7E, 0xFA0F}, //7025 #CJK COMPATIBILITY IDEOGRAPH
+ {0xED80, 0xFA10}, //7026 #CJK COMPATIBILITY IDEOGRAPH
+ {0xED81, 0x589E}, //7027 #CJK UNIFIED IDEOGRAPH
+ {0xED82, 0x58B2}, //7028 #CJK UNIFIED IDEOGRAPH
+ {0xED83, 0x590B}, //7029 #CJK UNIFIED IDEOGRAPH
+ {0xED84, 0x5953}, //7030 #CJK UNIFIED IDEOGRAPH
+ {0xED85, 0x595B}, //7031 #CJK UNIFIED IDEOGRAPH
+ {0xED86, 0x595D}, //7032 #CJK UNIFIED IDEOGRAPH
+ {0xED87, 0x5963}, //7033 #CJK UNIFIED IDEOGRAPH
+ {0xED88, 0x59A4}, //7034 #CJK UNIFIED IDEOGRAPH
+ {0xED89, 0x59BA}, //7035 #CJK UNIFIED IDEOGRAPH
+ {0xED8A, 0x5B56}, //7036 #CJK UNIFIED IDEOGRAPH
+ {0xED8B, 0x5BC0}, //7037 #CJK UNIFIED IDEOGRAPH
+ {0xED8C, 0x752F}, //7038 #CJK UNIFIED IDEOGRAPH
+ {0xED8D, 0x5BD8}, //7039 #CJK UNIFIED IDEOGRAPH
+ {0xED8E, 0x5BEC}, //7040 #CJK UNIFIED IDEOGRAPH
+ {0xED8F, 0x5C1E}, //7041 #CJK UNIFIED IDEOGRAPH
+ {0xED90, 0x5CA6}, //7042 #CJK UNIFIED IDEOGRAPH
+ {0xED91, 0x5CBA}, //7043 #CJK UNIFIED IDEOGRAPH
+ {0xED92, 0x5CF5}, //7044 #CJK UNIFIED IDEOGRAPH
+ {0xED93, 0x5D27}, //7045 #CJK UNIFIED IDEOGRAPH
+ {0xED94, 0x5D53}, //7046 #CJK UNIFIED IDEOGRAPH
+ {0xED95, 0xFA11}, //7047 #CJK COMPATIBILITY IDEOGRAPH
+ {0xED96, 0x5D42}, //7048 #CJK UNIFIED IDEOGRAPH
+ {0xED97, 0x5D6D}, //7049 #CJK UNIFIED IDEOGRAPH
+ {0xED98, 0x5DB8}, //7050 #CJK UNIFIED IDEOGRAPH
+ {0xED99, 0x5DB9}, //7051 #CJK UNIFIED IDEOGRAPH
+ {0xED9A, 0x5DD0}, //7052 #CJK UNIFIED IDEOGRAPH
+ {0xED9B, 0x5F21}, //7053 #CJK UNIFIED IDEOGRAPH
+ {0xED9C, 0x5F34}, //7054 #CJK UNIFIED IDEOGRAPH
+ {0xED9D, 0x5F67}, //7055 #CJK UNIFIED IDEOGRAPH
+ {0xED9E, 0x5FB7}, //7056 #CJK UNIFIED IDEOGRAPH
+ {0xED9F, 0x5FDE}, //7057 #CJK UNIFIED IDEOGRAPH
+ {0xEDA0, 0x605D}, //7058 #CJK UNIFIED IDEOGRAPH
+ {0xEDA1, 0x6085}, //7059 #CJK UNIFIED IDEOGRAPH
+ {0xEDA2, 0x608A}, //7060 #CJK UNIFIED IDEOGRAPH
+ {0xEDA3, 0x60DE}, //7061 #CJK UNIFIED IDEOGRAPH
+ {0xEDA4, 0x60D5}, //7062 #CJK UNIFIED IDEOGRAPH
+ {0xEDA5, 0x6120}, //7063 #CJK UNIFIED IDEOGRAPH
+ {0xEDA6, 0x60F2}, //7064 #CJK UNIFIED IDEOGRAPH
+ {0xEDA7, 0x6111}, //7065 #CJK UNIFIED IDEOGRAPH
+ {0xEDA8, 0x6137}, //7066 #CJK UNIFIED IDEOGRAPH
+ {0xEDA9, 0x6130}, //7067 #CJK UNIFIED IDEOGRAPH
+ {0xEDAA, 0x6198}, //7068 #CJK UNIFIED IDEOGRAPH
+ {0xEDAB, 0x6213}, //7069 #CJK UNIFIED IDEOGRAPH
+ {0xEDAC, 0x62A6}, //7070 #CJK UNIFIED IDEOGRAPH
+ {0xEDAD, 0x63F5}, //7071 #CJK UNIFIED IDEOGRAPH
+ {0xEDAE, 0x6460}, //7072 #CJK UNIFIED IDEOGRAPH
+ {0xEDAF, 0x649D}, //7073 #CJK UNIFIED IDEOGRAPH
+ {0xEDB0, 0x64CE}, //7074 #CJK UNIFIED IDEOGRAPH
+ {0xEDB1, 0x654E}, //7075 #CJK UNIFIED IDEOGRAPH
+ {0xEDB2, 0x6600}, //7076 #CJK UNIFIED IDEOGRAPH
+ {0xEDB3, 0x6615}, //7077 #CJK UNIFIED IDEOGRAPH
+ {0xEDB4, 0x663B}, //7078 #CJK UNIFIED IDEOGRAPH
+ {0xEDB5, 0x6609}, //7079 #CJK UNIFIED IDEOGRAPH
+ {0xEDB6, 0x662E}, //7080 #CJK UNIFIED IDEOGRAPH
+ {0xEDB7, 0x661E}, //7081 #CJK UNIFIED IDEOGRAPH
+ {0xEDB8, 0x6624}, //7082 #CJK UNIFIED IDEOGRAPH
+ {0xEDB9, 0x6665}, //7083 #CJK UNIFIED IDEOGRAPH
+ {0xEDBA, 0x6657}, //7084 #CJK UNIFIED IDEOGRAPH
+ {0xEDBB, 0x6659}, //7085 #CJK UNIFIED IDEOGRAPH
+ {0xEDBC, 0xFA12}, //7086 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDBD, 0x6673}, //7087 #CJK UNIFIED IDEOGRAPH
+ {0xEDBE, 0x6699}, //7088 #CJK UNIFIED IDEOGRAPH
+ {0xEDBF, 0x66A0}, //7089 #CJK UNIFIED IDEOGRAPH
+ {0xEDC0, 0x66B2}, //7090 #CJK UNIFIED IDEOGRAPH
+ {0xEDC1, 0x66BF}, //7091 #CJK UNIFIED IDEOGRAPH
+ {0xEDC2, 0x66FA}, //7092 #CJK UNIFIED IDEOGRAPH
+ {0xEDC3, 0x670E}, //7093 #CJK UNIFIED IDEOGRAPH
+ {0xEDC4, 0xF929}, //7094 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDC5, 0x6766}, //7095 #CJK UNIFIED IDEOGRAPH
+ {0xEDC6, 0x67BB}, //7096 #CJK UNIFIED IDEOGRAPH
+ {0xEDC7, 0x6852}, //7097 #CJK UNIFIED IDEOGRAPH
+ {0xEDC8, 0x67C0}, //7098 #CJK UNIFIED IDEOGRAPH
+ {0xEDC9, 0x6801}, //7099 #CJK UNIFIED IDEOGRAPH
+ {0xEDCA, 0x6844}, //7100 #CJK UNIFIED IDEOGRAPH
+ {0xEDCB, 0x68CF}, //7101 #CJK UNIFIED IDEOGRAPH
+ {0xEDCC, 0xFA13}, //7102 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDCD, 0x6968}, //7103 #CJK UNIFIED IDEOGRAPH
+ {0xEDCE, 0xFA14}, //7104 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDCF, 0x6998}, //7105 #CJK UNIFIED IDEOGRAPH
+ {0xEDD0, 0x69E2}, //7106 #CJK UNIFIED IDEOGRAPH
+ {0xEDD1, 0x6A30}, //7107 #CJK UNIFIED IDEOGRAPH
+ {0xEDD2, 0x6A6B}, //7108 #CJK UNIFIED IDEOGRAPH
+ {0xEDD3, 0x6A46}, //7109 #CJK UNIFIED IDEOGRAPH
+ {0xEDD4, 0x6A73}, //7110 #CJK UNIFIED IDEOGRAPH
+ {0xEDD5, 0x6A7E}, //7111 #CJK UNIFIED IDEOGRAPH
+ {0xEDD6, 0x6AE2}, //7112 #CJK UNIFIED IDEOGRAPH
+ {0xEDD7, 0x6AE4}, //7113 #CJK UNIFIED IDEOGRAPH
+ {0xEDD8, 0x6BD6}, //7114 #CJK UNIFIED IDEOGRAPH
+ {0xEDD9, 0x6C3F}, //7115 #CJK UNIFIED IDEOGRAPH
+ {0xEDDA, 0x6C5C}, //7116 #CJK UNIFIED IDEOGRAPH
+ {0xEDDB, 0x6C86}, //7117 #CJK UNIFIED IDEOGRAPH
+ {0xEDDC, 0x6C6F}, //7118 #CJK UNIFIED IDEOGRAPH
+ {0xEDDD, 0x6CDA}, //7119 #CJK UNIFIED IDEOGRAPH
+ {0xEDDE, 0x6D04}, //7120 #CJK UNIFIED IDEOGRAPH
+ {0xEDDF, 0x6D87}, //7121 #CJK UNIFIED IDEOGRAPH
+ {0xEDE0, 0x6D6F}, //7122 #CJK UNIFIED IDEOGRAPH
+ {0xEDE1, 0x6D96}, //7123 #CJK UNIFIED IDEOGRAPH
+ {0xEDE2, 0x6DAC}, //7124 #CJK UNIFIED IDEOGRAPH
+ {0xEDE3, 0x6DCF}, //7125 #CJK UNIFIED IDEOGRAPH
+ {0xEDE4, 0x6DF8}, //7126 #CJK UNIFIED IDEOGRAPH
+ {0xEDE5, 0x6DF2}, //7127 #CJK UNIFIED IDEOGRAPH
+ {0xEDE6, 0x6DFC}, //7128 #CJK UNIFIED IDEOGRAPH
+ {0xEDE7, 0x6E39}, //7129 #CJK UNIFIED IDEOGRAPH
+ {0xEDE8, 0x6E5C}, //7130 #CJK UNIFIED IDEOGRAPH
+ {0xEDE9, 0x6E27}, //7131 #CJK UNIFIED IDEOGRAPH
+ {0xEDEA, 0x6E3C}, //7132 #CJK UNIFIED IDEOGRAPH
+ {0xEDEB, 0x6EBF}, //7133 #CJK UNIFIED IDEOGRAPH
+ {0xEDEC, 0x6F88}, //7134 #CJK UNIFIED IDEOGRAPH
+ {0xEDED, 0x6FB5}, //7135 #CJK UNIFIED IDEOGRAPH
+ {0xEDEE, 0x6FF5}, //7136 #CJK UNIFIED IDEOGRAPH
+ {0xEDEF, 0x7005}, //7137 #CJK UNIFIED IDEOGRAPH
+ {0xEDF0, 0x7007}, //7138 #CJK UNIFIED IDEOGRAPH
+ {0xEDF1, 0x7028}, //7139 #CJK UNIFIED IDEOGRAPH
+ {0xEDF2, 0x7085}, //7140 #CJK UNIFIED IDEOGRAPH
+ {0xEDF3, 0x70AB}, //7141 #CJK UNIFIED IDEOGRAPH
+ {0xEDF4, 0x710F}, //7142 #CJK UNIFIED IDEOGRAPH
+ {0xEDF5, 0x7104}, //7143 #CJK UNIFIED IDEOGRAPH
+ {0xEDF6, 0x715C}, //7144 #CJK UNIFIED IDEOGRAPH
+ {0xEDF7, 0x7146}, //7145 #CJK UNIFIED IDEOGRAPH
+ {0xEDF8, 0x7147}, //7146 #CJK UNIFIED IDEOGRAPH
+ {0xEDF9, 0xFA15}, //7147 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDFA, 0x71C1}, //7148 #CJK UNIFIED IDEOGRAPH
+ {0xEDFB, 0x71FE}, //7149 #CJK UNIFIED IDEOGRAPH
+ {0xEDFC, 0x72B1}, //7150 #CJK UNIFIED IDEOGRAPH
+ {0xEE40, 0x72BE}, //7151 #CJK UNIFIED IDEOGRAPH
+ {0xEE41, 0x7324}, //7152 #CJK UNIFIED IDEOGRAPH
+ {0xEE42, 0xFA16}, //7153 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE43, 0x7377}, //7154 #CJK UNIFIED IDEOGRAPH
+ {0xEE44, 0x73BD}, //7155 #CJK UNIFIED IDEOGRAPH
+ {0xEE45, 0x73C9}, //7156 #CJK UNIFIED IDEOGRAPH
+ {0xEE46, 0x73D6}, //7157 #CJK UNIFIED IDEOGRAPH
+ {0xEE47, 0x73E3}, //7158 #CJK UNIFIED IDEOGRAPH
+ {0xEE48, 0x73D2}, //7159 #CJK UNIFIED IDEOGRAPH
+ {0xEE49, 0x7407}, //7160 #CJK UNIFIED IDEOGRAPH
+ {0xEE4A, 0x73F5}, //7161 #CJK UNIFIED IDEOGRAPH
+ {0xEE4B, 0x7426}, //7162 #CJK UNIFIED IDEOGRAPH
+ {0xEE4C, 0x742A}, //7163 #CJK UNIFIED IDEOGRAPH
+ {0xEE4D, 0x7429}, //7164 #CJK UNIFIED IDEOGRAPH
+ {0xEE4E, 0x742E}, //7165 #CJK UNIFIED IDEOGRAPH
+ {0xEE4F, 0x7462}, //7166 #CJK UNIFIED IDEOGRAPH
+ {0xEE50, 0x7489}, //7167 #CJK UNIFIED IDEOGRAPH
+ {0xEE51, 0x749F}, //7168 #CJK UNIFIED IDEOGRAPH
+ {0xEE52, 0x7501}, //7169 #CJK UNIFIED IDEOGRAPH
+ {0xEE53, 0x756F}, //7170 #CJK UNIFIED IDEOGRAPH
+ {0xEE54, 0x7682}, //7171 #CJK UNIFIED IDEOGRAPH
+ {0xEE55, 0x769C}, //7172 #CJK UNIFIED IDEOGRAPH
+ {0xEE56, 0x769E}, //7173 #CJK UNIFIED IDEOGRAPH
+ {0xEE57, 0x769B}, //7174 #CJK UNIFIED IDEOGRAPH
+ {0xEE58, 0x76A6}, //7175 #CJK UNIFIED IDEOGRAPH
+ {0xEE59, 0xFA17}, //7176 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE5A, 0x7746}, //7177 #CJK UNIFIED IDEOGRAPH
+ {0xEE5B, 0x52AF}, //7178 #CJK UNIFIED IDEOGRAPH
+ {0xEE5C, 0x7821}, //7179 #CJK UNIFIED IDEOGRAPH
+ {0xEE5D, 0x784E}, //7180 #CJK UNIFIED IDEOGRAPH
+ {0xEE5E, 0x7864}, //7181 #CJK UNIFIED IDEOGRAPH
+ {0xEE5F, 0x787A}, //7182 #CJK UNIFIED IDEOGRAPH
+ {0xEE60, 0x7930}, //7183 #CJK UNIFIED IDEOGRAPH
+ {0xEE61, 0xFA18}, //7184 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE62, 0xFA19}, //7185 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE63, 0xFA1A}, //7186 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE64, 0x7994}, //7187 #CJK UNIFIED IDEOGRAPH
+ {0xEE65, 0xFA1B}, //7188 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE66, 0x799B}, //7189 #CJK UNIFIED IDEOGRAPH
+ {0xEE67, 0x7AD1}, //7190 #CJK UNIFIED IDEOGRAPH
+ {0xEE68, 0x7AE7}, //7191 #CJK UNIFIED IDEOGRAPH
+ {0xEE69, 0xFA1C}, //7192 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE6A, 0x7AEB}, //7193 #CJK UNIFIED IDEOGRAPH
+ {0xEE6B, 0x7B9E}, //7194 #CJK UNIFIED IDEOGRAPH
+ {0xEE6C, 0xFA1D}, //7195 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE6D, 0x7D48}, //7196 #CJK UNIFIED IDEOGRAPH
+ {0xEE6E, 0x7D5C}, //7197 #CJK UNIFIED IDEOGRAPH
+ {0xEE6F, 0x7DB7}, //7198 #CJK UNIFIED IDEOGRAPH
+ {0xEE70, 0x7DA0}, //7199 #CJK UNIFIED IDEOGRAPH
+ {0xEE71, 0x7DD6}, //7200 #CJK UNIFIED IDEOGRAPH
+ {0xEE72, 0x7E52}, //7201 #CJK UNIFIED IDEOGRAPH
+ {0xEE73, 0x7F47}, //7202 #CJK UNIFIED IDEOGRAPH
+ {0xEE74, 0x7FA1}, //7203 #CJK UNIFIED IDEOGRAPH
+ {0xEE75, 0xFA1E}, //7204 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE76, 0x8301}, //7205 #CJK UNIFIED IDEOGRAPH
+ {0xEE77, 0x8362}, //7206 #CJK UNIFIED IDEOGRAPH
+ {0xEE78, 0x837F}, //7207 #CJK UNIFIED IDEOGRAPH
+ {0xEE79, 0x83C7}, //7208 #CJK UNIFIED IDEOGRAPH
+ {0xEE7A, 0x83F6}, //7209 #CJK UNIFIED IDEOGRAPH
+ {0xEE7B, 0x8448}, //7210 #CJK UNIFIED IDEOGRAPH
+ {0xEE7C, 0x84B4}, //7211 #CJK UNIFIED IDEOGRAPH
+ {0xEE7D, 0x8553}, //7212 #CJK UNIFIED IDEOGRAPH
+ {0xEE7E, 0x8559}, //7213 #CJK UNIFIED IDEOGRAPH
+ {0xEE80, 0x856B}, //7214 #CJK UNIFIED IDEOGRAPH
+ {0xEE81, 0xFA1F}, //7215 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE82, 0x85B0}, //7216 #CJK UNIFIED IDEOGRAPH
+ {0xEE83, 0xFA20}, //7217 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE84, 0xFA21}, //7218 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE85, 0x8807}, //7219 #CJK UNIFIED IDEOGRAPH
+ {0xEE86, 0x88F5}, //7220 #CJK UNIFIED IDEOGRAPH
+ {0xEE87, 0x8A12}, //7221 #CJK UNIFIED IDEOGRAPH
+ {0xEE88, 0x8A37}, //7222 #CJK UNIFIED IDEOGRAPH
+ {0xEE89, 0x8A79}, //7223 #CJK UNIFIED IDEOGRAPH
+ {0xEE8A, 0x8AA7}, //7224 #CJK UNIFIED IDEOGRAPH
+ {0xEE8B, 0x8ABE}, //7225 #CJK UNIFIED IDEOGRAPH
+ {0xEE8C, 0x8ADF}, //7226 #CJK UNIFIED IDEOGRAPH
+ {0xEE8D, 0xFA22}, //7227 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE8E, 0x8AF6}, //7228 #CJK UNIFIED IDEOGRAPH
+ {0xEE8F, 0x8B53}, //7229 #CJK UNIFIED IDEOGRAPH
+ {0xEE90, 0x8B7F}, //7230 #CJK UNIFIED IDEOGRAPH
+ {0xEE91, 0x8CF0}, //7231 #CJK UNIFIED IDEOGRAPH
+ {0xEE92, 0x8CF4}, //7232 #CJK UNIFIED IDEOGRAPH
+ {0xEE93, 0x8D12}, //7233 #CJK UNIFIED IDEOGRAPH
+ {0xEE94, 0x8D76}, //7234 #CJK UNIFIED IDEOGRAPH
+ {0xEE95, 0xFA23}, //7235 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE96, 0x8ECF}, //7236 #CJK UNIFIED IDEOGRAPH
+ {0xEE97, 0xFA24}, //7237 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE98, 0xFA25}, //7238 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE99, 0x9067}, //7239 #CJK UNIFIED IDEOGRAPH
+ {0xEE9A, 0x90DE}, //7240 #CJK UNIFIED IDEOGRAPH
+ {0xEE9B, 0xFA26}, //7241 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEE9C, 0x9115}, //7242 #CJK UNIFIED IDEOGRAPH
+ {0xEE9D, 0x9127}, //7243 #CJK UNIFIED IDEOGRAPH
+ {0xEE9E, 0x91DA}, //7244 #CJK UNIFIED IDEOGRAPH
+ {0xEE9F, 0x91D7}, //7245 #CJK UNIFIED IDEOGRAPH
+ {0xEEA0, 0x91DE}, //7246 #CJK UNIFIED IDEOGRAPH
+ {0xEEA1, 0x91ED}, //7247 #CJK UNIFIED IDEOGRAPH
+ {0xEEA2, 0x91EE}, //7248 #CJK UNIFIED IDEOGRAPH
+ {0xEEA3, 0x91E4}, //7249 #CJK UNIFIED IDEOGRAPH
+ {0xEEA4, 0x91E5}, //7250 #CJK UNIFIED IDEOGRAPH
+ {0xEEA5, 0x9206}, //7251 #CJK UNIFIED IDEOGRAPH
+ {0xEEA6, 0x9210}, //7252 #CJK UNIFIED IDEOGRAPH
+ {0xEEA7, 0x920A}, //7253 #CJK UNIFIED IDEOGRAPH
+ {0xEEA8, 0x923A}, //7254 #CJK UNIFIED IDEOGRAPH
+ {0xEEA9, 0x9240}, //7255 #CJK UNIFIED IDEOGRAPH
+ {0xEEAA, 0x923C}, //7256 #CJK UNIFIED IDEOGRAPH
+ {0xEEAB, 0x924E}, //7257 #CJK UNIFIED IDEOGRAPH
+ {0xEEAC, 0x9259}, //7258 #CJK UNIFIED IDEOGRAPH
+ {0xEEAD, 0x9251}, //7259 #CJK UNIFIED IDEOGRAPH
+ {0xEEAE, 0x9239}, //7260 #CJK UNIFIED IDEOGRAPH
+ {0xEEAF, 0x9267}, //7261 #CJK UNIFIED IDEOGRAPH
+ {0xEEB0, 0x92A7}, //7262 #CJK UNIFIED IDEOGRAPH
+ {0xEEB1, 0x9277}, //7263 #CJK UNIFIED IDEOGRAPH
+ {0xEEB2, 0x9278}, //7264 #CJK UNIFIED IDEOGRAPH
+ {0xEEB3, 0x92E7}, //7265 #CJK UNIFIED IDEOGRAPH
+ {0xEEB4, 0x92D7}, //7266 #CJK UNIFIED IDEOGRAPH
+ {0xEEB5, 0x92D9}, //7267 #CJK UNIFIED IDEOGRAPH
+ {0xEEB6, 0x92D0}, //7268 #CJK UNIFIED IDEOGRAPH
+ {0xEEB7, 0xFA27}, //7269 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEB8, 0x92D5}, //7270 #CJK UNIFIED IDEOGRAPH
+ {0xEEB9, 0x92E0}, //7271 #CJK UNIFIED IDEOGRAPH
+ {0xEEBA, 0x92D3}, //7272 #CJK UNIFIED IDEOGRAPH
+ {0xEEBB, 0x9325}, //7273 #CJK UNIFIED IDEOGRAPH
+ {0xEEBC, 0x9321}, //7274 #CJK UNIFIED IDEOGRAPH
+ {0xEEBD, 0x92FB}, //7275 #CJK UNIFIED IDEOGRAPH
+ {0xEEBE, 0xFA28}, //7276 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEBF, 0x931E}, //7277 #CJK UNIFIED IDEOGRAPH
+ {0xEEC0, 0x92FF}, //7278 #CJK UNIFIED IDEOGRAPH
+ {0xEEC1, 0x931D}, //7279 #CJK UNIFIED IDEOGRAPH
+ {0xEEC2, 0x9302}, //7280 #CJK UNIFIED IDEOGRAPH
+ {0xEEC3, 0x9370}, //7281 #CJK UNIFIED IDEOGRAPH
+ {0xEEC4, 0x9357}, //7282 #CJK UNIFIED IDEOGRAPH
+ {0xEEC5, 0x93A4}, //7283 #CJK UNIFIED IDEOGRAPH
+ {0xEEC6, 0x93C6}, //7284 #CJK UNIFIED IDEOGRAPH
+ {0xEEC7, 0x93DE}, //7285 #CJK UNIFIED IDEOGRAPH
+ {0xEEC8, 0x93F8}, //7286 #CJK UNIFIED IDEOGRAPH
+ {0xEEC9, 0x9431}, //7287 #CJK UNIFIED IDEOGRAPH
+ {0xEECA, 0x9445}, //7288 #CJK UNIFIED IDEOGRAPH
+ {0xEECB, 0x9448}, //7289 #CJK UNIFIED IDEOGRAPH
+ {0xEECC, 0x9592}, //7290 #CJK UNIFIED IDEOGRAPH
+ {0xEECD, 0xF9DC}, //7291 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEECE, 0xFA29}, //7292 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEECF, 0x969D}, //7293 #CJK UNIFIED IDEOGRAPH
+ {0xEED0, 0x96AF}, //7294 #CJK UNIFIED IDEOGRAPH
+ {0xEED1, 0x9733}, //7295 #CJK UNIFIED IDEOGRAPH
+ {0xEED2, 0x973B}, //7296 #CJK UNIFIED IDEOGRAPH
+ {0xEED3, 0x9743}, //7297 #CJK UNIFIED IDEOGRAPH
+ {0xEED4, 0x974D}, //7298 #CJK UNIFIED IDEOGRAPH
+ {0xEED5, 0x974F}, //7299 #CJK UNIFIED IDEOGRAPH
+ {0xEED6, 0x9751}, //7300 #CJK UNIFIED IDEOGRAPH
+ {0xEED7, 0x9755}, //7301 #CJK UNIFIED IDEOGRAPH
+ {0xEED8, 0x9857}, //7302 #CJK UNIFIED IDEOGRAPH
+ {0xEED9, 0x9865}, //7303 #CJK UNIFIED IDEOGRAPH
+ {0xEEDA, 0xFA2A}, //7304 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEDB, 0xFA2B}, //7305 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEDC, 0x9927}, //7306 #CJK UNIFIED IDEOGRAPH
+ {0xEEDD, 0xFA2C}, //7307 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEDE, 0x999E}, //7308 #CJK UNIFIED IDEOGRAPH
+ {0xEEDF, 0x9A4E}, //7309 #CJK UNIFIED IDEOGRAPH
+ {0xEEE0, 0x9AD9}, //7310 #CJK UNIFIED IDEOGRAPH
+ {0xEEE1, 0x9ADC}, //7311 #CJK UNIFIED IDEOGRAPH
+ {0xEEE2, 0x9B75}, //7312 #CJK UNIFIED IDEOGRAPH
+ {0xEEE3, 0x9B72}, //7313 #CJK UNIFIED IDEOGRAPH
+ {0xEEE4, 0x9B8F}, //7314 #CJK UNIFIED IDEOGRAPH
+ {0xEEE5, 0x9BB1}, //7315 #CJK UNIFIED IDEOGRAPH
+ {0xEEE6, 0x9BBB}, //7316 #CJK UNIFIED IDEOGRAPH
+ {0xEEE7, 0x9C00}, //7317 #CJK UNIFIED IDEOGRAPH
+ {0xEEE8, 0x9D70}, //7318 #CJK UNIFIED IDEOGRAPH
+ {0xEEE9, 0x9D6B}, //7319 #CJK UNIFIED IDEOGRAPH
+ {0xEEEA, 0xFA2D}, //7320 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEEB, 0x9E19}, //7321 #CJK UNIFIED IDEOGRAPH
+ {0xEEEC, 0x9ED1}, //7322 #CJK UNIFIED IDEOGRAPH
+ {0xEEEF, 0x2170}, //7323 #SMALL ROMAN NUMERAL ONE
+ {0xEEF0, 0x2171}, //7324 #SMALL ROMAN NUMERAL TWO
+ {0xEEF1, 0x2172}, //7325 #SMALL ROMAN NUMERAL THREE
+ {0xEEF2, 0x2173}, //7326 #SMALL ROMAN NUMERAL FOUR
+ {0xEEF3, 0x2174}, //7327 #SMALL ROMAN NUMERAL FIVE
+ {0xEEF4, 0x2175}, //7328 #SMALL ROMAN NUMERAL SIX
+ {0xEEF5, 0x2176}, //7329 #SMALL ROMAN NUMERAL SEVEN
+ {0xEEF6, 0x2177}, //7330 #SMALL ROMAN NUMERAL EIGHT
+ {0xEEF7, 0x2178}, //7331 #SMALL ROMAN NUMERAL NINE
+ {0xEEF8, 0x2179}, //7332 #SMALL ROMAN NUMERAL TEN
+ {0xEEF9, 0xFFE2}, //7333 #FULLWIDTH NOT SIGN
+ {0xEEFA, 0xFFE4}, //7334 #FULLWIDTH BROKEN BAR
+ {0xEEFB, 0xFF07}, //7335 #FULLWIDTH APOSTROPHE
+ {0xEEFC, 0xFF02}, //7336 #FULLWIDTH QUOTATION MARK
+ {0xFA40, 0x2170}, //7337 #SMALL ROMAN NUMERAL ONE
+ {0xFA41, 0x2171}, //7338 #SMALL ROMAN NUMERAL TWO
+ {0xFA42, 0x2172}, //7339 #SMALL ROMAN NUMERAL THREE
+ {0xFA43, 0x2173}, //7340 #SMALL ROMAN NUMERAL FOUR
+ {0xFA44, 0x2174}, //7341 #SMALL ROMAN NUMERAL FIVE
+ {0xFA45, 0x2175}, //7342 #SMALL ROMAN NUMERAL SIX
+ {0xFA46, 0x2176}, //7343 #SMALL ROMAN NUMERAL SEVEN
+ {0xFA47, 0x2177}, //7344 #SMALL ROMAN NUMERAL EIGHT
+ {0xFA48, 0x2178}, //7345 #SMALL ROMAN NUMERAL NINE
+ {0xFA49, 0x2179}, //7346 #SMALL ROMAN NUMERAL TEN
+ {0xFA4A, 0x2160}, //7347 #ROMAN NUMERAL ONE
+ {0xFA4B, 0x2161}, //7348 #ROMAN NUMERAL TWO
+ {0xFA4C, 0x2162}, //7349 #ROMAN NUMERAL THREE
+ {0xFA4D, 0x2163}, //7350 #ROMAN NUMERAL FOUR
+ {0xFA4E, 0x2164}, //7351 #ROMAN NUMERAL FIVE
+ {0xFA4F, 0x2165}, //7352 #ROMAN NUMERAL SIX
+ {0xFA50, 0x2166}, //7353 #ROMAN NUMERAL SEVEN
+ {0xFA51, 0x2167}, //7354 #ROMAN NUMERAL EIGHT
+ {0xFA52, 0x2168}, //7355 #ROMAN NUMERAL NINE
+ {0xFA53, 0x2169}, //7356 #ROMAN NUMERAL TEN
+ {0xFA54, 0xFFE2}, //7357 #FULLWIDTH NOT SIGN
+ {0xFA55, 0xFFE4}, //7358 #FULLWIDTH BROKEN BAR
+ {0xFA56, 0xFF07}, //7359 #FULLWIDTH APOSTROPHE
+ {0xFA57, 0xFF02}, //7360 #FULLWIDTH QUOTATION MARK
+ {0xFA58, 0x3231}, //7361 #PARENTHESIZED IDEOGRAPH STOCK
+ {0xFA59, 0x2116}, //7362 #NUMERO SIGN
+ {0xFA5A, 0x2121}, //7363 #TELEPHONE SIGN
+ {0xFA5B, 0x2235}, //7364 #BECAUSE
+ {0xFA5C, 0x7E8A}, //7365 #CJK UNIFIED IDEOGRAPH
+ {0xFA5D, 0x891C}, //7366 #CJK UNIFIED IDEOGRAPH
+ {0xFA5E, 0x9348}, //7367 #CJK UNIFIED IDEOGRAPH
+ {0xFA5F, 0x9288}, //7368 #CJK UNIFIED IDEOGRAPH
+ {0xFA60, 0x84DC}, //7369 #CJK UNIFIED IDEOGRAPH
+ {0xFA61, 0x4FC9}, //7370 #CJK UNIFIED IDEOGRAPH
+ {0xFA62, 0x70BB}, //7371 #CJK UNIFIED IDEOGRAPH
+ {0xFA63, 0x6631}, //7372 #CJK UNIFIED IDEOGRAPH
+ {0xFA64, 0x68C8}, //7373 #CJK UNIFIED IDEOGRAPH
+ {0xFA65, 0x92F9}, //7374 #CJK UNIFIED IDEOGRAPH
+ {0xFA66, 0x66FB}, //7375 #CJK UNIFIED IDEOGRAPH
+ {0xFA67, 0x5F45}, //7376 #CJK UNIFIED IDEOGRAPH
+ {0xFA68, 0x4E28}, //7377 #CJK UNIFIED IDEOGRAPH
+ {0xFA69, 0x4EE1}, //7378 #CJK UNIFIED IDEOGRAPH
+ {0xFA6A, 0x4EFC}, //7379 #CJK UNIFIED IDEOGRAPH
+ {0xFA6B, 0x4F00}, //7380 #CJK UNIFIED IDEOGRAPH
+ {0xFA6C, 0x4F03}, //7381 #CJK UNIFIED IDEOGRAPH
+ {0xFA6D, 0x4F39}, //7382 #CJK UNIFIED IDEOGRAPH
+ {0xFA6E, 0x4F56}, //7383 #CJK UNIFIED IDEOGRAPH
+ {0xFA6F, 0x4F92}, //7384 #CJK UNIFIED IDEOGRAPH
+ {0xFA70, 0x4F8A}, //7385 #CJK UNIFIED IDEOGRAPH
+ {0xFA71, 0x4F9A}, //7386 #CJK UNIFIED IDEOGRAPH
+ {0xFA72, 0x4F94}, //7387 #CJK UNIFIED IDEOGRAPH
+ {0xFA73, 0x4FCD}, //7388 #CJK UNIFIED IDEOGRAPH
+ {0xFA74, 0x5040}, //7389 #CJK UNIFIED IDEOGRAPH
+ {0xFA75, 0x5022}, //7390 #CJK UNIFIED IDEOGRAPH
+ {0xFA76, 0x4FFF}, //7391 #CJK UNIFIED IDEOGRAPH
+ {0xFA77, 0x501E}, //7392 #CJK UNIFIED IDEOGRAPH
+ {0xFA78, 0x5046}, //7393 #CJK UNIFIED IDEOGRAPH
+ {0xFA79, 0x5070}, //7394 #CJK UNIFIED IDEOGRAPH
+ {0xFA7A, 0x5042}, //7395 #CJK UNIFIED IDEOGRAPH
+ {0xFA7B, 0x5094}, //7396 #CJK UNIFIED IDEOGRAPH
+ {0xFA7C, 0x50F4}, //7397 #CJK UNIFIED IDEOGRAPH
+ {0xFA7D, 0x50D8}, //7398 #CJK UNIFIED IDEOGRAPH
+ {0xFA7E, 0x514A}, //7399 #CJK UNIFIED IDEOGRAPH
+ {0xFA80, 0x5164}, //7400 #CJK UNIFIED IDEOGRAPH
+ {0xFA81, 0x519D}, //7401 #CJK UNIFIED IDEOGRAPH
+ {0xFA82, 0x51BE}, //7402 #CJK UNIFIED IDEOGRAPH
+ {0xFA83, 0x51EC}, //7403 #CJK UNIFIED IDEOGRAPH
+ {0xFA84, 0x5215}, //7404 #CJK UNIFIED IDEOGRAPH
+ {0xFA85, 0x529C}, //7405 #CJK UNIFIED IDEOGRAPH
+ {0xFA86, 0x52A6}, //7406 #CJK UNIFIED IDEOGRAPH
+ {0xFA87, 0x52C0}, //7407 #CJK UNIFIED IDEOGRAPH
+ {0xFA88, 0x52DB}, //7408 #CJK UNIFIED IDEOGRAPH
+ {0xFA89, 0x5300}, //7409 #CJK UNIFIED IDEOGRAPH
+ {0xFA8A, 0x5307}, //7410 #CJK UNIFIED IDEOGRAPH
+ {0xFA8B, 0x5324}, //7411 #CJK UNIFIED IDEOGRAPH
+ {0xFA8C, 0x5372}, //7412 #CJK UNIFIED IDEOGRAPH
+ {0xFA8D, 0x5393}, //7413 #CJK UNIFIED IDEOGRAPH
+ {0xFA8E, 0x53B2}, //7414 #CJK UNIFIED IDEOGRAPH
+ {0xFA8F, 0x53DD}, //7415 #CJK UNIFIED IDEOGRAPH
+ {0xFA90, 0xFA0E}, //7416 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFA91, 0x549C}, //7417 #CJK UNIFIED IDEOGRAPH
+ {0xFA92, 0x548A}, //7418 #CJK UNIFIED IDEOGRAPH
+ {0xFA93, 0x54A9}, //7419 #CJK UNIFIED IDEOGRAPH
+ {0xFA94, 0x54FF}, //7420 #CJK UNIFIED IDEOGRAPH
+ {0xFA95, 0x5586}, //7421 #CJK UNIFIED IDEOGRAPH
+ {0xFA96, 0x5759}, //7422 #CJK UNIFIED IDEOGRAPH
+ {0xFA97, 0x5765}, //7423 #CJK UNIFIED IDEOGRAPH
+ {0xFA98, 0x57AC}, //7424 #CJK UNIFIED IDEOGRAPH
+ {0xFA99, 0x57C8}, //7425 #CJK UNIFIED IDEOGRAPH
+ {0xFA9A, 0x57C7}, //7426 #CJK UNIFIED IDEOGRAPH
+ {0xFA9B, 0xFA0F}, //7427 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFA9C, 0xFA10}, //7428 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFA9D, 0x589E}, //7429 #CJK UNIFIED IDEOGRAPH
+ {0xFA9E, 0x58B2}, //7430 #CJK UNIFIED IDEOGRAPH
+ {0xFA9F, 0x590B}, //7431 #CJK UNIFIED IDEOGRAPH
+ {0xFAA0, 0x5953}, //7432 #CJK UNIFIED IDEOGRAPH
+ {0xFAA1, 0x595B}, //7433 #CJK UNIFIED IDEOGRAPH
+ {0xFAA2, 0x595D}, //7434 #CJK UNIFIED IDEOGRAPH
+ {0xFAA3, 0x5963}, //7435 #CJK UNIFIED IDEOGRAPH
+ {0xFAA4, 0x59A4}, //7436 #CJK UNIFIED IDEOGRAPH
+ {0xFAA5, 0x59BA}, //7437 #CJK UNIFIED IDEOGRAPH
+ {0xFAA6, 0x5B56}, //7438 #CJK UNIFIED IDEOGRAPH
+ {0xFAA7, 0x5BC0}, //7439 #CJK UNIFIED IDEOGRAPH
+ {0xFAA8, 0x752F}, //7440 #CJK UNIFIED IDEOGRAPH
+ {0xFAA9, 0x5BD8}, //7441 #CJK UNIFIED IDEOGRAPH
+ {0xFAAA, 0x5BEC}, //7442 #CJK UNIFIED IDEOGRAPH
+ {0xFAAB, 0x5C1E}, //7443 #CJK UNIFIED IDEOGRAPH
+ {0xFAAC, 0x5CA6}, //7444 #CJK UNIFIED IDEOGRAPH
+ {0xFAAD, 0x5CBA}, //7445 #CJK UNIFIED IDEOGRAPH
+ {0xFAAE, 0x5CF5}, //7446 #CJK UNIFIED IDEOGRAPH
+ {0xFAAF, 0x5D27}, //7447 #CJK UNIFIED IDEOGRAPH
+ {0xFAB0, 0x5D53}, //7448 #CJK UNIFIED IDEOGRAPH
+ {0xFAB1, 0xFA11}, //7449 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAB2, 0x5D42}, //7450 #CJK UNIFIED IDEOGRAPH
+ {0xFAB3, 0x5D6D}, //7451 #CJK UNIFIED IDEOGRAPH
+ {0xFAB4, 0x5DB8}, //7452 #CJK UNIFIED IDEOGRAPH
+ {0xFAB5, 0x5DB9}, //7453 #CJK UNIFIED IDEOGRAPH
+ {0xFAB6, 0x5DD0}, //7454 #CJK UNIFIED IDEOGRAPH
+ {0xFAB7, 0x5F21}, //7455 #CJK UNIFIED IDEOGRAPH
+ {0xFAB8, 0x5F34}, //7456 #CJK UNIFIED IDEOGRAPH
+ {0xFAB9, 0x5F67}, //7457 #CJK UNIFIED IDEOGRAPH
+ {0xFABA, 0x5FB7}, //7458 #CJK UNIFIED IDEOGRAPH
+ {0xFABB, 0x5FDE}, //7459 #CJK UNIFIED IDEOGRAPH
+ {0xFABC, 0x605D}, //7460 #CJK UNIFIED IDEOGRAPH
+ {0xFABD, 0x6085}, //7461 #CJK UNIFIED IDEOGRAPH
+ {0xFABE, 0x608A}, //7462 #CJK UNIFIED IDEOGRAPH
+ {0xFABF, 0x60DE}, //7463 #CJK UNIFIED IDEOGRAPH
+ {0xFAC0, 0x60D5}, //7464 #CJK UNIFIED IDEOGRAPH
+ {0xFAC1, 0x6120}, //7465 #CJK UNIFIED IDEOGRAPH
+ {0xFAC2, 0x60F2}, //7466 #CJK UNIFIED IDEOGRAPH
+ {0xFAC3, 0x6111}, //7467 #CJK UNIFIED IDEOGRAPH
+ {0xFAC4, 0x6137}, //7468 #CJK UNIFIED IDEOGRAPH
+ {0xFAC5, 0x6130}, //7469 #CJK UNIFIED IDEOGRAPH
+ {0xFAC6, 0x6198}, //7470 #CJK UNIFIED IDEOGRAPH
+ {0xFAC7, 0x6213}, //7471 #CJK UNIFIED IDEOGRAPH
+ {0xFAC8, 0x62A6}, //7472 #CJK UNIFIED IDEOGRAPH
+ {0xFAC9, 0x63F5}, //7473 #CJK UNIFIED IDEOGRAPH
+ {0xFACA, 0x6460}, //7474 #CJK UNIFIED IDEOGRAPH
+ {0xFACB, 0x649D}, //7475 #CJK UNIFIED IDEOGRAPH
+ {0xFACC, 0x64CE}, //7476 #CJK UNIFIED IDEOGRAPH
+ {0xFACD, 0x654E}, //7477 #CJK UNIFIED IDEOGRAPH
+ {0xFACE, 0x6600}, //7478 #CJK UNIFIED IDEOGRAPH
+ {0xFACF, 0x6615}, //7479 #CJK UNIFIED IDEOGRAPH
+ {0xFAD0, 0x663B}, //7480 #CJK UNIFIED IDEOGRAPH
+ {0xFAD1, 0x6609}, //7481 #CJK UNIFIED IDEOGRAPH
+ {0xFAD2, 0x662E}, //7482 #CJK UNIFIED IDEOGRAPH
+ {0xFAD3, 0x661E}, //7483 #CJK UNIFIED IDEOGRAPH
+ {0xFAD4, 0x6624}, //7484 #CJK UNIFIED IDEOGRAPH
+ {0xFAD5, 0x6665}, //7485 #CJK UNIFIED IDEOGRAPH
+ {0xFAD6, 0x6657}, //7486 #CJK UNIFIED IDEOGRAPH
+ {0xFAD7, 0x6659}, //7487 #CJK UNIFIED IDEOGRAPH
+ {0xFAD8, 0xFA12}, //7488 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAD9, 0x6673}, //7489 #CJK UNIFIED IDEOGRAPH
+ {0xFADA, 0x6699}, //7490 #CJK UNIFIED IDEOGRAPH
+ {0xFADB, 0x66A0}, //7491 #CJK UNIFIED IDEOGRAPH
+ {0xFADC, 0x66B2}, //7492 #CJK UNIFIED IDEOGRAPH
+ {0xFADD, 0x66BF}, //7493 #CJK UNIFIED IDEOGRAPH
+ {0xFADE, 0x66FA}, //7494 #CJK UNIFIED IDEOGRAPH
+ {0xFADF, 0x670E}, //7495 #CJK UNIFIED IDEOGRAPH
+ {0xFAE0, 0xF929}, //7496 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAE1, 0x6766}, //7497 #CJK UNIFIED IDEOGRAPH
+ {0xFAE2, 0x67BB}, //7498 #CJK UNIFIED IDEOGRAPH
+ {0xFAE3, 0x6852}, //7499 #CJK UNIFIED IDEOGRAPH
+ {0xFAE4, 0x67C0}, //7500 #CJK UNIFIED IDEOGRAPH
+ {0xFAE5, 0x6801}, //7501 #CJK UNIFIED IDEOGRAPH
+ {0xFAE6, 0x6844}, //7502 #CJK UNIFIED IDEOGRAPH
+ {0xFAE7, 0x68CF}, //7503 #CJK UNIFIED IDEOGRAPH
+ {0xFAE8, 0xFA13}, //7504 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAE9, 0x6968}, //7505 #CJK UNIFIED IDEOGRAPH
+ {0xFAEA, 0xFA14}, //7506 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAEB, 0x6998}, //7507 #CJK UNIFIED IDEOGRAPH
+ {0xFAEC, 0x69E2}, //7508 #CJK UNIFIED IDEOGRAPH
+ {0xFAED, 0x6A30}, //7509 #CJK UNIFIED IDEOGRAPH
+ {0xFAEE, 0x6A6B}, //7510 #CJK UNIFIED IDEOGRAPH
+ {0xFAEF, 0x6A46}, //7511 #CJK UNIFIED IDEOGRAPH
+ {0xFAF0, 0x6A73}, //7512 #CJK UNIFIED IDEOGRAPH
+ {0xFAF1, 0x6A7E}, //7513 #CJK UNIFIED IDEOGRAPH
+ {0xFAF2, 0x6AE2}, //7514 #CJK UNIFIED IDEOGRAPH
+ {0xFAF3, 0x6AE4}, //7515 #CJK UNIFIED IDEOGRAPH
+ {0xFAF4, 0x6BD6}, //7516 #CJK UNIFIED IDEOGRAPH
+ {0xFAF5, 0x6C3F}, //7517 #CJK UNIFIED IDEOGRAPH
+ {0xFAF6, 0x6C5C}, //7518 #CJK UNIFIED IDEOGRAPH
+ {0xFAF7, 0x6C86}, //7519 #CJK UNIFIED IDEOGRAPH
+ {0xFAF8, 0x6C6F}, //7520 #CJK UNIFIED IDEOGRAPH
+ {0xFAF9, 0x6CDA}, //7521 #CJK UNIFIED IDEOGRAPH
+ {0xFAFA, 0x6D04}, //7522 #CJK UNIFIED IDEOGRAPH
+ {0xFAFB, 0x6D87}, //7523 #CJK UNIFIED IDEOGRAPH
+ {0xFAFC, 0x6D6F}, //7524 #CJK UNIFIED IDEOGRAPH
+ {0xFB40, 0x6D96}, //7525 #CJK UNIFIED IDEOGRAPH
+ {0xFB41, 0x6DAC}, //7526 #CJK UNIFIED IDEOGRAPH
+ {0xFB42, 0x6DCF}, //7527 #CJK UNIFIED IDEOGRAPH
+ {0xFB43, 0x6DF8}, //7528 #CJK UNIFIED IDEOGRAPH
+ {0xFB44, 0x6DF2}, //7529 #CJK UNIFIED IDEOGRAPH
+ {0xFB45, 0x6DFC}, //7530 #CJK UNIFIED IDEOGRAPH
+ {0xFB46, 0x6E39}, //7531 #CJK UNIFIED IDEOGRAPH
+ {0xFB47, 0x6E5C}, //7532 #CJK UNIFIED IDEOGRAPH
+ {0xFB48, 0x6E27}, //7533 #CJK UNIFIED IDEOGRAPH
+ {0xFB49, 0x6E3C}, //7534 #CJK UNIFIED IDEOGRAPH
+ {0xFB4A, 0x6EBF}, //7535 #CJK UNIFIED IDEOGRAPH
+ {0xFB4B, 0x6F88}, //7536 #CJK UNIFIED IDEOGRAPH
+ {0xFB4C, 0x6FB5}, //7537 #CJK UNIFIED IDEOGRAPH
+ {0xFB4D, 0x6FF5}, //7538 #CJK UNIFIED IDEOGRAPH
+ {0xFB4E, 0x7005}, //7539 #CJK UNIFIED IDEOGRAPH
+ {0xFB4F, 0x7007}, //7540 #CJK UNIFIED IDEOGRAPH
+ {0xFB50, 0x7028}, //7541 #CJK UNIFIED IDEOGRAPH
+ {0xFB51, 0x7085}, //7542 #CJK UNIFIED IDEOGRAPH
+ {0xFB52, 0x70AB}, //7543 #CJK UNIFIED IDEOGRAPH
+ {0xFB53, 0x710F}, //7544 #CJK UNIFIED IDEOGRAPH
+ {0xFB54, 0x7104}, //7545 #CJK UNIFIED IDEOGRAPH
+ {0xFB55, 0x715C}, //7546 #CJK UNIFIED IDEOGRAPH
+ {0xFB56, 0x7146}, //7547 #CJK UNIFIED IDEOGRAPH
+ {0xFB57, 0x7147}, //7548 #CJK UNIFIED IDEOGRAPH
+ {0xFB58, 0xFA15}, //7549 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB59, 0x71C1}, //7550 #CJK UNIFIED IDEOGRAPH
+ {0xFB5A, 0x71FE}, //7551 #CJK UNIFIED IDEOGRAPH
+ {0xFB5B, 0x72B1}, //7552 #CJK UNIFIED IDEOGRAPH
+ {0xFB5C, 0x72BE}, //7553 #CJK UNIFIED IDEOGRAPH
+ {0xFB5D, 0x7324}, //7554 #CJK UNIFIED IDEOGRAPH
+ {0xFB5E, 0xFA16}, //7555 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB5F, 0x7377}, //7556 #CJK UNIFIED IDEOGRAPH
+ {0xFB60, 0x73BD}, //7557 #CJK UNIFIED IDEOGRAPH
+ {0xFB61, 0x73C9}, //7558 #CJK UNIFIED IDEOGRAPH
+ {0xFB62, 0x73D6}, //7559 #CJK UNIFIED IDEOGRAPH
+ {0xFB63, 0x73E3}, //7560 #CJK UNIFIED IDEOGRAPH
+ {0xFB64, 0x73D2}, //7561 #CJK UNIFIED IDEOGRAPH
+ {0xFB65, 0x7407}, //7562 #CJK UNIFIED IDEOGRAPH
+ {0xFB66, 0x73F5}, //7563 #CJK UNIFIED IDEOGRAPH
+ {0xFB67, 0x7426}, //7564 #CJK UNIFIED IDEOGRAPH
+ {0xFB68, 0x742A}, //7565 #CJK UNIFIED IDEOGRAPH
+ {0xFB69, 0x7429}, //7566 #CJK UNIFIED IDEOGRAPH
+ {0xFB6A, 0x742E}, //7567 #CJK UNIFIED IDEOGRAPH
+ {0xFB6B, 0x7462}, //7568 #CJK UNIFIED IDEOGRAPH
+ {0xFB6C, 0x7489}, //7569 #CJK UNIFIED IDEOGRAPH
+ {0xFB6D, 0x749F}, //7570 #CJK UNIFIED IDEOGRAPH
+ {0xFB6E, 0x7501}, //7571 #CJK UNIFIED IDEOGRAPH
+ {0xFB6F, 0x756F}, //7572 #CJK UNIFIED IDEOGRAPH
+ {0xFB70, 0x7682}, //7573 #CJK UNIFIED IDEOGRAPH
+ {0xFB71, 0x769C}, //7574 #CJK UNIFIED IDEOGRAPH
+ {0xFB72, 0x769E}, //7575 #CJK UNIFIED IDEOGRAPH
+ {0xFB73, 0x769B}, //7576 #CJK UNIFIED IDEOGRAPH
+ {0xFB74, 0x76A6}, //7577 #CJK UNIFIED IDEOGRAPH
+ {0xFB75, 0xFA17}, //7578 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB76, 0x7746}, //7579 #CJK UNIFIED IDEOGRAPH
+ {0xFB77, 0x52AF}, //7580 #CJK UNIFIED IDEOGRAPH
+ {0xFB78, 0x7821}, //7581 #CJK UNIFIED IDEOGRAPH
+ {0xFB79, 0x784E}, //7582 #CJK UNIFIED IDEOGRAPH
+ {0xFB7A, 0x7864}, //7583 #CJK UNIFIED IDEOGRAPH
+ {0xFB7B, 0x787A}, //7584 #CJK UNIFIED IDEOGRAPH
+ {0xFB7C, 0x7930}, //7585 #CJK UNIFIED IDEOGRAPH
+ {0xFB7D, 0xFA18}, //7586 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB7E, 0xFA19}, //7587 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB80, 0xFA1A}, //7588 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB81, 0x7994}, //7589 #CJK UNIFIED IDEOGRAPH
+ {0xFB82, 0xFA1B}, //7590 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB83, 0x799B}, //7591 #CJK UNIFIED IDEOGRAPH
+ {0xFB84, 0x7AD1}, //7592 #CJK UNIFIED IDEOGRAPH
+ {0xFB85, 0x7AE7}, //7593 #CJK UNIFIED IDEOGRAPH
+ {0xFB86, 0xFA1C}, //7594 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB87, 0x7AEB}, //7595 #CJK UNIFIED IDEOGRAPH
+ {0xFB88, 0x7B9E}, //7596 #CJK UNIFIED IDEOGRAPH
+ {0xFB89, 0xFA1D}, //7597 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB8A, 0x7D48}, //7598 #CJK UNIFIED IDEOGRAPH
+ {0xFB8B, 0x7D5C}, //7599 #CJK UNIFIED IDEOGRAPH
+ {0xFB8C, 0x7DB7}, //7600 #CJK UNIFIED IDEOGRAPH
+ {0xFB8D, 0x7DA0}, //7601 #CJK UNIFIED IDEOGRAPH
+ {0xFB8E, 0x7DD6}, //7602 #CJK UNIFIED IDEOGRAPH
+ {0xFB8F, 0x7E52}, //7603 #CJK UNIFIED IDEOGRAPH
+ {0xFB90, 0x7F47}, //7604 #CJK UNIFIED IDEOGRAPH
+ {0xFB91, 0x7FA1}, //7605 #CJK UNIFIED IDEOGRAPH
+ {0xFB92, 0xFA1E}, //7606 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB93, 0x8301}, //7607 #CJK UNIFIED IDEOGRAPH
+ {0xFB94, 0x8362}, //7608 #CJK UNIFIED IDEOGRAPH
+ {0xFB95, 0x837F}, //7609 #CJK UNIFIED IDEOGRAPH
+ {0xFB96, 0x83C7}, //7610 #CJK UNIFIED IDEOGRAPH
+ {0xFB97, 0x83F6}, //7611 #CJK UNIFIED IDEOGRAPH
+ {0xFB98, 0x8448}, //7612 #CJK UNIFIED IDEOGRAPH
+ {0xFB99, 0x84B4}, //7613 #CJK UNIFIED IDEOGRAPH
+ {0xFB9A, 0x8553}, //7614 #CJK UNIFIED IDEOGRAPH
+ {0xFB9B, 0x8559}, //7615 #CJK UNIFIED IDEOGRAPH
+ {0xFB9C, 0x856B}, //7616 #CJK UNIFIED IDEOGRAPH
+ {0xFB9D, 0xFA1F}, //7617 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFB9E, 0x85B0}, //7618 #CJK UNIFIED IDEOGRAPH
+ {0xFB9F, 0xFA20}, //7619 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBA0, 0xFA21}, //7620 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBA1, 0x8807}, //7621 #CJK UNIFIED IDEOGRAPH
+ {0xFBA2, 0x88F5}, //7622 #CJK UNIFIED IDEOGRAPH
+ {0xFBA3, 0x8A12}, //7623 #CJK UNIFIED IDEOGRAPH
+ {0xFBA4, 0x8A37}, //7624 #CJK UNIFIED IDEOGRAPH
+ {0xFBA5, 0x8A79}, //7625 #CJK UNIFIED IDEOGRAPH
+ {0xFBA6, 0x8AA7}, //7626 #CJK UNIFIED IDEOGRAPH
+ {0xFBA7, 0x8ABE}, //7627 #CJK UNIFIED IDEOGRAPH
+ {0xFBA8, 0x8ADF}, //7628 #CJK UNIFIED IDEOGRAPH
+ {0xFBA9, 0xFA22}, //7629 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBAA, 0x8AF6}, //7630 #CJK UNIFIED IDEOGRAPH
+ {0xFBAB, 0x8B53}, //7631 #CJK UNIFIED IDEOGRAPH
+ {0xFBAC, 0x8B7F}, //7632 #CJK UNIFIED IDEOGRAPH
+ {0xFBAD, 0x8CF0}, //7633 #CJK UNIFIED IDEOGRAPH
+ {0xFBAE, 0x8CF4}, //7634 #CJK UNIFIED IDEOGRAPH
+ {0xFBAF, 0x8D12}, //7635 #CJK UNIFIED IDEOGRAPH
+ {0xFBB0, 0x8D76}, //7636 #CJK UNIFIED IDEOGRAPH
+ {0xFBB1, 0xFA23}, //7637 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBB2, 0x8ECF}, //7638 #CJK UNIFIED IDEOGRAPH
+ {0xFBB3, 0xFA24}, //7639 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBB4, 0xFA25}, //7640 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBB5, 0x9067}, //7641 #CJK UNIFIED IDEOGRAPH
+ {0xFBB6, 0x90DE}, //7642 #CJK UNIFIED IDEOGRAPH
+ {0xFBB7, 0xFA26}, //7643 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBB8, 0x9115}, //7644 #CJK UNIFIED IDEOGRAPH
+ {0xFBB9, 0x9127}, //7645 #CJK UNIFIED IDEOGRAPH
+ {0xFBBA, 0x91DA}, //7646 #CJK UNIFIED IDEOGRAPH
+ {0xFBBB, 0x91D7}, //7647 #CJK UNIFIED IDEOGRAPH
+ {0xFBBC, 0x91DE}, //7648 #CJK UNIFIED IDEOGRAPH
+ {0xFBBD, 0x91ED}, //7649 #CJK UNIFIED IDEOGRAPH
+ {0xFBBE, 0x91EE}, //7650 #CJK UNIFIED IDEOGRAPH
+ {0xFBBF, 0x91E4}, //7651 #CJK UNIFIED IDEOGRAPH
+ {0xFBC0, 0x91E5}, //7652 #CJK UNIFIED IDEOGRAPH
+ {0xFBC1, 0x9206}, //7653 #CJK UNIFIED IDEOGRAPH
+ {0xFBC2, 0x9210}, //7654 #CJK UNIFIED IDEOGRAPH
+ {0xFBC3, 0x920A}, //7655 #CJK UNIFIED IDEOGRAPH
+ {0xFBC4, 0x923A}, //7656 #CJK UNIFIED IDEOGRAPH
+ {0xFBC5, 0x9240}, //7657 #CJK UNIFIED IDEOGRAPH
+ {0xFBC6, 0x923C}, //7658 #CJK UNIFIED IDEOGRAPH
+ {0xFBC7, 0x924E}, //7659 #CJK UNIFIED IDEOGRAPH
+ {0xFBC8, 0x9259}, //7660 #CJK UNIFIED IDEOGRAPH
+ {0xFBC9, 0x9251}, //7661 #CJK UNIFIED IDEOGRAPH
+ {0xFBCA, 0x9239}, //7662 #CJK UNIFIED IDEOGRAPH
+ {0xFBCB, 0x9267}, //7663 #CJK UNIFIED IDEOGRAPH
+ {0xFBCC, 0x92A7}, //7664 #CJK UNIFIED IDEOGRAPH
+ {0xFBCD, 0x9277}, //7665 #CJK UNIFIED IDEOGRAPH
+ {0xFBCE, 0x9278}, //7666 #CJK UNIFIED IDEOGRAPH
+ {0xFBCF, 0x92E7}, //7667 #CJK UNIFIED IDEOGRAPH
+ {0xFBD0, 0x92D7}, //7668 #CJK UNIFIED IDEOGRAPH
+ {0xFBD1, 0x92D9}, //7669 #CJK UNIFIED IDEOGRAPH
+ {0xFBD2, 0x92D0}, //7670 #CJK UNIFIED IDEOGRAPH
+ {0xFBD3, 0xFA27}, //7671 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBD4, 0x92D5}, //7672 #CJK UNIFIED IDEOGRAPH
+ {0xFBD5, 0x92E0}, //7673 #CJK UNIFIED IDEOGRAPH
+ {0xFBD6, 0x92D3}, //7674 #CJK UNIFIED IDEOGRAPH
+ {0xFBD7, 0x9325}, //7675 #CJK UNIFIED IDEOGRAPH
+ {0xFBD8, 0x9321}, //7676 #CJK UNIFIED IDEOGRAPH
+ {0xFBD9, 0x92FB}, //7677 #CJK UNIFIED IDEOGRAPH
+ {0xFBDA, 0xFA28}, //7678 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBDB, 0x931E}, //7679 #CJK UNIFIED IDEOGRAPH
+ {0xFBDC, 0x92FF}, //7680 #CJK UNIFIED IDEOGRAPH
+ {0xFBDD, 0x931D}, //7681 #CJK UNIFIED IDEOGRAPH
+ {0xFBDE, 0x9302}, //7682 #CJK UNIFIED IDEOGRAPH
+ {0xFBDF, 0x9370}, //7683 #CJK UNIFIED IDEOGRAPH
+ {0xFBE0, 0x9357}, //7684 #CJK UNIFIED IDEOGRAPH
+ {0xFBE1, 0x93A4}, //7685 #CJK UNIFIED IDEOGRAPH
+ {0xFBE2, 0x93C6}, //7686 #CJK UNIFIED IDEOGRAPH
+ {0xFBE3, 0x93DE}, //7687 #CJK UNIFIED IDEOGRAPH
+ {0xFBE4, 0x93F8}, //7688 #CJK UNIFIED IDEOGRAPH
+ {0xFBE5, 0x9431}, //7689 #CJK UNIFIED IDEOGRAPH
+ {0xFBE6, 0x9445}, //7690 #CJK UNIFIED IDEOGRAPH
+ {0xFBE7, 0x9448}, //7691 #CJK UNIFIED IDEOGRAPH
+ {0xFBE8, 0x9592}, //7692 #CJK UNIFIED IDEOGRAPH
+ {0xFBE9, 0xF9DC}, //7693 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBEA, 0xFA29}, //7694 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBEB, 0x969D}, //7695 #CJK UNIFIED IDEOGRAPH
+ {0xFBEC, 0x96AF}, //7696 #CJK UNIFIED IDEOGRAPH
+ {0xFBED, 0x9733}, //7697 #CJK UNIFIED IDEOGRAPH
+ {0xFBEE, 0x973B}, //7698 #CJK UNIFIED IDEOGRAPH
+ {0xFBEF, 0x9743}, //7699 #CJK UNIFIED IDEOGRAPH
+ {0xFBF0, 0x974D}, //7700 #CJK UNIFIED IDEOGRAPH
+ {0xFBF1, 0x974F}, //7701 #CJK UNIFIED IDEOGRAPH
+ {0xFBF2, 0x9751}, //7702 #CJK UNIFIED IDEOGRAPH
+ {0xFBF3, 0x9755}, //7703 #CJK UNIFIED IDEOGRAPH
+ {0xFBF4, 0x9857}, //7704 #CJK UNIFIED IDEOGRAPH
+ {0xFBF5, 0x9865}, //7705 #CJK UNIFIED IDEOGRAPH
+ {0xFBF6, 0xFA2A}, //7706 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBF7, 0xFA2B}, //7707 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBF8, 0x9927}, //7708 #CJK UNIFIED IDEOGRAPH
+ {0xFBF9, 0xFA2C}, //7709 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFBFA, 0x999E}, //7710 #CJK UNIFIED IDEOGRAPH
+ {0xFBFB, 0x9A4E}, //7711 #CJK UNIFIED IDEOGRAPH
+ {0xFBFC, 0x9AD9}, //7712 #CJK UNIFIED IDEOGRAPH
+ {0xFC40, 0x9ADC}, //7713 #CJK UNIFIED IDEOGRAPH
+ {0xFC41, 0x9B75}, //7714 #CJK UNIFIED IDEOGRAPH
+ {0xFC42, 0x9B72}, //7715 #CJK UNIFIED IDEOGRAPH
+ {0xFC43, 0x9B8F}, //7716 #CJK UNIFIED IDEOGRAPH
+ {0xFC44, 0x9BB1}, //7717 #CJK UNIFIED IDEOGRAPH
+ {0xFC45, 0x9BBB}, //7718 #CJK UNIFIED IDEOGRAPH
+ {0xFC46, 0x9C00}, //7719 #CJK UNIFIED IDEOGRAPH
+ {0xFC47, 0x9D70}, //7720 #CJK UNIFIED IDEOGRAPH
+ {0xFC48, 0x9D6B}, //7721 #CJK UNIFIED IDEOGRAPH
+ {0xFC49, 0xFA2D}, //7722 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFC4A, 0x9E19}, //7723 #CJK UNIFIED IDEOGRAPH
+ {0xFC4B, 0x9ED1} //7724 #CJK UNIFIED IDEOGRAPH
+};
+#endif // DRW_CPTABLE932_H
diff --git a/lib_dxf/intern/drw_cptable936.h b/lib_dxf/intern/drw_cptable936.h
new file mode 100644
index 0000000..4c1c141
--- /dev/null
+++ b/lib_dxf/intern/drw_cptable936.h
@@ -0,0 +1,21943 @@
+#ifndef DRW_CPTABLE936_H
+#define DRW_CPTABLE936_H
+
+//Chinese PRC GBK (XGB)
+
+//first entry in this tables are 0x80
+#define CPOFFSET936 0x80
+#define CPLENGHT936 21791
+#define NOTFOUND936 0x003F
+
+//Table 949 one byte
+static const int DRW_Table936[] = {
+ 0x20AC //1 #EURO SIGN 0x80
+// 0xF8F5 //2 #EURO SIGN 0x80
+};
+
+//Table 936
+static const int DRW_LeadTable936[] = {
+ 0, //1#DBCS LEAD BYTE 0x81
+ 190, //2#DBCS LEAD BYTE 0x82
+ 380, //3#DBCS LEAD BYTE 0x83
+ 570, //4#DBCS LEAD BYTE 0x84
+ 760, //5#DBCS LEAD BYTE 0x85
+ 950, //6#DBCS LEAD BYTE 0x86
+ 1140, //7#DBCS LEAD BYTE 0x87
+ 1330, //8#DBCS LEAD BYTE 0x88
+ 1520, //9#DBCS LEAD BYTE 0x89
+ 1710, //10#DBCS LEAD BYTE 0x8A
+ 1900, //11#DBCS LEAD BYTE 0x8B
+ 2090, //12#DBCS LEAD BYTE 0x8C
+ 2280, //13#DBCS LEAD BYTE 0x8D
+ 2470, //14#DBCS LEAD BYTE 0x8E
+ 2660, //15#DBCS LEAD BYTE 0x8F
+ 2850, //16#DBCS LEAD BYTE 0x90
+ 3040, //17#DBCS LEAD BYTE 0x91
+ 3230, //18#DBCS LEAD BYTE 0x92
+ 3420, //19#DBCS LEAD BYTE 0x93
+ 3610, //20#DBCS LEAD BYTE 0x94
+ 3800, //21#DBCS LEAD BYTE 0x95
+ 3990, //22#DBCS LEAD BYTE 0x96
+ 4180, //23#DBCS LEAD BYTE 0x97
+ 4370, //24#DBCS LEAD BYTE 0x98
+ 4560, //25#DBCS LEAD BYTE 0x99
+ 4750, //26#DBCS LEAD BYTE 0x9A
+ 4940, //27#DBCS LEAD BYTE 0x9B
+ 5130, //28#DBCS LEAD BYTE 0x9C
+ 5320, //29#DBCS LEAD BYTE 0x9D
+ 5510, //30#DBCS LEAD BYTE 0x9E
+ 5700, //31#DBCS LEAD BYTE 0x9F
+ 5906, //32#DBCS LEAD BYTE 0xA0
+ 6080, //33#DBCS LEAD BYTE 0xA1
+ 6174, //34#DBCS LEAD BYTE 0xA2
+ 6256, //35#DBCS LEAD BYTE 0xA3
+ 6350, //36#DBCS LEAD BYTE 0xA4
+ 6433, //37#DBCS LEAD BYTE 0xA5
+ 6519, //38#DBCS LEAD BYTE 0xA6
+ 6586, //39#DBCS LEAD BYTE 0xA7
+ 6652, //40#DBCS LEAD BYTE 0xA8
+ 6804, //41#DBCS LEAD BYTE 0xA9
+ 6948, //42#DBCS LEAD BYTE 0xAA
+ 7044, //43#DBCS LEAD BYTE 0xAB
+ 7140, //44#DBCS LEAD BYTE 0xAC
+ 7236, //45#DBCS LEAD BYTE 0xAD
+ 7332, //46#DBCS LEAD BYTE 0xAE
+ 7428, //47#DBCS LEAD BYTE 0xAF
+ 7524, //48#DBCS LEAD BYTE 0xB0
+ 7714, //49#DBCS LEAD BYTE 0xB1
+ 7904, //50#DBCS LEAD BYTE 0xB2
+ 8094, //51#DBCS LEAD BYTE 0xB3
+ 8284, //52#DBCS LEAD BYTE 0xB4
+ 8474, //53#DBCS LEAD BYTE 0xB5
+ 8664, //54#DBCS LEAD BYTE 0xB6
+ 8854, //55#DBCS LEAD BYTE 0xB7
+ 9044, //56#DBCS LEAD BYTE 0xB8
+ 9224, //57#DBCS LEAD BYTE 0xB9
+ 9424, //58#DBCS LEAD BYTE 0xBA
+ 9614, //59#DBCS LEAD BYTE 0xBB
+ 9804, //60#DBCS LEAD BYTE 0xBC
+ 9994, //61#DBCS LEAD BYTE 0xBD
+ 10184, //62#DBCS LEAD BYTE 0xBE
+ 10374, //63#DBCS LEAD BYTE 0xBF
+ 10564, //64#DBCS LEAD BYTE 0xC0
+ 10754, //65#DBCS LEAD BYTE 0xC1
+ 10944, //66#DBCS LEAD BYTE 0xC2
+ 11134, //67#DBCS LEAD BYTE 0xC3
+ 11324, //68#DBCS LEAD BYTE 0xC4
+ 11514, //69#DBCS LEAD BYTE 0xC5
+ 11704, //70#DBCS LEAD BYTE 0xC6
+ 11894, //71#DBCS LEAD BYTE 0xC7
+ 12084, //72#DBCS LEAD BYTE 0xC8
+ 12274, //73#DBCS LEAD BYTE 0xC9
+ 12464, //74#DBCS LEAD BYTE 0xCA
+ 12654, //75#DBCS LEAD BYTE 0xCB
+ 12844, //76#DBCS LEAD BYTE 0xCC
+ 13034, //77#DBCS LEAD BYTE 0xCD
+ 13224, //78#DBCS LEAD BYTE 0xCE
+ 13414, //79#DBCS LEAD BYTE 0xCF
+ 13604, //80#DBCS LEAD BYTE 0xD0
+ 13794, //81#DBCS LEAD BYTE 0xD1
+ 13984, //82#DBCS LEAD BYTE 0xD2
+ 14174, //83#DBCS LEAD BYTE 0xD3
+ 14364, //84#DBCS LEAD BYTE 0xD4
+ 14554, //85#DBCS LEAD BYTE 0xD5
+ 14744, //86#DBCS LEAD BYTE 0xD6
+ 14934, //87#DBCS LEAD BYTE 0xD7
+ 15119, //88#DBCS LEAD BYTE 0xD8
+ 15309, //89#DBCS LEAD BYTE 0xD9
+ 15499, //90#DBCS LEAD BYTE 0xDA
+ 15689, //91#DBCS LEAD BYTE 0xDB
+ 15879, //92#DBCS LEAD BYTE 0xDC
+ 16069, //93#DBCS LEAD BYTE 0xDD
+ 16259, //94#DBCS LEAD BYTE 0xDE
+ 16449, //95#DBCS LEAD BYTE 0xDF
+ 16639, //96#DBCS LEAD BYTE 0xE0
+ 16829, //97#DBCS LEAD BYTE 0xE1
+ 17019, //98#DBCS LEAD BYTE 0xE2
+ 17209, //99#DBCS LEAD BYTE 0xE3
+ 17399, //100#DBCS LEAD BYTE 0xE4
+ 17589, //101#DBCS LEAD BYTE 0xE5
+ 17779, //102#DBCS LEAD BYTE 0xE6
+ 17969, //103#DBCS LEAD BYTE 0xE7
+ 18159, //104#DBCS LEAD BYTE 0xE8
+ 18349, //105#DBCS LEAD BYTE 0xE9
+ 18539, //106#DBCS LEAD BYTE 0xEA
+ 18729, //107#DBCS LEAD BYTE 0xEB
+ 18919, //108#DBCS LEAD BYTE 0xEC
+ 19109, //109#DBCS LEAD BYTE 0xED
+ 19299, //110#DBCS LEAD BYTE 0xEE
+ 19489, //111#DBCS LEAD BYTE 0xEF
+ 19679, //112#DBCS LEAD BYTE 0xF0
+ 19869, //113#DBCS LEAD BYTE 0xF1
+ 20059, //114#DBCS LEAD BYTE 0xF2
+ 20249, //115#DBCS LEAD BYTE 0xF3
+ 20439, //116#DBCS LEAD BYTE 0xF4
+ 20659, //117#DBCS LEAD BYTE 0xF5
+ 20819, //118#DBCS LEAD BYTE 0xF6
+ 21009, //119#DBCS LEAD BYTE 0xF7
+ 21199, //120#DBCS LEAD BYTE 0xF8
+ 21295, //121#DBCS LEAD BYTE 0xF9
+ 21391, //122#DBCS LEAD BYTE 0xFA
+ 21487, //123#DBCS LEAD BYTE 0xFB
+ 21583, //124#DBCS LEAD BYTE 0xFC
+ 21679, //125#DBCS LEAD BYTE 0xFD
+ 21775, //126#DBCS LEAD BYTE 0xFE
+ 21791, //127#UNDEFINED 0xFF, END OF TABLE
+};
+
+//Table 936 tail byte
+static const int DRW_DoubleTable936[][2] = {
+ {0x8140, 0x4E02}, //1 #CJK UNIFIED IDEOGRAPH
+ {0x8141, 0x4E04}, //2 #CJK UNIFIED IDEOGRAPH
+ {0x8142, 0x4E05}, //3 #CJK UNIFIED IDEOGRAPH
+ {0x8143, 0x4E06}, //4 #CJK UNIFIED IDEOGRAPH
+ {0x8144, 0x4E0F}, //5 #CJK UNIFIED IDEOGRAPH
+ {0x8145, 0x4E12}, //6 #CJK UNIFIED IDEOGRAPH
+ {0x8146, 0x4E17}, //7 #CJK UNIFIED IDEOGRAPH
+ {0x8147, 0x4E1F}, //8 #CJK UNIFIED IDEOGRAPH
+ {0x8148, 0x4E20}, //9 #CJK UNIFIED IDEOGRAPH
+ {0x8149, 0x4E21}, //10 #CJK UNIFIED IDEOGRAPH
+ {0x814A, 0x4E23}, //11 #CJK UNIFIED IDEOGRAPH
+ {0x814B, 0x4E26}, //12 #CJK UNIFIED IDEOGRAPH
+ {0x814C, 0x4E29}, //13 #CJK UNIFIED IDEOGRAPH
+ {0x814D, 0x4E2E}, //14 #CJK UNIFIED IDEOGRAPH
+ {0x814E, 0x4E2F}, //15 #CJK UNIFIED IDEOGRAPH
+ {0x814F, 0x4E31}, //16 #CJK UNIFIED IDEOGRAPH
+ {0x8150, 0x4E33}, //17 #CJK UNIFIED IDEOGRAPH
+ {0x8151, 0x4E35}, //18 #CJK UNIFIED IDEOGRAPH
+ {0x8152, 0x4E37}, //19 #CJK UNIFIED IDEOGRAPH
+ {0x8153, 0x4E3C}, //20 #CJK UNIFIED IDEOGRAPH
+ {0x8154, 0x4E40}, //21 #CJK UNIFIED IDEOGRAPH
+ {0x8155, 0x4E41}, //22 #CJK UNIFIED IDEOGRAPH
+ {0x8156, 0x4E42}, //23 #CJK UNIFIED IDEOGRAPH
+ {0x8157, 0x4E44}, //24 #CJK UNIFIED IDEOGRAPH
+ {0x8158, 0x4E46}, //25 #CJK UNIFIED IDEOGRAPH
+ {0x8159, 0x4E4A}, //26 #CJK UNIFIED IDEOGRAPH
+ {0x815A, 0x4E51}, //27 #CJK UNIFIED IDEOGRAPH
+ {0x815B, 0x4E55}, //28 #CJK UNIFIED IDEOGRAPH
+ {0x815C, 0x4E57}, //29 #CJK UNIFIED IDEOGRAPH
+ {0x815D, 0x4E5A}, //30 #CJK UNIFIED IDEOGRAPH
+ {0x815E, 0x4E5B}, //31 #CJK UNIFIED IDEOGRAPH
+ {0x815F, 0x4E62}, //32 #CJK UNIFIED IDEOGRAPH
+ {0x8160, 0x4E63}, //33 #CJK UNIFIED IDEOGRAPH
+ {0x8161, 0x4E64}, //34 #CJK UNIFIED IDEOGRAPH
+ {0x8162, 0x4E65}, //35 #CJK UNIFIED IDEOGRAPH
+ {0x8163, 0x4E67}, //36 #CJK UNIFIED IDEOGRAPH
+ {0x8164, 0x4E68}, //37 #CJK UNIFIED IDEOGRAPH
+ {0x8165, 0x4E6A}, //38 #CJK UNIFIED IDEOGRAPH
+ {0x8166, 0x4E6B}, //39 #CJK UNIFIED IDEOGRAPH
+ {0x8167, 0x4E6C}, //40 #CJK UNIFIED IDEOGRAPH
+ {0x8168, 0x4E6D}, //41 #CJK UNIFIED IDEOGRAPH
+ {0x8169, 0x4E6E}, //42 #CJK UNIFIED IDEOGRAPH
+ {0x816A, 0x4E6F}, //43 #CJK UNIFIED IDEOGRAPH
+ {0x816B, 0x4E72}, //44 #CJK UNIFIED IDEOGRAPH
+ {0x816C, 0x4E74}, //45 #CJK UNIFIED IDEOGRAPH
+ {0x816D, 0x4E75}, //46 #CJK UNIFIED IDEOGRAPH
+ {0x816E, 0x4E76}, //47 #CJK UNIFIED IDEOGRAPH
+ {0x816F, 0x4E77}, //48 #CJK UNIFIED IDEOGRAPH
+ {0x8170, 0x4E78}, //49 #CJK UNIFIED IDEOGRAPH
+ {0x8171, 0x4E79}, //50 #CJK UNIFIED IDEOGRAPH
+ {0x8172, 0x4E7A}, //51 #CJK UNIFIED IDEOGRAPH
+ {0x8173, 0x4E7B}, //52 #CJK UNIFIED IDEOGRAPH
+ {0x8174, 0x4E7C}, //53 #CJK UNIFIED IDEOGRAPH
+ {0x8175, 0x4E7D}, //54 #CJK UNIFIED IDEOGRAPH
+ {0x8176, 0x4E7F}, //55 #CJK UNIFIED IDEOGRAPH
+ {0x8177, 0x4E80}, //56 #CJK UNIFIED IDEOGRAPH
+ {0x8178, 0x4E81}, //57 #CJK UNIFIED IDEOGRAPH
+ {0x8179, 0x4E82}, //58 #CJK UNIFIED IDEOGRAPH
+ {0x817A, 0x4E83}, //59 #CJK UNIFIED IDEOGRAPH
+ {0x817B, 0x4E84}, //60 #CJK UNIFIED IDEOGRAPH
+ {0x817C, 0x4E85}, //61 #CJK UNIFIED IDEOGRAPH
+ {0x817D, 0x4E87}, //62 #CJK UNIFIED IDEOGRAPH
+ {0x817E, 0x4E8A}, //63 #CJK UNIFIED IDEOGRAPH
+ {0x8180, 0x4E90}, //64 #CJK UNIFIED IDEOGRAPH
+ {0x8181, 0x4E96}, //65 #CJK UNIFIED IDEOGRAPH
+ {0x8182, 0x4E97}, //66 #CJK UNIFIED IDEOGRAPH
+ {0x8183, 0x4E99}, //67 #CJK UNIFIED IDEOGRAPH
+ {0x8184, 0x4E9C}, //68 #CJK UNIFIED IDEOGRAPH
+ {0x8185, 0x4E9D}, //69 #CJK UNIFIED IDEOGRAPH
+ {0x8186, 0x4E9E}, //70 #CJK UNIFIED IDEOGRAPH
+ {0x8187, 0x4EA3}, //71 #CJK UNIFIED IDEOGRAPH
+ {0x8188, 0x4EAA}, //72 #CJK UNIFIED IDEOGRAPH
+ {0x8189, 0x4EAF}, //73 #CJK UNIFIED IDEOGRAPH
+ {0x818A, 0x4EB0}, //74 #CJK UNIFIED IDEOGRAPH
+ {0x818B, 0x4EB1}, //75 #CJK UNIFIED IDEOGRAPH
+ {0x818C, 0x4EB4}, //76 #CJK UNIFIED IDEOGRAPH
+ {0x818D, 0x4EB6}, //77 #CJK UNIFIED IDEOGRAPH
+ {0x818E, 0x4EB7}, //78 #CJK UNIFIED IDEOGRAPH
+ {0x818F, 0x4EB8}, //79 #CJK UNIFIED IDEOGRAPH
+ {0x8190, 0x4EB9}, //80 #CJK UNIFIED IDEOGRAPH
+ {0x8191, 0x4EBC}, //81 #CJK UNIFIED IDEOGRAPH
+ {0x8192, 0x4EBD}, //82 #CJK UNIFIED IDEOGRAPH
+ {0x8193, 0x4EBE}, //83 #CJK UNIFIED IDEOGRAPH
+ {0x8194, 0x4EC8}, //84 #CJK UNIFIED IDEOGRAPH
+ {0x8195, 0x4ECC}, //85 #CJK UNIFIED IDEOGRAPH
+ {0x8196, 0x4ECF}, //86 #CJK UNIFIED IDEOGRAPH
+ {0x8197, 0x4ED0}, //87 #CJK UNIFIED IDEOGRAPH
+ {0x8198, 0x4ED2}, //88 #CJK UNIFIED IDEOGRAPH
+ {0x8199, 0x4EDA}, //89 #CJK UNIFIED IDEOGRAPH
+ {0x819A, 0x4EDB}, //90 #CJK UNIFIED IDEOGRAPH
+ {0x819B, 0x4EDC}, //91 #CJK UNIFIED IDEOGRAPH
+ {0x819C, 0x4EE0}, //92 #CJK UNIFIED IDEOGRAPH
+ {0x819D, 0x4EE2}, //93 #CJK UNIFIED IDEOGRAPH
+ {0x819E, 0x4EE6}, //94 #CJK UNIFIED IDEOGRAPH
+ {0x819F, 0x4EE7}, //95 #CJK UNIFIED IDEOGRAPH
+ {0x81A0, 0x4EE9}, //96 #CJK UNIFIED IDEOGRAPH
+ {0x81A1, 0x4EED}, //97 #CJK UNIFIED IDEOGRAPH
+ {0x81A2, 0x4EEE}, //98 #CJK UNIFIED IDEOGRAPH
+ {0x81A3, 0x4EEF}, //99 #CJK UNIFIED IDEOGRAPH
+ {0x81A4, 0x4EF1}, //100 #CJK UNIFIED IDEOGRAPH
+ {0x81A5, 0x4EF4}, //101 #CJK UNIFIED IDEOGRAPH
+ {0x81A6, 0x4EF8}, //102 #CJK UNIFIED IDEOGRAPH
+ {0x81A7, 0x4EF9}, //103 #CJK UNIFIED IDEOGRAPH
+ {0x81A8, 0x4EFA}, //104 #CJK UNIFIED IDEOGRAPH
+ {0x81A9, 0x4EFC}, //105 #CJK UNIFIED IDEOGRAPH
+ {0x81AA, 0x4EFE}, //106 #CJK UNIFIED IDEOGRAPH
+ {0x81AB, 0x4F00}, //107 #CJK UNIFIED IDEOGRAPH
+ {0x81AC, 0x4F02}, //108 #CJK UNIFIED IDEOGRAPH
+ {0x81AD, 0x4F03}, //109 #CJK UNIFIED IDEOGRAPH
+ {0x81AE, 0x4F04}, //110 #CJK UNIFIED IDEOGRAPH
+ {0x81AF, 0x4F05}, //111 #CJK UNIFIED IDEOGRAPH
+ {0x81B0, 0x4F06}, //112 #CJK UNIFIED IDEOGRAPH
+ {0x81B1, 0x4F07}, //113 #CJK UNIFIED IDEOGRAPH
+ {0x81B2, 0x4F08}, //114 #CJK UNIFIED IDEOGRAPH
+ {0x81B3, 0x4F0B}, //115 #CJK UNIFIED IDEOGRAPH
+ {0x81B4, 0x4F0C}, //116 #CJK UNIFIED IDEOGRAPH
+ {0x81B5, 0x4F12}, //117 #CJK UNIFIED IDEOGRAPH
+ {0x81B6, 0x4F13}, //118 #CJK UNIFIED IDEOGRAPH
+ {0x81B7, 0x4F14}, //119 #CJK UNIFIED IDEOGRAPH
+ {0x81B8, 0x4F15}, //120 #CJK UNIFIED IDEOGRAPH
+ {0x81B9, 0x4F16}, //121 #CJK UNIFIED IDEOGRAPH
+ {0x81BA, 0x4F1C}, //122 #CJK UNIFIED IDEOGRAPH
+ {0x81BB, 0x4F1D}, //123 #CJK UNIFIED IDEOGRAPH
+ {0x81BC, 0x4F21}, //124 #CJK UNIFIED IDEOGRAPH
+ {0x81BD, 0x4F23}, //125 #CJK UNIFIED IDEOGRAPH
+ {0x81BE, 0x4F28}, //126 #CJK UNIFIED IDEOGRAPH
+ {0x81BF, 0x4F29}, //127 #CJK UNIFIED IDEOGRAPH
+ {0x81C0, 0x4F2C}, //128 #CJK UNIFIED IDEOGRAPH
+ {0x81C1, 0x4F2D}, //129 #CJK UNIFIED IDEOGRAPH
+ {0x81C2, 0x4F2E}, //130 #CJK UNIFIED IDEOGRAPH
+ {0x81C3, 0x4F31}, //131 #CJK UNIFIED IDEOGRAPH
+ {0x81C4, 0x4F33}, //132 #CJK UNIFIED IDEOGRAPH
+ {0x81C5, 0x4F35}, //133 #CJK UNIFIED IDEOGRAPH
+ {0x81C6, 0x4F37}, //134 #CJK UNIFIED IDEOGRAPH
+ {0x81C7, 0x4F39}, //135 #CJK UNIFIED IDEOGRAPH
+ {0x81C8, 0x4F3B}, //136 #CJK UNIFIED IDEOGRAPH
+ {0x81C9, 0x4F3E}, //137 #CJK UNIFIED IDEOGRAPH
+ {0x81CA, 0x4F3F}, //138 #CJK UNIFIED IDEOGRAPH
+ {0x81CB, 0x4F40}, //139 #CJK UNIFIED IDEOGRAPH
+ {0x81CC, 0x4F41}, //140 #CJK UNIFIED IDEOGRAPH
+ {0x81CD, 0x4F42}, //141 #CJK UNIFIED IDEOGRAPH
+ {0x81CE, 0x4F44}, //142 #CJK UNIFIED IDEOGRAPH
+ {0x81CF, 0x4F45}, //143 #CJK UNIFIED IDEOGRAPH
+ {0x81D0, 0x4F47}, //144 #CJK UNIFIED IDEOGRAPH
+ {0x81D1, 0x4F48}, //145 #CJK UNIFIED IDEOGRAPH
+ {0x81D2, 0x4F49}, //146 #CJK UNIFIED IDEOGRAPH
+ {0x81D3, 0x4F4A}, //147 #CJK UNIFIED IDEOGRAPH
+ {0x81D4, 0x4F4B}, //148 #CJK UNIFIED IDEOGRAPH
+ {0x81D5, 0x4F4C}, //149 #CJK UNIFIED IDEOGRAPH
+ {0x81D6, 0x4F52}, //150 #CJK UNIFIED IDEOGRAPH
+ {0x81D7, 0x4F54}, //151 #CJK UNIFIED IDEOGRAPH
+ {0x81D8, 0x4F56}, //152 #CJK UNIFIED IDEOGRAPH
+ {0x81D9, 0x4F61}, //153 #CJK UNIFIED IDEOGRAPH
+ {0x81DA, 0x4F62}, //154 #CJK UNIFIED IDEOGRAPH
+ {0x81DB, 0x4F66}, //155 #CJK UNIFIED IDEOGRAPH
+ {0x81DC, 0x4F68}, //156 #CJK UNIFIED IDEOGRAPH
+ {0x81DD, 0x4F6A}, //157 #CJK UNIFIED IDEOGRAPH
+ {0x81DE, 0x4F6B}, //158 #CJK UNIFIED IDEOGRAPH
+ {0x81DF, 0x4F6D}, //159 #CJK UNIFIED IDEOGRAPH
+ {0x81E0, 0x4F6E}, //160 #CJK UNIFIED IDEOGRAPH
+ {0x81E1, 0x4F71}, //161 #CJK UNIFIED IDEOGRAPH
+ {0x81E2, 0x4F72}, //162 #CJK UNIFIED IDEOGRAPH
+ {0x81E3, 0x4F75}, //163 #CJK UNIFIED IDEOGRAPH
+ {0x81E4, 0x4F77}, //164 #CJK UNIFIED IDEOGRAPH
+ {0x81E5, 0x4F78}, //165 #CJK UNIFIED IDEOGRAPH
+ {0x81E6, 0x4F79}, //166 #CJK UNIFIED IDEOGRAPH
+ {0x81E7, 0x4F7A}, //167 #CJK UNIFIED IDEOGRAPH
+ {0x81E8, 0x4F7D}, //168 #CJK UNIFIED IDEOGRAPH
+ {0x81E9, 0x4F80}, //169 #CJK UNIFIED IDEOGRAPH
+ {0x81EA, 0x4F81}, //170 #CJK UNIFIED IDEOGRAPH
+ {0x81EB, 0x4F82}, //171 #CJK UNIFIED IDEOGRAPH
+ {0x81EC, 0x4F85}, //172 #CJK UNIFIED IDEOGRAPH
+ {0x81ED, 0x4F86}, //173 #CJK UNIFIED IDEOGRAPH
+ {0x81EE, 0x4F87}, //174 #CJK UNIFIED IDEOGRAPH
+ {0x81EF, 0x4F8A}, //175 #CJK UNIFIED IDEOGRAPH
+ {0x81F0, 0x4F8C}, //176 #CJK UNIFIED IDEOGRAPH
+ {0x81F1, 0x4F8E}, //177 #CJK UNIFIED IDEOGRAPH
+ {0x81F2, 0x4F90}, //178 #CJK UNIFIED IDEOGRAPH
+ {0x81F3, 0x4F92}, //179 #CJK UNIFIED IDEOGRAPH
+ {0x81F4, 0x4F93}, //180 #CJK UNIFIED IDEOGRAPH
+ {0x81F5, 0x4F95}, //181 #CJK UNIFIED IDEOGRAPH
+ {0x81F6, 0x4F96}, //182 #CJK UNIFIED IDEOGRAPH
+ {0x81F7, 0x4F98}, //183 #CJK UNIFIED IDEOGRAPH
+ {0x81F8, 0x4F99}, //184 #CJK UNIFIED IDEOGRAPH
+ {0x81F9, 0x4F9A}, //185 #CJK UNIFIED IDEOGRAPH
+ {0x81FA, 0x4F9C}, //186 #CJK UNIFIED IDEOGRAPH
+ {0x81FB, 0x4F9E}, //187 #CJK UNIFIED IDEOGRAPH
+ {0x81FC, 0x4F9F}, //188 #CJK UNIFIED IDEOGRAPH
+ {0x81FD, 0x4FA1}, //189 #CJK UNIFIED IDEOGRAPH
+ {0x81FE, 0x4FA2}, //190 #CJK UNIFIED IDEOGRAPH
+ {0x8240, 0x4FA4}, //191 #CJK UNIFIED IDEOGRAPH
+ {0x8241, 0x4FAB}, //192 #CJK UNIFIED IDEOGRAPH
+ {0x8242, 0x4FAD}, //193 #CJK UNIFIED IDEOGRAPH
+ {0x8243, 0x4FB0}, //194 #CJK UNIFIED IDEOGRAPH
+ {0x8244, 0x4FB1}, //195 #CJK UNIFIED IDEOGRAPH
+ {0x8245, 0x4FB2}, //196 #CJK UNIFIED IDEOGRAPH
+ {0x8246, 0x4FB3}, //197 #CJK UNIFIED IDEOGRAPH
+ {0x8247, 0x4FB4}, //198 #CJK UNIFIED IDEOGRAPH
+ {0x8248, 0x4FB6}, //199 #CJK UNIFIED IDEOGRAPH
+ {0x8249, 0x4FB7}, //200 #CJK UNIFIED IDEOGRAPH
+ {0x824A, 0x4FB8}, //201 #CJK UNIFIED IDEOGRAPH
+ {0x824B, 0x4FB9}, //202 #CJK UNIFIED IDEOGRAPH
+ {0x824C, 0x4FBA}, //203 #CJK UNIFIED IDEOGRAPH
+ {0x824D, 0x4FBB}, //204 #CJK UNIFIED IDEOGRAPH
+ {0x824E, 0x4FBC}, //205 #CJK UNIFIED IDEOGRAPH
+ {0x824F, 0x4FBD}, //206 #CJK UNIFIED IDEOGRAPH
+ {0x8250, 0x4FBE}, //207 #CJK UNIFIED IDEOGRAPH
+ {0x8251, 0x4FC0}, //208 #CJK UNIFIED IDEOGRAPH
+ {0x8252, 0x4FC1}, //209 #CJK UNIFIED IDEOGRAPH
+ {0x8253, 0x4FC2}, //210 #CJK UNIFIED IDEOGRAPH
+ {0x8254, 0x4FC6}, //211 #CJK UNIFIED IDEOGRAPH
+ {0x8255, 0x4FC7}, //212 #CJK UNIFIED IDEOGRAPH
+ {0x8256, 0x4FC8}, //213 #CJK UNIFIED IDEOGRAPH
+ {0x8257, 0x4FC9}, //214 #CJK UNIFIED IDEOGRAPH
+ {0x8258, 0x4FCB}, //215 #CJK UNIFIED IDEOGRAPH
+ {0x8259, 0x4FCC}, //216 #CJK UNIFIED IDEOGRAPH
+ {0x825A, 0x4FCD}, //217 #CJK UNIFIED IDEOGRAPH
+ {0x825B, 0x4FD2}, //218 #CJK UNIFIED IDEOGRAPH
+ {0x825C, 0x4FD3}, //219 #CJK UNIFIED IDEOGRAPH
+ {0x825D, 0x4FD4}, //220 #CJK UNIFIED IDEOGRAPH
+ {0x825E, 0x4FD5}, //221 #CJK UNIFIED IDEOGRAPH
+ {0x825F, 0x4FD6}, //222 #CJK UNIFIED IDEOGRAPH
+ {0x8260, 0x4FD9}, //223 #CJK UNIFIED IDEOGRAPH
+ {0x8261, 0x4FDB}, //224 #CJK UNIFIED IDEOGRAPH
+ {0x8262, 0x4FE0}, //225 #CJK UNIFIED IDEOGRAPH
+ {0x8263, 0x4FE2}, //226 #CJK UNIFIED IDEOGRAPH
+ {0x8264, 0x4FE4}, //227 #CJK UNIFIED IDEOGRAPH
+ {0x8265, 0x4FE5}, //228 #CJK UNIFIED IDEOGRAPH
+ {0x8266, 0x4FE7}, //229 #CJK UNIFIED IDEOGRAPH
+ {0x8267, 0x4FEB}, //230 #CJK UNIFIED IDEOGRAPH
+ {0x8268, 0x4FEC}, //231 #CJK UNIFIED IDEOGRAPH
+ {0x8269, 0x4FF0}, //232 #CJK UNIFIED IDEOGRAPH
+ {0x826A, 0x4FF2}, //233 #CJK UNIFIED IDEOGRAPH
+ {0x826B, 0x4FF4}, //234 #CJK UNIFIED IDEOGRAPH
+ {0x826C, 0x4FF5}, //235 #CJK UNIFIED IDEOGRAPH
+ {0x826D, 0x4FF6}, //236 #CJK UNIFIED IDEOGRAPH
+ {0x826E, 0x4FF7}, //237 #CJK UNIFIED IDEOGRAPH
+ {0x826F, 0x4FF9}, //238 #CJK UNIFIED IDEOGRAPH
+ {0x8270, 0x4FFB}, //239 #CJK UNIFIED IDEOGRAPH
+ {0x8271, 0x4FFC}, //240 #CJK UNIFIED IDEOGRAPH
+ {0x8272, 0x4FFD}, //241 #CJK UNIFIED IDEOGRAPH
+ {0x8273, 0x4FFF}, //242 #CJK UNIFIED IDEOGRAPH
+ {0x8274, 0x5000}, //243 #CJK UNIFIED IDEOGRAPH
+ {0x8275, 0x5001}, //244 #CJK UNIFIED IDEOGRAPH
+ {0x8276, 0x5002}, //245 #CJK UNIFIED IDEOGRAPH
+ {0x8277, 0x5003}, //246 #CJK UNIFIED IDEOGRAPH
+ {0x8278, 0x5004}, //247 #CJK UNIFIED IDEOGRAPH
+ {0x8279, 0x5005}, //248 #CJK UNIFIED IDEOGRAPH
+ {0x827A, 0x5006}, //249 #CJK UNIFIED IDEOGRAPH
+ {0x827B, 0x5007}, //250 #CJK UNIFIED IDEOGRAPH
+ {0x827C, 0x5008}, //251 #CJK UNIFIED IDEOGRAPH
+ {0x827D, 0x5009}, //252 #CJK UNIFIED IDEOGRAPH
+ {0x827E, 0x500A}, //253 #CJK UNIFIED IDEOGRAPH
+ {0x8280, 0x500B}, //254 #CJK UNIFIED IDEOGRAPH
+ {0x8281, 0x500E}, //255 #CJK UNIFIED IDEOGRAPH
+ {0x8282, 0x5010}, //256 #CJK UNIFIED IDEOGRAPH
+ {0x8283, 0x5011}, //257 #CJK UNIFIED IDEOGRAPH
+ {0x8284, 0x5013}, //258 #CJK UNIFIED IDEOGRAPH
+ {0x8285, 0x5015}, //259 #CJK UNIFIED IDEOGRAPH
+ {0x8286, 0x5016}, //260 #CJK UNIFIED IDEOGRAPH
+ {0x8287, 0x5017}, //261 #CJK UNIFIED IDEOGRAPH
+ {0x8288, 0x501B}, //262 #CJK UNIFIED IDEOGRAPH
+ {0x8289, 0x501D}, //263 #CJK UNIFIED IDEOGRAPH
+ {0x828A, 0x501E}, //264 #CJK UNIFIED IDEOGRAPH
+ {0x828B, 0x5020}, //265 #CJK UNIFIED IDEOGRAPH
+ {0x828C, 0x5022}, //266 #CJK UNIFIED IDEOGRAPH
+ {0x828D, 0x5023}, //267 #CJK UNIFIED IDEOGRAPH
+ {0x828E, 0x5024}, //268 #CJK UNIFIED IDEOGRAPH
+ {0x828F, 0x5027}, //269 #CJK UNIFIED IDEOGRAPH
+ {0x8290, 0x502B}, //270 #CJK UNIFIED IDEOGRAPH
+ {0x8291, 0x502F}, //271 #CJK UNIFIED IDEOGRAPH
+ {0x8292, 0x5030}, //272 #CJK UNIFIED IDEOGRAPH
+ {0x8293, 0x5031}, //273 #CJK UNIFIED IDEOGRAPH
+ {0x8294, 0x5032}, //274 #CJK UNIFIED IDEOGRAPH
+ {0x8295, 0x5033}, //275 #CJK UNIFIED IDEOGRAPH
+ {0x8296, 0x5034}, //276 #CJK UNIFIED IDEOGRAPH
+ {0x8297, 0x5035}, //277 #CJK UNIFIED IDEOGRAPH
+ {0x8298, 0x5036}, //278 #CJK UNIFIED IDEOGRAPH
+ {0x8299, 0x5037}, //279 #CJK UNIFIED IDEOGRAPH
+ {0x829A, 0x5038}, //280 #CJK UNIFIED IDEOGRAPH
+ {0x829B, 0x5039}, //281 #CJK UNIFIED IDEOGRAPH
+ {0x829C, 0x503B}, //282 #CJK UNIFIED IDEOGRAPH
+ {0x829D, 0x503D}, //283 #CJK UNIFIED IDEOGRAPH
+ {0x829E, 0x503F}, //284 #CJK UNIFIED IDEOGRAPH
+ {0x829F, 0x5040}, //285 #CJK UNIFIED IDEOGRAPH
+ {0x82A0, 0x5041}, //286 #CJK UNIFIED IDEOGRAPH
+ {0x82A1, 0x5042}, //287 #CJK UNIFIED IDEOGRAPH
+ {0x82A2, 0x5044}, //288 #CJK UNIFIED IDEOGRAPH
+ {0x82A3, 0x5045}, //289 #CJK UNIFIED IDEOGRAPH
+ {0x82A4, 0x5046}, //290 #CJK UNIFIED IDEOGRAPH
+ {0x82A5, 0x5049}, //291 #CJK UNIFIED IDEOGRAPH
+ {0x82A6, 0x504A}, //292 #CJK UNIFIED IDEOGRAPH
+ {0x82A7, 0x504B}, //293 #CJK UNIFIED IDEOGRAPH
+ {0x82A8, 0x504D}, //294 #CJK UNIFIED IDEOGRAPH
+ {0x82A9, 0x5050}, //295 #CJK UNIFIED IDEOGRAPH
+ {0x82AA, 0x5051}, //296 #CJK UNIFIED IDEOGRAPH
+ {0x82AB, 0x5052}, //297 #CJK UNIFIED IDEOGRAPH
+ {0x82AC, 0x5053}, //298 #CJK UNIFIED IDEOGRAPH
+ {0x82AD, 0x5054}, //299 #CJK UNIFIED IDEOGRAPH
+ {0x82AE, 0x5056}, //300 #CJK UNIFIED IDEOGRAPH
+ {0x82AF, 0x5057}, //301 #CJK UNIFIED IDEOGRAPH
+ {0x82B0, 0x5058}, //302 #CJK UNIFIED IDEOGRAPH
+ {0x82B1, 0x5059}, //303 #CJK UNIFIED IDEOGRAPH
+ {0x82B2, 0x505B}, //304 #CJK UNIFIED IDEOGRAPH
+ {0x82B3, 0x505D}, //305 #CJK UNIFIED IDEOGRAPH
+ {0x82B4, 0x505E}, //306 #CJK UNIFIED IDEOGRAPH
+ {0x82B5, 0x505F}, //307 #CJK UNIFIED IDEOGRAPH
+ {0x82B6, 0x5060}, //308 #CJK UNIFIED IDEOGRAPH
+ {0x82B7, 0x5061}, //309 #CJK UNIFIED IDEOGRAPH
+ {0x82B8, 0x5062}, //310 #CJK UNIFIED IDEOGRAPH
+ {0x82B9, 0x5063}, //311 #CJK UNIFIED IDEOGRAPH
+ {0x82BA, 0x5064}, //312 #CJK UNIFIED IDEOGRAPH
+ {0x82BB, 0x5066}, //313 #CJK UNIFIED IDEOGRAPH
+ {0x82BC, 0x5067}, //314 #CJK UNIFIED IDEOGRAPH
+ {0x82BD, 0x5068}, //315 #CJK UNIFIED IDEOGRAPH
+ {0x82BE, 0x5069}, //316 #CJK UNIFIED IDEOGRAPH
+ {0x82BF, 0x506A}, //317 #CJK UNIFIED IDEOGRAPH
+ {0x82C0, 0x506B}, //318 #CJK UNIFIED IDEOGRAPH
+ {0x82C1, 0x506D}, //319 #CJK UNIFIED IDEOGRAPH
+ {0x82C2, 0x506E}, //320 #CJK UNIFIED IDEOGRAPH
+ {0x82C3, 0x506F}, //321 #CJK UNIFIED IDEOGRAPH
+ {0x82C4, 0x5070}, //322 #CJK UNIFIED IDEOGRAPH
+ {0x82C5, 0x5071}, //323 #CJK UNIFIED IDEOGRAPH
+ {0x82C6, 0x5072}, //324 #CJK UNIFIED IDEOGRAPH
+ {0x82C7, 0x5073}, //325 #CJK UNIFIED IDEOGRAPH
+ {0x82C8, 0x5074}, //326 #CJK UNIFIED IDEOGRAPH
+ {0x82C9, 0x5075}, //327 #CJK UNIFIED IDEOGRAPH
+ {0x82CA, 0x5078}, //328 #CJK UNIFIED IDEOGRAPH
+ {0x82CB, 0x5079}, //329 #CJK UNIFIED IDEOGRAPH
+ {0x82CC, 0x507A}, //330 #CJK UNIFIED IDEOGRAPH
+ {0x82CD, 0x507C}, //331 #CJK UNIFIED IDEOGRAPH
+ {0x82CE, 0x507D}, //332 #CJK UNIFIED IDEOGRAPH
+ {0x82CF, 0x5081}, //333 #CJK UNIFIED IDEOGRAPH
+ {0x82D0, 0x5082}, //334 #CJK UNIFIED IDEOGRAPH
+ {0x82D1, 0x5083}, //335 #CJK UNIFIED IDEOGRAPH
+ {0x82D2, 0x5084}, //336 #CJK UNIFIED IDEOGRAPH
+ {0x82D3, 0x5086}, //337 #CJK UNIFIED IDEOGRAPH
+ {0x82D4, 0x5087}, //338 #CJK UNIFIED IDEOGRAPH
+ {0x82D5, 0x5089}, //339 #CJK UNIFIED IDEOGRAPH
+ {0x82D6, 0x508A}, //340 #CJK UNIFIED IDEOGRAPH
+ {0x82D7, 0x508B}, //341 #CJK UNIFIED IDEOGRAPH
+ {0x82D8, 0x508C}, //342 #CJK UNIFIED IDEOGRAPH
+ {0x82D9, 0x508E}, //343 #CJK UNIFIED IDEOGRAPH
+ {0x82DA, 0x508F}, //344 #CJK UNIFIED IDEOGRAPH
+ {0x82DB, 0x5090}, //345 #CJK UNIFIED IDEOGRAPH
+ {0x82DC, 0x5091}, //346 #CJK UNIFIED IDEOGRAPH
+ {0x82DD, 0x5092}, //347 #CJK UNIFIED IDEOGRAPH
+ {0x82DE, 0x5093}, //348 #CJK UNIFIED IDEOGRAPH
+ {0x82DF, 0x5094}, //349 #CJK UNIFIED IDEOGRAPH
+ {0x82E0, 0x5095}, //350 #CJK UNIFIED IDEOGRAPH
+ {0x82E1, 0x5096}, //351 #CJK UNIFIED IDEOGRAPH
+ {0x82E2, 0x5097}, //352 #CJK UNIFIED IDEOGRAPH
+ {0x82E3, 0x5098}, //353 #CJK UNIFIED IDEOGRAPH
+ {0x82E4, 0x5099}, //354 #CJK UNIFIED IDEOGRAPH
+ {0x82E5, 0x509A}, //355 #CJK UNIFIED IDEOGRAPH
+ {0x82E6, 0x509B}, //356 #CJK UNIFIED IDEOGRAPH
+ {0x82E7, 0x509C}, //357 #CJK UNIFIED IDEOGRAPH
+ {0x82E8, 0x509D}, //358 #CJK UNIFIED IDEOGRAPH
+ {0x82E9, 0x509E}, //359 #CJK UNIFIED IDEOGRAPH
+ {0x82EA, 0x509F}, //360 #CJK UNIFIED IDEOGRAPH
+ {0x82EB, 0x50A0}, //361 #CJK UNIFIED IDEOGRAPH
+ {0x82EC, 0x50A1}, //362 #CJK UNIFIED IDEOGRAPH
+ {0x82ED, 0x50A2}, //363 #CJK UNIFIED IDEOGRAPH
+ {0x82EE, 0x50A4}, //364 #CJK UNIFIED IDEOGRAPH
+ {0x82EF, 0x50A6}, //365 #CJK UNIFIED IDEOGRAPH
+ {0x82F0, 0x50AA}, //366 #CJK UNIFIED IDEOGRAPH
+ {0x82F1, 0x50AB}, //367 #CJK UNIFIED IDEOGRAPH
+ {0x82F2, 0x50AD}, //368 #CJK UNIFIED IDEOGRAPH
+ {0x82F3, 0x50AE}, //369 #CJK UNIFIED IDEOGRAPH
+ {0x82F4, 0x50AF}, //370 #CJK UNIFIED IDEOGRAPH
+ {0x82F5, 0x50B0}, //371 #CJK UNIFIED IDEOGRAPH
+ {0x82F6, 0x50B1}, //372 #CJK UNIFIED IDEOGRAPH
+ {0x82F7, 0x50B3}, //373 #CJK UNIFIED IDEOGRAPH
+ {0x82F8, 0x50B4}, //374 #CJK UNIFIED IDEOGRAPH
+ {0x82F9, 0x50B5}, //375 #CJK UNIFIED IDEOGRAPH
+ {0x82FA, 0x50B6}, //376 #CJK UNIFIED IDEOGRAPH
+ {0x82FB, 0x50B7}, //377 #CJK UNIFIED IDEOGRAPH
+ {0x82FC, 0x50B8}, //378 #CJK UNIFIED IDEOGRAPH
+ {0x82FD, 0x50B9}, //379 #CJK UNIFIED IDEOGRAPH
+ {0x82FE, 0x50BC}, //380 #CJK UNIFIED IDEOGRAPH
+ {0x8340, 0x50BD}, //381 #CJK UNIFIED IDEOGRAPH
+ {0x8341, 0x50BE}, //382 #CJK UNIFIED IDEOGRAPH
+ {0x8342, 0x50BF}, //383 #CJK UNIFIED IDEOGRAPH
+ {0x8343, 0x50C0}, //384 #CJK UNIFIED IDEOGRAPH
+ {0x8344, 0x50C1}, //385 #CJK UNIFIED IDEOGRAPH
+ {0x8345, 0x50C2}, //386 #CJK UNIFIED IDEOGRAPH
+ {0x8346, 0x50C3}, //387 #CJK UNIFIED IDEOGRAPH
+ {0x8347, 0x50C4}, //388 #CJK UNIFIED IDEOGRAPH
+ {0x8348, 0x50C5}, //389 #CJK UNIFIED IDEOGRAPH
+ {0x8349, 0x50C6}, //390 #CJK UNIFIED IDEOGRAPH
+ {0x834A, 0x50C7}, //391 #CJK UNIFIED IDEOGRAPH
+ {0x834B, 0x50C8}, //392 #CJK UNIFIED IDEOGRAPH
+ {0x834C, 0x50C9}, //393 #CJK UNIFIED IDEOGRAPH
+ {0x834D, 0x50CA}, //394 #CJK UNIFIED IDEOGRAPH
+ {0x834E, 0x50CB}, //395 #CJK UNIFIED IDEOGRAPH
+ {0x834F, 0x50CC}, //396 #CJK UNIFIED IDEOGRAPH
+ {0x8350, 0x50CD}, //397 #CJK UNIFIED IDEOGRAPH
+ {0x8351, 0x50CE}, //398 #CJK UNIFIED IDEOGRAPH
+ {0x8352, 0x50D0}, //399 #CJK UNIFIED IDEOGRAPH
+ {0x8353, 0x50D1}, //400 #CJK UNIFIED IDEOGRAPH
+ {0x8354, 0x50D2}, //401 #CJK UNIFIED IDEOGRAPH
+ {0x8355, 0x50D3}, //402 #CJK UNIFIED IDEOGRAPH
+ {0x8356, 0x50D4}, //403 #CJK UNIFIED IDEOGRAPH
+ {0x8357, 0x50D5}, //404 #CJK UNIFIED IDEOGRAPH
+ {0x8358, 0x50D7}, //405 #CJK UNIFIED IDEOGRAPH
+ {0x8359, 0x50D8}, //406 #CJK UNIFIED IDEOGRAPH
+ {0x835A, 0x50D9}, //407 #CJK UNIFIED IDEOGRAPH
+ {0x835B, 0x50DB}, //408 #CJK UNIFIED IDEOGRAPH
+ {0x835C, 0x50DC}, //409 #CJK UNIFIED IDEOGRAPH
+ {0x835D, 0x50DD}, //410 #CJK UNIFIED IDEOGRAPH
+ {0x835E, 0x50DE}, //411 #CJK UNIFIED IDEOGRAPH
+ {0x835F, 0x50DF}, //412 #CJK UNIFIED IDEOGRAPH
+ {0x8360, 0x50E0}, //413 #CJK UNIFIED IDEOGRAPH
+ {0x8361, 0x50E1}, //414 #CJK UNIFIED IDEOGRAPH
+ {0x8362, 0x50E2}, //415 #CJK UNIFIED IDEOGRAPH
+ {0x8363, 0x50E3}, //416 #CJK UNIFIED IDEOGRAPH
+ {0x8364, 0x50E4}, //417 #CJK UNIFIED IDEOGRAPH
+ {0x8365, 0x50E5}, //418 #CJK UNIFIED IDEOGRAPH
+ {0x8366, 0x50E8}, //419 #CJK UNIFIED IDEOGRAPH
+ {0x8367, 0x50E9}, //420 #CJK UNIFIED IDEOGRAPH
+ {0x8368, 0x50EA}, //421 #CJK UNIFIED IDEOGRAPH
+ {0x8369, 0x50EB}, //422 #CJK UNIFIED IDEOGRAPH
+ {0x836A, 0x50EF}, //423 #CJK UNIFIED IDEOGRAPH
+ {0x836B, 0x50F0}, //424 #CJK UNIFIED IDEOGRAPH
+ {0x836C, 0x50F1}, //425 #CJK UNIFIED IDEOGRAPH
+ {0x836D, 0x50F2}, //426 #CJK UNIFIED IDEOGRAPH
+ {0x836E, 0x50F4}, //427 #CJK UNIFIED IDEOGRAPH
+ {0x836F, 0x50F6}, //428 #CJK UNIFIED IDEOGRAPH
+ {0x8370, 0x50F7}, //429 #CJK UNIFIED IDEOGRAPH
+ {0x8371, 0x50F8}, //430 #CJK UNIFIED IDEOGRAPH
+ {0x8372, 0x50F9}, //431 #CJK UNIFIED IDEOGRAPH
+ {0x8373, 0x50FA}, //432 #CJK UNIFIED IDEOGRAPH
+ {0x8374, 0x50FC}, //433 #CJK UNIFIED IDEOGRAPH
+ {0x8375, 0x50FD}, //434 #CJK UNIFIED IDEOGRAPH
+ {0x8376, 0x50FE}, //435 #CJK UNIFIED IDEOGRAPH
+ {0x8377, 0x50FF}, //436 #CJK UNIFIED IDEOGRAPH
+ {0x8378, 0x5100}, //437 #CJK UNIFIED IDEOGRAPH
+ {0x8379, 0x5101}, //438 #CJK UNIFIED IDEOGRAPH
+ {0x837A, 0x5102}, //439 #CJK UNIFIED IDEOGRAPH
+ {0x837B, 0x5103}, //440 #CJK UNIFIED IDEOGRAPH
+ {0x837C, 0x5104}, //441 #CJK UNIFIED IDEOGRAPH
+ {0x837D, 0x5105}, //442 #CJK UNIFIED IDEOGRAPH
+ {0x837E, 0x5108}, //443 #CJK UNIFIED IDEOGRAPH
+ {0x8380, 0x5109}, //444 #CJK UNIFIED IDEOGRAPH
+ {0x8381, 0x510A}, //445 #CJK UNIFIED IDEOGRAPH
+ {0x8382, 0x510C}, //446 #CJK UNIFIED IDEOGRAPH
+ {0x8383, 0x510D}, //447 #CJK UNIFIED IDEOGRAPH
+ {0x8384, 0x510E}, //448 #CJK UNIFIED IDEOGRAPH
+ {0x8385, 0x510F}, //449 #CJK UNIFIED IDEOGRAPH
+ {0x8386, 0x5110}, //450 #CJK UNIFIED IDEOGRAPH
+ {0x8387, 0x5111}, //451 #CJK UNIFIED IDEOGRAPH
+ {0x8388, 0x5113}, //452 #CJK UNIFIED IDEOGRAPH
+ {0x8389, 0x5114}, //453 #CJK UNIFIED IDEOGRAPH
+ {0x838A, 0x5115}, //454 #CJK UNIFIED IDEOGRAPH
+ {0x838B, 0x5116}, //455 #CJK UNIFIED IDEOGRAPH
+ {0x838C, 0x5117}, //456 #CJK UNIFIED IDEOGRAPH
+ {0x838D, 0x5118}, //457 #CJK UNIFIED IDEOGRAPH
+ {0x838E, 0x5119}, //458 #CJK UNIFIED IDEOGRAPH
+ {0x838F, 0x511A}, //459 #CJK UNIFIED IDEOGRAPH
+ {0x8390, 0x511B}, //460 #CJK UNIFIED IDEOGRAPH
+ {0x8391, 0x511C}, //461 #CJK UNIFIED IDEOGRAPH
+ {0x8392, 0x511D}, //462 #CJK UNIFIED IDEOGRAPH
+ {0x8393, 0x511E}, //463 #CJK UNIFIED IDEOGRAPH
+ {0x8394, 0x511F}, //464 #CJK UNIFIED IDEOGRAPH
+ {0x8395, 0x5120}, //465 #CJK UNIFIED IDEOGRAPH
+ {0x8396, 0x5122}, //466 #CJK UNIFIED IDEOGRAPH
+ {0x8397, 0x5123}, //467 #CJK UNIFIED IDEOGRAPH
+ {0x8398, 0x5124}, //468 #CJK UNIFIED IDEOGRAPH
+ {0x8399, 0x5125}, //469 #CJK UNIFIED IDEOGRAPH
+ {0x839A, 0x5126}, //470 #CJK UNIFIED IDEOGRAPH
+ {0x839B, 0x5127}, //471 #CJK UNIFIED IDEOGRAPH
+ {0x839C, 0x5128}, //472 #CJK UNIFIED IDEOGRAPH
+ {0x839D, 0x5129}, //473 #CJK UNIFIED IDEOGRAPH
+ {0x839E, 0x512A}, //474 #CJK UNIFIED IDEOGRAPH
+ {0x839F, 0x512B}, //475 #CJK UNIFIED IDEOGRAPH
+ {0x83A0, 0x512C}, //476 #CJK UNIFIED IDEOGRAPH
+ {0x83A1, 0x512D}, //477 #CJK UNIFIED IDEOGRAPH
+ {0x83A2, 0x512E}, //478 #CJK UNIFIED IDEOGRAPH
+ {0x83A3, 0x512F}, //479 #CJK UNIFIED IDEOGRAPH
+ {0x83A4, 0x5130}, //480 #CJK UNIFIED IDEOGRAPH
+ {0x83A5, 0x5131}, //481 #CJK UNIFIED IDEOGRAPH
+ {0x83A6, 0x5132}, //482 #CJK UNIFIED IDEOGRAPH
+ {0x83A7, 0x5133}, //483 #CJK UNIFIED IDEOGRAPH
+ {0x83A8, 0x5134}, //484 #CJK UNIFIED IDEOGRAPH
+ {0x83A9, 0x5135}, //485 #CJK UNIFIED IDEOGRAPH
+ {0x83AA, 0x5136}, //486 #CJK UNIFIED IDEOGRAPH
+ {0x83AB, 0x5137}, //487 #CJK UNIFIED IDEOGRAPH
+ {0x83AC, 0x5138}, //488 #CJK UNIFIED IDEOGRAPH
+ {0x83AD, 0x5139}, //489 #CJK UNIFIED IDEOGRAPH
+ {0x83AE, 0x513A}, //490 #CJK UNIFIED IDEOGRAPH
+ {0x83AF, 0x513B}, //491 #CJK UNIFIED IDEOGRAPH
+ {0x83B0, 0x513C}, //492 #CJK UNIFIED IDEOGRAPH
+ {0x83B1, 0x513D}, //493 #CJK UNIFIED IDEOGRAPH
+ {0x83B2, 0x513E}, //494 #CJK UNIFIED IDEOGRAPH
+ {0x83B3, 0x5142}, //495 #CJK UNIFIED IDEOGRAPH
+ {0x83B4, 0x5147}, //496 #CJK UNIFIED IDEOGRAPH
+ {0x83B5, 0x514A}, //497 #CJK UNIFIED IDEOGRAPH
+ {0x83B6, 0x514C}, //498 #CJK UNIFIED IDEOGRAPH
+ {0x83B7, 0x514E}, //499 #CJK UNIFIED IDEOGRAPH
+ {0x83B8, 0x514F}, //500 #CJK UNIFIED IDEOGRAPH
+ {0x83B9, 0x5150}, //501 #CJK UNIFIED IDEOGRAPH
+ {0x83BA, 0x5152}, //502 #CJK UNIFIED IDEOGRAPH
+ {0x83BB, 0x5153}, //503 #CJK UNIFIED IDEOGRAPH
+ {0x83BC, 0x5157}, //504 #CJK UNIFIED IDEOGRAPH
+ {0x83BD, 0x5158}, //505 #CJK UNIFIED IDEOGRAPH
+ {0x83BE, 0x5159}, //506 #CJK UNIFIED IDEOGRAPH
+ {0x83BF, 0x515B}, //507 #CJK UNIFIED IDEOGRAPH
+ {0x83C0, 0x515D}, //508 #CJK UNIFIED IDEOGRAPH
+ {0x83C1, 0x515E}, //509 #CJK UNIFIED IDEOGRAPH
+ {0x83C2, 0x515F}, //510 #CJK UNIFIED IDEOGRAPH
+ {0x83C3, 0x5160}, //511 #CJK UNIFIED IDEOGRAPH
+ {0x83C4, 0x5161}, //512 #CJK UNIFIED IDEOGRAPH
+ {0x83C5, 0x5163}, //513 #CJK UNIFIED IDEOGRAPH
+ {0x83C6, 0x5164}, //514 #CJK UNIFIED IDEOGRAPH
+ {0x83C7, 0x5166}, //515 #CJK UNIFIED IDEOGRAPH
+ {0x83C8, 0x5167}, //516 #CJK UNIFIED IDEOGRAPH
+ {0x83C9, 0x5169}, //517 #CJK UNIFIED IDEOGRAPH
+ {0x83CA, 0x516A}, //518 #CJK UNIFIED IDEOGRAPH
+ {0x83CB, 0x516F}, //519 #CJK UNIFIED IDEOGRAPH
+ {0x83CC, 0x5172}, //520 #CJK UNIFIED IDEOGRAPH
+ {0x83CD, 0x517A}, //521 #CJK UNIFIED IDEOGRAPH
+ {0x83CE, 0x517E}, //522 #CJK UNIFIED IDEOGRAPH
+ {0x83CF, 0x517F}, //523 #CJK UNIFIED IDEOGRAPH
+ {0x83D0, 0x5183}, //524 #CJK UNIFIED IDEOGRAPH
+ {0x83D1, 0x5184}, //525 #CJK UNIFIED IDEOGRAPH
+ {0x83D2, 0x5186}, //526 #CJK UNIFIED IDEOGRAPH
+ {0x83D3, 0x5187}, //527 #CJK UNIFIED IDEOGRAPH
+ {0x83D4, 0x518A}, //528 #CJK UNIFIED IDEOGRAPH
+ {0x83D5, 0x518B}, //529 #CJK UNIFIED IDEOGRAPH
+ {0x83D6, 0x518E}, //530 #CJK UNIFIED IDEOGRAPH
+ {0x83D7, 0x518F}, //531 #CJK UNIFIED IDEOGRAPH
+ {0x83D8, 0x5190}, //532 #CJK UNIFIED IDEOGRAPH
+ {0x83D9, 0x5191}, //533 #CJK UNIFIED IDEOGRAPH
+ {0x83DA, 0x5193}, //534 #CJK UNIFIED IDEOGRAPH
+ {0x83DB, 0x5194}, //535 #CJK UNIFIED IDEOGRAPH
+ {0x83DC, 0x5198}, //536 #CJK UNIFIED IDEOGRAPH
+ {0x83DD, 0x519A}, //537 #CJK UNIFIED IDEOGRAPH
+ {0x83DE, 0x519D}, //538 #CJK UNIFIED IDEOGRAPH
+ {0x83DF, 0x519E}, //539 #CJK UNIFIED IDEOGRAPH
+ {0x83E0, 0x519F}, //540 #CJK UNIFIED IDEOGRAPH
+ {0x83E1, 0x51A1}, //541 #CJK UNIFIED IDEOGRAPH
+ {0x83E2, 0x51A3}, //542 #CJK UNIFIED IDEOGRAPH
+ {0x83E3, 0x51A6}, //543 #CJK UNIFIED IDEOGRAPH
+ {0x83E4, 0x51A7}, //544 #CJK UNIFIED IDEOGRAPH
+ {0x83E5, 0x51A8}, //545 #CJK UNIFIED IDEOGRAPH
+ {0x83E6, 0x51A9}, //546 #CJK UNIFIED IDEOGRAPH
+ {0x83E7, 0x51AA}, //547 #CJK UNIFIED IDEOGRAPH
+ {0x83E8, 0x51AD}, //548 #CJK UNIFIED IDEOGRAPH
+ {0x83E9, 0x51AE}, //549 #CJK UNIFIED IDEOGRAPH
+ {0x83EA, 0x51B4}, //550 #CJK UNIFIED IDEOGRAPH
+ {0x83EB, 0x51B8}, //551 #CJK UNIFIED IDEOGRAPH
+ {0x83EC, 0x51B9}, //552 #CJK UNIFIED IDEOGRAPH
+ {0x83ED, 0x51BA}, //553 #CJK UNIFIED IDEOGRAPH
+ {0x83EE, 0x51BE}, //554 #CJK UNIFIED IDEOGRAPH
+ {0x83EF, 0x51BF}, //555 #CJK UNIFIED IDEOGRAPH
+ {0x83F0, 0x51C1}, //556 #CJK UNIFIED IDEOGRAPH
+ {0x83F1, 0x51C2}, //557 #CJK UNIFIED IDEOGRAPH
+ {0x83F2, 0x51C3}, //558 #CJK UNIFIED IDEOGRAPH
+ {0x83F3, 0x51C5}, //559 #CJK UNIFIED IDEOGRAPH
+ {0x83F4, 0x51C8}, //560 #CJK UNIFIED IDEOGRAPH
+ {0x83F5, 0x51CA}, //561 #CJK UNIFIED IDEOGRAPH
+ {0x83F6, 0x51CD}, //562 #CJK UNIFIED IDEOGRAPH
+ {0x83F7, 0x51CE}, //563 #CJK UNIFIED IDEOGRAPH
+ {0x83F8, 0x51D0}, //564 #CJK UNIFIED IDEOGRAPH
+ {0x83F9, 0x51D2}, //565 #CJK UNIFIED IDEOGRAPH
+ {0x83FA, 0x51D3}, //566 #CJK UNIFIED IDEOGRAPH
+ {0x83FB, 0x51D4}, //567 #CJK UNIFIED IDEOGRAPH
+ {0x83FC, 0x51D5}, //568 #CJK UNIFIED IDEOGRAPH
+ {0x83FD, 0x51D6}, //569 #CJK UNIFIED IDEOGRAPH
+ {0x83FE, 0x51D7}, //570 #CJK UNIFIED IDEOGRAPH
+ {0x8440, 0x51D8}, //571 #CJK UNIFIED IDEOGRAPH
+ {0x8441, 0x51D9}, //572 #CJK UNIFIED IDEOGRAPH
+ {0x8442, 0x51DA}, //573 #CJK UNIFIED IDEOGRAPH
+ {0x8443, 0x51DC}, //574 #CJK UNIFIED IDEOGRAPH
+ {0x8444, 0x51DE}, //575 #CJK UNIFIED IDEOGRAPH
+ {0x8445, 0x51DF}, //576 #CJK UNIFIED IDEOGRAPH
+ {0x8446, 0x51E2}, //577 #CJK UNIFIED IDEOGRAPH
+ {0x8447, 0x51E3}, //578 #CJK UNIFIED IDEOGRAPH
+ {0x8448, 0x51E5}, //579 #CJK UNIFIED IDEOGRAPH
+ {0x8449, 0x51E6}, //580 #CJK UNIFIED IDEOGRAPH
+ {0x844A, 0x51E7}, //581 #CJK UNIFIED IDEOGRAPH
+ {0x844B, 0x51E8}, //582 #CJK UNIFIED IDEOGRAPH
+ {0x844C, 0x51E9}, //583 #CJK UNIFIED IDEOGRAPH
+ {0x844D, 0x51EA}, //584 #CJK UNIFIED IDEOGRAPH
+ {0x844E, 0x51EC}, //585 #CJK UNIFIED IDEOGRAPH
+ {0x844F, 0x51EE}, //586 #CJK UNIFIED IDEOGRAPH
+ {0x8450, 0x51F1}, //587 #CJK UNIFIED IDEOGRAPH
+ {0x8451, 0x51F2}, //588 #CJK UNIFIED IDEOGRAPH
+ {0x8452, 0x51F4}, //589 #CJK UNIFIED IDEOGRAPH
+ {0x8453, 0x51F7}, //590 #CJK UNIFIED IDEOGRAPH
+ {0x8454, 0x51FE}, //591 #CJK UNIFIED IDEOGRAPH
+ {0x8455, 0x5204}, //592 #CJK UNIFIED IDEOGRAPH
+ {0x8456, 0x5205}, //593 #CJK UNIFIED IDEOGRAPH
+ {0x8457, 0x5209}, //594 #CJK UNIFIED IDEOGRAPH
+ {0x8458, 0x520B}, //595 #CJK UNIFIED IDEOGRAPH
+ {0x8459, 0x520C}, //596 #CJK UNIFIED IDEOGRAPH
+ {0x845A, 0x520F}, //597 #CJK UNIFIED IDEOGRAPH
+ {0x845B, 0x5210}, //598 #CJK UNIFIED IDEOGRAPH
+ {0x845C, 0x5213}, //599 #CJK UNIFIED IDEOGRAPH
+ {0x845D, 0x5214}, //600 #CJK UNIFIED IDEOGRAPH
+ {0x845E, 0x5215}, //601 #CJK UNIFIED IDEOGRAPH
+ {0x845F, 0x521C}, //602 #CJK UNIFIED IDEOGRAPH
+ {0x8460, 0x521E}, //603 #CJK UNIFIED IDEOGRAPH
+ {0x8461, 0x521F}, //604 #CJK UNIFIED IDEOGRAPH
+ {0x8462, 0x5221}, //605 #CJK UNIFIED IDEOGRAPH
+ {0x8463, 0x5222}, //606 #CJK UNIFIED IDEOGRAPH
+ {0x8464, 0x5223}, //607 #CJK UNIFIED IDEOGRAPH
+ {0x8465, 0x5225}, //608 #CJK UNIFIED IDEOGRAPH
+ {0x8466, 0x5226}, //609 #CJK UNIFIED IDEOGRAPH
+ {0x8467, 0x5227}, //610 #CJK UNIFIED IDEOGRAPH
+ {0x8468, 0x522A}, //611 #CJK UNIFIED IDEOGRAPH
+ {0x8469, 0x522C}, //612 #CJK UNIFIED IDEOGRAPH
+ {0x846A, 0x522F}, //613 #CJK UNIFIED IDEOGRAPH
+ {0x846B, 0x5231}, //614 #CJK UNIFIED IDEOGRAPH
+ {0x846C, 0x5232}, //615 #CJK UNIFIED IDEOGRAPH
+ {0x846D, 0x5234}, //616 #CJK UNIFIED IDEOGRAPH
+ {0x846E, 0x5235}, //617 #CJK UNIFIED IDEOGRAPH
+ {0x846F, 0x523C}, //618 #CJK UNIFIED IDEOGRAPH
+ {0x8470, 0x523E}, //619 #CJK UNIFIED IDEOGRAPH
+ {0x8471, 0x5244}, //620 #CJK UNIFIED IDEOGRAPH
+ {0x8472, 0x5245}, //621 #CJK UNIFIED IDEOGRAPH
+ {0x8473, 0x5246}, //622 #CJK UNIFIED IDEOGRAPH
+ {0x8474, 0x5247}, //623 #CJK UNIFIED IDEOGRAPH
+ {0x8475, 0x5248}, //624 #CJK UNIFIED IDEOGRAPH
+ {0x8476, 0x5249}, //625 #CJK UNIFIED IDEOGRAPH
+ {0x8477, 0x524B}, //626 #CJK UNIFIED IDEOGRAPH
+ {0x8478, 0x524E}, //627 #CJK UNIFIED IDEOGRAPH
+ {0x8479, 0x524F}, //628 #CJK UNIFIED IDEOGRAPH
+ {0x847A, 0x5252}, //629 #CJK UNIFIED IDEOGRAPH
+ {0x847B, 0x5253}, //630 #CJK UNIFIED IDEOGRAPH
+ {0x847C, 0x5255}, //631 #CJK UNIFIED IDEOGRAPH
+ {0x847D, 0x5257}, //632 #CJK UNIFIED IDEOGRAPH
+ {0x847E, 0x5258}, //633 #CJK UNIFIED IDEOGRAPH
+ {0x8480, 0x5259}, //634 #CJK UNIFIED IDEOGRAPH
+ {0x8481, 0x525A}, //635 #CJK UNIFIED IDEOGRAPH
+ {0x8482, 0x525B}, //636 #CJK UNIFIED IDEOGRAPH
+ {0x8483, 0x525D}, //637 #CJK UNIFIED IDEOGRAPH
+ {0x8484, 0x525F}, //638 #CJK UNIFIED IDEOGRAPH
+ {0x8485, 0x5260}, //639 #CJK UNIFIED IDEOGRAPH
+ {0x8486, 0x5262}, //640 #CJK UNIFIED IDEOGRAPH
+ {0x8487, 0x5263}, //641 #CJK UNIFIED IDEOGRAPH
+ {0x8488, 0x5264}, //642 #CJK UNIFIED IDEOGRAPH
+ {0x8489, 0x5266}, //643 #CJK UNIFIED IDEOGRAPH
+ {0x848A, 0x5268}, //644 #CJK UNIFIED IDEOGRAPH
+ {0x848B, 0x526B}, //645 #CJK UNIFIED IDEOGRAPH
+ {0x848C, 0x526C}, //646 #CJK UNIFIED IDEOGRAPH
+ {0x848D, 0x526D}, //647 #CJK UNIFIED IDEOGRAPH
+ {0x848E, 0x526E}, //648 #CJK UNIFIED IDEOGRAPH
+ {0x848F, 0x5270}, //649 #CJK UNIFIED IDEOGRAPH
+ {0x8490, 0x5271}, //650 #CJK UNIFIED IDEOGRAPH
+ {0x8491, 0x5273}, //651 #CJK UNIFIED IDEOGRAPH
+ {0x8492, 0x5274}, //652 #CJK UNIFIED IDEOGRAPH
+ {0x8493, 0x5275}, //653 #CJK UNIFIED IDEOGRAPH
+ {0x8494, 0x5276}, //654 #CJK UNIFIED IDEOGRAPH
+ {0x8495, 0x5277}, //655 #CJK UNIFIED IDEOGRAPH
+ {0x8496, 0x5278}, //656 #CJK UNIFIED IDEOGRAPH
+ {0x8497, 0x5279}, //657 #CJK UNIFIED IDEOGRAPH
+ {0x8498, 0x527A}, //658 #CJK UNIFIED IDEOGRAPH
+ {0x8499, 0x527B}, //659 #CJK UNIFIED IDEOGRAPH
+ {0x849A, 0x527C}, //660 #CJK UNIFIED IDEOGRAPH
+ {0x849B, 0x527E}, //661 #CJK UNIFIED IDEOGRAPH
+ {0x849C, 0x5280}, //662 #CJK UNIFIED IDEOGRAPH
+ {0x849D, 0x5283}, //663 #CJK UNIFIED IDEOGRAPH
+ {0x849E, 0x5284}, //664 #CJK UNIFIED IDEOGRAPH
+ {0x849F, 0x5285}, //665 #CJK UNIFIED IDEOGRAPH
+ {0x84A0, 0x5286}, //666 #CJK UNIFIED IDEOGRAPH
+ {0x84A1, 0x5287}, //667 #CJK UNIFIED IDEOGRAPH
+ {0x84A2, 0x5289}, //668 #CJK UNIFIED IDEOGRAPH
+ {0x84A3, 0x528A}, //669 #CJK UNIFIED IDEOGRAPH
+ {0x84A4, 0x528B}, //670 #CJK UNIFIED IDEOGRAPH
+ {0x84A5, 0x528C}, //671 #CJK UNIFIED IDEOGRAPH
+ {0x84A6, 0x528D}, //672 #CJK UNIFIED IDEOGRAPH
+ {0x84A7, 0x528E}, //673 #CJK UNIFIED IDEOGRAPH
+ {0x84A8, 0x528F}, //674 #CJK UNIFIED IDEOGRAPH
+ {0x84A9, 0x5291}, //675 #CJK UNIFIED IDEOGRAPH
+ {0x84AA, 0x5292}, //676 #CJK UNIFIED IDEOGRAPH
+ {0x84AB, 0x5294}, //677 #CJK UNIFIED IDEOGRAPH
+ {0x84AC, 0x5295}, //678 #CJK UNIFIED IDEOGRAPH
+ {0x84AD, 0x5296}, //679 #CJK UNIFIED IDEOGRAPH
+ {0x84AE, 0x5297}, //680 #CJK UNIFIED IDEOGRAPH
+ {0x84AF, 0x5298}, //681 #CJK UNIFIED IDEOGRAPH
+ {0x84B0, 0x5299}, //682 #CJK UNIFIED IDEOGRAPH
+ {0x84B1, 0x529A}, //683 #CJK UNIFIED IDEOGRAPH
+ {0x84B2, 0x529C}, //684 #CJK UNIFIED IDEOGRAPH
+ {0x84B3, 0x52A4}, //685 #CJK UNIFIED IDEOGRAPH
+ {0x84B4, 0x52A5}, //686 #CJK UNIFIED IDEOGRAPH
+ {0x84B5, 0x52A6}, //687 #CJK UNIFIED IDEOGRAPH
+ {0x84B6, 0x52A7}, //688 #CJK UNIFIED IDEOGRAPH
+ {0x84B7, 0x52AE}, //689 #CJK UNIFIED IDEOGRAPH
+ {0x84B8, 0x52AF}, //690 #CJK UNIFIED IDEOGRAPH
+ {0x84B9, 0x52B0}, //691 #CJK UNIFIED IDEOGRAPH
+ {0x84BA, 0x52B4}, //692 #CJK UNIFIED IDEOGRAPH
+ {0x84BB, 0x52B5}, //693 #CJK UNIFIED IDEOGRAPH
+ {0x84BC, 0x52B6}, //694 #CJK UNIFIED IDEOGRAPH
+ {0x84BD, 0x52B7}, //695 #CJK UNIFIED IDEOGRAPH
+ {0x84BE, 0x52B8}, //696 #CJK UNIFIED IDEOGRAPH
+ {0x84BF, 0x52B9}, //697 #CJK UNIFIED IDEOGRAPH
+ {0x84C0, 0x52BA}, //698 #CJK UNIFIED IDEOGRAPH
+ {0x84C1, 0x52BB}, //699 #CJK UNIFIED IDEOGRAPH
+ {0x84C2, 0x52BC}, //700 #CJK UNIFIED IDEOGRAPH
+ {0x84C3, 0x52BD}, //701 #CJK UNIFIED IDEOGRAPH
+ {0x84C4, 0x52C0}, //702 #CJK UNIFIED IDEOGRAPH
+ {0x84C5, 0x52C1}, //703 #CJK UNIFIED IDEOGRAPH
+ {0x84C6, 0x52C2}, //704 #CJK UNIFIED IDEOGRAPH
+ {0x84C7, 0x52C4}, //705 #CJK UNIFIED IDEOGRAPH
+ {0x84C8, 0x52C5}, //706 #CJK UNIFIED IDEOGRAPH
+ {0x84C9, 0x52C6}, //707 #CJK UNIFIED IDEOGRAPH
+ {0x84CA, 0x52C8}, //708 #CJK UNIFIED IDEOGRAPH
+ {0x84CB, 0x52CA}, //709 #CJK UNIFIED IDEOGRAPH
+ {0x84CC, 0x52CC}, //710 #CJK UNIFIED IDEOGRAPH
+ {0x84CD, 0x52CD}, //711 #CJK UNIFIED IDEOGRAPH
+ {0x84CE, 0x52CE}, //712 #CJK UNIFIED IDEOGRAPH
+ {0x84CF, 0x52CF}, //713 #CJK UNIFIED IDEOGRAPH
+ {0x84D0, 0x52D1}, //714 #CJK UNIFIED IDEOGRAPH
+ {0x84D1, 0x52D3}, //715 #CJK UNIFIED IDEOGRAPH
+ {0x84D2, 0x52D4}, //716 #CJK UNIFIED IDEOGRAPH
+ {0x84D3, 0x52D5}, //717 #CJK UNIFIED IDEOGRAPH
+ {0x84D4, 0x52D7}, //718 #CJK UNIFIED IDEOGRAPH
+ {0x84D5, 0x52D9}, //719 #CJK UNIFIED IDEOGRAPH
+ {0x84D6, 0x52DA}, //720 #CJK UNIFIED IDEOGRAPH
+ {0x84D7, 0x52DB}, //721 #CJK UNIFIED IDEOGRAPH
+ {0x84D8, 0x52DC}, //722 #CJK UNIFIED IDEOGRAPH
+ {0x84D9, 0x52DD}, //723 #CJK UNIFIED IDEOGRAPH
+ {0x84DA, 0x52DE}, //724 #CJK UNIFIED IDEOGRAPH
+ {0x84DB, 0x52E0}, //725 #CJK UNIFIED IDEOGRAPH
+ {0x84DC, 0x52E1}, //726 #CJK UNIFIED IDEOGRAPH
+ {0x84DD, 0x52E2}, //727 #CJK UNIFIED IDEOGRAPH
+ {0x84DE, 0x52E3}, //728 #CJK UNIFIED IDEOGRAPH
+ {0x84DF, 0x52E5}, //729 #CJK UNIFIED IDEOGRAPH
+ {0x84E0, 0x52E6}, //730 #CJK UNIFIED IDEOGRAPH
+ {0x84E1, 0x52E7}, //731 #CJK UNIFIED IDEOGRAPH
+ {0x84E2, 0x52E8}, //732 #CJK UNIFIED IDEOGRAPH
+ {0x84E3, 0x52E9}, //733 #CJK UNIFIED IDEOGRAPH
+ {0x84E4, 0x52EA}, //734 #CJK UNIFIED IDEOGRAPH
+ {0x84E5, 0x52EB}, //735 #CJK UNIFIED IDEOGRAPH
+ {0x84E6, 0x52EC}, //736 #CJK UNIFIED IDEOGRAPH
+ {0x84E7, 0x52ED}, //737 #CJK UNIFIED IDEOGRAPH
+ {0x84E8, 0x52EE}, //738 #CJK UNIFIED IDEOGRAPH
+ {0x84E9, 0x52EF}, //739 #CJK UNIFIED IDEOGRAPH
+ {0x84EA, 0x52F1}, //740 #CJK UNIFIED IDEOGRAPH
+ {0x84EB, 0x52F2}, //741 #CJK UNIFIED IDEOGRAPH
+ {0x84EC, 0x52F3}, //742 #CJK UNIFIED IDEOGRAPH
+ {0x84ED, 0x52F4}, //743 #CJK UNIFIED IDEOGRAPH
+ {0x84EE, 0x52F5}, //744 #CJK UNIFIED IDEOGRAPH
+ {0x84EF, 0x52F6}, //745 #CJK UNIFIED IDEOGRAPH
+ {0x84F0, 0x52F7}, //746 #CJK UNIFIED IDEOGRAPH
+ {0x84F1, 0x52F8}, //747 #CJK UNIFIED IDEOGRAPH
+ {0x84F2, 0x52FB}, //748 #CJK UNIFIED IDEOGRAPH
+ {0x84F3, 0x52FC}, //749 #CJK UNIFIED IDEOGRAPH
+ {0x84F4, 0x52FD}, //750 #CJK UNIFIED IDEOGRAPH
+ {0x84F5, 0x5301}, //751 #CJK UNIFIED IDEOGRAPH
+ {0x84F6, 0x5302}, //752 #CJK UNIFIED IDEOGRAPH
+ {0x84F7, 0x5303}, //753 #CJK UNIFIED IDEOGRAPH
+ {0x84F8, 0x5304}, //754 #CJK UNIFIED IDEOGRAPH
+ {0x84F9, 0x5307}, //755 #CJK UNIFIED IDEOGRAPH
+ {0x84FA, 0x5309}, //756 #CJK UNIFIED IDEOGRAPH
+ {0x84FB, 0x530A}, //757 #CJK UNIFIED IDEOGRAPH
+ {0x84FC, 0x530B}, //758 #CJK UNIFIED IDEOGRAPH
+ {0x84FD, 0x530C}, //759 #CJK UNIFIED IDEOGRAPH
+ {0x84FE, 0x530E}, //760 #CJK UNIFIED IDEOGRAPH
+ {0x8540, 0x5311}, //761 #CJK UNIFIED IDEOGRAPH
+ {0x8541, 0x5312}, //762 #CJK UNIFIED IDEOGRAPH
+ {0x8542, 0x5313}, //763 #CJK UNIFIED IDEOGRAPH
+ {0x8543, 0x5314}, //764 #CJK UNIFIED IDEOGRAPH
+ {0x8544, 0x5318}, //765 #CJK UNIFIED IDEOGRAPH
+ {0x8545, 0x531B}, //766 #CJK UNIFIED IDEOGRAPH
+ {0x8546, 0x531C}, //767 #CJK UNIFIED IDEOGRAPH
+ {0x8547, 0x531E}, //768 #CJK UNIFIED IDEOGRAPH
+ {0x8548, 0x531F}, //769 #CJK UNIFIED IDEOGRAPH
+ {0x8549, 0x5322}, //770 #CJK UNIFIED IDEOGRAPH
+ {0x854A, 0x5324}, //771 #CJK UNIFIED IDEOGRAPH
+ {0x854B, 0x5325}, //772 #CJK UNIFIED IDEOGRAPH
+ {0x854C, 0x5327}, //773 #CJK UNIFIED IDEOGRAPH
+ {0x854D, 0x5328}, //774 #CJK UNIFIED IDEOGRAPH
+ {0x854E, 0x5329}, //775 #CJK UNIFIED IDEOGRAPH
+ {0x854F, 0x532B}, //776 #CJK UNIFIED IDEOGRAPH
+ {0x8550, 0x532C}, //777 #CJK UNIFIED IDEOGRAPH
+ {0x8551, 0x532D}, //778 #CJK UNIFIED IDEOGRAPH
+ {0x8552, 0x532F}, //779 #CJK UNIFIED IDEOGRAPH
+ {0x8553, 0x5330}, //780 #CJK UNIFIED IDEOGRAPH
+ {0x8554, 0x5331}, //781 #CJK UNIFIED IDEOGRAPH
+ {0x8555, 0x5332}, //782 #CJK UNIFIED IDEOGRAPH
+ {0x8556, 0x5333}, //783 #CJK UNIFIED IDEOGRAPH
+ {0x8557, 0x5334}, //784 #CJK UNIFIED IDEOGRAPH
+ {0x8558, 0x5335}, //785 #CJK UNIFIED IDEOGRAPH
+ {0x8559, 0x5336}, //786 #CJK UNIFIED IDEOGRAPH
+ {0x855A, 0x5337}, //787 #CJK UNIFIED IDEOGRAPH
+ {0x855B, 0x5338}, //788 #CJK UNIFIED IDEOGRAPH
+ {0x855C, 0x533C}, //789 #CJK UNIFIED IDEOGRAPH
+ {0x855D, 0x533D}, //790 #CJK UNIFIED IDEOGRAPH
+ {0x855E, 0x5340}, //791 #CJK UNIFIED IDEOGRAPH
+ {0x855F, 0x5342}, //792 #CJK UNIFIED IDEOGRAPH
+ {0x8560, 0x5344}, //793 #CJK UNIFIED IDEOGRAPH
+ {0x8561, 0x5346}, //794 #CJK UNIFIED IDEOGRAPH
+ {0x8562, 0x534B}, //795 #CJK UNIFIED IDEOGRAPH
+ {0x8563, 0x534C}, //796 #CJK UNIFIED IDEOGRAPH
+ {0x8564, 0x534D}, //797 #CJK UNIFIED IDEOGRAPH
+ {0x8565, 0x5350}, //798 #CJK UNIFIED IDEOGRAPH
+ {0x8566, 0x5354}, //799 #CJK UNIFIED IDEOGRAPH
+ {0x8567, 0x5358}, //800 #CJK UNIFIED IDEOGRAPH
+ {0x8568, 0x5359}, //801 #CJK UNIFIED IDEOGRAPH
+ {0x8569, 0x535B}, //802 #CJK UNIFIED IDEOGRAPH
+ {0x856A, 0x535D}, //803 #CJK UNIFIED IDEOGRAPH
+ {0x856B, 0x5365}, //804 #CJK UNIFIED IDEOGRAPH
+ {0x856C, 0x5368}, //805 #CJK UNIFIED IDEOGRAPH
+ {0x856D, 0x536A}, //806 #CJK UNIFIED IDEOGRAPH
+ {0x856E, 0x536C}, //807 #CJK UNIFIED IDEOGRAPH
+ {0x856F, 0x536D}, //808 #CJK UNIFIED IDEOGRAPH
+ {0x8570, 0x5372}, //809 #CJK UNIFIED IDEOGRAPH
+ {0x8571, 0x5376}, //810 #CJK UNIFIED IDEOGRAPH
+ {0x8572, 0x5379}, //811 #CJK UNIFIED IDEOGRAPH
+ {0x8573, 0x537B}, //812 #CJK UNIFIED IDEOGRAPH
+ {0x8574, 0x537C}, //813 #CJK UNIFIED IDEOGRAPH
+ {0x8575, 0x537D}, //814 #CJK UNIFIED IDEOGRAPH
+ {0x8576, 0x537E}, //815 #CJK UNIFIED IDEOGRAPH
+ {0x8577, 0x5380}, //816 #CJK UNIFIED IDEOGRAPH
+ {0x8578, 0x5381}, //817 #CJK UNIFIED IDEOGRAPH
+ {0x8579, 0x5383}, //818 #CJK UNIFIED IDEOGRAPH
+ {0x857A, 0x5387}, //819 #CJK UNIFIED IDEOGRAPH
+ {0x857B, 0x5388}, //820 #CJK UNIFIED IDEOGRAPH
+ {0x857C, 0x538A}, //821 #CJK UNIFIED IDEOGRAPH
+ {0x857D, 0x538E}, //822 #CJK UNIFIED IDEOGRAPH
+ {0x857E, 0x538F}, //823 #CJK UNIFIED IDEOGRAPH
+ {0x8580, 0x5390}, //824 #CJK UNIFIED IDEOGRAPH
+ {0x8581, 0x5391}, //825 #CJK UNIFIED IDEOGRAPH
+ {0x8582, 0x5392}, //826 #CJK UNIFIED IDEOGRAPH
+ {0x8583, 0x5393}, //827 #CJK UNIFIED IDEOGRAPH
+ {0x8584, 0x5394}, //828 #CJK UNIFIED IDEOGRAPH
+ {0x8585, 0x5396}, //829 #CJK UNIFIED IDEOGRAPH
+ {0x8586, 0x5397}, //830 #CJK UNIFIED IDEOGRAPH
+ {0x8587, 0x5399}, //831 #CJK UNIFIED IDEOGRAPH
+ {0x8588, 0x539B}, //832 #CJK UNIFIED IDEOGRAPH
+ {0x8589, 0x539C}, //833 #CJK UNIFIED IDEOGRAPH
+ {0x858A, 0x539E}, //834 #CJK UNIFIED IDEOGRAPH
+ {0x858B, 0x53A0}, //835 #CJK UNIFIED IDEOGRAPH
+ {0x858C, 0x53A1}, //836 #CJK UNIFIED IDEOGRAPH
+ {0x858D, 0x53A4}, //837 #CJK UNIFIED IDEOGRAPH
+ {0x858E, 0x53A7}, //838 #CJK UNIFIED IDEOGRAPH
+ {0x858F, 0x53AA}, //839 #CJK UNIFIED IDEOGRAPH
+ {0x8590, 0x53AB}, //840 #CJK UNIFIED IDEOGRAPH
+ {0x8591, 0x53AC}, //841 #CJK UNIFIED IDEOGRAPH
+ {0x8592, 0x53AD}, //842 #CJK UNIFIED IDEOGRAPH
+ {0x8593, 0x53AF}, //843 #CJK UNIFIED IDEOGRAPH
+ {0x8594, 0x53B0}, //844 #CJK UNIFIED IDEOGRAPH
+ {0x8595, 0x53B1}, //845 #CJK UNIFIED IDEOGRAPH
+ {0x8596, 0x53B2}, //846 #CJK UNIFIED IDEOGRAPH
+ {0x8597, 0x53B3}, //847 #CJK UNIFIED IDEOGRAPH
+ {0x8598, 0x53B4}, //848 #CJK UNIFIED IDEOGRAPH
+ {0x8599, 0x53B5}, //849 #CJK UNIFIED IDEOGRAPH
+ {0x859A, 0x53B7}, //850 #CJK UNIFIED IDEOGRAPH
+ {0x859B, 0x53B8}, //851 #CJK UNIFIED IDEOGRAPH
+ {0x859C, 0x53B9}, //852 #CJK UNIFIED IDEOGRAPH
+ {0x859D, 0x53BA}, //853 #CJK UNIFIED IDEOGRAPH
+ {0x859E, 0x53BC}, //854 #CJK UNIFIED IDEOGRAPH
+ {0x859F, 0x53BD}, //855 #CJK UNIFIED IDEOGRAPH
+ {0x85A0, 0x53BE}, //856 #CJK UNIFIED IDEOGRAPH
+ {0x85A1, 0x53C0}, //857 #CJK UNIFIED IDEOGRAPH
+ {0x85A2, 0x53C3}, //858 #CJK UNIFIED IDEOGRAPH
+ {0x85A3, 0x53C4}, //859 #CJK UNIFIED IDEOGRAPH
+ {0x85A4, 0x53C5}, //860 #CJK UNIFIED IDEOGRAPH
+ {0x85A5, 0x53C6}, //861 #CJK UNIFIED IDEOGRAPH
+ {0x85A6, 0x53C7}, //862 #CJK UNIFIED IDEOGRAPH
+ {0x85A7, 0x53CE}, //863 #CJK UNIFIED IDEOGRAPH
+ {0x85A8, 0x53CF}, //864 #CJK UNIFIED IDEOGRAPH
+ {0x85A9, 0x53D0}, //865 #CJK UNIFIED IDEOGRAPH
+ {0x85AA, 0x53D2}, //866 #CJK UNIFIED IDEOGRAPH
+ {0x85AB, 0x53D3}, //867 #CJK UNIFIED IDEOGRAPH
+ {0x85AC, 0x53D5}, //868 #CJK UNIFIED IDEOGRAPH
+ {0x85AD, 0x53DA}, //869 #CJK UNIFIED IDEOGRAPH
+ {0x85AE, 0x53DC}, //870 #CJK UNIFIED IDEOGRAPH
+ {0x85AF, 0x53DD}, //871 #CJK UNIFIED IDEOGRAPH
+ {0x85B0, 0x53DE}, //872 #CJK UNIFIED IDEOGRAPH
+ {0x85B1, 0x53E1}, //873 #CJK UNIFIED IDEOGRAPH
+ {0x85B2, 0x53E2}, //874 #CJK UNIFIED IDEOGRAPH
+ {0x85B3, 0x53E7}, //875 #CJK UNIFIED IDEOGRAPH
+ {0x85B4, 0x53F4}, //876 #CJK UNIFIED IDEOGRAPH
+ {0x85B5, 0x53FA}, //877 #CJK UNIFIED IDEOGRAPH
+ {0x85B6, 0x53FE}, //878 #CJK UNIFIED IDEOGRAPH
+ {0x85B7, 0x53FF}, //879 #CJK UNIFIED IDEOGRAPH
+ {0x85B8, 0x5400}, //880 #CJK UNIFIED IDEOGRAPH
+ {0x85B9, 0x5402}, //881 #CJK UNIFIED IDEOGRAPH
+ {0x85BA, 0x5405}, //882 #CJK UNIFIED IDEOGRAPH
+ {0x85BB, 0x5407}, //883 #CJK UNIFIED IDEOGRAPH
+ {0x85BC, 0x540B}, //884 #CJK UNIFIED IDEOGRAPH
+ {0x85BD, 0x5414}, //885 #CJK UNIFIED IDEOGRAPH
+ {0x85BE, 0x5418}, //886 #CJK UNIFIED IDEOGRAPH
+ {0x85BF, 0x5419}, //887 #CJK UNIFIED IDEOGRAPH
+ {0x85C0, 0x541A}, //888 #CJK UNIFIED IDEOGRAPH
+ {0x85C1, 0x541C}, //889 #CJK UNIFIED IDEOGRAPH
+ {0x85C2, 0x5422}, //890 #CJK UNIFIED IDEOGRAPH
+ {0x85C3, 0x5424}, //891 #CJK UNIFIED IDEOGRAPH
+ {0x85C4, 0x5425}, //892 #CJK UNIFIED IDEOGRAPH
+ {0x85C5, 0x542A}, //893 #CJK UNIFIED IDEOGRAPH
+ {0x85C6, 0x5430}, //894 #CJK UNIFIED IDEOGRAPH
+ {0x85C7, 0x5433}, //895 #CJK UNIFIED IDEOGRAPH
+ {0x85C8, 0x5436}, //896 #CJK UNIFIED IDEOGRAPH
+ {0x85C9, 0x5437}, //897 #CJK UNIFIED IDEOGRAPH
+ {0x85CA, 0x543A}, //898 #CJK UNIFIED IDEOGRAPH
+ {0x85CB, 0x543D}, //899 #CJK UNIFIED IDEOGRAPH
+ {0x85CC, 0x543F}, //900 #CJK UNIFIED IDEOGRAPH
+ {0x85CD, 0x5441}, //901 #CJK UNIFIED IDEOGRAPH
+ {0x85CE, 0x5442}, //902 #CJK UNIFIED IDEOGRAPH
+ {0x85CF, 0x5444}, //903 #CJK UNIFIED IDEOGRAPH
+ {0x85D0, 0x5445}, //904 #CJK UNIFIED IDEOGRAPH
+ {0x85D1, 0x5447}, //905 #CJK UNIFIED IDEOGRAPH
+ {0x85D2, 0x5449}, //906 #CJK UNIFIED IDEOGRAPH
+ {0x85D3, 0x544C}, //907 #CJK UNIFIED IDEOGRAPH
+ {0x85D4, 0x544D}, //908 #CJK UNIFIED IDEOGRAPH
+ {0x85D5, 0x544E}, //909 #CJK UNIFIED IDEOGRAPH
+ {0x85D6, 0x544F}, //910 #CJK UNIFIED IDEOGRAPH
+ {0x85D7, 0x5451}, //911 #CJK UNIFIED IDEOGRAPH
+ {0x85D8, 0x545A}, //912 #CJK UNIFIED IDEOGRAPH
+ {0x85D9, 0x545D}, //913 #CJK UNIFIED IDEOGRAPH
+ {0x85DA, 0x545E}, //914 #CJK UNIFIED IDEOGRAPH
+ {0x85DB, 0x545F}, //915 #CJK UNIFIED IDEOGRAPH
+ {0x85DC, 0x5460}, //916 #CJK UNIFIED IDEOGRAPH
+ {0x85DD, 0x5461}, //917 #CJK UNIFIED IDEOGRAPH
+ {0x85DE, 0x5463}, //918 #CJK UNIFIED IDEOGRAPH
+ {0x85DF, 0x5465}, //919 #CJK UNIFIED IDEOGRAPH
+ {0x85E0, 0x5467}, //920 #CJK UNIFIED IDEOGRAPH
+ {0x85E1, 0x5469}, //921 #CJK UNIFIED IDEOGRAPH
+ {0x85E2, 0x546A}, //922 #CJK UNIFIED IDEOGRAPH
+ {0x85E3, 0x546B}, //923 #CJK UNIFIED IDEOGRAPH
+ {0x85E4, 0x546C}, //924 #CJK UNIFIED IDEOGRAPH
+ {0x85E5, 0x546D}, //925 #CJK UNIFIED IDEOGRAPH
+ {0x85E6, 0x546E}, //926 #CJK UNIFIED IDEOGRAPH
+ {0x85E7, 0x546F}, //927 #CJK UNIFIED IDEOGRAPH
+ {0x85E8, 0x5470}, //928 #CJK UNIFIED IDEOGRAPH
+ {0x85E9, 0x5474}, //929 #CJK UNIFIED IDEOGRAPH
+ {0x85EA, 0x5479}, //930 #CJK UNIFIED IDEOGRAPH
+ {0x85EB, 0x547A}, //931 #CJK UNIFIED IDEOGRAPH
+ {0x85EC, 0x547E}, //932 #CJK UNIFIED IDEOGRAPH
+ {0x85ED, 0x547F}, //933 #CJK UNIFIED IDEOGRAPH
+ {0x85EE, 0x5481}, //934 #CJK UNIFIED IDEOGRAPH
+ {0x85EF, 0x5483}, //935 #CJK UNIFIED IDEOGRAPH
+ {0x85F0, 0x5485}, //936 #CJK UNIFIED IDEOGRAPH
+ {0x85F1, 0x5487}, //937 #CJK UNIFIED IDEOGRAPH
+ {0x85F2, 0x5488}, //938 #CJK UNIFIED IDEOGRAPH
+ {0x85F3, 0x5489}, //939 #CJK UNIFIED IDEOGRAPH
+ {0x85F4, 0x548A}, //940 #CJK UNIFIED IDEOGRAPH
+ {0x85F5, 0x548D}, //941 #CJK UNIFIED IDEOGRAPH
+ {0x85F6, 0x5491}, //942 #CJK UNIFIED IDEOGRAPH
+ {0x85F7, 0x5493}, //943 #CJK UNIFIED IDEOGRAPH
+ {0x85F8, 0x5497}, //944 #CJK UNIFIED IDEOGRAPH
+ {0x85F9, 0x5498}, //945 #CJK UNIFIED IDEOGRAPH
+ {0x85FA, 0x549C}, //946 #CJK UNIFIED IDEOGRAPH
+ {0x85FB, 0x549E}, //947 #CJK UNIFIED IDEOGRAPH
+ {0x85FC, 0x549F}, //948 #CJK UNIFIED IDEOGRAPH
+ {0x85FD, 0x54A0}, //949 #CJK UNIFIED IDEOGRAPH
+ {0x85FE, 0x54A1}, //950 #CJK UNIFIED IDEOGRAPH
+ {0x8640, 0x54A2}, //951 #CJK UNIFIED IDEOGRAPH
+ {0x8641, 0x54A5}, //952 #CJK UNIFIED IDEOGRAPH
+ {0x8642, 0x54AE}, //953 #CJK UNIFIED IDEOGRAPH
+ {0x8643, 0x54B0}, //954 #CJK UNIFIED IDEOGRAPH
+ {0x8644, 0x54B2}, //955 #CJK UNIFIED IDEOGRAPH
+ {0x8645, 0x54B5}, //956 #CJK UNIFIED IDEOGRAPH
+ {0x8646, 0x54B6}, //957 #CJK UNIFIED IDEOGRAPH
+ {0x8647, 0x54B7}, //958 #CJK UNIFIED IDEOGRAPH
+ {0x8648, 0x54B9}, //959 #CJK UNIFIED IDEOGRAPH
+ {0x8649, 0x54BA}, //960 #CJK UNIFIED IDEOGRAPH
+ {0x864A, 0x54BC}, //961 #CJK UNIFIED IDEOGRAPH
+ {0x864B, 0x54BE}, //962 #CJK UNIFIED IDEOGRAPH
+ {0x864C, 0x54C3}, //963 #CJK UNIFIED IDEOGRAPH
+ {0x864D, 0x54C5}, //964 #CJK UNIFIED IDEOGRAPH
+ {0x864E, 0x54CA}, //965 #CJK UNIFIED IDEOGRAPH
+ {0x864F, 0x54CB}, //966 #CJK UNIFIED IDEOGRAPH
+ {0x8650, 0x54D6}, //967 #CJK UNIFIED IDEOGRAPH
+ {0x8651, 0x54D8}, //968 #CJK UNIFIED IDEOGRAPH
+ {0x8652, 0x54DB}, //969 #CJK UNIFIED IDEOGRAPH
+ {0x8653, 0x54E0}, //970 #CJK UNIFIED IDEOGRAPH
+ {0x8654, 0x54E1}, //971 #CJK UNIFIED IDEOGRAPH
+ {0x8655, 0x54E2}, //972 #CJK UNIFIED IDEOGRAPH
+ {0x8656, 0x54E3}, //973 #CJK UNIFIED IDEOGRAPH
+ {0x8657, 0x54E4}, //974 #CJK UNIFIED IDEOGRAPH
+ {0x8658, 0x54EB}, //975 #CJK UNIFIED IDEOGRAPH
+ {0x8659, 0x54EC}, //976 #CJK UNIFIED IDEOGRAPH
+ {0x865A, 0x54EF}, //977 #CJK UNIFIED IDEOGRAPH
+ {0x865B, 0x54F0}, //978 #CJK UNIFIED IDEOGRAPH
+ {0x865C, 0x54F1}, //979 #CJK UNIFIED IDEOGRAPH
+ {0x865D, 0x54F4}, //980 #CJK UNIFIED IDEOGRAPH
+ {0x865E, 0x54F5}, //981 #CJK UNIFIED IDEOGRAPH
+ {0x865F, 0x54F6}, //982 #CJK UNIFIED IDEOGRAPH
+ {0x8660, 0x54F7}, //983 #CJK UNIFIED IDEOGRAPH
+ {0x8661, 0x54F8}, //984 #CJK UNIFIED IDEOGRAPH
+ {0x8662, 0x54F9}, //985 #CJK UNIFIED IDEOGRAPH
+ {0x8663, 0x54FB}, //986 #CJK UNIFIED IDEOGRAPH
+ {0x8664, 0x54FE}, //987 #CJK UNIFIED IDEOGRAPH
+ {0x8665, 0x5500}, //988 #CJK UNIFIED IDEOGRAPH
+ {0x8666, 0x5502}, //989 #CJK UNIFIED IDEOGRAPH
+ {0x8667, 0x5503}, //990 #CJK UNIFIED IDEOGRAPH
+ {0x8668, 0x5504}, //991 #CJK UNIFIED IDEOGRAPH
+ {0x8669, 0x5505}, //992 #CJK UNIFIED IDEOGRAPH
+ {0x866A, 0x5508}, //993 #CJK UNIFIED IDEOGRAPH
+ {0x866B, 0x550A}, //994 #CJK UNIFIED IDEOGRAPH
+ {0x866C, 0x550B}, //995 #CJK UNIFIED IDEOGRAPH
+ {0x866D, 0x550C}, //996 #CJK UNIFIED IDEOGRAPH
+ {0x866E, 0x550D}, //997 #CJK UNIFIED IDEOGRAPH
+ {0x866F, 0x550E}, //998 #CJK UNIFIED IDEOGRAPH
+ {0x8670, 0x5512}, //999 #CJK UNIFIED IDEOGRAPH
+ {0x8671, 0x5513}, //1000 #CJK UNIFIED IDEOGRAPH
+ {0x8672, 0x5515}, //1001 #CJK UNIFIED IDEOGRAPH
+ {0x8673, 0x5516}, //1002 #CJK UNIFIED IDEOGRAPH
+ {0x8674, 0x5517}, //1003 #CJK UNIFIED IDEOGRAPH
+ {0x8675, 0x5518}, //1004 #CJK UNIFIED IDEOGRAPH
+ {0x8676, 0x5519}, //1005 #CJK UNIFIED IDEOGRAPH
+ {0x8677, 0x551A}, //1006 #CJK UNIFIED IDEOGRAPH
+ {0x8678, 0x551C}, //1007 #CJK UNIFIED IDEOGRAPH
+ {0x8679, 0x551D}, //1008 #CJK UNIFIED IDEOGRAPH
+ {0x867A, 0x551E}, //1009 #CJK UNIFIED IDEOGRAPH
+ {0x867B, 0x551F}, //1010 #CJK UNIFIED IDEOGRAPH
+ {0x867C, 0x5521}, //1011 #CJK UNIFIED IDEOGRAPH
+ {0x867D, 0x5525}, //1012 #CJK UNIFIED IDEOGRAPH
+ {0x867E, 0x5526}, //1013 #CJK UNIFIED IDEOGRAPH
+ {0x8680, 0x5528}, //1014 #CJK UNIFIED IDEOGRAPH
+ {0x8681, 0x5529}, //1015 #CJK UNIFIED IDEOGRAPH
+ {0x8682, 0x552B}, //1016 #CJK UNIFIED IDEOGRAPH
+ {0x8683, 0x552D}, //1017 #CJK UNIFIED IDEOGRAPH
+ {0x8684, 0x5532}, //1018 #CJK UNIFIED IDEOGRAPH
+ {0x8685, 0x5534}, //1019 #CJK UNIFIED IDEOGRAPH
+ {0x8686, 0x5535}, //1020 #CJK UNIFIED IDEOGRAPH
+ {0x8687, 0x5536}, //1021 #CJK UNIFIED IDEOGRAPH
+ {0x8688, 0x5538}, //1022 #CJK UNIFIED IDEOGRAPH
+ {0x8689, 0x5539}, //1023 #CJK UNIFIED IDEOGRAPH
+ {0x868A, 0x553A}, //1024 #CJK UNIFIED IDEOGRAPH
+ {0x868B, 0x553B}, //1025 #CJK UNIFIED IDEOGRAPH
+ {0x868C, 0x553D}, //1026 #CJK UNIFIED IDEOGRAPH
+ {0x868D, 0x5540}, //1027 #CJK UNIFIED IDEOGRAPH
+ {0x868E, 0x5542}, //1028 #CJK UNIFIED IDEOGRAPH
+ {0x868F, 0x5545}, //1029 #CJK UNIFIED IDEOGRAPH
+ {0x8690, 0x5547}, //1030 #CJK UNIFIED IDEOGRAPH
+ {0x8691, 0x5548}, //1031 #CJK UNIFIED IDEOGRAPH
+ {0x8692, 0x554B}, //1032 #CJK UNIFIED IDEOGRAPH
+ {0x8693, 0x554C}, //1033 #CJK UNIFIED IDEOGRAPH
+ {0x8694, 0x554D}, //1034 #CJK UNIFIED IDEOGRAPH
+ {0x8695, 0x554E}, //1035 #CJK UNIFIED IDEOGRAPH
+ {0x8696, 0x554F}, //1036 #CJK UNIFIED IDEOGRAPH
+ {0x8697, 0x5551}, //1037 #CJK UNIFIED IDEOGRAPH
+ {0x8698, 0x5552}, //1038 #CJK UNIFIED IDEOGRAPH
+ {0x8699, 0x5553}, //1039 #CJK UNIFIED IDEOGRAPH
+ {0x869A, 0x5554}, //1040 #CJK UNIFIED IDEOGRAPH
+ {0x869B, 0x5557}, //1041 #CJK UNIFIED IDEOGRAPH
+ {0x869C, 0x5558}, //1042 #CJK UNIFIED IDEOGRAPH
+ {0x869D, 0x5559}, //1043 #CJK UNIFIED IDEOGRAPH
+ {0x869E, 0x555A}, //1044 #CJK UNIFIED IDEOGRAPH
+ {0x869F, 0x555B}, //1045 #CJK UNIFIED IDEOGRAPH
+ {0x86A0, 0x555D}, //1046 #CJK UNIFIED IDEOGRAPH
+ {0x86A1, 0x555E}, //1047 #CJK UNIFIED IDEOGRAPH
+ {0x86A2, 0x555F}, //1048 #CJK UNIFIED IDEOGRAPH
+ {0x86A3, 0x5560}, //1049 #CJK UNIFIED IDEOGRAPH
+ {0x86A4, 0x5562}, //1050 #CJK UNIFIED IDEOGRAPH
+ {0x86A5, 0x5563}, //1051 #CJK UNIFIED IDEOGRAPH
+ {0x86A6, 0x5568}, //1052 #CJK UNIFIED IDEOGRAPH
+ {0x86A7, 0x5569}, //1053 #CJK UNIFIED IDEOGRAPH
+ {0x86A8, 0x556B}, //1054 #CJK UNIFIED IDEOGRAPH
+ {0x86A9, 0x556F}, //1055 #CJK UNIFIED IDEOGRAPH
+ {0x86AA, 0x5570}, //1056 #CJK UNIFIED IDEOGRAPH
+ {0x86AB, 0x5571}, //1057 #CJK UNIFIED IDEOGRAPH
+ {0x86AC, 0x5572}, //1058 #CJK UNIFIED IDEOGRAPH
+ {0x86AD, 0x5573}, //1059 #CJK UNIFIED IDEOGRAPH
+ {0x86AE, 0x5574}, //1060 #CJK UNIFIED IDEOGRAPH
+ {0x86AF, 0x5579}, //1061 #CJK UNIFIED IDEOGRAPH
+ {0x86B0, 0x557A}, //1062 #CJK UNIFIED IDEOGRAPH
+ {0x86B1, 0x557D}, //1063 #CJK UNIFIED IDEOGRAPH
+ {0x86B2, 0x557F}, //1064 #CJK UNIFIED IDEOGRAPH
+ {0x86B3, 0x5585}, //1065 #CJK UNIFIED IDEOGRAPH
+ {0x86B4, 0x5586}, //1066 #CJK UNIFIED IDEOGRAPH
+ {0x86B5, 0x558C}, //1067 #CJK UNIFIED IDEOGRAPH
+ {0x86B6, 0x558D}, //1068 #CJK UNIFIED IDEOGRAPH
+ {0x86B7, 0x558E}, //1069 #CJK UNIFIED IDEOGRAPH
+ {0x86B8, 0x5590}, //1070 #CJK UNIFIED IDEOGRAPH
+ {0x86B9, 0x5592}, //1071 #CJK UNIFIED IDEOGRAPH
+ {0x86BA, 0x5593}, //1072 #CJK UNIFIED IDEOGRAPH
+ {0x86BB, 0x5595}, //1073 #CJK UNIFIED IDEOGRAPH
+ {0x86BC, 0x5596}, //1074 #CJK UNIFIED IDEOGRAPH
+ {0x86BD, 0x5597}, //1075 #CJK UNIFIED IDEOGRAPH
+ {0x86BE, 0x559A}, //1076 #CJK UNIFIED IDEOGRAPH
+ {0x86BF, 0x559B}, //1077 #CJK UNIFIED IDEOGRAPH
+ {0x86C0, 0x559E}, //1078 #CJK UNIFIED IDEOGRAPH
+ {0x86C1, 0x55A0}, //1079 #CJK UNIFIED IDEOGRAPH
+ {0x86C2, 0x55A1}, //1080 #CJK UNIFIED IDEOGRAPH
+ {0x86C3, 0x55A2}, //1081 #CJK UNIFIED IDEOGRAPH
+ {0x86C4, 0x55A3}, //1082 #CJK UNIFIED IDEOGRAPH
+ {0x86C5, 0x55A4}, //1083 #CJK UNIFIED IDEOGRAPH
+ {0x86C6, 0x55A5}, //1084 #CJK UNIFIED IDEOGRAPH
+ {0x86C7, 0x55A6}, //1085 #CJK UNIFIED IDEOGRAPH
+ {0x86C8, 0x55A8}, //1086 #CJK UNIFIED IDEOGRAPH
+ {0x86C9, 0x55A9}, //1087 #CJK UNIFIED IDEOGRAPH
+ {0x86CA, 0x55AA}, //1088 #CJK UNIFIED IDEOGRAPH
+ {0x86CB, 0x55AB}, //1089 #CJK UNIFIED IDEOGRAPH
+ {0x86CC, 0x55AC}, //1090 #CJK UNIFIED IDEOGRAPH
+ {0x86CD, 0x55AD}, //1091 #CJK UNIFIED IDEOGRAPH
+ {0x86CE, 0x55AE}, //1092 #CJK UNIFIED IDEOGRAPH
+ {0x86CF, 0x55AF}, //1093 #CJK UNIFIED IDEOGRAPH
+ {0x86D0, 0x55B0}, //1094 #CJK UNIFIED IDEOGRAPH
+ {0x86D1, 0x55B2}, //1095 #CJK UNIFIED IDEOGRAPH
+ {0x86D2, 0x55B4}, //1096 #CJK UNIFIED IDEOGRAPH
+ {0x86D3, 0x55B6}, //1097 #CJK UNIFIED IDEOGRAPH
+ {0x86D4, 0x55B8}, //1098 #CJK UNIFIED IDEOGRAPH
+ {0x86D5, 0x55BA}, //1099 #CJK UNIFIED IDEOGRAPH
+ {0x86D6, 0x55BC}, //1100 #CJK UNIFIED IDEOGRAPH
+ {0x86D7, 0x55BF}, //1101 #CJK UNIFIED IDEOGRAPH
+ {0x86D8, 0x55C0}, //1102 #CJK UNIFIED IDEOGRAPH
+ {0x86D9, 0x55C1}, //1103 #CJK UNIFIED IDEOGRAPH
+ {0x86DA, 0x55C2}, //1104 #CJK UNIFIED IDEOGRAPH
+ {0x86DB, 0x55C3}, //1105 #CJK UNIFIED IDEOGRAPH
+ {0x86DC, 0x55C6}, //1106 #CJK UNIFIED IDEOGRAPH
+ {0x86DD, 0x55C7}, //1107 #CJK UNIFIED IDEOGRAPH
+ {0x86DE, 0x55C8}, //1108 #CJK UNIFIED IDEOGRAPH
+ {0x86DF, 0x55CA}, //1109 #CJK UNIFIED IDEOGRAPH
+ {0x86E0, 0x55CB}, //1110 #CJK UNIFIED IDEOGRAPH
+ {0x86E1, 0x55CE}, //1111 #CJK UNIFIED IDEOGRAPH
+ {0x86E2, 0x55CF}, //1112 #CJK UNIFIED IDEOGRAPH
+ {0x86E3, 0x55D0}, //1113 #CJK UNIFIED IDEOGRAPH
+ {0x86E4, 0x55D5}, //1114 #CJK UNIFIED IDEOGRAPH
+ {0x86E5, 0x55D7}, //1115 #CJK UNIFIED IDEOGRAPH
+ {0x86E6, 0x55D8}, //1116 #CJK UNIFIED IDEOGRAPH
+ {0x86E7, 0x55D9}, //1117 #CJK UNIFIED IDEOGRAPH
+ {0x86E8, 0x55DA}, //1118 #CJK UNIFIED IDEOGRAPH
+ {0x86E9, 0x55DB}, //1119 #CJK UNIFIED IDEOGRAPH
+ {0x86EA, 0x55DE}, //1120 #CJK UNIFIED IDEOGRAPH
+ {0x86EB, 0x55E0}, //1121 #CJK UNIFIED IDEOGRAPH
+ {0x86EC, 0x55E2}, //1122 #CJK UNIFIED IDEOGRAPH
+ {0x86ED, 0x55E7}, //1123 #CJK UNIFIED IDEOGRAPH
+ {0x86EE, 0x55E9}, //1124 #CJK UNIFIED IDEOGRAPH
+ {0x86EF, 0x55ED}, //1125 #CJK UNIFIED IDEOGRAPH
+ {0x86F0, 0x55EE}, //1126 #CJK UNIFIED IDEOGRAPH
+ {0x86F1, 0x55F0}, //1127 #CJK UNIFIED IDEOGRAPH
+ {0x86F2, 0x55F1}, //1128 #CJK UNIFIED IDEOGRAPH
+ {0x86F3, 0x55F4}, //1129 #CJK UNIFIED IDEOGRAPH
+ {0x86F4, 0x55F6}, //1130 #CJK UNIFIED IDEOGRAPH
+ {0x86F5, 0x55F8}, //1131 #CJK UNIFIED IDEOGRAPH
+ {0x86F6, 0x55F9}, //1132 #CJK UNIFIED IDEOGRAPH
+ {0x86F7, 0x55FA}, //1133 #CJK UNIFIED IDEOGRAPH
+ {0x86F8, 0x55FB}, //1134 #CJK UNIFIED IDEOGRAPH
+ {0x86F9, 0x55FC}, //1135 #CJK UNIFIED IDEOGRAPH
+ {0x86FA, 0x55FF}, //1136 #CJK UNIFIED IDEOGRAPH
+ {0x86FB, 0x5602}, //1137 #CJK UNIFIED IDEOGRAPH
+ {0x86FC, 0x5603}, //1138 #CJK UNIFIED IDEOGRAPH
+ {0x86FD, 0x5604}, //1139 #CJK UNIFIED IDEOGRAPH
+ {0x86FE, 0x5605}, //1140 #CJK UNIFIED IDEOGRAPH
+ {0x8740, 0x5606}, //1141 #CJK UNIFIED IDEOGRAPH
+ {0x8741, 0x5607}, //1142 #CJK UNIFIED IDEOGRAPH
+ {0x8742, 0x560A}, //1143 #CJK UNIFIED IDEOGRAPH
+ {0x8743, 0x560B}, //1144 #CJK UNIFIED IDEOGRAPH
+ {0x8744, 0x560D}, //1145 #CJK UNIFIED IDEOGRAPH
+ {0x8745, 0x5610}, //1146 #CJK UNIFIED IDEOGRAPH
+ {0x8746, 0x5611}, //1147 #CJK UNIFIED IDEOGRAPH
+ {0x8747, 0x5612}, //1148 #CJK UNIFIED IDEOGRAPH
+ {0x8748, 0x5613}, //1149 #CJK UNIFIED IDEOGRAPH
+ {0x8749, 0x5614}, //1150 #CJK UNIFIED IDEOGRAPH
+ {0x874A, 0x5615}, //1151 #CJK UNIFIED IDEOGRAPH
+ {0x874B, 0x5616}, //1152 #CJK UNIFIED IDEOGRAPH
+ {0x874C, 0x5617}, //1153 #CJK UNIFIED IDEOGRAPH
+ {0x874D, 0x5619}, //1154 #CJK UNIFIED IDEOGRAPH
+ {0x874E, 0x561A}, //1155 #CJK UNIFIED IDEOGRAPH
+ {0x874F, 0x561C}, //1156 #CJK UNIFIED IDEOGRAPH
+ {0x8750, 0x561D}, //1157 #CJK UNIFIED IDEOGRAPH
+ {0x8751, 0x5620}, //1158 #CJK UNIFIED IDEOGRAPH
+ {0x8752, 0x5621}, //1159 #CJK UNIFIED IDEOGRAPH
+ {0x8753, 0x5622}, //1160 #CJK UNIFIED IDEOGRAPH
+ {0x8754, 0x5625}, //1161 #CJK UNIFIED IDEOGRAPH
+ {0x8755, 0x5626}, //1162 #CJK UNIFIED IDEOGRAPH
+ {0x8756, 0x5628}, //1163 #CJK UNIFIED IDEOGRAPH
+ {0x8757, 0x5629}, //1164 #CJK UNIFIED IDEOGRAPH
+ {0x8758, 0x562A}, //1165 #CJK UNIFIED IDEOGRAPH
+ {0x8759, 0x562B}, //1166 #CJK UNIFIED IDEOGRAPH
+ {0x875A, 0x562E}, //1167 #CJK UNIFIED IDEOGRAPH
+ {0x875B, 0x562F}, //1168 #CJK UNIFIED IDEOGRAPH
+ {0x875C, 0x5630}, //1169 #CJK UNIFIED IDEOGRAPH
+ {0x875D, 0x5633}, //1170 #CJK UNIFIED IDEOGRAPH
+ {0x875E, 0x5635}, //1171 #CJK UNIFIED IDEOGRAPH
+ {0x875F, 0x5637}, //1172 #CJK UNIFIED IDEOGRAPH
+ {0x8760, 0x5638}, //1173 #CJK UNIFIED IDEOGRAPH
+ {0x8761, 0x563A}, //1174 #CJK UNIFIED IDEOGRAPH
+ {0x8762, 0x563C}, //1175 #CJK UNIFIED IDEOGRAPH
+ {0x8763, 0x563D}, //1176 #CJK UNIFIED IDEOGRAPH
+ {0x8764, 0x563E}, //1177 #CJK UNIFIED IDEOGRAPH
+ {0x8765, 0x5640}, //1178 #CJK UNIFIED IDEOGRAPH
+ {0x8766, 0x5641}, //1179 #CJK UNIFIED IDEOGRAPH
+ {0x8767, 0x5642}, //1180 #CJK UNIFIED IDEOGRAPH
+ {0x8768, 0x5643}, //1181 #CJK UNIFIED IDEOGRAPH
+ {0x8769, 0x5644}, //1182 #CJK UNIFIED IDEOGRAPH
+ {0x876A, 0x5645}, //1183 #CJK UNIFIED IDEOGRAPH
+ {0x876B, 0x5646}, //1184 #CJK UNIFIED IDEOGRAPH
+ {0x876C, 0x5647}, //1185 #CJK UNIFIED IDEOGRAPH
+ {0x876D, 0x5648}, //1186 #CJK UNIFIED IDEOGRAPH
+ {0x876E, 0x5649}, //1187 #CJK UNIFIED IDEOGRAPH
+ {0x876F, 0x564A}, //1188 #CJK UNIFIED IDEOGRAPH
+ {0x8770, 0x564B}, //1189 #CJK UNIFIED IDEOGRAPH
+ {0x8771, 0x564F}, //1190 #CJK UNIFIED IDEOGRAPH
+ {0x8772, 0x5650}, //1191 #CJK UNIFIED IDEOGRAPH
+ {0x8773, 0x5651}, //1192 #CJK UNIFIED IDEOGRAPH
+ {0x8774, 0x5652}, //1193 #CJK UNIFIED IDEOGRAPH
+ {0x8775, 0x5653}, //1194 #CJK UNIFIED IDEOGRAPH
+ {0x8776, 0x5655}, //1195 #CJK UNIFIED IDEOGRAPH
+ {0x8777, 0x5656}, //1196 #CJK UNIFIED IDEOGRAPH
+ {0x8778, 0x565A}, //1197 #CJK UNIFIED IDEOGRAPH
+ {0x8779, 0x565B}, //1198 #CJK UNIFIED IDEOGRAPH
+ {0x877A, 0x565D}, //1199 #CJK UNIFIED IDEOGRAPH
+ {0x877B, 0x565E}, //1200 #CJK UNIFIED IDEOGRAPH
+ {0x877C, 0x565F}, //1201 #CJK UNIFIED IDEOGRAPH
+ {0x877D, 0x5660}, //1202 #CJK UNIFIED IDEOGRAPH
+ {0x877E, 0x5661}, //1203 #CJK UNIFIED IDEOGRAPH
+ {0x8780, 0x5663}, //1204 #CJK UNIFIED IDEOGRAPH
+ {0x8781, 0x5665}, //1205 #CJK UNIFIED IDEOGRAPH
+ {0x8782, 0x5666}, //1206 #CJK UNIFIED IDEOGRAPH
+ {0x8783, 0x5667}, //1207 #CJK UNIFIED IDEOGRAPH
+ {0x8784, 0x566D}, //1208 #CJK UNIFIED IDEOGRAPH
+ {0x8785, 0x566E}, //1209 #CJK UNIFIED IDEOGRAPH
+ {0x8786, 0x566F}, //1210 #CJK UNIFIED IDEOGRAPH
+ {0x8787, 0x5670}, //1211 #CJK UNIFIED IDEOGRAPH
+ {0x8788, 0x5672}, //1212 #CJK UNIFIED IDEOGRAPH
+ {0x8789, 0x5673}, //1213 #CJK UNIFIED IDEOGRAPH
+ {0x878A, 0x5674}, //1214 #CJK UNIFIED IDEOGRAPH
+ {0x878B, 0x5675}, //1215 #CJK UNIFIED IDEOGRAPH
+ {0x878C, 0x5677}, //1216 #CJK UNIFIED IDEOGRAPH
+ {0x878D, 0x5678}, //1217 #CJK UNIFIED IDEOGRAPH
+ {0x878E, 0x5679}, //1218 #CJK UNIFIED IDEOGRAPH
+ {0x878F, 0x567A}, //1219 #CJK UNIFIED IDEOGRAPH
+ {0x8790, 0x567D}, //1220 #CJK UNIFIED IDEOGRAPH
+ {0x8791, 0x567E}, //1221 #CJK UNIFIED IDEOGRAPH
+ {0x8792, 0x567F}, //1222 #CJK UNIFIED IDEOGRAPH
+ {0x8793, 0x5680}, //1223 #CJK UNIFIED IDEOGRAPH
+ {0x8794, 0x5681}, //1224 #CJK UNIFIED IDEOGRAPH
+ {0x8795, 0x5682}, //1225 #CJK UNIFIED IDEOGRAPH
+ {0x8796, 0x5683}, //1226 #CJK UNIFIED IDEOGRAPH
+ {0x8797, 0x5684}, //1227 #CJK UNIFIED IDEOGRAPH
+ {0x8798, 0x5687}, //1228 #CJK UNIFIED IDEOGRAPH
+ {0x8799, 0x5688}, //1229 #CJK UNIFIED IDEOGRAPH
+ {0x879A, 0x5689}, //1230 #CJK UNIFIED IDEOGRAPH
+ {0x879B, 0x568A}, //1231 #CJK UNIFIED IDEOGRAPH
+ {0x879C, 0x568B}, //1232 #CJK UNIFIED IDEOGRAPH
+ {0x879D, 0x568C}, //1233 #CJK UNIFIED IDEOGRAPH
+ {0x879E, 0x568D}, //1234 #CJK UNIFIED IDEOGRAPH
+ {0x879F, 0x5690}, //1235 #CJK UNIFIED IDEOGRAPH
+ {0x87A0, 0x5691}, //1236 #CJK UNIFIED IDEOGRAPH
+ {0x87A1, 0x5692}, //1237 #CJK UNIFIED IDEOGRAPH
+ {0x87A2, 0x5694}, //1238 #CJK UNIFIED IDEOGRAPH
+ {0x87A3, 0x5695}, //1239 #CJK UNIFIED IDEOGRAPH
+ {0x87A4, 0x5696}, //1240 #CJK UNIFIED IDEOGRAPH
+ {0x87A5, 0x5697}, //1241 #CJK UNIFIED IDEOGRAPH
+ {0x87A6, 0x5698}, //1242 #CJK UNIFIED IDEOGRAPH
+ {0x87A7, 0x5699}, //1243 #CJK UNIFIED IDEOGRAPH
+ {0x87A8, 0x569A}, //1244 #CJK UNIFIED IDEOGRAPH
+ {0x87A9, 0x569B}, //1245 #CJK UNIFIED IDEOGRAPH
+ {0x87AA, 0x569C}, //1246 #CJK UNIFIED IDEOGRAPH
+ {0x87AB, 0x569D}, //1247 #CJK UNIFIED IDEOGRAPH
+ {0x87AC, 0x569E}, //1248 #CJK UNIFIED IDEOGRAPH
+ {0x87AD, 0x569F}, //1249 #CJK UNIFIED IDEOGRAPH
+ {0x87AE, 0x56A0}, //1250 #CJK UNIFIED IDEOGRAPH
+ {0x87AF, 0x56A1}, //1251 #CJK UNIFIED IDEOGRAPH
+ {0x87B0, 0x56A2}, //1252 #CJK UNIFIED IDEOGRAPH
+ {0x87B1, 0x56A4}, //1253 #CJK UNIFIED IDEOGRAPH
+ {0x87B2, 0x56A5}, //1254 #CJK UNIFIED IDEOGRAPH
+ {0x87B3, 0x56A6}, //1255 #CJK UNIFIED IDEOGRAPH
+ {0x87B4, 0x56A7}, //1256 #CJK UNIFIED IDEOGRAPH
+ {0x87B5, 0x56A8}, //1257 #CJK UNIFIED IDEOGRAPH
+ {0x87B6, 0x56A9}, //1258 #CJK UNIFIED IDEOGRAPH
+ {0x87B7, 0x56AA}, //1259 #CJK UNIFIED IDEOGRAPH
+ {0x87B8, 0x56AB}, //1260 #CJK UNIFIED IDEOGRAPH
+ {0x87B9, 0x56AC}, //1261 #CJK UNIFIED IDEOGRAPH
+ {0x87BA, 0x56AD}, //1262 #CJK UNIFIED IDEOGRAPH
+ {0x87BB, 0x56AE}, //1263 #CJK UNIFIED IDEOGRAPH
+ {0x87BC, 0x56B0}, //1264 #CJK UNIFIED IDEOGRAPH
+ {0x87BD, 0x56B1}, //1265 #CJK UNIFIED IDEOGRAPH
+ {0x87BE, 0x56B2}, //1266 #CJK UNIFIED IDEOGRAPH
+ {0x87BF, 0x56B3}, //1267 #CJK UNIFIED IDEOGRAPH
+ {0x87C0, 0x56B4}, //1268 #CJK UNIFIED IDEOGRAPH
+ {0x87C1, 0x56B5}, //1269 #CJK UNIFIED IDEOGRAPH
+ {0x87C2, 0x56B6}, //1270 #CJK UNIFIED IDEOGRAPH
+ {0x87C3, 0x56B8}, //1271 #CJK UNIFIED IDEOGRAPH
+ {0x87C4, 0x56B9}, //1272 #CJK UNIFIED IDEOGRAPH
+ {0x87C5, 0x56BA}, //1273 #CJK UNIFIED IDEOGRAPH
+ {0x87C6, 0x56BB}, //1274 #CJK UNIFIED IDEOGRAPH
+ {0x87C7, 0x56BD}, //1275 #CJK UNIFIED IDEOGRAPH
+ {0x87C8, 0x56BE}, //1276 #CJK UNIFIED IDEOGRAPH
+ {0x87C9, 0x56BF}, //1277 #CJK UNIFIED IDEOGRAPH
+ {0x87CA, 0x56C0}, //1278 #CJK UNIFIED IDEOGRAPH
+ {0x87CB, 0x56C1}, //1279 #CJK UNIFIED IDEOGRAPH
+ {0x87CC, 0x56C2}, //1280 #CJK UNIFIED IDEOGRAPH
+ {0x87CD, 0x56C3}, //1281 #CJK UNIFIED IDEOGRAPH
+ {0x87CE, 0x56C4}, //1282 #CJK UNIFIED IDEOGRAPH
+ {0x87CF, 0x56C5}, //1283 #CJK UNIFIED IDEOGRAPH
+ {0x87D0, 0x56C6}, //1284 #CJK UNIFIED IDEOGRAPH
+ {0x87D1, 0x56C7}, //1285 #CJK UNIFIED IDEOGRAPH
+ {0x87D2, 0x56C8}, //1286 #CJK UNIFIED IDEOGRAPH
+ {0x87D3, 0x56C9}, //1287 #CJK UNIFIED IDEOGRAPH
+ {0x87D4, 0x56CB}, //1288 #CJK UNIFIED IDEOGRAPH
+ {0x87D5, 0x56CC}, //1289 #CJK UNIFIED IDEOGRAPH
+ {0x87D6, 0x56CD}, //1290 #CJK UNIFIED IDEOGRAPH
+ {0x87D7, 0x56CE}, //1291 #CJK UNIFIED IDEOGRAPH
+ {0x87D8, 0x56CF}, //1292 #CJK UNIFIED IDEOGRAPH
+ {0x87D9, 0x56D0}, //1293 #CJK UNIFIED IDEOGRAPH
+ {0x87DA, 0x56D1}, //1294 #CJK UNIFIED IDEOGRAPH
+ {0x87DB, 0x56D2}, //1295 #CJK UNIFIED IDEOGRAPH
+ {0x87DC, 0x56D3}, //1296 #CJK UNIFIED IDEOGRAPH
+ {0x87DD, 0x56D5}, //1297 #CJK UNIFIED IDEOGRAPH
+ {0x87DE, 0x56D6}, //1298 #CJK UNIFIED IDEOGRAPH
+ {0x87DF, 0x56D8}, //1299 #CJK UNIFIED IDEOGRAPH
+ {0x87E0, 0x56D9}, //1300 #CJK UNIFIED IDEOGRAPH
+ {0x87E1, 0x56DC}, //1301 #CJK UNIFIED IDEOGRAPH
+ {0x87E2, 0x56E3}, //1302 #CJK UNIFIED IDEOGRAPH
+ {0x87E3, 0x56E5}, //1303 #CJK UNIFIED IDEOGRAPH
+ {0x87E4, 0x56E6}, //1304 #CJK UNIFIED IDEOGRAPH
+ {0x87E5, 0x56E7}, //1305 #CJK UNIFIED IDEOGRAPH
+ {0x87E6, 0x56E8}, //1306 #CJK UNIFIED IDEOGRAPH
+ {0x87E7, 0x56E9}, //1307 #CJK UNIFIED IDEOGRAPH
+ {0x87E8, 0x56EA}, //1308 #CJK UNIFIED IDEOGRAPH
+ {0x87E9, 0x56EC}, //1309 #CJK UNIFIED IDEOGRAPH
+ {0x87EA, 0x56EE}, //1310 #CJK UNIFIED IDEOGRAPH
+ {0x87EB, 0x56EF}, //1311 #CJK UNIFIED IDEOGRAPH
+ {0x87EC, 0x56F2}, //1312 #CJK UNIFIED IDEOGRAPH
+ {0x87ED, 0x56F3}, //1313 #CJK UNIFIED IDEOGRAPH
+ {0x87EE, 0x56F6}, //1314 #CJK UNIFIED IDEOGRAPH
+ {0x87EF, 0x56F7}, //1315 #CJK UNIFIED IDEOGRAPH
+ {0x87F0, 0x56F8}, //1316 #CJK UNIFIED IDEOGRAPH
+ {0x87F1, 0x56FB}, //1317 #CJK UNIFIED IDEOGRAPH
+ {0x87F2, 0x56FC}, //1318 #CJK UNIFIED IDEOGRAPH
+ {0x87F3, 0x5700}, //1319 #CJK UNIFIED IDEOGRAPH
+ {0x87F4, 0x5701}, //1320 #CJK UNIFIED IDEOGRAPH
+ {0x87F5, 0x5702}, //1321 #CJK UNIFIED IDEOGRAPH
+ {0x87F6, 0x5705}, //1322 #CJK UNIFIED IDEOGRAPH
+ {0x87F7, 0x5707}, //1323 #CJK UNIFIED IDEOGRAPH
+ {0x87F8, 0x570B}, //1324 #CJK UNIFIED IDEOGRAPH
+ {0x87F9, 0x570C}, //1325 #CJK UNIFIED IDEOGRAPH
+ {0x87FA, 0x570D}, //1326 #CJK UNIFIED IDEOGRAPH
+ {0x87FB, 0x570E}, //1327 #CJK UNIFIED IDEOGRAPH
+ {0x87FC, 0x570F}, //1328 #CJK UNIFIED IDEOGRAPH
+ {0x87FD, 0x5710}, //1329 #CJK UNIFIED IDEOGRAPH
+ {0x87FE, 0x5711}, //1330 #CJK UNIFIED IDEOGRAPH
+ {0x8840, 0x5712}, //1331 #CJK UNIFIED IDEOGRAPH
+ {0x8841, 0x5713}, //1332 #CJK UNIFIED IDEOGRAPH
+ {0x8842, 0x5714}, //1333 #CJK UNIFIED IDEOGRAPH
+ {0x8843, 0x5715}, //1334 #CJK UNIFIED IDEOGRAPH
+ {0x8844, 0x5716}, //1335 #CJK UNIFIED IDEOGRAPH
+ {0x8845, 0x5717}, //1336 #CJK UNIFIED IDEOGRAPH
+ {0x8846, 0x5718}, //1337 #CJK UNIFIED IDEOGRAPH
+ {0x8847, 0x5719}, //1338 #CJK UNIFIED IDEOGRAPH
+ {0x8848, 0x571A}, //1339 #CJK UNIFIED IDEOGRAPH
+ {0x8849, 0x571B}, //1340 #CJK UNIFIED IDEOGRAPH
+ {0x884A, 0x571D}, //1341 #CJK UNIFIED IDEOGRAPH
+ {0x884B, 0x571E}, //1342 #CJK UNIFIED IDEOGRAPH
+ {0x884C, 0x5720}, //1343 #CJK UNIFIED IDEOGRAPH
+ {0x884D, 0x5721}, //1344 #CJK UNIFIED IDEOGRAPH
+ {0x884E, 0x5722}, //1345 #CJK UNIFIED IDEOGRAPH
+ {0x884F, 0x5724}, //1346 #CJK UNIFIED IDEOGRAPH
+ {0x8850, 0x5725}, //1347 #CJK UNIFIED IDEOGRAPH
+ {0x8851, 0x5726}, //1348 #CJK UNIFIED IDEOGRAPH
+ {0x8852, 0x5727}, //1349 #CJK UNIFIED IDEOGRAPH
+ {0x8853, 0x572B}, //1350 #CJK UNIFIED IDEOGRAPH
+ {0x8854, 0x5731}, //1351 #CJK UNIFIED IDEOGRAPH
+ {0x8855, 0x5732}, //1352 #CJK UNIFIED IDEOGRAPH
+ {0x8856, 0x5734}, //1353 #CJK UNIFIED IDEOGRAPH
+ {0x8857, 0x5735}, //1354 #CJK UNIFIED IDEOGRAPH
+ {0x8858, 0x5736}, //1355 #CJK UNIFIED IDEOGRAPH
+ {0x8859, 0x5737}, //1356 #CJK UNIFIED IDEOGRAPH
+ {0x885A, 0x5738}, //1357 #CJK UNIFIED IDEOGRAPH
+ {0x885B, 0x573C}, //1358 #CJK UNIFIED IDEOGRAPH
+ {0x885C, 0x573D}, //1359 #CJK UNIFIED IDEOGRAPH
+ {0x885D, 0x573F}, //1360 #CJK UNIFIED IDEOGRAPH
+ {0x885E, 0x5741}, //1361 #CJK UNIFIED IDEOGRAPH
+ {0x885F, 0x5743}, //1362 #CJK UNIFIED IDEOGRAPH
+ {0x8860, 0x5744}, //1363 #CJK UNIFIED IDEOGRAPH
+ {0x8861, 0x5745}, //1364 #CJK UNIFIED IDEOGRAPH
+ {0x8862, 0x5746}, //1365 #CJK UNIFIED IDEOGRAPH
+ {0x8863, 0x5748}, //1366 #CJK UNIFIED IDEOGRAPH
+ {0x8864, 0x5749}, //1367 #CJK UNIFIED IDEOGRAPH
+ {0x8865, 0x574B}, //1368 #CJK UNIFIED IDEOGRAPH
+ {0x8866, 0x5752}, //1369 #CJK UNIFIED IDEOGRAPH
+ {0x8867, 0x5753}, //1370 #CJK UNIFIED IDEOGRAPH
+ {0x8868, 0x5754}, //1371 #CJK UNIFIED IDEOGRAPH
+ {0x8869, 0x5755}, //1372 #CJK UNIFIED IDEOGRAPH
+ {0x886A, 0x5756}, //1373 #CJK UNIFIED IDEOGRAPH
+ {0x886B, 0x5758}, //1374 #CJK UNIFIED IDEOGRAPH
+ {0x886C, 0x5759}, //1375 #CJK UNIFIED IDEOGRAPH
+ {0x886D, 0x5762}, //1376 #CJK UNIFIED IDEOGRAPH
+ {0x886E, 0x5763}, //1377 #CJK UNIFIED IDEOGRAPH
+ {0x886F, 0x5765}, //1378 #CJK UNIFIED IDEOGRAPH
+ {0x8870, 0x5767}, //1379 #CJK UNIFIED IDEOGRAPH
+ {0x8871, 0x576C}, //1380 #CJK UNIFIED IDEOGRAPH
+ {0x8872, 0x576E}, //1381 #CJK UNIFIED IDEOGRAPH
+ {0x8873, 0x5770}, //1382 #CJK UNIFIED IDEOGRAPH
+ {0x8874, 0x5771}, //1383 #CJK UNIFIED IDEOGRAPH
+ {0x8875, 0x5772}, //1384 #CJK UNIFIED IDEOGRAPH
+ {0x8876, 0x5774}, //1385 #CJK UNIFIED IDEOGRAPH
+ {0x8877, 0x5775}, //1386 #CJK UNIFIED IDEOGRAPH
+ {0x8878, 0x5778}, //1387 #CJK UNIFIED IDEOGRAPH
+ {0x8879, 0x5779}, //1388 #CJK UNIFIED IDEOGRAPH
+ {0x887A, 0x577A}, //1389 #CJK UNIFIED IDEOGRAPH
+ {0x887B, 0x577D}, //1390 #CJK UNIFIED IDEOGRAPH
+ {0x887C, 0x577E}, //1391 #CJK UNIFIED IDEOGRAPH
+ {0x887D, 0x577F}, //1392 #CJK UNIFIED IDEOGRAPH
+ {0x887E, 0x5780}, //1393 #CJK UNIFIED IDEOGRAPH
+ {0x8880, 0x5781}, //1394 #CJK UNIFIED IDEOGRAPH
+ {0x8881, 0x5787}, //1395 #CJK UNIFIED IDEOGRAPH
+ {0x8882, 0x5788}, //1396 #CJK UNIFIED IDEOGRAPH
+ {0x8883, 0x5789}, //1397 #CJK UNIFIED IDEOGRAPH
+ {0x8884, 0x578A}, //1398 #CJK UNIFIED IDEOGRAPH
+ {0x8885, 0x578D}, //1399 #CJK UNIFIED IDEOGRAPH
+ {0x8886, 0x578E}, //1400 #CJK UNIFIED IDEOGRAPH
+ {0x8887, 0x578F}, //1401 #CJK UNIFIED IDEOGRAPH
+ {0x8888, 0x5790}, //1402 #CJK UNIFIED IDEOGRAPH
+ {0x8889, 0x5791}, //1403 #CJK UNIFIED IDEOGRAPH
+ {0x888A, 0x5794}, //1404 #CJK UNIFIED IDEOGRAPH
+ {0x888B, 0x5795}, //1405 #CJK UNIFIED IDEOGRAPH
+ {0x888C, 0x5796}, //1406 #CJK UNIFIED IDEOGRAPH
+ {0x888D, 0x5797}, //1407 #CJK UNIFIED IDEOGRAPH
+ {0x888E, 0x5798}, //1408 #CJK UNIFIED IDEOGRAPH
+ {0x888F, 0x5799}, //1409 #CJK UNIFIED IDEOGRAPH
+ {0x8890, 0x579A}, //1410 #CJK UNIFIED IDEOGRAPH
+ {0x8891, 0x579C}, //1411 #CJK UNIFIED IDEOGRAPH
+ {0x8892, 0x579D}, //1412 #CJK UNIFIED IDEOGRAPH
+ {0x8893, 0x579E}, //1413 #CJK UNIFIED IDEOGRAPH
+ {0x8894, 0x579F}, //1414 #CJK UNIFIED IDEOGRAPH
+ {0x8895, 0x57A5}, //1415 #CJK UNIFIED IDEOGRAPH
+ {0x8896, 0x57A8}, //1416 #CJK UNIFIED IDEOGRAPH
+ {0x8897, 0x57AA}, //1417 #CJK UNIFIED IDEOGRAPH
+ {0x8898, 0x57AC}, //1418 #CJK UNIFIED IDEOGRAPH
+ {0x8899, 0x57AF}, //1419 #CJK UNIFIED IDEOGRAPH
+ {0x889A, 0x57B0}, //1420 #CJK UNIFIED IDEOGRAPH
+ {0x889B, 0x57B1}, //1421 #CJK UNIFIED IDEOGRAPH
+ {0x889C, 0x57B3}, //1422 #CJK UNIFIED IDEOGRAPH
+ {0x889D, 0x57B5}, //1423 #CJK UNIFIED IDEOGRAPH
+ {0x889E, 0x57B6}, //1424 #CJK UNIFIED IDEOGRAPH
+ {0x889F, 0x57B7}, //1425 #CJK UNIFIED IDEOGRAPH
+ {0x88A0, 0x57B9}, //1426 #CJK UNIFIED IDEOGRAPH
+ {0x88A1, 0x57BA}, //1427 #CJK UNIFIED IDEOGRAPH
+ {0x88A2, 0x57BB}, //1428 #CJK UNIFIED IDEOGRAPH
+ {0x88A3, 0x57BC}, //1429 #CJK UNIFIED IDEOGRAPH
+ {0x88A4, 0x57BD}, //1430 #CJK UNIFIED IDEOGRAPH
+ {0x88A5, 0x57BE}, //1431 #CJK UNIFIED IDEOGRAPH
+ {0x88A6, 0x57BF}, //1432 #CJK UNIFIED IDEOGRAPH
+ {0x88A7, 0x57C0}, //1433 #CJK UNIFIED IDEOGRAPH
+ {0x88A8, 0x57C1}, //1434 #CJK UNIFIED IDEOGRAPH
+ {0x88A9, 0x57C4}, //1435 #CJK UNIFIED IDEOGRAPH
+ {0x88AA, 0x57C5}, //1436 #CJK UNIFIED IDEOGRAPH
+ {0x88AB, 0x57C6}, //1437 #CJK UNIFIED IDEOGRAPH
+ {0x88AC, 0x57C7}, //1438 #CJK UNIFIED IDEOGRAPH
+ {0x88AD, 0x57C8}, //1439 #CJK UNIFIED IDEOGRAPH
+ {0x88AE, 0x57C9}, //1440 #CJK UNIFIED IDEOGRAPH
+ {0x88AF, 0x57CA}, //1441 #CJK UNIFIED IDEOGRAPH
+ {0x88B0, 0x57CC}, //1442 #CJK UNIFIED IDEOGRAPH
+ {0x88B1, 0x57CD}, //1443 #CJK UNIFIED IDEOGRAPH
+ {0x88B2, 0x57D0}, //1444 #CJK UNIFIED IDEOGRAPH
+ {0x88B3, 0x57D1}, //1445 #CJK UNIFIED IDEOGRAPH
+ {0x88B4, 0x57D3}, //1446 #CJK UNIFIED IDEOGRAPH
+ {0x88B5, 0x57D6}, //1447 #CJK UNIFIED IDEOGRAPH
+ {0x88B6, 0x57D7}, //1448 #CJK UNIFIED IDEOGRAPH
+ {0x88B7, 0x57DB}, //1449 #CJK UNIFIED IDEOGRAPH
+ {0x88B8, 0x57DC}, //1450 #CJK UNIFIED IDEOGRAPH
+ {0x88B9, 0x57DE}, //1451 #CJK UNIFIED IDEOGRAPH
+ {0x88BA, 0x57E1}, //1452 #CJK UNIFIED IDEOGRAPH
+ {0x88BB, 0x57E2}, //1453 #CJK UNIFIED IDEOGRAPH
+ {0x88BC, 0x57E3}, //1454 #CJK UNIFIED IDEOGRAPH
+ {0x88BD, 0x57E5}, //1455 #CJK UNIFIED IDEOGRAPH
+ {0x88BE, 0x57E6}, //1456 #CJK UNIFIED IDEOGRAPH
+ {0x88BF, 0x57E7}, //1457 #CJK UNIFIED IDEOGRAPH
+ {0x88C0, 0x57E8}, //1458 #CJK UNIFIED IDEOGRAPH
+ {0x88C1, 0x57E9}, //1459 #CJK UNIFIED IDEOGRAPH
+ {0x88C2, 0x57EA}, //1460 #CJK UNIFIED IDEOGRAPH
+ {0x88C3, 0x57EB}, //1461 #CJK UNIFIED IDEOGRAPH
+ {0x88C4, 0x57EC}, //1462 #CJK UNIFIED IDEOGRAPH
+ {0x88C5, 0x57EE}, //1463 #CJK UNIFIED IDEOGRAPH
+ {0x88C6, 0x57F0}, //1464 #CJK UNIFIED IDEOGRAPH
+ {0x88C7, 0x57F1}, //1465 #CJK UNIFIED IDEOGRAPH
+ {0x88C8, 0x57F2}, //1466 #CJK UNIFIED IDEOGRAPH
+ {0x88C9, 0x57F3}, //1467 #CJK UNIFIED IDEOGRAPH
+ {0x88CA, 0x57F5}, //1468 #CJK UNIFIED IDEOGRAPH
+ {0x88CB, 0x57F6}, //1469 #CJK UNIFIED IDEOGRAPH
+ {0x88CC, 0x57F7}, //1470 #CJK UNIFIED IDEOGRAPH
+ {0x88CD, 0x57FB}, //1471 #CJK UNIFIED IDEOGRAPH
+ {0x88CE, 0x57FC}, //1472 #CJK UNIFIED IDEOGRAPH
+ {0x88CF, 0x57FE}, //1473 #CJK UNIFIED IDEOGRAPH
+ {0x88D0, 0x57FF}, //1474 #CJK UNIFIED IDEOGRAPH
+ {0x88D1, 0x5801}, //1475 #CJK UNIFIED IDEOGRAPH
+ {0x88D2, 0x5803}, //1476 #CJK UNIFIED IDEOGRAPH
+ {0x88D3, 0x5804}, //1477 #CJK UNIFIED IDEOGRAPH
+ {0x88D4, 0x5805}, //1478 #CJK UNIFIED IDEOGRAPH
+ {0x88D5, 0x5808}, //1479 #CJK UNIFIED IDEOGRAPH
+ {0x88D6, 0x5809}, //1480 #CJK UNIFIED IDEOGRAPH
+ {0x88D7, 0x580A}, //1481 #CJK UNIFIED IDEOGRAPH
+ {0x88D8, 0x580C}, //1482 #CJK UNIFIED IDEOGRAPH
+ {0x88D9, 0x580E}, //1483 #CJK UNIFIED IDEOGRAPH
+ {0x88DA, 0x580F}, //1484 #CJK UNIFIED IDEOGRAPH
+ {0x88DB, 0x5810}, //1485 #CJK UNIFIED IDEOGRAPH
+ {0x88DC, 0x5812}, //1486 #CJK UNIFIED IDEOGRAPH
+ {0x88DD, 0x5813}, //1487 #CJK UNIFIED IDEOGRAPH
+ {0x88DE, 0x5814}, //1488 #CJK UNIFIED IDEOGRAPH
+ {0x88DF, 0x5816}, //1489 #CJK UNIFIED IDEOGRAPH
+ {0x88E0, 0x5817}, //1490 #CJK UNIFIED IDEOGRAPH
+ {0x88E1, 0x5818}, //1491 #CJK UNIFIED IDEOGRAPH
+ {0x88E2, 0x581A}, //1492 #CJK UNIFIED IDEOGRAPH
+ {0x88E3, 0x581B}, //1493 #CJK UNIFIED IDEOGRAPH
+ {0x88E4, 0x581C}, //1494 #CJK UNIFIED IDEOGRAPH
+ {0x88E5, 0x581D}, //1495 #CJK UNIFIED IDEOGRAPH
+ {0x88E6, 0x581F}, //1496 #CJK UNIFIED IDEOGRAPH
+ {0x88E7, 0x5822}, //1497 #CJK UNIFIED IDEOGRAPH
+ {0x88E8, 0x5823}, //1498 #CJK UNIFIED IDEOGRAPH
+ {0x88E9, 0x5825}, //1499 #CJK UNIFIED IDEOGRAPH
+ {0x88EA, 0x5826}, //1500 #CJK UNIFIED IDEOGRAPH
+ {0x88EB, 0x5827}, //1501 #CJK UNIFIED IDEOGRAPH
+ {0x88EC, 0x5828}, //1502 #CJK UNIFIED IDEOGRAPH
+ {0x88ED, 0x5829}, //1503 #CJK UNIFIED IDEOGRAPH
+ {0x88EE, 0x582B}, //1504 #CJK UNIFIED IDEOGRAPH
+ {0x88EF, 0x582C}, //1505 #CJK UNIFIED IDEOGRAPH
+ {0x88F0, 0x582D}, //1506 #CJK UNIFIED IDEOGRAPH
+ {0x88F1, 0x582E}, //1507 #CJK UNIFIED IDEOGRAPH
+ {0x88F2, 0x582F}, //1508 #CJK UNIFIED IDEOGRAPH
+ {0x88F3, 0x5831}, //1509 #CJK UNIFIED IDEOGRAPH
+ {0x88F4, 0x5832}, //1510 #CJK UNIFIED IDEOGRAPH
+ {0x88F5, 0x5833}, //1511 #CJK UNIFIED IDEOGRAPH
+ {0x88F6, 0x5834}, //1512 #CJK UNIFIED IDEOGRAPH
+ {0x88F7, 0x5836}, //1513 #CJK UNIFIED IDEOGRAPH
+ {0x88F8, 0x5837}, //1514 #CJK UNIFIED IDEOGRAPH
+ {0x88F9, 0x5838}, //1515 #CJK UNIFIED IDEOGRAPH
+ {0x88FA, 0x5839}, //1516 #CJK UNIFIED IDEOGRAPH
+ {0x88FB, 0x583A}, //1517 #CJK UNIFIED IDEOGRAPH
+ {0x88FC, 0x583B}, //1518 #CJK UNIFIED IDEOGRAPH
+ {0x88FD, 0x583C}, //1519 #CJK UNIFIED IDEOGRAPH
+ {0x88FE, 0x583D}, //1520 #CJK UNIFIED IDEOGRAPH
+ {0x8940, 0x583E}, //1521 #CJK UNIFIED IDEOGRAPH
+ {0x8941, 0x583F}, //1522 #CJK UNIFIED IDEOGRAPH
+ {0x8942, 0x5840}, //1523 #CJK UNIFIED IDEOGRAPH
+ {0x8943, 0x5841}, //1524 #CJK UNIFIED IDEOGRAPH
+ {0x8944, 0x5842}, //1525 #CJK UNIFIED IDEOGRAPH
+ {0x8945, 0x5843}, //1526 #CJK UNIFIED IDEOGRAPH
+ {0x8946, 0x5845}, //1527 #CJK UNIFIED IDEOGRAPH
+ {0x8947, 0x5846}, //1528 #CJK UNIFIED IDEOGRAPH
+ {0x8948, 0x5847}, //1529 #CJK UNIFIED IDEOGRAPH
+ {0x8949, 0x5848}, //1530 #CJK UNIFIED IDEOGRAPH
+ {0x894A, 0x5849}, //1531 #CJK UNIFIED IDEOGRAPH
+ {0x894B, 0x584A}, //1532 #CJK UNIFIED IDEOGRAPH
+ {0x894C, 0x584B}, //1533 #CJK UNIFIED IDEOGRAPH
+ {0x894D, 0x584E}, //1534 #CJK UNIFIED IDEOGRAPH
+ {0x894E, 0x584F}, //1535 #CJK UNIFIED IDEOGRAPH
+ {0x894F, 0x5850}, //1536 #CJK UNIFIED IDEOGRAPH
+ {0x8950, 0x5852}, //1537 #CJK UNIFIED IDEOGRAPH
+ {0x8951, 0x5853}, //1538 #CJK UNIFIED IDEOGRAPH
+ {0x8952, 0x5855}, //1539 #CJK UNIFIED IDEOGRAPH
+ {0x8953, 0x5856}, //1540 #CJK UNIFIED IDEOGRAPH
+ {0x8954, 0x5857}, //1541 #CJK UNIFIED IDEOGRAPH
+ {0x8955, 0x5859}, //1542 #CJK UNIFIED IDEOGRAPH
+ {0x8956, 0x585A}, //1543 #CJK UNIFIED IDEOGRAPH
+ {0x8957, 0x585B}, //1544 #CJK UNIFIED IDEOGRAPH
+ {0x8958, 0x585C}, //1545 #CJK UNIFIED IDEOGRAPH
+ {0x8959, 0x585D}, //1546 #CJK UNIFIED IDEOGRAPH
+ {0x895A, 0x585F}, //1547 #CJK UNIFIED IDEOGRAPH
+ {0x895B, 0x5860}, //1548 #CJK UNIFIED IDEOGRAPH
+ {0x895C, 0x5861}, //1549 #CJK UNIFIED IDEOGRAPH
+ {0x895D, 0x5862}, //1550 #CJK UNIFIED IDEOGRAPH
+ {0x895E, 0x5863}, //1551 #CJK UNIFIED IDEOGRAPH
+ {0x895F, 0x5864}, //1552 #CJK UNIFIED IDEOGRAPH
+ {0x8960, 0x5866}, //1553 #CJK UNIFIED IDEOGRAPH
+ {0x8961, 0x5867}, //1554 #CJK UNIFIED IDEOGRAPH
+ {0x8962, 0x5868}, //1555 #CJK UNIFIED IDEOGRAPH
+ {0x8963, 0x5869}, //1556 #CJK UNIFIED IDEOGRAPH
+ {0x8964, 0x586A}, //1557 #CJK UNIFIED IDEOGRAPH
+ {0x8965, 0x586D}, //1558 #CJK UNIFIED IDEOGRAPH
+ {0x8966, 0x586E}, //1559 #CJK UNIFIED IDEOGRAPH
+ {0x8967, 0x586F}, //1560 #CJK UNIFIED IDEOGRAPH
+ {0x8968, 0x5870}, //1561 #CJK UNIFIED IDEOGRAPH
+ {0x8969, 0x5871}, //1562 #CJK UNIFIED IDEOGRAPH
+ {0x896A, 0x5872}, //1563 #CJK UNIFIED IDEOGRAPH
+ {0x896B, 0x5873}, //1564 #CJK UNIFIED IDEOGRAPH
+ {0x896C, 0x5874}, //1565 #CJK UNIFIED IDEOGRAPH
+ {0x896D, 0x5875}, //1566 #CJK UNIFIED IDEOGRAPH
+ {0x896E, 0x5876}, //1567 #CJK UNIFIED IDEOGRAPH
+ {0x896F, 0x5877}, //1568 #CJK UNIFIED IDEOGRAPH
+ {0x8970, 0x5878}, //1569 #CJK UNIFIED IDEOGRAPH
+ {0x8971, 0x5879}, //1570 #CJK UNIFIED IDEOGRAPH
+ {0x8972, 0x587A}, //1571 #CJK UNIFIED IDEOGRAPH
+ {0x8973, 0x587B}, //1572 #CJK UNIFIED IDEOGRAPH
+ {0x8974, 0x587C}, //1573 #CJK UNIFIED IDEOGRAPH
+ {0x8975, 0x587D}, //1574 #CJK UNIFIED IDEOGRAPH
+ {0x8976, 0x587F}, //1575 #CJK UNIFIED IDEOGRAPH
+ {0x8977, 0x5882}, //1576 #CJK UNIFIED IDEOGRAPH
+ {0x8978, 0x5884}, //1577 #CJK UNIFIED IDEOGRAPH
+ {0x8979, 0x5886}, //1578 #CJK UNIFIED IDEOGRAPH
+ {0x897A, 0x5887}, //1579 #CJK UNIFIED IDEOGRAPH
+ {0x897B, 0x5888}, //1580 #CJK UNIFIED IDEOGRAPH
+ {0x897C, 0x588A}, //1581 #CJK UNIFIED IDEOGRAPH
+ {0x897D, 0x588B}, //1582 #CJK UNIFIED IDEOGRAPH
+ {0x897E, 0x588C}, //1583 #CJK UNIFIED IDEOGRAPH
+ {0x8980, 0x588D}, //1584 #CJK UNIFIED IDEOGRAPH
+ {0x8981, 0x588E}, //1585 #CJK UNIFIED IDEOGRAPH
+ {0x8982, 0x588F}, //1586 #CJK UNIFIED IDEOGRAPH
+ {0x8983, 0x5890}, //1587 #CJK UNIFIED IDEOGRAPH
+ {0x8984, 0x5891}, //1588 #CJK UNIFIED IDEOGRAPH
+ {0x8985, 0x5894}, //1589 #CJK UNIFIED IDEOGRAPH
+ {0x8986, 0x5895}, //1590 #CJK UNIFIED IDEOGRAPH
+ {0x8987, 0x5896}, //1591 #CJK UNIFIED IDEOGRAPH
+ {0x8988, 0x5897}, //1592 #CJK UNIFIED IDEOGRAPH
+ {0x8989, 0x5898}, //1593 #CJK UNIFIED IDEOGRAPH
+ {0x898A, 0x589B}, //1594 #CJK UNIFIED IDEOGRAPH
+ {0x898B, 0x589C}, //1595 #CJK UNIFIED IDEOGRAPH
+ {0x898C, 0x589D}, //1596 #CJK UNIFIED IDEOGRAPH
+ {0x898D, 0x58A0}, //1597 #CJK UNIFIED IDEOGRAPH
+ {0x898E, 0x58A1}, //1598 #CJK UNIFIED IDEOGRAPH
+ {0x898F, 0x58A2}, //1599 #CJK UNIFIED IDEOGRAPH
+ {0x8990, 0x58A3}, //1600 #CJK UNIFIED IDEOGRAPH
+ {0x8991, 0x58A4}, //1601 #CJK UNIFIED IDEOGRAPH
+ {0x8992, 0x58A5}, //1602 #CJK UNIFIED IDEOGRAPH
+ {0x8993, 0x58A6}, //1603 #CJK UNIFIED IDEOGRAPH
+ {0x8994, 0x58A7}, //1604 #CJK UNIFIED IDEOGRAPH
+ {0x8995, 0x58AA}, //1605 #CJK UNIFIED IDEOGRAPH
+ {0x8996, 0x58AB}, //1606 #CJK UNIFIED IDEOGRAPH
+ {0x8997, 0x58AC}, //1607 #CJK UNIFIED IDEOGRAPH
+ {0x8998, 0x58AD}, //1608 #CJK UNIFIED IDEOGRAPH
+ {0x8999, 0x58AE}, //1609 #CJK UNIFIED IDEOGRAPH
+ {0x899A, 0x58AF}, //1610 #CJK UNIFIED IDEOGRAPH
+ {0x899B, 0x58B0}, //1611 #CJK UNIFIED IDEOGRAPH
+ {0x899C, 0x58B1}, //1612 #CJK UNIFIED IDEOGRAPH
+ {0x899D, 0x58B2}, //1613 #CJK UNIFIED IDEOGRAPH
+ {0x899E, 0x58B3}, //1614 #CJK UNIFIED IDEOGRAPH
+ {0x899F, 0x58B4}, //1615 #CJK UNIFIED IDEOGRAPH
+ {0x89A0, 0x58B5}, //1616 #CJK UNIFIED IDEOGRAPH
+ {0x89A1, 0x58B6}, //1617 #CJK UNIFIED IDEOGRAPH
+ {0x89A2, 0x58B7}, //1618 #CJK UNIFIED IDEOGRAPH
+ {0x89A3, 0x58B8}, //1619 #CJK UNIFIED IDEOGRAPH
+ {0x89A4, 0x58B9}, //1620 #CJK UNIFIED IDEOGRAPH
+ {0x89A5, 0x58BA}, //1621 #CJK UNIFIED IDEOGRAPH
+ {0x89A6, 0x58BB}, //1622 #CJK UNIFIED IDEOGRAPH
+ {0x89A7, 0x58BD}, //1623 #CJK UNIFIED IDEOGRAPH
+ {0x89A8, 0x58BE}, //1624 #CJK UNIFIED IDEOGRAPH
+ {0x89A9, 0x58BF}, //1625 #CJK UNIFIED IDEOGRAPH
+ {0x89AA, 0x58C0}, //1626 #CJK UNIFIED IDEOGRAPH
+ {0x89AB, 0x58C2}, //1627 #CJK UNIFIED IDEOGRAPH
+ {0x89AC, 0x58C3}, //1628 #CJK UNIFIED IDEOGRAPH
+ {0x89AD, 0x58C4}, //1629 #CJK UNIFIED IDEOGRAPH
+ {0x89AE, 0x58C6}, //1630 #CJK UNIFIED IDEOGRAPH
+ {0x89AF, 0x58C7}, //1631 #CJK UNIFIED IDEOGRAPH
+ {0x89B0, 0x58C8}, //1632 #CJK UNIFIED IDEOGRAPH
+ {0x89B1, 0x58C9}, //1633 #CJK UNIFIED IDEOGRAPH
+ {0x89B2, 0x58CA}, //1634 #CJK UNIFIED IDEOGRAPH
+ {0x89B3, 0x58CB}, //1635 #CJK UNIFIED IDEOGRAPH
+ {0x89B4, 0x58CC}, //1636 #CJK UNIFIED IDEOGRAPH
+ {0x89B5, 0x58CD}, //1637 #CJK UNIFIED IDEOGRAPH
+ {0x89B6, 0x58CE}, //1638 #CJK UNIFIED IDEOGRAPH
+ {0x89B7, 0x58CF}, //1639 #CJK UNIFIED IDEOGRAPH
+ {0x89B8, 0x58D0}, //1640 #CJK UNIFIED IDEOGRAPH
+ {0x89B9, 0x58D2}, //1641 #CJK UNIFIED IDEOGRAPH
+ {0x89BA, 0x58D3}, //1642 #CJK UNIFIED IDEOGRAPH
+ {0x89BB, 0x58D4}, //1643 #CJK UNIFIED IDEOGRAPH
+ {0x89BC, 0x58D6}, //1644 #CJK UNIFIED IDEOGRAPH
+ {0x89BD, 0x58D7}, //1645 #CJK UNIFIED IDEOGRAPH
+ {0x89BE, 0x58D8}, //1646 #CJK UNIFIED IDEOGRAPH
+ {0x89BF, 0x58D9}, //1647 #CJK UNIFIED IDEOGRAPH
+ {0x89C0, 0x58DA}, //1648 #CJK UNIFIED IDEOGRAPH
+ {0x89C1, 0x58DB}, //1649 #CJK UNIFIED IDEOGRAPH
+ {0x89C2, 0x58DC}, //1650 #CJK UNIFIED IDEOGRAPH
+ {0x89C3, 0x58DD}, //1651 #CJK UNIFIED IDEOGRAPH
+ {0x89C4, 0x58DE}, //1652 #CJK UNIFIED IDEOGRAPH
+ {0x89C5, 0x58DF}, //1653 #CJK UNIFIED IDEOGRAPH
+ {0x89C6, 0x58E0}, //1654 #CJK UNIFIED IDEOGRAPH
+ {0x89C7, 0x58E1}, //1655 #CJK UNIFIED IDEOGRAPH
+ {0x89C8, 0x58E2}, //1656 #CJK UNIFIED IDEOGRAPH
+ {0x89C9, 0x58E3}, //1657 #CJK UNIFIED IDEOGRAPH
+ {0x89CA, 0x58E5}, //1658 #CJK UNIFIED IDEOGRAPH
+ {0x89CB, 0x58E6}, //1659 #CJK UNIFIED IDEOGRAPH
+ {0x89CC, 0x58E7}, //1660 #CJK UNIFIED IDEOGRAPH
+ {0x89CD, 0x58E8}, //1661 #CJK UNIFIED IDEOGRAPH
+ {0x89CE, 0x58E9}, //1662 #CJK UNIFIED IDEOGRAPH
+ {0x89CF, 0x58EA}, //1663 #CJK UNIFIED IDEOGRAPH
+ {0x89D0, 0x58ED}, //1664 #CJK UNIFIED IDEOGRAPH
+ {0x89D1, 0x58EF}, //1665 #CJK UNIFIED IDEOGRAPH
+ {0x89D2, 0x58F1}, //1666 #CJK UNIFIED IDEOGRAPH
+ {0x89D3, 0x58F2}, //1667 #CJK UNIFIED IDEOGRAPH
+ {0x89D4, 0x58F4}, //1668 #CJK UNIFIED IDEOGRAPH
+ {0x89D5, 0x58F5}, //1669 #CJK UNIFIED IDEOGRAPH
+ {0x89D6, 0x58F7}, //1670 #CJK UNIFIED IDEOGRAPH
+ {0x89D7, 0x58F8}, //1671 #CJK UNIFIED IDEOGRAPH
+ {0x89D8, 0x58FA}, //1672 #CJK UNIFIED IDEOGRAPH
+ {0x89D9, 0x58FB}, //1673 #CJK UNIFIED IDEOGRAPH
+ {0x89DA, 0x58FC}, //1674 #CJK UNIFIED IDEOGRAPH
+ {0x89DB, 0x58FD}, //1675 #CJK UNIFIED IDEOGRAPH
+ {0x89DC, 0x58FE}, //1676 #CJK UNIFIED IDEOGRAPH
+ {0x89DD, 0x58FF}, //1677 #CJK UNIFIED IDEOGRAPH
+ {0x89DE, 0x5900}, //1678 #CJK UNIFIED IDEOGRAPH
+ {0x89DF, 0x5901}, //1679 #CJK UNIFIED IDEOGRAPH
+ {0x89E0, 0x5903}, //1680 #CJK UNIFIED IDEOGRAPH
+ {0x89E1, 0x5905}, //1681 #CJK UNIFIED IDEOGRAPH
+ {0x89E2, 0x5906}, //1682 #CJK UNIFIED IDEOGRAPH
+ {0x89E3, 0x5908}, //1683 #CJK UNIFIED IDEOGRAPH
+ {0x89E4, 0x5909}, //1684 #CJK UNIFIED IDEOGRAPH
+ {0x89E5, 0x590A}, //1685 #CJK UNIFIED IDEOGRAPH
+ {0x89E6, 0x590B}, //1686 #CJK UNIFIED IDEOGRAPH
+ {0x89E7, 0x590C}, //1687 #CJK UNIFIED IDEOGRAPH
+ {0x89E8, 0x590E}, //1688 #CJK UNIFIED IDEOGRAPH
+ {0x89E9, 0x5910}, //1689 #CJK UNIFIED IDEOGRAPH
+ {0x89EA, 0x5911}, //1690 #CJK UNIFIED IDEOGRAPH
+ {0x89EB, 0x5912}, //1691 #CJK UNIFIED IDEOGRAPH
+ {0x89EC, 0x5913}, //1692 #CJK UNIFIED IDEOGRAPH
+ {0x89ED, 0x5917}, //1693 #CJK UNIFIED IDEOGRAPH
+ {0x89EE, 0x5918}, //1694 #CJK UNIFIED IDEOGRAPH
+ {0x89EF, 0x591B}, //1695 #CJK UNIFIED IDEOGRAPH
+ {0x89F0, 0x591D}, //1696 #CJK UNIFIED IDEOGRAPH
+ {0x89F1, 0x591E}, //1697 #CJK UNIFIED IDEOGRAPH
+ {0x89F2, 0x5920}, //1698 #CJK UNIFIED IDEOGRAPH
+ {0x89F3, 0x5921}, //1699 #CJK UNIFIED IDEOGRAPH
+ {0x89F4, 0x5922}, //1700 #CJK UNIFIED IDEOGRAPH
+ {0x89F5, 0x5923}, //1701 #CJK UNIFIED IDEOGRAPH
+ {0x89F6, 0x5926}, //1702 #CJK UNIFIED IDEOGRAPH
+ {0x89F7, 0x5928}, //1703 #CJK UNIFIED IDEOGRAPH
+ {0x89F8, 0x592C}, //1704 #CJK UNIFIED IDEOGRAPH
+ {0x89F9, 0x5930}, //1705 #CJK UNIFIED IDEOGRAPH
+ {0x89FA, 0x5932}, //1706 #CJK UNIFIED IDEOGRAPH
+ {0x89FB, 0x5933}, //1707 #CJK UNIFIED IDEOGRAPH
+ {0x89FC, 0x5935}, //1708 #CJK UNIFIED IDEOGRAPH
+ {0x89FD, 0x5936}, //1709 #CJK UNIFIED IDEOGRAPH
+ {0x89FE, 0x593B}, //1710 #CJK UNIFIED IDEOGRAPH
+ {0x8A40, 0x593D}, //1711 #CJK UNIFIED IDEOGRAPH
+ {0x8A41, 0x593E}, //1712 #CJK UNIFIED IDEOGRAPH
+ {0x8A42, 0x593F}, //1713 #CJK UNIFIED IDEOGRAPH
+ {0x8A43, 0x5940}, //1714 #CJK UNIFIED IDEOGRAPH
+ {0x8A44, 0x5943}, //1715 #CJK UNIFIED IDEOGRAPH
+ {0x8A45, 0x5945}, //1716 #CJK UNIFIED IDEOGRAPH
+ {0x8A46, 0x5946}, //1717 #CJK UNIFIED IDEOGRAPH
+ {0x8A47, 0x594A}, //1718 #CJK UNIFIED IDEOGRAPH
+ {0x8A48, 0x594C}, //1719 #CJK UNIFIED IDEOGRAPH
+ {0x8A49, 0x594D}, //1720 #CJK UNIFIED IDEOGRAPH
+ {0x8A4A, 0x5950}, //1721 #CJK UNIFIED IDEOGRAPH
+ {0x8A4B, 0x5952}, //1722 #CJK UNIFIED IDEOGRAPH
+ {0x8A4C, 0x5953}, //1723 #CJK UNIFIED IDEOGRAPH
+ {0x8A4D, 0x5959}, //1724 #CJK UNIFIED IDEOGRAPH
+ {0x8A4E, 0x595B}, //1725 #CJK UNIFIED IDEOGRAPH
+ {0x8A4F, 0x595C}, //1726 #CJK UNIFIED IDEOGRAPH
+ {0x8A50, 0x595D}, //1727 #CJK UNIFIED IDEOGRAPH
+ {0x8A51, 0x595E}, //1728 #CJK UNIFIED IDEOGRAPH
+ {0x8A52, 0x595F}, //1729 #CJK UNIFIED IDEOGRAPH
+ {0x8A53, 0x5961}, //1730 #CJK UNIFIED IDEOGRAPH
+ {0x8A54, 0x5963}, //1731 #CJK UNIFIED IDEOGRAPH
+ {0x8A55, 0x5964}, //1732 #CJK UNIFIED IDEOGRAPH
+ {0x8A56, 0x5966}, //1733 #CJK UNIFIED IDEOGRAPH
+ {0x8A57, 0x5967}, //1734 #CJK UNIFIED IDEOGRAPH
+ {0x8A58, 0x5968}, //1735 #CJK UNIFIED IDEOGRAPH
+ {0x8A59, 0x5969}, //1736 #CJK UNIFIED IDEOGRAPH
+ {0x8A5A, 0x596A}, //1737 #CJK UNIFIED IDEOGRAPH
+ {0x8A5B, 0x596B}, //1738 #CJK UNIFIED IDEOGRAPH
+ {0x8A5C, 0x596C}, //1739 #CJK UNIFIED IDEOGRAPH
+ {0x8A5D, 0x596D}, //1740 #CJK UNIFIED IDEOGRAPH
+ {0x8A5E, 0x596E}, //1741 #CJK UNIFIED IDEOGRAPH
+ {0x8A5F, 0x596F}, //1742 #CJK UNIFIED IDEOGRAPH
+ {0x8A60, 0x5970}, //1743 #CJK UNIFIED IDEOGRAPH
+ {0x8A61, 0x5971}, //1744 #CJK UNIFIED IDEOGRAPH
+ {0x8A62, 0x5972}, //1745 #CJK UNIFIED IDEOGRAPH
+ {0x8A63, 0x5975}, //1746 #CJK UNIFIED IDEOGRAPH
+ {0x8A64, 0x5977}, //1747 #CJK UNIFIED IDEOGRAPH
+ {0x8A65, 0x597A}, //1748 #CJK UNIFIED IDEOGRAPH
+ {0x8A66, 0x597B}, //1749 #CJK UNIFIED IDEOGRAPH
+ {0x8A67, 0x597C}, //1750 #CJK UNIFIED IDEOGRAPH
+ {0x8A68, 0x597E}, //1751 #CJK UNIFIED IDEOGRAPH
+ {0x8A69, 0x597F}, //1752 #CJK UNIFIED IDEOGRAPH
+ {0x8A6A, 0x5980}, //1753 #CJK UNIFIED IDEOGRAPH
+ {0x8A6B, 0x5985}, //1754 #CJK UNIFIED IDEOGRAPH
+ {0x8A6C, 0x5989}, //1755 #CJK UNIFIED IDEOGRAPH
+ {0x8A6D, 0x598B}, //1756 #CJK UNIFIED IDEOGRAPH
+ {0x8A6E, 0x598C}, //1757 #CJK UNIFIED IDEOGRAPH
+ {0x8A6F, 0x598E}, //1758 #CJK UNIFIED IDEOGRAPH
+ {0x8A70, 0x598F}, //1759 #CJK UNIFIED IDEOGRAPH
+ {0x8A71, 0x5990}, //1760 #CJK UNIFIED IDEOGRAPH
+ {0x8A72, 0x5991}, //1761 #CJK UNIFIED IDEOGRAPH
+ {0x8A73, 0x5994}, //1762 #CJK UNIFIED IDEOGRAPH
+ {0x8A74, 0x5995}, //1763 #CJK UNIFIED IDEOGRAPH
+ {0x8A75, 0x5998}, //1764 #CJK UNIFIED IDEOGRAPH
+ {0x8A76, 0x599A}, //1765 #CJK UNIFIED IDEOGRAPH
+ {0x8A77, 0x599B}, //1766 #CJK UNIFIED IDEOGRAPH
+ {0x8A78, 0x599C}, //1767 #CJK UNIFIED IDEOGRAPH
+ {0x8A79, 0x599D}, //1768 #CJK UNIFIED IDEOGRAPH
+ {0x8A7A, 0x599F}, //1769 #CJK UNIFIED IDEOGRAPH
+ {0x8A7B, 0x59A0}, //1770 #CJK UNIFIED IDEOGRAPH
+ {0x8A7C, 0x59A1}, //1771 #CJK UNIFIED IDEOGRAPH
+ {0x8A7D, 0x59A2}, //1772 #CJK UNIFIED IDEOGRAPH
+ {0x8A7E, 0x59A6}, //1773 #CJK UNIFIED IDEOGRAPH
+ {0x8A80, 0x59A7}, //1774 #CJK UNIFIED IDEOGRAPH
+ {0x8A81, 0x59AC}, //1775 #CJK UNIFIED IDEOGRAPH
+ {0x8A82, 0x59AD}, //1776 #CJK UNIFIED IDEOGRAPH
+ {0x8A83, 0x59B0}, //1777 #CJK UNIFIED IDEOGRAPH
+ {0x8A84, 0x59B1}, //1778 #CJK UNIFIED IDEOGRAPH
+ {0x8A85, 0x59B3}, //1779 #CJK UNIFIED IDEOGRAPH
+ {0x8A86, 0x59B4}, //1780 #CJK UNIFIED IDEOGRAPH
+ {0x8A87, 0x59B5}, //1781 #CJK UNIFIED IDEOGRAPH
+ {0x8A88, 0x59B6}, //1782 #CJK UNIFIED IDEOGRAPH
+ {0x8A89, 0x59B7}, //1783 #CJK UNIFIED IDEOGRAPH
+ {0x8A8A, 0x59B8}, //1784 #CJK UNIFIED IDEOGRAPH
+ {0x8A8B, 0x59BA}, //1785 #CJK UNIFIED IDEOGRAPH
+ {0x8A8C, 0x59BC}, //1786 #CJK UNIFIED IDEOGRAPH
+ {0x8A8D, 0x59BD}, //1787 #CJK UNIFIED IDEOGRAPH
+ {0x8A8E, 0x59BF}, //1788 #CJK UNIFIED IDEOGRAPH
+ {0x8A8F, 0x59C0}, //1789 #CJK UNIFIED IDEOGRAPH
+ {0x8A90, 0x59C1}, //1790 #CJK UNIFIED IDEOGRAPH
+ {0x8A91, 0x59C2}, //1791 #CJK UNIFIED IDEOGRAPH
+ {0x8A92, 0x59C3}, //1792 #CJK UNIFIED IDEOGRAPH
+ {0x8A93, 0x59C4}, //1793 #CJK UNIFIED IDEOGRAPH
+ {0x8A94, 0x59C5}, //1794 #CJK UNIFIED IDEOGRAPH
+ {0x8A95, 0x59C7}, //1795 #CJK UNIFIED IDEOGRAPH
+ {0x8A96, 0x59C8}, //1796 #CJK UNIFIED IDEOGRAPH
+ {0x8A97, 0x59C9}, //1797 #CJK UNIFIED IDEOGRAPH
+ {0x8A98, 0x59CC}, //1798 #CJK UNIFIED IDEOGRAPH
+ {0x8A99, 0x59CD}, //1799 #CJK UNIFIED IDEOGRAPH
+ {0x8A9A, 0x59CE}, //1800 #CJK UNIFIED IDEOGRAPH
+ {0x8A9B, 0x59CF}, //1801 #CJK UNIFIED IDEOGRAPH
+ {0x8A9C, 0x59D5}, //1802 #CJK UNIFIED IDEOGRAPH
+ {0x8A9D, 0x59D6}, //1803 #CJK UNIFIED IDEOGRAPH
+ {0x8A9E, 0x59D9}, //1804 #CJK UNIFIED IDEOGRAPH
+ {0x8A9F, 0x59DB}, //1805 #CJK UNIFIED IDEOGRAPH
+ {0x8AA0, 0x59DE}, //1806 #CJK UNIFIED IDEOGRAPH
+ {0x8AA1, 0x59DF}, //1807 #CJK UNIFIED IDEOGRAPH
+ {0x8AA2, 0x59E0}, //1808 #CJK UNIFIED IDEOGRAPH
+ {0x8AA3, 0x59E1}, //1809 #CJK UNIFIED IDEOGRAPH
+ {0x8AA4, 0x59E2}, //1810 #CJK UNIFIED IDEOGRAPH
+ {0x8AA5, 0x59E4}, //1811 #CJK UNIFIED IDEOGRAPH
+ {0x8AA6, 0x59E6}, //1812 #CJK UNIFIED IDEOGRAPH
+ {0x8AA7, 0x59E7}, //1813 #CJK UNIFIED IDEOGRAPH
+ {0x8AA8, 0x59E9}, //1814 #CJK UNIFIED IDEOGRAPH
+ {0x8AA9, 0x59EA}, //1815 #CJK UNIFIED IDEOGRAPH
+ {0x8AAA, 0x59EB}, //1816 #CJK UNIFIED IDEOGRAPH
+ {0x8AAB, 0x59ED}, //1817 #CJK UNIFIED IDEOGRAPH
+ {0x8AAC, 0x59EE}, //1818 #CJK UNIFIED IDEOGRAPH
+ {0x8AAD, 0x59EF}, //1819 #CJK UNIFIED IDEOGRAPH
+ {0x8AAE, 0x59F0}, //1820 #CJK UNIFIED IDEOGRAPH
+ {0x8AAF, 0x59F1}, //1821 #CJK UNIFIED IDEOGRAPH
+ {0x8AB0, 0x59F2}, //1822 #CJK UNIFIED IDEOGRAPH
+ {0x8AB1, 0x59F3}, //1823 #CJK UNIFIED IDEOGRAPH
+ {0x8AB2, 0x59F4}, //1824 #CJK UNIFIED IDEOGRAPH
+ {0x8AB3, 0x59F5}, //1825 #CJK UNIFIED IDEOGRAPH
+ {0x8AB4, 0x59F6}, //1826 #CJK UNIFIED IDEOGRAPH
+ {0x8AB5, 0x59F7}, //1827 #CJK UNIFIED IDEOGRAPH
+ {0x8AB6, 0x59F8}, //1828 #CJK UNIFIED IDEOGRAPH
+ {0x8AB7, 0x59FA}, //1829 #CJK UNIFIED IDEOGRAPH
+ {0x8AB8, 0x59FC}, //1830 #CJK UNIFIED IDEOGRAPH
+ {0x8AB9, 0x59FD}, //1831 #CJK UNIFIED IDEOGRAPH
+ {0x8ABA, 0x59FE}, //1832 #CJK UNIFIED IDEOGRAPH
+ {0x8ABB, 0x5A00}, //1833 #CJK UNIFIED IDEOGRAPH
+ {0x8ABC, 0x5A02}, //1834 #CJK UNIFIED IDEOGRAPH
+ {0x8ABD, 0x5A0A}, //1835 #CJK UNIFIED IDEOGRAPH
+ {0x8ABE, 0x5A0B}, //1836 #CJK UNIFIED IDEOGRAPH
+ {0x8ABF, 0x5A0D}, //1837 #CJK UNIFIED IDEOGRAPH
+ {0x8AC0, 0x5A0E}, //1838 #CJK UNIFIED IDEOGRAPH
+ {0x8AC1, 0x5A0F}, //1839 #CJK UNIFIED IDEOGRAPH
+ {0x8AC2, 0x5A10}, //1840 #CJK UNIFIED IDEOGRAPH
+ {0x8AC3, 0x5A12}, //1841 #CJK UNIFIED IDEOGRAPH
+ {0x8AC4, 0x5A14}, //1842 #CJK UNIFIED IDEOGRAPH
+ {0x8AC5, 0x5A15}, //1843 #CJK UNIFIED IDEOGRAPH
+ {0x8AC6, 0x5A16}, //1844 #CJK UNIFIED IDEOGRAPH
+ {0x8AC7, 0x5A17}, //1845 #CJK UNIFIED IDEOGRAPH
+ {0x8AC8, 0x5A19}, //1846 #CJK UNIFIED IDEOGRAPH
+ {0x8AC9, 0x5A1A}, //1847 #CJK UNIFIED IDEOGRAPH
+ {0x8ACA, 0x5A1B}, //1848 #CJK UNIFIED IDEOGRAPH
+ {0x8ACB, 0x5A1D}, //1849 #CJK UNIFIED IDEOGRAPH
+ {0x8ACC, 0x5A1E}, //1850 #CJK UNIFIED IDEOGRAPH
+ {0x8ACD, 0x5A21}, //1851 #CJK UNIFIED IDEOGRAPH
+ {0x8ACE, 0x5A22}, //1852 #CJK UNIFIED IDEOGRAPH
+ {0x8ACF, 0x5A24}, //1853 #CJK UNIFIED IDEOGRAPH
+ {0x8AD0, 0x5A26}, //1854 #CJK UNIFIED IDEOGRAPH
+ {0x8AD1, 0x5A27}, //1855 #CJK UNIFIED IDEOGRAPH
+ {0x8AD2, 0x5A28}, //1856 #CJK UNIFIED IDEOGRAPH
+ {0x8AD3, 0x5A2A}, //1857 #CJK UNIFIED IDEOGRAPH
+ {0x8AD4, 0x5A2B}, //1858 #CJK UNIFIED IDEOGRAPH
+ {0x8AD5, 0x5A2C}, //1859 #CJK UNIFIED IDEOGRAPH
+ {0x8AD6, 0x5A2D}, //1860 #CJK UNIFIED IDEOGRAPH
+ {0x8AD7, 0x5A2E}, //1861 #CJK UNIFIED IDEOGRAPH
+ {0x8AD8, 0x5A2F}, //1862 #CJK UNIFIED IDEOGRAPH
+ {0x8AD9, 0x5A30}, //1863 #CJK UNIFIED IDEOGRAPH
+ {0x8ADA, 0x5A33}, //1864 #CJK UNIFIED IDEOGRAPH
+ {0x8ADB, 0x5A35}, //1865 #CJK UNIFIED IDEOGRAPH
+ {0x8ADC, 0x5A37}, //1866 #CJK UNIFIED IDEOGRAPH
+ {0x8ADD, 0x5A38}, //1867 #CJK UNIFIED IDEOGRAPH
+ {0x8ADE, 0x5A39}, //1868 #CJK UNIFIED IDEOGRAPH
+ {0x8ADF, 0x5A3A}, //1869 #CJK UNIFIED IDEOGRAPH
+ {0x8AE0, 0x5A3B}, //1870 #CJK UNIFIED IDEOGRAPH
+ {0x8AE1, 0x5A3D}, //1871 #CJK UNIFIED IDEOGRAPH
+ {0x8AE2, 0x5A3E}, //1872 #CJK UNIFIED IDEOGRAPH
+ {0x8AE3, 0x5A3F}, //1873 #CJK UNIFIED IDEOGRAPH
+ {0x8AE4, 0x5A41}, //1874 #CJK UNIFIED IDEOGRAPH
+ {0x8AE5, 0x5A42}, //1875 #CJK UNIFIED IDEOGRAPH
+ {0x8AE6, 0x5A43}, //1876 #CJK UNIFIED IDEOGRAPH
+ {0x8AE7, 0x5A44}, //1877 #CJK UNIFIED IDEOGRAPH
+ {0x8AE8, 0x5A45}, //1878 #CJK UNIFIED IDEOGRAPH
+ {0x8AE9, 0x5A47}, //1879 #CJK UNIFIED IDEOGRAPH
+ {0x8AEA, 0x5A48}, //1880 #CJK UNIFIED IDEOGRAPH
+ {0x8AEB, 0x5A4B}, //1881 #CJK UNIFIED IDEOGRAPH
+ {0x8AEC, 0x5A4C}, //1882 #CJK UNIFIED IDEOGRAPH
+ {0x8AED, 0x5A4D}, //1883 #CJK UNIFIED IDEOGRAPH
+ {0x8AEE, 0x5A4E}, //1884 #CJK UNIFIED IDEOGRAPH
+ {0x8AEF, 0x5A4F}, //1885 #CJK UNIFIED IDEOGRAPH
+ {0x8AF0, 0x5A50}, //1886 #CJK UNIFIED IDEOGRAPH
+ {0x8AF1, 0x5A51}, //1887 #CJK UNIFIED IDEOGRAPH
+ {0x8AF2, 0x5A52}, //1888 #CJK UNIFIED IDEOGRAPH
+ {0x8AF3, 0x5A53}, //1889 #CJK UNIFIED IDEOGRAPH
+ {0x8AF4, 0x5A54}, //1890 #CJK UNIFIED IDEOGRAPH
+ {0x8AF5, 0x5A56}, //1891 #CJK UNIFIED IDEOGRAPH
+ {0x8AF6, 0x5A57}, //1892 #CJK UNIFIED IDEOGRAPH
+ {0x8AF7, 0x5A58}, //1893 #CJK UNIFIED IDEOGRAPH
+ {0x8AF8, 0x5A59}, //1894 #CJK UNIFIED IDEOGRAPH
+ {0x8AF9, 0x5A5B}, //1895 #CJK UNIFIED IDEOGRAPH
+ {0x8AFA, 0x5A5C}, //1896 #CJK UNIFIED IDEOGRAPH
+ {0x8AFB, 0x5A5D}, //1897 #CJK UNIFIED IDEOGRAPH
+ {0x8AFC, 0x5A5E}, //1898 #CJK UNIFIED IDEOGRAPH
+ {0x8AFD, 0x5A5F}, //1899 #CJK UNIFIED IDEOGRAPH
+ {0x8AFE, 0x5A60}, //1900 #CJK UNIFIED IDEOGRAPH
+ {0x8B40, 0x5A61}, //1901 #CJK UNIFIED IDEOGRAPH
+ {0x8B41, 0x5A63}, //1902 #CJK UNIFIED IDEOGRAPH
+ {0x8B42, 0x5A64}, //1903 #CJK UNIFIED IDEOGRAPH
+ {0x8B43, 0x5A65}, //1904 #CJK UNIFIED IDEOGRAPH
+ {0x8B44, 0x5A66}, //1905 #CJK UNIFIED IDEOGRAPH
+ {0x8B45, 0x5A68}, //1906 #CJK UNIFIED IDEOGRAPH
+ {0x8B46, 0x5A69}, //1907 #CJK UNIFIED IDEOGRAPH
+ {0x8B47, 0x5A6B}, //1908 #CJK UNIFIED IDEOGRAPH
+ {0x8B48, 0x5A6C}, //1909 #CJK UNIFIED IDEOGRAPH
+ {0x8B49, 0x5A6D}, //1910 #CJK UNIFIED IDEOGRAPH
+ {0x8B4A, 0x5A6E}, //1911 #CJK UNIFIED IDEOGRAPH
+ {0x8B4B, 0x5A6F}, //1912 #CJK UNIFIED IDEOGRAPH
+ {0x8B4C, 0x5A70}, //1913 #CJK UNIFIED IDEOGRAPH
+ {0x8B4D, 0x5A71}, //1914 #CJK UNIFIED IDEOGRAPH
+ {0x8B4E, 0x5A72}, //1915 #CJK UNIFIED IDEOGRAPH
+ {0x8B4F, 0x5A73}, //1916 #CJK UNIFIED IDEOGRAPH
+ {0x8B50, 0x5A78}, //1917 #CJK UNIFIED IDEOGRAPH
+ {0x8B51, 0x5A79}, //1918 #CJK UNIFIED IDEOGRAPH
+ {0x8B52, 0x5A7B}, //1919 #CJK UNIFIED IDEOGRAPH
+ {0x8B53, 0x5A7C}, //1920 #CJK UNIFIED IDEOGRAPH
+ {0x8B54, 0x5A7D}, //1921 #CJK UNIFIED IDEOGRAPH
+ {0x8B55, 0x5A7E}, //1922 #CJK UNIFIED IDEOGRAPH
+ {0x8B56, 0x5A80}, //1923 #CJK UNIFIED IDEOGRAPH
+ {0x8B57, 0x5A81}, //1924 #CJK UNIFIED IDEOGRAPH
+ {0x8B58, 0x5A82}, //1925 #CJK UNIFIED IDEOGRAPH
+ {0x8B59, 0x5A83}, //1926 #CJK UNIFIED IDEOGRAPH
+ {0x8B5A, 0x5A84}, //1927 #CJK UNIFIED IDEOGRAPH
+ {0x8B5B, 0x5A85}, //1928 #CJK UNIFIED IDEOGRAPH
+ {0x8B5C, 0x5A86}, //1929 #CJK UNIFIED IDEOGRAPH
+ {0x8B5D, 0x5A87}, //1930 #CJK UNIFIED IDEOGRAPH
+ {0x8B5E, 0x5A88}, //1931 #CJK UNIFIED IDEOGRAPH
+ {0x8B5F, 0x5A89}, //1932 #CJK UNIFIED IDEOGRAPH
+ {0x8B60, 0x5A8A}, //1933 #CJK UNIFIED IDEOGRAPH
+ {0x8B61, 0x5A8B}, //1934 #CJK UNIFIED IDEOGRAPH
+ {0x8B62, 0x5A8C}, //1935 #CJK UNIFIED IDEOGRAPH
+ {0x8B63, 0x5A8D}, //1936 #CJK UNIFIED IDEOGRAPH
+ {0x8B64, 0x5A8E}, //1937 #CJK UNIFIED IDEOGRAPH
+ {0x8B65, 0x5A8F}, //1938 #CJK UNIFIED IDEOGRAPH
+ {0x8B66, 0x5A90}, //1939 #CJK UNIFIED IDEOGRAPH
+ {0x8B67, 0x5A91}, //1940 #CJK UNIFIED IDEOGRAPH
+ {0x8B68, 0x5A93}, //1941 #CJK UNIFIED IDEOGRAPH
+ {0x8B69, 0x5A94}, //1942 #CJK UNIFIED IDEOGRAPH
+ {0x8B6A, 0x5A95}, //1943 #CJK UNIFIED IDEOGRAPH
+ {0x8B6B, 0x5A96}, //1944 #CJK UNIFIED IDEOGRAPH
+ {0x8B6C, 0x5A97}, //1945 #CJK UNIFIED IDEOGRAPH
+ {0x8B6D, 0x5A98}, //1946 #CJK UNIFIED IDEOGRAPH
+ {0x8B6E, 0x5A99}, //1947 #CJK UNIFIED IDEOGRAPH
+ {0x8B6F, 0x5A9C}, //1948 #CJK UNIFIED IDEOGRAPH
+ {0x8B70, 0x5A9D}, //1949 #CJK UNIFIED IDEOGRAPH
+ {0x8B71, 0x5A9E}, //1950 #CJK UNIFIED IDEOGRAPH
+ {0x8B72, 0x5A9F}, //1951 #CJK UNIFIED IDEOGRAPH
+ {0x8B73, 0x5AA0}, //1952 #CJK UNIFIED IDEOGRAPH
+ {0x8B74, 0x5AA1}, //1953 #CJK UNIFIED IDEOGRAPH
+ {0x8B75, 0x5AA2}, //1954 #CJK UNIFIED IDEOGRAPH
+ {0x8B76, 0x5AA3}, //1955 #CJK UNIFIED IDEOGRAPH
+ {0x8B77, 0x5AA4}, //1956 #CJK UNIFIED IDEOGRAPH
+ {0x8B78, 0x5AA5}, //1957 #CJK UNIFIED IDEOGRAPH
+ {0x8B79, 0x5AA6}, //1958 #CJK UNIFIED IDEOGRAPH
+ {0x8B7A, 0x5AA7}, //1959 #CJK UNIFIED IDEOGRAPH
+ {0x8B7B, 0x5AA8}, //1960 #CJK UNIFIED IDEOGRAPH
+ {0x8B7C, 0x5AA9}, //1961 #CJK UNIFIED IDEOGRAPH
+ {0x8B7D, 0x5AAB}, //1962 #CJK UNIFIED IDEOGRAPH
+ {0x8B7E, 0x5AAC}, //1963 #CJK UNIFIED IDEOGRAPH
+ {0x8B80, 0x5AAD}, //1964 #CJK UNIFIED IDEOGRAPH
+ {0x8B81, 0x5AAE}, //1965 #CJK UNIFIED IDEOGRAPH
+ {0x8B82, 0x5AAF}, //1966 #CJK UNIFIED IDEOGRAPH
+ {0x8B83, 0x5AB0}, //1967 #CJK UNIFIED IDEOGRAPH
+ {0x8B84, 0x5AB1}, //1968 #CJK UNIFIED IDEOGRAPH
+ {0x8B85, 0x5AB4}, //1969 #CJK UNIFIED IDEOGRAPH
+ {0x8B86, 0x5AB6}, //1970 #CJK UNIFIED IDEOGRAPH
+ {0x8B87, 0x5AB7}, //1971 #CJK UNIFIED IDEOGRAPH
+ {0x8B88, 0x5AB9}, //1972 #CJK UNIFIED IDEOGRAPH
+ {0x8B89, 0x5ABA}, //1973 #CJK UNIFIED IDEOGRAPH
+ {0x8B8A, 0x5ABB}, //1974 #CJK UNIFIED IDEOGRAPH
+ {0x8B8B, 0x5ABC}, //1975 #CJK UNIFIED IDEOGRAPH
+ {0x8B8C, 0x5ABD}, //1976 #CJK UNIFIED IDEOGRAPH
+ {0x8B8D, 0x5ABF}, //1977 #CJK UNIFIED IDEOGRAPH
+ {0x8B8E, 0x5AC0}, //1978 #CJK UNIFIED IDEOGRAPH
+ {0x8B8F, 0x5AC3}, //1979 #CJK UNIFIED IDEOGRAPH
+ {0x8B90, 0x5AC4}, //1980 #CJK UNIFIED IDEOGRAPH
+ {0x8B91, 0x5AC5}, //1981 #CJK UNIFIED IDEOGRAPH
+ {0x8B92, 0x5AC6}, //1982 #CJK UNIFIED IDEOGRAPH
+ {0x8B93, 0x5AC7}, //1983 #CJK UNIFIED IDEOGRAPH
+ {0x8B94, 0x5AC8}, //1984 #CJK UNIFIED IDEOGRAPH
+ {0x8B95, 0x5ACA}, //1985 #CJK UNIFIED IDEOGRAPH
+ {0x8B96, 0x5ACB}, //1986 #CJK UNIFIED IDEOGRAPH
+ {0x8B97, 0x5ACD}, //1987 #CJK UNIFIED IDEOGRAPH
+ {0x8B98, 0x5ACE}, //1988 #CJK UNIFIED IDEOGRAPH
+ {0x8B99, 0x5ACF}, //1989 #CJK UNIFIED IDEOGRAPH
+ {0x8B9A, 0x5AD0}, //1990 #CJK UNIFIED IDEOGRAPH
+ {0x8B9B, 0x5AD1}, //1991 #CJK UNIFIED IDEOGRAPH
+ {0x8B9C, 0x5AD3}, //1992 #CJK UNIFIED IDEOGRAPH
+ {0x8B9D, 0x5AD5}, //1993 #CJK UNIFIED IDEOGRAPH
+ {0x8B9E, 0x5AD7}, //1994 #CJK UNIFIED IDEOGRAPH
+ {0x8B9F, 0x5AD9}, //1995 #CJK UNIFIED IDEOGRAPH
+ {0x8BA0, 0x5ADA}, //1996 #CJK UNIFIED IDEOGRAPH
+ {0x8BA1, 0x5ADB}, //1997 #CJK UNIFIED IDEOGRAPH
+ {0x8BA2, 0x5ADD}, //1998 #CJK UNIFIED IDEOGRAPH
+ {0x8BA3, 0x5ADE}, //1999 #CJK UNIFIED IDEOGRAPH
+ {0x8BA4, 0x5ADF}, //2000 #CJK UNIFIED IDEOGRAPH
+ {0x8BA5, 0x5AE2}, //2001 #CJK UNIFIED IDEOGRAPH
+ {0x8BA6, 0x5AE4}, //2002 #CJK UNIFIED IDEOGRAPH
+ {0x8BA7, 0x5AE5}, //2003 #CJK UNIFIED IDEOGRAPH
+ {0x8BA8, 0x5AE7}, //2004 #CJK UNIFIED IDEOGRAPH
+ {0x8BA9, 0x5AE8}, //2005 #CJK UNIFIED IDEOGRAPH
+ {0x8BAA, 0x5AEA}, //2006 #CJK UNIFIED IDEOGRAPH
+ {0x8BAB, 0x5AEC}, //2007 #CJK UNIFIED IDEOGRAPH
+ {0x8BAC, 0x5AED}, //2008 #CJK UNIFIED IDEOGRAPH
+ {0x8BAD, 0x5AEE}, //2009 #CJK UNIFIED IDEOGRAPH
+ {0x8BAE, 0x5AEF}, //2010 #CJK UNIFIED IDEOGRAPH
+ {0x8BAF, 0x5AF0}, //2011 #CJK UNIFIED IDEOGRAPH
+ {0x8BB0, 0x5AF2}, //2012 #CJK UNIFIED IDEOGRAPH
+ {0x8BB1, 0x5AF3}, //2013 #CJK UNIFIED IDEOGRAPH
+ {0x8BB2, 0x5AF4}, //2014 #CJK UNIFIED IDEOGRAPH
+ {0x8BB3, 0x5AF5}, //2015 #CJK UNIFIED IDEOGRAPH
+ {0x8BB4, 0x5AF6}, //2016 #CJK UNIFIED IDEOGRAPH
+ {0x8BB5, 0x5AF7}, //2017 #CJK UNIFIED IDEOGRAPH
+ {0x8BB6, 0x5AF8}, //2018 #CJK UNIFIED IDEOGRAPH
+ {0x8BB7, 0x5AF9}, //2019 #CJK UNIFIED IDEOGRAPH
+ {0x8BB8, 0x5AFA}, //2020 #CJK UNIFIED IDEOGRAPH
+ {0x8BB9, 0x5AFB}, //2021 #CJK UNIFIED IDEOGRAPH
+ {0x8BBA, 0x5AFC}, //2022 #CJK UNIFIED IDEOGRAPH
+ {0x8BBB, 0x5AFD}, //2023 #CJK UNIFIED IDEOGRAPH
+ {0x8BBC, 0x5AFE}, //2024 #CJK UNIFIED IDEOGRAPH
+ {0x8BBD, 0x5AFF}, //2025 #CJK UNIFIED IDEOGRAPH
+ {0x8BBE, 0x5B00}, //2026 #CJK UNIFIED IDEOGRAPH
+ {0x8BBF, 0x5B01}, //2027 #CJK UNIFIED IDEOGRAPH
+ {0x8BC0, 0x5B02}, //2028 #CJK UNIFIED IDEOGRAPH
+ {0x8BC1, 0x5B03}, //2029 #CJK UNIFIED IDEOGRAPH
+ {0x8BC2, 0x5B04}, //2030 #CJK UNIFIED IDEOGRAPH
+ {0x8BC3, 0x5B05}, //2031 #CJK UNIFIED IDEOGRAPH
+ {0x8BC4, 0x5B06}, //2032 #CJK UNIFIED IDEOGRAPH
+ {0x8BC5, 0x5B07}, //2033 #CJK UNIFIED IDEOGRAPH
+ {0x8BC6, 0x5B08}, //2034 #CJK UNIFIED IDEOGRAPH
+ {0x8BC7, 0x5B0A}, //2035 #CJK UNIFIED IDEOGRAPH
+ {0x8BC8, 0x5B0B}, //2036 #CJK UNIFIED IDEOGRAPH
+ {0x8BC9, 0x5B0C}, //2037 #CJK UNIFIED IDEOGRAPH
+ {0x8BCA, 0x5B0D}, //2038 #CJK UNIFIED IDEOGRAPH
+ {0x8BCB, 0x5B0E}, //2039 #CJK UNIFIED IDEOGRAPH
+ {0x8BCC, 0x5B0F}, //2040 #CJK UNIFIED IDEOGRAPH
+ {0x8BCD, 0x5B10}, //2041 #CJK UNIFIED IDEOGRAPH
+ {0x8BCE, 0x5B11}, //2042 #CJK UNIFIED IDEOGRAPH
+ {0x8BCF, 0x5B12}, //2043 #CJK UNIFIED IDEOGRAPH
+ {0x8BD0, 0x5B13}, //2044 #CJK UNIFIED IDEOGRAPH
+ {0x8BD1, 0x5B14}, //2045 #CJK UNIFIED IDEOGRAPH
+ {0x8BD2, 0x5B15}, //2046 #CJK UNIFIED IDEOGRAPH
+ {0x8BD3, 0x5B18}, //2047 #CJK UNIFIED IDEOGRAPH
+ {0x8BD4, 0x5B19}, //2048 #CJK UNIFIED IDEOGRAPH
+ {0x8BD5, 0x5B1A}, //2049 #CJK UNIFIED IDEOGRAPH
+ {0x8BD6, 0x5B1B}, //2050 #CJK UNIFIED IDEOGRAPH
+ {0x8BD7, 0x5B1C}, //2051 #CJK UNIFIED IDEOGRAPH
+ {0x8BD8, 0x5B1D}, //2052 #CJK UNIFIED IDEOGRAPH
+ {0x8BD9, 0x5B1E}, //2053 #CJK UNIFIED IDEOGRAPH
+ {0x8BDA, 0x5B1F}, //2054 #CJK UNIFIED IDEOGRAPH
+ {0x8BDB, 0x5B20}, //2055 #CJK UNIFIED IDEOGRAPH
+ {0x8BDC, 0x5B21}, //2056 #CJK UNIFIED IDEOGRAPH
+ {0x8BDD, 0x5B22}, //2057 #CJK UNIFIED IDEOGRAPH
+ {0x8BDE, 0x5B23}, //2058 #CJK UNIFIED IDEOGRAPH
+ {0x8BDF, 0x5B24}, //2059 #CJK UNIFIED IDEOGRAPH
+ {0x8BE0, 0x5B25}, //2060 #CJK UNIFIED IDEOGRAPH
+ {0x8BE1, 0x5B26}, //2061 #CJK UNIFIED IDEOGRAPH
+ {0x8BE2, 0x5B27}, //2062 #CJK UNIFIED IDEOGRAPH
+ {0x8BE3, 0x5B28}, //2063 #CJK UNIFIED IDEOGRAPH
+ {0x8BE4, 0x5B29}, //2064 #CJK UNIFIED IDEOGRAPH
+ {0x8BE5, 0x5B2A}, //2065 #CJK UNIFIED IDEOGRAPH
+ {0x8BE6, 0x5B2B}, //2066 #CJK UNIFIED IDEOGRAPH
+ {0x8BE7, 0x5B2C}, //2067 #CJK UNIFIED IDEOGRAPH
+ {0x8BE8, 0x5B2D}, //2068 #CJK UNIFIED IDEOGRAPH
+ {0x8BE9, 0x5B2E}, //2069 #CJK UNIFIED IDEOGRAPH
+ {0x8BEA, 0x5B2F}, //2070 #CJK UNIFIED IDEOGRAPH
+ {0x8BEB, 0x5B30}, //2071 #CJK UNIFIED IDEOGRAPH
+ {0x8BEC, 0x5B31}, //2072 #CJK UNIFIED IDEOGRAPH
+ {0x8BED, 0x5B33}, //2073 #CJK UNIFIED IDEOGRAPH
+ {0x8BEE, 0x5B35}, //2074 #CJK UNIFIED IDEOGRAPH
+ {0x8BEF, 0x5B36}, //2075 #CJK UNIFIED IDEOGRAPH
+ {0x8BF0, 0x5B38}, //2076 #CJK UNIFIED IDEOGRAPH
+ {0x8BF1, 0x5B39}, //2077 #CJK UNIFIED IDEOGRAPH
+ {0x8BF2, 0x5B3A}, //2078 #CJK UNIFIED IDEOGRAPH
+ {0x8BF3, 0x5B3B}, //2079 #CJK UNIFIED IDEOGRAPH
+ {0x8BF4, 0x5B3C}, //2080 #CJK UNIFIED IDEOGRAPH
+ {0x8BF5, 0x5B3D}, //2081 #CJK UNIFIED IDEOGRAPH
+ {0x8BF6, 0x5B3E}, //2082 #CJK UNIFIED IDEOGRAPH
+ {0x8BF7, 0x5B3F}, //2083 #CJK UNIFIED IDEOGRAPH
+ {0x8BF8, 0x5B41}, //2084 #CJK UNIFIED IDEOGRAPH
+ {0x8BF9, 0x5B42}, //2085 #CJK UNIFIED IDEOGRAPH
+ {0x8BFA, 0x5B43}, //2086 #CJK UNIFIED IDEOGRAPH
+ {0x8BFB, 0x5B44}, //2087 #CJK UNIFIED IDEOGRAPH
+ {0x8BFC, 0x5B45}, //2088 #CJK UNIFIED IDEOGRAPH
+ {0x8BFD, 0x5B46}, //2089 #CJK UNIFIED IDEOGRAPH
+ {0x8BFE, 0x5B47}, //2090 #CJK UNIFIED IDEOGRAPH
+ {0x8C40, 0x5B48}, //2091 #CJK UNIFIED IDEOGRAPH
+ {0x8C41, 0x5B49}, //2092 #CJK UNIFIED IDEOGRAPH
+ {0x8C42, 0x5B4A}, //2093 #CJK UNIFIED IDEOGRAPH
+ {0x8C43, 0x5B4B}, //2094 #CJK UNIFIED IDEOGRAPH
+ {0x8C44, 0x5B4C}, //2095 #CJK UNIFIED IDEOGRAPH
+ {0x8C45, 0x5B4D}, //2096 #CJK UNIFIED IDEOGRAPH
+ {0x8C46, 0x5B4E}, //2097 #CJK UNIFIED IDEOGRAPH
+ {0x8C47, 0x5B4F}, //2098 #CJK UNIFIED IDEOGRAPH
+ {0x8C48, 0x5B52}, //2099 #CJK UNIFIED IDEOGRAPH
+ {0x8C49, 0x5B56}, //2100 #CJK UNIFIED IDEOGRAPH
+ {0x8C4A, 0x5B5E}, //2101 #CJK UNIFIED IDEOGRAPH
+ {0x8C4B, 0x5B60}, //2102 #CJK UNIFIED IDEOGRAPH
+ {0x8C4C, 0x5B61}, //2103 #CJK UNIFIED IDEOGRAPH
+ {0x8C4D, 0x5B67}, //2104 #CJK UNIFIED IDEOGRAPH
+ {0x8C4E, 0x5B68}, //2105 #CJK UNIFIED IDEOGRAPH
+ {0x8C4F, 0x5B6B}, //2106 #CJK UNIFIED IDEOGRAPH
+ {0x8C50, 0x5B6D}, //2107 #CJK UNIFIED IDEOGRAPH
+ {0x8C51, 0x5B6E}, //2108 #CJK UNIFIED IDEOGRAPH
+ {0x8C52, 0x5B6F}, //2109 #CJK UNIFIED IDEOGRAPH
+ {0x8C53, 0x5B72}, //2110 #CJK UNIFIED IDEOGRAPH
+ {0x8C54, 0x5B74}, //2111 #CJK UNIFIED IDEOGRAPH
+ {0x8C55, 0x5B76}, //2112 #CJK UNIFIED IDEOGRAPH
+ {0x8C56, 0x5B77}, //2113 #CJK UNIFIED IDEOGRAPH
+ {0x8C57, 0x5B78}, //2114 #CJK UNIFIED IDEOGRAPH
+ {0x8C58, 0x5B79}, //2115 #CJK UNIFIED IDEOGRAPH
+ {0x8C59, 0x5B7B}, //2116 #CJK UNIFIED IDEOGRAPH
+ {0x8C5A, 0x5B7C}, //2117 #CJK UNIFIED IDEOGRAPH
+ {0x8C5B, 0x5B7E}, //2118 #CJK UNIFIED IDEOGRAPH
+ {0x8C5C, 0x5B7F}, //2119 #CJK UNIFIED IDEOGRAPH
+ {0x8C5D, 0x5B82}, //2120 #CJK UNIFIED IDEOGRAPH
+ {0x8C5E, 0x5B86}, //2121 #CJK UNIFIED IDEOGRAPH
+ {0x8C5F, 0x5B8A}, //2122 #CJK UNIFIED IDEOGRAPH
+ {0x8C60, 0x5B8D}, //2123 #CJK UNIFIED IDEOGRAPH
+ {0x8C61, 0x5B8E}, //2124 #CJK UNIFIED IDEOGRAPH
+ {0x8C62, 0x5B90}, //2125 #CJK UNIFIED IDEOGRAPH
+ {0x8C63, 0x5B91}, //2126 #CJK UNIFIED IDEOGRAPH
+ {0x8C64, 0x5B92}, //2127 #CJK UNIFIED IDEOGRAPH
+ {0x8C65, 0x5B94}, //2128 #CJK UNIFIED IDEOGRAPH
+ {0x8C66, 0x5B96}, //2129 #CJK UNIFIED IDEOGRAPH
+ {0x8C67, 0x5B9F}, //2130 #CJK UNIFIED IDEOGRAPH
+ {0x8C68, 0x5BA7}, //2131 #CJK UNIFIED IDEOGRAPH
+ {0x8C69, 0x5BA8}, //2132 #CJK UNIFIED IDEOGRAPH
+ {0x8C6A, 0x5BA9}, //2133 #CJK UNIFIED IDEOGRAPH
+ {0x8C6B, 0x5BAC}, //2134 #CJK UNIFIED IDEOGRAPH
+ {0x8C6C, 0x5BAD}, //2135 #CJK UNIFIED IDEOGRAPH
+ {0x8C6D, 0x5BAE}, //2136 #CJK UNIFIED IDEOGRAPH
+ {0x8C6E, 0x5BAF}, //2137 #CJK UNIFIED IDEOGRAPH
+ {0x8C6F, 0x5BB1}, //2138 #CJK UNIFIED IDEOGRAPH
+ {0x8C70, 0x5BB2}, //2139 #CJK UNIFIED IDEOGRAPH
+ {0x8C71, 0x5BB7}, //2140 #CJK UNIFIED IDEOGRAPH
+ {0x8C72, 0x5BBA}, //2141 #CJK UNIFIED IDEOGRAPH
+ {0x8C73, 0x5BBB}, //2142 #CJK UNIFIED IDEOGRAPH
+ {0x8C74, 0x5BBC}, //2143 #CJK UNIFIED IDEOGRAPH
+ {0x8C75, 0x5BC0}, //2144 #CJK UNIFIED IDEOGRAPH
+ {0x8C76, 0x5BC1}, //2145 #CJK UNIFIED IDEOGRAPH
+ {0x8C77, 0x5BC3}, //2146 #CJK UNIFIED IDEOGRAPH
+ {0x8C78, 0x5BC8}, //2147 #CJK UNIFIED IDEOGRAPH
+ {0x8C79, 0x5BC9}, //2148 #CJK UNIFIED IDEOGRAPH
+ {0x8C7A, 0x5BCA}, //2149 #CJK UNIFIED IDEOGRAPH
+ {0x8C7B, 0x5BCB}, //2150 #CJK UNIFIED IDEOGRAPH
+ {0x8C7C, 0x5BCD}, //2151 #CJK UNIFIED IDEOGRAPH
+ {0x8C7D, 0x5BCE}, //2152 #CJK UNIFIED IDEOGRAPH
+ {0x8C7E, 0x5BCF}, //2153 #CJK UNIFIED IDEOGRAPH
+ {0x8C80, 0x5BD1}, //2154 #CJK UNIFIED IDEOGRAPH
+ {0x8C81, 0x5BD4}, //2155 #CJK UNIFIED IDEOGRAPH
+ {0x8C82, 0x5BD5}, //2156 #CJK UNIFIED IDEOGRAPH
+ {0x8C83, 0x5BD6}, //2157 #CJK UNIFIED IDEOGRAPH
+ {0x8C84, 0x5BD7}, //2158 #CJK UNIFIED IDEOGRAPH
+ {0x8C85, 0x5BD8}, //2159 #CJK UNIFIED IDEOGRAPH
+ {0x8C86, 0x5BD9}, //2160 #CJK UNIFIED IDEOGRAPH
+ {0x8C87, 0x5BDA}, //2161 #CJK UNIFIED IDEOGRAPH
+ {0x8C88, 0x5BDB}, //2162 #CJK UNIFIED IDEOGRAPH
+ {0x8C89, 0x5BDC}, //2163 #CJK UNIFIED IDEOGRAPH
+ {0x8C8A, 0x5BE0}, //2164 #CJK UNIFIED IDEOGRAPH
+ {0x8C8B, 0x5BE2}, //2165 #CJK UNIFIED IDEOGRAPH
+ {0x8C8C, 0x5BE3}, //2166 #CJK UNIFIED IDEOGRAPH
+ {0x8C8D, 0x5BE6}, //2167 #CJK UNIFIED IDEOGRAPH
+ {0x8C8E, 0x5BE7}, //2168 #CJK UNIFIED IDEOGRAPH
+ {0x8C8F, 0x5BE9}, //2169 #CJK UNIFIED IDEOGRAPH
+ {0x8C90, 0x5BEA}, //2170 #CJK UNIFIED IDEOGRAPH
+ {0x8C91, 0x5BEB}, //2171 #CJK UNIFIED IDEOGRAPH
+ {0x8C92, 0x5BEC}, //2172 #CJK UNIFIED IDEOGRAPH
+ {0x8C93, 0x5BED}, //2173 #CJK UNIFIED IDEOGRAPH
+ {0x8C94, 0x5BEF}, //2174 #CJK UNIFIED IDEOGRAPH
+ {0x8C95, 0x5BF1}, //2175 #CJK UNIFIED IDEOGRAPH
+ {0x8C96, 0x5BF2}, //2176 #CJK UNIFIED IDEOGRAPH
+ {0x8C97, 0x5BF3}, //2177 #CJK UNIFIED IDEOGRAPH
+ {0x8C98, 0x5BF4}, //2178 #CJK UNIFIED IDEOGRAPH
+ {0x8C99, 0x5BF5}, //2179 #CJK UNIFIED IDEOGRAPH
+ {0x8C9A, 0x5BF6}, //2180 #CJK UNIFIED IDEOGRAPH
+ {0x8C9B, 0x5BF7}, //2181 #CJK UNIFIED IDEOGRAPH
+ {0x8C9C, 0x5BFD}, //2182 #CJK UNIFIED IDEOGRAPH
+ {0x8C9D, 0x5BFE}, //2183 #CJK UNIFIED IDEOGRAPH
+ {0x8C9E, 0x5C00}, //2184 #CJK UNIFIED IDEOGRAPH
+ {0x8C9F, 0x5C02}, //2185 #CJK UNIFIED IDEOGRAPH
+ {0x8CA0, 0x5C03}, //2186 #CJK UNIFIED IDEOGRAPH
+ {0x8CA1, 0x5C05}, //2187 #CJK UNIFIED IDEOGRAPH
+ {0x8CA2, 0x5C07}, //2188 #CJK UNIFIED IDEOGRAPH
+ {0x8CA3, 0x5C08}, //2189 #CJK UNIFIED IDEOGRAPH
+ {0x8CA4, 0x5C0B}, //2190 #CJK UNIFIED IDEOGRAPH
+ {0x8CA5, 0x5C0C}, //2191 #CJK UNIFIED IDEOGRAPH
+ {0x8CA6, 0x5C0D}, //2192 #CJK UNIFIED IDEOGRAPH
+ {0x8CA7, 0x5C0E}, //2193 #CJK UNIFIED IDEOGRAPH
+ {0x8CA8, 0x5C10}, //2194 #CJK UNIFIED IDEOGRAPH
+ {0x8CA9, 0x5C12}, //2195 #CJK UNIFIED IDEOGRAPH
+ {0x8CAA, 0x5C13}, //2196 #CJK UNIFIED IDEOGRAPH
+ {0x8CAB, 0x5C17}, //2197 #CJK UNIFIED IDEOGRAPH
+ {0x8CAC, 0x5C19}, //2198 #CJK UNIFIED IDEOGRAPH
+ {0x8CAD, 0x5C1B}, //2199 #CJK UNIFIED IDEOGRAPH
+ {0x8CAE, 0x5C1E}, //2200 #CJK UNIFIED IDEOGRAPH
+ {0x8CAF, 0x5C1F}, //2201 #CJK UNIFIED IDEOGRAPH
+ {0x8CB0, 0x5C20}, //2202 #CJK UNIFIED IDEOGRAPH
+ {0x8CB1, 0x5C21}, //2203 #CJK UNIFIED IDEOGRAPH
+ {0x8CB2, 0x5C23}, //2204 #CJK UNIFIED IDEOGRAPH
+ {0x8CB3, 0x5C26}, //2205 #CJK UNIFIED IDEOGRAPH
+ {0x8CB4, 0x5C28}, //2206 #CJK UNIFIED IDEOGRAPH
+ {0x8CB5, 0x5C29}, //2207 #CJK UNIFIED IDEOGRAPH
+ {0x8CB6, 0x5C2A}, //2208 #CJK UNIFIED IDEOGRAPH
+ {0x8CB7, 0x5C2B}, //2209 #CJK UNIFIED IDEOGRAPH
+ {0x8CB8, 0x5C2D}, //2210 #CJK UNIFIED IDEOGRAPH
+ {0x8CB9, 0x5C2E}, //2211 #CJK UNIFIED IDEOGRAPH
+ {0x8CBA, 0x5C2F}, //2212 #CJK UNIFIED IDEOGRAPH
+ {0x8CBB, 0x5C30}, //2213 #CJK UNIFIED IDEOGRAPH
+ {0x8CBC, 0x5C32}, //2214 #CJK UNIFIED IDEOGRAPH
+ {0x8CBD, 0x5C33}, //2215 #CJK UNIFIED IDEOGRAPH
+ {0x8CBE, 0x5C35}, //2216 #CJK UNIFIED IDEOGRAPH
+ {0x8CBF, 0x5C36}, //2217 #CJK UNIFIED IDEOGRAPH
+ {0x8CC0, 0x5C37}, //2218 #CJK UNIFIED IDEOGRAPH
+ {0x8CC1, 0x5C43}, //2219 #CJK UNIFIED IDEOGRAPH
+ {0x8CC2, 0x5C44}, //2220 #CJK UNIFIED IDEOGRAPH
+ {0x8CC3, 0x5C46}, //2221 #CJK UNIFIED IDEOGRAPH
+ {0x8CC4, 0x5C47}, //2222 #CJK UNIFIED IDEOGRAPH
+ {0x8CC5, 0x5C4C}, //2223 #CJK UNIFIED IDEOGRAPH
+ {0x8CC6, 0x5C4D}, //2224 #CJK UNIFIED IDEOGRAPH
+ {0x8CC7, 0x5C52}, //2225 #CJK UNIFIED IDEOGRAPH
+ {0x8CC8, 0x5C53}, //2226 #CJK UNIFIED IDEOGRAPH
+ {0x8CC9, 0x5C54}, //2227 #CJK UNIFIED IDEOGRAPH
+ {0x8CCA, 0x5C56}, //2228 #CJK UNIFIED IDEOGRAPH
+ {0x8CCB, 0x5C57}, //2229 #CJK UNIFIED IDEOGRAPH
+ {0x8CCC, 0x5C58}, //2230 #CJK UNIFIED IDEOGRAPH
+ {0x8CCD, 0x5C5A}, //2231 #CJK UNIFIED IDEOGRAPH
+ {0x8CCE, 0x5C5B}, //2232 #CJK UNIFIED IDEOGRAPH
+ {0x8CCF, 0x5C5C}, //2233 #CJK UNIFIED IDEOGRAPH
+ {0x8CD0, 0x5C5D}, //2234 #CJK UNIFIED IDEOGRAPH
+ {0x8CD1, 0x5C5F}, //2235 #CJK UNIFIED IDEOGRAPH
+ {0x8CD2, 0x5C62}, //2236 #CJK UNIFIED IDEOGRAPH
+ {0x8CD3, 0x5C64}, //2237 #CJK UNIFIED IDEOGRAPH
+ {0x8CD4, 0x5C67}, //2238 #CJK UNIFIED IDEOGRAPH
+ {0x8CD5, 0x5C68}, //2239 #CJK UNIFIED IDEOGRAPH
+ {0x8CD6, 0x5C69}, //2240 #CJK UNIFIED IDEOGRAPH
+ {0x8CD7, 0x5C6A}, //2241 #CJK UNIFIED IDEOGRAPH
+ {0x8CD8, 0x5C6B}, //2242 #CJK UNIFIED IDEOGRAPH
+ {0x8CD9, 0x5C6C}, //2243 #CJK UNIFIED IDEOGRAPH
+ {0x8CDA, 0x5C6D}, //2244 #CJK UNIFIED IDEOGRAPH
+ {0x8CDB, 0x5C70}, //2245 #CJK UNIFIED IDEOGRAPH
+ {0x8CDC, 0x5C72}, //2246 #CJK UNIFIED IDEOGRAPH
+ {0x8CDD, 0x5C73}, //2247 #CJK UNIFIED IDEOGRAPH
+ {0x8CDE, 0x5C74}, //2248 #CJK UNIFIED IDEOGRAPH
+ {0x8CDF, 0x5C75}, //2249 #CJK UNIFIED IDEOGRAPH
+ {0x8CE0, 0x5C76}, //2250 #CJK UNIFIED IDEOGRAPH
+ {0x8CE1, 0x5C77}, //2251 #CJK UNIFIED IDEOGRAPH
+ {0x8CE2, 0x5C78}, //2252 #CJK UNIFIED IDEOGRAPH
+ {0x8CE3, 0x5C7B}, //2253 #CJK UNIFIED IDEOGRAPH
+ {0x8CE4, 0x5C7C}, //2254 #CJK UNIFIED IDEOGRAPH
+ {0x8CE5, 0x5C7D}, //2255 #CJK UNIFIED IDEOGRAPH
+ {0x8CE6, 0x5C7E}, //2256 #CJK UNIFIED IDEOGRAPH
+ {0x8CE7, 0x5C80}, //2257 #CJK UNIFIED IDEOGRAPH
+ {0x8CE8, 0x5C83}, //2258 #CJK UNIFIED IDEOGRAPH
+ {0x8CE9, 0x5C84}, //2259 #CJK UNIFIED IDEOGRAPH
+ {0x8CEA, 0x5C85}, //2260 #CJK UNIFIED IDEOGRAPH
+ {0x8CEB, 0x5C86}, //2261 #CJK UNIFIED IDEOGRAPH
+ {0x8CEC, 0x5C87}, //2262 #CJK UNIFIED IDEOGRAPH
+ {0x8CED, 0x5C89}, //2263 #CJK UNIFIED IDEOGRAPH
+ {0x8CEE, 0x5C8A}, //2264 #CJK UNIFIED IDEOGRAPH
+ {0x8CEF, 0x5C8B}, //2265 #CJK UNIFIED IDEOGRAPH
+ {0x8CF0, 0x5C8E}, //2266 #CJK UNIFIED IDEOGRAPH
+ {0x8CF1, 0x5C8F}, //2267 #CJK UNIFIED IDEOGRAPH
+ {0x8CF2, 0x5C92}, //2268 #CJK UNIFIED IDEOGRAPH
+ {0x8CF3, 0x5C93}, //2269 #CJK UNIFIED IDEOGRAPH
+ {0x8CF4, 0x5C95}, //2270 #CJK UNIFIED IDEOGRAPH
+ {0x8CF5, 0x5C9D}, //2271 #CJK UNIFIED IDEOGRAPH
+ {0x8CF6, 0x5C9E}, //2272 #CJK UNIFIED IDEOGRAPH
+ {0x8CF7, 0x5C9F}, //2273 #CJK UNIFIED IDEOGRAPH
+ {0x8CF8, 0x5CA0}, //2274 #CJK UNIFIED IDEOGRAPH
+ {0x8CF9, 0x5CA1}, //2275 #CJK UNIFIED IDEOGRAPH
+ {0x8CFA, 0x5CA4}, //2276 #CJK UNIFIED IDEOGRAPH
+ {0x8CFB, 0x5CA5}, //2277 #CJK UNIFIED IDEOGRAPH
+ {0x8CFC, 0x5CA6}, //2278 #CJK UNIFIED IDEOGRAPH
+ {0x8CFD, 0x5CA7}, //2279 #CJK UNIFIED IDEOGRAPH
+ {0x8CFE, 0x5CA8}, //2280 #CJK UNIFIED IDEOGRAPH
+ {0x8D40, 0x5CAA}, //2281 #CJK UNIFIED IDEOGRAPH
+ {0x8D41, 0x5CAE}, //2282 #CJK UNIFIED IDEOGRAPH
+ {0x8D42, 0x5CAF}, //2283 #CJK UNIFIED IDEOGRAPH
+ {0x8D43, 0x5CB0}, //2284 #CJK UNIFIED IDEOGRAPH
+ {0x8D44, 0x5CB2}, //2285 #CJK UNIFIED IDEOGRAPH
+ {0x8D45, 0x5CB4}, //2286 #CJK UNIFIED IDEOGRAPH
+ {0x8D46, 0x5CB6}, //2287 #CJK UNIFIED IDEOGRAPH
+ {0x8D47, 0x5CB9}, //2288 #CJK UNIFIED IDEOGRAPH
+ {0x8D48, 0x5CBA}, //2289 #CJK UNIFIED IDEOGRAPH
+ {0x8D49, 0x5CBB}, //2290 #CJK UNIFIED IDEOGRAPH
+ {0x8D4A, 0x5CBC}, //2291 #CJK UNIFIED IDEOGRAPH
+ {0x8D4B, 0x5CBE}, //2292 #CJK UNIFIED IDEOGRAPH
+ {0x8D4C, 0x5CC0}, //2293 #CJK UNIFIED IDEOGRAPH
+ {0x8D4D, 0x5CC2}, //2294 #CJK UNIFIED IDEOGRAPH
+ {0x8D4E, 0x5CC3}, //2295 #CJK UNIFIED IDEOGRAPH
+ {0x8D4F, 0x5CC5}, //2296 #CJK UNIFIED IDEOGRAPH
+ {0x8D50, 0x5CC6}, //2297 #CJK UNIFIED IDEOGRAPH
+ {0x8D51, 0x5CC7}, //2298 #CJK UNIFIED IDEOGRAPH
+ {0x8D52, 0x5CC8}, //2299 #CJK UNIFIED IDEOGRAPH
+ {0x8D53, 0x5CC9}, //2300 #CJK UNIFIED IDEOGRAPH
+ {0x8D54, 0x5CCA}, //2301 #CJK UNIFIED IDEOGRAPH
+ {0x8D55, 0x5CCC}, //2302 #CJK UNIFIED IDEOGRAPH
+ {0x8D56, 0x5CCD}, //2303 #CJK UNIFIED IDEOGRAPH
+ {0x8D57, 0x5CCE}, //2304 #CJK UNIFIED IDEOGRAPH
+ {0x8D58, 0x5CCF}, //2305 #CJK UNIFIED IDEOGRAPH
+ {0x8D59, 0x5CD0}, //2306 #CJK UNIFIED IDEOGRAPH
+ {0x8D5A, 0x5CD1}, //2307 #CJK UNIFIED IDEOGRAPH
+ {0x8D5B, 0x5CD3}, //2308 #CJK UNIFIED IDEOGRAPH
+ {0x8D5C, 0x5CD4}, //2309 #CJK UNIFIED IDEOGRAPH
+ {0x8D5D, 0x5CD5}, //2310 #CJK UNIFIED IDEOGRAPH
+ {0x8D5E, 0x5CD6}, //2311 #CJK UNIFIED IDEOGRAPH
+ {0x8D5F, 0x5CD7}, //2312 #CJK UNIFIED IDEOGRAPH
+ {0x8D60, 0x5CD8}, //2313 #CJK UNIFIED IDEOGRAPH
+ {0x8D61, 0x5CDA}, //2314 #CJK UNIFIED IDEOGRAPH
+ {0x8D62, 0x5CDB}, //2315 #CJK UNIFIED IDEOGRAPH
+ {0x8D63, 0x5CDC}, //2316 #CJK UNIFIED IDEOGRAPH
+ {0x8D64, 0x5CDD}, //2317 #CJK UNIFIED IDEOGRAPH
+ {0x8D65, 0x5CDE}, //2318 #CJK UNIFIED IDEOGRAPH
+ {0x8D66, 0x5CDF}, //2319 #CJK UNIFIED IDEOGRAPH
+ {0x8D67, 0x5CE0}, //2320 #CJK UNIFIED IDEOGRAPH
+ {0x8D68, 0x5CE2}, //2321 #CJK UNIFIED IDEOGRAPH
+ {0x8D69, 0x5CE3}, //2322 #CJK UNIFIED IDEOGRAPH
+ {0x8D6A, 0x5CE7}, //2323 #CJK UNIFIED IDEOGRAPH
+ {0x8D6B, 0x5CE9}, //2324 #CJK UNIFIED IDEOGRAPH
+ {0x8D6C, 0x5CEB}, //2325 #CJK UNIFIED IDEOGRAPH
+ {0x8D6D, 0x5CEC}, //2326 #CJK UNIFIED IDEOGRAPH
+ {0x8D6E, 0x5CEE}, //2327 #CJK UNIFIED IDEOGRAPH
+ {0x8D6F, 0x5CEF}, //2328 #CJK UNIFIED IDEOGRAPH
+ {0x8D70, 0x5CF1}, //2329 #CJK UNIFIED IDEOGRAPH
+ {0x8D71, 0x5CF2}, //2330 #CJK UNIFIED IDEOGRAPH
+ {0x8D72, 0x5CF3}, //2331 #CJK UNIFIED IDEOGRAPH
+ {0x8D73, 0x5CF4}, //2332 #CJK UNIFIED IDEOGRAPH
+ {0x8D74, 0x5CF5}, //2333 #CJK UNIFIED IDEOGRAPH
+ {0x8D75, 0x5CF6}, //2334 #CJK UNIFIED IDEOGRAPH
+ {0x8D76, 0x5CF7}, //2335 #CJK UNIFIED IDEOGRAPH
+ {0x8D77, 0x5CF8}, //2336 #CJK UNIFIED IDEOGRAPH
+ {0x8D78, 0x5CF9}, //2337 #CJK UNIFIED IDEOGRAPH
+ {0x8D79, 0x5CFA}, //2338 #CJK UNIFIED IDEOGRAPH
+ {0x8D7A, 0x5CFC}, //2339 #CJK UNIFIED IDEOGRAPH
+ {0x8D7B, 0x5CFD}, //2340 #CJK UNIFIED IDEOGRAPH
+ {0x8D7C, 0x5CFE}, //2341 #CJK UNIFIED IDEOGRAPH
+ {0x8D7D, 0x5CFF}, //2342 #CJK UNIFIED IDEOGRAPH
+ {0x8D7E, 0x5D00}, //2343 #CJK UNIFIED IDEOGRAPH
+ {0x8D80, 0x5D01}, //2344 #CJK UNIFIED IDEOGRAPH
+ {0x8D81, 0x5D04}, //2345 #CJK UNIFIED IDEOGRAPH
+ {0x8D82, 0x5D05}, //2346 #CJK UNIFIED IDEOGRAPH
+ {0x8D83, 0x5D08}, //2347 #CJK UNIFIED IDEOGRAPH
+ {0x8D84, 0x5D09}, //2348 #CJK UNIFIED IDEOGRAPH
+ {0x8D85, 0x5D0A}, //2349 #CJK UNIFIED IDEOGRAPH
+ {0x8D86, 0x5D0B}, //2350 #CJK UNIFIED IDEOGRAPH
+ {0x8D87, 0x5D0C}, //2351 #CJK UNIFIED IDEOGRAPH
+ {0x8D88, 0x5D0D}, //2352 #CJK UNIFIED IDEOGRAPH
+ {0x8D89, 0x5D0F}, //2353 #CJK UNIFIED IDEOGRAPH
+ {0x8D8A, 0x5D10}, //2354 #CJK UNIFIED IDEOGRAPH
+ {0x8D8B, 0x5D11}, //2355 #CJK UNIFIED IDEOGRAPH
+ {0x8D8C, 0x5D12}, //2356 #CJK UNIFIED IDEOGRAPH
+ {0x8D8D, 0x5D13}, //2357 #CJK UNIFIED IDEOGRAPH
+ {0x8D8E, 0x5D15}, //2358 #CJK UNIFIED IDEOGRAPH
+ {0x8D8F, 0x5D17}, //2359 #CJK UNIFIED IDEOGRAPH
+ {0x8D90, 0x5D18}, //2360 #CJK UNIFIED IDEOGRAPH
+ {0x8D91, 0x5D19}, //2361 #CJK UNIFIED IDEOGRAPH
+ {0x8D92, 0x5D1A}, //2362 #CJK UNIFIED IDEOGRAPH
+ {0x8D93, 0x5D1C}, //2363 #CJK UNIFIED IDEOGRAPH
+ {0x8D94, 0x5D1D}, //2364 #CJK UNIFIED IDEOGRAPH
+ {0x8D95, 0x5D1F}, //2365 #CJK UNIFIED IDEOGRAPH
+ {0x8D96, 0x5D20}, //2366 #CJK UNIFIED IDEOGRAPH
+ {0x8D97, 0x5D21}, //2367 #CJK UNIFIED IDEOGRAPH
+ {0x8D98, 0x5D22}, //2368 #CJK UNIFIED IDEOGRAPH
+ {0x8D99, 0x5D23}, //2369 #CJK UNIFIED IDEOGRAPH
+ {0x8D9A, 0x5D25}, //2370 #CJK UNIFIED IDEOGRAPH
+ {0x8D9B, 0x5D28}, //2371 #CJK UNIFIED IDEOGRAPH
+ {0x8D9C, 0x5D2A}, //2372 #CJK UNIFIED IDEOGRAPH
+ {0x8D9D, 0x5D2B}, //2373 #CJK UNIFIED IDEOGRAPH
+ {0x8D9E, 0x5D2C}, //2374 #CJK UNIFIED IDEOGRAPH
+ {0x8D9F, 0x5D2F}, //2375 #CJK UNIFIED IDEOGRAPH
+ {0x8DA0, 0x5D30}, //2376 #CJK UNIFIED IDEOGRAPH
+ {0x8DA1, 0x5D31}, //2377 #CJK UNIFIED IDEOGRAPH
+ {0x8DA2, 0x5D32}, //2378 #CJK UNIFIED IDEOGRAPH
+ {0x8DA3, 0x5D33}, //2379 #CJK UNIFIED IDEOGRAPH
+ {0x8DA4, 0x5D35}, //2380 #CJK UNIFIED IDEOGRAPH
+ {0x8DA5, 0x5D36}, //2381 #CJK UNIFIED IDEOGRAPH
+ {0x8DA6, 0x5D37}, //2382 #CJK UNIFIED IDEOGRAPH
+ {0x8DA7, 0x5D38}, //2383 #CJK UNIFIED IDEOGRAPH
+ {0x8DA8, 0x5D39}, //2384 #CJK UNIFIED IDEOGRAPH
+ {0x8DA9, 0x5D3A}, //2385 #CJK UNIFIED IDEOGRAPH
+ {0x8DAA, 0x5D3B}, //2386 #CJK UNIFIED IDEOGRAPH
+ {0x8DAB, 0x5D3C}, //2387 #CJK UNIFIED IDEOGRAPH
+ {0x8DAC, 0x5D3F}, //2388 #CJK UNIFIED IDEOGRAPH
+ {0x8DAD, 0x5D40}, //2389 #CJK UNIFIED IDEOGRAPH
+ {0x8DAE, 0x5D41}, //2390 #CJK UNIFIED IDEOGRAPH
+ {0x8DAF, 0x5D42}, //2391 #CJK UNIFIED IDEOGRAPH
+ {0x8DB0, 0x5D43}, //2392 #CJK UNIFIED IDEOGRAPH
+ {0x8DB1, 0x5D44}, //2393 #CJK UNIFIED IDEOGRAPH
+ {0x8DB2, 0x5D45}, //2394 #CJK UNIFIED IDEOGRAPH
+ {0x8DB3, 0x5D46}, //2395 #CJK UNIFIED IDEOGRAPH
+ {0x8DB4, 0x5D48}, //2396 #CJK UNIFIED IDEOGRAPH
+ {0x8DB5, 0x5D49}, //2397 #CJK UNIFIED IDEOGRAPH
+ {0x8DB6, 0x5D4D}, //2398 #CJK UNIFIED IDEOGRAPH
+ {0x8DB7, 0x5D4E}, //2399 #CJK UNIFIED IDEOGRAPH
+ {0x8DB8, 0x5D4F}, //2400 #CJK UNIFIED IDEOGRAPH
+ {0x8DB9, 0x5D50}, //2401 #CJK UNIFIED IDEOGRAPH
+ {0x8DBA, 0x5D51}, //2402 #CJK UNIFIED IDEOGRAPH
+ {0x8DBB, 0x5D52}, //2403 #CJK UNIFIED IDEOGRAPH
+ {0x8DBC, 0x5D53}, //2404 #CJK UNIFIED IDEOGRAPH
+ {0x8DBD, 0x5D54}, //2405 #CJK UNIFIED IDEOGRAPH
+ {0x8DBE, 0x5D55}, //2406 #CJK UNIFIED IDEOGRAPH
+ {0x8DBF, 0x5D56}, //2407 #CJK UNIFIED IDEOGRAPH
+ {0x8DC0, 0x5D57}, //2408 #CJK UNIFIED IDEOGRAPH
+ {0x8DC1, 0x5D59}, //2409 #CJK UNIFIED IDEOGRAPH
+ {0x8DC2, 0x5D5A}, //2410 #CJK UNIFIED IDEOGRAPH
+ {0x8DC3, 0x5D5C}, //2411 #CJK UNIFIED IDEOGRAPH
+ {0x8DC4, 0x5D5E}, //2412 #CJK UNIFIED IDEOGRAPH
+ {0x8DC5, 0x5D5F}, //2413 #CJK UNIFIED IDEOGRAPH
+ {0x8DC6, 0x5D60}, //2414 #CJK UNIFIED IDEOGRAPH
+ {0x8DC7, 0x5D61}, //2415 #CJK UNIFIED IDEOGRAPH
+ {0x8DC8, 0x5D62}, //2416 #CJK UNIFIED IDEOGRAPH
+ {0x8DC9, 0x5D63}, //2417 #CJK UNIFIED IDEOGRAPH
+ {0x8DCA, 0x5D64}, //2418 #CJK UNIFIED IDEOGRAPH
+ {0x8DCB, 0x5D65}, //2419 #CJK UNIFIED IDEOGRAPH
+ {0x8DCC, 0x5D66}, //2420 #CJK UNIFIED IDEOGRAPH
+ {0x8DCD, 0x5D67}, //2421 #CJK UNIFIED IDEOGRAPH
+ {0x8DCE, 0x5D68}, //2422 #CJK UNIFIED IDEOGRAPH
+ {0x8DCF, 0x5D6A}, //2423 #CJK UNIFIED IDEOGRAPH
+ {0x8DD0, 0x5D6D}, //2424 #CJK UNIFIED IDEOGRAPH
+ {0x8DD1, 0x5D6E}, //2425 #CJK UNIFIED IDEOGRAPH
+ {0x8DD2, 0x5D70}, //2426 #CJK UNIFIED IDEOGRAPH
+ {0x8DD3, 0x5D71}, //2427 #CJK UNIFIED IDEOGRAPH
+ {0x8DD4, 0x5D72}, //2428 #CJK UNIFIED IDEOGRAPH
+ {0x8DD5, 0x5D73}, //2429 #CJK UNIFIED IDEOGRAPH
+ {0x8DD6, 0x5D75}, //2430 #CJK UNIFIED IDEOGRAPH
+ {0x8DD7, 0x5D76}, //2431 #CJK UNIFIED IDEOGRAPH
+ {0x8DD8, 0x5D77}, //2432 #CJK UNIFIED IDEOGRAPH
+ {0x8DD9, 0x5D78}, //2433 #CJK UNIFIED IDEOGRAPH
+ {0x8DDA, 0x5D79}, //2434 #CJK UNIFIED IDEOGRAPH
+ {0x8DDB, 0x5D7A}, //2435 #CJK UNIFIED IDEOGRAPH
+ {0x8DDC, 0x5D7B}, //2436 #CJK UNIFIED IDEOGRAPH
+ {0x8DDD, 0x5D7C}, //2437 #CJK UNIFIED IDEOGRAPH
+ {0x8DDE, 0x5D7D}, //2438 #CJK UNIFIED IDEOGRAPH
+ {0x8DDF, 0x5D7E}, //2439 #CJK UNIFIED IDEOGRAPH
+ {0x8DE0, 0x5D7F}, //2440 #CJK UNIFIED IDEOGRAPH
+ {0x8DE1, 0x5D80}, //2441 #CJK UNIFIED IDEOGRAPH
+ {0x8DE2, 0x5D81}, //2442 #CJK UNIFIED IDEOGRAPH
+ {0x8DE3, 0x5D83}, //2443 #CJK UNIFIED IDEOGRAPH
+ {0x8DE4, 0x5D84}, //2444 #CJK UNIFIED IDEOGRAPH
+ {0x8DE5, 0x5D85}, //2445 #CJK UNIFIED IDEOGRAPH
+ {0x8DE6, 0x5D86}, //2446 #CJK UNIFIED IDEOGRAPH
+ {0x8DE7, 0x5D87}, //2447 #CJK UNIFIED IDEOGRAPH
+ {0x8DE8, 0x5D88}, //2448 #CJK UNIFIED IDEOGRAPH
+ {0x8DE9, 0x5D89}, //2449 #CJK UNIFIED IDEOGRAPH
+ {0x8DEA, 0x5D8A}, //2450 #CJK UNIFIED IDEOGRAPH
+ {0x8DEB, 0x5D8B}, //2451 #CJK UNIFIED IDEOGRAPH
+ {0x8DEC, 0x5D8C}, //2452 #CJK UNIFIED IDEOGRAPH
+ {0x8DED, 0x5D8D}, //2453 #CJK UNIFIED IDEOGRAPH
+ {0x8DEE, 0x5D8E}, //2454 #CJK UNIFIED IDEOGRAPH
+ {0x8DEF, 0x5D8F}, //2455 #CJK UNIFIED IDEOGRAPH
+ {0x8DF0, 0x5D90}, //2456 #CJK UNIFIED IDEOGRAPH
+ {0x8DF1, 0x5D91}, //2457 #CJK UNIFIED IDEOGRAPH
+ {0x8DF2, 0x5D92}, //2458 #CJK UNIFIED IDEOGRAPH
+ {0x8DF3, 0x5D93}, //2459 #CJK UNIFIED IDEOGRAPH
+ {0x8DF4, 0x5D94}, //2460 #CJK UNIFIED IDEOGRAPH
+ {0x8DF5, 0x5D95}, //2461 #CJK UNIFIED IDEOGRAPH
+ {0x8DF6, 0x5D96}, //2462 #CJK UNIFIED IDEOGRAPH
+ {0x8DF7, 0x5D97}, //2463 #CJK UNIFIED IDEOGRAPH
+ {0x8DF8, 0x5D98}, //2464 #CJK UNIFIED IDEOGRAPH
+ {0x8DF9, 0x5D9A}, //2465 #CJK UNIFIED IDEOGRAPH
+ {0x8DFA, 0x5D9B}, //2466 #CJK UNIFIED IDEOGRAPH
+ {0x8DFB, 0x5D9C}, //2467 #CJK UNIFIED IDEOGRAPH
+ {0x8DFC, 0x5D9E}, //2468 #CJK UNIFIED IDEOGRAPH
+ {0x8DFD, 0x5D9F}, //2469 #CJK UNIFIED IDEOGRAPH
+ {0x8DFE, 0x5DA0}, //2470 #CJK UNIFIED IDEOGRAPH
+ {0x8E40, 0x5DA1}, //2471 #CJK UNIFIED IDEOGRAPH
+ {0x8E41, 0x5DA2}, //2472 #CJK UNIFIED IDEOGRAPH
+ {0x8E42, 0x5DA3}, //2473 #CJK UNIFIED IDEOGRAPH
+ {0x8E43, 0x5DA4}, //2474 #CJK UNIFIED IDEOGRAPH
+ {0x8E44, 0x5DA5}, //2475 #CJK UNIFIED IDEOGRAPH
+ {0x8E45, 0x5DA6}, //2476 #CJK UNIFIED IDEOGRAPH
+ {0x8E46, 0x5DA7}, //2477 #CJK UNIFIED IDEOGRAPH
+ {0x8E47, 0x5DA8}, //2478 #CJK UNIFIED IDEOGRAPH
+ {0x8E48, 0x5DA9}, //2479 #CJK UNIFIED IDEOGRAPH
+ {0x8E49, 0x5DAA}, //2480 #CJK UNIFIED IDEOGRAPH
+ {0x8E4A, 0x5DAB}, //2481 #CJK UNIFIED IDEOGRAPH
+ {0x8E4B, 0x5DAC}, //2482 #CJK UNIFIED IDEOGRAPH
+ {0x8E4C, 0x5DAD}, //2483 #CJK UNIFIED IDEOGRAPH
+ {0x8E4D, 0x5DAE}, //2484 #CJK UNIFIED IDEOGRAPH
+ {0x8E4E, 0x5DAF}, //2485 #CJK UNIFIED IDEOGRAPH
+ {0x8E4F, 0x5DB0}, //2486 #CJK UNIFIED IDEOGRAPH
+ {0x8E50, 0x5DB1}, //2487 #CJK UNIFIED IDEOGRAPH
+ {0x8E51, 0x5DB2}, //2488 #CJK UNIFIED IDEOGRAPH
+ {0x8E52, 0x5DB3}, //2489 #CJK UNIFIED IDEOGRAPH
+ {0x8E53, 0x5DB4}, //2490 #CJK UNIFIED IDEOGRAPH
+ {0x8E54, 0x5DB5}, //2491 #CJK UNIFIED IDEOGRAPH
+ {0x8E55, 0x5DB6}, //2492 #CJK UNIFIED IDEOGRAPH
+ {0x8E56, 0x5DB8}, //2493 #CJK UNIFIED IDEOGRAPH
+ {0x8E57, 0x5DB9}, //2494 #CJK UNIFIED IDEOGRAPH
+ {0x8E58, 0x5DBA}, //2495 #CJK UNIFIED IDEOGRAPH
+ {0x8E59, 0x5DBB}, //2496 #CJK UNIFIED IDEOGRAPH
+ {0x8E5A, 0x5DBC}, //2497 #CJK UNIFIED IDEOGRAPH
+ {0x8E5B, 0x5DBD}, //2498 #CJK UNIFIED IDEOGRAPH
+ {0x8E5C, 0x5DBE}, //2499 #CJK UNIFIED IDEOGRAPH
+ {0x8E5D, 0x5DBF}, //2500 #CJK UNIFIED IDEOGRAPH
+ {0x8E5E, 0x5DC0}, //2501 #CJK UNIFIED IDEOGRAPH
+ {0x8E5F, 0x5DC1}, //2502 #CJK UNIFIED IDEOGRAPH
+ {0x8E60, 0x5DC2}, //2503 #CJK UNIFIED IDEOGRAPH
+ {0x8E61, 0x5DC3}, //2504 #CJK UNIFIED IDEOGRAPH
+ {0x8E62, 0x5DC4}, //2505 #CJK UNIFIED IDEOGRAPH
+ {0x8E63, 0x5DC6}, //2506 #CJK UNIFIED IDEOGRAPH
+ {0x8E64, 0x5DC7}, //2507 #CJK UNIFIED IDEOGRAPH
+ {0x8E65, 0x5DC8}, //2508 #CJK UNIFIED IDEOGRAPH
+ {0x8E66, 0x5DC9}, //2509 #CJK UNIFIED IDEOGRAPH
+ {0x8E67, 0x5DCA}, //2510 #CJK UNIFIED IDEOGRAPH
+ {0x8E68, 0x5DCB}, //2511 #CJK UNIFIED IDEOGRAPH
+ {0x8E69, 0x5DCC}, //2512 #CJK UNIFIED IDEOGRAPH
+ {0x8E6A, 0x5DCE}, //2513 #CJK UNIFIED IDEOGRAPH
+ {0x8E6B, 0x5DCF}, //2514 #CJK UNIFIED IDEOGRAPH
+ {0x8E6C, 0x5DD0}, //2515 #CJK UNIFIED IDEOGRAPH
+ {0x8E6D, 0x5DD1}, //2516 #CJK UNIFIED IDEOGRAPH
+ {0x8E6E, 0x5DD2}, //2517 #CJK UNIFIED IDEOGRAPH
+ {0x8E6F, 0x5DD3}, //2518 #CJK UNIFIED IDEOGRAPH
+ {0x8E70, 0x5DD4}, //2519 #CJK UNIFIED IDEOGRAPH
+ {0x8E71, 0x5DD5}, //2520 #CJK UNIFIED IDEOGRAPH
+ {0x8E72, 0x5DD6}, //2521 #CJK UNIFIED IDEOGRAPH
+ {0x8E73, 0x5DD7}, //2522 #CJK UNIFIED IDEOGRAPH
+ {0x8E74, 0x5DD8}, //2523 #CJK UNIFIED IDEOGRAPH
+ {0x8E75, 0x5DD9}, //2524 #CJK UNIFIED IDEOGRAPH
+ {0x8E76, 0x5DDA}, //2525 #CJK UNIFIED IDEOGRAPH
+ {0x8E77, 0x5DDC}, //2526 #CJK UNIFIED IDEOGRAPH
+ {0x8E78, 0x5DDF}, //2527 #CJK UNIFIED IDEOGRAPH
+ {0x8E79, 0x5DE0}, //2528 #CJK UNIFIED IDEOGRAPH
+ {0x8E7A, 0x5DE3}, //2529 #CJK UNIFIED IDEOGRAPH
+ {0x8E7B, 0x5DE4}, //2530 #CJK UNIFIED IDEOGRAPH
+ {0x8E7C, 0x5DEA}, //2531 #CJK UNIFIED IDEOGRAPH
+ {0x8E7D, 0x5DEC}, //2532 #CJK UNIFIED IDEOGRAPH
+ {0x8E7E, 0x5DED}, //2533 #CJK UNIFIED IDEOGRAPH
+ {0x8E80, 0x5DF0}, //2534 #CJK UNIFIED IDEOGRAPH
+ {0x8E81, 0x5DF5}, //2535 #CJK UNIFIED IDEOGRAPH
+ {0x8E82, 0x5DF6}, //2536 #CJK UNIFIED IDEOGRAPH
+ {0x8E83, 0x5DF8}, //2537 #CJK UNIFIED IDEOGRAPH
+ {0x8E84, 0x5DF9}, //2538 #CJK UNIFIED IDEOGRAPH
+ {0x8E85, 0x5DFA}, //2539 #CJK UNIFIED IDEOGRAPH
+ {0x8E86, 0x5DFB}, //2540 #CJK UNIFIED IDEOGRAPH
+ {0x8E87, 0x5DFC}, //2541 #CJK UNIFIED IDEOGRAPH
+ {0x8E88, 0x5DFF}, //2542 #CJK UNIFIED IDEOGRAPH
+ {0x8E89, 0x5E00}, //2543 #CJK UNIFIED IDEOGRAPH
+ {0x8E8A, 0x5E04}, //2544 #CJK UNIFIED IDEOGRAPH
+ {0x8E8B, 0x5E07}, //2545 #CJK UNIFIED IDEOGRAPH
+ {0x8E8C, 0x5E09}, //2546 #CJK UNIFIED IDEOGRAPH
+ {0x8E8D, 0x5E0A}, //2547 #CJK UNIFIED IDEOGRAPH
+ {0x8E8E, 0x5E0B}, //2548 #CJK UNIFIED IDEOGRAPH
+ {0x8E8F, 0x5E0D}, //2549 #CJK UNIFIED IDEOGRAPH
+ {0x8E90, 0x5E0E}, //2550 #CJK UNIFIED IDEOGRAPH
+ {0x8E91, 0x5E12}, //2551 #CJK UNIFIED IDEOGRAPH
+ {0x8E92, 0x5E13}, //2552 #CJK UNIFIED IDEOGRAPH
+ {0x8E93, 0x5E17}, //2553 #CJK UNIFIED IDEOGRAPH
+ {0x8E94, 0x5E1E}, //2554 #CJK UNIFIED IDEOGRAPH
+ {0x8E95, 0x5E1F}, //2555 #CJK UNIFIED IDEOGRAPH
+ {0x8E96, 0x5E20}, //2556 #CJK UNIFIED IDEOGRAPH
+ {0x8E97, 0x5E21}, //2557 #CJK UNIFIED IDEOGRAPH
+ {0x8E98, 0x5E22}, //2558 #CJK UNIFIED IDEOGRAPH
+ {0x8E99, 0x5E23}, //2559 #CJK UNIFIED IDEOGRAPH
+ {0x8E9A, 0x5E24}, //2560 #CJK UNIFIED IDEOGRAPH
+ {0x8E9B, 0x5E25}, //2561 #CJK UNIFIED IDEOGRAPH
+ {0x8E9C, 0x5E28}, //2562 #CJK UNIFIED IDEOGRAPH
+ {0x8E9D, 0x5E29}, //2563 #CJK UNIFIED IDEOGRAPH
+ {0x8E9E, 0x5E2A}, //2564 #CJK UNIFIED IDEOGRAPH
+ {0x8E9F, 0x5E2B}, //2565 #CJK UNIFIED IDEOGRAPH
+ {0x8EA0, 0x5E2C}, //2566 #CJK UNIFIED IDEOGRAPH
+ {0x8EA1, 0x5E2F}, //2567 #CJK UNIFIED IDEOGRAPH
+ {0x8EA2, 0x5E30}, //2568 #CJK UNIFIED IDEOGRAPH
+ {0x8EA3, 0x5E32}, //2569 #CJK UNIFIED IDEOGRAPH
+ {0x8EA4, 0x5E33}, //2570 #CJK UNIFIED IDEOGRAPH
+ {0x8EA5, 0x5E34}, //2571 #CJK UNIFIED IDEOGRAPH
+ {0x8EA6, 0x5E35}, //2572 #CJK UNIFIED IDEOGRAPH
+ {0x8EA7, 0x5E36}, //2573 #CJK UNIFIED IDEOGRAPH
+ {0x8EA8, 0x5E39}, //2574 #CJK UNIFIED IDEOGRAPH
+ {0x8EA9, 0x5E3A}, //2575 #CJK UNIFIED IDEOGRAPH
+ {0x8EAA, 0x5E3E}, //2576 #CJK UNIFIED IDEOGRAPH
+ {0x8EAB, 0x5E3F}, //2577 #CJK UNIFIED IDEOGRAPH
+ {0x8EAC, 0x5E40}, //2578 #CJK UNIFIED IDEOGRAPH
+ {0x8EAD, 0x5E41}, //2579 #CJK UNIFIED IDEOGRAPH
+ {0x8EAE, 0x5E43}, //2580 #CJK UNIFIED IDEOGRAPH
+ {0x8EAF, 0x5E46}, //2581 #CJK UNIFIED IDEOGRAPH
+ {0x8EB0, 0x5E47}, //2582 #CJK UNIFIED IDEOGRAPH
+ {0x8EB1, 0x5E48}, //2583 #CJK UNIFIED IDEOGRAPH
+ {0x8EB2, 0x5E49}, //2584 #CJK UNIFIED IDEOGRAPH
+ {0x8EB3, 0x5E4A}, //2585 #CJK UNIFIED IDEOGRAPH
+ {0x8EB4, 0x5E4B}, //2586 #CJK UNIFIED IDEOGRAPH
+ {0x8EB5, 0x5E4D}, //2587 #CJK UNIFIED IDEOGRAPH
+ {0x8EB6, 0x5E4E}, //2588 #CJK UNIFIED IDEOGRAPH
+ {0x8EB7, 0x5E4F}, //2589 #CJK UNIFIED IDEOGRAPH
+ {0x8EB8, 0x5E50}, //2590 #CJK UNIFIED IDEOGRAPH
+ {0x8EB9, 0x5E51}, //2591 #CJK UNIFIED IDEOGRAPH
+ {0x8EBA, 0x5E52}, //2592 #CJK UNIFIED IDEOGRAPH
+ {0x8EBB, 0x5E53}, //2593 #CJK UNIFIED IDEOGRAPH
+ {0x8EBC, 0x5E56}, //2594 #CJK UNIFIED IDEOGRAPH
+ {0x8EBD, 0x5E57}, //2595 #CJK UNIFIED IDEOGRAPH
+ {0x8EBE, 0x5E58}, //2596 #CJK UNIFIED IDEOGRAPH
+ {0x8EBF, 0x5E59}, //2597 #CJK UNIFIED IDEOGRAPH
+ {0x8EC0, 0x5E5A}, //2598 #CJK UNIFIED IDEOGRAPH
+ {0x8EC1, 0x5E5C}, //2599 #CJK UNIFIED IDEOGRAPH
+ {0x8EC2, 0x5E5D}, //2600 #CJK UNIFIED IDEOGRAPH
+ {0x8EC3, 0x5E5F}, //2601 #CJK UNIFIED IDEOGRAPH
+ {0x8EC4, 0x5E60}, //2602 #CJK UNIFIED IDEOGRAPH
+ {0x8EC5, 0x5E63}, //2603 #CJK UNIFIED IDEOGRAPH
+ {0x8EC6, 0x5E64}, //2604 #CJK UNIFIED IDEOGRAPH
+ {0x8EC7, 0x5E65}, //2605 #CJK UNIFIED IDEOGRAPH
+ {0x8EC8, 0x5E66}, //2606 #CJK UNIFIED IDEOGRAPH
+ {0x8EC9, 0x5E67}, //2607 #CJK UNIFIED IDEOGRAPH
+ {0x8ECA, 0x5E68}, //2608 #CJK UNIFIED IDEOGRAPH
+ {0x8ECB, 0x5E69}, //2609 #CJK UNIFIED IDEOGRAPH
+ {0x8ECC, 0x5E6A}, //2610 #CJK UNIFIED IDEOGRAPH
+ {0x8ECD, 0x5E6B}, //2611 #CJK UNIFIED IDEOGRAPH
+ {0x8ECE, 0x5E6C}, //2612 #CJK UNIFIED IDEOGRAPH
+ {0x8ECF, 0x5E6D}, //2613 #CJK UNIFIED IDEOGRAPH
+ {0x8ED0, 0x5E6E}, //2614 #CJK UNIFIED IDEOGRAPH
+ {0x8ED1, 0x5E6F}, //2615 #CJK UNIFIED IDEOGRAPH
+ {0x8ED2, 0x5E70}, //2616 #CJK UNIFIED IDEOGRAPH
+ {0x8ED3, 0x5E71}, //2617 #CJK UNIFIED IDEOGRAPH
+ {0x8ED4, 0x5E75}, //2618 #CJK UNIFIED IDEOGRAPH
+ {0x8ED5, 0x5E77}, //2619 #CJK UNIFIED IDEOGRAPH
+ {0x8ED6, 0x5E79}, //2620 #CJK UNIFIED IDEOGRAPH
+ {0x8ED7, 0x5E7E}, //2621 #CJK UNIFIED IDEOGRAPH
+ {0x8ED8, 0x5E81}, //2622 #CJK UNIFIED IDEOGRAPH
+ {0x8ED9, 0x5E82}, //2623 #CJK UNIFIED IDEOGRAPH
+ {0x8EDA, 0x5E83}, //2624 #CJK UNIFIED IDEOGRAPH
+ {0x8EDB, 0x5E85}, //2625 #CJK UNIFIED IDEOGRAPH
+ {0x8EDC, 0x5E88}, //2626 #CJK UNIFIED IDEOGRAPH
+ {0x8EDD, 0x5E89}, //2627 #CJK UNIFIED IDEOGRAPH
+ {0x8EDE, 0x5E8C}, //2628 #CJK UNIFIED IDEOGRAPH
+ {0x8EDF, 0x5E8D}, //2629 #CJK UNIFIED IDEOGRAPH
+ {0x8EE0, 0x5E8E}, //2630 #CJK UNIFIED IDEOGRAPH
+ {0x8EE1, 0x5E92}, //2631 #CJK UNIFIED IDEOGRAPH
+ {0x8EE2, 0x5E98}, //2632 #CJK UNIFIED IDEOGRAPH
+ {0x8EE3, 0x5E9B}, //2633 #CJK UNIFIED IDEOGRAPH
+ {0x8EE4, 0x5E9D}, //2634 #CJK UNIFIED IDEOGRAPH
+ {0x8EE5, 0x5EA1}, //2635 #CJK UNIFIED IDEOGRAPH
+ {0x8EE6, 0x5EA2}, //2636 #CJK UNIFIED IDEOGRAPH
+ {0x8EE7, 0x5EA3}, //2637 #CJK UNIFIED IDEOGRAPH
+ {0x8EE8, 0x5EA4}, //2638 #CJK UNIFIED IDEOGRAPH
+ {0x8EE9, 0x5EA8}, //2639 #CJK UNIFIED IDEOGRAPH
+ {0x8EEA, 0x5EA9}, //2640 #CJK UNIFIED IDEOGRAPH
+ {0x8EEB, 0x5EAA}, //2641 #CJK UNIFIED IDEOGRAPH
+ {0x8EEC, 0x5EAB}, //2642 #CJK UNIFIED IDEOGRAPH
+ {0x8EED, 0x5EAC}, //2643 #CJK UNIFIED IDEOGRAPH
+ {0x8EEE, 0x5EAE}, //2644 #CJK UNIFIED IDEOGRAPH
+ {0x8EEF, 0x5EAF}, //2645 #CJK UNIFIED IDEOGRAPH
+ {0x8EF0, 0x5EB0}, //2646 #CJK UNIFIED IDEOGRAPH
+ {0x8EF1, 0x5EB1}, //2647 #CJK UNIFIED IDEOGRAPH
+ {0x8EF2, 0x5EB2}, //2648 #CJK UNIFIED IDEOGRAPH
+ {0x8EF3, 0x5EB4}, //2649 #CJK UNIFIED IDEOGRAPH
+ {0x8EF4, 0x5EBA}, //2650 #CJK UNIFIED IDEOGRAPH
+ {0x8EF5, 0x5EBB}, //2651 #CJK UNIFIED IDEOGRAPH
+ {0x8EF6, 0x5EBC}, //2652 #CJK UNIFIED IDEOGRAPH
+ {0x8EF7, 0x5EBD}, //2653 #CJK UNIFIED IDEOGRAPH
+ {0x8EF8, 0x5EBF}, //2654 #CJK UNIFIED IDEOGRAPH
+ {0x8EF9, 0x5EC0}, //2655 #CJK UNIFIED IDEOGRAPH
+ {0x8EFA, 0x5EC1}, //2656 #CJK UNIFIED IDEOGRAPH
+ {0x8EFB, 0x5EC2}, //2657 #CJK UNIFIED IDEOGRAPH
+ {0x8EFC, 0x5EC3}, //2658 #CJK UNIFIED IDEOGRAPH
+ {0x8EFD, 0x5EC4}, //2659 #CJK UNIFIED IDEOGRAPH
+ {0x8EFE, 0x5EC5}, //2660 #CJK UNIFIED IDEOGRAPH
+ {0x8F40, 0x5EC6}, //2661 #CJK UNIFIED IDEOGRAPH
+ {0x8F41, 0x5EC7}, //2662 #CJK UNIFIED IDEOGRAPH
+ {0x8F42, 0x5EC8}, //2663 #CJK UNIFIED IDEOGRAPH
+ {0x8F43, 0x5ECB}, //2664 #CJK UNIFIED IDEOGRAPH
+ {0x8F44, 0x5ECC}, //2665 #CJK UNIFIED IDEOGRAPH
+ {0x8F45, 0x5ECD}, //2666 #CJK UNIFIED IDEOGRAPH
+ {0x8F46, 0x5ECE}, //2667 #CJK UNIFIED IDEOGRAPH
+ {0x8F47, 0x5ECF}, //2668 #CJK UNIFIED IDEOGRAPH
+ {0x8F48, 0x5ED0}, //2669 #CJK UNIFIED IDEOGRAPH
+ {0x8F49, 0x5ED4}, //2670 #CJK UNIFIED IDEOGRAPH
+ {0x8F4A, 0x5ED5}, //2671 #CJK UNIFIED IDEOGRAPH
+ {0x8F4B, 0x5ED7}, //2672 #CJK UNIFIED IDEOGRAPH
+ {0x8F4C, 0x5ED8}, //2673 #CJK UNIFIED IDEOGRAPH
+ {0x8F4D, 0x5ED9}, //2674 #CJK UNIFIED IDEOGRAPH
+ {0x8F4E, 0x5EDA}, //2675 #CJK UNIFIED IDEOGRAPH
+ {0x8F4F, 0x5EDC}, //2676 #CJK UNIFIED IDEOGRAPH
+ {0x8F50, 0x5EDD}, //2677 #CJK UNIFIED IDEOGRAPH
+ {0x8F51, 0x5EDE}, //2678 #CJK UNIFIED IDEOGRAPH
+ {0x8F52, 0x5EDF}, //2679 #CJK UNIFIED IDEOGRAPH
+ {0x8F53, 0x5EE0}, //2680 #CJK UNIFIED IDEOGRAPH
+ {0x8F54, 0x5EE1}, //2681 #CJK UNIFIED IDEOGRAPH
+ {0x8F55, 0x5EE2}, //2682 #CJK UNIFIED IDEOGRAPH
+ {0x8F56, 0x5EE3}, //2683 #CJK UNIFIED IDEOGRAPH
+ {0x8F57, 0x5EE4}, //2684 #CJK UNIFIED IDEOGRAPH
+ {0x8F58, 0x5EE5}, //2685 #CJK UNIFIED IDEOGRAPH
+ {0x8F59, 0x5EE6}, //2686 #CJK UNIFIED IDEOGRAPH
+ {0x8F5A, 0x5EE7}, //2687 #CJK UNIFIED IDEOGRAPH
+ {0x8F5B, 0x5EE9}, //2688 #CJK UNIFIED IDEOGRAPH
+ {0x8F5C, 0x5EEB}, //2689 #CJK UNIFIED IDEOGRAPH
+ {0x8F5D, 0x5EEC}, //2690 #CJK UNIFIED IDEOGRAPH
+ {0x8F5E, 0x5EED}, //2691 #CJK UNIFIED IDEOGRAPH
+ {0x8F5F, 0x5EEE}, //2692 #CJK UNIFIED IDEOGRAPH
+ {0x8F60, 0x5EEF}, //2693 #CJK UNIFIED IDEOGRAPH
+ {0x8F61, 0x5EF0}, //2694 #CJK UNIFIED IDEOGRAPH
+ {0x8F62, 0x5EF1}, //2695 #CJK UNIFIED IDEOGRAPH
+ {0x8F63, 0x5EF2}, //2696 #CJK UNIFIED IDEOGRAPH
+ {0x8F64, 0x5EF3}, //2697 #CJK UNIFIED IDEOGRAPH
+ {0x8F65, 0x5EF5}, //2698 #CJK UNIFIED IDEOGRAPH
+ {0x8F66, 0x5EF8}, //2699 #CJK UNIFIED IDEOGRAPH
+ {0x8F67, 0x5EF9}, //2700 #CJK UNIFIED IDEOGRAPH
+ {0x8F68, 0x5EFB}, //2701 #CJK UNIFIED IDEOGRAPH
+ {0x8F69, 0x5EFC}, //2702 #CJK UNIFIED IDEOGRAPH
+ {0x8F6A, 0x5EFD}, //2703 #CJK UNIFIED IDEOGRAPH
+ {0x8F6B, 0x5F05}, //2704 #CJK UNIFIED IDEOGRAPH
+ {0x8F6C, 0x5F06}, //2705 #CJK UNIFIED IDEOGRAPH
+ {0x8F6D, 0x5F07}, //2706 #CJK UNIFIED IDEOGRAPH
+ {0x8F6E, 0x5F09}, //2707 #CJK UNIFIED IDEOGRAPH
+ {0x8F6F, 0x5F0C}, //2708 #CJK UNIFIED IDEOGRAPH
+ {0x8F70, 0x5F0D}, //2709 #CJK UNIFIED IDEOGRAPH
+ {0x8F71, 0x5F0E}, //2710 #CJK UNIFIED IDEOGRAPH
+ {0x8F72, 0x5F10}, //2711 #CJK UNIFIED IDEOGRAPH
+ {0x8F73, 0x5F12}, //2712 #CJK UNIFIED IDEOGRAPH
+ {0x8F74, 0x5F14}, //2713 #CJK UNIFIED IDEOGRAPH
+ {0x8F75, 0x5F16}, //2714 #CJK UNIFIED IDEOGRAPH
+ {0x8F76, 0x5F19}, //2715 #CJK UNIFIED IDEOGRAPH
+ {0x8F77, 0x5F1A}, //2716 #CJK UNIFIED IDEOGRAPH
+ {0x8F78, 0x5F1C}, //2717 #CJK UNIFIED IDEOGRAPH
+ {0x8F79, 0x5F1D}, //2718 #CJK UNIFIED IDEOGRAPH
+ {0x8F7A, 0x5F1E}, //2719 #CJK UNIFIED IDEOGRAPH
+ {0x8F7B, 0x5F21}, //2720 #CJK UNIFIED IDEOGRAPH
+ {0x8F7C, 0x5F22}, //2721 #CJK UNIFIED IDEOGRAPH
+ {0x8F7D, 0x5F23}, //2722 #CJK UNIFIED IDEOGRAPH
+ {0x8F7E, 0x5F24}, //2723 #CJK UNIFIED IDEOGRAPH
+ {0x8F80, 0x5F28}, //2724 #CJK UNIFIED IDEOGRAPH
+ {0x8F81, 0x5F2B}, //2725 #CJK UNIFIED IDEOGRAPH
+ {0x8F82, 0x5F2C}, //2726 #CJK UNIFIED IDEOGRAPH
+ {0x8F83, 0x5F2E}, //2727 #CJK UNIFIED IDEOGRAPH
+ {0x8F84, 0x5F30}, //2728 #CJK UNIFIED IDEOGRAPH
+ {0x8F85, 0x5F32}, //2729 #CJK UNIFIED IDEOGRAPH
+ {0x8F86, 0x5F33}, //2730 #CJK UNIFIED IDEOGRAPH
+ {0x8F87, 0x5F34}, //2731 #CJK UNIFIED IDEOGRAPH
+ {0x8F88, 0x5F35}, //2732 #CJK UNIFIED IDEOGRAPH
+ {0x8F89, 0x5F36}, //2733 #CJK UNIFIED IDEOGRAPH
+ {0x8F8A, 0x5F37}, //2734 #CJK UNIFIED IDEOGRAPH
+ {0x8F8B, 0x5F38}, //2735 #CJK UNIFIED IDEOGRAPH
+ {0x8F8C, 0x5F3B}, //2736 #CJK UNIFIED IDEOGRAPH
+ {0x8F8D, 0x5F3D}, //2737 #CJK UNIFIED IDEOGRAPH
+ {0x8F8E, 0x5F3E}, //2738 #CJK UNIFIED IDEOGRAPH
+ {0x8F8F, 0x5F3F}, //2739 #CJK UNIFIED IDEOGRAPH
+ {0x8F90, 0x5F41}, //2740 #CJK UNIFIED IDEOGRAPH
+ {0x8F91, 0x5F42}, //2741 #CJK UNIFIED IDEOGRAPH
+ {0x8F92, 0x5F43}, //2742 #CJK UNIFIED IDEOGRAPH
+ {0x8F93, 0x5F44}, //2743 #CJK UNIFIED IDEOGRAPH
+ {0x8F94, 0x5F45}, //2744 #CJK UNIFIED IDEOGRAPH
+ {0x8F95, 0x5F46}, //2745 #CJK UNIFIED IDEOGRAPH
+ {0x8F96, 0x5F47}, //2746 #CJK UNIFIED IDEOGRAPH
+ {0x8F97, 0x5F48}, //2747 #CJK UNIFIED IDEOGRAPH
+ {0x8F98, 0x5F49}, //2748 #CJK UNIFIED IDEOGRAPH
+ {0x8F99, 0x5F4A}, //2749 #CJK UNIFIED IDEOGRAPH
+ {0x8F9A, 0x5F4B}, //2750 #CJK UNIFIED IDEOGRAPH
+ {0x8F9B, 0x5F4C}, //2751 #CJK UNIFIED IDEOGRAPH
+ {0x8F9C, 0x5F4D}, //2752 #CJK UNIFIED IDEOGRAPH
+ {0x8F9D, 0x5F4E}, //2753 #CJK UNIFIED IDEOGRAPH
+ {0x8F9E, 0x5F4F}, //2754 #CJK UNIFIED IDEOGRAPH
+ {0x8F9F, 0x5F51}, //2755 #CJK UNIFIED IDEOGRAPH
+ {0x8FA0, 0x5F54}, //2756 #CJK UNIFIED IDEOGRAPH
+ {0x8FA1, 0x5F59}, //2757 #CJK UNIFIED IDEOGRAPH
+ {0x8FA2, 0x5F5A}, //2758 #CJK UNIFIED IDEOGRAPH
+ {0x8FA3, 0x5F5B}, //2759 #CJK UNIFIED IDEOGRAPH
+ {0x8FA4, 0x5F5C}, //2760 #CJK UNIFIED IDEOGRAPH
+ {0x8FA5, 0x5F5E}, //2761 #CJK UNIFIED IDEOGRAPH
+ {0x8FA6, 0x5F5F}, //2762 #CJK UNIFIED IDEOGRAPH
+ {0x8FA7, 0x5F60}, //2763 #CJK UNIFIED IDEOGRAPH
+ {0x8FA8, 0x5F63}, //2764 #CJK UNIFIED IDEOGRAPH
+ {0x8FA9, 0x5F65}, //2765 #CJK UNIFIED IDEOGRAPH
+ {0x8FAA, 0x5F67}, //2766 #CJK UNIFIED IDEOGRAPH
+ {0x8FAB, 0x5F68}, //2767 #CJK UNIFIED IDEOGRAPH
+ {0x8FAC, 0x5F6B}, //2768 #CJK UNIFIED IDEOGRAPH
+ {0x8FAD, 0x5F6E}, //2769 #CJK UNIFIED IDEOGRAPH
+ {0x8FAE, 0x5F6F}, //2770 #CJK UNIFIED IDEOGRAPH
+ {0x8FAF, 0x5F72}, //2771 #CJK UNIFIED IDEOGRAPH
+ {0x8FB0, 0x5F74}, //2772 #CJK UNIFIED IDEOGRAPH
+ {0x8FB1, 0x5F75}, //2773 #CJK UNIFIED IDEOGRAPH
+ {0x8FB2, 0x5F76}, //2774 #CJK UNIFIED IDEOGRAPH
+ {0x8FB3, 0x5F78}, //2775 #CJK UNIFIED IDEOGRAPH
+ {0x8FB4, 0x5F7A}, //2776 #CJK UNIFIED IDEOGRAPH
+ {0x8FB5, 0x5F7D}, //2777 #CJK UNIFIED IDEOGRAPH
+ {0x8FB6, 0x5F7E}, //2778 #CJK UNIFIED IDEOGRAPH
+ {0x8FB7, 0x5F7F}, //2779 #CJK UNIFIED IDEOGRAPH
+ {0x8FB8, 0x5F83}, //2780 #CJK UNIFIED IDEOGRAPH
+ {0x8FB9, 0x5F86}, //2781 #CJK UNIFIED IDEOGRAPH
+ {0x8FBA, 0x5F8D}, //2782 #CJK UNIFIED IDEOGRAPH
+ {0x8FBB, 0x5F8E}, //2783 #CJK UNIFIED IDEOGRAPH
+ {0x8FBC, 0x5F8F}, //2784 #CJK UNIFIED IDEOGRAPH
+ {0x8FBD, 0x5F91}, //2785 #CJK UNIFIED IDEOGRAPH
+ {0x8FBE, 0x5F93}, //2786 #CJK UNIFIED IDEOGRAPH
+ {0x8FBF, 0x5F94}, //2787 #CJK UNIFIED IDEOGRAPH
+ {0x8FC0, 0x5F96}, //2788 #CJK UNIFIED IDEOGRAPH
+ {0x8FC1, 0x5F9A}, //2789 #CJK UNIFIED IDEOGRAPH
+ {0x8FC2, 0x5F9B}, //2790 #CJK UNIFIED IDEOGRAPH
+ {0x8FC3, 0x5F9D}, //2791 #CJK UNIFIED IDEOGRAPH
+ {0x8FC4, 0x5F9E}, //2792 #CJK UNIFIED IDEOGRAPH
+ {0x8FC5, 0x5F9F}, //2793 #CJK UNIFIED IDEOGRAPH
+ {0x8FC6, 0x5FA0}, //2794 #CJK UNIFIED IDEOGRAPH
+ {0x8FC7, 0x5FA2}, //2795 #CJK UNIFIED IDEOGRAPH
+ {0x8FC8, 0x5FA3}, //2796 #CJK UNIFIED IDEOGRAPH
+ {0x8FC9, 0x5FA4}, //2797 #CJK UNIFIED IDEOGRAPH
+ {0x8FCA, 0x5FA5}, //2798 #CJK UNIFIED IDEOGRAPH
+ {0x8FCB, 0x5FA6}, //2799 #CJK UNIFIED IDEOGRAPH
+ {0x8FCC, 0x5FA7}, //2800 #CJK UNIFIED IDEOGRAPH
+ {0x8FCD, 0x5FA9}, //2801 #CJK UNIFIED IDEOGRAPH
+ {0x8FCE, 0x5FAB}, //2802 #CJK UNIFIED IDEOGRAPH
+ {0x8FCF, 0x5FAC}, //2803 #CJK UNIFIED IDEOGRAPH
+ {0x8FD0, 0x5FAF}, //2804 #CJK UNIFIED IDEOGRAPH
+ {0x8FD1, 0x5FB0}, //2805 #CJK UNIFIED IDEOGRAPH
+ {0x8FD2, 0x5FB1}, //2806 #CJK UNIFIED IDEOGRAPH
+ {0x8FD3, 0x5FB2}, //2807 #CJK UNIFIED IDEOGRAPH
+ {0x8FD4, 0x5FB3}, //2808 #CJK UNIFIED IDEOGRAPH
+ {0x8FD5, 0x5FB4}, //2809 #CJK UNIFIED IDEOGRAPH
+ {0x8FD6, 0x5FB6}, //2810 #CJK UNIFIED IDEOGRAPH
+ {0x8FD7, 0x5FB8}, //2811 #CJK UNIFIED IDEOGRAPH
+ {0x8FD8, 0x5FB9}, //2812 #CJK UNIFIED IDEOGRAPH
+ {0x8FD9, 0x5FBA}, //2813 #CJK UNIFIED IDEOGRAPH
+ {0x8FDA, 0x5FBB}, //2814 #CJK UNIFIED IDEOGRAPH
+ {0x8FDB, 0x5FBE}, //2815 #CJK UNIFIED IDEOGRAPH
+ {0x8FDC, 0x5FBF}, //2816 #CJK UNIFIED IDEOGRAPH
+ {0x8FDD, 0x5FC0}, //2817 #CJK UNIFIED IDEOGRAPH
+ {0x8FDE, 0x5FC1}, //2818 #CJK UNIFIED IDEOGRAPH
+ {0x8FDF, 0x5FC2}, //2819 #CJK UNIFIED IDEOGRAPH
+ {0x8FE0, 0x5FC7}, //2820 #CJK UNIFIED IDEOGRAPH
+ {0x8FE1, 0x5FC8}, //2821 #CJK UNIFIED IDEOGRAPH
+ {0x8FE2, 0x5FCA}, //2822 #CJK UNIFIED IDEOGRAPH
+ {0x8FE3, 0x5FCB}, //2823 #CJK UNIFIED IDEOGRAPH
+ {0x8FE4, 0x5FCE}, //2824 #CJK UNIFIED IDEOGRAPH
+ {0x8FE5, 0x5FD3}, //2825 #CJK UNIFIED IDEOGRAPH
+ {0x8FE6, 0x5FD4}, //2826 #CJK UNIFIED IDEOGRAPH
+ {0x8FE7, 0x5FD5}, //2827 #CJK UNIFIED IDEOGRAPH
+ {0x8FE8, 0x5FDA}, //2828 #CJK UNIFIED IDEOGRAPH
+ {0x8FE9, 0x5FDB}, //2829 #CJK UNIFIED IDEOGRAPH
+ {0x8FEA, 0x5FDC}, //2830 #CJK UNIFIED IDEOGRAPH
+ {0x8FEB, 0x5FDE}, //2831 #CJK UNIFIED IDEOGRAPH
+ {0x8FEC, 0x5FDF}, //2832 #CJK UNIFIED IDEOGRAPH
+ {0x8FED, 0x5FE2}, //2833 #CJK UNIFIED IDEOGRAPH
+ {0x8FEE, 0x5FE3}, //2834 #CJK UNIFIED IDEOGRAPH
+ {0x8FEF, 0x5FE5}, //2835 #CJK UNIFIED IDEOGRAPH
+ {0x8FF0, 0x5FE6}, //2836 #CJK UNIFIED IDEOGRAPH
+ {0x8FF1, 0x5FE8}, //2837 #CJK UNIFIED IDEOGRAPH
+ {0x8FF2, 0x5FE9}, //2838 #CJK UNIFIED IDEOGRAPH
+ {0x8FF3, 0x5FEC}, //2839 #CJK UNIFIED IDEOGRAPH
+ {0x8FF4, 0x5FEF}, //2840 #CJK UNIFIED IDEOGRAPH
+ {0x8FF5, 0x5FF0}, //2841 #CJK UNIFIED IDEOGRAPH
+ {0x8FF6, 0x5FF2}, //2842 #CJK UNIFIED IDEOGRAPH
+ {0x8FF7, 0x5FF3}, //2843 #CJK UNIFIED IDEOGRAPH
+ {0x8FF8, 0x5FF4}, //2844 #CJK UNIFIED IDEOGRAPH
+ {0x8FF9, 0x5FF6}, //2845 #CJK UNIFIED IDEOGRAPH
+ {0x8FFA, 0x5FF7}, //2846 #CJK UNIFIED IDEOGRAPH
+ {0x8FFB, 0x5FF9}, //2847 #CJK UNIFIED IDEOGRAPH
+ {0x8FFC, 0x5FFA}, //2848 #CJK UNIFIED IDEOGRAPH
+ {0x8FFD, 0x5FFC}, //2849 #CJK UNIFIED IDEOGRAPH
+ {0x8FFE, 0x6007}, //2850 #CJK UNIFIED IDEOGRAPH
+ {0x9040, 0x6008}, //2851 #CJK UNIFIED IDEOGRAPH
+ {0x9041, 0x6009}, //2852 #CJK UNIFIED IDEOGRAPH
+ {0x9042, 0x600B}, //2853 #CJK UNIFIED IDEOGRAPH
+ {0x9043, 0x600C}, //2854 #CJK UNIFIED IDEOGRAPH
+ {0x9044, 0x6010}, //2855 #CJK UNIFIED IDEOGRAPH
+ {0x9045, 0x6011}, //2856 #CJK UNIFIED IDEOGRAPH
+ {0x9046, 0x6013}, //2857 #CJK UNIFIED IDEOGRAPH
+ {0x9047, 0x6017}, //2858 #CJK UNIFIED IDEOGRAPH
+ {0x9048, 0x6018}, //2859 #CJK UNIFIED IDEOGRAPH
+ {0x9049, 0x601A}, //2860 #CJK UNIFIED IDEOGRAPH
+ {0x904A, 0x601E}, //2861 #CJK UNIFIED IDEOGRAPH
+ {0x904B, 0x601F}, //2862 #CJK UNIFIED IDEOGRAPH
+ {0x904C, 0x6022}, //2863 #CJK UNIFIED IDEOGRAPH
+ {0x904D, 0x6023}, //2864 #CJK UNIFIED IDEOGRAPH
+ {0x904E, 0x6024}, //2865 #CJK UNIFIED IDEOGRAPH
+ {0x904F, 0x602C}, //2866 #CJK UNIFIED IDEOGRAPH
+ {0x9050, 0x602D}, //2867 #CJK UNIFIED IDEOGRAPH
+ {0x9051, 0x602E}, //2868 #CJK UNIFIED IDEOGRAPH
+ {0x9052, 0x6030}, //2869 #CJK UNIFIED IDEOGRAPH
+ {0x9053, 0x6031}, //2870 #CJK UNIFIED IDEOGRAPH
+ {0x9054, 0x6032}, //2871 #CJK UNIFIED IDEOGRAPH
+ {0x9055, 0x6033}, //2872 #CJK UNIFIED IDEOGRAPH
+ {0x9056, 0x6034}, //2873 #CJK UNIFIED IDEOGRAPH
+ {0x9057, 0x6036}, //2874 #CJK UNIFIED IDEOGRAPH
+ {0x9058, 0x6037}, //2875 #CJK UNIFIED IDEOGRAPH
+ {0x9059, 0x6038}, //2876 #CJK UNIFIED IDEOGRAPH
+ {0x905A, 0x6039}, //2877 #CJK UNIFIED IDEOGRAPH
+ {0x905B, 0x603A}, //2878 #CJK UNIFIED IDEOGRAPH
+ {0x905C, 0x603D}, //2879 #CJK UNIFIED IDEOGRAPH
+ {0x905D, 0x603E}, //2880 #CJK UNIFIED IDEOGRAPH
+ {0x905E, 0x6040}, //2881 #CJK UNIFIED IDEOGRAPH
+ {0x905F, 0x6044}, //2882 #CJK UNIFIED IDEOGRAPH
+ {0x9060, 0x6045}, //2883 #CJK UNIFIED IDEOGRAPH
+ {0x9061, 0x6046}, //2884 #CJK UNIFIED IDEOGRAPH
+ {0x9062, 0x6047}, //2885 #CJK UNIFIED IDEOGRAPH
+ {0x9063, 0x6048}, //2886 #CJK UNIFIED IDEOGRAPH
+ {0x9064, 0x6049}, //2887 #CJK UNIFIED IDEOGRAPH
+ {0x9065, 0x604A}, //2888 #CJK UNIFIED IDEOGRAPH
+ {0x9066, 0x604C}, //2889 #CJK UNIFIED IDEOGRAPH
+ {0x9067, 0x604E}, //2890 #CJK UNIFIED IDEOGRAPH
+ {0x9068, 0x604F}, //2891 #CJK UNIFIED IDEOGRAPH
+ {0x9069, 0x6051}, //2892 #CJK UNIFIED IDEOGRAPH
+ {0x906A, 0x6053}, //2893 #CJK UNIFIED IDEOGRAPH
+ {0x906B, 0x6054}, //2894 #CJK UNIFIED IDEOGRAPH
+ {0x906C, 0x6056}, //2895 #CJK UNIFIED IDEOGRAPH
+ {0x906D, 0x6057}, //2896 #CJK UNIFIED IDEOGRAPH
+ {0x906E, 0x6058}, //2897 #CJK UNIFIED IDEOGRAPH
+ {0x906F, 0x605B}, //2898 #CJK UNIFIED IDEOGRAPH
+ {0x9070, 0x605C}, //2899 #CJK UNIFIED IDEOGRAPH
+ {0x9071, 0x605E}, //2900 #CJK UNIFIED IDEOGRAPH
+ {0x9072, 0x605F}, //2901 #CJK UNIFIED IDEOGRAPH
+ {0x9073, 0x6060}, //2902 #CJK UNIFIED IDEOGRAPH
+ {0x9074, 0x6061}, //2903 #CJK UNIFIED IDEOGRAPH
+ {0x9075, 0x6065}, //2904 #CJK UNIFIED IDEOGRAPH
+ {0x9076, 0x6066}, //2905 #CJK UNIFIED IDEOGRAPH
+ {0x9077, 0x606E}, //2906 #CJK UNIFIED IDEOGRAPH
+ {0x9078, 0x6071}, //2907 #CJK UNIFIED IDEOGRAPH
+ {0x9079, 0x6072}, //2908 #CJK UNIFIED IDEOGRAPH
+ {0x907A, 0x6074}, //2909 #CJK UNIFIED IDEOGRAPH
+ {0x907B, 0x6075}, //2910 #CJK UNIFIED IDEOGRAPH
+ {0x907C, 0x6077}, //2911 #CJK UNIFIED IDEOGRAPH
+ {0x907D, 0x607E}, //2912 #CJK UNIFIED IDEOGRAPH
+ {0x907E, 0x6080}, //2913 #CJK UNIFIED IDEOGRAPH
+ {0x9080, 0x6081}, //2914 #CJK UNIFIED IDEOGRAPH
+ {0x9081, 0x6082}, //2915 #CJK UNIFIED IDEOGRAPH
+ {0x9082, 0x6085}, //2916 #CJK UNIFIED IDEOGRAPH
+ {0x9083, 0x6086}, //2917 #CJK UNIFIED IDEOGRAPH
+ {0x9084, 0x6087}, //2918 #CJK UNIFIED IDEOGRAPH
+ {0x9085, 0x6088}, //2919 #CJK UNIFIED IDEOGRAPH
+ {0x9086, 0x608A}, //2920 #CJK UNIFIED IDEOGRAPH
+ {0x9087, 0x608B}, //2921 #CJK UNIFIED IDEOGRAPH
+ {0x9088, 0x608E}, //2922 #CJK UNIFIED IDEOGRAPH
+ {0x9089, 0x608F}, //2923 #CJK UNIFIED IDEOGRAPH
+ {0x908A, 0x6090}, //2924 #CJK UNIFIED IDEOGRAPH
+ {0x908B, 0x6091}, //2925 #CJK UNIFIED IDEOGRAPH
+ {0x908C, 0x6093}, //2926 #CJK UNIFIED IDEOGRAPH
+ {0x908D, 0x6095}, //2927 #CJK UNIFIED IDEOGRAPH
+ {0x908E, 0x6097}, //2928 #CJK UNIFIED IDEOGRAPH
+ {0x908F, 0x6098}, //2929 #CJK UNIFIED IDEOGRAPH
+ {0x9090, 0x6099}, //2930 #CJK UNIFIED IDEOGRAPH
+ {0x9091, 0x609C}, //2931 #CJK UNIFIED IDEOGRAPH
+ {0x9092, 0x609E}, //2932 #CJK UNIFIED IDEOGRAPH
+ {0x9093, 0x60A1}, //2933 #CJK UNIFIED IDEOGRAPH
+ {0x9094, 0x60A2}, //2934 #CJK UNIFIED IDEOGRAPH
+ {0x9095, 0x60A4}, //2935 #CJK UNIFIED IDEOGRAPH
+ {0x9096, 0x60A5}, //2936 #CJK UNIFIED IDEOGRAPH
+ {0x9097, 0x60A7}, //2937 #CJK UNIFIED IDEOGRAPH
+ {0x9098, 0x60A9}, //2938 #CJK UNIFIED IDEOGRAPH
+ {0x9099, 0x60AA}, //2939 #CJK UNIFIED IDEOGRAPH
+ {0x909A, 0x60AE}, //2940 #CJK UNIFIED IDEOGRAPH
+ {0x909B, 0x60B0}, //2941 #CJK UNIFIED IDEOGRAPH
+ {0x909C, 0x60B3}, //2942 #CJK UNIFIED IDEOGRAPH
+ {0x909D, 0x60B5}, //2943 #CJK UNIFIED IDEOGRAPH
+ {0x909E, 0x60B6}, //2944 #CJK UNIFIED IDEOGRAPH
+ {0x909F, 0x60B7}, //2945 #CJK UNIFIED IDEOGRAPH
+ {0x90A0, 0x60B9}, //2946 #CJK UNIFIED IDEOGRAPH
+ {0x90A1, 0x60BA}, //2947 #CJK UNIFIED IDEOGRAPH
+ {0x90A2, 0x60BD}, //2948 #CJK UNIFIED IDEOGRAPH
+ {0x90A3, 0x60BE}, //2949 #CJK UNIFIED IDEOGRAPH
+ {0x90A4, 0x60BF}, //2950 #CJK UNIFIED IDEOGRAPH
+ {0x90A5, 0x60C0}, //2951 #CJK UNIFIED IDEOGRAPH
+ {0x90A6, 0x60C1}, //2952 #CJK UNIFIED IDEOGRAPH
+ {0x90A7, 0x60C2}, //2953 #CJK UNIFIED IDEOGRAPH
+ {0x90A8, 0x60C3}, //2954 #CJK UNIFIED IDEOGRAPH
+ {0x90A9, 0x60C4}, //2955 #CJK UNIFIED IDEOGRAPH
+ {0x90AA, 0x60C7}, //2956 #CJK UNIFIED IDEOGRAPH
+ {0x90AB, 0x60C8}, //2957 #CJK UNIFIED IDEOGRAPH
+ {0x90AC, 0x60C9}, //2958 #CJK UNIFIED IDEOGRAPH
+ {0x90AD, 0x60CC}, //2959 #CJK UNIFIED IDEOGRAPH
+ {0x90AE, 0x60CD}, //2960 #CJK UNIFIED IDEOGRAPH
+ {0x90AF, 0x60CE}, //2961 #CJK UNIFIED IDEOGRAPH
+ {0x90B0, 0x60CF}, //2962 #CJK UNIFIED IDEOGRAPH
+ {0x90B1, 0x60D0}, //2963 #CJK UNIFIED IDEOGRAPH
+ {0x90B2, 0x60D2}, //2964 #CJK UNIFIED IDEOGRAPH
+ {0x90B3, 0x60D3}, //2965 #CJK UNIFIED IDEOGRAPH
+ {0x90B4, 0x60D4}, //2966 #CJK UNIFIED IDEOGRAPH
+ {0x90B5, 0x60D6}, //2967 #CJK UNIFIED IDEOGRAPH
+ {0x90B6, 0x60D7}, //2968 #CJK UNIFIED IDEOGRAPH
+ {0x90B7, 0x60D9}, //2969 #CJK UNIFIED IDEOGRAPH
+ {0x90B8, 0x60DB}, //2970 #CJK UNIFIED IDEOGRAPH
+ {0x90B9, 0x60DE}, //2971 #CJK UNIFIED IDEOGRAPH
+ {0x90BA, 0x60E1}, //2972 #CJK UNIFIED IDEOGRAPH
+ {0x90BB, 0x60E2}, //2973 #CJK UNIFIED IDEOGRAPH
+ {0x90BC, 0x60E3}, //2974 #CJK UNIFIED IDEOGRAPH
+ {0x90BD, 0x60E4}, //2975 #CJK UNIFIED IDEOGRAPH
+ {0x90BE, 0x60E5}, //2976 #CJK UNIFIED IDEOGRAPH
+ {0x90BF, 0x60EA}, //2977 #CJK UNIFIED IDEOGRAPH
+ {0x90C0, 0x60F1}, //2978 #CJK UNIFIED IDEOGRAPH
+ {0x90C1, 0x60F2}, //2979 #CJK UNIFIED IDEOGRAPH
+ {0x90C2, 0x60F5}, //2980 #CJK UNIFIED IDEOGRAPH
+ {0x90C3, 0x60F7}, //2981 #CJK UNIFIED IDEOGRAPH
+ {0x90C4, 0x60F8}, //2982 #CJK UNIFIED IDEOGRAPH
+ {0x90C5, 0x60FB}, //2983 #CJK UNIFIED IDEOGRAPH
+ {0x90C6, 0x60FC}, //2984 #CJK UNIFIED IDEOGRAPH
+ {0x90C7, 0x60FD}, //2985 #CJK UNIFIED IDEOGRAPH
+ {0x90C8, 0x60FE}, //2986 #CJK UNIFIED IDEOGRAPH
+ {0x90C9, 0x60FF}, //2987 #CJK UNIFIED IDEOGRAPH
+ {0x90CA, 0x6102}, //2988 #CJK UNIFIED IDEOGRAPH
+ {0x90CB, 0x6103}, //2989 #CJK UNIFIED IDEOGRAPH
+ {0x90CC, 0x6104}, //2990 #CJK UNIFIED IDEOGRAPH
+ {0x90CD, 0x6105}, //2991 #CJK UNIFIED IDEOGRAPH
+ {0x90CE, 0x6107}, //2992 #CJK UNIFIED IDEOGRAPH
+ {0x90CF, 0x610A}, //2993 #CJK UNIFIED IDEOGRAPH
+ {0x90D0, 0x610B}, //2994 #CJK UNIFIED IDEOGRAPH
+ {0x90D1, 0x610C}, //2995 #CJK UNIFIED IDEOGRAPH
+ {0x90D2, 0x6110}, //2996 #CJK UNIFIED IDEOGRAPH
+ {0x90D3, 0x6111}, //2997 #CJK UNIFIED IDEOGRAPH
+ {0x90D4, 0x6112}, //2998 #CJK UNIFIED IDEOGRAPH
+ {0x90D5, 0x6113}, //2999 #CJK UNIFIED IDEOGRAPH
+ {0x90D6, 0x6114}, //3000 #CJK UNIFIED IDEOGRAPH
+ {0x90D7, 0x6116}, //3001 #CJK UNIFIED IDEOGRAPH
+ {0x90D8, 0x6117}, //3002 #CJK UNIFIED IDEOGRAPH
+ {0x90D9, 0x6118}, //3003 #CJK UNIFIED IDEOGRAPH
+ {0x90DA, 0x6119}, //3004 #CJK UNIFIED IDEOGRAPH
+ {0x90DB, 0x611B}, //3005 #CJK UNIFIED IDEOGRAPH
+ {0x90DC, 0x611C}, //3006 #CJK UNIFIED IDEOGRAPH
+ {0x90DD, 0x611D}, //3007 #CJK UNIFIED IDEOGRAPH
+ {0x90DE, 0x611E}, //3008 #CJK UNIFIED IDEOGRAPH
+ {0x90DF, 0x6121}, //3009 #CJK UNIFIED IDEOGRAPH
+ {0x90E0, 0x6122}, //3010 #CJK UNIFIED IDEOGRAPH
+ {0x90E1, 0x6125}, //3011 #CJK UNIFIED IDEOGRAPH
+ {0x90E2, 0x6128}, //3012 #CJK UNIFIED IDEOGRAPH
+ {0x90E3, 0x6129}, //3013 #CJK UNIFIED IDEOGRAPH
+ {0x90E4, 0x612A}, //3014 #CJK UNIFIED IDEOGRAPH
+ {0x90E5, 0x612C}, //3015 #CJK UNIFIED IDEOGRAPH
+ {0x90E6, 0x612D}, //3016 #CJK UNIFIED IDEOGRAPH
+ {0x90E7, 0x612E}, //3017 #CJK UNIFIED IDEOGRAPH
+ {0x90E8, 0x612F}, //3018 #CJK UNIFIED IDEOGRAPH
+ {0x90E9, 0x6130}, //3019 #CJK UNIFIED IDEOGRAPH
+ {0x90EA, 0x6131}, //3020 #CJK UNIFIED IDEOGRAPH
+ {0x90EB, 0x6132}, //3021 #CJK UNIFIED IDEOGRAPH
+ {0x90EC, 0x6133}, //3022 #CJK UNIFIED IDEOGRAPH
+ {0x90ED, 0x6134}, //3023 #CJK UNIFIED IDEOGRAPH
+ {0x90EE, 0x6135}, //3024 #CJK UNIFIED IDEOGRAPH
+ {0x90EF, 0x6136}, //3025 #CJK UNIFIED IDEOGRAPH
+ {0x90F0, 0x6137}, //3026 #CJK UNIFIED IDEOGRAPH
+ {0x90F1, 0x6138}, //3027 #CJK UNIFIED IDEOGRAPH
+ {0x90F2, 0x6139}, //3028 #CJK UNIFIED IDEOGRAPH
+ {0x90F3, 0x613A}, //3029 #CJK UNIFIED IDEOGRAPH
+ {0x90F4, 0x613B}, //3030 #CJK UNIFIED IDEOGRAPH
+ {0x90F5, 0x613C}, //3031 #CJK UNIFIED IDEOGRAPH
+ {0x90F6, 0x613D}, //3032 #CJK UNIFIED IDEOGRAPH
+ {0x90F7, 0x613E}, //3033 #CJK UNIFIED IDEOGRAPH
+ {0x90F8, 0x6140}, //3034 #CJK UNIFIED IDEOGRAPH
+ {0x90F9, 0x6141}, //3035 #CJK UNIFIED IDEOGRAPH
+ {0x90FA, 0x6142}, //3036 #CJK UNIFIED IDEOGRAPH
+ {0x90FB, 0x6143}, //3037 #CJK UNIFIED IDEOGRAPH
+ {0x90FC, 0x6144}, //3038 #CJK UNIFIED IDEOGRAPH
+ {0x90FD, 0x6145}, //3039 #CJK UNIFIED IDEOGRAPH
+ {0x90FE, 0x6146}, //3040 #CJK UNIFIED IDEOGRAPH
+ {0x9140, 0x6147}, //3041 #CJK UNIFIED IDEOGRAPH
+ {0x9141, 0x6149}, //3042 #CJK UNIFIED IDEOGRAPH
+ {0x9142, 0x614B}, //3043 #CJK UNIFIED IDEOGRAPH
+ {0x9143, 0x614D}, //3044 #CJK UNIFIED IDEOGRAPH
+ {0x9144, 0x614F}, //3045 #CJK UNIFIED IDEOGRAPH
+ {0x9145, 0x6150}, //3046 #CJK UNIFIED IDEOGRAPH
+ {0x9146, 0x6152}, //3047 #CJK UNIFIED IDEOGRAPH
+ {0x9147, 0x6153}, //3048 #CJK UNIFIED IDEOGRAPH
+ {0x9148, 0x6154}, //3049 #CJK UNIFIED IDEOGRAPH
+ {0x9149, 0x6156}, //3050 #CJK UNIFIED IDEOGRAPH
+ {0x914A, 0x6157}, //3051 #CJK UNIFIED IDEOGRAPH
+ {0x914B, 0x6158}, //3052 #CJK UNIFIED IDEOGRAPH
+ {0x914C, 0x6159}, //3053 #CJK UNIFIED IDEOGRAPH
+ {0x914D, 0x615A}, //3054 #CJK UNIFIED IDEOGRAPH
+ {0x914E, 0x615B}, //3055 #CJK UNIFIED IDEOGRAPH
+ {0x914F, 0x615C}, //3056 #CJK UNIFIED IDEOGRAPH
+ {0x9150, 0x615E}, //3057 #CJK UNIFIED IDEOGRAPH
+ {0x9151, 0x615F}, //3058 #CJK UNIFIED IDEOGRAPH
+ {0x9152, 0x6160}, //3059 #CJK UNIFIED IDEOGRAPH
+ {0x9153, 0x6161}, //3060 #CJK UNIFIED IDEOGRAPH
+ {0x9154, 0x6163}, //3061 #CJK UNIFIED IDEOGRAPH
+ {0x9155, 0x6164}, //3062 #CJK UNIFIED IDEOGRAPH
+ {0x9156, 0x6165}, //3063 #CJK UNIFIED IDEOGRAPH
+ {0x9157, 0x6166}, //3064 #CJK UNIFIED IDEOGRAPH
+ {0x9158, 0x6169}, //3065 #CJK UNIFIED IDEOGRAPH
+ {0x9159, 0x616A}, //3066 #CJK UNIFIED IDEOGRAPH
+ {0x915A, 0x616B}, //3067 #CJK UNIFIED IDEOGRAPH
+ {0x915B, 0x616C}, //3068 #CJK UNIFIED IDEOGRAPH
+ {0x915C, 0x616D}, //3069 #CJK UNIFIED IDEOGRAPH
+ {0x915D, 0x616E}, //3070 #CJK UNIFIED IDEOGRAPH
+ {0x915E, 0x616F}, //3071 #CJK UNIFIED IDEOGRAPH
+ {0x915F, 0x6171}, //3072 #CJK UNIFIED IDEOGRAPH
+ {0x9160, 0x6172}, //3073 #CJK UNIFIED IDEOGRAPH
+ {0x9161, 0x6173}, //3074 #CJK UNIFIED IDEOGRAPH
+ {0x9162, 0x6174}, //3075 #CJK UNIFIED IDEOGRAPH
+ {0x9163, 0x6176}, //3076 #CJK UNIFIED IDEOGRAPH
+ {0x9164, 0x6178}, //3077 #CJK UNIFIED IDEOGRAPH
+ {0x9165, 0x6179}, //3078 #CJK UNIFIED IDEOGRAPH
+ {0x9166, 0x617A}, //3079 #CJK UNIFIED IDEOGRAPH
+ {0x9167, 0x617B}, //3080 #CJK UNIFIED IDEOGRAPH
+ {0x9168, 0x617C}, //3081 #CJK UNIFIED IDEOGRAPH
+ {0x9169, 0x617D}, //3082 #CJK UNIFIED IDEOGRAPH
+ {0x916A, 0x617E}, //3083 #CJK UNIFIED IDEOGRAPH
+ {0x916B, 0x617F}, //3084 #CJK UNIFIED IDEOGRAPH
+ {0x916C, 0x6180}, //3085 #CJK UNIFIED IDEOGRAPH
+ {0x916D, 0x6181}, //3086 #CJK UNIFIED IDEOGRAPH
+ {0x916E, 0x6182}, //3087 #CJK UNIFIED IDEOGRAPH
+ {0x916F, 0x6183}, //3088 #CJK UNIFIED IDEOGRAPH
+ {0x9170, 0x6184}, //3089 #CJK UNIFIED IDEOGRAPH
+ {0x9171, 0x6185}, //3090 #CJK UNIFIED IDEOGRAPH
+ {0x9172, 0x6186}, //3091 #CJK UNIFIED IDEOGRAPH
+ {0x9173, 0x6187}, //3092 #CJK UNIFIED IDEOGRAPH
+ {0x9174, 0x6188}, //3093 #CJK UNIFIED IDEOGRAPH
+ {0x9175, 0x6189}, //3094 #CJK UNIFIED IDEOGRAPH
+ {0x9176, 0x618A}, //3095 #CJK UNIFIED IDEOGRAPH
+ {0x9177, 0x618C}, //3096 #CJK UNIFIED IDEOGRAPH
+ {0x9178, 0x618D}, //3097 #CJK UNIFIED IDEOGRAPH
+ {0x9179, 0x618F}, //3098 #CJK UNIFIED IDEOGRAPH
+ {0x917A, 0x6190}, //3099 #CJK UNIFIED IDEOGRAPH
+ {0x917B, 0x6191}, //3100 #CJK UNIFIED IDEOGRAPH
+ {0x917C, 0x6192}, //3101 #CJK UNIFIED IDEOGRAPH
+ {0x917D, 0x6193}, //3102 #CJK UNIFIED IDEOGRAPH
+ {0x917E, 0x6195}, //3103 #CJK UNIFIED IDEOGRAPH
+ {0x9180, 0x6196}, //3104 #CJK UNIFIED IDEOGRAPH
+ {0x9181, 0x6197}, //3105 #CJK UNIFIED IDEOGRAPH
+ {0x9182, 0x6198}, //3106 #CJK UNIFIED IDEOGRAPH
+ {0x9183, 0x6199}, //3107 #CJK UNIFIED IDEOGRAPH
+ {0x9184, 0x619A}, //3108 #CJK UNIFIED IDEOGRAPH
+ {0x9185, 0x619B}, //3109 #CJK UNIFIED IDEOGRAPH
+ {0x9186, 0x619C}, //3110 #CJK UNIFIED IDEOGRAPH
+ {0x9187, 0x619E}, //3111 #CJK UNIFIED IDEOGRAPH
+ {0x9188, 0x619F}, //3112 #CJK UNIFIED IDEOGRAPH
+ {0x9189, 0x61A0}, //3113 #CJK UNIFIED IDEOGRAPH
+ {0x918A, 0x61A1}, //3114 #CJK UNIFIED IDEOGRAPH
+ {0x918B, 0x61A2}, //3115 #CJK UNIFIED IDEOGRAPH
+ {0x918C, 0x61A3}, //3116 #CJK UNIFIED IDEOGRAPH
+ {0x918D, 0x61A4}, //3117 #CJK UNIFIED IDEOGRAPH
+ {0x918E, 0x61A5}, //3118 #CJK UNIFIED IDEOGRAPH
+ {0x918F, 0x61A6}, //3119 #CJK UNIFIED IDEOGRAPH
+ {0x9190, 0x61AA}, //3120 #CJK UNIFIED IDEOGRAPH
+ {0x9191, 0x61AB}, //3121 #CJK UNIFIED IDEOGRAPH
+ {0x9192, 0x61AD}, //3122 #CJK UNIFIED IDEOGRAPH
+ {0x9193, 0x61AE}, //3123 #CJK UNIFIED IDEOGRAPH
+ {0x9194, 0x61AF}, //3124 #CJK UNIFIED IDEOGRAPH
+ {0x9195, 0x61B0}, //3125 #CJK UNIFIED IDEOGRAPH
+ {0x9196, 0x61B1}, //3126 #CJK UNIFIED IDEOGRAPH
+ {0x9197, 0x61B2}, //3127 #CJK UNIFIED IDEOGRAPH
+ {0x9198, 0x61B3}, //3128 #CJK UNIFIED IDEOGRAPH
+ {0x9199, 0x61B4}, //3129 #CJK UNIFIED IDEOGRAPH
+ {0x919A, 0x61B5}, //3130 #CJK UNIFIED IDEOGRAPH
+ {0x919B, 0x61B6}, //3131 #CJK UNIFIED IDEOGRAPH
+ {0x919C, 0x61B8}, //3132 #CJK UNIFIED IDEOGRAPH
+ {0x919D, 0x61B9}, //3133 #CJK UNIFIED IDEOGRAPH
+ {0x919E, 0x61BA}, //3134 #CJK UNIFIED IDEOGRAPH
+ {0x919F, 0x61BB}, //3135 #CJK UNIFIED IDEOGRAPH
+ {0x91A0, 0x61BC}, //3136 #CJK UNIFIED IDEOGRAPH
+ {0x91A1, 0x61BD}, //3137 #CJK UNIFIED IDEOGRAPH
+ {0x91A2, 0x61BF}, //3138 #CJK UNIFIED IDEOGRAPH
+ {0x91A3, 0x61C0}, //3139 #CJK UNIFIED IDEOGRAPH
+ {0x91A4, 0x61C1}, //3140 #CJK UNIFIED IDEOGRAPH
+ {0x91A5, 0x61C3}, //3141 #CJK UNIFIED IDEOGRAPH
+ {0x91A6, 0x61C4}, //3142 #CJK UNIFIED IDEOGRAPH
+ {0x91A7, 0x61C5}, //3143 #CJK UNIFIED IDEOGRAPH
+ {0x91A8, 0x61C6}, //3144 #CJK UNIFIED IDEOGRAPH
+ {0x91A9, 0x61C7}, //3145 #CJK UNIFIED IDEOGRAPH
+ {0x91AA, 0x61C9}, //3146 #CJK UNIFIED IDEOGRAPH
+ {0x91AB, 0x61CC}, //3147 #CJK UNIFIED IDEOGRAPH
+ {0x91AC, 0x61CD}, //3148 #CJK UNIFIED IDEOGRAPH
+ {0x91AD, 0x61CE}, //3149 #CJK UNIFIED IDEOGRAPH
+ {0x91AE, 0x61CF}, //3150 #CJK UNIFIED IDEOGRAPH
+ {0x91AF, 0x61D0}, //3151 #CJK UNIFIED IDEOGRAPH
+ {0x91B0, 0x61D3}, //3152 #CJK UNIFIED IDEOGRAPH
+ {0x91B1, 0x61D5}, //3153 #CJK UNIFIED IDEOGRAPH
+ {0x91B2, 0x61D6}, //3154 #CJK UNIFIED IDEOGRAPH
+ {0x91B3, 0x61D7}, //3155 #CJK UNIFIED IDEOGRAPH
+ {0x91B4, 0x61D8}, //3156 #CJK UNIFIED IDEOGRAPH
+ {0x91B5, 0x61D9}, //3157 #CJK UNIFIED IDEOGRAPH
+ {0x91B6, 0x61DA}, //3158 #CJK UNIFIED IDEOGRAPH
+ {0x91B7, 0x61DB}, //3159 #CJK UNIFIED IDEOGRAPH
+ {0x91B8, 0x61DC}, //3160 #CJK UNIFIED IDEOGRAPH
+ {0x91B9, 0x61DD}, //3161 #CJK UNIFIED IDEOGRAPH
+ {0x91BA, 0x61DE}, //3162 #CJK UNIFIED IDEOGRAPH
+ {0x91BB, 0x61DF}, //3163 #CJK UNIFIED IDEOGRAPH
+ {0x91BC, 0x61E0}, //3164 #CJK UNIFIED IDEOGRAPH
+ {0x91BD, 0x61E1}, //3165 #CJK UNIFIED IDEOGRAPH
+ {0x91BE, 0x61E2}, //3166 #CJK UNIFIED IDEOGRAPH
+ {0x91BF, 0x61E3}, //3167 #CJK UNIFIED IDEOGRAPH
+ {0x91C0, 0x61E4}, //3168 #CJK UNIFIED IDEOGRAPH
+ {0x91C1, 0x61E5}, //3169 #CJK UNIFIED IDEOGRAPH
+ {0x91C2, 0x61E7}, //3170 #CJK UNIFIED IDEOGRAPH
+ {0x91C3, 0x61E8}, //3171 #CJK UNIFIED IDEOGRAPH
+ {0x91C4, 0x61E9}, //3172 #CJK UNIFIED IDEOGRAPH
+ {0x91C5, 0x61EA}, //3173 #CJK UNIFIED IDEOGRAPH
+ {0x91C6, 0x61EB}, //3174 #CJK UNIFIED IDEOGRAPH
+ {0x91C7, 0x61EC}, //3175 #CJK UNIFIED IDEOGRAPH
+ {0x91C8, 0x61ED}, //3176 #CJK UNIFIED IDEOGRAPH
+ {0x91C9, 0x61EE}, //3177 #CJK UNIFIED IDEOGRAPH
+ {0x91CA, 0x61EF}, //3178 #CJK UNIFIED IDEOGRAPH
+ {0x91CB, 0x61F0}, //3179 #CJK UNIFIED IDEOGRAPH
+ {0x91CC, 0x61F1}, //3180 #CJK UNIFIED IDEOGRAPH
+ {0x91CD, 0x61F2}, //3181 #CJK UNIFIED IDEOGRAPH
+ {0x91CE, 0x61F3}, //3182 #CJK UNIFIED IDEOGRAPH
+ {0x91CF, 0x61F4}, //3183 #CJK UNIFIED IDEOGRAPH
+ {0x91D0, 0x61F6}, //3184 #CJK UNIFIED IDEOGRAPH
+ {0x91D1, 0x61F7}, //3185 #CJK UNIFIED IDEOGRAPH
+ {0x91D2, 0x61F8}, //3186 #CJK UNIFIED IDEOGRAPH
+ {0x91D3, 0x61F9}, //3187 #CJK UNIFIED IDEOGRAPH
+ {0x91D4, 0x61FA}, //3188 #CJK UNIFIED IDEOGRAPH
+ {0x91D5, 0x61FB}, //3189 #CJK UNIFIED IDEOGRAPH
+ {0x91D6, 0x61FC}, //3190 #CJK UNIFIED IDEOGRAPH
+ {0x91D7, 0x61FD}, //3191 #CJK UNIFIED IDEOGRAPH
+ {0x91D8, 0x61FE}, //3192 #CJK UNIFIED IDEOGRAPH
+ {0x91D9, 0x6200}, //3193 #CJK UNIFIED IDEOGRAPH
+ {0x91DA, 0x6201}, //3194 #CJK UNIFIED IDEOGRAPH
+ {0x91DB, 0x6202}, //3195 #CJK UNIFIED IDEOGRAPH
+ {0x91DC, 0x6203}, //3196 #CJK UNIFIED IDEOGRAPH
+ {0x91DD, 0x6204}, //3197 #CJK UNIFIED IDEOGRAPH
+ {0x91DE, 0x6205}, //3198 #CJK UNIFIED IDEOGRAPH
+ {0x91DF, 0x6207}, //3199 #CJK UNIFIED IDEOGRAPH
+ {0x91E0, 0x6209}, //3200 #CJK UNIFIED IDEOGRAPH
+ {0x91E1, 0x6213}, //3201 #CJK UNIFIED IDEOGRAPH
+ {0x91E2, 0x6214}, //3202 #CJK UNIFIED IDEOGRAPH
+ {0x91E3, 0x6219}, //3203 #CJK UNIFIED IDEOGRAPH
+ {0x91E4, 0x621C}, //3204 #CJK UNIFIED IDEOGRAPH
+ {0x91E5, 0x621D}, //3205 #CJK UNIFIED IDEOGRAPH
+ {0x91E6, 0x621E}, //3206 #CJK UNIFIED IDEOGRAPH
+ {0x91E7, 0x6220}, //3207 #CJK UNIFIED IDEOGRAPH
+ {0x91E8, 0x6223}, //3208 #CJK UNIFIED IDEOGRAPH
+ {0x91E9, 0x6226}, //3209 #CJK UNIFIED IDEOGRAPH
+ {0x91EA, 0x6227}, //3210 #CJK UNIFIED IDEOGRAPH
+ {0x91EB, 0x6228}, //3211 #CJK UNIFIED IDEOGRAPH
+ {0x91EC, 0x6229}, //3212 #CJK UNIFIED IDEOGRAPH
+ {0x91ED, 0x622B}, //3213 #CJK UNIFIED IDEOGRAPH
+ {0x91EE, 0x622D}, //3214 #CJK UNIFIED IDEOGRAPH
+ {0x91EF, 0x622F}, //3215 #CJK UNIFIED IDEOGRAPH
+ {0x91F0, 0x6230}, //3216 #CJK UNIFIED IDEOGRAPH
+ {0x91F1, 0x6231}, //3217 #CJK UNIFIED IDEOGRAPH
+ {0x91F2, 0x6232}, //3218 #CJK UNIFIED IDEOGRAPH
+ {0x91F3, 0x6235}, //3219 #CJK UNIFIED IDEOGRAPH
+ {0x91F4, 0x6236}, //3220 #CJK UNIFIED IDEOGRAPH
+ {0x91F5, 0x6238}, //3221 #CJK UNIFIED IDEOGRAPH
+ {0x91F6, 0x6239}, //3222 #CJK UNIFIED IDEOGRAPH
+ {0x91F7, 0x623A}, //3223 #CJK UNIFIED IDEOGRAPH
+ {0x91F8, 0x623B}, //3224 #CJK UNIFIED IDEOGRAPH
+ {0x91F9, 0x623C}, //3225 #CJK UNIFIED IDEOGRAPH
+ {0x91FA, 0x6242}, //3226 #CJK UNIFIED IDEOGRAPH
+ {0x91FB, 0x6244}, //3227 #CJK UNIFIED IDEOGRAPH
+ {0x91FC, 0x6245}, //3228 #CJK UNIFIED IDEOGRAPH
+ {0x91FD, 0x6246}, //3229 #CJK UNIFIED IDEOGRAPH
+ {0x91FE, 0x624A}, //3230 #CJK UNIFIED IDEOGRAPH
+ {0x9240, 0x624F}, //3231 #CJK UNIFIED IDEOGRAPH
+ {0x9241, 0x6250}, //3232 #CJK UNIFIED IDEOGRAPH
+ {0x9242, 0x6255}, //3233 #CJK UNIFIED IDEOGRAPH
+ {0x9243, 0x6256}, //3234 #CJK UNIFIED IDEOGRAPH
+ {0x9244, 0x6257}, //3235 #CJK UNIFIED IDEOGRAPH
+ {0x9245, 0x6259}, //3236 #CJK UNIFIED IDEOGRAPH
+ {0x9246, 0x625A}, //3237 #CJK UNIFIED IDEOGRAPH
+ {0x9247, 0x625C}, //3238 #CJK UNIFIED IDEOGRAPH
+ {0x9248, 0x625D}, //3239 #CJK UNIFIED IDEOGRAPH
+ {0x9249, 0x625E}, //3240 #CJK UNIFIED IDEOGRAPH
+ {0x924A, 0x625F}, //3241 #CJK UNIFIED IDEOGRAPH
+ {0x924B, 0x6260}, //3242 #CJK UNIFIED IDEOGRAPH
+ {0x924C, 0x6261}, //3243 #CJK UNIFIED IDEOGRAPH
+ {0x924D, 0x6262}, //3244 #CJK UNIFIED IDEOGRAPH
+ {0x924E, 0x6264}, //3245 #CJK UNIFIED IDEOGRAPH
+ {0x924F, 0x6265}, //3246 #CJK UNIFIED IDEOGRAPH
+ {0x9250, 0x6268}, //3247 #CJK UNIFIED IDEOGRAPH
+ {0x9251, 0x6271}, //3248 #CJK UNIFIED IDEOGRAPH
+ {0x9252, 0x6272}, //3249 #CJK UNIFIED IDEOGRAPH
+ {0x9253, 0x6274}, //3250 #CJK UNIFIED IDEOGRAPH
+ {0x9254, 0x6275}, //3251 #CJK UNIFIED IDEOGRAPH
+ {0x9255, 0x6277}, //3252 #CJK UNIFIED IDEOGRAPH
+ {0x9256, 0x6278}, //3253 #CJK UNIFIED IDEOGRAPH
+ {0x9257, 0x627A}, //3254 #CJK UNIFIED IDEOGRAPH
+ {0x9258, 0x627B}, //3255 #CJK UNIFIED IDEOGRAPH
+ {0x9259, 0x627D}, //3256 #CJK UNIFIED IDEOGRAPH
+ {0x925A, 0x6281}, //3257 #CJK UNIFIED IDEOGRAPH
+ {0x925B, 0x6282}, //3258 #CJK UNIFIED IDEOGRAPH
+ {0x925C, 0x6283}, //3259 #CJK UNIFIED IDEOGRAPH
+ {0x925D, 0x6285}, //3260 #CJK UNIFIED IDEOGRAPH
+ {0x925E, 0x6286}, //3261 #CJK UNIFIED IDEOGRAPH
+ {0x925F, 0x6287}, //3262 #CJK UNIFIED IDEOGRAPH
+ {0x9260, 0x6288}, //3263 #CJK UNIFIED IDEOGRAPH
+ {0x9261, 0x628B}, //3264 #CJK UNIFIED IDEOGRAPH
+ {0x9262, 0x628C}, //3265 #CJK UNIFIED IDEOGRAPH
+ {0x9263, 0x628D}, //3266 #CJK UNIFIED IDEOGRAPH
+ {0x9264, 0x628E}, //3267 #CJK UNIFIED IDEOGRAPH
+ {0x9265, 0x628F}, //3268 #CJK UNIFIED IDEOGRAPH
+ {0x9266, 0x6290}, //3269 #CJK UNIFIED IDEOGRAPH
+ {0x9267, 0x6294}, //3270 #CJK UNIFIED IDEOGRAPH
+ {0x9268, 0x6299}, //3271 #CJK UNIFIED IDEOGRAPH
+ {0x9269, 0x629C}, //3272 #CJK UNIFIED IDEOGRAPH
+ {0x926A, 0x629D}, //3273 #CJK UNIFIED IDEOGRAPH
+ {0x926B, 0x629E}, //3274 #CJK UNIFIED IDEOGRAPH
+ {0x926C, 0x62A3}, //3275 #CJK UNIFIED IDEOGRAPH
+ {0x926D, 0x62A6}, //3276 #CJK UNIFIED IDEOGRAPH
+ {0x926E, 0x62A7}, //3277 #CJK UNIFIED IDEOGRAPH
+ {0x926F, 0x62A9}, //3278 #CJK UNIFIED IDEOGRAPH
+ {0x9270, 0x62AA}, //3279 #CJK UNIFIED IDEOGRAPH
+ {0x9271, 0x62AD}, //3280 #CJK UNIFIED IDEOGRAPH
+ {0x9272, 0x62AE}, //3281 #CJK UNIFIED IDEOGRAPH
+ {0x9273, 0x62AF}, //3282 #CJK UNIFIED IDEOGRAPH
+ {0x9274, 0x62B0}, //3283 #CJK UNIFIED IDEOGRAPH
+ {0x9275, 0x62B2}, //3284 #CJK UNIFIED IDEOGRAPH
+ {0x9276, 0x62B3}, //3285 #CJK UNIFIED IDEOGRAPH
+ {0x9277, 0x62B4}, //3286 #CJK UNIFIED IDEOGRAPH
+ {0x9278, 0x62B6}, //3287 #CJK UNIFIED IDEOGRAPH
+ {0x9279, 0x62B7}, //3288 #CJK UNIFIED IDEOGRAPH
+ {0x927A, 0x62B8}, //3289 #CJK UNIFIED IDEOGRAPH
+ {0x927B, 0x62BA}, //3290 #CJK UNIFIED IDEOGRAPH
+ {0x927C, 0x62BE}, //3291 #CJK UNIFIED IDEOGRAPH
+ {0x927D, 0x62C0}, //3292 #CJK UNIFIED IDEOGRAPH
+ {0x927E, 0x62C1}, //3293 #CJK UNIFIED IDEOGRAPH
+ {0x9280, 0x62C3}, //3294 #CJK UNIFIED IDEOGRAPH
+ {0x9281, 0x62CB}, //3295 #CJK UNIFIED IDEOGRAPH
+ {0x9282, 0x62CF}, //3296 #CJK UNIFIED IDEOGRAPH
+ {0x9283, 0x62D1}, //3297 #CJK UNIFIED IDEOGRAPH
+ {0x9284, 0x62D5}, //3298 #CJK UNIFIED IDEOGRAPH
+ {0x9285, 0x62DD}, //3299 #CJK UNIFIED IDEOGRAPH
+ {0x9286, 0x62DE}, //3300 #CJK UNIFIED IDEOGRAPH
+ {0x9287, 0x62E0}, //3301 #CJK UNIFIED IDEOGRAPH
+ {0x9288, 0x62E1}, //3302 #CJK UNIFIED IDEOGRAPH
+ {0x9289, 0x62E4}, //3303 #CJK UNIFIED IDEOGRAPH
+ {0x928A, 0x62EA}, //3304 #CJK UNIFIED IDEOGRAPH
+ {0x928B, 0x62EB}, //3305 #CJK UNIFIED IDEOGRAPH
+ {0x928C, 0x62F0}, //3306 #CJK UNIFIED IDEOGRAPH
+ {0x928D, 0x62F2}, //3307 #CJK UNIFIED IDEOGRAPH
+ {0x928E, 0x62F5}, //3308 #CJK UNIFIED IDEOGRAPH
+ {0x928F, 0x62F8}, //3309 #CJK UNIFIED IDEOGRAPH
+ {0x9290, 0x62F9}, //3310 #CJK UNIFIED IDEOGRAPH
+ {0x9291, 0x62FA}, //3311 #CJK UNIFIED IDEOGRAPH
+ {0x9292, 0x62FB}, //3312 #CJK UNIFIED IDEOGRAPH
+ {0x9293, 0x6300}, //3313 #CJK UNIFIED IDEOGRAPH
+ {0x9294, 0x6303}, //3314 #CJK UNIFIED IDEOGRAPH
+ {0x9295, 0x6304}, //3315 #CJK UNIFIED IDEOGRAPH
+ {0x9296, 0x6305}, //3316 #CJK UNIFIED IDEOGRAPH
+ {0x9297, 0x6306}, //3317 #CJK UNIFIED IDEOGRAPH
+ {0x9298, 0x630A}, //3318 #CJK UNIFIED IDEOGRAPH
+ {0x9299, 0x630B}, //3319 #CJK UNIFIED IDEOGRAPH
+ {0x929A, 0x630C}, //3320 #CJK UNIFIED IDEOGRAPH
+ {0x929B, 0x630D}, //3321 #CJK UNIFIED IDEOGRAPH
+ {0x929C, 0x630F}, //3322 #CJK UNIFIED IDEOGRAPH
+ {0x929D, 0x6310}, //3323 #CJK UNIFIED IDEOGRAPH
+ {0x929E, 0x6312}, //3324 #CJK UNIFIED IDEOGRAPH
+ {0x929F, 0x6313}, //3325 #CJK UNIFIED IDEOGRAPH
+ {0x92A0, 0x6314}, //3326 #CJK UNIFIED IDEOGRAPH
+ {0x92A1, 0x6315}, //3327 #CJK UNIFIED IDEOGRAPH
+ {0x92A2, 0x6317}, //3328 #CJK UNIFIED IDEOGRAPH
+ {0x92A3, 0x6318}, //3329 #CJK UNIFIED IDEOGRAPH
+ {0x92A4, 0x6319}, //3330 #CJK UNIFIED IDEOGRAPH
+ {0x92A5, 0x631C}, //3331 #CJK UNIFIED IDEOGRAPH
+ {0x92A6, 0x6326}, //3332 #CJK UNIFIED IDEOGRAPH
+ {0x92A7, 0x6327}, //3333 #CJK UNIFIED IDEOGRAPH
+ {0x92A8, 0x6329}, //3334 #CJK UNIFIED IDEOGRAPH
+ {0x92A9, 0x632C}, //3335 #CJK UNIFIED IDEOGRAPH
+ {0x92AA, 0x632D}, //3336 #CJK UNIFIED IDEOGRAPH
+ {0x92AB, 0x632E}, //3337 #CJK UNIFIED IDEOGRAPH
+ {0x92AC, 0x6330}, //3338 #CJK UNIFIED IDEOGRAPH
+ {0x92AD, 0x6331}, //3339 #CJK UNIFIED IDEOGRAPH
+ {0x92AE, 0x6333}, //3340 #CJK UNIFIED IDEOGRAPH
+ {0x92AF, 0x6334}, //3341 #CJK UNIFIED IDEOGRAPH
+ {0x92B0, 0x6335}, //3342 #CJK UNIFIED IDEOGRAPH
+ {0x92B1, 0x6336}, //3343 #CJK UNIFIED IDEOGRAPH
+ {0x92B2, 0x6337}, //3344 #CJK UNIFIED IDEOGRAPH
+ {0x92B3, 0x6338}, //3345 #CJK UNIFIED IDEOGRAPH
+ {0x92B4, 0x633B}, //3346 #CJK UNIFIED IDEOGRAPH
+ {0x92B5, 0x633C}, //3347 #CJK UNIFIED IDEOGRAPH
+ {0x92B6, 0x633E}, //3348 #CJK UNIFIED IDEOGRAPH
+ {0x92B7, 0x633F}, //3349 #CJK UNIFIED IDEOGRAPH
+ {0x92B8, 0x6340}, //3350 #CJK UNIFIED IDEOGRAPH
+ {0x92B9, 0x6341}, //3351 #CJK UNIFIED IDEOGRAPH
+ {0x92BA, 0x6344}, //3352 #CJK UNIFIED IDEOGRAPH
+ {0x92BB, 0x6347}, //3353 #CJK UNIFIED IDEOGRAPH
+ {0x92BC, 0x6348}, //3354 #CJK UNIFIED IDEOGRAPH
+ {0x92BD, 0x634A}, //3355 #CJK UNIFIED IDEOGRAPH
+ {0x92BE, 0x6351}, //3356 #CJK UNIFIED IDEOGRAPH
+ {0x92BF, 0x6352}, //3357 #CJK UNIFIED IDEOGRAPH
+ {0x92C0, 0x6353}, //3358 #CJK UNIFIED IDEOGRAPH
+ {0x92C1, 0x6354}, //3359 #CJK UNIFIED IDEOGRAPH
+ {0x92C2, 0x6356}, //3360 #CJK UNIFIED IDEOGRAPH
+ {0x92C3, 0x6357}, //3361 #CJK UNIFIED IDEOGRAPH
+ {0x92C4, 0x6358}, //3362 #CJK UNIFIED IDEOGRAPH
+ {0x92C5, 0x6359}, //3363 #CJK UNIFIED IDEOGRAPH
+ {0x92C6, 0x635A}, //3364 #CJK UNIFIED IDEOGRAPH
+ {0x92C7, 0x635B}, //3365 #CJK UNIFIED IDEOGRAPH
+ {0x92C8, 0x635C}, //3366 #CJK UNIFIED IDEOGRAPH
+ {0x92C9, 0x635D}, //3367 #CJK UNIFIED IDEOGRAPH
+ {0x92CA, 0x6360}, //3368 #CJK UNIFIED IDEOGRAPH
+ {0x92CB, 0x6364}, //3369 #CJK UNIFIED IDEOGRAPH
+ {0x92CC, 0x6365}, //3370 #CJK UNIFIED IDEOGRAPH
+ {0x92CD, 0x6366}, //3371 #CJK UNIFIED IDEOGRAPH
+ {0x92CE, 0x6368}, //3372 #CJK UNIFIED IDEOGRAPH
+ {0x92CF, 0x636A}, //3373 #CJK UNIFIED IDEOGRAPH
+ {0x92D0, 0x636B}, //3374 #CJK UNIFIED IDEOGRAPH
+ {0x92D1, 0x636C}, //3375 #CJK UNIFIED IDEOGRAPH
+ {0x92D2, 0x636F}, //3376 #CJK UNIFIED IDEOGRAPH
+ {0x92D3, 0x6370}, //3377 #CJK UNIFIED IDEOGRAPH
+ {0x92D4, 0x6372}, //3378 #CJK UNIFIED IDEOGRAPH
+ {0x92D5, 0x6373}, //3379 #CJK UNIFIED IDEOGRAPH
+ {0x92D6, 0x6374}, //3380 #CJK UNIFIED IDEOGRAPH
+ {0x92D7, 0x6375}, //3381 #CJK UNIFIED IDEOGRAPH
+ {0x92D8, 0x6378}, //3382 #CJK UNIFIED IDEOGRAPH
+ {0x92D9, 0x6379}, //3383 #CJK UNIFIED IDEOGRAPH
+ {0x92DA, 0x637C}, //3384 #CJK UNIFIED IDEOGRAPH
+ {0x92DB, 0x637D}, //3385 #CJK UNIFIED IDEOGRAPH
+ {0x92DC, 0x637E}, //3386 #CJK UNIFIED IDEOGRAPH
+ {0x92DD, 0x637F}, //3387 #CJK UNIFIED IDEOGRAPH
+ {0x92DE, 0x6381}, //3388 #CJK UNIFIED IDEOGRAPH
+ {0x92DF, 0x6383}, //3389 #CJK UNIFIED IDEOGRAPH
+ {0x92E0, 0x6384}, //3390 #CJK UNIFIED IDEOGRAPH
+ {0x92E1, 0x6385}, //3391 #CJK UNIFIED IDEOGRAPH
+ {0x92E2, 0x6386}, //3392 #CJK UNIFIED IDEOGRAPH
+ {0x92E3, 0x638B}, //3393 #CJK UNIFIED IDEOGRAPH
+ {0x92E4, 0x638D}, //3394 #CJK UNIFIED IDEOGRAPH
+ {0x92E5, 0x6391}, //3395 #CJK UNIFIED IDEOGRAPH
+ {0x92E6, 0x6393}, //3396 #CJK UNIFIED IDEOGRAPH
+ {0x92E7, 0x6394}, //3397 #CJK UNIFIED IDEOGRAPH
+ {0x92E8, 0x6395}, //3398 #CJK UNIFIED IDEOGRAPH
+ {0x92E9, 0x6397}, //3399 #CJK UNIFIED IDEOGRAPH
+ {0x92EA, 0x6399}, //3400 #CJK UNIFIED IDEOGRAPH
+ {0x92EB, 0x639A}, //3401 #CJK UNIFIED IDEOGRAPH
+ {0x92EC, 0x639B}, //3402 #CJK UNIFIED IDEOGRAPH
+ {0x92ED, 0x639C}, //3403 #CJK UNIFIED IDEOGRAPH
+ {0x92EE, 0x639D}, //3404 #CJK UNIFIED IDEOGRAPH
+ {0x92EF, 0x639E}, //3405 #CJK UNIFIED IDEOGRAPH
+ {0x92F0, 0x639F}, //3406 #CJK UNIFIED IDEOGRAPH
+ {0x92F1, 0x63A1}, //3407 #CJK UNIFIED IDEOGRAPH
+ {0x92F2, 0x63A4}, //3408 #CJK UNIFIED IDEOGRAPH
+ {0x92F3, 0x63A6}, //3409 #CJK UNIFIED IDEOGRAPH
+ {0x92F4, 0x63AB}, //3410 #CJK UNIFIED IDEOGRAPH
+ {0x92F5, 0x63AF}, //3411 #CJK UNIFIED IDEOGRAPH
+ {0x92F6, 0x63B1}, //3412 #CJK UNIFIED IDEOGRAPH
+ {0x92F7, 0x63B2}, //3413 #CJK UNIFIED IDEOGRAPH
+ {0x92F8, 0x63B5}, //3414 #CJK UNIFIED IDEOGRAPH
+ {0x92F9, 0x63B6}, //3415 #CJK UNIFIED IDEOGRAPH
+ {0x92FA, 0x63B9}, //3416 #CJK UNIFIED IDEOGRAPH
+ {0x92FB, 0x63BB}, //3417 #CJK UNIFIED IDEOGRAPH
+ {0x92FC, 0x63BD}, //3418 #CJK UNIFIED IDEOGRAPH
+ {0x92FD, 0x63BF}, //3419 #CJK UNIFIED IDEOGRAPH
+ {0x92FE, 0x63C0}, //3420 #CJK UNIFIED IDEOGRAPH
+ {0x9340, 0x63C1}, //3421 #CJK UNIFIED IDEOGRAPH
+ {0x9341, 0x63C2}, //3422 #CJK UNIFIED IDEOGRAPH
+ {0x9342, 0x63C3}, //3423 #CJK UNIFIED IDEOGRAPH
+ {0x9343, 0x63C5}, //3424 #CJK UNIFIED IDEOGRAPH
+ {0x9344, 0x63C7}, //3425 #CJK UNIFIED IDEOGRAPH
+ {0x9345, 0x63C8}, //3426 #CJK UNIFIED IDEOGRAPH
+ {0x9346, 0x63CA}, //3427 #CJK UNIFIED IDEOGRAPH
+ {0x9347, 0x63CB}, //3428 #CJK UNIFIED IDEOGRAPH
+ {0x9348, 0x63CC}, //3429 #CJK UNIFIED IDEOGRAPH
+ {0x9349, 0x63D1}, //3430 #CJK UNIFIED IDEOGRAPH
+ {0x934A, 0x63D3}, //3431 #CJK UNIFIED IDEOGRAPH
+ {0x934B, 0x63D4}, //3432 #CJK UNIFIED IDEOGRAPH
+ {0x934C, 0x63D5}, //3433 #CJK UNIFIED IDEOGRAPH
+ {0x934D, 0x63D7}, //3434 #CJK UNIFIED IDEOGRAPH
+ {0x934E, 0x63D8}, //3435 #CJK UNIFIED IDEOGRAPH
+ {0x934F, 0x63D9}, //3436 #CJK UNIFIED IDEOGRAPH
+ {0x9350, 0x63DA}, //3437 #CJK UNIFIED IDEOGRAPH
+ {0x9351, 0x63DB}, //3438 #CJK UNIFIED IDEOGRAPH
+ {0x9352, 0x63DC}, //3439 #CJK UNIFIED IDEOGRAPH
+ {0x9353, 0x63DD}, //3440 #CJK UNIFIED IDEOGRAPH
+ {0x9354, 0x63DF}, //3441 #CJK UNIFIED IDEOGRAPH
+ {0x9355, 0x63E2}, //3442 #CJK UNIFIED IDEOGRAPH
+ {0x9356, 0x63E4}, //3443 #CJK UNIFIED IDEOGRAPH
+ {0x9357, 0x63E5}, //3444 #CJK UNIFIED IDEOGRAPH
+ {0x9358, 0x63E6}, //3445 #CJK UNIFIED IDEOGRAPH
+ {0x9359, 0x63E7}, //3446 #CJK UNIFIED IDEOGRAPH
+ {0x935A, 0x63E8}, //3447 #CJK UNIFIED IDEOGRAPH
+ {0x935B, 0x63EB}, //3448 #CJK UNIFIED IDEOGRAPH
+ {0x935C, 0x63EC}, //3449 #CJK UNIFIED IDEOGRAPH
+ {0x935D, 0x63EE}, //3450 #CJK UNIFIED IDEOGRAPH
+ {0x935E, 0x63EF}, //3451 #CJK UNIFIED IDEOGRAPH
+ {0x935F, 0x63F0}, //3452 #CJK UNIFIED IDEOGRAPH
+ {0x9360, 0x63F1}, //3453 #CJK UNIFIED IDEOGRAPH
+ {0x9361, 0x63F3}, //3454 #CJK UNIFIED IDEOGRAPH
+ {0x9362, 0x63F5}, //3455 #CJK UNIFIED IDEOGRAPH
+ {0x9363, 0x63F7}, //3456 #CJK UNIFIED IDEOGRAPH
+ {0x9364, 0x63F9}, //3457 #CJK UNIFIED IDEOGRAPH
+ {0x9365, 0x63FA}, //3458 #CJK UNIFIED IDEOGRAPH
+ {0x9366, 0x63FB}, //3459 #CJK UNIFIED IDEOGRAPH
+ {0x9367, 0x63FC}, //3460 #CJK UNIFIED IDEOGRAPH
+ {0x9368, 0x63FE}, //3461 #CJK UNIFIED IDEOGRAPH
+ {0x9369, 0x6403}, //3462 #CJK UNIFIED IDEOGRAPH
+ {0x936A, 0x6404}, //3463 #CJK UNIFIED IDEOGRAPH
+ {0x936B, 0x6406}, //3464 #CJK UNIFIED IDEOGRAPH
+ {0x936C, 0x6407}, //3465 #CJK UNIFIED IDEOGRAPH
+ {0x936D, 0x6408}, //3466 #CJK UNIFIED IDEOGRAPH
+ {0x936E, 0x6409}, //3467 #CJK UNIFIED IDEOGRAPH
+ {0x936F, 0x640A}, //3468 #CJK UNIFIED IDEOGRAPH
+ {0x9370, 0x640D}, //3469 #CJK UNIFIED IDEOGRAPH
+ {0x9371, 0x640E}, //3470 #CJK UNIFIED IDEOGRAPH
+ {0x9372, 0x6411}, //3471 #CJK UNIFIED IDEOGRAPH
+ {0x9373, 0x6412}, //3472 #CJK UNIFIED IDEOGRAPH
+ {0x9374, 0x6415}, //3473 #CJK UNIFIED IDEOGRAPH
+ {0x9375, 0x6416}, //3474 #CJK UNIFIED IDEOGRAPH
+ {0x9376, 0x6417}, //3475 #CJK UNIFIED IDEOGRAPH
+ {0x9377, 0x6418}, //3476 #CJK UNIFIED IDEOGRAPH
+ {0x9378, 0x6419}, //3477 #CJK UNIFIED IDEOGRAPH
+ {0x9379, 0x641A}, //3478 #CJK UNIFIED IDEOGRAPH
+ {0x937A, 0x641D}, //3479 #CJK UNIFIED IDEOGRAPH
+ {0x937B, 0x641F}, //3480 #CJK UNIFIED IDEOGRAPH
+ {0x937C, 0x6422}, //3481 #CJK UNIFIED IDEOGRAPH
+ {0x937D, 0x6423}, //3482 #CJK UNIFIED IDEOGRAPH
+ {0x937E, 0x6424}, //3483 #CJK UNIFIED IDEOGRAPH
+ {0x9380, 0x6425}, //3484 #CJK UNIFIED IDEOGRAPH
+ {0x9381, 0x6427}, //3485 #CJK UNIFIED IDEOGRAPH
+ {0x9382, 0x6428}, //3486 #CJK UNIFIED IDEOGRAPH
+ {0x9383, 0x6429}, //3487 #CJK UNIFIED IDEOGRAPH
+ {0x9384, 0x642B}, //3488 #CJK UNIFIED IDEOGRAPH
+ {0x9385, 0x642E}, //3489 #CJK UNIFIED IDEOGRAPH
+ {0x9386, 0x642F}, //3490 #CJK UNIFIED IDEOGRAPH
+ {0x9387, 0x6430}, //3491 #CJK UNIFIED IDEOGRAPH
+ {0x9388, 0x6431}, //3492 #CJK UNIFIED IDEOGRAPH
+ {0x9389, 0x6432}, //3493 #CJK UNIFIED IDEOGRAPH
+ {0x938A, 0x6433}, //3494 #CJK UNIFIED IDEOGRAPH
+ {0x938B, 0x6435}, //3495 #CJK UNIFIED IDEOGRAPH
+ {0x938C, 0x6436}, //3496 #CJK UNIFIED IDEOGRAPH
+ {0x938D, 0x6437}, //3497 #CJK UNIFIED IDEOGRAPH
+ {0x938E, 0x6438}, //3498 #CJK UNIFIED IDEOGRAPH
+ {0x938F, 0x6439}, //3499 #CJK UNIFIED IDEOGRAPH
+ {0x9390, 0x643B}, //3500 #CJK UNIFIED IDEOGRAPH
+ {0x9391, 0x643C}, //3501 #CJK UNIFIED IDEOGRAPH
+ {0x9392, 0x643E}, //3502 #CJK UNIFIED IDEOGRAPH
+ {0x9393, 0x6440}, //3503 #CJK UNIFIED IDEOGRAPH
+ {0x9394, 0x6442}, //3504 #CJK UNIFIED IDEOGRAPH
+ {0x9395, 0x6443}, //3505 #CJK UNIFIED IDEOGRAPH
+ {0x9396, 0x6449}, //3506 #CJK UNIFIED IDEOGRAPH
+ {0x9397, 0x644B}, //3507 #CJK UNIFIED IDEOGRAPH
+ {0x9398, 0x644C}, //3508 #CJK UNIFIED IDEOGRAPH
+ {0x9399, 0x644D}, //3509 #CJK UNIFIED IDEOGRAPH
+ {0x939A, 0x644E}, //3510 #CJK UNIFIED IDEOGRAPH
+ {0x939B, 0x644F}, //3511 #CJK UNIFIED IDEOGRAPH
+ {0x939C, 0x6450}, //3512 #CJK UNIFIED IDEOGRAPH
+ {0x939D, 0x6451}, //3513 #CJK UNIFIED IDEOGRAPH
+ {0x939E, 0x6453}, //3514 #CJK UNIFIED IDEOGRAPH
+ {0x939F, 0x6455}, //3515 #CJK UNIFIED IDEOGRAPH
+ {0x93A0, 0x6456}, //3516 #CJK UNIFIED IDEOGRAPH
+ {0x93A1, 0x6457}, //3517 #CJK UNIFIED IDEOGRAPH
+ {0x93A2, 0x6459}, //3518 #CJK UNIFIED IDEOGRAPH
+ {0x93A3, 0x645A}, //3519 #CJK UNIFIED IDEOGRAPH
+ {0x93A4, 0x645B}, //3520 #CJK UNIFIED IDEOGRAPH
+ {0x93A5, 0x645C}, //3521 #CJK UNIFIED IDEOGRAPH
+ {0x93A6, 0x645D}, //3522 #CJK UNIFIED IDEOGRAPH
+ {0x93A7, 0x645F}, //3523 #CJK UNIFIED IDEOGRAPH
+ {0x93A8, 0x6460}, //3524 #CJK UNIFIED IDEOGRAPH
+ {0x93A9, 0x6461}, //3525 #CJK UNIFIED IDEOGRAPH
+ {0x93AA, 0x6462}, //3526 #CJK UNIFIED IDEOGRAPH
+ {0x93AB, 0x6463}, //3527 #CJK UNIFIED IDEOGRAPH
+ {0x93AC, 0x6464}, //3528 #CJK UNIFIED IDEOGRAPH
+ {0x93AD, 0x6465}, //3529 #CJK UNIFIED IDEOGRAPH
+ {0x93AE, 0x6466}, //3530 #CJK UNIFIED IDEOGRAPH
+ {0x93AF, 0x6468}, //3531 #CJK UNIFIED IDEOGRAPH
+ {0x93B0, 0x646A}, //3532 #CJK UNIFIED IDEOGRAPH
+ {0x93B1, 0x646B}, //3533 #CJK UNIFIED IDEOGRAPH
+ {0x93B2, 0x646C}, //3534 #CJK UNIFIED IDEOGRAPH
+ {0x93B3, 0x646E}, //3535 #CJK UNIFIED IDEOGRAPH
+ {0x93B4, 0x646F}, //3536 #CJK UNIFIED IDEOGRAPH
+ {0x93B5, 0x6470}, //3537 #CJK UNIFIED IDEOGRAPH
+ {0x93B6, 0x6471}, //3538 #CJK UNIFIED IDEOGRAPH
+ {0x93B7, 0x6472}, //3539 #CJK UNIFIED IDEOGRAPH
+ {0x93B8, 0x6473}, //3540 #CJK UNIFIED IDEOGRAPH
+ {0x93B9, 0x6474}, //3541 #CJK UNIFIED IDEOGRAPH
+ {0x93BA, 0x6475}, //3542 #CJK UNIFIED IDEOGRAPH
+ {0x93BB, 0x6476}, //3543 #CJK UNIFIED IDEOGRAPH
+ {0x93BC, 0x6477}, //3544 #CJK UNIFIED IDEOGRAPH
+ {0x93BD, 0x647B}, //3545 #CJK UNIFIED IDEOGRAPH
+ {0x93BE, 0x647C}, //3546 #CJK UNIFIED IDEOGRAPH
+ {0x93BF, 0x647D}, //3547 #CJK UNIFIED IDEOGRAPH
+ {0x93C0, 0x647E}, //3548 #CJK UNIFIED IDEOGRAPH
+ {0x93C1, 0x647F}, //3549 #CJK UNIFIED IDEOGRAPH
+ {0x93C2, 0x6480}, //3550 #CJK UNIFIED IDEOGRAPH
+ {0x93C3, 0x6481}, //3551 #CJK UNIFIED IDEOGRAPH
+ {0x93C4, 0x6483}, //3552 #CJK UNIFIED IDEOGRAPH
+ {0x93C5, 0x6486}, //3553 #CJK UNIFIED IDEOGRAPH
+ {0x93C6, 0x6488}, //3554 #CJK UNIFIED IDEOGRAPH
+ {0x93C7, 0x6489}, //3555 #CJK UNIFIED IDEOGRAPH
+ {0x93C8, 0x648A}, //3556 #CJK UNIFIED IDEOGRAPH
+ {0x93C9, 0x648B}, //3557 #CJK UNIFIED IDEOGRAPH
+ {0x93CA, 0x648C}, //3558 #CJK UNIFIED IDEOGRAPH
+ {0x93CB, 0x648D}, //3559 #CJK UNIFIED IDEOGRAPH
+ {0x93CC, 0x648E}, //3560 #CJK UNIFIED IDEOGRAPH
+ {0x93CD, 0x648F}, //3561 #CJK UNIFIED IDEOGRAPH
+ {0x93CE, 0x6490}, //3562 #CJK UNIFIED IDEOGRAPH
+ {0x93CF, 0x6493}, //3563 #CJK UNIFIED IDEOGRAPH
+ {0x93D0, 0x6494}, //3564 #CJK UNIFIED IDEOGRAPH
+ {0x93D1, 0x6497}, //3565 #CJK UNIFIED IDEOGRAPH
+ {0x93D2, 0x6498}, //3566 #CJK UNIFIED IDEOGRAPH
+ {0x93D3, 0x649A}, //3567 #CJK UNIFIED IDEOGRAPH
+ {0x93D4, 0x649B}, //3568 #CJK UNIFIED IDEOGRAPH
+ {0x93D5, 0x649C}, //3569 #CJK UNIFIED IDEOGRAPH
+ {0x93D6, 0x649D}, //3570 #CJK UNIFIED IDEOGRAPH
+ {0x93D7, 0x649F}, //3571 #CJK UNIFIED IDEOGRAPH
+ {0x93D8, 0x64A0}, //3572 #CJK UNIFIED IDEOGRAPH
+ {0x93D9, 0x64A1}, //3573 #CJK UNIFIED IDEOGRAPH
+ {0x93DA, 0x64A2}, //3574 #CJK UNIFIED IDEOGRAPH
+ {0x93DB, 0x64A3}, //3575 #CJK UNIFIED IDEOGRAPH
+ {0x93DC, 0x64A5}, //3576 #CJK UNIFIED IDEOGRAPH
+ {0x93DD, 0x64A6}, //3577 #CJK UNIFIED IDEOGRAPH
+ {0x93DE, 0x64A7}, //3578 #CJK UNIFIED IDEOGRAPH
+ {0x93DF, 0x64A8}, //3579 #CJK UNIFIED IDEOGRAPH
+ {0x93E0, 0x64AA}, //3580 #CJK UNIFIED IDEOGRAPH
+ {0x93E1, 0x64AB}, //3581 #CJK UNIFIED IDEOGRAPH
+ {0x93E2, 0x64AF}, //3582 #CJK UNIFIED IDEOGRAPH
+ {0x93E3, 0x64B1}, //3583 #CJK UNIFIED IDEOGRAPH
+ {0x93E4, 0x64B2}, //3584 #CJK UNIFIED IDEOGRAPH
+ {0x93E5, 0x64B3}, //3585 #CJK UNIFIED IDEOGRAPH
+ {0x93E6, 0x64B4}, //3586 #CJK UNIFIED IDEOGRAPH
+ {0x93E7, 0x64B6}, //3587 #CJK UNIFIED IDEOGRAPH
+ {0x93E8, 0x64B9}, //3588 #CJK UNIFIED IDEOGRAPH
+ {0x93E9, 0x64BB}, //3589 #CJK UNIFIED IDEOGRAPH
+ {0x93EA, 0x64BD}, //3590 #CJK UNIFIED IDEOGRAPH
+ {0x93EB, 0x64BE}, //3591 #CJK UNIFIED IDEOGRAPH
+ {0x93EC, 0x64BF}, //3592 #CJK UNIFIED IDEOGRAPH
+ {0x93ED, 0x64C1}, //3593 #CJK UNIFIED IDEOGRAPH
+ {0x93EE, 0x64C3}, //3594 #CJK UNIFIED IDEOGRAPH
+ {0x93EF, 0x64C4}, //3595 #CJK UNIFIED IDEOGRAPH
+ {0x93F0, 0x64C6}, //3596 #CJK UNIFIED IDEOGRAPH
+ {0x93F1, 0x64C7}, //3597 #CJK UNIFIED IDEOGRAPH
+ {0x93F2, 0x64C8}, //3598 #CJK UNIFIED IDEOGRAPH
+ {0x93F3, 0x64C9}, //3599 #CJK UNIFIED IDEOGRAPH
+ {0x93F4, 0x64CA}, //3600 #CJK UNIFIED IDEOGRAPH
+ {0x93F5, 0x64CB}, //3601 #CJK UNIFIED IDEOGRAPH
+ {0x93F6, 0x64CC}, //3602 #CJK UNIFIED IDEOGRAPH
+ {0x93F7, 0x64CF}, //3603 #CJK UNIFIED IDEOGRAPH
+ {0x93F8, 0x64D1}, //3604 #CJK UNIFIED IDEOGRAPH
+ {0x93F9, 0x64D3}, //3605 #CJK UNIFIED IDEOGRAPH
+ {0x93FA, 0x64D4}, //3606 #CJK UNIFIED IDEOGRAPH
+ {0x93FB, 0x64D5}, //3607 #CJK UNIFIED IDEOGRAPH
+ {0x93FC, 0x64D6}, //3608 #CJK UNIFIED IDEOGRAPH
+ {0x93FD, 0x64D9}, //3609 #CJK UNIFIED IDEOGRAPH
+ {0x93FE, 0x64DA}, //3610 #CJK UNIFIED IDEOGRAPH
+ {0x9440, 0x64DB}, //3611 #CJK UNIFIED IDEOGRAPH
+ {0x9441, 0x64DC}, //3612 #CJK UNIFIED IDEOGRAPH
+ {0x9442, 0x64DD}, //3613 #CJK UNIFIED IDEOGRAPH
+ {0x9443, 0x64DF}, //3614 #CJK UNIFIED IDEOGRAPH
+ {0x9444, 0x64E0}, //3615 #CJK UNIFIED IDEOGRAPH
+ {0x9445, 0x64E1}, //3616 #CJK UNIFIED IDEOGRAPH
+ {0x9446, 0x64E3}, //3617 #CJK UNIFIED IDEOGRAPH
+ {0x9447, 0x64E5}, //3618 #CJK UNIFIED IDEOGRAPH
+ {0x9448, 0x64E7}, //3619 #CJK UNIFIED IDEOGRAPH
+ {0x9449, 0x64E8}, //3620 #CJK UNIFIED IDEOGRAPH
+ {0x944A, 0x64E9}, //3621 #CJK UNIFIED IDEOGRAPH
+ {0x944B, 0x64EA}, //3622 #CJK UNIFIED IDEOGRAPH
+ {0x944C, 0x64EB}, //3623 #CJK UNIFIED IDEOGRAPH
+ {0x944D, 0x64EC}, //3624 #CJK UNIFIED IDEOGRAPH
+ {0x944E, 0x64ED}, //3625 #CJK UNIFIED IDEOGRAPH
+ {0x944F, 0x64EE}, //3626 #CJK UNIFIED IDEOGRAPH
+ {0x9450, 0x64EF}, //3627 #CJK UNIFIED IDEOGRAPH
+ {0x9451, 0x64F0}, //3628 #CJK UNIFIED IDEOGRAPH
+ {0x9452, 0x64F1}, //3629 #CJK UNIFIED IDEOGRAPH
+ {0x9453, 0x64F2}, //3630 #CJK UNIFIED IDEOGRAPH
+ {0x9454, 0x64F3}, //3631 #CJK UNIFIED IDEOGRAPH
+ {0x9455, 0x64F4}, //3632 #CJK UNIFIED IDEOGRAPH
+ {0x9456, 0x64F5}, //3633 #CJK UNIFIED IDEOGRAPH
+ {0x9457, 0x64F6}, //3634 #CJK UNIFIED IDEOGRAPH
+ {0x9458, 0x64F7}, //3635 #CJK UNIFIED IDEOGRAPH
+ {0x9459, 0x64F8}, //3636 #CJK UNIFIED IDEOGRAPH
+ {0x945A, 0x64F9}, //3637 #CJK UNIFIED IDEOGRAPH
+ {0x945B, 0x64FA}, //3638 #CJK UNIFIED IDEOGRAPH
+ {0x945C, 0x64FB}, //3639 #CJK UNIFIED IDEOGRAPH
+ {0x945D, 0x64FC}, //3640 #CJK UNIFIED IDEOGRAPH
+ {0x945E, 0x64FD}, //3641 #CJK UNIFIED IDEOGRAPH
+ {0x945F, 0x64FE}, //3642 #CJK UNIFIED IDEOGRAPH
+ {0x9460, 0x64FF}, //3643 #CJK UNIFIED IDEOGRAPH
+ {0x9461, 0x6501}, //3644 #CJK UNIFIED IDEOGRAPH
+ {0x9462, 0x6502}, //3645 #CJK UNIFIED IDEOGRAPH
+ {0x9463, 0x6503}, //3646 #CJK UNIFIED IDEOGRAPH
+ {0x9464, 0x6504}, //3647 #CJK UNIFIED IDEOGRAPH
+ {0x9465, 0x6505}, //3648 #CJK UNIFIED IDEOGRAPH
+ {0x9466, 0x6506}, //3649 #CJK UNIFIED IDEOGRAPH
+ {0x9467, 0x6507}, //3650 #CJK UNIFIED IDEOGRAPH
+ {0x9468, 0x6508}, //3651 #CJK UNIFIED IDEOGRAPH
+ {0x9469, 0x650A}, //3652 #CJK UNIFIED IDEOGRAPH
+ {0x946A, 0x650B}, //3653 #CJK UNIFIED IDEOGRAPH
+ {0x946B, 0x650C}, //3654 #CJK UNIFIED IDEOGRAPH
+ {0x946C, 0x650D}, //3655 #CJK UNIFIED IDEOGRAPH
+ {0x946D, 0x650E}, //3656 #CJK UNIFIED IDEOGRAPH
+ {0x946E, 0x650F}, //3657 #CJK UNIFIED IDEOGRAPH
+ {0x946F, 0x6510}, //3658 #CJK UNIFIED IDEOGRAPH
+ {0x9470, 0x6511}, //3659 #CJK UNIFIED IDEOGRAPH
+ {0x9471, 0x6513}, //3660 #CJK UNIFIED IDEOGRAPH
+ {0x9472, 0x6514}, //3661 #CJK UNIFIED IDEOGRAPH
+ {0x9473, 0x6515}, //3662 #CJK UNIFIED IDEOGRAPH
+ {0x9474, 0x6516}, //3663 #CJK UNIFIED IDEOGRAPH
+ {0x9475, 0x6517}, //3664 #CJK UNIFIED IDEOGRAPH
+ {0x9476, 0x6519}, //3665 #CJK UNIFIED IDEOGRAPH
+ {0x9477, 0x651A}, //3666 #CJK UNIFIED IDEOGRAPH
+ {0x9478, 0x651B}, //3667 #CJK UNIFIED IDEOGRAPH
+ {0x9479, 0x651C}, //3668 #CJK UNIFIED IDEOGRAPH
+ {0x947A, 0x651D}, //3669 #CJK UNIFIED IDEOGRAPH
+ {0x947B, 0x651E}, //3670 #CJK UNIFIED IDEOGRAPH
+ {0x947C, 0x651F}, //3671 #CJK UNIFIED IDEOGRAPH
+ {0x947D, 0x6520}, //3672 #CJK UNIFIED IDEOGRAPH
+ {0x947E, 0x6521}, //3673 #CJK UNIFIED IDEOGRAPH
+ {0x9480, 0x6522}, //3674 #CJK UNIFIED IDEOGRAPH
+ {0x9481, 0x6523}, //3675 #CJK UNIFIED IDEOGRAPH
+ {0x9482, 0x6524}, //3676 #CJK UNIFIED IDEOGRAPH
+ {0x9483, 0x6526}, //3677 #CJK UNIFIED IDEOGRAPH
+ {0x9484, 0x6527}, //3678 #CJK UNIFIED IDEOGRAPH
+ {0x9485, 0x6528}, //3679 #CJK UNIFIED IDEOGRAPH
+ {0x9486, 0x6529}, //3680 #CJK UNIFIED IDEOGRAPH
+ {0x9487, 0x652A}, //3681 #CJK UNIFIED IDEOGRAPH
+ {0x9488, 0x652C}, //3682 #CJK UNIFIED IDEOGRAPH
+ {0x9489, 0x652D}, //3683 #CJK UNIFIED IDEOGRAPH
+ {0x948A, 0x6530}, //3684 #CJK UNIFIED IDEOGRAPH
+ {0x948B, 0x6531}, //3685 #CJK UNIFIED IDEOGRAPH
+ {0x948C, 0x6532}, //3686 #CJK UNIFIED IDEOGRAPH
+ {0x948D, 0x6533}, //3687 #CJK UNIFIED IDEOGRAPH
+ {0x948E, 0x6537}, //3688 #CJK UNIFIED IDEOGRAPH
+ {0x948F, 0x653A}, //3689 #CJK UNIFIED IDEOGRAPH
+ {0x9490, 0x653C}, //3690 #CJK UNIFIED IDEOGRAPH
+ {0x9491, 0x653D}, //3691 #CJK UNIFIED IDEOGRAPH
+ {0x9492, 0x6540}, //3692 #CJK UNIFIED IDEOGRAPH
+ {0x9493, 0x6541}, //3693 #CJK UNIFIED IDEOGRAPH
+ {0x9494, 0x6542}, //3694 #CJK UNIFIED IDEOGRAPH
+ {0x9495, 0x6543}, //3695 #CJK UNIFIED IDEOGRAPH
+ {0x9496, 0x6544}, //3696 #CJK UNIFIED IDEOGRAPH
+ {0x9497, 0x6546}, //3697 #CJK UNIFIED IDEOGRAPH
+ {0x9498, 0x6547}, //3698 #CJK UNIFIED IDEOGRAPH
+ {0x9499, 0x654A}, //3699 #CJK UNIFIED IDEOGRAPH
+ {0x949A, 0x654B}, //3700 #CJK UNIFIED IDEOGRAPH
+ {0x949B, 0x654D}, //3701 #CJK UNIFIED IDEOGRAPH
+ {0x949C, 0x654E}, //3702 #CJK UNIFIED IDEOGRAPH
+ {0x949D, 0x6550}, //3703 #CJK UNIFIED IDEOGRAPH
+ {0x949E, 0x6552}, //3704 #CJK UNIFIED IDEOGRAPH
+ {0x949F, 0x6553}, //3705 #CJK UNIFIED IDEOGRAPH
+ {0x94A0, 0x6554}, //3706 #CJK UNIFIED IDEOGRAPH
+ {0x94A1, 0x6557}, //3707 #CJK UNIFIED IDEOGRAPH
+ {0x94A2, 0x6558}, //3708 #CJK UNIFIED IDEOGRAPH
+ {0x94A3, 0x655A}, //3709 #CJK UNIFIED IDEOGRAPH
+ {0x94A4, 0x655C}, //3710 #CJK UNIFIED IDEOGRAPH
+ {0x94A5, 0x655F}, //3711 #CJK UNIFIED IDEOGRAPH
+ {0x94A6, 0x6560}, //3712 #CJK UNIFIED IDEOGRAPH
+ {0x94A7, 0x6561}, //3713 #CJK UNIFIED IDEOGRAPH
+ {0x94A8, 0x6564}, //3714 #CJK UNIFIED IDEOGRAPH
+ {0x94A9, 0x6565}, //3715 #CJK UNIFIED IDEOGRAPH
+ {0x94AA, 0x6567}, //3716 #CJK UNIFIED IDEOGRAPH
+ {0x94AB, 0x6568}, //3717 #CJK UNIFIED IDEOGRAPH
+ {0x94AC, 0x6569}, //3718 #CJK UNIFIED IDEOGRAPH
+ {0x94AD, 0x656A}, //3719 #CJK UNIFIED IDEOGRAPH
+ {0x94AE, 0x656D}, //3720 #CJK UNIFIED IDEOGRAPH
+ {0x94AF, 0x656E}, //3721 #CJK UNIFIED IDEOGRAPH
+ {0x94B0, 0x656F}, //3722 #CJK UNIFIED IDEOGRAPH
+ {0x94B1, 0x6571}, //3723 #CJK UNIFIED IDEOGRAPH
+ {0x94B2, 0x6573}, //3724 #CJK UNIFIED IDEOGRAPH
+ {0x94B3, 0x6575}, //3725 #CJK UNIFIED IDEOGRAPH
+ {0x94B4, 0x6576}, //3726 #CJK UNIFIED IDEOGRAPH
+ {0x94B5, 0x6578}, //3727 #CJK UNIFIED IDEOGRAPH
+ {0x94B6, 0x6579}, //3728 #CJK UNIFIED IDEOGRAPH
+ {0x94B7, 0x657A}, //3729 #CJK UNIFIED IDEOGRAPH
+ {0x94B8, 0x657B}, //3730 #CJK UNIFIED IDEOGRAPH
+ {0x94B9, 0x657C}, //3731 #CJK UNIFIED IDEOGRAPH
+ {0x94BA, 0x657D}, //3732 #CJK UNIFIED IDEOGRAPH
+ {0x94BB, 0x657E}, //3733 #CJK UNIFIED IDEOGRAPH
+ {0x94BC, 0x657F}, //3734 #CJK UNIFIED IDEOGRAPH
+ {0x94BD, 0x6580}, //3735 #CJK UNIFIED IDEOGRAPH
+ {0x94BE, 0x6581}, //3736 #CJK UNIFIED IDEOGRAPH
+ {0x94BF, 0x6582}, //3737 #CJK UNIFIED IDEOGRAPH
+ {0x94C0, 0x6583}, //3738 #CJK UNIFIED IDEOGRAPH
+ {0x94C1, 0x6584}, //3739 #CJK UNIFIED IDEOGRAPH
+ {0x94C2, 0x6585}, //3740 #CJK UNIFIED IDEOGRAPH
+ {0x94C3, 0x6586}, //3741 #CJK UNIFIED IDEOGRAPH
+ {0x94C4, 0x6588}, //3742 #CJK UNIFIED IDEOGRAPH
+ {0x94C5, 0x6589}, //3743 #CJK UNIFIED IDEOGRAPH
+ {0x94C6, 0x658A}, //3744 #CJK UNIFIED IDEOGRAPH
+ {0x94C7, 0x658D}, //3745 #CJK UNIFIED IDEOGRAPH
+ {0x94C8, 0x658E}, //3746 #CJK UNIFIED IDEOGRAPH
+ {0x94C9, 0x658F}, //3747 #CJK UNIFIED IDEOGRAPH
+ {0x94CA, 0x6592}, //3748 #CJK UNIFIED IDEOGRAPH
+ {0x94CB, 0x6594}, //3749 #CJK UNIFIED IDEOGRAPH
+ {0x94CC, 0x6595}, //3750 #CJK UNIFIED IDEOGRAPH
+ {0x94CD, 0x6596}, //3751 #CJK UNIFIED IDEOGRAPH
+ {0x94CE, 0x6598}, //3752 #CJK UNIFIED IDEOGRAPH
+ {0x94CF, 0x659A}, //3753 #CJK UNIFIED IDEOGRAPH
+ {0x94D0, 0x659D}, //3754 #CJK UNIFIED IDEOGRAPH
+ {0x94D1, 0x659E}, //3755 #CJK UNIFIED IDEOGRAPH
+ {0x94D2, 0x65A0}, //3756 #CJK UNIFIED IDEOGRAPH
+ {0x94D3, 0x65A2}, //3757 #CJK UNIFIED IDEOGRAPH
+ {0x94D4, 0x65A3}, //3758 #CJK UNIFIED IDEOGRAPH
+ {0x94D5, 0x65A6}, //3759 #CJK UNIFIED IDEOGRAPH
+ {0x94D6, 0x65A8}, //3760 #CJK UNIFIED IDEOGRAPH
+ {0x94D7, 0x65AA}, //3761 #CJK UNIFIED IDEOGRAPH
+ {0x94D8, 0x65AC}, //3762 #CJK UNIFIED IDEOGRAPH
+ {0x94D9, 0x65AE}, //3763 #CJK UNIFIED IDEOGRAPH
+ {0x94DA, 0x65B1}, //3764 #CJK UNIFIED IDEOGRAPH
+ {0x94DB, 0x65B2}, //3765 #CJK UNIFIED IDEOGRAPH
+ {0x94DC, 0x65B3}, //3766 #CJK UNIFIED IDEOGRAPH
+ {0x94DD, 0x65B4}, //3767 #CJK UNIFIED IDEOGRAPH
+ {0x94DE, 0x65B5}, //3768 #CJK UNIFIED IDEOGRAPH
+ {0x94DF, 0x65B6}, //3769 #CJK UNIFIED IDEOGRAPH
+ {0x94E0, 0x65B7}, //3770 #CJK UNIFIED IDEOGRAPH
+ {0x94E1, 0x65B8}, //3771 #CJK UNIFIED IDEOGRAPH
+ {0x94E2, 0x65BA}, //3772 #CJK UNIFIED IDEOGRAPH
+ {0x94E3, 0x65BB}, //3773 #CJK UNIFIED IDEOGRAPH
+ {0x94E4, 0x65BE}, //3774 #CJK UNIFIED IDEOGRAPH
+ {0x94E5, 0x65BF}, //3775 #CJK UNIFIED IDEOGRAPH
+ {0x94E6, 0x65C0}, //3776 #CJK UNIFIED IDEOGRAPH
+ {0x94E7, 0x65C2}, //3777 #CJK UNIFIED IDEOGRAPH
+ {0x94E8, 0x65C7}, //3778 #CJK UNIFIED IDEOGRAPH
+ {0x94E9, 0x65C8}, //3779 #CJK UNIFIED IDEOGRAPH
+ {0x94EA, 0x65C9}, //3780 #CJK UNIFIED IDEOGRAPH
+ {0x94EB, 0x65CA}, //3781 #CJK UNIFIED IDEOGRAPH
+ {0x94EC, 0x65CD}, //3782 #CJK UNIFIED IDEOGRAPH
+ {0x94ED, 0x65D0}, //3783 #CJK UNIFIED IDEOGRAPH
+ {0x94EE, 0x65D1}, //3784 #CJK UNIFIED IDEOGRAPH
+ {0x94EF, 0x65D3}, //3785 #CJK UNIFIED IDEOGRAPH
+ {0x94F0, 0x65D4}, //3786 #CJK UNIFIED IDEOGRAPH
+ {0x94F1, 0x65D5}, //3787 #CJK UNIFIED IDEOGRAPH
+ {0x94F2, 0x65D8}, //3788 #CJK UNIFIED IDEOGRAPH
+ {0x94F3, 0x65D9}, //3789 #CJK UNIFIED IDEOGRAPH
+ {0x94F4, 0x65DA}, //3790 #CJK UNIFIED IDEOGRAPH
+ {0x94F5, 0x65DB}, //3791 #CJK UNIFIED IDEOGRAPH
+ {0x94F6, 0x65DC}, //3792 #CJK UNIFIED IDEOGRAPH
+ {0x94F7, 0x65DD}, //3793 #CJK UNIFIED IDEOGRAPH
+ {0x94F8, 0x65DE}, //3794 #CJK UNIFIED IDEOGRAPH
+ {0x94F9, 0x65DF}, //3795 #CJK UNIFIED IDEOGRAPH
+ {0x94FA, 0x65E1}, //3796 #CJK UNIFIED IDEOGRAPH
+ {0x94FB, 0x65E3}, //3797 #CJK UNIFIED IDEOGRAPH
+ {0x94FC, 0x65E4}, //3798 #CJK UNIFIED IDEOGRAPH
+ {0x94FD, 0x65EA}, //3799 #CJK UNIFIED IDEOGRAPH
+ {0x94FE, 0x65EB}, //3800 #CJK UNIFIED IDEOGRAPH
+ {0x9540, 0x65F2}, //3801 #CJK UNIFIED IDEOGRAPH
+ {0x9541, 0x65F3}, //3802 #CJK UNIFIED IDEOGRAPH
+ {0x9542, 0x65F4}, //3803 #CJK UNIFIED IDEOGRAPH
+ {0x9543, 0x65F5}, //3804 #CJK UNIFIED IDEOGRAPH
+ {0x9544, 0x65F8}, //3805 #CJK UNIFIED IDEOGRAPH
+ {0x9545, 0x65F9}, //3806 #CJK UNIFIED IDEOGRAPH
+ {0x9546, 0x65FB}, //3807 #CJK UNIFIED IDEOGRAPH
+ {0x9547, 0x65FC}, //3808 #CJK UNIFIED IDEOGRAPH
+ {0x9548, 0x65FD}, //3809 #CJK UNIFIED IDEOGRAPH
+ {0x9549, 0x65FE}, //3810 #CJK UNIFIED IDEOGRAPH
+ {0x954A, 0x65FF}, //3811 #CJK UNIFIED IDEOGRAPH
+ {0x954B, 0x6601}, //3812 #CJK UNIFIED IDEOGRAPH
+ {0x954C, 0x6604}, //3813 #CJK UNIFIED IDEOGRAPH
+ {0x954D, 0x6605}, //3814 #CJK UNIFIED IDEOGRAPH
+ {0x954E, 0x6607}, //3815 #CJK UNIFIED IDEOGRAPH
+ {0x954F, 0x6608}, //3816 #CJK UNIFIED IDEOGRAPH
+ {0x9550, 0x6609}, //3817 #CJK UNIFIED IDEOGRAPH
+ {0x9551, 0x660B}, //3818 #CJK UNIFIED IDEOGRAPH
+ {0x9552, 0x660D}, //3819 #CJK UNIFIED IDEOGRAPH
+ {0x9553, 0x6610}, //3820 #CJK UNIFIED IDEOGRAPH
+ {0x9554, 0x6611}, //3821 #CJK UNIFIED IDEOGRAPH
+ {0x9555, 0x6612}, //3822 #CJK UNIFIED IDEOGRAPH
+ {0x9556, 0x6616}, //3823 #CJK UNIFIED IDEOGRAPH
+ {0x9557, 0x6617}, //3824 #CJK UNIFIED IDEOGRAPH
+ {0x9558, 0x6618}, //3825 #CJK UNIFIED IDEOGRAPH
+ {0x9559, 0x661A}, //3826 #CJK UNIFIED IDEOGRAPH
+ {0x955A, 0x661B}, //3827 #CJK UNIFIED IDEOGRAPH
+ {0x955B, 0x661C}, //3828 #CJK UNIFIED IDEOGRAPH
+ {0x955C, 0x661E}, //3829 #CJK UNIFIED IDEOGRAPH
+ {0x955D, 0x6621}, //3830 #CJK UNIFIED IDEOGRAPH
+ {0x955E, 0x6622}, //3831 #CJK UNIFIED IDEOGRAPH
+ {0x955F, 0x6623}, //3832 #CJK UNIFIED IDEOGRAPH
+ {0x9560, 0x6624}, //3833 #CJK UNIFIED IDEOGRAPH
+ {0x9561, 0x6626}, //3834 #CJK UNIFIED IDEOGRAPH
+ {0x9562, 0x6629}, //3835 #CJK UNIFIED IDEOGRAPH
+ {0x9563, 0x662A}, //3836 #CJK UNIFIED IDEOGRAPH
+ {0x9564, 0x662B}, //3837 #CJK UNIFIED IDEOGRAPH
+ {0x9565, 0x662C}, //3838 #CJK UNIFIED IDEOGRAPH
+ {0x9566, 0x662E}, //3839 #CJK UNIFIED IDEOGRAPH
+ {0x9567, 0x6630}, //3840 #CJK UNIFIED IDEOGRAPH
+ {0x9568, 0x6632}, //3841 #CJK UNIFIED IDEOGRAPH
+ {0x9569, 0x6633}, //3842 #CJK UNIFIED IDEOGRAPH
+ {0x956A, 0x6637}, //3843 #CJK UNIFIED IDEOGRAPH
+ {0x956B, 0x6638}, //3844 #CJK UNIFIED IDEOGRAPH
+ {0x956C, 0x6639}, //3845 #CJK UNIFIED IDEOGRAPH
+ {0x956D, 0x663A}, //3846 #CJK UNIFIED IDEOGRAPH
+ {0x956E, 0x663B}, //3847 #CJK UNIFIED IDEOGRAPH
+ {0x956F, 0x663D}, //3848 #CJK UNIFIED IDEOGRAPH
+ {0x9570, 0x663F}, //3849 #CJK UNIFIED IDEOGRAPH
+ {0x9571, 0x6640}, //3850 #CJK UNIFIED IDEOGRAPH
+ {0x9572, 0x6642}, //3851 #CJK UNIFIED IDEOGRAPH
+ {0x9573, 0x6644}, //3852 #CJK UNIFIED IDEOGRAPH
+ {0x9574, 0x6645}, //3853 #CJK UNIFIED IDEOGRAPH
+ {0x9575, 0x6646}, //3854 #CJK UNIFIED IDEOGRAPH
+ {0x9576, 0x6647}, //3855 #CJK UNIFIED IDEOGRAPH
+ {0x9577, 0x6648}, //3856 #CJK UNIFIED IDEOGRAPH
+ {0x9578, 0x6649}, //3857 #CJK UNIFIED IDEOGRAPH
+ {0x9579, 0x664A}, //3858 #CJK UNIFIED IDEOGRAPH
+ {0x957A, 0x664D}, //3859 #CJK UNIFIED IDEOGRAPH
+ {0x957B, 0x664E}, //3860 #CJK UNIFIED IDEOGRAPH
+ {0x957C, 0x6650}, //3861 #CJK UNIFIED IDEOGRAPH
+ {0x957D, 0x6651}, //3862 #CJK UNIFIED IDEOGRAPH
+ {0x957E, 0x6658}, //3863 #CJK UNIFIED IDEOGRAPH
+ {0x9580, 0x6659}, //3864 #CJK UNIFIED IDEOGRAPH
+ {0x9581, 0x665B}, //3865 #CJK UNIFIED IDEOGRAPH
+ {0x9582, 0x665C}, //3866 #CJK UNIFIED IDEOGRAPH
+ {0x9583, 0x665D}, //3867 #CJK UNIFIED IDEOGRAPH
+ {0x9584, 0x665E}, //3868 #CJK UNIFIED IDEOGRAPH
+ {0x9585, 0x6660}, //3869 #CJK UNIFIED IDEOGRAPH
+ {0x9586, 0x6662}, //3870 #CJK UNIFIED IDEOGRAPH
+ {0x9587, 0x6663}, //3871 #CJK UNIFIED IDEOGRAPH
+ {0x9588, 0x6665}, //3872 #CJK UNIFIED IDEOGRAPH
+ {0x9589, 0x6667}, //3873 #CJK UNIFIED IDEOGRAPH
+ {0x958A, 0x6669}, //3874 #CJK UNIFIED IDEOGRAPH
+ {0x958B, 0x666A}, //3875 #CJK UNIFIED IDEOGRAPH
+ {0x958C, 0x666B}, //3876 #CJK UNIFIED IDEOGRAPH
+ {0x958D, 0x666C}, //3877 #CJK UNIFIED IDEOGRAPH
+ {0x958E, 0x666D}, //3878 #CJK UNIFIED IDEOGRAPH
+ {0x958F, 0x6671}, //3879 #CJK UNIFIED IDEOGRAPH
+ {0x9590, 0x6672}, //3880 #CJK UNIFIED IDEOGRAPH
+ {0x9591, 0x6673}, //3881 #CJK UNIFIED IDEOGRAPH
+ {0x9592, 0x6675}, //3882 #CJK UNIFIED IDEOGRAPH
+ {0x9593, 0x6678}, //3883 #CJK UNIFIED IDEOGRAPH
+ {0x9594, 0x6679}, //3884 #CJK UNIFIED IDEOGRAPH
+ {0x9595, 0x667B}, //3885 #CJK UNIFIED IDEOGRAPH
+ {0x9596, 0x667C}, //3886 #CJK UNIFIED IDEOGRAPH
+ {0x9597, 0x667D}, //3887 #CJK UNIFIED IDEOGRAPH
+ {0x9598, 0x667F}, //3888 #CJK UNIFIED IDEOGRAPH
+ {0x9599, 0x6680}, //3889 #CJK UNIFIED IDEOGRAPH
+ {0x959A, 0x6681}, //3890 #CJK UNIFIED IDEOGRAPH
+ {0x959B, 0x6683}, //3891 #CJK UNIFIED IDEOGRAPH
+ {0x959C, 0x6685}, //3892 #CJK UNIFIED IDEOGRAPH
+ {0x959D, 0x6686}, //3893 #CJK UNIFIED IDEOGRAPH
+ {0x959E, 0x6688}, //3894 #CJK UNIFIED IDEOGRAPH
+ {0x959F, 0x6689}, //3895 #CJK UNIFIED IDEOGRAPH
+ {0x95A0, 0x668A}, //3896 #CJK UNIFIED IDEOGRAPH
+ {0x95A1, 0x668B}, //3897 #CJK UNIFIED IDEOGRAPH
+ {0x95A2, 0x668D}, //3898 #CJK UNIFIED IDEOGRAPH
+ {0x95A3, 0x668E}, //3899 #CJK UNIFIED IDEOGRAPH
+ {0x95A4, 0x668F}, //3900 #CJK UNIFIED IDEOGRAPH
+ {0x95A5, 0x6690}, //3901 #CJK UNIFIED IDEOGRAPH
+ {0x95A6, 0x6692}, //3902 #CJK UNIFIED IDEOGRAPH
+ {0x95A7, 0x6693}, //3903 #CJK UNIFIED IDEOGRAPH
+ {0x95A8, 0x6694}, //3904 #CJK UNIFIED IDEOGRAPH
+ {0x95A9, 0x6695}, //3905 #CJK UNIFIED IDEOGRAPH
+ {0x95AA, 0x6698}, //3906 #CJK UNIFIED IDEOGRAPH
+ {0x95AB, 0x6699}, //3907 #CJK UNIFIED IDEOGRAPH
+ {0x95AC, 0x669A}, //3908 #CJK UNIFIED IDEOGRAPH
+ {0x95AD, 0x669B}, //3909 #CJK UNIFIED IDEOGRAPH
+ {0x95AE, 0x669C}, //3910 #CJK UNIFIED IDEOGRAPH
+ {0x95AF, 0x669E}, //3911 #CJK UNIFIED IDEOGRAPH
+ {0x95B0, 0x669F}, //3912 #CJK UNIFIED IDEOGRAPH
+ {0x95B1, 0x66A0}, //3913 #CJK UNIFIED IDEOGRAPH
+ {0x95B2, 0x66A1}, //3914 #CJK UNIFIED IDEOGRAPH
+ {0x95B3, 0x66A2}, //3915 #CJK UNIFIED IDEOGRAPH
+ {0x95B4, 0x66A3}, //3916 #CJK UNIFIED IDEOGRAPH
+ {0x95B5, 0x66A4}, //3917 #CJK UNIFIED IDEOGRAPH
+ {0x95B6, 0x66A5}, //3918 #CJK UNIFIED IDEOGRAPH
+ {0x95B7, 0x66A6}, //3919 #CJK UNIFIED IDEOGRAPH
+ {0x95B8, 0x66A9}, //3920 #CJK UNIFIED IDEOGRAPH
+ {0x95B9, 0x66AA}, //3921 #CJK UNIFIED IDEOGRAPH
+ {0x95BA, 0x66AB}, //3922 #CJK UNIFIED IDEOGRAPH
+ {0x95BB, 0x66AC}, //3923 #CJK UNIFIED IDEOGRAPH
+ {0x95BC, 0x66AD}, //3924 #CJK UNIFIED IDEOGRAPH
+ {0x95BD, 0x66AF}, //3925 #CJK UNIFIED IDEOGRAPH
+ {0x95BE, 0x66B0}, //3926 #CJK UNIFIED IDEOGRAPH
+ {0x95BF, 0x66B1}, //3927 #CJK UNIFIED IDEOGRAPH
+ {0x95C0, 0x66B2}, //3928 #CJK UNIFIED IDEOGRAPH
+ {0x95C1, 0x66B3}, //3929 #CJK UNIFIED IDEOGRAPH
+ {0x95C2, 0x66B5}, //3930 #CJK UNIFIED IDEOGRAPH
+ {0x95C3, 0x66B6}, //3931 #CJK UNIFIED IDEOGRAPH
+ {0x95C4, 0x66B7}, //3932 #CJK UNIFIED IDEOGRAPH
+ {0x95C5, 0x66B8}, //3933 #CJK UNIFIED IDEOGRAPH
+ {0x95C6, 0x66BA}, //3934 #CJK UNIFIED IDEOGRAPH
+ {0x95C7, 0x66BB}, //3935 #CJK UNIFIED IDEOGRAPH
+ {0x95C8, 0x66BC}, //3936 #CJK UNIFIED IDEOGRAPH
+ {0x95C9, 0x66BD}, //3937 #CJK UNIFIED IDEOGRAPH
+ {0x95CA, 0x66BF}, //3938 #CJK UNIFIED IDEOGRAPH
+ {0x95CB, 0x66C0}, //3939 #CJK UNIFIED IDEOGRAPH
+ {0x95CC, 0x66C1}, //3940 #CJK UNIFIED IDEOGRAPH
+ {0x95CD, 0x66C2}, //3941 #CJK UNIFIED IDEOGRAPH
+ {0x95CE, 0x66C3}, //3942 #CJK UNIFIED IDEOGRAPH
+ {0x95CF, 0x66C4}, //3943 #CJK UNIFIED IDEOGRAPH
+ {0x95D0, 0x66C5}, //3944 #CJK UNIFIED IDEOGRAPH
+ {0x95D1, 0x66C6}, //3945 #CJK UNIFIED IDEOGRAPH
+ {0x95D2, 0x66C7}, //3946 #CJK UNIFIED IDEOGRAPH
+ {0x95D3, 0x66C8}, //3947 #CJK UNIFIED IDEOGRAPH
+ {0x95D4, 0x66C9}, //3948 #CJK UNIFIED IDEOGRAPH
+ {0x95D5, 0x66CA}, //3949 #CJK UNIFIED IDEOGRAPH
+ {0x95D6, 0x66CB}, //3950 #CJK UNIFIED IDEOGRAPH
+ {0x95D7, 0x66CC}, //3951 #CJK UNIFIED IDEOGRAPH
+ {0x95D8, 0x66CD}, //3952 #CJK UNIFIED IDEOGRAPH
+ {0x95D9, 0x66CE}, //3953 #CJK UNIFIED IDEOGRAPH
+ {0x95DA, 0x66CF}, //3954 #CJK UNIFIED IDEOGRAPH
+ {0x95DB, 0x66D0}, //3955 #CJK UNIFIED IDEOGRAPH
+ {0x95DC, 0x66D1}, //3956 #CJK UNIFIED IDEOGRAPH
+ {0x95DD, 0x66D2}, //3957 #CJK UNIFIED IDEOGRAPH
+ {0x95DE, 0x66D3}, //3958 #CJK UNIFIED IDEOGRAPH
+ {0x95DF, 0x66D4}, //3959 #CJK UNIFIED IDEOGRAPH
+ {0x95E0, 0x66D5}, //3960 #CJK UNIFIED IDEOGRAPH
+ {0x95E1, 0x66D6}, //3961 #CJK UNIFIED IDEOGRAPH
+ {0x95E2, 0x66D7}, //3962 #CJK UNIFIED IDEOGRAPH
+ {0x95E3, 0x66D8}, //3963 #CJK UNIFIED IDEOGRAPH
+ {0x95E4, 0x66DA}, //3964 #CJK UNIFIED IDEOGRAPH
+ {0x95E5, 0x66DE}, //3965 #CJK UNIFIED IDEOGRAPH
+ {0x95E6, 0x66DF}, //3966 #CJK UNIFIED IDEOGRAPH
+ {0x95E7, 0x66E0}, //3967 #CJK UNIFIED IDEOGRAPH
+ {0x95E8, 0x66E1}, //3968 #CJK UNIFIED IDEOGRAPH
+ {0x95E9, 0x66E2}, //3969 #CJK UNIFIED IDEOGRAPH
+ {0x95EA, 0x66E3}, //3970 #CJK UNIFIED IDEOGRAPH
+ {0x95EB, 0x66E4}, //3971 #CJK UNIFIED IDEOGRAPH
+ {0x95EC, 0x66E5}, //3972 #CJK UNIFIED IDEOGRAPH
+ {0x95ED, 0x66E7}, //3973 #CJK UNIFIED IDEOGRAPH
+ {0x95EE, 0x66E8}, //3974 #CJK UNIFIED IDEOGRAPH
+ {0x95EF, 0x66EA}, //3975 #CJK UNIFIED IDEOGRAPH
+ {0x95F0, 0x66EB}, //3976 #CJK UNIFIED IDEOGRAPH
+ {0x95F1, 0x66EC}, //3977 #CJK UNIFIED IDEOGRAPH
+ {0x95F2, 0x66ED}, //3978 #CJK UNIFIED IDEOGRAPH
+ {0x95F3, 0x66EE}, //3979 #CJK UNIFIED IDEOGRAPH
+ {0x95F4, 0x66EF}, //3980 #CJK UNIFIED IDEOGRAPH
+ {0x95F5, 0x66F1}, //3981 #CJK UNIFIED IDEOGRAPH
+ {0x95F6, 0x66F5}, //3982 #CJK UNIFIED IDEOGRAPH
+ {0x95F7, 0x66F6}, //3983 #CJK UNIFIED IDEOGRAPH
+ {0x95F8, 0x66F8}, //3984 #CJK UNIFIED IDEOGRAPH
+ {0x95F9, 0x66FA}, //3985 #CJK UNIFIED IDEOGRAPH
+ {0x95FA, 0x66FB}, //3986 #CJK UNIFIED IDEOGRAPH
+ {0x95FB, 0x66FD}, //3987 #CJK UNIFIED IDEOGRAPH
+ {0x95FC, 0x6701}, //3988 #CJK UNIFIED IDEOGRAPH
+ {0x95FD, 0x6702}, //3989 #CJK UNIFIED IDEOGRAPH
+ {0x95FE, 0x6703}, //3990 #CJK UNIFIED IDEOGRAPH
+ {0x9640, 0x6704}, //3991 #CJK UNIFIED IDEOGRAPH
+ {0x9641, 0x6705}, //3992 #CJK UNIFIED IDEOGRAPH
+ {0x9642, 0x6706}, //3993 #CJK UNIFIED IDEOGRAPH
+ {0x9643, 0x6707}, //3994 #CJK UNIFIED IDEOGRAPH
+ {0x9644, 0x670C}, //3995 #CJK UNIFIED IDEOGRAPH
+ {0x9645, 0x670E}, //3996 #CJK UNIFIED IDEOGRAPH
+ {0x9646, 0x670F}, //3997 #CJK UNIFIED IDEOGRAPH
+ {0x9647, 0x6711}, //3998 #CJK UNIFIED IDEOGRAPH
+ {0x9648, 0x6712}, //3999 #CJK UNIFIED IDEOGRAPH
+ {0x9649, 0x6713}, //4000 #CJK UNIFIED IDEOGRAPH
+ {0x964A, 0x6716}, //4001 #CJK UNIFIED IDEOGRAPH
+ {0x964B, 0x6718}, //4002 #CJK UNIFIED IDEOGRAPH
+ {0x964C, 0x6719}, //4003 #CJK UNIFIED IDEOGRAPH
+ {0x964D, 0x671A}, //4004 #CJK UNIFIED IDEOGRAPH
+ {0x964E, 0x671C}, //4005 #CJK UNIFIED IDEOGRAPH
+ {0x964F, 0x671E}, //4006 #CJK UNIFIED IDEOGRAPH
+ {0x9650, 0x6720}, //4007 #CJK UNIFIED IDEOGRAPH
+ {0x9651, 0x6721}, //4008 #CJK UNIFIED IDEOGRAPH
+ {0x9652, 0x6722}, //4009 #CJK UNIFIED IDEOGRAPH
+ {0x9653, 0x6723}, //4010 #CJK UNIFIED IDEOGRAPH
+ {0x9654, 0x6724}, //4011 #CJK UNIFIED IDEOGRAPH
+ {0x9655, 0x6725}, //4012 #CJK UNIFIED IDEOGRAPH
+ {0x9656, 0x6727}, //4013 #CJK UNIFIED IDEOGRAPH
+ {0x9657, 0x6729}, //4014 #CJK UNIFIED IDEOGRAPH
+ {0x9658, 0x672E}, //4015 #CJK UNIFIED IDEOGRAPH
+ {0x9659, 0x6730}, //4016 #CJK UNIFIED IDEOGRAPH
+ {0x965A, 0x6732}, //4017 #CJK UNIFIED IDEOGRAPH
+ {0x965B, 0x6733}, //4018 #CJK UNIFIED IDEOGRAPH
+ {0x965C, 0x6736}, //4019 #CJK UNIFIED IDEOGRAPH
+ {0x965D, 0x6737}, //4020 #CJK UNIFIED IDEOGRAPH
+ {0x965E, 0x6738}, //4021 #CJK UNIFIED IDEOGRAPH
+ {0x965F, 0x6739}, //4022 #CJK UNIFIED IDEOGRAPH
+ {0x9660, 0x673B}, //4023 #CJK UNIFIED IDEOGRAPH
+ {0x9661, 0x673C}, //4024 #CJK UNIFIED IDEOGRAPH
+ {0x9662, 0x673E}, //4025 #CJK UNIFIED IDEOGRAPH
+ {0x9663, 0x673F}, //4026 #CJK UNIFIED IDEOGRAPH
+ {0x9664, 0x6741}, //4027 #CJK UNIFIED IDEOGRAPH
+ {0x9665, 0x6744}, //4028 #CJK UNIFIED IDEOGRAPH
+ {0x9666, 0x6745}, //4029 #CJK UNIFIED IDEOGRAPH
+ {0x9667, 0x6747}, //4030 #CJK UNIFIED IDEOGRAPH
+ {0x9668, 0x674A}, //4031 #CJK UNIFIED IDEOGRAPH
+ {0x9669, 0x674B}, //4032 #CJK UNIFIED IDEOGRAPH
+ {0x966A, 0x674D}, //4033 #CJK UNIFIED IDEOGRAPH
+ {0x966B, 0x6752}, //4034 #CJK UNIFIED IDEOGRAPH
+ {0x966C, 0x6754}, //4035 #CJK UNIFIED IDEOGRAPH
+ {0x966D, 0x6755}, //4036 #CJK UNIFIED IDEOGRAPH
+ {0x966E, 0x6757}, //4037 #CJK UNIFIED IDEOGRAPH
+ {0x966F, 0x6758}, //4038 #CJK UNIFIED IDEOGRAPH
+ {0x9670, 0x6759}, //4039 #CJK UNIFIED IDEOGRAPH
+ {0x9671, 0x675A}, //4040 #CJK UNIFIED IDEOGRAPH
+ {0x9672, 0x675B}, //4041 #CJK UNIFIED IDEOGRAPH
+ {0x9673, 0x675D}, //4042 #CJK UNIFIED IDEOGRAPH
+ {0x9674, 0x6762}, //4043 #CJK UNIFIED IDEOGRAPH
+ {0x9675, 0x6763}, //4044 #CJK UNIFIED IDEOGRAPH
+ {0x9676, 0x6764}, //4045 #CJK UNIFIED IDEOGRAPH
+ {0x9677, 0x6766}, //4046 #CJK UNIFIED IDEOGRAPH
+ {0x9678, 0x6767}, //4047 #CJK UNIFIED IDEOGRAPH
+ {0x9679, 0x676B}, //4048 #CJK UNIFIED IDEOGRAPH
+ {0x967A, 0x676C}, //4049 #CJK UNIFIED IDEOGRAPH
+ {0x967B, 0x676E}, //4050 #CJK UNIFIED IDEOGRAPH
+ {0x967C, 0x6771}, //4051 #CJK UNIFIED IDEOGRAPH
+ {0x967D, 0x6774}, //4052 #CJK UNIFIED IDEOGRAPH
+ {0x967E, 0x6776}, //4053 #CJK UNIFIED IDEOGRAPH
+ {0x9680, 0x6778}, //4054 #CJK UNIFIED IDEOGRAPH
+ {0x9681, 0x6779}, //4055 #CJK UNIFIED IDEOGRAPH
+ {0x9682, 0x677A}, //4056 #CJK UNIFIED IDEOGRAPH
+ {0x9683, 0x677B}, //4057 #CJK UNIFIED IDEOGRAPH
+ {0x9684, 0x677D}, //4058 #CJK UNIFIED IDEOGRAPH
+ {0x9685, 0x6780}, //4059 #CJK UNIFIED IDEOGRAPH
+ {0x9686, 0x6782}, //4060 #CJK UNIFIED IDEOGRAPH
+ {0x9687, 0x6783}, //4061 #CJK UNIFIED IDEOGRAPH
+ {0x9688, 0x6785}, //4062 #CJK UNIFIED IDEOGRAPH
+ {0x9689, 0x6786}, //4063 #CJK UNIFIED IDEOGRAPH
+ {0x968A, 0x6788}, //4064 #CJK UNIFIED IDEOGRAPH
+ {0x968B, 0x678A}, //4065 #CJK UNIFIED IDEOGRAPH
+ {0x968C, 0x678C}, //4066 #CJK UNIFIED IDEOGRAPH
+ {0x968D, 0x678D}, //4067 #CJK UNIFIED IDEOGRAPH
+ {0x968E, 0x678E}, //4068 #CJK UNIFIED IDEOGRAPH
+ {0x968F, 0x678F}, //4069 #CJK UNIFIED IDEOGRAPH
+ {0x9690, 0x6791}, //4070 #CJK UNIFIED IDEOGRAPH
+ {0x9691, 0x6792}, //4071 #CJK UNIFIED IDEOGRAPH
+ {0x9692, 0x6793}, //4072 #CJK UNIFIED IDEOGRAPH
+ {0x9693, 0x6794}, //4073 #CJK UNIFIED IDEOGRAPH
+ {0x9694, 0x6796}, //4074 #CJK UNIFIED IDEOGRAPH
+ {0x9695, 0x6799}, //4075 #CJK UNIFIED IDEOGRAPH
+ {0x9696, 0x679B}, //4076 #CJK UNIFIED IDEOGRAPH
+ {0x9697, 0x679F}, //4077 #CJK UNIFIED IDEOGRAPH
+ {0x9698, 0x67A0}, //4078 #CJK UNIFIED IDEOGRAPH
+ {0x9699, 0x67A1}, //4079 #CJK UNIFIED IDEOGRAPH
+ {0x969A, 0x67A4}, //4080 #CJK UNIFIED IDEOGRAPH
+ {0x969B, 0x67A6}, //4081 #CJK UNIFIED IDEOGRAPH
+ {0x969C, 0x67A9}, //4082 #CJK UNIFIED IDEOGRAPH
+ {0x969D, 0x67AC}, //4083 #CJK UNIFIED IDEOGRAPH
+ {0x969E, 0x67AE}, //4084 #CJK UNIFIED IDEOGRAPH
+ {0x969F, 0x67B1}, //4085 #CJK UNIFIED IDEOGRAPH
+ {0x96A0, 0x67B2}, //4086 #CJK UNIFIED IDEOGRAPH
+ {0x96A1, 0x67B4}, //4087 #CJK UNIFIED IDEOGRAPH
+ {0x96A2, 0x67B9}, //4088 #CJK UNIFIED IDEOGRAPH
+ {0x96A3, 0x67BA}, //4089 #CJK UNIFIED IDEOGRAPH
+ {0x96A4, 0x67BB}, //4090 #CJK UNIFIED IDEOGRAPH
+ {0x96A5, 0x67BC}, //4091 #CJK UNIFIED IDEOGRAPH
+ {0x96A6, 0x67BD}, //4092 #CJK UNIFIED IDEOGRAPH
+ {0x96A7, 0x67BE}, //4093 #CJK UNIFIED IDEOGRAPH
+ {0x96A8, 0x67BF}, //4094 #CJK UNIFIED IDEOGRAPH
+ {0x96A9, 0x67C0}, //4095 #CJK UNIFIED IDEOGRAPH
+ {0x96AA, 0x67C2}, //4096 #CJK UNIFIED IDEOGRAPH
+ {0x96AB, 0x67C5}, //4097 #CJK UNIFIED IDEOGRAPH
+ {0x96AC, 0x67C6}, //4098 #CJK UNIFIED IDEOGRAPH
+ {0x96AD, 0x67C7}, //4099 #CJK UNIFIED IDEOGRAPH
+ {0x96AE, 0x67C8}, //4100 #CJK UNIFIED IDEOGRAPH
+ {0x96AF, 0x67C9}, //4101 #CJK UNIFIED IDEOGRAPH
+ {0x96B0, 0x67CA}, //4102 #CJK UNIFIED IDEOGRAPH
+ {0x96B1, 0x67CB}, //4103 #CJK UNIFIED IDEOGRAPH
+ {0x96B2, 0x67CC}, //4104 #CJK UNIFIED IDEOGRAPH
+ {0x96B3, 0x67CD}, //4105 #CJK UNIFIED IDEOGRAPH
+ {0x96B4, 0x67CE}, //4106 #CJK UNIFIED IDEOGRAPH
+ {0x96B5, 0x67D5}, //4107 #CJK UNIFIED IDEOGRAPH
+ {0x96B6, 0x67D6}, //4108 #CJK UNIFIED IDEOGRAPH
+ {0x96B7, 0x67D7}, //4109 #CJK UNIFIED IDEOGRAPH
+ {0x96B8, 0x67DB}, //4110 #CJK UNIFIED IDEOGRAPH
+ {0x96B9, 0x67DF}, //4111 #CJK UNIFIED IDEOGRAPH
+ {0x96BA, 0x67E1}, //4112 #CJK UNIFIED IDEOGRAPH
+ {0x96BB, 0x67E3}, //4113 #CJK UNIFIED IDEOGRAPH
+ {0x96BC, 0x67E4}, //4114 #CJK UNIFIED IDEOGRAPH
+ {0x96BD, 0x67E6}, //4115 #CJK UNIFIED IDEOGRAPH
+ {0x96BE, 0x67E7}, //4116 #CJK UNIFIED IDEOGRAPH
+ {0x96BF, 0x67E8}, //4117 #CJK UNIFIED IDEOGRAPH
+ {0x96C0, 0x67EA}, //4118 #CJK UNIFIED IDEOGRAPH
+ {0x96C1, 0x67EB}, //4119 #CJK UNIFIED IDEOGRAPH
+ {0x96C2, 0x67ED}, //4120 #CJK UNIFIED IDEOGRAPH
+ {0x96C3, 0x67EE}, //4121 #CJK UNIFIED IDEOGRAPH
+ {0x96C4, 0x67F2}, //4122 #CJK UNIFIED IDEOGRAPH
+ {0x96C5, 0x67F5}, //4123 #CJK UNIFIED IDEOGRAPH
+ {0x96C6, 0x67F6}, //4124 #CJK UNIFIED IDEOGRAPH
+ {0x96C7, 0x67F7}, //4125 #CJK UNIFIED IDEOGRAPH
+ {0x96C8, 0x67F8}, //4126 #CJK UNIFIED IDEOGRAPH
+ {0x96C9, 0x67F9}, //4127 #CJK UNIFIED IDEOGRAPH
+ {0x96CA, 0x67FA}, //4128 #CJK UNIFIED IDEOGRAPH
+ {0x96CB, 0x67FB}, //4129 #CJK UNIFIED IDEOGRAPH
+ {0x96CC, 0x67FC}, //4130 #CJK UNIFIED IDEOGRAPH
+ {0x96CD, 0x67FE}, //4131 #CJK UNIFIED IDEOGRAPH
+ {0x96CE, 0x6801}, //4132 #CJK UNIFIED IDEOGRAPH
+ {0x96CF, 0x6802}, //4133 #CJK UNIFIED IDEOGRAPH
+ {0x96D0, 0x6803}, //4134 #CJK UNIFIED IDEOGRAPH
+ {0x96D1, 0x6804}, //4135 #CJK UNIFIED IDEOGRAPH
+ {0x96D2, 0x6806}, //4136 #CJK UNIFIED IDEOGRAPH
+ {0x96D3, 0x680D}, //4137 #CJK UNIFIED IDEOGRAPH
+ {0x96D4, 0x6810}, //4138 #CJK UNIFIED IDEOGRAPH
+ {0x96D5, 0x6812}, //4139 #CJK UNIFIED IDEOGRAPH
+ {0x96D6, 0x6814}, //4140 #CJK UNIFIED IDEOGRAPH
+ {0x96D7, 0x6815}, //4141 #CJK UNIFIED IDEOGRAPH
+ {0x96D8, 0x6818}, //4142 #CJK UNIFIED IDEOGRAPH
+ {0x96D9, 0x6819}, //4143 #CJK UNIFIED IDEOGRAPH
+ {0x96DA, 0x681A}, //4144 #CJK UNIFIED IDEOGRAPH
+ {0x96DB, 0x681B}, //4145 #CJK UNIFIED IDEOGRAPH
+ {0x96DC, 0x681C}, //4146 #CJK UNIFIED IDEOGRAPH
+ {0x96DD, 0x681E}, //4147 #CJK UNIFIED IDEOGRAPH
+ {0x96DE, 0x681F}, //4148 #CJK UNIFIED IDEOGRAPH
+ {0x96DF, 0x6820}, //4149 #CJK UNIFIED IDEOGRAPH
+ {0x96E0, 0x6822}, //4150 #CJK UNIFIED IDEOGRAPH
+ {0x96E1, 0x6823}, //4151 #CJK UNIFIED IDEOGRAPH
+ {0x96E2, 0x6824}, //4152 #CJK UNIFIED IDEOGRAPH
+ {0x96E3, 0x6825}, //4153 #CJK UNIFIED IDEOGRAPH
+ {0x96E4, 0x6826}, //4154 #CJK UNIFIED IDEOGRAPH
+ {0x96E5, 0x6827}, //4155 #CJK UNIFIED IDEOGRAPH
+ {0x96E6, 0x6828}, //4156 #CJK UNIFIED IDEOGRAPH
+ {0x96E7, 0x682B}, //4157 #CJK UNIFIED IDEOGRAPH
+ {0x96E8, 0x682C}, //4158 #CJK UNIFIED IDEOGRAPH
+ {0x96E9, 0x682D}, //4159 #CJK UNIFIED IDEOGRAPH
+ {0x96EA, 0x682E}, //4160 #CJK UNIFIED IDEOGRAPH
+ {0x96EB, 0x682F}, //4161 #CJK UNIFIED IDEOGRAPH
+ {0x96EC, 0x6830}, //4162 #CJK UNIFIED IDEOGRAPH
+ {0x96ED, 0x6831}, //4163 #CJK UNIFIED IDEOGRAPH
+ {0x96EE, 0x6834}, //4164 #CJK UNIFIED IDEOGRAPH
+ {0x96EF, 0x6835}, //4165 #CJK UNIFIED IDEOGRAPH
+ {0x96F0, 0x6836}, //4166 #CJK UNIFIED IDEOGRAPH
+ {0x96F1, 0x683A}, //4167 #CJK UNIFIED IDEOGRAPH
+ {0x96F2, 0x683B}, //4168 #CJK UNIFIED IDEOGRAPH
+ {0x96F3, 0x683F}, //4169 #CJK UNIFIED IDEOGRAPH
+ {0x96F4, 0x6847}, //4170 #CJK UNIFIED IDEOGRAPH
+ {0x96F5, 0x684B}, //4171 #CJK UNIFIED IDEOGRAPH
+ {0x96F6, 0x684D}, //4172 #CJK UNIFIED IDEOGRAPH
+ {0x96F7, 0x684F}, //4173 #CJK UNIFIED IDEOGRAPH
+ {0x96F8, 0x6852}, //4174 #CJK UNIFIED IDEOGRAPH
+ {0x96F9, 0x6856}, //4175 #CJK UNIFIED IDEOGRAPH
+ {0x96FA, 0x6857}, //4176 #CJK UNIFIED IDEOGRAPH
+ {0x96FB, 0x6858}, //4177 #CJK UNIFIED IDEOGRAPH
+ {0x96FC, 0x6859}, //4178 #CJK UNIFIED IDEOGRAPH
+ {0x96FD, 0x685A}, //4179 #CJK UNIFIED IDEOGRAPH
+ {0x96FE, 0x685B}, //4180 #CJK UNIFIED IDEOGRAPH
+ {0x9740, 0x685C}, //4181 #CJK UNIFIED IDEOGRAPH
+ {0x9741, 0x685D}, //4182 #CJK UNIFIED IDEOGRAPH
+ {0x9742, 0x685E}, //4183 #CJK UNIFIED IDEOGRAPH
+ {0x9743, 0x685F}, //4184 #CJK UNIFIED IDEOGRAPH
+ {0x9744, 0x686A}, //4185 #CJK UNIFIED IDEOGRAPH
+ {0x9745, 0x686C}, //4186 #CJK UNIFIED IDEOGRAPH
+ {0x9746, 0x686D}, //4187 #CJK UNIFIED IDEOGRAPH
+ {0x9747, 0x686E}, //4188 #CJK UNIFIED IDEOGRAPH
+ {0x9748, 0x686F}, //4189 #CJK UNIFIED IDEOGRAPH
+ {0x9749, 0x6870}, //4190 #CJK UNIFIED IDEOGRAPH
+ {0x974A, 0x6871}, //4191 #CJK UNIFIED IDEOGRAPH
+ {0x974B, 0x6872}, //4192 #CJK UNIFIED IDEOGRAPH
+ {0x974C, 0x6873}, //4193 #CJK UNIFIED IDEOGRAPH
+ {0x974D, 0x6875}, //4194 #CJK UNIFIED IDEOGRAPH
+ {0x974E, 0x6878}, //4195 #CJK UNIFIED IDEOGRAPH
+ {0x974F, 0x6879}, //4196 #CJK UNIFIED IDEOGRAPH
+ {0x9750, 0x687A}, //4197 #CJK UNIFIED IDEOGRAPH
+ {0x9751, 0x687B}, //4198 #CJK UNIFIED IDEOGRAPH
+ {0x9752, 0x687C}, //4199 #CJK UNIFIED IDEOGRAPH
+ {0x9753, 0x687D}, //4200 #CJK UNIFIED IDEOGRAPH
+ {0x9754, 0x687E}, //4201 #CJK UNIFIED IDEOGRAPH
+ {0x9755, 0x687F}, //4202 #CJK UNIFIED IDEOGRAPH
+ {0x9756, 0x6880}, //4203 #CJK UNIFIED IDEOGRAPH
+ {0x9757, 0x6882}, //4204 #CJK UNIFIED IDEOGRAPH
+ {0x9758, 0x6884}, //4205 #CJK UNIFIED IDEOGRAPH
+ {0x9759, 0x6887}, //4206 #CJK UNIFIED IDEOGRAPH
+ {0x975A, 0x6888}, //4207 #CJK UNIFIED IDEOGRAPH
+ {0x975B, 0x6889}, //4208 #CJK UNIFIED IDEOGRAPH
+ {0x975C, 0x688A}, //4209 #CJK UNIFIED IDEOGRAPH
+ {0x975D, 0x688B}, //4210 #CJK UNIFIED IDEOGRAPH
+ {0x975E, 0x688C}, //4211 #CJK UNIFIED IDEOGRAPH
+ {0x975F, 0x688D}, //4212 #CJK UNIFIED IDEOGRAPH
+ {0x9760, 0x688E}, //4213 #CJK UNIFIED IDEOGRAPH
+ {0x9761, 0x6890}, //4214 #CJK UNIFIED IDEOGRAPH
+ {0x9762, 0x6891}, //4215 #CJK UNIFIED IDEOGRAPH
+ {0x9763, 0x6892}, //4216 #CJK UNIFIED IDEOGRAPH
+ {0x9764, 0x6894}, //4217 #CJK UNIFIED IDEOGRAPH
+ {0x9765, 0x6895}, //4218 #CJK UNIFIED IDEOGRAPH
+ {0x9766, 0x6896}, //4219 #CJK UNIFIED IDEOGRAPH
+ {0x9767, 0x6898}, //4220 #CJK UNIFIED IDEOGRAPH
+ {0x9768, 0x6899}, //4221 #CJK UNIFIED IDEOGRAPH
+ {0x9769, 0x689A}, //4222 #CJK UNIFIED IDEOGRAPH
+ {0x976A, 0x689B}, //4223 #CJK UNIFIED IDEOGRAPH
+ {0x976B, 0x689C}, //4224 #CJK UNIFIED IDEOGRAPH
+ {0x976C, 0x689D}, //4225 #CJK UNIFIED IDEOGRAPH
+ {0x976D, 0x689E}, //4226 #CJK UNIFIED IDEOGRAPH
+ {0x976E, 0x689F}, //4227 #CJK UNIFIED IDEOGRAPH
+ {0x976F, 0x68A0}, //4228 #CJK UNIFIED IDEOGRAPH
+ {0x9770, 0x68A1}, //4229 #CJK UNIFIED IDEOGRAPH
+ {0x9771, 0x68A3}, //4230 #CJK UNIFIED IDEOGRAPH
+ {0x9772, 0x68A4}, //4231 #CJK UNIFIED IDEOGRAPH
+ {0x9773, 0x68A5}, //4232 #CJK UNIFIED IDEOGRAPH
+ {0x9774, 0x68A9}, //4233 #CJK UNIFIED IDEOGRAPH
+ {0x9775, 0x68AA}, //4234 #CJK UNIFIED IDEOGRAPH
+ {0x9776, 0x68AB}, //4235 #CJK UNIFIED IDEOGRAPH
+ {0x9777, 0x68AC}, //4236 #CJK UNIFIED IDEOGRAPH
+ {0x9778, 0x68AE}, //4237 #CJK UNIFIED IDEOGRAPH
+ {0x9779, 0x68B1}, //4238 #CJK UNIFIED IDEOGRAPH
+ {0x977A, 0x68B2}, //4239 #CJK UNIFIED IDEOGRAPH
+ {0x977B, 0x68B4}, //4240 #CJK UNIFIED IDEOGRAPH
+ {0x977C, 0x68B6}, //4241 #CJK UNIFIED IDEOGRAPH
+ {0x977D, 0x68B7}, //4242 #CJK UNIFIED IDEOGRAPH
+ {0x977E, 0x68B8}, //4243 #CJK UNIFIED IDEOGRAPH
+ {0x9780, 0x68B9}, //4244 #CJK UNIFIED IDEOGRAPH
+ {0x9781, 0x68BA}, //4245 #CJK UNIFIED IDEOGRAPH
+ {0x9782, 0x68BB}, //4246 #CJK UNIFIED IDEOGRAPH
+ {0x9783, 0x68BC}, //4247 #CJK UNIFIED IDEOGRAPH
+ {0x9784, 0x68BD}, //4248 #CJK UNIFIED IDEOGRAPH
+ {0x9785, 0x68BE}, //4249 #CJK UNIFIED IDEOGRAPH
+ {0x9786, 0x68BF}, //4250 #CJK UNIFIED IDEOGRAPH
+ {0x9787, 0x68C1}, //4251 #CJK UNIFIED IDEOGRAPH
+ {0x9788, 0x68C3}, //4252 #CJK UNIFIED IDEOGRAPH
+ {0x9789, 0x68C4}, //4253 #CJK UNIFIED IDEOGRAPH
+ {0x978A, 0x68C5}, //4254 #CJK UNIFIED IDEOGRAPH
+ {0x978B, 0x68C6}, //4255 #CJK UNIFIED IDEOGRAPH
+ {0x978C, 0x68C7}, //4256 #CJK UNIFIED IDEOGRAPH
+ {0x978D, 0x68C8}, //4257 #CJK UNIFIED IDEOGRAPH
+ {0x978E, 0x68CA}, //4258 #CJK UNIFIED IDEOGRAPH
+ {0x978F, 0x68CC}, //4259 #CJK UNIFIED IDEOGRAPH
+ {0x9790, 0x68CE}, //4260 #CJK UNIFIED IDEOGRAPH
+ {0x9791, 0x68CF}, //4261 #CJK UNIFIED IDEOGRAPH
+ {0x9792, 0x68D0}, //4262 #CJK UNIFIED IDEOGRAPH
+ {0x9793, 0x68D1}, //4263 #CJK UNIFIED IDEOGRAPH
+ {0x9794, 0x68D3}, //4264 #CJK UNIFIED IDEOGRAPH
+ {0x9795, 0x68D4}, //4265 #CJK UNIFIED IDEOGRAPH
+ {0x9796, 0x68D6}, //4266 #CJK UNIFIED IDEOGRAPH
+ {0x9797, 0x68D7}, //4267 #CJK UNIFIED IDEOGRAPH
+ {0x9798, 0x68D9}, //4268 #CJK UNIFIED IDEOGRAPH
+ {0x9799, 0x68DB}, //4269 #CJK UNIFIED IDEOGRAPH
+ {0x979A, 0x68DC}, //4270 #CJK UNIFIED IDEOGRAPH
+ {0x979B, 0x68DD}, //4271 #CJK UNIFIED IDEOGRAPH
+ {0x979C, 0x68DE}, //4272 #CJK UNIFIED IDEOGRAPH
+ {0x979D, 0x68DF}, //4273 #CJK UNIFIED IDEOGRAPH
+ {0x979E, 0x68E1}, //4274 #CJK UNIFIED IDEOGRAPH
+ {0x979F, 0x68E2}, //4275 #CJK UNIFIED IDEOGRAPH
+ {0x97A0, 0x68E4}, //4276 #CJK UNIFIED IDEOGRAPH
+ {0x97A1, 0x68E5}, //4277 #CJK UNIFIED IDEOGRAPH
+ {0x97A2, 0x68E6}, //4278 #CJK UNIFIED IDEOGRAPH
+ {0x97A3, 0x68E7}, //4279 #CJK UNIFIED IDEOGRAPH
+ {0x97A4, 0x68E8}, //4280 #CJK UNIFIED IDEOGRAPH
+ {0x97A5, 0x68E9}, //4281 #CJK UNIFIED IDEOGRAPH
+ {0x97A6, 0x68EA}, //4282 #CJK UNIFIED IDEOGRAPH
+ {0x97A7, 0x68EB}, //4283 #CJK UNIFIED IDEOGRAPH
+ {0x97A8, 0x68EC}, //4284 #CJK UNIFIED IDEOGRAPH
+ {0x97A9, 0x68ED}, //4285 #CJK UNIFIED IDEOGRAPH
+ {0x97AA, 0x68EF}, //4286 #CJK UNIFIED IDEOGRAPH
+ {0x97AB, 0x68F2}, //4287 #CJK UNIFIED IDEOGRAPH
+ {0x97AC, 0x68F3}, //4288 #CJK UNIFIED IDEOGRAPH
+ {0x97AD, 0x68F4}, //4289 #CJK UNIFIED IDEOGRAPH
+ {0x97AE, 0x68F6}, //4290 #CJK UNIFIED IDEOGRAPH
+ {0x97AF, 0x68F7}, //4291 #CJK UNIFIED IDEOGRAPH
+ {0x97B0, 0x68F8}, //4292 #CJK UNIFIED IDEOGRAPH
+ {0x97B1, 0x68FB}, //4293 #CJK UNIFIED IDEOGRAPH
+ {0x97B2, 0x68FD}, //4294 #CJK UNIFIED IDEOGRAPH
+ {0x97B3, 0x68FE}, //4295 #CJK UNIFIED IDEOGRAPH
+ {0x97B4, 0x68FF}, //4296 #CJK UNIFIED IDEOGRAPH
+ {0x97B5, 0x6900}, //4297 #CJK UNIFIED IDEOGRAPH
+ {0x97B6, 0x6902}, //4298 #CJK UNIFIED IDEOGRAPH
+ {0x97B7, 0x6903}, //4299 #CJK UNIFIED IDEOGRAPH
+ {0x97B8, 0x6904}, //4300 #CJK UNIFIED IDEOGRAPH
+ {0x97B9, 0x6906}, //4301 #CJK UNIFIED IDEOGRAPH
+ {0x97BA, 0x6907}, //4302 #CJK UNIFIED IDEOGRAPH
+ {0x97BB, 0x6908}, //4303 #CJK UNIFIED IDEOGRAPH
+ {0x97BC, 0x6909}, //4304 #CJK UNIFIED IDEOGRAPH
+ {0x97BD, 0x690A}, //4305 #CJK UNIFIED IDEOGRAPH
+ {0x97BE, 0x690C}, //4306 #CJK UNIFIED IDEOGRAPH
+ {0x97BF, 0x690F}, //4307 #CJK UNIFIED IDEOGRAPH
+ {0x97C0, 0x6911}, //4308 #CJK UNIFIED IDEOGRAPH
+ {0x97C1, 0x6913}, //4309 #CJK UNIFIED IDEOGRAPH
+ {0x97C2, 0x6914}, //4310 #CJK UNIFIED IDEOGRAPH
+ {0x97C3, 0x6915}, //4311 #CJK UNIFIED IDEOGRAPH
+ {0x97C4, 0x6916}, //4312 #CJK UNIFIED IDEOGRAPH
+ {0x97C5, 0x6917}, //4313 #CJK UNIFIED IDEOGRAPH
+ {0x97C6, 0x6918}, //4314 #CJK UNIFIED IDEOGRAPH
+ {0x97C7, 0x6919}, //4315 #CJK UNIFIED IDEOGRAPH
+ {0x97C8, 0x691A}, //4316 #CJK UNIFIED IDEOGRAPH
+ {0x97C9, 0x691B}, //4317 #CJK UNIFIED IDEOGRAPH
+ {0x97CA, 0x691C}, //4318 #CJK UNIFIED IDEOGRAPH
+ {0x97CB, 0x691D}, //4319 #CJK UNIFIED IDEOGRAPH
+ {0x97CC, 0x691E}, //4320 #CJK UNIFIED IDEOGRAPH
+ {0x97CD, 0x6921}, //4321 #CJK UNIFIED IDEOGRAPH
+ {0x97CE, 0x6922}, //4322 #CJK UNIFIED IDEOGRAPH
+ {0x97CF, 0x6923}, //4323 #CJK UNIFIED IDEOGRAPH
+ {0x97D0, 0x6925}, //4324 #CJK UNIFIED IDEOGRAPH
+ {0x97D1, 0x6926}, //4325 #CJK UNIFIED IDEOGRAPH
+ {0x97D2, 0x6927}, //4326 #CJK UNIFIED IDEOGRAPH
+ {0x97D3, 0x6928}, //4327 #CJK UNIFIED IDEOGRAPH
+ {0x97D4, 0x6929}, //4328 #CJK UNIFIED IDEOGRAPH
+ {0x97D5, 0x692A}, //4329 #CJK UNIFIED IDEOGRAPH
+ {0x97D6, 0x692B}, //4330 #CJK UNIFIED IDEOGRAPH
+ {0x97D7, 0x692C}, //4331 #CJK UNIFIED IDEOGRAPH
+ {0x97D8, 0x692E}, //4332 #CJK UNIFIED IDEOGRAPH
+ {0x97D9, 0x692F}, //4333 #CJK UNIFIED IDEOGRAPH
+ {0x97DA, 0x6931}, //4334 #CJK UNIFIED IDEOGRAPH
+ {0x97DB, 0x6932}, //4335 #CJK UNIFIED IDEOGRAPH
+ {0x97DC, 0x6933}, //4336 #CJK UNIFIED IDEOGRAPH
+ {0x97DD, 0x6935}, //4337 #CJK UNIFIED IDEOGRAPH
+ {0x97DE, 0x6936}, //4338 #CJK UNIFIED IDEOGRAPH
+ {0x97DF, 0x6937}, //4339 #CJK UNIFIED IDEOGRAPH
+ {0x97E0, 0x6938}, //4340 #CJK UNIFIED IDEOGRAPH
+ {0x97E1, 0x693A}, //4341 #CJK UNIFIED IDEOGRAPH
+ {0x97E2, 0x693B}, //4342 #CJK UNIFIED IDEOGRAPH
+ {0x97E3, 0x693C}, //4343 #CJK UNIFIED IDEOGRAPH
+ {0x97E4, 0x693E}, //4344 #CJK UNIFIED IDEOGRAPH
+ {0x97E5, 0x6940}, //4345 #CJK UNIFIED IDEOGRAPH
+ {0x97E6, 0x6941}, //4346 #CJK UNIFIED IDEOGRAPH
+ {0x97E7, 0x6943}, //4347 #CJK UNIFIED IDEOGRAPH
+ {0x97E8, 0x6944}, //4348 #CJK UNIFIED IDEOGRAPH
+ {0x97E9, 0x6945}, //4349 #CJK UNIFIED IDEOGRAPH
+ {0x97EA, 0x6946}, //4350 #CJK UNIFIED IDEOGRAPH
+ {0x97EB, 0x6947}, //4351 #CJK UNIFIED IDEOGRAPH
+ {0x97EC, 0x6948}, //4352 #CJK UNIFIED IDEOGRAPH
+ {0x97ED, 0x6949}, //4353 #CJK UNIFIED IDEOGRAPH
+ {0x97EE, 0x694A}, //4354 #CJK UNIFIED IDEOGRAPH
+ {0x97EF, 0x694B}, //4355 #CJK UNIFIED IDEOGRAPH
+ {0x97F0, 0x694C}, //4356 #CJK UNIFIED IDEOGRAPH
+ {0x97F1, 0x694D}, //4357 #CJK UNIFIED IDEOGRAPH
+ {0x97F2, 0x694E}, //4358 #CJK UNIFIED IDEOGRAPH
+ {0x97F3, 0x694F}, //4359 #CJK UNIFIED IDEOGRAPH
+ {0x97F4, 0x6950}, //4360 #CJK UNIFIED IDEOGRAPH
+ {0x97F5, 0x6951}, //4361 #CJK UNIFIED IDEOGRAPH
+ {0x97F6, 0x6952}, //4362 #CJK UNIFIED IDEOGRAPH
+ {0x97F7, 0x6953}, //4363 #CJK UNIFIED IDEOGRAPH
+ {0x97F8, 0x6955}, //4364 #CJK UNIFIED IDEOGRAPH
+ {0x97F9, 0x6956}, //4365 #CJK UNIFIED IDEOGRAPH
+ {0x97FA, 0x6958}, //4366 #CJK UNIFIED IDEOGRAPH
+ {0x97FB, 0x6959}, //4367 #CJK UNIFIED IDEOGRAPH
+ {0x97FC, 0x695B}, //4368 #CJK UNIFIED IDEOGRAPH
+ {0x97FD, 0x695C}, //4369 #CJK UNIFIED IDEOGRAPH
+ {0x97FE, 0x695F}, //4370 #CJK UNIFIED IDEOGRAPH
+ {0x9840, 0x6961}, //4371 #CJK UNIFIED IDEOGRAPH
+ {0x9841, 0x6962}, //4372 #CJK UNIFIED IDEOGRAPH
+ {0x9842, 0x6964}, //4373 #CJK UNIFIED IDEOGRAPH
+ {0x9843, 0x6965}, //4374 #CJK UNIFIED IDEOGRAPH
+ {0x9844, 0x6967}, //4375 #CJK UNIFIED IDEOGRAPH
+ {0x9845, 0x6968}, //4376 #CJK UNIFIED IDEOGRAPH
+ {0x9846, 0x6969}, //4377 #CJK UNIFIED IDEOGRAPH
+ {0x9847, 0x696A}, //4378 #CJK UNIFIED IDEOGRAPH
+ {0x9848, 0x696C}, //4379 #CJK UNIFIED IDEOGRAPH
+ {0x9849, 0x696D}, //4380 #CJK UNIFIED IDEOGRAPH
+ {0x984A, 0x696F}, //4381 #CJK UNIFIED IDEOGRAPH
+ {0x984B, 0x6970}, //4382 #CJK UNIFIED IDEOGRAPH
+ {0x984C, 0x6972}, //4383 #CJK UNIFIED IDEOGRAPH
+ {0x984D, 0x6973}, //4384 #CJK UNIFIED IDEOGRAPH
+ {0x984E, 0x6974}, //4385 #CJK UNIFIED IDEOGRAPH
+ {0x984F, 0x6975}, //4386 #CJK UNIFIED IDEOGRAPH
+ {0x9850, 0x6976}, //4387 #CJK UNIFIED IDEOGRAPH
+ {0x9851, 0x697A}, //4388 #CJK UNIFIED IDEOGRAPH
+ {0x9852, 0x697B}, //4389 #CJK UNIFIED IDEOGRAPH
+ {0x9853, 0x697D}, //4390 #CJK UNIFIED IDEOGRAPH
+ {0x9854, 0x697E}, //4391 #CJK UNIFIED IDEOGRAPH
+ {0x9855, 0x697F}, //4392 #CJK UNIFIED IDEOGRAPH
+ {0x9856, 0x6981}, //4393 #CJK UNIFIED IDEOGRAPH
+ {0x9857, 0x6983}, //4394 #CJK UNIFIED IDEOGRAPH
+ {0x9858, 0x6985}, //4395 #CJK UNIFIED IDEOGRAPH
+ {0x9859, 0x698A}, //4396 #CJK UNIFIED IDEOGRAPH
+ {0x985A, 0x698B}, //4397 #CJK UNIFIED IDEOGRAPH
+ {0x985B, 0x698C}, //4398 #CJK UNIFIED IDEOGRAPH
+ {0x985C, 0x698E}, //4399 #CJK UNIFIED IDEOGRAPH
+ {0x985D, 0x698F}, //4400 #CJK UNIFIED IDEOGRAPH
+ {0x985E, 0x6990}, //4401 #CJK UNIFIED IDEOGRAPH
+ {0x985F, 0x6991}, //4402 #CJK UNIFIED IDEOGRAPH
+ {0x9860, 0x6992}, //4403 #CJK UNIFIED IDEOGRAPH
+ {0x9861, 0x6993}, //4404 #CJK UNIFIED IDEOGRAPH
+ {0x9862, 0x6996}, //4405 #CJK UNIFIED IDEOGRAPH
+ {0x9863, 0x6997}, //4406 #CJK UNIFIED IDEOGRAPH
+ {0x9864, 0x6999}, //4407 #CJK UNIFIED IDEOGRAPH
+ {0x9865, 0x699A}, //4408 #CJK UNIFIED IDEOGRAPH
+ {0x9866, 0x699D}, //4409 #CJK UNIFIED IDEOGRAPH
+ {0x9867, 0x699E}, //4410 #CJK UNIFIED IDEOGRAPH
+ {0x9868, 0x699F}, //4411 #CJK UNIFIED IDEOGRAPH
+ {0x9869, 0x69A0}, //4412 #CJK UNIFIED IDEOGRAPH
+ {0x986A, 0x69A1}, //4413 #CJK UNIFIED IDEOGRAPH
+ {0x986B, 0x69A2}, //4414 #CJK UNIFIED IDEOGRAPH
+ {0x986C, 0x69A3}, //4415 #CJK UNIFIED IDEOGRAPH
+ {0x986D, 0x69A4}, //4416 #CJK UNIFIED IDEOGRAPH
+ {0x986E, 0x69A5}, //4417 #CJK UNIFIED IDEOGRAPH
+ {0x986F, 0x69A6}, //4418 #CJK UNIFIED IDEOGRAPH
+ {0x9870, 0x69A9}, //4419 #CJK UNIFIED IDEOGRAPH
+ {0x9871, 0x69AA}, //4420 #CJK UNIFIED IDEOGRAPH
+ {0x9872, 0x69AC}, //4421 #CJK UNIFIED IDEOGRAPH
+ {0x9873, 0x69AE}, //4422 #CJK UNIFIED IDEOGRAPH
+ {0x9874, 0x69AF}, //4423 #CJK UNIFIED IDEOGRAPH
+ {0x9875, 0x69B0}, //4424 #CJK UNIFIED IDEOGRAPH
+ {0x9876, 0x69B2}, //4425 #CJK UNIFIED IDEOGRAPH
+ {0x9877, 0x69B3}, //4426 #CJK UNIFIED IDEOGRAPH
+ {0x9878, 0x69B5}, //4427 #CJK UNIFIED IDEOGRAPH
+ {0x9879, 0x69B6}, //4428 #CJK UNIFIED IDEOGRAPH
+ {0x987A, 0x69B8}, //4429 #CJK UNIFIED IDEOGRAPH
+ {0x987B, 0x69B9}, //4430 #CJK UNIFIED IDEOGRAPH
+ {0x987C, 0x69BA}, //4431 #CJK UNIFIED IDEOGRAPH
+ {0x987D, 0x69BC}, //4432 #CJK UNIFIED IDEOGRAPH
+ {0x987E, 0x69BD}, //4433 #CJK UNIFIED IDEOGRAPH
+ {0x9880, 0x69BE}, //4434 #CJK UNIFIED IDEOGRAPH
+ {0x9881, 0x69BF}, //4435 #CJK UNIFIED IDEOGRAPH
+ {0x9882, 0x69C0}, //4436 #CJK UNIFIED IDEOGRAPH
+ {0x9883, 0x69C2}, //4437 #CJK UNIFIED IDEOGRAPH
+ {0x9884, 0x69C3}, //4438 #CJK UNIFIED IDEOGRAPH
+ {0x9885, 0x69C4}, //4439 #CJK UNIFIED IDEOGRAPH
+ {0x9886, 0x69C5}, //4440 #CJK UNIFIED IDEOGRAPH
+ {0x9887, 0x69C6}, //4441 #CJK UNIFIED IDEOGRAPH
+ {0x9888, 0x69C7}, //4442 #CJK UNIFIED IDEOGRAPH
+ {0x9889, 0x69C8}, //4443 #CJK UNIFIED IDEOGRAPH
+ {0x988A, 0x69C9}, //4444 #CJK UNIFIED IDEOGRAPH
+ {0x988B, 0x69CB}, //4445 #CJK UNIFIED IDEOGRAPH
+ {0x988C, 0x69CD}, //4446 #CJK UNIFIED IDEOGRAPH
+ {0x988D, 0x69CF}, //4447 #CJK UNIFIED IDEOGRAPH
+ {0x988E, 0x69D1}, //4448 #CJK UNIFIED IDEOGRAPH
+ {0x988F, 0x69D2}, //4449 #CJK UNIFIED IDEOGRAPH
+ {0x9890, 0x69D3}, //4450 #CJK UNIFIED IDEOGRAPH
+ {0x9891, 0x69D5}, //4451 #CJK UNIFIED IDEOGRAPH
+ {0x9892, 0x69D6}, //4452 #CJK UNIFIED IDEOGRAPH
+ {0x9893, 0x69D7}, //4453 #CJK UNIFIED IDEOGRAPH
+ {0x9894, 0x69D8}, //4454 #CJK UNIFIED IDEOGRAPH
+ {0x9895, 0x69D9}, //4455 #CJK UNIFIED IDEOGRAPH
+ {0x9896, 0x69DA}, //4456 #CJK UNIFIED IDEOGRAPH
+ {0x9897, 0x69DC}, //4457 #CJK UNIFIED IDEOGRAPH
+ {0x9898, 0x69DD}, //4458 #CJK UNIFIED IDEOGRAPH
+ {0x9899, 0x69DE}, //4459 #CJK UNIFIED IDEOGRAPH
+ {0x989A, 0x69E1}, //4460 #CJK UNIFIED IDEOGRAPH
+ {0x989B, 0x69E2}, //4461 #CJK UNIFIED IDEOGRAPH
+ {0x989C, 0x69E3}, //4462 #CJK UNIFIED IDEOGRAPH
+ {0x989D, 0x69E4}, //4463 #CJK UNIFIED IDEOGRAPH
+ {0x989E, 0x69E5}, //4464 #CJK UNIFIED IDEOGRAPH
+ {0x989F, 0x69E6}, //4465 #CJK UNIFIED IDEOGRAPH
+ {0x98A0, 0x69E7}, //4466 #CJK UNIFIED IDEOGRAPH
+ {0x98A1, 0x69E8}, //4467 #CJK UNIFIED IDEOGRAPH
+ {0x98A2, 0x69E9}, //4468 #CJK UNIFIED IDEOGRAPH
+ {0x98A3, 0x69EA}, //4469 #CJK UNIFIED IDEOGRAPH
+ {0x98A4, 0x69EB}, //4470 #CJK UNIFIED IDEOGRAPH
+ {0x98A5, 0x69EC}, //4471 #CJK UNIFIED IDEOGRAPH
+ {0x98A6, 0x69EE}, //4472 #CJK UNIFIED IDEOGRAPH
+ {0x98A7, 0x69EF}, //4473 #CJK UNIFIED IDEOGRAPH
+ {0x98A8, 0x69F0}, //4474 #CJK UNIFIED IDEOGRAPH
+ {0x98A9, 0x69F1}, //4475 #CJK UNIFIED IDEOGRAPH
+ {0x98AA, 0x69F3}, //4476 #CJK UNIFIED IDEOGRAPH
+ {0x98AB, 0x69F4}, //4477 #CJK UNIFIED IDEOGRAPH
+ {0x98AC, 0x69F5}, //4478 #CJK UNIFIED IDEOGRAPH
+ {0x98AD, 0x69F6}, //4479 #CJK UNIFIED IDEOGRAPH
+ {0x98AE, 0x69F7}, //4480 #CJK UNIFIED IDEOGRAPH
+ {0x98AF, 0x69F8}, //4481 #CJK UNIFIED IDEOGRAPH
+ {0x98B0, 0x69F9}, //4482 #CJK UNIFIED IDEOGRAPH
+ {0x98B1, 0x69FA}, //4483 #CJK UNIFIED IDEOGRAPH
+ {0x98B2, 0x69FB}, //4484 #CJK UNIFIED IDEOGRAPH
+ {0x98B3, 0x69FC}, //4485 #CJK UNIFIED IDEOGRAPH
+ {0x98B4, 0x69FE}, //4486 #CJK UNIFIED IDEOGRAPH
+ {0x98B5, 0x6A00}, //4487 #CJK UNIFIED IDEOGRAPH
+ {0x98B6, 0x6A01}, //4488 #CJK UNIFIED IDEOGRAPH
+ {0x98B7, 0x6A02}, //4489 #CJK UNIFIED IDEOGRAPH
+ {0x98B8, 0x6A03}, //4490 #CJK UNIFIED IDEOGRAPH
+ {0x98B9, 0x6A04}, //4491 #CJK UNIFIED IDEOGRAPH
+ {0x98BA, 0x6A05}, //4492 #CJK UNIFIED IDEOGRAPH
+ {0x98BB, 0x6A06}, //4493 #CJK UNIFIED IDEOGRAPH
+ {0x98BC, 0x6A07}, //4494 #CJK UNIFIED IDEOGRAPH
+ {0x98BD, 0x6A08}, //4495 #CJK UNIFIED IDEOGRAPH
+ {0x98BE, 0x6A09}, //4496 #CJK UNIFIED IDEOGRAPH
+ {0x98BF, 0x6A0B}, //4497 #CJK UNIFIED IDEOGRAPH
+ {0x98C0, 0x6A0C}, //4498 #CJK UNIFIED IDEOGRAPH
+ {0x98C1, 0x6A0D}, //4499 #CJK UNIFIED IDEOGRAPH
+ {0x98C2, 0x6A0E}, //4500 #CJK UNIFIED IDEOGRAPH
+ {0x98C3, 0x6A0F}, //4501 #CJK UNIFIED IDEOGRAPH
+ {0x98C4, 0x6A10}, //4502 #CJK UNIFIED IDEOGRAPH
+ {0x98C5, 0x6A11}, //4503 #CJK UNIFIED IDEOGRAPH
+ {0x98C6, 0x6A12}, //4504 #CJK UNIFIED IDEOGRAPH
+ {0x98C7, 0x6A13}, //4505 #CJK UNIFIED IDEOGRAPH
+ {0x98C8, 0x6A14}, //4506 #CJK UNIFIED IDEOGRAPH
+ {0x98C9, 0x6A15}, //4507 #CJK UNIFIED IDEOGRAPH
+ {0x98CA, 0x6A16}, //4508 #CJK UNIFIED IDEOGRAPH
+ {0x98CB, 0x6A19}, //4509 #CJK UNIFIED IDEOGRAPH
+ {0x98CC, 0x6A1A}, //4510 #CJK UNIFIED IDEOGRAPH
+ {0x98CD, 0x6A1B}, //4511 #CJK UNIFIED IDEOGRAPH
+ {0x98CE, 0x6A1C}, //4512 #CJK UNIFIED IDEOGRAPH
+ {0x98CF, 0x6A1D}, //4513 #CJK UNIFIED IDEOGRAPH
+ {0x98D0, 0x6A1E}, //4514 #CJK UNIFIED IDEOGRAPH
+ {0x98D1, 0x6A20}, //4515 #CJK UNIFIED IDEOGRAPH
+ {0x98D2, 0x6A22}, //4516 #CJK UNIFIED IDEOGRAPH
+ {0x98D3, 0x6A23}, //4517 #CJK UNIFIED IDEOGRAPH
+ {0x98D4, 0x6A24}, //4518 #CJK UNIFIED IDEOGRAPH
+ {0x98D5, 0x6A25}, //4519 #CJK UNIFIED IDEOGRAPH
+ {0x98D6, 0x6A26}, //4520 #CJK UNIFIED IDEOGRAPH
+ {0x98D7, 0x6A27}, //4521 #CJK UNIFIED IDEOGRAPH
+ {0x98D8, 0x6A29}, //4522 #CJK UNIFIED IDEOGRAPH
+ {0x98D9, 0x6A2B}, //4523 #CJK UNIFIED IDEOGRAPH
+ {0x98DA, 0x6A2C}, //4524 #CJK UNIFIED IDEOGRAPH
+ {0x98DB, 0x6A2D}, //4525 #CJK UNIFIED IDEOGRAPH
+ {0x98DC, 0x6A2E}, //4526 #CJK UNIFIED IDEOGRAPH
+ {0x98DD, 0x6A30}, //4527 #CJK UNIFIED IDEOGRAPH
+ {0x98DE, 0x6A32}, //4528 #CJK UNIFIED IDEOGRAPH
+ {0x98DF, 0x6A33}, //4529 #CJK UNIFIED IDEOGRAPH
+ {0x98E0, 0x6A34}, //4530 #CJK UNIFIED IDEOGRAPH
+ {0x98E1, 0x6A36}, //4531 #CJK UNIFIED IDEOGRAPH
+ {0x98E2, 0x6A37}, //4532 #CJK UNIFIED IDEOGRAPH
+ {0x98E3, 0x6A38}, //4533 #CJK UNIFIED IDEOGRAPH
+ {0x98E4, 0x6A39}, //4534 #CJK UNIFIED IDEOGRAPH
+ {0x98E5, 0x6A3A}, //4535 #CJK UNIFIED IDEOGRAPH
+ {0x98E6, 0x6A3B}, //4536 #CJK UNIFIED IDEOGRAPH
+ {0x98E7, 0x6A3C}, //4537 #CJK UNIFIED IDEOGRAPH
+ {0x98E8, 0x6A3F}, //4538 #CJK UNIFIED IDEOGRAPH
+ {0x98E9, 0x6A40}, //4539 #CJK UNIFIED IDEOGRAPH
+ {0x98EA, 0x6A41}, //4540 #CJK UNIFIED IDEOGRAPH
+ {0x98EB, 0x6A42}, //4541 #CJK UNIFIED IDEOGRAPH
+ {0x98EC, 0x6A43}, //4542 #CJK UNIFIED IDEOGRAPH
+ {0x98ED, 0x6A45}, //4543 #CJK UNIFIED IDEOGRAPH
+ {0x98EE, 0x6A46}, //4544 #CJK UNIFIED IDEOGRAPH
+ {0x98EF, 0x6A48}, //4545 #CJK UNIFIED IDEOGRAPH
+ {0x98F0, 0x6A49}, //4546 #CJK UNIFIED IDEOGRAPH
+ {0x98F1, 0x6A4A}, //4547 #CJK UNIFIED IDEOGRAPH
+ {0x98F2, 0x6A4B}, //4548 #CJK UNIFIED IDEOGRAPH
+ {0x98F3, 0x6A4C}, //4549 #CJK UNIFIED IDEOGRAPH
+ {0x98F4, 0x6A4D}, //4550 #CJK UNIFIED IDEOGRAPH
+ {0x98F5, 0x6A4E}, //4551 #CJK UNIFIED IDEOGRAPH
+ {0x98F6, 0x6A4F}, //4552 #CJK UNIFIED IDEOGRAPH
+ {0x98F7, 0x6A51}, //4553 #CJK UNIFIED IDEOGRAPH
+ {0x98F8, 0x6A52}, //4554 #CJK UNIFIED IDEOGRAPH
+ {0x98F9, 0x6A53}, //4555 #CJK UNIFIED IDEOGRAPH
+ {0x98FA, 0x6A54}, //4556 #CJK UNIFIED IDEOGRAPH
+ {0x98FB, 0x6A55}, //4557 #CJK UNIFIED IDEOGRAPH
+ {0x98FC, 0x6A56}, //4558 #CJK UNIFIED IDEOGRAPH
+ {0x98FD, 0x6A57}, //4559 #CJK UNIFIED IDEOGRAPH
+ {0x98FE, 0x6A5A}, //4560 #CJK UNIFIED IDEOGRAPH
+ {0x9940, 0x6A5C}, //4561 #CJK UNIFIED IDEOGRAPH
+ {0x9941, 0x6A5D}, //4562 #CJK UNIFIED IDEOGRAPH
+ {0x9942, 0x6A5E}, //4563 #CJK UNIFIED IDEOGRAPH
+ {0x9943, 0x6A5F}, //4564 #CJK UNIFIED IDEOGRAPH
+ {0x9944, 0x6A60}, //4565 #CJK UNIFIED IDEOGRAPH
+ {0x9945, 0x6A62}, //4566 #CJK UNIFIED IDEOGRAPH
+ {0x9946, 0x6A63}, //4567 #CJK UNIFIED IDEOGRAPH
+ {0x9947, 0x6A64}, //4568 #CJK UNIFIED IDEOGRAPH
+ {0x9948, 0x6A66}, //4569 #CJK UNIFIED IDEOGRAPH
+ {0x9949, 0x6A67}, //4570 #CJK UNIFIED IDEOGRAPH
+ {0x994A, 0x6A68}, //4571 #CJK UNIFIED IDEOGRAPH
+ {0x994B, 0x6A69}, //4572 #CJK UNIFIED IDEOGRAPH
+ {0x994C, 0x6A6A}, //4573 #CJK UNIFIED IDEOGRAPH
+ {0x994D, 0x6A6B}, //4574 #CJK UNIFIED IDEOGRAPH
+ {0x994E, 0x6A6C}, //4575 #CJK UNIFIED IDEOGRAPH
+ {0x994F, 0x6A6D}, //4576 #CJK UNIFIED IDEOGRAPH
+ {0x9950, 0x6A6E}, //4577 #CJK UNIFIED IDEOGRAPH
+ {0x9951, 0x6A6F}, //4578 #CJK UNIFIED IDEOGRAPH
+ {0x9952, 0x6A70}, //4579 #CJK UNIFIED IDEOGRAPH
+ {0x9953, 0x6A72}, //4580 #CJK UNIFIED IDEOGRAPH
+ {0x9954, 0x6A73}, //4581 #CJK UNIFIED IDEOGRAPH
+ {0x9955, 0x6A74}, //4582 #CJK UNIFIED IDEOGRAPH
+ {0x9956, 0x6A75}, //4583 #CJK UNIFIED IDEOGRAPH
+ {0x9957, 0x6A76}, //4584 #CJK UNIFIED IDEOGRAPH
+ {0x9958, 0x6A77}, //4585 #CJK UNIFIED IDEOGRAPH
+ {0x9959, 0x6A78}, //4586 #CJK UNIFIED IDEOGRAPH
+ {0x995A, 0x6A7A}, //4587 #CJK UNIFIED IDEOGRAPH
+ {0x995B, 0x6A7B}, //4588 #CJK UNIFIED IDEOGRAPH
+ {0x995C, 0x6A7D}, //4589 #CJK UNIFIED IDEOGRAPH
+ {0x995D, 0x6A7E}, //4590 #CJK UNIFIED IDEOGRAPH
+ {0x995E, 0x6A7F}, //4591 #CJK UNIFIED IDEOGRAPH
+ {0x995F, 0x6A81}, //4592 #CJK UNIFIED IDEOGRAPH
+ {0x9960, 0x6A82}, //4593 #CJK UNIFIED IDEOGRAPH
+ {0x9961, 0x6A83}, //4594 #CJK UNIFIED IDEOGRAPH
+ {0x9962, 0x6A85}, //4595 #CJK UNIFIED IDEOGRAPH
+ {0x9963, 0x6A86}, //4596 #CJK UNIFIED IDEOGRAPH
+ {0x9964, 0x6A87}, //4597 #CJK UNIFIED IDEOGRAPH
+ {0x9965, 0x6A88}, //4598 #CJK UNIFIED IDEOGRAPH
+ {0x9966, 0x6A89}, //4599 #CJK UNIFIED IDEOGRAPH
+ {0x9967, 0x6A8A}, //4600 #CJK UNIFIED IDEOGRAPH
+ {0x9968, 0x6A8B}, //4601 #CJK UNIFIED IDEOGRAPH
+ {0x9969, 0x6A8C}, //4602 #CJK UNIFIED IDEOGRAPH
+ {0x996A, 0x6A8D}, //4603 #CJK UNIFIED IDEOGRAPH
+ {0x996B, 0x6A8F}, //4604 #CJK UNIFIED IDEOGRAPH
+ {0x996C, 0x6A92}, //4605 #CJK UNIFIED IDEOGRAPH
+ {0x996D, 0x6A93}, //4606 #CJK UNIFIED IDEOGRAPH
+ {0x996E, 0x6A94}, //4607 #CJK UNIFIED IDEOGRAPH
+ {0x996F, 0x6A95}, //4608 #CJK UNIFIED IDEOGRAPH
+ {0x9970, 0x6A96}, //4609 #CJK UNIFIED IDEOGRAPH
+ {0x9971, 0x6A98}, //4610 #CJK UNIFIED IDEOGRAPH
+ {0x9972, 0x6A99}, //4611 #CJK UNIFIED IDEOGRAPH
+ {0x9973, 0x6A9A}, //4612 #CJK UNIFIED IDEOGRAPH
+ {0x9974, 0x6A9B}, //4613 #CJK UNIFIED IDEOGRAPH
+ {0x9975, 0x6A9C}, //4614 #CJK UNIFIED IDEOGRAPH
+ {0x9976, 0x6A9D}, //4615 #CJK UNIFIED IDEOGRAPH
+ {0x9977, 0x6A9E}, //4616 #CJK UNIFIED IDEOGRAPH
+ {0x9978, 0x6A9F}, //4617 #CJK UNIFIED IDEOGRAPH
+ {0x9979, 0x6AA1}, //4618 #CJK UNIFIED IDEOGRAPH
+ {0x997A, 0x6AA2}, //4619 #CJK UNIFIED IDEOGRAPH
+ {0x997B, 0x6AA3}, //4620 #CJK UNIFIED IDEOGRAPH
+ {0x997C, 0x6AA4}, //4621 #CJK UNIFIED IDEOGRAPH
+ {0x997D, 0x6AA5}, //4622 #CJK UNIFIED IDEOGRAPH
+ {0x997E, 0x6AA6}, //4623 #CJK UNIFIED IDEOGRAPH
+ {0x9980, 0x6AA7}, //4624 #CJK UNIFIED IDEOGRAPH
+ {0x9981, 0x6AA8}, //4625 #CJK UNIFIED IDEOGRAPH
+ {0x9982, 0x6AAA}, //4626 #CJK UNIFIED IDEOGRAPH
+ {0x9983, 0x6AAD}, //4627 #CJK UNIFIED IDEOGRAPH
+ {0x9984, 0x6AAE}, //4628 #CJK UNIFIED IDEOGRAPH
+ {0x9985, 0x6AAF}, //4629 #CJK UNIFIED IDEOGRAPH
+ {0x9986, 0x6AB0}, //4630 #CJK UNIFIED IDEOGRAPH
+ {0x9987, 0x6AB1}, //4631 #CJK UNIFIED IDEOGRAPH
+ {0x9988, 0x6AB2}, //4632 #CJK UNIFIED IDEOGRAPH
+ {0x9989, 0x6AB3}, //4633 #CJK UNIFIED IDEOGRAPH
+ {0x998A, 0x6AB4}, //4634 #CJK UNIFIED IDEOGRAPH
+ {0x998B, 0x6AB5}, //4635 #CJK UNIFIED IDEOGRAPH
+ {0x998C, 0x6AB6}, //4636 #CJK UNIFIED IDEOGRAPH
+ {0x998D, 0x6AB7}, //4637 #CJK UNIFIED IDEOGRAPH
+ {0x998E, 0x6AB8}, //4638 #CJK UNIFIED IDEOGRAPH
+ {0x998F, 0x6AB9}, //4639 #CJK UNIFIED IDEOGRAPH
+ {0x9990, 0x6ABA}, //4640 #CJK UNIFIED IDEOGRAPH
+ {0x9991, 0x6ABB}, //4641 #CJK UNIFIED IDEOGRAPH
+ {0x9992, 0x6ABC}, //4642 #CJK UNIFIED IDEOGRAPH
+ {0x9993, 0x6ABD}, //4643 #CJK UNIFIED IDEOGRAPH
+ {0x9994, 0x6ABE}, //4644 #CJK UNIFIED IDEOGRAPH
+ {0x9995, 0x6ABF}, //4645 #CJK UNIFIED IDEOGRAPH
+ {0x9996, 0x6AC0}, //4646 #CJK UNIFIED IDEOGRAPH
+ {0x9997, 0x6AC1}, //4647 #CJK UNIFIED IDEOGRAPH
+ {0x9998, 0x6AC2}, //4648 #CJK UNIFIED IDEOGRAPH
+ {0x9999, 0x6AC3}, //4649 #CJK UNIFIED IDEOGRAPH
+ {0x999A, 0x6AC4}, //4650 #CJK UNIFIED IDEOGRAPH
+ {0x999B, 0x6AC5}, //4651 #CJK UNIFIED IDEOGRAPH
+ {0x999C, 0x6AC6}, //4652 #CJK UNIFIED IDEOGRAPH
+ {0x999D, 0x6AC7}, //4653 #CJK UNIFIED IDEOGRAPH
+ {0x999E, 0x6AC8}, //4654 #CJK UNIFIED IDEOGRAPH
+ {0x999F, 0x6AC9}, //4655 #CJK UNIFIED IDEOGRAPH
+ {0x99A0, 0x6ACA}, //4656 #CJK UNIFIED IDEOGRAPH
+ {0x99A1, 0x6ACB}, //4657 #CJK UNIFIED IDEOGRAPH
+ {0x99A2, 0x6ACC}, //4658 #CJK UNIFIED IDEOGRAPH
+ {0x99A3, 0x6ACD}, //4659 #CJK UNIFIED IDEOGRAPH
+ {0x99A4, 0x6ACE}, //4660 #CJK UNIFIED IDEOGRAPH
+ {0x99A5, 0x6ACF}, //4661 #CJK UNIFIED IDEOGRAPH
+ {0x99A6, 0x6AD0}, //4662 #CJK UNIFIED IDEOGRAPH
+ {0x99A7, 0x6AD1}, //4663 #CJK UNIFIED IDEOGRAPH
+ {0x99A8, 0x6AD2}, //4664 #CJK UNIFIED IDEOGRAPH
+ {0x99A9, 0x6AD3}, //4665 #CJK UNIFIED IDEOGRAPH
+ {0x99AA, 0x6AD4}, //4666 #CJK UNIFIED IDEOGRAPH
+ {0x99AB, 0x6AD5}, //4667 #CJK UNIFIED IDEOGRAPH
+ {0x99AC, 0x6AD6}, //4668 #CJK UNIFIED IDEOGRAPH
+ {0x99AD, 0x6AD7}, //4669 #CJK UNIFIED IDEOGRAPH
+ {0x99AE, 0x6AD8}, //4670 #CJK UNIFIED IDEOGRAPH
+ {0x99AF, 0x6AD9}, //4671 #CJK UNIFIED IDEOGRAPH
+ {0x99B0, 0x6ADA}, //4672 #CJK UNIFIED IDEOGRAPH
+ {0x99B1, 0x6ADB}, //4673 #CJK UNIFIED IDEOGRAPH
+ {0x99B2, 0x6ADC}, //4674 #CJK UNIFIED IDEOGRAPH
+ {0x99B3, 0x6ADD}, //4675 #CJK UNIFIED IDEOGRAPH
+ {0x99B4, 0x6ADE}, //4676 #CJK UNIFIED IDEOGRAPH
+ {0x99B5, 0x6ADF}, //4677 #CJK UNIFIED IDEOGRAPH
+ {0x99B6, 0x6AE0}, //4678 #CJK UNIFIED IDEOGRAPH
+ {0x99B7, 0x6AE1}, //4679 #CJK UNIFIED IDEOGRAPH
+ {0x99B8, 0x6AE2}, //4680 #CJK UNIFIED IDEOGRAPH
+ {0x99B9, 0x6AE3}, //4681 #CJK UNIFIED IDEOGRAPH
+ {0x99BA, 0x6AE4}, //4682 #CJK UNIFIED IDEOGRAPH
+ {0x99BB, 0x6AE5}, //4683 #CJK UNIFIED IDEOGRAPH
+ {0x99BC, 0x6AE6}, //4684 #CJK UNIFIED IDEOGRAPH
+ {0x99BD, 0x6AE7}, //4685 #CJK UNIFIED IDEOGRAPH
+ {0x99BE, 0x6AE8}, //4686 #CJK UNIFIED IDEOGRAPH
+ {0x99BF, 0x6AE9}, //4687 #CJK UNIFIED IDEOGRAPH
+ {0x99C0, 0x6AEA}, //4688 #CJK UNIFIED IDEOGRAPH
+ {0x99C1, 0x6AEB}, //4689 #CJK UNIFIED IDEOGRAPH
+ {0x99C2, 0x6AEC}, //4690 #CJK UNIFIED IDEOGRAPH
+ {0x99C3, 0x6AED}, //4691 #CJK UNIFIED IDEOGRAPH
+ {0x99C4, 0x6AEE}, //4692 #CJK UNIFIED IDEOGRAPH
+ {0x99C5, 0x6AEF}, //4693 #CJK UNIFIED IDEOGRAPH
+ {0x99C6, 0x6AF0}, //4694 #CJK UNIFIED IDEOGRAPH
+ {0x99C7, 0x6AF1}, //4695 #CJK UNIFIED IDEOGRAPH
+ {0x99C8, 0x6AF2}, //4696 #CJK UNIFIED IDEOGRAPH
+ {0x99C9, 0x6AF3}, //4697 #CJK UNIFIED IDEOGRAPH
+ {0x99CA, 0x6AF4}, //4698 #CJK UNIFIED IDEOGRAPH
+ {0x99CB, 0x6AF5}, //4699 #CJK UNIFIED IDEOGRAPH
+ {0x99CC, 0x6AF6}, //4700 #CJK UNIFIED IDEOGRAPH
+ {0x99CD, 0x6AF7}, //4701 #CJK UNIFIED IDEOGRAPH
+ {0x99CE, 0x6AF8}, //4702 #CJK UNIFIED IDEOGRAPH
+ {0x99CF, 0x6AF9}, //4703 #CJK UNIFIED IDEOGRAPH
+ {0x99D0, 0x6AFA}, //4704 #CJK UNIFIED IDEOGRAPH
+ {0x99D1, 0x6AFB}, //4705 #CJK UNIFIED IDEOGRAPH
+ {0x99D2, 0x6AFC}, //4706 #CJK UNIFIED IDEOGRAPH
+ {0x99D3, 0x6AFD}, //4707 #CJK UNIFIED IDEOGRAPH
+ {0x99D4, 0x6AFE}, //4708 #CJK UNIFIED IDEOGRAPH
+ {0x99D5, 0x6AFF}, //4709 #CJK UNIFIED IDEOGRAPH
+ {0x99D6, 0x6B00}, //4710 #CJK UNIFIED IDEOGRAPH
+ {0x99D7, 0x6B01}, //4711 #CJK UNIFIED IDEOGRAPH
+ {0x99D8, 0x6B02}, //4712 #CJK UNIFIED IDEOGRAPH
+ {0x99D9, 0x6B03}, //4713 #CJK UNIFIED IDEOGRAPH
+ {0x99DA, 0x6B04}, //4714 #CJK UNIFIED IDEOGRAPH
+ {0x99DB, 0x6B05}, //4715 #CJK UNIFIED IDEOGRAPH
+ {0x99DC, 0x6B06}, //4716 #CJK UNIFIED IDEOGRAPH
+ {0x99DD, 0x6B07}, //4717 #CJK UNIFIED IDEOGRAPH
+ {0x99DE, 0x6B08}, //4718 #CJK UNIFIED IDEOGRAPH
+ {0x99DF, 0x6B09}, //4719 #CJK UNIFIED IDEOGRAPH
+ {0x99E0, 0x6B0A}, //4720 #CJK UNIFIED IDEOGRAPH
+ {0x99E1, 0x6B0B}, //4721 #CJK UNIFIED IDEOGRAPH
+ {0x99E2, 0x6B0C}, //4722 #CJK UNIFIED IDEOGRAPH
+ {0x99E3, 0x6B0D}, //4723 #CJK UNIFIED IDEOGRAPH
+ {0x99E4, 0x6B0E}, //4724 #CJK UNIFIED IDEOGRAPH
+ {0x99E5, 0x6B0F}, //4725 #CJK UNIFIED IDEOGRAPH
+ {0x99E6, 0x6B10}, //4726 #CJK UNIFIED IDEOGRAPH
+ {0x99E7, 0x6B11}, //4727 #CJK UNIFIED IDEOGRAPH
+ {0x99E8, 0x6B12}, //4728 #CJK UNIFIED IDEOGRAPH
+ {0x99E9, 0x6B13}, //4729 #CJK UNIFIED IDEOGRAPH
+ {0x99EA, 0x6B14}, //4730 #CJK UNIFIED IDEOGRAPH
+ {0x99EB, 0x6B15}, //4731 #CJK UNIFIED IDEOGRAPH
+ {0x99EC, 0x6B16}, //4732 #CJK UNIFIED IDEOGRAPH
+ {0x99ED, 0x6B17}, //4733 #CJK UNIFIED IDEOGRAPH
+ {0x99EE, 0x6B18}, //4734 #CJK UNIFIED IDEOGRAPH
+ {0x99EF, 0x6B19}, //4735 #CJK UNIFIED IDEOGRAPH
+ {0x99F0, 0x6B1A}, //4736 #CJK UNIFIED IDEOGRAPH
+ {0x99F1, 0x6B1B}, //4737 #CJK UNIFIED IDEOGRAPH
+ {0x99F2, 0x6B1C}, //4738 #CJK UNIFIED IDEOGRAPH
+ {0x99F3, 0x6B1D}, //4739 #CJK UNIFIED IDEOGRAPH
+ {0x99F4, 0x6B1E}, //4740 #CJK UNIFIED IDEOGRAPH
+ {0x99F5, 0x6B1F}, //4741 #CJK UNIFIED IDEOGRAPH
+ {0x99F6, 0x6B25}, //4742 #CJK UNIFIED IDEOGRAPH
+ {0x99F7, 0x6B26}, //4743 #CJK UNIFIED IDEOGRAPH
+ {0x99F8, 0x6B28}, //4744 #CJK UNIFIED IDEOGRAPH
+ {0x99F9, 0x6B29}, //4745 #CJK UNIFIED IDEOGRAPH
+ {0x99FA, 0x6B2A}, //4746 #CJK UNIFIED IDEOGRAPH
+ {0x99FB, 0x6B2B}, //4747 #CJK UNIFIED IDEOGRAPH
+ {0x99FC, 0x6B2C}, //4748 #CJK UNIFIED IDEOGRAPH
+ {0x99FD, 0x6B2D}, //4749 #CJK UNIFIED IDEOGRAPH
+ {0x99FE, 0x6B2E}, //4750 #CJK UNIFIED IDEOGRAPH
+ {0x9A40, 0x6B2F}, //4751 #CJK UNIFIED IDEOGRAPH
+ {0x9A41, 0x6B30}, //4752 #CJK UNIFIED IDEOGRAPH
+ {0x9A42, 0x6B31}, //4753 #CJK UNIFIED IDEOGRAPH
+ {0x9A43, 0x6B33}, //4754 #CJK UNIFIED IDEOGRAPH
+ {0x9A44, 0x6B34}, //4755 #CJK UNIFIED IDEOGRAPH
+ {0x9A45, 0x6B35}, //4756 #CJK UNIFIED IDEOGRAPH
+ {0x9A46, 0x6B36}, //4757 #CJK UNIFIED IDEOGRAPH
+ {0x9A47, 0x6B38}, //4758 #CJK UNIFIED IDEOGRAPH
+ {0x9A48, 0x6B3B}, //4759 #CJK UNIFIED IDEOGRAPH
+ {0x9A49, 0x6B3C}, //4760 #CJK UNIFIED IDEOGRAPH
+ {0x9A4A, 0x6B3D}, //4761 #CJK UNIFIED IDEOGRAPH
+ {0x9A4B, 0x6B3F}, //4762 #CJK UNIFIED IDEOGRAPH
+ {0x9A4C, 0x6B40}, //4763 #CJK UNIFIED IDEOGRAPH
+ {0x9A4D, 0x6B41}, //4764 #CJK UNIFIED IDEOGRAPH
+ {0x9A4E, 0x6B42}, //4765 #CJK UNIFIED IDEOGRAPH
+ {0x9A4F, 0x6B44}, //4766 #CJK UNIFIED IDEOGRAPH
+ {0x9A50, 0x6B45}, //4767 #CJK UNIFIED IDEOGRAPH
+ {0x9A51, 0x6B48}, //4768 #CJK UNIFIED IDEOGRAPH
+ {0x9A52, 0x6B4A}, //4769 #CJK UNIFIED IDEOGRAPH
+ {0x9A53, 0x6B4B}, //4770 #CJK UNIFIED IDEOGRAPH
+ {0x9A54, 0x6B4D}, //4771 #CJK UNIFIED IDEOGRAPH
+ {0x9A55, 0x6B4E}, //4772 #CJK UNIFIED IDEOGRAPH
+ {0x9A56, 0x6B4F}, //4773 #CJK UNIFIED IDEOGRAPH
+ {0x9A57, 0x6B50}, //4774 #CJK UNIFIED IDEOGRAPH
+ {0x9A58, 0x6B51}, //4775 #CJK UNIFIED IDEOGRAPH
+ {0x9A59, 0x6B52}, //4776 #CJK UNIFIED IDEOGRAPH
+ {0x9A5A, 0x6B53}, //4777 #CJK UNIFIED IDEOGRAPH
+ {0x9A5B, 0x6B54}, //4778 #CJK UNIFIED IDEOGRAPH
+ {0x9A5C, 0x6B55}, //4779 #CJK UNIFIED IDEOGRAPH
+ {0x9A5D, 0x6B56}, //4780 #CJK UNIFIED IDEOGRAPH
+ {0x9A5E, 0x6B57}, //4781 #CJK UNIFIED IDEOGRAPH
+ {0x9A5F, 0x6B58}, //4782 #CJK UNIFIED IDEOGRAPH
+ {0x9A60, 0x6B5A}, //4783 #CJK UNIFIED IDEOGRAPH
+ {0x9A61, 0x6B5B}, //4784 #CJK UNIFIED IDEOGRAPH
+ {0x9A62, 0x6B5C}, //4785 #CJK UNIFIED IDEOGRAPH
+ {0x9A63, 0x6B5D}, //4786 #CJK UNIFIED IDEOGRAPH
+ {0x9A64, 0x6B5E}, //4787 #CJK UNIFIED IDEOGRAPH
+ {0x9A65, 0x6B5F}, //4788 #CJK UNIFIED IDEOGRAPH
+ {0x9A66, 0x6B60}, //4789 #CJK UNIFIED IDEOGRAPH
+ {0x9A67, 0x6B61}, //4790 #CJK UNIFIED IDEOGRAPH
+ {0x9A68, 0x6B68}, //4791 #CJK UNIFIED IDEOGRAPH
+ {0x9A69, 0x6B69}, //4792 #CJK UNIFIED IDEOGRAPH
+ {0x9A6A, 0x6B6B}, //4793 #CJK UNIFIED IDEOGRAPH
+ {0x9A6B, 0x6B6C}, //4794 #CJK UNIFIED IDEOGRAPH
+ {0x9A6C, 0x6B6D}, //4795 #CJK UNIFIED IDEOGRAPH
+ {0x9A6D, 0x6B6E}, //4796 #CJK UNIFIED IDEOGRAPH
+ {0x9A6E, 0x6B6F}, //4797 #CJK UNIFIED IDEOGRAPH
+ {0x9A6F, 0x6B70}, //4798 #CJK UNIFIED IDEOGRAPH
+ {0x9A70, 0x6B71}, //4799 #CJK UNIFIED IDEOGRAPH
+ {0x9A71, 0x6B72}, //4800 #CJK UNIFIED IDEOGRAPH
+ {0x9A72, 0x6B73}, //4801 #CJK UNIFIED IDEOGRAPH
+ {0x9A73, 0x6B74}, //4802 #CJK UNIFIED IDEOGRAPH
+ {0x9A74, 0x6B75}, //4803 #CJK UNIFIED IDEOGRAPH
+ {0x9A75, 0x6B76}, //4804 #CJK UNIFIED IDEOGRAPH
+ {0x9A76, 0x6B77}, //4805 #CJK UNIFIED IDEOGRAPH
+ {0x9A77, 0x6B78}, //4806 #CJK UNIFIED IDEOGRAPH
+ {0x9A78, 0x6B7A}, //4807 #CJK UNIFIED IDEOGRAPH
+ {0x9A79, 0x6B7D}, //4808 #CJK UNIFIED IDEOGRAPH
+ {0x9A7A, 0x6B7E}, //4809 #CJK UNIFIED IDEOGRAPH
+ {0x9A7B, 0x6B7F}, //4810 #CJK UNIFIED IDEOGRAPH
+ {0x9A7C, 0x6B80}, //4811 #CJK UNIFIED IDEOGRAPH
+ {0x9A7D, 0x6B85}, //4812 #CJK UNIFIED IDEOGRAPH
+ {0x9A7E, 0x6B88}, //4813 #CJK UNIFIED IDEOGRAPH
+ {0x9A80, 0x6B8C}, //4814 #CJK UNIFIED IDEOGRAPH
+ {0x9A81, 0x6B8E}, //4815 #CJK UNIFIED IDEOGRAPH
+ {0x9A82, 0x6B8F}, //4816 #CJK UNIFIED IDEOGRAPH
+ {0x9A83, 0x6B90}, //4817 #CJK UNIFIED IDEOGRAPH
+ {0x9A84, 0x6B91}, //4818 #CJK UNIFIED IDEOGRAPH
+ {0x9A85, 0x6B94}, //4819 #CJK UNIFIED IDEOGRAPH
+ {0x9A86, 0x6B95}, //4820 #CJK UNIFIED IDEOGRAPH
+ {0x9A87, 0x6B97}, //4821 #CJK UNIFIED IDEOGRAPH
+ {0x9A88, 0x6B98}, //4822 #CJK UNIFIED IDEOGRAPH
+ {0x9A89, 0x6B99}, //4823 #CJK UNIFIED IDEOGRAPH
+ {0x9A8A, 0x6B9C}, //4824 #CJK UNIFIED IDEOGRAPH
+ {0x9A8B, 0x6B9D}, //4825 #CJK UNIFIED IDEOGRAPH
+ {0x9A8C, 0x6B9E}, //4826 #CJK UNIFIED IDEOGRAPH
+ {0x9A8D, 0x6B9F}, //4827 #CJK UNIFIED IDEOGRAPH
+ {0x9A8E, 0x6BA0}, //4828 #CJK UNIFIED IDEOGRAPH
+ {0x9A8F, 0x6BA2}, //4829 #CJK UNIFIED IDEOGRAPH
+ {0x9A90, 0x6BA3}, //4830 #CJK UNIFIED IDEOGRAPH
+ {0x9A91, 0x6BA4}, //4831 #CJK UNIFIED IDEOGRAPH
+ {0x9A92, 0x6BA5}, //4832 #CJK UNIFIED IDEOGRAPH
+ {0x9A93, 0x6BA6}, //4833 #CJK UNIFIED IDEOGRAPH
+ {0x9A94, 0x6BA7}, //4834 #CJK UNIFIED IDEOGRAPH
+ {0x9A95, 0x6BA8}, //4835 #CJK UNIFIED IDEOGRAPH
+ {0x9A96, 0x6BA9}, //4836 #CJK UNIFIED IDEOGRAPH
+ {0x9A97, 0x6BAB}, //4837 #CJK UNIFIED IDEOGRAPH
+ {0x9A98, 0x6BAC}, //4838 #CJK UNIFIED IDEOGRAPH
+ {0x9A99, 0x6BAD}, //4839 #CJK UNIFIED IDEOGRAPH
+ {0x9A9A, 0x6BAE}, //4840 #CJK UNIFIED IDEOGRAPH
+ {0x9A9B, 0x6BAF}, //4841 #CJK UNIFIED IDEOGRAPH
+ {0x9A9C, 0x6BB0}, //4842 #CJK UNIFIED IDEOGRAPH
+ {0x9A9D, 0x6BB1}, //4843 #CJK UNIFIED IDEOGRAPH
+ {0x9A9E, 0x6BB2}, //4844 #CJK UNIFIED IDEOGRAPH
+ {0x9A9F, 0x6BB6}, //4845 #CJK UNIFIED IDEOGRAPH
+ {0x9AA0, 0x6BB8}, //4846 #CJK UNIFIED IDEOGRAPH
+ {0x9AA1, 0x6BB9}, //4847 #CJK UNIFIED IDEOGRAPH
+ {0x9AA2, 0x6BBA}, //4848 #CJK UNIFIED IDEOGRAPH
+ {0x9AA3, 0x6BBB}, //4849 #CJK UNIFIED IDEOGRAPH
+ {0x9AA4, 0x6BBC}, //4850 #CJK UNIFIED IDEOGRAPH
+ {0x9AA5, 0x6BBD}, //4851 #CJK UNIFIED IDEOGRAPH
+ {0x9AA6, 0x6BBE}, //4852 #CJK UNIFIED IDEOGRAPH
+ {0x9AA7, 0x6BC0}, //4853 #CJK UNIFIED IDEOGRAPH
+ {0x9AA8, 0x6BC3}, //4854 #CJK UNIFIED IDEOGRAPH
+ {0x9AA9, 0x6BC4}, //4855 #CJK UNIFIED IDEOGRAPH
+ {0x9AAA, 0x6BC6}, //4856 #CJK UNIFIED IDEOGRAPH
+ {0x9AAB, 0x6BC7}, //4857 #CJK UNIFIED IDEOGRAPH
+ {0x9AAC, 0x6BC8}, //4858 #CJK UNIFIED IDEOGRAPH
+ {0x9AAD, 0x6BC9}, //4859 #CJK UNIFIED IDEOGRAPH
+ {0x9AAE, 0x6BCA}, //4860 #CJK UNIFIED IDEOGRAPH
+ {0x9AAF, 0x6BCC}, //4861 #CJK UNIFIED IDEOGRAPH
+ {0x9AB0, 0x6BCE}, //4862 #CJK UNIFIED IDEOGRAPH
+ {0x9AB1, 0x6BD0}, //4863 #CJK UNIFIED IDEOGRAPH
+ {0x9AB2, 0x6BD1}, //4864 #CJK UNIFIED IDEOGRAPH
+ {0x9AB3, 0x6BD8}, //4865 #CJK UNIFIED IDEOGRAPH
+ {0x9AB4, 0x6BDA}, //4866 #CJK UNIFIED IDEOGRAPH
+ {0x9AB5, 0x6BDC}, //4867 #CJK UNIFIED IDEOGRAPH
+ {0x9AB6, 0x6BDD}, //4868 #CJK UNIFIED IDEOGRAPH
+ {0x9AB7, 0x6BDE}, //4869 #CJK UNIFIED IDEOGRAPH
+ {0x9AB8, 0x6BDF}, //4870 #CJK UNIFIED IDEOGRAPH
+ {0x9AB9, 0x6BE0}, //4871 #CJK UNIFIED IDEOGRAPH
+ {0x9ABA, 0x6BE2}, //4872 #CJK UNIFIED IDEOGRAPH
+ {0x9ABB, 0x6BE3}, //4873 #CJK UNIFIED IDEOGRAPH
+ {0x9ABC, 0x6BE4}, //4874 #CJK UNIFIED IDEOGRAPH
+ {0x9ABD, 0x6BE5}, //4875 #CJK UNIFIED IDEOGRAPH
+ {0x9ABE, 0x6BE6}, //4876 #CJK UNIFIED IDEOGRAPH
+ {0x9ABF, 0x6BE7}, //4877 #CJK UNIFIED IDEOGRAPH
+ {0x9AC0, 0x6BE8}, //4878 #CJK UNIFIED IDEOGRAPH
+ {0x9AC1, 0x6BE9}, //4879 #CJK UNIFIED IDEOGRAPH
+ {0x9AC2, 0x6BEC}, //4880 #CJK UNIFIED IDEOGRAPH
+ {0x9AC3, 0x6BED}, //4881 #CJK UNIFIED IDEOGRAPH
+ {0x9AC4, 0x6BEE}, //4882 #CJK UNIFIED IDEOGRAPH
+ {0x9AC5, 0x6BF0}, //4883 #CJK UNIFIED IDEOGRAPH
+ {0x9AC6, 0x6BF1}, //4884 #CJK UNIFIED IDEOGRAPH
+ {0x9AC7, 0x6BF2}, //4885 #CJK UNIFIED IDEOGRAPH
+ {0x9AC8, 0x6BF4}, //4886 #CJK UNIFIED IDEOGRAPH
+ {0x9AC9, 0x6BF6}, //4887 #CJK UNIFIED IDEOGRAPH
+ {0x9ACA, 0x6BF7}, //4888 #CJK UNIFIED IDEOGRAPH
+ {0x9ACB, 0x6BF8}, //4889 #CJK UNIFIED IDEOGRAPH
+ {0x9ACC, 0x6BFA}, //4890 #CJK UNIFIED IDEOGRAPH
+ {0x9ACD, 0x6BFB}, //4891 #CJK UNIFIED IDEOGRAPH
+ {0x9ACE, 0x6BFC}, //4892 #CJK UNIFIED IDEOGRAPH
+ {0x9ACF, 0x6BFE}, //4893 #CJK UNIFIED IDEOGRAPH
+ {0x9AD0, 0x6BFF}, //4894 #CJK UNIFIED IDEOGRAPH
+ {0x9AD1, 0x6C00}, //4895 #CJK UNIFIED IDEOGRAPH
+ {0x9AD2, 0x6C01}, //4896 #CJK UNIFIED IDEOGRAPH
+ {0x9AD3, 0x6C02}, //4897 #CJK UNIFIED IDEOGRAPH
+ {0x9AD4, 0x6C03}, //4898 #CJK UNIFIED IDEOGRAPH
+ {0x9AD5, 0x6C04}, //4899 #CJK UNIFIED IDEOGRAPH
+ {0x9AD6, 0x6C08}, //4900 #CJK UNIFIED IDEOGRAPH
+ {0x9AD7, 0x6C09}, //4901 #CJK UNIFIED IDEOGRAPH
+ {0x9AD8, 0x6C0A}, //4902 #CJK UNIFIED IDEOGRAPH
+ {0x9AD9, 0x6C0B}, //4903 #CJK UNIFIED IDEOGRAPH
+ {0x9ADA, 0x6C0C}, //4904 #CJK UNIFIED IDEOGRAPH
+ {0x9ADB, 0x6C0E}, //4905 #CJK UNIFIED IDEOGRAPH
+ {0x9ADC, 0x6C12}, //4906 #CJK UNIFIED IDEOGRAPH
+ {0x9ADD, 0x6C17}, //4907 #CJK UNIFIED IDEOGRAPH
+ {0x9ADE, 0x6C1C}, //4908 #CJK UNIFIED IDEOGRAPH
+ {0x9ADF, 0x6C1D}, //4909 #CJK UNIFIED IDEOGRAPH
+ {0x9AE0, 0x6C1E}, //4910 #CJK UNIFIED IDEOGRAPH
+ {0x9AE1, 0x6C20}, //4911 #CJK UNIFIED IDEOGRAPH
+ {0x9AE2, 0x6C23}, //4912 #CJK UNIFIED IDEOGRAPH
+ {0x9AE3, 0x6C25}, //4913 #CJK UNIFIED IDEOGRAPH
+ {0x9AE4, 0x6C2B}, //4914 #CJK UNIFIED IDEOGRAPH
+ {0x9AE5, 0x6C2C}, //4915 #CJK UNIFIED IDEOGRAPH
+ {0x9AE6, 0x6C2D}, //4916 #CJK UNIFIED IDEOGRAPH
+ {0x9AE7, 0x6C31}, //4917 #CJK UNIFIED IDEOGRAPH
+ {0x9AE8, 0x6C33}, //4918 #CJK UNIFIED IDEOGRAPH
+ {0x9AE9, 0x6C36}, //4919 #CJK UNIFIED IDEOGRAPH
+ {0x9AEA, 0x6C37}, //4920 #CJK UNIFIED IDEOGRAPH
+ {0x9AEB, 0x6C39}, //4921 #CJK UNIFIED IDEOGRAPH
+ {0x9AEC, 0x6C3A}, //4922 #CJK UNIFIED IDEOGRAPH
+ {0x9AED, 0x6C3B}, //4923 #CJK UNIFIED IDEOGRAPH
+ {0x9AEE, 0x6C3C}, //4924 #CJK UNIFIED IDEOGRAPH
+ {0x9AEF, 0x6C3E}, //4925 #CJK UNIFIED IDEOGRAPH
+ {0x9AF0, 0x6C3F}, //4926 #CJK UNIFIED IDEOGRAPH
+ {0x9AF1, 0x6C43}, //4927 #CJK UNIFIED IDEOGRAPH
+ {0x9AF2, 0x6C44}, //4928 #CJK UNIFIED IDEOGRAPH
+ {0x9AF3, 0x6C45}, //4929 #CJK UNIFIED IDEOGRAPH
+ {0x9AF4, 0x6C48}, //4930 #CJK UNIFIED IDEOGRAPH
+ {0x9AF5, 0x6C4B}, //4931 #CJK UNIFIED IDEOGRAPH
+ {0x9AF6, 0x6C4C}, //4932 #CJK UNIFIED IDEOGRAPH
+ {0x9AF7, 0x6C4D}, //4933 #CJK UNIFIED IDEOGRAPH
+ {0x9AF8, 0x6C4E}, //4934 #CJK UNIFIED IDEOGRAPH
+ {0x9AF9, 0x6C4F}, //4935 #CJK UNIFIED IDEOGRAPH
+ {0x9AFA, 0x6C51}, //4936 #CJK UNIFIED IDEOGRAPH
+ {0x9AFB, 0x6C52}, //4937 #CJK UNIFIED IDEOGRAPH
+ {0x9AFC, 0x6C53}, //4938 #CJK UNIFIED IDEOGRAPH
+ {0x9AFD, 0x6C56}, //4939 #CJK UNIFIED IDEOGRAPH
+ {0x9AFE, 0x6C58}, //4940 #CJK UNIFIED IDEOGRAPH
+ {0x9B40, 0x6C59}, //4941 #CJK UNIFIED IDEOGRAPH
+ {0x9B41, 0x6C5A}, //4942 #CJK UNIFIED IDEOGRAPH
+ {0x9B42, 0x6C62}, //4943 #CJK UNIFIED IDEOGRAPH
+ {0x9B43, 0x6C63}, //4944 #CJK UNIFIED IDEOGRAPH
+ {0x9B44, 0x6C65}, //4945 #CJK UNIFIED IDEOGRAPH
+ {0x9B45, 0x6C66}, //4946 #CJK UNIFIED IDEOGRAPH
+ {0x9B46, 0x6C67}, //4947 #CJK UNIFIED IDEOGRAPH
+ {0x9B47, 0x6C6B}, //4948 #CJK UNIFIED IDEOGRAPH
+ {0x9B48, 0x6C6C}, //4949 #CJK UNIFIED IDEOGRAPH
+ {0x9B49, 0x6C6D}, //4950 #CJK UNIFIED IDEOGRAPH
+ {0x9B4A, 0x6C6E}, //4951 #CJK UNIFIED IDEOGRAPH
+ {0x9B4B, 0x6C6F}, //4952 #CJK UNIFIED IDEOGRAPH
+ {0x9B4C, 0x6C71}, //4953 #CJK UNIFIED IDEOGRAPH
+ {0x9B4D, 0x6C73}, //4954 #CJK UNIFIED IDEOGRAPH
+ {0x9B4E, 0x6C75}, //4955 #CJK UNIFIED IDEOGRAPH
+ {0x9B4F, 0x6C77}, //4956 #CJK UNIFIED IDEOGRAPH
+ {0x9B50, 0x6C78}, //4957 #CJK UNIFIED IDEOGRAPH
+ {0x9B51, 0x6C7A}, //4958 #CJK UNIFIED IDEOGRAPH
+ {0x9B52, 0x6C7B}, //4959 #CJK UNIFIED IDEOGRAPH
+ {0x9B53, 0x6C7C}, //4960 #CJK UNIFIED IDEOGRAPH
+ {0x9B54, 0x6C7F}, //4961 #CJK UNIFIED IDEOGRAPH
+ {0x9B55, 0x6C80}, //4962 #CJK UNIFIED IDEOGRAPH
+ {0x9B56, 0x6C84}, //4963 #CJK UNIFIED IDEOGRAPH
+ {0x9B57, 0x6C87}, //4964 #CJK UNIFIED IDEOGRAPH
+ {0x9B58, 0x6C8A}, //4965 #CJK UNIFIED IDEOGRAPH
+ {0x9B59, 0x6C8B}, //4966 #CJK UNIFIED IDEOGRAPH
+ {0x9B5A, 0x6C8D}, //4967 #CJK UNIFIED IDEOGRAPH
+ {0x9B5B, 0x6C8E}, //4968 #CJK UNIFIED IDEOGRAPH
+ {0x9B5C, 0x6C91}, //4969 #CJK UNIFIED IDEOGRAPH
+ {0x9B5D, 0x6C92}, //4970 #CJK UNIFIED IDEOGRAPH
+ {0x9B5E, 0x6C95}, //4971 #CJK UNIFIED IDEOGRAPH
+ {0x9B5F, 0x6C96}, //4972 #CJK UNIFIED IDEOGRAPH
+ {0x9B60, 0x6C97}, //4973 #CJK UNIFIED IDEOGRAPH
+ {0x9B61, 0x6C98}, //4974 #CJK UNIFIED IDEOGRAPH
+ {0x9B62, 0x6C9A}, //4975 #CJK UNIFIED IDEOGRAPH
+ {0x9B63, 0x6C9C}, //4976 #CJK UNIFIED IDEOGRAPH
+ {0x9B64, 0x6C9D}, //4977 #CJK UNIFIED IDEOGRAPH
+ {0x9B65, 0x6C9E}, //4978 #CJK UNIFIED IDEOGRAPH
+ {0x9B66, 0x6CA0}, //4979 #CJK UNIFIED IDEOGRAPH
+ {0x9B67, 0x6CA2}, //4980 #CJK UNIFIED IDEOGRAPH
+ {0x9B68, 0x6CA8}, //4981 #CJK UNIFIED IDEOGRAPH
+ {0x9B69, 0x6CAC}, //4982 #CJK UNIFIED IDEOGRAPH
+ {0x9B6A, 0x6CAF}, //4983 #CJK UNIFIED IDEOGRAPH
+ {0x9B6B, 0x6CB0}, //4984 #CJK UNIFIED IDEOGRAPH
+ {0x9B6C, 0x6CB4}, //4985 #CJK UNIFIED IDEOGRAPH
+ {0x9B6D, 0x6CB5}, //4986 #CJK UNIFIED IDEOGRAPH
+ {0x9B6E, 0x6CB6}, //4987 #CJK UNIFIED IDEOGRAPH
+ {0x9B6F, 0x6CB7}, //4988 #CJK UNIFIED IDEOGRAPH
+ {0x9B70, 0x6CBA}, //4989 #CJK UNIFIED IDEOGRAPH
+ {0x9B71, 0x6CC0}, //4990 #CJK UNIFIED IDEOGRAPH
+ {0x9B72, 0x6CC1}, //4991 #CJK UNIFIED IDEOGRAPH
+ {0x9B73, 0x6CC2}, //4992 #CJK UNIFIED IDEOGRAPH
+ {0x9B74, 0x6CC3}, //4993 #CJK UNIFIED IDEOGRAPH
+ {0x9B75, 0x6CC6}, //4994 #CJK UNIFIED IDEOGRAPH
+ {0x9B76, 0x6CC7}, //4995 #CJK UNIFIED IDEOGRAPH
+ {0x9B77, 0x6CC8}, //4996 #CJK UNIFIED IDEOGRAPH
+ {0x9B78, 0x6CCB}, //4997 #CJK UNIFIED IDEOGRAPH
+ {0x9B79, 0x6CCD}, //4998 #CJK UNIFIED IDEOGRAPH
+ {0x9B7A, 0x6CCE}, //4999 #CJK UNIFIED IDEOGRAPH
+ {0x9B7B, 0x6CCF}, //5000 #CJK UNIFIED IDEOGRAPH
+ {0x9B7C, 0x6CD1}, //5001 #CJK UNIFIED IDEOGRAPH
+ {0x9B7D, 0x6CD2}, //5002 #CJK UNIFIED IDEOGRAPH
+ {0x9B7E, 0x6CD8}, //5003 #CJK UNIFIED IDEOGRAPH
+ {0x9B80, 0x6CD9}, //5004 #CJK UNIFIED IDEOGRAPH
+ {0x9B81, 0x6CDA}, //5005 #CJK UNIFIED IDEOGRAPH
+ {0x9B82, 0x6CDC}, //5006 #CJK UNIFIED IDEOGRAPH
+ {0x9B83, 0x6CDD}, //5007 #CJK UNIFIED IDEOGRAPH
+ {0x9B84, 0x6CDF}, //5008 #CJK UNIFIED IDEOGRAPH
+ {0x9B85, 0x6CE4}, //5009 #CJK UNIFIED IDEOGRAPH
+ {0x9B86, 0x6CE6}, //5010 #CJK UNIFIED IDEOGRAPH
+ {0x9B87, 0x6CE7}, //5011 #CJK UNIFIED IDEOGRAPH
+ {0x9B88, 0x6CE9}, //5012 #CJK UNIFIED IDEOGRAPH
+ {0x9B89, 0x6CEC}, //5013 #CJK UNIFIED IDEOGRAPH
+ {0x9B8A, 0x6CED}, //5014 #CJK UNIFIED IDEOGRAPH
+ {0x9B8B, 0x6CF2}, //5015 #CJK UNIFIED IDEOGRAPH
+ {0x9B8C, 0x6CF4}, //5016 #CJK UNIFIED IDEOGRAPH
+ {0x9B8D, 0x6CF9}, //5017 #CJK UNIFIED IDEOGRAPH
+ {0x9B8E, 0x6CFF}, //5018 #CJK UNIFIED IDEOGRAPH
+ {0x9B8F, 0x6D00}, //5019 #CJK UNIFIED IDEOGRAPH
+ {0x9B90, 0x6D02}, //5020 #CJK UNIFIED IDEOGRAPH
+ {0x9B91, 0x6D03}, //5021 #CJK UNIFIED IDEOGRAPH
+ {0x9B92, 0x6D05}, //5022 #CJK UNIFIED IDEOGRAPH
+ {0x9B93, 0x6D06}, //5023 #CJK UNIFIED IDEOGRAPH
+ {0x9B94, 0x6D08}, //5024 #CJK UNIFIED IDEOGRAPH
+ {0x9B95, 0x6D09}, //5025 #CJK UNIFIED IDEOGRAPH
+ {0x9B96, 0x6D0A}, //5026 #CJK UNIFIED IDEOGRAPH
+ {0x9B97, 0x6D0D}, //5027 #CJK UNIFIED IDEOGRAPH
+ {0x9B98, 0x6D0F}, //5028 #CJK UNIFIED IDEOGRAPH
+ {0x9B99, 0x6D10}, //5029 #CJK UNIFIED IDEOGRAPH
+ {0x9B9A, 0x6D11}, //5030 #CJK UNIFIED IDEOGRAPH
+ {0x9B9B, 0x6D13}, //5031 #CJK UNIFIED IDEOGRAPH
+ {0x9B9C, 0x6D14}, //5032 #CJK UNIFIED IDEOGRAPH
+ {0x9B9D, 0x6D15}, //5033 #CJK UNIFIED IDEOGRAPH
+ {0x9B9E, 0x6D16}, //5034 #CJK UNIFIED IDEOGRAPH
+ {0x9B9F, 0x6D18}, //5035 #CJK UNIFIED IDEOGRAPH
+ {0x9BA0, 0x6D1C}, //5036 #CJK UNIFIED IDEOGRAPH
+ {0x9BA1, 0x6D1D}, //5037 #CJK UNIFIED IDEOGRAPH
+ {0x9BA2, 0x6D1F}, //5038 #CJK UNIFIED IDEOGRAPH
+ {0x9BA3, 0x6D20}, //5039 #CJK UNIFIED IDEOGRAPH
+ {0x9BA4, 0x6D21}, //5040 #CJK UNIFIED IDEOGRAPH
+ {0x9BA5, 0x6D22}, //5041 #CJK UNIFIED IDEOGRAPH
+ {0x9BA6, 0x6D23}, //5042 #CJK UNIFIED IDEOGRAPH
+ {0x9BA7, 0x6D24}, //5043 #CJK UNIFIED IDEOGRAPH
+ {0x9BA8, 0x6D26}, //5044 #CJK UNIFIED IDEOGRAPH
+ {0x9BA9, 0x6D28}, //5045 #CJK UNIFIED IDEOGRAPH
+ {0x9BAA, 0x6D29}, //5046 #CJK UNIFIED IDEOGRAPH
+ {0x9BAB, 0x6D2C}, //5047 #CJK UNIFIED IDEOGRAPH
+ {0x9BAC, 0x6D2D}, //5048 #CJK UNIFIED IDEOGRAPH
+ {0x9BAD, 0x6D2F}, //5049 #CJK UNIFIED IDEOGRAPH
+ {0x9BAE, 0x6D30}, //5050 #CJK UNIFIED IDEOGRAPH
+ {0x9BAF, 0x6D34}, //5051 #CJK UNIFIED IDEOGRAPH
+ {0x9BB0, 0x6D36}, //5052 #CJK UNIFIED IDEOGRAPH
+ {0x9BB1, 0x6D37}, //5053 #CJK UNIFIED IDEOGRAPH
+ {0x9BB2, 0x6D38}, //5054 #CJK UNIFIED IDEOGRAPH
+ {0x9BB3, 0x6D3A}, //5055 #CJK UNIFIED IDEOGRAPH
+ {0x9BB4, 0x6D3F}, //5056 #CJK UNIFIED IDEOGRAPH
+ {0x9BB5, 0x6D40}, //5057 #CJK UNIFIED IDEOGRAPH
+ {0x9BB6, 0x6D42}, //5058 #CJK UNIFIED IDEOGRAPH
+ {0x9BB7, 0x6D44}, //5059 #CJK UNIFIED IDEOGRAPH
+ {0x9BB8, 0x6D49}, //5060 #CJK UNIFIED IDEOGRAPH
+ {0x9BB9, 0x6D4C}, //5061 #CJK UNIFIED IDEOGRAPH
+ {0x9BBA, 0x6D50}, //5062 #CJK UNIFIED IDEOGRAPH
+ {0x9BBB, 0x6D55}, //5063 #CJK UNIFIED IDEOGRAPH
+ {0x9BBC, 0x6D56}, //5064 #CJK UNIFIED IDEOGRAPH
+ {0x9BBD, 0x6D57}, //5065 #CJK UNIFIED IDEOGRAPH
+ {0x9BBE, 0x6D58}, //5066 #CJK UNIFIED IDEOGRAPH
+ {0x9BBF, 0x6D5B}, //5067 #CJK UNIFIED IDEOGRAPH
+ {0x9BC0, 0x6D5D}, //5068 #CJK UNIFIED IDEOGRAPH
+ {0x9BC1, 0x6D5F}, //5069 #CJK UNIFIED IDEOGRAPH
+ {0x9BC2, 0x6D61}, //5070 #CJK UNIFIED IDEOGRAPH
+ {0x9BC3, 0x6D62}, //5071 #CJK UNIFIED IDEOGRAPH
+ {0x9BC4, 0x6D64}, //5072 #CJK UNIFIED IDEOGRAPH
+ {0x9BC5, 0x6D65}, //5073 #CJK UNIFIED IDEOGRAPH
+ {0x9BC6, 0x6D67}, //5074 #CJK UNIFIED IDEOGRAPH
+ {0x9BC7, 0x6D68}, //5075 #CJK UNIFIED IDEOGRAPH
+ {0x9BC8, 0x6D6B}, //5076 #CJK UNIFIED IDEOGRAPH
+ {0x9BC9, 0x6D6C}, //5077 #CJK UNIFIED IDEOGRAPH
+ {0x9BCA, 0x6D6D}, //5078 #CJK UNIFIED IDEOGRAPH
+ {0x9BCB, 0x6D70}, //5079 #CJK UNIFIED IDEOGRAPH
+ {0x9BCC, 0x6D71}, //5080 #CJK UNIFIED IDEOGRAPH
+ {0x9BCD, 0x6D72}, //5081 #CJK UNIFIED IDEOGRAPH
+ {0x9BCE, 0x6D73}, //5082 #CJK UNIFIED IDEOGRAPH
+ {0x9BCF, 0x6D75}, //5083 #CJK UNIFIED IDEOGRAPH
+ {0x9BD0, 0x6D76}, //5084 #CJK UNIFIED IDEOGRAPH
+ {0x9BD1, 0x6D79}, //5085 #CJK UNIFIED IDEOGRAPH
+ {0x9BD2, 0x6D7A}, //5086 #CJK UNIFIED IDEOGRAPH
+ {0x9BD3, 0x6D7B}, //5087 #CJK UNIFIED IDEOGRAPH
+ {0x9BD4, 0x6D7D}, //5088 #CJK UNIFIED IDEOGRAPH
+ {0x9BD5, 0x6D7E}, //5089 #CJK UNIFIED IDEOGRAPH
+ {0x9BD6, 0x6D7F}, //5090 #CJK UNIFIED IDEOGRAPH
+ {0x9BD7, 0x6D80}, //5091 #CJK UNIFIED IDEOGRAPH
+ {0x9BD8, 0x6D81}, //5092 #CJK UNIFIED IDEOGRAPH
+ {0x9BD9, 0x6D83}, //5093 #CJK UNIFIED IDEOGRAPH
+ {0x9BDA, 0x6D84}, //5094 #CJK UNIFIED IDEOGRAPH
+ {0x9BDB, 0x6D86}, //5095 #CJK UNIFIED IDEOGRAPH
+ {0x9BDC, 0x6D87}, //5096 #CJK UNIFIED IDEOGRAPH
+ {0x9BDD, 0x6D8A}, //5097 #CJK UNIFIED IDEOGRAPH
+ {0x9BDE, 0x6D8B}, //5098 #CJK UNIFIED IDEOGRAPH
+ {0x9BDF, 0x6D8D}, //5099 #CJK UNIFIED IDEOGRAPH
+ {0x9BE0, 0x6D8F}, //5100 #CJK UNIFIED IDEOGRAPH
+ {0x9BE1, 0x6D90}, //5101 #CJK UNIFIED IDEOGRAPH
+ {0x9BE2, 0x6D92}, //5102 #CJK UNIFIED IDEOGRAPH
+ {0x9BE3, 0x6D96}, //5103 #CJK UNIFIED IDEOGRAPH
+ {0x9BE4, 0x6D97}, //5104 #CJK UNIFIED IDEOGRAPH
+ {0x9BE5, 0x6D98}, //5105 #CJK UNIFIED IDEOGRAPH
+ {0x9BE6, 0x6D99}, //5106 #CJK UNIFIED IDEOGRAPH
+ {0x9BE7, 0x6D9A}, //5107 #CJK UNIFIED IDEOGRAPH
+ {0x9BE8, 0x6D9C}, //5108 #CJK UNIFIED IDEOGRAPH
+ {0x9BE9, 0x6DA2}, //5109 #CJK UNIFIED IDEOGRAPH
+ {0x9BEA, 0x6DA5}, //5110 #CJK UNIFIED IDEOGRAPH
+ {0x9BEB, 0x6DAC}, //5111 #CJK UNIFIED IDEOGRAPH
+ {0x9BEC, 0x6DAD}, //5112 #CJK UNIFIED IDEOGRAPH
+ {0x9BED, 0x6DB0}, //5113 #CJK UNIFIED IDEOGRAPH
+ {0x9BEE, 0x6DB1}, //5114 #CJK UNIFIED IDEOGRAPH
+ {0x9BEF, 0x6DB3}, //5115 #CJK UNIFIED IDEOGRAPH
+ {0x9BF0, 0x6DB4}, //5116 #CJK UNIFIED IDEOGRAPH
+ {0x9BF1, 0x6DB6}, //5117 #CJK UNIFIED IDEOGRAPH
+ {0x9BF2, 0x6DB7}, //5118 #CJK UNIFIED IDEOGRAPH
+ {0x9BF3, 0x6DB9}, //5119 #CJK UNIFIED IDEOGRAPH
+ {0x9BF4, 0x6DBA}, //5120 #CJK UNIFIED IDEOGRAPH
+ {0x9BF5, 0x6DBB}, //5121 #CJK UNIFIED IDEOGRAPH
+ {0x9BF6, 0x6DBC}, //5122 #CJK UNIFIED IDEOGRAPH
+ {0x9BF7, 0x6DBD}, //5123 #CJK UNIFIED IDEOGRAPH
+ {0x9BF8, 0x6DBE}, //5124 #CJK UNIFIED IDEOGRAPH
+ {0x9BF9, 0x6DC1}, //5125 #CJK UNIFIED IDEOGRAPH
+ {0x9BFA, 0x6DC2}, //5126 #CJK UNIFIED IDEOGRAPH
+ {0x9BFB, 0x6DC3}, //5127 #CJK UNIFIED IDEOGRAPH
+ {0x9BFC, 0x6DC8}, //5128 #CJK UNIFIED IDEOGRAPH
+ {0x9BFD, 0x6DC9}, //5129 #CJK UNIFIED IDEOGRAPH
+ {0x9BFE, 0x6DCA}, //5130 #CJK UNIFIED IDEOGRAPH
+ {0x9C40, 0x6DCD}, //5131 #CJK UNIFIED IDEOGRAPH
+ {0x9C41, 0x6DCE}, //5132 #CJK UNIFIED IDEOGRAPH
+ {0x9C42, 0x6DCF}, //5133 #CJK UNIFIED IDEOGRAPH
+ {0x9C43, 0x6DD0}, //5134 #CJK UNIFIED IDEOGRAPH
+ {0x9C44, 0x6DD2}, //5135 #CJK UNIFIED IDEOGRAPH
+ {0x9C45, 0x6DD3}, //5136 #CJK UNIFIED IDEOGRAPH
+ {0x9C46, 0x6DD4}, //5137 #CJK UNIFIED IDEOGRAPH
+ {0x9C47, 0x6DD5}, //5138 #CJK UNIFIED IDEOGRAPH
+ {0x9C48, 0x6DD7}, //5139 #CJK UNIFIED IDEOGRAPH
+ {0x9C49, 0x6DDA}, //5140 #CJK UNIFIED IDEOGRAPH
+ {0x9C4A, 0x6DDB}, //5141 #CJK UNIFIED IDEOGRAPH
+ {0x9C4B, 0x6DDC}, //5142 #CJK UNIFIED IDEOGRAPH
+ {0x9C4C, 0x6DDF}, //5143 #CJK UNIFIED IDEOGRAPH
+ {0x9C4D, 0x6DE2}, //5144 #CJK UNIFIED IDEOGRAPH
+ {0x9C4E, 0x6DE3}, //5145 #CJK UNIFIED IDEOGRAPH
+ {0x9C4F, 0x6DE5}, //5146 #CJK UNIFIED IDEOGRAPH
+ {0x9C50, 0x6DE7}, //5147 #CJK UNIFIED IDEOGRAPH
+ {0x9C51, 0x6DE8}, //5148 #CJK UNIFIED IDEOGRAPH
+ {0x9C52, 0x6DE9}, //5149 #CJK UNIFIED IDEOGRAPH
+ {0x9C53, 0x6DEA}, //5150 #CJK UNIFIED IDEOGRAPH
+ {0x9C54, 0x6DED}, //5151 #CJK UNIFIED IDEOGRAPH
+ {0x9C55, 0x6DEF}, //5152 #CJK UNIFIED IDEOGRAPH
+ {0x9C56, 0x6DF0}, //5153 #CJK UNIFIED IDEOGRAPH
+ {0x9C57, 0x6DF2}, //5154 #CJK UNIFIED IDEOGRAPH
+ {0x9C58, 0x6DF4}, //5155 #CJK UNIFIED IDEOGRAPH
+ {0x9C59, 0x6DF5}, //5156 #CJK UNIFIED IDEOGRAPH
+ {0x9C5A, 0x6DF6}, //5157 #CJK UNIFIED IDEOGRAPH
+ {0x9C5B, 0x6DF8}, //5158 #CJK UNIFIED IDEOGRAPH
+ {0x9C5C, 0x6DFA}, //5159 #CJK UNIFIED IDEOGRAPH
+ {0x9C5D, 0x6DFD}, //5160 #CJK UNIFIED IDEOGRAPH
+ {0x9C5E, 0x6DFE}, //5161 #CJK UNIFIED IDEOGRAPH
+ {0x9C5F, 0x6DFF}, //5162 #CJK UNIFIED IDEOGRAPH
+ {0x9C60, 0x6E00}, //5163 #CJK UNIFIED IDEOGRAPH
+ {0x9C61, 0x6E01}, //5164 #CJK UNIFIED IDEOGRAPH
+ {0x9C62, 0x6E02}, //5165 #CJK UNIFIED IDEOGRAPH
+ {0x9C63, 0x6E03}, //5166 #CJK UNIFIED IDEOGRAPH
+ {0x9C64, 0x6E04}, //5167 #CJK UNIFIED IDEOGRAPH
+ {0x9C65, 0x6E06}, //5168 #CJK UNIFIED IDEOGRAPH
+ {0x9C66, 0x6E07}, //5169 #CJK UNIFIED IDEOGRAPH
+ {0x9C67, 0x6E08}, //5170 #CJK UNIFIED IDEOGRAPH
+ {0x9C68, 0x6E09}, //5171 #CJK UNIFIED IDEOGRAPH
+ {0x9C69, 0x6E0B}, //5172 #CJK UNIFIED IDEOGRAPH
+ {0x9C6A, 0x6E0F}, //5173 #CJK UNIFIED IDEOGRAPH
+ {0x9C6B, 0x6E12}, //5174 #CJK UNIFIED IDEOGRAPH
+ {0x9C6C, 0x6E13}, //5175 #CJK UNIFIED IDEOGRAPH
+ {0x9C6D, 0x6E15}, //5176 #CJK UNIFIED IDEOGRAPH
+ {0x9C6E, 0x6E18}, //5177 #CJK UNIFIED IDEOGRAPH
+ {0x9C6F, 0x6E19}, //5178 #CJK UNIFIED IDEOGRAPH
+ {0x9C70, 0x6E1B}, //5179 #CJK UNIFIED IDEOGRAPH
+ {0x9C71, 0x6E1C}, //5180 #CJK UNIFIED IDEOGRAPH
+ {0x9C72, 0x6E1E}, //5181 #CJK UNIFIED IDEOGRAPH
+ {0x9C73, 0x6E1F}, //5182 #CJK UNIFIED IDEOGRAPH
+ {0x9C74, 0x6E22}, //5183 #CJK UNIFIED IDEOGRAPH
+ {0x9C75, 0x6E26}, //5184 #CJK UNIFIED IDEOGRAPH
+ {0x9C76, 0x6E27}, //5185 #CJK UNIFIED IDEOGRAPH
+ {0x9C77, 0x6E28}, //5186 #CJK UNIFIED IDEOGRAPH
+ {0x9C78, 0x6E2A}, //5187 #CJK UNIFIED IDEOGRAPH
+ {0x9C79, 0x6E2C}, //5188 #CJK UNIFIED IDEOGRAPH
+ {0x9C7A, 0x6E2E}, //5189 #CJK UNIFIED IDEOGRAPH
+ {0x9C7B, 0x6E30}, //5190 #CJK UNIFIED IDEOGRAPH
+ {0x9C7C, 0x6E31}, //5191 #CJK UNIFIED IDEOGRAPH
+ {0x9C7D, 0x6E33}, //5192 #CJK UNIFIED IDEOGRAPH
+ {0x9C7E, 0x6E35}, //5193 #CJK UNIFIED IDEOGRAPH
+ {0x9C80, 0x6E36}, //5194 #CJK UNIFIED IDEOGRAPH
+ {0x9C81, 0x6E37}, //5195 #CJK UNIFIED IDEOGRAPH
+ {0x9C82, 0x6E39}, //5196 #CJK UNIFIED IDEOGRAPH
+ {0x9C83, 0x6E3B}, //5197 #CJK UNIFIED IDEOGRAPH
+ {0x9C84, 0x6E3C}, //5198 #CJK UNIFIED IDEOGRAPH
+ {0x9C85, 0x6E3D}, //5199 #CJK UNIFIED IDEOGRAPH
+ {0x9C86, 0x6E3E}, //5200 #CJK UNIFIED IDEOGRAPH
+ {0x9C87, 0x6E3F}, //5201 #CJK UNIFIED IDEOGRAPH
+ {0x9C88, 0x6E40}, //5202 #CJK UNIFIED IDEOGRAPH
+ {0x9C89, 0x6E41}, //5203 #CJK UNIFIED IDEOGRAPH
+ {0x9C8A, 0x6E42}, //5204 #CJK UNIFIED IDEOGRAPH
+ {0x9C8B, 0x6E45}, //5205 #CJK UNIFIED IDEOGRAPH
+ {0x9C8C, 0x6E46}, //5206 #CJK UNIFIED IDEOGRAPH
+ {0x9C8D, 0x6E47}, //5207 #CJK UNIFIED IDEOGRAPH
+ {0x9C8E, 0x6E48}, //5208 #CJK UNIFIED IDEOGRAPH
+ {0x9C8F, 0x6E49}, //5209 #CJK UNIFIED IDEOGRAPH
+ {0x9C90, 0x6E4A}, //5210 #CJK UNIFIED IDEOGRAPH
+ {0x9C91, 0x6E4B}, //5211 #CJK UNIFIED IDEOGRAPH
+ {0x9C92, 0x6E4C}, //5212 #CJK UNIFIED IDEOGRAPH
+ {0x9C93, 0x6E4F}, //5213 #CJK UNIFIED IDEOGRAPH
+ {0x9C94, 0x6E50}, //5214 #CJK UNIFIED IDEOGRAPH
+ {0x9C95, 0x6E51}, //5215 #CJK UNIFIED IDEOGRAPH
+ {0x9C96, 0x6E52}, //5216 #CJK UNIFIED IDEOGRAPH
+ {0x9C97, 0x6E55}, //5217 #CJK UNIFIED IDEOGRAPH
+ {0x9C98, 0x6E57}, //5218 #CJK UNIFIED IDEOGRAPH
+ {0x9C99, 0x6E59}, //5219 #CJK UNIFIED IDEOGRAPH
+ {0x9C9A, 0x6E5A}, //5220 #CJK UNIFIED IDEOGRAPH
+ {0x9C9B, 0x6E5C}, //5221 #CJK UNIFIED IDEOGRAPH
+ {0x9C9C, 0x6E5D}, //5222 #CJK UNIFIED IDEOGRAPH
+ {0x9C9D, 0x6E5E}, //5223 #CJK UNIFIED IDEOGRAPH
+ {0x9C9E, 0x6E60}, //5224 #CJK UNIFIED IDEOGRAPH
+ {0x9C9F, 0x6E61}, //5225 #CJK UNIFIED IDEOGRAPH
+ {0x9CA0, 0x6E62}, //5226 #CJK UNIFIED IDEOGRAPH
+ {0x9CA1, 0x6E63}, //5227 #CJK UNIFIED IDEOGRAPH
+ {0x9CA2, 0x6E64}, //5228 #CJK UNIFIED IDEOGRAPH
+ {0x9CA3, 0x6E65}, //5229 #CJK UNIFIED IDEOGRAPH
+ {0x9CA4, 0x6E66}, //5230 #CJK UNIFIED IDEOGRAPH
+ {0x9CA5, 0x6E67}, //5231 #CJK UNIFIED IDEOGRAPH
+ {0x9CA6, 0x6E68}, //5232 #CJK UNIFIED IDEOGRAPH
+ {0x9CA7, 0x6E69}, //5233 #CJK UNIFIED IDEOGRAPH
+ {0x9CA8, 0x6E6A}, //5234 #CJK UNIFIED IDEOGRAPH
+ {0x9CA9, 0x6E6C}, //5235 #CJK UNIFIED IDEOGRAPH
+ {0x9CAA, 0x6E6D}, //5236 #CJK UNIFIED IDEOGRAPH
+ {0x9CAB, 0x6E6F}, //5237 #CJK UNIFIED IDEOGRAPH
+ {0x9CAC, 0x6E70}, //5238 #CJK UNIFIED IDEOGRAPH
+ {0x9CAD, 0x6E71}, //5239 #CJK UNIFIED IDEOGRAPH
+ {0x9CAE, 0x6E72}, //5240 #CJK UNIFIED IDEOGRAPH
+ {0x9CAF, 0x6E73}, //5241 #CJK UNIFIED IDEOGRAPH
+ {0x9CB0, 0x6E74}, //5242 #CJK UNIFIED IDEOGRAPH
+ {0x9CB1, 0x6E75}, //5243 #CJK UNIFIED IDEOGRAPH
+ {0x9CB2, 0x6E76}, //5244 #CJK UNIFIED IDEOGRAPH
+ {0x9CB3, 0x6E77}, //5245 #CJK UNIFIED IDEOGRAPH
+ {0x9CB4, 0x6E78}, //5246 #CJK UNIFIED IDEOGRAPH
+ {0x9CB5, 0x6E79}, //5247 #CJK UNIFIED IDEOGRAPH
+ {0x9CB6, 0x6E7A}, //5248 #CJK UNIFIED IDEOGRAPH
+ {0x9CB7, 0x6E7B}, //5249 #CJK UNIFIED IDEOGRAPH
+ {0x9CB8, 0x6E7C}, //5250 #CJK UNIFIED IDEOGRAPH
+ {0x9CB9, 0x6E7D}, //5251 #CJK UNIFIED IDEOGRAPH
+ {0x9CBA, 0x6E80}, //5252 #CJK UNIFIED IDEOGRAPH
+ {0x9CBB, 0x6E81}, //5253 #CJK UNIFIED IDEOGRAPH
+ {0x9CBC, 0x6E82}, //5254 #CJK UNIFIED IDEOGRAPH
+ {0x9CBD, 0x6E84}, //5255 #CJK UNIFIED IDEOGRAPH
+ {0x9CBE, 0x6E87}, //5256 #CJK UNIFIED IDEOGRAPH
+ {0x9CBF, 0x6E88}, //5257 #CJK UNIFIED IDEOGRAPH
+ {0x9CC0, 0x6E8A}, //5258 #CJK UNIFIED IDEOGRAPH
+ {0x9CC1, 0x6E8B}, //5259 #CJK UNIFIED IDEOGRAPH
+ {0x9CC2, 0x6E8C}, //5260 #CJK UNIFIED IDEOGRAPH
+ {0x9CC3, 0x6E8D}, //5261 #CJK UNIFIED IDEOGRAPH
+ {0x9CC4, 0x6E8E}, //5262 #CJK UNIFIED IDEOGRAPH
+ {0x9CC5, 0x6E91}, //5263 #CJK UNIFIED IDEOGRAPH
+ {0x9CC6, 0x6E92}, //5264 #CJK UNIFIED IDEOGRAPH
+ {0x9CC7, 0x6E93}, //5265 #CJK UNIFIED IDEOGRAPH
+ {0x9CC8, 0x6E94}, //5266 #CJK UNIFIED IDEOGRAPH
+ {0x9CC9, 0x6E95}, //5267 #CJK UNIFIED IDEOGRAPH
+ {0x9CCA, 0x6E96}, //5268 #CJK UNIFIED IDEOGRAPH
+ {0x9CCB, 0x6E97}, //5269 #CJK UNIFIED IDEOGRAPH
+ {0x9CCC, 0x6E99}, //5270 #CJK UNIFIED IDEOGRAPH
+ {0x9CCD, 0x6E9A}, //5271 #CJK UNIFIED IDEOGRAPH
+ {0x9CCE, 0x6E9B}, //5272 #CJK UNIFIED IDEOGRAPH
+ {0x9CCF, 0x6E9D}, //5273 #CJK UNIFIED IDEOGRAPH
+ {0x9CD0, 0x6E9E}, //5274 #CJK UNIFIED IDEOGRAPH
+ {0x9CD1, 0x6EA0}, //5275 #CJK UNIFIED IDEOGRAPH
+ {0x9CD2, 0x6EA1}, //5276 #CJK UNIFIED IDEOGRAPH
+ {0x9CD3, 0x6EA3}, //5277 #CJK UNIFIED IDEOGRAPH
+ {0x9CD4, 0x6EA4}, //5278 #CJK UNIFIED IDEOGRAPH
+ {0x9CD5, 0x6EA6}, //5279 #CJK UNIFIED IDEOGRAPH
+ {0x9CD6, 0x6EA8}, //5280 #CJK UNIFIED IDEOGRAPH
+ {0x9CD7, 0x6EA9}, //5281 #CJK UNIFIED IDEOGRAPH
+ {0x9CD8, 0x6EAB}, //5282 #CJK UNIFIED IDEOGRAPH
+ {0x9CD9, 0x6EAC}, //5283 #CJK UNIFIED IDEOGRAPH
+ {0x9CDA, 0x6EAD}, //5284 #CJK UNIFIED IDEOGRAPH
+ {0x9CDB, 0x6EAE}, //5285 #CJK UNIFIED IDEOGRAPH
+ {0x9CDC, 0x6EB0}, //5286 #CJK UNIFIED IDEOGRAPH
+ {0x9CDD, 0x6EB3}, //5287 #CJK UNIFIED IDEOGRAPH
+ {0x9CDE, 0x6EB5}, //5288 #CJK UNIFIED IDEOGRAPH
+ {0x9CDF, 0x6EB8}, //5289 #CJK UNIFIED IDEOGRAPH
+ {0x9CE0, 0x6EB9}, //5290 #CJK UNIFIED IDEOGRAPH
+ {0x9CE1, 0x6EBC}, //5291 #CJK UNIFIED IDEOGRAPH
+ {0x9CE2, 0x6EBE}, //5292 #CJK UNIFIED IDEOGRAPH
+ {0x9CE3, 0x6EBF}, //5293 #CJK UNIFIED IDEOGRAPH
+ {0x9CE4, 0x6EC0}, //5294 #CJK UNIFIED IDEOGRAPH
+ {0x9CE5, 0x6EC3}, //5295 #CJK UNIFIED IDEOGRAPH
+ {0x9CE6, 0x6EC4}, //5296 #CJK UNIFIED IDEOGRAPH
+ {0x9CE7, 0x6EC5}, //5297 #CJK UNIFIED IDEOGRAPH
+ {0x9CE8, 0x6EC6}, //5298 #CJK UNIFIED IDEOGRAPH
+ {0x9CE9, 0x6EC8}, //5299 #CJK UNIFIED IDEOGRAPH
+ {0x9CEA, 0x6EC9}, //5300 #CJK UNIFIED IDEOGRAPH
+ {0x9CEB, 0x6ECA}, //5301 #CJK UNIFIED IDEOGRAPH
+ {0x9CEC, 0x6ECC}, //5302 #CJK UNIFIED IDEOGRAPH
+ {0x9CED, 0x6ECD}, //5303 #CJK UNIFIED IDEOGRAPH
+ {0x9CEE, 0x6ECE}, //5304 #CJK UNIFIED IDEOGRAPH
+ {0x9CEF, 0x6ED0}, //5305 #CJK UNIFIED IDEOGRAPH
+ {0x9CF0, 0x6ED2}, //5306 #CJK UNIFIED IDEOGRAPH
+ {0x9CF1, 0x6ED6}, //5307 #CJK UNIFIED IDEOGRAPH
+ {0x9CF2, 0x6ED8}, //5308 #CJK UNIFIED IDEOGRAPH
+ {0x9CF3, 0x6ED9}, //5309 #CJK UNIFIED IDEOGRAPH
+ {0x9CF4, 0x6EDB}, //5310 #CJK UNIFIED IDEOGRAPH
+ {0x9CF5, 0x6EDC}, //5311 #CJK UNIFIED IDEOGRAPH
+ {0x9CF6, 0x6EDD}, //5312 #CJK UNIFIED IDEOGRAPH
+ {0x9CF7, 0x6EE3}, //5313 #CJK UNIFIED IDEOGRAPH
+ {0x9CF8, 0x6EE7}, //5314 #CJK UNIFIED IDEOGRAPH
+ {0x9CF9, 0x6EEA}, //5315 #CJK UNIFIED IDEOGRAPH
+ {0x9CFA, 0x6EEB}, //5316 #CJK UNIFIED IDEOGRAPH
+ {0x9CFB, 0x6EEC}, //5317 #CJK UNIFIED IDEOGRAPH
+ {0x9CFC, 0x6EED}, //5318 #CJK UNIFIED IDEOGRAPH
+ {0x9CFD, 0x6EEE}, //5319 #CJK UNIFIED IDEOGRAPH
+ {0x9CFE, 0x6EEF}, //5320 #CJK UNIFIED IDEOGRAPH
+ {0x9D40, 0x6EF0}, //5321 #CJK UNIFIED IDEOGRAPH
+ {0x9D41, 0x6EF1}, //5322 #CJK UNIFIED IDEOGRAPH
+ {0x9D42, 0x6EF2}, //5323 #CJK UNIFIED IDEOGRAPH
+ {0x9D43, 0x6EF3}, //5324 #CJK UNIFIED IDEOGRAPH
+ {0x9D44, 0x6EF5}, //5325 #CJK UNIFIED IDEOGRAPH
+ {0x9D45, 0x6EF6}, //5326 #CJK UNIFIED IDEOGRAPH
+ {0x9D46, 0x6EF7}, //5327 #CJK UNIFIED IDEOGRAPH
+ {0x9D47, 0x6EF8}, //5328 #CJK UNIFIED IDEOGRAPH
+ {0x9D48, 0x6EFA}, //5329 #CJK UNIFIED IDEOGRAPH
+ {0x9D49, 0x6EFB}, //5330 #CJK UNIFIED IDEOGRAPH
+ {0x9D4A, 0x6EFC}, //5331 #CJK UNIFIED IDEOGRAPH
+ {0x9D4B, 0x6EFD}, //5332 #CJK UNIFIED IDEOGRAPH
+ {0x9D4C, 0x6EFE}, //5333 #CJK UNIFIED IDEOGRAPH
+ {0x9D4D, 0x6EFF}, //5334 #CJK UNIFIED IDEOGRAPH
+ {0x9D4E, 0x6F00}, //5335 #CJK UNIFIED IDEOGRAPH
+ {0x9D4F, 0x6F01}, //5336 #CJK UNIFIED IDEOGRAPH
+ {0x9D50, 0x6F03}, //5337 #CJK UNIFIED IDEOGRAPH
+ {0x9D51, 0x6F04}, //5338 #CJK UNIFIED IDEOGRAPH
+ {0x9D52, 0x6F05}, //5339 #CJK UNIFIED IDEOGRAPH
+ {0x9D53, 0x6F07}, //5340 #CJK UNIFIED IDEOGRAPH
+ {0x9D54, 0x6F08}, //5341 #CJK UNIFIED IDEOGRAPH
+ {0x9D55, 0x6F0A}, //5342 #CJK UNIFIED IDEOGRAPH
+ {0x9D56, 0x6F0B}, //5343 #CJK UNIFIED IDEOGRAPH
+ {0x9D57, 0x6F0C}, //5344 #CJK UNIFIED IDEOGRAPH
+ {0x9D58, 0x6F0D}, //5345 #CJK UNIFIED IDEOGRAPH
+ {0x9D59, 0x6F0E}, //5346 #CJK UNIFIED IDEOGRAPH
+ {0x9D5A, 0x6F10}, //5347 #CJK UNIFIED IDEOGRAPH
+ {0x9D5B, 0x6F11}, //5348 #CJK UNIFIED IDEOGRAPH
+ {0x9D5C, 0x6F12}, //5349 #CJK UNIFIED IDEOGRAPH
+ {0x9D5D, 0x6F16}, //5350 #CJK UNIFIED IDEOGRAPH
+ {0x9D5E, 0x6F17}, //5351 #CJK UNIFIED IDEOGRAPH
+ {0x9D5F, 0x6F18}, //5352 #CJK UNIFIED IDEOGRAPH
+ {0x9D60, 0x6F19}, //5353 #CJK UNIFIED IDEOGRAPH
+ {0x9D61, 0x6F1A}, //5354 #CJK UNIFIED IDEOGRAPH
+ {0x9D62, 0x6F1B}, //5355 #CJK UNIFIED IDEOGRAPH
+ {0x9D63, 0x6F1C}, //5356 #CJK UNIFIED IDEOGRAPH
+ {0x9D64, 0x6F1D}, //5357 #CJK UNIFIED IDEOGRAPH
+ {0x9D65, 0x6F1E}, //5358 #CJK UNIFIED IDEOGRAPH
+ {0x9D66, 0x6F1F}, //5359 #CJK UNIFIED IDEOGRAPH
+ {0x9D67, 0x6F21}, //5360 #CJK UNIFIED IDEOGRAPH
+ {0x9D68, 0x6F22}, //5361 #CJK UNIFIED IDEOGRAPH
+ {0x9D69, 0x6F23}, //5362 #CJK UNIFIED IDEOGRAPH
+ {0x9D6A, 0x6F25}, //5363 #CJK UNIFIED IDEOGRAPH
+ {0x9D6B, 0x6F26}, //5364 #CJK UNIFIED IDEOGRAPH
+ {0x9D6C, 0x6F27}, //5365 #CJK UNIFIED IDEOGRAPH
+ {0x9D6D, 0x6F28}, //5366 #CJK UNIFIED IDEOGRAPH
+ {0x9D6E, 0x6F2C}, //5367 #CJK UNIFIED IDEOGRAPH
+ {0x9D6F, 0x6F2E}, //5368 #CJK UNIFIED IDEOGRAPH
+ {0x9D70, 0x6F30}, //5369 #CJK UNIFIED IDEOGRAPH
+ {0x9D71, 0x6F32}, //5370 #CJK UNIFIED IDEOGRAPH
+ {0x9D72, 0x6F34}, //5371 #CJK UNIFIED IDEOGRAPH
+ {0x9D73, 0x6F35}, //5372 #CJK UNIFIED IDEOGRAPH
+ {0x9D74, 0x6F37}, //5373 #CJK UNIFIED IDEOGRAPH
+ {0x9D75, 0x6F38}, //5374 #CJK UNIFIED IDEOGRAPH
+ {0x9D76, 0x6F39}, //5375 #CJK UNIFIED IDEOGRAPH
+ {0x9D77, 0x6F3A}, //5376 #CJK UNIFIED IDEOGRAPH
+ {0x9D78, 0x6F3B}, //5377 #CJK UNIFIED IDEOGRAPH
+ {0x9D79, 0x6F3C}, //5378 #CJK UNIFIED IDEOGRAPH
+ {0x9D7A, 0x6F3D}, //5379 #CJK UNIFIED IDEOGRAPH
+ {0x9D7B, 0x6F3F}, //5380 #CJK UNIFIED IDEOGRAPH
+ {0x9D7C, 0x6F40}, //5381 #CJK UNIFIED IDEOGRAPH
+ {0x9D7D, 0x6F41}, //5382 #CJK UNIFIED IDEOGRAPH
+ {0x9D7E, 0x6F42}, //5383 #CJK UNIFIED IDEOGRAPH
+ {0x9D80, 0x6F43}, //5384 #CJK UNIFIED IDEOGRAPH
+ {0x9D81, 0x6F44}, //5385 #CJK UNIFIED IDEOGRAPH
+ {0x9D82, 0x6F45}, //5386 #CJK UNIFIED IDEOGRAPH
+ {0x9D83, 0x6F48}, //5387 #CJK UNIFIED IDEOGRAPH
+ {0x9D84, 0x6F49}, //5388 #CJK UNIFIED IDEOGRAPH
+ {0x9D85, 0x6F4A}, //5389 #CJK UNIFIED IDEOGRAPH
+ {0x9D86, 0x6F4C}, //5390 #CJK UNIFIED IDEOGRAPH
+ {0x9D87, 0x6F4E}, //5391 #CJK UNIFIED IDEOGRAPH
+ {0x9D88, 0x6F4F}, //5392 #CJK UNIFIED IDEOGRAPH
+ {0x9D89, 0x6F50}, //5393 #CJK UNIFIED IDEOGRAPH
+ {0x9D8A, 0x6F51}, //5394 #CJK UNIFIED IDEOGRAPH
+ {0x9D8B, 0x6F52}, //5395 #CJK UNIFIED IDEOGRAPH
+ {0x9D8C, 0x6F53}, //5396 #CJK UNIFIED IDEOGRAPH
+ {0x9D8D, 0x6F54}, //5397 #CJK UNIFIED IDEOGRAPH
+ {0x9D8E, 0x6F55}, //5398 #CJK UNIFIED IDEOGRAPH
+ {0x9D8F, 0x6F56}, //5399 #CJK UNIFIED IDEOGRAPH
+ {0x9D90, 0x6F57}, //5400 #CJK UNIFIED IDEOGRAPH
+ {0x9D91, 0x6F59}, //5401 #CJK UNIFIED IDEOGRAPH
+ {0x9D92, 0x6F5A}, //5402 #CJK UNIFIED IDEOGRAPH
+ {0x9D93, 0x6F5B}, //5403 #CJK UNIFIED IDEOGRAPH
+ {0x9D94, 0x6F5D}, //5404 #CJK UNIFIED IDEOGRAPH
+ {0x9D95, 0x6F5F}, //5405 #CJK UNIFIED IDEOGRAPH
+ {0x9D96, 0x6F60}, //5406 #CJK UNIFIED IDEOGRAPH
+ {0x9D97, 0x6F61}, //5407 #CJK UNIFIED IDEOGRAPH
+ {0x9D98, 0x6F63}, //5408 #CJK UNIFIED IDEOGRAPH
+ {0x9D99, 0x6F64}, //5409 #CJK UNIFIED IDEOGRAPH
+ {0x9D9A, 0x6F65}, //5410 #CJK UNIFIED IDEOGRAPH
+ {0x9D9B, 0x6F67}, //5411 #CJK UNIFIED IDEOGRAPH
+ {0x9D9C, 0x6F68}, //5412 #CJK UNIFIED IDEOGRAPH
+ {0x9D9D, 0x6F69}, //5413 #CJK UNIFIED IDEOGRAPH
+ {0x9D9E, 0x6F6A}, //5414 #CJK UNIFIED IDEOGRAPH
+ {0x9D9F, 0x6F6B}, //5415 #CJK UNIFIED IDEOGRAPH
+ {0x9DA0, 0x6F6C}, //5416 #CJK UNIFIED IDEOGRAPH
+ {0x9DA1, 0x6F6F}, //5417 #CJK UNIFIED IDEOGRAPH
+ {0x9DA2, 0x6F70}, //5418 #CJK UNIFIED IDEOGRAPH
+ {0x9DA3, 0x6F71}, //5419 #CJK UNIFIED IDEOGRAPH
+ {0x9DA4, 0x6F73}, //5420 #CJK UNIFIED IDEOGRAPH
+ {0x9DA5, 0x6F75}, //5421 #CJK UNIFIED IDEOGRAPH
+ {0x9DA6, 0x6F76}, //5422 #CJK UNIFIED IDEOGRAPH
+ {0x9DA7, 0x6F77}, //5423 #CJK UNIFIED IDEOGRAPH
+ {0x9DA8, 0x6F79}, //5424 #CJK UNIFIED IDEOGRAPH
+ {0x9DA9, 0x6F7B}, //5425 #CJK UNIFIED IDEOGRAPH
+ {0x9DAA, 0x6F7D}, //5426 #CJK UNIFIED IDEOGRAPH
+ {0x9DAB, 0x6F7E}, //5427 #CJK UNIFIED IDEOGRAPH
+ {0x9DAC, 0x6F7F}, //5428 #CJK UNIFIED IDEOGRAPH
+ {0x9DAD, 0x6F80}, //5429 #CJK UNIFIED IDEOGRAPH
+ {0x9DAE, 0x6F81}, //5430 #CJK UNIFIED IDEOGRAPH
+ {0x9DAF, 0x6F82}, //5431 #CJK UNIFIED IDEOGRAPH
+ {0x9DB0, 0x6F83}, //5432 #CJK UNIFIED IDEOGRAPH
+ {0x9DB1, 0x6F85}, //5433 #CJK UNIFIED IDEOGRAPH
+ {0x9DB2, 0x6F86}, //5434 #CJK UNIFIED IDEOGRAPH
+ {0x9DB3, 0x6F87}, //5435 #CJK UNIFIED IDEOGRAPH
+ {0x9DB4, 0x6F8A}, //5436 #CJK UNIFIED IDEOGRAPH
+ {0x9DB5, 0x6F8B}, //5437 #CJK UNIFIED IDEOGRAPH
+ {0x9DB6, 0x6F8F}, //5438 #CJK UNIFIED IDEOGRAPH
+ {0x9DB7, 0x6F90}, //5439 #CJK UNIFIED IDEOGRAPH
+ {0x9DB8, 0x6F91}, //5440 #CJK UNIFIED IDEOGRAPH
+ {0x9DB9, 0x6F92}, //5441 #CJK UNIFIED IDEOGRAPH
+ {0x9DBA, 0x6F93}, //5442 #CJK UNIFIED IDEOGRAPH
+ {0x9DBB, 0x6F94}, //5443 #CJK UNIFIED IDEOGRAPH
+ {0x9DBC, 0x6F95}, //5444 #CJK UNIFIED IDEOGRAPH
+ {0x9DBD, 0x6F96}, //5445 #CJK UNIFIED IDEOGRAPH
+ {0x9DBE, 0x6F97}, //5446 #CJK UNIFIED IDEOGRAPH
+ {0x9DBF, 0x6F98}, //5447 #CJK UNIFIED IDEOGRAPH
+ {0x9DC0, 0x6F99}, //5448 #CJK UNIFIED IDEOGRAPH
+ {0x9DC1, 0x6F9A}, //5449 #CJK UNIFIED IDEOGRAPH
+ {0x9DC2, 0x6F9B}, //5450 #CJK UNIFIED IDEOGRAPH
+ {0x9DC3, 0x6F9D}, //5451 #CJK UNIFIED IDEOGRAPH
+ {0x9DC4, 0x6F9E}, //5452 #CJK UNIFIED IDEOGRAPH
+ {0x9DC5, 0x6F9F}, //5453 #CJK UNIFIED IDEOGRAPH
+ {0x9DC6, 0x6FA0}, //5454 #CJK UNIFIED IDEOGRAPH
+ {0x9DC7, 0x6FA2}, //5455 #CJK UNIFIED IDEOGRAPH
+ {0x9DC8, 0x6FA3}, //5456 #CJK UNIFIED IDEOGRAPH
+ {0x9DC9, 0x6FA4}, //5457 #CJK UNIFIED IDEOGRAPH
+ {0x9DCA, 0x6FA5}, //5458 #CJK UNIFIED IDEOGRAPH
+ {0x9DCB, 0x6FA6}, //5459 #CJK UNIFIED IDEOGRAPH
+ {0x9DCC, 0x6FA8}, //5460 #CJK UNIFIED IDEOGRAPH
+ {0x9DCD, 0x6FA9}, //5461 #CJK UNIFIED IDEOGRAPH
+ {0x9DCE, 0x6FAA}, //5462 #CJK UNIFIED IDEOGRAPH
+ {0x9DCF, 0x6FAB}, //5463 #CJK UNIFIED IDEOGRAPH
+ {0x9DD0, 0x6FAC}, //5464 #CJK UNIFIED IDEOGRAPH
+ {0x9DD1, 0x6FAD}, //5465 #CJK UNIFIED IDEOGRAPH
+ {0x9DD2, 0x6FAE}, //5466 #CJK UNIFIED IDEOGRAPH
+ {0x9DD3, 0x6FAF}, //5467 #CJK UNIFIED IDEOGRAPH
+ {0x9DD4, 0x6FB0}, //5468 #CJK UNIFIED IDEOGRAPH
+ {0x9DD5, 0x6FB1}, //5469 #CJK UNIFIED IDEOGRAPH
+ {0x9DD6, 0x6FB2}, //5470 #CJK UNIFIED IDEOGRAPH
+ {0x9DD7, 0x6FB4}, //5471 #CJK UNIFIED IDEOGRAPH
+ {0x9DD8, 0x6FB5}, //5472 #CJK UNIFIED IDEOGRAPH
+ {0x9DD9, 0x6FB7}, //5473 #CJK UNIFIED IDEOGRAPH
+ {0x9DDA, 0x6FB8}, //5474 #CJK UNIFIED IDEOGRAPH
+ {0x9DDB, 0x6FBA}, //5475 #CJK UNIFIED IDEOGRAPH
+ {0x9DDC, 0x6FBB}, //5476 #CJK UNIFIED IDEOGRAPH
+ {0x9DDD, 0x6FBC}, //5477 #CJK UNIFIED IDEOGRAPH
+ {0x9DDE, 0x6FBD}, //5478 #CJK UNIFIED IDEOGRAPH
+ {0x9DDF, 0x6FBE}, //5479 #CJK UNIFIED IDEOGRAPH
+ {0x9DE0, 0x6FBF}, //5480 #CJK UNIFIED IDEOGRAPH
+ {0x9DE1, 0x6FC1}, //5481 #CJK UNIFIED IDEOGRAPH
+ {0x9DE2, 0x6FC3}, //5482 #CJK UNIFIED IDEOGRAPH
+ {0x9DE3, 0x6FC4}, //5483 #CJK UNIFIED IDEOGRAPH
+ {0x9DE4, 0x6FC5}, //5484 #CJK UNIFIED IDEOGRAPH
+ {0x9DE5, 0x6FC6}, //5485 #CJK UNIFIED IDEOGRAPH
+ {0x9DE6, 0x6FC7}, //5486 #CJK UNIFIED IDEOGRAPH
+ {0x9DE7, 0x6FC8}, //5487 #CJK UNIFIED IDEOGRAPH
+ {0x9DE8, 0x6FCA}, //5488 #CJK UNIFIED IDEOGRAPH
+ {0x9DE9, 0x6FCB}, //5489 #CJK UNIFIED IDEOGRAPH
+ {0x9DEA, 0x6FCC}, //5490 #CJK UNIFIED IDEOGRAPH
+ {0x9DEB, 0x6FCD}, //5491 #CJK UNIFIED IDEOGRAPH
+ {0x9DEC, 0x6FCE}, //5492 #CJK UNIFIED IDEOGRAPH
+ {0x9DED, 0x6FCF}, //5493 #CJK UNIFIED IDEOGRAPH
+ {0x9DEE, 0x6FD0}, //5494 #CJK UNIFIED IDEOGRAPH
+ {0x9DEF, 0x6FD3}, //5495 #CJK UNIFIED IDEOGRAPH
+ {0x9DF0, 0x6FD4}, //5496 #CJK UNIFIED IDEOGRAPH
+ {0x9DF1, 0x6FD5}, //5497 #CJK UNIFIED IDEOGRAPH
+ {0x9DF2, 0x6FD6}, //5498 #CJK UNIFIED IDEOGRAPH
+ {0x9DF3, 0x6FD7}, //5499 #CJK UNIFIED IDEOGRAPH
+ {0x9DF4, 0x6FD8}, //5500 #CJK UNIFIED IDEOGRAPH
+ {0x9DF5, 0x6FD9}, //5501 #CJK UNIFIED IDEOGRAPH
+ {0x9DF6, 0x6FDA}, //5502 #CJK UNIFIED IDEOGRAPH
+ {0x9DF7, 0x6FDB}, //5503 #CJK UNIFIED IDEOGRAPH
+ {0x9DF8, 0x6FDC}, //5504 #CJK UNIFIED IDEOGRAPH
+ {0x9DF9, 0x6FDD}, //5505 #CJK UNIFIED IDEOGRAPH
+ {0x9DFA, 0x6FDF}, //5506 #CJK UNIFIED IDEOGRAPH
+ {0x9DFB, 0x6FE2}, //5507 #CJK UNIFIED IDEOGRAPH
+ {0x9DFC, 0x6FE3}, //5508 #CJK UNIFIED IDEOGRAPH
+ {0x9DFD, 0x6FE4}, //5509 #CJK UNIFIED IDEOGRAPH
+ {0x9DFE, 0x6FE5}, //5510 #CJK UNIFIED IDEOGRAPH
+ {0x9E40, 0x6FE6}, //5511 #CJK UNIFIED IDEOGRAPH
+ {0x9E41, 0x6FE7}, //5512 #CJK UNIFIED IDEOGRAPH
+ {0x9E42, 0x6FE8}, //5513 #CJK UNIFIED IDEOGRAPH
+ {0x9E43, 0x6FE9}, //5514 #CJK UNIFIED IDEOGRAPH
+ {0x9E44, 0x6FEA}, //5515 #CJK UNIFIED IDEOGRAPH
+ {0x9E45, 0x6FEB}, //5516 #CJK UNIFIED IDEOGRAPH
+ {0x9E46, 0x6FEC}, //5517 #CJK UNIFIED IDEOGRAPH
+ {0x9E47, 0x6FED}, //5518 #CJK UNIFIED IDEOGRAPH
+ {0x9E48, 0x6FF0}, //5519 #CJK UNIFIED IDEOGRAPH
+ {0x9E49, 0x6FF1}, //5520 #CJK UNIFIED IDEOGRAPH
+ {0x9E4A, 0x6FF2}, //5521 #CJK UNIFIED IDEOGRAPH
+ {0x9E4B, 0x6FF3}, //5522 #CJK UNIFIED IDEOGRAPH
+ {0x9E4C, 0x6FF4}, //5523 #CJK UNIFIED IDEOGRAPH
+ {0x9E4D, 0x6FF5}, //5524 #CJK UNIFIED IDEOGRAPH
+ {0x9E4E, 0x6FF6}, //5525 #CJK UNIFIED IDEOGRAPH
+ {0x9E4F, 0x6FF7}, //5526 #CJK UNIFIED IDEOGRAPH
+ {0x9E50, 0x6FF8}, //5527 #CJK UNIFIED IDEOGRAPH
+ {0x9E51, 0x6FF9}, //5528 #CJK UNIFIED IDEOGRAPH
+ {0x9E52, 0x6FFA}, //5529 #CJK UNIFIED IDEOGRAPH
+ {0x9E53, 0x6FFB}, //5530 #CJK UNIFIED IDEOGRAPH
+ {0x9E54, 0x6FFC}, //5531 #CJK UNIFIED IDEOGRAPH
+ {0x9E55, 0x6FFD}, //5532 #CJK UNIFIED IDEOGRAPH
+ {0x9E56, 0x6FFE}, //5533 #CJK UNIFIED IDEOGRAPH
+ {0x9E57, 0x6FFF}, //5534 #CJK UNIFIED IDEOGRAPH
+ {0x9E58, 0x7000}, //5535 #CJK UNIFIED IDEOGRAPH
+ {0x9E59, 0x7001}, //5536 #CJK UNIFIED IDEOGRAPH
+ {0x9E5A, 0x7002}, //5537 #CJK UNIFIED IDEOGRAPH
+ {0x9E5B, 0x7003}, //5538 #CJK UNIFIED IDEOGRAPH
+ {0x9E5C, 0x7004}, //5539 #CJK UNIFIED IDEOGRAPH
+ {0x9E5D, 0x7005}, //5540 #CJK UNIFIED IDEOGRAPH
+ {0x9E5E, 0x7006}, //5541 #CJK UNIFIED IDEOGRAPH
+ {0x9E5F, 0x7007}, //5542 #CJK UNIFIED IDEOGRAPH
+ {0x9E60, 0x7008}, //5543 #CJK UNIFIED IDEOGRAPH
+ {0x9E61, 0x7009}, //5544 #CJK UNIFIED IDEOGRAPH
+ {0x9E62, 0x700A}, //5545 #CJK UNIFIED IDEOGRAPH
+ {0x9E63, 0x700B}, //5546 #CJK UNIFIED IDEOGRAPH
+ {0x9E64, 0x700C}, //5547 #CJK UNIFIED IDEOGRAPH
+ {0x9E65, 0x700D}, //5548 #CJK UNIFIED IDEOGRAPH
+ {0x9E66, 0x700E}, //5549 #CJK UNIFIED IDEOGRAPH
+ {0x9E67, 0x700F}, //5550 #CJK UNIFIED IDEOGRAPH
+ {0x9E68, 0x7010}, //5551 #CJK UNIFIED IDEOGRAPH
+ {0x9E69, 0x7012}, //5552 #CJK UNIFIED IDEOGRAPH
+ {0x9E6A, 0x7013}, //5553 #CJK UNIFIED IDEOGRAPH
+ {0x9E6B, 0x7014}, //5554 #CJK UNIFIED IDEOGRAPH
+ {0x9E6C, 0x7015}, //5555 #CJK UNIFIED IDEOGRAPH
+ {0x9E6D, 0x7016}, //5556 #CJK UNIFIED IDEOGRAPH
+ {0x9E6E, 0x7017}, //5557 #CJK UNIFIED IDEOGRAPH
+ {0x9E6F, 0x7018}, //5558 #CJK UNIFIED IDEOGRAPH
+ {0x9E70, 0x7019}, //5559 #CJK UNIFIED IDEOGRAPH
+ {0x9E71, 0x701C}, //5560 #CJK UNIFIED IDEOGRAPH
+ {0x9E72, 0x701D}, //5561 #CJK UNIFIED IDEOGRAPH
+ {0x9E73, 0x701E}, //5562 #CJK UNIFIED IDEOGRAPH
+ {0x9E74, 0x701F}, //5563 #CJK UNIFIED IDEOGRAPH
+ {0x9E75, 0x7020}, //5564 #CJK UNIFIED IDEOGRAPH
+ {0x9E76, 0x7021}, //5565 #CJK UNIFIED IDEOGRAPH
+ {0x9E77, 0x7022}, //5566 #CJK UNIFIED IDEOGRAPH
+ {0x9E78, 0x7024}, //5567 #CJK UNIFIED IDEOGRAPH
+ {0x9E79, 0x7025}, //5568 #CJK UNIFIED IDEOGRAPH
+ {0x9E7A, 0x7026}, //5569 #CJK UNIFIED IDEOGRAPH
+ {0x9E7B, 0x7027}, //5570 #CJK UNIFIED IDEOGRAPH
+ {0x9E7C, 0x7028}, //5571 #CJK UNIFIED IDEOGRAPH
+ {0x9E7D, 0x7029}, //5572 #CJK UNIFIED IDEOGRAPH
+ {0x9E7E, 0x702A}, //5573 #CJK UNIFIED IDEOGRAPH
+ {0x9E80, 0x702B}, //5574 #CJK UNIFIED IDEOGRAPH
+ {0x9E81, 0x702C}, //5575 #CJK UNIFIED IDEOGRAPH
+ {0x9E82, 0x702D}, //5576 #CJK UNIFIED IDEOGRAPH
+ {0x9E83, 0x702E}, //5577 #CJK UNIFIED IDEOGRAPH
+ {0x9E84, 0x702F}, //5578 #CJK UNIFIED IDEOGRAPH
+ {0x9E85, 0x7030}, //5579 #CJK UNIFIED IDEOGRAPH
+ {0x9E86, 0x7031}, //5580 #CJK UNIFIED IDEOGRAPH
+ {0x9E87, 0x7032}, //5581 #CJK UNIFIED IDEOGRAPH
+ {0x9E88, 0x7033}, //5582 #CJK UNIFIED IDEOGRAPH
+ {0x9E89, 0x7034}, //5583 #CJK UNIFIED IDEOGRAPH
+ {0x9E8A, 0x7036}, //5584 #CJK UNIFIED IDEOGRAPH
+ {0x9E8B, 0x7037}, //5585 #CJK UNIFIED IDEOGRAPH
+ {0x9E8C, 0x7038}, //5586 #CJK UNIFIED IDEOGRAPH
+ {0x9E8D, 0x703A}, //5587 #CJK UNIFIED IDEOGRAPH
+ {0x9E8E, 0x703B}, //5588 #CJK UNIFIED IDEOGRAPH
+ {0x9E8F, 0x703C}, //5589 #CJK UNIFIED IDEOGRAPH
+ {0x9E90, 0x703D}, //5590 #CJK UNIFIED IDEOGRAPH
+ {0x9E91, 0x703E}, //5591 #CJK UNIFIED IDEOGRAPH
+ {0x9E92, 0x703F}, //5592 #CJK UNIFIED IDEOGRAPH
+ {0x9E93, 0x7040}, //5593 #CJK UNIFIED IDEOGRAPH
+ {0x9E94, 0x7041}, //5594 #CJK UNIFIED IDEOGRAPH
+ {0x9E95, 0x7042}, //5595 #CJK UNIFIED IDEOGRAPH
+ {0x9E96, 0x7043}, //5596 #CJK UNIFIED IDEOGRAPH
+ {0x9E97, 0x7044}, //5597 #CJK UNIFIED IDEOGRAPH
+ {0x9E98, 0x7045}, //5598 #CJK UNIFIED IDEOGRAPH
+ {0x9E99, 0x7046}, //5599 #CJK UNIFIED IDEOGRAPH
+ {0x9E9A, 0x7047}, //5600 #CJK UNIFIED IDEOGRAPH
+ {0x9E9B, 0x7048}, //5601 #CJK UNIFIED IDEOGRAPH
+ {0x9E9C, 0x7049}, //5602 #CJK UNIFIED IDEOGRAPH
+ {0x9E9D, 0x704A}, //5603 #CJK UNIFIED IDEOGRAPH
+ {0x9E9E, 0x704B}, //5604 #CJK UNIFIED IDEOGRAPH
+ {0x9E9F, 0x704D}, //5605 #CJK UNIFIED IDEOGRAPH
+ {0x9EA0, 0x704E}, //5606 #CJK UNIFIED IDEOGRAPH
+ {0x9EA1, 0x7050}, //5607 #CJK UNIFIED IDEOGRAPH
+ {0x9EA2, 0x7051}, //5608 #CJK UNIFIED IDEOGRAPH
+ {0x9EA3, 0x7052}, //5609 #CJK UNIFIED IDEOGRAPH
+ {0x9EA4, 0x7053}, //5610 #CJK UNIFIED IDEOGRAPH
+ {0x9EA5, 0x7054}, //5611 #CJK UNIFIED IDEOGRAPH
+ {0x9EA6, 0x7055}, //5612 #CJK UNIFIED IDEOGRAPH
+ {0x9EA7, 0x7056}, //5613 #CJK UNIFIED IDEOGRAPH
+ {0x9EA8, 0x7057}, //5614 #CJK UNIFIED IDEOGRAPH
+ {0x9EA9, 0x7058}, //5615 #CJK UNIFIED IDEOGRAPH
+ {0x9EAA, 0x7059}, //5616 #CJK UNIFIED IDEOGRAPH
+ {0x9EAB, 0x705A}, //5617 #CJK UNIFIED IDEOGRAPH
+ {0x9EAC, 0x705B}, //5618 #CJK UNIFIED IDEOGRAPH
+ {0x9EAD, 0x705C}, //5619 #CJK UNIFIED IDEOGRAPH
+ {0x9EAE, 0x705D}, //5620 #CJK UNIFIED IDEOGRAPH
+ {0x9EAF, 0x705F}, //5621 #CJK UNIFIED IDEOGRAPH
+ {0x9EB0, 0x7060}, //5622 #CJK UNIFIED IDEOGRAPH
+ {0x9EB1, 0x7061}, //5623 #CJK UNIFIED IDEOGRAPH
+ {0x9EB2, 0x7062}, //5624 #CJK UNIFIED IDEOGRAPH
+ {0x9EB3, 0x7063}, //5625 #CJK UNIFIED IDEOGRAPH
+ {0x9EB4, 0x7064}, //5626 #CJK UNIFIED IDEOGRAPH
+ {0x9EB5, 0x7065}, //5627 #CJK UNIFIED IDEOGRAPH
+ {0x9EB6, 0x7066}, //5628 #CJK UNIFIED IDEOGRAPH
+ {0x9EB7, 0x7067}, //5629 #CJK UNIFIED IDEOGRAPH
+ {0x9EB8, 0x7068}, //5630 #CJK UNIFIED IDEOGRAPH
+ {0x9EB9, 0x7069}, //5631 #CJK UNIFIED IDEOGRAPH
+ {0x9EBA, 0x706A}, //5632 #CJK UNIFIED IDEOGRAPH
+ {0x9EBB, 0x706E}, //5633 #CJK UNIFIED IDEOGRAPH
+ {0x9EBC, 0x7071}, //5634 #CJK UNIFIED IDEOGRAPH
+ {0x9EBD, 0x7072}, //5635 #CJK UNIFIED IDEOGRAPH
+ {0x9EBE, 0x7073}, //5636 #CJK UNIFIED IDEOGRAPH
+ {0x9EBF, 0x7074}, //5637 #CJK UNIFIED IDEOGRAPH
+ {0x9EC0, 0x7077}, //5638 #CJK UNIFIED IDEOGRAPH
+ {0x9EC1, 0x7079}, //5639 #CJK UNIFIED IDEOGRAPH
+ {0x9EC2, 0x707A}, //5640 #CJK UNIFIED IDEOGRAPH
+ {0x9EC3, 0x707B}, //5641 #CJK UNIFIED IDEOGRAPH
+ {0x9EC4, 0x707D}, //5642 #CJK UNIFIED IDEOGRAPH
+ {0x9EC5, 0x7081}, //5643 #CJK UNIFIED IDEOGRAPH
+ {0x9EC6, 0x7082}, //5644 #CJK UNIFIED IDEOGRAPH
+ {0x9EC7, 0x7083}, //5645 #CJK UNIFIED IDEOGRAPH
+ {0x9EC8, 0x7084}, //5646 #CJK UNIFIED IDEOGRAPH
+ {0x9EC9, 0x7086}, //5647 #CJK UNIFIED IDEOGRAPH
+ {0x9ECA, 0x7087}, //5648 #CJK UNIFIED IDEOGRAPH
+ {0x9ECB, 0x7088}, //5649 #CJK UNIFIED IDEOGRAPH
+ {0x9ECC, 0x708B}, //5650 #CJK UNIFIED IDEOGRAPH
+ {0x9ECD, 0x708C}, //5651 #CJK UNIFIED IDEOGRAPH
+ {0x9ECE, 0x708D}, //5652 #CJK UNIFIED IDEOGRAPH
+ {0x9ECF, 0x708F}, //5653 #CJK UNIFIED IDEOGRAPH
+ {0x9ED0, 0x7090}, //5654 #CJK UNIFIED IDEOGRAPH
+ {0x9ED1, 0x7091}, //5655 #CJK UNIFIED IDEOGRAPH
+ {0x9ED2, 0x7093}, //5656 #CJK UNIFIED IDEOGRAPH
+ {0x9ED3, 0x7097}, //5657 #CJK UNIFIED IDEOGRAPH
+ {0x9ED4, 0x7098}, //5658 #CJK UNIFIED IDEOGRAPH
+ {0x9ED5, 0x709A}, //5659 #CJK UNIFIED IDEOGRAPH
+ {0x9ED6, 0x709B}, //5660 #CJK UNIFIED IDEOGRAPH
+ {0x9ED7, 0x709E}, //5661 #CJK UNIFIED IDEOGRAPH
+ {0x9ED8, 0x709F}, //5662 #CJK UNIFIED IDEOGRAPH
+ {0x9ED9, 0x70A0}, //5663 #CJK UNIFIED IDEOGRAPH
+ {0x9EDA, 0x70A1}, //5664 #CJK UNIFIED IDEOGRAPH
+ {0x9EDB, 0x70A2}, //5665 #CJK UNIFIED IDEOGRAPH
+ {0x9EDC, 0x70A3}, //5666 #CJK UNIFIED IDEOGRAPH
+ {0x9EDD, 0x70A4}, //5667 #CJK UNIFIED IDEOGRAPH
+ {0x9EDE, 0x70A5}, //5668 #CJK UNIFIED IDEOGRAPH
+ {0x9EDF, 0x70A6}, //5669 #CJK UNIFIED IDEOGRAPH
+ {0x9EE0, 0x70A7}, //5670 #CJK UNIFIED IDEOGRAPH
+ {0x9EE1, 0x70A8}, //5671 #CJK UNIFIED IDEOGRAPH
+ {0x9EE2, 0x70A9}, //5672 #CJK UNIFIED IDEOGRAPH
+ {0x9EE3, 0x70AA}, //5673 #CJK UNIFIED IDEOGRAPH
+ {0x9EE4, 0x70B0}, //5674 #CJK UNIFIED IDEOGRAPH
+ {0x9EE5, 0x70B2}, //5675 #CJK UNIFIED IDEOGRAPH
+ {0x9EE6, 0x70B4}, //5676 #CJK UNIFIED IDEOGRAPH
+ {0x9EE7, 0x70B5}, //5677 #CJK UNIFIED IDEOGRAPH
+ {0x9EE8, 0x70B6}, //5678 #CJK UNIFIED IDEOGRAPH
+ {0x9EE9, 0x70BA}, //5679 #CJK UNIFIED IDEOGRAPH
+ {0x9EEA, 0x70BE}, //5680 #CJK UNIFIED IDEOGRAPH
+ {0x9EEB, 0x70BF}, //5681 #CJK UNIFIED IDEOGRAPH
+ {0x9EEC, 0x70C4}, //5682 #CJK UNIFIED IDEOGRAPH
+ {0x9EED, 0x70C5}, //5683 #CJK UNIFIED IDEOGRAPH
+ {0x9EEE, 0x70C6}, //5684 #CJK UNIFIED IDEOGRAPH
+ {0x9EEF, 0x70C7}, //5685 #CJK UNIFIED IDEOGRAPH
+ {0x9EF0, 0x70C9}, //5686 #CJK UNIFIED IDEOGRAPH
+ {0x9EF1, 0x70CB}, //5687 #CJK UNIFIED IDEOGRAPH
+ {0x9EF2, 0x70CC}, //5688 #CJK UNIFIED IDEOGRAPH
+ {0x9EF3, 0x70CD}, //5689 #CJK UNIFIED IDEOGRAPH
+ {0x9EF4, 0x70CE}, //5690 #CJK UNIFIED IDEOGRAPH
+ {0x9EF5, 0x70CF}, //5691 #CJK UNIFIED IDEOGRAPH
+ {0x9EF6, 0x70D0}, //5692 #CJK UNIFIED IDEOGRAPH
+ {0x9EF7, 0x70D1}, //5693 #CJK UNIFIED IDEOGRAPH
+ {0x9EF8, 0x70D2}, //5694 #CJK UNIFIED IDEOGRAPH
+ {0x9EF9, 0x70D3}, //5695 #CJK UNIFIED IDEOGRAPH
+ {0x9EFA, 0x70D4}, //5696 #CJK UNIFIED IDEOGRAPH
+ {0x9EFB, 0x70D5}, //5697 #CJK UNIFIED IDEOGRAPH
+ {0x9EFC, 0x70D6}, //5698 #CJK UNIFIED IDEOGRAPH
+ {0x9EFD, 0x70D7}, //5699 #CJK UNIFIED IDEOGRAPH
+ {0x9EFE, 0x70DA}, //5700 #CJK UNIFIED IDEOGRAPH
+ {0x9F40, 0x70DC}, //5701 #CJK UNIFIED IDEOGRAPH
+ {0x9F41, 0x70DD}, //5702 #CJK UNIFIED IDEOGRAPH
+ {0x9F42, 0x70DE}, //5703 #CJK UNIFIED IDEOGRAPH
+ {0x9F43, 0x70E0}, //5704 #CJK UNIFIED IDEOGRAPH
+ {0x9F44, 0x70E1}, //5705 #CJK UNIFIED IDEOGRAPH
+ {0x9F45, 0x70E2}, //5706 #CJK UNIFIED IDEOGRAPH
+ {0x9F46, 0x70E3}, //5707 #CJK UNIFIED IDEOGRAPH
+ {0x9F47, 0x70E5}, //5708 #CJK UNIFIED IDEOGRAPH
+ {0x9F48, 0x70EA}, //5709 #CJK UNIFIED IDEOGRAPH
+ {0x9F49, 0x70EE}, //5710 #CJK UNIFIED IDEOGRAPH
+ {0x9F4A, 0x70F0}, //5711 #CJK UNIFIED IDEOGRAPH
+ {0x9F4B, 0x70F1}, //5712 #CJK UNIFIED IDEOGRAPH
+ {0x9F4C, 0x70F2}, //5713 #CJK UNIFIED IDEOGRAPH
+ {0x9F4D, 0x70F3}, //5714 #CJK UNIFIED IDEOGRAPH
+ {0x9F4E, 0x70F4}, //5715 #CJK UNIFIED IDEOGRAPH
+ {0x9F4F, 0x70F5}, //5716 #CJK UNIFIED IDEOGRAPH
+ {0x9F50, 0x70F6}, //5717 #CJK UNIFIED IDEOGRAPH
+ {0x9F51, 0x70F8}, //5718 #CJK UNIFIED IDEOGRAPH
+ {0x9F52, 0x70FA}, //5719 #CJK UNIFIED IDEOGRAPH
+ {0x9F53, 0x70FB}, //5720 #CJK UNIFIED IDEOGRAPH
+ {0x9F54, 0x70FC}, //5721 #CJK UNIFIED IDEOGRAPH
+ {0x9F55, 0x70FE}, //5722 #CJK UNIFIED IDEOGRAPH
+ {0x9F56, 0x70FF}, //5723 #CJK UNIFIED IDEOGRAPH
+ {0x9F57, 0x7100}, //5724 #CJK UNIFIED IDEOGRAPH
+ {0x9F58, 0x7101}, //5725 #CJK UNIFIED IDEOGRAPH
+ {0x9F59, 0x7102}, //5726 #CJK UNIFIED IDEOGRAPH
+ {0x9F5A, 0x7103}, //5727 #CJK UNIFIED IDEOGRAPH
+ {0x9F5B, 0x7104}, //5728 #CJK UNIFIED IDEOGRAPH
+ {0x9F5C, 0x7105}, //5729 #CJK UNIFIED IDEOGRAPH
+ {0x9F5D, 0x7106}, //5730 #CJK UNIFIED IDEOGRAPH
+ {0x9F5E, 0x7107}, //5731 #CJK UNIFIED IDEOGRAPH
+ {0x9F5F, 0x7108}, //5732 #CJK UNIFIED IDEOGRAPH
+ {0x9F60, 0x710B}, //5733 #CJK UNIFIED IDEOGRAPH
+ {0x9F61, 0x710C}, //5734 #CJK UNIFIED IDEOGRAPH
+ {0x9F62, 0x710D}, //5735 #CJK UNIFIED IDEOGRAPH
+ {0x9F63, 0x710E}, //5736 #CJK UNIFIED IDEOGRAPH
+ {0x9F64, 0x710F}, //5737 #CJK UNIFIED IDEOGRAPH
+ {0x9F65, 0x7111}, //5738 #CJK UNIFIED IDEOGRAPH
+ {0x9F66, 0x7112}, //5739 #CJK UNIFIED IDEOGRAPH
+ {0x9F67, 0x7114}, //5740 #CJK UNIFIED IDEOGRAPH
+ {0x9F68, 0x7117}, //5741 #CJK UNIFIED IDEOGRAPH
+ {0x9F69, 0x711B}, //5742 #CJK UNIFIED IDEOGRAPH
+ {0x9F6A, 0x711C}, //5743 #CJK UNIFIED IDEOGRAPH
+ {0x9F6B, 0x711D}, //5744 #CJK UNIFIED IDEOGRAPH
+ {0x9F6C, 0x711E}, //5745 #CJK UNIFIED IDEOGRAPH
+ {0x9F6D, 0x711F}, //5746 #CJK UNIFIED IDEOGRAPH
+ {0x9F6E, 0x7120}, //5747 #CJK UNIFIED IDEOGRAPH
+ {0x9F6F, 0x7121}, //5748 #CJK UNIFIED IDEOGRAPH
+ {0x9F70, 0x7122}, //5749 #CJK UNIFIED IDEOGRAPH
+ {0x9F71, 0x7123}, //5750 #CJK UNIFIED IDEOGRAPH
+ {0x9F72, 0x7124}, //5751 #CJK UNIFIED IDEOGRAPH
+ {0x9F73, 0x7125}, //5752 #CJK UNIFIED IDEOGRAPH
+ {0x9F74, 0x7127}, //5753 #CJK UNIFIED IDEOGRAPH
+ {0x9F75, 0x7128}, //5754 #CJK UNIFIED IDEOGRAPH
+ {0x9F76, 0x7129}, //5755 #CJK UNIFIED IDEOGRAPH
+ {0x9F77, 0x712A}, //5756 #CJK UNIFIED IDEOGRAPH
+ {0x9F78, 0x712B}, //5757 #CJK UNIFIED IDEOGRAPH
+ {0x9F79, 0x712C}, //5758 #CJK UNIFIED IDEOGRAPH
+ {0x9F7A, 0x712D}, //5759 #CJK UNIFIED IDEOGRAPH
+ {0x9F7B, 0x712E}, //5760 #CJK UNIFIED IDEOGRAPH
+ {0x9F7C, 0x7132}, //5761 #CJK UNIFIED IDEOGRAPH
+ {0x9F7D, 0x7133}, //5762 #CJK UNIFIED IDEOGRAPH
+ {0x9F7E, 0x7134}, //5763 #CJK UNIFIED IDEOGRAPH
+ {0x9F80, 0x7135}, //5764 #CJK UNIFIED IDEOGRAPH
+ {0x9F81, 0x7137}, //5765 #CJK UNIFIED IDEOGRAPH
+ {0x9F82, 0x7138}, //5766 #CJK UNIFIED IDEOGRAPH
+ {0x9F83, 0x7139}, //5767 #CJK UNIFIED IDEOGRAPH
+ {0x9F84, 0x713A}, //5768 #CJK UNIFIED IDEOGRAPH
+ {0x9F85, 0x713B}, //5769 #CJK UNIFIED IDEOGRAPH
+ {0x9F86, 0x713C}, //5770 #CJK UNIFIED IDEOGRAPH
+ {0x9F87, 0x713D}, //5771 #CJK UNIFIED IDEOGRAPH
+ {0x9F88, 0x713E}, //5772 #CJK UNIFIED IDEOGRAPH
+ {0x9F89, 0x713F}, //5773 #CJK UNIFIED IDEOGRAPH
+ {0x9F8A, 0x7140}, //5774 #CJK UNIFIED IDEOGRAPH
+ {0x9F8B, 0x7141}, //5775 #CJK UNIFIED IDEOGRAPH
+ {0x9F8C, 0x7142}, //5776 #CJK UNIFIED IDEOGRAPH
+ {0x9F8D, 0x7143}, //5777 #CJK UNIFIED IDEOGRAPH
+ {0x9F8E, 0x7144}, //5778 #CJK UNIFIED IDEOGRAPH
+ {0x9F8F, 0x7146}, //5779 #CJK UNIFIED IDEOGRAPH
+ {0x9F90, 0x7147}, //5780 #CJK UNIFIED IDEOGRAPH
+ {0x9F91, 0x7148}, //5781 #CJK UNIFIED IDEOGRAPH
+ {0x9F92, 0x7149}, //5782 #CJK UNIFIED IDEOGRAPH
+ {0x9F93, 0x714B}, //5783 #CJK UNIFIED IDEOGRAPH
+ {0x9F94, 0x714D}, //5784 #CJK UNIFIED IDEOGRAPH
+ {0x9F95, 0x714F}, //5785 #CJK UNIFIED IDEOGRAPH
+ {0x9F96, 0x7150}, //5786 #CJK UNIFIED IDEOGRAPH
+ {0x9F97, 0x7151}, //5787 #CJK UNIFIED IDEOGRAPH
+ {0x9F98, 0x7152}, //5788 #CJK UNIFIED IDEOGRAPH
+ {0x9F99, 0x7153}, //5789 #CJK UNIFIED IDEOGRAPH
+ {0x9F9A, 0x7154}, //5790 #CJK UNIFIED IDEOGRAPH
+ {0x9F9B, 0x7155}, //5791 #CJK UNIFIED IDEOGRAPH
+ {0x9F9C, 0x7156}, //5792 #CJK UNIFIED IDEOGRAPH
+ {0x9F9D, 0x7157}, //5793 #CJK UNIFIED IDEOGRAPH
+ {0x9F9E, 0x7158}, //5794 #CJK UNIFIED IDEOGRAPH
+ {0x9F9F, 0x7159}, //5795 #CJK UNIFIED IDEOGRAPH
+ {0x9FA0, 0x715A}, //5796 #CJK UNIFIED IDEOGRAPH
+ {0x9FA1, 0x715B}, //5797 #CJK UNIFIED IDEOGRAPH
+ {0x9FA2, 0x715D}, //5798 #CJK UNIFIED IDEOGRAPH
+ {0x9FA3, 0x715F}, //5799 #CJK UNIFIED IDEOGRAPH
+ {0x9FA4, 0x7160}, //5800 #CJK UNIFIED IDEOGRAPH
+ {0x9FA5, 0x7161}, //5801 #CJK UNIFIED IDEOGRAPH
+ {0x9FA6, 0x7162}, //5802 #CJK UNIFIED IDEOGRAPH
+ {0x9FA7, 0x7163}, //5803 #CJK UNIFIED IDEOGRAPH
+ {0x9FA8, 0x7165}, //5804 #CJK UNIFIED IDEOGRAPH
+ {0x9FA9, 0x7169}, //5805 #CJK UNIFIED IDEOGRAPH
+ {0x9FAA, 0x716A}, //5806 #CJK UNIFIED IDEOGRAPH
+ {0x9FAB, 0x716B}, //5807 #CJK UNIFIED IDEOGRAPH
+ {0x9FAC, 0x716C}, //5808 #CJK UNIFIED IDEOGRAPH
+ {0x9FAD, 0x716D}, //5809 #CJK UNIFIED IDEOGRAPH
+ {0x9FAE, 0x716F}, //5810 #CJK UNIFIED IDEOGRAPH
+ {0x9FAF, 0x7170}, //5811 #CJK UNIFIED IDEOGRAPH
+ {0x9FB0, 0x7171}, //5812 #CJK UNIFIED IDEOGRAPH
+ {0x9FB1, 0x7174}, //5813 #CJK UNIFIED IDEOGRAPH
+ {0x9FB2, 0x7175}, //5814 #CJK UNIFIED IDEOGRAPH
+ {0x9FB3, 0x7176}, //5815 #CJK UNIFIED IDEOGRAPH
+ {0x9FB4, 0x7177}, //5816 #CJK UNIFIED IDEOGRAPH
+ {0x9FB5, 0x7179}, //5817 #CJK UNIFIED IDEOGRAPH
+ {0x9FB6, 0x717B}, //5818 #CJK UNIFIED IDEOGRAPH
+ {0x9FB7, 0x717C}, //5819 #CJK UNIFIED IDEOGRAPH
+ {0x9FB8, 0x717E}, //5820 #CJK UNIFIED IDEOGRAPH
+ {0x9FB9, 0x717F}, //5821 #CJK UNIFIED IDEOGRAPH
+ {0x9FBA, 0x7180}, //5822 #CJK UNIFIED IDEOGRAPH
+ {0x9FBB, 0x7181}, //5823 #CJK UNIFIED IDEOGRAPH
+ {0x9FBC, 0x7182}, //5824 #CJK UNIFIED IDEOGRAPH
+ {0x9FBD, 0x7183}, //5825 #CJK UNIFIED IDEOGRAPH
+ {0x9FBE, 0x7185}, //5826 #CJK UNIFIED IDEOGRAPH
+ {0x9FBF, 0x7186}, //5827 #CJK UNIFIED IDEOGRAPH
+ {0x9FC0, 0x7187}, //5828 #CJK UNIFIED IDEOGRAPH
+ {0x9FC1, 0x7188}, //5829 #CJK UNIFIED IDEOGRAPH
+ {0x9FC2, 0x7189}, //5830 #CJK UNIFIED IDEOGRAPH
+ {0x9FC3, 0x718B}, //5831 #CJK UNIFIED IDEOGRAPH
+ {0x9FC4, 0x718C}, //5832 #CJK UNIFIED IDEOGRAPH
+ {0x9FC5, 0x718D}, //5833 #CJK UNIFIED IDEOGRAPH
+ {0x9FC6, 0x718E}, //5834 #CJK UNIFIED IDEOGRAPH
+ {0x9FC7, 0x7190}, //5835 #CJK UNIFIED IDEOGRAPH
+ {0x9FC8, 0x7191}, //5836 #CJK UNIFIED IDEOGRAPH
+ {0x9FC9, 0x7192}, //5837 #CJK UNIFIED IDEOGRAPH
+ {0x9FCA, 0x7193}, //5838 #CJK UNIFIED IDEOGRAPH
+ {0x9FCB, 0x7195}, //5839 #CJK UNIFIED IDEOGRAPH
+ {0x9FCC, 0x7196}, //5840 #CJK UNIFIED IDEOGRAPH
+ {0x9FCD, 0x7197}, //5841 #CJK UNIFIED IDEOGRAPH
+ {0x9FCE, 0x719A}, //5842 #CJK UNIFIED IDEOGRAPH
+ {0x9FCF, 0x719B}, //5843 #CJK UNIFIED IDEOGRAPH
+ {0x9FD0, 0x719C}, //5844 #CJK UNIFIED IDEOGRAPH
+ {0x9FD1, 0x719D}, //5845 #CJK UNIFIED IDEOGRAPH
+ {0x9FD2, 0x719E}, //5846 #CJK UNIFIED IDEOGRAPH
+ {0x9FD3, 0x71A1}, //5847 #CJK UNIFIED IDEOGRAPH
+ {0x9FD4, 0x71A2}, //5848 #CJK UNIFIED IDEOGRAPH
+ {0x9FD5, 0x71A3}, //5849 #CJK UNIFIED IDEOGRAPH
+ {0x9FD6, 0x71A4}, //5850 #CJK UNIFIED IDEOGRAPH
+ {0x9FD7, 0x71A5}, //5851 #CJK UNIFIED IDEOGRAPH
+ {0x9FD8, 0x71A6}, //5852 #CJK UNIFIED IDEOGRAPH
+ {0x9FD9, 0x71A7}, //5853 #CJK UNIFIED IDEOGRAPH
+ {0x9FDA, 0x71A9}, //5854 #CJK UNIFIED IDEOGRAPH
+ {0x9FDB, 0x71AA}, //5855 #CJK UNIFIED IDEOGRAPH
+ {0x9FDC, 0x71AB}, //5856 #CJK UNIFIED IDEOGRAPH
+ {0x9FDD, 0x71AD}, //5857 #CJK UNIFIED IDEOGRAPH
+ {0x9FDE, 0x71AE}, //5858 #CJK UNIFIED IDEOGRAPH
+ {0x9FDF, 0x71AF}, //5859 #CJK UNIFIED IDEOGRAPH
+ {0x9FE0, 0x71B0}, //5860 #CJK UNIFIED IDEOGRAPH
+ {0x9FE1, 0x71B1}, //5861 #CJK UNIFIED IDEOGRAPH
+ {0x9FE2, 0x71B2}, //5862 #CJK UNIFIED IDEOGRAPH
+ {0x9FE3, 0x71B4}, //5863 #CJK UNIFIED IDEOGRAPH
+ {0x9FE4, 0x71B6}, //5864 #CJK UNIFIED IDEOGRAPH
+ {0x9FE5, 0x71B7}, //5865 #CJK UNIFIED IDEOGRAPH
+ {0x9FE6, 0x71B8}, //5866 #CJK UNIFIED IDEOGRAPH
+ {0x9FE7, 0x71BA}, //5867 #CJK UNIFIED IDEOGRAPH
+ {0x9FE8, 0x71BB}, //5868 #CJK UNIFIED IDEOGRAPH
+ {0x9FE9, 0x71BC}, //5869 #CJK UNIFIED IDEOGRAPH
+ {0x9FEA, 0x71BD}, //5870 #CJK UNIFIED IDEOGRAPH
+ {0x9FEB, 0x71BE}, //5871 #CJK UNIFIED IDEOGRAPH
+ {0x9FEC, 0x71BF}, //5872 #CJK UNIFIED IDEOGRAPH
+ {0x9FED, 0x71C0}, //5873 #CJK UNIFIED IDEOGRAPH
+ {0x9FEE, 0x71C1}, //5874 #CJK UNIFIED IDEOGRAPH
+ {0x9FEF, 0x71C2}, //5875 #CJK UNIFIED IDEOGRAPH
+ {0x9FF0, 0x71C4}, //5876 #CJK UNIFIED IDEOGRAPH
+ {0x9FF1, 0x71C5}, //5877 #CJK UNIFIED IDEOGRAPH
+ {0x9FF2, 0x71C6}, //5878 #CJK UNIFIED IDEOGRAPH
+ {0x9FF3, 0x71C7}, //5879 #CJK UNIFIED IDEOGRAPH
+ {0x9FF4, 0x71C8}, //5880 #CJK UNIFIED IDEOGRAPH
+ {0x9FF5, 0x71C9}, //5881 #CJK UNIFIED IDEOGRAPH
+ {0x9FF6, 0x71CA}, //5882 #CJK UNIFIED IDEOGRAPH
+ {0x9FF7, 0x71CB}, //5883 #CJK UNIFIED IDEOGRAPH
+ {0x9FF8, 0x71CC}, //5884 #CJK UNIFIED IDEOGRAPH
+ {0x9FF9, 0x71CD}, //5885 #CJK UNIFIED IDEOGRAPH
+ {0x9FFA, 0x71CF}, //5886 #CJK UNIFIED IDEOGRAPH
+ {0x9FFB, 0x71D0}, //5887 #CJK UNIFIED IDEOGRAPH
+ {0x9FFC, 0x71D1}, //5888 #CJK UNIFIED IDEOGRAPH
+ {0x9FFD, 0x71D2}, //5889 #CJK UNIFIED IDEOGRAPH
+ {0x9FFE, 0x71D3}, //5890 #CJK UNIFIED IDEOGRAPH
+ {0xA040, 0x71D6}, //5891 #CJK UNIFIED IDEOGRAPH
+ {0xA041, 0x71D7}, //5892 #CJK UNIFIED IDEOGRAPH
+ {0xA042, 0x71D8}, //5893 #CJK UNIFIED IDEOGRAPH
+ {0xA043, 0x71D9}, //5894 #CJK UNIFIED IDEOGRAPH
+ {0xA044, 0x71DA}, //5895 #CJK UNIFIED IDEOGRAPH
+ {0xA045, 0x71DB}, //5896 #CJK UNIFIED IDEOGRAPH
+ {0xA046, 0x71DC}, //5897 #CJK UNIFIED IDEOGRAPH
+ {0xA047, 0x71DD}, //5898 #CJK UNIFIED IDEOGRAPH
+ {0xA048, 0x71DE}, //5899 #CJK UNIFIED IDEOGRAPH
+ {0xA049, 0x71DF}, //5900 #CJK UNIFIED IDEOGRAPH
+ {0xA04A, 0x71E1}, //5901 #CJK UNIFIED IDEOGRAPH
+ {0xA04B, 0x71E2}, //5902 #CJK UNIFIED IDEOGRAPH
+ {0xA04C, 0x71E3}, //5903 #CJK UNIFIED IDEOGRAPH
+ {0xA04D, 0x71E4}, //5904 #CJK UNIFIED IDEOGRAPH
+ {0xA04E, 0x71E6}, //5905 #CJK UNIFIED IDEOGRAPH
+ {0xA04F, 0x71E8}, //5906 #CJK UNIFIED IDEOGRAPH
+ {0xA050, 0x71E9}, //5907 #CJK UNIFIED IDEOGRAPH
+ {0xA051, 0x71EA}, //5908 #CJK UNIFIED IDEOGRAPH
+ {0xA052, 0x71EB}, //5909 #CJK UNIFIED IDEOGRAPH
+ {0xA053, 0x71EC}, //5910 #CJK UNIFIED IDEOGRAPH
+ {0xA054, 0x71ED}, //5911 #CJK UNIFIED IDEOGRAPH
+ {0xA055, 0x71EF}, //5912 #CJK UNIFIED IDEOGRAPH
+ {0xA056, 0x71F0}, //5913 #CJK UNIFIED IDEOGRAPH
+ {0xA057, 0x71F1}, //5914 #CJK UNIFIED IDEOGRAPH
+ {0xA058, 0x71F2}, //5915 #CJK UNIFIED IDEOGRAPH
+ {0xA059, 0x71F3}, //5916 #CJK UNIFIED IDEOGRAPH
+ {0xA05A, 0x71F4}, //5917 #CJK UNIFIED IDEOGRAPH
+ {0xA05B, 0x71F5}, //5918 #CJK UNIFIED IDEOGRAPH
+ {0xA05C, 0x71F6}, //5919 #CJK UNIFIED IDEOGRAPH
+ {0xA05D, 0x71F7}, //5920 #CJK UNIFIED IDEOGRAPH
+ {0xA05E, 0x71F8}, //5921 #CJK UNIFIED IDEOGRAPH
+ {0xA05F, 0x71FA}, //5922 #CJK UNIFIED IDEOGRAPH
+ {0xA060, 0x71FB}, //5923 #CJK UNIFIED IDEOGRAPH
+ {0xA061, 0x71FC}, //5924 #CJK UNIFIED IDEOGRAPH
+ {0xA062, 0x71FD}, //5925 #CJK UNIFIED IDEOGRAPH
+ {0xA063, 0x71FE}, //5926 #CJK UNIFIED IDEOGRAPH
+ {0xA064, 0x71FF}, //5927 #CJK UNIFIED IDEOGRAPH
+ {0xA065, 0x7200}, //5928 #CJK UNIFIED IDEOGRAPH
+ {0xA066, 0x7201}, //5929 #CJK UNIFIED IDEOGRAPH
+ {0xA067, 0x7202}, //5930 #CJK UNIFIED IDEOGRAPH
+ {0xA068, 0x7203}, //5931 #CJK UNIFIED IDEOGRAPH
+ {0xA069, 0x7204}, //5932 #CJK UNIFIED IDEOGRAPH
+ {0xA06A, 0x7205}, //5933 #CJK UNIFIED IDEOGRAPH
+ {0xA06B, 0x7207}, //5934 #CJK UNIFIED IDEOGRAPH
+ {0xA06C, 0x7208}, //5935 #CJK UNIFIED IDEOGRAPH
+ {0xA06D, 0x7209}, //5936 #CJK UNIFIED IDEOGRAPH
+ {0xA06E, 0x720A}, //5937 #CJK UNIFIED IDEOGRAPH
+ {0xA06F, 0x720B}, //5938 #CJK UNIFIED IDEOGRAPH
+ {0xA070, 0x720C}, //5939 #CJK UNIFIED IDEOGRAPH
+ {0xA071, 0x720D}, //5940 #CJK UNIFIED IDEOGRAPH
+ {0xA072, 0x720E}, //5941 #CJK UNIFIED IDEOGRAPH
+ {0xA073, 0x720F}, //5942 #CJK UNIFIED IDEOGRAPH
+ {0xA074, 0x7210}, //5943 #CJK UNIFIED IDEOGRAPH
+ {0xA075, 0x7211}, //5944 #CJK UNIFIED IDEOGRAPH
+ {0xA076, 0x7212}, //5945 #CJK UNIFIED IDEOGRAPH
+ {0xA077, 0x7213}, //5946 #CJK UNIFIED IDEOGRAPH
+ {0xA078, 0x7214}, //5947 #CJK UNIFIED IDEOGRAPH
+ {0xA079, 0x7215}, //5948 #CJK UNIFIED IDEOGRAPH
+ {0xA07A, 0x7216}, //5949 #CJK UNIFIED IDEOGRAPH
+ {0xA07B, 0x7217}, //5950 #CJK UNIFIED IDEOGRAPH
+ {0xA07C, 0x7218}, //5951 #CJK UNIFIED IDEOGRAPH
+ {0xA07D, 0x7219}, //5952 #CJK UNIFIED IDEOGRAPH
+ {0xA07E, 0x721A}, //5953 #CJK UNIFIED IDEOGRAPH
+ {0xA080, 0x721B}, //5954 #CJK UNIFIED IDEOGRAPH
+ {0xA081, 0x721C}, //5955 #CJK UNIFIED IDEOGRAPH
+ {0xA082, 0x721E}, //5956 #CJK UNIFIED IDEOGRAPH
+ {0xA083, 0x721F}, //5957 #CJK UNIFIED IDEOGRAPH
+ {0xA084, 0x7220}, //5958 #CJK UNIFIED IDEOGRAPH
+ {0xA085, 0x7221}, //5959 #CJK UNIFIED IDEOGRAPH
+ {0xA086, 0x7222}, //5960 #CJK UNIFIED IDEOGRAPH
+ {0xA087, 0x7223}, //5961 #CJK UNIFIED IDEOGRAPH
+ {0xA088, 0x7224}, //5962 #CJK UNIFIED IDEOGRAPH
+ {0xA089, 0x7225}, //5963 #CJK UNIFIED IDEOGRAPH
+ {0xA08A, 0x7226}, //5964 #CJK UNIFIED IDEOGRAPH
+ {0xA08B, 0x7227}, //5965 #CJK UNIFIED IDEOGRAPH
+ {0xA08C, 0x7229}, //5966 #CJK UNIFIED IDEOGRAPH
+ {0xA08D, 0x722B}, //5967 #CJK UNIFIED IDEOGRAPH
+ {0xA08E, 0x722D}, //5968 #CJK UNIFIED IDEOGRAPH
+ {0xA08F, 0x722E}, //5969 #CJK UNIFIED IDEOGRAPH
+ {0xA090, 0x722F}, //5970 #CJK UNIFIED IDEOGRAPH
+ {0xA091, 0x7232}, //5971 #CJK UNIFIED IDEOGRAPH
+ {0xA092, 0x7233}, //5972 #CJK UNIFIED IDEOGRAPH
+ {0xA093, 0x7234}, //5973 #CJK UNIFIED IDEOGRAPH
+ {0xA094, 0x723A}, //5974 #CJK UNIFIED IDEOGRAPH
+ {0xA095, 0x723C}, //5975 #CJK UNIFIED IDEOGRAPH
+ {0xA096, 0x723E}, //5976 #CJK UNIFIED IDEOGRAPH
+ {0xA097, 0x7240}, //5977 #CJK UNIFIED IDEOGRAPH
+ {0xA098, 0x7241}, //5978 #CJK UNIFIED IDEOGRAPH
+ {0xA099, 0x7242}, //5979 #CJK UNIFIED IDEOGRAPH
+ {0xA09A, 0x7243}, //5980 #CJK UNIFIED IDEOGRAPH
+ {0xA09B, 0x7244}, //5981 #CJK UNIFIED IDEOGRAPH
+ {0xA09C, 0x7245}, //5982 #CJK UNIFIED IDEOGRAPH
+ {0xA09D, 0x7246}, //5983 #CJK UNIFIED IDEOGRAPH
+ {0xA09E, 0x7249}, //5984 #CJK UNIFIED IDEOGRAPH
+ {0xA09F, 0x724A}, //5985 #CJK UNIFIED IDEOGRAPH
+ {0xA0A0, 0x724B}, //5986 #CJK UNIFIED IDEOGRAPH
+ {0xA0A1, 0x724E}, //5987 #CJK UNIFIED IDEOGRAPH
+ {0xA0A2, 0x724F}, //5988 #CJK UNIFIED IDEOGRAPH
+ {0xA0A3, 0x7250}, //5989 #CJK UNIFIED IDEOGRAPH
+ {0xA0A4, 0x7251}, //5990 #CJK UNIFIED IDEOGRAPH
+ {0xA0A5, 0x7253}, //5991 #CJK UNIFIED IDEOGRAPH
+ {0xA0A6, 0x7254}, //5992 #CJK UNIFIED IDEOGRAPH
+ {0xA0A7, 0x7255}, //5993 #CJK UNIFIED IDEOGRAPH
+ {0xA0A8, 0x7257}, //5994 #CJK UNIFIED IDEOGRAPH
+ {0xA0A9, 0x7258}, //5995 #CJK UNIFIED IDEOGRAPH
+ {0xA0AA, 0x725A}, //5996 #CJK UNIFIED IDEOGRAPH
+ {0xA0AB, 0x725C}, //5997 #CJK UNIFIED IDEOGRAPH
+ {0xA0AC, 0x725E}, //5998 #CJK UNIFIED IDEOGRAPH
+ {0xA0AD, 0x7260}, //5999 #CJK UNIFIED IDEOGRAPH
+ {0xA0AE, 0x7263}, //6000 #CJK UNIFIED IDEOGRAPH
+ {0xA0AF, 0x7264}, //6001 #CJK UNIFIED IDEOGRAPH
+ {0xA0B0, 0x7265}, //6002 #CJK UNIFIED IDEOGRAPH
+ {0xA0B1, 0x7268}, //6003 #CJK UNIFIED IDEOGRAPH
+ {0xA0B2, 0x726A}, //6004 #CJK UNIFIED IDEOGRAPH
+ {0xA0B3, 0x726B}, //6005 #CJK UNIFIED IDEOGRAPH
+ {0xA0B4, 0x726C}, //6006 #CJK UNIFIED IDEOGRAPH
+ {0xA0B5, 0x726D}, //6007 #CJK UNIFIED IDEOGRAPH
+ {0xA0B6, 0x7270}, //6008 #CJK UNIFIED IDEOGRAPH
+ {0xA0B7, 0x7271}, //6009 #CJK UNIFIED IDEOGRAPH
+ {0xA0B8, 0x7273}, //6010 #CJK UNIFIED IDEOGRAPH
+ {0xA0B9, 0x7274}, //6011 #CJK UNIFIED IDEOGRAPH
+ {0xA0BA, 0x7276}, //6012 #CJK UNIFIED IDEOGRAPH
+ {0xA0BB, 0x7277}, //6013 #CJK UNIFIED IDEOGRAPH
+ {0xA0BC, 0x7278}, //6014 #CJK UNIFIED IDEOGRAPH
+ {0xA0BD, 0x727B}, //6015 #CJK UNIFIED IDEOGRAPH
+ {0xA0BE, 0x727C}, //6016 #CJK UNIFIED IDEOGRAPH
+ {0xA0BF, 0x727D}, //6017 #CJK UNIFIED IDEOGRAPH
+ {0xA0C0, 0x7282}, //6018 #CJK UNIFIED IDEOGRAPH
+ {0xA0C1, 0x7283}, //6019 #CJK UNIFIED IDEOGRAPH
+ {0xA0C2, 0x7285}, //6020 #CJK UNIFIED IDEOGRAPH
+ {0xA0C3, 0x7286}, //6021 #CJK UNIFIED IDEOGRAPH
+ {0xA0C4, 0x7287}, //6022 #CJK UNIFIED IDEOGRAPH
+ {0xA0C5, 0x7288}, //6023 #CJK UNIFIED IDEOGRAPH
+ {0xA0C6, 0x7289}, //6024 #CJK UNIFIED IDEOGRAPH
+ {0xA0C7, 0x728C}, //6025 #CJK UNIFIED IDEOGRAPH
+ {0xA0C8, 0x728E}, //6026 #CJK UNIFIED IDEOGRAPH
+ {0xA0C9, 0x7290}, //6027 #CJK UNIFIED IDEOGRAPH
+ {0xA0CA, 0x7291}, //6028 #CJK UNIFIED IDEOGRAPH
+ {0xA0CB, 0x7293}, //6029 #CJK UNIFIED IDEOGRAPH
+ {0xA0CC, 0x7294}, //6030 #CJK UNIFIED IDEOGRAPH
+ {0xA0CD, 0x7295}, //6031 #CJK UNIFIED IDEOGRAPH
+ {0xA0CE, 0x7296}, //6032 #CJK UNIFIED IDEOGRAPH
+ {0xA0CF, 0x7297}, //6033 #CJK UNIFIED IDEOGRAPH
+ {0xA0D0, 0x7298}, //6034 #CJK UNIFIED IDEOGRAPH
+ {0xA0D1, 0x7299}, //6035 #CJK UNIFIED IDEOGRAPH
+ {0xA0D2, 0x729A}, //6036 #CJK UNIFIED IDEOGRAPH
+ {0xA0D3, 0x729B}, //6037 #CJK UNIFIED IDEOGRAPH
+ {0xA0D4, 0x729C}, //6038 #CJK UNIFIED IDEOGRAPH
+ {0xA0D5, 0x729D}, //6039 #CJK UNIFIED IDEOGRAPH
+ {0xA0D6, 0x729E}, //6040 #CJK UNIFIED IDEOGRAPH
+ {0xA0D7, 0x72A0}, //6041 #CJK UNIFIED IDEOGRAPH
+ {0xA0D8, 0x72A1}, //6042 #CJK UNIFIED IDEOGRAPH
+ {0xA0D9, 0x72A2}, //6043 #CJK UNIFIED IDEOGRAPH
+ {0xA0DA, 0x72A3}, //6044 #CJK UNIFIED IDEOGRAPH
+ {0xA0DB, 0x72A4}, //6045 #CJK UNIFIED IDEOGRAPH
+ {0xA0DC, 0x72A5}, //6046 #CJK UNIFIED IDEOGRAPH
+ {0xA0DD, 0x72A6}, //6047 #CJK UNIFIED IDEOGRAPH
+ {0xA0DE, 0x72A7}, //6048 #CJK UNIFIED IDEOGRAPH
+ {0xA0DF, 0x72A8}, //6049 #CJK UNIFIED IDEOGRAPH
+ {0xA0E0, 0x72A9}, //6050 #CJK UNIFIED IDEOGRAPH
+ {0xA0E1, 0x72AA}, //6051 #CJK UNIFIED IDEOGRAPH
+ {0xA0E2, 0x72AB}, //6052 #CJK UNIFIED IDEOGRAPH
+ {0xA0E3, 0x72AE}, //6053 #CJK UNIFIED IDEOGRAPH
+ {0xA0E4, 0x72B1}, //6054 #CJK UNIFIED IDEOGRAPH
+ {0xA0E5, 0x72B2}, //6055 #CJK UNIFIED IDEOGRAPH
+ {0xA0E6, 0x72B3}, //6056 #CJK UNIFIED IDEOGRAPH
+ {0xA0E7, 0x72B5}, //6057 #CJK UNIFIED IDEOGRAPH
+ {0xA0E8, 0x72BA}, //6058 #CJK UNIFIED IDEOGRAPH
+ {0xA0E9, 0x72BB}, //6059 #CJK UNIFIED IDEOGRAPH
+ {0xA0EA, 0x72BC}, //6060 #CJK UNIFIED IDEOGRAPH
+ {0xA0EB, 0x72BD}, //6061 #CJK UNIFIED IDEOGRAPH
+ {0xA0EC, 0x72BE}, //6062 #CJK UNIFIED IDEOGRAPH
+ {0xA0ED, 0x72BF}, //6063 #CJK UNIFIED IDEOGRAPH
+ {0xA0EE, 0x72C0}, //6064 #CJK UNIFIED IDEOGRAPH
+ {0xA0EF, 0x72C5}, //6065 #CJK UNIFIED IDEOGRAPH
+ {0xA0F0, 0x72C6}, //6066 #CJK UNIFIED IDEOGRAPH
+ {0xA0F1, 0x72C7}, //6067 #CJK UNIFIED IDEOGRAPH
+ {0xA0F2, 0x72C9}, //6068 #CJK UNIFIED IDEOGRAPH
+ {0xA0F3, 0x72CA}, //6069 #CJK UNIFIED IDEOGRAPH
+ {0xA0F4, 0x72CB}, //6070 #CJK UNIFIED IDEOGRAPH
+ {0xA0F5, 0x72CC}, //6071 #CJK UNIFIED IDEOGRAPH
+ {0xA0F6, 0x72CF}, //6072 #CJK UNIFIED IDEOGRAPH
+ {0xA0F7, 0x72D1}, //6073 #CJK UNIFIED IDEOGRAPH
+ {0xA0F8, 0x72D3}, //6074 #CJK UNIFIED IDEOGRAPH
+ {0xA0F9, 0x72D4}, //6075 #CJK UNIFIED IDEOGRAPH
+ {0xA0FA, 0x72D5}, //6076 #CJK UNIFIED IDEOGRAPH
+ {0xA0FB, 0x72D6}, //6077 #CJK UNIFIED IDEOGRAPH
+ {0xA0FC, 0x72D8}, //6078 #CJK UNIFIED IDEOGRAPH
+ {0xA0FD, 0x72DA}, //6079 #CJK UNIFIED IDEOGRAPH
+ {0xA0FE, 0x72DB}, //6080 #CJK UNIFIED IDEOGRAPH
+ {0xA1A1, 0x3000}, //6081 #IDEOGRAPHIC SPACE
+ {0xA1A2, 0x3001}, //6082 #IDEOGRAPHIC COMMA
+ {0xA1A3, 0x3002}, //6083 #IDEOGRAPHIC FULL STOP
+ {0xA1A4, 0x00B7}, //6084 #MIDDLE DOT
+ {0xA1A5, 0x02C9}, //6085 #MODIFIER LETTER MACRON
+ {0xA1A6, 0x02C7}, //6086 #CARON
+ {0xA1A7, 0x00A8}, //6087 #DIAERESIS
+ {0xA1A8, 0x3003}, //6088 #DITTO MARK
+ {0xA1A9, 0x3005}, //6089 #IDEOGRAPHIC ITERATION MARK
+ {0xA1AA, 0x2014}, //6090 #EM DASH
+ {0xA1AB, 0xFF5E}, //6091 #FULLWIDTH TILDE
+ {0xA1AC, 0x2016}, //6092 #DOUBLE VERTICAL LINE
+ {0xA1AD, 0x2026}, //6093 #HORIZONTAL ELLIPSIS
+ {0xA1AE, 0x2018}, //6094 #LEFT SINGLE QUOTATION MARK
+ {0xA1AF, 0x2019}, //6095 #RIGHT SINGLE QUOTATION MARK
+ {0xA1B0, 0x201C}, //6096 #LEFT DOUBLE QUOTATION MARK
+ {0xA1B1, 0x201D}, //6097 #RIGHT DOUBLE QUOTATION MARK
+ {0xA1B2, 0x3014}, //6098 #LEFT TORTOISE SHELL BRACKET
+ {0xA1B3, 0x3015}, //6099 #RIGHT TORTOISE SHELL BRACKET
+ {0xA1B4, 0x3008}, //6100 #LEFT ANGLE BRACKET
+ {0xA1B5, 0x3009}, //6101 #RIGHT ANGLE BRACKET
+ {0xA1B6, 0x300A}, //6102 #LEFT DOUBLE ANGLE BRACKET
+ {0xA1B7, 0x300B}, //6103 #RIGHT DOUBLE ANGLE BRACKET
+ {0xA1B8, 0x300C}, //6104 #LEFT CORNER BRACKET
+ {0xA1B9, 0x300D}, //6105 #RIGHT CORNER BRACKET
+ {0xA1BA, 0x300E}, //6106 #LEFT WHITE CORNER BRACKET
+ {0xA1BB, 0x300F}, //6107 #RIGHT WHITE CORNER BRACKET
+ {0xA1BC, 0x3016}, //6108 #LEFT WHITE LENTICULAR BRACKET
+ {0xA1BD, 0x3017}, //6109 #RIGHT WHITE LENTICULAR BRACKET
+ {0xA1BE, 0x3010}, //6110 #LEFT BLACK LENTICULAR BRACKET
+ {0xA1BF, 0x3011}, //6111 #RIGHT BLACK LENTICULAR BRACKET
+ {0xA1C0, 0x00B1}, //6112 #PLUS-MINUS SIGN
+ {0xA1C1, 0x00D7}, //6113 #MULTIPLICATION SIGN
+ {0xA1C2, 0x00F7}, //6114 #DIVISION SIGN
+ {0xA1C3, 0x2236}, //6115 #RATIO
+ {0xA1C4, 0x2227}, //6116 #LOGICAL AND
+ {0xA1C5, 0x2228}, //6117 #LOGICAL OR
+ {0xA1C6, 0x2211}, //6118 #N-ARY SUMMATION
+ {0xA1C7, 0x220F}, //6119 #N-ARY PRODUCT
+ {0xA1C8, 0x222A}, //6120 #UNION
+ {0xA1C9, 0x2229}, //6121 #INTERSECTION
+ {0xA1CA, 0x2208}, //6122 #ELEMENT OF
+ {0xA1CB, 0x2237}, //6123 #PROPORTION
+ {0xA1CC, 0x221A}, //6124 #SQUARE ROOT
+ {0xA1CD, 0x22A5}, //6125 #UP TACK
+ {0xA1CE, 0x2225}, //6126 #PARALLEL TO
+ {0xA1CF, 0x2220}, //6127 #ANGLE
+ {0xA1D0, 0x2312}, //6128 #ARC
+ {0xA1D1, 0x2299}, //6129 #CIRCLED DOT OPERATOR
+ {0xA1D2, 0x222B}, //6130 #INTEGRAL
+ {0xA1D3, 0x222E}, //6131 #CONTOUR INTEGRAL
+ {0xA1D4, 0x2261}, //6132 #IDENTICAL TO
+ {0xA1D5, 0x224C}, //6133 #ALL EQUAL TO
+ {0xA1D6, 0x2248}, //6134 #ALMOST EQUAL TO
+ {0xA1D7, 0x223D}, //6135 #REVERSED TILDE
+ {0xA1D8, 0x221D}, //6136 #PROPORTIONAL TO
+ {0xA1D9, 0x2260}, //6137 #NOT EQUAL TO
+ {0xA1DA, 0x226E}, //6138 #NOT LESS-THAN
+ {0xA1DB, 0x226F}, //6139 #NOT GREATER-THAN
+ {0xA1DC, 0x2264}, //6140 #LESS-THAN OR EQUAL TO
+ {0xA1DD, 0x2265}, //6141 #GREATER-THAN OR EQUAL TO
+ {0xA1DE, 0x221E}, //6142 #INFINITY
+ {0xA1DF, 0x2235}, //6143 #BECAUSE
+ {0xA1E0, 0x2234}, //6144 #THEREFORE
+ {0xA1E1, 0x2642}, //6145 #MALE SIGN
+ {0xA1E2, 0x2640}, //6146 #FEMALE SIGN
+ {0xA1E3, 0x00B0}, //6147 #DEGREE SIGN
+ {0xA1E4, 0x2032}, //6148 #PRIME
+ {0xA1E5, 0x2033}, //6149 #DOUBLE PRIME
+ {0xA1E6, 0x2103}, //6150 #DEGREE CELSIUS
+ {0xA1E7, 0xFF04}, //6151 #FULLWIDTH DOLLAR SIGN
+ {0xA1E8, 0x00A4}, //6152 #CURRENCY SIGN
+ {0xA1E9, 0xFFE0}, //6153 #FULLWIDTH CENT SIGN
+ {0xA1EA, 0xFFE1}, //6154 #FULLWIDTH POUND SIGN
+ {0xA1EB, 0x2030}, //6155 #PER MILLE SIGN
+ {0xA1EC, 0x00A7}, //6156 #SECTION SIGN
+ {0xA1ED, 0x2116}, //6157 #NUMERO SIGN
+ {0xA1EE, 0x2606}, //6158 #WHITE STAR
+ {0xA1EF, 0x2605}, //6159 #BLACK STAR
+ {0xA1F0, 0x25CB}, //6160 #WHITE CIRCLE
+ {0xA1F1, 0x25CF}, //6161 #BLACK CIRCLE
+ {0xA1F2, 0x25CE}, //6162 #BULLSEYE
+ {0xA1F3, 0x25C7}, //6163 #WHITE DIAMOND
+ {0xA1F4, 0x25C6}, //6164 #BLACK DIAMOND
+ {0xA1F5, 0x25A1}, //6165 #WHITE SQUARE
+ {0xA1F6, 0x25A0}, //6166 #BLACK SQUARE
+ {0xA1F7, 0x25B3}, //6167 #WHITE UP-POINTING TRIANGLE
+ {0xA1F8, 0x25B2}, //6168 #BLACK UP-POINTING TRIANGLE
+ {0xA1F9, 0x203B}, //6169 #REFERENCE MARK
+ {0xA1FA, 0x2192}, //6170 #RIGHTWARDS ARROW
+ {0xA1FB, 0x2190}, //6171 #LEFTWARDS ARROW
+ {0xA1FC, 0x2191}, //6172 #UPWARDS ARROW
+ {0xA1FD, 0x2193}, //6173 #DOWNWARDS ARROW
+ {0xA1FE, 0x3013}, //6174 #GETA MARK
+ {0xA2A1, 0x2170}, //6175 #SMALL ROMAN NUMERAL ONE
+ {0xA2A2, 0x2171}, //6176 #SMALL ROMAN NUMERAL TWO
+ {0xA2A3, 0x2172}, //6177 #SMALL ROMAN NUMERAL THREE
+ {0xA2A4, 0x2173}, //6178 #SMALL ROMAN NUMERAL FOUR
+ {0xA2A5, 0x2174}, //6179 #SMALL ROMAN NUMERAL FIVE
+ {0xA2A6, 0x2175}, //6180 #SMALL ROMAN NUMERAL SIX
+ {0xA2A7, 0x2176}, //6181 #SMALL ROMAN NUMERAL SEVEN
+ {0xA2A8, 0x2177}, //6182 #SMALL ROMAN NUMERAL EIGHT
+ {0xA2A9, 0x2178}, //6183 #SMALL ROMAN NUMERAL NINE
+ {0xA2AA, 0x2179}, //6184 #SMALL ROMAN NUMERAL TEN
+ {0xA2B1, 0x2488}, //6185 #DIGIT ONE FULL STOP
+ {0xA2B2, 0x2489}, //6186 #DIGIT TWO FULL STOP
+ {0xA2B3, 0x248A}, //6187 #DIGIT THREE FULL STOP
+ {0xA2B4, 0x248B}, //6188 #DIGIT FOUR FULL STOP
+ {0xA2B5, 0x248C}, //6189 #DIGIT FIVE FULL STOP
+ {0xA2B6, 0x248D}, //6190 #DIGIT SIX FULL STOP
+ {0xA2B7, 0x248E}, //6191 #DIGIT SEVEN FULL STOP
+ {0xA2B8, 0x248F}, //6192 #DIGIT EIGHT FULL STOP
+ {0xA2B9, 0x2490}, //6193 #DIGIT NINE FULL STOP
+ {0xA2BA, 0x2491}, //6194 #NUMBER TEN FULL STOP
+ {0xA2BB, 0x2492}, //6195 #NUMBER ELEVEN FULL STOP
+ {0xA2BC, 0x2493}, //6196 #NUMBER TWELVE FULL STOP
+ {0xA2BD, 0x2494}, //6197 #NUMBER THIRTEEN FULL STOP
+ {0xA2BE, 0x2495}, //6198 #NUMBER FOURTEEN FULL STOP
+ {0xA2BF, 0x2496}, //6199 #NUMBER FIFTEEN FULL STOP
+ {0xA2C0, 0x2497}, //6200 #NUMBER SIXTEEN FULL STOP
+ {0xA2C1, 0x2498}, //6201 #NUMBER SEVENTEEN FULL STOP
+ {0xA2C2, 0x2499}, //6202 #NUMBER EIGHTEEN FULL STOP
+ {0xA2C3, 0x249A}, //6203 #NUMBER NINETEEN FULL STOP
+ {0xA2C4, 0x249B}, //6204 #NUMBER TWENTY FULL STOP
+ {0xA2C5, 0x2474}, //6205 #PARENTHESIZED DIGIT ONE
+ {0xA2C6, 0x2475}, //6206 #PARENTHESIZED DIGIT TWO
+ {0xA2C7, 0x2476}, //6207 #PARENTHESIZED DIGIT THREE
+ {0xA2C8, 0x2477}, //6208 #PARENTHESIZED DIGIT FOUR
+ {0xA2C9, 0x2478}, //6209 #PARENTHESIZED DIGIT FIVE
+ {0xA2CA, 0x2479}, //6210 #PARENTHESIZED DIGIT SIX
+ {0xA2CB, 0x247A}, //6211 #PARENTHESIZED DIGIT SEVEN
+ {0xA2CC, 0x247B}, //6212 #PARENTHESIZED DIGIT EIGHT
+ {0xA2CD, 0x247C}, //6213 #PARENTHESIZED DIGIT NINE
+ {0xA2CE, 0x247D}, //6214 #PARENTHESIZED NUMBER TEN
+ {0xA2CF, 0x247E}, //6215 #PARENTHESIZED NUMBER ELEVEN
+ {0xA2D0, 0x247F}, //6216 #PARENTHESIZED NUMBER TWELVE
+ {0xA2D1, 0x2480}, //6217 #PARENTHESIZED NUMBER THIRTEEN
+ {0xA2D2, 0x2481}, //6218 #PARENTHESIZED NUMBER FOURTEEN
+ {0xA2D3, 0x2482}, //6219 #PARENTHESIZED NUMBER FIFTEEN
+ {0xA2D4, 0x2483}, //6220 #PARENTHESIZED NUMBER SIXTEEN
+ {0xA2D5, 0x2484}, //6221 #PARENTHESIZED NUMBER SEVENTEEN
+ {0xA2D6, 0x2485}, //6222 #PARENTHESIZED NUMBER EIGHTEEN
+ {0xA2D7, 0x2486}, //6223 #PARENTHESIZED NUMBER NINETEEN
+ {0xA2D8, 0x2487}, //6224 #PARENTHESIZED NUMBER TWENTY
+ {0xA2D9, 0x2460}, //6225 #CIRCLED DIGIT ONE
+ {0xA2DA, 0x2461}, //6226 #CIRCLED DIGIT TWO
+ {0xA2DB, 0x2462}, //6227 #CIRCLED DIGIT THREE
+ {0xA2DC, 0x2463}, //6228 #CIRCLED DIGIT FOUR
+ {0xA2DD, 0x2464}, //6229 #CIRCLED DIGIT FIVE
+ {0xA2DE, 0x2465}, //6230 #CIRCLED DIGIT SIX
+ {0xA2DF, 0x2466}, //6231 #CIRCLED DIGIT SEVEN
+ {0xA2E0, 0x2467}, //6232 #CIRCLED DIGIT EIGHT
+ {0xA2E1, 0x2468}, //6233 #CIRCLED DIGIT NINE
+ {0xA2E2, 0x2469}, //6234 #CIRCLED NUMBER TEN
+ {0xA2E5, 0x3220}, //6235 #PARENTHESIZED IDEOGRAPH ONE
+ {0xA2E6, 0x3221}, //6236 #PARENTHESIZED IDEOGRAPH TWO
+ {0xA2E7, 0x3222}, //6237 #PARENTHESIZED IDEOGRAPH THREE
+ {0xA2E8, 0x3223}, //6238 #PARENTHESIZED IDEOGRAPH FOUR
+ {0xA2E9, 0x3224}, //6239 #PARENTHESIZED IDEOGRAPH FIVE
+ {0xA2EA, 0x3225}, //6240 #PARENTHESIZED IDEOGRAPH SIX
+ {0xA2EB, 0x3226}, //6241 #PARENTHESIZED IDEOGRAPH SEVEN
+ {0xA2EC, 0x3227}, //6242 #PARENTHESIZED IDEOGRAPH EIGHT
+ {0xA2ED, 0x3228}, //6243 #PARENTHESIZED IDEOGRAPH NINE
+ {0xA2EE, 0x3229}, //6244 #PARENTHESIZED IDEOGRAPH TEN
+ {0xA2F1, 0x2160}, //6245 #ROMAN NUMERAL ONE
+ {0xA2F2, 0x2161}, //6246 #ROMAN NUMERAL TWO
+ {0xA2F3, 0x2162}, //6247 #ROMAN NUMERAL THREE
+ {0xA2F4, 0x2163}, //6248 #ROMAN NUMERAL FOUR
+ {0xA2F5, 0x2164}, //6249 #ROMAN NUMERAL FIVE
+ {0xA2F6, 0x2165}, //6250 #ROMAN NUMERAL SIX
+ {0xA2F7, 0x2166}, //6251 #ROMAN NUMERAL SEVEN
+ {0xA2F8, 0x2167}, //6252 #ROMAN NUMERAL EIGHT
+ {0xA2F9, 0x2168}, //6253 #ROMAN NUMERAL NINE
+ {0xA2FA, 0x2169}, //6254 #ROMAN NUMERAL TEN
+ {0xA2FB, 0x216A}, //6255 #ROMAN NUMERAL ELEVEN
+ {0xA2FC, 0x216B}, //6256 #ROMAN NUMERAL TWELVE
+ {0xA3A1, 0xFF01}, //6257 #FULLWIDTH EXCLAMATION MARK
+ {0xA3A2, 0xFF02}, //6258 #FULLWIDTH QUOTATION MARK
+ {0xA3A3, 0xFF03}, //6259 #FULLWIDTH NUMBER SIGN
+ {0xA3A4, 0xFFE5}, //6260 #FULLWIDTH YEN SIGN
+ {0xA3A5, 0xFF05}, //6261 #FULLWIDTH PERCENT SIGN
+ {0xA3A6, 0xFF06}, //6262 #FULLWIDTH AMPERSAND
+ {0xA3A7, 0xFF07}, //6263 #FULLWIDTH APOSTROPHE
+ {0xA3A8, 0xFF08}, //6264 #FULLWIDTH LEFT PARENTHESIS
+ {0xA3A9, 0xFF09}, //6265 #FULLWIDTH RIGHT PARENTHESIS
+ {0xA3AA, 0xFF0A}, //6266 #FULLWIDTH ASTERISK
+ {0xA3AB, 0xFF0B}, //6267 #FULLWIDTH PLUS SIGN
+ {0xA3AC, 0xFF0C}, //6268 #FULLWIDTH COMMA
+ {0xA3AD, 0xFF0D}, //6269 #FULLWIDTH HYPHEN-MINUS
+ {0xA3AE, 0xFF0E}, //6270 #FULLWIDTH FULL STOP
+ {0xA3AF, 0xFF0F}, //6271 #FULLWIDTH SOLIDUS
+ {0xA3B0, 0xFF10}, //6272 #FULLWIDTH DIGIT ZERO
+ {0xA3B1, 0xFF11}, //6273 #FULLWIDTH DIGIT ONE
+ {0xA3B2, 0xFF12}, //6274 #FULLWIDTH DIGIT TWO
+ {0xA3B3, 0xFF13}, //6275 #FULLWIDTH DIGIT THREE
+ {0xA3B4, 0xFF14}, //6276 #FULLWIDTH DIGIT FOUR
+ {0xA3B5, 0xFF15}, //6277 #FULLWIDTH DIGIT FIVE
+ {0xA3B6, 0xFF16}, //6278 #FULLWIDTH DIGIT SIX
+ {0xA3B7, 0xFF17}, //6279 #FULLWIDTH DIGIT SEVEN
+ {0xA3B8, 0xFF18}, //6280 #FULLWIDTH DIGIT EIGHT
+ {0xA3B9, 0xFF19}, //6281 #FULLWIDTH DIGIT NINE
+ {0xA3BA, 0xFF1A}, //6282 #FULLWIDTH COLON
+ {0xA3BB, 0xFF1B}, //6283 #FULLWIDTH SEMICOLON
+ {0xA3BC, 0xFF1C}, //6284 #FULLWIDTH LESS-THAN SIGN
+ {0xA3BD, 0xFF1D}, //6285 #FULLWIDTH EQUALS SIGN
+ {0xA3BE, 0xFF1E}, //6286 #FULLWIDTH GREATER-THAN SIGN
+ {0xA3BF, 0xFF1F}, //6287 #FULLWIDTH QUESTION MARK
+ {0xA3C0, 0xFF20}, //6288 #FULLWIDTH COMMERCIAL AT
+ {0xA3C1, 0xFF21}, //6289 #FULLWIDTH LATIN CAPITAL LETTER A
+ {0xA3C2, 0xFF22}, //6290 #FULLWIDTH LATIN CAPITAL LETTER B
+ {0xA3C3, 0xFF23}, //6291 #FULLWIDTH LATIN CAPITAL LETTER C
+ {0xA3C4, 0xFF24}, //6292 #FULLWIDTH LATIN CAPITAL LETTER D
+ {0xA3C5, 0xFF25}, //6293 #FULLWIDTH LATIN CAPITAL LETTER E
+ {0xA3C6, 0xFF26}, //6294 #FULLWIDTH LATIN CAPITAL LETTER F
+ {0xA3C7, 0xFF27}, //6295 #FULLWIDTH LATIN CAPITAL LETTER G
+ {0xA3C8, 0xFF28}, //6296 #FULLWIDTH LATIN CAPITAL LETTER H
+ {0xA3C9, 0xFF29}, //6297 #FULLWIDTH LATIN CAPITAL LETTER I
+ {0xA3CA, 0xFF2A}, //6298 #FULLWIDTH LATIN CAPITAL LETTER J
+ {0xA3CB, 0xFF2B}, //6299 #FULLWIDTH LATIN CAPITAL LETTER K
+ {0xA3CC, 0xFF2C}, //6300 #FULLWIDTH LATIN CAPITAL LETTER L
+ {0xA3CD, 0xFF2D}, //6301 #FULLWIDTH LATIN CAPITAL LETTER M
+ {0xA3CE, 0xFF2E}, //6302 #FULLWIDTH LATIN CAPITAL LETTER N
+ {0xA3CF, 0xFF2F}, //6303 #FULLWIDTH LATIN CAPITAL LETTER O
+ {0xA3D0, 0xFF30}, //6304 #FULLWIDTH LATIN CAPITAL LETTER P
+ {0xA3D1, 0xFF31}, //6305 #FULLWIDTH LATIN CAPITAL LETTER Q
+ {0xA3D2, 0xFF32}, //6306 #FULLWIDTH LATIN CAPITAL LETTER R
+ {0xA3D3, 0xFF33}, //6307 #FULLWIDTH LATIN CAPITAL LETTER S
+ {0xA3D4, 0xFF34}, //6308 #FULLWIDTH LATIN CAPITAL LETTER T
+ {0xA3D5, 0xFF35}, //6309 #FULLWIDTH LATIN CAPITAL LETTER U
+ {0xA3D6, 0xFF36}, //6310 #FULLWIDTH LATIN CAPITAL LETTER V
+ {0xA3D7, 0xFF37}, //6311 #FULLWIDTH LATIN CAPITAL LETTER W
+ {0xA3D8, 0xFF38}, //6312 #FULLWIDTH LATIN CAPITAL LETTER X
+ {0xA3D9, 0xFF39}, //6313 #FULLWIDTH LATIN CAPITAL LETTER Y
+ {0xA3DA, 0xFF3A}, //6314 #FULLWIDTH LATIN CAPITAL LETTER Z
+ {0xA3DB, 0xFF3B}, //6315 #FULLWIDTH LEFT SQUARE BRACKET
+ {0xA3DC, 0xFF3C}, //6316 #FULLWIDTH REVERSE SOLIDUS
+ {0xA3DD, 0xFF3D}, //6317 #FULLWIDTH RIGHT SQUARE BRACKET
+ {0xA3DE, 0xFF3E}, //6318 #FULLWIDTH CIRCUMFLEX ACCENT
+ {0xA3DF, 0xFF3F}, //6319 #FULLWIDTH LOW LINE
+ {0xA3E0, 0xFF40}, //6320 #FULLWIDTH GRAVE ACCENT
+ {0xA3E1, 0xFF41}, //6321 #FULLWIDTH LATIN SMALL LETTER A
+ {0xA3E2, 0xFF42}, //6322 #FULLWIDTH LATIN SMALL LETTER B
+ {0xA3E3, 0xFF43}, //6323 #FULLWIDTH LATIN SMALL LETTER C
+ {0xA3E4, 0xFF44}, //6324 #FULLWIDTH LATIN SMALL LETTER D
+ {0xA3E5, 0xFF45}, //6325 #FULLWIDTH LATIN SMALL LETTER E
+ {0xA3E6, 0xFF46}, //6326 #FULLWIDTH LATIN SMALL LETTER F
+ {0xA3E7, 0xFF47}, //6327 #FULLWIDTH LATIN SMALL LETTER G
+ {0xA3E8, 0xFF48}, //6328 #FULLWIDTH LATIN SMALL LETTER H
+ {0xA3E9, 0xFF49}, //6329 #FULLWIDTH LATIN SMALL LETTER I
+ {0xA3EA, 0xFF4A}, //6330 #FULLWIDTH LATIN SMALL LETTER J
+ {0xA3EB, 0xFF4B}, //6331 #FULLWIDTH LATIN SMALL LETTER K
+ {0xA3EC, 0xFF4C}, //6332 #FULLWIDTH LATIN SMALL LETTER L
+ {0xA3ED, 0xFF4D}, //6333 #FULLWIDTH LATIN SMALL LETTER M
+ {0xA3EE, 0xFF4E}, //6334 #FULLWIDTH LATIN SMALL LETTER N
+ {0xA3EF, 0xFF4F}, //6335 #FULLWIDTH LATIN SMALL LETTER O
+ {0xA3F0, 0xFF50}, //6336 #FULLWIDTH LATIN SMALL LETTER P
+ {0xA3F1, 0xFF51}, //6337 #FULLWIDTH LATIN SMALL LETTER Q
+ {0xA3F2, 0xFF52}, //6338 #FULLWIDTH LATIN SMALL LETTER R
+ {0xA3F3, 0xFF53}, //6339 #FULLWIDTH LATIN SMALL LETTER S
+ {0xA3F4, 0xFF54}, //6340 #FULLWIDTH LATIN SMALL LETTER T
+ {0xA3F5, 0xFF55}, //6341 #FULLWIDTH LATIN SMALL LETTER U
+ {0xA3F6, 0xFF56}, //6342 #FULLWIDTH LATIN SMALL LETTER V
+ {0xA3F7, 0xFF57}, //6343 #FULLWIDTH LATIN SMALL LETTER W
+ {0xA3F8, 0xFF58}, //6344 #FULLWIDTH LATIN SMALL LETTER X
+ {0xA3F9, 0xFF59}, //6345 #FULLWIDTH LATIN SMALL LETTER Y
+ {0xA3FA, 0xFF5A}, //6346 #FULLWIDTH LATIN SMALL LETTER Z
+ {0xA3FB, 0xFF5B}, //6347 #FULLWIDTH LEFT CURLY BRACKET
+ {0xA3FC, 0xFF5C}, //6348 #FULLWIDTH VERTICAL LINE
+ {0xA3FD, 0xFF5D}, //6349 #FULLWIDTH RIGHT CURLY BRACKET
+ {0xA3FE, 0xFFE3}, //6350 #FULLWIDTH MACRON
+ {0xA4A1, 0x3041}, //6351 #HIRAGANA LETTER SMALL A
+ {0xA4A2, 0x3042}, //6352 #HIRAGANA LETTER A
+ {0xA4A3, 0x3043}, //6353 #HIRAGANA LETTER SMALL I
+ {0xA4A4, 0x3044}, //6354 #HIRAGANA LETTER I
+ {0xA4A5, 0x3045}, //6355 #HIRAGANA LETTER SMALL U
+ {0xA4A6, 0x3046}, //6356 #HIRAGANA LETTER U
+ {0xA4A7, 0x3047}, //6357 #HIRAGANA LETTER SMALL E
+ {0xA4A8, 0x3048}, //6358 #HIRAGANA LETTER E
+ {0xA4A9, 0x3049}, //6359 #HIRAGANA LETTER SMALL O
+ {0xA4AA, 0x304A}, //6360 #HIRAGANA LETTER O
+ {0xA4AB, 0x304B}, //6361 #HIRAGANA LETTER KA
+ {0xA4AC, 0x304C}, //6362 #HIRAGANA LETTER GA
+ {0xA4AD, 0x304D}, //6363 #HIRAGANA LETTER KI
+ {0xA4AE, 0x304E}, //6364 #HIRAGANA LETTER GI
+ {0xA4AF, 0x304F}, //6365 #HIRAGANA LETTER KU
+ {0xA4B0, 0x3050}, //6366 #HIRAGANA LETTER GU
+ {0xA4B1, 0x3051}, //6367 #HIRAGANA LETTER KE
+ {0xA4B2, 0x3052}, //6368 #HIRAGANA LETTER GE
+ {0xA4B3, 0x3053}, //6369 #HIRAGANA LETTER KO
+ {0xA4B4, 0x3054}, //6370 #HIRAGANA LETTER GO
+ {0xA4B5, 0x3055}, //6371 #HIRAGANA LETTER SA
+ {0xA4B6, 0x3056}, //6372 #HIRAGANA LETTER ZA
+ {0xA4B7, 0x3057}, //6373 #HIRAGANA LETTER SI
+ {0xA4B8, 0x3058}, //6374 #HIRAGANA LETTER ZI
+ {0xA4B9, 0x3059}, //6375 #HIRAGANA LETTER SU
+ {0xA4BA, 0x305A}, //6376 #HIRAGANA LETTER ZU
+ {0xA4BB, 0x305B}, //6377 #HIRAGANA LETTER SE
+ {0xA4BC, 0x305C}, //6378 #HIRAGANA LETTER ZE
+ {0xA4BD, 0x305D}, //6379 #HIRAGANA LETTER SO
+ {0xA4BE, 0x305E}, //6380 #HIRAGANA LETTER ZO
+ {0xA4BF, 0x305F}, //6381 #HIRAGANA LETTER TA
+ {0xA4C0, 0x3060}, //6382 #HIRAGANA LETTER DA
+ {0xA4C1, 0x3061}, //6383 #HIRAGANA LETTER TI
+ {0xA4C2, 0x3062}, //6384 #HIRAGANA LETTER DI
+ {0xA4C3, 0x3063}, //6385 #HIRAGANA LETTER SMALL TU
+ {0xA4C4, 0x3064}, //6386 #HIRAGANA LETTER TU
+ {0xA4C5, 0x3065}, //6387 #HIRAGANA LETTER DU
+ {0xA4C6, 0x3066}, //6388 #HIRAGANA LETTER TE
+ {0xA4C7, 0x3067}, //6389 #HIRAGANA LETTER DE
+ {0xA4C8, 0x3068}, //6390 #HIRAGANA LETTER TO
+ {0xA4C9, 0x3069}, //6391 #HIRAGANA LETTER DO
+ {0xA4CA, 0x306A}, //6392 #HIRAGANA LETTER NA
+ {0xA4CB, 0x306B}, //6393 #HIRAGANA LETTER NI
+ {0xA4CC, 0x306C}, //6394 #HIRAGANA LETTER NU
+ {0xA4CD, 0x306D}, //6395 #HIRAGANA LETTER NE
+ {0xA4CE, 0x306E}, //6396 #HIRAGANA LETTER NO
+ {0xA4CF, 0x306F}, //6397 #HIRAGANA LETTER HA
+ {0xA4D0, 0x3070}, //6398 #HIRAGANA LETTER BA
+ {0xA4D1, 0x3071}, //6399 #HIRAGANA LETTER PA
+ {0xA4D2, 0x3072}, //6400 #HIRAGANA LETTER HI
+ {0xA4D3, 0x3073}, //6401 #HIRAGANA LETTER BI
+ {0xA4D4, 0x3074}, //6402 #HIRAGANA LETTER PI
+ {0xA4D5, 0x3075}, //6403 #HIRAGANA LETTER HU
+ {0xA4D6, 0x3076}, //6404 #HIRAGANA LETTER BU
+ {0xA4D7, 0x3077}, //6405 #HIRAGANA LETTER PU
+ {0xA4D8, 0x3078}, //6406 #HIRAGANA LETTER HE
+ {0xA4D9, 0x3079}, //6407 #HIRAGANA LETTER BE
+ {0xA4DA, 0x307A}, //6408 #HIRAGANA LETTER PE
+ {0xA4DB, 0x307B}, //6409 #HIRAGANA LETTER HO
+ {0xA4DC, 0x307C}, //6410 #HIRAGANA LETTER BO
+ {0xA4DD, 0x307D}, //6411 #HIRAGANA LETTER PO
+ {0xA4DE, 0x307E}, //6412 #HIRAGANA LETTER MA
+ {0xA4DF, 0x307F}, //6413 #HIRAGANA LETTER MI
+ {0xA4E0, 0x3080}, //6414 #HIRAGANA LETTER MU
+ {0xA4E1, 0x3081}, //6415 #HIRAGANA LETTER ME
+ {0xA4E2, 0x3082}, //6416 #HIRAGANA LETTER MO
+ {0xA4E3, 0x3083}, //6417 #HIRAGANA LETTER SMALL YA
+ {0xA4E4, 0x3084}, //6418 #HIRAGANA LETTER YA
+ {0xA4E5, 0x3085}, //6419 #HIRAGANA LETTER SMALL YU
+ {0xA4E6, 0x3086}, //6420 #HIRAGANA LETTER YU
+ {0xA4E7, 0x3087}, //6421 #HIRAGANA LETTER SMALL YO
+ {0xA4E8, 0x3088}, //6422 #HIRAGANA LETTER YO
+ {0xA4E9, 0x3089}, //6423 #HIRAGANA LETTER RA
+ {0xA4EA, 0x308A}, //6424 #HIRAGANA LETTER RI
+ {0xA4EB, 0x308B}, //6425 #HIRAGANA LETTER RU
+ {0xA4EC, 0x308C}, //6426 #HIRAGANA LETTER RE
+ {0xA4ED, 0x308D}, //6427 #HIRAGANA LETTER RO
+ {0xA4EE, 0x308E}, //6428 #HIRAGANA LETTER SMALL WA
+ {0xA4EF, 0x308F}, //6429 #HIRAGANA LETTER WA
+ {0xA4F0, 0x3090}, //6430 #HIRAGANA LETTER WI
+ {0xA4F1, 0x3091}, //6431 #HIRAGANA LETTER WE
+ {0xA4F2, 0x3092}, //6432 #HIRAGANA LETTER WO
+ {0xA4F3, 0x3093}, //6433 #HIRAGANA LETTER N
+ {0xA5A1, 0x30A1}, //6434 #KATAKANA LETTER SMALL A
+ {0xA5A2, 0x30A2}, //6435 #KATAKANA LETTER A
+ {0xA5A3, 0x30A3}, //6436 #KATAKANA LETTER SMALL I
+ {0xA5A4, 0x30A4}, //6437 #KATAKANA LETTER I
+ {0xA5A5, 0x30A5}, //6438 #KATAKANA LETTER SMALL U
+ {0xA5A6, 0x30A6}, //6439 #KATAKANA LETTER U
+ {0xA5A7, 0x30A7}, //6440 #KATAKANA LETTER SMALL E
+ {0xA5A8, 0x30A8}, //6441 #KATAKANA LETTER E
+ {0xA5A9, 0x30A9}, //6442 #KATAKANA LETTER SMALL O
+ {0xA5AA, 0x30AA}, //6443 #KATAKANA LETTER O
+ {0xA5AB, 0x30AB}, //6444 #KATAKANA LETTER KA
+ {0xA5AC, 0x30AC}, //6445 #KATAKANA LETTER GA
+ {0xA5AD, 0x30AD}, //6446 #KATAKANA LETTER KI
+ {0xA5AE, 0x30AE}, //6447 #KATAKANA LETTER GI
+ {0xA5AF, 0x30AF}, //6448 #KATAKANA LETTER KU
+ {0xA5B0, 0x30B0}, //6449 #KATAKANA LETTER GU
+ {0xA5B1, 0x30B1}, //6450 #KATAKANA LETTER KE
+ {0xA5B2, 0x30B2}, //6451 #KATAKANA LETTER GE
+ {0xA5B3, 0x30B3}, //6452 #KATAKANA LETTER KO
+ {0xA5B4, 0x30B4}, //6453 #KATAKANA LETTER GO
+ {0xA5B5, 0x30B5}, //6454 #KATAKANA LETTER SA
+ {0xA5B6, 0x30B6}, //6455 #KATAKANA LETTER ZA
+ {0xA5B7, 0x30B7}, //6456 #KATAKANA LETTER SI
+ {0xA5B8, 0x30B8}, //6457 #KATAKANA LETTER ZI
+ {0xA5B9, 0x30B9}, //6458 #KATAKANA LETTER SU
+ {0xA5BA, 0x30BA}, //6459 #KATAKANA LETTER ZU
+ {0xA5BB, 0x30BB}, //6460 #KATAKANA LETTER SE
+ {0xA5BC, 0x30BC}, //6461 #KATAKANA LETTER ZE
+ {0xA5BD, 0x30BD}, //6462 #KATAKANA LETTER SO
+ {0xA5BE, 0x30BE}, //6463 #KATAKANA LETTER ZO
+ {0xA5BF, 0x30BF}, //6464 #KATAKANA LETTER TA
+ {0xA5C0, 0x30C0}, //6465 #KATAKANA LETTER DA
+ {0xA5C1, 0x30C1}, //6466 #KATAKANA LETTER TI
+ {0xA5C2, 0x30C2}, //6467 #KATAKANA LETTER DI
+ {0xA5C3, 0x30C3}, //6468 #KATAKANA LETTER SMALL TU
+ {0xA5C4, 0x30C4}, //6469 #KATAKANA LETTER TU
+ {0xA5C5, 0x30C5}, //6470 #KATAKANA LETTER DU
+ {0xA5C6, 0x30C6}, //6471 #KATAKANA LETTER TE
+ {0xA5C7, 0x30C7}, //6472 #KATAKANA LETTER DE
+ {0xA5C8, 0x30C8}, //6473 #KATAKANA LETTER TO
+ {0xA5C9, 0x30C9}, //6474 #KATAKANA LETTER DO
+ {0xA5CA, 0x30CA}, //6475 #KATAKANA LETTER NA
+ {0xA5CB, 0x30CB}, //6476 #KATAKANA LETTER NI
+ {0xA5CC, 0x30CC}, //6477 #KATAKANA LETTER NU
+ {0xA5CD, 0x30CD}, //6478 #KATAKANA LETTER NE
+ {0xA5CE, 0x30CE}, //6479 #KATAKANA LETTER NO
+ {0xA5CF, 0x30CF}, //6480 #KATAKANA LETTER HA
+ {0xA5D0, 0x30D0}, //6481 #KATAKANA LETTER BA
+ {0xA5D1, 0x30D1}, //6482 #KATAKANA LETTER PA
+ {0xA5D2, 0x30D2}, //6483 #KATAKANA LETTER HI
+ {0xA5D3, 0x30D3}, //6484 #KATAKANA LETTER BI
+ {0xA5D4, 0x30D4}, //6485 #KATAKANA LETTER PI
+ {0xA5D5, 0x30D5}, //6486 #KATAKANA LETTER HU
+ {0xA5D6, 0x30D6}, //6487 #KATAKANA LETTER BU
+ {0xA5D7, 0x30D7}, //6488 #KATAKANA LETTER PU
+ {0xA5D8, 0x30D8}, //6489 #KATAKANA LETTER HE
+ {0xA5D9, 0x30D9}, //6490 #KATAKANA LETTER BE
+ {0xA5DA, 0x30DA}, //6491 #KATAKANA LETTER PE
+ {0xA5DB, 0x30DB}, //6492 #KATAKANA LETTER HO
+ {0xA5DC, 0x30DC}, //6493 #KATAKANA LETTER BO
+ {0xA5DD, 0x30DD}, //6494 #KATAKANA LETTER PO
+ {0xA5DE, 0x30DE}, //6495 #KATAKANA LETTER MA
+ {0xA5DF, 0x30DF}, //6496 #KATAKANA LETTER MI
+ {0xA5E0, 0x30E0}, //6497 #KATAKANA LETTER MU
+ {0xA5E1, 0x30E1}, //6498 #KATAKANA LETTER ME
+ {0xA5E2, 0x30E2}, //6499 #KATAKANA LETTER MO
+ {0xA5E3, 0x30E3}, //6500 #KATAKANA LETTER SMALL YA
+ {0xA5E4, 0x30E4}, //6501 #KATAKANA LETTER YA
+ {0xA5E5, 0x30E5}, //6502 #KATAKANA LETTER SMALL YU
+ {0xA5E6, 0x30E6}, //6503 #KATAKANA LETTER YU
+ {0xA5E7, 0x30E7}, //6504 #KATAKANA LETTER SMALL YO
+ {0xA5E8, 0x30E8}, //6505 #KATAKANA LETTER YO
+ {0xA5E9, 0x30E9}, //6506 #KATAKANA LETTER RA
+ {0xA5EA, 0x30EA}, //6507 #KATAKANA LETTER RI
+ {0xA5EB, 0x30EB}, //6508 #KATAKANA LETTER RU
+ {0xA5EC, 0x30EC}, //6509 #KATAKANA LETTER RE
+ {0xA5ED, 0x30ED}, //6510 #KATAKANA LETTER RO
+ {0xA5EE, 0x30EE}, //6511 #KATAKANA LETTER SMALL WA
+ {0xA5EF, 0x30EF}, //6512 #KATAKANA LETTER WA
+ {0xA5F0, 0x30F0}, //6513 #KATAKANA LETTER WI
+ {0xA5F1, 0x30F1}, //6514 #KATAKANA LETTER WE
+ {0xA5F2, 0x30F2}, //6515 #KATAKANA LETTER WO
+ {0xA5F3, 0x30F3}, //6516 #KATAKANA LETTER N
+ {0xA5F4, 0x30F4}, //6517 #KATAKANA LETTER VU
+ {0xA5F5, 0x30F5}, //6518 #KATAKANA LETTER SMALL KA
+ {0xA5F6, 0x30F6}, //6519 #KATAKANA LETTER SMALL KE
+ {0xA6A1, 0x0391}, //6520 #GREEK CAPITAL LETTER ALPHA
+ {0xA6A2, 0x0392}, //6521 #GREEK CAPITAL LETTER BETA
+ {0xA6A3, 0x0393}, //6522 #GREEK CAPITAL LETTER GAMMA
+ {0xA6A4, 0x0394}, //6523 #GREEK CAPITAL LETTER DELTA
+ {0xA6A5, 0x0395}, //6524 #GREEK CAPITAL LETTER EPSILON
+ {0xA6A6, 0x0396}, //6525 #GREEK CAPITAL LETTER ZETA
+ {0xA6A7, 0x0397}, //6526 #GREEK CAPITAL LETTER ETA
+ {0xA6A8, 0x0398}, //6527 #GREEK CAPITAL LETTER THETA
+ {0xA6A9, 0x0399}, //6528 #GREEK CAPITAL LETTER IOTA
+ {0xA6AA, 0x039A}, //6529 #GREEK CAPITAL LETTER KAPPA
+ {0xA6AB, 0x039B}, //6530 #GREEK CAPITAL LETTER LAMDA
+ {0xA6AC, 0x039C}, //6531 #GREEK CAPITAL LETTER MU
+ {0xA6AD, 0x039D}, //6532 #GREEK CAPITAL LETTER NU
+ {0xA6AE, 0x039E}, //6533 #GREEK CAPITAL LETTER XI
+ {0xA6AF, 0x039F}, //6534 #GREEK CAPITAL LETTER OMICRON
+ {0xA6B0, 0x03A0}, //6535 #GREEK CAPITAL LETTER PI
+ {0xA6B1, 0x03A1}, //6536 #GREEK CAPITAL LETTER RHO
+ {0xA6B2, 0x03A3}, //6537 #GREEK CAPITAL LETTER SIGMA
+ {0xA6B3, 0x03A4}, //6538 #GREEK CAPITAL LETTER TAU
+ {0xA6B4, 0x03A5}, //6539 #GREEK CAPITAL LETTER UPSILON
+ {0xA6B5, 0x03A6}, //6540 #GREEK CAPITAL LETTER PHI
+ {0xA6B6, 0x03A7}, //6541 #GREEK CAPITAL LETTER CHI
+ {0xA6B7, 0x03A8}, //6542 #GREEK CAPITAL LETTER PSI
+ {0xA6B8, 0x03A9}, //6543 #GREEK CAPITAL LETTER OMEGA
+ {0xA6C1, 0x03B1}, //6544 #GREEK SMALL LETTER ALPHA
+ {0xA6C2, 0x03B2}, //6545 #GREEK SMALL LETTER BETA
+ {0xA6C3, 0x03B3}, //6546 #GREEK SMALL LETTER GAMMA
+ {0xA6C4, 0x03B4}, //6547 #GREEK SMALL LETTER DELTA
+ {0xA6C5, 0x03B5}, //6548 #GREEK SMALL LETTER EPSILON
+ {0xA6C6, 0x03B6}, //6549 #GREEK SMALL LETTER ZETA
+ {0xA6C7, 0x03B7}, //6550 #GREEK SMALL LETTER ETA
+ {0xA6C8, 0x03B8}, //6551 #GREEK SMALL LETTER THETA
+ {0xA6C9, 0x03B9}, //6552 #GREEK SMALL LETTER IOTA
+ {0xA6CA, 0x03BA}, //6553 #GREEK SMALL LETTER KAPPA
+ {0xA6CB, 0x03BB}, //6554 #GREEK SMALL LETTER LAMDA
+ {0xA6CC, 0x03BC}, //6555 #GREEK SMALL LETTER MU
+ {0xA6CD, 0x03BD}, //6556 #GREEK SMALL LETTER NU
+ {0xA6CE, 0x03BE}, //6557 #GREEK SMALL LETTER XI
+ {0xA6CF, 0x03BF}, //6558 #GREEK SMALL LETTER OMICRON
+ {0xA6D0, 0x03C0}, //6559 #GREEK SMALL LETTER PI
+ {0xA6D1, 0x03C1}, //6560 #GREEK SMALL LETTER RHO
+ {0xA6D2, 0x03C3}, //6561 #GREEK SMALL LETTER SIGMA
+ {0xA6D3, 0x03C4}, //6562 #GREEK SMALL LETTER TAU
+ {0xA6D4, 0x03C5}, //6563 #GREEK SMALL LETTER UPSILON
+ {0xA6D5, 0x03C6}, //6564 #GREEK SMALL LETTER PHI
+ {0xA6D6, 0x03C7}, //6565 #GREEK SMALL LETTER CHI
+ {0xA6D7, 0x03C8}, //6566 #GREEK SMALL LETTER PSI
+ {0xA6D8, 0x03C9}, //6567 #GREEK SMALL LETTER OMEGA
+ {0xA6E0, 0xFE35}, //6568 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+ {0xA6E1, 0xFE36}, //6569 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+ {0xA6E2, 0xFE39}, //6570 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+ {0xA6E3, 0xFE3A}, //6571 #PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+ {0xA6E4, 0xFE3F}, //6572 #PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+ {0xA6E5, 0xFE40}, //6573 #PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+ {0xA6E6, 0xFE3D}, //6574 #PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+ {0xA6E7, 0xFE3E}, //6575 #PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+ {0xA6E8, 0xFE41}, //6576 #PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+ {0xA6E9, 0xFE42}, //6577 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+ {0xA6EA, 0xFE43}, //6578 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+ {0xA6EB, 0xFE44}, //6579 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+ {0xA6EE, 0xFE3B}, //6580 #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+ {0xA6EF, 0xFE3C}, //6581 #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+ {0xA6F0, 0xFE37}, //6582 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+ {0xA6F1, 0xFE38}, //6583 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+ {0xA6F2, 0xFE31}, //6584 #PRESENTATION FORM FOR VERTICAL EM DASH
+ {0xA6F4, 0xFE33}, //6585 #PRESENTATION FORM FOR VERTICAL LOW LINE
+ {0xA6F5, 0xFE34}, //6586 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+ {0xA7A1, 0x0410}, //6587 #CYRILLIC CAPITAL LETTER A
+ {0xA7A2, 0x0411}, //6588 #CYRILLIC CAPITAL LETTER BE
+ {0xA7A3, 0x0412}, //6589 #CYRILLIC CAPITAL LETTER VE
+ {0xA7A4, 0x0413}, //6590 #CYRILLIC CAPITAL LETTER GHE
+ {0xA7A5, 0x0414}, //6591 #CYRILLIC CAPITAL LETTER DE
+ {0xA7A6, 0x0415}, //6592 #CYRILLIC CAPITAL LETTER IE
+ {0xA7A7, 0x0401}, //6593 #CYRILLIC CAPITAL LETTER IO
+ {0xA7A8, 0x0416}, //6594 #CYRILLIC CAPITAL LETTER ZHE
+ {0xA7A9, 0x0417}, //6595 #CYRILLIC CAPITAL LETTER ZE
+ {0xA7AA, 0x0418}, //6596 #CYRILLIC CAPITAL LETTER I
+ {0xA7AB, 0x0419}, //6597 #CYRILLIC CAPITAL LETTER SHORT I
+ {0xA7AC, 0x041A}, //6598 #CYRILLIC CAPITAL LETTER KA
+ {0xA7AD, 0x041B}, //6599 #CYRILLIC CAPITAL LETTER EL
+ {0xA7AE, 0x041C}, //6600 #CYRILLIC CAPITAL LETTER EM
+ {0xA7AF, 0x041D}, //6601 #CYRILLIC CAPITAL LETTER EN
+ {0xA7B0, 0x041E}, //6602 #CYRILLIC CAPITAL LETTER O
+ {0xA7B1, 0x041F}, //6603 #CYRILLIC CAPITAL LETTER PE
+ {0xA7B2, 0x0420}, //6604 #CYRILLIC CAPITAL LETTER ER
+ {0xA7B3, 0x0421}, //6605 #CYRILLIC CAPITAL LETTER ES
+ {0xA7B4, 0x0422}, //6606 #CYRILLIC CAPITAL LETTER TE
+ {0xA7B5, 0x0423}, //6607 #CYRILLIC CAPITAL LETTER U
+ {0xA7B6, 0x0424}, //6608 #CYRILLIC CAPITAL LETTER EF
+ {0xA7B7, 0x0425}, //6609 #CYRILLIC CAPITAL LETTER HA
+ {0xA7B8, 0x0426}, //6610 #CYRILLIC CAPITAL LETTER TSE
+ {0xA7B9, 0x0427}, //6611 #CYRILLIC CAPITAL LETTER CHE
+ {0xA7BA, 0x0428}, //6612 #CYRILLIC CAPITAL LETTER SHA
+ {0xA7BB, 0x0429}, //6613 #CYRILLIC CAPITAL LETTER SHCHA
+ {0xA7BC, 0x042A}, //6614 #CYRILLIC CAPITAL LETTER HARD SIGN
+ {0xA7BD, 0x042B}, //6615 #CYRILLIC CAPITAL LETTER YERU
+ {0xA7BE, 0x042C}, //6616 #CYRILLIC CAPITAL LETTER SOFT SIGN
+ {0xA7BF, 0x042D}, //6617 #CYRILLIC CAPITAL LETTER E
+ {0xA7C0, 0x042E}, //6618 #CYRILLIC CAPITAL LETTER YU
+ {0xA7C1, 0x042F}, //6619 #CYRILLIC CAPITAL LETTER YA
+ {0xA7D1, 0x0430}, //6620 #CYRILLIC SMALL LETTER A
+ {0xA7D2, 0x0431}, //6621 #CYRILLIC SMALL LETTER BE
+ {0xA7D3, 0x0432}, //6622 #CYRILLIC SMALL LETTER VE
+ {0xA7D4, 0x0433}, //6623 #CYRILLIC SMALL LETTER GHE
+ {0xA7D5, 0x0434}, //6624 #CYRILLIC SMALL LETTER DE
+ {0xA7D6, 0x0435}, //6625 #CYRILLIC SMALL LETTER IE
+ {0xA7D7, 0x0451}, //6626 #CYRILLIC SMALL LETTER IO
+ {0xA7D8, 0x0436}, //6627 #CYRILLIC SMALL LETTER ZHE
+ {0xA7D9, 0x0437}, //6628 #CYRILLIC SMALL LETTER ZE
+ {0xA7DA, 0x0438}, //6629 #CYRILLIC SMALL LETTER I
+ {0xA7DB, 0x0439}, //6630 #CYRILLIC SMALL LETTER SHORT I
+ {0xA7DC, 0x043A}, //6631 #CYRILLIC SMALL LETTER KA
+ {0xA7DD, 0x043B}, //6632 #CYRILLIC SMALL LETTER EL
+ {0xA7DE, 0x043C}, //6633 #CYRILLIC SMALL LETTER EM
+ {0xA7DF, 0x043D}, //6634 #CYRILLIC SMALL LETTER EN
+ {0xA7E0, 0x043E}, //6635 #CYRILLIC SMALL LETTER O
+ {0xA7E1, 0x043F}, //6636 #CYRILLIC SMALL LETTER PE
+ {0xA7E2, 0x0440}, //6637 #CYRILLIC SMALL LETTER ER
+ {0xA7E3, 0x0441}, //6638 #CYRILLIC SMALL LETTER ES
+ {0xA7E4, 0x0442}, //6639 #CYRILLIC SMALL LETTER TE
+ {0xA7E5, 0x0443}, //6640 #CYRILLIC SMALL LETTER U
+ {0xA7E6, 0x0444}, //6641 #CYRILLIC SMALL LETTER EF
+ {0xA7E7, 0x0445}, //6642 #CYRILLIC SMALL LETTER HA
+ {0xA7E8, 0x0446}, //6643 #CYRILLIC SMALL LETTER TSE
+ {0xA7E9, 0x0447}, //6644 #CYRILLIC SMALL LETTER CHE
+ {0xA7EA, 0x0448}, //6645 #CYRILLIC SMALL LETTER SHA
+ {0xA7EB, 0x0449}, //6646 #CYRILLIC SMALL LETTER SHCHA
+ {0xA7EC, 0x044A}, //6647 #CYRILLIC SMALL LETTER HARD SIGN
+ {0xA7ED, 0x044B}, //6648 #CYRILLIC SMALL LETTER YERU
+ {0xA7EE, 0x044C}, //6649 #CYRILLIC SMALL LETTER SOFT SIGN
+ {0xA7EF, 0x044D}, //6650 #CYRILLIC SMALL LETTER E
+ {0xA7F0, 0x044E}, //6651 #CYRILLIC SMALL LETTER YU
+ {0xA7F1, 0x044F}, //6652 #CYRILLIC SMALL LETTER YA
+ {0xA840, 0x02CA}, //6653 #MODIFIER LETTER ACUTE ACCENT
+ {0xA841, 0x02CB}, //6654 #MODIFIER LETTER GRAVE ACCENT
+ {0xA842, 0x02D9}, //6655 #DOT ABOVE
+ {0xA843, 0x2013}, //6656 #EN DASH
+ {0xA844, 0x2015}, //6657 #HORIZONTAL BAR
+ {0xA845, 0x2025}, //6658 #TWO DOT LEADER
+ {0xA846, 0x2035}, //6659 #REVERSED PRIME
+ {0xA847, 0x2105}, //6660 #CARE OF
+ {0xA848, 0x2109}, //6661 #DEGREE FAHRENHEIT
+ {0xA849, 0x2196}, //6662 #NORTH WEST ARROW
+ {0xA84A, 0x2197}, //6663 #NORTH EAST ARROW
+ {0xA84B, 0x2198}, //6664 #SOUTH EAST ARROW
+ {0xA84C, 0x2199}, //6665 #SOUTH WEST ARROW
+ {0xA84D, 0x2215}, //6666 #DIVISION SLASH
+ {0xA84E, 0x221F}, //6667 #RIGHT ANGLE
+ {0xA84F, 0x2223}, //6668 #DIVIDES
+ {0xA850, 0x2252}, //6669 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ {0xA851, 0x2266}, //6670 #LESS-THAN OVER EQUAL TO
+ {0xA852, 0x2267}, //6671 #GREATER-THAN OVER EQUAL TO
+ {0xA853, 0x22BF}, //6672 #RIGHT TRIANGLE
+ {0xA854, 0x2550}, //6673 #BOX DRAWINGS DOUBLE HORIZONTAL
+ {0xA855, 0x2551}, //6674 #BOX DRAWINGS DOUBLE VERTICAL
+ {0xA856, 0x2552}, //6675 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ {0xA857, 0x2553}, //6676 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ {0xA858, 0x2554}, //6677 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ {0xA859, 0x2555}, //6678 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ {0xA85A, 0x2556}, //6679 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ {0xA85B, 0x2557}, //6680 #BOX DRAWINGS DOUBLE DOWN AND LEFT
+ {0xA85C, 0x2558}, //6681 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ {0xA85D, 0x2559}, //6682 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ {0xA85E, 0x255A}, //6683 #BOX DRAWINGS DOUBLE UP AND RIGHT
+ {0xA85F, 0x255B}, //6684 #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ {0xA860, 0x255C}, //6685 #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ {0xA861, 0x255D}, //6686 #BOX DRAWINGS DOUBLE UP AND LEFT
+ {0xA862, 0x255E}, //6687 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ {0xA863, 0x255F}, //6688 #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ {0xA864, 0x2560}, //6689 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ {0xA865, 0x2561}, //6690 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ {0xA866, 0x2562}, //6691 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ {0xA867, 0x2563}, //6692 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ {0xA868, 0x2564}, //6693 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ {0xA869, 0x2565}, //6694 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ {0xA86A, 0x2566}, //6695 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ {0xA86B, 0x2567}, //6696 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ {0xA86C, 0x2568}, //6697 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ {0xA86D, 0x2569}, //6698 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ {0xA86E, 0x256A}, //6699 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ {0xA86F, 0x256B}, //6700 #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ {0xA870, 0x256C}, //6701 #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ {0xA871, 0x256D}, //6702 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+ {0xA872, 0x256E}, //6703 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+ {0xA873, 0x256F}, //6704 #BOX DRAWINGS LIGHT ARC UP AND LEFT
+ {0xA874, 0x2570}, //6705 #BOX DRAWINGS LIGHT ARC UP AND RIGHT
+ {0xA875, 0x2571}, //6706 #BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+ {0xA876, 0x2572}, //6707 #BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+ {0xA877, 0x2573}, //6708 #BOX DRAWINGS LIGHT DIAGONAL CROSS
+ {0xA878, 0x2581}, //6709 #LOWER ONE EIGHTH BLOCK
+ {0xA879, 0x2582}, //6710 #LOWER ONE QUARTER BLOCK
+ {0xA87A, 0x2583}, //6711 #LOWER THREE EIGHTHS BLOCK
+ {0xA87B, 0x2584}, //6712 #LOWER HALF BLOCK
+ {0xA87C, 0x2585}, //6713 #LOWER FIVE EIGHTHS BLOCK
+ {0xA87D, 0x2586}, //6714 #LOWER THREE QUARTERS BLOCK
+ {0xA87E, 0x2587}, //6715 #LOWER SEVEN EIGHTHS BLOCK
+ {0xA880, 0x2588}, //6716 #FULL BLOCK
+ {0xA881, 0x2589}, //6717 #LEFT SEVEN EIGHTHS BLOCK
+ {0xA882, 0x258A}, //6718 #LEFT THREE QUARTERS BLOCK
+ {0xA883, 0x258B}, //6719 #LEFT FIVE EIGHTHS BLOCK
+ {0xA884, 0x258C}, //6720 #LEFT HALF BLOCK
+ {0xA885, 0x258D}, //6721 #LEFT THREE EIGHTHS BLOCK
+ {0xA886, 0x258E}, //6722 #LEFT ONE QUARTER BLOCK
+ {0xA887, 0x258F}, //6723 #LEFT ONE EIGHTH BLOCK
+ {0xA888, 0x2593}, //6724 #DARK SHADE
+ {0xA889, 0x2594}, //6725 #UPPER ONE EIGHTH BLOCK
+ {0xA88A, 0x2595}, //6726 #RIGHT ONE EIGHTH BLOCK
+ {0xA88B, 0x25BC}, //6727 #BLACK DOWN-POINTING TRIANGLE
+ {0xA88C, 0x25BD}, //6728 #WHITE DOWN-POINTING TRIANGLE
+ {0xA88D, 0x25E2}, //6729 #BLACK LOWER RIGHT TRIANGLE
+ {0xA88E, 0x25E3}, //6730 #BLACK LOWER LEFT TRIANGLE
+ {0xA88F, 0x25E4}, //6731 #BLACK UPPER LEFT TRIANGLE
+ {0xA890, 0x25E5}, //6732 #BLACK UPPER RIGHT TRIANGLE
+ {0xA891, 0x2609}, //6733 #SUN
+ {0xA892, 0x2295}, //6734 #CIRCLED PLUS
+ {0xA893, 0x3012}, //6735 #POSTAL MARK
+ {0xA894, 0x301D}, //6736 #REVERSED DOUBLE PRIME QUOTATION MARK
+ {0xA895, 0x301E}, //6737 #DOUBLE PRIME QUOTATION MARK
+ {0xA8A1, 0x0101}, //6738 #LATIN SMALL LETTER A WITH MACRON
+ {0xA8A2, 0x00E1}, //6739 #LATIN SMALL LETTER A WITH ACUTE
+ {0xA8A3, 0x01CE}, //6740 #LATIN SMALL LETTER A WITH CARON
+ {0xA8A4, 0x00E0}, //6741 #LATIN SMALL LETTER A WITH GRAVE
+ {0xA8A5, 0x0113}, //6742 #LATIN SMALL LETTER E WITH MACRON
+ {0xA8A6, 0x00E9}, //6743 #LATIN SMALL LETTER E WITH ACUTE
+ {0xA8A7, 0x011B}, //6744 #LATIN SMALL LETTER E WITH CARON
+ {0xA8A8, 0x00E8}, //6745 #LATIN SMALL LETTER E WITH GRAVE
+ {0xA8A9, 0x012B}, //6746 #LATIN SMALL LETTER I WITH MACRON
+ {0xA8AA, 0x00ED}, //6747 #LATIN SMALL LETTER I WITH ACUTE
+ {0xA8AB, 0x01D0}, //6748 #LATIN SMALL LETTER I WITH CARON
+ {0xA8AC, 0x00EC}, //6749 #LATIN SMALL LETTER I WITH GRAVE
+ {0xA8AD, 0x014D}, //6750 #LATIN SMALL LETTER O WITH MACRON
+ {0xA8AE, 0x00F3}, //6751 #LATIN SMALL LETTER O WITH ACUTE
+ {0xA8AF, 0x01D2}, //6752 #LATIN SMALL LETTER O WITH CARON
+ {0xA8B0, 0x00F2}, //6753 #LATIN SMALL LETTER O WITH GRAVE
+ {0xA8B1, 0x016B}, //6754 #LATIN SMALL LETTER U WITH MACRON
+ {0xA8B2, 0x00FA}, //6755 #LATIN SMALL LETTER U WITH ACUTE
+ {0xA8B3, 0x01D4}, //6756 #LATIN SMALL LETTER U WITH CARON
+ {0xA8B4, 0x00F9}, //6757 #LATIN SMALL LETTER U WITH GRAVE
+ {0xA8B5, 0x01D6}, //6758 #LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ {0xA8B6, 0x01D8}, //6759 #LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ {0xA8B7, 0x01DA}, //6760 #LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ {0xA8B8, 0x01DC}, //6761 #LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ {0xA8B9, 0x00FC}, //6762 #LATIN SMALL LETTER U WITH DIAERESIS
+ {0xA8BA, 0x00EA}, //6763 #LATIN SMALL LETTER E WITH CIRCUMFLEX
+ {0xA8BB, 0x0251}, //6764 #LATIN SMALL LETTER ALPHA
+ {0xA8BD, 0x0144}, //6765 #LATIN SMALL LETTER N WITH ACUTE
+ {0xA8BE, 0x0148}, //6766 #LATIN SMALL LETTER N WITH CARON
+ {0xA8C0, 0x0261}, //6767 #LATIN SMALL LETTER SCRIPT G
+ {0xA8C5, 0x3105}, //6768 #BOPOMOFO LETTER B
+ {0xA8C6, 0x3106}, //6769 #BOPOMOFO LETTER P
+ {0xA8C7, 0x3107}, //6770 #BOPOMOFO LETTER M
+ {0xA8C8, 0x3108}, //6771 #BOPOMOFO LETTER F
+ {0xA8C9, 0x3109}, //6772 #BOPOMOFO LETTER D
+ {0xA8CA, 0x310A}, //6773 #BOPOMOFO LETTER T
+ {0xA8CB, 0x310B}, //6774 #BOPOMOFO LETTER N
+ {0xA8CC, 0x310C}, //6775 #BOPOMOFO LETTER L
+ {0xA8CD, 0x310D}, //6776 #BOPOMOFO LETTER G
+ {0xA8CE, 0x310E}, //6777 #BOPOMOFO LETTER K
+ {0xA8CF, 0x310F}, //6778 #BOPOMOFO LETTER H
+ {0xA8D0, 0x3110}, //6779 #BOPOMOFO LETTER J
+ {0xA8D1, 0x3111}, //6780 #BOPOMOFO LETTER Q
+ {0xA8D2, 0x3112}, //6781 #BOPOMOFO LETTER X
+ {0xA8D3, 0x3113}, //6782 #BOPOMOFO LETTER ZH
+ {0xA8D4, 0x3114}, //6783 #BOPOMOFO LETTER CH
+ {0xA8D5, 0x3115}, //6784 #BOPOMOFO LETTER SH
+ {0xA8D6, 0x3116}, //6785 #BOPOMOFO LETTER R
+ {0xA8D7, 0x3117}, //6786 #BOPOMOFO LETTER Z
+ {0xA8D8, 0x3118}, //6787 #BOPOMOFO LETTER C
+ {0xA8D9, 0x3119}, //6788 #BOPOMOFO LETTER S
+ {0xA8DA, 0x311A}, //6789 #BOPOMOFO LETTER A
+ {0xA8DB, 0x311B}, //6790 #BOPOMOFO LETTER O
+ {0xA8DC, 0x311C}, //6791 #BOPOMOFO LETTER E
+ {0xA8DD, 0x311D}, //6792 #BOPOMOFO LETTER EH
+ {0xA8DE, 0x311E}, //6793 #BOPOMOFO LETTER AI
+ {0xA8DF, 0x311F}, //6794 #BOPOMOFO LETTER EI
+ {0xA8E0, 0x3120}, //6795 #BOPOMOFO LETTER AU
+ {0xA8E1, 0x3121}, //6796 #BOPOMOFO LETTER OU
+ {0xA8E2, 0x3122}, //6797 #BOPOMOFO LETTER AN
+ {0xA8E3, 0x3123}, //6798 #BOPOMOFO LETTER EN
+ {0xA8E4, 0x3124}, //6799 #BOPOMOFO LETTER ANG
+ {0xA8E5, 0x3125}, //6800 #BOPOMOFO LETTER ENG
+ {0xA8E6, 0x3126}, //6801 #BOPOMOFO LETTER ER
+ {0xA8E7, 0x3127}, //6802 #BOPOMOFO LETTER I
+ {0xA8E8, 0x3128}, //6803 #BOPOMOFO LETTER U
+ {0xA8E9, 0x3129}, //6804 #BOPOMOFO LETTER IU
+ {0xA940, 0x3021}, //6805 #HANGZHOU NUMERAL ONE
+ {0xA941, 0x3022}, //6806 #HANGZHOU NUMERAL TWO
+ {0xA942, 0x3023}, //6807 #HANGZHOU NUMERAL THREE
+ {0xA943, 0x3024}, //6808 #HANGZHOU NUMERAL FOUR
+ {0xA944, 0x3025}, //6809 #HANGZHOU NUMERAL FIVE
+ {0xA945, 0x3026}, //6810 #HANGZHOU NUMERAL SIX
+ {0xA946, 0x3027}, //6811 #HANGZHOU NUMERAL SEVEN
+ {0xA947, 0x3028}, //6812 #HANGZHOU NUMERAL EIGHT
+ {0xA948, 0x3029}, //6813 #HANGZHOU NUMERAL NINE
+ {0xA949, 0x32A3}, //6814 #CIRCLED IDEOGRAPH CORRECT
+ {0xA94A, 0x338E}, //6815 #SQUARE MG
+ {0xA94B, 0x338F}, //6816 #SQUARE KG
+ {0xA94C, 0x339C}, //6817 #SQUARE MM
+ {0xA94D, 0x339D}, //6818 #SQUARE CM
+ {0xA94E, 0x339E}, //6819 #SQUARE KM
+ {0xA94F, 0x33A1}, //6820 #SQUARE M SQUARED
+ {0xA950, 0x33C4}, //6821 #SQUARE CC
+ {0xA951, 0x33CE}, //6822 #SQUARE KM CAPITAL
+ {0xA952, 0x33D1}, //6823 #SQUARE LN
+ {0xA953, 0x33D2}, //6824 #SQUARE LOG
+ {0xA954, 0x33D5}, //6825 #SQUARE MIL
+ {0xA955, 0xFE30}, //6826 #PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ {0xA956, 0xFFE2}, //6827 #FULLWIDTH NOT SIGN
+ {0xA957, 0xFFE4}, //6828 #FULLWIDTH BROKEN BAR
+ {0xA959, 0x2121}, //6829 #TELEPHONE SIGN
+ {0xA95A, 0x3231}, //6830 #PARENTHESIZED IDEOGRAPH STOCK
+ {0xA95C, 0x2010}, //6831 #HYPHEN
+ {0xA960, 0x30FC}, //6832 #KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ {0xA961, 0x309B}, //6833 #KATAKANA-HIRAGANA VOICED SOUND MARK
+ {0xA962, 0x309C}, //6834 #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ {0xA963, 0x30FD}, //6835 #KATAKANA ITERATION MARK
+ {0xA964, 0x30FE}, //6836 #KATAKANA VOICED ITERATION MARK
+ {0xA965, 0x3006}, //6837 #IDEOGRAPHIC CLOSING MARK
+ {0xA966, 0x309D}, //6838 #HIRAGANA ITERATION MARK
+ {0xA967, 0x309E}, //6839 #HIRAGANA VOICED ITERATION MARK
+ {0xA968, 0xFE49}, //6840 #DASHED OVERLINE
+ {0xA969, 0xFE4A}, //6841 #CENTRELINE OVERLINE
+ {0xA96A, 0xFE4B}, //6842 #WAVY OVERLINE
+ {0xA96B, 0xFE4C}, //6843 #DOUBLE WAVY OVERLINE
+ {0xA96C, 0xFE4D}, //6844 #DASHED LOW LINE
+ {0xA96D, 0xFE4E}, //6845 #CENTRELINE LOW LINE
+ {0xA96E, 0xFE4F}, //6846 #WAVY LOW LINE
+ {0xA96F, 0xFE50}, //6847 #SMALL COMMA
+ {0xA970, 0xFE51}, //6848 #SMALL IDEOGRAPHIC COMMA
+ {0xA971, 0xFE52}, //6849 #SMALL FULL STOP
+ {0xA972, 0xFE54}, //6850 #SMALL SEMICOLON
+ {0xA973, 0xFE55}, //6851 #SMALL COLON
+ {0xA974, 0xFE56}, //6852 #SMALL QUESTION MARK
+ {0xA975, 0xFE57}, //6853 #SMALL EXCLAMATION MARK
+ {0xA976, 0xFE59}, //6854 #SMALL LEFT PARENTHESIS
+ {0xA977, 0xFE5A}, //6855 #SMALL RIGHT PARENTHESIS
+ {0xA978, 0xFE5B}, //6856 #SMALL LEFT CURLY BRACKET
+ {0xA979, 0xFE5C}, //6857 #SMALL RIGHT CURLY BRACKET
+ {0xA97A, 0xFE5D}, //6858 #SMALL LEFT TORTOISE SHELL BRACKET
+ {0xA97B, 0xFE5E}, //6859 #SMALL RIGHT TORTOISE SHELL BRACKET
+ {0xA97C, 0xFE5F}, //6860 #SMALL NUMBER SIGN
+ {0xA97D, 0xFE60}, //6861 #SMALL AMPERSAND
+ {0xA97E, 0xFE61}, //6862 #SMALL ASTERISK
+ {0xA980, 0xFE62}, //6863 #SMALL PLUS SIGN
+ {0xA981, 0xFE63}, //6864 #SMALL HYPHEN-MINUS
+ {0xA982, 0xFE64}, //6865 #SMALL LESS-THAN SIGN
+ {0xA983, 0xFE65}, //6866 #SMALL GREATER-THAN SIGN
+ {0xA984, 0xFE66}, //6867 #SMALL EQUALS SIGN
+ {0xA985, 0xFE68}, //6868 #SMALL REVERSE SOLIDUS
+ {0xA986, 0xFE69}, //6869 #SMALL DOLLAR SIGN
+ {0xA987, 0xFE6A}, //6870 #SMALL PERCENT SIGN
+ {0xA988, 0xFE6B}, //6871 #SMALL COMMERCIAL AT
+ {0xA996, 0x3007}, //6872 #IDEOGRAPHIC NUMBER ZERO
+ {0xA9A4, 0x2500}, //6873 #BOX DRAWINGS LIGHT HORIZONTAL
+ {0xA9A5, 0x2501}, //6874 #BOX DRAWINGS HEAVY HORIZONTAL
+ {0xA9A6, 0x2502}, //6875 #BOX DRAWINGS LIGHT VERTICAL
+ {0xA9A7, 0x2503}, //6876 #BOX DRAWINGS HEAVY VERTICAL
+ {0xA9A8, 0x2504}, //6877 #BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+ {0xA9A9, 0x2505}, //6878 #BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+ {0xA9AA, 0x2506}, //6879 #BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+ {0xA9AB, 0x2507}, //6880 #BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+ {0xA9AC, 0x2508}, //6881 #BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+ {0xA9AD, 0x2509}, //6882 #BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+ {0xA9AE, 0x250A}, //6883 #BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+ {0xA9AF, 0x250B}, //6884 #BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+ {0xA9B0, 0x250C}, //6885 #BOX DRAWINGS LIGHT DOWN AND RIGHT
+ {0xA9B1, 0x250D}, //6886 #BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+ {0xA9B2, 0x250E}, //6887 #BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+ {0xA9B3, 0x250F}, //6888 #BOX DRAWINGS HEAVY DOWN AND RIGHT
+ {0xA9B4, 0x2510}, //6889 #BOX DRAWINGS LIGHT DOWN AND LEFT
+ {0xA9B5, 0x2511}, //6890 #BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+ {0xA9B6, 0x2512}, //6891 #BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+ {0xA9B7, 0x2513}, //6892 #BOX DRAWINGS HEAVY DOWN AND LEFT
+ {0xA9B8, 0x2514}, //6893 #BOX DRAWINGS LIGHT UP AND RIGHT
+ {0xA9B9, 0x2515}, //6894 #BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+ {0xA9BA, 0x2516}, //6895 #BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+ {0xA9BB, 0x2517}, //6896 #BOX DRAWINGS HEAVY UP AND RIGHT
+ {0xA9BC, 0x2518}, //6897 #BOX DRAWINGS LIGHT UP AND LEFT
+ {0xA9BD, 0x2519}, //6898 #BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+ {0xA9BE, 0x251A}, //6899 #BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+ {0xA9BF, 0x251B}, //6900 #BOX DRAWINGS HEAVY UP AND LEFT
+ {0xA9C0, 0x251C}, //6901 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ {0xA9C1, 0x251D}, //6902 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+ {0xA9C2, 0x251E}, //6903 #BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+ {0xA9C3, 0x251F}, //6904 #BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+ {0xA9C4, 0x2520}, //6905 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+ {0xA9C5, 0x2521}, //6906 #BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+ {0xA9C6, 0x2522}, //6907 #BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+ {0xA9C7, 0x2523}, //6908 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+ {0xA9C8, 0x2524}, //6909 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ {0xA9C9, 0x2525}, //6910 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+ {0xA9CA, 0x2526}, //6911 #BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+ {0xA9CB, 0x2527}, //6912 #BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+ {0xA9CC, 0x2528}, //6913 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+ {0xA9CD, 0x2529}, //6914 #BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+ {0xA9CE, 0x252A}, //6915 #BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+ {0xA9CF, 0x252B}, //6916 #BOX DRAWINGS HEAVY VERTICAL AND LEFT
+ {0xA9D0, 0x252C}, //6917 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ {0xA9D1, 0x252D}, //6918 #BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+ {0xA9D2, 0x252E}, //6919 #BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+ {0xA9D3, 0x252F}, //6920 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+ {0xA9D4, 0x2530}, //6921 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+ {0xA9D5, 0x2531}, //6922 #BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+ {0xA9D6, 0x2532}, //6923 #BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+ {0xA9D7, 0x2533}, //6924 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+ {0xA9D8, 0x2534}, //6925 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ {0xA9D9, 0x2535}, //6926 #BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+ {0xA9DA, 0x2536}, //6927 #BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+ {0xA9DB, 0x2537}, //6928 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+ {0xA9DC, 0x2538}, //6929 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+ {0xA9DD, 0x2539}, //6930 #BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+ {0xA9DE, 0x253A}, //6931 #BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+ {0xA9DF, 0x253B}, //6932 #BOX DRAWINGS HEAVY UP AND HORIZONTAL
+ {0xA9E0, 0x253C}, //6933 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ {0xA9E1, 0x253D}, //6934 #BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+ {0xA9E2, 0x253E}, //6935 #BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+ {0xA9E3, 0x253F}, //6936 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+ {0xA9E4, 0x2540}, //6937 #BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+ {0xA9E5, 0x2541}, //6938 #BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+ {0xA9E6, 0x2542}, //6939 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+ {0xA9E7, 0x2543}, //6940 #BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+ {0xA9E8, 0x2544}, //6941 #BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+ {0xA9E9, 0x2545}, //6942 #BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+ {0xA9EA, 0x2546}, //6943 #BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+ {0xA9EB, 0x2547}, //6944 #BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+ {0xA9EC, 0x2548}, //6945 #BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+ {0xA9ED, 0x2549}, //6946 #BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+ {0xA9EE, 0x254A}, //6947 #BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+ {0xA9EF, 0x254B}, //6948 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+ {0xAA40, 0x72DC}, //6949 #CJK UNIFIED IDEOGRAPH
+ {0xAA41, 0x72DD}, //6950 #CJK UNIFIED IDEOGRAPH
+ {0xAA42, 0x72DF}, //6951 #CJK UNIFIED IDEOGRAPH
+ {0xAA43, 0x72E2}, //6952 #CJK UNIFIED IDEOGRAPH
+ {0xAA44, 0x72E3}, //6953 #CJK UNIFIED IDEOGRAPH
+ {0xAA45, 0x72E4}, //6954 #CJK UNIFIED IDEOGRAPH
+ {0xAA46, 0x72E5}, //6955 #CJK UNIFIED IDEOGRAPH
+ {0xAA47, 0x72E6}, //6956 #CJK UNIFIED IDEOGRAPH
+ {0xAA48, 0x72E7}, //6957 #CJK UNIFIED IDEOGRAPH
+ {0xAA49, 0x72EA}, //6958 #CJK UNIFIED IDEOGRAPH
+ {0xAA4A, 0x72EB}, //6959 #CJK UNIFIED IDEOGRAPH
+ {0xAA4B, 0x72F5}, //6960 #CJK UNIFIED IDEOGRAPH
+ {0xAA4C, 0x72F6}, //6961 #CJK UNIFIED IDEOGRAPH
+ {0xAA4D, 0x72F9}, //6962 #CJK UNIFIED IDEOGRAPH
+ {0xAA4E, 0x72FD}, //6963 #CJK UNIFIED IDEOGRAPH
+ {0xAA4F, 0x72FE}, //6964 #CJK UNIFIED IDEOGRAPH
+ {0xAA50, 0x72FF}, //6965 #CJK UNIFIED IDEOGRAPH
+ {0xAA51, 0x7300}, //6966 #CJK UNIFIED IDEOGRAPH
+ {0xAA52, 0x7302}, //6967 #CJK UNIFIED IDEOGRAPH
+ {0xAA53, 0x7304}, //6968 #CJK UNIFIED IDEOGRAPH
+ {0xAA54, 0x7305}, //6969 #CJK UNIFIED IDEOGRAPH
+ {0xAA55, 0x7306}, //6970 #CJK UNIFIED IDEOGRAPH
+ {0xAA56, 0x7307}, //6971 #CJK UNIFIED IDEOGRAPH
+ {0xAA57, 0x7308}, //6972 #CJK UNIFIED IDEOGRAPH
+ {0xAA58, 0x7309}, //6973 #CJK UNIFIED IDEOGRAPH
+ {0xAA59, 0x730B}, //6974 #CJK UNIFIED IDEOGRAPH
+ {0xAA5A, 0x730C}, //6975 #CJK UNIFIED IDEOGRAPH
+ {0xAA5B, 0x730D}, //6976 #CJK UNIFIED IDEOGRAPH
+ {0xAA5C, 0x730F}, //6977 #CJK UNIFIED IDEOGRAPH
+ {0xAA5D, 0x7310}, //6978 #CJK UNIFIED IDEOGRAPH
+ {0xAA5E, 0x7311}, //6979 #CJK UNIFIED IDEOGRAPH
+ {0xAA5F, 0x7312}, //6980 #CJK UNIFIED IDEOGRAPH
+ {0xAA60, 0x7314}, //6981 #CJK UNIFIED IDEOGRAPH
+ {0xAA61, 0x7318}, //6982 #CJK UNIFIED IDEOGRAPH
+ {0xAA62, 0x7319}, //6983 #CJK UNIFIED IDEOGRAPH
+ {0xAA63, 0x731A}, //6984 #CJK UNIFIED IDEOGRAPH
+ {0xAA64, 0x731F}, //6985 #CJK UNIFIED IDEOGRAPH
+ {0xAA65, 0x7320}, //6986 #CJK UNIFIED IDEOGRAPH
+ {0xAA66, 0x7323}, //6987 #CJK UNIFIED IDEOGRAPH
+ {0xAA67, 0x7324}, //6988 #CJK UNIFIED IDEOGRAPH
+ {0xAA68, 0x7326}, //6989 #CJK UNIFIED IDEOGRAPH
+ {0xAA69, 0x7327}, //6990 #CJK UNIFIED IDEOGRAPH
+ {0xAA6A, 0x7328}, //6991 #CJK UNIFIED IDEOGRAPH
+ {0xAA6B, 0x732D}, //6992 #CJK UNIFIED IDEOGRAPH
+ {0xAA6C, 0x732F}, //6993 #CJK UNIFIED IDEOGRAPH
+ {0xAA6D, 0x7330}, //6994 #CJK UNIFIED IDEOGRAPH
+ {0xAA6E, 0x7332}, //6995 #CJK UNIFIED IDEOGRAPH
+ {0xAA6F, 0x7333}, //6996 #CJK UNIFIED IDEOGRAPH
+ {0xAA70, 0x7335}, //6997 #CJK UNIFIED IDEOGRAPH
+ {0xAA71, 0x7336}, //6998 #CJK UNIFIED IDEOGRAPH
+ {0xAA72, 0x733A}, //6999 #CJK UNIFIED IDEOGRAPH
+ {0xAA73, 0x733B}, //7000 #CJK UNIFIED IDEOGRAPH
+ {0xAA74, 0x733C}, //7001 #CJK UNIFIED IDEOGRAPH
+ {0xAA75, 0x733D}, //7002 #CJK UNIFIED IDEOGRAPH
+ {0xAA76, 0x7340}, //7003 #CJK UNIFIED IDEOGRAPH
+ {0xAA77, 0x7341}, //7004 #CJK UNIFIED IDEOGRAPH
+ {0xAA78, 0x7342}, //7005 #CJK UNIFIED IDEOGRAPH
+ {0xAA79, 0x7343}, //7006 #CJK UNIFIED IDEOGRAPH
+ {0xAA7A, 0x7344}, //7007 #CJK UNIFIED IDEOGRAPH
+ {0xAA7B, 0x7345}, //7008 #CJK UNIFIED IDEOGRAPH
+ {0xAA7C, 0x7346}, //7009 #CJK UNIFIED IDEOGRAPH
+ {0xAA7D, 0x7347}, //7010 #CJK UNIFIED IDEOGRAPH
+ {0xAA7E, 0x7348}, //7011 #CJK UNIFIED IDEOGRAPH
+ {0xAA80, 0x7349}, //7012 #CJK UNIFIED IDEOGRAPH
+ {0xAA81, 0x734A}, //7013 #CJK UNIFIED IDEOGRAPH
+ {0xAA82, 0x734B}, //7014 #CJK UNIFIED IDEOGRAPH
+ {0xAA83, 0x734C}, //7015 #CJK UNIFIED IDEOGRAPH
+ {0xAA84, 0x734E}, //7016 #CJK UNIFIED IDEOGRAPH
+ {0xAA85, 0x734F}, //7017 #CJK UNIFIED IDEOGRAPH
+ {0xAA86, 0x7351}, //7018 #CJK UNIFIED IDEOGRAPH
+ {0xAA87, 0x7353}, //7019 #CJK UNIFIED IDEOGRAPH
+ {0xAA88, 0x7354}, //7020 #CJK UNIFIED IDEOGRAPH
+ {0xAA89, 0x7355}, //7021 #CJK UNIFIED IDEOGRAPH
+ {0xAA8A, 0x7356}, //7022 #CJK UNIFIED IDEOGRAPH
+ {0xAA8B, 0x7358}, //7023 #CJK UNIFIED IDEOGRAPH
+ {0xAA8C, 0x7359}, //7024 #CJK UNIFIED IDEOGRAPH
+ {0xAA8D, 0x735A}, //7025 #CJK UNIFIED IDEOGRAPH
+ {0xAA8E, 0x735B}, //7026 #CJK UNIFIED IDEOGRAPH
+ {0xAA8F, 0x735C}, //7027 #CJK UNIFIED IDEOGRAPH
+ {0xAA90, 0x735D}, //7028 #CJK UNIFIED IDEOGRAPH
+ {0xAA91, 0x735E}, //7029 #CJK UNIFIED IDEOGRAPH
+ {0xAA92, 0x735F}, //7030 #CJK UNIFIED IDEOGRAPH
+ {0xAA93, 0x7361}, //7031 #CJK UNIFIED IDEOGRAPH
+ {0xAA94, 0x7362}, //7032 #CJK UNIFIED IDEOGRAPH
+ {0xAA95, 0x7363}, //7033 #CJK UNIFIED IDEOGRAPH
+ {0xAA96, 0x7364}, //7034 #CJK UNIFIED IDEOGRAPH
+ {0xAA97, 0x7365}, //7035 #CJK UNIFIED IDEOGRAPH
+ {0xAA98, 0x7366}, //7036 #CJK UNIFIED IDEOGRAPH
+ {0xAA99, 0x7367}, //7037 #CJK UNIFIED IDEOGRAPH
+ {0xAA9A, 0x7368}, //7038 #CJK UNIFIED IDEOGRAPH
+ {0xAA9B, 0x7369}, //7039 #CJK UNIFIED IDEOGRAPH
+ {0xAA9C, 0x736A}, //7040 #CJK UNIFIED IDEOGRAPH
+ {0xAA9D, 0x736B}, //7041 #CJK UNIFIED IDEOGRAPH
+ {0xAA9E, 0x736E}, //7042 #CJK UNIFIED IDEOGRAPH
+ {0xAA9F, 0x7370}, //7043 #CJK UNIFIED IDEOGRAPH
+ {0xAAA0, 0x7371}, //7044 #CJK UNIFIED IDEOGRAPH
+ {0xAB40, 0x7372}, //7045 #CJK UNIFIED IDEOGRAPH
+ {0xAB41, 0x7373}, //7046 #CJK UNIFIED IDEOGRAPH
+ {0xAB42, 0x7374}, //7047 #CJK UNIFIED IDEOGRAPH
+ {0xAB43, 0x7375}, //7048 #CJK UNIFIED IDEOGRAPH
+ {0xAB44, 0x7376}, //7049 #CJK UNIFIED IDEOGRAPH
+ {0xAB45, 0x7377}, //7050 #CJK UNIFIED IDEOGRAPH
+ {0xAB46, 0x7378}, //7051 #CJK UNIFIED IDEOGRAPH
+ {0xAB47, 0x7379}, //7052 #CJK UNIFIED IDEOGRAPH
+ {0xAB48, 0x737A}, //7053 #CJK UNIFIED IDEOGRAPH
+ {0xAB49, 0x737B}, //7054 #CJK UNIFIED IDEOGRAPH
+ {0xAB4A, 0x737C}, //7055 #CJK UNIFIED IDEOGRAPH
+ {0xAB4B, 0x737D}, //7056 #CJK UNIFIED IDEOGRAPH
+ {0xAB4C, 0x737F}, //7057 #CJK UNIFIED IDEOGRAPH
+ {0xAB4D, 0x7380}, //7058 #CJK UNIFIED IDEOGRAPH
+ {0xAB4E, 0x7381}, //7059 #CJK UNIFIED IDEOGRAPH
+ {0xAB4F, 0x7382}, //7060 #CJK UNIFIED IDEOGRAPH
+ {0xAB50, 0x7383}, //7061 #CJK UNIFIED IDEOGRAPH
+ {0xAB51, 0x7385}, //7062 #CJK UNIFIED IDEOGRAPH
+ {0xAB52, 0x7386}, //7063 #CJK UNIFIED IDEOGRAPH
+ {0xAB53, 0x7388}, //7064 #CJK UNIFIED IDEOGRAPH
+ {0xAB54, 0x738A}, //7065 #CJK UNIFIED IDEOGRAPH
+ {0xAB55, 0x738C}, //7066 #CJK UNIFIED IDEOGRAPH
+ {0xAB56, 0x738D}, //7067 #CJK UNIFIED IDEOGRAPH
+ {0xAB57, 0x738F}, //7068 #CJK UNIFIED IDEOGRAPH
+ {0xAB58, 0x7390}, //7069 #CJK UNIFIED IDEOGRAPH
+ {0xAB59, 0x7392}, //7070 #CJK UNIFIED IDEOGRAPH
+ {0xAB5A, 0x7393}, //7071 #CJK UNIFIED IDEOGRAPH
+ {0xAB5B, 0x7394}, //7072 #CJK UNIFIED IDEOGRAPH
+ {0xAB5C, 0x7395}, //7073 #CJK UNIFIED IDEOGRAPH
+ {0xAB5D, 0x7397}, //7074 #CJK UNIFIED IDEOGRAPH
+ {0xAB5E, 0x7398}, //7075 #CJK UNIFIED IDEOGRAPH
+ {0xAB5F, 0x7399}, //7076 #CJK UNIFIED IDEOGRAPH
+ {0xAB60, 0x739A}, //7077 #CJK UNIFIED IDEOGRAPH
+ {0xAB61, 0x739C}, //7078 #CJK UNIFIED IDEOGRAPH
+ {0xAB62, 0x739D}, //7079 #CJK UNIFIED IDEOGRAPH
+ {0xAB63, 0x739E}, //7080 #CJK UNIFIED IDEOGRAPH
+ {0xAB64, 0x73A0}, //7081 #CJK UNIFIED IDEOGRAPH
+ {0xAB65, 0x73A1}, //7082 #CJK UNIFIED IDEOGRAPH
+ {0xAB66, 0x73A3}, //7083 #CJK UNIFIED IDEOGRAPH
+ {0xAB67, 0x73A4}, //7084 #CJK UNIFIED IDEOGRAPH
+ {0xAB68, 0x73A5}, //7085 #CJK UNIFIED IDEOGRAPH
+ {0xAB69, 0x73A6}, //7086 #CJK UNIFIED IDEOGRAPH
+ {0xAB6A, 0x73A7}, //7087 #CJK UNIFIED IDEOGRAPH
+ {0xAB6B, 0x73A8}, //7088 #CJK UNIFIED IDEOGRAPH
+ {0xAB6C, 0x73AA}, //7089 #CJK UNIFIED IDEOGRAPH
+ {0xAB6D, 0x73AC}, //7090 #CJK UNIFIED IDEOGRAPH
+ {0xAB6E, 0x73AD}, //7091 #CJK UNIFIED IDEOGRAPH
+ {0xAB6F, 0x73B1}, //7092 #CJK UNIFIED IDEOGRAPH
+ {0xAB70, 0x73B4}, //7093 #CJK UNIFIED IDEOGRAPH
+ {0xAB71, 0x73B5}, //7094 #CJK UNIFIED IDEOGRAPH
+ {0xAB72, 0x73B6}, //7095 #CJK UNIFIED IDEOGRAPH
+ {0xAB73, 0x73B8}, //7096 #CJK UNIFIED IDEOGRAPH
+ {0xAB74, 0x73B9}, //7097 #CJK UNIFIED IDEOGRAPH
+ {0xAB75, 0x73BC}, //7098 #CJK UNIFIED IDEOGRAPH
+ {0xAB76, 0x73BD}, //7099 #CJK UNIFIED IDEOGRAPH
+ {0xAB77, 0x73BE}, //7100 #CJK UNIFIED IDEOGRAPH
+ {0xAB78, 0x73BF}, //7101 #CJK UNIFIED IDEOGRAPH
+ {0xAB79, 0x73C1}, //7102 #CJK UNIFIED IDEOGRAPH
+ {0xAB7A, 0x73C3}, //7103 #CJK UNIFIED IDEOGRAPH
+ {0xAB7B, 0x73C4}, //7104 #CJK UNIFIED IDEOGRAPH
+ {0xAB7C, 0x73C5}, //7105 #CJK UNIFIED IDEOGRAPH
+ {0xAB7D, 0x73C6}, //7106 #CJK UNIFIED IDEOGRAPH
+ {0xAB7E, 0x73C7}, //7107 #CJK UNIFIED IDEOGRAPH
+ {0xAB80, 0x73CB}, //7108 #CJK UNIFIED IDEOGRAPH
+ {0xAB81, 0x73CC}, //7109 #CJK UNIFIED IDEOGRAPH
+ {0xAB82, 0x73CE}, //7110 #CJK UNIFIED IDEOGRAPH
+ {0xAB83, 0x73D2}, //7111 #CJK UNIFIED IDEOGRAPH
+ {0xAB84, 0x73D3}, //7112 #CJK UNIFIED IDEOGRAPH
+ {0xAB85, 0x73D4}, //7113 #CJK UNIFIED IDEOGRAPH
+ {0xAB86, 0x73D5}, //7114 #CJK UNIFIED IDEOGRAPH
+ {0xAB87, 0x73D6}, //7115 #CJK UNIFIED IDEOGRAPH
+ {0xAB88, 0x73D7}, //7116 #CJK UNIFIED IDEOGRAPH
+ {0xAB89, 0x73D8}, //7117 #CJK UNIFIED IDEOGRAPH
+ {0xAB8A, 0x73DA}, //7118 #CJK UNIFIED IDEOGRAPH
+ {0xAB8B, 0x73DB}, //7119 #CJK UNIFIED IDEOGRAPH
+ {0xAB8C, 0x73DC}, //7120 #CJK UNIFIED IDEOGRAPH
+ {0xAB8D, 0x73DD}, //7121 #CJK UNIFIED IDEOGRAPH
+ {0xAB8E, 0x73DF}, //7122 #CJK UNIFIED IDEOGRAPH
+ {0xAB8F, 0x73E1}, //7123 #CJK UNIFIED IDEOGRAPH
+ {0xAB90, 0x73E2}, //7124 #CJK UNIFIED IDEOGRAPH
+ {0xAB91, 0x73E3}, //7125 #CJK UNIFIED IDEOGRAPH
+ {0xAB92, 0x73E4}, //7126 #CJK UNIFIED IDEOGRAPH
+ {0xAB93, 0x73E6}, //7127 #CJK UNIFIED IDEOGRAPH
+ {0xAB94, 0x73E8}, //7128 #CJK UNIFIED IDEOGRAPH
+ {0xAB95, 0x73EA}, //7129 #CJK UNIFIED IDEOGRAPH
+ {0xAB96, 0x73EB}, //7130 #CJK UNIFIED IDEOGRAPH
+ {0xAB97, 0x73EC}, //7131 #CJK UNIFIED IDEOGRAPH
+ {0xAB98, 0x73EE}, //7132 #CJK UNIFIED IDEOGRAPH
+ {0xAB99, 0x73EF}, //7133 #CJK UNIFIED IDEOGRAPH
+ {0xAB9A, 0x73F0}, //7134 #CJK UNIFIED IDEOGRAPH
+ {0xAB9B, 0x73F1}, //7135 #CJK UNIFIED IDEOGRAPH
+ {0xAB9C, 0x73F3}, //7136 #CJK UNIFIED IDEOGRAPH
+ {0xAB9D, 0x73F4}, //7137 #CJK UNIFIED IDEOGRAPH
+ {0xAB9E, 0x73F5}, //7138 #CJK UNIFIED IDEOGRAPH
+ {0xAB9F, 0x73F6}, //7139 #CJK UNIFIED IDEOGRAPH
+ {0xABA0, 0x73F7}, //7140 #CJK UNIFIED IDEOGRAPH
+ {0xAC40, 0x73F8}, //7141 #CJK UNIFIED IDEOGRAPH
+ {0xAC41, 0x73F9}, //7142 #CJK UNIFIED IDEOGRAPH
+ {0xAC42, 0x73FA}, //7143 #CJK UNIFIED IDEOGRAPH
+ {0xAC43, 0x73FB}, //7144 #CJK UNIFIED IDEOGRAPH
+ {0xAC44, 0x73FC}, //7145 #CJK UNIFIED IDEOGRAPH
+ {0xAC45, 0x73FD}, //7146 #CJK UNIFIED IDEOGRAPH
+ {0xAC46, 0x73FE}, //7147 #CJK UNIFIED IDEOGRAPH
+ {0xAC47, 0x73FF}, //7148 #CJK UNIFIED IDEOGRAPH
+ {0xAC48, 0x7400}, //7149 #CJK UNIFIED IDEOGRAPH
+ {0xAC49, 0x7401}, //7150 #CJK UNIFIED IDEOGRAPH
+ {0xAC4A, 0x7402}, //7151 #CJK UNIFIED IDEOGRAPH
+ {0xAC4B, 0x7404}, //7152 #CJK UNIFIED IDEOGRAPH
+ {0xAC4C, 0x7407}, //7153 #CJK UNIFIED IDEOGRAPH
+ {0xAC4D, 0x7408}, //7154 #CJK UNIFIED IDEOGRAPH
+ {0xAC4E, 0x740B}, //7155 #CJK UNIFIED IDEOGRAPH
+ {0xAC4F, 0x740C}, //7156 #CJK UNIFIED IDEOGRAPH
+ {0xAC50, 0x740D}, //7157 #CJK UNIFIED IDEOGRAPH
+ {0xAC51, 0x740E}, //7158 #CJK UNIFIED IDEOGRAPH
+ {0xAC52, 0x7411}, //7159 #CJK UNIFIED IDEOGRAPH
+ {0xAC53, 0x7412}, //7160 #CJK UNIFIED IDEOGRAPH
+ {0xAC54, 0x7413}, //7161 #CJK UNIFIED IDEOGRAPH
+ {0xAC55, 0x7414}, //7162 #CJK UNIFIED IDEOGRAPH
+ {0xAC56, 0x7415}, //7163 #CJK UNIFIED IDEOGRAPH
+ {0xAC57, 0x7416}, //7164 #CJK UNIFIED IDEOGRAPH
+ {0xAC58, 0x7417}, //7165 #CJK UNIFIED IDEOGRAPH
+ {0xAC59, 0x7418}, //7166 #CJK UNIFIED IDEOGRAPH
+ {0xAC5A, 0x7419}, //7167 #CJK UNIFIED IDEOGRAPH
+ {0xAC5B, 0x741C}, //7168 #CJK UNIFIED IDEOGRAPH
+ {0xAC5C, 0x741D}, //7169 #CJK UNIFIED IDEOGRAPH
+ {0xAC5D, 0x741E}, //7170 #CJK UNIFIED IDEOGRAPH
+ {0xAC5E, 0x741F}, //7171 #CJK UNIFIED IDEOGRAPH
+ {0xAC5F, 0x7420}, //7172 #CJK UNIFIED IDEOGRAPH
+ {0xAC60, 0x7421}, //7173 #CJK UNIFIED IDEOGRAPH
+ {0xAC61, 0x7423}, //7174 #CJK UNIFIED IDEOGRAPH
+ {0xAC62, 0x7424}, //7175 #CJK UNIFIED IDEOGRAPH
+ {0xAC63, 0x7427}, //7176 #CJK UNIFIED IDEOGRAPH
+ {0xAC64, 0x7429}, //7177 #CJK UNIFIED IDEOGRAPH
+ {0xAC65, 0x742B}, //7178 #CJK UNIFIED IDEOGRAPH
+ {0xAC66, 0x742D}, //7179 #CJK UNIFIED IDEOGRAPH
+ {0xAC67, 0x742F}, //7180 #CJK UNIFIED IDEOGRAPH
+ {0xAC68, 0x7431}, //7181 #CJK UNIFIED IDEOGRAPH
+ {0xAC69, 0x7432}, //7182 #CJK UNIFIED IDEOGRAPH
+ {0xAC6A, 0x7437}, //7183 #CJK UNIFIED IDEOGRAPH
+ {0xAC6B, 0x7438}, //7184 #CJK UNIFIED IDEOGRAPH
+ {0xAC6C, 0x7439}, //7185 #CJK UNIFIED IDEOGRAPH
+ {0xAC6D, 0x743A}, //7186 #CJK UNIFIED IDEOGRAPH
+ {0xAC6E, 0x743B}, //7187 #CJK UNIFIED IDEOGRAPH
+ {0xAC6F, 0x743D}, //7188 #CJK UNIFIED IDEOGRAPH
+ {0xAC70, 0x743E}, //7189 #CJK UNIFIED IDEOGRAPH
+ {0xAC71, 0x743F}, //7190 #CJK UNIFIED IDEOGRAPH
+ {0xAC72, 0x7440}, //7191 #CJK UNIFIED IDEOGRAPH
+ {0xAC73, 0x7442}, //7192 #CJK UNIFIED IDEOGRAPH
+ {0xAC74, 0x7443}, //7193 #CJK UNIFIED IDEOGRAPH
+ {0xAC75, 0x7444}, //7194 #CJK UNIFIED IDEOGRAPH
+ {0xAC76, 0x7445}, //7195 #CJK UNIFIED IDEOGRAPH
+ {0xAC77, 0x7446}, //7196 #CJK UNIFIED IDEOGRAPH
+ {0xAC78, 0x7447}, //7197 #CJK UNIFIED IDEOGRAPH
+ {0xAC79, 0x7448}, //7198 #CJK UNIFIED IDEOGRAPH
+ {0xAC7A, 0x7449}, //7199 #CJK UNIFIED IDEOGRAPH
+ {0xAC7B, 0x744A}, //7200 #CJK UNIFIED IDEOGRAPH
+ {0xAC7C, 0x744B}, //7201 #CJK UNIFIED IDEOGRAPH
+ {0xAC7D, 0x744C}, //7202 #CJK UNIFIED IDEOGRAPH
+ {0xAC7E, 0x744D}, //7203 #CJK UNIFIED IDEOGRAPH
+ {0xAC80, 0x744E}, //7204 #CJK UNIFIED IDEOGRAPH
+ {0xAC81, 0x744F}, //7205 #CJK UNIFIED IDEOGRAPH
+ {0xAC82, 0x7450}, //7206 #CJK UNIFIED IDEOGRAPH
+ {0xAC83, 0x7451}, //7207 #CJK UNIFIED IDEOGRAPH
+ {0xAC84, 0x7452}, //7208 #CJK UNIFIED IDEOGRAPH
+ {0xAC85, 0x7453}, //7209 #CJK UNIFIED IDEOGRAPH
+ {0xAC86, 0x7454}, //7210 #CJK UNIFIED IDEOGRAPH
+ {0xAC87, 0x7456}, //7211 #CJK UNIFIED IDEOGRAPH
+ {0xAC88, 0x7458}, //7212 #CJK UNIFIED IDEOGRAPH
+ {0xAC89, 0x745D}, //7213 #CJK UNIFIED IDEOGRAPH
+ {0xAC8A, 0x7460}, //7214 #CJK UNIFIED IDEOGRAPH
+ {0xAC8B, 0x7461}, //7215 #CJK UNIFIED IDEOGRAPH
+ {0xAC8C, 0x7462}, //7216 #CJK UNIFIED IDEOGRAPH
+ {0xAC8D, 0x7463}, //7217 #CJK UNIFIED IDEOGRAPH
+ {0xAC8E, 0x7464}, //7218 #CJK UNIFIED IDEOGRAPH
+ {0xAC8F, 0x7465}, //7219 #CJK UNIFIED IDEOGRAPH
+ {0xAC90, 0x7466}, //7220 #CJK UNIFIED IDEOGRAPH
+ {0xAC91, 0x7467}, //7221 #CJK UNIFIED IDEOGRAPH
+ {0xAC92, 0x7468}, //7222 #CJK UNIFIED IDEOGRAPH
+ {0xAC93, 0x7469}, //7223 #CJK UNIFIED IDEOGRAPH
+ {0xAC94, 0x746A}, //7224 #CJK UNIFIED IDEOGRAPH
+ {0xAC95, 0x746B}, //7225 #CJK UNIFIED IDEOGRAPH
+ {0xAC96, 0x746C}, //7226 #CJK UNIFIED IDEOGRAPH
+ {0xAC97, 0x746E}, //7227 #CJK UNIFIED IDEOGRAPH
+ {0xAC98, 0x746F}, //7228 #CJK UNIFIED IDEOGRAPH
+ {0xAC99, 0x7471}, //7229 #CJK UNIFIED IDEOGRAPH
+ {0xAC9A, 0x7472}, //7230 #CJK UNIFIED IDEOGRAPH
+ {0xAC9B, 0x7473}, //7231 #CJK UNIFIED IDEOGRAPH
+ {0xAC9C, 0x7474}, //7232 #CJK UNIFIED IDEOGRAPH
+ {0xAC9D, 0x7475}, //7233 #CJK UNIFIED IDEOGRAPH
+ {0xAC9E, 0x7478}, //7234 #CJK UNIFIED IDEOGRAPH
+ {0xAC9F, 0x7479}, //7235 #CJK UNIFIED IDEOGRAPH
+ {0xACA0, 0x747A}, //7236 #CJK UNIFIED IDEOGRAPH
+ {0xAD40, 0x747B}, //7237 #CJK UNIFIED IDEOGRAPH
+ {0xAD41, 0x747C}, //7238 #CJK UNIFIED IDEOGRAPH
+ {0xAD42, 0x747D}, //7239 #CJK UNIFIED IDEOGRAPH
+ {0xAD43, 0x747F}, //7240 #CJK UNIFIED IDEOGRAPH
+ {0xAD44, 0x7482}, //7241 #CJK UNIFIED IDEOGRAPH
+ {0xAD45, 0x7484}, //7242 #CJK UNIFIED IDEOGRAPH
+ {0xAD46, 0x7485}, //7243 #CJK UNIFIED IDEOGRAPH
+ {0xAD47, 0x7486}, //7244 #CJK UNIFIED IDEOGRAPH
+ {0xAD48, 0x7488}, //7245 #CJK UNIFIED IDEOGRAPH
+ {0xAD49, 0x7489}, //7246 #CJK UNIFIED IDEOGRAPH
+ {0xAD4A, 0x748A}, //7247 #CJK UNIFIED IDEOGRAPH
+ {0xAD4B, 0x748C}, //7248 #CJK UNIFIED IDEOGRAPH
+ {0xAD4C, 0x748D}, //7249 #CJK UNIFIED IDEOGRAPH
+ {0xAD4D, 0x748F}, //7250 #CJK UNIFIED IDEOGRAPH
+ {0xAD4E, 0x7491}, //7251 #CJK UNIFIED IDEOGRAPH
+ {0xAD4F, 0x7492}, //7252 #CJK UNIFIED IDEOGRAPH
+ {0xAD50, 0x7493}, //7253 #CJK UNIFIED IDEOGRAPH
+ {0xAD51, 0x7494}, //7254 #CJK UNIFIED IDEOGRAPH
+ {0xAD52, 0x7495}, //7255 #CJK UNIFIED IDEOGRAPH
+ {0xAD53, 0x7496}, //7256 #CJK UNIFIED IDEOGRAPH
+ {0xAD54, 0x7497}, //7257 #CJK UNIFIED IDEOGRAPH
+ {0xAD55, 0x7498}, //7258 #CJK UNIFIED IDEOGRAPH
+ {0xAD56, 0x7499}, //7259 #CJK UNIFIED IDEOGRAPH
+ {0xAD57, 0x749A}, //7260 #CJK UNIFIED IDEOGRAPH
+ {0xAD58, 0x749B}, //7261 #CJK UNIFIED IDEOGRAPH
+ {0xAD59, 0x749D}, //7262 #CJK UNIFIED IDEOGRAPH
+ {0xAD5A, 0x749F}, //7263 #CJK UNIFIED IDEOGRAPH
+ {0xAD5B, 0x74A0}, //7264 #CJK UNIFIED IDEOGRAPH
+ {0xAD5C, 0x74A1}, //7265 #CJK UNIFIED IDEOGRAPH
+ {0xAD5D, 0x74A2}, //7266 #CJK UNIFIED IDEOGRAPH
+ {0xAD5E, 0x74A3}, //7267 #CJK UNIFIED IDEOGRAPH
+ {0xAD5F, 0x74A4}, //7268 #CJK UNIFIED IDEOGRAPH
+ {0xAD60, 0x74A5}, //7269 #CJK UNIFIED IDEOGRAPH
+ {0xAD61, 0x74A6}, //7270 #CJK UNIFIED IDEOGRAPH
+ {0xAD62, 0x74AA}, //7271 #CJK UNIFIED IDEOGRAPH
+ {0xAD63, 0x74AB}, //7272 #CJK UNIFIED IDEOGRAPH
+ {0xAD64, 0x74AC}, //7273 #CJK UNIFIED IDEOGRAPH
+ {0xAD65, 0x74AD}, //7274 #CJK UNIFIED IDEOGRAPH
+ {0xAD66, 0x74AE}, //7275 #CJK UNIFIED IDEOGRAPH
+ {0xAD67, 0x74AF}, //7276 #CJK UNIFIED IDEOGRAPH
+ {0xAD68, 0x74B0}, //7277 #CJK UNIFIED IDEOGRAPH
+ {0xAD69, 0x74B1}, //7278 #CJK UNIFIED IDEOGRAPH
+ {0xAD6A, 0x74B2}, //7279 #CJK UNIFIED IDEOGRAPH
+ {0xAD6B, 0x74B3}, //7280 #CJK UNIFIED IDEOGRAPH
+ {0xAD6C, 0x74B4}, //7281 #CJK UNIFIED IDEOGRAPH
+ {0xAD6D, 0x74B5}, //7282 #CJK UNIFIED IDEOGRAPH
+ {0xAD6E, 0x74B6}, //7283 #CJK UNIFIED IDEOGRAPH
+ {0xAD6F, 0x74B7}, //7284 #CJK UNIFIED IDEOGRAPH
+ {0xAD70, 0x74B8}, //7285 #CJK UNIFIED IDEOGRAPH
+ {0xAD71, 0x74B9}, //7286 #CJK UNIFIED IDEOGRAPH
+ {0xAD72, 0x74BB}, //7287 #CJK UNIFIED IDEOGRAPH
+ {0xAD73, 0x74BC}, //7288 #CJK UNIFIED IDEOGRAPH
+ {0xAD74, 0x74BD}, //7289 #CJK UNIFIED IDEOGRAPH
+ {0xAD75, 0x74BE}, //7290 #CJK UNIFIED IDEOGRAPH
+ {0xAD76, 0x74BF}, //7291 #CJK UNIFIED IDEOGRAPH
+ {0xAD77, 0x74C0}, //7292 #CJK UNIFIED IDEOGRAPH
+ {0xAD78, 0x74C1}, //7293 #CJK UNIFIED IDEOGRAPH
+ {0xAD79, 0x74C2}, //7294 #CJK UNIFIED IDEOGRAPH
+ {0xAD7A, 0x74C3}, //7295 #CJK UNIFIED IDEOGRAPH
+ {0xAD7B, 0x74C4}, //7296 #CJK UNIFIED IDEOGRAPH
+ {0xAD7C, 0x74C5}, //7297 #CJK UNIFIED IDEOGRAPH
+ {0xAD7D, 0x74C6}, //7298 #CJK UNIFIED IDEOGRAPH
+ {0xAD7E, 0x74C7}, //7299 #CJK UNIFIED IDEOGRAPH
+ {0xAD80, 0x74C8}, //7300 #CJK UNIFIED IDEOGRAPH
+ {0xAD81, 0x74C9}, //7301 #CJK UNIFIED IDEOGRAPH
+ {0xAD82, 0x74CA}, //7302 #CJK UNIFIED IDEOGRAPH
+ {0xAD83, 0x74CB}, //7303 #CJK UNIFIED IDEOGRAPH
+ {0xAD84, 0x74CC}, //7304 #CJK UNIFIED IDEOGRAPH
+ {0xAD85, 0x74CD}, //7305 #CJK UNIFIED IDEOGRAPH
+ {0xAD86, 0x74CE}, //7306 #CJK UNIFIED IDEOGRAPH
+ {0xAD87, 0x74CF}, //7307 #CJK UNIFIED IDEOGRAPH
+ {0xAD88, 0x74D0}, //7308 #CJK UNIFIED IDEOGRAPH
+ {0xAD89, 0x74D1}, //7309 #CJK UNIFIED IDEOGRAPH
+ {0xAD8A, 0x74D3}, //7310 #CJK UNIFIED IDEOGRAPH
+ {0xAD8B, 0x74D4}, //7311 #CJK UNIFIED IDEOGRAPH
+ {0xAD8C, 0x74D5}, //7312 #CJK UNIFIED IDEOGRAPH
+ {0xAD8D, 0x74D6}, //7313 #CJK UNIFIED IDEOGRAPH
+ {0xAD8E, 0x74D7}, //7314 #CJK UNIFIED IDEOGRAPH
+ {0xAD8F, 0x74D8}, //7315 #CJK UNIFIED IDEOGRAPH
+ {0xAD90, 0x74D9}, //7316 #CJK UNIFIED IDEOGRAPH
+ {0xAD91, 0x74DA}, //7317 #CJK UNIFIED IDEOGRAPH
+ {0xAD92, 0x74DB}, //7318 #CJK UNIFIED IDEOGRAPH
+ {0xAD93, 0x74DD}, //7319 #CJK UNIFIED IDEOGRAPH
+ {0xAD94, 0x74DF}, //7320 #CJK UNIFIED IDEOGRAPH
+ {0xAD95, 0x74E1}, //7321 #CJK UNIFIED IDEOGRAPH
+ {0xAD96, 0x74E5}, //7322 #CJK UNIFIED IDEOGRAPH
+ {0xAD97, 0x74E7}, //7323 #CJK UNIFIED IDEOGRAPH
+ {0xAD98, 0x74E8}, //7324 #CJK UNIFIED IDEOGRAPH
+ {0xAD99, 0x74E9}, //7325 #CJK UNIFIED IDEOGRAPH
+ {0xAD9A, 0x74EA}, //7326 #CJK UNIFIED IDEOGRAPH
+ {0xAD9B, 0x74EB}, //7327 #CJK UNIFIED IDEOGRAPH
+ {0xAD9C, 0x74EC}, //7328 #CJK UNIFIED IDEOGRAPH
+ {0xAD9D, 0x74ED}, //7329 #CJK UNIFIED IDEOGRAPH
+ {0xAD9E, 0x74F0}, //7330 #CJK UNIFIED IDEOGRAPH
+ {0xAD9F, 0x74F1}, //7331 #CJK UNIFIED IDEOGRAPH
+ {0xADA0, 0x74F2}, //7332 #CJK UNIFIED IDEOGRAPH
+ {0xAE40, 0x74F3}, //7333 #CJK UNIFIED IDEOGRAPH
+ {0xAE41, 0x74F5}, //7334 #CJK UNIFIED IDEOGRAPH
+ {0xAE42, 0x74F8}, //7335 #CJK UNIFIED IDEOGRAPH
+ {0xAE43, 0x74F9}, //7336 #CJK UNIFIED IDEOGRAPH
+ {0xAE44, 0x74FA}, //7337 #CJK UNIFIED IDEOGRAPH
+ {0xAE45, 0x74FB}, //7338 #CJK UNIFIED IDEOGRAPH
+ {0xAE46, 0x74FC}, //7339 #CJK UNIFIED IDEOGRAPH
+ {0xAE47, 0x74FD}, //7340 #CJK UNIFIED IDEOGRAPH
+ {0xAE48, 0x74FE}, //7341 #CJK UNIFIED IDEOGRAPH
+ {0xAE49, 0x7500}, //7342 #CJK UNIFIED IDEOGRAPH
+ {0xAE4A, 0x7501}, //7343 #CJK UNIFIED IDEOGRAPH
+ {0xAE4B, 0x7502}, //7344 #CJK UNIFIED IDEOGRAPH
+ {0xAE4C, 0x7503}, //7345 #CJK UNIFIED IDEOGRAPH
+ {0xAE4D, 0x7505}, //7346 #CJK UNIFIED IDEOGRAPH
+ {0xAE4E, 0x7506}, //7347 #CJK UNIFIED IDEOGRAPH
+ {0xAE4F, 0x7507}, //7348 #CJK UNIFIED IDEOGRAPH
+ {0xAE50, 0x7508}, //7349 #CJK UNIFIED IDEOGRAPH
+ {0xAE51, 0x7509}, //7350 #CJK UNIFIED IDEOGRAPH
+ {0xAE52, 0x750A}, //7351 #CJK UNIFIED IDEOGRAPH
+ {0xAE53, 0x750B}, //7352 #CJK UNIFIED IDEOGRAPH
+ {0xAE54, 0x750C}, //7353 #CJK UNIFIED IDEOGRAPH
+ {0xAE55, 0x750E}, //7354 #CJK UNIFIED IDEOGRAPH
+ {0xAE56, 0x7510}, //7355 #CJK UNIFIED IDEOGRAPH
+ {0xAE57, 0x7512}, //7356 #CJK UNIFIED IDEOGRAPH
+ {0xAE58, 0x7514}, //7357 #CJK UNIFIED IDEOGRAPH
+ {0xAE59, 0x7515}, //7358 #CJK UNIFIED IDEOGRAPH
+ {0xAE5A, 0x7516}, //7359 #CJK UNIFIED IDEOGRAPH
+ {0xAE5B, 0x7517}, //7360 #CJK UNIFIED IDEOGRAPH
+ {0xAE5C, 0x751B}, //7361 #CJK UNIFIED IDEOGRAPH
+ {0xAE5D, 0x751D}, //7362 #CJK UNIFIED IDEOGRAPH
+ {0xAE5E, 0x751E}, //7363 #CJK UNIFIED IDEOGRAPH
+ {0xAE5F, 0x7520}, //7364 #CJK UNIFIED IDEOGRAPH
+ {0xAE60, 0x7521}, //7365 #CJK UNIFIED IDEOGRAPH
+ {0xAE61, 0x7522}, //7366 #CJK UNIFIED IDEOGRAPH
+ {0xAE62, 0x7523}, //7367 #CJK UNIFIED IDEOGRAPH
+ {0xAE63, 0x7524}, //7368 #CJK UNIFIED IDEOGRAPH
+ {0xAE64, 0x7526}, //7369 #CJK UNIFIED IDEOGRAPH
+ {0xAE65, 0x7527}, //7370 #CJK UNIFIED IDEOGRAPH
+ {0xAE66, 0x752A}, //7371 #CJK UNIFIED IDEOGRAPH
+ {0xAE67, 0x752E}, //7372 #CJK UNIFIED IDEOGRAPH
+ {0xAE68, 0x7534}, //7373 #CJK UNIFIED IDEOGRAPH
+ {0xAE69, 0x7536}, //7374 #CJK UNIFIED IDEOGRAPH
+ {0xAE6A, 0x7539}, //7375 #CJK UNIFIED IDEOGRAPH
+ {0xAE6B, 0x753C}, //7376 #CJK UNIFIED IDEOGRAPH
+ {0xAE6C, 0x753D}, //7377 #CJK UNIFIED IDEOGRAPH
+ {0xAE6D, 0x753F}, //7378 #CJK UNIFIED IDEOGRAPH
+ {0xAE6E, 0x7541}, //7379 #CJK UNIFIED IDEOGRAPH
+ {0xAE6F, 0x7542}, //7380 #CJK UNIFIED IDEOGRAPH
+ {0xAE70, 0x7543}, //7381 #CJK UNIFIED IDEOGRAPH
+ {0xAE71, 0x7544}, //7382 #CJK UNIFIED IDEOGRAPH
+ {0xAE72, 0x7546}, //7383 #CJK UNIFIED IDEOGRAPH
+ {0xAE73, 0x7547}, //7384 #CJK UNIFIED IDEOGRAPH
+ {0xAE74, 0x7549}, //7385 #CJK UNIFIED IDEOGRAPH
+ {0xAE75, 0x754A}, //7386 #CJK UNIFIED IDEOGRAPH
+ {0xAE76, 0x754D}, //7387 #CJK UNIFIED IDEOGRAPH
+ {0xAE77, 0x7550}, //7388 #CJK UNIFIED IDEOGRAPH
+ {0xAE78, 0x7551}, //7389 #CJK UNIFIED IDEOGRAPH
+ {0xAE79, 0x7552}, //7390 #CJK UNIFIED IDEOGRAPH
+ {0xAE7A, 0x7553}, //7391 #CJK UNIFIED IDEOGRAPH
+ {0xAE7B, 0x7555}, //7392 #CJK UNIFIED IDEOGRAPH
+ {0xAE7C, 0x7556}, //7393 #CJK UNIFIED IDEOGRAPH
+ {0xAE7D, 0x7557}, //7394 #CJK UNIFIED IDEOGRAPH
+ {0xAE7E, 0x7558}, //7395 #CJK UNIFIED IDEOGRAPH
+ {0xAE80, 0x755D}, //7396 #CJK UNIFIED IDEOGRAPH
+ {0xAE81, 0x755E}, //7397 #CJK UNIFIED IDEOGRAPH
+ {0xAE82, 0x755F}, //7398 #CJK UNIFIED IDEOGRAPH
+ {0xAE83, 0x7560}, //7399 #CJK UNIFIED IDEOGRAPH
+ {0xAE84, 0x7561}, //7400 #CJK UNIFIED IDEOGRAPH
+ {0xAE85, 0x7562}, //7401 #CJK UNIFIED IDEOGRAPH
+ {0xAE86, 0x7563}, //7402 #CJK UNIFIED IDEOGRAPH
+ {0xAE87, 0x7564}, //7403 #CJK UNIFIED IDEOGRAPH
+ {0xAE88, 0x7567}, //7404 #CJK UNIFIED IDEOGRAPH
+ {0xAE89, 0x7568}, //7405 #CJK UNIFIED IDEOGRAPH
+ {0xAE8A, 0x7569}, //7406 #CJK UNIFIED IDEOGRAPH
+ {0xAE8B, 0x756B}, //7407 #CJK UNIFIED IDEOGRAPH
+ {0xAE8C, 0x756C}, //7408 #CJK UNIFIED IDEOGRAPH
+ {0xAE8D, 0x756D}, //7409 #CJK UNIFIED IDEOGRAPH
+ {0xAE8E, 0x756E}, //7410 #CJK UNIFIED IDEOGRAPH
+ {0xAE8F, 0x756F}, //7411 #CJK UNIFIED IDEOGRAPH
+ {0xAE90, 0x7570}, //7412 #CJK UNIFIED IDEOGRAPH
+ {0xAE91, 0x7571}, //7413 #CJK UNIFIED IDEOGRAPH
+ {0xAE92, 0x7573}, //7414 #CJK UNIFIED IDEOGRAPH
+ {0xAE93, 0x7575}, //7415 #CJK UNIFIED IDEOGRAPH
+ {0xAE94, 0x7576}, //7416 #CJK UNIFIED IDEOGRAPH
+ {0xAE95, 0x7577}, //7417 #CJK UNIFIED IDEOGRAPH
+ {0xAE96, 0x757A}, //7418 #CJK UNIFIED IDEOGRAPH
+ {0xAE97, 0x757B}, //7419 #CJK UNIFIED IDEOGRAPH
+ {0xAE98, 0x757C}, //7420 #CJK UNIFIED IDEOGRAPH
+ {0xAE99, 0x757D}, //7421 #CJK UNIFIED IDEOGRAPH
+ {0xAE9A, 0x757E}, //7422 #CJK UNIFIED IDEOGRAPH
+ {0xAE9B, 0x7580}, //7423 #CJK UNIFIED IDEOGRAPH
+ {0xAE9C, 0x7581}, //7424 #CJK UNIFIED IDEOGRAPH
+ {0xAE9D, 0x7582}, //7425 #CJK UNIFIED IDEOGRAPH
+ {0xAE9E, 0x7584}, //7426 #CJK UNIFIED IDEOGRAPH
+ {0xAE9F, 0x7585}, //7427 #CJK UNIFIED IDEOGRAPH
+ {0xAEA0, 0x7587}, //7428 #CJK UNIFIED IDEOGRAPH
+ {0xAF40, 0x7588}, //7429 #CJK UNIFIED IDEOGRAPH
+ {0xAF41, 0x7589}, //7430 #CJK UNIFIED IDEOGRAPH
+ {0xAF42, 0x758A}, //7431 #CJK UNIFIED IDEOGRAPH
+ {0xAF43, 0x758C}, //7432 #CJK UNIFIED IDEOGRAPH
+ {0xAF44, 0x758D}, //7433 #CJK UNIFIED IDEOGRAPH
+ {0xAF45, 0x758E}, //7434 #CJK UNIFIED IDEOGRAPH
+ {0xAF46, 0x7590}, //7435 #CJK UNIFIED IDEOGRAPH
+ {0xAF47, 0x7593}, //7436 #CJK UNIFIED IDEOGRAPH
+ {0xAF48, 0x7595}, //7437 #CJK UNIFIED IDEOGRAPH
+ {0xAF49, 0x7598}, //7438 #CJK UNIFIED IDEOGRAPH
+ {0xAF4A, 0x759B}, //7439 #CJK UNIFIED IDEOGRAPH
+ {0xAF4B, 0x759C}, //7440 #CJK UNIFIED IDEOGRAPH
+ {0xAF4C, 0x759E}, //7441 #CJK UNIFIED IDEOGRAPH
+ {0xAF4D, 0x75A2}, //7442 #CJK UNIFIED IDEOGRAPH
+ {0xAF4E, 0x75A6}, //7443 #CJK UNIFIED IDEOGRAPH
+ {0xAF4F, 0x75A7}, //7444 #CJK UNIFIED IDEOGRAPH
+ {0xAF50, 0x75A8}, //7445 #CJK UNIFIED IDEOGRAPH
+ {0xAF51, 0x75A9}, //7446 #CJK UNIFIED IDEOGRAPH
+ {0xAF52, 0x75AA}, //7447 #CJK UNIFIED IDEOGRAPH
+ {0xAF53, 0x75AD}, //7448 #CJK UNIFIED IDEOGRAPH
+ {0xAF54, 0x75B6}, //7449 #CJK UNIFIED IDEOGRAPH
+ {0xAF55, 0x75B7}, //7450 #CJK UNIFIED IDEOGRAPH
+ {0xAF56, 0x75BA}, //7451 #CJK UNIFIED IDEOGRAPH
+ {0xAF57, 0x75BB}, //7452 #CJK UNIFIED IDEOGRAPH
+ {0xAF58, 0x75BF}, //7453 #CJK UNIFIED IDEOGRAPH
+ {0xAF59, 0x75C0}, //7454 #CJK UNIFIED IDEOGRAPH
+ {0xAF5A, 0x75C1}, //7455 #CJK UNIFIED IDEOGRAPH
+ {0xAF5B, 0x75C6}, //7456 #CJK UNIFIED IDEOGRAPH
+ {0xAF5C, 0x75CB}, //7457 #CJK UNIFIED IDEOGRAPH
+ {0xAF5D, 0x75CC}, //7458 #CJK UNIFIED IDEOGRAPH
+ {0xAF5E, 0x75CE}, //7459 #CJK UNIFIED IDEOGRAPH
+ {0xAF5F, 0x75CF}, //7460 #CJK UNIFIED IDEOGRAPH
+ {0xAF60, 0x75D0}, //7461 #CJK UNIFIED IDEOGRAPH
+ {0xAF61, 0x75D1}, //7462 #CJK UNIFIED IDEOGRAPH
+ {0xAF62, 0x75D3}, //7463 #CJK UNIFIED IDEOGRAPH
+ {0xAF63, 0x75D7}, //7464 #CJK UNIFIED IDEOGRAPH
+ {0xAF64, 0x75D9}, //7465 #CJK UNIFIED IDEOGRAPH
+ {0xAF65, 0x75DA}, //7466 #CJK UNIFIED IDEOGRAPH
+ {0xAF66, 0x75DC}, //7467 #CJK UNIFIED IDEOGRAPH
+ {0xAF67, 0x75DD}, //7468 #CJK UNIFIED IDEOGRAPH
+ {0xAF68, 0x75DF}, //7469 #CJK UNIFIED IDEOGRAPH
+ {0xAF69, 0x75E0}, //7470 #CJK UNIFIED IDEOGRAPH
+ {0xAF6A, 0x75E1}, //7471 #CJK UNIFIED IDEOGRAPH
+ {0xAF6B, 0x75E5}, //7472 #CJK UNIFIED IDEOGRAPH
+ {0xAF6C, 0x75E9}, //7473 #CJK UNIFIED IDEOGRAPH
+ {0xAF6D, 0x75EC}, //7474 #CJK UNIFIED IDEOGRAPH
+ {0xAF6E, 0x75ED}, //7475 #CJK UNIFIED IDEOGRAPH
+ {0xAF6F, 0x75EE}, //7476 #CJK UNIFIED IDEOGRAPH
+ {0xAF70, 0x75EF}, //7477 #CJK UNIFIED IDEOGRAPH
+ {0xAF71, 0x75F2}, //7478 #CJK UNIFIED IDEOGRAPH
+ {0xAF72, 0x75F3}, //7479 #CJK UNIFIED IDEOGRAPH
+ {0xAF73, 0x75F5}, //7480 #CJK UNIFIED IDEOGRAPH
+ {0xAF74, 0x75F6}, //7481 #CJK UNIFIED IDEOGRAPH
+ {0xAF75, 0x75F7}, //7482 #CJK UNIFIED IDEOGRAPH
+ {0xAF76, 0x75F8}, //7483 #CJK UNIFIED IDEOGRAPH
+ {0xAF77, 0x75FA}, //7484 #CJK UNIFIED IDEOGRAPH
+ {0xAF78, 0x75FB}, //7485 #CJK UNIFIED IDEOGRAPH
+ {0xAF79, 0x75FD}, //7486 #CJK UNIFIED IDEOGRAPH
+ {0xAF7A, 0x75FE}, //7487 #CJK UNIFIED IDEOGRAPH
+ {0xAF7B, 0x7602}, //7488 #CJK UNIFIED IDEOGRAPH
+ {0xAF7C, 0x7604}, //7489 #CJK UNIFIED IDEOGRAPH
+ {0xAF7D, 0x7606}, //7490 #CJK UNIFIED IDEOGRAPH
+ {0xAF7E, 0x7607}, //7491 #CJK UNIFIED IDEOGRAPH
+ {0xAF80, 0x7608}, //7492 #CJK UNIFIED IDEOGRAPH
+ {0xAF81, 0x7609}, //7493 #CJK UNIFIED IDEOGRAPH
+ {0xAF82, 0x760B}, //7494 #CJK UNIFIED IDEOGRAPH
+ {0xAF83, 0x760D}, //7495 #CJK UNIFIED IDEOGRAPH
+ {0xAF84, 0x760E}, //7496 #CJK UNIFIED IDEOGRAPH
+ {0xAF85, 0x760F}, //7497 #CJK UNIFIED IDEOGRAPH
+ {0xAF86, 0x7611}, //7498 #CJK UNIFIED IDEOGRAPH
+ {0xAF87, 0x7612}, //7499 #CJK UNIFIED IDEOGRAPH
+ {0xAF88, 0x7613}, //7500 #CJK UNIFIED IDEOGRAPH
+ {0xAF89, 0x7614}, //7501 #CJK UNIFIED IDEOGRAPH
+ {0xAF8A, 0x7616}, //7502 #CJK UNIFIED IDEOGRAPH
+ {0xAF8B, 0x761A}, //7503 #CJK UNIFIED IDEOGRAPH
+ {0xAF8C, 0x761C}, //7504 #CJK UNIFIED IDEOGRAPH
+ {0xAF8D, 0x761D}, //7505 #CJK UNIFIED IDEOGRAPH
+ {0xAF8E, 0x761E}, //7506 #CJK UNIFIED IDEOGRAPH
+ {0xAF8F, 0x7621}, //7507 #CJK UNIFIED IDEOGRAPH
+ {0xAF90, 0x7623}, //7508 #CJK UNIFIED IDEOGRAPH
+ {0xAF91, 0x7627}, //7509 #CJK UNIFIED IDEOGRAPH
+ {0xAF92, 0x7628}, //7510 #CJK UNIFIED IDEOGRAPH
+ {0xAF93, 0x762C}, //7511 #CJK UNIFIED IDEOGRAPH
+ {0xAF94, 0x762E}, //7512 #CJK UNIFIED IDEOGRAPH
+ {0xAF95, 0x762F}, //7513 #CJK UNIFIED IDEOGRAPH
+ {0xAF96, 0x7631}, //7514 #CJK UNIFIED IDEOGRAPH
+ {0xAF97, 0x7632}, //7515 #CJK UNIFIED IDEOGRAPH
+ {0xAF98, 0x7636}, //7516 #CJK UNIFIED IDEOGRAPH
+ {0xAF99, 0x7637}, //7517 #CJK UNIFIED IDEOGRAPH
+ {0xAF9A, 0x7639}, //7518 #CJK UNIFIED IDEOGRAPH
+ {0xAF9B, 0x763A}, //7519 #CJK UNIFIED IDEOGRAPH
+ {0xAF9C, 0x763B}, //7520 #CJK UNIFIED IDEOGRAPH
+ {0xAF9D, 0x763D}, //7521 #CJK UNIFIED IDEOGRAPH
+ {0xAF9E, 0x7641}, //7522 #CJK UNIFIED IDEOGRAPH
+ {0xAF9F, 0x7642}, //7523 #CJK UNIFIED IDEOGRAPH
+ {0xAFA0, 0x7644}, //7524 #CJK UNIFIED IDEOGRAPH
+ {0xB040, 0x7645}, //7525 #CJK UNIFIED IDEOGRAPH
+ {0xB041, 0x7646}, //7526 #CJK UNIFIED IDEOGRAPH
+ {0xB042, 0x7647}, //7527 #CJK UNIFIED IDEOGRAPH
+ {0xB043, 0x7648}, //7528 #CJK UNIFIED IDEOGRAPH
+ {0xB044, 0x7649}, //7529 #CJK UNIFIED IDEOGRAPH
+ {0xB045, 0x764A}, //7530 #CJK UNIFIED IDEOGRAPH
+ {0xB046, 0x764B}, //7531 #CJK UNIFIED IDEOGRAPH
+ {0xB047, 0x764E}, //7532 #CJK UNIFIED IDEOGRAPH
+ {0xB048, 0x764F}, //7533 #CJK UNIFIED IDEOGRAPH
+ {0xB049, 0x7650}, //7534 #CJK UNIFIED IDEOGRAPH
+ {0xB04A, 0x7651}, //7535 #CJK UNIFIED IDEOGRAPH
+ {0xB04B, 0x7652}, //7536 #CJK UNIFIED IDEOGRAPH
+ {0xB04C, 0x7653}, //7537 #CJK UNIFIED IDEOGRAPH
+ {0xB04D, 0x7655}, //7538 #CJK UNIFIED IDEOGRAPH
+ {0xB04E, 0x7657}, //7539 #CJK UNIFIED IDEOGRAPH
+ {0xB04F, 0x7658}, //7540 #CJK UNIFIED IDEOGRAPH
+ {0xB050, 0x7659}, //7541 #CJK UNIFIED IDEOGRAPH
+ {0xB051, 0x765A}, //7542 #CJK UNIFIED IDEOGRAPH
+ {0xB052, 0x765B}, //7543 #CJK UNIFIED IDEOGRAPH
+ {0xB053, 0x765D}, //7544 #CJK UNIFIED IDEOGRAPH
+ {0xB054, 0x765F}, //7545 #CJK UNIFIED IDEOGRAPH
+ {0xB055, 0x7660}, //7546 #CJK UNIFIED IDEOGRAPH
+ {0xB056, 0x7661}, //7547 #CJK UNIFIED IDEOGRAPH
+ {0xB057, 0x7662}, //7548 #CJK UNIFIED IDEOGRAPH
+ {0xB058, 0x7664}, //7549 #CJK UNIFIED IDEOGRAPH
+ {0xB059, 0x7665}, //7550 #CJK UNIFIED IDEOGRAPH
+ {0xB05A, 0x7666}, //7551 #CJK UNIFIED IDEOGRAPH
+ {0xB05B, 0x7667}, //7552 #CJK UNIFIED IDEOGRAPH
+ {0xB05C, 0x7668}, //7553 #CJK UNIFIED IDEOGRAPH
+ {0xB05D, 0x7669}, //7554 #CJK UNIFIED IDEOGRAPH
+ {0xB05E, 0x766A}, //7555 #CJK UNIFIED IDEOGRAPH
+ {0xB05F, 0x766C}, //7556 #CJK UNIFIED IDEOGRAPH
+ {0xB060, 0x766D}, //7557 #CJK UNIFIED IDEOGRAPH
+ {0xB061, 0x766E}, //7558 #CJK UNIFIED IDEOGRAPH
+ {0xB062, 0x7670}, //7559 #CJK UNIFIED IDEOGRAPH
+ {0xB063, 0x7671}, //7560 #CJK UNIFIED IDEOGRAPH
+ {0xB064, 0x7672}, //7561 #CJK UNIFIED IDEOGRAPH
+ {0xB065, 0x7673}, //7562 #CJK UNIFIED IDEOGRAPH
+ {0xB066, 0x7674}, //7563 #CJK UNIFIED IDEOGRAPH
+ {0xB067, 0x7675}, //7564 #CJK UNIFIED IDEOGRAPH
+ {0xB068, 0x7676}, //7565 #CJK UNIFIED IDEOGRAPH
+ {0xB069, 0x7677}, //7566 #CJK UNIFIED IDEOGRAPH
+ {0xB06A, 0x7679}, //7567 #CJK UNIFIED IDEOGRAPH
+ {0xB06B, 0x767A}, //7568 #CJK UNIFIED IDEOGRAPH
+ {0xB06C, 0x767C}, //7569 #CJK UNIFIED IDEOGRAPH
+ {0xB06D, 0x767F}, //7570 #CJK UNIFIED IDEOGRAPH
+ {0xB06E, 0x7680}, //7571 #CJK UNIFIED IDEOGRAPH
+ {0xB06F, 0x7681}, //7572 #CJK UNIFIED IDEOGRAPH
+ {0xB070, 0x7683}, //7573 #CJK UNIFIED IDEOGRAPH
+ {0xB071, 0x7685}, //7574 #CJK UNIFIED IDEOGRAPH
+ {0xB072, 0x7689}, //7575 #CJK UNIFIED IDEOGRAPH
+ {0xB073, 0x768A}, //7576 #CJK UNIFIED IDEOGRAPH
+ {0xB074, 0x768C}, //7577 #CJK UNIFIED IDEOGRAPH
+ {0xB075, 0x768D}, //7578 #CJK UNIFIED IDEOGRAPH
+ {0xB076, 0x768F}, //7579 #CJK UNIFIED IDEOGRAPH
+ {0xB077, 0x7690}, //7580 #CJK UNIFIED IDEOGRAPH
+ {0xB078, 0x7692}, //7581 #CJK UNIFIED IDEOGRAPH
+ {0xB079, 0x7694}, //7582 #CJK UNIFIED IDEOGRAPH
+ {0xB07A, 0x7695}, //7583 #CJK UNIFIED IDEOGRAPH
+ {0xB07B, 0x7697}, //7584 #CJK UNIFIED IDEOGRAPH
+ {0xB07C, 0x7698}, //7585 #CJK UNIFIED IDEOGRAPH
+ {0xB07D, 0x769A}, //7586 #CJK UNIFIED IDEOGRAPH
+ {0xB07E, 0x769B}, //7587 #CJK UNIFIED IDEOGRAPH
+ {0xB080, 0x769C}, //7588 #CJK UNIFIED IDEOGRAPH
+ {0xB081, 0x769D}, //7589 #CJK UNIFIED IDEOGRAPH
+ {0xB082, 0x769E}, //7590 #CJK UNIFIED IDEOGRAPH
+ {0xB083, 0x769F}, //7591 #CJK UNIFIED IDEOGRAPH
+ {0xB084, 0x76A0}, //7592 #CJK UNIFIED IDEOGRAPH
+ {0xB085, 0x76A1}, //7593 #CJK UNIFIED IDEOGRAPH
+ {0xB086, 0x76A2}, //7594 #CJK UNIFIED IDEOGRAPH
+ {0xB087, 0x76A3}, //7595 #CJK UNIFIED IDEOGRAPH
+ {0xB088, 0x76A5}, //7596 #CJK UNIFIED IDEOGRAPH
+ {0xB089, 0x76A6}, //7597 #CJK UNIFIED IDEOGRAPH
+ {0xB08A, 0x76A7}, //7598 #CJK UNIFIED IDEOGRAPH
+ {0xB08B, 0x76A8}, //7599 #CJK UNIFIED IDEOGRAPH
+ {0xB08C, 0x76A9}, //7600 #CJK UNIFIED IDEOGRAPH
+ {0xB08D, 0x76AA}, //7601 #CJK UNIFIED IDEOGRAPH
+ {0xB08E, 0x76AB}, //7602 #CJK UNIFIED IDEOGRAPH
+ {0xB08F, 0x76AC}, //7603 #CJK UNIFIED IDEOGRAPH
+ {0xB090, 0x76AD}, //7604 #CJK UNIFIED IDEOGRAPH
+ {0xB091, 0x76AF}, //7605 #CJK UNIFIED IDEOGRAPH
+ {0xB092, 0x76B0}, //7606 #CJK UNIFIED IDEOGRAPH
+ {0xB093, 0x76B3}, //7607 #CJK UNIFIED IDEOGRAPH
+ {0xB094, 0x76B5}, //7608 #CJK UNIFIED IDEOGRAPH
+ {0xB095, 0x76B6}, //7609 #CJK UNIFIED IDEOGRAPH
+ {0xB096, 0x76B7}, //7610 #CJK UNIFIED IDEOGRAPH
+ {0xB097, 0x76B8}, //7611 #CJK UNIFIED IDEOGRAPH
+ {0xB098, 0x76B9}, //7612 #CJK UNIFIED IDEOGRAPH
+ {0xB099, 0x76BA}, //7613 #CJK UNIFIED IDEOGRAPH
+ {0xB09A, 0x76BB}, //7614 #CJK UNIFIED IDEOGRAPH
+ {0xB09B, 0x76BC}, //7615 #CJK UNIFIED IDEOGRAPH
+ {0xB09C, 0x76BD}, //7616 #CJK UNIFIED IDEOGRAPH
+ {0xB09D, 0x76BE}, //7617 #CJK UNIFIED IDEOGRAPH
+ {0xB09E, 0x76C0}, //7618 #CJK UNIFIED IDEOGRAPH
+ {0xB09F, 0x76C1}, //7619 #CJK UNIFIED IDEOGRAPH
+ {0xB0A0, 0x76C3}, //7620 #CJK UNIFIED IDEOGRAPH
+ {0xB0A1, 0x554A}, //7621 #CJK UNIFIED IDEOGRAPH
+ {0xB0A2, 0x963F}, //7622 #CJK UNIFIED IDEOGRAPH
+ {0xB0A3, 0x57C3}, //7623 #CJK UNIFIED IDEOGRAPH
+ {0xB0A4, 0x6328}, //7624 #CJK UNIFIED IDEOGRAPH
+ {0xB0A5, 0x54CE}, //7625 #CJK UNIFIED IDEOGRAPH
+ {0xB0A6, 0x5509}, //7626 #CJK UNIFIED IDEOGRAPH
+ {0xB0A7, 0x54C0}, //7627 #CJK UNIFIED IDEOGRAPH
+ {0xB0A8, 0x7691}, //7628 #CJK UNIFIED IDEOGRAPH
+ {0xB0A9, 0x764C}, //7629 #CJK UNIFIED IDEOGRAPH
+ {0xB0AA, 0x853C}, //7630 #CJK UNIFIED IDEOGRAPH
+ {0xB0AB, 0x77EE}, //7631 #CJK UNIFIED IDEOGRAPH
+ {0xB0AC, 0x827E}, //7632 #CJK UNIFIED IDEOGRAPH
+ {0xB0AD, 0x788D}, //7633 #CJK UNIFIED IDEOGRAPH
+ {0xB0AE, 0x7231}, //7634 #CJK UNIFIED IDEOGRAPH
+ {0xB0AF, 0x9698}, //7635 #CJK UNIFIED IDEOGRAPH
+ {0xB0B0, 0x978D}, //7636 #CJK UNIFIED IDEOGRAPH
+ {0xB0B1, 0x6C28}, //7637 #CJK UNIFIED IDEOGRAPH
+ {0xB0B2, 0x5B89}, //7638 #CJK UNIFIED IDEOGRAPH
+ {0xB0B3, 0x4FFA}, //7639 #CJK UNIFIED IDEOGRAPH
+ {0xB0B4, 0x6309}, //7640 #CJK UNIFIED IDEOGRAPH
+ {0xB0B5, 0x6697}, //7641 #CJK UNIFIED IDEOGRAPH
+ {0xB0B6, 0x5CB8}, //7642 #CJK UNIFIED IDEOGRAPH
+ {0xB0B7, 0x80FA}, //7643 #CJK UNIFIED IDEOGRAPH
+ {0xB0B8, 0x6848}, //7644 #CJK UNIFIED IDEOGRAPH
+ {0xB0B9, 0x80AE}, //7645 #CJK UNIFIED IDEOGRAPH
+ {0xB0BA, 0x6602}, //7646 #CJK UNIFIED IDEOGRAPH
+ {0xB0BB, 0x76CE}, //7647 #CJK UNIFIED IDEOGRAPH
+ {0xB0BC, 0x51F9}, //7648 #CJK UNIFIED IDEOGRAPH
+ {0xB0BD, 0x6556}, //7649 #CJK UNIFIED IDEOGRAPH
+ {0xB0BE, 0x71AC}, //7650 #CJK UNIFIED IDEOGRAPH
+ {0xB0BF, 0x7FF1}, //7651 #CJK UNIFIED IDEOGRAPH
+ {0xB0C0, 0x8884}, //7652 #CJK UNIFIED IDEOGRAPH
+ {0xB0C1, 0x50B2}, //7653 #CJK UNIFIED IDEOGRAPH
+ {0xB0C2, 0x5965}, //7654 #CJK UNIFIED IDEOGRAPH
+ {0xB0C3, 0x61CA}, //7655 #CJK UNIFIED IDEOGRAPH
+ {0xB0C4, 0x6FB3}, //7656 #CJK UNIFIED IDEOGRAPH
+ {0xB0C5, 0x82AD}, //7657 #CJK UNIFIED IDEOGRAPH
+ {0xB0C6, 0x634C}, //7658 #CJK UNIFIED IDEOGRAPH
+ {0xB0C7, 0x6252}, //7659 #CJK UNIFIED IDEOGRAPH
+ {0xB0C8, 0x53ED}, //7660 #CJK UNIFIED IDEOGRAPH
+ {0xB0C9, 0x5427}, //7661 #CJK UNIFIED IDEOGRAPH
+ {0xB0CA, 0x7B06}, //7662 #CJK UNIFIED IDEOGRAPH
+ {0xB0CB, 0x516B}, //7663 #CJK UNIFIED IDEOGRAPH
+ {0xB0CC, 0x75A4}, //7664 #CJK UNIFIED IDEOGRAPH
+ {0xB0CD, 0x5DF4}, //7665 #CJK UNIFIED IDEOGRAPH
+ {0xB0CE, 0x62D4}, //7666 #CJK UNIFIED IDEOGRAPH
+ {0xB0CF, 0x8DCB}, //7667 #CJK UNIFIED IDEOGRAPH
+ {0xB0D0, 0x9776}, //7668 #CJK UNIFIED IDEOGRAPH
+ {0xB0D1, 0x628A}, //7669 #CJK UNIFIED IDEOGRAPH
+ {0xB0D2, 0x8019}, //7670 #CJK UNIFIED IDEOGRAPH
+ {0xB0D3, 0x575D}, //7671 #CJK UNIFIED IDEOGRAPH
+ {0xB0D4, 0x9738}, //7672 #CJK UNIFIED IDEOGRAPH
+ {0xB0D5, 0x7F62}, //7673 #CJK UNIFIED IDEOGRAPH
+ {0xB0D6, 0x7238}, //7674 #CJK UNIFIED IDEOGRAPH
+ {0xB0D7, 0x767D}, //7675 #CJK UNIFIED IDEOGRAPH
+ {0xB0D8, 0x67CF}, //7676 #CJK UNIFIED IDEOGRAPH
+ {0xB0D9, 0x767E}, //7677 #CJK UNIFIED IDEOGRAPH
+ {0xB0DA, 0x6446}, //7678 #CJK UNIFIED IDEOGRAPH
+ {0xB0DB, 0x4F70}, //7679 #CJK UNIFIED IDEOGRAPH
+ {0xB0DC, 0x8D25}, //7680 #CJK UNIFIED IDEOGRAPH
+ {0xB0DD, 0x62DC}, //7681 #CJK UNIFIED IDEOGRAPH
+ {0xB0DE, 0x7A17}, //7682 #CJK UNIFIED IDEOGRAPH
+ {0xB0DF, 0x6591}, //7683 #CJK UNIFIED IDEOGRAPH
+ {0xB0E0, 0x73ED}, //7684 #CJK UNIFIED IDEOGRAPH
+ {0xB0E1, 0x642C}, //7685 #CJK UNIFIED IDEOGRAPH
+ {0xB0E2, 0x6273}, //7686 #CJK UNIFIED IDEOGRAPH
+ {0xB0E3, 0x822C}, //7687 #CJK UNIFIED IDEOGRAPH
+ {0xB0E4, 0x9881}, //7688 #CJK UNIFIED IDEOGRAPH
+ {0xB0E5, 0x677F}, //7689 #CJK UNIFIED IDEOGRAPH
+ {0xB0E6, 0x7248}, //7690 #CJK UNIFIED IDEOGRAPH
+ {0xB0E7, 0x626E}, //7691 #CJK UNIFIED IDEOGRAPH
+ {0xB0E8, 0x62CC}, //7692 #CJK UNIFIED IDEOGRAPH
+ {0xB0E9, 0x4F34}, //7693 #CJK UNIFIED IDEOGRAPH
+ {0xB0EA, 0x74E3}, //7694 #CJK UNIFIED IDEOGRAPH
+ {0xB0EB, 0x534A}, //7695 #CJK UNIFIED IDEOGRAPH
+ {0xB0EC, 0x529E}, //7696 #CJK UNIFIED IDEOGRAPH
+ {0xB0ED, 0x7ECA}, //7697 #CJK UNIFIED IDEOGRAPH
+ {0xB0EE, 0x90A6}, //7698 #CJK UNIFIED IDEOGRAPH
+ {0xB0EF, 0x5E2E}, //7699 #CJK UNIFIED IDEOGRAPH
+ {0xB0F0, 0x6886}, //7700 #CJK UNIFIED IDEOGRAPH
+ {0xB0F1, 0x699C}, //7701 #CJK UNIFIED IDEOGRAPH
+ {0xB0F2, 0x8180}, //7702 #CJK UNIFIED IDEOGRAPH
+ {0xB0F3, 0x7ED1}, //7703 #CJK UNIFIED IDEOGRAPH
+ {0xB0F4, 0x68D2}, //7704 #CJK UNIFIED IDEOGRAPH
+ {0xB0F5, 0x78C5}, //7705 #CJK UNIFIED IDEOGRAPH
+ {0xB0F6, 0x868C}, //7706 #CJK UNIFIED IDEOGRAPH
+ {0xB0F7, 0x9551}, //7707 #CJK UNIFIED IDEOGRAPH
+ {0xB0F8, 0x508D}, //7708 #CJK UNIFIED IDEOGRAPH
+ {0xB0F9, 0x8C24}, //7709 #CJK UNIFIED IDEOGRAPH
+ {0xB0FA, 0x82DE}, //7710 #CJK UNIFIED IDEOGRAPH
+ {0xB0FB, 0x80DE}, //7711 #CJK UNIFIED IDEOGRAPH
+ {0xB0FC, 0x5305}, //7712 #CJK UNIFIED IDEOGRAPH
+ {0xB0FD, 0x8912}, //7713 #CJK UNIFIED IDEOGRAPH
+ {0xB0FE, 0x5265}, //7714 #CJK UNIFIED IDEOGRAPH
+ {0xB140, 0x76C4}, //7715 #CJK UNIFIED IDEOGRAPH
+ {0xB141, 0x76C7}, //7716 #CJK UNIFIED IDEOGRAPH
+ {0xB142, 0x76C9}, //7717 #CJK UNIFIED IDEOGRAPH
+ {0xB143, 0x76CB}, //7718 #CJK UNIFIED IDEOGRAPH
+ {0xB144, 0x76CC}, //7719 #CJK UNIFIED IDEOGRAPH
+ {0xB145, 0x76D3}, //7720 #CJK UNIFIED IDEOGRAPH
+ {0xB146, 0x76D5}, //7721 #CJK UNIFIED IDEOGRAPH
+ {0xB147, 0x76D9}, //7722 #CJK UNIFIED IDEOGRAPH
+ {0xB148, 0x76DA}, //7723 #CJK UNIFIED IDEOGRAPH
+ {0xB149, 0x76DC}, //7724 #CJK UNIFIED IDEOGRAPH
+ {0xB14A, 0x76DD}, //7725 #CJK UNIFIED IDEOGRAPH
+ {0xB14B, 0x76DE}, //7726 #CJK UNIFIED IDEOGRAPH
+ {0xB14C, 0x76E0}, //7727 #CJK UNIFIED IDEOGRAPH
+ {0xB14D, 0x76E1}, //7728 #CJK UNIFIED IDEOGRAPH
+ {0xB14E, 0x76E2}, //7729 #CJK UNIFIED IDEOGRAPH
+ {0xB14F, 0x76E3}, //7730 #CJK UNIFIED IDEOGRAPH
+ {0xB150, 0x76E4}, //7731 #CJK UNIFIED IDEOGRAPH
+ {0xB151, 0x76E6}, //7732 #CJK UNIFIED IDEOGRAPH
+ {0xB152, 0x76E7}, //7733 #CJK UNIFIED IDEOGRAPH
+ {0xB153, 0x76E8}, //7734 #CJK UNIFIED IDEOGRAPH
+ {0xB154, 0x76E9}, //7735 #CJK UNIFIED IDEOGRAPH
+ {0xB155, 0x76EA}, //7736 #CJK UNIFIED IDEOGRAPH
+ {0xB156, 0x76EB}, //7737 #CJK UNIFIED IDEOGRAPH
+ {0xB157, 0x76EC}, //7738 #CJK UNIFIED IDEOGRAPH
+ {0xB158, 0x76ED}, //7739 #CJK UNIFIED IDEOGRAPH
+ {0xB159, 0x76F0}, //7740 #CJK UNIFIED IDEOGRAPH
+ {0xB15A, 0x76F3}, //7741 #CJK UNIFIED IDEOGRAPH
+ {0xB15B, 0x76F5}, //7742 #CJK UNIFIED IDEOGRAPH
+ {0xB15C, 0x76F6}, //7743 #CJK UNIFIED IDEOGRAPH
+ {0xB15D, 0x76F7}, //7744 #CJK UNIFIED IDEOGRAPH
+ {0xB15E, 0x76FA}, //7745 #CJK UNIFIED IDEOGRAPH
+ {0xB15F, 0x76FB}, //7746 #CJK UNIFIED IDEOGRAPH
+ {0xB160, 0x76FD}, //7747 #CJK UNIFIED IDEOGRAPH
+ {0xB161, 0x76FF}, //7748 #CJK UNIFIED IDEOGRAPH
+ {0xB162, 0x7700}, //7749 #CJK UNIFIED IDEOGRAPH
+ {0xB163, 0x7702}, //7750 #CJK UNIFIED IDEOGRAPH
+ {0xB164, 0x7703}, //7751 #CJK UNIFIED IDEOGRAPH
+ {0xB165, 0x7705}, //7752 #CJK UNIFIED IDEOGRAPH
+ {0xB166, 0x7706}, //7753 #CJK UNIFIED IDEOGRAPH
+ {0xB167, 0x770A}, //7754 #CJK UNIFIED IDEOGRAPH
+ {0xB168, 0x770C}, //7755 #CJK UNIFIED IDEOGRAPH
+ {0xB169, 0x770E}, //7756 #CJK UNIFIED IDEOGRAPH
+ {0xB16A, 0x770F}, //7757 #CJK UNIFIED IDEOGRAPH
+ {0xB16B, 0x7710}, //7758 #CJK UNIFIED IDEOGRAPH
+ {0xB16C, 0x7711}, //7759 #CJK UNIFIED IDEOGRAPH
+ {0xB16D, 0x7712}, //7760 #CJK UNIFIED IDEOGRAPH
+ {0xB16E, 0x7713}, //7761 #CJK UNIFIED IDEOGRAPH
+ {0xB16F, 0x7714}, //7762 #CJK UNIFIED IDEOGRAPH
+ {0xB170, 0x7715}, //7763 #CJK UNIFIED IDEOGRAPH
+ {0xB171, 0x7716}, //7764 #CJK UNIFIED IDEOGRAPH
+ {0xB172, 0x7717}, //7765 #CJK UNIFIED IDEOGRAPH
+ {0xB173, 0x7718}, //7766 #CJK UNIFIED IDEOGRAPH
+ {0xB174, 0x771B}, //7767 #CJK UNIFIED IDEOGRAPH
+ {0xB175, 0x771C}, //7768 #CJK UNIFIED IDEOGRAPH
+ {0xB176, 0x771D}, //7769 #CJK UNIFIED IDEOGRAPH
+ {0xB177, 0x771E}, //7770 #CJK UNIFIED IDEOGRAPH
+ {0xB178, 0x7721}, //7771 #CJK UNIFIED IDEOGRAPH
+ {0xB179, 0x7723}, //7772 #CJK UNIFIED IDEOGRAPH
+ {0xB17A, 0x7724}, //7773 #CJK UNIFIED IDEOGRAPH
+ {0xB17B, 0x7725}, //7774 #CJK UNIFIED IDEOGRAPH
+ {0xB17C, 0x7727}, //7775 #CJK UNIFIED IDEOGRAPH
+ {0xB17D, 0x772A}, //7776 #CJK UNIFIED IDEOGRAPH
+ {0xB17E, 0x772B}, //7777 #CJK UNIFIED IDEOGRAPH
+ {0xB180, 0x772C}, //7778 #CJK UNIFIED IDEOGRAPH
+ {0xB181, 0x772E}, //7779 #CJK UNIFIED IDEOGRAPH
+ {0xB182, 0x7730}, //7780 #CJK UNIFIED IDEOGRAPH
+ {0xB183, 0x7731}, //7781 #CJK UNIFIED IDEOGRAPH
+ {0xB184, 0x7732}, //7782 #CJK UNIFIED IDEOGRAPH
+ {0xB185, 0x7733}, //7783 #CJK UNIFIED IDEOGRAPH
+ {0xB186, 0x7734}, //7784 #CJK UNIFIED IDEOGRAPH
+ {0xB187, 0x7739}, //7785 #CJK UNIFIED IDEOGRAPH
+ {0xB188, 0x773B}, //7786 #CJK UNIFIED IDEOGRAPH
+ {0xB189, 0x773D}, //7787 #CJK UNIFIED IDEOGRAPH
+ {0xB18A, 0x773E}, //7788 #CJK UNIFIED IDEOGRAPH
+ {0xB18B, 0x773F}, //7789 #CJK UNIFIED IDEOGRAPH
+ {0xB18C, 0x7742}, //7790 #CJK UNIFIED IDEOGRAPH
+ {0xB18D, 0x7744}, //7791 #CJK UNIFIED IDEOGRAPH
+ {0xB18E, 0x7745}, //7792 #CJK UNIFIED IDEOGRAPH
+ {0xB18F, 0x7746}, //7793 #CJK UNIFIED IDEOGRAPH
+ {0xB190, 0x7748}, //7794 #CJK UNIFIED IDEOGRAPH
+ {0xB191, 0x7749}, //7795 #CJK UNIFIED IDEOGRAPH
+ {0xB192, 0x774A}, //7796 #CJK UNIFIED IDEOGRAPH
+ {0xB193, 0x774B}, //7797 #CJK UNIFIED IDEOGRAPH
+ {0xB194, 0x774C}, //7798 #CJK UNIFIED IDEOGRAPH
+ {0xB195, 0x774D}, //7799 #CJK UNIFIED IDEOGRAPH
+ {0xB196, 0x774E}, //7800 #CJK UNIFIED IDEOGRAPH
+ {0xB197, 0x774F}, //7801 #CJK UNIFIED IDEOGRAPH
+ {0xB198, 0x7752}, //7802 #CJK UNIFIED IDEOGRAPH
+ {0xB199, 0x7753}, //7803 #CJK UNIFIED IDEOGRAPH
+ {0xB19A, 0x7754}, //7804 #CJK UNIFIED IDEOGRAPH
+ {0xB19B, 0x7755}, //7805 #CJK UNIFIED IDEOGRAPH
+ {0xB19C, 0x7756}, //7806 #CJK UNIFIED IDEOGRAPH
+ {0xB19D, 0x7757}, //7807 #CJK UNIFIED IDEOGRAPH
+ {0xB19E, 0x7758}, //7808 #CJK UNIFIED IDEOGRAPH
+ {0xB19F, 0x7759}, //7809 #CJK UNIFIED IDEOGRAPH
+ {0xB1A0, 0x775C}, //7810 #CJK UNIFIED IDEOGRAPH
+ {0xB1A1, 0x8584}, //7811 #CJK UNIFIED IDEOGRAPH
+ {0xB1A2, 0x96F9}, //7812 #CJK UNIFIED IDEOGRAPH
+ {0xB1A3, 0x4FDD}, //7813 #CJK UNIFIED IDEOGRAPH
+ {0xB1A4, 0x5821}, //7814 #CJK UNIFIED IDEOGRAPH
+ {0xB1A5, 0x9971}, //7815 #CJK UNIFIED IDEOGRAPH
+ {0xB1A6, 0x5B9D}, //7816 #CJK UNIFIED IDEOGRAPH
+ {0xB1A7, 0x62B1}, //7817 #CJK UNIFIED IDEOGRAPH
+ {0xB1A8, 0x62A5}, //7818 #CJK UNIFIED IDEOGRAPH
+ {0xB1A9, 0x66B4}, //7819 #CJK UNIFIED IDEOGRAPH
+ {0xB1AA, 0x8C79}, //7820 #CJK UNIFIED IDEOGRAPH
+ {0xB1AB, 0x9C8D}, //7821 #CJK UNIFIED IDEOGRAPH
+ {0xB1AC, 0x7206}, //7822 #CJK UNIFIED IDEOGRAPH
+ {0xB1AD, 0x676F}, //7823 #CJK UNIFIED IDEOGRAPH
+ {0xB1AE, 0x7891}, //7824 #CJK UNIFIED IDEOGRAPH
+ {0xB1AF, 0x60B2}, //7825 #CJK UNIFIED IDEOGRAPH
+ {0xB1B0, 0x5351}, //7826 #CJK UNIFIED IDEOGRAPH
+ {0xB1B1, 0x5317}, //7827 #CJK UNIFIED IDEOGRAPH
+ {0xB1B2, 0x8F88}, //7828 #CJK UNIFIED IDEOGRAPH
+ {0xB1B3, 0x80CC}, //7829 #CJK UNIFIED IDEOGRAPH
+ {0xB1B4, 0x8D1D}, //7830 #CJK UNIFIED IDEOGRAPH
+ {0xB1B5, 0x94A1}, //7831 #CJK UNIFIED IDEOGRAPH
+ {0xB1B6, 0x500D}, //7832 #CJK UNIFIED IDEOGRAPH
+ {0xB1B7, 0x72C8}, //7833 #CJK UNIFIED IDEOGRAPH
+ {0xB1B8, 0x5907}, //7834 #CJK UNIFIED IDEOGRAPH
+ {0xB1B9, 0x60EB}, //7835 #CJK UNIFIED IDEOGRAPH
+ {0xB1BA, 0x7119}, //7836 #CJK UNIFIED IDEOGRAPH
+ {0xB1BB, 0x88AB}, //7837 #CJK UNIFIED IDEOGRAPH
+ {0xB1BC, 0x5954}, //7838 #CJK UNIFIED IDEOGRAPH
+ {0xB1BD, 0x82EF}, //7839 #CJK UNIFIED IDEOGRAPH
+ {0xB1BE, 0x672C}, //7840 #CJK UNIFIED IDEOGRAPH
+ {0xB1BF, 0x7B28}, //7841 #CJK UNIFIED IDEOGRAPH
+ {0xB1C0, 0x5D29}, //7842 #CJK UNIFIED IDEOGRAPH
+ {0xB1C1, 0x7EF7}, //7843 #CJK UNIFIED IDEOGRAPH
+ {0xB1C2, 0x752D}, //7844 #CJK UNIFIED IDEOGRAPH
+ {0xB1C3, 0x6CF5}, //7845 #CJK UNIFIED IDEOGRAPH
+ {0xB1C4, 0x8E66}, //7846 #CJK UNIFIED IDEOGRAPH
+ {0xB1C5, 0x8FF8}, //7847 #CJK UNIFIED IDEOGRAPH
+ {0xB1C6, 0x903C}, //7848 #CJK UNIFIED IDEOGRAPH
+ {0xB1C7, 0x9F3B}, //7849 #CJK UNIFIED IDEOGRAPH
+ {0xB1C8, 0x6BD4}, //7850 #CJK UNIFIED IDEOGRAPH
+ {0xB1C9, 0x9119}, //7851 #CJK UNIFIED IDEOGRAPH
+ {0xB1CA, 0x7B14}, //7852 #CJK UNIFIED IDEOGRAPH
+ {0xB1CB, 0x5F7C}, //7853 #CJK UNIFIED IDEOGRAPH
+ {0xB1CC, 0x78A7}, //7854 #CJK UNIFIED IDEOGRAPH
+ {0xB1CD, 0x84D6}, //7855 #CJK UNIFIED IDEOGRAPH
+ {0xB1CE, 0x853D}, //7856 #CJK UNIFIED IDEOGRAPH
+ {0xB1CF, 0x6BD5}, //7857 #CJK UNIFIED IDEOGRAPH
+ {0xB1D0, 0x6BD9}, //7858 #CJK UNIFIED IDEOGRAPH
+ {0xB1D1, 0x6BD6}, //7859 #CJK UNIFIED IDEOGRAPH
+ {0xB1D2, 0x5E01}, //7860 #CJK UNIFIED IDEOGRAPH
+ {0xB1D3, 0x5E87}, //7861 #CJK UNIFIED IDEOGRAPH
+ {0xB1D4, 0x75F9}, //7862 #CJK UNIFIED IDEOGRAPH
+ {0xB1D5, 0x95ED}, //7863 #CJK UNIFIED IDEOGRAPH
+ {0xB1D6, 0x655D}, //7864 #CJK UNIFIED IDEOGRAPH
+ {0xB1D7, 0x5F0A}, //7865 #CJK UNIFIED IDEOGRAPH
+ {0xB1D8, 0x5FC5}, //7866 #CJK UNIFIED IDEOGRAPH
+ {0xB1D9, 0x8F9F}, //7867 #CJK UNIFIED IDEOGRAPH
+ {0xB1DA, 0x58C1}, //7868 #CJK UNIFIED IDEOGRAPH
+ {0xB1DB, 0x81C2}, //7869 #CJK UNIFIED IDEOGRAPH
+ {0xB1DC, 0x907F}, //7870 #CJK UNIFIED IDEOGRAPH
+ {0xB1DD, 0x965B}, //7871 #CJK UNIFIED IDEOGRAPH
+ {0xB1DE, 0x97AD}, //7872 #CJK UNIFIED IDEOGRAPH
+ {0xB1DF, 0x8FB9}, //7873 #CJK UNIFIED IDEOGRAPH
+ {0xB1E0, 0x7F16}, //7874 #CJK UNIFIED IDEOGRAPH
+ {0xB1E1, 0x8D2C}, //7875 #CJK UNIFIED IDEOGRAPH
+ {0xB1E2, 0x6241}, //7876 #CJK UNIFIED IDEOGRAPH
+ {0xB1E3, 0x4FBF}, //7877 #CJK UNIFIED IDEOGRAPH
+ {0xB1E4, 0x53D8}, //7878 #CJK UNIFIED IDEOGRAPH
+ {0xB1E5, 0x535E}, //7879 #CJK UNIFIED IDEOGRAPH
+ {0xB1E6, 0x8FA8}, //7880 #CJK UNIFIED IDEOGRAPH
+ {0xB1E7, 0x8FA9}, //7881 #CJK UNIFIED IDEOGRAPH
+ {0xB1E8, 0x8FAB}, //7882 #CJK UNIFIED IDEOGRAPH
+ {0xB1E9, 0x904D}, //7883 #CJK UNIFIED IDEOGRAPH
+ {0xB1EA, 0x6807}, //7884 #CJK UNIFIED IDEOGRAPH
+ {0xB1EB, 0x5F6A}, //7885 #CJK UNIFIED IDEOGRAPH
+ {0xB1EC, 0x8198}, //7886 #CJK UNIFIED IDEOGRAPH
+ {0xB1ED, 0x8868}, //7887 #CJK UNIFIED IDEOGRAPH
+ {0xB1EE, 0x9CD6}, //7888 #CJK UNIFIED IDEOGRAPH
+ {0xB1EF, 0x618B}, //7889 #CJK UNIFIED IDEOGRAPH
+ {0xB1F0, 0x522B}, //7890 #CJK UNIFIED IDEOGRAPH
+ {0xB1F1, 0x762A}, //7891 #CJK UNIFIED IDEOGRAPH
+ {0xB1F2, 0x5F6C}, //7892 #CJK UNIFIED IDEOGRAPH
+ {0xB1F3, 0x658C}, //7893 #CJK UNIFIED IDEOGRAPH
+ {0xB1F4, 0x6FD2}, //7894 #CJK UNIFIED IDEOGRAPH
+ {0xB1F5, 0x6EE8}, //7895 #CJK UNIFIED IDEOGRAPH
+ {0xB1F6, 0x5BBE}, //7896 #CJK UNIFIED IDEOGRAPH
+ {0xB1F7, 0x6448}, //7897 #CJK UNIFIED IDEOGRAPH
+ {0xB1F8, 0x5175}, //7898 #CJK UNIFIED IDEOGRAPH
+ {0xB1F9, 0x51B0}, //7899 #CJK UNIFIED IDEOGRAPH
+ {0xB1FA, 0x67C4}, //7900 #CJK UNIFIED IDEOGRAPH
+ {0xB1FB, 0x4E19}, //7901 #CJK UNIFIED IDEOGRAPH
+ {0xB1FC, 0x79C9}, //7902 #CJK UNIFIED IDEOGRAPH
+ {0xB1FD, 0x997C}, //7903 #CJK UNIFIED IDEOGRAPH
+ {0xB1FE, 0x70B3}, //7904 #CJK UNIFIED IDEOGRAPH
+ {0xB240, 0x775D}, //7905 #CJK UNIFIED IDEOGRAPH
+ {0xB241, 0x775E}, //7906 #CJK UNIFIED IDEOGRAPH
+ {0xB242, 0x775F}, //7907 #CJK UNIFIED IDEOGRAPH
+ {0xB243, 0x7760}, //7908 #CJK UNIFIED IDEOGRAPH
+ {0xB244, 0x7764}, //7909 #CJK UNIFIED IDEOGRAPH
+ {0xB245, 0x7767}, //7910 #CJK UNIFIED IDEOGRAPH
+ {0xB246, 0x7769}, //7911 #CJK UNIFIED IDEOGRAPH
+ {0xB247, 0x776A}, //7912 #CJK UNIFIED IDEOGRAPH
+ {0xB248, 0x776D}, //7913 #CJK UNIFIED IDEOGRAPH
+ {0xB249, 0x776E}, //7914 #CJK UNIFIED IDEOGRAPH
+ {0xB24A, 0x776F}, //7915 #CJK UNIFIED IDEOGRAPH
+ {0xB24B, 0x7770}, //7916 #CJK UNIFIED IDEOGRAPH
+ {0xB24C, 0x7771}, //7917 #CJK UNIFIED IDEOGRAPH
+ {0xB24D, 0x7772}, //7918 #CJK UNIFIED IDEOGRAPH
+ {0xB24E, 0x7773}, //7919 #CJK UNIFIED IDEOGRAPH
+ {0xB24F, 0x7774}, //7920 #CJK UNIFIED IDEOGRAPH
+ {0xB250, 0x7775}, //7921 #CJK UNIFIED IDEOGRAPH
+ {0xB251, 0x7776}, //7922 #CJK UNIFIED IDEOGRAPH
+ {0xB252, 0x7777}, //7923 #CJK UNIFIED IDEOGRAPH
+ {0xB253, 0x7778}, //7924 #CJK UNIFIED IDEOGRAPH
+ {0xB254, 0x777A}, //7925 #CJK UNIFIED IDEOGRAPH
+ {0xB255, 0x777B}, //7926 #CJK UNIFIED IDEOGRAPH
+ {0xB256, 0x777C}, //7927 #CJK UNIFIED IDEOGRAPH
+ {0xB257, 0x7781}, //7928 #CJK UNIFIED IDEOGRAPH
+ {0xB258, 0x7782}, //7929 #CJK UNIFIED IDEOGRAPH
+ {0xB259, 0x7783}, //7930 #CJK UNIFIED IDEOGRAPH
+ {0xB25A, 0x7786}, //7931 #CJK UNIFIED IDEOGRAPH
+ {0xB25B, 0x7787}, //7932 #CJK UNIFIED IDEOGRAPH
+ {0xB25C, 0x7788}, //7933 #CJK UNIFIED IDEOGRAPH
+ {0xB25D, 0x7789}, //7934 #CJK UNIFIED IDEOGRAPH
+ {0xB25E, 0x778A}, //7935 #CJK UNIFIED IDEOGRAPH
+ {0xB25F, 0x778B}, //7936 #CJK UNIFIED IDEOGRAPH
+ {0xB260, 0x778F}, //7937 #CJK UNIFIED IDEOGRAPH
+ {0xB261, 0x7790}, //7938 #CJK UNIFIED IDEOGRAPH
+ {0xB262, 0x7793}, //7939 #CJK UNIFIED IDEOGRAPH
+ {0xB263, 0x7794}, //7940 #CJK UNIFIED IDEOGRAPH
+ {0xB264, 0x7795}, //7941 #CJK UNIFIED IDEOGRAPH
+ {0xB265, 0x7796}, //7942 #CJK UNIFIED IDEOGRAPH
+ {0xB266, 0x7797}, //7943 #CJK UNIFIED IDEOGRAPH
+ {0xB267, 0x7798}, //7944 #CJK UNIFIED IDEOGRAPH
+ {0xB268, 0x7799}, //7945 #CJK UNIFIED IDEOGRAPH
+ {0xB269, 0x779A}, //7946 #CJK UNIFIED IDEOGRAPH
+ {0xB26A, 0x779B}, //7947 #CJK UNIFIED IDEOGRAPH
+ {0xB26B, 0x779C}, //7948 #CJK UNIFIED IDEOGRAPH
+ {0xB26C, 0x779D}, //7949 #CJK UNIFIED IDEOGRAPH
+ {0xB26D, 0x779E}, //7950 #CJK UNIFIED IDEOGRAPH
+ {0xB26E, 0x77A1}, //7951 #CJK UNIFIED IDEOGRAPH
+ {0xB26F, 0x77A3}, //7952 #CJK UNIFIED IDEOGRAPH
+ {0xB270, 0x77A4}, //7953 #CJK UNIFIED IDEOGRAPH
+ {0xB271, 0x77A6}, //7954 #CJK UNIFIED IDEOGRAPH
+ {0xB272, 0x77A8}, //7955 #CJK UNIFIED IDEOGRAPH
+ {0xB273, 0x77AB}, //7956 #CJK UNIFIED IDEOGRAPH
+ {0xB274, 0x77AD}, //7957 #CJK UNIFIED IDEOGRAPH
+ {0xB275, 0x77AE}, //7958 #CJK UNIFIED IDEOGRAPH
+ {0xB276, 0x77AF}, //7959 #CJK UNIFIED IDEOGRAPH
+ {0xB277, 0x77B1}, //7960 #CJK UNIFIED IDEOGRAPH
+ {0xB278, 0x77B2}, //7961 #CJK UNIFIED IDEOGRAPH
+ {0xB279, 0x77B4}, //7962 #CJK UNIFIED IDEOGRAPH
+ {0xB27A, 0x77B6}, //7963 #CJK UNIFIED IDEOGRAPH
+ {0xB27B, 0x77B7}, //7964 #CJK UNIFIED IDEOGRAPH
+ {0xB27C, 0x77B8}, //7965 #CJK UNIFIED IDEOGRAPH
+ {0xB27D, 0x77B9}, //7966 #CJK UNIFIED IDEOGRAPH
+ {0xB27E, 0x77BA}, //7967 #CJK UNIFIED IDEOGRAPH
+ {0xB280, 0x77BC}, //7968 #CJK UNIFIED IDEOGRAPH
+ {0xB281, 0x77BE}, //7969 #CJK UNIFIED IDEOGRAPH
+ {0xB282, 0x77C0}, //7970 #CJK UNIFIED IDEOGRAPH
+ {0xB283, 0x77C1}, //7971 #CJK UNIFIED IDEOGRAPH
+ {0xB284, 0x77C2}, //7972 #CJK UNIFIED IDEOGRAPH
+ {0xB285, 0x77C3}, //7973 #CJK UNIFIED IDEOGRAPH
+ {0xB286, 0x77C4}, //7974 #CJK UNIFIED IDEOGRAPH
+ {0xB287, 0x77C5}, //7975 #CJK UNIFIED IDEOGRAPH
+ {0xB288, 0x77C6}, //7976 #CJK UNIFIED IDEOGRAPH
+ {0xB289, 0x77C7}, //7977 #CJK UNIFIED IDEOGRAPH
+ {0xB28A, 0x77C8}, //7978 #CJK UNIFIED IDEOGRAPH
+ {0xB28B, 0x77C9}, //7979 #CJK UNIFIED IDEOGRAPH
+ {0xB28C, 0x77CA}, //7980 #CJK UNIFIED IDEOGRAPH
+ {0xB28D, 0x77CB}, //7981 #CJK UNIFIED IDEOGRAPH
+ {0xB28E, 0x77CC}, //7982 #CJK UNIFIED IDEOGRAPH
+ {0xB28F, 0x77CE}, //7983 #CJK UNIFIED IDEOGRAPH
+ {0xB290, 0x77CF}, //7984 #CJK UNIFIED IDEOGRAPH
+ {0xB291, 0x77D0}, //7985 #CJK UNIFIED IDEOGRAPH
+ {0xB292, 0x77D1}, //7986 #CJK UNIFIED IDEOGRAPH
+ {0xB293, 0x77D2}, //7987 #CJK UNIFIED IDEOGRAPH
+ {0xB294, 0x77D3}, //7988 #CJK UNIFIED IDEOGRAPH
+ {0xB295, 0x77D4}, //7989 #CJK UNIFIED IDEOGRAPH
+ {0xB296, 0x77D5}, //7990 #CJK UNIFIED IDEOGRAPH
+ {0xB297, 0x77D6}, //7991 #CJK UNIFIED IDEOGRAPH
+ {0xB298, 0x77D8}, //7992 #CJK UNIFIED IDEOGRAPH
+ {0xB299, 0x77D9}, //7993 #CJK UNIFIED IDEOGRAPH
+ {0xB29A, 0x77DA}, //7994 #CJK UNIFIED IDEOGRAPH
+ {0xB29B, 0x77DD}, //7995 #CJK UNIFIED IDEOGRAPH
+ {0xB29C, 0x77DE}, //7996 #CJK UNIFIED IDEOGRAPH
+ {0xB29D, 0x77DF}, //7997 #CJK UNIFIED IDEOGRAPH
+ {0xB29E, 0x77E0}, //7998 #CJK UNIFIED IDEOGRAPH
+ {0xB29F, 0x77E1}, //7999 #CJK UNIFIED IDEOGRAPH
+ {0xB2A0, 0x77E4}, //8000 #CJK UNIFIED IDEOGRAPH
+ {0xB2A1, 0x75C5}, //8001 #CJK UNIFIED IDEOGRAPH
+ {0xB2A2, 0x5E76}, //8002 #CJK UNIFIED IDEOGRAPH
+ {0xB2A3, 0x73BB}, //8003 #CJK UNIFIED IDEOGRAPH
+ {0xB2A4, 0x83E0}, //8004 #CJK UNIFIED IDEOGRAPH
+ {0xB2A5, 0x64AD}, //8005 #CJK UNIFIED IDEOGRAPH
+ {0xB2A6, 0x62E8}, //8006 #CJK UNIFIED IDEOGRAPH
+ {0xB2A7, 0x94B5}, //8007 #CJK UNIFIED IDEOGRAPH
+ {0xB2A8, 0x6CE2}, //8008 #CJK UNIFIED IDEOGRAPH
+ {0xB2A9, 0x535A}, //8009 #CJK UNIFIED IDEOGRAPH
+ {0xB2AA, 0x52C3}, //8010 #CJK UNIFIED IDEOGRAPH
+ {0xB2AB, 0x640F}, //8011 #CJK UNIFIED IDEOGRAPH
+ {0xB2AC, 0x94C2}, //8012 #CJK UNIFIED IDEOGRAPH
+ {0xB2AD, 0x7B94}, //8013 #CJK UNIFIED IDEOGRAPH
+ {0xB2AE, 0x4F2F}, //8014 #CJK UNIFIED IDEOGRAPH
+ {0xB2AF, 0x5E1B}, //8015 #CJK UNIFIED IDEOGRAPH
+ {0xB2B0, 0x8236}, //8016 #CJK UNIFIED IDEOGRAPH
+ {0xB2B1, 0x8116}, //8017 #CJK UNIFIED IDEOGRAPH
+ {0xB2B2, 0x818A}, //8018 #CJK UNIFIED IDEOGRAPH
+ {0xB2B3, 0x6E24}, //8019 #CJK UNIFIED IDEOGRAPH
+ {0xB2B4, 0x6CCA}, //8020 #CJK UNIFIED IDEOGRAPH
+ {0xB2B5, 0x9A73}, //8021 #CJK UNIFIED IDEOGRAPH
+ {0xB2B6, 0x6355}, //8022 #CJK UNIFIED IDEOGRAPH
+ {0xB2B7, 0x535C}, //8023 #CJK UNIFIED IDEOGRAPH
+ {0xB2B8, 0x54FA}, //8024 #CJK UNIFIED IDEOGRAPH
+ {0xB2B9, 0x8865}, //8025 #CJK UNIFIED IDEOGRAPH
+ {0xB2BA, 0x57E0}, //8026 #CJK UNIFIED IDEOGRAPH
+ {0xB2BB, 0x4E0D}, //8027 #CJK UNIFIED IDEOGRAPH
+ {0xB2BC, 0x5E03}, //8028 #CJK UNIFIED IDEOGRAPH
+ {0xB2BD, 0x6B65}, //8029 #CJK UNIFIED IDEOGRAPH
+ {0xB2BE, 0x7C3F}, //8030 #CJK UNIFIED IDEOGRAPH
+ {0xB2BF, 0x90E8}, //8031 #CJK UNIFIED IDEOGRAPH
+ {0xB2C0, 0x6016}, //8032 #CJK UNIFIED IDEOGRAPH
+ {0xB2C1, 0x64E6}, //8033 #CJK UNIFIED IDEOGRAPH
+ {0xB2C2, 0x731C}, //8034 #CJK UNIFIED IDEOGRAPH
+ {0xB2C3, 0x88C1}, //8035 #CJK UNIFIED IDEOGRAPH
+ {0xB2C4, 0x6750}, //8036 #CJK UNIFIED IDEOGRAPH
+ {0xB2C5, 0x624D}, //8037 #CJK UNIFIED IDEOGRAPH
+ {0xB2C6, 0x8D22}, //8038 #CJK UNIFIED IDEOGRAPH
+ {0xB2C7, 0x776C}, //8039 #CJK UNIFIED IDEOGRAPH
+ {0xB2C8, 0x8E29}, //8040 #CJK UNIFIED IDEOGRAPH
+ {0xB2C9, 0x91C7}, //8041 #CJK UNIFIED IDEOGRAPH
+ {0xB2CA, 0x5F69}, //8042 #CJK UNIFIED IDEOGRAPH
+ {0xB2CB, 0x83DC}, //8043 #CJK UNIFIED IDEOGRAPH
+ {0xB2CC, 0x8521}, //8044 #CJK UNIFIED IDEOGRAPH
+ {0xB2CD, 0x9910}, //8045 #CJK UNIFIED IDEOGRAPH
+ {0xB2CE, 0x53C2}, //8046 #CJK UNIFIED IDEOGRAPH
+ {0xB2CF, 0x8695}, //8047 #CJK UNIFIED IDEOGRAPH
+ {0xB2D0, 0x6B8B}, //8048 #CJK UNIFIED IDEOGRAPH
+ {0xB2D1, 0x60ED}, //8049 #CJK UNIFIED IDEOGRAPH
+ {0xB2D2, 0x60E8}, //8050 #CJK UNIFIED IDEOGRAPH
+ {0xB2D3, 0x707F}, //8051 #CJK UNIFIED IDEOGRAPH
+ {0xB2D4, 0x82CD}, //8052 #CJK UNIFIED IDEOGRAPH
+ {0xB2D5, 0x8231}, //8053 #CJK UNIFIED IDEOGRAPH
+ {0xB2D6, 0x4ED3}, //8054 #CJK UNIFIED IDEOGRAPH
+ {0xB2D7, 0x6CA7}, //8055 #CJK UNIFIED IDEOGRAPH
+ {0xB2D8, 0x85CF}, //8056 #CJK UNIFIED IDEOGRAPH
+ {0xB2D9, 0x64CD}, //8057 #CJK UNIFIED IDEOGRAPH
+ {0xB2DA, 0x7CD9}, //8058 #CJK UNIFIED IDEOGRAPH
+ {0xB2DB, 0x69FD}, //8059 #CJK UNIFIED IDEOGRAPH
+ {0xB2DC, 0x66F9}, //8060 #CJK UNIFIED IDEOGRAPH
+ {0xB2DD, 0x8349}, //8061 #CJK UNIFIED IDEOGRAPH
+ {0xB2DE, 0x5395}, //8062 #CJK UNIFIED IDEOGRAPH
+ {0xB2DF, 0x7B56}, //8063 #CJK UNIFIED IDEOGRAPH
+ {0xB2E0, 0x4FA7}, //8064 #CJK UNIFIED IDEOGRAPH
+ {0xB2E1, 0x518C}, //8065 #CJK UNIFIED IDEOGRAPH
+ {0xB2E2, 0x6D4B}, //8066 #CJK UNIFIED IDEOGRAPH
+ {0xB2E3, 0x5C42}, //8067 #CJK UNIFIED IDEOGRAPH
+ {0xB2E4, 0x8E6D}, //8068 #CJK UNIFIED IDEOGRAPH
+ {0xB2E5, 0x63D2}, //8069 #CJK UNIFIED IDEOGRAPH
+ {0xB2E6, 0x53C9}, //8070 #CJK UNIFIED IDEOGRAPH
+ {0xB2E7, 0x832C}, //8071 #CJK UNIFIED IDEOGRAPH
+ {0xB2E8, 0x8336}, //8072 #CJK UNIFIED IDEOGRAPH
+ {0xB2E9, 0x67E5}, //8073 #CJK UNIFIED IDEOGRAPH
+ {0xB2EA, 0x78B4}, //8074 #CJK UNIFIED IDEOGRAPH
+ {0xB2EB, 0x643D}, //8075 #CJK UNIFIED IDEOGRAPH
+ {0xB2EC, 0x5BDF}, //8076 #CJK UNIFIED IDEOGRAPH
+ {0xB2ED, 0x5C94}, //8077 #CJK UNIFIED IDEOGRAPH
+ {0xB2EE, 0x5DEE}, //8078 #CJK UNIFIED IDEOGRAPH
+ {0xB2EF, 0x8BE7}, //8079 #CJK UNIFIED IDEOGRAPH
+ {0xB2F0, 0x62C6}, //8080 #CJK UNIFIED IDEOGRAPH
+ {0xB2F1, 0x67F4}, //8081 #CJK UNIFIED IDEOGRAPH
+ {0xB2F2, 0x8C7A}, //8082 #CJK UNIFIED IDEOGRAPH
+ {0xB2F3, 0x6400}, //8083 #CJK UNIFIED IDEOGRAPH
+ {0xB2F4, 0x63BA}, //8084 #CJK UNIFIED IDEOGRAPH
+ {0xB2F5, 0x8749}, //8085 #CJK UNIFIED IDEOGRAPH
+ {0xB2F6, 0x998B}, //8086 #CJK UNIFIED IDEOGRAPH
+ {0xB2F7, 0x8C17}, //8087 #CJK UNIFIED IDEOGRAPH
+ {0xB2F8, 0x7F20}, //8088 #CJK UNIFIED IDEOGRAPH
+ {0xB2F9, 0x94F2}, //8089 #CJK UNIFIED IDEOGRAPH
+ {0xB2FA, 0x4EA7}, //8090 #CJK UNIFIED IDEOGRAPH
+ {0xB2FB, 0x9610}, //8091 #CJK UNIFIED IDEOGRAPH
+ {0xB2FC, 0x98A4}, //8092 #CJK UNIFIED IDEOGRAPH
+ {0xB2FD, 0x660C}, //8093 #CJK UNIFIED IDEOGRAPH
+ {0xB2FE, 0x7316}, //8094 #CJK UNIFIED IDEOGRAPH
+ {0xB340, 0x77E6}, //8095 #CJK UNIFIED IDEOGRAPH
+ {0xB341, 0x77E8}, //8096 #CJK UNIFIED IDEOGRAPH
+ {0xB342, 0x77EA}, //8097 #CJK UNIFIED IDEOGRAPH
+ {0xB343, 0x77EF}, //8098 #CJK UNIFIED IDEOGRAPH
+ {0xB344, 0x77F0}, //8099 #CJK UNIFIED IDEOGRAPH
+ {0xB345, 0x77F1}, //8100 #CJK UNIFIED IDEOGRAPH
+ {0xB346, 0x77F2}, //8101 #CJK UNIFIED IDEOGRAPH
+ {0xB347, 0x77F4}, //8102 #CJK UNIFIED IDEOGRAPH
+ {0xB348, 0x77F5}, //8103 #CJK UNIFIED IDEOGRAPH
+ {0xB349, 0x77F7}, //8104 #CJK UNIFIED IDEOGRAPH
+ {0xB34A, 0x77F9}, //8105 #CJK UNIFIED IDEOGRAPH
+ {0xB34B, 0x77FA}, //8106 #CJK UNIFIED IDEOGRAPH
+ {0xB34C, 0x77FB}, //8107 #CJK UNIFIED IDEOGRAPH
+ {0xB34D, 0x77FC}, //8108 #CJK UNIFIED IDEOGRAPH
+ {0xB34E, 0x7803}, //8109 #CJK UNIFIED IDEOGRAPH
+ {0xB34F, 0x7804}, //8110 #CJK UNIFIED IDEOGRAPH
+ {0xB350, 0x7805}, //8111 #CJK UNIFIED IDEOGRAPH
+ {0xB351, 0x7806}, //8112 #CJK UNIFIED IDEOGRAPH
+ {0xB352, 0x7807}, //8113 #CJK UNIFIED IDEOGRAPH
+ {0xB353, 0x7808}, //8114 #CJK UNIFIED IDEOGRAPH
+ {0xB354, 0x780A}, //8115 #CJK UNIFIED IDEOGRAPH
+ {0xB355, 0x780B}, //8116 #CJK UNIFIED IDEOGRAPH
+ {0xB356, 0x780E}, //8117 #CJK UNIFIED IDEOGRAPH
+ {0xB357, 0x780F}, //8118 #CJK UNIFIED IDEOGRAPH
+ {0xB358, 0x7810}, //8119 #CJK UNIFIED IDEOGRAPH
+ {0xB359, 0x7813}, //8120 #CJK UNIFIED IDEOGRAPH
+ {0xB35A, 0x7815}, //8121 #CJK UNIFIED IDEOGRAPH
+ {0xB35B, 0x7819}, //8122 #CJK UNIFIED IDEOGRAPH
+ {0xB35C, 0x781B}, //8123 #CJK UNIFIED IDEOGRAPH
+ {0xB35D, 0x781E}, //8124 #CJK UNIFIED IDEOGRAPH
+ {0xB35E, 0x7820}, //8125 #CJK UNIFIED IDEOGRAPH
+ {0xB35F, 0x7821}, //8126 #CJK UNIFIED IDEOGRAPH
+ {0xB360, 0x7822}, //8127 #CJK UNIFIED IDEOGRAPH
+ {0xB361, 0x7824}, //8128 #CJK UNIFIED IDEOGRAPH
+ {0xB362, 0x7828}, //8129 #CJK UNIFIED IDEOGRAPH
+ {0xB363, 0x782A}, //8130 #CJK UNIFIED IDEOGRAPH
+ {0xB364, 0x782B}, //8131 #CJK UNIFIED IDEOGRAPH
+ {0xB365, 0x782E}, //8132 #CJK UNIFIED IDEOGRAPH
+ {0xB366, 0x782F}, //8133 #CJK UNIFIED IDEOGRAPH
+ {0xB367, 0x7831}, //8134 #CJK UNIFIED IDEOGRAPH
+ {0xB368, 0x7832}, //8135 #CJK UNIFIED IDEOGRAPH
+ {0xB369, 0x7833}, //8136 #CJK UNIFIED IDEOGRAPH
+ {0xB36A, 0x7835}, //8137 #CJK UNIFIED IDEOGRAPH
+ {0xB36B, 0x7836}, //8138 #CJK UNIFIED IDEOGRAPH
+ {0xB36C, 0x783D}, //8139 #CJK UNIFIED IDEOGRAPH
+ {0xB36D, 0x783F}, //8140 #CJK UNIFIED IDEOGRAPH
+ {0xB36E, 0x7841}, //8141 #CJK UNIFIED IDEOGRAPH
+ {0xB36F, 0x7842}, //8142 #CJK UNIFIED IDEOGRAPH
+ {0xB370, 0x7843}, //8143 #CJK UNIFIED IDEOGRAPH
+ {0xB371, 0x7844}, //8144 #CJK UNIFIED IDEOGRAPH
+ {0xB372, 0x7846}, //8145 #CJK UNIFIED IDEOGRAPH
+ {0xB373, 0x7848}, //8146 #CJK UNIFIED IDEOGRAPH
+ {0xB374, 0x7849}, //8147 #CJK UNIFIED IDEOGRAPH
+ {0xB375, 0x784A}, //8148 #CJK UNIFIED IDEOGRAPH
+ {0xB376, 0x784B}, //8149 #CJK UNIFIED IDEOGRAPH
+ {0xB377, 0x784D}, //8150 #CJK UNIFIED IDEOGRAPH
+ {0xB378, 0x784F}, //8151 #CJK UNIFIED IDEOGRAPH
+ {0xB379, 0x7851}, //8152 #CJK UNIFIED IDEOGRAPH
+ {0xB37A, 0x7853}, //8153 #CJK UNIFIED IDEOGRAPH
+ {0xB37B, 0x7854}, //8154 #CJK UNIFIED IDEOGRAPH
+ {0xB37C, 0x7858}, //8155 #CJK UNIFIED IDEOGRAPH
+ {0xB37D, 0x7859}, //8156 #CJK UNIFIED IDEOGRAPH
+ {0xB37E, 0x785A}, //8157 #CJK UNIFIED IDEOGRAPH
+ {0xB380, 0x785B}, //8158 #CJK UNIFIED IDEOGRAPH
+ {0xB381, 0x785C}, //8159 #CJK UNIFIED IDEOGRAPH
+ {0xB382, 0x785E}, //8160 #CJK UNIFIED IDEOGRAPH
+ {0xB383, 0x785F}, //8161 #CJK UNIFIED IDEOGRAPH
+ {0xB384, 0x7860}, //8162 #CJK UNIFIED IDEOGRAPH
+ {0xB385, 0x7861}, //8163 #CJK UNIFIED IDEOGRAPH
+ {0xB386, 0x7862}, //8164 #CJK UNIFIED IDEOGRAPH
+ {0xB387, 0x7863}, //8165 #CJK UNIFIED IDEOGRAPH
+ {0xB388, 0x7864}, //8166 #CJK UNIFIED IDEOGRAPH
+ {0xB389, 0x7865}, //8167 #CJK UNIFIED IDEOGRAPH
+ {0xB38A, 0x7866}, //8168 #CJK UNIFIED IDEOGRAPH
+ {0xB38B, 0x7867}, //8169 #CJK UNIFIED IDEOGRAPH
+ {0xB38C, 0x7868}, //8170 #CJK UNIFIED IDEOGRAPH
+ {0xB38D, 0x7869}, //8171 #CJK UNIFIED IDEOGRAPH
+ {0xB38E, 0x786F}, //8172 #CJK UNIFIED IDEOGRAPH
+ {0xB38F, 0x7870}, //8173 #CJK UNIFIED IDEOGRAPH
+ {0xB390, 0x7871}, //8174 #CJK UNIFIED IDEOGRAPH
+ {0xB391, 0x7872}, //8175 #CJK UNIFIED IDEOGRAPH
+ {0xB392, 0x7873}, //8176 #CJK UNIFIED IDEOGRAPH
+ {0xB393, 0x7874}, //8177 #CJK UNIFIED IDEOGRAPH
+ {0xB394, 0x7875}, //8178 #CJK UNIFIED IDEOGRAPH
+ {0xB395, 0x7876}, //8179 #CJK UNIFIED IDEOGRAPH
+ {0xB396, 0x7878}, //8180 #CJK UNIFIED IDEOGRAPH
+ {0xB397, 0x7879}, //8181 #CJK UNIFIED IDEOGRAPH
+ {0xB398, 0x787A}, //8182 #CJK UNIFIED IDEOGRAPH
+ {0xB399, 0x787B}, //8183 #CJK UNIFIED IDEOGRAPH
+ {0xB39A, 0x787D}, //8184 #CJK UNIFIED IDEOGRAPH
+ {0xB39B, 0x787E}, //8185 #CJK UNIFIED IDEOGRAPH
+ {0xB39C, 0x787F}, //8186 #CJK UNIFIED IDEOGRAPH
+ {0xB39D, 0x7880}, //8187 #CJK UNIFIED IDEOGRAPH
+ {0xB39E, 0x7881}, //8188 #CJK UNIFIED IDEOGRAPH
+ {0xB39F, 0x7882}, //8189 #CJK UNIFIED IDEOGRAPH
+ {0xB3A0, 0x7883}, //8190 #CJK UNIFIED IDEOGRAPH
+ {0xB3A1, 0x573A}, //8191 #CJK UNIFIED IDEOGRAPH
+ {0xB3A2, 0x5C1D}, //8192 #CJK UNIFIED IDEOGRAPH
+ {0xB3A3, 0x5E38}, //8193 #CJK UNIFIED IDEOGRAPH
+ {0xB3A4, 0x957F}, //8194 #CJK UNIFIED IDEOGRAPH
+ {0xB3A5, 0x507F}, //8195 #CJK UNIFIED IDEOGRAPH
+ {0xB3A6, 0x80A0}, //8196 #CJK UNIFIED IDEOGRAPH
+ {0xB3A7, 0x5382}, //8197 #CJK UNIFIED IDEOGRAPH
+ {0xB3A8, 0x655E}, //8198 #CJK UNIFIED IDEOGRAPH
+ {0xB3A9, 0x7545}, //8199 #CJK UNIFIED IDEOGRAPH
+ {0xB3AA, 0x5531}, //8200 #CJK UNIFIED IDEOGRAPH
+ {0xB3AB, 0x5021}, //8201 #CJK UNIFIED IDEOGRAPH
+ {0xB3AC, 0x8D85}, //8202 #CJK UNIFIED IDEOGRAPH
+ {0xB3AD, 0x6284}, //8203 #CJK UNIFIED IDEOGRAPH
+ {0xB3AE, 0x949E}, //8204 #CJK UNIFIED IDEOGRAPH
+ {0xB3AF, 0x671D}, //8205 #CJK UNIFIED IDEOGRAPH
+ {0xB3B0, 0x5632}, //8206 #CJK UNIFIED IDEOGRAPH
+ {0xB3B1, 0x6F6E}, //8207 #CJK UNIFIED IDEOGRAPH
+ {0xB3B2, 0x5DE2}, //8208 #CJK UNIFIED IDEOGRAPH
+ {0xB3B3, 0x5435}, //8209 #CJK UNIFIED IDEOGRAPH
+ {0xB3B4, 0x7092}, //8210 #CJK UNIFIED IDEOGRAPH
+ {0xB3B5, 0x8F66}, //8211 #CJK UNIFIED IDEOGRAPH
+ {0xB3B6, 0x626F}, //8212 #CJK UNIFIED IDEOGRAPH
+ {0xB3B7, 0x64A4}, //8213 #CJK UNIFIED IDEOGRAPH
+ {0xB3B8, 0x63A3}, //8214 #CJK UNIFIED IDEOGRAPH
+ {0xB3B9, 0x5F7B}, //8215 #CJK UNIFIED IDEOGRAPH
+ {0xB3BA, 0x6F88}, //8216 #CJK UNIFIED IDEOGRAPH
+ {0xB3BB, 0x90F4}, //8217 #CJK UNIFIED IDEOGRAPH
+ {0xB3BC, 0x81E3}, //8218 #CJK UNIFIED IDEOGRAPH
+ {0xB3BD, 0x8FB0}, //8219 #CJK UNIFIED IDEOGRAPH
+ {0xB3BE, 0x5C18}, //8220 #CJK UNIFIED IDEOGRAPH
+ {0xB3BF, 0x6668}, //8221 #CJK UNIFIED IDEOGRAPH
+ {0xB3C0, 0x5FF1}, //8222 #CJK UNIFIED IDEOGRAPH
+ {0xB3C1, 0x6C89}, //8223 #CJK UNIFIED IDEOGRAPH
+ {0xB3C2, 0x9648}, //8224 #CJK UNIFIED IDEOGRAPH
+ {0xB3C3, 0x8D81}, //8225 #CJK UNIFIED IDEOGRAPH
+ {0xB3C4, 0x886C}, //8226 #CJK UNIFIED IDEOGRAPH
+ {0xB3C5, 0x6491}, //8227 #CJK UNIFIED IDEOGRAPH
+ {0xB3C6, 0x79F0}, //8228 #CJK UNIFIED IDEOGRAPH
+ {0xB3C7, 0x57CE}, //8229 #CJK UNIFIED IDEOGRAPH
+ {0xB3C8, 0x6A59}, //8230 #CJK UNIFIED IDEOGRAPH
+ {0xB3C9, 0x6210}, //8231 #CJK UNIFIED IDEOGRAPH
+ {0xB3CA, 0x5448}, //8232 #CJK UNIFIED IDEOGRAPH
+ {0xB3CB, 0x4E58}, //8233 #CJK UNIFIED IDEOGRAPH
+ {0xB3CC, 0x7A0B}, //8234 #CJK UNIFIED IDEOGRAPH
+ {0xB3CD, 0x60E9}, //8235 #CJK UNIFIED IDEOGRAPH
+ {0xB3CE, 0x6F84}, //8236 #CJK UNIFIED IDEOGRAPH
+ {0xB3CF, 0x8BDA}, //8237 #CJK UNIFIED IDEOGRAPH
+ {0xB3D0, 0x627F}, //8238 #CJK UNIFIED IDEOGRAPH
+ {0xB3D1, 0x901E}, //8239 #CJK UNIFIED IDEOGRAPH
+ {0xB3D2, 0x9A8B}, //8240 #CJK UNIFIED IDEOGRAPH
+ {0xB3D3, 0x79E4}, //8241 #CJK UNIFIED IDEOGRAPH
+ {0xB3D4, 0x5403}, //8242 #CJK UNIFIED IDEOGRAPH
+ {0xB3D5, 0x75F4}, //8243 #CJK UNIFIED IDEOGRAPH
+ {0xB3D6, 0x6301}, //8244 #CJK UNIFIED IDEOGRAPH
+ {0xB3D7, 0x5319}, //8245 #CJK UNIFIED IDEOGRAPH
+ {0xB3D8, 0x6C60}, //8246 #CJK UNIFIED IDEOGRAPH
+ {0xB3D9, 0x8FDF}, //8247 #CJK UNIFIED IDEOGRAPH
+ {0xB3DA, 0x5F1B}, //8248 #CJK UNIFIED IDEOGRAPH
+ {0xB3DB, 0x9A70}, //8249 #CJK UNIFIED IDEOGRAPH
+ {0xB3DC, 0x803B}, //8250 #CJK UNIFIED IDEOGRAPH
+ {0xB3DD, 0x9F7F}, //8251 #CJK UNIFIED IDEOGRAPH
+ {0xB3DE, 0x4F88}, //8252 #CJK UNIFIED IDEOGRAPH
+ {0xB3DF, 0x5C3A}, //8253 #CJK UNIFIED IDEOGRAPH
+ {0xB3E0, 0x8D64}, //8254 #CJK UNIFIED IDEOGRAPH
+ {0xB3E1, 0x7FC5}, //8255 #CJK UNIFIED IDEOGRAPH
+ {0xB3E2, 0x65A5}, //8256 #CJK UNIFIED IDEOGRAPH
+ {0xB3E3, 0x70BD}, //8257 #CJK UNIFIED IDEOGRAPH
+ {0xB3E4, 0x5145}, //8258 #CJK UNIFIED IDEOGRAPH
+ {0xB3E5, 0x51B2}, //8259 #CJK UNIFIED IDEOGRAPH
+ {0xB3E6, 0x866B}, //8260 #CJK UNIFIED IDEOGRAPH
+ {0xB3E7, 0x5D07}, //8261 #CJK UNIFIED IDEOGRAPH
+ {0xB3E8, 0x5BA0}, //8262 #CJK UNIFIED IDEOGRAPH
+ {0xB3E9, 0x62BD}, //8263 #CJK UNIFIED IDEOGRAPH
+ {0xB3EA, 0x916C}, //8264 #CJK UNIFIED IDEOGRAPH
+ {0xB3EB, 0x7574}, //8265 #CJK UNIFIED IDEOGRAPH
+ {0xB3EC, 0x8E0C}, //8266 #CJK UNIFIED IDEOGRAPH
+ {0xB3ED, 0x7A20}, //8267 #CJK UNIFIED IDEOGRAPH
+ {0xB3EE, 0x6101}, //8268 #CJK UNIFIED IDEOGRAPH
+ {0xB3EF, 0x7B79}, //8269 #CJK UNIFIED IDEOGRAPH
+ {0xB3F0, 0x4EC7}, //8270 #CJK UNIFIED IDEOGRAPH
+ {0xB3F1, 0x7EF8}, //8271 #CJK UNIFIED IDEOGRAPH
+ {0xB3F2, 0x7785}, //8272 #CJK UNIFIED IDEOGRAPH
+ {0xB3F3, 0x4E11}, //8273 #CJK UNIFIED IDEOGRAPH
+ {0xB3F4, 0x81ED}, //8274 #CJK UNIFIED IDEOGRAPH
+ {0xB3F5, 0x521D}, //8275 #CJK UNIFIED IDEOGRAPH
+ {0xB3F6, 0x51FA}, //8276 #CJK UNIFIED IDEOGRAPH
+ {0xB3F7, 0x6A71}, //8277 #CJK UNIFIED IDEOGRAPH
+ {0xB3F8, 0x53A8}, //8278 #CJK UNIFIED IDEOGRAPH
+ {0xB3F9, 0x8E87}, //8279 #CJK UNIFIED IDEOGRAPH
+ {0xB3FA, 0x9504}, //8280 #CJK UNIFIED IDEOGRAPH
+ {0xB3FB, 0x96CF}, //8281 #CJK UNIFIED IDEOGRAPH
+ {0xB3FC, 0x6EC1}, //8282 #CJK UNIFIED IDEOGRAPH
+ {0xB3FD, 0x9664}, //8283 #CJK UNIFIED IDEOGRAPH
+ {0xB3FE, 0x695A}, //8284 #CJK UNIFIED IDEOGRAPH
+ {0xB440, 0x7884}, //8285 #CJK UNIFIED IDEOGRAPH
+ {0xB441, 0x7885}, //8286 #CJK UNIFIED IDEOGRAPH
+ {0xB442, 0x7886}, //8287 #CJK UNIFIED IDEOGRAPH
+ {0xB443, 0x7888}, //8288 #CJK UNIFIED IDEOGRAPH
+ {0xB444, 0x788A}, //8289 #CJK UNIFIED IDEOGRAPH
+ {0xB445, 0x788B}, //8290 #CJK UNIFIED IDEOGRAPH
+ {0xB446, 0x788F}, //8291 #CJK UNIFIED IDEOGRAPH
+ {0xB447, 0x7890}, //8292 #CJK UNIFIED IDEOGRAPH
+ {0xB448, 0x7892}, //8293 #CJK UNIFIED IDEOGRAPH
+ {0xB449, 0x7894}, //8294 #CJK UNIFIED IDEOGRAPH
+ {0xB44A, 0x7895}, //8295 #CJK UNIFIED IDEOGRAPH
+ {0xB44B, 0x7896}, //8296 #CJK UNIFIED IDEOGRAPH
+ {0xB44C, 0x7899}, //8297 #CJK UNIFIED IDEOGRAPH
+ {0xB44D, 0x789D}, //8298 #CJK UNIFIED IDEOGRAPH
+ {0xB44E, 0x789E}, //8299 #CJK UNIFIED IDEOGRAPH
+ {0xB44F, 0x78A0}, //8300 #CJK UNIFIED IDEOGRAPH
+ {0xB450, 0x78A2}, //8301 #CJK UNIFIED IDEOGRAPH
+ {0xB451, 0x78A4}, //8302 #CJK UNIFIED IDEOGRAPH
+ {0xB452, 0x78A6}, //8303 #CJK UNIFIED IDEOGRAPH
+ {0xB453, 0x78A8}, //8304 #CJK UNIFIED IDEOGRAPH
+ {0xB454, 0x78A9}, //8305 #CJK UNIFIED IDEOGRAPH
+ {0xB455, 0x78AA}, //8306 #CJK UNIFIED IDEOGRAPH
+ {0xB456, 0x78AB}, //8307 #CJK UNIFIED IDEOGRAPH
+ {0xB457, 0x78AC}, //8308 #CJK UNIFIED IDEOGRAPH
+ {0xB458, 0x78AD}, //8309 #CJK UNIFIED IDEOGRAPH
+ {0xB459, 0x78AE}, //8310 #CJK UNIFIED IDEOGRAPH
+ {0xB45A, 0x78AF}, //8311 #CJK UNIFIED IDEOGRAPH
+ {0xB45B, 0x78B5}, //8312 #CJK UNIFIED IDEOGRAPH
+ {0xB45C, 0x78B6}, //8313 #CJK UNIFIED IDEOGRAPH
+ {0xB45D, 0x78B7}, //8314 #CJK UNIFIED IDEOGRAPH
+ {0xB45E, 0x78B8}, //8315 #CJK UNIFIED IDEOGRAPH
+ {0xB45F, 0x78BA}, //8316 #CJK UNIFIED IDEOGRAPH
+ {0xB460, 0x78BB}, //8317 #CJK UNIFIED IDEOGRAPH
+ {0xB461, 0x78BC}, //8318 #CJK UNIFIED IDEOGRAPH
+ {0xB462, 0x78BD}, //8319 #CJK UNIFIED IDEOGRAPH
+ {0xB463, 0x78BF}, //8320 #CJK UNIFIED IDEOGRAPH
+ {0xB464, 0x78C0}, //8321 #CJK UNIFIED IDEOGRAPH
+ {0xB465, 0x78C2}, //8322 #CJK UNIFIED IDEOGRAPH
+ {0xB466, 0x78C3}, //8323 #CJK UNIFIED IDEOGRAPH
+ {0xB467, 0x78C4}, //8324 #CJK UNIFIED IDEOGRAPH
+ {0xB468, 0x78C6}, //8325 #CJK UNIFIED IDEOGRAPH
+ {0xB469, 0x78C7}, //8326 #CJK UNIFIED IDEOGRAPH
+ {0xB46A, 0x78C8}, //8327 #CJK UNIFIED IDEOGRAPH
+ {0xB46B, 0x78CC}, //8328 #CJK UNIFIED IDEOGRAPH
+ {0xB46C, 0x78CD}, //8329 #CJK UNIFIED IDEOGRAPH
+ {0xB46D, 0x78CE}, //8330 #CJK UNIFIED IDEOGRAPH
+ {0xB46E, 0x78CF}, //8331 #CJK UNIFIED IDEOGRAPH
+ {0xB46F, 0x78D1}, //8332 #CJK UNIFIED IDEOGRAPH
+ {0xB470, 0x78D2}, //8333 #CJK UNIFIED IDEOGRAPH
+ {0xB471, 0x78D3}, //8334 #CJK UNIFIED IDEOGRAPH
+ {0xB472, 0x78D6}, //8335 #CJK UNIFIED IDEOGRAPH
+ {0xB473, 0x78D7}, //8336 #CJK UNIFIED IDEOGRAPH
+ {0xB474, 0x78D8}, //8337 #CJK UNIFIED IDEOGRAPH
+ {0xB475, 0x78DA}, //8338 #CJK UNIFIED IDEOGRAPH
+ {0xB476, 0x78DB}, //8339 #CJK UNIFIED IDEOGRAPH
+ {0xB477, 0x78DC}, //8340 #CJK UNIFIED IDEOGRAPH
+ {0xB478, 0x78DD}, //8341 #CJK UNIFIED IDEOGRAPH
+ {0xB479, 0x78DE}, //8342 #CJK UNIFIED IDEOGRAPH
+ {0xB47A, 0x78DF}, //8343 #CJK UNIFIED IDEOGRAPH
+ {0xB47B, 0x78E0}, //8344 #CJK UNIFIED IDEOGRAPH
+ {0xB47C, 0x78E1}, //8345 #CJK UNIFIED IDEOGRAPH
+ {0xB47D, 0x78E2}, //8346 #CJK UNIFIED IDEOGRAPH
+ {0xB47E, 0x78E3}, //8347 #CJK UNIFIED IDEOGRAPH
+ {0xB480, 0x78E4}, //8348 #CJK UNIFIED IDEOGRAPH
+ {0xB481, 0x78E5}, //8349 #CJK UNIFIED IDEOGRAPH
+ {0xB482, 0x78E6}, //8350 #CJK UNIFIED IDEOGRAPH
+ {0xB483, 0x78E7}, //8351 #CJK UNIFIED IDEOGRAPH
+ {0xB484, 0x78E9}, //8352 #CJK UNIFIED IDEOGRAPH
+ {0xB485, 0x78EA}, //8353 #CJK UNIFIED IDEOGRAPH
+ {0xB486, 0x78EB}, //8354 #CJK UNIFIED IDEOGRAPH
+ {0xB487, 0x78ED}, //8355 #CJK UNIFIED IDEOGRAPH
+ {0xB488, 0x78EE}, //8356 #CJK UNIFIED IDEOGRAPH
+ {0xB489, 0x78EF}, //8357 #CJK UNIFIED IDEOGRAPH
+ {0xB48A, 0x78F0}, //8358 #CJK UNIFIED IDEOGRAPH
+ {0xB48B, 0x78F1}, //8359 #CJK UNIFIED IDEOGRAPH
+ {0xB48C, 0x78F3}, //8360 #CJK UNIFIED IDEOGRAPH
+ {0xB48D, 0x78F5}, //8361 #CJK UNIFIED IDEOGRAPH
+ {0xB48E, 0x78F6}, //8362 #CJK UNIFIED IDEOGRAPH
+ {0xB48F, 0x78F8}, //8363 #CJK UNIFIED IDEOGRAPH
+ {0xB490, 0x78F9}, //8364 #CJK UNIFIED IDEOGRAPH
+ {0xB491, 0x78FB}, //8365 #CJK UNIFIED IDEOGRAPH
+ {0xB492, 0x78FC}, //8366 #CJK UNIFIED IDEOGRAPH
+ {0xB493, 0x78FD}, //8367 #CJK UNIFIED IDEOGRAPH
+ {0xB494, 0x78FE}, //8368 #CJK UNIFIED IDEOGRAPH
+ {0xB495, 0x78FF}, //8369 #CJK UNIFIED IDEOGRAPH
+ {0xB496, 0x7900}, //8370 #CJK UNIFIED IDEOGRAPH
+ {0xB497, 0x7902}, //8371 #CJK UNIFIED IDEOGRAPH
+ {0xB498, 0x7903}, //8372 #CJK UNIFIED IDEOGRAPH
+ {0xB499, 0x7904}, //8373 #CJK UNIFIED IDEOGRAPH
+ {0xB49A, 0x7906}, //8374 #CJK UNIFIED IDEOGRAPH
+ {0xB49B, 0x7907}, //8375 #CJK UNIFIED IDEOGRAPH
+ {0xB49C, 0x7908}, //8376 #CJK UNIFIED IDEOGRAPH
+ {0xB49D, 0x7909}, //8377 #CJK UNIFIED IDEOGRAPH
+ {0xB49E, 0x790A}, //8378 #CJK UNIFIED IDEOGRAPH
+ {0xB49F, 0x790B}, //8379 #CJK UNIFIED IDEOGRAPH
+ {0xB4A0, 0x790C}, //8380 #CJK UNIFIED IDEOGRAPH
+ {0xB4A1, 0x7840}, //8381 #CJK UNIFIED IDEOGRAPH
+ {0xB4A2, 0x50A8}, //8382 #CJK UNIFIED IDEOGRAPH
+ {0xB4A3, 0x77D7}, //8383 #CJK UNIFIED IDEOGRAPH
+ {0xB4A4, 0x6410}, //8384 #CJK UNIFIED IDEOGRAPH
+ {0xB4A5, 0x89E6}, //8385 #CJK UNIFIED IDEOGRAPH
+ {0xB4A6, 0x5904}, //8386 #CJK UNIFIED IDEOGRAPH
+ {0xB4A7, 0x63E3}, //8387 #CJK UNIFIED IDEOGRAPH
+ {0xB4A8, 0x5DDD}, //8388 #CJK UNIFIED IDEOGRAPH
+ {0xB4A9, 0x7A7F}, //8389 #CJK UNIFIED IDEOGRAPH
+ {0xB4AA, 0x693D}, //8390 #CJK UNIFIED IDEOGRAPH
+ {0xB4AB, 0x4F20}, //8391 #CJK UNIFIED IDEOGRAPH
+ {0xB4AC, 0x8239}, //8392 #CJK UNIFIED IDEOGRAPH
+ {0xB4AD, 0x5598}, //8393 #CJK UNIFIED IDEOGRAPH
+ {0xB4AE, 0x4E32}, //8394 #CJK UNIFIED IDEOGRAPH
+ {0xB4AF, 0x75AE}, //8395 #CJK UNIFIED IDEOGRAPH
+ {0xB4B0, 0x7A97}, //8396 #CJK UNIFIED IDEOGRAPH
+ {0xB4B1, 0x5E62}, //8397 #CJK UNIFIED IDEOGRAPH
+ {0xB4B2, 0x5E8A}, //8398 #CJK UNIFIED IDEOGRAPH
+ {0xB4B3, 0x95EF}, //8399 #CJK UNIFIED IDEOGRAPH
+ {0xB4B4, 0x521B}, //8400 #CJK UNIFIED IDEOGRAPH
+ {0xB4B5, 0x5439}, //8401 #CJK UNIFIED IDEOGRAPH
+ {0xB4B6, 0x708A}, //8402 #CJK UNIFIED IDEOGRAPH
+ {0xB4B7, 0x6376}, //8403 #CJK UNIFIED IDEOGRAPH
+ {0xB4B8, 0x9524}, //8404 #CJK UNIFIED IDEOGRAPH
+ {0xB4B9, 0x5782}, //8405 #CJK UNIFIED IDEOGRAPH
+ {0xB4BA, 0x6625}, //8406 #CJK UNIFIED IDEOGRAPH
+ {0xB4BB, 0x693F}, //8407 #CJK UNIFIED IDEOGRAPH
+ {0xB4BC, 0x9187}, //8408 #CJK UNIFIED IDEOGRAPH
+ {0xB4BD, 0x5507}, //8409 #CJK UNIFIED IDEOGRAPH
+ {0xB4BE, 0x6DF3}, //8410 #CJK UNIFIED IDEOGRAPH
+ {0xB4BF, 0x7EAF}, //8411 #CJK UNIFIED IDEOGRAPH
+ {0xB4C0, 0x8822}, //8412 #CJK UNIFIED IDEOGRAPH
+ {0xB4C1, 0x6233}, //8413 #CJK UNIFIED IDEOGRAPH
+ {0xB4C2, 0x7EF0}, //8414 #CJK UNIFIED IDEOGRAPH
+ {0xB4C3, 0x75B5}, //8415 #CJK UNIFIED IDEOGRAPH
+ {0xB4C4, 0x8328}, //8416 #CJK UNIFIED IDEOGRAPH
+ {0xB4C5, 0x78C1}, //8417 #CJK UNIFIED IDEOGRAPH
+ {0xB4C6, 0x96CC}, //8418 #CJK UNIFIED IDEOGRAPH
+ {0xB4C7, 0x8F9E}, //8419 #CJK UNIFIED IDEOGRAPH
+ {0xB4C8, 0x6148}, //8420 #CJK UNIFIED IDEOGRAPH
+ {0xB4C9, 0x74F7}, //8421 #CJK UNIFIED IDEOGRAPH
+ {0xB4CA, 0x8BCD}, //8422 #CJK UNIFIED IDEOGRAPH
+ {0xB4CB, 0x6B64}, //8423 #CJK UNIFIED IDEOGRAPH
+ {0xB4CC, 0x523A}, //8424 #CJK UNIFIED IDEOGRAPH
+ {0xB4CD, 0x8D50}, //8425 #CJK UNIFIED IDEOGRAPH
+ {0xB4CE, 0x6B21}, //8426 #CJK UNIFIED IDEOGRAPH
+ {0xB4CF, 0x806A}, //8427 #CJK UNIFIED IDEOGRAPH
+ {0xB4D0, 0x8471}, //8428 #CJK UNIFIED IDEOGRAPH
+ {0xB4D1, 0x56F1}, //8429 #CJK UNIFIED IDEOGRAPH
+ {0xB4D2, 0x5306}, //8430 #CJK UNIFIED IDEOGRAPH
+ {0xB4D3, 0x4ECE}, //8431 #CJK UNIFIED IDEOGRAPH
+ {0xB4D4, 0x4E1B}, //8432 #CJK UNIFIED IDEOGRAPH
+ {0xB4D5, 0x51D1}, //8433 #CJK UNIFIED IDEOGRAPH
+ {0xB4D6, 0x7C97}, //8434 #CJK UNIFIED IDEOGRAPH
+ {0xB4D7, 0x918B}, //8435 #CJK UNIFIED IDEOGRAPH
+ {0xB4D8, 0x7C07}, //8436 #CJK UNIFIED IDEOGRAPH
+ {0xB4D9, 0x4FC3}, //8437 #CJK UNIFIED IDEOGRAPH
+ {0xB4DA, 0x8E7F}, //8438 #CJK UNIFIED IDEOGRAPH
+ {0xB4DB, 0x7BE1}, //8439 #CJK UNIFIED IDEOGRAPH
+ {0xB4DC, 0x7A9C}, //8440 #CJK UNIFIED IDEOGRAPH
+ {0xB4DD, 0x6467}, //8441 #CJK UNIFIED IDEOGRAPH
+ {0xB4DE, 0x5D14}, //8442 #CJK UNIFIED IDEOGRAPH
+ {0xB4DF, 0x50AC}, //8443 #CJK UNIFIED IDEOGRAPH
+ {0xB4E0, 0x8106}, //8444 #CJK UNIFIED IDEOGRAPH
+ {0xB4E1, 0x7601}, //8445 #CJK UNIFIED IDEOGRAPH
+ {0xB4E2, 0x7CB9}, //8446 #CJK UNIFIED IDEOGRAPH
+ {0xB4E3, 0x6DEC}, //8447 #CJK UNIFIED IDEOGRAPH
+ {0xB4E4, 0x7FE0}, //8448 #CJK UNIFIED IDEOGRAPH
+ {0xB4E5, 0x6751}, //8449 #CJK UNIFIED IDEOGRAPH
+ {0xB4E6, 0x5B58}, //8450 #CJK UNIFIED IDEOGRAPH
+ {0xB4E7, 0x5BF8}, //8451 #CJK UNIFIED IDEOGRAPH
+ {0xB4E8, 0x78CB}, //8452 #CJK UNIFIED IDEOGRAPH
+ {0xB4E9, 0x64AE}, //8453 #CJK UNIFIED IDEOGRAPH
+ {0xB4EA, 0x6413}, //8454 #CJK UNIFIED IDEOGRAPH
+ {0xB4EB, 0x63AA}, //8455 #CJK UNIFIED IDEOGRAPH
+ {0xB4EC, 0x632B}, //8456 #CJK UNIFIED IDEOGRAPH
+ {0xB4ED, 0x9519}, //8457 #CJK UNIFIED IDEOGRAPH
+ {0xB4EE, 0x642D}, //8458 #CJK UNIFIED IDEOGRAPH
+ {0xB4EF, 0x8FBE}, //8459 #CJK UNIFIED IDEOGRAPH
+ {0xB4F0, 0x7B54}, //8460 #CJK UNIFIED IDEOGRAPH
+ {0xB4F1, 0x7629}, //8461 #CJK UNIFIED IDEOGRAPH
+ {0xB4F2, 0x6253}, //8462 #CJK UNIFIED IDEOGRAPH
+ {0xB4F3, 0x5927}, //8463 #CJK UNIFIED IDEOGRAPH
+ {0xB4F4, 0x5446}, //8464 #CJK UNIFIED IDEOGRAPH
+ {0xB4F5, 0x6B79}, //8465 #CJK UNIFIED IDEOGRAPH
+ {0xB4F6, 0x50A3}, //8466 #CJK UNIFIED IDEOGRAPH
+ {0xB4F7, 0x6234}, //8467 #CJK UNIFIED IDEOGRAPH
+ {0xB4F8, 0x5E26}, //8468 #CJK UNIFIED IDEOGRAPH
+ {0xB4F9, 0x6B86}, //8469 #CJK UNIFIED IDEOGRAPH
+ {0xB4FA, 0x4EE3}, //8470 #CJK UNIFIED IDEOGRAPH
+ {0xB4FB, 0x8D37}, //8471 #CJK UNIFIED IDEOGRAPH
+ {0xB4FC, 0x888B}, //8472 #CJK UNIFIED IDEOGRAPH
+ {0xB4FD, 0x5F85}, //8473 #CJK UNIFIED IDEOGRAPH
+ {0xB4FE, 0x902E}, //8474 #CJK UNIFIED IDEOGRAPH
+ {0xB540, 0x790D}, //8475 #CJK UNIFIED IDEOGRAPH
+ {0xB541, 0x790E}, //8476 #CJK UNIFIED IDEOGRAPH
+ {0xB542, 0x790F}, //8477 #CJK UNIFIED IDEOGRAPH
+ {0xB543, 0x7910}, //8478 #CJK UNIFIED IDEOGRAPH
+ {0xB544, 0x7911}, //8479 #CJK UNIFIED IDEOGRAPH
+ {0xB545, 0x7912}, //8480 #CJK UNIFIED IDEOGRAPH
+ {0xB546, 0x7914}, //8481 #CJK UNIFIED IDEOGRAPH
+ {0xB547, 0x7915}, //8482 #CJK UNIFIED IDEOGRAPH
+ {0xB548, 0x7916}, //8483 #CJK UNIFIED IDEOGRAPH
+ {0xB549, 0x7917}, //8484 #CJK UNIFIED IDEOGRAPH
+ {0xB54A, 0x7918}, //8485 #CJK UNIFIED IDEOGRAPH
+ {0xB54B, 0x7919}, //8486 #CJK UNIFIED IDEOGRAPH
+ {0xB54C, 0x791A}, //8487 #CJK UNIFIED IDEOGRAPH
+ {0xB54D, 0x791B}, //8488 #CJK UNIFIED IDEOGRAPH
+ {0xB54E, 0x791C}, //8489 #CJK UNIFIED IDEOGRAPH
+ {0xB54F, 0x791D}, //8490 #CJK UNIFIED IDEOGRAPH
+ {0xB550, 0x791F}, //8491 #CJK UNIFIED IDEOGRAPH
+ {0xB551, 0x7920}, //8492 #CJK UNIFIED IDEOGRAPH
+ {0xB552, 0x7921}, //8493 #CJK UNIFIED IDEOGRAPH
+ {0xB553, 0x7922}, //8494 #CJK UNIFIED IDEOGRAPH
+ {0xB554, 0x7923}, //8495 #CJK UNIFIED IDEOGRAPH
+ {0xB555, 0x7925}, //8496 #CJK UNIFIED IDEOGRAPH
+ {0xB556, 0x7926}, //8497 #CJK UNIFIED IDEOGRAPH
+ {0xB557, 0x7927}, //8498 #CJK UNIFIED IDEOGRAPH
+ {0xB558, 0x7928}, //8499 #CJK UNIFIED IDEOGRAPH
+ {0xB559, 0x7929}, //8500 #CJK UNIFIED IDEOGRAPH
+ {0xB55A, 0x792A}, //8501 #CJK UNIFIED IDEOGRAPH
+ {0xB55B, 0x792B}, //8502 #CJK UNIFIED IDEOGRAPH
+ {0xB55C, 0x792C}, //8503 #CJK UNIFIED IDEOGRAPH
+ {0xB55D, 0x792D}, //8504 #CJK UNIFIED IDEOGRAPH
+ {0xB55E, 0x792E}, //8505 #CJK UNIFIED IDEOGRAPH
+ {0xB55F, 0x792F}, //8506 #CJK UNIFIED IDEOGRAPH
+ {0xB560, 0x7930}, //8507 #CJK UNIFIED IDEOGRAPH
+ {0xB561, 0x7931}, //8508 #CJK UNIFIED IDEOGRAPH
+ {0xB562, 0x7932}, //8509 #CJK UNIFIED IDEOGRAPH
+ {0xB563, 0x7933}, //8510 #CJK UNIFIED IDEOGRAPH
+ {0xB564, 0x7935}, //8511 #CJK UNIFIED IDEOGRAPH
+ {0xB565, 0x7936}, //8512 #CJK UNIFIED IDEOGRAPH
+ {0xB566, 0x7937}, //8513 #CJK UNIFIED IDEOGRAPH
+ {0xB567, 0x7938}, //8514 #CJK UNIFIED IDEOGRAPH
+ {0xB568, 0x7939}, //8515 #CJK UNIFIED IDEOGRAPH
+ {0xB569, 0x793D}, //8516 #CJK UNIFIED IDEOGRAPH
+ {0xB56A, 0x793F}, //8517 #CJK UNIFIED IDEOGRAPH
+ {0xB56B, 0x7942}, //8518 #CJK UNIFIED IDEOGRAPH
+ {0xB56C, 0x7943}, //8519 #CJK UNIFIED IDEOGRAPH
+ {0xB56D, 0x7944}, //8520 #CJK UNIFIED IDEOGRAPH
+ {0xB56E, 0x7945}, //8521 #CJK UNIFIED IDEOGRAPH
+ {0xB56F, 0x7947}, //8522 #CJK UNIFIED IDEOGRAPH
+ {0xB570, 0x794A}, //8523 #CJK UNIFIED IDEOGRAPH
+ {0xB571, 0x794B}, //8524 #CJK UNIFIED IDEOGRAPH
+ {0xB572, 0x794C}, //8525 #CJK UNIFIED IDEOGRAPH
+ {0xB573, 0x794D}, //8526 #CJK UNIFIED IDEOGRAPH
+ {0xB574, 0x794E}, //8527 #CJK UNIFIED IDEOGRAPH
+ {0xB575, 0x794F}, //8528 #CJK UNIFIED IDEOGRAPH
+ {0xB576, 0x7950}, //8529 #CJK UNIFIED IDEOGRAPH
+ {0xB577, 0x7951}, //8530 #CJK UNIFIED IDEOGRAPH
+ {0xB578, 0x7952}, //8531 #CJK UNIFIED IDEOGRAPH
+ {0xB579, 0x7954}, //8532 #CJK UNIFIED IDEOGRAPH
+ {0xB57A, 0x7955}, //8533 #CJK UNIFIED IDEOGRAPH
+ {0xB57B, 0x7958}, //8534 #CJK UNIFIED IDEOGRAPH
+ {0xB57C, 0x7959}, //8535 #CJK UNIFIED IDEOGRAPH
+ {0xB57D, 0x7961}, //8536 #CJK UNIFIED IDEOGRAPH
+ {0xB57E, 0x7963}, //8537 #CJK UNIFIED IDEOGRAPH
+ {0xB580, 0x7964}, //8538 #CJK UNIFIED IDEOGRAPH
+ {0xB581, 0x7966}, //8539 #CJK UNIFIED IDEOGRAPH
+ {0xB582, 0x7969}, //8540 #CJK UNIFIED IDEOGRAPH
+ {0xB583, 0x796A}, //8541 #CJK UNIFIED IDEOGRAPH
+ {0xB584, 0x796B}, //8542 #CJK UNIFIED IDEOGRAPH
+ {0xB585, 0x796C}, //8543 #CJK UNIFIED IDEOGRAPH
+ {0xB586, 0x796E}, //8544 #CJK UNIFIED IDEOGRAPH
+ {0xB587, 0x7970}, //8545 #CJK UNIFIED IDEOGRAPH
+ {0xB588, 0x7971}, //8546 #CJK UNIFIED IDEOGRAPH
+ {0xB589, 0x7972}, //8547 #CJK UNIFIED IDEOGRAPH
+ {0xB58A, 0x7973}, //8548 #CJK UNIFIED IDEOGRAPH
+ {0xB58B, 0x7974}, //8549 #CJK UNIFIED IDEOGRAPH
+ {0xB58C, 0x7975}, //8550 #CJK UNIFIED IDEOGRAPH
+ {0xB58D, 0x7976}, //8551 #CJK UNIFIED IDEOGRAPH
+ {0xB58E, 0x7979}, //8552 #CJK UNIFIED IDEOGRAPH
+ {0xB58F, 0x797B}, //8553 #CJK UNIFIED IDEOGRAPH
+ {0xB590, 0x797C}, //8554 #CJK UNIFIED IDEOGRAPH
+ {0xB591, 0x797D}, //8555 #CJK UNIFIED IDEOGRAPH
+ {0xB592, 0x797E}, //8556 #CJK UNIFIED IDEOGRAPH
+ {0xB593, 0x797F}, //8557 #CJK UNIFIED IDEOGRAPH
+ {0xB594, 0x7982}, //8558 #CJK UNIFIED IDEOGRAPH
+ {0xB595, 0x7983}, //8559 #CJK UNIFIED IDEOGRAPH
+ {0xB596, 0x7986}, //8560 #CJK UNIFIED IDEOGRAPH
+ {0xB597, 0x7987}, //8561 #CJK UNIFIED IDEOGRAPH
+ {0xB598, 0x7988}, //8562 #CJK UNIFIED IDEOGRAPH
+ {0xB599, 0x7989}, //8563 #CJK UNIFIED IDEOGRAPH
+ {0xB59A, 0x798B}, //8564 #CJK UNIFIED IDEOGRAPH
+ {0xB59B, 0x798C}, //8565 #CJK UNIFIED IDEOGRAPH
+ {0xB59C, 0x798D}, //8566 #CJK UNIFIED IDEOGRAPH
+ {0xB59D, 0x798E}, //8567 #CJK UNIFIED IDEOGRAPH
+ {0xB59E, 0x7990}, //8568 #CJK UNIFIED IDEOGRAPH
+ {0xB59F, 0x7991}, //8569 #CJK UNIFIED IDEOGRAPH
+ {0xB5A0, 0x7992}, //8570 #CJK UNIFIED IDEOGRAPH
+ {0xB5A1, 0x6020}, //8571 #CJK UNIFIED IDEOGRAPH
+ {0xB5A2, 0x803D}, //8572 #CJK UNIFIED IDEOGRAPH
+ {0xB5A3, 0x62C5}, //8573 #CJK UNIFIED IDEOGRAPH
+ {0xB5A4, 0x4E39}, //8574 #CJK UNIFIED IDEOGRAPH
+ {0xB5A5, 0x5355}, //8575 #CJK UNIFIED IDEOGRAPH
+ {0xB5A6, 0x90F8}, //8576 #CJK UNIFIED IDEOGRAPH
+ {0xB5A7, 0x63B8}, //8577 #CJK UNIFIED IDEOGRAPH
+ {0xB5A8, 0x80C6}, //8578 #CJK UNIFIED IDEOGRAPH
+ {0xB5A9, 0x65E6}, //8579 #CJK UNIFIED IDEOGRAPH
+ {0xB5AA, 0x6C2E}, //8580 #CJK UNIFIED IDEOGRAPH
+ {0xB5AB, 0x4F46}, //8581 #CJK UNIFIED IDEOGRAPH
+ {0xB5AC, 0x60EE}, //8582 #CJK UNIFIED IDEOGRAPH
+ {0xB5AD, 0x6DE1}, //8583 #CJK UNIFIED IDEOGRAPH
+ {0xB5AE, 0x8BDE}, //8584 #CJK UNIFIED IDEOGRAPH
+ {0xB5AF, 0x5F39}, //8585 #CJK UNIFIED IDEOGRAPH
+ {0xB5B0, 0x86CB}, //8586 #CJK UNIFIED IDEOGRAPH
+ {0xB5B1, 0x5F53}, //8587 #CJK UNIFIED IDEOGRAPH
+ {0xB5B2, 0x6321}, //8588 #CJK UNIFIED IDEOGRAPH
+ {0xB5B3, 0x515A}, //8589 #CJK UNIFIED IDEOGRAPH
+ {0xB5B4, 0x8361}, //8590 #CJK UNIFIED IDEOGRAPH
+ {0xB5B5, 0x6863}, //8591 #CJK UNIFIED IDEOGRAPH
+ {0xB5B6, 0x5200}, //8592 #CJK UNIFIED IDEOGRAPH
+ {0xB5B7, 0x6363}, //8593 #CJK UNIFIED IDEOGRAPH
+ {0xB5B8, 0x8E48}, //8594 #CJK UNIFIED IDEOGRAPH
+ {0xB5B9, 0x5012}, //8595 #CJK UNIFIED IDEOGRAPH
+ {0xB5BA, 0x5C9B}, //8596 #CJK UNIFIED IDEOGRAPH
+ {0xB5BB, 0x7977}, //8597 #CJK UNIFIED IDEOGRAPH
+ {0xB5BC, 0x5BFC}, //8598 #CJK UNIFIED IDEOGRAPH
+ {0xB5BD, 0x5230}, //8599 #CJK UNIFIED IDEOGRAPH
+ {0xB5BE, 0x7A3B}, //8600 #CJK UNIFIED IDEOGRAPH
+ {0xB5BF, 0x60BC}, //8601 #CJK UNIFIED IDEOGRAPH
+ {0xB5C0, 0x9053}, //8602 #CJK UNIFIED IDEOGRAPH
+ {0xB5C1, 0x76D7}, //8603 #CJK UNIFIED IDEOGRAPH
+ {0xB5C2, 0x5FB7}, //8604 #CJK UNIFIED IDEOGRAPH
+ {0xB5C3, 0x5F97}, //8605 #CJK UNIFIED IDEOGRAPH
+ {0xB5C4, 0x7684}, //8606 #CJK UNIFIED IDEOGRAPH
+ {0xB5C5, 0x8E6C}, //8607 #CJK UNIFIED IDEOGRAPH
+ {0xB5C6, 0x706F}, //8608 #CJK UNIFIED IDEOGRAPH
+ {0xB5C7, 0x767B}, //8609 #CJK UNIFIED IDEOGRAPH
+ {0xB5C8, 0x7B49}, //8610 #CJK UNIFIED IDEOGRAPH
+ {0xB5C9, 0x77AA}, //8611 #CJK UNIFIED IDEOGRAPH
+ {0xB5CA, 0x51F3}, //8612 #CJK UNIFIED IDEOGRAPH
+ {0xB5CB, 0x9093}, //8613 #CJK UNIFIED IDEOGRAPH
+ {0xB5CC, 0x5824}, //8614 #CJK UNIFIED IDEOGRAPH
+ {0xB5CD, 0x4F4E}, //8615 #CJK UNIFIED IDEOGRAPH
+ {0xB5CE, 0x6EF4}, //8616 #CJK UNIFIED IDEOGRAPH
+ {0xB5CF, 0x8FEA}, //8617 #CJK UNIFIED IDEOGRAPH
+ {0xB5D0, 0x654C}, //8618 #CJK UNIFIED IDEOGRAPH
+ {0xB5D1, 0x7B1B}, //8619 #CJK UNIFIED IDEOGRAPH
+ {0xB5D2, 0x72C4}, //8620 #CJK UNIFIED IDEOGRAPH
+ {0xB5D3, 0x6DA4}, //8621 #CJK UNIFIED IDEOGRAPH
+ {0xB5D4, 0x7FDF}, //8622 #CJK UNIFIED IDEOGRAPH
+ {0xB5D5, 0x5AE1}, //8623 #CJK UNIFIED IDEOGRAPH
+ {0xB5D6, 0x62B5}, //8624 #CJK UNIFIED IDEOGRAPH
+ {0xB5D7, 0x5E95}, //8625 #CJK UNIFIED IDEOGRAPH
+ {0xB5D8, 0x5730}, //8626 #CJK UNIFIED IDEOGRAPH
+ {0xB5D9, 0x8482}, //8627 #CJK UNIFIED IDEOGRAPH
+ {0xB5DA, 0x7B2C}, //8628 #CJK UNIFIED IDEOGRAPH
+ {0xB5DB, 0x5E1D}, //8629 #CJK UNIFIED IDEOGRAPH
+ {0xB5DC, 0x5F1F}, //8630 #CJK UNIFIED IDEOGRAPH
+ {0xB5DD, 0x9012}, //8631 #CJK UNIFIED IDEOGRAPH
+ {0xB5DE, 0x7F14}, //8632 #CJK UNIFIED IDEOGRAPH
+ {0xB5DF, 0x98A0}, //8633 #CJK UNIFIED IDEOGRAPH
+ {0xB5E0, 0x6382}, //8634 #CJK UNIFIED IDEOGRAPH
+ {0xB5E1, 0x6EC7}, //8635 #CJK UNIFIED IDEOGRAPH
+ {0xB5E2, 0x7898}, //8636 #CJK UNIFIED IDEOGRAPH
+ {0xB5E3, 0x70B9}, //8637 #CJK UNIFIED IDEOGRAPH
+ {0xB5E4, 0x5178}, //8638 #CJK UNIFIED IDEOGRAPH
+ {0xB5E5, 0x975B}, //8639 #CJK UNIFIED IDEOGRAPH
+ {0xB5E6, 0x57AB}, //8640 #CJK UNIFIED IDEOGRAPH
+ {0xB5E7, 0x7535}, //8641 #CJK UNIFIED IDEOGRAPH
+ {0xB5E8, 0x4F43}, //8642 #CJK UNIFIED IDEOGRAPH
+ {0xB5E9, 0x7538}, //8643 #CJK UNIFIED IDEOGRAPH
+ {0xB5EA, 0x5E97}, //8644 #CJK UNIFIED IDEOGRAPH
+ {0xB5EB, 0x60E6}, //8645 #CJK UNIFIED IDEOGRAPH
+ {0xB5EC, 0x5960}, //8646 #CJK UNIFIED IDEOGRAPH
+ {0xB5ED, 0x6DC0}, //8647 #CJK UNIFIED IDEOGRAPH
+ {0xB5EE, 0x6BBF}, //8648 #CJK UNIFIED IDEOGRAPH
+ {0xB5EF, 0x7889}, //8649 #CJK UNIFIED IDEOGRAPH
+ {0xB5F0, 0x53FC}, //8650 #CJK UNIFIED IDEOGRAPH
+ {0xB5F1, 0x96D5}, //8651 #CJK UNIFIED IDEOGRAPH
+ {0xB5F2, 0x51CB}, //8652 #CJK UNIFIED IDEOGRAPH
+ {0xB5F3, 0x5201}, //8653 #CJK UNIFIED IDEOGRAPH
+ {0xB5F4, 0x6389}, //8654 #CJK UNIFIED IDEOGRAPH
+ {0xB5F5, 0x540A}, //8655 #CJK UNIFIED IDEOGRAPH
+ {0xB5F6, 0x9493}, //8656 #CJK UNIFIED IDEOGRAPH
+ {0xB5F7, 0x8C03}, //8657 #CJK UNIFIED IDEOGRAPH
+ {0xB5F8, 0x8DCC}, //8658 #CJK UNIFIED IDEOGRAPH
+ {0xB5F9, 0x7239}, //8659 #CJK UNIFIED IDEOGRAPH
+ {0xB5FA, 0x789F}, //8660 #CJK UNIFIED IDEOGRAPH
+ {0xB5FB, 0x8776}, //8661 #CJK UNIFIED IDEOGRAPH
+ {0xB5FC, 0x8FED}, //8662 #CJK UNIFIED IDEOGRAPH
+ {0xB5FD, 0x8C0D}, //8663 #CJK UNIFIED IDEOGRAPH
+ {0xB5FE, 0x53E0}, //8664 #CJK UNIFIED IDEOGRAPH
+ {0xB640, 0x7993}, //8665 #CJK UNIFIED IDEOGRAPH
+ {0xB641, 0x7994}, //8666 #CJK UNIFIED IDEOGRAPH
+ {0xB642, 0x7995}, //8667 #CJK UNIFIED IDEOGRAPH
+ {0xB643, 0x7996}, //8668 #CJK UNIFIED IDEOGRAPH
+ {0xB644, 0x7997}, //8669 #CJK UNIFIED IDEOGRAPH
+ {0xB645, 0x7998}, //8670 #CJK UNIFIED IDEOGRAPH
+ {0xB646, 0x7999}, //8671 #CJK UNIFIED IDEOGRAPH
+ {0xB647, 0x799B}, //8672 #CJK UNIFIED IDEOGRAPH
+ {0xB648, 0x799C}, //8673 #CJK UNIFIED IDEOGRAPH
+ {0xB649, 0x799D}, //8674 #CJK UNIFIED IDEOGRAPH
+ {0xB64A, 0x799E}, //8675 #CJK UNIFIED IDEOGRAPH
+ {0xB64B, 0x799F}, //8676 #CJK UNIFIED IDEOGRAPH
+ {0xB64C, 0x79A0}, //8677 #CJK UNIFIED IDEOGRAPH
+ {0xB64D, 0x79A1}, //8678 #CJK UNIFIED IDEOGRAPH
+ {0xB64E, 0x79A2}, //8679 #CJK UNIFIED IDEOGRAPH
+ {0xB64F, 0x79A3}, //8680 #CJK UNIFIED IDEOGRAPH
+ {0xB650, 0x79A4}, //8681 #CJK UNIFIED IDEOGRAPH
+ {0xB651, 0x79A5}, //8682 #CJK UNIFIED IDEOGRAPH
+ {0xB652, 0x79A6}, //8683 #CJK UNIFIED IDEOGRAPH
+ {0xB653, 0x79A8}, //8684 #CJK UNIFIED IDEOGRAPH
+ {0xB654, 0x79A9}, //8685 #CJK UNIFIED IDEOGRAPH
+ {0xB655, 0x79AA}, //8686 #CJK UNIFIED IDEOGRAPH
+ {0xB656, 0x79AB}, //8687 #CJK UNIFIED IDEOGRAPH
+ {0xB657, 0x79AC}, //8688 #CJK UNIFIED IDEOGRAPH
+ {0xB658, 0x79AD}, //8689 #CJK UNIFIED IDEOGRAPH
+ {0xB659, 0x79AE}, //8690 #CJK UNIFIED IDEOGRAPH
+ {0xB65A, 0x79AF}, //8691 #CJK UNIFIED IDEOGRAPH
+ {0xB65B, 0x79B0}, //8692 #CJK UNIFIED IDEOGRAPH
+ {0xB65C, 0x79B1}, //8693 #CJK UNIFIED IDEOGRAPH
+ {0xB65D, 0x79B2}, //8694 #CJK UNIFIED IDEOGRAPH
+ {0xB65E, 0x79B4}, //8695 #CJK UNIFIED IDEOGRAPH
+ {0xB65F, 0x79B5}, //8696 #CJK UNIFIED IDEOGRAPH
+ {0xB660, 0x79B6}, //8697 #CJK UNIFIED IDEOGRAPH
+ {0xB661, 0x79B7}, //8698 #CJK UNIFIED IDEOGRAPH
+ {0xB662, 0x79B8}, //8699 #CJK UNIFIED IDEOGRAPH
+ {0xB663, 0x79BC}, //8700 #CJK UNIFIED IDEOGRAPH
+ {0xB664, 0x79BF}, //8701 #CJK UNIFIED IDEOGRAPH
+ {0xB665, 0x79C2}, //8702 #CJK UNIFIED IDEOGRAPH
+ {0xB666, 0x79C4}, //8703 #CJK UNIFIED IDEOGRAPH
+ {0xB667, 0x79C5}, //8704 #CJK UNIFIED IDEOGRAPH
+ {0xB668, 0x79C7}, //8705 #CJK UNIFIED IDEOGRAPH
+ {0xB669, 0x79C8}, //8706 #CJK UNIFIED IDEOGRAPH
+ {0xB66A, 0x79CA}, //8707 #CJK UNIFIED IDEOGRAPH
+ {0xB66B, 0x79CC}, //8708 #CJK UNIFIED IDEOGRAPH
+ {0xB66C, 0x79CE}, //8709 #CJK UNIFIED IDEOGRAPH
+ {0xB66D, 0x79CF}, //8710 #CJK UNIFIED IDEOGRAPH
+ {0xB66E, 0x79D0}, //8711 #CJK UNIFIED IDEOGRAPH
+ {0xB66F, 0x79D3}, //8712 #CJK UNIFIED IDEOGRAPH
+ {0xB670, 0x79D4}, //8713 #CJK UNIFIED IDEOGRAPH
+ {0xB671, 0x79D6}, //8714 #CJK UNIFIED IDEOGRAPH
+ {0xB672, 0x79D7}, //8715 #CJK UNIFIED IDEOGRAPH
+ {0xB673, 0x79D9}, //8716 #CJK UNIFIED IDEOGRAPH
+ {0xB674, 0x79DA}, //8717 #CJK UNIFIED IDEOGRAPH
+ {0xB675, 0x79DB}, //8718 #CJK UNIFIED IDEOGRAPH
+ {0xB676, 0x79DC}, //8719 #CJK UNIFIED IDEOGRAPH
+ {0xB677, 0x79DD}, //8720 #CJK UNIFIED IDEOGRAPH
+ {0xB678, 0x79DE}, //8721 #CJK UNIFIED IDEOGRAPH
+ {0xB679, 0x79E0}, //8722 #CJK UNIFIED IDEOGRAPH
+ {0xB67A, 0x79E1}, //8723 #CJK UNIFIED IDEOGRAPH
+ {0xB67B, 0x79E2}, //8724 #CJK UNIFIED IDEOGRAPH
+ {0xB67C, 0x79E5}, //8725 #CJK UNIFIED IDEOGRAPH
+ {0xB67D, 0x79E8}, //8726 #CJK UNIFIED IDEOGRAPH
+ {0xB67E, 0x79EA}, //8727 #CJK UNIFIED IDEOGRAPH
+ {0xB680, 0x79EC}, //8728 #CJK UNIFIED IDEOGRAPH
+ {0xB681, 0x79EE}, //8729 #CJK UNIFIED IDEOGRAPH
+ {0xB682, 0x79F1}, //8730 #CJK UNIFIED IDEOGRAPH
+ {0xB683, 0x79F2}, //8731 #CJK UNIFIED IDEOGRAPH
+ {0xB684, 0x79F3}, //8732 #CJK UNIFIED IDEOGRAPH
+ {0xB685, 0x79F4}, //8733 #CJK UNIFIED IDEOGRAPH
+ {0xB686, 0x79F5}, //8734 #CJK UNIFIED IDEOGRAPH
+ {0xB687, 0x79F6}, //8735 #CJK UNIFIED IDEOGRAPH
+ {0xB688, 0x79F7}, //8736 #CJK UNIFIED IDEOGRAPH
+ {0xB689, 0x79F9}, //8737 #CJK UNIFIED IDEOGRAPH
+ {0xB68A, 0x79FA}, //8738 #CJK UNIFIED IDEOGRAPH
+ {0xB68B, 0x79FC}, //8739 #CJK UNIFIED IDEOGRAPH
+ {0xB68C, 0x79FE}, //8740 #CJK UNIFIED IDEOGRAPH
+ {0xB68D, 0x79FF}, //8741 #CJK UNIFIED IDEOGRAPH
+ {0xB68E, 0x7A01}, //8742 #CJK UNIFIED IDEOGRAPH
+ {0xB68F, 0x7A04}, //8743 #CJK UNIFIED IDEOGRAPH
+ {0xB690, 0x7A05}, //8744 #CJK UNIFIED IDEOGRAPH
+ {0xB691, 0x7A07}, //8745 #CJK UNIFIED IDEOGRAPH
+ {0xB692, 0x7A08}, //8746 #CJK UNIFIED IDEOGRAPH
+ {0xB693, 0x7A09}, //8747 #CJK UNIFIED IDEOGRAPH
+ {0xB694, 0x7A0A}, //8748 #CJK UNIFIED IDEOGRAPH
+ {0xB695, 0x7A0C}, //8749 #CJK UNIFIED IDEOGRAPH
+ {0xB696, 0x7A0F}, //8750 #CJK UNIFIED IDEOGRAPH
+ {0xB697, 0x7A10}, //8751 #CJK UNIFIED IDEOGRAPH
+ {0xB698, 0x7A11}, //8752 #CJK UNIFIED IDEOGRAPH
+ {0xB699, 0x7A12}, //8753 #CJK UNIFIED IDEOGRAPH
+ {0xB69A, 0x7A13}, //8754 #CJK UNIFIED IDEOGRAPH
+ {0xB69B, 0x7A15}, //8755 #CJK UNIFIED IDEOGRAPH
+ {0xB69C, 0x7A16}, //8756 #CJK UNIFIED IDEOGRAPH
+ {0xB69D, 0x7A18}, //8757 #CJK UNIFIED IDEOGRAPH
+ {0xB69E, 0x7A19}, //8758 #CJK UNIFIED IDEOGRAPH
+ {0xB69F, 0x7A1B}, //8759 #CJK UNIFIED IDEOGRAPH
+ {0xB6A0, 0x7A1C}, //8760 #CJK UNIFIED IDEOGRAPH
+ {0xB6A1, 0x4E01}, //8761 #CJK UNIFIED IDEOGRAPH
+ {0xB6A2, 0x76EF}, //8762 #CJK UNIFIED IDEOGRAPH
+ {0xB6A3, 0x53EE}, //8763 #CJK UNIFIED IDEOGRAPH
+ {0xB6A4, 0x9489}, //8764 #CJK UNIFIED IDEOGRAPH
+ {0xB6A5, 0x9876}, //8765 #CJK UNIFIED IDEOGRAPH
+ {0xB6A6, 0x9F0E}, //8766 #CJK UNIFIED IDEOGRAPH
+ {0xB6A7, 0x952D}, //8767 #CJK UNIFIED IDEOGRAPH
+ {0xB6A8, 0x5B9A}, //8768 #CJK UNIFIED IDEOGRAPH
+ {0xB6A9, 0x8BA2}, //8769 #CJK UNIFIED IDEOGRAPH
+ {0xB6AA, 0x4E22}, //8770 #CJK UNIFIED IDEOGRAPH
+ {0xB6AB, 0x4E1C}, //8771 #CJK UNIFIED IDEOGRAPH
+ {0xB6AC, 0x51AC}, //8772 #CJK UNIFIED IDEOGRAPH
+ {0xB6AD, 0x8463}, //8773 #CJK UNIFIED IDEOGRAPH
+ {0xB6AE, 0x61C2}, //8774 #CJK UNIFIED IDEOGRAPH
+ {0xB6AF, 0x52A8}, //8775 #CJK UNIFIED IDEOGRAPH
+ {0xB6B0, 0x680B}, //8776 #CJK UNIFIED IDEOGRAPH
+ {0xB6B1, 0x4F97}, //8777 #CJK UNIFIED IDEOGRAPH
+ {0xB6B2, 0x606B}, //8778 #CJK UNIFIED IDEOGRAPH
+ {0xB6B3, 0x51BB}, //8779 #CJK UNIFIED IDEOGRAPH
+ {0xB6B4, 0x6D1E}, //8780 #CJK UNIFIED IDEOGRAPH
+ {0xB6B5, 0x515C}, //8781 #CJK UNIFIED IDEOGRAPH
+ {0xB6B6, 0x6296}, //8782 #CJK UNIFIED IDEOGRAPH
+ {0xB6B7, 0x6597}, //8783 #CJK UNIFIED IDEOGRAPH
+ {0xB6B8, 0x9661}, //8784 #CJK UNIFIED IDEOGRAPH
+ {0xB6B9, 0x8C46}, //8785 #CJK UNIFIED IDEOGRAPH
+ {0xB6BA, 0x9017}, //8786 #CJK UNIFIED IDEOGRAPH
+ {0xB6BB, 0x75D8}, //8787 #CJK UNIFIED IDEOGRAPH
+ {0xB6BC, 0x90FD}, //8788 #CJK UNIFIED IDEOGRAPH
+ {0xB6BD, 0x7763}, //8789 #CJK UNIFIED IDEOGRAPH
+ {0xB6BE, 0x6BD2}, //8790 #CJK UNIFIED IDEOGRAPH
+ {0xB6BF, 0x728A}, //8791 #CJK UNIFIED IDEOGRAPH
+ {0xB6C0, 0x72EC}, //8792 #CJK UNIFIED IDEOGRAPH
+ {0xB6C1, 0x8BFB}, //8793 #CJK UNIFIED IDEOGRAPH
+ {0xB6C2, 0x5835}, //8794 #CJK UNIFIED IDEOGRAPH
+ {0xB6C3, 0x7779}, //8795 #CJK UNIFIED IDEOGRAPH
+ {0xB6C4, 0x8D4C}, //8796 #CJK UNIFIED IDEOGRAPH
+ {0xB6C5, 0x675C}, //8797 #CJK UNIFIED IDEOGRAPH
+ {0xB6C6, 0x9540}, //8798 #CJK UNIFIED IDEOGRAPH
+ {0xB6C7, 0x809A}, //8799 #CJK UNIFIED IDEOGRAPH
+ {0xB6C8, 0x5EA6}, //8800 #CJK UNIFIED IDEOGRAPH
+ {0xB6C9, 0x6E21}, //8801 #CJK UNIFIED IDEOGRAPH
+ {0xB6CA, 0x5992}, //8802 #CJK UNIFIED IDEOGRAPH
+ {0xB6CB, 0x7AEF}, //8803 #CJK UNIFIED IDEOGRAPH
+ {0xB6CC, 0x77ED}, //8804 #CJK UNIFIED IDEOGRAPH
+ {0xB6CD, 0x953B}, //8805 #CJK UNIFIED IDEOGRAPH
+ {0xB6CE, 0x6BB5}, //8806 #CJK UNIFIED IDEOGRAPH
+ {0xB6CF, 0x65AD}, //8807 #CJK UNIFIED IDEOGRAPH
+ {0xB6D0, 0x7F0E}, //8808 #CJK UNIFIED IDEOGRAPH
+ {0xB6D1, 0x5806}, //8809 #CJK UNIFIED IDEOGRAPH
+ {0xB6D2, 0x5151}, //8810 #CJK UNIFIED IDEOGRAPH
+ {0xB6D3, 0x961F}, //8811 #CJK UNIFIED IDEOGRAPH
+ {0xB6D4, 0x5BF9}, //8812 #CJK UNIFIED IDEOGRAPH
+ {0xB6D5, 0x58A9}, //8813 #CJK UNIFIED IDEOGRAPH
+ {0xB6D6, 0x5428}, //8814 #CJK UNIFIED IDEOGRAPH
+ {0xB6D7, 0x8E72}, //8815 #CJK UNIFIED IDEOGRAPH
+ {0xB6D8, 0x6566}, //8816 #CJK UNIFIED IDEOGRAPH
+ {0xB6D9, 0x987F}, //8817 #CJK UNIFIED IDEOGRAPH
+ {0xB6DA, 0x56E4}, //8818 #CJK UNIFIED IDEOGRAPH
+ {0xB6DB, 0x949D}, //8819 #CJK UNIFIED IDEOGRAPH
+ {0xB6DC, 0x76FE}, //8820 #CJK UNIFIED IDEOGRAPH
+ {0xB6DD, 0x9041}, //8821 #CJK UNIFIED IDEOGRAPH
+ {0xB6DE, 0x6387}, //8822 #CJK UNIFIED IDEOGRAPH
+ {0xB6DF, 0x54C6}, //8823 #CJK UNIFIED IDEOGRAPH
+ {0xB6E0, 0x591A}, //8824 #CJK UNIFIED IDEOGRAPH
+ {0xB6E1, 0x593A}, //8825 #CJK UNIFIED IDEOGRAPH
+ {0xB6E2, 0x579B}, //8826 #CJK UNIFIED IDEOGRAPH
+ {0xB6E3, 0x8EB2}, //8827 #CJK UNIFIED IDEOGRAPH
+ {0xB6E4, 0x6735}, //8828 #CJK UNIFIED IDEOGRAPH
+ {0xB6E5, 0x8DFA}, //8829 #CJK UNIFIED IDEOGRAPH
+ {0xB6E6, 0x8235}, //8830 #CJK UNIFIED IDEOGRAPH
+ {0xB6E7, 0x5241}, //8831 #CJK UNIFIED IDEOGRAPH
+ {0xB6E8, 0x60F0}, //8832 #CJK UNIFIED IDEOGRAPH
+ {0xB6E9, 0x5815}, //8833 #CJK UNIFIED IDEOGRAPH
+ {0xB6EA, 0x86FE}, //8834 #CJK UNIFIED IDEOGRAPH
+ {0xB6EB, 0x5CE8}, //8835 #CJK UNIFIED IDEOGRAPH
+ {0xB6EC, 0x9E45}, //8836 #CJK UNIFIED IDEOGRAPH
+ {0xB6ED, 0x4FC4}, //8837 #CJK UNIFIED IDEOGRAPH
+ {0xB6EE, 0x989D}, //8838 #CJK UNIFIED IDEOGRAPH
+ {0xB6EF, 0x8BB9}, //8839 #CJK UNIFIED IDEOGRAPH
+ {0xB6F0, 0x5A25}, //8840 #CJK UNIFIED IDEOGRAPH
+ {0xB6F1, 0x6076}, //8841 #CJK UNIFIED IDEOGRAPH
+ {0xB6F2, 0x5384}, //8842 #CJK UNIFIED IDEOGRAPH
+ {0xB6F3, 0x627C}, //8843 #CJK UNIFIED IDEOGRAPH
+ {0xB6F4, 0x904F}, //8844 #CJK UNIFIED IDEOGRAPH
+ {0xB6F5, 0x9102}, //8845 #CJK UNIFIED IDEOGRAPH
+ {0xB6F6, 0x997F}, //8846 #CJK UNIFIED IDEOGRAPH
+ {0xB6F7, 0x6069}, //8847 #CJK UNIFIED IDEOGRAPH
+ {0xB6F8, 0x800C}, //8848 #CJK UNIFIED IDEOGRAPH
+ {0xB6F9, 0x513F}, //8849 #CJK UNIFIED IDEOGRAPH
+ {0xB6FA, 0x8033}, //8850 #CJK UNIFIED IDEOGRAPH
+ {0xB6FB, 0x5C14}, //8851 #CJK UNIFIED IDEOGRAPH
+ {0xB6FC, 0x9975}, //8852 #CJK UNIFIED IDEOGRAPH
+ {0xB6FD, 0x6D31}, //8853 #CJK UNIFIED IDEOGRAPH
+ {0xB6FE, 0x4E8C}, //8854 #CJK UNIFIED IDEOGRAPH
+ {0xB740, 0x7A1D}, //8855 #CJK UNIFIED IDEOGRAPH
+ {0xB741, 0x7A1F}, //8856 #CJK UNIFIED IDEOGRAPH
+ {0xB742, 0x7A21}, //8857 #CJK UNIFIED IDEOGRAPH
+ {0xB743, 0x7A22}, //8858 #CJK UNIFIED IDEOGRAPH
+ {0xB744, 0x7A24}, //8859 #CJK UNIFIED IDEOGRAPH
+ {0xB745, 0x7A25}, //8860 #CJK UNIFIED IDEOGRAPH
+ {0xB746, 0x7A26}, //8861 #CJK UNIFIED IDEOGRAPH
+ {0xB747, 0x7A27}, //8862 #CJK UNIFIED IDEOGRAPH
+ {0xB748, 0x7A28}, //8863 #CJK UNIFIED IDEOGRAPH
+ {0xB749, 0x7A29}, //8864 #CJK UNIFIED IDEOGRAPH
+ {0xB74A, 0x7A2A}, //8865 #CJK UNIFIED IDEOGRAPH
+ {0xB74B, 0x7A2B}, //8866 #CJK UNIFIED IDEOGRAPH
+ {0xB74C, 0x7A2C}, //8867 #CJK UNIFIED IDEOGRAPH
+ {0xB74D, 0x7A2D}, //8868 #CJK UNIFIED IDEOGRAPH
+ {0xB74E, 0x7A2E}, //8869 #CJK UNIFIED IDEOGRAPH
+ {0xB74F, 0x7A2F}, //8870 #CJK UNIFIED IDEOGRAPH
+ {0xB750, 0x7A30}, //8871 #CJK UNIFIED IDEOGRAPH
+ {0xB751, 0x7A31}, //8872 #CJK UNIFIED IDEOGRAPH
+ {0xB752, 0x7A32}, //8873 #CJK UNIFIED IDEOGRAPH
+ {0xB753, 0x7A34}, //8874 #CJK UNIFIED IDEOGRAPH
+ {0xB754, 0x7A35}, //8875 #CJK UNIFIED IDEOGRAPH
+ {0xB755, 0x7A36}, //8876 #CJK UNIFIED IDEOGRAPH
+ {0xB756, 0x7A38}, //8877 #CJK UNIFIED IDEOGRAPH
+ {0xB757, 0x7A3A}, //8878 #CJK UNIFIED IDEOGRAPH
+ {0xB758, 0x7A3E}, //8879 #CJK UNIFIED IDEOGRAPH
+ {0xB759, 0x7A40}, //8880 #CJK UNIFIED IDEOGRAPH
+ {0xB75A, 0x7A41}, //8881 #CJK UNIFIED IDEOGRAPH
+ {0xB75B, 0x7A42}, //8882 #CJK UNIFIED IDEOGRAPH
+ {0xB75C, 0x7A43}, //8883 #CJK UNIFIED IDEOGRAPH
+ {0xB75D, 0x7A44}, //8884 #CJK UNIFIED IDEOGRAPH
+ {0xB75E, 0x7A45}, //8885 #CJK UNIFIED IDEOGRAPH
+ {0xB75F, 0x7A47}, //8886 #CJK UNIFIED IDEOGRAPH
+ {0xB760, 0x7A48}, //8887 #CJK UNIFIED IDEOGRAPH
+ {0xB761, 0x7A49}, //8888 #CJK UNIFIED IDEOGRAPH
+ {0xB762, 0x7A4A}, //8889 #CJK UNIFIED IDEOGRAPH
+ {0xB763, 0x7A4B}, //8890 #CJK UNIFIED IDEOGRAPH
+ {0xB764, 0x7A4C}, //8891 #CJK UNIFIED IDEOGRAPH
+ {0xB765, 0x7A4D}, //8892 #CJK UNIFIED IDEOGRAPH
+ {0xB766, 0x7A4E}, //8893 #CJK UNIFIED IDEOGRAPH
+ {0xB767, 0x7A4F}, //8894 #CJK UNIFIED IDEOGRAPH
+ {0xB768, 0x7A50}, //8895 #CJK UNIFIED IDEOGRAPH
+ {0xB769, 0x7A52}, //8896 #CJK UNIFIED IDEOGRAPH
+ {0xB76A, 0x7A53}, //8897 #CJK UNIFIED IDEOGRAPH
+ {0xB76B, 0x7A54}, //8898 #CJK UNIFIED IDEOGRAPH
+ {0xB76C, 0x7A55}, //8899 #CJK UNIFIED IDEOGRAPH
+ {0xB76D, 0x7A56}, //8900 #CJK UNIFIED IDEOGRAPH
+ {0xB76E, 0x7A58}, //8901 #CJK UNIFIED IDEOGRAPH
+ {0xB76F, 0x7A59}, //8902 #CJK UNIFIED IDEOGRAPH
+ {0xB770, 0x7A5A}, //8903 #CJK UNIFIED IDEOGRAPH
+ {0xB771, 0x7A5B}, //8904 #CJK UNIFIED IDEOGRAPH
+ {0xB772, 0x7A5C}, //8905 #CJK UNIFIED IDEOGRAPH
+ {0xB773, 0x7A5D}, //8906 #CJK UNIFIED IDEOGRAPH
+ {0xB774, 0x7A5E}, //8907 #CJK UNIFIED IDEOGRAPH
+ {0xB775, 0x7A5F}, //8908 #CJK UNIFIED IDEOGRAPH
+ {0xB776, 0x7A60}, //8909 #CJK UNIFIED IDEOGRAPH
+ {0xB777, 0x7A61}, //8910 #CJK UNIFIED IDEOGRAPH
+ {0xB778, 0x7A62}, //8911 #CJK UNIFIED IDEOGRAPH
+ {0xB779, 0x7A63}, //8912 #CJK UNIFIED IDEOGRAPH
+ {0xB77A, 0x7A64}, //8913 #CJK UNIFIED IDEOGRAPH
+ {0xB77B, 0x7A65}, //8914 #CJK UNIFIED IDEOGRAPH
+ {0xB77C, 0x7A66}, //8915 #CJK UNIFIED IDEOGRAPH
+ {0xB77D, 0x7A67}, //8916 #CJK UNIFIED IDEOGRAPH
+ {0xB77E, 0x7A68}, //8917 #CJK UNIFIED IDEOGRAPH
+ {0xB780, 0x7A69}, //8918 #CJK UNIFIED IDEOGRAPH
+ {0xB781, 0x7A6A}, //8919 #CJK UNIFIED IDEOGRAPH
+ {0xB782, 0x7A6B}, //8920 #CJK UNIFIED IDEOGRAPH
+ {0xB783, 0x7A6C}, //8921 #CJK UNIFIED IDEOGRAPH
+ {0xB784, 0x7A6D}, //8922 #CJK UNIFIED IDEOGRAPH
+ {0xB785, 0x7A6E}, //8923 #CJK UNIFIED IDEOGRAPH
+ {0xB786, 0x7A6F}, //8924 #CJK UNIFIED IDEOGRAPH
+ {0xB787, 0x7A71}, //8925 #CJK UNIFIED IDEOGRAPH
+ {0xB788, 0x7A72}, //8926 #CJK UNIFIED IDEOGRAPH
+ {0xB789, 0x7A73}, //8927 #CJK UNIFIED IDEOGRAPH
+ {0xB78A, 0x7A75}, //8928 #CJK UNIFIED IDEOGRAPH
+ {0xB78B, 0x7A7B}, //8929 #CJK UNIFIED IDEOGRAPH
+ {0xB78C, 0x7A7C}, //8930 #CJK UNIFIED IDEOGRAPH
+ {0xB78D, 0x7A7D}, //8931 #CJK UNIFIED IDEOGRAPH
+ {0xB78E, 0x7A7E}, //8932 #CJK UNIFIED IDEOGRAPH
+ {0xB78F, 0x7A82}, //8933 #CJK UNIFIED IDEOGRAPH
+ {0xB790, 0x7A85}, //8934 #CJK UNIFIED IDEOGRAPH
+ {0xB791, 0x7A87}, //8935 #CJK UNIFIED IDEOGRAPH
+ {0xB792, 0x7A89}, //8936 #CJK UNIFIED IDEOGRAPH
+ {0xB793, 0x7A8A}, //8937 #CJK UNIFIED IDEOGRAPH
+ {0xB794, 0x7A8B}, //8938 #CJK UNIFIED IDEOGRAPH
+ {0xB795, 0x7A8C}, //8939 #CJK UNIFIED IDEOGRAPH
+ {0xB796, 0x7A8E}, //8940 #CJK UNIFIED IDEOGRAPH
+ {0xB797, 0x7A8F}, //8941 #CJK UNIFIED IDEOGRAPH
+ {0xB798, 0x7A90}, //8942 #CJK UNIFIED IDEOGRAPH
+ {0xB799, 0x7A93}, //8943 #CJK UNIFIED IDEOGRAPH
+ {0xB79A, 0x7A94}, //8944 #CJK UNIFIED IDEOGRAPH
+ {0xB79B, 0x7A99}, //8945 #CJK UNIFIED IDEOGRAPH
+ {0xB79C, 0x7A9A}, //8946 #CJK UNIFIED IDEOGRAPH
+ {0xB79D, 0x7A9B}, //8947 #CJK UNIFIED IDEOGRAPH
+ {0xB79E, 0x7A9E}, //8948 #CJK UNIFIED IDEOGRAPH
+ {0xB79F, 0x7AA1}, //8949 #CJK UNIFIED IDEOGRAPH
+ {0xB7A0, 0x7AA2}, //8950 #CJK UNIFIED IDEOGRAPH
+ {0xB7A1, 0x8D30}, //8951 #CJK UNIFIED IDEOGRAPH
+ {0xB7A2, 0x53D1}, //8952 #CJK UNIFIED IDEOGRAPH
+ {0xB7A3, 0x7F5A}, //8953 #CJK UNIFIED IDEOGRAPH
+ {0xB7A4, 0x7B4F}, //8954 #CJK UNIFIED IDEOGRAPH
+ {0xB7A5, 0x4F10}, //8955 #CJK UNIFIED IDEOGRAPH
+ {0xB7A6, 0x4E4F}, //8956 #CJK UNIFIED IDEOGRAPH
+ {0xB7A7, 0x9600}, //8957 #CJK UNIFIED IDEOGRAPH
+ {0xB7A8, 0x6CD5}, //8958 #CJK UNIFIED IDEOGRAPH
+ {0xB7A9, 0x73D0}, //8959 #CJK UNIFIED IDEOGRAPH
+ {0xB7AA, 0x85E9}, //8960 #CJK UNIFIED IDEOGRAPH
+ {0xB7AB, 0x5E06}, //8961 #CJK UNIFIED IDEOGRAPH
+ {0xB7AC, 0x756A}, //8962 #CJK UNIFIED IDEOGRAPH
+ {0xB7AD, 0x7FFB}, //8963 #CJK UNIFIED IDEOGRAPH
+ {0xB7AE, 0x6A0A}, //8964 #CJK UNIFIED IDEOGRAPH
+ {0xB7AF, 0x77FE}, //8965 #CJK UNIFIED IDEOGRAPH
+ {0xB7B0, 0x9492}, //8966 #CJK UNIFIED IDEOGRAPH
+ {0xB7B1, 0x7E41}, //8967 #CJK UNIFIED IDEOGRAPH
+ {0xB7B2, 0x51E1}, //8968 #CJK UNIFIED IDEOGRAPH
+ {0xB7B3, 0x70E6}, //8969 #CJK UNIFIED IDEOGRAPH
+ {0xB7B4, 0x53CD}, //8970 #CJK UNIFIED IDEOGRAPH
+ {0xB7B5, 0x8FD4}, //8971 #CJK UNIFIED IDEOGRAPH
+ {0xB7B6, 0x8303}, //8972 #CJK UNIFIED IDEOGRAPH
+ {0xB7B7, 0x8D29}, //8973 #CJK UNIFIED IDEOGRAPH
+ {0xB7B8, 0x72AF}, //8974 #CJK UNIFIED IDEOGRAPH
+ {0xB7B9, 0x996D}, //8975 #CJK UNIFIED IDEOGRAPH
+ {0xB7BA, 0x6CDB}, //8976 #CJK UNIFIED IDEOGRAPH
+ {0xB7BB, 0x574A}, //8977 #CJK UNIFIED IDEOGRAPH
+ {0xB7BC, 0x82B3}, //8978 #CJK UNIFIED IDEOGRAPH
+ {0xB7BD, 0x65B9}, //8979 #CJK UNIFIED IDEOGRAPH
+ {0xB7BE, 0x80AA}, //8980 #CJK UNIFIED IDEOGRAPH
+ {0xB7BF, 0x623F}, //8981 #CJK UNIFIED IDEOGRAPH
+ {0xB7C0, 0x9632}, //8982 #CJK UNIFIED IDEOGRAPH
+ {0xB7C1, 0x59A8}, //8983 #CJK UNIFIED IDEOGRAPH
+ {0xB7C2, 0x4EFF}, //8984 #CJK UNIFIED IDEOGRAPH
+ {0xB7C3, 0x8BBF}, //8985 #CJK UNIFIED IDEOGRAPH
+ {0xB7C4, 0x7EBA}, //8986 #CJK UNIFIED IDEOGRAPH
+ {0xB7C5, 0x653E}, //8987 #CJK UNIFIED IDEOGRAPH
+ {0xB7C6, 0x83F2}, //8988 #CJK UNIFIED IDEOGRAPH
+ {0xB7C7, 0x975E}, //8989 #CJK UNIFIED IDEOGRAPH
+ {0xB7C8, 0x5561}, //8990 #CJK UNIFIED IDEOGRAPH
+ {0xB7C9, 0x98DE}, //8991 #CJK UNIFIED IDEOGRAPH
+ {0xB7CA, 0x80A5}, //8992 #CJK UNIFIED IDEOGRAPH
+ {0xB7CB, 0x532A}, //8993 #CJK UNIFIED IDEOGRAPH
+ {0xB7CC, 0x8BFD}, //8994 #CJK UNIFIED IDEOGRAPH
+ {0xB7CD, 0x5420}, //8995 #CJK UNIFIED IDEOGRAPH
+ {0xB7CE, 0x80BA}, //8996 #CJK UNIFIED IDEOGRAPH
+ {0xB7CF, 0x5E9F}, //8997 #CJK UNIFIED IDEOGRAPH
+ {0xB7D0, 0x6CB8}, //8998 #CJK UNIFIED IDEOGRAPH
+ {0xB7D1, 0x8D39}, //8999 #CJK UNIFIED IDEOGRAPH
+ {0xB7D2, 0x82AC}, //9000 #CJK UNIFIED IDEOGRAPH
+ {0xB7D3, 0x915A}, //9001 #CJK UNIFIED IDEOGRAPH
+ {0xB7D4, 0x5429}, //9002 #CJK UNIFIED IDEOGRAPH
+ {0xB7D5, 0x6C1B}, //9003 #CJK UNIFIED IDEOGRAPH
+ {0xB7D6, 0x5206}, //9004 #CJK UNIFIED IDEOGRAPH
+ {0xB7D7, 0x7EB7}, //9005 #CJK UNIFIED IDEOGRAPH
+ {0xB7D8, 0x575F}, //9006 #CJK UNIFIED IDEOGRAPH
+ {0xB7D9, 0x711A}, //9007 #CJK UNIFIED IDEOGRAPH
+ {0xB7DA, 0x6C7E}, //9008 #CJK UNIFIED IDEOGRAPH
+ {0xB7DB, 0x7C89}, //9009 #CJK UNIFIED IDEOGRAPH
+ {0xB7DC, 0x594B}, //9010 #CJK UNIFIED IDEOGRAPH
+ {0xB7DD, 0x4EFD}, //9011 #CJK UNIFIED IDEOGRAPH
+ {0xB7DE, 0x5FFF}, //9012 #CJK UNIFIED IDEOGRAPH
+ {0xB7DF, 0x6124}, //9013 #CJK UNIFIED IDEOGRAPH
+ {0xB7E0, 0x7CAA}, //9014 #CJK UNIFIED IDEOGRAPH
+ {0xB7E1, 0x4E30}, //9015 #CJK UNIFIED IDEOGRAPH
+ {0xB7E2, 0x5C01}, //9016 #CJK UNIFIED IDEOGRAPH
+ {0xB7E3, 0x67AB}, //9017 #CJK UNIFIED IDEOGRAPH
+ {0xB7E4, 0x8702}, //9018 #CJK UNIFIED IDEOGRAPH
+ {0xB7E5, 0x5CF0}, //9019 #CJK UNIFIED IDEOGRAPH
+ {0xB7E6, 0x950B}, //9020 #CJK UNIFIED IDEOGRAPH
+ {0xB7E7, 0x98CE}, //9021 #CJK UNIFIED IDEOGRAPH
+ {0xB7E8, 0x75AF}, //9022 #CJK UNIFIED IDEOGRAPH
+ {0xB7E9, 0x70FD}, //9023 #CJK UNIFIED IDEOGRAPH
+ {0xB7EA, 0x9022}, //9024 #CJK UNIFIED IDEOGRAPH
+ {0xB7EB, 0x51AF}, //9025 #CJK UNIFIED IDEOGRAPH
+ {0xB7EC, 0x7F1D}, //9026 #CJK UNIFIED IDEOGRAPH
+ {0xB7ED, 0x8BBD}, //9027 #CJK UNIFIED IDEOGRAPH
+ {0xB7EE, 0x5949}, //9028 #CJK UNIFIED IDEOGRAPH
+ {0xB7EF, 0x51E4}, //9029 #CJK UNIFIED IDEOGRAPH
+ {0xB7F0, 0x4F5B}, //9030 #CJK UNIFIED IDEOGRAPH
+ {0xB7F1, 0x5426}, //9031 #CJK UNIFIED IDEOGRAPH
+ {0xB7F2, 0x592B}, //9032 #CJK UNIFIED IDEOGRAPH
+ {0xB7F3, 0x6577}, //9033 #CJK UNIFIED IDEOGRAPH
+ {0xB7F4, 0x80A4}, //9034 #CJK UNIFIED IDEOGRAPH
+ {0xB7F5, 0x5B75}, //9035 #CJK UNIFIED IDEOGRAPH
+ {0xB7F6, 0x6276}, //9036 #CJK UNIFIED IDEOGRAPH
+ {0xB7F7, 0x62C2}, //9037 #CJK UNIFIED IDEOGRAPH
+ {0xB7F8, 0x8F90}, //9038 #CJK UNIFIED IDEOGRAPH
+ {0xB7F9, 0x5E45}, //9039 #CJK UNIFIED IDEOGRAPH
+ {0xB7FA, 0x6C1F}, //9040 #CJK UNIFIED IDEOGRAPH
+ {0xB7FB, 0x7B26}, //9041 #CJK UNIFIED IDEOGRAPH
+ {0xB7FC, 0x4F0F}, //9042 #CJK UNIFIED IDEOGRAPH
+ {0xB7FD, 0x4FD8}, //9043 #CJK UNIFIED IDEOGRAPH
+ {0xB7FE, 0x670D}, //9044 #CJK UNIFIED IDEOGRAPH
+ {0xB840, 0x7AA3}, //9045 #CJK UNIFIED IDEOGRAPH
+ {0xB841, 0x7AA4}, //9046 #CJK UNIFIED IDEOGRAPH
+ {0xB842, 0x7AA7}, //9047 #CJK UNIFIED IDEOGRAPH
+ {0xB843, 0x7AA9}, //9048 #CJK UNIFIED IDEOGRAPH
+ {0xB844, 0x7AAA}, //9049 #CJK UNIFIED IDEOGRAPH
+ {0xB845, 0x7AAB}, //9050 #CJK UNIFIED IDEOGRAPH
+ {0xB846, 0x7AAE}, //9051 #CJK UNIFIED IDEOGRAPH
+ {0xB847, 0x7AAF}, //9052 #CJK UNIFIED IDEOGRAPH
+ {0xB848, 0x7AB0}, //9053 #CJK UNIFIED IDEOGRAPH
+ {0xB849, 0x7AB1}, //9054 #CJK UNIFIED IDEOGRAPH
+ {0xB84A, 0x7AB2}, //9055 #CJK UNIFIED IDEOGRAPH
+ {0xB84B, 0x7AB4}, //9056 #CJK UNIFIED IDEOGRAPH
+ {0xB84C, 0x7AB5}, //9057 #CJK UNIFIED IDEOGRAPH
+ {0xB84D, 0x7AB6}, //9058 #CJK UNIFIED IDEOGRAPH
+ {0xB84E, 0x7AB7}, //9059 #CJK UNIFIED IDEOGRAPH
+ {0xB84F, 0x7AB8}, //9060 #CJK UNIFIED IDEOGRAPH
+ {0xB850, 0x7AB9}, //9061 #CJK UNIFIED IDEOGRAPH
+ {0xB851, 0x7ABA}, //9062 #CJK UNIFIED IDEOGRAPH
+ {0xB852, 0x7ABB}, //9063 #CJK UNIFIED IDEOGRAPH
+ {0xB853, 0x7ABC}, //9064 #CJK UNIFIED IDEOGRAPH
+ {0xB854, 0x7ABD}, //9065 #CJK UNIFIED IDEOGRAPH
+ {0xB855, 0x7ABE}, //9066 #CJK UNIFIED IDEOGRAPH
+ {0xB856, 0x7AC0}, //9067 #CJK UNIFIED IDEOGRAPH
+ {0xB857, 0x7AC1}, //9068 #CJK UNIFIED IDEOGRAPH
+ {0xB858, 0x7AC2}, //9069 #CJK UNIFIED IDEOGRAPH
+ {0xB859, 0x7AC3}, //9070 #CJK UNIFIED IDEOGRAPH
+ {0xB85A, 0x7AC4}, //9071 #CJK UNIFIED IDEOGRAPH
+ {0xB85B, 0x7AC5}, //9072 #CJK UNIFIED IDEOGRAPH
+ {0xB85C, 0x7AC6}, //9073 #CJK UNIFIED IDEOGRAPH
+ {0xB85D, 0x7AC7}, //9074 #CJK UNIFIED IDEOGRAPH
+ {0xB85E, 0x7AC8}, //9075 #CJK UNIFIED IDEOGRAPH
+ {0xB85F, 0x7AC9}, //9076 #CJK UNIFIED IDEOGRAPH
+ {0xB860, 0x7ACA}, //9077 #CJK UNIFIED IDEOGRAPH
+ {0xB861, 0x7ACC}, //9078 #CJK UNIFIED IDEOGRAPH
+ {0xB862, 0x7ACD}, //9079 #CJK UNIFIED IDEOGRAPH
+ {0xB863, 0x7ACE}, //9080 #CJK UNIFIED IDEOGRAPH
+ {0xB864, 0x7ACF}, //9081 #CJK UNIFIED IDEOGRAPH
+ {0xB865, 0x7AD0}, //9082 #CJK UNIFIED IDEOGRAPH
+ {0xB866, 0x7AD1}, //9083 #CJK UNIFIED IDEOGRAPH
+ {0xB867, 0x7AD2}, //9084 #CJK UNIFIED IDEOGRAPH
+ {0xB868, 0x7AD3}, //9085 #CJK UNIFIED IDEOGRAPH
+ {0xB869, 0x7AD4}, //9086 #CJK UNIFIED IDEOGRAPH
+ {0xB86A, 0x7AD5}, //9087 #CJK UNIFIED IDEOGRAPH
+ {0xB86B, 0x7AD7}, //9088 #CJK UNIFIED IDEOGRAPH
+ {0xB86C, 0x7AD8}, //9089 #CJK UNIFIED IDEOGRAPH
+ {0xB86D, 0x7ADA}, //9090 #CJK UNIFIED IDEOGRAPH
+ {0xB86E, 0x7ADB}, //9091 #CJK UNIFIED IDEOGRAPH
+ {0xB86F, 0x7ADC}, //9092 #CJK UNIFIED IDEOGRAPH
+ {0xB870, 0x7ADD}, //9093 #CJK UNIFIED IDEOGRAPH
+ {0xB871, 0x7AE1}, //9094 #CJK UNIFIED IDEOGRAPH
+ {0xB872, 0x7AE2}, //9095 #CJK UNIFIED IDEOGRAPH
+ {0xB873, 0x7AE4}, //9096 #CJK UNIFIED IDEOGRAPH
+ {0xB874, 0x7AE7}, //9097 #CJK UNIFIED IDEOGRAPH
+ {0xB875, 0x7AE8}, //9098 #CJK UNIFIED IDEOGRAPH
+ {0xB876, 0x7AE9}, //9099 #CJK UNIFIED IDEOGRAPH
+ {0xB877, 0x7AEA}, //9100 #CJK UNIFIED IDEOGRAPH
+ {0xB878, 0x7AEB}, //9101 #CJK UNIFIED IDEOGRAPH
+ {0xB879, 0x7AEC}, //9102 #CJK UNIFIED IDEOGRAPH
+ {0xB87A, 0x7AEE}, //9103 #CJK UNIFIED IDEOGRAPH
+ {0xB87B, 0x7AF0}, //9104 #CJK UNIFIED IDEOGRAPH
+ {0xB87C, 0x7AF1}, //9105 #CJK UNIFIED IDEOGRAPH
+ {0xB87D, 0x7AF2}, //9106 #CJK UNIFIED IDEOGRAPH
+ {0xB87E, 0x7AF3}, //9107 #CJK UNIFIED IDEOGRAPH
+ {0xB880, 0x7AF4}, //9108 #CJK UNIFIED IDEOGRAPH
+ {0xB881, 0x7AF5}, //9109 #CJK UNIFIED IDEOGRAPH
+ {0xB882, 0x7AF6}, //9110 #CJK UNIFIED IDEOGRAPH
+ {0xB883, 0x7AF7}, //9111 #CJK UNIFIED IDEOGRAPH
+ {0xB884, 0x7AF8}, //9112 #CJK UNIFIED IDEOGRAPH
+ {0xB885, 0x7AFB}, //9113 #CJK UNIFIED IDEOGRAPH
+ {0xB886, 0x7AFC}, //9114 #CJK UNIFIED IDEOGRAPH
+ {0xB887, 0x7AFE}, //9115 #CJK UNIFIED IDEOGRAPH
+ {0xB888, 0x7B00}, //9116 #CJK UNIFIED IDEOGRAPH
+ {0xB889, 0x7B01}, //9117 #CJK UNIFIED IDEOGRAPH
+ {0xB88A, 0x7B02}, //9118 #CJK UNIFIED IDEOGRAPH
+ {0xB88B, 0x7B05}, //9119 #CJK UNIFIED IDEOGRAPH
+ {0xB88C, 0x7B07}, //9120 #CJK UNIFIED IDEOGRAPH
+ {0xB88D, 0x7B09}, //9121 #CJK UNIFIED IDEOGRAPH
+ {0xB88E, 0x7B0C}, //9122 #CJK UNIFIED IDEOGRAPH
+ {0xB88F, 0x7B0D}, //9123 #CJK UNIFIED IDEOGRAPH
+ {0xB890, 0x7B0E}, //9124 #CJK UNIFIED IDEOGRAPH
+ {0xB891, 0x7B10}, //9125 #CJK UNIFIED IDEOGRAPH
+ {0xB892, 0x7B12}, //9126 #CJK UNIFIED IDEOGRAPH
+ {0xB893, 0x7B13}, //9127 #CJK UNIFIED IDEOGRAPH
+ {0xB894, 0x7B16}, //9128 #CJK UNIFIED IDEOGRAPH
+ {0xB895, 0x7B17}, //9129 #CJK UNIFIED IDEOGRAPH
+ {0xB896, 0x7B18}, //9130 #CJK UNIFIED IDEOGRAPH
+ {0xB897, 0x7B1A}, //9131 #CJK UNIFIED IDEOGRAPH
+ {0xB898, 0x7B1C}, //9132 #CJK UNIFIED IDEOGRAPH
+ {0xB899, 0x7B1D}, //9133 #CJK UNIFIED IDEOGRAPH
+ {0xB89A, 0x7B1F}, //9134 #CJK UNIFIED IDEOGRAPH
+ {0xB89B, 0x7B21}, //9135 #CJK UNIFIED IDEOGRAPH
+ {0xB89C, 0x7B22}, //9136 #CJK UNIFIED IDEOGRAPH
+ {0xB89D, 0x7B23}, //9137 #CJK UNIFIED IDEOGRAPH
+ {0xB89E, 0x7B27}, //9138 #CJK UNIFIED IDEOGRAPH
+ {0xB89F, 0x7B29}, //9139 #CJK UNIFIED IDEOGRAPH
+ {0xB8A0, 0x7B2D}, //9140 #CJK UNIFIED IDEOGRAPH
+ {0xB8A1, 0x6D6E}, //9141 #CJK UNIFIED IDEOGRAPH
+ {0xB8A2, 0x6DAA}, //9142 #CJK UNIFIED IDEOGRAPH
+ {0xB8A3, 0x798F}, //9143 #CJK UNIFIED IDEOGRAPH
+ {0xB8A4, 0x88B1}, //9144 #CJK UNIFIED IDEOGRAPH
+ {0xB8A5, 0x5F17}, //9145 #CJK UNIFIED IDEOGRAPH
+ {0xB8A6, 0x752B}, //9146 #CJK UNIFIED IDEOGRAPH
+ {0xB8A7, 0x629A}, //9147 #CJK UNIFIED IDEOGRAPH
+ {0xB8A8, 0x8F85}, //9148 #CJK UNIFIED IDEOGRAPH
+ {0xB8A9, 0x4FEF}, //9149 #CJK UNIFIED IDEOGRAPH
+ {0xB8AA, 0x91DC}, //9150 #CJK UNIFIED IDEOGRAPH
+ {0xB8AB, 0x65A7}, //9151 #CJK UNIFIED IDEOGRAPH
+ {0xB8AC, 0x812F}, //9152 #CJK UNIFIED IDEOGRAPH
+ {0xB8AD, 0x8151}, //9153 #CJK UNIFIED IDEOGRAPH
+ {0xB8AE, 0x5E9C}, //9154 #CJK UNIFIED IDEOGRAPH
+ {0xB8AF, 0x8150}, //9155 #CJK UNIFIED IDEOGRAPH
+ {0xB8B0, 0x8D74}, //9156 #CJK UNIFIED IDEOGRAPH
+ {0xB8B1, 0x526F}, //9157 #CJK UNIFIED IDEOGRAPH
+ {0xB8B2, 0x8986}, //9158 #CJK UNIFIED IDEOGRAPH
+ {0xB8B3, 0x8D4B}, //9159 #CJK UNIFIED IDEOGRAPH
+ {0xB8B4, 0x590D}, //9160 #CJK UNIFIED IDEOGRAPH
+ {0xB8B5, 0x5085}, //9161 #CJK UNIFIED IDEOGRAPH
+ {0xB8B6, 0x4ED8}, //9162 #CJK UNIFIED IDEOGRAPH
+ {0xB8B7, 0x961C}, //9163 #CJK UNIFIED IDEOGRAPH
+ {0xB8B8, 0x7236}, //9164 #CJK UNIFIED IDEOGRAPH
+ {0xB8B9, 0x8179}, //9165 #CJK UNIFIED IDEOGRAPH
+ {0xB8BA, 0x8D1F}, //9166 #CJK UNIFIED IDEOGRAPH
+ {0xB8BB, 0x5BCC}, //9167 #CJK UNIFIED IDEOGRAPH
+ {0xB8BC, 0x8BA3}, //9168 #CJK UNIFIED IDEOGRAPH
+ {0xB8BD, 0x9644}, //9169 #CJK UNIFIED IDEOGRAPH
+ {0xB8BE, 0x5987}, //9170 #CJK UNIFIED IDEOGRAPH
+ {0xB8BF, 0x7F1A}, //9171 #CJK UNIFIED IDEOGRAPH
+ {0xB8C0, 0x5490}, //9172 #CJK UNIFIED IDEOGRAPH
+ {0xB8C1, 0x5676}, //9173 #CJK UNIFIED IDEOGRAPH
+ {0xB8C2, 0x560E}, //9174 #CJK UNIFIED IDEOGRAPH
+ {0xB8C3, 0x8BE5}, //9175 #CJK UNIFIED IDEOGRAPH
+ {0xB8C4, 0x6539}, //9176 #CJK UNIFIED IDEOGRAPH
+ {0xB8C5, 0x6982}, //9177 #CJK UNIFIED IDEOGRAPH
+ {0xB8C6, 0x9499}, //9178 #CJK UNIFIED IDEOGRAPH
+ {0xB8C7, 0x76D6}, //9179 #CJK UNIFIED IDEOGRAPH
+ {0xB8C8, 0x6E89}, //9180 #CJK UNIFIED IDEOGRAPH
+ {0xB8C9, 0x5E72}, //9181 #CJK UNIFIED IDEOGRAPH
+ {0xB8CA, 0x7518}, //9182 #CJK UNIFIED IDEOGRAPH
+ {0xB8CB, 0x6746}, //9183 #CJK UNIFIED IDEOGRAPH
+ {0xB8CC, 0x67D1}, //9184 #CJK UNIFIED IDEOGRAPH
+ {0xB8CD, 0x7AFF}, //9185 #CJK UNIFIED IDEOGRAPH
+ {0xB8CE, 0x809D}, //9186 #CJK UNIFIED IDEOGRAPH
+ {0xB8CF, 0x8D76}, //9187 #CJK UNIFIED IDEOGRAPH
+ {0xB8D0, 0x611F}, //9188 #CJK UNIFIED IDEOGRAPH
+ {0xB8D1, 0x79C6}, //9189 #CJK UNIFIED IDEOGRAPH
+ {0xB8D2, 0x6562}, //9190 #CJK UNIFIED IDEOGRAPH
+ {0xB8D3, 0x8D63}, //9191 #CJK UNIFIED IDEOGRAPH
+ {0xB8D4, 0x5188}, //9192 #CJK UNIFIED IDEOGRAPH
+ {0xB8D5, 0x521A}, //9193 #CJK UNIFIED IDEOGRAPH
+ {0xB8D6, 0x94A2}, //9194 #CJK UNIFIED IDEOGRAPH
+ {0xB8D7, 0x7F38}, //9195 #CJK UNIFIED IDEOGRAPH
+ {0xB8D8, 0x809B}, //9196 #CJK UNIFIED IDEOGRAPH
+ {0xB8D9, 0x7EB2}, //9197 #CJK UNIFIED IDEOGRAPH
+ {0xB8DA, 0x5C97}, //9198 #CJK UNIFIED IDEOGRAPH
+ {0xB8DB, 0x6E2F}, //9199 #CJK UNIFIED IDEOGRAPH
+ {0xB8DC, 0x6760}, //9200 #CJK UNIFIED IDEOGRAPH
+ {0xB8DD, 0x7BD9}, //9201 #CJK UNIFIED IDEOGRAPH
+ {0xB8DE, 0x768B}, //9202 #CJK UNIFIED IDEOGRAPH
+ {0xB8DF, 0x9AD8}, //9203 #CJK UNIFIED IDEOGRAPH
+ {0xB8E0, 0x818F}, //9204 #CJK UNIFIED IDEOGRAPH
+ {0xB8E1, 0x7F94}, //9205 #CJK UNIFIED IDEOGRAPH
+ {0xB8E2, 0x7CD5}, //9206 #CJK UNIFIED IDEOGRAPH
+ {0xB8E3, 0x641E}, //9207 #CJK UNIFIED IDEOGRAPH
+ {0xB8E4, 0x9550}, //9208 #CJK UNIFIED IDEOGRAPH
+ {0xB8E5, 0x7A3F}, //9209 #CJK UNIFIED IDEOGRAPH
+ {0xB8E6, 0x544A}, //9210 #CJK UNIFIED IDEOGRAPH
+ {0xB8E7, 0x54E5}, //9211 #CJK UNIFIED IDEOGRAPH
+ {0xB8E8, 0x6B4C}, //9212 #CJK UNIFIED IDEOGRAPH
+ {0xB8E9, 0x6401}, //9213 #CJK UNIFIED IDEOGRAPH
+ {0xB8EA, 0x6208}, //9214 #CJK UNIFIED IDEOGRAPH
+ {0xB8EB, 0x9E3D}, //9215 #CJK UNIFIED IDEOGRAPH
+ {0xB8EC, 0x80F3}, //9216 #CJK UNIFIED IDEOGRAPH
+ {0xB8ED, 0x7599}, //9217 #CJK UNIFIED IDEOGRAPH
+ {0xB8EE, 0x5272}, //9218 #CJK UNIFIED IDEOGRAPH
+ {0xB8EF, 0x9769}, //9219 #CJK UNIFIED IDEOGRAPH
+ {0xB8F0, 0x845B}, //9220 #CJK UNIFIED IDEOGRAPH
+ {0xB8F1, 0x683C}, //9221 #CJK UNIFIED IDEOGRAPH
+ {0xB8F2, 0x86E4}, //9222 #CJK UNIFIED IDEOGRAPH
+ {0xB8F3, 0x9601}, //9223 #CJK UNIFIED IDEOGRAPH
+ {0xB8F4, 0x9694}, //9224 #CJK UNIFIED IDEOGRAPH
+ {0xB8F5, 0x94EC}, //9225 #CJK UNIFIED IDEOGRAPH
+ {0xB8F6, 0x4E2A}, //9226 #CJK UNIFIED IDEOGRAPH
+ {0xB8F7, 0x5404}, //9227 #CJK UNIFIED IDEOGRAPH
+ {0xB8F8, 0x7ED9}, //9228 #CJK UNIFIED IDEOGRAPH
+ {0xB8F9, 0x6839}, //9229 #CJK UNIFIED IDEOGRAPH
+ {0xB8FA, 0x8DDF}, //9230 #CJK UNIFIED IDEOGRAPH
+ {0xB8FB, 0x8015}, //9231 #CJK UNIFIED IDEOGRAPH
+ {0xB8FC, 0x66F4}, //9232 #CJK UNIFIED IDEOGRAPH
+ {0xB8FD, 0x5E9A}, //9233 #CJK UNIFIED IDEOGRAPH
+ {0xB8FE, 0x7FB9}, //9234 #CJK UNIFIED IDEOGRAPH
+ {0xB940, 0x7B2F}, //9235 #CJK UNIFIED IDEOGRAPH
+ {0xB941, 0x7B30}, //9236 #CJK UNIFIED IDEOGRAPH
+ {0xB942, 0x7B32}, //9237 #CJK UNIFIED IDEOGRAPH
+ {0xB943, 0x7B34}, //9238 #CJK UNIFIED IDEOGRAPH
+ {0xB944, 0x7B35}, //9239 #CJK UNIFIED IDEOGRAPH
+ {0xB945, 0x7B36}, //9240 #CJK UNIFIED IDEOGRAPH
+ {0xB946, 0x7B37}, //9241 #CJK UNIFIED IDEOGRAPH
+ {0xB947, 0x7B39}, //9242 #CJK UNIFIED IDEOGRAPH
+ {0xB948, 0x7B3B}, //9243 #CJK UNIFIED IDEOGRAPH
+ {0xB949, 0x7B3D}, //9244 #CJK UNIFIED IDEOGRAPH
+ {0xB94A, 0x7B3F}, //9245 #CJK UNIFIED IDEOGRAPH
+ {0xB94B, 0x7B40}, //9246 #CJK UNIFIED IDEOGRAPH
+ {0xB94C, 0x7B41}, //9247 #CJK UNIFIED IDEOGRAPH
+ {0xB94D, 0x7B42}, //9248 #CJK UNIFIED IDEOGRAPH
+ {0xB94E, 0x7B43}, //9249 #CJK UNIFIED IDEOGRAPH
+ {0xB94F, 0x7B44}, //9250 #CJK UNIFIED IDEOGRAPH
+ {0xB950, 0x7B46}, //9251 #CJK UNIFIED IDEOGRAPH
+ {0xB951, 0x7B48}, //9252 #CJK UNIFIED IDEOGRAPH
+ {0xB952, 0x7B4A}, //9253 #CJK UNIFIED IDEOGRAPH
+ {0xB953, 0x7B4D}, //9254 #CJK UNIFIED IDEOGRAPH
+ {0xB954, 0x7B4E}, //9255 #CJK UNIFIED IDEOGRAPH
+ {0xB955, 0x7B53}, //9256 #CJK UNIFIED IDEOGRAPH
+ {0xB956, 0x7B55}, //9257 #CJK UNIFIED IDEOGRAPH
+ {0xB957, 0x7B57}, //9258 #CJK UNIFIED IDEOGRAPH
+ {0xB958, 0x7B59}, //9259 #CJK UNIFIED IDEOGRAPH
+ {0xB959, 0x7B5C}, //9260 #CJK UNIFIED IDEOGRAPH
+ {0xB95A, 0x7B5E}, //9261 #CJK UNIFIED IDEOGRAPH
+ {0xB95B, 0x7B5F}, //9262 #CJK UNIFIED IDEOGRAPH
+ {0xB95C, 0x7B61}, //9263 #CJK UNIFIED IDEOGRAPH
+ {0xB95D, 0x7B63}, //9264 #CJK UNIFIED IDEOGRAPH
+ {0xB95E, 0x7B64}, //9265 #CJK UNIFIED IDEOGRAPH
+ {0xB95F, 0x7B65}, //9266 #CJK UNIFIED IDEOGRAPH
+ {0xB960, 0x7B66}, //9267 #CJK UNIFIED IDEOGRAPH
+ {0xB961, 0x7B67}, //9268 #CJK UNIFIED IDEOGRAPH
+ {0xB962, 0x7B68}, //9269 #CJK UNIFIED IDEOGRAPH
+ {0xB963, 0x7B69}, //9270 #CJK UNIFIED IDEOGRAPH
+ {0xB964, 0x7B6A}, //9271 #CJK UNIFIED IDEOGRAPH
+ {0xB965, 0x7B6B}, //9272 #CJK UNIFIED IDEOGRAPH
+ {0xB966, 0x7B6C}, //9273 #CJK UNIFIED IDEOGRAPH
+ {0xB967, 0x7B6D}, //9274 #CJK UNIFIED IDEOGRAPH
+ {0xB968, 0x7B6F}, //9275 #CJK UNIFIED IDEOGRAPH
+ {0xB969, 0x7B70}, //9276 #CJK UNIFIED IDEOGRAPH
+ {0xB96A, 0x7B73}, //9277 #CJK UNIFIED IDEOGRAPH
+ {0xB96B, 0x7B74}, //9278 #CJK UNIFIED IDEOGRAPH
+ {0xB96C, 0x7B76}, //9279 #CJK UNIFIED IDEOGRAPH
+ {0xB96D, 0x7B78}, //9280 #CJK UNIFIED IDEOGRAPH
+ {0xB96E, 0x7B7A}, //9281 #CJK UNIFIED IDEOGRAPH
+ {0xB96F, 0x7B7C}, //9282 #CJK UNIFIED IDEOGRAPH
+ {0xB970, 0x7B7D}, //9283 #CJK UNIFIED IDEOGRAPH
+ {0xB971, 0x7B7F}, //9284 #CJK UNIFIED IDEOGRAPH
+ {0xB972, 0x7B81}, //9285 #CJK UNIFIED IDEOGRAPH
+ {0xB973, 0x7B82}, //9286 #CJK UNIFIED IDEOGRAPH
+ {0xB974, 0x7B83}, //9287 #CJK UNIFIED IDEOGRAPH
+ {0xB975, 0x7B84}, //9288 #CJK UNIFIED IDEOGRAPH
+ {0xB976, 0x7B86}, //9289 #CJK UNIFIED IDEOGRAPH
+ {0xB977, 0x7B87}, //9290 #CJK UNIFIED IDEOGRAPH
+ {0xB978, 0x7B88}, //9291 #CJK UNIFIED IDEOGRAPH
+ {0xB979, 0x7B89}, //9292 #CJK UNIFIED IDEOGRAPH
+ {0xB97A, 0x7B8A}, //9293 #CJK UNIFIED IDEOGRAPH
+ {0xB97B, 0x7B8B}, //9294 #CJK UNIFIED IDEOGRAPH
+ {0xB97C, 0x7B8C}, //9295 #CJK UNIFIED IDEOGRAPH
+ {0xB97D, 0x7B8E}, //9296 #CJK UNIFIED IDEOGRAPH
+ {0xB97E, 0x7B8F}, //9297 #CJK UNIFIED IDEOGRAPH
+ {0xB980, 0x7B91}, //9298 #CJK UNIFIED IDEOGRAPH
+ {0xB981, 0x7B92}, //9299 #CJK UNIFIED IDEOGRAPH
+ {0xB982, 0x7B93}, //9300 #CJK UNIFIED IDEOGRAPH
+ {0xB983, 0x7B96}, //9301 #CJK UNIFIED IDEOGRAPH
+ {0xB984, 0x7B98}, //9302 #CJK UNIFIED IDEOGRAPH
+ {0xB985, 0x7B99}, //9303 #CJK UNIFIED IDEOGRAPH
+ {0xB986, 0x7B9A}, //9304 #CJK UNIFIED IDEOGRAPH
+ {0xB987, 0x7B9B}, //9305 #CJK UNIFIED IDEOGRAPH
+ {0xB988, 0x7B9E}, //9306 #CJK UNIFIED IDEOGRAPH
+ {0xB989, 0x7B9F}, //9307 #CJK UNIFIED IDEOGRAPH
+ {0xB98A, 0x7BA0}, //9308 #CJK UNIFIED IDEOGRAPH
+ {0xB98B, 0x7BA3}, //9309 #CJK UNIFIED IDEOGRAPH
+ {0xB98C, 0x7BA4}, //9310 #CJK UNIFIED IDEOGRAPH
+ {0xB98D, 0x7BA5}, //9311 #CJK UNIFIED IDEOGRAPH
+ {0xB98E, 0x7BAE}, //9312 #CJK UNIFIED IDEOGRAPH
+ {0xB98F, 0x7BAF}, //9313 #CJK UNIFIED IDEOGRAPH
+ {0xB990, 0x7BB0}, //9314 #CJK UNIFIED IDEOGRAPH
+ {0xB991, 0x7BB2}, //9315 #CJK UNIFIED IDEOGRAPH
+ {0xB992, 0x7BB3}, //9316 #CJK UNIFIED IDEOGRAPH
+ {0xB993, 0x7BB5}, //9317 #CJK UNIFIED IDEOGRAPH
+ {0xB994, 0x7BB6}, //9318 #CJK UNIFIED IDEOGRAPH
+ {0xB995, 0x7BB7}, //9319 #CJK UNIFIED IDEOGRAPH
+ {0xB996, 0x7BB9}, //9320 #CJK UNIFIED IDEOGRAPH
+ {0xB997, 0x7BBA}, //9321 #CJK UNIFIED IDEOGRAPH
+ {0xB998, 0x7BBB}, //9322 #CJK UNIFIED IDEOGRAPH
+ {0xB999, 0x7BBC}, //9323 #CJK UNIFIED IDEOGRAPH
+ {0xB99A, 0x7BBD}, //9324 #CJK UNIFIED IDEOGRAPH
+ {0xB99B, 0x7BBE}, //9325 #CJK UNIFIED IDEOGRAPH
+ {0xB99C, 0x7BBF}, //9326 #CJK UNIFIED IDEOGRAPH
+ {0xB99D, 0x7BC0}, //9327 #CJK UNIFIED IDEOGRAPH
+ {0xB99E, 0x7BC2}, //9328 #CJK UNIFIED IDEOGRAPH
+ {0xB99F, 0x7BC3}, //9329 #CJK UNIFIED IDEOGRAPH
+ {0xB9A0, 0x7BC4}, //9330 #CJK UNIFIED IDEOGRAPH
+ {0xB9A1, 0x57C2}, //9331 #CJK UNIFIED IDEOGRAPH
+ {0xB9A2, 0x803F}, //9332 #CJK UNIFIED IDEOGRAPH
+ {0xB9A3, 0x6897}, //9333 #CJK UNIFIED IDEOGRAPH
+ {0xB9A4, 0x5DE5}, //9334 #CJK UNIFIED IDEOGRAPH
+ {0xB9A5, 0x653B}, //9335 #CJK UNIFIED IDEOGRAPH
+ {0xB9A6, 0x529F}, //9336 #CJK UNIFIED IDEOGRAPH
+ {0xB9A7, 0x606D}, //9337 #CJK UNIFIED IDEOGRAPH
+ {0xB9A8, 0x9F9A}, //9338 #CJK UNIFIED IDEOGRAPH
+ {0xB9A9, 0x4F9B}, //9339 #CJK UNIFIED IDEOGRAPH
+ {0xB9AA, 0x8EAC}, //9340 #CJK UNIFIED IDEOGRAPH
+ {0xB9AB, 0x516C}, //9341 #CJK UNIFIED IDEOGRAPH
+ {0xB9AC, 0x5BAB}, //9342 #CJK UNIFIED IDEOGRAPH
+ {0xB9AD, 0x5F13}, //9343 #CJK UNIFIED IDEOGRAPH
+ {0xB9AE, 0x5DE9}, //9344 #CJK UNIFIED IDEOGRAPH
+ {0xB9AF, 0x6C5E}, //9345 #CJK UNIFIED IDEOGRAPH
+ {0xB9B0, 0x62F1}, //9346 #CJK UNIFIED IDEOGRAPH
+ {0xB9B1, 0x8D21}, //9347 #CJK UNIFIED IDEOGRAPH
+ {0xB9B2, 0x5171}, //9348 #CJK UNIFIED IDEOGRAPH
+ {0xB9B3, 0x94A9}, //9349 #CJK UNIFIED IDEOGRAPH
+ {0xB9B4, 0x52FE}, //9350 #CJK UNIFIED IDEOGRAPH
+ {0xB9B5, 0x6C9F}, //9351 #CJK UNIFIED IDEOGRAPH
+ {0xB9B6, 0x82DF}, //9352 #CJK UNIFIED IDEOGRAPH
+ {0xB9B7, 0x72D7}, //9353 #CJK UNIFIED IDEOGRAPH
+ {0xB9B8, 0x57A2}, //9354 #CJK UNIFIED IDEOGRAPH
+ {0xB9B9, 0x6784}, //9355 #CJK UNIFIED IDEOGRAPH
+ {0xB9BA, 0x8D2D}, //9356 #CJK UNIFIED IDEOGRAPH
+ {0xB9BB, 0x591F}, //9357 #CJK UNIFIED IDEOGRAPH
+ {0xB9BC, 0x8F9C}, //9358 #CJK UNIFIED IDEOGRAPH
+ {0xB9BD, 0x83C7}, //9359 #CJK UNIFIED IDEOGRAPH
+ {0xB9BE, 0x5495}, //9360 #CJK UNIFIED IDEOGRAPH
+ {0xB9BF, 0x7B8D}, //9361 #CJK UNIFIED IDEOGRAPH
+ {0xB9C0, 0x4F30}, //9362 #CJK UNIFIED IDEOGRAPH
+ {0xB9C1, 0x6CBD}, //9363 #CJK UNIFIED IDEOGRAPH
+ {0xB9C2, 0x5B64}, //9364 #CJK UNIFIED IDEOGRAPH
+ {0xB9C3, 0x59D1}, //9365 #CJK UNIFIED IDEOGRAPH
+ {0xB9C4, 0x9F13}, //9366 #CJK UNIFIED IDEOGRAPH
+ {0xB9C5, 0x53E4}, //9367 #CJK UNIFIED IDEOGRAPH
+ {0xB9C6, 0x86CA}, //9368 #CJK UNIFIED IDEOGRAPH
+ {0xB9C7, 0x9AA8}, //9369 #CJK UNIFIED IDEOGRAPH
+ {0xB9C8, 0x8C37}, //9370 #CJK UNIFIED IDEOGRAPH
+ {0xB9C9, 0x80A1}, //9371 #CJK UNIFIED IDEOGRAPH
+ {0xB9CA, 0x6545}, //9372 #CJK UNIFIED IDEOGRAPH
+ {0xB9CB, 0x987E}, //9373 #CJK UNIFIED IDEOGRAPH
+ {0xB9CC, 0x56FA}, //9374 #CJK UNIFIED IDEOGRAPH
+ {0xB9CD, 0x96C7}, //9375 #CJK UNIFIED IDEOGRAPH
+ {0xB9CE, 0x522E}, //9376 #CJK UNIFIED IDEOGRAPH
+ {0xB9CF, 0x74DC}, //9377 #CJK UNIFIED IDEOGRAPH
+ {0xB9D0, 0x5250}, //9378 #CJK UNIFIED IDEOGRAPH
+ {0xB9D1, 0x5BE1}, //9379 #CJK UNIFIED IDEOGRAPH
+ {0xB9D2, 0x6302}, //9380 #CJK UNIFIED IDEOGRAPH
+ {0xB9D3, 0x8902}, //9381 #CJK UNIFIED IDEOGRAPH
+ {0xB9D4, 0x4E56}, //9382 #CJK UNIFIED IDEOGRAPH
+ {0xB9D5, 0x62D0}, //9383 #CJK UNIFIED IDEOGRAPH
+ {0xB9D6, 0x602A}, //9384 #CJK UNIFIED IDEOGRAPH
+ {0xB9D7, 0x68FA}, //9385 #CJK UNIFIED IDEOGRAPH
+ {0xB9D8, 0x5173}, //9386 #CJK UNIFIED IDEOGRAPH
+ {0xB9D9, 0x5B98}, //9387 #CJK UNIFIED IDEOGRAPH
+ {0xB9DA, 0x51A0}, //9388 #CJK UNIFIED IDEOGRAPH
+ {0xB9DB, 0x89C2}, //9389 #CJK UNIFIED IDEOGRAPH
+ {0xB9DC, 0x7BA1}, //9390 #CJK UNIFIED IDEOGRAPH
+ {0xB9DD, 0x9986}, //9391 #CJK UNIFIED IDEOGRAPH
+ {0xB9DE, 0x7F50}, //9392 #CJK UNIFIED IDEOGRAPH
+ {0xB9DF, 0x60EF}, //9393 #CJK UNIFIED IDEOGRAPH
+ {0xB9E0, 0x704C}, //9394 #CJK UNIFIED IDEOGRAPH
+ {0xB9E1, 0x8D2F}, //9395 #CJK UNIFIED IDEOGRAPH
+ {0xB9E2, 0x5149}, //9396 #CJK UNIFIED IDEOGRAPH
+ {0xB9E3, 0x5E7F}, //9397 #CJK UNIFIED IDEOGRAPH
+ {0xB9E4, 0x901B}, //9398 #CJK UNIFIED IDEOGRAPH
+ {0xB9E5, 0x7470}, //9399 #CJK UNIFIED IDEOGRAPH
+ {0xB9E6, 0x89C4}, //9400 #CJK UNIFIED IDEOGRAPH
+ {0xB9E7, 0x572D}, //9401 #CJK UNIFIED IDEOGRAPH
+ {0xB9E8, 0x7845}, //9402 #CJK UNIFIED IDEOGRAPH
+ {0xB9E9, 0x5F52}, //9403 #CJK UNIFIED IDEOGRAPH
+ {0xB9EA, 0x9F9F}, //9404 #CJK UNIFIED IDEOGRAPH
+ {0xB9EB, 0x95FA}, //9405 #CJK UNIFIED IDEOGRAPH
+ {0xB9EC, 0x8F68}, //9406 #CJK UNIFIED IDEOGRAPH
+ {0xB9ED, 0x9B3C}, //9407 #CJK UNIFIED IDEOGRAPH
+ {0xB9EE, 0x8BE1}, //9408 #CJK UNIFIED IDEOGRAPH
+ {0xB9EF, 0x7678}, //9409 #CJK UNIFIED IDEOGRAPH
+ {0xB9F0, 0x6842}, //9410 #CJK UNIFIED IDEOGRAPH
+ {0xB9F1, 0x67DC}, //9411 #CJK UNIFIED IDEOGRAPH
+ {0xB9F2, 0x8DEA}, //9412 #CJK UNIFIED IDEOGRAPH
+ {0xB9F3, 0x8D35}, //9413 #CJK UNIFIED IDEOGRAPH
+ {0xB9F4, 0x523D}, //9414 #CJK UNIFIED IDEOGRAPH
+ {0xB9F5, 0x8F8A}, //9415 #CJK UNIFIED IDEOGRAPH
+ {0xB9F6, 0x6EDA}, //9416 #CJK UNIFIED IDEOGRAPH
+ {0xB9F7, 0x68CD}, //9417 #CJK UNIFIED IDEOGRAPH
+ {0xB9F8, 0x9505}, //9418 #CJK UNIFIED IDEOGRAPH
+ {0xB9F9, 0x90ED}, //9419 #CJK UNIFIED IDEOGRAPH
+ {0xB9FA, 0x56FD}, //9420 #CJK UNIFIED IDEOGRAPH
+ {0xB9FB, 0x679C}, //9421 #CJK UNIFIED IDEOGRAPH
+ {0xB9FC, 0x88F9}, //9422 #CJK UNIFIED IDEOGRAPH
+ {0xB9FD, 0x8FC7}, //9423 #CJK UNIFIED IDEOGRAPH
+ {0xB9FE, 0x54C8}, //9424 #CJK UNIFIED IDEOGRAPH
+ {0xBA40, 0x7BC5}, //9425 #CJK UNIFIED IDEOGRAPH
+ {0xBA41, 0x7BC8}, //9426 #CJK UNIFIED IDEOGRAPH
+ {0xBA42, 0x7BC9}, //9427 #CJK UNIFIED IDEOGRAPH
+ {0xBA43, 0x7BCA}, //9428 #CJK UNIFIED IDEOGRAPH
+ {0xBA44, 0x7BCB}, //9429 #CJK UNIFIED IDEOGRAPH
+ {0xBA45, 0x7BCD}, //9430 #CJK UNIFIED IDEOGRAPH
+ {0xBA46, 0x7BCE}, //9431 #CJK UNIFIED IDEOGRAPH
+ {0xBA47, 0x7BCF}, //9432 #CJK UNIFIED IDEOGRAPH
+ {0xBA48, 0x7BD0}, //9433 #CJK UNIFIED IDEOGRAPH
+ {0xBA49, 0x7BD2}, //9434 #CJK UNIFIED IDEOGRAPH
+ {0xBA4A, 0x7BD4}, //9435 #CJK UNIFIED IDEOGRAPH
+ {0xBA4B, 0x7BD5}, //9436 #CJK UNIFIED IDEOGRAPH
+ {0xBA4C, 0x7BD6}, //9437 #CJK UNIFIED IDEOGRAPH
+ {0xBA4D, 0x7BD7}, //9438 #CJK UNIFIED IDEOGRAPH
+ {0xBA4E, 0x7BD8}, //9439 #CJK UNIFIED IDEOGRAPH
+ {0xBA4F, 0x7BDB}, //9440 #CJK UNIFIED IDEOGRAPH
+ {0xBA50, 0x7BDC}, //9441 #CJK UNIFIED IDEOGRAPH
+ {0xBA51, 0x7BDE}, //9442 #CJK UNIFIED IDEOGRAPH
+ {0xBA52, 0x7BDF}, //9443 #CJK UNIFIED IDEOGRAPH
+ {0xBA53, 0x7BE0}, //9444 #CJK UNIFIED IDEOGRAPH
+ {0xBA54, 0x7BE2}, //9445 #CJK UNIFIED IDEOGRAPH
+ {0xBA55, 0x7BE3}, //9446 #CJK UNIFIED IDEOGRAPH
+ {0xBA56, 0x7BE4}, //9447 #CJK UNIFIED IDEOGRAPH
+ {0xBA57, 0x7BE7}, //9448 #CJK UNIFIED IDEOGRAPH
+ {0xBA58, 0x7BE8}, //9449 #CJK UNIFIED IDEOGRAPH
+ {0xBA59, 0x7BE9}, //9450 #CJK UNIFIED IDEOGRAPH
+ {0xBA5A, 0x7BEB}, //9451 #CJK UNIFIED IDEOGRAPH
+ {0xBA5B, 0x7BEC}, //9452 #CJK UNIFIED IDEOGRAPH
+ {0xBA5C, 0x7BED}, //9453 #CJK UNIFIED IDEOGRAPH
+ {0xBA5D, 0x7BEF}, //9454 #CJK UNIFIED IDEOGRAPH
+ {0xBA5E, 0x7BF0}, //9455 #CJK UNIFIED IDEOGRAPH
+ {0xBA5F, 0x7BF2}, //9456 #CJK UNIFIED IDEOGRAPH
+ {0xBA60, 0x7BF3}, //9457 #CJK UNIFIED IDEOGRAPH
+ {0xBA61, 0x7BF4}, //9458 #CJK UNIFIED IDEOGRAPH
+ {0xBA62, 0x7BF5}, //9459 #CJK UNIFIED IDEOGRAPH
+ {0xBA63, 0x7BF6}, //9460 #CJK UNIFIED IDEOGRAPH
+ {0xBA64, 0x7BF8}, //9461 #CJK UNIFIED IDEOGRAPH
+ {0xBA65, 0x7BF9}, //9462 #CJK UNIFIED IDEOGRAPH
+ {0xBA66, 0x7BFA}, //9463 #CJK UNIFIED IDEOGRAPH
+ {0xBA67, 0x7BFB}, //9464 #CJK UNIFIED IDEOGRAPH
+ {0xBA68, 0x7BFD}, //9465 #CJK UNIFIED IDEOGRAPH
+ {0xBA69, 0x7BFF}, //9466 #CJK UNIFIED IDEOGRAPH
+ {0xBA6A, 0x7C00}, //9467 #CJK UNIFIED IDEOGRAPH
+ {0xBA6B, 0x7C01}, //9468 #CJK UNIFIED IDEOGRAPH
+ {0xBA6C, 0x7C02}, //9469 #CJK UNIFIED IDEOGRAPH
+ {0xBA6D, 0x7C03}, //9470 #CJK UNIFIED IDEOGRAPH
+ {0xBA6E, 0x7C04}, //9471 #CJK UNIFIED IDEOGRAPH
+ {0xBA6F, 0x7C05}, //9472 #CJK UNIFIED IDEOGRAPH
+ {0xBA70, 0x7C06}, //9473 #CJK UNIFIED IDEOGRAPH
+ {0xBA71, 0x7C08}, //9474 #CJK UNIFIED IDEOGRAPH
+ {0xBA72, 0x7C09}, //9475 #CJK UNIFIED IDEOGRAPH
+ {0xBA73, 0x7C0A}, //9476 #CJK UNIFIED IDEOGRAPH
+ {0xBA74, 0x7C0D}, //9477 #CJK UNIFIED IDEOGRAPH
+ {0xBA75, 0x7C0E}, //9478 #CJK UNIFIED IDEOGRAPH
+ {0xBA76, 0x7C10}, //9479 #CJK UNIFIED IDEOGRAPH
+ {0xBA77, 0x7C11}, //9480 #CJK UNIFIED IDEOGRAPH
+ {0xBA78, 0x7C12}, //9481 #CJK UNIFIED IDEOGRAPH
+ {0xBA79, 0x7C13}, //9482 #CJK UNIFIED IDEOGRAPH
+ {0xBA7A, 0x7C14}, //9483 #CJK UNIFIED IDEOGRAPH
+ {0xBA7B, 0x7C15}, //9484 #CJK UNIFIED IDEOGRAPH
+ {0xBA7C, 0x7C17}, //9485 #CJK UNIFIED IDEOGRAPH
+ {0xBA7D, 0x7C18}, //9486 #CJK UNIFIED IDEOGRAPH
+ {0xBA7E, 0x7C19}, //9487 #CJK UNIFIED IDEOGRAPH
+ {0xBA80, 0x7C1A}, //9488 #CJK UNIFIED IDEOGRAPH
+ {0xBA81, 0x7C1B}, //9489 #CJK UNIFIED IDEOGRAPH
+ {0xBA82, 0x7C1C}, //9490 #CJK UNIFIED IDEOGRAPH
+ {0xBA83, 0x7C1D}, //9491 #CJK UNIFIED IDEOGRAPH
+ {0xBA84, 0x7C1E}, //9492 #CJK UNIFIED IDEOGRAPH
+ {0xBA85, 0x7C20}, //9493 #CJK UNIFIED IDEOGRAPH
+ {0xBA86, 0x7C21}, //9494 #CJK UNIFIED IDEOGRAPH
+ {0xBA87, 0x7C22}, //9495 #CJK UNIFIED IDEOGRAPH
+ {0xBA88, 0x7C23}, //9496 #CJK UNIFIED IDEOGRAPH
+ {0xBA89, 0x7C24}, //9497 #CJK UNIFIED IDEOGRAPH
+ {0xBA8A, 0x7C25}, //9498 #CJK UNIFIED IDEOGRAPH
+ {0xBA8B, 0x7C28}, //9499 #CJK UNIFIED IDEOGRAPH
+ {0xBA8C, 0x7C29}, //9500 #CJK UNIFIED IDEOGRAPH
+ {0xBA8D, 0x7C2B}, //9501 #CJK UNIFIED IDEOGRAPH
+ {0xBA8E, 0x7C2C}, //9502 #CJK UNIFIED IDEOGRAPH
+ {0xBA8F, 0x7C2D}, //9503 #CJK UNIFIED IDEOGRAPH
+ {0xBA90, 0x7C2E}, //9504 #CJK UNIFIED IDEOGRAPH
+ {0xBA91, 0x7C2F}, //9505 #CJK UNIFIED IDEOGRAPH
+ {0xBA92, 0x7C30}, //9506 #CJK UNIFIED IDEOGRAPH
+ {0xBA93, 0x7C31}, //9507 #CJK UNIFIED IDEOGRAPH
+ {0xBA94, 0x7C32}, //9508 #CJK UNIFIED IDEOGRAPH
+ {0xBA95, 0x7C33}, //9509 #CJK UNIFIED IDEOGRAPH
+ {0xBA96, 0x7C34}, //9510 #CJK UNIFIED IDEOGRAPH
+ {0xBA97, 0x7C35}, //9511 #CJK UNIFIED IDEOGRAPH
+ {0xBA98, 0x7C36}, //9512 #CJK UNIFIED IDEOGRAPH
+ {0xBA99, 0x7C37}, //9513 #CJK UNIFIED IDEOGRAPH
+ {0xBA9A, 0x7C39}, //9514 #CJK UNIFIED IDEOGRAPH
+ {0xBA9B, 0x7C3A}, //9515 #CJK UNIFIED IDEOGRAPH
+ {0xBA9C, 0x7C3B}, //9516 #CJK UNIFIED IDEOGRAPH
+ {0xBA9D, 0x7C3C}, //9517 #CJK UNIFIED IDEOGRAPH
+ {0xBA9E, 0x7C3D}, //9518 #CJK UNIFIED IDEOGRAPH
+ {0xBA9F, 0x7C3E}, //9519 #CJK UNIFIED IDEOGRAPH
+ {0xBAA0, 0x7C42}, //9520 #CJK UNIFIED IDEOGRAPH
+ {0xBAA1, 0x9AB8}, //9521 #CJK UNIFIED IDEOGRAPH
+ {0xBAA2, 0x5B69}, //9522 #CJK UNIFIED IDEOGRAPH
+ {0xBAA3, 0x6D77}, //9523 #CJK UNIFIED IDEOGRAPH
+ {0xBAA4, 0x6C26}, //9524 #CJK UNIFIED IDEOGRAPH
+ {0xBAA5, 0x4EA5}, //9525 #CJK UNIFIED IDEOGRAPH
+ {0xBAA6, 0x5BB3}, //9526 #CJK UNIFIED IDEOGRAPH
+ {0xBAA7, 0x9A87}, //9527 #CJK UNIFIED IDEOGRAPH
+ {0xBAA8, 0x9163}, //9528 #CJK UNIFIED IDEOGRAPH
+ {0xBAA9, 0x61A8}, //9529 #CJK UNIFIED IDEOGRAPH
+ {0xBAAA, 0x90AF}, //9530 #CJK UNIFIED IDEOGRAPH
+ {0xBAAB, 0x97E9}, //9531 #CJK UNIFIED IDEOGRAPH
+ {0xBAAC, 0x542B}, //9532 #CJK UNIFIED IDEOGRAPH
+ {0xBAAD, 0x6DB5}, //9533 #CJK UNIFIED IDEOGRAPH
+ {0xBAAE, 0x5BD2}, //9534 #CJK UNIFIED IDEOGRAPH
+ {0xBAAF, 0x51FD}, //9535 #CJK UNIFIED IDEOGRAPH
+ {0xBAB0, 0x558A}, //9536 #CJK UNIFIED IDEOGRAPH
+ {0xBAB1, 0x7F55}, //9537 #CJK UNIFIED IDEOGRAPH
+ {0xBAB2, 0x7FF0}, //9538 #CJK UNIFIED IDEOGRAPH
+ {0xBAB3, 0x64BC}, //9539 #CJK UNIFIED IDEOGRAPH
+ {0xBAB4, 0x634D}, //9540 #CJK UNIFIED IDEOGRAPH
+ {0xBAB5, 0x65F1}, //9541 #CJK UNIFIED IDEOGRAPH
+ {0xBAB6, 0x61BE}, //9542 #CJK UNIFIED IDEOGRAPH
+ {0xBAB7, 0x608D}, //9543 #CJK UNIFIED IDEOGRAPH
+ {0xBAB8, 0x710A}, //9544 #CJK UNIFIED IDEOGRAPH
+ {0xBAB9, 0x6C57}, //9545 #CJK UNIFIED IDEOGRAPH
+ {0xBABA, 0x6C49}, //9546 #CJK UNIFIED IDEOGRAPH
+ {0xBABB, 0x592F}, //9547 #CJK UNIFIED IDEOGRAPH
+ {0xBABC, 0x676D}, //9548 #CJK UNIFIED IDEOGRAPH
+ {0xBABD, 0x822A}, //9549 #CJK UNIFIED IDEOGRAPH
+ {0xBABE, 0x58D5}, //9550 #CJK UNIFIED IDEOGRAPH
+ {0xBABF, 0x568E}, //9551 #CJK UNIFIED IDEOGRAPH
+ {0xBAC0, 0x8C6A}, //9552 #CJK UNIFIED IDEOGRAPH
+ {0xBAC1, 0x6BEB}, //9553 #CJK UNIFIED IDEOGRAPH
+ {0xBAC2, 0x90DD}, //9554 #CJK UNIFIED IDEOGRAPH
+ {0xBAC3, 0x597D}, //9555 #CJK UNIFIED IDEOGRAPH
+ {0xBAC4, 0x8017}, //9556 #CJK UNIFIED IDEOGRAPH
+ {0xBAC5, 0x53F7}, //9557 #CJK UNIFIED IDEOGRAPH
+ {0xBAC6, 0x6D69}, //9558 #CJK UNIFIED IDEOGRAPH
+ {0xBAC7, 0x5475}, //9559 #CJK UNIFIED IDEOGRAPH
+ {0xBAC8, 0x559D}, //9560 #CJK UNIFIED IDEOGRAPH
+ {0xBAC9, 0x8377}, //9561 #CJK UNIFIED IDEOGRAPH
+ {0xBACA, 0x83CF}, //9562 #CJK UNIFIED IDEOGRAPH
+ {0xBACB, 0x6838}, //9563 #CJK UNIFIED IDEOGRAPH
+ {0xBACC, 0x79BE}, //9564 #CJK UNIFIED IDEOGRAPH
+ {0xBACD, 0x548C}, //9565 #CJK UNIFIED IDEOGRAPH
+ {0xBACE, 0x4F55}, //9566 #CJK UNIFIED IDEOGRAPH
+ {0xBACF, 0x5408}, //9567 #CJK UNIFIED IDEOGRAPH
+ {0xBAD0, 0x76D2}, //9568 #CJK UNIFIED IDEOGRAPH
+ {0xBAD1, 0x8C89}, //9569 #CJK UNIFIED IDEOGRAPH
+ {0xBAD2, 0x9602}, //9570 #CJK UNIFIED IDEOGRAPH
+ {0xBAD3, 0x6CB3}, //9571 #CJK UNIFIED IDEOGRAPH
+ {0xBAD4, 0x6DB8}, //9572 #CJK UNIFIED IDEOGRAPH
+ {0xBAD5, 0x8D6B}, //9573 #CJK UNIFIED IDEOGRAPH
+ {0xBAD6, 0x8910}, //9574 #CJK UNIFIED IDEOGRAPH
+ {0xBAD7, 0x9E64}, //9575 #CJK UNIFIED IDEOGRAPH
+ {0xBAD8, 0x8D3A}, //9576 #CJK UNIFIED IDEOGRAPH
+ {0xBAD9, 0x563F}, //9577 #CJK UNIFIED IDEOGRAPH
+ {0xBADA, 0x9ED1}, //9578 #CJK UNIFIED IDEOGRAPH
+ {0xBADB, 0x75D5}, //9579 #CJK UNIFIED IDEOGRAPH
+ {0xBADC, 0x5F88}, //9580 #CJK UNIFIED IDEOGRAPH
+ {0xBADD, 0x72E0}, //9581 #CJK UNIFIED IDEOGRAPH
+ {0xBADE, 0x6068}, //9582 #CJK UNIFIED IDEOGRAPH
+ {0xBADF, 0x54FC}, //9583 #CJK UNIFIED IDEOGRAPH
+ {0xBAE0, 0x4EA8}, //9584 #CJK UNIFIED IDEOGRAPH
+ {0xBAE1, 0x6A2A}, //9585 #CJK UNIFIED IDEOGRAPH
+ {0xBAE2, 0x8861}, //9586 #CJK UNIFIED IDEOGRAPH
+ {0xBAE3, 0x6052}, //9587 #CJK UNIFIED IDEOGRAPH
+ {0xBAE4, 0x8F70}, //9588 #CJK UNIFIED IDEOGRAPH
+ {0xBAE5, 0x54C4}, //9589 #CJK UNIFIED IDEOGRAPH
+ {0xBAE6, 0x70D8}, //9590 #CJK UNIFIED IDEOGRAPH
+ {0xBAE7, 0x8679}, //9591 #CJK UNIFIED IDEOGRAPH
+ {0xBAE8, 0x9E3F}, //9592 #CJK UNIFIED IDEOGRAPH
+ {0xBAE9, 0x6D2A}, //9593 #CJK UNIFIED IDEOGRAPH
+ {0xBAEA, 0x5B8F}, //9594 #CJK UNIFIED IDEOGRAPH
+ {0xBAEB, 0x5F18}, //9595 #CJK UNIFIED IDEOGRAPH
+ {0xBAEC, 0x7EA2}, //9596 #CJK UNIFIED IDEOGRAPH
+ {0xBAED, 0x5589}, //9597 #CJK UNIFIED IDEOGRAPH
+ {0xBAEE, 0x4FAF}, //9598 #CJK UNIFIED IDEOGRAPH
+ {0xBAEF, 0x7334}, //9599 #CJK UNIFIED IDEOGRAPH
+ {0xBAF0, 0x543C}, //9600 #CJK UNIFIED IDEOGRAPH
+ {0xBAF1, 0x539A}, //9601 #CJK UNIFIED IDEOGRAPH
+ {0xBAF2, 0x5019}, //9602 #CJK UNIFIED IDEOGRAPH
+ {0xBAF3, 0x540E}, //9603 #CJK UNIFIED IDEOGRAPH
+ {0xBAF4, 0x547C}, //9604 #CJK UNIFIED IDEOGRAPH
+ {0xBAF5, 0x4E4E}, //9605 #CJK UNIFIED IDEOGRAPH
+ {0xBAF6, 0x5FFD}, //9606 #CJK UNIFIED IDEOGRAPH
+ {0xBAF7, 0x745A}, //9607 #CJK UNIFIED IDEOGRAPH
+ {0xBAF8, 0x58F6}, //9608 #CJK UNIFIED IDEOGRAPH
+ {0xBAF9, 0x846B}, //9609 #CJK UNIFIED IDEOGRAPH
+ {0xBAFA, 0x80E1}, //9610 #CJK UNIFIED IDEOGRAPH
+ {0xBAFB, 0x8774}, //9611 #CJK UNIFIED IDEOGRAPH
+ {0xBAFC, 0x72D0}, //9612 #CJK UNIFIED IDEOGRAPH
+ {0xBAFD, 0x7CCA}, //9613 #CJK UNIFIED IDEOGRAPH
+ {0xBAFE, 0x6E56}, //9614 #CJK UNIFIED IDEOGRAPH
+ {0xBB40, 0x7C43}, //9615 #CJK UNIFIED IDEOGRAPH
+ {0xBB41, 0x7C44}, //9616 #CJK UNIFIED IDEOGRAPH
+ {0xBB42, 0x7C45}, //9617 #CJK UNIFIED IDEOGRAPH
+ {0xBB43, 0x7C46}, //9618 #CJK UNIFIED IDEOGRAPH
+ {0xBB44, 0x7C47}, //9619 #CJK UNIFIED IDEOGRAPH
+ {0xBB45, 0x7C48}, //9620 #CJK UNIFIED IDEOGRAPH
+ {0xBB46, 0x7C49}, //9621 #CJK UNIFIED IDEOGRAPH
+ {0xBB47, 0x7C4A}, //9622 #CJK UNIFIED IDEOGRAPH
+ {0xBB48, 0x7C4B}, //9623 #CJK UNIFIED IDEOGRAPH
+ {0xBB49, 0x7C4C}, //9624 #CJK UNIFIED IDEOGRAPH
+ {0xBB4A, 0x7C4E}, //9625 #CJK UNIFIED IDEOGRAPH
+ {0xBB4B, 0x7C4F}, //9626 #CJK UNIFIED IDEOGRAPH
+ {0xBB4C, 0x7C50}, //9627 #CJK UNIFIED IDEOGRAPH
+ {0xBB4D, 0x7C51}, //9628 #CJK UNIFIED IDEOGRAPH
+ {0xBB4E, 0x7C52}, //9629 #CJK UNIFIED IDEOGRAPH
+ {0xBB4F, 0x7C53}, //9630 #CJK UNIFIED IDEOGRAPH
+ {0xBB50, 0x7C54}, //9631 #CJK UNIFIED IDEOGRAPH
+ {0xBB51, 0x7C55}, //9632 #CJK UNIFIED IDEOGRAPH
+ {0xBB52, 0x7C56}, //9633 #CJK UNIFIED IDEOGRAPH
+ {0xBB53, 0x7C57}, //9634 #CJK UNIFIED IDEOGRAPH
+ {0xBB54, 0x7C58}, //9635 #CJK UNIFIED IDEOGRAPH
+ {0xBB55, 0x7C59}, //9636 #CJK UNIFIED IDEOGRAPH
+ {0xBB56, 0x7C5A}, //9637 #CJK UNIFIED IDEOGRAPH
+ {0xBB57, 0x7C5B}, //9638 #CJK UNIFIED IDEOGRAPH
+ {0xBB58, 0x7C5C}, //9639 #CJK UNIFIED IDEOGRAPH
+ {0xBB59, 0x7C5D}, //9640 #CJK UNIFIED IDEOGRAPH
+ {0xBB5A, 0x7C5E}, //9641 #CJK UNIFIED IDEOGRAPH
+ {0xBB5B, 0x7C5F}, //9642 #CJK UNIFIED IDEOGRAPH
+ {0xBB5C, 0x7C60}, //9643 #CJK UNIFIED IDEOGRAPH
+ {0xBB5D, 0x7C61}, //9644 #CJK UNIFIED IDEOGRAPH
+ {0xBB5E, 0x7C62}, //9645 #CJK UNIFIED IDEOGRAPH
+ {0xBB5F, 0x7C63}, //9646 #CJK UNIFIED IDEOGRAPH
+ {0xBB60, 0x7C64}, //9647 #CJK UNIFIED IDEOGRAPH
+ {0xBB61, 0x7C65}, //9648 #CJK UNIFIED IDEOGRAPH
+ {0xBB62, 0x7C66}, //9649 #CJK UNIFIED IDEOGRAPH
+ {0xBB63, 0x7C67}, //9650 #CJK UNIFIED IDEOGRAPH
+ {0xBB64, 0x7C68}, //9651 #CJK UNIFIED IDEOGRAPH
+ {0xBB65, 0x7C69}, //9652 #CJK UNIFIED IDEOGRAPH
+ {0xBB66, 0x7C6A}, //9653 #CJK UNIFIED IDEOGRAPH
+ {0xBB67, 0x7C6B}, //9654 #CJK UNIFIED IDEOGRAPH
+ {0xBB68, 0x7C6C}, //9655 #CJK UNIFIED IDEOGRAPH
+ {0xBB69, 0x7C6D}, //9656 #CJK UNIFIED IDEOGRAPH
+ {0xBB6A, 0x7C6E}, //9657 #CJK UNIFIED IDEOGRAPH
+ {0xBB6B, 0x7C6F}, //9658 #CJK UNIFIED IDEOGRAPH
+ {0xBB6C, 0x7C70}, //9659 #CJK UNIFIED IDEOGRAPH
+ {0xBB6D, 0x7C71}, //9660 #CJK UNIFIED IDEOGRAPH
+ {0xBB6E, 0x7C72}, //9661 #CJK UNIFIED IDEOGRAPH
+ {0xBB6F, 0x7C75}, //9662 #CJK UNIFIED IDEOGRAPH
+ {0xBB70, 0x7C76}, //9663 #CJK UNIFIED IDEOGRAPH
+ {0xBB71, 0x7C77}, //9664 #CJK UNIFIED IDEOGRAPH
+ {0xBB72, 0x7C78}, //9665 #CJK UNIFIED IDEOGRAPH
+ {0xBB73, 0x7C79}, //9666 #CJK UNIFIED IDEOGRAPH
+ {0xBB74, 0x7C7A}, //9667 #CJK UNIFIED IDEOGRAPH
+ {0xBB75, 0x7C7E}, //9668 #CJK UNIFIED IDEOGRAPH
+ {0xBB76, 0x7C7F}, //9669 #CJK UNIFIED IDEOGRAPH
+ {0xBB77, 0x7C80}, //9670 #CJK UNIFIED IDEOGRAPH
+ {0xBB78, 0x7C81}, //9671 #CJK UNIFIED IDEOGRAPH
+ {0xBB79, 0x7C82}, //9672 #CJK UNIFIED IDEOGRAPH
+ {0xBB7A, 0x7C83}, //9673 #CJK UNIFIED IDEOGRAPH
+ {0xBB7B, 0x7C84}, //9674 #CJK UNIFIED IDEOGRAPH
+ {0xBB7C, 0x7C85}, //9675 #CJK UNIFIED IDEOGRAPH
+ {0xBB7D, 0x7C86}, //9676 #CJK UNIFIED IDEOGRAPH
+ {0xBB7E, 0x7C87}, //9677 #CJK UNIFIED IDEOGRAPH
+ {0xBB80, 0x7C88}, //9678 #CJK UNIFIED IDEOGRAPH
+ {0xBB81, 0x7C8A}, //9679 #CJK UNIFIED IDEOGRAPH
+ {0xBB82, 0x7C8B}, //9680 #CJK UNIFIED IDEOGRAPH
+ {0xBB83, 0x7C8C}, //9681 #CJK UNIFIED IDEOGRAPH
+ {0xBB84, 0x7C8D}, //9682 #CJK UNIFIED IDEOGRAPH
+ {0xBB85, 0x7C8E}, //9683 #CJK UNIFIED IDEOGRAPH
+ {0xBB86, 0x7C8F}, //9684 #CJK UNIFIED IDEOGRAPH
+ {0xBB87, 0x7C90}, //9685 #CJK UNIFIED IDEOGRAPH
+ {0xBB88, 0x7C93}, //9686 #CJK UNIFIED IDEOGRAPH
+ {0xBB89, 0x7C94}, //9687 #CJK UNIFIED IDEOGRAPH
+ {0xBB8A, 0x7C96}, //9688 #CJK UNIFIED IDEOGRAPH
+ {0xBB8B, 0x7C99}, //9689 #CJK UNIFIED IDEOGRAPH
+ {0xBB8C, 0x7C9A}, //9690 #CJK UNIFIED IDEOGRAPH
+ {0xBB8D, 0x7C9B}, //9691 #CJK UNIFIED IDEOGRAPH
+ {0xBB8E, 0x7CA0}, //9692 #CJK UNIFIED IDEOGRAPH
+ {0xBB8F, 0x7CA1}, //9693 #CJK UNIFIED IDEOGRAPH
+ {0xBB90, 0x7CA3}, //9694 #CJK UNIFIED IDEOGRAPH
+ {0xBB91, 0x7CA6}, //9695 #CJK UNIFIED IDEOGRAPH
+ {0xBB92, 0x7CA7}, //9696 #CJK UNIFIED IDEOGRAPH
+ {0xBB93, 0x7CA8}, //9697 #CJK UNIFIED IDEOGRAPH
+ {0xBB94, 0x7CA9}, //9698 #CJK UNIFIED IDEOGRAPH
+ {0xBB95, 0x7CAB}, //9699 #CJK UNIFIED IDEOGRAPH
+ {0xBB96, 0x7CAC}, //9700 #CJK UNIFIED IDEOGRAPH
+ {0xBB97, 0x7CAD}, //9701 #CJK UNIFIED IDEOGRAPH
+ {0xBB98, 0x7CAF}, //9702 #CJK UNIFIED IDEOGRAPH
+ {0xBB99, 0x7CB0}, //9703 #CJK UNIFIED IDEOGRAPH
+ {0xBB9A, 0x7CB4}, //9704 #CJK UNIFIED IDEOGRAPH
+ {0xBB9B, 0x7CB5}, //9705 #CJK UNIFIED IDEOGRAPH
+ {0xBB9C, 0x7CB6}, //9706 #CJK UNIFIED IDEOGRAPH
+ {0xBB9D, 0x7CB7}, //9707 #CJK UNIFIED IDEOGRAPH
+ {0xBB9E, 0x7CB8}, //9708 #CJK UNIFIED IDEOGRAPH
+ {0xBB9F, 0x7CBA}, //9709 #CJK UNIFIED IDEOGRAPH
+ {0xBBA0, 0x7CBB}, //9710 #CJK UNIFIED IDEOGRAPH
+ {0xBBA1, 0x5F27}, //9711 #CJK UNIFIED IDEOGRAPH
+ {0xBBA2, 0x864E}, //9712 #CJK UNIFIED IDEOGRAPH
+ {0xBBA3, 0x552C}, //9713 #CJK UNIFIED IDEOGRAPH
+ {0xBBA4, 0x62A4}, //9714 #CJK UNIFIED IDEOGRAPH
+ {0xBBA5, 0x4E92}, //9715 #CJK UNIFIED IDEOGRAPH
+ {0xBBA6, 0x6CAA}, //9716 #CJK UNIFIED IDEOGRAPH
+ {0xBBA7, 0x6237}, //9717 #CJK UNIFIED IDEOGRAPH
+ {0xBBA8, 0x82B1}, //9718 #CJK UNIFIED IDEOGRAPH
+ {0xBBA9, 0x54D7}, //9719 #CJK UNIFIED IDEOGRAPH
+ {0xBBAA, 0x534E}, //9720 #CJK UNIFIED IDEOGRAPH
+ {0xBBAB, 0x733E}, //9721 #CJK UNIFIED IDEOGRAPH
+ {0xBBAC, 0x6ED1}, //9722 #CJK UNIFIED IDEOGRAPH
+ {0xBBAD, 0x753B}, //9723 #CJK UNIFIED IDEOGRAPH
+ {0xBBAE, 0x5212}, //9724 #CJK UNIFIED IDEOGRAPH
+ {0xBBAF, 0x5316}, //9725 #CJK UNIFIED IDEOGRAPH
+ {0xBBB0, 0x8BDD}, //9726 #CJK UNIFIED IDEOGRAPH
+ {0xBBB1, 0x69D0}, //9727 #CJK UNIFIED IDEOGRAPH
+ {0xBBB2, 0x5F8A}, //9728 #CJK UNIFIED IDEOGRAPH
+ {0xBBB3, 0x6000}, //9729 #CJK UNIFIED IDEOGRAPH
+ {0xBBB4, 0x6DEE}, //9730 #CJK UNIFIED IDEOGRAPH
+ {0xBBB5, 0x574F}, //9731 #CJK UNIFIED IDEOGRAPH
+ {0xBBB6, 0x6B22}, //9732 #CJK UNIFIED IDEOGRAPH
+ {0xBBB7, 0x73AF}, //9733 #CJK UNIFIED IDEOGRAPH
+ {0xBBB8, 0x6853}, //9734 #CJK UNIFIED IDEOGRAPH
+ {0xBBB9, 0x8FD8}, //9735 #CJK UNIFIED IDEOGRAPH
+ {0xBBBA, 0x7F13}, //9736 #CJK UNIFIED IDEOGRAPH
+ {0xBBBB, 0x6362}, //9737 #CJK UNIFIED IDEOGRAPH
+ {0xBBBC, 0x60A3}, //9738 #CJK UNIFIED IDEOGRAPH
+ {0xBBBD, 0x5524}, //9739 #CJK UNIFIED IDEOGRAPH
+ {0xBBBE, 0x75EA}, //9740 #CJK UNIFIED IDEOGRAPH
+ {0xBBBF, 0x8C62}, //9741 #CJK UNIFIED IDEOGRAPH
+ {0xBBC0, 0x7115}, //9742 #CJK UNIFIED IDEOGRAPH
+ {0xBBC1, 0x6DA3}, //9743 #CJK UNIFIED IDEOGRAPH
+ {0xBBC2, 0x5BA6}, //9744 #CJK UNIFIED IDEOGRAPH
+ {0xBBC3, 0x5E7B}, //9745 #CJK UNIFIED IDEOGRAPH
+ {0xBBC4, 0x8352}, //9746 #CJK UNIFIED IDEOGRAPH
+ {0xBBC5, 0x614C}, //9747 #CJK UNIFIED IDEOGRAPH
+ {0xBBC6, 0x9EC4}, //9748 #CJK UNIFIED IDEOGRAPH
+ {0xBBC7, 0x78FA}, //9749 #CJK UNIFIED IDEOGRAPH
+ {0xBBC8, 0x8757}, //9750 #CJK UNIFIED IDEOGRAPH
+ {0xBBC9, 0x7C27}, //9751 #CJK UNIFIED IDEOGRAPH
+ {0xBBCA, 0x7687}, //9752 #CJK UNIFIED IDEOGRAPH
+ {0xBBCB, 0x51F0}, //9753 #CJK UNIFIED IDEOGRAPH
+ {0xBBCC, 0x60F6}, //9754 #CJK UNIFIED IDEOGRAPH
+ {0xBBCD, 0x714C}, //9755 #CJK UNIFIED IDEOGRAPH
+ {0xBBCE, 0x6643}, //9756 #CJK UNIFIED IDEOGRAPH
+ {0xBBCF, 0x5E4C}, //9757 #CJK UNIFIED IDEOGRAPH
+ {0xBBD0, 0x604D}, //9758 #CJK UNIFIED IDEOGRAPH
+ {0xBBD1, 0x8C0E}, //9759 #CJK UNIFIED IDEOGRAPH
+ {0xBBD2, 0x7070}, //9760 #CJK UNIFIED IDEOGRAPH
+ {0xBBD3, 0x6325}, //9761 #CJK UNIFIED IDEOGRAPH
+ {0xBBD4, 0x8F89}, //9762 #CJK UNIFIED IDEOGRAPH
+ {0xBBD5, 0x5FBD}, //9763 #CJK UNIFIED IDEOGRAPH
+ {0xBBD6, 0x6062}, //9764 #CJK UNIFIED IDEOGRAPH
+ {0xBBD7, 0x86D4}, //9765 #CJK UNIFIED IDEOGRAPH
+ {0xBBD8, 0x56DE}, //9766 #CJK UNIFIED IDEOGRAPH
+ {0xBBD9, 0x6BC1}, //9767 #CJK UNIFIED IDEOGRAPH
+ {0xBBDA, 0x6094}, //9768 #CJK UNIFIED IDEOGRAPH
+ {0xBBDB, 0x6167}, //9769 #CJK UNIFIED IDEOGRAPH
+ {0xBBDC, 0x5349}, //9770 #CJK UNIFIED IDEOGRAPH
+ {0xBBDD, 0x60E0}, //9771 #CJK UNIFIED IDEOGRAPH
+ {0xBBDE, 0x6666}, //9772 #CJK UNIFIED IDEOGRAPH
+ {0xBBDF, 0x8D3F}, //9773 #CJK UNIFIED IDEOGRAPH
+ {0xBBE0, 0x79FD}, //9774 #CJK UNIFIED IDEOGRAPH
+ {0xBBE1, 0x4F1A}, //9775 #CJK UNIFIED IDEOGRAPH
+ {0xBBE2, 0x70E9}, //9776 #CJK UNIFIED IDEOGRAPH
+ {0xBBE3, 0x6C47}, //9777 #CJK UNIFIED IDEOGRAPH
+ {0xBBE4, 0x8BB3}, //9778 #CJK UNIFIED IDEOGRAPH
+ {0xBBE5, 0x8BF2}, //9779 #CJK UNIFIED IDEOGRAPH
+ {0xBBE6, 0x7ED8}, //9780 #CJK UNIFIED IDEOGRAPH
+ {0xBBE7, 0x8364}, //9781 #CJK UNIFIED IDEOGRAPH
+ {0xBBE8, 0x660F}, //9782 #CJK UNIFIED IDEOGRAPH
+ {0xBBE9, 0x5A5A}, //9783 #CJK UNIFIED IDEOGRAPH
+ {0xBBEA, 0x9B42}, //9784 #CJK UNIFIED IDEOGRAPH
+ {0xBBEB, 0x6D51}, //9785 #CJK UNIFIED IDEOGRAPH
+ {0xBBEC, 0x6DF7}, //9786 #CJK UNIFIED IDEOGRAPH
+ {0xBBED, 0x8C41}, //9787 #CJK UNIFIED IDEOGRAPH
+ {0xBBEE, 0x6D3B}, //9788 #CJK UNIFIED IDEOGRAPH
+ {0xBBEF, 0x4F19}, //9789 #CJK UNIFIED IDEOGRAPH
+ {0xBBF0, 0x706B}, //9790 #CJK UNIFIED IDEOGRAPH
+ {0xBBF1, 0x83B7}, //9791 #CJK UNIFIED IDEOGRAPH
+ {0xBBF2, 0x6216}, //9792 #CJK UNIFIED IDEOGRAPH
+ {0xBBF3, 0x60D1}, //9793 #CJK UNIFIED IDEOGRAPH
+ {0xBBF4, 0x970D}, //9794 #CJK UNIFIED IDEOGRAPH
+ {0xBBF5, 0x8D27}, //9795 #CJK UNIFIED IDEOGRAPH
+ {0xBBF6, 0x7978}, //9796 #CJK UNIFIED IDEOGRAPH
+ {0xBBF7, 0x51FB}, //9797 #CJK UNIFIED IDEOGRAPH
+ {0xBBF8, 0x573E}, //9798 #CJK UNIFIED IDEOGRAPH
+ {0xBBF9, 0x57FA}, //9799 #CJK UNIFIED IDEOGRAPH
+ {0xBBFA, 0x673A}, //9800 #CJK UNIFIED IDEOGRAPH
+ {0xBBFB, 0x7578}, //9801 #CJK UNIFIED IDEOGRAPH
+ {0xBBFC, 0x7A3D}, //9802 #CJK UNIFIED IDEOGRAPH
+ {0xBBFD, 0x79EF}, //9803 #CJK UNIFIED IDEOGRAPH
+ {0xBBFE, 0x7B95}, //9804 #CJK UNIFIED IDEOGRAPH
+ {0xBC40, 0x7CBF}, //9805 #CJK UNIFIED IDEOGRAPH
+ {0xBC41, 0x7CC0}, //9806 #CJK UNIFIED IDEOGRAPH
+ {0xBC42, 0x7CC2}, //9807 #CJK UNIFIED IDEOGRAPH
+ {0xBC43, 0x7CC3}, //9808 #CJK UNIFIED IDEOGRAPH
+ {0xBC44, 0x7CC4}, //9809 #CJK UNIFIED IDEOGRAPH
+ {0xBC45, 0x7CC6}, //9810 #CJK UNIFIED IDEOGRAPH
+ {0xBC46, 0x7CC9}, //9811 #CJK UNIFIED IDEOGRAPH
+ {0xBC47, 0x7CCB}, //9812 #CJK UNIFIED IDEOGRAPH
+ {0xBC48, 0x7CCE}, //9813 #CJK UNIFIED IDEOGRAPH
+ {0xBC49, 0x7CCF}, //9814 #CJK UNIFIED IDEOGRAPH
+ {0xBC4A, 0x7CD0}, //9815 #CJK UNIFIED IDEOGRAPH
+ {0xBC4B, 0x7CD1}, //9816 #CJK UNIFIED IDEOGRAPH
+ {0xBC4C, 0x7CD2}, //9817 #CJK UNIFIED IDEOGRAPH
+ {0xBC4D, 0x7CD3}, //9818 #CJK UNIFIED IDEOGRAPH
+ {0xBC4E, 0x7CD4}, //9819 #CJK UNIFIED IDEOGRAPH
+ {0xBC4F, 0x7CD8}, //9820 #CJK UNIFIED IDEOGRAPH
+ {0xBC50, 0x7CDA}, //9821 #CJK UNIFIED IDEOGRAPH
+ {0xBC51, 0x7CDB}, //9822 #CJK UNIFIED IDEOGRAPH
+ {0xBC52, 0x7CDD}, //9823 #CJK UNIFIED IDEOGRAPH
+ {0xBC53, 0x7CDE}, //9824 #CJK UNIFIED IDEOGRAPH
+ {0xBC54, 0x7CE1}, //9825 #CJK UNIFIED IDEOGRAPH
+ {0xBC55, 0x7CE2}, //9826 #CJK UNIFIED IDEOGRAPH
+ {0xBC56, 0x7CE3}, //9827 #CJK UNIFIED IDEOGRAPH
+ {0xBC57, 0x7CE4}, //9828 #CJK UNIFIED IDEOGRAPH
+ {0xBC58, 0x7CE5}, //9829 #CJK UNIFIED IDEOGRAPH
+ {0xBC59, 0x7CE6}, //9830 #CJK UNIFIED IDEOGRAPH
+ {0xBC5A, 0x7CE7}, //9831 #CJK UNIFIED IDEOGRAPH
+ {0xBC5B, 0x7CE9}, //9832 #CJK UNIFIED IDEOGRAPH
+ {0xBC5C, 0x7CEA}, //9833 #CJK UNIFIED IDEOGRAPH
+ {0xBC5D, 0x7CEB}, //9834 #CJK UNIFIED IDEOGRAPH
+ {0xBC5E, 0x7CEC}, //9835 #CJK UNIFIED IDEOGRAPH
+ {0xBC5F, 0x7CED}, //9836 #CJK UNIFIED IDEOGRAPH
+ {0xBC60, 0x7CEE}, //9837 #CJK UNIFIED IDEOGRAPH
+ {0xBC61, 0x7CF0}, //9838 #CJK UNIFIED IDEOGRAPH
+ {0xBC62, 0x7CF1}, //9839 #CJK UNIFIED IDEOGRAPH
+ {0xBC63, 0x7CF2}, //9840 #CJK UNIFIED IDEOGRAPH
+ {0xBC64, 0x7CF3}, //9841 #CJK UNIFIED IDEOGRAPH
+ {0xBC65, 0x7CF4}, //9842 #CJK UNIFIED IDEOGRAPH
+ {0xBC66, 0x7CF5}, //9843 #CJK UNIFIED IDEOGRAPH
+ {0xBC67, 0x7CF6}, //9844 #CJK UNIFIED IDEOGRAPH
+ {0xBC68, 0x7CF7}, //9845 #CJK UNIFIED IDEOGRAPH
+ {0xBC69, 0x7CF9}, //9846 #CJK UNIFIED IDEOGRAPH
+ {0xBC6A, 0x7CFA}, //9847 #CJK UNIFIED IDEOGRAPH
+ {0xBC6B, 0x7CFC}, //9848 #CJK UNIFIED IDEOGRAPH
+ {0xBC6C, 0x7CFD}, //9849 #CJK UNIFIED IDEOGRAPH
+ {0xBC6D, 0x7CFE}, //9850 #CJK UNIFIED IDEOGRAPH
+ {0xBC6E, 0x7CFF}, //9851 #CJK UNIFIED IDEOGRAPH
+ {0xBC6F, 0x7D00}, //9852 #CJK UNIFIED IDEOGRAPH
+ {0xBC70, 0x7D01}, //9853 #CJK UNIFIED IDEOGRAPH
+ {0xBC71, 0x7D02}, //9854 #CJK UNIFIED IDEOGRAPH
+ {0xBC72, 0x7D03}, //9855 #CJK UNIFIED IDEOGRAPH
+ {0xBC73, 0x7D04}, //9856 #CJK UNIFIED IDEOGRAPH
+ {0xBC74, 0x7D05}, //9857 #CJK UNIFIED IDEOGRAPH
+ {0xBC75, 0x7D06}, //9858 #CJK UNIFIED IDEOGRAPH
+ {0xBC76, 0x7D07}, //9859 #CJK UNIFIED IDEOGRAPH
+ {0xBC77, 0x7D08}, //9860 #CJK UNIFIED IDEOGRAPH
+ {0xBC78, 0x7D09}, //9861 #CJK UNIFIED IDEOGRAPH
+ {0xBC79, 0x7D0B}, //9862 #CJK UNIFIED IDEOGRAPH
+ {0xBC7A, 0x7D0C}, //9863 #CJK UNIFIED IDEOGRAPH
+ {0xBC7B, 0x7D0D}, //9864 #CJK UNIFIED IDEOGRAPH
+ {0xBC7C, 0x7D0E}, //9865 #CJK UNIFIED IDEOGRAPH
+ {0xBC7D, 0x7D0F}, //9866 #CJK UNIFIED IDEOGRAPH
+ {0xBC7E, 0x7D10}, //9867 #CJK UNIFIED IDEOGRAPH
+ {0xBC80, 0x7D11}, //9868 #CJK UNIFIED IDEOGRAPH
+ {0xBC81, 0x7D12}, //9869 #CJK UNIFIED IDEOGRAPH
+ {0xBC82, 0x7D13}, //9870 #CJK UNIFIED IDEOGRAPH
+ {0xBC83, 0x7D14}, //9871 #CJK UNIFIED IDEOGRAPH
+ {0xBC84, 0x7D15}, //9872 #CJK UNIFIED IDEOGRAPH
+ {0xBC85, 0x7D16}, //9873 #CJK UNIFIED IDEOGRAPH
+ {0xBC86, 0x7D17}, //9874 #CJK UNIFIED IDEOGRAPH
+ {0xBC87, 0x7D18}, //9875 #CJK UNIFIED IDEOGRAPH
+ {0xBC88, 0x7D19}, //9876 #CJK UNIFIED IDEOGRAPH
+ {0xBC89, 0x7D1A}, //9877 #CJK UNIFIED IDEOGRAPH
+ {0xBC8A, 0x7D1B}, //9878 #CJK UNIFIED IDEOGRAPH
+ {0xBC8B, 0x7D1C}, //9879 #CJK UNIFIED IDEOGRAPH
+ {0xBC8C, 0x7D1D}, //9880 #CJK UNIFIED IDEOGRAPH
+ {0xBC8D, 0x7D1E}, //9881 #CJK UNIFIED IDEOGRAPH
+ {0xBC8E, 0x7D1F}, //9882 #CJK UNIFIED IDEOGRAPH
+ {0xBC8F, 0x7D21}, //9883 #CJK UNIFIED IDEOGRAPH
+ {0xBC90, 0x7D23}, //9884 #CJK UNIFIED IDEOGRAPH
+ {0xBC91, 0x7D24}, //9885 #CJK UNIFIED IDEOGRAPH
+ {0xBC92, 0x7D25}, //9886 #CJK UNIFIED IDEOGRAPH
+ {0xBC93, 0x7D26}, //9887 #CJK UNIFIED IDEOGRAPH
+ {0xBC94, 0x7D28}, //9888 #CJK UNIFIED IDEOGRAPH
+ {0xBC95, 0x7D29}, //9889 #CJK UNIFIED IDEOGRAPH
+ {0xBC96, 0x7D2A}, //9890 #CJK UNIFIED IDEOGRAPH
+ {0xBC97, 0x7D2C}, //9891 #CJK UNIFIED IDEOGRAPH
+ {0xBC98, 0x7D2D}, //9892 #CJK UNIFIED IDEOGRAPH
+ {0xBC99, 0x7D2E}, //9893 #CJK UNIFIED IDEOGRAPH
+ {0xBC9A, 0x7D30}, //9894 #CJK UNIFIED IDEOGRAPH
+ {0xBC9B, 0x7D31}, //9895 #CJK UNIFIED IDEOGRAPH
+ {0xBC9C, 0x7D32}, //9896 #CJK UNIFIED IDEOGRAPH
+ {0xBC9D, 0x7D33}, //9897 #CJK UNIFIED IDEOGRAPH
+ {0xBC9E, 0x7D34}, //9898 #CJK UNIFIED IDEOGRAPH
+ {0xBC9F, 0x7D35}, //9899 #CJK UNIFIED IDEOGRAPH
+ {0xBCA0, 0x7D36}, //9900 #CJK UNIFIED IDEOGRAPH
+ {0xBCA1, 0x808C}, //9901 #CJK UNIFIED IDEOGRAPH
+ {0xBCA2, 0x9965}, //9902 #CJK UNIFIED IDEOGRAPH
+ {0xBCA3, 0x8FF9}, //9903 #CJK UNIFIED IDEOGRAPH
+ {0xBCA4, 0x6FC0}, //9904 #CJK UNIFIED IDEOGRAPH
+ {0xBCA5, 0x8BA5}, //9905 #CJK UNIFIED IDEOGRAPH
+ {0xBCA6, 0x9E21}, //9906 #CJK UNIFIED IDEOGRAPH
+ {0xBCA7, 0x59EC}, //9907 #CJK UNIFIED IDEOGRAPH
+ {0xBCA8, 0x7EE9}, //9908 #CJK UNIFIED IDEOGRAPH
+ {0xBCA9, 0x7F09}, //9909 #CJK UNIFIED IDEOGRAPH
+ {0xBCAA, 0x5409}, //9910 #CJK UNIFIED IDEOGRAPH
+ {0xBCAB, 0x6781}, //9911 #CJK UNIFIED IDEOGRAPH
+ {0xBCAC, 0x68D8}, //9912 #CJK UNIFIED IDEOGRAPH
+ {0xBCAD, 0x8F91}, //9913 #CJK UNIFIED IDEOGRAPH
+ {0xBCAE, 0x7C4D}, //9914 #CJK UNIFIED IDEOGRAPH
+ {0xBCAF, 0x96C6}, //9915 #CJK UNIFIED IDEOGRAPH
+ {0xBCB0, 0x53CA}, //9916 #CJK UNIFIED IDEOGRAPH
+ {0xBCB1, 0x6025}, //9917 #CJK UNIFIED IDEOGRAPH
+ {0xBCB2, 0x75BE}, //9918 #CJK UNIFIED IDEOGRAPH
+ {0xBCB3, 0x6C72}, //9919 #CJK UNIFIED IDEOGRAPH
+ {0xBCB4, 0x5373}, //9920 #CJK UNIFIED IDEOGRAPH
+ {0xBCB5, 0x5AC9}, //9921 #CJK UNIFIED IDEOGRAPH
+ {0xBCB6, 0x7EA7}, //9922 #CJK UNIFIED IDEOGRAPH
+ {0xBCB7, 0x6324}, //9923 #CJK UNIFIED IDEOGRAPH
+ {0xBCB8, 0x51E0}, //9924 #CJK UNIFIED IDEOGRAPH
+ {0xBCB9, 0x810A}, //9925 #CJK UNIFIED IDEOGRAPH
+ {0xBCBA, 0x5DF1}, //9926 #CJK UNIFIED IDEOGRAPH
+ {0xBCBB, 0x84DF}, //9927 #CJK UNIFIED IDEOGRAPH
+ {0xBCBC, 0x6280}, //9928 #CJK UNIFIED IDEOGRAPH
+ {0xBCBD, 0x5180}, //9929 #CJK UNIFIED IDEOGRAPH
+ {0xBCBE, 0x5B63}, //9930 #CJK UNIFIED IDEOGRAPH
+ {0xBCBF, 0x4F0E}, //9931 #CJK UNIFIED IDEOGRAPH
+ {0xBCC0, 0x796D}, //9932 #CJK UNIFIED IDEOGRAPH
+ {0xBCC1, 0x5242}, //9933 #CJK UNIFIED IDEOGRAPH
+ {0xBCC2, 0x60B8}, //9934 #CJK UNIFIED IDEOGRAPH
+ {0xBCC3, 0x6D4E}, //9935 #CJK UNIFIED IDEOGRAPH
+ {0xBCC4, 0x5BC4}, //9936 #CJK UNIFIED IDEOGRAPH
+ {0xBCC5, 0x5BC2}, //9937 #CJK UNIFIED IDEOGRAPH
+ {0xBCC6, 0x8BA1}, //9938 #CJK UNIFIED IDEOGRAPH
+ {0xBCC7, 0x8BB0}, //9939 #CJK UNIFIED IDEOGRAPH
+ {0xBCC8, 0x65E2}, //9940 #CJK UNIFIED IDEOGRAPH
+ {0xBCC9, 0x5FCC}, //9941 #CJK UNIFIED IDEOGRAPH
+ {0xBCCA, 0x9645}, //9942 #CJK UNIFIED IDEOGRAPH
+ {0xBCCB, 0x5993}, //9943 #CJK UNIFIED IDEOGRAPH
+ {0xBCCC, 0x7EE7}, //9944 #CJK UNIFIED IDEOGRAPH
+ {0xBCCD, 0x7EAA}, //9945 #CJK UNIFIED IDEOGRAPH
+ {0xBCCE, 0x5609}, //9946 #CJK UNIFIED IDEOGRAPH
+ {0xBCCF, 0x67B7}, //9947 #CJK UNIFIED IDEOGRAPH
+ {0xBCD0, 0x5939}, //9948 #CJK UNIFIED IDEOGRAPH
+ {0xBCD1, 0x4F73}, //9949 #CJK UNIFIED IDEOGRAPH
+ {0xBCD2, 0x5BB6}, //9950 #CJK UNIFIED IDEOGRAPH
+ {0xBCD3, 0x52A0}, //9951 #CJK UNIFIED IDEOGRAPH
+ {0xBCD4, 0x835A}, //9952 #CJK UNIFIED IDEOGRAPH
+ {0xBCD5, 0x988A}, //9953 #CJK UNIFIED IDEOGRAPH
+ {0xBCD6, 0x8D3E}, //9954 #CJK UNIFIED IDEOGRAPH
+ {0xBCD7, 0x7532}, //9955 #CJK UNIFIED IDEOGRAPH
+ {0xBCD8, 0x94BE}, //9956 #CJK UNIFIED IDEOGRAPH
+ {0xBCD9, 0x5047}, //9957 #CJK UNIFIED IDEOGRAPH
+ {0xBCDA, 0x7A3C}, //9958 #CJK UNIFIED IDEOGRAPH
+ {0xBCDB, 0x4EF7}, //9959 #CJK UNIFIED IDEOGRAPH
+ {0xBCDC, 0x67B6}, //9960 #CJK UNIFIED IDEOGRAPH
+ {0xBCDD, 0x9A7E}, //9961 #CJK UNIFIED IDEOGRAPH
+ {0xBCDE, 0x5AC1}, //9962 #CJK UNIFIED IDEOGRAPH
+ {0xBCDF, 0x6B7C}, //9963 #CJK UNIFIED IDEOGRAPH
+ {0xBCE0, 0x76D1}, //9964 #CJK UNIFIED IDEOGRAPH
+ {0xBCE1, 0x575A}, //9965 #CJK UNIFIED IDEOGRAPH
+ {0xBCE2, 0x5C16}, //9966 #CJK UNIFIED IDEOGRAPH
+ {0xBCE3, 0x7B3A}, //9967 #CJK UNIFIED IDEOGRAPH
+ {0xBCE4, 0x95F4}, //9968 #CJK UNIFIED IDEOGRAPH
+ {0xBCE5, 0x714E}, //9969 #CJK UNIFIED IDEOGRAPH
+ {0xBCE6, 0x517C}, //9970 #CJK UNIFIED IDEOGRAPH
+ {0xBCE7, 0x80A9}, //9971 #CJK UNIFIED IDEOGRAPH
+ {0xBCE8, 0x8270}, //9972 #CJK UNIFIED IDEOGRAPH
+ {0xBCE9, 0x5978}, //9973 #CJK UNIFIED IDEOGRAPH
+ {0xBCEA, 0x7F04}, //9974 #CJK UNIFIED IDEOGRAPH
+ {0xBCEB, 0x8327}, //9975 #CJK UNIFIED IDEOGRAPH
+ {0xBCEC, 0x68C0}, //9976 #CJK UNIFIED IDEOGRAPH
+ {0xBCED, 0x67EC}, //9977 #CJK UNIFIED IDEOGRAPH
+ {0xBCEE, 0x78B1}, //9978 #CJK UNIFIED IDEOGRAPH
+ {0xBCEF, 0x7877}, //9979 #CJK UNIFIED IDEOGRAPH
+ {0xBCF0, 0x62E3}, //9980 #CJK UNIFIED IDEOGRAPH
+ {0xBCF1, 0x6361}, //9981 #CJK UNIFIED IDEOGRAPH
+ {0xBCF2, 0x7B80}, //9982 #CJK UNIFIED IDEOGRAPH
+ {0xBCF3, 0x4FED}, //9983 #CJK UNIFIED IDEOGRAPH
+ {0xBCF4, 0x526A}, //9984 #CJK UNIFIED IDEOGRAPH
+ {0xBCF5, 0x51CF}, //9985 #CJK UNIFIED IDEOGRAPH
+ {0xBCF6, 0x8350}, //9986 #CJK UNIFIED IDEOGRAPH
+ {0xBCF7, 0x69DB}, //9987 #CJK UNIFIED IDEOGRAPH
+ {0xBCF8, 0x9274}, //9988 #CJK UNIFIED IDEOGRAPH
+ {0xBCF9, 0x8DF5}, //9989 #CJK UNIFIED IDEOGRAPH
+ {0xBCFA, 0x8D31}, //9990 #CJK UNIFIED IDEOGRAPH
+ {0xBCFB, 0x89C1}, //9991 #CJK UNIFIED IDEOGRAPH
+ {0xBCFC, 0x952E}, //9992 #CJK UNIFIED IDEOGRAPH
+ {0xBCFD, 0x7BAD}, //9993 #CJK UNIFIED IDEOGRAPH
+ {0xBCFE, 0x4EF6}, //9994 #CJK UNIFIED IDEOGRAPH
+ {0xBD40, 0x7D37}, //9995 #CJK UNIFIED IDEOGRAPH
+ {0xBD41, 0x7D38}, //9996 #CJK UNIFIED IDEOGRAPH
+ {0xBD42, 0x7D39}, //9997 #CJK UNIFIED IDEOGRAPH
+ {0xBD43, 0x7D3A}, //9998 #CJK UNIFIED IDEOGRAPH
+ {0xBD44, 0x7D3B}, //9999 #CJK UNIFIED IDEOGRAPH
+ {0xBD45, 0x7D3C}, //10000 #CJK UNIFIED IDEOGRAPH
+ {0xBD46, 0x7D3D}, //10001 #CJK UNIFIED IDEOGRAPH
+ {0xBD47, 0x7D3E}, //10002 #CJK UNIFIED IDEOGRAPH
+ {0xBD48, 0x7D3F}, //10003 #CJK UNIFIED IDEOGRAPH
+ {0xBD49, 0x7D40}, //10004 #CJK UNIFIED IDEOGRAPH
+ {0xBD4A, 0x7D41}, //10005 #CJK UNIFIED IDEOGRAPH
+ {0xBD4B, 0x7D42}, //10006 #CJK UNIFIED IDEOGRAPH
+ {0xBD4C, 0x7D43}, //10007 #CJK UNIFIED IDEOGRAPH
+ {0xBD4D, 0x7D44}, //10008 #CJK UNIFIED IDEOGRAPH
+ {0xBD4E, 0x7D45}, //10009 #CJK UNIFIED IDEOGRAPH
+ {0xBD4F, 0x7D46}, //10010 #CJK UNIFIED IDEOGRAPH
+ {0xBD50, 0x7D47}, //10011 #CJK UNIFIED IDEOGRAPH
+ {0xBD51, 0x7D48}, //10012 #CJK UNIFIED IDEOGRAPH
+ {0xBD52, 0x7D49}, //10013 #CJK UNIFIED IDEOGRAPH
+ {0xBD53, 0x7D4A}, //10014 #CJK UNIFIED IDEOGRAPH
+ {0xBD54, 0x7D4B}, //10015 #CJK UNIFIED IDEOGRAPH
+ {0xBD55, 0x7D4C}, //10016 #CJK UNIFIED IDEOGRAPH
+ {0xBD56, 0x7D4D}, //10017 #CJK UNIFIED IDEOGRAPH
+ {0xBD57, 0x7D4E}, //10018 #CJK UNIFIED IDEOGRAPH
+ {0xBD58, 0x7D4F}, //10019 #CJK UNIFIED IDEOGRAPH
+ {0xBD59, 0x7D50}, //10020 #CJK UNIFIED IDEOGRAPH
+ {0xBD5A, 0x7D51}, //10021 #CJK UNIFIED IDEOGRAPH
+ {0xBD5B, 0x7D52}, //10022 #CJK UNIFIED IDEOGRAPH
+ {0xBD5C, 0x7D53}, //10023 #CJK UNIFIED IDEOGRAPH
+ {0xBD5D, 0x7D54}, //10024 #CJK UNIFIED IDEOGRAPH
+ {0xBD5E, 0x7D55}, //10025 #CJK UNIFIED IDEOGRAPH
+ {0xBD5F, 0x7D56}, //10026 #CJK UNIFIED IDEOGRAPH
+ {0xBD60, 0x7D57}, //10027 #CJK UNIFIED IDEOGRAPH
+ {0xBD61, 0x7D58}, //10028 #CJK UNIFIED IDEOGRAPH
+ {0xBD62, 0x7D59}, //10029 #CJK UNIFIED IDEOGRAPH
+ {0xBD63, 0x7D5A}, //10030 #CJK UNIFIED IDEOGRAPH
+ {0xBD64, 0x7D5B}, //10031 #CJK UNIFIED IDEOGRAPH
+ {0xBD65, 0x7D5C}, //10032 #CJK UNIFIED IDEOGRAPH
+ {0xBD66, 0x7D5D}, //10033 #CJK UNIFIED IDEOGRAPH
+ {0xBD67, 0x7D5E}, //10034 #CJK UNIFIED IDEOGRAPH
+ {0xBD68, 0x7D5F}, //10035 #CJK UNIFIED IDEOGRAPH
+ {0xBD69, 0x7D60}, //10036 #CJK UNIFIED IDEOGRAPH
+ {0xBD6A, 0x7D61}, //10037 #CJK UNIFIED IDEOGRAPH
+ {0xBD6B, 0x7D62}, //10038 #CJK UNIFIED IDEOGRAPH
+ {0xBD6C, 0x7D63}, //10039 #CJK UNIFIED IDEOGRAPH
+ {0xBD6D, 0x7D64}, //10040 #CJK UNIFIED IDEOGRAPH
+ {0xBD6E, 0x7D65}, //10041 #CJK UNIFIED IDEOGRAPH
+ {0xBD6F, 0x7D66}, //10042 #CJK UNIFIED IDEOGRAPH
+ {0xBD70, 0x7D67}, //10043 #CJK UNIFIED IDEOGRAPH
+ {0xBD71, 0x7D68}, //10044 #CJK UNIFIED IDEOGRAPH
+ {0xBD72, 0x7D69}, //10045 #CJK UNIFIED IDEOGRAPH
+ {0xBD73, 0x7D6A}, //10046 #CJK UNIFIED IDEOGRAPH
+ {0xBD74, 0x7D6B}, //10047 #CJK UNIFIED IDEOGRAPH
+ {0xBD75, 0x7D6C}, //10048 #CJK UNIFIED IDEOGRAPH
+ {0xBD76, 0x7D6D}, //10049 #CJK UNIFIED IDEOGRAPH
+ {0xBD77, 0x7D6F}, //10050 #CJK UNIFIED IDEOGRAPH
+ {0xBD78, 0x7D70}, //10051 #CJK UNIFIED IDEOGRAPH
+ {0xBD79, 0x7D71}, //10052 #CJK UNIFIED IDEOGRAPH
+ {0xBD7A, 0x7D72}, //10053 #CJK UNIFIED IDEOGRAPH
+ {0xBD7B, 0x7D73}, //10054 #CJK UNIFIED IDEOGRAPH
+ {0xBD7C, 0x7D74}, //10055 #CJK UNIFIED IDEOGRAPH
+ {0xBD7D, 0x7D75}, //10056 #CJK UNIFIED IDEOGRAPH
+ {0xBD7E, 0x7D76}, //10057 #CJK UNIFIED IDEOGRAPH
+ {0xBD80, 0x7D78}, //10058 #CJK UNIFIED IDEOGRAPH
+ {0xBD81, 0x7D79}, //10059 #CJK UNIFIED IDEOGRAPH
+ {0xBD82, 0x7D7A}, //10060 #CJK UNIFIED IDEOGRAPH
+ {0xBD83, 0x7D7B}, //10061 #CJK UNIFIED IDEOGRAPH
+ {0xBD84, 0x7D7C}, //10062 #CJK UNIFIED IDEOGRAPH
+ {0xBD85, 0x7D7D}, //10063 #CJK UNIFIED IDEOGRAPH
+ {0xBD86, 0x7D7E}, //10064 #CJK UNIFIED IDEOGRAPH
+ {0xBD87, 0x7D7F}, //10065 #CJK UNIFIED IDEOGRAPH
+ {0xBD88, 0x7D80}, //10066 #CJK UNIFIED IDEOGRAPH
+ {0xBD89, 0x7D81}, //10067 #CJK UNIFIED IDEOGRAPH
+ {0xBD8A, 0x7D82}, //10068 #CJK UNIFIED IDEOGRAPH
+ {0xBD8B, 0x7D83}, //10069 #CJK UNIFIED IDEOGRAPH
+ {0xBD8C, 0x7D84}, //10070 #CJK UNIFIED IDEOGRAPH
+ {0xBD8D, 0x7D85}, //10071 #CJK UNIFIED IDEOGRAPH
+ {0xBD8E, 0x7D86}, //10072 #CJK UNIFIED IDEOGRAPH
+ {0xBD8F, 0x7D87}, //10073 #CJK UNIFIED IDEOGRAPH
+ {0xBD90, 0x7D88}, //10074 #CJK UNIFIED IDEOGRAPH
+ {0xBD91, 0x7D89}, //10075 #CJK UNIFIED IDEOGRAPH
+ {0xBD92, 0x7D8A}, //10076 #CJK UNIFIED IDEOGRAPH
+ {0xBD93, 0x7D8B}, //10077 #CJK UNIFIED IDEOGRAPH
+ {0xBD94, 0x7D8C}, //10078 #CJK UNIFIED IDEOGRAPH
+ {0xBD95, 0x7D8D}, //10079 #CJK UNIFIED IDEOGRAPH
+ {0xBD96, 0x7D8E}, //10080 #CJK UNIFIED IDEOGRAPH
+ {0xBD97, 0x7D8F}, //10081 #CJK UNIFIED IDEOGRAPH
+ {0xBD98, 0x7D90}, //10082 #CJK UNIFIED IDEOGRAPH
+ {0xBD99, 0x7D91}, //10083 #CJK UNIFIED IDEOGRAPH
+ {0xBD9A, 0x7D92}, //10084 #CJK UNIFIED IDEOGRAPH
+ {0xBD9B, 0x7D93}, //10085 #CJK UNIFIED IDEOGRAPH
+ {0xBD9C, 0x7D94}, //10086 #CJK UNIFIED IDEOGRAPH
+ {0xBD9D, 0x7D95}, //10087 #CJK UNIFIED IDEOGRAPH
+ {0xBD9E, 0x7D96}, //10088 #CJK UNIFIED IDEOGRAPH
+ {0xBD9F, 0x7D97}, //10089 #CJK UNIFIED IDEOGRAPH
+ {0xBDA0, 0x7D98}, //10090 #CJK UNIFIED IDEOGRAPH
+ {0xBDA1, 0x5065}, //10091 #CJK UNIFIED IDEOGRAPH
+ {0xBDA2, 0x8230}, //10092 #CJK UNIFIED IDEOGRAPH
+ {0xBDA3, 0x5251}, //10093 #CJK UNIFIED IDEOGRAPH
+ {0xBDA4, 0x996F}, //10094 #CJK UNIFIED IDEOGRAPH
+ {0xBDA5, 0x6E10}, //10095 #CJK UNIFIED IDEOGRAPH
+ {0xBDA6, 0x6E85}, //10096 #CJK UNIFIED IDEOGRAPH
+ {0xBDA7, 0x6DA7}, //10097 #CJK UNIFIED IDEOGRAPH
+ {0xBDA8, 0x5EFA}, //10098 #CJK UNIFIED IDEOGRAPH
+ {0xBDA9, 0x50F5}, //10099 #CJK UNIFIED IDEOGRAPH
+ {0xBDAA, 0x59DC}, //10100 #CJK UNIFIED IDEOGRAPH
+ {0xBDAB, 0x5C06}, //10101 #CJK UNIFIED IDEOGRAPH
+ {0xBDAC, 0x6D46}, //10102 #CJK UNIFIED IDEOGRAPH
+ {0xBDAD, 0x6C5F}, //10103 #CJK UNIFIED IDEOGRAPH
+ {0xBDAE, 0x7586}, //10104 #CJK UNIFIED IDEOGRAPH
+ {0xBDAF, 0x848B}, //10105 #CJK UNIFIED IDEOGRAPH
+ {0xBDB0, 0x6868}, //10106 #CJK UNIFIED IDEOGRAPH
+ {0xBDB1, 0x5956}, //10107 #CJK UNIFIED IDEOGRAPH
+ {0xBDB2, 0x8BB2}, //10108 #CJK UNIFIED IDEOGRAPH
+ {0xBDB3, 0x5320}, //10109 #CJK UNIFIED IDEOGRAPH
+ {0xBDB4, 0x9171}, //10110 #CJK UNIFIED IDEOGRAPH
+ {0xBDB5, 0x964D}, //10111 #CJK UNIFIED IDEOGRAPH
+ {0xBDB6, 0x8549}, //10112 #CJK UNIFIED IDEOGRAPH
+ {0xBDB7, 0x6912}, //10113 #CJK UNIFIED IDEOGRAPH
+ {0xBDB8, 0x7901}, //10114 #CJK UNIFIED IDEOGRAPH
+ {0xBDB9, 0x7126}, //10115 #CJK UNIFIED IDEOGRAPH
+ {0xBDBA, 0x80F6}, //10116 #CJK UNIFIED IDEOGRAPH
+ {0xBDBB, 0x4EA4}, //10117 #CJK UNIFIED IDEOGRAPH
+ {0xBDBC, 0x90CA}, //10118 #CJK UNIFIED IDEOGRAPH
+ {0xBDBD, 0x6D47}, //10119 #CJK UNIFIED IDEOGRAPH
+ {0xBDBE, 0x9A84}, //10120 #CJK UNIFIED IDEOGRAPH
+ {0xBDBF, 0x5A07}, //10121 #CJK UNIFIED IDEOGRAPH
+ {0xBDC0, 0x56BC}, //10122 #CJK UNIFIED IDEOGRAPH
+ {0xBDC1, 0x6405}, //10123 #CJK UNIFIED IDEOGRAPH
+ {0xBDC2, 0x94F0}, //10124 #CJK UNIFIED IDEOGRAPH
+ {0xBDC3, 0x77EB}, //10125 #CJK UNIFIED IDEOGRAPH
+ {0xBDC4, 0x4FA5}, //10126 #CJK UNIFIED IDEOGRAPH
+ {0xBDC5, 0x811A}, //10127 #CJK UNIFIED IDEOGRAPH
+ {0xBDC6, 0x72E1}, //10128 #CJK UNIFIED IDEOGRAPH
+ {0xBDC7, 0x89D2}, //10129 #CJK UNIFIED IDEOGRAPH
+ {0xBDC8, 0x997A}, //10130 #CJK UNIFIED IDEOGRAPH
+ {0xBDC9, 0x7F34}, //10131 #CJK UNIFIED IDEOGRAPH
+ {0xBDCA, 0x7EDE}, //10132 #CJK UNIFIED IDEOGRAPH
+ {0xBDCB, 0x527F}, //10133 #CJK UNIFIED IDEOGRAPH
+ {0xBDCC, 0x6559}, //10134 #CJK UNIFIED IDEOGRAPH
+ {0xBDCD, 0x9175}, //10135 #CJK UNIFIED IDEOGRAPH
+ {0xBDCE, 0x8F7F}, //10136 #CJK UNIFIED IDEOGRAPH
+ {0xBDCF, 0x8F83}, //10137 #CJK UNIFIED IDEOGRAPH
+ {0xBDD0, 0x53EB}, //10138 #CJK UNIFIED IDEOGRAPH
+ {0xBDD1, 0x7A96}, //10139 #CJK UNIFIED IDEOGRAPH
+ {0xBDD2, 0x63ED}, //10140 #CJK UNIFIED IDEOGRAPH
+ {0xBDD3, 0x63A5}, //10141 #CJK UNIFIED IDEOGRAPH
+ {0xBDD4, 0x7686}, //10142 #CJK UNIFIED IDEOGRAPH
+ {0xBDD5, 0x79F8}, //10143 #CJK UNIFIED IDEOGRAPH
+ {0xBDD6, 0x8857}, //10144 #CJK UNIFIED IDEOGRAPH
+ {0xBDD7, 0x9636}, //10145 #CJK UNIFIED IDEOGRAPH
+ {0xBDD8, 0x622A}, //10146 #CJK UNIFIED IDEOGRAPH
+ {0xBDD9, 0x52AB}, //10147 #CJK UNIFIED IDEOGRAPH
+ {0xBDDA, 0x8282}, //10148 #CJK UNIFIED IDEOGRAPH
+ {0xBDDB, 0x6854}, //10149 #CJK UNIFIED IDEOGRAPH
+ {0xBDDC, 0x6770}, //10150 #CJK UNIFIED IDEOGRAPH
+ {0xBDDD, 0x6377}, //10151 #CJK UNIFIED IDEOGRAPH
+ {0xBDDE, 0x776B}, //10152 #CJK UNIFIED IDEOGRAPH
+ {0xBDDF, 0x7AED}, //10153 #CJK UNIFIED IDEOGRAPH
+ {0xBDE0, 0x6D01}, //10154 #CJK UNIFIED IDEOGRAPH
+ {0xBDE1, 0x7ED3}, //10155 #CJK UNIFIED IDEOGRAPH
+ {0xBDE2, 0x89E3}, //10156 #CJK UNIFIED IDEOGRAPH
+ {0xBDE3, 0x59D0}, //10157 #CJK UNIFIED IDEOGRAPH
+ {0xBDE4, 0x6212}, //10158 #CJK UNIFIED IDEOGRAPH
+ {0xBDE5, 0x85C9}, //10159 #CJK UNIFIED IDEOGRAPH
+ {0xBDE6, 0x82A5}, //10160 #CJK UNIFIED IDEOGRAPH
+ {0xBDE7, 0x754C}, //10161 #CJK UNIFIED IDEOGRAPH
+ {0xBDE8, 0x501F}, //10162 #CJK UNIFIED IDEOGRAPH
+ {0xBDE9, 0x4ECB}, //10163 #CJK UNIFIED IDEOGRAPH
+ {0xBDEA, 0x75A5}, //10164 #CJK UNIFIED IDEOGRAPH
+ {0xBDEB, 0x8BEB}, //10165 #CJK UNIFIED IDEOGRAPH
+ {0xBDEC, 0x5C4A}, //10166 #CJK UNIFIED IDEOGRAPH
+ {0xBDED, 0x5DFE}, //10167 #CJK UNIFIED IDEOGRAPH
+ {0xBDEE, 0x7B4B}, //10168 #CJK UNIFIED IDEOGRAPH
+ {0xBDEF, 0x65A4}, //10169 #CJK UNIFIED IDEOGRAPH
+ {0xBDF0, 0x91D1}, //10170 #CJK UNIFIED IDEOGRAPH
+ {0xBDF1, 0x4ECA}, //10171 #CJK UNIFIED IDEOGRAPH
+ {0xBDF2, 0x6D25}, //10172 #CJK UNIFIED IDEOGRAPH
+ {0xBDF3, 0x895F}, //10173 #CJK UNIFIED IDEOGRAPH
+ {0xBDF4, 0x7D27}, //10174 #CJK UNIFIED IDEOGRAPH
+ {0xBDF5, 0x9526}, //10175 #CJK UNIFIED IDEOGRAPH
+ {0xBDF6, 0x4EC5}, //10176 #CJK UNIFIED IDEOGRAPH
+ {0xBDF7, 0x8C28}, //10177 #CJK UNIFIED IDEOGRAPH
+ {0xBDF8, 0x8FDB}, //10178 #CJK UNIFIED IDEOGRAPH
+ {0xBDF9, 0x9773}, //10179 #CJK UNIFIED IDEOGRAPH
+ {0xBDFA, 0x664B}, //10180 #CJK UNIFIED IDEOGRAPH
+ {0xBDFB, 0x7981}, //10181 #CJK UNIFIED IDEOGRAPH
+ {0xBDFC, 0x8FD1}, //10182 #CJK UNIFIED IDEOGRAPH
+ {0xBDFD, 0x70EC}, //10183 #CJK UNIFIED IDEOGRAPH
+ {0xBDFE, 0x6D78}, //10184 #CJK UNIFIED IDEOGRAPH
+ {0xBE40, 0x7D99}, //10185 #CJK UNIFIED IDEOGRAPH
+ {0xBE41, 0x7D9A}, //10186 #CJK UNIFIED IDEOGRAPH
+ {0xBE42, 0x7D9B}, //10187 #CJK UNIFIED IDEOGRAPH
+ {0xBE43, 0x7D9C}, //10188 #CJK UNIFIED IDEOGRAPH
+ {0xBE44, 0x7D9D}, //10189 #CJK UNIFIED IDEOGRAPH
+ {0xBE45, 0x7D9E}, //10190 #CJK UNIFIED IDEOGRAPH
+ {0xBE46, 0x7D9F}, //10191 #CJK UNIFIED IDEOGRAPH
+ {0xBE47, 0x7DA0}, //10192 #CJK UNIFIED IDEOGRAPH
+ {0xBE48, 0x7DA1}, //10193 #CJK UNIFIED IDEOGRAPH
+ {0xBE49, 0x7DA2}, //10194 #CJK UNIFIED IDEOGRAPH
+ {0xBE4A, 0x7DA3}, //10195 #CJK UNIFIED IDEOGRAPH
+ {0xBE4B, 0x7DA4}, //10196 #CJK UNIFIED IDEOGRAPH
+ {0xBE4C, 0x7DA5}, //10197 #CJK UNIFIED IDEOGRAPH
+ {0xBE4D, 0x7DA7}, //10198 #CJK UNIFIED IDEOGRAPH
+ {0xBE4E, 0x7DA8}, //10199 #CJK UNIFIED IDEOGRAPH
+ {0xBE4F, 0x7DA9}, //10200 #CJK UNIFIED IDEOGRAPH
+ {0xBE50, 0x7DAA}, //10201 #CJK UNIFIED IDEOGRAPH
+ {0xBE51, 0x7DAB}, //10202 #CJK UNIFIED IDEOGRAPH
+ {0xBE52, 0x7DAC}, //10203 #CJK UNIFIED IDEOGRAPH
+ {0xBE53, 0x7DAD}, //10204 #CJK UNIFIED IDEOGRAPH
+ {0xBE54, 0x7DAF}, //10205 #CJK UNIFIED IDEOGRAPH
+ {0xBE55, 0x7DB0}, //10206 #CJK UNIFIED IDEOGRAPH
+ {0xBE56, 0x7DB1}, //10207 #CJK UNIFIED IDEOGRAPH
+ {0xBE57, 0x7DB2}, //10208 #CJK UNIFIED IDEOGRAPH
+ {0xBE58, 0x7DB3}, //10209 #CJK UNIFIED IDEOGRAPH
+ {0xBE59, 0x7DB4}, //10210 #CJK UNIFIED IDEOGRAPH
+ {0xBE5A, 0x7DB5}, //10211 #CJK UNIFIED IDEOGRAPH
+ {0xBE5B, 0x7DB6}, //10212 #CJK UNIFIED IDEOGRAPH
+ {0xBE5C, 0x7DB7}, //10213 #CJK UNIFIED IDEOGRAPH
+ {0xBE5D, 0x7DB8}, //10214 #CJK UNIFIED IDEOGRAPH
+ {0xBE5E, 0x7DB9}, //10215 #CJK UNIFIED IDEOGRAPH
+ {0xBE5F, 0x7DBA}, //10216 #CJK UNIFIED IDEOGRAPH
+ {0xBE60, 0x7DBB}, //10217 #CJK UNIFIED IDEOGRAPH
+ {0xBE61, 0x7DBC}, //10218 #CJK UNIFIED IDEOGRAPH
+ {0xBE62, 0x7DBD}, //10219 #CJK UNIFIED IDEOGRAPH
+ {0xBE63, 0x7DBE}, //10220 #CJK UNIFIED IDEOGRAPH
+ {0xBE64, 0x7DBF}, //10221 #CJK UNIFIED IDEOGRAPH
+ {0xBE65, 0x7DC0}, //10222 #CJK UNIFIED IDEOGRAPH
+ {0xBE66, 0x7DC1}, //10223 #CJK UNIFIED IDEOGRAPH
+ {0xBE67, 0x7DC2}, //10224 #CJK UNIFIED IDEOGRAPH
+ {0xBE68, 0x7DC3}, //10225 #CJK UNIFIED IDEOGRAPH
+ {0xBE69, 0x7DC4}, //10226 #CJK UNIFIED IDEOGRAPH
+ {0xBE6A, 0x7DC5}, //10227 #CJK UNIFIED IDEOGRAPH
+ {0xBE6B, 0x7DC6}, //10228 #CJK UNIFIED IDEOGRAPH
+ {0xBE6C, 0x7DC7}, //10229 #CJK UNIFIED IDEOGRAPH
+ {0xBE6D, 0x7DC8}, //10230 #CJK UNIFIED IDEOGRAPH
+ {0xBE6E, 0x7DC9}, //10231 #CJK UNIFIED IDEOGRAPH
+ {0xBE6F, 0x7DCA}, //10232 #CJK UNIFIED IDEOGRAPH
+ {0xBE70, 0x7DCB}, //10233 #CJK UNIFIED IDEOGRAPH
+ {0xBE71, 0x7DCC}, //10234 #CJK UNIFIED IDEOGRAPH
+ {0xBE72, 0x7DCD}, //10235 #CJK UNIFIED IDEOGRAPH
+ {0xBE73, 0x7DCE}, //10236 #CJK UNIFIED IDEOGRAPH
+ {0xBE74, 0x7DCF}, //10237 #CJK UNIFIED IDEOGRAPH
+ {0xBE75, 0x7DD0}, //10238 #CJK UNIFIED IDEOGRAPH
+ {0xBE76, 0x7DD1}, //10239 #CJK UNIFIED IDEOGRAPH
+ {0xBE77, 0x7DD2}, //10240 #CJK UNIFIED IDEOGRAPH
+ {0xBE78, 0x7DD3}, //10241 #CJK UNIFIED IDEOGRAPH
+ {0xBE79, 0x7DD4}, //10242 #CJK UNIFIED IDEOGRAPH
+ {0xBE7A, 0x7DD5}, //10243 #CJK UNIFIED IDEOGRAPH
+ {0xBE7B, 0x7DD6}, //10244 #CJK UNIFIED IDEOGRAPH
+ {0xBE7C, 0x7DD7}, //10245 #CJK UNIFIED IDEOGRAPH
+ {0xBE7D, 0x7DD8}, //10246 #CJK UNIFIED IDEOGRAPH
+ {0xBE7E, 0x7DD9}, //10247 #CJK UNIFIED IDEOGRAPH
+ {0xBE80, 0x7DDA}, //10248 #CJK UNIFIED IDEOGRAPH
+ {0xBE81, 0x7DDB}, //10249 #CJK UNIFIED IDEOGRAPH
+ {0xBE82, 0x7DDC}, //10250 #CJK UNIFIED IDEOGRAPH
+ {0xBE83, 0x7DDD}, //10251 #CJK UNIFIED IDEOGRAPH
+ {0xBE84, 0x7DDE}, //10252 #CJK UNIFIED IDEOGRAPH
+ {0xBE85, 0x7DDF}, //10253 #CJK UNIFIED IDEOGRAPH
+ {0xBE86, 0x7DE0}, //10254 #CJK UNIFIED IDEOGRAPH
+ {0xBE87, 0x7DE1}, //10255 #CJK UNIFIED IDEOGRAPH
+ {0xBE88, 0x7DE2}, //10256 #CJK UNIFIED IDEOGRAPH
+ {0xBE89, 0x7DE3}, //10257 #CJK UNIFIED IDEOGRAPH
+ {0xBE8A, 0x7DE4}, //10258 #CJK UNIFIED IDEOGRAPH
+ {0xBE8B, 0x7DE5}, //10259 #CJK UNIFIED IDEOGRAPH
+ {0xBE8C, 0x7DE6}, //10260 #CJK UNIFIED IDEOGRAPH
+ {0xBE8D, 0x7DE7}, //10261 #CJK UNIFIED IDEOGRAPH
+ {0xBE8E, 0x7DE8}, //10262 #CJK UNIFIED IDEOGRAPH
+ {0xBE8F, 0x7DE9}, //10263 #CJK UNIFIED IDEOGRAPH
+ {0xBE90, 0x7DEA}, //10264 #CJK UNIFIED IDEOGRAPH
+ {0xBE91, 0x7DEB}, //10265 #CJK UNIFIED IDEOGRAPH
+ {0xBE92, 0x7DEC}, //10266 #CJK UNIFIED IDEOGRAPH
+ {0xBE93, 0x7DED}, //10267 #CJK UNIFIED IDEOGRAPH
+ {0xBE94, 0x7DEE}, //10268 #CJK UNIFIED IDEOGRAPH
+ {0xBE95, 0x7DEF}, //10269 #CJK UNIFIED IDEOGRAPH
+ {0xBE96, 0x7DF0}, //10270 #CJK UNIFIED IDEOGRAPH
+ {0xBE97, 0x7DF1}, //10271 #CJK UNIFIED IDEOGRAPH
+ {0xBE98, 0x7DF2}, //10272 #CJK UNIFIED IDEOGRAPH
+ {0xBE99, 0x7DF3}, //10273 #CJK UNIFIED IDEOGRAPH
+ {0xBE9A, 0x7DF4}, //10274 #CJK UNIFIED IDEOGRAPH
+ {0xBE9B, 0x7DF5}, //10275 #CJK UNIFIED IDEOGRAPH
+ {0xBE9C, 0x7DF6}, //10276 #CJK UNIFIED IDEOGRAPH
+ {0xBE9D, 0x7DF7}, //10277 #CJK UNIFIED IDEOGRAPH
+ {0xBE9E, 0x7DF8}, //10278 #CJK UNIFIED IDEOGRAPH
+ {0xBE9F, 0x7DF9}, //10279 #CJK UNIFIED IDEOGRAPH
+ {0xBEA0, 0x7DFA}, //10280 #CJK UNIFIED IDEOGRAPH
+ {0xBEA1, 0x5C3D}, //10281 #CJK UNIFIED IDEOGRAPH
+ {0xBEA2, 0x52B2}, //10282 #CJK UNIFIED IDEOGRAPH
+ {0xBEA3, 0x8346}, //10283 #CJK UNIFIED IDEOGRAPH
+ {0xBEA4, 0x5162}, //10284 #CJK UNIFIED IDEOGRAPH
+ {0xBEA5, 0x830E}, //10285 #CJK UNIFIED IDEOGRAPH
+ {0xBEA6, 0x775B}, //10286 #CJK UNIFIED IDEOGRAPH
+ {0xBEA7, 0x6676}, //10287 #CJK UNIFIED IDEOGRAPH
+ {0xBEA8, 0x9CB8}, //10288 #CJK UNIFIED IDEOGRAPH
+ {0xBEA9, 0x4EAC}, //10289 #CJK UNIFIED IDEOGRAPH
+ {0xBEAA, 0x60CA}, //10290 #CJK UNIFIED IDEOGRAPH
+ {0xBEAB, 0x7CBE}, //10291 #CJK UNIFIED IDEOGRAPH
+ {0xBEAC, 0x7CB3}, //10292 #CJK UNIFIED IDEOGRAPH
+ {0xBEAD, 0x7ECF}, //10293 #CJK UNIFIED IDEOGRAPH
+ {0xBEAE, 0x4E95}, //10294 #CJK UNIFIED IDEOGRAPH
+ {0xBEAF, 0x8B66}, //10295 #CJK UNIFIED IDEOGRAPH
+ {0xBEB0, 0x666F}, //10296 #CJK UNIFIED IDEOGRAPH
+ {0xBEB1, 0x9888}, //10297 #CJK UNIFIED IDEOGRAPH
+ {0xBEB2, 0x9759}, //10298 #CJK UNIFIED IDEOGRAPH
+ {0xBEB3, 0x5883}, //10299 #CJK UNIFIED IDEOGRAPH
+ {0xBEB4, 0x656C}, //10300 #CJK UNIFIED IDEOGRAPH
+ {0xBEB5, 0x955C}, //10301 #CJK UNIFIED IDEOGRAPH
+ {0xBEB6, 0x5F84}, //10302 #CJK UNIFIED IDEOGRAPH
+ {0xBEB7, 0x75C9}, //10303 #CJK UNIFIED IDEOGRAPH
+ {0xBEB8, 0x9756}, //10304 #CJK UNIFIED IDEOGRAPH
+ {0xBEB9, 0x7ADF}, //10305 #CJK UNIFIED IDEOGRAPH
+ {0xBEBA, 0x7ADE}, //10306 #CJK UNIFIED IDEOGRAPH
+ {0xBEBB, 0x51C0}, //10307 #CJK UNIFIED IDEOGRAPH
+ {0xBEBC, 0x70AF}, //10308 #CJK UNIFIED IDEOGRAPH
+ {0xBEBD, 0x7A98}, //10309 #CJK UNIFIED IDEOGRAPH
+ {0xBEBE, 0x63EA}, //10310 #CJK UNIFIED IDEOGRAPH
+ {0xBEBF, 0x7A76}, //10311 #CJK UNIFIED IDEOGRAPH
+ {0xBEC0, 0x7EA0}, //10312 #CJK UNIFIED IDEOGRAPH
+ {0xBEC1, 0x7396}, //10313 #CJK UNIFIED IDEOGRAPH
+ {0xBEC2, 0x97ED}, //10314 #CJK UNIFIED IDEOGRAPH
+ {0xBEC3, 0x4E45}, //10315 #CJK UNIFIED IDEOGRAPH
+ {0xBEC4, 0x7078}, //10316 #CJK UNIFIED IDEOGRAPH
+ {0xBEC5, 0x4E5D}, //10317 #CJK UNIFIED IDEOGRAPH
+ {0xBEC6, 0x9152}, //10318 #CJK UNIFIED IDEOGRAPH
+ {0xBEC7, 0x53A9}, //10319 #CJK UNIFIED IDEOGRAPH
+ {0xBEC8, 0x6551}, //10320 #CJK UNIFIED IDEOGRAPH
+ {0xBEC9, 0x65E7}, //10321 #CJK UNIFIED IDEOGRAPH
+ {0xBECA, 0x81FC}, //10322 #CJK UNIFIED IDEOGRAPH
+ {0xBECB, 0x8205}, //10323 #CJK UNIFIED IDEOGRAPH
+ {0xBECC, 0x548E}, //10324 #CJK UNIFIED IDEOGRAPH
+ {0xBECD, 0x5C31}, //10325 #CJK UNIFIED IDEOGRAPH
+ {0xBECE, 0x759A}, //10326 #CJK UNIFIED IDEOGRAPH
+ {0xBECF, 0x97A0}, //10327 #CJK UNIFIED IDEOGRAPH
+ {0xBED0, 0x62D8}, //10328 #CJK UNIFIED IDEOGRAPH
+ {0xBED1, 0x72D9}, //10329 #CJK UNIFIED IDEOGRAPH
+ {0xBED2, 0x75BD}, //10330 #CJK UNIFIED IDEOGRAPH
+ {0xBED3, 0x5C45}, //10331 #CJK UNIFIED IDEOGRAPH
+ {0xBED4, 0x9A79}, //10332 #CJK UNIFIED IDEOGRAPH
+ {0xBED5, 0x83CA}, //10333 #CJK UNIFIED IDEOGRAPH
+ {0xBED6, 0x5C40}, //10334 #CJK UNIFIED IDEOGRAPH
+ {0xBED7, 0x5480}, //10335 #CJK UNIFIED IDEOGRAPH
+ {0xBED8, 0x77E9}, //10336 #CJK UNIFIED IDEOGRAPH
+ {0xBED9, 0x4E3E}, //10337 #CJK UNIFIED IDEOGRAPH
+ {0xBEDA, 0x6CAE}, //10338 #CJK UNIFIED IDEOGRAPH
+ {0xBEDB, 0x805A}, //10339 #CJK UNIFIED IDEOGRAPH
+ {0xBEDC, 0x62D2}, //10340 #CJK UNIFIED IDEOGRAPH
+ {0xBEDD, 0x636E}, //10341 #CJK UNIFIED IDEOGRAPH
+ {0xBEDE, 0x5DE8}, //10342 #CJK UNIFIED IDEOGRAPH
+ {0xBEDF, 0x5177}, //10343 #CJK UNIFIED IDEOGRAPH
+ {0xBEE0, 0x8DDD}, //10344 #CJK UNIFIED IDEOGRAPH
+ {0xBEE1, 0x8E1E}, //10345 #CJK UNIFIED IDEOGRAPH
+ {0xBEE2, 0x952F}, //10346 #CJK UNIFIED IDEOGRAPH
+ {0xBEE3, 0x4FF1}, //10347 #CJK UNIFIED IDEOGRAPH
+ {0xBEE4, 0x53E5}, //10348 #CJK UNIFIED IDEOGRAPH
+ {0xBEE5, 0x60E7}, //10349 #CJK UNIFIED IDEOGRAPH
+ {0xBEE6, 0x70AC}, //10350 #CJK UNIFIED IDEOGRAPH
+ {0xBEE7, 0x5267}, //10351 #CJK UNIFIED IDEOGRAPH
+ {0xBEE8, 0x6350}, //10352 #CJK UNIFIED IDEOGRAPH
+ {0xBEE9, 0x9E43}, //10353 #CJK UNIFIED IDEOGRAPH
+ {0xBEEA, 0x5A1F}, //10354 #CJK UNIFIED IDEOGRAPH
+ {0xBEEB, 0x5026}, //10355 #CJK UNIFIED IDEOGRAPH
+ {0xBEEC, 0x7737}, //10356 #CJK UNIFIED IDEOGRAPH
+ {0xBEED, 0x5377}, //10357 #CJK UNIFIED IDEOGRAPH
+ {0xBEEE, 0x7EE2}, //10358 #CJK UNIFIED IDEOGRAPH
+ {0xBEEF, 0x6485}, //10359 #CJK UNIFIED IDEOGRAPH
+ {0xBEF0, 0x652B}, //10360 #CJK UNIFIED IDEOGRAPH
+ {0xBEF1, 0x6289}, //10361 #CJK UNIFIED IDEOGRAPH
+ {0xBEF2, 0x6398}, //10362 #CJK UNIFIED IDEOGRAPH
+ {0xBEF3, 0x5014}, //10363 #CJK UNIFIED IDEOGRAPH
+ {0xBEF4, 0x7235}, //10364 #CJK UNIFIED IDEOGRAPH
+ {0xBEF5, 0x89C9}, //10365 #CJK UNIFIED IDEOGRAPH
+ {0xBEF6, 0x51B3}, //10366 #CJK UNIFIED IDEOGRAPH
+ {0xBEF7, 0x8BC0}, //10367 #CJK UNIFIED IDEOGRAPH
+ {0xBEF8, 0x7EDD}, //10368 #CJK UNIFIED IDEOGRAPH
+ {0xBEF9, 0x5747}, //10369 #CJK UNIFIED IDEOGRAPH
+ {0xBEFA, 0x83CC}, //10370 #CJK UNIFIED IDEOGRAPH
+ {0xBEFB, 0x94A7}, //10371 #CJK UNIFIED IDEOGRAPH
+ {0xBEFC, 0x519B}, //10372 #CJK UNIFIED IDEOGRAPH
+ {0xBEFD, 0x541B}, //10373 #CJK UNIFIED IDEOGRAPH
+ {0xBEFE, 0x5CFB}, //10374 #CJK UNIFIED IDEOGRAPH
+ {0xBF40, 0x7DFB}, //10375 #CJK UNIFIED IDEOGRAPH
+ {0xBF41, 0x7DFC}, //10376 #CJK UNIFIED IDEOGRAPH
+ {0xBF42, 0x7DFD}, //10377 #CJK UNIFIED IDEOGRAPH
+ {0xBF43, 0x7DFE}, //10378 #CJK UNIFIED IDEOGRAPH
+ {0xBF44, 0x7DFF}, //10379 #CJK UNIFIED IDEOGRAPH
+ {0xBF45, 0x7E00}, //10380 #CJK UNIFIED IDEOGRAPH
+ {0xBF46, 0x7E01}, //10381 #CJK UNIFIED IDEOGRAPH
+ {0xBF47, 0x7E02}, //10382 #CJK UNIFIED IDEOGRAPH
+ {0xBF48, 0x7E03}, //10383 #CJK UNIFIED IDEOGRAPH
+ {0xBF49, 0x7E04}, //10384 #CJK UNIFIED IDEOGRAPH
+ {0xBF4A, 0x7E05}, //10385 #CJK UNIFIED IDEOGRAPH
+ {0xBF4B, 0x7E06}, //10386 #CJK UNIFIED IDEOGRAPH
+ {0xBF4C, 0x7E07}, //10387 #CJK UNIFIED IDEOGRAPH
+ {0xBF4D, 0x7E08}, //10388 #CJK UNIFIED IDEOGRAPH
+ {0xBF4E, 0x7E09}, //10389 #CJK UNIFIED IDEOGRAPH
+ {0xBF4F, 0x7E0A}, //10390 #CJK UNIFIED IDEOGRAPH
+ {0xBF50, 0x7E0B}, //10391 #CJK UNIFIED IDEOGRAPH
+ {0xBF51, 0x7E0C}, //10392 #CJK UNIFIED IDEOGRAPH
+ {0xBF52, 0x7E0D}, //10393 #CJK UNIFIED IDEOGRAPH
+ {0xBF53, 0x7E0E}, //10394 #CJK UNIFIED IDEOGRAPH
+ {0xBF54, 0x7E0F}, //10395 #CJK UNIFIED IDEOGRAPH
+ {0xBF55, 0x7E10}, //10396 #CJK UNIFIED IDEOGRAPH
+ {0xBF56, 0x7E11}, //10397 #CJK UNIFIED IDEOGRAPH
+ {0xBF57, 0x7E12}, //10398 #CJK UNIFIED IDEOGRAPH
+ {0xBF58, 0x7E13}, //10399 #CJK UNIFIED IDEOGRAPH
+ {0xBF59, 0x7E14}, //10400 #CJK UNIFIED IDEOGRAPH
+ {0xBF5A, 0x7E15}, //10401 #CJK UNIFIED IDEOGRAPH
+ {0xBF5B, 0x7E16}, //10402 #CJK UNIFIED IDEOGRAPH
+ {0xBF5C, 0x7E17}, //10403 #CJK UNIFIED IDEOGRAPH
+ {0xBF5D, 0x7E18}, //10404 #CJK UNIFIED IDEOGRAPH
+ {0xBF5E, 0x7E19}, //10405 #CJK UNIFIED IDEOGRAPH
+ {0xBF5F, 0x7E1A}, //10406 #CJK UNIFIED IDEOGRAPH
+ {0xBF60, 0x7E1B}, //10407 #CJK UNIFIED IDEOGRAPH
+ {0xBF61, 0x7E1C}, //10408 #CJK UNIFIED IDEOGRAPH
+ {0xBF62, 0x7E1D}, //10409 #CJK UNIFIED IDEOGRAPH
+ {0xBF63, 0x7E1E}, //10410 #CJK UNIFIED IDEOGRAPH
+ {0xBF64, 0x7E1F}, //10411 #CJK UNIFIED IDEOGRAPH
+ {0xBF65, 0x7E20}, //10412 #CJK UNIFIED IDEOGRAPH
+ {0xBF66, 0x7E21}, //10413 #CJK UNIFIED IDEOGRAPH
+ {0xBF67, 0x7E22}, //10414 #CJK UNIFIED IDEOGRAPH
+ {0xBF68, 0x7E23}, //10415 #CJK UNIFIED IDEOGRAPH
+ {0xBF69, 0x7E24}, //10416 #CJK UNIFIED IDEOGRAPH
+ {0xBF6A, 0x7E25}, //10417 #CJK UNIFIED IDEOGRAPH
+ {0xBF6B, 0x7E26}, //10418 #CJK UNIFIED IDEOGRAPH
+ {0xBF6C, 0x7E27}, //10419 #CJK UNIFIED IDEOGRAPH
+ {0xBF6D, 0x7E28}, //10420 #CJK UNIFIED IDEOGRAPH
+ {0xBF6E, 0x7E29}, //10421 #CJK UNIFIED IDEOGRAPH
+ {0xBF6F, 0x7E2A}, //10422 #CJK UNIFIED IDEOGRAPH
+ {0xBF70, 0x7E2B}, //10423 #CJK UNIFIED IDEOGRAPH
+ {0xBF71, 0x7E2C}, //10424 #CJK UNIFIED IDEOGRAPH
+ {0xBF72, 0x7E2D}, //10425 #CJK UNIFIED IDEOGRAPH
+ {0xBF73, 0x7E2E}, //10426 #CJK UNIFIED IDEOGRAPH
+ {0xBF74, 0x7E2F}, //10427 #CJK UNIFIED IDEOGRAPH
+ {0xBF75, 0x7E30}, //10428 #CJK UNIFIED IDEOGRAPH
+ {0xBF76, 0x7E31}, //10429 #CJK UNIFIED IDEOGRAPH
+ {0xBF77, 0x7E32}, //10430 #CJK UNIFIED IDEOGRAPH
+ {0xBF78, 0x7E33}, //10431 #CJK UNIFIED IDEOGRAPH
+ {0xBF79, 0x7E34}, //10432 #CJK UNIFIED IDEOGRAPH
+ {0xBF7A, 0x7E35}, //10433 #CJK UNIFIED IDEOGRAPH
+ {0xBF7B, 0x7E36}, //10434 #CJK UNIFIED IDEOGRAPH
+ {0xBF7C, 0x7E37}, //10435 #CJK UNIFIED IDEOGRAPH
+ {0xBF7D, 0x7E38}, //10436 #CJK UNIFIED IDEOGRAPH
+ {0xBF7E, 0x7E39}, //10437 #CJK UNIFIED IDEOGRAPH
+ {0xBF80, 0x7E3A}, //10438 #CJK UNIFIED IDEOGRAPH
+ {0xBF81, 0x7E3C}, //10439 #CJK UNIFIED IDEOGRAPH
+ {0xBF82, 0x7E3D}, //10440 #CJK UNIFIED IDEOGRAPH
+ {0xBF83, 0x7E3E}, //10441 #CJK UNIFIED IDEOGRAPH
+ {0xBF84, 0x7E3F}, //10442 #CJK UNIFIED IDEOGRAPH
+ {0xBF85, 0x7E40}, //10443 #CJK UNIFIED IDEOGRAPH
+ {0xBF86, 0x7E42}, //10444 #CJK UNIFIED IDEOGRAPH
+ {0xBF87, 0x7E43}, //10445 #CJK UNIFIED IDEOGRAPH
+ {0xBF88, 0x7E44}, //10446 #CJK UNIFIED IDEOGRAPH
+ {0xBF89, 0x7E45}, //10447 #CJK UNIFIED IDEOGRAPH
+ {0xBF8A, 0x7E46}, //10448 #CJK UNIFIED IDEOGRAPH
+ {0xBF8B, 0x7E48}, //10449 #CJK UNIFIED IDEOGRAPH
+ {0xBF8C, 0x7E49}, //10450 #CJK UNIFIED IDEOGRAPH
+ {0xBF8D, 0x7E4A}, //10451 #CJK UNIFIED IDEOGRAPH
+ {0xBF8E, 0x7E4B}, //10452 #CJK UNIFIED IDEOGRAPH
+ {0xBF8F, 0x7E4C}, //10453 #CJK UNIFIED IDEOGRAPH
+ {0xBF90, 0x7E4D}, //10454 #CJK UNIFIED IDEOGRAPH
+ {0xBF91, 0x7E4E}, //10455 #CJK UNIFIED IDEOGRAPH
+ {0xBF92, 0x7E4F}, //10456 #CJK UNIFIED IDEOGRAPH
+ {0xBF93, 0x7E50}, //10457 #CJK UNIFIED IDEOGRAPH
+ {0xBF94, 0x7E51}, //10458 #CJK UNIFIED IDEOGRAPH
+ {0xBF95, 0x7E52}, //10459 #CJK UNIFIED IDEOGRAPH
+ {0xBF96, 0x7E53}, //10460 #CJK UNIFIED IDEOGRAPH
+ {0xBF97, 0x7E54}, //10461 #CJK UNIFIED IDEOGRAPH
+ {0xBF98, 0x7E55}, //10462 #CJK UNIFIED IDEOGRAPH
+ {0xBF99, 0x7E56}, //10463 #CJK UNIFIED IDEOGRAPH
+ {0xBF9A, 0x7E57}, //10464 #CJK UNIFIED IDEOGRAPH
+ {0xBF9B, 0x7E58}, //10465 #CJK UNIFIED IDEOGRAPH
+ {0xBF9C, 0x7E59}, //10466 #CJK UNIFIED IDEOGRAPH
+ {0xBF9D, 0x7E5A}, //10467 #CJK UNIFIED IDEOGRAPH
+ {0xBF9E, 0x7E5B}, //10468 #CJK UNIFIED IDEOGRAPH
+ {0xBF9F, 0x7E5C}, //10469 #CJK UNIFIED IDEOGRAPH
+ {0xBFA0, 0x7E5D}, //10470 #CJK UNIFIED IDEOGRAPH
+ {0xBFA1, 0x4FCA}, //10471 #CJK UNIFIED IDEOGRAPH
+ {0xBFA2, 0x7AE3}, //10472 #CJK UNIFIED IDEOGRAPH
+ {0xBFA3, 0x6D5A}, //10473 #CJK UNIFIED IDEOGRAPH
+ {0xBFA4, 0x90E1}, //10474 #CJK UNIFIED IDEOGRAPH
+ {0xBFA5, 0x9A8F}, //10475 #CJK UNIFIED IDEOGRAPH
+ {0xBFA6, 0x5580}, //10476 #CJK UNIFIED IDEOGRAPH
+ {0xBFA7, 0x5496}, //10477 #CJK UNIFIED IDEOGRAPH
+ {0xBFA8, 0x5361}, //10478 #CJK UNIFIED IDEOGRAPH
+ {0xBFA9, 0x54AF}, //10479 #CJK UNIFIED IDEOGRAPH
+ {0xBFAA, 0x5F00}, //10480 #CJK UNIFIED IDEOGRAPH
+ {0xBFAB, 0x63E9}, //10481 #CJK UNIFIED IDEOGRAPH
+ {0xBFAC, 0x6977}, //10482 #CJK UNIFIED IDEOGRAPH
+ {0xBFAD, 0x51EF}, //10483 #CJK UNIFIED IDEOGRAPH
+ {0xBFAE, 0x6168}, //10484 #CJK UNIFIED IDEOGRAPH
+ {0xBFAF, 0x520A}, //10485 #CJK UNIFIED IDEOGRAPH
+ {0xBFB0, 0x582A}, //10486 #CJK UNIFIED IDEOGRAPH
+ {0xBFB1, 0x52D8}, //10487 #CJK UNIFIED IDEOGRAPH
+ {0xBFB2, 0x574E}, //10488 #CJK UNIFIED IDEOGRAPH
+ {0xBFB3, 0x780D}, //10489 #CJK UNIFIED IDEOGRAPH
+ {0xBFB4, 0x770B}, //10490 #CJK UNIFIED IDEOGRAPH
+ {0xBFB5, 0x5EB7}, //10491 #CJK UNIFIED IDEOGRAPH
+ {0xBFB6, 0x6177}, //10492 #CJK UNIFIED IDEOGRAPH
+ {0xBFB7, 0x7CE0}, //10493 #CJK UNIFIED IDEOGRAPH
+ {0xBFB8, 0x625B}, //10494 #CJK UNIFIED IDEOGRAPH
+ {0xBFB9, 0x6297}, //10495 #CJK UNIFIED IDEOGRAPH
+ {0xBFBA, 0x4EA2}, //10496 #CJK UNIFIED IDEOGRAPH
+ {0xBFBB, 0x7095}, //10497 #CJK UNIFIED IDEOGRAPH
+ {0xBFBC, 0x8003}, //10498 #CJK UNIFIED IDEOGRAPH
+ {0xBFBD, 0x62F7}, //10499 #CJK UNIFIED IDEOGRAPH
+ {0xBFBE, 0x70E4}, //10500 #CJK UNIFIED IDEOGRAPH
+ {0xBFBF, 0x9760}, //10501 #CJK UNIFIED IDEOGRAPH
+ {0xBFC0, 0x5777}, //10502 #CJK UNIFIED IDEOGRAPH
+ {0xBFC1, 0x82DB}, //10503 #CJK UNIFIED IDEOGRAPH
+ {0xBFC2, 0x67EF}, //10504 #CJK UNIFIED IDEOGRAPH
+ {0xBFC3, 0x68F5}, //10505 #CJK UNIFIED IDEOGRAPH
+ {0xBFC4, 0x78D5}, //10506 #CJK UNIFIED IDEOGRAPH
+ {0xBFC5, 0x9897}, //10507 #CJK UNIFIED IDEOGRAPH
+ {0xBFC6, 0x79D1}, //10508 #CJK UNIFIED IDEOGRAPH
+ {0xBFC7, 0x58F3}, //10509 #CJK UNIFIED IDEOGRAPH
+ {0xBFC8, 0x54B3}, //10510 #CJK UNIFIED IDEOGRAPH
+ {0xBFC9, 0x53EF}, //10511 #CJK UNIFIED IDEOGRAPH
+ {0xBFCA, 0x6E34}, //10512 #CJK UNIFIED IDEOGRAPH
+ {0xBFCB, 0x514B}, //10513 #CJK UNIFIED IDEOGRAPH
+ {0xBFCC, 0x523B}, //10514 #CJK UNIFIED IDEOGRAPH
+ {0xBFCD, 0x5BA2}, //10515 #CJK UNIFIED IDEOGRAPH
+ {0xBFCE, 0x8BFE}, //10516 #CJK UNIFIED IDEOGRAPH
+ {0xBFCF, 0x80AF}, //10517 #CJK UNIFIED IDEOGRAPH
+ {0xBFD0, 0x5543}, //10518 #CJK UNIFIED IDEOGRAPH
+ {0xBFD1, 0x57A6}, //10519 #CJK UNIFIED IDEOGRAPH
+ {0xBFD2, 0x6073}, //10520 #CJK UNIFIED IDEOGRAPH
+ {0xBFD3, 0x5751}, //10521 #CJK UNIFIED IDEOGRAPH
+ {0xBFD4, 0x542D}, //10522 #CJK UNIFIED IDEOGRAPH
+ {0xBFD5, 0x7A7A}, //10523 #CJK UNIFIED IDEOGRAPH
+ {0xBFD6, 0x6050}, //10524 #CJK UNIFIED IDEOGRAPH
+ {0xBFD7, 0x5B54}, //10525 #CJK UNIFIED IDEOGRAPH
+ {0xBFD8, 0x63A7}, //10526 #CJK UNIFIED IDEOGRAPH
+ {0xBFD9, 0x62A0}, //10527 #CJK UNIFIED IDEOGRAPH
+ {0xBFDA, 0x53E3}, //10528 #CJK UNIFIED IDEOGRAPH
+ {0xBFDB, 0x6263}, //10529 #CJK UNIFIED IDEOGRAPH
+ {0xBFDC, 0x5BC7}, //10530 #CJK UNIFIED IDEOGRAPH
+ {0xBFDD, 0x67AF}, //10531 #CJK UNIFIED IDEOGRAPH
+ {0xBFDE, 0x54ED}, //10532 #CJK UNIFIED IDEOGRAPH
+ {0xBFDF, 0x7A9F}, //10533 #CJK UNIFIED IDEOGRAPH
+ {0xBFE0, 0x82E6}, //10534 #CJK UNIFIED IDEOGRAPH
+ {0xBFE1, 0x9177}, //10535 #CJK UNIFIED IDEOGRAPH
+ {0xBFE2, 0x5E93}, //10536 #CJK UNIFIED IDEOGRAPH
+ {0xBFE3, 0x88E4}, //10537 #CJK UNIFIED IDEOGRAPH
+ {0xBFE4, 0x5938}, //10538 #CJK UNIFIED IDEOGRAPH
+ {0xBFE5, 0x57AE}, //10539 #CJK UNIFIED IDEOGRAPH
+ {0xBFE6, 0x630E}, //10540 #CJK UNIFIED IDEOGRAPH
+ {0xBFE7, 0x8DE8}, //10541 #CJK UNIFIED IDEOGRAPH
+ {0xBFE8, 0x80EF}, //10542 #CJK UNIFIED IDEOGRAPH
+ {0xBFE9, 0x5757}, //10543 #CJK UNIFIED IDEOGRAPH
+ {0xBFEA, 0x7B77}, //10544 #CJK UNIFIED IDEOGRAPH
+ {0xBFEB, 0x4FA9}, //10545 #CJK UNIFIED IDEOGRAPH
+ {0xBFEC, 0x5FEB}, //10546 #CJK UNIFIED IDEOGRAPH
+ {0xBFED, 0x5BBD}, //10547 #CJK UNIFIED IDEOGRAPH
+ {0xBFEE, 0x6B3E}, //10548 #CJK UNIFIED IDEOGRAPH
+ {0xBFEF, 0x5321}, //10549 #CJK UNIFIED IDEOGRAPH
+ {0xBFF0, 0x7B50}, //10550 #CJK UNIFIED IDEOGRAPH
+ {0xBFF1, 0x72C2}, //10551 #CJK UNIFIED IDEOGRAPH
+ {0xBFF2, 0x6846}, //10552 #CJK UNIFIED IDEOGRAPH
+ {0xBFF3, 0x77FF}, //10553 #CJK UNIFIED IDEOGRAPH
+ {0xBFF4, 0x7736}, //10554 #CJK UNIFIED IDEOGRAPH
+ {0xBFF5, 0x65F7}, //10555 #CJK UNIFIED IDEOGRAPH
+ {0xBFF6, 0x51B5}, //10556 #CJK UNIFIED IDEOGRAPH
+ {0xBFF7, 0x4E8F}, //10557 #CJK UNIFIED IDEOGRAPH
+ {0xBFF8, 0x76D4}, //10558 #CJK UNIFIED IDEOGRAPH
+ {0xBFF9, 0x5CBF}, //10559 #CJK UNIFIED IDEOGRAPH
+ {0xBFFA, 0x7AA5}, //10560 #CJK UNIFIED IDEOGRAPH
+ {0xBFFB, 0x8475}, //10561 #CJK UNIFIED IDEOGRAPH
+ {0xBFFC, 0x594E}, //10562 #CJK UNIFIED IDEOGRAPH
+ {0xBFFD, 0x9B41}, //10563 #CJK UNIFIED IDEOGRAPH
+ {0xBFFE, 0x5080}, //10564 #CJK UNIFIED IDEOGRAPH
+ {0xC040, 0x7E5E}, //10565 #CJK UNIFIED IDEOGRAPH
+ {0xC041, 0x7E5F}, //10566 #CJK UNIFIED IDEOGRAPH
+ {0xC042, 0x7E60}, //10567 #CJK UNIFIED IDEOGRAPH
+ {0xC043, 0x7E61}, //10568 #CJK UNIFIED IDEOGRAPH
+ {0xC044, 0x7E62}, //10569 #CJK UNIFIED IDEOGRAPH
+ {0xC045, 0x7E63}, //10570 #CJK UNIFIED IDEOGRAPH
+ {0xC046, 0x7E64}, //10571 #CJK UNIFIED IDEOGRAPH
+ {0xC047, 0x7E65}, //10572 #CJK UNIFIED IDEOGRAPH
+ {0xC048, 0x7E66}, //10573 #CJK UNIFIED IDEOGRAPH
+ {0xC049, 0x7E67}, //10574 #CJK UNIFIED IDEOGRAPH
+ {0xC04A, 0x7E68}, //10575 #CJK UNIFIED IDEOGRAPH
+ {0xC04B, 0x7E69}, //10576 #CJK UNIFIED IDEOGRAPH
+ {0xC04C, 0x7E6A}, //10577 #CJK UNIFIED IDEOGRAPH
+ {0xC04D, 0x7E6B}, //10578 #CJK UNIFIED IDEOGRAPH
+ {0xC04E, 0x7E6C}, //10579 #CJK UNIFIED IDEOGRAPH
+ {0xC04F, 0x7E6D}, //10580 #CJK UNIFIED IDEOGRAPH
+ {0xC050, 0x7E6E}, //10581 #CJK UNIFIED IDEOGRAPH
+ {0xC051, 0x7E6F}, //10582 #CJK UNIFIED IDEOGRAPH
+ {0xC052, 0x7E70}, //10583 #CJK UNIFIED IDEOGRAPH
+ {0xC053, 0x7E71}, //10584 #CJK UNIFIED IDEOGRAPH
+ {0xC054, 0x7E72}, //10585 #CJK UNIFIED IDEOGRAPH
+ {0xC055, 0x7E73}, //10586 #CJK UNIFIED IDEOGRAPH
+ {0xC056, 0x7E74}, //10587 #CJK UNIFIED IDEOGRAPH
+ {0xC057, 0x7E75}, //10588 #CJK UNIFIED IDEOGRAPH
+ {0xC058, 0x7E76}, //10589 #CJK UNIFIED IDEOGRAPH
+ {0xC059, 0x7E77}, //10590 #CJK UNIFIED IDEOGRAPH
+ {0xC05A, 0x7E78}, //10591 #CJK UNIFIED IDEOGRAPH
+ {0xC05B, 0x7E79}, //10592 #CJK UNIFIED IDEOGRAPH
+ {0xC05C, 0x7E7A}, //10593 #CJK UNIFIED IDEOGRAPH
+ {0xC05D, 0x7E7B}, //10594 #CJK UNIFIED IDEOGRAPH
+ {0xC05E, 0x7E7C}, //10595 #CJK UNIFIED IDEOGRAPH
+ {0xC05F, 0x7E7D}, //10596 #CJK UNIFIED IDEOGRAPH
+ {0xC060, 0x7E7E}, //10597 #CJK UNIFIED IDEOGRAPH
+ {0xC061, 0x7E7F}, //10598 #CJK UNIFIED IDEOGRAPH
+ {0xC062, 0x7E80}, //10599 #CJK UNIFIED IDEOGRAPH
+ {0xC063, 0x7E81}, //10600 #CJK UNIFIED IDEOGRAPH
+ {0xC064, 0x7E83}, //10601 #CJK UNIFIED IDEOGRAPH
+ {0xC065, 0x7E84}, //10602 #CJK UNIFIED IDEOGRAPH
+ {0xC066, 0x7E85}, //10603 #CJK UNIFIED IDEOGRAPH
+ {0xC067, 0x7E86}, //10604 #CJK UNIFIED IDEOGRAPH
+ {0xC068, 0x7E87}, //10605 #CJK UNIFIED IDEOGRAPH
+ {0xC069, 0x7E88}, //10606 #CJK UNIFIED IDEOGRAPH
+ {0xC06A, 0x7E89}, //10607 #CJK UNIFIED IDEOGRAPH
+ {0xC06B, 0x7E8A}, //10608 #CJK UNIFIED IDEOGRAPH
+ {0xC06C, 0x7E8B}, //10609 #CJK UNIFIED IDEOGRAPH
+ {0xC06D, 0x7E8C}, //10610 #CJK UNIFIED IDEOGRAPH
+ {0xC06E, 0x7E8D}, //10611 #CJK UNIFIED IDEOGRAPH
+ {0xC06F, 0x7E8E}, //10612 #CJK UNIFIED IDEOGRAPH
+ {0xC070, 0x7E8F}, //10613 #CJK UNIFIED IDEOGRAPH
+ {0xC071, 0x7E90}, //10614 #CJK UNIFIED IDEOGRAPH
+ {0xC072, 0x7E91}, //10615 #CJK UNIFIED IDEOGRAPH
+ {0xC073, 0x7E92}, //10616 #CJK UNIFIED IDEOGRAPH
+ {0xC074, 0x7E93}, //10617 #CJK UNIFIED IDEOGRAPH
+ {0xC075, 0x7E94}, //10618 #CJK UNIFIED IDEOGRAPH
+ {0xC076, 0x7E95}, //10619 #CJK UNIFIED IDEOGRAPH
+ {0xC077, 0x7E96}, //10620 #CJK UNIFIED IDEOGRAPH
+ {0xC078, 0x7E97}, //10621 #CJK UNIFIED IDEOGRAPH
+ {0xC079, 0x7E98}, //10622 #CJK UNIFIED IDEOGRAPH
+ {0xC07A, 0x7E99}, //10623 #CJK UNIFIED IDEOGRAPH
+ {0xC07B, 0x7E9A}, //10624 #CJK UNIFIED IDEOGRAPH
+ {0xC07C, 0x7E9C}, //10625 #CJK UNIFIED IDEOGRAPH
+ {0xC07D, 0x7E9D}, //10626 #CJK UNIFIED IDEOGRAPH
+ {0xC07E, 0x7E9E}, //10627 #CJK UNIFIED IDEOGRAPH
+ {0xC080, 0x7EAE}, //10628 #CJK UNIFIED IDEOGRAPH
+ {0xC081, 0x7EB4}, //10629 #CJK UNIFIED IDEOGRAPH
+ {0xC082, 0x7EBB}, //10630 #CJK UNIFIED IDEOGRAPH
+ {0xC083, 0x7EBC}, //10631 #CJK UNIFIED IDEOGRAPH
+ {0xC084, 0x7ED6}, //10632 #CJK UNIFIED IDEOGRAPH
+ {0xC085, 0x7EE4}, //10633 #CJK UNIFIED IDEOGRAPH
+ {0xC086, 0x7EEC}, //10634 #CJK UNIFIED IDEOGRAPH
+ {0xC087, 0x7EF9}, //10635 #CJK UNIFIED IDEOGRAPH
+ {0xC088, 0x7F0A}, //10636 #CJK UNIFIED IDEOGRAPH
+ {0xC089, 0x7F10}, //10637 #CJK UNIFIED IDEOGRAPH
+ {0xC08A, 0x7F1E}, //10638 #CJK UNIFIED IDEOGRAPH
+ {0xC08B, 0x7F37}, //10639 #CJK UNIFIED IDEOGRAPH
+ {0xC08C, 0x7F39}, //10640 #CJK UNIFIED IDEOGRAPH
+ {0xC08D, 0x7F3B}, //10641 #CJK UNIFIED IDEOGRAPH
+ {0xC08E, 0x7F3C}, //10642 #CJK UNIFIED IDEOGRAPH
+ {0xC08F, 0x7F3D}, //10643 #CJK UNIFIED IDEOGRAPH
+ {0xC090, 0x7F3E}, //10644 #CJK UNIFIED IDEOGRAPH
+ {0xC091, 0x7F3F}, //10645 #CJK UNIFIED IDEOGRAPH
+ {0xC092, 0x7F40}, //10646 #CJK UNIFIED IDEOGRAPH
+ {0xC093, 0x7F41}, //10647 #CJK UNIFIED IDEOGRAPH
+ {0xC094, 0x7F43}, //10648 #CJK UNIFIED IDEOGRAPH
+ {0xC095, 0x7F46}, //10649 #CJK UNIFIED IDEOGRAPH
+ {0xC096, 0x7F47}, //10650 #CJK UNIFIED IDEOGRAPH
+ {0xC097, 0x7F48}, //10651 #CJK UNIFIED IDEOGRAPH
+ {0xC098, 0x7F49}, //10652 #CJK UNIFIED IDEOGRAPH
+ {0xC099, 0x7F4A}, //10653 #CJK UNIFIED IDEOGRAPH
+ {0xC09A, 0x7F4B}, //10654 #CJK UNIFIED IDEOGRAPH
+ {0xC09B, 0x7F4C}, //10655 #CJK UNIFIED IDEOGRAPH
+ {0xC09C, 0x7F4D}, //10656 #CJK UNIFIED IDEOGRAPH
+ {0xC09D, 0x7F4E}, //10657 #CJK UNIFIED IDEOGRAPH
+ {0xC09E, 0x7F4F}, //10658 #CJK UNIFIED IDEOGRAPH
+ {0xC09F, 0x7F52}, //10659 #CJK UNIFIED IDEOGRAPH
+ {0xC0A0, 0x7F53}, //10660 #CJK UNIFIED IDEOGRAPH
+ {0xC0A1, 0x9988}, //10661 #CJK UNIFIED IDEOGRAPH
+ {0xC0A2, 0x6127}, //10662 #CJK UNIFIED IDEOGRAPH
+ {0xC0A3, 0x6E83}, //10663 #CJK UNIFIED IDEOGRAPH
+ {0xC0A4, 0x5764}, //10664 #CJK UNIFIED IDEOGRAPH
+ {0xC0A5, 0x6606}, //10665 #CJK UNIFIED IDEOGRAPH
+ {0xC0A6, 0x6346}, //10666 #CJK UNIFIED IDEOGRAPH
+ {0xC0A7, 0x56F0}, //10667 #CJK UNIFIED IDEOGRAPH
+ {0xC0A8, 0x62EC}, //10668 #CJK UNIFIED IDEOGRAPH
+ {0xC0A9, 0x6269}, //10669 #CJK UNIFIED IDEOGRAPH
+ {0xC0AA, 0x5ED3}, //10670 #CJK UNIFIED IDEOGRAPH
+ {0xC0AB, 0x9614}, //10671 #CJK UNIFIED IDEOGRAPH
+ {0xC0AC, 0x5783}, //10672 #CJK UNIFIED IDEOGRAPH
+ {0xC0AD, 0x62C9}, //10673 #CJK UNIFIED IDEOGRAPH
+ {0xC0AE, 0x5587}, //10674 #CJK UNIFIED IDEOGRAPH
+ {0xC0AF, 0x8721}, //10675 #CJK UNIFIED IDEOGRAPH
+ {0xC0B0, 0x814A}, //10676 #CJK UNIFIED IDEOGRAPH
+ {0xC0B1, 0x8FA3}, //10677 #CJK UNIFIED IDEOGRAPH
+ {0xC0B2, 0x5566}, //10678 #CJK UNIFIED IDEOGRAPH
+ {0xC0B3, 0x83B1}, //10679 #CJK UNIFIED IDEOGRAPH
+ {0xC0B4, 0x6765}, //10680 #CJK UNIFIED IDEOGRAPH
+ {0xC0B5, 0x8D56}, //10681 #CJK UNIFIED IDEOGRAPH
+ {0xC0B6, 0x84DD}, //10682 #CJK UNIFIED IDEOGRAPH
+ {0xC0B7, 0x5A6A}, //10683 #CJK UNIFIED IDEOGRAPH
+ {0xC0B8, 0x680F}, //10684 #CJK UNIFIED IDEOGRAPH
+ {0xC0B9, 0x62E6}, //10685 #CJK UNIFIED IDEOGRAPH
+ {0xC0BA, 0x7BEE}, //10686 #CJK UNIFIED IDEOGRAPH
+ {0xC0BB, 0x9611}, //10687 #CJK UNIFIED IDEOGRAPH
+ {0xC0BC, 0x5170}, //10688 #CJK UNIFIED IDEOGRAPH
+ {0xC0BD, 0x6F9C}, //10689 #CJK UNIFIED IDEOGRAPH
+ {0xC0BE, 0x8C30}, //10690 #CJK UNIFIED IDEOGRAPH
+ {0xC0BF, 0x63FD}, //10691 #CJK UNIFIED IDEOGRAPH
+ {0xC0C0, 0x89C8}, //10692 #CJK UNIFIED IDEOGRAPH
+ {0xC0C1, 0x61D2}, //10693 #CJK UNIFIED IDEOGRAPH
+ {0xC0C2, 0x7F06}, //10694 #CJK UNIFIED IDEOGRAPH
+ {0xC0C3, 0x70C2}, //10695 #CJK UNIFIED IDEOGRAPH
+ {0xC0C4, 0x6EE5}, //10696 #CJK UNIFIED IDEOGRAPH
+ {0xC0C5, 0x7405}, //10697 #CJK UNIFIED IDEOGRAPH
+ {0xC0C6, 0x6994}, //10698 #CJK UNIFIED IDEOGRAPH
+ {0xC0C7, 0x72FC}, //10699 #CJK UNIFIED IDEOGRAPH
+ {0xC0C8, 0x5ECA}, //10700 #CJK UNIFIED IDEOGRAPH
+ {0xC0C9, 0x90CE}, //10701 #CJK UNIFIED IDEOGRAPH
+ {0xC0CA, 0x6717}, //10702 #CJK UNIFIED IDEOGRAPH
+ {0xC0CB, 0x6D6A}, //10703 #CJK UNIFIED IDEOGRAPH
+ {0xC0CC, 0x635E}, //10704 #CJK UNIFIED IDEOGRAPH
+ {0xC0CD, 0x52B3}, //10705 #CJK UNIFIED IDEOGRAPH
+ {0xC0CE, 0x7262}, //10706 #CJK UNIFIED IDEOGRAPH
+ {0xC0CF, 0x8001}, //10707 #CJK UNIFIED IDEOGRAPH
+ {0xC0D0, 0x4F6C}, //10708 #CJK UNIFIED IDEOGRAPH
+ {0xC0D1, 0x59E5}, //10709 #CJK UNIFIED IDEOGRAPH
+ {0xC0D2, 0x916A}, //10710 #CJK UNIFIED IDEOGRAPH
+ {0xC0D3, 0x70D9}, //10711 #CJK UNIFIED IDEOGRAPH
+ {0xC0D4, 0x6D9D}, //10712 #CJK UNIFIED IDEOGRAPH
+ {0xC0D5, 0x52D2}, //10713 #CJK UNIFIED IDEOGRAPH
+ {0xC0D6, 0x4E50}, //10714 #CJK UNIFIED IDEOGRAPH
+ {0xC0D7, 0x96F7}, //10715 #CJK UNIFIED IDEOGRAPH
+ {0xC0D8, 0x956D}, //10716 #CJK UNIFIED IDEOGRAPH
+ {0xC0D9, 0x857E}, //10717 #CJK UNIFIED IDEOGRAPH
+ {0xC0DA, 0x78CA}, //10718 #CJK UNIFIED IDEOGRAPH
+ {0xC0DB, 0x7D2F}, //10719 #CJK UNIFIED IDEOGRAPH
+ {0xC0DC, 0x5121}, //10720 #CJK UNIFIED IDEOGRAPH
+ {0xC0DD, 0x5792}, //10721 #CJK UNIFIED IDEOGRAPH
+ {0xC0DE, 0x64C2}, //10722 #CJK UNIFIED IDEOGRAPH
+ {0xC0DF, 0x808B}, //10723 #CJK UNIFIED IDEOGRAPH
+ {0xC0E0, 0x7C7B}, //10724 #CJK UNIFIED IDEOGRAPH
+ {0xC0E1, 0x6CEA}, //10725 #CJK UNIFIED IDEOGRAPH
+ {0xC0E2, 0x68F1}, //10726 #CJK UNIFIED IDEOGRAPH
+ {0xC0E3, 0x695E}, //10727 #CJK UNIFIED IDEOGRAPH
+ {0xC0E4, 0x51B7}, //10728 #CJK UNIFIED IDEOGRAPH
+ {0xC0E5, 0x5398}, //10729 #CJK UNIFIED IDEOGRAPH
+ {0xC0E6, 0x68A8}, //10730 #CJK UNIFIED IDEOGRAPH
+ {0xC0E7, 0x7281}, //10731 #CJK UNIFIED IDEOGRAPH
+ {0xC0E8, 0x9ECE}, //10732 #CJK UNIFIED IDEOGRAPH
+ {0xC0E9, 0x7BF1}, //10733 #CJK UNIFIED IDEOGRAPH
+ {0xC0EA, 0x72F8}, //10734 #CJK UNIFIED IDEOGRAPH
+ {0xC0EB, 0x79BB}, //10735 #CJK UNIFIED IDEOGRAPH
+ {0xC0EC, 0x6F13}, //10736 #CJK UNIFIED IDEOGRAPH
+ {0xC0ED, 0x7406}, //10737 #CJK UNIFIED IDEOGRAPH
+ {0xC0EE, 0x674E}, //10738 #CJK UNIFIED IDEOGRAPH
+ {0xC0EF, 0x91CC}, //10739 #CJK UNIFIED IDEOGRAPH
+ {0xC0F0, 0x9CA4}, //10740 #CJK UNIFIED IDEOGRAPH
+ {0xC0F1, 0x793C}, //10741 #CJK UNIFIED IDEOGRAPH
+ {0xC0F2, 0x8389}, //10742 #CJK UNIFIED IDEOGRAPH
+ {0xC0F3, 0x8354}, //10743 #CJK UNIFIED IDEOGRAPH
+ {0xC0F4, 0x540F}, //10744 #CJK UNIFIED IDEOGRAPH
+ {0xC0F5, 0x6817}, //10745 #CJK UNIFIED IDEOGRAPH
+ {0xC0F6, 0x4E3D}, //10746 #CJK UNIFIED IDEOGRAPH
+ {0xC0F7, 0x5389}, //10747 #CJK UNIFIED IDEOGRAPH
+ {0xC0F8, 0x52B1}, //10748 #CJK UNIFIED IDEOGRAPH
+ {0xC0F9, 0x783E}, //10749 #CJK UNIFIED IDEOGRAPH
+ {0xC0FA, 0x5386}, //10750 #CJK UNIFIED IDEOGRAPH
+ {0xC0FB, 0x5229}, //10751 #CJK UNIFIED IDEOGRAPH
+ {0xC0FC, 0x5088}, //10752 #CJK UNIFIED IDEOGRAPH
+ {0xC0FD, 0x4F8B}, //10753 #CJK UNIFIED IDEOGRAPH
+ {0xC0FE, 0x4FD0}, //10754 #CJK UNIFIED IDEOGRAPH
+ {0xC140, 0x7F56}, //10755 #CJK UNIFIED IDEOGRAPH
+ {0xC141, 0x7F59}, //10756 #CJK UNIFIED IDEOGRAPH
+ {0xC142, 0x7F5B}, //10757 #CJK UNIFIED IDEOGRAPH
+ {0xC143, 0x7F5C}, //10758 #CJK UNIFIED IDEOGRAPH
+ {0xC144, 0x7F5D}, //10759 #CJK UNIFIED IDEOGRAPH
+ {0xC145, 0x7F5E}, //10760 #CJK UNIFIED IDEOGRAPH
+ {0xC146, 0x7F60}, //10761 #CJK UNIFIED IDEOGRAPH
+ {0xC147, 0x7F63}, //10762 #CJK UNIFIED IDEOGRAPH
+ {0xC148, 0x7F64}, //10763 #CJK UNIFIED IDEOGRAPH
+ {0xC149, 0x7F65}, //10764 #CJK UNIFIED IDEOGRAPH
+ {0xC14A, 0x7F66}, //10765 #CJK UNIFIED IDEOGRAPH
+ {0xC14B, 0x7F67}, //10766 #CJK UNIFIED IDEOGRAPH
+ {0xC14C, 0x7F6B}, //10767 #CJK UNIFIED IDEOGRAPH
+ {0xC14D, 0x7F6C}, //10768 #CJK UNIFIED IDEOGRAPH
+ {0xC14E, 0x7F6D}, //10769 #CJK UNIFIED IDEOGRAPH
+ {0xC14F, 0x7F6F}, //10770 #CJK UNIFIED IDEOGRAPH
+ {0xC150, 0x7F70}, //10771 #CJK UNIFIED IDEOGRAPH
+ {0xC151, 0x7F73}, //10772 #CJK UNIFIED IDEOGRAPH
+ {0xC152, 0x7F75}, //10773 #CJK UNIFIED IDEOGRAPH
+ {0xC153, 0x7F76}, //10774 #CJK UNIFIED IDEOGRAPH
+ {0xC154, 0x7F77}, //10775 #CJK UNIFIED IDEOGRAPH
+ {0xC155, 0x7F78}, //10776 #CJK UNIFIED IDEOGRAPH
+ {0xC156, 0x7F7A}, //10777 #CJK UNIFIED IDEOGRAPH
+ {0xC157, 0x7F7B}, //10778 #CJK UNIFIED IDEOGRAPH
+ {0xC158, 0x7F7C}, //10779 #CJK UNIFIED IDEOGRAPH
+ {0xC159, 0x7F7D}, //10780 #CJK UNIFIED IDEOGRAPH
+ {0xC15A, 0x7F7F}, //10781 #CJK UNIFIED IDEOGRAPH
+ {0xC15B, 0x7F80}, //10782 #CJK UNIFIED IDEOGRAPH
+ {0xC15C, 0x7F82}, //10783 #CJK UNIFIED IDEOGRAPH
+ {0xC15D, 0x7F83}, //10784 #CJK UNIFIED IDEOGRAPH
+ {0xC15E, 0x7F84}, //10785 #CJK UNIFIED IDEOGRAPH
+ {0xC15F, 0x7F85}, //10786 #CJK UNIFIED IDEOGRAPH
+ {0xC160, 0x7F86}, //10787 #CJK UNIFIED IDEOGRAPH
+ {0xC161, 0x7F87}, //10788 #CJK UNIFIED IDEOGRAPH
+ {0xC162, 0x7F88}, //10789 #CJK UNIFIED IDEOGRAPH
+ {0xC163, 0x7F89}, //10790 #CJK UNIFIED IDEOGRAPH
+ {0xC164, 0x7F8B}, //10791 #CJK UNIFIED IDEOGRAPH
+ {0xC165, 0x7F8D}, //10792 #CJK UNIFIED IDEOGRAPH
+ {0xC166, 0x7F8F}, //10793 #CJK UNIFIED IDEOGRAPH
+ {0xC167, 0x7F90}, //10794 #CJK UNIFIED IDEOGRAPH
+ {0xC168, 0x7F91}, //10795 #CJK UNIFIED IDEOGRAPH
+ {0xC169, 0x7F92}, //10796 #CJK UNIFIED IDEOGRAPH
+ {0xC16A, 0x7F93}, //10797 #CJK UNIFIED IDEOGRAPH
+ {0xC16B, 0x7F95}, //10798 #CJK UNIFIED IDEOGRAPH
+ {0xC16C, 0x7F96}, //10799 #CJK UNIFIED IDEOGRAPH
+ {0xC16D, 0x7F97}, //10800 #CJK UNIFIED IDEOGRAPH
+ {0xC16E, 0x7F98}, //10801 #CJK UNIFIED IDEOGRAPH
+ {0xC16F, 0x7F99}, //10802 #CJK UNIFIED IDEOGRAPH
+ {0xC170, 0x7F9B}, //10803 #CJK UNIFIED IDEOGRAPH
+ {0xC171, 0x7F9C}, //10804 #CJK UNIFIED IDEOGRAPH
+ {0xC172, 0x7FA0}, //10805 #CJK UNIFIED IDEOGRAPH
+ {0xC173, 0x7FA2}, //10806 #CJK UNIFIED IDEOGRAPH
+ {0xC174, 0x7FA3}, //10807 #CJK UNIFIED IDEOGRAPH
+ {0xC175, 0x7FA5}, //10808 #CJK UNIFIED IDEOGRAPH
+ {0xC176, 0x7FA6}, //10809 #CJK UNIFIED IDEOGRAPH
+ {0xC177, 0x7FA8}, //10810 #CJK UNIFIED IDEOGRAPH
+ {0xC178, 0x7FA9}, //10811 #CJK UNIFIED IDEOGRAPH
+ {0xC179, 0x7FAA}, //10812 #CJK UNIFIED IDEOGRAPH
+ {0xC17A, 0x7FAB}, //10813 #CJK UNIFIED IDEOGRAPH
+ {0xC17B, 0x7FAC}, //10814 #CJK UNIFIED IDEOGRAPH
+ {0xC17C, 0x7FAD}, //10815 #CJK UNIFIED IDEOGRAPH
+ {0xC17D, 0x7FAE}, //10816 #CJK UNIFIED IDEOGRAPH
+ {0xC17E, 0x7FB1}, //10817 #CJK UNIFIED IDEOGRAPH
+ {0xC180, 0x7FB3}, //10818 #CJK UNIFIED IDEOGRAPH
+ {0xC181, 0x7FB4}, //10819 #CJK UNIFIED IDEOGRAPH
+ {0xC182, 0x7FB5}, //10820 #CJK UNIFIED IDEOGRAPH
+ {0xC183, 0x7FB6}, //10821 #CJK UNIFIED IDEOGRAPH
+ {0xC184, 0x7FB7}, //10822 #CJK UNIFIED IDEOGRAPH
+ {0xC185, 0x7FBA}, //10823 #CJK UNIFIED IDEOGRAPH
+ {0xC186, 0x7FBB}, //10824 #CJK UNIFIED IDEOGRAPH
+ {0xC187, 0x7FBE}, //10825 #CJK UNIFIED IDEOGRAPH
+ {0xC188, 0x7FC0}, //10826 #CJK UNIFIED IDEOGRAPH
+ {0xC189, 0x7FC2}, //10827 #CJK UNIFIED IDEOGRAPH
+ {0xC18A, 0x7FC3}, //10828 #CJK UNIFIED IDEOGRAPH
+ {0xC18B, 0x7FC4}, //10829 #CJK UNIFIED IDEOGRAPH
+ {0xC18C, 0x7FC6}, //10830 #CJK UNIFIED IDEOGRAPH
+ {0xC18D, 0x7FC7}, //10831 #CJK UNIFIED IDEOGRAPH
+ {0xC18E, 0x7FC8}, //10832 #CJK UNIFIED IDEOGRAPH
+ {0xC18F, 0x7FC9}, //10833 #CJK UNIFIED IDEOGRAPH
+ {0xC190, 0x7FCB}, //10834 #CJK UNIFIED IDEOGRAPH
+ {0xC191, 0x7FCD}, //10835 #CJK UNIFIED IDEOGRAPH
+ {0xC192, 0x7FCF}, //10836 #CJK UNIFIED IDEOGRAPH
+ {0xC193, 0x7FD0}, //10837 #CJK UNIFIED IDEOGRAPH
+ {0xC194, 0x7FD1}, //10838 #CJK UNIFIED IDEOGRAPH
+ {0xC195, 0x7FD2}, //10839 #CJK UNIFIED IDEOGRAPH
+ {0xC196, 0x7FD3}, //10840 #CJK UNIFIED IDEOGRAPH
+ {0xC197, 0x7FD6}, //10841 #CJK UNIFIED IDEOGRAPH
+ {0xC198, 0x7FD7}, //10842 #CJK UNIFIED IDEOGRAPH
+ {0xC199, 0x7FD9}, //10843 #CJK UNIFIED IDEOGRAPH
+ {0xC19A, 0x7FDA}, //10844 #CJK UNIFIED IDEOGRAPH
+ {0xC19B, 0x7FDB}, //10845 #CJK UNIFIED IDEOGRAPH
+ {0xC19C, 0x7FDC}, //10846 #CJK UNIFIED IDEOGRAPH
+ {0xC19D, 0x7FDD}, //10847 #CJK UNIFIED IDEOGRAPH
+ {0xC19E, 0x7FDE}, //10848 #CJK UNIFIED IDEOGRAPH
+ {0xC19F, 0x7FE2}, //10849 #CJK UNIFIED IDEOGRAPH
+ {0xC1A0, 0x7FE3}, //10850 #CJK UNIFIED IDEOGRAPH
+ {0xC1A1, 0x75E2}, //10851 #CJK UNIFIED IDEOGRAPH
+ {0xC1A2, 0x7ACB}, //10852 #CJK UNIFIED IDEOGRAPH
+ {0xC1A3, 0x7C92}, //10853 #CJK UNIFIED IDEOGRAPH
+ {0xC1A4, 0x6CA5}, //10854 #CJK UNIFIED IDEOGRAPH
+ {0xC1A5, 0x96B6}, //10855 #CJK UNIFIED IDEOGRAPH
+ {0xC1A6, 0x529B}, //10856 #CJK UNIFIED IDEOGRAPH
+ {0xC1A7, 0x7483}, //10857 #CJK UNIFIED IDEOGRAPH
+ {0xC1A8, 0x54E9}, //10858 #CJK UNIFIED IDEOGRAPH
+ {0xC1A9, 0x4FE9}, //10859 #CJK UNIFIED IDEOGRAPH
+ {0xC1AA, 0x8054}, //10860 #CJK UNIFIED IDEOGRAPH
+ {0xC1AB, 0x83B2}, //10861 #CJK UNIFIED IDEOGRAPH
+ {0xC1AC, 0x8FDE}, //10862 #CJK UNIFIED IDEOGRAPH
+ {0xC1AD, 0x9570}, //10863 #CJK UNIFIED IDEOGRAPH
+ {0xC1AE, 0x5EC9}, //10864 #CJK UNIFIED IDEOGRAPH
+ {0xC1AF, 0x601C}, //10865 #CJK UNIFIED IDEOGRAPH
+ {0xC1B0, 0x6D9F}, //10866 #CJK UNIFIED IDEOGRAPH
+ {0xC1B1, 0x5E18}, //10867 #CJK UNIFIED IDEOGRAPH
+ {0xC1B2, 0x655B}, //10868 #CJK UNIFIED IDEOGRAPH
+ {0xC1B3, 0x8138}, //10869 #CJK UNIFIED IDEOGRAPH
+ {0xC1B4, 0x94FE}, //10870 #CJK UNIFIED IDEOGRAPH
+ {0xC1B5, 0x604B}, //10871 #CJK UNIFIED IDEOGRAPH
+ {0xC1B6, 0x70BC}, //10872 #CJK UNIFIED IDEOGRAPH
+ {0xC1B7, 0x7EC3}, //10873 #CJK UNIFIED IDEOGRAPH
+ {0xC1B8, 0x7CAE}, //10874 #CJK UNIFIED IDEOGRAPH
+ {0xC1B9, 0x51C9}, //10875 #CJK UNIFIED IDEOGRAPH
+ {0xC1BA, 0x6881}, //10876 #CJK UNIFIED IDEOGRAPH
+ {0xC1BB, 0x7CB1}, //10877 #CJK UNIFIED IDEOGRAPH
+ {0xC1BC, 0x826F}, //10878 #CJK UNIFIED IDEOGRAPH
+ {0xC1BD, 0x4E24}, //10879 #CJK UNIFIED IDEOGRAPH
+ {0xC1BE, 0x8F86}, //10880 #CJK UNIFIED IDEOGRAPH
+ {0xC1BF, 0x91CF}, //10881 #CJK UNIFIED IDEOGRAPH
+ {0xC1C0, 0x667E}, //10882 #CJK UNIFIED IDEOGRAPH
+ {0xC1C1, 0x4EAE}, //10883 #CJK UNIFIED IDEOGRAPH
+ {0xC1C2, 0x8C05}, //10884 #CJK UNIFIED IDEOGRAPH
+ {0xC1C3, 0x64A9}, //10885 #CJK UNIFIED IDEOGRAPH
+ {0xC1C4, 0x804A}, //10886 #CJK UNIFIED IDEOGRAPH
+ {0xC1C5, 0x50DA}, //10887 #CJK UNIFIED IDEOGRAPH
+ {0xC1C6, 0x7597}, //10888 #CJK UNIFIED IDEOGRAPH
+ {0xC1C7, 0x71CE}, //10889 #CJK UNIFIED IDEOGRAPH
+ {0xC1C8, 0x5BE5}, //10890 #CJK UNIFIED IDEOGRAPH
+ {0xC1C9, 0x8FBD}, //10891 #CJK UNIFIED IDEOGRAPH
+ {0xC1CA, 0x6F66}, //10892 #CJK UNIFIED IDEOGRAPH
+ {0xC1CB, 0x4E86}, //10893 #CJK UNIFIED IDEOGRAPH
+ {0xC1CC, 0x6482}, //10894 #CJK UNIFIED IDEOGRAPH
+ {0xC1CD, 0x9563}, //10895 #CJK UNIFIED IDEOGRAPH
+ {0xC1CE, 0x5ED6}, //10896 #CJK UNIFIED IDEOGRAPH
+ {0xC1CF, 0x6599}, //10897 #CJK UNIFIED IDEOGRAPH
+ {0xC1D0, 0x5217}, //10898 #CJK UNIFIED IDEOGRAPH
+ {0xC1D1, 0x88C2}, //10899 #CJK UNIFIED IDEOGRAPH
+ {0xC1D2, 0x70C8}, //10900 #CJK UNIFIED IDEOGRAPH
+ {0xC1D3, 0x52A3}, //10901 #CJK UNIFIED IDEOGRAPH
+ {0xC1D4, 0x730E}, //10902 #CJK UNIFIED IDEOGRAPH
+ {0xC1D5, 0x7433}, //10903 #CJK UNIFIED IDEOGRAPH
+ {0xC1D6, 0x6797}, //10904 #CJK UNIFIED IDEOGRAPH
+ {0xC1D7, 0x78F7}, //10905 #CJK UNIFIED IDEOGRAPH
+ {0xC1D8, 0x9716}, //10906 #CJK UNIFIED IDEOGRAPH
+ {0xC1D9, 0x4E34}, //10907 #CJK UNIFIED IDEOGRAPH
+ {0xC1DA, 0x90BB}, //10908 #CJK UNIFIED IDEOGRAPH
+ {0xC1DB, 0x9CDE}, //10909 #CJK UNIFIED IDEOGRAPH
+ {0xC1DC, 0x6DCB}, //10910 #CJK UNIFIED IDEOGRAPH
+ {0xC1DD, 0x51DB}, //10911 #CJK UNIFIED IDEOGRAPH
+ {0xC1DE, 0x8D41}, //10912 #CJK UNIFIED IDEOGRAPH
+ {0xC1DF, 0x541D}, //10913 #CJK UNIFIED IDEOGRAPH
+ {0xC1E0, 0x62CE}, //10914 #CJK UNIFIED IDEOGRAPH
+ {0xC1E1, 0x73B2}, //10915 #CJK UNIFIED IDEOGRAPH
+ {0xC1E2, 0x83F1}, //10916 #CJK UNIFIED IDEOGRAPH
+ {0xC1E3, 0x96F6}, //10917 #CJK UNIFIED IDEOGRAPH
+ {0xC1E4, 0x9F84}, //10918 #CJK UNIFIED IDEOGRAPH
+ {0xC1E5, 0x94C3}, //10919 #CJK UNIFIED IDEOGRAPH
+ {0xC1E6, 0x4F36}, //10920 #CJK UNIFIED IDEOGRAPH
+ {0xC1E7, 0x7F9A}, //10921 #CJK UNIFIED IDEOGRAPH
+ {0xC1E8, 0x51CC}, //10922 #CJK UNIFIED IDEOGRAPH
+ {0xC1E9, 0x7075}, //10923 #CJK UNIFIED IDEOGRAPH
+ {0xC1EA, 0x9675}, //10924 #CJK UNIFIED IDEOGRAPH
+ {0xC1EB, 0x5CAD}, //10925 #CJK UNIFIED IDEOGRAPH
+ {0xC1EC, 0x9886}, //10926 #CJK UNIFIED IDEOGRAPH
+ {0xC1ED, 0x53E6}, //10927 #CJK UNIFIED IDEOGRAPH
+ {0xC1EE, 0x4EE4}, //10928 #CJK UNIFIED IDEOGRAPH
+ {0xC1EF, 0x6E9C}, //10929 #CJK UNIFIED IDEOGRAPH
+ {0xC1F0, 0x7409}, //10930 #CJK UNIFIED IDEOGRAPH
+ {0xC1F1, 0x69B4}, //10931 #CJK UNIFIED IDEOGRAPH
+ {0xC1F2, 0x786B}, //10932 #CJK UNIFIED IDEOGRAPH
+ {0xC1F3, 0x998F}, //10933 #CJK UNIFIED IDEOGRAPH
+ {0xC1F4, 0x7559}, //10934 #CJK UNIFIED IDEOGRAPH
+ {0xC1F5, 0x5218}, //10935 #CJK UNIFIED IDEOGRAPH
+ {0xC1F6, 0x7624}, //10936 #CJK UNIFIED IDEOGRAPH
+ {0xC1F7, 0x6D41}, //10937 #CJK UNIFIED IDEOGRAPH
+ {0xC1F8, 0x67F3}, //10938 #CJK UNIFIED IDEOGRAPH
+ {0xC1F9, 0x516D}, //10939 #CJK UNIFIED IDEOGRAPH
+ {0xC1FA, 0x9F99}, //10940 #CJK UNIFIED IDEOGRAPH
+ {0xC1FB, 0x804B}, //10941 #CJK UNIFIED IDEOGRAPH
+ {0xC1FC, 0x5499}, //10942 #CJK UNIFIED IDEOGRAPH
+ {0xC1FD, 0x7B3C}, //10943 #CJK UNIFIED IDEOGRAPH
+ {0xC1FE, 0x7ABF}, //10944 #CJK UNIFIED IDEOGRAPH
+ {0xC240, 0x7FE4}, //10945 #CJK UNIFIED IDEOGRAPH
+ {0xC241, 0x7FE7}, //10946 #CJK UNIFIED IDEOGRAPH
+ {0xC242, 0x7FE8}, //10947 #CJK UNIFIED IDEOGRAPH
+ {0xC243, 0x7FEA}, //10948 #CJK UNIFIED IDEOGRAPH
+ {0xC244, 0x7FEB}, //10949 #CJK UNIFIED IDEOGRAPH
+ {0xC245, 0x7FEC}, //10950 #CJK UNIFIED IDEOGRAPH
+ {0xC246, 0x7FED}, //10951 #CJK UNIFIED IDEOGRAPH
+ {0xC247, 0x7FEF}, //10952 #CJK UNIFIED IDEOGRAPH
+ {0xC248, 0x7FF2}, //10953 #CJK UNIFIED IDEOGRAPH
+ {0xC249, 0x7FF4}, //10954 #CJK UNIFIED IDEOGRAPH
+ {0xC24A, 0x7FF5}, //10955 #CJK UNIFIED IDEOGRAPH
+ {0xC24B, 0x7FF6}, //10956 #CJK UNIFIED IDEOGRAPH
+ {0xC24C, 0x7FF7}, //10957 #CJK UNIFIED IDEOGRAPH
+ {0xC24D, 0x7FF8}, //10958 #CJK UNIFIED IDEOGRAPH
+ {0xC24E, 0x7FF9}, //10959 #CJK UNIFIED IDEOGRAPH
+ {0xC24F, 0x7FFA}, //10960 #CJK UNIFIED IDEOGRAPH
+ {0xC250, 0x7FFD}, //10961 #CJK UNIFIED IDEOGRAPH
+ {0xC251, 0x7FFE}, //10962 #CJK UNIFIED IDEOGRAPH
+ {0xC252, 0x7FFF}, //10963 #CJK UNIFIED IDEOGRAPH
+ {0xC253, 0x8002}, //10964 #CJK UNIFIED IDEOGRAPH
+ {0xC254, 0x8007}, //10965 #CJK UNIFIED IDEOGRAPH
+ {0xC255, 0x8008}, //10966 #CJK UNIFIED IDEOGRAPH
+ {0xC256, 0x8009}, //10967 #CJK UNIFIED IDEOGRAPH
+ {0xC257, 0x800A}, //10968 #CJK UNIFIED IDEOGRAPH
+ {0xC258, 0x800E}, //10969 #CJK UNIFIED IDEOGRAPH
+ {0xC259, 0x800F}, //10970 #CJK UNIFIED IDEOGRAPH
+ {0xC25A, 0x8011}, //10971 #CJK UNIFIED IDEOGRAPH
+ {0xC25B, 0x8013}, //10972 #CJK UNIFIED IDEOGRAPH
+ {0xC25C, 0x801A}, //10973 #CJK UNIFIED IDEOGRAPH
+ {0xC25D, 0x801B}, //10974 #CJK UNIFIED IDEOGRAPH
+ {0xC25E, 0x801D}, //10975 #CJK UNIFIED IDEOGRAPH
+ {0xC25F, 0x801E}, //10976 #CJK UNIFIED IDEOGRAPH
+ {0xC260, 0x801F}, //10977 #CJK UNIFIED IDEOGRAPH
+ {0xC261, 0x8021}, //10978 #CJK UNIFIED IDEOGRAPH
+ {0xC262, 0x8023}, //10979 #CJK UNIFIED IDEOGRAPH
+ {0xC263, 0x8024}, //10980 #CJK UNIFIED IDEOGRAPH
+ {0xC264, 0x802B}, //10981 #CJK UNIFIED IDEOGRAPH
+ {0xC265, 0x802C}, //10982 #CJK UNIFIED IDEOGRAPH
+ {0xC266, 0x802D}, //10983 #CJK UNIFIED IDEOGRAPH
+ {0xC267, 0x802E}, //10984 #CJK UNIFIED IDEOGRAPH
+ {0xC268, 0x802F}, //10985 #CJK UNIFIED IDEOGRAPH
+ {0xC269, 0x8030}, //10986 #CJK UNIFIED IDEOGRAPH
+ {0xC26A, 0x8032}, //10987 #CJK UNIFIED IDEOGRAPH
+ {0xC26B, 0x8034}, //10988 #CJK UNIFIED IDEOGRAPH
+ {0xC26C, 0x8039}, //10989 #CJK UNIFIED IDEOGRAPH
+ {0xC26D, 0x803A}, //10990 #CJK UNIFIED IDEOGRAPH
+ {0xC26E, 0x803C}, //10991 #CJK UNIFIED IDEOGRAPH
+ {0xC26F, 0x803E}, //10992 #CJK UNIFIED IDEOGRAPH
+ {0xC270, 0x8040}, //10993 #CJK UNIFIED IDEOGRAPH
+ {0xC271, 0x8041}, //10994 #CJK UNIFIED IDEOGRAPH
+ {0xC272, 0x8044}, //10995 #CJK UNIFIED IDEOGRAPH
+ {0xC273, 0x8045}, //10996 #CJK UNIFIED IDEOGRAPH
+ {0xC274, 0x8047}, //10997 #CJK UNIFIED IDEOGRAPH
+ {0xC275, 0x8048}, //10998 #CJK UNIFIED IDEOGRAPH
+ {0xC276, 0x8049}, //10999 #CJK UNIFIED IDEOGRAPH
+ {0xC277, 0x804E}, //11000 #CJK UNIFIED IDEOGRAPH
+ {0xC278, 0x804F}, //11001 #CJK UNIFIED IDEOGRAPH
+ {0xC279, 0x8050}, //11002 #CJK UNIFIED IDEOGRAPH
+ {0xC27A, 0x8051}, //11003 #CJK UNIFIED IDEOGRAPH
+ {0xC27B, 0x8053}, //11004 #CJK UNIFIED IDEOGRAPH
+ {0xC27C, 0x8055}, //11005 #CJK UNIFIED IDEOGRAPH
+ {0xC27D, 0x8056}, //11006 #CJK UNIFIED IDEOGRAPH
+ {0xC27E, 0x8057}, //11007 #CJK UNIFIED IDEOGRAPH
+ {0xC280, 0x8059}, //11008 #CJK UNIFIED IDEOGRAPH
+ {0xC281, 0x805B}, //11009 #CJK UNIFIED IDEOGRAPH
+ {0xC282, 0x805C}, //11010 #CJK UNIFIED IDEOGRAPH
+ {0xC283, 0x805D}, //11011 #CJK UNIFIED IDEOGRAPH
+ {0xC284, 0x805E}, //11012 #CJK UNIFIED IDEOGRAPH
+ {0xC285, 0x805F}, //11013 #CJK UNIFIED IDEOGRAPH
+ {0xC286, 0x8060}, //11014 #CJK UNIFIED IDEOGRAPH
+ {0xC287, 0x8061}, //11015 #CJK UNIFIED IDEOGRAPH
+ {0xC288, 0x8062}, //11016 #CJK UNIFIED IDEOGRAPH
+ {0xC289, 0x8063}, //11017 #CJK UNIFIED IDEOGRAPH
+ {0xC28A, 0x8064}, //11018 #CJK UNIFIED IDEOGRAPH
+ {0xC28B, 0x8065}, //11019 #CJK UNIFIED IDEOGRAPH
+ {0xC28C, 0x8066}, //11020 #CJK UNIFIED IDEOGRAPH
+ {0xC28D, 0x8067}, //11021 #CJK UNIFIED IDEOGRAPH
+ {0xC28E, 0x8068}, //11022 #CJK UNIFIED IDEOGRAPH
+ {0xC28F, 0x806B}, //11023 #CJK UNIFIED IDEOGRAPH
+ {0xC290, 0x806C}, //11024 #CJK UNIFIED IDEOGRAPH
+ {0xC291, 0x806D}, //11025 #CJK UNIFIED IDEOGRAPH
+ {0xC292, 0x806E}, //11026 #CJK UNIFIED IDEOGRAPH
+ {0xC293, 0x806F}, //11027 #CJK UNIFIED IDEOGRAPH
+ {0xC294, 0x8070}, //11028 #CJK UNIFIED IDEOGRAPH
+ {0xC295, 0x8072}, //11029 #CJK UNIFIED IDEOGRAPH
+ {0xC296, 0x8073}, //11030 #CJK UNIFIED IDEOGRAPH
+ {0xC297, 0x8074}, //11031 #CJK UNIFIED IDEOGRAPH
+ {0xC298, 0x8075}, //11032 #CJK UNIFIED IDEOGRAPH
+ {0xC299, 0x8076}, //11033 #CJK UNIFIED IDEOGRAPH
+ {0xC29A, 0x8077}, //11034 #CJK UNIFIED IDEOGRAPH
+ {0xC29B, 0x8078}, //11035 #CJK UNIFIED IDEOGRAPH
+ {0xC29C, 0x8079}, //11036 #CJK UNIFIED IDEOGRAPH
+ {0xC29D, 0x807A}, //11037 #CJK UNIFIED IDEOGRAPH
+ {0xC29E, 0x807B}, //11038 #CJK UNIFIED IDEOGRAPH
+ {0xC29F, 0x807C}, //11039 #CJK UNIFIED IDEOGRAPH
+ {0xC2A0, 0x807D}, //11040 #CJK UNIFIED IDEOGRAPH
+ {0xC2A1, 0x9686}, //11041 #CJK UNIFIED IDEOGRAPH
+ {0xC2A2, 0x5784}, //11042 #CJK UNIFIED IDEOGRAPH
+ {0xC2A3, 0x62E2}, //11043 #CJK UNIFIED IDEOGRAPH
+ {0xC2A4, 0x9647}, //11044 #CJK UNIFIED IDEOGRAPH
+ {0xC2A5, 0x697C}, //11045 #CJK UNIFIED IDEOGRAPH
+ {0xC2A6, 0x5A04}, //11046 #CJK UNIFIED IDEOGRAPH
+ {0xC2A7, 0x6402}, //11047 #CJK UNIFIED IDEOGRAPH
+ {0xC2A8, 0x7BD3}, //11048 #CJK UNIFIED IDEOGRAPH
+ {0xC2A9, 0x6F0F}, //11049 #CJK UNIFIED IDEOGRAPH
+ {0xC2AA, 0x964B}, //11050 #CJK UNIFIED IDEOGRAPH
+ {0xC2AB, 0x82A6}, //11051 #CJK UNIFIED IDEOGRAPH
+ {0xC2AC, 0x5362}, //11052 #CJK UNIFIED IDEOGRAPH
+ {0xC2AD, 0x9885}, //11053 #CJK UNIFIED IDEOGRAPH
+ {0xC2AE, 0x5E90}, //11054 #CJK UNIFIED IDEOGRAPH
+ {0xC2AF, 0x7089}, //11055 #CJK UNIFIED IDEOGRAPH
+ {0xC2B0, 0x63B3}, //11056 #CJK UNIFIED IDEOGRAPH
+ {0xC2B1, 0x5364}, //11057 #CJK UNIFIED IDEOGRAPH
+ {0xC2B2, 0x864F}, //11058 #CJK UNIFIED IDEOGRAPH
+ {0xC2B3, 0x9C81}, //11059 #CJK UNIFIED IDEOGRAPH
+ {0xC2B4, 0x9E93}, //11060 #CJK UNIFIED IDEOGRAPH
+ {0xC2B5, 0x788C}, //11061 #CJK UNIFIED IDEOGRAPH
+ {0xC2B6, 0x9732}, //11062 #CJK UNIFIED IDEOGRAPH
+ {0xC2B7, 0x8DEF}, //11063 #CJK UNIFIED IDEOGRAPH
+ {0xC2B8, 0x8D42}, //11064 #CJK UNIFIED IDEOGRAPH
+ {0xC2B9, 0x9E7F}, //11065 #CJK UNIFIED IDEOGRAPH
+ {0xC2BA, 0x6F5E}, //11066 #CJK UNIFIED IDEOGRAPH
+ {0xC2BB, 0x7984}, //11067 #CJK UNIFIED IDEOGRAPH
+ {0xC2BC, 0x5F55}, //11068 #CJK UNIFIED IDEOGRAPH
+ {0xC2BD, 0x9646}, //11069 #CJK UNIFIED IDEOGRAPH
+ {0xC2BE, 0x622E}, //11070 #CJK UNIFIED IDEOGRAPH
+ {0xC2BF, 0x9A74}, //11071 #CJK UNIFIED IDEOGRAPH
+ {0xC2C0, 0x5415}, //11072 #CJK UNIFIED IDEOGRAPH
+ {0xC2C1, 0x94DD}, //11073 #CJK UNIFIED IDEOGRAPH
+ {0xC2C2, 0x4FA3}, //11074 #CJK UNIFIED IDEOGRAPH
+ {0xC2C3, 0x65C5}, //11075 #CJK UNIFIED IDEOGRAPH
+ {0xC2C4, 0x5C65}, //11076 #CJK UNIFIED IDEOGRAPH
+ {0xC2C5, 0x5C61}, //11077 #CJK UNIFIED IDEOGRAPH
+ {0xC2C6, 0x7F15}, //11078 #CJK UNIFIED IDEOGRAPH
+ {0xC2C7, 0x8651}, //11079 #CJK UNIFIED IDEOGRAPH
+ {0xC2C8, 0x6C2F}, //11080 #CJK UNIFIED IDEOGRAPH
+ {0xC2C9, 0x5F8B}, //11081 #CJK UNIFIED IDEOGRAPH
+ {0xC2CA, 0x7387}, //11082 #CJK UNIFIED IDEOGRAPH
+ {0xC2CB, 0x6EE4}, //11083 #CJK UNIFIED IDEOGRAPH
+ {0xC2CC, 0x7EFF}, //11084 #CJK UNIFIED IDEOGRAPH
+ {0xC2CD, 0x5CE6}, //11085 #CJK UNIFIED IDEOGRAPH
+ {0xC2CE, 0x631B}, //11086 #CJK UNIFIED IDEOGRAPH
+ {0xC2CF, 0x5B6A}, //11087 #CJK UNIFIED IDEOGRAPH
+ {0xC2D0, 0x6EE6}, //11088 #CJK UNIFIED IDEOGRAPH
+ {0xC2D1, 0x5375}, //11089 #CJK UNIFIED IDEOGRAPH
+ {0xC2D2, 0x4E71}, //11090 #CJK UNIFIED IDEOGRAPH
+ {0xC2D3, 0x63A0}, //11091 #CJK UNIFIED IDEOGRAPH
+ {0xC2D4, 0x7565}, //11092 #CJK UNIFIED IDEOGRAPH
+ {0xC2D5, 0x62A1}, //11093 #CJK UNIFIED IDEOGRAPH
+ {0xC2D6, 0x8F6E}, //11094 #CJK UNIFIED IDEOGRAPH
+ {0xC2D7, 0x4F26}, //11095 #CJK UNIFIED IDEOGRAPH
+ {0xC2D8, 0x4ED1}, //11096 #CJK UNIFIED IDEOGRAPH
+ {0xC2D9, 0x6CA6}, //11097 #CJK UNIFIED IDEOGRAPH
+ {0xC2DA, 0x7EB6}, //11098 #CJK UNIFIED IDEOGRAPH
+ {0xC2DB, 0x8BBA}, //11099 #CJK UNIFIED IDEOGRAPH
+ {0xC2DC, 0x841D}, //11100 #CJK UNIFIED IDEOGRAPH
+ {0xC2DD, 0x87BA}, //11101 #CJK UNIFIED IDEOGRAPH
+ {0xC2DE, 0x7F57}, //11102 #CJK UNIFIED IDEOGRAPH
+ {0xC2DF, 0x903B}, //11103 #CJK UNIFIED IDEOGRAPH
+ {0xC2E0, 0x9523}, //11104 #CJK UNIFIED IDEOGRAPH
+ {0xC2E1, 0x7BA9}, //11105 #CJK UNIFIED IDEOGRAPH
+ {0xC2E2, 0x9AA1}, //11106 #CJK UNIFIED IDEOGRAPH
+ {0xC2E3, 0x88F8}, //11107 #CJK UNIFIED IDEOGRAPH
+ {0xC2E4, 0x843D}, //11108 #CJK UNIFIED IDEOGRAPH
+ {0xC2E5, 0x6D1B}, //11109 #CJK UNIFIED IDEOGRAPH
+ {0xC2E6, 0x9A86}, //11110 #CJK UNIFIED IDEOGRAPH
+ {0xC2E7, 0x7EDC}, //11111 #CJK UNIFIED IDEOGRAPH
+ {0xC2E8, 0x5988}, //11112 #CJK UNIFIED IDEOGRAPH
+ {0xC2E9, 0x9EBB}, //11113 #CJK UNIFIED IDEOGRAPH
+ {0xC2EA, 0x739B}, //11114 #CJK UNIFIED IDEOGRAPH
+ {0xC2EB, 0x7801}, //11115 #CJK UNIFIED IDEOGRAPH
+ {0xC2EC, 0x8682}, //11116 #CJK UNIFIED IDEOGRAPH
+ {0xC2ED, 0x9A6C}, //11117 #CJK UNIFIED IDEOGRAPH
+ {0xC2EE, 0x9A82}, //11118 #CJK UNIFIED IDEOGRAPH
+ {0xC2EF, 0x561B}, //11119 #CJK UNIFIED IDEOGRAPH
+ {0xC2F0, 0x5417}, //11120 #CJK UNIFIED IDEOGRAPH
+ {0xC2F1, 0x57CB}, //11121 #CJK UNIFIED IDEOGRAPH
+ {0xC2F2, 0x4E70}, //11122 #CJK UNIFIED IDEOGRAPH
+ {0xC2F3, 0x9EA6}, //11123 #CJK UNIFIED IDEOGRAPH
+ {0xC2F4, 0x5356}, //11124 #CJK UNIFIED IDEOGRAPH
+ {0xC2F5, 0x8FC8}, //11125 #CJK UNIFIED IDEOGRAPH
+ {0xC2F6, 0x8109}, //11126 #CJK UNIFIED IDEOGRAPH
+ {0xC2F7, 0x7792}, //11127 #CJK UNIFIED IDEOGRAPH
+ {0xC2F8, 0x9992}, //11128 #CJK UNIFIED IDEOGRAPH
+ {0xC2F9, 0x86EE}, //11129 #CJK UNIFIED IDEOGRAPH
+ {0xC2FA, 0x6EE1}, //11130 #CJK UNIFIED IDEOGRAPH
+ {0xC2FB, 0x8513}, //11131 #CJK UNIFIED IDEOGRAPH
+ {0xC2FC, 0x66FC}, //11132 #CJK UNIFIED IDEOGRAPH
+ {0xC2FD, 0x6162}, //11133 #CJK UNIFIED IDEOGRAPH
+ {0xC2FE, 0x6F2B}, //11134 #CJK UNIFIED IDEOGRAPH
+ {0xC340, 0x807E}, //11135 #CJK UNIFIED IDEOGRAPH
+ {0xC341, 0x8081}, //11136 #CJK UNIFIED IDEOGRAPH
+ {0xC342, 0x8082}, //11137 #CJK UNIFIED IDEOGRAPH
+ {0xC343, 0x8085}, //11138 #CJK UNIFIED IDEOGRAPH
+ {0xC344, 0x8088}, //11139 #CJK UNIFIED IDEOGRAPH
+ {0xC345, 0x808A}, //11140 #CJK UNIFIED IDEOGRAPH
+ {0xC346, 0x808D}, //11141 #CJK UNIFIED IDEOGRAPH
+ {0xC347, 0x808E}, //11142 #CJK UNIFIED IDEOGRAPH
+ {0xC348, 0x808F}, //11143 #CJK UNIFIED IDEOGRAPH
+ {0xC349, 0x8090}, //11144 #CJK UNIFIED IDEOGRAPH
+ {0xC34A, 0x8091}, //11145 #CJK UNIFIED IDEOGRAPH
+ {0xC34B, 0x8092}, //11146 #CJK UNIFIED IDEOGRAPH
+ {0xC34C, 0x8094}, //11147 #CJK UNIFIED IDEOGRAPH
+ {0xC34D, 0x8095}, //11148 #CJK UNIFIED IDEOGRAPH
+ {0xC34E, 0x8097}, //11149 #CJK UNIFIED IDEOGRAPH
+ {0xC34F, 0x8099}, //11150 #CJK UNIFIED IDEOGRAPH
+ {0xC350, 0x809E}, //11151 #CJK UNIFIED IDEOGRAPH
+ {0xC351, 0x80A3}, //11152 #CJK UNIFIED IDEOGRAPH
+ {0xC352, 0x80A6}, //11153 #CJK UNIFIED IDEOGRAPH
+ {0xC353, 0x80A7}, //11154 #CJK UNIFIED IDEOGRAPH
+ {0xC354, 0x80A8}, //11155 #CJK UNIFIED IDEOGRAPH
+ {0xC355, 0x80AC}, //11156 #CJK UNIFIED IDEOGRAPH
+ {0xC356, 0x80B0}, //11157 #CJK UNIFIED IDEOGRAPH
+ {0xC357, 0x80B3}, //11158 #CJK UNIFIED IDEOGRAPH
+ {0xC358, 0x80B5}, //11159 #CJK UNIFIED IDEOGRAPH
+ {0xC359, 0x80B6}, //11160 #CJK UNIFIED IDEOGRAPH
+ {0xC35A, 0x80B8}, //11161 #CJK UNIFIED IDEOGRAPH
+ {0xC35B, 0x80B9}, //11162 #CJK UNIFIED IDEOGRAPH
+ {0xC35C, 0x80BB}, //11163 #CJK UNIFIED IDEOGRAPH
+ {0xC35D, 0x80C5}, //11164 #CJK UNIFIED IDEOGRAPH
+ {0xC35E, 0x80C7}, //11165 #CJK UNIFIED IDEOGRAPH
+ {0xC35F, 0x80C8}, //11166 #CJK UNIFIED IDEOGRAPH
+ {0xC360, 0x80C9}, //11167 #CJK UNIFIED IDEOGRAPH
+ {0xC361, 0x80CA}, //11168 #CJK UNIFIED IDEOGRAPH
+ {0xC362, 0x80CB}, //11169 #CJK UNIFIED IDEOGRAPH
+ {0xC363, 0x80CF}, //11170 #CJK UNIFIED IDEOGRAPH
+ {0xC364, 0x80D0}, //11171 #CJK UNIFIED IDEOGRAPH
+ {0xC365, 0x80D1}, //11172 #CJK UNIFIED IDEOGRAPH
+ {0xC366, 0x80D2}, //11173 #CJK UNIFIED IDEOGRAPH
+ {0xC367, 0x80D3}, //11174 #CJK UNIFIED IDEOGRAPH
+ {0xC368, 0x80D4}, //11175 #CJK UNIFIED IDEOGRAPH
+ {0xC369, 0x80D5}, //11176 #CJK UNIFIED IDEOGRAPH
+ {0xC36A, 0x80D8}, //11177 #CJK UNIFIED IDEOGRAPH
+ {0xC36B, 0x80DF}, //11178 #CJK UNIFIED IDEOGRAPH
+ {0xC36C, 0x80E0}, //11179 #CJK UNIFIED IDEOGRAPH
+ {0xC36D, 0x80E2}, //11180 #CJK UNIFIED IDEOGRAPH
+ {0xC36E, 0x80E3}, //11181 #CJK UNIFIED IDEOGRAPH
+ {0xC36F, 0x80E6}, //11182 #CJK UNIFIED IDEOGRAPH
+ {0xC370, 0x80EE}, //11183 #CJK UNIFIED IDEOGRAPH
+ {0xC371, 0x80F5}, //11184 #CJK UNIFIED IDEOGRAPH
+ {0xC372, 0x80F7}, //11185 #CJK UNIFIED IDEOGRAPH
+ {0xC373, 0x80F9}, //11186 #CJK UNIFIED IDEOGRAPH
+ {0xC374, 0x80FB}, //11187 #CJK UNIFIED IDEOGRAPH
+ {0xC375, 0x80FE}, //11188 #CJK UNIFIED IDEOGRAPH
+ {0xC376, 0x80FF}, //11189 #CJK UNIFIED IDEOGRAPH
+ {0xC377, 0x8100}, //11190 #CJK UNIFIED IDEOGRAPH
+ {0xC378, 0x8101}, //11191 #CJK UNIFIED IDEOGRAPH
+ {0xC379, 0x8103}, //11192 #CJK UNIFIED IDEOGRAPH
+ {0xC37A, 0x8104}, //11193 #CJK UNIFIED IDEOGRAPH
+ {0xC37B, 0x8105}, //11194 #CJK UNIFIED IDEOGRAPH
+ {0xC37C, 0x8107}, //11195 #CJK UNIFIED IDEOGRAPH
+ {0xC37D, 0x8108}, //11196 #CJK UNIFIED IDEOGRAPH
+ {0xC37E, 0x810B}, //11197 #CJK UNIFIED IDEOGRAPH
+ {0xC380, 0x810C}, //11198 #CJK UNIFIED IDEOGRAPH
+ {0xC381, 0x8115}, //11199 #CJK UNIFIED IDEOGRAPH
+ {0xC382, 0x8117}, //11200 #CJK UNIFIED IDEOGRAPH
+ {0xC383, 0x8119}, //11201 #CJK UNIFIED IDEOGRAPH
+ {0xC384, 0x811B}, //11202 #CJK UNIFIED IDEOGRAPH
+ {0xC385, 0x811C}, //11203 #CJK UNIFIED IDEOGRAPH
+ {0xC386, 0x811D}, //11204 #CJK UNIFIED IDEOGRAPH
+ {0xC387, 0x811F}, //11205 #CJK UNIFIED IDEOGRAPH
+ {0xC388, 0x8120}, //11206 #CJK UNIFIED IDEOGRAPH
+ {0xC389, 0x8121}, //11207 #CJK UNIFIED IDEOGRAPH
+ {0xC38A, 0x8122}, //11208 #CJK UNIFIED IDEOGRAPH
+ {0xC38B, 0x8123}, //11209 #CJK UNIFIED IDEOGRAPH
+ {0xC38C, 0x8124}, //11210 #CJK UNIFIED IDEOGRAPH
+ {0xC38D, 0x8125}, //11211 #CJK UNIFIED IDEOGRAPH
+ {0xC38E, 0x8126}, //11212 #CJK UNIFIED IDEOGRAPH
+ {0xC38F, 0x8127}, //11213 #CJK UNIFIED IDEOGRAPH
+ {0xC390, 0x8128}, //11214 #CJK UNIFIED IDEOGRAPH
+ {0xC391, 0x8129}, //11215 #CJK UNIFIED IDEOGRAPH
+ {0xC392, 0x812A}, //11216 #CJK UNIFIED IDEOGRAPH
+ {0xC393, 0x812B}, //11217 #CJK UNIFIED IDEOGRAPH
+ {0xC394, 0x812D}, //11218 #CJK UNIFIED IDEOGRAPH
+ {0xC395, 0x812E}, //11219 #CJK UNIFIED IDEOGRAPH
+ {0xC396, 0x8130}, //11220 #CJK UNIFIED IDEOGRAPH
+ {0xC397, 0x8133}, //11221 #CJK UNIFIED IDEOGRAPH
+ {0xC398, 0x8134}, //11222 #CJK UNIFIED IDEOGRAPH
+ {0xC399, 0x8135}, //11223 #CJK UNIFIED IDEOGRAPH
+ {0xC39A, 0x8137}, //11224 #CJK UNIFIED IDEOGRAPH
+ {0xC39B, 0x8139}, //11225 #CJK UNIFIED IDEOGRAPH
+ {0xC39C, 0x813A}, //11226 #CJK UNIFIED IDEOGRAPH
+ {0xC39D, 0x813B}, //11227 #CJK UNIFIED IDEOGRAPH
+ {0xC39E, 0x813C}, //11228 #CJK UNIFIED IDEOGRAPH
+ {0xC39F, 0x813D}, //11229 #CJK UNIFIED IDEOGRAPH
+ {0xC3A0, 0x813F}, //11230 #CJK UNIFIED IDEOGRAPH
+ {0xC3A1, 0x8C29}, //11231 #CJK UNIFIED IDEOGRAPH
+ {0xC3A2, 0x8292}, //11232 #CJK UNIFIED IDEOGRAPH
+ {0xC3A3, 0x832B}, //11233 #CJK UNIFIED IDEOGRAPH
+ {0xC3A4, 0x76F2}, //11234 #CJK UNIFIED IDEOGRAPH
+ {0xC3A5, 0x6C13}, //11235 #CJK UNIFIED IDEOGRAPH
+ {0xC3A6, 0x5FD9}, //11236 #CJK UNIFIED IDEOGRAPH
+ {0xC3A7, 0x83BD}, //11237 #CJK UNIFIED IDEOGRAPH
+ {0xC3A8, 0x732B}, //11238 #CJK UNIFIED IDEOGRAPH
+ {0xC3A9, 0x8305}, //11239 #CJK UNIFIED IDEOGRAPH
+ {0xC3AA, 0x951A}, //11240 #CJK UNIFIED IDEOGRAPH
+ {0xC3AB, 0x6BDB}, //11241 #CJK UNIFIED IDEOGRAPH
+ {0xC3AC, 0x77DB}, //11242 #CJK UNIFIED IDEOGRAPH
+ {0xC3AD, 0x94C6}, //11243 #CJK UNIFIED IDEOGRAPH
+ {0xC3AE, 0x536F}, //11244 #CJK UNIFIED IDEOGRAPH
+ {0xC3AF, 0x8302}, //11245 #CJK UNIFIED IDEOGRAPH
+ {0xC3B0, 0x5192}, //11246 #CJK UNIFIED IDEOGRAPH
+ {0xC3B1, 0x5E3D}, //11247 #CJK UNIFIED IDEOGRAPH
+ {0xC3B2, 0x8C8C}, //11248 #CJK UNIFIED IDEOGRAPH
+ {0xC3B3, 0x8D38}, //11249 #CJK UNIFIED IDEOGRAPH
+ {0xC3B4, 0x4E48}, //11250 #CJK UNIFIED IDEOGRAPH
+ {0xC3B5, 0x73AB}, //11251 #CJK UNIFIED IDEOGRAPH
+ {0xC3B6, 0x679A}, //11252 #CJK UNIFIED IDEOGRAPH
+ {0xC3B7, 0x6885}, //11253 #CJK UNIFIED IDEOGRAPH
+ {0xC3B8, 0x9176}, //11254 #CJK UNIFIED IDEOGRAPH
+ {0xC3B9, 0x9709}, //11255 #CJK UNIFIED IDEOGRAPH
+ {0xC3BA, 0x7164}, //11256 #CJK UNIFIED IDEOGRAPH
+ {0xC3BB, 0x6CA1}, //11257 #CJK UNIFIED IDEOGRAPH
+ {0xC3BC, 0x7709}, //11258 #CJK UNIFIED IDEOGRAPH
+ {0xC3BD, 0x5A92}, //11259 #CJK UNIFIED IDEOGRAPH
+ {0xC3BE, 0x9541}, //11260 #CJK UNIFIED IDEOGRAPH
+ {0xC3BF, 0x6BCF}, //11261 #CJK UNIFIED IDEOGRAPH
+ {0xC3C0, 0x7F8E}, //11262 #CJK UNIFIED IDEOGRAPH
+ {0xC3C1, 0x6627}, //11263 #CJK UNIFIED IDEOGRAPH
+ {0xC3C2, 0x5BD0}, //11264 #CJK UNIFIED IDEOGRAPH
+ {0xC3C3, 0x59B9}, //11265 #CJK UNIFIED IDEOGRAPH
+ {0xC3C4, 0x5A9A}, //11266 #CJK UNIFIED IDEOGRAPH
+ {0xC3C5, 0x95E8}, //11267 #CJK UNIFIED IDEOGRAPH
+ {0xC3C6, 0x95F7}, //11268 #CJK UNIFIED IDEOGRAPH
+ {0xC3C7, 0x4EEC}, //11269 #CJK UNIFIED IDEOGRAPH
+ {0xC3C8, 0x840C}, //11270 #CJK UNIFIED IDEOGRAPH
+ {0xC3C9, 0x8499}, //11271 #CJK UNIFIED IDEOGRAPH
+ {0xC3CA, 0x6AAC}, //11272 #CJK UNIFIED IDEOGRAPH
+ {0xC3CB, 0x76DF}, //11273 #CJK UNIFIED IDEOGRAPH
+ {0xC3CC, 0x9530}, //11274 #CJK UNIFIED IDEOGRAPH
+ {0xC3CD, 0x731B}, //11275 #CJK UNIFIED IDEOGRAPH
+ {0xC3CE, 0x68A6}, //11276 #CJK UNIFIED IDEOGRAPH
+ {0xC3CF, 0x5B5F}, //11277 #CJK UNIFIED IDEOGRAPH
+ {0xC3D0, 0x772F}, //11278 #CJK UNIFIED IDEOGRAPH
+ {0xC3D1, 0x919A}, //11279 #CJK UNIFIED IDEOGRAPH
+ {0xC3D2, 0x9761}, //11280 #CJK UNIFIED IDEOGRAPH
+ {0xC3D3, 0x7CDC}, //11281 #CJK UNIFIED IDEOGRAPH
+ {0xC3D4, 0x8FF7}, //11282 #CJK UNIFIED IDEOGRAPH
+ {0xC3D5, 0x8C1C}, //11283 #CJK UNIFIED IDEOGRAPH
+ {0xC3D6, 0x5F25}, //11284 #CJK UNIFIED IDEOGRAPH
+ {0xC3D7, 0x7C73}, //11285 #CJK UNIFIED IDEOGRAPH
+ {0xC3D8, 0x79D8}, //11286 #CJK UNIFIED IDEOGRAPH
+ {0xC3D9, 0x89C5}, //11287 #CJK UNIFIED IDEOGRAPH
+ {0xC3DA, 0x6CCC}, //11288 #CJK UNIFIED IDEOGRAPH
+ {0xC3DB, 0x871C}, //11289 #CJK UNIFIED IDEOGRAPH
+ {0xC3DC, 0x5BC6}, //11290 #CJK UNIFIED IDEOGRAPH
+ {0xC3DD, 0x5E42}, //11291 #CJK UNIFIED IDEOGRAPH
+ {0xC3DE, 0x68C9}, //11292 #CJK UNIFIED IDEOGRAPH
+ {0xC3DF, 0x7720}, //11293 #CJK UNIFIED IDEOGRAPH
+ {0xC3E0, 0x7EF5}, //11294 #CJK UNIFIED IDEOGRAPH
+ {0xC3E1, 0x5195}, //11295 #CJK UNIFIED IDEOGRAPH
+ {0xC3E2, 0x514D}, //11296 #CJK UNIFIED IDEOGRAPH
+ {0xC3E3, 0x52C9}, //11297 #CJK UNIFIED IDEOGRAPH
+ {0xC3E4, 0x5A29}, //11298 #CJK UNIFIED IDEOGRAPH
+ {0xC3E5, 0x7F05}, //11299 #CJK UNIFIED IDEOGRAPH
+ {0xC3E6, 0x9762}, //11300 #CJK UNIFIED IDEOGRAPH
+ {0xC3E7, 0x82D7}, //11301 #CJK UNIFIED IDEOGRAPH
+ {0xC3E8, 0x63CF}, //11302 #CJK UNIFIED IDEOGRAPH
+ {0xC3E9, 0x7784}, //11303 #CJK UNIFIED IDEOGRAPH
+ {0xC3EA, 0x85D0}, //11304 #CJK UNIFIED IDEOGRAPH
+ {0xC3EB, 0x79D2}, //11305 #CJK UNIFIED IDEOGRAPH
+ {0xC3EC, 0x6E3A}, //11306 #CJK UNIFIED IDEOGRAPH
+ {0xC3ED, 0x5E99}, //11307 #CJK UNIFIED IDEOGRAPH
+ {0xC3EE, 0x5999}, //11308 #CJK UNIFIED IDEOGRAPH
+ {0xC3EF, 0x8511}, //11309 #CJK UNIFIED IDEOGRAPH
+ {0xC3F0, 0x706D}, //11310 #CJK UNIFIED IDEOGRAPH
+ {0xC3F1, 0x6C11}, //11311 #CJK UNIFIED IDEOGRAPH
+ {0xC3F2, 0x62BF}, //11312 #CJK UNIFIED IDEOGRAPH
+ {0xC3F3, 0x76BF}, //11313 #CJK UNIFIED IDEOGRAPH
+ {0xC3F4, 0x654F}, //11314 #CJK UNIFIED IDEOGRAPH
+ {0xC3F5, 0x60AF}, //11315 #CJK UNIFIED IDEOGRAPH
+ {0xC3F6, 0x95FD}, //11316 #CJK UNIFIED IDEOGRAPH
+ {0xC3F7, 0x660E}, //11317 #CJK UNIFIED IDEOGRAPH
+ {0xC3F8, 0x879F}, //11318 #CJK UNIFIED IDEOGRAPH
+ {0xC3F9, 0x9E23}, //11319 #CJK UNIFIED IDEOGRAPH
+ {0xC3FA, 0x94ED}, //11320 #CJK UNIFIED IDEOGRAPH
+ {0xC3FB, 0x540D}, //11321 #CJK UNIFIED IDEOGRAPH
+ {0xC3FC, 0x547D}, //11322 #CJK UNIFIED IDEOGRAPH
+ {0xC3FD, 0x8C2C}, //11323 #CJK UNIFIED IDEOGRAPH
+ {0xC3FE, 0x6478}, //11324 #CJK UNIFIED IDEOGRAPH
+ {0xC440, 0x8140}, //11325 #CJK UNIFIED IDEOGRAPH
+ {0xC441, 0x8141}, //11326 #CJK UNIFIED IDEOGRAPH
+ {0xC442, 0x8142}, //11327 #CJK UNIFIED IDEOGRAPH
+ {0xC443, 0x8143}, //11328 #CJK UNIFIED IDEOGRAPH
+ {0xC444, 0x8144}, //11329 #CJK UNIFIED IDEOGRAPH
+ {0xC445, 0x8145}, //11330 #CJK UNIFIED IDEOGRAPH
+ {0xC446, 0x8147}, //11331 #CJK UNIFIED IDEOGRAPH
+ {0xC447, 0x8149}, //11332 #CJK UNIFIED IDEOGRAPH
+ {0xC448, 0x814D}, //11333 #CJK UNIFIED IDEOGRAPH
+ {0xC449, 0x814E}, //11334 #CJK UNIFIED IDEOGRAPH
+ {0xC44A, 0x814F}, //11335 #CJK UNIFIED IDEOGRAPH
+ {0xC44B, 0x8152}, //11336 #CJK UNIFIED IDEOGRAPH
+ {0xC44C, 0x8156}, //11337 #CJK UNIFIED IDEOGRAPH
+ {0xC44D, 0x8157}, //11338 #CJK UNIFIED IDEOGRAPH
+ {0xC44E, 0x8158}, //11339 #CJK UNIFIED IDEOGRAPH
+ {0xC44F, 0x815B}, //11340 #CJK UNIFIED IDEOGRAPH
+ {0xC450, 0x815C}, //11341 #CJK UNIFIED IDEOGRAPH
+ {0xC451, 0x815D}, //11342 #CJK UNIFIED IDEOGRAPH
+ {0xC452, 0x815E}, //11343 #CJK UNIFIED IDEOGRAPH
+ {0xC453, 0x815F}, //11344 #CJK UNIFIED IDEOGRAPH
+ {0xC454, 0x8161}, //11345 #CJK UNIFIED IDEOGRAPH
+ {0xC455, 0x8162}, //11346 #CJK UNIFIED IDEOGRAPH
+ {0xC456, 0x8163}, //11347 #CJK UNIFIED IDEOGRAPH
+ {0xC457, 0x8164}, //11348 #CJK UNIFIED IDEOGRAPH
+ {0xC458, 0x8166}, //11349 #CJK UNIFIED IDEOGRAPH
+ {0xC459, 0x8168}, //11350 #CJK UNIFIED IDEOGRAPH
+ {0xC45A, 0x816A}, //11351 #CJK UNIFIED IDEOGRAPH
+ {0xC45B, 0x816B}, //11352 #CJK UNIFIED IDEOGRAPH
+ {0xC45C, 0x816C}, //11353 #CJK UNIFIED IDEOGRAPH
+ {0xC45D, 0x816F}, //11354 #CJK UNIFIED IDEOGRAPH
+ {0xC45E, 0x8172}, //11355 #CJK UNIFIED IDEOGRAPH
+ {0xC45F, 0x8173}, //11356 #CJK UNIFIED IDEOGRAPH
+ {0xC460, 0x8175}, //11357 #CJK UNIFIED IDEOGRAPH
+ {0xC461, 0x8176}, //11358 #CJK UNIFIED IDEOGRAPH
+ {0xC462, 0x8177}, //11359 #CJK UNIFIED IDEOGRAPH
+ {0xC463, 0x8178}, //11360 #CJK UNIFIED IDEOGRAPH
+ {0xC464, 0x8181}, //11361 #CJK UNIFIED IDEOGRAPH
+ {0xC465, 0x8183}, //11362 #CJK UNIFIED IDEOGRAPH
+ {0xC466, 0x8184}, //11363 #CJK UNIFIED IDEOGRAPH
+ {0xC467, 0x8185}, //11364 #CJK UNIFIED IDEOGRAPH
+ {0xC468, 0x8186}, //11365 #CJK UNIFIED IDEOGRAPH
+ {0xC469, 0x8187}, //11366 #CJK UNIFIED IDEOGRAPH
+ {0xC46A, 0x8189}, //11367 #CJK UNIFIED IDEOGRAPH
+ {0xC46B, 0x818B}, //11368 #CJK UNIFIED IDEOGRAPH
+ {0xC46C, 0x818C}, //11369 #CJK UNIFIED IDEOGRAPH
+ {0xC46D, 0x818D}, //11370 #CJK UNIFIED IDEOGRAPH
+ {0xC46E, 0x818E}, //11371 #CJK UNIFIED IDEOGRAPH
+ {0xC46F, 0x8190}, //11372 #CJK UNIFIED IDEOGRAPH
+ {0xC470, 0x8192}, //11373 #CJK UNIFIED IDEOGRAPH
+ {0xC471, 0x8193}, //11374 #CJK UNIFIED IDEOGRAPH
+ {0xC472, 0x8194}, //11375 #CJK UNIFIED IDEOGRAPH
+ {0xC473, 0x8195}, //11376 #CJK UNIFIED IDEOGRAPH
+ {0xC474, 0x8196}, //11377 #CJK UNIFIED IDEOGRAPH
+ {0xC475, 0x8197}, //11378 #CJK UNIFIED IDEOGRAPH
+ {0xC476, 0x8199}, //11379 #CJK UNIFIED IDEOGRAPH
+ {0xC477, 0x819A}, //11380 #CJK UNIFIED IDEOGRAPH
+ {0xC478, 0x819E}, //11381 #CJK UNIFIED IDEOGRAPH
+ {0xC479, 0x819F}, //11382 #CJK UNIFIED IDEOGRAPH
+ {0xC47A, 0x81A0}, //11383 #CJK UNIFIED IDEOGRAPH
+ {0xC47B, 0x81A1}, //11384 #CJK UNIFIED IDEOGRAPH
+ {0xC47C, 0x81A2}, //11385 #CJK UNIFIED IDEOGRAPH
+ {0xC47D, 0x81A4}, //11386 #CJK UNIFIED IDEOGRAPH
+ {0xC47E, 0x81A5}, //11387 #CJK UNIFIED IDEOGRAPH
+ {0xC480, 0x81A7}, //11388 #CJK UNIFIED IDEOGRAPH
+ {0xC481, 0x81A9}, //11389 #CJK UNIFIED IDEOGRAPH
+ {0xC482, 0x81AB}, //11390 #CJK UNIFIED IDEOGRAPH
+ {0xC483, 0x81AC}, //11391 #CJK UNIFIED IDEOGRAPH
+ {0xC484, 0x81AD}, //11392 #CJK UNIFIED IDEOGRAPH
+ {0xC485, 0x81AE}, //11393 #CJK UNIFIED IDEOGRAPH
+ {0xC486, 0x81AF}, //11394 #CJK UNIFIED IDEOGRAPH
+ {0xC487, 0x81B0}, //11395 #CJK UNIFIED IDEOGRAPH
+ {0xC488, 0x81B1}, //11396 #CJK UNIFIED IDEOGRAPH
+ {0xC489, 0x81B2}, //11397 #CJK UNIFIED IDEOGRAPH
+ {0xC48A, 0x81B4}, //11398 #CJK UNIFIED IDEOGRAPH
+ {0xC48B, 0x81B5}, //11399 #CJK UNIFIED IDEOGRAPH
+ {0xC48C, 0x81B6}, //11400 #CJK UNIFIED IDEOGRAPH
+ {0xC48D, 0x81B7}, //11401 #CJK UNIFIED IDEOGRAPH
+ {0xC48E, 0x81B8}, //11402 #CJK UNIFIED IDEOGRAPH
+ {0xC48F, 0x81B9}, //11403 #CJK UNIFIED IDEOGRAPH
+ {0xC490, 0x81BC}, //11404 #CJK UNIFIED IDEOGRAPH
+ {0xC491, 0x81BD}, //11405 #CJK UNIFIED IDEOGRAPH
+ {0xC492, 0x81BE}, //11406 #CJK UNIFIED IDEOGRAPH
+ {0xC493, 0x81BF}, //11407 #CJK UNIFIED IDEOGRAPH
+ {0xC494, 0x81C4}, //11408 #CJK UNIFIED IDEOGRAPH
+ {0xC495, 0x81C5}, //11409 #CJK UNIFIED IDEOGRAPH
+ {0xC496, 0x81C7}, //11410 #CJK UNIFIED IDEOGRAPH
+ {0xC497, 0x81C8}, //11411 #CJK UNIFIED IDEOGRAPH
+ {0xC498, 0x81C9}, //11412 #CJK UNIFIED IDEOGRAPH
+ {0xC499, 0x81CB}, //11413 #CJK UNIFIED IDEOGRAPH
+ {0xC49A, 0x81CD}, //11414 #CJK UNIFIED IDEOGRAPH
+ {0xC49B, 0x81CE}, //11415 #CJK UNIFIED IDEOGRAPH
+ {0xC49C, 0x81CF}, //11416 #CJK UNIFIED IDEOGRAPH
+ {0xC49D, 0x81D0}, //11417 #CJK UNIFIED IDEOGRAPH
+ {0xC49E, 0x81D1}, //11418 #CJK UNIFIED IDEOGRAPH
+ {0xC49F, 0x81D2}, //11419 #CJK UNIFIED IDEOGRAPH
+ {0xC4A0, 0x81D3}, //11420 #CJK UNIFIED IDEOGRAPH
+ {0xC4A1, 0x6479}, //11421 #CJK UNIFIED IDEOGRAPH
+ {0xC4A2, 0x8611}, //11422 #CJK UNIFIED IDEOGRAPH
+ {0xC4A3, 0x6A21}, //11423 #CJK UNIFIED IDEOGRAPH
+ {0xC4A4, 0x819C}, //11424 #CJK UNIFIED IDEOGRAPH
+ {0xC4A5, 0x78E8}, //11425 #CJK UNIFIED IDEOGRAPH
+ {0xC4A6, 0x6469}, //11426 #CJK UNIFIED IDEOGRAPH
+ {0xC4A7, 0x9B54}, //11427 #CJK UNIFIED IDEOGRAPH
+ {0xC4A8, 0x62B9}, //11428 #CJK UNIFIED IDEOGRAPH
+ {0xC4A9, 0x672B}, //11429 #CJK UNIFIED IDEOGRAPH
+ {0xC4AA, 0x83AB}, //11430 #CJK UNIFIED IDEOGRAPH
+ {0xC4AB, 0x58A8}, //11431 #CJK UNIFIED IDEOGRAPH
+ {0xC4AC, 0x9ED8}, //11432 #CJK UNIFIED IDEOGRAPH
+ {0xC4AD, 0x6CAB}, //11433 #CJK UNIFIED IDEOGRAPH
+ {0xC4AE, 0x6F20}, //11434 #CJK UNIFIED IDEOGRAPH
+ {0xC4AF, 0x5BDE}, //11435 #CJK UNIFIED IDEOGRAPH
+ {0xC4B0, 0x964C}, //11436 #CJK UNIFIED IDEOGRAPH
+ {0xC4B1, 0x8C0B}, //11437 #CJK UNIFIED IDEOGRAPH
+ {0xC4B2, 0x725F}, //11438 #CJK UNIFIED IDEOGRAPH
+ {0xC4B3, 0x67D0}, //11439 #CJK UNIFIED IDEOGRAPH
+ {0xC4B4, 0x62C7}, //11440 #CJK UNIFIED IDEOGRAPH
+ {0xC4B5, 0x7261}, //11441 #CJK UNIFIED IDEOGRAPH
+ {0xC4B6, 0x4EA9}, //11442 #CJK UNIFIED IDEOGRAPH
+ {0xC4B7, 0x59C6}, //11443 #CJK UNIFIED IDEOGRAPH
+ {0xC4B8, 0x6BCD}, //11444 #CJK UNIFIED IDEOGRAPH
+ {0xC4B9, 0x5893}, //11445 #CJK UNIFIED IDEOGRAPH
+ {0xC4BA, 0x66AE}, //11446 #CJK UNIFIED IDEOGRAPH
+ {0xC4BB, 0x5E55}, //11447 #CJK UNIFIED IDEOGRAPH
+ {0xC4BC, 0x52DF}, //11448 #CJK UNIFIED IDEOGRAPH
+ {0xC4BD, 0x6155}, //11449 #CJK UNIFIED IDEOGRAPH
+ {0xC4BE, 0x6728}, //11450 #CJK UNIFIED IDEOGRAPH
+ {0xC4BF, 0x76EE}, //11451 #CJK UNIFIED IDEOGRAPH
+ {0xC4C0, 0x7766}, //11452 #CJK UNIFIED IDEOGRAPH
+ {0xC4C1, 0x7267}, //11453 #CJK UNIFIED IDEOGRAPH
+ {0xC4C2, 0x7A46}, //11454 #CJK UNIFIED IDEOGRAPH
+ {0xC4C3, 0x62FF}, //11455 #CJK UNIFIED IDEOGRAPH
+ {0xC4C4, 0x54EA}, //11456 #CJK UNIFIED IDEOGRAPH
+ {0xC4C5, 0x5450}, //11457 #CJK UNIFIED IDEOGRAPH
+ {0xC4C6, 0x94A0}, //11458 #CJK UNIFIED IDEOGRAPH
+ {0xC4C7, 0x90A3}, //11459 #CJK UNIFIED IDEOGRAPH
+ {0xC4C8, 0x5A1C}, //11460 #CJK UNIFIED IDEOGRAPH
+ {0xC4C9, 0x7EB3}, //11461 #CJK UNIFIED IDEOGRAPH
+ {0xC4CA, 0x6C16}, //11462 #CJK UNIFIED IDEOGRAPH
+ {0xC4CB, 0x4E43}, //11463 #CJK UNIFIED IDEOGRAPH
+ {0xC4CC, 0x5976}, //11464 #CJK UNIFIED IDEOGRAPH
+ {0xC4CD, 0x8010}, //11465 #CJK UNIFIED IDEOGRAPH
+ {0xC4CE, 0x5948}, //11466 #CJK UNIFIED IDEOGRAPH
+ {0xC4CF, 0x5357}, //11467 #CJK UNIFIED IDEOGRAPH
+ {0xC4D0, 0x7537}, //11468 #CJK UNIFIED IDEOGRAPH
+ {0xC4D1, 0x96BE}, //11469 #CJK UNIFIED IDEOGRAPH
+ {0xC4D2, 0x56CA}, //11470 #CJK UNIFIED IDEOGRAPH
+ {0xC4D3, 0x6320}, //11471 #CJK UNIFIED IDEOGRAPH
+ {0xC4D4, 0x8111}, //11472 #CJK UNIFIED IDEOGRAPH
+ {0xC4D5, 0x607C}, //11473 #CJK UNIFIED IDEOGRAPH
+ {0xC4D6, 0x95F9}, //11474 #CJK UNIFIED IDEOGRAPH
+ {0xC4D7, 0x6DD6}, //11475 #CJK UNIFIED IDEOGRAPH
+ {0xC4D8, 0x5462}, //11476 #CJK UNIFIED IDEOGRAPH
+ {0xC4D9, 0x9981}, //11477 #CJK UNIFIED IDEOGRAPH
+ {0xC4DA, 0x5185}, //11478 #CJK UNIFIED IDEOGRAPH
+ {0xC4DB, 0x5AE9}, //11479 #CJK UNIFIED IDEOGRAPH
+ {0xC4DC, 0x80FD}, //11480 #CJK UNIFIED IDEOGRAPH
+ {0xC4DD, 0x59AE}, //11481 #CJK UNIFIED IDEOGRAPH
+ {0xC4DE, 0x9713}, //11482 #CJK UNIFIED IDEOGRAPH
+ {0xC4DF, 0x502A}, //11483 #CJK UNIFIED IDEOGRAPH
+ {0xC4E0, 0x6CE5}, //11484 #CJK UNIFIED IDEOGRAPH
+ {0xC4E1, 0x5C3C}, //11485 #CJK UNIFIED IDEOGRAPH
+ {0xC4E2, 0x62DF}, //11486 #CJK UNIFIED IDEOGRAPH
+ {0xC4E3, 0x4F60}, //11487 #CJK UNIFIED IDEOGRAPH
+ {0xC4E4, 0x533F}, //11488 #CJK UNIFIED IDEOGRAPH
+ {0xC4E5, 0x817B}, //11489 #CJK UNIFIED IDEOGRAPH
+ {0xC4E6, 0x9006}, //11490 #CJK UNIFIED IDEOGRAPH
+ {0xC4E7, 0x6EBA}, //11491 #CJK UNIFIED IDEOGRAPH
+ {0xC4E8, 0x852B}, //11492 #CJK UNIFIED IDEOGRAPH
+ {0xC4E9, 0x62C8}, //11493 #CJK UNIFIED IDEOGRAPH
+ {0xC4EA, 0x5E74}, //11494 #CJK UNIFIED IDEOGRAPH
+ {0xC4EB, 0x78BE}, //11495 #CJK UNIFIED IDEOGRAPH
+ {0xC4EC, 0x64B5}, //11496 #CJK UNIFIED IDEOGRAPH
+ {0xC4ED, 0x637B}, //11497 #CJK UNIFIED IDEOGRAPH
+ {0xC4EE, 0x5FF5}, //11498 #CJK UNIFIED IDEOGRAPH
+ {0xC4EF, 0x5A18}, //11499 #CJK UNIFIED IDEOGRAPH
+ {0xC4F0, 0x917F}, //11500 #CJK UNIFIED IDEOGRAPH
+ {0xC4F1, 0x9E1F}, //11501 #CJK UNIFIED IDEOGRAPH
+ {0xC4F2, 0x5C3F}, //11502 #CJK UNIFIED IDEOGRAPH
+ {0xC4F3, 0x634F}, //11503 #CJK UNIFIED IDEOGRAPH
+ {0xC4F4, 0x8042}, //11504 #CJK UNIFIED IDEOGRAPH
+ {0xC4F5, 0x5B7D}, //11505 #CJK UNIFIED IDEOGRAPH
+ {0xC4F6, 0x556E}, //11506 #CJK UNIFIED IDEOGRAPH
+ {0xC4F7, 0x954A}, //11507 #CJK UNIFIED IDEOGRAPH
+ {0xC4F8, 0x954D}, //11508 #CJK UNIFIED IDEOGRAPH
+ {0xC4F9, 0x6D85}, //11509 #CJK UNIFIED IDEOGRAPH
+ {0xC4FA, 0x60A8}, //11510 #CJK UNIFIED IDEOGRAPH
+ {0xC4FB, 0x67E0}, //11511 #CJK UNIFIED IDEOGRAPH
+ {0xC4FC, 0x72DE}, //11512 #CJK UNIFIED IDEOGRAPH
+ {0xC4FD, 0x51DD}, //11513 #CJK UNIFIED IDEOGRAPH
+ {0xC4FE, 0x5B81}, //11514 #CJK UNIFIED IDEOGRAPH
+ {0xC540, 0x81D4}, //11515 #CJK UNIFIED IDEOGRAPH
+ {0xC541, 0x81D5}, //11516 #CJK UNIFIED IDEOGRAPH
+ {0xC542, 0x81D6}, //11517 #CJK UNIFIED IDEOGRAPH
+ {0xC543, 0x81D7}, //11518 #CJK UNIFIED IDEOGRAPH
+ {0xC544, 0x81D8}, //11519 #CJK UNIFIED IDEOGRAPH
+ {0xC545, 0x81D9}, //11520 #CJK UNIFIED IDEOGRAPH
+ {0xC546, 0x81DA}, //11521 #CJK UNIFIED IDEOGRAPH
+ {0xC547, 0x81DB}, //11522 #CJK UNIFIED IDEOGRAPH
+ {0xC548, 0x81DC}, //11523 #CJK UNIFIED IDEOGRAPH
+ {0xC549, 0x81DD}, //11524 #CJK UNIFIED IDEOGRAPH
+ {0xC54A, 0x81DE}, //11525 #CJK UNIFIED IDEOGRAPH
+ {0xC54B, 0x81DF}, //11526 #CJK UNIFIED IDEOGRAPH
+ {0xC54C, 0x81E0}, //11527 #CJK UNIFIED IDEOGRAPH
+ {0xC54D, 0x81E1}, //11528 #CJK UNIFIED IDEOGRAPH
+ {0xC54E, 0x81E2}, //11529 #CJK UNIFIED IDEOGRAPH
+ {0xC54F, 0x81E4}, //11530 #CJK UNIFIED IDEOGRAPH
+ {0xC550, 0x81E5}, //11531 #CJK UNIFIED IDEOGRAPH
+ {0xC551, 0x81E6}, //11532 #CJK UNIFIED IDEOGRAPH
+ {0xC552, 0x81E8}, //11533 #CJK UNIFIED IDEOGRAPH
+ {0xC553, 0x81E9}, //11534 #CJK UNIFIED IDEOGRAPH
+ {0xC554, 0x81EB}, //11535 #CJK UNIFIED IDEOGRAPH
+ {0xC555, 0x81EE}, //11536 #CJK UNIFIED IDEOGRAPH
+ {0xC556, 0x81EF}, //11537 #CJK UNIFIED IDEOGRAPH
+ {0xC557, 0x81F0}, //11538 #CJK UNIFIED IDEOGRAPH
+ {0xC558, 0x81F1}, //11539 #CJK UNIFIED IDEOGRAPH
+ {0xC559, 0x81F2}, //11540 #CJK UNIFIED IDEOGRAPH
+ {0xC55A, 0x81F5}, //11541 #CJK UNIFIED IDEOGRAPH
+ {0xC55B, 0x81F6}, //11542 #CJK UNIFIED IDEOGRAPH
+ {0xC55C, 0x81F7}, //11543 #CJK UNIFIED IDEOGRAPH
+ {0xC55D, 0x81F8}, //11544 #CJK UNIFIED IDEOGRAPH
+ {0xC55E, 0x81F9}, //11545 #CJK UNIFIED IDEOGRAPH
+ {0xC55F, 0x81FA}, //11546 #CJK UNIFIED IDEOGRAPH
+ {0xC560, 0x81FD}, //11547 #CJK UNIFIED IDEOGRAPH
+ {0xC561, 0x81FF}, //11548 #CJK UNIFIED IDEOGRAPH
+ {0xC562, 0x8203}, //11549 #CJK UNIFIED IDEOGRAPH
+ {0xC563, 0x8207}, //11550 #CJK UNIFIED IDEOGRAPH
+ {0xC564, 0x8208}, //11551 #CJK UNIFIED IDEOGRAPH
+ {0xC565, 0x8209}, //11552 #CJK UNIFIED IDEOGRAPH
+ {0xC566, 0x820A}, //11553 #CJK UNIFIED IDEOGRAPH
+ {0xC567, 0x820B}, //11554 #CJK UNIFIED IDEOGRAPH
+ {0xC568, 0x820E}, //11555 #CJK UNIFIED IDEOGRAPH
+ {0xC569, 0x820F}, //11556 #CJK UNIFIED IDEOGRAPH
+ {0xC56A, 0x8211}, //11557 #CJK UNIFIED IDEOGRAPH
+ {0xC56B, 0x8213}, //11558 #CJK UNIFIED IDEOGRAPH
+ {0xC56C, 0x8215}, //11559 #CJK UNIFIED IDEOGRAPH
+ {0xC56D, 0x8216}, //11560 #CJK UNIFIED IDEOGRAPH
+ {0xC56E, 0x8217}, //11561 #CJK UNIFIED IDEOGRAPH
+ {0xC56F, 0x8218}, //11562 #CJK UNIFIED IDEOGRAPH
+ {0xC570, 0x8219}, //11563 #CJK UNIFIED IDEOGRAPH
+ {0xC571, 0x821A}, //11564 #CJK UNIFIED IDEOGRAPH
+ {0xC572, 0x821D}, //11565 #CJK UNIFIED IDEOGRAPH
+ {0xC573, 0x8220}, //11566 #CJK UNIFIED IDEOGRAPH
+ {0xC574, 0x8224}, //11567 #CJK UNIFIED IDEOGRAPH
+ {0xC575, 0x8225}, //11568 #CJK UNIFIED IDEOGRAPH
+ {0xC576, 0x8226}, //11569 #CJK UNIFIED IDEOGRAPH
+ {0xC577, 0x8227}, //11570 #CJK UNIFIED IDEOGRAPH
+ {0xC578, 0x8229}, //11571 #CJK UNIFIED IDEOGRAPH
+ {0xC579, 0x822E}, //11572 #CJK UNIFIED IDEOGRAPH
+ {0xC57A, 0x8232}, //11573 #CJK UNIFIED IDEOGRAPH
+ {0xC57B, 0x823A}, //11574 #CJK UNIFIED IDEOGRAPH
+ {0xC57C, 0x823C}, //11575 #CJK UNIFIED IDEOGRAPH
+ {0xC57D, 0x823D}, //11576 #CJK UNIFIED IDEOGRAPH
+ {0xC57E, 0x823F}, //11577 #CJK UNIFIED IDEOGRAPH
+ {0xC580, 0x8240}, //11578 #CJK UNIFIED IDEOGRAPH
+ {0xC581, 0x8241}, //11579 #CJK UNIFIED IDEOGRAPH
+ {0xC582, 0x8242}, //11580 #CJK UNIFIED IDEOGRAPH
+ {0xC583, 0x8243}, //11581 #CJK UNIFIED IDEOGRAPH
+ {0xC584, 0x8245}, //11582 #CJK UNIFIED IDEOGRAPH
+ {0xC585, 0x8246}, //11583 #CJK UNIFIED IDEOGRAPH
+ {0xC586, 0x8248}, //11584 #CJK UNIFIED IDEOGRAPH
+ {0xC587, 0x824A}, //11585 #CJK UNIFIED IDEOGRAPH
+ {0xC588, 0x824C}, //11586 #CJK UNIFIED IDEOGRAPH
+ {0xC589, 0x824D}, //11587 #CJK UNIFIED IDEOGRAPH
+ {0xC58A, 0x824E}, //11588 #CJK UNIFIED IDEOGRAPH
+ {0xC58B, 0x8250}, //11589 #CJK UNIFIED IDEOGRAPH
+ {0xC58C, 0x8251}, //11590 #CJK UNIFIED IDEOGRAPH
+ {0xC58D, 0x8252}, //11591 #CJK UNIFIED IDEOGRAPH
+ {0xC58E, 0x8253}, //11592 #CJK UNIFIED IDEOGRAPH
+ {0xC58F, 0x8254}, //11593 #CJK UNIFIED IDEOGRAPH
+ {0xC590, 0x8255}, //11594 #CJK UNIFIED IDEOGRAPH
+ {0xC591, 0x8256}, //11595 #CJK UNIFIED IDEOGRAPH
+ {0xC592, 0x8257}, //11596 #CJK UNIFIED IDEOGRAPH
+ {0xC593, 0x8259}, //11597 #CJK UNIFIED IDEOGRAPH
+ {0xC594, 0x825B}, //11598 #CJK UNIFIED IDEOGRAPH
+ {0xC595, 0x825C}, //11599 #CJK UNIFIED IDEOGRAPH
+ {0xC596, 0x825D}, //11600 #CJK UNIFIED IDEOGRAPH
+ {0xC597, 0x825E}, //11601 #CJK UNIFIED IDEOGRAPH
+ {0xC598, 0x8260}, //11602 #CJK UNIFIED IDEOGRAPH
+ {0xC599, 0x8261}, //11603 #CJK UNIFIED IDEOGRAPH
+ {0xC59A, 0x8262}, //11604 #CJK UNIFIED IDEOGRAPH
+ {0xC59B, 0x8263}, //11605 #CJK UNIFIED IDEOGRAPH
+ {0xC59C, 0x8264}, //11606 #CJK UNIFIED IDEOGRAPH
+ {0xC59D, 0x8265}, //11607 #CJK UNIFIED IDEOGRAPH
+ {0xC59E, 0x8266}, //11608 #CJK UNIFIED IDEOGRAPH
+ {0xC59F, 0x8267}, //11609 #CJK UNIFIED IDEOGRAPH
+ {0xC5A0, 0x8269}, //11610 #CJK UNIFIED IDEOGRAPH
+ {0xC5A1, 0x62E7}, //11611 #CJK UNIFIED IDEOGRAPH
+ {0xC5A2, 0x6CDE}, //11612 #CJK UNIFIED IDEOGRAPH
+ {0xC5A3, 0x725B}, //11613 #CJK UNIFIED IDEOGRAPH
+ {0xC5A4, 0x626D}, //11614 #CJK UNIFIED IDEOGRAPH
+ {0xC5A5, 0x94AE}, //11615 #CJK UNIFIED IDEOGRAPH
+ {0xC5A6, 0x7EBD}, //11616 #CJK UNIFIED IDEOGRAPH
+ {0xC5A7, 0x8113}, //11617 #CJK UNIFIED IDEOGRAPH
+ {0xC5A8, 0x6D53}, //11618 #CJK UNIFIED IDEOGRAPH
+ {0xC5A9, 0x519C}, //11619 #CJK UNIFIED IDEOGRAPH
+ {0xC5AA, 0x5F04}, //11620 #CJK UNIFIED IDEOGRAPH
+ {0xC5AB, 0x5974}, //11621 #CJK UNIFIED IDEOGRAPH
+ {0xC5AC, 0x52AA}, //11622 #CJK UNIFIED IDEOGRAPH
+ {0xC5AD, 0x6012}, //11623 #CJK UNIFIED IDEOGRAPH
+ {0xC5AE, 0x5973}, //11624 #CJK UNIFIED IDEOGRAPH
+ {0xC5AF, 0x6696}, //11625 #CJK UNIFIED IDEOGRAPH
+ {0xC5B0, 0x8650}, //11626 #CJK UNIFIED IDEOGRAPH
+ {0xC5B1, 0x759F}, //11627 #CJK UNIFIED IDEOGRAPH
+ {0xC5B2, 0x632A}, //11628 #CJK UNIFIED IDEOGRAPH
+ {0xC5B3, 0x61E6}, //11629 #CJK UNIFIED IDEOGRAPH
+ {0xC5B4, 0x7CEF}, //11630 #CJK UNIFIED IDEOGRAPH
+ {0xC5B5, 0x8BFA}, //11631 #CJK UNIFIED IDEOGRAPH
+ {0xC5B6, 0x54E6}, //11632 #CJK UNIFIED IDEOGRAPH
+ {0xC5B7, 0x6B27}, //11633 #CJK UNIFIED IDEOGRAPH
+ {0xC5B8, 0x9E25}, //11634 #CJK UNIFIED IDEOGRAPH
+ {0xC5B9, 0x6BB4}, //11635 #CJK UNIFIED IDEOGRAPH
+ {0xC5BA, 0x85D5}, //11636 #CJK UNIFIED IDEOGRAPH
+ {0xC5BB, 0x5455}, //11637 #CJK UNIFIED IDEOGRAPH
+ {0xC5BC, 0x5076}, //11638 #CJK UNIFIED IDEOGRAPH
+ {0xC5BD, 0x6CA4}, //11639 #CJK UNIFIED IDEOGRAPH
+ {0xC5BE, 0x556A}, //11640 #CJK UNIFIED IDEOGRAPH
+ {0xC5BF, 0x8DB4}, //11641 #CJK UNIFIED IDEOGRAPH
+ {0xC5C0, 0x722C}, //11642 #CJK UNIFIED IDEOGRAPH
+ {0xC5C1, 0x5E15}, //11643 #CJK UNIFIED IDEOGRAPH
+ {0xC5C2, 0x6015}, //11644 #CJK UNIFIED IDEOGRAPH
+ {0xC5C3, 0x7436}, //11645 #CJK UNIFIED IDEOGRAPH
+ {0xC5C4, 0x62CD}, //11646 #CJK UNIFIED IDEOGRAPH
+ {0xC5C5, 0x6392}, //11647 #CJK UNIFIED IDEOGRAPH
+ {0xC5C6, 0x724C}, //11648 #CJK UNIFIED IDEOGRAPH
+ {0xC5C7, 0x5F98}, //11649 #CJK UNIFIED IDEOGRAPH
+ {0xC5C8, 0x6E43}, //11650 #CJK UNIFIED IDEOGRAPH
+ {0xC5C9, 0x6D3E}, //11651 #CJK UNIFIED IDEOGRAPH
+ {0xC5CA, 0x6500}, //11652 #CJK UNIFIED IDEOGRAPH
+ {0xC5CB, 0x6F58}, //11653 #CJK UNIFIED IDEOGRAPH
+ {0xC5CC, 0x76D8}, //11654 #CJK UNIFIED IDEOGRAPH
+ {0xC5CD, 0x78D0}, //11655 #CJK UNIFIED IDEOGRAPH
+ {0xC5CE, 0x76FC}, //11656 #CJK UNIFIED IDEOGRAPH
+ {0xC5CF, 0x7554}, //11657 #CJK UNIFIED IDEOGRAPH
+ {0xC5D0, 0x5224}, //11658 #CJK UNIFIED IDEOGRAPH
+ {0xC5D1, 0x53DB}, //11659 #CJK UNIFIED IDEOGRAPH
+ {0xC5D2, 0x4E53}, //11660 #CJK UNIFIED IDEOGRAPH
+ {0xC5D3, 0x5E9E}, //11661 #CJK UNIFIED IDEOGRAPH
+ {0xC5D4, 0x65C1}, //11662 #CJK UNIFIED IDEOGRAPH
+ {0xC5D5, 0x802A}, //11663 #CJK UNIFIED IDEOGRAPH
+ {0xC5D6, 0x80D6}, //11664 #CJK UNIFIED IDEOGRAPH
+ {0xC5D7, 0x629B}, //11665 #CJK UNIFIED IDEOGRAPH
+ {0xC5D8, 0x5486}, //11666 #CJK UNIFIED IDEOGRAPH
+ {0xC5D9, 0x5228}, //11667 #CJK UNIFIED IDEOGRAPH
+ {0xC5DA, 0x70AE}, //11668 #CJK UNIFIED IDEOGRAPH
+ {0xC5DB, 0x888D}, //11669 #CJK UNIFIED IDEOGRAPH
+ {0xC5DC, 0x8DD1}, //11670 #CJK UNIFIED IDEOGRAPH
+ {0xC5DD, 0x6CE1}, //11671 #CJK UNIFIED IDEOGRAPH
+ {0xC5DE, 0x5478}, //11672 #CJK UNIFIED IDEOGRAPH
+ {0xC5DF, 0x80DA}, //11673 #CJK UNIFIED IDEOGRAPH
+ {0xC5E0, 0x57F9}, //11674 #CJK UNIFIED IDEOGRAPH
+ {0xC5E1, 0x88F4}, //11675 #CJK UNIFIED IDEOGRAPH
+ {0xC5E2, 0x8D54}, //11676 #CJK UNIFIED IDEOGRAPH
+ {0xC5E3, 0x966A}, //11677 #CJK UNIFIED IDEOGRAPH
+ {0xC5E4, 0x914D}, //11678 #CJK UNIFIED IDEOGRAPH
+ {0xC5E5, 0x4F69}, //11679 #CJK UNIFIED IDEOGRAPH
+ {0xC5E6, 0x6C9B}, //11680 #CJK UNIFIED IDEOGRAPH
+ {0xC5E7, 0x55B7}, //11681 #CJK UNIFIED IDEOGRAPH
+ {0xC5E8, 0x76C6}, //11682 #CJK UNIFIED IDEOGRAPH
+ {0xC5E9, 0x7830}, //11683 #CJK UNIFIED IDEOGRAPH
+ {0xC5EA, 0x62A8}, //11684 #CJK UNIFIED IDEOGRAPH
+ {0xC5EB, 0x70F9}, //11685 #CJK UNIFIED IDEOGRAPH
+ {0xC5EC, 0x6F8E}, //11686 #CJK UNIFIED IDEOGRAPH
+ {0xC5ED, 0x5F6D}, //11687 #CJK UNIFIED IDEOGRAPH
+ {0xC5EE, 0x84EC}, //11688 #CJK UNIFIED IDEOGRAPH
+ {0xC5EF, 0x68DA}, //11689 #CJK UNIFIED IDEOGRAPH
+ {0xC5F0, 0x787C}, //11690 #CJK UNIFIED IDEOGRAPH
+ {0xC5F1, 0x7BF7}, //11691 #CJK UNIFIED IDEOGRAPH
+ {0xC5F2, 0x81A8}, //11692 #CJK UNIFIED IDEOGRAPH
+ {0xC5F3, 0x670B}, //11693 #CJK UNIFIED IDEOGRAPH
+ {0xC5F4, 0x9E4F}, //11694 #CJK UNIFIED IDEOGRAPH
+ {0xC5F5, 0x6367}, //11695 #CJK UNIFIED IDEOGRAPH
+ {0xC5F6, 0x78B0}, //11696 #CJK UNIFIED IDEOGRAPH
+ {0xC5F7, 0x576F}, //11697 #CJK UNIFIED IDEOGRAPH
+ {0xC5F8, 0x7812}, //11698 #CJK UNIFIED IDEOGRAPH
+ {0xC5F9, 0x9739}, //11699 #CJK UNIFIED IDEOGRAPH
+ {0xC5FA, 0x6279}, //11700 #CJK UNIFIED IDEOGRAPH
+ {0xC5FB, 0x62AB}, //11701 #CJK UNIFIED IDEOGRAPH
+ {0xC5FC, 0x5288}, //11702 #CJK UNIFIED IDEOGRAPH
+ {0xC5FD, 0x7435}, //11703 #CJK UNIFIED IDEOGRAPH
+ {0xC5FE, 0x6BD7}, //11704 #CJK UNIFIED IDEOGRAPH
+ {0xC640, 0x826A}, //11705 #CJK UNIFIED IDEOGRAPH
+ {0xC641, 0x826B}, //11706 #CJK UNIFIED IDEOGRAPH
+ {0xC642, 0x826C}, //11707 #CJK UNIFIED IDEOGRAPH
+ {0xC643, 0x826D}, //11708 #CJK UNIFIED IDEOGRAPH
+ {0xC644, 0x8271}, //11709 #CJK UNIFIED IDEOGRAPH
+ {0xC645, 0x8275}, //11710 #CJK UNIFIED IDEOGRAPH
+ {0xC646, 0x8276}, //11711 #CJK UNIFIED IDEOGRAPH
+ {0xC647, 0x8277}, //11712 #CJK UNIFIED IDEOGRAPH
+ {0xC648, 0x8278}, //11713 #CJK UNIFIED IDEOGRAPH
+ {0xC649, 0x827B}, //11714 #CJK UNIFIED IDEOGRAPH
+ {0xC64A, 0x827C}, //11715 #CJK UNIFIED IDEOGRAPH
+ {0xC64B, 0x8280}, //11716 #CJK UNIFIED IDEOGRAPH
+ {0xC64C, 0x8281}, //11717 #CJK UNIFIED IDEOGRAPH
+ {0xC64D, 0x8283}, //11718 #CJK UNIFIED IDEOGRAPH
+ {0xC64E, 0x8285}, //11719 #CJK UNIFIED IDEOGRAPH
+ {0xC64F, 0x8286}, //11720 #CJK UNIFIED IDEOGRAPH
+ {0xC650, 0x8287}, //11721 #CJK UNIFIED IDEOGRAPH
+ {0xC651, 0x8289}, //11722 #CJK UNIFIED IDEOGRAPH
+ {0xC652, 0x828C}, //11723 #CJK UNIFIED IDEOGRAPH
+ {0xC653, 0x8290}, //11724 #CJK UNIFIED IDEOGRAPH
+ {0xC654, 0x8293}, //11725 #CJK UNIFIED IDEOGRAPH
+ {0xC655, 0x8294}, //11726 #CJK UNIFIED IDEOGRAPH
+ {0xC656, 0x8295}, //11727 #CJK UNIFIED IDEOGRAPH
+ {0xC657, 0x8296}, //11728 #CJK UNIFIED IDEOGRAPH
+ {0xC658, 0x829A}, //11729 #CJK UNIFIED IDEOGRAPH
+ {0xC659, 0x829B}, //11730 #CJK UNIFIED IDEOGRAPH
+ {0xC65A, 0x829E}, //11731 #CJK UNIFIED IDEOGRAPH
+ {0xC65B, 0x82A0}, //11732 #CJK UNIFIED IDEOGRAPH
+ {0xC65C, 0x82A2}, //11733 #CJK UNIFIED IDEOGRAPH
+ {0xC65D, 0x82A3}, //11734 #CJK UNIFIED IDEOGRAPH
+ {0xC65E, 0x82A7}, //11735 #CJK UNIFIED IDEOGRAPH
+ {0xC65F, 0x82B2}, //11736 #CJK UNIFIED IDEOGRAPH
+ {0xC660, 0x82B5}, //11737 #CJK UNIFIED IDEOGRAPH
+ {0xC661, 0x82B6}, //11738 #CJK UNIFIED IDEOGRAPH
+ {0xC662, 0x82BA}, //11739 #CJK UNIFIED IDEOGRAPH
+ {0xC663, 0x82BB}, //11740 #CJK UNIFIED IDEOGRAPH
+ {0xC664, 0x82BC}, //11741 #CJK UNIFIED IDEOGRAPH
+ {0xC665, 0x82BF}, //11742 #CJK UNIFIED IDEOGRAPH
+ {0xC666, 0x82C0}, //11743 #CJK UNIFIED IDEOGRAPH
+ {0xC667, 0x82C2}, //11744 #CJK UNIFIED IDEOGRAPH
+ {0xC668, 0x82C3}, //11745 #CJK UNIFIED IDEOGRAPH
+ {0xC669, 0x82C5}, //11746 #CJK UNIFIED IDEOGRAPH
+ {0xC66A, 0x82C6}, //11747 #CJK UNIFIED IDEOGRAPH
+ {0xC66B, 0x82C9}, //11748 #CJK UNIFIED IDEOGRAPH
+ {0xC66C, 0x82D0}, //11749 #CJK UNIFIED IDEOGRAPH
+ {0xC66D, 0x82D6}, //11750 #CJK UNIFIED IDEOGRAPH
+ {0xC66E, 0x82D9}, //11751 #CJK UNIFIED IDEOGRAPH
+ {0xC66F, 0x82DA}, //11752 #CJK UNIFIED IDEOGRAPH
+ {0xC670, 0x82DD}, //11753 #CJK UNIFIED IDEOGRAPH
+ {0xC671, 0x82E2}, //11754 #CJK UNIFIED IDEOGRAPH
+ {0xC672, 0x82E7}, //11755 #CJK UNIFIED IDEOGRAPH
+ {0xC673, 0x82E8}, //11756 #CJK UNIFIED IDEOGRAPH
+ {0xC674, 0x82E9}, //11757 #CJK UNIFIED IDEOGRAPH
+ {0xC675, 0x82EA}, //11758 #CJK UNIFIED IDEOGRAPH
+ {0xC676, 0x82EC}, //11759 #CJK UNIFIED IDEOGRAPH
+ {0xC677, 0x82ED}, //11760 #CJK UNIFIED IDEOGRAPH
+ {0xC678, 0x82EE}, //11761 #CJK UNIFIED IDEOGRAPH
+ {0xC679, 0x82F0}, //11762 #CJK UNIFIED IDEOGRAPH
+ {0xC67A, 0x82F2}, //11763 #CJK UNIFIED IDEOGRAPH
+ {0xC67B, 0x82F3}, //11764 #CJK UNIFIED IDEOGRAPH
+ {0xC67C, 0x82F5}, //11765 #CJK UNIFIED IDEOGRAPH
+ {0xC67D, 0x82F6}, //11766 #CJK UNIFIED IDEOGRAPH
+ {0xC67E, 0x82F8}, //11767 #CJK UNIFIED IDEOGRAPH
+ {0xC680, 0x82FA}, //11768 #CJK UNIFIED IDEOGRAPH
+ {0xC681, 0x82FC}, //11769 #CJK UNIFIED IDEOGRAPH
+ {0xC682, 0x82FD}, //11770 #CJK UNIFIED IDEOGRAPH
+ {0xC683, 0x82FE}, //11771 #CJK UNIFIED IDEOGRAPH
+ {0xC684, 0x82FF}, //11772 #CJK UNIFIED IDEOGRAPH
+ {0xC685, 0x8300}, //11773 #CJK UNIFIED IDEOGRAPH
+ {0xC686, 0x830A}, //11774 #CJK UNIFIED IDEOGRAPH
+ {0xC687, 0x830B}, //11775 #CJK UNIFIED IDEOGRAPH
+ {0xC688, 0x830D}, //11776 #CJK UNIFIED IDEOGRAPH
+ {0xC689, 0x8310}, //11777 #CJK UNIFIED IDEOGRAPH
+ {0xC68A, 0x8312}, //11778 #CJK UNIFIED IDEOGRAPH
+ {0xC68B, 0x8313}, //11779 #CJK UNIFIED IDEOGRAPH
+ {0xC68C, 0x8316}, //11780 #CJK UNIFIED IDEOGRAPH
+ {0xC68D, 0x8318}, //11781 #CJK UNIFIED IDEOGRAPH
+ {0xC68E, 0x8319}, //11782 #CJK UNIFIED IDEOGRAPH
+ {0xC68F, 0x831D}, //11783 #CJK UNIFIED IDEOGRAPH
+ {0xC690, 0x831E}, //11784 #CJK UNIFIED IDEOGRAPH
+ {0xC691, 0x831F}, //11785 #CJK UNIFIED IDEOGRAPH
+ {0xC692, 0x8320}, //11786 #CJK UNIFIED IDEOGRAPH
+ {0xC693, 0x8321}, //11787 #CJK UNIFIED IDEOGRAPH
+ {0xC694, 0x8322}, //11788 #CJK UNIFIED IDEOGRAPH
+ {0xC695, 0x8323}, //11789 #CJK UNIFIED IDEOGRAPH
+ {0xC696, 0x8324}, //11790 #CJK UNIFIED IDEOGRAPH
+ {0xC697, 0x8325}, //11791 #CJK UNIFIED IDEOGRAPH
+ {0xC698, 0x8326}, //11792 #CJK UNIFIED IDEOGRAPH
+ {0xC699, 0x8329}, //11793 #CJK UNIFIED IDEOGRAPH
+ {0xC69A, 0x832A}, //11794 #CJK UNIFIED IDEOGRAPH
+ {0xC69B, 0x832E}, //11795 #CJK UNIFIED IDEOGRAPH
+ {0xC69C, 0x8330}, //11796 #CJK UNIFIED IDEOGRAPH
+ {0xC69D, 0x8332}, //11797 #CJK UNIFIED IDEOGRAPH
+ {0xC69E, 0x8337}, //11798 #CJK UNIFIED IDEOGRAPH
+ {0xC69F, 0x833B}, //11799 #CJK UNIFIED IDEOGRAPH
+ {0xC6A0, 0x833D}, //11800 #CJK UNIFIED IDEOGRAPH
+ {0xC6A1, 0x5564}, //11801 #CJK UNIFIED IDEOGRAPH
+ {0xC6A2, 0x813E}, //11802 #CJK UNIFIED IDEOGRAPH
+ {0xC6A3, 0x75B2}, //11803 #CJK UNIFIED IDEOGRAPH
+ {0xC6A4, 0x76AE}, //11804 #CJK UNIFIED IDEOGRAPH
+ {0xC6A5, 0x5339}, //11805 #CJK UNIFIED IDEOGRAPH
+ {0xC6A6, 0x75DE}, //11806 #CJK UNIFIED IDEOGRAPH
+ {0xC6A7, 0x50FB}, //11807 #CJK UNIFIED IDEOGRAPH
+ {0xC6A8, 0x5C41}, //11808 #CJK UNIFIED IDEOGRAPH
+ {0xC6A9, 0x8B6C}, //11809 #CJK UNIFIED IDEOGRAPH
+ {0xC6AA, 0x7BC7}, //11810 #CJK UNIFIED IDEOGRAPH
+ {0xC6AB, 0x504F}, //11811 #CJK UNIFIED IDEOGRAPH
+ {0xC6AC, 0x7247}, //11812 #CJK UNIFIED IDEOGRAPH
+ {0xC6AD, 0x9A97}, //11813 #CJK UNIFIED IDEOGRAPH
+ {0xC6AE, 0x98D8}, //11814 #CJK UNIFIED IDEOGRAPH
+ {0xC6AF, 0x6F02}, //11815 #CJK UNIFIED IDEOGRAPH
+ {0xC6B0, 0x74E2}, //11816 #CJK UNIFIED IDEOGRAPH
+ {0xC6B1, 0x7968}, //11817 #CJK UNIFIED IDEOGRAPH
+ {0xC6B2, 0x6487}, //11818 #CJK UNIFIED IDEOGRAPH
+ {0xC6B3, 0x77A5}, //11819 #CJK UNIFIED IDEOGRAPH
+ {0xC6B4, 0x62FC}, //11820 #CJK UNIFIED IDEOGRAPH
+ {0xC6B5, 0x9891}, //11821 #CJK UNIFIED IDEOGRAPH
+ {0xC6B6, 0x8D2B}, //11822 #CJK UNIFIED IDEOGRAPH
+ {0xC6B7, 0x54C1}, //11823 #CJK UNIFIED IDEOGRAPH
+ {0xC6B8, 0x8058}, //11824 #CJK UNIFIED IDEOGRAPH
+ {0xC6B9, 0x4E52}, //11825 #CJK UNIFIED IDEOGRAPH
+ {0xC6BA, 0x576A}, //11826 #CJK UNIFIED IDEOGRAPH
+ {0xC6BB, 0x82F9}, //11827 #CJK UNIFIED IDEOGRAPH
+ {0xC6BC, 0x840D}, //11828 #CJK UNIFIED IDEOGRAPH
+ {0xC6BD, 0x5E73}, //11829 #CJK UNIFIED IDEOGRAPH
+ {0xC6BE, 0x51ED}, //11830 #CJK UNIFIED IDEOGRAPH
+ {0xC6BF, 0x74F6}, //11831 #CJK UNIFIED IDEOGRAPH
+ {0xC6C0, 0x8BC4}, //11832 #CJK UNIFIED IDEOGRAPH
+ {0xC6C1, 0x5C4F}, //11833 #CJK UNIFIED IDEOGRAPH
+ {0xC6C2, 0x5761}, //11834 #CJK UNIFIED IDEOGRAPH
+ {0xC6C3, 0x6CFC}, //11835 #CJK UNIFIED IDEOGRAPH
+ {0xC6C4, 0x9887}, //11836 #CJK UNIFIED IDEOGRAPH
+ {0xC6C5, 0x5A46}, //11837 #CJK UNIFIED IDEOGRAPH
+ {0xC6C6, 0x7834}, //11838 #CJK UNIFIED IDEOGRAPH
+ {0xC6C7, 0x9B44}, //11839 #CJK UNIFIED IDEOGRAPH
+ {0xC6C8, 0x8FEB}, //11840 #CJK UNIFIED IDEOGRAPH
+ {0xC6C9, 0x7C95}, //11841 #CJK UNIFIED IDEOGRAPH
+ {0xC6CA, 0x5256}, //11842 #CJK UNIFIED IDEOGRAPH
+ {0xC6CB, 0x6251}, //11843 #CJK UNIFIED IDEOGRAPH
+ {0xC6CC, 0x94FA}, //11844 #CJK UNIFIED IDEOGRAPH
+ {0xC6CD, 0x4EC6}, //11845 #CJK UNIFIED IDEOGRAPH
+ {0xC6CE, 0x8386}, //11846 #CJK UNIFIED IDEOGRAPH
+ {0xC6CF, 0x8461}, //11847 #CJK UNIFIED IDEOGRAPH
+ {0xC6D0, 0x83E9}, //11848 #CJK UNIFIED IDEOGRAPH
+ {0xC6D1, 0x84B2}, //11849 #CJK UNIFIED IDEOGRAPH
+ {0xC6D2, 0x57D4}, //11850 #CJK UNIFIED IDEOGRAPH
+ {0xC6D3, 0x6734}, //11851 #CJK UNIFIED IDEOGRAPH
+ {0xC6D4, 0x5703}, //11852 #CJK UNIFIED IDEOGRAPH
+ {0xC6D5, 0x666E}, //11853 #CJK UNIFIED IDEOGRAPH
+ {0xC6D6, 0x6D66}, //11854 #CJK UNIFIED IDEOGRAPH
+ {0xC6D7, 0x8C31}, //11855 #CJK UNIFIED IDEOGRAPH
+ {0xC6D8, 0x66DD}, //11856 #CJK UNIFIED IDEOGRAPH
+ {0xC6D9, 0x7011}, //11857 #CJK UNIFIED IDEOGRAPH
+ {0xC6DA, 0x671F}, //11858 #CJK UNIFIED IDEOGRAPH
+ {0xC6DB, 0x6B3A}, //11859 #CJK UNIFIED IDEOGRAPH
+ {0xC6DC, 0x6816}, //11860 #CJK UNIFIED IDEOGRAPH
+ {0xC6DD, 0x621A}, //11861 #CJK UNIFIED IDEOGRAPH
+ {0xC6DE, 0x59BB}, //11862 #CJK UNIFIED IDEOGRAPH
+ {0xC6DF, 0x4E03}, //11863 #CJK UNIFIED IDEOGRAPH
+ {0xC6E0, 0x51C4}, //11864 #CJK UNIFIED IDEOGRAPH
+ {0xC6E1, 0x6F06}, //11865 #CJK UNIFIED IDEOGRAPH
+ {0xC6E2, 0x67D2}, //11866 #CJK UNIFIED IDEOGRAPH
+ {0xC6E3, 0x6C8F}, //11867 #CJK UNIFIED IDEOGRAPH
+ {0xC6E4, 0x5176}, //11868 #CJK UNIFIED IDEOGRAPH
+ {0xC6E5, 0x68CB}, //11869 #CJK UNIFIED IDEOGRAPH
+ {0xC6E6, 0x5947}, //11870 #CJK UNIFIED IDEOGRAPH
+ {0xC6E7, 0x6B67}, //11871 #CJK UNIFIED IDEOGRAPH
+ {0xC6E8, 0x7566}, //11872 #CJK UNIFIED IDEOGRAPH
+ {0xC6E9, 0x5D0E}, //11873 #CJK UNIFIED IDEOGRAPH
+ {0xC6EA, 0x8110}, //11874 #CJK UNIFIED IDEOGRAPH
+ {0xC6EB, 0x9F50}, //11875 #CJK UNIFIED IDEOGRAPH
+ {0xC6EC, 0x65D7}, //11876 #CJK UNIFIED IDEOGRAPH
+ {0xC6ED, 0x7948}, //11877 #CJK UNIFIED IDEOGRAPH
+ {0xC6EE, 0x7941}, //11878 #CJK UNIFIED IDEOGRAPH
+ {0xC6EF, 0x9A91}, //11879 #CJK UNIFIED IDEOGRAPH
+ {0xC6F0, 0x8D77}, //11880 #CJK UNIFIED IDEOGRAPH
+ {0xC6F1, 0x5C82}, //11881 #CJK UNIFIED IDEOGRAPH
+ {0xC6F2, 0x4E5E}, //11882 #CJK UNIFIED IDEOGRAPH
+ {0xC6F3, 0x4F01}, //11883 #CJK UNIFIED IDEOGRAPH
+ {0xC6F4, 0x542F}, //11884 #CJK UNIFIED IDEOGRAPH
+ {0xC6F5, 0x5951}, //11885 #CJK UNIFIED IDEOGRAPH
+ {0xC6F6, 0x780C}, //11886 #CJK UNIFIED IDEOGRAPH
+ {0xC6F7, 0x5668}, //11887 #CJK UNIFIED IDEOGRAPH
+ {0xC6F8, 0x6C14}, //11888 #CJK UNIFIED IDEOGRAPH
+ {0xC6F9, 0x8FC4}, //11889 #CJK UNIFIED IDEOGRAPH
+ {0xC6FA, 0x5F03}, //11890 #CJK UNIFIED IDEOGRAPH
+ {0xC6FB, 0x6C7D}, //11891 #CJK UNIFIED IDEOGRAPH
+ {0xC6FC, 0x6CE3}, //11892 #CJK UNIFIED IDEOGRAPH
+ {0xC6FD, 0x8BAB}, //11893 #CJK UNIFIED IDEOGRAPH
+ {0xC6FE, 0x6390}, //11894 #CJK UNIFIED IDEOGRAPH
+ {0xC740, 0x833E}, //11895 #CJK UNIFIED IDEOGRAPH
+ {0xC741, 0x833F}, //11896 #CJK UNIFIED IDEOGRAPH
+ {0xC742, 0x8341}, //11897 #CJK UNIFIED IDEOGRAPH
+ {0xC743, 0x8342}, //11898 #CJK UNIFIED IDEOGRAPH
+ {0xC744, 0x8344}, //11899 #CJK UNIFIED IDEOGRAPH
+ {0xC745, 0x8345}, //11900 #CJK UNIFIED IDEOGRAPH
+ {0xC746, 0x8348}, //11901 #CJK UNIFIED IDEOGRAPH
+ {0xC747, 0x834A}, //11902 #CJK UNIFIED IDEOGRAPH
+ {0xC748, 0x834B}, //11903 #CJK UNIFIED IDEOGRAPH
+ {0xC749, 0x834C}, //11904 #CJK UNIFIED IDEOGRAPH
+ {0xC74A, 0x834D}, //11905 #CJK UNIFIED IDEOGRAPH
+ {0xC74B, 0x834E}, //11906 #CJK UNIFIED IDEOGRAPH
+ {0xC74C, 0x8353}, //11907 #CJK UNIFIED IDEOGRAPH
+ {0xC74D, 0x8355}, //11908 #CJK UNIFIED IDEOGRAPH
+ {0xC74E, 0x8356}, //11909 #CJK UNIFIED IDEOGRAPH
+ {0xC74F, 0x8357}, //11910 #CJK UNIFIED IDEOGRAPH
+ {0xC750, 0x8358}, //11911 #CJK UNIFIED IDEOGRAPH
+ {0xC751, 0x8359}, //11912 #CJK UNIFIED IDEOGRAPH
+ {0xC752, 0x835D}, //11913 #CJK UNIFIED IDEOGRAPH
+ {0xC753, 0x8362}, //11914 #CJK UNIFIED IDEOGRAPH
+ {0xC754, 0x8370}, //11915 #CJK UNIFIED IDEOGRAPH
+ {0xC755, 0x8371}, //11916 #CJK UNIFIED IDEOGRAPH
+ {0xC756, 0x8372}, //11917 #CJK UNIFIED IDEOGRAPH
+ {0xC757, 0x8373}, //11918 #CJK UNIFIED IDEOGRAPH
+ {0xC758, 0x8374}, //11919 #CJK UNIFIED IDEOGRAPH
+ {0xC759, 0x8375}, //11920 #CJK UNIFIED IDEOGRAPH
+ {0xC75A, 0x8376}, //11921 #CJK UNIFIED IDEOGRAPH
+ {0xC75B, 0x8379}, //11922 #CJK UNIFIED IDEOGRAPH
+ {0xC75C, 0x837A}, //11923 #CJK UNIFIED IDEOGRAPH
+ {0xC75D, 0x837E}, //11924 #CJK UNIFIED IDEOGRAPH
+ {0xC75E, 0x837F}, //11925 #CJK UNIFIED IDEOGRAPH
+ {0xC75F, 0x8380}, //11926 #CJK UNIFIED IDEOGRAPH
+ {0xC760, 0x8381}, //11927 #CJK UNIFIED IDEOGRAPH
+ {0xC761, 0x8382}, //11928 #CJK UNIFIED IDEOGRAPH
+ {0xC762, 0x8383}, //11929 #CJK UNIFIED IDEOGRAPH
+ {0xC763, 0x8384}, //11930 #CJK UNIFIED IDEOGRAPH
+ {0xC764, 0x8387}, //11931 #CJK UNIFIED IDEOGRAPH
+ {0xC765, 0x8388}, //11932 #CJK UNIFIED IDEOGRAPH
+ {0xC766, 0x838A}, //11933 #CJK UNIFIED IDEOGRAPH
+ {0xC767, 0x838B}, //11934 #CJK UNIFIED IDEOGRAPH
+ {0xC768, 0x838C}, //11935 #CJK UNIFIED IDEOGRAPH
+ {0xC769, 0x838D}, //11936 #CJK UNIFIED IDEOGRAPH
+ {0xC76A, 0x838F}, //11937 #CJK UNIFIED IDEOGRAPH
+ {0xC76B, 0x8390}, //11938 #CJK UNIFIED IDEOGRAPH
+ {0xC76C, 0x8391}, //11939 #CJK UNIFIED IDEOGRAPH
+ {0xC76D, 0x8394}, //11940 #CJK UNIFIED IDEOGRAPH
+ {0xC76E, 0x8395}, //11941 #CJK UNIFIED IDEOGRAPH
+ {0xC76F, 0x8396}, //11942 #CJK UNIFIED IDEOGRAPH
+ {0xC770, 0x8397}, //11943 #CJK UNIFIED IDEOGRAPH
+ {0xC771, 0x8399}, //11944 #CJK UNIFIED IDEOGRAPH
+ {0xC772, 0x839A}, //11945 #CJK UNIFIED IDEOGRAPH
+ {0xC773, 0x839D}, //11946 #CJK UNIFIED IDEOGRAPH
+ {0xC774, 0x839F}, //11947 #CJK UNIFIED IDEOGRAPH
+ {0xC775, 0x83A1}, //11948 #CJK UNIFIED IDEOGRAPH
+ {0xC776, 0x83A2}, //11949 #CJK UNIFIED IDEOGRAPH
+ {0xC777, 0x83A3}, //11950 #CJK UNIFIED IDEOGRAPH
+ {0xC778, 0x83A4}, //11951 #CJK UNIFIED IDEOGRAPH
+ {0xC779, 0x83A5}, //11952 #CJK UNIFIED IDEOGRAPH
+ {0xC77A, 0x83A6}, //11953 #CJK UNIFIED IDEOGRAPH
+ {0xC77B, 0x83A7}, //11954 #CJK UNIFIED IDEOGRAPH
+ {0xC77C, 0x83AC}, //11955 #CJK UNIFIED IDEOGRAPH
+ {0xC77D, 0x83AD}, //11956 #CJK UNIFIED IDEOGRAPH
+ {0xC77E, 0x83AE}, //11957 #CJK UNIFIED IDEOGRAPH
+ {0xC780, 0x83AF}, //11958 #CJK UNIFIED IDEOGRAPH
+ {0xC781, 0x83B5}, //11959 #CJK UNIFIED IDEOGRAPH
+ {0xC782, 0x83BB}, //11960 #CJK UNIFIED IDEOGRAPH
+ {0xC783, 0x83BE}, //11961 #CJK UNIFIED IDEOGRAPH
+ {0xC784, 0x83BF}, //11962 #CJK UNIFIED IDEOGRAPH
+ {0xC785, 0x83C2}, //11963 #CJK UNIFIED IDEOGRAPH
+ {0xC786, 0x83C3}, //11964 #CJK UNIFIED IDEOGRAPH
+ {0xC787, 0x83C4}, //11965 #CJK UNIFIED IDEOGRAPH
+ {0xC788, 0x83C6}, //11966 #CJK UNIFIED IDEOGRAPH
+ {0xC789, 0x83C8}, //11967 #CJK UNIFIED IDEOGRAPH
+ {0xC78A, 0x83C9}, //11968 #CJK UNIFIED IDEOGRAPH
+ {0xC78B, 0x83CB}, //11969 #CJK UNIFIED IDEOGRAPH
+ {0xC78C, 0x83CD}, //11970 #CJK UNIFIED IDEOGRAPH
+ {0xC78D, 0x83CE}, //11971 #CJK UNIFIED IDEOGRAPH
+ {0xC78E, 0x83D0}, //11972 #CJK UNIFIED IDEOGRAPH
+ {0xC78F, 0x83D1}, //11973 #CJK UNIFIED IDEOGRAPH
+ {0xC790, 0x83D2}, //11974 #CJK UNIFIED IDEOGRAPH
+ {0xC791, 0x83D3}, //11975 #CJK UNIFIED IDEOGRAPH
+ {0xC792, 0x83D5}, //11976 #CJK UNIFIED IDEOGRAPH
+ {0xC793, 0x83D7}, //11977 #CJK UNIFIED IDEOGRAPH
+ {0xC794, 0x83D9}, //11978 #CJK UNIFIED IDEOGRAPH
+ {0xC795, 0x83DA}, //11979 #CJK UNIFIED IDEOGRAPH
+ {0xC796, 0x83DB}, //11980 #CJK UNIFIED IDEOGRAPH
+ {0xC797, 0x83DE}, //11981 #CJK UNIFIED IDEOGRAPH
+ {0xC798, 0x83E2}, //11982 #CJK UNIFIED IDEOGRAPH
+ {0xC799, 0x83E3}, //11983 #CJK UNIFIED IDEOGRAPH
+ {0xC79A, 0x83E4}, //11984 #CJK UNIFIED IDEOGRAPH
+ {0xC79B, 0x83E6}, //11985 #CJK UNIFIED IDEOGRAPH
+ {0xC79C, 0x83E7}, //11986 #CJK UNIFIED IDEOGRAPH
+ {0xC79D, 0x83E8}, //11987 #CJK UNIFIED IDEOGRAPH
+ {0xC79E, 0x83EB}, //11988 #CJK UNIFIED IDEOGRAPH
+ {0xC79F, 0x83EC}, //11989 #CJK UNIFIED IDEOGRAPH
+ {0xC7A0, 0x83ED}, //11990 #CJK UNIFIED IDEOGRAPH
+ {0xC7A1, 0x6070}, //11991 #CJK UNIFIED IDEOGRAPH
+ {0xC7A2, 0x6D3D}, //11992 #CJK UNIFIED IDEOGRAPH
+ {0xC7A3, 0x7275}, //11993 #CJK UNIFIED IDEOGRAPH
+ {0xC7A4, 0x6266}, //11994 #CJK UNIFIED IDEOGRAPH
+ {0xC7A5, 0x948E}, //11995 #CJK UNIFIED IDEOGRAPH
+ {0xC7A6, 0x94C5}, //11996 #CJK UNIFIED IDEOGRAPH
+ {0xC7A7, 0x5343}, //11997 #CJK UNIFIED IDEOGRAPH
+ {0xC7A8, 0x8FC1}, //11998 #CJK UNIFIED IDEOGRAPH
+ {0xC7A9, 0x7B7E}, //11999 #CJK UNIFIED IDEOGRAPH
+ {0xC7AA, 0x4EDF}, //12000 #CJK UNIFIED IDEOGRAPH
+ {0xC7AB, 0x8C26}, //12001 #CJK UNIFIED IDEOGRAPH
+ {0xC7AC, 0x4E7E}, //12002 #CJK UNIFIED IDEOGRAPH
+ {0xC7AD, 0x9ED4}, //12003 #CJK UNIFIED IDEOGRAPH
+ {0xC7AE, 0x94B1}, //12004 #CJK UNIFIED IDEOGRAPH
+ {0xC7AF, 0x94B3}, //12005 #CJK UNIFIED IDEOGRAPH
+ {0xC7B0, 0x524D}, //12006 #CJK UNIFIED IDEOGRAPH
+ {0xC7B1, 0x6F5C}, //12007 #CJK UNIFIED IDEOGRAPH
+ {0xC7B2, 0x9063}, //12008 #CJK UNIFIED IDEOGRAPH
+ {0xC7B3, 0x6D45}, //12009 #CJK UNIFIED IDEOGRAPH
+ {0xC7B4, 0x8C34}, //12010 #CJK UNIFIED IDEOGRAPH
+ {0xC7B5, 0x5811}, //12011 #CJK UNIFIED IDEOGRAPH
+ {0xC7B6, 0x5D4C}, //12012 #CJK UNIFIED IDEOGRAPH
+ {0xC7B7, 0x6B20}, //12013 #CJK UNIFIED IDEOGRAPH
+ {0xC7B8, 0x6B49}, //12014 #CJK UNIFIED IDEOGRAPH
+ {0xC7B9, 0x67AA}, //12015 #CJK UNIFIED IDEOGRAPH
+ {0xC7BA, 0x545B}, //12016 #CJK UNIFIED IDEOGRAPH
+ {0xC7BB, 0x8154}, //12017 #CJK UNIFIED IDEOGRAPH
+ {0xC7BC, 0x7F8C}, //12018 #CJK UNIFIED IDEOGRAPH
+ {0xC7BD, 0x5899}, //12019 #CJK UNIFIED IDEOGRAPH
+ {0xC7BE, 0x8537}, //12020 #CJK UNIFIED IDEOGRAPH
+ {0xC7BF, 0x5F3A}, //12021 #CJK UNIFIED IDEOGRAPH
+ {0xC7C0, 0x62A2}, //12022 #CJK UNIFIED IDEOGRAPH
+ {0xC7C1, 0x6A47}, //12023 #CJK UNIFIED IDEOGRAPH
+ {0xC7C2, 0x9539}, //12024 #CJK UNIFIED IDEOGRAPH
+ {0xC7C3, 0x6572}, //12025 #CJK UNIFIED IDEOGRAPH
+ {0xC7C4, 0x6084}, //12026 #CJK UNIFIED IDEOGRAPH
+ {0xC7C5, 0x6865}, //12027 #CJK UNIFIED IDEOGRAPH
+ {0xC7C6, 0x77A7}, //12028 #CJK UNIFIED IDEOGRAPH
+ {0xC7C7, 0x4E54}, //12029 #CJK UNIFIED IDEOGRAPH
+ {0xC7C8, 0x4FA8}, //12030 #CJK UNIFIED IDEOGRAPH
+ {0xC7C9, 0x5DE7}, //12031 #CJK UNIFIED IDEOGRAPH
+ {0xC7CA, 0x9798}, //12032 #CJK UNIFIED IDEOGRAPH
+ {0xC7CB, 0x64AC}, //12033 #CJK UNIFIED IDEOGRAPH
+ {0xC7CC, 0x7FD8}, //12034 #CJK UNIFIED IDEOGRAPH
+ {0xC7CD, 0x5CED}, //12035 #CJK UNIFIED IDEOGRAPH
+ {0xC7CE, 0x4FCF}, //12036 #CJK UNIFIED IDEOGRAPH
+ {0xC7CF, 0x7A8D}, //12037 #CJK UNIFIED IDEOGRAPH
+ {0xC7D0, 0x5207}, //12038 #CJK UNIFIED IDEOGRAPH
+ {0xC7D1, 0x8304}, //12039 #CJK UNIFIED IDEOGRAPH
+ {0xC7D2, 0x4E14}, //12040 #CJK UNIFIED IDEOGRAPH
+ {0xC7D3, 0x602F}, //12041 #CJK UNIFIED IDEOGRAPH
+ {0xC7D4, 0x7A83}, //12042 #CJK UNIFIED IDEOGRAPH
+ {0xC7D5, 0x94A6}, //12043 #CJK UNIFIED IDEOGRAPH
+ {0xC7D6, 0x4FB5}, //12044 #CJK UNIFIED IDEOGRAPH
+ {0xC7D7, 0x4EB2}, //12045 #CJK UNIFIED IDEOGRAPH
+ {0xC7D8, 0x79E6}, //12046 #CJK UNIFIED IDEOGRAPH
+ {0xC7D9, 0x7434}, //12047 #CJK UNIFIED IDEOGRAPH
+ {0xC7DA, 0x52E4}, //12048 #CJK UNIFIED IDEOGRAPH
+ {0xC7DB, 0x82B9}, //12049 #CJK UNIFIED IDEOGRAPH
+ {0xC7DC, 0x64D2}, //12050 #CJK UNIFIED IDEOGRAPH
+ {0xC7DD, 0x79BD}, //12051 #CJK UNIFIED IDEOGRAPH
+ {0xC7DE, 0x5BDD}, //12052 #CJK UNIFIED IDEOGRAPH
+ {0xC7DF, 0x6C81}, //12053 #CJK UNIFIED IDEOGRAPH
+ {0xC7E0, 0x9752}, //12054 #CJK UNIFIED IDEOGRAPH
+ {0xC7E1, 0x8F7B}, //12055 #CJK UNIFIED IDEOGRAPH
+ {0xC7E2, 0x6C22}, //12056 #CJK UNIFIED IDEOGRAPH
+ {0xC7E3, 0x503E}, //12057 #CJK UNIFIED IDEOGRAPH
+ {0xC7E4, 0x537F}, //12058 #CJK UNIFIED IDEOGRAPH
+ {0xC7E5, 0x6E05}, //12059 #CJK UNIFIED IDEOGRAPH
+ {0xC7E6, 0x64CE}, //12060 #CJK UNIFIED IDEOGRAPH
+ {0xC7E7, 0x6674}, //12061 #CJK UNIFIED IDEOGRAPH
+ {0xC7E8, 0x6C30}, //12062 #CJK UNIFIED IDEOGRAPH
+ {0xC7E9, 0x60C5}, //12063 #CJK UNIFIED IDEOGRAPH
+ {0xC7EA, 0x9877}, //12064 #CJK UNIFIED IDEOGRAPH
+ {0xC7EB, 0x8BF7}, //12065 #CJK UNIFIED IDEOGRAPH
+ {0xC7EC, 0x5E86}, //12066 #CJK UNIFIED IDEOGRAPH
+ {0xC7ED, 0x743C}, //12067 #CJK UNIFIED IDEOGRAPH
+ {0xC7EE, 0x7A77}, //12068 #CJK UNIFIED IDEOGRAPH
+ {0xC7EF, 0x79CB}, //12069 #CJK UNIFIED IDEOGRAPH
+ {0xC7F0, 0x4E18}, //12070 #CJK UNIFIED IDEOGRAPH
+ {0xC7F1, 0x90B1}, //12071 #CJK UNIFIED IDEOGRAPH
+ {0xC7F2, 0x7403}, //12072 #CJK UNIFIED IDEOGRAPH
+ {0xC7F3, 0x6C42}, //12073 #CJK UNIFIED IDEOGRAPH
+ {0xC7F4, 0x56DA}, //12074 #CJK UNIFIED IDEOGRAPH
+ {0xC7F5, 0x914B}, //12075 #CJK UNIFIED IDEOGRAPH
+ {0xC7F6, 0x6CC5}, //12076 #CJK UNIFIED IDEOGRAPH
+ {0xC7F7, 0x8D8B}, //12077 #CJK UNIFIED IDEOGRAPH
+ {0xC7F8, 0x533A}, //12078 #CJK UNIFIED IDEOGRAPH
+ {0xC7F9, 0x86C6}, //12079 #CJK UNIFIED IDEOGRAPH
+ {0xC7FA, 0x66F2}, //12080 #CJK UNIFIED IDEOGRAPH
+ {0xC7FB, 0x8EAF}, //12081 #CJK UNIFIED IDEOGRAPH
+ {0xC7FC, 0x5C48}, //12082 #CJK UNIFIED IDEOGRAPH
+ {0xC7FD, 0x9A71}, //12083 #CJK UNIFIED IDEOGRAPH
+ {0xC7FE, 0x6E20}, //12084 #CJK UNIFIED IDEOGRAPH
+ {0xC840, 0x83EE}, //12085 #CJK UNIFIED IDEOGRAPH
+ {0xC841, 0x83EF}, //12086 #CJK UNIFIED IDEOGRAPH
+ {0xC842, 0x83F3}, //12087 #CJK UNIFIED IDEOGRAPH
+ {0xC843, 0x83F4}, //12088 #CJK UNIFIED IDEOGRAPH
+ {0xC844, 0x83F5}, //12089 #CJK UNIFIED IDEOGRAPH
+ {0xC845, 0x83F6}, //12090 #CJK UNIFIED IDEOGRAPH
+ {0xC846, 0x83F7}, //12091 #CJK UNIFIED IDEOGRAPH
+ {0xC847, 0x83FA}, //12092 #CJK UNIFIED IDEOGRAPH
+ {0xC848, 0x83FB}, //12093 #CJK UNIFIED IDEOGRAPH
+ {0xC849, 0x83FC}, //12094 #CJK UNIFIED IDEOGRAPH
+ {0xC84A, 0x83FE}, //12095 #CJK UNIFIED IDEOGRAPH
+ {0xC84B, 0x83FF}, //12096 #CJK UNIFIED IDEOGRAPH
+ {0xC84C, 0x8400}, //12097 #CJK UNIFIED IDEOGRAPH
+ {0xC84D, 0x8402}, //12098 #CJK UNIFIED IDEOGRAPH
+ {0xC84E, 0x8405}, //12099 #CJK UNIFIED IDEOGRAPH
+ {0xC84F, 0x8407}, //12100 #CJK UNIFIED IDEOGRAPH
+ {0xC850, 0x8408}, //12101 #CJK UNIFIED IDEOGRAPH
+ {0xC851, 0x8409}, //12102 #CJK UNIFIED IDEOGRAPH
+ {0xC852, 0x840A}, //12103 #CJK UNIFIED IDEOGRAPH
+ {0xC853, 0x8410}, //12104 #CJK UNIFIED IDEOGRAPH
+ {0xC854, 0x8412}, //12105 #CJK UNIFIED IDEOGRAPH
+ {0xC855, 0x8413}, //12106 #CJK UNIFIED IDEOGRAPH
+ {0xC856, 0x8414}, //12107 #CJK UNIFIED IDEOGRAPH
+ {0xC857, 0x8415}, //12108 #CJK UNIFIED IDEOGRAPH
+ {0xC858, 0x8416}, //12109 #CJK UNIFIED IDEOGRAPH
+ {0xC859, 0x8417}, //12110 #CJK UNIFIED IDEOGRAPH
+ {0xC85A, 0x8419}, //12111 #CJK UNIFIED IDEOGRAPH
+ {0xC85B, 0x841A}, //12112 #CJK UNIFIED IDEOGRAPH
+ {0xC85C, 0x841B}, //12113 #CJK UNIFIED IDEOGRAPH
+ {0xC85D, 0x841E}, //12114 #CJK UNIFIED IDEOGRAPH
+ {0xC85E, 0x841F}, //12115 #CJK UNIFIED IDEOGRAPH
+ {0xC85F, 0x8420}, //12116 #CJK UNIFIED IDEOGRAPH
+ {0xC860, 0x8421}, //12117 #CJK UNIFIED IDEOGRAPH
+ {0xC861, 0x8422}, //12118 #CJK UNIFIED IDEOGRAPH
+ {0xC862, 0x8423}, //12119 #CJK UNIFIED IDEOGRAPH
+ {0xC863, 0x8429}, //12120 #CJK UNIFIED IDEOGRAPH
+ {0xC864, 0x842A}, //12121 #CJK UNIFIED IDEOGRAPH
+ {0xC865, 0x842B}, //12122 #CJK UNIFIED IDEOGRAPH
+ {0xC866, 0x842C}, //12123 #CJK UNIFIED IDEOGRAPH
+ {0xC867, 0x842D}, //12124 #CJK UNIFIED IDEOGRAPH
+ {0xC868, 0x842E}, //12125 #CJK UNIFIED IDEOGRAPH
+ {0xC869, 0x842F}, //12126 #CJK UNIFIED IDEOGRAPH
+ {0xC86A, 0x8430}, //12127 #CJK UNIFIED IDEOGRAPH
+ {0xC86B, 0x8432}, //12128 #CJK UNIFIED IDEOGRAPH
+ {0xC86C, 0x8433}, //12129 #CJK UNIFIED IDEOGRAPH
+ {0xC86D, 0x8434}, //12130 #CJK UNIFIED IDEOGRAPH
+ {0xC86E, 0x8435}, //12131 #CJK UNIFIED IDEOGRAPH
+ {0xC86F, 0x8436}, //12132 #CJK UNIFIED IDEOGRAPH
+ {0xC870, 0x8437}, //12133 #CJK UNIFIED IDEOGRAPH
+ {0xC871, 0x8439}, //12134 #CJK UNIFIED IDEOGRAPH
+ {0xC872, 0x843A}, //12135 #CJK UNIFIED IDEOGRAPH
+ {0xC873, 0x843B}, //12136 #CJK UNIFIED IDEOGRAPH
+ {0xC874, 0x843E}, //12137 #CJK UNIFIED IDEOGRAPH
+ {0xC875, 0x843F}, //12138 #CJK UNIFIED IDEOGRAPH
+ {0xC876, 0x8440}, //12139 #CJK UNIFIED IDEOGRAPH
+ {0xC877, 0x8441}, //12140 #CJK UNIFIED IDEOGRAPH
+ {0xC878, 0x8442}, //12141 #CJK UNIFIED IDEOGRAPH
+ {0xC879, 0x8443}, //12142 #CJK UNIFIED IDEOGRAPH
+ {0xC87A, 0x8444}, //12143 #CJK UNIFIED IDEOGRAPH
+ {0xC87B, 0x8445}, //12144 #CJK UNIFIED IDEOGRAPH
+ {0xC87C, 0x8447}, //12145 #CJK UNIFIED IDEOGRAPH
+ {0xC87D, 0x8448}, //12146 #CJK UNIFIED IDEOGRAPH
+ {0xC87E, 0x8449}, //12147 #CJK UNIFIED IDEOGRAPH
+ {0xC880, 0x844A}, //12148 #CJK UNIFIED IDEOGRAPH
+ {0xC881, 0x844B}, //12149 #CJK UNIFIED IDEOGRAPH
+ {0xC882, 0x844C}, //12150 #CJK UNIFIED IDEOGRAPH
+ {0xC883, 0x844D}, //12151 #CJK UNIFIED IDEOGRAPH
+ {0xC884, 0x844E}, //12152 #CJK UNIFIED IDEOGRAPH
+ {0xC885, 0x844F}, //12153 #CJK UNIFIED IDEOGRAPH
+ {0xC886, 0x8450}, //12154 #CJK UNIFIED IDEOGRAPH
+ {0xC887, 0x8452}, //12155 #CJK UNIFIED IDEOGRAPH
+ {0xC888, 0x8453}, //12156 #CJK UNIFIED IDEOGRAPH
+ {0xC889, 0x8454}, //12157 #CJK UNIFIED IDEOGRAPH
+ {0xC88A, 0x8455}, //12158 #CJK UNIFIED IDEOGRAPH
+ {0xC88B, 0x8456}, //12159 #CJK UNIFIED IDEOGRAPH
+ {0xC88C, 0x8458}, //12160 #CJK UNIFIED IDEOGRAPH
+ {0xC88D, 0x845D}, //12161 #CJK UNIFIED IDEOGRAPH
+ {0xC88E, 0x845E}, //12162 #CJK UNIFIED IDEOGRAPH
+ {0xC88F, 0x845F}, //12163 #CJK UNIFIED IDEOGRAPH
+ {0xC890, 0x8460}, //12164 #CJK UNIFIED IDEOGRAPH
+ {0xC891, 0x8462}, //12165 #CJK UNIFIED IDEOGRAPH
+ {0xC892, 0x8464}, //12166 #CJK UNIFIED IDEOGRAPH
+ {0xC893, 0x8465}, //12167 #CJK UNIFIED IDEOGRAPH
+ {0xC894, 0x8466}, //12168 #CJK UNIFIED IDEOGRAPH
+ {0xC895, 0x8467}, //12169 #CJK UNIFIED IDEOGRAPH
+ {0xC896, 0x8468}, //12170 #CJK UNIFIED IDEOGRAPH
+ {0xC897, 0x846A}, //12171 #CJK UNIFIED IDEOGRAPH
+ {0xC898, 0x846E}, //12172 #CJK UNIFIED IDEOGRAPH
+ {0xC899, 0x846F}, //12173 #CJK UNIFIED IDEOGRAPH
+ {0xC89A, 0x8470}, //12174 #CJK UNIFIED IDEOGRAPH
+ {0xC89B, 0x8472}, //12175 #CJK UNIFIED IDEOGRAPH
+ {0xC89C, 0x8474}, //12176 #CJK UNIFIED IDEOGRAPH
+ {0xC89D, 0x8477}, //12177 #CJK UNIFIED IDEOGRAPH
+ {0xC89E, 0x8479}, //12178 #CJK UNIFIED IDEOGRAPH
+ {0xC89F, 0x847B}, //12179 #CJK UNIFIED IDEOGRAPH
+ {0xC8A0, 0x847C}, //12180 #CJK UNIFIED IDEOGRAPH
+ {0xC8A1, 0x53D6}, //12181 #CJK UNIFIED IDEOGRAPH
+ {0xC8A2, 0x5A36}, //12182 #CJK UNIFIED IDEOGRAPH
+ {0xC8A3, 0x9F8B}, //12183 #CJK UNIFIED IDEOGRAPH
+ {0xC8A4, 0x8DA3}, //12184 #CJK UNIFIED IDEOGRAPH
+ {0xC8A5, 0x53BB}, //12185 #CJK UNIFIED IDEOGRAPH
+ {0xC8A6, 0x5708}, //12186 #CJK UNIFIED IDEOGRAPH
+ {0xC8A7, 0x98A7}, //12187 #CJK UNIFIED IDEOGRAPH
+ {0xC8A8, 0x6743}, //12188 #CJK UNIFIED IDEOGRAPH
+ {0xC8A9, 0x919B}, //12189 #CJK UNIFIED IDEOGRAPH
+ {0xC8AA, 0x6CC9}, //12190 #CJK UNIFIED IDEOGRAPH
+ {0xC8AB, 0x5168}, //12191 #CJK UNIFIED IDEOGRAPH
+ {0xC8AC, 0x75CA}, //12192 #CJK UNIFIED IDEOGRAPH
+ {0xC8AD, 0x62F3}, //12193 #CJK UNIFIED IDEOGRAPH
+ {0xC8AE, 0x72AC}, //12194 #CJK UNIFIED IDEOGRAPH
+ {0xC8AF, 0x5238}, //12195 #CJK UNIFIED IDEOGRAPH
+ {0xC8B0, 0x529D}, //12196 #CJK UNIFIED IDEOGRAPH
+ {0xC8B1, 0x7F3A}, //12197 #CJK UNIFIED IDEOGRAPH
+ {0xC8B2, 0x7094}, //12198 #CJK UNIFIED IDEOGRAPH
+ {0xC8B3, 0x7638}, //12199 #CJK UNIFIED IDEOGRAPH
+ {0xC8B4, 0x5374}, //12200 #CJK UNIFIED IDEOGRAPH
+ {0xC8B5, 0x9E4A}, //12201 #CJK UNIFIED IDEOGRAPH
+ {0xC8B6, 0x69B7}, //12202 #CJK UNIFIED IDEOGRAPH
+ {0xC8B7, 0x786E}, //12203 #CJK UNIFIED IDEOGRAPH
+ {0xC8B8, 0x96C0}, //12204 #CJK UNIFIED IDEOGRAPH
+ {0xC8B9, 0x88D9}, //12205 #CJK UNIFIED IDEOGRAPH
+ {0xC8BA, 0x7FA4}, //12206 #CJK UNIFIED IDEOGRAPH
+ {0xC8BB, 0x7136}, //12207 #CJK UNIFIED IDEOGRAPH
+ {0xC8BC, 0x71C3}, //12208 #CJK UNIFIED IDEOGRAPH
+ {0xC8BD, 0x5189}, //12209 #CJK UNIFIED IDEOGRAPH
+ {0xC8BE, 0x67D3}, //12210 #CJK UNIFIED IDEOGRAPH
+ {0xC8BF, 0x74E4}, //12211 #CJK UNIFIED IDEOGRAPH
+ {0xC8C0, 0x58E4}, //12212 #CJK UNIFIED IDEOGRAPH
+ {0xC8C1, 0x6518}, //12213 #CJK UNIFIED IDEOGRAPH
+ {0xC8C2, 0x56B7}, //12214 #CJK UNIFIED IDEOGRAPH
+ {0xC8C3, 0x8BA9}, //12215 #CJK UNIFIED IDEOGRAPH
+ {0xC8C4, 0x9976}, //12216 #CJK UNIFIED IDEOGRAPH
+ {0xC8C5, 0x6270}, //12217 #CJK UNIFIED IDEOGRAPH
+ {0xC8C6, 0x7ED5}, //12218 #CJK UNIFIED IDEOGRAPH
+ {0xC8C7, 0x60F9}, //12219 #CJK UNIFIED IDEOGRAPH
+ {0xC8C8, 0x70ED}, //12220 #CJK UNIFIED IDEOGRAPH
+ {0xC8C9, 0x58EC}, //12221 #CJK UNIFIED IDEOGRAPH
+ {0xC8CA, 0x4EC1}, //12222 #CJK UNIFIED IDEOGRAPH
+ {0xC8CB, 0x4EBA}, //12223 #CJK UNIFIED IDEOGRAPH
+ {0xC8CC, 0x5FCD}, //12224 #CJK UNIFIED IDEOGRAPH
+ {0xC8CD, 0x97E7}, //12225 #CJK UNIFIED IDEOGRAPH
+ {0xC8CE, 0x4EFB}, //12226 #CJK UNIFIED IDEOGRAPH
+ {0xC8CF, 0x8BA4}, //12227 #CJK UNIFIED IDEOGRAPH
+ {0xC8D0, 0x5203}, //12228 #CJK UNIFIED IDEOGRAPH
+ {0xC8D1, 0x598A}, //12229 #CJK UNIFIED IDEOGRAPH
+ {0xC8D2, 0x7EAB}, //12230 #CJK UNIFIED IDEOGRAPH
+ {0xC8D3, 0x6254}, //12231 #CJK UNIFIED IDEOGRAPH
+ {0xC8D4, 0x4ECD}, //12232 #CJK UNIFIED IDEOGRAPH
+ {0xC8D5, 0x65E5}, //12233 #CJK UNIFIED IDEOGRAPH
+ {0xC8D6, 0x620E}, //12234 #CJK UNIFIED IDEOGRAPH
+ {0xC8D7, 0x8338}, //12235 #CJK UNIFIED IDEOGRAPH
+ {0xC8D8, 0x84C9}, //12236 #CJK UNIFIED IDEOGRAPH
+ {0xC8D9, 0x8363}, //12237 #CJK UNIFIED IDEOGRAPH
+ {0xC8DA, 0x878D}, //12238 #CJK UNIFIED IDEOGRAPH
+ {0xC8DB, 0x7194}, //12239 #CJK UNIFIED IDEOGRAPH
+ {0xC8DC, 0x6EB6}, //12240 #CJK UNIFIED IDEOGRAPH
+ {0xC8DD, 0x5BB9}, //12241 #CJK UNIFIED IDEOGRAPH
+ {0xC8DE, 0x7ED2}, //12242 #CJK UNIFIED IDEOGRAPH
+ {0xC8DF, 0x5197}, //12243 #CJK UNIFIED IDEOGRAPH
+ {0xC8E0, 0x63C9}, //12244 #CJK UNIFIED IDEOGRAPH
+ {0xC8E1, 0x67D4}, //12245 #CJK UNIFIED IDEOGRAPH
+ {0xC8E2, 0x8089}, //12246 #CJK UNIFIED IDEOGRAPH
+ {0xC8E3, 0x8339}, //12247 #CJK UNIFIED IDEOGRAPH
+ {0xC8E4, 0x8815}, //12248 #CJK UNIFIED IDEOGRAPH
+ {0xC8E5, 0x5112}, //12249 #CJK UNIFIED IDEOGRAPH
+ {0xC8E6, 0x5B7A}, //12250 #CJK UNIFIED IDEOGRAPH
+ {0xC8E7, 0x5982}, //12251 #CJK UNIFIED IDEOGRAPH
+ {0xC8E8, 0x8FB1}, //12252 #CJK UNIFIED IDEOGRAPH
+ {0xC8E9, 0x4E73}, //12253 #CJK UNIFIED IDEOGRAPH
+ {0xC8EA, 0x6C5D}, //12254 #CJK UNIFIED IDEOGRAPH
+ {0xC8EB, 0x5165}, //12255 #CJK UNIFIED IDEOGRAPH
+ {0xC8EC, 0x8925}, //12256 #CJK UNIFIED IDEOGRAPH
+ {0xC8ED, 0x8F6F}, //12257 #CJK UNIFIED IDEOGRAPH
+ {0xC8EE, 0x962E}, //12258 #CJK UNIFIED IDEOGRAPH
+ {0xC8EF, 0x854A}, //12259 #CJK UNIFIED IDEOGRAPH
+ {0xC8F0, 0x745E}, //12260 #CJK UNIFIED IDEOGRAPH
+ {0xC8F1, 0x9510}, //12261 #CJK UNIFIED IDEOGRAPH
+ {0xC8F2, 0x95F0}, //12262 #CJK UNIFIED IDEOGRAPH
+ {0xC8F3, 0x6DA6}, //12263 #CJK UNIFIED IDEOGRAPH
+ {0xC8F4, 0x82E5}, //12264 #CJK UNIFIED IDEOGRAPH
+ {0xC8F5, 0x5F31}, //12265 #CJK UNIFIED IDEOGRAPH
+ {0xC8F6, 0x6492}, //12266 #CJK UNIFIED IDEOGRAPH
+ {0xC8F7, 0x6D12}, //12267 #CJK UNIFIED IDEOGRAPH
+ {0xC8F8, 0x8428}, //12268 #CJK UNIFIED IDEOGRAPH
+ {0xC8F9, 0x816E}, //12269 #CJK UNIFIED IDEOGRAPH
+ {0xC8FA, 0x9CC3}, //12270 #CJK UNIFIED IDEOGRAPH
+ {0xC8FB, 0x585E}, //12271 #CJK UNIFIED IDEOGRAPH
+ {0xC8FC, 0x8D5B}, //12272 #CJK UNIFIED IDEOGRAPH
+ {0xC8FD, 0x4E09}, //12273 #CJK UNIFIED IDEOGRAPH
+ {0xC8FE, 0x53C1}, //12274 #CJK UNIFIED IDEOGRAPH
+ {0xC940, 0x847D}, //12275 #CJK UNIFIED IDEOGRAPH
+ {0xC941, 0x847E}, //12276 #CJK UNIFIED IDEOGRAPH
+ {0xC942, 0x847F}, //12277 #CJK UNIFIED IDEOGRAPH
+ {0xC943, 0x8480}, //12278 #CJK UNIFIED IDEOGRAPH
+ {0xC944, 0x8481}, //12279 #CJK UNIFIED IDEOGRAPH
+ {0xC945, 0x8483}, //12280 #CJK UNIFIED IDEOGRAPH
+ {0xC946, 0x8484}, //12281 #CJK UNIFIED IDEOGRAPH
+ {0xC947, 0x8485}, //12282 #CJK UNIFIED IDEOGRAPH
+ {0xC948, 0x8486}, //12283 #CJK UNIFIED IDEOGRAPH
+ {0xC949, 0x848A}, //12284 #CJK UNIFIED IDEOGRAPH
+ {0xC94A, 0x848D}, //12285 #CJK UNIFIED IDEOGRAPH
+ {0xC94B, 0x848F}, //12286 #CJK UNIFIED IDEOGRAPH
+ {0xC94C, 0x8490}, //12287 #CJK UNIFIED IDEOGRAPH
+ {0xC94D, 0x8491}, //12288 #CJK UNIFIED IDEOGRAPH
+ {0xC94E, 0x8492}, //12289 #CJK UNIFIED IDEOGRAPH
+ {0xC94F, 0x8493}, //12290 #CJK UNIFIED IDEOGRAPH
+ {0xC950, 0x8494}, //12291 #CJK UNIFIED IDEOGRAPH
+ {0xC951, 0x8495}, //12292 #CJK UNIFIED IDEOGRAPH
+ {0xC952, 0x8496}, //12293 #CJK UNIFIED IDEOGRAPH
+ {0xC953, 0x8498}, //12294 #CJK UNIFIED IDEOGRAPH
+ {0xC954, 0x849A}, //12295 #CJK UNIFIED IDEOGRAPH
+ {0xC955, 0x849B}, //12296 #CJK UNIFIED IDEOGRAPH
+ {0xC956, 0x849D}, //12297 #CJK UNIFIED IDEOGRAPH
+ {0xC957, 0x849E}, //12298 #CJK UNIFIED IDEOGRAPH
+ {0xC958, 0x849F}, //12299 #CJK UNIFIED IDEOGRAPH
+ {0xC959, 0x84A0}, //12300 #CJK UNIFIED IDEOGRAPH
+ {0xC95A, 0x84A2}, //12301 #CJK UNIFIED IDEOGRAPH
+ {0xC95B, 0x84A3}, //12302 #CJK UNIFIED IDEOGRAPH
+ {0xC95C, 0x84A4}, //12303 #CJK UNIFIED IDEOGRAPH
+ {0xC95D, 0x84A5}, //12304 #CJK UNIFIED IDEOGRAPH
+ {0xC95E, 0x84A6}, //12305 #CJK UNIFIED IDEOGRAPH
+ {0xC95F, 0x84A7}, //12306 #CJK UNIFIED IDEOGRAPH
+ {0xC960, 0x84A8}, //12307 #CJK UNIFIED IDEOGRAPH
+ {0xC961, 0x84A9}, //12308 #CJK UNIFIED IDEOGRAPH
+ {0xC962, 0x84AA}, //12309 #CJK UNIFIED IDEOGRAPH
+ {0xC963, 0x84AB}, //12310 #CJK UNIFIED IDEOGRAPH
+ {0xC964, 0x84AC}, //12311 #CJK UNIFIED IDEOGRAPH
+ {0xC965, 0x84AD}, //12312 #CJK UNIFIED IDEOGRAPH
+ {0xC966, 0x84AE}, //12313 #CJK UNIFIED IDEOGRAPH
+ {0xC967, 0x84B0}, //12314 #CJK UNIFIED IDEOGRAPH
+ {0xC968, 0x84B1}, //12315 #CJK UNIFIED IDEOGRAPH
+ {0xC969, 0x84B3}, //12316 #CJK UNIFIED IDEOGRAPH
+ {0xC96A, 0x84B5}, //12317 #CJK UNIFIED IDEOGRAPH
+ {0xC96B, 0x84B6}, //12318 #CJK UNIFIED IDEOGRAPH
+ {0xC96C, 0x84B7}, //12319 #CJK UNIFIED IDEOGRAPH
+ {0xC96D, 0x84BB}, //12320 #CJK UNIFIED IDEOGRAPH
+ {0xC96E, 0x84BC}, //12321 #CJK UNIFIED IDEOGRAPH
+ {0xC96F, 0x84BE}, //12322 #CJK UNIFIED IDEOGRAPH
+ {0xC970, 0x84C0}, //12323 #CJK UNIFIED IDEOGRAPH
+ {0xC971, 0x84C2}, //12324 #CJK UNIFIED IDEOGRAPH
+ {0xC972, 0x84C3}, //12325 #CJK UNIFIED IDEOGRAPH
+ {0xC973, 0x84C5}, //12326 #CJK UNIFIED IDEOGRAPH
+ {0xC974, 0x84C6}, //12327 #CJK UNIFIED IDEOGRAPH
+ {0xC975, 0x84C7}, //12328 #CJK UNIFIED IDEOGRAPH
+ {0xC976, 0x84C8}, //12329 #CJK UNIFIED IDEOGRAPH
+ {0xC977, 0x84CB}, //12330 #CJK UNIFIED IDEOGRAPH
+ {0xC978, 0x84CC}, //12331 #CJK UNIFIED IDEOGRAPH
+ {0xC979, 0x84CE}, //12332 #CJK UNIFIED IDEOGRAPH
+ {0xC97A, 0x84CF}, //12333 #CJK UNIFIED IDEOGRAPH
+ {0xC97B, 0x84D2}, //12334 #CJK UNIFIED IDEOGRAPH
+ {0xC97C, 0x84D4}, //12335 #CJK UNIFIED IDEOGRAPH
+ {0xC97D, 0x84D5}, //12336 #CJK UNIFIED IDEOGRAPH
+ {0xC97E, 0x84D7}, //12337 #CJK UNIFIED IDEOGRAPH
+ {0xC980, 0x84D8}, //12338 #CJK UNIFIED IDEOGRAPH
+ {0xC981, 0x84D9}, //12339 #CJK UNIFIED IDEOGRAPH
+ {0xC982, 0x84DA}, //12340 #CJK UNIFIED IDEOGRAPH
+ {0xC983, 0x84DB}, //12341 #CJK UNIFIED IDEOGRAPH
+ {0xC984, 0x84DC}, //12342 #CJK UNIFIED IDEOGRAPH
+ {0xC985, 0x84DE}, //12343 #CJK UNIFIED IDEOGRAPH
+ {0xC986, 0x84E1}, //12344 #CJK UNIFIED IDEOGRAPH
+ {0xC987, 0x84E2}, //12345 #CJK UNIFIED IDEOGRAPH
+ {0xC988, 0x84E4}, //12346 #CJK UNIFIED IDEOGRAPH
+ {0xC989, 0x84E7}, //12347 #CJK UNIFIED IDEOGRAPH
+ {0xC98A, 0x84E8}, //12348 #CJK UNIFIED IDEOGRAPH
+ {0xC98B, 0x84E9}, //12349 #CJK UNIFIED IDEOGRAPH
+ {0xC98C, 0x84EA}, //12350 #CJK UNIFIED IDEOGRAPH
+ {0xC98D, 0x84EB}, //12351 #CJK UNIFIED IDEOGRAPH
+ {0xC98E, 0x84ED}, //12352 #CJK UNIFIED IDEOGRAPH
+ {0xC98F, 0x84EE}, //12353 #CJK UNIFIED IDEOGRAPH
+ {0xC990, 0x84EF}, //12354 #CJK UNIFIED IDEOGRAPH
+ {0xC991, 0x84F1}, //12355 #CJK UNIFIED IDEOGRAPH
+ {0xC992, 0x84F2}, //12356 #CJK UNIFIED IDEOGRAPH
+ {0xC993, 0x84F3}, //12357 #CJK UNIFIED IDEOGRAPH
+ {0xC994, 0x84F4}, //12358 #CJK UNIFIED IDEOGRAPH
+ {0xC995, 0x84F5}, //12359 #CJK UNIFIED IDEOGRAPH
+ {0xC996, 0x84F6}, //12360 #CJK UNIFIED IDEOGRAPH
+ {0xC997, 0x84F7}, //12361 #CJK UNIFIED IDEOGRAPH
+ {0xC998, 0x84F8}, //12362 #CJK UNIFIED IDEOGRAPH
+ {0xC999, 0x84F9}, //12363 #CJK UNIFIED IDEOGRAPH
+ {0xC99A, 0x84FA}, //12364 #CJK UNIFIED IDEOGRAPH
+ {0xC99B, 0x84FB}, //12365 #CJK UNIFIED IDEOGRAPH
+ {0xC99C, 0x84FD}, //12366 #CJK UNIFIED IDEOGRAPH
+ {0xC99D, 0x84FE}, //12367 #CJK UNIFIED IDEOGRAPH
+ {0xC99E, 0x8500}, //12368 #CJK UNIFIED IDEOGRAPH
+ {0xC99F, 0x8501}, //12369 #CJK UNIFIED IDEOGRAPH
+ {0xC9A0, 0x8502}, //12370 #CJK UNIFIED IDEOGRAPH
+ {0xC9A1, 0x4F1E}, //12371 #CJK UNIFIED IDEOGRAPH
+ {0xC9A2, 0x6563}, //12372 #CJK UNIFIED IDEOGRAPH
+ {0xC9A3, 0x6851}, //12373 #CJK UNIFIED IDEOGRAPH
+ {0xC9A4, 0x55D3}, //12374 #CJK UNIFIED IDEOGRAPH
+ {0xC9A5, 0x4E27}, //12375 #CJK UNIFIED IDEOGRAPH
+ {0xC9A6, 0x6414}, //12376 #CJK UNIFIED IDEOGRAPH
+ {0xC9A7, 0x9A9A}, //12377 #CJK UNIFIED IDEOGRAPH
+ {0xC9A8, 0x626B}, //12378 #CJK UNIFIED IDEOGRAPH
+ {0xC9A9, 0x5AC2}, //12379 #CJK UNIFIED IDEOGRAPH
+ {0xC9AA, 0x745F}, //12380 #CJK UNIFIED IDEOGRAPH
+ {0xC9AB, 0x8272}, //12381 #CJK UNIFIED IDEOGRAPH
+ {0xC9AC, 0x6DA9}, //12382 #CJK UNIFIED IDEOGRAPH
+ {0xC9AD, 0x68EE}, //12383 #CJK UNIFIED IDEOGRAPH
+ {0xC9AE, 0x50E7}, //12384 #CJK UNIFIED IDEOGRAPH
+ {0xC9AF, 0x838E}, //12385 #CJK UNIFIED IDEOGRAPH
+ {0xC9B0, 0x7802}, //12386 #CJK UNIFIED IDEOGRAPH
+ {0xC9B1, 0x6740}, //12387 #CJK UNIFIED IDEOGRAPH
+ {0xC9B2, 0x5239}, //12388 #CJK UNIFIED IDEOGRAPH
+ {0xC9B3, 0x6C99}, //12389 #CJK UNIFIED IDEOGRAPH
+ {0xC9B4, 0x7EB1}, //12390 #CJK UNIFIED IDEOGRAPH
+ {0xC9B5, 0x50BB}, //12391 #CJK UNIFIED IDEOGRAPH
+ {0xC9B6, 0x5565}, //12392 #CJK UNIFIED IDEOGRAPH
+ {0xC9B7, 0x715E}, //12393 #CJK UNIFIED IDEOGRAPH
+ {0xC9B8, 0x7B5B}, //12394 #CJK UNIFIED IDEOGRAPH
+ {0xC9B9, 0x6652}, //12395 #CJK UNIFIED IDEOGRAPH
+ {0xC9BA, 0x73CA}, //12396 #CJK UNIFIED IDEOGRAPH
+ {0xC9BB, 0x82EB}, //12397 #CJK UNIFIED IDEOGRAPH
+ {0xC9BC, 0x6749}, //12398 #CJK UNIFIED IDEOGRAPH
+ {0xC9BD, 0x5C71}, //12399 #CJK UNIFIED IDEOGRAPH
+ {0xC9BE, 0x5220}, //12400 #CJK UNIFIED IDEOGRAPH
+ {0xC9BF, 0x717D}, //12401 #CJK UNIFIED IDEOGRAPH
+ {0xC9C0, 0x886B}, //12402 #CJK UNIFIED IDEOGRAPH
+ {0xC9C1, 0x95EA}, //12403 #CJK UNIFIED IDEOGRAPH
+ {0xC9C2, 0x9655}, //12404 #CJK UNIFIED IDEOGRAPH
+ {0xC9C3, 0x64C5}, //12405 #CJK UNIFIED IDEOGRAPH
+ {0xC9C4, 0x8D61}, //12406 #CJK UNIFIED IDEOGRAPH
+ {0xC9C5, 0x81B3}, //12407 #CJK UNIFIED IDEOGRAPH
+ {0xC9C6, 0x5584}, //12408 #CJK UNIFIED IDEOGRAPH
+ {0xC9C7, 0x6C55}, //12409 #CJK UNIFIED IDEOGRAPH
+ {0xC9C8, 0x6247}, //12410 #CJK UNIFIED IDEOGRAPH
+ {0xC9C9, 0x7F2E}, //12411 #CJK UNIFIED IDEOGRAPH
+ {0xC9CA, 0x5892}, //12412 #CJK UNIFIED IDEOGRAPH
+ {0xC9CB, 0x4F24}, //12413 #CJK UNIFIED IDEOGRAPH
+ {0xC9CC, 0x5546}, //12414 #CJK UNIFIED IDEOGRAPH
+ {0xC9CD, 0x8D4F}, //12415 #CJK UNIFIED IDEOGRAPH
+ {0xC9CE, 0x664C}, //12416 #CJK UNIFIED IDEOGRAPH
+ {0xC9CF, 0x4E0A}, //12417 #CJK UNIFIED IDEOGRAPH
+ {0xC9D0, 0x5C1A}, //12418 #CJK UNIFIED IDEOGRAPH
+ {0xC9D1, 0x88F3}, //12419 #CJK UNIFIED IDEOGRAPH
+ {0xC9D2, 0x68A2}, //12420 #CJK UNIFIED IDEOGRAPH
+ {0xC9D3, 0x634E}, //12421 #CJK UNIFIED IDEOGRAPH
+ {0xC9D4, 0x7A0D}, //12422 #CJK UNIFIED IDEOGRAPH
+ {0xC9D5, 0x70E7}, //12423 #CJK UNIFIED IDEOGRAPH
+ {0xC9D6, 0x828D}, //12424 #CJK UNIFIED IDEOGRAPH
+ {0xC9D7, 0x52FA}, //12425 #CJK UNIFIED IDEOGRAPH
+ {0xC9D8, 0x97F6}, //12426 #CJK UNIFIED IDEOGRAPH
+ {0xC9D9, 0x5C11}, //12427 #CJK UNIFIED IDEOGRAPH
+ {0xC9DA, 0x54E8}, //12428 #CJK UNIFIED IDEOGRAPH
+ {0xC9DB, 0x90B5}, //12429 #CJK UNIFIED IDEOGRAPH
+ {0xC9DC, 0x7ECD}, //12430 #CJK UNIFIED IDEOGRAPH
+ {0xC9DD, 0x5962}, //12431 #CJK UNIFIED IDEOGRAPH
+ {0xC9DE, 0x8D4A}, //12432 #CJK UNIFIED IDEOGRAPH
+ {0xC9DF, 0x86C7}, //12433 #CJK UNIFIED IDEOGRAPH
+ {0xC9E0, 0x820C}, //12434 #CJK UNIFIED IDEOGRAPH
+ {0xC9E1, 0x820D}, //12435 #CJK UNIFIED IDEOGRAPH
+ {0xC9E2, 0x8D66}, //12436 #CJK UNIFIED IDEOGRAPH
+ {0xC9E3, 0x6444}, //12437 #CJK UNIFIED IDEOGRAPH
+ {0xC9E4, 0x5C04}, //12438 #CJK UNIFIED IDEOGRAPH
+ {0xC9E5, 0x6151}, //12439 #CJK UNIFIED IDEOGRAPH
+ {0xC9E6, 0x6D89}, //12440 #CJK UNIFIED IDEOGRAPH
+ {0xC9E7, 0x793E}, //12441 #CJK UNIFIED IDEOGRAPH
+ {0xC9E8, 0x8BBE}, //12442 #CJK UNIFIED IDEOGRAPH
+ {0xC9E9, 0x7837}, //12443 #CJK UNIFIED IDEOGRAPH
+ {0xC9EA, 0x7533}, //12444 #CJK UNIFIED IDEOGRAPH
+ {0xC9EB, 0x547B}, //12445 #CJK UNIFIED IDEOGRAPH
+ {0xC9EC, 0x4F38}, //12446 #CJK UNIFIED IDEOGRAPH
+ {0xC9ED, 0x8EAB}, //12447 #CJK UNIFIED IDEOGRAPH
+ {0xC9EE, 0x6DF1}, //12448 #CJK UNIFIED IDEOGRAPH
+ {0xC9EF, 0x5A20}, //12449 #CJK UNIFIED IDEOGRAPH
+ {0xC9F0, 0x7EC5}, //12450 #CJK UNIFIED IDEOGRAPH
+ {0xC9F1, 0x795E}, //12451 #CJK UNIFIED IDEOGRAPH
+ {0xC9F2, 0x6C88}, //12452 #CJK UNIFIED IDEOGRAPH
+ {0xC9F3, 0x5BA1}, //12453 #CJK UNIFIED IDEOGRAPH
+ {0xC9F4, 0x5A76}, //12454 #CJK UNIFIED IDEOGRAPH
+ {0xC9F5, 0x751A}, //12455 #CJK UNIFIED IDEOGRAPH
+ {0xC9F6, 0x80BE}, //12456 #CJK UNIFIED IDEOGRAPH
+ {0xC9F7, 0x614E}, //12457 #CJK UNIFIED IDEOGRAPH
+ {0xC9F8, 0x6E17}, //12458 #CJK UNIFIED IDEOGRAPH
+ {0xC9F9, 0x58F0}, //12459 #CJK UNIFIED IDEOGRAPH
+ {0xC9FA, 0x751F}, //12460 #CJK UNIFIED IDEOGRAPH
+ {0xC9FB, 0x7525}, //12461 #CJK UNIFIED IDEOGRAPH
+ {0xC9FC, 0x7272}, //12462 #CJK UNIFIED IDEOGRAPH
+ {0xC9FD, 0x5347}, //12463 #CJK UNIFIED IDEOGRAPH
+ {0xC9FE, 0x7EF3}, //12464 #CJK UNIFIED IDEOGRAPH
+ {0xCA40, 0x8503}, //12465 #CJK UNIFIED IDEOGRAPH
+ {0xCA41, 0x8504}, //12466 #CJK UNIFIED IDEOGRAPH
+ {0xCA42, 0x8505}, //12467 #CJK UNIFIED IDEOGRAPH
+ {0xCA43, 0x8506}, //12468 #CJK UNIFIED IDEOGRAPH
+ {0xCA44, 0x8507}, //12469 #CJK UNIFIED IDEOGRAPH
+ {0xCA45, 0x8508}, //12470 #CJK UNIFIED IDEOGRAPH
+ {0xCA46, 0x8509}, //12471 #CJK UNIFIED IDEOGRAPH
+ {0xCA47, 0x850A}, //12472 #CJK UNIFIED IDEOGRAPH
+ {0xCA48, 0x850B}, //12473 #CJK UNIFIED IDEOGRAPH
+ {0xCA49, 0x850D}, //12474 #CJK UNIFIED IDEOGRAPH
+ {0xCA4A, 0x850E}, //12475 #CJK UNIFIED IDEOGRAPH
+ {0xCA4B, 0x850F}, //12476 #CJK UNIFIED IDEOGRAPH
+ {0xCA4C, 0x8510}, //12477 #CJK UNIFIED IDEOGRAPH
+ {0xCA4D, 0x8512}, //12478 #CJK UNIFIED IDEOGRAPH
+ {0xCA4E, 0x8514}, //12479 #CJK UNIFIED IDEOGRAPH
+ {0xCA4F, 0x8515}, //12480 #CJK UNIFIED IDEOGRAPH
+ {0xCA50, 0x8516}, //12481 #CJK UNIFIED IDEOGRAPH
+ {0xCA51, 0x8518}, //12482 #CJK UNIFIED IDEOGRAPH
+ {0xCA52, 0x8519}, //12483 #CJK UNIFIED IDEOGRAPH
+ {0xCA53, 0x851B}, //12484 #CJK UNIFIED IDEOGRAPH
+ {0xCA54, 0x851C}, //12485 #CJK UNIFIED IDEOGRAPH
+ {0xCA55, 0x851D}, //12486 #CJK UNIFIED IDEOGRAPH
+ {0xCA56, 0x851E}, //12487 #CJK UNIFIED IDEOGRAPH
+ {0xCA57, 0x8520}, //12488 #CJK UNIFIED IDEOGRAPH
+ {0xCA58, 0x8522}, //12489 #CJK UNIFIED IDEOGRAPH
+ {0xCA59, 0x8523}, //12490 #CJK UNIFIED IDEOGRAPH
+ {0xCA5A, 0x8524}, //12491 #CJK UNIFIED IDEOGRAPH
+ {0xCA5B, 0x8525}, //12492 #CJK UNIFIED IDEOGRAPH
+ {0xCA5C, 0x8526}, //12493 #CJK UNIFIED IDEOGRAPH
+ {0xCA5D, 0x8527}, //12494 #CJK UNIFIED IDEOGRAPH
+ {0xCA5E, 0x8528}, //12495 #CJK UNIFIED IDEOGRAPH
+ {0xCA5F, 0x8529}, //12496 #CJK UNIFIED IDEOGRAPH
+ {0xCA60, 0x852A}, //12497 #CJK UNIFIED IDEOGRAPH
+ {0xCA61, 0x852D}, //12498 #CJK UNIFIED IDEOGRAPH
+ {0xCA62, 0x852E}, //12499 #CJK UNIFIED IDEOGRAPH
+ {0xCA63, 0x852F}, //12500 #CJK UNIFIED IDEOGRAPH
+ {0xCA64, 0x8530}, //12501 #CJK UNIFIED IDEOGRAPH
+ {0xCA65, 0x8531}, //12502 #CJK UNIFIED IDEOGRAPH
+ {0xCA66, 0x8532}, //12503 #CJK UNIFIED IDEOGRAPH
+ {0xCA67, 0x8533}, //12504 #CJK UNIFIED IDEOGRAPH
+ {0xCA68, 0x8534}, //12505 #CJK UNIFIED IDEOGRAPH
+ {0xCA69, 0x8535}, //12506 #CJK UNIFIED IDEOGRAPH
+ {0xCA6A, 0x8536}, //12507 #CJK UNIFIED IDEOGRAPH
+ {0xCA6B, 0x853E}, //12508 #CJK UNIFIED IDEOGRAPH
+ {0xCA6C, 0x853F}, //12509 #CJK UNIFIED IDEOGRAPH
+ {0xCA6D, 0x8540}, //12510 #CJK UNIFIED IDEOGRAPH
+ {0xCA6E, 0x8541}, //12511 #CJK UNIFIED IDEOGRAPH
+ {0xCA6F, 0x8542}, //12512 #CJK UNIFIED IDEOGRAPH
+ {0xCA70, 0x8544}, //12513 #CJK UNIFIED IDEOGRAPH
+ {0xCA71, 0x8545}, //12514 #CJK UNIFIED IDEOGRAPH
+ {0xCA72, 0x8546}, //12515 #CJK UNIFIED IDEOGRAPH
+ {0xCA73, 0x8547}, //12516 #CJK UNIFIED IDEOGRAPH
+ {0xCA74, 0x854B}, //12517 #CJK UNIFIED IDEOGRAPH
+ {0xCA75, 0x854C}, //12518 #CJK UNIFIED IDEOGRAPH
+ {0xCA76, 0x854D}, //12519 #CJK UNIFIED IDEOGRAPH
+ {0xCA77, 0x854E}, //12520 #CJK UNIFIED IDEOGRAPH
+ {0xCA78, 0x854F}, //12521 #CJK UNIFIED IDEOGRAPH
+ {0xCA79, 0x8550}, //12522 #CJK UNIFIED IDEOGRAPH
+ {0xCA7A, 0x8551}, //12523 #CJK UNIFIED IDEOGRAPH
+ {0xCA7B, 0x8552}, //12524 #CJK UNIFIED IDEOGRAPH
+ {0xCA7C, 0x8553}, //12525 #CJK UNIFIED IDEOGRAPH
+ {0xCA7D, 0x8554}, //12526 #CJK UNIFIED IDEOGRAPH
+ {0xCA7E, 0x8555}, //12527 #CJK UNIFIED IDEOGRAPH
+ {0xCA80, 0x8557}, //12528 #CJK UNIFIED IDEOGRAPH
+ {0xCA81, 0x8558}, //12529 #CJK UNIFIED IDEOGRAPH
+ {0xCA82, 0x855A}, //12530 #CJK UNIFIED IDEOGRAPH
+ {0xCA83, 0x855B}, //12531 #CJK UNIFIED IDEOGRAPH
+ {0xCA84, 0x855C}, //12532 #CJK UNIFIED IDEOGRAPH
+ {0xCA85, 0x855D}, //12533 #CJK UNIFIED IDEOGRAPH
+ {0xCA86, 0x855F}, //12534 #CJK UNIFIED IDEOGRAPH
+ {0xCA87, 0x8560}, //12535 #CJK UNIFIED IDEOGRAPH
+ {0xCA88, 0x8561}, //12536 #CJK UNIFIED IDEOGRAPH
+ {0xCA89, 0x8562}, //12537 #CJK UNIFIED IDEOGRAPH
+ {0xCA8A, 0x8563}, //12538 #CJK UNIFIED IDEOGRAPH
+ {0xCA8B, 0x8565}, //12539 #CJK UNIFIED IDEOGRAPH
+ {0xCA8C, 0x8566}, //12540 #CJK UNIFIED IDEOGRAPH
+ {0xCA8D, 0x8567}, //12541 #CJK UNIFIED IDEOGRAPH
+ {0xCA8E, 0x8569}, //12542 #CJK UNIFIED IDEOGRAPH
+ {0xCA8F, 0x856A}, //12543 #CJK UNIFIED IDEOGRAPH
+ {0xCA90, 0x856B}, //12544 #CJK UNIFIED IDEOGRAPH
+ {0xCA91, 0x856C}, //12545 #CJK UNIFIED IDEOGRAPH
+ {0xCA92, 0x856D}, //12546 #CJK UNIFIED IDEOGRAPH
+ {0xCA93, 0x856E}, //12547 #CJK UNIFIED IDEOGRAPH
+ {0xCA94, 0x856F}, //12548 #CJK UNIFIED IDEOGRAPH
+ {0xCA95, 0x8570}, //12549 #CJK UNIFIED IDEOGRAPH
+ {0xCA96, 0x8571}, //12550 #CJK UNIFIED IDEOGRAPH
+ {0xCA97, 0x8573}, //12551 #CJK UNIFIED IDEOGRAPH
+ {0xCA98, 0x8575}, //12552 #CJK UNIFIED IDEOGRAPH
+ {0xCA99, 0x8576}, //12553 #CJK UNIFIED IDEOGRAPH
+ {0xCA9A, 0x8577}, //12554 #CJK UNIFIED IDEOGRAPH
+ {0xCA9B, 0x8578}, //12555 #CJK UNIFIED IDEOGRAPH
+ {0xCA9C, 0x857C}, //12556 #CJK UNIFIED IDEOGRAPH
+ {0xCA9D, 0x857D}, //12557 #CJK UNIFIED IDEOGRAPH
+ {0xCA9E, 0x857F}, //12558 #CJK UNIFIED IDEOGRAPH
+ {0xCA9F, 0x8580}, //12559 #CJK UNIFIED IDEOGRAPH
+ {0xCAA0, 0x8581}, //12560 #CJK UNIFIED IDEOGRAPH
+ {0xCAA1, 0x7701}, //12561 #CJK UNIFIED IDEOGRAPH
+ {0xCAA2, 0x76DB}, //12562 #CJK UNIFIED IDEOGRAPH
+ {0xCAA3, 0x5269}, //12563 #CJK UNIFIED IDEOGRAPH
+ {0xCAA4, 0x80DC}, //12564 #CJK UNIFIED IDEOGRAPH
+ {0xCAA5, 0x5723}, //12565 #CJK UNIFIED IDEOGRAPH
+ {0xCAA6, 0x5E08}, //12566 #CJK UNIFIED IDEOGRAPH
+ {0xCAA7, 0x5931}, //12567 #CJK UNIFIED IDEOGRAPH
+ {0xCAA8, 0x72EE}, //12568 #CJK UNIFIED IDEOGRAPH
+ {0xCAA9, 0x65BD}, //12569 #CJK UNIFIED IDEOGRAPH
+ {0xCAAA, 0x6E7F}, //12570 #CJK UNIFIED IDEOGRAPH
+ {0xCAAB, 0x8BD7}, //12571 #CJK UNIFIED IDEOGRAPH
+ {0xCAAC, 0x5C38}, //12572 #CJK UNIFIED IDEOGRAPH
+ {0xCAAD, 0x8671}, //12573 #CJK UNIFIED IDEOGRAPH
+ {0xCAAE, 0x5341}, //12574 #CJK UNIFIED IDEOGRAPH
+ {0xCAAF, 0x77F3}, //12575 #CJK UNIFIED IDEOGRAPH
+ {0xCAB0, 0x62FE}, //12576 #CJK UNIFIED IDEOGRAPH
+ {0xCAB1, 0x65F6}, //12577 #CJK UNIFIED IDEOGRAPH
+ {0xCAB2, 0x4EC0}, //12578 #CJK UNIFIED IDEOGRAPH
+ {0xCAB3, 0x98DF}, //12579 #CJK UNIFIED IDEOGRAPH
+ {0xCAB4, 0x8680}, //12580 #CJK UNIFIED IDEOGRAPH
+ {0xCAB5, 0x5B9E}, //12581 #CJK UNIFIED IDEOGRAPH
+ {0xCAB6, 0x8BC6}, //12582 #CJK UNIFIED IDEOGRAPH
+ {0xCAB7, 0x53F2}, //12583 #CJK UNIFIED IDEOGRAPH
+ {0xCAB8, 0x77E2}, //12584 #CJK UNIFIED IDEOGRAPH
+ {0xCAB9, 0x4F7F}, //12585 #CJK UNIFIED IDEOGRAPH
+ {0xCABA, 0x5C4E}, //12586 #CJK UNIFIED IDEOGRAPH
+ {0xCABB, 0x9A76}, //12587 #CJK UNIFIED IDEOGRAPH
+ {0xCABC, 0x59CB}, //12588 #CJK UNIFIED IDEOGRAPH
+ {0xCABD, 0x5F0F}, //12589 #CJK UNIFIED IDEOGRAPH
+ {0xCABE, 0x793A}, //12590 #CJK UNIFIED IDEOGRAPH
+ {0xCABF, 0x58EB}, //12591 #CJK UNIFIED IDEOGRAPH
+ {0xCAC0, 0x4E16}, //12592 #CJK UNIFIED IDEOGRAPH
+ {0xCAC1, 0x67FF}, //12593 #CJK UNIFIED IDEOGRAPH
+ {0xCAC2, 0x4E8B}, //12594 #CJK UNIFIED IDEOGRAPH
+ {0xCAC3, 0x62ED}, //12595 #CJK UNIFIED IDEOGRAPH
+ {0xCAC4, 0x8A93}, //12596 #CJK UNIFIED IDEOGRAPH
+ {0xCAC5, 0x901D}, //12597 #CJK UNIFIED IDEOGRAPH
+ {0xCAC6, 0x52BF}, //12598 #CJK UNIFIED IDEOGRAPH
+ {0xCAC7, 0x662F}, //12599 #CJK UNIFIED IDEOGRAPH
+ {0xCAC8, 0x55DC}, //12600 #CJK UNIFIED IDEOGRAPH
+ {0xCAC9, 0x566C}, //12601 #CJK UNIFIED IDEOGRAPH
+ {0xCACA, 0x9002}, //12602 #CJK UNIFIED IDEOGRAPH
+ {0xCACB, 0x4ED5}, //12603 #CJK UNIFIED IDEOGRAPH
+ {0xCACC, 0x4F8D}, //12604 #CJK UNIFIED IDEOGRAPH
+ {0xCACD, 0x91CA}, //12605 #CJK UNIFIED IDEOGRAPH
+ {0xCACE, 0x9970}, //12606 #CJK UNIFIED IDEOGRAPH
+ {0xCACF, 0x6C0F}, //12607 #CJK UNIFIED IDEOGRAPH
+ {0xCAD0, 0x5E02}, //12608 #CJK UNIFIED IDEOGRAPH
+ {0xCAD1, 0x6043}, //12609 #CJK UNIFIED IDEOGRAPH
+ {0xCAD2, 0x5BA4}, //12610 #CJK UNIFIED IDEOGRAPH
+ {0xCAD3, 0x89C6}, //12611 #CJK UNIFIED IDEOGRAPH
+ {0xCAD4, 0x8BD5}, //12612 #CJK UNIFIED IDEOGRAPH
+ {0xCAD5, 0x6536}, //12613 #CJK UNIFIED IDEOGRAPH
+ {0xCAD6, 0x624B}, //12614 #CJK UNIFIED IDEOGRAPH
+ {0xCAD7, 0x9996}, //12615 #CJK UNIFIED IDEOGRAPH
+ {0xCAD8, 0x5B88}, //12616 #CJK UNIFIED IDEOGRAPH
+ {0xCAD9, 0x5BFF}, //12617 #CJK UNIFIED IDEOGRAPH
+ {0xCADA, 0x6388}, //12618 #CJK UNIFIED IDEOGRAPH
+ {0xCADB, 0x552E}, //12619 #CJK UNIFIED IDEOGRAPH
+ {0xCADC, 0x53D7}, //12620 #CJK UNIFIED IDEOGRAPH
+ {0xCADD, 0x7626}, //12621 #CJK UNIFIED IDEOGRAPH
+ {0xCADE, 0x517D}, //12622 #CJK UNIFIED IDEOGRAPH
+ {0xCADF, 0x852C}, //12623 #CJK UNIFIED IDEOGRAPH
+ {0xCAE0, 0x67A2}, //12624 #CJK UNIFIED IDEOGRAPH
+ {0xCAE1, 0x68B3}, //12625 #CJK UNIFIED IDEOGRAPH
+ {0xCAE2, 0x6B8A}, //12626 #CJK UNIFIED IDEOGRAPH
+ {0xCAE3, 0x6292}, //12627 #CJK UNIFIED IDEOGRAPH
+ {0xCAE4, 0x8F93}, //12628 #CJK UNIFIED IDEOGRAPH
+ {0xCAE5, 0x53D4}, //12629 #CJK UNIFIED IDEOGRAPH
+ {0xCAE6, 0x8212}, //12630 #CJK UNIFIED IDEOGRAPH
+ {0xCAE7, 0x6DD1}, //12631 #CJK UNIFIED IDEOGRAPH
+ {0xCAE8, 0x758F}, //12632 #CJK UNIFIED IDEOGRAPH
+ {0xCAE9, 0x4E66}, //12633 #CJK UNIFIED IDEOGRAPH
+ {0xCAEA, 0x8D4E}, //12634 #CJK UNIFIED IDEOGRAPH
+ {0xCAEB, 0x5B70}, //12635 #CJK UNIFIED IDEOGRAPH
+ {0xCAEC, 0x719F}, //12636 #CJK UNIFIED IDEOGRAPH
+ {0xCAED, 0x85AF}, //12637 #CJK UNIFIED IDEOGRAPH
+ {0xCAEE, 0x6691}, //12638 #CJK UNIFIED IDEOGRAPH
+ {0xCAEF, 0x66D9}, //12639 #CJK UNIFIED IDEOGRAPH
+ {0xCAF0, 0x7F72}, //12640 #CJK UNIFIED IDEOGRAPH
+ {0xCAF1, 0x8700}, //12641 #CJK UNIFIED IDEOGRAPH
+ {0xCAF2, 0x9ECD}, //12642 #CJK UNIFIED IDEOGRAPH
+ {0xCAF3, 0x9F20}, //12643 #CJK UNIFIED IDEOGRAPH
+ {0xCAF4, 0x5C5E}, //12644 #CJK UNIFIED IDEOGRAPH
+ {0xCAF5, 0x672F}, //12645 #CJK UNIFIED IDEOGRAPH
+ {0xCAF6, 0x8FF0}, //12646 #CJK UNIFIED IDEOGRAPH
+ {0xCAF7, 0x6811}, //12647 #CJK UNIFIED IDEOGRAPH
+ {0xCAF8, 0x675F}, //12648 #CJK UNIFIED IDEOGRAPH
+ {0xCAF9, 0x620D}, //12649 #CJK UNIFIED IDEOGRAPH
+ {0xCAFA, 0x7AD6}, //12650 #CJK UNIFIED IDEOGRAPH
+ {0xCAFB, 0x5885}, //12651 #CJK UNIFIED IDEOGRAPH
+ {0xCAFC, 0x5EB6}, //12652 #CJK UNIFIED IDEOGRAPH
+ {0xCAFD, 0x6570}, //12653 #CJK UNIFIED IDEOGRAPH
+ {0xCAFE, 0x6F31}, //12654 #CJK UNIFIED IDEOGRAPH
+ {0xCB40, 0x8582}, //12655 #CJK UNIFIED IDEOGRAPH
+ {0xCB41, 0x8583}, //12656 #CJK UNIFIED IDEOGRAPH
+ {0xCB42, 0x8586}, //12657 #CJK UNIFIED IDEOGRAPH
+ {0xCB43, 0x8588}, //12658 #CJK UNIFIED IDEOGRAPH
+ {0xCB44, 0x8589}, //12659 #CJK UNIFIED IDEOGRAPH
+ {0xCB45, 0x858A}, //12660 #CJK UNIFIED IDEOGRAPH
+ {0xCB46, 0x858B}, //12661 #CJK UNIFIED IDEOGRAPH
+ {0xCB47, 0x858C}, //12662 #CJK UNIFIED IDEOGRAPH
+ {0xCB48, 0x858D}, //12663 #CJK UNIFIED IDEOGRAPH
+ {0xCB49, 0x858E}, //12664 #CJK UNIFIED IDEOGRAPH
+ {0xCB4A, 0x8590}, //12665 #CJK UNIFIED IDEOGRAPH
+ {0xCB4B, 0x8591}, //12666 #CJK UNIFIED IDEOGRAPH
+ {0xCB4C, 0x8592}, //12667 #CJK UNIFIED IDEOGRAPH
+ {0xCB4D, 0x8593}, //12668 #CJK UNIFIED IDEOGRAPH
+ {0xCB4E, 0x8594}, //12669 #CJK UNIFIED IDEOGRAPH
+ {0xCB4F, 0x8595}, //12670 #CJK UNIFIED IDEOGRAPH
+ {0xCB50, 0x8596}, //12671 #CJK UNIFIED IDEOGRAPH
+ {0xCB51, 0x8597}, //12672 #CJK UNIFIED IDEOGRAPH
+ {0xCB52, 0x8598}, //12673 #CJK UNIFIED IDEOGRAPH
+ {0xCB53, 0x8599}, //12674 #CJK UNIFIED IDEOGRAPH
+ {0xCB54, 0x859A}, //12675 #CJK UNIFIED IDEOGRAPH
+ {0xCB55, 0x859D}, //12676 #CJK UNIFIED IDEOGRAPH
+ {0xCB56, 0x859E}, //12677 #CJK UNIFIED IDEOGRAPH
+ {0xCB57, 0x859F}, //12678 #CJK UNIFIED IDEOGRAPH
+ {0xCB58, 0x85A0}, //12679 #CJK UNIFIED IDEOGRAPH
+ {0xCB59, 0x85A1}, //12680 #CJK UNIFIED IDEOGRAPH
+ {0xCB5A, 0x85A2}, //12681 #CJK UNIFIED IDEOGRAPH
+ {0xCB5B, 0x85A3}, //12682 #CJK UNIFIED IDEOGRAPH
+ {0xCB5C, 0x85A5}, //12683 #CJK UNIFIED IDEOGRAPH
+ {0xCB5D, 0x85A6}, //12684 #CJK UNIFIED IDEOGRAPH
+ {0xCB5E, 0x85A7}, //12685 #CJK UNIFIED IDEOGRAPH
+ {0xCB5F, 0x85A9}, //12686 #CJK UNIFIED IDEOGRAPH
+ {0xCB60, 0x85AB}, //12687 #CJK UNIFIED IDEOGRAPH
+ {0xCB61, 0x85AC}, //12688 #CJK UNIFIED IDEOGRAPH
+ {0xCB62, 0x85AD}, //12689 #CJK UNIFIED IDEOGRAPH
+ {0xCB63, 0x85B1}, //12690 #CJK UNIFIED IDEOGRAPH
+ {0xCB64, 0x85B2}, //12691 #CJK UNIFIED IDEOGRAPH
+ {0xCB65, 0x85B3}, //12692 #CJK UNIFIED IDEOGRAPH
+ {0xCB66, 0x85B4}, //12693 #CJK UNIFIED IDEOGRAPH
+ {0xCB67, 0x85B5}, //12694 #CJK UNIFIED IDEOGRAPH
+ {0xCB68, 0x85B6}, //12695 #CJK UNIFIED IDEOGRAPH
+ {0xCB69, 0x85B8}, //12696 #CJK UNIFIED IDEOGRAPH
+ {0xCB6A, 0x85BA}, //12697 #CJK UNIFIED IDEOGRAPH
+ {0xCB6B, 0x85BB}, //12698 #CJK UNIFIED IDEOGRAPH
+ {0xCB6C, 0x85BC}, //12699 #CJK UNIFIED IDEOGRAPH
+ {0xCB6D, 0x85BD}, //12700 #CJK UNIFIED IDEOGRAPH
+ {0xCB6E, 0x85BE}, //12701 #CJK UNIFIED IDEOGRAPH
+ {0xCB6F, 0x85BF}, //12702 #CJK UNIFIED IDEOGRAPH
+ {0xCB70, 0x85C0}, //12703 #CJK UNIFIED IDEOGRAPH
+ {0xCB71, 0x85C2}, //12704 #CJK UNIFIED IDEOGRAPH
+ {0xCB72, 0x85C3}, //12705 #CJK UNIFIED IDEOGRAPH
+ {0xCB73, 0x85C4}, //12706 #CJK UNIFIED IDEOGRAPH
+ {0xCB74, 0x85C5}, //12707 #CJK UNIFIED IDEOGRAPH
+ {0xCB75, 0x85C6}, //12708 #CJK UNIFIED IDEOGRAPH
+ {0xCB76, 0x85C7}, //12709 #CJK UNIFIED IDEOGRAPH
+ {0xCB77, 0x85C8}, //12710 #CJK UNIFIED IDEOGRAPH
+ {0xCB78, 0x85CA}, //12711 #CJK UNIFIED IDEOGRAPH
+ {0xCB79, 0x85CB}, //12712 #CJK UNIFIED IDEOGRAPH
+ {0xCB7A, 0x85CC}, //12713 #CJK UNIFIED IDEOGRAPH
+ {0xCB7B, 0x85CD}, //12714 #CJK UNIFIED IDEOGRAPH
+ {0xCB7C, 0x85CE}, //12715 #CJK UNIFIED IDEOGRAPH
+ {0xCB7D, 0x85D1}, //12716 #CJK UNIFIED IDEOGRAPH
+ {0xCB7E, 0x85D2}, //12717 #CJK UNIFIED IDEOGRAPH
+ {0xCB80, 0x85D4}, //12718 #CJK UNIFIED IDEOGRAPH
+ {0xCB81, 0x85D6}, //12719 #CJK UNIFIED IDEOGRAPH
+ {0xCB82, 0x85D7}, //12720 #CJK UNIFIED IDEOGRAPH
+ {0xCB83, 0x85D8}, //12721 #CJK UNIFIED IDEOGRAPH
+ {0xCB84, 0x85D9}, //12722 #CJK UNIFIED IDEOGRAPH
+ {0xCB85, 0x85DA}, //12723 #CJK UNIFIED IDEOGRAPH
+ {0xCB86, 0x85DB}, //12724 #CJK UNIFIED IDEOGRAPH
+ {0xCB87, 0x85DD}, //12725 #CJK UNIFIED IDEOGRAPH
+ {0xCB88, 0x85DE}, //12726 #CJK UNIFIED IDEOGRAPH
+ {0xCB89, 0x85DF}, //12727 #CJK UNIFIED IDEOGRAPH
+ {0xCB8A, 0x85E0}, //12728 #CJK UNIFIED IDEOGRAPH
+ {0xCB8B, 0x85E1}, //12729 #CJK UNIFIED IDEOGRAPH
+ {0xCB8C, 0x85E2}, //12730 #CJK UNIFIED IDEOGRAPH
+ {0xCB8D, 0x85E3}, //12731 #CJK UNIFIED IDEOGRAPH
+ {0xCB8E, 0x85E5}, //12732 #CJK UNIFIED IDEOGRAPH
+ {0xCB8F, 0x85E6}, //12733 #CJK UNIFIED IDEOGRAPH
+ {0xCB90, 0x85E7}, //12734 #CJK UNIFIED IDEOGRAPH
+ {0xCB91, 0x85E8}, //12735 #CJK UNIFIED IDEOGRAPH
+ {0xCB92, 0x85EA}, //12736 #CJK UNIFIED IDEOGRAPH
+ {0xCB93, 0x85EB}, //12737 #CJK UNIFIED IDEOGRAPH
+ {0xCB94, 0x85EC}, //12738 #CJK UNIFIED IDEOGRAPH
+ {0xCB95, 0x85ED}, //12739 #CJK UNIFIED IDEOGRAPH
+ {0xCB96, 0x85EE}, //12740 #CJK UNIFIED IDEOGRAPH
+ {0xCB97, 0x85EF}, //12741 #CJK UNIFIED IDEOGRAPH
+ {0xCB98, 0x85F0}, //12742 #CJK UNIFIED IDEOGRAPH
+ {0xCB99, 0x85F1}, //12743 #CJK UNIFIED IDEOGRAPH
+ {0xCB9A, 0x85F2}, //12744 #CJK UNIFIED IDEOGRAPH
+ {0xCB9B, 0x85F3}, //12745 #CJK UNIFIED IDEOGRAPH
+ {0xCB9C, 0x85F4}, //12746 #CJK UNIFIED IDEOGRAPH
+ {0xCB9D, 0x85F5}, //12747 #CJK UNIFIED IDEOGRAPH
+ {0xCB9E, 0x85F6}, //12748 #CJK UNIFIED IDEOGRAPH
+ {0xCB9F, 0x85F7}, //12749 #CJK UNIFIED IDEOGRAPH
+ {0xCBA0, 0x85F8}, //12750 #CJK UNIFIED IDEOGRAPH
+ {0xCBA1, 0x6055}, //12751 #CJK UNIFIED IDEOGRAPH
+ {0xCBA2, 0x5237}, //12752 #CJK UNIFIED IDEOGRAPH
+ {0xCBA3, 0x800D}, //12753 #CJK UNIFIED IDEOGRAPH
+ {0xCBA4, 0x6454}, //12754 #CJK UNIFIED IDEOGRAPH
+ {0xCBA5, 0x8870}, //12755 #CJK UNIFIED IDEOGRAPH
+ {0xCBA6, 0x7529}, //12756 #CJK UNIFIED IDEOGRAPH
+ {0xCBA7, 0x5E05}, //12757 #CJK UNIFIED IDEOGRAPH
+ {0xCBA8, 0x6813}, //12758 #CJK UNIFIED IDEOGRAPH
+ {0xCBA9, 0x62F4}, //12759 #CJK UNIFIED IDEOGRAPH
+ {0xCBAA, 0x971C}, //12760 #CJK UNIFIED IDEOGRAPH
+ {0xCBAB, 0x53CC}, //12761 #CJK UNIFIED IDEOGRAPH
+ {0xCBAC, 0x723D}, //12762 #CJK UNIFIED IDEOGRAPH
+ {0xCBAD, 0x8C01}, //12763 #CJK UNIFIED IDEOGRAPH
+ {0xCBAE, 0x6C34}, //12764 #CJK UNIFIED IDEOGRAPH
+ {0xCBAF, 0x7761}, //12765 #CJK UNIFIED IDEOGRAPH
+ {0xCBB0, 0x7A0E}, //12766 #CJK UNIFIED IDEOGRAPH
+ {0xCBB1, 0x542E}, //12767 #CJK UNIFIED IDEOGRAPH
+ {0xCBB2, 0x77AC}, //12768 #CJK UNIFIED IDEOGRAPH
+ {0xCBB3, 0x987A}, //12769 #CJK UNIFIED IDEOGRAPH
+ {0xCBB4, 0x821C}, //12770 #CJK UNIFIED IDEOGRAPH
+ {0xCBB5, 0x8BF4}, //12771 #CJK UNIFIED IDEOGRAPH
+ {0xCBB6, 0x7855}, //12772 #CJK UNIFIED IDEOGRAPH
+ {0xCBB7, 0x6714}, //12773 #CJK UNIFIED IDEOGRAPH
+ {0xCBB8, 0x70C1}, //12774 #CJK UNIFIED IDEOGRAPH
+ {0xCBB9, 0x65AF}, //12775 #CJK UNIFIED IDEOGRAPH
+ {0xCBBA, 0x6495}, //12776 #CJK UNIFIED IDEOGRAPH
+ {0xCBBB, 0x5636}, //12777 #CJK UNIFIED IDEOGRAPH
+ {0xCBBC, 0x601D}, //12778 #CJK UNIFIED IDEOGRAPH
+ {0xCBBD, 0x79C1}, //12779 #CJK UNIFIED IDEOGRAPH
+ {0xCBBE, 0x53F8}, //12780 #CJK UNIFIED IDEOGRAPH
+ {0xCBBF, 0x4E1D}, //12781 #CJK UNIFIED IDEOGRAPH
+ {0xCBC0, 0x6B7B}, //12782 #CJK UNIFIED IDEOGRAPH
+ {0xCBC1, 0x8086}, //12783 #CJK UNIFIED IDEOGRAPH
+ {0xCBC2, 0x5BFA}, //12784 #CJK UNIFIED IDEOGRAPH
+ {0xCBC3, 0x55E3}, //12785 #CJK UNIFIED IDEOGRAPH
+ {0xCBC4, 0x56DB}, //12786 #CJK UNIFIED IDEOGRAPH
+ {0xCBC5, 0x4F3A}, //12787 #CJK UNIFIED IDEOGRAPH
+ {0xCBC6, 0x4F3C}, //12788 #CJK UNIFIED IDEOGRAPH
+ {0xCBC7, 0x9972}, //12789 #CJK UNIFIED IDEOGRAPH
+ {0xCBC8, 0x5DF3}, //12790 #CJK UNIFIED IDEOGRAPH
+ {0xCBC9, 0x677E}, //12791 #CJK UNIFIED IDEOGRAPH
+ {0xCBCA, 0x8038}, //12792 #CJK UNIFIED IDEOGRAPH
+ {0xCBCB, 0x6002}, //12793 #CJK UNIFIED IDEOGRAPH
+ {0xCBCC, 0x9882}, //12794 #CJK UNIFIED IDEOGRAPH
+ {0xCBCD, 0x9001}, //12795 #CJK UNIFIED IDEOGRAPH
+ {0xCBCE, 0x5B8B}, //12796 #CJK UNIFIED IDEOGRAPH
+ {0xCBCF, 0x8BBC}, //12797 #CJK UNIFIED IDEOGRAPH
+ {0xCBD0, 0x8BF5}, //12798 #CJK UNIFIED IDEOGRAPH
+ {0xCBD1, 0x641C}, //12799 #CJK UNIFIED IDEOGRAPH
+ {0xCBD2, 0x8258}, //12800 #CJK UNIFIED IDEOGRAPH
+ {0xCBD3, 0x64DE}, //12801 #CJK UNIFIED IDEOGRAPH
+ {0xCBD4, 0x55FD}, //12802 #CJK UNIFIED IDEOGRAPH
+ {0xCBD5, 0x82CF}, //12803 #CJK UNIFIED IDEOGRAPH
+ {0xCBD6, 0x9165}, //12804 #CJK UNIFIED IDEOGRAPH
+ {0xCBD7, 0x4FD7}, //12805 #CJK UNIFIED IDEOGRAPH
+ {0xCBD8, 0x7D20}, //12806 #CJK UNIFIED IDEOGRAPH
+ {0xCBD9, 0x901F}, //12807 #CJK UNIFIED IDEOGRAPH
+ {0xCBDA, 0x7C9F}, //12808 #CJK UNIFIED IDEOGRAPH
+ {0xCBDB, 0x50F3}, //12809 #CJK UNIFIED IDEOGRAPH
+ {0xCBDC, 0x5851}, //12810 #CJK UNIFIED IDEOGRAPH
+ {0xCBDD, 0x6EAF}, //12811 #CJK UNIFIED IDEOGRAPH
+ {0xCBDE, 0x5BBF}, //12812 #CJK UNIFIED IDEOGRAPH
+ {0xCBDF, 0x8BC9}, //12813 #CJK UNIFIED IDEOGRAPH
+ {0xCBE0, 0x8083}, //12814 #CJK UNIFIED IDEOGRAPH
+ {0xCBE1, 0x9178}, //12815 #CJK UNIFIED IDEOGRAPH
+ {0xCBE2, 0x849C}, //12816 #CJK UNIFIED IDEOGRAPH
+ {0xCBE3, 0x7B97}, //12817 #CJK UNIFIED IDEOGRAPH
+ {0xCBE4, 0x867D}, //12818 #CJK UNIFIED IDEOGRAPH
+ {0xCBE5, 0x968B}, //12819 #CJK UNIFIED IDEOGRAPH
+ {0xCBE6, 0x968F}, //12820 #CJK UNIFIED IDEOGRAPH
+ {0xCBE7, 0x7EE5}, //12821 #CJK UNIFIED IDEOGRAPH
+ {0xCBE8, 0x9AD3}, //12822 #CJK UNIFIED IDEOGRAPH
+ {0xCBE9, 0x788E}, //12823 #CJK UNIFIED IDEOGRAPH
+ {0xCBEA, 0x5C81}, //12824 #CJK UNIFIED IDEOGRAPH
+ {0xCBEB, 0x7A57}, //12825 #CJK UNIFIED IDEOGRAPH
+ {0xCBEC, 0x9042}, //12826 #CJK UNIFIED IDEOGRAPH
+ {0xCBED, 0x96A7}, //12827 #CJK UNIFIED IDEOGRAPH
+ {0xCBEE, 0x795F}, //12828 #CJK UNIFIED IDEOGRAPH
+ {0xCBEF, 0x5B59}, //12829 #CJK UNIFIED IDEOGRAPH
+ {0xCBF0, 0x635F}, //12830 #CJK UNIFIED IDEOGRAPH
+ {0xCBF1, 0x7B0B}, //12831 #CJK UNIFIED IDEOGRAPH
+ {0xCBF2, 0x84D1}, //12832 #CJK UNIFIED IDEOGRAPH
+ {0xCBF3, 0x68AD}, //12833 #CJK UNIFIED IDEOGRAPH
+ {0xCBF4, 0x5506}, //12834 #CJK UNIFIED IDEOGRAPH
+ {0xCBF5, 0x7F29}, //12835 #CJK UNIFIED IDEOGRAPH
+ {0xCBF6, 0x7410}, //12836 #CJK UNIFIED IDEOGRAPH
+ {0xCBF7, 0x7D22}, //12837 #CJK UNIFIED IDEOGRAPH
+ {0xCBF8, 0x9501}, //12838 #CJK UNIFIED IDEOGRAPH
+ {0xCBF9, 0x6240}, //12839 #CJK UNIFIED IDEOGRAPH
+ {0xCBFA, 0x584C}, //12840 #CJK UNIFIED IDEOGRAPH
+ {0xCBFB, 0x4ED6}, //12841 #CJK UNIFIED IDEOGRAPH
+ {0xCBFC, 0x5B83}, //12842 #CJK UNIFIED IDEOGRAPH
+ {0xCBFD, 0x5979}, //12843 #CJK UNIFIED IDEOGRAPH
+ {0xCBFE, 0x5854}, //12844 #CJK UNIFIED IDEOGRAPH
+ {0xCC40, 0x85F9}, //12845 #CJK UNIFIED IDEOGRAPH
+ {0xCC41, 0x85FA}, //12846 #CJK UNIFIED IDEOGRAPH
+ {0xCC42, 0x85FC}, //12847 #CJK UNIFIED IDEOGRAPH
+ {0xCC43, 0x85FD}, //12848 #CJK UNIFIED IDEOGRAPH
+ {0xCC44, 0x85FE}, //12849 #CJK UNIFIED IDEOGRAPH
+ {0xCC45, 0x8600}, //12850 #CJK UNIFIED IDEOGRAPH
+ {0xCC46, 0x8601}, //12851 #CJK UNIFIED IDEOGRAPH
+ {0xCC47, 0x8602}, //12852 #CJK UNIFIED IDEOGRAPH
+ {0xCC48, 0x8603}, //12853 #CJK UNIFIED IDEOGRAPH
+ {0xCC49, 0x8604}, //12854 #CJK UNIFIED IDEOGRAPH
+ {0xCC4A, 0x8606}, //12855 #CJK UNIFIED IDEOGRAPH
+ {0xCC4B, 0x8607}, //12856 #CJK UNIFIED IDEOGRAPH
+ {0xCC4C, 0x8608}, //12857 #CJK UNIFIED IDEOGRAPH
+ {0xCC4D, 0x8609}, //12858 #CJK UNIFIED IDEOGRAPH
+ {0xCC4E, 0x860A}, //12859 #CJK UNIFIED IDEOGRAPH
+ {0xCC4F, 0x860B}, //12860 #CJK UNIFIED IDEOGRAPH
+ {0xCC50, 0x860C}, //12861 #CJK UNIFIED IDEOGRAPH
+ {0xCC51, 0x860D}, //12862 #CJK UNIFIED IDEOGRAPH
+ {0xCC52, 0x860E}, //12863 #CJK UNIFIED IDEOGRAPH
+ {0xCC53, 0x860F}, //12864 #CJK UNIFIED IDEOGRAPH
+ {0xCC54, 0x8610}, //12865 #CJK UNIFIED IDEOGRAPH
+ {0xCC55, 0x8612}, //12866 #CJK UNIFIED IDEOGRAPH
+ {0xCC56, 0x8613}, //12867 #CJK UNIFIED IDEOGRAPH
+ {0xCC57, 0x8614}, //12868 #CJK UNIFIED IDEOGRAPH
+ {0xCC58, 0x8615}, //12869 #CJK UNIFIED IDEOGRAPH
+ {0xCC59, 0x8617}, //12870 #CJK UNIFIED IDEOGRAPH
+ {0xCC5A, 0x8618}, //12871 #CJK UNIFIED IDEOGRAPH
+ {0xCC5B, 0x8619}, //12872 #CJK UNIFIED IDEOGRAPH
+ {0xCC5C, 0x861A}, //12873 #CJK UNIFIED IDEOGRAPH
+ {0xCC5D, 0x861B}, //12874 #CJK UNIFIED IDEOGRAPH
+ {0xCC5E, 0x861C}, //12875 #CJK UNIFIED IDEOGRAPH
+ {0xCC5F, 0x861D}, //12876 #CJK UNIFIED IDEOGRAPH
+ {0xCC60, 0x861E}, //12877 #CJK UNIFIED IDEOGRAPH
+ {0xCC61, 0x861F}, //12878 #CJK UNIFIED IDEOGRAPH
+ {0xCC62, 0x8620}, //12879 #CJK UNIFIED IDEOGRAPH
+ {0xCC63, 0x8621}, //12880 #CJK UNIFIED IDEOGRAPH
+ {0xCC64, 0x8622}, //12881 #CJK UNIFIED IDEOGRAPH
+ {0xCC65, 0x8623}, //12882 #CJK UNIFIED IDEOGRAPH
+ {0xCC66, 0x8624}, //12883 #CJK UNIFIED IDEOGRAPH
+ {0xCC67, 0x8625}, //12884 #CJK UNIFIED IDEOGRAPH
+ {0xCC68, 0x8626}, //12885 #CJK UNIFIED IDEOGRAPH
+ {0xCC69, 0x8628}, //12886 #CJK UNIFIED IDEOGRAPH
+ {0xCC6A, 0x862A}, //12887 #CJK UNIFIED IDEOGRAPH
+ {0xCC6B, 0x862B}, //12888 #CJK UNIFIED IDEOGRAPH
+ {0xCC6C, 0x862C}, //12889 #CJK UNIFIED IDEOGRAPH
+ {0xCC6D, 0x862D}, //12890 #CJK UNIFIED IDEOGRAPH
+ {0xCC6E, 0x862E}, //12891 #CJK UNIFIED IDEOGRAPH
+ {0xCC6F, 0x862F}, //12892 #CJK UNIFIED IDEOGRAPH
+ {0xCC70, 0x8630}, //12893 #CJK UNIFIED IDEOGRAPH
+ {0xCC71, 0x8631}, //12894 #CJK UNIFIED IDEOGRAPH
+ {0xCC72, 0x8632}, //12895 #CJK UNIFIED IDEOGRAPH
+ {0xCC73, 0x8633}, //12896 #CJK UNIFIED IDEOGRAPH
+ {0xCC74, 0x8634}, //12897 #CJK UNIFIED IDEOGRAPH
+ {0xCC75, 0x8635}, //12898 #CJK UNIFIED IDEOGRAPH
+ {0xCC76, 0x8636}, //12899 #CJK UNIFIED IDEOGRAPH
+ {0xCC77, 0x8637}, //12900 #CJK UNIFIED IDEOGRAPH
+ {0xCC78, 0x8639}, //12901 #CJK UNIFIED IDEOGRAPH
+ {0xCC79, 0x863A}, //12902 #CJK UNIFIED IDEOGRAPH
+ {0xCC7A, 0x863B}, //12903 #CJK UNIFIED IDEOGRAPH
+ {0xCC7B, 0x863D}, //12904 #CJK UNIFIED IDEOGRAPH
+ {0xCC7C, 0x863E}, //12905 #CJK UNIFIED IDEOGRAPH
+ {0xCC7D, 0x863F}, //12906 #CJK UNIFIED IDEOGRAPH
+ {0xCC7E, 0x8640}, //12907 #CJK UNIFIED IDEOGRAPH
+ {0xCC80, 0x8641}, //12908 #CJK UNIFIED IDEOGRAPH
+ {0xCC81, 0x8642}, //12909 #CJK UNIFIED IDEOGRAPH
+ {0xCC82, 0x8643}, //12910 #CJK UNIFIED IDEOGRAPH
+ {0xCC83, 0x8644}, //12911 #CJK UNIFIED IDEOGRAPH
+ {0xCC84, 0x8645}, //12912 #CJK UNIFIED IDEOGRAPH
+ {0xCC85, 0x8646}, //12913 #CJK UNIFIED IDEOGRAPH
+ {0xCC86, 0x8647}, //12914 #CJK UNIFIED IDEOGRAPH
+ {0xCC87, 0x8648}, //12915 #CJK UNIFIED IDEOGRAPH
+ {0xCC88, 0x8649}, //12916 #CJK UNIFIED IDEOGRAPH
+ {0xCC89, 0x864A}, //12917 #CJK UNIFIED IDEOGRAPH
+ {0xCC8A, 0x864B}, //12918 #CJK UNIFIED IDEOGRAPH
+ {0xCC8B, 0x864C}, //12919 #CJK UNIFIED IDEOGRAPH
+ {0xCC8C, 0x8652}, //12920 #CJK UNIFIED IDEOGRAPH
+ {0xCC8D, 0x8653}, //12921 #CJK UNIFIED IDEOGRAPH
+ {0xCC8E, 0x8655}, //12922 #CJK UNIFIED IDEOGRAPH
+ {0xCC8F, 0x8656}, //12923 #CJK UNIFIED IDEOGRAPH
+ {0xCC90, 0x8657}, //12924 #CJK UNIFIED IDEOGRAPH
+ {0xCC91, 0x8658}, //12925 #CJK UNIFIED IDEOGRAPH
+ {0xCC92, 0x8659}, //12926 #CJK UNIFIED IDEOGRAPH
+ {0xCC93, 0x865B}, //12927 #CJK UNIFIED IDEOGRAPH
+ {0xCC94, 0x865C}, //12928 #CJK UNIFIED IDEOGRAPH
+ {0xCC95, 0x865D}, //12929 #CJK UNIFIED IDEOGRAPH
+ {0xCC96, 0x865F}, //12930 #CJK UNIFIED IDEOGRAPH
+ {0xCC97, 0x8660}, //12931 #CJK UNIFIED IDEOGRAPH
+ {0xCC98, 0x8661}, //12932 #CJK UNIFIED IDEOGRAPH
+ {0xCC99, 0x8663}, //12933 #CJK UNIFIED IDEOGRAPH
+ {0xCC9A, 0x8664}, //12934 #CJK UNIFIED IDEOGRAPH
+ {0xCC9B, 0x8665}, //12935 #CJK UNIFIED IDEOGRAPH
+ {0xCC9C, 0x8666}, //12936 #CJK UNIFIED IDEOGRAPH
+ {0xCC9D, 0x8667}, //12937 #CJK UNIFIED IDEOGRAPH
+ {0xCC9E, 0x8668}, //12938 #CJK UNIFIED IDEOGRAPH
+ {0xCC9F, 0x8669}, //12939 #CJK UNIFIED IDEOGRAPH
+ {0xCCA0, 0x866A}, //12940 #CJK UNIFIED IDEOGRAPH
+ {0xCCA1, 0x736D}, //12941 #CJK UNIFIED IDEOGRAPH
+ {0xCCA2, 0x631E}, //12942 #CJK UNIFIED IDEOGRAPH
+ {0xCCA3, 0x8E4B}, //12943 #CJK UNIFIED IDEOGRAPH
+ {0xCCA4, 0x8E0F}, //12944 #CJK UNIFIED IDEOGRAPH
+ {0xCCA5, 0x80CE}, //12945 #CJK UNIFIED IDEOGRAPH
+ {0xCCA6, 0x82D4}, //12946 #CJK UNIFIED IDEOGRAPH
+ {0xCCA7, 0x62AC}, //12947 #CJK UNIFIED IDEOGRAPH
+ {0xCCA8, 0x53F0}, //12948 #CJK UNIFIED IDEOGRAPH
+ {0xCCA9, 0x6CF0}, //12949 #CJK UNIFIED IDEOGRAPH
+ {0xCCAA, 0x915E}, //12950 #CJK UNIFIED IDEOGRAPH
+ {0xCCAB, 0x592A}, //12951 #CJK UNIFIED IDEOGRAPH
+ {0xCCAC, 0x6001}, //12952 #CJK UNIFIED IDEOGRAPH
+ {0xCCAD, 0x6C70}, //12953 #CJK UNIFIED IDEOGRAPH
+ {0xCCAE, 0x574D}, //12954 #CJK UNIFIED IDEOGRAPH
+ {0xCCAF, 0x644A}, //12955 #CJK UNIFIED IDEOGRAPH
+ {0xCCB0, 0x8D2A}, //12956 #CJK UNIFIED IDEOGRAPH
+ {0xCCB1, 0x762B}, //12957 #CJK UNIFIED IDEOGRAPH
+ {0xCCB2, 0x6EE9}, //12958 #CJK UNIFIED IDEOGRAPH
+ {0xCCB3, 0x575B}, //12959 #CJK UNIFIED IDEOGRAPH
+ {0xCCB4, 0x6A80}, //12960 #CJK UNIFIED IDEOGRAPH
+ {0xCCB5, 0x75F0}, //12961 #CJK UNIFIED IDEOGRAPH
+ {0xCCB6, 0x6F6D}, //12962 #CJK UNIFIED IDEOGRAPH
+ {0xCCB7, 0x8C2D}, //12963 #CJK UNIFIED IDEOGRAPH
+ {0xCCB8, 0x8C08}, //12964 #CJK UNIFIED IDEOGRAPH
+ {0xCCB9, 0x5766}, //12965 #CJK UNIFIED IDEOGRAPH
+ {0xCCBA, 0x6BEF}, //12966 #CJK UNIFIED IDEOGRAPH
+ {0xCCBB, 0x8892}, //12967 #CJK UNIFIED IDEOGRAPH
+ {0xCCBC, 0x78B3}, //12968 #CJK UNIFIED IDEOGRAPH
+ {0xCCBD, 0x63A2}, //12969 #CJK UNIFIED IDEOGRAPH
+ {0xCCBE, 0x53F9}, //12970 #CJK UNIFIED IDEOGRAPH
+ {0xCCBF, 0x70AD}, //12971 #CJK UNIFIED IDEOGRAPH
+ {0xCCC0, 0x6C64}, //12972 #CJK UNIFIED IDEOGRAPH
+ {0xCCC1, 0x5858}, //12973 #CJK UNIFIED IDEOGRAPH
+ {0xCCC2, 0x642A}, //12974 #CJK UNIFIED IDEOGRAPH
+ {0xCCC3, 0x5802}, //12975 #CJK UNIFIED IDEOGRAPH
+ {0xCCC4, 0x68E0}, //12976 #CJK UNIFIED IDEOGRAPH
+ {0xCCC5, 0x819B}, //12977 #CJK UNIFIED IDEOGRAPH
+ {0xCCC6, 0x5510}, //12978 #CJK UNIFIED IDEOGRAPH
+ {0xCCC7, 0x7CD6}, //12979 #CJK UNIFIED IDEOGRAPH
+ {0xCCC8, 0x5018}, //12980 #CJK UNIFIED IDEOGRAPH
+ {0xCCC9, 0x8EBA}, //12981 #CJK UNIFIED IDEOGRAPH
+ {0xCCCA, 0x6DCC}, //12982 #CJK UNIFIED IDEOGRAPH
+ {0xCCCB, 0x8D9F}, //12983 #CJK UNIFIED IDEOGRAPH
+ {0xCCCC, 0x70EB}, //12984 #CJK UNIFIED IDEOGRAPH
+ {0xCCCD, 0x638F}, //12985 #CJK UNIFIED IDEOGRAPH
+ {0xCCCE, 0x6D9B}, //12986 #CJK UNIFIED IDEOGRAPH
+ {0xCCCF, 0x6ED4}, //12987 #CJK UNIFIED IDEOGRAPH
+ {0xCCD0, 0x7EE6}, //12988 #CJK UNIFIED IDEOGRAPH
+ {0xCCD1, 0x8404}, //12989 #CJK UNIFIED IDEOGRAPH
+ {0xCCD2, 0x6843}, //12990 #CJK UNIFIED IDEOGRAPH
+ {0xCCD3, 0x9003}, //12991 #CJK UNIFIED IDEOGRAPH
+ {0xCCD4, 0x6DD8}, //12992 #CJK UNIFIED IDEOGRAPH
+ {0xCCD5, 0x9676}, //12993 #CJK UNIFIED IDEOGRAPH
+ {0xCCD6, 0x8BA8}, //12994 #CJK UNIFIED IDEOGRAPH
+ {0xCCD7, 0x5957}, //12995 #CJK UNIFIED IDEOGRAPH
+ {0xCCD8, 0x7279}, //12996 #CJK UNIFIED IDEOGRAPH
+ {0xCCD9, 0x85E4}, //12997 #CJK UNIFIED IDEOGRAPH
+ {0xCCDA, 0x817E}, //12998 #CJK UNIFIED IDEOGRAPH
+ {0xCCDB, 0x75BC}, //12999 #CJK UNIFIED IDEOGRAPH
+ {0xCCDC, 0x8A8A}, //13000 #CJK UNIFIED IDEOGRAPH
+ {0xCCDD, 0x68AF}, //13001 #CJK UNIFIED IDEOGRAPH
+ {0xCCDE, 0x5254}, //13002 #CJK UNIFIED IDEOGRAPH
+ {0xCCDF, 0x8E22}, //13003 #CJK UNIFIED IDEOGRAPH
+ {0xCCE0, 0x9511}, //13004 #CJK UNIFIED IDEOGRAPH
+ {0xCCE1, 0x63D0}, //13005 #CJK UNIFIED IDEOGRAPH
+ {0xCCE2, 0x9898}, //13006 #CJK UNIFIED IDEOGRAPH
+ {0xCCE3, 0x8E44}, //13007 #CJK UNIFIED IDEOGRAPH
+ {0xCCE4, 0x557C}, //13008 #CJK UNIFIED IDEOGRAPH
+ {0xCCE5, 0x4F53}, //13009 #CJK UNIFIED IDEOGRAPH
+ {0xCCE6, 0x66FF}, //13010 #CJK UNIFIED IDEOGRAPH
+ {0xCCE7, 0x568F}, //13011 #CJK UNIFIED IDEOGRAPH
+ {0xCCE8, 0x60D5}, //13012 #CJK UNIFIED IDEOGRAPH
+ {0xCCE9, 0x6D95}, //13013 #CJK UNIFIED IDEOGRAPH
+ {0xCCEA, 0x5243}, //13014 #CJK UNIFIED IDEOGRAPH
+ {0xCCEB, 0x5C49}, //13015 #CJK UNIFIED IDEOGRAPH
+ {0xCCEC, 0x5929}, //13016 #CJK UNIFIED IDEOGRAPH
+ {0xCCED, 0x6DFB}, //13017 #CJK UNIFIED IDEOGRAPH
+ {0xCCEE, 0x586B}, //13018 #CJK UNIFIED IDEOGRAPH
+ {0xCCEF, 0x7530}, //13019 #CJK UNIFIED IDEOGRAPH
+ {0xCCF0, 0x751C}, //13020 #CJK UNIFIED IDEOGRAPH
+ {0xCCF1, 0x606C}, //13021 #CJK UNIFIED IDEOGRAPH
+ {0xCCF2, 0x8214}, //13022 #CJK UNIFIED IDEOGRAPH
+ {0xCCF3, 0x8146}, //13023 #CJK UNIFIED IDEOGRAPH
+ {0xCCF4, 0x6311}, //13024 #CJK UNIFIED IDEOGRAPH
+ {0xCCF5, 0x6761}, //13025 #CJK UNIFIED IDEOGRAPH
+ {0xCCF6, 0x8FE2}, //13026 #CJK UNIFIED IDEOGRAPH
+ {0xCCF7, 0x773A}, //13027 #CJK UNIFIED IDEOGRAPH
+ {0xCCF8, 0x8DF3}, //13028 #CJK UNIFIED IDEOGRAPH
+ {0xCCF9, 0x8D34}, //13029 #CJK UNIFIED IDEOGRAPH
+ {0xCCFA, 0x94C1}, //13030 #CJK UNIFIED IDEOGRAPH
+ {0xCCFB, 0x5E16}, //13031 #CJK UNIFIED IDEOGRAPH
+ {0xCCFC, 0x5385}, //13032 #CJK UNIFIED IDEOGRAPH
+ {0xCCFD, 0x542C}, //13033 #CJK UNIFIED IDEOGRAPH
+ {0xCCFE, 0x70C3}, //13034 #CJK UNIFIED IDEOGRAPH
+ {0xCD40, 0x866D}, //13035 #CJK UNIFIED IDEOGRAPH
+ {0xCD41, 0x866F}, //13036 #CJK UNIFIED IDEOGRAPH
+ {0xCD42, 0x8670}, //13037 #CJK UNIFIED IDEOGRAPH
+ {0xCD43, 0x8672}, //13038 #CJK UNIFIED IDEOGRAPH
+ {0xCD44, 0x8673}, //13039 #CJK UNIFIED IDEOGRAPH
+ {0xCD45, 0x8674}, //13040 #CJK UNIFIED IDEOGRAPH
+ {0xCD46, 0x8675}, //13041 #CJK UNIFIED IDEOGRAPH
+ {0xCD47, 0x8676}, //13042 #CJK UNIFIED IDEOGRAPH
+ {0xCD48, 0x8677}, //13043 #CJK UNIFIED IDEOGRAPH
+ {0xCD49, 0x8678}, //13044 #CJK UNIFIED IDEOGRAPH
+ {0xCD4A, 0x8683}, //13045 #CJK UNIFIED IDEOGRAPH
+ {0xCD4B, 0x8684}, //13046 #CJK UNIFIED IDEOGRAPH
+ {0xCD4C, 0x8685}, //13047 #CJK UNIFIED IDEOGRAPH
+ {0xCD4D, 0x8686}, //13048 #CJK UNIFIED IDEOGRAPH
+ {0xCD4E, 0x8687}, //13049 #CJK UNIFIED IDEOGRAPH
+ {0xCD4F, 0x8688}, //13050 #CJK UNIFIED IDEOGRAPH
+ {0xCD50, 0x8689}, //13051 #CJK UNIFIED IDEOGRAPH
+ {0xCD51, 0x868E}, //13052 #CJK UNIFIED IDEOGRAPH
+ {0xCD52, 0x868F}, //13053 #CJK UNIFIED IDEOGRAPH
+ {0xCD53, 0x8690}, //13054 #CJK UNIFIED IDEOGRAPH
+ {0xCD54, 0x8691}, //13055 #CJK UNIFIED IDEOGRAPH
+ {0xCD55, 0x8692}, //13056 #CJK UNIFIED IDEOGRAPH
+ {0xCD56, 0x8694}, //13057 #CJK UNIFIED IDEOGRAPH
+ {0xCD57, 0x8696}, //13058 #CJK UNIFIED IDEOGRAPH
+ {0xCD58, 0x8697}, //13059 #CJK UNIFIED IDEOGRAPH
+ {0xCD59, 0x8698}, //13060 #CJK UNIFIED IDEOGRAPH
+ {0xCD5A, 0x8699}, //13061 #CJK UNIFIED IDEOGRAPH
+ {0xCD5B, 0x869A}, //13062 #CJK UNIFIED IDEOGRAPH
+ {0xCD5C, 0x869B}, //13063 #CJK UNIFIED IDEOGRAPH
+ {0xCD5D, 0x869E}, //13064 #CJK UNIFIED IDEOGRAPH
+ {0xCD5E, 0x869F}, //13065 #CJK UNIFIED IDEOGRAPH
+ {0xCD5F, 0x86A0}, //13066 #CJK UNIFIED IDEOGRAPH
+ {0xCD60, 0x86A1}, //13067 #CJK UNIFIED IDEOGRAPH
+ {0xCD61, 0x86A2}, //13068 #CJK UNIFIED IDEOGRAPH
+ {0xCD62, 0x86A5}, //13069 #CJK UNIFIED IDEOGRAPH
+ {0xCD63, 0x86A6}, //13070 #CJK UNIFIED IDEOGRAPH
+ {0xCD64, 0x86AB}, //13071 #CJK UNIFIED IDEOGRAPH
+ {0xCD65, 0x86AD}, //13072 #CJK UNIFIED IDEOGRAPH
+ {0xCD66, 0x86AE}, //13073 #CJK UNIFIED IDEOGRAPH
+ {0xCD67, 0x86B2}, //13074 #CJK UNIFIED IDEOGRAPH
+ {0xCD68, 0x86B3}, //13075 #CJK UNIFIED IDEOGRAPH
+ {0xCD69, 0x86B7}, //13076 #CJK UNIFIED IDEOGRAPH
+ {0xCD6A, 0x86B8}, //13077 #CJK UNIFIED IDEOGRAPH
+ {0xCD6B, 0x86B9}, //13078 #CJK UNIFIED IDEOGRAPH
+ {0xCD6C, 0x86BB}, //13079 #CJK UNIFIED IDEOGRAPH
+ {0xCD6D, 0x86BC}, //13080 #CJK UNIFIED IDEOGRAPH
+ {0xCD6E, 0x86BD}, //13081 #CJK UNIFIED IDEOGRAPH
+ {0xCD6F, 0x86BE}, //13082 #CJK UNIFIED IDEOGRAPH
+ {0xCD70, 0x86BF}, //13083 #CJK UNIFIED IDEOGRAPH
+ {0xCD71, 0x86C1}, //13084 #CJK UNIFIED IDEOGRAPH
+ {0xCD72, 0x86C2}, //13085 #CJK UNIFIED IDEOGRAPH
+ {0xCD73, 0x86C3}, //13086 #CJK UNIFIED IDEOGRAPH
+ {0xCD74, 0x86C5}, //13087 #CJK UNIFIED IDEOGRAPH
+ {0xCD75, 0x86C8}, //13088 #CJK UNIFIED IDEOGRAPH
+ {0xCD76, 0x86CC}, //13089 #CJK UNIFIED IDEOGRAPH
+ {0xCD77, 0x86CD}, //13090 #CJK UNIFIED IDEOGRAPH
+ {0xCD78, 0x86D2}, //13091 #CJK UNIFIED IDEOGRAPH
+ {0xCD79, 0x86D3}, //13092 #CJK UNIFIED IDEOGRAPH
+ {0xCD7A, 0x86D5}, //13093 #CJK UNIFIED IDEOGRAPH
+ {0xCD7B, 0x86D6}, //13094 #CJK UNIFIED IDEOGRAPH
+ {0xCD7C, 0x86D7}, //13095 #CJK UNIFIED IDEOGRAPH
+ {0xCD7D, 0x86DA}, //13096 #CJK UNIFIED IDEOGRAPH
+ {0xCD7E, 0x86DC}, //13097 #CJK UNIFIED IDEOGRAPH
+ {0xCD80, 0x86DD}, //13098 #CJK UNIFIED IDEOGRAPH
+ {0xCD81, 0x86E0}, //13099 #CJK UNIFIED IDEOGRAPH
+ {0xCD82, 0x86E1}, //13100 #CJK UNIFIED IDEOGRAPH
+ {0xCD83, 0x86E2}, //13101 #CJK UNIFIED IDEOGRAPH
+ {0xCD84, 0x86E3}, //13102 #CJK UNIFIED IDEOGRAPH
+ {0xCD85, 0x86E5}, //13103 #CJK UNIFIED IDEOGRAPH
+ {0xCD86, 0x86E6}, //13104 #CJK UNIFIED IDEOGRAPH
+ {0xCD87, 0x86E7}, //13105 #CJK UNIFIED IDEOGRAPH
+ {0xCD88, 0x86E8}, //13106 #CJK UNIFIED IDEOGRAPH
+ {0xCD89, 0x86EA}, //13107 #CJK UNIFIED IDEOGRAPH
+ {0xCD8A, 0x86EB}, //13108 #CJK UNIFIED IDEOGRAPH
+ {0xCD8B, 0x86EC}, //13109 #CJK UNIFIED IDEOGRAPH
+ {0xCD8C, 0x86EF}, //13110 #CJK UNIFIED IDEOGRAPH
+ {0xCD8D, 0x86F5}, //13111 #CJK UNIFIED IDEOGRAPH
+ {0xCD8E, 0x86F6}, //13112 #CJK UNIFIED IDEOGRAPH
+ {0xCD8F, 0x86F7}, //13113 #CJK UNIFIED IDEOGRAPH
+ {0xCD90, 0x86FA}, //13114 #CJK UNIFIED IDEOGRAPH
+ {0xCD91, 0x86FB}, //13115 #CJK UNIFIED IDEOGRAPH
+ {0xCD92, 0x86FC}, //13116 #CJK UNIFIED IDEOGRAPH
+ {0xCD93, 0x86FD}, //13117 #CJK UNIFIED IDEOGRAPH
+ {0xCD94, 0x86FF}, //13118 #CJK UNIFIED IDEOGRAPH
+ {0xCD95, 0x8701}, //13119 #CJK UNIFIED IDEOGRAPH
+ {0xCD96, 0x8704}, //13120 #CJK UNIFIED IDEOGRAPH
+ {0xCD97, 0x8705}, //13121 #CJK UNIFIED IDEOGRAPH
+ {0xCD98, 0x8706}, //13122 #CJK UNIFIED IDEOGRAPH
+ {0xCD99, 0x870B}, //13123 #CJK UNIFIED IDEOGRAPH
+ {0xCD9A, 0x870C}, //13124 #CJK UNIFIED IDEOGRAPH
+ {0xCD9B, 0x870E}, //13125 #CJK UNIFIED IDEOGRAPH
+ {0xCD9C, 0x870F}, //13126 #CJK UNIFIED IDEOGRAPH
+ {0xCD9D, 0x8710}, //13127 #CJK UNIFIED IDEOGRAPH
+ {0xCD9E, 0x8711}, //13128 #CJK UNIFIED IDEOGRAPH
+ {0xCD9F, 0x8714}, //13129 #CJK UNIFIED IDEOGRAPH
+ {0xCDA0, 0x8716}, //13130 #CJK UNIFIED IDEOGRAPH
+ {0xCDA1, 0x6C40}, //13131 #CJK UNIFIED IDEOGRAPH
+ {0xCDA2, 0x5EF7}, //13132 #CJK UNIFIED IDEOGRAPH
+ {0xCDA3, 0x505C}, //13133 #CJK UNIFIED IDEOGRAPH
+ {0xCDA4, 0x4EAD}, //13134 #CJK UNIFIED IDEOGRAPH
+ {0xCDA5, 0x5EAD}, //13135 #CJK UNIFIED IDEOGRAPH
+ {0xCDA6, 0x633A}, //13136 #CJK UNIFIED IDEOGRAPH
+ {0xCDA7, 0x8247}, //13137 #CJK UNIFIED IDEOGRAPH
+ {0xCDA8, 0x901A}, //13138 #CJK UNIFIED IDEOGRAPH
+ {0xCDA9, 0x6850}, //13139 #CJK UNIFIED IDEOGRAPH
+ {0xCDAA, 0x916E}, //13140 #CJK UNIFIED IDEOGRAPH
+ {0xCDAB, 0x77B3}, //13141 #CJK UNIFIED IDEOGRAPH
+ {0xCDAC, 0x540C}, //13142 #CJK UNIFIED IDEOGRAPH
+ {0xCDAD, 0x94DC}, //13143 #CJK UNIFIED IDEOGRAPH
+ {0xCDAE, 0x5F64}, //13144 #CJK UNIFIED IDEOGRAPH
+ {0xCDAF, 0x7AE5}, //13145 #CJK UNIFIED IDEOGRAPH
+ {0xCDB0, 0x6876}, //13146 #CJK UNIFIED IDEOGRAPH
+ {0xCDB1, 0x6345}, //13147 #CJK UNIFIED IDEOGRAPH
+ {0xCDB2, 0x7B52}, //13148 #CJK UNIFIED IDEOGRAPH
+ {0xCDB3, 0x7EDF}, //13149 #CJK UNIFIED IDEOGRAPH
+ {0xCDB4, 0x75DB}, //13150 #CJK UNIFIED IDEOGRAPH
+ {0xCDB5, 0x5077}, //13151 #CJK UNIFIED IDEOGRAPH
+ {0xCDB6, 0x6295}, //13152 #CJK UNIFIED IDEOGRAPH
+ {0xCDB7, 0x5934}, //13153 #CJK UNIFIED IDEOGRAPH
+ {0xCDB8, 0x900F}, //13154 #CJK UNIFIED IDEOGRAPH
+ {0xCDB9, 0x51F8}, //13155 #CJK UNIFIED IDEOGRAPH
+ {0xCDBA, 0x79C3}, //13156 #CJK UNIFIED IDEOGRAPH
+ {0xCDBB, 0x7A81}, //13157 #CJK UNIFIED IDEOGRAPH
+ {0xCDBC, 0x56FE}, //13158 #CJK UNIFIED IDEOGRAPH
+ {0xCDBD, 0x5F92}, //13159 #CJK UNIFIED IDEOGRAPH
+ {0xCDBE, 0x9014}, //13160 #CJK UNIFIED IDEOGRAPH
+ {0xCDBF, 0x6D82}, //13161 #CJK UNIFIED IDEOGRAPH
+ {0xCDC0, 0x5C60}, //13162 #CJK UNIFIED IDEOGRAPH
+ {0xCDC1, 0x571F}, //13163 #CJK UNIFIED IDEOGRAPH
+ {0xCDC2, 0x5410}, //13164 #CJK UNIFIED IDEOGRAPH
+ {0xCDC3, 0x5154}, //13165 #CJK UNIFIED IDEOGRAPH
+ {0xCDC4, 0x6E4D}, //13166 #CJK UNIFIED IDEOGRAPH
+ {0xCDC5, 0x56E2}, //13167 #CJK UNIFIED IDEOGRAPH
+ {0xCDC6, 0x63A8}, //13168 #CJK UNIFIED IDEOGRAPH
+ {0xCDC7, 0x9893}, //13169 #CJK UNIFIED IDEOGRAPH
+ {0xCDC8, 0x817F}, //13170 #CJK UNIFIED IDEOGRAPH
+ {0xCDC9, 0x8715}, //13171 #CJK UNIFIED IDEOGRAPH
+ {0xCDCA, 0x892A}, //13172 #CJK UNIFIED IDEOGRAPH
+ {0xCDCB, 0x9000}, //13173 #CJK UNIFIED IDEOGRAPH
+ {0xCDCC, 0x541E}, //13174 #CJK UNIFIED IDEOGRAPH
+ {0xCDCD, 0x5C6F}, //13175 #CJK UNIFIED IDEOGRAPH
+ {0xCDCE, 0x81C0}, //13176 #CJK UNIFIED IDEOGRAPH
+ {0xCDCF, 0x62D6}, //13177 #CJK UNIFIED IDEOGRAPH
+ {0xCDD0, 0x6258}, //13178 #CJK UNIFIED IDEOGRAPH
+ {0xCDD1, 0x8131}, //13179 #CJK UNIFIED IDEOGRAPH
+ {0xCDD2, 0x9E35}, //13180 #CJK UNIFIED IDEOGRAPH
+ {0xCDD3, 0x9640}, //13181 #CJK UNIFIED IDEOGRAPH
+ {0xCDD4, 0x9A6E}, //13182 #CJK UNIFIED IDEOGRAPH
+ {0xCDD5, 0x9A7C}, //13183 #CJK UNIFIED IDEOGRAPH
+ {0xCDD6, 0x692D}, //13184 #CJK UNIFIED IDEOGRAPH
+ {0xCDD7, 0x59A5}, //13185 #CJK UNIFIED IDEOGRAPH
+ {0xCDD8, 0x62D3}, //13186 #CJK UNIFIED IDEOGRAPH
+ {0xCDD9, 0x553E}, //13187 #CJK UNIFIED IDEOGRAPH
+ {0xCDDA, 0x6316}, //13188 #CJK UNIFIED IDEOGRAPH
+ {0xCDDB, 0x54C7}, //13189 #CJK UNIFIED IDEOGRAPH
+ {0xCDDC, 0x86D9}, //13190 #CJK UNIFIED IDEOGRAPH
+ {0xCDDD, 0x6D3C}, //13191 #CJK UNIFIED IDEOGRAPH
+ {0xCDDE, 0x5A03}, //13192 #CJK UNIFIED IDEOGRAPH
+ {0xCDDF, 0x74E6}, //13193 #CJK UNIFIED IDEOGRAPH
+ {0xCDE0, 0x889C}, //13194 #CJK UNIFIED IDEOGRAPH
+ {0xCDE1, 0x6B6A}, //13195 #CJK UNIFIED IDEOGRAPH
+ {0xCDE2, 0x5916}, //13196 #CJK UNIFIED IDEOGRAPH
+ {0xCDE3, 0x8C4C}, //13197 #CJK UNIFIED IDEOGRAPH
+ {0xCDE4, 0x5F2F}, //13198 #CJK UNIFIED IDEOGRAPH
+ {0xCDE5, 0x6E7E}, //13199 #CJK UNIFIED IDEOGRAPH
+ {0xCDE6, 0x73A9}, //13200 #CJK UNIFIED IDEOGRAPH
+ {0xCDE7, 0x987D}, //13201 #CJK UNIFIED IDEOGRAPH
+ {0xCDE8, 0x4E38}, //13202 #CJK UNIFIED IDEOGRAPH
+ {0xCDE9, 0x70F7}, //13203 #CJK UNIFIED IDEOGRAPH
+ {0xCDEA, 0x5B8C}, //13204 #CJK UNIFIED IDEOGRAPH
+ {0xCDEB, 0x7897}, //13205 #CJK UNIFIED IDEOGRAPH
+ {0xCDEC, 0x633D}, //13206 #CJK UNIFIED IDEOGRAPH
+ {0xCDED, 0x665A}, //13207 #CJK UNIFIED IDEOGRAPH
+ {0xCDEE, 0x7696}, //13208 #CJK UNIFIED IDEOGRAPH
+ {0xCDEF, 0x60CB}, //13209 #CJK UNIFIED IDEOGRAPH
+ {0xCDF0, 0x5B9B}, //13210 #CJK UNIFIED IDEOGRAPH
+ {0xCDF1, 0x5A49}, //13211 #CJK UNIFIED IDEOGRAPH
+ {0xCDF2, 0x4E07}, //13212 #CJK UNIFIED IDEOGRAPH
+ {0xCDF3, 0x8155}, //13213 #CJK UNIFIED IDEOGRAPH
+ {0xCDF4, 0x6C6A}, //13214 #CJK UNIFIED IDEOGRAPH
+ {0xCDF5, 0x738B}, //13215 #CJK UNIFIED IDEOGRAPH
+ {0xCDF6, 0x4EA1}, //13216 #CJK UNIFIED IDEOGRAPH
+ {0xCDF7, 0x6789}, //13217 #CJK UNIFIED IDEOGRAPH
+ {0xCDF8, 0x7F51}, //13218 #CJK UNIFIED IDEOGRAPH
+ {0xCDF9, 0x5F80}, //13219 #CJK UNIFIED IDEOGRAPH
+ {0xCDFA, 0x65FA}, //13220 #CJK UNIFIED IDEOGRAPH
+ {0xCDFB, 0x671B}, //13221 #CJK UNIFIED IDEOGRAPH
+ {0xCDFC, 0x5FD8}, //13222 #CJK UNIFIED IDEOGRAPH
+ {0xCDFD, 0x5984}, //13223 #CJK UNIFIED IDEOGRAPH
+ {0xCDFE, 0x5A01}, //13224 #CJK UNIFIED IDEOGRAPH
+ {0xCE40, 0x8719}, //13225 #CJK UNIFIED IDEOGRAPH
+ {0xCE41, 0x871B}, //13226 #CJK UNIFIED IDEOGRAPH
+ {0xCE42, 0x871D}, //13227 #CJK UNIFIED IDEOGRAPH
+ {0xCE43, 0x871F}, //13228 #CJK UNIFIED IDEOGRAPH
+ {0xCE44, 0x8720}, //13229 #CJK UNIFIED IDEOGRAPH
+ {0xCE45, 0x8724}, //13230 #CJK UNIFIED IDEOGRAPH
+ {0xCE46, 0x8726}, //13231 #CJK UNIFIED IDEOGRAPH
+ {0xCE47, 0x8727}, //13232 #CJK UNIFIED IDEOGRAPH
+ {0xCE48, 0x8728}, //13233 #CJK UNIFIED IDEOGRAPH
+ {0xCE49, 0x872A}, //13234 #CJK UNIFIED IDEOGRAPH
+ {0xCE4A, 0x872B}, //13235 #CJK UNIFIED IDEOGRAPH
+ {0xCE4B, 0x872C}, //13236 #CJK UNIFIED IDEOGRAPH
+ {0xCE4C, 0x872D}, //13237 #CJK UNIFIED IDEOGRAPH
+ {0xCE4D, 0x872F}, //13238 #CJK UNIFIED IDEOGRAPH
+ {0xCE4E, 0x8730}, //13239 #CJK UNIFIED IDEOGRAPH
+ {0xCE4F, 0x8732}, //13240 #CJK UNIFIED IDEOGRAPH
+ {0xCE50, 0x8733}, //13241 #CJK UNIFIED IDEOGRAPH
+ {0xCE51, 0x8735}, //13242 #CJK UNIFIED IDEOGRAPH
+ {0xCE52, 0x8736}, //13243 #CJK UNIFIED IDEOGRAPH
+ {0xCE53, 0x8738}, //13244 #CJK UNIFIED IDEOGRAPH
+ {0xCE54, 0x8739}, //13245 #CJK UNIFIED IDEOGRAPH
+ {0xCE55, 0x873A}, //13246 #CJK UNIFIED IDEOGRAPH
+ {0xCE56, 0x873C}, //13247 #CJK UNIFIED IDEOGRAPH
+ {0xCE57, 0x873D}, //13248 #CJK UNIFIED IDEOGRAPH
+ {0xCE58, 0x8740}, //13249 #CJK UNIFIED IDEOGRAPH
+ {0xCE59, 0x8741}, //13250 #CJK UNIFIED IDEOGRAPH
+ {0xCE5A, 0x8742}, //13251 #CJK UNIFIED IDEOGRAPH
+ {0xCE5B, 0x8743}, //13252 #CJK UNIFIED IDEOGRAPH
+ {0xCE5C, 0x8744}, //13253 #CJK UNIFIED IDEOGRAPH
+ {0xCE5D, 0x8745}, //13254 #CJK UNIFIED IDEOGRAPH
+ {0xCE5E, 0x8746}, //13255 #CJK UNIFIED IDEOGRAPH
+ {0xCE5F, 0x874A}, //13256 #CJK UNIFIED IDEOGRAPH
+ {0xCE60, 0x874B}, //13257 #CJK UNIFIED IDEOGRAPH
+ {0xCE61, 0x874D}, //13258 #CJK UNIFIED IDEOGRAPH
+ {0xCE62, 0x874F}, //13259 #CJK UNIFIED IDEOGRAPH
+ {0xCE63, 0x8750}, //13260 #CJK UNIFIED IDEOGRAPH
+ {0xCE64, 0x8751}, //13261 #CJK UNIFIED IDEOGRAPH
+ {0xCE65, 0x8752}, //13262 #CJK UNIFIED IDEOGRAPH
+ {0xCE66, 0x8754}, //13263 #CJK UNIFIED IDEOGRAPH
+ {0xCE67, 0x8755}, //13264 #CJK UNIFIED IDEOGRAPH
+ {0xCE68, 0x8756}, //13265 #CJK UNIFIED IDEOGRAPH
+ {0xCE69, 0x8758}, //13266 #CJK UNIFIED IDEOGRAPH
+ {0xCE6A, 0x875A}, //13267 #CJK UNIFIED IDEOGRAPH
+ {0xCE6B, 0x875B}, //13268 #CJK UNIFIED IDEOGRAPH
+ {0xCE6C, 0x875C}, //13269 #CJK UNIFIED IDEOGRAPH
+ {0xCE6D, 0x875D}, //13270 #CJK UNIFIED IDEOGRAPH
+ {0xCE6E, 0x875E}, //13271 #CJK UNIFIED IDEOGRAPH
+ {0xCE6F, 0x875F}, //13272 #CJK UNIFIED IDEOGRAPH
+ {0xCE70, 0x8761}, //13273 #CJK UNIFIED IDEOGRAPH
+ {0xCE71, 0x8762}, //13274 #CJK UNIFIED IDEOGRAPH
+ {0xCE72, 0x8766}, //13275 #CJK UNIFIED IDEOGRAPH
+ {0xCE73, 0x8767}, //13276 #CJK UNIFIED IDEOGRAPH
+ {0xCE74, 0x8768}, //13277 #CJK UNIFIED IDEOGRAPH
+ {0xCE75, 0x8769}, //13278 #CJK UNIFIED IDEOGRAPH
+ {0xCE76, 0x876A}, //13279 #CJK UNIFIED IDEOGRAPH
+ {0xCE77, 0x876B}, //13280 #CJK UNIFIED IDEOGRAPH
+ {0xCE78, 0x876C}, //13281 #CJK UNIFIED IDEOGRAPH
+ {0xCE79, 0x876D}, //13282 #CJK UNIFIED IDEOGRAPH
+ {0xCE7A, 0x876F}, //13283 #CJK UNIFIED IDEOGRAPH
+ {0xCE7B, 0x8771}, //13284 #CJK UNIFIED IDEOGRAPH
+ {0xCE7C, 0x8772}, //13285 #CJK UNIFIED IDEOGRAPH
+ {0xCE7D, 0x8773}, //13286 #CJK UNIFIED IDEOGRAPH
+ {0xCE7E, 0x8775}, //13287 #CJK UNIFIED IDEOGRAPH
+ {0xCE80, 0x8777}, //13288 #CJK UNIFIED IDEOGRAPH
+ {0xCE81, 0x8778}, //13289 #CJK UNIFIED IDEOGRAPH
+ {0xCE82, 0x8779}, //13290 #CJK UNIFIED IDEOGRAPH
+ {0xCE83, 0x877A}, //13291 #CJK UNIFIED IDEOGRAPH
+ {0xCE84, 0x877F}, //13292 #CJK UNIFIED IDEOGRAPH
+ {0xCE85, 0x8780}, //13293 #CJK UNIFIED IDEOGRAPH
+ {0xCE86, 0x8781}, //13294 #CJK UNIFIED IDEOGRAPH
+ {0xCE87, 0x8784}, //13295 #CJK UNIFIED IDEOGRAPH
+ {0xCE88, 0x8786}, //13296 #CJK UNIFIED IDEOGRAPH
+ {0xCE89, 0x8787}, //13297 #CJK UNIFIED IDEOGRAPH
+ {0xCE8A, 0x8789}, //13298 #CJK UNIFIED IDEOGRAPH
+ {0xCE8B, 0x878A}, //13299 #CJK UNIFIED IDEOGRAPH
+ {0xCE8C, 0x878C}, //13300 #CJK UNIFIED IDEOGRAPH
+ {0xCE8D, 0x878E}, //13301 #CJK UNIFIED IDEOGRAPH
+ {0xCE8E, 0x878F}, //13302 #CJK UNIFIED IDEOGRAPH
+ {0xCE8F, 0x8790}, //13303 #CJK UNIFIED IDEOGRAPH
+ {0xCE90, 0x8791}, //13304 #CJK UNIFIED IDEOGRAPH
+ {0xCE91, 0x8792}, //13305 #CJK UNIFIED IDEOGRAPH
+ {0xCE92, 0x8794}, //13306 #CJK UNIFIED IDEOGRAPH
+ {0xCE93, 0x8795}, //13307 #CJK UNIFIED IDEOGRAPH
+ {0xCE94, 0x8796}, //13308 #CJK UNIFIED IDEOGRAPH
+ {0xCE95, 0x8798}, //13309 #CJK UNIFIED IDEOGRAPH
+ {0xCE96, 0x8799}, //13310 #CJK UNIFIED IDEOGRAPH
+ {0xCE97, 0x879A}, //13311 #CJK UNIFIED IDEOGRAPH
+ {0xCE98, 0x879B}, //13312 #CJK UNIFIED IDEOGRAPH
+ {0xCE99, 0x879C}, //13313 #CJK UNIFIED IDEOGRAPH
+ {0xCE9A, 0x879D}, //13314 #CJK UNIFIED IDEOGRAPH
+ {0xCE9B, 0x879E}, //13315 #CJK UNIFIED IDEOGRAPH
+ {0xCE9C, 0x87A0}, //13316 #CJK UNIFIED IDEOGRAPH
+ {0xCE9D, 0x87A1}, //13317 #CJK UNIFIED IDEOGRAPH
+ {0xCE9E, 0x87A2}, //13318 #CJK UNIFIED IDEOGRAPH
+ {0xCE9F, 0x87A3}, //13319 #CJK UNIFIED IDEOGRAPH
+ {0xCEA0, 0x87A4}, //13320 #CJK UNIFIED IDEOGRAPH
+ {0xCEA1, 0x5DCD}, //13321 #CJK UNIFIED IDEOGRAPH
+ {0xCEA2, 0x5FAE}, //13322 #CJK UNIFIED IDEOGRAPH
+ {0xCEA3, 0x5371}, //13323 #CJK UNIFIED IDEOGRAPH
+ {0xCEA4, 0x97E6}, //13324 #CJK UNIFIED IDEOGRAPH
+ {0xCEA5, 0x8FDD}, //13325 #CJK UNIFIED IDEOGRAPH
+ {0xCEA6, 0x6845}, //13326 #CJK UNIFIED IDEOGRAPH
+ {0xCEA7, 0x56F4}, //13327 #CJK UNIFIED IDEOGRAPH
+ {0xCEA8, 0x552F}, //13328 #CJK UNIFIED IDEOGRAPH
+ {0xCEA9, 0x60DF}, //13329 #CJK UNIFIED IDEOGRAPH
+ {0xCEAA, 0x4E3A}, //13330 #CJK UNIFIED IDEOGRAPH
+ {0xCEAB, 0x6F4D}, //13331 #CJK UNIFIED IDEOGRAPH
+ {0xCEAC, 0x7EF4}, //13332 #CJK UNIFIED IDEOGRAPH
+ {0xCEAD, 0x82C7}, //13333 #CJK UNIFIED IDEOGRAPH
+ {0xCEAE, 0x840E}, //13334 #CJK UNIFIED IDEOGRAPH
+ {0xCEAF, 0x59D4}, //13335 #CJK UNIFIED IDEOGRAPH
+ {0xCEB0, 0x4F1F}, //13336 #CJK UNIFIED IDEOGRAPH
+ {0xCEB1, 0x4F2A}, //13337 #CJK UNIFIED IDEOGRAPH
+ {0xCEB2, 0x5C3E}, //13338 #CJK UNIFIED IDEOGRAPH
+ {0xCEB3, 0x7EAC}, //13339 #CJK UNIFIED IDEOGRAPH
+ {0xCEB4, 0x672A}, //13340 #CJK UNIFIED IDEOGRAPH
+ {0xCEB5, 0x851A}, //13341 #CJK UNIFIED IDEOGRAPH
+ {0xCEB6, 0x5473}, //13342 #CJK UNIFIED IDEOGRAPH
+ {0xCEB7, 0x754F}, //13343 #CJK UNIFIED IDEOGRAPH
+ {0xCEB8, 0x80C3}, //13344 #CJK UNIFIED IDEOGRAPH
+ {0xCEB9, 0x5582}, //13345 #CJK UNIFIED IDEOGRAPH
+ {0xCEBA, 0x9B4F}, //13346 #CJK UNIFIED IDEOGRAPH
+ {0xCEBB, 0x4F4D}, //13347 #CJK UNIFIED IDEOGRAPH
+ {0xCEBC, 0x6E2D}, //13348 #CJK UNIFIED IDEOGRAPH
+ {0xCEBD, 0x8C13}, //13349 #CJK UNIFIED IDEOGRAPH
+ {0xCEBE, 0x5C09}, //13350 #CJK UNIFIED IDEOGRAPH
+ {0xCEBF, 0x6170}, //13351 #CJK UNIFIED IDEOGRAPH
+ {0xCEC0, 0x536B}, //13352 #CJK UNIFIED IDEOGRAPH
+ {0xCEC1, 0x761F}, //13353 #CJK UNIFIED IDEOGRAPH
+ {0xCEC2, 0x6E29}, //13354 #CJK UNIFIED IDEOGRAPH
+ {0xCEC3, 0x868A}, //13355 #CJK UNIFIED IDEOGRAPH
+ {0xCEC4, 0x6587}, //13356 #CJK UNIFIED IDEOGRAPH
+ {0xCEC5, 0x95FB}, //13357 #CJK UNIFIED IDEOGRAPH
+ {0xCEC6, 0x7EB9}, //13358 #CJK UNIFIED IDEOGRAPH
+ {0xCEC7, 0x543B}, //13359 #CJK UNIFIED IDEOGRAPH
+ {0xCEC8, 0x7A33}, //13360 #CJK UNIFIED IDEOGRAPH
+ {0xCEC9, 0x7D0A}, //13361 #CJK UNIFIED IDEOGRAPH
+ {0xCECA, 0x95EE}, //13362 #CJK UNIFIED IDEOGRAPH
+ {0xCECB, 0x55E1}, //13363 #CJK UNIFIED IDEOGRAPH
+ {0xCECC, 0x7FC1}, //13364 #CJK UNIFIED IDEOGRAPH
+ {0xCECD, 0x74EE}, //13365 #CJK UNIFIED IDEOGRAPH
+ {0xCECE, 0x631D}, //13366 #CJK UNIFIED IDEOGRAPH
+ {0xCECF, 0x8717}, //13367 #CJK UNIFIED IDEOGRAPH
+ {0xCED0, 0x6DA1}, //13368 #CJK UNIFIED IDEOGRAPH
+ {0xCED1, 0x7A9D}, //13369 #CJK UNIFIED IDEOGRAPH
+ {0xCED2, 0x6211}, //13370 #CJK UNIFIED IDEOGRAPH
+ {0xCED3, 0x65A1}, //13371 #CJK UNIFIED IDEOGRAPH
+ {0xCED4, 0x5367}, //13372 #CJK UNIFIED IDEOGRAPH
+ {0xCED5, 0x63E1}, //13373 #CJK UNIFIED IDEOGRAPH
+ {0xCED6, 0x6C83}, //13374 #CJK UNIFIED IDEOGRAPH
+ {0xCED7, 0x5DEB}, //13375 #CJK UNIFIED IDEOGRAPH
+ {0xCED8, 0x545C}, //13376 #CJK UNIFIED IDEOGRAPH
+ {0xCED9, 0x94A8}, //13377 #CJK UNIFIED IDEOGRAPH
+ {0xCEDA, 0x4E4C}, //13378 #CJK UNIFIED IDEOGRAPH
+ {0xCEDB, 0x6C61}, //13379 #CJK UNIFIED IDEOGRAPH
+ {0xCEDC, 0x8BEC}, //13380 #CJK UNIFIED IDEOGRAPH
+ {0xCEDD, 0x5C4B}, //13381 #CJK UNIFIED IDEOGRAPH
+ {0xCEDE, 0x65E0}, //13382 #CJK UNIFIED IDEOGRAPH
+ {0xCEDF, 0x829C}, //13383 #CJK UNIFIED IDEOGRAPH
+ {0xCEE0, 0x68A7}, //13384 #CJK UNIFIED IDEOGRAPH
+ {0xCEE1, 0x543E}, //13385 #CJK UNIFIED IDEOGRAPH
+ {0xCEE2, 0x5434}, //13386 #CJK UNIFIED IDEOGRAPH
+ {0xCEE3, 0x6BCB}, //13387 #CJK UNIFIED IDEOGRAPH
+ {0xCEE4, 0x6B66}, //13388 #CJK UNIFIED IDEOGRAPH
+ {0xCEE5, 0x4E94}, //13389 #CJK UNIFIED IDEOGRAPH
+ {0xCEE6, 0x6342}, //13390 #CJK UNIFIED IDEOGRAPH
+ {0xCEE7, 0x5348}, //13391 #CJK UNIFIED IDEOGRAPH
+ {0xCEE8, 0x821E}, //13392 #CJK UNIFIED IDEOGRAPH
+ {0xCEE9, 0x4F0D}, //13393 #CJK UNIFIED IDEOGRAPH
+ {0xCEEA, 0x4FAE}, //13394 #CJK UNIFIED IDEOGRAPH
+ {0xCEEB, 0x575E}, //13395 #CJK UNIFIED IDEOGRAPH
+ {0xCEEC, 0x620A}, //13396 #CJK UNIFIED IDEOGRAPH
+ {0xCEED, 0x96FE}, //13397 #CJK UNIFIED IDEOGRAPH
+ {0xCEEE, 0x6664}, //13398 #CJK UNIFIED IDEOGRAPH
+ {0xCEEF, 0x7269}, //13399 #CJK UNIFIED IDEOGRAPH
+ {0xCEF0, 0x52FF}, //13400 #CJK UNIFIED IDEOGRAPH
+ {0xCEF1, 0x52A1}, //13401 #CJK UNIFIED IDEOGRAPH
+ {0xCEF2, 0x609F}, //13402 #CJK UNIFIED IDEOGRAPH
+ {0xCEF3, 0x8BEF}, //13403 #CJK UNIFIED IDEOGRAPH
+ {0xCEF4, 0x6614}, //13404 #CJK UNIFIED IDEOGRAPH
+ {0xCEF5, 0x7199}, //13405 #CJK UNIFIED IDEOGRAPH
+ {0xCEF6, 0x6790}, //13406 #CJK UNIFIED IDEOGRAPH
+ {0xCEF7, 0x897F}, //13407 #CJK UNIFIED IDEOGRAPH
+ {0xCEF8, 0x7852}, //13408 #CJK UNIFIED IDEOGRAPH
+ {0xCEF9, 0x77FD}, //13409 #CJK UNIFIED IDEOGRAPH
+ {0xCEFA, 0x6670}, //13410 #CJK UNIFIED IDEOGRAPH
+ {0xCEFB, 0x563B}, //13411 #CJK UNIFIED IDEOGRAPH
+ {0xCEFC, 0x5438}, //13412 #CJK UNIFIED IDEOGRAPH
+ {0xCEFD, 0x9521}, //13413 #CJK UNIFIED IDEOGRAPH
+ {0xCEFE, 0x727A}, //13414 #CJK UNIFIED IDEOGRAPH
+ {0xCF40, 0x87A5}, //13415 #CJK UNIFIED IDEOGRAPH
+ {0xCF41, 0x87A6}, //13416 #CJK UNIFIED IDEOGRAPH
+ {0xCF42, 0x87A7}, //13417 #CJK UNIFIED IDEOGRAPH
+ {0xCF43, 0x87A9}, //13418 #CJK UNIFIED IDEOGRAPH
+ {0xCF44, 0x87AA}, //13419 #CJK UNIFIED IDEOGRAPH
+ {0xCF45, 0x87AE}, //13420 #CJK UNIFIED IDEOGRAPH
+ {0xCF46, 0x87B0}, //13421 #CJK UNIFIED IDEOGRAPH
+ {0xCF47, 0x87B1}, //13422 #CJK UNIFIED IDEOGRAPH
+ {0xCF48, 0x87B2}, //13423 #CJK UNIFIED IDEOGRAPH
+ {0xCF49, 0x87B4}, //13424 #CJK UNIFIED IDEOGRAPH
+ {0xCF4A, 0x87B6}, //13425 #CJK UNIFIED IDEOGRAPH
+ {0xCF4B, 0x87B7}, //13426 #CJK UNIFIED IDEOGRAPH
+ {0xCF4C, 0x87B8}, //13427 #CJK UNIFIED IDEOGRAPH
+ {0xCF4D, 0x87B9}, //13428 #CJK UNIFIED IDEOGRAPH
+ {0xCF4E, 0x87BB}, //13429 #CJK UNIFIED IDEOGRAPH
+ {0xCF4F, 0x87BC}, //13430 #CJK UNIFIED IDEOGRAPH
+ {0xCF50, 0x87BE}, //13431 #CJK UNIFIED IDEOGRAPH
+ {0xCF51, 0x87BF}, //13432 #CJK UNIFIED IDEOGRAPH
+ {0xCF52, 0x87C1}, //13433 #CJK UNIFIED IDEOGRAPH
+ {0xCF53, 0x87C2}, //13434 #CJK UNIFIED IDEOGRAPH
+ {0xCF54, 0x87C3}, //13435 #CJK UNIFIED IDEOGRAPH
+ {0xCF55, 0x87C4}, //13436 #CJK UNIFIED IDEOGRAPH
+ {0xCF56, 0x87C5}, //13437 #CJK UNIFIED IDEOGRAPH
+ {0xCF57, 0x87C7}, //13438 #CJK UNIFIED IDEOGRAPH
+ {0xCF58, 0x87C8}, //13439 #CJK UNIFIED IDEOGRAPH
+ {0xCF59, 0x87C9}, //13440 #CJK UNIFIED IDEOGRAPH
+ {0xCF5A, 0x87CC}, //13441 #CJK UNIFIED IDEOGRAPH
+ {0xCF5B, 0x87CD}, //13442 #CJK UNIFIED IDEOGRAPH
+ {0xCF5C, 0x87CE}, //13443 #CJK UNIFIED IDEOGRAPH
+ {0xCF5D, 0x87CF}, //13444 #CJK UNIFIED IDEOGRAPH
+ {0xCF5E, 0x87D0}, //13445 #CJK UNIFIED IDEOGRAPH
+ {0xCF5F, 0x87D4}, //13446 #CJK UNIFIED IDEOGRAPH
+ {0xCF60, 0x87D5}, //13447 #CJK UNIFIED IDEOGRAPH
+ {0xCF61, 0x87D6}, //13448 #CJK UNIFIED IDEOGRAPH
+ {0xCF62, 0x87D7}, //13449 #CJK UNIFIED IDEOGRAPH
+ {0xCF63, 0x87D8}, //13450 #CJK UNIFIED IDEOGRAPH
+ {0xCF64, 0x87D9}, //13451 #CJK UNIFIED IDEOGRAPH
+ {0xCF65, 0x87DA}, //13452 #CJK UNIFIED IDEOGRAPH
+ {0xCF66, 0x87DC}, //13453 #CJK UNIFIED IDEOGRAPH
+ {0xCF67, 0x87DD}, //13454 #CJK UNIFIED IDEOGRAPH
+ {0xCF68, 0x87DE}, //13455 #CJK UNIFIED IDEOGRAPH
+ {0xCF69, 0x87DF}, //13456 #CJK UNIFIED IDEOGRAPH
+ {0xCF6A, 0x87E1}, //13457 #CJK UNIFIED IDEOGRAPH
+ {0xCF6B, 0x87E2}, //13458 #CJK UNIFIED IDEOGRAPH
+ {0xCF6C, 0x87E3}, //13459 #CJK UNIFIED IDEOGRAPH
+ {0xCF6D, 0x87E4}, //13460 #CJK UNIFIED IDEOGRAPH
+ {0xCF6E, 0x87E6}, //13461 #CJK UNIFIED IDEOGRAPH
+ {0xCF6F, 0x87E7}, //13462 #CJK UNIFIED IDEOGRAPH
+ {0xCF70, 0x87E8}, //13463 #CJK UNIFIED IDEOGRAPH
+ {0xCF71, 0x87E9}, //13464 #CJK UNIFIED IDEOGRAPH
+ {0xCF72, 0x87EB}, //13465 #CJK UNIFIED IDEOGRAPH
+ {0xCF73, 0x87EC}, //13466 #CJK UNIFIED IDEOGRAPH
+ {0xCF74, 0x87ED}, //13467 #CJK UNIFIED IDEOGRAPH
+ {0xCF75, 0x87EF}, //13468 #CJK UNIFIED IDEOGRAPH
+ {0xCF76, 0x87F0}, //13469 #CJK UNIFIED IDEOGRAPH
+ {0xCF77, 0x87F1}, //13470 #CJK UNIFIED IDEOGRAPH
+ {0xCF78, 0x87F2}, //13471 #CJK UNIFIED IDEOGRAPH
+ {0xCF79, 0x87F3}, //13472 #CJK UNIFIED IDEOGRAPH
+ {0xCF7A, 0x87F4}, //13473 #CJK UNIFIED IDEOGRAPH
+ {0xCF7B, 0x87F5}, //13474 #CJK UNIFIED IDEOGRAPH
+ {0xCF7C, 0x87F6}, //13475 #CJK UNIFIED IDEOGRAPH
+ {0xCF7D, 0x87F7}, //13476 #CJK UNIFIED IDEOGRAPH
+ {0xCF7E, 0x87F8}, //13477 #CJK UNIFIED IDEOGRAPH
+ {0xCF80, 0x87FA}, //13478 #CJK UNIFIED IDEOGRAPH
+ {0xCF81, 0x87FB}, //13479 #CJK UNIFIED IDEOGRAPH
+ {0xCF82, 0x87FC}, //13480 #CJK UNIFIED IDEOGRAPH
+ {0xCF83, 0x87FD}, //13481 #CJK UNIFIED IDEOGRAPH
+ {0xCF84, 0x87FF}, //13482 #CJK UNIFIED IDEOGRAPH
+ {0xCF85, 0x8800}, //13483 #CJK UNIFIED IDEOGRAPH
+ {0xCF86, 0x8801}, //13484 #CJK UNIFIED IDEOGRAPH
+ {0xCF87, 0x8802}, //13485 #CJK UNIFIED IDEOGRAPH
+ {0xCF88, 0x8804}, //13486 #CJK UNIFIED IDEOGRAPH
+ {0xCF89, 0x8805}, //13487 #CJK UNIFIED IDEOGRAPH
+ {0xCF8A, 0x8806}, //13488 #CJK UNIFIED IDEOGRAPH
+ {0xCF8B, 0x8807}, //13489 #CJK UNIFIED IDEOGRAPH
+ {0xCF8C, 0x8808}, //13490 #CJK UNIFIED IDEOGRAPH
+ {0xCF8D, 0x8809}, //13491 #CJK UNIFIED IDEOGRAPH
+ {0xCF8E, 0x880B}, //13492 #CJK UNIFIED IDEOGRAPH
+ {0xCF8F, 0x880C}, //13493 #CJK UNIFIED IDEOGRAPH
+ {0xCF90, 0x880D}, //13494 #CJK UNIFIED IDEOGRAPH
+ {0xCF91, 0x880E}, //13495 #CJK UNIFIED IDEOGRAPH
+ {0xCF92, 0x880F}, //13496 #CJK UNIFIED IDEOGRAPH
+ {0xCF93, 0x8810}, //13497 #CJK UNIFIED IDEOGRAPH
+ {0xCF94, 0x8811}, //13498 #CJK UNIFIED IDEOGRAPH
+ {0xCF95, 0x8812}, //13499 #CJK UNIFIED IDEOGRAPH
+ {0xCF96, 0x8814}, //13500 #CJK UNIFIED IDEOGRAPH
+ {0xCF97, 0x8817}, //13501 #CJK UNIFIED IDEOGRAPH
+ {0xCF98, 0x8818}, //13502 #CJK UNIFIED IDEOGRAPH
+ {0xCF99, 0x8819}, //13503 #CJK UNIFIED IDEOGRAPH
+ {0xCF9A, 0x881A}, //13504 #CJK UNIFIED IDEOGRAPH
+ {0xCF9B, 0x881C}, //13505 #CJK UNIFIED IDEOGRAPH
+ {0xCF9C, 0x881D}, //13506 #CJK UNIFIED IDEOGRAPH
+ {0xCF9D, 0x881E}, //13507 #CJK UNIFIED IDEOGRAPH
+ {0xCF9E, 0x881F}, //13508 #CJK UNIFIED IDEOGRAPH
+ {0xCF9F, 0x8820}, //13509 #CJK UNIFIED IDEOGRAPH
+ {0xCFA0, 0x8823}, //13510 #CJK UNIFIED IDEOGRAPH
+ {0xCFA1, 0x7A00}, //13511 #CJK UNIFIED IDEOGRAPH
+ {0xCFA2, 0x606F}, //13512 #CJK UNIFIED IDEOGRAPH
+ {0xCFA3, 0x5E0C}, //13513 #CJK UNIFIED IDEOGRAPH
+ {0xCFA4, 0x6089}, //13514 #CJK UNIFIED IDEOGRAPH
+ {0xCFA5, 0x819D}, //13515 #CJK UNIFIED IDEOGRAPH
+ {0xCFA6, 0x5915}, //13516 #CJK UNIFIED IDEOGRAPH
+ {0xCFA7, 0x60DC}, //13517 #CJK UNIFIED IDEOGRAPH
+ {0xCFA8, 0x7184}, //13518 #CJK UNIFIED IDEOGRAPH
+ {0xCFA9, 0x70EF}, //13519 #CJK UNIFIED IDEOGRAPH
+ {0xCFAA, 0x6EAA}, //13520 #CJK UNIFIED IDEOGRAPH
+ {0xCFAB, 0x6C50}, //13521 #CJK UNIFIED IDEOGRAPH
+ {0xCFAC, 0x7280}, //13522 #CJK UNIFIED IDEOGRAPH
+ {0xCFAD, 0x6A84}, //13523 #CJK UNIFIED IDEOGRAPH
+ {0xCFAE, 0x88AD}, //13524 #CJK UNIFIED IDEOGRAPH
+ {0xCFAF, 0x5E2D}, //13525 #CJK UNIFIED IDEOGRAPH
+ {0xCFB0, 0x4E60}, //13526 #CJK UNIFIED IDEOGRAPH
+ {0xCFB1, 0x5AB3}, //13527 #CJK UNIFIED IDEOGRAPH
+ {0xCFB2, 0x559C}, //13528 #CJK UNIFIED IDEOGRAPH
+ {0xCFB3, 0x94E3}, //13529 #CJK UNIFIED IDEOGRAPH
+ {0xCFB4, 0x6D17}, //13530 #CJK UNIFIED IDEOGRAPH
+ {0xCFB5, 0x7CFB}, //13531 #CJK UNIFIED IDEOGRAPH
+ {0xCFB6, 0x9699}, //13532 #CJK UNIFIED IDEOGRAPH
+ {0xCFB7, 0x620F}, //13533 #CJK UNIFIED IDEOGRAPH
+ {0xCFB8, 0x7EC6}, //13534 #CJK UNIFIED IDEOGRAPH
+ {0xCFB9, 0x778E}, //13535 #CJK UNIFIED IDEOGRAPH
+ {0xCFBA, 0x867E}, //13536 #CJK UNIFIED IDEOGRAPH
+ {0xCFBB, 0x5323}, //13537 #CJK UNIFIED IDEOGRAPH
+ {0xCFBC, 0x971E}, //13538 #CJK UNIFIED IDEOGRAPH
+ {0xCFBD, 0x8F96}, //13539 #CJK UNIFIED IDEOGRAPH
+ {0xCFBE, 0x6687}, //13540 #CJK UNIFIED IDEOGRAPH
+ {0xCFBF, 0x5CE1}, //13541 #CJK UNIFIED IDEOGRAPH
+ {0xCFC0, 0x4FA0}, //13542 #CJK UNIFIED IDEOGRAPH
+ {0xCFC1, 0x72ED}, //13543 #CJK UNIFIED IDEOGRAPH
+ {0xCFC2, 0x4E0B}, //13544 #CJK UNIFIED IDEOGRAPH
+ {0xCFC3, 0x53A6}, //13545 #CJK UNIFIED IDEOGRAPH
+ {0xCFC4, 0x590F}, //13546 #CJK UNIFIED IDEOGRAPH
+ {0xCFC5, 0x5413}, //13547 #CJK UNIFIED IDEOGRAPH
+ {0xCFC6, 0x6380}, //13548 #CJK UNIFIED IDEOGRAPH
+ {0xCFC7, 0x9528}, //13549 #CJK UNIFIED IDEOGRAPH
+ {0xCFC8, 0x5148}, //13550 #CJK UNIFIED IDEOGRAPH
+ {0xCFC9, 0x4ED9}, //13551 #CJK UNIFIED IDEOGRAPH
+ {0xCFCA, 0x9C9C}, //13552 #CJK UNIFIED IDEOGRAPH
+ {0xCFCB, 0x7EA4}, //13553 #CJK UNIFIED IDEOGRAPH
+ {0xCFCC, 0x54B8}, //13554 #CJK UNIFIED IDEOGRAPH
+ {0xCFCD, 0x8D24}, //13555 #CJK UNIFIED IDEOGRAPH
+ {0xCFCE, 0x8854}, //13556 #CJK UNIFIED IDEOGRAPH
+ {0xCFCF, 0x8237}, //13557 #CJK UNIFIED IDEOGRAPH
+ {0xCFD0, 0x95F2}, //13558 #CJK UNIFIED IDEOGRAPH
+ {0xCFD1, 0x6D8E}, //13559 #CJK UNIFIED IDEOGRAPH
+ {0xCFD2, 0x5F26}, //13560 #CJK UNIFIED IDEOGRAPH
+ {0xCFD3, 0x5ACC}, //13561 #CJK UNIFIED IDEOGRAPH
+ {0xCFD4, 0x663E}, //13562 #CJK UNIFIED IDEOGRAPH
+ {0xCFD5, 0x9669}, //13563 #CJK UNIFIED IDEOGRAPH
+ {0xCFD6, 0x73B0}, //13564 #CJK UNIFIED IDEOGRAPH
+ {0xCFD7, 0x732E}, //13565 #CJK UNIFIED IDEOGRAPH
+ {0xCFD8, 0x53BF}, //13566 #CJK UNIFIED IDEOGRAPH
+ {0xCFD9, 0x817A}, //13567 #CJK UNIFIED IDEOGRAPH
+ {0xCFDA, 0x9985}, //13568 #CJK UNIFIED IDEOGRAPH
+ {0xCFDB, 0x7FA1}, //13569 #CJK UNIFIED IDEOGRAPH
+ {0xCFDC, 0x5BAA}, //13570 #CJK UNIFIED IDEOGRAPH
+ {0xCFDD, 0x9677}, //13571 #CJK UNIFIED IDEOGRAPH
+ {0xCFDE, 0x9650}, //13572 #CJK UNIFIED IDEOGRAPH
+ {0xCFDF, 0x7EBF}, //13573 #CJK UNIFIED IDEOGRAPH
+ {0xCFE0, 0x76F8}, //13574 #CJK UNIFIED IDEOGRAPH
+ {0xCFE1, 0x53A2}, //13575 #CJK UNIFIED IDEOGRAPH
+ {0xCFE2, 0x9576}, //13576 #CJK UNIFIED IDEOGRAPH
+ {0xCFE3, 0x9999}, //13577 #CJK UNIFIED IDEOGRAPH
+ {0xCFE4, 0x7BB1}, //13578 #CJK UNIFIED IDEOGRAPH
+ {0xCFE5, 0x8944}, //13579 #CJK UNIFIED IDEOGRAPH
+ {0xCFE6, 0x6E58}, //13580 #CJK UNIFIED IDEOGRAPH
+ {0xCFE7, 0x4E61}, //13581 #CJK UNIFIED IDEOGRAPH
+ {0xCFE8, 0x7FD4}, //13582 #CJK UNIFIED IDEOGRAPH
+ {0xCFE9, 0x7965}, //13583 #CJK UNIFIED IDEOGRAPH
+ {0xCFEA, 0x8BE6}, //13584 #CJK UNIFIED IDEOGRAPH
+ {0xCFEB, 0x60F3}, //13585 #CJK UNIFIED IDEOGRAPH
+ {0xCFEC, 0x54CD}, //13586 #CJK UNIFIED IDEOGRAPH
+ {0xCFED, 0x4EAB}, //13587 #CJK UNIFIED IDEOGRAPH
+ {0xCFEE, 0x9879}, //13588 #CJK UNIFIED IDEOGRAPH
+ {0xCFEF, 0x5DF7}, //13589 #CJK UNIFIED IDEOGRAPH
+ {0xCFF0, 0x6A61}, //13590 #CJK UNIFIED IDEOGRAPH
+ {0xCFF1, 0x50CF}, //13591 #CJK UNIFIED IDEOGRAPH
+ {0xCFF2, 0x5411}, //13592 #CJK UNIFIED IDEOGRAPH
+ {0xCFF3, 0x8C61}, //13593 #CJK UNIFIED IDEOGRAPH
+ {0xCFF4, 0x8427}, //13594 #CJK UNIFIED IDEOGRAPH
+ {0xCFF5, 0x785D}, //13595 #CJK UNIFIED IDEOGRAPH
+ {0xCFF6, 0x9704}, //13596 #CJK UNIFIED IDEOGRAPH
+ {0xCFF7, 0x524A}, //13597 #CJK UNIFIED IDEOGRAPH
+ {0xCFF8, 0x54EE}, //13598 #CJK UNIFIED IDEOGRAPH
+ {0xCFF9, 0x56A3}, //13599 #CJK UNIFIED IDEOGRAPH
+ {0xCFFA, 0x9500}, //13600 #CJK UNIFIED IDEOGRAPH
+ {0xCFFB, 0x6D88}, //13601 #CJK UNIFIED IDEOGRAPH
+ {0xCFFC, 0x5BB5}, //13602 #CJK UNIFIED IDEOGRAPH
+ {0xCFFD, 0x6DC6}, //13603 #CJK UNIFIED IDEOGRAPH
+ {0xCFFE, 0x6653}, //13604 #CJK UNIFIED IDEOGRAPH
+ {0xD040, 0x8824}, //13605 #CJK UNIFIED IDEOGRAPH
+ {0xD041, 0x8825}, //13606 #CJK UNIFIED IDEOGRAPH
+ {0xD042, 0x8826}, //13607 #CJK UNIFIED IDEOGRAPH
+ {0xD043, 0x8827}, //13608 #CJK UNIFIED IDEOGRAPH
+ {0xD044, 0x8828}, //13609 #CJK UNIFIED IDEOGRAPH
+ {0xD045, 0x8829}, //13610 #CJK UNIFIED IDEOGRAPH
+ {0xD046, 0x882A}, //13611 #CJK UNIFIED IDEOGRAPH
+ {0xD047, 0x882B}, //13612 #CJK UNIFIED IDEOGRAPH
+ {0xD048, 0x882C}, //13613 #CJK UNIFIED IDEOGRAPH
+ {0xD049, 0x882D}, //13614 #CJK UNIFIED IDEOGRAPH
+ {0xD04A, 0x882E}, //13615 #CJK UNIFIED IDEOGRAPH
+ {0xD04B, 0x882F}, //13616 #CJK UNIFIED IDEOGRAPH
+ {0xD04C, 0x8830}, //13617 #CJK UNIFIED IDEOGRAPH
+ {0xD04D, 0x8831}, //13618 #CJK UNIFIED IDEOGRAPH
+ {0xD04E, 0x8833}, //13619 #CJK UNIFIED IDEOGRAPH
+ {0xD04F, 0x8834}, //13620 #CJK UNIFIED IDEOGRAPH
+ {0xD050, 0x8835}, //13621 #CJK UNIFIED IDEOGRAPH
+ {0xD051, 0x8836}, //13622 #CJK UNIFIED IDEOGRAPH
+ {0xD052, 0x8837}, //13623 #CJK UNIFIED IDEOGRAPH
+ {0xD053, 0x8838}, //13624 #CJK UNIFIED IDEOGRAPH
+ {0xD054, 0x883A}, //13625 #CJK UNIFIED IDEOGRAPH
+ {0xD055, 0x883B}, //13626 #CJK UNIFIED IDEOGRAPH
+ {0xD056, 0x883D}, //13627 #CJK UNIFIED IDEOGRAPH
+ {0xD057, 0x883E}, //13628 #CJK UNIFIED IDEOGRAPH
+ {0xD058, 0x883F}, //13629 #CJK UNIFIED IDEOGRAPH
+ {0xD059, 0x8841}, //13630 #CJK UNIFIED IDEOGRAPH
+ {0xD05A, 0x8842}, //13631 #CJK UNIFIED IDEOGRAPH
+ {0xD05B, 0x8843}, //13632 #CJK UNIFIED IDEOGRAPH
+ {0xD05C, 0x8846}, //13633 #CJK UNIFIED IDEOGRAPH
+ {0xD05D, 0x8847}, //13634 #CJK UNIFIED IDEOGRAPH
+ {0xD05E, 0x8848}, //13635 #CJK UNIFIED IDEOGRAPH
+ {0xD05F, 0x8849}, //13636 #CJK UNIFIED IDEOGRAPH
+ {0xD060, 0x884A}, //13637 #CJK UNIFIED IDEOGRAPH
+ {0xD061, 0x884B}, //13638 #CJK UNIFIED IDEOGRAPH
+ {0xD062, 0x884E}, //13639 #CJK UNIFIED IDEOGRAPH
+ {0xD063, 0x884F}, //13640 #CJK UNIFIED IDEOGRAPH
+ {0xD064, 0x8850}, //13641 #CJK UNIFIED IDEOGRAPH
+ {0xD065, 0x8851}, //13642 #CJK UNIFIED IDEOGRAPH
+ {0xD066, 0x8852}, //13643 #CJK UNIFIED IDEOGRAPH
+ {0xD067, 0x8853}, //13644 #CJK UNIFIED IDEOGRAPH
+ {0xD068, 0x8855}, //13645 #CJK UNIFIED IDEOGRAPH
+ {0xD069, 0x8856}, //13646 #CJK UNIFIED IDEOGRAPH
+ {0xD06A, 0x8858}, //13647 #CJK UNIFIED IDEOGRAPH
+ {0xD06B, 0x885A}, //13648 #CJK UNIFIED IDEOGRAPH
+ {0xD06C, 0x885B}, //13649 #CJK UNIFIED IDEOGRAPH
+ {0xD06D, 0x885C}, //13650 #CJK UNIFIED IDEOGRAPH
+ {0xD06E, 0x885D}, //13651 #CJK UNIFIED IDEOGRAPH
+ {0xD06F, 0x885E}, //13652 #CJK UNIFIED IDEOGRAPH
+ {0xD070, 0x885F}, //13653 #CJK UNIFIED IDEOGRAPH
+ {0xD071, 0x8860}, //13654 #CJK UNIFIED IDEOGRAPH
+ {0xD072, 0x8866}, //13655 #CJK UNIFIED IDEOGRAPH
+ {0xD073, 0x8867}, //13656 #CJK UNIFIED IDEOGRAPH
+ {0xD074, 0x886A}, //13657 #CJK UNIFIED IDEOGRAPH
+ {0xD075, 0x886D}, //13658 #CJK UNIFIED IDEOGRAPH
+ {0xD076, 0x886F}, //13659 #CJK UNIFIED IDEOGRAPH
+ {0xD077, 0x8871}, //13660 #CJK UNIFIED IDEOGRAPH
+ {0xD078, 0x8873}, //13661 #CJK UNIFIED IDEOGRAPH
+ {0xD079, 0x8874}, //13662 #CJK UNIFIED IDEOGRAPH
+ {0xD07A, 0x8875}, //13663 #CJK UNIFIED IDEOGRAPH
+ {0xD07B, 0x8876}, //13664 #CJK UNIFIED IDEOGRAPH
+ {0xD07C, 0x8878}, //13665 #CJK UNIFIED IDEOGRAPH
+ {0xD07D, 0x8879}, //13666 #CJK UNIFIED IDEOGRAPH
+ {0xD07E, 0x887A}, //13667 #CJK UNIFIED IDEOGRAPH
+ {0xD080, 0x887B}, //13668 #CJK UNIFIED IDEOGRAPH
+ {0xD081, 0x887C}, //13669 #CJK UNIFIED IDEOGRAPH
+ {0xD082, 0x8880}, //13670 #CJK UNIFIED IDEOGRAPH
+ {0xD083, 0x8883}, //13671 #CJK UNIFIED IDEOGRAPH
+ {0xD084, 0x8886}, //13672 #CJK UNIFIED IDEOGRAPH
+ {0xD085, 0x8887}, //13673 #CJK UNIFIED IDEOGRAPH
+ {0xD086, 0x8889}, //13674 #CJK UNIFIED IDEOGRAPH
+ {0xD087, 0x888A}, //13675 #CJK UNIFIED IDEOGRAPH
+ {0xD088, 0x888C}, //13676 #CJK UNIFIED IDEOGRAPH
+ {0xD089, 0x888E}, //13677 #CJK UNIFIED IDEOGRAPH
+ {0xD08A, 0x888F}, //13678 #CJK UNIFIED IDEOGRAPH
+ {0xD08B, 0x8890}, //13679 #CJK UNIFIED IDEOGRAPH
+ {0xD08C, 0x8891}, //13680 #CJK UNIFIED IDEOGRAPH
+ {0xD08D, 0x8893}, //13681 #CJK UNIFIED IDEOGRAPH
+ {0xD08E, 0x8894}, //13682 #CJK UNIFIED IDEOGRAPH
+ {0xD08F, 0x8895}, //13683 #CJK UNIFIED IDEOGRAPH
+ {0xD090, 0x8897}, //13684 #CJK UNIFIED IDEOGRAPH
+ {0xD091, 0x8898}, //13685 #CJK UNIFIED IDEOGRAPH
+ {0xD092, 0x8899}, //13686 #CJK UNIFIED IDEOGRAPH
+ {0xD093, 0x889A}, //13687 #CJK UNIFIED IDEOGRAPH
+ {0xD094, 0x889B}, //13688 #CJK UNIFIED IDEOGRAPH
+ {0xD095, 0x889D}, //13689 #CJK UNIFIED IDEOGRAPH
+ {0xD096, 0x889E}, //13690 #CJK UNIFIED IDEOGRAPH
+ {0xD097, 0x889F}, //13691 #CJK UNIFIED IDEOGRAPH
+ {0xD098, 0x88A0}, //13692 #CJK UNIFIED IDEOGRAPH
+ {0xD099, 0x88A1}, //13693 #CJK UNIFIED IDEOGRAPH
+ {0xD09A, 0x88A3}, //13694 #CJK UNIFIED IDEOGRAPH
+ {0xD09B, 0x88A5}, //13695 #CJK UNIFIED IDEOGRAPH
+ {0xD09C, 0x88A6}, //13696 #CJK UNIFIED IDEOGRAPH
+ {0xD09D, 0x88A7}, //13697 #CJK UNIFIED IDEOGRAPH
+ {0xD09E, 0x88A8}, //13698 #CJK UNIFIED IDEOGRAPH
+ {0xD09F, 0x88A9}, //13699 #CJK UNIFIED IDEOGRAPH
+ {0xD0A0, 0x88AA}, //13700 #CJK UNIFIED IDEOGRAPH
+ {0xD0A1, 0x5C0F}, //13701 #CJK UNIFIED IDEOGRAPH
+ {0xD0A2, 0x5B5D}, //13702 #CJK UNIFIED IDEOGRAPH
+ {0xD0A3, 0x6821}, //13703 #CJK UNIFIED IDEOGRAPH
+ {0xD0A4, 0x8096}, //13704 #CJK UNIFIED IDEOGRAPH
+ {0xD0A5, 0x5578}, //13705 #CJK UNIFIED IDEOGRAPH
+ {0xD0A6, 0x7B11}, //13706 #CJK UNIFIED IDEOGRAPH
+ {0xD0A7, 0x6548}, //13707 #CJK UNIFIED IDEOGRAPH
+ {0xD0A8, 0x6954}, //13708 #CJK UNIFIED IDEOGRAPH
+ {0xD0A9, 0x4E9B}, //13709 #CJK UNIFIED IDEOGRAPH
+ {0xD0AA, 0x6B47}, //13710 #CJK UNIFIED IDEOGRAPH
+ {0xD0AB, 0x874E}, //13711 #CJK UNIFIED IDEOGRAPH
+ {0xD0AC, 0x978B}, //13712 #CJK UNIFIED IDEOGRAPH
+ {0xD0AD, 0x534F}, //13713 #CJK UNIFIED IDEOGRAPH
+ {0xD0AE, 0x631F}, //13714 #CJK UNIFIED IDEOGRAPH
+ {0xD0AF, 0x643A}, //13715 #CJK UNIFIED IDEOGRAPH
+ {0xD0B0, 0x90AA}, //13716 #CJK UNIFIED IDEOGRAPH
+ {0xD0B1, 0x659C}, //13717 #CJK UNIFIED IDEOGRAPH
+ {0xD0B2, 0x80C1}, //13718 #CJK UNIFIED IDEOGRAPH
+ {0xD0B3, 0x8C10}, //13719 #CJK UNIFIED IDEOGRAPH
+ {0xD0B4, 0x5199}, //13720 #CJK UNIFIED IDEOGRAPH
+ {0xD0B5, 0x68B0}, //13721 #CJK UNIFIED IDEOGRAPH
+ {0xD0B6, 0x5378}, //13722 #CJK UNIFIED IDEOGRAPH
+ {0xD0B7, 0x87F9}, //13723 #CJK UNIFIED IDEOGRAPH
+ {0xD0B8, 0x61C8}, //13724 #CJK UNIFIED IDEOGRAPH
+ {0xD0B9, 0x6CC4}, //13725 #CJK UNIFIED IDEOGRAPH
+ {0xD0BA, 0x6CFB}, //13726 #CJK UNIFIED IDEOGRAPH
+ {0xD0BB, 0x8C22}, //13727 #CJK UNIFIED IDEOGRAPH
+ {0xD0BC, 0x5C51}, //13728 #CJK UNIFIED IDEOGRAPH
+ {0xD0BD, 0x85AA}, //13729 #CJK UNIFIED IDEOGRAPH
+ {0xD0BE, 0x82AF}, //13730 #CJK UNIFIED IDEOGRAPH
+ {0xD0BF, 0x950C}, //13731 #CJK UNIFIED IDEOGRAPH
+ {0xD0C0, 0x6B23}, //13732 #CJK UNIFIED IDEOGRAPH
+ {0xD0C1, 0x8F9B}, //13733 #CJK UNIFIED IDEOGRAPH
+ {0xD0C2, 0x65B0}, //13734 #CJK UNIFIED IDEOGRAPH
+ {0xD0C3, 0x5FFB}, //13735 #CJK UNIFIED IDEOGRAPH
+ {0xD0C4, 0x5FC3}, //13736 #CJK UNIFIED IDEOGRAPH
+ {0xD0C5, 0x4FE1}, //13737 #CJK UNIFIED IDEOGRAPH
+ {0xD0C6, 0x8845}, //13738 #CJK UNIFIED IDEOGRAPH
+ {0xD0C7, 0x661F}, //13739 #CJK UNIFIED IDEOGRAPH
+ {0xD0C8, 0x8165}, //13740 #CJK UNIFIED IDEOGRAPH
+ {0xD0C9, 0x7329}, //13741 #CJK UNIFIED IDEOGRAPH
+ {0xD0CA, 0x60FA}, //13742 #CJK UNIFIED IDEOGRAPH
+ {0xD0CB, 0x5174}, //13743 #CJK UNIFIED IDEOGRAPH
+ {0xD0CC, 0x5211}, //13744 #CJK UNIFIED IDEOGRAPH
+ {0xD0CD, 0x578B}, //13745 #CJK UNIFIED IDEOGRAPH
+ {0xD0CE, 0x5F62}, //13746 #CJK UNIFIED IDEOGRAPH
+ {0xD0CF, 0x90A2}, //13747 #CJK UNIFIED IDEOGRAPH
+ {0xD0D0, 0x884C}, //13748 #CJK UNIFIED IDEOGRAPH
+ {0xD0D1, 0x9192}, //13749 #CJK UNIFIED IDEOGRAPH
+ {0xD0D2, 0x5E78}, //13750 #CJK UNIFIED IDEOGRAPH
+ {0xD0D3, 0x674F}, //13751 #CJK UNIFIED IDEOGRAPH
+ {0xD0D4, 0x6027}, //13752 #CJK UNIFIED IDEOGRAPH
+ {0xD0D5, 0x59D3}, //13753 #CJK UNIFIED IDEOGRAPH
+ {0xD0D6, 0x5144}, //13754 #CJK UNIFIED IDEOGRAPH
+ {0xD0D7, 0x51F6}, //13755 #CJK UNIFIED IDEOGRAPH
+ {0xD0D8, 0x80F8}, //13756 #CJK UNIFIED IDEOGRAPH
+ {0xD0D9, 0x5308}, //13757 #CJK UNIFIED IDEOGRAPH
+ {0xD0DA, 0x6C79}, //13758 #CJK UNIFIED IDEOGRAPH
+ {0xD0DB, 0x96C4}, //13759 #CJK UNIFIED IDEOGRAPH
+ {0xD0DC, 0x718A}, //13760 #CJK UNIFIED IDEOGRAPH
+ {0xD0DD, 0x4F11}, //13761 #CJK UNIFIED IDEOGRAPH
+ {0xD0DE, 0x4FEE}, //13762 #CJK UNIFIED IDEOGRAPH
+ {0xD0DF, 0x7F9E}, //13763 #CJK UNIFIED IDEOGRAPH
+ {0xD0E0, 0x673D}, //13764 #CJK UNIFIED IDEOGRAPH
+ {0xD0E1, 0x55C5}, //13765 #CJK UNIFIED IDEOGRAPH
+ {0xD0E2, 0x9508}, //13766 #CJK UNIFIED IDEOGRAPH
+ {0xD0E3, 0x79C0}, //13767 #CJK UNIFIED IDEOGRAPH
+ {0xD0E4, 0x8896}, //13768 #CJK UNIFIED IDEOGRAPH
+ {0xD0E5, 0x7EE3}, //13769 #CJK UNIFIED IDEOGRAPH
+ {0xD0E6, 0x589F}, //13770 #CJK UNIFIED IDEOGRAPH
+ {0xD0E7, 0x620C}, //13771 #CJK UNIFIED IDEOGRAPH
+ {0xD0E8, 0x9700}, //13772 #CJK UNIFIED IDEOGRAPH
+ {0xD0E9, 0x865A}, //13773 #CJK UNIFIED IDEOGRAPH
+ {0xD0EA, 0x5618}, //13774 #CJK UNIFIED IDEOGRAPH
+ {0xD0EB, 0x987B}, //13775 #CJK UNIFIED IDEOGRAPH
+ {0xD0EC, 0x5F90}, //13776 #CJK UNIFIED IDEOGRAPH
+ {0xD0ED, 0x8BB8}, //13777 #CJK UNIFIED IDEOGRAPH
+ {0xD0EE, 0x84C4}, //13778 #CJK UNIFIED IDEOGRAPH
+ {0xD0EF, 0x9157}, //13779 #CJK UNIFIED IDEOGRAPH
+ {0xD0F0, 0x53D9}, //13780 #CJK UNIFIED IDEOGRAPH
+ {0xD0F1, 0x65ED}, //13781 #CJK UNIFIED IDEOGRAPH
+ {0xD0F2, 0x5E8F}, //13782 #CJK UNIFIED IDEOGRAPH
+ {0xD0F3, 0x755C}, //13783 #CJK UNIFIED IDEOGRAPH
+ {0xD0F4, 0x6064}, //13784 #CJK UNIFIED IDEOGRAPH
+ {0xD0F5, 0x7D6E}, //13785 #CJK UNIFIED IDEOGRAPH
+ {0xD0F6, 0x5A7F}, //13786 #CJK UNIFIED IDEOGRAPH
+ {0xD0F7, 0x7EEA}, //13787 #CJK UNIFIED IDEOGRAPH
+ {0xD0F8, 0x7EED}, //13788 #CJK UNIFIED IDEOGRAPH
+ {0xD0F9, 0x8F69}, //13789 #CJK UNIFIED IDEOGRAPH
+ {0xD0FA, 0x55A7}, //13790 #CJK UNIFIED IDEOGRAPH
+ {0xD0FB, 0x5BA3}, //13791 #CJK UNIFIED IDEOGRAPH
+ {0xD0FC, 0x60AC}, //13792 #CJK UNIFIED IDEOGRAPH
+ {0xD0FD, 0x65CB}, //13793 #CJK UNIFIED IDEOGRAPH
+ {0xD0FE, 0x7384}, //13794 #CJK UNIFIED IDEOGRAPH
+ {0xD140, 0x88AC}, //13795 #CJK UNIFIED IDEOGRAPH
+ {0xD141, 0x88AE}, //13796 #CJK UNIFIED IDEOGRAPH
+ {0xD142, 0x88AF}, //13797 #CJK UNIFIED IDEOGRAPH
+ {0xD143, 0x88B0}, //13798 #CJK UNIFIED IDEOGRAPH
+ {0xD144, 0x88B2}, //13799 #CJK UNIFIED IDEOGRAPH
+ {0xD145, 0x88B3}, //13800 #CJK UNIFIED IDEOGRAPH
+ {0xD146, 0x88B4}, //13801 #CJK UNIFIED IDEOGRAPH
+ {0xD147, 0x88B5}, //13802 #CJK UNIFIED IDEOGRAPH
+ {0xD148, 0x88B6}, //13803 #CJK UNIFIED IDEOGRAPH
+ {0xD149, 0x88B8}, //13804 #CJK UNIFIED IDEOGRAPH
+ {0xD14A, 0x88B9}, //13805 #CJK UNIFIED IDEOGRAPH
+ {0xD14B, 0x88BA}, //13806 #CJK UNIFIED IDEOGRAPH
+ {0xD14C, 0x88BB}, //13807 #CJK UNIFIED IDEOGRAPH
+ {0xD14D, 0x88BD}, //13808 #CJK UNIFIED IDEOGRAPH
+ {0xD14E, 0x88BE}, //13809 #CJK UNIFIED IDEOGRAPH
+ {0xD14F, 0x88BF}, //13810 #CJK UNIFIED IDEOGRAPH
+ {0xD150, 0x88C0}, //13811 #CJK UNIFIED IDEOGRAPH
+ {0xD151, 0x88C3}, //13812 #CJK UNIFIED IDEOGRAPH
+ {0xD152, 0x88C4}, //13813 #CJK UNIFIED IDEOGRAPH
+ {0xD153, 0x88C7}, //13814 #CJK UNIFIED IDEOGRAPH
+ {0xD154, 0x88C8}, //13815 #CJK UNIFIED IDEOGRAPH
+ {0xD155, 0x88CA}, //13816 #CJK UNIFIED IDEOGRAPH
+ {0xD156, 0x88CB}, //13817 #CJK UNIFIED IDEOGRAPH
+ {0xD157, 0x88CC}, //13818 #CJK UNIFIED IDEOGRAPH
+ {0xD158, 0x88CD}, //13819 #CJK UNIFIED IDEOGRAPH
+ {0xD159, 0x88CF}, //13820 #CJK UNIFIED IDEOGRAPH
+ {0xD15A, 0x88D0}, //13821 #CJK UNIFIED IDEOGRAPH
+ {0xD15B, 0x88D1}, //13822 #CJK UNIFIED IDEOGRAPH
+ {0xD15C, 0x88D3}, //13823 #CJK UNIFIED IDEOGRAPH
+ {0xD15D, 0x88D6}, //13824 #CJK UNIFIED IDEOGRAPH
+ {0xD15E, 0x88D7}, //13825 #CJK UNIFIED IDEOGRAPH
+ {0xD15F, 0x88DA}, //13826 #CJK UNIFIED IDEOGRAPH
+ {0xD160, 0x88DB}, //13827 #CJK UNIFIED IDEOGRAPH
+ {0xD161, 0x88DC}, //13828 #CJK UNIFIED IDEOGRAPH
+ {0xD162, 0x88DD}, //13829 #CJK UNIFIED IDEOGRAPH
+ {0xD163, 0x88DE}, //13830 #CJK UNIFIED IDEOGRAPH
+ {0xD164, 0x88E0}, //13831 #CJK UNIFIED IDEOGRAPH
+ {0xD165, 0x88E1}, //13832 #CJK UNIFIED IDEOGRAPH
+ {0xD166, 0x88E6}, //13833 #CJK UNIFIED IDEOGRAPH
+ {0xD167, 0x88E7}, //13834 #CJK UNIFIED IDEOGRAPH
+ {0xD168, 0x88E9}, //13835 #CJK UNIFIED IDEOGRAPH
+ {0xD169, 0x88EA}, //13836 #CJK UNIFIED IDEOGRAPH
+ {0xD16A, 0x88EB}, //13837 #CJK UNIFIED IDEOGRAPH
+ {0xD16B, 0x88EC}, //13838 #CJK UNIFIED IDEOGRAPH
+ {0xD16C, 0x88ED}, //13839 #CJK UNIFIED IDEOGRAPH
+ {0xD16D, 0x88EE}, //13840 #CJK UNIFIED IDEOGRAPH
+ {0xD16E, 0x88EF}, //13841 #CJK UNIFIED IDEOGRAPH
+ {0xD16F, 0x88F2}, //13842 #CJK UNIFIED IDEOGRAPH
+ {0xD170, 0x88F5}, //13843 #CJK UNIFIED IDEOGRAPH
+ {0xD171, 0x88F6}, //13844 #CJK UNIFIED IDEOGRAPH
+ {0xD172, 0x88F7}, //13845 #CJK UNIFIED IDEOGRAPH
+ {0xD173, 0x88FA}, //13846 #CJK UNIFIED IDEOGRAPH
+ {0xD174, 0x88FB}, //13847 #CJK UNIFIED IDEOGRAPH
+ {0xD175, 0x88FD}, //13848 #CJK UNIFIED IDEOGRAPH
+ {0xD176, 0x88FF}, //13849 #CJK UNIFIED IDEOGRAPH
+ {0xD177, 0x8900}, //13850 #CJK UNIFIED IDEOGRAPH
+ {0xD178, 0x8901}, //13851 #CJK UNIFIED IDEOGRAPH
+ {0xD179, 0x8903}, //13852 #CJK UNIFIED IDEOGRAPH
+ {0xD17A, 0x8904}, //13853 #CJK UNIFIED IDEOGRAPH
+ {0xD17B, 0x8905}, //13854 #CJK UNIFIED IDEOGRAPH
+ {0xD17C, 0x8906}, //13855 #CJK UNIFIED IDEOGRAPH
+ {0xD17D, 0x8907}, //13856 #CJK UNIFIED IDEOGRAPH
+ {0xD17E, 0x8908}, //13857 #CJK UNIFIED IDEOGRAPH
+ {0xD180, 0x8909}, //13858 #CJK UNIFIED IDEOGRAPH
+ {0xD181, 0x890B}, //13859 #CJK UNIFIED IDEOGRAPH
+ {0xD182, 0x890C}, //13860 #CJK UNIFIED IDEOGRAPH
+ {0xD183, 0x890D}, //13861 #CJK UNIFIED IDEOGRAPH
+ {0xD184, 0x890E}, //13862 #CJK UNIFIED IDEOGRAPH
+ {0xD185, 0x890F}, //13863 #CJK UNIFIED IDEOGRAPH
+ {0xD186, 0x8911}, //13864 #CJK UNIFIED IDEOGRAPH
+ {0xD187, 0x8914}, //13865 #CJK UNIFIED IDEOGRAPH
+ {0xD188, 0x8915}, //13866 #CJK UNIFIED IDEOGRAPH
+ {0xD189, 0x8916}, //13867 #CJK UNIFIED IDEOGRAPH
+ {0xD18A, 0x8917}, //13868 #CJK UNIFIED IDEOGRAPH
+ {0xD18B, 0x8918}, //13869 #CJK UNIFIED IDEOGRAPH
+ {0xD18C, 0x891C}, //13870 #CJK UNIFIED IDEOGRAPH
+ {0xD18D, 0x891D}, //13871 #CJK UNIFIED IDEOGRAPH
+ {0xD18E, 0x891E}, //13872 #CJK UNIFIED IDEOGRAPH
+ {0xD18F, 0x891F}, //13873 #CJK UNIFIED IDEOGRAPH
+ {0xD190, 0x8920}, //13874 #CJK UNIFIED IDEOGRAPH
+ {0xD191, 0x8922}, //13875 #CJK UNIFIED IDEOGRAPH
+ {0xD192, 0x8923}, //13876 #CJK UNIFIED IDEOGRAPH
+ {0xD193, 0x8924}, //13877 #CJK UNIFIED IDEOGRAPH
+ {0xD194, 0x8926}, //13878 #CJK UNIFIED IDEOGRAPH
+ {0xD195, 0x8927}, //13879 #CJK UNIFIED IDEOGRAPH
+ {0xD196, 0x8928}, //13880 #CJK UNIFIED IDEOGRAPH
+ {0xD197, 0x8929}, //13881 #CJK UNIFIED IDEOGRAPH
+ {0xD198, 0x892C}, //13882 #CJK UNIFIED IDEOGRAPH
+ {0xD199, 0x892D}, //13883 #CJK UNIFIED IDEOGRAPH
+ {0xD19A, 0x892E}, //13884 #CJK UNIFIED IDEOGRAPH
+ {0xD19B, 0x892F}, //13885 #CJK UNIFIED IDEOGRAPH
+ {0xD19C, 0x8931}, //13886 #CJK UNIFIED IDEOGRAPH
+ {0xD19D, 0x8932}, //13887 #CJK UNIFIED IDEOGRAPH
+ {0xD19E, 0x8933}, //13888 #CJK UNIFIED IDEOGRAPH
+ {0xD19F, 0x8935}, //13889 #CJK UNIFIED IDEOGRAPH
+ {0xD1A0, 0x8937}, //13890 #CJK UNIFIED IDEOGRAPH
+ {0xD1A1, 0x9009}, //13891 #CJK UNIFIED IDEOGRAPH
+ {0xD1A2, 0x7663}, //13892 #CJK UNIFIED IDEOGRAPH
+ {0xD1A3, 0x7729}, //13893 #CJK UNIFIED IDEOGRAPH
+ {0xD1A4, 0x7EDA}, //13894 #CJK UNIFIED IDEOGRAPH
+ {0xD1A5, 0x9774}, //13895 #CJK UNIFIED IDEOGRAPH
+ {0xD1A6, 0x859B}, //13896 #CJK UNIFIED IDEOGRAPH
+ {0xD1A7, 0x5B66}, //13897 #CJK UNIFIED IDEOGRAPH
+ {0xD1A8, 0x7A74}, //13898 #CJK UNIFIED IDEOGRAPH
+ {0xD1A9, 0x96EA}, //13899 #CJK UNIFIED IDEOGRAPH
+ {0xD1AA, 0x8840}, //13900 #CJK UNIFIED IDEOGRAPH
+ {0xD1AB, 0x52CB}, //13901 #CJK UNIFIED IDEOGRAPH
+ {0xD1AC, 0x718F}, //13902 #CJK UNIFIED IDEOGRAPH
+ {0xD1AD, 0x5FAA}, //13903 #CJK UNIFIED IDEOGRAPH
+ {0xD1AE, 0x65EC}, //13904 #CJK UNIFIED IDEOGRAPH
+ {0xD1AF, 0x8BE2}, //13905 #CJK UNIFIED IDEOGRAPH
+ {0xD1B0, 0x5BFB}, //13906 #CJK UNIFIED IDEOGRAPH
+ {0xD1B1, 0x9A6F}, //13907 #CJK UNIFIED IDEOGRAPH
+ {0xD1B2, 0x5DE1}, //13908 #CJK UNIFIED IDEOGRAPH
+ {0xD1B3, 0x6B89}, //13909 #CJK UNIFIED IDEOGRAPH
+ {0xD1B4, 0x6C5B}, //13910 #CJK UNIFIED IDEOGRAPH
+ {0xD1B5, 0x8BAD}, //13911 #CJK UNIFIED IDEOGRAPH
+ {0xD1B6, 0x8BAF}, //13912 #CJK UNIFIED IDEOGRAPH
+ {0xD1B7, 0x900A}, //13913 #CJK UNIFIED IDEOGRAPH
+ {0xD1B8, 0x8FC5}, //13914 #CJK UNIFIED IDEOGRAPH
+ {0xD1B9, 0x538B}, //13915 #CJK UNIFIED IDEOGRAPH
+ {0xD1BA, 0x62BC}, //13916 #CJK UNIFIED IDEOGRAPH
+ {0xD1BB, 0x9E26}, //13917 #CJK UNIFIED IDEOGRAPH
+ {0xD1BC, 0x9E2D}, //13918 #CJK UNIFIED IDEOGRAPH
+ {0xD1BD, 0x5440}, //13919 #CJK UNIFIED IDEOGRAPH
+ {0xD1BE, 0x4E2B}, //13920 #CJK UNIFIED IDEOGRAPH
+ {0xD1BF, 0x82BD}, //13921 #CJK UNIFIED IDEOGRAPH
+ {0xD1C0, 0x7259}, //13922 #CJK UNIFIED IDEOGRAPH
+ {0xD1C1, 0x869C}, //13923 #CJK UNIFIED IDEOGRAPH
+ {0xD1C2, 0x5D16}, //13924 #CJK UNIFIED IDEOGRAPH
+ {0xD1C3, 0x8859}, //13925 #CJK UNIFIED IDEOGRAPH
+ {0xD1C4, 0x6DAF}, //13926 #CJK UNIFIED IDEOGRAPH
+ {0xD1C5, 0x96C5}, //13927 #CJK UNIFIED IDEOGRAPH
+ {0xD1C6, 0x54D1}, //13928 #CJK UNIFIED IDEOGRAPH
+ {0xD1C7, 0x4E9A}, //13929 #CJK UNIFIED IDEOGRAPH
+ {0xD1C8, 0x8BB6}, //13930 #CJK UNIFIED IDEOGRAPH
+ {0xD1C9, 0x7109}, //13931 #CJK UNIFIED IDEOGRAPH
+ {0xD1CA, 0x54BD}, //13932 #CJK UNIFIED IDEOGRAPH
+ {0xD1CB, 0x9609}, //13933 #CJK UNIFIED IDEOGRAPH
+ {0xD1CC, 0x70DF}, //13934 #CJK UNIFIED IDEOGRAPH
+ {0xD1CD, 0x6DF9}, //13935 #CJK UNIFIED IDEOGRAPH
+ {0xD1CE, 0x76D0}, //13936 #CJK UNIFIED IDEOGRAPH
+ {0xD1CF, 0x4E25}, //13937 #CJK UNIFIED IDEOGRAPH
+ {0xD1D0, 0x7814}, //13938 #CJK UNIFIED IDEOGRAPH
+ {0xD1D1, 0x8712}, //13939 #CJK UNIFIED IDEOGRAPH
+ {0xD1D2, 0x5CA9}, //13940 #CJK UNIFIED IDEOGRAPH
+ {0xD1D3, 0x5EF6}, //13941 #CJK UNIFIED IDEOGRAPH
+ {0xD1D4, 0x8A00}, //13942 #CJK UNIFIED IDEOGRAPH
+ {0xD1D5, 0x989C}, //13943 #CJK UNIFIED IDEOGRAPH
+ {0xD1D6, 0x960E}, //13944 #CJK UNIFIED IDEOGRAPH
+ {0xD1D7, 0x708E}, //13945 #CJK UNIFIED IDEOGRAPH
+ {0xD1D8, 0x6CBF}, //13946 #CJK UNIFIED IDEOGRAPH
+ {0xD1D9, 0x5944}, //13947 #CJK UNIFIED IDEOGRAPH
+ {0xD1DA, 0x63A9}, //13948 #CJK UNIFIED IDEOGRAPH
+ {0xD1DB, 0x773C}, //13949 #CJK UNIFIED IDEOGRAPH
+ {0xD1DC, 0x884D}, //13950 #CJK UNIFIED IDEOGRAPH
+ {0xD1DD, 0x6F14}, //13951 #CJK UNIFIED IDEOGRAPH
+ {0xD1DE, 0x8273}, //13952 #CJK UNIFIED IDEOGRAPH
+ {0xD1DF, 0x5830}, //13953 #CJK UNIFIED IDEOGRAPH
+ {0xD1E0, 0x71D5}, //13954 #CJK UNIFIED IDEOGRAPH
+ {0xD1E1, 0x538C}, //13955 #CJK UNIFIED IDEOGRAPH
+ {0xD1E2, 0x781A}, //13956 #CJK UNIFIED IDEOGRAPH
+ {0xD1E3, 0x96C1}, //13957 #CJK UNIFIED IDEOGRAPH
+ {0xD1E4, 0x5501}, //13958 #CJK UNIFIED IDEOGRAPH
+ {0xD1E5, 0x5F66}, //13959 #CJK UNIFIED IDEOGRAPH
+ {0xD1E6, 0x7130}, //13960 #CJK UNIFIED IDEOGRAPH
+ {0xD1E7, 0x5BB4}, //13961 #CJK UNIFIED IDEOGRAPH
+ {0xD1E8, 0x8C1A}, //13962 #CJK UNIFIED IDEOGRAPH
+ {0xD1E9, 0x9A8C}, //13963 #CJK UNIFIED IDEOGRAPH
+ {0xD1EA, 0x6B83}, //13964 #CJK UNIFIED IDEOGRAPH
+ {0xD1EB, 0x592E}, //13965 #CJK UNIFIED IDEOGRAPH
+ {0xD1EC, 0x9E2F}, //13966 #CJK UNIFIED IDEOGRAPH
+ {0xD1ED, 0x79E7}, //13967 #CJK UNIFIED IDEOGRAPH
+ {0xD1EE, 0x6768}, //13968 #CJK UNIFIED IDEOGRAPH
+ {0xD1EF, 0x626C}, //13969 #CJK UNIFIED IDEOGRAPH
+ {0xD1F0, 0x4F6F}, //13970 #CJK UNIFIED IDEOGRAPH
+ {0xD1F1, 0x75A1}, //13971 #CJK UNIFIED IDEOGRAPH
+ {0xD1F2, 0x7F8A}, //13972 #CJK UNIFIED IDEOGRAPH
+ {0xD1F3, 0x6D0B}, //13973 #CJK UNIFIED IDEOGRAPH
+ {0xD1F4, 0x9633}, //13974 #CJK UNIFIED IDEOGRAPH
+ {0xD1F5, 0x6C27}, //13975 #CJK UNIFIED IDEOGRAPH
+ {0xD1F6, 0x4EF0}, //13976 #CJK UNIFIED IDEOGRAPH
+ {0xD1F7, 0x75D2}, //13977 #CJK UNIFIED IDEOGRAPH
+ {0xD1F8, 0x517B}, //13978 #CJK UNIFIED IDEOGRAPH
+ {0xD1F9, 0x6837}, //13979 #CJK UNIFIED IDEOGRAPH
+ {0xD1FA, 0x6F3E}, //13980 #CJK UNIFIED IDEOGRAPH
+ {0xD1FB, 0x9080}, //13981 #CJK UNIFIED IDEOGRAPH
+ {0xD1FC, 0x8170}, //13982 #CJK UNIFIED IDEOGRAPH
+ {0xD1FD, 0x5996}, //13983 #CJK UNIFIED IDEOGRAPH
+ {0xD1FE, 0x7476}, //13984 #CJK UNIFIED IDEOGRAPH
+ {0xD240, 0x8938}, //13985 #CJK UNIFIED IDEOGRAPH
+ {0xD241, 0x8939}, //13986 #CJK UNIFIED IDEOGRAPH
+ {0xD242, 0x893A}, //13987 #CJK UNIFIED IDEOGRAPH
+ {0xD243, 0x893B}, //13988 #CJK UNIFIED IDEOGRAPH
+ {0xD244, 0x893C}, //13989 #CJK UNIFIED IDEOGRAPH
+ {0xD245, 0x893D}, //13990 #CJK UNIFIED IDEOGRAPH
+ {0xD246, 0x893E}, //13991 #CJK UNIFIED IDEOGRAPH
+ {0xD247, 0x893F}, //13992 #CJK UNIFIED IDEOGRAPH
+ {0xD248, 0x8940}, //13993 #CJK UNIFIED IDEOGRAPH
+ {0xD249, 0x8942}, //13994 #CJK UNIFIED IDEOGRAPH
+ {0xD24A, 0x8943}, //13995 #CJK UNIFIED IDEOGRAPH
+ {0xD24B, 0x8945}, //13996 #CJK UNIFIED IDEOGRAPH
+ {0xD24C, 0x8946}, //13997 #CJK UNIFIED IDEOGRAPH
+ {0xD24D, 0x8947}, //13998 #CJK UNIFIED IDEOGRAPH
+ {0xD24E, 0x8948}, //13999 #CJK UNIFIED IDEOGRAPH
+ {0xD24F, 0x8949}, //14000 #CJK UNIFIED IDEOGRAPH
+ {0xD250, 0x894A}, //14001 #CJK UNIFIED IDEOGRAPH
+ {0xD251, 0x894B}, //14002 #CJK UNIFIED IDEOGRAPH
+ {0xD252, 0x894C}, //14003 #CJK UNIFIED IDEOGRAPH
+ {0xD253, 0x894D}, //14004 #CJK UNIFIED IDEOGRAPH
+ {0xD254, 0x894E}, //14005 #CJK UNIFIED IDEOGRAPH
+ {0xD255, 0x894F}, //14006 #CJK UNIFIED IDEOGRAPH
+ {0xD256, 0x8950}, //14007 #CJK UNIFIED IDEOGRAPH
+ {0xD257, 0x8951}, //14008 #CJK UNIFIED IDEOGRAPH
+ {0xD258, 0x8952}, //14009 #CJK UNIFIED IDEOGRAPH
+ {0xD259, 0x8953}, //14010 #CJK UNIFIED IDEOGRAPH
+ {0xD25A, 0x8954}, //14011 #CJK UNIFIED IDEOGRAPH
+ {0xD25B, 0x8955}, //14012 #CJK UNIFIED IDEOGRAPH
+ {0xD25C, 0x8956}, //14013 #CJK UNIFIED IDEOGRAPH
+ {0xD25D, 0x8957}, //14014 #CJK UNIFIED IDEOGRAPH
+ {0xD25E, 0x8958}, //14015 #CJK UNIFIED IDEOGRAPH
+ {0xD25F, 0x8959}, //14016 #CJK UNIFIED IDEOGRAPH
+ {0xD260, 0x895A}, //14017 #CJK UNIFIED IDEOGRAPH
+ {0xD261, 0x895B}, //14018 #CJK UNIFIED IDEOGRAPH
+ {0xD262, 0x895C}, //14019 #CJK UNIFIED IDEOGRAPH
+ {0xD263, 0x895D}, //14020 #CJK UNIFIED IDEOGRAPH
+ {0xD264, 0x8960}, //14021 #CJK UNIFIED IDEOGRAPH
+ {0xD265, 0x8961}, //14022 #CJK UNIFIED IDEOGRAPH
+ {0xD266, 0x8962}, //14023 #CJK UNIFIED IDEOGRAPH
+ {0xD267, 0x8963}, //14024 #CJK UNIFIED IDEOGRAPH
+ {0xD268, 0x8964}, //14025 #CJK UNIFIED IDEOGRAPH
+ {0xD269, 0x8965}, //14026 #CJK UNIFIED IDEOGRAPH
+ {0xD26A, 0x8967}, //14027 #CJK UNIFIED IDEOGRAPH
+ {0xD26B, 0x8968}, //14028 #CJK UNIFIED IDEOGRAPH
+ {0xD26C, 0x8969}, //14029 #CJK UNIFIED IDEOGRAPH
+ {0xD26D, 0x896A}, //14030 #CJK UNIFIED IDEOGRAPH
+ {0xD26E, 0x896B}, //14031 #CJK UNIFIED IDEOGRAPH
+ {0xD26F, 0x896C}, //14032 #CJK UNIFIED IDEOGRAPH
+ {0xD270, 0x896D}, //14033 #CJK UNIFIED IDEOGRAPH
+ {0xD271, 0x896E}, //14034 #CJK UNIFIED IDEOGRAPH
+ {0xD272, 0x896F}, //14035 #CJK UNIFIED IDEOGRAPH
+ {0xD273, 0x8970}, //14036 #CJK UNIFIED IDEOGRAPH
+ {0xD274, 0x8971}, //14037 #CJK UNIFIED IDEOGRAPH
+ {0xD275, 0x8972}, //14038 #CJK UNIFIED IDEOGRAPH
+ {0xD276, 0x8973}, //14039 #CJK UNIFIED IDEOGRAPH
+ {0xD277, 0x8974}, //14040 #CJK UNIFIED IDEOGRAPH
+ {0xD278, 0x8975}, //14041 #CJK UNIFIED IDEOGRAPH
+ {0xD279, 0x8976}, //14042 #CJK UNIFIED IDEOGRAPH
+ {0xD27A, 0x8977}, //14043 #CJK UNIFIED IDEOGRAPH
+ {0xD27B, 0x8978}, //14044 #CJK UNIFIED IDEOGRAPH
+ {0xD27C, 0x8979}, //14045 #CJK UNIFIED IDEOGRAPH
+ {0xD27D, 0x897A}, //14046 #CJK UNIFIED IDEOGRAPH
+ {0xD27E, 0x897C}, //14047 #CJK UNIFIED IDEOGRAPH
+ {0xD280, 0x897D}, //14048 #CJK UNIFIED IDEOGRAPH
+ {0xD281, 0x897E}, //14049 #CJK UNIFIED IDEOGRAPH
+ {0xD282, 0x8980}, //14050 #CJK UNIFIED IDEOGRAPH
+ {0xD283, 0x8982}, //14051 #CJK UNIFIED IDEOGRAPH
+ {0xD284, 0x8984}, //14052 #CJK UNIFIED IDEOGRAPH
+ {0xD285, 0x8985}, //14053 #CJK UNIFIED IDEOGRAPH
+ {0xD286, 0x8987}, //14054 #CJK UNIFIED IDEOGRAPH
+ {0xD287, 0x8988}, //14055 #CJK UNIFIED IDEOGRAPH
+ {0xD288, 0x8989}, //14056 #CJK UNIFIED IDEOGRAPH
+ {0xD289, 0x898A}, //14057 #CJK UNIFIED IDEOGRAPH
+ {0xD28A, 0x898B}, //14058 #CJK UNIFIED IDEOGRAPH
+ {0xD28B, 0x898C}, //14059 #CJK UNIFIED IDEOGRAPH
+ {0xD28C, 0x898D}, //14060 #CJK UNIFIED IDEOGRAPH
+ {0xD28D, 0x898E}, //14061 #CJK UNIFIED IDEOGRAPH
+ {0xD28E, 0x898F}, //14062 #CJK UNIFIED IDEOGRAPH
+ {0xD28F, 0x8990}, //14063 #CJK UNIFIED IDEOGRAPH
+ {0xD290, 0x8991}, //14064 #CJK UNIFIED IDEOGRAPH
+ {0xD291, 0x8992}, //14065 #CJK UNIFIED IDEOGRAPH
+ {0xD292, 0x8993}, //14066 #CJK UNIFIED IDEOGRAPH
+ {0xD293, 0x8994}, //14067 #CJK UNIFIED IDEOGRAPH
+ {0xD294, 0x8995}, //14068 #CJK UNIFIED IDEOGRAPH
+ {0xD295, 0x8996}, //14069 #CJK UNIFIED IDEOGRAPH
+ {0xD296, 0x8997}, //14070 #CJK UNIFIED IDEOGRAPH
+ {0xD297, 0x8998}, //14071 #CJK UNIFIED IDEOGRAPH
+ {0xD298, 0x8999}, //14072 #CJK UNIFIED IDEOGRAPH
+ {0xD299, 0x899A}, //14073 #CJK UNIFIED IDEOGRAPH
+ {0xD29A, 0x899B}, //14074 #CJK UNIFIED IDEOGRAPH
+ {0xD29B, 0x899C}, //14075 #CJK UNIFIED IDEOGRAPH
+ {0xD29C, 0x899D}, //14076 #CJK UNIFIED IDEOGRAPH
+ {0xD29D, 0x899E}, //14077 #CJK UNIFIED IDEOGRAPH
+ {0xD29E, 0x899F}, //14078 #CJK UNIFIED IDEOGRAPH
+ {0xD29F, 0x89A0}, //14079 #CJK UNIFIED IDEOGRAPH
+ {0xD2A0, 0x89A1}, //14080 #CJK UNIFIED IDEOGRAPH
+ {0xD2A1, 0x6447}, //14081 #CJK UNIFIED IDEOGRAPH
+ {0xD2A2, 0x5C27}, //14082 #CJK UNIFIED IDEOGRAPH
+ {0xD2A3, 0x9065}, //14083 #CJK UNIFIED IDEOGRAPH
+ {0xD2A4, 0x7A91}, //14084 #CJK UNIFIED IDEOGRAPH
+ {0xD2A5, 0x8C23}, //14085 #CJK UNIFIED IDEOGRAPH
+ {0xD2A6, 0x59DA}, //14086 #CJK UNIFIED IDEOGRAPH
+ {0xD2A7, 0x54AC}, //14087 #CJK UNIFIED IDEOGRAPH
+ {0xD2A8, 0x8200}, //14088 #CJK UNIFIED IDEOGRAPH
+ {0xD2A9, 0x836F}, //14089 #CJK UNIFIED IDEOGRAPH
+ {0xD2AA, 0x8981}, //14090 #CJK UNIFIED IDEOGRAPH
+ {0xD2AB, 0x8000}, //14091 #CJK UNIFIED IDEOGRAPH
+ {0xD2AC, 0x6930}, //14092 #CJK UNIFIED IDEOGRAPH
+ {0xD2AD, 0x564E}, //14093 #CJK UNIFIED IDEOGRAPH
+ {0xD2AE, 0x8036}, //14094 #CJK UNIFIED IDEOGRAPH
+ {0xD2AF, 0x7237}, //14095 #CJK UNIFIED IDEOGRAPH
+ {0xD2B0, 0x91CE}, //14096 #CJK UNIFIED IDEOGRAPH
+ {0xD2B1, 0x51B6}, //14097 #CJK UNIFIED IDEOGRAPH
+ {0xD2B2, 0x4E5F}, //14098 #CJK UNIFIED IDEOGRAPH
+ {0xD2B3, 0x9875}, //14099 #CJK UNIFIED IDEOGRAPH
+ {0xD2B4, 0x6396}, //14100 #CJK UNIFIED IDEOGRAPH
+ {0xD2B5, 0x4E1A}, //14101 #CJK UNIFIED IDEOGRAPH
+ {0xD2B6, 0x53F6}, //14102 #CJK UNIFIED IDEOGRAPH
+ {0xD2B7, 0x66F3}, //14103 #CJK UNIFIED IDEOGRAPH
+ {0xD2B8, 0x814B}, //14104 #CJK UNIFIED IDEOGRAPH
+ {0xD2B9, 0x591C}, //14105 #CJK UNIFIED IDEOGRAPH
+ {0xD2BA, 0x6DB2}, //14106 #CJK UNIFIED IDEOGRAPH
+ {0xD2BB, 0x4E00}, //14107 #CJK UNIFIED IDEOGRAPH
+ {0xD2BC, 0x58F9}, //14108 #CJK UNIFIED IDEOGRAPH
+ {0xD2BD, 0x533B}, //14109 #CJK UNIFIED IDEOGRAPH
+ {0xD2BE, 0x63D6}, //14110 #CJK UNIFIED IDEOGRAPH
+ {0xD2BF, 0x94F1}, //14111 #CJK UNIFIED IDEOGRAPH
+ {0xD2C0, 0x4F9D}, //14112 #CJK UNIFIED IDEOGRAPH
+ {0xD2C1, 0x4F0A}, //14113 #CJK UNIFIED IDEOGRAPH
+ {0xD2C2, 0x8863}, //14114 #CJK UNIFIED IDEOGRAPH
+ {0xD2C3, 0x9890}, //14115 #CJK UNIFIED IDEOGRAPH
+ {0xD2C4, 0x5937}, //14116 #CJK UNIFIED IDEOGRAPH
+ {0xD2C5, 0x9057}, //14117 #CJK UNIFIED IDEOGRAPH
+ {0xD2C6, 0x79FB}, //14118 #CJK UNIFIED IDEOGRAPH
+ {0xD2C7, 0x4EEA}, //14119 #CJK UNIFIED IDEOGRAPH
+ {0xD2C8, 0x80F0}, //14120 #CJK UNIFIED IDEOGRAPH
+ {0xD2C9, 0x7591}, //14121 #CJK UNIFIED IDEOGRAPH
+ {0xD2CA, 0x6C82}, //14122 #CJK UNIFIED IDEOGRAPH
+ {0xD2CB, 0x5B9C}, //14123 #CJK UNIFIED IDEOGRAPH
+ {0xD2CC, 0x59E8}, //14124 #CJK UNIFIED IDEOGRAPH
+ {0xD2CD, 0x5F5D}, //14125 #CJK UNIFIED IDEOGRAPH
+ {0xD2CE, 0x6905}, //14126 #CJK UNIFIED IDEOGRAPH
+ {0xD2CF, 0x8681}, //14127 #CJK UNIFIED IDEOGRAPH
+ {0xD2D0, 0x501A}, //14128 #CJK UNIFIED IDEOGRAPH
+ {0xD2D1, 0x5DF2}, //14129 #CJK UNIFIED IDEOGRAPH
+ {0xD2D2, 0x4E59}, //14130 #CJK UNIFIED IDEOGRAPH
+ {0xD2D3, 0x77E3}, //14131 #CJK UNIFIED IDEOGRAPH
+ {0xD2D4, 0x4EE5}, //14132 #CJK UNIFIED IDEOGRAPH
+ {0xD2D5, 0x827A}, //14133 #CJK UNIFIED IDEOGRAPH
+ {0xD2D6, 0x6291}, //14134 #CJK UNIFIED IDEOGRAPH
+ {0xD2D7, 0x6613}, //14135 #CJK UNIFIED IDEOGRAPH
+ {0xD2D8, 0x9091}, //14136 #CJK UNIFIED IDEOGRAPH
+ {0xD2D9, 0x5C79}, //14137 #CJK UNIFIED IDEOGRAPH
+ {0xD2DA, 0x4EBF}, //14138 #CJK UNIFIED IDEOGRAPH
+ {0xD2DB, 0x5F79}, //14139 #CJK UNIFIED IDEOGRAPH
+ {0xD2DC, 0x81C6}, //14140 #CJK UNIFIED IDEOGRAPH
+ {0xD2DD, 0x9038}, //14141 #CJK UNIFIED IDEOGRAPH
+ {0xD2DE, 0x8084}, //14142 #CJK UNIFIED IDEOGRAPH
+ {0xD2DF, 0x75AB}, //14143 #CJK UNIFIED IDEOGRAPH
+ {0xD2E0, 0x4EA6}, //14144 #CJK UNIFIED IDEOGRAPH
+ {0xD2E1, 0x88D4}, //14145 #CJK UNIFIED IDEOGRAPH
+ {0xD2E2, 0x610F}, //14146 #CJK UNIFIED IDEOGRAPH
+ {0xD2E3, 0x6BC5}, //14147 #CJK UNIFIED IDEOGRAPH
+ {0xD2E4, 0x5FC6}, //14148 #CJK UNIFIED IDEOGRAPH
+ {0xD2E5, 0x4E49}, //14149 #CJK UNIFIED IDEOGRAPH
+ {0xD2E6, 0x76CA}, //14150 #CJK UNIFIED IDEOGRAPH
+ {0xD2E7, 0x6EA2}, //14151 #CJK UNIFIED IDEOGRAPH
+ {0xD2E8, 0x8BE3}, //14152 #CJK UNIFIED IDEOGRAPH
+ {0xD2E9, 0x8BAE}, //14153 #CJK UNIFIED IDEOGRAPH
+ {0xD2EA, 0x8C0A}, //14154 #CJK UNIFIED IDEOGRAPH
+ {0xD2EB, 0x8BD1}, //14155 #CJK UNIFIED IDEOGRAPH
+ {0xD2EC, 0x5F02}, //14156 #CJK UNIFIED IDEOGRAPH
+ {0xD2ED, 0x7FFC}, //14157 #CJK UNIFIED IDEOGRAPH
+ {0xD2EE, 0x7FCC}, //14158 #CJK UNIFIED IDEOGRAPH
+ {0xD2EF, 0x7ECE}, //14159 #CJK UNIFIED IDEOGRAPH
+ {0xD2F0, 0x8335}, //14160 #CJK UNIFIED IDEOGRAPH
+ {0xD2F1, 0x836B}, //14161 #CJK UNIFIED IDEOGRAPH
+ {0xD2F2, 0x56E0}, //14162 #CJK UNIFIED IDEOGRAPH
+ {0xD2F3, 0x6BB7}, //14163 #CJK UNIFIED IDEOGRAPH
+ {0xD2F4, 0x97F3}, //14164 #CJK UNIFIED IDEOGRAPH
+ {0xD2F5, 0x9634}, //14165 #CJK UNIFIED IDEOGRAPH
+ {0xD2F6, 0x59FB}, //14166 #CJK UNIFIED IDEOGRAPH
+ {0xD2F7, 0x541F}, //14167 #CJK UNIFIED IDEOGRAPH
+ {0xD2F8, 0x94F6}, //14168 #CJK UNIFIED IDEOGRAPH
+ {0xD2F9, 0x6DEB}, //14169 #CJK UNIFIED IDEOGRAPH
+ {0xD2FA, 0x5BC5}, //14170 #CJK UNIFIED IDEOGRAPH
+ {0xD2FB, 0x996E}, //14171 #CJK UNIFIED IDEOGRAPH
+ {0xD2FC, 0x5C39}, //14172 #CJK UNIFIED IDEOGRAPH
+ {0xD2FD, 0x5F15}, //14173 #CJK UNIFIED IDEOGRAPH
+ {0xD2FE, 0x9690}, //14174 #CJK UNIFIED IDEOGRAPH
+ {0xD340, 0x89A2}, //14175 #CJK UNIFIED IDEOGRAPH
+ {0xD341, 0x89A3}, //14176 #CJK UNIFIED IDEOGRAPH
+ {0xD342, 0x89A4}, //14177 #CJK UNIFIED IDEOGRAPH
+ {0xD343, 0x89A5}, //14178 #CJK UNIFIED IDEOGRAPH
+ {0xD344, 0x89A6}, //14179 #CJK UNIFIED IDEOGRAPH
+ {0xD345, 0x89A7}, //14180 #CJK UNIFIED IDEOGRAPH
+ {0xD346, 0x89A8}, //14181 #CJK UNIFIED IDEOGRAPH
+ {0xD347, 0x89A9}, //14182 #CJK UNIFIED IDEOGRAPH
+ {0xD348, 0x89AA}, //14183 #CJK UNIFIED IDEOGRAPH
+ {0xD349, 0x89AB}, //14184 #CJK UNIFIED IDEOGRAPH
+ {0xD34A, 0x89AC}, //14185 #CJK UNIFIED IDEOGRAPH
+ {0xD34B, 0x89AD}, //14186 #CJK UNIFIED IDEOGRAPH
+ {0xD34C, 0x89AE}, //14187 #CJK UNIFIED IDEOGRAPH
+ {0xD34D, 0x89AF}, //14188 #CJK UNIFIED IDEOGRAPH
+ {0xD34E, 0x89B0}, //14189 #CJK UNIFIED IDEOGRAPH
+ {0xD34F, 0x89B1}, //14190 #CJK UNIFIED IDEOGRAPH
+ {0xD350, 0x89B2}, //14191 #CJK UNIFIED IDEOGRAPH
+ {0xD351, 0x89B3}, //14192 #CJK UNIFIED IDEOGRAPH
+ {0xD352, 0x89B4}, //14193 #CJK UNIFIED IDEOGRAPH
+ {0xD353, 0x89B5}, //14194 #CJK UNIFIED IDEOGRAPH
+ {0xD354, 0x89B6}, //14195 #CJK UNIFIED IDEOGRAPH
+ {0xD355, 0x89B7}, //14196 #CJK UNIFIED IDEOGRAPH
+ {0xD356, 0x89B8}, //14197 #CJK UNIFIED IDEOGRAPH
+ {0xD357, 0x89B9}, //14198 #CJK UNIFIED IDEOGRAPH
+ {0xD358, 0x89BA}, //14199 #CJK UNIFIED IDEOGRAPH
+ {0xD359, 0x89BB}, //14200 #CJK UNIFIED IDEOGRAPH
+ {0xD35A, 0x89BC}, //14201 #CJK UNIFIED IDEOGRAPH
+ {0xD35B, 0x89BD}, //14202 #CJK UNIFIED IDEOGRAPH
+ {0xD35C, 0x89BE}, //14203 #CJK UNIFIED IDEOGRAPH
+ {0xD35D, 0x89BF}, //14204 #CJK UNIFIED IDEOGRAPH
+ {0xD35E, 0x89C0}, //14205 #CJK UNIFIED IDEOGRAPH
+ {0xD35F, 0x89C3}, //14206 #CJK UNIFIED IDEOGRAPH
+ {0xD360, 0x89CD}, //14207 #CJK UNIFIED IDEOGRAPH
+ {0xD361, 0x89D3}, //14208 #CJK UNIFIED IDEOGRAPH
+ {0xD362, 0x89D4}, //14209 #CJK UNIFIED IDEOGRAPH
+ {0xD363, 0x89D5}, //14210 #CJK UNIFIED IDEOGRAPH
+ {0xD364, 0x89D7}, //14211 #CJK UNIFIED IDEOGRAPH
+ {0xD365, 0x89D8}, //14212 #CJK UNIFIED IDEOGRAPH
+ {0xD366, 0x89D9}, //14213 #CJK UNIFIED IDEOGRAPH
+ {0xD367, 0x89DB}, //14214 #CJK UNIFIED IDEOGRAPH
+ {0xD368, 0x89DD}, //14215 #CJK UNIFIED IDEOGRAPH
+ {0xD369, 0x89DF}, //14216 #CJK UNIFIED IDEOGRAPH
+ {0xD36A, 0x89E0}, //14217 #CJK UNIFIED IDEOGRAPH
+ {0xD36B, 0x89E1}, //14218 #CJK UNIFIED IDEOGRAPH
+ {0xD36C, 0x89E2}, //14219 #CJK UNIFIED IDEOGRAPH
+ {0xD36D, 0x89E4}, //14220 #CJK UNIFIED IDEOGRAPH
+ {0xD36E, 0x89E7}, //14221 #CJK UNIFIED IDEOGRAPH
+ {0xD36F, 0x89E8}, //14222 #CJK UNIFIED IDEOGRAPH
+ {0xD370, 0x89E9}, //14223 #CJK UNIFIED IDEOGRAPH
+ {0xD371, 0x89EA}, //14224 #CJK UNIFIED IDEOGRAPH
+ {0xD372, 0x89EC}, //14225 #CJK UNIFIED IDEOGRAPH
+ {0xD373, 0x89ED}, //14226 #CJK UNIFIED IDEOGRAPH
+ {0xD374, 0x89EE}, //14227 #CJK UNIFIED IDEOGRAPH
+ {0xD375, 0x89F0}, //14228 #CJK UNIFIED IDEOGRAPH
+ {0xD376, 0x89F1}, //14229 #CJK UNIFIED IDEOGRAPH
+ {0xD377, 0x89F2}, //14230 #CJK UNIFIED IDEOGRAPH
+ {0xD378, 0x89F4}, //14231 #CJK UNIFIED IDEOGRAPH
+ {0xD379, 0x89F5}, //14232 #CJK UNIFIED IDEOGRAPH
+ {0xD37A, 0x89F6}, //14233 #CJK UNIFIED IDEOGRAPH
+ {0xD37B, 0x89F7}, //14234 #CJK UNIFIED IDEOGRAPH
+ {0xD37C, 0x89F8}, //14235 #CJK UNIFIED IDEOGRAPH
+ {0xD37D, 0x89F9}, //14236 #CJK UNIFIED IDEOGRAPH
+ {0xD37E, 0x89FA}, //14237 #CJK UNIFIED IDEOGRAPH
+ {0xD380, 0x89FB}, //14238 #CJK UNIFIED IDEOGRAPH
+ {0xD381, 0x89FC}, //14239 #CJK UNIFIED IDEOGRAPH
+ {0xD382, 0x89FD}, //14240 #CJK UNIFIED IDEOGRAPH
+ {0xD383, 0x89FE}, //14241 #CJK UNIFIED IDEOGRAPH
+ {0xD384, 0x89FF}, //14242 #CJK UNIFIED IDEOGRAPH
+ {0xD385, 0x8A01}, //14243 #CJK UNIFIED IDEOGRAPH
+ {0xD386, 0x8A02}, //14244 #CJK UNIFIED IDEOGRAPH
+ {0xD387, 0x8A03}, //14245 #CJK UNIFIED IDEOGRAPH
+ {0xD388, 0x8A04}, //14246 #CJK UNIFIED IDEOGRAPH
+ {0xD389, 0x8A05}, //14247 #CJK UNIFIED IDEOGRAPH
+ {0xD38A, 0x8A06}, //14248 #CJK UNIFIED IDEOGRAPH
+ {0xD38B, 0x8A08}, //14249 #CJK UNIFIED IDEOGRAPH
+ {0xD38C, 0x8A09}, //14250 #CJK UNIFIED IDEOGRAPH
+ {0xD38D, 0x8A0A}, //14251 #CJK UNIFIED IDEOGRAPH
+ {0xD38E, 0x8A0B}, //14252 #CJK UNIFIED IDEOGRAPH
+ {0xD38F, 0x8A0C}, //14253 #CJK UNIFIED IDEOGRAPH
+ {0xD390, 0x8A0D}, //14254 #CJK UNIFIED IDEOGRAPH
+ {0xD391, 0x8A0E}, //14255 #CJK UNIFIED IDEOGRAPH
+ {0xD392, 0x8A0F}, //14256 #CJK UNIFIED IDEOGRAPH
+ {0xD393, 0x8A10}, //14257 #CJK UNIFIED IDEOGRAPH
+ {0xD394, 0x8A11}, //14258 #CJK UNIFIED IDEOGRAPH
+ {0xD395, 0x8A12}, //14259 #CJK UNIFIED IDEOGRAPH
+ {0xD396, 0x8A13}, //14260 #CJK UNIFIED IDEOGRAPH
+ {0xD397, 0x8A14}, //14261 #CJK UNIFIED IDEOGRAPH
+ {0xD398, 0x8A15}, //14262 #CJK UNIFIED IDEOGRAPH
+ {0xD399, 0x8A16}, //14263 #CJK UNIFIED IDEOGRAPH
+ {0xD39A, 0x8A17}, //14264 #CJK UNIFIED IDEOGRAPH
+ {0xD39B, 0x8A18}, //14265 #CJK UNIFIED IDEOGRAPH
+ {0xD39C, 0x8A19}, //14266 #CJK UNIFIED IDEOGRAPH
+ {0xD39D, 0x8A1A}, //14267 #CJK UNIFIED IDEOGRAPH
+ {0xD39E, 0x8A1B}, //14268 #CJK UNIFIED IDEOGRAPH
+ {0xD39F, 0x8A1C}, //14269 #CJK UNIFIED IDEOGRAPH
+ {0xD3A0, 0x8A1D}, //14270 #CJK UNIFIED IDEOGRAPH
+ {0xD3A1, 0x5370}, //14271 #CJK UNIFIED IDEOGRAPH
+ {0xD3A2, 0x82F1}, //14272 #CJK UNIFIED IDEOGRAPH
+ {0xD3A3, 0x6A31}, //14273 #CJK UNIFIED IDEOGRAPH
+ {0xD3A4, 0x5A74}, //14274 #CJK UNIFIED IDEOGRAPH
+ {0xD3A5, 0x9E70}, //14275 #CJK UNIFIED IDEOGRAPH
+ {0xD3A6, 0x5E94}, //14276 #CJK UNIFIED IDEOGRAPH
+ {0xD3A7, 0x7F28}, //14277 #CJK UNIFIED IDEOGRAPH
+ {0xD3A8, 0x83B9}, //14278 #CJK UNIFIED IDEOGRAPH
+ {0xD3A9, 0x8424}, //14279 #CJK UNIFIED IDEOGRAPH
+ {0xD3AA, 0x8425}, //14280 #CJK UNIFIED IDEOGRAPH
+ {0xD3AB, 0x8367}, //14281 #CJK UNIFIED IDEOGRAPH
+ {0xD3AC, 0x8747}, //14282 #CJK UNIFIED IDEOGRAPH
+ {0xD3AD, 0x8FCE}, //14283 #CJK UNIFIED IDEOGRAPH
+ {0xD3AE, 0x8D62}, //14284 #CJK UNIFIED IDEOGRAPH
+ {0xD3AF, 0x76C8}, //14285 #CJK UNIFIED IDEOGRAPH
+ {0xD3B0, 0x5F71}, //14286 #CJK UNIFIED IDEOGRAPH
+ {0xD3B1, 0x9896}, //14287 #CJK UNIFIED IDEOGRAPH
+ {0xD3B2, 0x786C}, //14288 #CJK UNIFIED IDEOGRAPH
+ {0xD3B3, 0x6620}, //14289 #CJK UNIFIED IDEOGRAPH
+ {0xD3B4, 0x54DF}, //14290 #CJK UNIFIED IDEOGRAPH
+ {0xD3B5, 0x62E5}, //14291 #CJK UNIFIED IDEOGRAPH
+ {0xD3B6, 0x4F63}, //14292 #CJK UNIFIED IDEOGRAPH
+ {0xD3B7, 0x81C3}, //14293 #CJK UNIFIED IDEOGRAPH
+ {0xD3B8, 0x75C8}, //14294 #CJK UNIFIED IDEOGRAPH
+ {0xD3B9, 0x5EB8}, //14295 #CJK UNIFIED IDEOGRAPH
+ {0xD3BA, 0x96CD}, //14296 #CJK UNIFIED IDEOGRAPH
+ {0xD3BB, 0x8E0A}, //14297 #CJK UNIFIED IDEOGRAPH
+ {0xD3BC, 0x86F9}, //14298 #CJK UNIFIED IDEOGRAPH
+ {0xD3BD, 0x548F}, //14299 #CJK UNIFIED IDEOGRAPH
+ {0xD3BE, 0x6CF3}, //14300 #CJK UNIFIED IDEOGRAPH
+ {0xD3BF, 0x6D8C}, //14301 #CJK UNIFIED IDEOGRAPH
+ {0xD3C0, 0x6C38}, //14302 #CJK UNIFIED IDEOGRAPH
+ {0xD3C1, 0x607F}, //14303 #CJK UNIFIED IDEOGRAPH
+ {0xD3C2, 0x52C7}, //14304 #CJK UNIFIED IDEOGRAPH
+ {0xD3C3, 0x7528}, //14305 #CJK UNIFIED IDEOGRAPH
+ {0xD3C4, 0x5E7D}, //14306 #CJK UNIFIED IDEOGRAPH
+ {0xD3C5, 0x4F18}, //14307 #CJK UNIFIED IDEOGRAPH
+ {0xD3C6, 0x60A0}, //14308 #CJK UNIFIED IDEOGRAPH
+ {0xD3C7, 0x5FE7}, //14309 #CJK UNIFIED IDEOGRAPH
+ {0xD3C8, 0x5C24}, //14310 #CJK UNIFIED IDEOGRAPH
+ {0xD3C9, 0x7531}, //14311 #CJK UNIFIED IDEOGRAPH
+ {0xD3CA, 0x90AE}, //14312 #CJK UNIFIED IDEOGRAPH
+ {0xD3CB, 0x94C0}, //14313 #CJK UNIFIED IDEOGRAPH
+ {0xD3CC, 0x72B9}, //14314 #CJK UNIFIED IDEOGRAPH
+ {0xD3CD, 0x6CB9}, //14315 #CJK UNIFIED IDEOGRAPH
+ {0xD3CE, 0x6E38}, //14316 #CJK UNIFIED IDEOGRAPH
+ {0xD3CF, 0x9149}, //14317 #CJK UNIFIED IDEOGRAPH
+ {0xD3D0, 0x6709}, //14318 #CJK UNIFIED IDEOGRAPH
+ {0xD3D1, 0x53CB}, //14319 #CJK UNIFIED IDEOGRAPH
+ {0xD3D2, 0x53F3}, //14320 #CJK UNIFIED IDEOGRAPH
+ {0xD3D3, 0x4F51}, //14321 #CJK UNIFIED IDEOGRAPH
+ {0xD3D4, 0x91C9}, //14322 #CJK UNIFIED IDEOGRAPH
+ {0xD3D5, 0x8BF1}, //14323 #CJK UNIFIED IDEOGRAPH
+ {0xD3D6, 0x53C8}, //14324 #CJK UNIFIED IDEOGRAPH
+ {0xD3D7, 0x5E7C}, //14325 #CJK UNIFIED IDEOGRAPH
+ {0xD3D8, 0x8FC2}, //14326 #CJK UNIFIED IDEOGRAPH
+ {0xD3D9, 0x6DE4}, //14327 #CJK UNIFIED IDEOGRAPH
+ {0xD3DA, 0x4E8E}, //14328 #CJK UNIFIED IDEOGRAPH
+ {0xD3DB, 0x76C2}, //14329 #CJK UNIFIED IDEOGRAPH
+ {0xD3DC, 0x6986}, //14330 #CJK UNIFIED IDEOGRAPH
+ {0xD3DD, 0x865E}, //14331 #CJK UNIFIED IDEOGRAPH
+ {0xD3DE, 0x611A}, //14332 #CJK UNIFIED IDEOGRAPH
+ {0xD3DF, 0x8206}, //14333 #CJK UNIFIED IDEOGRAPH
+ {0xD3E0, 0x4F59}, //14334 #CJK UNIFIED IDEOGRAPH
+ {0xD3E1, 0x4FDE}, //14335 #CJK UNIFIED IDEOGRAPH
+ {0xD3E2, 0x903E}, //14336 #CJK UNIFIED IDEOGRAPH
+ {0xD3E3, 0x9C7C}, //14337 #CJK UNIFIED IDEOGRAPH
+ {0xD3E4, 0x6109}, //14338 #CJK UNIFIED IDEOGRAPH
+ {0xD3E5, 0x6E1D}, //14339 #CJK UNIFIED IDEOGRAPH
+ {0xD3E6, 0x6E14}, //14340 #CJK UNIFIED IDEOGRAPH
+ {0xD3E7, 0x9685}, //14341 #CJK UNIFIED IDEOGRAPH
+ {0xD3E8, 0x4E88}, //14342 #CJK UNIFIED IDEOGRAPH
+ {0xD3E9, 0x5A31}, //14343 #CJK UNIFIED IDEOGRAPH
+ {0xD3EA, 0x96E8}, //14344 #CJK UNIFIED IDEOGRAPH
+ {0xD3EB, 0x4E0E}, //14345 #CJK UNIFIED IDEOGRAPH
+ {0xD3EC, 0x5C7F}, //14346 #CJK UNIFIED IDEOGRAPH
+ {0xD3ED, 0x79B9}, //14347 #CJK UNIFIED IDEOGRAPH
+ {0xD3EE, 0x5B87}, //14348 #CJK UNIFIED IDEOGRAPH
+ {0xD3EF, 0x8BED}, //14349 #CJK UNIFIED IDEOGRAPH
+ {0xD3F0, 0x7FBD}, //14350 #CJK UNIFIED IDEOGRAPH
+ {0xD3F1, 0x7389}, //14351 #CJK UNIFIED IDEOGRAPH
+ {0xD3F2, 0x57DF}, //14352 #CJK UNIFIED IDEOGRAPH
+ {0xD3F3, 0x828B}, //14353 #CJK UNIFIED IDEOGRAPH
+ {0xD3F4, 0x90C1}, //14354 #CJK UNIFIED IDEOGRAPH
+ {0xD3F5, 0x5401}, //14355 #CJK UNIFIED IDEOGRAPH
+ {0xD3F6, 0x9047}, //14356 #CJK UNIFIED IDEOGRAPH
+ {0xD3F7, 0x55BB}, //14357 #CJK UNIFIED IDEOGRAPH
+ {0xD3F8, 0x5CEA}, //14358 #CJK UNIFIED IDEOGRAPH
+ {0xD3F9, 0x5FA1}, //14359 #CJK UNIFIED IDEOGRAPH
+ {0xD3FA, 0x6108}, //14360 #CJK UNIFIED IDEOGRAPH
+ {0xD3FB, 0x6B32}, //14361 #CJK UNIFIED IDEOGRAPH
+ {0xD3FC, 0x72F1}, //14362 #CJK UNIFIED IDEOGRAPH
+ {0xD3FD, 0x80B2}, //14363 #CJK UNIFIED IDEOGRAPH
+ {0xD3FE, 0x8A89}, //14364 #CJK UNIFIED IDEOGRAPH
+ {0xD440, 0x8A1E}, //14365 #CJK UNIFIED IDEOGRAPH
+ {0xD441, 0x8A1F}, //14366 #CJK UNIFIED IDEOGRAPH
+ {0xD442, 0x8A20}, //14367 #CJK UNIFIED IDEOGRAPH
+ {0xD443, 0x8A21}, //14368 #CJK UNIFIED IDEOGRAPH
+ {0xD444, 0x8A22}, //14369 #CJK UNIFIED IDEOGRAPH
+ {0xD445, 0x8A23}, //14370 #CJK UNIFIED IDEOGRAPH
+ {0xD446, 0x8A24}, //14371 #CJK UNIFIED IDEOGRAPH
+ {0xD447, 0x8A25}, //14372 #CJK UNIFIED IDEOGRAPH
+ {0xD448, 0x8A26}, //14373 #CJK UNIFIED IDEOGRAPH
+ {0xD449, 0x8A27}, //14374 #CJK UNIFIED IDEOGRAPH
+ {0xD44A, 0x8A28}, //14375 #CJK UNIFIED IDEOGRAPH
+ {0xD44B, 0x8A29}, //14376 #CJK UNIFIED IDEOGRAPH
+ {0xD44C, 0x8A2A}, //14377 #CJK UNIFIED IDEOGRAPH
+ {0xD44D, 0x8A2B}, //14378 #CJK UNIFIED IDEOGRAPH
+ {0xD44E, 0x8A2C}, //14379 #CJK UNIFIED IDEOGRAPH
+ {0xD44F, 0x8A2D}, //14380 #CJK UNIFIED IDEOGRAPH
+ {0xD450, 0x8A2E}, //14381 #CJK UNIFIED IDEOGRAPH
+ {0xD451, 0x8A2F}, //14382 #CJK UNIFIED IDEOGRAPH
+ {0xD452, 0x8A30}, //14383 #CJK UNIFIED IDEOGRAPH
+ {0xD453, 0x8A31}, //14384 #CJK UNIFIED IDEOGRAPH
+ {0xD454, 0x8A32}, //14385 #CJK UNIFIED IDEOGRAPH
+ {0xD455, 0x8A33}, //14386 #CJK UNIFIED IDEOGRAPH
+ {0xD456, 0x8A34}, //14387 #CJK UNIFIED IDEOGRAPH
+ {0xD457, 0x8A35}, //14388 #CJK UNIFIED IDEOGRAPH
+ {0xD458, 0x8A36}, //14389 #CJK UNIFIED IDEOGRAPH
+ {0xD459, 0x8A37}, //14390 #CJK UNIFIED IDEOGRAPH
+ {0xD45A, 0x8A38}, //14391 #CJK UNIFIED IDEOGRAPH
+ {0xD45B, 0x8A39}, //14392 #CJK UNIFIED IDEOGRAPH
+ {0xD45C, 0x8A3A}, //14393 #CJK UNIFIED IDEOGRAPH
+ {0xD45D, 0x8A3B}, //14394 #CJK UNIFIED IDEOGRAPH
+ {0xD45E, 0x8A3C}, //14395 #CJK UNIFIED IDEOGRAPH
+ {0xD45F, 0x8A3D}, //14396 #CJK UNIFIED IDEOGRAPH
+ {0xD460, 0x8A3F}, //14397 #CJK UNIFIED IDEOGRAPH
+ {0xD461, 0x8A40}, //14398 #CJK UNIFIED IDEOGRAPH
+ {0xD462, 0x8A41}, //14399 #CJK UNIFIED IDEOGRAPH
+ {0xD463, 0x8A42}, //14400 #CJK UNIFIED IDEOGRAPH
+ {0xD464, 0x8A43}, //14401 #CJK UNIFIED IDEOGRAPH
+ {0xD465, 0x8A44}, //14402 #CJK UNIFIED IDEOGRAPH
+ {0xD466, 0x8A45}, //14403 #CJK UNIFIED IDEOGRAPH
+ {0xD467, 0x8A46}, //14404 #CJK UNIFIED IDEOGRAPH
+ {0xD468, 0x8A47}, //14405 #CJK UNIFIED IDEOGRAPH
+ {0xD469, 0x8A49}, //14406 #CJK UNIFIED IDEOGRAPH
+ {0xD46A, 0x8A4A}, //14407 #CJK UNIFIED IDEOGRAPH
+ {0xD46B, 0x8A4B}, //14408 #CJK UNIFIED IDEOGRAPH
+ {0xD46C, 0x8A4C}, //14409 #CJK UNIFIED IDEOGRAPH
+ {0xD46D, 0x8A4D}, //14410 #CJK UNIFIED IDEOGRAPH
+ {0xD46E, 0x8A4E}, //14411 #CJK UNIFIED IDEOGRAPH
+ {0xD46F, 0x8A4F}, //14412 #CJK UNIFIED IDEOGRAPH
+ {0xD470, 0x8A50}, //14413 #CJK UNIFIED IDEOGRAPH
+ {0xD471, 0x8A51}, //14414 #CJK UNIFIED IDEOGRAPH
+ {0xD472, 0x8A52}, //14415 #CJK UNIFIED IDEOGRAPH
+ {0xD473, 0x8A53}, //14416 #CJK UNIFIED IDEOGRAPH
+ {0xD474, 0x8A54}, //14417 #CJK UNIFIED IDEOGRAPH
+ {0xD475, 0x8A55}, //14418 #CJK UNIFIED IDEOGRAPH
+ {0xD476, 0x8A56}, //14419 #CJK UNIFIED IDEOGRAPH
+ {0xD477, 0x8A57}, //14420 #CJK UNIFIED IDEOGRAPH
+ {0xD478, 0x8A58}, //14421 #CJK UNIFIED IDEOGRAPH
+ {0xD479, 0x8A59}, //14422 #CJK UNIFIED IDEOGRAPH
+ {0xD47A, 0x8A5A}, //14423 #CJK UNIFIED IDEOGRAPH
+ {0xD47B, 0x8A5B}, //14424 #CJK UNIFIED IDEOGRAPH
+ {0xD47C, 0x8A5C}, //14425 #CJK UNIFIED IDEOGRAPH
+ {0xD47D, 0x8A5D}, //14426 #CJK UNIFIED IDEOGRAPH
+ {0xD47E, 0x8A5E}, //14427 #CJK UNIFIED IDEOGRAPH
+ {0xD480, 0x8A5F}, //14428 #CJK UNIFIED IDEOGRAPH
+ {0xD481, 0x8A60}, //14429 #CJK UNIFIED IDEOGRAPH
+ {0xD482, 0x8A61}, //14430 #CJK UNIFIED IDEOGRAPH
+ {0xD483, 0x8A62}, //14431 #CJK UNIFIED IDEOGRAPH
+ {0xD484, 0x8A63}, //14432 #CJK UNIFIED IDEOGRAPH
+ {0xD485, 0x8A64}, //14433 #CJK UNIFIED IDEOGRAPH
+ {0xD486, 0x8A65}, //14434 #CJK UNIFIED IDEOGRAPH
+ {0xD487, 0x8A66}, //14435 #CJK UNIFIED IDEOGRAPH
+ {0xD488, 0x8A67}, //14436 #CJK UNIFIED IDEOGRAPH
+ {0xD489, 0x8A68}, //14437 #CJK UNIFIED IDEOGRAPH
+ {0xD48A, 0x8A69}, //14438 #CJK UNIFIED IDEOGRAPH
+ {0xD48B, 0x8A6A}, //14439 #CJK UNIFIED IDEOGRAPH
+ {0xD48C, 0x8A6B}, //14440 #CJK UNIFIED IDEOGRAPH
+ {0xD48D, 0x8A6C}, //14441 #CJK UNIFIED IDEOGRAPH
+ {0xD48E, 0x8A6D}, //14442 #CJK UNIFIED IDEOGRAPH
+ {0xD48F, 0x8A6E}, //14443 #CJK UNIFIED IDEOGRAPH
+ {0xD490, 0x8A6F}, //14444 #CJK UNIFIED IDEOGRAPH
+ {0xD491, 0x8A70}, //14445 #CJK UNIFIED IDEOGRAPH
+ {0xD492, 0x8A71}, //14446 #CJK UNIFIED IDEOGRAPH
+ {0xD493, 0x8A72}, //14447 #CJK UNIFIED IDEOGRAPH
+ {0xD494, 0x8A73}, //14448 #CJK UNIFIED IDEOGRAPH
+ {0xD495, 0x8A74}, //14449 #CJK UNIFIED IDEOGRAPH
+ {0xD496, 0x8A75}, //14450 #CJK UNIFIED IDEOGRAPH
+ {0xD497, 0x8A76}, //14451 #CJK UNIFIED IDEOGRAPH
+ {0xD498, 0x8A77}, //14452 #CJK UNIFIED IDEOGRAPH
+ {0xD499, 0x8A78}, //14453 #CJK UNIFIED IDEOGRAPH
+ {0xD49A, 0x8A7A}, //14454 #CJK UNIFIED IDEOGRAPH
+ {0xD49B, 0x8A7B}, //14455 #CJK UNIFIED IDEOGRAPH
+ {0xD49C, 0x8A7C}, //14456 #CJK UNIFIED IDEOGRAPH
+ {0xD49D, 0x8A7D}, //14457 #CJK UNIFIED IDEOGRAPH
+ {0xD49E, 0x8A7E}, //14458 #CJK UNIFIED IDEOGRAPH
+ {0xD49F, 0x8A7F}, //14459 #CJK UNIFIED IDEOGRAPH
+ {0xD4A0, 0x8A80}, //14460 #CJK UNIFIED IDEOGRAPH
+ {0xD4A1, 0x6D74}, //14461 #CJK UNIFIED IDEOGRAPH
+ {0xD4A2, 0x5BD3}, //14462 #CJK UNIFIED IDEOGRAPH
+ {0xD4A3, 0x88D5}, //14463 #CJK UNIFIED IDEOGRAPH
+ {0xD4A4, 0x9884}, //14464 #CJK UNIFIED IDEOGRAPH
+ {0xD4A5, 0x8C6B}, //14465 #CJK UNIFIED IDEOGRAPH
+ {0xD4A6, 0x9A6D}, //14466 #CJK UNIFIED IDEOGRAPH
+ {0xD4A7, 0x9E33}, //14467 #CJK UNIFIED IDEOGRAPH
+ {0xD4A8, 0x6E0A}, //14468 #CJK UNIFIED IDEOGRAPH
+ {0xD4A9, 0x51A4}, //14469 #CJK UNIFIED IDEOGRAPH
+ {0xD4AA, 0x5143}, //14470 #CJK UNIFIED IDEOGRAPH
+ {0xD4AB, 0x57A3}, //14471 #CJK UNIFIED IDEOGRAPH
+ {0xD4AC, 0x8881}, //14472 #CJK UNIFIED IDEOGRAPH
+ {0xD4AD, 0x539F}, //14473 #CJK UNIFIED IDEOGRAPH
+ {0xD4AE, 0x63F4}, //14474 #CJK UNIFIED IDEOGRAPH
+ {0xD4AF, 0x8F95}, //14475 #CJK UNIFIED IDEOGRAPH
+ {0xD4B0, 0x56ED}, //14476 #CJK UNIFIED IDEOGRAPH
+ {0xD4B1, 0x5458}, //14477 #CJK UNIFIED IDEOGRAPH
+ {0xD4B2, 0x5706}, //14478 #CJK UNIFIED IDEOGRAPH
+ {0xD4B3, 0x733F}, //14479 #CJK UNIFIED IDEOGRAPH
+ {0xD4B4, 0x6E90}, //14480 #CJK UNIFIED IDEOGRAPH
+ {0xD4B5, 0x7F18}, //14481 #CJK UNIFIED IDEOGRAPH
+ {0xD4B6, 0x8FDC}, //14482 #CJK UNIFIED IDEOGRAPH
+ {0xD4B7, 0x82D1}, //14483 #CJK UNIFIED IDEOGRAPH
+ {0xD4B8, 0x613F}, //14484 #CJK UNIFIED IDEOGRAPH
+ {0xD4B9, 0x6028}, //14485 #CJK UNIFIED IDEOGRAPH
+ {0xD4BA, 0x9662}, //14486 #CJK UNIFIED IDEOGRAPH
+ {0xD4BB, 0x66F0}, //14487 #CJK UNIFIED IDEOGRAPH
+ {0xD4BC, 0x7EA6}, //14488 #CJK UNIFIED IDEOGRAPH
+ {0xD4BD, 0x8D8A}, //14489 #CJK UNIFIED IDEOGRAPH
+ {0xD4BE, 0x8DC3}, //14490 #CJK UNIFIED IDEOGRAPH
+ {0xD4BF, 0x94A5}, //14491 #CJK UNIFIED IDEOGRAPH
+ {0xD4C0, 0x5CB3}, //14492 #CJK UNIFIED IDEOGRAPH
+ {0xD4C1, 0x7CA4}, //14493 #CJK UNIFIED IDEOGRAPH
+ {0xD4C2, 0x6708}, //14494 #CJK UNIFIED IDEOGRAPH
+ {0xD4C3, 0x60A6}, //14495 #CJK UNIFIED IDEOGRAPH
+ {0xD4C4, 0x9605}, //14496 #CJK UNIFIED IDEOGRAPH
+ {0xD4C5, 0x8018}, //14497 #CJK UNIFIED IDEOGRAPH
+ {0xD4C6, 0x4E91}, //14498 #CJK UNIFIED IDEOGRAPH
+ {0xD4C7, 0x90E7}, //14499 #CJK UNIFIED IDEOGRAPH
+ {0xD4C8, 0x5300}, //14500 #CJK UNIFIED IDEOGRAPH
+ {0xD4C9, 0x9668}, //14501 #CJK UNIFIED IDEOGRAPH
+ {0xD4CA, 0x5141}, //14502 #CJK UNIFIED IDEOGRAPH
+ {0xD4CB, 0x8FD0}, //14503 #CJK UNIFIED IDEOGRAPH
+ {0xD4CC, 0x8574}, //14504 #CJK UNIFIED IDEOGRAPH
+ {0xD4CD, 0x915D}, //14505 #CJK UNIFIED IDEOGRAPH
+ {0xD4CE, 0x6655}, //14506 #CJK UNIFIED IDEOGRAPH
+ {0xD4CF, 0x97F5}, //14507 #CJK UNIFIED IDEOGRAPH
+ {0xD4D0, 0x5B55}, //14508 #CJK UNIFIED IDEOGRAPH
+ {0xD4D1, 0x531D}, //14509 #CJK UNIFIED IDEOGRAPH
+ {0xD4D2, 0x7838}, //14510 #CJK UNIFIED IDEOGRAPH
+ {0xD4D3, 0x6742}, //14511 #CJK UNIFIED IDEOGRAPH
+ {0xD4D4, 0x683D}, //14512 #CJK UNIFIED IDEOGRAPH
+ {0xD4D5, 0x54C9}, //14513 #CJK UNIFIED IDEOGRAPH
+ {0xD4D6, 0x707E}, //14514 #CJK UNIFIED IDEOGRAPH
+ {0xD4D7, 0x5BB0}, //14515 #CJK UNIFIED IDEOGRAPH
+ {0xD4D8, 0x8F7D}, //14516 #CJK UNIFIED IDEOGRAPH
+ {0xD4D9, 0x518D}, //14517 #CJK UNIFIED IDEOGRAPH
+ {0xD4DA, 0x5728}, //14518 #CJK UNIFIED IDEOGRAPH
+ {0xD4DB, 0x54B1}, //14519 #CJK UNIFIED IDEOGRAPH
+ {0xD4DC, 0x6512}, //14520 #CJK UNIFIED IDEOGRAPH
+ {0xD4DD, 0x6682}, //14521 #CJK UNIFIED IDEOGRAPH
+ {0xD4DE, 0x8D5E}, //14522 #CJK UNIFIED IDEOGRAPH
+ {0xD4DF, 0x8D43}, //14523 #CJK UNIFIED IDEOGRAPH
+ {0xD4E0, 0x810F}, //14524 #CJK UNIFIED IDEOGRAPH
+ {0xD4E1, 0x846C}, //14525 #CJK UNIFIED IDEOGRAPH
+ {0xD4E2, 0x906D}, //14526 #CJK UNIFIED IDEOGRAPH
+ {0xD4E3, 0x7CDF}, //14527 #CJK UNIFIED IDEOGRAPH
+ {0xD4E4, 0x51FF}, //14528 #CJK UNIFIED IDEOGRAPH
+ {0xD4E5, 0x85FB}, //14529 #CJK UNIFIED IDEOGRAPH
+ {0xD4E6, 0x67A3}, //14530 #CJK UNIFIED IDEOGRAPH
+ {0xD4E7, 0x65E9}, //14531 #CJK UNIFIED IDEOGRAPH
+ {0xD4E8, 0x6FA1}, //14532 #CJK UNIFIED IDEOGRAPH
+ {0xD4E9, 0x86A4}, //14533 #CJK UNIFIED IDEOGRAPH
+ {0xD4EA, 0x8E81}, //14534 #CJK UNIFIED IDEOGRAPH
+ {0xD4EB, 0x566A}, //14535 #CJK UNIFIED IDEOGRAPH
+ {0xD4EC, 0x9020}, //14536 #CJK UNIFIED IDEOGRAPH
+ {0xD4ED, 0x7682}, //14537 #CJK UNIFIED IDEOGRAPH
+ {0xD4EE, 0x7076}, //14538 #CJK UNIFIED IDEOGRAPH
+ {0xD4EF, 0x71E5}, //14539 #CJK UNIFIED IDEOGRAPH
+ {0xD4F0, 0x8D23}, //14540 #CJK UNIFIED IDEOGRAPH
+ {0xD4F1, 0x62E9}, //14541 #CJK UNIFIED IDEOGRAPH
+ {0xD4F2, 0x5219}, //14542 #CJK UNIFIED IDEOGRAPH
+ {0xD4F3, 0x6CFD}, //14543 #CJK UNIFIED IDEOGRAPH
+ {0xD4F4, 0x8D3C}, //14544 #CJK UNIFIED IDEOGRAPH
+ {0xD4F5, 0x600E}, //14545 #CJK UNIFIED IDEOGRAPH
+ {0xD4F6, 0x589E}, //14546 #CJK UNIFIED IDEOGRAPH
+ {0xD4F7, 0x618E}, //14547 #CJK UNIFIED IDEOGRAPH
+ {0xD4F8, 0x66FE}, //14548 #CJK UNIFIED IDEOGRAPH
+ {0xD4F9, 0x8D60}, //14549 #CJK UNIFIED IDEOGRAPH
+ {0xD4FA, 0x624E}, //14550 #CJK UNIFIED IDEOGRAPH
+ {0xD4FB, 0x55B3}, //14551 #CJK UNIFIED IDEOGRAPH
+ {0xD4FC, 0x6E23}, //14552 #CJK UNIFIED IDEOGRAPH
+ {0xD4FD, 0x672D}, //14553 #CJK UNIFIED IDEOGRAPH
+ {0xD4FE, 0x8F67}, //14554 #CJK UNIFIED IDEOGRAPH
+ {0xD540, 0x8A81}, //14555 #CJK UNIFIED IDEOGRAPH
+ {0xD541, 0x8A82}, //14556 #CJK UNIFIED IDEOGRAPH
+ {0xD542, 0x8A83}, //14557 #CJK UNIFIED IDEOGRAPH
+ {0xD543, 0x8A84}, //14558 #CJK UNIFIED IDEOGRAPH
+ {0xD544, 0x8A85}, //14559 #CJK UNIFIED IDEOGRAPH
+ {0xD545, 0x8A86}, //14560 #CJK UNIFIED IDEOGRAPH
+ {0xD546, 0x8A87}, //14561 #CJK UNIFIED IDEOGRAPH
+ {0xD547, 0x8A88}, //14562 #CJK UNIFIED IDEOGRAPH
+ {0xD548, 0x8A8B}, //14563 #CJK UNIFIED IDEOGRAPH
+ {0xD549, 0x8A8C}, //14564 #CJK UNIFIED IDEOGRAPH
+ {0xD54A, 0x8A8D}, //14565 #CJK UNIFIED IDEOGRAPH
+ {0xD54B, 0x8A8E}, //14566 #CJK UNIFIED IDEOGRAPH
+ {0xD54C, 0x8A8F}, //14567 #CJK UNIFIED IDEOGRAPH
+ {0xD54D, 0x8A90}, //14568 #CJK UNIFIED IDEOGRAPH
+ {0xD54E, 0x8A91}, //14569 #CJK UNIFIED IDEOGRAPH
+ {0xD54F, 0x8A92}, //14570 #CJK UNIFIED IDEOGRAPH
+ {0xD550, 0x8A94}, //14571 #CJK UNIFIED IDEOGRAPH
+ {0xD551, 0x8A95}, //14572 #CJK UNIFIED IDEOGRAPH
+ {0xD552, 0x8A96}, //14573 #CJK UNIFIED IDEOGRAPH
+ {0xD553, 0x8A97}, //14574 #CJK UNIFIED IDEOGRAPH
+ {0xD554, 0x8A98}, //14575 #CJK UNIFIED IDEOGRAPH
+ {0xD555, 0x8A99}, //14576 #CJK UNIFIED IDEOGRAPH
+ {0xD556, 0x8A9A}, //14577 #CJK UNIFIED IDEOGRAPH
+ {0xD557, 0x8A9B}, //14578 #CJK UNIFIED IDEOGRAPH
+ {0xD558, 0x8A9C}, //14579 #CJK UNIFIED IDEOGRAPH
+ {0xD559, 0x8A9D}, //14580 #CJK UNIFIED IDEOGRAPH
+ {0xD55A, 0x8A9E}, //14581 #CJK UNIFIED IDEOGRAPH
+ {0xD55B, 0x8A9F}, //14582 #CJK UNIFIED IDEOGRAPH
+ {0xD55C, 0x8AA0}, //14583 #CJK UNIFIED IDEOGRAPH
+ {0xD55D, 0x8AA1}, //14584 #CJK UNIFIED IDEOGRAPH
+ {0xD55E, 0x8AA2}, //14585 #CJK UNIFIED IDEOGRAPH
+ {0xD55F, 0x8AA3}, //14586 #CJK UNIFIED IDEOGRAPH
+ {0xD560, 0x8AA4}, //14587 #CJK UNIFIED IDEOGRAPH
+ {0xD561, 0x8AA5}, //14588 #CJK UNIFIED IDEOGRAPH
+ {0xD562, 0x8AA6}, //14589 #CJK UNIFIED IDEOGRAPH
+ {0xD563, 0x8AA7}, //14590 #CJK UNIFIED IDEOGRAPH
+ {0xD564, 0x8AA8}, //14591 #CJK UNIFIED IDEOGRAPH
+ {0xD565, 0x8AA9}, //14592 #CJK UNIFIED IDEOGRAPH
+ {0xD566, 0x8AAA}, //14593 #CJK UNIFIED IDEOGRAPH
+ {0xD567, 0x8AAB}, //14594 #CJK UNIFIED IDEOGRAPH
+ {0xD568, 0x8AAC}, //14595 #CJK UNIFIED IDEOGRAPH
+ {0xD569, 0x8AAD}, //14596 #CJK UNIFIED IDEOGRAPH
+ {0xD56A, 0x8AAE}, //14597 #CJK UNIFIED IDEOGRAPH
+ {0xD56B, 0x8AAF}, //14598 #CJK UNIFIED IDEOGRAPH
+ {0xD56C, 0x8AB0}, //14599 #CJK UNIFIED IDEOGRAPH
+ {0xD56D, 0x8AB1}, //14600 #CJK UNIFIED IDEOGRAPH
+ {0xD56E, 0x8AB2}, //14601 #CJK UNIFIED IDEOGRAPH
+ {0xD56F, 0x8AB3}, //14602 #CJK UNIFIED IDEOGRAPH
+ {0xD570, 0x8AB4}, //14603 #CJK UNIFIED IDEOGRAPH
+ {0xD571, 0x8AB5}, //14604 #CJK UNIFIED IDEOGRAPH
+ {0xD572, 0x8AB6}, //14605 #CJK UNIFIED IDEOGRAPH
+ {0xD573, 0x8AB7}, //14606 #CJK UNIFIED IDEOGRAPH
+ {0xD574, 0x8AB8}, //14607 #CJK UNIFIED IDEOGRAPH
+ {0xD575, 0x8AB9}, //14608 #CJK UNIFIED IDEOGRAPH
+ {0xD576, 0x8ABA}, //14609 #CJK UNIFIED IDEOGRAPH
+ {0xD577, 0x8ABB}, //14610 #CJK UNIFIED IDEOGRAPH
+ {0xD578, 0x8ABC}, //14611 #CJK UNIFIED IDEOGRAPH
+ {0xD579, 0x8ABD}, //14612 #CJK UNIFIED IDEOGRAPH
+ {0xD57A, 0x8ABE}, //14613 #CJK UNIFIED IDEOGRAPH
+ {0xD57B, 0x8ABF}, //14614 #CJK UNIFIED IDEOGRAPH
+ {0xD57C, 0x8AC0}, //14615 #CJK UNIFIED IDEOGRAPH
+ {0xD57D, 0x8AC1}, //14616 #CJK UNIFIED IDEOGRAPH
+ {0xD57E, 0x8AC2}, //14617 #CJK UNIFIED IDEOGRAPH
+ {0xD580, 0x8AC3}, //14618 #CJK UNIFIED IDEOGRAPH
+ {0xD581, 0x8AC4}, //14619 #CJK UNIFIED IDEOGRAPH
+ {0xD582, 0x8AC5}, //14620 #CJK UNIFIED IDEOGRAPH
+ {0xD583, 0x8AC6}, //14621 #CJK UNIFIED IDEOGRAPH
+ {0xD584, 0x8AC7}, //14622 #CJK UNIFIED IDEOGRAPH
+ {0xD585, 0x8AC8}, //14623 #CJK UNIFIED IDEOGRAPH
+ {0xD586, 0x8AC9}, //14624 #CJK UNIFIED IDEOGRAPH
+ {0xD587, 0x8ACA}, //14625 #CJK UNIFIED IDEOGRAPH
+ {0xD588, 0x8ACB}, //14626 #CJK UNIFIED IDEOGRAPH
+ {0xD589, 0x8ACC}, //14627 #CJK UNIFIED IDEOGRAPH
+ {0xD58A, 0x8ACD}, //14628 #CJK UNIFIED IDEOGRAPH
+ {0xD58B, 0x8ACE}, //14629 #CJK UNIFIED IDEOGRAPH
+ {0xD58C, 0x8ACF}, //14630 #CJK UNIFIED IDEOGRAPH
+ {0xD58D, 0x8AD0}, //14631 #CJK UNIFIED IDEOGRAPH
+ {0xD58E, 0x8AD1}, //14632 #CJK UNIFIED IDEOGRAPH
+ {0xD58F, 0x8AD2}, //14633 #CJK UNIFIED IDEOGRAPH
+ {0xD590, 0x8AD3}, //14634 #CJK UNIFIED IDEOGRAPH
+ {0xD591, 0x8AD4}, //14635 #CJK UNIFIED IDEOGRAPH
+ {0xD592, 0x8AD5}, //14636 #CJK UNIFIED IDEOGRAPH
+ {0xD593, 0x8AD6}, //14637 #CJK UNIFIED IDEOGRAPH
+ {0xD594, 0x8AD7}, //14638 #CJK UNIFIED IDEOGRAPH
+ {0xD595, 0x8AD8}, //14639 #CJK UNIFIED IDEOGRAPH
+ {0xD596, 0x8AD9}, //14640 #CJK UNIFIED IDEOGRAPH
+ {0xD597, 0x8ADA}, //14641 #CJK UNIFIED IDEOGRAPH
+ {0xD598, 0x8ADB}, //14642 #CJK UNIFIED IDEOGRAPH
+ {0xD599, 0x8ADC}, //14643 #CJK UNIFIED IDEOGRAPH
+ {0xD59A, 0x8ADD}, //14644 #CJK UNIFIED IDEOGRAPH
+ {0xD59B, 0x8ADE}, //14645 #CJK UNIFIED IDEOGRAPH
+ {0xD59C, 0x8ADF}, //14646 #CJK UNIFIED IDEOGRAPH
+ {0xD59D, 0x8AE0}, //14647 #CJK UNIFIED IDEOGRAPH
+ {0xD59E, 0x8AE1}, //14648 #CJK UNIFIED IDEOGRAPH
+ {0xD59F, 0x8AE2}, //14649 #CJK UNIFIED IDEOGRAPH
+ {0xD5A0, 0x8AE3}, //14650 #CJK UNIFIED IDEOGRAPH
+ {0xD5A1, 0x94E1}, //14651 #CJK UNIFIED IDEOGRAPH
+ {0xD5A2, 0x95F8}, //14652 #CJK UNIFIED IDEOGRAPH
+ {0xD5A3, 0x7728}, //14653 #CJK UNIFIED IDEOGRAPH
+ {0xD5A4, 0x6805}, //14654 #CJK UNIFIED IDEOGRAPH
+ {0xD5A5, 0x69A8}, //14655 #CJK UNIFIED IDEOGRAPH
+ {0xD5A6, 0x548B}, //14656 #CJK UNIFIED IDEOGRAPH
+ {0xD5A7, 0x4E4D}, //14657 #CJK UNIFIED IDEOGRAPH
+ {0xD5A8, 0x70B8}, //14658 #CJK UNIFIED IDEOGRAPH
+ {0xD5A9, 0x8BC8}, //14659 #CJK UNIFIED IDEOGRAPH
+ {0xD5AA, 0x6458}, //14660 #CJK UNIFIED IDEOGRAPH
+ {0xD5AB, 0x658B}, //14661 #CJK UNIFIED IDEOGRAPH
+ {0xD5AC, 0x5B85}, //14662 #CJK UNIFIED IDEOGRAPH
+ {0xD5AD, 0x7A84}, //14663 #CJK UNIFIED IDEOGRAPH
+ {0xD5AE, 0x503A}, //14664 #CJK UNIFIED IDEOGRAPH
+ {0xD5AF, 0x5BE8}, //14665 #CJK UNIFIED IDEOGRAPH
+ {0xD5B0, 0x77BB}, //14666 #CJK UNIFIED IDEOGRAPH
+ {0xD5B1, 0x6BE1}, //14667 #CJK UNIFIED IDEOGRAPH
+ {0xD5B2, 0x8A79}, //14668 #CJK UNIFIED IDEOGRAPH
+ {0xD5B3, 0x7C98}, //14669 #CJK UNIFIED IDEOGRAPH
+ {0xD5B4, 0x6CBE}, //14670 #CJK UNIFIED IDEOGRAPH
+ {0xD5B5, 0x76CF}, //14671 #CJK UNIFIED IDEOGRAPH
+ {0xD5B6, 0x65A9}, //14672 #CJK UNIFIED IDEOGRAPH
+ {0xD5B7, 0x8F97}, //14673 #CJK UNIFIED IDEOGRAPH
+ {0xD5B8, 0x5D2D}, //14674 #CJK UNIFIED IDEOGRAPH
+ {0xD5B9, 0x5C55}, //14675 #CJK UNIFIED IDEOGRAPH
+ {0xD5BA, 0x8638}, //14676 #CJK UNIFIED IDEOGRAPH
+ {0xD5BB, 0x6808}, //14677 #CJK UNIFIED IDEOGRAPH
+ {0xD5BC, 0x5360}, //14678 #CJK UNIFIED IDEOGRAPH
+ {0xD5BD, 0x6218}, //14679 #CJK UNIFIED IDEOGRAPH
+ {0xD5BE, 0x7AD9}, //14680 #CJK UNIFIED IDEOGRAPH
+ {0xD5BF, 0x6E5B}, //14681 #CJK UNIFIED IDEOGRAPH
+ {0xD5C0, 0x7EFD}, //14682 #CJK UNIFIED IDEOGRAPH
+ {0xD5C1, 0x6A1F}, //14683 #CJK UNIFIED IDEOGRAPH
+ {0xD5C2, 0x7AE0}, //14684 #CJK UNIFIED IDEOGRAPH
+ {0xD5C3, 0x5F70}, //14685 #CJK UNIFIED IDEOGRAPH
+ {0xD5C4, 0x6F33}, //14686 #CJK UNIFIED IDEOGRAPH
+ {0xD5C5, 0x5F20}, //14687 #CJK UNIFIED IDEOGRAPH
+ {0xD5C6, 0x638C}, //14688 #CJK UNIFIED IDEOGRAPH
+ {0xD5C7, 0x6DA8}, //14689 #CJK UNIFIED IDEOGRAPH
+ {0xD5C8, 0x6756}, //14690 #CJK UNIFIED IDEOGRAPH
+ {0xD5C9, 0x4E08}, //14691 #CJK UNIFIED IDEOGRAPH
+ {0xD5CA, 0x5E10}, //14692 #CJK UNIFIED IDEOGRAPH
+ {0xD5CB, 0x8D26}, //14693 #CJK UNIFIED IDEOGRAPH
+ {0xD5CC, 0x4ED7}, //14694 #CJK UNIFIED IDEOGRAPH
+ {0xD5CD, 0x80C0}, //14695 #CJK UNIFIED IDEOGRAPH
+ {0xD5CE, 0x7634}, //14696 #CJK UNIFIED IDEOGRAPH
+ {0xD5CF, 0x969C}, //14697 #CJK UNIFIED IDEOGRAPH
+ {0xD5D0, 0x62DB}, //14698 #CJK UNIFIED IDEOGRAPH
+ {0xD5D1, 0x662D}, //14699 #CJK UNIFIED IDEOGRAPH
+ {0xD5D2, 0x627E}, //14700 #CJK UNIFIED IDEOGRAPH
+ {0xD5D3, 0x6CBC}, //14701 #CJK UNIFIED IDEOGRAPH
+ {0xD5D4, 0x8D75}, //14702 #CJK UNIFIED IDEOGRAPH
+ {0xD5D5, 0x7167}, //14703 #CJK UNIFIED IDEOGRAPH
+ {0xD5D6, 0x7F69}, //14704 #CJK UNIFIED IDEOGRAPH
+ {0xD5D7, 0x5146}, //14705 #CJK UNIFIED IDEOGRAPH
+ {0xD5D8, 0x8087}, //14706 #CJK UNIFIED IDEOGRAPH
+ {0xD5D9, 0x53EC}, //14707 #CJK UNIFIED IDEOGRAPH
+ {0xD5DA, 0x906E}, //14708 #CJK UNIFIED IDEOGRAPH
+ {0xD5DB, 0x6298}, //14709 #CJK UNIFIED IDEOGRAPH
+ {0xD5DC, 0x54F2}, //14710 #CJK UNIFIED IDEOGRAPH
+ {0xD5DD, 0x86F0}, //14711 #CJK UNIFIED IDEOGRAPH
+ {0xD5DE, 0x8F99}, //14712 #CJK UNIFIED IDEOGRAPH
+ {0xD5DF, 0x8005}, //14713 #CJK UNIFIED IDEOGRAPH
+ {0xD5E0, 0x9517}, //14714 #CJK UNIFIED IDEOGRAPH
+ {0xD5E1, 0x8517}, //14715 #CJK UNIFIED IDEOGRAPH
+ {0xD5E2, 0x8FD9}, //14716 #CJK UNIFIED IDEOGRAPH
+ {0xD5E3, 0x6D59}, //14717 #CJK UNIFIED IDEOGRAPH
+ {0xD5E4, 0x73CD}, //14718 #CJK UNIFIED IDEOGRAPH
+ {0xD5E5, 0x659F}, //14719 #CJK UNIFIED IDEOGRAPH
+ {0xD5E6, 0x771F}, //14720 #CJK UNIFIED IDEOGRAPH
+ {0xD5E7, 0x7504}, //14721 #CJK UNIFIED IDEOGRAPH
+ {0xD5E8, 0x7827}, //14722 #CJK UNIFIED IDEOGRAPH
+ {0xD5E9, 0x81FB}, //14723 #CJK UNIFIED IDEOGRAPH
+ {0xD5EA, 0x8D1E}, //14724 #CJK UNIFIED IDEOGRAPH
+ {0xD5EB, 0x9488}, //14725 #CJK UNIFIED IDEOGRAPH
+ {0xD5EC, 0x4FA6}, //14726 #CJK UNIFIED IDEOGRAPH
+ {0xD5ED, 0x6795}, //14727 #CJK UNIFIED IDEOGRAPH
+ {0xD5EE, 0x75B9}, //14728 #CJK UNIFIED IDEOGRAPH
+ {0xD5EF, 0x8BCA}, //14729 #CJK UNIFIED IDEOGRAPH
+ {0xD5F0, 0x9707}, //14730 #CJK UNIFIED IDEOGRAPH
+ {0xD5F1, 0x632F}, //14731 #CJK UNIFIED IDEOGRAPH
+ {0xD5F2, 0x9547}, //14732 #CJK UNIFIED IDEOGRAPH
+ {0xD5F3, 0x9635}, //14733 #CJK UNIFIED IDEOGRAPH
+ {0xD5F4, 0x84B8}, //14734 #CJK UNIFIED IDEOGRAPH
+ {0xD5F5, 0x6323}, //14735 #CJK UNIFIED IDEOGRAPH
+ {0xD5F6, 0x7741}, //14736 #CJK UNIFIED IDEOGRAPH
+ {0xD5F7, 0x5F81}, //14737 #CJK UNIFIED IDEOGRAPH
+ {0xD5F8, 0x72F0}, //14738 #CJK UNIFIED IDEOGRAPH
+ {0xD5F9, 0x4E89}, //14739 #CJK UNIFIED IDEOGRAPH
+ {0xD5FA, 0x6014}, //14740 #CJK UNIFIED IDEOGRAPH
+ {0xD5FB, 0x6574}, //14741 #CJK UNIFIED IDEOGRAPH
+ {0xD5FC, 0x62EF}, //14742 #CJK UNIFIED IDEOGRAPH
+ {0xD5FD, 0x6B63}, //14743 #CJK UNIFIED IDEOGRAPH
+ {0xD5FE, 0x653F}, //14744 #CJK UNIFIED IDEOGRAPH
+ {0xD640, 0x8AE4}, //14745 #CJK UNIFIED IDEOGRAPH
+ {0xD641, 0x8AE5}, //14746 #CJK UNIFIED IDEOGRAPH
+ {0xD642, 0x8AE6}, //14747 #CJK UNIFIED IDEOGRAPH
+ {0xD643, 0x8AE7}, //14748 #CJK UNIFIED IDEOGRAPH
+ {0xD644, 0x8AE8}, //14749 #CJK UNIFIED IDEOGRAPH
+ {0xD645, 0x8AE9}, //14750 #CJK UNIFIED IDEOGRAPH
+ {0xD646, 0x8AEA}, //14751 #CJK UNIFIED IDEOGRAPH
+ {0xD647, 0x8AEB}, //14752 #CJK UNIFIED IDEOGRAPH
+ {0xD648, 0x8AEC}, //14753 #CJK UNIFIED IDEOGRAPH
+ {0xD649, 0x8AED}, //14754 #CJK UNIFIED IDEOGRAPH
+ {0xD64A, 0x8AEE}, //14755 #CJK UNIFIED IDEOGRAPH
+ {0xD64B, 0x8AEF}, //14756 #CJK UNIFIED IDEOGRAPH
+ {0xD64C, 0x8AF0}, //14757 #CJK UNIFIED IDEOGRAPH
+ {0xD64D, 0x8AF1}, //14758 #CJK UNIFIED IDEOGRAPH
+ {0xD64E, 0x8AF2}, //14759 #CJK UNIFIED IDEOGRAPH
+ {0xD64F, 0x8AF3}, //14760 #CJK UNIFIED IDEOGRAPH
+ {0xD650, 0x8AF4}, //14761 #CJK UNIFIED IDEOGRAPH
+ {0xD651, 0x8AF5}, //14762 #CJK UNIFIED IDEOGRAPH
+ {0xD652, 0x8AF6}, //14763 #CJK UNIFIED IDEOGRAPH
+ {0xD653, 0x8AF7}, //14764 #CJK UNIFIED IDEOGRAPH
+ {0xD654, 0x8AF8}, //14765 #CJK UNIFIED IDEOGRAPH
+ {0xD655, 0x8AF9}, //14766 #CJK UNIFIED IDEOGRAPH
+ {0xD656, 0x8AFA}, //14767 #CJK UNIFIED IDEOGRAPH
+ {0xD657, 0x8AFB}, //14768 #CJK UNIFIED IDEOGRAPH
+ {0xD658, 0x8AFC}, //14769 #CJK UNIFIED IDEOGRAPH
+ {0xD659, 0x8AFD}, //14770 #CJK UNIFIED IDEOGRAPH
+ {0xD65A, 0x8AFE}, //14771 #CJK UNIFIED IDEOGRAPH
+ {0xD65B, 0x8AFF}, //14772 #CJK UNIFIED IDEOGRAPH
+ {0xD65C, 0x8B00}, //14773 #CJK UNIFIED IDEOGRAPH
+ {0xD65D, 0x8B01}, //14774 #CJK UNIFIED IDEOGRAPH
+ {0xD65E, 0x8B02}, //14775 #CJK UNIFIED IDEOGRAPH
+ {0xD65F, 0x8B03}, //14776 #CJK UNIFIED IDEOGRAPH
+ {0xD660, 0x8B04}, //14777 #CJK UNIFIED IDEOGRAPH
+ {0xD661, 0x8B05}, //14778 #CJK UNIFIED IDEOGRAPH
+ {0xD662, 0x8B06}, //14779 #CJK UNIFIED IDEOGRAPH
+ {0xD663, 0x8B08}, //14780 #CJK UNIFIED IDEOGRAPH
+ {0xD664, 0x8B09}, //14781 #CJK UNIFIED IDEOGRAPH
+ {0xD665, 0x8B0A}, //14782 #CJK UNIFIED IDEOGRAPH
+ {0xD666, 0x8B0B}, //14783 #CJK UNIFIED IDEOGRAPH
+ {0xD667, 0x8B0C}, //14784 #CJK UNIFIED IDEOGRAPH
+ {0xD668, 0x8B0D}, //14785 #CJK UNIFIED IDEOGRAPH
+ {0xD669, 0x8B0E}, //14786 #CJK UNIFIED IDEOGRAPH
+ {0xD66A, 0x8B0F}, //14787 #CJK UNIFIED IDEOGRAPH
+ {0xD66B, 0x8B10}, //14788 #CJK UNIFIED IDEOGRAPH
+ {0xD66C, 0x8B11}, //14789 #CJK UNIFIED IDEOGRAPH
+ {0xD66D, 0x8B12}, //14790 #CJK UNIFIED IDEOGRAPH
+ {0xD66E, 0x8B13}, //14791 #CJK UNIFIED IDEOGRAPH
+ {0xD66F, 0x8B14}, //14792 #CJK UNIFIED IDEOGRAPH
+ {0xD670, 0x8B15}, //14793 #CJK UNIFIED IDEOGRAPH
+ {0xD671, 0x8B16}, //14794 #CJK UNIFIED IDEOGRAPH
+ {0xD672, 0x8B17}, //14795 #CJK UNIFIED IDEOGRAPH
+ {0xD673, 0x8B18}, //14796 #CJK UNIFIED IDEOGRAPH
+ {0xD674, 0x8B19}, //14797 #CJK UNIFIED IDEOGRAPH
+ {0xD675, 0x8B1A}, //14798 #CJK UNIFIED IDEOGRAPH
+ {0xD676, 0x8B1B}, //14799 #CJK UNIFIED IDEOGRAPH
+ {0xD677, 0x8B1C}, //14800 #CJK UNIFIED IDEOGRAPH
+ {0xD678, 0x8B1D}, //14801 #CJK UNIFIED IDEOGRAPH
+ {0xD679, 0x8B1E}, //14802 #CJK UNIFIED IDEOGRAPH
+ {0xD67A, 0x8B1F}, //14803 #CJK UNIFIED IDEOGRAPH
+ {0xD67B, 0x8B20}, //14804 #CJK UNIFIED IDEOGRAPH
+ {0xD67C, 0x8B21}, //14805 #CJK UNIFIED IDEOGRAPH
+ {0xD67D, 0x8B22}, //14806 #CJK UNIFIED IDEOGRAPH
+ {0xD67E, 0x8B23}, //14807 #CJK UNIFIED IDEOGRAPH
+ {0xD680, 0x8B24}, //14808 #CJK UNIFIED IDEOGRAPH
+ {0xD681, 0x8B25}, //14809 #CJK UNIFIED IDEOGRAPH
+ {0xD682, 0x8B27}, //14810 #CJK UNIFIED IDEOGRAPH
+ {0xD683, 0x8B28}, //14811 #CJK UNIFIED IDEOGRAPH
+ {0xD684, 0x8B29}, //14812 #CJK UNIFIED IDEOGRAPH
+ {0xD685, 0x8B2A}, //14813 #CJK UNIFIED IDEOGRAPH
+ {0xD686, 0x8B2B}, //14814 #CJK UNIFIED IDEOGRAPH
+ {0xD687, 0x8B2C}, //14815 #CJK UNIFIED IDEOGRAPH
+ {0xD688, 0x8B2D}, //14816 #CJK UNIFIED IDEOGRAPH
+ {0xD689, 0x8B2E}, //14817 #CJK UNIFIED IDEOGRAPH
+ {0xD68A, 0x8B2F}, //14818 #CJK UNIFIED IDEOGRAPH
+ {0xD68B, 0x8B30}, //14819 #CJK UNIFIED IDEOGRAPH
+ {0xD68C, 0x8B31}, //14820 #CJK UNIFIED IDEOGRAPH
+ {0xD68D, 0x8B32}, //14821 #CJK UNIFIED IDEOGRAPH
+ {0xD68E, 0x8B33}, //14822 #CJK UNIFIED IDEOGRAPH
+ {0xD68F, 0x8B34}, //14823 #CJK UNIFIED IDEOGRAPH
+ {0xD690, 0x8B35}, //14824 #CJK UNIFIED IDEOGRAPH
+ {0xD691, 0x8B36}, //14825 #CJK UNIFIED IDEOGRAPH
+ {0xD692, 0x8B37}, //14826 #CJK UNIFIED IDEOGRAPH
+ {0xD693, 0x8B38}, //14827 #CJK UNIFIED IDEOGRAPH
+ {0xD694, 0x8B39}, //14828 #CJK UNIFIED IDEOGRAPH
+ {0xD695, 0x8B3A}, //14829 #CJK UNIFIED IDEOGRAPH
+ {0xD696, 0x8B3B}, //14830 #CJK UNIFIED IDEOGRAPH
+ {0xD697, 0x8B3C}, //14831 #CJK UNIFIED IDEOGRAPH
+ {0xD698, 0x8B3D}, //14832 #CJK UNIFIED IDEOGRAPH
+ {0xD699, 0x8B3E}, //14833 #CJK UNIFIED IDEOGRAPH
+ {0xD69A, 0x8B3F}, //14834 #CJK UNIFIED IDEOGRAPH
+ {0xD69B, 0x8B40}, //14835 #CJK UNIFIED IDEOGRAPH
+ {0xD69C, 0x8B41}, //14836 #CJK UNIFIED IDEOGRAPH
+ {0xD69D, 0x8B42}, //14837 #CJK UNIFIED IDEOGRAPH
+ {0xD69E, 0x8B43}, //14838 #CJK UNIFIED IDEOGRAPH
+ {0xD69F, 0x8B44}, //14839 #CJK UNIFIED IDEOGRAPH
+ {0xD6A0, 0x8B45}, //14840 #CJK UNIFIED IDEOGRAPH
+ {0xD6A1, 0x5E27}, //14841 #CJK UNIFIED IDEOGRAPH
+ {0xD6A2, 0x75C7}, //14842 #CJK UNIFIED IDEOGRAPH
+ {0xD6A3, 0x90D1}, //14843 #CJK UNIFIED IDEOGRAPH
+ {0xD6A4, 0x8BC1}, //14844 #CJK UNIFIED IDEOGRAPH
+ {0xD6A5, 0x829D}, //14845 #CJK UNIFIED IDEOGRAPH
+ {0xD6A6, 0x679D}, //14846 #CJK UNIFIED IDEOGRAPH
+ {0xD6A7, 0x652F}, //14847 #CJK UNIFIED IDEOGRAPH
+ {0xD6A8, 0x5431}, //14848 #CJK UNIFIED IDEOGRAPH
+ {0xD6A9, 0x8718}, //14849 #CJK UNIFIED IDEOGRAPH
+ {0xD6AA, 0x77E5}, //14850 #CJK UNIFIED IDEOGRAPH
+ {0xD6AB, 0x80A2}, //14851 #CJK UNIFIED IDEOGRAPH
+ {0xD6AC, 0x8102}, //14852 #CJK UNIFIED IDEOGRAPH
+ {0xD6AD, 0x6C41}, //14853 #CJK UNIFIED IDEOGRAPH
+ {0xD6AE, 0x4E4B}, //14854 #CJK UNIFIED IDEOGRAPH
+ {0xD6AF, 0x7EC7}, //14855 #CJK UNIFIED IDEOGRAPH
+ {0xD6B0, 0x804C}, //14856 #CJK UNIFIED IDEOGRAPH
+ {0xD6B1, 0x76F4}, //14857 #CJK UNIFIED IDEOGRAPH
+ {0xD6B2, 0x690D}, //14858 #CJK UNIFIED IDEOGRAPH
+ {0xD6B3, 0x6B96}, //14859 #CJK UNIFIED IDEOGRAPH
+ {0xD6B4, 0x6267}, //14860 #CJK UNIFIED IDEOGRAPH
+ {0xD6B5, 0x503C}, //14861 #CJK UNIFIED IDEOGRAPH
+ {0xD6B6, 0x4F84}, //14862 #CJK UNIFIED IDEOGRAPH
+ {0xD6B7, 0x5740}, //14863 #CJK UNIFIED IDEOGRAPH
+ {0xD6B8, 0x6307}, //14864 #CJK UNIFIED IDEOGRAPH
+ {0xD6B9, 0x6B62}, //14865 #CJK UNIFIED IDEOGRAPH
+ {0xD6BA, 0x8DBE}, //14866 #CJK UNIFIED IDEOGRAPH
+ {0xD6BB, 0x53EA}, //14867 #CJK UNIFIED IDEOGRAPH
+ {0xD6BC, 0x65E8}, //14868 #CJK UNIFIED IDEOGRAPH
+ {0xD6BD, 0x7EB8}, //14869 #CJK UNIFIED IDEOGRAPH
+ {0xD6BE, 0x5FD7}, //14870 #CJK UNIFIED IDEOGRAPH
+ {0xD6BF, 0x631A}, //14871 #CJK UNIFIED IDEOGRAPH
+ {0xD6C0, 0x63B7}, //14872 #CJK UNIFIED IDEOGRAPH
+ {0xD6C1, 0x81F3}, //14873 #CJK UNIFIED IDEOGRAPH
+ {0xD6C2, 0x81F4}, //14874 #CJK UNIFIED IDEOGRAPH
+ {0xD6C3, 0x7F6E}, //14875 #CJK UNIFIED IDEOGRAPH
+ {0xD6C4, 0x5E1C}, //14876 #CJK UNIFIED IDEOGRAPH
+ {0xD6C5, 0x5CD9}, //14877 #CJK UNIFIED IDEOGRAPH
+ {0xD6C6, 0x5236}, //14878 #CJK UNIFIED IDEOGRAPH
+ {0xD6C7, 0x667A}, //14879 #CJK UNIFIED IDEOGRAPH
+ {0xD6C8, 0x79E9}, //14880 #CJK UNIFIED IDEOGRAPH
+ {0xD6C9, 0x7A1A}, //14881 #CJK UNIFIED IDEOGRAPH
+ {0xD6CA, 0x8D28}, //14882 #CJK UNIFIED IDEOGRAPH
+ {0xD6CB, 0x7099}, //14883 #CJK UNIFIED IDEOGRAPH
+ {0xD6CC, 0x75D4}, //14884 #CJK UNIFIED IDEOGRAPH
+ {0xD6CD, 0x6EDE}, //14885 #CJK UNIFIED IDEOGRAPH
+ {0xD6CE, 0x6CBB}, //14886 #CJK UNIFIED IDEOGRAPH
+ {0xD6CF, 0x7A92}, //14887 #CJK UNIFIED IDEOGRAPH
+ {0xD6D0, 0x4E2D}, //14888 #CJK UNIFIED IDEOGRAPH
+ {0xD6D1, 0x76C5}, //14889 #CJK UNIFIED IDEOGRAPH
+ {0xD6D2, 0x5FE0}, //14890 #CJK UNIFIED IDEOGRAPH
+ {0xD6D3, 0x949F}, //14891 #CJK UNIFIED IDEOGRAPH
+ {0xD6D4, 0x8877}, //14892 #CJK UNIFIED IDEOGRAPH
+ {0xD6D5, 0x7EC8}, //14893 #CJK UNIFIED IDEOGRAPH
+ {0xD6D6, 0x79CD}, //14894 #CJK UNIFIED IDEOGRAPH
+ {0xD6D7, 0x80BF}, //14895 #CJK UNIFIED IDEOGRAPH
+ {0xD6D8, 0x91CD}, //14896 #CJK UNIFIED IDEOGRAPH
+ {0xD6D9, 0x4EF2}, //14897 #CJK UNIFIED IDEOGRAPH
+ {0xD6DA, 0x4F17}, //14898 #CJK UNIFIED IDEOGRAPH
+ {0xD6DB, 0x821F}, //14899 #CJK UNIFIED IDEOGRAPH
+ {0xD6DC, 0x5468}, //14900 #CJK UNIFIED IDEOGRAPH
+ {0xD6DD, 0x5DDE}, //14901 #CJK UNIFIED IDEOGRAPH
+ {0xD6DE, 0x6D32}, //14902 #CJK UNIFIED IDEOGRAPH
+ {0xD6DF, 0x8BCC}, //14903 #CJK UNIFIED IDEOGRAPH
+ {0xD6E0, 0x7CA5}, //14904 #CJK UNIFIED IDEOGRAPH
+ {0xD6E1, 0x8F74}, //14905 #CJK UNIFIED IDEOGRAPH
+ {0xD6E2, 0x8098}, //14906 #CJK UNIFIED IDEOGRAPH
+ {0xD6E3, 0x5E1A}, //14907 #CJK UNIFIED IDEOGRAPH
+ {0xD6E4, 0x5492}, //14908 #CJK UNIFIED IDEOGRAPH
+ {0xD6E5, 0x76B1}, //14909 #CJK UNIFIED IDEOGRAPH
+ {0xD6E6, 0x5B99}, //14910 #CJK UNIFIED IDEOGRAPH
+ {0xD6E7, 0x663C}, //14911 #CJK UNIFIED IDEOGRAPH
+ {0xD6E8, 0x9AA4}, //14912 #CJK UNIFIED IDEOGRAPH
+ {0xD6E9, 0x73E0}, //14913 #CJK UNIFIED IDEOGRAPH
+ {0xD6EA, 0x682A}, //14914 #CJK UNIFIED IDEOGRAPH
+ {0xD6EB, 0x86DB}, //14915 #CJK UNIFIED IDEOGRAPH
+ {0xD6EC, 0x6731}, //14916 #CJK UNIFIED IDEOGRAPH
+ {0xD6ED, 0x732A}, //14917 #CJK UNIFIED IDEOGRAPH
+ {0xD6EE, 0x8BF8}, //14918 #CJK UNIFIED IDEOGRAPH
+ {0xD6EF, 0x8BDB}, //14919 #CJK UNIFIED IDEOGRAPH
+ {0xD6F0, 0x9010}, //14920 #CJK UNIFIED IDEOGRAPH
+ {0xD6F1, 0x7AF9}, //14921 #CJK UNIFIED IDEOGRAPH
+ {0xD6F2, 0x70DB}, //14922 #CJK UNIFIED IDEOGRAPH
+ {0xD6F3, 0x716E}, //14923 #CJK UNIFIED IDEOGRAPH
+ {0xD6F4, 0x62C4}, //14924 #CJK UNIFIED IDEOGRAPH
+ {0xD6F5, 0x77A9}, //14925 #CJK UNIFIED IDEOGRAPH
+ {0xD6F6, 0x5631}, //14926 #CJK UNIFIED IDEOGRAPH
+ {0xD6F7, 0x4E3B}, //14927 #CJK UNIFIED IDEOGRAPH
+ {0xD6F8, 0x8457}, //14928 #CJK UNIFIED IDEOGRAPH
+ {0xD6F9, 0x67F1}, //14929 #CJK UNIFIED IDEOGRAPH
+ {0xD6FA, 0x52A9}, //14930 #CJK UNIFIED IDEOGRAPH
+ {0xD6FB, 0x86C0}, //14931 #CJK UNIFIED IDEOGRAPH
+ {0xD6FC, 0x8D2E}, //14932 #CJK UNIFIED IDEOGRAPH
+ {0xD6FD, 0x94F8}, //14933 #CJK UNIFIED IDEOGRAPH
+ {0xD6FE, 0x7B51}, //14934 #CJK UNIFIED IDEOGRAPH
+ {0xD740, 0x8B46}, //14935 #CJK UNIFIED IDEOGRAPH
+ {0xD741, 0x8B47}, //14936 #CJK UNIFIED IDEOGRAPH
+ {0xD742, 0x8B48}, //14937 #CJK UNIFIED IDEOGRAPH
+ {0xD743, 0x8B49}, //14938 #CJK UNIFIED IDEOGRAPH
+ {0xD744, 0x8B4A}, //14939 #CJK UNIFIED IDEOGRAPH
+ {0xD745, 0x8B4B}, //14940 #CJK UNIFIED IDEOGRAPH
+ {0xD746, 0x8B4C}, //14941 #CJK UNIFIED IDEOGRAPH
+ {0xD747, 0x8B4D}, //14942 #CJK UNIFIED IDEOGRAPH
+ {0xD748, 0x8B4E}, //14943 #CJK UNIFIED IDEOGRAPH
+ {0xD749, 0x8B4F}, //14944 #CJK UNIFIED IDEOGRAPH
+ {0xD74A, 0x8B50}, //14945 #CJK UNIFIED IDEOGRAPH
+ {0xD74B, 0x8B51}, //14946 #CJK UNIFIED IDEOGRAPH
+ {0xD74C, 0x8B52}, //14947 #CJK UNIFIED IDEOGRAPH
+ {0xD74D, 0x8B53}, //14948 #CJK UNIFIED IDEOGRAPH
+ {0xD74E, 0x8B54}, //14949 #CJK UNIFIED IDEOGRAPH
+ {0xD74F, 0x8B55}, //14950 #CJK UNIFIED IDEOGRAPH
+ {0xD750, 0x8B56}, //14951 #CJK UNIFIED IDEOGRAPH
+ {0xD751, 0x8B57}, //14952 #CJK UNIFIED IDEOGRAPH
+ {0xD752, 0x8B58}, //14953 #CJK UNIFIED IDEOGRAPH
+ {0xD753, 0x8B59}, //14954 #CJK UNIFIED IDEOGRAPH
+ {0xD754, 0x8B5A}, //14955 #CJK UNIFIED IDEOGRAPH
+ {0xD755, 0x8B5B}, //14956 #CJK UNIFIED IDEOGRAPH
+ {0xD756, 0x8B5C}, //14957 #CJK UNIFIED IDEOGRAPH
+ {0xD757, 0x8B5D}, //14958 #CJK UNIFIED IDEOGRAPH
+ {0xD758, 0x8B5E}, //14959 #CJK UNIFIED IDEOGRAPH
+ {0xD759, 0x8B5F}, //14960 #CJK UNIFIED IDEOGRAPH
+ {0xD75A, 0x8B60}, //14961 #CJK UNIFIED IDEOGRAPH
+ {0xD75B, 0x8B61}, //14962 #CJK UNIFIED IDEOGRAPH
+ {0xD75C, 0x8B62}, //14963 #CJK UNIFIED IDEOGRAPH
+ {0xD75D, 0x8B63}, //14964 #CJK UNIFIED IDEOGRAPH
+ {0xD75E, 0x8B64}, //14965 #CJK UNIFIED IDEOGRAPH
+ {0xD75F, 0x8B65}, //14966 #CJK UNIFIED IDEOGRAPH
+ {0xD760, 0x8B67}, //14967 #CJK UNIFIED IDEOGRAPH
+ {0xD761, 0x8B68}, //14968 #CJK UNIFIED IDEOGRAPH
+ {0xD762, 0x8B69}, //14969 #CJK UNIFIED IDEOGRAPH
+ {0xD763, 0x8B6A}, //14970 #CJK UNIFIED IDEOGRAPH
+ {0xD764, 0x8B6B}, //14971 #CJK UNIFIED IDEOGRAPH
+ {0xD765, 0x8B6D}, //14972 #CJK UNIFIED IDEOGRAPH
+ {0xD766, 0x8B6E}, //14973 #CJK UNIFIED IDEOGRAPH
+ {0xD767, 0x8B6F}, //14974 #CJK UNIFIED IDEOGRAPH
+ {0xD768, 0x8B70}, //14975 #CJK UNIFIED IDEOGRAPH
+ {0xD769, 0x8B71}, //14976 #CJK UNIFIED IDEOGRAPH
+ {0xD76A, 0x8B72}, //14977 #CJK UNIFIED IDEOGRAPH
+ {0xD76B, 0x8B73}, //14978 #CJK UNIFIED IDEOGRAPH
+ {0xD76C, 0x8B74}, //14979 #CJK UNIFIED IDEOGRAPH
+ {0xD76D, 0x8B75}, //14980 #CJK UNIFIED IDEOGRAPH
+ {0xD76E, 0x8B76}, //14981 #CJK UNIFIED IDEOGRAPH
+ {0xD76F, 0x8B77}, //14982 #CJK UNIFIED IDEOGRAPH
+ {0xD770, 0x8B78}, //14983 #CJK UNIFIED IDEOGRAPH
+ {0xD771, 0x8B79}, //14984 #CJK UNIFIED IDEOGRAPH
+ {0xD772, 0x8B7A}, //14985 #CJK UNIFIED IDEOGRAPH
+ {0xD773, 0x8B7B}, //14986 #CJK UNIFIED IDEOGRAPH
+ {0xD774, 0x8B7C}, //14987 #CJK UNIFIED IDEOGRAPH
+ {0xD775, 0x8B7D}, //14988 #CJK UNIFIED IDEOGRAPH
+ {0xD776, 0x8B7E}, //14989 #CJK UNIFIED IDEOGRAPH
+ {0xD777, 0x8B7F}, //14990 #CJK UNIFIED IDEOGRAPH
+ {0xD778, 0x8B80}, //14991 #CJK UNIFIED IDEOGRAPH
+ {0xD779, 0x8B81}, //14992 #CJK UNIFIED IDEOGRAPH
+ {0xD77A, 0x8B82}, //14993 #CJK UNIFIED IDEOGRAPH
+ {0xD77B, 0x8B83}, //14994 #CJK UNIFIED IDEOGRAPH
+ {0xD77C, 0x8B84}, //14995 #CJK UNIFIED IDEOGRAPH
+ {0xD77D, 0x8B85}, //14996 #CJK UNIFIED IDEOGRAPH
+ {0xD77E, 0x8B86}, //14997 #CJK UNIFIED IDEOGRAPH
+ {0xD780, 0x8B87}, //14998 #CJK UNIFIED IDEOGRAPH
+ {0xD781, 0x8B88}, //14999 #CJK UNIFIED IDEOGRAPH
+ {0xD782, 0x8B89}, //15000 #CJK UNIFIED IDEOGRAPH
+ {0xD783, 0x8B8A}, //15001 #CJK UNIFIED IDEOGRAPH
+ {0xD784, 0x8B8B}, //15002 #CJK UNIFIED IDEOGRAPH
+ {0xD785, 0x8B8C}, //15003 #CJK UNIFIED IDEOGRAPH
+ {0xD786, 0x8B8D}, //15004 #CJK UNIFIED IDEOGRAPH
+ {0xD787, 0x8B8E}, //15005 #CJK UNIFIED IDEOGRAPH
+ {0xD788, 0x8B8F}, //15006 #CJK UNIFIED IDEOGRAPH
+ {0xD789, 0x8B90}, //15007 #CJK UNIFIED IDEOGRAPH
+ {0xD78A, 0x8B91}, //15008 #CJK UNIFIED IDEOGRAPH
+ {0xD78B, 0x8B92}, //15009 #CJK UNIFIED IDEOGRAPH
+ {0xD78C, 0x8B93}, //15010 #CJK UNIFIED IDEOGRAPH
+ {0xD78D, 0x8B94}, //15011 #CJK UNIFIED IDEOGRAPH
+ {0xD78E, 0x8B95}, //15012 #CJK UNIFIED IDEOGRAPH
+ {0xD78F, 0x8B96}, //15013 #CJK UNIFIED IDEOGRAPH
+ {0xD790, 0x8B97}, //15014 #CJK UNIFIED IDEOGRAPH
+ {0xD791, 0x8B98}, //15015 #CJK UNIFIED IDEOGRAPH
+ {0xD792, 0x8B99}, //15016 #CJK UNIFIED IDEOGRAPH
+ {0xD793, 0x8B9A}, //15017 #CJK UNIFIED IDEOGRAPH
+ {0xD794, 0x8B9B}, //15018 #CJK UNIFIED IDEOGRAPH
+ {0xD795, 0x8B9C}, //15019 #CJK UNIFIED IDEOGRAPH
+ {0xD796, 0x8B9D}, //15020 #CJK UNIFIED IDEOGRAPH
+ {0xD797, 0x8B9E}, //15021 #CJK UNIFIED IDEOGRAPH
+ {0xD798, 0x8B9F}, //15022 #CJK UNIFIED IDEOGRAPH
+ {0xD799, 0x8BAC}, //15023 #CJK UNIFIED IDEOGRAPH
+ {0xD79A, 0x8BB1}, //15024 #CJK UNIFIED IDEOGRAPH
+ {0xD79B, 0x8BBB}, //15025 #CJK UNIFIED IDEOGRAPH
+ {0xD79C, 0x8BC7}, //15026 #CJK UNIFIED IDEOGRAPH
+ {0xD79D, 0x8BD0}, //15027 #CJK UNIFIED IDEOGRAPH
+ {0xD79E, 0x8BEA}, //15028 #CJK UNIFIED IDEOGRAPH
+ {0xD79F, 0x8C09}, //15029 #CJK UNIFIED IDEOGRAPH
+ {0xD7A0, 0x8C1E}, //15030 #CJK UNIFIED IDEOGRAPH
+ {0xD7A1, 0x4F4F}, //15031 #CJK UNIFIED IDEOGRAPH
+ {0xD7A2, 0x6CE8}, //15032 #CJK UNIFIED IDEOGRAPH
+ {0xD7A3, 0x795D}, //15033 #CJK UNIFIED IDEOGRAPH
+ {0xD7A4, 0x9A7B}, //15034 #CJK UNIFIED IDEOGRAPH
+ {0xD7A5, 0x6293}, //15035 #CJK UNIFIED IDEOGRAPH
+ {0xD7A6, 0x722A}, //15036 #CJK UNIFIED IDEOGRAPH
+ {0xD7A7, 0x62FD}, //15037 #CJK UNIFIED IDEOGRAPH
+ {0xD7A8, 0x4E13}, //15038 #CJK UNIFIED IDEOGRAPH
+ {0xD7A9, 0x7816}, //15039 #CJK UNIFIED IDEOGRAPH
+ {0xD7AA, 0x8F6C}, //15040 #CJK UNIFIED IDEOGRAPH
+ {0xD7AB, 0x64B0}, //15041 #CJK UNIFIED IDEOGRAPH
+ {0xD7AC, 0x8D5A}, //15042 #CJK UNIFIED IDEOGRAPH
+ {0xD7AD, 0x7BC6}, //15043 #CJK UNIFIED IDEOGRAPH
+ {0xD7AE, 0x6869}, //15044 #CJK UNIFIED IDEOGRAPH
+ {0xD7AF, 0x5E84}, //15045 #CJK UNIFIED IDEOGRAPH
+ {0xD7B0, 0x88C5}, //15046 #CJK UNIFIED IDEOGRAPH
+ {0xD7B1, 0x5986}, //15047 #CJK UNIFIED IDEOGRAPH
+ {0xD7B2, 0x649E}, //15048 #CJK UNIFIED IDEOGRAPH
+ {0xD7B3, 0x58EE}, //15049 #CJK UNIFIED IDEOGRAPH
+ {0xD7B4, 0x72B6}, //15050 #CJK UNIFIED IDEOGRAPH
+ {0xD7B5, 0x690E}, //15051 #CJK UNIFIED IDEOGRAPH
+ {0xD7B6, 0x9525}, //15052 #CJK UNIFIED IDEOGRAPH
+ {0xD7B7, 0x8FFD}, //15053 #CJK UNIFIED IDEOGRAPH
+ {0xD7B8, 0x8D58}, //15054 #CJK UNIFIED IDEOGRAPH
+ {0xD7B9, 0x5760}, //15055 #CJK UNIFIED IDEOGRAPH
+ {0xD7BA, 0x7F00}, //15056 #CJK UNIFIED IDEOGRAPH
+ {0xD7BB, 0x8C06}, //15057 #CJK UNIFIED IDEOGRAPH
+ {0xD7BC, 0x51C6}, //15058 #CJK UNIFIED IDEOGRAPH
+ {0xD7BD, 0x6349}, //15059 #CJK UNIFIED IDEOGRAPH
+ {0xD7BE, 0x62D9}, //15060 #CJK UNIFIED IDEOGRAPH
+ {0xD7BF, 0x5353}, //15061 #CJK UNIFIED IDEOGRAPH
+ {0xD7C0, 0x684C}, //15062 #CJK UNIFIED IDEOGRAPH
+ {0xD7C1, 0x7422}, //15063 #CJK UNIFIED IDEOGRAPH
+ {0xD7C2, 0x8301}, //15064 #CJK UNIFIED IDEOGRAPH
+ {0xD7C3, 0x914C}, //15065 #CJK UNIFIED IDEOGRAPH
+ {0xD7C4, 0x5544}, //15066 #CJK UNIFIED IDEOGRAPH
+ {0xD7C5, 0x7740}, //15067 #CJK UNIFIED IDEOGRAPH
+ {0xD7C6, 0x707C}, //15068 #CJK UNIFIED IDEOGRAPH
+ {0xD7C7, 0x6D4A}, //15069 #CJK UNIFIED IDEOGRAPH
+ {0xD7C8, 0x5179}, //15070 #CJK UNIFIED IDEOGRAPH
+ {0xD7C9, 0x54A8}, //15071 #CJK UNIFIED IDEOGRAPH
+ {0xD7CA, 0x8D44}, //15072 #CJK UNIFIED IDEOGRAPH
+ {0xD7CB, 0x59FF}, //15073 #CJK UNIFIED IDEOGRAPH
+ {0xD7CC, 0x6ECB}, //15074 #CJK UNIFIED IDEOGRAPH
+ {0xD7CD, 0x6DC4}, //15075 #CJK UNIFIED IDEOGRAPH
+ {0xD7CE, 0x5B5C}, //15076 #CJK UNIFIED IDEOGRAPH
+ {0xD7CF, 0x7D2B}, //15077 #CJK UNIFIED IDEOGRAPH
+ {0xD7D0, 0x4ED4}, //15078 #CJK UNIFIED IDEOGRAPH
+ {0xD7D1, 0x7C7D}, //15079 #CJK UNIFIED IDEOGRAPH
+ {0xD7D2, 0x6ED3}, //15080 #CJK UNIFIED IDEOGRAPH
+ {0xD7D3, 0x5B50}, //15081 #CJK UNIFIED IDEOGRAPH
+ {0xD7D4, 0x81EA}, //15082 #CJK UNIFIED IDEOGRAPH
+ {0xD7D5, 0x6E0D}, //15083 #CJK UNIFIED IDEOGRAPH
+ {0xD7D6, 0x5B57}, //15084 #CJK UNIFIED IDEOGRAPH
+ {0xD7D7, 0x9B03}, //15085 #CJK UNIFIED IDEOGRAPH
+ {0xD7D8, 0x68D5}, //15086 #CJK UNIFIED IDEOGRAPH
+ {0xD7D9, 0x8E2A}, //15087 #CJK UNIFIED IDEOGRAPH
+ {0xD7DA, 0x5B97}, //15088 #CJK UNIFIED IDEOGRAPH
+ {0xD7DB, 0x7EFC}, //15089 #CJK UNIFIED IDEOGRAPH
+ {0xD7DC, 0x603B}, //15090 #CJK UNIFIED IDEOGRAPH
+ {0xD7DD, 0x7EB5}, //15091 #CJK UNIFIED IDEOGRAPH
+ {0xD7DE, 0x90B9}, //15092 #CJK UNIFIED IDEOGRAPH
+ {0xD7DF, 0x8D70}, //15093 #CJK UNIFIED IDEOGRAPH
+ {0xD7E0, 0x594F}, //15094 #CJK UNIFIED IDEOGRAPH
+ {0xD7E1, 0x63CD}, //15095 #CJK UNIFIED IDEOGRAPH
+ {0xD7E2, 0x79DF}, //15096 #CJK UNIFIED IDEOGRAPH
+ {0xD7E3, 0x8DB3}, //15097 #CJK UNIFIED IDEOGRAPH
+ {0xD7E4, 0x5352}, //15098 #CJK UNIFIED IDEOGRAPH
+ {0xD7E5, 0x65CF}, //15099 #CJK UNIFIED IDEOGRAPH
+ {0xD7E6, 0x7956}, //15100 #CJK UNIFIED IDEOGRAPH
+ {0xD7E7, 0x8BC5}, //15101 #CJK UNIFIED IDEOGRAPH
+ {0xD7E8, 0x963B}, //15102 #CJK UNIFIED IDEOGRAPH
+ {0xD7E9, 0x7EC4}, //15103 #CJK UNIFIED IDEOGRAPH
+ {0xD7EA, 0x94BB}, //15104 #CJK UNIFIED IDEOGRAPH
+ {0xD7EB, 0x7E82}, //15105 #CJK UNIFIED IDEOGRAPH
+ {0xD7EC, 0x5634}, //15106 #CJK UNIFIED IDEOGRAPH
+ {0xD7ED, 0x9189}, //15107 #CJK UNIFIED IDEOGRAPH
+ {0xD7EE, 0x6700}, //15108 #CJK UNIFIED IDEOGRAPH
+ {0xD7EF, 0x7F6A}, //15109 #CJK UNIFIED IDEOGRAPH
+ {0xD7F0, 0x5C0A}, //15110 #CJK UNIFIED IDEOGRAPH
+ {0xD7F1, 0x9075}, //15111 #CJK UNIFIED IDEOGRAPH
+ {0xD7F2, 0x6628}, //15112 #CJK UNIFIED IDEOGRAPH
+ {0xD7F3, 0x5DE6}, //15113 #CJK UNIFIED IDEOGRAPH
+ {0xD7F4, 0x4F50}, //15114 #CJK UNIFIED IDEOGRAPH
+ {0xD7F5, 0x67DE}, //15115 #CJK UNIFIED IDEOGRAPH
+ {0xD7F6, 0x505A}, //15116 #CJK UNIFIED IDEOGRAPH
+ {0xD7F7, 0x4F5C}, //15117 #CJK UNIFIED IDEOGRAPH
+ {0xD7F8, 0x5750}, //15118 #CJK UNIFIED IDEOGRAPH
+ {0xD7F9, 0x5EA7}, //15119 #CJK UNIFIED IDEOGRAPH
+ {0xD840, 0x8C38}, //15120 #CJK UNIFIED IDEOGRAPH
+ {0xD841, 0x8C39}, //15121 #CJK UNIFIED IDEOGRAPH
+ {0xD842, 0x8C3A}, //15122 #CJK UNIFIED IDEOGRAPH
+ {0xD843, 0x8C3B}, //15123 #CJK UNIFIED IDEOGRAPH
+ {0xD844, 0x8C3C}, //15124 #CJK UNIFIED IDEOGRAPH
+ {0xD845, 0x8C3D}, //15125 #CJK UNIFIED IDEOGRAPH
+ {0xD846, 0x8C3E}, //15126 #CJK UNIFIED IDEOGRAPH
+ {0xD847, 0x8C3F}, //15127 #CJK UNIFIED IDEOGRAPH
+ {0xD848, 0x8C40}, //15128 #CJK UNIFIED IDEOGRAPH
+ {0xD849, 0x8C42}, //15129 #CJK UNIFIED IDEOGRAPH
+ {0xD84A, 0x8C43}, //15130 #CJK UNIFIED IDEOGRAPH
+ {0xD84B, 0x8C44}, //15131 #CJK UNIFIED IDEOGRAPH
+ {0xD84C, 0x8C45}, //15132 #CJK UNIFIED IDEOGRAPH
+ {0xD84D, 0x8C48}, //15133 #CJK UNIFIED IDEOGRAPH
+ {0xD84E, 0x8C4A}, //15134 #CJK UNIFIED IDEOGRAPH
+ {0xD84F, 0x8C4B}, //15135 #CJK UNIFIED IDEOGRAPH
+ {0xD850, 0x8C4D}, //15136 #CJK UNIFIED IDEOGRAPH
+ {0xD851, 0x8C4E}, //15137 #CJK UNIFIED IDEOGRAPH
+ {0xD852, 0x8C4F}, //15138 #CJK UNIFIED IDEOGRAPH
+ {0xD853, 0x8C50}, //15139 #CJK UNIFIED IDEOGRAPH
+ {0xD854, 0x8C51}, //15140 #CJK UNIFIED IDEOGRAPH
+ {0xD855, 0x8C52}, //15141 #CJK UNIFIED IDEOGRAPH
+ {0xD856, 0x8C53}, //15142 #CJK UNIFIED IDEOGRAPH
+ {0xD857, 0x8C54}, //15143 #CJK UNIFIED IDEOGRAPH
+ {0xD858, 0x8C56}, //15144 #CJK UNIFIED IDEOGRAPH
+ {0xD859, 0x8C57}, //15145 #CJK UNIFIED IDEOGRAPH
+ {0xD85A, 0x8C58}, //15146 #CJK UNIFIED IDEOGRAPH
+ {0xD85B, 0x8C59}, //15147 #CJK UNIFIED IDEOGRAPH
+ {0xD85C, 0x8C5B}, //15148 #CJK UNIFIED IDEOGRAPH
+ {0xD85D, 0x8C5C}, //15149 #CJK UNIFIED IDEOGRAPH
+ {0xD85E, 0x8C5D}, //15150 #CJK UNIFIED IDEOGRAPH
+ {0xD85F, 0x8C5E}, //15151 #CJK UNIFIED IDEOGRAPH
+ {0xD860, 0x8C5F}, //15152 #CJK UNIFIED IDEOGRAPH
+ {0xD861, 0x8C60}, //15153 #CJK UNIFIED IDEOGRAPH
+ {0xD862, 0x8C63}, //15154 #CJK UNIFIED IDEOGRAPH
+ {0xD863, 0x8C64}, //15155 #CJK UNIFIED IDEOGRAPH
+ {0xD864, 0x8C65}, //15156 #CJK UNIFIED IDEOGRAPH
+ {0xD865, 0x8C66}, //15157 #CJK UNIFIED IDEOGRAPH
+ {0xD866, 0x8C67}, //15158 #CJK UNIFIED IDEOGRAPH
+ {0xD867, 0x8C68}, //15159 #CJK UNIFIED IDEOGRAPH
+ {0xD868, 0x8C69}, //15160 #CJK UNIFIED IDEOGRAPH
+ {0xD869, 0x8C6C}, //15161 #CJK UNIFIED IDEOGRAPH
+ {0xD86A, 0x8C6D}, //15162 #CJK UNIFIED IDEOGRAPH
+ {0xD86B, 0x8C6E}, //15163 #CJK UNIFIED IDEOGRAPH
+ {0xD86C, 0x8C6F}, //15164 #CJK UNIFIED IDEOGRAPH
+ {0xD86D, 0x8C70}, //15165 #CJK UNIFIED IDEOGRAPH
+ {0xD86E, 0x8C71}, //15166 #CJK UNIFIED IDEOGRAPH
+ {0xD86F, 0x8C72}, //15167 #CJK UNIFIED IDEOGRAPH
+ {0xD870, 0x8C74}, //15168 #CJK UNIFIED IDEOGRAPH
+ {0xD871, 0x8C75}, //15169 #CJK UNIFIED IDEOGRAPH
+ {0xD872, 0x8C76}, //15170 #CJK UNIFIED IDEOGRAPH
+ {0xD873, 0x8C77}, //15171 #CJK UNIFIED IDEOGRAPH
+ {0xD874, 0x8C7B}, //15172 #CJK UNIFIED IDEOGRAPH
+ {0xD875, 0x8C7C}, //15173 #CJK UNIFIED IDEOGRAPH
+ {0xD876, 0x8C7D}, //15174 #CJK UNIFIED IDEOGRAPH
+ {0xD877, 0x8C7E}, //15175 #CJK UNIFIED IDEOGRAPH
+ {0xD878, 0x8C7F}, //15176 #CJK UNIFIED IDEOGRAPH
+ {0xD879, 0x8C80}, //15177 #CJK UNIFIED IDEOGRAPH
+ {0xD87A, 0x8C81}, //15178 #CJK UNIFIED IDEOGRAPH
+ {0xD87B, 0x8C83}, //15179 #CJK UNIFIED IDEOGRAPH
+ {0xD87C, 0x8C84}, //15180 #CJK UNIFIED IDEOGRAPH
+ {0xD87D, 0x8C86}, //15181 #CJK UNIFIED IDEOGRAPH
+ {0xD87E, 0x8C87}, //15182 #CJK UNIFIED IDEOGRAPH
+ {0xD880, 0x8C88}, //15183 #CJK UNIFIED IDEOGRAPH
+ {0xD881, 0x8C8B}, //15184 #CJK UNIFIED IDEOGRAPH
+ {0xD882, 0x8C8D}, //15185 #CJK UNIFIED IDEOGRAPH
+ {0xD883, 0x8C8E}, //15186 #CJK UNIFIED IDEOGRAPH
+ {0xD884, 0x8C8F}, //15187 #CJK UNIFIED IDEOGRAPH
+ {0xD885, 0x8C90}, //15188 #CJK UNIFIED IDEOGRAPH
+ {0xD886, 0x8C91}, //15189 #CJK UNIFIED IDEOGRAPH
+ {0xD887, 0x8C92}, //15190 #CJK UNIFIED IDEOGRAPH
+ {0xD888, 0x8C93}, //15191 #CJK UNIFIED IDEOGRAPH
+ {0xD889, 0x8C95}, //15192 #CJK UNIFIED IDEOGRAPH
+ {0xD88A, 0x8C96}, //15193 #CJK UNIFIED IDEOGRAPH
+ {0xD88B, 0x8C97}, //15194 #CJK UNIFIED IDEOGRAPH
+ {0xD88C, 0x8C99}, //15195 #CJK UNIFIED IDEOGRAPH
+ {0xD88D, 0x8C9A}, //15196 #CJK UNIFIED IDEOGRAPH
+ {0xD88E, 0x8C9B}, //15197 #CJK UNIFIED IDEOGRAPH
+ {0xD88F, 0x8C9C}, //15198 #CJK UNIFIED IDEOGRAPH
+ {0xD890, 0x8C9D}, //15199 #CJK UNIFIED IDEOGRAPH
+ {0xD891, 0x8C9E}, //15200 #CJK UNIFIED IDEOGRAPH
+ {0xD892, 0x8C9F}, //15201 #CJK UNIFIED IDEOGRAPH
+ {0xD893, 0x8CA0}, //15202 #CJK UNIFIED IDEOGRAPH
+ {0xD894, 0x8CA1}, //15203 #CJK UNIFIED IDEOGRAPH
+ {0xD895, 0x8CA2}, //15204 #CJK UNIFIED IDEOGRAPH
+ {0xD896, 0x8CA3}, //15205 #CJK UNIFIED IDEOGRAPH
+ {0xD897, 0x8CA4}, //15206 #CJK UNIFIED IDEOGRAPH
+ {0xD898, 0x8CA5}, //15207 #CJK UNIFIED IDEOGRAPH
+ {0xD899, 0x8CA6}, //15208 #CJK UNIFIED IDEOGRAPH
+ {0xD89A, 0x8CA7}, //15209 #CJK UNIFIED IDEOGRAPH
+ {0xD89B, 0x8CA8}, //15210 #CJK UNIFIED IDEOGRAPH
+ {0xD89C, 0x8CA9}, //15211 #CJK UNIFIED IDEOGRAPH
+ {0xD89D, 0x8CAA}, //15212 #CJK UNIFIED IDEOGRAPH
+ {0xD89E, 0x8CAB}, //15213 #CJK UNIFIED IDEOGRAPH
+ {0xD89F, 0x8CAC}, //15214 #CJK UNIFIED IDEOGRAPH
+ {0xD8A0, 0x8CAD}, //15215 #CJK UNIFIED IDEOGRAPH
+ {0xD8A1, 0x4E8D}, //15216 #CJK UNIFIED IDEOGRAPH
+ {0xD8A2, 0x4E0C}, //15217 #CJK UNIFIED IDEOGRAPH
+ {0xD8A3, 0x5140}, //15218 #CJK UNIFIED IDEOGRAPH
+ {0xD8A4, 0x4E10}, //15219 #CJK UNIFIED IDEOGRAPH
+ {0xD8A5, 0x5EFF}, //15220 #CJK UNIFIED IDEOGRAPH
+ {0xD8A6, 0x5345}, //15221 #CJK UNIFIED IDEOGRAPH
+ {0xD8A7, 0x4E15}, //15222 #CJK UNIFIED IDEOGRAPH
+ {0xD8A8, 0x4E98}, //15223 #CJK UNIFIED IDEOGRAPH
+ {0xD8A9, 0x4E1E}, //15224 #CJK UNIFIED IDEOGRAPH
+ {0xD8AA, 0x9B32}, //15225 #CJK UNIFIED IDEOGRAPH
+ {0xD8AB, 0x5B6C}, //15226 #CJK UNIFIED IDEOGRAPH
+ {0xD8AC, 0x5669}, //15227 #CJK UNIFIED IDEOGRAPH
+ {0xD8AD, 0x4E28}, //15228 #CJK UNIFIED IDEOGRAPH
+ {0xD8AE, 0x79BA}, //15229 #CJK UNIFIED IDEOGRAPH
+ {0xD8AF, 0x4E3F}, //15230 #CJK UNIFIED IDEOGRAPH
+ {0xD8B0, 0x5315}, //15231 #CJK UNIFIED IDEOGRAPH
+ {0xD8B1, 0x4E47}, //15232 #CJK UNIFIED IDEOGRAPH
+ {0xD8B2, 0x592D}, //15233 #CJK UNIFIED IDEOGRAPH
+ {0xD8B3, 0x723B}, //15234 #CJK UNIFIED IDEOGRAPH
+ {0xD8B4, 0x536E}, //15235 #CJK UNIFIED IDEOGRAPH
+ {0xD8B5, 0x6C10}, //15236 #CJK UNIFIED IDEOGRAPH
+ {0xD8B6, 0x56DF}, //15237 #CJK UNIFIED IDEOGRAPH
+ {0xD8B7, 0x80E4}, //15238 #CJK UNIFIED IDEOGRAPH
+ {0xD8B8, 0x9997}, //15239 #CJK UNIFIED IDEOGRAPH
+ {0xD8B9, 0x6BD3}, //15240 #CJK UNIFIED IDEOGRAPH
+ {0xD8BA, 0x777E}, //15241 #CJK UNIFIED IDEOGRAPH
+ {0xD8BB, 0x9F17}, //15242 #CJK UNIFIED IDEOGRAPH
+ {0xD8BC, 0x4E36}, //15243 #CJK UNIFIED IDEOGRAPH
+ {0xD8BD, 0x4E9F}, //15244 #CJK UNIFIED IDEOGRAPH
+ {0xD8BE, 0x9F10}, //15245 #CJK UNIFIED IDEOGRAPH
+ {0xD8BF, 0x4E5C}, //15246 #CJK UNIFIED IDEOGRAPH
+ {0xD8C0, 0x4E69}, //15247 #CJK UNIFIED IDEOGRAPH
+ {0xD8C1, 0x4E93}, //15248 #CJK UNIFIED IDEOGRAPH
+ {0xD8C2, 0x8288}, //15249 #CJK UNIFIED IDEOGRAPH
+ {0xD8C3, 0x5B5B}, //15250 #CJK UNIFIED IDEOGRAPH
+ {0xD8C4, 0x556C}, //15251 #CJK UNIFIED IDEOGRAPH
+ {0xD8C5, 0x560F}, //15252 #CJK UNIFIED IDEOGRAPH
+ {0xD8C6, 0x4EC4}, //15253 #CJK UNIFIED IDEOGRAPH
+ {0xD8C7, 0x538D}, //15254 #CJK UNIFIED IDEOGRAPH
+ {0xD8C8, 0x539D}, //15255 #CJK UNIFIED IDEOGRAPH
+ {0xD8C9, 0x53A3}, //15256 #CJK UNIFIED IDEOGRAPH
+ {0xD8CA, 0x53A5}, //15257 #CJK UNIFIED IDEOGRAPH
+ {0xD8CB, 0x53AE}, //15258 #CJK UNIFIED IDEOGRAPH
+ {0xD8CC, 0x9765}, //15259 #CJK UNIFIED IDEOGRAPH
+ {0xD8CD, 0x8D5D}, //15260 #CJK UNIFIED IDEOGRAPH
+ {0xD8CE, 0x531A}, //15261 #CJK UNIFIED IDEOGRAPH
+ {0xD8CF, 0x53F5}, //15262 #CJK UNIFIED IDEOGRAPH
+ {0xD8D0, 0x5326}, //15263 #CJK UNIFIED IDEOGRAPH
+ {0xD8D1, 0x532E}, //15264 #CJK UNIFIED IDEOGRAPH
+ {0xD8D2, 0x533E}, //15265 #CJK UNIFIED IDEOGRAPH
+ {0xD8D3, 0x8D5C}, //15266 #CJK UNIFIED IDEOGRAPH
+ {0xD8D4, 0x5366}, //15267 #CJK UNIFIED IDEOGRAPH
+ {0xD8D5, 0x5363}, //15268 #CJK UNIFIED IDEOGRAPH
+ {0xD8D6, 0x5202}, //15269 #CJK UNIFIED IDEOGRAPH
+ {0xD8D7, 0x5208}, //15270 #CJK UNIFIED IDEOGRAPH
+ {0xD8D8, 0x520E}, //15271 #CJK UNIFIED IDEOGRAPH
+ {0xD8D9, 0x522D}, //15272 #CJK UNIFIED IDEOGRAPH
+ {0xD8DA, 0x5233}, //15273 #CJK UNIFIED IDEOGRAPH
+ {0xD8DB, 0x523F}, //15274 #CJK UNIFIED IDEOGRAPH
+ {0xD8DC, 0x5240}, //15275 #CJK UNIFIED IDEOGRAPH
+ {0xD8DD, 0x524C}, //15276 #CJK UNIFIED IDEOGRAPH
+ {0xD8DE, 0x525E}, //15277 #CJK UNIFIED IDEOGRAPH
+ {0xD8DF, 0x5261}, //15278 #CJK UNIFIED IDEOGRAPH
+ {0xD8E0, 0x525C}, //15279 #CJK UNIFIED IDEOGRAPH
+ {0xD8E1, 0x84AF}, //15280 #CJK UNIFIED IDEOGRAPH
+ {0xD8E2, 0x527D}, //15281 #CJK UNIFIED IDEOGRAPH
+ {0xD8E3, 0x5282}, //15282 #CJK UNIFIED IDEOGRAPH
+ {0xD8E4, 0x5281}, //15283 #CJK UNIFIED IDEOGRAPH
+ {0xD8E5, 0x5290}, //15284 #CJK UNIFIED IDEOGRAPH
+ {0xD8E6, 0x5293}, //15285 #CJK UNIFIED IDEOGRAPH
+ {0xD8E7, 0x5182}, //15286 #CJK UNIFIED IDEOGRAPH
+ {0xD8E8, 0x7F54}, //15287 #CJK UNIFIED IDEOGRAPH
+ {0xD8E9, 0x4EBB}, //15288 #CJK UNIFIED IDEOGRAPH
+ {0xD8EA, 0x4EC3}, //15289 #CJK UNIFIED IDEOGRAPH
+ {0xD8EB, 0x4EC9}, //15290 #CJK UNIFIED IDEOGRAPH
+ {0xD8EC, 0x4EC2}, //15291 #CJK UNIFIED IDEOGRAPH
+ {0xD8ED, 0x4EE8}, //15292 #CJK UNIFIED IDEOGRAPH
+ {0xD8EE, 0x4EE1}, //15293 #CJK UNIFIED IDEOGRAPH
+ {0xD8EF, 0x4EEB}, //15294 #CJK UNIFIED IDEOGRAPH
+ {0xD8F0, 0x4EDE}, //15295 #CJK UNIFIED IDEOGRAPH
+ {0xD8F1, 0x4F1B}, //15296 #CJK UNIFIED IDEOGRAPH
+ {0xD8F2, 0x4EF3}, //15297 #CJK UNIFIED IDEOGRAPH
+ {0xD8F3, 0x4F22}, //15298 #CJK UNIFIED IDEOGRAPH
+ {0xD8F4, 0x4F64}, //15299 #CJK UNIFIED IDEOGRAPH
+ {0xD8F5, 0x4EF5}, //15300 #CJK UNIFIED IDEOGRAPH
+ {0xD8F6, 0x4F25}, //15301 #CJK UNIFIED IDEOGRAPH
+ {0xD8F7, 0x4F27}, //15302 #CJK UNIFIED IDEOGRAPH
+ {0xD8F8, 0x4F09}, //15303 #CJK UNIFIED IDEOGRAPH
+ {0xD8F9, 0x4F2B}, //15304 #CJK UNIFIED IDEOGRAPH
+ {0xD8FA, 0x4F5E}, //15305 #CJK UNIFIED IDEOGRAPH
+ {0xD8FB, 0x4F67}, //15306 #CJK UNIFIED IDEOGRAPH
+ {0xD8FC, 0x6538}, //15307 #CJK UNIFIED IDEOGRAPH
+ {0xD8FD, 0x4F5A}, //15308 #CJK UNIFIED IDEOGRAPH
+ {0xD8FE, 0x4F5D}, //15309 #CJK UNIFIED IDEOGRAPH
+ {0xD940, 0x8CAE}, //15310 #CJK UNIFIED IDEOGRAPH
+ {0xD941, 0x8CAF}, //15311 #CJK UNIFIED IDEOGRAPH
+ {0xD942, 0x8CB0}, //15312 #CJK UNIFIED IDEOGRAPH
+ {0xD943, 0x8CB1}, //15313 #CJK UNIFIED IDEOGRAPH
+ {0xD944, 0x8CB2}, //15314 #CJK UNIFIED IDEOGRAPH
+ {0xD945, 0x8CB3}, //15315 #CJK UNIFIED IDEOGRAPH
+ {0xD946, 0x8CB4}, //15316 #CJK UNIFIED IDEOGRAPH
+ {0xD947, 0x8CB5}, //15317 #CJK UNIFIED IDEOGRAPH
+ {0xD948, 0x8CB6}, //15318 #CJK UNIFIED IDEOGRAPH
+ {0xD949, 0x8CB7}, //15319 #CJK UNIFIED IDEOGRAPH
+ {0xD94A, 0x8CB8}, //15320 #CJK UNIFIED IDEOGRAPH
+ {0xD94B, 0x8CB9}, //15321 #CJK UNIFIED IDEOGRAPH
+ {0xD94C, 0x8CBA}, //15322 #CJK UNIFIED IDEOGRAPH
+ {0xD94D, 0x8CBB}, //15323 #CJK UNIFIED IDEOGRAPH
+ {0xD94E, 0x8CBC}, //15324 #CJK UNIFIED IDEOGRAPH
+ {0xD94F, 0x8CBD}, //15325 #CJK UNIFIED IDEOGRAPH
+ {0xD950, 0x8CBE}, //15326 #CJK UNIFIED IDEOGRAPH
+ {0xD951, 0x8CBF}, //15327 #CJK UNIFIED IDEOGRAPH
+ {0xD952, 0x8CC0}, //15328 #CJK UNIFIED IDEOGRAPH
+ {0xD953, 0x8CC1}, //15329 #CJK UNIFIED IDEOGRAPH
+ {0xD954, 0x8CC2}, //15330 #CJK UNIFIED IDEOGRAPH
+ {0xD955, 0x8CC3}, //15331 #CJK UNIFIED IDEOGRAPH
+ {0xD956, 0x8CC4}, //15332 #CJK UNIFIED IDEOGRAPH
+ {0xD957, 0x8CC5}, //15333 #CJK UNIFIED IDEOGRAPH
+ {0xD958, 0x8CC6}, //15334 #CJK UNIFIED IDEOGRAPH
+ {0xD959, 0x8CC7}, //15335 #CJK UNIFIED IDEOGRAPH
+ {0xD95A, 0x8CC8}, //15336 #CJK UNIFIED IDEOGRAPH
+ {0xD95B, 0x8CC9}, //15337 #CJK UNIFIED IDEOGRAPH
+ {0xD95C, 0x8CCA}, //15338 #CJK UNIFIED IDEOGRAPH
+ {0xD95D, 0x8CCB}, //15339 #CJK UNIFIED IDEOGRAPH
+ {0xD95E, 0x8CCC}, //15340 #CJK UNIFIED IDEOGRAPH
+ {0xD95F, 0x8CCD}, //15341 #CJK UNIFIED IDEOGRAPH
+ {0xD960, 0x8CCE}, //15342 #CJK UNIFIED IDEOGRAPH
+ {0xD961, 0x8CCF}, //15343 #CJK UNIFIED IDEOGRAPH
+ {0xD962, 0x8CD0}, //15344 #CJK UNIFIED IDEOGRAPH
+ {0xD963, 0x8CD1}, //15345 #CJK UNIFIED IDEOGRAPH
+ {0xD964, 0x8CD2}, //15346 #CJK UNIFIED IDEOGRAPH
+ {0xD965, 0x8CD3}, //15347 #CJK UNIFIED IDEOGRAPH
+ {0xD966, 0x8CD4}, //15348 #CJK UNIFIED IDEOGRAPH
+ {0xD967, 0x8CD5}, //15349 #CJK UNIFIED IDEOGRAPH
+ {0xD968, 0x8CD6}, //15350 #CJK UNIFIED IDEOGRAPH
+ {0xD969, 0x8CD7}, //15351 #CJK UNIFIED IDEOGRAPH
+ {0xD96A, 0x8CD8}, //15352 #CJK UNIFIED IDEOGRAPH
+ {0xD96B, 0x8CD9}, //15353 #CJK UNIFIED IDEOGRAPH
+ {0xD96C, 0x8CDA}, //15354 #CJK UNIFIED IDEOGRAPH
+ {0xD96D, 0x8CDB}, //15355 #CJK UNIFIED IDEOGRAPH
+ {0xD96E, 0x8CDC}, //15356 #CJK UNIFIED IDEOGRAPH
+ {0xD96F, 0x8CDD}, //15357 #CJK UNIFIED IDEOGRAPH
+ {0xD970, 0x8CDE}, //15358 #CJK UNIFIED IDEOGRAPH
+ {0xD971, 0x8CDF}, //15359 #CJK UNIFIED IDEOGRAPH
+ {0xD972, 0x8CE0}, //15360 #CJK UNIFIED IDEOGRAPH
+ {0xD973, 0x8CE1}, //15361 #CJK UNIFIED IDEOGRAPH
+ {0xD974, 0x8CE2}, //15362 #CJK UNIFIED IDEOGRAPH
+ {0xD975, 0x8CE3}, //15363 #CJK UNIFIED IDEOGRAPH
+ {0xD976, 0x8CE4}, //15364 #CJK UNIFIED IDEOGRAPH
+ {0xD977, 0x8CE5}, //15365 #CJK UNIFIED IDEOGRAPH
+ {0xD978, 0x8CE6}, //15366 #CJK UNIFIED IDEOGRAPH
+ {0xD979, 0x8CE7}, //15367 #CJK UNIFIED IDEOGRAPH
+ {0xD97A, 0x8CE8}, //15368 #CJK UNIFIED IDEOGRAPH
+ {0xD97B, 0x8CE9}, //15369 #CJK UNIFIED IDEOGRAPH
+ {0xD97C, 0x8CEA}, //15370 #CJK UNIFIED IDEOGRAPH
+ {0xD97D, 0x8CEB}, //15371 #CJK UNIFIED IDEOGRAPH
+ {0xD97E, 0x8CEC}, //15372 #CJK UNIFIED IDEOGRAPH
+ {0xD980, 0x8CED}, //15373 #CJK UNIFIED IDEOGRAPH
+ {0xD981, 0x8CEE}, //15374 #CJK UNIFIED IDEOGRAPH
+ {0xD982, 0x8CEF}, //15375 #CJK UNIFIED IDEOGRAPH
+ {0xD983, 0x8CF0}, //15376 #CJK UNIFIED IDEOGRAPH
+ {0xD984, 0x8CF1}, //15377 #CJK UNIFIED IDEOGRAPH
+ {0xD985, 0x8CF2}, //15378 #CJK UNIFIED IDEOGRAPH
+ {0xD986, 0x8CF3}, //15379 #CJK UNIFIED IDEOGRAPH
+ {0xD987, 0x8CF4}, //15380 #CJK UNIFIED IDEOGRAPH
+ {0xD988, 0x8CF5}, //15381 #CJK UNIFIED IDEOGRAPH
+ {0xD989, 0x8CF6}, //15382 #CJK UNIFIED IDEOGRAPH
+ {0xD98A, 0x8CF7}, //15383 #CJK UNIFIED IDEOGRAPH
+ {0xD98B, 0x8CF8}, //15384 #CJK UNIFIED IDEOGRAPH
+ {0xD98C, 0x8CF9}, //15385 #CJK UNIFIED IDEOGRAPH
+ {0xD98D, 0x8CFA}, //15386 #CJK UNIFIED IDEOGRAPH
+ {0xD98E, 0x8CFB}, //15387 #CJK UNIFIED IDEOGRAPH
+ {0xD98F, 0x8CFC}, //15388 #CJK UNIFIED IDEOGRAPH
+ {0xD990, 0x8CFD}, //15389 #CJK UNIFIED IDEOGRAPH
+ {0xD991, 0x8CFE}, //15390 #CJK UNIFIED IDEOGRAPH
+ {0xD992, 0x8CFF}, //15391 #CJK UNIFIED IDEOGRAPH
+ {0xD993, 0x8D00}, //15392 #CJK UNIFIED IDEOGRAPH
+ {0xD994, 0x8D01}, //15393 #CJK UNIFIED IDEOGRAPH
+ {0xD995, 0x8D02}, //15394 #CJK UNIFIED IDEOGRAPH
+ {0xD996, 0x8D03}, //15395 #CJK UNIFIED IDEOGRAPH
+ {0xD997, 0x8D04}, //15396 #CJK UNIFIED IDEOGRAPH
+ {0xD998, 0x8D05}, //15397 #CJK UNIFIED IDEOGRAPH
+ {0xD999, 0x8D06}, //15398 #CJK UNIFIED IDEOGRAPH
+ {0xD99A, 0x8D07}, //15399 #CJK UNIFIED IDEOGRAPH
+ {0xD99B, 0x8D08}, //15400 #CJK UNIFIED IDEOGRAPH
+ {0xD99C, 0x8D09}, //15401 #CJK UNIFIED IDEOGRAPH
+ {0xD99D, 0x8D0A}, //15402 #CJK UNIFIED IDEOGRAPH
+ {0xD99E, 0x8D0B}, //15403 #CJK UNIFIED IDEOGRAPH
+ {0xD99F, 0x8D0C}, //15404 #CJK UNIFIED IDEOGRAPH
+ {0xD9A0, 0x8D0D}, //15405 #CJK UNIFIED IDEOGRAPH
+ {0xD9A1, 0x4F5F}, //15406 #CJK UNIFIED IDEOGRAPH
+ {0xD9A2, 0x4F57}, //15407 #CJK UNIFIED IDEOGRAPH
+ {0xD9A3, 0x4F32}, //15408 #CJK UNIFIED IDEOGRAPH
+ {0xD9A4, 0x4F3D}, //15409 #CJK UNIFIED IDEOGRAPH
+ {0xD9A5, 0x4F76}, //15410 #CJK UNIFIED IDEOGRAPH
+ {0xD9A6, 0x4F74}, //15411 #CJK UNIFIED IDEOGRAPH
+ {0xD9A7, 0x4F91}, //15412 #CJK UNIFIED IDEOGRAPH
+ {0xD9A8, 0x4F89}, //15413 #CJK UNIFIED IDEOGRAPH
+ {0xD9A9, 0x4F83}, //15414 #CJK UNIFIED IDEOGRAPH
+ {0xD9AA, 0x4F8F}, //15415 #CJK UNIFIED IDEOGRAPH
+ {0xD9AB, 0x4F7E}, //15416 #CJK UNIFIED IDEOGRAPH
+ {0xD9AC, 0x4F7B}, //15417 #CJK UNIFIED IDEOGRAPH
+ {0xD9AD, 0x4FAA}, //15418 #CJK UNIFIED IDEOGRAPH
+ {0xD9AE, 0x4F7C}, //15419 #CJK UNIFIED IDEOGRAPH
+ {0xD9AF, 0x4FAC}, //15420 #CJK UNIFIED IDEOGRAPH
+ {0xD9B0, 0x4F94}, //15421 #CJK UNIFIED IDEOGRAPH
+ {0xD9B1, 0x4FE6}, //15422 #CJK UNIFIED IDEOGRAPH
+ {0xD9B2, 0x4FE8}, //15423 #CJK UNIFIED IDEOGRAPH
+ {0xD9B3, 0x4FEA}, //15424 #CJK UNIFIED IDEOGRAPH
+ {0xD9B4, 0x4FC5}, //15425 #CJK UNIFIED IDEOGRAPH
+ {0xD9B5, 0x4FDA}, //15426 #CJK UNIFIED IDEOGRAPH
+ {0xD9B6, 0x4FE3}, //15427 #CJK UNIFIED IDEOGRAPH
+ {0xD9B7, 0x4FDC}, //15428 #CJK UNIFIED IDEOGRAPH
+ {0xD9B8, 0x4FD1}, //15429 #CJK UNIFIED IDEOGRAPH
+ {0xD9B9, 0x4FDF}, //15430 #CJK UNIFIED IDEOGRAPH
+ {0xD9BA, 0x4FF8}, //15431 #CJK UNIFIED IDEOGRAPH
+ {0xD9BB, 0x5029}, //15432 #CJK UNIFIED IDEOGRAPH
+ {0xD9BC, 0x504C}, //15433 #CJK UNIFIED IDEOGRAPH
+ {0xD9BD, 0x4FF3}, //15434 #CJK UNIFIED IDEOGRAPH
+ {0xD9BE, 0x502C}, //15435 #CJK UNIFIED IDEOGRAPH
+ {0xD9BF, 0x500F}, //15436 #CJK UNIFIED IDEOGRAPH
+ {0xD9C0, 0x502E}, //15437 #CJK UNIFIED IDEOGRAPH
+ {0xD9C1, 0x502D}, //15438 #CJK UNIFIED IDEOGRAPH
+ {0xD9C2, 0x4FFE}, //15439 #CJK UNIFIED IDEOGRAPH
+ {0xD9C3, 0x501C}, //15440 #CJK UNIFIED IDEOGRAPH
+ {0xD9C4, 0x500C}, //15441 #CJK UNIFIED IDEOGRAPH
+ {0xD9C5, 0x5025}, //15442 #CJK UNIFIED IDEOGRAPH
+ {0xD9C6, 0x5028}, //15443 #CJK UNIFIED IDEOGRAPH
+ {0xD9C7, 0x507E}, //15444 #CJK UNIFIED IDEOGRAPH
+ {0xD9C8, 0x5043}, //15445 #CJK UNIFIED IDEOGRAPH
+ {0xD9C9, 0x5055}, //15446 #CJK UNIFIED IDEOGRAPH
+ {0xD9CA, 0x5048}, //15447 #CJK UNIFIED IDEOGRAPH
+ {0xD9CB, 0x504E}, //15448 #CJK UNIFIED IDEOGRAPH
+ {0xD9CC, 0x506C}, //15449 #CJK UNIFIED IDEOGRAPH
+ {0xD9CD, 0x507B}, //15450 #CJK UNIFIED IDEOGRAPH
+ {0xD9CE, 0x50A5}, //15451 #CJK UNIFIED IDEOGRAPH
+ {0xD9CF, 0x50A7}, //15452 #CJK UNIFIED IDEOGRAPH
+ {0xD9D0, 0x50A9}, //15453 #CJK UNIFIED IDEOGRAPH
+ {0xD9D1, 0x50BA}, //15454 #CJK UNIFIED IDEOGRAPH
+ {0xD9D2, 0x50D6}, //15455 #CJK UNIFIED IDEOGRAPH
+ {0xD9D3, 0x5106}, //15456 #CJK UNIFIED IDEOGRAPH
+ {0xD9D4, 0x50ED}, //15457 #CJK UNIFIED IDEOGRAPH
+ {0xD9D5, 0x50EC}, //15458 #CJK UNIFIED IDEOGRAPH
+ {0xD9D6, 0x50E6}, //15459 #CJK UNIFIED IDEOGRAPH
+ {0xD9D7, 0x50EE}, //15460 #CJK UNIFIED IDEOGRAPH
+ {0xD9D8, 0x5107}, //15461 #CJK UNIFIED IDEOGRAPH
+ {0xD9D9, 0x510B}, //15462 #CJK UNIFIED IDEOGRAPH
+ {0xD9DA, 0x4EDD}, //15463 #CJK UNIFIED IDEOGRAPH
+ {0xD9DB, 0x6C3D}, //15464 #CJK UNIFIED IDEOGRAPH
+ {0xD9DC, 0x4F58}, //15465 #CJK UNIFIED IDEOGRAPH
+ {0xD9DD, 0x4F65}, //15466 #CJK UNIFIED IDEOGRAPH
+ {0xD9DE, 0x4FCE}, //15467 #CJK UNIFIED IDEOGRAPH
+ {0xD9DF, 0x9FA0}, //15468 #CJK UNIFIED IDEOGRAPH
+ {0xD9E0, 0x6C46}, //15469 #CJK UNIFIED IDEOGRAPH
+ {0xD9E1, 0x7C74}, //15470 #CJK UNIFIED IDEOGRAPH
+ {0xD9E2, 0x516E}, //15471 #CJK UNIFIED IDEOGRAPH
+ {0xD9E3, 0x5DFD}, //15472 #CJK UNIFIED IDEOGRAPH
+ {0xD9E4, 0x9EC9}, //15473 #CJK UNIFIED IDEOGRAPH
+ {0xD9E5, 0x9998}, //15474 #CJK UNIFIED IDEOGRAPH
+ {0xD9E6, 0x5181}, //15475 #CJK UNIFIED IDEOGRAPH
+ {0xD9E7, 0x5914}, //15476 #CJK UNIFIED IDEOGRAPH
+ {0xD9E8, 0x52F9}, //15477 #CJK UNIFIED IDEOGRAPH
+ {0xD9E9, 0x530D}, //15478 #CJK UNIFIED IDEOGRAPH
+ {0xD9EA, 0x8A07}, //15479 #CJK UNIFIED IDEOGRAPH
+ {0xD9EB, 0x5310}, //15480 #CJK UNIFIED IDEOGRAPH
+ {0xD9EC, 0x51EB}, //15481 #CJK UNIFIED IDEOGRAPH
+ {0xD9ED, 0x5919}, //15482 #CJK UNIFIED IDEOGRAPH
+ {0xD9EE, 0x5155}, //15483 #CJK UNIFIED IDEOGRAPH
+ {0xD9EF, 0x4EA0}, //15484 #CJK UNIFIED IDEOGRAPH
+ {0xD9F0, 0x5156}, //15485 #CJK UNIFIED IDEOGRAPH
+ {0xD9F1, 0x4EB3}, //15486 #CJK UNIFIED IDEOGRAPH
+ {0xD9F2, 0x886E}, //15487 #CJK UNIFIED IDEOGRAPH
+ {0xD9F3, 0x88A4}, //15488 #CJK UNIFIED IDEOGRAPH
+ {0xD9F4, 0x4EB5}, //15489 #CJK UNIFIED IDEOGRAPH
+ {0xD9F5, 0x8114}, //15490 #CJK UNIFIED IDEOGRAPH
+ {0xD9F6, 0x88D2}, //15491 #CJK UNIFIED IDEOGRAPH
+ {0xD9F7, 0x7980}, //15492 #CJK UNIFIED IDEOGRAPH
+ {0xD9F8, 0x5B34}, //15493 #CJK UNIFIED IDEOGRAPH
+ {0xD9F9, 0x8803}, //15494 #CJK UNIFIED IDEOGRAPH
+ {0xD9FA, 0x7FB8}, //15495 #CJK UNIFIED IDEOGRAPH
+ {0xD9FB, 0x51AB}, //15496 #CJK UNIFIED IDEOGRAPH
+ {0xD9FC, 0x51B1}, //15497 #CJK UNIFIED IDEOGRAPH
+ {0xD9FD, 0x51BD}, //15498 #CJK UNIFIED IDEOGRAPH
+ {0xD9FE, 0x51BC}, //15499 #CJK UNIFIED IDEOGRAPH
+ {0xDA40, 0x8D0E}, //15500 #CJK UNIFIED IDEOGRAPH
+ {0xDA41, 0x8D0F}, //15501 #CJK UNIFIED IDEOGRAPH
+ {0xDA42, 0x8D10}, //15502 #CJK UNIFIED IDEOGRAPH
+ {0xDA43, 0x8D11}, //15503 #CJK UNIFIED IDEOGRAPH
+ {0xDA44, 0x8D12}, //15504 #CJK UNIFIED IDEOGRAPH
+ {0xDA45, 0x8D13}, //15505 #CJK UNIFIED IDEOGRAPH
+ {0xDA46, 0x8D14}, //15506 #CJK UNIFIED IDEOGRAPH
+ {0xDA47, 0x8D15}, //15507 #CJK UNIFIED IDEOGRAPH
+ {0xDA48, 0x8D16}, //15508 #CJK UNIFIED IDEOGRAPH
+ {0xDA49, 0x8D17}, //15509 #CJK UNIFIED IDEOGRAPH
+ {0xDA4A, 0x8D18}, //15510 #CJK UNIFIED IDEOGRAPH
+ {0xDA4B, 0x8D19}, //15511 #CJK UNIFIED IDEOGRAPH
+ {0xDA4C, 0x8D1A}, //15512 #CJK UNIFIED IDEOGRAPH
+ {0xDA4D, 0x8D1B}, //15513 #CJK UNIFIED IDEOGRAPH
+ {0xDA4E, 0x8D1C}, //15514 #CJK UNIFIED IDEOGRAPH
+ {0xDA4F, 0x8D20}, //15515 #CJK UNIFIED IDEOGRAPH
+ {0xDA50, 0x8D51}, //15516 #CJK UNIFIED IDEOGRAPH
+ {0xDA51, 0x8D52}, //15517 #CJK UNIFIED IDEOGRAPH
+ {0xDA52, 0x8D57}, //15518 #CJK UNIFIED IDEOGRAPH
+ {0xDA53, 0x8D5F}, //15519 #CJK UNIFIED IDEOGRAPH
+ {0xDA54, 0x8D65}, //15520 #CJK UNIFIED IDEOGRAPH
+ {0xDA55, 0x8D68}, //15521 #CJK UNIFIED IDEOGRAPH
+ {0xDA56, 0x8D69}, //15522 #CJK UNIFIED IDEOGRAPH
+ {0xDA57, 0x8D6A}, //15523 #CJK UNIFIED IDEOGRAPH
+ {0xDA58, 0x8D6C}, //15524 #CJK UNIFIED IDEOGRAPH
+ {0xDA59, 0x8D6E}, //15525 #CJK UNIFIED IDEOGRAPH
+ {0xDA5A, 0x8D6F}, //15526 #CJK UNIFIED IDEOGRAPH
+ {0xDA5B, 0x8D71}, //15527 #CJK UNIFIED IDEOGRAPH
+ {0xDA5C, 0x8D72}, //15528 #CJK UNIFIED IDEOGRAPH
+ {0xDA5D, 0x8D78}, //15529 #CJK UNIFIED IDEOGRAPH
+ {0xDA5E, 0x8D79}, //15530 #CJK UNIFIED IDEOGRAPH
+ {0xDA5F, 0x8D7A}, //15531 #CJK UNIFIED IDEOGRAPH
+ {0xDA60, 0x8D7B}, //15532 #CJK UNIFIED IDEOGRAPH
+ {0xDA61, 0x8D7C}, //15533 #CJK UNIFIED IDEOGRAPH
+ {0xDA62, 0x8D7D}, //15534 #CJK UNIFIED IDEOGRAPH
+ {0xDA63, 0x8D7E}, //15535 #CJK UNIFIED IDEOGRAPH
+ {0xDA64, 0x8D7F}, //15536 #CJK UNIFIED IDEOGRAPH
+ {0xDA65, 0x8D80}, //15537 #CJK UNIFIED IDEOGRAPH
+ {0xDA66, 0x8D82}, //15538 #CJK UNIFIED IDEOGRAPH
+ {0xDA67, 0x8D83}, //15539 #CJK UNIFIED IDEOGRAPH
+ {0xDA68, 0x8D86}, //15540 #CJK UNIFIED IDEOGRAPH
+ {0xDA69, 0x8D87}, //15541 #CJK UNIFIED IDEOGRAPH
+ {0xDA6A, 0x8D88}, //15542 #CJK UNIFIED IDEOGRAPH
+ {0xDA6B, 0x8D89}, //15543 #CJK UNIFIED IDEOGRAPH
+ {0xDA6C, 0x8D8C}, //15544 #CJK UNIFIED IDEOGRAPH
+ {0xDA6D, 0x8D8D}, //15545 #CJK UNIFIED IDEOGRAPH
+ {0xDA6E, 0x8D8E}, //15546 #CJK UNIFIED IDEOGRAPH
+ {0xDA6F, 0x8D8F}, //15547 #CJK UNIFIED IDEOGRAPH
+ {0xDA70, 0x8D90}, //15548 #CJK UNIFIED IDEOGRAPH
+ {0xDA71, 0x8D92}, //15549 #CJK UNIFIED IDEOGRAPH
+ {0xDA72, 0x8D93}, //15550 #CJK UNIFIED IDEOGRAPH
+ {0xDA73, 0x8D95}, //15551 #CJK UNIFIED IDEOGRAPH
+ {0xDA74, 0x8D96}, //15552 #CJK UNIFIED IDEOGRAPH
+ {0xDA75, 0x8D97}, //15553 #CJK UNIFIED IDEOGRAPH
+ {0xDA76, 0x8D98}, //15554 #CJK UNIFIED IDEOGRAPH
+ {0xDA77, 0x8D99}, //15555 #CJK UNIFIED IDEOGRAPH
+ {0xDA78, 0x8D9A}, //15556 #CJK UNIFIED IDEOGRAPH
+ {0xDA79, 0x8D9B}, //15557 #CJK UNIFIED IDEOGRAPH
+ {0xDA7A, 0x8D9C}, //15558 #CJK UNIFIED IDEOGRAPH
+ {0xDA7B, 0x8D9D}, //15559 #CJK UNIFIED IDEOGRAPH
+ {0xDA7C, 0x8D9E}, //15560 #CJK UNIFIED IDEOGRAPH
+ {0xDA7D, 0x8DA0}, //15561 #CJK UNIFIED IDEOGRAPH
+ {0xDA7E, 0x8DA1}, //15562 #CJK UNIFIED IDEOGRAPH
+ {0xDA80, 0x8DA2}, //15563 #CJK UNIFIED IDEOGRAPH
+ {0xDA81, 0x8DA4}, //15564 #CJK UNIFIED IDEOGRAPH
+ {0xDA82, 0x8DA5}, //15565 #CJK UNIFIED IDEOGRAPH
+ {0xDA83, 0x8DA6}, //15566 #CJK UNIFIED IDEOGRAPH
+ {0xDA84, 0x8DA7}, //15567 #CJK UNIFIED IDEOGRAPH
+ {0xDA85, 0x8DA8}, //15568 #CJK UNIFIED IDEOGRAPH
+ {0xDA86, 0x8DA9}, //15569 #CJK UNIFIED IDEOGRAPH
+ {0xDA87, 0x8DAA}, //15570 #CJK UNIFIED IDEOGRAPH
+ {0xDA88, 0x8DAB}, //15571 #CJK UNIFIED IDEOGRAPH
+ {0xDA89, 0x8DAC}, //15572 #CJK UNIFIED IDEOGRAPH
+ {0xDA8A, 0x8DAD}, //15573 #CJK UNIFIED IDEOGRAPH
+ {0xDA8B, 0x8DAE}, //15574 #CJK UNIFIED IDEOGRAPH
+ {0xDA8C, 0x8DAF}, //15575 #CJK UNIFIED IDEOGRAPH
+ {0xDA8D, 0x8DB0}, //15576 #CJK UNIFIED IDEOGRAPH
+ {0xDA8E, 0x8DB2}, //15577 #CJK UNIFIED IDEOGRAPH
+ {0xDA8F, 0x8DB6}, //15578 #CJK UNIFIED IDEOGRAPH
+ {0xDA90, 0x8DB7}, //15579 #CJK UNIFIED IDEOGRAPH
+ {0xDA91, 0x8DB9}, //15580 #CJK UNIFIED IDEOGRAPH
+ {0xDA92, 0x8DBB}, //15581 #CJK UNIFIED IDEOGRAPH
+ {0xDA93, 0x8DBD}, //15582 #CJK UNIFIED IDEOGRAPH
+ {0xDA94, 0x8DC0}, //15583 #CJK UNIFIED IDEOGRAPH
+ {0xDA95, 0x8DC1}, //15584 #CJK UNIFIED IDEOGRAPH
+ {0xDA96, 0x8DC2}, //15585 #CJK UNIFIED IDEOGRAPH
+ {0xDA97, 0x8DC5}, //15586 #CJK UNIFIED IDEOGRAPH
+ {0xDA98, 0x8DC7}, //15587 #CJK UNIFIED IDEOGRAPH
+ {0xDA99, 0x8DC8}, //15588 #CJK UNIFIED IDEOGRAPH
+ {0xDA9A, 0x8DC9}, //15589 #CJK UNIFIED IDEOGRAPH
+ {0xDA9B, 0x8DCA}, //15590 #CJK UNIFIED IDEOGRAPH
+ {0xDA9C, 0x8DCD}, //15591 #CJK UNIFIED IDEOGRAPH
+ {0xDA9D, 0x8DD0}, //15592 #CJK UNIFIED IDEOGRAPH
+ {0xDA9E, 0x8DD2}, //15593 #CJK UNIFIED IDEOGRAPH
+ {0xDA9F, 0x8DD3}, //15594 #CJK UNIFIED IDEOGRAPH
+ {0xDAA0, 0x8DD4}, //15595 #CJK UNIFIED IDEOGRAPH
+ {0xDAA1, 0x51C7}, //15596 #CJK UNIFIED IDEOGRAPH
+ {0xDAA2, 0x5196}, //15597 #CJK UNIFIED IDEOGRAPH
+ {0xDAA3, 0x51A2}, //15598 #CJK UNIFIED IDEOGRAPH
+ {0xDAA4, 0x51A5}, //15599 #CJK UNIFIED IDEOGRAPH
+ {0xDAA5, 0x8BA0}, //15600 #CJK UNIFIED IDEOGRAPH
+ {0xDAA6, 0x8BA6}, //15601 #CJK UNIFIED IDEOGRAPH
+ {0xDAA7, 0x8BA7}, //15602 #CJK UNIFIED IDEOGRAPH
+ {0xDAA8, 0x8BAA}, //15603 #CJK UNIFIED IDEOGRAPH
+ {0xDAA9, 0x8BB4}, //15604 #CJK UNIFIED IDEOGRAPH
+ {0xDAAA, 0x8BB5}, //15605 #CJK UNIFIED IDEOGRAPH
+ {0xDAAB, 0x8BB7}, //15606 #CJK UNIFIED IDEOGRAPH
+ {0xDAAC, 0x8BC2}, //15607 #CJK UNIFIED IDEOGRAPH
+ {0xDAAD, 0x8BC3}, //15608 #CJK UNIFIED IDEOGRAPH
+ {0xDAAE, 0x8BCB}, //15609 #CJK UNIFIED IDEOGRAPH
+ {0xDAAF, 0x8BCF}, //15610 #CJK UNIFIED IDEOGRAPH
+ {0xDAB0, 0x8BCE}, //15611 #CJK UNIFIED IDEOGRAPH
+ {0xDAB1, 0x8BD2}, //15612 #CJK UNIFIED IDEOGRAPH
+ {0xDAB2, 0x8BD3}, //15613 #CJK UNIFIED IDEOGRAPH
+ {0xDAB3, 0x8BD4}, //15614 #CJK UNIFIED IDEOGRAPH
+ {0xDAB4, 0x8BD6}, //15615 #CJK UNIFIED IDEOGRAPH
+ {0xDAB5, 0x8BD8}, //15616 #CJK UNIFIED IDEOGRAPH
+ {0xDAB6, 0x8BD9}, //15617 #CJK UNIFIED IDEOGRAPH
+ {0xDAB7, 0x8BDC}, //15618 #CJK UNIFIED IDEOGRAPH
+ {0xDAB8, 0x8BDF}, //15619 #CJK UNIFIED IDEOGRAPH
+ {0xDAB9, 0x8BE0}, //15620 #CJK UNIFIED IDEOGRAPH
+ {0xDABA, 0x8BE4}, //15621 #CJK UNIFIED IDEOGRAPH
+ {0xDABB, 0x8BE8}, //15622 #CJK UNIFIED IDEOGRAPH
+ {0xDABC, 0x8BE9}, //15623 #CJK UNIFIED IDEOGRAPH
+ {0xDABD, 0x8BEE}, //15624 #CJK UNIFIED IDEOGRAPH
+ {0xDABE, 0x8BF0}, //15625 #CJK UNIFIED IDEOGRAPH
+ {0xDABF, 0x8BF3}, //15626 #CJK UNIFIED IDEOGRAPH
+ {0xDAC0, 0x8BF6}, //15627 #CJK UNIFIED IDEOGRAPH
+ {0xDAC1, 0x8BF9}, //15628 #CJK UNIFIED IDEOGRAPH
+ {0xDAC2, 0x8BFC}, //15629 #CJK UNIFIED IDEOGRAPH
+ {0xDAC3, 0x8BFF}, //15630 #CJK UNIFIED IDEOGRAPH
+ {0xDAC4, 0x8C00}, //15631 #CJK UNIFIED IDEOGRAPH
+ {0xDAC5, 0x8C02}, //15632 #CJK UNIFIED IDEOGRAPH
+ {0xDAC6, 0x8C04}, //15633 #CJK UNIFIED IDEOGRAPH
+ {0xDAC7, 0x8C07}, //15634 #CJK UNIFIED IDEOGRAPH
+ {0xDAC8, 0x8C0C}, //15635 #CJK UNIFIED IDEOGRAPH
+ {0xDAC9, 0x8C0F}, //15636 #CJK UNIFIED IDEOGRAPH
+ {0xDACA, 0x8C11}, //15637 #CJK UNIFIED IDEOGRAPH
+ {0xDACB, 0x8C12}, //15638 #CJK UNIFIED IDEOGRAPH
+ {0xDACC, 0x8C14}, //15639 #CJK UNIFIED IDEOGRAPH
+ {0xDACD, 0x8C15}, //15640 #CJK UNIFIED IDEOGRAPH
+ {0xDACE, 0x8C16}, //15641 #CJK UNIFIED IDEOGRAPH
+ {0xDACF, 0x8C19}, //15642 #CJK UNIFIED IDEOGRAPH
+ {0xDAD0, 0x8C1B}, //15643 #CJK UNIFIED IDEOGRAPH
+ {0xDAD1, 0x8C18}, //15644 #CJK UNIFIED IDEOGRAPH
+ {0xDAD2, 0x8C1D}, //15645 #CJK UNIFIED IDEOGRAPH
+ {0xDAD3, 0x8C1F}, //15646 #CJK UNIFIED IDEOGRAPH
+ {0xDAD4, 0x8C20}, //15647 #CJK UNIFIED IDEOGRAPH
+ {0xDAD5, 0x8C21}, //15648 #CJK UNIFIED IDEOGRAPH
+ {0xDAD6, 0x8C25}, //15649 #CJK UNIFIED IDEOGRAPH
+ {0xDAD7, 0x8C27}, //15650 #CJK UNIFIED IDEOGRAPH
+ {0xDAD8, 0x8C2A}, //15651 #CJK UNIFIED IDEOGRAPH
+ {0xDAD9, 0x8C2B}, //15652 #CJK UNIFIED IDEOGRAPH
+ {0xDADA, 0x8C2E}, //15653 #CJK UNIFIED IDEOGRAPH
+ {0xDADB, 0x8C2F}, //15654 #CJK UNIFIED IDEOGRAPH
+ {0xDADC, 0x8C32}, //15655 #CJK UNIFIED IDEOGRAPH
+ {0xDADD, 0x8C33}, //15656 #CJK UNIFIED IDEOGRAPH
+ {0xDADE, 0x8C35}, //15657 #CJK UNIFIED IDEOGRAPH
+ {0xDADF, 0x8C36}, //15658 #CJK UNIFIED IDEOGRAPH
+ {0xDAE0, 0x5369}, //15659 #CJK UNIFIED IDEOGRAPH
+ {0xDAE1, 0x537A}, //15660 #CJK UNIFIED IDEOGRAPH
+ {0xDAE2, 0x961D}, //15661 #CJK UNIFIED IDEOGRAPH
+ {0xDAE3, 0x9622}, //15662 #CJK UNIFIED IDEOGRAPH
+ {0xDAE4, 0x9621}, //15663 #CJK UNIFIED IDEOGRAPH
+ {0xDAE5, 0x9631}, //15664 #CJK UNIFIED IDEOGRAPH
+ {0xDAE6, 0x962A}, //15665 #CJK UNIFIED IDEOGRAPH
+ {0xDAE7, 0x963D}, //15666 #CJK UNIFIED IDEOGRAPH
+ {0xDAE8, 0x963C}, //15667 #CJK UNIFIED IDEOGRAPH
+ {0xDAE9, 0x9642}, //15668 #CJK UNIFIED IDEOGRAPH
+ {0xDAEA, 0x9649}, //15669 #CJK UNIFIED IDEOGRAPH
+ {0xDAEB, 0x9654}, //15670 #CJK UNIFIED IDEOGRAPH
+ {0xDAEC, 0x965F}, //15671 #CJK UNIFIED IDEOGRAPH
+ {0xDAED, 0x9667}, //15672 #CJK UNIFIED IDEOGRAPH
+ {0xDAEE, 0x966C}, //15673 #CJK UNIFIED IDEOGRAPH
+ {0xDAEF, 0x9672}, //15674 #CJK UNIFIED IDEOGRAPH
+ {0xDAF0, 0x9674}, //15675 #CJK UNIFIED IDEOGRAPH
+ {0xDAF1, 0x9688}, //15676 #CJK UNIFIED IDEOGRAPH
+ {0xDAF2, 0x968D}, //15677 #CJK UNIFIED IDEOGRAPH
+ {0xDAF3, 0x9697}, //15678 #CJK UNIFIED IDEOGRAPH
+ {0xDAF4, 0x96B0}, //15679 #CJK UNIFIED IDEOGRAPH
+ {0xDAF5, 0x9097}, //15680 #CJK UNIFIED IDEOGRAPH
+ {0xDAF6, 0x909B}, //15681 #CJK UNIFIED IDEOGRAPH
+ {0xDAF7, 0x909D}, //15682 #CJK UNIFIED IDEOGRAPH
+ {0xDAF8, 0x9099}, //15683 #CJK UNIFIED IDEOGRAPH
+ {0xDAF9, 0x90AC}, //15684 #CJK UNIFIED IDEOGRAPH
+ {0xDAFA, 0x90A1}, //15685 #CJK UNIFIED IDEOGRAPH
+ {0xDAFB, 0x90B4}, //15686 #CJK UNIFIED IDEOGRAPH
+ {0xDAFC, 0x90B3}, //15687 #CJK UNIFIED IDEOGRAPH
+ {0xDAFD, 0x90B6}, //15688 #CJK UNIFIED IDEOGRAPH
+ {0xDAFE, 0x90BA}, //15689 #CJK UNIFIED IDEOGRAPH
+ {0xDB40, 0x8DD5}, //15690 #CJK UNIFIED IDEOGRAPH
+ {0xDB41, 0x8DD8}, //15691 #CJK UNIFIED IDEOGRAPH
+ {0xDB42, 0x8DD9}, //15692 #CJK UNIFIED IDEOGRAPH
+ {0xDB43, 0x8DDC}, //15693 #CJK UNIFIED IDEOGRAPH
+ {0xDB44, 0x8DE0}, //15694 #CJK UNIFIED IDEOGRAPH
+ {0xDB45, 0x8DE1}, //15695 #CJK UNIFIED IDEOGRAPH
+ {0xDB46, 0x8DE2}, //15696 #CJK UNIFIED IDEOGRAPH
+ {0xDB47, 0x8DE5}, //15697 #CJK UNIFIED IDEOGRAPH
+ {0xDB48, 0x8DE6}, //15698 #CJK UNIFIED IDEOGRAPH
+ {0xDB49, 0x8DE7}, //15699 #CJK UNIFIED IDEOGRAPH
+ {0xDB4A, 0x8DE9}, //15700 #CJK UNIFIED IDEOGRAPH
+ {0xDB4B, 0x8DED}, //15701 #CJK UNIFIED IDEOGRAPH
+ {0xDB4C, 0x8DEE}, //15702 #CJK UNIFIED IDEOGRAPH
+ {0xDB4D, 0x8DF0}, //15703 #CJK UNIFIED IDEOGRAPH
+ {0xDB4E, 0x8DF1}, //15704 #CJK UNIFIED IDEOGRAPH
+ {0xDB4F, 0x8DF2}, //15705 #CJK UNIFIED IDEOGRAPH
+ {0xDB50, 0x8DF4}, //15706 #CJK UNIFIED IDEOGRAPH
+ {0xDB51, 0x8DF6}, //15707 #CJK UNIFIED IDEOGRAPH
+ {0xDB52, 0x8DFC}, //15708 #CJK UNIFIED IDEOGRAPH
+ {0xDB53, 0x8DFE}, //15709 #CJK UNIFIED IDEOGRAPH
+ {0xDB54, 0x8DFF}, //15710 #CJK UNIFIED IDEOGRAPH
+ {0xDB55, 0x8E00}, //15711 #CJK UNIFIED IDEOGRAPH
+ {0xDB56, 0x8E01}, //15712 #CJK UNIFIED IDEOGRAPH
+ {0xDB57, 0x8E02}, //15713 #CJK UNIFIED IDEOGRAPH
+ {0xDB58, 0x8E03}, //15714 #CJK UNIFIED IDEOGRAPH
+ {0xDB59, 0x8E04}, //15715 #CJK UNIFIED IDEOGRAPH
+ {0xDB5A, 0x8E06}, //15716 #CJK UNIFIED IDEOGRAPH
+ {0xDB5B, 0x8E07}, //15717 #CJK UNIFIED IDEOGRAPH
+ {0xDB5C, 0x8E08}, //15718 #CJK UNIFIED IDEOGRAPH
+ {0xDB5D, 0x8E0B}, //15719 #CJK UNIFIED IDEOGRAPH
+ {0xDB5E, 0x8E0D}, //15720 #CJK UNIFIED IDEOGRAPH
+ {0xDB5F, 0x8E0E}, //15721 #CJK UNIFIED IDEOGRAPH
+ {0xDB60, 0x8E10}, //15722 #CJK UNIFIED IDEOGRAPH
+ {0xDB61, 0x8E11}, //15723 #CJK UNIFIED IDEOGRAPH
+ {0xDB62, 0x8E12}, //15724 #CJK UNIFIED IDEOGRAPH
+ {0xDB63, 0x8E13}, //15725 #CJK UNIFIED IDEOGRAPH
+ {0xDB64, 0x8E15}, //15726 #CJK UNIFIED IDEOGRAPH
+ {0xDB65, 0x8E16}, //15727 #CJK UNIFIED IDEOGRAPH
+ {0xDB66, 0x8E17}, //15728 #CJK UNIFIED IDEOGRAPH
+ {0xDB67, 0x8E18}, //15729 #CJK UNIFIED IDEOGRAPH
+ {0xDB68, 0x8E19}, //15730 #CJK UNIFIED IDEOGRAPH
+ {0xDB69, 0x8E1A}, //15731 #CJK UNIFIED IDEOGRAPH
+ {0xDB6A, 0x8E1B}, //15732 #CJK UNIFIED IDEOGRAPH
+ {0xDB6B, 0x8E1C}, //15733 #CJK UNIFIED IDEOGRAPH
+ {0xDB6C, 0x8E20}, //15734 #CJK UNIFIED IDEOGRAPH
+ {0xDB6D, 0x8E21}, //15735 #CJK UNIFIED IDEOGRAPH
+ {0xDB6E, 0x8E24}, //15736 #CJK UNIFIED IDEOGRAPH
+ {0xDB6F, 0x8E25}, //15737 #CJK UNIFIED IDEOGRAPH
+ {0xDB70, 0x8E26}, //15738 #CJK UNIFIED IDEOGRAPH
+ {0xDB71, 0x8E27}, //15739 #CJK UNIFIED IDEOGRAPH
+ {0xDB72, 0x8E28}, //15740 #CJK UNIFIED IDEOGRAPH
+ {0xDB73, 0x8E2B}, //15741 #CJK UNIFIED IDEOGRAPH
+ {0xDB74, 0x8E2D}, //15742 #CJK UNIFIED IDEOGRAPH
+ {0xDB75, 0x8E30}, //15743 #CJK UNIFIED IDEOGRAPH
+ {0xDB76, 0x8E32}, //15744 #CJK UNIFIED IDEOGRAPH
+ {0xDB77, 0x8E33}, //15745 #CJK UNIFIED IDEOGRAPH
+ {0xDB78, 0x8E34}, //15746 #CJK UNIFIED IDEOGRAPH
+ {0xDB79, 0x8E36}, //15747 #CJK UNIFIED IDEOGRAPH
+ {0xDB7A, 0x8E37}, //15748 #CJK UNIFIED IDEOGRAPH
+ {0xDB7B, 0x8E38}, //15749 #CJK UNIFIED IDEOGRAPH
+ {0xDB7C, 0x8E3B}, //15750 #CJK UNIFIED IDEOGRAPH
+ {0xDB7D, 0x8E3C}, //15751 #CJK UNIFIED IDEOGRAPH
+ {0xDB7E, 0x8E3E}, //15752 #CJK UNIFIED IDEOGRAPH
+ {0xDB80, 0x8E3F}, //15753 #CJK UNIFIED IDEOGRAPH
+ {0xDB81, 0x8E43}, //15754 #CJK UNIFIED IDEOGRAPH
+ {0xDB82, 0x8E45}, //15755 #CJK UNIFIED IDEOGRAPH
+ {0xDB83, 0x8E46}, //15756 #CJK UNIFIED IDEOGRAPH
+ {0xDB84, 0x8E4C}, //15757 #CJK UNIFIED IDEOGRAPH
+ {0xDB85, 0x8E4D}, //15758 #CJK UNIFIED IDEOGRAPH
+ {0xDB86, 0x8E4E}, //15759 #CJK UNIFIED IDEOGRAPH
+ {0xDB87, 0x8E4F}, //15760 #CJK UNIFIED IDEOGRAPH
+ {0xDB88, 0x8E50}, //15761 #CJK UNIFIED IDEOGRAPH
+ {0xDB89, 0x8E53}, //15762 #CJK UNIFIED IDEOGRAPH
+ {0xDB8A, 0x8E54}, //15763 #CJK UNIFIED IDEOGRAPH
+ {0xDB8B, 0x8E55}, //15764 #CJK UNIFIED IDEOGRAPH
+ {0xDB8C, 0x8E56}, //15765 #CJK UNIFIED IDEOGRAPH
+ {0xDB8D, 0x8E57}, //15766 #CJK UNIFIED IDEOGRAPH
+ {0xDB8E, 0x8E58}, //15767 #CJK UNIFIED IDEOGRAPH
+ {0xDB8F, 0x8E5A}, //15768 #CJK UNIFIED IDEOGRAPH
+ {0xDB90, 0x8E5B}, //15769 #CJK UNIFIED IDEOGRAPH
+ {0xDB91, 0x8E5C}, //15770 #CJK UNIFIED IDEOGRAPH
+ {0xDB92, 0x8E5D}, //15771 #CJK UNIFIED IDEOGRAPH
+ {0xDB93, 0x8E5E}, //15772 #CJK UNIFIED IDEOGRAPH
+ {0xDB94, 0x8E5F}, //15773 #CJK UNIFIED IDEOGRAPH
+ {0xDB95, 0x8E60}, //15774 #CJK UNIFIED IDEOGRAPH
+ {0xDB96, 0x8E61}, //15775 #CJK UNIFIED IDEOGRAPH
+ {0xDB97, 0x8E62}, //15776 #CJK UNIFIED IDEOGRAPH
+ {0xDB98, 0x8E63}, //15777 #CJK UNIFIED IDEOGRAPH
+ {0xDB99, 0x8E64}, //15778 #CJK UNIFIED IDEOGRAPH
+ {0xDB9A, 0x8E65}, //15779 #CJK UNIFIED IDEOGRAPH
+ {0xDB9B, 0x8E67}, //15780 #CJK UNIFIED IDEOGRAPH
+ {0xDB9C, 0x8E68}, //15781 #CJK UNIFIED IDEOGRAPH
+ {0xDB9D, 0x8E6A}, //15782 #CJK UNIFIED IDEOGRAPH
+ {0xDB9E, 0x8E6B}, //15783 #CJK UNIFIED IDEOGRAPH
+ {0xDB9F, 0x8E6E}, //15784 #CJK UNIFIED IDEOGRAPH
+ {0xDBA0, 0x8E71}, //15785 #CJK UNIFIED IDEOGRAPH
+ {0xDBA1, 0x90B8}, //15786 #CJK UNIFIED IDEOGRAPH
+ {0xDBA2, 0x90B0}, //15787 #CJK UNIFIED IDEOGRAPH
+ {0xDBA3, 0x90CF}, //15788 #CJK UNIFIED IDEOGRAPH
+ {0xDBA4, 0x90C5}, //15789 #CJK UNIFIED IDEOGRAPH
+ {0xDBA5, 0x90BE}, //15790 #CJK UNIFIED IDEOGRAPH
+ {0xDBA6, 0x90D0}, //15791 #CJK UNIFIED IDEOGRAPH
+ {0xDBA7, 0x90C4}, //15792 #CJK UNIFIED IDEOGRAPH
+ {0xDBA8, 0x90C7}, //15793 #CJK UNIFIED IDEOGRAPH
+ {0xDBA9, 0x90D3}, //15794 #CJK UNIFIED IDEOGRAPH
+ {0xDBAA, 0x90E6}, //15795 #CJK UNIFIED IDEOGRAPH
+ {0xDBAB, 0x90E2}, //15796 #CJK UNIFIED IDEOGRAPH
+ {0xDBAC, 0x90DC}, //15797 #CJK UNIFIED IDEOGRAPH
+ {0xDBAD, 0x90D7}, //15798 #CJK UNIFIED IDEOGRAPH
+ {0xDBAE, 0x90DB}, //15799 #CJK UNIFIED IDEOGRAPH
+ {0xDBAF, 0x90EB}, //15800 #CJK UNIFIED IDEOGRAPH
+ {0xDBB0, 0x90EF}, //15801 #CJK UNIFIED IDEOGRAPH
+ {0xDBB1, 0x90FE}, //15802 #CJK UNIFIED IDEOGRAPH
+ {0xDBB2, 0x9104}, //15803 #CJK UNIFIED IDEOGRAPH
+ {0xDBB3, 0x9122}, //15804 #CJK UNIFIED IDEOGRAPH
+ {0xDBB4, 0x911E}, //15805 #CJK UNIFIED IDEOGRAPH
+ {0xDBB5, 0x9123}, //15806 #CJK UNIFIED IDEOGRAPH
+ {0xDBB6, 0x9131}, //15807 #CJK UNIFIED IDEOGRAPH
+ {0xDBB7, 0x912F}, //15808 #CJK UNIFIED IDEOGRAPH
+ {0xDBB8, 0x9139}, //15809 #CJK UNIFIED IDEOGRAPH
+ {0xDBB9, 0x9143}, //15810 #CJK UNIFIED IDEOGRAPH
+ {0xDBBA, 0x9146}, //15811 #CJK UNIFIED IDEOGRAPH
+ {0xDBBB, 0x520D}, //15812 #CJK UNIFIED IDEOGRAPH
+ {0xDBBC, 0x5942}, //15813 #CJK UNIFIED IDEOGRAPH
+ {0xDBBD, 0x52A2}, //15814 #CJK UNIFIED IDEOGRAPH
+ {0xDBBE, 0x52AC}, //15815 #CJK UNIFIED IDEOGRAPH
+ {0xDBBF, 0x52AD}, //15816 #CJK UNIFIED IDEOGRAPH
+ {0xDBC0, 0x52BE}, //15817 #CJK UNIFIED IDEOGRAPH
+ {0xDBC1, 0x54FF}, //15818 #CJK UNIFIED IDEOGRAPH
+ {0xDBC2, 0x52D0}, //15819 #CJK UNIFIED IDEOGRAPH
+ {0xDBC3, 0x52D6}, //15820 #CJK UNIFIED IDEOGRAPH
+ {0xDBC4, 0x52F0}, //15821 #CJK UNIFIED IDEOGRAPH
+ {0xDBC5, 0x53DF}, //15822 #CJK UNIFIED IDEOGRAPH
+ {0xDBC6, 0x71EE}, //15823 #CJK UNIFIED IDEOGRAPH
+ {0xDBC7, 0x77CD}, //15824 #CJK UNIFIED IDEOGRAPH
+ {0xDBC8, 0x5EF4}, //15825 #CJK UNIFIED IDEOGRAPH
+ {0xDBC9, 0x51F5}, //15826 #CJK UNIFIED IDEOGRAPH
+ {0xDBCA, 0x51FC}, //15827 #CJK UNIFIED IDEOGRAPH
+ {0xDBCB, 0x9B2F}, //15828 #CJK UNIFIED IDEOGRAPH
+ {0xDBCC, 0x53B6}, //15829 #CJK UNIFIED IDEOGRAPH
+ {0xDBCD, 0x5F01}, //15830 #CJK UNIFIED IDEOGRAPH
+ {0xDBCE, 0x755A}, //15831 #CJK UNIFIED IDEOGRAPH
+ {0xDBCF, 0x5DEF}, //15832 #CJK UNIFIED IDEOGRAPH
+ {0xDBD0, 0x574C}, //15833 #CJK UNIFIED IDEOGRAPH
+ {0xDBD1, 0x57A9}, //15834 #CJK UNIFIED IDEOGRAPH
+ {0xDBD2, 0x57A1}, //15835 #CJK UNIFIED IDEOGRAPH
+ {0xDBD3, 0x587E}, //15836 #CJK UNIFIED IDEOGRAPH
+ {0xDBD4, 0x58BC}, //15837 #CJK UNIFIED IDEOGRAPH
+ {0xDBD5, 0x58C5}, //15838 #CJK UNIFIED IDEOGRAPH
+ {0xDBD6, 0x58D1}, //15839 #CJK UNIFIED IDEOGRAPH
+ {0xDBD7, 0x5729}, //15840 #CJK UNIFIED IDEOGRAPH
+ {0xDBD8, 0x572C}, //15841 #CJK UNIFIED IDEOGRAPH
+ {0xDBD9, 0x572A}, //15842 #CJK UNIFIED IDEOGRAPH
+ {0xDBDA, 0x5733}, //15843 #CJK UNIFIED IDEOGRAPH
+ {0xDBDB, 0x5739}, //15844 #CJK UNIFIED IDEOGRAPH
+ {0xDBDC, 0x572E}, //15845 #CJK UNIFIED IDEOGRAPH
+ {0xDBDD, 0x572F}, //15846 #CJK UNIFIED IDEOGRAPH
+ {0xDBDE, 0x575C}, //15847 #CJK UNIFIED IDEOGRAPH
+ {0xDBDF, 0x573B}, //15848 #CJK UNIFIED IDEOGRAPH
+ {0xDBE0, 0x5742}, //15849 #CJK UNIFIED IDEOGRAPH
+ {0xDBE1, 0x5769}, //15850 #CJK UNIFIED IDEOGRAPH
+ {0xDBE2, 0x5785}, //15851 #CJK UNIFIED IDEOGRAPH
+ {0xDBE3, 0x576B}, //15852 #CJK UNIFIED IDEOGRAPH
+ {0xDBE4, 0x5786}, //15853 #CJK UNIFIED IDEOGRAPH
+ {0xDBE5, 0x577C}, //15854 #CJK UNIFIED IDEOGRAPH
+ {0xDBE6, 0x577B}, //15855 #CJK UNIFIED IDEOGRAPH
+ {0xDBE7, 0x5768}, //15856 #CJK UNIFIED IDEOGRAPH
+ {0xDBE8, 0x576D}, //15857 #CJK UNIFIED IDEOGRAPH
+ {0xDBE9, 0x5776}, //15858 #CJK UNIFIED IDEOGRAPH
+ {0xDBEA, 0x5773}, //15859 #CJK UNIFIED IDEOGRAPH
+ {0xDBEB, 0x57AD}, //15860 #CJK UNIFIED IDEOGRAPH
+ {0xDBEC, 0x57A4}, //15861 #CJK UNIFIED IDEOGRAPH
+ {0xDBED, 0x578C}, //15862 #CJK UNIFIED IDEOGRAPH
+ {0xDBEE, 0x57B2}, //15863 #CJK UNIFIED IDEOGRAPH
+ {0xDBEF, 0x57CF}, //15864 #CJK UNIFIED IDEOGRAPH
+ {0xDBF0, 0x57A7}, //15865 #CJK UNIFIED IDEOGRAPH
+ {0xDBF1, 0x57B4}, //15866 #CJK UNIFIED IDEOGRAPH
+ {0xDBF2, 0x5793}, //15867 #CJK UNIFIED IDEOGRAPH
+ {0xDBF3, 0x57A0}, //15868 #CJK UNIFIED IDEOGRAPH
+ {0xDBF4, 0x57D5}, //15869 #CJK UNIFIED IDEOGRAPH
+ {0xDBF5, 0x57D8}, //15870 #CJK UNIFIED IDEOGRAPH
+ {0xDBF6, 0x57DA}, //15871 #CJK UNIFIED IDEOGRAPH
+ {0xDBF7, 0x57D9}, //15872 #CJK UNIFIED IDEOGRAPH
+ {0xDBF8, 0x57D2}, //15873 #CJK UNIFIED IDEOGRAPH
+ {0xDBF9, 0x57B8}, //15874 #CJK UNIFIED IDEOGRAPH
+ {0xDBFA, 0x57F4}, //15875 #CJK UNIFIED IDEOGRAPH
+ {0xDBFB, 0x57EF}, //15876 #CJK UNIFIED IDEOGRAPH
+ {0xDBFC, 0x57F8}, //15877 #CJK UNIFIED IDEOGRAPH
+ {0xDBFD, 0x57E4}, //15878 #CJK UNIFIED IDEOGRAPH
+ {0xDBFE, 0x57DD}, //15879 #CJK UNIFIED IDEOGRAPH
+ {0xDC40, 0x8E73}, //15880 #CJK UNIFIED IDEOGRAPH
+ {0xDC41, 0x8E75}, //15881 #CJK UNIFIED IDEOGRAPH
+ {0xDC42, 0x8E77}, //15882 #CJK UNIFIED IDEOGRAPH
+ {0xDC43, 0x8E78}, //15883 #CJK UNIFIED IDEOGRAPH
+ {0xDC44, 0x8E79}, //15884 #CJK UNIFIED IDEOGRAPH
+ {0xDC45, 0x8E7A}, //15885 #CJK UNIFIED IDEOGRAPH
+ {0xDC46, 0x8E7B}, //15886 #CJK UNIFIED IDEOGRAPH
+ {0xDC47, 0x8E7D}, //15887 #CJK UNIFIED IDEOGRAPH
+ {0xDC48, 0x8E7E}, //15888 #CJK UNIFIED IDEOGRAPH
+ {0xDC49, 0x8E80}, //15889 #CJK UNIFIED IDEOGRAPH
+ {0xDC4A, 0x8E82}, //15890 #CJK UNIFIED IDEOGRAPH
+ {0xDC4B, 0x8E83}, //15891 #CJK UNIFIED IDEOGRAPH
+ {0xDC4C, 0x8E84}, //15892 #CJK UNIFIED IDEOGRAPH
+ {0xDC4D, 0x8E86}, //15893 #CJK UNIFIED IDEOGRAPH
+ {0xDC4E, 0x8E88}, //15894 #CJK UNIFIED IDEOGRAPH
+ {0xDC4F, 0x8E89}, //15895 #CJK UNIFIED IDEOGRAPH
+ {0xDC50, 0x8E8A}, //15896 #CJK UNIFIED IDEOGRAPH
+ {0xDC51, 0x8E8B}, //15897 #CJK UNIFIED IDEOGRAPH
+ {0xDC52, 0x8E8C}, //15898 #CJK UNIFIED IDEOGRAPH
+ {0xDC53, 0x8E8D}, //15899 #CJK UNIFIED IDEOGRAPH
+ {0xDC54, 0x8E8E}, //15900 #CJK UNIFIED IDEOGRAPH
+ {0xDC55, 0x8E91}, //15901 #CJK UNIFIED IDEOGRAPH
+ {0xDC56, 0x8E92}, //15902 #CJK UNIFIED IDEOGRAPH
+ {0xDC57, 0x8E93}, //15903 #CJK UNIFIED IDEOGRAPH
+ {0xDC58, 0x8E95}, //15904 #CJK UNIFIED IDEOGRAPH
+ {0xDC59, 0x8E96}, //15905 #CJK UNIFIED IDEOGRAPH
+ {0xDC5A, 0x8E97}, //15906 #CJK UNIFIED IDEOGRAPH
+ {0xDC5B, 0x8E98}, //15907 #CJK UNIFIED IDEOGRAPH
+ {0xDC5C, 0x8E99}, //15908 #CJK UNIFIED IDEOGRAPH
+ {0xDC5D, 0x8E9A}, //15909 #CJK UNIFIED IDEOGRAPH
+ {0xDC5E, 0x8E9B}, //15910 #CJK UNIFIED IDEOGRAPH
+ {0xDC5F, 0x8E9D}, //15911 #CJK UNIFIED IDEOGRAPH
+ {0xDC60, 0x8E9F}, //15912 #CJK UNIFIED IDEOGRAPH
+ {0xDC61, 0x8EA0}, //15913 #CJK UNIFIED IDEOGRAPH
+ {0xDC62, 0x8EA1}, //15914 #CJK UNIFIED IDEOGRAPH
+ {0xDC63, 0x8EA2}, //15915 #CJK UNIFIED IDEOGRAPH
+ {0xDC64, 0x8EA3}, //15916 #CJK UNIFIED IDEOGRAPH
+ {0xDC65, 0x8EA4}, //15917 #CJK UNIFIED IDEOGRAPH
+ {0xDC66, 0x8EA5}, //15918 #CJK UNIFIED IDEOGRAPH
+ {0xDC67, 0x8EA6}, //15919 #CJK UNIFIED IDEOGRAPH
+ {0xDC68, 0x8EA7}, //15920 #CJK UNIFIED IDEOGRAPH
+ {0xDC69, 0x8EA8}, //15921 #CJK UNIFIED IDEOGRAPH
+ {0xDC6A, 0x8EA9}, //15922 #CJK UNIFIED IDEOGRAPH
+ {0xDC6B, 0x8EAA}, //15923 #CJK UNIFIED IDEOGRAPH
+ {0xDC6C, 0x8EAD}, //15924 #CJK UNIFIED IDEOGRAPH
+ {0xDC6D, 0x8EAE}, //15925 #CJK UNIFIED IDEOGRAPH
+ {0xDC6E, 0x8EB0}, //15926 #CJK UNIFIED IDEOGRAPH
+ {0xDC6F, 0x8EB1}, //15927 #CJK UNIFIED IDEOGRAPH
+ {0xDC70, 0x8EB3}, //15928 #CJK UNIFIED IDEOGRAPH
+ {0xDC71, 0x8EB4}, //15929 #CJK UNIFIED IDEOGRAPH
+ {0xDC72, 0x8EB5}, //15930 #CJK UNIFIED IDEOGRAPH
+ {0xDC73, 0x8EB6}, //15931 #CJK UNIFIED IDEOGRAPH
+ {0xDC74, 0x8EB7}, //15932 #CJK UNIFIED IDEOGRAPH
+ {0xDC75, 0x8EB8}, //15933 #CJK UNIFIED IDEOGRAPH
+ {0xDC76, 0x8EB9}, //15934 #CJK UNIFIED IDEOGRAPH
+ {0xDC77, 0x8EBB}, //15935 #CJK UNIFIED IDEOGRAPH
+ {0xDC78, 0x8EBC}, //15936 #CJK UNIFIED IDEOGRAPH
+ {0xDC79, 0x8EBD}, //15937 #CJK UNIFIED IDEOGRAPH
+ {0xDC7A, 0x8EBE}, //15938 #CJK UNIFIED IDEOGRAPH
+ {0xDC7B, 0x8EBF}, //15939 #CJK UNIFIED IDEOGRAPH
+ {0xDC7C, 0x8EC0}, //15940 #CJK UNIFIED IDEOGRAPH
+ {0xDC7D, 0x8EC1}, //15941 #CJK UNIFIED IDEOGRAPH
+ {0xDC7E, 0x8EC2}, //15942 #CJK UNIFIED IDEOGRAPH
+ {0xDC80, 0x8EC3}, //15943 #CJK UNIFIED IDEOGRAPH
+ {0xDC81, 0x8EC4}, //15944 #CJK UNIFIED IDEOGRAPH
+ {0xDC82, 0x8EC5}, //15945 #CJK UNIFIED IDEOGRAPH
+ {0xDC83, 0x8EC6}, //15946 #CJK UNIFIED IDEOGRAPH
+ {0xDC84, 0x8EC7}, //15947 #CJK UNIFIED IDEOGRAPH
+ {0xDC85, 0x8EC8}, //15948 #CJK UNIFIED IDEOGRAPH
+ {0xDC86, 0x8EC9}, //15949 #CJK UNIFIED IDEOGRAPH
+ {0xDC87, 0x8ECA}, //15950 #CJK UNIFIED IDEOGRAPH
+ {0xDC88, 0x8ECB}, //15951 #CJK UNIFIED IDEOGRAPH
+ {0xDC89, 0x8ECC}, //15952 #CJK UNIFIED IDEOGRAPH
+ {0xDC8A, 0x8ECD}, //15953 #CJK UNIFIED IDEOGRAPH
+ {0xDC8B, 0x8ECF}, //15954 #CJK UNIFIED IDEOGRAPH
+ {0xDC8C, 0x8ED0}, //15955 #CJK UNIFIED IDEOGRAPH
+ {0xDC8D, 0x8ED1}, //15956 #CJK UNIFIED IDEOGRAPH
+ {0xDC8E, 0x8ED2}, //15957 #CJK UNIFIED IDEOGRAPH
+ {0xDC8F, 0x8ED3}, //15958 #CJK UNIFIED IDEOGRAPH
+ {0xDC90, 0x8ED4}, //15959 #CJK UNIFIED IDEOGRAPH
+ {0xDC91, 0x8ED5}, //15960 #CJK UNIFIED IDEOGRAPH
+ {0xDC92, 0x8ED6}, //15961 #CJK UNIFIED IDEOGRAPH
+ {0xDC93, 0x8ED7}, //15962 #CJK UNIFIED IDEOGRAPH
+ {0xDC94, 0x8ED8}, //15963 #CJK UNIFIED IDEOGRAPH
+ {0xDC95, 0x8ED9}, //15964 #CJK UNIFIED IDEOGRAPH
+ {0xDC96, 0x8EDA}, //15965 #CJK UNIFIED IDEOGRAPH
+ {0xDC97, 0x8EDB}, //15966 #CJK UNIFIED IDEOGRAPH
+ {0xDC98, 0x8EDC}, //15967 #CJK UNIFIED IDEOGRAPH
+ {0xDC99, 0x8EDD}, //15968 #CJK UNIFIED IDEOGRAPH
+ {0xDC9A, 0x8EDE}, //15969 #CJK UNIFIED IDEOGRAPH
+ {0xDC9B, 0x8EDF}, //15970 #CJK UNIFIED IDEOGRAPH
+ {0xDC9C, 0x8EE0}, //15971 #CJK UNIFIED IDEOGRAPH
+ {0xDC9D, 0x8EE1}, //15972 #CJK UNIFIED IDEOGRAPH
+ {0xDC9E, 0x8EE2}, //15973 #CJK UNIFIED IDEOGRAPH
+ {0xDC9F, 0x8EE3}, //15974 #CJK UNIFIED IDEOGRAPH
+ {0xDCA0, 0x8EE4}, //15975 #CJK UNIFIED IDEOGRAPH
+ {0xDCA1, 0x580B}, //15976 #CJK UNIFIED IDEOGRAPH
+ {0xDCA2, 0x580D}, //15977 #CJK UNIFIED IDEOGRAPH
+ {0xDCA3, 0x57FD}, //15978 #CJK UNIFIED IDEOGRAPH
+ {0xDCA4, 0x57ED}, //15979 #CJK UNIFIED IDEOGRAPH
+ {0xDCA5, 0x5800}, //15980 #CJK UNIFIED IDEOGRAPH
+ {0xDCA6, 0x581E}, //15981 #CJK UNIFIED IDEOGRAPH
+ {0xDCA7, 0x5819}, //15982 #CJK UNIFIED IDEOGRAPH
+ {0xDCA8, 0x5844}, //15983 #CJK UNIFIED IDEOGRAPH
+ {0xDCA9, 0x5820}, //15984 #CJK UNIFIED IDEOGRAPH
+ {0xDCAA, 0x5865}, //15985 #CJK UNIFIED IDEOGRAPH
+ {0xDCAB, 0x586C}, //15986 #CJK UNIFIED IDEOGRAPH
+ {0xDCAC, 0x5881}, //15987 #CJK UNIFIED IDEOGRAPH
+ {0xDCAD, 0x5889}, //15988 #CJK UNIFIED IDEOGRAPH
+ {0xDCAE, 0x589A}, //15989 #CJK UNIFIED IDEOGRAPH
+ {0xDCAF, 0x5880}, //15990 #CJK UNIFIED IDEOGRAPH
+ {0xDCB0, 0x99A8}, //15991 #CJK UNIFIED IDEOGRAPH
+ {0xDCB1, 0x9F19}, //15992 #CJK UNIFIED IDEOGRAPH
+ {0xDCB2, 0x61FF}, //15993 #CJK UNIFIED IDEOGRAPH
+ {0xDCB3, 0x8279}, //15994 #CJK UNIFIED IDEOGRAPH
+ {0xDCB4, 0x827D}, //15995 #CJK UNIFIED IDEOGRAPH
+ {0xDCB5, 0x827F}, //15996 #CJK UNIFIED IDEOGRAPH
+ {0xDCB6, 0x828F}, //15997 #CJK UNIFIED IDEOGRAPH
+ {0xDCB7, 0x828A}, //15998 #CJK UNIFIED IDEOGRAPH
+ {0xDCB8, 0x82A8}, //15999 #CJK UNIFIED IDEOGRAPH
+ {0xDCB9, 0x8284}, //16000 #CJK UNIFIED IDEOGRAPH
+ {0xDCBA, 0x828E}, //16001 #CJK UNIFIED IDEOGRAPH
+ {0xDCBB, 0x8291}, //16002 #CJK UNIFIED IDEOGRAPH
+ {0xDCBC, 0x8297}, //16003 #CJK UNIFIED IDEOGRAPH
+ {0xDCBD, 0x8299}, //16004 #CJK UNIFIED IDEOGRAPH
+ {0xDCBE, 0x82AB}, //16005 #CJK UNIFIED IDEOGRAPH
+ {0xDCBF, 0x82B8}, //16006 #CJK UNIFIED IDEOGRAPH
+ {0xDCC0, 0x82BE}, //16007 #CJK UNIFIED IDEOGRAPH
+ {0xDCC1, 0x82B0}, //16008 #CJK UNIFIED IDEOGRAPH
+ {0xDCC2, 0x82C8}, //16009 #CJK UNIFIED IDEOGRAPH
+ {0xDCC3, 0x82CA}, //16010 #CJK UNIFIED IDEOGRAPH
+ {0xDCC4, 0x82E3}, //16011 #CJK UNIFIED IDEOGRAPH
+ {0xDCC5, 0x8298}, //16012 #CJK UNIFIED IDEOGRAPH
+ {0xDCC6, 0x82B7}, //16013 #CJK UNIFIED IDEOGRAPH
+ {0xDCC7, 0x82AE}, //16014 #CJK UNIFIED IDEOGRAPH
+ {0xDCC8, 0x82CB}, //16015 #CJK UNIFIED IDEOGRAPH
+ {0xDCC9, 0x82CC}, //16016 #CJK UNIFIED IDEOGRAPH
+ {0xDCCA, 0x82C1}, //16017 #CJK UNIFIED IDEOGRAPH
+ {0xDCCB, 0x82A9}, //16018 #CJK UNIFIED IDEOGRAPH
+ {0xDCCC, 0x82B4}, //16019 #CJK UNIFIED IDEOGRAPH
+ {0xDCCD, 0x82A1}, //16020 #CJK UNIFIED IDEOGRAPH
+ {0xDCCE, 0x82AA}, //16021 #CJK UNIFIED IDEOGRAPH
+ {0xDCCF, 0x829F}, //16022 #CJK UNIFIED IDEOGRAPH
+ {0xDCD0, 0x82C4}, //16023 #CJK UNIFIED IDEOGRAPH
+ {0xDCD1, 0x82CE}, //16024 #CJK UNIFIED IDEOGRAPH
+ {0xDCD2, 0x82A4}, //16025 #CJK UNIFIED IDEOGRAPH
+ {0xDCD3, 0x82E1}, //16026 #CJK UNIFIED IDEOGRAPH
+ {0xDCD4, 0x8309}, //16027 #CJK UNIFIED IDEOGRAPH
+ {0xDCD5, 0x82F7}, //16028 #CJK UNIFIED IDEOGRAPH
+ {0xDCD6, 0x82E4}, //16029 #CJK UNIFIED IDEOGRAPH
+ {0xDCD7, 0x830F}, //16030 #CJK UNIFIED IDEOGRAPH
+ {0xDCD8, 0x8307}, //16031 #CJK UNIFIED IDEOGRAPH
+ {0xDCD9, 0x82DC}, //16032 #CJK UNIFIED IDEOGRAPH
+ {0xDCDA, 0x82F4}, //16033 #CJK UNIFIED IDEOGRAPH
+ {0xDCDB, 0x82D2}, //16034 #CJK UNIFIED IDEOGRAPH
+ {0xDCDC, 0x82D8}, //16035 #CJK UNIFIED IDEOGRAPH
+ {0xDCDD, 0x830C}, //16036 #CJK UNIFIED IDEOGRAPH
+ {0xDCDE, 0x82FB}, //16037 #CJK UNIFIED IDEOGRAPH
+ {0xDCDF, 0x82D3}, //16038 #CJK UNIFIED IDEOGRAPH
+ {0xDCE0, 0x8311}, //16039 #CJK UNIFIED IDEOGRAPH
+ {0xDCE1, 0x831A}, //16040 #CJK UNIFIED IDEOGRAPH
+ {0xDCE2, 0x8306}, //16041 #CJK UNIFIED IDEOGRAPH
+ {0xDCE3, 0x8314}, //16042 #CJK UNIFIED IDEOGRAPH
+ {0xDCE4, 0x8315}, //16043 #CJK UNIFIED IDEOGRAPH
+ {0xDCE5, 0x82E0}, //16044 #CJK UNIFIED IDEOGRAPH
+ {0xDCE6, 0x82D5}, //16045 #CJK UNIFIED IDEOGRAPH
+ {0xDCE7, 0x831C}, //16046 #CJK UNIFIED IDEOGRAPH
+ {0xDCE8, 0x8351}, //16047 #CJK UNIFIED IDEOGRAPH
+ {0xDCE9, 0x835B}, //16048 #CJK UNIFIED IDEOGRAPH
+ {0xDCEA, 0x835C}, //16049 #CJK UNIFIED IDEOGRAPH
+ {0xDCEB, 0x8308}, //16050 #CJK UNIFIED IDEOGRAPH
+ {0xDCEC, 0x8392}, //16051 #CJK UNIFIED IDEOGRAPH
+ {0xDCED, 0x833C}, //16052 #CJK UNIFIED IDEOGRAPH
+ {0xDCEE, 0x8334}, //16053 #CJK UNIFIED IDEOGRAPH
+ {0xDCEF, 0x8331}, //16054 #CJK UNIFIED IDEOGRAPH
+ {0xDCF0, 0x839B}, //16055 #CJK UNIFIED IDEOGRAPH
+ {0xDCF1, 0x835E}, //16056 #CJK UNIFIED IDEOGRAPH
+ {0xDCF2, 0x832F}, //16057 #CJK UNIFIED IDEOGRAPH
+ {0xDCF3, 0x834F}, //16058 #CJK UNIFIED IDEOGRAPH
+ {0xDCF4, 0x8347}, //16059 #CJK UNIFIED IDEOGRAPH
+ {0xDCF5, 0x8343}, //16060 #CJK UNIFIED IDEOGRAPH
+ {0xDCF6, 0x835F}, //16061 #CJK UNIFIED IDEOGRAPH
+ {0xDCF7, 0x8340}, //16062 #CJK UNIFIED IDEOGRAPH
+ {0xDCF8, 0x8317}, //16063 #CJK UNIFIED IDEOGRAPH
+ {0xDCF9, 0x8360}, //16064 #CJK UNIFIED IDEOGRAPH
+ {0xDCFA, 0x832D}, //16065 #CJK UNIFIED IDEOGRAPH
+ {0xDCFB, 0x833A}, //16066 #CJK UNIFIED IDEOGRAPH
+ {0xDCFC, 0x8333}, //16067 #CJK UNIFIED IDEOGRAPH
+ {0xDCFD, 0x8366}, //16068 #CJK UNIFIED IDEOGRAPH
+ {0xDCFE, 0x8365}, //16069 #CJK UNIFIED IDEOGRAPH
+ {0xDD40, 0x8EE5}, //16070 #CJK UNIFIED IDEOGRAPH
+ {0xDD41, 0x8EE6}, //16071 #CJK UNIFIED IDEOGRAPH
+ {0xDD42, 0x8EE7}, //16072 #CJK UNIFIED IDEOGRAPH
+ {0xDD43, 0x8EE8}, //16073 #CJK UNIFIED IDEOGRAPH
+ {0xDD44, 0x8EE9}, //16074 #CJK UNIFIED IDEOGRAPH
+ {0xDD45, 0x8EEA}, //16075 #CJK UNIFIED IDEOGRAPH
+ {0xDD46, 0x8EEB}, //16076 #CJK UNIFIED IDEOGRAPH
+ {0xDD47, 0x8EEC}, //16077 #CJK UNIFIED IDEOGRAPH
+ {0xDD48, 0x8EED}, //16078 #CJK UNIFIED IDEOGRAPH
+ {0xDD49, 0x8EEE}, //16079 #CJK UNIFIED IDEOGRAPH
+ {0xDD4A, 0x8EEF}, //16080 #CJK UNIFIED IDEOGRAPH
+ {0xDD4B, 0x8EF0}, //16081 #CJK UNIFIED IDEOGRAPH
+ {0xDD4C, 0x8EF1}, //16082 #CJK UNIFIED IDEOGRAPH
+ {0xDD4D, 0x8EF2}, //16083 #CJK UNIFIED IDEOGRAPH
+ {0xDD4E, 0x8EF3}, //16084 #CJK UNIFIED IDEOGRAPH
+ {0xDD4F, 0x8EF4}, //16085 #CJK UNIFIED IDEOGRAPH
+ {0xDD50, 0x8EF5}, //16086 #CJK UNIFIED IDEOGRAPH
+ {0xDD51, 0x8EF6}, //16087 #CJK UNIFIED IDEOGRAPH
+ {0xDD52, 0x8EF7}, //16088 #CJK UNIFIED IDEOGRAPH
+ {0xDD53, 0x8EF8}, //16089 #CJK UNIFIED IDEOGRAPH
+ {0xDD54, 0x8EF9}, //16090 #CJK UNIFIED IDEOGRAPH
+ {0xDD55, 0x8EFA}, //16091 #CJK UNIFIED IDEOGRAPH
+ {0xDD56, 0x8EFB}, //16092 #CJK UNIFIED IDEOGRAPH
+ {0xDD57, 0x8EFC}, //16093 #CJK UNIFIED IDEOGRAPH
+ {0xDD58, 0x8EFD}, //16094 #CJK UNIFIED IDEOGRAPH
+ {0xDD59, 0x8EFE}, //16095 #CJK UNIFIED IDEOGRAPH
+ {0xDD5A, 0x8EFF}, //16096 #CJK UNIFIED IDEOGRAPH
+ {0xDD5B, 0x8F00}, //16097 #CJK UNIFIED IDEOGRAPH
+ {0xDD5C, 0x8F01}, //16098 #CJK UNIFIED IDEOGRAPH
+ {0xDD5D, 0x8F02}, //16099 #CJK UNIFIED IDEOGRAPH
+ {0xDD5E, 0x8F03}, //16100 #CJK UNIFIED IDEOGRAPH
+ {0xDD5F, 0x8F04}, //16101 #CJK UNIFIED IDEOGRAPH
+ {0xDD60, 0x8F05}, //16102 #CJK UNIFIED IDEOGRAPH
+ {0xDD61, 0x8F06}, //16103 #CJK UNIFIED IDEOGRAPH
+ {0xDD62, 0x8F07}, //16104 #CJK UNIFIED IDEOGRAPH
+ {0xDD63, 0x8F08}, //16105 #CJK UNIFIED IDEOGRAPH
+ {0xDD64, 0x8F09}, //16106 #CJK UNIFIED IDEOGRAPH
+ {0xDD65, 0x8F0A}, //16107 #CJK UNIFIED IDEOGRAPH
+ {0xDD66, 0x8F0B}, //16108 #CJK UNIFIED IDEOGRAPH
+ {0xDD67, 0x8F0C}, //16109 #CJK UNIFIED IDEOGRAPH
+ {0xDD68, 0x8F0D}, //16110 #CJK UNIFIED IDEOGRAPH
+ {0xDD69, 0x8F0E}, //16111 #CJK UNIFIED IDEOGRAPH
+ {0xDD6A, 0x8F0F}, //16112 #CJK UNIFIED IDEOGRAPH
+ {0xDD6B, 0x8F10}, //16113 #CJK UNIFIED IDEOGRAPH
+ {0xDD6C, 0x8F11}, //16114 #CJK UNIFIED IDEOGRAPH
+ {0xDD6D, 0x8F12}, //16115 #CJK UNIFIED IDEOGRAPH
+ {0xDD6E, 0x8F13}, //16116 #CJK UNIFIED IDEOGRAPH
+ {0xDD6F, 0x8F14}, //16117 #CJK UNIFIED IDEOGRAPH
+ {0xDD70, 0x8F15}, //16118 #CJK UNIFIED IDEOGRAPH
+ {0xDD71, 0x8F16}, //16119 #CJK UNIFIED IDEOGRAPH
+ {0xDD72, 0x8F17}, //16120 #CJK UNIFIED IDEOGRAPH
+ {0xDD73, 0x8F18}, //16121 #CJK UNIFIED IDEOGRAPH
+ {0xDD74, 0x8F19}, //16122 #CJK UNIFIED IDEOGRAPH
+ {0xDD75, 0x8F1A}, //16123 #CJK UNIFIED IDEOGRAPH
+ {0xDD76, 0x8F1B}, //16124 #CJK UNIFIED IDEOGRAPH
+ {0xDD77, 0x8F1C}, //16125 #CJK UNIFIED IDEOGRAPH
+ {0xDD78, 0x8F1D}, //16126 #CJK UNIFIED IDEOGRAPH
+ {0xDD79, 0x8F1E}, //16127 #CJK UNIFIED IDEOGRAPH
+ {0xDD7A, 0x8F1F}, //16128 #CJK UNIFIED IDEOGRAPH
+ {0xDD7B, 0x8F20}, //16129 #CJK UNIFIED IDEOGRAPH
+ {0xDD7C, 0x8F21}, //16130 #CJK UNIFIED IDEOGRAPH
+ {0xDD7D, 0x8F22}, //16131 #CJK UNIFIED IDEOGRAPH
+ {0xDD7E, 0x8F23}, //16132 #CJK UNIFIED IDEOGRAPH
+ {0xDD80, 0x8F24}, //16133 #CJK UNIFIED IDEOGRAPH
+ {0xDD81, 0x8F25}, //16134 #CJK UNIFIED IDEOGRAPH
+ {0xDD82, 0x8F26}, //16135 #CJK UNIFIED IDEOGRAPH
+ {0xDD83, 0x8F27}, //16136 #CJK UNIFIED IDEOGRAPH
+ {0xDD84, 0x8F28}, //16137 #CJK UNIFIED IDEOGRAPH
+ {0xDD85, 0x8F29}, //16138 #CJK UNIFIED IDEOGRAPH
+ {0xDD86, 0x8F2A}, //16139 #CJK UNIFIED IDEOGRAPH
+ {0xDD87, 0x8F2B}, //16140 #CJK UNIFIED IDEOGRAPH
+ {0xDD88, 0x8F2C}, //16141 #CJK UNIFIED IDEOGRAPH
+ {0xDD89, 0x8F2D}, //16142 #CJK UNIFIED IDEOGRAPH
+ {0xDD8A, 0x8F2E}, //16143 #CJK UNIFIED IDEOGRAPH
+ {0xDD8B, 0x8F2F}, //16144 #CJK UNIFIED IDEOGRAPH
+ {0xDD8C, 0x8F30}, //16145 #CJK UNIFIED IDEOGRAPH
+ {0xDD8D, 0x8F31}, //16146 #CJK UNIFIED IDEOGRAPH
+ {0xDD8E, 0x8F32}, //16147 #CJK UNIFIED IDEOGRAPH
+ {0xDD8F, 0x8F33}, //16148 #CJK UNIFIED IDEOGRAPH
+ {0xDD90, 0x8F34}, //16149 #CJK UNIFIED IDEOGRAPH
+ {0xDD91, 0x8F35}, //16150 #CJK UNIFIED IDEOGRAPH
+ {0xDD92, 0x8F36}, //16151 #CJK UNIFIED IDEOGRAPH
+ {0xDD93, 0x8F37}, //16152 #CJK UNIFIED IDEOGRAPH
+ {0xDD94, 0x8F38}, //16153 #CJK UNIFIED IDEOGRAPH
+ {0xDD95, 0x8F39}, //16154 #CJK UNIFIED IDEOGRAPH
+ {0xDD96, 0x8F3A}, //16155 #CJK UNIFIED IDEOGRAPH
+ {0xDD97, 0x8F3B}, //16156 #CJK UNIFIED IDEOGRAPH
+ {0xDD98, 0x8F3C}, //16157 #CJK UNIFIED IDEOGRAPH
+ {0xDD99, 0x8F3D}, //16158 #CJK UNIFIED IDEOGRAPH
+ {0xDD9A, 0x8F3E}, //16159 #CJK UNIFIED IDEOGRAPH
+ {0xDD9B, 0x8F3F}, //16160 #CJK UNIFIED IDEOGRAPH
+ {0xDD9C, 0x8F40}, //16161 #CJK UNIFIED IDEOGRAPH
+ {0xDD9D, 0x8F41}, //16162 #CJK UNIFIED IDEOGRAPH
+ {0xDD9E, 0x8F42}, //16163 #CJK UNIFIED IDEOGRAPH
+ {0xDD9F, 0x8F43}, //16164 #CJK UNIFIED IDEOGRAPH
+ {0xDDA0, 0x8F44}, //16165 #CJK UNIFIED IDEOGRAPH
+ {0xDDA1, 0x8368}, //16166 #CJK UNIFIED IDEOGRAPH
+ {0xDDA2, 0x831B}, //16167 #CJK UNIFIED IDEOGRAPH
+ {0xDDA3, 0x8369}, //16168 #CJK UNIFIED IDEOGRAPH
+ {0xDDA4, 0x836C}, //16169 #CJK UNIFIED IDEOGRAPH
+ {0xDDA5, 0x836A}, //16170 #CJK UNIFIED IDEOGRAPH
+ {0xDDA6, 0x836D}, //16171 #CJK UNIFIED IDEOGRAPH
+ {0xDDA7, 0x836E}, //16172 #CJK UNIFIED IDEOGRAPH
+ {0xDDA8, 0x83B0}, //16173 #CJK UNIFIED IDEOGRAPH
+ {0xDDA9, 0x8378}, //16174 #CJK UNIFIED IDEOGRAPH
+ {0xDDAA, 0x83B3}, //16175 #CJK UNIFIED IDEOGRAPH
+ {0xDDAB, 0x83B4}, //16176 #CJK UNIFIED IDEOGRAPH
+ {0xDDAC, 0x83A0}, //16177 #CJK UNIFIED IDEOGRAPH
+ {0xDDAD, 0x83AA}, //16178 #CJK UNIFIED IDEOGRAPH
+ {0xDDAE, 0x8393}, //16179 #CJK UNIFIED IDEOGRAPH
+ {0xDDAF, 0x839C}, //16180 #CJK UNIFIED IDEOGRAPH
+ {0xDDB0, 0x8385}, //16181 #CJK UNIFIED IDEOGRAPH
+ {0xDDB1, 0x837C}, //16182 #CJK UNIFIED IDEOGRAPH
+ {0xDDB2, 0x83B6}, //16183 #CJK UNIFIED IDEOGRAPH
+ {0xDDB3, 0x83A9}, //16184 #CJK UNIFIED IDEOGRAPH
+ {0xDDB4, 0x837D}, //16185 #CJK UNIFIED IDEOGRAPH
+ {0xDDB5, 0x83B8}, //16186 #CJK UNIFIED IDEOGRAPH
+ {0xDDB6, 0x837B}, //16187 #CJK UNIFIED IDEOGRAPH
+ {0xDDB7, 0x8398}, //16188 #CJK UNIFIED IDEOGRAPH
+ {0xDDB8, 0x839E}, //16189 #CJK UNIFIED IDEOGRAPH
+ {0xDDB9, 0x83A8}, //16190 #CJK UNIFIED IDEOGRAPH
+ {0xDDBA, 0x83BA}, //16191 #CJK UNIFIED IDEOGRAPH
+ {0xDDBB, 0x83BC}, //16192 #CJK UNIFIED IDEOGRAPH
+ {0xDDBC, 0x83C1}, //16193 #CJK UNIFIED IDEOGRAPH
+ {0xDDBD, 0x8401}, //16194 #CJK UNIFIED IDEOGRAPH
+ {0xDDBE, 0x83E5}, //16195 #CJK UNIFIED IDEOGRAPH
+ {0xDDBF, 0x83D8}, //16196 #CJK UNIFIED IDEOGRAPH
+ {0xDDC0, 0x5807}, //16197 #CJK UNIFIED IDEOGRAPH
+ {0xDDC1, 0x8418}, //16198 #CJK UNIFIED IDEOGRAPH
+ {0xDDC2, 0x840B}, //16199 #CJK UNIFIED IDEOGRAPH
+ {0xDDC3, 0x83DD}, //16200 #CJK UNIFIED IDEOGRAPH
+ {0xDDC4, 0x83FD}, //16201 #CJK UNIFIED IDEOGRAPH
+ {0xDDC5, 0x83D6}, //16202 #CJK UNIFIED IDEOGRAPH
+ {0xDDC6, 0x841C}, //16203 #CJK UNIFIED IDEOGRAPH
+ {0xDDC7, 0x8438}, //16204 #CJK UNIFIED IDEOGRAPH
+ {0xDDC8, 0x8411}, //16205 #CJK UNIFIED IDEOGRAPH
+ {0xDDC9, 0x8406}, //16206 #CJK UNIFIED IDEOGRAPH
+ {0xDDCA, 0x83D4}, //16207 #CJK UNIFIED IDEOGRAPH
+ {0xDDCB, 0x83DF}, //16208 #CJK UNIFIED IDEOGRAPH
+ {0xDDCC, 0x840F}, //16209 #CJK UNIFIED IDEOGRAPH
+ {0xDDCD, 0x8403}, //16210 #CJK UNIFIED IDEOGRAPH
+ {0xDDCE, 0x83F8}, //16211 #CJK UNIFIED IDEOGRAPH
+ {0xDDCF, 0x83F9}, //16212 #CJK UNIFIED IDEOGRAPH
+ {0xDDD0, 0x83EA}, //16213 #CJK UNIFIED IDEOGRAPH
+ {0xDDD1, 0x83C5}, //16214 #CJK UNIFIED IDEOGRAPH
+ {0xDDD2, 0x83C0}, //16215 #CJK UNIFIED IDEOGRAPH
+ {0xDDD3, 0x8426}, //16216 #CJK UNIFIED IDEOGRAPH
+ {0xDDD4, 0x83F0}, //16217 #CJK UNIFIED IDEOGRAPH
+ {0xDDD5, 0x83E1}, //16218 #CJK UNIFIED IDEOGRAPH
+ {0xDDD6, 0x845C}, //16219 #CJK UNIFIED IDEOGRAPH
+ {0xDDD7, 0x8451}, //16220 #CJK UNIFIED IDEOGRAPH
+ {0xDDD8, 0x845A}, //16221 #CJK UNIFIED IDEOGRAPH
+ {0xDDD9, 0x8459}, //16222 #CJK UNIFIED IDEOGRAPH
+ {0xDDDA, 0x8473}, //16223 #CJK UNIFIED IDEOGRAPH
+ {0xDDDB, 0x8487}, //16224 #CJK UNIFIED IDEOGRAPH
+ {0xDDDC, 0x8488}, //16225 #CJK UNIFIED IDEOGRAPH
+ {0xDDDD, 0x847A}, //16226 #CJK UNIFIED IDEOGRAPH
+ {0xDDDE, 0x8489}, //16227 #CJK UNIFIED IDEOGRAPH
+ {0xDDDF, 0x8478}, //16228 #CJK UNIFIED IDEOGRAPH
+ {0xDDE0, 0x843C}, //16229 #CJK UNIFIED IDEOGRAPH
+ {0xDDE1, 0x8446}, //16230 #CJK UNIFIED IDEOGRAPH
+ {0xDDE2, 0x8469}, //16231 #CJK UNIFIED IDEOGRAPH
+ {0xDDE3, 0x8476}, //16232 #CJK UNIFIED IDEOGRAPH
+ {0xDDE4, 0x848C}, //16233 #CJK UNIFIED IDEOGRAPH
+ {0xDDE5, 0x848E}, //16234 #CJK UNIFIED IDEOGRAPH
+ {0xDDE6, 0x8431}, //16235 #CJK UNIFIED IDEOGRAPH
+ {0xDDE7, 0x846D}, //16236 #CJK UNIFIED IDEOGRAPH
+ {0xDDE8, 0x84C1}, //16237 #CJK UNIFIED IDEOGRAPH
+ {0xDDE9, 0x84CD}, //16238 #CJK UNIFIED IDEOGRAPH
+ {0xDDEA, 0x84D0}, //16239 #CJK UNIFIED IDEOGRAPH
+ {0xDDEB, 0x84E6}, //16240 #CJK UNIFIED IDEOGRAPH
+ {0xDDEC, 0x84BD}, //16241 #CJK UNIFIED IDEOGRAPH
+ {0xDDED, 0x84D3}, //16242 #CJK UNIFIED IDEOGRAPH
+ {0xDDEE, 0x84CA}, //16243 #CJK UNIFIED IDEOGRAPH
+ {0xDDEF, 0x84BF}, //16244 #CJK UNIFIED IDEOGRAPH
+ {0xDDF0, 0x84BA}, //16245 #CJK UNIFIED IDEOGRAPH
+ {0xDDF1, 0x84E0}, //16246 #CJK UNIFIED IDEOGRAPH
+ {0xDDF2, 0x84A1}, //16247 #CJK UNIFIED IDEOGRAPH
+ {0xDDF3, 0x84B9}, //16248 #CJK UNIFIED IDEOGRAPH
+ {0xDDF4, 0x84B4}, //16249 #CJK UNIFIED IDEOGRAPH
+ {0xDDF5, 0x8497}, //16250 #CJK UNIFIED IDEOGRAPH
+ {0xDDF6, 0x84E5}, //16251 #CJK UNIFIED IDEOGRAPH
+ {0xDDF7, 0x84E3}, //16252 #CJK UNIFIED IDEOGRAPH
+ {0xDDF8, 0x850C}, //16253 #CJK UNIFIED IDEOGRAPH
+ {0xDDF9, 0x750D}, //16254 #CJK UNIFIED IDEOGRAPH
+ {0xDDFA, 0x8538}, //16255 #CJK UNIFIED IDEOGRAPH
+ {0xDDFB, 0x84F0}, //16256 #CJK UNIFIED IDEOGRAPH
+ {0xDDFC, 0x8539}, //16257 #CJK UNIFIED IDEOGRAPH
+ {0xDDFD, 0x851F}, //16258 #CJK UNIFIED IDEOGRAPH
+ {0xDDFE, 0x853A}, //16259 #CJK UNIFIED IDEOGRAPH
+ {0xDE40, 0x8F45}, //16260 #CJK UNIFIED IDEOGRAPH
+ {0xDE41, 0x8F46}, //16261 #CJK UNIFIED IDEOGRAPH
+ {0xDE42, 0x8F47}, //16262 #CJK UNIFIED IDEOGRAPH
+ {0xDE43, 0x8F48}, //16263 #CJK UNIFIED IDEOGRAPH
+ {0xDE44, 0x8F49}, //16264 #CJK UNIFIED IDEOGRAPH
+ {0xDE45, 0x8F4A}, //16265 #CJK UNIFIED IDEOGRAPH
+ {0xDE46, 0x8F4B}, //16266 #CJK UNIFIED IDEOGRAPH
+ {0xDE47, 0x8F4C}, //16267 #CJK UNIFIED IDEOGRAPH
+ {0xDE48, 0x8F4D}, //16268 #CJK UNIFIED IDEOGRAPH
+ {0xDE49, 0x8F4E}, //16269 #CJK UNIFIED IDEOGRAPH
+ {0xDE4A, 0x8F4F}, //16270 #CJK UNIFIED IDEOGRAPH
+ {0xDE4B, 0x8F50}, //16271 #CJK UNIFIED IDEOGRAPH
+ {0xDE4C, 0x8F51}, //16272 #CJK UNIFIED IDEOGRAPH
+ {0xDE4D, 0x8F52}, //16273 #CJK UNIFIED IDEOGRAPH
+ {0xDE4E, 0x8F53}, //16274 #CJK UNIFIED IDEOGRAPH
+ {0xDE4F, 0x8F54}, //16275 #CJK UNIFIED IDEOGRAPH
+ {0xDE50, 0x8F55}, //16276 #CJK UNIFIED IDEOGRAPH
+ {0xDE51, 0x8F56}, //16277 #CJK UNIFIED IDEOGRAPH
+ {0xDE52, 0x8F57}, //16278 #CJK UNIFIED IDEOGRAPH
+ {0xDE53, 0x8F58}, //16279 #CJK UNIFIED IDEOGRAPH
+ {0xDE54, 0x8F59}, //16280 #CJK UNIFIED IDEOGRAPH
+ {0xDE55, 0x8F5A}, //16281 #CJK UNIFIED IDEOGRAPH
+ {0xDE56, 0x8F5B}, //16282 #CJK UNIFIED IDEOGRAPH
+ {0xDE57, 0x8F5C}, //16283 #CJK UNIFIED IDEOGRAPH
+ {0xDE58, 0x8F5D}, //16284 #CJK UNIFIED IDEOGRAPH
+ {0xDE59, 0x8F5E}, //16285 #CJK UNIFIED IDEOGRAPH
+ {0xDE5A, 0x8F5F}, //16286 #CJK UNIFIED IDEOGRAPH
+ {0xDE5B, 0x8F60}, //16287 #CJK UNIFIED IDEOGRAPH
+ {0xDE5C, 0x8F61}, //16288 #CJK UNIFIED IDEOGRAPH
+ {0xDE5D, 0x8F62}, //16289 #CJK UNIFIED IDEOGRAPH
+ {0xDE5E, 0x8F63}, //16290 #CJK UNIFIED IDEOGRAPH
+ {0xDE5F, 0x8F64}, //16291 #CJK UNIFIED IDEOGRAPH
+ {0xDE60, 0x8F65}, //16292 #CJK UNIFIED IDEOGRAPH
+ {0xDE61, 0x8F6A}, //16293 #CJK UNIFIED IDEOGRAPH
+ {0xDE62, 0x8F80}, //16294 #CJK UNIFIED IDEOGRAPH
+ {0xDE63, 0x8F8C}, //16295 #CJK UNIFIED IDEOGRAPH
+ {0xDE64, 0x8F92}, //16296 #CJK UNIFIED IDEOGRAPH
+ {0xDE65, 0x8F9D}, //16297 #CJK UNIFIED IDEOGRAPH
+ {0xDE66, 0x8FA0}, //16298 #CJK UNIFIED IDEOGRAPH
+ {0xDE67, 0x8FA1}, //16299 #CJK UNIFIED IDEOGRAPH
+ {0xDE68, 0x8FA2}, //16300 #CJK UNIFIED IDEOGRAPH
+ {0xDE69, 0x8FA4}, //16301 #CJK UNIFIED IDEOGRAPH
+ {0xDE6A, 0x8FA5}, //16302 #CJK UNIFIED IDEOGRAPH
+ {0xDE6B, 0x8FA6}, //16303 #CJK UNIFIED IDEOGRAPH
+ {0xDE6C, 0x8FA7}, //16304 #CJK UNIFIED IDEOGRAPH
+ {0xDE6D, 0x8FAA}, //16305 #CJK UNIFIED IDEOGRAPH
+ {0xDE6E, 0x8FAC}, //16306 #CJK UNIFIED IDEOGRAPH
+ {0xDE6F, 0x8FAD}, //16307 #CJK UNIFIED IDEOGRAPH
+ {0xDE70, 0x8FAE}, //16308 #CJK UNIFIED IDEOGRAPH
+ {0xDE71, 0x8FAF}, //16309 #CJK UNIFIED IDEOGRAPH
+ {0xDE72, 0x8FB2}, //16310 #CJK UNIFIED IDEOGRAPH
+ {0xDE73, 0x8FB3}, //16311 #CJK UNIFIED IDEOGRAPH
+ {0xDE74, 0x8FB4}, //16312 #CJK UNIFIED IDEOGRAPH
+ {0xDE75, 0x8FB5}, //16313 #CJK UNIFIED IDEOGRAPH
+ {0xDE76, 0x8FB7}, //16314 #CJK UNIFIED IDEOGRAPH
+ {0xDE77, 0x8FB8}, //16315 #CJK UNIFIED IDEOGRAPH
+ {0xDE78, 0x8FBA}, //16316 #CJK UNIFIED IDEOGRAPH
+ {0xDE79, 0x8FBB}, //16317 #CJK UNIFIED IDEOGRAPH
+ {0xDE7A, 0x8FBC}, //16318 #CJK UNIFIED IDEOGRAPH
+ {0xDE7B, 0x8FBF}, //16319 #CJK UNIFIED IDEOGRAPH
+ {0xDE7C, 0x8FC0}, //16320 #CJK UNIFIED IDEOGRAPH
+ {0xDE7D, 0x8FC3}, //16321 #CJK UNIFIED IDEOGRAPH
+ {0xDE7E, 0x8FC6}, //16322 #CJK UNIFIED IDEOGRAPH
+ {0xDE80, 0x8FC9}, //16323 #CJK UNIFIED IDEOGRAPH
+ {0xDE81, 0x8FCA}, //16324 #CJK UNIFIED IDEOGRAPH
+ {0xDE82, 0x8FCB}, //16325 #CJK UNIFIED IDEOGRAPH
+ {0xDE83, 0x8FCC}, //16326 #CJK UNIFIED IDEOGRAPH
+ {0xDE84, 0x8FCD}, //16327 #CJK UNIFIED IDEOGRAPH
+ {0xDE85, 0x8FCF}, //16328 #CJK UNIFIED IDEOGRAPH
+ {0xDE86, 0x8FD2}, //16329 #CJK UNIFIED IDEOGRAPH
+ {0xDE87, 0x8FD6}, //16330 #CJK UNIFIED IDEOGRAPH
+ {0xDE88, 0x8FD7}, //16331 #CJK UNIFIED IDEOGRAPH
+ {0xDE89, 0x8FDA}, //16332 #CJK UNIFIED IDEOGRAPH
+ {0xDE8A, 0x8FE0}, //16333 #CJK UNIFIED IDEOGRAPH
+ {0xDE8B, 0x8FE1}, //16334 #CJK UNIFIED IDEOGRAPH
+ {0xDE8C, 0x8FE3}, //16335 #CJK UNIFIED IDEOGRAPH
+ {0xDE8D, 0x8FE7}, //16336 #CJK UNIFIED IDEOGRAPH
+ {0xDE8E, 0x8FEC}, //16337 #CJK UNIFIED IDEOGRAPH
+ {0xDE8F, 0x8FEF}, //16338 #CJK UNIFIED IDEOGRAPH
+ {0xDE90, 0x8FF1}, //16339 #CJK UNIFIED IDEOGRAPH
+ {0xDE91, 0x8FF2}, //16340 #CJK UNIFIED IDEOGRAPH
+ {0xDE92, 0x8FF4}, //16341 #CJK UNIFIED IDEOGRAPH
+ {0xDE93, 0x8FF5}, //16342 #CJK UNIFIED IDEOGRAPH
+ {0xDE94, 0x8FF6}, //16343 #CJK UNIFIED IDEOGRAPH
+ {0xDE95, 0x8FFA}, //16344 #CJK UNIFIED IDEOGRAPH
+ {0xDE96, 0x8FFB}, //16345 #CJK UNIFIED IDEOGRAPH
+ {0xDE97, 0x8FFC}, //16346 #CJK UNIFIED IDEOGRAPH
+ {0xDE98, 0x8FFE}, //16347 #CJK UNIFIED IDEOGRAPH
+ {0xDE99, 0x8FFF}, //16348 #CJK UNIFIED IDEOGRAPH
+ {0xDE9A, 0x9007}, //16349 #CJK UNIFIED IDEOGRAPH
+ {0xDE9B, 0x9008}, //16350 #CJK UNIFIED IDEOGRAPH
+ {0xDE9C, 0x900C}, //16351 #CJK UNIFIED IDEOGRAPH
+ {0xDE9D, 0x900E}, //16352 #CJK UNIFIED IDEOGRAPH
+ {0xDE9E, 0x9013}, //16353 #CJK UNIFIED IDEOGRAPH
+ {0xDE9F, 0x9015}, //16354 #CJK UNIFIED IDEOGRAPH
+ {0xDEA0, 0x9018}, //16355 #CJK UNIFIED IDEOGRAPH
+ {0xDEA1, 0x8556}, //16356 #CJK UNIFIED IDEOGRAPH
+ {0xDEA2, 0x853B}, //16357 #CJK UNIFIED IDEOGRAPH
+ {0xDEA3, 0x84FF}, //16358 #CJK UNIFIED IDEOGRAPH
+ {0xDEA4, 0x84FC}, //16359 #CJK UNIFIED IDEOGRAPH
+ {0xDEA5, 0x8559}, //16360 #CJK UNIFIED IDEOGRAPH
+ {0xDEA6, 0x8548}, //16361 #CJK UNIFIED IDEOGRAPH
+ {0xDEA7, 0x8568}, //16362 #CJK UNIFIED IDEOGRAPH
+ {0xDEA8, 0x8564}, //16363 #CJK UNIFIED IDEOGRAPH
+ {0xDEA9, 0x855E}, //16364 #CJK UNIFIED IDEOGRAPH
+ {0xDEAA, 0x857A}, //16365 #CJK UNIFIED IDEOGRAPH
+ {0xDEAB, 0x77A2}, //16366 #CJK UNIFIED IDEOGRAPH
+ {0xDEAC, 0x8543}, //16367 #CJK UNIFIED IDEOGRAPH
+ {0xDEAD, 0x8572}, //16368 #CJK UNIFIED IDEOGRAPH
+ {0xDEAE, 0x857B}, //16369 #CJK UNIFIED IDEOGRAPH
+ {0xDEAF, 0x85A4}, //16370 #CJK UNIFIED IDEOGRAPH
+ {0xDEB0, 0x85A8}, //16371 #CJK UNIFIED IDEOGRAPH
+ {0xDEB1, 0x8587}, //16372 #CJK UNIFIED IDEOGRAPH
+ {0xDEB2, 0x858F}, //16373 #CJK UNIFIED IDEOGRAPH
+ {0xDEB3, 0x8579}, //16374 #CJK UNIFIED IDEOGRAPH
+ {0xDEB4, 0x85AE}, //16375 #CJK UNIFIED IDEOGRAPH
+ {0xDEB5, 0x859C}, //16376 #CJK UNIFIED IDEOGRAPH
+ {0xDEB6, 0x8585}, //16377 #CJK UNIFIED IDEOGRAPH
+ {0xDEB7, 0x85B9}, //16378 #CJK UNIFIED IDEOGRAPH
+ {0xDEB8, 0x85B7}, //16379 #CJK UNIFIED IDEOGRAPH
+ {0xDEB9, 0x85B0}, //16380 #CJK UNIFIED IDEOGRAPH
+ {0xDEBA, 0x85D3}, //16381 #CJK UNIFIED IDEOGRAPH
+ {0xDEBB, 0x85C1}, //16382 #CJK UNIFIED IDEOGRAPH
+ {0xDEBC, 0x85DC}, //16383 #CJK UNIFIED IDEOGRAPH
+ {0xDEBD, 0x85FF}, //16384 #CJK UNIFIED IDEOGRAPH
+ {0xDEBE, 0x8627}, //16385 #CJK UNIFIED IDEOGRAPH
+ {0xDEBF, 0x8605}, //16386 #CJK UNIFIED IDEOGRAPH
+ {0xDEC0, 0x8629}, //16387 #CJK UNIFIED IDEOGRAPH
+ {0xDEC1, 0x8616}, //16388 #CJK UNIFIED IDEOGRAPH
+ {0xDEC2, 0x863C}, //16389 #CJK UNIFIED IDEOGRAPH
+ {0xDEC3, 0x5EFE}, //16390 #CJK UNIFIED IDEOGRAPH
+ {0xDEC4, 0x5F08}, //16391 #CJK UNIFIED IDEOGRAPH
+ {0xDEC5, 0x593C}, //16392 #CJK UNIFIED IDEOGRAPH
+ {0xDEC6, 0x5941}, //16393 #CJK UNIFIED IDEOGRAPH
+ {0xDEC7, 0x8037}, //16394 #CJK UNIFIED IDEOGRAPH
+ {0xDEC8, 0x5955}, //16395 #CJK UNIFIED IDEOGRAPH
+ {0xDEC9, 0x595A}, //16396 #CJK UNIFIED IDEOGRAPH
+ {0xDECA, 0x5958}, //16397 #CJK UNIFIED IDEOGRAPH
+ {0xDECB, 0x530F}, //16398 #CJK UNIFIED IDEOGRAPH
+ {0xDECC, 0x5C22}, //16399 #CJK UNIFIED IDEOGRAPH
+ {0xDECD, 0x5C25}, //16400 #CJK UNIFIED IDEOGRAPH
+ {0xDECE, 0x5C2C}, //16401 #CJK UNIFIED IDEOGRAPH
+ {0xDECF, 0x5C34}, //16402 #CJK UNIFIED IDEOGRAPH
+ {0xDED0, 0x624C}, //16403 #CJK UNIFIED IDEOGRAPH
+ {0xDED1, 0x626A}, //16404 #CJK UNIFIED IDEOGRAPH
+ {0xDED2, 0x629F}, //16405 #CJK UNIFIED IDEOGRAPH
+ {0xDED3, 0x62BB}, //16406 #CJK UNIFIED IDEOGRAPH
+ {0xDED4, 0x62CA}, //16407 #CJK UNIFIED IDEOGRAPH
+ {0xDED5, 0x62DA}, //16408 #CJK UNIFIED IDEOGRAPH
+ {0xDED6, 0x62D7}, //16409 #CJK UNIFIED IDEOGRAPH
+ {0xDED7, 0x62EE}, //16410 #CJK UNIFIED IDEOGRAPH
+ {0xDED8, 0x6322}, //16411 #CJK UNIFIED IDEOGRAPH
+ {0xDED9, 0x62F6}, //16412 #CJK UNIFIED IDEOGRAPH
+ {0xDEDA, 0x6339}, //16413 #CJK UNIFIED IDEOGRAPH
+ {0xDEDB, 0x634B}, //16414 #CJK UNIFIED IDEOGRAPH
+ {0xDEDC, 0x6343}, //16415 #CJK UNIFIED IDEOGRAPH
+ {0xDEDD, 0x63AD}, //16416 #CJK UNIFIED IDEOGRAPH
+ {0xDEDE, 0x63F6}, //16417 #CJK UNIFIED IDEOGRAPH
+ {0xDEDF, 0x6371}, //16418 #CJK UNIFIED IDEOGRAPH
+ {0xDEE0, 0x637A}, //16419 #CJK UNIFIED IDEOGRAPH
+ {0xDEE1, 0x638E}, //16420 #CJK UNIFIED IDEOGRAPH
+ {0xDEE2, 0x63B4}, //16421 #CJK UNIFIED IDEOGRAPH
+ {0xDEE3, 0x636D}, //16422 #CJK UNIFIED IDEOGRAPH
+ {0xDEE4, 0x63AC}, //16423 #CJK UNIFIED IDEOGRAPH
+ {0xDEE5, 0x638A}, //16424 #CJK UNIFIED IDEOGRAPH
+ {0xDEE6, 0x6369}, //16425 #CJK UNIFIED IDEOGRAPH
+ {0xDEE7, 0x63AE}, //16426 #CJK UNIFIED IDEOGRAPH
+ {0xDEE8, 0x63BC}, //16427 #CJK UNIFIED IDEOGRAPH
+ {0xDEE9, 0x63F2}, //16428 #CJK UNIFIED IDEOGRAPH
+ {0xDEEA, 0x63F8}, //16429 #CJK UNIFIED IDEOGRAPH
+ {0xDEEB, 0x63E0}, //16430 #CJK UNIFIED IDEOGRAPH
+ {0xDEEC, 0x63FF}, //16431 #CJK UNIFIED IDEOGRAPH
+ {0xDEED, 0x63C4}, //16432 #CJK UNIFIED IDEOGRAPH
+ {0xDEEE, 0x63DE}, //16433 #CJK UNIFIED IDEOGRAPH
+ {0xDEEF, 0x63CE}, //16434 #CJK UNIFIED IDEOGRAPH
+ {0xDEF0, 0x6452}, //16435 #CJK UNIFIED IDEOGRAPH
+ {0xDEF1, 0x63C6}, //16436 #CJK UNIFIED IDEOGRAPH
+ {0xDEF2, 0x63BE}, //16437 #CJK UNIFIED IDEOGRAPH
+ {0xDEF3, 0x6445}, //16438 #CJK UNIFIED IDEOGRAPH
+ {0xDEF4, 0x6441}, //16439 #CJK UNIFIED IDEOGRAPH
+ {0xDEF5, 0x640B}, //16440 #CJK UNIFIED IDEOGRAPH
+ {0xDEF6, 0x641B}, //16441 #CJK UNIFIED IDEOGRAPH
+ {0xDEF7, 0x6420}, //16442 #CJK UNIFIED IDEOGRAPH
+ {0xDEF8, 0x640C}, //16443 #CJK UNIFIED IDEOGRAPH
+ {0xDEF9, 0x6426}, //16444 #CJK UNIFIED IDEOGRAPH
+ {0xDEFA, 0x6421}, //16445 #CJK UNIFIED IDEOGRAPH
+ {0xDEFB, 0x645E}, //16446 #CJK UNIFIED IDEOGRAPH
+ {0xDEFC, 0x6484}, //16447 #CJK UNIFIED IDEOGRAPH
+ {0xDEFD, 0x646D}, //16448 #CJK UNIFIED IDEOGRAPH
+ {0xDEFE, 0x6496}, //16449 #CJK UNIFIED IDEOGRAPH
+ {0xDF40, 0x9019}, //16450 #CJK UNIFIED IDEOGRAPH
+ {0xDF41, 0x901C}, //16451 #CJK UNIFIED IDEOGRAPH
+ {0xDF42, 0x9023}, //16452 #CJK UNIFIED IDEOGRAPH
+ {0xDF43, 0x9024}, //16453 #CJK UNIFIED IDEOGRAPH
+ {0xDF44, 0x9025}, //16454 #CJK UNIFIED IDEOGRAPH
+ {0xDF45, 0x9027}, //16455 #CJK UNIFIED IDEOGRAPH
+ {0xDF46, 0x9028}, //16456 #CJK UNIFIED IDEOGRAPH
+ {0xDF47, 0x9029}, //16457 #CJK UNIFIED IDEOGRAPH
+ {0xDF48, 0x902A}, //16458 #CJK UNIFIED IDEOGRAPH
+ {0xDF49, 0x902B}, //16459 #CJK UNIFIED IDEOGRAPH
+ {0xDF4A, 0x902C}, //16460 #CJK UNIFIED IDEOGRAPH
+ {0xDF4B, 0x9030}, //16461 #CJK UNIFIED IDEOGRAPH
+ {0xDF4C, 0x9031}, //16462 #CJK UNIFIED IDEOGRAPH
+ {0xDF4D, 0x9032}, //16463 #CJK UNIFIED IDEOGRAPH
+ {0xDF4E, 0x9033}, //16464 #CJK UNIFIED IDEOGRAPH
+ {0xDF4F, 0x9034}, //16465 #CJK UNIFIED IDEOGRAPH
+ {0xDF50, 0x9037}, //16466 #CJK UNIFIED IDEOGRAPH
+ {0xDF51, 0x9039}, //16467 #CJK UNIFIED IDEOGRAPH
+ {0xDF52, 0x903A}, //16468 #CJK UNIFIED IDEOGRAPH
+ {0xDF53, 0x903D}, //16469 #CJK UNIFIED IDEOGRAPH
+ {0xDF54, 0x903F}, //16470 #CJK UNIFIED IDEOGRAPH
+ {0xDF55, 0x9040}, //16471 #CJK UNIFIED IDEOGRAPH
+ {0xDF56, 0x9043}, //16472 #CJK UNIFIED IDEOGRAPH
+ {0xDF57, 0x9045}, //16473 #CJK UNIFIED IDEOGRAPH
+ {0xDF58, 0x9046}, //16474 #CJK UNIFIED IDEOGRAPH
+ {0xDF59, 0x9048}, //16475 #CJK UNIFIED IDEOGRAPH
+ {0xDF5A, 0x9049}, //16476 #CJK UNIFIED IDEOGRAPH
+ {0xDF5B, 0x904A}, //16477 #CJK UNIFIED IDEOGRAPH
+ {0xDF5C, 0x904B}, //16478 #CJK UNIFIED IDEOGRAPH
+ {0xDF5D, 0x904C}, //16479 #CJK UNIFIED IDEOGRAPH
+ {0xDF5E, 0x904E}, //16480 #CJK UNIFIED IDEOGRAPH
+ {0xDF5F, 0x9054}, //16481 #CJK UNIFIED IDEOGRAPH
+ {0xDF60, 0x9055}, //16482 #CJK UNIFIED IDEOGRAPH
+ {0xDF61, 0x9056}, //16483 #CJK UNIFIED IDEOGRAPH
+ {0xDF62, 0x9059}, //16484 #CJK UNIFIED IDEOGRAPH
+ {0xDF63, 0x905A}, //16485 #CJK UNIFIED IDEOGRAPH
+ {0xDF64, 0x905C}, //16486 #CJK UNIFIED IDEOGRAPH
+ {0xDF65, 0x905D}, //16487 #CJK UNIFIED IDEOGRAPH
+ {0xDF66, 0x905E}, //16488 #CJK UNIFIED IDEOGRAPH
+ {0xDF67, 0x905F}, //16489 #CJK UNIFIED IDEOGRAPH
+ {0xDF68, 0x9060}, //16490 #CJK UNIFIED IDEOGRAPH
+ {0xDF69, 0x9061}, //16491 #CJK UNIFIED IDEOGRAPH
+ {0xDF6A, 0x9064}, //16492 #CJK UNIFIED IDEOGRAPH
+ {0xDF6B, 0x9066}, //16493 #CJK UNIFIED IDEOGRAPH
+ {0xDF6C, 0x9067}, //16494 #CJK UNIFIED IDEOGRAPH
+ {0xDF6D, 0x9069}, //16495 #CJK UNIFIED IDEOGRAPH
+ {0xDF6E, 0x906A}, //16496 #CJK UNIFIED IDEOGRAPH
+ {0xDF6F, 0x906B}, //16497 #CJK UNIFIED IDEOGRAPH
+ {0xDF70, 0x906C}, //16498 #CJK UNIFIED IDEOGRAPH
+ {0xDF71, 0x906F}, //16499 #CJK UNIFIED IDEOGRAPH
+ {0xDF72, 0x9070}, //16500 #CJK UNIFIED IDEOGRAPH
+ {0xDF73, 0x9071}, //16501 #CJK UNIFIED IDEOGRAPH
+ {0xDF74, 0x9072}, //16502 #CJK UNIFIED IDEOGRAPH
+ {0xDF75, 0x9073}, //16503 #CJK UNIFIED IDEOGRAPH
+ {0xDF76, 0x9076}, //16504 #CJK UNIFIED IDEOGRAPH
+ {0xDF77, 0x9077}, //16505 #CJK UNIFIED IDEOGRAPH
+ {0xDF78, 0x9078}, //16506 #CJK UNIFIED IDEOGRAPH
+ {0xDF79, 0x9079}, //16507 #CJK UNIFIED IDEOGRAPH
+ {0xDF7A, 0x907A}, //16508 #CJK UNIFIED IDEOGRAPH
+ {0xDF7B, 0x907B}, //16509 #CJK UNIFIED IDEOGRAPH
+ {0xDF7C, 0x907C}, //16510 #CJK UNIFIED IDEOGRAPH
+ {0xDF7D, 0x907E}, //16511 #CJK UNIFIED IDEOGRAPH
+ {0xDF7E, 0x9081}, //16512 #CJK UNIFIED IDEOGRAPH
+ {0xDF80, 0x9084}, //16513 #CJK UNIFIED IDEOGRAPH
+ {0xDF81, 0x9085}, //16514 #CJK UNIFIED IDEOGRAPH
+ {0xDF82, 0x9086}, //16515 #CJK UNIFIED IDEOGRAPH
+ {0xDF83, 0x9087}, //16516 #CJK UNIFIED IDEOGRAPH
+ {0xDF84, 0x9089}, //16517 #CJK UNIFIED IDEOGRAPH
+ {0xDF85, 0x908A}, //16518 #CJK UNIFIED IDEOGRAPH
+ {0xDF86, 0x908C}, //16519 #CJK UNIFIED IDEOGRAPH
+ {0xDF87, 0x908D}, //16520 #CJK UNIFIED IDEOGRAPH
+ {0xDF88, 0x908E}, //16521 #CJK UNIFIED IDEOGRAPH
+ {0xDF89, 0x908F}, //16522 #CJK UNIFIED IDEOGRAPH
+ {0xDF8A, 0x9090}, //16523 #CJK UNIFIED IDEOGRAPH
+ {0xDF8B, 0x9092}, //16524 #CJK UNIFIED IDEOGRAPH
+ {0xDF8C, 0x9094}, //16525 #CJK UNIFIED IDEOGRAPH
+ {0xDF8D, 0x9096}, //16526 #CJK UNIFIED IDEOGRAPH
+ {0xDF8E, 0x9098}, //16527 #CJK UNIFIED IDEOGRAPH
+ {0xDF8F, 0x909A}, //16528 #CJK UNIFIED IDEOGRAPH
+ {0xDF90, 0x909C}, //16529 #CJK UNIFIED IDEOGRAPH
+ {0xDF91, 0x909E}, //16530 #CJK UNIFIED IDEOGRAPH
+ {0xDF92, 0x909F}, //16531 #CJK UNIFIED IDEOGRAPH
+ {0xDF93, 0x90A0}, //16532 #CJK UNIFIED IDEOGRAPH
+ {0xDF94, 0x90A4}, //16533 #CJK UNIFIED IDEOGRAPH
+ {0xDF95, 0x90A5}, //16534 #CJK UNIFIED IDEOGRAPH
+ {0xDF96, 0x90A7}, //16535 #CJK UNIFIED IDEOGRAPH
+ {0xDF97, 0x90A8}, //16536 #CJK UNIFIED IDEOGRAPH
+ {0xDF98, 0x90A9}, //16537 #CJK UNIFIED IDEOGRAPH
+ {0xDF99, 0x90AB}, //16538 #CJK UNIFIED IDEOGRAPH
+ {0xDF9A, 0x90AD}, //16539 #CJK UNIFIED IDEOGRAPH
+ {0xDF9B, 0x90B2}, //16540 #CJK UNIFIED IDEOGRAPH
+ {0xDF9C, 0x90B7}, //16541 #CJK UNIFIED IDEOGRAPH
+ {0xDF9D, 0x90BC}, //16542 #CJK UNIFIED IDEOGRAPH
+ {0xDF9E, 0x90BD}, //16543 #CJK UNIFIED IDEOGRAPH
+ {0xDF9F, 0x90BF}, //16544 #CJK UNIFIED IDEOGRAPH
+ {0xDFA0, 0x90C0}, //16545 #CJK UNIFIED IDEOGRAPH
+ {0xDFA1, 0x647A}, //16546 #CJK UNIFIED IDEOGRAPH
+ {0xDFA2, 0x64B7}, //16547 #CJK UNIFIED IDEOGRAPH
+ {0xDFA3, 0x64B8}, //16548 #CJK UNIFIED IDEOGRAPH
+ {0xDFA4, 0x6499}, //16549 #CJK UNIFIED IDEOGRAPH
+ {0xDFA5, 0x64BA}, //16550 #CJK UNIFIED IDEOGRAPH
+ {0xDFA6, 0x64C0}, //16551 #CJK UNIFIED IDEOGRAPH
+ {0xDFA7, 0x64D0}, //16552 #CJK UNIFIED IDEOGRAPH
+ {0xDFA8, 0x64D7}, //16553 #CJK UNIFIED IDEOGRAPH
+ {0xDFA9, 0x64E4}, //16554 #CJK UNIFIED IDEOGRAPH
+ {0xDFAA, 0x64E2}, //16555 #CJK UNIFIED IDEOGRAPH
+ {0xDFAB, 0x6509}, //16556 #CJK UNIFIED IDEOGRAPH
+ {0xDFAC, 0x6525}, //16557 #CJK UNIFIED IDEOGRAPH
+ {0xDFAD, 0x652E}, //16558 #CJK UNIFIED IDEOGRAPH
+ {0xDFAE, 0x5F0B}, //16559 #CJK UNIFIED IDEOGRAPH
+ {0xDFAF, 0x5FD2}, //16560 #CJK UNIFIED IDEOGRAPH
+ {0xDFB0, 0x7519}, //16561 #CJK UNIFIED IDEOGRAPH
+ {0xDFB1, 0x5F11}, //16562 #CJK UNIFIED IDEOGRAPH
+ {0xDFB2, 0x535F}, //16563 #CJK UNIFIED IDEOGRAPH
+ {0xDFB3, 0x53F1}, //16564 #CJK UNIFIED IDEOGRAPH
+ {0xDFB4, 0x53FD}, //16565 #CJK UNIFIED IDEOGRAPH
+ {0xDFB5, 0x53E9}, //16566 #CJK UNIFIED IDEOGRAPH
+ {0xDFB6, 0x53E8}, //16567 #CJK UNIFIED IDEOGRAPH
+ {0xDFB7, 0x53FB}, //16568 #CJK UNIFIED IDEOGRAPH
+ {0xDFB8, 0x5412}, //16569 #CJK UNIFIED IDEOGRAPH
+ {0xDFB9, 0x5416}, //16570 #CJK UNIFIED IDEOGRAPH
+ {0xDFBA, 0x5406}, //16571 #CJK UNIFIED IDEOGRAPH
+ {0xDFBB, 0x544B}, //16572 #CJK UNIFIED IDEOGRAPH
+ {0xDFBC, 0x5452}, //16573 #CJK UNIFIED IDEOGRAPH
+ {0xDFBD, 0x5453}, //16574 #CJK UNIFIED IDEOGRAPH
+ {0xDFBE, 0x5454}, //16575 #CJK UNIFIED IDEOGRAPH
+ {0xDFBF, 0x5456}, //16576 #CJK UNIFIED IDEOGRAPH
+ {0xDFC0, 0x5443}, //16577 #CJK UNIFIED IDEOGRAPH
+ {0xDFC1, 0x5421}, //16578 #CJK UNIFIED IDEOGRAPH
+ {0xDFC2, 0x5457}, //16579 #CJK UNIFIED IDEOGRAPH
+ {0xDFC3, 0x5459}, //16580 #CJK UNIFIED IDEOGRAPH
+ {0xDFC4, 0x5423}, //16581 #CJK UNIFIED IDEOGRAPH
+ {0xDFC5, 0x5432}, //16582 #CJK UNIFIED IDEOGRAPH
+ {0xDFC6, 0x5482}, //16583 #CJK UNIFIED IDEOGRAPH
+ {0xDFC7, 0x5494}, //16584 #CJK UNIFIED IDEOGRAPH
+ {0xDFC8, 0x5477}, //16585 #CJK UNIFIED IDEOGRAPH
+ {0xDFC9, 0x5471}, //16586 #CJK UNIFIED IDEOGRAPH
+ {0xDFCA, 0x5464}, //16587 #CJK UNIFIED IDEOGRAPH
+ {0xDFCB, 0x549A}, //16588 #CJK UNIFIED IDEOGRAPH
+ {0xDFCC, 0x549B}, //16589 #CJK UNIFIED IDEOGRAPH
+ {0xDFCD, 0x5484}, //16590 #CJK UNIFIED IDEOGRAPH
+ {0xDFCE, 0x5476}, //16591 #CJK UNIFIED IDEOGRAPH
+ {0xDFCF, 0x5466}, //16592 #CJK UNIFIED IDEOGRAPH
+ {0xDFD0, 0x549D}, //16593 #CJK UNIFIED IDEOGRAPH
+ {0xDFD1, 0x54D0}, //16594 #CJK UNIFIED IDEOGRAPH
+ {0xDFD2, 0x54AD}, //16595 #CJK UNIFIED IDEOGRAPH
+ {0xDFD3, 0x54C2}, //16596 #CJK UNIFIED IDEOGRAPH
+ {0xDFD4, 0x54B4}, //16597 #CJK UNIFIED IDEOGRAPH
+ {0xDFD5, 0x54D2}, //16598 #CJK UNIFIED IDEOGRAPH
+ {0xDFD6, 0x54A7}, //16599 #CJK UNIFIED IDEOGRAPH
+ {0xDFD7, 0x54A6}, //16600 #CJK UNIFIED IDEOGRAPH
+ {0xDFD8, 0x54D3}, //16601 #CJK UNIFIED IDEOGRAPH
+ {0xDFD9, 0x54D4}, //16602 #CJK UNIFIED IDEOGRAPH
+ {0xDFDA, 0x5472}, //16603 #CJK UNIFIED IDEOGRAPH
+ {0xDFDB, 0x54A3}, //16604 #CJK UNIFIED IDEOGRAPH
+ {0xDFDC, 0x54D5}, //16605 #CJK UNIFIED IDEOGRAPH
+ {0xDFDD, 0x54BB}, //16606 #CJK UNIFIED IDEOGRAPH
+ {0xDFDE, 0x54BF}, //16607 #CJK UNIFIED IDEOGRAPH
+ {0xDFDF, 0x54CC}, //16608 #CJK UNIFIED IDEOGRAPH
+ {0xDFE0, 0x54D9}, //16609 #CJK UNIFIED IDEOGRAPH
+ {0xDFE1, 0x54DA}, //16610 #CJK UNIFIED IDEOGRAPH
+ {0xDFE2, 0x54DC}, //16611 #CJK UNIFIED IDEOGRAPH
+ {0xDFE3, 0x54A9}, //16612 #CJK UNIFIED IDEOGRAPH
+ {0xDFE4, 0x54AA}, //16613 #CJK UNIFIED IDEOGRAPH
+ {0xDFE5, 0x54A4}, //16614 #CJK UNIFIED IDEOGRAPH
+ {0xDFE6, 0x54DD}, //16615 #CJK UNIFIED IDEOGRAPH
+ {0xDFE7, 0x54CF}, //16616 #CJK UNIFIED IDEOGRAPH
+ {0xDFE8, 0x54DE}, //16617 #CJK UNIFIED IDEOGRAPH
+ {0xDFE9, 0x551B}, //16618 #CJK UNIFIED IDEOGRAPH
+ {0xDFEA, 0x54E7}, //16619 #CJK UNIFIED IDEOGRAPH
+ {0xDFEB, 0x5520}, //16620 #CJK UNIFIED IDEOGRAPH
+ {0xDFEC, 0x54FD}, //16621 #CJK UNIFIED IDEOGRAPH
+ {0xDFED, 0x5514}, //16622 #CJK UNIFIED IDEOGRAPH
+ {0xDFEE, 0x54F3}, //16623 #CJK UNIFIED IDEOGRAPH
+ {0xDFEF, 0x5522}, //16624 #CJK UNIFIED IDEOGRAPH
+ {0xDFF0, 0x5523}, //16625 #CJK UNIFIED IDEOGRAPH
+ {0xDFF1, 0x550F}, //16626 #CJK UNIFIED IDEOGRAPH
+ {0xDFF2, 0x5511}, //16627 #CJK UNIFIED IDEOGRAPH
+ {0xDFF3, 0x5527}, //16628 #CJK UNIFIED IDEOGRAPH
+ {0xDFF4, 0x552A}, //16629 #CJK UNIFIED IDEOGRAPH
+ {0xDFF5, 0x5567}, //16630 #CJK UNIFIED IDEOGRAPH
+ {0xDFF6, 0x558F}, //16631 #CJK UNIFIED IDEOGRAPH
+ {0xDFF7, 0x55B5}, //16632 #CJK UNIFIED IDEOGRAPH
+ {0xDFF8, 0x5549}, //16633 #CJK UNIFIED IDEOGRAPH
+ {0xDFF9, 0x556D}, //16634 #CJK UNIFIED IDEOGRAPH
+ {0xDFFA, 0x5541}, //16635 #CJK UNIFIED IDEOGRAPH
+ {0xDFFB, 0x5555}, //16636 #CJK UNIFIED IDEOGRAPH
+ {0xDFFC, 0x553F}, //16637 #CJK UNIFIED IDEOGRAPH
+ {0xDFFD, 0x5550}, //16638 #CJK UNIFIED IDEOGRAPH
+ {0xDFFE, 0x553C}, //16639 #CJK UNIFIED IDEOGRAPH
+ {0xE040, 0x90C2}, //16640 #CJK UNIFIED IDEOGRAPH
+ {0xE041, 0x90C3}, //16641 #CJK UNIFIED IDEOGRAPH
+ {0xE042, 0x90C6}, //16642 #CJK UNIFIED IDEOGRAPH
+ {0xE043, 0x90C8}, //16643 #CJK UNIFIED IDEOGRAPH
+ {0xE044, 0x90C9}, //16644 #CJK UNIFIED IDEOGRAPH
+ {0xE045, 0x90CB}, //16645 #CJK UNIFIED IDEOGRAPH
+ {0xE046, 0x90CC}, //16646 #CJK UNIFIED IDEOGRAPH
+ {0xE047, 0x90CD}, //16647 #CJK UNIFIED IDEOGRAPH
+ {0xE048, 0x90D2}, //16648 #CJK UNIFIED IDEOGRAPH
+ {0xE049, 0x90D4}, //16649 #CJK UNIFIED IDEOGRAPH
+ {0xE04A, 0x90D5}, //16650 #CJK UNIFIED IDEOGRAPH
+ {0xE04B, 0x90D6}, //16651 #CJK UNIFIED IDEOGRAPH
+ {0xE04C, 0x90D8}, //16652 #CJK UNIFIED IDEOGRAPH
+ {0xE04D, 0x90D9}, //16653 #CJK UNIFIED IDEOGRAPH
+ {0xE04E, 0x90DA}, //16654 #CJK UNIFIED IDEOGRAPH
+ {0xE04F, 0x90DE}, //16655 #CJK UNIFIED IDEOGRAPH
+ {0xE050, 0x90DF}, //16656 #CJK UNIFIED IDEOGRAPH
+ {0xE051, 0x90E0}, //16657 #CJK UNIFIED IDEOGRAPH
+ {0xE052, 0x90E3}, //16658 #CJK UNIFIED IDEOGRAPH
+ {0xE053, 0x90E4}, //16659 #CJK UNIFIED IDEOGRAPH
+ {0xE054, 0x90E5}, //16660 #CJK UNIFIED IDEOGRAPH
+ {0xE055, 0x90E9}, //16661 #CJK UNIFIED IDEOGRAPH
+ {0xE056, 0x90EA}, //16662 #CJK UNIFIED IDEOGRAPH
+ {0xE057, 0x90EC}, //16663 #CJK UNIFIED IDEOGRAPH
+ {0xE058, 0x90EE}, //16664 #CJK UNIFIED IDEOGRAPH
+ {0xE059, 0x90F0}, //16665 #CJK UNIFIED IDEOGRAPH
+ {0xE05A, 0x90F1}, //16666 #CJK UNIFIED IDEOGRAPH
+ {0xE05B, 0x90F2}, //16667 #CJK UNIFIED IDEOGRAPH
+ {0xE05C, 0x90F3}, //16668 #CJK UNIFIED IDEOGRAPH
+ {0xE05D, 0x90F5}, //16669 #CJK UNIFIED IDEOGRAPH
+ {0xE05E, 0x90F6}, //16670 #CJK UNIFIED IDEOGRAPH
+ {0xE05F, 0x90F7}, //16671 #CJK UNIFIED IDEOGRAPH
+ {0xE060, 0x90F9}, //16672 #CJK UNIFIED IDEOGRAPH
+ {0xE061, 0x90FA}, //16673 #CJK UNIFIED IDEOGRAPH
+ {0xE062, 0x90FB}, //16674 #CJK UNIFIED IDEOGRAPH
+ {0xE063, 0x90FC}, //16675 #CJK UNIFIED IDEOGRAPH
+ {0xE064, 0x90FF}, //16676 #CJK UNIFIED IDEOGRAPH
+ {0xE065, 0x9100}, //16677 #CJK UNIFIED IDEOGRAPH
+ {0xE066, 0x9101}, //16678 #CJK UNIFIED IDEOGRAPH
+ {0xE067, 0x9103}, //16679 #CJK UNIFIED IDEOGRAPH
+ {0xE068, 0x9105}, //16680 #CJK UNIFIED IDEOGRAPH
+ {0xE069, 0x9106}, //16681 #CJK UNIFIED IDEOGRAPH
+ {0xE06A, 0x9107}, //16682 #CJK UNIFIED IDEOGRAPH
+ {0xE06B, 0x9108}, //16683 #CJK UNIFIED IDEOGRAPH
+ {0xE06C, 0x9109}, //16684 #CJK UNIFIED IDEOGRAPH
+ {0xE06D, 0x910A}, //16685 #CJK UNIFIED IDEOGRAPH
+ {0xE06E, 0x910B}, //16686 #CJK UNIFIED IDEOGRAPH
+ {0xE06F, 0x910C}, //16687 #CJK UNIFIED IDEOGRAPH
+ {0xE070, 0x910D}, //16688 #CJK UNIFIED IDEOGRAPH
+ {0xE071, 0x910E}, //16689 #CJK UNIFIED IDEOGRAPH
+ {0xE072, 0x910F}, //16690 #CJK UNIFIED IDEOGRAPH
+ {0xE073, 0x9110}, //16691 #CJK UNIFIED IDEOGRAPH
+ {0xE074, 0x9111}, //16692 #CJK UNIFIED IDEOGRAPH
+ {0xE075, 0x9112}, //16693 #CJK UNIFIED IDEOGRAPH
+ {0xE076, 0x9113}, //16694 #CJK UNIFIED IDEOGRAPH
+ {0xE077, 0x9114}, //16695 #CJK UNIFIED IDEOGRAPH
+ {0xE078, 0x9115}, //16696 #CJK UNIFIED IDEOGRAPH
+ {0xE079, 0x9116}, //16697 #CJK UNIFIED IDEOGRAPH
+ {0xE07A, 0x9117}, //16698 #CJK UNIFIED IDEOGRAPH
+ {0xE07B, 0x9118}, //16699 #CJK UNIFIED IDEOGRAPH
+ {0xE07C, 0x911A}, //16700 #CJK UNIFIED IDEOGRAPH
+ {0xE07D, 0x911B}, //16701 #CJK UNIFIED IDEOGRAPH
+ {0xE07E, 0x911C}, //16702 #CJK UNIFIED IDEOGRAPH
+ {0xE080, 0x911D}, //16703 #CJK UNIFIED IDEOGRAPH
+ {0xE081, 0x911F}, //16704 #CJK UNIFIED IDEOGRAPH
+ {0xE082, 0x9120}, //16705 #CJK UNIFIED IDEOGRAPH
+ {0xE083, 0x9121}, //16706 #CJK UNIFIED IDEOGRAPH
+ {0xE084, 0x9124}, //16707 #CJK UNIFIED IDEOGRAPH
+ {0xE085, 0x9125}, //16708 #CJK UNIFIED IDEOGRAPH
+ {0xE086, 0x9126}, //16709 #CJK UNIFIED IDEOGRAPH
+ {0xE087, 0x9127}, //16710 #CJK UNIFIED IDEOGRAPH
+ {0xE088, 0x9128}, //16711 #CJK UNIFIED IDEOGRAPH
+ {0xE089, 0x9129}, //16712 #CJK UNIFIED IDEOGRAPH
+ {0xE08A, 0x912A}, //16713 #CJK UNIFIED IDEOGRAPH
+ {0xE08B, 0x912B}, //16714 #CJK UNIFIED IDEOGRAPH
+ {0xE08C, 0x912C}, //16715 #CJK UNIFIED IDEOGRAPH
+ {0xE08D, 0x912D}, //16716 #CJK UNIFIED IDEOGRAPH
+ {0xE08E, 0x912E}, //16717 #CJK UNIFIED IDEOGRAPH
+ {0xE08F, 0x9130}, //16718 #CJK UNIFIED IDEOGRAPH
+ {0xE090, 0x9132}, //16719 #CJK UNIFIED IDEOGRAPH
+ {0xE091, 0x9133}, //16720 #CJK UNIFIED IDEOGRAPH
+ {0xE092, 0x9134}, //16721 #CJK UNIFIED IDEOGRAPH
+ {0xE093, 0x9135}, //16722 #CJK UNIFIED IDEOGRAPH
+ {0xE094, 0x9136}, //16723 #CJK UNIFIED IDEOGRAPH
+ {0xE095, 0x9137}, //16724 #CJK UNIFIED IDEOGRAPH
+ {0xE096, 0x9138}, //16725 #CJK UNIFIED IDEOGRAPH
+ {0xE097, 0x913A}, //16726 #CJK UNIFIED IDEOGRAPH
+ {0xE098, 0x913B}, //16727 #CJK UNIFIED IDEOGRAPH
+ {0xE099, 0x913C}, //16728 #CJK UNIFIED IDEOGRAPH
+ {0xE09A, 0x913D}, //16729 #CJK UNIFIED IDEOGRAPH
+ {0xE09B, 0x913E}, //16730 #CJK UNIFIED IDEOGRAPH
+ {0xE09C, 0x913F}, //16731 #CJK UNIFIED IDEOGRAPH
+ {0xE09D, 0x9140}, //16732 #CJK UNIFIED IDEOGRAPH
+ {0xE09E, 0x9141}, //16733 #CJK UNIFIED IDEOGRAPH
+ {0xE09F, 0x9142}, //16734 #CJK UNIFIED IDEOGRAPH
+ {0xE0A0, 0x9144}, //16735 #CJK UNIFIED IDEOGRAPH
+ {0xE0A1, 0x5537}, //16736 #CJK UNIFIED IDEOGRAPH
+ {0xE0A2, 0x5556}, //16737 #CJK UNIFIED IDEOGRAPH
+ {0xE0A3, 0x5575}, //16738 #CJK UNIFIED IDEOGRAPH
+ {0xE0A4, 0x5576}, //16739 #CJK UNIFIED IDEOGRAPH
+ {0xE0A5, 0x5577}, //16740 #CJK UNIFIED IDEOGRAPH
+ {0xE0A6, 0x5533}, //16741 #CJK UNIFIED IDEOGRAPH
+ {0xE0A7, 0x5530}, //16742 #CJK UNIFIED IDEOGRAPH
+ {0xE0A8, 0x555C}, //16743 #CJK UNIFIED IDEOGRAPH
+ {0xE0A9, 0x558B}, //16744 #CJK UNIFIED IDEOGRAPH
+ {0xE0AA, 0x55D2}, //16745 #CJK UNIFIED IDEOGRAPH
+ {0xE0AB, 0x5583}, //16746 #CJK UNIFIED IDEOGRAPH
+ {0xE0AC, 0x55B1}, //16747 #CJK UNIFIED IDEOGRAPH
+ {0xE0AD, 0x55B9}, //16748 #CJK UNIFIED IDEOGRAPH
+ {0xE0AE, 0x5588}, //16749 #CJK UNIFIED IDEOGRAPH
+ {0xE0AF, 0x5581}, //16750 #CJK UNIFIED IDEOGRAPH
+ {0xE0B0, 0x559F}, //16751 #CJK UNIFIED IDEOGRAPH
+ {0xE0B1, 0x557E}, //16752 #CJK UNIFIED IDEOGRAPH
+ {0xE0B2, 0x55D6}, //16753 #CJK UNIFIED IDEOGRAPH
+ {0xE0B3, 0x5591}, //16754 #CJK UNIFIED IDEOGRAPH
+ {0xE0B4, 0x557B}, //16755 #CJK UNIFIED IDEOGRAPH
+ {0xE0B5, 0x55DF}, //16756 #CJK UNIFIED IDEOGRAPH
+ {0xE0B6, 0x55BD}, //16757 #CJK UNIFIED IDEOGRAPH
+ {0xE0B7, 0x55BE}, //16758 #CJK UNIFIED IDEOGRAPH
+ {0xE0B8, 0x5594}, //16759 #CJK UNIFIED IDEOGRAPH
+ {0xE0B9, 0x5599}, //16760 #CJK UNIFIED IDEOGRAPH
+ {0xE0BA, 0x55EA}, //16761 #CJK UNIFIED IDEOGRAPH
+ {0xE0BB, 0x55F7}, //16762 #CJK UNIFIED IDEOGRAPH
+ {0xE0BC, 0x55C9}, //16763 #CJK UNIFIED IDEOGRAPH
+ {0xE0BD, 0x561F}, //16764 #CJK UNIFIED IDEOGRAPH
+ {0xE0BE, 0x55D1}, //16765 #CJK UNIFIED IDEOGRAPH
+ {0xE0BF, 0x55EB}, //16766 #CJK UNIFIED IDEOGRAPH
+ {0xE0C0, 0x55EC}, //16767 #CJK UNIFIED IDEOGRAPH
+ {0xE0C1, 0x55D4}, //16768 #CJK UNIFIED IDEOGRAPH
+ {0xE0C2, 0x55E6}, //16769 #CJK UNIFIED IDEOGRAPH
+ {0xE0C3, 0x55DD}, //16770 #CJK UNIFIED IDEOGRAPH
+ {0xE0C4, 0x55C4}, //16771 #CJK UNIFIED IDEOGRAPH
+ {0xE0C5, 0x55EF}, //16772 #CJK UNIFIED IDEOGRAPH
+ {0xE0C6, 0x55E5}, //16773 #CJK UNIFIED IDEOGRAPH
+ {0xE0C7, 0x55F2}, //16774 #CJK UNIFIED IDEOGRAPH
+ {0xE0C8, 0x55F3}, //16775 #CJK UNIFIED IDEOGRAPH
+ {0xE0C9, 0x55CC}, //16776 #CJK UNIFIED IDEOGRAPH
+ {0xE0CA, 0x55CD}, //16777 #CJK UNIFIED IDEOGRAPH
+ {0xE0CB, 0x55E8}, //16778 #CJK UNIFIED IDEOGRAPH
+ {0xE0CC, 0x55F5}, //16779 #CJK UNIFIED IDEOGRAPH
+ {0xE0CD, 0x55E4}, //16780 #CJK UNIFIED IDEOGRAPH
+ {0xE0CE, 0x8F94}, //16781 #CJK UNIFIED IDEOGRAPH
+ {0xE0CF, 0x561E}, //16782 #CJK UNIFIED IDEOGRAPH
+ {0xE0D0, 0x5608}, //16783 #CJK UNIFIED IDEOGRAPH
+ {0xE0D1, 0x560C}, //16784 #CJK UNIFIED IDEOGRAPH
+ {0xE0D2, 0x5601}, //16785 #CJK UNIFIED IDEOGRAPH
+ {0xE0D3, 0x5624}, //16786 #CJK UNIFIED IDEOGRAPH
+ {0xE0D4, 0x5623}, //16787 #CJK UNIFIED IDEOGRAPH
+ {0xE0D5, 0x55FE}, //16788 #CJK UNIFIED IDEOGRAPH
+ {0xE0D6, 0x5600}, //16789 #CJK UNIFIED IDEOGRAPH
+ {0xE0D7, 0x5627}, //16790 #CJK UNIFIED IDEOGRAPH
+ {0xE0D8, 0x562D}, //16791 #CJK UNIFIED IDEOGRAPH
+ {0xE0D9, 0x5658}, //16792 #CJK UNIFIED IDEOGRAPH
+ {0xE0DA, 0x5639}, //16793 #CJK UNIFIED IDEOGRAPH
+ {0xE0DB, 0x5657}, //16794 #CJK UNIFIED IDEOGRAPH
+ {0xE0DC, 0x562C}, //16795 #CJK UNIFIED IDEOGRAPH
+ {0xE0DD, 0x564D}, //16796 #CJK UNIFIED IDEOGRAPH
+ {0xE0DE, 0x5662}, //16797 #CJK UNIFIED IDEOGRAPH
+ {0xE0DF, 0x5659}, //16798 #CJK UNIFIED IDEOGRAPH
+ {0xE0E0, 0x565C}, //16799 #CJK UNIFIED IDEOGRAPH
+ {0xE0E1, 0x564C}, //16800 #CJK UNIFIED IDEOGRAPH
+ {0xE0E2, 0x5654}, //16801 #CJK UNIFIED IDEOGRAPH
+ {0xE0E3, 0x5686}, //16802 #CJK UNIFIED IDEOGRAPH
+ {0xE0E4, 0x5664}, //16803 #CJK UNIFIED IDEOGRAPH
+ {0xE0E5, 0x5671}, //16804 #CJK UNIFIED IDEOGRAPH
+ {0xE0E6, 0x566B}, //16805 #CJK UNIFIED IDEOGRAPH
+ {0xE0E7, 0x567B}, //16806 #CJK UNIFIED IDEOGRAPH
+ {0xE0E8, 0x567C}, //16807 #CJK UNIFIED IDEOGRAPH
+ {0xE0E9, 0x5685}, //16808 #CJK UNIFIED IDEOGRAPH
+ {0xE0EA, 0x5693}, //16809 #CJK UNIFIED IDEOGRAPH
+ {0xE0EB, 0x56AF}, //16810 #CJK UNIFIED IDEOGRAPH
+ {0xE0EC, 0x56D4}, //16811 #CJK UNIFIED IDEOGRAPH
+ {0xE0ED, 0x56D7}, //16812 #CJK UNIFIED IDEOGRAPH
+ {0xE0EE, 0x56DD}, //16813 #CJK UNIFIED IDEOGRAPH
+ {0xE0EF, 0x56E1}, //16814 #CJK UNIFIED IDEOGRAPH
+ {0xE0F0, 0x56F5}, //16815 #CJK UNIFIED IDEOGRAPH
+ {0xE0F1, 0x56EB}, //16816 #CJK UNIFIED IDEOGRAPH
+ {0xE0F2, 0x56F9}, //16817 #CJK UNIFIED IDEOGRAPH
+ {0xE0F3, 0x56FF}, //16818 #CJK UNIFIED IDEOGRAPH
+ {0xE0F4, 0x5704}, //16819 #CJK UNIFIED IDEOGRAPH
+ {0xE0F5, 0x570A}, //16820 #CJK UNIFIED IDEOGRAPH
+ {0xE0F6, 0x5709}, //16821 #CJK UNIFIED IDEOGRAPH
+ {0xE0F7, 0x571C}, //16822 #CJK UNIFIED IDEOGRAPH
+ {0xE0F8, 0x5E0F}, //16823 #CJK UNIFIED IDEOGRAPH
+ {0xE0F9, 0x5E19}, //16824 #CJK UNIFIED IDEOGRAPH
+ {0xE0FA, 0x5E14}, //16825 #CJK UNIFIED IDEOGRAPH
+ {0xE0FB, 0x5E11}, //16826 #CJK UNIFIED IDEOGRAPH
+ {0xE0FC, 0x5E31}, //16827 #CJK UNIFIED IDEOGRAPH
+ {0xE0FD, 0x5E3B}, //16828 #CJK UNIFIED IDEOGRAPH
+ {0xE0FE, 0x5E3C}, //16829 #CJK UNIFIED IDEOGRAPH
+ {0xE140, 0x9145}, //16830 #CJK UNIFIED IDEOGRAPH
+ {0xE141, 0x9147}, //16831 #CJK UNIFIED IDEOGRAPH
+ {0xE142, 0x9148}, //16832 #CJK UNIFIED IDEOGRAPH
+ {0xE143, 0x9151}, //16833 #CJK UNIFIED IDEOGRAPH
+ {0xE144, 0x9153}, //16834 #CJK UNIFIED IDEOGRAPH
+ {0xE145, 0x9154}, //16835 #CJK UNIFIED IDEOGRAPH
+ {0xE146, 0x9155}, //16836 #CJK UNIFIED IDEOGRAPH
+ {0xE147, 0x9156}, //16837 #CJK UNIFIED IDEOGRAPH
+ {0xE148, 0x9158}, //16838 #CJK UNIFIED IDEOGRAPH
+ {0xE149, 0x9159}, //16839 #CJK UNIFIED IDEOGRAPH
+ {0xE14A, 0x915B}, //16840 #CJK UNIFIED IDEOGRAPH
+ {0xE14B, 0x915C}, //16841 #CJK UNIFIED IDEOGRAPH
+ {0xE14C, 0x915F}, //16842 #CJK UNIFIED IDEOGRAPH
+ {0xE14D, 0x9160}, //16843 #CJK UNIFIED IDEOGRAPH
+ {0xE14E, 0x9166}, //16844 #CJK UNIFIED IDEOGRAPH
+ {0xE14F, 0x9167}, //16845 #CJK UNIFIED IDEOGRAPH
+ {0xE150, 0x9168}, //16846 #CJK UNIFIED IDEOGRAPH
+ {0xE151, 0x916B}, //16847 #CJK UNIFIED IDEOGRAPH
+ {0xE152, 0x916D}, //16848 #CJK UNIFIED IDEOGRAPH
+ {0xE153, 0x9173}, //16849 #CJK UNIFIED IDEOGRAPH
+ {0xE154, 0x917A}, //16850 #CJK UNIFIED IDEOGRAPH
+ {0xE155, 0x917B}, //16851 #CJK UNIFIED IDEOGRAPH
+ {0xE156, 0x917C}, //16852 #CJK UNIFIED IDEOGRAPH
+ {0xE157, 0x9180}, //16853 #CJK UNIFIED IDEOGRAPH
+ {0xE158, 0x9181}, //16854 #CJK UNIFIED IDEOGRAPH
+ {0xE159, 0x9182}, //16855 #CJK UNIFIED IDEOGRAPH
+ {0xE15A, 0x9183}, //16856 #CJK UNIFIED IDEOGRAPH
+ {0xE15B, 0x9184}, //16857 #CJK UNIFIED IDEOGRAPH
+ {0xE15C, 0x9186}, //16858 #CJK UNIFIED IDEOGRAPH
+ {0xE15D, 0x9188}, //16859 #CJK UNIFIED IDEOGRAPH
+ {0xE15E, 0x918A}, //16860 #CJK UNIFIED IDEOGRAPH
+ {0xE15F, 0x918E}, //16861 #CJK UNIFIED IDEOGRAPH
+ {0xE160, 0x918F}, //16862 #CJK UNIFIED IDEOGRAPH
+ {0xE161, 0x9193}, //16863 #CJK UNIFIED IDEOGRAPH
+ {0xE162, 0x9194}, //16864 #CJK UNIFIED IDEOGRAPH
+ {0xE163, 0x9195}, //16865 #CJK UNIFIED IDEOGRAPH
+ {0xE164, 0x9196}, //16866 #CJK UNIFIED IDEOGRAPH
+ {0xE165, 0x9197}, //16867 #CJK UNIFIED IDEOGRAPH
+ {0xE166, 0x9198}, //16868 #CJK UNIFIED IDEOGRAPH
+ {0xE167, 0x9199}, //16869 #CJK UNIFIED IDEOGRAPH
+ {0xE168, 0x919C}, //16870 #CJK UNIFIED IDEOGRAPH
+ {0xE169, 0x919D}, //16871 #CJK UNIFIED IDEOGRAPH
+ {0xE16A, 0x919E}, //16872 #CJK UNIFIED IDEOGRAPH
+ {0xE16B, 0x919F}, //16873 #CJK UNIFIED IDEOGRAPH
+ {0xE16C, 0x91A0}, //16874 #CJK UNIFIED IDEOGRAPH
+ {0xE16D, 0x91A1}, //16875 #CJK UNIFIED IDEOGRAPH
+ {0xE16E, 0x91A4}, //16876 #CJK UNIFIED IDEOGRAPH
+ {0xE16F, 0x91A5}, //16877 #CJK UNIFIED IDEOGRAPH
+ {0xE170, 0x91A6}, //16878 #CJK UNIFIED IDEOGRAPH
+ {0xE171, 0x91A7}, //16879 #CJK UNIFIED IDEOGRAPH
+ {0xE172, 0x91A8}, //16880 #CJK UNIFIED IDEOGRAPH
+ {0xE173, 0x91A9}, //16881 #CJK UNIFIED IDEOGRAPH
+ {0xE174, 0x91AB}, //16882 #CJK UNIFIED IDEOGRAPH
+ {0xE175, 0x91AC}, //16883 #CJK UNIFIED IDEOGRAPH
+ {0xE176, 0x91B0}, //16884 #CJK UNIFIED IDEOGRAPH
+ {0xE177, 0x91B1}, //16885 #CJK UNIFIED IDEOGRAPH
+ {0xE178, 0x91B2}, //16886 #CJK UNIFIED IDEOGRAPH
+ {0xE179, 0x91B3}, //16887 #CJK UNIFIED IDEOGRAPH
+ {0xE17A, 0x91B6}, //16888 #CJK UNIFIED IDEOGRAPH
+ {0xE17B, 0x91B7}, //16889 #CJK UNIFIED IDEOGRAPH
+ {0xE17C, 0x91B8}, //16890 #CJK UNIFIED IDEOGRAPH
+ {0xE17D, 0x91B9}, //16891 #CJK UNIFIED IDEOGRAPH
+ {0xE17E, 0x91BB}, //16892 #CJK UNIFIED IDEOGRAPH
+ {0xE180, 0x91BC}, //16893 #CJK UNIFIED IDEOGRAPH
+ {0xE181, 0x91BD}, //16894 #CJK UNIFIED IDEOGRAPH
+ {0xE182, 0x91BE}, //16895 #CJK UNIFIED IDEOGRAPH
+ {0xE183, 0x91BF}, //16896 #CJK UNIFIED IDEOGRAPH
+ {0xE184, 0x91C0}, //16897 #CJK UNIFIED IDEOGRAPH
+ {0xE185, 0x91C1}, //16898 #CJK UNIFIED IDEOGRAPH
+ {0xE186, 0x91C2}, //16899 #CJK UNIFIED IDEOGRAPH
+ {0xE187, 0x91C3}, //16900 #CJK UNIFIED IDEOGRAPH
+ {0xE188, 0x91C4}, //16901 #CJK UNIFIED IDEOGRAPH
+ {0xE189, 0x91C5}, //16902 #CJK UNIFIED IDEOGRAPH
+ {0xE18A, 0x91C6}, //16903 #CJK UNIFIED IDEOGRAPH
+ {0xE18B, 0x91C8}, //16904 #CJK UNIFIED IDEOGRAPH
+ {0xE18C, 0x91CB}, //16905 #CJK UNIFIED IDEOGRAPH
+ {0xE18D, 0x91D0}, //16906 #CJK UNIFIED IDEOGRAPH
+ {0xE18E, 0x91D2}, //16907 #CJK UNIFIED IDEOGRAPH
+ {0xE18F, 0x91D3}, //16908 #CJK UNIFIED IDEOGRAPH
+ {0xE190, 0x91D4}, //16909 #CJK UNIFIED IDEOGRAPH
+ {0xE191, 0x91D5}, //16910 #CJK UNIFIED IDEOGRAPH
+ {0xE192, 0x91D6}, //16911 #CJK UNIFIED IDEOGRAPH
+ {0xE193, 0x91D7}, //16912 #CJK UNIFIED IDEOGRAPH
+ {0xE194, 0x91D8}, //16913 #CJK UNIFIED IDEOGRAPH
+ {0xE195, 0x91D9}, //16914 #CJK UNIFIED IDEOGRAPH
+ {0xE196, 0x91DA}, //16915 #CJK UNIFIED IDEOGRAPH
+ {0xE197, 0x91DB}, //16916 #CJK UNIFIED IDEOGRAPH
+ {0xE198, 0x91DD}, //16917 #CJK UNIFIED IDEOGRAPH
+ {0xE199, 0x91DE}, //16918 #CJK UNIFIED IDEOGRAPH
+ {0xE19A, 0x91DF}, //16919 #CJK UNIFIED IDEOGRAPH
+ {0xE19B, 0x91E0}, //16920 #CJK UNIFIED IDEOGRAPH
+ {0xE19C, 0x91E1}, //16921 #CJK UNIFIED IDEOGRAPH
+ {0xE19D, 0x91E2}, //16922 #CJK UNIFIED IDEOGRAPH
+ {0xE19E, 0x91E3}, //16923 #CJK UNIFIED IDEOGRAPH
+ {0xE19F, 0x91E4}, //16924 #CJK UNIFIED IDEOGRAPH
+ {0xE1A0, 0x91E5}, //16925 #CJK UNIFIED IDEOGRAPH
+ {0xE1A1, 0x5E37}, //16926 #CJK UNIFIED IDEOGRAPH
+ {0xE1A2, 0x5E44}, //16927 #CJK UNIFIED IDEOGRAPH
+ {0xE1A3, 0x5E54}, //16928 #CJK UNIFIED IDEOGRAPH
+ {0xE1A4, 0x5E5B}, //16929 #CJK UNIFIED IDEOGRAPH
+ {0xE1A5, 0x5E5E}, //16930 #CJK UNIFIED IDEOGRAPH
+ {0xE1A6, 0x5E61}, //16931 #CJK UNIFIED IDEOGRAPH
+ {0xE1A7, 0x5C8C}, //16932 #CJK UNIFIED IDEOGRAPH
+ {0xE1A8, 0x5C7A}, //16933 #CJK UNIFIED IDEOGRAPH
+ {0xE1A9, 0x5C8D}, //16934 #CJK UNIFIED IDEOGRAPH
+ {0xE1AA, 0x5C90}, //16935 #CJK UNIFIED IDEOGRAPH
+ {0xE1AB, 0x5C96}, //16936 #CJK UNIFIED IDEOGRAPH
+ {0xE1AC, 0x5C88}, //16937 #CJK UNIFIED IDEOGRAPH
+ {0xE1AD, 0x5C98}, //16938 #CJK UNIFIED IDEOGRAPH
+ {0xE1AE, 0x5C99}, //16939 #CJK UNIFIED IDEOGRAPH
+ {0xE1AF, 0x5C91}, //16940 #CJK UNIFIED IDEOGRAPH
+ {0xE1B0, 0x5C9A}, //16941 #CJK UNIFIED IDEOGRAPH
+ {0xE1B1, 0x5C9C}, //16942 #CJK UNIFIED IDEOGRAPH
+ {0xE1B2, 0x5CB5}, //16943 #CJK UNIFIED IDEOGRAPH
+ {0xE1B3, 0x5CA2}, //16944 #CJK UNIFIED IDEOGRAPH
+ {0xE1B4, 0x5CBD}, //16945 #CJK UNIFIED IDEOGRAPH
+ {0xE1B5, 0x5CAC}, //16946 #CJK UNIFIED IDEOGRAPH
+ {0xE1B6, 0x5CAB}, //16947 #CJK UNIFIED IDEOGRAPH
+ {0xE1B7, 0x5CB1}, //16948 #CJK UNIFIED IDEOGRAPH
+ {0xE1B8, 0x5CA3}, //16949 #CJK UNIFIED IDEOGRAPH
+ {0xE1B9, 0x5CC1}, //16950 #CJK UNIFIED IDEOGRAPH
+ {0xE1BA, 0x5CB7}, //16951 #CJK UNIFIED IDEOGRAPH
+ {0xE1BB, 0x5CC4}, //16952 #CJK UNIFIED IDEOGRAPH
+ {0xE1BC, 0x5CD2}, //16953 #CJK UNIFIED IDEOGRAPH
+ {0xE1BD, 0x5CE4}, //16954 #CJK UNIFIED IDEOGRAPH
+ {0xE1BE, 0x5CCB}, //16955 #CJK UNIFIED IDEOGRAPH
+ {0xE1BF, 0x5CE5}, //16956 #CJK UNIFIED IDEOGRAPH
+ {0xE1C0, 0x5D02}, //16957 #CJK UNIFIED IDEOGRAPH
+ {0xE1C1, 0x5D03}, //16958 #CJK UNIFIED IDEOGRAPH
+ {0xE1C2, 0x5D27}, //16959 #CJK UNIFIED IDEOGRAPH
+ {0xE1C3, 0x5D26}, //16960 #CJK UNIFIED IDEOGRAPH
+ {0xE1C4, 0x5D2E}, //16961 #CJK UNIFIED IDEOGRAPH
+ {0xE1C5, 0x5D24}, //16962 #CJK UNIFIED IDEOGRAPH
+ {0xE1C6, 0x5D1E}, //16963 #CJK UNIFIED IDEOGRAPH
+ {0xE1C7, 0x5D06}, //16964 #CJK UNIFIED IDEOGRAPH
+ {0xE1C8, 0x5D1B}, //16965 #CJK UNIFIED IDEOGRAPH
+ {0xE1C9, 0x5D58}, //16966 #CJK UNIFIED IDEOGRAPH
+ {0xE1CA, 0x5D3E}, //16967 #CJK UNIFIED IDEOGRAPH
+ {0xE1CB, 0x5D34}, //16968 #CJK UNIFIED IDEOGRAPH
+ {0xE1CC, 0x5D3D}, //16969 #CJK UNIFIED IDEOGRAPH
+ {0xE1CD, 0x5D6C}, //16970 #CJK UNIFIED IDEOGRAPH
+ {0xE1CE, 0x5D5B}, //16971 #CJK UNIFIED IDEOGRAPH
+ {0xE1CF, 0x5D6F}, //16972 #CJK UNIFIED IDEOGRAPH
+ {0xE1D0, 0x5D5D}, //16973 #CJK UNIFIED IDEOGRAPH
+ {0xE1D1, 0x5D6B}, //16974 #CJK UNIFIED IDEOGRAPH
+ {0xE1D2, 0x5D4B}, //16975 #CJK UNIFIED IDEOGRAPH
+ {0xE1D3, 0x5D4A}, //16976 #CJK UNIFIED IDEOGRAPH
+ {0xE1D4, 0x5D69}, //16977 #CJK UNIFIED IDEOGRAPH
+ {0xE1D5, 0x5D74}, //16978 #CJK UNIFIED IDEOGRAPH
+ {0xE1D6, 0x5D82}, //16979 #CJK UNIFIED IDEOGRAPH
+ {0xE1D7, 0x5D99}, //16980 #CJK UNIFIED IDEOGRAPH
+ {0xE1D8, 0x5D9D}, //16981 #CJK UNIFIED IDEOGRAPH
+ {0xE1D9, 0x8C73}, //16982 #CJK UNIFIED IDEOGRAPH
+ {0xE1DA, 0x5DB7}, //16983 #CJK UNIFIED IDEOGRAPH
+ {0xE1DB, 0x5DC5}, //16984 #CJK UNIFIED IDEOGRAPH
+ {0xE1DC, 0x5F73}, //16985 #CJK UNIFIED IDEOGRAPH
+ {0xE1DD, 0x5F77}, //16986 #CJK UNIFIED IDEOGRAPH
+ {0xE1DE, 0x5F82}, //16987 #CJK UNIFIED IDEOGRAPH
+ {0xE1DF, 0x5F87}, //16988 #CJK UNIFIED IDEOGRAPH
+ {0xE1E0, 0x5F89}, //16989 #CJK UNIFIED IDEOGRAPH
+ {0xE1E1, 0x5F8C}, //16990 #CJK UNIFIED IDEOGRAPH
+ {0xE1E2, 0x5F95}, //16991 #CJK UNIFIED IDEOGRAPH
+ {0xE1E3, 0x5F99}, //16992 #CJK UNIFIED IDEOGRAPH
+ {0xE1E4, 0x5F9C}, //16993 #CJK UNIFIED IDEOGRAPH
+ {0xE1E5, 0x5FA8}, //16994 #CJK UNIFIED IDEOGRAPH
+ {0xE1E6, 0x5FAD}, //16995 #CJK UNIFIED IDEOGRAPH
+ {0xE1E7, 0x5FB5}, //16996 #CJK UNIFIED IDEOGRAPH
+ {0xE1E8, 0x5FBC}, //16997 #CJK UNIFIED IDEOGRAPH
+ {0xE1E9, 0x8862}, //16998 #CJK UNIFIED IDEOGRAPH
+ {0xE1EA, 0x5F61}, //16999 #CJK UNIFIED IDEOGRAPH
+ {0xE1EB, 0x72AD}, //17000 #CJK UNIFIED IDEOGRAPH
+ {0xE1EC, 0x72B0}, //17001 #CJK UNIFIED IDEOGRAPH
+ {0xE1ED, 0x72B4}, //17002 #CJK UNIFIED IDEOGRAPH
+ {0xE1EE, 0x72B7}, //17003 #CJK UNIFIED IDEOGRAPH
+ {0xE1EF, 0x72B8}, //17004 #CJK UNIFIED IDEOGRAPH
+ {0xE1F0, 0x72C3}, //17005 #CJK UNIFIED IDEOGRAPH
+ {0xE1F1, 0x72C1}, //17006 #CJK UNIFIED IDEOGRAPH
+ {0xE1F2, 0x72CE}, //17007 #CJK UNIFIED IDEOGRAPH
+ {0xE1F3, 0x72CD}, //17008 #CJK UNIFIED IDEOGRAPH
+ {0xE1F4, 0x72D2}, //17009 #CJK UNIFIED IDEOGRAPH
+ {0xE1F5, 0x72E8}, //17010 #CJK UNIFIED IDEOGRAPH
+ {0xE1F6, 0x72EF}, //17011 #CJK UNIFIED IDEOGRAPH
+ {0xE1F7, 0x72E9}, //17012 #CJK UNIFIED IDEOGRAPH
+ {0xE1F8, 0x72F2}, //17013 #CJK UNIFIED IDEOGRAPH
+ {0xE1F9, 0x72F4}, //17014 #CJK UNIFIED IDEOGRAPH
+ {0xE1FA, 0x72F7}, //17015 #CJK UNIFIED IDEOGRAPH
+ {0xE1FB, 0x7301}, //17016 #CJK UNIFIED IDEOGRAPH
+ {0xE1FC, 0x72F3}, //17017 #CJK UNIFIED IDEOGRAPH
+ {0xE1FD, 0x7303}, //17018 #CJK UNIFIED IDEOGRAPH
+ {0xE1FE, 0x72FA}, //17019 #CJK UNIFIED IDEOGRAPH
+ {0xE240, 0x91E6}, //17020 #CJK UNIFIED IDEOGRAPH
+ {0xE241, 0x91E7}, //17021 #CJK UNIFIED IDEOGRAPH
+ {0xE242, 0x91E8}, //17022 #CJK UNIFIED IDEOGRAPH
+ {0xE243, 0x91E9}, //17023 #CJK UNIFIED IDEOGRAPH
+ {0xE244, 0x91EA}, //17024 #CJK UNIFIED IDEOGRAPH
+ {0xE245, 0x91EB}, //17025 #CJK UNIFIED IDEOGRAPH
+ {0xE246, 0x91EC}, //17026 #CJK UNIFIED IDEOGRAPH
+ {0xE247, 0x91ED}, //17027 #CJK UNIFIED IDEOGRAPH
+ {0xE248, 0x91EE}, //17028 #CJK UNIFIED IDEOGRAPH
+ {0xE249, 0x91EF}, //17029 #CJK UNIFIED IDEOGRAPH
+ {0xE24A, 0x91F0}, //17030 #CJK UNIFIED IDEOGRAPH
+ {0xE24B, 0x91F1}, //17031 #CJK UNIFIED IDEOGRAPH
+ {0xE24C, 0x91F2}, //17032 #CJK UNIFIED IDEOGRAPH
+ {0xE24D, 0x91F3}, //17033 #CJK UNIFIED IDEOGRAPH
+ {0xE24E, 0x91F4}, //17034 #CJK UNIFIED IDEOGRAPH
+ {0xE24F, 0x91F5}, //17035 #CJK UNIFIED IDEOGRAPH
+ {0xE250, 0x91F6}, //17036 #CJK UNIFIED IDEOGRAPH
+ {0xE251, 0x91F7}, //17037 #CJK UNIFIED IDEOGRAPH
+ {0xE252, 0x91F8}, //17038 #CJK UNIFIED IDEOGRAPH
+ {0xE253, 0x91F9}, //17039 #CJK UNIFIED IDEOGRAPH
+ {0xE254, 0x91FA}, //17040 #CJK UNIFIED IDEOGRAPH
+ {0xE255, 0x91FB}, //17041 #CJK UNIFIED IDEOGRAPH
+ {0xE256, 0x91FC}, //17042 #CJK UNIFIED IDEOGRAPH
+ {0xE257, 0x91FD}, //17043 #CJK UNIFIED IDEOGRAPH
+ {0xE258, 0x91FE}, //17044 #CJK UNIFIED IDEOGRAPH
+ {0xE259, 0x91FF}, //17045 #CJK UNIFIED IDEOGRAPH
+ {0xE25A, 0x9200}, //17046 #CJK UNIFIED IDEOGRAPH
+ {0xE25B, 0x9201}, //17047 #CJK UNIFIED IDEOGRAPH
+ {0xE25C, 0x9202}, //17048 #CJK UNIFIED IDEOGRAPH
+ {0xE25D, 0x9203}, //17049 #CJK UNIFIED IDEOGRAPH
+ {0xE25E, 0x9204}, //17050 #CJK UNIFIED IDEOGRAPH
+ {0xE25F, 0x9205}, //17051 #CJK UNIFIED IDEOGRAPH
+ {0xE260, 0x9206}, //17052 #CJK UNIFIED IDEOGRAPH
+ {0xE261, 0x9207}, //17053 #CJK UNIFIED IDEOGRAPH
+ {0xE262, 0x9208}, //17054 #CJK UNIFIED IDEOGRAPH
+ {0xE263, 0x9209}, //17055 #CJK UNIFIED IDEOGRAPH
+ {0xE264, 0x920A}, //17056 #CJK UNIFIED IDEOGRAPH
+ {0xE265, 0x920B}, //17057 #CJK UNIFIED IDEOGRAPH
+ {0xE266, 0x920C}, //17058 #CJK UNIFIED IDEOGRAPH
+ {0xE267, 0x920D}, //17059 #CJK UNIFIED IDEOGRAPH
+ {0xE268, 0x920E}, //17060 #CJK UNIFIED IDEOGRAPH
+ {0xE269, 0x920F}, //17061 #CJK UNIFIED IDEOGRAPH
+ {0xE26A, 0x9210}, //17062 #CJK UNIFIED IDEOGRAPH
+ {0xE26B, 0x9211}, //17063 #CJK UNIFIED IDEOGRAPH
+ {0xE26C, 0x9212}, //17064 #CJK UNIFIED IDEOGRAPH
+ {0xE26D, 0x9213}, //17065 #CJK UNIFIED IDEOGRAPH
+ {0xE26E, 0x9214}, //17066 #CJK UNIFIED IDEOGRAPH
+ {0xE26F, 0x9215}, //17067 #CJK UNIFIED IDEOGRAPH
+ {0xE270, 0x9216}, //17068 #CJK UNIFIED IDEOGRAPH
+ {0xE271, 0x9217}, //17069 #CJK UNIFIED IDEOGRAPH
+ {0xE272, 0x9218}, //17070 #CJK UNIFIED IDEOGRAPH
+ {0xE273, 0x9219}, //17071 #CJK UNIFIED IDEOGRAPH
+ {0xE274, 0x921A}, //17072 #CJK UNIFIED IDEOGRAPH
+ {0xE275, 0x921B}, //17073 #CJK UNIFIED IDEOGRAPH
+ {0xE276, 0x921C}, //17074 #CJK UNIFIED IDEOGRAPH
+ {0xE277, 0x921D}, //17075 #CJK UNIFIED IDEOGRAPH
+ {0xE278, 0x921E}, //17076 #CJK UNIFIED IDEOGRAPH
+ {0xE279, 0x921F}, //17077 #CJK UNIFIED IDEOGRAPH
+ {0xE27A, 0x9220}, //17078 #CJK UNIFIED IDEOGRAPH
+ {0xE27B, 0x9221}, //17079 #CJK UNIFIED IDEOGRAPH
+ {0xE27C, 0x9222}, //17080 #CJK UNIFIED IDEOGRAPH
+ {0xE27D, 0x9223}, //17081 #CJK UNIFIED IDEOGRAPH
+ {0xE27E, 0x9224}, //17082 #CJK UNIFIED IDEOGRAPH
+ {0xE280, 0x9225}, //17083 #CJK UNIFIED IDEOGRAPH
+ {0xE281, 0x9226}, //17084 #CJK UNIFIED IDEOGRAPH
+ {0xE282, 0x9227}, //17085 #CJK UNIFIED IDEOGRAPH
+ {0xE283, 0x9228}, //17086 #CJK UNIFIED IDEOGRAPH
+ {0xE284, 0x9229}, //17087 #CJK UNIFIED IDEOGRAPH
+ {0xE285, 0x922A}, //17088 #CJK UNIFIED IDEOGRAPH
+ {0xE286, 0x922B}, //17089 #CJK UNIFIED IDEOGRAPH
+ {0xE287, 0x922C}, //17090 #CJK UNIFIED IDEOGRAPH
+ {0xE288, 0x922D}, //17091 #CJK UNIFIED IDEOGRAPH
+ {0xE289, 0x922E}, //17092 #CJK UNIFIED IDEOGRAPH
+ {0xE28A, 0x922F}, //17093 #CJK UNIFIED IDEOGRAPH
+ {0xE28B, 0x9230}, //17094 #CJK UNIFIED IDEOGRAPH
+ {0xE28C, 0x9231}, //17095 #CJK UNIFIED IDEOGRAPH
+ {0xE28D, 0x9232}, //17096 #CJK UNIFIED IDEOGRAPH
+ {0xE28E, 0x9233}, //17097 #CJK UNIFIED IDEOGRAPH
+ {0xE28F, 0x9234}, //17098 #CJK UNIFIED IDEOGRAPH
+ {0xE290, 0x9235}, //17099 #CJK UNIFIED IDEOGRAPH
+ {0xE291, 0x9236}, //17100 #CJK UNIFIED IDEOGRAPH
+ {0xE292, 0x9237}, //17101 #CJK UNIFIED IDEOGRAPH
+ {0xE293, 0x9238}, //17102 #CJK UNIFIED IDEOGRAPH
+ {0xE294, 0x9239}, //17103 #CJK UNIFIED IDEOGRAPH
+ {0xE295, 0x923A}, //17104 #CJK UNIFIED IDEOGRAPH
+ {0xE296, 0x923B}, //17105 #CJK UNIFIED IDEOGRAPH
+ {0xE297, 0x923C}, //17106 #CJK UNIFIED IDEOGRAPH
+ {0xE298, 0x923D}, //17107 #CJK UNIFIED IDEOGRAPH
+ {0xE299, 0x923E}, //17108 #CJK UNIFIED IDEOGRAPH
+ {0xE29A, 0x923F}, //17109 #CJK UNIFIED IDEOGRAPH
+ {0xE29B, 0x9240}, //17110 #CJK UNIFIED IDEOGRAPH
+ {0xE29C, 0x9241}, //17111 #CJK UNIFIED IDEOGRAPH
+ {0xE29D, 0x9242}, //17112 #CJK UNIFIED IDEOGRAPH
+ {0xE29E, 0x9243}, //17113 #CJK UNIFIED IDEOGRAPH
+ {0xE29F, 0x9244}, //17114 #CJK UNIFIED IDEOGRAPH
+ {0xE2A0, 0x9245}, //17115 #CJK UNIFIED IDEOGRAPH
+ {0xE2A1, 0x72FB}, //17116 #CJK UNIFIED IDEOGRAPH
+ {0xE2A2, 0x7317}, //17117 #CJK UNIFIED IDEOGRAPH
+ {0xE2A3, 0x7313}, //17118 #CJK UNIFIED IDEOGRAPH
+ {0xE2A4, 0x7321}, //17119 #CJK UNIFIED IDEOGRAPH
+ {0xE2A5, 0x730A}, //17120 #CJK UNIFIED IDEOGRAPH
+ {0xE2A6, 0x731E}, //17121 #CJK UNIFIED IDEOGRAPH
+ {0xE2A7, 0x731D}, //17122 #CJK UNIFIED IDEOGRAPH
+ {0xE2A8, 0x7315}, //17123 #CJK UNIFIED IDEOGRAPH
+ {0xE2A9, 0x7322}, //17124 #CJK UNIFIED IDEOGRAPH
+ {0xE2AA, 0x7339}, //17125 #CJK UNIFIED IDEOGRAPH
+ {0xE2AB, 0x7325}, //17126 #CJK UNIFIED IDEOGRAPH
+ {0xE2AC, 0x732C}, //17127 #CJK UNIFIED IDEOGRAPH
+ {0xE2AD, 0x7338}, //17128 #CJK UNIFIED IDEOGRAPH
+ {0xE2AE, 0x7331}, //17129 #CJK UNIFIED IDEOGRAPH
+ {0xE2AF, 0x7350}, //17130 #CJK UNIFIED IDEOGRAPH
+ {0xE2B0, 0x734D}, //17131 #CJK UNIFIED IDEOGRAPH
+ {0xE2B1, 0x7357}, //17132 #CJK UNIFIED IDEOGRAPH
+ {0xE2B2, 0x7360}, //17133 #CJK UNIFIED IDEOGRAPH
+ {0xE2B3, 0x736C}, //17134 #CJK UNIFIED IDEOGRAPH
+ {0xE2B4, 0x736F}, //17135 #CJK UNIFIED IDEOGRAPH
+ {0xE2B5, 0x737E}, //17136 #CJK UNIFIED IDEOGRAPH
+ {0xE2B6, 0x821B}, //17137 #CJK UNIFIED IDEOGRAPH
+ {0xE2B7, 0x5925}, //17138 #CJK UNIFIED IDEOGRAPH
+ {0xE2B8, 0x98E7}, //17139 #CJK UNIFIED IDEOGRAPH
+ {0xE2B9, 0x5924}, //17140 #CJK UNIFIED IDEOGRAPH
+ {0xE2BA, 0x5902}, //17141 #CJK UNIFIED IDEOGRAPH
+ {0xE2BB, 0x9963}, //17142 #CJK UNIFIED IDEOGRAPH
+ {0xE2BC, 0x9967}, //17143 #CJK UNIFIED IDEOGRAPH
+ {0xE2BD, 0x9968}, //17144 #CJK UNIFIED IDEOGRAPH
+ {0xE2BE, 0x9969}, //17145 #CJK UNIFIED IDEOGRAPH
+ {0xE2BF, 0x996A}, //17146 #CJK UNIFIED IDEOGRAPH
+ {0xE2C0, 0x996B}, //17147 #CJK UNIFIED IDEOGRAPH
+ {0xE2C1, 0x996C}, //17148 #CJK UNIFIED IDEOGRAPH
+ {0xE2C2, 0x9974}, //17149 #CJK UNIFIED IDEOGRAPH
+ {0xE2C3, 0x9977}, //17150 #CJK UNIFIED IDEOGRAPH
+ {0xE2C4, 0x997D}, //17151 #CJK UNIFIED IDEOGRAPH
+ {0xE2C5, 0x9980}, //17152 #CJK UNIFIED IDEOGRAPH
+ {0xE2C6, 0x9984}, //17153 #CJK UNIFIED IDEOGRAPH
+ {0xE2C7, 0x9987}, //17154 #CJK UNIFIED IDEOGRAPH
+ {0xE2C8, 0x998A}, //17155 #CJK UNIFIED IDEOGRAPH
+ {0xE2C9, 0x998D}, //17156 #CJK UNIFIED IDEOGRAPH
+ {0xE2CA, 0x9990}, //17157 #CJK UNIFIED IDEOGRAPH
+ {0xE2CB, 0x9991}, //17158 #CJK UNIFIED IDEOGRAPH
+ {0xE2CC, 0x9993}, //17159 #CJK UNIFIED IDEOGRAPH
+ {0xE2CD, 0x9994}, //17160 #CJK UNIFIED IDEOGRAPH
+ {0xE2CE, 0x9995}, //17161 #CJK UNIFIED IDEOGRAPH
+ {0xE2CF, 0x5E80}, //17162 #CJK UNIFIED IDEOGRAPH
+ {0xE2D0, 0x5E91}, //17163 #CJK UNIFIED IDEOGRAPH
+ {0xE2D1, 0x5E8B}, //17164 #CJK UNIFIED IDEOGRAPH
+ {0xE2D2, 0x5E96}, //17165 #CJK UNIFIED IDEOGRAPH
+ {0xE2D3, 0x5EA5}, //17166 #CJK UNIFIED IDEOGRAPH
+ {0xE2D4, 0x5EA0}, //17167 #CJK UNIFIED IDEOGRAPH
+ {0xE2D5, 0x5EB9}, //17168 #CJK UNIFIED IDEOGRAPH
+ {0xE2D6, 0x5EB5}, //17169 #CJK UNIFIED IDEOGRAPH
+ {0xE2D7, 0x5EBE}, //17170 #CJK UNIFIED IDEOGRAPH
+ {0xE2D8, 0x5EB3}, //17171 #CJK UNIFIED IDEOGRAPH
+ {0xE2D9, 0x8D53}, //17172 #CJK UNIFIED IDEOGRAPH
+ {0xE2DA, 0x5ED2}, //17173 #CJK UNIFIED IDEOGRAPH
+ {0xE2DB, 0x5ED1}, //17174 #CJK UNIFIED IDEOGRAPH
+ {0xE2DC, 0x5EDB}, //17175 #CJK UNIFIED IDEOGRAPH
+ {0xE2DD, 0x5EE8}, //17176 #CJK UNIFIED IDEOGRAPH
+ {0xE2DE, 0x5EEA}, //17177 #CJK UNIFIED IDEOGRAPH
+ {0xE2DF, 0x81BA}, //17178 #CJK UNIFIED IDEOGRAPH
+ {0xE2E0, 0x5FC4}, //17179 #CJK UNIFIED IDEOGRAPH
+ {0xE2E1, 0x5FC9}, //17180 #CJK UNIFIED IDEOGRAPH
+ {0xE2E2, 0x5FD6}, //17181 #CJK UNIFIED IDEOGRAPH
+ {0xE2E3, 0x5FCF}, //17182 #CJK UNIFIED IDEOGRAPH
+ {0xE2E4, 0x6003}, //17183 #CJK UNIFIED IDEOGRAPH
+ {0xE2E5, 0x5FEE}, //17184 #CJK UNIFIED IDEOGRAPH
+ {0xE2E6, 0x6004}, //17185 #CJK UNIFIED IDEOGRAPH
+ {0xE2E7, 0x5FE1}, //17186 #CJK UNIFIED IDEOGRAPH
+ {0xE2E8, 0x5FE4}, //17187 #CJK UNIFIED IDEOGRAPH
+ {0xE2E9, 0x5FFE}, //17188 #CJK UNIFIED IDEOGRAPH
+ {0xE2EA, 0x6005}, //17189 #CJK UNIFIED IDEOGRAPH
+ {0xE2EB, 0x6006}, //17190 #CJK UNIFIED IDEOGRAPH
+ {0xE2EC, 0x5FEA}, //17191 #CJK UNIFIED IDEOGRAPH
+ {0xE2ED, 0x5FED}, //17192 #CJK UNIFIED IDEOGRAPH
+ {0xE2EE, 0x5FF8}, //17193 #CJK UNIFIED IDEOGRAPH
+ {0xE2EF, 0x6019}, //17194 #CJK UNIFIED IDEOGRAPH
+ {0xE2F0, 0x6035}, //17195 #CJK UNIFIED IDEOGRAPH
+ {0xE2F1, 0x6026}, //17196 #CJK UNIFIED IDEOGRAPH
+ {0xE2F2, 0x601B}, //17197 #CJK UNIFIED IDEOGRAPH
+ {0xE2F3, 0x600F}, //17198 #CJK UNIFIED IDEOGRAPH
+ {0xE2F4, 0x600D}, //17199 #CJK UNIFIED IDEOGRAPH
+ {0xE2F5, 0x6029}, //17200 #CJK UNIFIED IDEOGRAPH
+ {0xE2F6, 0x602B}, //17201 #CJK UNIFIED IDEOGRAPH
+ {0xE2F7, 0x600A}, //17202 #CJK UNIFIED IDEOGRAPH
+ {0xE2F8, 0x603F}, //17203 #CJK UNIFIED IDEOGRAPH
+ {0xE2F9, 0x6021}, //17204 #CJK UNIFIED IDEOGRAPH
+ {0xE2FA, 0x6078}, //17205 #CJK UNIFIED IDEOGRAPH
+ {0xE2FB, 0x6079}, //17206 #CJK UNIFIED IDEOGRAPH
+ {0xE2FC, 0x607B}, //17207 #CJK UNIFIED IDEOGRAPH
+ {0xE2FD, 0x607A}, //17208 #CJK UNIFIED IDEOGRAPH
+ {0xE2FE, 0x6042}, //17209 #CJK UNIFIED IDEOGRAPH
+ {0xE340, 0x9246}, //17210 #CJK UNIFIED IDEOGRAPH
+ {0xE341, 0x9247}, //17211 #CJK UNIFIED IDEOGRAPH
+ {0xE342, 0x9248}, //17212 #CJK UNIFIED IDEOGRAPH
+ {0xE343, 0x9249}, //17213 #CJK UNIFIED IDEOGRAPH
+ {0xE344, 0x924A}, //17214 #CJK UNIFIED IDEOGRAPH
+ {0xE345, 0x924B}, //17215 #CJK UNIFIED IDEOGRAPH
+ {0xE346, 0x924C}, //17216 #CJK UNIFIED IDEOGRAPH
+ {0xE347, 0x924D}, //17217 #CJK UNIFIED IDEOGRAPH
+ {0xE348, 0x924E}, //17218 #CJK UNIFIED IDEOGRAPH
+ {0xE349, 0x924F}, //17219 #CJK UNIFIED IDEOGRAPH
+ {0xE34A, 0x9250}, //17220 #CJK UNIFIED IDEOGRAPH
+ {0xE34B, 0x9251}, //17221 #CJK UNIFIED IDEOGRAPH
+ {0xE34C, 0x9252}, //17222 #CJK UNIFIED IDEOGRAPH
+ {0xE34D, 0x9253}, //17223 #CJK UNIFIED IDEOGRAPH
+ {0xE34E, 0x9254}, //17224 #CJK UNIFIED IDEOGRAPH
+ {0xE34F, 0x9255}, //17225 #CJK UNIFIED IDEOGRAPH
+ {0xE350, 0x9256}, //17226 #CJK UNIFIED IDEOGRAPH
+ {0xE351, 0x9257}, //17227 #CJK UNIFIED IDEOGRAPH
+ {0xE352, 0x9258}, //17228 #CJK UNIFIED IDEOGRAPH
+ {0xE353, 0x9259}, //17229 #CJK UNIFIED IDEOGRAPH
+ {0xE354, 0x925A}, //17230 #CJK UNIFIED IDEOGRAPH
+ {0xE355, 0x925B}, //17231 #CJK UNIFIED IDEOGRAPH
+ {0xE356, 0x925C}, //17232 #CJK UNIFIED IDEOGRAPH
+ {0xE357, 0x925D}, //17233 #CJK UNIFIED IDEOGRAPH
+ {0xE358, 0x925E}, //17234 #CJK UNIFIED IDEOGRAPH
+ {0xE359, 0x925F}, //17235 #CJK UNIFIED IDEOGRAPH
+ {0xE35A, 0x9260}, //17236 #CJK UNIFIED IDEOGRAPH
+ {0xE35B, 0x9261}, //17237 #CJK UNIFIED IDEOGRAPH
+ {0xE35C, 0x9262}, //17238 #CJK UNIFIED IDEOGRAPH
+ {0xE35D, 0x9263}, //17239 #CJK UNIFIED IDEOGRAPH
+ {0xE35E, 0x9264}, //17240 #CJK UNIFIED IDEOGRAPH
+ {0xE35F, 0x9265}, //17241 #CJK UNIFIED IDEOGRAPH
+ {0xE360, 0x9266}, //17242 #CJK UNIFIED IDEOGRAPH
+ {0xE361, 0x9267}, //17243 #CJK UNIFIED IDEOGRAPH
+ {0xE362, 0x9268}, //17244 #CJK UNIFIED IDEOGRAPH
+ {0xE363, 0x9269}, //17245 #CJK UNIFIED IDEOGRAPH
+ {0xE364, 0x926A}, //17246 #CJK UNIFIED IDEOGRAPH
+ {0xE365, 0x926B}, //17247 #CJK UNIFIED IDEOGRAPH
+ {0xE366, 0x926C}, //17248 #CJK UNIFIED IDEOGRAPH
+ {0xE367, 0x926D}, //17249 #CJK UNIFIED IDEOGRAPH
+ {0xE368, 0x926E}, //17250 #CJK UNIFIED IDEOGRAPH
+ {0xE369, 0x926F}, //17251 #CJK UNIFIED IDEOGRAPH
+ {0xE36A, 0x9270}, //17252 #CJK UNIFIED IDEOGRAPH
+ {0xE36B, 0x9271}, //17253 #CJK UNIFIED IDEOGRAPH
+ {0xE36C, 0x9272}, //17254 #CJK UNIFIED IDEOGRAPH
+ {0xE36D, 0x9273}, //17255 #CJK UNIFIED IDEOGRAPH
+ {0xE36E, 0x9275}, //17256 #CJK UNIFIED IDEOGRAPH
+ {0xE36F, 0x9276}, //17257 #CJK UNIFIED IDEOGRAPH
+ {0xE370, 0x9277}, //17258 #CJK UNIFIED IDEOGRAPH
+ {0xE371, 0x9278}, //17259 #CJK UNIFIED IDEOGRAPH
+ {0xE372, 0x9279}, //17260 #CJK UNIFIED IDEOGRAPH
+ {0xE373, 0x927A}, //17261 #CJK UNIFIED IDEOGRAPH
+ {0xE374, 0x927B}, //17262 #CJK UNIFIED IDEOGRAPH
+ {0xE375, 0x927C}, //17263 #CJK UNIFIED IDEOGRAPH
+ {0xE376, 0x927D}, //17264 #CJK UNIFIED IDEOGRAPH
+ {0xE377, 0x927E}, //17265 #CJK UNIFIED IDEOGRAPH
+ {0xE378, 0x927F}, //17266 #CJK UNIFIED IDEOGRAPH
+ {0xE379, 0x9280}, //17267 #CJK UNIFIED IDEOGRAPH
+ {0xE37A, 0x9281}, //17268 #CJK UNIFIED IDEOGRAPH
+ {0xE37B, 0x9282}, //17269 #CJK UNIFIED IDEOGRAPH
+ {0xE37C, 0x9283}, //17270 #CJK UNIFIED IDEOGRAPH
+ {0xE37D, 0x9284}, //17271 #CJK UNIFIED IDEOGRAPH
+ {0xE37E, 0x9285}, //17272 #CJK UNIFIED IDEOGRAPH
+ {0xE380, 0x9286}, //17273 #CJK UNIFIED IDEOGRAPH
+ {0xE381, 0x9287}, //17274 #CJK UNIFIED IDEOGRAPH
+ {0xE382, 0x9288}, //17275 #CJK UNIFIED IDEOGRAPH
+ {0xE383, 0x9289}, //17276 #CJK UNIFIED IDEOGRAPH
+ {0xE384, 0x928A}, //17277 #CJK UNIFIED IDEOGRAPH
+ {0xE385, 0x928B}, //17278 #CJK UNIFIED IDEOGRAPH
+ {0xE386, 0x928C}, //17279 #CJK UNIFIED IDEOGRAPH
+ {0xE387, 0x928D}, //17280 #CJK UNIFIED IDEOGRAPH
+ {0xE388, 0x928F}, //17281 #CJK UNIFIED IDEOGRAPH
+ {0xE389, 0x9290}, //17282 #CJK UNIFIED IDEOGRAPH
+ {0xE38A, 0x9291}, //17283 #CJK UNIFIED IDEOGRAPH
+ {0xE38B, 0x9292}, //17284 #CJK UNIFIED IDEOGRAPH
+ {0xE38C, 0x9293}, //17285 #CJK UNIFIED IDEOGRAPH
+ {0xE38D, 0x9294}, //17286 #CJK UNIFIED IDEOGRAPH
+ {0xE38E, 0x9295}, //17287 #CJK UNIFIED IDEOGRAPH
+ {0xE38F, 0x9296}, //17288 #CJK UNIFIED IDEOGRAPH
+ {0xE390, 0x9297}, //17289 #CJK UNIFIED IDEOGRAPH
+ {0xE391, 0x9298}, //17290 #CJK UNIFIED IDEOGRAPH
+ {0xE392, 0x9299}, //17291 #CJK UNIFIED IDEOGRAPH
+ {0xE393, 0x929A}, //17292 #CJK UNIFIED IDEOGRAPH
+ {0xE394, 0x929B}, //17293 #CJK UNIFIED IDEOGRAPH
+ {0xE395, 0x929C}, //17294 #CJK UNIFIED IDEOGRAPH
+ {0xE396, 0x929D}, //17295 #CJK UNIFIED IDEOGRAPH
+ {0xE397, 0x929E}, //17296 #CJK UNIFIED IDEOGRAPH
+ {0xE398, 0x929F}, //17297 #CJK UNIFIED IDEOGRAPH
+ {0xE399, 0x92A0}, //17298 #CJK UNIFIED IDEOGRAPH
+ {0xE39A, 0x92A1}, //17299 #CJK UNIFIED IDEOGRAPH
+ {0xE39B, 0x92A2}, //17300 #CJK UNIFIED IDEOGRAPH
+ {0xE39C, 0x92A3}, //17301 #CJK UNIFIED IDEOGRAPH
+ {0xE39D, 0x92A4}, //17302 #CJK UNIFIED IDEOGRAPH
+ {0xE39E, 0x92A5}, //17303 #CJK UNIFIED IDEOGRAPH
+ {0xE39F, 0x92A6}, //17304 #CJK UNIFIED IDEOGRAPH
+ {0xE3A0, 0x92A7}, //17305 #CJK UNIFIED IDEOGRAPH
+ {0xE3A1, 0x606A}, //17306 #CJK UNIFIED IDEOGRAPH
+ {0xE3A2, 0x607D}, //17307 #CJK UNIFIED IDEOGRAPH
+ {0xE3A3, 0x6096}, //17308 #CJK UNIFIED IDEOGRAPH
+ {0xE3A4, 0x609A}, //17309 #CJK UNIFIED IDEOGRAPH
+ {0xE3A5, 0x60AD}, //17310 #CJK UNIFIED IDEOGRAPH
+ {0xE3A6, 0x609D}, //17311 #CJK UNIFIED IDEOGRAPH
+ {0xE3A7, 0x6083}, //17312 #CJK UNIFIED IDEOGRAPH
+ {0xE3A8, 0x6092}, //17313 #CJK UNIFIED IDEOGRAPH
+ {0xE3A9, 0x608C}, //17314 #CJK UNIFIED IDEOGRAPH
+ {0xE3AA, 0x609B}, //17315 #CJK UNIFIED IDEOGRAPH
+ {0xE3AB, 0x60EC}, //17316 #CJK UNIFIED IDEOGRAPH
+ {0xE3AC, 0x60BB}, //17317 #CJK UNIFIED IDEOGRAPH
+ {0xE3AD, 0x60B1}, //17318 #CJK UNIFIED IDEOGRAPH
+ {0xE3AE, 0x60DD}, //17319 #CJK UNIFIED IDEOGRAPH
+ {0xE3AF, 0x60D8}, //17320 #CJK UNIFIED IDEOGRAPH
+ {0xE3B0, 0x60C6}, //17321 #CJK UNIFIED IDEOGRAPH
+ {0xE3B1, 0x60DA}, //17322 #CJK UNIFIED IDEOGRAPH
+ {0xE3B2, 0x60B4}, //17323 #CJK UNIFIED IDEOGRAPH
+ {0xE3B3, 0x6120}, //17324 #CJK UNIFIED IDEOGRAPH
+ {0xE3B4, 0x6126}, //17325 #CJK UNIFIED IDEOGRAPH
+ {0xE3B5, 0x6115}, //17326 #CJK UNIFIED IDEOGRAPH
+ {0xE3B6, 0x6123}, //17327 #CJK UNIFIED IDEOGRAPH
+ {0xE3B7, 0x60F4}, //17328 #CJK UNIFIED IDEOGRAPH
+ {0xE3B8, 0x6100}, //17329 #CJK UNIFIED IDEOGRAPH
+ {0xE3B9, 0x610E}, //17330 #CJK UNIFIED IDEOGRAPH
+ {0xE3BA, 0x612B}, //17331 #CJK UNIFIED IDEOGRAPH
+ {0xE3BB, 0x614A}, //17332 #CJK UNIFIED IDEOGRAPH
+ {0xE3BC, 0x6175}, //17333 #CJK UNIFIED IDEOGRAPH
+ {0xE3BD, 0x61AC}, //17334 #CJK UNIFIED IDEOGRAPH
+ {0xE3BE, 0x6194}, //17335 #CJK UNIFIED IDEOGRAPH
+ {0xE3BF, 0x61A7}, //17336 #CJK UNIFIED IDEOGRAPH
+ {0xE3C0, 0x61B7}, //17337 #CJK UNIFIED IDEOGRAPH
+ {0xE3C1, 0x61D4}, //17338 #CJK UNIFIED IDEOGRAPH
+ {0xE3C2, 0x61F5}, //17339 #CJK UNIFIED IDEOGRAPH
+ {0xE3C3, 0x5FDD}, //17340 #CJK UNIFIED IDEOGRAPH
+ {0xE3C4, 0x96B3}, //17341 #CJK UNIFIED IDEOGRAPH
+ {0xE3C5, 0x95E9}, //17342 #CJK UNIFIED IDEOGRAPH
+ {0xE3C6, 0x95EB}, //17343 #CJK UNIFIED IDEOGRAPH
+ {0xE3C7, 0x95F1}, //17344 #CJK UNIFIED IDEOGRAPH
+ {0xE3C8, 0x95F3}, //17345 #CJK UNIFIED IDEOGRAPH
+ {0xE3C9, 0x95F5}, //17346 #CJK UNIFIED IDEOGRAPH
+ {0xE3CA, 0x95F6}, //17347 #CJK UNIFIED IDEOGRAPH
+ {0xE3CB, 0x95FC}, //17348 #CJK UNIFIED IDEOGRAPH
+ {0xE3CC, 0x95FE}, //17349 #CJK UNIFIED IDEOGRAPH
+ {0xE3CD, 0x9603}, //17350 #CJK UNIFIED IDEOGRAPH
+ {0xE3CE, 0x9604}, //17351 #CJK UNIFIED IDEOGRAPH
+ {0xE3CF, 0x9606}, //17352 #CJK UNIFIED IDEOGRAPH
+ {0xE3D0, 0x9608}, //17353 #CJK UNIFIED IDEOGRAPH
+ {0xE3D1, 0x960A}, //17354 #CJK UNIFIED IDEOGRAPH
+ {0xE3D2, 0x960B}, //17355 #CJK UNIFIED IDEOGRAPH
+ {0xE3D3, 0x960C}, //17356 #CJK UNIFIED IDEOGRAPH
+ {0xE3D4, 0x960D}, //17357 #CJK UNIFIED IDEOGRAPH
+ {0xE3D5, 0x960F}, //17358 #CJK UNIFIED IDEOGRAPH
+ {0xE3D6, 0x9612}, //17359 #CJK UNIFIED IDEOGRAPH
+ {0xE3D7, 0x9615}, //17360 #CJK UNIFIED IDEOGRAPH
+ {0xE3D8, 0x9616}, //17361 #CJK UNIFIED IDEOGRAPH
+ {0xE3D9, 0x9617}, //17362 #CJK UNIFIED IDEOGRAPH
+ {0xE3DA, 0x9619}, //17363 #CJK UNIFIED IDEOGRAPH
+ {0xE3DB, 0x961A}, //17364 #CJK UNIFIED IDEOGRAPH
+ {0xE3DC, 0x4E2C}, //17365 #CJK UNIFIED IDEOGRAPH
+ {0xE3DD, 0x723F}, //17366 #CJK UNIFIED IDEOGRAPH
+ {0xE3DE, 0x6215}, //17367 #CJK UNIFIED IDEOGRAPH
+ {0xE3DF, 0x6C35}, //17368 #CJK UNIFIED IDEOGRAPH
+ {0xE3E0, 0x6C54}, //17369 #CJK UNIFIED IDEOGRAPH
+ {0xE3E1, 0x6C5C}, //17370 #CJK UNIFIED IDEOGRAPH
+ {0xE3E2, 0x6C4A}, //17371 #CJK UNIFIED IDEOGRAPH
+ {0xE3E3, 0x6CA3}, //17372 #CJK UNIFIED IDEOGRAPH
+ {0xE3E4, 0x6C85}, //17373 #CJK UNIFIED IDEOGRAPH
+ {0xE3E5, 0x6C90}, //17374 #CJK UNIFIED IDEOGRAPH
+ {0xE3E6, 0x6C94}, //17375 #CJK UNIFIED IDEOGRAPH
+ {0xE3E7, 0x6C8C}, //17376 #CJK UNIFIED IDEOGRAPH
+ {0xE3E8, 0x6C68}, //17377 #CJK UNIFIED IDEOGRAPH
+ {0xE3E9, 0x6C69}, //17378 #CJK UNIFIED IDEOGRAPH
+ {0xE3EA, 0x6C74}, //17379 #CJK UNIFIED IDEOGRAPH
+ {0xE3EB, 0x6C76}, //17380 #CJK UNIFIED IDEOGRAPH
+ {0xE3EC, 0x6C86}, //17381 #CJK UNIFIED IDEOGRAPH
+ {0xE3ED, 0x6CA9}, //17382 #CJK UNIFIED IDEOGRAPH
+ {0xE3EE, 0x6CD0}, //17383 #CJK UNIFIED IDEOGRAPH
+ {0xE3EF, 0x6CD4}, //17384 #CJK UNIFIED IDEOGRAPH
+ {0xE3F0, 0x6CAD}, //17385 #CJK UNIFIED IDEOGRAPH
+ {0xE3F1, 0x6CF7}, //17386 #CJK UNIFIED IDEOGRAPH
+ {0xE3F2, 0x6CF8}, //17387 #CJK UNIFIED IDEOGRAPH
+ {0xE3F3, 0x6CF1}, //17388 #CJK UNIFIED IDEOGRAPH
+ {0xE3F4, 0x6CD7}, //17389 #CJK UNIFIED IDEOGRAPH
+ {0xE3F5, 0x6CB2}, //17390 #CJK UNIFIED IDEOGRAPH
+ {0xE3F6, 0x6CE0}, //17391 #CJK UNIFIED IDEOGRAPH
+ {0xE3F7, 0x6CD6}, //17392 #CJK UNIFIED IDEOGRAPH
+ {0xE3F8, 0x6CFA}, //17393 #CJK UNIFIED IDEOGRAPH
+ {0xE3F9, 0x6CEB}, //17394 #CJK UNIFIED IDEOGRAPH
+ {0xE3FA, 0x6CEE}, //17395 #CJK UNIFIED IDEOGRAPH
+ {0xE3FB, 0x6CB1}, //17396 #CJK UNIFIED IDEOGRAPH
+ {0xE3FC, 0x6CD3}, //17397 #CJK UNIFIED IDEOGRAPH
+ {0xE3FD, 0x6CEF}, //17398 #CJK UNIFIED IDEOGRAPH
+ {0xE3FE, 0x6CFE}, //17399 #CJK UNIFIED IDEOGRAPH
+ {0xE440, 0x92A8}, //17400 #CJK UNIFIED IDEOGRAPH
+ {0xE441, 0x92A9}, //17401 #CJK UNIFIED IDEOGRAPH
+ {0xE442, 0x92AA}, //17402 #CJK UNIFIED IDEOGRAPH
+ {0xE443, 0x92AB}, //17403 #CJK UNIFIED IDEOGRAPH
+ {0xE444, 0x92AC}, //17404 #CJK UNIFIED IDEOGRAPH
+ {0xE445, 0x92AD}, //17405 #CJK UNIFIED IDEOGRAPH
+ {0xE446, 0x92AF}, //17406 #CJK UNIFIED IDEOGRAPH
+ {0xE447, 0x92B0}, //17407 #CJK UNIFIED IDEOGRAPH
+ {0xE448, 0x92B1}, //17408 #CJK UNIFIED IDEOGRAPH
+ {0xE449, 0x92B2}, //17409 #CJK UNIFIED IDEOGRAPH
+ {0xE44A, 0x92B3}, //17410 #CJK UNIFIED IDEOGRAPH
+ {0xE44B, 0x92B4}, //17411 #CJK UNIFIED IDEOGRAPH
+ {0xE44C, 0x92B5}, //17412 #CJK UNIFIED IDEOGRAPH
+ {0xE44D, 0x92B6}, //17413 #CJK UNIFIED IDEOGRAPH
+ {0xE44E, 0x92B7}, //17414 #CJK UNIFIED IDEOGRAPH
+ {0xE44F, 0x92B8}, //17415 #CJK UNIFIED IDEOGRAPH
+ {0xE450, 0x92B9}, //17416 #CJK UNIFIED IDEOGRAPH
+ {0xE451, 0x92BA}, //17417 #CJK UNIFIED IDEOGRAPH
+ {0xE452, 0x92BB}, //17418 #CJK UNIFIED IDEOGRAPH
+ {0xE453, 0x92BC}, //17419 #CJK UNIFIED IDEOGRAPH
+ {0xE454, 0x92BD}, //17420 #CJK UNIFIED IDEOGRAPH
+ {0xE455, 0x92BE}, //17421 #CJK UNIFIED IDEOGRAPH
+ {0xE456, 0x92BF}, //17422 #CJK UNIFIED IDEOGRAPH
+ {0xE457, 0x92C0}, //17423 #CJK UNIFIED IDEOGRAPH
+ {0xE458, 0x92C1}, //17424 #CJK UNIFIED IDEOGRAPH
+ {0xE459, 0x92C2}, //17425 #CJK UNIFIED IDEOGRAPH
+ {0xE45A, 0x92C3}, //17426 #CJK UNIFIED IDEOGRAPH
+ {0xE45B, 0x92C4}, //17427 #CJK UNIFIED IDEOGRAPH
+ {0xE45C, 0x92C5}, //17428 #CJK UNIFIED IDEOGRAPH
+ {0xE45D, 0x92C6}, //17429 #CJK UNIFIED IDEOGRAPH
+ {0xE45E, 0x92C7}, //17430 #CJK UNIFIED IDEOGRAPH
+ {0xE45F, 0x92C9}, //17431 #CJK UNIFIED IDEOGRAPH
+ {0xE460, 0x92CA}, //17432 #CJK UNIFIED IDEOGRAPH
+ {0xE461, 0x92CB}, //17433 #CJK UNIFIED IDEOGRAPH
+ {0xE462, 0x92CC}, //17434 #CJK UNIFIED IDEOGRAPH
+ {0xE463, 0x92CD}, //17435 #CJK UNIFIED IDEOGRAPH
+ {0xE464, 0x92CE}, //17436 #CJK UNIFIED IDEOGRAPH
+ {0xE465, 0x92CF}, //17437 #CJK UNIFIED IDEOGRAPH
+ {0xE466, 0x92D0}, //17438 #CJK UNIFIED IDEOGRAPH
+ {0xE467, 0x92D1}, //17439 #CJK UNIFIED IDEOGRAPH
+ {0xE468, 0x92D2}, //17440 #CJK UNIFIED IDEOGRAPH
+ {0xE469, 0x92D3}, //17441 #CJK UNIFIED IDEOGRAPH
+ {0xE46A, 0x92D4}, //17442 #CJK UNIFIED IDEOGRAPH
+ {0xE46B, 0x92D5}, //17443 #CJK UNIFIED IDEOGRAPH
+ {0xE46C, 0x92D6}, //17444 #CJK UNIFIED IDEOGRAPH
+ {0xE46D, 0x92D7}, //17445 #CJK UNIFIED IDEOGRAPH
+ {0xE46E, 0x92D8}, //17446 #CJK UNIFIED IDEOGRAPH
+ {0xE46F, 0x92D9}, //17447 #CJK UNIFIED IDEOGRAPH
+ {0xE470, 0x92DA}, //17448 #CJK UNIFIED IDEOGRAPH
+ {0xE471, 0x92DB}, //17449 #CJK UNIFIED IDEOGRAPH
+ {0xE472, 0x92DC}, //17450 #CJK UNIFIED IDEOGRAPH
+ {0xE473, 0x92DD}, //17451 #CJK UNIFIED IDEOGRAPH
+ {0xE474, 0x92DE}, //17452 #CJK UNIFIED IDEOGRAPH
+ {0xE475, 0x92DF}, //17453 #CJK UNIFIED IDEOGRAPH
+ {0xE476, 0x92E0}, //17454 #CJK UNIFIED IDEOGRAPH
+ {0xE477, 0x92E1}, //17455 #CJK UNIFIED IDEOGRAPH
+ {0xE478, 0x92E2}, //17456 #CJK UNIFIED IDEOGRAPH
+ {0xE479, 0x92E3}, //17457 #CJK UNIFIED IDEOGRAPH
+ {0xE47A, 0x92E4}, //17458 #CJK UNIFIED IDEOGRAPH
+ {0xE47B, 0x92E5}, //17459 #CJK UNIFIED IDEOGRAPH
+ {0xE47C, 0x92E6}, //17460 #CJK UNIFIED IDEOGRAPH
+ {0xE47D, 0x92E7}, //17461 #CJK UNIFIED IDEOGRAPH
+ {0xE47E, 0x92E8}, //17462 #CJK UNIFIED IDEOGRAPH
+ {0xE480, 0x92E9}, //17463 #CJK UNIFIED IDEOGRAPH
+ {0xE481, 0x92EA}, //17464 #CJK UNIFIED IDEOGRAPH
+ {0xE482, 0x92EB}, //17465 #CJK UNIFIED IDEOGRAPH
+ {0xE483, 0x92EC}, //17466 #CJK UNIFIED IDEOGRAPH
+ {0xE484, 0x92ED}, //17467 #CJK UNIFIED IDEOGRAPH
+ {0xE485, 0x92EE}, //17468 #CJK UNIFIED IDEOGRAPH
+ {0xE486, 0x92EF}, //17469 #CJK UNIFIED IDEOGRAPH
+ {0xE487, 0x92F0}, //17470 #CJK UNIFIED IDEOGRAPH
+ {0xE488, 0x92F1}, //17471 #CJK UNIFIED IDEOGRAPH
+ {0xE489, 0x92F2}, //17472 #CJK UNIFIED IDEOGRAPH
+ {0xE48A, 0x92F3}, //17473 #CJK UNIFIED IDEOGRAPH
+ {0xE48B, 0x92F4}, //17474 #CJK UNIFIED IDEOGRAPH
+ {0xE48C, 0x92F5}, //17475 #CJK UNIFIED IDEOGRAPH
+ {0xE48D, 0x92F6}, //17476 #CJK UNIFIED IDEOGRAPH
+ {0xE48E, 0x92F7}, //17477 #CJK UNIFIED IDEOGRAPH
+ {0xE48F, 0x92F8}, //17478 #CJK UNIFIED IDEOGRAPH
+ {0xE490, 0x92F9}, //17479 #CJK UNIFIED IDEOGRAPH
+ {0xE491, 0x92FA}, //17480 #CJK UNIFIED IDEOGRAPH
+ {0xE492, 0x92FB}, //17481 #CJK UNIFIED IDEOGRAPH
+ {0xE493, 0x92FC}, //17482 #CJK UNIFIED IDEOGRAPH
+ {0xE494, 0x92FD}, //17483 #CJK UNIFIED IDEOGRAPH
+ {0xE495, 0x92FE}, //17484 #CJK UNIFIED IDEOGRAPH
+ {0xE496, 0x92FF}, //17485 #CJK UNIFIED IDEOGRAPH
+ {0xE497, 0x9300}, //17486 #CJK UNIFIED IDEOGRAPH
+ {0xE498, 0x9301}, //17487 #CJK UNIFIED IDEOGRAPH
+ {0xE499, 0x9302}, //17488 #CJK UNIFIED IDEOGRAPH
+ {0xE49A, 0x9303}, //17489 #CJK UNIFIED IDEOGRAPH
+ {0xE49B, 0x9304}, //17490 #CJK UNIFIED IDEOGRAPH
+ {0xE49C, 0x9305}, //17491 #CJK UNIFIED IDEOGRAPH
+ {0xE49D, 0x9306}, //17492 #CJK UNIFIED IDEOGRAPH
+ {0xE49E, 0x9307}, //17493 #CJK UNIFIED IDEOGRAPH
+ {0xE49F, 0x9308}, //17494 #CJK UNIFIED IDEOGRAPH
+ {0xE4A0, 0x9309}, //17495 #CJK UNIFIED IDEOGRAPH
+ {0xE4A1, 0x6D39}, //17496 #CJK UNIFIED IDEOGRAPH
+ {0xE4A2, 0x6D27}, //17497 #CJK UNIFIED IDEOGRAPH
+ {0xE4A3, 0x6D0C}, //17498 #CJK UNIFIED IDEOGRAPH
+ {0xE4A4, 0x6D43}, //17499 #CJK UNIFIED IDEOGRAPH
+ {0xE4A5, 0x6D48}, //17500 #CJK UNIFIED IDEOGRAPH
+ {0xE4A6, 0x6D07}, //17501 #CJK UNIFIED IDEOGRAPH
+ {0xE4A7, 0x6D04}, //17502 #CJK UNIFIED IDEOGRAPH
+ {0xE4A8, 0x6D19}, //17503 #CJK UNIFIED IDEOGRAPH
+ {0xE4A9, 0x6D0E}, //17504 #CJK UNIFIED IDEOGRAPH
+ {0xE4AA, 0x6D2B}, //17505 #CJK UNIFIED IDEOGRAPH
+ {0xE4AB, 0x6D4D}, //17506 #CJK UNIFIED IDEOGRAPH
+ {0xE4AC, 0x6D2E}, //17507 #CJK UNIFIED IDEOGRAPH
+ {0xE4AD, 0x6D35}, //17508 #CJK UNIFIED IDEOGRAPH
+ {0xE4AE, 0x6D1A}, //17509 #CJK UNIFIED IDEOGRAPH
+ {0xE4AF, 0x6D4F}, //17510 #CJK UNIFIED IDEOGRAPH
+ {0xE4B0, 0x6D52}, //17511 #CJK UNIFIED IDEOGRAPH
+ {0xE4B1, 0x6D54}, //17512 #CJK UNIFIED IDEOGRAPH
+ {0xE4B2, 0x6D33}, //17513 #CJK UNIFIED IDEOGRAPH
+ {0xE4B3, 0x6D91}, //17514 #CJK UNIFIED IDEOGRAPH
+ {0xE4B4, 0x6D6F}, //17515 #CJK UNIFIED IDEOGRAPH
+ {0xE4B5, 0x6D9E}, //17516 #CJK UNIFIED IDEOGRAPH
+ {0xE4B6, 0x6DA0}, //17517 #CJK UNIFIED IDEOGRAPH
+ {0xE4B7, 0x6D5E}, //17518 #CJK UNIFIED IDEOGRAPH
+ {0xE4B8, 0x6D93}, //17519 #CJK UNIFIED IDEOGRAPH
+ {0xE4B9, 0x6D94}, //17520 #CJK UNIFIED IDEOGRAPH
+ {0xE4BA, 0x6D5C}, //17521 #CJK UNIFIED IDEOGRAPH
+ {0xE4BB, 0x6D60}, //17522 #CJK UNIFIED IDEOGRAPH
+ {0xE4BC, 0x6D7C}, //17523 #CJK UNIFIED IDEOGRAPH
+ {0xE4BD, 0x6D63}, //17524 #CJK UNIFIED IDEOGRAPH
+ {0xE4BE, 0x6E1A}, //17525 #CJK UNIFIED IDEOGRAPH
+ {0xE4BF, 0x6DC7}, //17526 #CJK UNIFIED IDEOGRAPH
+ {0xE4C0, 0x6DC5}, //17527 #CJK UNIFIED IDEOGRAPH
+ {0xE4C1, 0x6DDE}, //17528 #CJK UNIFIED IDEOGRAPH
+ {0xE4C2, 0x6E0E}, //17529 #CJK UNIFIED IDEOGRAPH
+ {0xE4C3, 0x6DBF}, //17530 #CJK UNIFIED IDEOGRAPH
+ {0xE4C4, 0x6DE0}, //17531 #CJK UNIFIED IDEOGRAPH
+ {0xE4C5, 0x6E11}, //17532 #CJK UNIFIED IDEOGRAPH
+ {0xE4C6, 0x6DE6}, //17533 #CJK UNIFIED IDEOGRAPH
+ {0xE4C7, 0x6DDD}, //17534 #CJK UNIFIED IDEOGRAPH
+ {0xE4C8, 0x6DD9}, //17535 #CJK UNIFIED IDEOGRAPH
+ {0xE4C9, 0x6E16}, //17536 #CJK UNIFIED IDEOGRAPH
+ {0xE4CA, 0x6DAB}, //17537 #CJK UNIFIED IDEOGRAPH
+ {0xE4CB, 0x6E0C}, //17538 #CJK UNIFIED IDEOGRAPH
+ {0xE4CC, 0x6DAE}, //17539 #CJK UNIFIED IDEOGRAPH
+ {0xE4CD, 0x6E2B}, //17540 #CJK UNIFIED IDEOGRAPH
+ {0xE4CE, 0x6E6E}, //17541 #CJK UNIFIED IDEOGRAPH
+ {0xE4CF, 0x6E4E}, //17542 #CJK UNIFIED IDEOGRAPH
+ {0xE4D0, 0x6E6B}, //17543 #CJK UNIFIED IDEOGRAPH
+ {0xE4D1, 0x6EB2}, //17544 #CJK UNIFIED IDEOGRAPH
+ {0xE4D2, 0x6E5F}, //17545 #CJK UNIFIED IDEOGRAPH
+ {0xE4D3, 0x6E86}, //17546 #CJK UNIFIED IDEOGRAPH
+ {0xE4D4, 0x6E53}, //17547 #CJK UNIFIED IDEOGRAPH
+ {0xE4D5, 0x6E54}, //17548 #CJK UNIFIED IDEOGRAPH
+ {0xE4D6, 0x6E32}, //17549 #CJK UNIFIED IDEOGRAPH
+ {0xE4D7, 0x6E25}, //17550 #CJK UNIFIED IDEOGRAPH
+ {0xE4D8, 0x6E44}, //17551 #CJK UNIFIED IDEOGRAPH
+ {0xE4D9, 0x6EDF}, //17552 #CJK UNIFIED IDEOGRAPH
+ {0xE4DA, 0x6EB1}, //17553 #CJK UNIFIED IDEOGRAPH
+ {0xE4DB, 0x6E98}, //17554 #CJK UNIFIED IDEOGRAPH
+ {0xE4DC, 0x6EE0}, //17555 #CJK UNIFIED IDEOGRAPH
+ {0xE4DD, 0x6F2D}, //17556 #CJK UNIFIED IDEOGRAPH
+ {0xE4DE, 0x6EE2}, //17557 #CJK UNIFIED IDEOGRAPH
+ {0xE4DF, 0x6EA5}, //17558 #CJK UNIFIED IDEOGRAPH
+ {0xE4E0, 0x6EA7}, //17559 #CJK UNIFIED IDEOGRAPH
+ {0xE4E1, 0x6EBD}, //17560 #CJK UNIFIED IDEOGRAPH
+ {0xE4E2, 0x6EBB}, //17561 #CJK UNIFIED IDEOGRAPH
+ {0xE4E3, 0x6EB7}, //17562 #CJK UNIFIED IDEOGRAPH
+ {0xE4E4, 0x6ED7}, //17563 #CJK UNIFIED IDEOGRAPH
+ {0xE4E5, 0x6EB4}, //17564 #CJK UNIFIED IDEOGRAPH
+ {0xE4E6, 0x6ECF}, //17565 #CJK UNIFIED IDEOGRAPH
+ {0xE4E7, 0x6E8F}, //17566 #CJK UNIFIED IDEOGRAPH
+ {0xE4E8, 0x6EC2}, //17567 #CJK UNIFIED IDEOGRAPH
+ {0xE4E9, 0x6E9F}, //17568 #CJK UNIFIED IDEOGRAPH
+ {0xE4EA, 0x6F62}, //17569 #CJK UNIFIED IDEOGRAPH
+ {0xE4EB, 0x6F46}, //17570 #CJK UNIFIED IDEOGRAPH
+ {0xE4EC, 0x6F47}, //17571 #CJK UNIFIED IDEOGRAPH
+ {0xE4ED, 0x6F24}, //17572 #CJK UNIFIED IDEOGRAPH
+ {0xE4EE, 0x6F15}, //17573 #CJK UNIFIED IDEOGRAPH
+ {0xE4EF, 0x6EF9}, //17574 #CJK UNIFIED IDEOGRAPH
+ {0xE4F0, 0x6F2F}, //17575 #CJK UNIFIED IDEOGRAPH
+ {0xE4F1, 0x6F36}, //17576 #CJK UNIFIED IDEOGRAPH
+ {0xE4F2, 0x6F4B}, //17577 #CJK UNIFIED IDEOGRAPH
+ {0xE4F3, 0x6F74}, //17578 #CJK UNIFIED IDEOGRAPH
+ {0xE4F4, 0x6F2A}, //17579 #CJK UNIFIED IDEOGRAPH
+ {0xE4F5, 0x6F09}, //17580 #CJK UNIFIED IDEOGRAPH
+ {0xE4F6, 0x6F29}, //17581 #CJK UNIFIED IDEOGRAPH
+ {0xE4F7, 0x6F89}, //17582 #CJK UNIFIED IDEOGRAPH
+ {0xE4F8, 0x6F8D}, //17583 #CJK UNIFIED IDEOGRAPH
+ {0xE4F9, 0x6F8C}, //17584 #CJK UNIFIED IDEOGRAPH
+ {0xE4FA, 0x6F78}, //17585 #CJK UNIFIED IDEOGRAPH
+ {0xE4FB, 0x6F72}, //17586 #CJK UNIFIED IDEOGRAPH
+ {0xE4FC, 0x6F7C}, //17587 #CJK UNIFIED IDEOGRAPH
+ {0xE4FD, 0x6F7A}, //17588 #CJK UNIFIED IDEOGRAPH
+ {0xE4FE, 0x6FD1}, //17589 #CJK UNIFIED IDEOGRAPH
+ {0xE540, 0x930A}, //17590 #CJK UNIFIED IDEOGRAPH
+ {0xE541, 0x930B}, //17591 #CJK UNIFIED IDEOGRAPH
+ {0xE542, 0x930C}, //17592 #CJK UNIFIED IDEOGRAPH
+ {0xE543, 0x930D}, //17593 #CJK UNIFIED IDEOGRAPH
+ {0xE544, 0x930E}, //17594 #CJK UNIFIED IDEOGRAPH
+ {0xE545, 0x930F}, //17595 #CJK UNIFIED IDEOGRAPH
+ {0xE546, 0x9310}, //17596 #CJK UNIFIED IDEOGRAPH
+ {0xE547, 0x9311}, //17597 #CJK UNIFIED IDEOGRAPH
+ {0xE548, 0x9312}, //17598 #CJK UNIFIED IDEOGRAPH
+ {0xE549, 0x9313}, //17599 #CJK UNIFIED IDEOGRAPH
+ {0xE54A, 0x9314}, //17600 #CJK UNIFIED IDEOGRAPH
+ {0xE54B, 0x9315}, //17601 #CJK UNIFIED IDEOGRAPH
+ {0xE54C, 0x9316}, //17602 #CJK UNIFIED IDEOGRAPH
+ {0xE54D, 0x9317}, //17603 #CJK UNIFIED IDEOGRAPH
+ {0xE54E, 0x9318}, //17604 #CJK UNIFIED IDEOGRAPH
+ {0xE54F, 0x9319}, //17605 #CJK UNIFIED IDEOGRAPH
+ {0xE550, 0x931A}, //17606 #CJK UNIFIED IDEOGRAPH
+ {0xE551, 0x931B}, //17607 #CJK UNIFIED IDEOGRAPH
+ {0xE552, 0x931C}, //17608 #CJK UNIFIED IDEOGRAPH
+ {0xE553, 0x931D}, //17609 #CJK UNIFIED IDEOGRAPH
+ {0xE554, 0x931E}, //17610 #CJK UNIFIED IDEOGRAPH
+ {0xE555, 0x931F}, //17611 #CJK UNIFIED IDEOGRAPH
+ {0xE556, 0x9320}, //17612 #CJK UNIFIED IDEOGRAPH
+ {0xE557, 0x9321}, //17613 #CJK UNIFIED IDEOGRAPH
+ {0xE558, 0x9322}, //17614 #CJK UNIFIED IDEOGRAPH
+ {0xE559, 0x9323}, //17615 #CJK UNIFIED IDEOGRAPH
+ {0xE55A, 0x9324}, //17616 #CJK UNIFIED IDEOGRAPH
+ {0xE55B, 0x9325}, //17617 #CJK UNIFIED IDEOGRAPH
+ {0xE55C, 0x9326}, //17618 #CJK UNIFIED IDEOGRAPH
+ {0xE55D, 0x9327}, //17619 #CJK UNIFIED IDEOGRAPH
+ {0xE55E, 0x9328}, //17620 #CJK UNIFIED IDEOGRAPH
+ {0xE55F, 0x9329}, //17621 #CJK UNIFIED IDEOGRAPH
+ {0xE560, 0x932A}, //17622 #CJK UNIFIED IDEOGRAPH
+ {0xE561, 0x932B}, //17623 #CJK UNIFIED IDEOGRAPH
+ {0xE562, 0x932C}, //17624 #CJK UNIFIED IDEOGRAPH
+ {0xE563, 0x932D}, //17625 #CJK UNIFIED IDEOGRAPH
+ {0xE564, 0x932E}, //17626 #CJK UNIFIED IDEOGRAPH
+ {0xE565, 0x932F}, //17627 #CJK UNIFIED IDEOGRAPH
+ {0xE566, 0x9330}, //17628 #CJK UNIFIED IDEOGRAPH
+ {0xE567, 0x9331}, //17629 #CJK UNIFIED IDEOGRAPH
+ {0xE568, 0x9332}, //17630 #CJK UNIFIED IDEOGRAPH
+ {0xE569, 0x9333}, //17631 #CJK UNIFIED IDEOGRAPH
+ {0xE56A, 0x9334}, //17632 #CJK UNIFIED IDEOGRAPH
+ {0xE56B, 0x9335}, //17633 #CJK UNIFIED IDEOGRAPH
+ {0xE56C, 0x9336}, //17634 #CJK UNIFIED IDEOGRAPH
+ {0xE56D, 0x9337}, //17635 #CJK UNIFIED IDEOGRAPH
+ {0xE56E, 0x9338}, //17636 #CJK UNIFIED IDEOGRAPH
+ {0xE56F, 0x9339}, //17637 #CJK UNIFIED IDEOGRAPH
+ {0xE570, 0x933A}, //17638 #CJK UNIFIED IDEOGRAPH
+ {0xE571, 0x933B}, //17639 #CJK UNIFIED IDEOGRAPH
+ {0xE572, 0x933C}, //17640 #CJK UNIFIED IDEOGRAPH
+ {0xE573, 0x933D}, //17641 #CJK UNIFIED IDEOGRAPH
+ {0xE574, 0x933F}, //17642 #CJK UNIFIED IDEOGRAPH
+ {0xE575, 0x9340}, //17643 #CJK UNIFIED IDEOGRAPH
+ {0xE576, 0x9341}, //17644 #CJK UNIFIED IDEOGRAPH
+ {0xE577, 0x9342}, //17645 #CJK UNIFIED IDEOGRAPH
+ {0xE578, 0x9343}, //17646 #CJK UNIFIED IDEOGRAPH
+ {0xE579, 0x9344}, //17647 #CJK UNIFIED IDEOGRAPH
+ {0xE57A, 0x9345}, //17648 #CJK UNIFIED IDEOGRAPH
+ {0xE57B, 0x9346}, //17649 #CJK UNIFIED IDEOGRAPH
+ {0xE57C, 0x9347}, //17650 #CJK UNIFIED IDEOGRAPH
+ {0xE57D, 0x9348}, //17651 #CJK UNIFIED IDEOGRAPH
+ {0xE57E, 0x9349}, //17652 #CJK UNIFIED IDEOGRAPH
+ {0xE580, 0x934A}, //17653 #CJK UNIFIED IDEOGRAPH
+ {0xE581, 0x934B}, //17654 #CJK UNIFIED IDEOGRAPH
+ {0xE582, 0x934C}, //17655 #CJK UNIFIED IDEOGRAPH
+ {0xE583, 0x934D}, //17656 #CJK UNIFIED IDEOGRAPH
+ {0xE584, 0x934E}, //17657 #CJK UNIFIED IDEOGRAPH
+ {0xE585, 0x934F}, //17658 #CJK UNIFIED IDEOGRAPH
+ {0xE586, 0x9350}, //17659 #CJK UNIFIED IDEOGRAPH
+ {0xE587, 0x9351}, //17660 #CJK UNIFIED IDEOGRAPH
+ {0xE588, 0x9352}, //17661 #CJK UNIFIED IDEOGRAPH
+ {0xE589, 0x9353}, //17662 #CJK UNIFIED IDEOGRAPH
+ {0xE58A, 0x9354}, //17663 #CJK UNIFIED IDEOGRAPH
+ {0xE58B, 0x9355}, //17664 #CJK UNIFIED IDEOGRAPH
+ {0xE58C, 0x9356}, //17665 #CJK UNIFIED IDEOGRAPH
+ {0xE58D, 0x9357}, //17666 #CJK UNIFIED IDEOGRAPH
+ {0xE58E, 0x9358}, //17667 #CJK UNIFIED IDEOGRAPH
+ {0xE58F, 0x9359}, //17668 #CJK UNIFIED IDEOGRAPH
+ {0xE590, 0x935A}, //17669 #CJK UNIFIED IDEOGRAPH
+ {0xE591, 0x935B}, //17670 #CJK UNIFIED IDEOGRAPH
+ {0xE592, 0x935C}, //17671 #CJK UNIFIED IDEOGRAPH
+ {0xE593, 0x935D}, //17672 #CJK UNIFIED IDEOGRAPH
+ {0xE594, 0x935E}, //17673 #CJK UNIFIED IDEOGRAPH
+ {0xE595, 0x935F}, //17674 #CJK UNIFIED IDEOGRAPH
+ {0xE596, 0x9360}, //17675 #CJK UNIFIED IDEOGRAPH
+ {0xE597, 0x9361}, //17676 #CJK UNIFIED IDEOGRAPH
+ {0xE598, 0x9362}, //17677 #CJK UNIFIED IDEOGRAPH
+ {0xE599, 0x9363}, //17678 #CJK UNIFIED IDEOGRAPH
+ {0xE59A, 0x9364}, //17679 #CJK UNIFIED IDEOGRAPH
+ {0xE59B, 0x9365}, //17680 #CJK UNIFIED IDEOGRAPH
+ {0xE59C, 0x9366}, //17681 #CJK UNIFIED IDEOGRAPH
+ {0xE59D, 0x9367}, //17682 #CJK UNIFIED IDEOGRAPH
+ {0xE59E, 0x9368}, //17683 #CJK UNIFIED IDEOGRAPH
+ {0xE59F, 0x9369}, //17684 #CJK UNIFIED IDEOGRAPH
+ {0xE5A0, 0x936B}, //17685 #CJK UNIFIED IDEOGRAPH
+ {0xE5A1, 0x6FC9}, //17686 #CJK UNIFIED IDEOGRAPH
+ {0xE5A2, 0x6FA7}, //17687 #CJK UNIFIED IDEOGRAPH
+ {0xE5A3, 0x6FB9}, //17688 #CJK UNIFIED IDEOGRAPH
+ {0xE5A4, 0x6FB6}, //17689 #CJK UNIFIED IDEOGRAPH
+ {0xE5A5, 0x6FC2}, //17690 #CJK UNIFIED IDEOGRAPH
+ {0xE5A6, 0x6FE1}, //17691 #CJK UNIFIED IDEOGRAPH
+ {0xE5A7, 0x6FEE}, //17692 #CJK UNIFIED IDEOGRAPH
+ {0xE5A8, 0x6FDE}, //17693 #CJK UNIFIED IDEOGRAPH
+ {0xE5A9, 0x6FE0}, //17694 #CJK UNIFIED IDEOGRAPH
+ {0xE5AA, 0x6FEF}, //17695 #CJK UNIFIED IDEOGRAPH
+ {0xE5AB, 0x701A}, //17696 #CJK UNIFIED IDEOGRAPH
+ {0xE5AC, 0x7023}, //17697 #CJK UNIFIED IDEOGRAPH
+ {0xE5AD, 0x701B}, //17698 #CJK UNIFIED IDEOGRAPH
+ {0xE5AE, 0x7039}, //17699 #CJK UNIFIED IDEOGRAPH
+ {0xE5AF, 0x7035}, //17700 #CJK UNIFIED IDEOGRAPH
+ {0xE5B0, 0x704F}, //17701 #CJK UNIFIED IDEOGRAPH
+ {0xE5B1, 0x705E}, //17702 #CJK UNIFIED IDEOGRAPH
+ {0xE5B2, 0x5B80}, //17703 #CJK UNIFIED IDEOGRAPH
+ {0xE5B3, 0x5B84}, //17704 #CJK UNIFIED IDEOGRAPH
+ {0xE5B4, 0x5B95}, //17705 #CJK UNIFIED IDEOGRAPH
+ {0xE5B5, 0x5B93}, //17706 #CJK UNIFIED IDEOGRAPH
+ {0xE5B6, 0x5BA5}, //17707 #CJK UNIFIED IDEOGRAPH
+ {0xE5B7, 0x5BB8}, //17708 #CJK UNIFIED IDEOGRAPH
+ {0xE5B8, 0x752F}, //17709 #CJK UNIFIED IDEOGRAPH
+ {0xE5B9, 0x9A9E}, //17710 #CJK UNIFIED IDEOGRAPH
+ {0xE5BA, 0x6434}, //17711 #CJK UNIFIED IDEOGRAPH
+ {0xE5BB, 0x5BE4}, //17712 #CJK UNIFIED IDEOGRAPH
+ {0xE5BC, 0x5BEE}, //17713 #CJK UNIFIED IDEOGRAPH
+ {0xE5BD, 0x8930}, //17714 #CJK UNIFIED IDEOGRAPH
+ {0xE5BE, 0x5BF0}, //17715 #CJK UNIFIED IDEOGRAPH
+ {0xE5BF, 0x8E47}, //17716 #CJK UNIFIED IDEOGRAPH
+ {0xE5C0, 0x8B07}, //17717 #CJK UNIFIED IDEOGRAPH
+ {0xE5C1, 0x8FB6}, //17718 #CJK UNIFIED IDEOGRAPH
+ {0xE5C2, 0x8FD3}, //17719 #CJK UNIFIED IDEOGRAPH
+ {0xE5C3, 0x8FD5}, //17720 #CJK UNIFIED IDEOGRAPH
+ {0xE5C4, 0x8FE5}, //17721 #CJK UNIFIED IDEOGRAPH
+ {0xE5C5, 0x8FEE}, //17722 #CJK UNIFIED IDEOGRAPH
+ {0xE5C6, 0x8FE4}, //17723 #CJK UNIFIED IDEOGRAPH
+ {0xE5C7, 0x8FE9}, //17724 #CJK UNIFIED IDEOGRAPH
+ {0xE5C8, 0x8FE6}, //17725 #CJK UNIFIED IDEOGRAPH
+ {0xE5C9, 0x8FF3}, //17726 #CJK UNIFIED IDEOGRAPH
+ {0xE5CA, 0x8FE8}, //17727 #CJK UNIFIED IDEOGRAPH
+ {0xE5CB, 0x9005}, //17728 #CJK UNIFIED IDEOGRAPH
+ {0xE5CC, 0x9004}, //17729 #CJK UNIFIED IDEOGRAPH
+ {0xE5CD, 0x900B}, //17730 #CJK UNIFIED IDEOGRAPH
+ {0xE5CE, 0x9026}, //17731 #CJK UNIFIED IDEOGRAPH
+ {0xE5CF, 0x9011}, //17732 #CJK UNIFIED IDEOGRAPH
+ {0xE5D0, 0x900D}, //17733 #CJK UNIFIED IDEOGRAPH
+ {0xE5D1, 0x9016}, //17734 #CJK UNIFIED IDEOGRAPH
+ {0xE5D2, 0x9021}, //17735 #CJK UNIFIED IDEOGRAPH
+ {0xE5D3, 0x9035}, //17736 #CJK UNIFIED IDEOGRAPH
+ {0xE5D4, 0x9036}, //17737 #CJK UNIFIED IDEOGRAPH
+ {0xE5D5, 0x902D}, //17738 #CJK UNIFIED IDEOGRAPH
+ {0xE5D6, 0x902F}, //17739 #CJK UNIFIED IDEOGRAPH
+ {0xE5D7, 0x9044}, //17740 #CJK UNIFIED IDEOGRAPH
+ {0xE5D8, 0x9051}, //17741 #CJK UNIFIED IDEOGRAPH
+ {0xE5D9, 0x9052}, //17742 #CJK UNIFIED IDEOGRAPH
+ {0xE5DA, 0x9050}, //17743 #CJK UNIFIED IDEOGRAPH
+ {0xE5DB, 0x9068}, //17744 #CJK UNIFIED IDEOGRAPH
+ {0xE5DC, 0x9058}, //17745 #CJK UNIFIED IDEOGRAPH
+ {0xE5DD, 0x9062}, //17746 #CJK UNIFIED IDEOGRAPH
+ {0xE5DE, 0x905B}, //17747 #CJK UNIFIED IDEOGRAPH
+ {0xE5DF, 0x66B9}, //17748 #CJK UNIFIED IDEOGRAPH
+ {0xE5E0, 0x9074}, //17749 #CJK UNIFIED IDEOGRAPH
+ {0xE5E1, 0x907D}, //17750 #CJK UNIFIED IDEOGRAPH
+ {0xE5E2, 0x9082}, //17751 #CJK UNIFIED IDEOGRAPH
+ {0xE5E3, 0x9088}, //17752 #CJK UNIFIED IDEOGRAPH
+ {0xE5E4, 0x9083}, //17753 #CJK UNIFIED IDEOGRAPH
+ {0xE5E5, 0x908B}, //17754 #CJK UNIFIED IDEOGRAPH
+ {0xE5E6, 0x5F50}, //17755 #CJK UNIFIED IDEOGRAPH
+ {0xE5E7, 0x5F57}, //17756 #CJK UNIFIED IDEOGRAPH
+ {0xE5E8, 0x5F56}, //17757 #CJK UNIFIED IDEOGRAPH
+ {0xE5E9, 0x5F58}, //17758 #CJK UNIFIED IDEOGRAPH
+ {0xE5EA, 0x5C3B}, //17759 #CJK UNIFIED IDEOGRAPH
+ {0xE5EB, 0x54AB}, //17760 #CJK UNIFIED IDEOGRAPH
+ {0xE5EC, 0x5C50}, //17761 #CJK UNIFIED IDEOGRAPH
+ {0xE5ED, 0x5C59}, //17762 #CJK UNIFIED IDEOGRAPH
+ {0xE5EE, 0x5B71}, //17763 #CJK UNIFIED IDEOGRAPH
+ {0xE5EF, 0x5C63}, //17764 #CJK UNIFIED IDEOGRAPH
+ {0xE5F0, 0x5C66}, //17765 #CJK UNIFIED IDEOGRAPH
+ {0xE5F1, 0x7FBC}, //17766 #CJK UNIFIED IDEOGRAPH
+ {0xE5F2, 0x5F2A}, //17767 #CJK UNIFIED IDEOGRAPH
+ {0xE5F3, 0x5F29}, //17768 #CJK UNIFIED IDEOGRAPH
+ {0xE5F4, 0x5F2D}, //17769 #CJK UNIFIED IDEOGRAPH
+ {0xE5F5, 0x8274}, //17770 #CJK UNIFIED IDEOGRAPH
+ {0xE5F6, 0x5F3C}, //17771 #CJK UNIFIED IDEOGRAPH
+ {0xE5F7, 0x9B3B}, //17772 #CJK UNIFIED IDEOGRAPH
+ {0xE5F8, 0x5C6E}, //17773 #CJK UNIFIED IDEOGRAPH
+ {0xE5F9, 0x5981}, //17774 #CJK UNIFIED IDEOGRAPH
+ {0xE5FA, 0x5983}, //17775 #CJK UNIFIED IDEOGRAPH
+ {0xE5FB, 0x598D}, //17776 #CJK UNIFIED IDEOGRAPH
+ {0xE5FC, 0x59A9}, //17777 #CJK UNIFIED IDEOGRAPH
+ {0xE5FD, 0x59AA}, //17778 #CJK UNIFIED IDEOGRAPH
+ {0xE5FE, 0x59A3}, //17779 #CJK UNIFIED IDEOGRAPH
+ {0xE640, 0x936C}, //17780 #CJK UNIFIED IDEOGRAPH
+ {0xE641, 0x936D}, //17781 #CJK UNIFIED IDEOGRAPH
+ {0xE642, 0x936E}, //17782 #CJK UNIFIED IDEOGRAPH
+ {0xE643, 0x936F}, //17783 #CJK UNIFIED IDEOGRAPH
+ {0xE644, 0x9370}, //17784 #CJK UNIFIED IDEOGRAPH
+ {0xE645, 0x9371}, //17785 #CJK UNIFIED IDEOGRAPH
+ {0xE646, 0x9372}, //17786 #CJK UNIFIED IDEOGRAPH
+ {0xE647, 0x9373}, //17787 #CJK UNIFIED IDEOGRAPH
+ {0xE648, 0x9374}, //17788 #CJK UNIFIED IDEOGRAPH
+ {0xE649, 0x9375}, //17789 #CJK UNIFIED IDEOGRAPH
+ {0xE64A, 0x9376}, //17790 #CJK UNIFIED IDEOGRAPH
+ {0xE64B, 0x9377}, //17791 #CJK UNIFIED IDEOGRAPH
+ {0xE64C, 0x9378}, //17792 #CJK UNIFIED IDEOGRAPH
+ {0xE64D, 0x9379}, //17793 #CJK UNIFIED IDEOGRAPH
+ {0xE64E, 0x937A}, //17794 #CJK UNIFIED IDEOGRAPH
+ {0xE64F, 0x937B}, //17795 #CJK UNIFIED IDEOGRAPH
+ {0xE650, 0x937C}, //17796 #CJK UNIFIED IDEOGRAPH
+ {0xE651, 0x937D}, //17797 #CJK UNIFIED IDEOGRAPH
+ {0xE652, 0x937E}, //17798 #CJK UNIFIED IDEOGRAPH
+ {0xE653, 0x937F}, //17799 #CJK UNIFIED IDEOGRAPH
+ {0xE654, 0x9380}, //17800 #CJK UNIFIED IDEOGRAPH
+ {0xE655, 0x9381}, //17801 #CJK UNIFIED IDEOGRAPH
+ {0xE656, 0x9382}, //17802 #CJK UNIFIED IDEOGRAPH
+ {0xE657, 0x9383}, //17803 #CJK UNIFIED IDEOGRAPH
+ {0xE658, 0x9384}, //17804 #CJK UNIFIED IDEOGRAPH
+ {0xE659, 0x9385}, //17805 #CJK UNIFIED IDEOGRAPH
+ {0xE65A, 0x9386}, //17806 #CJK UNIFIED IDEOGRAPH
+ {0xE65B, 0x9387}, //17807 #CJK UNIFIED IDEOGRAPH
+ {0xE65C, 0x9388}, //17808 #CJK UNIFIED IDEOGRAPH
+ {0xE65D, 0x9389}, //17809 #CJK UNIFIED IDEOGRAPH
+ {0xE65E, 0x938A}, //17810 #CJK UNIFIED IDEOGRAPH
+ {0xE65F, 0x938B}, //17811 #CJK UNIFIED IDEOGRAPH
+ {0xE660, 0x938C}, //17812 #CJK UNIFIED IDEOGRAPH
+ {0xE661, 0x938D}, //17813 #CJK UNIFIED IDEOGRAPH
+ {0xE662, 0x938E}, //17814 #CJK UNIFIED IDEOGRAPH
+ {0xE663, 0x9390}, //17815 #CJK UNIFIED IDEOGRAPH
+ {0xE664, 0x9391}, //17816 #CJK UNIFIED IDEOGRAPH
+ {0xE665, 0x9392}, //17817 #CJK UNIFIED IDEOGRAPH
+ {0xE666, 0x9393}, //17818 #CJK UNIFIED IDEOGRAPH
+ {0xE667, 0x9394}, //17819 #CJK UNIFIED IDEOGRAPH
+ {0xE668, 0x9395}, //17820 #CJK UNIFIED IDEOGRAPH
+ {0xE669, 0x9396}, //17821 #CJK UNIFIED IDEOGRAPH
+ {0xE66A, 0x9397}, //17822 #CJK UNIFIED IDEOGRAPH
+ {0xE66B, 0x9398}, //17823 #CJK UNIFIED IDEOGRAPH
+ {0xE66C, 0x9399}, //17824 #CJK UNIFIED IDEOGRAPH
+ {0xE66D, 0x939A}, //17825 #CJK UNIFIED IDEOGRAPH
+ {0xE66E, 0x939B}, //17826 #CJK UNIFIED IDEOGRAPH
+ {0xE66F, 0x939C}, //17827 #CJK UNIFIED IDEOGRAPH
+ {0xE670, 0x939D}, //17828 #CJK UNIFIED IDEOGRAPH
+ {0xE671, 0x939E}, //17829 #CJK UNIFIED IDEOGRAPH
+ {0xE672, 0x939F}, //17830 #CJK UNIFIED IDEOGRAPH
+ {0xE673, 0x93A0}, //17831 #CJK UNIFIED IDEOGRAPH
+ {0xE674, 0x93A1}, //17832 #CJK UNIFIED IDEOGRAPH
+ {0xE675, 0x93A2}, //17833 #CJK UNIFIED IDEOGRAPH
+ {0xE676, 0x93A3}, //17834 #CJK UNIFIED IDEOGRAPH
+ {0xE677, 0x93A4}, //17835 #CJK UNIFIED IDEOGRAPH
+ {0xE678, 0x93A5}, //17836 #CJK UNIFIED IDEOGRAPH
+ {0xE679, 0x93A6}, //17837 #CJK UNIFIED IDEOGRAPH
+ {0xE67A, 0x93A7}, //17838 #CJK UNIFIED IDEOGRAPH
+ {0xE67B, 0x93A8}, //17839 #CJK UNIFIED IDEOGRAPH
+ {0xE67C, 0x93A9}, //17840 #CJK UNIFIED IDEOGRAPH
+ {0xE67D, 0x93AA}, //17841 #CJK UNIFIED IDEOGRAPH
+ {0xE67E, 0x93AB}, //17842 #CJK UNIFIED IDEOGRAPH
+ {0xE680, 0x93AC}, //17843 #CJK UNIFIED IDEOGRAPH
+ {0xE681, 0x93AD}, //17844 #CJK UNIFIED IDEOGRAPH
+ {0xE682, 0x93AE}, //17845 #CJK UNIFIED IDEOGRAPH
+ {0xE683, 0x93AF}, //17846 #CJK UNIFIED IDEOGRAPH
+ {0xE684, 0x93B0}, //17847 #CJK UNIFIED IDEOGRAPH
+ {0xE685, 0x93B1}, //17848 #CJK UNIFIED IDEOGRAPH
+ {0xE686, 0x93B2}, //17849 #CJK UNIFIED IDEOGRAPH
+ {0xE687, 0x93B3}, //17850 #CJK UNIFIED IDEOGRAPH
+ {0xE688, 0x93B4}, //17851 #CJK UNIFIED IDEOGRAPH
+ {0xE689, 0x93B5}, //17852 #CJK UNIFIED IDEOGRAPH
+ {0xE68A, 0x93B6}, //17853 #CJK UNIFIED IDEOGRAPH
+ {0xE68B, 0x93B7}, //17854 #CJK UNIFIED IDEOGRAPH
+ {0xE68C, 0x93B8}, //17855 #CJK UNIFIED IDEOGRAPH
+ {0xE68D, 0x93B9}, //17856 #CJK UNIFIED IDEOGRAPH
+ {0xE68E, 0x93BA}, //17857 #CJK UNIFIED IDEOGRAPH
+ {0xE68F, 0x93BB}, //17858 #CJK UNIFIED IDEOGRAPH
+ {0xE690, 0x93BC}, //17859 #CJK UNIFIED IDEOGRAPH
+ {0xE691, 0x93BD}, //17860 #CJK UNIFIED IDEOGRAPH
+ {0xE692, 0x93BE}, //17861 #CJK UNIFIED IDEOGRAPH
+ {0xE693, 0x93BF}, //17862 #CJK UNIFIED IDEOGRAPH
+ {0xE694, 0x93C0}, //17863 #CJK UNIFIED IDEOGRAPH
+ {0xE695, 0x93C1}, //17864 #CJK UNIFIED IDEOGRAPH
+ {0xE696, 0x93C2}, //17865 #CJK UNIFIED IDEOGRAPH
+ {0xE697, 0x93C3}, //17866 #CJK UNIFIED IDEOGRAPH
+ {0xE698, 0x93C4}, //17867 #CJK UNIFIED IDEOGRAPH
+ {0xE699, 0x93C5}, //17868 #CJK UNIFIED IDEOGRAPH
+ {0xE69A, 0x93C6}, //17869 #CJK UNIFIED IDEOGRAPH
+ {0xE69B, 0x93C7}, //17870 #CJK UNIFIED IDEOGRAPH
+ {0xE69C, 0x93C8}, //17871 #CJK UNIFIED IDEOGRAPH
+ {0xE69D, 0x93C9}, //17872 #CJK UNIFIED IDEOGRAPH
+ {0xE69E, 0x93CB}, //17873 #CJK UNIFIED IDEOGRAPH
+ {0xE69F, 0x93CC}, //17874 #CJK UNIFIED IDEOGRAPH
+ {0xE6A0, 0x93CD}, //17875 #CJK UNIFIED IDEOGRAPH
+ {0xE6A1, 0x5997}, //17876 #CJK UNIFIED IDEOGRAPH
+ {0xE6A2, 0x59CA}, //17877 #CJK UNIFIED IDEOGRAPH
+ {0xE6A3, 0x59AB}, //17878 #CJK UNIFIED IDEOGRAPH
+ {0xE6A4, 0x599E}, //17879 #CJK UNIFIED IDEOGRAPH
+ {0xE6A5, 0x59A4}, //17880 #CJK UNIFIED IDEOGRAPH
+ {0xE6A6, 0x59D2}, //17881 #CJK UNIFIED IDEOGRAPH
+ {0xE6A7, 0x59B2}, //17882 #CJK UNIFIED IDEOGRAPH
+ {0xE6A8, 0x59AF}, //17883 #CJK UNIFIED IDEOGRAPH
+ {0xE6A9, 0x59D7}, //17884 #CJK UNIFIED IDEOGRAPH
+ {0xE6AA, 0x59BE}, //17885 #CJK UNIFIED IDEOGRAPH
+ {0xE6AB, 0x5A05}, //17886 #CJK UNIFIED IDEOGRAPH
+ {0xE6AC, 0x5A06}, //17887 #CJK UNIFIED IDEOGRAPH
+ {0xE6AD, 0x59DD}, //17888 #CJK UNIFIED IDEOGRAPH
+ {0xE6AE, 0x5A08}, //17889 #CJK UNIFIED IDEOGRAPH
+ {0xE6AF, 0x59E3}, //17890 #CJK UNIFIED IDEOGRAPH
+ {0xE6B0, 0x59D8}, //17891 #CJK UNIFIED IDEOGRAPH
+ {0xE6B1, 0x59F9}, //17892 #CJK UNIFIED IDEOGRAPH
+ {0xE6B2, 0x5A0C}, //17893 #CJK UNIFIED IDEOGRAPH
+ {0xE6B3, 0x5A09}, //17894 #CJK UNIFIED IDEOGRAPH
+ {0xE6B4, 0x5A32}, //17895 #CJK UNIFIED IDEOGRAPH
+ {0xE6B5, 0x5A34}, //17896 #CJK UNIFIED IDEOGRAPH
+ {0xE6B6, 0x5A11}, //17897 #CJK UNIFIED IDEOGRAPH
+ {0xE6B7, 0x5A23}, //17898 #CJK UNIFIED IDEOGRAPH
+ {0xE6B8, 0x5A13}, //17899 #CJK UNIFIED IDEOGRAPH
+ {0xE6B9, 0x5A40}, //17900 #CJK UNIFIED IDEOGRAPH
+ {0xE6BA, 0x5A67}, //17901 #CJK UNIFIED IDEOGRAPH
+ {0xE6BB, 0x5A4A}, //17902 #CJK UNIFIED IDEOGRAPH
+ {0xE6BC, 0x5A55}, //17903 #CJK UNIFIED IDEOGRAPH
+ {0xE6BD, 0x5A3C}, //17904 #CJK UNIFIED IDEOGRAPH
+ {0xE6BE, 0x5A62}, //17905 #CJK UNIFIED IDEOGRAPH
+ {0xE6BF, 0x5A75}, //17906 #CJK UNIFIED IDEOGRAPH
+ {0xE6C0, 0x80EC}, //17907 #CJK UNIFIED IDEOGRAPH
+ {0xE6C1, 0x5AAA}, //17908 #CJK UNIFIED IDEOGRAPH
+ {0xE6C2, 0x5A9B}, //17909 #CJK UNIFIED IDEOGRAPH
+ {0xE6C3, 0x5A77}, //17910 #CJK UNIFIED IDEOGRAPH
+ {0xE6C4, 0x5A7A}, //17911 #CJK UNIFIED IDEOGRAPH
+ {0xE6C5, 0x5ABE}, //17912 #CJK UNIFIED IDEOGRAPH
+ {0xE6C6, 0x5AEB}, //17913 #CJK UNIFIED IDEOGRAPH
+ {0xE6C7, 0x5AB2}, //17914 #CJK UNIFIED IDEOGRAPH
+ {0xE6C8, 0x5AD2}, //17915 #CJK UNIFIED IDEOGRAPH
+ {0xE6C9, 0x5AD4}, //17916 #CJK UNIFIED IDEOGRAPH
+ {0xE6CA, 0x5AB8}, //17917 #CJK UNIFIED IDEOGRAPH
+ {0xE6CB, 0x5AE0}, //17918 #CJK UNIFIED IDEOGRAPH
+ {0xE6CC, 0x5AE3}, //17919 #CJK UNIFIED IDEOGRAPH
+ {0xE6CD, 0x5AF1}, //17920 #CJK UNIFIED IDEOGRAPH
+ {0xE6CE, 0x5AD6}, //17921 #CJK UNIFIED IDEOGRAPH
+ {0xE6CF, 0x5AE6}, //17922 #CJK UNIFIED IDEOGRAPH
+ {0xE6D0, 0x5AD8}, //17923 #CJK UNIFIED IDEOGRAPH
+ {0xE6D1, 0x5ADC}, //17924 #CJK UNIFIED IDEOGRAPH
+ {0xE6D2, 0x5B09}, //17925 #CJK UNIFIED IDEOGRAPH
+ {0xE6D3, 0x5B17}, //17926 #CJK UNIFIED IDEOGRAPH
+ {0xE6D4, 0x5B16}, //17927 #CJK UNIFIED IDEOGRAPH
+ {0xE6D5, 0x5B32}, //17928 #CJK UNIFIED IDEOGRAPH
+ {0xE6D6, 0x5B37}, //17929 #CJK UNIFIED IDEOGRAPH
+ {0xE6D7, 0x5B40}, //17930 #CJK UNIFIED IDEOGRAPH
+ {0xE6D8, 0x5C15}, //17931 #CJK UNIFIED IDEOGRAPH
+ {0xE6D9, 0x5C1C}, //17932 #CJK UNIFIED IDEOGRAPH
+ {0xE6DA, 0x5B5A}, //17933 #CJK UNIFIED IDEOGRAPH
+ {0xE6DB, 0x5B65}, //17934 #CJK UNIFIED IDEOGRAPH
+ {0xE6DC, 0x5B73}, //17935 #CJK UNIFIED IDEOGRAPH
+ {0xE6DD, 0x5B51}, //17936 #CJK UNIFIED IDEOGRAPH
+ {0xE6DE, 0x5B53}, //17937 #CJK UNIFIED IDEOGRAPH
+ {0xE6DF, 0x5B62}, //17938 #CJK UNIFIED IDEOGRAPH
+ {0xE6E0, 0x9A75}, //17939 #CJK UNIFIED IDEOGRAPH
+ {0xE6E1, 0x9A77}, //17940 #CJK UNIFIED IDEOGRAPH
+ {0xE6E2, 0x9A78}, //17941 #CJK UNIFIED IDEOGRAPH
+ {0xE6E3, 0x9A7A}, //17942 #CJK UNIFIED IDEOGRAPH
+ {0xE6E4, 0x9A7F}, //17943 #CJK UNIFIED IDEOGRAPH
+ {0xE6E5, 0x9A7D}, //17944 #CJK UNIFIED IDEOGRAPH
+ {0xE6E6, 0x9A80}, //17945 #CJK UNIFIED IDEOGRAPH
+ {0xE6E7, 0x9A81}, //17946 #CJK UNIFIED IDEOGRAPH
+ {0xE6E8, 0x9A85}, //17947 #CJK UNIFIED IDEOGRAPH
+ {0xE6E9, 0x9A88}, //17948 #CJK UNIFIED IDEOGRAPH
+ {0xE6EA, 0x9A8A}, //17949 #CJK UNIFIED IDEOGRAPH
+ {0xE6EB, 0x9A90}, //17950 #CJK UNIFIED IDEOGRAPH
+ {0xE6EC, 0x9A92}, //17951 #CJK UNIFIED IDEOGRAPH
+ {0xE6ED, 0x9A93}, //17952 #CJK UNIFIED IDEOGRAPH
+ {0xE6EE, 0x9A96}, //17953 #CJK UNIFIED IDEOGRAPH
+ {0xE6EF, 0x9A98}, //17954 #CJK UNIFIED IDEOGRAPH
+ {0xE6F0, 0x9A9B}, //17955 #CJK UNIFIED IDEOGRAPH
+ {0xE6F1, 0x9A9C}, //17956 #CJK UNIFIED IDEOGRAPH
+ {0xE6F2, 0x9A9D}, //17957 #CJK UNIFIED IDEOGRAPH
+ {0xE6F3, 0x9A9F}, //17958 #CJK UNIFIED IDEOGRAPH
+ {0xE6F4, 0x9AA0}, //17959 #CJK UNIFIED IDEOGRAPH
+ {0xE6F5, 0x9AA2}, //17960 #CJK UNIFIED IDEOGRAPH
+ {0xE6F6, 0x9AA3}, //17961 #CJK UNIFIED IDEOGRAPH
+ {0xE6F7, 0x9AA5}, //17962 #CJK UNIFIED IDEOGRAPH
+ {0xE6F8, 0x9AA7}, //17963 #CJK UNIFIED IDEOGRAPH
+ {0xE6F9, 0x7E9F}, //17964 #CJK UNIFIED IDEOGRAPH
+ {0xE6FA, 0x7EA1}, //17965 #CJK UNIFIED IDEOGRAPH
+ {0xE6FB, 0x7EA3}, //17966 #CJK UNIFIED IDEOGRAPH
+ {0xE6FC, 0x7EA5}, //17967 #CJK UNIFIED IDEOGRAPH
+ {0xE6FD, 0x7EA8}, //17968 #CJK UNIFIED IDEOGRAPH
+ {0xE6FE, 0x7EA9}, //17969 #CJK UNIFIED IDEOGRAPH
+ {0xE740, 0x93CE}, //17970 #CJK UNIFIED IDEOGRAPH
+ {0xE741, 0x93CF}, //17971 #CJK UNIFIED IDEOGRAPH
+ {0xE742, 0x93D0}, //17972 #CJK UNIFIED IDEOGRAPH
+ {0xE743, 0x93D1}, //17973 #CJK UNIFIED IDEOGRAPH
+ {0xE744, 0x93D2}, //17974 #CJK UNIFIED IDEOGRAPH
+ {0xE745, 0x93D3}, //17975 #CJK UNIFIED IDEOGRAPH
+ {0xE746, 0x93D4}, //17976 #CJK UNIFIED IDEOGRAPH
+ {0xE747, 0x93D5}, //17977 #CJK UNIFIED IDEOGRAPH
+ {0xE748, 0x93D7}, //17978 #CJK UNIFIED IDEOGRAPH
+ {0xE749, 0x93D8}, //17979 #CJK UNIFIED IDEOGRAPH
+ {0xE74A, 0x93D9}, //17980 #CJK UNIFIED IDEOGRAPH
+ {0xE74B, 0x93DA}, //17981 #CJK UNIFIED IDEOGRAPH
+ {0xE74C, 0x93DB}, //17982 #CJK UNIFIED IDEOGRAPH
+ {0xE74D, 0x93DC}, //17983 #CJK UNIFIED IDEOGRAPH
+ {0xE74E, 0x93DD}, //17984 #CJK UNIFIED IDEOGRAPH
+ {0xE74F, 0x93DE}, //17985 #CJK UNIFIED IDEOGRAPH
+ {0xE750, 0x93DF}, //17986 #CJK UNIFIED IDEOGRAPH
+ {0xE751, 0x93E0}, //17987 #CJK UNIFIED IDEOGRAPH
+ {0xE752, 0x93E1}, //17988 #CJK UNIFIED IDEOGRAPH
+ {0xE753, 0x93E2}, //17989 #CJK UNIFIED IDEOGRAPH
+ {0xE754, 0x93E3}, //17990 #CJK UNIFIED IDEOGRAPH
+ {0xE755, 0x93E4}, //17991 #CJK UNIFIED IDEOGRAPH
+ {0xE756, 0x93E5}, //17992 #CJK UNIFIED IDEOGRAPH
+ {0xE757, 0x93E6}, //17993 #CJK UNIFIED IDEOGRAPH
+ {0xE758, 0x93E7}, //17994 #CJK UNIFIED IDEOGRAPH
+ {0xE759, 0x93E8}, //17995 #CJK UNIFIED IDEOGRAPH
+ {0xE75A, 0x93E9}, //17996 #CJK UNIFIED IDEOGRAPH
+ {0xE75B, 0x93EA}, //17997 #CJK UNIFIED IDEOGRAPH
+ {0xE75C, 0x93EB}, //17998 #CJK UNIFIED IDEOGRAPH
+ {0xE75D, 0x93EC}, //17999 #CJK UNIFIED IDEOGRAPH
+ {0xE75E, 0x93ED}, //18000 #CJK UNIFIED IDEOGRAPH
+ {0xE75F, 0x93EE}, //18001 #CJK UNIFIED IDEOGRAPH
+ {0xE760, 0x93EF}, //18002 #CJK UNIFIED IDEOGRAPH
+ {0xE761, 0x93F0}, //18003 #CJK UNIFIED IDEOGRAPH
+ {0xE762, 0x93F1}, //18004 #CJK UNIFIED IDEOGRAPH
+ {0xE763, 0x93F2}, //18005 #CJK UNIFIED IDEOGRAPH
+ {0xE764, 0x93F3}, //18006 #CJK UNIFIED IDEOGRAPH
+ {0xE765, 0x93F4}, //18007 #CJK UNIFIED IDEOGRAPH
+ {0xE766, 0x93F5}, //18008 #CJK UNIFIED IDEOGRAPH
+ {0xE767, 0x93F6}, //18009 #CJK UNIFIED IDEOGRAPH
+ {0xE768, 0x93F7}, //18010 #CJK UNIFIED IDEOGRAPH
+ {0xE769, 0x93F8}, //18011 #CJK UNIFIED IDEOGRAPH
+ {0xE76A, 0x93F9}, //18012 #CJK UNIFIED IDEOGRAPH
+ {0xE76B, 0x93FA}, //18013 #CJK UNIFIED IDEOGRAPH
+ {0xE76C, 0x93FB}, //18014 #CJK UNIFIED IDEOGRAPH
+ {0xE76D, 0x93FC}, //18015 #CJK UNIFIED IDEOGRAPH
+ {0xE76E, 0x93FD}, //18016 #CJK UNIFIED IDEOGRAPH
+ {0xE76F, 0x93FE}, //18017 #CJK UNIFIED IDEOGRAPH
+ {0xE770, 0x93FF}, //18018 #CJK UNIFIED IDEOGRAPH
+ {0xE771, 0x9400}, //18019 #CJK UNIFIED IDEOGRAPH
+ {0xE772, 0x9401}, //18020 #CJK UNIFIED IDEOGRAPH
+ {0xE773, 0x9402}, //18021 #CJK UNIFIED IDEOGRAPH
+ {0xE774, 0x9403}, //18022 #CJK UNIFIED IDEOGRAPH
+ {0xE775, 0x9404}, //18023 #CJK UNIFIED IDEOGRAPH
+ {0xE776, 0x9405}, //18024 #CJK UNIFIED IDEOGRAPH
+ {0xE777, 0x9406}, //18025 #CJK UNIFIED IDEOGRAPH
+ {0xE778, 0x9407}, //18026 #CJK UNIFIED IDEOGRAPH
+ {0xE779, 0x9408}, //18027 #CJK UNIFIED IDEOGRAPH
+ {0xE77A, 0x9409}, //18028 #CJK UNIFIED IDEOGRAPH
+ {0xE77B, 0x940A}, //18029 #CJK UNIFIED IDEOGRAPH
+ {0xE77C, 0x940B}, //18030 #CJK UNIFIED IDEOGRAPH
+ {0xE77D, 0x940C}, //18031 #CJK UNIFIED IDEOGRAPH
+ {0xE77E, 0x940D}, //18032 #CJK UNIFIED IDEOGRAPH
+ {0xE780, 0x940E}, //18033 #CJK UNIFIED IDEOGRAPH
+ {0xE781, 0x940F}, //18034 #CJK UNIFIED IDEOGRAPH
+ {0xE782, 0x9410}, //18035 #CJK UNIFIED IDEOGRAPH
+ {0xE783, 0x9411}, //18036 #CJK UNIFIED IDEOGRAPH
+ {0xE784, 0x9412}, //18037 #CJK UNIFIED IDEOGRAPH
+ {0xE785, 0x9413}, //18038 #CJK UNIFIED IDEOGRAPH
+ {0xE786, 0x9414}, //18039 #CJK UNIFIED IDEOGRAPH
+ {0xE787, 0x9415}, //18040 #CJK UNIFIED IDEOGRAPH
+ {0xE788, 0x9416}, //18041 #CJK UNIFIED IDEOGRAPH
+ {0xE789, 0x9417}, //18042 #CJK UNIFIED IDEOGRAPH
+ {0xE78A, 0x9418}, //18043 #CJK UNIFIED IDEOGRAPH
+ {0xE78B, 0x9419}, //18044 #CJK UNIFIED IDEOGRAPH
+ {0xE78C, 0x941A}, //18045 #CJK UNIFIED IDEOGRAPH
+ {0xE78D, 0x941B}, //18046 #CJK UNIFIED IDEOGRAPH
+ {0xE78E, 0x941C}, //18047 #CJK UNIFIED IDEOGRAPH
+ {0xE78F, 0x941D}, //18048 #CJK UNIFIED IDEOGRAPH
+ {0xE790, 0x941E}, //18049 #CJK UNIFIED IDEOGRAPH
+ {0xE791, 0x941F}, //18050 #CJK UNIFIED IDEOGRAPH
+ {0xE792, 0x9420}, //18051 #CJK UNIFIED IDEOGRAPH
+ {0xE793, 0x9421}, //18052 #CJK UNIFIED IDEOGRAPH
+ {0xE794, 0x9422}, //18053 #CJK UNIFIED IDEOGRAPH
+ {0xE795, 0x9423}, //18054 #CJK UNIFIED IDEOGRAPH
+ {0xE796, 0x9424}, //18055 #CJK UNIFIED IDEOGRAPH
+ {0xE797, 0x9425}, //18056 #CJK UNIFIED IDEOGRAPH
+ {0xE798, 0x9426}, //18057 #CJK UNIFIED IDEOGRAPH
+ {0xE799, 0x9427}, //18058 #CJK UNIFIED IDEOGRAPH
+ {0xE79A, 0x9428}, //18059 #CJK UNIFIED IDEOGRAPH
+ {0xE79B, 0x9429}, //18060 #CJK UNIFIED IDEOGRAPH
+ {0xE79C, 0x942A}, //18061 #CJK UNIFIED IDEOGRAPH
+ {0xE79D, 0x942B}, //18062 #CJK UNIFIED IDEOGRAPH
+ {0xE79E, 0x942C}, //18063 #CJK UNIFIED IDEOGRAPH
+ {0xE79F, 0x942D}, //18064 #CJK UNIFIED IDEOGRAPH
+ {0xE7A0, 0x942E}, //18065 #CJK UNIFIED IDEOGRAPH
+ {0xE7A1, 0x7EAD}, //18066 #CJK UNIFIED IDEOGRAPH
+ {0xE7A2, 0x7EB0}, //18067 #CJK UNIFIED IDEOGRAPH
+ {0xE7A3, 0x7EBE}, //18068 #CJK UNIFIED IDEOGRAPH
+ {0xE7A4, 0x7EC0}, //18069 #CJK UNIFIED IDEOGRAPH
+ {0xE7A5, 0x7EC1}, //18070 #CJK UNIFIED IDEOGRAPH
+ {0xE7A6, 0x7EC2}, //18071 #CJK UNIFIED IDEOGRAPH
+ {0xE7A7, 0x7EC9}, //18072 #CJK UNIFIED IDEOGRAPH
+ {0xE7A8, 0x7ECB}, //18073 #CJK UNIFIED IDEOGRAPH
+ {0xE7A9, 0x7ECC}, //18074 #CJK UNIFIED IDEOGRAPH
+ {0xE7AA, 0x7ED0}, //18075 #CJK UNIFIED IDEOGRAPH
+ {0xE7AB, 0x7ED4}, //18076 #CJK UNIFIED IDEOGRAPH
+ {0xE7AC, 0x7ED7}, //18077 #CJK UNIFIED IDEOGRAPH
+ {0xE7AD, 0x7EDB}, //18078 #CJK UNIFIED IDEOGRAPH
+ {0xE7AE, 0x7EE0}, //18079 #CJK UNIFIED IDEOGRAPH
+ {0xE7AF, 0x7EE1}, //18080 #CJK UNIFIED IDEOGRAPH
+ {0xE7B0, 0x7EE8}, //18081 #CJK UNIFIED IDEOGRAPH
+ {0xE7B1, 0x7EEB}, //18082 #CJK UNIFIED IDEOGRAPH
+ {0xE7B2, 0x7EEE}, //18083 #CJK UNIFIED IDEOGRAPH
+ {0xE7B3, 0x7EEF}, //18084 #CJK UNIFIED IDEOGRAPH
+ {0xE7B4, 0x7EF1}, //18085 #CJK UNIFIED IDEOGRAPH
+ {0xE7B5, 0x7EF2}, //18086 #CJK UNIFIED IDEOGRAPH
+ {0xE7B6, 0x7F0D}, //18087 #CJK UNIFIED IDEOGRAPH
+ {0xE7B7, 0x7EF6}, //18088 #CJK UNIFIED IDEOGRAPH
+ {0xE7B8, 0x7EFA}, //18089 #CJK UNIFIED IDEOGRAPH
+ {0xE7B9, 0x7EFB}, //18090 #CJK UNIFIED IDEOGRAPH
+ {0xE7BA, 0x7EFE}, //18091 #CJK UNIFIED IDEOGRAPH
+ {0xE7BB, 0x7F01}, //18092 #CJK UNIFIED IDEOGRAPH
+ {0xE7BC, 0x7F02}, //18093 #CJK UNIFIED IDEOGRAPH
+ {0xE7BD, 0x7F03}, //18094 #CJK UNIFIED IDEOGRAPH
+ {0xE7BE, 0x7F07}, //18095 #CJK UNIFIED IDEOGRAPH
+ {0xE7BF, 0x7F08}, //18096 #CJK UNIFIED IDEOGRAPH
+ {0xE7C0, 0x7F0B}, //18097 #CJK UNIFIED IDEOGRAPH
+ {0xE7C1, 0x7F0C}, //18098 #CJK UNIFIED IDEOGRAPH
+ {0xE7C2, 0x7F0F}, //18099 #CJK UNIFIED IDEOGRAPH
+ {0xE7C3, 0x7F11}, //18100 #CJK UNIFIED IDEOGRAPH
+ {0xE7C4, 0x7F12}, //18101 #CJK UNIFIED IDEOGRAPH
+ {0xE7C5, 0x7F17}, //18102 #CJK UNIFIED IDEOGRAPH
+ {0xE7C6, 0x7F19}, //18103 #CJK UNIFIED IDEOGRAPH
+ {0xE7C7, 0x7F1C}, //18104 #CJK UNIFIED IDEOGRAPH
+ {0xE7C8, 0x7F1B}, //18105 #CJK UNIFIED IDEOGRAPH
+ {0xE7C9, 0x7F1F}, //18106 #CJK UNIFIED IDEOGRAPH
+ {0xE7CA, 0x7F21}, //18107 #CJK UNIFIED IDEOGRAPH
+ {0xE7CB, 0x7F22}, //18108 #CJK UNIFIED IDEOGRAPH
+ {0xE7CC, 0x7F23}, //18109 #CJK UNIFIED IDEOGRAPH
+ {0xE7CD, 0x7F24}, //18110 #CJK UNIFIED IDEOGRAPH
+ {0xE7CE, 0x7F25}, //18111 #CJK UNIFIED IDEOGRAPH
+ {0xE7CF, 0x7F26}, //18112 #CJK UNIFIED IDEOGRAPH
+ {0xE7D0, 0x7F27}, //18113 #CJK UNIFIED IDEOGRAPH
+ {0xE7D1, 0x7F2A}, //18114 #CJK UNIFIED IDEOGRAPH
+ {0xE7D2, 0x7F2B}, //18115 #CJK UNIFIED IDEOGRAPH
+ {0xE7D3, 0x7F2C}, //18116 #CJK UNIFIED IDEOGRAPH
+ {0xE7D4, 0x7F2D}, //18117 #CJK UNIFIED IDEOGRAPH
+ {0xE7D5, 0x7F2F}, //18118 #CJK UNIFIED IDEOGRAPH
+ {0xE7D6, 0x7F30}, //18119 #CJK UNIFIED IDEOGRAPH
+ {0xE7D7, 0x7F31}, //18120 #CJK UNIFIED IDEOGRAPH
+ {0xE7D8, 0x7F32}, //18121 #CJK UNIFIED IDEOGRAPH
+ {0xE7D9, 0x7F33}, //18122 #CJK UNIFIED IDEOGRAPH
+ {0xE7DA, 0x7F35}, //18123 #CJK UNIFIED IDEOGRAPH
+ {0xE7DB, 0x5E7A}, //18124 #CJK UNIFIED IDEOGRAPH
+ {0xE7DC, 0x757F}, //18125 #CJK UNIFIED IDEOGRAPH
+ {0xE7DD, 0x5DDB}, //18126 #CJK UNIFIED IDEOGRAPH
+ {0xE7DE, 0x753E}, //18127 #CJK UNIFIED IDEOGRAPH
+ {0xE7DF, 0x9095}, //18128 #CJK UNIFIED IDEOGRAPH
+ {0xE7E0, 0x738E}, //18129 #CJK UNIFIED IDEOGRAPH
+ {0xE7E1, 0x7391}, //18130 #CJK UNIFIED IDEOGRAPH
+ {0xE7E2, 0x73AE}, //18131 #CJK UNIFIED IDEOGRAPH
+ {0xE7E3, 0x73A2}, //18132 #CJK UNIFIED IDEOGRAPH
+ {0xE7E4, 0x739F}, //18133 #CJK UNIFIED IDEOGRAPH
+ {0xE7E5, 0x73CF}, //18134 #CJK UNIFIED IDEOGRAPH
+ {0xE7E6, 0x73C2}, //18135 #CJK UNIFIED IDEOGRAPH
+ {0xE7E7, 0x73D1}, //18136 #CJK UNIFIED IDEOGRAPH
+ {0xE7E8, 0x73B7}, //18137 #CJK UNIFIED IDEOGRAPH
+ {0xE7E9, 0x73B3}, //18138 #CJK UNIFIED IDEOGRAPH
+ {0xE7EA, 0x73C0}, //18139 #CJK UNIFIED IDEOGRAPH
+ {0xE7EB, 0x73C9}, //18140 #CJK UNIFIED IDEOGRAPH
+ {0xE7EC, 0x73C8}, //18141 #CJK UNIFIED IDEOGRAPH
+ {0xE7ED, 0x73E5}, //18142 #CJK UNIFIED IDEOGRAPH
+ {0xE7EE, 0x73D9}, //18143 #CJK UNIFIED IDEOGRAPH
+ {0xE7EF, 0x987C}, //18144 #CJK UNIFIED IDEOGRAPH
+ {0xE7F0, 0x740A}, //18145 #CJK UNIFIED IDEOGRAPH
+ {0xE7F1, 0x73E9}, //18146 #CJK UNIFIED IDEOGRAPH
+ {0xE7F2, 0x73E7}, //18147 #CJK UNIFIED IDEOGRAPH
+ {0xE7F3, 0x73DE}, //18148 #CJK UNIFIED IDEOGRAPH
+ {0xE7F4, 0x73BA}, //18149 #CJK UNIFIED IDEOGRAPH
+ {0xE7F5, 0x73F2}, //18150 #CJK UNIFIED IDEOGRAPH
+ {0xE7F6, 0x740F}, //18151 #CJK UNIFIED IDEOGRAPH
+ {0xE7F7, 0x742A}, //18152 #CJK UNIFIED IDEOGRAPH
+ {0xE7F8, 0x745B}, //18153 #CJK UNIFIED IDEOGRAPH
+ {0xE7F9, 0x7426}, //18154 #CJK UNIFIED IDEOGRAPH
+ {0xE7FA, 0x7425}, //18155 #CJK UNIFIED IDEOGRAPH
+ {0xE7FB, 0x7428}, //18156 #CJK UNIFIED IDEOGRAPH
+ {0xE7FC, 0x7430}, //18157 #CJK UNIFIED IDEOGRAPH
+ {0xE7FD, 0x742E}, //18158 #CJK UNIFIED IDEOGRAPH
+ {0xE7FE, 0x742C}, //18159 #CJK UNIFIED IDEOGRAPH
+ {0xE840, 0x942F}, //18160 #CJK UNIFIED IDEOGRAPH
+ {0xE841, 0x9430}, //18161 #CJK UNIFIED IDEOGRAPH
+ {0xE842, 0x9431}, //18162 #CJK UNIFIED IDEOGRAPH
+ {0xE843, 0x9432}, //18163 #CJK UNIFIED IDEOGRAPH
+ {0xE844, 0x9433}, //18164 #CJK UNIFIED IDEOGRAPH
+ {0xE845, 0x9434}, //18165 #CJK UNIFIED IDEOGRAPH
+ {0xE846, 0x9435}, //18166 #CJK UNIFIED IDEOGRAPH
+ {0xE847, 0x9436}, //18167 #CJK UNIFIED IDEOGRAPH
+ {0xE848, 0x9437}, //18168 #CJK UNIFIED IDEOGRAPH
+ {0xE849, 0x9438}, //18169 #CJK UNIFIED IDEOGRAPH
+ {0xE84A, 0x9439}, //18170 #CJK UNIFIED IDEOGRAPH
+ {0xE84B, 0x943A}, //18171 #CJK UNIFIED IDEOGRAPH
+ {0xE84C, 0x943B}, //18172 #CJK UNIFIED IDEOGRAPH
+ {0xE84D, 0x943C}, //18173 #CJK UNIFIED IDEOGRAPH
+ {0xE84E, 0x943D}, //18174 #CJK UNIFIED IDEOGRAPH
+ {0xE84F, 0x943F}, //18175 #CJK UNIFIED IDEOGRAPH
+ {0xE850, 0x9440}, //18176 #CJK UNIFIED IDEOGRAPH
+ {0xE851, 0x9441}, //18177 #CJK UNIFIED IDEOGRAPH
+ {0xE852, 0x9442}, //18178 #CJK UNIFIED IDEOGRAPH
+ {0xE853, 0x9443}, //18179 #CJK UNIFIED IDEOGRAPH
+ {0xE854, 0x9444}, //18180 #CJK UNIFIED IDEOGRAPH
+ {0xE855, 0x9445}, //18181 #CJK UNIFIED IDEOGRAPH
+ {0xE856, 0x9446}, //18182 #CJK UNIFIED IDEOGRAPH
+ {0xE857, 0x9447}, //18183 #CJK UNIFIED IDEOGRAPH
+ {0xE858, 0x9448}, //18184 #CJK UNIFIED IDEOGRAPH
+ {0xE859, 0x9449}, //18185 #CJK UNIFIED IDEOGRAPH
+ {0xE85A, 0x944A}, //18186 #CJK UNIFIED IDEOGRAPH
+ {0xE85B, 0x944B}, //18187 #CJK UNIFIED IDEOGRAPH
+ {0xE85C, 0x944C}, //18188 #CJK UNIFIED IDEOGRAPH
+ {0xE85D, 0x944D}, //18189 #CJK UNIFIED IDEOGRAPH
+ {0xE85E, 0x944E}, //18190 #CJK UNIFIED IDEOGRAPH
+ {0xE85F, 0x944F}, //18191 #CJK UNIFIED IDEOGRAPH
+ {0xE860, 0x9450}, //18192 #CJK UNIFIED IDEOGRAPH
+ {0xE861, 0x9451}, //18193 #CJK UNIFIED IDEOGRAPH
+ {0xE862, 0x9452}, //18194 #CJK UNIFIED IDEOGRAPH
+ {0xE863, 0x9453}, //18195 #CJK UNIFIED IDEOGRAPH
+ {0xE864, 0x9454}, //18196 #CJK UNIFIED IDEOGRAPH
+ {0xE865, 0x9455}, //18197 #CJK UNIFIED IDEOGRAPH
+ {0xE866, 0x9456}, //18198 #CJK UNIFIED IDEOGRAPH
+ {0xE867, 0x9457}, //18199 #CJK UNIFIED IDEOGRAPH
+ {0xE868, 0x9458}, //18200 #CJK UNIFIED IDEOGRAPH
+ {0xE869, 0x9459}, //18201 #CJK UNIFIED IDEOGRAPH
+ {0xE86A, 0x945A}, //18202 #CJK UNIFIED IDEOGRAPH
+ {0xE86B, 0x945B}, //18203 #CJK UNIFIED IDEOGRAPH
+ {0xE86C, 0x945C}, //18204 #CJK UNIFIED IDEOGRAPH
+ {0xE86D, 0x945D}, //18205 #CJK UNIFIED IDEOGRAPH
+ {0xE86E, 0x945E}, //18206 #CJK UNIFIED IDEOGRAPH
+ {0xE86F, 0x945F}, //18207 #CJK UNIFIED IDEOGRAPH
+ {0xE870, 0x9460}, //18208 #CJK UNIFIED IDEOGRAPH
+ {0xE871, 0x9461}, //18209 #CJK UNIFIED IDEOGRAPH
+ {0xE872, 0x9462}, //18210 #CJK UNIFIED IDEOGRAPH
+ {0xE873, 0x9463}, //18211 #CJK UNIFIED IDEOGRAPH
+ {0xE874, 0x9464}, //18212 #CJK UNIFIED IDEOGRAPH
+ {0xE875, 0x9465}, //18213 #CJK UNIFIED IDEOGRAPH
+ {0xE876, 0x9466}, //18214 #CJK UNIFIED IDEOGRAPH
+ {0xE877, 0x9467}, //18215 #CJK UNIFIED IDEOGRAPH
+ {0xE878, 0x9468}, //18216 #CJK UNIFIED IDEOGRAPH
+ {0xE879, 0x9469}, //18217 #CJK UNIFIED IDEOGRAPH
+ {0xE87A, 0x946A}, //18218 #CJK UNIFIED IDEOGRAPH
+ {0xE87B, 0x946C}, //18219 #CJK UNIFIED IDEOGRAPH
+ {0xE87C, 0x946D}, //18220 #CJK UNIFIED IDEOGRAPH
+ {0xE87D, 0x946E}, //18221 #CJK UNIFIED IDEOGRAPH
+ {0xE87E, 0x946F}, //18222 #CJK UNIFIED IDEOGRAPH
+ {0xE880, 0x9470}, //18223 #CJK UNIFIED IDEOGRAPH
+ {0xE881, 0x9471}, //18224 #CJK UNIFIED IDEOGRAPH
+ {0xE882, 0x9472}, //18225 #CJK UNIFIED IDEOGRAPH
+ {0xE883, 0x9473}, //18226 #CJK UNIFIED IDEOGRAPH
+ {0xE884, 0x9474}, //18227 #CJK UNIFIED IDEOGRAPH
+ {0xE885, 0x9475}, //18228 #CJK UNIFIED IDEOGRAPH
+ {0xE886, 0x9476}, //18229 #CJK UNIFIED IDEOGRAPH
+ {0xE887, 0x9477}, //18230 #CJK UNIFIED IDEOGRAPH
+ {0xE888, 0x9478}, //18231 #CJK UNIFIED IDEOGRAPH
+ {0xE889, 0x9479}, //18232 #CJK UNIFIED IDEOGRAPH
+ {0xE88A, 0x947A}, //18233 #CJK UNIFIED IDEOGRAPH
+ {0xE88B, 0x947B}, //18234 #CJK UNIFIED IDEOGRAPH
+ {0xE88C, 0x947C}, //18235 #CJK UNIFIED IDEOGRAPH
+ {0xE88D, 0x947D}, //18236 #CJK UNIFIED IDEOGRAPH
+ {0xE88E, 0x947E}, //18237 #CJK UNIFIED IDEOGRAPH
+ {0xE88F, 0x947F}, //18238 #CJK UNIFIED IDEOGRAPH
+ {0xE890, 0x9480}, //18239 #CJK UNIFIED IDEOGRAPH
+ {0xE891, 0x9481}, //18240 #CJK UNIFIED IDEOGRAPH
+ {0xE892, 0x9482}, //18241 #CJK UNIFIED IDEOGRAPH
+ {0xE893, 0x9483}, //18242 #CJK UNIFIED IDEOGRAPH
+ {0xE894, 0x9484}, //18243 #CJK UNIFIED IDEOGRAPH
+ {0xE895, 0x9491}, //18244 #CJK UNIFIED IDEOGRAPH
+ {0xE896, 0x9496}, //18245 #CJK UNIFIED IDEOGRAPH
+ {0xE897, 0x9498}, //18246 #CJK UNIFIED IDEOGRAPH
+ {0xE898, 0x94C7}, //18247 #CJK UNIFIED IDEOGRAPH
+ {0xE899, 0x94CF}, //18248 #CJK UNIFIED IDEOGRAPH
+ {0xE89A, 0x94D3}, //18249 #CJK UNIFIED IDEOGRAPH
+ {0xE89B, 0x94D4}, //18250 #CJK UNIFIED IDEOGRAPH
+ {0xE89C, 0x94DA}, //18251 #CJK UNIFIED IDEOGRAPH
+ {0xE89D, 0x94E6}, //18252 #CJK UNIFIED IDEOGRAPH
+ {0xE89E, 0x94FB}, //18253 #CJK UNIFIED IDEOGRAPH
+ {0xE89F, 0x951C}, //18254 #CJK UNIFIED IDEOGRAPH
+ {0xE8A0, 0x9520}, //18255 #CJK UNIFIED IDEOGRAPH
+ {0xE8A1, 0x741B}, //18256 #CJK UNIFIED IDEOGRAPH
+ {0xE8A2, 0x741A}, //18257 #CJK UNIFIED IDEOGRAPH
+ {0xE8A3, 0x7441}, //18258 #CJK UNIFIED IDEOGRAPH
+ {0xE8A4, 0x745C}, //18259 #CJK UNIFIED IDEOGRAPH
+ {0xE8A5, 0x7457}, //18260 #CJK UNIFIED IDEOGRAPH
+ {0xE8A6, 0x7455}, //18261 #CJK UNIFIED IDEOGRAPH
+ {0xE8A7, 0x7459}, //18262 #CJK UNIFIED IDEOGRAPH
+ {0xE8A8, 0x7477}, //18263 #CJK UNIFIED IDEOGRAPH
+ {0xE8A9, 0x746D}, //18264 #CJK UNIFIED IDEOGRAPH
+ {0xE8AA, 0x747E}, //18265 #CJK UNIFIED IDEOGRAPH
+ {0xE8AB, 0x749C}, //18266 #CJK UNIFIED IDEOGRAPH
+ {0xE8AC, 0x748E}, //18267 #CJK UNIFIED IDEOGRAPH
+ {0xE8AD, 0x7480}, //18268 #CJK UNIFIED IDEOGRAPH
+ {0xE8AE, 0x7481}, //18269 #CJK UNIFIED IDEOGRAPH
+ {0xE8AF, 0x7487}, //18270 #CJK UNIFIED IDEOGRAPH
+ {0xE8B0, 0x748B}, //18271 #CJK UNIFIED IDEOGRAPH
+ {0xE8B1, 0x749E}, //18272 #CJK UNIFIED IDEOGRAPH
+ {0xE8B2, 0x74A8}, //18273 #CJK UNIFIED IDEOGRAPH
+ {0xE8B3, 0x74A9}, //18274 #CJK UNIFIED IDEOGRAPH
+ {0xE8B4, 0x7490}, //18275 #CJK UNIFIED IDEOGRAPH
+ {0xE8B5, 0x74A7}, //18276 #CJK UNIFIED IDEOGRAPH
+ {0xE8B6, 0x74D2}, //18277 #CJK UNIFIED IDEOGRAPH
+ {0xE8B7, 0x74BA}, //18278 #CJK UNIFIED IDEOGRAPH
+ {0xE8B8, 0x97EA}, //18279 #CJK UNIFIED IDEOGRAPH
+ {0xE8B9, 0x97EB}, //18280 #CJK UNIFIED IDEOGRAPH
+ {0xE8BA, 0x97EC}, //18281 #CJK UNIFIED IDEOGRAPH
+ {0xE8BB, 0x674C}, //18282 #CJK UNIFIED IDEOGRAPH
+ {0xE8BC, 0x6753}, //18283 #CJK UNIFIED IDEOGRAPH
+ {0xE8BD, 0x675E}, //18284 #CJK UNIFIED IDEOGRAPH
+ {0xE8BE, 0x6748}, //18285 #CJK UNIFIED IDEOGRAPH
+ {0xE8BF, 0x6769}, //18286 #CJK UNIFIED IDEOGRAPH
+ {0xE8C0, 0x67A5}, //18287 #CJK UNIFIED IDEOGRAPH
+ {0xE8C1, 0x6787}, //18288 #CJK UNIFIED IDEOGRAPH
+ {0xE8C2, 0x676A}, //18289 #CJK UNIFIED IDEOGRAPH
+ {0xE8C3, 0x6773}, //18290 #CJK UNIFIED IDEOGRAPH
+ {0xE8C4, 0x6798}, //18291 #CJK UNIFIED IDEOGRAPH
+ {0xE8C5, 0x67A7}, //18292 #CJK UNIFIED IDEOGRAPH
+ {0xE8C6, 0x6775}, //18293 #CJK UNIFIED IDEOGRAPH
+ {0xE8C7, 0x67A8}, //18294 #CJK UNIFIED IDEOGRAPH
+ {0xE8C8, 0x679E}, //18295 #CJK UNIFIED IDEOGRAPH
+ {0xE8C9, 0x67AD}, //18296 #CJK UNIFIED IDEOGRAPH
+ {0xE8CA, 0x678B}, //18297 #CJK UNIFIED IDEOGRAPH
+ {0xE8CB, 0x6777}, //18298 #CJK UNIFIED IDEOGRAPH
+ {0xE8CC, 0x677C}, //18299 #CJK UNIFIED IDEOGRAPH
+ {0xE8CD, 0x67F0}, //18300 #CJK UNIFIED IDEOGRAPH
+ {0xE8CE, 0x6809}, //18301 #CJK UNIFIED IDEOGRAPH
+ {0xE8CF, 0x67D8}, //18302 #CJK UNIFIED IDEOGRAPH
+ {0xE8D0, 0x680A}, //18303 #CJK UNIFIED IDEOGRAPH
+ {0xE8D1, 0x67E9}, //18304 #CJK UNIFIED IDEOGRAPH
+ {0xE8D2, 0x67B0}, //18305 #CJK UNIFIED IDEOGRAPH
+ {0xE8D3, 0x680C}, //18306 #CJK UNIFIED IDEOGRAPH
+ {0xE8D4, 0x67D9}, //18307 #CJK UNIFIED IDEOGRAPH
+ {0xE8D5, 0x67B5}, //18308 #CJK UNIFIED IDEOGRAPH
+ {0xE8D6, 0x67DA}, //18309 #CJK UNIFIED IDEOGRAPH
+ {0xE8D7, 0x67B3}, //18310 #CJK UNIFIED IDEOGRAPH
+ {0xE8D8, 0x67DD}, //18311 #CJK UNIFIED IDEOGRAPH
+ {0xE8D9, 0x6800}, //18312 #CJK UNIFIED IDEOGRAPH
+ {0xE8DA, 0x67C3}, //18313 #CJK UNIFIED IDEOGRAPH
+ {0xE8DB, 0x67B8}, //18314 #CJK UNIFIED IDEOGRAPH
+ {0xE8DC, 0x67E2}, //18315 #CJK UNIFIED IDEOGRAPH
+ {0xE8DD, 0x680E}, //18316 #CJK UNIFIED IDEOGRAPH
+ {0xE8DE, 0x67C1}, //18317 #CJK UNIFIED IDEOGRAPH
+ {0xE8DF, 0x67FD}, //18318 #CJK UNIFIED IDEOGRAPH
+ {0xE8E0, 0x6832}, //18319 #CJK UNIFIED IDEOGRAPH
+ {0xE8E1, 0x6833}, //18320 #CJK UNIFIED IDEOGRAPH
+ {0xE8E2, 0x6860}, //18321 #CJK UNIFIED IDEOGRAPH
+ {0xE8E3, 0x6861}, //18322 #CJK UNIFIED IDEOGRAPH
+ {0xE8E4, 0x684E}, //18323 #CJK UNIFIED IDEOGRAPH
+ {0xE8E5, 0x6862}, //18324 #CJK UNIFIED IDEOGRAPH
+ {0xE8E6, 0x6844}, //18325 #CJK UNIFIED IDEOGRAPH
+ {0xE8E7, 0x6864}, //18326 #CJK UNIFIED IDEOGRAPH
+ {0xE8E8, 0x6883}, //18327 #CJK UNIFIED IDEOGRAPH
+ {0xE8E9, 0x681D}, //18328 #CJK UNIFIED IDEOGRAPH
+ {0xE8EA, 0x6855}, //18329 #CJK UNIFIED IDEOGRAPH
+ {0xE8EB, 0x6866}, //18330 #CJK UNIFIED IDEOGRAPH
+ {0xE8EC, 0x6841}, //18331 #CJK UNIFIED IDEOGRAPH
+ {0xE8ED, 0x6867}, //18332 #CJK UNIFIED IDEOGRAPH
+ {0xE8EE, 0x6840}, //18333 #CJK UNIFIED IDEOGRAPH
+ {0xE8EF, 0x683E}, //18334 #CJK UNIFIED IDEOGRAPH
+ {0xE8F0, 0x684A}, //18335 #CJK UNIFIED IDEOGRAPH
+ {0xE8F1, 0x6849}, //18336 #CJK UNIFIED IDEOGRAPH
+ {0xE8F2, 0x6829}, //18337 #CJK UNIFIED IDEOGRAPH
+ {0xE8F3, 0x68B5}, //18338 #CJK UNIFIED IDEOGRAPH
+ {0xE8F4, 0x688F}, //18339 #CJK UNIFIED IDEOGRAPH
+ {0xE8F5, 0x6874}, //18340 #CJK UNIFIED IDEOGRAPH
+ {0xE8F6, 0x6877}, //18341 #CJK UNIFIED IDEOGRAPH
+ {0xE8F7, 0x6893}, //18342 #CJK UNIFIED IDEOGRAPH
+ {0xE8F8, 0x686B}, //18343 #CJK UNIFIED IDEOGRAPH
+ {0xE8F9, 0x68C2}, //18344 #CJK UNIFIED IDEOGRAPH
+ {0xE8FA, 0x696E}, //18345 #CJK UNIFIED IDEOGRAPH
+ {0xE8FB, 0x68FC}, //18346 #CJK UNIFIED IDEOGRAPH
+ {0xE8FC, 0x691F}, //18347 #CJK UNIFIED IDEOGRAPH
+ {0xE8FD, 0x6920}, //18348 #CJK UNIFIED IDEOGRAPH
+ {0xE8FE, 0x68F9}, //18349 #CJK UNIFIED IDEOGRAPH
+ {0xE940, 0x9527}, //18350 #CJK UNIFIED IDEOGRAPH
+ {0xE941, 0x9533}, //18351 #CJK UNIFIED IDEOGRAPH
+ {0xE942, 0x953D}, //18352 #CJK UNIFIED IDEOGRAPH
+ {0xE943, 0x9543}, //18353 #CJK UNIFIED IDEOGRAPH
+ {0xE944, 0x9548}, //18354 #CJK UNIFIED IDEOGRAPH
+ {0xE945, 0x954B}, //18355 #CJK UNIFIED IDEOGRAPH
+ {0xE946, 0x9555}, //18356 #CJK UNIFIED IDEOGRAPH
+ {0xE947, 0x955A}, //18357 #CJK UNIFIED IDEOGRAPH
+ {0xE948, 0x9560}, //18358 #CJK UNIFIED IDEOGRAPH
+ {0xE949, 0x956E}, //18359 #CJK UNIFIED IDEOGRAPH
+ {0xE94A, 0x9574}, //18360 #CJK UNIFIED IDEOGRAPH
+ {0xE94B, 0x9575}, //18361 #CJK UNIFIED IDEOGRAPH
+ {0xE94C, 0x9577}, //18362 #CJK UNIFIED IDEOGRAPH
+ {0xE94D, 0x9578}, //18363 #CJK UNIFIED IDEOGRAPH
+ {0xE94E, 0x9579}, //18364 #CJK UNIFIED IDEOGRAPH
+ {0xE94F, 0x957A}, //18365 #CJK UNIFIED IDEOGRAPH
+ {0xE950, 0x957B}, //18366 #CJK UNIFIED IDEOGRAPH
+ {0xE951, 0x957C}, //18367 #CJK UNIFIED IDEOGRAPH
+ {0xE952, 0x957D}, //18368 #CJK UNIFIED IDEOGRAPH
+ {0xE953, 0x957E}, //18369 #CJK UNIFIED IDEOGRAPH
+ {0xE954, 0x9580}, //18370 #CJK UNIFIED IDEOGRAPH
+ {0xE955, 0x9581}, //18371 #CJK UNIFIED IDEOGRAPH
+ {0xE956, 0x9582}, //18372 #CJK UNIFIED IDEOGRAPH
+ {0xE957, 0x9583}, //18373 #CJK UNIFIED IDEOGRAPH
+ {0xE958, 0x9584}, //18374 #CJK UNIFIED IDEOGRAPH
+ {0xE959, 0x9585}, //18375 #CJK UNIFIED IDEOGRAPH
+ {0xE95A, 0x9586}, //18376 #CJK UNIFIED IDEOGRAPH
+ {0xE95B, 0x9587}, //18377 #CJK UNIFIED IDEOGRAPH
+ {0xE95C, 0x9588}, //18378 #CJK UNIFIED IDEOGRAPH
+ {0xE95D, 0x9589}, //18379 #CJK UNIFIED IDEOGRAPH
+ {0xE95E, 0x958A}, //18380 #CJK UNIFIED IDEOGRAPH
+ {0xE95F, 0x958B}, //18381 #CJK UNIFIED IDEOGRAPH
+ {0xE960, 0x958C}, //18382 #CJK UNIFIED IDEOGRAPH
+ {0xE961, 0x958D}, //18383 #CJK UNIFIED IDEOGRAPH
+ {0xE962, 0x958E}, //18384 #CJK UNIFIED IDEOGRAPH
+ {0xE963, 0x958F}, //18385 #CJK UNIFIED IDEOGRAPH
+ {0xE964, 0x9590}, //18386 #CJK UNIFIED IDEOGRAPH
+ {0xE965, 0x9591}, //18387 #CJK UNIFIED IDEOGRAPH
+ {0xE966, 0x9592}, //18388 #CJK UNIFIED IDEOGRAPH
+ {0xE967, 0x9593}, //18389 #CJK UNIFIED IDEOGRAPH
+ {0xE968, 0x9594}, //18390 #CJK UNIFIED IDEOGRAPH
+ {0xE969, 0x9595}, //18391 #CJK UNIFIED IDEOGRAPH
+ {0xE96A, 0x9596}, //18392 #CJK UNIFIED IDEOGRAPH
+ {0xE96B, 0x9597}, //18393 #CJK UNIFIED IDEOGRAPH
+ {0xE96C, 0x9598}, //18394 #CJK UNIFIED IDEOGRAPH
+ {0xE96D, 0x9599}, //18395 #CJK UNIFIED IDEOGRAPH
+ {0xE96E, 0x959A}, //18396 #CJK UNIFIED IDEOGRAPH
+ {0xE96F, 0x959B}, //18397 #CJK UNIFIED IDEOGRAPH
+ {0xE970, 0x959C}, //18398 #CJK UNIFIED IDEOGRAPH
+ {0xE971, 0x959D}, //18399 #CJK UNIFIED IDEOGRAPH
+ {0xE972, 0x959E}, //18400 #CJK UNIFIED IDEOGRAPH
+ {0xE973, 0x959F}, //18401 #CJK UNIFIED IDEOGRAPH
+ {0xE974, 0x95A0}, //18402 #CJK UNIFIED IDEOGRAPH
+ {0xE975, 0x95A1}, //18403 #CJK UNIFIED IDEOGRAPH
+ {0xE976, 0x95A2}, //18404 #CJK UNIFIED IDEOGRAPH
+ {0xE977, 0x95A3}, //18405 #CJK UNIFIED IDEOGRAPH
+ {0xE978, 0x95A4}, //18406 #CJK UNIFIED IDEOGRAPH
+ {0xE979, 0x95A5}, //18407 #CJK UNIFIED IDEOGRAPH
+ {0xE97A, 0x95A6}, //18408 #CJK UNIFIED IDEOGRAPH
+ {0xE97B, 0x95A7}, //18409 #CJK UNIFIED IDEOGRAPH
+ {0xE97C, 0x95A8}, //18410 #CJK UNIFIED IDEOGRAPH
+ {0xE97D, 0x95A9}, //18411 #CJK UNIFIED IDEOGRAPH
+ {0xE97E, 0x95AA}, //18412 #CJK UNIFIED IDEOGRAPH
+ {0xE980, 0x95AB}, //18413 #CJK UNIFIED IDEOGRAPH
+ {0xE981, 0x95AC}, //18414 #CJK UNIFIED IDEOGRAPH
+ {0xE982, 0x95AD}, //18415 #CJK UNIFIED IDEOGRAPH
+ {0xE983, 0x95AE}, //18416 #CJK UNIFIED IDEOGRAPH
+ {0xE984, 0x95AF}, //18417 #CJK UNIFIED IDEOGRAPH
+ {0xE985, 0x95B0}, //18418 #CJK UNIFIED IDEOGRAPH
+ {0xE986, 0x95B1}, //18419 #CJK UNIFIED IDEOGRAPH
+ {0xE987, 0x95B2}, //18420 #CJK UNIFIED IDEOGRAPH
+ {0xE988, 0x95B3}, //18421 #CJK UNIFIED IDEOGRAPH
+ {0xE989, 0x95B4}, //18422 #CJK UNIFIED IDEOGRAPH
+ {0xE98A, 0x95B5}, //18423 #CJK UNIFIED IDEOGRAPH
+ {0xE98B, 0x95B6}, //18424 #CJK UNIFIED IDEOGRAPH
+ {0xE98C, 0x95B7}, //18425 #CJK UNIFIED IDEOGRAPH
+ {0xE98D, 0x95B8}, //18426 #CJK UNIFIED IDEOGRAPH
+ {0xE98E, 0x95B9}, //18427 #CJK UNIFIED IDEOGRAPH
+ {0xE98F, 0x95BA}, //18428 #CJK UNIFIED IDEOGRAPH
+ {0xE990, 0x95BB}, //18429 #CJK UNIFIED IDEOGRAPH
+ {0xE991, 0x95BC}, //18430 #CJK UNIFIED IDEOGRAPH
+ {0xE992, 0x95BD}, //18431 #CJK UNIFIED IDEOGRAPH
+ {0xE993, 0x95BE}, //18432 #CJK UNIFIED IDEOGRAPH
+ {0xE994, 0x95BF}, //18433 #CJK UNIFIED IDEOGRAPH
+ {0xE995, 0x95C0}, //18434 #CJK UNIFIED IDEOGRAPH
+ {0xE996, 0x95C1}, //18435 #CJK UNIFIED IDEOGRAPH
+ {0xE997, 0x95C2}, //18436 #CJK UNIFIED IDEOGRAPH
+ {0xE998, 0x95C3}, //18437 #CJK UNIFIED IDEOGRAPH
+ {0xE999, 0x95C4}, //18438 #CJK UNIFIED IDEOGRAPH
+ {0xE99A, 0x95C5}, //18439 #CJK UNIFIED IDEOGRAPH
+ {0xE99B, 0x95C6}, //18440 #CJK UNIFIED IDEOGRAPH
+ {0xE99C, 0x95C7}, //18441 #CJK UNIFIED IDEOGRAPH
+ {0xE99D, 0x95C8}, //18442 #CJK UNIFIED IDEOGRAPH
+ {0xE99E, 0x95C9}, //18443 #CJK UNIFIED IDEOGRAPH
+ {0xE99F, 0x95CA}, //18444 #CJK UNIFIED IDEOGRAPH
+ {0xE9A0, 0x95CB}, //18445 #CJK UNIFIED IDEOGRAPH
+ {0xE9A1, 0x6924}, //18446 #CJK UNIFIED IDEOGRAPH
+ {0xE9A2, 0x68F0}, //18447 #CJK UNIFIED IDEOGRAPH
+ {0xE9A3, 0x690B}, //18448 #CJK UNIFIED IDEOGRAPH
+ {0xE9A4, 0x6901}, //18449 #CJK UNIFIED IDEOGRAPH
+ {0xE9A5, 0x6957}, //18450 #CJK UNIFIED IDEOGRAPH
+ {0xE9A6, 0x68E3}, //18451 #CJK UNIFIED IDEOGRAPH
+ {0xE9A7, 0x6910}, //18452 #CJK UNIFIED IDEOGRAPH
+ {0xE9A8, 0x6971}, //18453 #CJK UNIFIED IDEOGRAPH
+ {0xE9A9, 0x6939}, //18454 #CJK UNIFIED IDEOGRAPH
+ {0xE9AA, 0x6960}, //18455 #CJK UNIFIED IDEOGRAPH
+ {0xE9AB, 0x6942}, //18456 #CJK UNIFIED IDEOGRAPH
+ {0xE9AC, 0x695D}, //18457 #CJK UNIFIED IDEOGRAPH
+ {0xE9AD, 0x6984}, //18458 #CJK UNIFIED IDEOGRAPH
+ {0xE9AE, 0x696B}, //18459 #CJK UNIFIED IDEOGRAPH
+ {0xE9AF, 0x6980}, //18460 #CJK UNIFIED IDEOGRAPH
+ {0xE9B0, 0x6998}, //18461 #CJK UNIFIED IDEOGRAPH
+ {0xE9B1, 0x6978}, //18462 #CJK UNIFIED IDEOGRAPH
+ {0xE9B2, 0x6934}, //18463 #CJK UNIFIED IDEOGRAPH
+ {0xE9B3, 0x69CC}, //18464 #CJK UNIFIED IDEOGRAPH
+ {0xE9B4, 0x6987}, //18465 #CJK UNIFIED IDEOGRAPH
+ {0xE9B5, 0x6988}, //18466 #CJK UNIFIED IDEOGRAPH
+ {0xE9B6, 0x69CE}, //18467 #CJK UNIFIED IDEOGRAPH
+ {0xE9B7, 0x6989}, //18468 #CJK UNIFIED IDEOGRAPH
+ {0xE9B8, 0x6966}, //18469 #CJK UNIFIED IDEOGRAPH
+ {0xE9B9, 0x6963}, //18470 #CJK UNIFIED IDEOGRAPH
+ {0xE9BA, 0x6979}, //18471 #CJK UNIFIED IDEOGRAPH
+ {0xE9BB, 0x699B}, //18472 #CJK UNIFIED IDEOGRAPH
+ {0xE9BC, 0x69A7}, //18473 #CJK UNIFIED IDEOGRAPH
+ {0xE9BD, 0x69BB}, //18474 #CJK UNIFIED IDEOGRAPH
+ {0xE9BE, 0x69AB}, //18475 #CJK UNIFIED IDEOGRAPH
+ {0xE9BF, 0x69AD}, //18476 #CJK UNIFIED IDEOGRAPH
+ {0xE9C0, 0x69D4}, //18477 #CJK UNIFIED IDEOGRAPH
+ {0xE9C1, 0x69B1}, //18478 #CJK UNIFIED IDEOGRAPH
+ {0xE9C2, 0x69C1}, //18479 #CJK UNIFIED IDEOGRAPH
+ {0xE9C3, 0x69CA}, //18480 #CJK UNIFIED IDEOGRAPH
+ {0xE9C4, 0x69DF}, //18481 #CJK UNIFIED IDEOGRAPH
+ {0xE9C5, 0x6995}, //18482 #CJK UNIFIED IDEOGRAPH
+ {0xE9C6, 0x69E0}, //18483 #CJK UNIFIED IDEOGRAPH
+ {0xE9C7, 0x698D}, //18484 #CJK UNIFIED IDEOGRAPH
+ {0xE9C8, 0x69FF}, //18485 #CJK UNIFIED IDEOGRAPH
+ {0xE9C9, 0x6A2F}, //18486 #CJK UNIFIED IDEOGRAPH
+ {0xE9CA, 0x69ED}, //18487 #CJK UNIFIED IDEOGRAPH
+ {0xE9CB, 0x6A17}, //18488 #CJK UNIFIED IDEOGRAPH
+ {0xE9CC, 0x6A18}, //18489 #CJK UNIFIED IDEOGRAPH
+ {0xE9CD, 0x6A65}, //18490 #CJK UNIFIED IDEOGRAPH
+ {0xE9CE, 0x69F2}, //18491 #CJK UNIFIED IDEOGRAPH
+ {0xE9CF, 0x6A44}, //18492 #CJK UNIFIED IDEOGRAPH
+ {0xE9D0, 0x6A3E}, //18493 #CJK UNIFIED IDEOGRAPH
+ {0xE9D1, 0x6AA0}, //18494 #CJK UNIFIED IDEOGRAPH
+ {0xE9D2, 0x6A50}, //18495 #CJK UNIFIED IDEOGRAPH
+ {0xE9D3, 0x6A5B}, //18496 #CJK UNIFIED IDEOGRAPH
+ {0xE9D4, 0x6A35}, //18497 #CJK UNIFIED IDEOGRAPH
+ {0xE9D5, 0x6A8E}, //18498 #CJK UNIFIED IDEOGRAPH
+ {0xE9D6, 0x6A79}, //18499 #CJK UNIFIED IDEOGRAPH
+ {0xE9D7, 0x6A3D}, //18500 #CJK UNIFIED IDEOGRAPH
+ {0xE9D8, 0x6A28}, //18501 #CJK UNIFIED IDEOGRAPH
+ {0xE9D9, 0x6A58}, //18502 #CJK UNIFIED IDEOGRAPH
+ {0xE9DA, 0x6A7C}, //18503 #CJK UNIFIED IDEOGRAPH
+ {0xE9DB, 0x6A91}, //18504 #CJK UNIFIED IDEOGRAPH
+ {0xE9DC, 0x6A90}, //18505 #CJK UNIFIED IDEOGRAPH
+ {0xE9DD, 0x6AA9}, //18506 #CJK UNIFIED IDEOGRAPH
+ {0xE9DE, 0x6A97}, //18507 #CJK UNIFIED IDEOGRAPH
+ {0xE9DF, 0x6AAB}, //18508 #CJK UNIFIED IDEOGRAPH
+ {0xE9E0, 0x7337}, //18509 #CJK UNIFIED IDEOGRAPH
+ {0xE9E1, 0x7352}, //18510 #CJK UNIFIED IDEOGRAPH
+ {0xE9E2, 0x6B81}, //18511 #CJK UNIFIED IDEOGRAPH
+ {0xE9E3, 0x6B82}, //18512 #CJK UNIFIED IDEOGRAPH
+ {0xE9E4, 0x6B87}, //18513 #CJK UNIFIED IDEOGRAPH
+ {0xE9E5, 0x6B84}, //18514 #CJK UNIFIED IDEOGRAPH
+ {0xE9E6, 0x6B92}, //18515 #CJK UNIFIED IDEOGRAPH
+ {0xE9E7, 0x6B93}, //18516 #CJK UNIFIED IDEOGRAPH
+ {0xE9E8, 0x6B8D}, //18517 #CJK UNIFIED IDEOGRAPH
+ {0xE9E9, 0x6B9A}, //18518 #CJK UNIFIED IDEOGRAPH
+ {0xE9EA, 0x6B9B}, //18519 #CJK UNIFIED IDEOGRAPH
+ {0xE9EB, 0x6BA1}, //18520 #CJK UNIFIED IDEOGRAPH
+ {0xE9EC, 0x6BAA}, //18521 #CJK UNIFIED IDEOGRAPH
+ {0xE9ED, 0x8F6B}, //18522 #CJK UNIFIED IDEOGRAPH
+ {0xE9EE, 0x8F6D}, //18523 #CJK UNIFIED IDEOGRAPH
+ {0xE9EF, 0x8F71}, //18524 #CJK UNIFIED IDEOGRAPH
+ {0xE9F0, 0x8F72}, //18525 #CJK UNIFIED IDEOGRAPH
+ {0xE9F1, 0x8F73}, //18526 #CJK UNIFIED IDEOGRAPH
+ {0xE9F2, 0x8F75}, //18527 #CJK UNIFIED IDEOGRAPH
+ {0xE9F3, 0x8F76}, //18528 #CJK UNIFIED IDEOGRAPH
+ {0xE9F4, 0x8F78}, //18529 #CJK UNIFIED IDEOGRAPH
+ {0xE9F5, 0x8F77}, //18530 #CJK UNIFIED IDEOGRAPH
+ {0xE9F6, 0x8F79}, //18531 #CJK UNIFIED IDEOGRAPH
+ {0xE9F7, 0x8F7A}, //18532 #CJK UNIFIED IDEOGRAPH
+ {0xE9F8, 0x8F7C}, //18533 #CJK UNIFIED IDEOGRAPH
+ {0xE9F9, 0x8F7E}, //18534 #CJK UNIFIED IDEOGRAPH
+ {0xE9FA, 0x8F81}, //18535 #CJK UNIFIED IDEOGRAPH
+ {0xE9FB, 0x8F82}, //18536 #CJK UNIFIED IDEOGRAPH
+ {0xE9FC, 0x8F84}, //18537 #CJK UNIFIED IDEOGRAPH
+ {0xE9FD, 0x8F87}, //18538 #CJK UNIFIED IDEOGRAPH
+ {0xE9FE, 0x8F8B}, //18539 #CJK UNIFIED IDEOGRAPH
+ {0xEA40, 0x95CC}, //18540 #CJK UNIFIED IDEOGRAPH
+ {0xEA41, 0x95CD}, //18541 #CJK UNIFIED IDEOGRAPH
+ {0xEA42, 0x95CE}, //18542 #CJK UNIFIED IDEOGRAPH
+ {0xEA43, 0x95CF}, //18543 #CJK UNIFIED IDEOGRAPH
+ {0xEA44, 0x95D0}, //18544 #CJK UNIFIED IDEOGRAPH
+ {0xEA45, 0x95D1}, //18545 #CJK UNIFIED IDEOGRAPH
+ {0xEA46, 0x95D2}, //18546 #CJK UNIFIED IDEOGRAPH
+ {0xEA47, 0x95D3}, //18547 #CJK UNIFIED IDEOGRAPH
+ {0xEA48, 0x95D4}, //18548 #CJK UNIFIED IDEOGRAPH
+ {0xEA49, 0x95D5}, //18549 #CJK UNIFIED IDEOGRAPH
+ {0xEA4A, 0x95D6}, //18550 #CJK UNIFIED IDEOGRAPH
+ {0xEA4B, 0x95D7}, //18551 #CJK UNIFIED IDEOGRAPH
+ {0xEA4C, 0x95D8}, //18552 #CJK UNIFIED IDEOGRAPH
+ {0xEA4D, 0x95D9}, //18553 #CJK UNIFIED IDEOGRAPH
+ {0xEA4E, 0x95DA}, //18554 #CJK UNIFIED IDEOGRAPH
+ {0xEA4F, 0x95DB}, //18555 #CJK UNIFIED IDEOGRAPH
+ {0xEA50, 0x95DC}, //18556 #CJK UNIFIED IDEOGRAPH
+ {0xEA51, 0x95DD}, //18557 #CJK UNIFIED IDEOGRAPH
+ {0xEA52, 0x95DE}, //18558 #CJK UNIFIED IDEOGRAPH
+ {0xEA53, 0x95DF}, //18559 #CJK UNIFIED IDEOGRAPH
+ {0xEA54, 0x95E0}, //18560 #CJK UNIFIED IDEOGRAPH
+ {0xEA55, 0x95E1}, //18561 #CJK UNIFIED IDEOGRAPH
+ {0xEA56, 0x95E2}, //18562 #CJK UNIFIED IDEOGRAPH
+ {0xEA57, 0x95E3}, //18563 #CJK UNIFIED IDEOGRAPH
+ {0xEA58, 0x95E4}, //18564 #CJK UNIFIED IDEOGRAPH
+ {0xEA59, 0x95E5}, //18565 #CJK UNIFIED IDEOGRAPH
+ {0xEA5A, 0x95E6}, //18566 #CJK UNIFIED IDEOGRAPH
+ {0xEA5B, 0x95E7}, //18567 #CJK UNIFIED IDEOGRAPH
+ {0xEA5C, 0x95EC}, //18568 #CJK UNIFIED IDEOGRAPH
+ {0xEA5D, 0x95FF}, //18569 #CJK UNIFIED IDEOGRAPH
+ {0xEA5E, 0x9607}, //18570 #CJK UNIFIED IDEOGRAPH
+ {0xEA5F, 0x9613}, //18571 #CJK UNIFIED IDEOGRAPH
+ {0xEA60, 0x9618}, //18572 #CJK UNIFIED IDEOGRAPH
+ {0xEA61, 0x961B}, //18573 #CJK UNIFIED IDEOGRAPH
+ {0xEA62, 0x961E}, //18574 #CJK UNIFIED IDEOGRAPH
+ {0xEA63, 0x9620}, //18575 #CJK UNIFIED IDEOGRAPH
+ {0xEA64, 0x9623}, //18576 #CJK UNIFIED IDEOGRAPH
+ {0xEA65, 0x9624}, //18577 #CJK UNIFIED IDEOGRAPH
+ {0xEA66, 0x9625}, //18578 #CJK UNIFIED IDEOGRAPH
+ {0xEA67, 0x9626}, //18579 #CJK UNIFIED IDEOGRAPH
+ {0xEA68, 0x9627}, //18580 #CJK UNIFIED IDEOGRAPH
+ {0xEA69, 0x9628}, //18581 #CJK UNIFIED IDEOGRAPH
+ {0xEA6A, 0x9629}, //18582 #CJK UNIFIED IDEOGRAPH
+ {0xEA6B, 0x962B}, //18583 #CJK UNIFIED IDEOGRAPH
+ {0xEA6C, 0x962C}, //18584 #CJK UNIFIED IDEOGRAPH
+ {0xEA6D, 0x962D}, //18585 #CJK UNIFIED IDEOGRAPH
+ {0xEA6E, 0x962F}, //18586 #CJK UNIFIED IDEOGRAPH
+ {0xEA6F, 0x9630}, //18587 #CJK UNIFIED IDEOGRAPH
+ {0xEA70, 0x9637}, //18588 #CJK UNIFIED IDEOGRAPH
+ {0xEA71, 0x9638}, //18589 #CJK UNIFIED IDEOGRAPH
+ {0xEA72, 0x9639}, //18590 #CJK UNIFIED IDEOGRAPH
+ {0xEA73, 0x963A}, //18591 #CJK UNIFIED IDEOGRAPH
+ {0xEA74, 0x963E}, //18592 #CJK UNIFIED IDEOGRAPH
+ {0xEA75, 0x9641}, //18593 #CJK UNIFIED IDEOGRAPH
+ {0xEA76, 0x9643}, //18594 #CJK UNIFIED IDEOGRAPH
+ {0xEA77, 0x964A}, //18595 #CJK UNIFIED IDEOGRAPH
+ {0xEA78, 0x964E}, //18596 #CJK UNIFIED IDEOGRAPH
+ {0xEA79, 0x964F}, //18597 #CJK UNIFIED IDEOGRAPH
+ {0xEA7A, 0x9651}, //18598 #CJK UNIFIED IDEOGRAPH
+ {0xEA7B, 0x9652}, //18599 #CJK UNIFIED IDEOGRAPH
+ {0xEA7C, 0x9653}, //18600 #CJK UNIFIED IDEOGRAPH
+ {0xEA7D, 0x9656}, //18601 #CJK UNIFIED IDEOGRAPH
+ {0xEA7E, 0x9657}, //18602 #CJK UNIFIED IDEOGRAPH
+ {0xEA80, 0x9658}, //18603 #CJK UNIFIED IDEOGRAPH
+ {0xEA81, 0x9659}, //18604 #CJK UNIFIED IDEOGRAPH
+ {0xEA82, 0x965A}, //18605 #CJK UNIFIED IDEOGRAPH
+ {0xEA83, 0x965C}, //18606 #CJK UNIFIED IDEOGRAPH
+ {0xEA84, 0x965D}, //18607 #CJK UNIFIED IDEOGRAPH
+ {0xEA85, 0x965E}, //18608 #CJK UNIFIED IDEOGRAPH
+ {0xEA86, 0x9660}, //18609 #CJK UNIFIED IDEOGRAPH
+ {0xEA87, 0x9663}, //18610 #CJK UNIFIED IDEOGRAPH
+ {0xEA88, 0x9665}, //18611 #CJK UNIFIED IDEOGRAPH
+ {0xEA89, 0x9666}, //18612 #CJK UNIFIED IDEOGRAPH
+ {0xEA8A, 0x966B}, //18613 #CJK UNIFIED IDEOGRAPH
+ {0xEA8B, 0x966D}, //18614 #CJK UNIFIED IDEOGRAPH
+ {0xEA8C, 0x966E}, //18615 #CJK UNIFIED IDEOGRAPH
+ {0xEA8D, 0x966F}, //18616 #CJK UNIFIED IDEOGRAPH
+ {0xEA8E, 0x9670}, //18617 #CJK UNIFIED IDEOGRAPH
+ {0xEA8F, 0x9671}, //18618 #CJK UNIFIED IDEOGRAPH
+ {0xEA90, 0x9673}, //18619 #CJK UNIFIED IDEOGRAPH
+ {0xEA91, 0x9678}, //18620 #CJK UNIFIED IDEOGRAPH
+ {0xEA92, 0x9679}, //18621 #CJK UNIFIED IDEOGRAPH
+ {0xEA93, 0x967A}, //18622 #CJK UNIFIED IDEOGRAPH
+ {0xEA94, 0x967B}, //18623 #CJK UNIFIED IDEOGRAPH
+ {0xEA95, 0x967C}, //18624 #CJK UNIFIED IDEOGRAPH
+ {0xEA96, 0x967D}, //18625 #CJK UNIFIED IDEOGRAPH
+ {0xEA97, 0x967E}, //18626 #CJK UNIFIED IDEOGRAPH
+ {0xEA98, 0x967F}, //18627 #CJK UNIFIED IDEOGRAPH
+ {0xEA99, 0x9680}, //18628 #CJK UNIFIED IDEOGRAPH
+ {0xEA9A, 0x9681}, //18629 #CJK UNIFIED IDEOGRAPH
+ {0xEA9B, 0x9682}, //18630 #CJK UNIFIED IDEOGRAPH
+ {0xEA9C, 0x9683}, //18631 #CJK UNIFIED IDEOGRAPH
+ {0xEA9D, 0x9684}, //18632 #CJK UNIFIED IDEOGRAPH
+ {0xEA9E, 0x9687}, //18633 #CJK UNIFIED IDEOGRAPH
+ {0xEA9F, 0x9689}, //18634 #CJK UNIFIED IDEOGRAPH
+ {0xEAA0, 0x968A}, //18635 #CJK UNIFIED IDEOGRAPH
+ {0xEAA1, 0x8F8D}, //18636 #CJK UNIFIED IDEOGRAPH
+ {0xEAA2, 0x8F8E}, //18637 #CJK UNIFIED IDEOGRAPH
+ {0xEAA3, 0x8F8F}, //18638 #CJK UNIFIED IDEOGRAPH
+ {0xEAA4, 0x8F98}, //18639 #CJK UNIFIED IDEOGRAPH
+ {0xEAA5, 0x8F9A}, //18640 #CJK UNIFIED IDEOGRAPH
+ {0xEAA6, 0x8ECE}, //18641 #CJK UNIFIED IDEOGRAPH
+ {0xEAA7, 0x620B}, //18642 #CJK UNIFIED IDEOGRAPH
+ {0xEAA8, 0x6217}, //18643 #CJK UNIFIED IDEOGRAPH
+ {0xEAA9, 0x621B}, //18644 #CJK UNIFIED IDEOGRAPH
+ {0xEAAA, 0x621F}, //18645 #CJK UNIFIED IDEOGRAPH
+ {0xEAAB, 0x6222}, //18646 #CJK UNIFIED IDEOGRAPH
+ {0xEAAC, 0x6221}, //18647 #CJK UNIFIED IDEOGRAPH
+ {0xEAAD, 0x6225}, //18648 #CJK UNIFIED IDEOGRAPH
+ {0xEAAE, 0x6224}, //18649 #CJK UNIFIED IDEOGRAPH
+ {0xEAAF, 0x622C}, //18650 #CJK UNIFIED IDEOGRAPH
+ {0xEAB0, 0x81E7}, //18651 #CJK UNIFIED IDEOGRAPH
+ {0xEAB1, 0x74EF}, //18652 #CJK UNIFIED IDEOGRAPH
+ {0xEAB2, 0x74F4}, //18653 #CJK UNIFIED IDEOGRAPH
+ {0xEAB3, 0x74FF}, //18654 #CJK UNIFIED IDEOGRAPH
+ {0xEAB4, 0x750F}, //18655 #CJK UNIFIED IDEOGRAPH
+ {0xEAB5, 0x7511}, //18656 #CJK UNIFIED IDEOGRAPH
+ {0xEAB6, 0x7513}, //18657 #CJK UNIFIED IDEOGRAPH
+ {0xEAB7, 0x6534}, //18658 #CJK UNIFIED IDEOGRAPH
+ {0xEAB8, 0x65EE}, //18659 #CJK UNIFIED IDEOGRAPH
+ {0xEAB9, 0x65EF}, //18660 #CJK UNIFIED IDEOGRAPH
+ {0xEABA, 0x65F0}, //18661 #CJK UNIFIED IDEOGRAPH
+ {0xEABB, 0x660A}, //18662 #CJK UNIFIED IDEOGRAPH
+ {0xEABC, 0x6619}, //18663 #CJK UNIFIED IDEOGRAPH
+ {0xEABD, 0x6772}, //18664 #CJK UNIFIED IDEOGRAPH
+ {0xEABE, 0x6603}, //18665 #CJK UNIFIED IDEOGRAPH
+ {0xEABF, 0x6615}, //18666 #CJK UNIFIED IDEOGRAPH
+ {0xEAC0, 0x6600}, //18667 #CJK UNIFIED IDEOGRAPH
+ {0xEAC1, 0x7085}, //18668 #CJK UNIFIED IDEOGRAPH
+ {0xEAC2, 0x66F7}, //18669 #CJK UNIFIED IDEOGRAPH
+ {0xEAC3, 0x661D}, //18670 #CJK UNIFIED IDEOGRAPH
+ {0xEAC4, 0x6634}, //18671 #CJK UNIFIED IDEOGRAPH
+ {0xEAC5, 0x6631}, //18672 #CJK UNIFIED IDEOGRAPH
+ {0xEAC6, 0x6636}, //18673 #CJK UNIFIED IDEOGRAPH
+ {0xEAC7, 0x6635}, //18674 #CJK UNIFIED IDEOGRAPH
+ {0xEAC8, 0x8006}, //18675 #CJK UNIFIED IDEOGRAPH
+ {0xEAC9, 0x665F}, //18676 #CJK UNIFIED IDEOGRAPH
+ {0xEACA, 0x6654}, //18677 #CJK UNIFIED IDEOGRAPH
+ {0xEACB, 0x6641}, //18678 #CJK UNIFIED IDEOGRAPH
+ {0xEACC, 0x664F}, //18679 #CJK UNIFIED IDEOGRAPH
+ {0xEACD, 0x6656}, //18680 #CJK UNIFIED IDEOGRAPH
+ {0xEACE, 0x6661}, //18681 #CJK UNIFIED IDEOGRAPH
+ {0xEACF, 0x6657}, //18682 #CJK UNIFIED IDEOGRAPH
+ {0xEAD0, 0x6677}, //18683 #CJK UNIFIED IDEOGRAPH
+ {0xEAD1, 0x6684}, //18684 #CJK UNIFIED IDEOGRAPH
+ {0xEAD2, 0x668C}, //18685 #CJK UNIFIED IDEOGRAPH
+ {0xEAD3, 0x66A7}, //18686 #CJK UNIFIED IDEOGRAPH
+ {0xEAD4, 0x669D}, //18687 #CJK UNIFIED IDEOGRAPH
+ {0xEAD5, 0x66BE}, //18688 #CJK UNIFIED IDEOGRAPH
+ {0xEAD6, 0x66DB}, //18689 #CJK UNIFIED IDEOGRAPH
+ {0xEAD7, 0x66DC}, //18690 #CJK UNIFIED IDEOGRAPH
+ {0xEAD8, 0x66E6}, //18691 #CJK UNIFIED IDEOGRAPH
+ {0xEAD9, 0x66E9}, //18692 #CJK UNIFIED IDEOGRAPH
+ {0xEADA, 0x8D32}, //18693 #CJK UNIFIED IDEOGRAPH
+ {0xEADB, 0x8D33}, //18694 #CJK UNIFIED IDEOGRAPH
+ {0xEADC, 0x8D36}, //18695 #CJK UNIFIED IDEOGRAPH
+ {0xEADD, 0x8D3B}, //18696 #CJK UNIFIED IDEOGRAPH
+ {0xEADE, 0x8D3D}, //18697 #CJK UNIFIED IDEOGRAPH
+ {0xEADF, 0x8D40}, //18698 #CJK UNIFIED IDEOGRAPH
+ {0xEAE0, 0x8D45}, //18699 #CJK UNIFIED IDEOGRAPH
+ {0xEAE1, 0x8D46}, //18700 #CJK UNIFIED IDEOGRAPH
+ {0xEAE2, 0x8D48}, //18701 #CJK UNIFIED IDEOGRAPH
+ {0xEAE3, 0x8D49}, //18702 #CJK UNIFIED IDEOGRAPH
+ {0xEAE4, 0x8D47}, //18703 #CJK UNIFIED IDEOGRAPH
+ {0xEAE5, 0x8D4D}, //18704 #CJK UNIFIED IDEOGRAPH
+ {0xEAE6, 0x8D55}, //18705 #CJK UNIFIED IDEOGRAPH
+ {0xEAE7, 0x8D59}, //18706 #CJK UNIFIED IDEOGRAPH
+ {0xEAE8, 0x89C7}, //18707 #CJK UNIFIED IDEOGRAPH
+ {0xEAE9, 0x89CA}, //18708 #CJK UNIFIED IDEOGRAPH
+ {0xEAEA, 0x89CB}, //18709 #CJK UNIFIED IDEOGRAPH
+ {0xEAEB, 0x89CC}, //18710 #CJK UNIFIED IDEOGRAPH
+ {0xEAEC, 0x89CE}, //18711 #CJK UNIFIED IDEOGRAPH
+ {0xEAED, 0x89CF}, //18712 #CJK UNIFIED IDEOGRAPH
+ {0xEAEE, 0x89D0}, //18713 #CJK UNIFIED IDEOGRAPH
+ {0xEAEF, 0x89D1}, //18714 #CJK UNIFIED IDEOGRAPH
+ {0xEAF0, 0x726E}, //18715 #CJK UNIFIED IDEOGRAPH
+ {0xEAF1, 0x729F}, //18716 #CJK UNIFIED IDEOGRAPH
+ {0xEAF2, 0x725D}, //18717 #CJK UNIFIED IDEOGRAPH
+ {0xEAF3, 0x7266}, //18718 #CJK UNIFIED IDEOGRAPH
+ {0xEAF4, 0x726F}, //18719 #CJK UNIFIED IDEOGRAPH
+ {0xEAF5, 0x727E}, //18720 #CJK UNIFIED IDEOGRAPH
+ {0xEAF6, 0x727F}, //18721 #CJK UNIFIED IDEOGRAPH
+ {0xEAF7, 0x7284}, //18722 #CJK UNIFIED IDEOGRAPH
+ {0xEAF8, 0x728B}, //18723 #CJK UNIFIED IDEOGRAPH
+ {0xEAF9, 0x728D}, //18724 #CJK UNIFIED IDEOGRAPH
+ {0xEAFA, 0x728F}, //18725 #CJK UNIFIED IDEOGRAPH
+ {0xEAFB, 0x7292}, //18726 #CJK UNIFIED IDEOGRAPH
+ {0xEAFC, 0x6308}, //18727 #CJK UNIFIED IDEOGRAPH
+ {0xEAFD, 0x6332}, //18728 #CJK UNIFIED IDEOGRAPH
+ {0xEAFE, 0x63B0}, //18729 #CJK UNIFIED IDEOGRAPH
+ {0xEB40, 0x968C}, //18730 #CJK UNIFIED IDEOGRAPH
+ {0xEB41, 0x968E}, //18731 #CJK UNIFIED IDEOGRAPH
+ {0xEB42, 0x9691}, //18732 #CJK UNIFIED IDEOGRAPH
+ {0xEB43, 0x9692}, //18733 #CJK UNIFIED IDEOGRAPH
+ {0xEB44, 0x9693}, //18734 #CJK UNIFIED IDEOGRAPH
+ {0xEB45, 0x9695}, //18735 #CJK UNIFIED IDEOGRAPH
+ {0xEB46, 0x9696}, //18736 #CJK UNIFIED IDEOGRAPH
+ {0xEB47, 0x969A}, //18737 #CJK UNIFIED IDEOGRAPH
+ {0xEB48, 0x969B}, //18738 #CJK UNIFIED IDEOGRAPH
+ {0xEB49, 0x969D}, //18739 #CJK UNIFIED IDEOGRAPH
+ {0xEB4A, 0x969E}, //18740 #CJK UNIFIED IDEOGRAPH
+ {0xEB4B, 0x969F}, //18741 #CJK UNIFIED IDEOGRAPH
+ {0xEB4C, 0x96A0}, //18742 #CJK UNIFIED IDEOGRAPH
+ {0xEB4D, 0x96A1}, //18743 #CJK UNIFIED IDEOGRAPH
+ {0xEB4E, 0x96A2}, //18744 #CJK UNIFIED IDEOGRAPH
+ {0xEB4F, 0x96A3}, //18745 #CJK UNIFIED IDEOGRAPH
+ {0xEB50, 0x96A4}, //18746 #CJK UNIFIED IDEOGRAPH
+ {0xEB51, 0x96A5}, //18747 #CJK UNIFIED IDEOGRAPH
+ {0xEB52, 0x96A6}, //18748 #CJK UNIFIED IDEOGRAPH
+ {0xEB53, 0x96A8}, //18749 #CJK UNIFIED IDEOGRAPH
+ {0xEB54, 0x96A9}, //18750 #CJK UNIFIED IDEOGRAPH
+ {0xEB55, 0x96AA}, //18751 #CJK UNIFIED IDEOGRAPH
+ {0xEB56, 0x96AB}, //18752 #CJK UNIFIED IDEOGRAPH
+ {0xEB57, 0x96AC}, //18753 #CJK UNIFIED IDEOGRAPH
+ {0xEB58, 0x96AD}, //18754 #CJK UNIFIED IDEOGRAPH
+ {0xEB59, 0x96AE}, //18755 #CJK UNIFIED IDEOGRAPH
+ {0xEB5A, 0x96AF}, //18756 #CJK UNIFIED IDEOGRAPH
+ {0xEB5B, 0x96B1}, //18757 #CJK UNIFIED IDEOGRAPH
+ {0xEB5C, 0x96B2}, //18758 #CJK UNIFIED IDEOGRAPH
+ {0xEB5D, 0x96B4}, //18759 #CJK UNIFIED IDEOGRAPH
+ {0xEB5E, 0x96B5}, //18760 #CJK UNIFIED IDEOGRAPH
+ {0xEB5F, 0x96B7}, //18761 #CJK UNIFIED IDEOGRAPH
+ {0xEB60, 0x96B8}, //18762 #CJK UNIFIED IDEOGRAPH
+ {0xEB61, 0x96BA}, //18763 #CJK UNIFIED IDEOGRAPH
+ {0xEB62, 0x96BB}, //18764 #CJK UNIFIED IDEOGRAPH
+ {0xEB63, 0x96BF}, //18765 #CJK UNIFIED IDEOGRAPH
+ {0xEB64, 0x96C2}, //18766 #CJK UNIFIED IDEOGRAPH
+ {0xEB65, 0x96C3}, //18767 #CJK UNIFIED IDEOGRAPH
+ {0xEB66, 0x96C8}, //18768 #CJK UNIFIED IDEOGRAPH
+ {0xEB67, 0x96CA}, //18769 #CJK UNIFIED IDEOGRAPH
+ {0xEB68, 0x96CB}, //18770 #CJK UNIFIED IDEOGRAPH
+ {0xEB69, 0x96D0}, //18771 #CJK UNIFIED IDEOGRAPH
+ {0xEB6A, 0x96D1}, //18772 #CJK UNIFIED IDEOGRAPH
+ {0xEB6B, 0x96D3}, //18773 #CJK UNIFIED IDEOGRAPH
+ {0xEB6C, 0x96D4}, //18774 #CJK UNIFIED IDEOGRAPH
+ {0xEB6D, 0x96D6}, //18775 #CJK UNIFIED IDEOGRAPH
+ {0xEB6E, 0x96D7}, //18776 #CJK UNIFIED IDEOGRAPH
+ {0xEB6F, 0x96D8}, //18777 #CJK UNIFIED IDEOGRAPH
+ {0xEB70, 0x96D9}, //18778 #CJK UNIFIED IDEOGRAPH
+ {0xEB71, 0x96DA}, //18779 #CJK UNIFIED IDEOGRAPH
+ {0xEB72, 0x96DB}, //18780 #CJK UNIFIED IDEOGRAPH
+ {0xEB73, 0x96DC}, //18781 #CJK UNIFIED IDEOGRAPH
+ {0xEB74, 0x96DD}, //18782 #CJK UNIFIED IDEOGRAPH
+ {0xEB75, 0x96DE}, //18783 #CJK UNIFIED IDEOGRAPH
+ {0xEB76, 0x96DF}, //18784 #CJK UNIFIED IDEOGRAPH
+ {0xEB77, 0x96E1}, //18785 #CJK UNIFIED IDEOGRAPH
+ {0xEB78, 0x96E2}, //18786 #CJK UNIFIED IDEOGRAPH
+ {0xEB79, 0x96E3}, //18787 #CJK UNIFIED IDEOGRAPH
+ {0xEB7A, 0x96E4}, //18788 #CJK UNIFIED IDEOGRAPH
+ {0xEB7B, 0x96E5}, //18789 #CJK UNIFIED IDEOGRAPH
+ {0xEB7C, 0x96E6}, //18790 #CJK UNIFIED IDEOGRAPH
+ {0xEB7D, 0x96E7}, //18791 #CJK UNIFIED IDEOGRAPH
+ {0xEB7E, 0x96EB}, //18792 #CJK UNIFIED IDEOGRAPH
+ {0xEB80, 0x96EC}, //18793 #CJK UNIFIED IDEOGRAPH
+ {0xEB81, 0x96ED}, //18794 #CJK UNIFIED IDEOGRAPH
+ {0xEB82, 0x96EE}, //18795 #CJK UNIFIED IDEOGRAPH
+ {0xEB83, 0x96F0}, //18796 #CJK UNIFIED IDEOGRAPH
+ {0xEB84, 0x96F1}, //18797 #CJK UNIFIED IDEOGRAPH
+ {0xEB85, 0x96F2}, //18798 #CJK UNIFIED IDEOGRAPH
+ {0xEB86, 0x96F4}, //18799 #CJK UNIFIED IDEOGRAPH
+ {0xEB87, 0x96F5}, //18800 #CJK UNIFIED IDEOGRAPH
+ {0xEB88, 0x96F8}, //18801 #CJK UNIFIED IDEOGRAPH
+ {0xEB89, 0x96FA}, //18802 #CJK UNIFIED IDEOGRAPH
+ {0xEB8A, 0x96FB}, //18803 #CJK UNIFIED IDEOGRAPH
+ {0xEB8B, 0x96FC}, //18804 #CJK UNIFIED IDEOGRAPH
+ {0xEB8C, 0x96FD}, //18805 #CJK UNIFIED IDEOGRAPH
+ {0xEB8D, 0x96FF}, //18806 #CJK UNIFIED IDEOGRAPH
+ {0xEB8E, 0x9702}, //18807 #CJK UNIFIED IDEOGRAPH
+ {0xEB8F, 0x9703}, //18808 #CJK UNIFIED IDEOGRAPH
+ {0xEB90, 0x9705}, //18809 #CJK UNIFIED IDEOGRAPH
+ {0xEB91, 0x970A}, //18810 #CJK UNIFIED IDEOGRAPH
+ {0xEB92, 0x970B}, //18811 #CJK UNIFIED IDEOGRAPH
+ {0xEB93, 0x970C}, //18812 #CJK UNIFIED IDEOGRAPH
+ {0xEB94, 0x9710}, //18813 #CJK UNIFIED IDEOGRAPH
+ {0xEB95, 0x9711}, //18814 #CJK UNIFIED IDEOGRAPH
+ {0xEB96, 0x9712}, //18815 #CJK UNIFIED IDEOGRAPH
+ {0xEB97, 0x9714}, //18816 #CJK UNIFIED IDEOGRAPH
+ {0xEB98, 0x9715}, //18817 #CJK UNIFIED IDEOGRAPH
+ {0xEB99, 0x9717}, //18818 #CJK UNIFIED IDEOGRAPH
+ {0xEB9A, 0x9718}, //18819 #CJK UNIFIED IDEOGRAPH
+ {0xEB9B, 0x9719}, //18820 #CJK UNIFIED IDEOGRAPH
+ {0xEB9C, 0x971A}, //18821 #CJK UNIFIED IDEOGRAPH
+ {0xEB9D, 0x971B}, //18822 #CJK UNIFIED IDEOGRAPH
+ {0xEB9E, 0x971D}, //18823 #CJK UNIFIED IDEOGRAPH
+ {0xEB9F, 0x971F}, //18824 #CJK UNIFIED IDEOGRAPH
+ {0xEBA0, 0x9720}, //18825 #CJK UNIFIED IDEOGRAPH
+ {0xEBA1, 0x643F}, //18826 #CJK UNIFIED IDEOGRAPH
+ {0xEBA2, 0x64D8}, //18827 #CJK UNIFIED IDEOGRAPH
+ {0xEBA3, 0x8004}, //18828 #CJK UNIFIED IDEOGRAPH
+ {0xEBA4, 0x6BEA}, //18829 #CJK UNIFIED IDEOGRAPH
+ {0xEBA5, 0x6BF3}, //18830 #CJK UNIFIED IDEOGRAPH
+ {0xEBA6, 0x6BFD}, //18831 #CJK UNIFIED IDEOGRAPH
+ {0xEBA7, 0x6BF5}, //18832 #CJK UNIFIED IDEOGRAPH
+ {0xEBA8, 0x6BF9}, //18833 #CJK UNIFIED IDEOGRAPH
+ {0xEBA9, 0x6C05}, //18834 #CJK UNIFIED IDEOGRAPH
+ {0xEBAA, 0x6C07}, //18835 #CJK UNIFIED IDEOGRAPH
+ {0xEBAB, 0x6C06}, //18836 #CJK UNIFIED IDEOGRAPH
+ {0xEBAC, 0x6C0D}, //18837 #CJK UNIFIED IDEOGRAPH
+ {0xEBAD, 0x6C15}, //18838 #CJK UNIFIED IDEOGRAPH
+ {0xEBAE, 0x6C18}, //18839 #CJK UNIFIED IDEOGRAPH
+ {0xEBAF, 0x6C19}, //18840 #CJK UNIFIED IDEOGRAPH
+ {0xEBB0, 0x6C1A}, //18841 #CJK UNIFIED IDEOGRAPH
+ {0xEBB1, 0x6C21}, //18842 #CJK UNIFIED IDEOGRAPH
+ {0xEBB2, 0x6C29}, //18843 #CJK UNIFIED IDEOGRAPH
+ {0xEBB3, 0x6C24}, //18844 #CJK UNIFIED IDEOGRAPH
+ {0xEBB4, 0x6C2A}, //18845 #CJK UNIFIED IDEOGRAPH
+ {0xEBB5, 0x6C32}, //18846 #CJK UNIFIED IDEOGRAPH
+ {0xEBB6, 0x6535}, //18847 #CJK UNIFIED IDEOGRAPH
+ {0xEBB7, 0x6555}, //18848 #CJK UNIFIED IDEOGRAPH
+ {0xEBB8, 0x656B}, //18849 #CJK UNIFIED IDEOGRAPH
+ {0xEBB9, 0x724D}, //18850 #CJK UNIFIED IDEOGRAPH
+ {0xEBBA, 0x7252}, //18851 #CJK UNIFIED IDEOGRAPH
+ {0xEBBB, 0x7256}, //18852 #CJK UNIFIED IDEOGRAPH
+ {0xEBBC, 0x7230}, //18853 #CJK UNIFIED IDEOGRAPH
+ {0xEBBD, 0x8662}, //18854 #CJK UNIFIED IDEOGRAPH
+ {0xEBBE, 0x5216}, //18855 #CJK UNIFIED IDEOGRAPH
+ {0xEBBF, 0x809F}, //18856 #CJK UNIFIED IDEOGRAPH
+ {0xEBC0, 0x809C}, //18857 #CJK UNIFIED IDEOGRAPH
+ {0xEBC1, 0x8093}, //18858 #CJK UNIFIED IDEOGRAPH
+ {0xEBC2, 0x80BC}, //18859 #CJK UNIFIED IDEOGRAPH
+ {0xEBC3, 0x670A}, //18860 #CJK UNIFIED IDEOGRAPH
+ {0xEBC4, 0x80BD}, //18861 #CJK UNIFIED IDEOGRAPH
+ {0xEBC5, 0x80B1}, //18862 #CJK UNIFIED IDEOGRAPH
+ {0xEBC6, 0x80AB}, //18863 #CJK UNIFIED IDEOGRAPH
+ {0xEBC7, 0x80AD}, //18864 #CJK UNIFIED IDEOGRAPH
+ {0xEBC8, 0x80B4}, //18865 #CJK UNIFIED IDEOGRAPH
+ {0xEBC9, 0x80B7}, //18866 #CJK UNIFIED IDEOGRAPH
+ {0xEBCA, 0x80E7}, //18867 #CJK UNIFIED IDEOGRAPH
+ {0xEBCB, 0x80E8}, //18868 #CJK UNIFIED IDEOGRAPH
+ {0xEBCC, 0x80E9}, //18869 #CJK UNIFIED IDEOGRAPH
+ {0xEBCD, 0x80EA}, //18870 #CJK UNIFIED IDEOGRAPH
+ {0xEBCE, 0x80DB}, //18871 #CJK UNIFIED IDEOGRAPH
+ {0xEBCF, 0x80C2}, //18872 #CJK UNIFIED IDEOGRAPH
+ {0xEBD0, 0x80C4}, //18873 #CJK UNIFIED IDEOGRAPH
+ {0xEBD1, 0x80D9}, //18874 #CJK UNIFIED IDEOGRAPH
+ {0xEBD2, 0x80CD}, //18875 #CJK UNIFIED IDEOGRAPH
+ {0xEBD3, 0x80D7}, //18876 #CJK UNIFIED IDEOGRAPH
+ {0xEBD4, 0x6710}, //18877 #CJK UNIFIED IDEOGRAPH
+ {0xEBD5, 0x80DD}, //18878 #CJK UNIFIED IDEOGRAPH
+ {0xEBD6, 0x80EB}, //18879 #CJK UNIFIED IDEOGRAPH
+ {0xEBD7, 0x80F1}, //18880 #CJK UNIFIED IDEOGRAPH
+ {0xEBD8, 0x80F4}, //18881 #CJK UNIFIED IDEOGRAPH
+ {0xEBD9, 0x80ED}, //18882 #CJK UNIFIED IDEOGRAPH
+ {0xEBDA, 0x810D}, //18883 #CJK UNIFIED IDEOGRAPH
+ {0xEBDB, 0x810E}, //18884 #CJK UNIFIED IDEOGRAPH
+ {0xEBDC, 0x80F2}, //18885 #CJK UNIFIED IDEOGRAPH
+ {0xEBDD, 0x80FC}, //18886 #CJK UNIFIED IDEOGRAPH
+ {0xEBDE, 0x6715}, //18887 #CJK UNIFIED IDEOGRAPH
+ {0xEBDF, 0x8112}, //18888 #CJK UNIFIED IDEOGRAPH
+ {0xEBE0, 0x8C5A}, //18889 #CJK UNIFIED IDEOGRAPH
+ {0xEBE1, 0x8136}, //18890 #CJK UNIFIED IDEOGRAPH
+ {0xEBE2, 0x811E}, //18891 #CJK UNIFIED IDEOGRAPH
+ {0xEBE3, 0x812C}, //18892 #CJK UNIFIED IDEOGRAPH
+ {0xEBE4, 0x8118}, //18893 #CJK UNIFIED IDEOGRAPH
+ {0xEBE5, 0x8132}, //18894 #CJK UNIFIED IDEOGRAPH
+ {0xEBE6, 0x8148}, //18895 #CJK UNIFIED IDEOGRAPH
+ {0xEBE7, 0x814C}, //18896 #CJK UNIFIED IDEOGRAPH
+ {0xEBE8, 0x8153}, //18897 #CJK UNIFIED IDEOGRAPH
+ {0xEBE9, 0x8174}, //18898 #CJK UNIFIED IDEOGRAPH
+ {0xEBEA, 0x8159}, //18899 #CJK UNIFIED IDEOGRAPH
+ {0xEBEB, 0x815A}, //18900 #CJK UNIFIED IDEOGRAPH
+ {0xEBEC, 0x8171}, //18901 #CJK UNIFIED IDEOGRAPH
+ {0xEBED, 0x8160}, //18902 #CJK UNIFIED IDEOGRAPH
+ {0xEBEE, 0x8169}, //18903 #CJK UNIFIED IDEOGRAPH
+ {0xEBEF, 0x817C}, //18904 #CJK UNIFIED IDEOGRAPH
+ {0xEBF0, 0x817D}, //18905 #CJK UNIFIED IDEOGRAPH
+ {0xEBF1, 0x816D}, //18906 #CJK UNIFIED IDEOGRAPH
+ {0xEBF2, 0x8167}, //18907 #CJK UNIFIED IDEOGRAPH
+ {0xEBF3, 0x584D}, //18908 #CJK UNIFIED IDEOGRAPH
+ {0xEBF4, 0x5AB5}, //18909 #CJK UNIFIED IDEOGRAPH
+ {0xEBF5, 0x8188}, //18910 #CJK UNIFIED IDEOGRAPH
+ {0xEBF6, 0x8182}, //18911 #CJK UNIFIED IDEOGRAPH
+ {0xEBF7, 0x8191}, //18912 #CJK UNIFIED IDEOGRAPH
+ {0xEBF8, 0x6ED5}, //18913 #CJK UNIFIED IDEOGRAPH
+ {0xEBF9, 0x81A3}, //18914 #CJK UNIFIED IDEOGRAPH
+ {0xEBFA, 0x81AA}, //18915 #CJK UNIFIED IDEOGRAPH
+ {0xEBFB, 0x81CC}, //18916 #CJK UNIFIED IDEOGRAPH
+ {0xEBFC, 0x6726}, //18917 #CJK UNIFIED IDEOGRAPH
+ {0xEBFD, 0x81CA}, //18918 #CJK UNIFIED IDEOGRAPH
+ {0xEBFE, 0x81BB}, //18919 #CJK UNIFIED IDEOGRAPH
+ {0xEC40, 0x9721}, //18920 #CJK UNIFIED IDEOGRAPH
+ {0xEC41, 0x9722}, //18921 #CJK UNIFIED IDEOGRAPH
+ {0xEC42, 0x9723}, //18922 #CJK UNIFIED IDEOGRAPH
+ {0xEC43, 0x9724}, //18923 #CJK UNIFIED IDEOGRAPH
+ {0xEC44, 0x9725}, //18924 #CJK UNIFIED IDEOGRAPH
+ {0xEC45, 0x9726}, //18925 #CJK UNIFIED IDEOGRAPH
+ {0xEC46, 0x9727}, //18926 #CJK UNIFIED IDEOGRAPH
+ {0xEC47, 0x9728}, //18927 #CJK UNIFIED IDEOGRAPH
+ {0xEC48, 0x9729}, //18928 #CJK UNIFIED IDEOGRAPH
+ {0xEC49, 0x972B}, //18929 #CJK UNIFIED IDEOGRAPH
+ {0xEC4A, 0x972C}, //18930 #CJK UNIFIED IDEOGRAPH
+ {0xEC4B, 0x972E}, //18931 #CJK UNIFIED IDEOGRAPH
+ {0xEC4C, 0x972F}, //18932 #CJK UNIFIED IDEOGRAPH
+ {0xEC4D, 0x9731}, //18933 #CJK UNIFIED IDEOGRAPH
+ {0xEC4E, 0x9733}, //18934 #CJK UNIFIED IDEOGRAPH
+ {0xEC4F, 0x9734}, //18935 #CJK UNIFIED IDEOGRAPH
+ {0xEC50, 0x9735}, //18936 #CJK UNIFIED IDEOGRAPH
+ {0xEC51, 0x9736}, //18937 #CJK UNIFIED IDEOGRAPH
+ {0xEC52, 0x9737}, //18938 #CJK UNIFIED IDEOGRAPH
+ {0xEC53, 0x973A}, //18939 #CJK UNIFIED IDEOGRAPH
+ {0xEC54, 0x973B}, //18940 #CJK UNIFIED IDEOGRAPH
+ {0xEC55, 0x973C}, //18941 #CJK UNIFIED IDEOGRAPH
+ {0xEC56, 0x973D}, //18942 #CJK UNIFIED IDEOGRAPH
+ {0xEC57, 0x973F}, //18943 #CJK UNIFIED IDEOGRAPH
+ {0xEC58, 0x9740}, //18944 #CJK UNIFIED IDEOGRAPH
+ {0xEC59, 0x9741}, //18945 #CJK UNIFIED IDEOGRAPH
+ {0xEC5A, 0x9742}, //18946 #CJK UNIFIED IDEOGRAPH
+ {0xEC5B, 0x9743}, //18947 #CJK UNIFIED IDEOGRAPH
+ {0xEC5C, 0x9744}, //18948 #CJK UNIFIED IDEOGRAPH
+ {0xEC5D, 0x9745}, //18949 #CJK UNIFIED IDEOGRAPH
+ {0xEC5E, 0x9746}, //18950 #CJK UNIFIED IDEOGRAPH
+ {0xEC5F, 0x9747}, //18951 #CJK UNIFIED IDEOGRAPH
+ {0xEC60, 0x9748}, //18952 #CJK UNIFIED IDEOGRAPH
+ {0xEC61, 0x9749}, //18953 #CJK UNIFIED IDEOGRAPH
+ {0xEC62, 0x974A}, //18954 #CJK UNIFIED IDEOGRAPH
+ {0xEC63, 0x974B}, //18955 #CJK UNIFIED IDEOGRAPH
+ {0xEC64, 0x974C}, //18956 #CJK UNIFIED IDEOGRAPH
+ {0xEC65, 0x974D}, //18957 #CJK UNIFIED IDEOGRAPH
+ {0xEC66, 0x974E}, //18958 #CJK UNIFIED IDEOGRAPH
+ {0xEC67, 0x974F}, //18959 #CJK UNIFIED IDEOGRAPH
+ {0xEC68, 0x9750}, //18960 #CJK UNIFIED IDEOGRAPH
+ {0xEC69, 0x9751}, //18961 #CJK UNIFIED IDEOGRAPH
+ {0xEC6A, 0x9754}, //18962 #CJK UNIFIED IDEOGRAPH
+ {0xEC6B, 0x9755}, //18963 #CJK UNIFIED IDEOGRAPH
+ {0xEC6C, 0x9757}, //18964 #CJK UNIFIED IDEOGRAPH
+ {0xEC6D, 0x9758}, //18965 #CJK UNIFIED IDEOGRAPH
+ {0xEC6E, 0x975A}, //18966 #CJK UNIFIED IDEOGRAPH
+ {0xEC6F, 0x975C}, //18967 #CJK UNIFIED IDEOGRAPH
+ {0xEC70, 0x975D}, //18968 #CJK UNIFIED IDEOGRAPH
+ {0xEC71, 0x975F}, //18969 #CJK UNIFIED IDEOGRAPH
+ {0xEC72, 0x9763}, //18970 #CJK UNIFIED IDEOGRAPH
+ {0xEC73, 0x9764}, //18971 #CJK UNIFIED IDEOGRAPH
+ {0xEC74, 0x9766}, //18972 #CJK UNIFIED IDEOGRAPH
+ {0xEC75, 0x9767}, //18973 #CJK UNIFIED IDEOGRAPH
+ {0xEC76, 0x9768}, //18974 #CJK UNIFIED IDEOGRAPH
+ {0xEC77, 0x976A}, //18975 #CJK UNIFIED IDEOGRAPH
+ {0xEC78, 0x976B}, //18976 #CJK UNIFIED IDEOGRAPH
+ {0xEC79, 0x976C}, //18977 #CJK UNIFIED IDEOGRAPH
+ {0xEC7A, 0x976D}, //18978 #CJK UNIFIED IDEOGRAPH
+ {0xEC7B, 0x976E}, //18979 #CJK UNIFIED IDEOGRAPH
+ {0xEC7C, 0x976F}, //18980 #CJK UNIFIED IDEOGRAPH
+ {0xEC7D, 0x9770}, //18981 #CJK UNIFIED IDEOGRAPH
+ {0xEC7E, 0x9771}, //18982 #CJK UNIFIED IDEOGRAPH
+ {0xEC80, 0x9772}, //18983 #CJK UNIFIED IDEOGRAPH
+ {0xEC81, 0x9775}, //18984 #CJK UNIFIED IDEOGRAPH
+ {0xEC82, 0x9777}, //18985 #CJK UNIFIED IDEOGRAPH
+ {0xEC83, 0x9778}, //18986 #CJK UNIFIED IDEOGRAPH
+ {0xEC84, 0x9779}, //18987 #CJK UNIFIED IDEOGRAPH
+ {0xEC85, 0x977A}, //18988 #CJK UNIFIED IDEOGRAPH
+ {0xEC86, 0x977B}, //18989 #CJK UNIFIED IDEOGRAPH
+ {0xEC87, 0x977D}, //18990 #CJK UNIFIED IDEOGRAPH
+ {0xEC88, 0x977E}, //18991 #CJK UNIFIED IDEOGRAPH
+ {0xEC89, 0x977F}, //18992 #CJK UNIFIED IDEOGRAPH
+ {0xEC8A, 0x9780}, //18993 #CJK UNIFIED IDEOGRAPH
+ {0xEC8B, 0x9781}, //18994 #CJK UNIFIED IDEOGRAPH
+ {0xEC8C, 0x9782}, //18995 #CJK UNIFIED IDEOGRAPH
+ {0xEC8D, 0x9783}, //18996 #CJK UNIFIED IDEOGRAPH
+ {0xEC8E, 0x9784}, //18997 #CJK UNIFIED IDEOGRAPH
+ {0xEC8F, 0x9786}, //18998 #CJK UNIFIED IDEOGRAPH
+ {0xEC90, 0x9787}, //18999 #CJK UNIFIED IDEOGRAPH
+ {0xEC91, 0x9788}, //19000 #CJK UNIFIED IDEOGRAPH
+ {0xEC92, 0x9789}, //19001 #CJK UNIFIED IDEOGRAPH
+ {0xEC93, 0x978A}, //19002 #CJK UNIFIED IDEOGRAPH
+ {0xEC94, 0x978C}, //19003 #CJK UNIFIED IDEOGRAPH
+ {0xEC95, 0x978E}, //19004 #CJK UNIFIED IDEOGRAPH
+ {0xEC96, 0x978F}, //19005 #CJK UNIFIED IDEOGRAPH
+ {0xEC97, 0x9790}, //19006 #CJK UNIFIED IDEOGRAPH
+ {0xEC98, 0x9793}, //19007 #CJK UNIFIED IDEOGRAPH
+ {0xEC99, 0x9795}, //19008 #CJK UNIFIED IDEOGRAPH
+ {0xEC9A, 0x9796}, //19009 #CJK UNIFIED IDEOGRAPH
+ {0xEC9B, 0x9797}, //19010 #CJK UNIFIED IDEOGRAPH
+ {0xEC9C, 0x9799}, //19011 #CJK UNIFIED IDEOGRAPH
+ {0xEC9D, 0x979A}, //19012 #CJK UNIFIED IDEOGRAPH
+ {0xEC9E, 0x979B}, //19013 #CJK UNIFIED IDEOGRAPH
+ {0xEC9F, 0x979C}, //19014 #CJK UNIFIED IDEOGRAPH
+ {0xECA0, 0x979D}, //19015 #CJK UNIFIED IDEOGRAPH
+ {0xECA1, 0x81C1}, //19016 #CJK UNIFIED IDEOGRAPH
+ {0xECA2, 0x81A6}, //19017 #CJK UNIFIED IDEOGRAPH
+ {0xECA3, 0x6B24}, //19018 #CJK UNIFIED IDEOGRAPH
+ {0xECA4, 0x6B37}, //19019 #CJK UNIFIED IDEOGRAPH
+ {0xECA5, 0x6B39}, //19020 #CJK UNIFIED IDEOGRAPH
+ {0xECA6, 0x6B43}, //19021 #CJK UNIFIED IDEOGRAPH
+ {0xECA7, 0x6B46}, //19022 #CJK UNIFIED IDEOGRAPH
+ {0xECA8, 0x6B59}, //19023 #CJK UNIFIED IDEOGRAPH
+ {0xECA9, 0x98D1}, //19024 #CJK UNIFIED IDEOGRAPH
+ {0xECAA, 0x98D2}, //19025 #CJK UNIFIED IDEOGRAPH
+ {0xECAB, 0x98D3}, //19026 #CJK UNIFIED IDEOGRAPH
+ {0xECAC, 0x98D5}, //19027 #CJK UNIFIED IDEOGRAPH
+ {0xECAD, 0x98D9}, //19028 #CJK UNIFIED IDEOGRAPH
+ {0xECAE, 0x98DA}, //19029 #CJK UNIFIED IDEOGRAPH
+ {0xECAF, 0x6BB3}, //19030 #CJK UNIFIED IDEOGRAPH
+ {0xECB0, 0x5F40}, //19031 #CJK UNIFIED IDEOGRAPH
+ {0xECB1, 0x6BC2}, //19032 #CJK UNIFIED IDEOGRAPH
+ {0xECB2, 0x89F3}, //19033 #CJK UNIFIED IDEOGRAPH
+ {0xECB3, 0x6590}, //19034 #CJK UNIFIED IDEOGRAPH
+ {0xECB4, 0x9F51}, //19035 #CJK UNIFIED IDEOGRAPH
+ {0xECB5, 0x6593}, //19036 #CJK UNIFIED IDEOGRAPH
+ {0xECB6, 0x65BC}, //19037 #CJK UNIFIED IDEOGRAPH
+ {0xECB7, 0x65C6}, //19038 #CJK UNIFIED IDEOGRAPH
+ {0xECB8, 0x65C4}, //19039 #CJK UNIFIED IDEOGRAPH
+ {0xECB9, 0x65C3}, //19040 #CJK UNIFIED IDEOGRAPH
+ {0xECBA, 0x65CC}, //19041 #CJK UNIFIED IDEOGRAPH
+ {0xECBB, 0x65CE}, //19042 #CJK UNIFIED IDEOGRAPH
+ {0xECBC, 0x65D2}, //19043 #CJK UNIFIED IDEOGRAPH
+ {0xECBD, 0x65D6}, //19044 #CJK UNIFIED IDEOGRAPH
+ {0xECBE, 0x7080}, //19045 #CJK UNIFIED IDEOGRAPH
+ {0xECBF, 0x709C}, //19046 #CJK UNIFIED IDEOGRAPH
+ {0xECC0, 0x7096}, //19047 #CJK UNIFIED IDEOGRAPH
+ {0xECC1, 0x709D}, //19048 #CJK UNIFIED IDEOGRAPH
+ {0xECC2, 0x70BB}, //19049 #CJK UNIFIED IDEOGRAPH
+ {0xECC3, 0x70C0}, //19050 #CJK UNIFIED IDEOGRAPH
+ {0xECC4, 0x70B7}, //19051 #CJK UNIFIED IDEOGRAPH
+ {0xECC5, 0x70AB}, //19052 #CJK UNIFIED IDEOGRAPH
+ {0xECC6, 0x70B1}, //19053 #CJK UNIFIED IDEOGRAPH
+ {0xECC7, 0x70E8}, //19054 #CJK UNIFIED IDEOGRAPH
+ {0xECC8, 0x70CA}, //19055 #CJK UNIFIED IDEOGRAPH
+ {0xECC9, 0x7110}, //19056 #CJK UNIFIED IDEOGRAPH
+ {0xECCA, 0x7113}, //19057 #CJK UNIFIED IDEOGRAPH
+ {0xECCB, 0x7116}, //19058 #CJK UNIFIED IDEOGRAPH
+ {0xECCC, 0x712F}, //19059 #CJK UNIFIED IDEOGRAPH
+ {0xECCD, 0x7131}, //19060 #CJK UNIFIED IDEOGRAPH
+ {0xECCE, 0x7173}, //19061 #CJK UNIFIED IDEOGRAPH
+ {0xECCF, 0x715C}, //19062 #CJK UNIFIED IDEOGRAPH
+ {0xECD0, 0x7168}, //19063 #CJK UNIFIED IDEOGRAPH
+ {0xECD1, 0x7145}, //19064 #CJK UNIFIED IDEOGRAPH
+ {0xECD2, 0x7172}, //19065 #CJK UNIFIED IDEOGRAPH
+ {0xECD3, 0x714A}, //19066 #CJK UNIFIED IDEOGRAPH
+ {0xECD4, 0x7178}, //19067 #CJK UNIFIED IDEOGRAPH
+ {0xECD5, 0x717A}, //19068 #CJK UNIFIED IDEOGRAPH
+ {0xECD6, 0x7198}, //19069 #CJK UNIFIED IDEOGRAPH
+ {0xECD7, 0x71B3}, //19070 #CJK UNIFIED IDEOGRAPH
+ {0xECD8, 0x71B5}, //19071 #CJK UNIFIED IDEOGRAPH
+ {0xECD9, 0x71A8}, //19072 #CJK UNIFIED IDEOGRAPH
+ {0xECDA, 0x71A0}, //19073 #CJK UNIFIED IDEOGRAPH
+ {0xECDB, 0x71E0}, //19074 #CJK UNIFIED IDEOGRAPH
+ {0xECDC, 0x71D4}, //19075 #CJK UNIFIED IDEOGRAPH
+ {0xECDD, 0x71E7}, //19076 #CJK UNIFIED IDEOGRAPH
+ {0xECDE, 0x71F9}, //19077 #CJK UNIFIED IDEOGRAPH
+ {0xECDF, 0x721D}, //19078 #CJK UNIFIED IDEOGRAPH
+ {0xECE0, 0x7228}, //19079 #CJK UNIFIED IDEOGRAPH
+ {0xECE1, 0x706C}, //19080 #CJK UNIFIED IDEOGRAPH
+ {0xECE2, 0x7118}, //19081 #CJK UNIFIED IDEOGRAPH
+ {0xECE3, 0x7166}, //19082 #CJK UNIFIED IDEOGRAPH
+ {0xECE4, 0x71B9}, //19083 #CJK UNIFIED IDEOGRAPH
+ {0xECE5, 0x623E}, //19084 #CJK UNIFIED IDEOGRAPH
+ {0xECE6, 0x623D}, //19085 #CJK UNIFIED IDEOGRAPH
+ {0xECE7, 0x6243}, //19086 #CJK UNIFIED IDEOGRAPH
+ {0xECE8, 0x6248}, //19087 #CJK UNIFIED IDEOGRAPH
+ {0xECE9, 0x6249}, //19088 #CJK UNIFIED IDEOGRAPH
+ {0xECEA, 0x793B}, //19089 #CJK UNIFIED IDEOGRAPH
+ {0xECEB, 0x7940}, //19090 #CJK UNIFIED IDEOGRAPH
+ {0xECEC, 0x7946}, //19091 #CJK UNIFIED IDEOGRAPH
+ {0xECED, 0x7949}, //19092 #CJK UNIFIED IDEOGRAPH
+ {0xECEE, 0x795B}, //19093 #CJK UNIFIED IDEOGRAPH
+ {0xECEF, 0x795C}, //19094 #CJK UNIFIED IDEOGRAPH
+ {0xECF0, 0x7953}, //19095 #CJK UNIFIED IDEOGRAPH
+ {0xECF1, 0x795A}, //19096 #CJK UNIFIED IDEOGRAPH
+ {0xECF2, 0x7962}, //19097 #CJK UNIFIED IDEOGRAPH
+ {0xECF3, 0x7957}, //19098 #CJK UNIFIED IDEOGRAPH
+ {0xECF4, 0x7960}, //19099 #CJK UNIFIED IDEOGRAPH
+ {0xECF5, 0x796F}, //19100 #CJK UNIFIED IDEOGRAPH
+ {0xECF6, 0x7967}, //19101 #CJK UNIFIED IDEOGRAPH
+ {0xECF7, 0x797A}, //19102 #CJK UNIFIED IDEOGRAPH
+ {0xECF8, 0x7985}, //19103 #CJK UNIFIED IDEOGRAPH
+ {0xECF9, 0x798A}, //19104 #CJK UNIFIED IDEOGRAPH
+ {0xECFA, 0x799A}, //19105 #CJK UNIFIED IDEOGRAPH
+ {0xECFB, 0x79A7}, //19106 #CJK UNIFIED IDEOGRAPH
+ {0xECFC, 0x79B3}, //19107 #CJK UNIFIED IDEOGRAPH
+ {0xECFD, 0x5FD1}, //19108 #CJK UNIFIED IDEOGRAPH
+ {0xECFE, 0x5FD0}, //19109 #CJK UNIFIED IDEOGRAPH
+ {0xED40, 0x979E}, //19110 #CJK UNIFIED IDEOGRAPH
+ {0xED41, 0x979F}, //19111 #CJK UNIFIED IDEOGRAPH
+ {0xED42, 0x97A1}, //19112 #CJK UNIFIED IDEOGRAPH
+ {0xED43, 0x97A2}, //19113 #CJK UNIFIED IDEOGRAPH
+ {0xED44, 0x97A4}, //19114 #CJK UNIFIED IDEOGRAPH
+ {0xED45, 0x97A5}, //19115 #CJK UNIFIED IDEOGRAPH
+ {0xED46, 0x97A6}, //19116 #CJK UNIFIED IDEOGRAPH
+ {0xED47, 0x97A7}, //19117 #CJK UNIFIED IDEOGRAPH
+ {0xED48, 0x97A8}, //19118 #CJK UNIFIED IDEOGRAPH
+ {0xED49, 0x97A9}, //19119 #CJK UNIFIED IDEOGRAPH
+ {0xED4A, 0x97AA}, //19120 #CJK UNIFIED IDEOGRAPH
+ {0xED4B, 0x97AC}, //19121 #CJK UNIFIED IDEOGRAPH
+ {0xED4C, 0x97AE}, //19122 #CJK UNIFIED IDEOGRAPH
+ {0xED4D, 0x97B0}, //19123 #CJK UNIFIED IDEOGRAPH
+ {0xED4E, 0x97B1}, //19124 #CJK UNIFIED IDEOGRAPH
+ {0xED4F, 0x97B3}, //19125 #CJK UNIFIED IDEOGRAPH
+ {0xED50, 0x97B5}, //19126 #CJK UNIFIED IDEOGRAPH
+ {0xED51, 0x97B6}, //19127 #CJK UNIFIED IDEOGRAPH
+ {0xED52, 0x97B7}, //19128 #CJK UNIFIED IDEOGRAPH
+ {0xED53, 0x97B8}, //19129 #CJK UNIFIED IDEOGRAPH
+ {0xED54, 0x97B9}, //19130 #CJK UNIFIED IDEOGRAPH
+ {0xED55, 0x97BA}, //19131 #CJK UNIFIED IDEOGRAPH
+ {0xED56, 0x97BB}, //19132 #CJK UNIFIED IDEOGRAPH
+ {0xED57, 0x97BC}, //19133 #CJK UNIFIED IDEOGRAPH
+ {0xED58, 0x97BD}, //19134 #CJK UNIFIED IDEOGRAPH
+ {0xED59, 0x97BE}, //19135 #CJK UNIFIED IDEOGRAPH
+ {0xED5A, 0x97BF}, //19136 #CJK UNIFIED IDEOGRAPH
+ {0xED5B, 0x97C0}, //19137 #CJK UNIFIED IDEOGRAPH
+ {0xED5C, 0x97C1}, //19138 #CJK UNIFIED IDEOGRAPH
+ {0xED5D, 0x97C2}, //19139 #CJK UNIFIED IDEOGRAPH
+ {0xED5E, 0x97C3}, //19140 #CJK UNIFIED IDEOGRAPH
+ {0xED5F, 0x97C4}, //19141 #CJK UNIFIED IDEOGRAPH
+ {0xED60, 0x97C5}, //19142 #CJK UNIFIED IDEOGRAPH
+ {0xED61, 0x97C6}, //19143 #CJK UNIFIED IDEOGRAPH
+ {0xED62, 0x97C7}, //19144 #CJK UNIFIED IDEOGRAPH
+ {0xED63, 0x97C8}, //19145 #CJK UNIFIED IDEOGRAPH
+ {0xED64, 0x97C9}, //19146 #CJK UNIFIED IDEOGRAPH
+ {0xED65, 0x97CA}, //19147 #CJK UNIFIED IDEOGRAPH
+ {0xED66, 0x97CB}, //19148 #CJK UNIFIED IDEOGRAPH
+ {0xED67, 0x97CC}, //19149 #CJK UNIFIED IDEOGRAPH
+ {0xED68, 0x97CD}, //19150 #CJK UNIFIED IDEOGRAPH
+ {0xED69, 0x97CE}, //19151 #CJK UNIFIED IDEOGRAPH
+ {0xED6A, 0x97CF}, //19152 #CJK UNIFIED IDEOGRAPH
+ {0xED6B, 0x97D0}, //19153 #CJK UNIFIED IDEOGRAPH
+ {0xED6C, 0x97D1}, //19154 #CJK UNIFIED IDEOGRAPH
+ {0xED6D, 0x97D2}, //19155 #CJK UNIFIED IDEOGRAPH
+ {0xED6E, 0x97D3}, //19156 #CJK UNIFIED IDEOGRAPH
+ {0xED6F, 0x97D4}, //19157 #CJK UNIFIED IDEOGRAPH
+ {0xED70, 0x97D5}, //19158 #CJK UNIFIED IDEOGRAPH
+ {0xED71, 0x97D6}, //19159 #CJK UNIFIED IDEOGRAPH
+ {0xED72, 0x97D7}, //19160 #CJK UNIFIED IDEOGRAPH
+ {0xED73, 0x97D8}, //19161 #CJK UNIFIED IDEOGRAPH
+ {0xED74, 0x97D9}, //19162 #CJK UNIFIED IDEOGRAPH
+ {0xED75, 0x97DA}, //19163 #CJK UNIFIED IDEOGRAPH
+ {0xED76, 0x97DB}, //19164 #CJK UNIFIED IDEOGRAPH
+ {0xED77, 0x97DC}, //19165 #CJK UNIFIED IDEOGRAPH
+ {0xED78, 0x97DD}, //19166 #CJK UNIFIED IDEOGRAPH
+ {0xED79, 0x97DE}, //19167 #CJK UNIFIED IDEOGRAPH
+ {0xED7A, 0x97DF}, //19168 #CJK UNIFIED IDEOGRAPH
+ {0xED7B, 0x97E0}, //19169 #CJK UNIFIED IDEOGRAPH
+ {0xED7C, 0x97E1}, //19170 #CJK UNIFIED IDEOGRAPH
+ {0xED7D, 0x97E2}, //19171 #CJK UNIFIED IDEOGRAPH
+ {0xED7E, 0x97E3}, //19172 #CJK UNIFIED IDEOGRAPH
+ {0xED80, 0x97E4}, //19173 #CJK UNIFIED IDEOGRAPH
+ {0xED81, 0x97E5}, //19174 #CJK UNIFIED IDEOGRAPH
+ {0xED82, 0x97E8}, //19175 #CJK UNIFIED IDEOGRAPH
+ {0xED83, 0x97EE}, //19176 #CJK UNIFIED IDEOGRAPH
+ {0xED84, 0x97EF}, //19177 #CJK UNIFIED IDEOGRAPH
+ {0xED85, 0x97F0}, //19178 #CJK UNIFIED IDEOGRAPH
+ {0xED86, 0x97F1}, //19179 #CJK UNIFIED IDEOGRAPH
+ {0xED87, 0x97F2}, //19180 #CJK UNIFIED IDEOGRAPH
+ {0xED88, 0x97F4}, //19181 #CJK UNIFIED IDEOGRAPH
+ {0xED89, 0x97F7}, //19182 #CJK UNIFIED IDEOGRAPH
+ {0xED8A, 0x97F8}, //19183 #CJK UNIFIED IDEOGRAPH
+ {0xED8B, 0x97F9}, //19184 #CJK UNIFIED IDEOGRAPH
+ {0xED8C, 0x97FA}, //19185 #CJK UNIFIED IDEOGRAPH
+ {0xED8D, 0x97FB}, //19186 #CJK UNIFIED IDEOGRAPH
+ {0xED8E, 0x97FC}, //19187 #CJK UNIFIED IDEOGRAPH
+ {0xED8F, 0x97FD}, //19188 #CJK UNIFIED IDEOGRAPH
+ {0xED90, 0x97FE}, //19189 #CJK UNIFIED IDEOGRAPH
+ {0xED91, 0x97FF}, //19190 #CJK UNIFIED IDEOGRAPH
+ {0xED92, 0x9800}, //19191 #CJK UNIFIED IDEOGRAPH
+ {0xED93, 0x9801}, //19192 #CJK UNIFIED IDEOGRAPH
+ {0xED94, 0x9802}, //19193 #CJK UNIFIED IDEOGRAPH
+ {0xED95, 0x9803}, //19194 #CJK UNIFIED IDEOGRAPH
+ {0xED96, 0x9804}, //19195 #CJK UNIFIED IDEOGRAPH
+ {0xED97, 0x9805}, //19196 #CJK UNIFIED IDEOGRAPH
+ {0xED98, 0x9806}, //19197 #CJK UNIFIED IDEOGRAPH
+ {0xED99, 0x9807}, //19198 #CJK UNIFIED IDEOGRAPH
+ {0xED9A, 0x9808}, //19199 #CJK UNIFIED IDEOGRAPH
+ {0xED9B, 0x9809}, //19200 #CJK UNIFIED IDEOGRAPH
+ {0xED9C, 0x980A}, //19201 #CJK UNIFIED IDEOGRAPH
+ {0xED9D, 0x980B}, //19202 #CJK UNIFIED IDEOGRAPH
+ {0xED9E, 0x980C}, //19203 #CJK UNIFIED IDEOGRAPH
+ {0xED9F, 0x980D}, //19204 #CJK UNIFIED IDEOGRAPH
+ {0xEDA0, 0x980E}, //19205 #CJK UNIFIED IDEOGRAPH
+ {0xEDA1, 0x603C}, //19206 #CJK UNIFIED IDEOGRAPH
+ {0xEDA2, 0x605D}, //19207 #CJK UNIFIED IDEOGRAPH
+ {0xEDA3, 0x605A}, //19208 #CJK UNIFIED IDEOGRAPH
+ {0xEDA4, 0x6067}, //19209 #CJK UNIFIED IDEOGRAPH
+ {0xEDA5, 0x6041}, //19210 #CJK UNIFIED IDEOGRAPH
+ {0xEDA6, 0x6059}, //19211 #CJK UNIFIED IDEOGRAPH
+ {0xEDA7, 0x6063}, //19212 #CJK UNIFIED IDEOGRAPH
+ {0xEDA8, 0x60AB}, //19213 #CJK UNIFIED IDEOGRAPH
+ {0xEDA9, 0x6106}, //19214 #CJK UNIFIED IDEOGRAPH
+ {0xEDAA, 0x610D}, //19215 #CJK UNIFIED IDEOGRAPH
+ {0xEDAB, 0x615D}, //19216 #CJK UNIFIED IDEOGRAPH
+ {0xEDAC, 0x61A9}, //19217 #CJK UNIFIED IDEOGRAPH
+ {0xEDAD, 0x619D}, //19218 #CJK UNIFIED IDEOGRAPH
+ {0xEDAE, 0x61CB}, //19219 #CJK UNIFIED IDEOGRAPH
+ {0xEDAF, 0x61D1}, //19220 #CJK UNIFIED IDEOGRAPH
+ {0xEDB0, 0x6206}, //19221 #CJK UNIFIED IDEOGRAPH
+ {0xEDB1, 0x8080}, //19222 #CJK UNIFIED IDEOGRAPH
+ {0xEDB2, 0x807F}, //19223 #CJK UNIFIED IDEOGRAPH
+ {0xEDB3, 0x6C93}, //19224 #CJK UNIFIED IDEOGRAPH
+ {0xEDB4, 0x6CF6}, //19225 #CJK UNIFIED IDEOGRAPH
+ {0xEDB5, 0x6DFC}, //19226 #CJK UNIFIED IDEOGRAPH
+ {0xEDB6, 0x77F6}, //19227 #CJK UNIFIED IDEOGRAPH
+ {0xEDB7, 0x77F8}, //19228 #CJK UNIFIED IDEOGRAPH
+ {0xEDB8, 0x7800}, //19229 #CJK UNIFIED IDEOGRAPH
+ {0xEDB9, 0x7809}, //19230 #CJK UNIFIED IDEOGRAPH
+ {0xEDBA, 0x7817}, //19231 #CJK UNIFIED IDEOGRAPH
+ {0xEDBB, 0x7818}, //19232 #CJK UNIFIED IDEOGRAPH
+ {0xEDBC, 0x7811}, //19233 #CJK UNIFIED IDEOGRAPH
+ {0xEDBD, 0x65AB}, //19234 #CJK UNIFIED IDEOGRAPH
+ {0xEDBE, 0x782D}, //19235 #CJK UNIFIED IDEOGRAPH
+ {0xEDBF, 0x781C}, //19236 #CJK UNIFIED IDEOGRAPH
+ {0xEDC0, 0x781D}, //19237 #CJK UNIFIED IDEOGRAPH
+ {0xEDC1, 0x7839}, //19238 #CJK UNIFIED IDEOGRAPH
+ {0xEDC2, 0x783A}, //19239 #CJK UNIFIED IDEOGRAPH
+ {0xEDC3, 0x783B}, //19240 #CJK UNIFIED IDEOGRAPH
+ {0xEDC4, 0x781F}, //19241 #CJK UNIFIED IDEOGRAPH
+ {0xEDC5, 0x783C}, //19242 #CJK UNIFIED IDEOGRAPH
+ {0xEDC6, 0x7825}, //19243 #CJK UNIFIED IDEOGRAPH
+ {0xEDC7, 0x782C}, //19244 #CJK UNIFIED IDEOGRAPH
+ {0xEDC8, 0x7823}, //19245 #CJK UNIFIED IDEOGRAPH
+ {0xEDC9, 0x7829}, //19246 #CJK UNIFIED IDEOGRAPH
+ {0xEDCA, 0x784E}, //19247 #CJK UNIFIED IDEOGRAPH
+ {0xEDCB, 0x786D}, //19248 #CJK UNIFIED IDEOGRAPH
+ {0xEDCC, 0x7856}, //19249 #CJK UNIFIED IDEOGRAPH
+ {0xEDCD, 0x7857}, //19250 #CJK UNIFIED IDEOGRAPH
+ {0xEDCE, 0x7826}, //19251 #CJK UNIFIED IDEOGRAPH
+ {0xEDCF, 0x7850}, //19252 #CJK UNIFIED IDEOGRAPH
+ {0xEDD0, 0x7847}, //19253 #CJK UNIFIED IDEOGRAPH
+ {0xEDD1, 0x784C}, //19254 #CJK UNIFIED IDEOGRAPH
+ {0xEDD2, 0x786A}, //19255 #CJK UNIFIED IDEOGRAPH
+ {0xEDD3, 0x789B}, //19256 #CJK UNIFIED IDEOGRAPH
+ {0xEDD4, 0x7893}, //19257 #CJK UNIFIED IDEOGRAPH
+ {0xEDD5, 0x789A}, //19258 #CJK UNIFIED IDEOGRAPH
+ {0xEDD6, 0x7887}, //19259 #CJK UNIFIED IDEOGRAPH
+ {0xEDD7, 0x789C}, //19260 #CJK UNIFIED IDEOGRAPH
+ {0xEDD8, 0x78A1}, //19261 #CJK UNIFIED IDEOGRAPH
+ {0xEDD9, 0x78A3}, //19262 #CJK UNIFIED IDEOGRAPH
+ {0xEDDA, 0x78B2}, //19263 #CJK UNIFIED IDEOGRAPH
+ {0xEDDB, 0x78B9}, //19264 #CJK UNIFIED IDEOGRAPH
+ {0xEDDC, 0x78A5}, //19265 #CJK UNIFIED IDEOGRAPH
+ {0xEDDD, 0x78D4}, //19266 #CJK UNIFIED IDEOGRAPH
+ {0xEDDE, 0x78D9}, //19267 #CJK UNIFIED IDEOGRAPH
+ {0xEDDF, 0x78C9}, //19268 #CJK UNIFIED IDEOGRAPH
+ {0xEDE0, 0x78EC}, //19269 #CJK UNIFIED IDEOGRAPH
+ {0xEDE1, 0x78F2}, //19270 #CJK UNIFIED IDEOGRAPH
+ {0xEDE2, 0x7905}, //19271 #CJK UNIFIED IDEOGRAPH
+ {0xEDE3, 0x78F4}, //19272 #CJK UNIFIED IDEOGRAPH
+ {0xEDE4, 0x7913}, //19273 #CJK UNIFIED IDEOGRAPH
+ {0xEDE5, 0x7924}, //19274 #CJK UNIFIED IDEOGRAPH
+ {0xEDE6, 0x791E}, //19275 #CJK UNIFIED IDEOGRAPH
+ {0xEDE7, 0x7934}, //19276 #CJK UNIFIED IDEOGRAPH
+ {0xEDE8, 0x9F9B}, //19277 #CJK UNIFIED IDEOGRAPH
+ {0xEDE9, 0x9EF9}, //19278 #CJK UNIFIED IDEOGRAPH
+ {0xEDEA, 0x9EFB}, //19279 #CJK UNIFIED IDEOGRAPH
+ {0xEDEB, 0x9EFC}, //19280 #CJK UNIFIED IDEOGRAPH
+ {0xEDEC, 0x76F1}, //19281 #CJK UNIFIED IDEOGRAPH
+ {0xEDED, 0x7704}, //19282 #CJK UNIFIED IDEOGRAPH
+ {0xEDEE, 0x770D}, //19283 #CJK UNIFIED IDEOGRAPH
+ {0xEDEF, 0x76F9}, //19284 #CJK UNIFIED IDEOGRAPH
+ {0xEDF0, 0x7707}, //19285 #CJK UNIFIED IDEOGRAPH
+ {0xEDF1, 0x7708}, //19286 #CJK UNIFIED IDEOGRAPH
+ {0xEDF2, 0x771A}, //19287 #CJK UNIFIED IDEOGRAPH
+ {0xEDF3, 0x7722}, //19288 #CJK UNIFIED IDEOGRAPH
+ {0xEDF4, 0x7719}, //19289 #CJK UNIFIED IDEOGRAPH
+ {0xEDF5, 0x772D}, //19290 #CJK UNIFIED IDEOGRAPH
+ {0xEDF6, 0x7726}, //19291 #CJK UNIFIED IDEOGRAPH
+ {0xEDF7, 0x7735}, //19292 #CJK UNIFIED IDEOGRAPH
+ {0xEDF8, 0x7738}, //19293 #CJK UNIFIED IDEOGRAPH
+ {0xEDF9, 0x7750}, //19294 #CJK UNIFIED IDEOGRAPH
+ {0xEDFA, 0x7751}, //19295 #CJK UNIFIED IDEOGRAPH
+ {0xEDFB, 0x7747}, //19296 #CJK UNIFIED IDEOGRAPH
+ {0xEDFC, 0x7743}, //19297 #CJK UNIFIED IDEOGRAPH
+ {0xEDFD, 0x775A}, //19298 #CJK UNIFIED IDEOGRAPH
+ {0xEDFE, 0x7768}, //19299 #CJK UNIFIED IDEOGRAPH
+ {0xEE40, 0x980F}, //19300 #CJK UNIFIED IDEOGRAPH
+ {0xEE41, 0x9810}, //19301 #CJK UNIFIED IDEOGRAPH
+ {0xEE42, 0x9811}, //19302 #CJK UNIFIED IDEOGRAPH
+ {0xEE43, 0x9812}, //19303 #CJK UNIFIED IDEOGRAPH
+ {0xEE44, 0x9813}, //19304 #CJK UNIFIED IDEOGRAPH
+ {0xEE45, 0x9814}, //19305 #CJK UNIFIED IDEOGRAPH
+ {0xEE46, 0x9815}, //19306 #CJK UNIFIED IDEOGRAPH
+ {0xEE47, 0x9816}, //19307 #CJK UNIFIED IDEOGRAPH
+ {0xEE48, 0x9817}, //19308 #CJK UNIFIED IDEOGRAPH
+ {0xEE49, 0x9818}, //19309 #CJK UNIFIED IDEOGRAPH
+ {0xEE4A, 0x9819}, //19310 #CJK UNIFIED IDEOGRAPH
+ {0xEE4B, 0x981A}, //19311 #CJK UNIFIED IDEOGRAPH
+ {0xEE4C, 0x981B}, //19312 #CJK UNIFIED IDEOGRAPH
+ {0xEE4D, 0x981C}, //19313 #CJK UNIFIED IDEOGRAPH
+ {0xEE4E, 0x981D}, //19314 #CJK UNIFIED IDEOGRAPH
+ {0xEE4F, 0x981E}, //19315 #CJK UNIFIED IDEOGRAPH
+ {0xEE50, 0x981F}, //19316 #CJK UNIFIED IDEOGRAPH
+ {0xEE51, 0x9820}, //19317 #CJK UNIFIED IDEOGRAPH
+ {0xEE52, 0x9821}, //19318 #CJK UNIFIED IDEOGRAPH
+ {0xEE53, 0x9822}, //19319 #CJK UNIFIED IDEOGRAPH
+ {0xEE54, 0x9823}, //19320 #CJK UNIFIED IDEOGRAPH
+ {0xEE55, 0x9824}, //19321 #CJK UNIFIED IDEOGRAPH
+ {0xEE56, 0x9825}, //19322 #CJK UNIFIED IDEOGRAPH
+ {0xEE57, 0x9826}, //19323 #CJK UNIFIED IDEOGRAPH
+ {0xEE58, 0x9827}, //19324 #CJK UNIFIED IDEOGRAPH
+ {0xEE59, 0x9828}, //19325 #CJK UNIFIED IDEOGRAPH
+ {0xEE5A, 0x9829}, //19326 #CJK UNIFIED IDEOGRAPH
+ {0xEE5B, 0x982A}, //19327 #CJK UNIFIED IDEOGRAPH
+ {0xEE5C, 0x982B}, //19328 #CJK UNIFIED IDEOGRAPH
+ {0xEE5D, 0x982C}, //19329 #CJK UNIFIED IDEOGRAPH
+ {0xEE5E, 0x982D}, //19330 #CJK UNIFIED IDEOGRAPH
+ {0xEE5F, 0x982E}, //19331 #CJK UNIFIED IDEOGRAPH
+ {0xEE60, 0x982F}, //19332 #CJK UNIFIED IDEOGRAPH
+ {0xEE61, 0x9830}, //19333 #CJK UNIFIED IDEOGRAPH
+ {0xEE62, 0x9831}, //19334 #CJK UNIFIED IDEOGRAPH
+ {0xEE63, 0x9832}, //19335 #CJK UNIFIED IDEOGRAPH
+ {0xEE64, 0x9833}, //19336 #CJK UNIFIED IDEOGRAPH
+ {0xEE65, 0x9834}, //19337 #CJK UNIFIED IDEOGRAPH
+ {0xEE66, 0x9835}, //19338 #CJK UNIFIED IDEOGRAPH
+ {0xEE67, 0x9836}, //19339 #CJK UNIFIED IDEOGRAPH
+ {0xEE68, 0x9837}, //19340 #CJK UNIFIED IDEOGRAPH
+ {0xEE69, 0x9838}, //19341 #CJK UNIFIED IDEOGRAPH
+ {0xEE6A, 0x9839}, //19342 #CJK UNIFIED IDEOGRAPH
+ {0xEE6B, 0x983A}, //19343 #CJK UNIFIED IDEOGRAPH
+ {0xEE6C, 0x983B}, //19344 #CJK UNIFIED IDEOGRAPH
+ {0xEE6D, 0x983C}, //19345 #CJK UNIFIED IDEOGRAPH
+ {0xEE6E, 0x983D}, //19346 #CJK UNIFIED IDEOGRAPH
+ {0xEE6F, 0x983E}, //19347 #CJK UNIFIED IDEOGRAPH
+ {0xEE70, 0x983F}, //19348 #CJK UNIFIED IDEOGRAPH
+ {0xEE71, 0x9840}, //19349 #CJK UNIFIED IDEOGRAPH
+ {0xEE72, 0x9841}, //19350 #CJK UNIFIED IDEOGRAPH
+ {0xEE73, 0x9842}, //19351 #CJK UNIFIED IDEOGRAPH
+ {0xEE74, 0x9843}, //19352 #CJK UNIFIED IDEOGRAPH
+ {0xEE75, 0x9844}, //19353 #CJK UNIFIED IDEOGRAPH
+ {0xEE76, 0x9845}, //19354 #CJK UNIFIED IDEOGRAPH
+ {0xEE77, 0x9846}, //19355 #CJK UNIFIED IDEOGRAPH
+ {0xEE78, 0x9847}, //19356 #CJK UNIFIED IDEOGRAPH
+ {0xEE79, 0x9848}, //19357 #CJK UNIFIED IDEOGRAPH
+ {0xEE7A, 0x9849}, //19358 #CJK UNIFIED IDEOGRAPH
+ {0xEE7B, 0x984A}, //19359 #CJK UNIFIED IDEOGRAPH
+ {0xEE7C, 0x984B}, //19360 #CJK UNIFIED IDEOGRAPH
+ {0xEE7D, 0x984C}, //19361 #CJK UNIFIED IDEOGRAPH
+ {0xEE7E, 0x984D}, //19362 #CJK UNIFIED IDEOGRAPH
+ {0xEE80, 0x984E}, //19363 #CJK UNIFIED IDEOGRAPH
+ {0xEE81, 0x984F}, //19364 #CJK UNIFIED IDEOGRAPH
+ {0xEE82, 0x9850}, //19365 #CJK UNIFIED IDEOGRAPH
+ {0xEE83, 0x9851}, //19366 #CJK UNIFIED IDEOGRAPH
+ {0xEE84, 0x9852}, //19367 #CJK UNIFIED IDEOGRAPH
+ {0xEE85, 0x9853}, //19368 #CJK UNIFIED IDEOGRAPH
+ {0xEE86, 0x9854}, //19369 #CJK UNIFIED IDEOGRAPH
+ {0xEE87, 0x9855}, //19370 #CJK UNIFIED IDEOGRAPH
+ {0xEE88, 0x9856}, //19371 #CJK UNIFIED IDEOGRAPH
+ {0xEE89, 0x9857}, //19372 #CJK UNIFIED IDEOGRAPH
+ {0xEE8A, 0x9858}, //19373 #CJK UNIFIED IDEOGRAPH
+ {0xEE8B, 0x9859}, //19374 #CJK UNIFIED IDEOGRAPH
+ {0xEE8C, 0x985A}, //19375 #CJK UNIFIED IDEOGRAPH
+ {0xEE8D, 0x985B}, //19376 #CJK UNIFIED IDEOGRAPH
+ {0xEE8E, 0x985C}, //19377 #CJK UNIFIED IDEOGRAPH
+ {0xEE8F, 0x985D}, //19378 #CJK UNIFIED IDEOGRAPH
+ {0xEE90, 0x985E}, //19379 #CJK UNIFIED IDEOGRAPH
+ {0xEE91, 0x985F}, //19380 #CJK UNIFIED IDEOGRAPH
+ {0xEE92, 0x9860}, //19381 #CJK UNIFIED IDEOGRAPH
+ {0xEE93, 0x9861}, //19382 #CJK UNIFIED IDEOGRAPH
+ {0xEE94, 0x9862}, //19383 #CJK UNIFIED IDEOGRAPH
+ {0xEE95, 0x9863}, //19384 #CJK UNIFIED IDEOGRAPH
+ {0xEE96, 0x9864}, //19385 #CJK UNIFIED IDEOGRAPH
+ {0xEE97, 0x9865}, //19386 #CJK UNIFIED IDEOGRAPH
+ {0xEE98, 0x9866}, //19387 #CJK UNIFIED IDEOGRAPH
+ {0xEE99, 0x9867}, //19388 #CJK UNIFIED IDEOGRAPH
+ {0xEE9A, 0x9868}, //19389 #CJK UNIFIED IDEOGRAPH
+ {0xEE9B, 0x9869}, //19390 #CJK UNIFIED IDEOGRAPH
+ {0xEE9C, 0x986A}, //19391 #CJK UNIFIED IDEOGRAPH
+ {0xEE9D, 0x986B}, //19392 #CJK UNIFIED IDEOGRAPH
+ {0xEE9E, 0x986C}, //19393 #CJK UNIFIED IDEOGRAPH
+ {0xEE9F, 0x986D}, //19394 #CJK UNIFIED IDEOGRAPH
+ {0xEEA0, 0x986E}, //19395 #CJK UNIFIED IDEOGRAPH
+ {0xEEA1, 0x7762}, //19396 #CJK UNIFIED IDEOGRAPH
+ {0xEEA2, 0x7765}, //19397 #CJK UNIFIED IDEOGRAPH
+ {0xEEA3, 0x777F}, //19398 #CJK UNIFIED IDEOGRAPH
+ {0xEEA4, 0x778D}, //19399 #CJK UNIFIED IDEOGRAPH
+ {0xEEA5, 0x777D}, //19400 #CJK UNIFIED IDEOGRAPH
+ {0xEEA6, 0x7780}, //19401 #CJK UNIFIED IDEOGRAPH
+ {0xEEA7, 0x778C}, //19402 #CJK UNIFIED IDEOGRAPH
+ {0xEEA8, 0x7791}, //19403 #CJK UNIFIED IDEOGRAPH
+ {0xEEA9, 0x779F}, //19404 #CJK UNIFIED IDEOGRAPH
+ {0xEEAA, 0x77A0}, //19405 #CJK UNIFIED IDEOGRAPH
+ {0xEEAB, 0x77B0}, //19406 #CJK UNIFIED IDEOGRAPH
+ {0xEEAC, 0x77B5}, //19407 #CJK UNIFIED IDEOGRAPH
+ {0xEEAD, 0x77BD}, //19408 #CJK UNIFIED IDEOGRAPH
+ {0xEEAE, 0x753A}, //19409 #CJK UNIFIED IDEOGRAPH
+ {0xEEAF, 0x7540}, //19410 #CJK UNIFIED IDEOGRAPH
+ {0xEEB0, 0x754E}, //19411 #CJK UNIFIED IDEOGRAPH
+ {0xEEB1, 0x754B}, //19412 #CJK UNIFIED IDEOGRAPH
+ {0xEEB2, 0x7548}, //19413 #CJK UNIFIED IDEOGRAPH
+ {0xEEB3, 0x755B}, //19414 #CJK UNIFIED IDEOGRAPH
+ {0xEEB4, 0x7572}, //19415 #CJK UNIFIED IDEOGRAPH
+ {0xEEB5, 0x7579}, //19416 #CJK UNIFIED IDEOGRAPH
+ {0xEEB6, 0x7583}, //19417 #CJK UNIFIED IDEOGRAPH
+ {0xEEB7, 0x7F58}, //19418 #CJK UNIFIED IDEOGRAPH
+ {0xEEB8, 0x7F61}, //19419 #CJK UNIFIED IDEOGRAPH
+ {0xEEB9, 0x7F5F}, //19420 #CJK UNIFIED IDEOGRAPH
+ {0xEEBA, 0x8A48}, //19421 #CJK UNIFIED IDEOGRAPH
+ {0xEEBB, 0x7F68}, //19422 #CJK UNIFIED IDEOGRAPH
+ {0xEEBC, 0x7F74}, //19423 #CJK UNIFIED IDEOGRAPH
+ {0xEEBD, 0x7F71}, //19424 #CJK UNIFIED IDEOGRAPH
+ {0xEEBE, 0x7F79}, //19425 #CJK UNIFIED IDEOGRAPH
+ {0xEEBF, 0x7F81}, //19426 #CJK UNIFIED IDEOGRAPH
+ {0xEEC0, 0x7F7E}, //19427 #CJK UNIFIED IDEOGRAPH
+ {0xEEC1, 0x76CD}, //19428 #CJK UNIFIED IDEOGRAPH
+ {0xEEC2, 0x76E5}, //19429 #CJK UNIFIED IDEOGRAPH
+ {0xEEC3, 0x8832}, //19430 #CJK UNIFIED IDEOGRAPH
+ {0xEEC4, 0x9485}, //19431 #CJK UNIFIED IDEOGRAPH
+ {0xEEC5, 0x9486}, //19432 #CJK UNIFIED IDEOGRAPH
+ {0xEEC6, 0x9487}, //19433 #CJK UNIFIED IDEOGRAPH
+ {0xEEC7, 0x948B}, //19434 #CJK UNIFIED IDEOGRAPH
+ {0xEEC8, 0x948A}, //19435 #CJK UNIFIED IDEOGRAPH
+ {0xEEC9, 0x948C}, //19436 #CJK UNIFIED IDEOGRAPH
+ {0xEECA, 0x948D}, //19437 #CJK UNIFIED IDEOGRAPH
+ {0xEECB, 0x948F}, //19438 #CJK UNIFIED IDEOGRAPH
+ {0xEECC, 0x9490}, //19439 #CJK UNIFIED IDEOGRAPH
+ {0xEECD, 0x9494}, //19440 #CJK UNIFIED IDEOGRAPH
+ {0xEECE, 0x9497}, //19441 #CJK UNIFIED IDEOGRAPH
+ {0xEECF, 0x9495}, //19442 #CJK UNIFIED IDEOGRAPH
+ {0xEED0, 0x949A}, //19443 #CJK UNIFIED IDEOGRAPH
+ {0xEED1, 0x949B}, //19444 #CJK UNIFIED IDEOGRAPH
+ {0xEED2, 0x949C}, //19445 #CJK UNIFIED IDEOGRAPH
+ {0xEED3, 0x94A3}, //19446 #CJK UNIFIED IDEOGRAPH
+ {0xEED4, 0x94A4}, //19447 #CJK UNIFIED IDEOGRAPH
+ {0xEED5, 0x94AB}, //19448 #CJK UNIFIED IDEOGRAPH
+ {0xEED6, 0x94AA}, //19449 #CJK UNIFIED IDEOGRAPH
+ {0xEED7, 0x94AD}, //19450 #CJK UNIFIED IDEOGRAPH
+ {0xEED8, 0x94AC}, //19451 #CJK UNIFIED IDEOGRAPH
+ {0xEED9, 0x94AF}, //19452 #CJK UNIFIED IDEOGRAPH
+ {0xEEDA, 0x94B0}, //19453 #CJK UNIFIED IDEOGRAPH
+ {0xEEDB, 0x94B2}, //19454 #CJK UNIFIED IDEOGRAPH
+ {0xEEDC, 0x94B4}, //19455 #CJK UNIFIED IDEOGRAPH
+ {0xEEDD, 0x94B6}, //19456 #CJK UNIFIED IDEOGRAPH
+ {0xEEDE, 0x94B7}, //19457 #CJK UNIFIED IDEOGRAPH
+ {0xEEDF, 0x94B8}, //19458 #CJK UNIFIED IDEOGRAPH
+ {0xEEE0, 0x94B9}, //19459 #CJK UNIFIED IDEOGRAPH
+ {0xEEE1, 0x94BA}, //19460 #CJK UNIFIED IDEOGRAPH
+ {0xEEE2, 0x94BC}, //19461 #CJK UNIFIED IDEOGRAPH
+ {0xEEE3, 0x94BD}, //19462 #CJK UNIFIED IDEOGRAPH
+ {0xEEE4, 0x94BF}, //19463 #CJK UNIFIED IDEOGRAPH
+ {0xEEE5, 0x94C4}, //19464 #CJK UNIFIED IDEOGRAPH
+ {0xEEE6, 0x94C8}, //19465 #CJK UNIFIED IDEOGRAPH
+ {0xEEE7, 0x94C9}, //19466 #CJK UNIFIED IDEOGRAPH
+ {0xEEE8, 0x94CA}, //19467 #CJK UNIFIED IDEOGRAPH
+ {0xEEE9, 0x94CB}, //19468 #CJK UNIFIED IDEOGRAPH
+ {0xEEEA, 0x94CC}, //19469 #CJK UNIFIED IDEOGRAPH
+ {0xEEEB, 0x94CD}, //19470 #CJK UNIFIED IDEOGRAPH
+ {0xEEEC, 0x94CE}, //19471 #CJK UNIFIED IDEOGRAPH
+ {0xEEED, 0x94D0}, //19472 #CJK UNIFIED IDEOGRAPH
+ {0xEEEE, 0x94D1}, //19473 #CJK UNIFIED IDEOGRAPH
+ {0xEEEF, 0x94D2}, //19474 #CJK UNIFIED IDEOGRAPH
+ {0xEEF0, 0x94D5}, //19475 #CJK UNIFIED IDEOGRAPH
+ {0xEEF1, 0x94D6}, //19476 #CJK UNIFIED IDEOGRAPH
+ {0xEEF2, 0x94D7}, //19477 #CJK UNIFIED IDEOGRAPH
+ {0xEEF3, 0x94D9}, //19478 #CJK UNIFIED IDEOGRAPH
+ {0xEEF4, 0x94D8}, //19479 #CJK UNIFIED IDEOGRAPH
+ {0xEEF5, 0x94DB}, //19480 #CJK UNIFIED IDEOGRAPH
+ {0xEEF6, 0x94DE}, //19481 #CJK UNIFIED IDEOGRAPH
+ {0xEEF7, 0x94DF}, //19482 #CJK UNIFIED IDEOGRAPH
+ {0xEEF8, 0x94E0}, //19483 #CJK UNIFIED IDEOGRAPH
+ {0xEEF9, 0x94E2}, //19484 #CJK UNIFIED IDEOGRAPH
+ {0xEEFA, 0x94E4}, //19485 #CJK UNIFIED IDEOGRAPH
+ {0xEEFB, 0x94E5}, //19486 #CJK UNIFIED IDEOGRAPH
+ {0xEEFC, 0x94E7}, //19487 #CJK UNIFIED IDEOGRAPH
+ {0xEEFD, 0x94E8}, //19488 #CJK UNIFIED IDEOGRAPH
+ {0xEEFE, 0x94EA}, //19489 #CJK UNIFIED IDEOGRAPH
+ {0xEF40, 0x986F}, //19490 #CJK UNIFIED IDEOGRAPH
+ {0xEF41, 0x9870}, //19491 #CJK UNIFIED IDEOGRAPH
+ {0xEF42, 0x9871}, //19492 #CJK UNIFIED IDEOGRAPH
+ {0xEF43, 0x9872}, //19493 #CJK UNIFIED IDEOGRAPH
+ {0xEF44, 0x9873}, //19494 #CJK UNIFIED IDEOGRAPH
+ {0xEF45, 0x9874}, //19495 #CJK UNIFIED IDEOGRAPH
+ {0xEF46, 0x988B}, //19496 #CJK UNIFIED IDEOGRAPH
+ {0xEF47, 0x988E}, //19497 #CJK UNIFIED IDEOGRAPH
+ {0xEF48, 0x9892}, //19498 #CJK UNIFIED IDEOGRAPH
+ {0xEF49, 0x9895}, //19499 #CJK UNIFIED IDEOGRAPH
+ {0xEF4A, 0x9899}, //19500 #CJK UNIFIED IDEOGRAPH
+ {0xEF4B, 0x98A3}, //19501 #CJK UNIFIED IDEOGRAPH
+ {0xEF4C, 0x98A8}, //19502 #CJK UNIFIED IDEOGRAPH
+ {0xEF4D, 0x98A9}, //19503 #CJK UNIFIED IDEOGRAPH
+ {0xEF4E, 0x98AA}, //19504 #CJK UNIFIED IDEOGRAPH
+ {0xEF4F, 0x98AB}, //19505 #CJK UNIFIED IDEOGRAPH
+ {0xEF50, 0x98AC}, //19506 #CJK UNIFIED IDEOGRAPH
+ {0xEF51, 0x98AD}, //19507 #CJK UNIFIED IDEOGRAPH
+ {0xEF52, 0x98AE}, //19508 #CJK UNIFIED IDEOGRAPH
+ {0xEF53, 0x98AF}, //19509 #CJK UNIFIED IDEOGRAPH
+ {0xEF54, 0x98B0}, //19510 #CJK UNIFIED IDEOGRAPH
+ {0xEF55, 0x98B1}, //19511 #CJK UNIFIED IDEOGRAPH
+ {0xEF56, 0x98B2}, //19512 #CJK UNIFIED IDEOGRAPH
+ {0xEF57, 0x98B3}, //19513 #CJK UNIFIED IDEOGRAPH
+ {0xEF58, 0x98B4}, //19514 #CJK UNIFIED IDEOGRAPH
+ {0xEF59, 0x98B5}, //19515 #CJK UNIFIED IDEOGRAPH
+ {0xEF5A, 0x98B6}, //19516 #CJK UNIFIED IDEOGRAPH
+ {0xEF5B, 0x98B7}, //19517 #CJK UNIFIED IDEOGRAPH
+ {0xEF5C, 0x98B8}, //19518 #CJK UNIFIED IDEOGRAPH
+ {0xEF5D, 0x98B9}, //19519 #CJK UNIFIED IDEOGRAPH
+ {0xEF5E, 0x98BA}, //19520 #CJK UNIFIED IDEOGRAPH
+ {0xEF5F, 0x98BB}, //19521 #CJK UNIFIED IDEOGRAPH
+ {0xEF60, 0x98BC}, //19522 #CJK UNIFIED IDEOGRAPH
+ {0xEF61, 0x98BD}, //19523 #CJK UNIFIED IDEOGRAPH
+ {0xEF62, 0x98BE}, //19524 #CJK UNIFIED IDEOGRAPH
+ {0xEF63, 0x98BF}, //19525 #CJK UNIFIED IDEOGRAPH
+ {0xEF64, 0x98C0}, //19526 #CJK UNIFIED IDEOGRAPH
+ {0xEF65, 0x98C1}, //19527 #CJK UNIFIED IDEOGRAPH
+ {0xEF66, 0x98C2}, //19528 #CJK UNIFIED IDEOGRAPH
+ {0xEF67, 0x98C3}, //19529 #CJK UNIFIED IDEOGRAPH
+ {0xEF68, 0x98C4}, //19530 #CJK UNIFIED IDEOGRAPH
+ {0xEF69, 0x98C5}, //19531 #CJK UNIFIED IDEOGRAPH
+ {0xEF6A, 0x98C6}, //19532 #CJK UNIFIED IDEOGRAPH
+ {0xEF6B, 0x98C7}, //19533 #CJK UNIFIED IDEOGRAPH
+ {0xEF6C, 0x98C8}, //19534 #CJK UNIFIED IDEOGRAPH
+ {0xEF6D, 0x98C9}, //19535 #CJK UNIFIED IDEOGRAPH
+ {0xEF6E, 0x98CA}, //19536 #CJK UNIFIED IDEOGRAPH
+ {0xEF6F, 0x98CB}, //19537 #CJK UNIFIED IDEOGRAPH
+ {0xEF70, 0x98CC}, //19538 #CJK UNIFIED IDEOGRAPH
+ {0xEF71, 0x98CD}, //19539 #CJK UNIFIED IDEOGRAPH
+ {0xEF72, 0x98CF}, //19540 #CJK UNIFIED IDEOGRAPH
+ {0xEF73, 0x98D0}, //19541 #CJK UNIFIED IDEOGRAPH
+ {0xEF74, 0x98D4}, //19542 #CJK UNIFIED IDEOGRAPH
+ {0xEF75, 0x98D6}, //19543 #CJK UNIFIED IDEOGRAPH
+ {0xEF76, 0x98D7}, //19544 #CJK UNIFIED IDEOGRAPH
+ {0xEF77, 0x98DB}, //19545 #CJK UNIFIED IDEOGRAPH
+ {0xEF78, 0x98DC}, //19546 #CJK UNIFIED IDEOGRAPH
+ {0xEF79, 0x98DD}, //19547 #CJK UNIFIED IDEOGRAPH
+ {0xEF7A, 0x98E0}, //19548 #CJK UNIFIED IDEOGRAPH
+ {0xEF7B, 0x98E1}, //19549 #CJK UNIFIED IDEOGRAPH
+ {0xEF7C, 0x98E2}, //19550 #CJK UNIFIED IDEOGRAPH
+ {0xEF7D, 0x98E3}, //19551 #CJK UNIFIED IDEOGRAPH
+ {0xEF7E, 0x98E4}, //19552 #CJK UNIFIED IDEOGRAPH
+ {0xEF80, 0x98E5}, //19553 #CJK UNIFIED IDEOGRAPH
+ {0xEF81, 0x98E6}, //19554 #CJK UNIFIED IDEOGRAPH
+ {0xEF82, 0x98E9}, //19555 #CJK UNIFIED IDEOGRAPH
+ {0xEF83, 0x98EA}, //19556 #CJK UNIFIED IDEOGRAPH
+ {0xEF84, 0x98EB}, //19557 #CJK UNIFIED IDEOGRAPH
+ {0xEF85, 0x98EC}, //19558 #CJK UNIFIED IDEOGRAPH
+ {0xEF86, 0x98ED}, //19559 #CJK UNIFIED IDEOGRAPH
+ {0xEF87, 0x98EE}, //19560 #CJK UNIFIED IDEOGRAPH
+ {0xEF88, 0x98EF}, //19561 #CJK UNIFIED IDEOGRAPH
+ {0xEF89, 0x98F0}, //19562 #CJK UNIFIED IDEOGRAPH
+ {0xEF8A, 0x98F1}, //19563 #CJK UNIFIED IDEOGRAPH
+ {0xEF8B, 0x98F2}, //19564 #CJK UNIFIED IDEOGRAPH
+ {0xEF8C, 0x98F3}, //19565 #CJK UNIFIED IDEOGRAPH
+ {0xEF8D, 0x98F4}, //19566 #CJK UNIFIED IDEOGRAPH
+ {0xEF8E, 0x98F5}, //19567 #CJK UNIFIED IDEOGRAPH
+ {0xEF8F, 0x98F6}, //19568 #CJK UNIFIED IDEOGRAPH
+ {0xEF90, 0x98F7}, //19569 #CJK UNIFIED IDEOGRAPH
+ {0xEF91, 0x98F8}, //19570 #CJK UNIFIED IDEOGRAPH
+ {0xEF92, 0x98F9}, //19571 #CJK UNIFIED IDEOGRAPH
+ {0xEF93, 0x98FA}, //19572 #CJK UNIFIED IDEOGRAPH
+ {0xEF94, 0x98FB}, //19573 #CJK UNIFIED IDEOGRAPH
+ {0xEF95, 0x98FC}, //19574 #CJK UNIFIED IDEOGRAPH
+ {0xEF96, 0x98FD}, //19575 #CJK UNIFIED IDEOGRAPH
+ {0xEF97, 0x98FE}, //19576 #CJK UNIFIED IDEOGRAPH
+ {0xEF98, 0x98FF}, //19577 #CJK UNIFIED IDEOGRAPH
+ {0xEF99, 0x9900}, //19578 #CJK UNIFIED IDEOGRAPH
+ {0xEF9A, 0x9901}, //19579 #CJK UNIFIED IDEOGRAPH
+ {0xEF9B, 0x9902}, //19580 #CJK UNIFIED IDEOGRAPH
+ {0xEF9C, 0x9903}, //19581 #CJK UNIFIED IDEOGRAPH
+ {0xEF9D, 0x9904}, //19582 #CJK UNIFIED IDEOGRAPH
+ {0xEF9E, 0x9905}, //19583 #CJK UNIFIED IDEOGRAPH
+ {0xEF9F, 0x9906}, //19584 #CJK UNIFIED IDEOGRAPH
+ {0xEFA0, 0x9907}, //19585 #CJK UNIFIED IDEOGRAPH
+ {0xEFA1, 0x94E9}, //19586 #CJK UNIFIED IDEOGRAPH
+ {0xEFA2, 0x94EB}, //19587 #CJK UNIFIED IDEOGRAPH
+ {0xEFA3, 0x94EE}, //19588 #CJK UNIFIED IDEOGRAPH
+ {0xEFA4, 0x94EF}, //19589 #CJK UNIFIED IDEOGRAPH
+ {0xEFA5, 0x94F3}, //19590 #CJK UNIFIED IDEOGRAPH
+ {0xEFA6, 0x94F4}, //19591 #CJK UNIFIED IDEOGRAPH
+ {0xEFA7, 0x94F5}, //19592 #CJK UNIFIED IDEOGRAPH
+ {0xEFA8, 0x94F7}, //19593 #CJK UNIFIED IDEOGRAPH
+ {0xEFA9, 0x94F9}, //19594 #CJK UNIFIED IDEOGRAPH
+ {0xEFAA, 0x94FC}, //19595 #CJK UNIFIED IDEOGRAPH
+ {0xEFAB, 0x94FD}, //19596 #CJK UNIFIED IDEOGRAPH
+ {0xEFAC, 0x94FF}, //19597 #CJK UNIFIED IDEOGRAPH
+ {0xEFAD, 0x9503}, //19598 #CJK UNIFIED IDEOGRAPH
+ {0xEFAE, 0x9502}, //19599 #CJK UNIFIED IDEOGRAPH
+ {0xEFAF, 0x9506}, //19600 #CJK UNIFIED IDEOGRAPH
+ {0xEFB0, 0x9507}, //19601 #CJK UNIFIED IDEOGRAPH
+ {0xEFB1, 0x9509}, //19602 #CJK UNIFIED IDEOGRAPH
+ {0xEFB2, 0x950A}, //19603 #CJK UNIFIED IDEOGRAPH
+ {0xEFB3, 0x950D}, //19604 #CJK UNIFIED IDEOGRAPH
+ {0xEFB4, 0x950E}, //19605 #CJK UNIFIED IDEOGRAPH
+ {0xEFB5, 0x950F}, //19606 #CJK UNIFIED IDEOGRAPH
+ {0xEFB6, 0x9512}, //19607 #CJK UNIFIED IDEOGRAPH
+ {0xEFB7, 0x9513}, //19608 #CJK UNIFIED IDEOGRAPH
+ {0xEFB8, 0x9514}, //19609 #CJK UNIFIED IDEOGRAPH
+ {0xEFB9, 0x9515}, //19610 #CJK UNIFIED IDEOGRAPH
+ {0xEFBA, 0x9516}, //19611 #CJK UNIFIED IDEOGRAPH
+ {0xEFBB, 0x9518}, //19612 #CJK UNIFIED IDEOGRAPH
+ {0xEFBC, 0x951B}, //19613 #CJK UNIFIED IDEOGRAPH
+ {0xEFBD, 0x951D}, //19614 #CJK UNIFIED IDEOGRAPH
+ {0xEFBE, 0x951E}, //19615 #CJK UNIFIED IDEOGRAPH
+ {0xEFBF, 0x951F}, //19616 #CJK UNIFIED IDEOGRAPH
+ {0xEFC0, 0x9522}, //19617 #CJK UNIFIED IDEOGRAPH
+ {0xEFC1, 0x952A}, //19618 #CJK UNIFIED IDEOGRAPH
+ {0xEFC2, 0x952B}, //19619 #CJK UNIFIED IDEOGRAPH
+ {0xEFC3, 0x9529}, //19620 #CJK UNIFIED IDEOGRAPH
+ {0xEFC4, 0x952C}, //19621 #CJK UNIFIED IDEOGRAPH
+ {0xEFC5, 0x9531}, //19622 #CJK UNIFIED IDEOGRAPH
+ {0xEFC6, 0x9532}, //19623 #CJK UNIFIED IDEOGRAPH
+ {0xEFC7, 0x9534}, //19624 #CJK UNIFIED IDEOGRAPH
+ {0xEFC8, 0x9536}, //19625 #CJK UNIFIED IDEOGRAPH
+ {0xEFC9, 0x9537}, //19626 #CJK UNIFIED IDEOGRAPH
+ {0xEFCA, 0x9538}, //19627 #CJK UNIFIED IDEOGRAPH
+ {0xEFCB, 0x953C}, //19628 #CJK UNIFIED IDEOGRAPH
+ {0xEFCC, 0x953E}, //19629 #CJK UNIFIED IDEOGRAPH
+ {0xEFCD, 0x953F}, //19630 #CJK UNIFIED IDEOGRAPH
+ {0xEFCE, 0x9542}, //19631 #CJK UNIFIED IDEOGRAPH
+ {0xEFCF, 0x9535}, //19632 #CJK UNIFIED IDEOGRAPH
+ {0xEFD0, 0x9544}, //19633 #CJK UNIFIED IDEOGRAPH
+ {0xEFD1, 0x9545}, //19634 #CJK UNIFIED IDEOGRAPH
+ {0xEFD2, 0x9546}, //19635 #CJK UNIFIED IDEOGRAPH
+ {0xEFD3, 0x9549}, //19636 #CJK UNIFIED IDEOGRAPH
+ {0xEFD4, 0x954C}, //19637 #CJK UNIFIED IDEOGRAPH
+ {0xEFD5, 0x954E}, //19638 #CJK UNIFIED IDEOGRAPH
+ {0xEFD6, 0x954F}, //19639 #CJK UNIFIED IDEOGRAPH
+ {0xEFD7, 0x9552}, //19640 #CJK UNIFIED IDEOGRAPH
+ {0xEFD8, 0x9553}, //19641 #CJK UNIFIED IDEOGRAPH
+ {0xEFD9, 0x9554}, //19642 #CJK UNIFIED IDEOGRAPH
+ {0xEFDA, 0x9556}, //19643 #CJK UNIFIED IDEOGRAPH
+ {0xEFDB, 0x9557}, //19644 #CJK UNIFIED IDEOGRAPH
+ {0xEFDC, 0x9558}, //19645 #CJK UNIFIED IDEOGRAPH
+ {0xEFDD, 0x9559}, //19646 #CJK UNIFIED IDEOGRAPH
+ {0xEFDE, 0x955B}, //19647 #CJK UNIFIED IDEOGRAPH
+ {0xEFDF, 0x955E}, //19648 #CJK UNIFIED IDEOGRAPH
+ {0xEFE0, 0x955F}, //19649 #CJK UNIFIED IDEOGRAPH
+ {0xEFE1, 0x955D}, //19650 #CJK UNIFIED IDEOGRAPH
+ {0xEFE2, 0x9561}, //19651 #CJK UNIFIED IDEOGRAPH
+ {0xEFE3, 0x9562}, //19652 #CJK UNIFIED IDEOGRAPH
+ {0xEFE4, 0x9564}, //19653 #CJK UNIFIED IDEOGRAPH
+ {0xEFE5, 0x9565}, //19654 #CJK UNIFIED IDEOGRAPH
+ {0xEFE6, 0x9566}, //19655 #CJK UNIFIED IDEOGRAPH
+ {0xEFE7, 0x9567}, //19656 #CJK UNIFIED IDEOGRAPH
+ {0xEFE8, 0x9568}, //19657 #CJK UNIFIED IDEOGRAPH
+ {0xEFE9, 0x9569}, //19658 #CJK UNIFIED IDEOGRAPH
+ {0xEFEA, 0x956A}, //19659 #CJK UNIFIED IDEOGRAPH
+ {0xEFEB, 0x956B}, //19660 #CJK UNIFIED IDEOGRAPH
+ {0xEFEC, 0x956C}, //19661 #CJK UNIFIED IDEOGRAPH
+ {0xEFED, 0x956F}, //19662 #CJK UNIFIED IDEOGRAPH
+ {0xEFEE, 0x9571}, //19663 #CJK UNIFIED IDEOGRAPH
+ {0xEFEF, 0x9572}, //19664 #CJK UNIFIED IDEOGRAPH
+ {0xEFF0, 0x9573}, //19665 #CJK UNIFIED IDEOGRAPH
+ {0xEFF1, 0x953A}, //19666 #CJK UNIFIED IDEOGRAPH
+ {0xEFF2, 0x77E7}, //19667 #CJK UNIFIED IDEOGRAPH
+ {0xEFF3, 0x77EC}, //19668 #CJK UNIFIED IDEOGRAPH
+ {0xEFF4, 0x96C9}, //19669 #CJK UNIFIED IDEOGRAPH
+ {0xEFF5, 0x79D5}, //19670 #CJK UNIFIED IDEOGRAPH
+ {0xEFF6, 0x79ED}, //19671 #CJK UNIFIED IDEOGRAPH
+ {0xEFF7, 0x79E3}, //19672 #CJK UNIFIED IDEOGRAPH
+ {0xEFF8, 0x79EB}, //19673 #CJK UNIFIED IDEOGRAPH
+ {0xEFF9, 0x7A06}, //19674 #CJK UNIFIED IDEOGRAPH
+ {0xEFFA, 0x5D47}, //19675 #CJK UNIFIED IDEOGRAPH
+ {0xEFFB, 0x7A03}, //19676 #CJK UNIFIED IDEOGRAPH
+ {0xEFFC, 0x7A02}, //19677 #CJK UNIFIED IDEOGRAPH
+ {0xEFFD, 0x7A1E}, //19678 #CJK UNIFIED IDEOGRAPH
+ {0xEFFE, 0x7A14}, //19679 #CJK UNIFIED IDEOGRAPH
+ {0xF040, 0x9908}, //19680 #CJK UNIFIED IDEOGRAPH
+ {0xF041, 0x9909}, //19681 #CJK UNIFIED IDEOGRAPH
+ {0xF042, 0x990A}, //19682 #CJK UNIFIED IDEOGRAPH
+ {0xF043, 0x990B}, //19683 #CJK UNIFIED IDEOGRAPH
+ {0xF044, 0x990C}, //19684 #CJK UNIFIED IDEOGRAPH
+ {0xF045, 0x990E}, //19685 #CJK UNIFIED IDEOGRAPH
+ {0xF046, 0x990F}, //19686 #CJK UNIFIED IDEOGRAPH
+ {0xF047, 0x9911}, //19687 #CJK UNIFIED IDEOGRAPH
+ {0xF048, 0x9912}, //19688 #CJK UNIFIED IDEOGRAPH
+ {0xF049, 0x9913}, //19689 #CJK UNIFIED IDEOGRAPH
+ {0xF04A, 0x9914}, //19690 #CJK UNIFIED IDEOGRAPH
+ {0xF04B, 0x9915}, //19691 #CJK UNIFIED IDEOGRAPH
+ {0xF04C, 0x9916}, //19692 #CJK UNIFIED IDEOGRAPH
+ {0xF04D, 0x9917}, //19693 #CJK UNIFIED IDEOGRAPH
+ {0xF04E, 0x9918}, //19694 #CJK UNIFIED IDEOGRAPH
+ {0xF04F, 0x9919}, //19695 #CJK UNIFIED IDEOGRAPH
+ {0xF050, 0x991A}, //19696 #CJK UNIFIED IDEOGRAPH
+ {0xF051, 0x991B}, //19697 #CJK UNIFIED IDEOGRAPH
+ {0xF052, 0x991C}, //19698 #CJK UNIFIED IDEOGRAPH
+ {0xF053, 0x991D}, //19699 #CJK UNIFIED IDEOGRAPH
+ {0xF054, 0x991E}, //19700 #CJK UNIFIED IDEOGRAPH
+ {0xF055, 0x991F}, //19701 #CJK UNIFIED IDEOGRAPH
+ {0xF056, 0x9920}, //19702 #CJK UNIFIED IDEOGRAPH
+ {0xF057, 0x9921}, //19703 #CJK UNIFIED IDEOGRAPH
+ {0xF058, 0x9922}, //19704 #CJK UNIFIED IDEOGRAPH
+ {0xF059, 0x9923}, //19705 #CJK UNIFIED IDEOGRAPH
+ {0xF05A, 0x9924}, //19706 #CJK UNIFIED IDEOGRAPH
+ {0xF05B, 0x9925}, //19707 #CJK UNIFIED IDEOGRAPH
+ {0xF05C, 0x9926}, //19708 #CJK UNIFIED IDEOGRAPH
+ {0xF05D, 0x9927}, //19709 #CJK UNIFIED IDEOGRAPH
+ {0xF05E, 0x9928}, //19710 #CJK UNIFIED IDEOGRAPH
+ {0xF05F, 0x9929}, //19711 #CJK UNIFIED IDEOGRAPH
+ {0xF060, 0x992A}, //19712 #CJK UNIFIED IDEOGRAPH
+ {0xF061, 0x992B}, //19713 #CJK UNIFIED IDEOGRAPH
+ {0xF062, 0x992C}, //19714 #CJK UNIFIED IDEOGRAPH
+ {0xF063, 0x992D}, //19715 #CJK UNIFIED IDEOGRAPH
+ {0xF064, 0x992F}, //19716 #CJK UNIFIED IDEOGRAPH
+ {0xF065, 0x9930}, //19717 #CJK UNIFIED IDEOGRAPH
+ {0xF066, 0x9931}, //19718 #CJK UNIFIED IDEOGRAPH
+ {0xF067, 0x9932}, //19719 #CJK UNIFIED IDEOGRAPH
+ {0xF068, 0x9933}, //19720 #CJK UNIFIED IDEOGRAPH
+ {0xF069, 0x9934}, //19721 #CJK UNIFIED IDEOGRAPH
+ {0xF06A, 0x9935}, //19722 #CJK UNIFIED IDEOGRAPH
+ {0xF06B, 0x9936}, //19723 #CJK UNIFIED IDEOGRAPH
+ {0xF06C, 0x9937}, //19724 #CJK UNIFIED IDEOGRAPH
+ {0xF06D, 0x9938}, //19725 #CJK UNIFIED IDEOGRAPH
+ {0xF06E, 0x9939}, //19726 #CJK UNIFIED IDEOGRAPH
+ {0xF06F, 0x993A}, //19727 #CJK UNIFIED IDEOGRAPH
+ {0xF070, 0x993B}, //19728 #CJK UNIFIED IDEOGRAPH
+ {0xF071, 0x993C}, //19729 #CJK UNIFIED IDEOGRAPH
+ {0xF072, 0x993D}, //19730 #CJK UNIFIED IDEOGRAPH
+ {0xF073, 0x993E}, //19731 #CJK UNIFIED IDEOGRAPH
+ {0xF074, 0x993F}, //19732 #CJK UNIFIED IDEOGRAPH
+ {0xF075, 0x9940}, //19733 #CJK UNIFIED IDEOGRAPH
+ {0xF076, 0x9941}, //19734 #CJK UNIFIED IDEOGRAPH
+ {0xF077, 0x9942}, //19735 #CJK UNIFIED IDEOGRAPH
+ {0xF078, 0x9943}, //19736 #CJK UNIFIED IDEOGRAPH
+ {0xF079, 0x9944}, //19737 #CJK UNIFIED IDEOGRAPH
+ {0xF07A, 0x9945}, //19738 #CJK UNIFIED IDEOGRAPH
+ {0xF07B, 0x9946}, //19739 #CJK UNIFIED IDEOGRAPH
+ {0xF07C, 0x9947}, //19740 #CJK UNIFIED IDEOGRAPH
+ {0xF07D, 0x9948}, //19741 #CJK UNIFIED IDEOGRAPH
+ {0xF07E, 0x9949}, //19742 #CJK UNIFIED IDEOGRAPH
+ {0xF080, 0x994A}, //19743 #CJK UNIFIED IDEOGRAPH
+ {0xF081, 0x994B}, //19744 #CJK UNIFIED IDEOGRAPH
+ {0xF082, 0x994C}, //19745 #CJK UNIFIED IDEOGRAPH
+ {0xF083, 0x994D}, //19746 #CJK UNIFIED IDEOGRAPH
+ {0xF084, 0x994E}, //19747 #CJK UNIFIED IDEOGRAPH
+ {0xF085, 0x994F}, //19748 #CJK UNIFIED IDEOGRAPH
+ {0xF086, 0x9950}, //19749 #CJK UNIFIED IDEOGRAPH
+ {0xF087, 0x9951}, //19750 #CJK UNIFIED IDEOGRAPH
+ {0xF088, 0x9952}, //19751 #CJK UNIFIED IDEOGRAPH
+ {0xF089, 0x9953}, //19752 #CJK UNIFIED IDEOGRAPH
+ {0xF08A, 0x9956}, //19753 #CJK UNIFIED IDEOGRAPH
+ {0xF08B, 0x9957}, //19754 #CJK UNIFIED IDEOGRAPH
+ {0xF08C, 0x9958}, //19755 #CJK UNIFIED IDEOGRAPH
+ {0xF08D, 0x9959}, //19756 #CJK UNIFIED IDEOGRAPH
+ {0xF08E, 0x995A}, //19757 #CJK UNIFIED IDEOGRAPH
+ {0xF08F, 0x995B}, //19758 #CJK UNIFIED IDEOGRAPH
+ {0xF090, 0x995C}, //19759 #CJK UNIFIED IDEOGRAPH
+ {0xF091, 0x995D}, //19760 #CJK UNIFIED IDEOGRAPH
+ {0xF092, 0x995E}, //19761 #CJK UNIFIED IDEOGRAPH
+ {0xF093, 0x995F}, //19762 #CJK UNIFIED IDEOGRAPH
+ {0xF094, 0x9960}, //19763 #CJK UNIFIED IDEOGRAPH
+ {0xF095, 0x9961}, //19764 #CJK UNIFIED IDEOGRAPH
+ {0xF096, 0x9962}, //19765 #CJK UNIFIED IDEOGRAPH
+ {0xF097, 0x9964}, //19766 #CJK UNIFIED IDEOGRAPH
+ {0xF098, 0x9966}, //19767 #CJK UNIFIED IDEOGRAPH
+ {0xF099, 0x9973}, //19768 #CJK UNIFIED IDEOGRAPH
+ {0xF09A, 0x9978}, //19769 #CJK UNIFIED IDEOGRAPH
+ {0xF09B, 0x9979}, //19770 #CJK UNIFIED IDEOGRAPH
+ {0xF09C, 0x997B}, //19771 #CJK UNIFIED IDEOGRAPH
+ {0xF09D, 0x997E}, //19772 #CJK UNIFIED IDEOGRAPH
+ {0xF09E, 0x9982}, //19773 #CJK UNIFIED IDEOGRAPH
+ {0xF09F, 0x9983}, //19774 #CJK UNIFIED IDEOGRAPH
+ {0xF0A0, 0x9989}, //19775 #CJK UNIFIED IDEOGRAPH
+ {0xF0A1, 0x7A39}, //19776 #CJK UNIFIED IDEOGRAPH
+ {0xF0A2, 0x7A37}, //19777 #CJK UNIFIED IDEOGRAPH
+ {0xF0A3, 0x7A51}, //19778 #CJK UNIFIED IDEOGRAPH
+ {0xF0A4, 0x9ECF}, //19779 #CJK UNIFIED IDEOGRAPH
+ {0xF0A5, 0x99A5}, //19780 #CJK UNIFIED IDEOGRAPH
+ {0xF0A6, 0x7A70}, //19781 #CJK UNIFIED IDEOGRAPH
+ {0xF0A7, 0x7688}, //19782 #CJK UNIFIED IDEOGRAPH
+ {0xF0A8, 0x768E}, //19783 #CJK UNIFIED IDEOGRAPH
+ {0xF0A9, 0x7693}, //19784 #CJK UNIFIED IDEOGRAPH
+ {0xF0AA, 0x7699}, //19785 #CJK UNIFIED IDEOGRAPH
+ {0xF0AB, 0x76A4}, //19786 #CJK UNIFIED IDEOGRAPH
+ {0xF0AC, 0x74DE}, //19787 #CJK UNIFIED IDEOGRAPH
+ {0xF0AD, 0x74E0}, //19788 #CJK UNIFIED IDEOGRAPH
+ {0xF0AE, 0x752C}, //19789 #CJK UNIFIED IDEOGRAPH
+ {0xF0AF, 0x9E20}, //19790 #CJK UNIFIED IDEOGRAPH
+ {0xF0B0, 0x9E22}, //19791 #CJK UNIFIED IDEOGRAPH
+ {0xF0B1, 0x9E28}, //19792 #CJK UNIFIED IDEOGRAPH
+ {0xF0B2, 0x9E29}, //19793 #CJK UNIFIED IDEOGRAPH
+ {0xF0B3, 0x9E2A}, //19794 #CJK UNIFIED IDEOGRAPH
+ {0xF0B4, 0x9E2B}, //19795 #CJK UNIFIED IDEOGRAPH
+ {0xF0B5, 0x9E2C}, //19796 #CJK UNIFIED IDEOGRAPH
+ {0xF0B6, 0x9E32}, //19797 #CJK UNIFIED IDEOGRAPH
+ {0xF0B7, 0x9E31}, //19798 #CJK UNIFIED IDEOGRAPH
+ {0xF0B8, 0x9E36}, //19799 #CJK UNIFIED IDEOGRAPH
+ {0xF0B9, 0x9E38}, //19800 #CJK UNIFIED IDEOGRAPH
+ {0xF0BA, 0x9E37}, //19801 #CJK UNIFIED IDEOGRAPH
+ {0xF0BB, 0x9E39}, //19802 #CJK UNIFIED IDEOGRAPH
+ {0xF0BC, 0x9E3A}, //19803 #CJK UNIFIED IDEOGRAPH
+ {0xF0BD, 0x9E3E}, //19804 #CJK UNIFIED IDEOGRAPH
+ {0xF0BE, 0x9E41}, //19805 #CJK UNIFIED IDEOGRAPH
+ {0xF0BF, 0x9E42}, //19806 #CJK UNIFIED IDEOGRAPH
+ {0xF0C0, 0x9E44}, //19807 #CJK UNIFIED IDEOGRAPH
+ {0xF0C1, 0x9E46}, //19808 #CJK UNIFIED IDEOGRAPH
+ {0xF0C2, 0x9E47}, //19809 #CJK UNIFIED IDEOGRAPH
+ {0xF0C3, 0x9E48}, //19810 #CJK UNIFIED IDEOGRAPH
+ {0xF0C4, 0x9E49}, //19811 #CJK UNIFIED IDEOGRAPH
+ {0xF0C5, 0x9E4B}, //19812 #CJK UNIFIED IDEOGRAPH
+ {0xF0C6, 0x9E4C}, //19813 #CJK UNIFIED IDEOGRAPH
+ {0xF0C7, 0x9E4E}, //19814 #CJK UNIFIED IDEOGRAPH
+ {0xF0C8, 0x9E51}, //19815 #CJK UNIFIED IDEOGRAPH
+ {0xF0C9, 0x9E55}, //19816 #CJK UNIFIED IDEOGRAPH
+ {0xF0CA, 0x9E57}, //19817 #CJK UNIFIED IDEOGRAPH
+ {0xF0CB, 0x9E5A}, //19818 #CJK UNIFIED IDEOGRAPH
+ {0xF0CC, 0x9E5B}, //19819 #CJK UNIFIED IDEOGRAPH
+ {0xF0CD, 0x9E5C}, //19820 #CJK UNIFIED IDEOGRAPH
+ {0xF0CE, 0x9E5E}, //19821 #CJK UNIFIED IDEOGRAPH
+ {0xF0CF, 0x9E63}, //19822 #CJK UNIFIED IDEOGRAPH
+ {0xF0D0, 0x9E66}, //19823 #CJK UNIFIED IDEOGRAPH
+ {0xF0D1, 0x9E67}, //19824 #CJK UNIFIED IDEOGRAPH
+ {0xF0D2, 0x9E68}, //19825 #CJK UNIFIED IDEOGRAPH
+ {0xF0D3, 0x9E69}, //19826 #CJK UNIFIED IDEOGRAPH
+ {0xF0D4, 0x9E6A}, //19827 #CJK UNIFIED IDEOGRAPH
+ {0xF0D5, 0x9E6B}, //19828 #CJK UNIFIED IDEOGRAPH
+ {0xF0D6, 0x9E6C}, //19829 #CJK UNIFIED IDEOGRAPH
+ {0xF0D7, 0x9E71}, //19830 #CJK UNIFIED IDEOGRAPH
+ {0xF0D8, 0x9E6D}, //19831 #CJK UNIFIED IDEOGRAPH
+ {0xF0D9, 0x9E73}, //19832 #CJK UNIFIED IDEOGRAPH
+ {0xF0DA, 0x7592}, //19833 #CJK UNIFIED IDEOGRAPH
+ {0xF0DB, 0x7594}, //19834 #CJK UNIFIED IDEOGRAPH
+ {0xF0DC, 0x7596}, //19835 #CJK UNIFIED IDEOGRAPH
+ {0xF0DD, 0x75A0}, //19836 #CJK UNIFIED IDEOGRAPH
+ {0xF0DE, 0x759D}, //19837 #CJK UNIFIED IDEOGRAPH
+ {0xF0DF, 0x75AC}, //19838 #CJK UNIFIED IDEOGRAPH
+ {0xF0E0, 0x75A3}, //19839 #CJK UNIFIED IDEOGRAPH
+ {0xF0E1, 0x75B3}, //19840 #CJK UNIFIED IDEOGRAPH
+ {0xF0E2, 0x75B4}, //19841 #CJK UNIFIED IDEOGRAPH
+ {0xF0E3, 0x75B8}, //19842 #CJK UNIFIED IDEOGRAPH
+ {0xF0E4, 0x75C4}, //19843 #CJK UNIFIED IDEOGRAPH
+ {0xF0E5, 0x75B1}, //19844 #CJK UNIFIED IDEOGRAPH
+ {0xF0E6, 0x75B0}, //19845 #CJK UNIFIED IDEOGRAPH
+ {0xF0E7, 0x75C3}, //19846 #CJK UNIFIED IDEOGRAPH
+ {0xF0E8, 0x75C2}, //19847 #CJK UNIFIED IDEOGRAPH
+ {0xF0E9, 0x75D6}, //19848 #CJK UNIFIED IDEOGRAPH
+ {0xF0EA, 0x75CD}, //19849 #CJK UNIFIED IDEOGRAPH
+ {0xF0EB, 0x75E3}, //19850 #CJK UNIFIED IDEOGRAPH
+ {0xF0EC, 0x75E8}, //19851 #CJK UNIFIED IDEOGRAPH
+ {0xF0ED, 0x75E6}, //19852 #CJK UNIFIED IDEOGRAPH
+ {0xF0EE, 0x75E4}, //19853 #CJK UNIFIED IDEOGRAPH
+ {0xF0EF, 0x75EB}, //19854 #CJK UNIFIED IDEOGRAPH
+ {0xF0F0, 0x75E7}, //19855 #CJK UNIFIED IDEOGRAPH
+ {0xF0F1, 0x7603}, //19856 #CJK UNIFIED IDEOGRAPH
+ {0xF0F2, 0x75F1}, //19857 #CJK UNIFIED IDEOGRAPH
+ {0xF0F3, 0x75FC}, //19858 #CJK UNIFIED IDEOGRAPH
+ {0xF0F4, 0x75FF}, //19859 #CJK UNIFIED IDEOGRAPH
+ {0xF0F5, 0x7610}, //19860 #CJK UNIFIED IDEOGRAPH
+ {0xF0F6, 0x7600}, //19861 #CJK UNIFIED IDEOGRAPH
+ {0xF0F7, 0x7605}, //19862 #CJK UNIFIED IDEOGRAPH
+ {0xF0F8, 0x760C}, //19863 #CJK UNIFIED IDEOGRAPH
+ {0xF0F9, 0x7617}, //19864 #CJK UNIFIED IDEOGRAPH
+ {0xF0FA, 0x760A}, //19865 #CJK UNIFIED IDEOGRAPH
+ {0xF0FB, 0x7625}, //19866 #CJK UNIFIED IDEOGRAPH
+ {0xF0FC, 0x7618}, //19867 #CJK UNIFIED IDEOGRAPH
+ {0xF0FD, 0x7615}, //19868 #CJK UNIFIED IDEOGRAPH
+ {0xF0FE, 0x7619}, //19869 #CJK UNIFIED IDEOGRAPH
+ {0xF140, 0x998C}, //19870 #CJK UNIFIED IDEOGRAPH
+ {0xF141, 0x998E}, //19871 #CJK UNIFIED IDEOGRAPH
+ {0xF142, 0x999A}, //19872 #CJK UNIFIED IDEOGRAPH
+ {0xF143, 0x999B}, //19873 #CJK UNIFIED IDEOGRAPH
+ {0xF144, 0x999C}, //19874 #CJK UNIFIED IDEOGRAPH
+ {0xF145, 0x999D}, //19875 #CJK UNIFIED IDEOGRAPH
+ {0xF146, 0x999E}, //19876 #CJK UNIFIED IDEOGRAPH
+ {0xF147, 0x999F}, //19877 #CJK UNIFIED IDEOGRAPH
+ {0xF148, 0x99A0}, //19878 #CJK UNIFIED IDEOGRAPH
+ {0xF149, 0x99A1}, //19879 #CJK UNIFIED IDEOGRAPH
+ {0xF14A, 0x99A2}, //19880 #CJK UNIFIED IDEOGRAPH
+ {0xF14B, 0x99A3}, //19881 #CJK UNIFIED IDEOGRAPH
+ {0xF14C, 0x99A4}, //19882 #CJK UNIFIED IDEOGRAPH
+ {0xF14D, 0x99A6}, //19883 #CJK UNIFIED IDEOGRAPH
+ {0xF14E, 0x99A7}, //19884 #CJK UNIFIED IDEOGRAPH
+ {0xF14F, 0x99A9}, //19885 #CJK UNIFIED IDEOGRAPH
+ {0xF150, 0x99AA}, //19886 #CJK UNIFIED IDEOGRAPH
+ {0xF151, 0x99AB}, //19887 #CJK UNIFIED IDEOGRAPH
+ {0xF152, 0x99AC}, //19888 #CJK UNIFIED IDEOGRAPH
+ {0xF153, 0x99AD}, //19889 #CJK UNIFIED IDEOGRAPH
+ {0xF154, 0x99AE}, //19890 #CJK UNIFIED IDEOGRAPH
+ {0xF155, 0x99AF}, //19891 #CJK UNIFIED IDEOGRAPH
+ {0xF156, 0x99B0}, //19892 #CJK UNIFIED IDEOGRAPH
+ {0xF157, 0x99B1}, //19893 #CJK UNIFIED IDEOGRAPH
+ {0xF158, 0x99B2}, //19894 #CJK UNIFIED IDEOGRAPH
+ {0xF159, 0x99B3}, //19895 #CJK UNIFIED IDEOGRAPH
+ {0xF15A, 0x99B4}, //19896 #CJK UNIFIED IDEOGRAPH
+ {0xF15B, 0x99B5}, //19897 #CJK UNIFIED IDEOGRAPH
+ {0xF15C, 0x99B6}, //19898 #CJK UNIFIED IDEOGRAPH
+ {0xF15D, 0x99B7}, //19899 #CJK UNIFIED IDEOGRAPH
+ {0xF15E, 0x99B8}, //19900 #CJK UNIFIED IDEOGRAPH
+ {0xF15F, 0x99B9}, //19901 #CJK UNIFIED IDEOGRAPH
+ {0xF160, 0x99BA}, //19902 #CJK UNIFIED IDEOGRAPH
+ {0xF161, 0x99BB}, //19903 #CJK UNIFIED IDEOGRAPH
+ {0xF162, 0x99BC}, //19904 #CJK UNIFIED IDEOGRAPH
+ {0xF163, 0x99BD}, //19905 #CJK UNIFIED IDEOGRAPH
+ {0xF164, 0x99BE}, //19906 #CJK UNIFIED IDEOGRAPH
+ {0xF165, 0x99BF}, //19907 #CJK UNIFIED IDEOGRAPH
+ {0xF166, 0x99C0}, //19908 #CJK UNIFIED IDEOGRAPH
+ {0xF167, 0x99C1}, //19909 #CJK UNIFIED IDEOGRAPH
+ {0xF168, 0x99C2}, //19910 #CJK UNIFIED IDEOGRAPH
+ {0xF169, 0x99C3}, //19911 #CJK UNIFIED IDEOGRAPH
+ {0xF16A, 0x99C4}, //19912 #CJK UNIFIED IDEOGRAPH
+ {0xF16B, 0x99C5}, //19913 #CJK UNIFIED IDEOGRAPH
+ {0xF16C, 0x99C6}, //19914 #CJK UNIFIED IDEOGRAPH
+ {0xF16D, 0x99C7}, //19915 #CJK UNIFIED IDEOGRAPH
+ {0xF16E, 0x99C8}, //19916 #CJK UNIFIED IDEOGRAPH
+ {0xF16F, 0x99C9}, //19917 #CJK UNIFIED IDEOGRAPH
+ {0xF170, 0x99CA}, //19918 #CJK UNIFIED IDEOGRAPH
+ {0xF171, 0x99CB}, //19919 #CJK UNIFIED IDEOGRAPH
+ {0xF172, 0x99CC}, //19920 #CJK UNIFIED IDEOGRAPH
+ {0xF173, 0x99CD}, //19921 #CJK UNIFIED IDEOGRAPH
+ {0xF174, 0x99CE}, //19922 #CJK UNIFIED IDEOGRAPH
+ {0xF175, 0x99CF}, //19923 #CJK UNIFIED IDEOGRAPH
+ {0xF176, 0x99D0}, //19924 #CJK UNIFIED IDEOGRAPH
+ {0xF177, 0x99D1}, //19925 #CJK UNIFIED IDEOGRAPH
+ {0xF178, 0x99D2}, //19926 #CJK UNIFIED IDEOGRAPH
+ {0xF179, 0x99D3}, //19927 #CJK UNIFIED IDEOGRAPH
+ {0xF17A, 0x99D4}, //19928 #CJK UNIFIED IDEOGRAPH
+ {0xF17B, 0x99D5}, //19929 #CJK UNIFIED IDEOGRAPH
+ {0xF17C, 0x99D6}, //19930 #CJK UNIFIED IDEOGRAPH
+ {0xF17D, 0x99D7}, //19931 #CJK UNIFIED IDEOGRAPH
+ {0xF17E, 0x99D8}, //19932 #CJK UNIFIED IDEOGRAPH
+ {0xF180, 0x99D9}, //19933 #CJK UNIFIED IDEOGRAPH
+ {0xF181, 0x99DA}, //19934 #CJK UNIFIED IDEOGRAPH
+ {0xF182, 0x99DB}, //19935 #CJK UNIFIED IDEOGRAPH
+ {0xF183, 0x99DC}, //19936 #CJK UNIFIED IDEOGRAPH
+ {0xF184, 0x99DD}, //19937 #CJK UNIFIED IDEOGRAPH
+ {0xF185, 0x99DE}, //19938 #CJK UNIFIED IDEOGRAPH
+ {0xF186, 0x99DF}, //19939 #CJK UNIFIED IDEOGRAPH
+ {0xF187, 0x99E0}, //19940 #CJK UNIFIED IDEOGRAPH
+ {0xF188, 0x99E1}, //19941 #CJK UNIFIED IDEOGRAPH
+ {0xF189, 0x99E2}, //19942 #CJK UNIFIED IDEOGRAPH
+ {0xF18A, 0x99E3}, //19943 #CJK UNIFIED IDEOGRAPH
+ {0xF18B, 0x99E4}, //19944 #CJK UNIFIED IDEOGRAPH
+ {0xF18C, 0x99E5}, //19945 #CJK UNIFIED IDEOGRAPH
+ {0xF18D, 0x99E6}, //19946 #CJK UNIFIED IDEOGRAPH
+ {0xF18E, 0x99E7}, //19947 #CJK UNIFIED IDEOGRAPH
+ {0xF18F, 0x99E8}, //19948 #CJK UNIFIED IDEOGRAPH
+ {0xF190, 0x99E9}, //19949 #CJK UNIFIED IDEOGRAPH
+ {0xF191, 0x99EA}, //19950 #CJK UNIFIED IDEOGRAPH
+ {0xF192, 0x99EB}, //19951 #CJK UNIFIED IDEOGRAPH
+ {0xF193, 0x99EC}, //19952 #CJK UNIFIED IDEOGRAPH
+ {0xF194, 0x99ED}, //19953 #CJK UNIFIED IDEOGRAPH
+ {0xF195, 0x99EE}, //19954 #CJK UNIFIED IDEOGRAPH
+ {0xF196, 0x99EF}, //19955 #CJK UNIFIED IDEOGRAPH
+ {0xF197, 0x99F0}, //19956 #CJK UNIFIED IDEOGRAPH
+ {0xF198, 0x99F1}, //19957 #CJK UNIFIED IDEOGRAPH
+ {0xF199, 0x99F2}, //19958 #CJK UNIFIED IDEOGRAPH
+ {0xF19A, 0x99F3}, //19959 #CJK UNIFIED IDEOGRAPH
+ {0xF19B, 0x99F4}, //19960 #CJK UNIFIED IDEOGRAPH
+ {0xF19C, 0x99F5}, //19961 #CJK UNIFIED IDEOGRAPH
+ {0xF19D, 0x99F6}, //19962 #CJK UNIFIED IDEOGRAPH
+ {0xF19E, 0x99F7}, //19963 #CJK UNIFIED IDEOGRAPH
+ {0xF19F, 0x99F8}, //19964 #CJK UNIFIED IDEOGRAPH
+ {0xF1A0, 0x99F9}, //19965 #CJK UNIFIED IDEOGRAPH
+ {0xF1A1, 0x761B}, //19966 #CJK UNIFIED IDEOGRAPH
+ {0xF1A2, 0x763C}, //19967 #CJK UNIFIED IDEOGRAPH
+ {0xF1A3, 0x7622}, //19968 #CJK UNIFIED IDEOGRAPH
+ {0xF1A4, 0x7620}, //19969 #CJK UNIFIED IDEOGRAPH
+ {0xF1A5, 0x7640}, //19970 #CJK UNIFIED IDEOGRAPH
+ {0xF1A6, 0x762D}, //19971 #CJK UNIFIED IDEOGRAPH
+ {0xF1A7, 0x7630}, //19972 #CJK UNIFIED IDEOGRAPH
+ {0xF1A8, 0x763F}, //19973 #CJK UNIFIED IDEOGRAPH
+ {0xF1A9, 0x7635}, //19974 #CJK UNIFIED IDEOGRAPH
+ {0xF1AA, 0x7643}, //19975 #CJK UNIFIED IDEOGRAPH
+ {0xF1AB, 0x763E}, //19976 #CJK UNIFIED IDEOGRAPH
+ {0xF1AC, 0x7633}, //19977 #CJK UNIFIED IDEOGRAPH
+ {0xF1AD, 0x764D}, //19978 #CJK UNIFIED IDEOGRAPH
+ {0xF1AE, 0x765E}, //19979 #CJK UNIFIED IDEOGRAPH
+ {0xF1AF, 0x7654}, //19980 #CJK UNIFIED IDEOGRAPH
+ {0xF1B0, 0x765C}, //19981 #CJK UNIFIED IDEOGRAPH
+ {0xF1B1, 0x7656}, //19982 #CJK UNIFIED IDEOGRAPH
+ {0xF1B2, 0x766B}, //19983 #CJK UNIFIED IDEOGRAPH
+ {0xF1B3, 0x766F}, //19984 #CJK UNIFIED IDEOGRAPH
+ {0xF1B4, 0x7FCA}, //19985 #CJK UNIFIED IDEOGRAPH
+ {0xF1B5, 0x7AE6}, //19986 #CJK UNIFIED IDEOGRAPH
+ {0xF1B6, 0x7A78}, //19987 #CJK UNIFIED IDEOGRAPH
+ {0xF1B7, 0x7A79}, //19988 #CJK UNIFIED IDEOGRAPH
+ {0xF1B8, 0x7A80}, //19989 #CJK UNIFIED IDEOGRAPH
+ {0xF1B9, 0x7A86}, //19990 #CJK UNIFIED IDEOGRAPH
+ {0xF1BA, 0x7A88}, //19991 #CJK UNIFIED IDEOGRAPH
+ {0xF1BB, 0x7A95}, //19992 #CJK UNIFIED IDEOGRAPH
+ {0xF1BC, 0x7AA6}, //19993 #CJK UNIFIED IDEOGRAPH
+ {0xF1BD, 0x7AA0}, //19994 #CJK UNIFIED IDEOGRAPH
+ {0xF1BE, 0x7AAC}, //19995 #CJK UNIFIED IDEOGRAPH
+ {0xF1BF, 0x7AA8}, //19996 #CJK UNIFIED IDEOGRAPH
+ {0xF1C0, 0x7AAD}, //19997 #CJK UNIFIED IDEOGRAPH
+ {0xF1C1, 0x7AB3}, //19998 #CJK UNIFIED IDEOGRAPH
+ {0xF1C2, 0x8864}, //19999 #CJK UNIFIED IDEOGRAPH
+ {0xF1C3, 0x8869}, //20000 #CJK UNIFIED IDEOGRAPH
+ {0xF1C4, 0x8872}, //20001 #CJK UNIFIED IDEOGRAPH
+ {0xF1C5, 0x887D}, //20002 #CJK UNIFIED IDEOGRAPH
+ {0xF1C6, 0x887F}, //20003 #CJK UNIFIED IDEOGRAPH
+ {0xF1C7, 0x8882}, //20004 #CJK UNIFIED IDEOGRAPH
+ {0xF1C8, 0x88A2}, //20005 #CJK UNIFIED IDEOGRAPH
+ {0xF1C9, 0x88C6}, //20006 #CJK UNIFIED IDEOGRAPH
+ {0xF1CA, 0x88B7}, //20007 #CJK UNIFIED IDEOGRAPH
+ {0xF1CB, 0x88BC}, //20008 #CJK UNIFIED IDEOGRAPH
+ {0xF1CC, 0x88C9}, //20009 #CJK UNIFIED IDEOGRAPH
+ {0xF1CD, 0x88E2}, //20010 #CJK UNIFIED IDEOGRAPH
+ {0xF1CE, 0x88CE}, //20011 #CJK UNIFIED IDEOGRAPH
+ {0xF1CF, 0x88E3}, //20012 #CJK UNIFIED IDEOGRAPH
+ {0xF1D0, 0x88E5}, //20013 #CJK UNIFIED IDEOGRAPH
+ {0xF1D1, 0x88F1}, //20014 #CJK UNIFIED IDEOGRAPH
+ {0xF1D2, 0x891A}, //20015 #CJK UNIFIED IDEOGRAPH
+ {0xF1D3, 0x88FC}, //20016 #CJK UNIFIED IDEOGRAPH
+ {0xF1D4, 0x88E8}, //20017 #CJK UNIFIED IDEOGRAPH
+ {0xF1D5, 0x88FE}, //20018 #CJK UNIFIED IDEOGRAPH
+ {0xF1D6, 0x88F0}, //20019 #CJK UNIFIED IDEOGRAPH
+ {0xF1D7, 0x8921}, //20020 #CJK UNIFIED IDEOGRAPH
+ {0xF1D8, 0x8919}, //20021 #CJK UNIFIED IDEOGRAPH
+ {0xF1D9, 0x8913}, //20022 #CJK UNIFIED IDEOGRAPH
+ {0xF1DA, 0x891B}, //20023 #CJK UNIFIED IDEOGRAPH
+ {0xF1DB, 0x890A}, //20024 #CJK UNIFIED IDEOGRAPH
+ {0xF1DC, 0x8934}, //20025 #CJK UNIFIED IDEOGRAPH
+ {0xF1DD, 0x892B}, //20026 #CJK UNIFIED IDEOGRAPH
+ {0xF1DE, 0x8936}, //20027 #CJK UNIFIED IDEOGRAPH
+ {0xF1DF, 0x8941}, //20028 #CJK UNIFIED IDEOGRAPH
+ {0xF1E0, 0x8966}, //20029 #CJK UNIFIED IDEOGRAPH
+ {0xF1E1, 0x897B}, //20030 #CJK UNIFIED IDEOGRAPH
+ {0xF1E2, 0x758B}, //20031 #CJK UNIFIED IDEOGRAPH
+ {0xF1E3, 0x80E5}, //20032 #CJK UNIFIED IDEOGRAPH
+ {0xF1E4, 0x76B2}, //20033 #CJK UNIFIED IDEOGRAPH
+ {0xF1E5, 0x76B4}, //20034 #CJK UNIFIED IDEOGRAPH
+ {0xF1E6, 0x77DC}, //20035 #CJK UNIFIED IDEOGRAPH
+ {0xF1E7, 0x8012}, //20036 #CJK UNIFIED IDEOGRAPH
+ {0xF1E8, 0x8014}, //20037 #CJK UNIFIED IDEOGRAPH
+ {0xF1E9, 0x8016}, //20038 #CJK UNIFIED IDEOGRAPH
+ {0xF1EA, 0x801C}, //20039 #CJK UNIFIED IDEOGRAPH
+ {0xF1EB, 0x8020}, //20040 #CJK UNIFIED IDEOGRAPH
+ {0xF1EC, 0x8022}, //20041 #CJK UNIFIED IDEOGRAPH
+ {0xF1ED, 0x8025}, //20042 #CJK UNIFIED IDEOGRAPH
+ {0xF1EE, 0x8026}, //20043 #CJK UNIFIED IDEOGRAPH
+ {0xF1EF, 0x8027}, //20044 #CJK UNIFIED IDEOGRAPH
+ {0xF1F0, 0x8029}, //20045 #CJK UNIFIED IDEOGRAPH
+ {0xF1F1, 0x8028}, //20046 #CJK UNIFIED IDEOGRAPH
+ {0xF1F2, 0x8031}, //20047 #CJK UNIFIED IDEOGRAPH
+ {0xF1F3, 0x800B}, //20048 #CJK UNIFIED IDEOGRAPH
+ {0xF1F4, 0x8035}, //20049 #CJK UNIFIED IDEOGRAPH
+ {0xF1F5, 0x8043}, //20050 #CJK UNIFIED IDEOGRAPH
+ {0xF1F6, 0x8046}, //20051 #CJK UNIFIED IDEOGRAPH
+ {0xF1F7, 0x804D}, //20052 #CJK UNIFIED IDEOGRAPH
+ {0xF1F8, 0x8052}, //20053 #CJK UNIFIED IDEOGRAPH
+ {0xF1F9, 0x8069}, //20054 #CJK UNIFIED IDEOGRAPH
+ {0xF1FA, 0x8071}, //20055 #CJK UNIFIED IDEOGRAPH
+ {0xF1FB, 0x8983}, //20056 #CJK UNIFIED IDEOGRAPH
+ {0xF1FC, 0x9878}, //20057 #CJK UNIFIED IDEOGRAPH
+ {0xF1FD, 0x9880}, //20058 #CJK UNIFIED IDEOGRAPH
+ {0xF1FE, 0x9883}, //20059 #CJK UNIFIED IDEOGRAPH
+ {0xF240, 0x99FA}, //20060 #CJK UNIFIED IDEOGRAPH
+ {0xF241, 0x99FB}, //20061 #CJK UNIFIED IDEOGRAPH
+ {0xF242, 0x99FC}, //20062 #CJK UNIFIED IDEOGRAPH
+ {0xF243, 0x99FD}, //20063 #CJK UNIFIED IDEOGRAPH
+ {0xF244, 0x99FE}, //20064 #CJK UNIFIED IDEOGRAPH
+ {0xF245, 0x99FF}, //20065 #CJK UNIFIED IDEOGRAPH
+ {0xF246, 0x9A00}, //20066 #CJK UNIFIED IDEOGRAPH
+ {0xF247, 0x9A01}, //20067 #CJK UNIFIED IDEOGRAPH
+ {0xF248, 0x9A02}, //20068 #CJK UNIFIED IDEOGRAPH
+ {0xF249, 0x9A03}, //20069 #CJK UNIFIED IDEOGRAPH
+ {0xF24A, 0x9A04}, //20070 #CJK UNIFIED IDEOGRAPH
+ {0xF24B, 0x9A05}, //20071 #CJK UNIFIED IDEOGRAPH
+ {0xF24C, 0x9A06}, //20072 #CJK UNIFIED IDEOGRAPH
+ {0xF24D, 0x9A07}, //20073 #CJK UNIFIED IDEOGRAPH
+ {0xF24E, 0x9A08}, //20074 #CJK UNIFIED IDEOGRAPH
+ {0xF24F, 0x9A09}, //20075 #CJK UNIFIED IDEOGRAPH
+ {0xF250, 0x9A0A}, //20076 #CJK UNIFIED IDEOGRAPH
+ {0xF251, 0x9A0B}, //20077 #CJK UNIFIED IDEOGRAPH
+ {0xF252, 0x9A0C}, //20078 #CJK UNIFIED IDEOGRAPH
+ {0xF253, 0x9A0D}, //20079 #CJK UNIFIED IDEOGRAPH
+ {0xF254, 0x9A0E}, //20080 #CJK UNIFIED IDEOGRAPH
+ {0xF255, 0x9A0F}, //20081 #CJK UNIFIED IDEOGRAPH
+ {0xF256, 0x9A10}, //20082 #CJK UNIFIED IDEOGRAPH
+ {0xF257, 0x9A11}, //20083 #CJK UNIFIED IDEOGRAPH
+ {0xF258, 0x9A12}, //20084 #CJK UNIFIED IDEOGRAPH
+ {0xF259, 0x9A13}, //20085 #CJK UNIFIED IDEOGRAPH
+ {0xF25A, 0x9A14}, //20086 #CJK UNIFIED IDEOGRAPH
+ {0xF25B, 0x9A15}, //20087 #CJK UNIFIED IDEOGRAPH
+ {0xF25C, 0x9A16}, //20088 #CJK UNIFIED IDEOGRAPH
+ {0xF25D, 0x9A17}, //20089 #CJK UNIFIED IDEOGRAPH
+ {0xF25E, 0x9A18}, //20090 #CJK UNIFIED IDEOGRAPH
+ {0xF25F, 0x9A19}, //20091 #CJK UNIFIED IDEOGRAPH
+ {0xF260, 0x9A1A}, //20092 #CJK UNIFIED IDEOGRAPH
+ {0xF261, 0x9A1B}, //20093 #CJK UNIFIED IDEOGRAPH
+ {0xF262, 0x9A1C}, //20094 #CJK UNIFIED IDEOGRAPH
+ {0xF263, 0x9A1D}, //20095 #CJK UNIFIED IDEOGRAPH
+ {0xF264, 0x9A1E}, //20096 #CJK UNIFIED IDEOGRAPH
+ {0xF265, 0x9A1F}, //20097 #CJK UNIFIED IDEOGRAPH
+ {0xF266, 0x9A20}, //20098 #CJK UNIFIED IDEOGRAPH
+ {0xF267, 0x9A21}, //20099 #CJK UNIFIED IDEOGRAPH
+ {0xF268, 0x9A22}, //20100 #CJK UNIFIED IDEOGRAPH
+ {0xF269, 0x9A23}, //20101 #CJK UNIFIED IDEOGRAPH
+ {0xF26A, 0x9A24}, //20102 #CJK UNIFIED IDEOGRAPH
+ {0xF26B, 0x9A25}, //20103 #CJK UNIFIED IDEOGRAPH
+ {0xF26C, 0x9A26}, //20104 #CJK UNIFIED IDEOGRAPH
+ {0xF26D, 0x9A27}, //20105 #CJK UNIFIED IDEOGRAPH
+ {0xF26E, 0x9A28}, //20106 #CJK UNIFIED IDEOGRAPH
+ {0xF26F, 0x9A29}, //20107 #CJK UNIFIED IDEOGRAPH
+ {0xF270, 0x9A2A}, //20108 #CJK UNIFIED IDEOGRAPH
+ {0xF271, 0x9A2B}, //20109 #CJK UNIFIED IDEOGRAPH
+ {0xF272, 0x9A2C}, //20110 #CJK UNIFIED IDEOGRAPH
+ {0xF273, 0x9A2D}, //20111 #CJK UNIFIED IDEOGRAPH
+ {0xF274, 0x9A2E}, //20112 #CJK UNIFIED IDEOGRAPH
+ {0xF275, 0x9A2F}, //20113 #CJK UNIFIED IDEOGRAPH
+ {0xF276, 0x9A30}, //20114 #CJK UNIFIED IDEOGRAPH
+ {0xF277, 0x9A31}, //20115 #CJK UNIFIED IDEOGRAPH
+ {0xF278, 0x9A32}, //20116 #CJK UNIFIED IDEOGRAPH
+ {0xF279, 0x9A33}, //20117 #CJK UNIFIED IDEOGRAPH
+ {0xF27A, 0x9A34}, //20118 #CJK UNIFIED IDEOGRAPH
+ {0xF27B, 0x9A35}, //20119 #CJK UNIFIED IDEOGRAPH
+ {0xF27C, 0x9A36}, //20120 #CJK UNIFIED IDEOGRAPH
+ {0xF27D, 0x9A37}, //20121 #CJK UNIFIED IDEOGRAPH
+ {0xF27E, 0x9A38}, //20122 #CJK UNIFIED IDEOGRAPH
+ {0xF280, 0x9A39}, //20123 #CJK UNIFIED IDEOGRAPH
+ {0xF281, 0x9A3A}, //20124 #CJK UNIFIED IDEOGRAPH
+ {0xF282, 0x9A3B}, //20125 #CJK UNIFIED IDEOGRAPH
+ {0xF283, 0x9A3C}, //20126 #CJK UNIFIED IDEOGRAPH
+ {0xF284, 0x9A3D}, //20127 #CJK UNIFIED IDEOGRAPH
+ {0xF285, 0x9A3E}, //20128 #CJK UNIFIED IDEOGRAPH
+ {0xF286, 0x9A3F}, //20129 #CJK UNIFIED IDEOGRAPH
+ {0xF287, 0x9A40}, //20130 #CJK UNIFIED IDEOGRAPH
+ {0xF288, 0x9A41}, //20131 #CJK UNIFIED IDEOGRAPH
+ {0xF289, 0x9A42}, //20132 #CJK UNIFIED IDEOGRAPH
+ {0xF28A, 0x9A43}, //20133 #CJK UNIFIED IDEOGRAPH
+ {0xF28B, 0x9A44}, //20134 #CJK UNIFIED IDEOGRAPH
+ {0xF28C, 0x9A45}, //20135 #CJK UNIFIED IDEOGRAPH
+ {0xF28D, 0x9A46}, //20136 #CJK UNIFIED IDEOGRAPH
+ {0xF28E, 0x9A47}, //20137 #CJK UNIFIED IDEOGRAPH
+ {0xF28F, 0x9A48}, //20138 #CJK UNIFIED IDEOGRAPH
+ {0xF290, 0x9A49}, //20139 #CJK UNIFIED IDEOGRAPH
+ {0xF291, 0x9A4A}, //20140 #CJK UNIFIED IDEOGRAPH
+ {0xF292, 0x9A4B}, //20141 #CJK UNIFIED IDEOGRAPH
+ {0xF293, 0x9A4C}, //20142 #CJK UNIFIED IDEOGRAPH
+ {0xF294, 0x9A4D}, //20143 #CJK UNIFIED IDEOGRAPH
+ {0xF295, 0x9A4E}, //20144 #CJK UNIFIED IDEOGRAPH
+ {0xF296, 0x9A4F}, //20145 #CJK UNIFIED IDEOGRAPH
+ {0xF297, 0x9A50}, //20146 #CJK UNIFIED IDEOGRAPH
+ {0xF298, 0x9A51}, //20147 #CJK UNIFIED IDEOGRAPH
+ {0xF299, 0x9A52}, //20148 #CJK UNIFIED IDEOGRAPH
+ {0xF29A, 0x9A53}, //20149 #CJK UNIFIED IDEOGRAPH
+ {0xF29B, 0x9A54}, //20150 #CJK UNIFIED IDEOGRAPH
+ {0xF29C, 0x9A55}, //20151 #CJK UNIFIED IDEOGRAPH
+ {0xF29D, 0x9A56}, //20152 #CJK UNIFIED IDEOGRAPH
+ {0xF29E, 0x9A57}, //20153 #CJK UNIFIED IDEOGRAPH
+ {0xF29F, 0x9A58}, //20154 #CJK UNIFIED IDEOGRAPH
+ {0xF2A0, 0x9A59}, //20155 #CJK UNIFIED IDEOGRAPH
+ {0xF2A1, 0x9889}, //20156 #CJK UNIFIED IDEOGRAPH
+ {0xF2A2, 0x988C}, //20157 #CJK UNIFIED IDEOGRAPH
+ {0xF2A3, 0x988D}, //20158 #CJK UNIFIED IDEOGRAPH
+ {0xF2A4, 0x988F}, //20159 #CJK UNIFIED IDEOGRAPH
+ {0xF2A5, 0x9894}, //20160 #CJK UNIFIED IDEOGRAPH
+ {0xF2A6, 0x989A}, //20161 #CJK UNIFIED IDEOGRAPH
+ {0xF2A7, 0x989B}, //20162 #CJK UNIFIED IDEOGRAPH
+ {0xF2A8, 0x989E}, //20163 #CJK UNIFIED IDEOGRAPH
+ {0xF2A9, 0x989F}, //20164 #CJK UNIFIED IDEOGRAPH
+ {0xF2AA, 0x98A1}, //20165 #CJK UNIFIED IDEOGRAPH
+ {0xF2AB, 0x98A2}, //20166 #CJK UNIFIED IDEOGRAPH
+ {0xF2AC, 0x98A5}, //20167 #CJK UNIFIED IDEOGRAPH
+ {0xF2AD, 0x98A6}, //20168 #CJK UNIFIED IDEOGRAPH
+ {0xF2AE, 0x864D}, //20169 #CJK UNIFIED IDEOGRAPH
+ {0xF2AF, 0x8654}, //20170 #CJK UNIFIED IDEOGRAPH
+ {0xF2B0, 0x866C}, //20171 #CJK UNIFIED IDEOGRAPH
+ {0xF2B1, 0x866E}, //20172 #CJK UNIFIED IDEOGRAPH
+ {0xF2B2, 0x867F}, //20173 #CJK UNIFIED IDEOGRAPH
+ {0xF2B3, 0x867A}, //20174 #CJK UNIFIED IDEOGRAPH
+ {0xF2B4, 0x867C}, //20175 #CJK UNIFIED IDEOGRAPH
+ {0xF2B5, 0x867B}, //20176 #CJK UNIFIED IDEOGRAPH
+ {0xF2B6, 0x86A8}, //20177 #CJK UNIFIED IDEOGRAPH
+ {0xF2B7, 0x868D}, //20178 #CJK UNIFIED IDEOGRAPH
+ {0xF2B8, 0x868B}, //20179 #CJK UNIFIED IDEOGRAPH
+ {0xF2B9, 0x86AC}, //20180 #CJK UNIFIED IDEOGRAPH
+ {0xF2BA, 0x869D}, //20181 #CJK UNIFIED IDEOGRAPH
+ {0xF2BB, 0x86A7}, //20182 #CJK UNIFIED IDEOGRAPH
+ {0xF2BC, 0x86A3}, //20183 #CJK UNIFIED IDEOGRAPH
+ {0xF2BD, 0x86AA}, //20184 #CJK UNIFIED IDEOGRAPH
+ {0xF2BE, 0x8693}, //20185 #CJK UNIFIED IDEOGRAPH
+ {0xF2BF, 0x86A9}, //20186 #CJK UNIFIED IDEOGRAPH
+ {0xF2C0, 0x86B6}, //20187 #CJK UNIFIED IDEOGRAPH
+ {0xF2C1, 0x86C4}, //20188 #CJK UNIFIED IDEOGRAPH
+ {0xF2C2, 0x86B5}, //20189 #CJK UNIFIED IDEOGRAPH
+ {0xF2C3, 0x86CE}, //20190 #CJK UNIFIED IDEOGRAPH
+ {0xF2C4, 0x86B0}, //20191 #CJK UNIFIED IDEOGRAPH
+ {0xF2C5, 0x86BA}, //20192 #CJK UNIFIED IDEOGRAPH
+ {0xF2C6, 0x86B1}, //20193 #CJK UNIFIED IDEOGRAPH
+ {0xF2C7, 0x86AF}, //20194 #CJK UNIFIED IDEOGRAPH
+ {0xF2C8, 0x86C9}, //20195 #CJK UNIFIED IDEOGRAPH
+ {0xF2C9, 0x86CF}, //20196 #CJK UNIFIED IDEOGRAPH
+ {0xF2CA, 0x86B4}, //20197 #CJK UNIFIED IDEOGRAPH
+ {0xF2CB, 0x86E9}, //20198 #CJK UNIFIED IDEOGRAPH
+ {0xF2CC, 0x86F1}, //20199 #CJK UNIFIED IDEOGRAPH
+ {0xF2CD, 0x86F2}, //20200 #CJK UNIFIED IDEOGRAPH
+ {0xF2CE, 0x86ED}, //20201 #CJK UNIFIED IDEOGRAPH
+ {0xF2CF, 0x86F3}, //20202 #CJK UNIFIED IDEOGRAPH
+ {0xF2D0, 0x86D0}, //20203 #CJK UNIFIED IDEOGRAPH
+ {0xF2D1, 0x8713}, //20204 #CJK UNIFIED IDEOGRAPH
+ {0xF2D2, 0x86DE}, //20205 #CJK UNIFIED IDEOGRAPH
+ {0xF2D3, 0x86F4}, //20206 #CJK UNIFIED IDEOGRAPH
+ {0xF2D4, 0x86DF}, //20207 #CJK UNIFIED IDEOGRAPH
+ {0xF2D5, 0x86D8}, //20208 #CJK UNIFIED IDEOGRAPH
+ {0xF2D6, 0x86D1}, //20209 #CJK UNIFIED IDEOGRAPH
+ {0xF2D7, 0x8703}, //20210 #CJK UNIFIED IDEOGRAPH
+ {0xF2D8, 0x8707}, //20211 #CJK UNIFIED IDEOGRAPH
+ {0xF2D9, 0x86F8}, //20212 #CJK UNIFIED IDEOGRAPH
+ {0xF2DA, 0x8708}, //20213 #CJK UNIFIED IDEOGRAPH
+ {0xF2DB, 0x870A}, //20214 #CJK UNIFIED IDEOGRAPH
+ {0xF2DC, 0x870D}, //20215 #CJK UNIFIED IDEOGRAPH
+ {0xF2DD, 0x8709}, //20216 #CJK UNIFIED IDEOGRAPH
+ {0xF2DE, 0x8723}, //20217 #CJK UNIFIED IDEOGRAPH
+ {0xF2DF, 0x873B}, //20218 #CJK UNIFIED IDEOGRAPH
+ {0xF2E0, 0x871E}, //20219 #CJK UNIFIED IDEOGRAPH
+ {0xF2E1, 0x8725}, //20220 #CJK UNIFIED IDEOGRAPH
+ {0xF2E2, 0x872E}, //20221 #CJK UNIFIED IDEOGRAPH
+ {0xF2E3, 0x871A}, //20222 #CJK UNIFIED IDEOGRAPH
+ {0xF2E4, 0x873E}, //20223 #CJK UNIFIED IDEOGRAPH
+ {0xF2E5, 0x8748}, //20224 #CJK UNIFIED IDEOGRAPH
+ {0xF2E6, 0x8734}, //20225 #CJK UNIFIED IDEOGRAPH
+ {0xF2E7, 0x8731}, //20226 #CJK UNIFIED IDEOGRAPH
+ {0xF2E8, 0x8729}, //20227 #CJK UNIFIED IDEOGRAPH
+ {0xF2E9, 0x8737}, //20228 #CJK UNIFIED IDEOGRAPH
+ {0xF2EA, 0x873F}, //20229 #CJK UNIFIED IDEOGRAPH
+ {0xF2EB, 0x8782}, //20230 #CJK UNIFIED IDEOGRAPH
+ {0xF2EC, 0x8722}, //20231 #CJK UNIFIED IDEOGRAPH
+ {0xF2ED, 0x877D}, //20232 #CJK UNIFIED IDEOGRAPH
+ {0xF2EE, 0x877E}, //20233 #CJK UNIFIED IDEOGRAPH
+ {0xF2EF, 0x877B}, //20234 #CJK UNIFIED IDEOGRAPH
+ {0xF2F0, 0x8760}, //20235 #CJK UNIFIED IDEOGRAPH
+ {0xF2F1, 0x8770}, //20236 #CJK UNIFIED IDEOGRAPH
+ {0xF2F2, 0x874C}, //20237 #CJK UNIFIED IDEOGRAPH
+ {0xF2F3, 0x876E}, //20238 #CJK UNIFIED IDEOGRAPH
+ {0xF2F4, 0x878B}, //20239 #CJK UNIFIED IDEOGRAPH
+ {0xF2F5, 0x8753}, //20240 #CJK UNIFIED IDEOGRAPH
+ {0xF2F6, 0x8763}, //20241 #CJK UNIFIED IDEOGRAPH
+ {0xF2F7, 0x877C}, //20242 #CJK UNIFIED IDEOGRAPH
+ {0xF2F8, 0x8764}, //20243 #CJK UNIFIED IDEOGRAPH
+ {0xF2F9, 0x8759}, //20244 #CJK UNIFIED IDEOGRAPH
+ {0xF2FA, 0x8765}, //20245 #CJK UNIFIED IDEOGRAPH
+ {0xF2FB, 0x8793}, //20246 #CJK UNIFIED IDEOGRAPH
+ {0xF2FC, 0x87AF}, //20247 #CJK UNIFIED IDEOGRAPH
+ {0xF2FD, 0x87A8}, //20248 #CJK UNIFIED IDEOGRAPH
+ {0xF2FE, 0x87D2}, //20249 #CJK UNIFIED IDEOGRAPH
+ {0xF340, 0x9A5A}, //20250 #CJK UNIFIED IDEOGRAPH
+ {0xF341, 0x9A5B}, //20251 #CJK UNIFIED IDEOGRAPH
+ {0xF342, 0x9A5C}, //20252 #CJK UNIFIED IDEOGRAPH
+ {0xF343, 0x9A5D}, //20253 #CJK UNIFIED IDEOGRAPH
+ {0xF344, 0x9A5E}, //20254 #CJK UNIFIED IDEOGRAPH
+ {0xF345, 0x9A5F}, //20255 #CJK UNIFIED IDEOGRAPH
+ {0xF346, 0x9A60}, //20256 #CJK UNIFIED IDEOGRAPH
+ {0xF347, 0x9A61}, //20257 #CJK UNIFIED IDEOGRAPH
+ {0xF348, 0x9A62}, //20258 #CJK UNIFIED IDEOGRAPH
+ {0xF349, 0x9A63}, //20259 #CJK UNIFIED IDEOGRAPH
+ {0xF34A, 0x9A64}, //20260 #CJK UNIFIED IDEOGRAPH
+ {0xF34B, 0x9A65}, //20261 #CJK UNIFIED IDEOGRAPH
+ {0xF34C, 0x9A66}, //20262 #CJK UNIFIED IDEOGRAPH
+ {0xF34D, 0x9A67}, //20263 #CJK UNIFIED IDEOGRAPH
+ {0xF34E, 0x9A68}, //20264 #CJK UNIFIED IDEOGRAPH
+ {0xF34F, 0x9A69}, //20265 #CJK UNIFIED IDEOGRAPH
+ {0xF350, 0x9A6A}, //20266 #CJK UNIFIED IDEOGRAPH
+ {0xF351, 0x9A6B}, //20267 #CJK UNIFIED IDEOGRAPH
+ {0xF352, 0x9A72}, //20268 #CJK UNIFIED IDEOGRAPH
+ {0xF353, 0x9A83}, //20269 #CJK UNIFIED IDEOGRAPH
+ {0xF354, 0x9A89}, //20270 #CJK UNIFIED IDEOGRAPH
+ {0xF355, 0x9A8D}, //20271 #CJK UNIFIED IDEOGRAPH
+ {0xF356, 0x9A8E}, //20272 #CJK UNIFIED IDEOGRAPH
+ {0xF357, 0x9A94}, //20273 #CJK UNIFIED IDEOGRAPH
+ {0xF358, 0x9A95}, //20274 #CJK UNIFIED IDEOGRAPH
+ {0xF359, 0x9A99}, //20275 #CJK UNIFIED IDEOGRAPH
+ {0xF35A, 0x9AA6}, //20276 #CJK UNIFIED IDEOGRAPH
+ {0xF35B, 0x9AA9}, //20277 #CJK UNIFIED IDEOGRAPH
+ {0xF35C, 0x9AAA}, //20278 #CJK UNIFIED IDEOGRAPH
+ {0xF35D, 0x9AAB}, //20279 #CJK UNIFIED IDEOGRAPH
+ {0xF35E, 0x9AAC}, //20280 #CJK UNIFIED IDEOGRAPH
+ {0xF35F, 0x9AAD}, //20281 #CJK UNIFIED IDEOGRAPH
+ {0xF360, 0x9AAE}, //20282 #CJK UNIFIED IDEOGRAPH
+ {0xF361, 0x9AAF}, //20283 #CJK UNIFIED IDEOGRAPH
+ {0xF362, 0x9AB2}, //20284 #CJK UNIFIED IDEOGRAPH
+ {0xF363, 0x9AB3}, //20285 #CJK UNIFIED IDEOGRAPH
+ {0xF364, 0x9AB4}, //20286 #CJK UNIFIED IDEOGRAPH
+ {0xF365, 0x9AB5}, //20287 #CJK UNIFIED IDEOGRAPH
+ {0xF366, 0x9AB9}, //20288 #CJK UNIFIED IDEOGRAPH
+ {0xF367, 0x9ABB}, //20289 #CJK UNIFIED IDEOGRAPH
+ {0xF368, 0x9ABD}, //20290 #CJK UNIFIED IDEOGRAPH
+ {0xF369, 0x9ABE}, //20291 #CJK UNIFIED IDEOGRAPH
+ {0xF36A, 0x9ABF}, //20292 #CJK UNIFIED IDEOGRAPH
+ {0xF36B, 0x9AC3}, //20293 #CJK UNIFIED IDEOGRAPH
+ {0xF36C, 0x9AC4}, //20294 #CJK UNIFIED IDEOGRAPH
+ {0xF36D, 0x9AC6}, //20295 #CJK UNIFIED IDEOGRAPH
+ {0xF36E, 0x9AC7}, //20296 #CJK UNIFIED IDEOGRAPH
+ {0xF36F, 0x9AC8}, //20297 #CJK UNIFIED IDEOGRAPH
+ {0xF370, 0x9AC9}, //20298 #CJK UNIFIED IDEOGRAPH
+ {0xF371, 0x9ACA}, //20299 #CJK UNIFIED IDEOGRAPH
+ {0xF372, 0x9ACD}, //20300 #CJK UNIFIED IDEOGRAPH
+ {0xF373, 0x9ACE}, //20301 #CJK UNIFIED IDEOGRAPH
+ {0xF374, 0x9ACF}, //20302 #CJK UNIFIED IDEOGRAPH
+ {0xF375, 0x9AD0}, //20303 #CJK UNIFIED IDEOGRAPH
+ {0xF376, 0x9AD2}, //20304 #CJK UNIFIED IDEOGRAPH
+ {0xF377, 0x9AD4}, //20305 #CJK UNIFIED IDEOGRAPH
+ {0xF378, 0x9AD5}, //20306 #CJK UNIFIED IDEOGRAPH
+ {0xF379, 0x9AD6}, //20307 #CJK UNIFIED IDEOGRAPH
+ {0xF37A, 0x9AD7}, //20308 #CJK UNIFIED IDEOGRAPH
+ {0xF37B, 0x9AD9}, //20309 #CJK UNIFIED IDEOGRAPH
+ {0xF37C, 0x9ADA}, //20310 #CJK UNIFIED IDEOGRAPH
+ {0xF37D, 0x9ADB}, //20311 #CJK UNIFIED IDEOGRAPH
+ {0xF37E, 0x9ADC}, //20312 #CJK UNIFIED IDEOGRAPH
+ {0xF380, 0x9ADD}, //20313 #CJK UNIFIED IDEOGRAPH
+ {0xF381, 0x9ADE}, //20314 #CJK UNIFIED IDEOGRAPH
+ {0xF382, 0x9AE0}, //20315 #CJK UNIFIED IDEOGRAPH
+ {0xF383, 0x9AE2}, //20316 #CJK UNIFIED IDEOGRAPH
+ {0xF384, 0x9AE3}, //20317 #CJK UNIFIED IDEOGRAPH
+ {0xF385, 0x9AE4}, //20318 #CJK UNIFIED IDEOGRAPH
+ {0xF386, 0x9AE5}, //20319 #CJK UNIFIED IDEOGRAPH
+ {0xF387, 0x9AE7}, //20320 #CJK UNIFIED IDEOGRAPH
+ {0xF388, 0x9AE8}, //20321 #CJK UNIFIED IDEOGRAPH
+ {0xF389, 0x9AE9}, //20322 #CJK UNIFIED IDEOGRAPH
+ {0xF38A, 0x9AEA}, //20323 #CJK UNIFIED IDEOGRAPH
+ {0xF38B, 0x9AEC}, //20324 #CJK UNIFIED IDEOGRAPH
+ {0xF38C, 0x9AEE}, //20325 #CJK UNIFIED IDEOGRAPH
+ {0xF38D, 0x9AF0}, //20326 #CJK UNIFIED IDEOGRAPH
+ {0xF38E, 0x9AF1}, //20327 #CJK UNIFIED IDEOGRAPH
+ {0xF38F, 0x9AF2}, //20328 #CJK UNIFIED IDEOGRAPH
+ {0xF390, 0x9AF3}, //20329 #CJK UNIFIED IDEOGRAPH
+ {0xF391, 0x9AF4}, //20330 #CJK UNIFIED IDEOGRAPH
+ {0xF392, 0x9AF5}, //20331 #CJK UNIFIED IDEOGRAPH
+ {0xF393, 0x9AF6}, //20332 #CJK UNIFIED IDEOGRAPH
+ {0xF394, 0x9AF7}, //20333 #CJK UNIFIED IDEOGRAPH
+ {0xF395, 0x9AF8}, //20334 #CJK UNIFIED IDEOGRAPH
+ {0xF396, 0x9AFA}, //20335 #CJK UNIFIED IDEOGRAPH
+ {0xF397, 0x9AFC}, //20336 #CJK UNIFIED IDEOGRAPH
+ {0xF398, 0x9AFD}, //20337 #CJK UNIFIED IDEOGRAPH
+ {0xF399, 0x9AFE}, //20338 #CJK UNIFIED IDEOGRAPH
+ {0xF39A, 0x9AFF}, //20339 #CJK UNIFIED IDEOGRAPH
+ {0xF39B, 0x9B00}, //20340 #CJK UNIFIED IDEOGRAPH
+ {0xF39C, 0x9B01}, //20341 #CJK UNIFIED IDEOGRAPH
+ {0xF39D, 0x9B02}, //20342 #CJK UNIFIED IDEOGRAPH
+ {0xF39E, 0x9B04}, //20343 #CJK UNIFIED IDEOGRAPH
+ {0xF39F, 0x9B05}, //20344 #CJK UNIFIED IDEOGRAPH
+ {0xF3A0, 0x9B06}, //20345 #CJK UNIFIED IDEOGRAPH
+ {0xF3A1, 0x87C6}, //20346 #CJK UNIFIED IDEOGRAPH
+ {0xF3A2, 0x8788}, //20347 #CJK UNIFIED IDEOGRAPH
+ {0xF3A3, 0x8785}, //20348 #CJK UNIFIED IDEOGRAPH
+ {0xF3A4, 0x87AD}, //20349 #CJK UNIFIED IDEOGRAPH
+ {0xF3A5, 0x8797}, //20350 #CJK UNIFIED IDEOGRAPH
+ {0xF3A6, 0x8783}, //20351 #CJK UNIFIED IDEOGRAPH
+ {0xF3A7, 0x87AB}, //20352 #CJK UNIFIED IDEOGRAPH
+ {0xF3A8, 0x87E5}, //20353 #CJK UNIFIED IDEOGRAPH
+ {0xF3A9, 0x87AC}, //20354 #CJK UNIFIED IDEOGRAPH
+ {0xF3AA, 0x87B5}, //20355 #CJK UNIFIED IDEOGRAPH
+ {0xF3AB, 0x87B3}, //20356 #CJK UNIFIED IDEOGRAPH
+ {0xF3AC, 0x87CB}, //20357 #CJK UNIFIED IDEOGRAPH
+ {0xF3AD, 0x87D3}, //20358 #CJK UNIFIED IDEOGRAPH
+ {0xF3AE, 0x87BD}, //20359 #CJK UNIFIED IDEOGRAPH
+ {0xF3AF, 0x87D1}, //20360 #CJK UNIFIED IDEOGRAPH
+ {0xF3B0, 0x87C0}, //20361 #CJK UNIFIED IDEOGRAPH
+ {0xF3B1, 0x87CA}, //20362 #CJK UNIFIED IDEOGRAPH
+ {0xF3B2, 0x87DB}, //20363 #CJK UNIFIED IDEOGRAPH
+ {0xF3B3, 0x87EA}, //20364 #CJK UNIFIED IDEOGRAPH
+ {0xF3B4, 0x87E0}, //20365 #CJK UNIFIED IDEOGRAPH
+ {0xF3B5, 0x87EE}, //20366 #CJK UNIFIED IDEOGRAPH
+ {0xF3B6, 0x8816}, //20367 #CJK UNIFIED IDEOGRAPH
+ {0xF3B7, 0x8813}, //20368 #CJK UNIFIED IDEOGRAPH
+ {0xF3B8, 0x87FE}, //20369 #CJK UNIFIED IDEOGRAPH
+ {0xF3B9, 0x880A}, //20370 #CJK UNIFIED IDEOGRAPH
+ {0xF3BA, 0x881B}, //20371 #CJK UNIFIED IDEOGRAPH
+ {0xF3BB, 0x8821}, //20372 #CJK UNIFIED IDEOGRAPH
+ {0xF3BC, 0x8839}, //20373 #CJK UNIFIED IDEOGRAPH
+ {0xF3BD, 0x883C}, //20374 #CJK UNIFIED IDEOGRAPH
+ {0xF3BE, 0x7F36}, //20375 #CJK UNIFIED IDEOGRAPH
+ {0xF3BF, 0x7F42}, //20376 #CJK UNIFIED IDEOGRAPH
+ {0xF3C0, 0x7F44}, //20377 #CJK UNIFIED IDEOGRAPH
+ {0xF3C1, 0x7F45}, //20378 #CJK UNIFIED IDEOGRAPH
+ {0xF3C2, 0x8210}, //20379 #CJK UNIFIED IDEOGRAPH
+ {0xF3C3, 0x7AFA}, //20380 #CJK UNIFIED IDEOGRAPH
+ {0xF3C4, 0x7AFD}, //20381 #CJK UNIFIED IDEOGRAPH
+ {0xF3C5, 0x7B08}, //20382 #CJK UNIFIED IDEOGRAPH
+ {0xF3C6, 0x7B03}, //20383 #CJK UNIFIED IDEOGRAPH
+ {0xF3C7, 0x7B04}, //20384 #CJK UNIFIED IDEOGRAPH
+ {0xF3C8, 0x7B15}, //20385 #CJK UNIFIED IDEOGRAPH
+ {0xF3C9, 0x7B0A}, //20386 #CJK UNIFIED IDEOGRAPH
+ {0xF3CA, 0x7B2B}, //20387 #CJK UNIFIED IDEOGRAPH
+ {0xF3CB, 0x7B0F}, //20388 #CJK UNIFIED IDEOGRAPH
+ {0xF3CC, 0x7B47}, //20389 #CJK UNIFIED IDEOGRAPH
+ {0xF3CD, 0x7B38}, //20390 #CJK UNIFIED IDEOGRAPH
+ {0xF3CE, 0x7B2A}, //20391 #CJK UNIFIED IDEOGRAPH
+ {0xF3CF, 0x7B19}, //20392 #CJK UNIFIED IDEOGRAPH
+ {0xF3D0, 0x7B2E}, //20393 #CJK UNIFIED IDEOGRAPH
+ {0xF3D1, 0x7B31}, //20394 #CJK UNIFIED IDEOGRAPH
+ {0xF3D2, 0x7B20}, //20395 #CJK UNIFIED IDEOGRAPH
+ {0xF3D3, 0x7B25}, //20396 #CJK UNIFIED IDEOGRAPH
+ {0xF3D4, 0x7B24}, //20397 #CJK UNIFIED IDEOGRAPH
+ {0xF3D5, 0x7B33}, //20398 #CJK UNIFIED IDEOGRAPH
+ {0xF3D6, 0x7B3E}, //20399 #CJK UNIFIED IDEOGRAPH
+ {0xF3D7, 0x7B1E}, //20400 #CJK UNIFIED IDEOGRAPH
+ {0xF3D8, 0x7B58}, //20401 #CJK UNIFIED IDEOGRAPH
+ {0xF3D9, 0x7B5A}, //20402 #CJK UNIFIED IDEOGRAPH
+ {0xF3DA, 0x7B45}, //20403 #CJK UNIFIED IDEOGRAPH
+ {0xF3DB, 0x7B75}, //20404 #CJK UNIFIED IDEOGRAPH
+ {0xF3DC, 0x7B4C}, //20405 #CJK UNIFIED IDEOGRAPH
+ {0xF3DD, 0x7B5D}, //20406 #CJK UNIFIED IDEOGRAPH
+ {0xF3DE, 0x7B60}, //20407 #CJK UNIFIED IDEOGRAPH
+ {0xF3DF, 0x7B6E}, //20408 #CJK UNIFIED IDEOGRAPH
+ {0xF3E0, 0x7B7B}, //20409 #CJK UNIFIED IDEOGRAPH
+ {0xF3E1, 0x7B62}, //20410 #CJK UNIFIED IDEOGRAPH
+ {0xF3E2, 0x7B72}, //20411 #CJK UNIFIED IDEOGRAPH
+ {0xF3E3, 0x7B71}, //20412 #CJK UNIFIED IDEOGRAPH
+ {0xF3E4, 0x7B90}, //20413 #CJK UNIFIED IDEOGRAPH
+ {0xF3E5, 0x7BA6}, //20414 #CJK UNIFIED IDEOGRAPH
+ {0xF3E6, 0x7BA7}, //20415 #CJK UNIFIED IDEOGRAPH
+ {0xF3E7, 0x7BB8}, //20416 #CJK UNIFIED IDEOGRAPH
+ {0xF3E8, 0x7BAC}, //20417 #CJK UNIFIED IDEOGRAPH
+ {0xF3E9, 0x7B9D}, //20418 #CJK UNIFIED IDEOGRAPH
+ {0xF3EA, 0x7BA8}, //20419 #CJK UNIFIED IDEOGRAPH
+ {0xF3EB, 0x7B85}, //20420 #CJK UNIFIED IDEOGRAPH
+ {0xF3EC, 0x7BAA}, //20421 #CJK UNIFIED IDEOGRAPH
+ {0xF3ED, 0x7B9C}, //20422 #CJK UNIFIED IDEOGRAPH
+ {0xF3EE, 0x7BA2}, //20423 #CJK UNIFIED IDEOGRAPH
+ {0xF3EF, 0x7BAB}, //20424 #CJK UNIFIED IDEOGRAPH
+ {0xF3F0, 0x7BB4}, //20425 #CJK UNIFIED IDEOGRAPH
+ {0xF3F1, 0x7BD1}, //20426 #CJK UNIFIED IDEOGRAPH
+ {0xF3F2, 0x7BC1}, //20427 #CJK UNIFIED IDEOGRAPH
+ {0xF3F3, 0x7BCC}, //20428 #CJK UNIFIED IDEOGRAPH
+ {0xF3F4, 0x7BDD}, //20429 #CJK UNIFIED IDEOGRAPH
+ {0xF3F5, 0x7BDA}, //20430 #CJK UNIFIED IDEOGRAPH
+ {0xF3F6, 0x7BE5}, //20431 #CJK UNIFIED IDEOGRAPH
+ {0xF3F7, 0x7BE6}, //20432 #CJK UNIFIED IDEOGRAPH
+ {0xF3F8, 0x7BEA}, //20433 #CJK UNIFIED IDEOGRAPH
+ {0xF3F9, 0x7C0C}, //20434 #CJK UNIFIED IDEOGRAPH
+ {0xF3FA, 0x7BFE}, //20435 #CJK UNIFIED IDEOGRAPH
+ {0xF3FB, 0x7BFC}, //20436 #CJK UNIFIED IDEOGRAPH
+ {0xF3FC, 0x7C0F}, //20437 #CJK UNIFIED IDEOGRAPH
+ {0xF3FD, 0x7C16}, //20438 #CJK UNIFIED IDEOGRAPH
+ {0xF3FE, 0x7C0B}, //20439 #CJK UNIFIED IDEOGRAPH
+ {0xF440, 0x9B07}, //20440 #CJK UNIFIED IDEOGRAPH
+ {0xF441, 0x9B09}, //20441 #CJK UNIFIED IDEOGRAPH
+ {0xF442, 0x9B0A}, //20442 #CJK UNIFIED IDEOGRAPH
+ {0xF443, 0x9B0B}, //20443 #CJK UNIFIED IDEOGRAPH
+ {0xF444, 0x9B0C}, //20444 #CJK UNIFIED IDEOGRAPH
+ {0xF445, 0x9B0D}, //20445 #CJK UNIFIED IDEOGRAPH
+ {0xF446, 0x9B0E}, //20446 #CJK UNIFIED IDEOGRAPH
+ {0xF447, 0x9B10}, //20447 #CJK UNIFIED IDEOGRAPH
+ {0xF448, 0x9B11}, //20448 #CJK UNIFIED IDEOGRAPH
+ {0xF449, 0x9B12}, //20449 #CJK UNIFIED IDEOGRAPH
+ {0xF44A, 0x9B14}, //20450 #CJK UNIFIED IDEOGRAPH
+ {0xF44B, 0x9B15}, //20451 #CJK UNIFIED IDEOGRAPH
+ {0xF44C, 0x9B16}, //20452 #CJK UNIFIED IDEOGRAPH
+ {0xF44D, 0x9B17}, //20453 #CJK UNIFIED IDEOGRAPH
+ {0xF44E, 0x9B18}, //20454 #CJK UNIFIED IDEOGRAPH
+ {0xF44F, 0x9B19}, //20455 #CJK UNIFIED IDEOGRAPH
+ {0xF450, 0x9B1A}, //20456 #CJK UNIFIED IDEOGRAPH
+ {0xF451, 0x9B1B}, //20457 #CJK UNIFIED IDEOGRAPH
+ {0xF452, 0x9B1C}, //20458 #CJK UNIFIED IDEOGRAPH
+ {0xF453, 0x9B1D}, //20459 #CJK UNIFIED IDEOGRAPH
+ {0xF454, 0x9B1E}, //20460 #CJK UNIFIED IDEOGRAPH
+ {0xF455, 0x9B20}, //20461 #CJK UNIFIED IDEOGRAPH
+ {0xF456, 0x9B21}, //20462 #CJK UNIFIED IDEOGRAPH
+ {0xF457, 0x9B22}, //20463 #CJK UNIFIED IDEOGRAPH
+ {0xF458, 0x9B24}, //20464 #CJK UNIFIED IDEOGRAPH
+ {0xF459, 0x9B25}, //20465 #CJK UNIFIED IDEOGRAPH
+ {0xF45A, 0x9B26}, //20466 #CJK UNIFIED IDEOGRAPH
+ {0xF45B, 0x9B27}, //20467 #CJK UNIFIED IDEOGRAPH
+ {0xF45C, 0x9B28}, //20468 #CJK UNIFIED IDEOGRAPH
+ {0xF45D, 0x9B29}, //20469 #CJK UNIFIED IDEOGRAPH
+ {0xF45E, 0x9B2A}, //20470 #CJK UNIFIED IDEOGRAPH
+ {0xF45F, 0x9B2B}, //20471 #CJK UNIFIED IDEOGRAPH
+ {0xF460, 0x9B2C}, //20472 #CJK UNIFIED IDEOGRAPH
+ {0xF461, 0x9B2D}, //20473 #CJK UNIFIED IDEOGRAPH
+ {0xF462, 0x9B2E}, //20474 #CJK UNIFIED IDEOGRAPH
+ {0xF463, 0x9B30}, //20475 #CJK UNIFIED IDEOGRAPH
+ {0xF464, 0x9B31}, //20476 #CJK UNIFIED IDEOGRAPH
+ {0xF465, 0x9B33}, //20477 #CJK UNIFIED IDEOGRAPH
+ {0xF466, 0x9B34}, //20478 #CJK UNIFIED IDEOGRAPH
+ {0xF467, 0x9B35}, //20479 #CJK UNIFIED IDEOGRAPH
+ {0xF468, 0x9B36}, //20480 #CJK UNIFIED IDEOGRAPH
+ {0xF469, 0x9B37}, //20481 #CJK UNIFIED IDEOGRAPH
+ {0xF46A, 0x9B38}, //20482 #CJK UNIFIED IDEOGRAPH
+ {0xF46B, 0x9B39}, //20483 #CJK UNIFIED IDEOGRAPH
+ {0xF46C, 0x9B3A}, //20484 #CJK UNIFIED IDEOGRAPH
+ {0xF46D, 0x9B3D}, //20485 #CJK UNIFIED IDEOGRAPH
+ {0xF46E, 0x9B3E}, //20486 #CJK UNIFIED IDEOGRAPH
+ {0xF46F, 0x9B3F}, //20487 #CJK UNIFIED IDEOGRAPH
+ {0xF470, 0x9B40}, //20488 #CJK UNIFIED IDEOGRAPH
+ {0xF471, 0x9B46}, //20489 #CJK UNIFIED IDEOGRAPH
+ {0xF472, 0x9B4A}, //20490 #CJK UNIFIED IDEOGRAPH
+ {0xF473, 0x9B4B}, //20491 #CJK UNIFIED IDEOGRAPH
+ {0xF474, 0x9B4C}, //20492 #CJK UNIFIED IDEOGRAPH
+ {0xF475, 0x9B4E}, //20493 #CJK UNIFIED IDEOGRAPH
+ {0xF476, 0x9B50}, //20494 #CJK UNIFIED IDEOGRAPH
+ {0xF477, 0x9B52}, //20495 #CJK UNIFIED IDEOGRAPH
+ {0xF478, 0x9B53}, //20496 #CJK UNIFIED IDEOGRAPH
+ {0xF479, 0x9B55}, //20497 #CJK UNIFIED IDEOGRAPH
+ {0xF47A, 0x9B56}, //20498 #CJK UNIFIED IDEOGRAPH
+ {0xF47B, 0x9B57}, //20499 #CJK UNIFIED IDEOGRAPH
+ {0xF47C, 0x9B58}, //20500 #CJK UNIFIED IDEOGRAPH
+ {0xF47D, 0x9B59}, //20501 #CJK UNIFIED IDEOGRAPH
+ {0xF47E, 0x9B5A}, //20502 #CJK UNIFIED IDEOGRAPH
+ {0xF480, 0x9B5B}, //20503 #CJK UNIFIED IDEOGRAPH
+ {0xF481, 0x9B5C}, //20504 #CJK UNIFIED IDEOGRAPH
+ {0xF482, 0x9B5D}, //20505 #CJK UNIFIED IDEOGRAPH
+ {0xF483, 0x9B5E}, //20506 #CJK UNIFIED IDEOGRAPH
+ {0xF484, 0x9B5F}, //20507 #CJK UNIFIED IDEOGRAPH
+ {0xF485, 0x9B60}, //20508 #CJK UNIFIED IDEOGRAPH
+ {0xF486, 0x9B61}, //20509 #CJK UNIFIED IDEOGRAPH
+ {0xF487, 0x9B62}, //20510 #CJK UNIFIED IDEOGRAPH
+ {0xF488, 0x9B63}, //20511 #CJK UNIFIED IDEOGRAPH
+ {0xF489, 0x9B64}, //20512 #CJK UNIFIED IDEOGRAPH
+ {0xF48A, 0x9B65}, //20513 #CJK UNIFIED IDEOGRAPH
+ {0xF48B, 0x9B66}, //20514 #CJK UNIFIED IDEOGRAPH
+ {0xF48C, 0x9B67}, //20515 #CJK UNIFIED IDEOGRAPH
+ {0xF48D, 0x9B68}, //20516 #CJK UNIFIED IDEOGRAPH
+ {0xF48E, 0x9B69}, //20517 #CJK UNIFIED IDEOGRAPH
+ {0xF48F, 0x9B6A}, //20518 #CJK UNIFIED IDEOGRAPH
+ {0xF490, 0x9B6B}, //20519 #CJK UNIFIED IDEOGRAPH
+ {0xF491, 0x9B6C}, //20520 #CJK UNIFIED IDEOGRAPH
+ {0xF492, 0x9B6D}, //20521 #CJK UNIFIED IDEOGRAPH
+ {0xF493, 0x9B6E}, //20522 #CJK UNIFIED IDEOGRAPH
+ {0xF494, 0x9B6F}, //20523 #CJK UNIFIED IDEOGRAPH
+ {0xF495, 0x9B70}, //20524 #CJK UNIFIED IDEOGRAPH
+ {0xF496, 0x9B71}, //20525 #CJK UNIFIED IDEOGRAPH
+ {0xF497, 0x9B72}, //20526 #CJK UNIFIED IDEOGRAPH
+ {0xF498, 0x9B73}, //20527 #CJK UNIFIED IDEOGRAPH
+ {0xF499, 0x9B74}, //20528 #CJK UNIFIED IDEOGRAPH
+ {0xF49A, 0x9B75}, //20529 #CJK UNIFIED IDEOGRAPH
+ {0xF49B, 0x9B76}, //20530 #CJK UNIFIED IDEOGRAPH
+ {0xF49C, 0x9B77}, //20531 #CJK UNIFIED IDEOGRAPH
+ {0xF49D, 0x9B78}, //20532 #CJK UNIFIED IDEOGRAPH
+ {0xF49E, 0x9B79}, //20533 #CJK UNIFIED IDEOGRAPH
+ {0xF49F, 0x9B7A}, //20534 #CJK UNIFIED IDEOGRAPH
+ {0xF4A0, 0x9B7B}, //20535 #CJK UNIFIED IDEOGRAPH
+ {0xF4A1, 0x7C1F}, //20536 #CJK UNIFIED IDEOGRAPH
+ {0xF4A2, 0x7C2A}, //20537 #CJK UNIFIED IDEOGRAPH
+ {0xF4A3, 0x7C26}, //20538 #CJK UNIFIED IDEOGRAPH
+ {0xF4A4, 0x7C38}, //20539 #CJK UNIFIED IDEOGRAPH
+ {0xF4A5, 0x7C41}, //20540 #CJK UNIFIED IDEOGRAPH
+ {0xF4A6, 0x7C40}, //20541 #CJK UNIFIED IDEOGRAPH
+ {0xF4A7, 0x81FE}, //20542 #CJK UNIFIED IDEOGRAPH
+ {0xF4A8, 0x8201}, //20543 #CJK UNIFIED IDEOGRAPH
+ {0xF4A9, 0x8202}, //20544 #CJK UNIFIED IDEOGRAPH
+ {0xF4AA, 0x8204}, //20545 #CJK UNIFIED IDEOGRAPH
+ {0xF4AB, 0x81EC}, //20546 #CJK UNIFIED IDEOGRAPH
+ {0xF4AC, 0x8844}, //20547 #CJK UNIFIED IDEOGRAPH
+ {0xF4AD, 0x8221}, //20548 #CJK UNIFIED IDEOGRAPH
+ {0xF4AE, 0x8222}, //20549 #CJK UNIFIED IDEOGRAPH
+ {0xF4AF, 0x8223}, //20550 #CJK UNIFIED IDEOGRAPH
+ {0xF4B0, 0x822D}, //20551 #CJK UNIFIED IDEOGRAPH
+ {0xF4B1, 0x822F}, //20552 #CJK UNIFIED IDEOGRAPH
+ {0xF4B2, 0x8228}, //20553 #CJK UNIFIED IDEOGRAPH
+ {0xF4B3, 0x822B}, //20554 #CJK UNIFIED IDEOGRAPH
+ {0xF4B4, 0x8238}, //20555 #CJK UNIFIED IDEOGRAPH
+ {0xF4B5, 0x823B}, //20556 #CJK UNIFIED IDEOGRAPH
+ {0xF4B6, 0x8233}, //20557 #CJK UNIFIED IDEOGRAPH
+ {0xF4B7, 0x8234}, //20558 #CJK UNIFIED IDEOGRAPH
+ {0xF4B8, 0x823E}, //20559 #CJK UNIFIED IDEOGRAPH
+ {0xF4B9, 0x8244}, //20560 #CJK UNIFIED IDEOGRAPH
+ {0xF4BA, 0x8249}, //20561 #CJK UNIFIED IDEOGRAPH
+ {0xF4BB, 0x824B}, //20562 #CJK UNIFIED IDEOGRAPH
+ {0xF4BC, 0x824F}, //20563 #CJK UNIFIED IDEOGRAPH
+ {0xF4BD, 0x825A}, //20564 #CJK UNIFIED IDEOGRAPH
+ {0xF4BE, 0x825F}, //20565 #CJK UNIFIED IDEOGRAPH
+ {0xF4BF, 0x8268}, //20566 #CJK UNIFIED IDEOGRAPH
+ {0xF4C0, 0x887E}, //20567 #CJK UNIFIED IDEOGRAPH
+ {0xF4C1, 0x8885}, //20568 #CJK UNIFIED IDEOGRAPH
+ {0xF4C2, 0x8888}, //20569 #CJK UNIFIED IDEOGRAPH
+ {0xF4C3, 0x88D8}, //20570 #CJK UNIFIED IDEOGRAPH
+ {0xF4C4, 0x88DF}, //20571 #CJK UNIFIED IDEOGRAPH
+ {0xF4C5, 0x895E}, //20572 #CJK UNIFIED IDEOGRAPH
+ {0xF4C6, 0x7F9D}, //20573 #CJK UNIFIED IDEOGRAPH
+ {0xF4C7, 0x7F9F}, //20574 #CJK UNIFIED IDEOGRAPH
+ {0xF4C8, 0x7FA7}, //20575 #CJK UNIFIED IDEOGRAPH
+ {0xF4C9, 0x7FAF}, //20576 #CJK UNIFIED IDEOGRAPH
+ {0xF4CA, 0x7FB0}, //20577 #CJK UNIFIED IDEOGRAPH
+ {0xF4CB, 0x7FB2}, //20578 #CJK UNIFIED IDEOGRAPH
+ {0xF4CC, 0x7C7C}, //20579 #CJK UNIFIED IDEOGRAPH
+ {0xF4CD, 0x6549}, //20580 #CJK UNIFIED IDEOGRAPH
+ {0xF4CE, 0x7C91}, //20581 #CJK UNIFIED IDEOGRAPH
+ {0xF4CF, 0x7C9D}, //20582 #CJK UNIFIED IDEOGRAPH
+ {0xF4D0, 0x7C9C}, //20583 #CJK UNIFIED IDEOGRAPH
+ {0xF4D1, 0x7C9E}, //20584 #CJK UNIFIED IDEOGRAPH
+ {0xF4D2, 0x7CA2}, //20585 #CJK UNIFIED IDEOGRAPH
+ {0xF4D3, 0x7CB2}, //20586 #CJK UNIFIED IDEOGRAPH
+ {0xF4D4, 0x7CBC}, //20587 #CJK UNIFIED IDEOGRAPH
+ {0xF4D5, 0x7CBD}, //20588 #CJK UNIFIED IDEOGRAPH
+ {0xF4D6, 0x7CC1}, //20589 #CJK UNIFIED IDEOGRAPH
+ {0xF4D7, 0x7CC7}, //20590 #CJK UNIFIED IDEOGRAPH
+ {0xF4D8, 0x7CCC}, //20591 #CJK UNIFIED IDEOGRAPH
+ {0xF4D9, 0x7CCD}, //20592 #CJK UNIFIED IDEOGRAPH
+ {0xF4DA, 0x7CC8}, //20593 #CJK UNIFIED IDEOGRAPH
+ {0xF4DB, 0x7CC5}, //20594 #CJK UNIFIED IDEOGRAPH
+ {0xF4DC, 0x7CD7}, //20595 #CJK UNIFIED IDEOGRAPH
+ {0xF4DD, 0x7CE8}, //20596 #CJK UNIFIED IDEOGRAPH
+ {0xF4DE, 0x826E}, //20597 #CJK UNIFIED IDEOGRAPH
+ {0xF4DF, 0x66A8}, //20598 #CJK UNIFIED IDEOGRAPH
+ {0xF4E0, 0x7FBF}, //20599 #CJK UNIFIED IDEOGRAPH
+ {0xF4E1, 0x7FCE}, //20600 #CJK UNIFIED IDEOGRAPH
+ {0xF4E2, 0x7FD5}, //20601 #CJK UNIFIED IDEOGRAPH
+ {0xF4E3, 0x7FE5}, //20602 #CJK UNIFIED IDEOGRAPH
+ {0xF4E4, 0x7FE1}, //20603 #CJK UNIFIED IDEOGRAPH
+ {0xF4E5, 0x7FE6}, //20604 #CJK UNIFIED IDEOGRAPH
+ {0xF4E6, 0x7FE9}, //20605 #CJK UNIFIED IDEOGRAPH
+ {0xF4E7, 0x7FEE}, //20606 #CJK UNIFIED IDEOGRAPH
+ {0xF4E8, 0x7FF3}, //20607 #CJK UNIFIED IDEOGRAPH
+ {0xF4E9, 0x7CF8}, //20608 #CJK UNIFIED IDEOGRAPH
+ {0xF4EA, 0x7D77}, //20609 #CJK UNIFIED IDEOGRAPH
+ {0xF4EB, 0x7DA6}, //20610 #CJK UNIFIED IDEOGRAPH
+ {0xF4EC, 0x7DAE}, //20611 #CJK UNIFIED IDEOGRAPH
+ {0xF4ED, 0x7E47}, //20612 #CJK UNIFIED IDEOGRAPH
+ {0xF4EE, 0x7E9B}, //20613 #CJK UNIFIED IDEOGRAPH
+ {0xF4EF, 0x9EB8}, //20614 #CJK UNIFIED IDEOGRAPH
+ {0xF4F0, 0x9EB4}, //20615 #CJK UNIFIED IDEOGRAPH
+ {0xF4F1, 0x8D73}, //20616 #CJK UNIFIED IDEOGRAPH
+ {0xF4F2, 0x8D84}, //20617 #CJK UNIFIED IDEOGRAPH
+ {0xF4F3, 0x8D94}, //20618 #CJK UNIFIED IDEOGRAPH
+ {0xF4F4, 0x8D91}, //20619 #CJK UNIFIED IDEOGRAPH
+ {0xF4F5, 0x8DB1}, //20620 #CJK UNIFIED IDEOGRAPH
+ {0xF4F6, 0x8D67}, //20621 #CJK UNIFIED IDEOGRAPH
+ {0xF4F7, 0x8D6D}, //20622 #CJK UNIFIED IDEOGRAPH
+ {0xF4F8, 0x8C47}, //20623 #CJK UNIFIED IDEOGRAPH
+ {0xF4F9, 0x8C49}, //20624 #CJK UNIFIED IDEOGRAPH
+ {0xF4FA, 0x914A}, //20625 #CJK UNIFIED IDEOGRAPH
+ {0xF4FB, 0x9150}, //20626 #CJK UNIFIED IDEOGRAPH
+ {0xF4FC, 0x914E}, //20627 #CJK UNIFIED IDEOGRAPH
+ {0xF4FD, 0x914F}, //20628 #CJK UNIFIED IDEOGRAPH
+ {0xF4FE, 0x9164}, //20629 #CJK UNIFIED IDEOGRAPH
+ {0xF540, 0x9B7C}, //20630 #CJK UNIFIED IDEOGRAPH
+ {0xF541, 0x9B7D}, //20631 #CJK UNIFIED IDEOGRAPH
+ {0xF542, 0x9B7E}, //20632 #CJK UNIFIED IDEOGRAPH
+ {0xF543, 0x9B7F}, //20633 #CJK UNIFIED IDEOGRAPH
+ {0xF544, 0x9B80}, //20634 #CJK UNIFIED IDEOGRAPH
+ {0xF545, 0x9B81}, //20635 #CJK UNIFIED IDEOGRAPH
+ {0xF546, 0x9B82}, //20636 #CJK UNIFIED IDEOGRAPH
+ {0xF547, 0x9B83}, //20637 #CJK UNIFIED IDEOGRAPH
+ {0xF548, 0x9B84}, //20638 #CJK UNIFIED IDEOGRAPH
+ {0xF549, 0x9B85}, //20639 #CJK UNIFIED IDEOGRAPH
+ {0xF54A, 0x9B86}, //20640 #CJK UNIFIED IDEOGRAPH
+ {0xF54B, 0x9B87}, //20641 #CJK UNIFIED IDEOGRAPH
+ {0xF54C, 0x9B88}, //20642 #CJK UNIFIED IDEOGRAPH
+ {0xF54D, 0x9B89}, //20643 #CJK UNIFIED IDEOGRAPH
+ {0xF54E, 0x9B8A}, //20644 #CJK UNIFIED IDEOGRAPH
+ {0xF54F, 0x9B8B}, //20645 #CJK UNIFIED IDEOGRAPH
+ {0xF550, 0x9B8C}, //20646 #CJK UNIFIED IDEOGRAPH
+ {0xF551, 0x9B8D}, //20647 #CJK UNIFIED IDEOGRAPH
+ {0xF552, 0x9B8E}, //20648 #CJK UNIFIED IDEOGRAPH
+ {0xF553, 0x9B8F}, //20649 #CJK UNIFIED IDEOGRAPH
+ {0xF554, 0x9B90}, //20650 #CJK UNIFIED IDEOGRAPH
+ {0xF555, 0x9B91}, //20651 #CJK UNIFIED IDEOGRAPH
+ {0xF556, 0x9B92}, //20652 #CJK UNIFIED IDEOGRAPH
+ {0xF557, 0x9B93}, //20653 #CJK UNIFIED IDEOGRAPH
+ {0xF558, 0x9B94}, //20654 #CJK UNIFIED IDEOGRAPH
+ {0xF559, 0x9B95}, //20655 #CJK UNIFIED IDEOGRAPH
+ {0xF55A, 0x9B96}, //20656 #CJK UNIFIED IDEOGRAPH
+ {0xF55B, 0x9B97}, //20657 #CJK UNIFIED IDEOGRAPH
+ {0xF55C, 0x9B98}, //20658 #CJK UNIFIED IDEOGRAPH
+ {0xF55D, 0x9B99}, //20659 #CJK UNIFIED IDEOGRAPH
+ {0xF55E, 0x9B9A}, //20660 #CJK UNIFIED IDEOGRAPH
+ {0xF55F, 0x9B9B}, //20661 #CJK UNIFIED IDEOGRAPH
+ {0xF560, 0x9B9C}, //20662 #CJK UNIFIED IDEOGRAPH
+ {0xF561, 0x9B9D}, //20663 #CJK UNIFIED IDEOGRAPH
+ {0xF562, 0x9B9E}, //20664 #CJK UNIFIED IDEOGRAPH
+ {0xF563, 0x9B9F}, //20665 #CJK UNIFIED IDEOGRAPH
+ {0xF564, 0x9BA0}, //20666 #CJK UNIFIED IDEOGRAPH
+ {0xF565, 0x9BA1}, //20667 #CJK UNIFIED IDEOGRAPH
+ {0xF566, 0x9BA2}, //20668 #CJK UNIFIED IDEOGRAPH
+ {0xF567, 0x9BA3}, //20669 #CJK UNIFIED IDEOGRAPH
+ {0xF568, 0x9BA4}, //20670 #CJK UNIFIED IDEOGRAPH
+ {0xF569, 0x9BA5}, //20671 #CJK UNIFIED IDEOGRAPH
+ {0xF56A, 0x9BA6}, //20672 #CJK UNIFIED IDEOGRAPH
+ {0xF56B, 0x9BA7}, //20673 #CJK UNIFIED IDEOGRAPH
+ {0xF56C, 0x9BA8}, //20674 #CJK UNIFIED IDEOGRAPH
+ {0xF56D, 0x9BA9}, //20675 #CJK UNIFIED IDEOGRAPH
+ {0xF56E, 0x9BAA}, //20676 #CJK UNIFIED IDEOGRAPH
+ {0xF56F, 0x9BAB}, //20677 #CJK UNIFIED IDEOGRAPH
+ {0xF570, 0x9BAC}, //20678 #CJK UNIFIED IDEOGRAPH
+ {0xF571, 0x9BAD}, //20679 #CJK UNIFIED IDEOGRAPH
+ {0xF572, 0x9BAE}, //20680 #CJK UNIFIED IDEOGRAPH
+ {0xF573, 0x9BAF}, //20681 #CJK UNIFIED IDEOGRAPH
+ {0xF574, 0x9BB0}, //20682 #CJK UNIFIED IDEOGRAPH
+ {0xF575, 0x9BB1}, //20683 #CJK UNIFIED IDEOGRAPH
+ {0xF576, 0x9BB2}, //20684 #CJK UNIFIED IDEOGRAPH
+ {0xF577, 0x9BB3}, //20685 #CJK UNIFIED IDEOGRAPH
+ {0xF578, 0x9BB4}, //20686 #CJK UNIFIED IDEOGRAPH
+ {0xF579, 0x9BB5}, //20687 #CJK UNIFIED IDEOGRAPH
+ {0xF57A, 0x9BB6}, //20688 #CJK UNIFIED IDEOGRAPH
+ {0xF57B, 0x9BB7}, //20689 #CJK UNIFIED IDEOGRAPH
+ {0xF57C, 0x9BB8}, //20690 #CJK UNIFIED IDEOGRAPH
+ {0xF57D, 0x9BB9}, //20691 #CJK UNIFIED IDEOGRAPH
+ {0xF57E, 0x9BBA}, //20692 #CJK UNIFIED IDEOGRAPH
+ {0xF580, 0x9BBB}, //20693 #CJK UNIFIED IDEOGRAPH
+ {0xF581, 0x9BBC}, //20694 #CJK UNIFIED IDEOGRAPH
+ {0xF582, 0x9BBD}, //20695 #CJK UNIFIED IDEOGRAPH
+ {0xF583, 0x9BBE}, //20696 #CJK UNIFIED IDEOGRAPH
+ {0xF584, 0x9BBF}, //20697 #CJK UNIFIED IDEOGRAPH
+ {0xF585, 0x9BC0}, //20698 #CJK UNIFIED IDEOGRAPH
+ {0xF586, 0x9BC1}, //20699 #CJK UNIFIED IDEOGRAPH
+ {0xF587, 0x9BC2}, //20700 #CJK UNIFIED IDEOGRAPH
+ {0xF588, 0x9BC3}, //20701 #CJK UNIFIED IDEOGRAPH
+ {0xF589, 0x9BC4}, //20702 #CJK UNIFIED IDEOGRAPH
+ {0xF58A, 0x9BC5}, //20703 #CJK UNIFIED IDEOGRAPH
+ {0xF58B, 0x9BC6}, //20704 #CJK UNIFIED IDEOGRAPH
+ {0xF58C, 0x9BC7}, //20705 #CJK UNIFIED IDEOGRAPH
+ {0xF58D, 0x9BC8}, //20706 #CJK UNIFIED IDEOGRAPH
+ {0xF58E, 0x9BC9}, //20707 #CJK UNIFIED IDEOGRAPH
+ {0xF58F, 0x9BCA}, //20708 #CJK UNIFIED IDEOGRAPH
+ {0xF590, 0x9BCB}, //20709 #CJK UNIFIED IDEOGRAPH
+ {0xF591, 0x9BCC}, //20710 #CJK UNIFIED IDEOGRAPH
+ {0xF592, 0x9BCD}, //20711 #CJK UNIFIED IDEOGRAPH
+ {0xF593, 0x9BCE}, //20712 #CJK UNIFIED IDEOGRAPH
+ {0xF594, 0x9BCF}, //20713 #CJK UNIFIED IDEOGRAPH
+ {0xF595, 0x9BD0}, //20714 #CJK UNIFIED IDEOGRAPH
+ {0xF596, 0x9BD1}, //20715 #CJK UNIFIED IDEOGRAPH
+ {0xF597, 0x9BD2}, //20716 #CJK UNIFIED IDEOGRAPH
+ {0xF598, 0x9BD3}, //20717 #CJK UNIFIED IDEOGRAPH
+ {0xF599, 0x9BD4}, //20718 #CJK UNIFIED IDEOGRAPH
+ {0xF59A, 0x9BD5}, //20719 #CJK UNIFIED IDEOGRAPH
+ {0xF59B, 0x9BD6}, //20720 #CJK UNIFIED IDEOGRAPH
+ {0xF59C, 0x9BD7}, //20721 #CJK UNIFIED IDEOGRAPH
+ {0xF59D, 0x9BD8}, //20722 #CJK UNIFIED IDEOGRAPH
+ {0xF59E, 0x9BD9}, //20723 #CJK UNIFIED IDEOGRAPH
+ {0xF59F, 0x9BDA}, //20724 #CJK UNIFIED IDEOGRAPH
+ {0xF5A0, 0x9BDB}, //20725 #CJK UNIFIED IDEOGRAPH
+ {0xF5A1, 0x9162}, //20726 #CJK UNIFIED IDEOGRAPH
+ {0xF5A2, 0x9161}, //20727 #CJK UNIFIED IDEOGRAPH
+ {0xF5A3, 0x9170}, //20728 #CJK UNIFIED IDEOGRAPH
+ {0xF5A4, 0x9169}, //20729 #CJK UNIFIED IDEOGRAPH
+ {0xF5A5, 0x916F}, //20730 #CJK UNIFIED IDEOGRAPH
+ {0xF5A6, 0x917D}, //20731 #CJK UNIFIED IDEOGRAPH
+ {0xF5A7, 0x917E}, //20732 #CJK UNIFIED IDEOGRAPH
+ {0xF5A8, 0x9172}, //20733 #CJK UNIFIED IDEOGRAPH
+ {0xF5A9, 0x9174}, //20734 #CJK UNIFIED IDEOGRAPH
+ {0xF5AA, 0x9179}, //20735 #CJK UNIFIED IDEOGRAPH
+ {0xF5AB, 0x918C}, //20736 #CJK UNIFIED IDEOGRAPH
+ {0xF5AC, 0x9185}, //20737 #CJK UNIFIED IDEOGRAPH
+ {0xF5AD, 0x9190}, //20738 #CJK UNIFIED IDEOGRAPH
+ {0xF5AE, 0x918D}, //20739 #CJK UNIFIED IDEOGRAPH
+ {0xF5AF, 0x9191}, //20740 #CJK UNIFIED IDEOGRAPH
+ {0xF5B0, 0x91A2}, //20741 #CJK UNIFIED IDEOGRAPH
+ {0xF5B1, 0x91A3}, //20742 #CJK UNIFIED IDEOGRAPH
+ {0xF5B2, 0x91AA}, //20743 #CJK UNIFIED IDEOGRAPH
+ {0xF5B3, 0x91AD}, //20744 #CJK UNIFIED IDEOGRAPH
+ {0xF5B4, 0x91AE}, //20745 #CJK UNIFIED IDEOGRAPH
+ {0xF5B5, 0x91AF}, //20746 #CJK UNIFIED IDEOGRAPH
+ {0xF5B6, 0x91B5}, //20747 #CJK UNIFIED IDEOGRAPH
+ {0xF5B7, 0x91B4}, //20748 #CJK UNIFIED IDEOGRAPH
+ {0xF5B8, 0x91BA}, //20749 #CJK UNIFIED IDEOGRAPH
+ {0xF5B9, 0x8C55}, //20750 #CJK UNIFIED IDEOGRAPH
+ {0xF5BA, 0x9E7E}, //20751 #CJK UNIFIED IDEOGRAPH
+ {0xF5BB, 0x8DB8}, //20752 #CJK UNIFIED IDEOGRAPH
+ {0xF5BC, 0x8DEB}, //20753 #CJK UNIFIED IDEOGRAPH
+ {0xF5BD, 0x8E05}, //20754 #CJK UNIFIED IDEOGRAPH
+ {0xF5BE, 0x8E59}, //20755 #CJK UNIFIED IDEOGRAPH
+ {0xF5BF, 0x8E69}, //20756 #CJK UNIFIED IDEOGRAPH
+ {0xF5C0, 0x8DB5}, //20757 #CJK UNIFIED IDEOGRAPH
+ {0xF5C1, 0x8DBF}, //20758 #CJK UNIFIED IDEOGRAPH
+ {0xF5C2, 0x8DBC}, //20759 #CJK UNIFIED IDEOGRAPH
+ {0xF5C3, 0x8DBA}, //20760 #CJK UNIFIED IDEOGRAPH
+ {0xF5C4, 0x8DC4}, //20761 #CJK UNIFIED IDEOGRAPH
+ {0xF5C5, 0x8DD6}, //20762 #CJK UNIFIED IDEOGRAPH
+ {0xF5C6, 0x8DD7}, //20763 #CJK UNIFIED IDEOGRAPH
+ {0xF5C7, 0x8DDA}, //20764 #CJK UNIFIED IDEOGRAPH
+ {0xF5C8, 0x8DDE}, //20765 #CJK UNIFIED IDEOGRAPH
+ {0xF5C9, 0x8DCE}, //20766 #CJK UNIFIED IDEOGRAPH
+ {0xF5CA, 0x8DCF}, //20767 #CJK UNIFIED IDEOGRAPH
+ {0xF5CB, 0x8DDB}, //20768 #CJK UNIFIED IDEOGRAPH
+ {0xF5CC, 0x8DC6}, //20769 #CJK UNIFIED IDEOGRAPH
+ {0xF5CD, 0x8DEC}, //20770 #CJK UNIFIED IDEOGRAPH
+ {0xF5CE, 0x8DF7}, //20771 #CJK UNIFIED IDEOGRAPH
+ {0xF5CF, 0x8DF8}, //20772 #CJK UNIFIED IDEOGRAPH
+ {0xF5D0, 0x8DE3}, //20773 #CJK UNIFIED IDEOGRAPH
+ {0xF5D1, 0x8DF9}, //20774 #CJK UNIFIED IDEOGRAPH
+ {0xF5D2, 0x8DFB}, //20775 #CJK UNIFIED IDEOGRAPH
+ {0xF5D3, 0x8DE4}, //20776 #CJK UNIFIED IDEOGRAPH
+ {0xF5D4, 0x8E09}, //20777 #CJK UNIFIED IDEOGRAPH
+ {0xF5D5, 0x8DFD}, //20778 #CJK UNIFIED IDEOGRAPH
+ {0xF5D6, 0x8E14}, //20779 #CJK UNIFIED IDEOGRAPH
+ {0xF5D7, 0x8E1D}, //20780 #CJK UNIFIED IDEOGRAPH
+ {0xF5D8, 0x8E1F}, //20781 #CJK UNIFIED IDEOGRAPH
+ {0xF5D9, 0x8E2C}, //20782 #CJK UNIFIED IDEOGRAPH
+ {0xF5DA, 0x8E2E}, //20783 #CJK UNIFIED IDEOGRAPH
+ {0xF5DB, 0x8E23}, //20784 #CJK UNIFIED IDEOGRAPH
+ {0xF5DC, 0x8E2F}, //20785 #CJK UNIFIED IDEOGRAPH
+ {0xF5DD, 0x8E3A}, //20786 #CJK UNIFIED IDEOGRAPH
+ {0xF5DE, 0x8E40}, //20787 #CJK UNIFIED IDEOGRAPH
+ {0xF5DF, 0x8E39}, //20788 #CJK UNIFIED IDEOGRAPH
+ {0xF5E0, 0x8E35}, //20789 #CJK UNIFIED IDEOGRAPH
+ {0xF5E1, 0x8E3D}, //20790 #CJK UNIFIED IDEOGRAPH
+ {0xF5E2, 0x8E31}, //20791 #CJK UNIFIED IDEOGRAPH
+ {0xF5E3, 0x8E49}, //20792 #CJK UNIFIED IDEOGRAPH
+ {0xF5E4, 0x8E41}, //20793 #CJK UNIFIED IDEOGRAPH
+ {0xF5E5, 0x8E42}, //20794 #CJK UNIFIED IDEOGRAPH
+ {0xF5E6, 0x8E51}, //20795 #CJK UNIFIED IDEOGRAPH
+ {0xF5E7, 0x8E52}, //20796 #CJK UNIFIED IDEOGRAPH
+ {0xF5E8, 0x8E4A}, //20797 #CJK UNIFIED IDEOGRAPH
+ {0xF5E9, 0x8E70}, //20798 #CJK UNIFIED IDEOGRAPH
+ {0xF5EA, 0x8E76}, //20799 #CJK UNIFIED IDEOGRAPH
+ {0xF5EB, 0x8E7C}, //20800 #CJK UNIFIED IDEOGRAPH
+ {0xF5EC, 0x8E6F}, //20801 #CJK UNIFIED IDEOGRAPH
+ {0xF5ED, 0x8E74}, //20802 #CJK UNIFIED IDEOGRAPH
+ {0xF5EE, 0x8E85}, //20803 #CJK UNIFIED IDEOGRAPH
+ {0xF5EF, 0x8E8F}, //20804 #CJK UNIFIED IDEOGRAPH
+ {0xF5F0, 0x8E94}, //20805 #CJK UNIFIED IDEOGRAPH
+ {0xF5F1, 0x8E90}, //20806 #CJK UNIFIED IDEOGRAPH
+ {0xF5F2, 0x8E9C}, //20807 #CJK UNIFIED IDEOGRAPH
+ {0xF5F3, 0x8E9E}, //20808 #CJK UNIFIED IDEOGRAPH
+ {0xF5F4, 0x8C78}, //20809 #CJK UNIFIED IDEOGRAPH
+ {0xF5F5, 0x8C82}, //20810 #CJK UNIFIED IDEOGRAPH
+ {0xF5F6, 0x8C8A}, //20811 #CJK UNIFIED IDEOGRAPH
+ {0xF5F7, 0x8C85}, //20812 #CJK UNIFIED IDEOGRAPH
+ {0xF5F8, 0x8C98}, //20813 #CJK UNIFIED IDEOGRAPH
+ {0xF5F9, 0x8C94}, //20814 #CJK UNIFIED IDEOGRAPH
+ {0xF5FA, 0x659B}, //20815 #CJK UNIFIED IDEOGRAPH
+ {0xF5FB, 0x89D6}, //20816 #CJK UNIFIED IDEOGRAPH
+ {0xF5FC, 0x89DE}, //20817 #CJK UNIFIED IDEOGRAPH
+ {0xF5FD, 0x89DA}, //20818 #CJK UNIFIED IDEOGRAPH
+ {0xF5FE, 0x89DC}, //20819 #CJK UNIFIED IDEOGRAPH
+ {0xF640, 0x9BDC}, //20820 #CJK UNIFIED IDEOGRAPH
+ {0xF641, 0x9BDD}, //20821 #CJK UNIFIED IDEOGRAPH
+ {0xF642, 0x9BDE}, //20822 #CJK UNIFIED IDEOGRAPH
+ {0xF643, 0x9BDF}, //20823 #CJK UNIFIED IDEOGRAPH
+ {0xF644, 0x9BE0}, //20824 #CJK UNIFIED IDEOGRAPH
+ {0xF645, 0x9BE1}, //20825 #CJK UNIFIED IDEOGRAPH
+ {0xF646, 0x9BE2}, //20826 #CJK UNIFIED IDEOGRAPH
+ {0xF647, 0x9BE3}, //20827 #CJK UNIFIED IDEOGRAPH
+ {0xF648, 0x9BE4}, //20828 #CJK UNIFIED IDEOGRAPH
+ {0xF649, 0x9BE5}, //20829 #CJK UNIFIED IDEOGRAPH
+ {0xF64A, 0x9BE6}, //20830 #CJK UNIFIED IDEOGRAPH
+ {0xF64B, 0x9BE7}, //20831 #CJK UNIFIED IDEOGRAPH
+ {0xF64C, 0x9BE8}, //20832 #CJK UNIFIED IDEOGRAPH
+ {0xF64D, 0x9BE9}, //20833 #CJK UNIFIED IDEOGRAPH
+ {0xF64E, 0x9BEA}, //20834 #CJK UNIFIED IDEOGRAPH
+ {0xF64F, 0x9BEB}, //20835 #CJK UNIFIED IDEOGRAPH
+ {0xF650, 0x9BEC}, //20836 #CJK UNIFIED IDEOGRAPH
+ {0xF651, 0x9BED}, //20837 #CJK UNIFIED IDEOGRAPH
+ {0xF652, 0x9BEE}, //20838 #CJK UNIFIED IDEOGRAPH
+ {0xF653, 0x9BEF}, //20839 #CJK UNIFIED IDEOGRAPH
+ {0xF654, 0x9BF0}, //20840 #CJK UNIFIED IDEOGRAPH
+ {0xF655, 0x9BF1}, //20841 #CJK UNIFIED IDEOGRAPH
+ {0xF656, 0x9BF2}, //20842 #CJK UNIFIED IDEOGRAPH
+ {0xF657, 0x9BF3}, //20843 #CJK UNIFIED IDEOGRAPH
+ {0xF658, 0x9BF4}, //20844 #CJK UNIFIED IDEOGRAPH
+ {0xF659, 0x9BF5}, //20845 #CJK UNIFIED IDEOGRAPH
+ {0xF65A, 0x9BF6}, //20846 #CJK UNIFIED IDEOGRAPH
+ {0xF65B, 0x9BF7}, //20847 #CJK UNIFIED IDEOGRAPH
+ {0xF65C, 0x9BF8}, //20848 #CJK UNIFIED IDEOGRAPH
+ {0xF65D, 0x9BF9}, //20849 #CJK UNIFIED IDEOGRAPH
+ {0xF65E, 0x9BFA}, //20850 #CJK UNIFIED IDEOGRAPH
+ {0xF65F, 0x9BFB}, //20851 #CJK UNIFIED IDEOGRAPH
+ {0xF660, 0x9BFC}, //20852 #CJK UNIFIED IDEOGRAPH
+ {0xF661, 0x9BFD}, //20853 #CJK UNIFIED IDEOGRAPH
+ {0xF662, 0x9BFE}, //20854 #CJK UNIFIED IDEOGRAPH
+ {0xF663, 0x9BFF}, //20855 #CJK UNIFIED IDEOGRAPH
+ {0xF664, 0x9C00}, //20856 #CJK UNIFIED IDEOGRAPH
+ {0xF665, 0x9C01}, //20857 #CJK UNIFIED IDEOGRAPH
+ {0xF666, 0x9C02}, //20858 #CJK UNIFIED IDEOGRAPH
+ {0xF667, 0x9C03}, //20859 #CJK UNIFIED IDEOGRAPH
+ {0xF668, 0x9C04}, //20860 #CJK UNIFIED IDEOGRAPH
+ {0xF669, 0x9C05}, //20861 #CJK UNIFIED IDEOGRAPH
+ {0xF66A, 0x9C06}, //20862 #CJK UNIFIED IDEOGRAPH
+ {0xF66B, 0x9C07}, //20863 #CJK UNIFIED IDEOGRAPH
+ {0xF66C, 0x9C08}, //20864 #CJK UNIFIED IDEOGRAPH
+ {0xF66D, 0x9C09}, //20865 #CJK UNIFIED IDEOGRAPH
+ {0xF66E, 0x9C0A}, //20866 #CJK UNIFIED IDEOGRAPH
+ {0xF66F, 0x9C0B}, //20867 #CJK UNIFIED IDEOGRAPH
+ {0xF670, 0x9C0C}, //20868 #CJK UNIFIED IDEOGRAPH
+ {0xF671, 0x9C0D}, //20869 #CJK UNIFIED IDEOGRAPH
+ {0xF672, 0x9C0E}, //20870 #CJK UNIFIED IDEOGRAPH
+ {0xF673, 0x9C0F}, //20871 #CJK UNIFIED IDEOGRAPH
+ {0xF674, 0x9C10}, //20872 #CJK UNIFIED IDEOGRAPH
+ {0xF675, 0x9C11}, //20873 #CJK UNIFIED IDEOGRAPH
+ {0xF676, 0x9C12}, //20874 #CJK UNIFIED IDEOGRAPH
+ {0xF677, 0x9C13}, //20875 #CJK UNIFIED IDEOGRAPH
+ {0xF678, 0x9C14}, //20876 #CJK UNIFIED IDEOGRAPH
+ {0xF679, 0x9C15}, //20877 #CJK UNIFIED IDEOGRAPH
+ {0xF67A, 0x9C16}, //20878 #CJK UNIFIED IDEOGRAPH
+ {0xF67B, 0x9C17}, //20879 #CJK UNIFIED IDEOGRAPH
+ {0xF67C, 0x9C18}, //20880 #CJK UNIFIED IDEOGRAPH
+ {0xF67D, 0x9C19}, //20881 #CJK UNIFIED IDEOGRAPH
+ {0xF67E, 0x9C1A}, //20882 #CJK UNIFIED IDEOGRAPH
+ {0xF680, 0x9C1B}, //20883 #CJK UNIFIED IDEOGRAPH
+ {0xF681, 0x9C1C}, //20884 #CJK UNIFIED IDEOGRAPH
+ {0xF682, 0x9C1D}, //20885 #CJK UNIFIED IDEOGRAPH
+ {0xF683, 0x9C1E}, //20886 #CJK UNIFIED IDEOGRAPH
+ {0xF684, 0x9C1F}, //20887 #CJK UNIFIED IDEOGRAPH
+ {0xF685, 0x9C20}, //20888 #CJK UNIFIED IDEOGRAPH
+ {0xF686, 0x9C21}, //20889 #CJK UNIFIED IDEOGRAPH
+ {0xF687, 0x9C22}, //20890 #CJK UNIFIED IDEOGRAPH
+ {0xF688, 0x9C23}, //20891 #CJK UNIFIED IDEOGRAPH
+ {0xF689, 0x9C24}, //20892 #CJK UNIFIED IDEOGRAPH
+ {0xF68A, 0x9C25}, //20893 #CJK UNIFIED IDEOGRAPH
+ {0xF68B, 0x9C26}, //20894 #CJK UNIFIED IDEOGRAPH
+ {0xF68C, 0x9C27}, //20895 #CJK UNIFIED IDEOGRAPH
+ {0xF68D, 0x9C28}, //20896 #CJK UNIFIED IDEOGRAPH
+ {0xF68E, 0x9C29}, //20897 #CJK UNIFIED IDEOGRAPH
+ {0xF68F, 0x9C2A}, //20898 #CJK UNIFIED IDEOGRAPH
+ {0xF690, 0x9C2B}, //20899 #CJK UNIFIED IDEOGRAPH
+ {0xF691, 0x9C2C}, //20900 #CJK UNIFIED IDEOGRAPH
+ {0xF692, 0x9C2D}, //20901 #CJK UNIFIED IDEOGRAPH
+ {0xF693, 0x9C2E}, //20902 #CJK UNIFIED IDEOGRAPH
+ {0xF694, 0x9C2F}, //20903 #CJK UNIFIED IDEOGRAPH
+ {0xF695, 0x9C30}, //20904 #CJK UNIFIED IDEOGRAPH
+ {0xF696, 0x9C31}, //20905 #CJK UNIFIED IDEOGRAPH
+ {0xF697, 0x9C32}, //20906 #CJK UNIFIED IDEOGRAPH
+ {0xF698, 0x9C33}, //20907 #CJK UNIFIED IDEOGRAPH
+ {0xF699, 0x9C34}, //20908 #CJK UNIFIED IDEOGRAPH
+ {0xF69A, 0x9C35}, //20909 #CJK UNIFIED IDEOGRAPH
+ {0xF69B, 0x9C36}, //20910 #CJK UNIFIED IDEOGRAPH
+ {0xF69C, 0x9C37}, //20911 #CJK UNIFIED IDEOGRAPH
+ {0xF69D, 0x9C38}, //20912 #CJK UNIFIED IDEOGRAPH
+ {0xF69E, 0x9C39}, //20913 #CJK UNIFIED IDEOGRAPH
+ {0xF69F, 0x9C3A}, //20914 #CJK UNIFIED IDEOGRAPH
+ {0xF6A0, 0x9C3B}, //20915 #CJK UNIFIED IDEOGRAPH
+ {0xF6A1, 0x89E5}, //20916 #CJK UNIFIED IDEOGRAPH
+ {0xF6A2, 0x89EB}, //20917 #CJK UNIFIED IDEOGRAPH
+ {0xF6A3, 0x89EF}, //20918 #CJK UNIFIED IDEOGRAPH
+ {0xF6A4, 0x8A3E}, //20919 #CJK UNIFIED IDEOGRAPH
+ {0xF6A5, 0x8B26}, //20920 #CJK UNIFIED IDEOGRAPH
+ {0xF6A6, 0x9753}, //20921 #CJK UNIFIED IDEOGRAPH
+ {0xF6A7, 0x96E9}, //20922 #CJK UNIFIED IDEOGRAPH
+ {0xF6A8, 0x96F3}, //20923 #CJK UNIFIED IDEOGRAPH
+ {0xF6A9, 0x96EF}, //20924 #CJK UNIFIED IDEOGRAPH
+ {0xF6AA, 0x9706}, //20925 #CJK UNIFIED IDEOGRAPH
+ {0xF6AB, 0x9701}, //20926 #CJK UNIFIED IDEOGRAPH
+ {0xF6AC, 0x9708}, //20927 #CJK UNIFIED IDEOGRAPH
+ {0xF6AD, 0x970F}, //20928 #CJK UNIFIED IDEOGRAPH
+ {0xF6AE, 0x970E}, //20929 #CJK UNIFIED IDEOGRAPH
+ {0xF6AF, 0x972A}, //20930 #CJK UNIFIED IDEOGRAPH
+ {0xF6B0, 0x972D}, //20931 #CJK UNIFIED IDEOGRAPH
+ {0xF6B1, 0x9730}, //20932 #CJK UNIFIED IDEOGRAPH
+ {0xF6B2, 0x973E}, //20933 #CJK UNIFIED IDEOGRAPH
+ {0xF6B3, 0x9F80}, //20934 #CJK UNIFIED IDEOGRAPH
+ {0xF6B4, 0x9F83}, //20935 #CJK UNIFIED IDEOGRAPH
+ {0xF6B5, 0x9F85}, //20936 #CJK UNIFIED IDEOGRAPH
+ {0xF6B6, 0x9F86}, //20937 #CJK UNIFIED IDEOGRAPH
+ {0xF6B7, 0x9F87}, //20938 #CJK UNIFIED IDEOGRAPH
+ {0xF6B8, 0x9F88}, //20939 #CJK UNIFIED IDEOGRAPH
+ {0xF6B9, 0x9F89}, //20940 #CJK UNIFIED IDEOGRAPH
+ {0xF6BA, 0x9F8A}, //20941 #CJK UNIFIED IDEOGRAPH
+ {0xF6BB, 0x9F8C}, //20942 #CJK UNIFIED IDEOGRAPH
+ {0xF6BC, 0x9EFE}, //20943 #CJK UNIFIED IDEOGRAPH
+ {0xF6BD, 0x9F0B}, //20944 #CJK UNIFIED IDEOGRAPH
+ {0xF6BE, 0x9F0D}, //20945 #CJK UNIFIED IDEOGRAPH
+ {0xF6BF, 0x96B9}, //20946 #CJK UNIFIED IDEOGRAPH
+ {0xF6C0, 0x96BC}, //20947 #CJK UNIFIED IDEOGRAPH
+ {0xF6C1, 0x96BD}, //20948 #CJK UNIFIED IDEOGRAPH
+ {0xF6C2, 0x96CE}, //20949 #CJK UNIFIED IDEOGRAPH
+ {0xF6C3, 0x96D2}, //20950 #CJK UNIFIED IDEOGRAPH
+ {0xF6C4, 0x77BF}, //20951 #CJK UNIFIED IDEOGRAPH
+ {0xF6C5, 0x96E0}, //20952 #CJK UNIFIED IDEOGRAPH
+ {0xF6C6, 0x928E}, //20953 #CJK UNIFIED IDEOGRAPH
+ {0xF6C7, 0x92AE}, //20954 #CJK UNIFIED IDEOGRAPH
+ {0xF6C8, 0x92C8}, //20955 #CJK UNIFIED IDEOGRAPH
+ {0xF6C9, 0x933E}, //20956 #CJK UNIFIED IDEOGRAPH
+ {0xF6CA, 0x936A}, //20957 #CJK UNIFIED IDEOGRAPH
+ {0xF6CB, 0x93CA}, //20958 #CJK UNIFIED IDEOGRAPH
+ {0xF6CC, 0x938F}, //20959 #CJK UNIFIED IDEOGRAPH
+ {0xF6CD, 0x943E}, //20960 #CJK UNIFIED IDEOGRAPH
+ {0xF6CE, 0x946B}, //20961 #CJK UNIFIED IDEOGRAPH
+ {0xF6CF, 0x9C7F}, //20962 #CJK UNIFIED IDEOGRAPH
+ {0xF6D0, 0x9C82}, //20963 #CJK UNIFIED IDEOGRAPH
+ {0xF6D1, 0x9C85}, //20964 #CJK UNIFIED IDEOGRAPH
+ {0xF6D2, 0x9C86}, //20965 #CJK UNIFIED IDEOGRAPH
+ {0xF6D3, 0x9C87}, //20966 #CJK UNIFIED IDEOGRAPH
+ {0xF6D4, 0x9C88}, //20967 #CJK UNIFIED IDEOGRAPH
+ {0xF6D5, 0x7A23}, //20968 #CJK UNIFIED IDEOGRAPH
+ {0xF6D6, 0x9C8B}, //20969 #CJK UNIFIED IDEOGRAPH
+ {0xF6D7, 0x9C8E}, //20970 #CJK UNIFIED IDEOGRAPH
+ {0xF6D8, 0x9C90}, //20971 #CJK UNIFIED IDEOGRAPH
+ {0xF6D9, 0x9C91}, //20972 #CJK UNIFIED IDEOGRAPH
+ {0xF6DA, 0x9C92}, //20973 #CJK UNIFIED IDEOGRAPH
+ {0xF6DB, 0x9C94}, //20974 #CJK UNIFIED IDEOGRAPH
+ {0xF6DC, 0x9C95}, //20975 #CJK UNIFIED IDEOGRAPH
+ {0xF6DD, 0x9C9A}, //20976 #CJK UNIFIED IDEOGRAPH
+ {0xF6DE, 0x9C9B}, //20977 #CJK UNIFIED IDEOGRAPH
+ {0xF6DF, 0x9C9E}, //20978 #CJK UNIFIED IDEOGRAPH
+ {0xF6E0, 0x9C9F}, //20979 #CJK UNIFIED IDEOGRAPH
+ {0xF6E1, 0x9CA0}, //20980 #CJK UNIFIED IDEOGRAPH
+ {0xF6E2, 0x9CA1}, //20981 #CJK UNIFIED IDEOGRAPH
+ {0xF6E3, 0x9CA2}, //20982 #CJK UNIFIED IDEOGRAPH
+ {0xF6E4, 0x9CA3}, //20983 #CJK UNIFIED IDEOGRAPH
+ {0xF6E5, 0x9CA5}, //20984 #CJK UNIFIED IDEOGRAPH
+ {0xF6E6, 0x9CA6}, //20985 #CJK UNIFIED IDEOGRAPH
+ {0xF6E7, 0x9CA7}, //20986 #CJK UNIFIED IDEOGRAPH
+ {0xF6E8, 0x9CA8}, //20987 #CJK UNIFIED IDEOGRAPH
+ {0xF6E9, 0x9CA9}, //20988 #CJK UNIFIED IDEOGRAPH
+ {0xF6EA, 0x9CAB}, //20989 #CJK UNIFIED IDEOGRAPH
+ {0xF6EB, 0x9CAD}, //20990 #CJK UNIFIED IDEOGRAPH
+ {0xF6EC, 0x9CAE}, //20991 #CJK UNIFIED IDEOGRAPH
+ {0xF6ED, 0x9CB0}, //20992 #CJK UNIFIED IDEOGRAPH
+ {0xF6EE, 0x9CB1}, //20993 #CJK UNIFIED IDEOGRAPH
+ {0xF6EF, 0x9CB2}, //20994 #CJK UNIFIED IDEOGRAPH
+ {0xF6F0, 0x9CB3}, //20995 #CJK UNIFIED IDEOGRAPH
+ {0xF6F1, 0x9CB4}, //20996 #CJK UNIFIED IDEOGRAPH
+ {0xF6F2, 0x9CB5}, //20997 #CJK UNIFIED IDEOGRAPH
+ {0xF6F3, 0x9CB6}, //20998 #CJK UNIFIED IDEOGRAPH
+ {0xF6F4, 0x9CB7}, //20999 #CJK UNIFIED IDEOGRAPH
+ {0xF6F5, 0x9CBA}, //21000 #CJK UNIFIED IDEOGRAPH
+ {0xF6F6, 0x9CBB}, //21001 #CJK UNIFIED IDEOGRAPH
+ {0xF6F7, 0x9CBC}, //21002 #CJK UNIFIED IDEOGRAPH
+ {0xF6F8, 0x9CBD}, //21003 #CJK UNIFIED IDEOGRAPH
+ {0xF6F9, 0x9CC4}, //21004 #CJK UNIFIED IDEOGRAPH
+ {0xF6FA, 0x9CC5}, //21005 #CJK UNIFIED IDEOGRAPH
+ {0xF6FB, 0x9CC6}, //21006 #CJK UNIFIED IDEOGRAPH
+ {0xF6FC, 0x9CC7}, //21007 #CJK UNIFIED IDEOGRAPH
+ {0xF6FD, 0x9CCA}, //21008 #CJK UNIFIED IDEOGRAPH
+ {0xF6FE, 0x9CCB}, //21009 #CJK UNIFIED IDEOGRAPH
+ {0xF740, 0x9C3C}, //21010 #CJK UNIFIED IDEOGRAPH
+ {0xF741, 0x9C3D}, //21011 #CJK UNIFIED IDEOGRAPH
+ {0xF742, 0x9C3E}, //21012 #CJK UNIFIED IDEOGRAPH
+ {0xF743, 0x9C3F}, //21013 #CJK UNIFIED IDEOGRAPH
+ {0xF744, 0x9C40}, //21014 #CJK UNIFIED IDEOGRAPH
+ {0xF745, 0x9C41}, //21015 #CJK UNIFIED IDEOGRAPH
+ {0xF746, 0x9C42}, //21016 #CJK UNIFIED IDEOGRAPH
+ {0xF747, 0x9C43}, //21017 #CJK UNIFIED IDEOGRAPH
+ {0xF748, 0x9C44}, //21018 #CJK UNIFIED IDEOGRAPH
+ {0xF749, 0x9C45}, //21019 #CJK UNIFIED IDEOGRAPH
+ {0xF74A, 0x9C46}, //21020 #CJK UNIFIED IDEOGRAPH
+ {0xF74B, 0x9C47}, //21021 #CJK UNIFIED IDEOGRAPH
+ {0xF74C, 0x9C48}, //21022 #CJK UNIFIED IDEOGRAPH
+ {0xF74D, 0x9C49}, //21023 #CJK UNIFIED IDEOGRAPH
+ {0xF74E, 0x9C4A}, //21024 #CJK UNIFIED IDEOGRAPH
+ {0xF74F, 0x9C4B}, //21025 #CJK UNIFIED IDEOGRAPH
+ {0xF750, 0x9C4C}, //21026 #CJK UNIFIED IDEOGRAPH
+ {0xF751, 0x9C4D}, //21027 #CJK UNIFIED IDEOGRAPH
+ {0xF752, 0x9C4E}, //21028 #CJK UNIFIED IDEOGRAPH
+ {0xF753, 0x9C4F}, //21029 #CJK UNIFIED IDEOGRAPH
+ {0xF754, 0x9C50}, //21030 #CJK UNIFIED IDEOGRAPH
+ {0xF755, 0x9C51}, //21031 #CJK UNIFIED IDEOGRAPH
+ {0xF756, 0x9C52}, //21032 #CJK UNIFIED IDEOGRAPH
+ {0xF757, 0x9C53}, //21033 #CJK UNIFIED IDEOGRAPH
+ {0xF758, 0x9C54}, //21034 #CJK UNIFIED IDEOGRAPH
+ {0xF759, 0x9C55}, //21035 #CJK UNIFIED IDEOGRAPH
+ {0xF75A, 0x9C56}, //21036 #CJK UNIFIED IDEOGRAPH
+ {0xF75B, 0x9C57}, //21037 #CJK UNIFIED IDEOGRAPH
+ {0xF75C, 0x9C58}, //21038 #CJK UNIFIED IDEOGRAPH
+ {0xF75D, 0x9C59}, //21039 #CJK UNIFIED IDEOGRAPH
+ {0xF75E, 0x9C5A}, //21040 #CJK UNIFIED IDEOGRAPH
+ {0xF75F, 0x9C5B}, //21041 #CJK UNIFIED IDEOGRAPH
+ {0xF760, 0x9C5C}, //21042 #CJK UNIFIED IDEOGRAPH
+ {0xF761, 0x9C5D}, //21043 #CJK UNIFIED IDEOGRAPH
+ {0xF762, 0x9C5E}, //21044 #CJK UNIFIED IDEOGRAPH
+ {0xF763, 0x9C5F}, //21045 #CJK UNIFIED IDEOGRAPH
+ {0xF764, 0x9C60}, //21046 #CJK UNIFIED IDEOGRAPH
+ {0xF765, 0x9C61}, //21047 #CJK UNIFIED IDEOGRAPH
+ {0xF766, 0x9C62}, //21048 #CJK UNIFIED IDEOGRAPH
+ {0xF767, 0x9C63}, //21049 #CJK UNIFIED IDEOGRAPH
+ {0xF768, 0x9C64}, //21050 #CJK UNIFIED IDEOGRAPH
+ {0xF769, 0x9C65}, //21051 #CJK UNIFIED IDEOGRAPH
+ {0xF76A, 0x9C66}, //21052 #CJK UNIFIED IDEOGRAPH
+ {0xF76B, 0x9C67}, //21053 #CJK UNIFIED IDEOGRAPH
+ {0xF76C, 0x9C68}, //21054 #CJK UNIFIED IDEOGRAPH
+ {0xF76D, 0x9C69}, //21055 #CJK UNIFIED IDEOGRAPH
+ {0xF76E, 0x9C6A}, //21056 #CJK UNIFIED IDEOGRAPH
+ {0xF76F, 0x9C6B}, //21057 #CJK UNIFIED IDEOGRAPH
+ {0xF770, 0x9C6C}, //21058 #CJK UNIFIED IDEOGRAPH
+ {0xF771, 0x9C6D}, //21059 #CJK UNIFIED IDEOGRAPH
+ {0xF772, 0x9C6E}, //21060 #CJK UNIFIED IDEOGRAPH
+ {0xF773, 0x9C6F}, //21061 #CJK UNIFIED IDEOGRAPH
+ {0xF774, 0x9C70}, //21062 #CJK UNIFIED IDEOGRAPH
+ {0xF775, 0x9C71}, //21063 #CJK UNIFIED IDEOGRAPH
+ {0xF776, 0x9C72}, //21064 #CJK UNIFIED IDEOGRAPH
+ {0xF777, 0x9C73}, //21065 #CJK UNIFIED IDEOGRAPH
+ {0xF778, 0x9C74}, //21066 #CJK UNIFIED IDEOGRAPH
+ {0xF779, 0x9C75}, //21067 #CJK UNIFIED IDEOGRAPH
+ {0xF77A, 0x9C76}, //21068 #CJK UNIFIED IDEOGRAPH
+ {0xF77B, 0x9C77}, //21069 #CJK UNIFIED IDEOGRAPH
+ {0xF77C, 0x9C78}, //21070 #CJK UNIFIED IDEOGRAPH
+ {0xF77D, 0x9C79}, //21071 #CJK UNIFIED IDEOGRAPH
+ {0xF77E, 0x9C7A}, //21072 #CJK UNIFIED IDEOGRAPH
+ {0xF780, 0x9C7B}, //21073 #CJK UNIFIED IDEOGRAPH
+ {0xF781, 0x9C7D}, //21074 #CJK UNIFIED IDEOGRAPH
+ {0xF782, 0x9C7E}, //21075 #CJK UNIFIED IDEOGRAPH
+ {0xF783, 0x9C80}, //21076 #CJK UNIFIED IDEOGRAPH
+ {0xF784, 0x9C83}, //21077 #CJK UNIFIED IDEOGRAPH
+ {0xF785, 0x9C84}, //21078 #CJK UNIFIED IDEOGRAPH
+ {0xF786, 0x9C89}, //21079 #CJK UNIFIED IDEOGRAPH
+ {0xF787, 0x9C8A}, //21080 #CJK UNIFIED IDEOGRAPH
+ {0xF788, 0x9C8C}, //21081 #CJK UNIFIED IDEOGRAPH
+ {0xF789, 0x9C8F}, //21082 #CJK UNIFIED IDEOGRAPH
+ {0xF78A, 0x9C93}, //21083 #CJK UNIFIED IDEOGRAPH
+ {0xF78B, 0x9C96}, //21084 #CJK UNIFIED IDEOGRAPH
+ {0xF78C, 0x9C97}, //21085 #CJK UNIFIED IDEOGRAPH
+ {0xF78D, 0x9C98}, //21086 #CJK UNIFIED IDEOGRAPH
+ {0xF78E, 0x9C99}, //21087 #CJK UNIFIED IDEOGRAPH
+ {0xF78F, 0x9C9D}, //21088 #CJK UNIFIED IDEOGRAPH
+ {0xF790, 0x9CAA}, //21089 #CJK UNIFIED IDEOGRAPH
+ {0xF791, 0x9CAC}, //21090 #CJK UNIFIED IDEOGRAPH
+ {0xF792, 0x9CAF}, //21091 #CJK UNIFIED IDEOGRAPH
+ {0xF793, 0x9CB9}, //21092 #CJK UNIFIED IDEOGRAPH
+ {0xF794, 0x9CBE}, //21093 #CJK UNIFIED IDEOGRAPH
+ {0xF795, 0x9CBF}, //21094 #CJK UNIFIED IDEOGRAPH
+ {0xF796, 0x9CC0}, //21095 #CJK UNIFIED IDEOGRAPH
+ {0xF797, 0x9CC1}, //21096 #CJK UNIFIED IDEOGRAPH
+ {0xF798, 0x9CC2}, //21097 #CJK UNIFIED IDEOGRAPH
+ {0xF799, 0x9CC8}, //21098 #CJK UNIFIED IDEOGRAPH
+ {0xF79A, 0x9CC9}, //21099 #CJK UNIFIED IDEOGRAPH
+ {0xF79B, 0x9CD1}, //21100 #CJK UNIFIED IDEOGRAPH
+ {0xF79C, 0x9CD2}, //21101 #CJK UNIFIED IDEOGRAPH
+ {0xF79D, 0x9CDA}, //21102 #CJK UNIFIED IDEOGRAPH
+ {0xF79E, 0x9CDB}, //21103 #CJK UNIFIED IDEOGRAPH
+ {0xF79F, 0x9CE0}, //21104 #CJK UNIFIED IDEOGRAPH
+ {0xF7A0, 0x9CE1}, //21105 #CJK UNIFIED IDEOGRAPH
+ {0xF7A1, 0x9CCC}, //21106 #CJK UNIFIED IDEOGRAPH
+ {0xF7A2, 0x9CCD}, //21107 #CJK UNIFIED IDEOGRAPH
+ {0xF7A3, 0x9CCE}, //21108 #CJK UNIFIED IDEOGRAPH
+ {0xF7A4, 0x9CCF}, //21109 #CJK UNIFIED IDEOGRAPH
+ {0xF7A5, 0x9CD0}, //21110 #CJK UNIFIED IDEOGRAPH
+ {0xF7A6, 0x9CD3}, //21111 #CJK UNIFIED IDEOGRAPH
+ {0xF7A7, 0x9CD4}, //21112 #CJK UNIFIED IDEOGRAPH
+ {0xF7A8, 0x9CD5}, //21113 #CJK UNIFIED IDEOGRAPH
+ {0xF7A9, 0x9CD7}, //21114 #CJK UNIFIED IDEOGRAPH
+ {0xF7AA, 0x9CD8}, //21115 #CJK UNIFIED IDEOGRAPH
+ {0xF7AB, 0x9CD9}, //21116 #CJK UNIFIED IDEOGRAPH
+ {0xF7AC, 0x9CDC}, //21117 #CJK UNIFIED IDEOGRAPH
+ {0xF7AD, 0x9CDD}, //21118 #CJK UNIFIED IDEOGRAPH
+ {0xF7AE, 0x9CDF}, //21119 #CJK UNIFIED IDEOGRAPH
+ {0xF7AF, 0x9CE2}, //21120 #CJK UNIFIED IDEOGRAPH
+ {0xF7B0, 0x977C}, //21121 #CJK UNIFIED IDEOGRAPH
+ {0xF7B1, 0x9785}, //21122 #CJK UNIFIED IDEOGRAPH
+ {0xF7B2, 0x9791}, //21123 #CJK UNIFIED IDEOGRAPH
+ {0xF7B3, 0x9792}, //21124 #CJK UNIFIED IDEOGRAPH
+ {0xF7B4, 0x9794}, //21125 #CJK UNIFIED IDEOGRAPH
+ {0xF7B5, 0x97AF}, //21126 #CJK UNIFIED IDEOGRAPH
+ {0xF7B6, 0x97AB}, //21127 #CJK UNIFIED IDEOGRAPH
+ {0xF7B7, 0x97A3}, //21128 #CJK UNIFIED IDEOGRAPH
+ {0xF7B8, 0x97B2}, //21129 #CJK UNIFIED IDEOGRAPH
+ {0xF7B9, 0x97B4}, //21130 #CJK UNIFIED IDEOGRAPH
+ {0xF7BA, 0x9AB1}, //21131 #CJK UNIFIED IDEOGRAPH
+ {0xF7BB, 0x9AB0}, //21132 #CJK UNIFIED IDEOGRAPH
+ {0xF7BC, 0x9AB7}, //21133 #CJK UNIFIED IDEOGRAPH
+ {0xF7BD, 0x9E58}, //21134 #CJK UNIFIED IDEOGRAPH
+ {0xF7BE, 0x9AB6}, //21135 #CJK UNIFIED IDEOGRAPH
+ {0xF7BF, 0x9ABA}, //21136 #CJK UNIFIED IDEOGRAPH
+ {0xF7C0, 0x9ABC}, //21137 #CJK UNIFIED IDEOGRAPH
+ {0xF7C1, 0x9AC1}, //21138 #CJK UNIFIED IDEOGRAPH
+ {0xF7C2, 0x9AC0}, //21139 #CJK UNIFIED IDEOGRAPH
+ {0xF7C3, 0x9AC5}, //21140 #CJK UNIFIED IDEOGRAPH
+ {0xF7C4, 0x9AC2}, //21141 #CJK UNIFIED IDEOGRAPH
+ {0xF7C5, 0x9ACB}, //21142 #CJK UNIFIED IDEOGRAPH
+ {0xF7C6, 0x9ACC}, //21143 #CJK UNIFIED IDEOGRAPH
+ {0xF7C7, 0x9AD1}, //21144 #CJK UNIFIED IDEOGRAPH
+ {0xF7C8, 0x9B45}, //21145 #CJK UNIFIED IDEOGRAPH
+ {0xF7C9, 0x9B43}, //21146 #CJK UNIFIED IDEOGRAPH
+ {0xF7CA, 0x9B47}, //21147 #CJK UNIFIED IDEOGRAPH
+ {0xF7CB, 0x9B49}, //21148 #CJK UNIFIED IDEOGRAPH
+ {0xF7CC, 0x9B48}, //21149 #CJK UNIFIED IDEOGRAPH
+ {0xF7CD, 0x9B4D}, //21150 #CJK UNIFIED IDEOGRAPH
+ {0xF7CE, 0x9B51}, //21151 #CJK UNIFIED IDEOGRAPH
+ {0xF7CF, 0x98E8}, //21152 #CJK UNIFIED IDEOGRAPH
+ {0xF7D0, 0x990D}, //21153 #CJK UNIFIED IDEOGRAPH
+ {0xF7D1, 0x992E}, //21154 #CJK UNIFIED IDEOGRAPH
+ {0xF7D2, 0x9955}, //21155 #CJK UNIFIED IDEOGRAPH
+ {0xF7D3, 0x9954}, //21156 #CJK UNIFIED IDEOGRAPH
+ {0xF7D4, 0x9ADF}, //21157 #CJK UNIFIED IDEOGRAPH
+ {0xF7D5, 0x9AE1}, //21158 #CJK UNIFIED IDEOGRAPH
+ {0xF7D6, 0x9AE6}, //21159 #CJK UNIFIED IDEOGRAPH
+ {0xF7D7, 0x9AEF}, //21160 #CJK UNIFIED IDEOGRAPH
+ {0xF7D8, 0x9AEB}, //21161 #CJK UNIFIED IDEOGRAPH
+ {0xF7D9, 0x9AFB}, //21162 #CJK UNIFIED IDEOGRAPH
+ {0xF7DA, 0x9AED}, //21163 #CJK UNIFIED IDEOGRAPH
+ {0xF7DB, 0x9AF9}, //21164 #CJK UNIFIED IDEOGRAPH
+ {0xF7DC, 0x9B08}, //21165 #CJK UNIFIED IDEOGRAPH
+ {0xF7DD, 0x9B0F}, //21166 #CJK UNIFIED IDEOGRAPH
+ {0xF7DE, 0x9B13}, //21167 #CJK UNIFIED IDEOGRAPH
+ {0xF7DF, 0x9B1F}, //21168 #CJK UNIFIED IDEOGRAPH
+ {0xF7E0, 0x9B23}, //21169 #CJK UNIFIED IDEOGRAPH
+ {0xF7E1, 0x9EBD}, //21170 #CJK UNIFIED IDEOGRAPH
+ {0xF7E2, 0x9EBE}, //21171 #CJK UNIFIED IDEOGRAPH
+ {0xF7E3, 0x7E3B}, //21172 #CJK UNIFIED IDEOGRAPH
+ {0xF7E4, 0x9E82}, //21173 #CJK UNIFIED IDEOGRAPH
+ {0xF7E5, 0x9E87}, //21174 #CJK UNIFIED IDEOGRAPH
+ {0xF7E6, 0x9E88}, //21175 #CJK UNIFIED IDEOGRAPH
+ {0xF7E7, 0x9E8B}, //21176 #CJK UNIFIED IDEOGRAPH
+ {0xF7E8, 0x9E92}, //21177 #CJK UNIFIED IDEOGRAPH
+ {0xF7E9, 0x93D6}, //21178 #CJK UNIFIED IDEOGRAPH
+ {0xF7EA, 0x9E9D}, //21179 #CJK UNIFIED IDEOGRAPH
+ {0xF7EB, 0x9E9F}, //21180 #CJK UNIFIED IDEOGRAPH
+ {0xF7EC, 0x9EDB}, //21181 #CJK UNIFIED IDEOGRAPH
+ {0xF7ED, 0x9EDC}, //21182 #CJK UNIFIED IDEOGRAPH
+ {0xF7EE, 0x9EDD}, //21183 #CJK UNIFIED IDEOGRAPH
+ {0xF7EF, 0x9EE0}, //21184 #CJK UNIFIED IDEOGRAPH
+ {0xF7F0, 0x9EDF}, //21185 #CJK UNIFIED IDEOGRAPH
+ {0xF7F1, 0x9EE2}, //21186 #CJK UNIFIED IDEOGRAPH
+ {0xF7F2, 0x9EE9}, //21187 #CJK UNIFIED IDEOGRAPH
+ {0xF7F3, 0x9EE7}, //21188 #CJK UNIFIED IDEOGRAPH
+ {0xF7F4, 0x9EE5}, //21189 #CJK UNIFIED IDEOGRAPH
+ {0xF7F5, 0x9EEA}, //21190 #CJK UNIFIED IDEOGRAPH
+ {0xF7F6, 0x9EEF}, //21191 #CJK UNIFIED IDEOGRAPH
+ {0xF7F7, 0x9F22}, //21192 #CJK UNIFIED IDEOGRAPH
+ {0xF7F8, 0x9F2C}, //21193 #CJK UNIFIED IDEOGRAPH
+ {0xF7F9, 0x9F2F}, //21194 #CJK UNIFIED IDEOGRAPH
+ {0xF7FA, 0x9F39}, //21195 #CJK UNIFIED IDEOGRAPH
+ {0xF7FB, 0x9F37}, //21196 #CJK UNIFIED IDEOGRAPH
+ {0xF7FC, 0x9F3D}, //21197 #CJK UNIFIED IDEOGRAPH
+ {0xF7FD, 0x9F3E}, //21198 #CJK UNIFIED IDEOGRAPH
+ {0xF7FE, 0x9F44}, //21199 #CJK UNIFIED IDEOGRAPH
+ {0xF840, 0x9CE3}, //21200 #CJK UNIFIED IDEOGRAPH
+ {0xF841, 0x9CE4}, //21201 #CJK UNIFIED IDEOGRAPH
+ {0xF842, 0x9CE5}, //21202 #CJK UNIFIED IDEOGRAPH
+ {0xF843, 0x9CE6}, //21203 #CJK UNIFIED IDEOGRAPH
+ {0xF844, 0x9CE7}, //21204 #CJK UNIFIED IDEOGRAPH
+ {0xF845, 0x9CE8}, //21205 #CJK UNIFIED IDEOGRAPH
+ {0xF846, 0x9CE9}, //21206 #CJK UNIFIED IDEOGRAPH
+ {0xF847, 0x9CEA}, //21207 #CJK UNIFIED IDEOGRAPH
+ {0xF848, 0x9CEB}, //21208 #CJK UNIFIED IDEOGRAPH
+ {0xF849, 0x9CEC}, //21209 #CJK UNIFIED IDEOGRAPH
+ {0xF84A, 0x9CED}, //21210 #CJK UNIFIED IDEOGRAPH
+ {0xF84B, 0x9CEE}, //21211 #CJK UNIFIED IDEOGRAPH
+ {0xF84C, 0x9CEF}, //21212 #CJK UNIFIED IDEOGRAPH
+ {0xF84D, 0x9CF0}, //21213 #CJK UNIFIED IDEOGRAPH
+ {0xF84E, 0x9CF1}, //21214 #CJK UNIFIED IDEOGRAPH
+ {0xF84F, 0x9CF2}, //21215 #CJK UNIFIED IDEOGRAPH
+ {0xF850, 0x9CF3}, //21216 #CJK UNIFIED IDEOGRAPH
+ {0xF851, 0x9CF4}, //21217 #CJK UNIFIED IDEOGRAPH
+ {0xF852, 0x9CF5}, //21218 #CJK UNIFIED IDEOGRAPH
+ {0xF853, 0x9CF6}, //21219 #CJK UNIFIED IDEOGRAPH
+ {0xF854, 0x9CF7}, //21220 #CJK UNIFIED IDEOGRAPH
+ {0xF855, 0x9CF8}, //21221 #CJK UNIFIED IDEOGRAPH
+ {0xF856, 0x9CF9}, //21222 #CJK UNIFIED IDEOGRAPH
+ {0xF857, 0x9CFA}, //21223 #CJK UNIFIED IDEOGRAPH
+ {0xF858, 0x9CFB}, //21224 #CJK UNIFIED IDEOGRAPH
+ {0xF859, 0x9CFC}, //21225 #CJK UNIFIED IDEOGRAPH
+ {0xF85A, 0x9CFD}, //21226 #CJK UNIFIED IDEOGRAPH
+ {0xF85B, 0x9CFE}, //21227 #CJK UNIFIED IDEOGRAPH
+ {0xF85C, 0x9CFF}, //21228 #CJK UNIFIED IDEOGRAPH
+ {0xF85D, 0x9D00}, //21229 #CJK UNIFIED IDEOGRAPH
+ {0xF85E, 0x9D01}, //21230 #CJK UNIFIED IDEOGRAPH
+ {0xF85F, 0x9D02}, //21231 #CJK UNIFIED IDEOGRAPH
+ {0xF860, 0x9D03}, //21232 #CJK UNIFIED IDEOGRAPH
+ {0xF861, 0x9D04}, //21233 #CJK UNIFIED IDEOGRAPH
+ {0xF862, 0x9D05}, //21234 #CJK UNIFIED IDEOGRAPH
+ {0xF863, 0x9D06}, //21235 #CJK UNIFIED IDEOGRAPH
+ {0xF864, 0x9D07}, //21236 #CJK UNIFIED IDEOGRAPH
+ {0xF865, 0x9D08}, //21237 #CJK UNIFIED IDEOGRAPH
+ {0xF866, 0x9D09}, //21238 #CJK UNIFIED IDEOGRAPH
+ {0xF867, 0x9D0A}, //21239 #CJK UNIFIED IDEOGRAPH
+ {0xF868, 0x9D0B}, //21240 #CJK UNIFIED IDEOGRAPH
+ {0xF869, 0x9D0C}, //21241 #CJK UNIFIED IDEOGRAPH
+ {0xF86A, 0x9D0D}, //21242 #CJK UNIFIED IDEOGRAPH
+ {0xF86B, 0x9D0E}, //21243 #CJK UNIFIED IDEOGRAPH
+ {0xF86C, 0x9D0F}, //21244 #CJK UNIFIED IDEOGRAPH
+ {0xF86D, 0x9D10}, //21245 #CJK UNIFIED IDEOGRAPH
+ {0xF86E, 0x9D11}, //21246 #CJK UNIFIED IDEOGRAPH
+ {0xF86F, 0x9D12}, //21247 #CJK UNIFIED IDEOGRAPH
+ {0xF870, 0x9D13}, //21248 #CJK UNIFIED IDEOGRAPH
+ {0xF871, 0x9D14}, //21249 #CJK UNIFIED IDEOGRAPH
+ {0xF872, 0x9D15}, //21250 #CJK UNIFIED IDEOGRAPH
+ {0xF873, 0x9D16}, //21251 #CJK UNIFIED IDEOGRAPH
+ {0xF874, 0x9D17}, //21252 #CJK UNIFIED IDEOGRAPH
+ {0xF875, 0x9D18}, //21253 #CJK UNIFIED IDEOGRAPH
+ {0xF876, 0x9D19}, //21254 #CJK UNIFIED IDEOGRAPH
+ {0xF877, 0x9D1A}, //21255 #CJK UNIFIED IDEOGRAPH
+ {0xF878, 0x9D1B}, //21256 #CJK UNIFIED IDEOGRAPH
+ {0xF879, 0x9D1C}, //21257 #CJK UNIFIED IDEOGRAPH
+ {0xF87A, 0x9D1D}, //21258 #CJK UNIFIED IDEOGRAPH
+ {0xF87B, 0x9D1E}, //21259 #CJK UNIFIED IDEOGRAPH
+ {0xF87C, 0x9D1F}, //21260 #CJK UNIFIED IDEOGRAPH
+ {0xF87D, 0x9D20}, //21261 #CJK UNIFIED IDEOGRAPH
+ {0xF87E, 0x9D21}, //21262 #CJK UNIFIED IDEOGRAPH
+ {0xF880, 0x9D22}, //21263 #CJK UNIFIED IDEOGRAPH
+ {0xF881, 0x9D23}, //21264 #CJK UNIFIED IDEOGRAPH
+ {0xF882, 0x9D24}, //21265 #CJK UNIFIED IDEOGRAPH
+ {0xF883, 0x9D25}, //21266 #CJK UNIFIED IDEOGRAPH
+ {0xF884, 0x9D26}, //21267 #CJK UNIFIED IDEOGRAPH
+ {0xF885, 0x9D27}, //21268 #CJK UNIFIED IDEOGRAPH
+ {0xF886, 0x9D28}, //21269 #CJK UNIFIED IDEOGRAPH
+ {0xF887, 0x9D29}, //21270 #CJK UNIFIED IDEOGRAPH
+ {0xF888, 0x9D2A}, //21271 #CJK UNIFIED IDEOGRAPH
+ {0xF889, 0x9D2B}, //21272 #CJK UNIFIED IDEOGRAPH
+ {0xF88A, 0x9D2C}, //21273 #CJK UNIFIED IDEOGRAPH
+ {0xF88B, 0x9D2D}, //21274 #CJK UNIFIED IDEOGRAPH
+ {0xF88C, 0x9D2E}, //21275 #CJK UNIFIED IDEOGRAPH
+ {0xF88D, 0x9D2F}, //21276 #CJK UNIFIED IDEOGRAPH
+ {0xF88E, 0x9D30}, //21277 #CJK UNIFIED IDEOGRAPH
+ {0xF88F, 0x9D31}, //21278 #CJK UNIFIED IDEOGRAPH
+ {0xF890, 0x9D32}, //21279 #CJK UNIFIED IDEOGRAPH
+ {0xF891, 0x9D33}, //21280 #CJK UNIFIED IDEOGRAPH
+ {0xF892, 0x9D34}, //21281 #CJK UNIFIED IDEOGRAPH
+ {0xF893, 0x9D35}, //21282 #CJK UNIFIED IDEOGRAPH
+ {0xF894, 0x9D36}, //21283 #CJK UNIFIED IDEOGRAPH
+ {0xF895, 0x9D37}, //21284 #CJK UNIFIED IDEOGRAPH
+ {0xF896, 0x9D38}, //21285 #CJK UNIFIED IDEOGRAPH
+ {0xF897, 0x9D39}, //21286 #CJK UNIFIED IDEOGRAPH
+ {0xF898, 0x9D3A}, //21287 #CJK UNIFIED IDEOGRAPH
+ {0xF899, 0x9D3B}, //21288 #CJK UNIFIED IDEOGRAPH
+ {0xF89A, 0x9D3C}, //21289 #CJK UNIFIED IDEOGRAPH
+ {0xF89B, 0x9D3D}, //21290 #CJK UNIFIED IDEOGRAPH
+ {0xF89C, 0x9D3E}, //21291 #CJK UNIFIED IDEOGRAPH
+ {0xF89D, 0x9D3F}, //21292 #CJK UNIFIED IDEOGRAPH
+ {0xF89E, 0x9D40}, //21293 #CJK UNIFIED IDEOGRAPH
+ {0xF89F, 0x9D41}, //21294 #CJK UNIFIED IDEOGRAPH
+ {0xF8A0, 0x9D42}, //21295 #CJK UNIFIED IDEOGRAPH
+ {0xF940, 0x9D43}, //21296 #CJK UNIFIED IDEOGRAPH
+ {0xF941, 0x9D44}, //21297 #CJK UNIFIED IDEOGRAPH
+ {0xF942, 0x9D45}, //21298 #CJK UNIFIED IDEOGRAPH
+ {0xF943, 0x9D46}, //21299 #CJK UNIFIED IDEOGRAPH
+ {0xF944, 0x9D47}, //21300 #CJK UNIFIED IDEOGRAPH
+ {0xF945, 0x9D48}, //21301 #CJK UNIFIED IDEOGRAPH
+ {0xF946, 0x9D49}, //21302 #CJK UNIFIED IDEOGRAPH
+ {0xF947, 0x9D4A}, //21303 #CJK UNIFIED IDEOGRAPH
+ {0xF948, 0x9D4B}, //21304 #CJK UNIFIED IDEOGRAPH
+ {0xF949, 0x9D4C}, //21305 #CJK UNIFIED IDEOGRAPH
+ {0xF94A, 0x9D4D}, //21306 #CJK UNIFIED IDEOGRAPH
+ {0xF94B, 0x9D4E}, //21307 #CJK UNIFIED IDEOGRAPH
+ {0xF94C, 0x9D4F}, //21308 #CJK UNIFIED IDEOGRAPH
+ {0xF94D, 0x9D50}, //21309 #CJK UNIFIED IDEOGRAPH
+ {0xF94E, 0x9D51}, //21310 #CJK UNIFIED IDEOGRAPH
+ {0xF94F, 0x9D52}, //21311 #CJK UNIFIED IDEOGRAPH
+ {0xF950, 0x9D53}, //21312 #CJK UNIFIED IDEOGRAPH
+ {0xF951, 0x9D54}, //21313 #CJK UNIFIED IDEOGRAPH
+ {0xF952, 0x9D55}, //21314 #CJK UNIFIED IDEOGRAPH
+ {0xF953, 0x9D56}, //21315 #CJK UNIFIED IDEOGRAPH
+ {0xF954, 0x9D57}, //21316 #CJK UNIFIED IDEOGRAPH
+ {0xF955, 0x9D58}, //21317 #CJK UNIFIED IDEOGRAPH
+ {0xF956, 0x9D59}, //21318 #CJK UNIFIED IDEOGRAPH
+ {0xF957, 0x9D5A}, //21319 #CJK UNIFIED IDEOGRAPH
+ {0xF958, 0x9D5B}, //21320 #CJK UNIFIED IDEOGRAPH
+ {0xF959, 0x9D5C}, //21321 #CJK UNIFIED IDEOGRAPH
+ {0xF95A, 0x9D5D}, //21322 #CJK UNIFIED IDEOGRAPH
+ {0xF95B, 0x9D5E}, //21323 #CJK UNIFIED IDEOGRAPH
+ {0xF95C, 0x9D5F}, //21324 #CJK UNIFIED IDEOGRAPH
+ {0xF95D, 0x9D60}, //21325 #CJK UNIFIED IDEOGRAPH
+ {0xF95E, 0x9D61}, //21326 #CJK UNIFIED IDEOGRAPH
+ {0xF95F, 0x9D62}, //21327 #CJK UNIFIED IDEOGRAPH
+ {0xF960, 0x9D63}, //21328 #CJK UNIFIED IDEOGRAPH
+ {0xF961, 0x9D64}, //21329 #CJK UNIFIED IDEOGRAPH
+ {0xF962, 0x9D65}, //21330 #CJK UNIFIED IDEOGRAPH
+ {0xF963, 0x9D66}, //21331 #CJK UNIFIED IDEOGRAPH
+ {0xF964, 0x9D67}, //21332 #CJK UNIFIED IDEOGRAPH
+ {0xF965, 0x9D68}, //21333 #CJK UNIFIED IDEOGRAPH
+ {0xF966, 0x9D69}, //21334 #CJK UNIFIED IDEOGRAPH
+ {0xF967, 0x9D6A}, //21335 #CJK UNIFIED IDEOGRAPH
+ {0xF968, 0x9D6B}, //21336 #CJK UNIFIED IDEOGRAPH
+ {0xF969, 0x9D6C}, //21337 #CJK UNIFIED IDEOGRAPH
+ {0xF96A, 0x9D6D}, //21338 #CJK UNIFIED IDEOGRAPH
+ {0xF96B, 0x9D6E}, //21339 #CJK UNIFIED IDEOGRAPH
+ {0xF96C, 0x9D6F}, //21340 #CJK UNIFIED IDEOGRAPH
+ {0xF96D, 0x9D70}, //21341 #CJK UNIFIED IDEOGRAPH
+ {0xF96E, 0x9D71}, //21342 #CJK UNIFIED IDEOGRAPH
+ {0xF96F, 0x9D72}, //21343 #CJK UNIFIED IDEOGRAPH
+ {0xF970, 0x9D73}, //21344 #CJK UNIFIED IDEOGRAPH
+ {0xF971, 0x9D74}, //21345 #CJK UNIFIED IDEOGRAPH
+ {0xF972, 0x9D75}, //21346 #CJK UNIFIED IDEOGRAPH
+ {0xF973, 0x9D76}, //21347 #CJK UNIFIED IDEOGRAPH
+ {0xF974, 0x9D77}, //21348 #CJK UNIFIED IDEOGRAPH
+ {0xF975, 0x9D78}, //21349 #CJK UNIFIED IDEOGRAPH
+ {0xF976, 0x9D79}, //21350 #CJK UNIFIED IDEOGRAPH
+ {0xF977, 0x9D7A}, //21351 #CJK UNIFIED IDEOGRAPH
+ {0xF978, 0x9D7B}, //21352 #CJK UNIFIED IDEOGRAPH
+ {0xF979, 0x9D7C}, //21353 #CJK UNIFIED IDEOGRAPH
+ {0xF97A, 0x9D7D}, //21354 #CJK UNIFIED IDEOGRAPH
+ {0xF97B, 0x9D7E}, //21355 #CJK UNIFIED IDEOGRAPH
+ {0xF97C, 0x9D7F}, //21356 #CJK UNIFIED IDEOGRAPH
+ {0xF97D, 0x9D80}, //21357 #CJK UNIFIED IDEOGRAPH
+ {0xF97E, 0x9D81}, //21358 #CJK UNIFIED IDEOGRAPH
+ {0xF980, 0x9D82}, //21359 #CJK UNIFIED IDEOGRAPH
+ {0xF981, 0x9D83}, //21360 #CJK UNIFIED IDEOGRAPH
+ {0xF982, 0x9D84}, //21361 #CJK UNIFIED IDEOGRAPH
+ {0xF983, 0x9D85}, //21362 #CJK UNIFIED IDEOGRAPH
+ {0xF984, 0x9D86}, //21363 #CJK UNIFIED IDEOGRAPH
+ {0xF985, 0x9D87}, //21364 #CJK UNIFIED IDEOGRAPH
+ {0xF986, 0x9D88}, //21365 #CJK UNIFIED IDEOGRAPH
+ {0xF987, 0x9D89}, //21366 #CJK UNIFIED IDEOGRAPH
+ {0xF988, 0x9D8A}, //21367 #CJK UNIFIED IDEOGRAPH
+ {0xF989, 0x9D8B}, //21368 #CJK UNIFIED IDEOGRAPH
+ {0xF98A, 0x9D8C}, //21369 #CJK UNIFIED IDEOGRAPH
+ {0xF98B, 0x9D8D}, //21370 #CJK UNIFIED IDEOGRAPH
+ {0xF98C, 0x9D8E}, //21371 #CJK UNIFIED IDEOGRAPH
+ {0xF98D, 0x9D8F}, //21372 #CJK UNIFIED IDEOGRAPH
+ {0xF98E, 0x9D90}, //21373 #CJK UNIFIED IDEOGRAPH
+ {0xF98F, 0x9D91}, //21374 #CJK UNIFIED IDEOGRAPH
+ {0xF990, 0x9D92}, //21375 #CJK UNIFIED IDEOGRAPH
+ {0xF991, 0x9D93}, //21376 #CJK UNIFIED IDEOGRAPH
+ {0xF992, 0x9D94}, //21377 #CJK UNIFIED IDEOGRAPH
+ {0xF993, 0x9D95}, //21378 #CJK UNIFIED IDEOGRAPH
+ {0xF994, 0x9D96}, //21379 #CJK UNIFIED IDEOGRAPH
+ {0xF995, 0x9D97}, //21380 #CJK UNIFIED IDEOGRAPH
+ {0xF996, 0x9D98}, //21381 #CJK UNIFIED IDEOGRAPH
+ {0xF997, 0x9D99}, //21382 #CJK UNIFIED IDEOGRAPH
+ {0xF998, 0x9D9A}, //21383 #CJK UNIFIED IDEOGRAPH
+ {0xF999, 0x9D9B}, //21384 #CJK UNIFIED IDEOGRAPH
+ {0xF99A, 0x9D9C}, //21385 #CJK UNIFIED IDEOGRAPH
+ {0xF99B, 0x9D9D}, //21386 #CJK UNIFIED IDEOGRAPH
+ {0xF99C, 0x9D9E}, //21387 #CJK UNIFIED IDEOGRAPH
+ {0xF99D, 0x9D9F}, //21388 #CJK UNIFIED IDEOGRAPH
+ {0xF99E, 0x9DA0}, //21389 #CJK UNIFIED IDEOGRAPH
+ {0xF99F, 0x9DA1}, //21390 #CJK UNIFIED IDEOGRAPH
+ {0xF9A0, 0x9DA2}, //21391 #CJK UNIFIED IDEOGRAPH
+ {0xFA40, 0x9DA3}, //21392 #CJK UNIFIED IDEOGRAPH
+ {0xFA41, 0x9DA4}, //21393 #CJK UNIFIED IDEOGRAPH
+ {0xFA42, 0x9DA5}, //21394 #CJK UNIFIED IDEOGRAPH
+ {0xFA43, 0x9DA6}, //21395 #CJK UNIFIED IDEOGRAPH
+ {0xFA44, 0x9DA7}, //21396 #CJK UNIFIED IDEOGRAPH
+ {0xFA45, 0x9DA8}, //21397 #CJK UNIFIED IDEOGRAPH
+ {0xFA46, 0x9DA9}, //21398 #CJK UNIFIED IDEOGRAPH
+ {0xFA47, 0x9DAA}, //21399 #CJK UNIFIED IDEOGRAPH
+ {0xFA48, 0x9DAB}, //21400 #CJK UNIFIED IDEOGRAPH
+ {0xFA49, 0x9DAC}, //21401 #CJK UNIFIED IDEOGRAPH
+ {0xFA4A, 0x9DAD}, //21402 #CJK UNIFIED IDEOGRAPH
+ {0xFA4B, 0x9DAE}, //21403 #CJK UNIFIED IDEOGRAPH
+ {0xFA4C, 0x9DAF}, //21404 #CJK UNIFIED IDEOGRAPH
+ {0xFA4D, 0x9DB0}, //21405 #CJK UNIFIED IDEOGRAPH
+ {0xFA4E, 0x9DB1}, //21406 #CJK UNIFIED IDEOGRAPH
+ {0xFA4F, 0x9DB2}, //21407 #CJK UNIFIED IDEOGRAPH
+ {0xFA50, 0x9DB3}, //21408 #CJK UNIFIED IDEOGRAPH
+ {0xFA51, 0x9DB4}, //21409 #CJK UNIFIED IDEOGRAPH
+ {0xFA52, 0x9DB5}, //21410 #CJK UNIFIED IDEOGRAPH
+ {0xFA53, 0x9DB6}, //21411 #CJK UNIFIED IDEOGRAPH
+ {0xFA54, 0x9DB7}, //21412 #CJK UNIFIED IDEOGRAPH
+ {0xFA55, 0x9DB8}, //21413 #CJK UNIFIED IDEOGRAPH
+ {0xFA56, 0x9DB9}, //21414 #CJK UNIFIED IDEOGRAPH
+ {0xFA57, 0x9DBA}, //21415 #CJK UNIFIED IDEOGRAPH
+ {0xFA58, 0x9DBB}, //21416 #CJK UNIFIED IDEOGRAPH
+ {0xFA59, 0x9DBC}, //21417 #CJK UNIFIED IDEOGRAPH
+ {0xFA5A, 0x9DBD}, //21418 #CJK UNIFIED IDEOGRAPH
+ {0xFA5B, 0x9DBE}, //21419 #CJK UNIFIED IDEOGRAPH
+ {0xFA5C, 0x9DBF}, //21420 #CJK UNIFIED IDEOGRAPH
+ {0xFA5D, 0x9DC0}, //21421 #CJK UNIFIED IDEOGRAPH
+ {0xFA5E, 0x9DC1}, //21422 #CJK UNIFIED IDEOGRAPH
+ {0xFA5F, 0x9DC2}, //21423 #CJK UNIFIED IDEOGRAPH
+ {0xFA60, 0x9DC3}, //21424 #CJK UNIFIED IDEOGRAPH
+ {0xFA61, 0x9DC4}, //21425 #CJK UNIFIED IDEOGRAPH
+ {0xFA62, 0x9DC5}, //21426 #CJK UNIFIED IDEOGRAPH
+ {0xFA63, 0x9DC6}, //21427 #CJK UNIFIED IDEOGRAPH
+ {0xFA64, 0x9DC7}, //21428 #CJK UNIFIED IDEOGRAPH
+ {0xFA65, 0x9DC8}, //21429 #CJK UNIFIED IDEOGRAPH
+ {0xFA66, 0x9DC9}, //21430 #CJK UNIFIED IDEOGRAPH
+ {0xFA67, 0x9DCA}, //21431 #CJK UNIFIED IDEOGRAPH
+ {0xFA68, 0x9DCB}, //21432 #CJK UNIFIED IDEOGRAPH
+ {0xFA69, 0x9DCC}, //21433 #CJK UNIFIED IDEOGRAPH
+ {0xFA6A, 0x9DCD}, //21434 #CJK UNIFIED IDEOGRAPH
+ {0xFA6B, 0x9DCE}, //21435 #CJK UNIFIED IDEOGRAPH
+ {0xFA6C, 0x9DCF}, //21436 #CJK UNIFIED IDEOGRAPH
+ {0xFA6D, 0x9DD0}, //21437 #CJK UNIFIED IDEOGRAPH
+ {0xFA6E, 0x9DD1}, //21438 #CJK UNIFIED IDEOGRAPH
+ {0xFA6F, 0x9DD2}, //21439 #CJK UNIFIED IDEOGRAPH
+ {0xFA70, 0x9DD3}, //21440 #CJK UNIFIED IDEOGRAPH
+ {0xFA71, 0x9DD4}, //21441 #CJK UNIFIED IDEOGRAPH
+ {0xFA72, 0x9DD5}, //21442 #CJK UNIFIED IDEOGRAPH
+ {0xFA73, 0x9DD6}, //21443 #CJK UNIFIED IDEOGRAPH
+ {0xFA74, 0x9DD7}, //21444 #CJK UNIFIED IDEOGRAPH
+ {0xFA75, 0x9DD8}, //21445 #CJK UNIFIED IDEOGRAPH
+ {0xFA76, 0x9DD9}, //21446 #CJK UNIFIED IDEOGRAPH
+ {0xFA77, 0x9DDA}, //21447 #CJK UNIFIED IDEOGRAPH
+ {0xFA78, 0x9DDB}, //21448 #CJK UNIFIED IDEOGRAPH
+ {0xFA79, 0x9DDC}, //21449 #CJK UNIFIED IDEOGRAPH
+ {0xFA7A, 0x9DDD}, //21450 #CJK UNIFIED IDEOGRAPH
+ {0xFA7B, 0x9DDE}, //21451 #CJK UNIFIED IDEOGRAPH
+ {0xFA7C, 0x9DDF}, //21452 #CJK UNIFIED IDEOGRAPH
+ {0xFA7D, 0x9DE0}, //21453 #CJK UNIFIED IDEOGRAPH
+ {0xFA7E, 0x9DE1}, //21454 #CJK UNIFIED IDEOGRAPH
+ {0xFA80, 0x9DE2}, //21455 #CJK UNIFIED IDEOGRAPH
+ {0xFA81, 0x9DE3}, //21456 #CJK UNIFIED IDEOGRAPH
+ {0xFA82, 0x9DE4}, //21457 #CJK UNIFIED IDEOGRAPH
+ {0xFA83, 0x9DE5}, //21458 #CJK UNIFIED IDEOGRAPH
+ {0xFA84, 0x9DE6}, //21459 #CJK UNIFIED IDEOGRAPH
+ {0xFA85, 0x9DE7}, //21460 #CJK UNIFIED IDEOGRAPH
+ {0xFA86, 0x9DE8}, //21461 #CJK UNIFIED IDEOGRAPH
+ {0xFA87, 0x9DE9}, //21462 #CJK UNIFIED IDEOGRAPH
+ {0xFA88, 0x9DEA}, //21463 #CJK UNIFIED IDEOGRAPH
+ {0xFA89, 0x9DEB}, //21464 #CJK UNIFIED IDEOGRAPH
+ {0xFA8A, 0x9DEC}, //21465 #CJK UNIFIED IDEOGRAPH
+ {0xFA8B, 0x9DED}, //21466 #CJK UNIFIED IDEOGRAPH
+ {0xFA8C, 0x9DEE}, //21467 #CJK UNIFIED IDEOGRAPH
+ {0xFA8D, 0x9DEF}, //21468 #CJK UNIFIED IDEOGRAPH
+ {0xFA8E, 0x9DF0}, //21469 #CJK UNIFIED IDEOGRAPH
+ {0xFA8F, 0x9DF1}, //21470 #CJK UNIFIED IDEOGRAPH
+ {0xFA90, 0x9DF2}, //21471 #CJK UNIFIED IDEOGRAPH
+ {0xFA91, 0x9DF3}, //21472 #CJK UNIFIED IDEOGRAPH
+ {0xFA92, 0x9DF4}, //21473 #CJK UNIFIED IDEOGRAPH
+ {0xFA93, 0x9DF5}, //21474 #CJK UNIFIED IDEOGRAPH
+ {0xFA94, 0x9DF6}, //21475 #CJK UNIFIED IDEOGRAPH
+ {0xFA95, 0x9DF7}, //21476 #CJK UNIFIED IDEOGRAPH
+ {0xFA96, 0x9DF8}, //21477 #CJK UNIFIED IDEOGRAPH
+ {0xFA97, 0x9DF9}, //21478 #CJK UNIFIED IDEOGRAPH
+ {0xFA98, 0x9DFA}, //21479 #CJK UNIFIED IDEOGRAPH
+ {0xFA99, 0x9DFB}, //21480 #CJK UNIFIED IDEOGRAPH
+ {0xFA9A, 0x9DFC}, //21481 #CJK UNIFIED IDEOGRAPH
+ {0xFA9B, 0x9DFD}, //21482 #CJK UNIFIED IDEOGRAPH
+ {0xFA9C, 0x9DFE}, //21483 #CJK UNIFIED IDEOGRAPH
+ {0xFA9D, 0x9DFF}, //21484 #CJK UNIFIED IDEOGRAPH
+ {0xFA9E, 0x9E00}, //21485 #CJK UNIFIED IDEOGRAPH
+ {0xFA9F, 0x9E01}, //21486 #CJK UNIFIED IDEOGRAPH
+ {0xFAA0, 0x9E02}, //21487 #CJK UNIFIED IDEOGRAPH
+ {0xFB40, 0x9E03}, //21488 #CJK UNIFIED IDEOGRAPH
+ {0xFB41, 0x9E04}, //21489 #CJK UNIFIED IDEOGRAPH
+ {0xFB42, 0x9E05}, //21490 #CJK UNIFIED IDEOGRAPH
+ {0xFB43, 0x9E06}, //21491 #CJK UNIFIED IDEOGRAPH
+ {0xFB44, 0x9E07}, //21492 #CJK UNIFIED IDEOGRAPH
+ {0xFB45, 0x9E08}, //21493 #CJK UNIFIED IDEOGRAPH
+ {0xFB46, 0x9E09}, //21494 #CJK UNIFIED IDEOGRAPH
+ {0xFB47, 0x9E0A}, //21495 #CJK UNIFIED IDEOGRAPH
+ {0xFB48, 0x9E0B}, //21496 #CJK UNIFIED IDEOGRAPH
+ {0xFB49, 0x9E0C}, //21497 #CJK UNIFIED IDEOGRAPH
+ {0xFB4A, 0x9E0D}, //21498 #CJK UNIFIED IDEOGRAPH
+ {0xFB4B, 0x9E0E}, //21499 #CJK UNIFIED IDEOGRAPH
+ {0xFB4C, 0x9E0F}, //21500 #CJK UNIFIED IDEOGRAPH
+ {0xFB4D, 0x9E10}, //21501 #CJK UNIFIED IDEOGRAPH
+ {0xFB4E, 0x9E11}, //21502 #CJK UNIFIED IDEOGRAPH
+ {0xFB4F, 0x9E12}, //21503 #CJK UNIFIED IDEOGRAPH
+ {0xFB50, 0x9E13}, //21504 #CJK UNIFIED IDEOGRAPH
+ {0xFB51, 0x9E14}, //21505 #CJK UNIFIED IDEOGRAPH
+ {0xFB52, 0x9E15}, //21506 #CJK UNIFIED IDEOGRAPH
+ {0xFB53, 0x9E16}, //21507 #CJK UNIFIED IDEOGRAPH
+ {0xFB54, 0x9E17}, //21508 #CJK UNIFIED IDEOGRAPH
+ {0xFB55, 0x9E18}, //21509 #CJK UNIFIED IDEOGRAPH
+ {0xFB56, 0x9E19}, //21510 #CJK UNIFIED IDEOGRAPH
+ {0xFB57, 0x9E1A}, //21511 #CJK UNIFIED IDEOGRAPH
+ {0xFB58, 0x9E1B}, //21512 #CJK UNIFIED IDEOGRAPH
+ {0xFB59, 0x9E1C}, //21513 #CJK UNIFIED IDEOGRAPH
+ {0xFB5A, 0x9E1D}, //21514 #CJK UNIFIED IDEOGRAPH
+ {0xFB5B, 0x9E1E}, //21515 #CJK UNIFIED IDEOGRAPH
+ {0xFB5C, 0x9E24}, //21516 #CJK UNIFIED IDEOGRAPH
+ {0xFB5D, 0x9E27}, //21517 #CJK UNIFIED IDEOGRAPH
+ {0xFB5E, 0x9E2E}, //21518 #CJK UNIFIED IDEOGRAPH
+ {0xFB5F, 0x9E30}, //21519 #CJK UNIFIED IDEOGRAPH
+ {0xFB60, 0x9E34}, //21520 #CJK UNIFIED IDEOGRAPH
+ {0xFB61, 0x9E3B}, //21521 #CJK UNIFIED IDEOGRAPH
+ {0xFB62, 0x9E3C}, //21522 #CJK UNIFIED IDEOGRAPH
+ {0xFB63, 0x9E40}, //21523 #CJK UNIFIED IDEOGRAPH
+ {0xFB64, 0x9E4D}, //21524 #CJK UNIFIED IDEOGRAPH
+ {0xFB65, 0x9E50}, //21525 #CJK UNIFIED IDEOGRAPH
+ {0xFB66, 0x9E52}, //21526 #CJK UNIFIED IDEOGRAPH
+ {0xFB67, 0x9E53}, //21527 #CJK UNIFIED IDEOGRAPH
+ {0xFB68, 0x9E54}, //21528 #CJK UNIFIED IDEOGRAPH
+ {0xFB69, 0x9E56}, //21529 #CJK UNIFIED IDEOGRAPH
+ {0xFB6A, 0x9E59}, //21530 #CJK UNIFIED IDEOGRAPH
+ {0xFB6B, 0x9E5D}, //21531 #CJK UNIFIED IDEOGRAPH
+ {0xFB6C, 0x9E5F}, //21532 #CJK UNIFIED IDEOGRAPH
+ {0xFB6D, 0x9E60}, //21533 #CJK UNIFIED IDEOGRAPH
+ {0xFB6E, 0x9E61}, //21534 #CJK UNIFIED IDEOGRAPH
+ {0xFB6F, 0x9E62}, //21535 #CJK UNIFIED IDEOGRAPH
+ {0xFB70, 0x9E65}, //21536 #CJK UNIFIED IDEOGRAPH
+ {0xFB71, 0x9E6E}, //21537 #CJK UNIFIED IDEOGRAPH
+ {0xFB72, 0x9E6F}, //21538 #CJK UNIFIED IDEOGRAPH
+ {0xFB73, 0x9E72}, //21539 #CJK UNIFIED IDEOGRAPH
+ {0xFB74, 0x9E74}, //21540 #CJK UNIFIED IDEOGRAPH
+ {0xFB75, 0x9E75}, //21541 #CJK UNIFIED IDEOGRAPH
+ {0xFB76, 0x9E76}, //21542 #CJK UNIFIED IDEOGRAPH
+ {0xFB77, 0x9E77}, //21543 #CJK UNIFIED IDEOGRAPH
+ {0xFB78, 0x9E78}, //21544 #CJK UNIFIED IDEOGRAPH
+ {0xFB79, 0x9E79}, //21545 #CJK UNIFIED IDEOGRAPH
+ {0xFB7A, 0x9E7A}, //21546 #CJK UNIFIED IDEOGRAPH
+ {0xFB7B, 0x9E7B}, //21547 #CJK UNIFIED IDEOGRAPH
+ {0xFB7C, 0x9E7C}, //21548 #CJK UNIFIED IDEOGRAPH
+ {0xFB7D, 0x9E7D}, //21549 #CJK UNIFIED IDEOGRAPH
+ {0xFB7E, 0x9E80}, //21550 #CJK UNIFIED IDEOGRAPH
+ {0xFB80, 0x9E81}, //21551 #CJK UNIFIED IDEOGRAPH
+ {0xFB81, 0x9E83}, //21552 #CJK UNIFIED IDEOGRAPH
+ {0xFB82, 0x9E84}, //21553 #CJK UNIFIED IDEOGRAPH
+ {0xFB83, 0x9E85}, //21554 #CJK UNIFIED IDEOGRAPH
+ {0xFB84, 0x9E86}, //21555 #CJK UNIFIED IDEOGRAPH
+ {0xFB85, 0x9E89}, //21556 #CJK UNIFIED IDEOGRAPH
+ {0xFB86, 0x9E8A}, //21557 #CJK UNIFIED IDEOGRAPH
+ {0xFB87, 0x9E8C}, //21558 #CJK UNIFIED IDEOGRAPH
+ {0xFB88, 0x9E8D}, //21559 #CJK UNIFIED IDEOGRAPH
+ {0xFB89, 0x9E8E}, //21560 #CJK UNIFIED IDEOGRAPH
+ {0xFB8A, 0x9E8F}, //21561 #CJK UNIFIED IDEOGRAPH
+ {0xFB8B, 0x9E90}, //21562 #CJK UNIFIED IDEOGRAPH
+ {0xFB8C, 0x9E91}, //21563 #CJK UNIFIED IDEOGRAPH
+ {0xFB8D, 0x9E94}, //21564 #CJK UNIFIED IDEOGRAPH
+ {0xFB8E, 0x9E95}, //21565 #CJK UNIFIED IDEOGRAPH
+ {0xFB8F, 0x9E96}, //21566 #CJK UNIFIED IDEOGRAPH
+ {0xFB90, 0x9E97}, //21567 #CJK UNIFIED IDEOGRAPH
+ {0xFB91, 0x9E98}, //21568 #CJK UNIFIED IDEOGRAPH
+ {0xFB92, 0x9E99}, //21569 #CJK UNIFIED IDEOGRAPH
+ {0xFB93, 0x9E9A}, //21570 #CJK UNIFIED IDEOGRAPH
+ {0xFB94, 0x9E9B}, //21571 #CJK UNIFIED IDEOGRAPH
+ {0xFB95, 0x9E9C}, //21572 #CJK UNIFIED IDEOGRAPH
+ {0xFB96, 0x9E9E}, //21573 #CJK UNIFIED IDEOGRAPH
+ {0xFB97, 0x9EA0}, //21574 #CJK UNIFIED IDEOGRAPH
+ {0xFB98, 0x9EA1}, //21575 #CJK UNIFIED IDEOGRAPH
+ {0xFB99, 0x9EA2}, //21576 #CJK UNIFIED IDEOGRAPH
+ {0xFB9A, 0x9EA3}, //21577 #CJK UNIFIED IDEOGRAPH
+ {0xFB9B, 0x9EA4}, //21578 #CJK UNIFIED IDEOGRAPH
+ {0xFB9C, 0x9EA5}, //21579 #CJK UNIFIED IDEOGRAPH
+ {0xFB9D, 0x9EA7}, //21580 #CJK UNIFIED IDEOGRAPH
+ {0xFB9E, 0x9EA8}, //21581 #CJK UNIFIED IDEOGRAPH
+ {0xFB9F, 0x9EA9}, //21582 #CJK UNIFIED IDEOGRAPH
+ {0xFBA0, 0x9EAA}, //21583 #CJK UNIFIED IDEOGRAPH
+ {0xFC40, 0x9EAB}, //21584 #CJK UNIFIED IDEOGRAPH
+ {0xFC41, 0x9EAC}, //21585 #CJK UNIFIED IDEOGRAPH
+ {0xFC42, 0x9EAD}, //21586 #CJK UNIFIED IDEOGRAPH
+ {0xFC43, 0x9EAE}, //21587 #CJK UNIFIED IDEOGRAPH
+ {0xFC44, 0x9EAF}, //21588 #CJK UNIFIED IDEOGRAPH
+ {0xFC45, 0x9EB0}, //21589 #CJK UNIFIED IDEOGRAPH
+ {0xFC46, 0x9EB1}, //21590 #CJK UNIFIED IDEOGRAPH
+ {0xFC47, 0x9EB2}, //21591 #CJK UNIFIED IDEOGRAPH
+ {0xFC48, 0x9EB3}, //21592 #CJK UNIFIED IDEOGRAPH
+ {0xFC49, 0x9EB5}, //21593 #CJK UNIFIED IDEOGRAPH
+ {0xFC4A, 0x9EB6}, //21594 #CJK UNIFIED IDEOGRAPH
+ {0xFC4B, 0x9EB7}, //21595 #CJK UNIFIED IDEOGRAPH
+ {0xFC4C, 0x9EB9}, //21596 #CJK UNIFIED IDEOGRAPH
+ {0xFC4D, 0x9EBA}, //21597 #CJK UNIFIED IDEOGRAPH
+ {0xFC4E, 0x9EBC}, //21598 #CJK UNIFIED IDEOGRAPH
+ {0xFC4F, 0x9EBF}, //21599 #CJK UNIFIED IDEOGRAPH
+ {0xFC50, 0x9EC0}, //21600 #CJK UNIFIED IDEOGRAPH
+ {0xFC51, 0x9EC1}, //21601 #CJK UNIFIED IDEOGRAPH
+ {0xFC52, 0x9EC2}, //21602 #CJK UNIFIED IDEOGRAPH
+ {0xFC53, 0x9EC3}, //21603 #CJK UNIFIED IDEOGRAPH
+ {0xFC54, 0x9EC5}, //21604 #CJK UNIFIED IDEOGRAPH
+ {0xFC55, 0x9EC6}, //21605 #CJK UNIFIED IDEOGRAPH
+ {0xFC56, 0x9EC7}, //21606 #CJK UNIFIED IDEOGRAPH
+ {0xFC57, 0x9EC8}, //21607 #CJK UNIFIED IDEOGRAPH
+ {0xFC58, 0x9ECA}, //21608 #CJK UNIFIED IDEOGRAPH
+ {0xFC59, 0x9ECB}, //21609 #CJK UNIFIED IDEOGRAPH
+ {0xFC5A, 0x9ECC}, //21610 #CJK UNIFIED IDEOGRAPH
+ {0xFC5B, 0x9ED0}, //21611 #CJK UNIFIED IDEOGRAPH
+ {0xFC5C, 0x9ED2}, //21612 #CJK UNIFIED IDEOGRAPH
+ {0xFC5D, 0x9ED3}, //21613 #CJK UNIFIED IDEOGRAPH
+ {0xFC5E, 0x9ED5}, //21614 #CJK UNIFIED IDEOGRAPH
+ {0xFC5F, 0x9ED6}, //21615 #CJK UNIFIED IDEOGRAPH
+ {0xFC60, 0x9ED7}, //21616 #CJK UNIFIED IDEOGRAPH
+ {0xFC61, 0x9ED9}, //21617 #CJK UNIFIED IDEOGRAPH
+ {0xFC62, 0x9EDA}, //21618 #CJK UNIFIED IDEOGRAPH
+ {0xFC63, 0x9EDE}, //21619 #CJK UNIFIED IDEOGRAPH
+ {0xFC64, 0x9EE1}, //21620 #CJK UNIFIED IDEOGRAPH
+ {0xFC65, 0x9EE3}, //21621 #CJK UNIFIED IDEOGRAPH
+ {0xFC66, 0x9EE4}, //21622 #CJK UNIFIED IDEOGRAPH
+ {0xFC67, 0x9EE6}, //21623 #CJK UNIFIED IDEOGRAPH
+ {0xFC68, 0x9EE8}, //21624 #CJK UNIFIED IDEOGRAPH
+ {0xFC69, 0x9EEB}, //21625 #CJK UNIFIED IDEOGRAPH
+ {0xFC6A, 0x9EEC}, //21626 #CJK UNIFIED IDEOGRAPH
+ {0xFC6B, 0x9EED}, //21627 #CJK UNIFIED IDEOGRAPH
+ {0xFC6C, 0x9EEE}, //21628 #CJK UNIFIED IDEOGRAPH
+ {0xFC6D, 0x9EF0}, //21629 #CJK UNIFIED IDEOGRAPH
+ {0xFC6E, 0x9EF1}, //21630 #CJK UNIFIED IDEOGRAPH
+ {0xFC6F, 0x9EF2}, //21631 #CJK UNIFIED IDEOGRAPH
+ {0xFC70, 0x9EF3}, //21632 #CJK UNIFIED IDEOGRAPH
+ {0xFC71, 0x9EF4}, //21633 #CJK UNIFIED IDEOGRAPH
+ {0xFC72, 0x9EF5}, //21634 #CJK UNIFIED IDEOGRAPH
+ {0xFC73, 0x9EF6}, //21635 #CJK UNIFIED IDEOGRAPH
+ {0xFC74, 0x9EF7}, //21636 #CJK UNIFIED IDEOGRAPH
+ {0xFC75, 0x9EF8}, //21637 #CJK UNIFIED IDEOGRAPH
+ {0xFC76, 0x9EFA}, //21638 #CJK UNIFIED IDEOGRAPH
+ {0xFC77, 0x9EFD}, //21639 #CJK UNIFIED IDEOGRAPH
+ {0xFC78, 0x9EFF}, //21640 #CJK UNIFIED IDEOGRAPH
+ {0xFC79, 0x9F00}, //21641 #CJK UNIFIED IDEOGRAPH
+ {0xFC7A, 0x9F01}, //21642 #CJK UNIFIED IDEOGRAPH
+ {0xFC7B, 0x9F02}, //21643 #CJK UNIFIED IDEOGRAPH
+ {0xFC7C, 0x9F03}, //21644 #CJK UNIFIED IDEOGRAPH
+ {0xFC7D, 0x9F04}, //21645 #CJK UNIFIED IDEOGRAPH
+ {0xFC7E, 0x9F05}, //21646 #CJK UNIFIED IDEOGRAPH
+ {0xFC80, 0x9F06}, //21647 #CJK UNIFIED IDEOGRAPH
+ {0xFC81, 0x9F07}, //21648 #CJK UNIFIED IDEOGRAPH
+ {0xFC82, 0x9F08}, //21649 #CJK UNIFIED IDEOGRAPH
+ {0xFC83, 0x9F09}, //21650 #CJK UNIFIED IDEOGRAPH
+ {0xFC84, 0x9F0A}, //21651 #CJK UNIFIED IDEOGRAPH
+ {0xFC85, 0x9F0C}, //21652 #CJK UNIFIED IDEOGRAPH
+ {0xFC86, 0x9F0F}, //21653 #CJK UNIFIED IDEOGRAPH
+ {0xFC87, 0x9F11}, //21654 #CJK UNIFIED IDEOGRAPH
+ {0xFC88, 0x9F12}, //21655 #CJK UNIFIED IDEOGRAPH
+ {0xFC89, 0x9F14}, //21656 #CJK UNIFIED IDEOGRAPH
+ {0xFC8A, 0x9F15}, //21657 #CJK UNIFIED IDEOGRAPH
+ {0xFC8B, 0x9F16}, //21658 #CJK UNIFIED IDEOGRAPH
+ {0xFC8C, 0x9F18}, //21659 #CJK UNIFIED IDEOGRAPH
+ {0xFC8D, 0x9F1A}, //21660 #CJK UNIFIED IDEOGRAPH
+ {0xFC8E, 0x9F1B}, //21661 #CJK UNIFIED IDEOGRAPH
+ {0xFC8F, 0x9F1C}, //21662 #CJK UNIFIED IDEOGRAPH
+ {0xFC90, 0x9F1D}, //21663 #CJK UNIFIED IDEOGRAPH
+ {0xFC91, 0x9F1E}, //21664 #CJK UNIFIED IDEOGRAPH
+ {0xFC92, 0x9F1F}, //21665 #CJK UNIFIED IDEOGRAPH
+ {0xFC93, 0x9F21}, //21666 #CJK UNIFIED IDEOGRAPH
+ {0xFC94, 0x9F23}, //21667 #CJK UNIFIED IDEOGRAPH
+ {0xFC95, 0x9F24}, //21668 #CJK UNIFIED IDEOGRAPH
+ {0xFC96, 0x9F25}, //21669 #CJK UNIFIED IDEOGRAPH
+ {0xFC97, 0x9F26}, //21670 #CJK UNIFIED IDEOGRAPH
+ {0xFC98, 0x9F27}, //21671 #CJK UNIFIED IDEOGRAPH
+ {0xFC99, 0x9F28}, //21672 #CJK UNIFIED IDEOGRAPH
+ {0xFC9A, 0x9F29}, //21673 #CJK UNIFIED IDEOGRAPH
+ {0xFC9B, 0x9F2A}, //21674 #CJK UNIFIED IDEOGRAPH
+ {0xFC9C, 0x9F2B}, //21675 #CJK UNIFIED IDEOGRAPH
+ {0xFC9D, 0x9F2D}, //21676 #CJK UNIFIED IDEOGRAPH
+ {0xFC9E, 0x9F2E}, //21677 #CJK UNIFIED IDEOGRAPH
+ {0xFC9F, 0x9F30}, //21678 #CJK UNIFIED IDEOGRAPH
+ {0xFCA0, 0x9F31}, //21679 #CJK UNIFIED IDEOGRAPH
+ {0xFD40, 0x9F32}, //21680 #CJK UNIFIED IDEOGRAPH
+ {0xFD41, 0x9F33}, //21681 #CJK UNIFIED IDEOGRAPH
+ {0xFD42, 0x9F34}, //21682 #CJK UNIFIED IDEOGRAPH
+ {0xFD43, 0x9F35}, //21683 #CJK UNIFIED IDEOGRAPH
+ {0xFD44, 0x9F36}, //21684 #CJK UNIFIED IDEOGRAPH
+ {0xFD45, 0x9F38}, //21685 #CJK UNIFIED IDEOGRAPH
+ {0xFD46, 0x9F3A}, //21686 #CJK UNIFIED IDEOGRAPH
+ {0xFD47, 0x9F3C}, //21687 #CJK UNIFIED IDEOGRAPH
+ {0xFD48, 0x9F3F}, //21688 #CJK UNIFIED IDEOGRAPH
+ {0xFD49, 0x9F40}, //21689 #CJK UNIFIED IDEOGRAPH
+ {0xFD4A, 0x9F41}, //21690 #CJK UNIFIED IDEOGRAPH
+ {0xFD4B, 0x9F42}, //21691 #CJK UNIFIED IDEOGRAPH
+ {0xFD4C, 0x9F43}, //21692 #CJK UNIFIED IDEOGRAPH
+ {0xFD4D, 0x9F45}, //21693 #CJK UNIFIED IDEOGRAPH
+ {0xFD4E, 0x9F46}, //21694 #CJK UNIFIED IDEOGRAPH
+ {0xFD4F, 0x9F47}, //21695 #CJK UNIFIED IDEOGRAPH
+ {0xFD50, 0x9F48}, //21696 #CJK UNIFIED IDEOGRAPH
+ {0xFD51, 0x9F49}, //21697 #CJK UNIFIED IDEOGRAPH
+ {0xFD52, 0x9F4A}, //21698 #CJK UNIFIED IDEOGRAPH
+ {0xFD53, 0x9F4B}, //21699 #CJK UNIFIED IDEOGRAPH
+ {0xFD54, 0x9F4C}, //21700 #CJK UNIFIED IDEOGRAPH
+ {0xFD55, 0x9F4D}, //21701 #CJK UNIFIED IDEOGRAPH
+ {0xFD56, 0x9F4E}, //21702 #CJK UNIFIED IDEOGRAPH
+ {0xFD57, 0x9F4F}, //21703 #CJK UNIFIED IDEOGRAPH
+ {0xFD58, 0x9F52}, //21704 #CJK UNIFIED IDEOGRAPH
+ {0xFD59, 0x9F53}, //21705 #CJK UNIFIED IDEOGRAPH
+ {0xFD5A, 0x9F54}, //21706 #CJK UNIFIED IDEOGRAPH
+ {0xFD5B, 0x9F55}, //21707 #CJK UNIFIED IDEOGRAPH
+ {0xFD5C, 0x9F56}, //21708 #CJK UNIFIED IDEOGRAPH
+ {0xFD5D, 0x9F57}, //21709 #CJK UNIFIED IDEOGRAPH
+ {0xFD5E, 0x9F58}, //21710 #CJK UNIFIED IDEOGRAPH
+ {0xFD5F, 0x9F59}, //21711 #CJK UNIFIED IDEOGRAPH
+ {0xFD60, 0x9F5A}, //21712 #CJK UNIFIED IDEOGRAPH
+ {0xFD61, 0x9F5B}, //21713 #CJK UNIFIED IDEOGRAPH
+ {0xFD62, 0x9F5C}, //21714 #CJK UNIFIED IDEOGRAPH
+ {0xFD63, 0x9F5D}, //21715 #CJK UNIFIED IDEOGRAPH
+ {0xFD64, 0x9F5E}, //21716 #CJK UNIFIED IDEOGRAPH
+ {0xFD65, 0x9F5F}, //21717 #CJK UNIFIED IDEOGRAPH
+ {0xFD66, 0x9F60}, //21718 #CJK UNIFIED IDEOGRAPH
+ {0xFD67, 0x9F61}, //21719 #CJK UNIFIED IDEOGRAPH
+ {0xFD68, 0x9F62}, //21720 #CJK UNIFIED IDEOGRAPH
+ {0xFD69, 0x9F63}, //21721 #CJK UNIFIED IDEOGRAPH
+ {0xFD6A, 0x9F64}, //21722 #CJK UNIFIED IDEOGRAPH
+ {0xFD6B, 0x9F65}, //21723 #CJK UNIFIED IDEOGRAPH
+ {0xFD6C, 0x9F66}, //21724 #CJK UNIFIED IDEOGRAPH
+ {0xFD6D, 0x9F67}, //21725 #CJK UNIFIED IDEOGRAPH
+ {0xFD6E, 0x9F68}, //21726 #CJK UNIFIED IDEOGRAPH
+ {0xFD6F, 0x9F69}, //21727 #CJK UNIFIED IDEOGRAPH
+ {0xFD70, 0x9F6A}, //21728 #CJK UNIFIED IDEOGRAPH
+ {0xFD71, 0x9F6B}, //21729 #CJK UNIFIED IDEOGRAPH
+ {0xFD72, 0x9F6C}, //21730 #CJK UNIFIED IDEOGRAPH
+ {0xFD73, 0x9F6D}, //21731 #CJK UNIFIED IDEOGRAPH
+ {0xFD74, 0x9F6E}, //21732 #CJK UNIFIED IDEOGRAPH
+ {0xFD75, 0x9F6F}, //21733 #CJK UNIFIED IDEOGRAPH
+ {0xFD76, 0x9F70}, //21734 #CJK UNIFIED IDEOGRAPH
+ {0xFD77, 0x9F71}, //21735 #CJK UNIFIED IDEOGRAPH
+ {0xFD78, 0x9F72}, //21736 #CJK UNIFIED IDEOGRAPH
+ {0xFD79, 0x9F73}, //21737 #CJK UNIFIED IDEOGRAPH
+ {0xFD7A, 0x9F74}, //21738 #CJK UNIFIED IDEOGRAPH
+ {0xFD7B, 0x9F75}, //21739 #CJK UNIFIED IDEOGRAPH
+ {0xFD7C, 0x9F76}, //21740 #CJK UNIFIED IDEOGRAPH
+ {0xFD7D, 0x9F77}, //21741 #CJK UNIFIED IDEOGRAPH
+ {0xFD7E, 0x9F78}, //21742 #CJK UNIFIED IDEOGRAPH
+ {0xFD80, 0x9F79}, //21743 #CJK UNIFIED IDEOGRAPH
+ {0xFD81, 0x9F7A}, //21744 #CJK UNIFIED IDEOGRAPH
+ {0xFD82, 0x9F7B}, //21745 #CJK UNIFIED IDEOGRAPH
+ {0xFD83, 0x9F7C}, //21746 #CJK UNIFIED IDEOGRAPH
+ {0xFD84, 0x9F7D}, //21747 #CJK UNIFIED IDEOGRAPH
+ {0xFD85, 0x9F7E}, //21748 #CJK UNIFIED IDEOGRAPH
+ {0xFD86, 0x9F81}, //21749 #CJK UNIFIED IDEOGRAPH
+ {0xFD87, 0x9F82}, //21750 #CJK UNIFIED IDEOGRAPH
+ {0xFD88, 0x9F8D}, //21751 #CJK UNIFIED IDEOGRAPH
+ {0xFD89, 0x9F8E}, //21752 #CJK UNIFIED IDEOGRAPH
+ {0xFD8A, 0x9F8F}, //21753 #CJK UNIFIED IDEOGRAPH
+ {0xFD8B, 0x9F90}, //21754 #CJK UNIFIED IDEOGRAPH
+ {0xFD8C, 0x9F91}, //21755 #CJK UNIFIED IDEOGRAPH
+ {0xFD8D, 0x9F92}, //21756 #CJK UNIFIED IDEOGRAPH
+ {0xFD8E, 0x9F93}, //21757 #CJK UNIFIED IDEOGRAPH
+ {0xFD8F, 0x9F94}, //21758 #CJK UNIFIED IDEOGRAPH
+ {0xFD90, 0x9F95}, //21759 #CJK UNIFIED IDEOGRAPH
+ {0xFD91, 0x9F96}, //21760 #CJK UNIFIED IDEOGRAPH
+ {0xFD92, 0x9F97}, //21761 #CJK UNIFIED IDEOGRAPH
+ {0xFD93, 0x9F98}, //21762 #CJK UNIFIED IDEOGRAPH
+ {0xFD94, 0x9F9C}, //21763 #CJK UNIFIED IDEOGRAPH
+ {0xFD95, 0x9F9D}, //21764 #CJK UNIFIED IDEOGRAPH
+ {0xFD96, 0x9F9E}, //21765 #CJK UNIFIED IDEOGRAPH
+ {0xFD97, 0x9FA1}, //21766 #CJK UNIFIED IDEOGRAPH
+ {0xFD98, 0x9FA2}, //21767 #CJK UNIFIED IDEOGRAPH
+ {0xFD99, 0x9FA3}, //21768 #CJK UNIFIED IDEOGRAPH
+ {0xFD9A, 0x9FA4}, //21769 #CJK UNIFIED IDEOGRAPH
+ {0xFD9B, 0x9FA5}, //21770 #CJK UNIFIED IDEOGRAPH
+ {0xFD9C, 0xF92C}, //21771 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFD9D, 0xF979}, //21772 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFD9E, 0xF995}, //21773 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFD9F, 0xF9E7}, //21774 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFDA0, 0xF9F1}, //21775 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE40, 0xFA0C}, //21776 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE41, 0xFA0D}, //21777 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE42, 0xFA0E}, //21778 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE43, 0xFA0F}, //21779 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE44, 0xFA11}, //21780 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE45, 0xFA13}, //21781 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE46, 0xFA14}, //21782 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE47, 0xFA18}, //21783 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE48, 0xFA1F}, //21784 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE49, 0xFA20}, //21785 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE4A, 0xFA21}, //21786 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE4B, 0xFA23}, //21787 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE4C, 0xFA24}, //21788 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE4D, 0xFA27}, //21789 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE4E, 0xFA28}, //21790 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFE4F, 0xFA29} //21791 #CJK COMPATIBILITY IDEOGRAPH
+};
+
+#endif // DRW_CPTABLE936_H
diff --git a/lib_dxf/intern/drw_cptable949.h b/lib_dxf/intern/drw_cptable949.h
new file mode 100644
index 0000000..3276b60
--- /dev/null
+++ b/lib_dxf/intern/drw_cptable949.h
@@ -0,0 +1,17199 @@
+#ifndef DRW_CPTABLE949_H
+#define DRW_CPTABLE949_H
+
+//Korean Extended Wansung
+
+//first entry in this table are 0x80
+#define CPOFFSET949 0x80
+#define CPLENGHT949 17048
+#define NOTFOUND949 0x003F
+
+//Table 949 one byte
+static const int DRW_Table949[1] = {
+};
+
+//Table 949 lead byte
+//pairs of start/end in DRW_DoubleTable949
+static const int DRW_LeadTable949[] = {
+ 0, //1#DBCS LEAD BYTE 0x81
+ 178, //2#DBCS LEAD BYTE 0x82
+ 356, //3#DBCS LEAD BYTE 0x83
+ 564, //4#DBCS LEAD BYTE 0x84
+ 712, //5#DBCS LEAD BYTE 0x85
+ 890, //6#DBCS LEAD BYTE 0x86
+ 1068, //7#DBCS LEAD BYTE 0x87
+ 1246, //8#DBCS LEAD BYTE 0x88
+ 1424, //9#DBCS LEAD BYTE 0x89
+ 1602, //10#DBCS LEAD BYTE 0x8A
+ 1780, //11#DBCS LEAD BYTE 0x8B
+ 1958, //12#DBCS LEAD BYTE 0x8C
+ 2136, //13#DBCS LEAD BYTE 0x8D
+ 2314, //14#DBCS LEAD BYTE 0x8E
+ 2492, //15#DBCS LEAD BYTE 0x8F
+ 2670, //16#DBCS LEAD BYTE 0x90
+ 2848, //17#DBCS LEAD BYTE 0x91
+ 3026, //18#DBCS LEAD BYTE 0x92
+ 3204, //19#DBCS LEAD BYTE 0x93
+ 3382, //20#DBCS LEAD BYTE 0x94
+ 3560, //21#DBCS LEAD BYTE 0x95
+ 3738, //22#DBCS LEAD BYTE 0x96
+ 3916, //23#DBCS LEAD BYTE 0x97
+ 4094, //24#DBCS LEAD BYTE 0x98
+ 4272, //25#DBCS LEAD BYTE 0x99
+ 4450, //26#DBCS LEAD BYTE 0x9A
+ 4628, //27#DBCS LEAD BYTE 0x9B
+ 4806, //28#DBCS LEAD BYTE 0x9C
+ 4984, //29#DBCS LEAD BYTE 0x9D
+ 5162, //30#DBCS LEAD BYTE 0x9E
+ 5340, //31#DBCS LEAD BYTE 0x9F
+ 5518, //32#DBCS LEAD BYTE 0xA0
+ 5696, //33#DBCS LEAD BYTE 0xA1
+ 5874, //34#DBCS LEAD BYTE 0xA2
+ 6029, //35#DBCS LEAD BYTE 0xA3
+ 6207, //36#DBCS LEAD BYTE 0xA4
+ 6385, //37#DBCS LEAD BYTE 0xA5
+ 6537, //38#DBCS LEAD BYTE 0xA6
+ 6689, //39#DBCS LEAD BYTE 0xA7
+ 6852, //40#DBCS LEAD BYTE 0xA8
+ 7027, //41#DBCS LEAD BYTE 0xA9
+ 7205, //42#DBCS LEAD BYTE 0xAA
+ 7372, //43#DBCS LEAD BYTE 0xAB
+ 7542, //44#DBCS LEAD BYTE 0xAC
+ 7692, //45#DBCS LEAD BYTE 0xAD
+ 7776, //46#DBCS LEAD BYTE 0xAE
+ 7860, //47#DBCS LEAD BYTE 0xAF
+ 7944, //48#DBCS LEAD BYTE 0xB0
+ 8122, //49#DBCS LEAD BYTE 0xB1
+ 8300, //50#DBCS LEAD BYTE 0xB2
+ 8478, //51#DBCS LEAD BYTE 0xB3
+ 8656, //52#DBCS LEAD BYTE 0xB4
+ 8834, //53#DBCS LEAD BYTE 0xB5
+ 9012, //54#DBCS LEAD BYTE 0xB6
+ 9190, //55#DBCS LEAD BYTE 0xB7
+ 9368, //56#DBCS LEAD BYTE 0xB8
+ 9546, //57#DBCS LEAD BYTE 0xB9
+ 9724, //58#DBCS LEAD BYTE 0xBA
+ 9902, //59#DBCS LEAD BYTE 0xBB
+ 10080, //60#DBCS LEAD BYTE 0xBC
+ 10258, //61#DBCS LEAD BYTE 0xBD
+ 10436, //62#DBCS LEAD BYTE 0xBE
+ 10614, //63#DBCS LEAD BYTE 0xBF
+ 10792, //64#DBCS LEAD BYTE 0xC0
+ 10970, //65#DBCS LEAD BYTE 0xC1
+ 11148, //66#DBCS LEAD BYTE 0xC2
+ 11326, //67#DBCS LEAD BYTE 0xC3
+ 11504, //68#DBCS LEAD BYTE 0xC4
+ 11682, //69#DBCS LEAD BYTE 0xC5
+ 11860, //70#DBCS LEAD BYTE 0xC6
+ 11972, //71#DBCS LEAD BYTE 0xC7
+ 12066, //72#DBCS LEAD BYTE 0xC8
+ 12160, //73#DBCS LEAD BYTE 0xC9, empty
+ 12160, //74#DBCS LEAD BYTE 0xCA
+ 12254, //75#DBCS LEAD BYTE 0xCB
+ 12348, //76#DBCS LEAD BYTE 0xCC
+ 12442, //77#DBCS LEAD BYTE 0xCD
+ 12536, //78#DBCS LEAD BYTE 0xCE
+ 12630, //79#DBCS LEAD BYTE 0xCF
+ 12724, //80#DBCS LEAD BYTE 0xD0
+ 12818, //81#DBCS LEAD BYTE 0xD1
+ 12912, //82#DBCS LEAD BYTE 0xD2
+ 13006, //83#DBCS LEAD BYTE 0xD3
+ 13100, //84#DBCS LEAD BYTE 0xD4
+ 13194, //85#DBCS LEAD BYTE 0xD5
+ 13288, //86#DBCS LEAD BYTE 0xD6
+ 13382, //87#DBCS LEAD BYTE 0xD7
+ 13476, //88#DBCS LEAD BYTE 0xD8
+ 13570, //89#DBCS LEAD BYTE 0xD9
+ 13664, //90#DBCS LEAD BYTE 0xDA
+ 13758, //91#DBCS LEAD BYTE 0xDB
+ 13852, //92#DBCS LEAD BYTE 0xDC
+ 13946, //93#DBCS LEAD BYTE 0xDD
+ 14040, //94#DBCS LEAD BYTE 0xDE
+ 14134, //95#DBCS LEAD BYTE 0xDF
+ 14228, //96#DBCS LEAD BYTE 0xE0
+ 14322, //97#DBCS LEAD BYTE 0xE1
+ 14416, //98#DBCS LEAD BYTE 0xE2
+ 14510, //99#DBCS LEAD BYTE 0xE3
+ 14604, //100#DBCS LEAD BYTE 0xE4
+ 14698, //101#DBCS LEAD BYTE 0xE5
+ 14792, //102#DBCS LEAD BYTE 0xE6
+ 14886, //103#DBCS LEAD BYTE 0xE7
+ 14980, //104#DBCS LEAD BYTE 0xE8
+ 15074, //105#DBCS LEAD BYTE 0xE9
+ 15168, //106#DBCS LEAD BYTE 0xEA
+ 15262, //107#DBCS LEAD BYTE 0xEB
+ 15356, //108#DBCS LEAD BYTE 0xEC
+ 15450, //109#DBCS LEAD BYTE 0xED
+ 15544, //110#DBCS LEAD BYTE 0xEE
+ 15638, //111#DBCS LEAD BYTE 0xEF
+ 15732, //112#DBCS LEAD BYTE 0xF0
+ 15826, //113#DBCS LEAD BYTE 0xF1
+ 15920, //114#DBCS LEAD BYTE 0xF2
+ 16014, //115#DBCS LEAD BYTE 0xF3
+ 16108, //116#DBCS LEAD BYTE 0xF4
+ 16202, //117#DBCS LEAD BYTE 0xF5
+ 16296, //118#DBCS LEAD BYTE 0xF6
+ 16390, //119#DBCS LEAD BYTE 0xF7
+ 16484, //120#DBCS LEAD BYTE 0xF8
+ 16578, //121#DBCS LEAD BYTE 0xF9
+ 16672, //122#DBCS LEAD BYTE 0xFA
+ 16766, //123#DBCS LEAD BYTE 0xFB
+ 16860, //124#DBCS LEAD BYTE 0xFC
+ 16954, //125#DBCS LEAD BYTE 0xFD
+ 17047, //126#DBCS LEAD BYTE 0xFE, empty
+ 17047, //127#UNDEFINED 0xFF, END OF TABLE
+};
+
+//Table 949 tail byte
+static const int DRW_DoubleTable949[][2] = {
+ {0x8141, 0xAC02}, //1 #HANGUL SYLLABLE KIYEOK A SSANGKIYEOK
+ {0x8142, 0xAC03}, //2 #HANGUL SYLLABLE KIYEOK A KIYEOKSIOS
+ {0x8143, 0xAC05}, //3 #HANGUL SYLLABLE KIYEOK A NIEUNCIEUC
+ {0x8144, 0xAC06}, //4 #HANGUL SYLLABLE KIYEOK A NIEUNHIEUH
+ {0x8145, 0xAC0B}, //5 #HANGUL SYLLABLE KIYEOK A RIEULPIEUP
+ {0x8146, 0xAC0C}, //6 #HANGUL SYLLABLE KIYEOK A RIEULSIOS
+ {0x8147, 0xAC0D}, //7 #HANGUL SYLLABLE KIYEOK A RIEULTHIEUTH
+ {0x8148, 0xAC0E}, //8 #HANGUL SYLLABLE KIYEOK A RIEULPHIEUPH
+ {0x8149, 0xAC0F}, //9 #HANGUL SYLLABLE KIYEOK A RIEULHIEUH
+ {0x814A, 0xAC18}, //10 #HANGUL SYLLABLE KIYEOK A KHIEUKH
+ {0x814B, 0xAC1E}, //11 #HANGUL SYLLABLE KIYEOK AE SSANGKIYEOK
+ {0x814C, 0xAC1F}, //12 #HANGUL SYLLABLE KIYEOK AE KIYEOKSIOS
+ {0x814D, 0xAC21}, //13 #HANGUL SYLLABLE KIYEOK AE NIEUNCIEUC
+ {0x814E, 0xAC22}, //14 #HANGUL SYLLABLE KIYEOK AE NIEUNHIEUH
+ {0x814F, 0xAC23}, //15 #HANGUL SYLLABLE KIYEOK AE TIKEUT
+ {0x8150, 0xAC25}, //16 #HANGUL SYLLABLE KIYEOK AE RIEULKIYEOK
+ {0x8151, 0xAC26}, //17 #HANGUL SYLLABLE KIYEOK AE RIEULMIEUM
+ {0x8152, 0xAC27}, //18 #HANGUL SYLLABLE KIYEOK AE RIEULPIEUP
+ {0x8153, 0xAC28}, //19 #HANGUL SYLLABLE KIYEOK AE RIEULSIOS
+ {0x8154, 0xAC29}, //20 #HANGUL SYLLABLE KIYEOK AE RIEULTHIEUTH
+ {0x8155, 0xAC2A}, //21 #HANGUL SYLLABLE KIYEOK AE RIEULPHIEUPH
+ {0x8156, 0xAC2B}, //22 #HANGUL SYLLABLE KIYEOK AE RIEULHIEUH
+ {0x8157, 0xAC2E}, //23 #HANGUL SYLLABLE KIYEOK AE PIEUPSIOS
+ {0x8158, 0xAC32}, //24 #HANGUL SYLLABLE KIYEOK AE CIEUC
+ {0x8159, 0xAC33}, //25 #HANGUL SYLLABLE KIYEOK AE CHIEUCH
+ {0x815A, 0xAC34}, //26 #HANGUL SYLLABLE KIYEOK AE KHIEUKH
+ {0x8161, 0xAC35}, //27 #HANGUL SYLLABLE KIYEOK AE THIEUTH
+ {0x8162, 0xAC36}, //28 #HANGUL SYLLABLE KIYEOK AE PHIEUPH
+ {0x8163, 0xAC37}, //29 #HANGUL SYLLABLE KIYEOK AE HIEUH
+ {0x8164, 0xAC3A}, //30 #HANGUL SYLLABLE KIYEOK YA SSANGKIYEOK
+ {0x8165, 0xAC3B}, //31 #HANGUL SYLLABLE KIYEOK YA KIYEOKSIOS
+ {0x8166, 0xAC3D}, //32 #HANGUL SYLLABLE KIYEOK YA NIEUNCIEUC
+ {0x8167, 0xAC3E}, //33 #HANGUL SYLLABLE KIYEOK YA NIEUNHIEUH
+ {0x8168, 0xAC3F}, //34 #HANGUL SYLLABLE KIYEOK YA TIKEUT
+ {0x8169, 0xAC41}, //35 #HANGUL SYLLABLE KIYEOK YA RIEULKIYEOK
+ {0x816A, 0xAC42}, //36 #HANGUL SYLLABLE KIYEOK YA RIEULMIEUM
+ {0x816B, 0xAC43}, //37 #HANGUL SYLLABLE KIYEOK YA RIEULPIEUP
+ {0x816C, 0xAC44}, //38 #HANGUL SYLLABLE KIYEOK YA RIEULSIOS
+ {0x816D, 0xAC45}, //39 #HANGUL SYLLABLE KIYEOK YA RIEULTHIEUTH
+ {0x816E, 0xAC46}, //40 #HANGUL SYLLABLE KIYEOK YA RIEULPHIEUPH
+ {0x816F, 0xAC47}, //41 #HANGUL SYLLABLE KIYEOK YA RIEULHIEUH
+ {0x8170, 0xAC48}, //42 #HANGUL SYLLABLE KIYEOK YA MIEUM
+ {0x8171, 0xAC49}, //43 #HANGUL SYLLABLE KIYEOK YA PIEUP
+ {0x8172, 0xAC4A}, //44 #HANGUL SYLLABLE KIYEOK YA PIEUPSIOS
+ {0x8173, 0xAC4C}, //45 #HANGUL SYLLABLE KIYEOK YA SSANGSIOS
+ {0x8174, 0xAC4E}, //46 #HANGUL SYLLABLE KIYEOK YA CIEUC
+ {0x8175, 0xAC4F}, //47 #HANGUL SYLLABLE KIYEOK YA CHIEUCH
+ {0x8176, 0xAC50}, //48 #HANGUL SYLLABLE KIYEOK YA KHIEUKH
+ {0x8177, 0xAC51}, //49 #HANGUL SYLLABLE KIYEOK YA THIEUTH
+ {0x8178, 0xAC52}, //50 #HANGUL SYLLABLE KIYEOK YA PHIEUPH
+ {0x8179, 0xAC53}, //51 #HANGUL SYLLABLE KIYEOK YA HIEUH
+ {0x817A, 0xAC55}, //52 #HANGUL SYLLABLE KIYEOK YAE KIYEOK
+ {0x8181, 0xAC56}, //53 #HANGUL SYLLABLE KIYEOK YAE SSANGKIYEOK
+ {0x8182, 0xAC57}, //54 #HANGUL SYLLABLE KIYEOK YAE KIYEOKSIOS
+ {0x8183, 0xAC59}, //55 #HANGUL SYLLABLE KIYEOK YAE NIEUNCIEUC
+ {0x8184, 0xAC5A}, //56 #HANGUL SYLLABLE KIYEOK YAE NIEUNHIEUH
+ {0x8185, 0xAC5B}, //57 #HANGUL SYLLABLE KIYEOK YAE TIKEUT
+ {0x8186, 0xAC5D}, //58 #HANGUL SYLLABLE KIYEOK YAE RIEULKIYEOK
+ {0x8187, 0xAC5E}, //59 #HANGUL SYLLABLE KIYEOK YAE RIEULMIEUM
+ {0x8188, 0xAC5F}, //60 #HANGUL SYLLABLE KIYEOK YAE RIEULPIEUP
+ {0x8189, 0xAC60}, //61 #HANGUL SYLLABLE KIYEOK YAE RIEULSIOS
+ {0x818A, 0xAC61}, //62 #HANGUL SYLLABLE KIYEOK YAE RIEULTHIEUTH
+ {0x818B, 0xAC62}, //63 #HANGUL SYLLABLE KIYEOK YAE RIEULPHIEUPH
+ {0x818C, 0xAC63}, //64 #HANGUL SYLLABLE KIYEOK YAE RIEULHIEUH
+ {0x818D, 0xAC64}, //65 #HANGUL SYLLABLE KIYEOK YAE MIEUM
+ {0x818E, 0xAC65}, //66 #HANGUL SYLLABLE KIYEOK YAE PIEUP
+ {0x818F, 0xAC66}, //67 #HANGUL SYLLABLE KIYEOK YAE PIEUPSIOS
+ {0x8190, 0xAC67}, //68 #HANGUL SYLLABLE KIYEOK YAE SIOS
+ {0x8191, 0xAC68}, //69 #HANGUL SYLLABLE KIYEOK YAE SSANGSIOS
+ {0x8192, 0xAC69}, //70 #HANGUL SYLLABLE KIYEOK YAE IEUNG
+ {0x8193, 0xAC6A}, //71 #HANGUL SYLLABLE KIYEOK YAE CIEUC
+ {0x8194, 0xAC6B}, //72 #HANGUL SYLLABLE KIYEOK YAE CHIEUCH
+ {0x8195, 0xAC6C}, //73 #HANGUL SYLLABLE KIYEOK YAE KHIEUKH
+ {0x8196, 0xAC6D}, //74 #HANGUL SYLLABLE KIYEOK YAE THIEUTH
+ {0x8197, 0xAC6E}, //75 #HANGUL SYLLABLE KIYEOK YAE PHIEUPH
+ {0x8198, 0xAC6F}, //76 #HANGUL SYLLABLE KIYEOK YAE HIEUH
+ {0x8199, 0xAC72}, //77 #HANGUL SYLLABLE KIYEOK EO SSANGKIYEOK
+ {0x819A, 0xAC73}, //78 #HANGUL SYLLABLE KIYEOK EO KIYEOKSIOS
+ {0x819B, 0xAC75}, //79 #HANGUL SYLLABLE KIYEOK EO NIEUNCIEUC
+ {0x819C, 0xAC76}, //80 #HANGUL SYLLABLE KIYEOK EO NIEUNHIEUH
+ {0x819D, 0xAC79}, //81 #HANGUL SYLLABLE KIYEOK EO RIEULKIYEOK
+ {0x819E, 0xAC7B}, //82 #HANGUL SYLLABLE KIYEOK EO RIEULPIEUP
+ {0x819F, 0xAC7C}, //83 #HANGUL SYLLABLE KIYEOK EO RIEULSIOS
+ {0x81A0, 0xAC7D}, //84 #HANGUL SYLLABLE KIYEOK EO RIEULTHIEUTH
+ {0x81A1, 0xAC7E}, //85 #HANGUL SYLLABLE KIYEOK EO RIEULPHIEUPH
+ {0x81A2, 0xAC7F}, //86 #HANGUL SYLLABLE KIYEOK EO RIEULHIEUH
+ {0x81A3, 0xAC82}, //87 #HANGUL SYLLABLE KIYEOK EO PIEUPSIOS
+ {0x81A4, 0xAC87}, //88 #HANGUL SYLLABLE KIYEOK EO CHIEUCH
+ {0x81A5, 0xAC88}, //89 #HANGUL SYLLABLE KIYEOK EO KHIEUKH
+ {0x81A6, 0xAC8D}, //90 #HANGUL SYLLABLE KIYEOK E KIYEOK
+ {0x81A7, 0xAC8E}, //91 #HANGUL SYLLABLE KIYEOK E SSANGKIYEOK
+ {0x81A8, 0xAC8F}, //92 #HANGUL SYLLABLE KIYEOK E KIYEOKSIOS
+ {0x81A9, 0xAC91}, //93 #HANGUL SYLLABLE KIYEOK E NIEUNCIEUC
+ {0x81AA, 0xAC92}, //94 #HANGUL SYLLABLE KIYEOK E NIEUNHIEUH
+ {0x81AB, 0xAC93}, //95 #HANGUL SYLLABLE KIYEOK E TIKEUT
+ {0x81AC, 0xAC95}, //96 #HANGUL SYLLABLE KIYEOK E RIEULKIYEOK
+ {0x81AD, 0xAC96}, //97 #HANGUL SYLLABLE KIYEOK E RIEULMIEUM
+ {0x81AE, 0xAC97}, //98 #HANGUL SYLLABLE KIYEOK E RIEULPIEUP
+ {0x81AF, 0xAC98}, //99 #HANGUL SYLLABLE KIYEOK E RIEULSIOS
+ {0x81B0, 0xAC99}, //100 #HANGUL SYLLABLE KIYEOK E RIEULTHIEUTH
+ {0x81B1, 0xAC9A}, //101 #HANGUL SYLLABLE KIYEOK E RIEULPHIEUPH
+ {0x81B2, 0xAC9B}, //102 #HANGUL SYLLABLE KIYEOK E RIEULHIEUH
+ {0x81B3, 0xAC9E}, //103 #HANGUL SYLLABLE KIYEOK E PIEUPSIOS
+ {0x81B4, 0xACA2}, //104 #HANGUL SYLLABLE KIYEOK E CIEUC
+ {0x81B5, 0xACA3}, //105 #HANGUL SYLLABLE KIYEOK E CHIEUCH
+ {0x81B6, 0xACA4}, //106 #HANGUL SYLLABLE KIYEOK E KHIEUKH
+ {0x81B7, 0xACA5}, //107 #HANGUL SYLLABLE KIYEOK E THIEUTH
+ {0x81B8, 0xACA6}, //108 #HANGUL SYLLABLE KIYEOK E PHIEUPH
+ {0x81B9, 0xACA7}, //109 #HANGUL SYLLABLE KIYEOK E HIEUH
+ {0x81BA, 0xACAB}, //110 #HANGUL SYLLABLE KIYEOK YEO KIYEOKSIOS
+ {0x81BB, 0xACAD}, //111 #HANGUL SYLLABLE KIYEOK YEO NIEUNCIEUC
+ {0x81BC, 0xACAE}, //112 #HANGUL SYLLABLE KIYEOK YEO NIEUNHIEUH
+ {0x81BD, 0xACB1}, //113 #HANGUL SYLLABLE KIYEOK YEO RIEULKIYEOK
+ {0x81BE, 0xACB2}, //114 #HANGUL SYLLABLE KIYEOK YEO RIEULMIEUM
+ {0x81BF, 0xACB3}, //115 #HANGUL SYLLABLE KIYEOK YEO RIEULPIEUP
+ {0x81C0, 0xACB4}, //116 #HANGUL SYLLABLE KIYEOK YEO RIEULSIOS
+ {0x81C1, 0xACB5}, //117 #HANGUL SYLLABLE KIYEOK YEO RIEULTHIEUTH
+ {0x81C2, 0xACB6}, //118 #HANGUL SYLLABLE KIYEOK YEO RIEULPHIEUPH
+ {0x81C3, 0xACB7}, //119 #HANGUL SYLLABLE KIYEOK YEO RIEULHIEUH
+ {0x81C4, 0xACBA}, //120 #HANGUL SYLLABLE KIYEOK YEO PIEUPSIOS
+ {0x81C5, 0xACBE}, //121 #HANGUL SYLLABLE KIYEOK YEO CIEUC
+ {0x81C6, 0xACBF}, //122 #HANGUL SYLLABLE KIYEOK YEO CHIEUCH
+ {0x81C7, 0xACC0}, //123 #HANGUL SYLLABLE KIYEOK YEO KHIEUKH
+ {0x81C8, 0xACC2}, //124 #HANGUL SYLLABLE KIYEOK YEO PHIEUPH
+ {0x81C9, 0xACC3}, //125 #HANGUL SYLLABLE KIYEOK YEO HIEUH
+ {0x81CA, 0xACC5}, //126 #HANGUL SYLLABLE KIYEOK YE KIYEOK
+ {0x81CB, 0xACC6}, //127 #HANGUL SYLLABLE KIYEOK YE SSANGKIYEOK
+ {0x81CC, 0xACC7}, //128 #HANGUL SYLLABLE KIYEOK YE KIYEOKSIOS
+ {0x81CD, 0xACC9}, //129 #HANGUL SYLLABLE KIYEOK YE NIEUNCIEUC
+ {0x81CE, 0xACCA}, //130 #HANGUL SYLLABLE KIYEOK YE NIEUNHIEUH
+ {0x81CF, 0xACCB}, //131 #HANGUL SYLLABLE KIYEOK YE TIKEUT
+ {0x81D0, 0xACCD}, //132 #HANGUL SYLLABLE KIYEOK YE RIEULKIYEOK
+ {0x81D1, 0xACCE}, //133 #HANGUL SYLLABLE KIYEOK YE RIEULMIEUM
+ {0x81D2, 0xACCF}, //134 #HANGUL SYLLABLE KIYEOK YE RIEULPIEUP
+ {0x81D3, 0xACD0}, //135 #HANGUL SYLLABLE KIYEOK YE RIEULSIOS
+ {0x81D4, 0xACD1}, //136 #HANGUL SYLLABLE KIYEOK YE RIEULTHIEUTH
+ {0x81D5, 0xACD2}, //137 #HANGUL SYLLABLE KIYEOK YE RIEULPHIEUPH
+ {0x81D6, 0xACD3}, //138 #HANGUL SYLLABLE KIYEOK YE RIEULHIEUH
+ {0x81D7, 0xACD4}, //139 #HANGUL SYLLABLE KIYEOK YE MIEUM
+ {0x81D8, 0xACD6}, //140 #HANGUL SYLLABLE KIYEOK YE PIEUPSIOS
+ {0x81D9, 0xACD8}, //141 #HANGUL SYLLABLE KIYEOK YE SSANGSIOS
+ {0x81DA, 0xACD9}, //142 #HANGUL SYLLABLE KIYEOK YE IEUNG
+ {0x81DB, 0xACDA}, //143 #HANGUL SYLLABLE KIYEOK YE CIEUC
+ {0x81DC, 0xACDB}, //144 #HANGUL SYLLABLE KIYEOK YE CHIEUCH
+ {0x81DD, 0xACDC}, //145 #HANGUL SYLLABLE KIYEOK YE KHIEUKH
+ {0x81DE, 0xACDD}, //146 #HANGUL SYLLABLE KIYEOK YE THIEUTH
+ {0x81DF, 0xACDE}, //147 #HANGUL SYLLABLE KIYEOK YE PHIEUPH
+ {0x81E0, 0xACDF}, //148 #HANGUL SYLLABLE KIYEOK YE HIEUH
+ {0x81E1, 0xACE2}, //149 #HANGUL SYLLABLE KIYEOK O SSANGKIYEOK
+ {0x81E2, 0xACE3}, //150 #HANGUL SYLLABLE KIYEOK O KIYEOKSIOS
+ {0x81E3, 0xACE5}, //151 #HANGUL SYLLABLE KIYEOK O NIEUNCIEUC
+ {0x81E4, 0xACE6}, //152 #HANGUL SYLLABLE KIYEOK O NIEUNHIEUH
+ {0x81E5, 0xACE9}, //153 #HANGUL SYLLABLE KIYEOK O RIEULKIYEOK
+ {0x81E6, 0xACEB}, //154 #HANGUL SYLLABLE KIYEOK O RIEULPIEUP
+ {0x81E7, 0xACED}, //155 #HANGUL SYLLABLE KIYEOK O RIEULTHIEUTH
+ {0x81E8, 0xACEE}, //156 #HANGUL SYLLABLE KIYEOK O RIEULPHIEUPH
+ {0x81E9, 0xACF2}, //157 #HANGUL SYLLABLE KIYEOK O PIEUPSIOS
+ {0x81EA, 0xACF4}, //158 #HANGUL SYLLABLE KIYEOK O SSANGSIOS
+ {0x81EB, 0xACF7}, //159 #HANGUL SYLLABLE KIYEOK O CHIEUCH
+ {0x81EC, 0xACF8}, //160 #HANGUL SYLLABLE KIYEOK O KHIEUKH
+ {0x81ED, 0xACF9}, //161 #HANGUL SYLLABLE KIYEOK O THIEUTH
+ {0x81EE, 0xACFA}, //162 #HANGUL SYLLABLE KIYEOK O PHIEUPH
+ {0x81EF, 0xACFB}, //163 #HANGUL SYLLABLE KIYEOK O HIEUH
+ {0x81F0, 0xACFE}, //164 #HANGUL SYLLABLE KIYEOK WA SSANGKIYEOK
+ {0x81F1, 0xACFF}, //165 #HANGUL SYLLABLE KIYEOK WA KIYEOKSIOS
+ {0x81F2, 0xAD01}, //166 #HANGUL SYLLABLE KIYEOK WA NIEUNCIEUC
+ {0x81F3, 0xAD02}, //167 #HANGUL SYLLABLE KIYEOK WA NIEUNHIEUH
+ {0x81F4, 0xAD03}, //168 #HANGUL SYLLABLE KIYEOK WA TIKEUT
+ {0x81F5, 0xAD05}, //169 #HANGUL SYLLABLE KIYEOK WA RIEULKIYEOK
+ {0x81F6, 0xAD07}, //170 #HANGUL SYLLABLE KIYEOK WA RIEULPIEUP
+ {0x81F7, 0xAD08}, //171 #HANGUL SYLLABLE KIYEOK WA RIEULSIOS
+ {0x81F8, 0xAD09}, //172 #HANGUL SYLLABLE KIYEOK WA RIEULTHIEUTH
+ {0x81F9, 0xAD0A}, //173 #HANGUL SYLLABLE KIYEOK WA RIEULPHIEUPH
+ {0x81FA, 0xAD0B}, //174 #HANGUL SYLLABLE KIYEOK WA RIEULHIEUH
+ {0x81FB, 0xAD0E}, //175 #HANGUL SYLLABLE KIYEOK WA PIEUPSIOS
+ {0x81FC, 0xAD10}, //176 #HANGUL SYLLABLE KIYEOK WA SSANGSIOS
+ {0x81FD, 0xAD12}, //177 #HANGUL SYLLABLE KIYEOK WA CIEUC
+ {0x81FE, 0xAD13}, //178 #HANGUL SYLLABLE KIYEOK WA CHIEUCH
+ {0x8241, 0xAD14}, //179 #HANGUL SYLLABLE KIYEOK WA KHIEUKH
+ {0x8242, 0xAD15}, //180 #HANGUL SYLLABLE KIYEOK WA THIEUTH
+ {0x8243, 0xAD16}, //181 #HANGUL SYLLABLE KIYEOK WA PHIEUPH
+ {0x8244, 0xAD17}, //182 #HANGUL SYLLABLE KIYEOK WA HIEUH
+ {0x8245, 0xAD19}, //183 #HANGUL SYLLABLE KIYEOK WAE KIYEOK
+ {0x8246, 0xAD1A}, //184 #HANGUL SYLLABLE KIYEOK WAE SSANGKIYEOK
+ {0x8247, 0xAD1B}, //185 #HANGUL SYLLABLE KIYEOK WAE KIYEOKSIOS
+ {0x8248, 0xAD1D}, //186 #HANGUL SYLLABLE KIYEOK WAE NIEUNCIEUC
+ {0x8249, 0xAD1E}, //187 #HANGUL SYLLABLE KIYEOK WAE NIEUNHIEUH
+ {0x824A, 0xAD1F}, //188 #HANGUL SYLLABLE KIYEOK WAE TIKEUT
+ {0x824B, 0xAD21}, //189 #HANGUL SYLLABLE KIYEOK WAE RIEULKIYEOK
+ {0x824C, 0xAD22}, //190 #HANGUL SYLLABLE KIYEOK WAE RIEULMIEUM
+ {0x824D, 0xAD23}, //191 #HANGUL SYLLABLE KIYEOK WAE RIEULPIEUP
+ {0x824E, 0xAD24}, //192 #HANGUL SYLLABLE KIYEOK WAE RIEULSIOS
+ {0x824F, 0xAD25}, //193 #HANGUL SYLLABLE KIYEOK WAE RIEULTHIEUTH
+ {0x8250, 0xAD26}, //194 #HANGUL SYLLABLE KIYEOK WAE RIEULPHIEUPH
+ {0x8251, 0xAD27}, //195 #HANGUL SYLLABLE KIYEOK WAE RIEULHIEUH
+ {0x8252, 0xAD28}, //196 #HANGUL SYLLABLE KIYEOK WAE MIEUM
+ {0x8253, 0xAD2A}, //197 #HANGUL SYLLABLE KIYEOK WAE PIEUPSIOS
+ {0x8254, 0xAD2B}, //198 #HANGUL SYLLABLE KIYEOK WAE SIOS
+ {0x8255, 0xAD2E}, //199 #HANGUL SYLLABLE KIYEOK WAE CIEUC
+ {0x8256, 0xAD2F}, //200 #HANGUL SYLLABLE KIYEOK WAE CHIEUCH
+ {0x8257, 0xAD30}, //201 #HANGUL SYLLABLE KIYEOK WAE KHIEUKH
+ {0x8258, 0xAD31}, //202 #HANGUL SYLLABLE KIYEOK WAE THIEUTH
+ {0x8259, 0xAD32}, //203 #HANGUL SYLLABLE KIYEOK WAE PHIEUPH
+ {0x825A, 0xAD33}, //204 #HANGUL SYLLABLE KIYEOK WAE HIEUH
+ {0x8261, 0xAD36}, //205 #HANGUL SYLLABLE KIYEOK OE SSANGKIYEOK
+ {0x8262, 0xAD37}, //206 #HANGUL SYLLABLE KIYEOK OE KIYEOKSIOS
+ {0x8263, 0xAD39}, //207 #HANGUL SYLLABLE KIYEOK OE NIEUNCIEUC
+ {0x8264, 0xAD3A}, //208 #HANGUL SYLLABLE KIYEOK OE NIEUNHIEUH
+ {0x8265, 0xAD3B}, //209 #HANGUL SYLLABLE KIYEOK OE TIKEUT
+ {0x8266, 0xAD3D}, //210 #HANGUL SYLLABLE KIYEOK OE RIEULKIYEOK
+ {0x8267, 0xAD3E}, //211 #HANGUL SYLLABLE KIYEOK OE RIEULMIEUM
+ {0x8268, 0xAD3F}, //212 #HANGUL SYLLABLE KIYEOK OE RIEULPIEUP
+ {0x8269, 0xAD40}, //213 #HANGUL SYLLABLE KIYEOK OE RIEULSIOS
+ {0x826A, 0xAD41}, //214 #HANGUL SYLLABLE KIYEOK OE RIEULTHIEUTH
+ {0x826B, 0xAD42}, //215 #HANGUL SYLLABLE KIYEOK OE RIEULPHIEUPH
+ {0x826C, 0xAD43}, //216 #HANGUL SYLLABLE KIYEOK OE RIEULHIEUH
+ {0x826D, 0xAD46}, //217 #HANGUL SYLLABLE KIYEOK OE PIEUPSIOS
+ {0x826E, 0xAD48}, //218 #HANGUL SYLLABLE KIYEOK OE SSANGSIOS
+ {0x826F, 0xAD4A}, //219 #HANGUL SYLLABLE KIYEOK OE CIEUC
+ {0x8270, 0xAD4B}, //220 #HANGUL SYLLABLE KIYEOK OE CHIEUCH
+ {0x8271, 0xAD4C}, //221 #HANGUL SYLLABLE KIYEOK OE KHIEUKH
+ {0x8272, 0xAD4D}, //222 #HANGUL SYLLABLE KIYEOK OE THIEUTH
+ {0x8273, 0xAD4E}, //223 #HANGUL SYLLABLE KIYEOK OE PHIEUPH
+ {0x8274, 0xAD4F}, //224 #HANGUL SYLLABLE KIYEOK OE HIEUH
+ {0x8275, 0xAD51}, //225 #HANGUL SYLLABLE KIYEOK YO KIYEOK
+ {0x8276, 0xAD52}, //226 #HANGUL SYLLABLE KIYEOK YO SSANGKIYEOK
+ {0x8277, 0xAD53}, //227 #HANGUL SYLLABLE KIYEOK YO KIYEOKSIOS
+ {0x8278, 0xAD55}, //228 #HANGUL SYLLABLE KIYEOK YO NIEUNCIEUC
+ {0x8279, 0xAD56}, //229 #HANGUL SYLLABLE KIYEOK YO NIEUNHIEUH
+ {0x827A, 0xAD57}, //230 #HANGUL SYLLABLE KIYEOK YO TIKEUT
+ {0x8281, 0xAD59}, //231 #HANGUL SYLLABLE KIYEOK YO RIEULKIYEOK
+ {0x8282, 0xAD5A}, //232 #HANGUL SYLLABLE KIYEOK YO RIEULMIEUM
+ {0x8283, 0xAD5B}, //233 #HANGUL SYLLABLE KIYEOK YO RIEULPIEUP
+ {0x8284, 0xAD5C}, //234 #HANGUL SYLLABLE KIYEOK YO RIEULSIOS
+ {0x8285, 0xAD5D}, //235 #HANGUL SYLLABLE KIYEOK YO RIEULTHIEUTH
+ {0x8286, 0xAD5E}, //236 #HANGUL SYLLABLE KIYEOK YO RIEULPHIEUPH
+ {0x8287, 0xAD5F}, //237 #HANGUL SYLLABLE KIYEOK YO RIEULHIEUH
+ {0x8288, 0xAD60}, //238 #HANGUL SYLLABLE KIYEOK YO MIEUM
+ {0x8289, 0xAD62}, //239 #HANGUL SYLLABLE KIYEOK YO PIEUPSIOS
+ {0x828A, 0xAD64}, //240 #HANGUL SYLLABLE KIYEOK YO SSANGSIOS
+ {0x828B, 0xAD65}, //241 #HANGUL SYLLABLE KIYEOK YO IEUNG
+ {0x828C, 0xAD66}, //242 #HANGUL SYLLABLE KIYEOK YO CIEUC
+ {0x828D, 0xAD67}, //243 #HANGUL SYLLABLE KIYEOK YO CHIEUCH
+ {0x828E, 0xAD68}, //244 #HANGUL SYLLABLE KIYEOK YO KHIEUKH
+ {0x828F, 0xAD69}, //245 #HANGUL SYLLABLE KIYEOK YO THIEUTH
+ {0x8290, 0xAD6A}, //246 #HANGUL SYLLABLE KIYEOK YO PHIEUPH
+ {0x8291, 0xAD6B}, //247 #HANGUL SYLLABLE KIYEOK YO HIEUH
+ {0x8292, 0xAD6E}, //248 #HANGUL SYLLABLE KIYEOK U SSANGKIYEOK
+ {0x8293, 0xAD6F}, //249 #HANGUL SYLLABLE KIYEOK U KIYEOKSIOS
+ {0x8294, 0xAD71}, //250 #HANGUL SYLLABLE KIYEOK U NIEUNCIEUC
+ {0x8295, 0xAD72}, //251 #HANGUL SYLLABLE KIYEOK U NIEUNHIEUH
+ {0x8296, 0xAD77}, //252 #HANGUL SYLLABLE KIYEOK U RIEULPIEUP
+ {0x8297, 0xAD78}, //253 #HANGUL SYLLABLE KIYEOK U RIEULSIOS
+ {0x8298, 0xAD79}, //254 #HANGUL SYLLABLE KIYEOK U RIEULTHIEUTH
+ {0x8299, 0xAD7A}, //255 #HANGUL SYLLABLE KIYEOK U RIEULPHIEUPH
+ {0x829A, 0xAD7E}, //256 #HANGUL SYLLABLE KIYEOK U PIEUPSIOS
+ {0x829B, 0xAD80}, //257 #HANGUL SYLLABLE KIYEOK U SSANGSIOS
+ {0x829C, 0xAD83}, //258 #HANGUL SYLLABLE KIYEOK U CHIEUCH
+ {0x829D, 0xAD84}, //259 #HANGUL SYLLABLE KIYEOK U KHIEUKH
+ {0x829E, 0xAD85}, //260 #HANGUL SYLLABLE KIYEOK U THIEUTH
+ {0x829F, 0xAD86}, //261 #HANGUL SYLLABLE KIYEOK U PHIEUPH
+ {0x82A0, 0xAD87}, //262 #HANGUL SYLLABLE KIYEOK U HIEUH
+ {0x82A1, 0xAD8A}, //263 #HANGUL SYLLABLE KIYEOK WEO SSANGKIYEOK
+ {0x82A2, 0xAD8B}, //264 #HANGUL SYLLABLE KIYEOK WEO KIYEOKSIOS
+ {0x82A3, 0xAD8D}, //265 #HANGUL SYLLABLE KIYEOK WEO NIEUNCIEUC
+ {0x82A4, 0xAD8E}, //266 #HANGUL SYLLABLE KIYEOK WEO NIEUNHIEUH
+ {0x82A5, 0xAD8F}, //267 #HANGUL SYLLABLE KIYEOK WEO TIKEUT
+ {0x82A6, 0xAD91}, //268 #HANGUL SYLLABLE KIYEOK WEO RIEULKIYEOK
+ {0x82A7, 0xAD92}, //269 #HANGUL SYLLABLE KIYEOK WEO RIEULMIEUM
+ {0x82A8, 0xAD93}, //270 #HANGUL SYLLABLE KIYEOK WEO RIEULPIEUP
+ {0x82A9, 0xAD94}, //271 #HANGUL SYLLABLE KIYEOK WEO RIEULSIOS
+ {0x82AA, 0xAD95}, //272 #HANGUL SYLLABLE KIYEOK WEO RIEULTHIEUTH
+ {0x82AB, 0xAD96}, //273 #HANGUL SYLLABLE KIYEOK WEO RIEULPHIEUPH
+ {0x82AC, 0xAD97}, //274 #HANGUL SYLLABLE KIYEOK WEO RIEULHIEUH
+ {0x82AD, 0xAD98}, //275 #HANGUL SYLLABLE KIYEOK WEO MIEUM
+ {0x82AE, 0xAD99}, //276 #HANGUL SYLLABLE KIYEOK WEO PIEUP
+ {0x82AF, 0xAD9A}, //277 #HANGUL SYLLABLE KIYEOK WEO PIEUPSIOS
+ {0x82B0, 0xAD9B}, //278 #HANGUL SYLLABLE KIYEOK WEO SIOS
+ {0x82B1, 0xAD9E}, //279 #HANGUL SYLLABLE KIYEOK WEO CIEUC
+ {0x82B2, 0xAD9F}, //280 #HANGUL SYLLABLE KIYEOK WEO CHIEUCH
+ {0x82B3, 0xADA0}, //281 #HANGUL SYLLABLE KIYEOK WEO KHIEUKH
+ {0x82B4, 0xADA1}, //282 #HANGUL SYLLABLE KIYEOK WEO THIEUTH
+ {0x82B5, 0xADA2}, //283 #HANGUL SYLLABLE KIYEOK WEO PHIEUPH
+ {0x82B6, 0xADA3}, //284 #HANGUL SYLLABLE KIYEOK WEO HIEUH
+ {0x82B7, 0xADA5}, //285 #HANGUL SYLLABLE KIYEOK WE KIYEOK
+ {0x82B8, 0xADA6}, //286 #HANGUL SYLLABLE KIYEOK WE SSANGKIYEOK
+ {0x82B9, 0xADA7}, //287 #HANGUL SYLLABLE KIYEOK WE KIYEOKSIOS
+ {0x82BA, 0xADA8}, //288 #HANGUL SYLLABLE KIYEOK WE NIEUN
+ {0x82BB, 0xADA9}, //289 #HANGUL SYLLABLE KIYEOK WE NIEUNCIEUC
+ {0x82BC, 0xADAA}, //290 #HANGUL SYLLABLE KIYEOK WE NIEUNHIEUH
+ {0x82BD, 0xADAB}, //291 #HANGUL SYLLABLE KIYEOK WE TIKEUT
+ {0x82BE, 0xADAC}, //292 #HANGUL SYLLABLE KIYEOK WE RIEUL
+ {0x82BF, 0xADAD}, //293 #HANGUL SYLLABLE KIYEOK WE RIEULKIYEOK
+ {0x82C0, 0xADAE}, //294 #HANGUL SYLLABLE KIYEOK WE RIEULMIEUM
+ {0x82C1, 0xADAF}, //295 #HANGUL SYLLABLE KIYEOK WE RIEULPIEUP
+ {0x82C2, 0xADB0}, //296 #HANGUL SYLLABLE KIYEOK WE RIEULSIOS
+ {0x82C3, 0xADB1}, //297 #HANGUL SYLLABLE KIYEOK WE RIEULTHIEUTH
+ {0x82C4, 0xADB2}, //298 #HANGUL SYLLABLE KIYEOK WE RIEULPHIEUPH
+ {0x82C5, 0xADB3}, //299 #HANGUL SYLLABLE KIYEOK WE RIEULHIEUH
+ {0x82C6, 0xADB4}, //300 #HANGUL SYLLABLE KIYEOK WE MIEUM
+ {0x82C7, 0xADB5}, //301 #HANGUL SYLLABLE KIYEOK WE PIEUP
+ {0x82C8, 0xADB6}, //302 #HANGUL SYLLABLE KIYEOK WE PIEUPSIOS
+ {0x82C9, 0xADB8}, //303 #HANGUL SYLLABLE KIYEOK WE SSANGSIOS
+ {0x82CA, 0xADB9}, //304 #HANGUL SYLLABLE KIYEOK WE IEUNG
+ {0x82CB, 0xADBA}, //305 #HANGUL SYLLABLE KIYEOK WE CIEUC
+ {0x82CC, 0xADBB}, //306 #HANGUL SYLLABLE KIYEOK WE CHIEUCH
+ {0x82CD, 0xADBC}, //307 #HANGUL SYLLABLE KIYEOK WE KHIEUKH
+ {0x82CE, 0xADBD}, //308 #HANGUL SYLLABLE KIYEOK WE THIEUTH
+ {0x82CF, 0xADBE}, //309 #HANGUL SYLLABLE KIYEOK WE PHIEUPH
+ {0x82D0, 0xADBF}, //310 #HANGUL SYLLABLE KIYEOK WE HIEUH
+ {0x82D1, 0xADC2}, //311 #HANGUL SYLLABLE KIYEOK WI SSANGKIYEOK
+ {0x82D2, 0xADC3}, //312 #HANGUL SYLLABLE KIYEOK WI KIYEOKSIOS
+ {0x82D3, 0xADC5}, //313 #HANGUL SYLLABLE KIYEOK WI NIEUNCIEUC
+ {0x82D4, 0xADC6}, //314 #HANGUL SYLLABLE KIYEOK WI NIEUNHIEUH
+ {0x82D5, 0xADC7}, //315 #HANGUL SYLLABLE KIYEOK WI TIKEUT
+ {0x82D6, 0xADC9}, //316 #HANGUL SYLLABLE KIYEOK WI RIEULKIYEOK
+ {0x82D7, 0xADCA}, //317 #HANGUL SYLLABLE KIYEOK WI RIEULMIEUM
+ {0x82D8, 0xADCB}, //318 #HANGUL SYLLABLE KIYEOK WI RIEULPIEUP
+ {0x82D9, 0xADCC}, //319 #HANGUL SYLLABLE KIYEOK WI RIEULSIOS
+ {0x82DA, 0xADCD}, //320 #HANGUL SYLLABLE KIYEOK WI RIEULTHIEUTH
+ {0x82DB, 0xADCE}, //321 #HANGUL SYLLABLE KIYEOK WI RIEULPHIEUPH
+ {0x82DC, 0xADCF}, //322 #HANGUL SYLLABLE KIYEOK WI RIEULHIEUH
+ {0x82DD, 0xADD2}, //323 #HANGUL SYLLABLE KIYEOK WI PIEUPSIOS
+ {0x82DE, 0xADD4}, //324 #HANGUL SYLLABLE KIYEOK WI SSANGSIOS
+ {0x82DF, 0xADD5}, //325 #HANGUL SYLLABLE KIYEOK WI IEUNG
+ {0x82E0, 0xADD6}, //326 #HANGUL SYLLABLE KIYEOK WI CIEUC
+ {0x82E1, 0xADD7}, //327 #HANGUL SYLLABLE KIYEOK WI CHIEUCH
+ {0x82E2, 0xADD8}, //328 #HANGUL SYLLABLE KIYEOK WI KHIEUKH
+ {0x82E3, 0xADD9}, //329 #HANGUL SYLLABLE KIYEOK WI THIEUTH
+ {0x82E4, 0xADDA}, //330 #HANGUL SYLLABLE KIYEOK WI PHIEUPH
+ {0x82E5, 0xADDB}, //331 #HANGUL SYLLABLE KIYEOK WI HIEUH
+ {0x82E6, 0xADDD}, //332 #HANGUL SYLLABLE KIYEOK YU KIYEOK
+ {0x82E7, 0xADDE}, //333 #HANGUL SYLLABLE KIYEOK YU SSANGKIYEOK
+ {0x82E8, 0xADDF}, //334 #HANGUL SYLLABLE KIYEOK YU KIYEOKSIOS
+ {0x82E9, 0xADE1}, //335 #HANGUL SYLLABLE KIYEOK YU NIEUNCIEUC
+ {0x82EA, 0xADE2}, //336 #HANGUL SYLLABLE KIYEOK YU NIEUNHIEUH
+ {0x82EB, 0xADE3}, //337 #HANGUL SYLLABLE KIYEOK YU TIKEUT
+ {0x82EC, 0xADE5}, //338 #HANGUL SYLLABLE KIYEOK YU RIEULKIYEOK
+ {0x82ED, 0xADE6}, //339 #HANGUL SYLLABLE KIYEOK YU RIEULMIEUM
+ {0x82EE, 0xADE7}, //340 #HANGUL SYLLABLE KIYEOK YU RIEULPIEUP
+ {0x82EF, 0xADE8}, //341 #HANGUL SYLLABLE KIYEOK YU RIEULSIOS
+ {0x82F0, 0xADE9}, //342 #HANGUL SYLLABLE KIYEOK YU RIEULTHIEUTH
+ {0x82F1, 0xADEA}, //343 #HANGUL SYLLABLE KIYEOK YU RIEULPHIEUPH
+ {0x82F2, 0xADEB}, //344 #HANGUL SYLLABLE KIYEOK YU RIEULHIEUH
+ {0x82F3, 0xADEC}, //345 #HANGUL SYLLABLE KIYEOK YU MIEUM
+ {0x82F4, 0xADED}, //346 #HANGUL SYLLABLE KIYEOK YU PIEUP
+ {0x82F5, 0xADEE}, //347 #HANGUL SYLLABLE KIYEOK YU PIEUPSIOS
+ {0x82F6, 0xADEF}, //348 #HANGUL SYLLABLE KIYEOK YU SIOS
+ {0x82F7, 0xADF0}, //349 #HANGUL SYLLABLE KIYEOK YU SSANGSIOS
+ {0x82F8, 0xADF1}, //350 #HANGUL SYLLABLE KIYEOK YU IEUNG
+ {0x82F9, 0xADF2}, //351 #HANGUL SYLLABLE KIYEOK YU CIEUC
+ {0x82FA, 0xADF3}, //352 #HANGUL SYLLABLE KIYEOK YU CHIEUCH
+ {0x82FB, 0xADF4}, //353 #HANGUL SYLLABLE KIYEOK YU KHIEUKH
+ {0x82FC, 0xADF5}, //354 #HANGUL SYLLABLE KIYEOK YU THIEUTH
+ {0x82FD, 0xADF6}, //355 #HANGUL SYLLABLE KIYEOK YU PHIEUPH
+ {0x82FE, 0xADF7}, //356 #HANGUL SYLLABLE KIYEOK YU HIEUH
+ {0x8341, 0xADFA}, //357 #HANGUL SYLLABLE KIYEOK EU SSANGKIYEOK
+ {0x8342, 0xADFB}, //358 #HANGUL SYLLABLE KIYEOK EU KIYEOKSIOS
+ {0x8343, 0xADFD}, //359 #HANGUL SYLLABLE KIYEOK EU NIEUNCIEUC
+ {0x8344, 0xADFE}, //360 #HANGUL SYLLABLE KIYEOK EU NIEUNHIEUH
+ {0x8345, 0xAE02}, //361 #HANGUL SYLLABLE KIYEOK EU RIEULMIEUM
+ {0x8346, 0xAE03}, //362 #HANGUL SYLLABLE KIYEOK EU RIEULPIEUP
+ {0x8347, 0xAE04}, //363 #HANGUL SYLLABLE KIYEOK EU RIEULSIOS
+ {0x8348, 0xAE05}, //364 #HANGUL SYLLABLE KIYEOK EU RIEULTHIEUTH
+ {0x8349, 0xAE06}, //365 #HANGUL SYLLABLE KIYEOK EU RIEULPHIEUPH
+ {0x834A, 0xAE07}, //366 #HANGUL SYLLABLE KIYEOK EU RIEULHIEUH
+ {0x834B, 0xAE0A}, //367 #HANGUL SYLLABLE KIYEOK EU PIEUPSIOS
+ {0x834C, 0xAE0C}, //368 #HANGUL SYLLABLE KIYEOK EU SSANGSIOS
+ {0x834D, 0xAE0E}, //369 #HANGUL SYLLABLE KIYEOK EU CIEUC
+ {0x834E, 0xAE0F}, //370 #HANGUL SYLLABLE KIYEOK EU CHIEUCH
+ {0x834F, 0xAE10}, //371 #HANGUL SYLLABLE KIYEOK EU KHIEUKH
+ {0x8350, 0xAE11}, //372 #HANGUL SYLLABLE KIYEOK EU THIEUTH
+ {0x8351, 0xAE12}, //373 #HANGUL SYLLABLE KIYEOK EU PHIEUPH
+ {0x8352, 0xAE13}, //374 #HANGUL SYLLABLE KIYEOK EU HIEUH
+ {0x8353, 0xAE15}, //375 #HANGUL SYLLABLE KIYEOK YI KIYEOK
+ {0x8354, 0xAE16}, //376 #HANGUL SYLLABLE KIYEOK YI SSANGKIYEOK
+ {0x8355, 0xAE17}, //377 #HANGUL SYLLABLE KIYEOK YI KIYEOKSIOS
+ {0x8356, 0xAE18}, //378 #HANGUL SYLLABLE KIYEOK YI NIEUN
+ {0x8357, 0xAE19}, //379 #HANGUL SYLLABLE KIYEOK YI NIEUNCIEUC
+ {0x8358, 0xAE1A}, //380 #HANGUL SYLLABLE KIYEOK YI NIEUNHIEUH
+ {0x8359, 0xAE1B}, //381 #HANGUL SYLLABLE KIYEOK YI TIKEUT
+ {0x835A, 0xAE1C}, //382 #HANGUL SYLLABLE KIYEOK YI RIEUL
+ {0x8361, 0xAE1D}, //383 #HANGUL SYLLABLE KIYEOK YI RIEULKIYEOK
+ {0x8362, 0xAE1E}, //384 #HANGUL SYLLABLE KIYEOK YI RIEULMIEUM
+ {0x8363, 0xAE1F}, //385 #HANGUL SYLLABLE KIYEOK YI RIEULPIEUP
+ {0x8364, 0xAE20}, //386 #HANGUL SYLLABLE KIYEOK YI RIEULSIOS
+ {0x8365, 0xAE21}, //387 #HANGUL SYLLABLE KIYEOK YI RIEULTHIEUTH
+ {0x8366, 0xAE22}, //388 #HANGUL SYLLABLE KIYEOK YI RIEULPHIEUPH
+ {0x8367, 0xAE23}, //389 #HANGUL SYLLABLE KIYEOK YI RIEULHIEUH
+ {0x8368, 0xAE24}, //390 #HANGUL SYLLABLE KIYEOK YI MIEUM
+ {0x8369, 0xAE25}, //391 #HANGUL SYLLABLE KIYEOK YI PIEUP
+ {0x836A, 0xAE26}, //392 #HANGUL SYLLABLE KIYEOK YI PIEUPSIOS
+ {0x836B, 0xAE27}, //393 #HANGUL SYLLABLE KIYEOK YI SIOS
+ {0x836C, 0xAE28}, //394 #HANGUL SYLLABLE KIYEOK YI SSANGSIOS
+ {0x836D, 0xAE29}, //395 #HANGUL SYLLABLE KIYEOK YI IEUNG
+ {0x836E, 0xAE2A}, //396 #HANGUL SYLLABLE KIYEOK YI CIEUC
+ {0x836F, 0xAE2B}, //397 #HANGUL SYLLABLE KIYEOK YI CHIEUCH
+ {0x8370, 0xAE2C}, //398 #HANGUL SYLLABLE KIYEOK YI KHIEUKH
+ {0x8371, 0xAE2D}, //399 #HANGUL SYLLABLE KIYEOK YI THIEUTH
+ {0x8372, 0xAE2E}, //400 #HANGUL SYLLABLE KIYEOK YI PHIEUPH
+ {0x8373, 0xAE2F}, //401 #HANGUL SYLLABLE KIYEOK YI HIEUH
+ {0x8374, 0xAE32}, //402 #HANGUL SYLLABLE KIYEOK I SSANGKIYEOK
+ {0x8375, 0xAE33}, //403 #HANGUL SYLLABLE KIYEOK I KIYEOKSIOS
+ {0x8376, 0xAE35}, //404 #HANGUL SYLLABLE KIYEOK I NIEUNCIEUC
+ {0x8377, 0xAE36}, //405 #HANGUL SYLLABLE KIYEOK I NIEUNHIEUH
+ {0x8378, 0xAE39}, //406 #HANGUL SYLLABLE KIYEOK I RIEULKIYEOK
+ {0x8379, 0xAE3B}, //407 #HANGUL SYLLABLE KIYEOK I RIEULPIEUP
+ {0x837A, 0xAE3C}, //408 #HANGUL SYLLABLE KIYEOK I RIEULSIOS
+ {0x8381, 0xAE3D}, //409 #HANGUL SYLLABLE KIYEOK I RIEULTHIEUTH
+ {0x8382, 0xAE3E}, //410 #HANGUL SYLLABLE KIYEOK I RIEULPHIEUPH
+ {0x8383, 0xAE3F}, //411 #HANGUL SYLLABLE KIYEOK I RIEULHIEUH
+ {0x8384, 0xAE42}, //412 #HANGUL SYLLABLE KIYEOK I PIEUPSIOS
+ {0x8385, 0xAE44}, //413 #HANGUL SYLLABLE KIYEOK I SSANGSIOS
+ {0x8386, 0xAE47}, //414 #HANGUL SYLLABLE KIYEOK I CHIEUCH
+ {0x8387, 0xAE48}, //415 #HANGUL SYLLABLE KIYEOK I KHIEUKH
+ {0x8388, 0xAE49}, //416 #HANGUL SYLLABLE KIYEOK I THIEUTH
+ {0x8389, 0xAE4B}, //417 #HANGUL SYLLABLE KIYEOK I HIEUH
+ {0x838A, 0xAE4F}, //418 #HANGUL SYLLABLE SSANGKIYEOK A KIYEOKSIOS
+ {0x838B, 0xAE51}, //419 #HANGUL SYLLABLE SSANGKIYEOK A NIEUNCIEUC
+ {0x838C, 0xAE52}, //420 #HANGUL SYLLABLE SSANGKIYEOK A NIEUNHIEUH
+ {0x838D, 0xAE53}, //421 #HANGUL SYLLABLE SSANGKIYEOK A TIKEUT
+ {0x838E, 0xAE55}, //422 #HANGUL SYLLABLE SSANGKIYEOK A RIEULKIYEOK
+ {0x838F, 0xAE57}, //423 #HANGUL SYLLABLE SSANGKIYEOK A RIEULPIEUP
+ {0x8390, 0xAE58}, //424 #HANGUL SYLLABLE SSANGKIYEOK A RIEULSIOS
+ {0x8391, 0xAE59}, //425 #HANGUL SYLLABLE SSANGKIYEOK A RIEULTHIEUTH
+ {0x8392, 0xAE5A}, //426 #HANGUL SYLLABLE SSANGKIYEOK A RIEULPHIEUPH
+ {0x8393, 0xAE5B}, //427 #HANGUL SYLLABLE SSANGKIYEOK A RIEULHIEUH
+ {0x8394, 0xAE5E}, //428 #HANGUL SYLLABLE SSANGKIYEOK A PIEUPSIOS
+ {0x8395, 0xAE62}, //429 #HANGUL SYLLABLE SSANGKIYEOK A CIEUC
+ {0x8396, 0xAE63}, //430 #HANGUL SYLLABLE SSANGKIYEOK A CHIEUCH
+ {0x8397, 0xAE64}, //431 #HANGUL SYLLABLE SSANGKIYEOK A KHIEUKH
+ {0x8398, 0xAE66}, //432 #HANGUL SYLLABLE SSANGKIYEOK A PHIEUPH
+ {0x8399, 0xAE67}, //433 #HANGUL SYLLABLE SSANGKIYEOK A HIEUH
+ {0x839A, 0xAE6A}, //434 #HANGUL SYLLABLE SSANGKIYEOK AE SSANGKIYEOK
+ {0x839B, 0xAE6B}, //435 #HANGUL SYLLABLE SSANGKIYEOK AE KIYEOKSIOS
+ {0x839C, 0xAE6D}, //436 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUNCIEUC
+ {0x839D, 0xAE6E}, //437 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUNHIEUH
+ {0x839E, 0xAE6F}, //438 #HANGUL SYLLABLE SSANGKIYEOK AE TIKEUT
+ {0x839F, 0xAE71}, //439 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULKIYEOK
+ {0x83A0, 0xAE72}, //440 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULMIEUM
+ {0x83A1, 0xAE73}, //441 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULPIEUP
+ {0x83A2, 0xAE74}, //442 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULSIOS
+ {0x83A3, 0xAE75}, //443 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULTHIEUTH
+ {0x83A4, 0xAE76}, //444 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULPHIEUPH
+ {0x83A5, 0xAE77}, //445 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULHIEUH
+ {0x83A6, 0xAE7A}, //446 #HANGUL SYLLABLE SSANGKIYEOK AE PIEUPSIOS
+ {0x83A7, 0xAE7E}, //447 #HANGUL SYLLABLE SSANGKIYEOK AE CIEUC
+ {0x83A8, 0xAE7F}, //448 #HANGUL SYLLABLE SSANGKIYEOK AE CHIEUCH
+ {0x83A9, 0xAE80}, //449 #HANGUL SYLLABLE SSANGKIYEOK AE KHIEUKH
+ {0x83AA, 0xAE81}, //450 #HANGUL SYLLABLE SSANGKIYEOK AE THIEUTH
+ {0x83AB, 0xAE82}, //451 #HANGUL SYLLABLE SSANGKIYEOK AE PHIEUPH
+ {0x83AC, 0xAE83}, //452 #HANGUL SYLLABLE SSANGKIYEOK AE HIEUH
+ {0x83AD, 0xAE86}, //453 #HANGUL SYLLABLE SSANGKIYEOK YA SSANGKIYEOK
+ {0x83AE, 0xAE87}, //454 #HANGUL SYLLABLE SSANGKIYEOK YA KIYEOKSIOS
+ {0x83AF, 0xAE88}, //455 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUN
+ {0x83B0, 0xAE89}, //456 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUNCIEUC
+ {0x83B1, 0xAE8A}, //457 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUNHIEUH
+ {0x83B2, 0xAE8B}, //458 #HANGUL SYLLABLE SSANGKIYEOK YA TIKEUT
+ {0x83B3, 0xAE8D}, //459 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULKIYEOK
+ {0x83B4, 0xAE8E}, //460 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULMIEUM
+ {0x83B5, 0xAE8F}, //461 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULPIEUP
+ {0x83B6, 0xAE90}, //462 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULSIOS
+ {0x83B7, 0xAE91}, //463 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULTHIEUTH
+ {0x83B8, 0xAE92}, //464 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULPHIEUPH
+ {0x83B9, 0xAE93}, //465 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULHIEUH
+ {0x83BA, 0xAE94}, //466 #HANGUL SYLLABLE SSANGKIYEOK YA MIEUM
+ {0x83BB, 0xAE95}, //467 #HANGUL SYLLABLE SSANGKIYEOK YA PIEUP
+ {0x83BC, 0xAE96}, //468 #HANGUL SYLLABLE SSANGKIYEOK YA PIEUPSIOS
+ {0x83BD, 0xAE97}, //469 #HANGUL SYLLABLE SSANGKIYEOK YA SIOS
+ {0x83BE, 0xAE98}, //470 #HANGUL SYLLABLE SSANGKIYEOK YA SSANGSIOS
+ {0x83BF, 0xAE99}, //471 #HANGUL SYLLABLE SSANGKIYEOK YA IEUNG
+ {0x83C0, 0xAE9A}, //472 #HANGUL SYLLABLE SSANGKIYEOK YA CIEUC
+ {0x83C1, 0xAE9B}, //473 #HANGUL SYLLABLE SSANGKIYEOK YA CHIEUCH
+ {0x83C2, 0xAE9C}, //474 #HANGUL SYLLABLE SSANGKIYEOK YA KHIEUKH
+ {0x83C3, 0xAE9D}, //475 #HANGUL SYLLABLE SSANGKIYEOK YA THIEUTH
+ {0x83C4, 0xAE9E}, //476 #HANGUL SYLLABLE SSANGKIYEOK YA PHIEUPH
+ {0x83C5, 0xAE9F}, //477 #HANGUL SYLLABLE SSANGKIYEOK YA HIEUH
+ {0x83C6, 0xAEA0}, //478 #HANGUL SYLLABLE SSANGKIYEOK YAE
+ {0x83C7, 0xAEA1}, //479 #HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOK
+ {0x83C8, 0xAEA2}, //480 #HANGUL SYLLABLE SSANGKIYEOK YAE SSANGKIYEOK
+ {0x83C9, 0xAEA3}, //481 #HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOKSIOS
+ {0x83CA, 0xAEA4}, //482 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUN
+ {0x83CB, 0xAEA5}, //483 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNCIEUC
+ {0x83CC, 0xAEA6}, //484 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNHIEUH
+ {0x83CD, 0xAEA7}, //485 #HANGUL SYLLABLE SSANGKIYEOK YAE TIKEUT
+ {0x83CE, 0xAEA8}, //486 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEUL
+ {0x83CF, 0xAEA9}, //487 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULKIYEOK
+ {0x83D0, 0xAEAA}, //488 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULMIEUM
+ {0x83D1, 0xAEAB}, //489 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPIEUP
+ {0x83D2, 0xAEAC}, //490 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULSIOS
+ {0x83D3, 0xAEAD}, //491 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULTHIEUTH
+ {0x83D4, 0xAEAE}, //492 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPHIEUPH
+ {0x83D5, 0xAEAF}, //493 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULHIEUH
+ {0x83D6, 0xAEB0}, //494 #HANGUL SYLLABLE SSANGKIYEOK YAE MIEUM
+ {0x83D7, 0xAEB1}, //495 #HANGUL SYLLABLE SSANGKIYEOK YAE PIEUP
+ {0x83D8, 0xAEB2}, //496 #HANGUL SYLLABLE SSANGKIYEOK YAE PIEUPSIOS
+ {0x83D9, 0xAEB3}, //497 #HANGUL SYLLABLE SSANGKIYEOK YAE SIOS
+ {0x83DA, 0xAEB4}, //498 #HANGUL SYLLABLE SSANGKIYEOK YAE SSANGSIOS
+ {0x83DB, 0xAEB5}, //499 #HANGUL SYLLABLE SSANGKIYEOK YAE IEUNG
+ {0x83DC, 0xAEB6}, //500 #HANGUL SYLLABLE SSANGKIYEOK YAE CIEUC
+ {0x83DD, 0xAEB7}, //501 #HANGUL SYLLABLE SSANGKIYEOK YAE CHIEUCH
+ {0x83DE, 0xAEB8}, //502 #HANGUL SYLLABLE SSANGKIYEOK YAE KHIEUKH
+ {0x83DF, 0xAEB9}, //503 #HANGUL SYLLABLE SSANGKIYEOK YAE THIEUTH
+ {0x83E0, 0xAEBA}, //504 #HANGUL SYLLABLE SSANGKIYEOK YAE PHIEUPH
+ {0x83E1, 0xAEBB}, //505 #HANGUL SYLLABLE SSANGKIYEOK YAE HIEUH
+ {0x83E2, 0xAEBF}, //506 #HANGUL SYLLABLE SSANGKIYEOK EO KIYEOKSIOS
+ {0x83E3, 0xAEC1}, //507 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUNCIEUC
+ {0x83E4, 0xAEC2}, //508 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUNHIEUH
+ {0x83E5, 0xAEC3}, //509 #HANGUL SYLLABLE SSANGKIYEOK EO TIKEUT
+ {0x83E6, 0xAEC5}, //510 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULKIYEOK
+ {0x83E7, 0xAEC6}, //511 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULMIEUM
+ {0x83E8, 0xAEC7}, //512 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULPIEUP
+ {0x83E9, 0xAEC8}, //513 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULSIOS
+ {0x83EA, 0xAEC9}, //514 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULTHIEUTH
+ {0x83EB, 0xAECA}, //515 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULPHIEUPH
+ {0x83EC, 0xAECB}, //516 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULHIEUH
+ {0x83ED, 0xAECE}, //517 #HANGUL SYLLABLE SSANGKIYEOK EO PIEUPSIOS
+ {0x83EE, 0xAED2}, //518 #HANGUL SYLLABLE SSANGKIYEOK EO CIEUC
+ {0x83EF, 0xAED3}, //519 #HANGUL SYLLABLE SSANGKIYEOK EO CHIEUCH
+ {0x83F0, 0xAED4}, //520 #HANGUL SYLLABLE SSANGKIYEOK EO KHIEUKH
+ {0x83F1, 0xAED5}, //521 #HANGUL SYLLABLE SSANGKIYEOK EO THIEUTH
+ {0x83F2, 0xAED6}, //522 #HANGUL SYLLABLE SSANGKIYEOK EO PHIEUPH
+ {0x83F3, 0xAED7}, //523 #HANGUL SYLLABLE SSANGKIYEOK EO HIEUH
+ {0x83F4, 0xAEDA}, //524 #HANGUL SYLLABLE SSANGKIYEOK E SSANGKIYEOK
+ {0x83F5, 0xAEDB}, //525 #HANGUL SYLLABLE SSANGKIYEOK E KIYEOKSIOS
+ {0x83F6, 0xAEDD}, //526 #HANGUL SYLLABLE SSANGKIYEOK E NIEUNCIEUC
+ {0x83F7, 0xAEDE}, //527 #HANGUL SYLLABLE SSANGKIYEOK E NIEUNHIEUH
+ {0x83F8, 0xAEDF}, //528 #HANGUL SYLLABLE SSANGKIYEOK E TIKEUT
+ {0x83F9, 0xAEE0}, //529 #HANGUL SYLLABLE SSANGKIYEOK E RIEUL
+ {0x83FA, 0xAEE1}, //530 #HANGUL SYLLABLE SSANGKIYEOK E RIEULKIYEOK
+ {0x83FB, 0xAEE2}, //531 #HANGUL SYLLABLE SSANGKIYEOK E RIEULMIEUM
+ {0x83FC, 0xAEE3}, //532 #HANGUL SYLLABLE SSANGKIYEOK E RIEULPIEUP
+ {0x83FD, 0xAEE4}, //533 #HANGUL SYLLABLE SSANGKIYEOK E RIEULSIOS
+ {0x83FE, 0xAEE5}, //534 #HANGUL SYLLABLE SSANGKIYEOK E RIEULTHIEUTH
+ {0x8441, 0xAEE6}, //535 #HANGUL SYLLABLE SSANGKIYEOK E RIEULPHIEUPH
+ {0x8442, 0xAEE7}, //536 #HANGUL SYLLABLE SSANGKIYEOK E RIEULHIEUH
+ {0x8443, 0xAEE9}, //537 #HANGUL SYLLABLE SSANGKIYEOK E PIEUP
+ {0x8444, 0xAEEA}, //538 #HANGUL SYLLABLE SSANGKIYEOK E PIEUPSIOS
+ {0x8445, 0xAEEC}, //539 #HANGUL SYLLABLE SSANGKIYEOK E SSANGSIOS
+ {0x8446, 0xAEEE}, //540 #HANGUL SYLLABLE SSANGKIYEOK E CIEUC
+ {0x8447, 0xAEEF}, //541 #HANGUL SYLLABLE SSANGKIYEOK E CHIEUCH
+ {0x8448, 0xAEF0}, //542 #HANGUL SYLLABLE SSANGKIYEOK E KHIEUKH
+ {0x8449, 0xAEF1}, //543 #HANGUL SYLLABLE SSANGKIYEOK E THIEUTH
+ {0x844A, 0xAEF2}, //544 #HANGUL SYLLABLE SSANGKIYEOK E PHIEUPH
+ {0x844B, 0xAEF3}, //545 #HANGUL SYLLABLE SSANGKIYEOK E HIEUH
+ {0x844C, 0xAEF5}, //546 #HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOK
+ {0x844D, 0xAEF6}, //547 #HANGUL SYLLABLE SSANGKIYEOK YEO SSANGKIYEOK
+ {0x844E, 0xAEF7}, //548 #HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOKSIOS
+ {0x844F, 0xAEF9}, //549 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNCIEUC
+ {0x8450, 0xAEFA}, //550 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNHIEUH
+ {0x8451, 0xAEFB}, //551 #HANGUL SYLLABLE SSANGKIYEOK YEO TIKEUT
+ {0x8452, 0xAEFD}, //552 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULKIYEOK
+ {0x8453, 0xAEFE}, //553 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULMIEUM
+ {0x8454, 0xAEFF}, //554 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPIEUP
+ {0x8455, 0xAF00}, //555 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULSIOS
+ {0x8456, 0xAF01}, //556 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULTHIEUTH
+ {0x8457, 0xAF02}, //557 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPHIEUPH
+ {0x8458, 0xAF03}, //558 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULHIEUH
+ {0x8459, 0xAF04}, //559 #HANGUL SYLLABLE SSANGKIYEOK YEO MIEUM
+ {0x845A, 0xAF05}, //560 #HANGUL SYLLABLE SSANGKIYEOK YEO PIEUP
+ {0x8461, 0xAF06}, //561 #HANGUL SYLLABLE SSANGKIYEOK YEO PIEUPSIOS
+ {0x8462, 0xAF09}, //562 #HANGUL SYLLABLE SSANGKIYEOK YEO IEUNG
+ {0x8463, 0xAF0A}, //563 #HANGUL SYLLABLE SSANGKIYEOK YEO CIEUC
+ {0x8464, 0xAF0B}, //564 #HANGUL SYLLABLE SSANGKIYEOK YEO CHIEUCH
+ {0x8465, 0xAF0C}, //565 #HANGUL SYLLABLE SSANGKIYEOK YEO KHIEUKH
+ {0x8466, 0xAF0E}, //566 #HANGUL SYLLABLE SSANGKIYEOK YEO PHIEUPH
+ {0x8467, 0xAF0F}, //567 #HANGUL SYLLABLE SSANGKIYEOK YEO HIEUH
+ {0x8468, 0xAF11}, //568 #HANGUL SYLLABLE SSANGKIYEOK YE KIYEOK
+ {0x8469, 0xAF12}, //569 #HANGUL SYLLABLE SSANGKIYEOK YE SSANGKIYEOK
+ {0x846A, 0xAF13}, //570 #HANGUL SYLLABLE SSANGKIYEOK YE KIYEOKSIOS
+ {0x846B, 0xAF14}, //571 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUN
+ {0x846C, 0xAF15}, //572 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUNCIEUC
+ {0x846D, 0xAF16}, //573 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUNHIEUH
+ {0x846E, 0xAF17}, //574 #HANGUL SYLLABLE SSANGKIYEOK YE TIKEUT
+ {0x846F, 0xAF18}, //575 #HANGUL SYLLABLE SSANGKIYEOK YE RIEUL
+ {0x8470, 0xAF19}, //576 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULKIYEOK
+ {0x8471, 0xAF1A}, //577 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULMIEUM
+ {0x8472, 0xAF1B}, //578 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULPIEUP
+ {0x8473, 0xAF1C}, //579 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULSIOS
+ {0x8474, 0xAF1D}, //580 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULTHIEUTH
+ {0x8475, 0xAF1E}, //581 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULPHIEUPH
+ {0x8476, 0xAF1F}, //582 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULHIEUH
+ {0x8477, 0xAF20}, //583 #HANGUL SYLLABLE SSANGKIYEOK YE MIEUM
+ {0x8478, 0xAF21}, //584 #HANGUL SYLLABLE SSANGKIYEOK YE PIEUP
+ {0x8479, 0xAF22}, //585 #HANGUL SYLLABLE SSANGKIYEOK YE PIEUPSIOS
+ {0x847A, 0xAF23}, //586 #HANGUL SYLLABLE SSANGKIYEOK YE SIOS
+ {0x8481, 0xAF24}, //587 #HANGUL SYLLABLE SSANGKIYEOK YE SSANGSIOS
+ {0x8482, 0xAF25}, //588 #HANGUL SYLLABLE SSANGKIYEOK YE IEUNG
+ {0x8483, 0xAF26}, //589 #HANGUL SYLLABLE SSANGKIYEOK YE CIEUC
+ {0x8484, 0xAF27}, //590 #HANGUL SYLLABLE SSANGKIYEOK YE CHIEUCH
+ {0x8485, 0xAF28}, //591 #HANGUL SYLLABLE SSANGKIYEOK YE KHIEUKH
+ {0x8486, 0xAF29}, //592 #HANGUL SYLLABLE SSANGKIYEOK YE THIEUTH
+ {0x8487, 0xAF2A}, //593 #HANGUL SYLLABLE SSANGKIYEOK YE PHIEUPH
+ {0x8488, 0xAF2B}, //594 #HANGUL SYLLABLE SSANGKIYEOK YE HIEUH
+ {0x8489, 0xAF2E}, //595 #HANGUL SYLLABLE SSANGKIYEOK O SSANGKIYEOK
+ {0x848A, 0xAF2F}, //596 #HANGUL SYLLABLE SSANGKIYEOK O KIYEOKSIOS
+ {0x848B, 0xAF31}, //597 #HANGUL SYLLABLE SSANGKIYEOK O NIEUNCIEUC
+ {0x848C, 0xAF33}, //598 #HANGUL SYLLABLE SSANGKIYEOK O TIKEUT
+ {0x848D, 0xAF35}, //599 #HANGUL SYLLABLE SSANGKIYEOK O RIEULKIYEOK
+ {0x848E, 0xAF36}, //600 #HANGUL SYLLABLE SSANGKIYEOK O RIEULMIEUM
+ {0x848F, 0xAF37}, //601 #HANGUL SYLLABLE SSANGKIYEOK O RIEULPIEUP
+ {0x8490, 0xAF38}, //602 #HANGUL SYLLABLE SSANGKIYEOK O RIEULSIOS
+ {0x8491, 0xAF39}, //603 #HANGUL SYLLABLE SSANGKIYEOK O RIEULTHIEUTH
+ {0x8492, 0xAF3A}, //604 #HANGUL SYLLABLE SSANGKIYEOK O RIEULPHIEUPH
+ {0x8493, 0xAF3B}, //605 #HANGUL SYLLABLE SSANGKIYEOK O RIEULHIEUH
+ {0x8494, 0xAF3E}, //606 #HANGUL SYLLABLE SSANGKIYEOK O PIEUPSIOS
+ {0x8495, 0xAF40}, //607 #HANGUL SYLLABLE SSANGKIYEOK O SSANGSIOS
+ {0x8496, 0xAF44}, //608 #HANGUL SYLLABLE SSANGKIYEOK O KHIEUKH
+ {0x8497, 0xAF45}, //609 #HANGUL SYLLABLE SSANGKIYEOK O THIEUTH
+ {0x8498, 0xAF46}, //610 #HANGUL SYLLABLE SSANGKIYEOK O PHIEUPH
+ {0x8499, 0xAF47}, //611 #HANGUL SYLLABLE SSANGKIYEOK O HIEUH
+ {0x849A, 0xAF4A}, //612 #HANGUL SYLLABLE SSANGKIYEOK WA SSANGKIYEOK
+ {0x849B, 0xAF4B}, //613 #HANGUL SYLLABLE SSANGKIYEOK WA KIYEOKSIOS
+ {0x849C, 0xAF4C}, //614 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUN
+ {0x849D, 0xAF4D}, //615 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUNCIEUC
+ {0x849E, 0xAF4E}, //616 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUNHIEUH
+ {0x849F, 0xAF4F}, //617 #HANGUL SYLLABLE SSANGKIYEOK WA TIKEUT
+ {0x84A0, 0xAF51}, //618 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULKIYEOK
+ {0x84A1, 0xAF52}, //619 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULMIEUM
+ {0x84A2, 0xAF53}, //620 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULPIEUP
+ {0x84A3, 0xAF54}, //621 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULSIOS
+ {0x84A4, 0xAF55}, //622 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULTHIEUTH
+ {0x84A5, 0xAF56}, //623 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULPHIEUPH
+ {0x84A6, 0xAF57}, //624 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULHIEUH
+ {0x84A7, 0xAF58}, //625 #HANGUL SYLLABLE SSANGKIYEOK WA MIEUM
+ {0x84A8, 0xAF59}, //626 #HANGUL SYLLABLE SSANGKIYEOK WA PIEUP
+ {0x84A9, 0xAF5A}, //627 #HANGUL SYLLABLE SSANGKIYEOK WA PIEUPSIOS
+ {0x84AA, 0xAF5B}, //628 #HANGUL SYLLABLE SSANGKIYEOK WA SIOS
+ {0x84AB, 0xAF5E}, //629 #HANGUL SYLLABLE SSANGKIYEOK WA CIEUC
+ {0x84AC, 0xAF5F}, //630 #HANGUL SYLLABLE SSANGKIYEOK WA CHIEUCH
+ {0x84AD, 0xAF60}, //631 #HANGUL SYLLABLE SSANGKIYEOK WA KHIEUKH
+ {0x84AE, 0xAF61}, //632 #HANGUL SYLLABLE SSANGKIYEOK WA THIEUTH
+ {0x84AF, 0xAF62}, //633 #HANGUL SYLLABLE SSANGKIYEOK WA PHIEUPH
+ {0x84B0, 0xAF63}, //634 #HANGUL SYLLABLE SSANGKIYEOK WA HIEUH
+ {0x84B1, 0xAF66}, //635 #HANGUL SYLLABLE SSANGKIYEOK WAE SSANGKIYEOK
+ {0x84B2, 0xAF67}, //636 #HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOKSIOS
+ {0x84B3, 0xAF68}, //637 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUN
+ {0x84B4, 0xAF69}, //638 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNCIEUC
+ {0x84B5, 0xAF6A}, //639 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNHIEUH
+ {0x84B6, 0xAF6B}, //640 #HANGUL SYLLABLE SSANGKIYEOK WAE TIKEUT
+ {0x84B7, 0xAF6C}, //641 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEUL
+ {0x84B8, 0xAF6D}, //642 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULKIYEOK
+ {0x84B9, 0xAF6E}, //643 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULMIEUM
+ {0x84BA, 0xAF6F}, //644 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPIEUP
+ {0x84BB, 0xAF70}, //645 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULSIOS
+ {0x84BC, 0xAF71}, //646 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULTHIEUTH
+ {0x84BD, 0xAF72}, //647 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPHIEUPH
+ {0x84BE, 0xAF73}, //648 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULHIEUH
+ {0x84BF, 0xAF74}, //649 #HANGUL SYLLABLE SSANGKIYEOK WAE MIEUM
+ {0x84C0, 0xAF75}, //650 #HANGUL SYLLABLE SSANGKIYEOK WAE PIEUP
+ {0x84C1, 0xAF76}, //651 #HANGUL SYLLABLE SSANGKIYEOK WAE PIEUPSIOS
+ {0x84C2, 0xAF77}, //652 #HANGUL SYLLABLE SSANGKIYEOK WAE SIOS
+ {0x84C3, 0xAF78}, //653 #HANGUL SYLLABLE SSANGKIYEOK WAE SSANGSIOS
+ {0x84C4, 0xAF7A}, //654 #HANGUL SYLLABLE SSANGKIYEOK WAE CIEUC
+ {0x84C5, 0xAF7B}, //655 #HANGUL SYLLABLE SSANGKIYEOK WAE CHIEUCH
+ {0x84C6, 0xAF7C}, //656 #HANGUL SYLLABLE SSANGKIYEOK WAE KHIEUKH
+ {0x84C7, 0xAF7D}, //657 #HANGUL SYLLABLE SSANGKIYEOK WAE THIEUTH
+ {0x84C8, 0xAF7E}, //658 #HANGUL SYLLABLE SSANGKIYEOK WAE PHIEUPH
+ {0x84C9, 0xAF7F}, //659 #HANGUL SYLLABLE SSANGKIYEOK WAE HIEUH
+ {0x84CA, 0xAF81}, //660 #HANGUL SYLLABLE SSANGKIYEOK OE KIYEOK
+ {0x84CB, 0xAF82}, //661 #HANGUL SYLLABLE SSANGKIYEOK OE SSANGKIYEOK
+ {0x84CC, 0xAF83}, //662 #HANGUL SYLLABLE SSANGKIYEOK OE KIYEOKSIOS
+ {0x84CD, 0xAF85}, //663 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUNCIEUC
+ {0x84CE, 0xAF86}, //664 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUNHIEUH
+ {0x84CF, 0xAF87}, //665 #HANGUL SYLLABLE SSANGKIYEOK OE TIKEUT
+ {0x84D0, 0xAF89}, //666 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULKIYEOK
+ {0x84D1, 0xAF8A}, //667 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULMIEUM
+ {0x84D2, 0xAF8B}, //668 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULPIEUP
+ {0x84D3, 0xAF8C}, //669 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULSIOS
+ {0x84D4, 0xAF8D}, //670 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULTHIEUTH
+ {0x84D5, 0xAF8E}, //671 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULPHIEUPH
+ {0x84D6, 0xAF8F}, //672 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULHIEUH
+ {0x84D7, 0xAF92}, //673 #HANGUL SYLLABLE SSANGKIYEOK OE PIEUPSIOS
+ {0x84D8, 0xAF93}, //674 #HANGUL SYLLABLE SSANGKIYEOK OE SIOS
+ {0x84D9, 0xAF94}, //675 #HANGUL SYLLABLE SSANGKIYEOK OE SSANGSIOS
+ {0x84DA, 0xAF96}, //676 #HANGUL SYLLABLE SSANGKIYEOK OE CIEUC
+ {0x84DB, 0xAF97}, //677 #HANGUL SYLLABLE SSANGKIYEOK OE CHIEUCH
+ {0x84DC, 0xAF98}, //678 #HANGUL SYLLABLE SSANGKIYEOK OE KHIEUKH
+ {0x84DD, 0xAF99}, //679 #HANGUL SYLLABLE SSANGKIYEOK OE THIEUTH
+ {0x84DE, 0xAF9A}, //680 #HANGUL SYLLABLE SSANGKIYEOK OE PHIEUPH
+ {0x84DF, 0xAF9B}, //681 #HANGUL SYLLABLE SSANGKIYEOK OE HIEUH
+ {0x84E0, 0xAF9D}, //682 #HANGUL SYLLABLE SSANGKIYEOK YO KIYEOK
+ {0x84E1, 0xAF9E}, //683 #HANGUL SYLLABLE SSANGKIYEOK YO SSANGKIYEOK
+ {0x84E2, 0xAF9F}, //684 #HANGUL SYLLABLE SSANGKIYEOK YO KIYEOKSIOS
+ {0x84E3, 0xAFA0}, //685 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUN
+ {0x84E4, 0xAFA1}, //686 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUNCIEUC
+ {0x84E5, 0xAFA2}, //687 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUNHIEUH
+ {0x84E6, 0xAFA3}, //688 #HANGUL SYLLABLE SSANGKIYEOK YO TIKEUT
+ {0x84E7, 0xAFA4}, //689 #HANGUL SYLLABLE SSANGKIYEOK YO RIEUL
+ {0x84E8, 0xAFA5}, //690 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULKIYEOK
+ {0x84E9, 0xAFA6}, //691 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULMIEUM
+ {0x84EA, 0xAFA7}, //692 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULPIEUP
+ {0x84EB, 0xAFA8}, //693 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULSIOS
+ {0x84EC, 0xAFA9}, //694 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULTHIEUTH
+ {0x84ED, 0xAFAA}, //695 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULPHIEUPH
+ {0x84EE, 0xAFAB}, //696 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULHIEUH
+ {0x84EF, 0xAFAC}, //697 #HANGUL SYLLABLE SSANGKIYEOK YO MIEUM
+ {0x84F0, 0xAFAD}, //698 #HANGUL SYLLABLE SSANGKIYEOK YO PIEUP
+ {0x84F1, 0xAFAE}, //699 #HANGUL SYLLABLE SSANGKIYEOK YO PIEUPSIOS
+ {0x84F2, 0xAFAF}, //700 #HANGUL SYLLABLE SSANGKIYEOK YO SIOS
+ {0x84F3, 0xAFB0}, //701 #HANGUL SYLLABLE SSANGKIYEOK YO SSANGSIOS
+ {0x84F4, 0xAFB1}, //702 #HANGUL SYLLABLE SSANGKIYEOK YO IEUNG
+ {0x84F5, 0xAFB2}, //703 #HANGUL SYLLABLE SSANGKIYEOK YO CIEUC
+ {0x84F6, 0xAFB3}, //704 #HANGUL SYLLABLE SSANGKIYEOK YO CHIEUCH
+ {0x84F7, 0xAFB4}, //705 #HANGUL SYLLABLE SSANGKIYEOK YO KHIEUKH
+ {0x84F8, 0xAFB5}, //706 #HANGUL SYLLABLE SSANGKIYEOK YO THIEUTH
+ {0x84F9, 0xAFB6}, //707 #HANGUL SYLLABLE SSANGKIYEOK YO PHIEUPH
+ {0x84FA, 0xAFB7}, //708 #HANGUL SYLLABLE SSANGKIYEOK YO HIEUH
+ {0x84FB, 0xAFBA}, //709 #HANGUL SYLLABLE SSANGKIYEOK U SSANGKIYEOK
+ {0x84FC, 0xAFBB}, //710 #HANGUL SYLLABLE SSANGKIYEOK U KIYEOKSIOS
+ {0x84FD, 0xAFBD}, //711 #HANGUL SYLLABLE SSANGKIYEOK U NIEUNCIEUC
+ {0x84FE, 0xAFBE}, //712 #HANGUL SYLLABLE SSANGKIYEOK U NIEUNHIEUH
+ {0x8541, 0xAFBF}, //713 #HANGUL SYLLABLE SSANGKIYEOK U TIKEUT
+ {0x8542, 0xAFC1}, //714 #HANGUL SYLLABLE SSANGKIYEOK U RIEULKIYEOK
+ {0x8543, 0xAFC2}, //715 #HANGUL SYLLABLE SSANGKIYEOK U RIEULMIEUM
+ {0x8544, 0xAFC3}, //716 #HANGUL SYLLABLE SSANGKIYEOK U RIEULPIEUP
+ {0x8545, 0xAFC4}, //717 #HANGUL SYLLABLE SSANGKIYEOK U RIEULSIOS
+ {0x8546, 0xAFC5}, //718 #HANGUL SYLLABLE SSANGKIYEOK U RIEULTHIEUTH
+ {0x8547, 0xAFC6}, //719 #HANGUL SYLLABLE SSANGKIYEOK U RIEULPHIEUPH
+ {0x8548, 0xAFCA}, //720 #HANGUL SYLLABLE SSANGKIYEOK U PIEUPSIOS
+ {0x8549, 0xAFCC}, //721 #HANGUL SYLLABLE SSANGKIYEOK U SSANGSIOS
+ {0x854A, 0xAFCF}, //722 #HANGUL SYLLABLE SSANGKIYEOK U CHIEUCH
+ {0x854B, 0xAFD0}, //723 #HANGUL SYLLABLE SSANGKIYEOK U KHIEUKH
+ {0x854C, 0xAFD1}, //724 #HANGUL SYLLABLE SSANGKIYEOK U THIEUTH
+ {0x854D, 0xAFD2}, //725 #HANGUL SYLLABLE SSANGKIYEOK U PHIEUPH
+ {0x854E, 0xAFD3}, //726 #HANGUL SYLLABLE SSANGKIYEOK U HIEUH
+ {0x854F, 0xAFD5}, //727 #HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOK
+ {0x8550, 0xAFD6}, //728 #HANGUL SYLLABLE SSANGKIYEOK WEO SSANGKIYEOK
+ {0x8551, 0xAFD7}, //729 #HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOKSIOS
+ {0x8552, 0xAFD8}, //730 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUN
+ {0x8553, 0xAFD9}, //731 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNCIEUC
+ {0x8554, 0xAFDA}, //732 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNHIEUH
+ {0x8555, 0xAFDB}, //733 #HANGUL SYLLABLE SSANGKIYEOK WEO TIKEUT
+ {0x8556, 0xAFDD}, //734 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULKIYEOK
+ {0x8557, 0xAFDE}, //735 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULMIEUM
+ {0x8558, 0xAFDF}, //736 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPIEUP
+ {0x8559, 0xAFE0}, //737 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULSIOS
+ {0x855A, 0xAFE1}, //738 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULTHIEUTH
+ {0x8561, 0xAFE2}, //739 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPHIEUPH
+ {0x8562, 0xAFE3}, //740 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULHIEUH
+ {0x8563, 0xAFE4}, //741 #HANGUL SYLLABLE SSANGKIYEOK WEO MIEUM
+ {0x8564, 0xAFE5}, //742 #HANGUL SYLLABLE SSANGKIYEOK WEO PIEUP
+ {0x8565, 0xAFE6}, //743 #HANGUL SYLLABLE SSANGKIYEOK WEO PIEUPSIOS
+ {0x8566, 0xAFE7}, //744 #HANGUL SYLLABLE SSANGKIYEOK WEO SIOS
+ {0x8567, 0xAFEA}, //745 #HANGUL SYLLABLE SSANGKIYEOK WEO CIEUC
+ {0x8568, 0xAFEB}, //746 #HANGUL SYLLABLE SSANGKIYEOK WEO CHIEUCH
+ {0x8569, 0xAFEC}, //747 #HANGUL SYLLABLE SSANGKIYEOK WEO KHIEUKH
+ {0x856A, 0xAFED}, //748 #HANGUL SYLLABLE SSANGKIYEOK WEO THIEUTH
+ {0x856B, 0xAFEE}, //749 #HANGUL SYLLABLE SSANGKIYEOK WEO PHIEUPH
+ {0x856C, 0xAFEF}, //750 #HANGUL SYLLABLE SSANGKIYEOK WEO HIEUH
+ {0x856D, 0xAFF2}, //751 #HANGUL SYLLABLE SSANGKIYEOK WE SSANGKIYEOK
+ {0x856E, 0xAFF3}, //752 #HANGUL SYLLABLE SSANGKIYEOK WE KIYEOKSIOS
+ {0x856F, 0xAFF5}, //753 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUNCIEUC
+ {0x8570, 0xAFF6}, //754 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUNHIEUH
+ {0x8571, 0xAFF7}, //755 #HANGUL SYLLABLE SSANGKIYEOK WE TIKEUT
+ {0x8572, 0xAFF9}, //756 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULKIYEOK
+ {0x8573, 0xAFFA}, //757 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULMIEUM
+ {0x8574, 0xAFFB}, //758 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULPIEUP
+ {0x8575, 0xAFFC}, //759 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULSIOS
+ {0x8576, 0xAFFD}, //760 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULTHIEUTH
+ {0x8577, 0xAFFE}, //761 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULPHIEUPH
+ {0x8578, 0xAFFF}, //762 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULHIEUH
+ {0x8579, 0xB002}, //763 #HANGUL SYLLABLE SSANGKIYEOK WE PIEUPSIOS
+ {0x857A, 0xB003}, //764 #HANGUL SYLLABLE SSANGKIYEOK WE SIOS
+ {0x8581, 0xB005}, //765 #HANGUL SYLLABLE SSANGKIYEOK WE IEUNG
+ {0x8582, 0xB006}, //766 #HANGUL SYLLABLE SSANGKIYEOK WE CIEUC
+ {0x8583, 0xB007}, //767 #HANGUL SYLLABLE SSANGKIYEOK WE CHIEUCH
+ {0x8584, 0xB008}, //768 #HANGUL SYLLABLE SSANGKIYEOK WE KHIEUKH
+ {0x8585, 0xB009}, //769 #HANGUL SYLLABLE SSANGKIYEOK WE THIEUTH
+ {0x8586, 0xB00A}, //770 #HANGUL SYLLABLE SSANGKIYEOK WE PHIEUPH
+ {0x8587, 0xB00B}, //771 #HANGUL SYLLABLE SSANGKIYEOK WE HIEUH
+ {0x8588, 0xB00D}, //772 #HANGUL SYLLABLE SSANGKIYEOK WI KIYEOK
+ {0x8589, 0xB00E}, //773 #HANGUL SYLLABLE SSANGKIYEOK WI SSANGKIYEOK
+ {0x858A, 0xB00F}, //774 #HANGUL SYLLABLE SSANGKIYEOK WI KIYEOKSIOS
+ {0x858B, 0xB011}, //775 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUNCIEUC
+ {0x858C, 0xB012}, //776 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUNHIEUH
+ {0x858D, 0xB013}, //777 #HANGUL SYLLABLE SSANGKIYEOK WI TIKEUT
+ {0x858E, 0xB015}, //778 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULKIYEOK
+ {0x858F, 0xB016}, //779 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULMIEUM
+ {0x8590, 0xB017}, //780 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULPIEUP
+ {0x8591, 0xB018}, //781 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULSIOS
+ {0x8592, 0xB019}, //782 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULTHIEUTH
+ {0x8593, 0xB01A}, //783 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULPHIEUPH
+ {0x8594, 0xB01B}, //784 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULHIEUH
+ {0x8595, 0xB01E}, //785 #HANGUL SYLLABLE SSANGKIYEOK WI PIEUPSIOS
+ {0x8596, 0xB01F}, //786 #HANGUL SYLLABLE SSANGKIYEOK WI SIOS
+ {0x8597, 0xB020}, //787 #HANGUL SYLLABLE SSANGKIYEOK WI SSANGSIOS
+ {0x8598, 0xB021}, //788 #HANGUL SYLLABLE SSANGKIYEOK WI IEUNG
+ {0x8599, 0xB022}, //789 #HANGUL SYLLABLE SSANGKIYEOK WI CIEUC
+ {0x859A, 0xB023}, //790 #HANGUL SYLLABLE SSANGKIYEOK WI CHIEUCH
+ {0x859B, 0xB024}, //791 #HANGUL SYLLABLE SSANGKIYEOK WI KHIEUKH
+ {0x859C, 0xB025}, //792 #HANGUL SYLLABLE SSANGKIYEOK WI THIEUTH
+ {0x859D, 0xB026}, //793 #HANGUL SYLLABLE SSANGKIYEOK WI PHIEUPH
+ {0x859E, 0xB027}, //794 #HANGUL SYLLABLE SSANGKIYEOK WI HIEUH
+ {0x859F, 0xB029}, //795 #HANGUL SYLLABLE SSANGKIYEOK YU KIYEOK
+ {0x85A0, 0xB02A}, //796 #HANGUL SYLLABLE SSANGKIYEOK YU SSANGKIYEOK
+ {0x85A1, 0xB02B}, //797 #HANGUL SYLLABLE SSANGKIYEOK YU KIYEOKSIOS
+ {0x85A2, 0xB02C}, //798 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUN
+ {0x85A3, 0xB02D}, //799 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUNCIEUC
+ {0x85A4, 0xB02E}, //800 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUNHIEUH
+ {0x85A5, 0xB02F}, //801 #HANGUL SYLLABLE SSANGKIYEOK YU TIKEUT
+ {0x85A6, 0xB030}, //802 #HANGUL SYLLABLE SSANGKIYEOK YU RIEUL
+ {0x85A7, 0xB031}, //803 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULKIYEOK
+ {0x85A8, 0xB032}, //804 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULMIEUM
+ {0x85A9, 0xB033}, //805 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULPIEUP
+ {0x85AA, 0xB034}, //806 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULSIOS
+ {0x85AB, 0xB035}, //807 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULTHIEUTH
+ {0x85AC, 0xB036}, //808 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULPHIEUPH
+ {0x85AD, 0xB037}, //809 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULHIEUH
+ {0x85AE, 0xB038}, //810 #HANGUL SYLLABLE SSANGKIYEOK YU MIEUM
+ {0x85AF, 0xB039}, //811 #HANGUL SYLLABLE SSANGKIYEOK YU PIEUP
+ {0x85B0, 0xB03A}, //812 #HANGUL SYLLABLE SSANGKIYEOK YU PIEUPSIOS
+ {0x85B1, 0xB03B}, //813 #HANGUL SYLLABLE SSANGKIYEOK YU SIOS
+ {0x85B2, 0xB03C}, //814 #HANGUL SYLLABLE SSANGKIYEOK YU SSANGSIOS
+ {0x85B3, 0xB03D}, //815 #HANGUL SYLLABLE SSANGKIYEOK YU IEUNG
+ {0x85B4, 0xB03E}, //816 #HANGUL SYLLABLE SSANGKIYEOK YU CIEUC
+ {0x85B5, 0xB03F}, //817 #HANGUL SYLLABLE SSANGKIYEOK YU CHIEUCH
+ {0x85B6, 0xB040}, //818 #HANGUL SYLLABLE SSANGKIYEOK YU KHIEUKH
+ {0x85B7, 0xB041}, //819 #HANGUL SYLLABLE SSANGKIYEOK YU THIEUTH
+ {0x85B8, 0xB042}, //820 #HANGUL SYLLABLE SSANGKIYEOK YU PHIEUPH
+ {0x85B9, 0xB043}, //821 #HANGUL SYLLABLE SSANGKIYEOK YU HIEUH
+ {0x85BA, 0xB046}, //822 #HANGUL SYLLABLE SSANGKIYEOK EU SSANGKIYEOK
+ {0x85BB, 0xB047}, //823 #HANGUL SYLLABLE SSANGKIYEOK EU KIYEOKSIOS
+ {0x85BC, 0xB049}, //824 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUNCIEUC
+ {0x85BD, 0xB04B}, //825 #HANGUL SYLLABLE SSANGKIYEOK EU TIKEUT
+ {0x85BE, 0xB04D}, //826 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULKIYEOK
+ {0x85BF, 0xB04F}, //827 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULPIEUP
+ {0x85C0, 0xB050}, //828 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULSIOS
+ {0x85C1, 0xB051}, //829 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULTHIEUTH
+ {0x85C2, 0xB052}, //830 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULPHIEUPH
+ {0x85C3, 0xB056}, //831 #HANGUL SYLLABLE SSANGKIYEOK EU PIEUPSIOS
+ {0x85C4, 0xB058}, //832 #HANGUL SYLLABLE SSANGKIYEOK EU SSANGSIOS
+ {0x85C5, 0xB05A}, //833 #HANGUL SYLLABLE SSANGKIYEOK EU CIEUC
+ {0x85C6, 0xB05B}, //834 #HANGUL SYLLABLE SSANGKIYEOK EU CHIEUCH
+ {0x85C7, 0xB05C}, //835 #HANGUL SYLLABLE SSANGKIYEOK EU KHIEUKH
+ {0x85C8, 0xB05E}, //836 #HANGUL SYLLABLE SSANGKIYEOK EU PHIEUPH
+ {0x85C9, 0xB05F}, //837 #HANGUL SYLLABLE SSANGKIYEOK EU HIEUH
+ {0x85CA, 0xB060}, //838 #HANGUL SYLLABLE SSANGKIYEOK YI
+ {0x85CB, 0xB061}, //839 #HANGUL SYLLABLE SSANGKIYEOK YI KIYEOK
+ {0x85CC, 0xB062}, //840 #HANGUL SYLLABLE SSANGKIYEOK YI SSANGKIYEOK
+ {0x85CD, 0xB063}, //841 #HANGUL SYLLABLE SSANGKIYEOK YI KIYEOKSIOS
+ {0x85CE, 0xB064}, //842 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUN
+ {0x85CF, 0xB065}, //843 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUNCIEUC
+ {0x85D0, 0xB066}, //844 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUNHIEUH
+ {0x85D1, 0xB067}, //845 #HANGUL SYLLABLE SSANGKIYEOK YI TIKEUT
+ {0x85D2, 0xB068}, //846 #HANGUL SYLLABLE SSANGKIYEOK YI RIEUL
+ {0x85D3, 0xB069}, //847 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULKIYEOK
+ {0x85D4, 0xB06A}, //848 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULMIEUM
+ {0x85D5, 0xB06B}, //849 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULPIEUP
+ {0x85D6, 0xB06C}, //850 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULSIOS
+ {0x85D7, 0xB06D}, //851 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULTHIEUTH
+ {0x85D8, 0xB06E}, //852 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULPHIEUPH
+ {0x85D9, 0xB06F}, //853 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULHIEUH
+ {0x85DA, 0xB070}, //854 #HANGUL SYLLABLE SSANGKIYEOK YI MIEUM
+ {0x85DB, 0xB071}, //855 #HANGUL SYLLABLE SSANGKIYEOK YI PIEUP
+ {0x85DC, 0xB072}, //856 #HANGUL SYLLABLE SSANGKIYEOK YI PIEUPSIOS
+ {0x85DD, 0xB073}, //857 #HANGUL SYLLABLE SSANGKIYEOK YI SIOS
+ {0x85DE, 0xB074}, //858 #HANGUL SYLLABLE SSANGKIYEOK YI SSANGSIOS
+ {0x85DF, 0xB075}, //859 #HANGUL SYLLABLE SSANGKIYEOK YI IEUNG
+ {0x85E0, 0xB076}, //860 #HANGUL SYLLABLE SSANGKIYEOK YI CIEUC
+ {0x85E1, 0xB077}, //861 #HANGUL SYLLABLE SSANGKIYEOK YI CHIEUCH
+ {0x85E2, 0xB078}, //862 #HANGUL SYLLABLE SSANGKIYEOK YI KHIEUKH
+ {0x85E3, 0xB079}, //863 #HANGUL SYLLABLE SSANGKIYEOK YI THIEUTH
+ {0x85E4, 0xB07A}, //864 #HANGUL SYLLABLE SSANGKIYEOK YI PHIEUPH
+ {0x85E5, 0xB07B}, //865 #HANGUL SYLLABLE SSANGKIYEOK YI HIEUH
+ {0x85E6, 0xB07E}, //866 #HANGUL SYLLABLE SSANGKIYEOK I SSANGKIYEOK
+ {0x85E7, 0xB07F}, //867 #HANGUL SYLLABLE SSANGKIYEOK I KIYEOKSIOS
+ {0x85E8, 0xB081}, //868 #HANGUL SYLLABLE SSANGKIYEOK I NIEUNCIEUC
+ {0x85E9, 0xB082}, //869 #HANGUL SYLLABLE SSANGKIYEOK I NIEUNHIEUH
+ {0x85EA, 0xB083}, //870 #HANGUL SYLLABLE SSANGKIYEOK I TIKEUT
+ {0x85EB, 0xB085}, //871 #HANGUL SYLLABLE SSANGKIYEOK I RIEULKIYEOK
+ {0x85EC, 0xB086}, //872 #HANGUL SYLLABLE SSANGKIYEOK I RIEULMIEUM
+ {0x85ED, 0xB087}, //873 #HANGUL SYLLABLE SSANGKIYEOK I RIEULPIEUP
+ {0x85EE, 0xB088}, //874 #HANGUL SYLLABLE SSANGKIYEOK I RIEULSIOS
+ {0x85EF, 0xB089}, //875 #HANGUL SYLLABLE SSANGKIYEOK I RIEULTHIEUTH
+ {0x85F0, 0xB08A}, //876 #HANGUL SYLLABLE SSANGKIYEOK I RIEULPHIEUPH
+ {0x85F1, 0xB08B}, //877 #HANGUL SYLLABLE SSANGKIYEOK I RIEULHIEUH
+ {0x85F2, 0xB08E}, //878 #HANGUL SYLLABLE SSANGKIYEOK I PIEUPSIOS
+ {0x85F3, 0xB090}, //879 #HANGUL SYLLABLE SSANGKIYEOK I SSANGSIOS
+ {0x85F4, 0xB092}, //880 #HANGUL SYLLABLE SSANGKIYEOK I CIEUC
+ {0x85F5, 0xB093}, //881 #HANGUL SYLLABLE SSANGKIYEOK I CHIEUCH
+ {0x85F6, 0xB094}, //882 #HANGUL SYLLABLE SSANGKIYEOK I KHIEUKH
+ {0x85F7, 0xB095}, //883 #HANGUL SYLLABLE SSANGKIYEOK I THIEUTH
+ {0x85F8, 0xB096}, //884 #HANGUL SYLLABLE SSANGKIYEOK I PHIEUPH
+ {0x85F9, 0xB097}, //885 #HANGUL SYLLABLE SSANGKIYEOK I HIEUH
+ {0x85FA, 0xB09B}, //886 #HANGUL SYLLABLE NIEUN A KIYEOKSIOS
+ {0x85FB, 0xB09D}, //887 #HANGUL SYLLABLE NIEUN A NIEUNCIEUC
+ {0x85FC, 0xB09E}, //888 #HANGUL SYLLABLE NIEUN A NIEUNHIEUH
+ {0x85FD, 0xB0A3}, //889 #HANGUL SYLLABLE NIEUN A RIEULPIEUP
+ {0x85FE, 0xB0A4}, //890 #HANGUL SYLLABLE NIEUN A RIEULSIOS
+ {0x8641, 0xB0A5}, //891 #HANGUL SYLLABLE NIEUN A RIEULTHIEUTH
+ {0x8642, 0xB0A6}, //892 #HANGUL SYLLABLE NIEUN A RIEULPHIEUPH
+ {0x8643, 0xB0A7}, //893 #HANGUL SYLLABLE NIEUN A RIEULHIEUH
+ {0x8644, 0xB0AA}, //894 #HANGUL SYLLABLE NIEUN A PIEUPSIOS
+ {0x8645, 0xB0B0}, //895 #HANGUL SYLLABLE NIEUN A KHIEUKH
+ {0x8646, 0xB0B2}, //896 #HANGUL SYLLABLE NIEUN A PHIEUPH
+ {0x8647, 0xB0B6}, //897 #HANGUL SYLLABLE NIEUN AE SSANGKIYEOK
+ {0x8648, 0xB0B7}, //898 #HANGUL SYLLABLE NIEUN AE KIYEOKSIOS
+ {0x8649, 0xB0B9}, //899 #HANGUL SYLLABLE NIEUN AE NIEUNCIEUC
+ {0x864A, 0xB0BA}, //900 #HANGUL SYLLABLE NIEUN AE NIEUNHIEUH
+ {0x864B, 0xB0BB}, //901 #HANGUL SYLLABLE NIEUN AE TIKEUT
+ {0x864C, 0xB0BD}, //902 #HANGUL SYLLABLE NIEUN AE RIEULKIYEOK
+ {0x864D, 0xB0BE}, //903 #HANGUL SYLLABLE NIEUN AE RIEULMIEUM
+ {0x864E, 0xB0BF}, //904 #HANGUL SYLLABLE NIEUN AE RIEULPIEUP
+ {0x864F, 0xB0C0}, //905 #HANGUL SYLLABLE NIEUN AE RIEULSIOS
+ {0x8650, 0xB0C1}, //906 #HANGUL SYLLABLE NIEUN AE RIEULTHIEUTH
+ {0x8651, 0xB0C2}, //907 #HANGUL SYLLABLE NIEUN AE RIEULPHIEUPH
+ {0x8652, 0xB0C3}, //908 #HANGUL SYLLABLE NIEUN AE RIEULHIEUH
+ {0x8653, 0xB0C6}, //909 #HANGUL SYLLABLE NIEUN AE PIEUPSIOS
+ {0x8654, 0xB0CA}, //910 #HANGUL SYLLABLE NIEUN AE CIEUC
+ {0x8655, 0xB0CB}, //911 #HANGUL SYLLABLE NIEUN AE CHIEUCH
+ {0x8656, 0xB0CC}, //912 #HANGUL SYLLABLE NIEUN AE KHIEUKH
+ {0x8657, 0xB0CD}, //913 #HANGUL SYLLABLE NIEUN AE THIEUTH
+ {0x8658, 0xB0CE}, //914 #HANGUL SYLLABLE NIEUN AE PHIEUPH
+ {0x8659, 0xB0CF}, //915 #HANGUL SYLLABLE NIEUN AE HIEUH
+ {0x865A, 0xB0D2}, //916 #HANGUL SYLLABLE NIEUN YA SSANGKIYEOK
+ {0x8661, 0xB0D3}, //917 #HANGUL SYLLABLE NIEUN YA KIYEOKSIOS
+ {0x8662, 0xB0D5}, //918 #HANGUL SYLLABLE NIEUN YA NIEUNCIEUC
+ {0x8663, 0xB0D6}, //919 #HANGUL SYLLABLE NIEUN YA NIEUNHIEUH
+ {0x8664, 0xB0D7}, //920 #HANGUL SYLLABLE NIEUN YA TIKEUT
+ {0x8665, 0xB0D9}, //921 #HANGUL SYLLABLE NIEUN YA RIEULKIYEOK
+ {0x8666, 0xB0DA}, //922 #HANGUL SYLLABLE NIEUN YA RIEULMIEUM
+ {0x8667, 0xB0DB}, //923 #HANGUL SYLLABLE NIEUN YA RIEULPIEUP
+ {0x8668, 0xB0DC}, //924 #HANGUL SYLLABLE NIEUN YA RIEULSIOS
+ {0x8669, 0xB0DD}, //925 #HANGUL SYLLABLE NIEUN YA RIEULTHIEUTH
+ {0x866A, 0xB0DE}, //926 #HANGUL SYLLABLE NIEUN YA RIEULPHIEUPH
+ {0x866B, 0xB0DF}, //927 #HANGUL SYLLABLE NIEUN YA RIEULHIEUH
+ {0x866C, 0xB0E1}, //928 #HANGUL SYLLABLE NIEUN YA PIEUP
+ {0x866D, 0xB0E2}, //929 #HANGUL SYLLABLE NIEUN YA PIEUPSIOS
+ {0x866E, 0xB0E3}, //930 #HANGUL SYLLABLE NIEUN YA SIOS
+ {0x866F, 0xB0E4}, //931 #HANGUL SYLLABLE NIEUN YA SSANGSIOS
+ {0x8670, 0xB0E6}, //932 #HANGUL SYLLABLE NIEUN YA CIEUC
+ {0x8671, 0xB0E7}, //933 #HANGUL SYLLABLE NIEUN YA CHIEUCH
+ {0x8672, 0xB0E8}, //934 #HANGUL SYLLABLE NIEUN YA KHIEUKH
+ {0x8673, 0xB0E9}, //935 #HANGUL SYLLABLE NIEUN YA THIEUTH
+ {0x8674, 0xB0EA}, //936 #HANGUL SYLLABLE NIEUN YA PHIEUPH
+ {0x8675, 0xB0EB}, //937 #HANGUL SYLLABLE NIEUN YA HIEUH
+ {0x8676, 0xB0EC}, //938 #HANGUL SYLLABLE NIEUN YAE
+ {0x8677, 0xB0ED}, //939 #HANGUL SYLLABLE NIEUN YAE KIYEOK
+ {0x8678, 0xB0EE}, //940 #HANGUL SYLLABLE NIEUN YAE SSANGKIYEOK
+ {0x8679, 0xB0EF}, //941 #HANGUL SYLLABLE NIEUN YAE KIYEOKSIOS
+ {0x867A, 0xB0F0}, //942 #HANGUL SYLLABLE NIEUN YAE NIEUN
+ {0x8681, 0xB0F1}, //943 #HANGUL SYLLABLE NIEUN YAE NIEUNCIEUC
+ {0x8682, 0xB0F2}, //944 #HANGUL SYLLABLE NIEUN YAE NIEUNHIEUH
+ {0x8683, 0xB0F3}, //945 #HANGUL SYLLABLE NIEUN YAE TIKEUT
+ {0x8684, 0xB0F4}, //946 #HANGUL SYLLABLE NIEUN YAE RIEUL
+ {0x8685, 0xB0F5}, //947 #HANGUL SYLLABLE NIEUN YAE RIEULKIYEOK
+ {0x8686, 0xB0F6}, //948 #HANGUL SYLLABLE NIEUN YAE RIEULMIEUM
+ {0x8687, 0xB0F7}, //949 #HANGUL SYLLABLE NIEUN YAE RIEULPIEUP
+ {0x8688, 0xB0F8}, //950 #HANGUL SYLLABLE NIEUN YAE RIEULSIOS
+ {0x8689, 0xB0F9}, //951 #HANGUL SYLLABLE NIEUN YAE RIEULTHIEUTH
+ {0x868A, 0xB0FA}, //952 #HANGUL SYLLABLE NIEUN YAE RIEULPHIEUPH
+ {0x868B, 0xB0FB}, //953 #HANGUL SYLLABLE NIEUN YAE RIEULHIEUH
+ {0x868C, 0xB0FC}, //954 #HANGUL SYLLABLE NIEUN YAE MIEUM
+ {0x868D, 0xB0FD}, //955 #HANGUL SYLLABLE NIEUN YAE PIEUP
+ {0x868E, 0xB0FE}, //956 #HANGUL SYLLABLE NIEUN YAE PIEUPSIOS
+ {0x868F, 0xB0FF}, //957 #HANGUL SYLLABLE NIEUN YAE SIOS
+ {0x8690, 0xB100}, //958 #HANGUL SYLLABLE NIEUN YAE SSANGSIOS
+ {0x8691, 0xB101}, //959 #HANGUL SYLLABLE NIEUN YAE IEUNG
+ {0x8692, 0xB102}, //960 #HANGUL SYLLABLE NIEUN YAE CIEUC
+ {0x8693, 0xB103}, //961 #HANGUL SYLLABLE NIEUN YAE CHIEUCH
+ {0x8694, 0xB104}, //962 #HANGUL SYLLABLE NIEUN YAE KHIEUKH
+ {0x8695, 0xB105}, //963 #HANGUL SYLLABLE NIEUN YAE THIEUTH
+ {0x8696, 0xB106}, //964 #HANGUL SYLLABLE NIEUN YAE PHIEUPH
+ {0x8697, 0xB107}, //965 #HANGUL SYLLABLE NIEUN YAE HIEUH
+ {0x8698, 0xB10A}, //966 #HANGUL SYLLABLE NIEUN EO SSANGKIYEOK
+ {0x8699, 0xB10D}, //967 #HANGUL SYLLABLE NIEUN EO NIEUNCIEUC
+ {0x869A, 0xB10E}, //968 #HANGUL SYLLABLE NIEUN EO NIEUNHIEUH
+ {0x869B, 0xB10F}, //969 #HANGUL SYLLABLE NIEUN EO TIKEUT
+ {0x869C, 0xB111}, //970 #HANGUL SYLLABLE NIEUN EO RIEULKIYEOK
+ {0x869D, 0xB114}, //971 #HANGUL SYLLABLE NIEUN EO RIEULSIOS
+ {0x869E, 0xB115}, //972 #HANGUL SYLLABLE NIEUN EO RIEULTHIEUTH
+ {0x869F, 0xB116}, //973 #HANGUL SYLLABLE NIEUN EO RIEULPHIEUPH
+ {0x86A0, 0xB117}, //974 #HANGUL SYLLABLE NIEUN EO RIEULHIEUH
+ {0x86A1, 0xB11A}, //975 #HANGUL SYLLABLE NIEUN EO PIEUPSIOS
+ {0x86A2, 0xB11E}, //976 #HANGUL SYLLABLE NIEUN EO CIEUC
+ {0x86A3, 0xB11F}, //977 #HANGUL SYLLABLE NIEUN EO CHIEUCH
+ {0x86A4, 0xB120}, //978 #HANGUL SYLLABLE NIEUN EO KHIEUKH
+ {0x86A5, 0xB121}, //979 #HANGUL SYLLABLE NIEUN EO THIEUTH
+ {0x86A6, 0xB122}, //980 #HANGUL SYLLABLE NIEUN EO PHIEUPH
+ {0x86A7, 0xB126}, //981 #HANGUL SYLLABLE NIEUN E SSANGKIYEOK
+ {0x86A8, 0xB127}, //982 #HANGUL SYLLABLE NIEUN E KIYEOKSIOS
+ {0x86A9, 0xB129}, //983 #HANGUL SYLLABLE NIEUN E NIEUNCIEUC
+ {0x86AA, 0xB12A}, //984 #HANGUL SYLLABLE NIEUN E NIEUNHIEUH
+ {0x86AB, 0xB12B}, //985 #HANGUL SYLLABLE NIEUN E TIKEUT
+ {0x86AC, 0xB12D}, //986 #HANGUL SYLLABLE NIEUN E RIEULKIYEOK
+ {0x86AD, 0xB12E}, //987 #HANGUL SYLLABLE NIEUN E RIEULMIEUM
+ {0x86AE, 0xB12F}, //988 #HANGUL SYLLABLE NIEUN E RIEULPIEUP
+ {0x86AF, 0xB130}, //989 #HANGUL SYLLABLE NIEUN E RIEULSIOS
+ {0x86B0, 0xB131}, //990 #HANGUL SYLLABLE NIEUN E RIEULTHIEUTH
+ {0x86B1, 0xB132}, //991 #HANGUL SYLLABLE NIEUN E RIEULPHIEUPH
+ {0x86B2, 0xB133}, //992 #HANGUL SYLLABLE NIEUN E RIEULHIEUH
+ {0x86B3, 0xB136}, //993 #HANGUL SYLLABLE NIEUN E PIEUPSIOS
+ {0x86B4, 0xB13A}, //994 #HANGUL SYLLABLE NIEUN E CIEUC
+ {0x86B5, 0xB13B}, //995 #HANGUL SYLLABLE NIEUN E CHIEUCH
+ {0x86B6, 0xB13C}, //996 #HANGUL SYLLABLE NIEUN E KHIEUKH
+ {0x86B7, 0xB13D}, //997 #HANGUL SYLLABLE NIEUN E THIEUTH
+ {0x86B8, 0xB13E}, //998 #HANGUL SYLLABLE NIEUN E PHIEUPH
+ {0x86B9, 0xB13F}, //999 #HANGUL SYLLABLE NIEUN E HIEUH
+ {0x86BA, 0xB142}, //1000 #HANGUL SYLLABLE NIEUN YEO SSANGKIYEOK
+ {0x86BB, 0xB143}, //1001 #HANGUL SYLLABLE NIEUN YEO KIYEOKSIOS
+ {0x86BC, 0xB145}, //1002 #HANGUL SYLLABLE NIEUN YEO NIEUNCIEUC
+ {0x86BD, 0xB146}, //1003 #HANGUL SYLLABLE NIEUN YEO NIEUNHIEUH
+ {0x86BE, 0xB147}, //1004 #HANGUL SYLLABLE NIEUN YEO TIKEUT
+ {0x86BF, 0xB149}, //1005 #HANGUL SYLLABLE NIEUN YEO RIEULKIYEOK
+ {0x86C0, 0xB14A}, //1006 #HANGUL SYLLABLE NIEUN YEO RIEULMIEUM
+ {0x86C1, 0xB14B}, //1007 #HANGUL SYLLABLE NIEUN YEO RIEULPIEUP
+ {0x86C2, 0xB14C}, //1008 #HANGUL SYLLABLE NIEUN YEO RIEULSIOS
+ {0x86C3, 0xB14D}, //1009 #HANGUL SYLLABLE NIEUN YEO RIEULTHIEUTH
+ {0x86C4, 0xB14E}, //1010 #HANGUL SYLLABLE NIEUN YEO RIEULPHIEUPH
+ {0x86C5, 0xB14F}, //1011 #HANGUL SYLLABLE NIEUN YEO RIEULHIEUH
+ {0x86C6, 0xB152}, //1012 #HANGUL SYLLABLE NIEUN YEO PIEUPSIOS
+ {0x86C7, 0xB153}, //1013 #HANGUL SYLLABLE NIEUN YEO SIOS
+ {0x86C8, 0xB156}, //1014 #HANGUL SYLLABLE NIEUN YEO CIEUC
+ {0x86C9, 0xB157}, //1015 #HANGUL SYLLABLE NIEUN YEO CHIEUCH
+ {0x86CA, 0xB159}, //1016 #HANGUL SYLLABLE NIEUN YEO THIEUTH
+ {0x86CB, 0xB15A}, //1017 #HANGUL SYLLABLE NIEUN YEO PHIEUPH
+ {0x86CC, 0xB15B}, //1018 #HANGUL SYLLABLE NIEUN YEO HIEUH
+ {0x86CD, 0xB15D}, //1019 #HANGUL SYLLABLE NIEUN YE KIYEOK
+ {0x86CE, 0xB15E}, //1020 #HANGUL SYLLABLE NIEUN YE SSANGKIYEOK
+ {0x86CF, 0xB15F}, //1021 #HANGUL SYLLABLE NIEUN YE KIYEOKSIOS
+ {0x86D0, 0xB161}, //1022 #HANGUL SYLLABLE NIEUN YE NIEUNCIEUC
+ {0x86D1, 0xB162}, //1023 #HANGUL SYLLABLE NIEUN YE NIEUNHIEUH
+ {0x86D2, 0xB163}, //1024 #HANGUL SYLLABLE NIEUN YE TIKEUT
+ {0x86D3, 0xB164}, //1025 #HANGUL SYLLABLE NIEUN YE RIEUL
+ {0x86D4, 0xB165}, //1026 #HANGUL SYLLABLE NIEUN YE RIEULKIYEOK
+ {0x86D5, 0xB166}, //1027 #HANGUL SYLLABLE NIEUN YE RIEULMIEUM
+ {0x86D6, 0xB167}, //1028 #HANGUL SYLLABLE NIEUN YE RIEULPIEUP
+ {0x86D7, 0xB168}, //1029 #HANGUL SYLLABLE NIEUN YE RIEULSIOS
+ {0x86D8, 0xB169}, //1030 #HANGUL SYLLABLE NIEUN YE RIEULTHIEUTH
+ {0x86D9, 0xB16A}, //1031 #HANGUL SYLLABLE NIEUN YE RIEULPHIEUPH
+ {0x86DA, 0xB16B}, //1032 #HANGUL SYLLABLE NIEUN YE RIEULHIEUH
+ {0x86DB, 0xB16C}, //1033 #HANGUL SYLLABLE NIEUN YE MIEUM
+ {0x86DC, 0xB16D}, //1034 #HANGUL SYLLABLE NIEUN YE PIEUP
+ {0x86DD, 0xB16E}, //1035 #HANGUL SYLLABLE NIEUN YE PIEUPSIOS
+ {0x86DE, 0xB16F}, //1036 #HANGUL SYLLABLE NIEUN YE SIOS
+ {0x86DF, 0xB170}, //1037 #HANGUL SYLLABLE NIEUN YE SSANGSIOS
+ {0x86E0, 0xB171}, //1038 #HANGUL SYLLABLE NIEUN YE IEUNG
+ {0x86E1, 0xB172}, //1039 #HANGUL SYLLABLE NIEUN YE CIEUC
+ {0x86E2, 0xB173}, //1040 #HANGUL SYLLABLE NIEUN YE CHIEUCH
+ {0x86E3, 0xB174}, //1041 #HANGUL SYLLABLE NIEUN YE KHIEUKH
+ {0x86E4, 0xB175}, //1042 #HANGUL SYLLABLE NIEUN YE THIEUTH
+ {0x86E5, 0xB176}, //1043 #HANGUL SYLLABLE NIEUN YE PHIEUPH
+ {0x86E6, 0xB177}, //1044 #HANGUL SYLLABLE NIEUN YE HIEUH
+ {0x86E7, 0xB17A}, //1045 #HANGUL SYLLABLE NIEUN O SSANGKIYEOK
+ {0x86E8, 0xB17B}, //1046 #HANGUL SYLLABLE NIEUN O KIYEOKSIOS
+ {0x86E9, 0xB17D}, //1047 #HANGUL SYLLABLE NIEUN O NIEUNCIEUC
+ {0x86EA, 0xB17E}, //1048 #HANGUL SYLLABLE NIEUN O NIEUNHIEUH
+ {0x86EB, 0xB17F}, //1049 #HANGUL SYLLABLE NIEUN O TIKEUT
+ {0x86EC, 0xB181}, //1050 #HANGUL SYLLABLE NIEUN O RIEULKIYEOK
+ {0x86ED, 0xB183}, //1051 #HANGUL SYLLABLE NIEUN O RIEULPIEUP
+ {0x86EE, 0xB184}, //1052 #HANGUL SYLLABLE NIEUN O RIEULSIOS
+ {0x86EF, 0xB185}, //1053 #HANGUL SYLLABLE NIEUN O RIEULTHIEUTH
+ {0x86F0, 0xB186}, //1054 #HANGUL SYLLABLE NIEUN O RIEULPHIEUPH
+ {0x86F1, 0xB187}, //1055 #HANGUL SYLLABLE NIEUN O RIEULHIEUH
+ {0x86F2, 0xB18A}, //1056 #HANGUL SYLLABLE NIEUN O PIEUPSIOS
+ {0x86F3, 0xB18C}, //1057 #HANGUL SYLLABLE NIEUN O SSANGSIOS
+ {0x86F4, 0xB18E}, //1058 #HANGUL SYLLABLE NIEUN O CIEUC
+ {0x86F5, 0xB18F}, //1059 #HANGUL SYLLABLE NIEUN O CHIEUCH
+ {0x86F6, 0xB190}, //1060 #HANGUL SYLLABLE NIEUN O KHIEUKH
+ {0x86F7, 0xB191}, //1061 #HANGUL SYLLABLE NIEUN O THIEUTH
+ {0x86F8, 0xB195}, //1062 #HANGUL SYLLABLE NIEUN WA KIYEOK
+ {0x86F9, 0xB196}, //1063 #HANGUL SYLLABLE NIEUN WA SSANGKIYEOK
+ {0x86FA, 0xB197}, //1064 #HANGUL SYLLABLE NIEUN WA KIYEOKSIOS
+ {0x86FB, 0xB199}, //1065 #HANGUL SYLLABLE NIEUN WA NIEUNCIEUC
+ {0x86FC, 0xB19A}, //1066 #HANGUL SYLLABLE NIEUN WA NIEUNHIEUH
+ {0x86FD, 0xB19B}, //1067 #HANGUL SYLLABLE NIEUN WA TIKEUT
+ {0x86FE, 0xB19D}, //1068 #HANGUL SYLLABLE NIEUN WA RIEULKIYEOK
+ {0x8741, 0xB19E}, //1069 #HANGUL SYLLABLE NIEUN WA RIEULMIEUM
+ {0x8742, 0xB19F}, //1070 #HANGUL SYLLABLE NIEUN WA RIEULPIEUP
+ {0x8743, 0xB1A0}, //1071 #HANGUL SYLLABLE NIEUN WA RIEULSIOS
+ {0x8744, 0xB1A1}, //1072 #HANGUL SYLLABLE NIEUN WA RIEULTHIEUTH
+ {0x8745, 0xB1A2}, //1073 #HANGUL SYLLABLE NIEUN WA RIEULPHIEUPH
+ {0x8746, 0xB1A3}, //1074 #HANGUL SYLLABLE NIEUN WA RIEULHIEUH
+ {0x8747, 0xB1A4}, //1075 #HANGUL SYLLABLE NIEUN WA MIEUM
+ {0x8748, 0xB1A5}, //1076 #HANGUL SYLLABLE NIEUN WA PIEUP
+ {0x8749, 0xB1A6}, //1077 #HANGUL SYLLABLE NIEUN WA PIEUPSIOS
+ {0x874A, 0xB1A7}, //1078 #HANGUL SYLLABLE NIEUN WA SIOS
+ {0x874B, 0xB1A9}, //1079 #HANGUL SYLLABLE NIEUN WA IEUNG
+ {0x874C, 0xB1AA}, //1080 #HANGUL SYLLABLE NIEUN WA CIEUC
+ {0x874D, 0xB1AB}, //1081 #HANGUL SYLLABLE NIEUN WA CHIEUCH
+ {0x874E, 0xB1AC}, //1082 #HANGUL SYLLABLE NIEUN WA KHIEUKH
+ {0x874F, 0xB1AD}, //1083 #HANGUL SYLLABLE NIEUN WA THIEUTH
+ {0x8750, 0xB1AE}, //1084 #HANGUL SYLLABLE NIEUN WA PHIEUPH
+ {0x8751, 0xB1AF}, //1085 #HANGUL SYLLABLE NIEUN WA HIEUH
+ {0x8752, 0xB1B0}, //1086 #HANGUL SYLLABLE NIEUN WAE
+ {0x8753, 0xB1B1}, //1087 #HANGUL SYLLABLE NIEUN WAE KIYEOK
+ {0x8754, 0xB1B2}, //1088 #HANGUL SYLLABLE NIEUN WAE SSANGKIYEOK
+ {0x8755, 0xB1B3}, //1089 #HANGUL SYLLABLE NIEUN WAE KIYEOKSIOS
+ {0x8756, 0xB1B4}, //1090 #HANGUL SYLLABLE NIEUN WAE NIEUN
+ {0x8757, 0xB1B5}, //1091 #HANGUL SYLLABLE NIEUN WAE NIEUNCIEUC
+ {0x8758, 0xB1B6}, //1092 #HANGUL SYLLABLE NIEUN WAE NIEUNHIEUH
+ {0x8759, 0xB1B7}, //1093 #HANGUL SYLLABLE NIEUN WAE TIKEUT
+ {0x875A, 0xB1B8}, //1094 #HANGUL SYLLABLE NIEUN WAE RIEUL
+ {0x8761, 0xB1B9}, //1095 #HANGUL SYLLABLE NIEUN WAE RIEULKIYEOK
+ {0x8762, 0xB1BA}, //1096 #HANGUL SYLLABLE NIEUN WAE RIEULMIEUM
+ {0x8763, 0xB1BB}, //1097 #HANGUL SYLLABLE NIEUN WAE RIEULPIEUP
+ {0x8764, 0xB1BC}, //1098 #HANGUL SYLLABLE NIEUN WAE RIEULSIOS
+ {0x8765, 0xB1BD}, //1099 #HANGUL SYLLABLE NIEUN WAE RIEULTHIEUTH
+ {0x8766, 0xB1BE}, //1100 #HANGUL SYLLABLE NIEUN WAE RIEULPHIEUPH
+ {0x8767, 0xB1BF}, //1101 #HANGUL SYLLABLE NIEUN WAE RIEULHIEUH
+ {0x8768, 0xB1C0}, //1102 #HANGUL SYLLABLE NIEUN WAE MIEUM
+ {0x8769, 0xB1C1}, //1103 #HANGUL SYLLABLE NIEUN WAE PIEUP
+ {0x876A, 0xB1C2}, //1104 #HANGUL SYLLABLE NIEUN WAE PIEUPSIOS
+ {0x876B, 0xB1C3}, //1105 #HANGUL SYLLABLE NIEUN WAE SIOS
+ {0x876C, 0xB1C4}, //1106 #HANGUL SYLLABLE NIEUN WAE SSANGSIOS
+ {0x876D, 0xB1C5}, //1107 #HANGUL SYLLABLE NIEUN WAE IEUNG
+ {0x876E, 0xB1C6}, //1108 #HANGUL SYLLABLE NIEUN WAE CIEUC
+ {0x876F, 0xB1C7}, //1109 #HANGUL SYLLABLE NIEUN WAE CHIEUCH
+ {0x8770, 0xB1C8}, //1110 #HANGUL SYLLABLE NIEUN WAE KHIEUKH
+ {0x8771, 0xB1C9}, //1111 #HANGUL SYLLABLE NIEUN WAE THIEUTH
+ {0x8772, 0xB1CA}, //1112 #HANGUL SYLLABLE NIEUN WAE PHIEUPH
+ {0x8773, 0xB1CB}, //1113 #HANGUL SYLLABLE NIEUN WAE HIEUH
+ {0x8774, 0xB1CD}, //1114 #HANGUL SYLLABLE NIEUN OE KIYEOK
+ {0x8775, 0xB1CE}, //1115 #HANGUL SYLLABLE NIEUN OE SSANGKIYEOK
+ {0x8776, 0xB1CF}, //1116 #HANGUL SYLLABLE NIEUN OE KIYEOKSIOS
+ {0x8777, 0xB1D1}, //1117 #HANGUL SYLLABLE NIEUN OE NIEUNCIEUC
+ {0x8778, 0xB1D2}, //1118 #HANGUL SYLLABLE NIEUN OE NIEUNHIEUH
+ {0x8779, 0xB1D3}, //1119 #HANGUL SYLLABLE NIEUN OE TIKEUT
+ {0x877A, 0xB1D5}, //1120 #HANGUL SYLLABLE NIEUN OE RIEULKIYEOK
+ {0x8781, 0xB1D6}, //1121 #HANGUL SYLLABLE NIEUN OE RIEULMIEUM
+ {0x8782, 0xB1D7}, //1122 #HANGUL SYLLABLE NIEUN OE RIEULPIEUP
+ {0x8783, 0xB1D8}, //1123 #HANGUL SYLLABLE NIEUN OE RIEULSIOS
+ {0x8784, 0xB1D9}, //1124 #HANGUL SYLLABLE NIEUN OE RIEULTHIEUTH
+ {0x8785, 0xB1DA}, //1125 #HANGUL SYLLABLE NIEUN OE RIEULPHIEUPH
+ {0x8786, 0xB1DB}, //1126 #HANGUL SYLLABLE NIEUN OE RIEULHIEUH
+ {0x8787, 0xB1DE}, //1127 #HANGUL SYLLABLE NIEUN OE PIEUPSIOS
+ {0x8788, 0xB1E0}, //1128 #HANGUL SYLLABLE NIEUN OE SSANGSIOS
+ {0x8789, 0xB1E1}, //1129 #HANGUL SYLLABLE NIEUN OE IEUNG
+ {0x878A, 0xB1E2}, //1130 #HANGUL SYLLABLE NIEUN OE CIEUC
+ {0x878B, 0xB1E3}, //1131 #HANGUL SYLLABLE NIEUN OE CHIEUCH
+ {0x878C, 0xB1E4}, //1132 #HANGUL SYLLABLE NIEUN OE KHIEUKH
+ {0x878D, 0xB1E5}, //1133 #HANGUL SYLLABLE NIEUN OE THIEUTH
+ {0x878E, 0xB1E6}, //1134 #HANGUL SYLLABLE NIEUN OE PHIEUPH
+ {0x878F, 0xB1E7}, //1135 #HANGUL SYLLABLE NIEUN OE HIEUH
+ {0x8790, 0xB1EA}, //1136 #HANGUL SYLLABLE NIEUN YO SSANGKIYEOK
+ {0x8791, 0xB1EB}, //1137 #HANGUL SYLLABLE NIEUN YO KIYEOKSIOS
+ {0x8792, 0xB1ED}, //1138 #HANGUL SYLLABLE NIEUN YO NIEUNCIEUC
+ {0x8793, 0xB1EE}, //1139 #HANGUL SYLLABLE NIEUN YO NIEUNHIEUH
+ {0x8794, 0xB1EF}, //1140 #HANGUL SYLLABLE NIEUN YO TIKEUT
+ {0x8795, 0xB1F1}, //1141 #HANGUL SYLLABLE NIEUN YO RIEULKIYEOK
+ {0x8796, 0xB1F2}, //1142 #HANGUL SYLLABLE NIEUN YO RIEULMIEUM
+ {0x8797, 0xB1F3}, //1143 #HANGUL SYLLABLE NIEUN YO RIEULPIEUP
+ {0x8798, 0xB1F4}, //1144 #HANGUL SYLLABLE NIEUN YO RIEULSIOS
+ {0x8799, 0xB1F5}, //1145 #HANGUL SYLLABLE NIEUN YO RIEULTHIEUTH
+ {0x879A, 0xB1F6}, //1146 #HANGUL SYLLABLE NIEUN YO RIEULPHIEUPH
+ {0x879B, 0xB1F7}, //1147 #HANGUL SYLLABLE NIEUN YO RIEULHIEUH
+ {0x879C, 0xB1F8}, //1148 #HANGUL SYLLABLE NIEUN YO MIEUM
+ {0x879D, 0xB1FA}, //1149 #HANGUL SYLLABLE NIEUN YO PIEUPSIOS
+ {0x879E, 0xB1FC}, //1150 #HANGUL SYLLABLE NIEUN YO SSANGSIOS
+ {0x879F, 0xB1FE}, //1151 #HANGUL SYLLABLE NIEUN YO CIEUC
+ {0x87A0, 0xB1FF}, //1152 #HANGUL SYLLABLE NIEUN YO CHIEUCH
+ {0x87A1, 0xB200}, //1153 #HANGUL SYLLABLE NIEUN YO KHIEUKH
+ {0x87A2, 0xB201}, //1154 #HANGUL SYLLABLE NIEUN YO THIEUTH
+ {0x87A3, 0xB202}, //1155 #HANGUL SYLLABLE NIEUN YO PHIEUPH
+ {0x87A4, 0xB203}, //1156 #HANGUL SYLLABLE NIEUN YO HIEUH
+ {0x87A5, 0xB206}, //1157 #HANGUL SYLLABLE NIEUN U SSANGKIYEOK
+ {0x87A6, 0xB207}, //1158 #HANGUL SYLLABLE NIEUN U KIYEOKSIOS
+ {0x87A7, 0xB209}, //1159 #HANGUL SYLLABLE NIEUN U NIEUNCIEUC
+ {0x87A8, 0xB20A}, //1160 #HANGUL SYLLABLE NIEUN U NIEUNHIEUH
+ {0x87A9, 0xB20D}, //1161 #HANGUL SYLLABLE NIEUN U RIEULKIYEOK
+ {0x87AA, 0xB20E}, //1162 #HANGUL SYLLABLE NIEUN U RIEULMIEUM
+ {0x87AB, 0xB20F}, //1163 #HANGUL SYLLABLE NIEUN U RIEULPIEUP
+ {0x87AC, 0xB210}, //1164 #HANGUL SYLLABLE NIEUN U RIEULSIOS
+ {0x87AD, 0xB211}, //1165 #HANGUL SYLLABLE NIEUN U RIEULTHIEUTH
+ {0x87AE, 0xB212}, //1166 #HANGUL SYLLABLE NIEUN U RIEULPHIEUPH
+ {0x87AF, 0xB213}, //1167 #HANGUL SYLLABLE NIEUN U RIEULHIEUH
+ {0x87B0, 0xB216}, //1168 #HANGUL SYLLABLE NIEUN U PIEUPSIOS
+ {0x87B1, 0xB218}, //1169 #HANGUL SYLLABLE NIEUN U SSANGSIOS
+ {0x87B2, 0xB21A}, //1170 #HANGUL SYLLABLE NIEUN U CIEUC
+ {0x87B3, 0xB21B}, //1171 #HANGUL SYLLABLE NIEUN U CHIEUCH
+ {0x87B4, 0xB21C}, //1172 #HANGUL SYLLABLE NIEUN U KHIEUKH
+ {0x87B5, 0xB21D}, //1173 #HANGUL SYLLABLE NIEUN U THIEUTH
+ {0x87B6, 0xB21E}, //1174 #HANGUL SYLLABLE NIEUN U PHIEUPH
+ {0x87B7, 0xB21F}, //1175 #HANGUL SYLLABLE NIEUN U HIEUH
+ {0x87B8, 0xB221}, //1176 #HANGUL SYLLABLE NIEUN WEO KIYEOK
+ {0x87B9, 0xB222}, //1177 #HANGUL SYLLABLE NIEUN WEO SSANGKIYEOK
+ {0x87BA, 0xB223}, //1178 #HANGUL SYLLABLE NIEUN WEO KIYEOKSIOS
+ {0x87BB, 0xB224}, //1179 #HANGUL SYLLABLE NIEUN WEO NIEUN
+ {0x87BC, 0xB225}, //1180 #HANGUL SYLLABLE NIEUN WEO NIEUNCIEUC
+ {0x87BD, 0xB226}, //1181 #HANGUL SYLLABLE NIEUN WEO NIEUNHIEUH
+ {0x87BE, 0xB227}, //1182 #HANGUL SYLLABLE NIEUN WEO TIKEUT
+ {0x87BF, 0xB228}, //1183 #HANGUL SYLLABLE NIEUN WEO RIEUL
+ {0x87C0, 0xB229}, //1184 #HANGUL SYLLABLE NIEUN WEO RIEULKIYEOK
+ {0x87C1, 0xB22A}, //1185 #HANGUL SYLLABLE NIEUN WEO RIEULMIEUM
+ {0x87C2, 0xB22B}, //1186 #HANGUL SYLLABLE NIEUN WEO RIEULPIEUP
+ {0x87C3, 0xB22C}, //1187 #HANGUL SYLLABLE NIEUN WEO RIEULSIOS
+ {0x87C4, 0xB22D}, //1188 #HANGUL SYLLABLE NIEUN WEO RIEULTHIEUTH
+ {0x87C5, 0xB22E}, //1189 #HANGUL SYLLABLE NIEUN WEO RIEULPHIEUPH
+ {0x87C6, 0xB22F}, //1190 #HANGUL SYLLABLE NIEUN WEO RIEULHIEUH
+ {0x87C7, 0xB230}, //1191 #HANGUL SYLLABLE NIEUN WEO MIEUM
+ {0x87C8, 0xB231}, //1192 #HANGUL SYLLABLE NIEUN WEO PIEUP
+ {0x87C9, 0xB232}, //1193 #HANGUL SYLLABLE NIEUN WEO PIEUPSIOS
+ {0x87CA, 0xB233}, //1194 #HANGUL SYLLABLE NIEUN WEO SIOS
+ {0x87CB, 0xB235}, //1195 #HANGUL SYLLABLE NIEUN WEO IEUNG
+ {0x87CC, 0xB236}, //1196 #HANGUL SYLLABLE NIEUN WEO CIEUC
+ {0x87CD, 0xB237}, //1197 #HANGUL SYLLABLE NIEUN WEO CHIEUCH
+ {0x87CE, 0xB238}, //1198 #HANGUL SYLLABLE NIEUN WEO KHIEUKH
+ {0x87CF, 0xB239}, //1199 #HANGUL SYLLABLE NIEUN WEO THIEUTH
+ {0x87D0, 0xB23A}, //1200 #HANGUL SYLLABLE NIEUN WEO PHIEUPH
+ {0x87D1, 0xB23B}, //1201 #HANGUL SYLLABLE NIEUN WEO HIEUH
+ {0x87D2, 0xB23D}, //1202 #HANGUL SYLLABLE NIEUN WE KIYEOK
+ {0x87D3, 0xB23E}, //1203 #HANGUL SYLLABLE NIEUN WE SSANGKIYEOK
+ {0x87D4, 0xB23F}, //1204 #HANGUL SYLLABLE NIEUN WE KIYEOKSIOS
+ {0x87D5, 0xB240}, //1205 #HANGUL SYLLABLE NIEUN WE NIEUN
+ {0x87D6, 0xB241}, //1206 #HANGUL SYLLABLE NIEUN WE NIEUNCIEUC
+ {0x87D7, 0xB242}, //1207 #HANGUL SYLLABLE NIEUN WE NIEUNHIEUH
+ {0x87D8, 0xB243}, //1208 #HANGUL SYLLABLE NIEUN WE TIKEUT
+ {0x87D9, 0xB244}, //1209 #HANGUL SYLLABLE NIEUN WE RIEUL
+ {0x87DA, 0xB245}, //1210 #HANGUL SYLLABLE NIEUN WE RIEULKIYEOK
+ {0x87DB, 0xB246}, //1211 #HANGUL SYLLABLE NIEUN WE RIEULMIEUM
+ {0x87DC, 0xB247}, //1212 #HANGUL SYLLABLE NIEUN WE RIEULPIEUP
+ {0x87DD, 0xB248}, //1213 #HANGUL SYLLABLE NIEUN WE RIEULSIOS
+ {0x87DE, 0xB249}, //1214 #HANGUL SYLLABLE NIEUN WE RIEULTHIEUTH
+ {0x87DF, 0xB24A}, //1215 #HANGUL SYLLABLE NIEUN WE RIEULPHIEUPH
+ {0x87E0, 0xB24B}, //1216 #HANGUL SYLLABLE NIEUN WE RIEULHIEUH
+ {0x87E1, 0xB24C}, //1217 #HANGUL SYLLABLE NIEUN WE MIEUM
+ {0x87E2, 0xB24D}, //1218 #HANGUL SYLLABLE NIEUN WE PIEUP
+ {0x87E3, 0xB24E}, //1219 #HANGUL SYLLABLE NIEUN WE PIEUPSIOS
+ {0x87E4, 0xB24F}, //1220 #HANGUL SYLLABLE NIEUN WE SIOS
+ {0x87E5, 0xB250}, //1221 #HANGUL SYLLABLE NIEUN WE SSANGSIOS
+ {0x87E6, 0xB251}, //1222 #HANGUL SYLLABLE NIEUN WE IEUNG
+ {0x87E7, 0xB252}, //1223 #HANGUL SYLLABLE NIEUN WE CIEUC
+ {0x87E8, 0xB253}, //1224 #HANGUL SYLLABLE NIEUN WE CHIEUCH
+ {0x87E9, 0xB254}, //1225 #HANGUL SYLLABLE NIEUN WE KHIEUKH
+ {0x87EA, 0xB255}, //1226 #HANGUL SYLLABLE NIEUN WE THIEUTH
+ {0x87EB, 0xB256}, //1227 #HANGUL SYLLABLE NIEUN WE PHIEUPH
+ {0x87EC, 0xB257}, //1228 #HANGUL SYLLABLE NIEUN WE HIEUH
+ {0x87ED, 0xB259}, //1229 #HANGUL SYLLABLE NIEUN WI KIYEOK
+ {0x87EE, 0xB25A}, //1230 #HANGUL SYLLABLE NIEUN WI SSANGKIYEOK
+ {0x87EF, 0xB25B}, //1231 #HANGUL SYLLABLE NIEUN WI KIYEOKSIOS
+ {0x87F0, 0xB25D}, //1232 #HANGUL SYLLABLE NIEUN WI NIEUNCIEUC
+ {0x87F1, 0xB25E}, //1233 #HANGUL SYLLABLE NIEUN WI NIEUNHIEUH
+ {0x87F2, 0xB25F}, //1234 #HANGUL SYLLABLE NIEUN WI TIKEUT
+ {0x87F3, 0xB261}, //1235 #HANGUL SYLLABLE NIEUN WI RIEULKIYEOK
+ {0x87F4, 0xB262}, //1236 #HANGUL SYLLABLE NIEUN WI RIEULMIEUM
+ {0x87F5, 0xB263}, //1237 #HANGUL SYLLABLE NIEUN WI RIEULPIEUP
+ {0x87F6, 0xB264}, //1238 #HANGUL SYLLABLE NIEUN WI RIEULSIOS
+ {0x87F7, 0xB265}, //1239 #HANGUL SYLLABLE NIEUN WI RIEULTHIEUTH
+ {0x87F8, 0xB266}, //1240 #HANGUL SYLLABLE NIEUN WI RIEULPHIEUPH
+ {0x87F9, 0xB267}, //1241 #HANGUL SYLLABLE NIEUN WI RIEULHIEUH
+ {0x87FA, 0xB26A}, //1242 #HANGUL SYLLABLE NIEUN WI PIEUPSIOS
+ {0x87FB, 0xB26B}, //1243 #HANGUL SYLLABLE NIEUN WI SIOS
+ {0x87FC, 0xB26C}, //1244 #HANGUL SYLLABLE NIEUN WI SSANGSIOS
+ {0x87FD, 0xB26D}, //1245 #HANGUL SYLLABLE NIEUN WI IEUNG
+ {0x87FE, 0xB26E}, //1246 #HANGUL SYLLABLE NIEUN WI CIEUC
+ {0x8841, 0xB26F}, //1247 #HANGUL SYLLABLE NIEUN WI CHIEUCH
+ {0x8842, 0xB270}, //1248 #HANGUL SYLLABLE NIEUN WI KHIEUKH
+ {0x8843, 0xB271}, //1249 #HANGUL SYLLABLE NIEUN WI THIEUTH
+ {0x8844, 0xB272}, //1250 #HANGUL SYLLABLE NIEUN WI PHIEUPH
+ {0x8845, 0xB273}, //1251 #HANGUL SYLLABLE NIEUN WI HIEUH
+ {0x8846, 0xB276}, //1252 #HANGUL SYLLABLE NIEUN YU SSANGKIYEOK
+ {0x8847, 0xB277}, //1253 #HANGUL SYLLABLE NIEUN YU KIYEOKSIOS
+ {0x8848, 0xB278}, //1254 #HANGUL SYLLABLE NIEUN YU NIEUN
+ {0x8849, 0xB279}, //1255 #HANGUL SYLLABLE NIEUN YU NIEUNCIEUC
+ {0x884A, 0xB27A}, //1256 #HANGUL SYLLABLE NIEUN YU NIEUNHIEUH
+ {0x884B, 0xB27B}, //1257 #HANGUL SYLLABLE NIEUN YU TIKEUT
+ {0x884C, 0xB27D}, //1258 #HANGUL SYLLABLE NIEUN YU RIEULKIYEOK
+ {0x884D, 0xB27E}, //1259 #HANGUL SYLLABLE NIEUN YU RIEULMIEUM
+ {0x884E, 0xB27F}, //1260 #HANGUL SYLLABLE NIEUN YU RIEULPIEUP
+ {0x884F, 0xB280}, //1261 #HANGUL SYLLABLE NIEUN YU RIEULSIOS
+ {0x8850, 0xB281}, //1262 #HANGUL SYLLABLE NIEUN YU RIEULTHIEUTH
+ {0x8851, 0xB282}, //1263 #HANGUL SYLLABLE NIEUN YU RIEULPHIEUPH
+ {0x8852, 0xB283}, //1264 #HANGUL SYLLABLE NIEUN YU RIEULHIEUH
+ {0x8853, 0xB286}, //1265 #HANGUL SYLLABLE NIEUN YU PIEUPSIOS
+ {0x8854, 0xB287}, //1266 #HANGUL SYLLABLE NIEUN YU SIOS
+ {0x8855, 0xB288}, //1267 #HANGUL SYLLABLE NIEUN YU SSANGSIOS
+ {0x8856, 0xB28A}, //1268 #HANGUL SYLLABLE NIEUN YU CIEUC
+ {0x8857, 0xB28B}, //1269 #HANGUL SYLLABLE NIEUN YU CHIEUCH
+ {0x8858, 0xB28C}, //1270 #HANGUL SYLLABLE NIEUN YU KHIEUKH
+ {0x8859, 0xB28D}, //1271 #HANGUL SYLLABLE NIEUN YU THIEUTH
+ {0x885A, 0xB28E}, //1272 #HANGUL SYLLABLE NIEUN YU PHIEUPH
+ {0x8861, 0xB28F}, //1273 #HANGUL SYLLABLE NIEUN YU HIEUH
+ {0x8862, 0xB292}, //1274 #HANGUL SYLLABLE NIEUN EU SSANGKIYEOK
+ {0x8863, 0xB293}, //1275 #HANGUL SYLLABLE NIEUN EU KIYEOKSIOS
+ {0x8864, 0xB295}, //1276 #HANGUL SYLLABLE NIEUN EU NIEUNCIEUC
+ {0x8865, 0xB296}, //1277 #HANGUL SYLLABLE NIEUN EU NIEUNHIEUH
+ {0x8866, 0xB297}, //1278 #HANGUL SYLLABLE NIEUN EU TIKEUT
+ {0x8867, 0xB29B}, //1279 #HANGUL SYLLABLE NIEUN EU RIEULPIEUP
+ {0x8868, 0xB29C}, //1280 #HANGUL SYLLABLE NIEUN EU RIEULSIOS
+ {0x8869, 0xB29D}, //1281 #HANGUL SYLLABLE NIEUN EU RIEULTHIEUTH
+ {0x886A, 0xB29E}, //1282 #HANGUL SYLLABLE NIEUN EU RIEULPHIEUPH
+ {0x886B, 0xB29F}, //1283 #HANGUL SYLLABLE NIEUN EU RIEULHIEUH
+ {0x886C, 0xB2A2}, //1284 #HANGUL SYLLABLE NIEUN EU PIEUPSIOS
+ {0x886D, 0xB2A4}, //1285 #HANGUL SYLLABLE NIEUN EU SSANGSIOS
+ {0x886E, 0xB2A7}, //1286 #HANGUL SYLLABLE NIEUN EU CHIEUCH
+ {0x886F, 0xB2A8}, //1287 #HANGUL SYLLABLE NIEUN EU KHIEUKH
+ {0x8870, 0xB2A9}, //1288 #HANGUL SYLLABLE NIEUN EU THIEUTH
+ {0x8871, 0xB2AB}, //1289 #HANGUL SYLLABLE NIEUN EU HIEUH
+ {0x8872, 0xB2AD}, //1290 #HANGUL SYLLABLE NIEUN YI KIYEOK
+ {0x8873, 0xB2AE}, //1291 #HANGUL SYLLABLE NIEUN YI SSANGKIYEOK
+ {0x8874, 0xB2AF}, //1292 #HANGUL SYLLABLE NIEUN YI KIYEOKSIOS
+ {0x8875, 0xB2B1}, //1293 #HANGUL SYLLABLE NIEUN YI NIEUNCIEUC
+ {0x8876, 0xB2B2}, //1294 #HANGUL SYLLABLE NIEUN YI NIEUNHIEUH
+ {0x8877, 0xB2B3}, //1295 #HANGUL SYLLABLE NIEUN YI TIKEUT
+ {0x8878, 0xB2B5}, //1296 #HANGUL SYLLABLE NIEUN YI RIEULKIYEOK
+ {0x8879, 0xB2B6}, //1297 #HANGUL SYLLABLE NIEUN YI RIEULMIEUM
+ {0x887A, 0xB2B7}, //1298 #HANGUL SYLLABLE NIEUN YI RIEULPIEUP
+ {0x8881, 0xB2B8}, //1299 #HANGUL SYLLABLE NIEUN YI RIEULSIOS
+ {0x8882, 0xB2B9}, //1300 #HANGUL SYLLABLE NIEUN YI RIEULTHIEUTH
+ {0x8883, 0xB2BA}, //1301 #HANGUL SYLLABLE NIEUN YI RIEULPHIEUPH
+ {0x8884, 0xB2BB}, //1302 #HANGUL SYLLABLE NIEUN YI RIEULHIEUH
+ {0x8885, 0xB2BC}, //1303 #HANGUL SYLLABLE NIEUN YI MIEUM
+ {0x8886, 0xB2BD}, //1304 #HANGUL SYLLABLE NIEUN YI PIEUP
+ {0x8887, 0xB2BE}, //1305 #HANGUL SYLLABLE NIEUN YI PIEUPSIOS
+ {0x8888, 0xB2BF}, //1306 #HANGUL SYLLABLE NIEUN YI SIOS
+ {0x8889, 0xB2C0}, //1307 #HANGUL SYLLABLE NIEUN YI SSANGSIOS
+ {0x888A, 0xB2C1}, //1308 #HANGUL SYLLABLE NIEUN YI IEUNG
+ {0x888B, 0xB2C2}, //1309 #HANGUL SYLLABLE NIEUN YI CIEUC
+ {0x888C, 0xB2C3}, //1310 #HANGUL SYLLABLE NIEUN YI CHIEUCH
+ {0x888D, 0xB2C4}, //1311 #HANGUL SYLLABLE NIEUN YI KHIEUKH
+ {0x888E, 0xB2C5}, //1312 #HANGUL SYLLABLE NIEUN YI THIEUTH
+ {0x888F, 0xB2C6}, //1313 #HANGUL SYLLABLE NIEUN YI PHIEUPH
+ {0x8890, 0xB2C7}, //1314 #HANGUL SYLLABLE NIEUN YI HIEUH
+ {0x8891, 0xB2CA}, //1315 #HANGUL SYLLABLE NIEUN I SSANGKIYEOK
+ {0x8892, 0xB2CB}, //1316 #HANGUL SYLLABLE NIEUN I KIYEOKSIOS
+ {0x8893, 0xB2CD}, //1317 #HANGUL SYLLABLE NIEUN I NIEUNCIEUC
+ {0x8894, 0xB2CE}, //1318 #HANGUL SYLLABLE NIEUN I NIEUNHIEUH
+ {0x8895, 0xB2CF}, //1319 #HANGUL SYLLABLE NIEUN I TIKEUT
+ {0x8896, 0xB2D1}, //1320 #HANGUL SYLLABLE NIEUN I RIEULKIYEOK
+ {0x8897, 0xB2D3}, //1321 #HANGUL SYLLABLE NIEUN I RIEULPIEUP
+ {0x8898, 0xB2D4}, //1322 #HANGUL SYLLABLE NIEUN I RIEULSIOS
+ {0x8899, 0xB2D5}, //1323 #HANGUL SYLLABLE NIEUN I RIEULTHIEUTH
+ {0x889A, 0xB2D6}, //1324 #HANGUL SYLLABLE NIEUN I RIEULPHIEUPH
+ {0x889B, 0xB2D7}, //1325 #HANGUL SYLLABLE NIEUN I RIEULHIEUH
+ {0x889C, 0xB2DA}, //1326 #HANGUL SYLLABLE NIEUN I PIEUPSIOS
+ {0x889D, 0xB2DC}, //1327 #HANGUL SYLLABLE NIEUN I SSANGSIOS
+ {0x889E, 0xB2DE}, //1328 #HANGUL SYLLABLE NIEUN I CIEUC
+ {0x889F, 0xB2DF}, //1329 #HANGUL SYLLABLE NIEUN I CHIEUCH
+ {0x88A0, 0xB2E0}, //1330 #HANGUL SYLLABLE NIEUN I KHIEUKH
+ {0x88A1, 0xB2E1}, //1331 #HANGUL SYLLABLE NIEUN I THIEUTH
+ {0x88A2, 0xB2E3}, //1332 #HANGUL SYLLABLE NIEUN I HIEUH
+ {0x88A3, 0xB2E7}, //1333 #HANGUL SYLLABLE TIKEUT A KIYEOKSIOS
+ {0x88A4, 0xB2E9}, //1334 #HANGUL SYLLABLE TIKEUT A NIEUNCIEUC
+ {0x88A5, 0xB2EA}, //1335 #HANGUL SYLLABLE TIKEUT A NIEUNHIEUH
+ {0x88A6, 0xB2F0}, //1336 #HANGUL SYLLABLE TIKEUT A RIEULSIOS
+ {0x88A7, 0xB2F1}, //1337 #HANGUL SYLLABLE TIKEUT A RIEULTHIEUTH
+ {0x88A8, 0xB2F2}, //1338 #HANGUL SYLLABLE TIKEUT A RIEULPHIEUPH
+ {0x88A9, 0xB2F6}, //1339 #HANGUL SYLLABLE TIKEUT A PIEUPSIOS
+ {0x88AA, 0xB2FC}, //1340 #HANGUL SYLLABLE TIKEUT A KHIEUKH
+ {0x88AB, 0xB2FD}, //1341 #HANGUL SYLLABLE TIKEUT A THIEUTH
+ {0x88AC, 0xB2FE}, //1342 #HANGUL SYLLABLE TIKEUT A PHIEUPH
+ {0x88AD, 0xB302}, //1343 #HANGUL SYLLABLE TIKEUT AE SSANGKIYEOK
+ {0x88AE, 0xB303}, //1344 #HANGUL SYLLABLE TIKEUT AE KIYEOKSIOS
+ {0x88AF, 0xB305}, //1345 #HANGUL SYLLABLE TIKEUT AE NIEUNCIEUC
+ {0x88B0, 0xB306}, //1346 #HANGUL SYLLABLE TIKEUT AE NIEUNHIEUH
+ {0x88B1, 0xB307}, //1347 #HANGUL SYLLABLE TIKEUT AE TIKEUT
+ {0x88B2, 0xB309}, //1348 #HANGUL SYLLABLE TIKEUT AE RIEULKIYEOK
+ {0x88B3, 0xB30A}, //1349 #HANGUL SYLLABLE TIKEUT AE RIEULMIEUM
+ {0x88B4, 0xB30B}, //1350 #HANGUL SYLLABLE TIKEUT AE RIEULPIEUP
+ {0x88B5, 0xB30C}, //1351 #HANGUL SYLLABLE TIKEUT AE RIEULSIOS
+ {0x88B6, 0xB30D}, //1352 #HANGUL SYLLABLE TIKEUT AE RIEULTHIEUTH
+ {0x88B7, 0xB30E}, //1353 #HANGUL SYLLABLE TIKEUT AE RIEULPHIEUPH
+ {0x88B8, 0xB30F}, //1354 #HANGUL SYLLABLE TIKEUT AE RIEULHIEUH
+ {0x88B9, 0xB312}, //1355 #HANGUL SYLLABLE TIKEUT AE PIEUPSIOS
+ {0x88BA, 0xB316}, //1356 #HANGUL SYLLABLE TIKEUT AE CIEUC
+ {0x88BB, 0xB317}, //1357 #HANGUL SYLLABLE TIKEUT AE CHIEUCH
+ {0x88BC, 0xB318}, //1358 #HANGUL SYLLABLE TIKEUT AE KHIEUKH
+ {0x88BD, 0xB319}, //1359 #HANGUL SYLLABLE TIKEUT AE THIEUTH
+ {0x88BE, 0xB31A}, //1360 #HANGUL SYLLABLE TIKEUT AE PHIEUPH
+ {0x88BF, 0xB31B}, //1361 #HANGUL SYLLABLE TIKEUT AE HIEUH
+ {0x88C0, 0xB31D}, //1362 #HANGUL SYLLABLE TIKEUT YA KIYEOK
+ {0x88C1, 0xB31E}, //1363 #HANGUL SYLLABLE TIKEUT YA SSANGKIYEOK
+ {0x88C2, 0xB31F}, //1364 #HANGUL SYLLABLE TIKEUT YA KIYEOKSIOS
+ {0x88C3, 0xB320}, //1365 #HANGUL SYLLABLE TIKEUT YA NIEUN
+ {0x88C4, 0xB321}, //1366 #HANGUL SYLLABLE TIKEUT YA NIEUNCIEUC
+ {0x88C5, 0xB322}, //1367 #HANGUL SYLLABLE TIKEUT YA NIEUNHIEUH
+ {0x88C6, 0xB323}, //1368 #HANGUL SYLLABLE TIKEUT YA TIKEUT
+ {0x88C7, 0xB324}, //1369 #HANGUL SYLLABLE TIKEUT YA RIEUL
+ {0x88C8, 0xB325}, //1370 #HANGUL SYLLABLE TIKEUT YA RIEULKIYEOK
+ {0x88C9, 0xB326}, //1371 #HANGUL SYLLABLE TIKEUT YA RIEULMIEUM
+ {0x88CA, 0xB327}, //1372 #HANGUL SYLLABLE TIKEUT YA RIEULPIEUP
+ {0x88CB, 0xB328}, //1373 #HANGUL SYLLABLE TIKEUT YA RIEULSIOS
+ {0x88CC, 0xB329}, //1374 #HANGUL SYLLABLE TIKEUT YA RIEULTHIEUTH
+ {0x88CD, 0xB32A}, //1375 #HANGUL SYLLABLE TIKEUT YA RIEULPHIEUPH
+ {0x88CE, 0xB32B}, //1376 #HANGUL SYLLABLE TIKEUT YA RIEULHIEUH
+ {0x88CF, 0xB32C}, //1377 #HANGUL SYLLABLE TIKEUT YA MIEUM
+ {0x88D0, 0xB32D}, //1378 #HANGUL SYLLABLE TIKEUT YA PIEUP
+ {0x88D1, 0xB32E}, //1379 #HANGUL SYLLABLE TIKEUT YA PIEUPSIOS
+ {0x88D2, 0xB32F}, //1380 #HANGUL SYLLABLE TIKEUT YA SIOS
+ {0x88D3, 0xB330}, //1381 #HANGUL SYLLABLE TIKEUT YA SSANGSIOS
+ {0x88D4, 0xB331}, //1382 #HANGUL SYLLABLE TIKEUT YA IEUNG
+ {0x88D5, 0xB332}, //1383 #HANGUL SYLLABLE TIKEUT YA CIEUC
+ {0x88D6, 0xB333}, //1384 #HANGUL SYLLABLE TIKEUT YA CHIEUCH
+ {0x88D7, 0xB334}, //1385 #HANGUL SYLLABLE TIKEUT YA KHIEUKH
+ {0x88D8, 0xB335}, //1386 #HANGUL SYLLABLE TIKEUT YA THIEUTH
+ {0x88D9, 0xB336}, //1387 #HANGUL SYLLABLE TIKEUT YA PHIEUPH
+ {0x88DA, 0xB337}, //1388 #HANGUL SYLLABLE TIKEUT YA HIEUH
+ {0x88DB, 0xB338}, //1389 #HANGUL SYLLABLE TIKEUT YAE
+ {0x88DC, 0xB339}, //1390 #HANGUL SYLLABLE TIKEUT YAE KIYEOK
+ {0x88DD, 0xB33A}, //1391 #HANGUL SYLLABLE TIKEUT YAE SSANGKIYEOK
+ {0x88DE, 0xB33B}, //1392 #HANGUL SYLLABLE TIKEUT YAE KIYEOKSIOS
+ {0x88DF, 0xB33C}, //1393 #HANGUL SYLLABLE TIKEUT YAE NIEUN
+ {0x88E0, 0xB33D}, //1394 #HANGUL SYLLABLE TIKEUT YAE NIEUNCIEUC
+ {0x88E1, 0xB33E}, //1395 #HANGUL SYLLABLE TIKEUT YAE NIEUNHIEUH
+ {0x88E2, 0xB33F}, //1396 #HANGUL SYLLABLE TIKEUT YAE TIKEUT
+ {0x88E3, 0xB340}, //1397 #HANGUL SYLLABLE TIKEUT YAE RIEUL
+ {0x88E4, 0xB341}, //1398 #HANGUL SYLLABLE TIKEUT YAE RIEULKIYEOK
+ {0x88E5, 0xB342}, //1399 #HANGUL SYLLABLE TIKEUT YAE RIEULMIEUM
+ {0x88E6, 0xB343}, //1400 #HANGUL SYLLABLE TIKEUT YAE RIEULPIEUP
+ {0x88E7, 0xB344}, //1401 #HANGUL SYLLABLE TIKEUT YAE RIEULSIOS
+ {0x88E8, 0xB345}, //1402 #HANGUL SYLLABLE TIKEUT YAE RIEULTHIEUTH
+ {0x88E9, 0xB346}, //1403 #HANGUL SYLLABLE TIKEUT YAE RIEULPHIEUPH
+ {0x88EA, 0xB347}, //1404 #HANGUL SYLLABLE TIKEUT YAE RIEULHIEUH
+ {0x88EB, 0xB348}, //1405 #HANGUL SYLLABLE TIKEUT YAE MIEUM
+ {0x88EC, 0xB349}, //1406 #HANGUL SYLLABLE TIKEUT YAE PIEUP
+ {0x88ED, 0xB34A}, //1407 #HANGUL SYLLABLE TIKEUT YAE PIEUPSIOS
+ {0x88EE, 0xB34B}, //1408 #HANGUL SYLLABLE TIKEUT YAE SIOS
+ {0x88EF, 0xB34C}, //1409 #HANGUL SYLLABLE TIKEUT YAE SSANGSIOS
+ {0x88F0, 0xB34D}, //1410 #HANGUL SYLLABLE TIKEUT YAE IEUNG
+ {0x88F1, 0xB34E}, //1411 #HANGUL SYLLABLE TIKEUT YAE CIEUC
+ {0x88F2, 0xB34F}, //1412 #HANGUL SYLLABLE TIKEUT YAE CHIEUCH
+ {0x88F3, 0xB350}, //1413 #HANGUL SYLLABLE TIKEUT YAE KHIEUKH
+ {0x88F4, 0xB351}, //1414 #HANGUL SYLLABLE TIKEUT YAE THIEUTH
+ {0x88F5, 0xB352}, //1415 #HANGUL SYLLABLE TIKEUT YAE PHIEUPH
+ {0x88F6, 0xB353}, //1416 #HANGUL SYLLABLE TIKEUT YAE HIEUH
+ {0x88F7, 0xB357}, //1417 #HANGUL SYLLABLE TIKEUT EO KIYEOKSIOS
+ {0x88F8, 0xB359}, //1418 #HANGUL SYLLABLE TIKEUT EO NIEUNCIEUC
+ {0x88F9, 0xB35A}, //1419 #HANGUL SYLLABLE TIKEUT EO NIEUNHIEUH
+ {0x88FA, 0xB35D}, //1420 #HANGUL SYLLABLE TIKEUT EO RIEULKIYEOK
+ {0x88FB, 0xB360}, //1421 #HANGUL SYLLABLE TIKEUT EO RIEULSIOS
+ {0x88FC, 0xB361}, //1422 #HANGUL SYLLABLE TIKEUT EO RIEULTHIEUTH
+ {0x88FD, 0xB362}, //1423 #HANGUL SYLLABLE TIKEUT EO RIEULPHIEUPH
+ {0x88FE, 0xB363}, //1424 #HANGUL SYLLABLE TIKEUT EO RIEULHIEUH
+ {0x8941, 0xB366}, //1425 #HANGUL SYLLABLE TIKEUT EO PIEUPSIOS
+ {0x8942, 0xB368}, //1426 #HANGUL SYLLABLE TIKEUT EO SSANGSIOS
+ {0x8943, 0xB36A}, //1427 #HANGUL SYLLABLE TIKEUT EO CIEUC
+ {0x8944, 0xB36C}, //1428 #HANGUL SYLLABLE TIKEUT EO KHIEUKH
+ {0x8945, 0xB36D}, //1429 #HANGUL SYLLABLE TIKEUT EO THIEUTH
+ {0x8946, 0xB36F}, //1430 #HANGUL SYLLABLE TIKEUT EO HIEUH
+ {0x8947, 0xB372}, //1431 #HANGUL SYLLABLE TIKEUT E SSANGKIYEOK
+ {0x8948, 0xB373}, //1432 #HANGUL SYLLABLE TIKEUT E KIYEOKSIOS
+ {0x8949, 0xB375}, //1433 #HANGUL SYLLABLE TIKEUT E NIEUNCIEUC
+ {0x894A, 0xB376}, //1434 #HANGUL SYLLABLE TIKEUT E NIEUNHIEUH
+ {0x894B, 0xB377}, //1435 #HANGUL SYLLABLE TIKEUT E TIKEUT
+ {0x894C, 0xB379}, //1436 #HANGUL SYLLABLE TIKEUT E RIEULKIYEOK
+ {0x894D, 0xB37A}, //1437 #HANGUL SYLLABLE TIKEUT E RIEULMIEUM
+ {0x894E, 0xB37B}, //1438 #HANGUL SYLLABLE TIKEUT E RIEULPIEUP
+ {0x894F, 0xB37C}, //1439 #HANGUL SYLLABLE TIKEUT E RIEULSIOS
+ {0x8950, 0xB37D}, //1440 #HANGUL SYLLABLE TIKEUT E RIEULTHIEUTH
+ {0x8951, 0xB37E}, //1441 #HANGUL SYLLABLE TIKEUT E RIEULPHIEUPH
+ {0x8952, 0xB37F}, //1442 #HANGUL SYLLABLE TIKEUT E RIEULHIEUH
+ {0x8953, 0xB382}, //1443 #HANGUL SYLLABLE TIKEUT E PIEUPSIOS
+ {0x8954, 0xB386}, //1444 #HANGUL SYLLABLE TIKEUT E CIEUC
+ {0x8955, 0xB387}, //1445 #HANGUL SYLLABLE TIKEUT E CHIEUCH
+ {0x8956, 0xB388}, //1446 #HANGUL SYLLABLE TIKEUT E KHIEUKH
+ {0x8957, 0xB389}, //1447 #HANGUL SYLLABLE TIKEUT E THIEUTH
+ {0x8958, 0xB38A}, //1448 #HANGUL SYLLABLE TIKEUT E PHIEUPH
+ {0x8959, 0xB38B}, //1449 #HANGUL SYLLABLE TIKEUT E HIEUH
+ {0x895A, 0xB38D}, //1450 #HANGUL SYLLABLE TIKEUT YEO KIYEOK
+ {0x8961, 0xB38E}, //1451 #HANGUL SYLLABLE TIKEUT YEO SSANGKIYEOK
+ {0x8962, 0xB38F}, //1452 #HANGUL SYLLABLE TIKEUT YEO KIYEOKSIOS
+ {0x8963, 0xB391}, //1453 #HANGUL SYLLABLE TIKEUT YEO NIEUNCIEUC
+ {0x8964, 0xB392}, //1454 #HANGUL SYLLABLE TIKEUT YEO NIEUNHIEUH
+ {0x8965, 0xB393}, //1455 #HANGUL SYLLABLE TIKEUT YEO TIKEUT
+ {0x8966, 0xB395}, //1456 #HANGUL SYLLABLE TIKEUT YEO RIEULKIYEOK
+ {0x8967, 0xB396}, //1457 #HANGUL SYLLABLE TIKEUT YEO RIEULMIEUM
+ {0x8968, 0xB397}, //1458 #HANGUL SYLLABLE TIKEUT YEO RIEULPIEUP
+ {0x8969, 0xB398}, //1459 #HANGUL SYLLABLE TIKEUT YEO RIEULSIOS
+ {0x896A, 0xB399}, //1460 #HANGUL SYLLABLE TIKEUT YEO RIEULTHIEUTH
+ {0x896B, 0xB39A}, //1461 #HANGUL SYLLABLE TIKEUT YEO RIEULPHIEUPH
+ {0x896C, 0xB39B}, //1462 #HANGUL SYLLABLE TIKEUT YEO RIEULHIEUH
+ {0x896D, 0xB39C}, //1463 #HANGUL SYLLABLE TIKEUT YEO MIEUM
+ {0x896E, 0xB39D}, //1464 #HANGUL SYLLABLE TIKEUT YEO PIEUP
+ {0x896F, 0xB39E}, //1465 #HANGUL SYLLABLE TIKEUT YEO PIEUPSIOS
+ {0x8970, 0xB39F}, //1466 #HANGUL SYLLABLE TIKEUT YEO SIOS
+ {0x8971, 0xB3A2}, //1467 #HANGUL SYLLABLE TIKEUT YEO CIEUC
+ {0x8972, 0xB3A3}, //1468 #HANGUL SYLLABLE TIKEUT YEO CHIEUCH
+ {0x8973, 0xB3A4}, //1469 #HANGUL SYLLABLE TIKEUT YEO KHIEUKH
+ {0x8974, 0xB3A5}, //1470 #HANGUL SYLLABLE TIKEUT YEO THIEUTH
+ {0x8975, 0xB3A6}, //1471 #HANGUL SYLLABLE TIKEUT YEO PHIEUPH
+ {0x8976, 0xB3A7}, //1472 #HANGUL SYLLABLE TIKEUT YEO HIEUH
+ {0x8977, 0xB3A9}, //1473 #HANGUL SYLLABLE TIKEUT YE KIYEOK
+ {0x8978, 0xB3AA}, //1474 #HANGUL SYLLABLE TIKEUT YE SSANGKIYEOK
+ {0x8979, 0xB3AB}, //1475 #HANGUL SYLLABLE TIKEUT YE KIYEOKSIOS
+ {0x897A, 0xB3AD}, //1476 #HANGUL SYLLABLE TIKEUT YE NIEUNCIEUC
+ {0x8981, 0xB3AE}, //1477 #HANGUL SYLLABLE TIKEUT YE NIEUNHIEUH
+ {0x8982, 0xB3AF}, //1478 #HANGUL SYLLABLE TIKEUT YE TIKEUT
+ {0x8983, 0xB3B0}, //1479 #HANGUL SYLLABLE TIKEUT YE RIEUL
+ {0x8984, 0xB3B1}, //1480 #HANGUL SYLLABLE TIKEUT YE RIEULKIYEOK
+ {0x8985, 0xB3B2}, //1481 #HANGUL SYLLABLE TIKEUT YE RIEULMIEUM
+ {0x8986, 0xB3B3}, //1482 #HANGUL SYLLABLE TIKEUT YE RIEULPIEUP
+ {0x8987, 0xB3B4}, //1483 #HANGUL SYLLABLE TIKEUT YE RIEULSIOS
+ {0x8988, 0xB3B5}, //1484 #HANGUL SYLLABLE TIKEUT YE RIEULTHIEUTH
+ {0x8989, 0xB3B6}, //1485 #HANGUL SYLLABLE TIKEUT YE RIEULPHIEUPH
+ {0x898A, 0xB3B7}, //1486 #HANGUL SYLLABLE TIKEUT YE RIEULHIEUH
+ {0x898B, 0xB3B8}, //1487 #HANGUL SYLLABLE TIKEUT YE MIEUM
+ {0x898C, 0xB3B9}, //1488 #HANGUL SYLLABLE TIKEUT YE PIEUP
+ {0x898D, 0xB3BA}, //1489 #HANGUL SYLLABLE TIKEUT YE PIEUPSIOS
+ {0x898E, 0xB3BB}, //1490 #HANGUL SYLLABLE TIKEUT YE SIOS
+ {0x898F, 0xB3BC}, //1491 #HANGUL SYLLABLE TIKEUT YE SSANGSIOS
+ {0x8990, 0xB3BD}, //1492 #HANGUL SYLLABLE TIKEUT YE IEUNG
+ {0x8991, 0xB3BE}, //1493 #HANGUL SYLLABLE TIKEUT YE CIEUC
+ {0x8992, 0xB3BF}, //1494 #HANGUL SYLLABLE TIKEUT YE CHIEUCH
+ {0x8993, 0xB3C0}, //1495 #HANGUL SYLLABLE TIKEUT YE KHIEUKH
+ {0x8994, 0xB3C1}, //1496 #HANGUL SYLLABLE TIKEUT YE THIEUTH
+ {0x8995, 0xB3C2}, //1497 #HANGUL SYLLABLE TIKEUT YE PHIEUPH
+ {0x8996, 0xB3C3}, //1498 #HANGUL SYLLABLE TIKEUT YE HIEUH
+ {0x8997, 0xB3C6}, //1499 #HANGUL SYLLABLE TIKEUT O SSANGKIYEOK
+ {0x8998, 0xB3C7}, //1500 #HANGUL SYLLABLE TIKEUT O KIYEOKSIOS
+ {0x8999, 0xB3C9}, //1501 #HANGUL SYLLABLE TIKEUT O NIEUNCIEUC
+ {0x899A, 0xB3CA}, //1502 #HANGUL SYLLABLE TIKEUT O NIEUNHIEUH
+ {0x899B, 0xB3CD}, //1503 #HANGUL SYLLABLE TIKEUT O RIEULKIYEOK
+ {0x899C, 0xB3CF}, //1504 #HANGUL SYLLABLE TIKEUT O RIEULPIEUP
+ {0x899D, 0xB3D1}, //1505 #HANGUL SYLLABLE TIKEUT O RIEULTHIEUTH
+ {0x899E, 0xB3D2}, //1506 #HANGUL SYLLABLE TIKEUT O RIEULPHIEUPH
+ {0x899F, 0xB3D3}, //1507 #HANGUL SYLLABLE TIKEUT O RIEULHIEUH
+ {0x89A0, 0xB3D6}, //1508 #HANGUL SYLLABLE TIKEUT O PIEUPSIOS
+ {0x89A1, 0xB3D8}, //1509 #HANGUL SYLLABLE TIKEUT O SSANGSIOS
+ {0x89A2, 0xB3DA}, //1510 #HANGUL SYLLABLE TIKEUT O CIEUC
+ {0x89A3, 0xB3DC}, //1511 #HANGUL SYLLABLE TIKEUT O KHIEUKH
+ {0x89A4, 0xB3DE}, //1512 #HANGUL SYLLABLE TIKEUT O PHIEUPH
+ {0x89A5, 0xB3DF}, //1513 #HANGUL SYLLABLE TIKEUT O HIEUH
+ {0x89A6, 0xB3E1}, //1514 #HANGUL SYLLABLE TIKEUT WA KIYEOK
+ {0x89A7, 0xB3E2}, //1515 #HANGUL SYLLABLE TIKEUT WA SSANGKIYEOK
+ {0x89A8, 0xB3E3}, //1516 #HANGUL SYLLABLE TIKEUT WA KIYEOKSIOS
+ {0x89A9, 0xB3E5}, //1517 #HANGUL SYLLABLE TIKEUT WA NIEUNCIEUC
+ {0x89AA, 0xB3E6}, //1518 #HANGUL SYLLABLE TIKEUT WA NIEUNHIEUH
+ {0x89AB, 0xB3E7}, //1519 #HANGUL SYLLABLE TIKEUT WA TIKEUT
+ {0x89AC, 0xB3E9}, //1520 #HANGUL SYLLABLE TIKEUT WA RIEULKIYEOK
+ {0x89AD, 0xB3EA}, //1521 #HANGUL SYLLABLE TIKEUT WA RIEULMIEUM
+ {0x89AE, 0xB3EB}, //1522 #HANGUL SYLLABLE TIKEUT WA RIEULPIEUP
+ {0x89AF, 0xB3EC}, //1523 #HANGUL SYLLABLE TIKEUT WA RIEULSIOS
+ {0x89B0, 0xB3ED}, //1524 #HANGUL SYLLABLE TIKEUT WA RIEULTHIEUTH
+ {0x89B1, 0xB3EE}, //1525 #HANGUL SYLLABLE TIKEUT WA RIEULPHIEUPH
+ {0x89B2, 0xB3EF}, //1526 #HANGUL SYLLABLE TIKEUT WA RIEULHIEUH
+ {0x89B3, 0xB3F0}, //1527 #HANGUL SYLLABLE TIKEUT WA MIEUM
+ {0x89B4, 0xB3F1}, //1528 #HANGUL SYLLABLE TIKEUT WA PIEUP
+ {0x89B5, 0xB3F2}, //1529 #HANGUL SYLLABLE TIKEUT WA PIEUPSIOS
+ {0x89B6, 0xB3F3}, //1530 #HANGUL SYLLABLE TIKEUT WA SIOS
+ {0x89B7, 0xB3F4}, //1531 #HANGUL SYLLABLE TIKEUT WA SSANGSIOS
+ {0x89B8, 0xB3F5}, //1532 #HANGUL SYLLABLE TIKEUT WA IEUNG
+ {0x89B9, 0xB3F6}, //1533 #HANGUL SYLLABLE TIKEUT WA CIEUC
+ {0x89BA, 0xB3F7}, //1534 #HANGUL SYLLABLE TIKEUT WA CHIEUCH
+ {0x89BB, 0xB3F8}, //1535 #HANGUL SYLLABLE TIKEUT WA KHIEUKH
+ {0x89BC, 0xB3F9}, //1536 #HANGUL SYLLABLE TIKEUT WA THIEUTH
+ {0x89BD, 0xB3FA}, //1537 #HANGUL SYLLABLE TIKEUT WA PHIEUPH
+ {0x89BE, 0xB3FB}, //1538 #HANGUL SYLLABLE TIKEUT WA HIEUH
+ {0x89BF, 0xB3FD}, //1539 #HANGUL SYLLABLE TIKEUT WAE KIYEOK
+ {0x89C0, 0xB3FE}, //1540 #HANGUL SYLLABLE TIKEUT WAE SSANGKIYEOK
+ {0x89C1, 0xB3FF}, //1541 #HANGUL SYLLABLE TIKEUT WAE KIYEOKSIOS
+ {0x89C2, 0xB400}, //1542 #HANGUL SYLLABLE TIKEUT WAE NIEUN
+ {0x89C3, 0xB401}, //1543 #HANGUL SYLLABLE TIKEUT WAE NIEUNCIEUC
+ {0x89C4, 0xB402}, //1544 #HANGUL SYLLABLE TIKEUT WAE NIEUNHIEUH
+ {0x89C5, 0xB403}, //1545 #HANGUL SYLLABLE TIKEUT WAE TIKEUT
+ {0x89C6, 0xB404}, //1546 #HANGUL SYLLABLE TIKEUT WAE RIEUL
+ {0x89C7, 0xB405}, //1547 #HANGUL SYLLABLE TIKEUT WAE RIEULKIYEOK
+ {0x89C8, 0xB406}, //1548 #HANGUL SYLLABLE TIKEUT WAE RIEULMIEUM
+ {0x89C9, 0xB407}, //1549 #HANGUL SYLLABLE TIKEUT WAE RIEULPIEUP
+ {0x89CA, 0xB408}, //1550 #HANGUL SYLLABLE TIKEUT WAE RIEULSIOS
+ {0x89CB, 0xB409}, //1551 #HANGUL SYLLABLE TIKEUT WAE RIEULTHIEUTH
+ {0x89CC, 0xB40A}, //1552 #HANGUL SYLLABLE TIKEUT WAE RIEULPHIEUPH
+ {0x89CD, 0xB40B}, //1553 #HANGUL SYLLABLE TIKEUT WAE RIEULHIEUH
+ {0x89CE, 0xB40C}, //1554 #HANGUL SYLLABLE TIKEUT WAE MIEUM
+ {0x89CF, 0xB40D}, //1555 #HANGUL SYLLABLE TIKEUT WAE PIEUP
+ {0x89D0, 0xB40E}, //1556 #HANGUL SYLLABLE TIKEUT WAE PIEUPSIOS
+ {0x89D1, 0xB40F}, //1557 #HANGUL SYLLABLE TIKEUT WAE SIOS
+ {0x89D2, 0xB411}, //1558 #HANGUL SYLLABLE TIKEUT WAE IEUNG
+ {0x89D3, 0xB412}, //1559 #HANGUL SYLLABLE TIKEUT WAE CIEUC
+ {0x89D4, 0xB413}, //1560 #HANGUL SYLLABLE TIKEUT WAE CHIEUCH
+ {0x89D5, 0xB414}, //1561 #HANGUL SYLLABLE TIKEUT WAE KHIEUKH
+ {0x89D6, 0xB415}, //1562 #HANGUL SYLLABLE TIKEUT WAE THIEUTH
+ {0x89D7, 0xB416}, //1563 #HANGUL SYLLABLE TIKEUT WAE PHIEUPH
+ {0x89D8, 0xB417}, //1564 #HANGUL SYLLABLE TIKEUT WAE HIEUH
+ {0x89D9, 0xB419}, //1565 #HANGUL SYLLABLE TIKEUT OE KIYEOK
+ {0x89DA, 0xB41A}, //1566 #HANGUL SYLLABLE TIKEUT OE SSANGKIYEOK
+ {0x89DB, 0xB41B}, //1567 #HANGUL SYLLABLE TIKEUT OE KIYEOKSIOS
+ {0x89DC, 0xB41D}, //1568 #HANGUL SYLLABLE TIKEUT OE NIEUNCIEUC
+ {0x89DD, 0xB41E}, //1569 #HANGUL SYLLABLE TIKEUT OE NIEUNHIEUH
+ {0x89DE, 0xB41F}, //1570 #HANGUL SYLLABLE TIKEUT OE TIKEUT
+ {0x89DF, 0xB421}, //1571 #HANGUL SYLLABLE TIKEUT OE RIEULKIYEOK
+ {0x89E0, 0xB422}, //1572 #HANGUL SYLLABLE TIKEUT OE RIEULMIEUM
+ {0x89E1, 0xB423}, //1573 #HANGUL SYLLABLE TIKEUT OE RIEULPIEUP
+ {0x89E2, 0xB424}, //1574 #HANGUL SYLLABLE TIKEUT OE RIEULSIOS
+ {0x89E3, 0xB425}, //1575 #HANGUL SYLLABLE TIKEUT OE RIEULTHIEUTH
+ {0x89E4, 0xB426}, //1576 #HANGUL SYLLABLE TIKEUT OE RIEULPHIEUPH
+ {0x89E5, 0xB427}, //1577 #HANGUL SYLLABLE TIKEUT OE RIEULHIEUH
+ {0x89E6, 0xB42A}, //1578 #HANGUL SYLLABLE TIKEUT OE PIEUPSIOS
+ {0x89E7, 0xB42C}, //1579 #HANGUL SYLLABLE TIKEUT OE SSANGSIOS
+ {0x89E8, 0xB42D}, //1580 #HANGUL SYLLABLE TIKEUT OE IEUNG
+ {0x89E9, 0xB42E}, //1581 #HANGUL SYLLABLE TIKEUT OE CIEUC
+ {0x89EA, 0xB42F}, //1582 #HANGUL SYLLABLE TIKEUT OE CHIEUCH
+ {0x89EB, 0xB430}, //1583 #HANGUL SYLLABLE TIKEUT OE KHIEUKH
+ {0x89EC, 0xB431}, //1584 #HANGUL SYLLABLE TIKEUT OE THIEUTH
+ {0x89ED, 0xB432}, //1585 #HANGUL SYLLABLE TIKEUT OE PHIEUPH
+ {0x89EE, 0xB433}, //1586 #HANGUL SYLLABLE TIKEUT OE HIEUH
+ {0x89EF, 0xB435}, //1587 #HANGUL SYLLABLE TIKEUT YO KIYEOK
+ {0x89F0, 0xB436}, //1588 #HANGUL SYLLABLE TIKEUT YO SSANGKIYEOK
+ {0x89F1, 0xB437}, //1589 #HANGUL SYLLABLE TIKEUT YO KIYEOKSIOS
+ {0x89F2, 0xB438}, //1590 #HANGUL SYLLABLE TIKEUT YO NIEUN
+ {0x89F3, 0xB439}, //1591 #HANGUL SYLLABLE TIKEUT YO NIEUNCIEUC
+ {0x89F4, 0xB43A}, //1592 #HANGUL SYLLABLE TIKEUT YO NIEUNHIEUH
+ {0x89F5, 0xB43B}, //1593 #HANGUL SYLLABLE TIKEUT YO TIKEUT
+ {0x89F6, 0xB43C}, //1594 #HANGUL SYLLABLE TIKEUT YO RIEUL
+ {0x89F7, 0xB43D}, //1595 #HANGUL SYLLABLE TIKEUT YO RIEULKIYEOK
+ {0x89F8, 0xB43E}, //1596 #HANGUL SYLLABLE TIKEUT YO RIEULMIEUM
+ {0x89F9, 0xB43F}, //1597 #HANGUL SYLLABLE TIKEUT YO RIEULPIEUP
+ {0x89FA, 0xB440}, //1598 #HANGUL SYLLABLE TIKEUT YO RIEULSIOS
+ {0x89FB, 0xB441}, //1599 #HANGUL SYLLABLE TIKEUT YO RIEULTHIEUTH
+ {0x89FC, 0xB442}, //1600 #HANGUL SYLLABLE TIKEUT YO RIEULPHIEUPH
+ {0x89FD, 0xB443}, //1601 #HANGUL SYLLABLE TIKEUT YO RIEULHIEUH
+ {0x89FE, 0xB444}, //1602 #HANGUL SYLLABLE TIKEUT YO MIEUM
+ {0x8A41, 0xB445}, //1603 #HANGUL SYLLABLE TIKEUT YO PIEUP
+ {0x8A42, 0xB446}, //1604 #HANGUL SYLLABLE TIKEUT YO PIEUPSIOS
+ {0x8A43, 0xB447}, //1605 #HANGUL SYLLABLE TIKEUT YO SIOS
+ {0x8A44, 0xB448}, //1606 #HANGUL SYLLABLE TIKEUT YO SSANGSIOS
+ {0x8A45, 0xB449}, //1607 #HANGUL SYLLABLE TIKEUT YO IEUNG
+ {0x8A46, 0xB44A}, //1608 #HANGUL SYLLABLE TIKEUT YO CIEUC
+ {0x8A47, 0xB44B}, //1609 #HANGUL SYLLABLE TIKEUT YO CHIEUCH
+ {0x8A48, 0xB44C}, //1610 #HANGUL SYLLABLE TIKEUT YO KHIEUKH
+ {0x8A49, 0xB44D}, //1611 #HANGUL SYLLABLE TIKEUT YO THIEUTH
+ {0x8A4A, 0xB44E}, //1612 #HANGUL SYLLABLE TIKEUT YO PHIEUPH
+ {0x8A4B, 0xB44F}, //1613 #HANGUL SYLLABLE TIKEUT YO HIEUH
+ {0x8A4C, 0xB452}, //1614 #HANGUL SYLLABLE TIKEUT U SSANGKIYEOK
+ {0x8A4D, 0xB453}, //1615 #HANGUL SYLLABLE TIKEUT U KIYEOKSIOS
+ {0x8A4E, 0xB455}, //1616 #HANGUL SYLLABLE TIKEUT U NIEUNCIEUC
+ {0x8A4F, 0xB456}, //1617 #HANGUL SYLLABLE TIKEUT U NIEUNHIEUH
+ {0x8A50, 0xB457}, //1618 #HANGUL SYLLABLE TIKEUT U TIKEUT
+ {0x8A51, 0xB459}, //1619 #HANGUL SYLLABLE TIKEUT U RIEULKIYEOK
+ {0x8A52, 0xB45A}, //1620 #HANGUL SYLLABLE TIKEUT U RIEULMIEUM
+ {0x8A53, 0xB45B}, //1621 #HANGUL SYLLABLE TIKEUT U RIEULPIEUP
+ {0x8A54, 0xB45C}, //1622 #HANGUL SYLLABLE TIKEUT U RIEULSIOS
+ {0x8A55, 0xB45D}, //1623 #HANGUL SYLLABLE TIKEUT U RIEULTHIEUTH
+ {0x8A56, 0xB45E}, //1624 #HANGUL SYLLABLE TIKEUT U RIEULPHIEUPH
+ {0x8A57, 0xB45F}, //1625 #HANGUL SYLLABLE TIKEUT U RIEULHIEUH
+ {0x8A58, 0xB462}, //1626 #HANGUL SYLLABLE TIKEUT U PIEUPSIOS
+ {0x8A59, 0xB464}, //1627 #HANGUL SYLLABLE TIKEUT U SSANGSIOS
+ {0x8A5A, 0xB466}, //1628 #HANGUL SYLLABLE TIKEUT U CIEUC
+ {0x8A61, 0xB467}, //1629 #HANGUL SYLLABLE TIKEUT U CHIEUCH
+ {0x8A62, 0xB468}, //1630 #HANGUL SYLLABLE TIKEUT U KHIEUKH
+ {0x8A63, 0xB469}, //1631 #HANGUL SYLLABLE TIKEUT U THIEUTH
+ {0x8A64, 0xB46A}, //1632 #HANGUL SYLLABLE TIKEUT U PHIEUPH
+ {0x8A65, 0xB46B}, //1633 #HANGUL SYLLABLE TIKEUT U HIEUH
+ {0x8A66, 0xB46D}, //1634 #HANGUL SYLLABLE TIKEUT WEO KIYEOK
+ {0x8A67, 0xB46E}, //1635 #HANGUL SYLLABLE TIKEUT WEO SSANGKIYEOK
+ {0x8A68, 0xB46F}, //1636 #HANGUL SYLLABLE TIKEUT WEO KIYEOKSIOS
+ {0x8A69, 0xB470}, //1637 #HANGUL SYLLABLE TIKEUT WEO NIEUN
+ {0x8A6A, 0xB471}, //1638 #HANGUL SYLLABLE TIKEUT WEO NIEUNCIEUC
+ {0x8A6B, 0xB472}, //1639 #HANGUL SYLLABLE TIKEUT WEO NIEUNHIEUH
+ {0x8A6C, 0xB473}, //1640 #HANGUL SYLLABLE TIKEUT WEO TIKEUT
+ {0x8A6D, 0xB474}, //1641 #HANGUL SYLLABLE TIKEUT WEO RIEUL
+ {0x8A6E, 0xB475}, //1642 #HANGUL SYLLABLE TIKEUT WEO RIEULKIYEOK
+ {0x8A6F, 0xB476}, //1643 #HANGUL SYLLABLE TIKEUT WEO RIEULMIEUM
+ {0x8A70, 0xB477}, //1644 #HANGUL SYLLABLE TIKEUT WEO RIEULPIEUP
+ {0x8A71, 0xB478}, //1645 #HANGUL SYLLABLE TIKEUT WEO RIEULSIOS
+ {0x8A72, 0xB479}, //1646 #HANGUL SYLLABLE TIKEUT WEO RIEULTHIEUTH
+ {0x8A73, 0xB47A}, //1647 #HANGUL SYLLABLE TIKEUT WEO RIEULPHIEUPH
+ {0x8A74, 0xB47B}, //1648 #HANGUL SYLLABLE TIKEUT WEO RIEULHIEUH
+ {0x8A75, 0xB47C}, //1649 #HANGUL SYLLABLE TIKEUT WEO MIEUM
+ {0x8A76, 0xB47D}, //1650 #HANGUL SYLLABLE TIKEUT WEO PIEUP
+ {0x8A77, 0xB47E}, //1651 #HANGUL SYLLABLE TIKEUT WEO PIEUPSIOS
+ {0x8A78, 0xB47F}, //1652 #HANGUL SYLLABLE TIKEUT WEO SIOS
+ {0x8A79, 0xB481}, //1653 #HANGUL SYLLABLE TIKEUT WEO IEUNG
+ {0x8A7A, 0xB482}, //1654 #HANGUL SYLLABLE TIKEUT WEO CIEUC
+ {0x8A81, 0xB483}, //1655 #HANGUL SYLLABLE TIKEUT WEO CHIEUCH
+ {0x8A82, 0xB484}, //1656 #HANGUL SYLLABLE TIKEUT WEO KHIEUKH
+ {0x8A83, 0xB485}, //1657 #HANGUL SYLLABLE TIKEUT WEO THIEUTH
+ {0x8A84, 0xB486}, //1658 #HANGUL SYLLABLE TIKEUT WEO PHIEUPH
+ {0x8A85, 0xB487}, //1659 #HANGUL SYLLABLE TIKEUT WEO HIEUH
+ {0x8A86, 0xB489}, //1660 #HANGUL SYLLABLE TIKEUT WE KIYEOK
+ {0x8A87, 0xB48A}, //1661 #HANGUL SYLLABLE TIKEUT WE SSANGKIYEOK
+ {0x8A88, 0xB48B}, //1662 #HANGUL SYLLABLE TIKEUT WE KIYEOKSIOS
+ {0x8A89, 0xB48C}, //1663 #HANGUL SYLLABLE TIKEUT WE NIEUN
+ {0x8A8A, 0xB48D}, //1664 #HANGUL SYLLABLE TIKEUT WE NIEUNCIEUC
+ {0x8A8B, 0xB48E}, //1665 #HANGUL SYLLABLE TIKEUT WE NIEUNHIEUH
+ {0x8A8C, 0xB48F}, //1666 #HANGUL SYLLABLE TIKEUT WE TIKEUT
+ {0x8A8D, 0xB490}, //1667 #HANGUL SYLLABLE TIKEUT WE RIEUL
+ {0x8A8E, 0xB491}, //1668 #HANGUL SYLLABLE TIKEUT WE RIEULKIYEOK
+ {0x8A8F, 0xB492}, //1669 #HANGUL SYLLABLE TIKEUT WE RIEULMIEUM
+ {0x8A90, 0xB493}, //1670 #HANGUL SYLLABLE TIKEUT WE RIEULPIEUP
+ {0x8A91, 0xB494}, //1671 #HANGUL SYLLABLE TIKEUT WE RIEULSIOS
+ {0x8A92, 0xB495}, //1672 #HANGUL SYLLABLE TIKEUT WE RIEULTHIEUTH
+ {0x8A93, 0xB496}, //1673 #HANGUL SYLLABLE TIKEUT WE RIEULPHIEUPH
+ {0x8A94, 0xB497}, //1674 #HANGUL SYLLABLE TIKEUT WE RIEULHIEUH
+ {0x8A95, 0xB498}, //1675 #HANGUL SYLLABLE TIKEUT WE MIEUM
+ {0x8A96, 0xB499}, //1676 #HANGUL SYLLABLE TIKEUT WE PIEUP
+ {0x8A97, 0xB49A}, //1677 #HANGUL SYLLABLE TIKEUT WE PIEUPSIOS
+ {0x8A98, 0xB49B}, //1678 #HANGUL SYLLABLE TIKEUT WE SIOS
+ {0x8A99, 0xB49C}, //1679 #HANGUL SYLLABLE TIKEUT WE SSANGSIOS
+ {0x8A9A, 0xB49E}, //1680 #HANGUL SYLLABLE TIKEUT WE CIEUC
+ {0x8A9B, 0xB49F}, //1681 #HANGUL SYLLABLE TIKEUT WE CHIEUCH
+ {0x8A9C, 0xB4A0}, //1682 #HANGUL SYLLABLE TIKEUT WE KHIEUKH
+ {0x8A9D, 0xB4A1}, //1683 #HANGUL SYLLABLE TIKEUT WE THIEUTH
+ {0x8A9E, 0xB4A2}, //1684 #HANGUL SYLLABLE TIKEUT WE PHIEUPH
+ {0x8A9F, 0xB4A3}, //1685 #HANGUL SYLLABLE TIKEUT WE HIEUH
+ {0x8AA0, 0xB4A5}, //1686 #HANGUL SYLLABLE TIKEUT WI KIYEOK
+ {0x8AA1, 0xB4A6}, //1687 #HANGUL SYLLABLE TIKEUT WI SSANGKIYEOK
+ {0x8AA2, 0xB4A7}, //1688 #HANGUL SYLLABLE TIKEUT WI KIYEOKSIOS
+ {0x8AA3, 0xB4A9}, //1689 #HANGUL SYLLABLE TIKEUT WI NIEUNCIEUC
+ {0x8AA4, 0xB4AA}, //1690 #HANGUL SYLLABLE TIKEUT WI NIEUNHIEUH
+ {0x8AA5, 0xB4AB}, //1691 #HANGUL SYLLABLE TIKEUT WI TIKEUT
+ {0x8AA6, 0xB4AD}, //1692 #HANGUL SYLLABLE TIKEUT WI RIEULKIYEOK
+ {0x8AA7, 0xB4AE}, //1693 #HANGUL SYLLABLE TIKEUT WI RIEULMIEUM
+ {0x8AA8, 0xB4AF}, //1694 #HANGUL SYLLABLE TIKEUT WI RIEULPIEUP
+ {0x8AA9, 0xB4B0}, //1695 #HANGUL SYLLABLE TIKEUT WI RIEULSIOS
+ {0x8AAA, 0xB4B1}, //1696 #HANGUL SYLLABLE TIKEUT WI RIEULTHIEUTH
+ {0x8AAB, 0xB4B2}, //1697 #HANGUL SYLLABLE TIKEUT WI RIEULPHIEUPH
+ {0x8AAC, 0xB4B3}, //1698 #HANGUL SYLLABLE TIKEUT WI RIEULHIEUH
+ {0x8AAD, 0xB4B4}, //1699 #HANGUL SYLLABLE TIKEUT WI MIEUM
+ {0x8AAE, 0xB4B6}, //1700 #HANGUL SYLLABLE TIKEUT WI PIEUPSIOS
+ {0x8AAF, 0xB4B8}, //1701 #HANGUL SYLLABLE TIKEUT WI SSANGSIOS
+ {0x8AB0, 0xB4BA}, //1702 #HANGUL SYLLABLE TIKEUT WI CIEUC
+ {0x8AB1, 0xB4BB}, //1703 #HANGUL SYLLABLE TIKEUT WI CHIEUCH
+ {0x8AB2, 0xB4BC}, //1704 #HANGUL SYLLABLE TIKEUT WI KHIEUKH
+ {0x8AB3, 0xB4BD}, //1705 #HANGUL SYLLABLE TIKEUT WI THIEUTH
+ {0x8AB4, 0xB4BE}, //1706 #HANGUL SYLLABLE TIKEUT WI PHIEUPH
+ {0x8AB5, 0xB4BF}, //1707 #HANGUL SYLLABLE TIKEUT WI HIEUH
+ {0x8AB6, 0xB4C1}, //1708 #HANGUL SYLLABLE TIKEUT YU KIYEOK
+ {0x8AB7, 0xB4C2}, //1709 #HANGUL SYLLABLE TIKEUT YU SSANGKIYEOK
+ {0x8AB8, 0xB4C3}, //1710 #HANGUL SYLLABLE TIKEUT YU KIYEOKSIOS
+ {0x8AB9, 0xB4C5}, //1711 #HANGUL SYLLABLE TIKEUT YU NIEUNCIEUC
+ {0x8ABA, 0xB4C6}, //1712 #HANGUL SYLLABLE TIKEUT YU NIEUNHIEUH
+ {0x8ABB, 0xB4C7}, //1713 #HANGUL SYLLABLE TIKEUT YU TIKEUT
+ {0x8ABC, 0xB4C9}, //1714 #HANGUL SYLLABLE TIKEUT YU RIEULKIYEOK
+ {0x8ABD, 0xB4CA}, //1715 #HANGUL SYLLABLE TIKEUT YU RIEULMIEUM
+ {0x8ABE, 0xB4CB}, //1716 #HANGUL SYLLABLE TIKEUT YU RIEULPIEUP
+ {0x8ABF, 0xB4CC}, //1717 #HANGUL SYLLABLE TIKEUT YU RIEULSIOS
+ {0x8AC0, 0xB4CD}, //1718 #HANGUL SYLLABLE TIKEUT YU RIEULTHIEUTH
+ {0x8AC1, 0xB4CE}, //1719 #HANGUL SYLLABLE TIKEUT YU RIEULPHIEUPH
+ {0x8AC2, 0xB4CF}, //1720 #HANGUL SYLLABLE TIKEUT YU RIEULHIEUH
+ {0x8AC3, 0xB4D1}, //1721 #HANGUL SYLLABLE TIKEUT YU PIEUP
+ {0x8AC4, 0xB4D2}, //1722 #HANGUL SYLLABLE TIKEUT YU PIEUPSIOS
+ {0x8AC5, 0xB4D3}, //1723 #HANGUL SYLLABLE TIKEUT YU SIOS
+ {0x8AC6, 0xB4D4}, //1724 #HANGUL SYLLABLE TIKEUT YU SSANGSIOS
+ {0x8AC7, 0xB4D6}, //1725 #HANGUL SYLLABLE TIKEUT YU CIEUC
+ {0x8AC8, 0xB4D7}, //1726 #HANGUL SYLLABLE TIKEUT YU CHIEUCH
+ {0x8AC9, 0xB4D8}, //1727 #HANGUL SYLLABLE TIKEUT YU KHIEUKH
+ {0x8ACA, 0xB4D9}, //1728 #HANGUL SYLLABLE TIKEUT YU THIEUTH
+ {0x8ACB, 0xB4DA}, //1729 #HANGUL SYLLABLE TIKEUT YU PHIEUPH
+ {0x8ACC, 0xB4DB}, //1730 #HANGUL SYLLABLE TIKEUT YU HIEUH
+ {0x8ACD, 0xB4DE}, //1731 #HANGUL SYLLABLE TIKEUT EU SSANGKIYEOK
+ {0x8ACE, 0xB4DF}, //1732 #HANGUL SYLLABLE TIKEUT EU KIYEOKSIOS
+ {0x8ACF, 0xB4E1}, //1733 #HANGUL SYLLABLE TIKEUT EU NIEUNCIEUC
+ {0x8AD0, 0xB4E2}, //1734 #HANGUL SYLLABLE TIKEUT EU NIEUNHIEUH
+ {0x8AD1, 0xB4E5}, //1735 #HANGUL SYLLABLE TIKEUT EU RIEULKIYEOK
+ {0x8AD2, 0xB4E7}, //1736 #HANGUL SYLLABLE TIKEUT EU RIEULPIEUP
+ {0x8AD3, 0xB4E8}, //1737 #HANGUL SYLLABLE TIKEUT EU RIEULSIOS
+ {0x8AD4, 0xB4E9}, //1738 #HANGUL SYLLABLE TIKEUT EU RIEULTHIEUTH
+ {0x8AD5, 0xB4EA}, //1739 #HANGUL SYLLABLE TIKEUT EU RIEULPHIEUPH
+ {0x8AD6, 0xB4EB}, //1740 #HANGUL SYLLABLE TIKEUT EU RIEULHIEUH
+ {0x8AD7, 0xB4EE}, //1741 #HANGUL SYLLABLE TIKEUT EU PIEUPSIOS
+ {0x8AD8, 0xB4F0}, //1742 #HANGUL SYLLABLE TIKEUT EU SSANGSIOS
+ {0x8AD9, 0xB4F2}, //1743 #HANGUL SYLLABLE TIKEUT EU CIEUC
+ {0x8ADA, 0xB4F3}, //1744 #HANGUL SYLLABLE TIKEUT EU CHIEUCH
+ {0x8ADB, 0xB4F4}, //1745 #HANGUL SYLLABLE TIKEUT EU KHIEUKH
+ {0x8ADC, 0xB4F5}, //1746 #HANGUL SYLLABLE TIKEUT EU THIEUTH
+ {0x8ADD, 0xB4F6}, //1747 #HANGUL SYLLABLE TIKEUT EU PHIEUPH
+ {0x8ADE, 0xB4F7}, //1748 #HANGUL SYLLABLE TIKEUT EU HIEUH
+ {0x8ADF, 0xB4F9}, //1749 #HANGUL SYLLABLE TIKEUT YI KIYEOK
+ {0x8AE0, 0xB4FA}, //1750 #HANGUL SYLLABLE TIKEUT YI SSANGKIYEOK
+ {0x8AE1, 0xB4FB}, //1751 #HANGUL SYLLABLE TIKEUT YI KIYEOKSIOS
+ {0x8AE2, 0xB4FC}, //1752 #HANGUL SYLLABLE TIKEUT YI NIEUN
+ {0x8AE3, 0xB4FD}, //1753 #HANGUL SYLLABLE TIKEUT YI NIEUNCIEUC
+ {0x8AE4, 0xB4FE}, //1754 #HANGUL SYLLABLE TIKEUT YI NIEUNHIEUH
+ {0x8AE5, 0xB4FF}, //1755 #HANGUL SYLLABLE TIKEUT YI TIKEUT
+ {0x8AE6, 0xB500}, //1756 #HANGUL SYLLABLE TIKEUT YI RIEUL
+ {0x8AE7, 0xB501}, //1757 #HANGUL SYLLABLE TIKEUT YI RIEULKIYEOK
+ {0x8AE8, 0xB502}, //1758 #HANGUL SYLLABLE TIKEUT YI RIEULMIEUM
+ {0x8AE9, 0xB503}, //1759 #HANGUL SYLLABLE TIKEUT YI RIEULPIEUP
+ {0x8AEA, 0xB504}, //1760 #HANGUL SYLLABLE TIKEUT YI RIEULSIOS
+ {0x8AEB, 0xB505}, //1761 #HANGUL SYLLABLE TIKEUT YI RIEULTHIEUTH
+ {0x8AEC, 0xB506}, //1762 #HANGUL SYLLABLE TIKEUT YI RIEULPHIEUPH
+ {0x8AED, 0xB507}, //1763 #HANGUL SYLLABLE TIKEUT YI RIEULHIEUH
+ {0x8AEE, 0xB508}, //1764 #HANGUL SYLLABLE TIKEUT YI MIEUM
+ {0x8AEF, 0xB509}, //1765 #HANGUL SYLLABLE TIKEUT YI PIEUP
+ {0x8AF0, 0xB50A}, //1766 #HANGUL SYLLABLE TIKEUT YI PIEUPSIOS
+ {0x8AF1, 0xB50B}, //1767 #HANGUL SYLLABLE TIKEUT YI SIOS
+ {0x8AF2, 0xB50C}, //1768 #HANGUL SYLLABLE TIKEUT YI SSANGSIOS
+ {0x8AF3, 0xB50D}, //1769 #HANGUL SYLLABLE TIKEUT YI IEUNG
+ {0x8AF4, 0xB50E}, //1770 #HANGUL SYLLABLE TIKEUT YI CIEUC
+ {0x8AF5, 0xB50F}, //1771 #HANGUL SYLLABLE TIKEUT YI CHIEUCH
+ {0x8AF6, 0xB510}, //1772 #HANGUL SYLLABLE TIKEUT YI KHIEUKH
+ {0x8AF7, 0xB511}, //1773 #HANGUL SYLLABLE TIKEUT YI THIEUTH
+ {0x8AF8, 0xB512}, //1774 #HANGUL SYLLABLE TIKEUT YI PHIEUPH
+ {0x8AF9, 0xB513}, //1775 #HANGUL SYLLABLE TIKEUT YI HIEUH
+ {0x8AFA, 0xB516}, //1776 #HANGUL SYLLABLE TIKEUT I SSANGKIYEOK
+ {0x8AFB, 0xB517}, //1777 #HANGUL SYLLABLE TIKEUT I KIYEOKSIOS
+ {0x8AFC, 0xB519}, //1778 #HANGUL SYLLABLE TIKEUT I NIEUNCIEUC
+ {0x8AFD, 0xB51A}, //1779 #HANGUL SYLLABLE TIKEUT I NIEUNHIEUH
+ {0x8AFE, 0xB51D}, //1780 #HANGUL SYLLABLE TIKEUT I RIEULKIYEOK
+ {0x8B41, 0xB51E}, //1781 #HANGUL SYLLABLE TIKEUT I RIEULMIEUM
+ {0x8B42, 0xB51F}, //1782 #HANGUL SYLLABLE TIKEUT I RIEULPIEUP
+ {0x8B43, 0xB520}, //1783 #HANGUL SYLLABLE TIKEUT I RIEULSIOS
+ {0x8B44, 0xB521}, //1784 #HANGUL SYLLABLE TIKEUT I RIEULTHIEUTH
+ {0x8B45, 0xB522}, //1785 #HANGUL SYLLABLE TIKEUT I RIEULPHIEUPH
+ {0x8B46, 0xB523}, //1786 #HANGUL SYLLABLE TIKEUT I RIEULHIEUH
+ {0x8B47, 0xB526}, //1787 #HANGUL SYLLABLE TIKEUT I PIEUPSIOS
+ {0x8B48, 0xB52B}, //1788 #HANGUL SYLLABLE TIKEUT I CHIEUCH
+ {0x8B49, 0xB52C}, //1789 #HANGUL SYLLABLE TIKEUT I KHIEUKH
+ {0x8B4A, 0xB52D}, //1790 #HANGUL SYLLABLE TIKEUT I THIEUTH
+ {0x8B4B, 0xB52E}, //1791 #HANGUL SYLLABLE TIKEUT I PHIEUPH
+ {0x8B4C, 0xB52F}, //1792 #HANGUL SYLLABLE TIKEUT I HIEUH
+ {0x8B4D, 0xB532}, //1793 #HANGUL SYLLABLE SSANGTIKEUT A SSANGKIYEOK
+ {0x8B4E, 0xB533}, //1794 #HANGUL SYLLABLE SSANGTIKEUT A KIYEOKSIOS
+ {0x8B4F, 0xB535}, //1795 #HANGUL SYLLABLE SSANGTIKEUT A NIEUNCIEUC
+ {0x8B50, 0xB536}, //1796 #HANGUL SYLLABLE SSANGTIKEUT A NIEUNHIEUH
+ {0x8B51, 0xB537}, //1797 #HANGUL SYLLABLE SSANGTIKEUT A TIKEUT
+ {0x8B52, 0xB539}, //1798 #HANGUL SYLLABLE SSANGTIKEUT A RIEULKIYEOK
+ {0x8B53, 0xB53A}, //1799 #HANGUL SYLLABLE SSANGTIKEUT A RIEULMIEUM
+ {0x8B54, 0xB53B}, //1800 #HANGUL SYLLABLE SSANGTIKEUT A RIEULPIEUP
+ {0x8B55, 0xB53C}, //1801 #HANGUL SYLLABLE SSANGTIKEUT A RIEULSIOS
+ {0x8B56, 0xB53D}, //1802 #HANGUL SYLLABLE SSANGTIKEUT A RIEULTHIEUTH
+ {0x8B57, 0xB53E}, //1803 #HANGUL SYLLABLE SSANGTIKEUT A RIEULPHIEUPH
+ {0x8B58, 0xB53F}, //1804 #HANGUL SYLLABLE SSANGTIKEUT A RIEULHIEUH
+ {0x8B59, 0xB542}, //1805 #HANGUL SYLLABLE SSANGTIKEUT A PIEUPSIOS
+ {0x8B5A, 0xB546}, //1806 #HANGUL SYLLABLE SSANGTIKEUT A CIEUC
+ {0x8B61, 0xB547}, //1807 #HANGUL SYLLABLE SSANGTIKEUT A CHIEUCH
+ {0x8B62, 0xB548}, //1808 #HANGUL SYLLABLE SSANGTIKEUT A KHIEUKH
+ {0x8B63, 0xB549}, //1809 #HANGUL SYLLABLE SSANGTIKEUT A THIEUTH
+ {0x8B64, 0xB54A}, //1810 #HANGUL SYLLABLE SSANGTIKEUT A PHIEUPH
+ {0x8B65, 0xB54E}, //1811 #HANGUL SYLLABLE SSANGTIKEUT AE SSANGKIYEOK
+ {0x8B66, 0xB54F}, //1812 #HANGUL SYLLABLE SSANGTIKEUT AE KIYEOKSIOS
+ {0x8B67, 0xB551}, //1813 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUNCIEUC
+ {0x8B68, 0xB552}, //1814 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUNHIEUH
+ {0x8B69, 0xB553}, //1815 #HANGUL SYLLABLE SSANGTIKEUT AE TIKEUT
+ {0x8B6A, 0xB555}, //1816 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULKIYEOK
+ {0x8B6B, 0xB556}, //1817 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULMIEUM
+ {0x8B6C, 0xB557}, //1818 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULPIEUP
+ {0x8B6D, 0xB558}, //1819 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULSIOS
+ {0x8B6E, 0xB559}, //1820 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULTHIEUTH
+ {0x8B6F, 0xB55A}, //1821 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULPHIEUPH
+ {0x8B70, 0xB55B}, //1822 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULHIEUH
+ {0x8B71, 0xB55E}, //1823 #HANGUL SYLLABLE SSANGTIKEUT AE PIEUPSIOS
+ {0x8B72, 0xB562}, //1824 #HANGUL SYLLABLE SSANGTIKEUT AE CIEUC
+ {0x8B73, 0xB563}, //1825 #HANGUL SYLLABLE SSANGTIKEUT AE CHIEUCH
+ {0x8B74, 0xB564}, //1826 #HANGUL SYLLABLE SSANGTIKEUT AE KHIEUKH
+ {0x8B75, 0xB565}, //1827 #HANGUL SYLLABLE SSANGTIKEUT AE THIEUTH
+ {0x8B76, 0xB566}, //1828 #HANGUL SYLLABLE SSANGTIKEUT AE PHIEUPH
+ {0x8B77, 0xB567}, //1829 #HANGUL SYLLABLE SSANGTIKEUT AE HIEUH
+ {0x8B78, 0xB568}, //1830 #HANGUL SYLLABLE SSANGTIKEUT YA
+ {0x8B79, 0xB569}, //1831 #HANGUL SYLLABLE SSANGTIKEUT YA KIYEOK
+ {0x8B7A, 0xB56A}, //1832 #HANGUL SYLLABLE SSANGTIKEUT YA SSANGKIYEOK
+ {0x8B81, 0xB56B}, //1833 #HANGUL SYLLABLE SSANGTIKEUT YA KIYEOKSIOS
+ {0x8B82, 0xB56C}, //1834 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUN
+ {0x8B83, 0xB56D}, //1835 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUNCIEUC
+ {0x8B84, 0xB56E}, //1836 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUNHIEUH
+ {0x8B85, 0xB56F}, //1837 #HANGUL SYLLABLE SSANGTIKEUT YA TIKEUT
+ {0x8B86, 0xB570}, //1838 #HANGUL SYLLABLE SSANGTIKEUT YA RIEUL
+ {0x8B87, 0xB571}, //1839 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULKIYEOK
+ {0x8B88, 0xB572}, //1840 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULMIEUM
+ {0x8B89, 0xB573}, //1841 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULPIEUP
+ {0x8B8A, 0xB574}, //1842 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULSIOS
+ {0x8B8B, 0xB575}, //1843 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULTHIEUTH
+ {0x8B8C, 0xB576}, //1844 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULPHIEUPH
+ {0x8B8D, 0xB577}, //1845 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULHIEUH
+ {0x8B8E, 0xB578}, //1846 #HANGUL SYLLABLE SSANGTIKEUT YA MIEUM
+ {0x8B8F, 0xB579}, //1847 #HANGUL SYLLABLE SSANGTIKEUT YA PIEUP
+ {0x8B90, 0xB57A}, //1848 #HANGUL SYLLABLE SSANGTIKEUT YA PIEUPSIOS
+ {0x8B91, 0xB57B}, //1849 #HANGUL SYLLABLE SSANGTIKEUT YA SIOS
+ {0x8B92, 0xB57C}, //1850 #HANGUL SYLLABLE SSANGTIKEUT YA SSANGSIOS
+ {0x8B93, 0xB57D}, //1851 #HANGUL SYLLABLE SSANGTIKEUT YA IEUNG
+ {0x8B94, 0xB57E}, //1852 #HANGUL SYLLABLE SSANGTIKEUT YA CIEUC
+ {0x8B95, 0xB57F}, //1853 #HANGUL SYLLABLE SSANGTIKEUT YA CHIEUCH
+ {0x8B96, 0xB580}, //1854 #HANGUL SYLLABLE SSANGTIKEUT YA KHIEUKH
+ {0x8B97, 0xB581}, //1855 #HANGUL SYLLABLE SSANGTIKEUT YA THIEUTH
+ {0x8B98, 0xB582}, //1856 #HANGUL SYLLABLE SSANGTIKEUT YA PHIEUPH
+ {0x8B99, 0xB583}, //1857 #HANGUL SYLLABLE SSANGTIKEUT YA HIEUH
+ {0x8B9A, 0xB584}, //1858 #HANGUL SYLLABLE SSANGTIKEUT YAE
+ {0x8B9B, 0xB585}, //1859 #HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOK
+ {0x8B9C, 0xB586}, //1860 #HANGUL SYLLABLE SSANGTIKEUT YAE SSANGKIYEOK
+ {0x8B9D, 0xB587}, //1861 #HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOKSIOS
+ {0x8B9E, 0xB588}, //1862 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUN
+ {0x8B9F, 0xB589}, //1863 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNCIEUC
+ {0x8BA0, 0xB58A}, //1864 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNHIEUH
+ {0x8BA1, 0xB58B}, //1865 #HANGUL SYLLABLE SSANGTIKEUT YAE TIKEUT
+ {0x8BA2, 0xB58C}, //1866 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEUL
+ {0x8BA3, 0xB58D}, //1867 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULKIYEOK
+ {0x8BA4, 0xB58E}, //1868 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULMIEUM
+ {0x8BA5, 0xB58F}, //1869 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPIEUP
+ {0x8BA6, 0xB590}, //1870 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULSIOS
+ {0x8BA7, 0xB591}, //1871 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULTHIEUTH
+ {0x8BA8, 0xB592}, //1872 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPHIEUPH
+ {0x8BA9, 0xB593}, //1873 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULHIEUH
+ {0x8BAA, 0xB594}, //1874 #HANGUL SYLLABLE SSANGTIKEUT YAE MIEUM
+ {0x8BAB, 0xB595}, //1875 #HANGUL SYLLABLE SSANGTIKEUT YAE PIEUP
+ {0x8BAC, 0xB596}, //1876 #HANGUL SYLLABLE SSANGTIKEUT YAE PIEUPSIOS
+ {0x8BAD, 0xB597}, //1877 #HANGUL SYLLABLE SSANGTIKEUT YAE SIOS
+ {0x8BAE, 0xB598}, //1878 #HANGUL SYLLABLE SSANGTIKEUT YAE SSANGSIOS
+ {0x8BAF, 0xB599}, //1879 #HANGUL SYLLABLE SSANGTIKEUT YAE IEUNG
+ {0x8BB0, 0xB59A}, //1880 #HANGUL SYLLABLE SSANGTIKEUT YAE CIEUC
+ {0x8BB1, 0xB59B}, //1881 #HANGUL SYLLABLE SSANGTIKEUT YAE CHIEUCH
+ {0x8BB2, 0xB59C}, //1882 #HANGUL SYLLABLE SSANGTIKEUT YAE KHIEUKH
+ {0x8BB3, 0xB59D}, //1883 #HANGUL SYLLABLE SSANGTIKEUT YAE THIEUTH
+ {0x8BB4, 0xB59E}, //1884 #HANGUL SYLLABLE SSANGTIKEUT YAE PHIEUPH
+ {0x8BB5, 0xB59F}, //1885 #HANGUL SYLLABLE SSANGTIKEUT YAE HIEUH
+ {0x8BB6, 0xB5A2}, //1886 #HANGUL SYLLABLE SSANGTIKEUT EO SSANGKIYEOK
+ {0x8BB7, 0xB5A3}, //1887 #HANGUL SYLLABLE SSANGTIKEUT EO KIYEOKSIOS
+ {0x8BB8, 0xB5A5}, //1888 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUNCIEUC
+ {0x8BB9, 0xB5A6}, //1889 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUNHIEUH
+ {0x8BBA, 0xB5A7}, //1890 #HANGUL SYLLABLE SSANGTIKEUT EO TIKEUT
+ {0x8BBB, 0xB5A9}, //1891 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULKIYEOK
+ {0x8BBC, 0xB5AC}, //1892 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULSIOS
+ {0x8BBD, 0xB5AD}, //1893 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULTHIEUTH
+ {0x8BBE, 0xB5AE}, //1894 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULPHIEUPH
+ {0x8BBF, 0xB5AF}, //1895 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULHIEUH
+ {0x8BC0, 0xB5B2}, //1896 #HANGUL SYLLABLE SSANGTIKEUT EO PIEUPSIOS
+ {0x8BC1, 0xB5B6}, //1897 #HANGUL SYLLABLE SSANGTIKEUT EO CIEUC
+ {0x8BC2, 0xB5B7}, //1898 #HANGUL SYLLABLE SSANGTIKEUT EO CHIEUCH
+ {0x8BC3, 0xB5B8}, //1899 #HANGUL SYLLABLE SSANGTIKEUT EO KHIEUKH
+ {0x8BC4, 0xB5B9}, //1900 #HANGUL SYLLABLE SSANGTIKEUT EO THIEUTH
+ {0x8BC5, 0xB5BA}, //1901 #HANGUL SYLLABLE SSANGTIKEUT EO PHIEUPH
+ {0x8BC6, 0xB5BE}, //1902 #HANGUL SYLLABLE SSANGTIKEUT E SSANGKIYEOK
+ {0x8BC7, 0xB5BF}, //1903 #HANGUL SYLLABLE SSANGTIKEUT E KIYEOKSIOS
+ {0x8BC8, 0xB5C1}, //1904 #HANGUL SYLLABLE SSANGTIKEUT E NIEUNCIEUC
+ {0x8BC9, 0xB5C2}, //1905 #HANGUL SYLLABLE SSANGTIKEUT E NIEUNHIEUH
+ {0x8BCA, 0xB5C3}, //1906 #HANGUL SYLLABLE SSANGTIKEUT E TIKEUT
+ {0x8BCB, 0xB5C5}, //1907 #HANGUL SYLLABLE SSANGTIKEUT E RIEULKIYEOK
+ {0x8BCC, 0xB5C6}, //1908 #HANGUL SYLLABLE SSANGTIKEUT E RIEULMIEUM
+ {0x8BCD, 0xB5C7}, //1909 #HANGUL SYLLABLE SSANGTIKEUT E RIEULPIEUP
+ {0x8BCE, 0xB5C8}, //1910 #HANGUL SYLLABLE SSANGTIKEUT E RIEULSIOS
+ {0x8BCF, 0xB5C9}, //1911 #HANGUL SYLLABLE SSANGTIKEUT E RIEULTHIEUTH
+ {0x8BD0, 0xB5CA}, //1912 #HANGUL SYLLABLE SSANGTIKEUT E RIEULPHIEUPH
+ {0x8BD1, 0xB5CB}, //1913 #HANGUL SYLLABLE SSANGTIKEUT E RIEULHIEUH
+ {0x8BD2, 0xB5CE}, //1914 #HANGUL SYLLABLE SSANGTIKEUT E PIEUPSIOS
+ {0x8BD3, 0xB5D2}, //1915 #HANGUL SYLLABLE SSANGTIKEUT E CIEUC
+ {0x8BD4, 0xB5D3}, //1916 #HANGUL SYLLABLE SSANGTIKEUT E CHIEUCH
+ {0x8BD5, 0xB5D4}, //1917 #HANGUL SYLLABLE SSANGTIKEUT E KHIEUKH
+ {0x8BD6, 0xB5D5}, //1918 #HANGUL SYLLABLE SSANGTIKEUT E THIEUTH
+ {0x8BD7, 0xB5D6}, //1919 #HANGUL SYLLABLE SSANGTIKEUT E PHIEUPH
+ {0x8BD8, 0xB5D7}, //1920 #HANGUL SYLLABLE SSANGTIKEUT E HIEUH
+ {0x8BD9, 0xB5D9}, //1921 #HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOK
+ {0x8BDA, 0xB5DA}, //1922 #HANGUL SYLLABLE SSANGTIKEUT YEO SSANGKIYEOK
+ {0x8BDB, 0xB5DB}, //1923 #HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOKSIOS
+ {0x8BDC, 0xB5DC}, //1924 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUN
+ {0x8BDD, 0xB5DD}, //1925 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNCIEUC
+ {0x8BDE, 0xB5DE}, //1926 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNHIEUH
+ {0x8BDF, 0xB5DF}, //1927 #HANGUL SYLLABLE SSANGTIKEUT YEO TIKEUT
+ {0x8BE0, 0xB5E0}, //1928 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEUL
+ {0x8BE1, 0xB5E1}, //1929 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULKIYEOK
+ {0x8BE2, 0xB5E2}, //1930 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULMIEUM
+ {0x8BE3, 0xB5E3}, //1931 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPIEUP
+ {0x8BE4, 0xB5E4}, //1932 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULSIOS
+ {0x8BE5, 0xB5E5}, //1933 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULTHIEUTH
+ {0x8BE6, 0xB5E6}, //1934 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPHIEUPH
+ {0x8BE7, 0xB5E7}, //1935 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULHIEUH
+ {0x8BE8, 0xB5E8}, //1936 #HANGUL SYLLABLE SSANGTIKEUT YEO MIEUM
+ {0x8BE9, 0xB5E9}, //1937 #HANGUL SYLLABLE SSANGTIKEUT YEO PIEUP
+ {0x8BEA, 0xB5EA}, //1938 #HANGUL SYLLABLE SSANGTIKEUT YEO PIEUPSIOS
+ {0x8BEB, 0xB5EB}, //1939 #HANGUL SYLLABLE SSANGTIKEUT YEO SIOS
+ {0x8BEC, 0xB5ED}, //1940 #HANGUL SYLLABLE SSANGTIKEUT YEO IEUNG
+ {0x8BED, 0xB5EE}, //1941 #HANGUL SYLLABLE SSANGTIKEUT YEO CIEUC
+ {0x8BEE, 0xB5EF}, //1942 #HANGUL SYLLABLE SSANGTIKEUT YEO CHIEUCH
+ {0x8BEF, 0xB5F0}, //1943 #HANGUL SYLLABLE SSANGTIKEUT YEO KHIEUKH
+ {0x8BF0, 0xB5F1}, //1944 #HANGUL SYLLABLE SSANGTIKEUT YEO THIEUTH
+ {0x8BF1, 0xB5F2}, //1945 #HANGUL SYLLABLE SSANGTIKEUT YEO PHIEUPH
+ {0x8BF2, 0xB5F3}, //1946 #HANGUL SYLLABLE SSANGTIKEUT YEO HIEUH
+ {0x8BF3, 0xB5F4}, //1947 #HANGUL SYLLABLE SSANGTIKEUT YE
+ {0x8BF4, 0xB5F5}, //1948 #HANGUL SYLLABLE SSANGTIKEUT YE KIYEOK
+ {0x8BF5, 0xB5F6}, //1949 #HANGUL SYLLABLE SSANGTIKEUT YE SSANGKIYEOK
+ {0x8BF6, 0xB5F7}, //1950 #HANGUL SYLLABLE SSANGTIKEUT YE KIYEOKSIOS
+ {0x8BF7, 0xB5F8}, //1951 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUN
+ {0x8BF8, 0xB5F9}, //1952 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUNCIEUC
+ {0x8BF9, 0xB5FA}, //1953 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUNHIEUH
+ {0x8BFA, 0xB5FB}, //1954 #HANGUL SYLLABLE SSANGTIKEUT YE TIKEUT
+ {0x8BFB, 0xB5FC}, //1955 #HANGUL SYLLABLE SSANGTIKEUT YE RIEUL
+ {0x8BFC, 0xB5FD}, //1956 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULKIYEOK
+ {0x8BFD, 0xB5FE}, //1957 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULMIEUM
+ {0x8BFE, 0xB5FF}, //1958 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULPIEUP
+ {0x8C41, 0xB600}, //1959 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULSIOS
+ {0x8C42, 0xB601}, //1960 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULTHIEUTH
+ {0x8C43, 0xB602}, //1961 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULPHIEUPH
+ {0x8C44, 0xB603}, //1962 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULHIEUH
+ {0x8C45, 0xB604}, //1963 #HANGUL SYLLABLE SSANGTIKEUT YE MIEUM
+ {0x8C46, 0xB605}, //1964 #HANGUL SYLLABLE SSANGTIKEUT YE PIEUP
+ {0x8C47, 0xB606}, //1965 #HANGUL SYLLABLE SSANGTIKEUT YE PIEUPSIOS
+ {0x8C48, 0xB607}, //1966 #HANGUL SYLLABLE SSANGTIKEUT YE SIOS
+ {0x8C49, 0xB608}, //1967 #HANGUL SYLLABLE SSANGTIKEUT YE SSANGSIOS
+ {0x8C4A, 0xB609}, //1968 #HANGUL SYLLABLE SSANGTIKEUT YE IEUNG
+ {0x8C4B, 0xB60A}, //1969 #HANGUL SYLLABLE SSANGTIKEUT YE CIEUC
+ {0x8C4C, 0xB60B}, //1970 #HANGUL SYLLABLE SSANGTIKEUT YE CHIEUCH
+ {0x8C4D, 0xB60C}, //1971 #HANGUL SYLLABLE SSANGTIKEUT YE KHIEUKH
+ {0x8C4E, 0xB60D}, //1972 #HANGUL SYLLABLE SSANGTIKEUT YE THIEUTH
+ {0x8C4F, 0xB60E}, //1973 #HANGUL SYLLABLE SSANGTIKEUT YE PHIEUPH
+ {0x8C50, 0xB60F}, //1974 #HANGUL SYLLABLE SSANGTIKEUT YE HIEUH
+ {0x8C51, 0xB612}, //1975 #HANGUL SYLLABLE SSANGTIKEUT O SSANGKIYEOK
+ {0x8C52, 0xB613}, //1976 #HANGUL SYLLABLE SSANGTIKEUT O KIYEOKSIOS
+ {0x8C53, 0xB615}, //1977 #HANGUL SYLLABLE SSANGTIKEUT O NIEUNCIEUC
+ {0x8C54, 0xB616}, //1978 #HANGUL SYLLABLE SSANGTIKEUT O NIEUNHIEUH
+ {0x8C55, 0xB617}, //1979 #HANGUL SYLLABLE SSANGTIKEUT O TIKEUT
+ {0x8C56, 0xB619}, //1980 #HANGUL SYLLABLE SSANGTIKEUT O RIEULKIYEOK
+ {0x8C57, 0xB61A}, //1981 #HANGUL SYLLABLE SSANGTIKEUT O RIEULMIEUM
+ {0x8C58, 0xB61B}, //1982 #HANGUL SYLLABLE SSANGTIKEUT O RIEULPIEUP
+ {0x8C59, 0xB61C}, //1983 #HANGUL SYLLABLE SSANGTIKEUT O RIEULSIOS
+ {0x8C5A, 0xB61D}, //1984 #HANGUL SYLLABLE SSANGTIKEUT O RIEULTHIEUTH
+ {0x8C61, 0xB61E}, //1985 #HANGUL SYLLABLE SSANGTIKEUT O RIEULPHIEUPH
+ {0x8C62, 0xB61F}, //1986 #HANGUL SYLLABLE SSANGTIKEUT O RIEULHIEUH
+ {0x8C63, 0xB620}, //1987 #HANGUL SYLLABLE SSANGTIKEUT O MIEUM
+ {0x8C64, 0xB621}, //1988 #HANGUL SYLLABLE SSANGTIKEUT O PIEUP
+ {0x8C65, 0xB622}, //1989 #HANGUL SYLLABLE SSANGTIKEUT O PIEUPSIOS
+ {0x8C66, 0xB623}, //1990 #HANGUL SYLLABLE SSANGTIKEUT O SIOS
+ {0x8C67, 0xB624}, //1991 #HANGUL SYLLABLE SSANGTIKEUT O SSANGSIOS
+ {0x8C68, 0xB626}, //1992 #HANGUL SYLLABLE SSANGTIKEUT O CIEUC
+ {0x8C69, 0xB627}, //1993 #HANGUL SYLLABLE SSANGTIKEUT O CHIEUCH
+ {0x8C6A, 0xB628}, //1994 #HANGUL SYLLABLE SSANGTIKEUT O KHIEUKH
+ {0x8C6B, 0xB629}, //1995 #HANGUL SYLLABLE SSANGTIKEUT O THIEUTH
+ {0x8C6C, 0xB62A}, //1996 #HANGUL SYLLABLE SSANGTIKEUT O PHIEUPH
+ {0x8C6D, 0xB62B}, //1997 #HANGUL SYLLABLE SSANGTIKEUT O HIEUH
+ {0x8C6E, 0xB62D}, //1998 #HANGUL SYLLABLE SSANGTIKEUT WA KIYEOK
+ {0x8C6F, 0xB62E}, //1999 #HANGUL SYLLABLE SSANGTIKEUT WA SSANGKIYEOK
+ {0x8C70, 0xB62F}, //2000 #HANGUL SYLLABLE SSANGTIKEUT WA KIYEOKSIOS
+ {0x8C71, 0xB630}, //2001 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUN
+ {0x8C72, 0xB631}, //2002 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUNCIEUC
+ {0x8C73, 0xB632}, //2003 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUNHIEUH
+ {0x8C74, 0xB633}, //2004 #HANGUL SYLLABLE SSANGTIKEUT WA TIKEUT
+ {0x8C75, 0xB635}, //2005 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULKIYEOK
+ {0x8C76, 0xB636}, //2006 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULMIEUM
+ {0x8C77, 0xB637}, //2007 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULPIEUP
+ {0x8C78, 0xB638}, //2008 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULSIOS
+ {0x8C79, 0xB639}, //2009 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULTHIEUTH
+ {0x8C7A, 0xB63A}, //2010 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULPHIEUPH
+ {0x8C81, 0xB63B}, //2011 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULHIEUH
+ {0x8C82, 0xB63C}, //2012 #HANGUL SYLLABLE SSANGTIKEUT WA MIEUM
+ {0x8C83, 0xB63D}, //2013 #HANGUL SYLLABLE SSANGTIKEUT WA PIEUP
+ {0x8C84, 0xB63E}, //2014 #HANGUL SYLLABLE SSANGTIKEUT WA PIEUPSIOS
+ {0x8C85, 0xB63F}, //2015 #HANGUL SYLLABLE SSANGTIKEUT WA SIOS
+ {0x8C86, 0xB640}, //2016 #HANGUL SYLLABLE SSANGTIKEUT WA SSANGSIOS
+ {0x8C87, 0xB641}, //2017 #HANGUL SYLLABLE SSANGTIKEUT WA IEUNG
+ {0x8C88, 0xB642}, //2018 #HANGUL SYLLABLE SSANGTIKEUT WA CIEUC
+ {0x8C89, 0xB643}, //2019 #HANGUL SYLLABLE SSANGTIKEUT WA CHIEUCH
+ {0x8C8A, 0xB644}, //2020 #HANGUL SYLLABLE SSANGTIKEUT WA KHIEUKH
+ {0x8C8B, 0xB645}, //2021 #HANGUL SYLLABLE SSANGTIKEUT WA THIEUTH
+ {0x8C8C, 0xB646}, //2022 #HANGUL SYLLABLE SSANGTIKEUT WA PHIEUPH
+ {0x8C8D, 0xB647}, //2023 #HANGUL SYLLABLE SSANGTIKEUT WA HIEUH
+ {0x8C8E, 0xB649}, //2024 #HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOK
+ {0x8C8F, 0xB64A}, //2025 #HANGUL SYLLABLE SSANGTIKEUT WAE SSANGKIYEOK
+ {0x8C90, 0xB64B}, //2026 #HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOKSIOS
+ {0x8C91, 0xB64C}, //2027 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUN
+ {0x8C92, 0xB64D}, //2028 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNCIEUC
+ {0x8C93, 0xB64E}, //2029 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNHIEUH
+ {0x8C94, 0xB64F}, //2030 #HANGUL SYLLABLE SSANGTIKEUT WAE TIKEUT
+ {0x8C95, 0xB650}, //2031 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEUL
+ {0x8C96, 0xB651}, //2032 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULKIYEOK
+ {0x8C97, 0xB652}, //2033 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULMIEUM
+ {0x8C98, 0xB653}, //2034 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPIEUP
+ {0x8C99, 0xB654}, //2035 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULSIOS
+ {0x8C9A, 0xB655}, //2036 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULTHIEUTH
+ {0x8C9B, 0xB656}, //2037 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPHIEUPH
+ {0x8C9C, 0xB657}, //2038 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULHIEUH
+ {0x8C9D, 0xB658}, //2039 #HANGUL SYLLABLE SSANGTIKEUT WAE MIEUM
+ {0x8C9E, 0xB659}, //2040 #HANGUL SYLLABLE SSANGTIKEUT WAE PIEUP
+ {0x8C9F, 0xB65A}, //2041 #HANGUL SYLLABLE SSANGTIKEUT WAE PIEUPSIOS
+ {0x8CA0, 0xB65B}, //2042 #HANGUL SYLLABLE SSANGTIKEUT WAE SIOS
+ {0x8CA1, 0xB65C}, //2043 #HANGUL SYLLABLE SSANGTIKEUT WAE SSANGSIOS
+ {0x8CA2, 0xB65D}, //2044 #HANGUL SYLLABLE SSANGTIKEUT WAE IEUNG
+ {0x8CA3, 0xB65E}, //2045 #HANGUL SYLLABLE SSANGTIKEUT WAE CIEUC
+ {0x8CA4, 0xB65F}, //2046 #HANGUL SYLLABLE SSANGTIKEUT WAE CHIEUCH
+ {0x8CA5, 0xB660}, //2047 #HANGUL SYLLABLE SSANGTIKEUT WAE KHIEUKH
+ {0x8CA6, 0xB661}, //2048 #HANGUL SYLLABLE SSANGTIKEUT WAE THIEUTH
+ {0x8CA7, 0xB662}, //2049 #HANGUL SYLLABLE SSANGTIKEUT WAE PHIEUPH
+ {0x8CA8, 0xB663}, //2050 #HANGUL SYLLABLE SSANGTIKEUT WAE HIEUH
+ {0x8CA9, 0xB665}, //2051 #HANGUL SYLLABLE SSANGTIKEUT OE KIYEOK
+ {0x8CAA, 0xB666}, //2052 #HANGUL SYLLABLE SSANGTIKEUT OE SSANGKIYEOK
+ {0x8CAB, 0xB667}, //2053 #HANGUL SYLLABLE SSANGTIKEUT OE KIYEOKSIOS
+ {0x8CAC, 0xB669}, //2054 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUNCIEUC
+ {0x8CAD, 0xB66A}, //2055 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUNHIEUH
+ {0x8CAE, 0xB66B}, //2056 #HANGUL SYLLABLE SSANGTIKEUT OE TIKEUT
+ {0x8CAF, 0xB66C}, //2057 #HANGUL SYLLABLE SSANGTIKEUT OE RIEUL
+ {0x8CB0, 0xB66D}, //2058 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULKIYEOK
+ {0x8CB1, 0xB66E}, //2059 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULMIEUM
+ {0x8CB2, 0xB66F}, //2060 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULPIEUP
+ {0x8CB3, 0xB670}, //2061 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULSIOS
+ {0x8CB4, 0xB671}, //2062 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULTHIEUTH
+ {0x8CB5, 0xB672}, //2063 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULPHIEUPH
+ {0x8CB6, 0xB673}, //2064 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULHIEUH
+ {0x8CB7, 0xB674}, //2065 #HANGUL SYLLABLE SSANGTIKEUT OE MIEUM
+ {0x8CB8, 0xB675}, //2066 #HANGUL SYLLABLE SSANGTIKEUT OE PIEUP
+ {0x8CB9, 0xB676}, //2067 #HANGUL SYLLABLE SSANGTIKEUT OE PIEUPSIOS
+ {0x8CBA, 0xB677}, //2068 #HANGUL SYLLABLE SSANGTIKEUT OE SIOS
+ {0x8CBB, 0xB678}, //2069 #HANGUL SYLLABLE SSANGTIKEUT OE SSANGSIOS
+ {0x8CBC, 0xB679}, //2070 #HANGUL SYLLABLE SSANGTIKEUT OE IEUNG
+ {0x8CBD, 0xB67A}, //2071 #HANGUL SYLLABLE SSANGTIKEUT OE CIEUC
+ {0x8CBE, 0xB67B}, //2072 #HANGUL SYLLABLE SSANGTIKEUT OE CHIEUCH
+ {0x8CBF, 0xB67C}, //2073 #HANGUL SYLLABLE SSANGTIKEUT OE KHIEUKH
+ {0x8CC0, 0xB67D}, //2074 #HANGUL SYLLABLE SSANGTIKEUT OE THIEUTH
+ {0x8CC1, 0xB67E}, //2075 #HANGUL SYLLABLE SSANGTIKEUT OE PHIEUPH
+ {0x8CC2, 0xB67F}, //2076 #HANGUL SYLLABLE SSANGTIKEUT OE HIEUH
+ {0x8CC3, 0xB680}, //2077 #HANGUL SYLLABLE SSANGTIKEUT YO
+ {0x8CC4, 0xB681}, //2078 #HANGUL SYLLABLE SSANGTIKEUT YO KIYEOK
+ {0x8CC5, 0xB682}, //2079 #HANGUL SYLLABLE SSANGTIKEUT YO SSANGKIYEOK
+ {0x8CC6, 0xB683}, //2080 #HANGUL SYLLABLE SSANGTIKEUT YO KIYEOKSIOS
+ {0x8CC7, 0xB684}, //2081 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUN
+ {0x8CC8, 0xB685}, //2082 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUNCIEUC
+ {0x8CC9, 0xB686}, //2083 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUNHIEUH
+ {0x8CCA, 0xB687}, //2084 #HANGUL SYLLABLE SSANGTIKEUT YO TIKEUT
+ {0x8CCB, 0xB688}, //2085 #HANGUL SYLLABLE SSANGTIKEUT YO RIEUL
+ {0x8CCC, 0xB689}, //2086 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULKIYEOK
+ {0x8CCD, 0xB68A}, //2087 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULMIEUM
+ {0x8CCE, 0xB68B}, //2088 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULPIEUP
+ {0x8CCF, 0xB68C}, //2089 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULSIOS
+ {0x8CD0, 0xB68D}, //2090 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULTHIEUTH
+ {0x8CD1, 0xB68E}, //2091 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULPHIEUPH
+ {0x8CD2, 0xB68F}, //2092 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULHIEUH
+ {0x8CD3, 0xB690}, //2093 #HANGUL SYLLABLE SSANGTIKEUT YO MIEUM
+ {0x8CD4, 0xB691}, //2094 #HANGUL SYLLABLE SSANGTIKEUT YO PIEUP
+ {0x8CD5, 0xB692}, //2095 #HANGUL SYLLABLE SSANGTIKEUT YO PIEUPSIOS
+ {0x8CD6, 0xB693}, //2096 #HANGUL SYLLABLE SSANGTIKEUT YO SIOS
+ {0x8CD7, 0xB694}, //2097 #HANGUL SYLLABLE SSANGTIKEUT YO SSANGSIOS
+ {0x8CD8, 0xB695}, //2098 #HANGUL SYLLABLE SSANGTIKEUT YO IEUNG
+ {0x8CD9, 0xB696}, //2099 #HANGUL SYLLABLE SSANGTIKEUT YO CIEUC
+ {0x8CDA, 0xB697}, //2100 #HANGUL SYLLABLE SSANGTIKEUT YO CHIEUCH
+ {0x8CDB, 0xB698}, //2101 #HANGUL SYLLABLE SSANGTIKEUT YO KHIEUKH
+ {0x8CDC, 0xB699}, //2102 #HANGUL SYLLABLE SSANGTIKEUT YO THIEUTH
+ {0x8CDD, 0xB69A}, //2103 #HANGUL SYLLABLE SSANGTIKEUT YO PHIEUPH
+ {0x8CDE, 0xB69B}, //2104 #HANGUL SYLLABLE SSANGTIKEUT YO HIEUH
+ {0x8CDF, 0xB69E}, //2105 #HANGUL SYLLABLE SSANGTIKEUT U SSANGKIYEOK
+ {0x8CE0, 0xB69F}, //2106 #HANGUL SYLLABLE SSANGTIKEUT U KIYEOKSIOS
+ {0x8CE1, 0xB6A1}, //2107 #HANGUL SYLLABLE SSANGTIKEUT U NIEUNCIEUC
+ {0x8CE2, 0xB6A2}, //2108 #HANGUL SYLLABLE SSANGTIKEUT U NIEUNHIEUH
+ {0x8CE3, 0xB6A3}, //2109 #HANGUL SYLLABLE SSANGTIKEUT U TIKEUT
+ {0x8CE4, 0xB6A5}, //2110 #HANGUL SYLLABLE SSANGTIKEUT U RIEULKIYEOK
+ {0x8CE5, 0xB6A6}, //2111 #HANGUL SYLLABLE SSANGTIKEUT U RIEULMIEUM
+ {0x8CE6, 0xB6A7}, //2112 #HANGUL SYLLABLE SSANGTIKEUT U RIEULPIEUP
+ {0x8CE7, 0xB6A8}, //2113 #HANGUL SYLLABLE SSANGTIKEUT U RIEULSIOS
+ {0x8CE8, 0xB6A9}, //2114 #HANGUL SYLLABLE SSANGTIKEUT U RIEULTHIEUTH
+ {0x8CE9, 0xB6AA}, //2115 #HANGUL SYLLABLE SSANGTIKEUT U RIEULPHIEUPH
+ {0x8CEA, 0xB6AD}, //2116 #HANGUL SYLLABLE SSANGTIKEUT U PIEUP
+ {0x8CEB, 0xB6AE}, //2117 #HANGUL SYLLABLE SSANGTIKEUT U PIEUPSIOS
+ {0x8CEC, 0xB6AF}, //2118 #HANGUL SYLLABLE SSANGTIKEUT U SIOS
+ {0x8CED, 0xB6B0}, //2119 #HANGUL SYLLABLE SSANGTIKEUT U SSANGSIOS
+ {0x8CEE, 0xB6B2}, //2120 #HANGUL SYLLABLE SSANGTIKEUT U CIEUC
+ {0x8CEF, 0xB6B3}, //2121 #HANGUL SYLLABLE SSANGTIKEUT U CHIEUCH
+ {0x8CF0, 0xB6B4}, //2122 #HANGUL SYLLABLE SSANGTIKEUT U KHIEUKH
+ {0x8CF1, 0xB6B5}, //2123 #HANGUL SYLLABLE SSANGTIKEUT U THIEUTH
+ {0x8CF2, 0xB6B6}, //2124 #HANGUL SYLLABLE SSANGTIKEUT U PHIEUPH
+ {0x8CF3, 0xB6B7}, //2125 #HANGUL SYLLABLE SSANGTIKEUT U HIEUH
+ {0x8CF4, 0xB6B8}, //2126 #HANGUL SYLLABLE SSANGTIKEUT WEO
+ {0x8CF5, 0xB6B9}, //2127 #HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOK
+ {0x8CF6, 0xB6BA}, //2128 #HANGUL SYLLABLE SSANGTIKEUT WEO SSANGKIYEOK
+ {0x8CF7, 0xB6BB}, //2129 #HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOKSIOS
+ {0x8CF8, 0xB6BC}, //2130 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUN
+ {0x8CF9, 0xB6BD}, //2131 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNCIEUC
+ {0x8CFA, 0xB6BE}, //2132 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNHIEUH
+ {0x8CFB, 0xB6BF}, //2133 #HANGUL SYLLABLE SSANGTIKEUT WEO TIKEUT
+ {0x8CFC, 0xB6C0}, //2134 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEUL
+ {0x8CFD, 0xB6C1}, //2135 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULKIYEOK
+ {0x8CFE, 0xB6C2}, //2136 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULMIEUM
+ {0x8D41, 0xB6C3}, //2137 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPIEUP
+ {0x8D42, 0xB6C4}, //2138 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULSIOS
+ {0x8D43, 0xB6C5}, //2139 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULTHIEUTH
+ {0x8D44, 0xB6C6}, //2140 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPHIEUPH
+ {0x8D45, 0xB6C7}, //2141 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULHIEUH
+ {0x8D46, 0xB6C8}, //2142 #HANGUL SYLLABLE SSANGTIKEUT WEO MIEUM
+ {0x8D47, 0xB6C9}, //2143 #HANGUL SYLLABLE SSANGTIKEUT WEO PIEUP
+ {0x8D48, 0xB6CA}, //2144 #HANGUL SYLLABLE SSANGTIKEUT WEO PIEUPSIOS
+ {0x8D49, 0xB6CB}, //2145 #HANGUL SYLLABLE SSANGTIKEUT WEO SIOS
+ {0x8D4A, 0xB6CC}, //2146 #HANGUL SYLLABLE SSANGTIKEUT WEO SSANGSIOS
+ {0x8D4B, 0xB6CD}, //2147 #HANGUL SYLLABLE SSANGTIKEUT WEO IEUNG
+ {0x8D4C, 0xB6CE}, //2148 #HANGUL SYLLABLE SSANGTIKEUT WEO CIEUC
+ {0x8D4D, 0xB6CF}, //2149 #HANGUL SYLLABLE SSANGTIKEUT WEO CHIEUCH
+ {0x8D4E, 0xB6D0}, //2150 #HANGUL SYLLABLE SSANGTIKEUT WEO KHIEUKH
+ {0x8D4F, 0xB6D1}, //2151 #HANGUL SYLLABLE SSANGTIKEUT WEO THIEUTH
+ {0x8D50, 0xB6D2}, //2152 #HANGUL SYLLABLE SSANGTIKEUT WEO PHIEUPH
+ {0x8D51, 0xB6D3}, //2153 #HANGUL SYLLABLE SSANGTIKEUT WEO HIEUH
+ {0x8D52, 0xB6D5}, //2154 #HANGUL SYLLABLE SSANGTIKEUT WE KIYEOK
+ {0x8D53, 0xB6D6}, //2155 #HANGUL SYLLABLE SSANGTIKEUT WE SSANGKIYEOK
+ {0x8D54, 0xB6D7}, //2156 #HANGUL SYLLABLE SSANGTIKEUT WE KIYEOKSIOS
+ {0x8D55, 0xB6D8}, //2157 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUN
+ {0x8D56, 0xB6D9}, //2158 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUNCIEUC
+ {0x8D57, 0xB6DA}, //2159 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUNHIEUH
+ {0x8D58, 0xB6DB}, //2160 #HANGUL SYLLABLE SSANGTIKEUT WE TIKEUT
+ {0x8D59, 0xB6DC}, //2161 #HANGUL SYLLABLE SSANGTIKEUT WE RIEUL
+ {0x8D5A, 0xB6DD}, //2162 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULKIYEOK
+ {0x8D61, 0xB6DE}, //2163 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULMIEUM
+ {0x8D62, 0xB6DF}, //2164 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULPIEUP
+ {0x8D63, 0xB6E0}, //2165 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULSIOS
+ {0x8D64, 0xB6E1}, //2166 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULTHIEUTH
+ {0x8D65, 0xB6E2}, //2167 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULPHIEUPH
+ {0x8D66, 0xB6E3}, //2168 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULHIEUH
+ {0x8D67, 0xB6E4}, //2169 #HANGUL SYLLABLE SSANGTIKEUT WE MIEUM
+ {0x8D68, 0xB6E5}, //2170 #HANGUL SYLLABLE SSANGTIKEUT WE PIEUP
+ {0x8D69, 0xB6E6}, //2171 #HANGUL SYLLABLE SSANGTIKEUT WE PIEUPSIOS
+ {0x8D6A, 0xB6E7}, //2172 #HANGUL SYLLABLE SSANGTIKEUT WE SIOS
+ {0x8D6B, 0xB6E8}, //2173 #HANGUL SYLLABLE SSANGTIKEUT WE SSANGSIOS
+ {0x8D6C, 0xB6E9}, //2174 #HANGUL SYLLABLE SSANGTIKEUT WE IEUNG
+ {0x8D6D, 0xB6EA}, //2175 #HANGUL SYLLABLE SSANGTIKEUT WE CIEUC
+ {0x8D6E, 0xB6EB}, //2176 #HANGUL SYLLABLE SSANGTIKEUT WE CHIEUCH
+ {0x8D6F, 0xB6EC}, //2177 #HANGUL SYLLABLE SSANGTIKEUT WE KHIEUKH
+ {0x8D70, 0xB6ED}, //2178 #HANGUL SYLLABLE SSANGTIKEUT WE THIEUTH
+ {0x8D71, 0xB6EE}, //2179 #HANGUL SYLLABLE SSANGTIKEUT WE PHIEUPH
+ {0x8D72, 0xB6EF}, //2180 #HANGUL SYLLABLE SSANGTIKEUT WE HIEUH
+ {0x8D73, 0xB6F1}, //2181 #HANGUL SYLLABLE SSANGTIKEUT WI KIYEOK
+ {0x8D74, 0xB6F2}, //2182 #HANGUL SYLLABLE SSANGTIKEUT WI SSANGKIYEOK
+ {0x8D75, 0xB6F3}, //2183 #HANGUL SYLLABLE SSANGTIKEUT WI KIYEOKSIOS
+ {0x8D76, 0xB6F5}, //2184 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUNCIEUC
+ {0x8D77, 0xB6F6}, //2185 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUNHIEUH
+ {0x8D78, 0xB6F7}, //2186 #HANGUL SYLLABLE SSANGTIKEUT WI TIKEUT
+ {0x8D79, 0xB6F9}, //2187 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULKIYEOK
+ {0x8D7A, 0xB6FA}, //2188 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULMIEUM
+ {0x8D81, 0xB6FB}, //2189 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULPIEUP
+ {0x8D82, 0xB6FC}, //2190 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULSIOS
+ {0x8D83, 0xB6FD}, //2191 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULTHIEUTH
+ {0x8D84, 0xB6FE}, //2192 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULPHIEUPH
+ {0x8D85, 0xB6FF}, //2193 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULHIEUH
+ {0x8D86, 0xB702}, //2194 #HANGUL SYLLABLE SSANGTIKEUT WI PIEUPSIOS
+ {0x8D87, 0xB703}, //2195 #HANGUL SYLLABLE SSANGTIKEUT WI SIOS
+ {0x8D88, 0xB704}, //2196 #HANGUL SYLLABLE SSANGTIKEUT WI SSANGSIOS
+ {0x8D89, 0xB706}, //2197 #HANGUL SYLLABLE SSANGTIKEUT WI CIEUC
+ {0x8D8A, 0xB707}, //2198 #HANGUL SYLLABLE SSANGTIKEUT WI CHIEUCH
+ {0x8D8B, 0xB708}, //2199 #HANGUL SYLLABLE SSANGTIKEUT WI KHIEUKH
+ {0x8D8C, 0xB709}, //2200 #HANGUL SYLLABLE SSANGTIKEUT WI THIEUTH
+ {0x8D8D, 0xB70A}, //2201 #HANGUL SYLLABLE SSANGTIKEUT WI PHIEUPH
+ {0x8D8E, 0xB70B}, //2202 #HANGUL SYLLABLE SSANGTIKEUT WI HIEUH
+ {0x8D8F, 0xB70C}, //2203 #HANGUL SYLLABLE SSANGTIKEUT YU
+ {0x8D90, 0xB70D}, //2204 #HANGUL SYLLABLE SSANGTIKEUT YU KIYEOK
+ {0x8D91, 0xB70E}, //2205 #HANGUL SYLLABLE SSANGTIKEUT YU SSANGKIYEOK
+ {0x8D92, 0xB70F}, //2206 #HANGUL SYLLABLE SSANGTIKEUT YU KIYEOKSIOS
+ {0x8D93, 0xB710}, //2207 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUN
+ {0x8D94, 0xB711}, //2208 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUNCIEUC
+ {0x8D95, 0xB712}, //2209 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUNHIEUH
+ {0x8D96, 0xB713}, //2210 #HANGUL SYLLABLE SSANGTIKEUT YU TIKEUT
+ {0x8D97, 0xB714}, //2211 #HANGUL SYLLABLE SSANGTIKEUT YU RIEUL
+ {0x8D98, 0xB715}, //2212 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULKIYEOK
+ {0x8D99, 0xB716}, //2213 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULMIEUM
+ {0x8D9A, 0xB717}, //2214 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULPIEUP
+ {0x8D9B, 0xB718}, //2215 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULSIOS
+ {0x8D9C, 0xB719}, //2216 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULTHIEUTH
+ {0x8D9D, 0xB71A}, //2217 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULPHIEUPH
+ {0x8D9E, 0xB71B}, //2218 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULHIEUH
+ {0x8D9F, 0xB71C}, //2219 #HANGUL SYLLABLE SSANGTIKEUT YU MIEUM
+ {0x8DA0, 0xB71D}, //2220 #HANGUL SYLLABLE SSANGTIKEUT YU PIEUP
+ {0x8DA1, 0xB71E}, //2221 #HANGUL SYLLABLE SSANGTIKEUT YU PIEUPSIOS
+ {0x8DA2, 0xB71F}, //2222 #HANGUL SYLLABLE SSANGTIKEUT YU SIOS
+ {0x8DA3, 0xB720}, //2223 #HANGUL SYLLABLE SSANGTIKEUT YU SSANGSIOS
+ {0x8DA4, 0xB721}, //2224 #HANGUL SYLLABLE SSANGTIKEUT YU IEUNG
+ {0x8DA5, 0xB722}, //2225 #HANGUL SYLLABLE SSANGTIKEUT YU CIEUC
+ {0x8DA6, 0xB723}, //2226 #HANGUL SYLLABLE SSANGTIKEUT YU CHIEUCH
+ {0x8DA7, 0xB724}, //2227 #HANGUL SYLLABLE SSANGTIKEUT YU KHIEUKH
+ {0x8DA8, 0xB725}, //2228 #HANGUL SYLLABLE SSANGTIKEUT YU THIEUTH
+ {0x8DA9, 0xB726}, //2229 #HANGUL SYLLABLE SSANGTIKEUT YU PHIEUPH
+ {0x8DAA, 0xB727}, //2230 #HANGUL SYLLABLE SSANGTIKEUT YU HIEUH
+ {0x8DAB, 0xB72A}, //2231 #HANGUL SYLLABLE SSANGTIKEUT EU SSANGKIYEOK
+ {0x8DAC, 0xB72B}, //2232 #HANGUL SYLLABLE SSANGTIKEUT EU KIYEOKSIOS
+ {0x8DAD, 0xB72D}, //2233 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUNCIEUC
+ {0x8DAE, 0xB72E}, //2234 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUNHIEUH
+ {0x8DAF, 0xB731}, //2235 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULKIYEOK
+ {0x8DB0, 0xB732}, //2236 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULMIEUM
+ {0x8DB1, 0xB733}, //2237 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULPIEUP
+ {0x8DB2, 0xB734}, //2238 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULSIOS
+ {0x8DB3, 0xB735}, //2239 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULTHIEUTH
+ {0x8DB4, 0xB736}, //2240 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULPHIEUPH
+ {0x8DB5, 0xB737}, //2241 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULHIEUH
+ {0x8DB6, 0xB73A}, //2242 #HANGUL SYLLABLE SSANGTIKEUT EU PIEUPSIOS
+ {0x8DB7, 0xB73C}, //2243 #HANGUL SYLLABLE SSANGTIKEUT EU SSANGSIOS
+ {0x8DB8, 0xB73D}, //2244 #HANGUL SYLLABLE SSANGTIKEUT EU IEUNG
+ {0x8DB9, 0xB73E}, //2245 #HANGUL SYLLABLE SSANGTIKEUT EU CIEUC
+ {0x8DBA, 0xB73F}, //2246 #HANGUL SYLLABLE SSANGTIKEUT EU CHIEUCH
+ {0x8DBB, 0xB740}, //2247 #HANGUL SYLLABLE SSANGTIKEUT EU KHIEUKH
+ {0x8DBC, 0xB741}, //2248 #HANGUL SYLLABLE SSANGTIKEUT EU THIEUTH
+ {0x8DBD, 0xB742}, //2249 #HANGUL SYLLABLE SSANGTIKEUT EU PHIEUPH
+ {0x8DBE, 0xB743}, //2250 #HANGUL SYLLABLE SSANGTIKEUT EU HIEUH
+ {0x8DBF, 0xB745}, //2251 #HANGUL SYLLABLE SSANGTIKEUT YI KIYEOK
+ {0x8DC0, 0xB746}, //2252 #HANGUL SYLLABLE SSANGTIKEUT YI SSANGKIYEOK
+ {0x8DC1, 0xB747}, //2253 #HANGUL SYLLABLE SSANGTIKEUT YI KIYEOKSIOS
+ {0x8DC2, 0xB749}, //2254 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUNCIEUC
+ {0x8DC3, 0xB74A}, //2255 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUNHIEUH
+ {0x8DC4, 0xB74B}, //2256 #HANGUL SYLLABLE SSANGTIKEUT YI TIKEUT
+ {0x8DC5, 0xB74D}, //2257 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULKIYEOK
+ {0x8DC6, 0xB74E}, //2258 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULMIEUM
+ {0x8DC7, 0xB74F}, //2259 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULPIEUP
+ {0x8DC8, 0xB750}, //2260 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULSIOS
+ {0x8DC9, 0xB751}, //2261 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULTHIEUTH
+ {0x8DCA, 0xB752}, //2262 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULPHIEUPH
+ {0x8DCB, 0xB753}, //2263 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULHIEUH
+ {0x8DCC, 0xB756}, //2264 #HANGUL SYLLABLE SSANGTIKEUT YI PIEUPSIOS
+ {0x8DCD, 0xB757}, //2265 #HANGUL SYLLABLE SSANGTIKEUT YI SIOS
+ {0x8DCE, 0xB758}, //2266 #HANGUL SYLLABLE SSANGTIKEUT YI SSANGSIOS
+ {0x8DCF, 0xB759}, //2267 #HANGUL SYLLABLE SSANGTIKEUT YI IEUNG
+ {0x8DD0, 0xB75A}, //2268 #HANGUL SYLLABLE SSANGTIKEUT YI CIEUC
+ {0x8DD1, 0xB75B}, //2269 #HANGUL SYLLABLE SSANGTIKEUT YI CHIEUCH
+ {0x8DD2, 0xB75C}, //2270 #HANGUL SYLLABLE SSANGTIKEUT YI KHIEUKH
+ {0x8DD3, 0xB75D}, //2271 #HANGUL SYLLABLE SSANGTIKEUT YI THIEUTH
+ {0x8DD4, 0xB75E}, //2272 #HANGUL SYLLABLE SSANGTIKEUT YI PHIEUPH
+ {0x8DD5, 0xB75F}, //2273 #HANGUL SYLLABLE SSANGTIKEUT YI HIEUH
+ {0x8DD6, 0xB761}, //2274 #HANGUL SYLLABLE SSANGTIKEUT I KIYEOK
+ {0x8DD7, 0xB762}, //2275 #HANGUL SYLLABLE SSANGTIKEUT I SSANGKIYEOK
+ {0x8DD8, 0xB763}, //2276 #HANGUL SYLLABLE SSANGTIKEUT I KIYEOKSIOS
+ {0x8DD9, 0xB765}, //2277 #HANGUL SYLLABLE SSANGTIKEUT I NIEUNCIEUC
+ {0x8DDA, 0xB766}, //2278 #HANGUL SYLLABLE SSANGTIKEUT I NIEUNHIEUH
+ {0x8DDB, 0xB767}, //2279 #HANGUL SYLLABLE SSANGTIKEUT I TIKEUT
+ {0x8DDC, 0xB769}, //2280 #HANGUL SYLLABLE SSANGTIKEUT I RIEULKIYEOK
+ {0x8DDD, 0xB76A}, //2281 #HANGUL SYLLABLE SSANGTIKEUT I RIEULMIEUM
+ {0x8DDE, 0xB76B}, //2282 #HANGUL SYLLABLE SSANGTIKEUT I RIEULPIEUP
+ {0x8DDF, 0xB76C}, //2283 #HANGUL SYLLABLE SSANGTIKEUT I RIEULSIOS
+ {0x8DE0, 0xB76D}, //2284 #HANGUL SYLLABLE SSANGTIKEUT I RIEULTHIEUTH
+ {0x8DE1, 0xB76E}, //2285 #HANGUL SYLLABLE SSANGTIKEUT I RIEULPHIEUPH
+ {0x8DE2, 0xB76F}, //2286 #HANGUL SYLLABLE SSANGTIKEUT I RIEULHIEUH
+ {0x8DE3, 0xB772}, //2287 #HANGUL SYLLABLE SSANGTIKEUT I PIEUPSIOS
+ {0x8DE4, 0xB774}, //2288 #HANGUL SYLLABLE SSANGTIKEUT I SSANGSIOS
+ {0x8DE5, 0xB776}, //2289 #HANGUL SYLLABLE SSANGTIKEUT I CIEUC
+ {0x8DE6, 0xB777}, //2290 #HANGUL SYLLABLE SSANGTIKEUT I CHIEUCH
+ {0x8DE7, 0xB778}, //2291 #HANGUL SYLLABLE SSANGTIKEUT I KHIEUKH
+ {0x8DE8, 0xB779}, //2292 #HANGUL SYLLABLE SSANGTIKEUT I THIEUTH
+ {0x8DE9, 0xB77A}, //2293 #HANGUL SYLLABLE SSANGTIKEUT I PHIEUPH
+ {0x8DEA, 0xB77B}, //2294 #HANGUL SYLLABLE SSANGTIKEUT I HIEUH
+ {0x8DEB, 0xB77E}, //2295 #HANGUL SYLLABLE RIEUL A SSANGKIYEOK
+ {0x8DEC, 0xB77F}, //2296 #HANGUL SYLLABLE RIEUL A KIYEOKSIOS
+ {0x8DED, 0xB781}, //2297 #HANGUL SYLLABLE RIEUL A NIEUNCIEUC
+ {0x8DEE, 0xB782}, //2298 #HANGUL SYLLABLE RIEUL A NIEUNHIEUH
+ {0x8DEF, 0xB783}, //2299 #HANGUL SYLLABLE RIEUL A TIKEUT
+ {0x8DF0, 0xB785}, //2300 #HANGUL SYLLABLE RIEUL A RIEULKIYEOK
+ {0x8DF1, 0xB786}, //2301 #HANGUL SYLLABLE RIEUL A RIEULMIEUM
+ {0x8DF2, 0xB787}, //2302 #HANGUL SYLLABLE RIEUL A RIEULPIEUP
+ {0x8DF3, 0xB788}, //2303 #HANGUL SYLLABLE RIEUL A RIEULSIOS
+ {0x8DF4, 0xB789}, //2304 #HANGUL SYLLABLE RIEUL A RIEULTHIEUTH
+ {0x8DF5, 0xB78A}, //2305 #HANGUL SYLLABLE RIEUL A RIEULPHIEUPH
+ {0x8DF6, 0xB78B}, //2306 #HANGUL SYLLABLE RIEUL A RIEULHIEUH
+ {0x8DF7, 0xB78E}, //2307 #HANGUL SYLLABLE RIEUL A PIEUPSIOS
+ {0x8DF8, 0xB793}, //2308 #HANGUL SYLLABLE RIEUL A CHIEUCH
+ {0x8DF9, 0xB794}, //2309 #HANGUL SYLLABLE RIEUL A KHIEUKH
+ {0x8DFA, 0xB795}, //2310 #HANGUL SYLLABLE RIEUL A THIEUTH
+ {0x8DFB, 0xB79A}, //2311 #HANGUL SYLLABLE RIEUL AE SSANGKIYEOK
+ {0x8DFC, 0xB79B}, //2312 #HANGUL SYLLABLE RIEUL AE KIYEOKSIOS
+ {0x8DFD, 0xB79D}, //2313 #HANGUL SYLLABLE RIEUL AE NIEUNCIEUC
+ {0x8DFE, 0xB79E}, //2314 #HANGUL SYLLABLE RIEUL AE NIEUNHIEUH
+ {0x8E41, 0xB79F}, //2315 #HANGUL SYLLABLE RIEUL AE TIKEUT
+ {0x8E42, 0xB7A1}, //2316 #HANGUL SYLLABLE RIEUL AE RIEULKIYEOK
+ {0x8E43, 0xB7A2}, //2317 #HANGUL SYLLABLE RIEUL AE RIEULMIEUM
+ {0x8E44, 0xB7A3}, //2318 #HANGUL SYLLABLE RIEUL AE RIEULPIEUP
+ {0x8E45, 0xB7A4}, //2319 #HANGUL SYLLABLE RIEUL AE RIEULSIOS
+ {0x8E46, 0xB7A5}, //2320 #HANGUL SYLLABLE RIEUL AE RIEULTHIEUTH
+ {0x8E47, 0xB7A6}, //2321 #HANGUL SYLLABLE RIEUL AE RIEULPHIEUPH
+ {0x8E48, 0xB7A7}, //2322 #HANGUL SYLLABLE RIEUL AE RIEULHIEUH
+ {0x8E49, 0xB7AA}, //2323 #HANGUL SYLLABLE RIEUL AE PIEUPSIOS
+ {0x8E4A, 0xB7AE}, //2324 #HANGUL SYLLABLE RIEUL AE CIEUC
+ {0x8E4B, 0xB7AF}, //2325 #HANGUL SYLLABLE RIEUL AE CHIEUCH
+ {0x8E4C, 0xB7B0}, //2326 #HANGUL SYLLABLE RIEUL AE KHIEUKH
+ {0x8E4D, 0xB7B1}, //2327 #HANGUL SYLLABLE RIEUL AE THIEUTH
+ {0x8E4E, 0xB7B2}, //2328 #HANGUL SYLLABLE RIEUL AE PHIEUPH
+ {0x8E4F, 0xB7B3}, //2329 #HANGUL SYLLABLE RIEUL AE HIEUH
+ {0x8E50, 0xB7B6}, //2330 #HANGUL SYLLABLE RIEUL YA SSANGKIYEOK
+ {0x8E51, 0xB7B7}, //2331 #HANGUL SYLLABLE RIEUL YA KIYEOKSIOS
+ {0x8E52, 0xB7B9}, //2332 #HANGUL SYLLABLE RIEUL YA NIEUNCIEUC
+ {0x8E53, 0xB7BA}, //2333 #HANGUL SYLLABLE RIEUL YA NIEUNHIEUH
+ {0x8E54, 0xB7BB}, //2334 #HANGUL SYLLABLE RIEUL YA TIKEUT
+ {0x8E55, 0xB7BC}, //2335 #HANGUL SYLLABLE RIEUL YA RIEUL
+ {0x8E56, 0xB7BD}, //2336 #HANGUL SYLLABLE RIEUL YA RIEULKIYEOK
+ {0x8E57, 0xB7BE}, //2337 #HANGUL SYLLABLE RIEUL YA RIEULMIEUM
+ {0x8E58, 0xB7BF}, //2338 #HANGUL SYLLABLE RIEUL YA RIEULPIEUP
+ {0x8E59, 0xB7C0}, //2339 #HANGUL SYLLABLE RIEUL YA RIEULSIOS
+ {0x8E5A, 0xB7C1}, //2340 #HANGUL SYLLABLE RIEUL YA RIEULTHIEUTH
+ {0x8E61, 0xB7C2}, //2341 #HANGUL SYLLABLE RIEUL YA RIEULPHIEUPH
+ {0x8E62, 0xB7C3}, //2342 #HANGUL SYLLABLE RIEUL YA RIEULHIEUH
+ {0x8E63, 0xB7C4}, //2343 #HANGUL SYLLABLE RIEUL YA MIEUM
+ {0x8E64, 0xB7C5}, //2344 #HANGUL SYLLABLE RIEUL YA PIEUP
+ {0x8E65, 0xB7C6}, //2345 #HANGUL SYLLABLE RIEUL YA PIEUPSIOS
+ {0x8E66, 0xB7C8}, //2346 #HANGUL SYLLABLE RIEUL YA SSANGSIOS
+ {0x8E67, 0xB7CA}, //2347 #HANGUL SYLLABLE RIEUL YA CIEUC
+ {0x8E68, 0xB7CB}, //2348 #HANGUL SYLLABLE RIEUL YA CHIEUCH
+ {0x8E69, 0xB7CC}, //2349 #HANGUL SYLLABLE RIEUL YA KHIEUKH
+ {0x8E6A, 0xB7CD}, //2350 #HANGUL SYLLABLE RIEUL YA THIEUTH
+ {0x8E6B, 0xB7CE}, //2351 #HANGUL SYLLABLE RIEUL YA PHIEUPH
+ {0x8E6C, 0xB7CF}, //2352 #HANGUL SYLLABLE RIEUL YA HIEUH
+ {0x8E6D, 0xB7D0}, //2353 #HANGUL SYLLABLE RIEUL YAE
+ {0x8E6E, 0xB7D1}, //2354 #HANGUL SYLLABLE RIEUL YAE KIYEOK
+ {0x8E6F, 0xB7D2}, //2355 #HANGUL SYLLABLE RIEUL YAE SSANGKIYEOK
+ {0x8E70, 0xB7D3}, //2356 #HANGUL SYLLABLE RIEUL YAE KIYEOKSIOS
+ {0x8E71, 0xB7D4}, //2357 #HANGUL SYLLABLE RIEUL YAE NIEUN
+ {0x8E72, 0xB7D5}, //2358 #HANGUL SYLLABLE RIEUL YAE NIEUNCIEUC
+ {0x8E73, 0xB7D6}, //2359 #HANGUL SYLLABLE RIEUL YAE NIEUNHIEUH
+ {0x8E74, 0xB7D7}, //2360 #HANGUL SYLLABLE RIEUL YAE TIKEUT
+ {0x8E75, 0xB7D8}, //2361 #HANGUL SYLLABLE RIEUL YAE RIEUL
+ {0x8E76, 0xB7D9}, //2362 #HANGUL SYLLABLE RIEUL YAE RIEULKIYEOK
+ {0x8E77, 0xB7DA}, //2363 #HANGUL SYLLABLE RIEUL YAE RIEULMIEUM
+ {0x8E78, 0xB7DB}, //2364 #HANGUL SYLLABLE RIEUL YAE RIEULPIEUP
+ {0x8E79, 0xB7DC}, //2365 #HANGUL SYLLABLE RIEUL YAE RIEULSIOS
+ {0x8E7A, 0xB7DD}, //2366 #HANGUL SYLLABLE RIEUL YAE RIEULTHIEUTH
+ {0x8E81, 0xB7DE}, //2367 #HANGUL SYLLABLE RIEUL YAE RIEULPHIEUPH
+ {0x8E82, 0xB7DF}, //2368 #HANGUL SYLLABLE RIEUL YAE RIEULHIEUH
+ {0x8E83, 0xB7E0}, //2369 #HANGUL SYLLABLE RIEUL YAE MIEUM
+ {0x8E84, 0xB7E1}, //2370 #HANGUL SYLLABLE RIEUL YAE PIEUP
+ {0x8E85, 0xB7E2}, //2371 #HANGUL SYLLABLE RIEUL YAE PIEUPSIOS
+ {0x8E86, 0xB7E3}, //2372 #HANGUL SYLLABLE RIEUL YAE SIOS
+ {0x8E87, 0xB7E4}, //2373 #HANGUL SYLLABLE RIEUL YAE SSANGSIOS
+ {0x8E88, 0xB7E5}, //2374 #HANGUL SYLLABLE RIEUL YAE IEUNG
+ {0x8E89, 0xB7E6}, //2375 #HANGUL SYLLABLE RIEUL YAE CIEUC
+ {0x8E8A, 0xB7E7}, //2376 #HANGUL SYLLABLE RIEUL YAE CHIEUCH
+ {0x8E8B, 0xB7E8}, //2377 #HANGUL SYLLABLE RIEUL YAE KHIEUKH
+ {0x8E8C, 0xB7E9}, //2378 #HANGUL SYLLABLE RIEUL YAE THIEUTH
+ {0x8E8D, 0xB7EA}, //2379 #HANGUL SYLLABLE RIEUL YAE PHIEUPH
+ {0x8E8E, 0xB7EB}, //2380 #HANGUL SYLLABLE RIEUL YAE HIEUH
+ {0x8E8F, 0xB7EE}, //2381 #HANGUL SYLLABLE RIEUL EO SSANGKIYEOK
+ {0x8E90, 0xB7EF}, //2382 #HANGUL SYLLABLE RIEUL EO KIYEOKSIOS
+ {0x8E91, 0xB7F1}, //2383 #HANGUL SYLLABLE RIEUL EO NIEUNCIEUC
+ {0x8E92, 0xB7F2}, //2384 #HANGUL SYLLABLE RIEUL EO NIEUNHIEUH
+ {0x8E93, 0xB7F3}, //2385 #HANGUL SYLLABLE RIEUL EO TIKEUT
+ {0x8E94, 0xB7F5}, //2386 #HANGUL SYLLABLE RIEUL EO RIEULKIYEOK
+ {0x8E95, 0xB7F6}, //2387 #HANGUL SYLLABLE RIEUL EO RIEULMIEUM
+ {0x8E96, 0xB7F7}, //2388 #HANGUL SYLLABLE RIEUL EO RIEULPIEUP
+ {0x8E97, 0xB7F8}, //2389 #HANGUL SYLLABLE RIEUL EO RIEULSIOS
+ {0x8E98, 0xB7F9}, //2390 #HANGUL SYLLABLE RIEUL EO RIEULTHIEUTH
+ {0x8E99, 0xB7FA}, //2391 #HANGUL SYLLABLE RIEUL EO RIEULPHIEUPH
+ {0x8E9A, 0xB7FB}, //2392 #HANGUL SYLLABLE RIEUL EO RIEULHIEUH
+ {0x8E9B, 0xB7FE}, //2393 #HANGUL SYLLABLE RIEUL EO PIEUPSIOS
+ {0x8E9C, 0xB802}, //2394 #HANGUL SYLLABLE RIEUL EO CIEUC
+ {0x8E9D, 0xB803}, //2395 #HANGUL SYLLABLE RIEUL EO CHIEUCH
+ {0x8E9E, 0xB804}, //2396 #HANGUL SYLLABLE RIEUL EO KHIEUKH
+ {0x8E9F, 0xB805}, //2397 #HANGUL SYLLABLE RIEUL EO THIEUTH
+ {0x8EA0, 0xB806}, //2398 #HANGUL SYLLABLE RIEUL EO PHIEUPH
+ {0x8EA1, 0xB80A}, //2399 #HANGUL SYLLABLE RIEUL E SSANGKIYEOK
+ {0x8EA2, 0xB80B}, //2400 #HANGUL SYLLABLE RIEUL E KIYEOKSIOS
+ {0x8EA3, 0xB80D}, //2401 #HANGUL SYLLABLE RIEUL E NIEUNCIEUC
+ {0x8EA4, 0xB80E}, //2402 #HANGUL SYLLABLE RIEUL E NIEUNHIEUH
+ {0x8EA5, 0xB80F}, //2403 #HANGUL SYLLABLE RIEUL E TIKEUT
+ {0x8EA6, 0xB811}, //2404 #HANGUL SYLLABLE RIEUL E RIEULKIYEOK
+ {0x8EA7, 0xB812}, //2405 #HANGUL SYLLABLE RIEUL E RIEULMIEUM
+ {0x8EA8, 0xB813}, //2406 #HANGUL SYLLABLE RIEUL E RIEULPIEUP
+ {0x8EA9, 0xB814}, //2407 #HANGUL SYLLABLE RIEUL E RIEULSIOS
+ {0x8EAA, 0xB815}, //2408 #HANGUL SYLLABLE RIEUL E RIEULTHIEUTH
+ {0x8EAB, 0xB816}, //2409 #HANGUL SYLLABLE RIEUL E RIEULPHIEUPH
+ {0x8EAC, 0xB817}, //2410 #HANGUL SYLLABLE RIEUL E RIEULHIEUH
+ {0x8EAD, 0xB81A}, //2411 #HANGUL SYLLABLE RIEUL E PIEUPSIOS
+ {0x8EAE, 0xB81C}, //2412 #HANGUL SYLLABLE RIEUL E SSANGSIOS
+ {0x8EAF, 0xB81E}, //2413 #HANGUL SYLLABLE RIEUL E CIEUC
+ {0x8EB0, 0xB81F}, //2414 #HANGUL SYLLABLE RIEUL E CHIEUCH
+ {0x8EB1, 0xB820}, //2415 #HANGUL SYLLABLE RIEUL E KHIEUKH
+ {0x8EB2, 0xB821}, //2416 #HANGUL SYLLABLE RIEUL E THIEUTH
+ {0x8EB3, 0xB822}, //2417 #HANGUL SYLLABLE RIEUL E PHIEUPH
+ {0x8EB4, 0xB823}, //2418 #HANGUL SYLLABLE RIEUL E HIEUH
+ {0x8EB5, 0xB826}, //2419 #HANGUL SYLLABLE RIEUL YEO SSANGKIYEOK
+ {0x8EB6, 0xB827}, //2420 #HANGUL SYLLABLE RIEUL YEO KIYEOKSIOS
+ {0x8EB7, 0xB829}, //2421 #HANGUL SYLLABLE RIEUL YEO NIEUNCIEUC
+ {0x8EB8, 0xB82A}, //2422 #HANGUL SYLLABLE RIEUL YEO NIEUNHIEUH
+ {0x8EB9, 0xB82B}, //2423 #HANGUL SYLLABLE RIEUL YEO TIKEUT
+ {0x8EBA, 0xB82D}, //2424 #HANGUL SYLLABLE RIEUL YEO RIEULKIYEOK
+ {0x8EBB, 0xB82E}, //2425 #HANGUL SYLLABLE RIEUL YEO RIEULMIEUM
+ {0x8EBC, 0xB82F}, //2426 #HANGUL SYLLABLE RIEUL YEO RIEULPIEUP
+ {0x8EBD, 0xB830}, //2427 #HANGUL SYLLABLE RIEUL YEO RIEULSIOS
+ {0x8EBE, 0xB831}, //2428 #HANGUL SYLLABLE RIEUL YEO RIEULTHIEUTH
+ {0x8EBF, 0xB832}, //2429 #HANGUL SYLLABLE RIEUL YEO RIEULPHIEUPH
+ {0x8EC0, 0xB833}, //2430 #HANGUL SYLLABLE RIEUL YEO RIEULHIEUH
+ {0x8EC1, 0xB836}, //2431 #HANGUL SYLLABLE RIEUL YEO PIEUPSIOS
+ {0x8EC2, 0xB83A}, //2432 #HANGUL SYLLABLE RIEUL YEO CIEUC
+ {0x8EC3, 0xB83B}, //2433 #HANGUL SYLLABLE RIEUL YEO CHIEUCH
+ {0x8EC4, 0xB83C}, //2434 #HANGUL SYLLABLE RIEUL YEO KHIEUKH
+ {0x8EC5, 0xB83D}, //2435 #HANGUL SYLLABLE RIEUL YEO THIEUTH
+ {0x8EC6, 0xB83E}, //2436 #HANGUL SYLLABLE RIEUL YEO PHIEUPH
+ {0x8EC7, 0xB83F}, //2437 #HANGUL SYLLABLE RIEUL YEO HIEUH
+ {0x8EC8, 0xB841}, //2438 #HANGUL SYLLABLE RIEUL YE KIYEOK
+ {0x8EC9, 0xB842}, //2439 #HANGUL SYLLABLE RIEUL YE SSANGKIYEOK
+ {0x8ECA, 0xB843}, //2440 #HANGUL SYLLABLE RIEUL YE KIYEOKSIOS
+ {0x8ECB, 0xB845}, //2441 #HANGUL SYLLABLE RIEUL YE NIEUNCIEUC
+ {0x8ECC, 0xB846}, //2442 #HANGUL SYLLABLE RIEUL YE NIEUNHIEUH
+ {0x8ECD, 0xB847}, //2443 #HANGUL SYLLABLE RIEUL YE TIKEUT
+ {0x8ECE, 0xB848}, //2444 #HANGUL SYLLABLE RIEUL YE RIEUL
+ {0x8ECF, 0xB849}, //2445 #HANGUL SYLLABLE RIEUL YE RIEULKIYEOK
+ {0x8ED0, 0xB84A}, //2446 #HANGUL SYLLABLE RIEUL YE RIEULMIEUM
+ {0x8ED1, 0xB84B}, //2447 #HANGUL SYLLABLE RIEUL YE RIEULPIEUP
+ {0x8ED2, 0xB84C}, //2448 #HANGUL SYLLABLE RIEUL YE RIEULSIOS
+ {0x8ED3, 0xB84D}, //2449 #HANGUL SYLLABLE RIEUL YE RIEULTHIEUTH
+ {0x8ED4, 0xB84E}, //2450 #HANGUL SYLLABLE RIEUL YE RIEULPHIEUPH
+ {0x8ED5, 0xB84F}, //2451 #HANGUL SYLLABLE RIEUL YE RIEULHIEUH
+ {0x8ED6, 0xB850}, //2452 #HANGUL SYLLABLE RIEUL YE MIEUM
+ {0x8ED7, 0xB852}, //2453 #HANGUL SYLLABLE RIEUL YE PIEUPSIOS
+ {0x8ED8, 0xB854}, //2454 #HANGUL SYLLABLE RIEUL YE SSANGSIOS
+ {0x8ED9, 0xB855}, //2455 #HANGUL SYLLABLE RIEUL YE IEUNG
+ {0x8EDA, 0xB856}, //2456 #HANGUL SYLLABLE RIEUL YE CIEUC
+ {0x8EDB, 0xB857}, //2457 #HANGUL SYLLABLE RIEUL YE CHIEUCH
+ {0x8EDC, 0xB858}, //2458 #HANGUL SYLLABLE RIEUL YE KHIEUKH
+ {0x8EDD, 0xB859}, //2459 #HANGUL SYLLABLE RIEUL YE THIEUTH
+ {0x8EDE, 0xB85A}, //2460 #HANGUL SYLLABLE RIEUL YE PHIEUPH
+ {0x8EDF, 0xB85B}, //2461 #HANGUL SYLLABLE RIEUL YE HIEUH
+ {0x8EE0, 0xB85E}, //2462 #HANGUL SYLLABLE RIEUL O SSANGKIYEOK
+ {0x8EE1, 0xB85F}, //2463 #HANGUL SYLLABLE RIEUL O KIYEOKSIOS
+ {0x8EE2, 0xB861}, //2464 #HANGUL SYLLABLE RIEUL O NIEUNCIEUC
+ {0x8EE3, 0xB862}, //2465 #HANGUL SYLLABLE RIEUL O NIEUNHIEUH
+ {0x8EE4, 0xB863}, //2466 #HANGUL SYLLABLE RIEUL O TIKEUT
+ {0x8EE5, 0xB865}, //2467 #HANGUL SYLLABLE RIEUL O RIEULKIYEOK
+ {0x8EE6, 0xB866}, //2468 #HANGUL SYLLABLE RIEUL O RIEULMIEUM
+ {0x8EE7, 0xB867}, //2469 #HANGUL SYLLABLE RIEUL O RIEULPIEUP
+ {0x8EE8, 0xB868}, //2470 #HANGUL SYLLABLE RIEUL O RIEULSIOS
+ {0x8EE9, 0xB869}, //2471 #HANGUL SYLLABLE RIEUL O RIEULTHIEUTH
+ {0x8EEA, 0xB86A}, //2472 #HANGUL SYLLABLE RIEUL O RIEULPHIEUPH
+ {0x8EEB, 0xB86B}, //2473 #HANGUL SYLLABLE RIEUL O RIEULHIEUH
+ {0x8EEC, 0xB86E}, //2474 #HANGUL SYLLABLE RIEUL O PIEUPSIOS
+ {0x8EED, 0xB870}, //2475 #HANGUL SYLLABLE RIEUL O SSANGSIOS
+ {0x8EEE, 0xB872}, //2476 #HANGUL SYLLABLE RIEUL O CIEUC
+ {0x8EEF, 0xB873}, //2477 #HANGUL SYLLABLE RIEUL O CHIEUCH
+ {0x8EF0, 0xB874}, //2478 #HANGUL SYLLABLE RIEUL O KHIEUKH
+ {0x8EF1, 0xB875}, //2479 #HANGUL SYLLABLE RIEUL O THIEUTH
+ {0x8EF2, 0xB876}, //2480 #HANGUL SYLLABLE RIEUL O PHIEUPH
+ {0x8EF3, 0xB877}, //2481 #HANGUL SYLLABLE RIEUL O HIEUH
+ {0x8EF4, 0xB879}, //2482 #HANGUL SYLLABLE RIEUL WA KIYEOK
+ {0x8EF5, 0xB87A}, //2483 #HANGUL SYLLABLE RIEUL WA SSANGKIYEOK
+ {0x8EF6, 0xB87B}, //2484 #HANGUL SYLLABLE RIEUL WA KIYEOKSIOS
+ {0x8EF7, 0xB87D}, //2485 #HANGUL SYLLABLE RIEUL WA NIEUNCIEUC
+ {0x8EF8, 0xB87E}, //2486 #HANGUL SYLLABLE RIEUL WA NIEUNHIEUH
+ {0x8EF9, 0xB87F}, //2487 #HANGUL SYLLABLE RIEUL WA TIKEUT
+ {0x8EFA, 0xB880}, //2488 #HANGUL SYLLABLE RIEUL WA RIEUL
+ {0x8EFB, 0xB881}, //2489 #HANGUL SYLLABLE RIEUL WA RIEULKIYEOK
+ {0x8EFC, 0xB882}, //2490 #HANGUL SYLLABLE RIEUL WA RIEULMIEUM
+ {0x8EFD, 0xB883}, //2491 #HANGUL SYLLABLE RIEUL WA RIEULPIEUP
+ {0x8EFE, 0xB884}, //2492 #HANGUL SYLLABLE RIEUL WA RIEULSIOS
+ {0x8F41, 0xB885}, //2493 #HANGUL SYLLABLE RIEUL WA RIEULTHIEUTH
+ {0x8F42, 0xB886}, //2494 #HANGUL SYLLABLE RIEUL WA RIEULPHIEUPH
+ {0x8F43, 0xB887}, //2495 #HANGUL SYLLABLE RIEUL WA RIEULHIEUH
+ {0x8F44, 0xB888}, //2496 #HANGUL SYLLABLE RIEUL WA MIEUM
+ {0x8F45, 0xB889}, //2497 #HANGUL SYLLABLE RIEUL WA PIEUP
+ {0x8F46, 0xB88A}, //2498 #HANGUL SYLLABLE RIEUL WA PIEUPSIOS
+ {0x8F47, 0xB88B}, //2499 #HANGUL SYLLABLE RIEUL WA SIOS
+ {0x8F48, 0xB88C}, //2500 #HANGUL SYLLABLE RIEUL WA SSANGSIOS
+ {0x8F49, 0xB88E}, //2501 #HANGUL SYLLABLE RIEUL WA CIEUC
+ {0x8F4A, 0xB88F}, //2502 #HANGUL SYLLABLE RIEUL WA CHIEUCH
+ {0x8F4B, 0xB890}, //2503 #HANGUL SYLLABLE RIEUL WA KHIEUKH
+ {0x8F4C, 0xB891}, //2504 #HANGUL SYLLABLE RIEUL WA THIEUTH
+ {0x8F4D, 0xB892}, //2505 #HANGUL SYLLABLE RIEUL WA PHIEUPH
+ {0x8F4E, 0xB893}, //2506 #HANGUL SYLLABLE RIEUL WA HIEUH
+ {0x8F4F, 0xB894}, //2507 #HANGUL SYLLABLE RIEUL WAE
+ {0x8F50, 0xB895}, //2508 #HANGUL SYLLABLE RIEUL WAE KIYEOK
+ {0x8F51, 0xB896}, //2509 #HANGUL SYLLABLE RIEUL WAE SSANGKIYEOK
+ {0x8F52, 0xB897}, //2510 #HANGUL SYLLABLE RIEUL WAE KIYEOKSIOS
+ {0x8F53, 0xB898}, //2511 #HANGUL SYLLABLE RIEUL WAE NIEUN
+ {0x8F54, 0xB899}, //2512 #HANGUL SYLLABLE RIEUL WAE NIEUNCIEUC
+ {0x8F55, 0xB89A}, //2513 #HANGUL SYLLABLE RIEUL WAE NIEUNHIEUH
+ {0x8F56, 0xB89B}, //2514 #HANGUL SYLLABLE RIEUL WAE TIKEUT
+ {0x8F57, 0xB89C}, //2515 #HANGUL SYLLABLE RIEUL WAE RIEUL
+ {0x8F58, 0xB89D}, //2516 #HANGUL SYLLABLE RIEUL WAE RIEULKIYEOK
+ {0x8F59, 0xB89E}, //2517 #HANGUL SYLLABLE RIEUL WAE RIEULMIEUM
+ {0x8F5A, 0xB89F}, //2518 #HANGUL SYLLABLE RIEUL WAE RIEULPIEUP
+ {0x8F61, 0xB8A0}, //2519 #HANGUL SYLLABLE RIEUL WAE RIEULSIOS
+ {0x8F62, 0xB8A1}, //2520 #HANGUL SYLLABLE RIEUL WAE RIEULTHIEUTH
+ {0x8F63, 0xB8A2}, //2521 #HANGUL SYLLABLE RIEUL WAE RIEULPHIEUPH
+ {0x8F64, 0xB8A3}, //2522 #HANGUL SYLLABLE RIEUL WAE RIEULHIEUH
+ {0x8F65, 0xB8A4}, //2523 #HANGUL SYLLABLE RIEUL WAE MIEUM
+ {0x8F66, 0xB8A5}, //2524 #HANGUL SYLLABLE RIEUL WAE PIEUP
+ {0x8F67, 0xB8A6}, //2525 #HANGUL SYLLABLE RIEUL WAE PIEUPSIOS
+ {0x8F68, 0xB8A7}, //2526 #HANGUL SYLLABLE RIEUL WAE SIOS
+ {0x8F69, 0xB8A9}, //2527 #HANGUL SYLLABLE RIEUL WAE IEUNG
+ {0x8F6A, 0xB8AA}, //2528 #HANGUL SYLLABLE RIEUL WAE CIEUC
+ {0x8F6B, 0xB8AB}, //2529 #HANGUL SYLLABLE RIEUL WAE CHIEUCH
+ {0x8F6C, 0xB8AC}, //2530 #HANGUL SYLLABLE RIEUL WAE KHIEUKH
+ {0x8F6D, 0xB8AD}, //2531 #HANGUL SYLLABLE RIEUL WAE THIEUTH
+ {0x8F6E, 0xB8AE}, //2532 #HANGUL SYLLABLE RIEUL WAE PHIEUPH
+ {0x8F6F, 0xB8AF}, //2533 #HANGUL SYLLABLE RIEUL WAE HIEUH
+ {0x8F70, 0xB8B1}, //2534 #HANGUL SYLLABLE RIEUL OE KIYEOK
+ {0x8F71, 0xB8B2}, //2535 #HANGUL SYLLABLE RIEUL OE SSANGKIYEOK
+ {0x8F72, 0xB8B3}, //2536 #HANGUL SYLLABLE RIEUL OE KIYEOKSIOS
+ {0x8F73, 0xB8B5}, //2537 #HANGUL SYLLABLE RIEUL OE NIEUNCIEUC
+ {0x8F74, 0xB8B6}, //2538 #HANGUL SYLLABLE RIEUL OE NIEUNHIEUH
+ {0x8F75, 0xB8B7}, //2539 #HANGUL SYLLABLE RIEUL OE TIKEUT
+ {0x8F76, 0xB8B9}, //2540 #HANGUL SYLLABLE RIEUL OE RIEULKIYEOK
+ {0x8F77, 0xB8BA}, //2541 #HANGUL SYLLABLE RIEUL OE RIEULMIEUM
+ {0x8F78, 0xB8BB}, //2542 #HANGUL SYLLABLE RIEUL OE RIEULPIEUP
+ {0x8F79, 0xB8BC}, //2543 #HANGUL SYLLABLE RIEUL OE RIEULSIOS
+ {0x8F7A, 0xB8BD}, //2544 #HANGUL SYLLABLE RIEUL OE RIEULTHIEUTH
+ {0x8F81, 0xB8BE}, //2545 #HANGUL SYLLABLE RIEUL OE RIEULPHIEUPH
+ {0x8F82, 0xB8BF}, //2546 #HANGUL SYLLABLE RIEUL OE RIEULHIEUH
+ {0x8F83, 0xB8C2}, //2547 #HANGUL SYLLABLE RIEUL OE PIEUPSIOS
+ {0x8F84, 0xB8C4}, //2548 #HANGUL SYLLABLE RIEUL OE SSANGSIOS
+ {0x8F85, 0xB8C6}, //2549 #HANGUL SYLLABLE RIEUL OE CIEUC
+ {0x8F86, 0xB8C7}, //2550 #HANGUL SYLLABLE RIEUL OE CHIEUCH
+ {0x8F87, 0xB8C8}, //2551 #HANGUL SYLLABLE RIEUL OE KHIEUKH
+ {0x8F88, 0xB8C9}, //2552 #HANGUL SYLLABLE RIEUL OE THIEUTH
+ {0x8F89, 0xB8CA}, //2553 #HANGUL SYLLABLE RIEUL OE PHIEUPH
+ {0x8F8A, 0xB8CB}, //2554 #HANGUL SYLLABLE RIEUL OE HIEUH
+ {0x8F8B, 0xB8CD}, //2555 #HANGUL SYLLABLE RIEUL YO KIYEOK
+ {0x8F8C, 0xB8CE}, //2556 #HANGUL SYLLABLE RIEUL YO SSANGKIYEOK
+ {0x8F8D, 0xB8CF}, //2557 #HANGUL SYLLABLE RIEUL YO KIYEOKSIOS
+ {0x8F8E, 0xB8D1}, //2558 #HANGUL SYLLABLE RIEUL YO NIEUNCIEUC
+ {0x8F8F, 0xB8D2}, //2559 #HANGUL SYLLABLE RIEUL YO NIEUNHIEUH
+ {0x8F90, 0xB8D3}, //2560 #HANGUL SYLLABLE RIEUL YO TIKEUT
+ {0x8F91, 0xB8D5}, //2561 #HANGUL SYLLABLE RIEUL YO RIEULKIYEOK
+ {0x8F92, 0xB8D6}, //2562 #HANGUL SYLLABLE RIEUL YO RIEULMIEUM
+ {0x8F93, 0xB8D7}, //2563 #HANGUL SYLLABLE RIEUL YO RIEULPIEUP
+ {0x8F94, 0xB8D8}, //2564 #HANGUL SYLLABLE RIEUL YO RIEULSIOS
+ {0x8F95, 0xB8D9}, //2565 #HANGUL SYLLABLE RIEUL YO RIEULTHIEUTH
+ {0x8F96, 0xB8DA}, //2566 #HANGUL SYLLABLE RIEUL YO RIEULPHIEUPH
+ {0x8F97, 0xB8DB}, //2567 #HANGUL SYLLABLE RIEUL YO RIEULHIEUH
+ {0x8F98, 0xB8DC}, //2568 #HANGUL SYLLABLE RIEUL YO MIEUM
+ {0x8F99, 0xB8DE}, //2569 #HANGUL SYLLABLE RIEUL YO PIEUPSIOS
+ {0x8F9A, 0xB8E0}, //2570 #HANGUL SYLLABLE RIEUL YO SSANGSIOS
+ {0x8F9B, 0xB8E2}, //2571 #HANGUL SYLLABLE RIEUL YO CIEUC
+ {0x8F9C, 0xB8E3}, //2572 #HANGUL SYLLABLE RIEUL YO CHIEUCH
+ {0x8F9D, 0xB8E4}, //2573 #HANGUL SYLLABLE RIEUL YO KHIEUKH
+ {0x8F9E, 0xB8E5}, //2574 #HANGUL SYLLABLE RIEUL YO THIEUTH
+ {0x8F9F, 0xB8E6}, //2575 #HANGUL SYLLABLE RIEUL YO PHIEUPH
+ {0x8FA0, 0xB8E7}, //2576 #HANGUL SYLLABLE RIEUL YO HIEUH
+ {0x8FA1, 0xB8EA}, //2577 #HANGUL SYLLABLE RIEUL U SSANGKIYEOK
+ {0x8FA2, 0xB8EB}, //2578 #HANGUL SYLLABLE RIEUL U KIYEOKSIOS
+ {0x8FA3, 0xB8ED}, //2579 #HANGUL SYLLABLE RIEUL U NIEUNCIEUC
+ {0x8FA4, 0xB8EE}, //2580 #HANGUL SYLLABLE RIEUL U NIEUNHIEUH
+ {0x8FA5, 0xB8EF}, //2581 #HANGUL SYLLABLE RIEUL U TIKEUT
+ {0x8FA6, 0xB8F1}, //2582 #HANGUL SYLLABLE RIEUL U RIEULKIYEOK
+ {0x8FA7, 0xB8F2}, //2583 #HANGUL SYLLABLE RIEUL U RIEULMIEUM
+ {0x8FA8, 0xB8F3}, //2584 #HANGUL SYLLABLE RIEUL U RIEULPIEUP
+ {0x8FA9, 0xB8F4}, //2585 #HANGUL SYLLABLE RIEUL U RIEULSIOS
+ {0x8FAA, 0xB8F5}, //2586 #HANGUL SYLLABLE RIEUL U RIEULTHIEUTH
+ {0x8FAB, 0xB8F6}, //2587 #HANGUL SYLLABLE RIEUL U RIEULPHIEUPH
+ {0x8FAC, 0xB8F7}, //2588 #HANGUL SYLLABLE RIEUL U RIEULHIEUH
+ {0x8FAD, 0xB8FA}, //2589 #HANGUL SYLLABLE RIEUL U PIEUPSIOS
+ {0x8FAE, 0xB8FC}, //2590 #HANGUL SYLLABLE RIEUL U SSANGSIOS
+ {0x8FAF, 0xB8FE}, //2591 #HANGUL SYLLABLE RIEUL U CIEUC
+ {0x8FB0, 0xB8FF}, //2592 #HANGUL SYLLABLE RIEUL U CHIEUCH
+ {0x8FB1, 0xB900}, //2593 #HANGUL SYLLABLE RIEUL U KHIEUKH
+ {0x8FB2, 0xB901}, //2594 #HANGUL SYLLABLE RIEUL U THIEUTH
+ {0x8FB3, 0xB902}, //2595 #HANGUL SYLLABLE RIEUL U PHIEUPH
+ {0x8FB4, 0xB903}, //2596 #HANGUL SYLLABLE RIEUL U HIEUH
+ {0x8FB5, 0xB905}, //2597 #HANGUL SYLLABLE RIEUL WEO KIYEOK
+ {0x8FB6, 0xB906}, //2598 #HANGUL SYLLABLE RIEUL WEO SSANGKIYEOK
+ {0x8FB7, 0xB907}, //2599 #HANGUL SYLLABLE RIEUL WEO KIYEOKSIOS
+ {0x8FB8, 0xB908}, //2600 #HANGUL SYLLABLE RIEUL WEO NIEUN
+ {0x8FB9, 0xB909}, //2601 #HANGUL SYLLABLE RIEUL WEO NIEUNCIEUC
+ {0x8FBA, 0xB90A}, //2602 #HANGUL SYLLABLE RIEUL WEO NIEUNHIEUH
+ {0x8FBB, 0xB90B}, //2603 #HANGUL SYLLABLE RIEUL WEO TIKEUT
+ {0x8FBC, 0xB90C}, //2604 #HANGUL SYLLABLE RIEUL WEO RIEUL
+ {0x8FBD, 0xB90D}, //2605 #HANGUL SYLLABLE RIEUL WEO RIEULKIYEOK
+ {0x8FBE, 0xB90E}, //2606 #HANGUL SYLLABLE RIEUL WEO RIEULMIEUM
+ {0x8FBF, 0xB90F}, //2607 #HANGUL SYLLABLE RIEUL WEO RIEULPIEUP
+ {0x8FC0, 0xB910}, //2608 #HANGUL SYLLABLE RIEUL WEO RIEULSIOS
+ {0x8FC1, 0xB911}, //2609 #HANGUL SYLLABLE RIEUL WEO RIEULTHIEUTH
+ {0x8FC2, 0xB912}, //2610 #HANGUL SYLLABLE RIEUL WEO RIEULPHIEUPH
+ {0x8FC3, 0xB913}, //2611 #HANGUL SYLLABLE RIEUL WEO RIEULHIEUH
+ {0x8FC4, 0xB914}, //2612 #HANGUL SYLLABLE RIEUL WEO MIEUM
+ {0x8FC5, 0xB915}, //2613 #HANGUL SYLLABLE RIEUL WEO PIEUP
+ {0x8FC6, 0xB916}, //2614 #HANGUL SYLLABLE RIEUL WEO PIEUPSIOS
+ {0x8FC7, 0xB917}, //2615 #HANGUL SYLLABLE RIEUL WEO SIOS
+ {0x8FC8, 0xB919}, //2616 #HANGUL SYLLABLE RIEUL WEO IEUNG
+ {0x8FC9, 0xB91A}, //2617 #HANGUL SYLLABLE RIEUL WEO CIEUC
+ {0x8FCA, 0xB91B}, //2618 #HANGUL SYLLABLE RIEUL WEO CHIEUCH
+ {0x8FCB, 0xB91C}, //2619 #HANGUL SYLLABLE RIEUL WEO KHIEUKH
+ {0x8FCC, 0xB91D}, //2620 #HANGUL SYLLABLE RIEUL WEO THIEUTH
+ {0x8FCD, 0xB91E}, //2621 #HANGUL SYLLABLE RIEUL WEO PHIEUPH
+ {0x8FCE, 0xB91F}, //2622 #HANGUL SYLLABLE RIEUL WEO HIEUH
+ {0x8FCF, 0xB921}, //2623 #HANGUL SYLLABLE RIEUL WE KIYEOK
+ {0x8FD0, 0xB922}, //2624 #HANGUL SYLLABLE RIEUL WE SSANGKIYEOK
+ {0x8FD1, 0xB923}, //2625 #HANGUL SYLLABLE RIEUL WE KIYEOKSIOS
+ {0x8FD2, 0xB924}, //2626 #HANGUL SYLLABLE RIEUL WE NIEUN
+ {0x8FD3, 0xB925}, //2627 #HANGUL SYLLABLE RIEUL WE NIEUNCIEUC
+ {0x8FD4, 0xB926}, //2628 #HANGUL SYLLABLE RIEUL WE NIEUNHIEUH
+ {0x8FD5, 0xB927}, //2629 #HANGUL SYLLABLE RIEUL WE TIKEUT
+ {0x8FD6, 0xB928}, //2630 #HANGUL SYLLABLE RIEUL WE RIEUL
+ {0x8FD7, 0xB929}, //2631 #HANGUL SYLLABLE RIEUL WE RIEULKIYEOK
+ {0x8FD8, 0xB92A}, //2632 #HANGUL SYLLABLE RIEUL WE RIEULMIEUM
+ {0x8FD9, 0xB92B}, //2633 #HANGUL SYLLABLE RIEUL WE RIEULPIEUP
+ {0x8FDA, 0xB92C}, //2634 #HANGUL SYLLABLE RIEUL WE RIEULSIOS
+ {0x8FDB, 0xB92D}, //2635 #HANGUL SYLLABLE RIEUL WE RIEULTHIEUTH
+ {0x8FDC, 0xB92E}, //2636 #HANGUL SYLLABLE RIEUL WE RIEULPHIEUPH
+ {0x8FDD, 0xB92F}, //2637 #HANGUL SYLLABLE RIEUL WE RIEULHIEUH
+ {0x8FDE, 0xB930}, //2638 #HANGUL SYLLABLE RIEUL WE MIEUM
+ {0x8FDF, 0xB931}, //2639 #HANGUL SYLLABLE RIEUL WE PIEUP
+ {0x8FE0, 0xB932}, //2640 #HANGUL SYLLABLE RIEUL WE PIEUPSIOS
+ {0x8FE1, 0xB933}, //2641 #HANGUL SYLLABLE RIEUL WE SIOS
+ {0x8FE2, 0xB934}, //2642 #HANGUL SYLLABLE RIEUL WE SSANGSIOS
+ {0x8FE3, 0xB935}, //2643 #HANGUL SYLLABLE RIEUL WE IEUNG
+ {0x8FE4, 0xB936}, //2644 #HANGUL SYLLABLE RIEUL WE CIEUC
+ {0x8FE5, 0xB937}, //2645 #HANGUL SYLLABLE RIEUL WE CHIEUCH
+ {0x8FE6, 0xB938}, //2646 #HANGUL SYLLABLE RIEUL WE KHIEUKH
+ {0x8FE7, 0xB939}, //2647 #HANGUL SYLLABLE RIEUL WE THIEUTH
+ {0x8FE8, 0xB93A}, //2648 #HANGUL SYLLABLE RIEUL WE PHIEUPH
+ {0x8FE9, 0xB93B}, //2649 #HANGUL SYLLABLE RIEUL WE HIEUH
+ {0x8FEA, 0xB93E}, //2650 #HANGUL SYLLABLE RIEUL WI SSANGKIYEOK
+ {0x8FEB, 0xB93F}, //2651 #HANGUL SYLLABLE RIEUL WI KIYEOKSIOS
+ {0x8FEC, 0xB941}, //2652 #HANGUL SYLLABLE RIEUL WI NIEUNCIEUC
+ {0x8FED, 0xB942}, //2653 #HANGUL SYLLABLE RIEUL WI NIEUNHIEUH
+ {0x8FEE, 0xB943}, //2654 #HANGUL SYLLABLE RIEUL WI TIKEUT
+ {0x8FEF, 0xB945}, //2655 #HANGUL SYLLABLE RIEUL WI RIEULKIYEOK
+ {0x8FF0, 0xB946}, //2656 #HANGUL SYLLABLE RIEUL WI RIEULMIEUM
+ {0x8FF1, 0xB947}, //2657 #HANGUL SYLLABLE RIEUL WI RIEULPIEUP
+ {0x8FF2, 0xB948}, //2658 #HANGUL SYLLABLE RIEUL WI RIEULSIOS
+ {0x8FF3, 0xB949}, //2659 #HANGUL SYLLABLE RIEUL WI RIEULTHIEUTH
+ {0x8FF4, 0xB94A}, //2660 #HANGUL SYLLABLE RIEUL WI RIEULPHIEUPH
+ {0x8FF5, 0xB94B}, //2661 #HANGUL SYLLABLE RIEUL WI RIEULHIEUH
+ {0x8FF6, 0xB94D}, //2662 #HANGUL SYLLABLE RIEUL WI PIEUP
+ {0x8FF7, 0xB94E}, //2663 #HANGUL SYLLABLE RIEUL WI PIEUPSIOS
+ {0x8FF8, 0xB950}, //2664 #HANGUL SYLLABLE RIEUL WI SSANGSIOS
+ {0x8FF9, 0xB952}, //2665 #HANGUL SYLLABLE RIEUL WI CIEUC
+ {0x8FFA, 0xB953}, //2666 #HANGUL SYLLABLE RIEUL WI CHIEUCH
+ {0x8FFB, 0xB954}, //2667 #HANGUL SYLLABLE RIEUL WI KHIEUKH
+ {0x8FFC, 0xB955}, //2668 #HANGUL SYLLABLE RIEUL WI THIEUTH
+ {0x8FFD, 0xB956}, //2669 #HANGUL SYLLABLE RIEUL WI PHIEUPH
+ {0x8FFE, 0xB957}, //2670 #HANGUL SYLLABLE RIEUL WI HIEUH
+ {0x9041, 0xB95A}, //2671 #HANGUL SYLLABLE RIEUL YU SSANGKIYEOK
+ {0x9042, 0xB95B}, //2672 #HANGUL SYLLABLE RIEUL YU KIYEOKSIOS
+ {0x9043, 0xB95D}, //2673 #HANGUL SYLLABLE RIEUL YU NIEUNCIEUC
+ {0x9044, 0xB95E}, //2674 #HANGUL SYLLABLE RIEUL YU NIEUNHIEUH
+ {0x9045, 0xB95F}, //2675 #HANGUL SYLLABLE RIEUL YU TIKEUT
+ {0x9046, 0xB961}, //2676 #HANGUL SYLLABLE RIEUL YU RIEULKIYEOK
+ {0x9047, 0xB962}, //2677 #HANGUL SYLLABLE RIEUL YU RIEULMIEUM
+ {0x9048, 0xB963}, //2678 #HANGUL SYLLABLE RIEUL YU RIEULPIEUP
+ {0x9049, 0xB964}, //2679 #HANGUL SYLLABLE RIEUL YU RIEULSIOS
+ {0x904A, 0xB965}, //2680 #HANGUL SYLLABLE RIEUL YU RIEULTHIEUTH
+ {0x904B, 0xB966}, //2681 #HANGUL SYLLABLE RIEUL YU RIEULPHIEUPH
+ {0x904C, 0xB967}, //2682 #HANGUL SYLLABLE RIEUL YU RIEULHIEUH
+ {0x904D, 0xB96A}, //2683 #HANGUL SYLLABLE RIEUL YU PIEUPSIOS
+ {0x904E, 0xB96C}, //2684 #HANGUL SYLLABLE RIEUL YU SSANGSIOS
+ {0x904F, 0xB96E}, //2685 #HANGUL SYLLABLE RIEUL YU CIEUC
+ {0x9050, 0xB96F}, //2686 #HANGUL SYLLABLE RIEUL YU CHIEUCH
+ {0x9051, 0xB970}, //2687 #HANGUL SYLLABLE RIEUL YU KHIEUKH
+ {0x9052, 0xB971}, //2688 #HANGUL SYLLABLE RIEUL YU THIEUTH
+ {0x9053, 0xB972}, //2689 #HANGUL SYLLABLE RIEUL YU PHIEUPH
+ {0x9054, 0xB973}, //2690 #HANGUL SYLLABLE RIEUL YU HIEUH
+ {0x9055, 0xB976}, //2691 #HANGUL SYLLABLE RIEUL EU SSANGKIYEOK
+ {0x9056, 0xB977}, //2692 #HANGUL SYLLABLE RIEUL EU KIYEOKSIOS
+ {0x9057, 0xB979}, //2693 #HANGUL SYLLABLE RIEUL EU NIEUNCIEUC
+ {0x9058, 0xB97A}, //2694 #HANGUL SYLLABLE RIEUL EU NIEUNHIEUH
+ {0x9059, 0xB97B}, //2695 #HANGUL SYLLABLE RIEUL EU TIKEUT
+ {0x905A, 0xB97D}, //2696 #HANGUL SYLLABLE RIEUL EU RIEULKIYEOK
+ {0x9061, 0xB97E}, //2697 #HANGUL SYLLABLE RIEUL EU RIEULMIEUM
+ {0x9062, 0xB97F}, //2698 #HANGUL SYLLABLE RIEUL EU RIEULPIEUP
+ {0x9063, 0xB980}, //2699 #HANGUL SYLLABLE RIEUL EU RIEULSIOS
+ {0x9064, 0xB981}, //2700 #HANGUL SYLLABLE RIEUL EU RIEULTHIEUTH
+ {0x9065, 0xB982}, //2701 #HANGUL SYLLABLE RIEUL EU RIEULPHIEUPH
+ {0x9066, 0xB983}, //2702 #HANGUL SYLLABLE RIEUL EU RIEULHIEUH
+ {0x9067, 0xB986}, //2703 #HANGUL SYLLABLE RIEUL EU PIEUPSIOS
+ {0x9068, 0xB988}, //2704 #HANGUL SYLLABLE RIEUL EU SSANGSIOS
+ {0x9069, 0xB98B}, //2705 #HANGUL SYLLABLE RIEUL EU CHIEUCH
+ {0x906A, 0xB98C}, //2706 #HANGUL SYLLABLE RIEUL EU KHIEUKH
+ {0x906B, 0xB98F}, //2707 #HANGUL SYLLABLE RIEUL EU HIEUH
+ {0x906C, 0xB990}, //2708 #HANGUL SYLLABLE RIEUL YI
+ {0x906D, 0xB991}, //2709 #HANGUL SYLLABLE RIEUL YI KIYEOK
+ {0x906E, 0xB992}, //2710 #HANGUL SYLLABLE RIEUL YI SSANGKIYEOK
+ {0x906F, 0xB993}, //2711 #HANGUL SYLLABLE RIEUL YI KIYEOKSIOS
+ {0x9070, 0xB994}, //2712 #HANGUL SYLLABLE RIEUL YI NIEUN
+ {0x9071, 0xB995}, //2713 #HANGUL SYLLABLE RIEUL YI NIEUNCIEUC
+ {0x9072, 0xB996}, //2714 #HANGUL SYLLABLE RIEUL YI NIEUNHIEUH
+ {0x9073, 0xB997}, //2715 #HANGUL SYLLABLE RIEUL YI TIKEUT
+ {0x9074, 0xB998}, //2716 #HANGUL SYLLABLE RIEUL YI RIEUL
+ {0x9075, 0xB999}, //2717 #HANGUL SYLLABLE RIEUL YI RIEULKIYEOK
+ {0x9076, 0xB99A}, //2718 #HANGUL SYLLABLE RIEUL YI RIEULMIEUM
+ {0x9077, 0xB99B}, //2719 #HANGUL SYLLABLE RIEUL YI RIEULPIEUP
+ {0x9078, 0xB99C}, //2720 #HANGUL SYLLABLE RIEUL YI RIEULSIOS
+ {0x9079, 0xB99D}, //2721 #HANGUL SYLLABLE RIEUL YI RIEULTHIEUTH
+ {0x907A, 0xB99E}, //2722 #HANGUL SYLLABLE RIEUL YI RIEULPHIEUPH
+ {0x9081, 0xB99F}, //2723 #HANGUL SYLLABLE RIEUL YI RIEULHIEUH
+ {0x9082, 0xB9A0}, //2724 #HANGUL SYLLABLE RIEUL YI MIEUM
+ {0x9083, 0xB9A1}, //2725 #HANGUL SYLLABLE RIEUL YI PIEUP
+ {0x9084, 0xB9A2}, //2726 #HANGUL SYLLABLE RIEUL YI PIEUPSIOS
+ {0x9085, 0xB9A3}, //2727 #HANGUL SYLLABLE RIEUL YI SIOS
+ {0x9086, 0xB9A4}, //2728 #HANGUL SYLLABLE RIEUL YI SSANGSIOS
+ {0x9087, 0xB9A5}, //2729 #HANGUL SYLLABLE RIEUL YI IEUNG
+ {0x9088, 0xB9A6}, //2730 #HANGUL SYLLABLE RIEUL YI CIEUC
+ {0x9089, 0xB9A7}, //2731 #HANGUL SYLLABLE RIEUL YI CHIEUCH
+ {0x908A, 0xB9A8}, //2732 #HANGUL SYLLABLE RIEUL YI KHIEUKH
+ {0x908B, 0xB9A9}, //2733 #HANGUL SYLLABLE RIEUL YI THIEUTH
+ {0x908C, 0xB9AA}, //2734 #HANGUL SYLLABLE RIEUL YI PHIEUPH
+ {0x908D, 0xB9AB}, //2735 #HANGUL SYLLABLE RIEUL YI HIEUH
+ {0x908E, 0xB9AE}, //2736 #HANGUL SYLLABLE RIEUL I SSANGKIYEOK
+ {0x908F, 0xB9AF}, //2737 #HANGUL SYLLABLE RIEUL I KIYEOKSIOS
+ {0x9090, 0xB9B1}, //2738 #HANGUL SYLLABLE RIEUL I NIEUNCIEUC
+ {0x9091, 0xB9B2}, //2739 #HANGUL SYLLABLE RIEUL I NIEUNHIEUH
+ {0x9092, 0xB9B3}, //2740 #HANGUL SYLLABLE RIEUL I TIKEUT
+ {0x9093, 0xB9B5}, //2741 #HANGUL SYLLABLE RIEUL I RIEULKIYEOK
+ {0x9094, 0xB9B6}, //2742 #HANGUL SYLLABLE RIEUL I RIEULMIEUM
+ {0x9095, 0xB9B7}, //2743 #HANGUL SYLLABLE RIEUL I RIEULPIEUP
+ {0x9096, 0xB9B8}, //2744 #HANGUL SYLLABLE RIEUL I RIEULSIOS
+ {0x9097, 0xB9B9}, //2745 #HANGUL SYLLABLE RIEUL I RIEULTHIEUTH
+ {0x9098, 0xB9BA}, //2746 #HANGUL SYLLABLE RIEUL I RIEULPHIEUPH
+ {0x9099, 0xB9BB}, //2747 #HANGUL SYLLABLE RIEUL I RIEULHIEUH
+ {0x909A, 0xB9BE}, //2748 #HANGUL SYLLABLE RIEUL I PIEUPSIOS
+ {0x909B, 0xB9C0}, //2749 #HANGUL SYLLABLE RIEUL I SSANGSIOS
+ {0x909C, 0xB9C2}, //2750 #HANGUL SYLLABLE RIEUL I CIEUC
+ {0x909D, 0xB9C3}, //2751 #HANGUL SYLLABLE RIEUL I CHIEUCH
+ {0x909E, 0xB9C4}, //2752 #HANGUL SYLLABLE RIEUL I KHIEUKH
+ {0x909F, 0xB9C5}, //2753 #HANGUL SYLLABLE RIEUL I THIEUTH
+ {0x90A0, 0xB9C6}, //2754 #HANGUL SYLLABLE RIEUL I PHIEUPH
+ {0x90A1, 0xB9C7}, //2755 #HANGUL SYLLABLE RIEUL I HIEUH
+ {0x90A2, 0xB9CA}, //2756 #HANGUL SYLLABLE MIEUM A SSANGKIYEOK
+ {0x90A3, 0xB9CB}, //2757 #HANGUL SYLLABLE MIEUM A KIYEOKSIOS
+ {0x90A4, 0xB9CD}, //2758 #HANGUL SYLLABLE MIEUM A NIEUNCIEUC
+ {0x90A5, 0xB9D3}, //2759 #HANGUL SYLLABLE MIEUM A RIEULPIEUP
+ {0x90A6, 0xB9D4}, //2760 #HANGUL SYLLABLE MIEUM A RIEULSIOS
+ {0x90A7, 0xB9D5}, //2761 #HANGUL SYLLABLE MIEUM A RIEULTHIEUTH
+ {0x90A8, 0xB9D6}, //2762 #HANGUL SYLLABLE MIEUM A RIEULPHIEUPH
+ {0x90A9, 0xB9D7}, //2763 #HANGUL SYLLABLE MIEUM A RIEULHIEUH
+ {0x90AA, 0xB9DA}, //2764 #HANGUL SYLLABLE MIEUM A PIEUPSIOS
+ {0x90AB, 0xB9DC}, //2765 #HANGUL SYLLABLE MIEUM A SSANGSIOS
+ {0x90AC, 0xB9DF}, //2766 #HANGUL SYLLABLE MIEUM A CHIEUCH
+ {0x90AD, 0xB9E0}, //2767 #HANGUL SYLLABLE MIEUM A KHIEUKH
+ {0x90AE, 0xB9E2}, //2768 #HANGUL SYLLABLE MIEUM A PHIEUPH
+ {0x90AF, 0xB9E6}, //2769 #HANGUL SYLLABLE MIEUM AE SSANGKIYEOK
+ {0x90B0, 0xB9E7}, //2770 #HANGUL SYLLABLE MIEUM AE KIYEOKSIOS
+ {0x90B1, 0xB9E9}, //2771 #HANGUL SYLLABLE MIEUM AE NIEUNCIEUC
+ {0x90B2, 0xB9EA}, //2772 #HANGUL SYLLABLE MIEUM AE NIEUNHIEUH
+ {0x90B3, 0xB9EB}, //2773 #HANGUL SYLLABLE MIEUM AE TIKEUT
+ {0x90B4, 0xB9ED}, //2774 #HANGUL SYLLABLE MIEUM AE RIEULKIYEOK
+ {0x90B5, 0xB9EE}, //2775 #HANGUL SYLLABLE MIEUM AE RIEULMIEUM
+ {0x90B6, 0xB9EF}, //2776 #HANGUL SYLLABLE MIEUM AE RIEULPIEUP
+ {0x90B7, 0xB9F0}, //2777 #HANGUL SYLLABLE MIEUM AE RIEULSIOS
+ {0x90B8, 0xB9F1}, //2778 #HANGUL SYLLABLE MIEUM AE RIEULTHIEUTH
+ {0x90B9, 0xB9F2}, //2779 #HANGUL SYLLABLE MIEUM AE RIEULPHIEUPH
+ {0x90BA, 0xB9F3}, //2780 #HANGUL SYLLABLE MIEUM AE RIEULHIEUH
+ {0x90BB, 0xB9F6}, //2781 #HANGUL SYLLABLE MIEUM AE PIEUPSIOS
+ {0x90BC, 0xB9FB}, //2782 #HANGUL SYLLABLE MIEUM AE CHIEUCH
+ {0x90BD, 0xB9FC}, //2783 #HANGUL SYLLABLE MIEUM AE KHIEUKH
+ {0x90BE, 0xB9FD}, //2784 #HANGUL SYLLABLE MIEUM AE THIEUTH
+ {0x90BF, 0xB9FE}, //2785 #HANGUL SYLLABLE MIEUM AE PHIEUPH
+ {0x90C0, 0xB9FF}, //2786 #HANGUL SYLLABLE MIEUM AE HIEUH
+ {0x90C1, 0xBA02}, //2787 #HANGUL SYLLABLE MIEUM YA SSANGKIYEOK
+ {0x90C2, 0xBA03}, //2788 #HANGUL SYLLABLE MIEUM YA KIYEOKSIOS
+ {0x90C3, 0xBA04}, //2789 #HANGUL SYLLABLE MIEUM YA NIEUN
+ {0x90C4, 0xBA05}, //2790 #HANGUL SYLLABLE MIEUM YA NIEUNCIEUC
+ {0x90C5, 0xBA06}, //2791 #HANGUL SYLLABLE MIEUM YA NIEUNHIEUH
+ {0x90C6, 0xBA07}, //2792 #HANGUL SYLLABLE MIEUM YA TIKEUT
+ {0x90C7, 0xBA09}, //2793 #HANGUL SYLLABLE MIEUM YA RIEULKIYEOK
+ {0x90C8, 0xBA0A}, //2794 #HANGUL SYLLABLE MIEUM YA RIEULMIEUM
+ {0x90C9, 0xBA0B}, //2795 #HANGUL SYLLABLE MIEUM YA RIEULPIEUP
+ {0x90CA, 0xBA0C}, //2796 #HANGUL SYLLABLE MIEUM YA RIEULSIOS
+ {0x90CB, 0xBA0D}, //2797 #HANGUL SYLLABLE MIEUM YA RIEULTHIEUTH
+ {0x90CC, 0xBA0E}, //2798 #HANGUL SYLLABLE MIEUM YA RIEULPHIEUPH
+ {0x90CD, 0xBA0F}, //2799 #HANGUL SYLLABLE MIEUM YA RIEULHIEUH
+ {0x90CE, 0xBA10}, //2800 #HANGUL SYLLABLE MIEUM YA MIEUM
+ {0x90CF, 0xBA11}, //2801 #HANGUL SYLLABLE MIEUM YA PIEUP
+ {0x90D0, 0xBA12}, //2802 #HANGUL SYLLABLE MIEUM YA PIEUPSIOS
+ {0x90D1, 0xBA13}, //2803 #HANGUL SYLLABLE MIEUM YA SIOS
+ {0x90D2, 0xBA14}, //2804 #HANGUL SYLLABLE MIEUM YA SSANGSIOS
+ {0x90D3, 0xBA16}, //2805 #HANGUL SYLLABLE MIEUM YA CIEUC
+ {0x90D4, 0xBA17}, //2806 #HANGUL SYLLABLE MIEUM YA CHIEUCH
+ {0x90D5, 0xBA18}, //2807 #HANGUL SYLLABLE MIEUM YA KHIEUKH
+ {0x90D6, 0xBA19}, //2808 #HANGUL SYLLABLE MIEUM YA THIEUTH
+ {0x90D7, 0xBA1A}, //2809 #HANGUL SYLLABLE MIEUM YA PHIEUPH
+ {0x90D8, 0xBA1B}, //2810 #HANGUL SYLLABLE MIEUM YA HIEUH
+ {0x90D9, 0xBA1C}, //2811 #HANGUL SYLLABLE MIEUM YAE
+ {0x90DA, 0xBA1D}, //2812 #HANGUL SYLLABLE MIEUM YAE KIYEOK
+ {0x90DB, 0xBA1E}, //2813 #HANGUL SYLLABLE MIEUM YAE SSANGKIYEOK
+ {0x90DC, 0xBA1F}, //2814 #HANGUL SYLLABLE MIEUM YAE KIYEOKSIOS
+ {0x90DD, 0xBA20}, //2815 #HANGUL SYLLABLE MIEUM YAE NIEUN
+ {0x90DE, 0xBA21}, //2816 #HANGUL SYLLABLE MIEUM YAE NIEUNCIEUC
+ {0x90DF, 0xBA22}, //2817 #HANGUL SYLLABLE MIEUM YAE NIEUNHIEUH
+ {0x90E0, 0xBA23}, //2818 #HANGUL SYLLABLE MIEUM YAE TIKEUT
+ {0x90E1, 0xBA24}, //2819 #HANGUL SYLLABLE MIEUM YAE RIEUL
+ {0x90E2, 0xBA25}, //2820 #HANGUL SYLLABLE MIEUM YAE RIEULKIYEOK
+ {0x90E3, 0xBA26}, //2821 #HANGUL SYLLABLE MIEUM YAE RIEULMIEUM
+ {0x90E4, 0xBA27}, //2822 #HANGUL SYLLABLE MIEUM YAE RIEULPIEUP
+ {0x90E5, 0xBA28}, //2823 #HANGUL SYLLABLE MIEUM YAE RIEULSIOS
+ {0x90E6, 0xBA29}, //2824 #HANGUL SYLLABLE MIEUM YAE RIEULTHIEUTH
+ {0x90E7, 0xBA2A}, //2825 #HANGUL SYLLABLE MIEUM YAE RIEULPHIEUPH
+ {0x90E8, 0xBA2B}, //2826 #HANGUL SYLLABLE MIEUM YAE RIEULHIEUH
+ {0x90E9, 0xBA2C}, //2827 #HANGUL SYLLABLE MIEUM YAE MIEUM
+ {0x90EA, 0xBA2D}, //2828 #HANGUL SYLLABLE MIEUM YAE PIEUP
+ {0x90EB, 0xBA2E}, //2829 #HANGUL SYLLABLE MIEUM YAE PIEUPSIOS
+ {0x90EC, 0xBA2F}, //2830 #HANGUL SYLLABLE MIEUM YAE SIOS
+ {0x90ED, 0xBA30}, //2831 #HANGUL SYLLABLE MIEUM YAE SSANGSIOS
+ {0x90EE, 0xBA31}, //2832 #HANGUL SYLLABLE MIEUM YAE IEUNG
+ {0x90EF, 0xBA32}, //2833 #HANGUL SYLLABLE MIEUM YAE CIEUC
+ {0x90F0, 0xBA33}, //2834 #HANGUL SYLLABLE MIEUM YAE CHIEUCH
+ {0x90F1, 0xBA34}, //2835 #HANGUL SYLLABLE MIEUM YAE KHIEUKH
+ {0x90F2, 0xBA35}, //2836 #HANGUL SYLLABLE MIEUM YAE THIEUTH
+ {0x90F3, 0xBA36}, //2837 #HANGUL SYLLABLE MIEUM YAE PHIEUPH
+ {0x90F4, 0xBA37}, //2838 #HANGUL SYLLABLE MIEUM YAE HIEUH
+ {0x90F5, 0xBA3A}, //2839 #HANGUL SYLLABLE MIEUM EO SSANGKIYEOK
+ {0x90F6, 0xBA3B}, //2840 #HANGUL SYLLABLE MIEUM EO KIYEOKSIOS
+ {0x90F7, 0xBA3D}, //2841 #HANGUL SYLLABLE MIEUM EO NIEUNCIEUC
+ {0x90F8, 0xBA3E}, //2842 #HANGUL SYLLABLE MIEUM EO NIEUNHIEUH
+ {0x90F9, 0xBA3F}, //2843 #HANGUL SYLLABLE MIEUM EO TIKEUT
+ {0x90FA, 0xBA41}, //2844 #HANGUL SYLLABLE MIEUM EO RIEULKIYEOK
+ {0x90FB, 0xBA43}, //2845 #HANGUL SYLLABLE MIEUM EO RIEULPIEUP
+ {0x90FC, 0xBA44}, //2846 #HANGUL SYLLABLE MIEUM EO RIEULSIOS
+ {0x90FD, 0xBA45}, //2847 #HANGUL SYLLABLE MIEUM EO RIEULTHIEUTH
+ {0x90FE, 0xBA46}, //2848 #HANGUL SYLLABLE MIEUM EO RIEULPHIEUPH
+ {0x9141, 0xBA47}, //2849 #HANGUL SYLLABLE MIEUM EO RIEULHIEUH
+ {0x9142, 0xBA4A}, //2850 #HANGUL SYLLABLE MIEUM EO PIEUPSIOS
+ {0x9143, 0xBA4C}, //2851 #HANGUL SYLLABLE MIEUM EO SSANGSIOS
+ {0x9144, 0xBA4F}, //2852 #HANGUL SYLLABLE MIEUM EO CHIEUCH
+ {0x9145, 0xBA50}, //2853 #HANGUL SYLLABLE MIEUM EO KHIEUKH
+ {0x9146, 0xBA51}, //2854 #HANGUL SYLLABLE MIEUM EO THIEUTH
+ {0x9147, 0xBA52}, //2855 #HANGUL SYLLABLE MIEUM EO PHIEUPH
+ {0x9148, 0xBA56}, //2856 #HANGUL SYLLABLE MIEUM E SSANGKIYEOK
+ {0x9149, 0xBA57}, //2857 #HANGUL SYLLABLE MIEUM E KIYEOKSIOS
+ {0x914A, 0xBA59}, //2858 #HANGUL SYLLABLE MIEUM E NIEUNCIEUC
+ {0x914B, 0xBA5A}, //2859 #HANGUL SYLLABLE MIEUM E NIEUNHIEUH
+ {0x914C, 0xBA5B}, //2860 #HANGUL SYLLABLE MIEUM E TIKEUT
+ {0x914D, 0xBA5D}, //2861 #HANGUL SYLLABLE MIEUM E RIEULKIYEOK
+ {0x914E, 0xBA5E}, //2862 #HANGUL SYLLABLE MIEUM E RIEULMIEUM
+ {0x914F, 0xBA5F}, //2863 #HANGUL SYLLABLE MIEUM E RIEULPIEUP
+ {0x9150, 0xBA60}, //2864 #HANGUL SYLLABLE MIEUM E RIEULSIOS
+ {0x9151, 0xBA61}, //2865 #HANGUL SYLLABLE MIEUM E RIEULTHIEUTH
+ {0x9152, 0xBA62}, //2866 #HANGUL SYLLABLE MIEUM E RIEULPHIEUPH
+ {0x9153, 0xBA63}, //2867 #HANGUL SYLLABLE MIEUM E RIEULHIEUH
+ {0x9154, 0xBA66}, //2868 #HANGUL SYLLABLE MIEUM E PIEUPSIOS
+ {0x9155, 0xBA6A}, //2869 #HANGUL SYLLABLE MIEUM E CIEUC
+ {0x9156, 0xBA6B}, //2870 #HANGUL SYLLABLE MIEUM E CHIEUCH
+ {0x9157, 0xBA6C}, //2871 #HANGUL SYLLABLE MIEUM E KHIEUKH
+ {0x9158, 0xBA6D}, //2872 #HANGUL SYLLABLE MIEUM E THIEUTH
+ {0x9159, 0xBA6E}, //2873 #HANGUL SYLLABLE MIEUM E PHIEUPH
+ {0x915A, 0xBA6F}, //2874 #HANGUL SYLLABLE MIEUM E HIEUH
+ {0x9161, 0xBA72}, //2875 #HANGUL SYLLABLE MIEUM YEO SSANGKIYEOK
+ {0x9162, 0xBA73}, //2876 #HANGUL SYLLABLE MIEUM YEO KIYEOKSIOS
+ {0x9163, 0xBA75}, //2877 #HANGUL SYLLABLE MIEUM YEO NIEUNCIEUC
+ {0x9164, 0xBA76}, //2878 #HANGUL SYLLABLE MIEUM YEO NIEUNHIEUH
+ {0x9165, 0xBA77}, //2879 #HANGUL SYLLABLE MIEUM YEO TIKEUT
+ {0x9166, 0xBA79}, //2880 #HANGUL SYLLABLE MIEUM YEO RIEULKIYEOK
+ {0x9167, 0xBA7A}, //2881 #HANGUL SYLLABLE MIEUM YEO RIEULMIEUM
+ {0x9168, 0xBA7B}, //2882 #HANGUL SYLLABLE MIEUM YEO RIEULPIEUP
+ {0x9169, 0xBA7C}, //2883 #HANGUL SYLLABLE MIEUM YEO RIEULSIOS
+ {0x916A, 0xBA7D}, //2884 #HANGUL SYLLABLE MIEUM YEO RIEULTHIEUTH
+ {0x916B, 0xBA7E}, //2885 #HANGUL SYLLABLE MIEUM YEO RIEULPHIEUPH
+ {0x916C, 0xBA7F}, //2886 #HANGUL SYLLABLE MIEUM YEO RIEULHIEUH
+ {0x916D, 0xBA80}, //2887 #HANGUL SYLLABLE MIEUM YEO MIEUM
+ {0x916E, 0xBA81}, //2888 #HANGUL SYLLABLE MIEUM YEO PIEUP
+ {0x916F, 0xBA82}, //2889 #HANGUL SYLLABLE MIEUM YEO PIEUPSIOS
+ {0x9170, 0xBA86}, //2890 #HANGUL SYLLABLE MIEUM YEO CIEUC
+ {0x9171, 0xBA88}, //2891 #HANGUL SYLLABLE MIEUM YEO KHIEUKH
+ {0x9172, 0xBA89}, //2892 #HANGUL SYLLABLE MIEUM YEO THIEUTH
+ {0x9173, 0xBA8A}, //2893 #HANGUL SYLLABLE MIEUM YEO PHIEUPH
+ {0x9174, 0xBA8B}, //2894 #HANGUL SYLLABLE MIEUM YEO HIEUH
+ {0x9175, 0xBA8D}, //2895 #HANGUL SYLLABLE MIEUM YE KIYEOK
+ {0x9176, 0xBA8E}, //2896 #HANGUL SYLLABLE MIEUM YE SSANGKIYEOK
+ {0x9177, 0xBA8F}, //2897 #HANGUL SYLLABLE MIEUM YE KIYEOKSIOS
+ {0x9178, 0xBA90}, //2898 #HANGUL SYLLABLE MIEUM YE NIEUN
+ {0x9179, 0xBA91}, //2899 #HANGUL SYLLABLE MIEUM YE NIEUNCIEUC
+ {0x917A, 0xBA92}, //2900 #HANGUL SYLLABLE MIEUM YE NIEUNHIEUH
+ {0x9181, 0xBA93}, //2901 #HANGUL SYLLABLE MIEUM YE TIKEUT
+ {0x9182, 0xBA94}, //2902 #HANGUL SYLLABLE MIEUM YE RIEUL
+ {0x9183, 0xBA95}, //2903 #HANGUL SYLLABLE MIEUM YE RIEULKIYEOK
+ {0x9184, 0xBA96}, //2904 #HANGUL SYLLABLE MIEUM YE RIEULMIEUM
+ {0x9185, 0xBA97}, //2905 #HANGUL SYLLABLE MIEUM YE RIEULPIEUP
+ {0x9186, 0xBA98}, //2906 #HANGUL SYLLABLE MIEUM YE RIEULSIOS
+ {0x9187, 0xBA99}, //2907 #HANGUL SYLLABLE MIEUM YE RIEULTHIEUTH
+ {0x9188, 0xBA9A}, //2908 #HANGUL SYLLABLE MIEUM YE RIEULPHIEUPH
+ {0x9189, 0xBA9B}, //2909 #HANGUL SYLLABLE MIEUM YE RIEULHIEUH
+ {0x918A, 0xBA9C}, //2910 #HANGUL SYLLABLE MIEUM YE MIEUM
+ {0x918B, 0xBA9D}, //2911 #HANGUL SYLLABLE MIEUM YE PIEUP
+ {0x918C, 0xBA9E}, //2912 #HANGUL SYLLABLE MIEUM YE PIEUPSIOS
+ {0x918D, 0xBA9F}, //2913 #HANGUL SYLLABLE MIEUM YE SIOS
+ {0x918E, 0xBAA0}, //2914 #HANGUL SYLLABLE MIEUM YE SSANGSIOS
+ {0x918F, 0xBAA1}, //2915 #HANGUL SYLLABLE MIEUM YE IEUNG
+ {0x9190, 0xBAA2}, //2916 #HANGUL SYLLABLE MIEUM YE CIEUC
+ {0x9191, 0xBAA3}, //2917 #HANGUL SYLLABLE MIEUM YE CHIEUCH
+ {0x9192, 0xBAA4}, //2918 #HANGUL SYLLABLE MIEUM YE KHIEUKH
+ {0x9193, 0xBAA5}, //2919 #HANGUL SYLLABLE MIEUM YE THIEUTH
+ {0x9194, 0xBAA6}, //2920 #HANGUL SYLLABLE MIEUM YE PHIEUPH
+ {0x9195, 0xBAA7}, //2921 #HANGUL SYLLABLE MIEUM YE HIEUH
+ {0x9196, 0xBAAA}, //2922 #HANGUL SYLLABLE MIEUM O SSANGKIYEOK
+ {0x9197, 0xBAAD}, //2923 #HANGUL SYLLABLE MIEUM O NIEUNCIEUC
+ {0x9198, 0xBAAE}, //2924 #HANGUL SYLLABLE MIEUM O NIEUNHIEUH
+ {0x9199, 0xBAAF}, //2925 #HANGUL SYLLABLE MIEUM O TIKEUT
+ {0x919A, 0xBAB1}, //2926 #HANGUL SYLLABLE MIEUM O RIEULKIYEOK
+ {0x919B, 0xBAB3}, //2927 #HANGUL SYLLABLE MIEUM O RIEULPIEUP
+ {0x919C, 0xBAB4}, //2928 #HANGUL SYLLABLE MIEUM O RIEULSIOS
+ {0x919D, 0xBAB5}, //2929 #HANGUL SYLLABLE MIEUM O RIEULTHIEUTH
+ {0x919E, 0xBAB6}, //2930 #HANGUL SYLLABLE MIEUM O RIEULPHIEUPH
+ {0x919F, 0xBAB7}, //2931 #HANGUL SYLLABLE MIEUM O RIEULHIEUH
+ {0x91A0, 0xBABA}, //2932 #HANGUL SYLLABLE MIEUM O PIEUPSIOS
+ {0x91A1, 0xBABC}, //2933 #HANGUL SYLLABLE MIEUM O SSANGSIOS
+ {0x91A2, 0xBABE}, //2934 #HANGUL SYLLABLE MIEUM O CIEUC
+ {0x91A3, 0xBABF}, //2935 #HANGUL SYLLABLE MIEUM O CHIEUCH
+ {0x91A4, 0xBAC0}, //2936 #HANGUL SYLLABLE MIEUM O KHIEUKH
+ {0x91A5, 0xBAC1}, //2937 #HANGUL SYLLABLE MIEUM O THIEUTH
+ {0x91A6, 0xBAC2}, //2938 #HANGUL SYLLABLE MIEUM O PHIEUPH
+ {0x91A7, 0xBAC3}, //2939 #HANGUL SYLLABLE MIEUM O HIEUH
+ {0x91A8, 0xBAC5}, //2940 #HANGUL SYLLABLE MIEUM WA KIYEOK
+ {0x91A9, 0xBAC6}, //2941 #HANGUL SYLLABLE MIEUM WA SSANGKIYEOK
+ {0x91AA, 0xBAC7}, //2942 #HANGUL SYLLABLE MIEUM WA KIYEOKSIOS
+ {0x91AB, 0xBAC9}, //2943 #HANGUL SYLLABLE MIEUM WA NIEUNCIEUC
+ {0x91AC, 0xBACA}, //2944 #HANGUL SYLLABLE MIEUM WA NIEUNHIEUH
+ {0x91AD, 0xBACB}, //2945 #HANGUL SYLLABLE MIEUM WA TIKEUT
+ {0x91AE, 0xBACC}, //2946 #HANGUL SYLLABLE MIEUM WA RIEUL
+ {0x91AF, 0xBACD}, //2947 #HANGUL SYLLABLE MIEUM WA RIEULKIYEOK
+ {0x91B0, 0xBACE}, //2948 #HANGUL SYLLABLE MIEUM WA RIEULMIEUM
+ {0x91B1, 0xBACF}, //2949 #HANGUL SYLLABLE MIEUM WA RIEULPIEUP
+ {0x91B2, 0xBAD0}, //2950 #HANGUL SYLLABLE MIEUM WA RIEULSIOS
+ {0x91B3, 0xBAD1}, //2951 #HANGUL SYLLABLE MIEUM WA RIEULTHIEUTH
+ {0x91B4, 0xBAD2}, //2952 #HANGUL SYLLABLE MIEUM WA RIEULPHIEUPH
+ {0x91B5, 0xBAD3}, //2953 #HANGUL SYLLABLE MIEUM WA RIEULHIEUH
+ {0x91B6, 0xBAD4}, //2954 #HANGUL SYLLABLE MIEUM WA MIEUM
+ {0x91B7, 0xBAD5}, //2955 #HANGUL SYLLABLE MIEUM WA PIEUP
+ {0x91B8, 0xBAD6}, //2956 #HANGUL SYLLABLE MIEUM WA PIEUPSIOS
+ {0x91B9, 0xBAD7}, //2957 #HANGUL SYLLABLE MIEUM WA SIOS
+ {0x91BA, 0xBADA}, //2958 #HANGUL SYLLABLE MIEUM WA CIEUC
+ {0x91BB, 0xBADB}, //2959 #HANGUL SYLLABLE MIEUM WA CHIEUCH
+ {0x91BC, 0xBADC}, //2960 #HANGUL SYLLABLE MIEUM WA KHIEUKH
+ {0x91BD, 0xBADD}, //2961 #HANGUL SYLLABLE MIEUM WA THIEUTH
+ {0x91BE, 0xBADE}, //2962 #HANGUL SYLLABLE MIEUM WA PHIEUPH
+ {0x91BF, 0xBADF}, //2963 #HANGUL SYLLABLE MIEUM WA HIEUH
+ {0x91C0, 0xBAE0}, //2964 #HANGUL SYLLABLE MIEUM WAE
+ {0x91C1, 0xBAE1}, //2965 #HANGUL SYLLABLE MIEUM WAE KIYEOK
+ {0x91C2, 0xBAE2}, //2966 #HANGUL SYLLABLE MIEUM WAE SSANGKIYEOK
+ {0x91C3, 0xBAE3}, //2967 #HANGUL SYLLABLE MIEUM WAE KIYEOKSIOS
+ {0x91C4, 0xBAE4}, //2968 #HANGUL SYLLABLE MIEUM WAE NIEUN
+ {0x91C5, 0xBAE5}, //2969 #HANGUL SYLLABLE MIEUM WAE NIEUNCIEUC
+ {0x91C6, 0xBAE6}, //2970 #HANGUL SYLLABLE MIEUM WAE NIEUNHIEUH
+ {0x91C7, 0xBAE7}, //2971 #HANGUL SYLLABLE MIEUM WAE TIKEUT
+ {0x91C8, 0xBAE8}, //2972 #HANGUL SYLLABLE MIEUM WAE RIEUL
+ {0x91C9, 0xBAE9}, //2973 #HANGUL SYLLABLE MIEUM WAE RIEULKIYEOK
+ {0x91CA, 0xBAEA}, //2974 #HANGUL SYLLABLE MIEUM WAE RIEULMIEUM
+ {0x91CB, 0xBAEB}, //2975 #HANGUL SYLLABLE MIEUM WAE RIEULPIEUP
+ {0x91CC, 0xBAEC}, //2976 #HANGUL SYLLABLE MIEUM WAE RIEULSIOS
+ {0x91CD, 0xBAED}, //2977 #HANGUL SYLLABLE MIEUM WAE RIEULTHIEUTH
+ {0x91CE, 0xBAEE}, //2978 #HANGUL SYLLABLE MIEUM WAE RIEULPHIEUPH
+ {0x91CF, 0xBAEF}, //2979 #HANGUL SYLLABLE MIEUM WAE RIEULHIEUH
+ {0x91D0, 0xBAF0}, //2980 #HANGUL SYLLABLE MIEUM WAE MIEUM
+ {0x91D1, 0xBAF1}, //2981 #HANGUL SYLLABLE MIEUM WAE PIEUP
+ {0x91D2, 0xBAF2}, //2982 #HANGUL SYLLABLE MIEUM WAE PIEUPSIOS
+ {0x91D3, 0xBAF3}, //2983 #HANGUL SYLLABLE MIEUM WAE SIOS
+ {0x91D4, 0xBAF4}, //2984 #HANGUL SYLLABLE MIEUM WAE SSANGSIOS
+ {0x91D5, 0xBAF5}, //2985 #HANGUL SYLLABLE MIEUM WAE IEUNG
+ {0x91D6, 0xBAF6}, //2986 #HANGUL SYLLABLE MIEUM WAE CIEUC
+ {0x91D7, 0xBAF7}, //2987 #HANGUL SYLLABLE MIEUM WAE CHIEUCH
+ {0x91D8, 0xBAF8}, //2988 #HANGUL SYLLABLE MIEUM WAE KHIEUKH
+ {0x91D9, 0xBAF9}, //2989 #HANGUL SYLLABLE MIEUM WAE THIEUTH
+ {0x91DA, 0xBAFA}, //2990 #HANGUL SYLLABLE MIEUM WAE PHIEUPH
+ {0x91DB, 0xBAFB}, //2991 #HANGUL SYLLABLE MIEUM WAE HIEUH
+ {0x91DC, 0xBAFD}, //2992 #HANGUL SYLLABLE MIEUM OE KIYEOK
+ {0x91DD, 0xBAFE}, //2993 #HANGUL SYLLABLE MIEUM OE SSANGKIYEOK
+ {0x91DE, 0xBAFF}, //2994 #HANGUL SYLLABLE MIEUM OE KIYEOKSIOS
+ {0x91DF, 0xBB01}, //2995 #HANGUL SYLLABLE MIEUM OE NIEUNCIEUC
+ {0x91E0, 0xBB02}, //2996 #HANGUL SYLLABLE MIEUM OE NIEUNHIEUH
+ {0x91E1, 0xBB03}, //2997 #HANGUL SYLLABLE MIEUM OE TIKEUT
+ {0x91E2, 0xBB05}, //2998 #HANGUL SYLLABLE MIEUM OE RIEULKIYEOK
+ {0x91E3, 0xBB06}, //2999 #HANGUL SYLLABLE MIEUM OE RIEULMIEUM
+ {0x91E4, 0xBB07}, //3000 #HANGUL SYLLABLE MIEUM OE RIEULPIEUP
+ {0x91E5, 0xBB08}, //3001 #HANGUL SYLLABLE MIEUM OE RIEULSIOS
+ {0x91E6, 0xBB09}, //3002 #HANGUL SYLLABLE MIEUM OE RIEULTHIEUTH
+ {0x91E7, 0xBB0A}, //3003 #HANGUL SYLLABLE MIEUM OE RIEULPHIEUPH
+ {0x91E8, 0xBB0B}, //3004 #HANGUL SYLLABLE MIEUM OE RIEULHIEUH
+ {0x91E9, 0xBB0C}, //3005 #HANGUL SYLLABLE MIEUM OE MIEUM
+ {0x91EA, 0xBB0E}, //3006 #HANGUL SYLLABLE MIEUM OE PIEUPSIOS
+ {0x91EB, 0xBB10}, //3007 #HANGUL SYLLABLE MIEUM OE SSANGSIOS
+ {0x91EC, 0xBB12}, //3008 #HANGUL SYLLABLE MIEUM OE CIEUC
+ {0x91ED, 0xBB13}, //3009 #HANGUL SYLLABLE MIEUM OE CHIEUCH
+ {0x91EE, 0xBB14}, //3010 #HANGUL SYLLABLE MIEUM OE KHIEUKH
+ {0x91EF, 0xBB15}, //3011 #HANGUL SYLLABLE MIEUM OE THIEUTH
+ {0x91F0, 0xBB16}, //3012 #HANGUL SYLLABLE MIEUM OE PHIEUPH
+ {0x91F1, 0xBB17}, //3013 #HANGUL SYLLABLE MIEUM OE HIEUH
+ {0x91F2, 0xBB19}, //3014 #HANGUL SYLLABLE MIEUM YO KIYEOK
+ {0x91F3, 0xBB1A}, //3015 #HANGUL SYLLABLE MIEUM YO SSANGKIYEOK
+ {0x91F4, 0xBB1B}, //3016 #HANGUL SYLLABLE MIEUM YO KIYEOKSIOS
+ {0x91F5, 0xBB1D}, //3017 #HANGUL SYLLABLE MIEUM YO NIEUNCIEUC
+ {0x91F6, 0xBB1E}, //3018 #HANGUL SYLLABLE MIEUM YO NIEUNHIEUH
+ {0x91F7, 0xBB1F}, //3019 #HANGUL SYLLABLE MIEUM YO TIKEUT
+ {0x91F8, 0xBB21}, //3020 #HANGUL SYLLABLE MIEUM YO RIEULKIYEOK
+ {0x91F9, 0xBB22}, //3021 #HANGUL SYLLABLE MIEUM YO RIEULMIEUM
+ {0x91FA, 0xBB23}, //3022 #HANGUL SYLLABLE MIEUM YO RIEULPIEUP
+ {0x91FB, 0xBB24}, //3023 #HANGUL SYLLABLE MIEUM YO RIEULSIOS
+ {0x91FC, 0xBB25}, //3024 #HANGUL SYLLABLE MIEUM YO RIEULTHIEUTH
+ {0x91FD, 0xBB26}, //3025 #HANGUL SYLLABLE MIEUM YO RIEULPHIEUPH
+ {0x91FE, 0xBB27}, //3026 #HANGUL SYLLABLE MIEUM YO RIEULHIEUH
+ {0x9241, 0xBB28}, //3027 #HANGUL SYLLABLE MIEUM YO MIEUM
+ {0x9242, 0xBB2A}, //3028 #HANGUL SYLLABLE MIEUM YO PIEUPSIOS
+ {0x9243, 0xBB2C}, //3029 #HANGUL SYLLABLE MIEUM YO SSANGSIOS
+ {0x9244, 0xBB2D}, //3030 #HANGUL SYLLABLE MIEUM YO IEUNG
+ {0x9245, 0xBB2E}, //3031 #HANGUL SYLLABLE MIEUM YO CIEUC
+ {0x9246, 0xBB2F}, //3032 #HANGUL SYLLABLE MIEUM YO CHIEUCH
+ {0x9247, 0xBB30}, //3033 #HANGUL SYLLABLE MIEUM YO KHIEUKH
+ {0x9248, 0xBB31}, //3034 #HANGUL SYLLABLE MIEUM YO THIEUTH
+ {0x9249, 0xBB32}, //3035 #HANGUL SYLLABLE MIEUM YO PHIEUPH
+ {0x924A, 0xBB33}, //3036 #HANGUL SYLLABLE MIEUM YO HIEUH
+ {0x924B, 0xBB37}, //3037 #HANGUL SYLLABLE MIEUM U KIYEOKSIOS
+ {0x924C, 0xBB39}, //3038 #HANGUL SYLLABLE MIEUM U NIEUNCIEUC
+ {0x924D, 0xBB3A}, //3039 #HANGUL SYLLABLE MIEUM U NIEUNHIEUH
+ {0x924E, 0xBB3F}, //3040 #HANGUL SYLLABLE MIEUM U RIEULPIEUP
+ {0x924F, 0xBB40}, //3041 #HANGUL SYLLABLE MIEUM U RIEULSIOS
+ {0x9250, 0xBB41}, //3042 #HANGUL SYLLABLE MIEUM U RIEULTHIEUTH
+ {0x9251, 0xBB42}, //3043 #HANGUL SYLLABLE MIEUM U RIEULPHIEUPH
+ {0x9252, 0xBB43}, //3044 #HANGUL SYLLABLE MIEUM U RIEULHIEUH
+ {0x9253, 0xBB46}, //3045 #HANGUL SYLLABLE MIEUM U PIEUPSIOS
+ {0x9254, 0xBB48}, //3046 #HANGUL SYLLABLE MIEUM U SSANGSIOS
+ {0x9255, 0xBB4A}, //3047 #HANGUL SYLLABLE MIEUM U CIEUC
+ {0x9256, 0xBB4B}, //3048 #HANGUL SYLLABLE MIEUM U CHIEUCH
+ {0x9257, 0xBB4C}, //3049 #HANGUL SYLLABLE MIEUM U KHIEUKH
+ {0x9258, 0xBB4E}, //3050 #HANGUL SYLLABLE MIEUM U PHIEUPH
+ {0x9259, 0xBB51}, //3051 #HANGUL SYLLABLE MIEUM WEO KIYEOK
+ {0x925A, 0xBB52}, //3052 #HANGUL SYLLABLE MIEUM WEO SSANGKIYEOK
+ {0x9261, 0xBB53}, //3053 #HANGUL SYLLABLE MIEUM WEO KIYEOKSIOS
+ {0x9262, 0xBB55}, //3054 #HANGUL SYLLABLE MIEUM WEO NIEUNCIEUC
+ {0x9263, 0xBB56}, //3055 #HANGUL SYLLABLE MIEUM WEO NIEUNHIEUH
+ {0x9264, 0xBB57}, //3056 #HANGUL SYLLABLE MIEUM WEO TIKEUT
+ {0x9265, 0xBB59}, //3057 #HANGUL SYLLABLE MIEUM WEO RIEULKIYEOK
+ {0x9266, 0xBB5A}, //3058 #HANGUL SYLLABLE MIEUM WEO RIEULMIEUM
+ {0x9267, 0xBB5B}, //3059 #HANGUL SYLLABLE MIEUM WEO RIEULPIEUP
+ {0x9268, 0xBB5C}, //3060 #HANGUL SYLLABLE MIEUM WEO RIEULSIOS
+ {0x9269, 0xBB5D}, //3061 #HANGUL SYLLABLE MIEUM WEO RIEULTHIEUTH
+ {0x926A, 0xBB5E}, //3062 #HANGUL SYLLABLE MIEUM WEO RIEULPHIEUPH
+ {0x926B, 0xBB5F}, //3063 #HANGUL SYLLABLE MIEUM WEO RIEULHIEUH
+ {0x926C, 0xBB60}, //3064 #HANGUL SYLLABLE MIEUM WEO MIEUM
+ {0x926D, 0xBB62}, //3065 #HANGUL SYLLABLE MIEUM WEO PIEUPSIOS
+ {0x926E, 0xBB64}, //3066 #HANGUL SYLLABLE MIEUM WEO SSANGSIOS
+ {0x926F, 0xBB65}, //3067 #HANGUL SYLLABLE MIEUM WEO IEUNG
+ {0x9270, 0xBB66}, //3068 #HANGUL SYLLABLE MIEUM WEO CIEUC
+ {0x9271, 0xBB67}, //3069 #HANGUL SYLLABLE MIEUM WEO CHIEUCH
+ {0x9272, 0xBB68}, //3070 #HANGUL SYLLABLE MIEUM WEO KHIEUKH
+ {0x9273, 0xBB69}, //3071 #HANGUL SYLLABLE MIEUM WEO THIEUTH
+ {0x9274, 0xBB6A}, //3072 #HANGUL SYLLABLE MIEUM WEO PHIEUPH
+ {0x9275, 0xBB6B}, //3073 #HANGUL SYLLABLE MIEUM WEO HIEUH
+ {0x9276, 0xBB6D}, //3074 #HANGUL SYLLABLE MIEUM WE KIYEOK
+ {0x9277, 0xBB6E}, //3075 #HANGUL SYLLABLE MIEUM WE SSANGKIYEOK
+ {0x9278, 0xBB6F}, //3076 #HANGUL SYLLABLE MIEUM WE KIYEOKSIOS
+ {0x9279, 0xBB70}, //3077 #HANGUL SYLLABLE MIEUM WE NIEUN
+ {0x927A, 0xBB71}, //3078 #HANGUL SYLLABLE MIEUM WE NIEUNCIEUC
+ {0x9281, 0xBB72}, //3079 #HANGUL SYLLABLE MIEUM WE NIEUNHIEUH
+ {0x9282, 0xBB73}, //3080 #HANGUL SYLLABLE MIEUM WE TIKEUT
+ {0x9283, 0xBB74}, //3081 #HANGUL SYLLABLE MIEUM WE RIEUL
+ {0x9284, 0xBB75}, //3082 #HANGUL SYLLABLE MIEUM WE RIEULKIYEOK
+ {0x9285, 0xBB76}, //3083 #HANGUL SYLLABLE MIEUM WE RIEULMIEUM
+ {0x9286, 0xBB77}, //3084 #HANGUL SYLLABLE MIEUM WE RIEULPIEUP
+ {0x9287, 0xBB78}, //3085 #HANGUL SYLLABLE MIEUM WE RIEULSIOS
+ {0x9288, 0xBB79}, //3086 #HANGUL SYLLABLE MIEUM WE RIEULTHIEUTH
+ {0x9289, 0xBB7A}, //3087 #HANGUL SYLLABLE MIEUM WE RIEULPHIEUPH
+ {0x928A, 0xBB7B}, //3088 #HANGUL SYLLABLE MIEUM WE RIEULHIEUH
+ {0x928B, 0xBB7C}, //3089 #HANGUL SYLLABLE MIEUM WE MIEUM
+ {0x928C, 0xBB7D}, //3090 #HANGUL SYLLABLE MIEUM WE PIEUP
+ {0x928D, 0xBB7E}, //3091 #HANGUL SYLLABLE MIEUM WE PIEUPSIOS
+ {0x928E, 0xBB7F}, //3092 #HANGUL SYLLABLE MIEUM WE SIOS
+ {0x928F, 0xBB80}, //3093 #HANGUL SYLLABLE MIEUM WE SSANGSIOS
+ {0x9290, 0xBB81}, //3094 #HANGUL SYLLABLE MIEUM WE IEUNG
+ {0x9291, 0xBB82}, //3095 #HANGUL SYLLABLE MIEUM WE CIEUC
+ {0x9292, 0xBB83}, //3096 #HANGUL SYLLABLE MIEUM WE CHIEUCH
+ {0x9293, 0xBB84}, //3097 #HANGUL SYLLABLE MIEUM WE KHIEUKH
+ {0x9294, 0xBB85}, //3098 #HANGUL SYLLABLE MIEUM WE THIEUTH
+ {0x9295, 0xBB86}, //3099 #HANGUL SYLLABLE MIEUM WE PHIEUPH
+ {0x9296, 0xBB87}, //3100 #HANGUL SYLLABLE MIEUM WE HIEUH
+ {0x9297, 0xBB89}, //3101 #HANGUL SYLLABLE MIEUM WI KIYEOK
+ {0x9298, 0xBB8A}, //3102 #HANGUL SYLLABLE MIEUM WI SSANGKIYEOK
+ {0x9299, 0xBB8B}, //3103 #HANGUL SYLLABLE MIEUM WI KIYEOKSIOS
+ {0x929A, 0xBB8D}, //3104 #HANGUL SYLLABLE MIEUM WI NIEUNCIEUC
+ {0x929B, 0xBB8E}, //3105 #HANGUL SYLLABLE MIEUM WI NIEUNHIEUH
+ {0x929C, 0xBB8F}, //3106 #HANGUL SYLLABLE MIEUM WI TIKEUT
+ {0x929D, 0xBB91}, //3107 #HANGUL SYLLABLE MIEUM WI RIEULKIYEOK
+ {0x929E, 0xBB92}, //3108 #HANGUL SYLLABLE MIEUM WI RIEULMIEUM
+ {0x929F, 0xBB93}, //3109 #HANGUL SYLLABLE MIEUM WI RIEULPIEUP
+ {0x92A0, 0xBB94}, //3110 #HANGUL SYLLABLE MIEUM WI RIEULSIOS
+ {0x92A1, 0xBB95}, //3111 #HANGUL SYLLABLE MIEUM WI RIEULTHIEUTH
+ {0x92A2, 0xBB96}, //3112 #HANGUL SYLLABLE MIEUM WI RIEULPHIEUPH
+ {0x92A3, 0xBB97}, //3113 #HANGUL SYLLABLE MIEUM WI RIEULHIEUH
+ {0x92A4, 0xBB98}, //3114 #HANGUL SYLLABLE MIEUM WI MIEUM
+ {0x92A5, 0xBB99}, //3115 #HANGUL SYLLABLE MIEUM WI PIEUP
+ {0x92A6, 0xBB9A}, //3116 #HANGUL SYLLABLE MIEUM WI PIEUPSIOS
+ {0x92A7, 0xBB9B}, //3117 #HANGUL SYLLABLE MIEUM WI SIOS
+ {0x92A8, 0xBB9C}, //3118 #HANGUL SYLLABLE MIEUM WI SSANGSIOS
+ {0x92A9, 0xBB9D}, //3119 #HANGUL SYLLABLE MIEUM WI IEUNG
+ {0x92AA, 0xBB9E}, //3120 #HANGUL SYLLABLE MIEUM WI CIEUC
+ {0x92AB, 0xBB9F}, //3121 #HANGUL SYLLABLE MIEUM WI CHIEUCH
+ {0x92AC, 0xBBA0}, //3122 #HANGUL SYLLABLE MIEUM WI KHIEUKH
+ {0x92AD, 0xBBA1}, //3123 #HANGUL SYLLABLE MIEUM WI THIEUTH
+ {0x92AE, 0xBBA2}, //3124 #HANGUL SYLLABLE MIEUM WI PHIEUPH
+ {0x92AF, 0xBBA3}, //3125 #HANGUL SYLLABLE MIEUM WI HIEUH
+ {0x92B0, 0xBBA5}, //3126 #HANGUL SYLLABLE MIEUM YU KIYEOK
+ {0x92B1, 0xBBA6}, //3127 #HANGUL SYLLABLE MIEUM YU SSANGKIYEOK
+ {0x92B2, 0xBBA7}, //3128 #HANGUL SYLLABLE MIEUM YU KIYEOKSIOS
+ {0x92B3, 0xBBA9}, //3129 #HANGUL SYLLABLE MIEUM YU NIEUNCIEUC
+ {0x92B4, 0xBBAA}, //3130 #HANGUL SYLLABLE MIEUM YU NIEUNHIEUH
+ {0x92B5, 0xBBAB}, //3131 #HANGUL SYLLABLE MIEUM YU TIKEUT
+ {0x92B6, 0xBBAD}, //3132 #HANGUL SYLLABLE MIEUM YU RIEULKIYEOK
+ {0x92B7, 0xBBAE}, //3133 #HANGUL SYLLABLE MIEUM YU RIEULMIEUM
+ {0x92B8, 0xBBAF}, //3134 #HANGUL SYLLABLE MIEUM YU RIEULPIEUP
+ {0x92B9, 0xBBB0}, //3135 #HANGUL SYLLABLE MIEUM YU RIEULSIOS
+ {0x92BA, 0xBBB1}, //3136 #HANGUL SYLLABLE MIEUM YU RIEULTHIEUTH
+ {0x92BB, 0xBBB2}, //3137 #HANGUL SYLLABLE MIEUM YU RIEULPHIEUPH
+ {0x92BC, 0xBBB3}, //3138 #HANGUL SYLLABLE MIEUM YU RIEULHIEUH
+ {0x92BD, 0xBBB5}, //3139 #HANGUL SYLLABLE MIEUM YU PIEUP
+ {0x92BE, 0xBBB6}, //3140 #HANGUL SYLLABLE MIEUM YU PIEUPSIOS
+ {0x92BF, 0xBBB8}, //3141 #HANGUL SYLLABLE MIEUM YU SSANGSIOS
+ {0x92C0, 0xBBB9}, //3142 #HANGUL SYLLABLE MIEUM YU IEUNG
+ {0x92C1, 0xBBBA}, //3143 #HANGUL SYLLABLE MIEUM YU CIEUC
+ {0x92C2, 0xBBBB}, //3144 #HANGUL SYLLABLE MIEUM YU CHIEUCH
+ {0x92C3, 0xBBBC}, //3145 #HANGUL SYLLABLE MIEUM YU KHIEUKH
+ {0x92C4, 0xBBBD}, //3146 #HANGUL SYLLABLE MIEUM YU THIEUTH
+ {0x92C5, 0xBBBE}, //3147 #HANGUL SYLLABLE MIEUM YU PHIEUPH
+ {0x92C6, 0xBBBF}, //3148 #HANGUL SYLLABLE MIEUM YU HIEUH
+ {0x92C7, 0xBBC1}, //3149 #HANGUL SYLLABLE MIEUM EU KIYEOK
+ {0x92C8, 0xBBC2}, //3150 #HANGUL SYLLABLE MIEUM EU SSANGKIYEOK
+ {0x92C9, 0xBBC3}, //3151 #HANGUL SYLLABLE MIEUM EU KIYEOKSIOS
+ {0x92CA, 0xBBC5}, //3152 #HANGUL SYLLABLE MIEUM EU NIEUNCIEUC
+ {0x92CB, 0xBBC6}, //3153 #HANGUL SYLLABLE MIEUM EU NIEUNHIEUH
+ {0x92CC, 0xBBC7}, //3154 #HANGUL SYLLABLE MIEUM EU TIKEUT
+ {0x92CD, 0xBBC9}, //3155 #HANGUL SYLLABLE MIEUM EU RIEULKIYEOK
+ {0x92CE, 0xBBCA}, //3156 #HANGUL SYLLABLE MIEUM EU RIEULMIEUM
+ {0x92CF, 0xBBCB}, //3157 #HANGUL SYLLABLE MIEUM EU RIEULPIEUP
+ {0x92D0, 0xBBCC}, //3158 #HANGUL SYLLABLE MIEUM EU RIEULSIOS
+ {0x92D1, 0xBBCD}, //3159 #HANGUL SYLLABLE MIEUM EU RIEULTHIEUTH
+ {0x92D2, 0xBBCE}, //3160 #HANGUL SYLLABLE MIEUM EU RIEULPHIEUPH
+ {0x92D3, 0xBBCF}, //3161 #HANGUL SYLLABLE MIEUM EU RIEULHIEUH
+ {0x92D4, 0xBBD1}, //3162 #HANGUL SYLLABLE MIEUM EU PIEUP
+ {0x92D5, 0xBBD2}, //3163 #HANGUL SYLLABLE MIEUM EU PIEUPSIOS
+ {0x92D6, 0xBBD4}, //3164 #HANGUL SYLLABLE MIEUM EU SSANGSIOS
+ {0x92D7, 0xBBD5}, //3165 #HANGUL SYLLABLE MIEUM EU IEUNG
+ {0x92D8, 0xBBD6}, //3166 #HANGUL SYLLABLE MIEUM EU CIEUC
+ {0x92D9, 0xBBD7}, //3167 #HANGUL SYLLABLE MIEUM EU CHIEUCH
+ {0x92DA, 0xBBD8}, //3168 #HANGUL SYLLABLE MIEUM EU KHIEUKH
+ {0x92DB, 0xBBD9}, //3169 #HANGUL SYLLABLE MIEUM EU THIEUTH
+ {0x92DC, 0xBBDA}, //3170 #HANGUL SYLLABLE MIEUM EU PHIEUPH
+ {0x92DD, 0xBBDB}, //3171 #HANGUL SYLLABLE MIEUM EU HIEUH
+ {0x92DE, 0xBBDC}, //3172 #HANGUL SYLLABLE MIEUM YI
+ {0x92DF, 0xBBDD}, //3173 #HANGUL SYLLABLE MIEUM YI KIYEOK
+ {0x92E0, 0xBBDE}, //3174 #HANGUL SYLLABLE MIEUM YI SSANGKIYEOK
+ {0x92E1, 0xBBDF}, //3175 #HANGUL SYLLABLE MIEUM YI KIYEOKSIOS
+ {0x92E2, 0xBBE0}, //3176 #HANGUL SYLLABLE MIEUM YI NIEUN
+ {0x92E3, 0xBBE1}, //3177 #HANGUL SYLLABLE MIEUM YI NIEUNCIEUC
+ {0x92E4, 0xBBE2}, //3178 #HANGUL SYLLABLE MIEUM YI NIEUNHIEUH
+ {0x92E5, 0xBBE3}, //3179 #HANGUL SYLLABLE MIEUM YI TIKEUT
+ {0x92E6, 0xBBE4}, //3180 #HANGUL SYLLABLE MIEUM YI RIEUL
+ {0x92E7, 0xBBE5}, //3181 #HANGUL SYLLABLE MIEUM YI RIEULKIYEOK
+ {0x92E8, 0xBBE6}, //3182 #HANGUL SYLLABLE MIEUM YI RIEULMIEUM
+ {0x92E9, 0xBBE7}, //3183 #HANGUL SYLLABLE MIEUM YI RIEULPIEUP
+ {0x92EA, 0xBBE8}, //3184 #HANGUL SYLLABLE MIEUM YI RIEULSIOS
+ {0x92EB, 0xBBE9}, //3185 #HANGUL SYLLABLE MIEUM YI RIEULTHIEUTH
+ {0x92EC, 0xBBEA}, //3186 #HANGUL SYLLABLE MIEUM YI RIEULPHIEUPH
+ {0x92ED, 0xBBEB}, //3187 #HANGUL SYLLABLE MIEUM YI RIEULHIEUH
+ {0x92EE, 0xBBEC}, //3188 #HANGUL SYLLABLE MIEUM YI MIEUM
+ {0x92EF, 0xBBED}, //3189 #HANGUL SYLLABLE MIEUM YI PIEUP
+ {0x92F0, 0xBBEE}, //3190 #HANGUL SYLLABLE MIEUM YI PIEUPSIOS
+ {0x92F1, 0xBBEF}, //3191 #HANGUL SYLLABLE MIEUM YI SIOS
+ {0x92F2, 0xBBF0}, //3192 #HANGUL SYLLABLE MIEUM YI SSANGSIOS
+ {0x92F3, 0xBBF1}, //3193 #HANGUL SYLLABLE MIEUM YI IEUNG
+ {0x92F4, 0xBBF2}, //3194 #HANGUL SYLLABLE MIEUM YI CIEUC
+ {0x92F5, 0xBBF3}, //3195 #HANGUL SYLLABLE MIEUM YI CHIEUCH
+ {0x92F6, 0xBBF4}, //3196 #HANGUL SYLLABLE MIEUM YI KHIEUKH
+ {0x92F7, 0xBBF5}, //3197 #HANGUL SYLLABLE MIEUM YI THIEUTH
+ {0x92F8, 0xBBF6}, //3198 #HANGUL SYLLABLE MIEUM YI PHIEUPH
+ {0x92F9, 0xBBF7}, //3199 #HANGUL SYLLABLE MIEUM YI HIEUH
+ {0x92FA, 0xBBFA}, //3200 #HANGUL SYLLABLE MIEUM I SSANGKIYEOK
+ {0x92FB, 0xBBFB}, //3201 #HANGUL SYLLABLE MIEUM I KIYEOKSIOS
+ {0x92FC, 0xBBFD}, //3202 #HANGUL SYLLABLE MIEUM I NIEUNCIEUC
+ {0x92FD, 0xBBFE}, //3203 #HANGUL SYLLABLE MIEUM I NIEUNHIEUH
+ {0x92FE, 0xBC01}, //3204 #HANGUL SYLLABLE MIEUM I RIEULKIYEOK
+ {0x9341, 0xBC03}, //3205 #HANGUL SYLLABLE MIEUM I RIEULPIEUP
+ {0x9342, 0xBC04}, //3206 #HANGUL SYLLABLE MIEUM I RIEULSIOS
+ {0x9343, 0xBC05}, //3207 #HANGUL SYLLABLE MIEUM I RIEULTHIEUTH
+ {0x9344, 0xBC06}, //3208 #HANGUL SYLLABLE MIEUM I RIEULPHIEUPH
+ {0x9345, 0xBC07}, //3209 #HANGUL SYLLABLE MIEUM I RIEULHIEUH
+ {0x9346, 0xBC0A}, //3210 #HANGUL SYLLABLE MIEUM I PIEUPSIOS
+ {0x9347, 0xBC0E}, //3211 #HANGUL SYLLABLE MIEUM I CIEUC
+ {0x9348, 0xBC10}, //3212 #HANGUL SYLLABLE MIEUM I KHIEUKH
+ {0x9349, 0xBC12}, //3213 #HANGUL SYLLABLE MIEUM I PHIEUPH
+ {0x934A, 0xBC13}, //3214 #HANGUL SYLLABLE MIEUM I HIEUH
+ {0x934B, 0xBC19}, //3215 #HANGUL SYLLABLE PIEUP A NIEUNCIEUC
+ {0x934C, 0xBC1A}, //3216 #HANGUL SYLLABLE PIEUP A NIEUNHIEUH
+ {0x934D, 0xBC20}, //3217 #HANGUL SYLLABLE PIEUP A RIEULSIOS
+ {0x934E, 0xBC21}, //3218 #HANGUL SYLLABLE PIEUP A RIEULTHIEUTH
+ {0x934F, 0xBC22}, //3219 #HANGUL SYLLABLE PIEUP A RIEULPHIEUPH
+ {0x9350, 0xBC23}, //3220 #HANGUL SYLLABLE PIEUP A RIEULHIEUH
+ {0x9351, 0xBC26}, //3221 #HANGUL SYLLABLE PIEUP A PIEUPSIOS
+ {0x9352, 0xBC28}, //3222 #HANGUL SYLLABLE PIEUP A SSANGSIOS
+ {0x9353, 0xBC2A}, //3223 #HANGUL SYLLABLE PIEUP A CIEUC
+ {0x9354, 0xBC2B}, //3224 #HANGUL SYLLABLE PIEUP A CHIEUCH
+ {0x9355, 0xBC2C}, //3225 #HANGUL SYLLABLE PIEUP A KHIEUKH
+ {0x9356, 0xBC2E}, //3226 #HANGUL SYLLABLE PIEUP A PHIEUPH
+ {0x9357, 0xBC2F}, //3227 #HANGUL SYLLABLE PIEUP A HIEUH
+ {0x9358, 0xBC32}, //3228 #HANGUL SYLLABLE PIEUP AE SSANGKIYEOK
+ {0x9359, 0xBC33}, //3229 #HANGUL SYLLABLE PIEUP AE KIYEOKSIOS
+ {0x935A, 0xBC35}, //3230 #HANGUL SYLLABLE PIEUP AE NIEUNCIEUC
+ {0x9361, 0xBC36}, //3231 #HANGUL SYLLABLE PIEUP AE NIEUNHIEUH
+ {0x9362, 0xBC37}, //3232 #HANGUL SYLLABLE PIEUP AE TIKEUT
+ {0x9363, 0xBC39}, //3233 #HANGUL SYLLABLE PIEUP AE RIEULKIYEOK
+ {0x9364, 0xBC3A}, //3234 #HANGUL SYLLABLE PIEUP AE RIEULMIEUM
+ {0x9365, 0xBC3B}, //3235 #HANGUL SYLLABLE PIEUP AE RIEULPIEUP
+ {0x9366, 0xBC3C}, //3236 #HANGUL SYLLABLE PIEUP AE RIEULSIOS
+ {0x9367, 0xBC3D}, //3237 #HANGUL SYLLABLE PIEUP AE RIEULTHIEUTH
+ {0x9368, 0xBC3E}, //3238 #HANGUL SYLLABLE PIEUP AE RIEULPHIEUPH
+ {0x9369, 0xBC3F}, //3239 #HANGUL SYLLABLE PIEUP AE RIEULHIEUH
+ {0x936A, 0xBC42}, //3240 #HANGUL SYLLABLE PIEUP AE PIEUPSIOS
+ {0x936B, 0xBC46}, //3241 #HANGUL SYLLABLE PIEUP AE CIEUC
+ {0x936C, 0xBC47}, //3242 #HANGUL SYLLABLE PIEUP AE CHIEUCH
+ {0x936D, 0xBC48}, //3243 #HANGUL SYLLABLE PIEUP AE KHIEUKH
+ {0x936E, 0xBC4A}, //3244 #HANGUL SYLLABLE PIEUP AE PHIEUPH
+ {0x936F, 0xBC4B}, //3245 #HANGUL SYLLABLE PIEUP AE HIEUH
+ {0x9370, 0xBC4E}, //3246 #HANGUL SYLLABLE PIEUP YA SSANGKIYEOK
+ {0x9371, 0xBC4F}, //3247 #HANGUL SYLLABLE PIEUP YA KIYEOKSIOS
+ {0x9372, 0xBC51}, //3248 #HANGUL SYLLABLE PIEUP YA NIEUNCIEUC
+ {0x9373, 0xBC52}, //3249 #HANGUL SYLLABLE PIEUP YA NIEUNHIEUH
+ {0x9374, 0xBC53}, //3250 #HANGUL SYLLABLE PIEUP YA TIKEUT
+ {0x9375, 0xBC54}, //3251 #HANGUL SYLLABLE PIEUP YA RIEUL
+ {0x9376, 0xBC55}, //3252 #HANGUL SYLLABLE PIEUP YA RIEULKIYEOK
+ {0x9377, 0xBC56}, //3253 #HANGUL SYLLABLE PIEUP YA RIEULMIEUM
+ {0x9378, 0xBC57}, //3254 #HANGUL SYLLABLE PIEUP YA RIEULPIEUP
+ {0x9379, 0xBC58}, //3255 #HANGUL SYLLABLE PIEUP YA RIEULSIOS
+ {0x937A, 0xBC59}, //3256 #HANGUL SYLLABLE PIEUP YA RIEULTHIEUTH
+ {0x9381, 0xBC5A}, //3257 #HANGUL SYLLABLE PIEUP YA RIEULPHIEUPH
+ {0x9382, 0xBC5B}, //3258 #HANGUL SYLLABLE PIEUP YA RIEULHIEUH
+ {0x9383, 0xBC5C}, //3259 #HANGUL SYLLABLE PIEUP YA MIEUM
+ {0x9384, 0xBC5E}, //3260 #HANGUL SYLLABLE PIEUP YA PIEUPSIOS
+ {0x9385, 0xBC5F}, //3261 #HANGUL SYLLABLE PIEUP YA SIOS
+ {0x9386, 0xBC60}, //3262 #HANGUL SYLLABLE PIEUP YA SSANGSIOS
+ {0x9387, 0xBC61}, //3263 #HANGUL SYLLABLE PIEUP YA IEUNG
+ {0x9388, 0xBC62}, //3264 #HANGUL SYLLABLE PIEUP YA CIEUC
+ {0x9389, 0xBC63}, //3265 #HANGUL SYLLABLE PIEUP YA CHIEUCH
+ {0x938A, 0xBC64}, //3266 #HANGUL SYLLABLE PIEUP YA KHIEUKH
+ {0x938B, 0xBC65}, //3267 #HANGUL SYLLABLE PIEUP YA THIEUTH
+ {0x938C, 0xBC66}, //3268 #HANGUL SYLLABLE PIEUP YA PHIEUPH
+ {0x938D, 0xBC67}, //3269 #HANGUL SYLLABLE PIEUP YA HIEUH
+ {0x938E, 0xBC68}, //3270 #HANGUL SYLLABLE PIEUP YAE
+ {0x938F, 0xBC69}, //3271 #HANGUL SYLLABLE PIEUP YAE KIYEOK
+ {0x9390, 0xBC6A}, //3272 #HANGUL SYLLABLE PIEUP YAE SSANGKIYEOK
+ {0x9391, 0xBC6B}, //3273 #HANGUL SYLLABLE PIEUP YAE KIYEOKSIOS
+ {0x9392, 0xBC6C}, //3274 #HANGUL SYLLABLE PIEUP YAE NIEUN
+ {0x9393, 0xBC6D}, //3275 #HANGUL SYLLABLE PIEUP YAE NIEUNCIEUC
+ {0x9394, 0xBC6E}, //3276 #HANGUL SYLLABLE PIEUP YAE NIEUNHIEUH
+ {0x9395, 0xBC6F}, //3277 #HANGUL SYLLABLE PIEUP YAE TIKEUT
+ {0x9396, 0xBC70}, //3278 #HANGUL SYLLABLE PIEUP YAE RIEUL
+ {0x9397, 0xBC71}, //3279 #HANGUL SYLLABLE PIEUP YAE RIEULKIYEOK
+ {0x9398, 0xBC72}, //3280 #HANGUL SYLLABLE PIEUP YAE RIEULMIEUM
+ {0x9399, 0xBC73}, //3281 #HANGUL SYLLABLE PIEUP YAE RIEULPIEUP
+ {0x939A, 0xBC74}, //3282 #HANGUL SYLLABLE PIEUP YAE RIEULSIOS
+ {0x939B, 0xBC75}, //3283 #HANGUL SYLLABLE PIEUP YAE RIEULTHIEUTH
+ {0x939C, 0xBC76}, //3284 #HANGUL SYLLABLE PIEUP YAE RIEULPHIEUPH
+ {0x939D, 0xBC77}, //3285 #HANGUL SYLLABLE PIEUP YAE RIEULHIEUH
+ {0x939E, 0xBC78}, //3286 #HANGUL SYLLABLE PIEUP YAE MIEUM
+ {0x939F, 0xBC79}, //3287 #HANGUL SYLLABLE PIEUP YAE PIEUP
+ {0x93A0, 0xBC7A}, //3288 #HANGUL SYLLABLE PIEUP YAE PIEUPSIOS
+ {0x93A1, 0xBC7B}, //3289 #HANGUL SYLLABLE PIEUP YAE SIOS
+ {0x93A2, 0xBC7C}, //3290 #HANGUL SYLLABLE PIEUP YAE SSANGSIOS
+ {0x93A3, 0xBC7D}, //3291 #HANGUL SYLLABLE PIEUP YAE IEUNG
+ {0x93A4, 0xBC7E}, //3292 #HANGUL SYLLABLE PIEUP YAE CIEUC
+ {0x93A5, 0xBC7F}, //3293 #HANGUL SYLLABLE PIEUP YAE CHIEUCH
+ {0x93A6, 0xBC80}, //3294 #HANGUL SYLLABLE PIEUP YAE KHIEUKH
+ {0x93A7, 0xBC81}, //3295 #HANGUL SYLLABLE PIEUP YAE THIEUTH
+ {0x93A8, 0xBC82}, //3296 #HANGUL SYLLABLE PIEUP YAE PHIEUPH
+ {0x93A9, 0xBC83}, //3297 #HANGUL SYLLABLE PIEUP YAE HIEUH
+ {0x93AA, 0xBC86}, //3298 #HANGUL SYLLABLE PIEUP EO SSANGKIYEOK
+ {0x93AB, 0xBC87}, //3299 #HANGUL SYLLABLE PIEUP EO KIYEOKSIOS
+ {0x93AC, 0xBC89}, //3300 #HANGUL SYLLABLE PIEUP EO NIEUNCIEUC
+ {0x93AD, 0xBC8A}, //3301 #HANGUL SYLLABLE PIEUP EO NIEUNHIEUH
+ {0x93AE, 0xBC8D}, //3302 #HANGUL SYLLABLE PIEUP EO RIEULKIYEOK
+ {0x93AF, 0xBC8F}, //3303 #HANGUL SYLLABLE PIEUP EO RIEULPIEUP
+ {0x93B0, 0xBC90}, //3304 #HANGUL SYLLABLE PIEUP EO RIEULSIOS
+ {0x93B1, 0xBC91}, //3305 #HANGUL SYLLABLE PIEUP EO RIEULTHIEUTH
+ {0x93B2, 0xBC92}, //3306 #HANGUL SYLLABLE PIEUP EO RIEULPHIEUPH
+ {0x93B3, 0xBC93}, //3307 #HANGUL SYLLABLE PIEUP EO RIEULHIEUH
+ {0x93B4, 0xBC96}, //3308 #HANGUL SYLLABLE PIEUP EO PIEUPSIOS
+ {0x93B5, 0xBC98}, //3309 #HANGUL SYLLABLE PIEUP EO SSANGSIOS
+ {0x93B6, 0xBC9B}, //3310 #HANGUL SYLLABLE PIEUP EO CHIEUCH
+ {0x93B7, 0xBC9C}, //3311 #HANGUL SYLLABLE PIEUP EO KHIEUKH
+ {0x93B8, 0xBC9D}, //3312 #HANGUL SYLLABLE PIEUP EO THIEUTH
+ {0x93B9, 0xBC9E}, //3313 #HANGUL SYLLABLE PIEUP EO PHIEUPH
+ {0x93BA, 0xBC9F}, //3314 #HANGUL SYLLABLE PIEUP EO HIEUH
+ {0x93BB, 0xBCA2}, //3315 #HANGUL SYLLABLE PIEUP E SSANGKIYEOK
+ {0x93BC, 0xBCA3}, //3316 #HANGUL SYLLABLE PIEUP E KIYEOKSIOS
+ {0x93BD, 0xBCA5}, //3317 #HANGUL SYLLABLE PIEUP E NIEUNCIEUC
+ {0x93BE, 0xBCA6}, //3318 #HANGUL SYLLABLE PIEUP E NIEUNHIEUH
+ {0x93BF, 0xBCA9}, //3319 #HANGUL SYLLABLE PIEUP E RIEULKIYEOK
+ {0x93C0, 0xBCAA}, //3320 #HANGUL SYLLABLE PIEUP E RIEULMIEUM
+ {0x93C1, 0xBCAB}, //3321 #HANGUL SYLLABLE PIEUP E RIEULPIEUP
+ {0x93C2, 0xBCAC}, //3322 #HANGUL SYLLABLE PIEUP E RIEULSIOS
+ {0x93C3, 0xBCAD}, //3323 #HANGUL SYLLABLE PIEUP E RIEULTHIEUTH
+ {0x93C4, 0xBCAE}, //3324 #HANGUL SYLLABLE PIEUP E RIEULPHIEUPH
+ {0x93C5, 0xBCAF}, //3325 #HANGUL SYLLABLE PIEUP E RIEULHIEUH
+ {0x93C6, 0xBCB2}, //3326 #HANGUL SYLLABLE PIEUP E PIEUPSIOS
+ {0x93C7, 0xBCB6}, //3327 #HANGUL SYLLABLE PIEUP E CIEUC
+ {0x93C8, 0xBCB7}, //3328 #HANGUL SYLLABLE PIEUP E CHIEUCH
+ {0x93C9, 0xBCB8}, //3329 #HANGUL SYLLABLE PIEUP E KHIEUKH
+ {0x93CA, 0xBCB9}, //3330 #HANGUL SYLLABLE PIEUP E THIEUTH
+ {0x93CB, 0xBCBA}, //3331 #HANGUL SYLLABLE PIEUP E PHIEUPH
+ {0x93CC, 0xBCBB}, //3332 #HANGUL SYLLABLE PIEUP E HIEUH
+ {0x93CD, 0xBCBE}, //3333 #HANGUL SYLLABLE PIEUP YEO SSANGKIYEOK
+ {0x93CE, 0xBCBF}, //3334 #HANGUL SYLLABLE PIEUP YEO KIYEOKSIOS
+ {0x93CF, 0xBCC1}, //3335 #HANGUL SYLLABLE PIEUP YEO NIEUNCIEUC
+ {0x93D0, 0xBCC2}, //3336 #HANGUL SYLLABLE PIEUP YEO NIEUNHIEUH
+ {0x93D1, 0xBCC3}, //3337 #HANGUL SYLLABLE PIEUP YEO TIKEUT
+ {0x93D2, 0xBCC5}, //3338 #HANGUL SYLLABLE PIEUP YEO RIEULKIYEOK
+ {0x93D3, 0xBCC6}, //3339 #HANGUL SYLLABLE PIEUP YEO RIEULMIEUM
+ {0x93D4, 0xBCC7}, //3340 #HANGUL SYLLABLE PIEUP YEO RIEULPIEUP
+ {0x93D5, 0xBCC8}, //3341 #HANGUL SYLLABLE PIEUP YEO RIEULSIOS
+ {0x93D6, 0xBCC9}, //3342 #HANGUL SYLLABLE PIEUP YEO RIEULTHIEUTH
+ {0x93D7, 0xBCCA}, //3343 #HANGUL SYLLABLE PIEUP YEO RIEULPHIEUPH
+ {0x93D8, 0xBCCB}, //3344 #HANGUL SYLLABLE PIEUP YEO RIEULHIEUH
+ {0x93D9, 0xBCCC}, //3345 #HANGUL SYLLABLE PIEUP YEO MIEUM
+ {0x93DA, 0xBCCE}, //3346 #HANGUL SYLLABLE PIEUP YEO PIEUPSIOS
+ {0x93DB, 0xBCD2}, //3347 #HANGUL SYLLABLE PIEUP YEO CIEUC
+ {0x93DC, 0xBCD3}, //3348 #HANGUL SYLLABLE PIEUP YEO CHIEUCH
+ {0x93DD, 0xBCD4}, //3349 #HANGUL SYLLABLE PIEUP YEO KHIEUKH
+ {0x93DE, 0xBCD6}, //3350 #HANGUL SYLLABLE PIEUP YEO PHIEUPH
+ {0x93DF, 0xBCD7}, //3351 #HANGUL SYLLABLE PIEUP YEO HIEUH
+ {0x93E0, 0xBCD9}, //3352 #HANGUL SYLLABLE PIEUP YE KIYEOK
+ {0x93E1, 0xBCDA}, //3353 #HANGUL SYLLABLE PIEUP YE SSANGKIYEOK
+ {0x93E2, 0xBCDB}, //3354 #HANGUL SYLLABLE PIEUP YE KIYEOKSIOS
+ {0x93E3, 0xBCDD}, //3355 #HANGUL SYLLABLE PIEUP YE NIEUNCIEUC
+ {0x93E4, 0xBCDE}, //3356 #HANGUL SYLLABLE PIEUP YE NIEUNHIEUH
+ {0x93E5, 0xBCDF}, //3357 #HANGUL SYLLABLE PIEUP YE TIKEUT
+ {0x93E6, 0xBCE0}, //3358 #HANGUL SYLLABLE PIEUP YE RIEUL
+ {0x93E7, 0xBCE1}, //3359 #HANGUL SYLLABLE PIEUP YE RIEULKIYEOK
+ {0x93E8, 0xBCE2}, //3360 #HANGUL SYLLABLE PIEUP YE RIEULMIEUM
+ {0x93E9, 0xBCE3}, //3361 #HANGUL SYLLABLE PIEUP YE RIEULPIEUP
+ {0x93EA, 0xBCE4}, //3362 #HANGUL SYLLABLE PIEUP YE RIEULSIOS
+ {0x93EB, 0xBCE5}, //3363 #HANGUL SYLLABLE PIEUP YE RIEULTHIEUTH
+ {0x93EC, 0xBCE6}, //3364 #HANGUL SYLLABLE PIEUP YE RIEULPHIEUPH
+ {0x93ED, 0xBCE7}, //3365 #HANGUL SYLLABLE PIEUP YE RIEULHIEUH
+ {0x93EE, 0xBCE8}, //3366 #HANGUL SYLLABLE PIEUP YE MIEUM
+ {0x93EF, 0xBCE9}, //3367 #HANGUL SYLLABLE PIEUP YE PIEUP
+ {0x93F0, 0xBCEA}, //3368 #HANGUL SYLLABLE PIEUP YE PIEUPSIOS
+ {0x93F1, 0xBCEB}, //3369 #HANGUL SYLLABLE PIEUP YE SIOS
+ {0x93F2, 0xBCEC}, //3370 #HANGUL SYLLABLE PIEUP YE SSANGSIOS
+ {0x93F3, 0xBCED}, //3371 #HANGUL SYLLABLE PIEUP YE IEUNG
+ {0x93F4, 0xBCEE}, //3372 #HANGUL SYLLABLE PIEUP YE CIEUC
+ {0x93F5, 0xBCEF}, //3373 #HANGUL SYLLABLE PIEUP YE CHIEUCH
+ {0x93F6, 0xBCF0}, //3374 #HANGUL SYLLABLE PIEUP YE KHIEUKH
+ {0x93F7, 0xBCF1}, //3375 #HANGUL SYLLABLE PIEUP YE THIEUTH
+ {0x93F8, 0xBCF2}, //3376 #HANGUL SYLLABLE PIEUP YE PHIEUPH
+ {0x93F9, 0xBCF3}, //3377 #HANGUL SYLLABLE PIEUP YE HIEUH
+ {0x93FA, 0xBCF7}, //3378 #HANGUL SYLLABLE PIEUP O KIYEOKSIOS
+ {0x93FB, 0xBCF9}, //3379 #HANGUL SYLLABLE PIEUP O NIEUNCIEUC
+ {0x93FC, 0xBCFA}, //3380 #HANGUL SYLLABLE PIEUP O NIEUNHIEUH
+ {0x93FD, 0xBCFB}, //3381 #HANGUL SYLLABLE PIEUP O TIKEUT
+ {0x93FE, 0xBCFD}, //3382 #HANGUL SYLLABLE PIEUP O RIEULKIYEOK
+ {0x9441, 0xBCFE}, //3383 #HANGUL SYLLABLE PIEUP O RIEULMIEUM
+ {0x9442, 0xBCFF}, //3384 #HANGUL SYLLABLE PIEUP O RIEULPIEUP
+ {0x9443, 0xBD00}, //3385 #HANGUL SYLLABLE PIEUP O RIEULSIOS
+ {0x9444, 0xBD01}, //3386 #HANGUL SYLLABLE PIEUP O RIEULTHIEUTH
+ {0x9445, 0xBD02}, //3387 #HANGUL SYLLABLE PIEUP O RIEULPHIEUPH
+ {0x9446, 0xBD03}, //3388 #HANGUL SYLLABLE PIEUP O RIEULHIEUH
+ {0x9447, 0xBD06}, //3389 #HANGUL SYLLABLE PIEUP O PIEUPSIOS
+ {0x9448, 0xBD08}, //3390 #HANGUL SYLLABLE PIEUP O SSANGSIOS
+ {0x9449, 0xBD0A}, //3391 #HANGUL SYLLABLE PIEUP O CIEUC
+ {0x944A, 0xBD0B}, //3392 #HANGUL SYLLABLE PIEUP O CHIEUCH
+ {0x944B, 0xBD0C}, //3393 #HANGUL SYLLABLE PIEUP O KHIEUKH
+ {0x944C, 0xBD0D}, //3394 #HANGUL SYLLABLE PIEUP O THIEUTH
+ {0x944D, 0xBD0E}, //3395 #HANGUL SYLLABLE PIEUP O PHIEUPH
+ {0x944E, 0xBD0F}, //3396 #HANGUL SYLLABLE PIEUP O HIEUH
+ {0x944F, 0xBD11}, //3397 #HANGUL SYLLABLE PIEUP WA KIYEOK
+ {0x9450, 0xBD12}, //3398 #HANGUL SYLLABLE PIEUP WA SSANGKIYEOK
+ {0x9451, 0xBD13}, //3399 #HANGUL SYLLABLE PIEUP WA KIYEOKSIOS
+ {0x9452, 0xBD15}, //3400 #HANGUL SYLLABLE PIEUP WA NIEUNCIEUC
+ {0x9453, 0xBD16}, //3401 #HANGUL SYLLABLE PIEUP WA NIEUNHIEUH
+ {0x9454, 0xBD17}, //3402 #HANGUL SYLLABLE PIEUP WA TIKEUT
+ {0x9455, 0xBD18}, //3403 #HANGUL SYLLABLE PIEUP WA RIEUL
+ {0x9456, 0xBD19}, //3404 #HANGUL SYLLABLE PIEUP WA RIEULKIYEOK
+ {0x9457, 0xBD1A}, //3405 #HANGUL SYLLABLE PIEUP WA RIEULMIEUM
+ {0x9458, 0xBD1B}, //3406 #HANGUL SYLLABLE PIEUP WA RIEULPIEUP
+ {0x9459, 0xBD1C}, //3407 #HANGUL SYLLABLE PIEUP WA RIEULSIOS
+ {0x945A, 0xBD1D}, //3408 #HANGUL SYLLABLE PIEUP WA RIEULTHIEUTH
+ {0x9461, 0xBD1E}, //3409 #HANGUL SYLLABLE PIEUP WA RIEULPHIEUPH
+ {0x9462, 0xBD1F}, //3410 #HANGUL SYLLABLE PIEUP WA RIEULHIEUH
+ {0x9463, 0xBD20}, //3411 #HANGUL SYLLABLE PIEUP WA MIEUM
+ {0x9464, 0xBD21}, //3412 #HANGUL SYLLABLE PIEUP WA PIEUP
+ {0x9465, 0xBD22}, //3413 #HANGUL SYLLABLE PIEUP WA PIEUPSIOS
+ {0x9466, 0xBD23}, //3414 #HANGUL SYLLABLE PIEUP WA SIOS
+ {0x9467, 0xBD25}, //3415 #HANGUL SYLLABLE PIEUP WA IEUNG
+ {0x9468, 0xBD26}, //3416 #HANGUL SYLLABLE PIEUP WA CIEUC
+ {0x9469, 0xBD27}, //3417 #HANGUL SYLLABLE PIEUP WA CHIEUCH
+ {0x946A, 0xBD28}, //3418 #HANGUL SYLLABLE PIEUP WA KHIEUKH
+ {0x946B, 0xBD29}, //3419 #HANGUL SYLLABLE PIEUP WA THIEUTH
+ {0x946C, 0xBD2A}, //3420 #HANGUL SYLLABLE PIEUP WA PHIEUPH
+ {0x946D, 0xBD2B}, //3421 #HANGUL SYLLABLE PIEUP WA HIEUH
+ {0x946E, 0xBD2D}, //3422 #HANGUL SYLLABLE PIEUP WAE KIYEOK
+ {0x946F, 0xBD2E}, //3423 #HANGUL SYLLABLE PIEUP WAE SSANGKIYEOK
+ {0x9470, 0xBD2F}, //3424 #HANGUL SYLLABLE PIEUP WAE KIYEOKSIOS
+ {0x9471, 0xBD30}, //3425 #HANGUL SYLLABLE PIEUP WAE NIEUN
+ {0x9472, 0xBD31}, //3426 #HANGUL SYLLABLE PIEUP WAE NIEUNCIEUC
+ {0x9473, 0xBD32}, //3427 #HANGUL SYLLABLE PIEUP WAE NIEUNHIEUH
+ {0x9474, 0xBD33}, //3428 #HANGUL SYLLABLE PIEUP WAE TIKEUT
+ {0x9475, 0xBD34}, //3429 #HANGUL SYLLABLE PIEUP WAE RIEUL
+ {0x9476, 0xBD35}, //3430 #HANGUL SYLLABLE PIEUP WAE RIEULKIYEOK
+ {0x9477, 0xBD36}, //3431 #HANGUL SYLLABLE PIEUP WAE RIEULMIEUM
+ {0x9478, 0xBD37}, //3432 #HANGUL SYLLABLE PIEUP WAE RIEULPIEUP
+ {0x9479, 0xBD38}, //3433 #HANGUL SYLLABLE PIEUP WAE RIEULSIOS
+ {0x947A, 0xBD39}, //3434 #HANGUL SYLLABLE PIEUP WAE RIEULTHIEUTH
+ {0x9481, 0xBD3A}, //3435 #HANGUL SYLLABLE PIEUP WAE RIEULPHIEUPH
+ {0x9482, 0xBD3B}, //3436 #HANGUL SYLLABLE PIEUP WAE RIEULHIEUH
+ {0x9483, 0xBD3C}, //3437 #HANGUL SYLLABLE PIEUP WAE MIEUM
+ {0x9484, 0xBD3D}, //3438 #HANGUL SYLLABLE PIEUP WAE PIEUP
+ {0x9485, 0xBD3E}, //3439 #HANGUL SYLLABLE PIEUP WAE PIEUPSIOS
+ {0x9486, 0xBD3F}, //3440 #HANGUL SYLLABLE PIEUP WAE SIOS
+ {0x9487, 0xBD41}, //3441 #HANGUL SYLLABLE PIEUP WAE IEUNG
+ {0x9488, 0xBD42}, //3442 #HANGUL SYLLABLE PIEUP WAE CIEUC
+ {0x9489, 0xBD43}, //3443 #HANGUL SYLLABLE PIEUP WAE CHIEUCH
+ {0x948A, 0xBD44}, //3444 #HANGUL SYLLABLE PIEUP WAE KHIEUKH
+ {0x948B, 0xBD45}, //3445 #HANGUL SYLLABLE PIEUP WAE THIEUTH
+ {0x948C, 0xBD46}, //3446 #HANGUL SYLLABLE PIEUP WAE PHIEUPH
+ {0x948D, 0xBD47}, //3447 #HANGUL SYLLABLE PIEUP WAE HIEUH
+ {0x948E, 0xBD4A}, //3448 #HANGUL SYLLABLE PIEUP OE SSANGKIYEOK
+ {0x948F, 0xBD4B}, //3449 #HANGUL SYLLABLE PIEUP OE KIYEOKSIOS
+ {0x9490, 0xBD4D}, //3450 #HANGUL SYLLABLE PIEUP OE NIEUNCIEUC
+ {0x9491, 0xBD4E}, //3451 #HANGUL SYLLABLE PIEUP OE NIEUNHIEUH
+ {0x9492, 0xBD4F}, //3452 #HANGUL SYLLABLE PIEUP OE TIKEUT
+ {0x9493, 0xBD51}, //3453 #HANGUL SYLLABLE PIEUP OE RIEULKIYEOK
+ {0x9494, 0xBD52}, //3454 #HANGUL SYLLABLE PIEUP OE RIEULMIEUM
+ {0x9495, 0xBD53}, //3455 #HANGUL SYLLABLE PIEUP OE RIEULPIEUP
+ {0x9496, 0xBD54}, //3456 #HANGUL SYLLABLE PIEUP OE RIEULSIOS
+ {0x9497, 0xBD55}, //3457 #HANGUL SYLLABLE PIEUP OE RIEULTHIEUTH
+ {0x9498, 0xBD56}, //3458 #HANGUL SYLLABLE PIEUP OE RIEULPHIEUPH
+ {0x9499, 0xBD57}, //3459 #HANGUL SYLLABLE PIEUP OE RIEULHIEUH
+ {0x949A, 0xBD5A}, //3460 #HANGUL SYLLABLE PIEUP OE PIEUPSIOS
+ {0x949B, 0xBD5B}, //3461 #HANGUL SYLLABLE PIEUP OE SIOS
+ {0x949C, 0xBD5C}, //3462 #HANGUL SYLLABLE PIEUP OE SSANGSIOS
+ {0x949D, 0xBD5D}, //3463 #HANGUL SYLLABLE PIEUP OE IEUNG
+ {0x949E, 0xBD5E}, //3464 #HANGUL SYLLABLE PIEUP OE CIEUC
+ {0x949F, 0xBD5F}, //3465 #HANGUL SYLLABLE PIEUP OE CHIEUCH
+ {0x94A0, 0xBD60}, //3466 #HANGUL SYLLABLE PIEUP OE KHIEUKH
+ {0x94A1, 0xBD61}, //3467 #HANGUL SYLLABLE PIEUP OE THIEUTH
+ {0x94A2, 0xBD62}, //3468 #HANGUL SYLLABLE PIEUP OE PHIEUPH
+ {0x94A3, 0xBD63}, //3469 #HANGUL SYLLABLE PIEUP OE HIEUH
+ {0x94A4, 0xBD65}, //3470 #HANGUL SYLLABLE PIEUP YO KIYEOK
+ {0x94A5, 0xBD66}, //3471 #HANGUL SYLLABLE PIEUP YO SSANGKIYEOK
+ {0x94A6, 0xBD67}, //3472 #HANGUL SYLLABLE PIEUP YO KIYEOKSIOS
+ {0x94A7, 0xBD69}, //3473 #HANGUL SYLLABLE PIEUP YO NIEUNCIEUC
+ {0x94A8, 0xBD6A}, //3474 #HANGUL SYLLABLE PIEUP YO NIEUNHIEUH
+ {0x94A9, 0xBD6B}, //3475 #HANGUL SYLLABLE PIEUP YO TIKEUT
+ {0x94AA, 0xBD6C}, //3476 #HANGUL SYLLABLE PIEUP YO RIEUL
+ {0x94AB, 0xBD6D}, //3477 #HANGUL SYLLABLE PIEUP YO RIEULKIYEOK
+ {0x94AC, 0xBD6E}, //3478 #HANGUL SYLLABLE PIEUP YO RIEULMIEUM
+ {0x94AD, 0xBD6F}, //3479 #HANGUL SYLLABLE PIEUP YO RIEULPIEUP
+ {0x94AE, 0xBD70}, //3480 #HANGUL SYLLABLE PIEUP YO RIEULSIOS
+ {0x94AF, 0xBD71}, //3481 #HANGUL SYLLABLE PIEUP YO RIEULTHIEUTH
+ {0x94B0, 0xBD72}, //3482 #HANGUL SYLLABLE PIEUP YO RIEULPHIEUPH
+ {0x94B1, 0xBD73}, //3483 #HANGUL SYLLABLE PIEUP YO RIEULHIEUH
+ {0x94B2, 0xBD74}, //3484 #HANGUL SYLLABLE PIEUP YO MIEUM
+ {0x94B3, 0xBD75}, //3485 #HANGUL SYLLABLE PIEUP YO PIEUP
+ {0x94B4, 0xBD76}, //3486 #HANGUL SYLLABLE PIEUP YO PIEUPSIOS
+ {0x94B5, 0xBD77}, //3487 #HANGUL SYLLABLE PIEUP YO SIOS
+ {0x94B6, 0xBD78}, //3488 #HANGUL SYLLABLE PIEUP YO SSANGSIOS
+ {0x94B7, 0xBD79}, //3489 #HANGUL SYLLABLE PIEUP YO IEUNG
+ {0x94B8, 0xBD7A}, //3490 #HANGUL SYLLABLE PIEUP YO CIEUC
+ {0x94B9, 0xBD7B}, //3491 #HANGUL SYLLABLE PIEUP YO CHIEUCH
+ {0x94BA, 0xBD7C}, //3492 #HANGUL SYLLABLE PIEUP YO KHIEUKH
+ {0x94BB, 0xBD7D}, //3493 #HANGUL SYLLABLE PIEUP YO THIEUTH
+ {0x94BC, 0xBD7E}, //3494 #HANGUL SYLLABLE PIEUP YO PHIEUPH
+ {0x94BD, 0xBD7F}, //3495 #HANGUL SYLLABLE PIEUP YO HIEUH
+ {0x94BE, 0xBD82}, //3496 #HANGUL SYLLABLE PIEUP U SSANGKIYEOK
+ {0x94BF, 0xBD83}, //3497 #HANGUL SYLLABLE PIEUP U KIYEOKSIOS
+ {0x94C0, 0xBD85}, //3498 #HANGUL SYLLABLE PIEUP U NIEUNCIEUC
+ {0x94C1, 0xBD86}, //3499 #HANGUL SYLLABLE PIEUP U NIEUNHIEUH
+ {0x94C2, 0xBD8B}, //3500 #HANGUL SYLLABLE PIEUP U RIEULPIEUP
+ {0x94C3, 0xBD8C}, //3501 #HANGUL SYLLABLE PIEUP U RIEULSIOS
+ {0x94C4, 0xBD8D}, //3502 #HANGUL SYLLABLE PIEUP U RIEULTHIEUTH
+ {0x94C5, 0xBD8E}, //3503 #HANGUL SYLLABLE PIEUP U RIEULPHIEUPH
+ {0x94C6, 0xBD8F}, //3504 #HANGUL SYLLABLE PIEUP U RIEULHIEUH
+ {0x94C7, 0xBD92}, //3505 #HANGUL SYLLABLE PIEUP U PIEUPSIOS
+ {0x94C8, 0xBD94}, //3506 #HANGUL SYLLABLE PIEUP U SSANGSIOS
+ {0x94C9, 0xBD96}, //3507 #HANGUL SYLLABLE PIEUP U CIEUC
+ {0x94CA, 0xBD97}, //3508 #HANGUL SYLLABLE PIEUP U CHIEUCH
+ {0x94CB, 0xBD98}, //3509 #HANGUL SYLLABLE PIEUP U KHIEUKH
+ {0x94CC, 0xBD9B}, //3510 #HANGUL SYLLABLE PIEUP U HIEUH
+ {0x94CD, 0xBD9D}, //3511 #HANGUL SYLLABLE PIEUP WEO KIYEOK
+ {0x94CE, 0xBD9E}, //3512 #HANGUL SYLLABLE PIEUP WEO SSANGKIYEOK
+ {0x94CF, 0xBD9F}, //3513 #HANGUL SYLLABLE PIEUP WEO KIYEOKSIOS
+ {0x94D0, 0xBDA0}, //3514 #HANGUL SYLLABLE PIEUP WEO NIEUN
+ {0x94D1, 0xBDA1}, //3515 #HANGUL SYLLABLE PIEUP WEO NIEUNCIEUC
+ {0x94D2, 0xBDA2}, //3516 #HANGUL SYLLABLE PIEUP WEO NIEUNHIEUH
+ {0x94D3, 0xBDA3}, //3517 #HANGUL SYLLABLE PIEUP WEO TIKEUT
+ {0x94D4, 0xBDA5}, //3518 #HANGUL SYLLABLE PIEUP WEO RIEULKIYEOK
+ {0x94D5, 0xBDA6}, //3519 #HANGUL SYLLABLE PIEUP WEO RIEULMIEUM
+ {0x94D6, 0xBDA7}, //3520 #HANGUL SYLLABLE PIEUP WEO RIEULPIEUP
+ {0x94D7, 0xBDA8}, //3521 #HANGUL SYLLABLE PIEUP WEO RIEULSIOS
+ {0x94D8, 0xBDA9}, //3522 #HANGUL SYLLABLE PIEUP WEO RIEULTHIEUTH
+ {0x94D9, 0xBDAA}, //3523 #HANGUL SYLLABLE PIEUP WEO RIEULPHIEUPH
+ {0x94DA, 0xBDAB}, //3524 #HANGUL SYLLABLE PIEUP WEO RIEULHIEUH
+ {0x94DB, 0xBDAC}, //3525 #HANGUL SYLLABLE PIEUP WEO MIEUM
+ {0x94DC, 0xBDAD}, //3526 #HANGUL SYLLABLE PIEUP WEO PIEUP
+ {0x94DD, 0xBDAE}, //3527 #HANGUL SYLLABLE PIEUP WEO PIEUPSIOS
+ {0x94DE, 0xBDAF}, //3528 #HANGUL SYLLABLE PIEUP WEO SIOS
+ {0x94DF, 0xBDB1}, //3529 #HANGUL SYLLABLE PIEUP WEO IEUNG
+ {0x94E0, 0xBDB2}, //3530 #HANGUL SYLLABLE PIEUP WEO CIEUC
+ {0x94E1, 0xBDB3}, //3531 #HANGUL SYLLABLE PIEUP WEO CHIEUCH
+ {0x94E2, 0xBDB4}, //3532 #HANGUL SYLLABLE PIEUP WEO KHIEUKH
+ {0x94E3, 0xBDB5}, //3533 #HANGUL SYLLABLE PIEUP WEO THIEUTH
+ {0x94E4, 0xBDB6}, //3534 #HANGUL SYLLABLE PIEUP WEO PHIEUPH
+ {0x94E5, 0xBDB7}, //3535 #HANGUL SYLLABLE PIEUP WEO HIEUH
+ {0x94E6, 0xBDB9}, //3536 #HANGUL SYLLABLE PIEUP WE KIYEOK
+ {0x94E7, 0xBDBA}, //3537 #HANGUL SYLLABLE PIEUP WE SSANGKIYEOK
+ {0x94E8, 0xBDBB}, //3538 #HANGUL SYLLABLE PIEUP WE KIYEOKSIOS
+ {0x94E9, 0xBDBC}, //3539 #HANGUL SYLLABLE PIEUP WE NIEUN
+ {0x94EA, 0xBDBD}, //3540 #HANGUL SYLLABLE PIEUP WE NIEUNCIEUC
+ {0x94EB, 0xBDBE}, //3541 #HANGUL SYLLABLE PIEUP WE NIEUNHIEUH
+ {0x94EC, 0xBDBF}, //3542 #HANGUL SYLLABLE PIEUP WE TIKEUT
+ {0x94ED, 0xBDC0}, //3543 #HANGUL SYLLABLE PIEUP WE RIEUL
+ {0x94EE, 0xBDC1}, //3544 #HANGUL SYLLABLE PIEUP WE RIEULKIYEOK
+ {0x94EF, 0xBDC2}, //3545 #HANGUL SYLLABLE PIEUP WE RIEULMIEUM
+ {0x94F0, 0xBDC3}, //3546 #HANGUL SYLLABLE PIEUP WE RIEULPIEUP
+ {0x94F1, 0xBDC4}, //3547 #HANGUL SYLLABLE PIEUP WE RIEULSIOS
+ {0x94F2, 0xBDC5}, //3548 #HANGUL SYLLABLE PIEUP WE RIEULTHIEUTH
+ {0x94F3, 0xBDC6}, //3549 #HANGUL SYLLABLE PIEUP WE RIEULPHIEUPH
+ {0x94F4, 0xBDC7}, //3550 #HANGUL SYLLABLE PIEUP WE RIEULHIEUH
+ {0x94F5, 0xBDC8}, //3551 #HANGUL SYLLABLE PIEUP WE MIEUM
+ {0x94F6, 0xBDC9}, //3552 #HANGUL SYLLABLE PIEUP WE PIEUP
+ {0x94F7, 0xBDCA}, //3553 #HANGUL SYLLABLE PIEUP WE PIEUPSIOS
+ {0x94F8, 0xBDCB}, //3554 #HANGUL SYLLABLE PIEUP WE SIOS
+ {0x94F9, 0xBDCC}, //3555 #HANGUL SYLLABLE PIEUP WE SSANGSIOS
+ {0x94FA, 0xBDCD}, //3556 #HANGUL SYLLABLE PIEUP WE IEUNG
+ {0x94FB, 0xBDCE}, //3557 #HANGUL SYLLABLE PIEUP WE CIEUC
+ {0x94FC, 0xBDCF}, //3558 #HANGUL SYLLABLE PIEUP WE CHIEUCH
+ {0x94FD, 0xBDD0}, //3559 #HANGUL SYLLABLE PIEUP WE KHIEUKH
+ {0x94FE, 0xBDD1}, //3560 #HANGUL SYLLABLE PIEUP WE THIEUTH
+ {0x9541, 0xBDD2}, //3561 #HANGUL SYLLABLE PIEUP WE PHIEUPH
+ {0x9542, 0xBDD3}, //3562 #HANGUL SYLLABLE PIEUP WE HIEUH
+ {0x9543, 0xBDD6}, //3563 #HANGUL SYLLABLE PIEUP WI SSANGKIYEOK
+ {0x9544, 0xBDD7}, //3564 #HANGUL SYLLABLE PIEUP WI KIYEOKSIOS
+ {0x9545, 0xBDD9}, //3565 #HANGUL SYLLABLE PIEUP WI NIEUNCIEUC
+ {0x9546, 0xBDDA}, //3566 #HANGUL SYLLABLE PIEUP WI NIEUNHIEUH
+ {0x9547, 0xBDDB}, //3567 #HANGUL SYLLABLE PIEUP WI TIKEUT
+ {0x9548, 0xBDDD}, //3568 #HANGUL SYLLABLE PIEUP WI RIEULKIYEOK
+ {0x9549, 0xBDDE}, //3569 #HANGUL SYLLABLE PIEUP WI RIEULMIEUM
+ {0x954A, 0xBDDF}, //3570 #HANGUL SYLLABLE PIEUP WI RIEULPIEUP
+ {0x954B, 0xBDE0}, //3571 #HANGUL SYLLABLE PIEUP WI RIEULSIOS
+ {0x954C, 0xBDE1}, //3572 #HANGUL SYLLABLE PIEUP WI RIEULTHIEUTH
+ {0x954D, 0xBDE2}, //3573 #HANGUL SYLLABLE PIEUP WI RIEULPHIEUPH
+ {0x954E, 0xBDE3}, //3574 #HANGUL SYLLABLE PIEUP WI RIEULHIEUH
+ {0x954F, 0xBDE4}, //3575 #HANGUL SYLLABLE PIEUP WI MIEUM
+ {0x9550, 0xBDE5}, //3576 #HANGUL SYLLABLE PIEUP WI PIEUP
+ {0x9551, 0xBDE6}, //3577 #HANGUL SYLLABLE PIEUP WI PIEUPSIOS
+ {0x9552, 0xBDE7}, //3578 #HANGUL SYLLABLE PIEUP WI SIOS
+ {0x9553, 0xBDE8}, //3579 #HANGUL SYLLABLE PIEUP WI SSANGSIOS
+ {0x9554, 0xBDEA}, //3580 #HANGUL SYLLABLE PIEUP WI CIEUC
+ {0x9555, 0xBDEB}, //3581 #HANGUL SYLLABLE PIEUP WI CHIEUCH
+ {0x9556, 0xBDEC}, //3582 #HANGUL SYLLABLE PIEUP WI KHIEUKH
+ {0x9557, 0xBDED}, //3583 #HANGUL SYLLABLE PIEUP WI THIEUTH
+ {0x9558, 0xBDEE}, //3584 #HANGUL SYLLABLE PIEUP WI PHIEUPH
+ {0x9559, 0xBDEF}, //3585 #HANGUL SYLLABLE PIEUP WI HIEUH
+ {0x955A, 0xBDF1}, //3586 #HANGUL SYLLABLE PIEUP YU KIYEOK
+ {0x9561, 0xBDF2}, //3587 #HANGUL SYLLABLE PIEUP YU SSANGKIYEOK
+ {0x9562, 0xBDF3}, //3588 #HANGUL SYLLABLE PIEUP YU KIYEOKSIOS
+ {0x9563, 0xBDF5}, //3589 #HANGUL SYLLABLE PIEUP YU NIEUNCIEUC
+ {0x9564, 0xBDF6}, //3590 #HANGUL SYLLABLE PIEUP YU NIEUNHIEUH
+ {0x9565, 0xBDF7}, //3591 #HANGUL SYLLABLE PIEUP YU TIKEUT
+ {0x9566, 0xBDF9}, //3592 #HANGUL SYLLABLE PIEUP YU RIEULKIYEOK
+ {0x9567, 0xBDFA}, //3593 #HANGUL SYLLABLE PIEUP YU RIEULMIEUM
+ {0x9568, 0xBDFB}, //3594 #HANGUL SYLLABLE PIEUP YU RIEULPIEUP
+ {0x9569, 0xBDFC}, //3595 #HANGUL SYLLABLE PIEUP YU RIEULSIOS
+ {0x956A, 0xBDFD}, //3596 #HANGUL SYLLABLE PIEUP YU RIEULTHIEUTH
+ {0x956B, 0xBDFE}, //3597 #HANGUL SYLLABLE PIEUP YU RIEULPHIEUPH
+ {0x956C, 0xBDFF}, //3598 #HANGUL SYLLABLE PIEUP YU RIEULHIEUH
+ {0x956D, 0xBE01}, //3599 #HANGUL SYLLABLE PIEUP YU PIEUP
+ {0x956E, 0xBE02}, //3600 #HANGUL SYLLABLE PIEUP YU PIEUPSIOS
+ {0x956F, 0xBE04}, //3601 #HANGUL SYLLABLE PIEUP YU SSANGSIOS
+ {0x9570, 0xBE06}, //3602 #HANGUL SYLLABLE PIEUP YU CIEUC
+ {0x9571, 0xBE07}, //3603 #HANGUL SYLLABLE PIEUP YU CHIEUCH
+ {0x9572, 0xBE08}, //3604 #HANGUL SYLLABLE PIEUP YU KHIEUKH
+ {0x9573, 0xBE09}, //3605 #HANGUL SYLLABLE PIEUP YU THIEUTH
+ {0x9574, 0xBE0A}, //3606 #HANGUL SYLLABLE PIEUP YU PHIEUPH
+ {0x9575, 0xBE0B}, //3607 #HANGUL SYLLABLE PIEUP YU HIEUH
+ {0x9576, 0xBE0E}, //3608 #HANGUL SYLLABLE PIEUP EU SSANGKIYEOK
+ {0x9577, 0xBE0F}, //3609 #HANGUL SYLLABLE PIEUP EU KIYEOKSIOS
+ {0x9578, 0xBE11}, //3610 #HANGUL SYLLABLE PIEUP EU NIEUNCIEUC
+ {0x9579, 0xBE12}, //3611 #HANGUL SYLLABLE PIEUP EU NIEUNHIEUH
+ {0x957A, 0xBE13}, //3612 #HANGUL SYLLABLE PIEUP EU TIKEUT
+ {0x9581, 0xBE15}, //3613 #HANGUL SYLLABLE PIEUP EU RIEULKIYEOK
+ {0x9582, 0xBE16}, //3614 #HANGUL SYLLABLE PIEUP EU RIEULMIEUM
+ {0x9583, 0xBE17}, //3615 #HANGUL SYLLABLE PIEUP EU RIEULPIEUP
+ {0x9584, 0xBE18}, //3616 #HANGUL SYLLABLE PIEUP EU RIEULSIOS
+ {0x9585, 0xBE19}, //3617 #HANGUL SYLLABLE PIEUP EU RIEULTHIEUTH
+ {0x9586, 0xBE1A}, //3618 #HANGUL SYLLABLE PIEUP EU RIEULPHIEUPH
+ {0x9587, 0xBE1B}, //3619 #HANGUL SYLLABLE PIEUP EU RIEULHIEUH
+ {0x9588, 0xBE1E}, //3620 #HANGUL SYLLABLE PIEUP EU PIEUPSIOS
+ {0x9589, 0xBE20}, //3621 #HANGUL SYLLABLE PIEUP EU SSANGSIOS
+ {0x958A, 0xBE21}, //3622 #HANGUL SYLLABLE PIEUP EU IEUNG
+ {0x958B, 0xBE22}, //3623 #HANGUL SYLLABLE PIEUP EU CIEUC
+ {0x958C, 0xBE23}, //3624 #HANGUL SYLLABLE PIEUP EU CHIEUCH
+ {0x958D, 0xBE24}, //3625 #HANGUL SYLLABLE PIEUP EU KHIEUKH
+ {0x958E, 0xBE25}, //3626 #HANGUL SYLLABLE PIEUP EU THIEUTH
+ {0x958F, 0xBE26}, //3627 #HANGUL SYLLABLE PIEUP EU PHIEUPH
+ {0x9590, 0xBE27}, //3628 #HANGUL SYLLABLE PIEUP EU HIEUH
+ {0x9591, 0xBE28}, //3629 #HANGUL SYLLABLE PIEUP YI
+ {0x9592, 0xBE29}, //3630 #HANGUL SYLLABLE PIEUP YI KIYEOK
+ {0x9593, 0xBE2A}, //3631 #HANGUL SYLLABLE PIEUP YI SSANGKIYEOK
+ {0x9594, 0xBE2B}, //3632 #HANGUL SYLLABLE PIEUP YI KIYEOKSIOS
+ {0x9595, 0xBE2C}, //3633 #HANGUL SYLLABLE PIEUP YI NIEUN
+ {0x9596, 0xBE2D}, //3634 #HANGUL SYLLABLE PIEUP YI NIEUNCIEUC
+ {0x9597, 0xBE2E}, //3635 #HANGUL SYLLABLE PIEUP YI NIEUNHIEUH
+ {0x9598, 0xBE2F}, //3636 #HANGUL SYLLABLE PIEUP YI TIKEUT
+ {0x9599, 0xBE30}, //3637 #HANGUL SYLLABLE PIEUP YI RIEUL
+ {0x959A, 0xBE31}, //3638 #HANGUL SYLLABLE PIEUP YI RIEULKIYEOK
+ {0x959B, 0xBE32}, //3639 #HANGUL SYLLABLE PIEUP YI RIEULMIEUM
+ {0x959C, 0xBE33}, //3640 #HANGUL SYLLABLE PIEUP YI RIEULPIEUP
+ {0x959D, 0xBE34}, //3641 #HANGUL SYLLABLE PIEUP YI RIEULSIOS
+ {0x959E, 0xBE35}, //3642 #HANGUL SYLLABLE PIEUP YI RIEULTHIEUTH
+ {0x959F, 0xBE36}, //3643 #HANGUL SYLLABLE PIEUP YI RIEULPHIEUPH
+ {0x95A0, 0xBE37}, //3644 #HANGUL SYLLABLE PIEUP YI RIEULHIEUH
+ {0x95A1, 0xBE38}, //3645 #HANGUL SYLLABLE PIEUP YI MIEUM
+ {0x95A2, 0xBE39}, //3646 #HANGUL SYLLABLE PIEUP YI PIEUP
+ {0x95A3, 0xBE3A}, //3647 #HANGUL SYLLABLE PIEUP YI PIEUPSIOS
+ {0x95A4, 0xBE3B}, //3648 #HANGUL SYLLABLE PIEUP YI SIOS
+ {0x95A5, 0xBE3C}, //3649 #HANGUL SYLLABLE PIEUP YI SSANGSIOS
+ {0x95A6, 0xBE3D}, //3650 #HANGUL SYLLABLE PIEUP YI IEUNG
+ {0x95A7, 0xBE3E}, //3651 #HANGUL SYLLABLE PIEUP YI CIEUC
+ {0x95A8, 0xBE3F}, //3652 #HANGUL SYLLABLE PIEUP YI CHIEUCH
+ {0x95A9, 0xBE40}, //3653 #HANGUL SYLLABLE PIEUP YI KHIEUKH
+ {0x95AA, 0xBE41}, //3654 #HANGUL SYLLABLE PIEUP YI THIEUTH
+ {0x95AB, 0xBE42}, //3655 #HANGUL SYLLABLE PIEUP YI PHIEUPH
+ {0x95AC, 0xBE43}, //3656 #HANGUL SYLLABLE PIEUP YI HIEUH
+ {0x95AD, 0xBE46}, //3657 #HANGUL SYLLABLE PIEUP I SSANGKIYEOK
+ {0x95AE, 0xBE47}, //3658 #HANGUL SYLLABLE PIEUP I KIYEOKSIOS
+ {0x95AF, 0xBE49}, //3659 #HANGUL SYLLABLE PIEUP I NIEUNCIEUC
+ {0x95B0, 0xBE4A}, //3660 #HANGUL SYLLABLE PIEUP I NIEUNHIEUH
+ {0x95B1, 0xBE4B}, //3661 #HANGUL SYLLABLE PIEUP I TIKEUT
+ {0x95B2, 0xBE4D}, //3662 #HANGUL SYLLABLE PIEUP I RIEULKIYEOK
+ {0x95B3, 0xBE4F}, //3663 #HANGUL SYLLABLE PIEUP I RIEULPIEUP
+ {0x95B4, 0xBE50}, //3664 #HANGUL SYLLABLE PIEUP I RIEULSIOS
+ {0x95B5, 0xBE51}, //3665 #HANGUL SYLLABLE PIEUP I RIEULTHIEUTH
+ {0x95B6, 0xBE52}, //3666 #HANGUL SYLLABLE PIEUP I RIEULPHIEUPH
+ {0x95B7, 0xBE53}, //3667 #HANGUL SYLLABLE PIEUP I RIEULHIEUH
+ {0x95B8, 0xBE56}, //3668 #HANGUL SYLLABLE PIEUP I PIEUPSIOS
+ {0x95B9, 0xBE58}, //3669 #HANGUL SYLLABLE PIEUP I SSANGSIOS
+ {0x95BA, 0xBE5C}, //3670 #HANGUL SYLLABLE PIEUP I KHIEUKH
+ {0x95BB, 0xBE5D}, //3671 #HANGUL SYLLABLE PIEUP I THIEUTH
+ {0x95BC, 0xBE5E}, //3672 #HANGUL SYLLABLE PIEUP I PHIEUPH
+ {0x95BD, 0xBE5F}, //3673 #HANGUL SYLLABLE PIEUP I HIEUH
+ {0x95BE, 0xBE62}, //3674 #HANGUL SYLLABLE SSANGPIEUP A SSANGKIYEOK
+ {0x95BF, 0xBE63}, //3675 #HANGUL SYLLABLE SSANGPIEUP A KIYEOKSIOS
+ {0x95C0, 0xBE65}, //3676 #HANGUL SYLLABLE SSANGPIEUP A NIEUNCIEUC
+ {0x95C1, 0xBE66}, //3677 #HANGUL SYLLABLE SSANGPIEUP A NIEUNHIEUH
+ {0x95C2, 0xBE67}, //3678 #HANGUL SYLLABLE SSANGPIEUP A TIKEUT
+ {0x95C3, 0xBE69}, //3679 #HANGUL SYLLABLE SSANGPIEUP A RIEULKIYEOK
+ {0x95C4, 0xBE6B}, //3680 #HANGUL SYLLABLE SSANGPIEUP A RIEULPIEUP
+ {0x95C5, 0xBE6C}, //3681 #HANGUL SYLLABLE SSANGPIEUP A RIEULSIOS
+ {0x95C6, 0xBE6D}, //3682 #HANGUL SYLLABLE SSANGPIEUP A RIEULTHIEUTH
+ {0x95C7, 0xBE6E}, //3683 #HANGUL SYLLABLE SSANGPIEUP A RIEULPHIEUPH
+ {0x95C8, 0xBE6F}, //3684 #HANGUL SYLLABLE SSANGPIEUP A RIEULHIEUH
+ {0x95C9, 0xBE72}, //3685 #HANGUL SYLLABLE SSANGPIEUP A PIEUPSIOS
+ {0x95CA, 0xBE76}, //3686 #HANGUL SYLLABLE SSANGPIEUP A CIEUC
+ {0x95CB, 0xBE77}, //3687 #HANGUL SYLLABLE SSANGPIEUP A CHIEUCH
+ {0x95CC, 0xBE78}, //3688 #HANGUL SYLLABLE SSANGPIEUP A KHIEUKH
+ {0x95CD, 0xBE79}, //3689 #HANGUL SYLLABLE SSANGPIEUP A THIEUTH
+ {0x95CE, 0xBE7A}, //3690 #HANGUL SYLLABLE SSANGPIEUP A PHIEUPH
+ {0x95CF, 0xBE7E}, //3691 #HANGUL SYLLABLE SSANGPIEUP AE SSANGKIYEOK
+ {0x95D0, 0xBE7F}, //3692 #HANGUL SYLLABLE SSANGPIEUP AE KIYEOKSIOS
+ {0x95D1, 0xBE81}, //3693 #HANGUL SYLLABLE SSANGPIEUP AE NIEUNCIEUC
+ {0x95D2, 0xBE82}, //3694 #HANGUL SYLLABLE SSANGPIEUP AE NIEUNHIEUH
+ {0x95D3, 0xBE83}, //3695 #HANGUL SYLLABLE SSANGPIEUP AE TIKEUT
+ {0x95D4, 0xBE85}, //3696 #HANGUL SYLLABLE SSANGPIEUP AE RIEULKIYEOK
+ {0x95D5, 0xBE86}, //3697 #HANGUL SYLLABLE SSANGPIEUP AE RIEULMIEUM
+ {0x95D6, 0xBE87}, //3698 #HANGUL SYLLABLE SSANGPIEUP AE RIEULPIEUP
+ {0x95D7, 0xBE88}, //3699 #HANGUL SYLLABLE SSANGPIEUP AE RIEULSIOS
+ {0x95D8, 0xBE89}, //3700 #HANGUL SYLLABLE SSANGPIEUP AE RIEULTHIEUTH
+ {0x95D9, 0xBE8A}, //3701 #HANGUL SYLLABLE SSANGPIEUP AE RIEULPHIEUPH
+ {0x95DA, 0xBE8B}, //3702 #HANGUL SYLLABLE SSANGPIEUP AE RIEULHIEUH
+ {0x95DB, 0xBE8E}, //3703 #HANGUL SYLLABLE SSANGPIEUP AE PIEUPSIOS
+ {0x95DC, 0xBE92}, //3704 #HANGUL SYLLABLE SSANGPIEUP AE CIEUC
+ {0x95DD, 0xBE93}, //3705 #HANGUL SYLLABLE SSANGPIEUP AE CHIEUCH
+ {0x95DE, 0xBE94}, //3706 #HANGUL SYLLABLE SSANGPIEUP AE KHIEUKH
+ {0x95DF, 0xBE95}, //3707 #HANGUL SYLLABLE SSANGPIEUP AE THIEUTH
+ {0x95E0, 0xBE96}, //3708 #HANGUL SYLLABLE SSANGPIEUP AE PHIEUPH
+ {0x95E1, 0xBE97}, //3709 #HANGUL SYLLABLE SSANGPIEUP AE HIEUH
+ {0x95E2, 0xBE9A}, //3710 #HANGUL SYLLABLE SSANGPIEUP YA SSANGKIYEOK
+ {0x95E3, 0xBE9B}, //3711 #HANGUL SYLLABLE SSANGPIEUP YA KIYEOKSIOS
+ {0x95E4, 0xBE9C}, //3712 #HANGUL SYLLABLE SSANGPIEUP YA NIEUN
+ {0x95E5, 0xBE9D}, //3713 #HANGUL SYLLABLE SSANGPIEUP YA NIEUNCIEUC
+ {0x95E6, 0xBE9E}, //3714 #HANGUL SYLLABLE SSANGPIEUP YA NIEUNHIEUH
+ {0x95E7, 0xBE9F}, //3715 #HANGUL SYLLABLE SSANGPIEUP YA TIKEUT
+ {0x95E8, 0xBEA0}, //3716 #HANGUL SYLLABLE SSANGPIEUP YA RIEUL
+ {0x95E9, 0xBEA1}, //3717 #HANGUL SYLLABLE SSANGPIEUP YA RIEULKIYEOK
+ {0x95EA, 0xBEA2}, //3718 #HANGUL SYLLABLE SSANGPIEUP YA RIEULMIEUM
+ {0x95EB, 0xBEA3}, //3719 #HANGUL SYLLABLE SSANGPIEUP YA RIEULPIEUP
+ {0x95EC, 0xBEA4}, //3720 #HANGUL SYLLABLE SSANGPIEUP YA RIEULSIOS
+ {0x95ED, 0xBEA5}, //3721 #HANGUL SYLLABLE SSANGPIEUP YA RIEULTHIEUTH
+ {0x95EE, 0xBEA6}, //3722 #HANGUL SYLLABLE SSANGPIEUP YA RIEULPHIEUPH
+ {0x95EF, 0xBEA7}, //3723 #HANGUL SYLLABLE SSANGPIEUP YA RIEULHIEUH
+ {0x95F0, 0xBEA9}, //3724 #HANGUL SYLLABLE SSANGPIEUP YA PIEUP
+ {0x95F1, 0xBEAA}, //3725 #HANGUL SYLLABLE SSANGPIEUP YA PIEUPSIOS
+ {0x95F2, 0xBEAB}, //3726 #HANGUL SYLLABLE SSANGPIEUP YA SIOS
+ {0x95F3, 0xBEAC}, //3727 #HANGUL SYLLABLE SSANGPIEUP YA SSANGSIOS
+ {0x95F4, 0xBEAD}, //3728 #HANGUL SYLLABLE SSANGPIEUP YA IEUNG
+ {0x95F5, 0xBEAE}, //3729 #HANGUL SYLLABLE SSANGPIEUP YA CIEUC
+ {0x95F6, 0xBEAF}, //3730 #HANGUL SYLLABLE SSANGPIEUP YA CHIEUCH
+ {0x95F7, 0xBEB0}, //3731 #HANGUL SYLLABLE SSANGPIEUP YA KHIEUKH
+ {0x95F8, 0xBEB1}, //3732 #HANGUL SYLLABLE SSANGPIEUP YA THIEUTH
+ {0x95F9, 0xBEB2}, //3733 #HANGUL SYLLABLE SSANGPIEUP YA PHIEUPH
+ {0x95FA, 0xBEB3}, //3734 #HANGUL SYLLABLE SSANGPIEUP YA HIEUH
+ {0x95FB, 0xBEB4}, //3735 #HANGUL SYLLABLE SSANGPIEUP YAE
+ {0x95FC, 0xBEB5}, //3736 #HANGUL SYLLABLE SSANGPIEUP YAE KIYEOK
+ {0x95FD, 0xBEB6}, //3737 #HANGUL SYLLABLE SSANGPIEUP YAE SSANGKIYEOK
+ {0x95FE, 0xBEB7}, //3738 #HANGUL SYLLABLE SSANGPIEUP YAE KIYEOKSIOS
+ {0x9641, 0xBEB8}, //3739 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUN
+ {0x9642, 0xBEB9}, //3740 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUNCIEUC
+ {0x9643, 0xBEBA}, //3741 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUNHIEUH
+ {0x9644, 0xBEBB}, //3742 #HANGUL SYLLABLE SSANGPIEUP YAE TIKEUT
+ {0x9645, 0xBEBC}, //3743 #HANGUL SYLLABLE SSANGPIEUP YAE RIEUL
+ {0x9646, 0xBEBD}, //3744 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULKIYEOK
+ {0x9647, 0xBEBE}, //3745 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULMIEUM
+ {0x9648, 0xBEBF}, //3746 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULPIEUP
+ {0x9649, 0xBEC0}, //3747 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULSIOS
+ {0x964A, 0xBEC1}, //3748 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULTHIEUTH
+ {0x964B, 0xBEC2}, //3749 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULPHIEUPH
+ {0x964C, 0xBEC3}, //3750 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULHIEUH
+ {0x964D, 0xBEC4}, //3751 #HANGUL SYLLABLE SSANGPIEUP YAE MIEUM
+ {0x964E, 0xBEC5}, //3752 #HANGUL SYLLABLE SSANGPIEUP YAE PIEUP
+ {0x964F, 0xBEC6}, //3753 #HANGUL SYLLABLE SSANGPIEUP YAE PIEUPSIOS
+ {0x9650, 0xBEC7}, //3754 #HANGUL SYLLABLE SSANGPIEUP YAE SIOS
+ {0x9651, 0xBEC8}, //3755 #HANGUL SYLLABLE SSANGPIEUP YAE SSANGSIOS
+ {0x9652, 0xBEC9}, //3756 #HANGUL SYLLABLE SSANGPIEUP YAE IEUNG
+ {0x9653, 0xBECA}, //3757 #HANGUL SYLLABLE SSANGPIEUP YAE CIEUC
+ {0x9654, 0xBECB}, //3758 #HANGUL SYLLABLE SSANGPIEUP YAE CHIEUCH
+ {0x9655, 0xBECC}, //3759 #HANGUL SYLLABLE SSANGPIEUP YAE KHIEUKH
+ {0x9656, 0xBECD}, //3760 #HANGUL SYLLABLE SSANGPIEUP YAE THIEUTH
+ {0x9657, 0xBECE}, //3761 #HANGUL SYLLABLE SSANGPIEUP YAE PHIEUPH
+ {0x9658, 0xBECF}, //3762 #HANGUL SYLLABLE SSANGPIEUP YAE HIEUH
+ {0x9659, 0xBED2}, //3763 #HANGUL SYLLABLE SSANGPIEUP EO SSANGKIYEOK
+ {0x965A, 0xBED3}, //3764 #HANGUL SYLLABLE SSANGPIEUP EO KIYEOKSIOS
+ {0x9661, 0xBED5}, //3765 #HANGUL SYLLABLE SSANGPIEUP EO NIEUNCIEUC
+ {0x9662, 0xBED6}, //3766 #HANGUL SYLLABLE SSANGPIEUP EO NIEUNHIEUH
+ {0x9663, 0xBED9}, //3767 #HANGUL SYLLABLE SSANGPIEUP EO RIEULKIYEOK
+ {0x9664, 0xBEDA}, //3768 #HANGUL SYLLABLE SSANGPIEUP EO RIEULMIEUM
+ {0x9665, 0xBEDB}, //3769 #HANGUL SYLLABLE SSANGPIEUP EO RIEULPIEUP
+ {0x9666, 0xBEDC}, //3770 #HANGUL SYLLABLE SSANGPIEUP EO RIEULSIOS
+ {0x9667, 0xBEDD}, //3771 #HANGUL SYLLABLE SSANGPIEUP EO RIEULTHIEUTH
+ {0x9668, 0xBEDE}, //3772 #HANGUL SYLLABLE SSANGPIEUP EO RIEULPHIEUPH
+ {0x9669, 0xBEDF}, //3773 #HANGUL SYLLABLE SSANGPIEUP EO RIEULHIEUH
+ {0x966A, 0xBEE1}, //3774 #HANGUL SYLLABLE SSANGPIEUP EO PIEUP
+ {0x966B, 0xBEE2}, //3775 #HANGUL SYLLABLE SSANGPIEUP EO PIEUPSIOS
+ {0x966C, 0xBEE6}, //3776 #HANGUL SYLLABLE SSANGPIEUP EO CIEUC
+ {0x966D, 0xBEE7}, //3777 #HANGUL SYLLABLE SSANGPIEUP EO CHIEUCH
+ {0x966E, 0xBEE8}, //3778 #HANGUL SYLLABLE SSANGPIEUP EO KHIEUKH
+ {0x966F, 0xBEE9}, //3779 #HANGUL SYLLABLE SSANGPIEUP EO THIEUTH
+ {0x9670, 0xBEEA}, //3780 #HANGUL SYLLABLE SSANGPIEUP EO PHIEUPH
+ {0x9671, 0xBEEB}, //3781 #HANGUL SYLLABLE SSANGPIEUP EO HIEUH
+ {0x9672, 0xBEED}, //3782 #HANGUL SYLLABLE SSANGPIEUP E KIYEOK
+ {0x9673, 0xBEEE}, //3783 #HANGUL SYLLABLE SSANGPIEUP E SSANGKIYEOK
+ {0x9674, 0xBEEF}, //3784 #HANGUL SYLLABLE SSANGPIEUP E KIYEOKSIOS
+ {0x9675, 0xBEF0}, //3785 #HANGUL SYLLABLE SSANGPIEUP E NIEUN
+ {0x9676, 0xBEF1}, //3786 #HANGUL SYLLABLE SSANGPIEUP E NIEUNCIEUC
+ {0x9677, 0xBEF2}, //3787 #HANGUL SYLLABLE SSANGPIEUP E NIEUNHIEUH
+ {0x9678, 0xBEF3}, //3788 #HANGUL SYLLABLE SSANGPIEUP E TIKEUT
+ {0x9679, 0xBEF4}, //3789 #HANGUL SYLLABLE SSANGPIEUP E RIEUL
+ {0x967A, 0xBEF5}, //3790 #HANGUL SYLLABLE SSANGPIEUP E RIEULKIYEOK
+ {0x9681, 0xBEF6}, //3791 #HANGUL SYLLABLE SSANGPIEUP E RIEULMIEUM
+ {0x9682, 0xBEF7}, //3792 #HANGUL SYLLABLE SSANGPIEUP E RIEULPIEUP
+ {0x9683, 0xBEF8}, //3793 #HANGUL SYLLABLE SSANGPIEUP E RIEULSIOS
+ {0x9684, 0xBEF9}, //3794 #HANGUL SYLLABLE SSANGPIEUP E RIEULTHIEUTH
+ {0x9685, 0xBEFA}, //3795 #HANGUL SYLLABLE SSANGPIEUP E RIEULPHIEUPH
+ {0x9686, 0xBEFB}, //3796 #HANGUL SYLLABLE SSANGPIEUP E RIEULHIEUH
+ {0x9687, 0xBEFC}, //3797 #HANGUL SYLLABLE SSANGPIEUP E MIEUM
+ {0x9688, 0xBEFD}, //3798 #HANGUL SYLLABLE SSANGPIEUP E PIEUP
+ {0x9689, 0xBEFE}, //3799 #HANGUL SYLLABLE SSANGPIEUP E PIEUPSIOS
+ {0x968A, 0xBEFF}, //3800 #HANGUL SYLLABLE SSANGPIEUP E SIOS
+ {0x968B, 0xBF00}, //3801 #HANGUL SYLLABLE SSANGPIEUP E SSANGSIOS
+ {0x968C, 0xBF02}, //3802 #HANGUL SYLLABLE SSANGPIEUP E CIEUC
+ {0x968D, 0xBF03}, //3803 #HANGUL SYLLABLE SSANGPIEUP E CHIEUCH
+ {0x968E, 0xBF04}, //3804 #HANGUL SYLLABLE SSANGPIEUP E KHIEUKH
+ {0x968F, 0xBF05}, //3805 #HANGUL SYLLABLE SSANGPIEUP E THIEUTH
+ {0x9690, 0xBF06}, //3806 #HANGUL SYLLABLE SSANGPIEUP E PHIEUPH
+ {0x9691, 0xBF07}, //3807 #HANGUL SYLLABLE SSANGPIEUP E HIEUH
+ {0x9692, 0xBF0A}, //3808 #HANGUL SYLLABLE SSANGPIEUP YEO SSANGKIYEOK
+ {0x9693, 0xBF0B}, //3809 #HANGUL SYLLABLE SSANGPIEUP YEO KIYEOKSIOS
+ {0x9694, 0xBF0C}, //3810 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUN
+ {0x9695, 0xBF0D}, //3811 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUNCIEUC
+ {0x9696, 0xBF0E}, //3812 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUNHIEUH
+ {0x9697, 0xBF0F}, //3813 #HANGUL SYLLABLE SSANGPIEUP YEO TIKEUT
+ {0x9698, 0xBF10}, //3814 #HANGUL SYLLABLE SSANGPIEUP YEO RIEUL
+ {0x9699, 0xBF11}, //3815 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULKIYEOK
+ {0x969A, 0xBF12}, //3816 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULMIEUM
+ {0x969B, 0xBF13}, //3817 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULPIEUP
+ {0x969C, 0xBF14}, //3818 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULSIOS
+ {0x969D, 0xBF15}, //3819 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULTHIEUTH
+ {0x969E, 0xBF16}, //3820 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULPHIEUPH
+ {0x969F, 0xBF17}, //3821 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULHIEUH
+ {0x96A0, 0xBF1A}, //3822 #HANGUL SYLLABLE SSANGPIEUP YEO PIEUPSIOS
+ {0x96A1, 0xBF1E}, //3823 #HANGUL SYLLABLE SSANGPIEUP YEO CIEUC
+ {0x96A2, 0xBF1F}, //3824 #HANGUL SYLLABLE SSANGPIEUP YEO CHIEUCH
+ {0x96A3, 0xBF20}, //3825 #HANGUL SYLLABLE SSANGPIEUP YEO KHIEUKH
+ {0x96A4, 0xBF21}, //3826 #HANGUL SYLLABLE SSANGPIEUP YEO THIEUTH
+ {0x96A5, 0xBF22}, //3827 #HANGUL SYLLABLE SSANGPIEUP YEO PHIEUPH
+ {0x96A6, 0xBF23}, //3828 #HANGUL SYLLABLE SSANGPIEUP YEO HIEUH
+ {0x96A7, 0xBF24}, //3829 #HANGUL SYLLABLE SSANGPIEUP YE
+ {0x96A8, 0xBF25}, //3830 #HANGUL SYLLABLE SSANGPIEUP YE KIYEOK
+ {0x96A9, 0xBF26}, //3831 #HANGUL SYLLABLE SSANGPIEUP YE SSANGKIYEOK
+ {0x96AA, 0xBF27}, //3832 #HANGUL SYLLABLE SSANGPIEUP YE KIYEOKSIOS
+ {0x96AB, 0xBF28}, //3833 #HANGUL SYLLABLE SSANGPIEUP YE NIEUN
+ {0x96AC, 0xBF29}, //3834 #HANGUL SYLLABLE SSANGPIEUP YE NIEUNCIEUC
+ {0x96AD, 0xBF2A}, //3835 #HANGUL SYLLABLE SSANGPIEUP YE NIEUNHIEUH
+ {0x96AE, 0xBF2B}, //3836 #HANGUL SYLLABLE SSANGPIEUP YE TIKEUT
+ {0x96AF, 0xBF2C}, //3837 #HANGUL SYLLABLE SSANGPIEUP YE RIEUL
+ {0x96B0, 0xBF2D}, //3838 #HANGUL SYLLABLE SSANGPIEUP YE RIEULKIYEOK
+ {0x96B1, 0xBF2E}, //3839 #HANGUL SYLLABLE SSANGPIEUP YE RIEULMIEUM
+ {0x96B2, 0xBF2F}, //3840 #HANGUL SYLLABLE SSANGPIEUP YE RIEULPIEUP
+ {0x96B3, 0xBF30}, //3841 #HANGUL SYLLABLE SSANGPIEUP YE RIEULSIOS
+ {0x96B4, 0xBF31}, //3842 #HANGUL SYLLABLE SSANGPIEUP YE RIEULTHIEUTH
+ {0x96B5, 0xBF32}, //3843 #HANGUL SYLLABLE SSANGPIEUP YE RIEULPHIEUPH
+ {0x96B6, 0xBF33}, //3844 #HANGUL SYLLABLE SSANGPIEUP YE RIEULHIEUH
+ {0x96B7, 0xBF34}, //3845 #HANGUL SYLLABLE SSANGPIEUP YE MIEUM
+ {0x96B8, 0xBF35}, //3846 #HANGUL SYLLABLE SSANGPIEUP YE PIEUP
+ {0x96B9, 0xBF36}, //3847 #HANGUL SYLLABLE SSANGPIEUP YE PIEUPSIOS
+ {0x96BA, 0xBF37}, //3848 #HANGUL SYLLABLE SSANGPIEUP YE SIOS
+ {0x96BB, 0xBF38}, //3849 #HANGUL SYLLABLE SSANGPIEUP YE SSANGSIOS
+ {0x96BC, 0xBF39}, //3850 #HANGUL SYLLABLE SSANGPIEUP YE IEUNG
+ {0x96BD, 0xBF3A}, //3851 #HANGUL SYLLABLE SSANGPIEUP YE CIEUC
+ {0x96BE, 0xBF3B}, //3852 #HANGUL SYLLABLE SSANGPIEUP YE CHIEUCH
+ {0x96BF, 0xBF3C}, //3853 #HANGUL SYLLABLE SSANGPIEUP YE KHIEUKH
+ {0x96C0, 0xBF3D}, //3854 #HANGUL SYLLABLE SSANGPIEUP YE THIEUTH
+ {0x96C1, 0xBF3E}, //3855 #HANGUL SYLLABLE SSANGPIEUP YE PHIEUPH
+ {0x96C2, 0xBF3F}, //3856 #HANGUL SYLLABLE SSANGPIEUP YE HIEUH
+ {0x96C3, 0xBF42}, //3857 #HANGUL SYLLABLE SSANGPIEUP O SSANGKIYEOK
+ {0x96C4, 0xBF43}, //3858 #HANGUL SYLLABLE SSANGPIEUP O KIYEOKSIOS
+ {0x96C5, 0xBF45}, //3859 #HANGUL SYLLABLE SSANGPIEUP O NIEUNCIEUC
+ {0x96C6, 0xBF46}, //3860 #HANGUL SYLLABLE SSANGPIEUP O NIEUNHIEUH
+ {0x96C7, 0xBF47}, //3861 #HANGUL SYLLABLE SSANGPIEUP O TIKEUT
+ {0x96C8, 0xBF49}, //3862 #HANGUL SYLLABLE SSANGPIEUP O RIEULKIYEOK
+ {0x96C9, 0xBF4A}, //3863 #HANGUL SYLLABLE SSANGPIEUP O RIEULMIEUM
+ {0x96CA, 0xBF4B}, //3864 #HANGUL SYLLABLE SSANGPIEUP O RIEULPIEUP
+ {0x96CB, 0xBF4C}, //3865 #HANGUL SYLLABLE SSANGPIEUP O RIEULSIOS
+ {0x96CC, 0xBF4D}, //3866 #HANGUL SYLLABLE SSANGPIEUP O RIEULTHIEUTH
+ {0x96CD, 0xBF4E}, //3867 #HANGUL SYLLABLE SSANGPIEUP O RIEULPHIEUPH
+ {0x96CE, 0xBF4F}, //3868 #HANGUL SYLLABLE SSANGPIEUP O RIEULHIEUH
+ {0x96CF, 0xBF52}, //3869 #HANGUL SYLLABLE SSANGPIEUP O PIEUPSIOS
+ {0x96D0, 0xBF53}, //3870 #HANGUL SYLLABLE SSANGPIEUP O SIOS
+ {0x96D1, 0xBF54}, //3871 #HANGUL SYLLABLE SSANGPIEUP O SSANGSIOS
+ {0x96D2, 0xBF56}, //3872 #HANGUL SYLLABLE SSANGPIEUP O CIEUC
+ {0x96D3, 0xBF57}, //3873 #HANGUL SYLLABLE SSANGPIEUP O CHIEUCH
+ {0x96D4, 0xBF58}, //3874 #HANGUL SYLLABLE SSANGPIEUP O KHIEUKH
+ {0x96D5, 0xBF59}, //3875 #HANGUL SYLLABLE SSANGPIEUP O THIEUTH
+ {0x96D6, 0xBF5A}, //3876 #HANGUL SYLLABLE SSANGPIEUP O PHIEUPH
+ {0x96D7, 0xBF5B}, //3877 #HANGUL SYLLABLE SSANGPIEUP O HIEUH
+ {0x96D8, 0xBF5C}, //3878 #HANGUL SYLLABLE SSANGPIEUP WA
+ {0x96D9, 0xBF5D}, //3879 #HANGUL SYLLABLE SSANGPIEUP WA KIYEOK
+ {0x96DA, 0xBF5E}, //3880 #HANGUL SYLLABLE SSANGPIEUP WA SSANGKIYEOK
+ {0x96DB, 0xBF5F}, //3881 #HANGUL SYLLABLE SSANGPIEUP WA KIYEOKSIOS
+ {0x96DC, 0xBF60}, //3882 #HANGUL SYLLABLE SSANGPIEUP WA NIEUN
+ {0x96DD, 0xBF61}, //3883 #HANGUL SYLLABLE SSANGPIEUP WA NIEUNCIEUC
+ {0x96DE, 0xBF62}, //3884 #HANGUL SYLLABLE SSANGPIEUP WA NIEUNHIEUH
+ {0x96DF, 0xBF63}, //3885 #HANGUL SYLLABLE SSANGPIEUP WA TIKEUT
+ {0x96E0, 0xBF64}, //3886 #HANGUL SYLLABLE SSANGPIEUP WA RIEUL
+ {0x96E1, 0xBF65}, //3887 #HANGUL SYLLABLE SSANGPIEUP WA RIEULKIYEOK
+ {0x96E2, 0xBF66}, //3888 #HANGUL SYLLABLE SSANGPIEUP WA RIEULMIEUM
+ {0x96E3, 0xBF67}, //3889 #HANGUL SYLLABLE SSANGPIEUP WA RIEULPIEUP
+ {0x96E4, 0xBF68}, //3890 #HANGUL SYLLABLE SSANGPIEUP WA RIEULSIOS
+ {0x96E5, 0xBF69}, //3891 #HANGUL SYLLABLE SSANGPIEUP WA RIEULTHIEUTH
+ {0x96E6, 0xBF6A}, //3892 #HANGUL SYLLABLE SSANGPIEUP WA RIEULPHIEUPH
+ {0x96E7, 0xBF6B}, //3893 #HANGUL SYLLABLE SSANGPIEUP WA RIEULHIEUH
+ {0x96E8, 0xBF6C}, //3894 #HANGUL SYLLABLE SSANGPIEUP WA MIEUM
+ {0x96E9, 0xBF6D}, //3895 #HANGUL SYLLABLE SSANGPIEUP WA PIEUP
+ {0x96EA, 0xBF6E}, //3896 #HANGUL SYLLABLE SSANGPIEUP WA PIEUPSIOS
+ {0x96EB, 0xBF6F}, //3897 #HANGUL SYLLABLE SSANGPIEUP WA SIOS
+ {0x96EC, 0xBF70}, //3898 #HANGUL SYLLABLE SSANGPIEUP WA SSANGSIOS
+ {0x96ED, 0xBF71}, //3899 #HANGUL SYLLABLE SSANGPIEUP WA IEUNG
+ {0x96EE, 0xBF72}, //3900 #HANGUL SYLLABLE SSANGPIEUP WA CIEUC
+ {0x96EF, 0xBF73}, //3901 #HANGUL SYLLABLE SSANGPIEUP WA CHIEUCH
+ {0x96F0, 0xBF74}, //3902 #HANGUL SYLLABLE SSANGPIEUP WA KHIEUKH
+ {0x96F1, 0xBF75}, //3903 #HANGUL SYLLABLE SSANGPIEUP WA THIEUTH
+ {0x96F2, 0xBF76}, //3904 #HANGUL SYLLABLE SSANGPIEUP WA PHIEUPH
+ {0x96F3, 0xBF77}, //3905 #HANGUL SYLLABLE SSANGPIEUP WA HIEUH
+ {0x96F4, 0xBF78}, //3906 #HANGUL SYLLABLE SSANGPIEUP WAE
+ {0x96F5, 0xBF79}, //3907 #HANGUL SYLLABLE SSANGPIEUP WAE KIYEOK
+ {0x96F6, 0xBF7A}, //3908 #HANGUL SYLLABLE SSANGPIEUP WAE SSANGKIYEOK
+ {0x96F7, 0xBF7B}, //3909 #HANGUL SYLLABLE SSANGPIEUP WAE KIYEOKSIOS
+ {0x96F8, 0xBF7C}, //3910 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUN
+ {0x96F9, 0xBF7D}, //3911 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUNCIEUC
+ {0x96FA, 0xBF7E}, //3912 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUNHIEUH
+ {0x96FB, 0xBF7F}, //3913 #HANGUL SYLLABLE SSANGPIEUP WAE TIKEUT
+ {0x96FC, 0xBF80}, //3914 #HANGUL SYLLABLE SSANGPIEUP WAE RIEUL
+ {0x96FD, 0xBF81}, //3915 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULKIYEOK
+ {0x96FE, 0xBF82}, //3916 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULMIEUM
+ {0x9741, 0xBF83}, //3917 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULPIEUP
+ {0x9742, 0xBF84}, //3918 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULSIOS
+ {0x9743, 0xBF85}, //3919 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULTHIEUTH
+ {0x9744, 0xBF86}, //3920 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULPHIEUPH
+ {0x9745, 0xBF87}, //3921 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULHIEUH
+ {0x9746, 0xBF88}, //3922 #HANGUL SYLLABLE SSANGPIEUP WAE MIEUM
+ {0x9747, 0xBF89}, //3923 #HANGUL SYLLABLE SSANGPIEUP WAE PIEUP
+ {0x9748, 0xBF8A}, //3924 #HANGUL SYLLABLE SSANGPIEUP WAE PIEUPSIOS
+ {0x9749, 0xBF8B}, //3925 #HANGUL SYLLABLE SSANGPIEUP WAE SIOS
+ {0x974A, 0xBF8C}, //3926 #HANGUL SYLLABLE SSANGPIEUP WAE SSANGSIOS
+ {0x974B, 0xBF8D}, //3927 #HANGUL SYLLABLE SSANGPIEUP WAE IEUNG
+ {0x974C, 0xBF8E}, //3928 #HANGUL SYLLABLE SSANGPIEUP WAE CIEUC
+ {0x974D, 0xBF8F}, //3929 #HANGUL SYLLABLE SSANGPIEUP WAE CHIEUCH
+ {0x974E, 0xBF90}, //3930 #HANGUL SYLLABLE SSANGPIEUP WAE KHIEUKH
+ {0x974F, 0xBF91}, //3931 #HANGUL SYLLABLE SSANGPIEUP WAE THIEUTH
+ {0x9750, 0xBF92}, //3932 #HANGUL SYLLABLE SSANGPIEUP WAE PHIEUPH
+ {0x9751, 0xBF93}, //3933 #HANGUL SYLLABLE SSANGPIEUP WAE HIEUH
+ {0x9752, 0xBF95}, //3934 #HANGUL SYLLABLE SSANGPIEUP OE KIYEOK
+ {0x9753, 0xBF96}, //3935 #HANGUL SYLLABLE SSANGPIEUP OE SSANGKIYEOK
+ {0x9754, 0xBF97}, //3936 #HANGUL SYLLABLE SSANGPIEUP OE KIYEOKSIOS
+ {0x9755, 0xBF98}, //3937 #HANGUL SYLLABLE SSANGPIEUP OE NIEUN
+ {0x9756, 0xBF99}, //3938 #HANGUL SYLLABLE SSANGPIEUP OE NIEUNCIEUC
+ {0x9757, 0xBF9A}, //3939 #HANGUL SYLLABLE SSANGPIEUP OE NIEUNHIEUH
+ {0x9758, 0xBF9B}, //3940 #HANGUL SYLLABLE SSANGPIEUP OE TIKEUT
+ {0x9759, 0xBF9C}, //3941 #HANGUL SYLLABLE SSANGPIEUP OE RIEUL
+ {0x975A, 0xBF9D}, //3942 #HANGUL SYLLABLE SSANGPIEUP OE RIEULKIYEOK
+ {0x9761, 0xBF9E}, //3943 #HANGUL SYLLABLE SSANGPIEUP OE RIEULMIEUM
+ {0x9762, 0xBF9F}, //3944 #HANGUL SYLLABLE SSANGPIEUP OE RIEULPIEUP
+ {0x9763, 0xBFA0}, //3945 #HANGUL SYLLABLE SSANGPIEUP OE RIEULSIOS
+ {0x9764, 0xBFA1}, //3946 #HANGUL SYLLABLE SSANGPIEUP OE RIEULTHIEUTH
+ {0x9765, 0xBFA2}, //3947 #HANGUL SYLLABLE SSANGPIEUP OE RIEULPHIEUPH
+ {0x9766, 0xBFA3}, //3948 #HANGUL SYLLABLE SSANGPIEUP OE RIEULHIEUH
+ {0x9767, 0xBFA4}, //3949 #HANGUL SYLLABLE SSANGPIEUP OE MIEUM
+ {0x9768, 0xBFA5}, //3950 #HANGUL SYLLABLE SSANGPIEUP OE PIEUP
+ {0x9769, 0xBFA6}, //3951 #HANGUL SYLLABLE SSANGPIEUP OE PIEUPSIOS
+ {0x976A, 0xBFA7}, //3952 #HANGUL SYLLABLE SSANGPIEUP OE SIOS
+ {0x976B, 0xBFA8}, //3953 #HANGUL SYLLABLE SSANGPIEUP OE SSANGSIOS
+ {0x976C, 0xBFA9}, //3954 #HANGUL SYLLABLE SSANGPIEUP OE IEUNG
+ {0x976D, 0xBFAA}, //3955 #HANGUL SYLLABLE SSANGPIEUP OE CIEUC
+ {0x976E, 0xBFAB}, //3956 #HANGUL SYLLABLE SSANGPIEUP OE CHIEUCH
+ {0x976F, 0xBFAC}, //3957 #HANGUL SYLLABLE SSANGPIEUP OE KHIEUKH
+ {0x9770, 0xBFAD}, //3958 #HANGUL SYLLABLE SSANGPIEUP OE THIEUTH
+ {0x9771, 0xBFAE}, //3959 #HANGUL SYLLABLE SSANGPIEUP OE PHIEUPH
+ {0x9772, 0xBFAF}, //3960 #HANGUL SYLLABLE SSANGPIEUP OE HIEUH
+ {0x9773, 0xBFB1}, //3961 #HANGUL SYLLABLE SSANGPIEUP YO KIYEOK
+ {0x9774, 0xBFB2}, //3962 #HANGUL SYLLABLE SSANGPIEUP YO SSANGKIYEOK
+ {0x9775, 0xBFB3}, //3963 #HANGUL SYLLABLE SSANGPIEUP YO KIYEOKSIOS
+ {0x9776, 0xBFB4}, //3964 #HANGUL SYLLABLE SSANGPIEUP YO NIEUN
+ {0x9777, 0xBFB5}, //3965 #HANGUL SYLLABLE SSANGPIEUP YO NIEUNCIEUC
+ {0x9778, 0xBFB6}, //3966 #HANGUL SYLLABLE SSANGPIEUP YO NIEUNHIEUH
+ {0x9779, 0xBFB7}, //3967 #HANGUL SYLLABLE SSANGPIEUP YO TIKEUT
+ {0x977A, 0xBFB8}, //3968 #HANGUL SYLLABLE SSANGPIEUP YO RIEUL
+ {0x9781, 0xBFB9}, //3969 #HANGUL SYLLABLE SSANGPIEUP YO RIEULKIYEOK
+ {0x9782, 0xBFBA}, //3970 #HANGUL SYLLABLE SSANGPIEUP YO RIEULMIEUM
+ {0x9783, 0xBFBB}, //3971 #HANGUL SYLLABLE SSANGPIEUP YO RIEULPIEUP
+ {0x9784, 0xBFBC}, //3972 #HANGUL SYLLABLE SSANGPIEUP YO RIEULSIOS
+ {0x9785, 0xBFBD}, //3973 #HANGUL SYLLABLE SSANGPIEUP YO RIEULTHIEUTH
+ {0x9786, 0xBFBE}, //3974 #HANGUL SYLLABLE SSANGPIEUP YO RIEULPHIEUPH
+ {0x9787, 0xBFBF}, //3975 #HANGUL SYLLABLE SSANGPIEUP YO RIEULHIEUH
+ {0x9788, 0xBFC0}, //3976 #HANGUL SYLLABLE SSANGPIEUP YO MIEUM
+ {0x9789, 0xBFC1}, //3977 #HANGUL SYLLABLE SSANGPIEUP YO PIEUP
+ {0x978A, 0xBFC2}, //3978 #HANGUL SYLLABLE SSANGPIEUP YO PIEUPSIOS
+ {0x978B, 0xBFC3}, //3979 #HANGUL SYLLABLE SSANGPIEUP YO SIOS
+ {0x978C, 0xBFC4}, //3980 #HANGUL SYLLABLE SSANGPIEUP YO SSANGSIOS
+ {0x978D, 0xBFC6}, //3981 #HANGUL SYLLABLE SSANGPIEUP YO CIEUC
+ {0x978E, 0xBFC7}, //3982 #HANGUL SYLLABLE SSANGPIEUP YO CHIEUCH
+ {0x978F, 0xBFC8}, //3983 #HANGUL SYLLABLE SSANGPIEUP YO KHIEUKH
+ {0x9790, 0xBFC9}, //3984 #HANGUL SYLLABLE SSANGPIEUP YO THIEUTH
+ {0x9791, 0xBFCA}, //3985 #HANGUL SYLLABLE SSANGPIEUP YO PHIEUPH
+ {0x9792, 0xBFCB}, //3986 #HANGUL SYLLABLE SSANGPIEUP YO HIEUH
+ {0x9793, 0xBFCE}, //3987 #HANGUL SYLLABLE SSANGPIEUP U SSANGKIYEOK
+ {0x9794, 0xBFCF}, //3988 #HANGUL SYLLABLE SSANGPIEUP U KIYEOKSIOS
+ {0x9795, 0xBFD1}, //3989 #HANGUL SYLLABLE SSANGPIEUP U NIEUNCIEUC
+ {0x9796, 0xBFD2}, //3990 #HANGUL SYLLABLE SSANGPIEUP U NIEUNHIEUH
+ {0x9797, 0xBFD3}, //3991 #HANGUL SYLLABLE SSANGPIEUP U TIKEUT
+ {0x9798, 0xBFD5}, //3992 #HANGUL SYLLABLE SSANGPIEUP U RIEULKIYEOK
+ {0x9799, 0xBFD6}, //3993 #HANGUL SYLLABLE SSANGPIEUP U RIEULMIEUM
+ {0x979A, 0xBFD7}, //3994 #HANGUL SYLLABLE SSANGPIEUP U RIEULPIEUP
+ {0x979B, 0xBFD8}, //3995 #HANGUL SYLLABLE SSANGPIEUP U RIEULSIOS
+ {0x979C, 0xBFD9}, //3996 #HANGUL SYLLABLE SSANGPIEUP U RIEULTHIEUTH
+ {0x979D, 0xBFDA}, //3997 #HANGUL SYLLABLE SSANGPIEUP U RIEULPHIEUPH
+ {0x979E, 0xBFDB}, //3998 #HANGUL SYLLABLE SSANGPIEUP U RIEULHIEUH
+ {0x979F, 0xBFDD}, //3999 #HANGUL SYLLABLE SSANGPIEUP U PIEUP
+ {0x97A0, 0xBFDE}, //4000 #HANGUL SYLLABLE SSANGPIEUP U PIEUPSIOS
+ {0x97A1, 0xBFE0}, //4001 #HANGUL SYLLABLE SSANGPIEUP U SSANGSIOS
+ {0x97A2, 0xBFE2}, //4002 #HANGUL SYLLABLE SSANGPIEUP U CIEUC
+ {0x97A3, 0xBFE3}, //4003 #HANGUL SYLLABLE SSANGPIEUP U CHIEUCH
+ {0x97A4, 0xBFE4}, //4004 #HANGUL SYLLABLE SSANGPIEUP U KHIEUKH
+ {0x97A5, 0xBFE5}, //4005 #HANGUL SYLLABLE SSANGPIEUP U THIEUTH
+ {0x97A6, 0xBFE6}, //4006 #HANGUL SYLLABLE SSANGPIEUP U PHIEUPH
+ {0x97A7, 0xBFE7}, //4007 #HANGUL SYLLABLE SSANGPIEUP U HIEUH
+ {0x97A8, 0xBFE8}, //4008 #HANGUL SYLLABLE SSANGPIEUP WEO
+ {0x97A9, 0xBFE9}, //4009 #HANGUL SYLLABLE SSANGPIEUP WEO KIYEOK
+ {0x97AA, 0xBFEA}, //4010 #HANGUL SYLLABLE SSANGPIEUP WEO SSANGKIYEOK
+ {0x97AB, 0xBFEB}, //4011 #HANGUL SYLLABLE SSANGPIEUP WEO KIYEOKSIOS
+ {0x97AC, 0xBFEC}, //4012 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUN
+ {0x97AD, 0xBFED}, //4013 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUNCIEUC
+ {0x97AE, 0xBFEE}, //4014 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUNHIEUH
+ {0x97AF, 0xBFEF}, //4015 #HANGUL SYLLABLE SSANGPIEUP WEO TIKEUT
+ {0x97B0, 0xBFF0}, //4016 #HANGUL SYLLABLE SSANGPIEUP WEO RIEUL
+ {0x97B1, 0xBFF1}, //4017 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULKIYEOK
+ {0x97B2, 0xBFF2}, //4018 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULMIEUM
+ {0x97B3, 0xBFF3}, //4019 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULPIEUP
+ {0x97B4, 0xBFF4}, //4020 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULSIOS
+ {0x97B5, 0xBFF5}, //4021 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULTHIEUTH
+ {0x97B6, 0xBFF6}, //4022 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULPHIEUPH
+ {0x97B7, 0xBFF7}, //4023 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULHIEUH
+ {0x97B8, 0xBFF8}, //4024 #HANGUL SYLLABLE SSANGPIEUP WEO MIEUM
+ {0x97B9, 0xBFF9}, //4025 #HANGUL SYLLABLE SSANGPIEUP WEO PIEUP
+ {0x97BA, 0xBFFA}, //4026 #HANGUL SYLLABLE SSANGPIEUP WEO PIEUPSIOS
+ {0x97BB, 0xBFFB}, //4027 #HANGUL SYLLABLE SSANGPIEUP WEO SIOS
+ {0x97BC, 0xBFFC}, //4028 #HANGUL SYLLABLE SSANGPIEUP WEO SSANGSIOS
+ {0x97BD, 0xBFFD}, //4029 #HANGUL SYLLABLE SSANGPIEUP WEO IEUNG
+ {0x97BE, 0xBFFE}, //4030 #HANGUL SYLLABLE SSANGPIEUP WEO CIEUC
+ {0x97BF, 0xBFFF}, //4031 #HANGUL SYLLABLE SSANGPIEUP WEO CHIEUCH
+ {0x97C0, 0xC000}, //4032 #HANGUL SYLLABLE SSANGPIEUP WEO KHIEUKH
+ {0x97C1, 0xC001}, //4033 #HANGUL SYLLABLE SSANGPIEUP WEO THIEUTH
+ {0x97C2, 0xC002}, //4034 #HANGUL SYLLABLE SSANGPIEUP WEO PHIEUPH
+ {0x97C3, 0xC003}, //4035 #HANGUL SYLLABLE SSANGPIEUP WEO HIEUH
+ {0x97C4, 0xC004}, //4036 #HANGUL SYLLABLE SSANGPIEUP WE
+ {0x97C5, 0xC005}, //4037 #HANGUL SYLLABLE SSANGPIEUP WE KIYEOK
+ {0x97C6, 0xC006}, //4038 #HANGUL SYLLABLE SSANGPIEUP WE SSANGKIYEOK
+ {0x97C7, 0xC007}, //4039 #HANGUL SYLLABLE SSANGPIEUP WE KIYEOKSIOS
+ {0x97C8, 0xC008}, //4040 #HANGUL SYLLABLE SSANGPIEUP WE NIEUN
+ {0x97C9, 0xC009}, //4041 #HANGUL SYLLABLE SSANGPIEUP WE NIEUNCIEUC
+ {0x97CA, 0xC00A}, //4042 #HANGUL SYLLABLE SSANGPIEUP WE NIEUNHIEUH
+ {0x97CB, 0xC00B}, //4043 #HANGUL SYLLABLE SSANGPIEUP WE TIKEUT
+ {0x97CC, 0xC00C}, //4044 #HANGUL SYLLABLE SSANGPIEUP WE RIEUL
+ {0x97CD, 0xC00D}, //4045 #HANGUL SYLLABLE SSANGPIEUP WE RIEULKIYEOK
+ {0x97CE, 0xC00E}, //4046 #HANGUL SYLLABLE SSANGPIEUP WE RIEULMIEUM
+ {0x97CF, 0xC00F}, //4047 #HANGUL SYLLABLE SSANGPIEUP WE RIEULPIEUP
+ {0x97D0, 0xC010}, //4048 #HANGUL SYLLABLE SSANGPIEUP WE RIEULSIOS
+ {0x97D1, 0xC011}, //4049 #HANGUL SYLLABLE SSANGPIEUP WE RIEULTHIEUTH
+ {0x97D2, 0xC012}, //4050 #HANGUL SYLLABLE SSANGPIEUP WE RIEULPHIEUPH
+ {0x97D3, 0xC013}, //4051 #HANGUL SYLLABLE SSANGPIEUP WE RIEULHIEUH
+ {0x97D4, 0xC014}, //4052 #HANGUL SYLLABLE SSANGPIEUP WE MIEUM
+ {0x97D5, 0xC015}, //4053 #HANGUL SYLLABLE SSANGPIEUP WE PIEUP
+ {0x97D6, 0xC016}, //4054 #HANGUL SYLLABLE SSANGPIEUP WE PIEUPSIOS
+ {0x97D7, 0xC017}, //4055 #HANGUL SYLLABLE SSANGPIEUP WE SIOS
+ {0x97D8, 0xC018}, //4056 #HANGUL SYLLABLE SSANGPIEUP WE SSANGSIOS
+ {0x97D9, 0xC019}, //4057 #HANGUL SYLLABLE SSANGPIEUP WE IEUNG
+ {0x97DA, 0xC01A}, //4058 #HANGUL SYLLABLE SSANGPIEUP WE CIEUC
+ {0x97DB, 0xC01B}, //4059 #HANGUL SYLLABLE SSANGPIEUP WE CHIEUCH
+ {0x97DC, 0xC01C}, //4060 #HANGUL SYLLABLE SSANGPIEUP WE KHIEUKH
+ {0x97DD, 0xC01D}, //4061 #HANGUL SYLLABLE SSANGPIEUP WE THIEUTH
+ {0x97DE, 0xC01E}, //4062 #HANGUL SYLLABLE SSANGPIEUP WE PHIEUPH
+ {0x97DF, 0xC01F}, //4063 #HANGUL SYLLABLE SSANGPIEUP WE HIEUH
+ {0x97E0, 0xC020}, //4064 #HANGUL SYLLABLE SSANGPIEUP WI
+ {0x97E1, 0xC021}, //4065 #HANGUL SYLLABLE SSANGPIEUP WI KIYEOK
+ {0x97E2, 0xC022}, //4066 #HANGUL SYLLABLE SSANGPIEUP WI SSANGKIYEOK
+ {0x97E3, 0xC023}, //4067 #HANGUL SYLLABLE SSANGPIEUP WI KIYEOKSIOS
+ {0x97E4, 0xC024}, //4068 #HANGUL SYLLABLE SSANGPIEUP WI NIEUN
+ {0x97E5, 0xC025}, //4069 #HANGUL SYLLABLE SSANGPIEUP WI NIEUNCIEUC
+ {0x97E6, 0xC026}, //4070 #HANGUL SYLLABLE SSANGPIEUP WI NIEUNHIEUH
+ {0x97E7, 0xC027}, //4071 #HANGUL SYLLABLE SSANGPIEUP WI TIKEUT
+ {0x97E8, 0xC028}, //4072 #HANGUL SYLLABLE SSANGPIEUP WI RIEUL
+ {0x97E9, 0xC029}, //4073 #HANGUL SYLLABLE SSANGPIEUP WI RIEULKIYEOK
+ {0x97EA, 0xC02A}, //4074 #HANGUL SYLLABLE SSANGPIEUP WI RIEULMIEUM
+ {0x97EB, 0xC02B}, //4075 #HANGUL SYLLABLE SSANGPIEUP WI RIEULPIEUP
+ {0x97EC, 0xC02C}, //4076 #HANGUL SYLLABLE SSANGPIEUP WI RIEULSIOS
+ {0x97ED, 0xC02D}, //4077 #HANGUL SYLLABLE SSANGPIEUP WI RIEULTHIEUTH
+ {0x97EE, 0xC02E}, //4078 #HANGUL SYLLABLE SSANGPIEUP WI RIEULPHIEUPH
+ {0x97EF, 0xC02F}, //4079 #HANGUL SYLLABLE SSANGPIEUP WI RIEULHIEUH
+ {0x97F0, 0xC030}, //4080 #HANGUL SYLLABLE SSANGPIEUP WI MIEUM
+ {0x97F1, 0xC031}, //4081 #HANGUL SYLLABLE SSANGPIEUP WI PIEUP
+ {0x97F2, 0xC032}, //4082 #HANGUL SYLLABLE SSANGPIEUP WI PIEUPSIOS
+ {0x97F3, 0xC033}, //4083 #HANGUL SYLLABLE SSANGPIEUP WI SIOS
+ {0x97F4, 0xC034}, //4084 #HANGUL SYLLABLE SSANGPIEUP WI SSANGSIOS
+ {0x97F5, 0xC035}, //4085 #HANGUL SYLLABLE SSANGPIEUP WI IEUNG
+ {0x97F6, 0xC036}, //4086 #HANGUL SYLLABLE SSANGPIEUP WI CIEUC
+ {0x97F7, 0xC037}, //4087 #HANGUL SYLLABLE SSANGPIEUP WI CHIEUCH
+ {0x97F8, 0xC038}, //4088 #HANGUL SYLLABLE SSANGPIEUP WI KHIEUKH
+ {0x97F9, 0xC039}, //4089 #HANGUL SYLLABLE SSANGPIEUP WI THIEUTH
+ {0x97FA, 0xC03A}, //4090 #HANGUL SYLLABLE SSANGPIEUP WI PHIEUPH
+ {0x97FB, 0xC03B}, //4091 #HANGUL SYLLABLE SSANGPIEUP WI HIEUH
+ {0x97FC, 0xC03D}, //4092 #HANGUL SYLLABLE SSANGPIEUP YU KIYEOK
+ {0x97FD, 0xC03E}, //4093 #HANGUL SYLLABLE SSANGPIEUP YU SSANGKIYEOK
+ {0x97FE, 0xC03F}, //4094 #HANGUL SYLLABLE SSANGPIEUP YU KIYEOKSIOS
+ {0x9841, 0xC040}, //4095 #HANGUL SYLLABLE SSANGPIEUP YU NIEUN
+ {0x9842, 0xC041}, //4096 #HANGUL SYLLABLE SSANGPIEUP YU NIEUNCIEUC
+ {0x9843, 0xC042}, //4097 #HANGUL SYLLABLE SSANGPIEUP YU NIEUNHIEUH
+ {0x9844, 0xC043}, //4098 #HANGUL SYLLABLE SSANGPIEUP YU TIKEUT
+ {0x9845, 0xC044}, //4099 #HANGUL SYLLABLE SSANGPIEUP YU RIEUL
+ {0x9846, 0xC045}, //4100 #HANGUL SYLLABLE SSANGPIEUP YU RIEULKIYEOK
+ {0x9847, 0xC046}, //4101 #HANGUL SYLLABLE SSANGPIEUP YU RIEULMIEUM
+ {0x9848, 0xC047}, //4102 #HANGUL SYLLABLE SSANGPIEUP YU RIEULPIEUP
+ {0x9849, 0xC048}, //4103 #HANGUL SYLLABLE SSANGPIEUP YU RIEULSIOS
+ {0x984A, 0xC049}, //4104 #HANGUL SYLLABLE SSANGPIEUP YU RIEULTHIEUTH
+ {0x984B, 0xC04A}, //4105 #HANGUL SYLLABLE SSANGPIEUP YU RIEULPHIEUPH
+ {0x984C, 0xC04B}, //4106 #HANGUL SYLLABLE SSANGPIEUP YU RIEULHIEUH
+ {0x984D, 0xC04C}, //4107 #HANGUL SYLLABLE SSANGPIEUP YU MIEUM
+ {0x984E, 0xC04D}, //4108 #HANGUL SYLLABLE SSANGPIEUP YU PIEUP
+ {0x984F, 0xC04E}, //4109 #HANGUL SYLLABLE SSANGPIEUP YU PIEUPSIOS
+ {0x9850, 0xC04F}, //4110 #HANGUL SYLLABLE SSANGPIEUP YU SIOS
+ {0x9851, 0xC050}, //4111 #HANGUL SYLLABLE SSANGPIEUP YU SSANGSIOS
+ {0x9852, 0xC052}, //4112 #HANGUL SYLLABLE SSANGPIEUP YU CIEUC
+ {0x9853, 0xC053}, //4113 #HANGUL SYLLABLE SSANGPIEUP YU CHIEUCH
+ {0x9854, 0xC054}, //4114 #HANGUL SYLLABLE SSANGPIEUP YU KHIEUKH
+ {0x9855, 0xC055}, //4115 #HANGUL SYLLABLE SSANGPIEUP YU THIEUTH
+ {0x9856, 0xC056}, //4116 #HANGUL SYLLABLE SSANGPIEUP YU PHIEUPH
+ {0x9857, 0xC057}, //4117 #HANGUL SYLLABLE SSANGPIEUP YU HIEUH
+ {0x9858, 0xC059}, //4118 #HANGUL SYLLABLE SSANGPIEUP EU KIYEOK
+ {0x9859, 0xC05A}, //4119 #HANGUL SYLLABLE SSANGPIEUP EU SSANGKIYEOK
+ {0x985A, 0xC05B}, //4120 #HANGUL SYLLABLE SSANGPIEUP EU KIYEOKSIOS
+ {0x9861, 0xC05D}, //4121 #HANGUL SYLLABLE SSANGPIEUP EU NIEUNCIEUC
+ {0x9862, 0xC05E}, //4122 #HANGUL SYLLABLE SSANGPIEUP EU NIEUNHIEUH
+ {0x9863, 0xC05F}, //4123 #HANGUL SYLLABLE SSANGPIEUP EU TIKEUT
+ {0x9864, 0xC061}, //4124 #HANGUL SYLLABLE SSANGPIEUP EU RIEULKIYEOK
+ {0x9865, 0xC062}, //4125 #HANGUL SYLLABLE SSANGPIEUP EU RIEULMIEUM
+ {0x9866, 0xC063}, //4126 #HANGUL SYLLABLE SSANGPIEUP EU RIEULPIEUP
+ {0x9867, 0xC064}, //4127 #HANGUL SYLLABLE SSANGPIEUP EU RIEULSIOS
+ {0x9868, 0xC065}, //4128 #HANGUL SYLLABLE SSANGPIEUP EU RIEULTHIEUTH
+ {0x9869, 0xC066}, //4129 #HANGUL SYLLABLE SSANGPIEUP EU RIEULPHIEUPH
+ {0x986A, 0xC067}, //4130 #HANGUL SYLLABLE SSANGPIEUP EU RIEULHIEUH
+ {0x986B, 0xC06A}, //4131 #HANGUL SYLLABLE SSANGPIEUP EU PIEUPSIOS
+ {0x986C, 0xC06B}, //4132 #HANGUL SYLLABLE SSANGPIEUP EU SIOS
+ {0x986D, 0xC06C}, //4133 #HANGUL SYLLABLE SSANGPIEUP EU SSANGSIOS
+ {0x986E, 0xC06D}, //4134 #HANGUL SYLLABLE SSANGPIEUP EU IEUNG
+ {0x986F, 0xC06E}, //4135 #HANGUL SYLLABLE SSANGPIEUP EU CIEUC
+ {0x9870, 0xC06F}, //4136 #HANGUL SYLLABLE SSANGPIEUP EU CHIEUCH
+ {0x9871, 0xC070}, //4137 #HANGUL SYLLABLE SSANGPIEUP EU KHIEUKH
+ {0x9872, 0xC071}, //4138 #HANGUL SYLLABLE SSANGPIEUP EU THIEUTH
+ {0x9873, 0xC072}, //4139 #HANGUL SYLLABLE SSANGPIEUP EU PHIEUPH
+ {0x9874, 0xC073}, //4140 #HANGUL SYLLABLE SSANGPIEUP EU HIEUH
+ {0x9875, 0xC074}, //4141 #HANGUL SYLLABLE SSANGPIEUP YI
+ {0x9876, 0xC075}, //4142 #HANGUL SYLLABLE SSANGPIEUP YI KIYEOK
+ {0x9877, 0xC076}, //4143 #HANGUL SYLLABLE SSANGPIEUP YI SSANGKIYEOK
+ {0x9878, 0xC077}, //4144 #HANGUL SYLLABLE SSANGPIEUP YI KIYEOKSIOS
+ {0x9879, 0xC078}, //4145 #HANGUL SYLLABLE SSANGPIEUP YI NIEUN
+ {0x987A, 0xC079}, //4146 #HANGUL SYLLABLE SSANGPIEUP YI NIEUNCIEUC
+ {0x9881, 0xC07A}, //4147 #HANGUL SYLLABLE SSANGPIEUP YI NIEUNHIEUH
+ {0x9882, 0xC07B}, //4148 #HANGUL SYLLABLE SSANGPIEUP YI TIKEUT
+ {0x9883, 0xC07C}, //4149 #HANGUL SYLLABLE SSANGPIEUP YI RIEUL
+ {0x9884, 0xC07D}, //4150 #HANGUL SYLLABLE SSANGPIEUP YI RIEULKIYEOK
+ {0x9885, 0xC07E}, //4151 #HANGUL SYLLABLE SSANGPIEUP YI RIEULMIEUM
+ {0x9886, 0xC07F}, //4152 #HANGUL SYLLABLE SSANGPIEUP YI RIEULPIEUP
+ {0x9887, 0xC080}, //4153 #HANGUL SYLLABLE SSANGPIEUP YI RIEULSIOS
+ {0x9888, 0xC081}, //4154 #HANGUL SYLLABLE SSANGPIEUP YI RIEULTHIEUTH
+ {0x9889, 0xC082}, //4155 #HANGUL SYLLABLE SSANGPIEUP YI RIEULPHIEUPH
+ {0x988A, 0xC083}, //4156 #HANGUL SYLLABLE SSANGPIEUP YI RIEULHIEUH
+ {0x988B, 0xC084}, //4157 #HANGUL SYLLABLE SSANGPIEUP YI MIEUM
+ {0x988C, 0xC085}, //4158 #HANGUL SYLLABLE SSANGPIEUP YI PIEUP
+ {0x988D, 0xC086}, //4159 #HANGUL SYLLABLE SSANGPIEUP YI PIEUPSIOS
+ {0x988E, 0xC087}, //4160 #HANGUL SYLLABLE SSANGPIEUP YI SIOS
+ {0x988F, 0xC088}, //4161 #HANGUL SYLLABLE SSANGPIEUP YI SSANGSIOS
+ {0x9890, 0xC089}, //4162 #HANGUL SYLLABLE SSANGPIEUP YI IEUNG
+ {0x9891, 0xC08A}, //4163 #HANGUL SYLLABLE SSANGPIEUP YI CIEUC
+ {0x9892, 0xC08B}, //4164 #HANGUL SYLLABLE SSANGPIEUP YI CHIEUCH
+ {0x9893, 0xC08C}, //4165 #HANGUL SYLLABLE SSANGPIEUP YI KHIEUKH
+ {0x9894, 0xC08D}, //4166 #HANGUL SYLLABLE SSANGPIEUP YI THIEUTH
+ {0x9895, 0xC08E}, //4167 #HANGUL SYLLABLE SSANGPIEUP YI PHIEUPH
+ {0x9896, 0xC08F}, //4168 #HANGUL SYLLABLE SSANGPIEUP YI HIEUH
+ {0x9897, 0xC092}, //4169 #HANGUL SYLLABLE SSANGPIEUP I SSANGKIYEOK
+ {0x9898, 0xC093}, //4170 #HANGUL SYLLABLE SSANGPIEUP I KIYEOKSIOS
+ {0x9899, 0xC095}, //4171 #HANGUL SYLLABLE SSANGPIEUP I NIEUNCIEUC
+ {0x989A, 0xC096}, //4172 #HANGUL SYLLABLE SSANGPIEUP I NIEUNHIEUH
+ {0x989B, 0xC097}, //4173 #HANGUL SYLLABLE SSANGPIEUP I TIKEUT
+ {0x989C, 0xC099}, //4174 #HANGUL SYLLABLE SSANGPIEUP I RIEULKIYEOK
+ {0x989D, 0xC09A}, //4175 #HANGUL SYLLABLE SSANGPIEUP I RIEULMIEUM
+ {0x989E, 0xC09B}, //4176 #HANGUL SYLLABLE SSANGPIEUP I RIEULPIEUP
+ {0x989F, 0xC09C}, //4177 #HANGUL SYLLABLE SSANGPIEUP I RIEULSIOS
+ {0x98A0, 0xC09D}, //4178 #HANGUL SYLLABLE SSANGPIEUP I RIEULTHIEUTH
+ {0x98A1, 0xC09E}, //4179 #HANGUL SYLLABLE SSANGPIEUP I RIEULPHIEUPH
+ {0x98A2, 0xC09F}, //4180 #HANGUL SYLLABLE SSANGPIEUP I RIEULHIEUH
+ {0x98A3, 0xC0A2}, //4181 #HANGUL SYLLABLE SSANGPIEUP I PIEUPSIOS
+ {0x98A4, 0xC0A4}, //4182 #HANGUL SYLLABLE SSANGPIEUP I SSANGSIOS
+ {0x98A5, 0xC0A6}, //4183 #HANGUL SYLLABLE SSANGPIEUP I CIEUC
+ {0x98A6, 0xC0A7}, //4184 #HANGUL SYLLABLE SSANGPIEUP I CHIEUCH
+ {0x98A7, 0xC0A8}, //4185 #HANGUL SYLLABLE SSANGPIEUP I KHIEUKH
+ {0x98A8, 0xC0A9}, //4186 #HANGUL SYLLABLE SSANGPIEUP I THIEUTH
+ {0x98A9, 0xC0AA}, //4187 #HANGUL SYLLABLE SSANGPIEUP I PHIEUPH
+ {0x98AA, 0xC0AB}, //4188 #HANGUL SYLLABLE SSANGPIEUP I HIEUH
+ {0x98AB, 0xC0AE}, //4189 #HANGUL SYLLABLE SIOS A SSANGKIYEOK
+ {0x98AC, 0xC0B1}, //4190 #HANGUL SYLLABLE SIOS A NIEUNCIEUC
+ {0x98AD, 0xC0B2}, //4191 #HANGUL SYLLABLE SIOS A NIEUNHIEUH
+ {0x98AE, 0xC0B7}, //4192 #HANGUL SYLLABLE SIOS A RIEULPIEUP
+ {0x98AF, 0xC0B8}, //4193 #HANGUL SYLLABLE SIOS A RIEULSIOS
+ {0x98B0, 0xC0B9}, //4194 #HANGUL SYLLABLE SIOS A RIEULTHIEUTH
+ {0x98B1, 0xC0BA}, //4195 #HANGUL SYLLABLE SIOS A RIEULPHIEUPH
+ {0x98B2, 0xC0BB}, //4196 #HANGUL SYLLABLE SIOS A RIEULHIEUH
+ {0x98B3, 0xC0BE}, //4197 #HANGUL SYLLABLE SIOS A PIEUPSIOS
+ {0x98B4, 0xC0C2}, //4198 #HANGUL SYLLABLE SIOS A CIEUC
+ {0x98B5, 0xC0C3}, //4199 #HANGUL SYLLABLE SIOS A CHIEUCH
+ {0x98B6, 0xC0C4}, //4200 #HANGUL SYLLABLE SIOS A KHIEUKH
+ {0x98B7, 0xC0C6}, //4201 #HANGUL SYLLABLE SIOS A PHIEUPH
+ {0x98B8, 0xC0C7}, //4202 #HANGUL SYLLABLE SIOS A HIEUH
+ {0x98B9, 0xC0CA}, //4203 #HANGUL SYLLABLE SIOS AE SSANGKIYEOK
+ {0x98BA, 0xC0CB}, //4204 #HANGUL SYLLABLE SIOS AE KIYEOKSIOS
+ {0x98BB, 0xC0CD}, //4205 #HANGUL SYLLABLE SIOS AE NIEUNCIEUC
+ {0x98BC, 0xC0CE}, //4206 #HANGUL SYLLABLE SIOS AE NIEUNHIEUH
+ {0x98BD, 0xC0CF}, //4207 #HANGUL SYLLABLE SIOS AE TIKEUT
+ {0x98BE, 0xC0D1}, //4208 #HANGUL SYLLABLE SIOS AE RIEULKIYEOK
+ {0x98BF, 0xC0D2}, //4209 #HANGUL SYLLABLE SIOS AE RIEULMIEUM
+ {0x98C0, 0xC0D3}, //4210 #HANGUL SYLLABLE SIOS AE RIEULPIEUP
+ {0x98C1, 0xC0D4}, //4211 #HANGUL SYLLABLE SIOS AE RIEULSIOS
+ {0x98C2, 0xC0D5}, //4212 #HANGUL SYLLABLE SIOS AE RIEULTHIEUTH
+ {0x98C3, 0xC0D6}, //4213 #HANGUL SYLLABLE SIOS AE RIEULPHIEUPH
+ {0x98C4, 0xC0D7}, //4214 #HANGUL SYLLABLE SIOS AE RIEULHIEUH
+ {0x98C5, 0xC0DA}, //4215 #HANGUL SYLLABLE SIOS AE PIEUPSIOS
+ {0x98C6, 0xC0DE}, //4216 #HANGUL SYLLABLE SIOS AE CIEUC
+ {0x98C7, 0xC0DF}, //4217 #HANGUL SYLLABLE SIOS AE CHIEUCH
+ {0x98C8, 0xC0E0}, //4218 #HANGUL SYLLABLE SIOS AE KHIEUKH
+ {0x98C9, 0xC0E1}, //4219 #HANGUL SYLLABLE SIOS AE THIEUTH
+ {0x98CA, 0xC0E2}, //4220 #HANGUL SYLLABLE SIOS AE PHIEUPH
+ {0x98CB, 0xC0E3}, //4221 #HANGUL SYLLABLE SIOS AE HIEUH
+ {0x98CC, 0xC0E6}, //4222 #HANGUL SYLLABLE SIOS YA SSANGKIYEOK
+ {0x98CD, 0xC0E7}, //4223 #HANGUL SYLLABLE SIOS YA KIYEOKSIOS
+ {0x98CE, 0xC0E9}, //4224 #HANGUL SYLLABLE SIOS YA NIEUNCIEUC
+ {0x98CF, 0xC0EA}, //4225 #HANGUL SYLLABLE SIOS YA NIEUNHIEUH
+ {0x98D0, 0xC0EB}, //4226 #HANGUL SYLLABLE SIOS YA TIKEUT
+ {0x98D1, 0xC0ED}, //4227 #HANGUL SYLLABLE SIOS YA RIEULKIYEOK
+ {0x98D2, 0xC0EE}, //4228 #HANGUL SYLLABLE SIOS YA RIEULMIEUM
+ {0x98D3, 0xC0EF}, //4229 #HANGUL SYLLABLE SIOS YA RIEULPIEUP
+ {0x98D4, 0xC0F0}, //4230 #HANGUL SYLLABLE SIOS YA RIEULSIOS
+ {0x98D5, 0xC0F1}, //4231 #HANGUL SYLLABLE SIOS YA RIEULTHIEUTH
+ {0x98D6, 0xC0F2}, //4232 #HANGUL SYLLABLE SIOS YA RIEULPHIEUPH
+ {0x98D7, 0xC0F3}, //4233 #HANGUL SYLLABLE SIOS YA RIEULHIEUH
+ {0x98D8, 0xC0F6}, //4234 #HANGUL SYLLABLE SIOS YA PIEUPSIOS
+ {0x98D9, 0xC0F8}, //4235 #HANGUL SYLLABLE SIOS YA SSANGSIOS
+ {0x98DA, 0xC0FA}, //4236 #HANGUL SYLLABLE SIOS YA CIEUC
+ {0x98DB, 0xC0FB}, //4237 #HANGUL SYLLABLE SIOS YA CHIEUCH
+ {0x98DC, 0xC0FC}, //4238 #HANGUL SYLLABLE SIOS YA KHIEUKH
+ {0x98DD, 0xC0FD}, //4239 #HANGUL SYLLABLE SIOS YA THIEUTH
+ {0x98DE, 0xC0FE}, //4240 #HANGUL SYLLABLE SIOS YA PHIEUPH
+ {0x98DF, 0xC0FF}, //4241 #HANGUL SYLLABLE SIOS YA HIEUH
+ {0x98E0, 0xC101}, //4242 #HANGUL SYLLABLE SIOS YAE KIYEOK
+ {0x98E1, 0xC102}, //4243 #HANGUL SYLLABLE SIOS YAE SSANGKIYEOK
+ {0x98E2, 0xC103}, //4244 #HANGUL SYLLABLE SIOS YAE KIYEOKSIOS
+ {0x98E3, 0xC105}, //4245 #HANGUL SYLLABLE SIOS YAE NIEUNCIEUC
+ {0x98E4, 0xC106}, //4246 #HANGUL SYLLABLE SIOS YAE NIEUNHIEUH
+ {0x98E5, 0xC107}, //4247 #HANGUL SYLLABLE SIOS YAE TIKEUT
+ {0x98E6, 0xC109}, //4248 #HANGUL SYLLABLE SIOS YAE RIEULKIYEOK
+ {0x98E7, 0xC10A}, //4249 #HANGUL SYLLABLE SIOS YAE RIEULMIEUM
+ {0x98E8, 0xC10B}, //4250 #HANGUL SYLLABLE SIOS YAE RIEULPIEUP
+ {0x98E9, 0xC10C}, //4251 #HANGUL SYLLABLE SIOS YAE RIEULSIOS
+ {0x98EA, 0xC10D}, //4252 #HANGUL SYLLABLE SIOS YAE RIEULTHIEUTH
+ {0x98EB, 0xC10E}, //4253 #HANGUL SYLLABLE SIOS YAE RIEULPHIEUPH
+ {0x98EC, 0xC10F}, //4254 #HANGUL SYLLABLE SIOS YAE RIEULHIEUH
+ {0x98ED, 0xC111}, //4255 #HANGUL SYLLABLE SIOS YAE PIEUP
+ {0x98EE, 0xC112}, //4256 #HANGUL SYLLABLE SIOS YAE PIEUPSIOS
+ {0x98EF, 0xC113}, //4257 #HANGUL SYLLABLE SIOS YAE SIOS
+ {0x98F0, 0xC114}, //4258 #HANGUL SYLLABLE SIOS YAE SSANGSIOS
+ {0x98F1, 0xC116}, //4259 #HANGUL SYLLABLE SIOS YAE CIEUC
+ {0x98F2, 0xC117}, //4260 #HANGUL SYLLABLE SIOS YAE CHIEUCH
+ {0x98F3, 0xC118}, //4261 #HANGUL SYLLABLE SIOS YAE KHIEUKH
+ {0x98F4, 0xC119}, //4262 #HANGUL SYLLABLE SIOS YAE THIEUTH
+ {0x98F5, 0xC11A}, //4263 #HANGUL SYLLABLE SIOS YAE PHIEUPH
+ {0x98F6, 0xC11B}, //4264 #HANGUL SYLLABLE SIOS YAE HIEUH
+ {0x98F7, 0xC121}, //4265 #HANGUL SYLLABLE SIOS EO NIEUNCIEUC
+ {0x98F8, 0xC122}, //4266 #HANGUL SYLLABLE SIOS EO NIEUNHIEUH
+ {0x98F9, 0xC125}, //4267 #HANGUL SYLLABLE SIOS EO RIEULKIYEOK
+ {0x98FA, 0xC128}, //4268 #HANGUL SYLLABLE SIOS EO RIEULSIOS
+ {0x98FB, 0xC129}, //4269 #HANGUL SYLLABLE SIOS EO RIEULTHIEUTH
+ {0x98FC, 0xC12A}, //4270 #HANGUL SYLLABLE SIOS EO RIEULPHIEUPH
+ {0x98FD, 0xC12B}, //4271 #HANGUL SYLLABLE SIOS EO RIEULHIEUH
+ {0x98FE, 0xC12E}, //4272 #HANGUL SYLLABLE SIOS EO PIEUPSIOS
+ {0x9941, 0xC132}, //4273 #HANGUL SYLLABLE SIOS EO CIEUC
+ {0x9942, 0xC133}, //4274 #HANGUL SYLLABLE SIOS EO CHIEUCH
+ {0x9943, 0xC134}, //4275 #HANGUL SYLLABLE SIOS EO KHIEUKH
+ {0x9944, 0xC135}, //4276 #HANGUL SYLLABLE SIOS EO THIEUTH
+ {0x9945, 0xC137}, //4277 #HANGUL SYLLABLE SIOS EO HIEUH
+ {0x9946, 0xC13A}, //4278 #HANGUL SYLLABLE SIOS E SSANGKIYEOK
+ {0x9947, 0xC13B}, //4279 #HANGUL SYLLABLE SIOS E KIYEOKSIOS
+ {0x9948, 0xC13D}, //4280 #HANGUL SYLLABLE SIOS E NIEUNCIEUC
+ {0x9949, 0xC13E}, //4281 #HANGUL SYLLABLE SIOS E NIEUNHIEUH
+ {0x994A, 0xC13F}, //4282 #HANGUL SYLLABLE SIOS E TIKEUT
+ {0x994B, 0xC141}, //4283 #HANGUL SYLLABLE SIOS E RIEULKIYEOK
+ {0x994C, 0xC142}, //4284 #HANGUL SYLLABLE SIOS E RIEULMIEUM
+ {0x994D, 0xC143}, //4285 #HANGUL SYLLABLE SIOS E RIEULPIEUP
+ {0x994E, 0xC144}, //4286 #HANGUL SYLLABLE SIOS E RIEULSIOS
+ {0x994F, 0xC145}, //4287 #HANGUL SYLLABLE SIOS E RIEULTHIEUTH
+ {0x9950, 0xC146}, //4288 #HANGUL SYLLABLE SIOS E RIEULPHIEUPH
+ {0x9951, 0xC147}, //4289 #HANGUL SYLLABLE SIOS E RIEULHIEUH
+ {0x9952, 0xC14A}, //4290 #HANGUL SYLLABLE SIOS E PIEUPSIOS
+ {0x9953, 0xC14E}, //4291 #HANGUL SYLLABLE SIOS E CIEUC
+ {0x9954, 0xC14F}, //4292 #HANGUL SYLLABLE SIOS E CHIEUCH
+ {0x9955, 0xC150}, //4293 #HANGUL SYLLABLE SIOS E KHIEUKH
+ {0x9956, 0xC151}, //4294 #HANGUL SYLLABLE SIOS E THIEUTH
+ {0x9957, 0xC152}, //4295 #HANGUL SYLLABLE SIOS E PHIEUPH
+ {0x9958, 0xC153}, //4296 #HANGUL SYLLABLE SIOS E HIEUH
+ {0x9959, 0xC156}, //4297 #HANGUL SYLLABLE SIOS YEO SSANGKIYEOK
+ {0x995A, 0xC157}, //4298 #HANGUL SYLLABLE SIOS YEO KIYEOKSIOS
+ {0x9961, 0xC159}, //4299 #HANGUL SYLLABLE SIOS YEO NIEUNCIEUC
+ {0x9962, 0xC15A}, //4300 #HANGUL SYLLABLE SIOS YEO NIEUNHIEUH
+ {0x9963, 0xC15B}, //4301 #HANGUL SYLLABLE SIOS YEO TIKEUT
+ {0x9964, 0xC15D}, //4302 #HANGUL SYLLABLE SIOS YEO RIEULKIYEOK
+ {0x9965, 0xC15E}, //4303 #HANGUL SYLLABLE SIOS YEO RIEULMIEUM
+ {0x9966, 0xC15F}, //4304 #HANGUL SYLLABLE SIOS YEO RIEULPIEUP
+ {0x9967, 0xC160}, //4305 #HANGUL SYLLABLE SIOS YEO RIEULSIOS
+ {0x9968, 0xC161}, //4306 #HANGUL SYLLABLE SIOS YEO RIEULTHIEUTH
+ {0x9969, 0xC162}, //4307 #HANGUL SYLLABLE SIOS YEO RIEULPHIEUPH
+ {0x996A, 0xC163}, //4308 #HANGUL SYLLABLE SIOS YEO RIEULHIEUH
+ {0x996B, 0xC166}, //4309 #HANGUL SYLLABLE SIOS YEO PIEUPSIOS
+ {0x996C, 0xC16A}, //4310 #HANGUL SYLLABLE SIOS YEO CIEUC
+ {0x996D, 0xC16B}, //4311 #HANGUL SYLLABLE SIOS YEO CHIEUCH
+ {0x996E, 0xC16C}, //4312 #HANGUL SYLLABLE SIOS YEO KHIEUKH
+ {0x996F, 0xC16D}, //4313 #HANGUL SYLLABLE SIOS YEO THIEUTH
+ {0x9970, 0xC16E}, //4314 #HANGUL SYLLABLE SIOS YEO PHIEUPH
+ {0x9971, 0xC16F}, //4315 #HANGUL SYLLABLE SIOS YEO HIEUH
+ {0x9972, 0xC171}, //4316 #HANGUL SYLLABLE SIOS YE KIYEOK
+ {0x9973, 0xC172}, //4317 #HANGUL SYLLABLE SIOS YE SSANGKIYEOK
+ {0x9974, 0xC173}, //4318 #HANGUL SYLLABLE SIOS YE KIYEOKSIOS
+ {0x9975, 0xC175}, //4319 #HANGUL SYLLABLE SIOS YE NIEUNCIEUC
+ {0x9976, 0xC176}, //4320 #HANGUL SYLLABLE SIOS YE NIEUNHIEUH
+ {0x9977, 0xC177}, //4321 #HANGUL SYLLABLE SIOS YE TIKEUT
+ {0x9978, 0xC179}, //4322 #HANGUL SYLLABLE SIOS YE RIEULKIYEOK
+ {0x9979, 0xC17A}, //4323 #HANGUL SYLLABLE SIOS YE RIEULMIEUM
+ {0x997A, 0xC17B}, //4324 #HANGUL SYLLABLE SIOS YE RIEULPIEUP
+ {0x9981, 0xC17C}, //4325 #HANGUL SYLLABLE SIOS YE RIEULSIOS
+ {0x9982, 0xC17D}, //4326 #HANGUL SYLLABLE SIOS YE RIEULTHIEUTH
+ {0x9983, 0xC17E}, //4327 #HANGUL SYLLABLE SIOS YE RIEULPHIEUPH
+ {0x9984, 0xC17F}, //4328 #HANGUL SYLLABLE SIOS YE RIEULHIEUH
+ {0x9985, 0xC180}, //4329 #HANGUL SYLLABLE SIOS YE MIEUM
+ {0x9986, 0xC181}, //4330 #HANGUL SYLLABLE SIOS YE PIEUP
+ {0x9987, 0xC182}, //4331 #HANGUL SYLLABLE SIOS YE PIEUPSIOS
+ {0x9988, 0xC183}, //4332 #HANGUL SYLLABLE SIOS YE SIOS
+ {0x9989, 0xC184}, //4333 #HANGUL SYLLABLE SIOS YE SSANGSIOS
+ {0x998A, 0xC186}, //4334 #HANGUL SYLLABLE SIOS YE CIEUC
+ {0x998B, 0xC187}, //4335 #HANGUL SYLLABLE SIOS YE CHIEUCH
+ {0x998C, 0xC188}, //4336 #HANGUL SYLLABLE SIOS YE KHIEUKH
+ {0x998D, 0xC189}, //4337 #HANGUL SYLLABLE SIOS YE THIEUTH
+ {0x998E, 0xC18A}, //4338 #HANGUL SYLLABLE SIOS YE PHIEUPH
+ {0x998F, 0xC18B}, //4339 #HANGUL SYLLABLE SIOS YE HIEUH
+ {0x9990, 0xC18F}, //4340 #HANGUL SYLLABLE SIOS O KIYEOKSIOS
+ {0x9991, 0xC191}, //4341 #HANGUL SYLLABLE SIOS O NIEUNCIEUC
+ {0x9992, 0xC192}, //4342 #HANGUL SYLLABLE SIOS O NIEUNHIEUH
+ {0x9993, 0xC193}, //4343 #HANGUL SYLLABLE SIOS O TIKEUT
+ {0x9994, 0xC195}, //4344 #HANGUL SYLLABLE SIOS O RIEULKIYEOK
+ {0x9995, 0xC197}, //4345 #HANGUL SYLLABLE SIOS O RIEULPIEUP
+ {0x9996, 0xC198}, //4346 #HANGUL SYLLABLE SIOS O RIEULSIOS
+ {0x9997, 0xC199}, //4347 #HANGUL SYLLABLE SIOS O RIEULTHIEUTH
+ {0x9998, 0xC19A}, //4348 #HANGUL SYLLABLE SIOS O RIEULPHIEUPH
+ {0x9999, 0xC19B}, //4349 #HANGUL SYLLABLE SIOS O RIEULHIEUH
+ {0x999A, 0xC19E}, //4350 #HANGUL SYLLABLE SIOS O PIEUPSIOS
+ {0x999B, 0xC1A0}, //4351 #HANGUL SYLLABLE SIOS O SSANGSIOS
+ {0x999C, 0xC1A2}, //4352 #HANGUL SYLLABLE SIOS O CIEUC
+ {0x999D, 0xC1A3}, //4353 #HANGUL SYLLABLE SIOS O CHIEUCH
+ {0x999E, 0xC1A4}, //4354 #HANGUL SYLLABLE SIOS O KHIEUKH
+ {0x999F, 0xC1A6}, //4355 #HANGUL SYLLABLE SIOS O PHIEUPH
+ {0x99A0, 0xC1A7}, //4356 #HANGUL SYLLABLE SIOS O HIEUH
+ {0x99A1, 0xC1AA}, //4357 #HANGUL SYLLABLE SIOS WA SSANGKIYEOK
+ {0x99A2, 0xC1AB}, //4358 #HANGUL SYLLABLE SIOS WA KIYEOKSIOS
+ {0x99A3, 0xC1AD}, //4359 #HANGUL SYLLABLE SIOS WA NIEUNCIEUC
+ {0x99A4, 0xC1AE}, //4360 #HANGUL SYLLABLE SIOS WA NIEUNHIEUH
+ {0x99A5, 0xC1AF}, //4361 #HANGUL SYLLABLE SIOS WA TIKEUT
+ {0x99A6, 0xC1B1}, //4362 #HANGUL SYLLABLE SIOS WA RIEULKIYEOK
+ {0x99A7, 0xC1B2}, //4363 #HANGUL SYLLABLE SIOS WA RIEULMIEUM
+ {0x99A8, 0xC1B3}, //4364 #HANGUL SYLLABLE SIOS WA RIEULPIEUP
+ {0x99A9, 0xC1B4}, //4365 #HANGUL SYLLABLE SIOS WA RIEULSIOS
+ {0x99AA, 0xC1B5}, //4366 #HANGUL SYLLABLE SIOS WA RIEULTHIEUTH
+ {0x99AB, 0xC1B6}, //4367 #HANGUL SYLLABLE SIOS WA RIEULPHIEUPH
+ {0x99AC, 0xC1B7}, //4368 #HANGUL SYLLABLE SIOS WA RIEULHIEUH
+ {0x99AD, 0xC1B8}, //4369 #HANGUL SYLLABLE SIOS WA MIEUM
+ {0x99AE, 0xC1B9}, //4370 #HANGUL SYLLABLE SIOS WA PIEUP
+ {0x99AF, 0xC1BA}, //4371 #HANGUL SYLLABLE SIOS WA PIEUPSIOS
+ {0x99B0, 0xC1BB}, //4372 #HANGUL SYLLABLE SIOS WA SIOS
+ {0x99B1, 0xC1BC}, //4373 #HANGUL SYLLABLE SIOS WA SSANGSIOS
+ {0x99B2, 0xC1BE}, //4374 #HANGUL SYLLABLE SIOS WA CIEUC
+ {0x99B3, 0xC1BF}, //4375 #HANGUL SYLLABLE SIOS WA CHIEUCH
+ {0x99B4, 0xC1C0}, //4376 #HANGUL SYLLABLE SIOS WA KHIEUKH
+ {0x99B5, 0xC1C1}, //4377 #HANGUL SYLLABLE SIOS WA THIEUTH
+ {0x99B6, 0xC1C2}, //4378 #HANGUL SYLLABLE SIOS WA PHIEUPH
+ {0x99B7, 0xC1C3}, //4379 #HANGUL SYLLABLE SIOS WA HIEUH
+ {0x99B8, 0xC1C5}, //4380 #HANGUL SYLLABLE SIOS WAE KIYEOK
+ {0x99B9, 0xC1C6}, //4381 #HANGUL SYLLABLE SIOS WAE SSANGKIYEOK
+ {0x99BA, 0xC1C7}, //4382 #HANGUL SYLLABLE SIOS WAE KIYEOKSIOS
+ {0x99BB, 0xC1C9}, //4383 #HANGUL SYLLABLE SIOS WAE NIEUNCIEUC
+ {0x99BC, 0xC1CA}, //4384 #HANGUL SYLLABLE SIOS WAE NIEUNHIEUH
+ {0x99BD, 0xC1CB}, //4385 #HANGUL SYLLABLE SIOS WAE TIKEUT
+ {0x99BE, 0xC1CD}, //4386 #HANGUL SYLLABLE SIOS WAE RIEULKIYEOK
+ {0x99BF, 0xC1CE}, //4387 #HANGUL SYLLABLE SIOS WAE RIEULMIEUM
+ {0x99C0, 0xC1CF}, //4388 #HANGUL SYLLABLE SIOS WAE RIEULPIEUP
+ {0x99C1, 0xC1D0}, //4389 #HANGUL SYLLABLE SIOS WAE RIEULSIOS
+ {0x99C2, 0xC1D1}, //4390 #HANGUL SYLLABLE SIOS WAE RIEULTHIEUTH
+ {0x99C3, 0xC1D2}, //4391 #HANGUL SYLLABLE SIOS WAE RIEULPHIEUPH
+ {0x99C4, 0xC1D3}, //4392 #HANGUL SYLLABLE SIOS WAE RIEULHIEUH
+ {0x99C5, 0xC1D5}, //4393 #HANGUL SYLLABLE SIOS WAE PIEUP
+ {0x99C6, 0xC1D6}, //4394 #HANGUL SYLLABLE SIOS WAE PIEUPSIOS
+ {0x99C7, 0xC1D9}, //4395 #HANGUL SYLLABLE SIOS WAE IEUNG
+ {0x99C8, 0xC1DA}, //4396 #HANGUL SYLLABLE SIOS WAE CIEUC
+ {0x99C9, 0xC1DB}, //4397 #HANGUL SYLLABLE SIOS WAE CHIEUCH
+ {0x99CA, 0xC1DC}, //4398 #HANGUL SYLLABLE SIOS WAE KHIEUKH
+ {0x99CB, 0xC1DD}, //4399 #HANGUL SYLLABLE SIOS WAE THIEUTH
+ {0x99CC, 0xC1DE}, //4400 #HANGUL SYLLABLE SIOS WAE PHIEUPH
+ {0x99CD, 0xC1DF}, //4401 #HANGUL SYLLABLE SIOS WAE HIEUH
+ {0x99CE, 0xC1E1}, //4402 #HANGUL SYLLABLE SIOS OE KIYEOK
+ {0x99CF, 0xC1E2}, //4403 #HANGUL SYLLABLE SIOS OE SSANGKIYEOK
+ {0x99D0, 0xC1E3}, //4404 #HANGUL SYLLABLE SIOS OE KIYEOKSIOS
+ {0x99D1, 0xC1E5}, //4405 #HANGUL SYLLABLE SIOS OE NIEUNCIEUC
+ {0x99D2, 0xC1E6}, //4406 #HANGUL SYLLABLE SIOS OE NIEUNHIEUH
+ {0x99D3, 0xC1E7}, //4407 #HANGUL SYLLABLE SIOS OE TIKEUT
+ {0x99D4, 0xC1E9}, //4408 #HANGUL SYLLABLE SIOS OE RIEULKIYEOK
+ {0x99D5, 0xC1EA}, //4409 #HANGUL SYLLABLE SIOS OE RIEULMIEUM
+ {0x99D6, 0xC1EB}, //4410 #HANGUL SYLLABLE SIOS OE RIEULPIEUP
+ {0x99D7, 0xC1EC}, //4411 #HANGUL SYLLABLE SIOS OE RIEULSIOS
+ {0x99D8, 0xC1ED}, //4412 #HANGUL SYLLABLE SIOS OE RIEULTHIEUTH
+ {0x99D9, 0xC1EE}, //4413 #HANGUL SYLLABLE SIOS OE RIEULPHIEUPH
+ {0x99DA, 0xC1EF}, //4414 #HANGUL SYLLABLE SIOS OE RIEULHIEUH
+ {0x99DB, 0xC1F2}, //4415 #HANGUL SYLLABLE SIOS OE PIEUPSIOS
+ {0x99DC, 0xC1F4}, //4416 #HANGUL SYLLABLE SIOS OE SSANGSIOS
+ {0x99DD, 0xC1F5}, //4417 #HANGUL SYLLABLE SIOS OE IEUNG
+ {0x99DE, 0xC1F6}, //4418 #HANGUL SYLLABLE SIOS OE CIEUC
+ {0x99DF, 0xC1F7}, //4419 #HANGUL SYLLABLE SIOS OE CHIEUCH
+ {0x99E0, 0xC1F8}, //4420 #HANGUL SYLLABLE SIOS OE KHIEUKH
+ {0x99E1, 0xC1F9}, //4421 #HANGUL SYLLABLE SIOS OE THIEUTH
+ {0x99E2, 0xC1FA}, //4422 #HANGUL SYLLABLE SIOS OE PHIEUPH
+ {0x99E3, 0xC1FB}, //4423 #HANGUL SYLLABLE SIOS OE HIEUH
+ {0x99E4, 0xC1FE}, //4424 #HANGUL SYLLABLE SIOS YO SSANGKIYEOK
+ {0x99E5, 0xC1FF}, //4425 #HANGUL SYLLABLE SIOS YO KIYEOKSIOS
+ {0x99E6, 0xC201}, //4426 #HANGUL SYLLABLE SIOS YO NIEUNCIEUC
+ {0x99E7, 0xC202}, //4427 #HANGUL SYLLABLE SIOS YO NIEUNHIEUH
+ {0x99E8, 0xC203}, //4428 #HANGUL SYLLABLE SIOS YO TIKEUT
+ {0x99E9, 0xC205}, //4429 #HANGUL SYLLABLE SIOS YO RIEULKIYEOK
+ {0x99EA, 0xC206}, //4430 #HANGUL SYLLABLE SIOS YO RIEULMIEUM
+ {0x99EB, 0xC207}, //4431 #HANGUL SYLLABLE SIOS YO RIEULPIEUP
+ {0x99EC, 0xC208}, //4432 #HANGUL SYLLABLE SIOS YO RIEULSIOS
+ {0x99ED, 0xC209}, //4433 #HANGUL SYLLABLE SIOS YO RIEULTHIEUTH
+ {0x99EE, 0xC20A}, //4434 #HANGUL SYLLABLE SIOS YO RIEULPHIEUPH
+ {0x99EF, 0xC20B}, //4435 #HANGUL SYLLABLE SIOS YO RIEULHIEUH
+ {0x99F0, 0xC20E}, //4436 #HANGUL SYLLABLE SIOS YO PIEUPSIOS
+ {0x99F1, 0xC210}, //4437 #HANGUL SYLLABLE SIOS YO SSANGSIOS
+ {0x99F2, 0xC212}, //4438 #HANGUL SYLLABLE SIOS YO CIEUC
+ {0x99F3, 0xC213}, //4439 #HANGUL SYLLABLE SIOS YO CHIEUCH
+ {0x99F4, 0xC214}, //4440 #HANGUL SYLLABLE SIOS YO KHIEUKH
+ {0x99F5, 0xC215}, //4441 #HANGUL SYLLABLE SIOS YO THIEUTH
+ {0x99F6, 0xC216}, //4442 #HANGUL SYLLABLE SIOS YO PHIEUPH
+ {0x99F7, 0xC217}, //4443 #HANGUL SYLLABLE SIOS YO HIEUH
+ {0x99F8, 0xC21A}, //4444 #HANGUL SYLLABLE SIOS U SSANGKIYEOK
+ {0x99F9, 0xC21B}, //4445 #HANGUL SYLLABLE SIOS U KIYEOKSIOS
+ {0x99FA, 0xC21D}, //4446 #HANGUL SYLLABLE SIOS U NIEUNCIEUC
+ {0x99FB, 0xC21E}, //4447 #HANGUL SYLLABLE SIOS U NIEUNHIEUH
+ {0x99FC, 0xC221}, //4448 #HANGUL SYLLABLE SIOS U RIEULKIYEOK
+ {0x99FD, 0xC222}, //4449 #HANGUL SYLLABLE SIOS U RIEULMIEUM
+ {0x99FE, 0xC223}, //4450 #HANGUL SYLLABLE SIOS U RIEULPIEUP
+ {0x9A41, 0xC224}, //4451 #HANGUL SYLLABLE SIOS U RIEULSIOS
+ {0x9A42, 0xC225}, //4452 #HANGUL SYLLABLE SIOS U RIEULTHIEUTH
+ {0x9A43, 0xC226}, //4453 #HANGUL SYLLABLE SIOS U RIEULPHIEUPH
+ {0x9A44, 0xC227}, //4454 #HANGUL SYLLABLE SIOS U RIEULHIEUH
+ {0x9A45, 0xC22A}, //4455 #HANGUL SYLLABLE SIOS U PIEUPSIOS
+ {0x9A46, 0xC22C}, //4456 #HANGUL SYLLABLE SIOS U SSANGSIOS
+ {0x9A47, 0xC22E}, //4457 #HANGUL SYLLABLE SIOS U CIEUC
+ {0x9A48, 0xC230}, //4458 #HANGUL SYLLABLE SIOS U KHIEUKH
+ {0x9A49, 0xC233}, //4459 #HANGUL SYLLABLE SIOS U HIEUH
+ {0x9A4A, 0xC235}, //4460 #HANGUL SYLLABLE SIOS WEO KIYEOK
+ {0x9A4B, 0xC236}, //4461 #HANGUL SYLLABLE SIOS WEO SSANGKIYEOK
+ {0x9A4C, 0xC237}, //4462 #HANGUL SYLLABLE SIOS WEO KIYEOKSIOS
+ {0x9A4D, 0xC238}, //4463 #HANGUL SYLLABLE SIOS WEO NIEUN
+ {0x9A4E, 0xC239}, //4464 #HANGUL SYLLABLE SIOS WEO NIEUNCIEUC
+ {0x9A4F, 0xC23A}, //4465 #HANGUL SYLLABLE SIOS WEO NIEUNHIEUH
+ {0x9A50, 0xC23B}, //4466 #HANGUL SYLLABLE SIOS WEO TIKEUT
+ {0x9A51, 0xC23C}, //4467 #HANGUL SYLLABLE SIOS WEO RIEUL
+ {0x9A52, 0xC23D}, //4468 #HANGUL SYLLABLE SIOS WEO RIEULKIYEOK
+ {0x9A53, 0xC23E}, //4469 #HANGUL SYLLABLE SIOS WEO RIEULMIEUM
+ {0x9A54, 0xC23F}, //4470 #HANGUL SYLLABLE SIOS WEO RIEULPIEUP
+ {0x9A55, 0xC240}, //4471 #HANGUL SYLLABLE SIOS WEO RIEULSIOS
+ {0x9A56, 0xC241}, //4472 #HANGUL SYLLABLE SIOS WEO RIEULTHIEUTH
+ {0x9A57, 0xC242}, //4473 #HANGUL SYLLABLE SIOS WEO RIEULPHIEUPH
+ {0x9A58, 0xC243}, //4474 #HANGUL SYLLABLE SIOS WEO RIEULHIEUH
+ {0x9A59, 0xC244}, //4475 #HANGUL SYLLABLE SIOS WEO MIEUM
+ {0x9A5A, 0xC245}, //4476 #HANGUL SYLLABLE SIOS WEO PIEUP
+ {0x9A61, 0xC246}, //4477 #HANGUL SYLLABLE SIOS WEO PIEUPSIOS
+ {0x9A62, 0xC247}, //4478 #HANGUL SYLLABLE SIOS WEO SIOS
+ {0x9A63, 0xC249}, //4479 #HANGUL SYLLABLE SIOS WEO IEUNG
+ {0x9A64, 0xC24A}, //4480 #HANGUL SYLLABLE SIOS WEO CIEUC
+ {0x9A65, 0xC24B}, //4481 #HANGUL SYLLABLE SIOS WEO CHIEUCH
+ {0x9A66, 0xC24C}, //4482 #HANGUL SYLLABLE SIOS WEO KHIEUKH
+ {0x9A67, 0xC24D}, //4483 #HANGUL SYLLABLE SIOS WEO THIEUTH
+ {0x9A68, 0xC24E}, //4484 #HANGUL SYLLABLE SIOS WEO PHIEUPH
+ {0x9A69, 0xC24F}, //4485 #HANGUL SYLLABLE SIOS WEO HIEUH
+ {0x9A6A, 0xC252}, //4486 #HANGUL SYLLABLE SIOS WE SSANGKIYEOK
+ {0x9A6B, 0xC253}, //4487 #HANGUL SYLLABLE SIOS WE KIYEOKSIOS
+ {0x9A6C, 0xC255}, //4488 #HANGUL SYLLABLE SIOS WE NIEUNCIEUC
+ {0x9A6D, 0xC256}, //4489 #HANGUL SYLLABLE SIOS WE NIEUNHIEUH
+ {0x9A6E, 0xC257}, //4490 #HANGUL SYLLABLE SIOS WE TIKEUT
+ {0x9A6F, 0xC259}, //4491 #HANGUL SYLLABLE SIOS WE RIEULKIYEOK
+ {0x9A70, 0xC25A}, //4492 #HANGUL SYLLABLE SIOS WE RIEULMIEUM
+ {0x9A71, 0xC25B}, //4493 #HANGUL SYLLABLE SIOS WE RIEULPIEUP
+ {0x9A72, 0xC25C}, //4494 #HANGUL SYLLABLE SIOS WE RIEULSIOS
+ {0x9A73, 0xC25D}, //4495 #HANGUL SYLLABLE SIOS WE RIEULTHIEUTH
+ {0x9A74, 0xC25E}, //4496 #HANGUL SYLLABLE SIOS WE RIEULPHIEUPH
+ {0x9A75, 0xC25F}, //4497 #HANGUL SYLLABLE SIOS WE RIEULHIEUH
+ {0x9A76, 0xC261}, //4498 #HANGUL SYLLABLE SIOS WE PIEUP
+ {0x9A77, 0xC262}, //4499 #HANGUL SYLLABLE SIOS WE PIEUPSIOS
+ {0x9A78, 0xC263}, //4500 #HANGUL SYLLABLE SIOS WE SIOS
+ {0x9A79, 0xC264}, //4501 #HANGUL SYLLABLE SIOS WE SSANGSIOS
+ {0x9A7A, 0xC266}, //4502 #HANGUL SYLLABLE SIOS WE CIEUC
+ {0x9A81, 0xC267}, //4503 #HANGUL SYLLABLE SIOS WE CHIEUCH
+ {0x9A82, 0xC268}, //4504 #HANGUL SYLLABLE SIOS WE KHIEUKH
+ {0x9A83, 0xC269}, //4505 #HANGUL SYLLABLE SIOS WE THIEUTH
+ {0x9A84, 0xC26A}, //4506 #HANGUL SYLLABLE SIOS WE PHIEUPH
+ {0x9A85, 0xC26B}, //4507 #HANGUL SYLLABLE SIOS WE HIEUH
+ {0x9A86, 0xC26E}, //4508 #HANGUL SYLLABLE SIOS WI SSANGKIYEOK
+ {0x9A87, 0xC26F}, //4509 #HANGUL SYLLABLE SIOS WI KIYEOKSIOS
+ {0x9A88, 0xC271}, //4510 #HANGUL SYLLABLE SIOS WI NIEUNCIEUC
+ {0x9A89, 0xC272}, //4511 #HANGUL SYLLABLE SIOS WI NIEUNHIEUH
+ {0x9A8A, 0xC273}, //4512 #HANGUL SYLLABLE SIOS WI TIKEUT
+ {0x9A8B, 0xC275}, //4513 #HANGUL SYLLABLE SIOS WI RIEULKIYEOK
+ {0x9A8C, 0xC276}, //4514 #HANGUL SYLLABLE SIOS WI RIEULMIEUM
+ {0x9A8D, 0xC277}, //4515 #HANGUL SYLLABLE SIOS WI RIEULPIEUP
+ {0x9A8E, 0xC278}, //4516 #HANGUL SYLLABLE SIOS WI RIEULSIOS
+ {0x9A8F, 0xC279}, //4517 #HANGUL SYLLABLE SIOS WI RIEULTHIEUTH
+ {0x9A90, 0xC27A}, //4518 #HANGUL SYLLABLE SIOS WI RIEULPHIEUPH
+ {0x9A91, 0xC27B}, //4519 #HANGUL SYLLABLE SIOS WI RIEULHIEUH
+ {0x9A92, 0xC27E}, //4520 #HANGUL SYLLABLE SIOS WI PIEUPSIOS
+ {0x9A93, 0xC280}, //4521 #HANGUL SYLLABLE SIOS WI SSANGSIOS
+ {0x9A94, 0xC282}, //4522 #HANGUL SYLLABLE SIOS WI CIEUC
+ {0x9A95, 0xC283}, //4523 #HANGUL SYLLABLE SIOS WI CHIEUCH
+ {0x9A96, 0xC284}, //4524 #HANGUL SYLLABLE SIOS WI KHIEUKH
+ {0x9A97, 0xC285}, //4525 #HANGUL SYLLABLE SIOS WI THIEUTH
+ {0x9A98, 0xC286}, //4526 #HANGUL SYLLABLE SIOS WI PHIEUPH
+ {0x9A99, 0xC287}, //4527 #HANGUL SYLLABLE SIOS WI HIEUH
+ {0x9A9A, 0xC28A}, //4528 #HANGUL SYLLABLE SIOS YU SSANGKIYEOK
+ {0x9A9B, 0xC28B}, //4529 #HANGUL SYLLABLE SIOS YU KIYEOKSIOS
+ {0x9A9C, 0xC28C}, //4530 #HANGUL SYLLABLE SIOS YU NIEUN
+ {0x9A9D, 0xC28D}, //4531 #HANGUL SYLLABLE SIOS YU NIEUNCIEUC
+ {0x9A9E, 0xC28E}, //4532 #HANGUL SYLLABLE SIOS YU NIEUNHIEUH
+ {0x9A9F, 0xC28F}, //4533 #HANGUL SYLLABLE SIOS YU TIKEUT
+ {0x9AA0, 0xC291}, //4534 #HANGUL SYLLABLE SIOS YU RIEULKIYEOK
+ {0x9AA1, 0xC292}, //4535 #HANGUL SYLLABLE SIOS YU RIEULMIEUM
+ {0x9AA2, 0xC293}, //4536 #HANGUL SYLLABLE SIOS YU RIEULPIEUP
+ {0x9AA3, 0xC294}, //4537 #HANGUL SYLLABLE SIOS YU RIEULSIOS
+ {0x9AA4, 0xC295}, //4538 #HANGUL SYLLABLE SIOS YU RIEULTHIEUTH
+ {0x9AA5, 0xC296}, //4539 #HANGUL SYLLABLE SIOS YU RIEULPHIEUPH
+ {0x9AA6, 0xC297}, //4540 #HANGUL SYLLABLE SIOS YU RIEULHIEUH
+ {0x9AA7, 0xC299}, //4541 #HANGUL SYLLABLE SIOS YU PIEUP
+ {0x9AA8, 0xC29A}, //4542 #HANGUL SYLLABLE SIOS YU PIEUPSIOS
+ {0x9AA9, 0xC29C}, //4543 #HANGUL SYLLABLE SIOS YU SSANGSIOS
+ {0x9AAA, 0xC29E}, //4544 #HANGUL SYLLABLE SIOS YU CIEUC
+ {0x9AAB, 0xC29F}, //4545 #HANGUL SYLLABLE SIOS YU CHIEUCH
+ {0x9AAC, 0xC2A0}, //4546 #HANGUL SYLLABLE SIOS YU KHIEUKH
+ {0x9AAD, 0xC2A1}, //4547 #HANGUL SYLLABLE SIOS YU THIEUTH
+ {0x9AAE, 0xC2A2}, //4548 #HANGUL SYLLABLE SIOS YU PHIEUPH
+ {0x9AAF, 0xC2A3}, //4549 #HANGUL SYLLABLE SIOS YU HIEUH
+ {0x9AB0, 0xC2A6}, //4550 #HANGUL SYLLABLE SIOS EU SSANGKIYEOK
+ {0x9AB1, 0xC2A7}, //4551 #HANGUL SYLLABLE SIOS EU KIYEOKSIOS
+ {0x9AB2, 0xC2A9}, //4552 #HANGUL SYLLABLE SIOS EU NIEUNCIEUC
+ {0x9AB3, 0xC2AA}, //4553 #HANGUL SYLLABLE SIOS EU NIEUNHIEUH
+ {0x9AB4, 0xC2AB}, //4554 #HANGUL SYLLABLE SIOS EU TIKEUT
+ {0x9AB5, 0xC2AE}, //4555 #HANGUL SYLLABLE SIOS EU RIEULMIEUM
+ {0x9AB6, 0xC2AF}, //4556 #HANGUL SYLLABLE SIOS EU RIEULPIEUP
+ {0x9AB7, 0xC2B0}, //4557 #HANGUL SYLLABLE SIOS EU RIEULSIOS
+ {0x9AB8, 0xC2B1}, //4558 #HANGUL SYLLABLE SIOS EU RIEULTHIEUTH
+ {0x9AB9, 0xC2B2}, //4559 #HANGUL SYLLABLE SIOS EU RIEULPHIEUPH
+ {0x9ABA, 0xC2B3}, //4560 #HANGUL SYLLABLE SIOS EU RIEULHIEUH
+ {0x9ABB, 0xC2B6}, //4561 #HANGUL SYLLABLE SIOS EU PIEUPSIOS
+ {0x9ABC, 0xC2B8}, //4562 #HANGUL SYLLABLE SIOS EU SSANGSIOS
+ {0x9ABD, 0xC2BA}, //4563 #HANGUL SYLLABLE SIOS EU CIEUC
+ {0x9ABE, 0xC2BB}, //4564 #HANGUL SYLLABLE SIOS EU CHIEUCH
+ {0x9ABF, 0xC2BC}, //4565 #HANGUL SYLLABLE SIOS EU KHIEUKH
+ {0x9AC0, 0xC2BD}, //4566 #HANGUL SYLLABLE SIOS EU THIEUTH
+ {0x9AC1, 0xC2BE}, //4567 #HANGUL SYLLABLE SIOS EU PHIEUPH
+ {0x9AC2, 0xC2BF}, //4568 #HANGUL SYLLABLE SIOS EU HIEUH
+ {0x9AC3, 0xC2C0}, //4569 #HANGUL SYLLABLE SIOS YI
+ {0x9AC4, 0xC2C1}, //4570 #HANGUL SYLLABLE SIOS YI KIYEOK
+ {0x9AC5, 0xC2C2}, //4571 #HANGUL SYLLABLE SIOS YI SSANGKIYEOK
+ {0x9AC6, 0xC2C3}, //4572 #HANGUL SYLLABLE SIOS YI KIYEOKSIOS
+ {0x9AC7, 0xC2C4}, //4573 #HANGUL SYLLABLE SIOS YI NIEUN
+ {0x9AC8, 0xC2C5}, //4574 #HANGUL SYLLABLE SIOS YI NIEUNCIEUC
+ {0x9AC9, 0xC2C6}, //4575 #HANGUL SYLLABLE SIOS YI NIEUNHIEUH
+ {0x9ACA, 0xC2C7}, //4576 #HANGUL SYLLABLE SIOS YI TIKEUT
+ {0x9ACB, 0xC2C8}, //4577 #HANGUL SYLLABLE SIOS YI RIEUL
+ {0x9ACC, 0xC2C9}, //4578 #HANGUL SYLLABLE SIOS YI RIEULKIYEOK
+ {0x9ACD, 0xC2CA}, //4579 #HANGUL SYLLABLE SIOS YI RIEULMIEUM
+ {0x9ACE, 0xC2CB}, //4580 #HANGUL SYLLABLE SIOS YI RIEULPIEUP
+ {0x9ACF, 0xC2CC}, //4581 #HANGUL SYLLABLE SIOS YI RIEULSIOS
+ {0x9AD0, 0xC2CD}, //4582 #HANGUL SYLLABLE SIOS YI RIEULTHIEUTH
+ {0x9AD1, 0xC2CE}, //4583 #HANGUL SYLLABLE SIOS YI RIEULPHIEUPH
+ {0x9AD2, 0xC2CF}, //4584 #HANGUL SYLLABLE SIOS YI RIEULHIEUH
+ {0x9AD3, 0xC2D0}, //4585 #HANGUL SYLLABLE SIOS YI MIEUM
+ {0x9AD4, 0xC2D1}, //4586 #HANGUL SYLLABLE SIOS YI PIEUP
+ {0x9AD5, 0xC2D2}, //4587 #HANGUL SYLLABLE SIOS YI PIEUPSIOS
+ {0x9AD6, 0xC2D3}, //4588 #HANGUL SYLLABLE SIOS YI SIOS
+ {0x9AD7, 0xC2D4}, //4589 #HANGUL SYLLABLE SIOS YI SSANGSIOS
+ {0x9AD8, 0xC2D5}, //4590 #HANGUL SYLLABLE SIOS YI IEUNG
+ {0x9AD9, 0xC2D6}, //4591 #HANGUL SYLLABLE SIOS YI CIEUC
+ {0x9ADA, 0xC2D7}, //4592 #HANGUL SYLLABLE SIOS YI CHIEUCH
+ {0x9ADB, 0xC2D8}, //4593 #HANGUL SYLLABLE SIOS YI KHIEUKH
+ {0x9ADC, 0xC2D9}, //4594 #HANGUL SYLLABLE SIOS YI THIEUTH
+ {0x9ADD, 0xC2DA}, //4595 #HANGUL SYLLABLE SIOS YI PHIEUPH
+ {0x9ADE, 0xC2DB}, //4596 #HANGUL SYLLABLE SIOS YI HIEUH
+ {0x9ADF, 0xC2DE}, //4597 #HANGUL SYLLABLE SIOS I SSANGKIYEOK
+ {0x9AE0, 0xC2DF}, //4598 #HANGUL SYLLABLE SIOS I KIYEOKSIOS
+ {0x9AE1, 0xC2E1}, //4599 #HANGUL SYLLABLE SIOS I NIEUNCIEUC
+ {0x9AE2, 0xC2E2}, //4600 #HANGUL SYLLABLE SIOS I NIEUNHIEUH
+ {0x9AE3, 0xC2E5}, //4601 #HANGUL SYLLABLE SIOS I RIEULKIYEOK
+ {0x9AE4, 0xC2E6}, //4602 #HANGUL SYLLABLE SIOS I RIEULMIEUM
+ {0x9AE5, 0xC2E7}, //4603 #HANGUL SYLLABLE SIOS I RIEULPIEUP
+ {0x9AE6, 0xC2E8}, //4604 #HANGUL SYLLABLE SIOS I RIEULSIOS
+ {0x9AE7, 0xC2E9}, //4605 #HANGUL SYLLABLE SIOS I RIEULTHIEUTH
+ {0x9AE8, 0xC2EA}, //4606 #HANGUL SYLLABLE SIOS I RIEULPHIEUPH
+ {0x9AE9, 0xC2EE}, //4607 #HANGUL SYLLABLE SIOS I PIEUPSIOS
+ {0x9AEA, 0xC2F0}, //4608 #HANGUL SYLLABLE SIOS I SSANGSIOS
+ {0x9AEB, 0xC2F2}, //4609 #HANGUL SYLLABLE SIOS I CIEUC
+ {0x9AEC, 0xC2F3}, //4610 #HANGUL SYLLABLE SIOS I CHIEUCH
+ {0x9AED, 0xC2F4}, //4611 #HANGUL SYLLABLE SIOS I KHIEUKH
+ {0x9AEE, 0xC2F5}, //4612 #HANGUL SYLLABLE SIOS I THIEUTH
+ {0x9AEF, 0xC2F7}, //4613 #HANGUL SYLLABLE SIOS I HIEUH
+ {0x9AF0, 0xC2FA}, //4614 #HANGUL SYLLABLE SSANGSIOS A SSANGKIYEOK
+ {0x9AF1, 0xC2FD}, //4615 #HANGUL SYLLABLE SSANGSIOS A NIEUNCIEUC
+ {0x9AF2, 0xC2FE}, //4616 #HANGUL SYLLABLE SSANGSIOS A NIEUNHIEUH
+ {0x9AF3, 0xC2FF}, //4617 #HANGUL SYLLABLE SSANGSIOS A TIKEUT
+ {0x9AF4, 0xC301}, //4618 #HANGUL SYLLABLE SSANGSIOS A RIEULKIYEOK
+ {0x9AF5, 0xC302}, //4619 #HANGUL SYLLABLE SSANGSIOS A RIEULMIEUM
+ {0x9AF6, 0xC303}, //4620 #HANGUL SYLLABLE SSANGSIOS A RIEULPIEUP
+ {0x9AF7, 0xC304}, //4621 #HANGUL SYLLABLE SSANGSIOS A RIEULSIOS
+ {0x9AF8, 0xC305}, //4622 #HANGUL SYLLABLE SSANGSIOS A RIEULTHIEUTH
+ {0x9AF9, 0xC306}, //4623 #HANGUL SYLLABLE SSANGSIOS A RIEULPHIEUPH
+ {0x9AFA, 0xC307}, //4624 #HANGUL SYLLABLE SSANGSIOS A RIEULHIEUH
+ {0x9AFB, 0xC30A}, //4625 #HANGUL SYLLABLE SSANGSIOS A PIEUPSIOS
+ {0x9AFC, 0xC30B}, //4626 #HANGUL SYLLABLE SSANGSIOS A SIOS
+ {0x9AFD, 0xC30E}, //4627 #HANGUL SYLLABLE SSANGSIOS A CIEUC
+ {0x9AFE, 0xC30F}, //4628 #HANGUL SYLLABLE SSANGSIOS A CHIEUCH
+ {0x9B41, 0xC310}, //4629 #HANGUL SYLLABLE SSANGSIOS A KHIEUKH
+ {0x9B42, 0xC311}, //4630 #HANGUL SYLLABLE SSANGSIOS A THIEUTH
+ {0x9B43, 0xC312}, //4631 #HANGUL SYLLABLE SSANGSIOS A PHIEUPH
+ {0x9B44, 0xC316}, //4632 #HANGUL SYLLABLE SSANGSIOS AE SSANGKIYEOK
+ {0x9B45, 0xC317}, //4633 #HANGUL SYLLABLE SSANGSIOS AE KIYEOKSIOS
+ {0x9B46, 0xC319}, //4634 #HANGUL SYLLABLE SSANGSIOS AE NIEUNCIEUC
+ {0x9B47, 0xC31A}, //4635 #HANGUL SYLLABLE SSANGSIOS AE NIEUNHIEUH
+ {0x9B48, 0xC31B}, //4636 #HANGUL SYLLABLE SSANGSIOS AE TIKEUT
+ {0x9B49, 0xC31D}, //4637 #HANGUL SYLLABLE SSANGSIOS AE RIEULKIYEOK
+ {0x9B4A, 0xC31E}, //4638 #HANGUL SYLLABLE SSANGSIOS AE RIEULMIEUM
+ {0x9B4B, 0xC31F}, //4639 #HANGUL SYLLABLE SSANGSIOS AE RIEULPIEUP
+ {0x9B4C, 0xC320}, //4640 #HANGUL SYLLABLE SSANGSIOS AE RIEULSIOS
+ {0x9B4D, 0xC321}, //4641 #HANGUL SYLLABLE SSANGSIOS AE RIEULTHIEUTH
+ {0x9B4E, 0xC322}, //4642 #HANGUL SYLLABLE SSANGSIOS AE RIEULPHIEUPH
+ {0x9B4F, 0xC323}, //4643 #HANGUL SYLLABLE SSANGSIOS AE RIEULHIEUH
+ {0x9B50, 0xC326}, //4644 #HANGUL SYLLABLE SSANGSIOS AE PIEUPSIOS
+ {0x9B51, 0xC327}, //4645 #HANGUL SYLLABLE SSANGSIOS AE SIOS
+ {0x9B52, 0xC32A}, //4646 #HANGUL SYLLABLE SSANGSIOS AE CIEUC
+ {0x9B53, 0xC32B}, //4647 #HANGUL SYLLABLE SSANGSIOS AE CHIEUCH
+ {0x9B54, 0xC32C}, //4648 #HANGUL SYLLABLE SSANGSIOS AE KHIEUKH
+ {0x9B55, 0xC32D}, //4649 #HANGUL SYLLABLE SSANGSIOS AE THIEUTH
+ {0x9B56, 0xC32E}, //4650 #HANGUL SYLLABLE SSANGSIOS AE PHIEUPH
+ {0x9B57, 0xC32F}, //4651 #HANGUL SYLLABLE SSANGSIOS AE HIEUH
+ {0x9B58, 0xC330}, //4652 #HANGUL SYLLABLE SSANGSIOS YA
+ {0x9B59, 0xC331}, //4653 #HANGUL SYLLABLE SSANGSIOS YA KIYEOK
+ {0x9B5A, 0xC332}, //4654 #HANGUL SYLLABLE SSANGSIOS YA SSANGKIYEOK
+ {0x9B61, 0xC333}, //4655 #HANGUL SYLLABLE SSANGSIOS YA KIYEOKSIOS
+ {0x9B62, 0xC334}, //4656 #HANGUL SYLLABLE SSANGSIOS YA NIEUN
+ {0x9B63, 0xC335}, //4657 #HANGUL SYLLABLE SSANGSIOS YA NIEUNCIEUC
+ {0x9B64, 0xC336}, //4658 #HANGUL SYLLABLE SSANGSIOS YA NIEUNHIEUH
+ {0x9B65, 0xC337}, //4659 #HANGUL SYLLABLE SSANGSIOS YA TIKEUT
+ {0x9B66, 0xC338}, //4660 #HANGUL SYLLABLE SSANGSIOS YA RIEUL
+ {0x9B67, 0xC339}, //4661 #HANGUL SYLLABLE SSANGSIOS YA RIEULKIYEOK
+ {0x9B68, 0xC33A}, //4662 #HANGUL SYLLABLE SSANGSIOS YA RIEULMIEUM
+ {0x9B69, 0xC33B}, //4663 #HANGUL SYLLABLE SSANGSIOS YA RIEULPIEUP
+ {0x9B6A, 0xC33C}, //4664 #HANGUL SYLLABLE SSANGSIOS YA RIEULSIOS
+ {0x9B6B, 0xC33D}, //4665 #HANGUL SYLLABLE SSANGSIOS YA RIEULTHIEUTH
+ {0x9B6C, 0xC33E}, //4666 #HANGUL SYLLABLE SSANGSIOS YA RIEULPHIEUPH
+ {0x9B6D, 0xC33F}, //4667 #HANGUL SYLLABLE SSANGSIOS YA RIEULHIEUH
+ {0x9B6E, 0xC340}, //4668 #HANGUL SYLLABLE SSANGSIOS YA MIEUM
+ {0x9B6F, 0xC341}, //4669 #HANGUL SYLLABLE SSANGSIOS YA PIEUP
+ {0x9B70, 0xC342}, //4670 #HANGUL SYLLABLE SSANGSIOS YA PIEUPSIOS
+ {0x9B71, 0xC343}, //4671 #HANGUL SYLLABLE SSANGSIOS YA SIOS
+ {0x9B72, 0xC344}, //4672 #HANGUL SYLLABLE SSANGSIOS YA SSANGSIOS
+ {0x9B73, 0xC346}, //4673 #HANGUL SYLLABLE SSANGSIOS YA CIEUC
+ {0x9B74, 0xC347}, //4674 #HANGUL SYLLABLE SSANGSIOS YA CHIEUCH
+ {0x9B75, 0xC348}, //4675 #HANGUL SYLLABLE SSANGSIOS YA KHIEUKH
+ {0x9B76, 0xC349}, //4676 #HANGUL SYLLABLE SSANGSIOS YA THIEUTH
+ {0x9B77, 0xC34A}, //4677 #HANGUL SYLLABLE SSANGSIOS YA PHIEUPH
+ {0x9B78, 0xC34B}, //4678 #HANGUL SYLLABLE SSANGSIOS YA HIEUH
+ {0x9B79, 0xC34C}, //4679 #HANGUL SYLLABLE SSANGSIOS YAE
+ {0x9B7A, 0xC34D}, //4680 #HANGUL SYLLABLE SSANGSIOS YAE KIYEOK
+ {0x9B81, 0xC34E}, //4681 #HANGUL SYLLABLE SSANGSIOS YAE SSANGKIYEOK
+ {0x9B82, 0xC34F}, //4682 #HANGUL SYLLABLE SSANGSIOS YAE KIYEOKSIOS
+ {0x9B83, 0xC350}, //4683 #HANGUL SYLLABLE SSANGSIOS YAE NIEUN
+ {0x9B84, 0xC351}, //4684 #HANGUL SYLLABLE SSANGSIOS YAE NIEUNCIEUC
+ {0x9B85, 0xC352}, //4685 #HANGUL SYLLABLE SSANGSIOS YAE NIEUNHIEUH
+ {0x9B86, 0xC353}, //4686 #HANGUL SYLLABLE SSANGSIOS YAE TIKEUT
+ {0x9B87, 0xC354}, //4687 #HANGUL SYLLABLE SSANGSIOS YAE RIEUL
+ {0x9B88, 0xC355}, //4688 #HANGUL SYLLABLE SSANGSIOS YAE RIEULKIYEOK
+ {0x9B89, 0xC356}, //4689 #HANGUL SYLLABLE SSANGSIOS YAE RIEULMIEUM
+ {0x9B8A, 0xC357}, //4690 #HANGUL SYLLABLE SSANGSIOS YAE RIEULPIEUP
+ {0x9B8B, 0xC358}, //4691 #HANGUL SYLLABLE SSANGSIOS YAE RIEULSIOS
+ {0x9B8C, 0xC359}, //4692 #HANGUL SYLLABLE SSANGSIOS YAE RIEULTHIEUTH
+ {0x9B8D, 0xC35A}, //4693 #HANGUL SYLLABLE SSANGSIOS YAE RIEULPHIEUPH
+ {0x9B8E, 0xC35B}, //4694 #HANGUL SYLLABLE SSANGSIOS YAE RIEULHIEUH
+ {0x9B8F, 0xC35C}, //4695 #HANGUL SYLLABLE SSANGSIOS YAE MIEUM
+ {0x9B90, 0xC35D}, //4696 #HANGUL SYLLABLE SSANGSIOS YAE PIEUP
+ {0x9B91, 0xC35E}, //4697 #HANGUL SYLLABLE SSANGSIOS YAE PIEUPSIOS
+ {0x9B92, 0xC35F}, //4698 #HANGUL SYLLABLE SSANGSIOS YAE SIOS
+ {0x9B93, 0xC360}, //4699 #HANGUL SYLLABLE SSANGSIOS YAE SSANGSIOS
+ {0x9B94, 0xC361}, //4700 #HANGUL SYLLABLE SSANGSIOS YAE IEUNG
+ {0x9B95, 0xC362}, //4701 #HANGUL SYLLABLE SSANGSIOS YAE CIEUC
+ {0x9B96, 0xC363}, //4702 #HANGUL SYLLABLE SSANGSIOS YAE CHIEUCH
+ {0x9B97, 0xC364}, //4703 #HANGUL SYLLABLE SSANGSIOS YAE KHIEUKH
+ {0x9B98, 0xC365}, //4704 #HANGUL SYLLABLE SSANGSIOS YAE THIEUTH
+ {0x9B99, 0xC366}, //4705 #HANGUL SYLLABLE SSANGSIOS YAE PHIEUPH
+ {0x9B9A, 0xC367}, //4706 #HANGUL SYLLABLE SSANGSIOS YAE HIEUH
+ {0x9B9B, 0xC36A}, //4707 #HANGUL SYLLABLE SSANGSIOS EO SSANGKIYEOK
+ {0x9B9C, 0xC36B}, //4708 #HANGUL SYLLABLE SSANGSIOS EO KIYEOKSIOS
+ {0x9B9D, 0xC36D}, //4709 #HANGUL SYLLABLE SSANGSIOS EO NIEUNCIEUC
+ {0x9B9E, 0xC36E}, //4710 #HANGUL SYLLABLE SSANGSIOS EO NIEUNHIEUH
+ {0x9B9F, 0xC36F}, //4711 #HANGUL SYLLABLE SSANGSIOS EO TIKEUT
+ {0x9BA0, 0xC371}, //4712 #HANGUL SYLLABLE SSANGSIOS EO RIEULKIYEOK
+ {0x9BA1, 0xC373}, //4713 #HANGUL SYLLABLE SSANGSIOS EO RIEULPIEUP
+ {0x9BA2, 0xC374}, //4714 #HANGUL SYLLABLE SSANGSIOS EO RIEULSIOS
+ {0x9BA3, 0xC375}, //4715 #HANGUL SYLLABLE SSANGSIOS EO RIEULTHIEUTH
+ {0x9BA4, 0xC376}, //4716 #HANGUL SYLLABLE SSANGSIOS EO RIEULPHIEUPH
+ {0x9BA5, 0xC377}, //4717 #HANGUL SYLLABLE SSANGSIOS EO RIEULHIEUH
+ {0x9BA6, 0xC37A}, //4718 #HANGUL SYLLABLE SSANGSIOS EO PIEUPSIOS
+ {0x9BA7, 0xC37B}, //4719 #HANGUL SYLLABLE SSANGSIOS EO SIOS
+ {0x9BA8, 0xC37E}, //4720 #HANGUL SYLLABLE SSANGSIOS EO CIEUC
+ {0x9BA9, 0xC37F}, //4721 #HANGUL SYLLABLE SSANGSIOS EO CHIEUCH
+ {0x9BAA, 0xC380}, //4722 #HANGUL SYLLABLE SSANGSIOS EO KHIEUKH
+ {0x9BAB, 0xC381}, //4723 #HANGUL SYLLABLE SSANGSIOS EO THIEUTH
+ {0x9BAC, 0xC382}, //4724 #HANGUL SYLLABLE SSANGSIOS EO PHIEUPH
+ {0x9BAD, 0xC383}, //4725 #HANGUL SYLLABLE SSANGSIOS EO HIEUH
+ {0x9BAE, 0xC385}, //4726 #HANGUL SYLLABLE SSANGSIOS E KIYEOK
+ {0x9BAF, 0xC386}, //4727 #HANGUL SYLLABLE SSANGSIOS E SSANGKIYEOK
+ {0x9BB0, 0xC387}, //4728 #HANGUL SYLLABLE SSANGSIOS E KIYEOKSIOS
+ {0x9BB1, 0xC389}, //4729 #HANGUL SYLLABLE SSANGSIOS E NIEUNCIEUC
+ {0x9BB2, 0xC38A}, //4730 #HANGUL SYLLABLE SSANGSIOS E NIEUNHIEUH
+ {0x9BB3, 0xC38B}, //4731 #HANGUL SYLLABLE SSANGSIOS E TIKEUT
+ {0x9BB4, 0xC38D}, //4732 #HANGUL SYLLABLE SSANGSIOS E RIEULKIYEOK
+ {0x9BB5, 0xC38E}, //4733 #HANGUL SYLLABLE SSANGSIOS E RIEULMIEUM
+ {0x9BB6, 0xC38F}, //4734 #HANGUL SYLLABLE SSANGSIOS E RIEULPIEUP
+ {0x9BB7, 0xC390}, //4735 #HANGUL SYLLABLE SSANGSIOS E RIEULSIOS
+ {0x9BB8, 0xC391}, //4736 #HANGUL SYLLABLE SSANGSIOS E RIEULTHIEUTH
+ {0x9BB9, 0xC392}, //4737 #HANGUL SYLLABLE SSANGSIOS E RIEULPHIEUPH
+ {0x9BBA, 0xC393}, //4738 #HANGUL SYLLABLE SSANGSIOS E RIEULHIEUH
+ {0x9BBB, 0xC394}, //4739 #HANGUL SYLLABLE SSANGSIOS E MIEUM
+ {0x9BBC, 0xC395}, //4740 #HANGUL SYLLABLE SSANGSIOS E PIEUP
+ {0x9BBD, 0xC396}, //4741 #HANGUL SYLLABLE SSANGSIOS E PIEUPSIOS
+ {0x9BBE, 0xC397}, //4742 #HANGUL SYLLABLE SSANGSIOS E SIOS
+ {0x9BBF, 0xC398}, //4743 #HANGUL SYLLABLE SSANGSIOS E SSANGSIOS
+ {0x9BC0, 0xC399}, //4744 #HANGUL SYLLABLE SSANGSIOS E IEUNG
+ {0x9BC1, 0xC39A}, //4745 #HANGUL SYLLABLE SSANGSIOS E CIEUC
+ {0x9BC2, 0xC39B}, //4746 #HANGUL SYLLABLE SSANGSIOS E CHIEUCH
+ {0x9BC3, 0xC39C}, //4747 #HANGUL SYLLABLE SSANGSIOS E KHIEUKH
+ {0x9BC4, 0xC39D}, //4748 #HANGUL SYLLABLE SSANGSIOS E THIEUTH
+ {0x9BC5, 0xC39E}, //4749 #HANGUL SYLLABLE SSANGSIOS E PHIEUPH
+ {0x9BC6, 0xC39F}, //4750 #HANGUL SYLLABLE SSANGSIOS E HIEUH
+ {0x9BC7, 0xC3A0}, //4751 #HANGUL SYLLABLE SSANGSIOS YEO
+ {0x9BC8, 0xC3A1}, //4752 #HANGUL SYLLABLE SSANGSIOS YEO KIYEOK
+ {0x9BC9, 0xC3A2}, //4753 #HANGUL SYLLABLE SSANGSIOS YEO SSANGKIYEOK
+ {0x9BCA, 0xC3A3}, //4754 #HANGUL SYLLABLE SSANGSIOS YEO KIYEOKSIOS
+ {0x9BCB, 0xC3A4}, //4755 #HANGUL SYLLABLE SSANGSIOS YEO NIEUN
+ {0x9BCC, 0xC3A5}, //4756 #HANGUL SYLLABLE SSANGSIOS YEO NIEUNCIEUC
+ {0x9BCD, 0xC3A6}, //4757 #HANGUL SYLLABLE SSANGSIOS YEO NIEUNHIEUH
+ {0x9BCE, 0xC3A7}, //4758 #HANGUL SYLLABLE SSANGSIOS YEO TIKEUT
+ {0x9BCF, 0xC3A8}, //4759 #HANGUL SYLLABLE SSANGSIOS YEO RIEUL
+ {0x9BD0, 0xC3A9}, //4760 #HANGUL SYLLABLE SSANGSIOS YEO RIEULKIYEOK
+ {0x9BD1, 0xC3AA}, //4761 #HANGUL SYLLABLE SSANGSIOS YEO RIEULMIEUM
+ {0x9BD2, 0xC3AB}, //4762 #HANGUL SYLLABLE SSANGSIOS YEO RIEULPIEUP
+ {0x9BD3, 0xC3AC}, //4763 #HANGUL SYLLABLE SSANGSIOS YEO RIEULSIOS
+ {0x9BD4, 0xC3AD}, //4764 #HANGUL SYLLABLE SSANGSIOS YEO RIEULTHIEUTH
+ {0x9BD5, 0xC3AE}, //4765 #HANGUL SYLLABLE SSANGSIOS YEO RIEULPHIEUPH
+ {0x9BD6, 0xC3AF}, //4766 #HANGUL SYLLABLE SSANGSIOS YEO RIEULHIEUH
+ {0x9BD7, 0xC3B0}, //4767 #HANGUL SYLLABLE SSANGSIOS YEO MIEUM
+ {0x9BD8, 0xC3B1}, //4768 #HANGUL SYLLABLE SSANGSIOS YEO PIEUP
+ {0x9BD9, 0xC3B2}, //4769 #HANGUL SYLLABLE SSANGSIOS YEO PIEUPSIOS
+ {0x9BDA, 0xC3B3}, //4770 #HANGUL SYLLABLE SSANGSIOS YEO SIOS
+ {0x9BDB, 0xC3B4}, //4771 #HANGUL SYLLABLE SSANGSIOS YEO SSANGSIOS
+ {0x9BDC, 0xC3B5}, //4772 #HANGUL SYLLABLE SSANGSIOS YEO IEUNG
+ {0x9BDD, 0xC3B6}, //4773 #HANGUL SYLLABLE SSANGSIOS YEO CIEUC
+ {0x9BDE, 0xC3B7}, //4774 #HANGUL SYLLABLE SSANGSIOS YEO CHIEUCH
+ {0x9BDF, 0xC3B8}, //4775 #HANGUL SYLLABLE SSANGSIOS YEO KHIEUKH
+ {0x9BE0, 0xC3B9}, //4776 #HANGUL SYLLABLE SSANGSIOS YEO THIEUTH
+ {0x9BE1, 0xC3BA}, //4777 #HANGUL SYLLABLE SSANGSIOS YEO PHIEUPH
+ {0x9BE2, 0xC3BB}, //4778 #HANGUL SYLLABLE SSANGSIOS YEO HIEUH
+ {0x9BE3, 0xC3BC}, //4779 #HANGUL SYLLABLE SSANGSIOS YE
+ {0x9BE4, 0xC3BD}, //4780 #HANGUL SYLLABLE SSANGSIOS YE KIYEOK
+ {0x9BE5, 0xC3BE}, //4781 #HANGUL SYLLABLE SSANGSIOS YE SSANGKIYEOK
+ {0x9BE6, 0xC3BF}, //4782 #HANGUL SYLLABLE SSANGSIOS YE KIYEOKSIOS
+ {0x9BE7, 0xC3C1}, //4783 #HANGUL SYLLABLE SSANGSIOS YE NIEUNCIEUC
+ {0x9BE8, 0xC3C2}, //4784 #HANGUL SYLLABLE SSANGSIOS YE NIEUNHIEUH
+ {0x9BE9, 0xC3C3}, //4785 #HANGUL SYLLABLE SSANGSIOS YE TIKEUT
+ {0x9BEA, 0xC3C4}, //4786 #HANGUL SYLLABLE SSANGSIOS YE RIEUL
+ {0x9BEB, 0xC3C5}, //4787 #HANGUL SYLLABLE SSANGSIOS YE RIEULKIYEOK
+ {0x9BEC, 0xC3C6}, //4788 #HANGUL SYLLABLE SSANGSIOS YE RIEULMIEUM
+ {0x9BED, 0xC3C7}, //4789 #HANGUL SYLLABLE SSANGSIOS YE RIEULPIEUP
+ {0x9BEE, 0xC3C8}, //4790 #HANGUL SYLLABLE SSANGSIOS YE RIEULSIOS
+ {0x9BEF, 0xC3C9}, //4791 #HANGUL SYLLABLE SSANGSIOS YE RIEULTHIEUTH
+ {0x9BF0, 0xC3CA}, //4792 #HANGUL SYLLABLE SSANGSIOS YE RIEULPHIEUPH
+ {0x9BF1, 0xC3CB}, //4793 #HANGUL SYLLABLE SSANGSIOS YE RIEULHIEUH
+ {0x9BF2, 0xC3CC}, //4794 #HANGUL SYLLABLE SSANGSIOS YE MIEUM
+ {0x9BF3, 0xC3CD}, //4795 #HANGUL SYLLABLE SSANGSIOS YE PIEUP
+ {0x9BF4, 0xC3CE}, //4796 #HANGUL SYLLABLE SSANGSIOS YE PIEUPSIOS
+ {0x9BF5, 0xC3CF}, //4797 #HANGUL SYLLABLE SSANGSIOS YE SIOS
+ {0x9BF6, 0xC3D0}, //4798 #HANGUL SYLLABLE SSANGSIOS YE SSANGSIOS
+ {0x9BF7, 0xC3D1}, //4799 #HANGUL SYLLABLE SSANGSIOS YE IEUNG
+ {0x9BF8, 0xC3D2}, //4800 #HANGUL SYLLABLE SSANGSIOS YE CIEUC
+ {0x9BF9, 0xC3D3}, //4801 #HANGUL SYLLABLE SSANGSIOS YE CHIEUCH
+ {0x9BFA, 0xC3D4}, //4802 #HANGUL SYLLABLE SSANGSIOS YE KHIEUKH
+ {0x9BFB, 0xC3D5}, //4803 #HANGUL SYLLABLE SSANGSIOS YE THIEUTH
+ {0x9BFC, 0xC3D6}, //4804 #HANGUL SYLLABLE SSANGSIOS YE PHIEUPH
+ {0x9BFD, 0xC3D7}, //4805 #HANGUL SYLLABLE SSANGSIOS YE HIEUH
+ {0x9BFE, 0xC3DA}, //4806 #HANGUL SYLLABLE SSANGSIOS O SSANGKIYEOK
+ {0x9C41, 0xC3DB}, //4807 #HANGUL SYLLABLE SSANGSIOS O KIYEOKSIOS
+ {0x9C42, 0xC3DD}, //4808 #HANGUL SYLLABLE SSANGSIOS O NIEUNCIEUC
+ {0x9C43, 0xC3DE}, //4809 #HANGUL SYLLABLE SSANGSIOS O NIEUNHIEUH
+ {0x9C44, 0xC3E1}, //4810 #HANGUL SYLLABLE SSANGSIOS O RIEULKIYEOK
+ {0x9C45, 0xC3E3}, //4811 #HANGUL SYLLABLE SSANGSIOS O RIEULPIEUP
+ {0x9C46, 0xC3E4}, //4812 #HANGUL SYLLABLE SSANGSIOS O RIEULSIOS
+ {0x9C47, 0xC3E5}, //4813 #HANGUL SYLLABLE SSANGSIOS O RIEULTHIEUTH
+ {0x9C48, 0xC3E6}, //4814 #HANGUL SYLLABLE SSANGSIOS O RIEULPHIEUPH
+ {0x9C49, 0xC3E7}, //4815 #HANGUL SYLLABLE SSANGSIOS O RIEULHIEUH
+ {0x9C4A, 0xC3EA}, //4816 #HANGUL SYLLABLE SSANGSIOS O PIEUPSIOS
+ {0x9C4B, 0xC3EB}, //4817 #HANGUL SYLLABLE SSANGSIOS O SIOS
+ {0x9C4C, 0xC3EC}, //4818 #HANGUL SYLLABLE SSANGSIOS O SSANGSIOS
+ {0x9C4D, 0xC3EE}, //4819 #HANGUL SYLLABLE SSANGSIOS O CIEUC
+ {0x9C4E, 0xC3EF}, //4820 #HANGUL SYLLABLE SSANGSIOS O CHIEUCH
+ {0x9C4F, 0xC3F0}, //4821 #HANGUL SYLLABLE SSANGSIOS O KHIEUKH
+ {0x9C50, 0xC3F1}, //4822 #HANGUL SYLLABLE SSANGSIOS O THIEUTH
+ {0x9C51, 0xC3F2}, //4823 #HANGUL SYLLABLE SSANGSIOS O PHIEUPH
+ {0x9C52, 0xC3F3}, //4824 #HANGUL SYLLABLE SSANGSIOS O HIEUH
+ {0x9C53, 0xC3F6}, //4825 #HANGUL SYLLABLE SSANGSIOS WA SSANGKIYEOK
+ {0x9C54, 0xC3F7}, //4826 #HANGUL SYLLABLE SSANGSIOS WA KIYEOKSIOS
+ {0x9C55, 0xC3F9}, //4827 #HANGUL SYLLABLE SSANGSIOS WA NIEUNCIEUC
+ {0x9C56, 0xC3FA}, //4828 #HANGUL SYLLABLE SSANGSIOS WA NIEUNHIEUH
+ {0x9C57, 0xC3FB}, //4829 #HANGUL SYLLABLE SSANGSIOS WA TIKEUT
+ {0x9C58, 0xC3FC}, //4830 #HANGUL SYLLABLE SSANGSIOS WA RIEUL
+ {0x9C59, 0xC3FD}, //4831 #HANGUL SYLLABLE SSANGSIOS WA RIEULKIYEOK
+ {0x9C5A, 0xC3FE}, //4832 #HANGUL SYLLABLE SSANGSIOS WA RIEULMIEUM
+ {0x9C61, 0xC3FF}, //4833 #HANGUL SYLLABLE SSANGSIOS WA RIEULPIEUP
+ {0x9C62, 0xC400}, //4834 #HANGUL SYLLABLE SSANGSIOS WA RIEULSIOS
+ {0x9C63, 0xC401}, //4835 #HANGUL SYLLABLE SSANGSIOS WA RIEULTHIEUTH
+ {0x9C64, 0xC402}, //4836 #HANGUL SYLLABLE SSANGSIOS WA RIEULPHIEUPH
+ {0x9C65, 0xC403}, //4837 #HANGUL SYLLABLE SSANGSIOS WA RIEULHIEUH
+ {0x9C66, 0xC404}, //4838 #HANGUL SYLLABLE SSANGSIOS WA MIEUM
+ {0x9C67, 0xC405}, //4839 #HANGUL SYLLABLE SSANGSIOS WA PIEUP
+ {0x9C68, 0xC406}, //4840 #HANGUL SYLLABLE SSANGSIOS WA PIEUPSIOS
+ {0x9C69, 0xC407}, //4841 #HANGUL SYLLABLE SSANGSIOS WA SIOS
+ {0x9C6A, 0xC409}, //4842 #HANGUL SYLLABLE SSANGSIOS WA IEUNG
+ {0x9C6B, 0xC40A}, //4843 #HANGUL SYLLABLE SSANGSIOS WA CIEUC
+ {0x9C6C, 0xC40B}, //4844 #HANGUL SYLLABLE SSANGSIOS WA CHIEUCH
+ {0x9C6D, 0xC40C}, //4845 #HANGUL SYLLABLE SSANGSIOS WA KHIEUKH
+ {0x9C6E, 0xC40D}, //4846 #HANGUL SYLLABLE SSANGSIOS WA THIEUTH
+ {0x9C6F, 0xC40E}, //4847 #HANGUL SYLLABLE SSANGSIOS WA PHIEUPH
+ {0x9C70, 0xC40F}, //4848 #HANGUL SYLLABLE SSANGSIOS WA HIEUH
+ {0x9C71, 0xC411}, //4849 #HANGUL SYLLABLE SSANGSIOS WAE KIYEOK
+ {0x9C72, 0xC412}, //4850 #HANGUL SYLLABLE SSANGSIOS WAE SSANGKIYEOK
+ {0x9C73, 0xC413}, //4851 #HANGUL SYLLABLE SSANGSIOS WAE KIYEOKSIOS
+ {0x9C74, 0xC414}, //4852 #HANGUL SYLLABLE SSANGSIOS WAE NIEUN
+ {0x9C75, 0xC415}, //4853 #HANGUL SYLLABLE SSANGSIOS WAE NIEUNCIEUC
+ {0x9C76, 0xC416}, //4854 #HANGUL SYLLABLE SSANGSIOS WAE NIEUNHIEUH
+ {0x9C77, 0xC417}, //4855 #HANGUL SYLLABLE SSANGSIOS WAE TIKEUT
+ {0x9C78, 0xC418}, //4856 #HANGUL SYLLABLE SSANGSIOS WAE RIEUL
+ {0x9C79, 0xC419}, //4857 #HANGUL SYLLABLE SSANGSIOS WAE RIEULKIYEOK
+ {0x9C7A, 0xC41A}, //4858 #HANGUL SYLLABLE SSANGSIOS WAE RIEULMIEUM
+ {0x9C81, 0xC41B}, //4859 #HANGUL SYLLABLE SSANGSIOS WAE RIEULPIEUP
+ {0x9C82, 0xC41C}, //4860 #HANGUL SYLLABLE SSANGSIOS WAE RIEULSIOS
+ {0x9C83, 0xC41D}, //4861 #HANGUL SYLLABLE SSANGSIOS WAE RIEULTHIEUTH
+ {0x9C84, 0xC41E}, //4862 #HANGUL SYLLABLE SSANGSIOS WAE RIEULPHIEUPH
+ {0x9C85, 0xC41F}, //4863 #HANGUL SYLLABLE SSANGSIOS WAE RIEULHIEUH
+ {0x9C86, 0xC420}, //4864 #HANGUL SYLLABLE SSANGSIOS WAE MIEUM
+ {0x9C87, 0xC421}, //4865 #HANGUL SYLLABLE SSANGSIOS WAE PIEUP
+ {0x9C88, 0xC422}, //4866 #HANGUL SYLLABLE SSANGSIOS WAE PIEUPSIOS
+ {0x9C89, 0xC423}, //4867 #HANGUL SYLLABLE SSANGSIOS WAE SIOS
+ {0x9C8A, 0xC425}, //4868 #HANGUL SYLLABLE SSANGSIOS WAE IEUNG
+ {0x9C8B, 0xC426}, //4869 #HANGUL SYLLABLE SSANGSIOS WAE CIEUC
+ {0x9C8C, 0xC427}, //4870 #HANGUL SYLLABLE SSANGSIOS WAE CHIEUCH
+ {0x9C8D, 0xC428}, //4871 #HANGUL SYLLABLE SSANGSIOS WAE KHIEUKH
+ {0x9C8E, 0xC429}, //4872 #HANGUL SYLLABLE SSANGSIOS WAE THIEUTH
+ {0x9C8F, 0xC42A}, //4873 #HANGUL SYLLABLE SSANGSIOS WAE PHIEUPH
+ {0x9C90, 0xC42B}, //4874 #HANGUL SYLLABLE SSANGSIOS WAE HIEUH
+ {0x9C91, 0xC42D}, //4875 #HANGUL SYLLABLE SSANGSIOS OE KIYEOK
+ {0x9C92, 0xC42E}, //4876 #HANGUL SYLLABLE SSANGSIOS OE SSANGKIYEOK
+ {0x9C93, 0xC42F}, //4877 #HANGUL SYLLABLE SSANGSIOS OE KIYEOKSIOS
+ {0x9C94, 0xC431}, //4878 #HANGUL SYLLABLE SSANGSIOS OE NIEUNCIEUC
+ {0x9C95, 0xC432}, //4879 #HANGUL SYLLABLE SSANGSIOS OE NIEUNHIEUH
+ {0x9C96, 0xC433}, //4880 #HANGUL SYLLABLE SSANGSIOS OE TIKEUT
+ {0x9C97, 0xC435}, //4881 #HANGUL SYLLABLE SSANGSIOS OE RIEULKIYEOK
+ {0x9C98, 0xC436}, //4882 #HANGUL SYLLABLE SSANGSIOS OE RIEULMIEUM
+ {0x9C99, 0xC437}, //4883 #HANGUL SYLLABLE SSANGSIOS OE RIEULPIEUP
+ {0x9C9A, 0xC438}, //4884 #HANGUL SYLLABLE SSANGSIOS OE RIEULSIOS
+ {0x9C9B, 0xC439}, //4885 #HANGUL SYLLABLE SSANGSIOS OE RIEULTHIEUTH
+ {0x9C9C, 0xC43A}, //4886 #HANGUL SYLLABLE SSANGSIOS OE RIEULPHIEUPH
+ {0x9C9D, 0xC43B}, //4887 #HANGUL SYLLABLE SSANGSIOS OE RIEULHIEUH
+ {0x9C9E, 0xC43E}, //4888 #HANGUL SYLLABLE SSANGSIOS OE PIEUPSIOS
+ {0x9C9F, 0xC43F}, //4889 #HANGUL SYLLABLE SSANGSIOS OE SIOS
+ {0x9CA0, 0xC440}, //4890 #HANGUL SYLLABLE SSANGSIOS OE SSANGSIOS
+ {0x9CA1, 0xC441}, //4891 #HANGUL SYLLABLE SSANGSIOS OE IEUNG
+ {0x9CA2, 0xC442}, //4892 #HANGUL SYLLABLE SSANGSIOS OE CIEUC
+ {0x9CA3, 0xC443}, //4893 #HANGUL SYLLABLE SSANGSIOS OE CHIEUCH
+ {0x9CA4, 0xC444}, //4894 #HANGUL SYLLABLE SSANGSIOS OE KHIEUKH
+ {0x9CA5, 0xC445}, //4895 #HANGUL SYLLABLE SSANGSIOS OE THIEUTH
+ {0x9CA6, 0xC446}, //4896 #HANGUL SYLLABLE SSANGSIOS OE PHIEUPH
+ {0x9CA7, 0xC447}, //4897 #HANGUL SYLLABLE SSANGSIOS OE HIEUH
+ {0x9CA8, 0xC449}, //4898 #HANGUL SYLLABLE SSANGSIOS YO KIYEOK
+ {0x9CA9, 0xC44A}, //4899 #HANGUL SYLLABLE SSANGSIOS YO SSANGKIYEOK
+ {0x9CAA, 0xC44B}, //4900 #HANGUL SYLLABLE SSANGSIOS YO KIYEOKSIOS
+ {0x9CAB, 0xC44C}, //4901 #HANGUL SYLLABLE SSANGSIOS YO NIEUN
+ {0x9CAC, 0xC44D}, //4902 #HANGUL SYLLABLE SSANGSIOS YO NIEUNCIEUC
+ {0x9CAD, 0xC44E}, //4903 #HANGUL SYLLABLE SSANGSIOS YO NIEUNHIEUH
+ {0x9CAE, 0xC44F}, //4904 #HANGUL SYLLABLE SSANGSIOS YO TIKEUT
+ {0x9CAF, 0xC450}, //4905 #HANGUL SYLLABLE SSANGSIOS YO RIEUL
+ {0x9CB0, 0xC451}, //4906 #HANGUL SYLLABLE SSANGSIOS YO RIEULKIYEOK
+ {0x9CB1, 0xC452}, //4907 #HANGUL SYLLABLE SSANGSIOS YO RIEULMIEUM
+ {0x9CB2, 0xC453}, //4908 #HANGUL SYLLABLE SSANGSIOS YO RIEULPIEUP
+ {0x9CB3, 0xC454}, //4909 #HANGUL SYLLABLE SSANGSIOS YO RIEULSIOS
+ {0x9CB4, 0xC455}, //4910 #HANGUL SYLLABLE SSANGSIOS YO RIEULTHIEUTH
+ {0x9CB5, 0xC456}, //4911 #HANGUL SYLLABLE SSANGSIOS YO RIEULPHIEUPH
+ {0x9CB6, 0xC457}, //4912 #HANGUL SYLLABLE SSANGSIOS YO RIEULHIEUH
+ {0x9CB7, 0xC458}, //4913 #HANGUL SYLLABLE SSANGSIOS YO MIEUM
+ {0x9CB8, 0xC459}, //4914 #HANGUL SYLLABLE SSANGSIOS YO PIEUP
+ {0x9CB9, 0xC45A}, //4915 #HANGUL SYLLABLE SSANGSIOS YO PIEUPSIOS
+ {0x9CBA, 0xC45B}, //4916 #HANGUL SYLLABLE SSANGSIOS YO SIOS
+ {0x9CBB, 0xC45C}, //4917 #HANGUL SYLLABLE SSANGSIOS YO SSANGSIOS
+ {0x9CBC, 0xC45D}, //4918 #HANGUL SYLLABLE SSANGSIOS YO IEUNG
+ {0x9CBD, 0xC45E}, //4919 #HANGUL SYLLABLE SSANGSIOS YO CIEUC
+ {0x9CBE, 0xC45F}, //4920 #HANGUL SYLLABLE SSANGSIOS YO CHIEUCH
+ {0x9CBF, 0xC460}, //4921 #HANGUL SYLLABLE SSANGSIOS YO KHIEUKH
+ {0x9CC0, 0xC461}, //4922 #HANGUL SYLLABLE SSANGSIOS YO THIEUTH
+ {0x9CC1, 0xC462}, //4923 #HANGUL SYLLABLE SSANGSIOS YO PHIEUPH
+ {0x9CC2, 0xC463}, //4924 #HANGUL SYLLABLE SSANGSIOS YO HIEUH
+ {0x9CC3, 0xC466}, //4925 #HANGUL SYLLABLE SSANGSIOS U SSANGKIYEOK
+ {0x9CC4, 0xC467}, //4926 #HANGUL SYLLABLE SSANGSIOS U KIYEOKSIOS
+ {0x9CC5, 0xC469}, //4927 #HANGUL SYLLABLE SSANGSIOS U NIEUNCIEUC
+ {0x9CC6, 0xC46A}, //4928 #HANGUL SYLLABLE SSANGSIOS U NIEUNHIEUH
+ {0x9CC7, 0xC46B}, //4929 #HANGUL SYLLABLE SSANGSIOS U TIKEUT
+ {0x9CC8, 0xC46D}, //4930 #HANGUL SYLLABLE SSANGSIOS U RIEULKIYEOK
+ {0x9CC9, 0xC46E}, //4931 #HANGUL SYLLABLE SSANGSIOS U RIEULMIEUM
+ {0x9CCA, 0xC46F}, //4932 #HANGUL SYLLABLE SSANGSIOS U RIEULPIEUP
+ {0x9CCB, 0xC470}, //4933 #HANGUL SYLLABLE SSANGSIOS U RIEULSIOS
+ {0x9CCC, 0xC471}, //4934 #HANGUL SYLLABLE SSANGSIOS U RIEULTHIEUTH
+ {0x9CCD, 0xC472}, //4935 #HANGUL SYLLABLE SSANGSIOS U RIEULPHIEUPH
+ {0x9CCE, 0xC473}, //4936 #HANGUL SYLLABLE SSANGSIOS U RIEULHIEUH
+ {0x9CCF, 0xC476}, //4937 #HANGUL SYLLABLE SSANGSIOS U PIEUPSIOS
+ {0x9CD0, 0xC477}, //4938 #HANGUL SYLLABLE SSANGSIOS U SIOS
+ {0x9CD1, 0xC478}, //4939 #HANGUL SYLLABLE SSANGSIOS U SSANGSIOS
+ {0x9CD2, 0xC47A}, //4940 #HANGUL SYLLABLE SSANGSIOS U CIEUC
+ {0x9CD3, 0xC47B}, //4941 #HANGUL SYLLABLE SSANGSIOS U CHIEUCH
+ {0x9CD4, 0xC47C}, //4942 #HANGUL SYLLABLE SSANGSIOS U KHIEUKH
+ {0x9CD5, 0xC47D}, //4943 #HANGUL SYLLABLE SSANGSIOS U THIEUTH
+ {0x9CD6, 0xC47E}, //4944 #HANGUL SYLLABLE SSANGSIOS U PHIEUPH
+ {0x9CD7, 0xC47F}, //4945 #HANGUL SYLLABLE SSANGSIOS U HIEUH
+ {0x9CD8, 0xC481}, //4946 #HANGUL SYLLABLE SSANGSIOS WEO KIYEOK
+ {0x9CD9, 0xC482}, //4947 #HANGUL SYLLABLE SSANGSIOS WEO SSANGKIYEOK
+ {0x9CDA, 0xC483}, //4948 #HANGUL SYLLABLE SSANGSIOS WEO KIYEOKSIOS
+ {0x9CDB, 0xC484}, //4949 #HANGUL SYLLABLE SSANGSIOS WEO NIEUN
+ {0x9CDC, 0xC485}, //4950 #HANGUL SYLLABLE SSANGSIOS WEO NIEUNCIEUC
+ {0x9CDD, 0xC486}, //4951 #HANGUL SYLLABLE SSANGSIOS WEO NIEUNHIEUH
+ {0x9CDE, 0xC487}, //4952 #HANGUL SYLLABLE SSANGSIOS WEO TIKEUT
+ {0x9CDF, 0xC488}, //4953 #HANGUL SYLLABLE SSANGSIOS WEO RIEUL
+ {0x9CE0, 0xC489}, //4954 #HANGUL SYLLABLE SSANGSIOS WEO RIEULKIYEOK
+ {0x9CE1, 0xC48A}, //4955 #HANGUL SYLLABLE SSANGSIOS WEO RIEULMIEUM
+ {0x9CE2, 0xC48B}, //4956 #HANGUL SYLLABLE SSANGSIOS WEO RIEULPIEUP
+ {0x9CE3, 0xC48C}, //4957 #HANGUL SYLLABLE SSANGSIOS WEO RIEULSIOS
+ {0x9CE4, 0xC48D}, //4958 #HANGUL SYLLABLE SSANGSIOS WEO RIEULTHIEUTH
+ {0x9CE5, 0xC48E}, //4959 #HANGUL SYLLABLE SSANGSIOS WEO RIEULPHIEUPH
+ {0x9CE6, 0xC48F}, //4960 #HANGUL SYLLABLE SSANGSIOS WEO RIEULHIEUH
+ {0x9CE7, 0xC490}, //4961 #HANGUL SYLLABLE SSANGSIOS WEO MIEUM
+ {0x9CE8, 0xC491}, //4962 #HANGUL SYLLABLE SSANGSIOS WEO PIEUP
+ {0x9CE9, 0xC492}, //4963 #HANGUL SYLLABLE SSANGSIOS WEO PIEUPSIOS
+ {0x9CEA, 0xC493}, //4964 #HANGUL SYLLABLE SSANGSIOS WEO SIOS
+ {0x9CEB, 0xC495}, //4965 #HANGUL SYLLABLE SSANGSIOS WEO IEUNG
+ {0x9CEC, 0xC496}, //4966 #HANGUL SYLLABLE SSANGSIOS WEO CIEUC
+ {0x9CED, 0xC497}, //4967 #HANGUL SYLLABLE SSANGSIOS WEO CHIEUCH
+ {0x9CEE, 0xC498}, //4968 #HANGUL SYLLABLE SSANGSIOS WEO KHIEUKH
+ {0x9CEF, 0xC499}, //4969 #HANGUL SYLLABLE SSANGSIOS WEO THIEUTH
+ {0x9CF0, 0xC49A}, //4970 #HANGUL SYLLABLE SSANGSIOS WEO PHIEUPH
+ {0x9CF1, 0xC49B}, //4971 #HANGUL SYLLABLE SSANGSIOS WEO HIEUH
+ {0x9CF2, 0xC49D}, //4972 #HANGUL SYLLABLE SSANGSIOS WE KIYEOK
+ {0x9CF3, 0xC49E}, //4973 #HANGUL SYLLABLE SSANGSIOS WE SSANGKIYEOK
+ {0x9CF4, 0xC49F}, //4974 #HANGUL SYLLABLE SSANGSIOS WE KIYEOKSIOS
+ {0x9CF5, 0xC4A0}, //4975 #HANGUL SYLLABLE SSANGSIOS WE NIEUN
+ {0x9CF6, 0xC4A1}, //4976 #HANGUL SYLLABLE SSANGSIOS WE NIEUNCIEUC
+ {0x9CF7, 0xC4A2}, //4977 #HANGUL SYLLABLE SSANGSIOS WE NIEUNHIEUH
+ {0x9CF8, 0xC4A3}, //4978 #HANGUL SYLLABLE SSANGSIOS WE TIKEUT
+ {0x9CF9, 0xC4A4}, //4979 #HANGUL SYLLABLE SSANGSIOS WE RIEUL
+ {0x9CFA, 0xC4A5}, //4980 #HANGUL SYLLABLE SSANGSIOS WE RIEULKIYEOK
+ {0x9CFB, 0xC4A6}, //4981 #HANGUL SYLLABLE SSANGSIOS WE RIEULMIEUM
+ {0x9CFC, 0xC4A7}, //4982 #HANGUL SYLLABLE SSANGSIOS WE RIEULPIEUP
+ {0x9CFD, 0xC4A8}, //4983 #HANGUL SYLLABLE SSANGSIOS WE RIEULSIOS
+ {0x9CFE, 0xC4A9}, //4984 #HANGUL SYLLABLE SSANGSIOS WE RIEULTHIEUTH
+ {0x9D41, 0xC4AA}, //4985 #HANGUL SYLLABLE SSANGSIOS WE RIEULPHIEUPH
+ {0x9D42, 0xC4AB}, //4986 #HANGUL SYLLABLE SSANGSIOS WE RIEULHIEUH
+ {0x9D43, 0xC4AC}, //4987 #HANGUL SYLLABLE SSANGSIOS WE MIEUM
+ {0x9D44, 0xC4AD}, //4988 #HANGUL SYLLABLE SSANGSIOS WE PIEUP
+ {0x9D45, 0xC4AE}, //4989 #HANGUL SYLLABLE SSANGSIOS WE PIEUPSIOS
+ {0x9D46, 0xC4AF}, //4990 #HANGUL SYLLABLE SSANGSIOS WE SIOS
+ {0x9D47, 0xC4B0}, //4991 #HANGUL SYLLABLE SSANGSIOS WE SSANGSIOS
+ {0x9D48, 0xC4B1}, //4992 #HANGUL SYLLABLE SSANGSIOS WE IEUNG
+ {0x9D49, 0xC4B2}, //4993 #HANGUL SYLLABLE SSANGSIOS WE CIEUC
+ {0x9D4A, 0xC4B3}, //4994 #HANGUL SYLLABLE SSANGSIOS WE CHIEUCH
+ {0x9D4B, 0xC4B4}, //4995 #HANGUL SYLLABLE SSANGSIOS WE KHIEUKH
+ {0x9D4C, 0xC4B5}, //4996 #HANGUL SYLLABLE SSANGSIOS WE THIEUTH
+ {0x9D4D, 0xC4B6}, //4997 #HANGUL SYLLABLE SSANGSIOS WE PHIEUPH
+ {0x9D4E, 0xC4B7}, //4998 #HANGUL SYLLABLE SSANGSIOS WE HIEUH
+ {0x9D4F, 0xC4B9}, //4999 #HANGUL SYLLABLE SSANGSIOS WI KIYEOK
+ {0x9D50, 0xC4BA}, //5000 #HANGUL SYLLABLE SSANGSIOS WI SSANGKIYEOK
+ {0x9D51, 0xC4BB}, //5001 #HANGUL SYLLABLE SSANGSIOS WI KIYEOKSIOS
+ {0x9D52, 0xC4BD}, //5002 #HANGUL SYLLABLE SSANGSIOS WI NIEUNCIEUC
+ {0x9D53, 0xC4BE}, //5003 #HANGUL SYLLABLE SSANGSIOS WI NIEUNHIEUH
+ {0x9D54, 0xC4BF}, //5004 #HANGUL SYLLABLE SSANGSIOS WI TIKEUT
+ {0x9D55, 0xC4C0}, //5005 #HANGUL SYLLABLE SSANGSIOS WI RIEUL
+ {0x9D56, 0xC4C1}, //5006 #HANGUL SYLLABLE SSANGSIOS WI RIEULKIYEOK
+ {0x9D57, 0xC4C2}, //5007 #HANGUL SYLLABLE SSANGSIOS WI RIEULMIEUM
+ {0x9D58, 0xC4C3}, //5008 #HANGUL SYLLABLE SSANGSIOS WI RIEULPIEUP
+ {0x9D59, 0xC4C4}, //5009 #HANGUL SYLLABLE SSANGSIOS WI RIEULSIOS
+ {0x9D5A, 0xC4C5}, //5010 #HANGUL SYLLABLE SSANGSIOS WI RIEULTHIEUTH
+ {0x9D61, 0xC4C6}, //5011 #HANGUL SYLLABLE SSANGSIOS WI RIEULPHIEUPH
+ {0x9D62, 0xC4C7}, //5012 #HANGUL SYLLABLE SSANGSIOS WI RIEULHIEUH
+ {0x9D63, 0xC4C8}, //5013 #HANGUL SYLLABLE SSANGSIOS WI MIEUM
+ {0x9D64, 0xC4C9}, //5014 #HANGUL SYLLABLE SSANGSIOS WI PIEUP
+ {0x9D65, 0xC4CA}, //5015 #HANGUL SYLLABLE SSANGSIOS WI PIEUPSIOS
+ {0x9D66, 0xC4CB}, //5016 #HANGUL SYLLABLE SSANGSIOS WI SIOS
+ {0x9D67, 0xC4CC}, //5017 #HANGUL SYLLABLE SSANGSIOS WI SSANGSIOS
+ {0x9D68, 0xC4CD}, //5018 #HANGUL SYLLABLE SSANGSIOS WI IEUNG
+ {0x9D69, 0xC4CE}, //5019 #HANGUL SYLLABLE SSANGSIOS WI CIEUC
+ {0x9D6A, 0xC4CF}, //5020 #HANGUL SYLLABLE SSANGSIOS WI CHIEUCH
+ {0x9D6B, 0xC4D0}, //5021 #HANGUL SYLLABLE SSANGSIOS WI KHIEUKH
+ {0x9D6C, 0xC4D1}, //5022 #HANGUL SYLLABLE SSANGSIOS WI THIEUTH
+ {0x9D6D, 0xC4D2}, //5023 #HANGUL SYLLABLE SSANGSIOS WI PHIEUPH
+ {0x9D6E, 0xC4D3}, //5024 #HANGUL SYLLABLE SSANGSIOS WI HIEUH
+ {0x9D6F, 0xC4D4}, //5025 #HANGUL SYLLABLE SSANGSIOS YU
+ {0x9D70, 0xC4D5}, //5026 #HANGUL SYLLABLE SSANGSIOS YU KIYEOK
+ {0x9D71, 0xC4D6}, //5027 #HANGUL SYLLABLE SSANGSIOS YU SSANGKIYEOK
+ {0x9D72, 0xC4D7}, //5028 #HANGUL SYLLABLE SSANGSIOS YU KIYEOKSIOS
+ {0x9D73, 0xC4D8}, //5029 #HANGUL SYLLABLE SSANGSIOS YU NIEUN
+ {0x9D74, 0xC4D9}, //5030 #HANGUL SYLLABLE SSANGSIOS YU NIEUNCIEUC
+ {0x9D75, 0xC4DA}, //5031 #HANGUL SYLLABLE SSANGSIOS YU NIEUNHIEUH
+ {0x9D76, 0xC4DB}, //5032 #HANGUL SYLLABLE SSANGSIOS YU TIKEUT
+ {0x9D77, 0xC4DC}, //5033 #HANGUL SYLLABLE SSANGSIOS YU RIEUL
+ {0x9D78, 0xC4DD}, //5034 #HANGUL SYLLABLE SSANGSIOS YU RIEULKIYEOK
+ {0x9D79, 0xC4DE}, //5035 #HANGUL SYLLABLE SSANGSIOS YU RIEULMIEUM
+ {0x9D7A, 0xC4DF}, //5036 #HANGUL SYLLABLE SSANGSIOS YU RIEULPIEUP
+ {0x9D81, 0xC4E0}, //5037 #HANGUL SYLLABLE SSANGSIOS YU RIEULSIOS
+ {0x9D82, 0xC4E1}, //5038 #HANGUL SYLLABLE SSANGSIOS YU RIEULTHIEUTH
+ {0x9D83, 0xC4E2}, //5039 #HANGUL SYLLABLE SSANGSIOS YU RIEULPHIEUPH
+ {0x9D84, 0xC4E3}, //5040 #HANGUL SYLLABLE SSANGSIOS YU RIEULHIEUH
+ {0x9D85, 0xC4E4}, //5041 #HANGUL SYLLABLE SSANGSIOS YU MIEUM
+ {0x9D86, 0xC4E5}, //5042 #HANGUL SYLLABLE SSANGSIOS YU PIEUP
+ {0x9D87, 0xC4E6}, //5043 #HANGUL SYLLABLE SSANGSIOS YU PIEUPSIOS
+ {0x9D88, 0xC4E7}, //5044 #HANGUL SYLLABLE SSANGSIOS YU SIOS
+ {0x9D89, 0xC4E8}, //5045 #HANGUL SYLLABLE SSANGSIOS YU SSANGSIOS
+ {0x9D8A, 0xC4EA}, //5046 #HANGUL SYLLABLE SSANGSIOS YU CIEUC
+ {0x9D8B, 0xC4EB}, //5047 #HANGUL SYLLABLE SSANGSIOS YU CHIEUCH
+ {0x9D8C, 0xC4EC}, //5048 #HANGUL SYLLABLE SSANGSIOS YU KHIEUKH
+ {0x9D8D, 0xC4ED}, //5049 #HANGUL SYLLABLE SSANGSIOS YU THIEUTH
+ {0x9D8E, 0xC4EE}, //5050 #HANGUL SYLLABLE SSANGSIOS YU PHIEUPH
+ {0x9D8F, 0xC4EF}, //5051 #HANGUL SYLLABLE SSANGSIOS YU HIEUH
+ {0x9D90, 0xC4F2}, //5052 #HANGUL SYLLABLE SSANGSIOS EU SSANGKIYEOK
+ {0x9D91, 0xC4F3}, //5053 #HANGUL SYLLABLE SSANGSIOS EU KIYEOKSIOS
+ {0x9D92, 0xC4F5}, //5054 #HANGUL SYLLABLE SSANGSIOS EU NIEUNCIEUC
+ {0x9D93, 0xC4F6}, //5055 #HANGUL SYLLABLE SSANGSIOS EU NIEUNHIEUH
+ {0x9D94, 0xC4F7}, //5056 #HANGUL SYLLABLE SSANGSIOS EU TIKEUT
+ {0x9D95, 0xC4F9}, //5057 #HANGUL SYLLABLE SSANGSIOS EU RIEULKIYEOK
+ {0x9D96, 0xC4FB}, //5058 #HANGUL SYLLABLE SSANGSIOS EU RIEULPIEUP
+ {0x9D97, 0xC4FC}, //5059 #HANGUL SYLLABLE SSANGSIOS EU RIEULSIOS
+ {0x9D98, 0xC4FD}, //5060 #HANGUL SYLLABLE SSANGSIOS EU RIEULTHIEUTH
+ {0x9D99, 0xC4FE}, //5061 #HANGUL SYLLABLE SSANGSIOS EU RIEULPHIEUPH
+ {0x9D9A, 0xC502}, //5062 #HANGUL SYLLABLE SSANGSIOS EU PIEUPSIOS
+ {0x9D9B, 0xC503}, //5063 #HANGUL SYLLABLE SSANGSIOS EU SIOS
+ {0x9D9C, 0xC504}, //5064 #HANGUL SYLLABLE SSANGSIOS EU SSANGSIOS
+ {0x9D9D, 0xC505}, //5065 #HANGUL SYLLABLE SSANGSIOS EU IEUNG
+ {0x9D9E, 0xC506}, //5066 #HANGUL SYLLABLE SSANGSIOS EU CIEUC
+ {0x9D9F, 0xC507}, //5067 #HANGUL SYLLABLE SSANGSIOS EU CHIEUCH
+ {0x9DA0, 0xC508}, //5068 #HANGUL SYLLABLE SSANGSIOS EU KHIEUKH
+ {0x9DA1, 0xC509}, //5069 #HANGUL SYLLABLE SSANGSIOS EU THIEUTH
+ {0x9DA2, 0xC50A}, //5070 #HANGUL SYLLABLE SSANGSIOS EU PHIEUPH
+ {0x9DA3, 0xC50B}, //5071 #HANGUL SYLLABLE SSANGSIOS EU HIEUH
+ {0x9DA4, 0xC50D}, //5072 #HANGUL SYLLABLE SSANGSIOS YI KIYEOK
+ {0x9DA5, 0xC50E}, //5073 #HANGUL SYLLABLE SSANGSIOS YI SSANGKIYEOK
+ {0x9DA6, 0xC50F}, //5074 #HANGUL SYLLABLE SSANGSIOS YI KIYEOKSIOS
+ {0x9DA7, 0xC511}, //5075 #HANGUL SYLLABLE SSANGSIOS YI NIEUNCIEUC
+ {0x9DA8, 0xC512}, //5076 #HANGUL SYLLABLE SSANGSIOS YI NIEUNHIEUH
+ {0x9DA9, 0xC513}, //5077 #HANGUL SYLLABLE SSANGSIOS YI TIKEUT
+ {0x9DAA, 0xC515}, //5078 #HANGUL SYLLABLE SSANGSIOS YI RIEULKIYEOK
+ {0x9DAB, 0xC516}, //5079 #HANGUL SYLLABLE SSANGSIOS YI RIEULMIEUM
+ {0x9DAC, 0xC517}, //5080 #HANGUL SYLLABLE SSANGSIOS YI RIEULPIEUP
+ {0x9DAD, 0xC518}, //5081 #HANGUL SYLLABLE SSANGSIOS YI RIEULSIOS
+ {0x9DAE, 0xC519}, //5082 #HANGUL SYLLABLE SSANGSIOS YI RIEULTHIEUTH
+ {0x9DAF, 0xC51A}, //5083 #HANGUL SYLLABLE SSANGSIOS YI RIEULPHIEUPH
+ {0x9DB0, 0xC51B}, //5084 #HANGUL SYLLABLE SSANGSIOS YI RIEULHIEUH
+ {0x9DB1, 0xC51D}, //5085 #HANGUL SYLLABLE SSANGSIOS YI PIEUP
+ {0x9DB2, 0xC51E}, //5086 #HANGUL SYLLABLE SSANGSIOS YI PIEUPSIOS
+ {0x9DB3, 0xC51F}, //5087 #HANGUL SYLLABLE SSANGSIOS YI SIOS
+ {0x9DB4, 0xC520}, //5088 #HANGUL SYLLABLE SSANGSIOS YI SSANGSIOS
+ {0x9DB5, 0xC521}, //5089 #HANGUL SYLLABLE SSANGSIOS YI IEUNG
+ {0x9DB6, 0xC522}, //5090 #HANGUL SYLLABLE SSANGSIOS YI CIEUC
+ {0x9DB7, 0xC523}, //5091 #HANGUL SYLLABLE SSANGSIOS YI CHIEUCH
+ {0x9DB8, 0xC524}, //5092 #HANGUL SYLLABLE SSANGSIOS YI KHIEUKH
+ {0x9DB9, 0xC525}, //5093 #HANGUL SYLLABLE SSANGSIOS YI THIEUTH
+ {0x9DBA, 0xC526}, //5094 #HANGUL SYLLABLE SSANGSIOS YI PHIEUPH
+ {0x9DBB, 0xC527}, //5095 #HANGUL SYLLABLE SSANGSIOS YI HIEUH
+ {0x9DBC, 0xC52A}, //5096 #HANGUL SYLLABLE SSANGSIOS I SSANGKIYEOK
+ {0x9DBD, 0xC52B}, //5097 #HANGUL SYLLABLE SSANGSIOS I KIYEOKSIOS
+ {0x9DBE, 0xC52D}, //5098 #HANGUL SYLLABLE SSANGSIOS I NIEUNCIEUC
+ {0x9DBF, 0xC52E}, //5099 #HANGUL SYLLABLE SSANGSIOS I NIEUNHIEUH
+ {0x9DC0, 0xC52F}, //5100 #HANGUL SYLLABLE SSANGSIOS I TIKEUT
+ {0x9DC1, 0xC531}, //5101 #HANGUL SYLLABLE SSANGSIOS I RIEULKIYEOK
+ {0x9DC2, 0xC532}, //5102 #HANGUL SYLLABLE SSANGSIOS I RIEULMIEUM
+ {0x9DC3, 0xC533}, //5103 #HANGUL SYLLABLE SSANGSIOS I RIEULPIEUP
+ {0x9DC4, 0xC534}, //5104 #HANGUL SYLLABLE SSANGSIOS I RIEULSIOS
+ {0x9DC5, 0xC535}, //5105 #HANGUL SYLLABLE SSANGSIOS I RIEULTHIEUTH
+ {0x9DC6, 0xC536}, //5106 #HANGUL SYLLABLE SSANGSIOS I RIEULPHIEUPH
+ {0x9DC7, 0xC537}, //5107 #HANGUL SYLLABLE SSANGSIOS I RIEULHIEUH
+ {0x9DC8, 0xC53A}, //5108 #HANGUL SYLLABLE SSANGSIOS I PIEUPSIOS
+ {0x9DC9, 0xC53C}, //5109 #HANGUL SYLLABLE SSANGSIOS I SSANGSIOS
+ {0x9DCA, 0xC53E}, //5110 #HANGUL SYLLABLE SSANGSIOS I CIEUC
+ {0x9DCB, 0xC53F}, //5111 #HANGUL SYLLABLE SSANGSIOS I CHIEUCH
+ {0x9DCC, 0xC540}, //5112 #HANGUL SYLLABLE SSANGSIOS I KHIEUKH
+ {0x9DCD, 0xC541}, //5113 #HANGUL SYLLABLE SSANGSIOS I THIEUTH
+ {0x9DCE, 0xC542}, //5114 #HANGUL SYLLABLE SSANGSIOS I PHIEUPH
+ {0x9DCF, 0xC543}, //5115 #HANGUL SYLLABLE SSANGSIOS I HIEUH
+ {0x9DD0, 0xC546}, //5116 #HANGUL SYLLABLE IEUNG A SSANGKIYEOK
+ {0x9DD1, 0xC547}, //5117 #HANGUL SYLLABLE IEUNG A KIYEOKSIOS
+ {0x9DD2, 0xC54B}, //5118 #HANGUL SYLLABLE IEUNG A TIKEUT
+ {0x9DD3, 0xC54F}, //5119 #HANGUL SYLLABLE IEUNG A RIEULPIEUP
+ {0x9DD4, 0xC550}, //5120 #HANGUL SYLLABLE IEUNG A RIEULSIOS
+ {0x9DD5, 0xC551}, //5121 #HANGUL SYLLABLE IEUNG A RIEULTHIEUTH
+ {0x9DD6, 0xC552}, //5122 #HANGUL SYLLABLE IEUNG A RIEULPHIEUPH
+ {0x9DD7, 0xC556}, //5123 #HANGUL SYLLABLE IEUNG A PIEUPSIOS
+ {0x9DD8, 0xC55A}, //5124 #HANGUL SYLLABLE IEUNG A CIEUC
+ {0x9DD9, 0xC55B}, //5125 #HANGUL SYLLABLE IEUNG A CHIEUCH
+ {0x9DDA, 0xC55C}, //5126 #HANGUL SYLLABLE IEUNG A KHIEUKH
+ {0x9DDB, 0xC55F}, //5127 #HANGUL SYLLABLE IEUNG A HIEUH
+ {0x9DDC, 0xC562}, //5128 #HANGUL SYLLABLE IEUNG AE SSANGKIYEOK
+ {0x9DDD, 0xC563}, //5129 #HANGUL SYLLABLE IEUNG AE KIYEOKSIOS
+ {0x9DDE, 0xC565}, //5130 #HANGUL SYLLABLE IEUNG AE NIEUNCIEUC
+ {0x9DDF, 0xC566}, //5131 #HANGUL SYLLABLE IEUNG AE NIEUNHIEUH
+ {0x9DE0, 0xC567}, //5132 #HANGUL SYLLABLE IEUNG AE TIKEUT
+ {0x9DE1, 0xC569}, //5133 #HANGUL SYLLABLE IEUNG AE RIEULKIYEOK
+ {0x9DE2, 0xC56A}, //5134 #HANGUL SYLLABLE IEUNG AE RIEULMIEUM
+ {0x9DE3, 0xC56B}, //5135 #HANGUL SYLLABLE IEUNG AE RIEULPIEUP
+ {0x9DE4, 0xC56C}, //5136 #HANGUL SYLLABLE IEUNG AE RIEULSIOS
+ {0x9DE5, 0xC56D}, //5137 #HANGUL SYLLABLE IEUNG AE RIEULTHIEUTH
+ {0x9DE6, 0xC56E}, //5138 #HANGUL SYLLABLE IEUNG AE RIEULPHIEUPH
+ {0x9DE7, 0xC56F}, //5139 #HANGUL SYLLABLE IEUNG AE RIEULHIEUH
+ {0x9DE8, 0xC572}, //5140 #HANGUL SYLLABLE IEUNG AE PIEUPSIOS
+ {0x9DE9, 0xC576}, //5141 #HANGUL SYLLABLE IEUNG AE CIEUC
+ {0x9DEA, 0xC577}, //5142 #HANGUL SYLLABLE IEUNG AE CHIEUCH
+ {0x9DEB, 0xC578}, //5143 #HANGUL SYLLABLE IEUNG AE KHIEUKH
+ {0x9DEC, 0xC579}, //5144 #HANGUL SYLLABLE IEUNG AE THIEUTH
+ {0x9DED, 0xC57A}, //5145 #HANGUL SYLLABLE IEUNG AE PHIEUPH
+ {0x9DEE, 0xC57B}, //5146 #HANGUL SYLLABLE IEUNG AE HIEUH
+ {0x9DEF, 0xC57E}, //5147 #HANGUL SYLLABLE IEUNG YA SSANGKIYEOK
+ {0x9DF0, 0xC57F}, //5148 #HANGUL SYLLABLE IEUNG YA KIYEOKSIOS
+ {0x9DF1, 0xC581}, //5149 #HANGUL SYLLABLE IEUNG YA NIEUNCIEUC
+ {0x9DF2, 0xC582}, //5150 #HANGUL SYLLABLE IEUNG YA NIEUNHIEUH
+ {0x9DF3, 0xC583}, //5151 #HANGUL SYLLABLE IEUNG YA TIKEUT
+ {0x9DF4, 0xC585}, //5152 #HANGUL SYLLABLE IEUNG YA RIEULKIYEOK
+ {0x9DF5, 0xC586}, //5153 #HANGUL SYLLABLE IEUNG YA RIEULMIEUM
+ {0x9DF6, 0xC588}, //5154 #HANGUL SYLLABLE IEUNG YA RIEULSIOS
+ {0x9DF7, 0xC589}, //5155 #HANGUL SYLLABLE IEUNG YA RIEULTHIEUTH
+ {0x9DF8, 0xC58A}, //5156 #HANGUL SYLLABLE IEUNG YA RIEULPHIEUPH
+ {0x9DF9, 0xC58B}, //5157 #HANGUL SYLLABLE IEUNG YA RIEULHIEUH
+ {0x9DFA, 0xC58E}, //5158 #HANGUL SYLLABLE IEUNG YA PIEUPSIOS
+ {0x9DFB, 0xC590}, //5159 #HANGUL SYLLABLE IEUNG YA SSANGSIOS
+ {0x9DFC, 0xC592}, //5160 #HANGUL SYLLABLE IEUNG YA CIEUC
+ {0x9DFD, 0xC593}, //5161 #HANGUL SYLLABLE IEUNG YA CHIEUCH
+ {0x9DFE, 0xC594}, //5162 #HANGUL SYLLABLE IEUNG YA KHIEUKH
+ {0x9E41, 0xC596}, //5163 #HANGUL SYLLABLE IEUNG YA PHIEUPH
+ {0x9E42, 0xC599}, //5164 #HANGUL SYLLABLE IEUNG YAE KIYEOK
+ {0x9E43, 0xC59A}, //5165 #HANGUL SYLLABLE IEUNG YAE SSANGKIYEOK
+ {0x9E44, 0xC59B}, //5166 #HANGUL SYLLABLE IEUNG YAE KIYEOKSIOS
+ {0x9E45, 0xC59D}, //5167 #HANGUL SYLLABLE IEUNG YAE NIEUNCIEUC
+ {0x9E46, 0xC59E}, //5168 #HANGUL SYLLABLE IEUNG YAE NIEUNHIEUH
+ {0x9E47, 0xC59F}, //5169 #HANGUL SYLLABLE IEUNG YAE TIKEUT
+ {0x9E48, 0xC5A1}, //5170 #HANGUL SYLLABLE IEUNG YAE RIEULKIYEOK
+ {0x9E49, 0xC5A2}, //5171 #HANGUL SYLLABLE IEUNG YAE RIEULMIEUM
+ {0x9E4A, 0xC5A3}, //5172 #HANGUL SYLLABLE IEUNG YAE RIEULPIEUP
+ {0x9E4B, 0xC5A4}, //5173 #HANGUL SYLLABLE IEUNG YAE RIEULSIOS
+ {0x9E4C, 0xC5A5}, //5174 #HANGUL SYLLABLE IEUNG YAE RIEULTHIEUTH
+ {0x9E4D, 0xC5A6}, //5175 #HANGUL SYLLABLE IEUNG YAE RIEULPHIEUPH
+ {0x9E4E, 0xC5A7}, //5176 #HANGUL SYLLABLE IEUNG YAE RIEULHIEUH
+ {0x9E4F, 0xC5A8}, //5177 #HANGUL SYLLABLE IEUNG YAE MIEUM
+ {0x9E50, 0xC5AA}, //5178 #HANGUL SYLLABLE IEUNG YAE PIEUPSIOS
+ {0x9E51, 0xC5AB}, //5179 #HANGUL SYLLABLE IEUNG YAE SIOS
+ {0x9E52, 0xC5AC}, //5180 #HANGUL SYLLABLE IEUNG YAE SSANGSIOS
+ {0x9E53, 0xC5AD}, //5181 #HANGUL SYLLABLE IEUNG YAE IEUNG
+ {0x9E54, 0xC5AE}, //5182 #HANGUL SYLLABLE IEUNG YAE CIEUC
+ {0x9E55, 0xC5AF}, //5183 #HANGUL SYLLABLE IEUNG YAE CHIEUCH
+ {0x9E56, 0xC5B0}, //5184 #HANGUL SYLLABLE IEUNG YAE KHIEUKH
+ {0x9E57, 0xC5B1}, //5185 #HANGUL SYLLABLE IEUNG YAE THIEUTH
+ {0x9E58, 0xC5B2}, //5186 #HANGUL SYLLABLE IEUNG YAE PHIEUPH
+ {0x9E59, 0xC5B3}, //5187 #HANGUL SYLLABLE IEUNG YAE HIEUH
+ {0x9E5A, 0xC5B6}, //5188 #HANGUL SYLLABLE IEUNG EO SSANGKIYEOK
+ {0x9E61, 0xC5B7}, //5189 #HANGUL SYLLABLE IEUNG EO KIYEOKSIOS
+ {0x9E62, 0xC5BA}, //5190 #HANGUL SYLLABLE IEUNG EO NIEUNHIEUH
+ {0x9E63, 0xC5BF}, //5191 #HANGUL SYLLABLE IEUNG EO RIEULPIEUP
+ {0x9E64, 0xC5C0}, //5192 #HANGUL SYLLABLE IEUNG EO RIEULSIOS
+ {0x9E65, 0xC5C1}, //5193 #HANGUL SYLLABLE IEUNG EO RIEULTHIEUTH
+ {0x9E66, 0xC5C2}, //5194 #HANGUL SYLLABLE IEUNG EO RIEULPHIEUPH
+ {0x9E67, 0xC5C3}, //5195 #HANGUL SYLLABLE IEUNG EO RIEULHIEUH
+ {0x9E68, 0xC5CB}, //5196 #HANGUL SYLLABLE IEUNG EO CHIEUCH
+ {0x9E69, 0xC5CD}, //5197 #HANGUL SYLLABLE IEUNG EO THIEUTH
+ {0x9E6A, 0xC5CF}, //5198 #HANGUL SYLLABLE IEUNG EO HIEUH
+ {0x9E6B, 0xC5D2}, //5199 #HANGUL SYLLABLE IEUNG E SSANGKIYEOK
+ {0x9E6C, 0xC5D3}, //5200 #HANGUL SYLLABLE IEUNG E KIYEOKSIOS
+ {0x9E6D, 0xC5D5}, //5201 #HANGUL SYLLABLE IEUNG E NIEUNCIEUC
+ {0x9E6E, 0xC5D6}, //5202 #HANGUL SYLLABLE IEUNG E NIEUNHIEUH
+ {0x9E6F, 0xC5D7}, //5203 #HANGUL SYLLABLE IEUNG E TIKEUT
+ {0x9E70, 0xC5D9}, //5204 #HANGUL SYLLABLE IEUNG E RIEULKIYEOK
+ {0x9E71, 0xC5DA}, //5205 #HANGUL SYLLABLE IEUNG E RIEULMIEUM
+ {0x9E72, 0xC5DB}, //5206 #HANGUL SYLLABLE IEUNG E RIEULPIEUP
+ {0x9E73, 0xC5DC}, //5207 #HANGUL SYLLABLE IEUNG E RIEULSIOS
+ {0x9E74, 0xC5DD}, //5208 #HANGUL SYLLABLE IEUNG E RIEULTHIEUTH
+ {0x9E75, 0xC5DE}, //5209 #HANGUL SYLLABLE IEUNG E RIEULPHIEUPH
+ {0x9E76, 0xC5DF}, //5210 #HANGUL SYLLABLE IEUNG E RIEULHIEUH
+ {0x9E77, 0xC5E2}, //5211 #HANGUL SYLLABLE IEUNG E PIEUPSIOS
+ {0x9E78, 0xC5E4}, //5212 #HANGUL SYLLABLE IEUNG E SSANGSIOS
+ {0x9E79, 0xC5E6}, //5213 #HANGUL SYLLABLE IEUNG E CIEUC
+ {0x9E7A, 0xC5E7}, //5214 #HANGUL SYLLABLE IEUNG E CHIEUCH
+ {0x9E81, 0xC5E8}, //5215 #HANGUL SYLLABLE IEUNG E KHIEUKH
+ {0x9E82, 0xC5E9}, //5216 #HANGUL SYLLABLE IEUNG E THIEUTH
+ {0x9E83, 0xC5EA}, //5217 #HANGUL SYLLABLE IEUNG E PHIEUPH
+ {0x9E84, 0xC5EB}, //5218 #HANGUL SYLLABLE IEUNG E HIEUH
+ {0x9E85, 0xC5EF}, //5219 #HANGUL SYLLABLE IEUNG YEO KIYEOKSIOS
+ {0x9E86, 0xC5F1}, //5220 #HANGUL SYLLABLE IEUNG YEO NIEUNCIEUC
+ {0x9E87, 0xC5F2}, //5221 #HANGUL SYLLABLE IEUNG YEO NIEUNHIEUH
+ {0x9E88, 0xC5F3}, //5222 #HANGUL SYLLABLE IEUNG YEO TIKEUT
+ {0x9E89, 0xC5F5}, //5223 #HANGUL SYLLABLE IEUNG YEO RIEULKIYEOK
+ {0x9E8A, 0xC5F8}, //5224 #HANGUL SYLLABLE IEUNG YEO RIEULSIOS
+ {0x9E8B, 0xC5F9}, //5225 #HANGUL SYLLABLE IEUNG YEO RIEULTHIEUTH
+ {0x9E8C, 0xC5FA}, //5226 #HANGUL SYLLABLE IEUNG YEO RIEULPHIEUPH
+ {0x9E8D, 0xC5FB}, //5227 #HANGUL SYLLABLE IEUNG YEO RIEULHIEUH
+ {0x9E8E, 0xC602}, //5228 #HANGUL SYLLABLE IEUNG YEO CIEUC
+ {0x9E8F, 0xC603}, //5229 #HANGUL SYLLABLE IEUNG YEO CHIEUCH
+ {0x9E90, 0xC604}, //5230 #HANGUL SYLLABLE IEUNG YEO KHIEUKH
+ {0x9E91, 0xC609}, //5231 #HANGUL SYLLABLE IEUNG YE KIYEOK
+ {0x9E92, 0xC60A}, //5232 #HANGUL SYLLABLE IEUNG YE SSANGKIYEOK
+ {0x9E93, 0xC60B}, //5233 #HANGUL SYLLABLE IEUNG YE KIYEOKSIOS
+ {0x9E94, 0xC60D}, //5234 #HANGUL SYLLABLE IEUNG YE NIEUNCIEUC
+ {0x9E95, 0xC60E}, //5235 #HANGUL SYLLABLE IEUNG YE NIEUNHIEUH
+ {0x9E96, 0xC60F}, //5236 #HANGUL SYLLABLE IEUNG YE TIKEUT
+ {0x9E97, 0xC611}, //5237 #HANGUL SYLLABLE IEUNG YE RIEULKIYEOK
+ {0x9E98, 0xC612}, //5238 #HANGUL SYLLABLE IEUNG YE RIEULMIEUM
+ {0x9E99, 0xC613}, //5239 #HANGUL SYLLABLE IEUNG YE RIEULPIEUP
+ {0x9E9A, 0xC614}, //5240 #HANGUL SYLLABLE IEUNG YE RIEULSIOS
+ {0x9E9B, 0xC615}, //5241 #HANGUL SYLLABLE IEUNG YE RIEULTHIEUTH
+ {0x9E9C, 0xC616}, //5242 #HANGUL SYLLABLE IEUNG YE RIEULPHIEUPH
+ {0x9E9D, 0xC617}, //5243 #HANGUL SYLLABLE IEUNG YE RIEULHIEUH
+ {0x9E9E, 0xC61A}, //5244 #HANGUL SYLLABLE IEUNG YE PIEUPSIOS
+ {0x9E9F, 0xC61D}, //5245 #HANGUL SYLLABLE IEUNG YE IEUNG
+ {0x9EA0, 0xC61E}, //5246 #HANGUL SYLLABLE IEUNG YE CIEUC
+ {0x9EA1, 0xC61F}, //5247 #HANGUL SYLLABLE IEUNG YE CHIEUCH
+ {0x9EA2, 0xC620}, //5248 #HANGUL SYLLABLE IEUNG YE KHIEUKH
+ {0x9EA3, 0xC621}, //5249 #HANGUL SYLLABLE IEUNG YE THIEUTH
+ {0x9EA4, 0xC622}, //5250 #HANGUL SYLLABLE IEUNG YE PHIEUPH
+ {0x9EA5, 0xC623}, //5251 #HANGUL SYLLABLE IEUNG YE HIEUH
+ {0x9EA6, 0xC626}, //5252 #HANGUL SYLLABLE IEUNG O SSANGKIYEOK
+ {0x9EA7, 0xC627}, //5253 #HANGUL SYLLABLE IEUNG O KIYEOKSIOS
+ {0x9EA8, 0xC629}, //5254 #HANGUL SYLLABLE IEUNG O NIEUNCIEUC
+ {0x9EA9, 0xC62A}, //5255 #HANGUL SYLLABLE IEUNG O NIEUNHIEUH
+ {0x9EAA, 0xC62B}, //5256 #HANGUL SYLLABLE IEUNG O TIKEUT
+ {0x9EAB, 0xC62F}, //5257 #HANGUL SYLLABLE IEUNG O RIEULPIEUP
+ {0x9EAC, 0xC631}, //5258 #HANGUL SYLLABLE IEUNG O RIEULTHIEUTH
+ {0x9EAD, 0xC632}, //5259 #HANGUL SYLLABLE IEUNG O RIEULPHIEUPH
+ {0x9EAE, 0xC636}, //5260 #HANGUL SYLLABLE IEUNG O PIEUPSIOS
+ {0x9EAF, 0xC638}, //5261 #HANGUL SYLLABLE IEUNG O SSANGSIOS
+ {0x9EB0, 0xC63A}, //5262 #HANGUL SYLLABLE IEUNG O CIEUC
+ {0x9EB1, 0xC63C}, //5263 #HANGUL SYLLABLE IEUNG O KHIEUKH
+ {0x9EB2, 0xC63D}, //5264 #HANGUL SYLLABLE IEUNG O THIEUTH
+ {0x9EB3, 0xC63E}, //5265 #HANGUL SYLLABLE IEUNG O PHIEUPH
+ {0x9EB4, 0xC63F}, //5266 #HANGUL SYLLABLE IEUNG O HIEUH
+ {0x9EB5, 0xC642}, //5267 #HANGUL SYLLABLE IEUNG WA SSANGKIYEOK
+ {0x9EB6, 0xC643}, //5268 #HANGUL SYLLABLE IEUNG WA KIYEOKSIOS
+ {0x9EB7, 0xC645}, //5269 #HANGUL SYLLABLE IEUNG WA NIEUNCIEUC
+ {0x9EB8, 0xC646}, //5270 #HANGUL SYLLABLE IEUNG WA NIEUNHIEUH
+ {0x9EB9, 0xC647}, //5271 #HANGUL SYLLABLE IEUNG WA TIKEUT
+ {0x9EBA, 0xC649}, //5272 #HANGUL SYLLABLE IEUNG WA RIEULKIYEOK
+ {0x9EBB, 0xC64A}, //5273 #HANGUL SYLLABLE IEUNG WA RIEULMIEUM
+ {0x9EBC, 0xC64B}, //5274 #HANGUL SYLLABLE IEUNG WA RIEULPIEUP
+ {0x9EBD, 0xC64C}, //5275 #HANGUL SYLLABLE IEUNG WA RIEULSIOS
+ {0x9EBE, 0xC64D}, //5276 #HANGUL SYLLABLE IEUNG WA RIEULTHIEUTH
+ {0x9EBF, 0xC64E}, //5277 #HANGUL SYLLABLE IEUNG WA RIEULPHIEUPH
+ {0x9EC0, 0xC64F}, //5278 #HANGUL SYLLABLE IEUNG WA RIEULHIEUH
+ {0x9EC1, 0xC652}, //5279 #HANGUL SYLLABLE IEUNG WA PIEUPSIOS
+ {0x9EC2, 0xC656}, //5280 #HANGUL SYLLABLE IEUNG WA CIEUC
+ {0x9EC3, 0xC657}, //5281 #HANGUL SYLLABLE IEUNG WA CHIEUCH
+ {0x9EC4, 0xC658}, //5282 #HANGUL SYLLABLE IEUNG WA KHIEUKH
+ {0x9EC5, 0xC659}, //5283 #HANGUL SYLLABLE IEUNG WA THIEUTH
+ {0x9EC6, 0xC65A}, //5284 #HANGUL SYLLABLE IEUNG WA PHIEUPH
+ {0x9EC7, 0xC65B}, //5285 #HANGUL SYLLABLE IEUNG WA HIEUH
+ {0x9EC8, 0xC65E}, //5286 #HANGUL SYLLABLE IEUNG WAE SSANGKIYEOK
+ {0x9EC9, 0xC65F}, //5287 #HANGUL SYLLABLE IEUNG WAE KIYEOKSIOS
+ {0x9ECA, 0xC661}, //5288 #HANGUL SYLLABLE IEUNG WAE NIEUNCIEUC
+ {0x9ECB, 0xC662}, //5289 #HANGUL SYLLABLE IEUNG WAE NIEUNHIEUH
+ {0x9ECC, 0xC663}, //5290 #HANGUL SYLLABLE IEUNG WAE TIKEUT
+ {0x9ECD, 0xC664}, //5291 #HANGUL SYLLABLE IEUNG WAE RIEUL
+ {0x9ECE, 0xC665}, //5292 #HANGUL SYLLABLE IEUNG WAE RIEULKIYEOK
+ {0x9ECF, 0xC666}, //5293 #HANGUL SYLLABLE IEUNG WAE RIEULMIEUM
+ {0x9ED0, 0xC667}, //5294 #HANGUL SYLLABLE IEUNG WAE RIEULPIEUP
+ {0x9ED1, 0xC668}, //5295 #HANGUL SYLLABLE IEUNG WAE RIEULSIOS
+ {0x9ED2, 0xC669}, //5296 #HANGUL SYLLABLE IEUNG WAE RIEULTHIEUTH
+ {0x9ED3, 0xC66A}, //5297 #HANGUL SYLLABLE IEUNG WAE RIEULPHIEUPH
+ {0x9ED4, 0xC66B}, //5298 #HANGUL SYLLABLE IEUNG WAE RIEULHIEUH
+ {0x9ED5, 0xC66D}, //5299 #HANGUL SYLLABLE IEUNG WAE PIEUP
+ {0x9ED6, 0xC66E}, //5300 #HANGUL SYLLABLE IEUNG WAE PIEUPSIOS
+ {0x9ED7, 0xC670}, //5301 #HANGUL SYLLABLE IEUNG WAE SSANGSIOS
+ {0x9ED8, 0xC672}, //5302 #HANGUL SYLLABLE IEUNG WAE CIEUC
+ {0x9ED9, 0xC673}, //5303 #HANGUL SYLLABLE IEUNG WAE CHIEUCH
+ {0x9EDA, 0xC674}, //5304 #HANGUL SYLLABLE IEUNG WAE KHIEUKH
+ {0x9EDB, 0xC675}, //5305 #HANGUL SYLLABLE IEUNG WAE THIEUTH
+ {0x9EDC, 0xC676}, //5306 #HANGUL SYLLABLE IEUNG WAE PHIEUPH
+ {0x9EDD, 0xC677}, //5307 #HANGUL SYLLABLE IEUNG WAE HIEUH
+ {0x9EDE, 0xC67A}, //5308 #HANGUL SYLLABLE IEUNG OE SSANGKIYEOK
+ {0x9EDF, 0xC67B}, //5309 #HANGUL SYLLABLE IEUNG OE KIYEOKSIOS
+ {0x9EE0, 0xC67D}, //5310 #HANGUL SYLLABLE IEUNG OE NIEUNCIEUC
+ {0x9EE1, 0xC67E}, //5311 #HANGUL SYLLABLE IEUNG OE NIEUNHIEUH
+ {0x9EE2, 0xC67F}, //5312 #HANGUL SYLLABLE IEUNG OE TIKEUT
+ {0x9EE3, 0xC681}, //5313 #HANGUL SYLLABLE IEUNG OE RIEULKIYEOK
+ {0x9EE4, 0xC682}, //5314 #HANGUL SYLLABLE IEUNG OE RIEULMIEUM
+ {0x9EE5, 0xC683}, //5315 #HANGUL SYLLABLE IEUNG OE RIEULPIEUP
+ {0x9EE6, 0xC684}, //5316 #HANGUL SYLLABLE IEUNG OE RIEULSIOS
+ {0x9EE7, 0xC685}, //5317 #HANGUL SYLLABLE IEUNG OE RIEULTHIEUTH
+ {0x9EE8, 0xC686}, //5318 #HANGUL SYLLABLE IEUNG OE RIEULPHIEUPH
+ {0x9EE9, 0xC687}, //5319 #HANGUL SYLLABLE IEUNG OE RIEULHIEUH
+ {0x9EEA, 0xC68A}, //5320 #HANGUL SYLLABLE IEUNG OE PIEUPSIOS
+ {0x9EEB, 0xC68C}, //5321 #HANGUL SYLLABLE IEUNG OE SSANGSIOS
+ {0x9EEC, 0xC68E}, //5322 #HANGUL SYLLABLE IEUNG OE CIEUC
+ {0x9EED, 0xC68F}, //5323 #HANGUL SYLLABLE IEUNG OE CHIEUCH
+ {0x9EEE, 0xC690}, //5324 #HANGUL SYLLABLE IEUNG OE KHIEUKH
+ {0x9EEF, 0xC691}, //5325 #HANGUL SYLLABLE IEUNG OE THIEUTH
+ {0x9EF0, 0xC692}, //5326 #HANGUL SYLLABLE IEUNG OE PHIEUPH
+ {0x9EF1, 0xC693}, //5327 #HANGUL SYLLABLE IEUNG OE HIEUH
+ {0x9EF2, 0xC696}, //5328 #HANGUL SYLLABLE IEUNG YO SSANGKIYEOK
+ {0x9EF3, 0xC697}, //5329 #HANGUL SYLLABLE IEUNG YO KIYEOKSIOS
+ {0x9EF4, 0xC699}, //5330 #HANGUL SYLLABLE IEUNG YO NIEUNCIEUC
+ {0x9EF5, 0xC69A}, //5331 #HANGUL SYLLABLE IEUNG YO NIEUNHIEUH
+ {0x9EF6, 0xC69B}, //5332 #HANGUL SYLLABLE IEUNG YO TIKEUT
+ {0x9EF7, 0xC69D}, //5333 #HANGUL SYLLABLE IEUNG YO RIEULKIYEOK
+ {0x9EF8, 0xC69E}, //5334 #HANGUL SYLLABLE IEUNG YO RIEULMIEUM
+ {0x9EF9, 0xC69F}, //5335 #HANGUL SYLLABLE IEUNG YO RIEULPIEUP
+ {0x9EFA, 0xC6A0}, //5336 #HANGUL SYLLABLE IEUNG YO RIEULSIOS
+ {0x9EFB, 0xC6A1}, //5337 #HANGUL SYLLABLE IEUNG YO RIEULTHIEUTH
+ {0x9EFC, 0xC6A2}, //5338 #HANGUL SYLLABLE IEUNG YO RIEULPHIEUPH
+ {0x9EFD, 0xC6A3}, //5339 #HANGUL SYLLABLE IEUNG YO RIEULHIEUH
+ {0x9EFE, 0xC6A6}, //5340 #HANGUL SYLLABLE IEUNG YO PIEUPSIOS
+ {0x9F41, 0xC6A8}, //5341 #HANGUL SYLLABLE IEUNG YO SSANGSIOS
+ {0x9F42, 0xC6AA}, //5342 #HANGUL SYLLABLE IEUNG YO CIEUC
+ {0x9F43, 0xC6AB}, //5343 #HANGUL SYLLABLE IEUNG YO CHIEUCH
+ {0x9F44, 0xC6AC}, //5344 #HANGUL SYLLABLE IEUNG YO KHIEUKH
+ {0x9F45, 0xC6AD}, //5345 #HANGUL SYLLABLE IEUNG YO THIEUTH
+ {0x9F46, 0xC6AE}, //5346 #HANGUL SYLLABLE IEUNG YO PHIEUPH
+ {0x9F47, 0xC6AF}, //5347 #HANGUL SYLLABLE IEUNG YO HIEUH
+ {0x9F48, 0xC6B2}, //5348 #HANGUL SYLLABLE IEUNG U SSANGKIYEOK
+ {0x9F49, 0xC6B3}, //5349 #HANGUL SYLLABLE IEUNG U KIYEOKSIOS
+ {0x9F4A, 0xC6B5}, //5350 #HANGUL SYLLABLE IEUNG U NIEUNCIEUC
+ {0x9F4B, 0xC6B6}, //5351 #HANGUL SYLLABLE IEUNG U NIEUNHIEUH
+ {0x9F4C, 0xC6B7}, //5352 #HANGUL SYLLABLE IEUNG U TIKEUT
+ {0x9F4D, 0xC6BB}, //5353 #HANGUL SYLLABLE IEUNG U RIEULPIEUP
+ {0x9F4E, 0xC6BC}, //5354 #HANGUL SYLLABLE IEUNG U RIEULSIOS
+ {0x9F4F, 0xC6BD}, //5355 #HANGUL SYLLABLE IEUNG U RIEULTHIEUTH
+ {0x9F50, 0xC6BE}, //5356 #HANGUL SYLLABLE IEUNG U RIEULPHIEUPH
+ {0x9F51, 0xC6BF}, //5357 #HANGUL SYLLABLE IEUNG U RIEULHIEUH
+ {0x9F52, 0xC6C2}, //5358 #HANGUL SYLLABLE IEUNG U PIEUPSIOS
+ {0x9F53, 0xC6C4}, //5359 #HANGUL SYLLABLE IEUNG U SSANGSIOS
+ {0x9F54, 0xC6C6}, //5360 #HANGUL SYLLABLE IEUNG U CIEUC
+ {0x9F55, 0xC6C7}, //5361 #HANGUL SYLLABLE IEUNG U CHIEUCH
+ {0x9F56, 0xC6C8}, //5362 #HANGUL SYLLABLE IEUNG U KHIEUKH
+ {0x9F57, 0xC6C9}, //5363 #HANGUL SYLLABLE IEUNG U THIEUTH
+ {0x9F58, 0xC6CA}, //5364 #HANGUL SYLLABLE IEUNG U PHIEUPH
+ {0x9F59, 0xC6CB}, //5365 #HANGUL SYLLABLE IEUNG U HIEUH
+ {0x9F5A, 0xC6CE}, //5366 #HANGUL SYLLABLE IEUNG WEO SSANGKIYEOK
+ {0x9F61, 0xC6CF}, //5367 #HANGUL SYLLABLE IEUNG WEO KIYEOKSIOS
+ {0x9F62, 0xC6D1}, //5368 #HANGUL SYLLABLE IEUNG WEO NIEUNCIEUC
+ {0x9F63, 0xC6D2}, //5369 #HANGUL SYLLABLE IEUNG WEO NIEUNHIEUH
+ {0x9F64, 0xC6D3}, //5370 #HANGUL SYLLABLE IEUNG WEO TIKEUT
+ {0x9F65, 0xC6D5}, //5371 #HANGUL SYLLABLE IEUNG WEO RIEULKIYEOK
+ {0x9F66, 0xC6D6}, //5372 #HANGUL SYLLABLE IEUNG WEO RIEULMIEUM
+ {0x9F67, 0xC6D7}, //5373 #HANGUL SYLLABLE IEUNG WEO RIEULPIEUP
+ {0x9F68, 0xC6D8}, //5374 #HANGUL SYLLABLE IEUNG WEO RIEULSIOS
+ {0x9F69, 0xC6D9}, //5375 #HANGUL SYLLABLE IEUNG WEO RIEULTHIEUTH
+ {0x9F6A, 0xC6DA}, //5376 #HANGUL SYLLABLE IEUNG WEO RIEULPHIEUPH
+ {0x9F6B, 0xC6DB}, //5377 #HANGUL SYLLABLE IEUNG WEO RIEULHIEUH
+ {0x9F6C, 0xC6DE}, //5378 #HANGUL SYLLABLE IEUNG WEO PIEUPSIOS
+ {0x9F6D, 0xC6DF}, //5379 #HANGUL SYLLABLE IEUNG WEO SIOS
+ {0x9F6E, 0xC6E2}, //5380 #HANGUL SYLLABLE IEUNG WEO CIEUC
+ {0x9F6F, 0xC6E3}, //5381 #HANGUL SYLLABLE IEUNG WEO CHIEUCH
+ {0x9F70, 0xC6E4}, //5382 #HANGUL SYLLABLE IEUNG WEO KHIEUKH
+ {0x9F71, 0xC6E5}, //5383 #HANGUL SYLLABLE IEUNG WEO THIEUTH
+ {0x9F72, 0xC6E6}, //5384 #HANGUL SYLLABLE IEUNG WEO PHIEUPH
+ {0x9F73, 0xC6E7}, //5385 #HANGUL SYLLABLE IEUNG WEO HIEUH
+ {0x9F74, 0xC6EA}, //5386 #HANGUL SYLLABLE IEUNG WE SSANGKIYEOK
+ {0x9F75, 0xC6EB}, //5387 #HANGUL SYLLABLE IEUNG WE KIYEOKSIOS
+ {0x9F76, 0xC6ED}, //5388 #HANGUL SYLLABLE IEUNG WE NIEUNCIEUC
+ {0x9F77, 0xC6EE}, //5389 #HANGUL SYLLABLE IEUNG WE NIEUNHIEUH
+ {0x9F78, 0xC6EF}, //5390 #HANGUL SYLLABLE IEUNG WE TIKEUT
+ {0x9F79, 0xC6F1}, //5391 #HANGUL SYLLABLE IEUNG WE RIEULKIYEOK
+ {0x9F7A, 0xC6F2}, //5392 #HANGUL SYLLABLE IEUNG WE RIEULMIEUM
+ {0x9F81, 0xC6F3}, //5393 #HANGUL SYLLABLE IEUNG WE RIEULPIEUP
+ {0x9F82, 0xC6F4}, //5394 #HANGUL SYLLABLE IEUNG WE RIEULSIOS
+ {0x9F83, 0xC6F5}, //5395 #HANGUL SYLLABLE IEUNG WE RIEULTHIEUTH
+ {0x9F84, 0xC6F6}, //5396 #HANGUL SYLLABLE IEUNG WE RIEULPHIEUPH
+ {0x9F85, 0xC6F7}, //5397 #HANGUL SYLLABLE IEUNG WE RIEULHIEUH
+ {0x9F86, 0xC6FA}, //5398 #HANGUL SYLLABLE IEUNG WE PIEUPSIOS
+ {0x9F87, 0xC6FB}, //5399 #HANGUL SYLLABLE IEUNG WE SIOS
+ {0x9F88, 0xC6FC}, //5400 #HANGUL SYLLABLE IEUNG WE SSANGSIOS
+ {0x9F89, 0xC6FE}, //5401 #HANGUL SYLLABLE IEUNG WE CIEUC
+ {0x9F8A, 0xC6FF}, //5402 #HANGUL SYLLABLE IEUNG WE CHIEUCH
+ {0x9F8B, 0xC700}, //5403 #HANGUL SYLLABLE IEUNG WE KHIEUKH
+ {0x9F8C, 0xC701}, //5404 #HANGUL SYLLABLE IEUNG WE THIEUTH
+ {0x9F8D, 0xC702}, //5405 #HANGUL SYLLABLE IEUNG WE PHIEUPH
+ {0x9F8E, 0xC703}, //5406 #HANGUL SYLLABLE IEUNG WE HIEUH
+ {0x9F8F, 0xC706}, //5407 #HANGUL SYLLABLE IEUNG WI SSANGKIYEOK
+ {0x9F90, 0xC707}, //5408 #HANGUL SYLLABLE IEUNG WI KIYEOKSIOS
+ {0x9F91, 0xC709}, //5409 #HANGUL SYLLABLE IEUNG WI NIEUNCIEUC
+ {0x9F92, 0xC70A}, //5410 #HANGUL SYLLABLE IEUNG WI NIEUNHIEUH
+ {0x9F93, 0xC70B}, //5411 #HANGUL SYLLABLE IEUNG WI TIKEUT
+ {0x9F94, 0xC70D}, //5412 #HANGUL SYLLABLE IEUNG WI RIEULKIYEOK
+ {0x9F95, 0xC70E}, //5413 #HANGUL SYLLABLE IEUNG WI RIEULMIEUM
+ {0x9F96, 0xC70F}, //5414 #HANGUL SYLLABLE IEUNG WI RIEULPIEUP
+ {0x9F97, 0xC710}, //5415 #HANGUL SYLLABLE IEUNG WI RIEULSIOS
+ {0x9F98, 0xC711}, //5416 #HANGUL SYLLABLE IEUNG WI RIEULTHIEUTH
+ {0x9F99, 0xC712}, //5417 #HANGUL SYLLABLE IEUNG WI RIEULPHIEUPH
+ {0x9F9A, 0xC713}, //5418 #HANGUL SYLLABLE IEUNG WI RIEULHIEUH
+ {0x9F9B, 0xC716}, //5419 #HANGUL SYLLABLE IEUNG WI PIEUPSIOS
+ {0x9F9C, 0xC718}, //5420 #HANGUL SYLLABLE IEUNG WI SSANGSIOS
+ {0x9F9D, 0xC71A}, //5421 #HANGUL SYLLABLE IEUNG WI CIEUC
+ {0x9F9E, 0xC71B}, //5422 #HANGUL SYLLABLE IEUNG WI CHIEUCH
+ {0x9F9F, 0xC71C}, //5423 #HANGUL SYLLABLE IEUNG WI KHIEUKH
+ {0x9FA0, 0xC71D}, //5424 #HANGUL SYLLABLE IEUNG WI THIEUTH
+ {0x9FA1, 0xC71E}, //5425 #HANGUL SYLLABLE IEUNG WI PHIEUPH
+ {0x9FA2, 0xC71F}, //5426 #HANGUL SYLLABLE IEUNG WI HIEUH
+ {0x9FA3, 0xC722}, //5427 #HANGUL SYLLABLE IEUNG YU SSANGKIYEOK
+ {0x9FA4, 0xC723}, //5428 #HANGUL SYLLABLE IEUNG YU KIYEOKSIOS
+ {0x9FA5, 0xC725}, //5429 #HANGUL SYLLABLE IEUNG YU NIEUNCIEUC
+ {0x9FA6, 0xC726}, //5430 #HANGUL SYLLABLE IEUNG YU NIEUNHIEUH
+ {0x9FA7, 0xC727}, //5431 #HANGUL SYLLABLE IEUNG YU TIKEUT
+ {0x9FA8, 0xC729}, //5432 #HANGUL SYLLABLE IEUNG YU RIEULKIYEOK
+ {0x9FA9, 0xC72A}, //5433 #HANGUL SYLLABLE IEUNG YU RIEULMIEUM
+ {0x9FAA, 0xC72B}, //5434 #HANGUL SYLLABLE IEUNG YU RIEULPIEUP
+ {0x9FAB, 0xC72C}, //5435 #HANGUL SYLLABLE IEUNG YU RIEULSIOS
+ {0x9FAC, 0xC72D}, //5436 #HANGUL SYLLABLE IEUNG YU RIEULTHIEUTH
+ {0x9FAD, 0xC72E}, //5437 #HANGUL SYLLABLE IEUNG YU RIEULPHIEUPH
+ {0x9FAE, 0xC72F}, //5438 #HANGUL SYLLABLE IEUNG YU RIEULHIEUH
+ {0x9FAF, 0xC732}, //5439 #HANGUL SYLLABLE IEUNG YU PIEUPSIOS
+ {0x9FB0, 0xC734}, //5440 #HANGUL SYLLABLE IEUNG YU SSANGSIOS
+ {0x9FB1, 0xC736}, //5441 #HANGUL SYLLABLE IEUNG YU CIEUC
+ {0x9FB2, 0xC738}, //5442 #HANGUL SYLLABLE IEUNG YU KHIEUKH
+ {0x9FB3, 0xC739}, //5443 #HANGUL SYLLABLE IEUNG YU THIEUTH
+ {0x9FB4, 0xC73A}, //5444 #HANGUL SYLLABLE IEUNG YU PHIEUPH
+ {0x9FB5, 0xC73B}, //5445 #HANGUL SYLLABLE IEUNG YU HIEUH
+ {0x9FB6, 0xC73E}, //5446 #HANGUL SYLLABLE IEUNG EU SSANGKIYEOK
+ {0x9FB7, 0xC73F}, //5447 #HANGUL SYLLABLE IEUNG EU KIYEOKSIOS
+ {0x9FB8, 0xC741}, //5448 #HANGUL SYLLABLE IEUNG EU NIEUNCIEUC
+ {0x9FB9, 0xC742}, //5449 #HANGUL SYLLABLE IEUNG EU NIEUNHIEUH
+ {0x9FBA, 0xC743}, //5450 #HANGUL SYLLABLE IEUNG EU TIKEUT
+ {0x9FBB, 0xC745}, //5451 #HANGUL SYLLABLE IEUNG EU RIEULKIYEOK
+ {0x9FBC, 0xC746}, //5452 #HANGUL SYLLABLE IEUNG EU RIEULMIEUM
+ {0x9FBD, 0xC747}, //5453 #HANGUL SYLLABLE IEUNG EU RIEULPIEUP
+ {0x9FBE, 0xC748}, //5454 #HANGUL SYLLABLE IEUNG EU RIEULSIOS
+ {0x9FBF, 0xC749}, //5455 #HANGUL SYLLABLE IEUNG EU RIEULTHIEUTH
+ {0x9FC0, 0xC74B}, //5456 #HANGUL SYLLABLE IEUNG EU RIEULHIEUH
+ {0x9FC1, 0xC74E}, //5457 #HANGUL SYLLABLE IEUNG EU PIEUPSIOS
+ {0x9FC2, 0xC750}, //5458 #HANGUL SYLLABLE IEUNG EU SSANGSIOS
+ {0x9FC3, 0xC759}, //5459 #HANGUL SYLLABLE IEUNG YI KIYEOK
+ {0x9FC4, 0xC75A}, //5460 #HANGUL SYLLABLE IEUNG YI SSANGKIYEOK
+ {0x9FC5, 0xC75B}, //5461 #HANGUL SYLLABLE IEUNG YI KIYEOKSIOS
+ {0x9FC6, 0xC75D}, //5462 #HANGUL SYLLABLE IEUNG YI NIEUNCIEUC
+ {0x9FC7, 0xC75E}, //5463 #HANGUL SYLLABLE IEUNG YI NIEUNHIEUH
+ {0x9FC8, 0xC75F}, //5464 #HANGUL SYLLABLE IEUNG YI TIKEUT
+ {0x9FC9, 0xC761}, //5465 #HANGUL SYLLABLE IEUNG YI RIEULKIYEOK
+ {0x9FCA, 0xC762}, //5466 #HANGUL SYLLABLE IEUNG YI RIEULMIEUM
+ {0x9FCB, 0xC763}, //5467 #HANGUL SYLLABLE IEUNG YI RIEULPIEUP
+ {0x9FCC, 0xC764}, //5468 #HANGUL SYLLABLE IEUNG YI RIEULSIOS
+ {0x9FCD, 0xC765}, //5469 #HANGUL SYLLABLE IEUNG YI RIEULTHIEUTH
+ {0x9FCE, 0xC766}, //5470 #HANGUL SYLLABLE IEUNG YI RIEULPHIEUPH
+ {0x9FCF, 0xC767}, //5471 #HANGUL SYLLABLE IEUNG YI RIEULHIEUH
+ {0x9FD0, 0xC769}, //5472 #HANGUL SYLLABLE IEUNG YI PIEUP
+ {0x9FD1, 0xC76A}, //5473 #HANGUL SYLLABLE IEUNG YI PIEUPSIOS
+ {0x9FD2, 0xC76C}, //5474 #HANGUL SYLLABLE IEUNG YI SSANGSIOS
+ {0x9FD3, 0xC76D}, //5475 #HANGUL SYLLABLE IEUNG YI IEUNG
+ {0x9FD4, 0xC76E}, //5476 #HANGUL SYLLABLE IEUNG YI CIEUC
+ {0x9FD5, 0xC76F}, //5477 #HANGUL SYLLABLE IEUNG YI CHIEUCH
+ {0x9FD6, 0xC770}, //5478 #HANGUL SYLLABLE IEUNG YI KHIEUKH
+ {0x9FD7, 0xC771}, //5479 #HANGUL SYLLABLE IEUNG YI THIEUTH
+ {0x9FD8, 0xC772}, //5480 #HANGUL SYLLABLE IEUNG YI PHIEUPH
+ {0x9FD9, 0xC773}, //5481 #HANGUL SYLLABLE IEUNG YI HIEUH
+ {0x9FDA, 0xC776}, //5482 #HANGUL SYLLABLE IEUNG I SSANGKIYEOK
+ {0x9FDB, 0xC777}, //5483 #HANGUL SYLLABLE IEUNG I KIYEOKSIOS
+ {0x9FDC, 0xC779}, //5484 #HANGUL SYLLABLE IEUNG I NIEUNCIEUC
+ {0x9FDD, 0xC77A}, //5485 #HANGUL SYLLABLE IEUNG I NIEUNHIEUH
+ {0x9FDE, 0xC77B}, //5486 #HANGUL SYLLABLE IEUNG I TIKEUT
+ {0x9FDF, 0xC77F}, //5487 #HANGUL SYLLABLE IEUNG I RIEULPIEUP
+ {0x9FE0, 0xC780}, //5488 #HANGUL SYLLABLE IEUNG I RIEULSIOS
+ {0x9FE1, 0xC781}, //5489 #HANGUL SYLLABLE IEUNG I RIEULTHIEUTH
+ {0x9FE2, 0xC782}, //5490 #HANGUL SYLLABLE IEUNG I RIEULPHIEUPH
+ {0x9FE3, 0xC786}, //5491 #HANGUL SYLLABLE IEUNG I PIEUPSIOS
+ {0x9FE4, 0xC78B}, //5492 #HANGUL SYLLABLE IEUNG I CHIEUCH
+ {0x9FE5, 0xC78C}, //5493 #HANGUL SYLLABLE IEUNG I KHIEUKH
+ {0x9FE6, 0xC78D}, //5494 #HANGUL SYLLABLE IEUNG I THIEUTH
+ {0x9FE7, 0xC78F}, //5495 #HANGUL SYLLABLE IEUNG I HIEUH
+ {0x9FE8, 0xC792}, //5496 #HANGUL SYLLABLE CIEUC A SSANGKIYEOK
+ {0x9FE9, 0xC793}, //5497 #HANGUL SYLLABLE CIEUC A KIYEOKSIOS
+ {0x9FEA, 0xC795}, //5498 #HANGUL SYLLABLE CIEUC A NIEUNCIEUC
+ {0x9FEB, 0xC799}, //5499 #HANGUL SYLLABLE CIEUC A RIEULKIYEOK
+ {0x9FEC, 0xC79B}, //5500 #HANGUL SYLLABLE CIEUC A RIEULPIEUP
+ {0x9FED, 0xC79C}, //5501 #HANGUL SYLLABLE CIEUC A RIEULSIOS
+ {0x9FEE, 0xC79D}, //5502 #HANGUL SYLLABLE CIEUC A RIEULTHIEUTH
+ {0x9FEF, 0xC79E}, //5503 #HANGUL SYLLABLE CIEUC A RIEULPHIEUPH
+ {0x9FF0, 0xC79F}, //5504 #HANGUL SYLLABLE CIEUC A RIEULHIEUH
+ {0x9FF1, 0xC7A2}, //5505 #HANGUL SYLLABLE CIEUC A PIEUPSIOS
+ {0x9FF2, 0xC7A7}, //5506 #HANGUL SYLLABLE CIEUC A CHIEUCH
+ {0x9FF3, 0xC7A8}, //5507 #HANGUL SYLLABLE CIEUC A KHIEUKH
+ {0x9FF4, 0xC7A9}, //5508 #HANGUL SYLLABLE CIEUC A THIEUTH
+ {0x9FF5, 0xC7AA}, //5509 #HANGUL SYLLABLE CIEUC A PHIEUPH
+ {0x9FF6, 0xC7AB}, //5510 #HANGUL SYLLABLE CIEUC A HIEUH
+ {0x9FF7, 0xC7AE}, //5511 #HANGUL SYLLABLE CIEUC AE SSANGKIYEOK
+ {0x9FF8, 0xC7AF}, //5512 #HANGUL SYLLABLE CIEUC AE KIYEOKSIOS
+ {0x9FF9, 0xC7B1}, //5513 #HANGUL SYLLABLE CIEUC AE NIEUNCIEUC
+ {0x9FFA, 0xC7B2}, //5514 #HANGUL SYLLABLE CIEUC AE NIEUNHIEUH
+ {0x9FFB, 0xC7B3}, //5515 #HANGUL SYLLABLE CIEUC AE TIKEUT
+ {0x9FFC, 0xC7B5}, //5516 #HANGUL SYLLABLE CIEUC AE RIEULKIYEOK
+ {0x9FFD, 0xC7B6}, //5517 #HANGUL SYLLABLE CIEUC AE RIEULMIEUM
+ {0x9FFE, 0xC7B7}, //5518 #HANGUL SYLLABLE CIEUC AE RIEULPIEUP
+ {0xA041, 0xC7B8}, //5519 #HANGUL SYLLABLE CIEUC AE RIEULSIOS
+ {0xA042, 0xC7B9}, //5520 #HANGUL SYLLABLE CIEUC AE RIEULTHIEUTH
+ {0xA043, 0xC7BA}, //5521 #HANGUL SYLLABLE CIEUC AE RIEULPHIEUPH
+ {0xA044, 0xC7BB}, //5522 #HANGUL SYLLABLE CIEUC AE RIEULHIEUH
+ {0xA045, 0xC7BE}, //5523 #HANGUL SYLLABLE CIEUC AE PIEUPSIOS
+ {0xA046, 0xC7C2}, //5524 #HANGUL SYLLABLE CIEUC AE CIEUC
+ {0xA047, 0xC7C3}, //5525 #HANGUL SYLLABLE CIEUC AE CHIEUCH
+ {0xA048, 0xC7C4}, //5526 #HANGUL SYLLABLE CIEUC AE KHIEUKH
+ {0xA049, 0xC7C5}, //5527 #HANGUL SYLLABLE CIEUC AE THIEUTH
+ {0xA04A, 0xC7C6}, //5528 #HANGUL SYLLABLE CIEUC AE PHIEUPH
+ {0xA04B, 0xC7C7}, //5529 #HANGUL SYLLABLE CIEUC AE HIEUH
+ {0xA04C, 0xC7CA}, //5530 #HANGUL SYLLABLE CIEUC YA SSANGKIYEOK
+ {0xA04D, 0xC7CB}, //5531 #HANGUL SYLLABLE CIEUC YA KIYEOKSIOS
+ {0xA04E, 0xC7CD}, //5532 #HANGUL SYLLABLE CIEUC YA NIEUNCIEUC
+ {0xA04F, 0xC7CF}, //5533 #HANGUL SYLLABLE CIEUC YA TIKEUT
+ {0xA050, 0xC7D1}, //5534 #HANGUL SYLLABLE CIEUC YA RIEULKIYEOK
+ {0xA051, 0xC7D2}, //5535 #HANGUL SYLLABLE CIEUC YA RIEULMIEUM
+ {0xA052, 0xC7D3}, //5536 #HANGUL SYLLABLE CIEUC YA RIEULPIEUP
+ {0xA053, 0xC7D4}, //5537 #HANGUL SYLLABLE CIEUC YA RIEULSIOS
+ {0xA054, 0xC7D5}, //5538 #HANGUL SYLLABLE CIEUC YA RIEULTHIEUTH
+ {0xA055, 0xC7D6}, //5539 #HANGUL SYLLABLE CIEUC YA RIEULPHIEUPH
+ {0xA056, 0xC7D7}, //5540 #HANGUL SYLLABLE CIEUC YA RIEULHIEUH
+ {0xA057, 0xC7D9}, //5541 #HANGUL SYLLABLE CIEUC YA PIEUP
+ {0xA058, 0xC7DA}, //5542 #HANGUL SYLLABLE CIEUC YA PIEUPSIOS
+ {0xA059, 0xC7DB}, //5543 #HANGUL SYLLABLE CIEUC YA SIOS
+ {0xA05A, 0xC7DC}, //5544 #HANGUL SYLLABLE CIEUC YA SSANGSIOS
+ {0xA061, 0xC7DE}, //5545 #HANGUL SYLLABLE CIEUC YA CIEUC
+ {0xA062, 0xC7DF}, //5546 #HANGUL SYLLABLE CIEUC YA CHIEUCH
+ {0xA063, 0xC7E0}, //5547 #HANGUL SYLLABLE CIEUC YA KHIEUKH
+ {0xA064, 0xC7E1}, //5548 #HANGUL SYLLABLE CIEUC YA THIEUTH
+ {0xA065, 0xC7E2}, //5549 #HANGUL SYLLABLE CIEUC YA PHIEUPH
+ {0xA066, 0xC7E3}, //5550 #HANGUL SYLLABLE CIEUC YA HIEUH
+ {0xA067, 0xC7E5}, //5551 #HANGUL SYLLABLE CIEUC YAE KIYEOK
+ {0xA068, 0xC7E6}, //5552 #HANGUL SYLLABLE CIEUC YAE SSANGKIYEOK
+ {0xA069, 0xC7E7}, //5553 #HANGUL SYLLABLE CIEUC YAE KIYEOKSIOS
+ {0xA06A, 0xC7E9}, //5554 #HANGUL SYLLABLE CIEUC YAE NIEUNCIEUC
+ {0xA06B, 0xC7EA}, //5555 #HANGUL SYLLABLE CIEUC YAE NIEUNHIEUH
+ {0xA06C, 0xC7EB}, //5556 #HANGUL SYLLABLE CIEUC YAE TIKEUT
+ {0xA06D, 0xC7ED}, //5557 #HANGUL SYLLABLE CIEUC YAE RIEULKIYEOK
+ {0xA06E, 0xC7EE}, //5558 #HANGUL SYLLABLE CIEUC YAE RIEULMIEUM
+ {0xA06F, 0xC7EF}, //5559 #HANGUL SYLLABLE CIEUC YAE RIEULPIEUP
+ {0xA070, 0xC7F0}, //5560 #HANGUL SYLLABLE CIEUC YAE RIEULSIOS
+ {0xA071, 0xC7F1}, //5561 #HANGUL SYLLABLE CIEUC YAE RIEULTHIEUTH
+ {0xA072, 0xC7F2}, //5562 #HANGUL SYLLABLE CIEUC YAE RIEULPHIEUPH
+ {0xA073, 0xC7F3}, //5563 #HANGUL SYLLABLE CIEUC YAE RIEULHIEUH
+ {0xA074, 0xC7F4}, //5564 #HANGUL SYLLABLE CIEUC YAE MIEUM
+ {0xA075, 0xC7F5}, //5565 #HANGUL SYLLABLE CIEUC YAE PIEUP
+ {0xA076, 0xC7F6}, //5566 #HANGUL SYLLABLE CIEUC YAE PIEUPSIOS
+ {0xA077, 0xC7F7}, //5567 #HANGUL SYLLABLE CIEUC YAE SIOS
+ {0xA078, 0xC7F8}, //5568 #HANGUL SYLLABLE CIEUC YAE SSANGSIOS
+ {0xA079, 0xC7F9}, //5569 #HANGUL SYLLABLE CIEUC YAE IEUNG
+ {0xA07A, 0xC7FA}, //5570 #HANGUL SYLLABLE CIEUC YAE CIEUC
+ {0xA081, 0xC7FB}, //5571 #HANGUL SYLLABLE CIEUC YAE CHIEUCH
+ {0xA082, 0xC7FC}, //5572 #HANGUL SYLLABLE CIEUC YAE KHIEUKH
+ {0xA083, 0xC7FD}, //5573 #HANGUL SYLLABLE CIEUC YAE THIEUTH
+ {0xA084, 0xC7FE}, //5574 #HANGUL SYLLABLE CIEUC YAE PHIEUPH
+ {0xA085, 0xC7FF}, //5575 #HANGUL SYLLABLE CIEUC YAE HIEUH
+ {0xA086, 0xC802}, //5576 #HANGUL SYLLABLE CIEUC EO SSANGKIYEOK
+ {0xA087, 0xC803}, //5577 #HANGUL SYLLABLE CIEUC EO KIYEOKSIOS
+ {0xA088, 0xC805}, //5578 #HANGUL SYLLABLE CIEUC EO NIEUNCIEUC
+ {0xA089, 0xC806}, //5579 #HANGUL SYLLABLE CIEUC EO NIEUNHIEUH
+ {0xA08A, 0xC807}, //5580 #HANGUL SYLLABLE CIEUC EO TIKEUT
+ {0xA08B, 0xC809}, //5581 #HANGUL SYLLABLE CIEUC EO RIEULKIYEOK
+ {0xA08C, 0xC80B}, //5582 #HANGUL SYLLABLE CIEUC EO RIEULPIEUP
+ {0xA08D, 0xC80C}, //5583 #HANGUL SYLLABLE CIEUC EO RIEULSIOS
+ {0xA08E, 0xC80D}, //5584 #HANGUL SYLLABLE CIEUC EO RIEULTHIEUTH
+ {0xA08F, 0xC80E}, //5585 #HANGUL SYLLABLE CIEUC EO RIEULPHIEUPH
+ {0xA090, 0xC80F}, //5586 #HANGUL SYLLABLE CIEUC EO RIEULHIEUH
+ {0xA091, 0xC812}, //5587 #HANGUL SYLLABLE CIEUC EO PIEUPSIOS
+ {0xA092, 0xC814}, //5588 #HANGUL SYLLABLE CIEUC EO SSANGSIOS
+ {0xA093, 0xC817}, //5589 #HANGUL SYLLABLE CIEUC EO CHIEUCH
+ {0xA094, 0xC818}, //5590 #HANGUL SYLLABLE CIEUC EO KHIEUKH
+ {0xA095, 0xC819}, //5591 #HANGUL SYLLABLE CIEUC EO THIEUTH
+ {0xA096, 0xC81A}, //5592 #HANGUL SYLLABLE CIEUC EO PHIEUPH
+ {0xA097, 0xC81B}, //5593 #HANGUL SYLLABLE CIEUC EO HIEUH
+ {0xA098, 0xC81E}, //5594 #HANGUL SYLLABLE CIEUC E SSANGKIYEOK
+ {0xA099, 0xC81F}, //5595 #HANGUL SYLLABLE CIEUC E KIYEOKSIOS
+ {0xA09A, 0xC821}, //5596 #HANGUL SYLLABLE CIEUC E NIEUNCIEUC
+ {0xA09B, 0xC822}, //5597 #HANGUL SYLLABLE CIEUC E NIEUNHIEUH
+ {0xA09C, 0xC823}, //5598 #HANGUL SYLLABLE CIEUC E TIKEUT
+ {0xA09D, 0xC825}, //5599 #HANGUL SYLLABLE CIEUC E RIEULKIYEOK
+ {0xA09E, 0xC826}, //5600 #HANGUL SYLLABLE CIEUC E RIEULMIEUM
+ {0xA09F, 0xC827}, //5601 #HANGUL SYLLABLE CIEUC E RIEULPIEUP
+ {0xA0A0, 0xC828}, //5602 #HANGUL SYLLABLE CIEUC E RIEULSIOS
+ {0xA0A1, 0xC829}, //5603 #HANGUL SYLLABLE CIEUC E RIEULTHIEUTH
+ {0xA0A2, 0xC82A}, //5604 #HANGUL SYLLABLE CIEUC E RIEULPHIEUPH
+ {0xA0A3, 0xC82B}, //5605 #HANGUL SYLLABLE CIEUC E RIEULHIEUH
+ {0xA0A4, 0xC82E}, //5606 #HANGUL SYLLABLE CIEUC E PIEUPSIOS
+ {0xA0A5, 0xC830}, //5607 #HANGUL SYLLABLE CIEUC E SSANGSIOS
+ {0xA0A6, 0xC832}, //5608 #HANGUL SYLLABLE CIEUC E CIEUC
+ {0xA0A7, 0xC833}, //5609 #HANGUL SYLLABLE CIEUC E CHIEUCH
+ {0xA0A8, 0xC834}, //5610 #HANGUL SYLLABLE CIEUC E KHIEUKH
+ {0xA0A9, 0xC835}, //5611 #HANGUL SYLLABLE CIEUC E THIEUTH
+ {0xA0AA, 0xC836}, //5612 #HANGUL SYLLABLE CIEUC E PHIEUPH
+ {0xA0AB, 0xC837}, //5613 #HANGUL SYLLABLE CIEUC E HIEUH
+ {0xA0AC, 0xC839}, //5614 #HANGUL SYLLABLE CIEUC YEO KIYEOK
+ {0xA0AD, 0xC83A}, //5615 #HANGUL SYLLABLE CIEUC YEO SSANGKIYEOK
+ {0xA0AE, 0xC83B}, //5616 #HANGUL SYLLABLE CIEUC YEO KIYEOKSIOS
+ {0xA0AF, 0xC83D}, //5617 #HANGUL SYLLABLE CIEUC YEO NIEUNCIEUC
+ {0xA0B0, 0xC83E}, //5618 #HANGUL SYLLABLE CIEUC YEO NIEUNHIEUH
+ {0xA0B1, 0xC83F}, //5619 #HANGUL SYLLABLE CIEUC YEO TIKEUT
+ {0xA0B2, 0xC841}, //5620 #HANGUL SYLLABLE CIEUC YEO RIEULKIYEOK
+ {0xA0B3, 0xC842}, //5621 #HANGUL SYLLABLE CIEUC YEO RIEULMIEUM
+ {0xA0B4, 0xC843}, //5622 #HANGUL SYLLABLE CIEUC YEO RIEULPIEUP
+ {0xA0B5, 0xC844}, //5623 #HANGUL SYLLABLE CIEUC YEO RIEULSIOS
+ {0xA0B6, 0xC845}, //5624 #HANGUL SYLLABLE CIEUC YEO RIEULTHIEUTH
+ {0xA0B7, 0xC846}, //5625 #HANGUL SYLLABLE CIEUC YEO RIEULPHIEUPH
+ {0xA0B8, 0xC847}, //5626 #HANGUL SYLLABLE CIEUC YEO RIEULHIEUH
+ {0xA0B9, 0xC84A}, //5627 #HANGUL SYLLABLE CIEUC YEO PIEUPSIOS
+ {0xA0BA, 0xC84B}, //5628 #HANGUL SYLLABLE CIEUC YEO SIOS
+ {0xA0BB, 0xC84E}, //5629 #HANGUL SYLLABLE CIEUC YEO CIEUC
+ {0xA0BC, 0xC84F}, //5630 #HANGUL SYLLABLE CIEUC YEO CHIEUCH
+ {0xA0BD, 0xC850}, //5631 #HANGUL SYLLABLE CIEUC YEO KHIEUKH
+ {0xA0BE, 0xC851}, //5632 #HANGUL SYLLABLE CIEUC YEO THIEUTH
+ {0xA0BF, 0xC852}, //5633 #HANGUL SYLLABLE CIEUC YEO PHIEUPH
+ {0xA0C0, 0xC853}, //5634 #HANGUL SYLLABLE CIEUC YEO HIEUH
+ {0xA0C1, 0xC855}, //5635 #HANGUL SYLLABLE CIEUC YE KIYEOK
+ {0xA0C2, 0xC856}, //5636 #HANGUL SYLLABLE CIEUC YE SSANGKIYEOK
+ {0xA0C3, 0xC857}, //5637 #HANGUL SYLLABLE CIEUC YE KIYEOKSIOS
+ {0xA0C4, 0xC858}, //5638 #HANGUL SYLLABLE CIEUC YE NIEUN
+ {0xA0C5, 0xC859}, //5639 #HANGUL SYLLABLE CIEUC YE NIEUNCIEUC
+ {0xA0C6, 0xC85A}, //5640 #HANGUL SYLLABLE CIEUC YE NIEUNHIEUH
+ {0xA0C7, 0xC85B}, //5641 #HANGUL SYLLABLE CIEUC YE TIKEUT
+ {0xA0C8, 0xC85C}, //5642 #HANGUL SYLLABLE CIEUC YE RIEUL
+ {0xA0C9, 0xC85D}, //5643 #HANGUL SYLLABLE CIEUC YE RIEULKIYEOK
+ {0xA0CA, 0xC85E}, //5644 #HANGUL SYLLABLE CIEUC YE RIEULMIEUM
+ {0xA0CB, 0xC85F}, //5645 #HANGUL SYLLABLE CIEUC YE RIEULPIEUP
+ {0xA0CC, 0xC860}, //5646 #HANGUL SYLLABLE CIEUC YE RIEULSIOS
+ {0xA0CD, 0xC861}, //5647 #HANGUL SYLLABLE CIEUC YE RIEULTHIEUTH
+ {0xA0CE, 0xC862}, //5648 #HANGUL SYLLABLE CIEUC YE RIEULPHIEUPH
+ {0xA0CF, 0xC863}, //5649 #HANGUL SYLLABLE CIEUC YE RIEULHIEUH
+ {0xA0D0, 0xC864}, //5650 #HANGUL SYLLABLE CIEUC YE MIEUM
+ {0xA0D1, 0xC865}, //5651 #HANGUL SYLLABLE CIEUC YE PIEUP
+ {0xA0D2, 0xC866}, //5652 #HANGUL SYLLABLE CIEUC YE PIEUPSIOS
+ {0xA0D3, 0xC867}, //5653 #HANGUL SYLLABLE CIEUC YE SIOS
+ {0xA0D4, 0xC868}, //5654 #HANGUL SYLLABLE CIEUC YE SSANGSIOS
+ {0xA0D5, 0xC869}, //5655 #HANGUL SYLLABLE CIEUC YE IEUNG
+ {0xA0D6, 0xC86A}, //5656 #HANGUL SYLLABLE CIEUC YE CIEUC
+ {0xA0D7, 0xC86B}, //5657 #HANGUL SYLLABLE CIEUC YE CHIEUCH
+ {0xA0D8, 0xC86C}, //5658 #HANGUL SYLLABLE CIEUC YE KHIEUKH
+ {0xA0D9, 0xC86D}, //5659 #HANGUL SYLLABLE CIEUC YE THIEUTH
+ {0xA0DA, 0xC86E}, //5660 #HANGUL SYLLABLE CIEUC YE PHIEUPH
+ {0xA0DB, 0xC86F}, //5661 #HANGUL SYLLABLE CIEUC YE HIEUH
+ {0xA0DC, 0xC872}, //5662 #HANGUL SYLLABLE CIEUC O SSANGKIYEOK
+ {0xA0DD, 0xC873}, //5663 #HANGUL SYLLABLE CIEUC O KIYEOKSIOS
+ {0xA0DE, 0xC875}, //5664 #HANGUL SYLLABLE CIEUC O NIEUNCIEUC
+ {0xA0DF, 0xC876}, //5665 #HANGUL SYLLABLE CIEUC O NIEUNHIEUH
+ {0xA0E0, 0xC877}, //5666 #HANGUL SYLLABLE CIEUC O TIKEUT
+ {0xA0E1, 0xC879}, //5667 #HANGUL SYLLABLE CIEUC O RIEULKIYEOK
+ {0xA0E2, 0xC87B}, //5668 #HANGUL SYLLABLE CIEUC O RIEULPIEUP
+ {0xA0E3, 0xC87C}, //5669 #HANGUL SYLLABLE CIEUC O RIEULSIOS
+ {0xA0E4, 0xC87D}, //5670 #HANGUL SYLLABLE CIEUC O RIEULTHIEUTH
+ {0xA0E5, 0xC87E}, //5671 #HANGUL SYLLABLE CIEUC O RIEULPHIEUPH
+ {0xA0E6, 0xC87F}, //5672 #HANGUL SYLLABLE CIEUC O RIEULHIEUH
+ {0xA0E7, 0xC882}, //5673 #HANGUL SYLLABLE CIEUC O PIEUPSIOS
+ {0xA0E8, 0xC884}, //5674 #HANGUL SYLLABLE CIEUC O SSANGSIOS
+ {0xA0E9, 0xC888}, //5675 #HANGUL SYLLABLE CIEUC O KHIEUKH
+ {0xA0EA, 0xC889}, //5676 #HANGUL SYLLABLE CIEUC O THIEUTH
+ {0xA0EB, 0xC88A}, //5677 #HANGUL SYLLABLE CIEUC O PHIEUPH
+ {0xA0EC, 0xC88E}, //5678 #HANGUL SYLLABLE CIEUC WA SSANGKIYEOK
+ {0xA0ED, 0xC88F}, //5679 #HANGUL SYLLABLE CIEUC WA KIYEOKSIOS
+ {0xA0EE, 0xC890}, //5680 #HANGUL SYLLABLE CIEUC WA NIEUN
+ {0xA0EF, 0xC891}, //5681 #HANGUL SYLLABLE CIEUC WA NIEUNCIEUC
+ {0xA0F0, 0xC892}, //5682 #HANGUL SYLLABLE CIEUC WA NIEUNHIEUH
+ {0xA0F1, 0xC893}, //5683 #HANGUL SYLLABLE CIEUC WA TIKEUT
+ {0xA0F2, 0xC895}, //5684 #HANGUL SYLLABLE CIEUC WA RIEULKIYEOK
+ {0xA0F3, 0xC896}, //5685 #HANGUL SYLLABLE CIEUC WA RIEULMIEUM
+ {0xA0F4, 0xC897}, //5686 #HANGUL SYLLABLE CIEUC WA RIEULPIEUP
+ {0xA0F5, 0xC898}, //5687 #HANGUL SYLLABLE CIEUC WA RIEULSIOS
+ {0xA0F6, 0xC899}, //5688 #HANGUL SYLLABLE CIEUC WA RIEULTHIEUTH
+ {0xA0F7, 0xC89A}, //5689 #HANGUL SYLLABLE CIEUC WA RIEULPHIEUPH
+ {0xA0F8, 0xC89B}, //5690 #HANGUL SYLLABLE CIEUC WA RIEULHIEUH
+ {0xA0F9, 0xC89C}, //5691 #HANGUL SYLLABLE CIEUC WA MIEUM
+ {0xA0FA, 0xC89E}, //5692 #HANGUL SYLLABLE CIEUC WA PIEUPSIOS
+ {0xA0FB, 0xC8A0}, //5693 #HANGUL SYLLABLE CIEUC WA SSANGSIOS
+ {0xA0FC, 0xC8A2}, //5694 #HANGUL SYLLABLE CIEUC WA CIEUC
+ {0xA0FD, 0xC8A3}, //5695 #HANGUL SYLLABLE CIEUC WA CHIEUCH
+ {0xA0FE, 0xC8A4}, //5696 #HANGUL SYLLABLE CIEUC WA KHIEUKH
+ {0xA141, 0xC8A5}, //5697 #HANGUL SYLLABLE CIEUC WA THIEUTH
+ {0xA142, 0xC8A6}, //5698 #HANGUL SYLLABLE CIEUC WA PHIEUPH
+ {0xA143, 0xC8A7}, //5699 #HANGUL SYLLABLE CIEUC WA HIEUH
+ {0xA144, 0xC8A9}, //5700 #HANGUL SYLLABLE CIEUC WAE KIYEOK
+ {0xA145, 0xC8AA}, //5701 #HANGUL SYLLABLE CIEUC WAE SSANGKIYEOK
+ {0xA146, 0xC8AB}, //5702 #HANGUL SYLLABLE CIEUC WAE KIYEOKSIOS
+ {0xA147, 0xC8AC}, //5703 #HANGUL SYLLABLE CIEUC WAE NIEUN
+ {0xA148, 0xC8AD}, //5704 #HANGUL SYLLABLE CIEUC WAE NIEUNCIEUC
+ {0xA149, 0xC8AE}, //5705 #HANGUL SYLLABLE CIEUC WAE NIEUNHIEUH
+ {0xA14A, 0xC8AF}, //5706 #HANGUL SYLLABLE CIEUC WAE TIKEUT
+ {0xA14B, 0xC8B0}, //5707 #HANGUL SYLLABLE CIEUC WAE RIEUL
+ {0xA14C, 0xC8B1}, //5708 #HANGUL SYLLABLE CIEUC WAE RIEULKIYEOK
+ {0xA14D, 0xC8B2}, //5709 #HANGUL SYLLABLE CIEUC WAE RIEULMIEUM
+ {0xA14E, 0xC8B3}, //5710 #HANGUL SYLLABLE CIEUC WAE RIEULPIEUP
+ {0xA14F, 0xC8B4}, //5711 #HANGUL SYLLABLE CIEUC WAE RIEULSIOS
+ {0xA150, 0xC8B5}, //5712 #HANGUL SYLLABLE CIEUC WAE RIEULTHIEUTH
+ {0xA151, 0xC8B6}, //5713 #HANGUL SYLLABLE CIEUC WAE RIEULPHIEUPH
+ {0xA152, 0xC8B7}, //5714 #HANGUL SYLLABLE CIEUC WAE RIEULHIEUH
+ {0xA153, 0xC8B8}, //5715 #HANGUL SYLLABLE CIEUC WAE MIEUM
+ {0xA154, 0xC8B9}, //5716 #HANGUL SYLLABLE CIEUC WAE PIEUP
+ {0xA155, 0xC8BA}, //5717 #HANGUL SYLLABLE CIEUC WAE PIEUPSIOS
+ {0xA156, 0xC8BB}, //5718 #HANGUL SYLLABLE CIEUC WAE SIOS
+ {0xA157, 0xC8BE}, //5719 #HANGUL SYLLABLE CIEUC WAE CIEUC
+ {0xA158, 0xC8BF}, //5720 #HANGUL SYLLABLE CIEUC WAE CHIEUCH
+ {0xA159, 0xC8C0}, //5721 #HANGUL SYLLABLE CIEUC WAE KHIEUKH
+ {0xA15A, 0xC8C1}, //5722 #HANGUL SYLLABLE CIEUC WAE THIEUTH
+ {0xA161, 0xC8C2}, //5723 #HANGUL SYLLABLE CIEUC WAE PHIEUPH
+ {0xA162, 0xC8C3}, //5724 #HANGUL SYLLABLE CIEUC WAE HIEUH
+ {0xA163, 0xC8C5}, //5725 #HANGUL SYLLABLE CIEUC OE KIYEOK
+ {0xA164, 0xC8C6}, //5726 #HANGUL SYLLABLE CIEUC OE SSANGKIYEOK
+ {0xA165, 0xC8C7}, //5727 #HANGUL SYLLABLE CIEUC OE KIYEOKSIOS
+ {0xA166, 0xC8C9}, //5728 #HANGUL SYLLABLE CIEUC OE NIEUNCIEUC
+ {0xA167, 0xC8CA}, //5729 #HANGUL SYLLABLE CIEUC OE NIEUNHIEUH
+ {0xA168, 0xC8CB}, //5730 #HANGUL SYLLABLE CIEUC OE TIKEUT
+ {0xA169, 0xC8CD}, //5731 #HANGUL SYLLABLE CIEUC OE RIEULKIYEOK
+ {0xA16A, 0xC8CE}, //5732 #HANGUL SYLLABLE CIEUC OE RIEULMIEUM
+ {0xA16B, 0xC8CF}, //5733 #HANGUL SYLLABLE CIEUC OE RIEULPIEUP
+ {0xA16C, 0xC8D0}, //5734 #HANGUL SYLLABLE CIEUC OE RIEULSIOS
+ {0xA16D, 0xC8D1}, //5735 #HANGUL SYLLABLE CIEUC OE RIEULTHIEUTH
+ {0xA16E, 0xC8D2}, //5736 #HANGUL SYLLABLE CIEUC OE RIEULPHIEUPH
+ {0xA16F, 0xC8D3}, //5737 #HANGUL SYLLABLE CIEUC OE RIEULHIEUH
+ {0xA170, 0xC8D6}, //5738 #HANGUL SYLLABLE CIEUC OE PIEUPSIOS
+ {0xA171, 0xC8D8}, //5739 #HANGUL SYLLABLE CIEUC OE SSANGSIOS
+ {0xA172, 0xC8DA}, //5740 #HANGUL SYLLABLE CIEUC OE CIEUC
+ {0xA173, 0xC8DB}, //5741 #HANGUL SYLLABLE CIEUC OE CHIEUCH
+ {0xA174, 0xC8DC}, //5742 #HANGUL SYLLABLE CIEUC OE KHIEUKH
+ {0xA175, 0xC8DD}, //5743 #HANGUL SYLLABLE CIEUC OE THIEUTH
+ {0xA176, 0xC8DE}, //5744 #HANGUL SYLLABLE CIEUC OE PHIEUPH
+ {0xA177, 0xC8DF}, //5745 #HANGUL SYLLABLE CIEUC OE HIEUH
+ {0xA178, 0xC8E2}, //5746 #HANGUL SYLLABLE CIEUC YO SSANGKIYEOK
+ {0xA179, 0xC8E3}, //5747 #HANGUL SYLLABLE CIEUC YO KIYEOKSIOS
+ {0xA17A, 0xC8E5}, //5748 #HANGUL SYLLABLE CIEUC YO NIEUNCIEUC
+ {0xA181, 0xC8E6}, //5749 #HANGUL SYLLABLE CIEUC YO NIEUNHIEUH
+ {0xA182, 0xC8E7}, //5750 #HANGUL SYLLABLE CIEUC YO TIKEUT
+ {0xA183, 0xC8E8}, //5751 #HANGUL SYLLABLE CIEUC YO RIEUL
+ {0xA184, 0xC8E9}, //5752 #HANGUL SYLLABLE CIEUC YO RIEULKIYEOK
+ {0xA185, 0xC8EA}, //5753 #HANGUL SYLLABLE CIEUC YO RIEULMIEUM
+ {0xA186, 0xC8EB}, //5754 #HANGUL SYLLABLE CIEUC YO RIEULPIEUP
+ {0xA187, 0xC8EC}, //5755 #HANGUL SYLLABLE CIEUC YO RIEULSIOS
+ {0xA188, 0xC8ED}, //5756 #HANGUL SYLLABLE CIEUC YO RIEULTHIEUTH
+ {0xA189, 0xC8EE}, //5757 #HANGUL SYLLABLE CIEUC YO RIEULPHIEUPH
+ {0xA18A, 0xC8EF}, //5758 #HANGUL SYLLABLE CIEUC YO RIEULHIEUH
+ {0xA18B, 0xC8F0}, //5759 #HANGUL SYLLABLE CIEUC YO MIEUM
+ {0xA18C, 0xC8F1}, //5760 #HANGUL SYLLABLE CIEUC YO PIEUP
+ {0xA18D, 0xC8F2}, //5761 #HANGUL SYLLABLE CIEUC YO PIEUPSIOS
+ {0xA18E, 0xC8F3}, //5762 #HANGUL SYLLABLE CIEUC YO SIOS
+ {0xA18F, 0xC8F4}, //5763 #HANGUL SYLLABLE CIEUC YO SSANGSIOS
+ {0xA190, 0xC8F6}, //5764 #HANGUL SYLLABLE CIEUC YO CIEUC
+ {0xA191, 0xC8F7}, //5765 #HANGUL SYLLABLE CIEUC YO CHIEUCH
+ {0xA192, 0xC8F8}, //5766 #HANGUL SYLLABLE CIEUC YO KHIEUKH
+ {0xA193, 0xC8F9}, //5767 #HANGUL SYLLABLE CIEUC YO THIEUTH
+ {0xA194, 0xC8FA}, //5768 #HANGUL SYLLABLE CIEUC YO PHIEUPH
+ {0xA195, 0xC8FB}, //5769 #HANGUL SYLLABLE CIEUC YO HIEUH
+ {0xA196, 0xC8FE}, //5770 #HANGUL SYLLABLE CIEUC U SSANGKIYEOK
+ {0xA197, 0xC8FF}, //5771 #HANGUL SYLLABLE CIEUC U KIYEOKSIOS
+ {0xA198, 0xC901}, //5772 #HANGUL SYLLABLE CIEUC U NIEUNCIEUC
+ {0xA199, 0xC902}, //5773 #HANGUL SYLLABLE CIEUC U NIEUNHIEUH
+ {0xA19A, 0xC903}, //5774 #HANGUL SYLLABLE CIEUC U TIKEUT
+ {0xA19B, 0xC907}, //5775 #HANGUL SYLLABLE CIEUC U RIEULPIEUP
+ {0xA19C, 0xC908}, //5776 #HANGUL SYLLABLE CIEUC U RIEULSIOS
+ {0xA19D, 0xC909}, //5777 #HANGUL SYLLABLE CIEUC U RIEULTHIEUTH
+ {0xA19E, 0xC90A}, //5778 #HANGUL SYLLABLE CIEUC U RIEULPHIEUPH
+ {0xA19F, 0xC90B}, //5779 #HANGUL SYLLABLE CIEUC U RIEULHIEUH
+ {0xA1A0, 0xC90E}, //5780 #HANGUL SYLLABLE CIEUC U PIEUPSIOS
+ {0xA1A1, 0x3000}, //5781 #IDEOGRAPHIC SPACE
+ {0xA1A2, 0x3001}, //5782 #IDEOGRAPHIC COMMA
+ {0xA1A3, 0x3002}, //5783 #IDEOGRAPHIC FULL STOP
+ {0xA1A4, 0x00B7}, //5784 #MIDDLE DOT
+ {0xA1A5, 0x2025}, //5785 #TWO DOT LEADER
+ {0xA1A6, 0x2026}, //5786 #HORIZONTAL ELLIPSIS
+ {0xA1A7, 0x00A8}, //5787 #DIAERESIS
+ {0xA1A8, 0x3003}, //5788 #DITTO MARK
+ {0xA1A9, 0x00AD}, //5789 #SOFT HYPHEN
+ {0xA1AA, 0x2015}, //5790 #HORIZONTAL BAR
+ {0xA1AB, 0x2225}, //5791 #PARALLEL TO
+ {0xA1AC, 0xFF3C}, //5792 #FULLWIDTH REVERSE SOLIDUS
+ {0xA1AD, 0x223C}, //5793 #TILDE OPERATOR
+ {0xA1AE, 0x2018}, //5794 #LEFT SINGLE QUOTATION MARK
+ {0xA1AF, 0x2019}, //5795 #RIGHT SINGLE QUOTATION MARK
+ {0xA1B0, 0x201C}, //5796 #LEFT DOUBLE QUOTATION MARK
+ {0xA1B1, 0x201D}, //5797 #RIGHT DOUBLE QUOTATION MARK
+ {0xA1B2, 0x3014}, //5798 #LEFT TORTOISE SHELL BRACKET
+ {0xA1B3, 0x3015}, //5799 #RIGHT TORTOISE SHELL BRACKET
+ {0xA1B4, 0x3008}, //5800 #LEFT ANGLE BRACKET
+ {0xA1B5, 0x3009}, //5801 #RIGHT ANGLE BRACKET
+ {0xA1B6, 0x300A}, //5802 #LEFT DOUBLE ANGLE BRACKET
+ {0xA1B7, 0x300B}, //5803 #RIGHT DOUBLE ANGLE BRACKET
+ {0xA1B8, 0x300C}, //5804 #LEFT CORNER BRACKET
+ {0xA1B9, 0x300D}, //5805 #RIGHT CORNER BRACKET
+ {0xA1BA, 0x300E}, //5806 #LEFT WHITE CORNER BRACKET
+ {0xA1BB, 0x300F}, //5807 #RIGHT WHITE CORNER BRACKET
+ {0xA1BC, 0x3010}, //5808 #LEFT BLACK LENTICULAR BRACKET
+ {0xA1BD, 0x3011}, //5809 #RIGHT BLACK LENTICULAR BRACKET
+ {0xA1BE, 0x00B1}, //5810 #PLUS-MINUS SIGN
+ {0xA1BF, 0x00D7}, //5811 #MULTIPLICATION SIGN
+ {0xA1C0, 0x00F7}, //5812 #DIVISION SIGN
+ {0xA1C1, 0x2260}, //5813 #NOT EQUAL TO
+ {0xA1C2, 0x2264}, //5814 #LESS-THAN OR EQUAL TO
+ {0xA1C3, 0x2265}, //5815 #GREATER-THAN OR EQUAL TO
+ {0xA1C4, 0x221E}, //5816 #INFINITY
+ {0xA1C5, 0x2234}, //5817 #THEREFORE
+ {0xA1C6, 0x00B0}, //5818 #DEGREE SIGN
+ {0xA1C7, 0x2032}, //5819 #PRIME
+ {0xA1C8, 0x2033}, //5820 #DOUBLE PRIME
+ {0xA1C9, 0x2103}, //5821 #DEGREE CELSIUS
+ {0xA1CA, 0x212B}, //5822 #ANGSTROM SIGN
+ {0xA1CB, 0xFFE0}, //5823 #FULLWIDTH CENT SIGN
+ {0xA1CC, 0xFFE1}, //5824 #FULLWIDTH POUND SIGN
+ {0xA1CD, 0xFFE5}, //5825 #FULLWIDTH YEN SIGN
+ {0xA1CE, 0x2642}, //5826 #MALE SIGN
+ {0xA1CF, 0x2640}, //5827 #FEMALE SIGN
+ {0xA1D0, 0x2220}, //5828 #ANGLE
+ {0xA1D1, 0x22A5}, //5829 #UP TACK
+ {0xA1D2, 0x2312}, //5830 #ARC
+ {0xA1D3, 0x2202}, //5831 #PARTIAL DIFFERENTIAL
+ {0xA1D4, 0x2207}, //5832 #NABLA
+ {0xA1D5, 0x2261}, //5833 #IDENTICAL TO
+ {0xA1D6, 0x2252}, //5834 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ {0xA1D7, 0x00A7}, //5835 #SECTION SIGN
+ {0xA1D8, 0x203B}, //5836 #REFERENCE MARK
+ {0xA1D9, 0x2606}, //5837 #WHITE STAR
+ {0xA1DA, 0x2605}, //5838 #BLACK STAR
+ {0xA1DB, 0x25CB}, //5839 #WHITE CIRCLE
+ {0xA1DC, 0x25CF}, //5840 #BLACK CIRCLE
+ {0xA1DD, 0x25CE}, //5841 #BULLSEYE
+ {0xA1DE, 0x25C7}, //5842 #WHITE DIAMOND
+ {0xA1DF, 0x25C6}, //5843 #BLACK DIAMOND
+ {0xA1E0, 0x25A1}, //5844 #WHITE SQUARE
+ {0xA1E1, 0x25A0}, //5845 #BLACK SQUARE
+ {0xA1E2, 0x25B3}, //5846 #WHITE UP-POINTING TRIANGLE
+ {0xA1E3, 0x25B2}, //5847 #BLACK UP-POINTING TRIANGLE
+ {0xA1E4, 0x25BD}, //5848 #WHITE DOWN-POINTING TRIANGLE
+ {0xA1E5, 0x25BC}, //5849 #BLACK DOWN-POINTING TRIANGLE
+ {0xA1E6, 0x2192}, //5850 #RIGHTWARDS ARROW
+ {0xA1E7, 0x2190}, //5851 #LEFTWARDS ARROW
+ {0xA1E8, 0x2191}, //5852 #UPWARDS ARROW
+ {0xA1E9, 0x2193}, //5853 #DOWNWARDS ARROW
+ {0xA1EA, 0x2194}, //5854 #LEFT RIGHT ARROW
+ {0xA1EB, 0x3013}, //5855 #GETA MARK
+ {0xA1EC, 0x226A}, //5856 #MUCH LESS-THAN
+ {0xA1ED, 0x226B}, //5857 #MUCH GREATER-THAN
+ {0xA1EE, 0x221A}, //5858 #SQUARE ROOT
+ {0xA1EF, 0x223D}, //5859 #REVERSED TILDE
+ {0xA1F0, 0x221D}, //5860 #PROPORTIONAL TO
+ {0xA1F1, 0x2235}, //5861 #BECAUSE
+ {0xA1F2, 0x222B}, //5862 #INTEGRAL
+ {0xA1F3, 0x222C}, //5863 #DOUBLE INTEGRAL
+ {0xA1F4, 0x2208}, //5864 #ELEMENT OF
+ {0xA1F5, 0x220B}, //5865 #CONTAINS AS MEMBER
+ {0xA1F6, 0x2286}, //5866 #SUBSET OF OR EQUAL TO
+ {0xA1F7, 0x2287}, //5867 #SUPERSET OF OR EQUAL TO
+ {0xA1F8, 0x2282}, //5868 #SUBSET OF
+ {0xA1F9, 0x2283}, //5869 #SUPERSET OF
+ {0xA1FA, 0x222A}, //5870 #UNION
+ {0xA1FB, 0x2229}, //5871 #INTERSECTION
+ {0xA1FC, 0x2227}, //5872 #LOGICAL AND
+ {0xA1FD, 0x2228}, //5873 #LOGICAL OR
+ {0xA1FE, 0xFFE2}, //5874 #FULLWIDTH NOT SIGN
+ {0xA241, 0xC910}, //5875 #HANGUL SYLLABLE CIEUC U SSANGSIOS
+ {0xA242, 0xC912}, //5876 #HANGUL SYLLABLE CIEUC U CIEUC
+ {0xA243, 0xC913}, //5877 #HANGUL SYLLABLE CIEUC U CHIEUCH
+ {0xA244, 0xC914}, //5878 #HANGUL SYLLABLE CIEUC U KHIEUKH
+ {0xA245, 0xC915}, //5879 #HANGUL SYLLABLE CIEUC U THIEUTH
+ {0xA246, 0xC916}, //5880 #HANGUL SYLLABLE CIEUC U PHIEUPH
+ {0xA247, 0xC917}, //5881 #HANGUL SYLLABLE CIEUC U HIEUH
+ {0xA248, 0xC919}, //5882 #HANGUL SYLLABLE CIEUC WEO KIYEOK
+ {0xA249, 0xC91A}, //5883 #HANGUL SYLLABLE CIEUC WEO SSANGKIYEOK
+ {0xA24A, 0xC91B}, //5884 #HANGUL SYLLABLE CIEUC WEO KIYEOKSIOS
+ {0xA24B, 0xC91C}, //5885 #HANGUL SYLLABLE CIEUC WEO NIEUN
+ {0xA24C, 0xC91D}, //5886 #HANGUL SYLLABLE CIEUC WEO NIEUNCIEUC
+ {0xA24D, 0xC91E}, //5887 #HANGUL SYLLABLE CIEUC WEO NIEUNHIEUH
+ {0xA24E, 0xC91F}, //5888 #HANGUL SYLLABLE CIEUC WEO TIKEUT
+ {0xA24F, 0xC920}, //5889 #HANGUL SYLLABLE CIEUC WEO RIEUL
+ {0xA250, 0xC921}, //5890 #HANGUL SYLLABLE CIEUC WEO RIEULKIYEOK
+ {0xA251, 0xC922}, //5891 #HANGUL SYLLABLE CIEUC WEO RIEULMIEUM
+ {0xA252, 0xC923}, //5892 #HANGUL SYLLABLE CIEUC WEO RIEULPIEUP
+ {0xA253, 0xC924}, //5893 #HANGUL SYLLABLE CIEUC WEO RIEULSIOS
+ {0xA254, 0xC925}, //5894 #HANGUL SYLLABLE CIEUC WEO RIEULTHIEUTH
+ {0xA255, 0xC926}, //5895 #HANGUL SYLLABLE CIEUC WEO RIEULPHIEUPH
+ {0xA256, 0xC927}, //5896 #HANGUL SYLLABLE CIEUC WEO RIEULHIEUH
+ {0xA257, 0xC928}, //5897 #HANGUL SYLLABLE CIEUC WEO MIEUM
+ {0xA258, 0xC929}, //5898 #HANGUL SYLLABLE CIEUC WEO PIEUP
+ {0xA259, 0xC92A}, //5899 #HANGUL SYLLABLE CIEUC WEO PIEUPSIOS
+ {0xA25A, 0xC92B}, //5900 #HANGUL SYLLABLE CIEUC WEO SIOS
+ {0xA261, 0xC92D}, //5901 #HANGUL SYLLABLE CIEUC WEO IEUNG
+ {0xA262, 0xC92E}, //5902 #HANGUL SYLLABLE CIEUC WEO CIEUC
+ {0xA263, 0xC92F}, //5903 #HANGUL SYLLABLE CIEUC WEO CHIEUCH
+ {0xA264, 0xC930}, //5904 #HANGUL SYLLABLE CIEUC WEO KHIEUKH
+ {0xA265, 0xC931}, //5905 #HANGUL SYLLABLE CIEUC WEO THIEUTH
+ {0xA266, 0xC932}, //5906 #HANGUL SYLLABLE CIEUC WEO PHIEUPH
+ {0xA267, 0xC933}, //5907 #HANGUL SYLLABLE CIEUC WEO HIEUH
+ {0xA268, 0xC935}, //5908 #HANGUL SYLLABLE CIEUC WE KIYEOK
+ {0xA269, 0xC936}, //5909 #HANGUL SYLLABLE CIEUC WE SSANGKIYEOK
+ {0xA26A, 0xC937}, //5910 #HANGUL SYLLABLE CIEUC WE KIYEOKSIOS
+ {0xA26B, 0xC938}, //5911 #HANGUL SYLLABLE CIEUC WE NIEUN
+ {0xA26C, 0xC939}, //5912 #HANGUL SYLLABLE CIEUC WE NIEUNCIEUC
+ {0xA26D, 0xC93A}, //5913 #HANGUL SYLLABLE CIEUC WE NIEUNHIEUH
+ {0xA26E, 0xC93B}, //5914 #HANGUL SYLLABLE CIEUC WE TIKEUT
+ {0xA26F, 0xC93C}, //5915 #HANGUL SYLLABLE CIEUC WE RIEUL
+ {0xA270, 0xC93D}, //5916 #HANGUL SYLLABLE CIEUC WE RIEULKIYEOK
+ {0xA271, 0xC93E}, //5917 #HANGUL SYLLABLE CIEUC WE RIEULMIEUM
+ {0xA272, 0xC93F}, //5918 #HANGUL SYLLABLE CIEUC WE RIEULPIEUP
+ {0xA273, 0xC940}, //5919 #HANGUL SYLLABLE CIEUC WE RIEULSIOS
+ {0xA274, 0xC941}, //5920 #HANGUL SYLLABLE CIEUC WE RIEULTHIEUTH
+ {0xA275, 0xC942}, //5921 #HANGUL SYLLABLE CIEUC WE RIEULPHIEUPH
+ {0xA276, 0xC943}, //5922 #HANGUL SYLLABLE CIEUC WE RIEULHIEUH
+ {0xA277, 0xC944}, //5923 #HANGUL SYLLABLE CIEUC WE MIEUM
+ {0xA278, 0xC945}, //5924 #HANGUL SYLLABLE CIEUC WE PIEUP
+ {0xA279, 0xC946}, //5925 #HANGUL SYLLABLE CIEUC WE PIEUPSIOS
+ {0xA27A, 0xC947}, //5926 #HANGUL SYLLABLE CIEUC WE SIOS
+ {0xA281, 0xC948}, //5927 #HANGUL SYLLABLE CIEUC WE SSANGSIOS
+ {0xA282, 0xC949}, //5928 #HANGUL SYLLABLE CIEUC WE IEUNG
+ {0xA283, 0xC94A}, //5929 #HANGUL SYLLABLE CIEUC WE CIEUC
+ {0xA284, 0xC94B}, //5930 #HANGUL SYLLABLE CIEUC WE CHIEUCH
+ {0xA285, 0xC94C}, //5931 #HANGUL SYLLABLE CIEUC WE KHIEUKH
+ {0xA286, 0xC94D}, //5932 #HANGUL SYLLABLE CIEUC WE THIEUTH
+ {0xA287, 0xC94E}, //5933 #HANGUL SYLLABLE CIEUC WE PHIEUPH
+ {0xA288, 0xC94F}, //5934 #HANGUL SYLLABLE CIEUC WE HIEUH
+ {0xA289, 0xC952}, //5935 #HANGUL SYLLABLE CIEUC WI SSANGKIYEOK
+ {0xA28A, 0xC953}, //5936 #HANGUL SYLLABLE CIEUC WI KIYEOKSIOS
+ {0xA28B, 0xC955}, //5937 #HANGUL SYLLABLE CIEUC WI NIEUNCIEUC
+ {0xA28C, 0xC956}, //5938 #HANGUL SYLLABLE CIEUC WI NIEUNHIEUH
+ {0xA28D, 0xC957}, //5939 #HANGUL SYLLABLE CIEUC WI TIKEUT
+ {0xA28E, 0xC959}, //5940 #HANGUL SYLLABLE CIEUC WI RIEULKIYEOK
+ {0xA28F, 0xC95A}, //5941 #HANGUL SYLLABLE CIEUC WI RIEULMIEUM
+ {0xA290, 0xC95B}, //5942 #HANGUL SYLLABLE CIEUC WI RIEULPIEUP
+ {0xA291, 0xC95C}, //5943 #HANGUL SYLLABLE CIEUC WI RIEULSIOS
+ {0xA292, 0xC95D}, //5944 #HANGUL SYLLABLE CIEUC WI RIEULTHIEUTH
+ {0xA293, 0xC95E}, //5945 #HANGUL SYLLABLE CIEUC WI RIEULPHIEUPH
+ {0xA294, 0xC95F}, //5946 #HANGUL SYLLABLE CIEUC WI RIEULHIEUH
+ {0xA295, 0xC962}, //5947 #HANGUL SYLLABLE CIEUC WI PIEUPSIOS
+ {0xA296, 0xC964}, //5948 #HANGUL SYLLABLE CIEUC WI SSANGSIOS
+ {0xA297, 0xC965}, //5949 #HANGUL SYLLABLE CIEUC WI IEUNG
+ {0xA298, 0xC966}, //5950 #HANGUL SYLLABLE CIEUC WI CIEUC
+ {0xA299, 0xC967}, //5951 #HANGUL SYLLABLE CIEUC WI CHIEUCH
+ {0xA29A, 0xC968}, //5952 #HANGUL SYLLABLE CIEUC WI KHIEUKH
+ {0xA29B, 0xC969}, //5953 #HANGUL SYLLABLE CIEUC WI THIEUTH
+ {0xA29C, 0xC96A}, //5954 #HANGUL SYLLABLE CIEUC WI PHIEUPH
+ {0xA29D, 0xC96B}, //5955 #HANGUL SYLLABLE CIEUC WI HIEUH
+ {0xA29E, 0xC96D}, //5956 #HANGUL SYLLABLE CIEUC YU KIYEOK
+ {0xA29F, 0xC96E}, //5957 #HANGUL SYLLABLE CIEUC YU SSANGKIYEOK
+ {0xA2A0, 0xC96F}, //5958 #HANGUL SYLLABLE CIEUC YU KIYEOKSIOS
+ {0xA2A1, 0x21D2}, //5959 #RIGHTWARDS DOUBLE ARROW
+ {0xA2A2, 0x21D4}, //5960 #LEFT RIGHT DOUBLE ARROW
+ {0xA2A3, 0x2200}, //5961 #FOR ALL
+ {0xA2A4, 0x2203}, //5962 #THERE EXISTS
+ {0xA2A5, 0x00B4}, //5963 #ACUTE ACCENT
+ {0xA2A6, 0xFF5E}, //5964 #FULLWIDTH TILDE
+ {0xA2A7, 0x02C7}, //5965 #CARON
+ {0xA2A8, 0x02D8}, //5966 #BREVE
+ {0xA2A9, 0x02DD}, //5967 #DOUBLE ACUTE ACCENT
+ {0xA2AA, 0x02DA}, //5968 #RING ABOVE
+ {0xA2AB, 0x02D9}, //5969 #DOT ABOVE
+ {0xA2AC, 0x00B8}, //5970 #CEDILLA
+ {0xA2AD, 0x02DB}, //5971 #OGONEK
+ {0xA2AE, 0x00A1}, //5972 #INVERTED EXCLAMATION MARK
+ {0xA2AF, 0x00BF}, //5973 #INVERTED QUESTION MARK
+ {0xA2B0, 0x02D0}, //5974 #MODIFIER LETTER TRIANGULAR COLON
+ {0xA2B1, 0x222E}, //5975 #CONTOUR INTEGRAL
+ {0xA2B2, 0x2211}, //5976 #N-ARY SUMMATION
+ {0xA2B3, 0x220F}, //5977 #N-ARY PRODUCT
+ {0xA2B4, 0x00A4}, //5978 #CURRENCY SIGN
+ {0xA2B5, 0x2109}, //5979 #DEGREE FAHRENHEIT
+ {0xA2B6, 0x2030}, //5980 #PER MILLE SIGN
+ {0xA2B7, 0x25C1}, //5981 #WHITE LEFT-POINTING TRIANGLE
+ {0xA2B8, 0x25C0}, //5982 #BLACK LEFT-POINTING TRIANGLE
+ {0xA2B9, 0x25B7}, //5983 #WHITE RIGHT-POINTING TRIANGLE
+ {0xA2BA, 0x25B6}, //5984 #BLACK RIGHT-POINTING TRIANGLE
+ {0xA2BB, 0x2664}, //5985 #WHITE SPADE SUIT
+ {0xA2BC, 0x2660}, //5986 #BLACK SPADE SUIT
+ {0xA2BD, 0x2661}, //5987 #WHITE HEART SUIT
+ {0xA2BE, 0x2665}, //5988 #BLACK HEART SUIT
+ {0xA2BF, 0x2667}, //5989 #WHITE CLUB SUIT
+ {0xA2C0, 0x2663}, //5990 #BLACK CLUB SUIT
+ {0xA2C1, 0x2299}, //5991 #CIRCLED DOT OPERATOR
+ {0xA2C2, 0x25C8}, //5992 #WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+ {0xA2C3, 0x25A3}, //5993 #WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+ {0xA2C4, 0x25D0}, //5994 #CIRCLE WITH LEFT HALF BLACK
+ {0xA2C5, 0x25D1}, //5995 #CIRCLE WITH RIGHT HALF BLACK
+ {0xA2C6, 0x2592}, //5996 #MEDIUM SHADE
+ {0xA2C7, 0x25A4}, //5997 #SQUARE WITH HORIZONTAL FILL
+ {0xA2C8, 0x25A5}, //5998 #SQUARE WITH VERTICAL FILL
+ {0xA2C9, 0x25A8}, //5999 #SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+ {0xA2CA, 0x25A7}, //6000 #SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+ {0xA2CB, 0x25A6}, //6001 #SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+ {0xA2CC, 0x25A9}, //6002 #SQUARE WITH DIAGONAL CROSSHATCH FILL
+ {0xA2CD, 0x2668}, //6003 #HOT SPRINGS
+ {0xA2CE, 0x260F}, //6004 #WHITE TELEPHONE
+ {0xA2CF, 0x260E}, //6005 #BLACK TELEPHONE
+ {0xA2D0, 0x261C}, //6006 #WHITE LEFT POINTING INDEX
+ {0xA2D1, 0x261E}, //6007 #WHITE RIGHT POINTING INDEX
+ {0xA2D2, 0x00B6}, //6008 #PILCROW SIGN
+ {0xA2D3, 0x2020}, //6009 #DAGGER
+ {0xA2D4, 0x2021}, //6010 #DOUBLE DAGGER
+ {0xA2D5, 0x2195}, //6011 #UP DOWN ARROW
+ {0xA2D6, 0x2197}, //6012 #NORTH EAST ARROW
+ {0xA2D7, 0x2199}, //6013 #SOUTH WEST ARROW
+ {0xA2D8, 0x2196}, //6014 #NORTH WEST ARROW
+ {0xA2D9, 0x2198}, //6015 #SOUTH EAST ARROW
+ {0xA2DA, 0x266D}, //6016 #MUSIC FLAT SIGN
+ {0xA2DB, 0x2669}, //6017 #QUARTER NOTE
+ {0xA2DC, 0x266A}, //6018 #EIGHTH NOTE
+ {0xA2DD, 0x266C}, //6019 #BEAMED SIXTEENTH NOTES
+ {0xA2DE, 0x327F}, //6020 #KOREAN STANDARD SYMBOL
+ {0xA2DF, 0x321C}, //6021 #PARENTHESIZED HANGUL CIEUC U
+ {0xA2E0, 0x2116}, //6022 #NUMERO SIGN
+ {0xA2E1, 0x33C7}, //6023 #SQUARE CO
+ {0xA2E2, 0x2122}, //6024 #TRADE MARK SIGN
+ {0xA2E3, 0x33C2}, //6025 #SQUARE AM
+ {0xA2E4, 0x33D8}, //6026 #SQUARE PM
+ {0xA2E5, 0x2121}, //6027 #TELEPHONE SIGN
+ {0xA2E6, 0x20AC}, //6028 #EURO SIGN
+ {0xA2E7, 0x00AE}, //6029 #REGISTERED SIGN
+ {0xA341, 0xC971}, //6030 #HANGUL SYLLABLE CIEUC YU NIEUNCIEUC
+ {0xA342, 0xC972}, //6031 #HANGUL SYLLABLE CIEUC YU NIEUNHIEUH
+ {0xA343, 0xC973}, //6032 #HANGUL SYLLABLE CIEUC YU TIKEUT
+ {0xA344, 0xC975}, //6033 #HANGUL SYLLABLE CIEUC YU RIEULKIYEOK
+ {0xA345, 0xC976}, //6034 #HANGUL SYLLABLE CIEUC YU RIEULMIEUM
+ {0xA346, 0xC977}, //6035 #HANGUL SYLLABLE CIEUC YU RIEULPIEUP
+ {0xA347, 0xC978}, //6036 #HANGUL SYLLABLE CIEUC YU RIEULSIOS
+ {0xA348, 0xC979}, //6037 #HANGUL SYLLABLE CIEUC YU RIEULTHIEUTH
+ {0xA349, 0xC97A}, //6038 #HANGUL SYLLABLE CIEUC YU RIEULPHIEUPH
+ {0xA34A, 0xC97B}, //6039 #HANGUL SYLLABLE CIEUC YU RIEULHIEUH
+ {0xA34B, 0xC97D}, //6040 #HANGUL SYLLABLE CIEUC YU PIEUP
+ {0xA34C, 0xC97E}, //6041 #HANGUL SYLLABLE CIEUC YU PIEUPSIOS
+ {0xA34D, 0xC97F}, //6042 #HANGUL SYLLABLE CIEUC YU SIOS
+ {0xA34E, 0xC980}, //6043 #HANGUL SYLLABLE CIEUC YU SSANGSIOS
+ {0xA34F, 0xC981}, //6044 #HANGUL SYLLABLE CIEUC YU IEUNG
+ {0xA350, 0xC982}, //6045 #HANGUL SYLLABLE CIEUC YU CIEUC
+ {0xA351, 0xC983}, //6046 #HANGUL SYLLABLE CIEUC YU CHIEUCH
+ {0xA352, 0xC984}, //6047 #HANGUL SYLLABLE CIEUC YU KHIEUKH
+ {0xA353, 0xC985}, //6048 #HANGUL SYLLABLE CIEUC YU THIEUTH
+ {0xA354, 0xC986}, //6049 #HANGUL SYLLABLE CIEUC YU PHIEUPH
+ {0xA355, 0xC987}, //6050 #HANGUL SYLLABLE CIEUC YU HIEUH
+ {0xA356, 0xC98A}, //6051 #HANGUL SYLLABLE CIEUC EU SSANGKIYEOK
+ {0xA357, 0xC98B}, //6052 #HANGUL SYLLABLE CIEUC EU KIYEOKSIOS
+ {0xA358, 0xC98D}, //6053 #HANGUL SYLLABLE CIEUC EU NIEUNCIEUC
+ {0xA359, 0xC98E}, //6054 #HANGUL SYLLABLE CIEUC EU NIEUNHIEUH
+ {0xA35A, 0xC98F}, //6055 #HANGUL SYLLABLE CIEUC EU TIKEUT
+ {0xA361, 0xC991}, //6056 #HANGUL SYLLABLE CIEUC EU RIEULKIYEOK
+ {0xA362, 0xC992}, //6057 #HANGUL SYLLABLE CIEUC EU RIEULMIEUM
+ {0xA363, 0xC993}, //6058 #HANGUL SYLLABLE CIEUC EU RIEULPIEUP
+ {0xA364, 0xC994}, //6059 #HANGUL SYLLABLE CIEUC EU RIEULSIOS
+ {0xA365, 0xC995}, //6060 #HANGUL SYLLABLE CIEUC EU RIEULTHIEUTH
+ {0xA366, 0xC996}, //6061 #HANGUL SYLLABLE CIEUC EU RIEULPHIEUPH
+ {0xA367, 0xC997}, //6062 #HANGUL SYLLABLE CIEUC EU RIEULHIEUH
+ {0xA368, 0xC99A}, //6063 #HANGUL SYLLABLE CIEUC EU PIEUPSIOS
+ {0xA369, 0xC99C}, //6064 #HANGUL SYLLABLE CIEUC EU SSANGSIOS
+ {0xA36A, 0xC99E}, //6065 #HANGUL SYLLABLE CIEUC EU CIEUC
+ {0xA36B, 0xC99F}, //6066 #HANGUL SYLLABLE CIEUC EU CHIEUCH
+ {0xA36C, 0xC9A0}, //6067 #HANGUL SYLLABLE CIEUC EU KHIEUKH
+ {0xA36D, 0xC9A1}, //6068 #HANGUL SYLLABLE CIEUC EU THIEUTH
+ {0xA36E, 0xC9A2}, //6069 #HANGUL SYLLABLE CIEUC EU PHIEUPH
+ {0xA36F, 0xC9A3}, //6070 #HANGUL SYLLABLE CIEUC EU HIEUH
+ {0xA370, 0xC9A4}, //6071 #HANGUL SYLLABLE CIEUC YI
+ {0xA371, 0xC9A5}, //6072 #HANGUL SYLLABLE CIEUC YI KIYEOK
+ {0xA372, 0xC9A6}, //6073 #HANGUL SYLLABLE CIEUC YI SSANGKIYEOK
+ {0xA373, 0xC9A7}, //6074 #HANGUL SYLLABLE CIEUC YI KIYEOKSIOS
+ {0xA374, 0xC9A8}, //6075 #HANGUL SYLLABLE CIEUC YI NIEUN
+ {0xA375, 0xC9A9}, //6076 #HANGUL SYLLABLE CIEUC YI NIEUNCIEUC
+ {0xA376, 0xC9AA}, //6077 #HANGUL SYLLABLE CIEUC YI NIEUNHIEUH
+ {0xA377, 0xC9AB}, //6078 #HANGUL SYLLABLE CIEUC YI TIKEUT
+ {0xA378, 0xC9AC}, //6079 #HANGUL SYLLABLE CIEUC YI RIEUL
+ {0xA379, 0xC9AD}, //6080 #HANGUL SYLLABLE CIEUC YI RIEULKIYEOK
+ {0xA37A, 0xC9AE}, //6081 #HANGUL SYLLABLE CIEUC YI RIEULMIEUM
+ {0xA381, 0xC9AF}, //6082 #HANGUL SYLLABLE CIEUC YI RIEULPIEUP
+ {0xA382, 0xC9B0}, //6083 #HANGUL SYLLABLE CIEUC YI RIEULSIOS
+ {0xA383, 0xC9B1}, //6084 #HANGUL SYLLABLE CIEUC YI RIEULTHIEUTH
+ {0xA384, 0xC9B2}, //6085 #HANGUL SYLLABLE CIEUC YI RIEULPHIEUPH
+ {0xA385, 0xC9B3}, //6086 #HANGUL SYLLABLE CIEUC YI RIEULHIEUH
+ {0xA386, 0xC9B4}, //6087 #HANGUL SYLLABLE CIEUC YI MIEUM
+ {0xA387, 0xC9B5}, //6088 #HANGUL SYLLABLE CIEUC YI PIEUP
+ {0xA388, 0xC9B6}, //6089 #HANGUL SYLLABLE CIEUC YI PIEUPSIOS
+ {0xA389, 0xC9B7}, //6090 #HANGUL SYLLABLE CIEUC YI SIOS
+ {0xA38A, 0xC9B8}, //6091 #HANGUL SYLLABLE CIEUC YI SSANGSIOS
+ {0xA38B, 0xC9B9}, //6092 #HANGUL SYLLABLE CIEUC YI IEUNG
+ {0xA38C, 0xC9BA}, //6093 #HANGUL SYLLABLE CIEUC YI CIEUC
+ {0xA38D, 0xC9BB}, //6094 #HANGUL SYLLABLE CIEUC YI CHIEUCH
+ {0xA38E, 0xC9BC}, //6095 #HANGUL SYLLABLE CIEUC YI KHIEUKH
+ {0xA38F, 0xC9BD}, //6096 #HANGUL SYLLABLE CIEUC YI THIEUTH
+ {0xA390, 0xC9BE}, //6097 #HANGUL SYLLABLE CIEUC YI PHIEUPH
+ {0xA391, 0xC9BF}, //6098 #HANGUL SYLLABLE CIEUC YI HIEUH
+ {0xA392, 0xC9C2}, //6099 #HANGUL SYLLABLE CIEUC I SSANGKIYEOK
+ {0xA393, 0xC9C3}, //6100 #HANGUL SYLLABLE CIEUC I KIYEOKSIOS
+ {0xA394, 0xC9C5}, //6101 #HANGUL SYLLABLE CIEUC I NIEUNCIEUC
+ {0xA395, 0xC9C6}, //6102 #HANGUL SYLLABLE CIEUC I NIEUNHIEUH
+ {0xA396, 0xC9C9}, //6103 #HANGUL SYLLABLE CIEUC I RIEULKIYEOK
+ {0xA397, 0xC9CB}, //6104 #HANGUL SYLLABLE CIEUC I RIEULPIEUP
+ {0xA398, 0xC9CC}, //6105 #HANGUL SYLLABLE CIEUC I RIEULSIOS
+ {0xA399, 0xC9CD}, //6106 #HANGUL SYLLABLE CIEUC I RIEULTHIEUTH
+ {0xA39A, 0xC9CE}, //6107 #HANGUL SYLLABLE CIEUC I RIEULPHIEUPH
+ {0xA39B, 0xC9CF}, //6108 #HANGUL SYLLABLE CIEUC I RIEULHIEUH
+ {0xA39C, 0xC9D2}, //6109 #HANGUL SYLLABLE CIEUC I PIEUPSIOS
+ {0xA39D, 0xC9D4}, //6110 #HANGUL SYLLABLE CIEUC I SSANGSIOS
+ {0xA39E, 0xC9D7}, //6111 #HANGUL SYLLABLE CIEUC I CHIEUCH
+ {0xA39F, 0xC9D8}, //6112 #HANGUL SYLLABLE CIEUC I KHIEUKH
+ {0xA3A0, 0xC9DB}, //6113 #HANGUL SYLLABLE CIEUC I HIEUH
+ {0xA3A1, 0xFF01}, //6114 #FULLWIDTH EXCLAMATION MARK
+ {0xA3A2, 0xFF02}, //6115 #FULLWIDTH QUOTATION MARK
+ {0xA3A3, 0xFF03}, //6116 #FULLWIDTH NUMBER SIGN
+ {0xA3A4, 0xFF04}, //6117 #FULLWIDTH DOLLAR SIGN
+ {0xA3A5, 0xFF05}, //6118 #FULLWIDTH PERCENT SIGN
+ {0xA3A6, 0xFF06}, //6119 #FULLWIDTH AMPERSAND
+ {0xA3A7, 0xFF07}, //6120 #FULLWIDTH APOSTROPHE
+ {0xA3A8, 0xFF08}, //6121 #FULLWIDTH LEFT PARENTHESIS
+ {0xA3A9, 0xFF09}, //6122 #FULLWIDTH RIGHT PARENTHESIS
+ {0xA3AA, 0xFF0A}, //6123 #FULLWIDTH ASTERISK
+ {0xA3AB, 0xFF0B}, //6124 #FULLWIDTH PLUS SIGN
+ {0xA3AC, 0xFF0C}, //6125 #FULLWIDTH COMMA
+ {0xA3AD, 0xFF0D}, //6126 #FULLWIDTH HYPHEN-MINUS
+ {0xA3AE, 0xFF0E}, //6127 #FULLWIDTH FULL STOP
+ {0xA3AF, 0xFF0F}, //6128 #FULLWIDTH SOLIDUS
+ {0xA3B0, 0xFF10}, //6129 #FULLWIDTH DIGIT ZERO
+ {0xA3B1, 0xFF11}, //6130 #FULLWIDTH DIGIT ONE
+ {0xA3B2, 0xFF12}, //6131 #FULLWIDTH DIGIT TWO
+ {0xA3B3, 0xFF13}, //6132 #FULLWIDTH DIGIT THREE
+ {0xA3B4, 0xFF14}, //6133 #FULLWIDTH DIGIT FOUR
+ {0xA3B5, 0xFF15}, //6134 #FULLWIDTH DIGIT FIVE
+ {0xA3B6, 0xFF16}, //6135 #FULLWIDTH DIGIT SIX
+ {0xA3B7, 0xFF17}, //6136 #FULLWIDTH DIGIT SEVEN
+ {0xA3B8, 0xFF18}, //6137 #FULLWIDTH DIGIT EIGHT
+ {0xA3B9, 0xFF19}, //6138 #FULLWIDTH DIGIT NINE
+ {0xA3BA, 0xFF1A}, //6139 #FULLWIDTH COLON
+ {0xA3BB, 0xFF1B}, //6140 #FULLWIDTH SEMICOLON
+ {0xA3BC, 0xFF1C}, //6141 #FULLWIDTH LESS-THAN SIGN
+ {0xA3BD, 0xFF1D}, //6142 #FULLWIDTH EQUALS SIGN
+ {0xA3BE, 0xFF1E}, //6143 #FULLWIDTH GREATER-THAN SIGN
+ {0xA3BF, 0xFF1F}, //6144 #FULLWIDTH QUESTION MARK
+ {0xA3C0, 0xFF20}, //6145 #FULLWIDTH COMMERCIAL AT
+ {0xA3C1, 0xFF21}, //6146 #FULLWIDTH LATIN CAPITAL LETTER A
+ {0xA3C2, 0xFF22}, //6147 #FULLWIDTH LATIN CAPITAL LETTER B
+ {0xA3C3, 0xFF23}, //6148 #FULLWIDTH LATIN CAPITAL LETTER C
+ {0xA3C4, 0xFF24}, //6149 #FULLWIDTH LATIN CAPITAL LETTER D
+ {0xA3C5, 0xFF25}, //6150 #FULLWIDTH LATIN CAPITAL LETTER E
+ {0xA3C6, 0xFF26}, //6151 #FULLWIDTH LATIN CAPITAL LETTER F
+ {0xA3C7, 0xFF27}, //6152 #FULLWIDTH LATIN CAPITAL LETTER G
+ {0xA3C8, 0xFF28}, //6153 #FULLWIDTH LATIN CAPITAL LETTER H
+ {0xA3C9, 0xFF29}, //6154 #FULLWIDTH LATIN CAPITAL LETTER I
+ {0xA3CA, 0xFF2A}, //6155 #FULLWIDTH LATIN CAPITAL LETTER J
+ {0xA3CB, 0xFF2B}, //6156 #FULLWIDTH LATIN CAPITAL LETTER K
+ {0xA3CC, 0xFF2C}, //6157 #FULLWIDTH LATIN CAPITAL LETTER L
+ {0xA3CD, 0xFF2D}, //6158 #FULLWIDTH LATIN CAPITAL LETTER M
+ {0xA3CE, 0xFF2E}, //6159 #FULLWIDTH LATIN CAPITAL LETTER N
+ {0xA3CF, 0xFF2F}, //6160 #FULLWIDTH LATIN CAPITAL LETTER O
+ {0xA3D0, 0xFF30}, //6161 #FULLWIDTH LATIN CAPITAL LETTER P
+ {0xA3D1, 0xFF31}, //6162 #FULLWIDTH LATIN CAPITAL LETTER Q
+ {0xA3D2, 0xFF32}, //6163 #FULLWIDTH LATIN CAPITAL LETTER R
+ {0xA3D3, 0xFF33}, //6164 #FULLWIDTH LATIN CAPITAL LETTER S
+ {0xA3D4, 0xFF34}, //6165 #FULLWIDTH LATIN CAPITAL LETTER T
+ {0xA3D5, 0xFF35}, //6166 #FULLWIDTH LATIN CAPITAL LETTER U
+ {0xA3D6, 0xFF36}, //6167 #FULLWIDTH LATIN CAPITAL LETTER V
+ {0xA3D7, 0xFF37}, //6168 #FULLWIDTH LATIN CAPITAL LETTER W
+ {0xA3D8, 0xFF38}, //6169 #FULLWIDTH LATIN CAPITAL LETTER X
+ {0xA3D9, 0xFF39}, //6170 #FULLWIDTH LATIN CAPITAL LETTER Y
+ {0xA3DA, 0xFF3A}, //6171 #FULLWIDTH LATIN CAPITAL LETTER Z
+ {0xA3DB, 0xFF3B}, //6172 #FULLWIDTH LEFT SQUARE BRACKET
+ {0xA3DC, 0xFFE6}, //6173 #FULLWIDTH WON SIGN
+ {0xA3DD, 0xFF3D}, //6174 #FULLWIDTH RIGHT SQUARE BRACKET
+ {0xA3DE, 0xFF3E}, //6175 #FULLWIDTH CIRCUMFLEX ACCENT
+ {0xA3DF, 0xFF3F}, //6176 #FULLWIDTH LOW LINE
+ {0xA3E0, 0xFF40}, //6177 #FULLWIDTH GRAVE ACCENT
+ {0xA3E1, 0xFF41}, //6178 #FULLWIDTH LATIN SMALL LETTER A
+ {0xA3E2, 0xFF42}, //6179 #FULLWIDTH LATIN SMALL LETTER B
+ {0xA3E3, 0xFF43}, //6180 #FULLWIDTH LATIN SMALL LETTER C
+ {0xA3E4, 0xFF44}, //6181 #FULLWIDTH LATIN SMALL LETTER D
+ {0xA3E5, 0xFF45}, //6182 #FULLWIDTH LATIN SMALL LETTER E
+ {0xA3E6, 0xFF46}, //6183 #FULLWIDTH LATIN SMALL LETTER F
+ {0xA3E7, 0xFF47}, //6184 #FULLWIDTH LATIN SMALL LETTER G
+ {0xA3E8, 0xFF48}, //6185 #FULLWIDTH LATIN SMALL LETTER H
+ {0xA3E9, 0xFF49}, //6186 #FULLWIDTH LATIN SMALL LETTER I
+ {0xA3EA, 0xFF4A}, //6187 #FULLWIDTH LATIN SMALL LETTER J
+ {0xA3EB, 0xFF4B}, //6188 #FULLWIDTH LATIN SMALL LETTER K
+ {0xA3EC, 0xFF4C}, //6189 #FULLWIDTH LATIN SMALL LETTER L
+ {0xA3ED, 0xFF4D}, //6190 #FULLWIDTH LATIN SMALL LETTER M
+ {0xA3EE, 0xFF4E}, //6191 #FULLWIDTH LATIN SMALL LETTER N
+ {0xA3EF, 0xFF4F}, //6192 #FULLWIDTH LATIN SMALL LETTER O
+ {0xA3F0, 0xFF50}, //6193 #FULLWIDTH LATIN SMALL LETTER P
+ {0xA3F1, 0xFF51}, //6194 #FULLWIDTH LATIN SMALL LETTER Q
+ {0xA3F2, 0xFF52}, //6195 #FULLWIDTH LATIN SMALL LETTER R
+ {0xA3F3, 0xFF53}, //6196 #FULLWIDTH LATIN SMALL LETTER S
+ {0xA3F4, 0xFF54}, //6197 #FULLWIDTH LATIN SMALL LETTER T
+ {0xA3F5, 0xFF55}, //6198 #FULLWIDTH LATIN SMALL LETTER U
+ {0xA3F6, 0xFF56}, //6199 #FULLWIDTH LATIN SMALL LETTER V
+ {0xA3F7, 0xFF57}, //6200 #FULLWIDTH LATIN SMALL LETTER W
+ {0xA3F8, 0xFF58}, //6201 #FULLWIDTH LATIN SMALL LETTER X
+ {0xA3F9, 0xFF59}, //6202 #FULLWIDTH LATIN SMALL LETTER Y
+ {0xA3FA, 0xFF5A}, //6203 #FULLWIDTH LATIN SMALL LETTER Z
+ {0xA3FB, 0xFF5B}, //6204 #FULLWIDTH LEFT CURLY BRACKET
+ {0xA3FC, 0xFF5C}, //6205 #FULLWIDTH VERTICAL LINE
+ {0xA3FD, 0xFF5D}, //6206 #FULLWIDTH RIGHT CURLY BRACKET
+ {0xA3FE, 0xFFE3}, //6207 #FULLWIDTH MACRON
+ {0xA441, 0xC9DE}, //6208 #HANGUL SYLLABLE SSANGCIEUC A SSANGKIYEOK
+ {0xA442, 0xC9DF}, //6209 #HANGUL SYLLABLE SSANGCIEUC A KIYEOKSIOS
+ {0xA443, 0xC9E1}, //6210 #HANGUL SYLLABLE SSANGCIEUC A NIEUNCIEUC
+ {0xA444, 0xC9E3}, //6211 #HANGUL SYLLABLE SSANGCIEUC A TIKEUT
+ {0xA445, 0xC9E5}, //6212 #HANGUL SYLLABLE SSANGCIEUC A RIEULKIYEOK
+ {0xA446, 0xC9E6}, //6213 #HANGUL SYLLABLE SSANGCIEUC A RIEULMIEUM
+ {0xA447, 0xC9E8}, //6214 #HANGUL SYLLABLE SSANGCIEUC A RIEULSIOS
+ {0xA448, 0xC9E9}, //6215 #HANGUL SYLLABLE SSANGCIEUC A RIEULTHIEUTH
+ {0xA449, 0xC9EA}, //6216 #HANGUL SYLLABLE SSANGCIEUC A RIEULPHIEUPH
+ {0xA44A, 0xC9EB}, //6217 #HANGUL SYLLABLE SSANGCIEUC A RIEULHIEUH
+ {0xA44B, 0xC9EE}, //6218 #HANGUL SYLLABLE SSANGCIEUC A PIEUPSIOS
+ {0xA44C, 0xC9F2}, //6219 #HANGUL SYLLABLE SSANGCIEUC A CIEUC
+ {0xA44D, 0xC9F3}, //6220 #HANGUL SYLLABLE SSANGCIEUC A CHIEUCH
+ {0xA44E, 0xC9F4}, //6221 #HANGUL SYLLABLE SSANGCIEUC A KHIEUKH
+ {0xA44F, 0xC9F5}, //6222 #HANGUL SYLLABLE SSANGCIEUC A THIEUTH
+ {0xA450, 0xC9F6}, //6223 #HANGUL SYLLABLE SSANGCIEUC A PHIEUPH
+ {0xA451, 0xC9F7}, //6224 #HANGUL SYLLABLE SSANGCIEUC A HIEUH
+ {0xA452, 0xC9FA}, //6225 #HANGUL SYLLABLE SSANGCIEUC AE SSANGKIYEOK
+ {0xA453, 0xC9FB}, //6226 #HANGUL SYLLABLE SSANGCIEUC AE KIYEOKSIOS
+ {0xA454, 0xC9FD}, //6227 #HANGUL SYLLABLE SSANGCIEUC AE NIEUNCIEUC
+ {0xA455, 0xC9FE}, //6228 #HANGUL SYLLABLE SSANGCIEUC AE NIEUNHIEUH
+ {0xA456, 0xC9FF}, //6229 #HANGUL SYLLABLE SSANGCIEUC AE TIKEUT
+ {0xA457, 0xCA01}, //6230 #HANGUL SYLLABLE SSANGCIEUC AE RIEULKIYEOK
+ {0xA458, 0xCA02}, //6231 #HANGUL SYLLABLE SSANGCIEUC AE RIEULMIEUM
+ {0xA459, 0xCA03}, //6232 #HANGUL SYLLABLE SSANGCIEUC AE RIEULPIEUP
+ {0xA45A, 0xCA04}, //6233 #HANGUL SYLLABLE SSANGCIEUC AE RIEULSIOS
+ {0xA461, 0xCA05}, //6234 #HANGUL SYLLABLE SSANGCIEUC AE RIEULTHIEUTH
+ {0xA462, 0xCA06}, //6235 #HANGUL SYLLABLE SSANGCIEUC AE RIEULPHIEUPH
+ {0xA463, 0xCA07}, //6236 #HANGUL SYLLABLE SSANGCIEUC AE RIEULHIEUH
+ {0xA464, 0xCA0A}, //6237 #HANGUL SYLLABLE SSANGCIEUC AE PIEUPSIOS
+ {0xA465, 0xCA0E}, //6238 #HANGUL SYLLABLE SSANGCIEUC AE CIEUC
+ {0xA466, 0xCA0F}, //6239 #HANGUL SYLLABLE SSANGCIEUC AE CHIEUCH
+ {0xA467, 0xCA10}, //6240 #HANGUL SYLLABLE SSANGCIEUC AE KHIEUKH
+ {0xA468, 0xCA11}, //6241 #HANGUL SYLLABLE SSANGCIEUC AE THIEUTH
+ {0xA469, 0xCA12}, //6242 #HANGUL SYLLABLE SSANGCIEUC AE PHIEUPH
+ {0xA46A, 0xCA13}, //6243 #HANGUL SYLLABLE SSANGCIEUC AE HIEUH
+ {0xA46B, 0xCA15}, //6244 #HANGUL SYLLABLE SSANGCIEUC YA KIYEOK
+ {0xA46C, 0xCA16}, //6245 #HANGUL SYLLABLE SSANGCIEUC YA SSANGKIYEOK
+ {0xA46D, 0xCA17}, //6246 #HANGUL SYLLABLE SSANGCIEUC YA KIYEOKSIOS
+ {0xA46E, 0xCA19}, //6247 #HANGUL SYLLABLE SSANGCIEUC YA NIEUNCIEUC
+ {0xA46F, 0xCA1A}, //6248 #HANGUL SYLLABLE SSANGCIEUC YA NIEUNHIEUH
+ {0xA470, 0xCA1B}, //6249 #HANGUL SYLLABLE SSANGCIEUC YA TIKEUT
+ {0xA471, 0xCA1C}, //6250 #HANGUL SYLLABLE SSANGCIEUC YA RIEUL
+ {0xA472, 0xCA1D}, //6251 #HANGUL SYLLABLE SSANGCIEUC YA RIEULKIYEOK
+ {0xA473, 0xCA1E}, //6252 #HANGUL SYLLABLE SSANGCIEUC YA RIEULMIEUM
+ {0xA474, 0xCA1F}, //6253 #HANGUL SYLLABLE SSANGCIEUC YA RIEULPIEUP
+ {0xA475, 0xCA20}, //6254 #HANGUL SYLLABLE SSANGCIEUC YA RIEULSIOS
+ {0xA476, 0xCA21}, //6255 #HANGUL SYLLABLE SSANGCIEUC YA RIEULTHIEUTH
+ {0xA477, 0xCA22}, //6256 #HANGUL SYLLABLE SSANGCIEUC YA RIEULPHIEUPH
+ {0xA478, 0xCA23}, //6257 #HANGUL SYLLABLE SSANGCIEUC YA RIEULHIEUH
+ {0xA479, 0xCA24}, //6258 #HANGUL SYLLABLE SSANGCIEUC YA MIEUM
+ {0xA47A, 0xCA25}, //6259 #HANGUL SYLLABLE SSANGCIEUC YA PIEUP
+ {0xA481, 0xCA26}, //6260 #HANGUL SYLLABLE SSANGCIEUC YA PIEUPSIOS
+ {0xA482, 0xCA27}, //6261 #HANGUL SYLLABLE SSANGCIEUC YA SIOS
+ {0xA483, 0xCA28}, //6262 #HANGUL SYLLABLE SSANGCIEUC YA SSANGSIOS
+ {0xA484, 0xCA2A}, //6263 #HANGUL SYLLABLE SSANGCIEUC YA CIEUC
+ {0xA485, 0xCA2B}, //6264 #HANGUL SYLLABLE SSANGCIEUC YA CHIEUCH
+ {0xA486, 0xCA2C}, //6265 #HANGUL SYLLABLE SSANGCIEUC YA KHIEUKH
+ {0xA487, 0xCA2D}, //6266 #HANGUL SYLLABLE SSANGCIEUC YA THIEUTH
+ {0xA488, 0xCA2E}, //6267 #HANGUL SYLLABLE SSANGCIEUC YA PHIEUPH
+ {0xA489, 0xCA2F}, //6268 #HANGUL SYLLABLE SSANGCIEUC YA HIEUH
+ {0xA48A, 0xCA30}, //6269 #HANGUL SYLLABLE SSANGCIEUC YAE
+ {0xA48B, 0xCA31}, //6270 #HANGUL SYLLABLE SSANGCIEUC YAE KIYEOK
+ {0xA48C, 0xCA32}, //6271 #HANGUL SYLLABLE SSANGCIEUC YAE SSANGKIYEOK
+ {0xA48D, 0xCA33}, //6272 #HANGUL SYLLABLE SSANGCIEUC YAE KIYEOKSIOS
+ {0xA48E, 0xCA34}, //6273 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUN
+ {0xA48F, 0xCA35}, //6274 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUNCIEUC
+ {0xA490, 0xCA36}, //6275 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUNHIEUH
+ {0xA491, 0xCA37}, //6276 #HANGUL SYLLABLE SSANGCIEUC YAE TIKEUT
+ {0xA492, 0xCA38}, //6277 #HANGUL SYLLABLE SSANGCIEUC YAE RIEUL
+ {0xA493, 0xCA39}, //6278 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULKIYEOK
+ {0xA494, 0xCA3A}, //6279 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULMIEUM
+ {0xA495, 0xCA3B}, //6280 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULPIEUP
+ {0xA496, 0xCA3C}, //6281 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULSIOS
+ {0xA497, 0xCA3D}, //6282 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULTHIEUTH
+ {0xA498, 0xCA3E}, //6283 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULPHIEUPH
+ {0xA499, 0xCA3F}, //6284 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULHIEUH
+ {0xA49A, 0xCA40}, //6285 #HANGUL SYLLABLE SSANGCIEUC YAE MIEUM
+ {0xA49B, 0xCA41}, //6286 #HANGUL SYLLABLE SSANGCIEUC YAE PIEUP
+ {0xA49C, 0xCA42}, //6287 #HANGUL SYLLABLE SSANGCIEUC YAE PIEUPSIOS
+ {0xA49D, 0xCA43}, //6288 #HANGUL SYLLABLE SSANGCIEUC YAE SIOS
+ {0xA49E, 0xCA44}, //6289 #HANGUL SYLLABLE SSANGCIEUC YAE SSANGSIOS
+ {0xA49F, 0xCA45}, //6290 #HANGUL SYLLABLE SSANGCIEUC YAE IEUNG
+ {0xA4A0, 0xCA46}, //6291 #HANGUL SYLLABLE SSANGCIEUC YAE CIEUC
+ {0xA4A1, 0x3131}, //6292 #HANGUL LETTER KIYEOK
+ {0xA4A2, 0x3132}, //6293 #HANGUL LETTER SSANGKIYEOK
+ {0xA4A3, 0x3133}, //6294 #HANGUL LETTER KIYEOK-SIOS
+ {0xA4A4, 0x3134}, //6295 #HANGUL LETTER NIEUN
+ {0xA4A5, 0x3135}, //6296 #HANGUL LETTER NIEUN-CIEUC
+ {0xA4A6, 0x3136}, //6297 #HANGUL LETTER NIEUN-HIEUH
+ {0xA4A7, 0x3137}, //6298 #HANGUL LETTER TIKEUT
+ {0xA4A8, 0x3138}, //6299 #HANGUL LETTER SSANGTIKEUT
+ {0xA4A9, 0x3139}, //6300 #HANGUL LETTER RIEUL
+ {0xA4AA, 0x313A}, //6301 #HANGUL LETTER RIEUL-KIYEOK
+ {0xA4AB, 0x313B}, //6302 #HANGUL LETTER RIEUL-MIEUM
+ {0xA4AC, 0x313C}, //6303 #HANGUL LETTER RIEUL-PIEUP
+ {0xA4AD, 0x313D}, //6304 #HANGUL LETTER RIEUL-SIOS
+ {0xA4AE, 0x313E}, //6305 #HANGUL LETTER RIEUL-THIEUTH
+ {0xA4AF, 0x313F}, //6306 #HANGUL LETTER RIEUL-PHIEUPH
+ {0xA4B0, 0x3140}, //6307 #HANGUL LETTER RIEUL-HIEUH
+ {0xA4B1, 0x3141}, //6308 #HANGUL LETTER MIEUM
+ {0xA4B2, 0x3142}, //6309 #HANGUL LETTER PIEUP
+ {0xA4B3, 0x3143}, //6310 #HANGUL LETTER SSANGPIEUP
+ {0xA4B4, 0x3144}, //6311 #HANGUL LETTER PIEUP-SIOS
+ {0xA4B5, 0x3145}, //6312 #HANGUL LETTER SIOS
+ {0xA4B6, 0x3146}, //6313 #HANGUL LETTER SSANGSIOS
+ {0xA4B7, 0x3147}, //6314 #HANGUL LETTER IEUNG
+ {0xA4B8, 0x3148}, //6315 #HANGUL LETTER CIEUC
+ {0xA4B9, 0x3149}, //6316 #HANGUL LETTER SSANGCIEUC
+ {0xA4BA, 0x314A}, //6317 #HANGUL LETTER CHIEUCH
+ {0xA4BB, 0x314B}, //6318 #HANGUL LETTER KHIEUKH
+ {0xA4BC, 0x314C}, //6319 #HANGUL LETTER THIEUTH
+ {0xA4BD, 0x314D}, //6320 #HANGUL LETTER PHIEUPH
+ {0xA4BE, 0x314E}, //6321 #HANGUL LETTER HIEUH
+ {0xA4BF, 0x314F}, //6322 #HANGUL LETTER A
+ {0xA4C0, 0x3150}, //6323 #HANGUL LETTER AE
+ {0xA4C1, 0x3151}, //6324 #HANGUL LETTER YA
+ {0xA4C2, 0x3152}, //6325 #HANGUL LETTER YAE
+ {0xA4C3, 0x3153}, //6326 #HANGUL LETTER EO
+ {0xA4C4, 0x3154}, //6327 #HANGUL LETTER E
+ {0xA4C5, 0x3155}, //6328 #HANGUL LETTER YEO
+ {0xA4C6, 0x3156}, //6329 #HANGUL LETTER YE
+ {0xA4C7, 0x3157}, //6330 #HANGUL LETTER O
+ {0xA4C8, 0x3158}, //6331 #HANGUL LETTER WA
+ {0xA4C9, 0x3159}, //6332 #HANGUL LETTER WAE
+ {0xA4CA, 0x315A}, //6333 #HANGUL LETTER OE
+ {0xA4CB, 0x315B}, //6334 #HANGUL LETTER YO
+ {0xA4CC, 0x315C}, //6335 #HANGUL LETTER U
+ {0xA4CD, 0x315D}, //6336 #HANGUL LETTER WEO
+ {0xA4CE, 0x315E}, //6337 #HANGUL LETTER WE
+ {0xA4CF, 0x315F}, //6338 #HANGUL LETTER WI
+ {0xA4D0, 0x3160}, //6339 #HANGUL LETTER YU
+ {0xA4D1, 0x3161}, //6340 #HANGUL LETTER EU
+ {0xA4D2, 0x3162}, //6341 #HANGUL LETTER YI
+ {0xA4D3, 0x3163}, //6342 #HANGUL LETTER I
+ {0xA4D4, 0x3164}, //6343 #HANGUL FILLER
+ {0xA4D5, 0x3165}, //6344 #HANGUL LETTER SSANGNIEUN
+ {0xA4D6, 0x3166}, //6345 #HANGUL LETTER NIEUN-TIKEUT
+ {0xA4D7, 0x3167}, //6346 #HANGUL LETTER NIEUN-SIOS
+ {0xA4D8, 0x3168}, //6347 #HANGUL LETTER NIEUN-PANSIOS
+ {0xA4D9, 0x3169}, //6348 #HANGUL LETTER RIEUL-KIYEOK-SIOS
+ {0xA4DA, 0x316A}, //6349 #HANGUL LETTER RIEUL-TIKEUT
+ {0xA4DB, 0x316B}, //6350 #HANGUL LETTER RIEUL-PIEUP-SIOS
+ {0xA4DC, 0x316C}, //6351 #HANGUL LETTER RIEUL-PANSIOS
+ {0xA4DD, 0x316D}, //6352 #HANGUL LETTER RIEUL-YEORINHIEUH
+ {0xA4DE, 0x316E}, //6353 #HANGUL LETTER MIEUM-PIEUP
+ {0xA4DF, 0x316F}, //6354 #HANGUL LETTER MIEUM-SIOS
+ {0xA4E0, 0x3170}, //6355 #HANGUL LETTER MIEUM-PANSIOS
+ {0xA4E1, 0x3171}, //6356 #HANGUL LETTER KAPYEOUNMIEUM
+ {0xA4E2, 0x3172}, //6357 #HANGUL LETTER PIEUP-KIYEOK
+ {0xA4E3, 0x3173}, //6358 #HANGUL LETTER PIEUP-TIKEUT
+ {0xA4E4, 0x3174}, //6359 #HANGUL LETTER PIEUP-SIOS-KIYEOK
+ {0xA4E5, 0x3175}, //6360 #HANGUL LETTER PIEUP-SIOS-TIKEUT
+ {0xA4E6, 0x3176}, //6361 #HANGUL LETTER PIEUP-CIEUC
+ {0xA4E7, 0x3177}, //6362 #HANGUL LETTER PIEUP-THIEUTH
+ {0xA4E8, 0x3178}, //6363 #HANGUL LETTER KAPYEOUNPIEUP
+ {0xA4E9, 0x3179}, //6364 #HANGUL LETTER KAPYEOUNSSANGPIEUP
+ {0xA4EA, 0x317A}, //6365 #HANGUL LETTER SIOS-KIYEOK
+ {0xA4EB, 0x317B}, //6366 #HANGUL LETTER SIOS-NIEUN
+ {0xA4EC, 0x317C}, //6367 #HANGUL LETTER SIOS-TIKEUT
+ {0xA4ED, 0x317D}, //6368 #HANGUL LETTER SIOS-PIEUP
+ {0xA4EE, 0x317E}, //6369 #HANGUL LETTER SIOS-CIEUC
+ {0xA4EF, 0x317F}, //6370 #HANGUL LETTER PANSIOS
+ {0xA4F0, 0x3180}, //6371 #HANGUL LETTER SSANGIEUNG
+ {0xA4F1, 0x3181}, //6372 #HANGUL LETTER YESIEUNG
+ {0xA4F2, 0x3182}, //6373 #HANGUL LETTER YESIEUNG-SIOS
+ {0xA4F3, 0x3183}, //6374 #HANGUL LETTER YESIEUNG-PANSIOS
+ {0xA4F4, 0x3184}, //6375 #HANGUL LETTER KAPYEOUNPHIEUPH
+ {0xA4F5, 0x3185}, //6376 #HANGUL LETTER SSANGHIEUH
+ {0xA4F6, 0x3186}, //6377 #HANGUL LETTER YEORINHIEUH
+ {0xA4F7, 0x3187}, //6378 #HANGUL LETTER YO-YA
+ {0xA4F8, 0x3188}, //6379 #HANGUL LETTER YO-YAE
+ {0xA4F9, 0x3189}, //6380 #HANGUL LETTER YO-I
+ {0xA4FA, 0x318A}, //6381 #HANGUL LETTER YU-YEO
+ {0xA4FB, 0x318B}, //6382 #HANGUL LETTER YU-YE
+ {0xA4FC, 0x318C}, //6383 #HANGUL LETTER YU-I
+ {0xA4FD, 0x318D}, //6384 #HANGUL LETTER ARAEA
+ {0xA4FE, 0x318E}, //6385 #HANGUL LETTER ARAEAE
+ {0xA541, 0xCA47}, //6386 #HANGUL SYLLABLE SSANGCIEUC YAE CHIEUCH
+ {0xA542, 0xCA48}, //6387 #HANGUL SYLLABLE SSANGCIEUC YAE KHIEUKH
+ {0xA543, 0xCA49}, //6388 #HANGUL SYLLABLE SSANGCIEUC YAE THIEUTH
+ {0xA544, 0xCA4A}, //6389 #HANGUL SYLLABLE SSANGCIEUC YAE PHIEUPH
+ {0xA545, 0xCA4B}, //6390 #HANGUL SYLLABLE SSANGCIEUC YAE HIEUH
+ {0xA546, 0xCA4E}, //6391 #HANGUL SYLLABLE SSANGCIEUC EO SSANGKIYEOK
+ {0xA547, 0xCA4F}, //6392 #HANGUL SYLLABLE SSANGCIEUC EO KIYEOKSIOS
+ {0xA548, 0xCA51}, //6393 #HANGUL SYLLABLE SSANGCIEUC EO NIEUNCIEUC
+ {0xA549, 0xCA52}, //6394 #HANGUL SYLLABLE SSANGCIEUC EO NIEUNHIEUH
+ {0xA54A, 0xCA53}, //6395 #HANGUL SYLLABLE SSANGCIEUC EO TIKEUT
+ {0xA54B, 0xCA55}, //6396 #HANGUL SYLLABLE SSANGCIEUC EO RIEULKIYEOK
+ {0xA54C, 0xCA56}, //6397 #HANGUL SYLLABLE SSANGCIEUC EO RIEULMIEUM
+ {0xA54D, 0xCA57}, //6398 #HANGUL SYLLABLE SSANGCIEUC EO RIEULPIEUP
+ {0xA54E, 0xCA58}, //6399 #HANGUL SYLLABLE SSANGCIEUC EO RIEULSIOS
+ {0xA54F, 0xCA59}, //6400 #HANGUL SYLLABLE SSANGCIEUC EO RIEULTHIEUTH
+ {0xA550, 0xCA5A}, //6401 #HANGUL SYLLABLE SSANGCIEUC EO RIEULPHIEUPH
+ {0xA551, 0xCA5B}, //6402 #HANGUL SYLLABLE SSANGCIEUC EO RIEULHIEUH
+ {0xA552, 0xCA5E}, //6403 #HANGUL SYLLABLE SSANGCIEUC EO PIEUPSIOS
+ {0xA553, 0xCA62}, //6404 #HANGUL SYLLABLE SSANGCIEUC EO CIEUC
+ {0xA554, 0xCA63}, //6405 #HANGUL SYLLABLE SSANGCIEUC EO CHIEUCH
+ {0xA555, 0xCA64}, //6406 #HANGUL SYLLABLE SSANGCIEUC EO KHIEUKH
+ {0xA556, 0xCA65}, //6407 #HANGUL SYLLABLE SSANGCIEUC EO THIEUTH
+ {0xA557, 0xCA66}, //6408 #HANGUL SYLLABLE SSANGCIEUC EO PHIEUPH
+ {0xA558, 0xCA67}, //6409 #HANGUL SYLLABLE SSANGCIEUC EO HIEUH
+ {0xA559, 0xCA69}, //6410 #HANGUL SYLLABLE SSANGCIEUC E KIYEOK
+ {0xA55A, 0xCA6A}, //6411 #HANGUL SYLLABLE SSANGCIEUC E SSANGKIYEOK
+ {0xA561, 0xCA6B}, //6412 #HANGUL SYLLABLE SSANGCIEUC E KIYEOKSIOS
+ {0xA562, 0xCA6C}, //6413 #HANGUL SYLLABLE SSANGCIEUC E NIEUN
+ {0xA563, 0xCA6D}, //6414 #HANGUL SYLLABLE SSANGCIEUC E NIEUNCIEUC
+ {0xA564, 0xCA6E}, //6415 #HANGUL SYLLABLE SSANGCIEUC E NIEUNHIEUH
+ {0xA565, 0xCA6F}, //6416 #HANGUL SYLLABLE SSANGCIEUC E TIKEUT
+ {0xA566, 0xCA70}, //6417 #HANGUL SYLLABLE SSANGCIEUC E RIEUL
+ {0xA567, 0xCA71}, //6418 #HANGUL SYLLABLE SSANGCIEUC E RIEULKIYEOK
+ {0xA568, 0xCA72}, //6419 #HANGUL SYLLABLE SSANGCIEUC E RIEULMIEUM
+ {0xA569, 0xCA73}, //6420 #HANGUL SYLLABLE SSANGCIEUC E RIEULPIEUP
+ {0xA56A, 0xCA74}, //6421 #HANGUL SYLLABLE SSANGCIEUC E RIEULSIOS
+ {0xA56B, 0xCA75}, //6422 #HANGUL SYLLABLE SSANGCIEUC E RIEULTHIEUTH
+ {0xA56C, 0xCA76}, //6423 #HANGUL SYLLABLE SSANGCIEUC E RIEULPHIEUPH
+ {0xA56D, 0xCA77}, //6424 #HANGUL SYLLABLE SSANGCIEUC E RIEULHIEUH
+ {0xA56E, 0xCA78}, //6425 #HANGUL SYLLABLE SSANGCIEUC E MIEUM
+ {0xA56F, 0xCA79}, //6426 #HANGUL SYLLABLE SSANGCIEUC E PIEUP
+ {0xA570, 0xCA7A}, //6427 #HANGUL SYLLABLE SSANGCIEUC E PIEUPSIOS
+ {0xA571, 0xCA7B}, //6428 #HANGUL SYLLABLE SSANGCIEUC E SIOS
+ {0xA572, 0xCA7C}, //6429 #HANGUL SYLLABLE SSANGCIEUC E SSANGSIOS
+ {0xA573, 0xCA7E}, //6430 #HANGUL SYLLABLE SSANGCIEUC E CIEUC
+ {0xA574, 0xCA7F}, //6431 #HANGUL SYLLABLE SSANGCIEUC E CHIEUCH
+ {0xA575, 0xCA80}, //6432 #HANGUL SYLLABLE SSANGCIEUC E KHIEUKH
+ {0xA576, 0xCA81}, //6433 #HANGUL SYLLABLE SSANGCIEUC E THIEUTH
+ {0xA577, 0xCA82}, //6434 #HANGUL SYLLABLE SSANGCIEUC E PHIEUPH
+ {0xA578, 0xCA83}, //6435 #HANGUL SYLLABLE SSANGCIEUC E HIEUH
+ {0xA579, 0xCA85}, //6436 #HANGUL SYLLABLE SSANGCIEUC YEO KIYEOK
+ {0xA57A, 0xCA86}, //6437 #HANGUL SYLLABLE SSANGCIEUC YEO SSANGKIYEOK
+ {0xA581, 0xCA87}, //6438 #HANGUL SYLLABLE SSANGCIEUC YEO KIYEOKSIOS
+ {0xA582, 0xCA88}, //6439 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUN
+ {0xA583, 0xCA89}, //6440 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUNCIEUC
+ {0xA584, 0xCA8A}, //6441 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUNHIEUH
+ {0xA585, 0xCA8B}, //6442 #HANGUL SYLLABLE SSANGCIEUC YEO TIKEUT
+ {0xA586, 0xCA8C}, //6443 #HANGUL SYLLABLE SSANGCIEUC YEO RIEUL
+ {0xA587, 0xCA8D}, //6444 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULKIYEOK
+ {0xA588, 0xCA8E}, //6445 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULMIEUM
+ {0xA589, 0xCA8F}, //6446 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULPIEUP
+ {0xA58A, 0xCA90}, //6447 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULSIOS
+ {0xA58B, 0xCA91}, //6448 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULTHIEUTH
+ {0xA58C, 0xCA92}, //6449 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULPHIEUPH
+ {0xA58D, 0xCA93}, //6450 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULHIEUH
+ {0xA58E, 0xCA94}, //6451 #HANGUL SYLLABLE SSANGCIEUC YEO MIEUM
+ {0xA58F, 0xCA95}, //6452 #HANGUL SYLLABLE SSANGCIEUC YEO PIEUP
+ {0xA590, 0xCA96}, //6453 #HANGUL SYLLABLE SSANGCIEUC YEO PIEUPSIOS
+ {0xA591, 0xCA97}, //6454 #HANGUL SYLLABLE SSANGCIEUC YEO SIOS
+ {0xA592, 0xCA99}, //6455 #HANGUL SYLLABLE SSANGCIEUC YEO IEUNG
+ {0xA593, 0xCA9A}, //6456 #HANGUL SYLLABLE SSANGCIEUC YEO CIEUC
+ {0xA594, 0xCA9B}, //6457 #HANGUL SYLLABLE SSANGCIEUC YEO CHIEUCH
+ {0xA595, 0xCA9C}, //6458 #HANGUL SYLLABLE SSANGCIEUC YEO KHIEUKH
+ {0xA596, 0xCA9D}, //6459 #HANGUL SYLLABLE SSANGCIEUC YEO THIEUTH
+ {0xA597, 0xCA9E}, //6460 #HANGUL SYLLABLE SSANGCIEUC YEO PHIEUPH
+ {0xA598, 0xCA9F}, //6461 #HANGUL SYLLABLE SSANGCIEUC YEO HIEUH
+ {0xA599, 0xCAA0}, //6462 #HANGUL SYLLABLE SSANGCIEUC YE
+ {0xA59A, 0xCAA1}, //6463 #HANGUL SYLLABLE SSANGCIEUC YE KIYEOK
+ {0xA59B, 0xCAA2}, //6464 #HANGUL SYLLABLE SSANGCIEUC YE SSANGKIYEOK
+ {0xA59C, 0xCAA3}, //6465 #HANGUL SYLLABLE SSANGCIEUC YE KIYEOKSIOS
+ {0xA59D, 0xCAA4}, //6466 #HANGUL SYLLABLE SSANGCIEUC YE NIEUN
+ {0xA59E, 0xCAA5}, //6467 #HANGUL SYLLABLE SSANGCIEUC YE NIEUNCIEUC
+ {0xA59F, 0xCAA6}, //6468 #HANGUL SYLLABLE SSANGCIEUC YE NIEUNHIEUH
+ {0xA5A0, 0xCAA7}, //6469 #HANGUL SYLLABLE SSANGCIEUC YE TIKEUT
+ {0xA5A1, 0x2170}, //6470 #SMALL ROMAN NUMERAL ONE
+ {0xA5A2, 0x2171}, //6471 #SMALL ROMAN NUMERAL TWO
+ {0xA5A3, 0x2172}, //6472 #SMALL ROMAN NUMERAL THREE
+ {0xA5A4, 0x2173}, //6473 #SMALL ROMAN NUMERAL FOUR
+ {0xA5A5, 0x2174}, //6474 #SMALL ROMAN NUMERAL FIVE
+ {0xA5A6, 0x2175}, //6475 #SMALL ROMAN NUMERAL SIX
+ {0xA5A7, 0x2176}, //6476 #SMALL ROMAN NUMERAL SEVEN
+ {0xA5A8, 0x2177}, //6477 #SMALL ROMAN NUMERAL EIGHT
+ {0xA5A9, 0x2178}, //6478 #SMALL ROMAN NUMERAL NINE
+ {0xA5AA, 0x2179}, //6479 #SMALL ROMAN NUMERAL TEN
+ {0xA5B0, 0x2160}, //6480 #ROMAN NUMERAL ONE
+ {0xA5B1, 0x2161}, //6481 #ROMAN NUMERAL TWO
+ {0xA5B2, 0x2162}, //6482 #ROMAN NUMERAL THREE
+ {0xA5B3, 0x2163}, //6483 #ROMAN NUMERAL FOUR
+ {0xA5B4, 0x2164}, //6484 #ROMAN NUMERAL FIVE
+ {0xA5B5, 0x2165}, //6485 #ROMAN NUMERAL SIX
+ {0xA5B6, 0x2166}, //6486 #ROMAN NUMERAL SEVEN
+ {0xA5B7, 0x2167}, //6487 #ROMAN NUMERAL EIGHT
+ {0xA5B8, 0x2168}, //6488 #ROMAN NUMERAL NINE
+ {0xA5B9, 0x2169}, //6489 #ROMAN NUMERAL TEN
+ {0xA5C1, 0x0391}, //6490 #GREEK CAPITAL LETTER ALPHA
+ {0xA5C2, 0x0392}, //6491 #GREEK CAPITAL LETTER BETA
+ {0xA5C3, 0x0393}, //6492 #GREEK CAPITAL LETTER GAMMA
+ {0xA5C4, 0x0394}, //6493 #GREEK CAPITAL LETTER DELTA
+ {0xA5C5, 0x0395}, //6494 #GREEK CAPITAL LETTER EPSILON
+ {0xA5C6, 0x0396}, //6495 #GREEK CAPITAL LETTER ZETA
+ {0xA5C7, 0x0397}, //6496 #GREEK CAPITAL LETTER ETA
+ {0xA5C8, 0x0398}, //6497 #GREEK CAPITAL LETTER THETA
+ {0xA5C9, 0x0399}, //6498 #GREEK CAPITAL LETTER IOTA
+ {0xA5CA, 0x039A}, //6499 #GREEK CAPITAL LETTER KAPPA
+ {0xA5CB, 0x039B}, //6500 #GREEK CAPITAL LETTER LAMDA
+ {0xA5CC, 0x039C}, //6501 #GREEK CAPITAL LETTER MU
+ {0xA5CD, 0x039D}, //6502 #GREEK CAPITAL LETTER NU
+ {0xA5CE, 0x039E}, //6503 #GREEK CAPITAL LETTER XI
+ {0xA5CF, 0x039F}, //6504 #GREEK CAPITAL LETTER OMICRON
+ {0xA5D0, 0x03A0}, //6505 #GREEK CAPITAL LETTER PI
+ {0xA5D1, 0x03A1}, //6506 #GREEK CAPITAL LETTER RHO
+ {0xA5D2, 0x03A3}, //6507 #GREEK CAPITAL LETTER SIGMA
+ {0xA5D3, 0x03A4}, //6508 #GREEK CAPITAL LETTER TAU
+ {0xA5D4, 0x03A5}, //6509 #GREEK CAPITAL LETTER UPSILON
+ {0xA5D5, 0x03A6}, //6510 #GREEK CAPITAL LETTER PHI
+ {0xA5D6, 0x03A7}, //6511 #GREEK CAPITAL LETTER CHI
+ {0xA5D7, 0x03A8}, //6512 #GREEK CAPITAL LETTER PSI
+ {0xA5D8, 0x03A9}, //6513 #GREEK CAPITAL LETTER OMEGA
+ {0xA5E1, 0x03B1}, //6514 #GREEK SMALL LETTER ALPHA
+ {0xA5E2, 0x03B2}, //6515 #GREEK SMALL LETTER BETA
+ {0xA5E3, 0x03B3}, //6516 #GREEK SMALL LETTER GAMMA
+ {0xA5E4, 0x03B4}, //6517 #GREEK SMALL LETTER DELTA
+ {0xA5E5, 0x03B5}, //6518 #GREEK SMALL LETTER EPSILON
+ {0xA5E6, 0x03B6}, //6519 #GREEK SMALL LETTER ZETA
+ {0xA5E7, 0x03B7}, //6520 #GREEK SMALL LETTER ETA
+ {0xA5E8, 0x03B8}, //6521 #GREEK SMALL LETTER THETA
+ {0xA5E9, 0x03B9}, //6522 #GREEK SMALL LETTER IOTA
+ {0xA5EA, 0x03BA}, //6523 #GREEK SMALL LETTER KAPPA
+ {0xA5EB, 0x03BB}, //6524 #GREEK SMALL LETTER LAMDA
+ {0xA5EC, 0x03BC}, //6525 #GREEK SMALL LETTER MU
+ {0xA5ED, 0x03BD}, //6526 #GREEK SMALL LETTER NU
+ {0xA5EE, 0x03BE}, //6527 #GREEK SMALL LETTER XI
+ {0xA5EF, 0x03BF}, //6528 #GREEK SMALL LETTER OMICRON
+ {0xA5F0, 0x03C0}, //6529 #GREEK SMALL LETTER PI
+ {0xA5F1, 0x03C1}, //6530 #GREEK SMALL LETTER RHO
+ {0xA5F2, 0x03C3}, //6531 #GREEK SMALL LETTER SIGMA
+ {0xA5F3, 0x03C4}, //6532 #GREEK SMALL LETTER TAU
+ {0xA5F4, 0x03C5}, //6533 #GREEK SMALL LETTER UPSILON
+ {0xA5F5, 0x03C6}, //6534 #GREEK SMALL LETTER PHI
+ {0xA5F6, 0x03C7}, //6535 #GREEK SMALL LETTER CHI
+ {0xA5F7, 0x03C8}, //6536 #GREEK SMALL LETTER PSI
+ {0xA5F8, 0x03C9}, //6537 #GREEK SMALL LETTER OMEGA
+ {0xA641, 0xCAA8}, //6538 #HANGUL SYLLABLE SSANGCIEUC YE RIEUL
+ {0xA642, 0xCAA9}, //6539 #HANGUL SYLLABLE SSANGCIEUC YE RIEULKIYEOK
+ {0xA643, 0xCAAA}, //6540 #HANGUL SYLLABLE SSANGCIEUC YE RIEULMIEUM
+ {0xA644, 0xCAAB}, //6541 #HANGUL SYLLABLE SSANGCIEUC YE RIEULPIEUP
+ {0xA645, 0xCAAC}, //6542 #HANGUL SYLLABLE SSANGCIEUC YE RIEULSIOS
+ {0xA646, 0xCAAD}, //6543 #HANGUL SYLLABLE SSANGCIEUC YE RIEULTHIEUTH
+ {0xA647, 0xCAAE}, //6544 #HANGUL SYLLABLE SSANGCIEUC YE RIEULPHIEUPH
+ {0xA648, 0xCAAF}, //6545 #HANGUL SYLLABLE SSANGCIEUC YE RIEULHIEUH
+ {0xA649, 0xCAB0}, //6546 #HANGUL SYLLABLE SSANGCIEUC YE MIEUM
+ {0xA64A, 0xCAB1}, //6547 #HANGUL SYLLABLE SSANGCIEUC YE PIEUP
+ {0xA64B, 0xCAB2}, //6548 #HANGUL SYLLABLE SSANGCIEUC YE PIEUPSIOS
+ {0xA64C, 0xCAB3}, //6549 #HANGUL SYLLABLE SSANGCIEUC YE SIOS
+ {0xA64D, 0xCAB4}, //6550 #HANGUL SYLLABLE SSANGCIEUC YE SSANGSIOS
+ {0xA64E, 0xCAB5}, //6551 #HANGUL SYLLABLE SSANGCIEUC YE IEUNG
+ {0xA64F, 0xCAB6}, //6552 #HANGUL SYLLABLE SSANGCIEUC YE CIEUC
+ {0xA650, 0xCAB7}, //6553 #HANGUL SYLLABLE SSANGCIEUC YE CHIEUCH
+ {0xA651, 0xCAB8}, //6554 #HANGUL SYLLABLE SSANGCIEUC YE KHIEUKH
+ {0xA652, 0xCAB9}, //6555 #HANGUL SYLLABLE SSANGCIEUC YE THIEUTH
+ {0xA653, 0xCABA}, //6556 #HANGUL SYLLABLE SSANGCIEUC YE PHIEUPH
+ {0xA654, 0xCABB}, //6557 #HANGUL SYLLABLE SSANGCIEUC YE HIEUH
+ {0xA655, 0xCABE}, //6558 #HANGUL SYLLABLE SSANGCIEUC O SSANGKIYEOK
+ {0xA656, 0xCABF}, //6559 #HANGUL SYLLABLE SSANGCIEUC O KIYEOKSIOS
+ {0xA657, 0xCAC1}, //6560 #HANGUL SYLLABLE SSANGCIEUC O NIEUNCIEUC
+ {0xA658, 0xCAC2}, //6561 #HANGUL SYLLABLE SSANGCIEUC O NIEUNHIEUH
+ {0xA659, 0xCAC3}, //6562 #HANGUL SYLLABLE SSANGCIEUC O TIKEUT
+ {0xA65A, 0xCAC5}, //6563 #HANGUL SYLLABLE SSANGCIEUC O RIEULKIYEOK
+ {0xA661, 0xCAC6}, //6564 #HANGUL SYLLABLE SSANGCIEUC O RIEULMIEUM
+ {0xA662, 0xCAC7}, //6565 #HANGUL SYLLABLE SSANGCIEUC O RIEULPIEUP
+ {0xA663, 0xCAC8}, //6566 #HANGUL SYLLABLE SSANGCIEUC O RIEULSIOS
+ {0xA664, 0xCAC9}, //6567 #HANGUL SYLLABLE SSANGCIEUC O RIEULTHIEUTH
+ {0xA665, 0xCACA}, //6568 #HANGUL SYLLABLE SSANGCIEUC O RIEULPHIEUPH
+ {0xA666, 0xCACB}, //6569 #HANGUL SYLLABLE SSANGCIEUC O RIEULHIEUH
+ {0xA667, 0xCACE}, //6570 #HANGUL SYLLABLE SSANGCIEUC O PIEUPSIOS
+ {0xA668, 0xCAD0}, //6571 #HANGUL SYLLABLE SSANGCIEUC O SSANGSIOS
+ {0xA669, 0xCAD2}, //6572 #HANGUL SYLLABLE SSANGCIEUC O CIEUC
+ {0xA66A, 0xCAD4}, //6573 #HANGUL SYLLABLE SSANGCIEUC O KHIEUKH
+ {0xA66B, 0xCAD5}, //6574 #HANGUL SYLLABLE SSANGCIEUC O THIEUTH
+ {0xA66C, 0xCAD6}, //6575 #HANGUL SYLLABLE SSANGCIEUC O PHIEUPH
+ {0xA66D, 0xCAD7}, //6576 #HANGUL SYLLABLE SSANGCIEUC O HIEUH
+ {0xA66E, 0xCADA}, //6577 #HANGUL SYLLABLE SSANGCIEUC WA SSANGKIYEOK
+ {0xA66F, 0xCADB}, //6578 #HANGUL SYLLABLE SSANGCIEUC WA KIYEOKSIOS
+ {0xA670, 0xCADC}, //6579 #HANGUL SYLLABLE SSANGCIEUC WA NIEUN
+ {0xA671, 0xCADD}, //6580 #HANGUL SYLLABLE SSANGCIEUC WA NIEUNCIEUC
+ {0xA672, 0xCADE}, //6581 #HANGUL SYLLABLE SSANGCIEUC WA NIEUNHIEUH
+ {0xA673, 0xCADF}, //6582 #HANGUL SYLLABLE SSANGCIEUC WA TIKEUT
+ {0xA674, 0xCAE1}, //6583 #HANGUL SYLLABLE SSANGCIEUC WA RIEULKIYEOK
+ {0xA675, 0xCAE2}, //6584 #HANGUL SYLLABLE SSANGCIEUC WA RIEULMIEUM
+ {0xA676, 0xCAE3}, //6585 #HANGUL SYLLABLE SSANGCIEUC WA RIEULPIEUP
+ {0xA677, 0xCAE4}, //6586 #HANGUL SYLLABLE SSANGCIEUC WA RIEULSIOS
+ {0xA678, 0xCAE5}, //6587 #HANGUL SYLLABLE SSANGCIEUC WA RIEULTHIEUTH
+ {0xA679, 0xCAE6}, //6588 #HANGUL SYLLABLE SSANGCIEUC WA RIEULPHIEUPH
+ {0xA67A, 0xCAE7}, //6589 #HANGUL SYLLABLE SSANGCIEUC WA RIEULHIEUH
+ {0xA681, 0xCAE8}, //6590 #HANGUL SYLLABLE SSANGCIEUC WA MIEUM
+ {0xA682, 0xCAE9}, //6591 #HANGUL SYLLABLE SSANGCIEUC WA PIEUP
+ {0xA683, 0xCAEA}, //6592 #HANGUL SYLLABLE SSANGCIEUC WA PIEUPSIOS
+ {0xA684, 0xCAEB}, //6593 #HANGUL SYLLABLE SSANGCIEUC WA SIOS
+ {0xA685, 0xCAED}, //6594 #HANGUL SYLLABLE SSANGCIEUC WA IEUNG
+ {0xA686, 0xCAEE}, //6595 #HANGUL SYLLABLE SSANGCIEUC WA CIEUC
+ {0xA687, 0xCAEF}, //6596 #HANGUL SYLLABLE SSANGCIEUC WA CHIEUCH
+ {0xA688, 0xCAF0}, //6597 #HANGUL SYLLABLE SSANGCIEUC WA KHIEUKH
+ {0xA689, 0xCAF1}, //6598 #HANGUL SYLLABLE SSANGCIEUC WA THIEUTH
+ {0xA68A, 0xCAF2}, //6599 #HANGUL SYLLABLE SSANGCIEUC WA PHIEUPH
+ {0xA68B, 0xCAF3}, //6600 #HANGUL SYLLABLE SSANGCIEUC WA HIEUH
+ {0xA68C, 0xCAF5}, //6601 #HANGUL SYLLABLE SSANGCIEUC WAE KIYEOK
+ {0xA68D, 0xCAF6}, //6602 #HANGUL SYLLABLE SSANGCIEUC WAE SSANGKIYEOK
+ {0xA68E, 0xCAF7}, //6603 #HANGUL SYLLABLE SSANGCIEUC WAE KIYEOKSIOS
+ {0xA68F, 0xCAF8}, //6604 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUN
+ {0xA690, 0xCAF9}, //6605 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUNCIEUC
+ {0xA691, 0xCAFA}, //6606 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUNHIEUH
+ {0xA692, 0xCAFB}, //6607 #HANGUL SYLLABLE SSANGCIEUC WAE TIKEUT
+ {0xA693, 0xCAFC}, //6608 #HANGUL SYLLABLE SSANGCIEUC WAE RIEUL
+ {0xA694, 0xCAFD}, //6609 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULKIYEOK
+ {0xA695, 0xCAFE}, //6610 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULMIEUM
+ {0xA696, 0xCAFF}, //6611 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULPIEUP
+ {0xA697, 0xCB00}, //6612 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULSIOS
+ {0xA698, 0xCB01}, //6613 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULTHIEUTH
+ {0xA699, 0xCB02}, //6614 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULPHIEUPH
+ {0xA69A, 0xCB03}, //6615 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULHIEUH
+ {0xA69B, 0xCB04}, //6616 #HANGUL SYLLABLE SSANGCIEUC WAE MIEUM
+ {0xA69C, 0xCB05}, //6617 #HANGUL SYLLABLE SSANGCIEUC WAE PIEUP
+ {0xA69D, 0xCB06}, //6618 #HANGUL SYLLABLE SSANGCIEUC WAE PIEUPSIOS
+ {0xA69E, 0xCB07}, //6619 #HANGUL SYLLABLE SSANGCIEUC WAE SIOS
+ {0xA69F, 0xCB09}, //6620 #HANGUL SYLLABLE SSANGCIEUC WAE IEUNG
+ {0xA6A0, 0xCB0A}, //6621 #HANGUL SYLLABLE SSANGCIEUC WAE CIEUC
+ {0xA6A1, 0x2500}, //6622 #BOX DRAWINGS LIGHT HORIZONTAL
+ {0xA6A2, 0x2502}, //6623 #BOX DRAWINGS LIGHT VERTICAL
+ {0xA6A3, 0x250C}, //6624 #BOX DRAWINGS LIGHT DOWN AND RIGHT
+ {0xA6A4, 0x2510}, //6625 #BOX DRAWINGS LIGHT DOWN AND LEFT
+ {0xA6A5, 0x2518}, //6626 #BOX DRAWINGS LIGHT UP AND LEFT
+ {0xA6A6, 0x2514}, //6627 #BOX DRAWINGS LIGHT UP AND RIGHT
+ {0xA6A7, 0x251C}, //6628 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ {0xA6A8, 0x252C}, //6629 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ {0xA6A9, 0x2524}, //6630 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ {0xA6AA, 0x2534}, //6631 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ {0xA6AB, 0x253C}, //6632 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ {0xA6AC, 0x2501}, //6633 #BOX DRAWINGS HEAVY HORIZONTAL
+ {0xA6AD, 0x2503}, //6634 #BOX DRAWINGS HEAVY VERTICAL
+ {0xA6AE, 0x250F}, //6635 #BOX DRAWINGS HEAVY DOWN AND RIGHT
+ {0xA6AF, 0x2513}, //6636 #BOX DRAWINGS HEAVY DOWN AND LEFT
+ {0xA6B0, 0x251B}, //6637 #BOX DRAWINGS HEAVY UP AND LEFT
+ {0xA6B1, 0x2517}, //6638 #BOX DRAWINGS HEAVY UP AND RIGHT
+ {0xA6B2, 0x2523}, //6639 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+ {0xA6B3, 0x2533}, //6640 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+ {0xA6B4, 0x252B}, //6641 #BOX DRAWINGS HEAVY VERTICAL AND LEFT
+ {0xA6B5, 0x253B}, //6642 #BOX DRAWINGS HEAVY UP AND HORIZONTAL
+ {0xA6B6, 0x254B}, //6643 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+ {0xA6B7, 0x2520}, //6644 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+ {0xA6B8, 0x252F}, //6645 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+ {0xA6B9, 0x2528}, //6646 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+ {0xA6BA, 0x2537}, //6647 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+ {0xA6BB, 0x253F}, //6648 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+ {0xA6BC, 0x251D}, //6649 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+ {0xA6BD, 0x2530}, //6650 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+ {0xA6BE, 0x2525}, //6651 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+ {0xA6BF, 0x2538}, //6652 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+ {0xA6C0, 0x2542}, //6653 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+ {0xA6C1, 0x2512}, //6654 #BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+ {0xA6C2, 0x2511}, //6655 #BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+ {0xA6C3, 0x251A}, //6656 #BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+ {0xA6C4, 0x2519}, //6657 #BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+ {0xA6C5, 0x2516}, //6658 #BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+ {0xA6C6, 0x2515}, //6659 #BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+ {0xA6C7, 0x250E}, //6660 #BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+ {0xA6C8, 0x250D}, //6661 #BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+ {0xA6C9, 0x251E}, //6662 #BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+ {0xA6CA, 0x251F}, //6663 #BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+ {0xA6CB, 0x2521}, //6664 #BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+ {0xA6CC, 0x2522}, //6665 #BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+ {0xA6CD, 0x2526}, //6666 #BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+ {0xA6CE, 0x2527}, //6667 #BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+ {0xA6CF, 0x2529}, //6668 #BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+ {0xA6D0, 0x252A}, //6669 #BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+ {0xA6D1, 0x252D}, //6670 #BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+ {0xA6D2, 0x252E}, //6671 #BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+ {0xA6D3, 0x2531}, //6672 #BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+ {0xA6D4, 0x2532}, //6673 #BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+ {0xA6D5, 0x2535}, //6674 #BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+ {0xA6D6, 0x2536}, //6675 #BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+ {0xA6D7, 0x2539}, //6676 #BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+ {0xA6D8, 0x253A}, //6677 #BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+ {0xA6D9, 0x253D}, //6678 #BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+ {0xA6DA, 0x253E}, //6679 #BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+ {0xA6DB, 0x2540}, //6680 #BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+ {0xA6DC, 0x2541}, //6681 #BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+ {0xA6DD, 0x2543}, //6682 #BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+ {0xA6DE, 0x2544}, //6683 #BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+ {0xA6DF, 0x2545}, //6684 #BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+ {0xA6E0, 0x2546}, //6685 #BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+ {0xA6E1, 0x2547}, //6686 #BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+ {0xA6E2, 0x2548}, //6687 #BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+ {0xA6E3, 0x2549}, //6688 #BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+ {0xA6E4, 0x254A}, //6689 #BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+ {0xA741, 0xCB0B}, //6690 #HANGUL SYLLABLE SSANGCIEUC WAE CHIEUCH
+ {0xA742, 0xCB0C}, //6691 #HANGUL SYLLABLE SSANGCIEUC WAE KHIEUKH
+ {0xA743, 0xCB0D}, //6692 #HANGUL SYLLABLE SSANGCIEUC WAE THIEUTH
+ {0xA744, 0xCB0E}, //6693 #HANGUL SYLLABLE SSANGCIEUC WAE PHIEUPH
+ {0xA745, 0xCB0F}, //6694 #HANGUL SYLLABLE SSANGCIEUC WAE HIEUH
+ {0xA746, 0xCB11}, //6695 #HANGUL SYLLABLE SSANGCIEUC OE KIYEOK
+ {0xA747, 0xCB12}, //6696 #HANGUL SYLLABLE SSANGCIEUC OE SSANGKIYEOK
+ {0xA748, 0xCB13}, //6697 #HANGUL SYLLABLE SSANGCIEUC OE KIYEOKSIOS
+ {0xA749, 0xCB15}, //6698 #HANGUL SYLLABLE SSANGCIEUC OE NIEUNCIEUC
+ {0xA74A, 0xCB16}, //6699 #HANGUL SYLLABLE SSANGCIEUC OE NIEUNHIEUH
+ {0xA74B, 0xCB17}, //6700 #HANGUL SYLLABLE SSANGCIEUC OE TIKEUT
+ {0xA74C, 0xCB19}, //6701 #HANGUL SYLLABLE SSANGCIEUC OE RIEULKIYEOK
+ {0xA74D, 0xCB1A}, //6702 #HANGUL SYLLABLE SSANGCIEUC OE RIEULMIEUM
+ {0xA74E, 0xCB1B}, //6703 #HANGUL SYLLABLE SSANGCIEUC OE RIEULPIEUP
+ {0xA74F, 0xCB1C}, //6704 #HANGUL SYLLABLE SSANGCIEUC OE RIEULSIOS
+ {0xA750, 0xCB1D}, //6705 #HANGUL SYLLABLE SSANGCIEUC OE RIEULTHIEUTH
+ {0xA751, 0xCB1E}, //6706 #HANGUL SYLLABLE SSANGCIEUC OE RIEULPHIEUPH
+ {0xA752, 0xCB1F}, //6707 #HANGUL SYLLABLE SSANGCIEUC OE RIEULHIEUH
+ {0xA753, 0xCB22}, //6708 #HANGUL SYLLABLE SSANGCIEUC OE PIEUPSIOS
+ {0xA754, 0xCB23}, //6709 #HANGUL SYLLABLE SSANGCIEUC OE SIOS
+ {0xA755, 0xCB24}, //6710 #HANGUL SYLLABLE SSANGCIEUC OE SSANGSIOS
+ {0xA756, 0xCB25}, //6711 #HANGUL SYLLABLE SSANGCIEUC OE IEUNG
+ {0xA757, 0xCB26}, //6712 #HANGUL SYLLABLE SSANGCIEUC OE CIEUC
+ {0xA758, 0xCB27}, //6713 #HANGUL SYLLABLE SSANGCIEUC OE CHIEUCH
+ {0xA759, 0xCB28}, //6714 #HANGUL SYLLABLE SSANGCIEUC OE KHIEUKH
+ {0xA75A, 0xCB29}, //6715 #HANGUL SYLLABLE SSANGCIEUC OE THIEUTH
+ {0xA761, 0xCB2A}, //6716 #HANGUL SYLLABLE SSANGCIEUC OE PHIEUPH
+ {0xA762, 0xCB2B}, //6717 #HANGUL SYLLABLE SSANGCIEUC OE HIEUH
+ {0xA763, 0xCB2C}, //6718 #HANGUL SYLLABLE SSANGCIEUC YO
+ {0xA764, 0xCB2D}, //6719 #HANGUL SYLLABLE SSANGCIEUC YO KIYEOK
+ {0xA765, 0xCB2E}, //6720 #HANGUL SYLLABLE SSANGCIEUC YO SSANGKIYEOK
+ {0xA766, 0xCB2F}, //6721 #HANGUL SYLLABLE SSANGCIEUC YO KIYEOKSIOS
+ {0xA767, 0xCB30}, //6722 #HANGUL SYLLABLE SSANGCIEUC YO NIEUN
+ {0xA768, 0xCB31}, //6723 #HANGUL SYLLABLE SSANGCIEUC YO NIEUNCIEUC
+ {0xA769, 0xCB32}, //6724 #HANGUL SYLLABLE SSANGCIEUC YO NIEUNHIEUH
+ {0xA76A, 0xCB33}, //6725 #HANGUL SYLLABLE SSANGCIEUC YO TIKEUT
+ {0xA76B, 0xCB34}, //6726 #HANGUL SYLLABLE SSANGCIEUC YO RIEUL
+ {0xA76C, 0xCB35}, //6727 #HANGUL SYLLABLE SSANGCIEUC YO RIEULKIYEOK
+ {0xA76D, 0xCB36}, //6728 #HANGUL SYLLABLE SSANGCIEUC YO RIEULMIEUM
+ {0xA76E, 0xCB37}, //6729 #HANGUL SYLLABLE SSANGCIEUC YO RIEULPIEUP
+ {0xA76F, 0xCB38}, //6730 #HANGUL SYLLABLE SSANGCIEUC YO RIEULSIOS
+ {0xA770, 0xCB39}, //6731 #HANGUL SYLLABLE SSANGCIEUC YO RIEULTHIEUTH
+ {0xA771, 0xCB3A}, //6732 #HANGUL SYLLABLE SSANGCIEUC YO RIEULPHIEUPH
+ {0xA772, 0xCB3B}, //6733 #HANGUL SYLLABLE SSANGCIEUC YO RIEULHIEUH
+ {0xA773, 0xCB3C}, //6734 #HANGUL SYLLABLE SSANGCIEUC YO MIEUM
+ {0xA774, 0xCB3D}, //6735 #HANGUL SYLLABLE SSANGCIEUC YO PIEUP
+ {0xA775, 0xCB3E}, //6736 #HANGUL SYLLABLE SSANGCIEUC YO PIEUPSIOS
+ {0xA776, 0xCB3F}, //6737 #HANGUL SYLLABLE SSANGCIEUC YO SIOS
+ {0xA777, 0xCB40}, //6738 #HANGUL SYLLABLE SSANGCIEUC YO SSANGSIOS
+ {0xA778, 0xCB42}, //6739 #HANGUL SYLLABLE SSANGCIEUC YO CIEUC
+ {0xA779, 0xCB43}, //6740 #HANGUL SYLLABLE SSANGCIEUC YO CHIEUCH
+ {0xA77A, 0xCB44}, //6741 #HANGUL SYLLABLE SSANGCIEUC YO KHIEUKH
+ {0xA781, 0xCB45}, //6742 #HANGUL SYLLABLE SSANGCIEUC YO THIEUTH
+ {0xA782, 0xCB46}, //6743 #HANGUL SYLLABLE SSANGCIEUC YO PHIEUPH
+ {0xA783, 0xCB47}, //6744 #HANGUL SYLLABLE SSANGCIEUC YO HIEUH
+ {0xA784, 0xCB4A}, //6745 #HANGUL SYLLABLE SSANGCIEUC U SSANGKIYEOK
+ {0xA785, 0xCB4B}, //6746 #HANGUL SYLLABLE SSANGCIEUC U KIYEOKSIOS
+ {0xA786, 0xCB4D}, //6747 #HANGUL SYLLABLE SSANGCIEUC U NIEUNCIEUC
+ {0xA787, 0xCB4E}, //6748 #HANGUL SYLLABLE SSANGCIEUC U NIEUNHIEUH
+ {0xA788, 0xCB4F}, //6749 #HANGUL SYLLABLE SSANGCIEUC U TIKEUT
+ {0xA789, 0xCB51}, //6750 #HANGUL SYLLABLE SSANGCIEUC U RIEULKIYEOK
+ {0xA78A, 0xCB52}, //6751 #HANGUL SYLLABLE SSANGCIEUC U RIEULMIEUM
+ {0xA78B, 0xCB53}, //6752 #HANGUL SYLLABLE SSANGCIEUC U RIEULPIEUP
+ {0xA78C, 0xCB54}, //6753 #HANGUL SYLLABLE SSANGCIEUC U RIEULSIOS
+ {0xA78D, 0xCB55}, //6754 #HANGUL SYLLABLE SSANGCIEUC U RIEULTHIEUTH
+ {0xA78E, 0xCB56}, //6755 #HANGUL SYLLABLE SSANGCIEUC U RIEULPHIEUPH
+ {0xA78F, 0xCB57}, //6756 #HANGUL SYLLABLE SSANGCIEUC U RIEULHIEUH
+ {0xA790, 0xCB5A}, //6757 #HANGUL SYLLABLE SSANGCIEUC U PIEUPSIOS
+ {0xA791, 0xCB5B}, //6758 #HANGUL SYLLABLE SSANGCIEUC U SIOS
+ {0xA792, 0xCB5C}, //6759 #HANGUL SYLLABLE SSANGCIEUC U SSANGSIOS
+ {0xA793, 0xCB5E}, //6760 #HANGUL SYLLABLE SSANGCIEUC U CIEUC
+ {0xA794, 0xCB5F}, //6761 #HANGUL SYLLABLE SSANGCIEUC U CHIEUCH
+ {0xA795, 0xCB60}, //6762 #HANGUL SYLLABLE SSANGCIEUC U KHIEUKH
+ {0xA796, 0xCB61}, //6763 #HANGUL SYLLABLE SSANGCIEUC U THIEUTH
+ {0xA797, 0xCB62}, //6764 #HANGUL SYLLABLE SSANGCIEUC U PHIEUPH
+ {0xA798, 0xCB63}, //6765 #HANGUL SYLLABLE SSANGCIEUC U HIEUH
+ {0xA799, 0xCB65}, //6766 #HANGUL SYLLABLE SSANGCIEUC WEO KIYEOK
+ {0xA79A, 0xCB66}, //6767 #HANGUL SYLLABLE SSANGCIEUC WEO SSANGKIYEOK
+ {0xA79B, 0xCB67}, //6768 #HANGUL SYLLABLE SSANGCIEUC WEO KIYEOKSIOS
+ {0xA79C, 0xCB68}, //6769 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUN
+ {0xA79D, 0xCB69}, //6770 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUNCIEUC
+ {0xA79E, 0xCB6A}, //6771 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUNHIEUH
+ {0xA79F, 0xCB6B}, //6772 #HANGUL SYLLABLE SSANGCIEUC WEO TIKEUT
+ {0xA7A0, 0xCB6C}, //6773 #HANGUL SYLLABLE SSANGCIEUC WEO RIEUL
+ {0xA7A1, 0x3395}, //6774 #SQUARE MU L
+ {0xA7A2, 0x3396}, //6775 #SQUARE ML
+ {0xA7A3, 0x3397}, //6776 #SQUARE DL
+ {0xA7A4, 0x2113}, //6777 #SCRIPT SMALL L
+ {0xA7A5, 0x3398}, //6778 #SQUARE KL
+ {0xA7A6, 0x33C4}, //6779 #SQUARE CC
+ {0xA7A7, 0x33A3}, //6780 #SQUARE MM CUBED
+ {0xA7A8, 0x33A4}, //6781 #SQUARE CM CUBED
+ {0xA7A9, 0x33A5}, //6782 #SQUARE M CUBED
+ {0xA7AA, 0x33A6}, //6783 #SQUARE KM CUBED
+ {0xA7AB, 0x3399}, //6784 #SQUARE FM
+ {0xA7AC, 0x339A}, //6785 #SQUARE NM
+ {0xA7AD, 0x339B}, //6786 #SQUARE MU M
+ {0xA7AE, 0x339C}, //6787 #SQUARE MM
+ {0xA7AF, 0x339D}, //6788 #SQUARE CM
+ {0xA7B0, 0x339E}, //6789 #SQUARE KM
+ {0xA7B1, 0x339F}, //6790 #SQUARE MM SQUARED
+ {0xA7B2, 0x33A0}, //6791 #SQUARE CM SQUARED
+ {0xA7B3, 0x33A1}, //6792 #SQUARE M SQUARED
+ {0xA7B4, 0x33A2}, //6793 #SQUARE KM SQUARED
+ {0xA7B5, 0x33CA}, //6794 #SQUARE HA
+ {0xA7B6, 0x338D}, //6795 #SQUARE MU G
+ {0xA7B7, 0x338E}, //6796 #SQUARE MG
+ {0xA7B8, 0x338F}, //6797 #SQUARE KG
+ {0xA7B9, 0x33CF}, //6798 #SQUARE KT
+ {0xA7BA, 0x3388}, //6799 #SQUARE CAL
+ {0xA7BB, 0x3389}, //6800 #SQUARE KCAL
+ {0xA7BC, 0x33C8}, //6801 #SQUARE DB
+ {0xA7BD, 0x33A7}, //6802 #SQUARE M OVER S
+ {0xA7BE, 0x33A8}, //6803 #SQUARE M OVER S SQUARED
+ {0xA7BF, 0x33B0}, //6804 #SQUARE PS
+ {0xA7C0, 0x33B1}, //6805 #SQUARE NS
+ {0xA7C1, 0x33B2}, //6806 #SQUARE MU S
+ {0xA7C2, 0x33B3}, //6807 #SQUARE MS
+ {0xA7C3, 0x33B4}, //6808 #SQUARE PV
+ {0xA7C4, 0x33B5}, //6809 #SQUARE NV
+ {0xA7C5, 0x33B6}, //6810 #SQUARE MU V
+ {0xA7C6, 0x33B7}, //6811 #SQUARE MV
+ {0xA7C7, 0x33B8}, //6812 #SQUARE KV
+ {0xA7C8, 0x33B9}, //6813 #SQUARE MV MEGA
+ {0xA7C9, 0x3380}, //6814 #SQUARE PA AMPS
+ {0xA7CA, 0x3381}, //6815 #SQUARE NA
+ {0xA7CB, 0x3382}, //6816 #SQUARE MU A
+ {0xA7CC, 0x3383}, //6817 #SQUARE MA
+ {0xA7CD, 0x3384}, //6818 #SQUARE KA
+ {0xA7CE, 0x33BA}, //6819 #SQUARE PW
+ {0xA7CF, 0x33BB}, //6820 #SQUARE NW
+ {0xA7D0, 0x33BC}, //6821 #SQUARE MU W
+ {0xA7D1, 0x33BD}, //6822 #SQUARE MW
+ {0xA7D2, 0x33BE}, //6823 #SQUARE KW
+ {0xA7D3, 0x33BF}, //6824 #SQUARE MW MEGA
+ {0xA7D4, 0x3390}, //6825 #SQUARE HZ
+ {0xA7D5, 0x3391}, //6826 #SQUARE KHZ
+ {0xA7D6, 0x3392}, //6827 #SQUARE MHZ
+ {0xA7D7, 0x3393}, //6828 #SQUARE GHZ
+ {0xA7D8, 0x3394}, //6829 #SQUARE THZ
+ {0xA7D9, 0x2126}, //6830 #OHM SIGN
+ {0xA7DA, 0x33C0}, //6831 #SQUARE K OHM
+ {0xA7DB, 0x33C1}, //6832 #SQUARE M OHM
+ {0xA7DC, 0x338A}, //6833 #SQUARE PF
+ {0xA7DD, 0x338B}, //6834 #SQUARE NF
+ {0xA7DE, 0x338C}, //6835 #SQUARE MU F
+ {0xA7DF, 0x33D6}, //6836 #SQUARE MOL
+ {0xA7E0, 0x33C5}, //6837 #SQUARE CD
+ {0xA7E1, 0x33AD}, //6838 #SQUARE RAD
+ {0xA7E2, 0x33AE}, //6839 #SQUARE RAD OVER S
+ {0xA7E3, 0x33AF}, //6840 #SQUARE RAD OVER S SQUARED
+ {0xA7E4, 0x33DB}, //6841 #SQUARE SR
+ {0xA7E5, 0x33A9}, //6842 #SQUARE PA
+ {0xA7E6, 0x33AA}, //6843 #SQUARE KPA
+ {0xA7E7, 0x33AB}, //6844 #SQUARE MPA
+ {0xA7E8, 0x33AC}, //6845 #SQUARE GPA
+ {0xA7E9, 0x33DD}, //6846 #SQUARE WB
+ {0xA7EA, 0x33D0}, //6847 #SQUARE LM
+ {0xA7EB, 0x33D3}, //6848 #SQUARE LX
+ {0xA7EC, 0x33C3}, //6849 #SQUARE BQ
+ {0xA7ED, 0x33C9}, //6850 #SQUARE GY
+ {0xA7EE, 0x33DC}, //6851 #SQUARE SV
+ {0xA7EF, 0x33C6}, //6852 #SQUARE C OVER KG
+ {0xA841, 0xCB6D}, //6853 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULKIYEOK
+ {0xA842, 0xCB6E}, //6854 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULMIEUM
+ {0xA843, 0xCB6F}, //6855 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULPIEUP
+ {0xA844, 0xCB70}, //6856 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULSIOS
+ {0xA845, 0xCB71}, //6857 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULTHIEUTH
+ {0xA846, 0xCB72}, //6858 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULPHIEUPH
+ {0xA847, 0xCB73}, //6859 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULHIEUH
+ {0xA848, 0xCB74}, //6860 #HANGUL SYLLABLE SSANGCIEUC WEO MIEUM
+ {0xA849, 0xCB75}, //6861 #HANGUL SYLLABLE SSANGCIEUC WEO PIEUP
+ {0xA84A, 0xCB76}, //6862 #HANGUL SYLLABLE SSANGCIEUC WEO PIEUPSIOS
+ {0xA84B, 0xCB77}, //6863 #HANGUL SYLLABLE SSANGCIEUC WEO SIOS
+ {0xA84C, 0xCB7A}, //6864 #HANGUL SYLLABLE SSANGCIEUC WEO CIEUC
+ {0xA84D, 0xCB7B}, //6865 #HANGUL SYLLABLE SSANGCIEUC WEO CHIEUCH
+ {0xA84E, 0xCB7C}, //6866 #HANGUL SYLLABLE SSANGCIEUC WEO KHIEUKH
+ {0xA84F, 0xCB7D}, //6867 #HANGUL SYLLABLE SSANGCIEUC WEO THIEUTH
+ {0xA850, 0xCB7E}, //6868 #HANGUL SYLLABLE SSANGCIEUC WEO PHIEUPH
+ {0xA851, 0xCB7F}, //6869 #HANGUL SYLLABLE SSANGCIEUC WEO HIEUH
+ {0xA852, 0xCB80}, //6870 #HANGUL SYLLABLE SSANGCIEUC WE
+ {0xA853, 0xCB81}, //6871 #HANGUL SYLLABLE SSANGCIEUC WE KIYEOK
+ {0xA854, 0xCB82}, //6872 #HANGUL SYLLABLE SSANGCIEUC WE SSANGKIYEOK
+ {0xA855, 0xCB83}, //6873 #HANGUL SYLLABLE SSANGCIEUC WE KIYEOKSIOS
+ {0xA856, 0xCB84}, //6874 #HANGUL SYLLABLE SSANGCIEUC WE NIEUN
+ {0xA857, 0xCB85}, //6875 #HANGUL SYLLABLE SSANGCIEUC WE NIEUNCIEUC
+ {0xA858, 0xCB86}, //6876 #HANGUL SYLLABLE SSANGCIEUC WE NIEUNHIEUH
+ {0xA859, 0xCB87}, //6877 #HANGUL SYLLABLE SSANGCIEUC WE TIKEUT
+ {0xA85A, 0xCB88}, //6878 #HANGUL SYLLABLE SSANGCIEUC WE RIEUL
+ {0xA861, 0xCB89}, //6879 #HANGUL SYLLABLE SSANGCIEUC WE RIEULKIYEOK
+ {0xA862, 0xCB8A}, //6880 #HANGUL SYLLABLE SSANGCIEUC WE RIEULMIEUM
+ {0xA863, 0xCB8B}, //6881 #HANGUL SYLLABLE SSANGCIEUC WE RIEULPIEUP
+ {0xA864, 0xCB8C}, //6882 #HANGUL SYLLABLE SSANGCIEUC WE RIEULSIOS
+ {0xA865, 0xCB8D}, //6883 #HANGUL SYLLABLE SSANGCIEUC WE RIEULTHIEUTH
+ {0xA866, 0xCB8E}, //6884 #HANGUL SYLLABLE SSANGCIEUC WE RIEULPHIEUPH
+ {0xA867, 0xCB8F}, //6885 #HANGUL SYLLABLE SSANGCIEUC WE RIEULHIEUH
+ {0xA868, 0xCB90}, //6886 #HANGUL SYLLABLE SSANGCIEUC WE MIEUM
+ {0xA869, 0xCB91}, //6887 #HANGUL SYLLABLE SSANGCIEUC WE PIEUP
+ {0xA86A, 0xCB92}, //6888 #HANGUL SYLLABLE SSANGCIEUC WE PIEUPSIOS
+ {0xA86B, 0xCB93}, //6889 #HANGUL SYLLABLE SSANGCIEUC WE SIOS
+ {0xA86C, 0xCB94}, //6890 #HANGUL SYLLABLE SSANGCIEUC WE SSANGSIOS
+ {0xA86D, 0xCB95}, //6891 #HANGUL SYLLABLE SSANGCIEUC WE IEUNG
+ {0xA86E, 0xCB96}, //6892 #HANGUL SYLLABLE SSANGCIEUC WE CIEUC
+ {0xA86F, 0xCB97}, //6893 #HANGUL SYLLABLE SSANGCIEUC WE CHIEUCH
+ {0xA870, 0xCB98}, //6894 #HANGUL SYLLABLE SSANGCIEUC WE KHIEUKH
+ {0xA871, 0xCB99}, //6895 #HANGUL SYLLABLE SSANGCIEUC WE THIEUTH
+ {0xA872, 0xCB9A}, //6896 #HANGUL SYLLABLE SSANGCIEUC WE PHIEUPH
+ {0xA873, 0xCB9B}, //6897 #HANGUL SYLLABLE SSANGCIEUC WE HIEUH
+ {0xA874, 0xCB9D}, //6898 #HANGUL SYLLABLE SSANGCIEUC WI KIYEOK
+ {0xA875, 0xCB9E}, //6899 #HANGUL SYLLABLE SSANGCIEUC WI SSANGKIYEOK
+ {0xA876, 0xCB9F}, //6900 #HANGUL SYLLABLE SSANGCIEUC WI KIYEOKSIOS
+ {0xA877, 0xCBA0}, //6901 #HANGUL SYLLABLE SSANGCIEUC WI NIEUN
+ {0xA878, 0xCBA1}, //6902 #HANGUL SYLLABLE SSANGCIEUC WI NIEUNCIEUC
+ {0xA879, 0xCBA2}, //6903 #HANGUL SYLLABLE SSANGCIEUC WI NIEUNHIEUH
+ {0xA87A, 0xCBA3}, //6904 #HANGUL SYLLABLE SSANGCIEUC WI TIKEUT
+ {0xA881, 0xCBA4}, //6905 #HANGUL SYLLABLE SSANGCIEUC WI RIEUL
+ {0xA882, 0xCBA5}, //6906 #HANGUL SYLLABLE SSANGCIEUC WI RIEULKIYEOK
+ {0xA883, 0xCBA6}, //6907 #HANGUL SYLLABLE SSANGCIEUC WI RIEULMIEUM
+ {0xA884, 0xCBA7}, //6908 #HANGUL SYLLABLE SSANGCIEUC WI RIEULPIEUP
+ {0xA885, 0xCBA8}, //6909 #HANGUL SYLLABLE SSANGCIEUC WI RIEULSIOS
+ {0xA886, 0xCBA9}, //6910 #HANGUL SYLLABLE SSANGCIEUC WI RIEULTHIEUTH
+ {0xA887, 0xCBAA}, //6911 #HANGUL SYLLABLE SSANGCIEUC WI RIEULPHIEUPH
+ {0xA888, 0xCBAB}, //6912 #HANGUL SYLLABLE SSANGCIEUC WI RIEULHIEUH
+ {0xA889, 0xCBAC}, //6913 #HANGUL SYLLABLE SSANGCIEUC WI MIEUM
+ {0xA88A, 0xCBAD}, //6914 #HANGUL SYLLABLE SSANGCIEUC WI PIEUP
+ {0xA88B, 0xCBAE}, //6915 #HANGUL SYLLABLE SSANGCIEUC WI PIEUPSIOS
+ {0xA88C, 0xCBAF}, //6916 #HANGUL SYLLABLE SSANGCIEUC WI SIOS
+ {0xA88D, 0xCBB0}, //6917 #HANGUL SYLLABLE SSANGCIEUC WI SSANGSIOS
+ {0xA88E, 0xCBB1}, //6918 #HANGUL SYLLABLE SSANGCIEUC WI IEUNG
+ {0xA88F, 0xCBB2}, //6919 #HANGUL SYLLABLE SSANGCIEUC WI CIEUC
+ {0xA890, 0xCBB3}, //6920 #HANGUL SYLLABLE SSANGCIEUC WI CHIEUCH
+ {0xA891, 0xCBB4}, //6921 #HANGUL SYLLABLE SSANGCIEUC WI KHIEUKH
+ {0xA892, 0xCBB5}, //6922 #HANGUL SYLLABLE SSANGCIEUC WI THIEUTH
+ {0xA893, 0xCBB6}, //6923 #HANGUL SYLLABLE SSANGCIEUC WI PHIEUPH
+ {0xA894, 0xCBB7}, //6924 #HANGUL SYLLABLE SSANGCIEUC WI HIEUH
+ {0xA895, 0xCBB9}, //6925 #HANGUL SYLLABLE SSANGCIEUC YU KIYEOK
+ {0xA896, 0xCBBA}, //6926 #HANGUL SYLLABLE SSANGCIEUC YU SSANGKIYEOK
+ {0xA897, 0xCBBB}, //6927 #HANGUL SYLLABLE SSANGCIEUC YU KIYEOKSIOS
+ {0xA898, 0xCBBC}, //6928 #HANGUL SYLLABLE SSANGCIEUC YU NIEUN
+ {0xA899, 0xCBBD}, //6929 #HANGUL SYLLABLE SSANGCIEUC YU NIEUNCIEUC
+ {0xA89A, 0xCBBE}, //6930 #HANGUL SYLLABLE SSANGCIEUC YU NIEUNHIEUH
+ {0xA89B, 0xCBBF}, //6931 #HANGUL SYLLABLE SSANGCIEUC YU TIKEUT
+ {0xA89C, 0xCBC0}, //6932 #HANGUL SYLLABLE SSANGCIEUC YU RIEUL
+ {0xA89D, 0xCBC1}, //6933 #HANGUL SYLLABLE SSANGCIEUC YU RIEULKIYEOK
+ {0xA89E, 0xCBC2}, //6934 #HANGUL SYLLABLE SSANGCIEUC YU RIEULMIEUM
+ {0xA89F, 0xCBC3}, //6935 #HANGUL SYLLABLE SSANGCIEUC YU RIEULPIEUP
+ {0xA8A0, 0xCBC4}, //6936 #HANGUL SYLLABLE SSANGCIEUC YU RIEULSIOS
+ {0xA8A1, 0x00C6}, //6937 #LATIN CAPITAL LETTER AE
+ {0xA8A2, 0x00D0}, //6938 #LATIN CAPITAL LETTER ETH
+ {0xA8A3, 0x00AA}, //6939 #FEMININE ORDINAL INDICATOR
+ {0xA8A4, 0x0126}, //6940 #LATIN CAPITAL LETTER H WITH STROKE
+ {0xA8A6, 0x0132}, //6941 #LATIN CAPITAL LIGATURE IJ
+ {0xA8A8, 0x013F}, //6942 #LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ {0xA8A9, 0x0141}, //6943 #LATIN CAPITAL LETTER L WITH STROKE
+ {0xA8AA, 0x00D8}, //6944 #LATIN CAPITAL LETTER O WITH STROKE
+ {0xA8AB, 0x0152}, //6945 #LATIN CAPITAL LIGATURE OE
+ {0xA8AC, 0x00BA}, //6946 #MASCULINE ORDINAL INDICATOR
+ {0xA8AD, 0x00DE}, //6947 #LATIN CAPITAL LETTER THORN
+ {0xA8AE, 0x0166}, //6948 #LATIN CAPITAL LETTER T WITH STROKE
+ {0xA8AF, 0x014A}, //6949 #LATIN CAPITAL LETTER ENG
+ {0xA8B1, 0x3260}, //6950 #CIRCLED HANGUL KIYEOK
+ {0xA8B2, 0x3261}, //6951 #CIRCLED HANGUL NIEUN
+ {0xA8B3, 0x3262}, //6952 #CIRCLED HANGUL TIKEUT
+ {0xA8B4, 0x3263}, //6953 #CIRCLED HANGUL RIEUL
+ {0xA8B5, 0x3264}, //6954 #CIRCLED HANGUL MIEUM
+ {0xA8B6, 0x3265}, //6955 #CIRCLED HANGUL PIEUP
+ {0xA8B7, 0x3266}, //6956 #CIRCLED HANGUL SIOS
+ {0xA8B8, 0x3267}, //6957 #CIRCLED HANGUL IEUNG
+ {0xA8B9, 0x3268}, //6958 #CIRCLED HANGUL CIEUC
+ {0xA8BA, 0x3269}, //6959 #CIRCLED HANGUL CHIEUCH
+ {0xA8BB, 0x326A}, //6960 #CIRCLED HANGUL KHIEUKH
+ {0xA8BC, 0x326B}, //6961 #CIRCLED HANGUL THIEUTH
+ {0xA8BD, 0x326C}, //6962 #CIRCLED HANGUL PHIEUPH
+ {0xA8BE, 0x326D}, //6963 #CIRCLED HANGUL HIEUH
+ {0xA8BF, 0x326E}, //6964 #CIRCLED HANGUL KIYEOK A
+ {0xA8C0, 0x326F}, //6965 #CIRCLED HANGUL NIEUN A
+ {0xA8C1, 0x3270}, //6966 #CIRCLED HANGUL TIKEUT A
+ {0xA8C2, 0x3271}, //6967 #CIRCLED HANGUL RIEUL A
+ {0xA8C3, 0x3272}, //6968 #CIRCLED HANGUL MIEUM A
+ {0xA8C4, 0x3273}, //6969 #CIRCLED HANGUL PIEUP A
+ {0xA8C5, 0x3274}, //6970 #CIRCLED HANGUL SIOS A
+ {0xA8C6, 0x3275}, //6971 #CIRCLED HANGUL IEUNG A
+ {0xA8C7, 0x3276}, //6972 #CIRCLED HANGUL CIEUC A
+ {0xA8C8, 0x3277}, //6973 #CIRCLED HANGUL CHIEUCH A
+ {0xA8C9, 0x3278}, //6974 #CIRCLED HANGUL KHIEUKH A
+ {0xA8CA, 0x3279}, //6975 #CIRCLED HANGUL THIEUTH A
+ {0xA8CB, 0x327A}, //6976 #CIRCLED HANGUL PHIEUPH A
+ {0xA8CC, 0x327B}, //6977 #CIRCLED HANGUL HIEUH A
+ {0xA8CD, 0x24D0}, //6978 #CIRCLED LATIN SMALL LETTER A
+ {0xA8CE, 0x24D1}, //6979 #CIRCLED LATIN SMALL LETTER B
+ {0xA8CF, 0x24D2}, //6980 #CIRCLED LATIN SMALL LETTER C
+ {0xA8D0, 0x24D3}, //6981 #CIRCLED LATIN SMALL LETTER D
+ {0xA8D1, 0x24D4}, //6982 #CIRCLED LATIN SMALL LETTER E
+ {0xA8D2, 0x24D5}, //6983 #CIRCLED LATIN SMALL LETTER F
+ {0xA8D3, 0x24D6}, //6984 #CIRCLED LATIN SMALL LETTER G
+ {0xA8D4, 0x24D7}, //6985 #CIRCLED LATIN SMALL LETTER H
+ {0xA8D5, 0x24D8}, //6986 #CIRCLED LATIN SMALL LETTER I
+ {0xA8D6, 0x24D9}, //6987 #CIRCLED LATIN SMALL LETTER J
+ {0xA8D7, 0x24DA}, //6988 #CIRCLED LATIN SMALL LETTER K
+ {0xA8D8, 0x24DB}, //6989 #CIRCLED LATIN SMALL LETTER L
+ {0xA8D9, 0x24DC}, //6990 #CIRCLED LATIN SMALL LETTER M
+ {0xA8DA, 0x24DD}, //6991 #CIRCLED LATIN SMALL LETTER N
+ {0xA8DB, 0x24DE}, //6992 #CIRCLED LATIN SMALL LETTER O
+ {0xA8DC, 0x24DF}, //6993 #CIRCLED LATIN SMALL LETTER P
+ {0xA8DD, 0x24E0}, //6994 #CIRCLED LATIN SMALL LETTER Q
+ {0xA8DE, 0x24E1}, //6995 #CIRCLED LATIN SMALL LETTER R
+ {0xA8DF, 0x24E2}, //6996 #CIRCLED LATIN SMALL LETTER S
+ {0xA8E0, 0x24E3}, //6997 #CIRCLED LATIN SMALL LETTER T
+ {0xA8E1, 0x24E4}, //6998 #CIRCLED LATIN SMALL LETTER U
+ {0xA8E2, 0x24E5}, //6999 #CIRCLED LATIN SMALL LETTER V
+ {0xA8E3, 0x24E6}, //7000 #CIRCLED LATIN SMALL LETTER W
+ {0xA8E4, 0x24E7}, //7001 #CIRCLED LATIN SMALL LETTER X
+ {0xA8E5, 0x24E8}, //7002 #CIRCLED LATIN SMALL LETTER Y
+ {0xA8E6, 0x24E9}, //7003 #CIRCLED LATIN SMALL LETTER Z
+ {0xA8E7, 0x2460}, //7004 #CIRCLED DIGIT ONE
+ {0xA8E8, 0x2461}, //7005 #CIRCLED DIGIT TWO
+ {0xA8E9, 0x2462}, //7006 #CIRCLED DIGIT THREE
+ {0xA8EA, 0x2463}, //7007 #CIRCLED DIGIT FOUR
+ {0xA8EB, 0x2464}, //7008 #CIRCLED DIGIT FIVE
+ {0xA8EC, 0x2465}, //7009 #CIRCLED DIGIT SIX
+ {0xA8ED, 0x2466}, //7010 #CIRCLED DIGIT SEVEN
+ {0xA8EE, 0x2467}, //7011 #CIRCLED DIGIT EIGHT
+ {0xA8EF, 0x2468}, //7012 #CIRCLED DIGIT NINE
+ {0xA8F0, 0x2469}, //7013 #CIRCLED NUMBER TEN
+ {0xA8F1, 0x246A}, //7014 #CIRCLED NUMBER ELEVEN
+ {0xA8F2, 0x246B}, //7015 #CIRCLED NUMBER TWELVE
+ {0xA8F3, 0x246C}, //7016 #CIRCLED NUMBER THIRTEEN
+ {0xA8F4, 0x246D}, //7017 #CIRCLED NUMBER FOURTEEN
+ {0xA8F5, 0x246E}, //7018 #CIRCLED NUMBER FIFTEEN
+ {0xA8F6, 0x00BD}, //7019 #VULGAR FRACTION ONE HALF
+ {0xA8F7, 0x2153}, //7020 #VULGAR FRACTION ONE THIRD
+ {0xA8F8, 0x2154}, //7021 #VULGAR FRACTION TWO THIRDS
+ {0xA8F9, 0x00BC}, //7022 #VULGAR FRACTION ONE QUARTER
+ {0xA8FA, 0x00BE}, //7023 #VULGAR FRACTION THREE QUARTERS
+ {0xA8FB, 0x215B}, //7024 #VULGAR FRACTION ONE EIGHTH
+ {0xA8FC, 0x215C}, //7025 #VULGAR FRACTION THREE EIGHTHS
+ {0xA8FD, 0x215D}, //7026 #VULGAR FRACTION FIVE EIGHTHS
+ {0xA8FE, 0x215E}, //7027 #VULGAR FRACTION SEVEN EIGHTHS
+ {0xA941, 0xCBC5}, //7028 #HANGUL SYLLABLE SSANGCIEUC YU RIEULTHIEUTH
+ {0xA942, 0xCBC6}, //7029 #HANGUL SYLLABLE SSANGCIEUC YU RIEULPHIEUPH
+ {0xA943, 0xCBC7}, //7030 #HANGUL SYLLABLE SSANGCIEUC YU RIEULHIEUH
+ {0xA944, 0xCBC8}, //7031 #HANGUL SYLLABLE SSANGCIEUC YU MIEUM
+ {0xA945, 0xCBC9}, //7032 #HANGUL SYLLABLE SSANGCIEUC YU PIEUP
+ {0xA946, 0xCBCA}, //7033 #HANGUL SYLLABLE SSANGCIEUC YU PIEUPSIOS
+ {0xA947, 0xCBCB}, //7034 #HANGUL SYLLABLE SSANGCIEUC YU SIOS
+ {0xA948, 0xCBCC}, //7035 #HANGUL SYLLABLE SSANGCIEUC YU SSANGSIOS
+ {0xA949, 0xCBCD}, //7036 #HANGUL SYLLABLE SSANGCIEUC YU IEUNG
+ {0xA94A, 0xCBCE}, //7037 #HANGUL SYLLABLE SSANGCIEUC YU CIEUC
+ {0xA94B, 0xCBCF}, //7038 #HANGUL SYLLABLE SSANGCIEUC YU CHIEUCH
+ {0xA94C, 0xCBD0}, //7039 #HANGUL SYLLABLE SSANGCIEUC YU KHIEUKH
+ {0xA94D, 0xCBD1}, //7040 #HANGUL SYLLABLE SSANGCIEUC YU THIEUTH
+ {0xA94E, 0xCBD2}, //7041 #HANGUL SYLLABLE SSANGCIEUC YU PHIEUPH
+ {0xA94F, 0xCBD3}, //7042 #HANGUL SYLLABLE SSANGCIEUC YU HIEUH
+ {0xA950, 0xCBD5}, //7043 #HANGUL SYLLABLE SSANGCIEUC EU KIYEOK
+ {0xA951, 0xCBD6}, //7044 #HANGUL SYLLABLE SSANGCIEUC EU SSANGKIYEOK
+ {0xA952, 0xCBD7}, //7045 #HANGUL SYLLABLE SSANGCIEUC EU KIYEOKSIOS
+ {0xA953, 0xCBD8}, //7046 #HANGUL SYLLABLE SSANGCIEUC EU NIEUN
+ {0xA954, 0xCBD9}, //7047 #HANGUL SYLLABLE SSANGCIEUC EU NIEUNCIEUC
+ {0xA955, 0xCBDA}, //7048 #HANGUL SYLLABLE SSANGCIEUC EU NIEUNHIEUH
+ {0xA956, 0xCBDB}, //7049 #HANGUL SYLLABLE SSANGCIEUC EU TIKEUT
+ {0xA957, 0xCBDC}, //7050 #HANGUL SYLLABLE SSANGCIEUC EU RIEUL
+ {0xA958, 0xCBDD}, //7051 #HANGUL SYLLABLE SSANGCIEUC EU RIEULKIYEOK
+ {0xA959, 0xCBDE}, //7052 #HANGUL SYLLABLE SSANGCIEUC EU RIEULMIEUM
+ {0xA95A, 0xCBDF}, //7053 #HANGUL SYLLABLE SSANGCIEUC EU RIEULPIEUP
+ {0xA961, 0xCBE0}, //7054 #HANGUL SYLLABLE SSANGCIEUC EU RIEULSIOS
+ {0xA962, 0xCBE1}, //7055 #HANGUL SYLLABLE SSANGCIEUC EU RIEULTHIEUTH
+ {0xA963, 0xCBE2}, //7056 #HANGUL SYLLABLE SSANGCIEUC EU RIEULPHIEUPH
+ {0xA964, 0xCBE3}, //7057 #HANGUL SYLLABLE SSANGCIEUC EU RIEULHIEUH
+ {0xA965, 0xCBE5}, //7058 #HANGUL SYLLABLE SSANGCIEUC EU PIEUP
+ {0xA966, 0xCBE6}, //7059 #HANGUL SYLLABLE SSANGCIEUC EU PIEUPSIOS
+ {0xA967, 0xCBE8}, //7060 #HANGUL SYLLABLE SSANGCIEUC EU SSANGSIOS
+ {0xA968, 0xCBEA}, //7061 #HANGUL SYLLABLE SSANGCIEUC EU CIEUC
+ {0xA969, 0xCBEB}, //7062 #HANGUL SYLLABLE SSANGCIEUC EU CHIEUCH
+ {0xA96A, 0xCBEC}, //7063 #HANGUL SYLLABLE SSANGCIEUC EU KHIEUKH
+ {0xA96B, 0xCBED}, //7064 #HANGUL SYLLABLE SSANGCIEUC EU THIEUTH
+ {0xA96C, 0xCBEE}, //7065 #HANGUL SYLLABLE SSANGCIEUC EU PHIEUPH
+ {0xA96D, 0xCBEF}, //7066 #HANGUL SYLLABLE SSANGCIEUC EU HIEUH
+ {0xA96E, 0xCBF0}, //7067 #HANGUL SYLLABLE SSANGCIEUC YI
+ {0xA96F, 0xCBF1}, //7068 #HANGUL SYLLABLE SSANGCIEUC YI KIYEOK
+ {0xA970, 0xCBF2}, //7069 #HANGUL SYLLABLE SSANGCIEUC YI SSANGKIYEOK
+ {0xA971, 0xCBF3}, //7070 #HANGUL SYLLABLE SSANGCIEUC YI KIYEOKSIOS
+ {0xA972, 0xCBF4}, //7071 #HANGUL SYLLABLE SSANGCIEUC YI NIEUN
+ {0xA973, 0xCBF5}, //7072 #HANGUL SYLLABLE SSANGCIEUC YI NIEUNCIEUC
+ {0xA974, 0xCBF6}, //7073 #HANGUL SYLLABLE SSANGCIEUC YI NIEUNHIEUH
+ {0xA975, 0xCBF7}, //7074 #HANGUL SYLLABLE SSANGCIEUC YI TIKEUT
+ {0xA976, 0xCBF8}, //7075 #HANGUL SYLLABLE SSANGCIEUC YI RIEUL
+ {0xA977, 0xCBF9}, //7076 #HANGUL SYLLABLE SSANGCIEUC YI RIEULKIYEOK
+ {0xA978, 0xCBFA}, //7077 #HANGUL SYLLABLE SSANGCIEUC YI RIEULMIEUM
+ {0xA979, 0xCBFB}, //7078 #HANGUL SYLLABLE SSANGCIEUC YI RIEULPIEUP
+ {0xA97A, 0xCBFC}, //7079 #HANGUL SYLLABLE SSANGCIEUC YI RIEULSIOS
+ {0xA981, 0xCBFD}, //7080 #HANGUL SYLLABLE SSANGCIEUC YI RIEULTHIEUTH
+ {0xA982, 0xCBFE}, //7081 #HANGUL SYLLABLE SSANGCIEUC YI RIEULPHIEUPH
+ {0xA983, 0xCBFF}, //7082 #HANGUL SYLLABLE SSANGCIEUC YI RIEULHIEUH
+ {0xA984, 0xCC00}, //7083 #HANGUL SYLLABLE SSANGCIEUC YI MIEUM
+ {0xA985, 0xCC01}, //7084 #HANGUL SYLLABLE SSANGCIEUC YI PIEUP
+ {0xA986, 0xCC02}, //7085 #HANGUL SYLLABLE SSANGCIEUC YI PIEUPSIOS
+ {0xA987, 0xCC03}, //7086 #HANGUL SYLLABLE SSANGCIEUC YI SIOS
+ {0xA988, 0xCC04}, //7087 #HANGUL SYLLABLE SSANGCIEUC YI SSANGSIOS
+ {0xA989, 0xCC05}, //7088 #HANGUL SYLLABLE SSANGCIEUC YI IEUNG
+ {0xA98A, 0xCC06}, //7089 #HANGUL SYLLABLE SSANGCIEUC YI CIEUC
+ {0xA98B, 0xCC07}, //7090 #HANGUL SYLLABLE SSANGCIEUC YI CHIEUCH
+ {0xA98C, 0xCC08}, //7091 #HANGUL SYLLABLE SSANGCIEUC YI KHIEUKH
+ {0xA98D, 0xCC09}, //7092 #HANGUL SYLLABLE SSANGCIEUC YI THIEUTH
+ {0xA98E, 0xCC0A}, //7093 #HANGUL SYLLABLE SSANGCIEUC YI PHIEUPH
+ {0xA98F, 0xCC0B}, //7094 #HANGUL SYLLABLE SSANGCIEUC YI HIEUH
+ {0xA990, 0xCC0E}, //7095 #HANGUL SYLLABLE SSANGCIEUC I SSANGKIYEOK
+ {0xA991, 0xCC0F}, //7096 #HANGUL SYLLABLE SSANGCIEUC I KIYEOKSIOS
+ {0xA992, 0xCC11}, //7097 #HANGUL SYLLABLE SSANGCIEUC I NIEUNCIEUC
+ {0xA993, 0xCC12}, //7098 #HANGUL SYLLABLE SSANGCIEUC I NIEUNHIEUH
+ {0xA994, 0xCC13}, //7099 #HANGUL SYLLABLE SSANGCIEUC I TIKEUT
+ {0xA995, 0xCC15}, //7100 #HANGUL SYLLABLE SSANGCIEUC I RIEULKIYEOK
+ {0xA996, 0xCC16}, //7101 #HANGUL SYLLABLE SSANGCIEUC I RIEULMIEUM
+ {0xA997, 0xCC17}, //7102 #HANGUL SYLLABLE SSANGCIEUC I RIEULPIEUP
+ {0xA998, 0xCC18}, //7103 #HANGUL SYLLABLE SSANGCIEUC I RIEULSIOS
+ {0xA999, 0xCC19}, //7104 #HANGUL SYLLABLE SSANGCIEUC I RIEULTHIEUTH
+ {0xA99A, 0xCC1A}, //7105 #HANGUL SYLLABLE SSANGCIEUC I RIEULPHIEUPH
+ {0xA99B, 0xCC1B}, //7106 #HANGUL SYLLABLE SSANGCIEUC I RIEULHIEUH
+ {0xA99C, 0xCC1E}, //7107 #HANGUL SYLLABLE SSANGCIEUC I PIEUPSIOS
+ {0xA99D, 0xCC1F}, //7108 #HANGUL SYLLABLE SSANGCIEUC I SIOS
+ {0xA99E, 0xCC20}, //7109 #HANGUL SYLLABLE SSANGCIEUC I SSANGSIOS
+ {0xA99F, 0xCC23}, //7110 #HANGUL SYLLABLE SSANGCIEUC I CHIEUCH
+ {0xA9A0, 0xCC24}, //7111 #HANGUL SYLLABLE SSANGCIEUC I KHIEUKH
+ {0xA9A1, 0x00E6}, //7112 #LATIN SMALL LETTER AE
+ {0xA9A2, 0x0111}, //7113 #LATIN SMALL LETTER D WITH STROKE
+ {0xA9A3, 0x00F0}, //7114 #LATIN SMALL LETTER ETH
+ {0xA9A4, 0x0127}, //7115 #LATIN SMALL LETTER H WITH STROKE
+ {0xA9A5, 0x0131}, //7116 #LATIN SMALL LETTER DOTLESS I
+ {0xA9A6, 0x0133}, //7117 #LATIN SMALL LIGATURE IJ
+ {0xA9A7, 0x0138}, //7118 #LATIN SMALL LETTER KRA
+ {0xA9A8, 0x0140}, //7119 #LATIN SMALL LETTER L WITH MIDDLE DOT
+ {0xA9A9, 0x0142}, //7120 #LATIN SMALL LETTER L WITH STROKE
+ {0xA9AA, 0x00F8}, //7121 #LATIN SMALL LETTER O WITH STROKE
+ {0xA9AB, 0x0153}, //7122 #LATIN SMALL LIGATURE OE
+ {0xA9AC, 0x00DF}, //7123 #LATIN SMALL LETTER SHARP S
+ {0xA9AD, 0x00FE}, //7124 #LATIN SMALL LETTER THORN
+ {0xA9AE, 0x0167}, //7125 #LATIN SMALL LETTER T WITH STROKE
+ {0xA9AF, 0x014B}, //7126 #LATIN SMALL LETTER ENG
+ {0xA9B0, 0x0149}, //7127 #LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ {0xA9B1, 0x3200}, //7128 #PARENTHESIZED HANGUL KIYEOK
+ {0xA9B2, 0x3201}, //7129 #PARENTHESIZED HANGUL NIEUN
+ {0xA9B3, 0x3202}, //7130 #PARENTHESIZED HANGUL TIKEUT
+ {0xA9B4, 0x3203}, //7131 #PARENTHESIZED HANGUL RIEUL
+ {0xA9B5, 0x3204}, //7132 #PARENTHESIZED HANGUL MIEUM
+ {0xA9B6, 0x3205}, //7133 #PARENTHESIZED HANGUL PIEUP
+ {0xA9B7, 0x3206}, //7134 #PARENTHESIZED HANGUL SIOS
+ {0xA9B8, 0x3207}, //7135 #PARENTHESIZED HANGUL IEUNG
+ {0xA9B9, 0x3208}, //7136 #PARENTHESIZED HANGUL CIEUC
+ {0xA9BA, 0x3209}, //7137 #PARENTHESIZED HANGUL CHIEUCH
+ {0xA9BB, 0x320A}, //7138 #PARENTHESIZED HANGUL KHIEUKH
+ {0xA9BC, 0x320B}, //7139 #PARENTHESIZED HANGUL THIEUTH
+ {0xA9BD, 0x320C}, //7140 #PARENTHESIZED HANGUL PHIEUPH
+ {0xA9BE, 0x320D}, //7141 #PARENTHESIZED HANGUL HIEUH
+ {0xA9BF, 0x320E}, //7142 #PARENTHESIZED HANGUL KIYEOK A
+ {0xA9C0, 0x320F}, //7143 #PARENTHESIZED HANGUL NIEUN A
+ {0xA9C1, 0x3210}, //7144 #PARENTHESIZED HANGUL TIKEUT A
+ {0xA9C2, 0x3211}, //7145 #PARENTHESIZED HANGUL RIEUL A
+ {0xA9C3, 0x3212}, //7146 #PARENTHESIZED HANGUL MIEUM A
+ {0xA9C4, 0x3213}, //7147 #PARENTHESIZED HANGUL PIEUP A
+ {0xA9C5, 0x3214}, //7148 #PARENTHESIZED HANGUL SIOS A
+ {0xA9C6, 0x3215}, //7149 #PARENTHESIZED HANGUL IEUNG A
+ {0xA9C7, 0x3216}, //7150 #PARENTHESIZED HANGUL CIEUC A
+ {0xA9C8, 0x3217}, //7151 #PARENTHESIZED HANGUL CHIEUCH A
+ {0xA9C9, 0x3218}, //7152 #PARENTHESIZED HANGUL KHIEUKH A
+ {0xA9CA, 0x3219}, //7153 #PARENTHESIZED HANGUL THIEUTH A
+ {0xA9CB, 0x321A}, //7154 #PARENTHESIZED HANGUL PHIEUPH A
+ {0xA9CC, 0x321B}, //7155 #PARENTHESIZED HANGUL HIEUH A
+ {0xA9CD, 0x249C}, //7156 #PARENTHESIZED LATIN SMALL LETTER A
+ {0xA9CE, 0x249D}, //7157 #PARENTHESIZED LATIN SMALL LETTER B
+ {0xA9CF, 0x249E}, //7158 #PARENTHESIZED LATIN SMALL LETTER C
+ {0xA9D0, 0x249F}, //7159 #PARENTHESIZED LATIN SMALL LETTER D
+ {0xA9D1, 0x24A0}, //7160 #PARENTHESIZED LATIN SMALL LETTER E
+ {0xA9D2, 0x24A1}, //7161 #PARENTHESIZED LATIN SMALL LETTER F
+ {0xA9D3, 0x24A2}, //7162 #PARENTHESIZED LATIN SMALL LETTER G
+ {0xA9D4, 0x24A3}, //7163 #PARENTHESIZED LATIN SMALL LETTER H
+ {0xA9D5, 0x24A4}, //7164 #PARENTHESIZED LATIN SMALL LETTER I
+ {0xA9D6, 0x24A5}, //7165 #PARENTHESIZED LATIN SMALL LETTER J
+ {0xA9D7, 0x24A6}, //7166 #PARENTHESIZED LATIN SMALL LETTER K
+ {0xA9D8, 0x24A7}, //7167 #PARENTHESIZED LATIN SMALL LETTER L
+ {0xA9D9, 0x24A8}, //7168 #PARENTHESIZED LATIN SMALL LETTER M
+ {0xA9DA, 0x24A9}, //7169 #PARENTHESIZED LATIN SMALL LETTER N
+ {0xA9DB, 0x24AA}, //7170 #PARENTHESIZED LATIN SMALL LETTER O
+ {0xA9DC, 0x24AB}, //7171 #PARENTHESIZED LATIN SMALL LETTER P
+ {0xA9DD, 0x24AC}, //7172 #PARENTHESIZED LATIN SMALL LETTER Q
+ {0xA9DE, 0x24AD}, //7173 #PARENTHESIZED LATIN SMALL LETTER R
+ {0xA9DF, 0x24AE}, //7174 #PARENTHESIZED LATIN SMALL LETTER S
+ {0xA9E0, 0x24AF}, //7175 #PARENTHESIZED LATIN SMALL LETTER T
+ {0xA9E1, 0x24B0}, //7176 #PARENTHESIZED LATIN SMALL LETTER U
+ {0xA9E2, 0x24B1}, //7177 #PARENTHESIZED LATIN SMALL LETTER V
+ {0xA9E3, 0x24B2}, //7178 #PARENTHESIZED LATIN SMALL LETTER W
+ {0xA9E4, 0x24B3}, //7179 #PARENTHESIZED LATIN SMALL LETTER X
+ {0xA9E5, 0x24B4}, //7180 #PARENTHESIZED LATIN SMALL LETTER Y
+ {0xA9E6, 0x24B5}, //7181 #PARENTHESIZED LATIN SMALL LETTER Z
+ {0xA9E7, 0x2474}, //7182 #PARENTHESIZED DIGIT ONE
+ {0xA9E8, 0x2475}, //7183 #PARENTHESIZED DIGIT TWO
+ {0xA9E9, 0x2476}, //7184 #PARENTHESIZED DIGIT THREE
+ {0xA9EA, 0x2477}, //7185 #PARENTHESIZED DIGIT FOUR
+ {0xA9EB, 0x2478}, //7186 #PARENTHESIZED DIGIT FIVE
+ {0xA9EC, 0x2479}, //7187 #PARENTHESIZED DIGIT SIX
+ {0xA9ED, 0x247A}, //7188 #PARENTHESIZED DIGIT SEVEN
+ {0xA9EE, 0x247B}, //7189 #PARENTHESIZED DIGIT EIGHT
+ {0xA9EF, 0x247C}, //7190 #PARENTHESIZED DIGIT NINE
+ {0xA9F0, 0x247D}, //7191 #PARENTHESIZED NUMBER TEN
+ {0xA9F1, 0x247E}, //7192 #PARENTHESIZED NUMBER ELEVEN
+ {0xA9F2, 0x247F}, //7193 #PARENTHESIZED NUMBER TWELVE
+ {0xA9F3, 0x2480}, //7194 #PARENTHESIZED NUMBER THIRTEEN
+ {0xA9F4, 0x2481}, //7195 #PARENTHESIZED NUMBER FOURTEEN
+ {0xA9F5, 0x2482}, //7196 #PARENTHESIZED NUMBER FIFTEEN
+ {0xA9F6, 0x00B9}, //7197 #SUPERSCRIPT ONE
+ {0xA9F7, 0x00B2}, //7198 #SUPERSCRIPT TWO
+ {0xA9F8, 0x00B3}, //7199 #SUPERSCRIPT THREE
+ {0xA9F9, 0x2074}, //7200 #SUPERSCRIPT FOUR
+ {0xA9FA, 0x207F}, //7201 #SUPERSCRIPT LATIN SMALL LETTER N
+ {0xA9FB, 0x2081}, //7202 #SUBSCRIPT ONE
+ {0xA9FC, 0x2082}, //7203 #SUBSCRIPT TWO
+ {0xA9FD, 0x2083}, //7204 #SUBSCRIPT THREE
+ {0xA9FE, 0x2084}, //7205 #SUBSCRIPT FOUR
+ {0xAA41, 0xCC25}, //7206 #HANGUL SYLLABLE SSANGCIEUC I THIEUTH
+ {0xAA42, 0xCC26}, //7207 #HANGUL SYLLABLE SSANGCIEUC I PHIEUPH
+ {0xAA43, 0xCC2A}, //7208 #HANGUL SYLLABLE CHIEUCH A SSANGKIYEOK
+ {0xAA44, 0xCC2B}, //7209 #HANGUL SYLLABLE CHIEUCH A KIYEOKSIOS
+ {0xAA45, 0xCC2D}, //7210 #HANGUL SYLLABLE CHIEUCH A NIEUNCIEUC
+ {0xAA46, 0xCC2F}, //7211 #HANGUL SYLLABLE CHIEUCH A TIKEUT
+ {0xAA47, 0xCC31}, //7212 #HANGUL SYLLABLE CHIEUCH A RIEULKIYEOK
+ {0xAA48, 0xCC32}, //7213 #HANGUL SYLLABLE CHIEUCH A RIEULMIEUM
+ {0xAA49, 0xCC33}, //7214 #HANGUL SYLLABLE CHIEUCH A RIEULPIEUP
+ {0xAA4A, 0xCC34}, //7215 #HANGUL SYLLABLE CHIEUCH A RIEULSIOS
+ {0xAA4B, 0xCC35}, //7216 #HANGUL SYLLABLE CHIEUCH A RIEULTHIEUTH
+ {0xAA4C, 0xCC36}, //7217 #HANGUL SYLLABLE CHIEUCH A RIEULPHIEUPH
+ {0xAA4D, 0xCC37}, //7218 #HANGUL SYLLABLE CHIEUCH A RIEULHIEUH
+ {0xAA4E, 0xCC3A}, //7219 #HANGUL SYLLABLE CHIEUCH A PIEUPSIOS
+ {0xAA4F, 0xCC3F}, //7220 #HANGUL SYLLABLE CHIEUCH A CHIEUCH
+ {0xAA50, 0xCC40}, //7221 #HANGUL SYLLABLE CHIEUCH A KHIEUKH
+ {0xAA51, 0xCC41}, //7222 #HANGUL SYLLABLE CHIEUCH A THIEUTH
+ {0xAA52, 0xCC42}, //7223 #HANGUL SYLLABLE CHIEUCH A PHIEUPH
+ {0xAA53, 0xCC43}, //7224 #HANGUL SYLLABLE CHIEUCH A HIEUH
+ {0xAA54, 0xCC46}, //7225 #HANGUL SYLLABLE CHIEUCH AE SSANGKIYEOK
+ {0xAA55, 0xCC47}, //7226 #HANGUL SYLLABLE CHIEUCH AE KIYEOKSIOS
+ {0xAA56, 0xCC49}, //7227 #HANGUL SYLLABLE CHIEUCH AE NIEUNCIEUC
+ {0xAA57, 0xCC4A}, //7228 #HANGUL SYLLABLE CHIEUCH AE NIEUNHIEUH
+ {0xAA58, 0xCC4B}, //7229 #HANGUL SYLLABLE CHIEUCH AE TIKEUT
+ {0xAA59, 0xCC4D}, //7230 #HANGUL SYLLABLE CHIEUCH AE RIEULKIYEOK
+ {0xAA5A, 0xCC4E}, //7231 #HANGUL SYLLABLE CHIEUCH AE RIEULMIEUM
+ {0xAA61, 0xCC4F}, //7232 #HANGUL SYLLABLE CHIEUCH AE RIEULPIEUP
+ {0xAA62, 0xCC50}, //7233 #HANGUL SYLLABLE CHIEUCH AE RIEULSIOS
+ {0xAA63, 0xCC51}, //7234 #HANGUL SYLLABLE CHIEUCH AE RIEULTHIEUTH
+ {0xAA64, 0xCC52}, //7235 #HANGUL SYLLABLE CHIEUCH AE RIEULPHIEUPH
+ {0xAA65, 0xCC53}, //7236 #HANGUL SYLLABLE CHIEUCH AE RIEULHIEUH
+ {0xAA66, 0xCC56}, //7237 #HANGUL SYLLABLE CHIEUCH AE PIEUPSIOS
+ {0xAA67, 0xCC5A}, //7238 #HANGUL SYLLABLE CHIEUCH AE CIEUC
+ {0xAA68, 0xCC5B}, //7239 #HANGUL SYLLABLE CHIEUCH AE CHIEUCH
+ {0xAA69, 0xCC5C}, //7240 #HANGUL SYLLABLE CHIEUCH AE KHIEUKH
+ {0xAA6A, 0xCC5D}, //7241 #HANGUL SYLLABLE CHIEUCH AE THIEUTH
+ {0xAA6B, 0xCC5E}, //7242 #HANGUL SYLLABLE CHIEUCH AE PHIEUPH
+ {0xAA6C, 0xCC5F}, //7243 #HANGUL SYLLABLE CHIEUCH AE HIEUH
+ {0xAA6D, 0xCC61}, //7244 #HANGUL SYLLABLE CHIEUCH YA KIYEOK
+ {0xAA6E, 0xCC62}, //7245 #HANGUL SYLLABLE CHIEUCH YA SSANGKIYEOK
+ {0xAA6F, 0xCC63}, //7246 #HANGUL SYLLABLE CHIEUCH YA KIYEOKSIOS
+ {0xAA70, 0xCC65}, //7247 #HANGUL SYLLABLE CHIEUCH YA NIEUNCIEUC
+ {0xAA71, 0xCC67}, //7248 #HANGUL SYLLABLE CHIEUCH YA TIKEUT
+ {0xAA72, 0xCC69}, //7249 #HANGUL SYLLABLE CHIEUCH YA RIEULKIYEOK
+ {0xAA73, 0xCC6A}, //7250 #HANGUL SYLLABLE CHIEUCH YA RIEULMIEUM
+ {0xAA74, 0xCC6B}, //7251 #HANGUL SYLLABLE CHIEUCH YA RIEULPIEUP
+ {0xAA75, 0xCC6C}, //7252 #HANGUL SYLLABLE CHIEUCH YA RIEULSIOS
+ {0xAA76, 0xCC6D}, //7253 #HANGUL SYLLABLE CHIEUCH YA RIEULTHIEUTH
+ {0xAA77, 0xCC6E}, //7254 #HANGUL SYLLABLE CHIEUCH YA RIEULPHIEUPH
+ {0xAA78, 0xCC6F}, //7255 #HANGUL SYLLABLE CHIEUCH YA RIEULHIEUH
+ {0xAA79, 0xCC71}, //7256 #HANGUL SYLLABLE CHIEUCH YA PIEUP
+ {0xAA7A, 0xCC72}, //7257 #HANGUL SYLLABLE CHIEUCH YA PIEUPSIOS
+ {0xAA81, 0xCC73}, //7258 #HANGUL SYLLABLE CHIEUCH YA SIOS
+ {0xAA82, 0xCC74}, //7259 #HANGUL SYLLABLE CHIEUCH YA SSANGSIOS
+ {0xAA83, 0xCC76}, //7260 #HANGUL SYLLABLE CHIEUCH YA CIEUC
+ {0xAA84, 0xCC77}, //7261 #HANGUL SYLLABLE CHIEUCH YA CHIEUCH
+ {0xAA85, 0xCC78}, //7262 #HANGUL SYLLABLE CHIEUCH YA KHIEUKH
+ {0xAA86, 0xCC79}, //7263 #HANGUL SYLLABLE CHIEUCH YA THIEUTH
+ {0xAA87, 0xCC7A}, //7264 #HANGUL SYLLABLE CHIEUCH YA PHIEUPH
+ {0xAA88, 0xCC7B}, //7265 #HANGUL SYLLABLE CHIEUCH YA HIEUH
+ {0xAA89, 0xCC7C}, //7266 #HANGUL SYLLABLE CHIEUCH YAE
+ {0xAA8A, 0xCC7D}, //7267 #HANGUL SYLLABLE CHIEUCH YAE KIYEOK
+ {0xAA8B, 0xCC7E}, //7268 #HANGUL SYLLABLE CHIEUCH YAE SSANGKIYEOK
+ {0xAA8C, 0xCC7F}, //7269 #HANGUL SYLLABLE CHIEUCH YAE KIYEOKSIOS
+ {0xAA8D, 0xCC80}, //7270 #HANGUL SYLLABLE CHIEUCH YAE NIEUN
+ {0xAA8E, 0xCC81}, //7271 #HANGUL SYLLABLE CHIEUCH YAE NIEUNCIEUC
+ {0xAA8F, 0xCC82}, //7272 #HANGUL SYLLABLE CHIEUCH YAE NIEUNHIEUH
+ {0xAA90, 0xCC83}, //7273 #HANGUL SYLLABLE CHIEUCH YAE TIKEUT
+ {0xAA91, 0xCC84}, //7274 #HANGUL SYLLABLE CHIEUCH YAE RIEUL
+ {0xAA92, 0xCC85}, //7275 #HANGUL SYLLABLE CHIEUCH YAE RIEULKIYEOK
+ {0xAA93, 0xCC86}, //7276 #HANGUL SYLLABLE CHIEUCH YAE RIEULMIEUM
+ {0xAA94, 0xCC87}, //7277 #HANGUL SYLLABLE CHIEUCH YAE RIEULPIEUP
+ {0xAA95, 0xCC88}, //7278 #HANGUL SYLLABLE CHIEUCH YAE RIEULSIOS
+ {0xAA96, 0xCC89}, //7279 #HANGUL SYLLABLE CHIEUCH YAE RIEULTHIEUTH
+ {0xAA97, 0xCC8A}, //7280 #HANGUL SYLLABLE CHIEUCH YAE RIEULPHIEUPH
+ {0xAA98, 0xCC8B}, //7281 #HANGUL SYLLABLE CHIEUCH YAE RIEULHIEUH
+ {0xAA99, 0xCC8C}, //7282 #HANGUL SYLLABLE CHIEUCH YAE MIEUM
+ {0xAA9A, 0xCC8D}, //7283 #HANGUL SYLLABLE CHIEUCH YAE PIEUP
+ {0xAA9B, 0xCC8E}, //7284 #HANGUL SYLLABLE CHIEUCH YAE PIEUPSIOS
+ {0xAA9C, 0xCC8F}, //7285 #HANGUL SYLLABLE CHIEUCH YAE SIOS
+ {0xAA9D, 0xCC90}, //7286 #HANGUL SYLLABLE CHIEUCH YAE SSANGSIOS
+ {0xAA9E, 0xCC91}, //7287 #HANGUL SYLLABLE CHIEUCH YAE IEUNG
+ {0xAA9F, 0xCC92}, //7288 #HANGUL SYLLABLE CHIEUCH YAE CIEUC
+ {0xAAA0, 0xCC93}, //7289 #HANGUL SYLLABLE CHIEUCH YAE CHIEUCH
+ {0xAAA1, 0x3041}, //7290 #HIRAGANA LETTER SMALL A
+ {0xAAA2, 0x3042}, //7291 #HIRAGANA LETTER A
+ {0xAAA3, 0x3043}, //7292 #HIRAGANA LETTER SMALL I
+ {0xAAA4, 0x3044}, //7293 #HIRAGANA LETTER I
+ {0xAAA5, 0x3045}, //7294 #HIRAGANA LETTER SMALL U
+ {0xAAA6, 0x3046}, //7295 #HIRAGANA LETTER U
+ {0xAAA7, 0x3047}, //7296 #HIRAGANA LETTER SMALL E
+ {0xAAA8, 0x3048}, //7297 #HIRAGANA LETTER E
+ {0xAAA9, 0x3049}, //7298 #HIRAGANA LETTER SMALL O
+ {0xAAAA, 0x304A}, //7299 #HIRAGANA LETTER O
+ {0xAAAB, 0x304B}, //7300 #HIRAGANA LETTER KA
+ {0xAAAC, 0x304C}, //7301 #HIRAGANA LETTER GA
+ {0xAAAD, 0x304D}, //7302 #HIRAGANA LETTER KI
+ {0xAAAE, 0x304E}, //7303 #HIRAGANA LETTER GI
+ {0xAAAF, 0x304F}, //7304 #HIRAGANA LETTER KU
+ {0xAAB0, 0x3050}, //7305 #HIRAGANA LETTER GU
+ {0xAAB1, 0x3051}, //7306 #HIRAGANA LETTER KE
+ {0xAAB2, 0x3052}, //7307 #HIRAGANA LETTER GE
+ {0xAAB3, 0x3053}, //7308 #HIRAGANA LETTER KO
+ {0xAAB4, 0x3054}, //7309 #HIRAGANA LETTER GO
+ {0xAAB5, 0x3055}, //7310 #HIRAGANA LETTER SA
+ {0xAAB6, 0x3056}, //7311 #HIRAGANA LETTER ZA
+ {0xAAB7, 0x3057}, //7312 #HIRAGANA LETTER SI
+ {0xAAB8, 0x3058}, //7313 #HIRAGANA LETTER ZI
+ {0xAAB9, 0x3059}, //7314 #HIRAGANA LETTER SU
+ {0xAABA, 0x305A}, //7315 #HIRAGANA LETTER ZU
+ {0xAABB, 0x305B}, //7316 #HIRAGANA LETTER SE
+ {0xAABC, 0x305C}, //7317 #HIRAGANA LETTER ZE
+ {0xAABD, 0x305D}, //7318 #HIRAGANA LETTER SO
+ {0xAABE, 0x305E}, //7319 #HIRAGANA LETTER ZO
+ {0xAABF, 0x305F}, //7320 #HIRAGANA LETTER TA
+ {0xAAC0, 0x3060}, //7321 #HIRAGANA LETTER DA
+ {0xAAC1, 0x3061}, //7322 #HIRAGANA LETTER TI
+ {0xAAC2, 0x3062}, //7323 #HIRAGANA LETTER DI
+ {0xAAC3, 0x3063}, //7324 #HIRAGANA LETTER SMALL TU
+ {0xAAC4, 0x3064}, //7325 #HIRAGANA LETTER TU
+ {0xAAC5, 0x3065}, //7326 #HIRAGANA LETTER DU
+ {0xAAC6, 0x3066}, //7327 #HIRAGANA LETTER TE
+ {0xAAC7, 0x3067}, //7328 #HIRAGANA LETTER DE
+ {0xAAC8, 0x3068}, //7329 #HIRAGANA LETTER TO
+ {0xAAC9, 0x3069}, //7330 #HIRAGANA LETTER DO
+ {0xAACA, 0x306A}, //7331 #HIRAGANA LETTER NA
+ {0xAACB, 0x306B}, //7332 #HIRAGANA LETTER NI
+ {0xAACC, 0x306C}, //7333 #HIRAGANA LETTER NU
+ {0xAACD, 0x306D}, //7334 #HIRAGANA LETTER NE
+ {0xAACE, 0x306E}, //7335 #HIRAGANA LETTER NO
+ {0xAACF, 0x306F}, //7336 #HIRAGANA LETTER HA
+ {0xAAD0, 0x3070}, //7337 #HIRAGANA LETTER BA
+ {0xAAD1, 0x3071}, //7338 #HIRAGANA LETTER PA
+ {0xAAD2, 0x3072}, //7339 #HIRAGANA LETTER HI
+ {0xAAD3, 0x3073}, //7340 #HIRAGANA LETTER BI
+ {0xAAD4, 0x3074}, //7341 #HIRAGANA LETTER PI
+ {0xAAD5, 0x3075}, //7342 #HIRAGANA LETTER HU
+ {0xAAD6, 0x3076}, //7343 #HIRAGANA LETTER BU
+ {0xAAD7, 0x3077}, //7344 #HIRAGANA LETTER PU
+ {0xAAD8, 0x3078}, //7345 #HIRAGANA LETTER HE
+ {0xAAD9, 0x3079}, //7346 #HIRAGANA LETTER BE
+ {0xAADA, 0x307A}, //7347 #HIRAGANA LETTER PE
+ {0xAADB, 0x307B}, //7348 #HIRAGANA LETTER HO
+ {0xAADC, 0x307C}, //7349 #HIRAGANA LETTER BO
+ {0xAADD, 0x307D}, //7350 #HIRAGANA LETTER PO
+ {0xAADE, 0x307E}, //7351 #HIRAGANA LETTER MA
+ {0xAADF, 0x307F}, //7352 #HIRAGANA LETTER MI
+ {0xAAE0, 0x3080}, //7353 #HIRAGANA LETTER MU
+ {0xAAE1, 0x3081}, //7354 #HIRAGANA LETTER ME
+ {0xAAE2, 0x3082}, //7355 #HIRAGANA LETTER MO
+ {0xAAE3, 0x3083}, //7356 #HIRAGANA LETTER SMALL YA
+ {0xAAE4, 0x3084}, //7357 #HIRAGANA LETTER YA
+ {0xAAE5, 0x3085}, //7358 #HIRAGANA LETTER SMALL YU
+ {0xAAE6, 0x3086}, //7359 #HIRAGANA LETTER YU
+ {0xAAE7, 0x3087}, //7360 #HIRAGANA LETTER SMALL YO
+ {0xAAE8, 0x3088}, //7361 #HIRAGANA LETTER YO
+ {0xAAE9, 0x3089}, //7362 #HIRAGANA LETTER RA
+ {0xAAEA, 0x308A}, //7363 #HIRAGANA LETTER RI
+ {0xAAEB, 0x308B}, //7364 #HIRAGANA LETTER RU
+ {0xAAEC, 0x308C}, //7365 #HIRAGANA LETTER RE
+ {0xAAED, 0x308D}, //7366 #HIRAGANA LETTER RO
+ {0xAAEE, 0x308E}, //7367 #HIRAGANA LETTER SMALL WA
+ {0xAAEF, 0x308F}, //7368 #HIRAGANA LETTER WA
+ {0xAAF0, 0x3090}, //7369 #HIRAGANA LETTER WI
+ {0xAAF1, 0x3091}, //7370 #HIRAGANA LETTER WE
+ {0xAAF2, 0x3092}, //7371 #HIRAGANA LETTER WO
+ {0xAAF3, 0x3093}, //7372 #HIRAGANA LETTER N
+ {0xAB41, 0xCC94}, //7373 #HANGUL SYLLABLE CHIEUCH YAE KHIEUKH
+ {0xAB42, 0xCC95}, //7374 #HANGUL SYLLABLE CHIEUCH YAE THIEUTH
+ {0xAB43, 0xCC96}, //7375 #HANGUL SYLLABLE CHIEUCH YAE PHIEUPH
+ {0xAB44, 0xCC97}, //7376 #HANGUL SYLLABLE CHIEUCH YAE HIEUH
+ {0xAB45, 0xCC9A}, //7377 #HANGUL SYLLABLE CHIEUCH EO SSANGKIYEOK
+ {0xAB46, 0xCC9B}, //7378 #HANGUL SYLLABLE CHIEUCH EO KIYEOKSIOS
+ {0xAB47, 0xCC9D}, //7379 #HANGUL SYLLABLE CHIEUCH EO NIEUNCIEUC
+ {0xAB48, 0xCC9E}, //7380 #HANGUL SYLLABLE CHIEUCH EO NIEUNHIEUH
+ {0xAB49, 0xCC9F}, //7381 #HANGUL SYLLABLE CHIEUCH EO TIKEUT
+ {0xAB4A, 0xCCA1}, //7382 #HANGUL SYLLABLE CHIEUCH EO RIEULKIYEOK
+ {0xAB4B, 0xCCA2}, //7383 #HANGUL SYLLABLE CHIEUCH EO RIEULMIEUM
+ {0xAB4C, 0xCCA3}, //7384 #HANGUL SYLLABLE CHIEUCH EO RIEULPIEUP
+ {0xAB4D, 0xCCA4}, //7385 #HANGUL SYLLABLE CHIEUCH EO RIEULSIOS
+ {0xAB4E, 0xCCA5}, //7386 #HANGUL SYLLABLE CHIEUCH EO RIEULTHIEUTH
+ {0xAB4F, 0xCCA6}, //7387 #HANGUL SYLLABLE CHIEUCH EO RIEULPHIEUPH
+ {0xAB50, 0xCCA7}, //7388 #HANGUL SYLLABLE CHIEUCH EO RIEULHIEUH
+ {0xAB51, 0xCCAA}, //7389 #HANGUL SYLLABLE CHIEUCH EO PIEUPSIOS
+ {0xAB52, 0xCCAE}, //7390 #HANGUL SYLLABLE CHIEUCH EO CIEUC
+ {0xAB53, 0xCCAF}, //7391 #HANGUL SYLLABLE CHIEUCH EO CHIEUCH
+ {0xAB54, 0xCCB0}, //7392 #HANGUL SYLLABLE CHIEUCH EO KHIEUKH
+ {0xAB55, 0xCCB1}, //7393 #HANGUL SYLLABLE CHIEUCH EO THIEUTH
+ {0xAB56, 0xCCB2}, //7394 #HANGUL SYLLABLE CHIEUCH EO PHIEUPH
+ {0xAB57, 0xCCB3}, //7395 #HANGUL SYLLABLE CHIEUCH EO HIEUH
+ {0xAB58, 0xCCB6}, //7396 #HANGUL SYLLABLE CHIEUCH E SSANGKIYEOK
+ {0xAB59, 0xCCB7}, //7397 #HANGUL SYLLABLE CHIEUCH E KIYEOKSIOS
+ {0xAB5A, 0xCCB9}, //7398 #HANGUL SYLLABLE CHIEUCH E NIEUNCIEUC
+ {0xAB61, 0xCCBA}, //7399 #HANGUL SYLLABLE CHIEUCH E NIEUNHIEUH
+ {0xAB62, 0xCCBB}, //7400 #HANGUL SYLLABLE CHIEUCH E TIKEUT
+ {0xAB63, 0xCCBD}, //7401 #HANGUL SYLLABLE CHIEUCH E RIEULKIYEOK
+ {0xAB64, 0xCCBE}, //7402 #HANGUL SYLLABLE CHIEUCH E RIEULMIEUM
+ {0xAB65, 0xCCBF}, //7403 #HANGUL SYLLABLE CHIEUCH E RIEULPIEUP
+ {0xAB66, 0xCCC0}, //7404 #HANGUL SYLLABLE CHIEUCH E RIEULSIOS
+ {0xAB67, 0xCCC1}, //7405 #HANGUL SYLLABLE CHIEUCH E RIEULTHIEUTH
+ {0xAB68, 0xCCC2}, //7406 #HANGUL SYLLABLE CHIEUCH E RIEULPHIEUPH
+ {0xAB69, 0xCCC3}, //7407 #HANGUL SYLLABLE CHIEUCH E RIEULHIEUH
+ {0xAB6A, 0xCCC6}, //7408 #HANGUL SYLLABLE CHIEUCH E PIEUPSIOS
+ {0xAB6B, 0xCCC8}, //7409 #HANGUL SYLLABLE CHIEUCH E SSANGSIOS
+ {0xAB6C, 0xCCCA}, //7410 #HANGUL SYLLABLE CHIEUCH E CIEUC
+ {0xAB6D, 0xCCCB}, //7411 #HANGUL SYLLABLE CHIEUCH E CHIEUCH
+ {0xAB6E, 0xCCCC}, //7412 #HANGUL SYLLABLE CHIEUCH E KHIEUKH
+ {0xAB6F, 0xCCCD}, //7413 #HANGUL SYLLABLE CHIEUCH E THIEUTH
+ {0xAB70, 0xCCCE}, //7414 #HANGUL SYLLABLE CHIEUCH E PHIEUPH
+ {0xAB71, 0xCCCF}, //7415 #HANGUL SYLLABLE CHIEUCH E HIEUH
+ {0xAB72, 0xCCD1}, //7416 #HANGUL SYLLABLE CHIEUCH YEO KIYEOK
+ {0xAB73, 0xCCD2}, //7417 #HANGUL SYLLABLE CHIEUCH YEO SSANGKIYEOK
+ {0xAB74, 0xCCD3}, //7418 #HANGUL SYLLABLE CHIEUCH YEO KIYEOKSIOS
+ {0xAB75, 0xCCD5}, //7419 #HANGUL SYLLABLE CHIEUCH YEO NIEUNCIEUC
+ {0xAB76, 0xCCD6}, //7420 #HANGUL SYLLABLE CHIEUCH YEO NIEUNHIEUH
+ {0xAB77, 0xCCD7}, //7421 #HANGUL SYLLABLE CHIEUCH YEO TIKEUT
+ {0xAB78, 0xCCD8}, //7422 #HANGUL SYLLABLE CHIEUCH YEO RIEUL
+ {0xAB79, 0xCCD9}, //7423 #HANGUL SYLLABLE CHIEUCH YEO RIEULKIYEOK
+ {0xAB7A, 0xCCDA}, //7424 #HANGUL SYLLABLE CHIEUCH YEO RIEULMIEUM
+ {0xAB81, 0xCCDB}, //7425 #HANGUL SYLLABLE CHIEUCH YEO RIEULPIEUP
+ {0xAB82, 0xCCDC}, //7426 #HANGUL SYLLABLE CHIEUCH YEO RIEULSIOS
+ {0xAB83, 0xCCDD}, //7427 #HANGUL SYLLABLE CHIEUCH YEO RIEULTHIEUTH
+ {0xAB84, 0xCCDE}, //7428 #HANGUL SYLLABLE CHIEUCH YEO RIEULPHIEUPH
+ {0xAB85, 0xCCDF}, //7429 #HANGUL SYLLABLE CHIEUCH YEO RIEULHIEUH
+ {0xAB86, 0xCCE0}, //7430 #HANGUL SYLLABLE CHIEUCH YEO MIEUM
+ {0xAB87, 0xCCE1}, //7431 #HANGUL SYLLABLE CHIEUCH YEO PIEUP
+ {0xAB88, 0xCCE2}, //7432 #HANGUL SYLLABLE CHIEUCH YEO PIEUPSIOS
+ {0xAB89, 0xCCE3}, //7433 #HANGUL SYLLABLE CHIEUCH YEO SIOS
+ {0xAB8A, 0xCCE5}, //7434 #HANGUL SYLLABLE CHIEUCH YEO IEUNG
+ {0xAB8B, 0xCCE6}, //7435 #HANGUL SYLLABLE CHIEUCH YEO CIEUC
+ {0xAB8C, 0xCCE7}, //7436 #HANGUL SYLLABLE CHIEUCH YEO CHIEUCH
+ {0xAB8D, 0xCCE8}, //7437 #HANGUL SYLLABLE CHIEUCH YEO KHIEUKH
+ {0xAB8E, 0xCCE9}, //7438 #HANGUL SYLLABLE CHIEUCH YEO THIEUTH
+ {0xAB8F, 0xCCEA}, //7439 #HANGUL SYLLABLE CHIEUCH YEO PHIEUPH
+ {0xAB90, 0xCCEB}, //7440 #HANGUL SYLLABLE CHIEUCH YEO HIEUH
+ {0xAB91, 0xCCED}, //7441 #HANGUL SYLLABLE CHIEUCH YE KIYEOK
+ {0xAB92, 0xCCEE}, //7442 #HANGUL SYLLABLE CHIEUCH YE SSANGKIYEOK
+ {0xAB93, 0xCCEF}, //7443 #HANGUL SYLLABLE CHIEUCH YE KIYEOKSIOS
+ {0xAB94, 0xCCF1}, //7444 #HANGUL SYLLABLE CHIEUCH YE NIEUNCIEUC
+ {0xAB95, 0xCCF2}, //7445 #HANGUL SYLLABLE CHIEUCH YE NIEUNHIEUH
+ {0xAB96, 0xCCF3}, //7446 #HANGUL SYLLABLE CHIEUCH YE TIKEUT
+ {0xAB97, 0xCCF4}, //7447 #HANGUL SYLLABLE CHIEUCH YE RIEUL
+ {0xAB98, 0xCCF5}, //7448 #HANGUL SYLLABLE CHIEUCH YE RIEULKIYEOK
+ {0xAB99, 0xCCF6}, //7449 #HANGUL SYLLABLE CHIEUCH YE RIEULMIEUM
+ {0xAB9A, 0xCCF7}, //7450 #HANGUL SYLLABLE CHIEUCH YE RIEULPIEUP
+ {0xAB9B, 0xCCF8}, //7451 #HANGUL SYLLABLE CHIEUCH YE RIEULSIOS
+ {0xAB9C, 0xCCF9}, //7452 #HANGUL SYLLABLE CHIEUCH YE RIEULTHIEUTH
+ {0xAB9D, 0xCCFA}, //7453 #HANGUL SYLLABLE CHIEUCH YE RIEULPHIEUPH
+ {0xAB9E, 0xCCFB}, //7454 #HANGUL SYLLABLE CHIEUCH YE RIEULHIEUH
+ {0xAB9F, 0xCCFC}, //7455 #HANGUL SYLLABLE CHIEUCH YE MIEUM
+ {0xABA0, 0xCCFD}, //7456 #HANGUL SYLLABLE CHIEUCH YE PIEUP
+ {0xABA1, 0x30A1}, //7457 #KATAKANA LETTER SMALL A
+ {0xABA2, 0x30A2}, //7458 #KATAKANA LETTER A
+ {0xABA3, 0x30A3}, //7459 #KATAKANA LETTER SMALL I
+ {0xABA4, 0x30A4}, //7460 #KATAKANA LETTER I
+ {0xABA5, 0x30A5}, //7461 #KATAKANA LETTER SMALL U
+ {0xABA6, 0x30A6}, //7462 #KATAKANA LETTER U
+ {0xABA7, 0x30A7}, //7463 #KATAKANA LETTER SMALL E
+ {0xABA8, 0x30A8}, //7464 #KATAKANA LETTER E
+ {0xABA9, 0x30A9}, //7465 #KATAKANA LETTER SMALL O
+ {0xABAA, 0x30AA}, //7466 #KATAKANA LETTER O
+ {0xABAB, 0x30AB}, //7467 #KATAKANA LETTER KA
+ {0xABAC, 0x30AC}, //7468 #KATAKANA LETTER GA
+ {0xABAD, 0x30AD}, //7469 #KATAKANA LETTER KI
+ {0xABAE, 0x30AE}, //7470 #KATAKANA LETTER GI
+ {0xABAF, 0x30AF}, //7471 #KATAKANA LETTER KU
+ {0xABB0, 0x30B0}, //7472 #KATAKANA LETTER GU
+ {0xABB1, 0x30B1}, //7473 #KATAKANA LETTER KE
+ {0xABB2, 0x30B2}, //7474 #KATAKANA LETTER GE
+ {0xABB3, 0x30B3}, //7475 #KATAKANA LETTER KO
+ {0xABB4, 0x30B4}, //7476 #KATAKANA LETTER GO
+ {0xABB5, 0x30B5}, //7477 #KATAKANA LETTER SA
+ {0xABB6, 0x30B6}, //7478 #KATAKANA LETTER ZA
+ {0xABB7, 0x30B7}, //7479 #KATAKANA LETTER SI
+ {0xABB8, 0x30B8}, //7480 #KATAKANA LETTER ZI
+ {0xABB9, 0x30B9}, //7481 #KATAKANA LETTER SU
+ {0xABBA, 0x30BA}, //7482 #KATAKANA LETTER ZU
+ {0xABBB, 0x30BB}, //7483 #KATAKANA LETTER SE
+ {0xABBC, 0x30BC}, //7484 #KATAKANA LETTER ZE
+ {0xABBD, 0x30BD}, //7485 #KATAKANA LETTER SO
+ {0xABBE, 0x30BE}, //7486 #KATAKANA LETTER ZO
+ {0xABBF, 0x30BF}, //7487 #KATAKANA LETTER TA
+ {0xABC0, 0x30C0}, //7488 #KATAKANA LETTER DA
+ {0xABC1, 0x30C1}, //7489 #KATAKANA LETTER TI
+ {0xABC2, 0x30C2}, //7490 #KATAKANA LETTER DI
+ {0xABC3, 0x30C3}, //7491 #KATAKANA LETTER SMALL TU
+ {0xABC4, 0x30C4}, //7492 #KATAKANA LETTER TU
+ {0xABC5, 0x30C5}, //7493 #KATAKANA LETTER DU
+ {0xABC6, 0x30C6}, //7494 #KATAKANA LETTER TE
+ {0xABC7, 0x30C7}, //7495 #KATAKANA LETTER DE
+ {0xABC8, 0x30C8}, //7496 #KATAKANA LETTER TO
+ {0xABC9, 0x30C9}, //7497 #KATAKANA LETTER DO
+ {0xABCA, 0x30CA}, //7498 #KATAKANA LETTER NA
+ {0xABCB, 0x30CB}, //7499 #KATAKANA LETTER NI
+ {0xABCC, 0x30CC}, //7500 #KATAKANA LETTER NU
+ {0xABCD, 0x30CD}, //7501 #KATAKANA LETTER NE
+ {0xABCE, 0x30CE}, //7502 #KATAKANA LETTER NO
+ {0xABCF, 0x30CF}, //7503 #KATAKANA LETTER HA
+ {0xABD0, 0x30D0}, //7504 #KATAKANA LETTER BA
+ {0xABD1, 0x30D1}, //7505 #KATAKANA LETTER PA
+ {0xABD2, 0x30D2}, //7506 #KATAKANA LETTER HI
+ {0xABD3, 0x30D3}, //7507 #KATAKANA LETTER BI
+ {0xABD4, 0x30D4}, //7508 #KATAKANA LETTER PI
+ {0xABD5, 0x30D5}, //7509 #KATAKANA LETTER HU
+ {0xABD6, 0x30D6}, //7510 #KATAKANA LETTER BU
+ {0xABD7, 0x30D7}, //7511 #KATAKANA LETTER PU
+ {0xABD8, 0x30D8}, //7512 #KATAKANA LETTER HE
+ {0xABD9, 0x30D9}, //7513 #KATAKANA LETTER BE
+ {0xABDA, 0x30DA}, //7514 #KATAKANA LETTER PE
+ {0xABDB, 0x30DB}, //7515 #KATAKANA LETTER HO
+ {0xABDC, 0x30DC}, //7516 #KATAKANA LETTER BO
+ {0xABDD, 0x30DD}, //7517 #KATAKANA LETTER PO
+ {0xABDE, 0x30DE}, //7518 #KATAKANA LETTER MA
+ {0xABDF, 0x30DF}, //7519 #KATAKANA LETTER MI
+ {0xABE0, 0x30E0}, //7520 #KATAKANA LETTER MU
+ {0xABE1, 0x30E1}, //7521 #KATAKANA LETTER ME
+ {0xABE2, 0x30E2}, //7522 #KATAKANA LETTER MO
+ {0xABE3, 0x30E3}, //7523 #KATAKANA LETTER SMALL YA
+ {0xABE4, 0x30E4}, //7524 #KATAKANA LETTER YA
+ {0xABE5, 0x30E5}, //7525 #KATAKANA LETTER SMALL YU
+ {0xABE6, 0x30E6}, //7526 #KATAKANA LETTER YU
+ {0xABE7, 0x30E7}, //7527 #KATAKANA LETTER SMALL YO
+ {0xABE8, 0x30E8}, //7528 #KATAKANA LETTER YO
+ {0xABE9, 0x30E9}, //7529 #KATAKANA LETTER RA
+ {0xABEA, 0x30EA}, //7530 #KATAKANA LETTER RI
+ {0xABEB, 0x30EB}, //7531 #KATAKANA LETTER RU
+ {0xABEC, 0x30EC}, //7532 #KATAKANA LETTER RE
+ {0xABED, 0x30ED}, //7533 #KATAKANA LETTER RO
+ {0xABEE, 0x30EE}, //7534 #KATAKANA LETTER SMALL WA
+ {0xABEF, 0x30EF}, //7535 #KATAKANA LETTER WA
+ {0xABF0, 0x30F0}, //7536 #KATAKANA LETTER WI
+ {0xABF1, 0x30F1}, //7537 #KATAKANA LETTER WE
+ {0xABF2, 0x30F2}, //7538 #KATAKANA LETTER WO
+ {0xABF3, 0x30F3}, //7539 #KATAKANA LETTER N
+ {0xABF4, 0x30F4}, //7540 #KATAKANA LETTER VU
+ {0xABF5, 0x30F5}, //7541 #KATAKANA LETTER SMALL KA
+ {0xABF6, 0x30F6}, //7542 #KATAKANA LETTER SMALL KE
+ {0xAC41, 0xCCFE}, //7543 #HANGUL SYLLABLE CHIEUCH YE PIEUPSIOS
+ {0xAC42, 0xCCFF}, //7544 #HANGUL SYLLABLE CHIEUCH YE SIOS
+ {0xAC43, 0xCD00}, //7545 #HANGUL SYLLABLE CHIEUCH YE SSANGSIOS
+ {0xAC44, 0xCD02}, //7546 #HANGUL SYLLABLE CHIEUCH YE CIEUC
+ {0xAC45, 0xCD03}, //7547 #HANGUL SYLLABLE CHIEUCH YE CHIEUCH
+ {0xAC46, 0xCD04}, //7548 #HANGUL SYLLABLE CHIEUCH YE KHIEUKH
+ {0xAC47, 0xCD05}, //7549 #HANGUL SYLLABLE CHIEUCH YE THIEUTH
+ {0xAC48, 0xCD06}, //7550 #HANGUL SYLLABLE CHIEUCH YE PHIEUPH
+ {0xAC49, 0xCD07}, //7551 #HANGUL SYLLABLE CHIEUCH YE HIEUH
+ {0xAC4A, 0xCD0A}, //7552 #HANGUL SYLLABLE CHIEUCH O SSANGKIYEOK
+ {0xAC4B, 0xCD0B}, //7553 #HANGUL SYLLABLE CHIEUCH O KIYEOKSIOS
+ {0xAC4C, 0xCD0D}, //7554 #HANGUL SYLLABLE CHIEUCH O NIEUNCIEUC
+ {0xAC4D, 0xCD0E}, //7555 #HANGUL SYLLABLE CHIEUCH O NIEUNHIEUH
+ {0xAC4E, 0xCD0F}, //7556 #HANGUL SYLLABLE CHIEUCH O TIKEUT
+ {0xAC4F, 0xCD11}, //7557 #HANGUL SYLLABLE CHIEUCH O RIEULKIYEOK
+ {0xAC50, 0xCD12}, //7558 #HANGUL SYLLABLE CHIEUCH O RIEULMIEUM
+ {0xAC51, 0xCD13}, //7559 #HANGUL SYLLABLE CHIEUCH O RIEULPIEUP
+ {0xAC52, 0xCD14}, //7560 #HANGUL SYLLABLE CHIEUCH O RIEULSIOS
+ {0xAC53, 0xCD15}, //7561 #HANGUL SYLLABLE CHIEUCH O RIEULTHIEUTH
+ {0xAC54, 0xCD16}, //7562 #HANGUL SYLLABLE CHIEUCH O RIEULPHIEUPH
+ {0xAC55, 0xCD17}, //7563 #HANGUL SYLLABLE CHIEUCH O RIEULHIEUH
+ {0xAC56, 0xCD1A}, //7564 #HANGUL SYLLABLE CHIEUCH O PIEUPSIOS
+ {0xAC57, 0xCD1C}, //7565 #HANGUL SYLLABLE CHIEUCH O SSANGSIOS
+ {0xAC58, 0xCD1E}, //7566 #HANGUL SYLLABLE CHIEUCH O CIEUC
+ {0xAC59, 0xCD1F}, //7567 #HANGUL SYLLABLE CHIEUCH O CHIEUCH
+ {0xAC5A, 0xCD20}, //7568 #HANGUL SYLLABLE CHIEUCH O KHIEUKH
+ {0xAC61, 0xCD21}, //7569 #HANGUL SYLLABLE CHIEUCH O THIEUTH
+ {0xAC62, 0xCD22}, //7570 #HANGUL SYLLABLE CHIEUCH O PHIEUPH
+ {0xAC63, 0xCD23}, //7571 #HANGUL SYLLABLE CHIEUCH O HIEUH
+ {0xAC64, 0xCD25}, //7572 #HANGUL SYLLABLE CHIEUCH WA KIYEOK
+ {0xAC65, 0xCD26}, //7573 #HANGUL SYLLABLE CHIEUCH WA SSANGKIYEOK
+ {0xAC66, 0xCD27}, //7574 #HANGUL SYLLABLE CHIEUCH WA KIYEOKSIOS
+ {0xAC67, 0xCD29}, //7575 #HANGUL SYLLABLE CHIEUCH WA NIEUNCIEUC
+ {0xAC68, 0xCD2A}, //7576 #HANGUL SYLLABLE CHIEUCH WA NIEUNHIEUH
+ {0xAC69, 0xCD2B}, //7577 #HANGUL SYLLABLE CHIEUCH WA TIKEUT
+ {0xAC6A, 0xCD2D}, //7578 #HANGUL SYLLABLE CHIEUCH WA RIEULKIYEOK
+ {0xAC6B, 0xCD2E}, //7579 #HANGUL SYLLABLE CHIEUCH WA RIEULMIEUM
+ {0xAC6C, 0xCD2F}, //7580 #HANGUL SYLLABLE CHIEUCH WA RIEULPIEUP
+ {0xAC6D, 0xCD30}, //7581 #HANGUL SYLLABLE CHIEUCH WA RIEULSIOS
+ {0xAC6E, 0xCD31}, //7582 #HANGUL SYLLABLE CHIEUCH WA RIEULTHIEUTH
+ {0xAC6F, 0xCD32}, //7583 #HANGUL SYLLABLE CHIEUCH WA RIEULPHIEUPH
+ {0xAC70, 0xCD33}, //7584 #HANGUL SYLLABLE CHIEUCH WA RIEULHIEUH
+ {0xAC71, 0xCD34}, //7585 #HANGUL SYLLABLE CHIEUCH WA MIEUM
+ {0xAC72, 0xCD35}, //7586 #HANGUL SYLLABLE CHIEUCH WA PIEUP
+ {0xAC73, 0xCD36}, //7587 #HANGUL SYLLABLE CHIEUCH WA PIEUPSIOS
+ {0xAC74, 0xCD37}, //7588 #HANGUL SYLLABLE CHIEUCH WA SIOS
+ {0xAC75, 0xCD38}, //7589 #HANGUL SYLLABLE CHIEUCH WA SSANGSIOS
+ {0xAC76, 0xCD3A}, //7590 #HANGUL SYLLABLE CHIEUCH WA CIEUC
+ {0xAC77, 0xCD3B}, //7591 #HANGUL SYLLABLE CHIEUCH WA CHIEUCH
+ {0xAC78, 0xCD3C}, //7592 #HANGUL SYLLABLE CHIEUCH WA KHIEUKH
+ {0xAC79, 0xCD3D}, //7593 #HANGUL SYLLABLE CHIEUCH WA THIEUTH
+ {0xAC7A, 0xCD3E}, //7594 #HANGUL SYLLABLE CHIEUCH WA PHIEUPH
+ {0xAC81, 0xCD3F}, //7595 #HANGUL SYLLABLE CHIEUCH WA HIEUH
+ {0xAC82, 0xCD40}, //7596 #HANGUL SYLLABLE CHIEUCH WAE
+ {0xAC83, 0xCD41}, //7597 #HANGUL SYLLABLE CHIEUCH WAE KIYEOK
+ {0xAC84, 0xCD42}, //7598 #HANGUL SYLLABLE CHIEUCH WAE SSANGKIYEOK
+ {0xAC85, 0xCD43}, //7599 #HANGUL SYLLABLE CHIEUCH WAE KIYEOKSIOS
+ {0xAC86, 0xCD44}, //7600 #HANGUL SYLLABLE CHIEUCH WAE NIEUN
+ {0xAC87, 0xCD45}, //7601 #HANGUL SYLLABLE CHIEUCH WAE NIEUNCIEUC
+ {0xAC88, 0xCD46}, //7602 #HANGUL SYLLABLE CHIEUCH WAE NIEUNHIEUH
+ {0xAC89, 0xCD47}, //7603 #HANGUL SYLLABLE CHIEUCH WAE TIKEUT
+ {0xAC8A, 0xCD48}, //7604 #HANGUL SYLLABLE CHIEUCH WAE RIEUL
+ {0xAC8B, 0xCD49}, //7605 #HANGUL SYLLABLE CHIEUCH WAE RIEULKIYEOK
+ {0xAC8C, 0xCD4A}, //7606 #HANGUL SYLLABLE CHIEUCH WAE RIEULMIEUM
+ {0xAC8D, 0xCD4B}, //7607 #HANGUL SYLLABLE CHIEUCH WAE RIEULPIEUP
+ {0xAC8E, 0xCD4C}, //7608 #HANGUL SYLLABLE CHIEUCH WAE RIEULSIOS
+ {0xAC8F, 0xCD4D}, //7609 #HANGUL SYLLABLE CHIEUCH WAE RIEULTHIEUTH
+ {0xAC90, 0xCD4E}, //7610 #HANGUL SYLLABLE CHIEUCH WAE RIEULPHIEUPH
+ {0xAC91, 0xCD4F}, //7611 #HANGUL SYLLABLE CHIEUCH WAE RIEULHIEUH
+ {0xAC92, 0xCD50}, //7612 #HANGUL SYLLABLE CHIEUCH WAE MIEUM
+ {0xAC93, 0xCD51}, //7613 #HANGUL SYLLABLE CHIEUCH WAE PIEUP
+ {0xAC94, 0xCD52}, //7614 #HANGUL SYLLABLE CHIEUCH WAE PIEUPSIOS
+ {0xAC95, 0xCD53}, //7615 #HANGUL SYLLABLE CHIEUCH WAE SIOS
+ {0xAC96, 0xCD54}, //7616 #HANGUL SYLLABLE CHIEUCH WAE SSANGSIOS
+ {0xAC97, 0xCD55}, //7617 #HANGUL SYLLABLE CHIEUCH WAE IEUNG
+ {0xAC98, 0xCD56}, //7618 #HANGUL SYLLABLE CHIEUCH WAE CIEUC
+ {0xAC99, 0xCD57}, //7619 #HANGUL SYLLABLE CHIEUCH WAE CHIEUCH
+ {0xAC9A, 0xCD58}, //7620 #HANGUL SYLLABLE CHIEUCH WAE KHIEUKH
+ {0xAC9B, 0xCD59}, //7621 #HANGUL SYLLABLE CHIEUCH WAE THIEUTH
+ {0xAC9C, 0xCD5A}, //7622 #HANGUL SYLLABLE CHIEUCH WAE PHIEUPH
+ {0xAC9D, 0xCD5B}, //7623 #HANGUL SYLLABLE CHIEUCH WAE HIEUH
+ {0xAC9E, 0xCD5D}, //7624 #HANGUL SYLLABLE CHIEUCH OE KIYEOK
+ {0xAC9F, 0xCD5E}, //7625 #HANGUL SYLLABLE CHIEUCH OE SSANGKIYEOK
+ {0xACA0, 0xCD5F}, //7626 #HANGUL SYLLABLE CHIEUCH OE KIYEOKSIOS
+ {0xACA1, 0x0410}, //7627 #CYRILLIC CAPITAL LETTER A
+ {0xACA2, 0x0411}, //7628 #CYRILLIC CAPITAL LETTER BE
+ {0xACA3, 0x0412}, //7629 #CYRILLIC CAPITAL LETTER VE
+ {0xACA4, 0x0413}, //7630 #CYRILLIC CAPITAL LETTER GHE
+ {0xACA5, 0x0414}, //7631 #CYRILLIC CAPITAL LETTER DE
+ {0xACA6, 0x0415}, //7632 #CYRILLIC CAPITAL LETTER IE
+ {0xACA7, 0x0401}, //7633 #CYRILLIC CAPITAL LETTER IO
+ {0xACA8, 0x0416}, //7634 #CYRILLIC CAPITAL LETTER ZHE
+ {0xACA9, 0x0417}, //7635 #CYRILLIC CAPITAL LETTER ZE
+ {0xACAA, 0x0418}, //7636 #CYRILLIC CAPITAL LETTER I
+ {0xACAB, 0x0419}, //7637 #CYRILLIC CAPITAL LETTER SHORT I
+ {0xACAC, 0x041A}, //7638 #CYRILLIC CAPITAL LETTER KA
+ {0xACAD, 0x041B}, //7639 #CYRILLIC CAPITAL LETTER EL
+ {0xACAE, 0x041C}, //7640 #CYRILLIC CAPITAL LETTER EM
+ {0xACAF, 0x041D}, //7641 #CYRILLIC CAPITAL LETTER EN
+ {0xACB0, 0x041E}, //7642 #CYRILLIC CAPITAL LETTER O
+ {0xACB1, 0x041F}, //7643 #CYRILLIC CAPITAL LETTER PE
+ {0xACB2, 0x0420}, //7644 #CYRILLIC CAPITAL LETTER ER
+ {0xACB3, 0x0421}, //7645 #CYRILLIC CAPITAL LETTER ES
+ {0xACB4, 0x0422}, //7646 #CYRILLIC CAPITAL LETTER TE
+ {0xACB5, 0x0423}, //7647 #CYRILLIC CAPITAL LETTER U
+ {0xACB6, 0x0424}, //7648 #CYRILLIC CAPITAL LETTER EF
+ {0xACB7, 0x0425}, //7649 #CYRILLIC CAPITAL LETTER HA
+ {0xACB8, 0x0426}, //7650 #CYRILLIC CAPITAL LETTER TSE
+ {0xACB9, 0x0427}, //7651 #CYRILLIC CAPITAL LETTER CHE
+ {0xACBA, 0x0428}, //7652 #CYRILLIC CAPITAL LETTER SHA
+ {0xACBB, 0x0429}, //7653 #CYRILLIC CAPITAL LETTER SHCHA
+ {0xACBC, 0x042A}, //7654 #CYRILLIC CAPITAL LETTER HARD SIGN
+ {0xACBD, 0x042B}, //7655 #CYRILLIC CAPITAL LETTER YERU
+ {0xACBE, 0x042C}, //7656 #CYRILLIC CAPITAL LETTER SOFT SIGN
+ {0xACBF, 0x042D}, //7657 #CYRILLIC CAPITAL LETTER E
+ {0xACC0, 0x042E}, //7658 #CYRILLIC CAPITAL LETTER YU
+ {0xACC1, 0x042F}, //7659 #CYRILLIC CAPITAL LETTER YA
+ {0xACD1, 0x0430}, //7660 #CYRILLIC SMALL LETTER A
+ {0xACD2, 0x0431}, //7661 #CYRILLIC SMALL LETTER BE
+ {0xACD3, 0x0432}, //7662 #CYRILLIC SMALL LETTER VE
+ {0xACD4, 0x0433}, //7663 #CYRILLIC SMALL LETTER GHE
+ {0xACD5, 0x0434}, //7664 #CYRILLIC SMALL LETTER DE
+ {0xACD6, 0x0435}, //7665 #CYRILLIC SMALL LETTER IE
+ {0xACD7, 0x0451}, //7666 #CYRILLIC SMALL LETTER IO
+ {0xACD8, 0x0436}, //7667 #CYRILLIC SMALL LETTER ZHE
+ {0xACD9, 0x0437}, //7668 #CYRILLIC SMALL LETTER ZE
+ {0xACDA, 0x0438}, //7669 #CYRILLIC SMALL LETTER I
+ {0xACDB, 0x0439}, //7670 #CYRILLIC SMALL LETTER SHORT I
+ {0xACDC, 0x043A}, //7671 #CYRILLIC SMALL LETTER KA
+ {0xACDD, 0x043B}, //7672 #CYRILLIC SMALL LETTER EL
+ {0xACDE, 0x043C}, //7673 #CYRILLIC SMALL LETTER EM
+ {0xACDF, 0x043D}, //7674 #CYRILLIC SMALL LETTER EN
+ {0xACE0, 0x043E}, //7675 #CYRILLIC SMALL LETTER O
+ {0xACE1, 0x043F}, //7676 #CYRILLIC SMALL LETTER PE
+ {0xACE2, 0x0440}, //7677 #CYRILLIC SMALL LETTER ER
+ {0xACE3, 0x0441}, //7678 #CYRILLIC SMALL LETTER ES
+ {0xACE4, 0x0442}, //7679 #CYRILLIC SMALL LETTER TE
+ {0xACE5, 0x0443}, //7680 #CYRILLIC SMALL LETTER U
+ {0xACE6, 0x0444}, //7681 #CYRILLIC SMALL LETTER EF
+ {0xACE7, 0x0445}, //7682 #CYRILLIC SMALL LETTER HA
+ {0xACE8, 0x0446}, //7683 #CYRILLIC SMALL LETTER TSE
+ {0xACE9, 0x0447}, //7684 #CYRILLIC SMALL LETTER CHE
+ {0xACEA, 0x0448}, //7685 #CYRILLIC SMALL LETTER SHA
+ {0xACEB, 0x0449}, //7686 #CYRILLIC SMALL LETTER SHCHA
+ {0xACEC, 0x044A}, //7687 #CYRILLIC SMALL LETTER HARD SIGN
+ {0xACED, 0x044B}, //7688 #CYRILLIC SMALL LETTER YERU
+ {0xACEE, 0x044C}, //7689 #CYRILLIC SMALL LETTER SOFT SIGN
+ {0xACEF, 0x044D}, //7690 #CYRILLIC SMALL LETTER E
+ {0xACF0, 0x044E}, //7691 #CYRILLIC SMALL LETTER YU
+ {0xACF1, 0x044F}, //7692 #CYRILLIC SMALL LETTER YA
+ {0xAD41, 0xCD61}, //7693 #HANGUL SYLLABLE CHIEUCH OE NIEUNCIEUC
+ {0xAD42, 0xCD62}, //7694 #HANGUL SYLLABLE CHIEUCH OE NIEUNHIEUH
+ {0xAD43, 0xCD63}, //7695 #HANGUL SYLLABLE CHIEUCH OE TIKEUT
+ {0xAD44, 0xCD65}, //7696 #HANGUL SYLLABLE CHIEUCH OE RIEULKIYEOK
+ {0xAD45, 0xCD66}, //7697 #HANGUL SYLLABLE CHIEUCH OE RIEULMIEUM
+ {0xAD46, 0xCD67}, //7698 #HANGUL SYLLABLE CHIEUCH OE RIEULPIEUP
+ {0xAD47, 0xCD68}, //7699 #HANGUL SYLLABLE CHIEUCH OE RIEULSIOS
+ {0xAD48, 0xCD69}, //7700 #HANGUL SYLLABLE CHIEUCH OE RIEULTHIEUTH
+ {0xAD49, 0xCD6A}, //7701 #HANGUL SYLLABLE CHIEUCH OE RIEULPHIEUPH
+ {0xAD4A, 0xCD6B}, //7702 #HANGUL SYLLABLE CHIEUCH OE RIEULHIEUH
+ {0xAD4B, 0xCD6E}, //7703 #HANGUL SYLLABLE CHIEUCH OE PIEUPSIOS
+ {0xAD4C, 0xCD70}, //7704 #HANGUL SYLLABLE CHIEUCH OE SSANGSIOS
+ {0xAD4D, 0xCD72}, //7705 #HANGUL SYLLABLE CHIEUCH OE CIEUC
+ {0xAD4E, 0xCD73}, //7706 #HANGUL SYLLABLE CHIEUCH OE CHIEUCH
+ {0xAD4F, 0xCD74}, //7707 #HANGUL SYLLABLE CHIEUCH OE KHIEUKH
+ {0xAD50, 0xCD75}, //7708 #HANGUL SYLLABLE CHIEUCH OE THIEUTH
+ {0xAD51, 0xCD76}, //7709 #HANGUL SYLLABLE CHIEUCH OE PHIEUPH
+ {0xAD52, 0xCD77}, //7710 #HANGUL SYLLABLE CHIEUCH OE HIEUH
+ {0xAD53, 0xCD79}, //7711 #HANGUL SYLLABLE CHIEUCH YO KIYEOK
+ {0xAD54, 0xCD7A}, //7712 #HANGUL SYLLABLE CHIEUCH YO SSANGKIYEOK
+ {0xAD55, 0xCD7B}, //7713 #HANGUL SYLLABLE CHIEUCH YO KIYEOKSIOS
+ {0xAD56, 0xCD7C}, //7714 #HANGUL SYLLABLE CHIEUCH YO NIEUN
+ {0xAD57, 0xCD7D}, //7715 #HANGUL SYLLABLE CHIEUCH YO NIEUNCIEUC
+ {0xAD58, 0xCD7E}, //7716 #HANGUL SYLLABLE CHIEUCH YO NIEUNHIEUH
+ {0xAD59, 0xCD7F}, //7717 #HANGUL SYLLABLE CHIEUCH YO TIKEUT
+ {0xAD5A, 0xCD80}, //7718 #HANGUL SYLLABLE CHIEUCH YO RIEUL
+ {0xAD61, 0xCD81}, //7719 #HANGUL SYLLABLE CHIEUCH YO RIEULKIYEOK
+ {0xAD62, 0xCD82}, //7720 #HANGUL SYLLABLE CHIEUCH YO RIEULMIEUM
+ {0xAD63, 0xCD83}, //7721 #HANGUL SYLLABLE CHIEUCH YO RIEULPIEUP
+ {0xAD64, 0xCD84}, //7722 #HANGUL SYLLABLE CHIEUCH YO RIEULSIOS
+ {0xAD65, 0xCD85}, //7723 #HANGUL SYLLABLE CHIEUCH YO RIEULTHIEUTH
+ {0xAD66, 0xCD86}, //7724 #HANGUL SYLLABLE CHIEUCH YO RIEULPHIEUPH
+ {0xAD67, 0xCD87}, //7725 #HANGUL SYLLABLE CHIEUCH YO RIEULHIEUH
+ {0xAD68, 0xCD89}, //7726 #HANGUL SYLLABLE CHIEUCH YO PIEUP
+ {0xAD69, 0xCD8A}, //7727 #HANGUL SYLLABLE CHIEUCH YO PIEUPSIOS
+ {0xAD6A, 0xCD8B}, //7728 #HANGUL SYLLABLE CHIEUCH YO SIOS
+ {0xAD6B, 0xCD8C}, //7729 #HANGUL SYLLABLE CHIEUCH YO SSANGSIOS
+ {0xAD6C, 0xCD8D}, //7730 #HANGUL SYLLABLE CHIEUCH YO IEUNG
+ {0xAD6D, 0xCD8E}, //7731 #HANGUL SYLLABLE CHIEUCH YO CIEUC
+ {0xAD6E, 0xCD8F}, //7732 #HANGUL SYLLABLE CHIEUCH YO CHIEUCH
+ {0xAD6F, 0xCD90}, //7733 #HANGUL SYLLABLE CHIEUCH YO KHIEUKH
+ {0xAD70, 0xCD91}, //7734 #HANGUL SYLLABLE CHIEUCH YO THIEUTH
+ {0xAD71, 0xCD92}, //7735 #HANGUL SYLLABLE CHIEUCH YO PHIEUPH
+ {0xAD72, 0xCD93}, //7736 #HANGUL SYLLABLE CHIEUCH YO HIEUH
+ {0xAD73, 0xCD96}, //7737 #HANGUL SYLLABLE CHIEUCH U SSANGKIYEOK
+ {0xAD74, 0xCD97}, //7738 #HANGUL SYLLABLE CHIEUCH U KIYEOKSIOS
+ {0xAD75, 0xCD99}, //7739 #HANGUL SYLLABLE CHIEUCH U NIEUNCIEUC
+ {0xAD76, 0xCD9A}, //7740 #HANGUL SYLLABLE CHIEUCH U NIEUNHIEUH
+ {0xAD77, 0xCD9B}, //7741 #HANGUL SYLLABLE CHIEUCH U TIKEUT
+ {0xAD78, 0xCD9D}, //7742 #HANGUL SYLLABLE CHIEUCH U RIEULKIYEOK
+ {0xAD79, 0xCD9E}, //7743 #HANGUL SYLLABLE CHIEUCH U RIEULMIEUM
+ {0xAD7A, 0xCD9F}, //7744 #HANGUL SYLLABLE CHIEUCH U RIEULPIEUP
+ {0xAD81, 0xCDA0}, //7745 #HANGUL SYLLABLE CHIEUCH U RIEULSIOS
+ {0xAD82, 0xCDA1}, //7746 #HANGUL SYLLABLE CHIEUCH U RIEULTHIEUTH
+ {0xAD83, 0xCDA2}, //7747 #HANGUL SYLLABLE CHIEUCH U RIEULPHIEUPH
+ {0xAD84, 0xCDA3}, //7748 #HANGUL SYLLABLE CHIEUCH U RIEULHIEUH
+ {0xAD85, 0xCDA6}, //7749 #HANGUL SYLLABLE CHIEUCH U PIEUPSIOS
+ {0xAD86, 0xCDA8}, //7750 #HANGUL SYLLABLE CHIEUCH U SSANGSIOS
+ {0xAD87, 0xCDAA}, //7751 #HANGUL SYLLABLE CHIEUCH U CIEUC
+ {0xAD88, 0xCDAB}, //7752 #HANGUL SYLLABLE CHIEUCH U CHIEUCH
+ {0xAD89, 0xCDAC}, //7753 #HANGUL SYLLABLE CHIEUCH U KHIEUKH
+ {0xAD8A, 0xCDAD}, //7754 #HANGUL SYLLABLE CHIEUCH U THIEUTH
+ {0xAD8B, 0xCDAE}, //7755 #HANGUL SYLLABLE CHIEUCH U PHIEUPH
+ {0xAD8C, 0xCDAF}, //7756 #HANGUL SYLLABLE CHIEUCH U HIEUH
+ {0xAD8D, 0xCDB1}, //7757 #HANGUL SYLLABLE CHIEUCH WEO KIYEOK
+ {0xAD8E, 0xCDB2}, //7758 #HANGUL SYLLABLE CHIEUCH WEO SSANGKIYEOK
+ {0xAD8F, 0xCDB3}, //7759 #HANGUL SYLLABLE CHIEUCH WEO KIYEOKSIOS
+ {0xAD90, 0xCDB4}, //7760 #HANGUL SYLLABLE CHIEUCH WEO NIEUN
+ {0xAD91, 0xCDB5}, //7761 #HANGUL SYLLABLE CHIEUCH WEO NIEUNCIEUC
+ {0xAD92, 0xCDB6}, //7762 #HANGUL SYLLABLE CHIEUCH WEO NIEUNHIEUH
+ {0xAD93, 0xCDB7}, //7763 #HANGUL SYLLABLE CHIEUCH WEO TIKEUT
+ {0xAD94, 0xCDB8}, //7764 #HANGUL SYLLABLE CHIEUCH WEO RIEUL
+ {0xAD95, 0xCDB9}, //7765 #HANGUL SYLLABLE CHIEUCH WEO RIEULKIYEOK
+ {0xAD96, 0xCDBA}, //7766 #HANGUL SYLLABLE CHIEUCH WEO RIEULMIEUM
+ {0xAD97, 0xCDBB}, //7767 #HANGUL SYLLABLE CHIEUCH WEO RIEULPIEUP
+ {0xAD98, 0xCDBC}, //7768 #HANGUL SYLLABLE CHIEUCH WEO RIEULSIOS
+ {0xAD99, 0xCDBD}, //7769 #HANGUL SYLLABLE CHIEUCH WEO RIEULTHIEUTH
+ {0xAD9A, 0xCDBE}, //7770 #HANGUL SYLLABLE CHIEUCH WEO RIEULPHIEUPH
+ {0xAD9B, 0xCDBF}, //7771 #HANGUL SYLLABLE CHIEUCH WEO RIEULHIEUH
+ {0xAD9C, 0xCDC0}, //7772 #HANGUL SYLLABLE CHIEUCH WEO MIEUM
+ {0xAD9D, 0xCDC1}, //7773 #HANGUL SYLLABLE CHIEUCH WEO PIEUP
+ {0xAD9E, 0xCDC2}, //7774 #HANGUL SYLLABLE CHIEUCH WEO PIEUPSIOS
+ {0xAD9F, 0xCDC3}, //7775 #HANGUL SYLLABLE CHIEUCH WEO SIOS
+ {0xADA0, 0xCDC5}, //7776 #HANGUL SYLLABLE CHIEUCH WEO IEUNG
+ {0xAE41, 0xCDC6}, //7777 #HANGUL SYLLABLE CHIEUCH WEO CIEUC
+ {0xAE42, 0xCDC7}, //7778 #HANGUL SYLLABLE CHIEUCH WEO CHIEUCH
+ {0xAE43, 0xCDC8}, //7779 #HANGUL SYLLABLE CHIEUCH WEO KHIEUKH
+ {0xAE44, 0xCDC9}, //7780 #HANGUL SYLLABLE CHIEUCH WEO THIEUTH
+ {0xAE45, 0xCDCA}, //7781 #HANGUL SYLLABLE CHIEUCH WEO PHIEUPH
+ {0xAE46, 0xCDCB}, //7782 #HANGUL SYLLABLE CHIEUCH WEO HIEUH
+ {0xAE47, 0xCDCD}, //7783 #HANGUL SYLLABLE CHIEUCH WE KIYEOK
+ {0xAE48, 0xCDCE}, //7784 #HANGUL SYLLABLE CHIEUCH WE SSANGKIYEOK
+ {0xAE49, 0xCDCF}, //7785 #HANGUL SYLLABLE CHIEUCH WE KIYEOKSIOS
+ {0xAE4A, 0xCDD1}, //7786 #HANGUL SYLLABLE CHIEUCH WE NIEUNCIEUC
+ {0xAE4B, 0xCDD2}, //7787 #HANGUL SYLLABLE CHIEUCH WE NIEUNHIEUH
+ {0xAE4C, 0xCDD3}, //7788 #HANGUL SYLLABLE CHIEUCH WE TIKEUT
+ {0xAE4D, 0xCDD4}, //7789 #HANGUL SYLLABLE CHIEUCH WE RIEUL
+ {0xAE4E, 0xCDD5}, //7790 #HANGUL SYLLABLE CHIEUCH WE RIEULKIYEOK
+ {0xAE4F, 0xCDD6}, //7791 #HANGUL SYLLABLE CHIEUCH WE RIEULMIEUM
+ {0xAE50, 0xCDD7}, //7792 #HANGUL SYLLABLE CHIEUCH WE RIEULPIEUP
+ {0xAE51, 0xCDD8}, //7793 #HANGUL SYLLABLE CHIEUCH WE RIEULSIOS
+ {0xAE52, 0xCDD9}, //7794 #HANGUL SYLLABLE CHIEUCH WE RIEULTHIEUTH
+ {0xAE53, 0xCDDA}, //7795 #HANGUL SYLLABLE CHIEUCH WE RIEULPHIEUPH
+ {0xAE54, 0xCDDB}, //7796 #HANGUL SYLLABLE CHIEUCH WE RIEULHIEUH
+ {0xAE55, 0xCDDC}, //7797 #HANGUL SYLLABLE CHIEUCH WE MIEUM
+ {0xAE56, 0xCDDD}, //7798 #HANGUL SYLLABLE CHIEUCH WE PIEUP
+ {0xAE57, 0xCDDE}, //7799 #HANGUL SYLLABLE CHIEUCH WE PIEUPSIOS
+ {0xAE58, 0xCDDF}, //7800 #HANGUL SYLLABLE CHIEUCH WE SIOS
+ {0xAE59, 0xCDE0}, //7801 #HANGUL SYLLABLE CHIEUCH WE SSANGSIOS
+ {0xAE5A, 0xCDE1}, //7802 #HANGUL SYLLABLE CHIEUCH WE IEUNG
+ {0xAE61, 0xCDE2}, //7803 #HANGUL SYLLABLE CHIEUCH WE CIEUC
+ {0xAE62, 0xCDE3}, //7804 #HANGUL SYLLABLE CHIEUCH WE CHIEUCH
+ {0xAE63, 0xCDE4}, //7805 #HANGUL SYLLABLE CHIEUCH WE KHIEUKH
+ {0xAE64, 0xCDE5}, //7806 #HANGUL SYLLABLE CHIEUCH WE THIEUTH
+ {0xAE65, 0xCDE6}, //7807 #HANGUL SYLLABLE CHIEUCH WE PHIEUPH
+ {0xAE66, 0xCDE7}, //7808 #HANGUL SYLLABLE CHIEUCH WE HIEUH
+ {0xAE67, 0xCDE9}, //7809 #HANGUL SYLLABLE CHIEUCH WI KIYEOK
+ {0xAE68, 0xCDEA}, //7810 #HANGUL SYLLABLE CHIEUCH WI SSANGKIYEOK
+ {0xAE69, 0xCDEB}, //7811 #HANGUL SYLLABLE CHIEUCH WI KIYEOKSIOS
+ {0xAE6A, 0xCDED}, //7812 #HANGUL SYLLABLE CHIEUCH WI NIEUNCIEUC
+ {0xAE6B, 0xCDEE}, //7813 #HANGUL SYLLABLE CHIEUCH WI NIEUNHIEUH
+ {0xAE6C, 0xCDEF}, //7814 #HANGUL SYLLABLE CHIEUCH WI TIKEUT
+ {0xAE6D, 0xCDF1}, //7815 #HANGUL SYLLABLE CHIEUCH WI RIEULKIYEOK
+ {0xAE6E, 0xCDF2}, //7816 #HANGUL SYLLABLE CHIEUCH WI RIEULMIEUM
+ {0xAE6F, 0xCDF3}, //7817 #HANGUL SYLLABLE CHIEUCH WI RIEULPIEUP
+ {0xAE70, 0xCDF4}, //7818 #HANGUL SYLLABLE CHIEUCH WI RIEULSIOS
+ {0xAE71, 0xCDF5}, //7819 #HANGUL SYLLABLE CHIEUCH WI RIEULTHIEUTH
+ {0xAE72, 0xCDF6}, //7820 #HANGUL SYLLABLE CHIEUCH WI RIEULPHIEUPH
+ {0xAE73, 0xCDF7}, //7821 #HANGUL SYLLABLE CHIEUCH WI RIEULHIEUH
+ {0xAE74, 0xCDFA}, //7822 #HANGUL SYLLABLE CHIEUCH WI PIEUPSIOS
+ {0xAE75, 0xCDFC}, //7823 #HANGUL SYLLABLE CHIEUCH WI SSANGSIOS
+ {0xAE76, 0xCDFE}, //7824 #HANGUL SYLLABLE CHIEUCH WI CIEUC
+ {0xAE77, 0xCDFF}, //7825 #HANGUL SYLLABLE CHIEUCH WI CHIEUCH
+ {0xAE78, 0xCE00}, //7826 #HANGUL SYLLABLE CHIEUCH WI KHIEUKH
+ {0xAE79, 0xCE01}, //7827 #HANGUL SYLLABLE CHIEUCH WI THIEUTH
+ {0xAE7A, 0xCE02}, //7828 #HANGUL SYLLABLE CHIEUCH WI PHIEUPH
+ {0xAE81, 0xCE03}, //7829 #HANGUL SYLLABLE CHIEUCH WI HIEUH
+ {0xAE82, 0xCE05}, //7830 #HANGUL SYLLABLE CHIEUCH YU KIYEOK
+ {0xAE83, 0xCE06}, //7831 #HANGUL SYLLABLE CHIEUCH YU SSANGKIYEOK
+ {0xAE84, 0xCE07}, //7832 #HANGUL SYLLABLE CHIEUCH YU KIYEOKSIOS
+ {0xAE85, 0xCE09}, //7833 #HANGUL SYLLABLE CHIEUCH YU NIEUNCIEUC
+ {0xAE86, 0xCE0A}, //7834 #HANGUL SYLLABLE CHIEUCH YU NIEUNHIEUH
+ {0xAE87, 0xCE0B}, //7835 #HANGUL SYLLABLE CHIEUCH YU TIKEUT
+ {0xAE88, 0xCE0D}, //7836 #HANGUL SYLLABLE CHIEUCH YU RIEULKIYEOK
+ {0xAE89, 0xCE0E}, //7837 #HANGUL SYLLABLE CHIEUCH YU RIEULMIEUM
+ {0xAE8A, 0xCE0F}, //7838 #HANGUL SYLLABLE CHIEUCH YU RIEULPIEUP
+ {0xAE8B, 0xCE10}, //7839 #HANGUL SYLLABLE CHIEUCH YU RIEULSIOS
+ {0xAE8C, 0xCE11}, //7840 #HANGUL SYLLABLE CHIEUCH YU RIEULTHIEUTH
+ {0xAE8D, 0xCE12}, //7841 #HANGUL SYLLABLE CHIEUCH YU RIEULPHIEUPH
+ {0xAE8E, 0xCE13}, //7842 #HANGUL SYLLABLE CHIEUCH YU RIEULHIEUH
+ {0xAE8F, 0xCE15}, //7843 #HANGUL SYLLABLE CHIEUCH YU PIEUP
+ {0xAE90, 0xCE16}, //7844 #HANGUL SYLLABLE CHIEUCH YU PIEUPSIOS
+ {0xAE91, 0xCE17}, //7845 #HANGUL SYLLABLE CHIEUCH YU SIOS
+ {0xAE92, 0xCE18}, //7846 #HANGUL SYLLABLE CHIEUCH YU SSANGSIOS
+ {0xAE93, 0xCE1A}, //7847 #HANGUL SYLLABLE CHIEUCH YU CIEUC
+ {0xAE94, 0xCE1B}, //7848 #HANGUL SYLLABLE CHIEUCH YU CHIEUCH
+ {0xAE95, 0xCE1C}, //7849 #HANGUL SYLLABLE CHIEUCH YU KHIEUKH
+ {0xAE96, 0xCE1D}, //7850 #HANGUL SYLLABLE CHIEUCH YU THIEUTH
+ {0xAE97, 0xCE1E}, //7851 #HANGUL SYLLABLE CHIEUCH YU PHIEUPH
+ {0xAE98, 0xCE1F}, //7852 #HANGUL SYLLABLE CHIEUCH YU HIEUH
+ {0xAE99, 0xCE22}, //7853 #HANGUL SYLLABLE CHIEUCH EU SSANGKIYEOK
+ {0xAE9A, 0xCE23}, //7854 #HANGUL SYLLABLE CHIEUCH EU KIYEOKSIOS
+ {0xAE9B, 0xCE25}, //7855 #HANGUL SYLLABLE CHIEUCH EU NIEUNCIEUC
+ {0xAE9C, 0xCE26}, //7856 #HANGUL SYLLABLE CHIEUCH EU NIEUNHIEUH
+ {0xAE9D, 0xCE27}, //7857 #HANGUL SYLLABLE CHIEUCH EU TIKEUT
+ {0xAE9E, 0xCE29}, //7858 #HANGUL SYLLABLE CHIEUCH EU RIEULKIYEOK
+ {0xAE9F, 0xCE2A}, //7859 #HANGUL SYLLABLE CHIEUCH EU RIEULMIEUM
+ {0xAEA0, 0xCE2B}, //7860 #HANGUL SYLLABLE CHIEUCH EU RIEULPIEUP
+ {0xAF41, 0xCE2C}, //7861 #HANGUL SYLLABLE CHIEUCH EU RIEULSIOS
+ {0xAF42, 0xCE2D}, //7862 #HANGUL SYLLABLE CHIEUCH EU RIEULTHIEUTH
+ {0xAF43, 0xCE2E}, //7863 #HANGUL SYLLABLE CHIEUCH EU RIEULPHIEUPH
+ {0xAF44, 0xCE2F}, //7864 #HANGUL SYLLABLE CHIEUCH EU RIEULHIEUH
+ {0xAF45, 0xCE32}, //7865 #HANGUL SYLLABLE CHIEUCH EU PIEUPSIOS
+ {0xAF46, 0xCE34}, //7866 #HANGUL SYLLABLE CHIEUCH EU SSANGSIOS
+ {0xAF47, 0xCE36}, //7867 #HANGUL SYLLABLE CHIEUCH EU CIEUC
+ {0xAF48, 0xCE37}, //7868 #HANGUL SYLLABLE CHIEUCH EU CHIEUCH
+ {0xAF49, 0xCE38}, //7869 #HANGUL SYLLABLE CHIEUCH EU KHIEUKH
+ {0xAF4A, 0xCE39}, //7870 #HANGUL SYLLABLE CHIEUCH EU THIEUTH
+ {0xAF4B, 0xCE3A}, //7871 #HANGUL SYLLABLE CHIEUCH EU PHIEUPH
+ {0xAF4C, 0xCE3B}, //7872 #HANGUL SYLLABLE CHIEUCH EU HIEUH
+ {0xAF4D, 0xCE3C}, //7873 #HANGUL SYLLABLE CHIEUCH YI
+ {0xAF4E, 0xCE3D}, //7874 #HANGUL SYLLABLE CHIEUCH YI KIYEOK
+ {0xAF4F, 0xCE3E}, //7875 #HANGUL SYLLABLE CHIEUCH YI SSANGKIYEOK
+ {0xAF50, 0xCE3F}, //7876 #HANGUL SYLLABLE CHIEUCH YI KIYEOKSIOS
+ {0xAF51, 0xCE40}, //7877 #HANGUL SYLLABLE CHIEUCH YI NIEUN
+ {0xAF52, 0xCE41}, //7878 #HANGUL SYLLABLE CHIEUCH YI NIEUNCIEUC
+ {0xAF53, 0xCE42}, //7879 #HANGUL SYLLABLE CHIEUCH YI NIEUNHIEUH
+ {0xAF54, 0xCE43}, //7880 #HANGUL SYLLABLE CHIEUCH YI TIKEUT
+ {0xAF55, 0xCE44}, //7881 #HANGUL SYLLABLE CHIEUCH YI RIEUL
+ {0xAF56, 0xCE45}, //7882 #HANGUL SYLLABLE CHIEUCH YI RIEULKIYEOK
+ {0xAF57, 0xCE46}, //7883 #HANGUL SYLLABLE CHIEUCH YI RIEULMIEUM
+ {0xAF58, 0xCE47}, //7884 #HANGUL SYLLABLE CHIEUCH YI RIEULPIEUP
+ {0xAF59, 0xCE48}, //7885 #HANGUL SYLLABLE CHIEUCH YI RIEULSIOS
+ {0xAF5A, 0xCE49}, //7886 #HANGUL SYLLABLE CHIEUCH YI RIEULTHIEUTH
+ {0xAF61, 0xCE4A}, //7887 #HANGUL SYLLABLE CHIEUCH YI RIEULPHIEUPH
+ {0xAF62, 0xCE4B}, //7888 #HANGUL SYLLABLE CHIEUCH YI RIEULHIEUH
+ {0xAF63, 0xCE4C}, //7889 #HANGUL SYLLABLE CHIEUCH YI MIEUM
+ {0xAF64, 0xCE4D}, //7890 #HANGUL SYLLABLE CHIEUCH YI PIEUP
+ {0xAF65, 0xCE4E}, //7891 #HANGUL SYLLABLE CHIEUCH YI PIEUPSIOS
+ {0xAF66, 0xCE4F}, //7892 #HANGUL SYLLABLE CHIEUCH YI SIOS
+ {0xAF67, 0xCE50}, //7893 #HANGUL SYLLABLE CHIEUCH YI SSANGSIOS
+ {0xAF68, 0xCE51}, //7894 #HANGUL SYLLABLE CHIEUCH YI IEUNG
+ {0xAF69, 0xCE52}, //7895 #HANGUL SYLLABLE CHIEUCH YI CIEUC
+ {0xAF6A, 0xCE53}, //7896 #HANGUL SYLLABLE CHIEUCH YI CHIEUCH
+ {0xAF6B, 0xCE54}, //7897 #HANGUL SYLLABLE CHIEUCH YI KHIEUKH
+ {0xAF6C, 0xCE55}, //7898 #HANGUL SYLLABLE CHIEUCH YI THIEUTH
+ {0xAF6D, 0xCE56}, //7899 #HANGUL SYLLABLE CHIEUCH YI PHIEUPH
+ {0xAF6E, 0xCE57}, //7900 #HANGUL SYLLABLE CHIEUCH YI HIEUH
+ {0xAF6F, 0xCE5A}, //7901 #HANGUL SYLLABLE CHIEUCH I SSANGKIYEOK
+ {0xAF70, 0xCE5B}, //7902 #HANGUL SYLLABLE CHIEUCH I KIYEOKSIOS
+ {0xAF71, 0xCE5D}, //7903 #HANGUL SYLLABLE CHIEUCH I NIEUNCIEUC
+ {0xAF72, 0xCE5E}, //7904 #HANGUL SYLLABLE CHIEUCH I NIEUNHIEUH
+ {0xAF73, 0xCE62}, //7905 #HANGUL SYLLABLE CHIEUCH I RIEULMIEUM
+ {0xAF74, 0xCE63}, //7906 #HANGUL SYLLABLE CHIEUCH I RIEULPIEUP
+ {0xAF75, 0xCE64}, //7907 #HANGUL SYLLABLE CHIEUCH I RIEULSIOS
+ {0xAF76, 0xCE65}, //7908 #HANGUL SYLLABLE CHIEUCH I RIEULTHIEUTH
+ {0xAF77, 0xCE66}, //7909 #HANGUL SYLLABLE CHIEUCH I RIEULPHIEUPH
+ {0xAF78, 0xCE67}, //7910 #HANGUL SYLLABLE CHIEUCH I RIEULHIEUH
+ {0xAF79, 0xCE6A}, //7911 #HANGUL SYLLABLE CHIEUCH I PIEUPSIOS
+ {0xAF7A, 0xCE6C}, //7912 #HANGUL SYLLABLE CHIEUCH I SSANGSIOS
+ {0xAF81, 0xCE6E}, //7913 #HANGUL SYLLABLE CHIEUCH I CIEUC
+ {0xAF82, 0xCE6F}, //7914 #HANGUL SYLLABLE CHIEUCH I CHIEUCH
+ {0xAF83, 0xCE70}, //7915 #HANGUL SYLLABLE CHIEUCH I KHIEUKH
+ {0xAF84, 0xCE71}, //7916 #HANGUL SYLLABLE CHIEUCH I THIEUTH
+ {0xAF85, 0xCE72}, //7917 #HANGUL SYLLABLE CHIEUCH I PHIEUPH
+ {0xAF86, 0xCE73}, //7918 #HANGUL SYLLABLE CHIEUCH I HIEUH
+ {0xAF87, 0xCE76}, //7919 #HANGUL SYLLABLE KHIEUKH A SSANGKIYEOK
+ {0xAF88, 0xCE77}, //7920 #HANGUL SYLLABLE KHIEUKH A KIYEOKSIOS
+ {0xAF89, 0xCE79}, //7921 #HANGUL SYLLABLE KHIEUKH A NIEUNCIEUC
+ {0xAF8A, 0xCE7A}, //7922 #HANGUL SYLLABLE KHIEUKH A NIEUNHIEUH
+ {0xAF8B, 0xCE7B}, //7923 #HANGUL SYLLABLE KHIEUKH A TIKEUT
+ {0xAF8C, 0xCE7D}, //7924 #HANGUL SYLLABLE KHIEUKH A RIEULKIYEOK
+ {0xAF8D, 0xCE7E}, //7925 #HANGUL SYLLABLE KHIEUKH A RIEULMIEUM
+ {0xAF8E, 0xCE7F}, //7926 #HANGUL SYLLABLE KHIEUKH A RIEULPIEUP
+ {0xAF8F, 0xCE80}, //7927 #HANGUL SYLLABLE KHIEUKH A RIEULSIOS
+ {0xAF90, 0xCE81}, //7928 #HANGUL SYLLABLE KHIEUKH A RIEULTHIEUTH
+ {0xAF91, 0xCE82}, //7929 #HANGUL SYLLABLE KHIEUKH A RIEULPHIEUPH
+ {0xAF92, 0xCE83}, //7930 #HANGUL SYLLABLE KHIEUKH A RIEULHIEUH
+ {0xAF93, 0xCE86}, //7931 #HANGUL SYLLABLE KHIEUKH A PIEUPSIOS
+ {0xAF94, 0xCE88}, //7932 #HANGUL SYLLABLE KHIEUKH A SSANGSIOS
+ {0xAF95, 0xCE8A}, //7933 #HANGUL SYLLABLE KHIEUKH A CIEUC
+ {0xAF96, 0xCE8B}, //7934 #HANGUL SYLLABLE KHIEUKH A CHIEUCH
+ {0xAF97, 0xCE8C}, //7935 #HANGUL SYLLABLE KHIEUKH A KHIEUKH
+ {0xAF98, 0xCE8D}, //7936 #HANGUL SYLLABLE KHIEUKH A THIEUTH
+ {0xAF99, 0xCE8E}, //7937 #HANGUL SYLLABLE KHIEUKH A PHIEUPH
+ {0xAF9A, 0xCE8F}, //7938 #HANGUL SYLLABLE KHIEUKH A HIEUH
+ {0xAF9B, 0xCE92}, //7939 #HANGUL SYLLABLE KHIEUKH AE SSANGKIYEOK
+ {0xAF9C, 0xCE93}, //7940 #HANGUL SYLLABLE KHIEUKH AE KIYEOKSIOS
+ {0xAF9D, 0xCE95}, //7941 #HANGUL SYLLABLE KHIEUKH AE NIEUNCIEUC
+ {0xAF9E, 0xCE96}, //7942 #HANGUL SYLLABLE KHIEUKH AE NIEUNHIEUH
+ {0xAF9F, 0xCE97}, //7943 #HANGUL SYLLABLE KHIEUKH AE TIKEUT
+ {0xAFA0, 0xCE99}, //7944 #HANGUL SYLLABLE KHIEUKH AE RIEULKIYEOK
+ {0xB041, 0xCE9A}, //7945 #HANGUL SYLLABLE KHIEUKH AE RIEULMIEUM
+ {0xB042, 0xCE9B}, //7946 #HANGUL SYLLABLE KHIEUKH AE RIEULPIEUP
+ {0xB043, 0xCE9C}, //7947 #HANGUL SYLLABLE KHIEUKH AE RIEULSIOS
+ {0xB044, 0xCE9D}, //7948 #HANGUL SYLLABLE KHIEUKH AE RIEULTHIEUTH
+ {0xB045, 0xCE9E}, //7949 #HANGUL SYLLABLE KHIEUKH AE RIEULPHIEUPH
+ {0xB046, 0xCE9F}, //7950 #HANGUL SYLLABLE KHIEUKH AE RIEULHIEUH
+ {0xB047, 0xCEA2}, //7951 #HANGUL SYLLABLE KHIEUKH AE PIEUPSIOS
+ {0xB048, 0xCEA6}, //7952 #HANGUL SYLLABLE KHIEUKH AE CIEUC
+ {0xB049, 0xCEA7}, //7953 #HANGUL SYLLABLE KHIEUKH AE CHIEUCH
+ {0xB04A, 0xCEA8}, //7954 #HANGUL SYLLABLE KHIEUKH AE KHIEUKH
+ {0xB04B, 0xCEA9}, //7955 #HANGUL SYLLABLE KHIEUKH AE THIEUTH
+ {0xB04C, 0xCEAA}, //7956 #HANGUL SYLLABLE KHIEUKH AE PHIEUPH
+ {0xB04D, 0xCEAB}, //7957 #HANGUL SYLLABLE KHIEUKH AE HIEUH
+ {0xB04E, 0xCEAE}, //7958 #HANGUL SYLLABLE KHIEUKH YA SSANGKIYEOK
+ {0xB04F, 0xCEAF}, //7959 #HANGUL SYLLABLE KHIEUKH YA KIYEOKSIOS
+ {0xB050, 0xCEB0}, //7960 #HANGUL SYLLABLE KHIEUKH YA NIEUN
+ {0xB051, 0xCEB1}, //7961 #HANGUL SYLLABLE KHIEUKH YA NIEUNCIEUC
+ {0xB052, 0xCEB2}, //7962 #HANGUL SYLLABLE KHIEUKH YA NIEUNHIEUH
+ {0xB053, 0xCEB3}, //7963 #HANGUL SYLLABLE KHIEUKH YA TIKEUT
+ {0xB054, 0xCEB4}, //7964 #HANGUL SYLLABLE KHIEUKH YA RIEUL
+ {0xB055, 0xCEB5}, //7965 #HANGUL SYLLABLE KHIEUKH YA RIEULKIYEOK
+ {0xB056, 0xCEB6}, //7966 #HANGUL SYLLABLE KHIEUKH YA RIEULMIEUM
+ {0xB057, 0xCEB7}, //7967 #HANGUL SYLLABLE KHIEUKH YA RIEULPIEUP
+ {0xB058, 0xCEB8}, //7968 #HANGUL SYLLABLE KHIEUKH YA RIEULSIOS
+ {0xB059, 0xCEB9}, //7969 #HANGUL SYLLABLE KHIEUKH YA RIEULTHIEUTH
+ {0xB05A, 0xCEBA}, //7970 #HANGUL SYLLABLE KHIEUKH YA RIEULPHIEUPH
+ {0xB061, 0xCEBB}, //7971 #HANGUL SYLLABLE KHIEUKH YA RIEULHIEUH
+ {0xB062, 0xCEBC}, //7972 #HANGUL SYLLABLE KHIEUKH YA MIEUM
+ {0xB063, 0xCEBD}, //7973 #HANGUL SYLLABLE KHIEUKH YA PIEUP
+ {0xB064, 0xCEBE}, //7974 #HANGUL SYLLABLE KHIEUKH YA PIEUPSIOS
+ {0xB065, 0xCEBF}, //7975 #HANGUL SYLLABLE KHIEUKH YA SIOS
+ {0xB066, 0xCEC0}, //7976 #HANGUL SYLLABLE KHIEUKH YA SSANGSIOS
+ {0xB067, 0xCEC2}, //7977 #HANGUL SYLLABLE KHIEUKH YA CIEUC
+ {0xB068, 0xCEC3}, //7978 #HANGUL SYLLABLE KHIEUKH YA CHIEUCH
+ {0xB069, 0xCEC4}, //7979 #HANGUL SYLLABLE KHIEUKH YA KHIEUKH
+ {0xB06A, 0xCEC5}, //7980 #HANGUL SYLLABLE KHIEUKH YA THIEUTH
+ {0xB06B, 0xCEC6}, //7981 #HANGUL SYLLABLE KHIEUKH YA PHIEUPH
+ {0xB06C, 0xCEC7}, //7982 #HANGUL SYLLABLE KHIEUKH YA HIEUH
+ {0xB06D, 0xCEC8}, //7983 #HANGUL SYLLABLE KHIEUKH YAE
+ {0xB06E, 0xCEC9}, //7984 #HANGUL SYLLABLE KHIEUKH YAE KIYEOK
+ {0xB06F, 0xCECA}, //7985 #HANGUL SYLLABLE KHIEUKH YAE SSANGKIYEOK
+ {0xB070, 0xCECB}, //7986 #HANGUL SYLLABLE KHIEUKH YAE KIYEOKSIOS
+ {0xB071, 0xCECC}, //7987 #HANGUL SYLLABLE KHIEUKH YAE NIEUN
+ {0xB072, 0xCECD}, //7988 #HANGUL SYLLABLE KHIEUKH YAE NIEUNCIEUC
+ {0xB073, 0xCECE}, //7989 #HANGUL SYLLABLE KHIEUKH YAE NIEUNHIEUH
+ {0xB074, 0xCECF}, //7990 #HANGUL SYLLABLE KHIEUKH YAE TIKEUT
+ {0xB075, 0xCED0}, //7991 #HANGUL SYLLABLE KHIEUKH YAE RIEUL
+ {0xB076, 0xCED1}, //7992 #HANGUL SYLLABLE KHIEUKH YAE RIEULKIYEOK
+ {0xB077, 0xCED2}, //7993 #HANGUL SYLLABLE KHIEUKH YAE RIEULMIEUM
+ {0xB078, 0xCED3}, //7994 #HANGUL SYLLABLE KHIEUKH YAE RIEULPIEUP
+ {0xB079, 0xCED4}, //7995 #HANGUL SYLLABLE KHIEUKH YAE RIEULSIOS
+ {0xB07A, 0xCED5}, //7996 #HANGUL SYLLABLE KHIEUKH YAE RIEULTHIEUTH
+ {0xB081, 0xCED6}, //7997 #HANGUL SYLLABLE KHIEUKH YAE RIEULPHIEUPH
+ {0xB082, 0xCED7}, //7998 #HANGUL SYLLABLE KHIEUKH YAE RIEULHIEUH
+ {0xB083, 0xCED8}, //7999 #HANGUL SYLLABLE KHIEUKH YAE MIEUM
+ {0xB084, 0xCED9}, //8000 #HANGUL SYLLABLE KHIEUKH YAE PIEUP
+ {0xB085, 0xCEDA}, //8001 #HANGUL SYLLABLE KHIEUKH YAE PIEUPSIOS
+ {0xB086, 0xCEDB}, //8002 #HANGUL SYLLABLE KHIEUKH YAE SIOS
+ {0xB087, 0xCEDC}, //8003 #HANGUL SYLLABLE KHIEUKH YAE SSANGSIOS
+ {0xB088, 0xCEDD}, //8004 #HANGUL SYLLABLE KHIEUKH YAE IEUNG
+ {0xB089, 0xCEDE}, //8005 #HANGUL SYLLABLE KHIEUKH YAE CIEUC
+ {0xB08A, 0xCEDF}, //8006 #HANGUL SYLLABLE KHIEUKH YAE CHIEUCH
+ {0xB08B, 0xCEE0}, //8007 #HANGUL SYLLABLE KHIEUKH YAE KHIEUKH
+ {0xB08C, 0xCEE1}, //8008 #HANGUL SYLLABLE KHIEUKH YAE THIEUTH
+ {0xB08D, 0xCEE2}, //8009 #HANGUL SYLLABLE KHIEUKH YAE PHIEUPH
+ {0xB08E, 0xCEE3}, //8010 #HANGUL SYLLABLE KHIEUKH YAE HIEUH
+ {0xB08F, 0xCEE6}, //8011 #HANGUL SYLLABLE KHIEUKH EO SSANGKIYEOK
+ {0xB090, 0xCEE7}, //8012 #HANGUL SYLLABLE KHIEUKH EO KIYEOKSIOS
+ {0xB091, 0xCEE9}, //8013 #HANGUL SYLLABLE KHIEUKH EO NIEUNCIEUC
+ {0xB092, 0xCEEA}, //8014 #HANGUL SYLLABLE KHIEUKH EO NIEUNHIEUH
+ {0xB093, 0xCEED}, //8015 #HANGUL SYLLABLE KHIEUKH EO RIEULKIYEOK
+ {0xB094, 0xCEEE}, //8016 #HANGUL SYLLABLE KHIEUKH EO RIEULMIEUM
+ {0xB095, 0xCEEF}, //8017 #HANGUL SYLLABLE KHIEUKH EO RIEULPIEUP
+ {0xB096, 0xCEF0}, //8018 #HANGUL SYLLABLE KHIEUKH EO RIEULSIOS
+ {0xB097, 0xCEF1}, //8019 #HANGUL SYLLABLE KHIEUKH EO RIEULTHIEUTH
+ {0xB098, 0xCEF2}, //8020 #HANGUL SYLLABLE KHIEUKH EO RIEULPHIEUPH
+ {0xB099, 0xCEF3}, //8021 #HANGUL SYLLABLE KHIEUKH EO RIEULHIEUH
+ {0xB09A, 0xCEF6}, //8022 #HANGUL SYLLABLE KHIEUKH EO PIEUPSIOS
+ {0xB09B, 0xCEFA}, //8023 #HANGUL SYLLABLE KHIEUKH EO CIEUC
+ {0xB09C, 0xCEFB}, //8024 #HANGUL SYLLABLE KHIEUKH EO CHIEUCH
+ {0xB09D, 0xCEFC}, //8025 #HANGUL SYLLABLE KHIEUKH EO KHIEUKH
+ {0xB09E, 0xCEFD}, //8026 #HANGUL SYLLABLE KHIEUKH EO THIEUTH
+ {0xB09F, 0xCEFE}, //8027 #HANGUL SYLLABLE KHIEUKH EO PHIEUPH
+ {0xB0A0, 0xCEFF}, //8028 #HANGUL SYLLABLE KHIEUKH EO HIEUH
+ {0xB0A1, 0xAC00}, //8029 #HANGUL SYLLABLE KIYEOK A
+ {0xB0A2, 0xAC01}, //8030 #HANGUL SYLLABLE KIYEOK A KIYEOK
+ {0xB0A3, 0xAC04}, //8031 #HANGUL SYLLABLE KIYEOK A NIEUN
+ {0xB0A4, 0xAC07}, //8032 #HANGUL SYLLABLE KIYEOK A TIKEUT
+ {0xB0A5, 0xAC08}, //8033 #HANGUL SYLLABLE KIYEOK A RIEUL
+ {0xB0A6, 0xAC09}, //8034 #HANGUL SYLLABLE KIYEOK A RIEULKIYEOK
+ {0xB0A7, 0xAC0A}, //8035 #HANGUL SYLLABLE KIYEOK A RIEULMIEUM
+ {0xB0A8, 0xAC10}, //8036 #HANGUL SYLLABLE KIYEOK A MIEUM
+ {0xB0A9, 0xAC11}, //8037 #HANGUL SYLLABLE KIYEOK A PIEUP
+ {0xB0AA, 0xAC12}, //8038 #HANGUL SYLLABLE KIYEOK A PIEUPSIOS
+ {0xB0AB, 0xAC13}, //8039 #HANGUL SYLLABLE KIYEOK A SIOS
+ {0xB0AC, 0xAC14}, //8040 #HANGUL SYLLABLE KIYEOK A SSANGSIOS
+ {0xB0AD, 0xAC15}, //8041 #HANGUL SYLLABLE KIYEOK A IEUNG
+ {0xB0AE, 0xAC16}, //8042 #HANGUL SYLLABLE KIYEOK A CIEUC
+ {0xB0AF, 0xAC17}, //8043 #HANGUL SYLLABLE KIYEOK A CHIEUCH
+ {0xB0B0, 0xAC19}, //8044 #HANGUL SYLLABLE KIYEOK A THIEUTH
+ {0xB0B1, 0xAC1A}, //8045 #HANGUL SYLLABLE KIYEOK A PHIEUPH
+ {0xB0B2, 0xAC1B}, //8046 #HANGUL SYLLABLE KIYEOK A HIEUH
+ {0xB0B3, 0xAC1C}, //8047 #HANGUL SYLLABLE KIYEOK AE
+ {0xB0B4, 0xAC1D}, //8048 #HANGUL SYLLABLE KIYEOK AE KIYEOK
+ {0xB0B5, 0xAC20}, //8049 #HANGUL SYLLABLE KIYEOK AE NIEUN
+ {0xB0B6, 0xAC24}, //8050 #HANGUL SYLLABLE KIYEOK AE RIEUL
+ {0xB0B7, 0xAC2C}, //8051 #HANGUL SYLLABLE KIYEOK AE MIEUM
+ {0xB0B8, 0xAC2D}, //8052 #HANGUL SYLLABLE KIYEOK AE PIEUP
+ {0xB0B9, 0xAC2F}, //8053 #HANGUL SYLLABLE KIYEOK AE SIOS
+ {0xB0BA, 0xAC30}, //8054 #HANGUL SYLLABLE KIYEOK AE SSANGSIOS
+ {0xB0BB, 0xAC31}, //8055 #HANGUL SYLLABLE KIYEOK AE IEUNG
+ {0xB0BC, 0xAC38}, //8056 #HANGUL SYLLABLE KIYEOK YA
+ {0xB0BD, 0xAC39}, //8057 #HANGUL SYLLABLE KIYEOK YA KIYEOK
+ {0xB0BE, 0xAC3C}, //8058 #HANGUL SYLLABLE KIYEOK YA NIEUN
+ {0xB0BF, 0xAC40}, //8059 #HANGUL SYLLABLE KIYEOK YA RIEUL
+ {0xB0C0, 0xAC4B}, //8060 #HANGUL SYLLABLE KIYEOK YA SIOS
+ {0xB0C1, 0xAC4D}, //8061 #HANGUL SYLLABLE KIYEOK YA IEUNG
+ {0xB0C2, 0xAC54}, //8062 #HANGUL SYLLABLE KIYEOK YAE
+ {0xB0C3, 0xAC58}, //8063 #HANGUL SYLLABLE KIYEOK YAE NIEUN
+ {0xB0C4, 0xAC5C}, //8064 #HANGUL SYLLABLE KIYEOK YAE RIEUL
+ {0xB0C5, 0xAC70}, //8065 #HANGUL SYLLABLE KIYEOK EO
+ {0xB0C6, 0xAC71}, //8066 #HANGUL SYLLABLE KIYEOK EO KIYEOK
+ {0xB0C7, 0xAC74}, //8067 #HANGUL SYLLABLE KIYEOK EO NIEUN
+ {0xB0C8, 0xAC77}, //8068 #HANGUL SYLLABLE KIYEOK EO TIKEUT
+ {0xB0C9, 0xAC78}, //8069 #HANGUL SYLLABLE KIYEOK EO RIEUL
+ {0xB0CA, 0xAC7A}, //8070 #HANGUL SYLLABLE KIYEOK EO RIEULMIEUM
+ {0xB0CB, 0xAC80}, //8071 #HANGUL SYLLABLE KIYEOK EO MIEUM
+ {0xB0CC, 0xAC81}, //8072 #HANGUL SYLLABLE KIYEOK EO PIEUP
+ {0xB0CD, 0xAC83}, //8073 #HANGUL SYLLABLE KIYEOK EO SIOS
+ {0xB0CE, 0xAC84}, //8074 #HANGUL SYLLABLE KIYEOK EO SSANGSIOS
+ {0xB0CF, 0xAC85}, //8075 #HANGUL SYLLABLE KIYEOK EO IEUNG
+ {0xB0D0, 0xAC86}, //8076 #HANGUL SYLLABLE KIYEOK EO CIEUC
+ {0xB0D1, 0xAC89}, //8077 #HANGUL SYLLABLE KIYEOK EO THIEUTH
+ {0xB0D2, 0xAC8A}, //8078 #HANGUL SYLLABLE KIYEOK EO PHIEUPH
+ {0xB0D3, 0xAC8B}, //8079 #HANGUL SYLLABLE KIYEOK EO HIEUH
+ {0xB0D4, 0xAC8C}, //8080 #HANGUL SYLLABLE KIYEOK E
+ {0xB0D5, 0xAC90}, //8081 #HANGUL SYLLABLE KIYEOK E NIEUN
+ {0xB0D6, 0xAC94}, //8082 #HANGUL SYLLABLE KIYEOK E RIEUL
+ {0xB0D7, 0xAC9C}, //8083 #HANGUL SYLLABLE KIYEOK E MIEUM
+ {0xB0D8, 0xAC9D}, //8084 #HANGUL SYLLABLE KIYEOK E PIEUP
+ {0xB0D9, 0xAC9F}, //8085 #HANGUL SYLLABLE KIYEOK E SIOS
+ {0xB0DA, 0xACA0}, //8086 #HANGUL SYLLABLE KIYEOK E SSANGSIOS
+ {0xB0DB, 0xACA1}, //8087 #HANGUL SYLLABLE KIYEOK E IEUNG
+ {0xB0DC, 0xACA8}, //8088 #HANGUL SYLLABLE KIYEOK YEO
+ {0xB0DD, 0xACA9}, //8089 #HANGUL SYLLABLE KIYEOK YEO KIYEOK
+ {0xB0DE, 0xACAA}, //8090 #HANGUL SYLLABLE KIYEOK YEO SSANGKIYEOK
+ {0xB0DF, 0xACAC}, //8091 #HANGUL SYLLABLE KIYEOK YEO NIEUN
+ {0xB0E0, 0xACAF}, //8092 #HANGUL SYLLABLE KIYEOK YEO TIKEUT
+ {0xB0E1, 0xACB0}, //8093 #HANGUL SYLLABLE KIYEOK YEO RIEUL
+ {0xB0E2, 0xACB8}, //8094 #HANGUL SYLLABLE KIYEOK YEO MIEUM
+ {0xB0E3, 0xACB9}, //8095 #HANGUL SYLLABLE KIYEOK YEO PIEUP
+ {0xB0E4, 0xACBB}, //8096 #HANGUL SYLLABLE KIYEOK YEO SIOS
+ {0xB0E5, 0xACBC}, //8097 #HANGUL SYLLABLE KIYEOK YEO SSANGSIOS
+ {0xB0E6, 0xACBD}, //8098 #HANGUL SYLLABLE KIYEOK YEO IEUNG
+ {0xB0E7, 0xACC1}, //8099 #HANGUL SYLLABLE KIYEOK YEO THIEUTH
+ {0xB0E8, 0xACC4}, //8100 #HANGUL SYLLABLE KIYEOK YE
+ {0xB0E9, 0xACC8}, //8101 #HANGUL SYLLABLE KIYEOK YE NIEUN
+ {0xB0EA, 0xACCC}, //8102 #HANGUL SYLLABLE KIYEOK YE RIEUL
+ {0xB0EB, 0xACD5}, //8103 #HANGUL SYLLABLE KIYEOK YE PIEUP
+ {0xB0EC, 0xACD7}, //8104 #HANGUL SYLLABLE KIYEOK YE SIOS
+ {0xB0ED, 0xACE0}, //8105 #HANGUL SYLLABLE KIYEOK O
+ {0xB0EE, 0xACE1}, //8106 #HANGUL SYLLABLE KIYEOK O KIYEOK
+ {0xB0EF, 0xACE4}, //8107 #HANGUL SYLLABLE KIYEOK O NIEUN
+ {0xB0F0, 0xACE7}, //8108 #HANGUL SYLLABLE KIYEOK O TIKEUT
+ {0xB0F1, 0xACE8}, //8109 #HANGUL SYLLABLE KIYEOK O RIEUL
+ {0xB0F2, 0xACEA}, //8110 #HANGUL SYLLABLE KIYEOK O RIEULMIEUM
+ {0xB0F3, 0xACEC}, //8111 #HANGUL SYLLABLE KIYEOK O RIEULSIOS
+ {0xB0F4, 0xACEF}, //8112 #HANGUL SYLLABLE KIYEOK O RIEULHIEUH
+ {0xB0F5, 0xACF0}, //8113 #HANGUL SYLLABLE KIYEOK O MIEUM
+ {0xB0F6, 0xACF1}, //8114 #HANGUL SYLLABLE KIYEOK O PIEUP
+ {0xB0F7, 0xACF3}, //8115 #HANGUL SYLLABLE KIYEOK O SIOS
+ {0xB0F8, 0xACF5}, //8116 #HANGUL SYLLABLE KIYEOK O IEUNG
+ {0xB0F9, 0xACF6}, //8117 #HANGUL SYLLABLE KIYEOK O CIEUC
+ {0xB0FA, 0xACFC}, //8118 #HANGUL SYLLABLE KIYEOK WA
+ {0xB0FB, 0xACFD}, //8119 #HANGUL SYLLABLE KIYEOK WA KIYEOK
+ {0xB0FC, 0xAD00}, //8120 #HANGUL SYLLABLE KIYEOK WA NIEUN
+ {0xB0FD, 0xAD04}, //8121 #HANGUL SYLLABLE KIYEOK WA RIEUL
+ {0xB0FE, 0xAD06}, //8122 #HANGUL SYLLABLE KIYEOK WA RIEULMIEUM
+ {0xB141, 0xCF02}, //8123 #HANGUL SYLLABLE KHIEUKH E SSANGKIYEOK
+ {0xB142, 0xCF03}, //8124 #HANGUL SYLLABLE KHIEUKH E KIYEOKSIOS
+ {0xB143, 0xCF05}, //8125 #HANGUL SYLLABLE KHIEUKH E NIEUNCIEUC
+ {0xB144, 0xCF06}, //8126 #HANGUL SYLLABLE KHIEUKH E NIEUNHIEUH
+ {0xB145, 0xCF07}, //8127 #HANGUL SYLLABLE KHIEUKH E TIKEUT
+ {0xB146, 0xCF09}, //8128 #HANGUL SYLLABLE KHIEUKH E RIEULKIYEOK
+ {0xB147, 0xCF0A}, //8129 #HANGUL SYLLABLE KHIEUKH E RIEULMIEUM
+ {0xB148, 0xCF0B}, //8130 #HANGUL SYLLABLE KHIEUKH E RIEULPIEUP
+ {0xB149, 0xCF0C}, //8131 #HANGUL SYLLABLE KHIEUKH E RIEULSIOS
+ {0xB14A, 0xCF0D}, //8132 #HANGUL SYLLABLE KHIEUKH E RIEULTHIEUTH
+ {0xB14B, 0xCF0E}, //8133 #HANGUL SYLLABLE KHIEUKH E RIEULPHIEUPH
+ {0xB14C, 0xCF0F}, //8134 #HANGUL SYLLABLE KHIEUKH E RIEULHIEUH
+ {0xB14D, 0xCF12}, //8135 #HANGUL SYLLABLE KHIEUKH E PIEUPSIOS
+ {0xB14E, 0xCF14}, //8136 #HANGUL SYLLABLE KHIEUKH E SSANGSIOS
+ {0xB14F, 0xCF16}, //8137 #HANGUL SYLLABLE KHIEUKH E CIEUC
+ {0xB150, 0xCF17}, //8138 #HANGUL SYLLABLE KHIEUKH E CHIEUCH
+ {0xB151, 0xCF18}, //8139 #HANGUL SYLLABLE KHIEUKH E KHIEUKH
+ {0xB152, 0xCF19}, //8140 #HANGUL SYLLABLE KHIEUKH E THIEUTH
+ {0xB153, 0xCF1A}, //8141 #HANGUL SYLLABLE KHIEUKH E PHIEUPH
+ {0xB154, 0xCF1B}, //8142 #HANGUL SYLLABLE KHIEUKH E HIEUH
+ {0xB155, 0xCF1D}, //8143 #HANGUL SYLLABLE KHIEUKH YEO KIYEOK
+ {0xB156, 0xCF1E}, //8144 #HANGUL SYLLABLE KHIEUKH YEO SSANGKIYEOK
+ {0xB157, 0xCF1F}, //8145 #HANGUL SYLLABLE KHIEUKH YEO KIYEOKSIOS
+ {0xB158, 0xCF21}, //8146 #HANGUL SYLLABLE KHIEUKH YEO NIEUNCIEUC
+ {0xB159, 0xCF22}, //8147 #HANGUL SYLLABLE KHIEUKH YEO NIEUNHIEUH
+ {0xB15A, 0xCF23}, //8148 #HANGUL SYLLABLE KHIEUKH YEO TIKEUT
+ {0xB161, 0xCF25}, //8149 #HANGUL SYLLABLE KHIEUKH YEO RIEULKIYEOK
+ {0xB162, 0xCF26}, //8150 #HANGUL SYLLABLE KHIEUKH YEO RIEULMIEUM
+ {0xB163, 0xCF27}, //8151 #HANGUL SYLLABLE KHIEUKH YEO RIEULPIEUP
+ {0xB164, 0xCF28}, //8152 #HANGUL SYLLABLE KHIEUKH YEO RIEULSIOS
+ {0xB165, 0xCF29}, //8153 #HANGUL SYLLABLE KHIEUKH YEO RIEULTHIEUTH
+ {0xB166, 0xCF2A}, //8154 #HANGUL SYLLABLE KHIEUKH YEO RIEULPHIEUPH
+ {0xB167, 0xCF2B}, //8155 #HANGUL SYLLABLE KHIEUKH YEO RIEULHIEUH
+ {0xB168, 0xCF2E}, //8156 #HANGUL SYLLABLE KHIEUKH YEO PIEUPSIOS
+ {0xB169, 0xCF32}, //8157 #HANGUL SYLLABLE KHIEUKH YEO CIEUC
+ {0xB16A, 0xCF33}, //8158 #HANGUL SYLLABLE KHIEUKH YEO CHIEUCH
+ {0xB16B, 0xCF34}, //8159 #HANGUL SYLLABLE KHIEUKH YEO KHIEUKH
+ {0xB16C, 0xCF35}, //8160 #HANGUL SYLLABLE KHIEUKH YEO THIEUTH
+ {0xB16D, 0xCF36}, //8161 #HANGUL SYLLABLE KHIEUKH YEO PHIEUPH
+ {0xB16E, 0xCF37}, //8162 #HANGUL SYLLABLE KHIEUKH YEO HIEUH
+ {0xB16F, 0xCF39}, //8163 #HANGUL SYLLABLE KHIEUKH YE KIYEOK
+ {0xB170, 0xCF3A}, //8164 #HANGUL SYLLABLE KHIEUKH YE SSANGKIYEOK
+ {0xB171, 0xCF3B}, //8165 #HANGUL SYLLABLE KHIEUKH YE KIYEOKSIOS
+ {0xB172, 0xCF3C}, //8166 #HANGUL SYLLABLE KHIEUKH YE NIEUN
+ {0xB173, 0xCF3D}, //8167 #HANGUL SYLLABLE KHIEUKH YE NIEUNCIEUC
+ {0xB174, 0xCF3E}, //8168 #HANGUL SYLLABLE KHIEUKH YE NIEUNHIEUH
+ {0xB175, 0xCF3F}, //8169 #HANGUL SYLLABLE KHIEUKH YE TIKEUT
+ {0xB176, 0xCF40}, //8170 #HANGUL SYLLABLE KHIEUKH YE RIEUL
+ {0xB177, 0xCF41}, //8171 #HANGUL SYLLABLE KHIEUKH YE RIEULKIYEOK
+ {0xB178, 0xCF42}, //8172 #HANGUL SYLLABLE KHIEUKH YE RIEULMIEUM
+ {0xB179, 0xCF43}, //8173 #HANGUL SYLLABLE KHIEUKH YE RIEULPIEUP
+ {0xB17A, 0xCF44}, //8174 #HANGUL SYLLABLE KHIEUKH YE RIEULSIOS
+ {0xB181, 0xCF45}, //8175 #HANGUL SYLLABLE KHIEUKH YE RIEULTHIEUTH
+ {0xB182, 0xCF46}, //8176 #HANGUL SYLLABLE KHIEUKH YE RIEULPHIEUPH
+ {0xB183, 0xCF47}, //8177 #HANGUL SYLLABLE KHIEUKH YE RIEULHIEUH
+ {0xB184, 0xCF48}, //8178 #HANGUL SYLLABLE KHIEUKH YE MIEUM
+ {0xB185, 0xCF49}, //8179 #HANGUL SYLLABLE KHIEUKH YE PIEUP
+ {0xB186, 0xCF4A}, //8180 #HANGUL SYLLABLE KHIEUKH YE PIEUPSIOS
+ {0xB187, 0xCF4B}, //8181 #HANGUL SYLLABLE KHIEUKH YE SIOS
+ {0xB188, 0xCF4C}, //8182 #HANGUL SYLLABLE KHIEUKH YE SSANGSIOS
+ {0xB189, 0xCF4D}, //8183 #HANGUL SYLLABLE KHIEUKH YE IEUNG
+ {0xB18A, 0xCF4E}, //8184 #HANGUL SYLLABLE KHIEUKH YE CIEUC
+ {0xB18B, 0xCF4F}, //8185 #HANGUL SYLLABLE KHIEUKH YE CHIEUCH
+ {0xB18C, 0xCF50}, //8186 #HANGUL SYLLABLE KHIEUKH YE KHIEUKH
+ {0xB18D, 0xCF51}, //8187 #HANGUL SYLLABLE KHIEUKH YE THIEUTH
+ {0xB18E, 0xCF52}, //8188 #HANGUL SYLLABLE KHIEUKH YE PHIEUPH
+ {0xB18F, 0xCF53}, //8189 #HANGUL SYLLABLE KHIEUKH YE HIEUH
+ {0xB190, 0xCF56}, //8190 #HANGUL SYLLABLE KHIEUKH O SSANGKIYEOK
+ {0xB191, 0xCF57}, //8191 #HANGUL SYLLABLE KHIEUKH O KIYEOKSIOS
+ {0xB192, 0xCF59}, //8192 #HANGUL SYLLABLE KHIEUKH O NIEUNCIEUC
+ {0xB193, 0xCF5A}, //8193 #HANGUL SYLLABLE KHIEUKH O NIEUNHIEUH
+ {0xB194, 0xCF5B}, //8194 #HANGUL SYLLABLE KHIEUKH O TIKEUT
+ {0xB195, 0xCF5D}, //8195 #HANGUL SYLLABLE KHIEUKH O RIEULKIYEOK
+ {0xB196, 0xCF5E}, //8196 #HANGUL SYLLABLE KHIEUKH O RIEULMIEUM
+ {0xB197, 0xCF5F}, //8197 #HANGUL SYLLABLE KHIEUKH O RIEULPIEUP
+ {0xB198, 0xCF60}, //8198 #HANGUL SYLLABLE KHIEUKH O RIEULSIOS
+ {0xB199, 0xCF61}, //8199 #HANGUL SYLLABLE KHIEUKH O RIEULTHIEUTH
+ {0xB19A, 0xCF62}, //8200 #HANGUL SYLLABLE KHIEUKH O RIEULPHIEUPH
+ {0xB19B, 0xCF63}, //8201 #HANGUL SYLLABLE KHIEUKH O RIEULHIEUH
+ {0xB19C, 0xCF66}, //8202 #HANGUL SYLLABLE KHIEUKH O PIEUPSIOS
+ {0xB19D, 0xCF68}, //8203 #HANGUL SYLLABLE KHIEUKH O SSANGSIOS
+ {0xB19E, 0xCF6A}, //8204 #HANGUL SYLLABLE KHIEUKH O CIEUC
+ {0xB19F, 0xCF6B}, //8205 #HANGUL SYLLABLE KHIEUKH O CHIEUCH
+ {0xB1A0, 0xCF6C}, //8206 #HANGUL SYLLABLE KHIEUKH O KHIEUKH
+ {0xB1A1, 0xAD0C}, //8207 #HANGUL SYLLABLE KIYEOK WA MIEUM
+ {0xB1A2, 0xAD0D}, //8208 #HANGUL SYLLABLE KIYEOK WA PIEUP
+ {0xB1A3, 0xAD0F}, //8209 #HANGUL SYLLABLE KIYEOK WA SIOS
+ {0xB1A4, 0xAD11}, //8210 #HANGUL SYLLABLE KIYEOK WA IEUNG
+ {0xB1A5, 0xAD18}, //8211 #HANGUL SYLLABLE KIYEOK WAE
+ {0xB1A6, 0xAD1C}, //8212 #HANGUL SYLLABLE KIYEOK WAE NIEUN
+ {0xB1A7, 0xAD20}, //8213 #HANGUL SYLLABLE KIYEOK WAE RIEUL
+ {0xB1A8, 0xAD29}, //8214 #HANGUL SYLLABLE KIYEOK WAE PIEUP
+ {0xB1A9, 0xAD2C}, //8215 #HANGUL SYLLABLE KIYEOK WAE SSANGSIOS
+ {0xB1AA, 0xAD2D}, //8216 #HANGUL SYLLABLE KIYEOK WAE IEUNG
+ {0xB1AB, 0xAD34}, //8217 #HANGUL SYLLABLE KIYEOK OE
+ {0xB1AC, 0xAD35}, //8218 #HANGUL SYLLABLE KIYEOK OE KIYEOK
+ {0xB1AD, 0xAD38}, //8219 #HANGUL SYLLABLE KIYEOK OE NIEUN
+ {0xB1AE, 0xAD3C}, //8220 #HANGUL SYLLABLE KIYEOK OE RIEUL
+ {0xB1AF, 0xAD44}, //8221 #HANGUL SYLLABLE KIYEOK OE MIEUM
+ {0xB1B0, 0xAD45}, //8222 #HANGUL SYLLABLE KIYEOK OE PIEUP
+ {0xB1B1, 0xAD47}, //8223 #HANGUL SYLLABLE KIYEOK OE SIOS
+ {0xB1B2, 0xAD49}, //8224 #HANGUL SYLLABLE KIYEOK OE IEUNG
+ {0xB1B3, 0xAD50}, //8225 #HANGUL SYLLABLE KIYEOK YO
+ {0xB1B4, 0xAD54}, //8226 #HANGUL SYLLABLE KIYEOK YO NIEUN
+ {0xB1B5, 0xAD58}, //8227 #HANGUL SYLLABLE KIYEOK YO RIEUL
+ {0xB1B6, 0xAD61}, //8228 #HANGUL SYLLABLE KIYEOK YO PIEUP
+ {0xB1B7, 0xAD63}, //8229 #HANGUL SYLLABLE KIYEOK YO SIOS
+ {0xB1B8, 0xAD6C}, //8230 #HANGUL SYLLABLE KIYEOK U
+ {0xB1B9, 0xAD6D}, //8231 #HANGUL SYLLABLE KIYEOK U KIYEOK
+ {0xB1BA, 0xAD70}, //8232 #HANGUL SYLLABLE KIYEOK U NIEUN
+ {0xB1BB, 0xAD73}, //8233 #HANGUL SYLLABLE KIYEOK U TIKEUT
+ {0xB1BC, 0xAD74}, //8234 #HANGUL SYLLABLE KIYEOK U RIEUL
+ {0xB1BD, 0xAD75}, //8235 #HANGUL SYLLABLE KIYEOK U RIEULKIYEOK
+ {0xB1BE, 0xAD76}, //8236 #HANGUL SYLLABLE KIYEOK U RIEULMIEUM
+ {0xB1BF, 0xAD7B}, //8237 #HANGUL SYLLABLE KIYEOK U RIEULHIEUH
+ {0xB1C0, 0xAD7C}, //8238 #HANGUL SYLLABLE KIYEOK U MIEUM
+ {0xB1C1, 0xAD7D}, //8239 #HANGUL SYLLABLE KIYEOK U PIEUP
+ {0xB1C2, 0xAD7F}, //8240 #HANGUL SYLLABLE KIYEOK U SIOS
+ {0xB1C3, 0xAD81}, //8241 #HANGUL SYLLABLE KIYEOK U IEUNG
+ {0xB1C4, 0xAD82}, //8242 #HANGUL SYLLABLE KIYEOK U CIEUC
+ {0xB1C5, 0xAD88}, //8243 #HANGUL SYLLABLE KIYEOK WEO
+ {0xB1C6, 0xAD89}, //8244 #HANGUL SYLLABLE KIYEOK WEO KIYEOK
+ {0xB1C7, 0xAD8C}, //8245 #HANGUL SYLLABLE KIYEOK WEO NIEUN
+ {0xB1C8, 0xAD90}, //8246 #HANGUL SYLLABLE KIYEOK WEO RIEUL
+ {0xB1C9, 0xAD9C}, //8247 #HANGUL SYLLABLE KIYEOK WEO SSANGSIOS
+ {0xB1CA, 0xAD9D}, //8248 #HANGUL SYLLABLE KIYEOK WEO IEUNG
+ {0xB1CB, 0xADA4}, //8249 #HANGUL SYLLABLE KIYEOK WE
+ {0xB1CC, 0xADB7}, //8250 #HANGUL SYLLABLE KIYEOK WE SIOS
+ {0xB1CD, 0xADC0}, //8251 #HANGUL SYLLABLE KIYEOK WI
+ {0xB1CE, 0xADC1}, //8252 #HANGUL SYLLABLE KIYEOK WI KIYEOK
+ {0xB1CF, 0xADC4}, //8253 #HANGUL SYLLABLE KIYEOK WI NIEUN
+ {0xB1D0, 0xADC8}, //8254 #HANGUL SYLLABLE KIYEOK WI RIEUL
+ {0xB1D1, 0xADD0}, //8255 #HANGUL SYLLABLE KIYEOK WI MIEUM
+ {0xB1D2, 0xADD1}, //8256 #HANGUL SYLLABLE KIYEOK WI PIEUP
+ {0xB1D3, 0xADD3}, //8257 #HANGUL SYLLABLE KIYEOK WI SIOS
+ {0xB1D4, 0xADDC}, //8258 #HANGUL SYLLABLE KIYEOK YU
+ {0xB1D5, 0xADE0}, //8259 #HANGUL SYLLABLE KIYEOK YU NIEUN
+ {0xB1D6, 0xADE4}, //8260 #HANGUL SYLLABLE KIYEOK YU RIEUL
+ {0xB1D7, 0xADF8}, //8261 #HANGUL SYLLABLE KIYEOK EU
+ {0xB1D8, 0xADF9}, //8262 #HANGUL SYLLABLE KIYEOK EU KIYEOK
+ {0xB1D9, 0xADFC}, //8263 #HANGUL SYLLABLE KIYEOK EU NIEUN
+ {0xB1DA, 0xADFF}, //8264 #HANGUL SYLLABLE KIYEOK EU TIKEUT
+ {0xB1DB, 0xAE00}, //8265 #HANGUL SYLLABLE KIYEOK EU RIEUL
+ {0xB1DC, 0xAE01}, //8266 #HANGUL SYLLABLE KIYEOK EU RIEULKIYEOK
+ {0xB1DD, 0xAE08}, //8267 #HANGUL SYLLABLE KIYEOK EU MIEUM
+ {0xB1DE, 0xAE09}, //8268 #HANGUL SYLLABLE KIYEOK EU PIEUP
+ {0xB1DF, 0xAE0B}, //8269 #HANGUL SYLLABLE KIYEOK EU SIOS
+ {0xB1E0, 0xAE0D}, //8270 #HANGUL SYLLABLE KIYEOK EU IEUNG
+ {0xB1E1, 0xAE14}, //8271 #HANGUL SYLLABLE KIYEOK YI
+ {0xB1E2, 0xAE30}, //8272 #HANGUL SYLLABLE KIYEOK I
+ {0xB1E3, 0xAE31}, //8273 #HANGUL SYLLABLE KIYEOK I KIYEOK
+ {0xB1E4, 0xAE34}, //8274 #HANGUL SYLLABLE KIYEOK I NIEUN
+ {0xB1E5, 0xAE37}, //8275 #HANGUL SYLLABLE KIYEOK I TIKEUT
+ {0xB1E6, 0xAE38}, //8276 #HANGUL SYLLABLE KIYEOK I RIEUL
+ {0xB1E7, 0xAE3A}, //8277 #HANGUL SYLLABLE KIYEOK I RIEULMIEUM
+ {0xB1E8, 0xAE40}, //8278 #HANGUL SYLLABLE KIYEOK I MIEUM
+ {0xB1E9, 0xAE41}, //8279 #HANGUL SYLLABLE KIYEOK I PIEUP
+ {0xB1EA, 0xAE43}, //8280 #HANGUL SYLLABLE KIYEOK I SIOS
+ {0xB1EB, 0xAE45}, //8281 #HANGUL SYLLABLE KIYEOK I IEUNG
+ {0xB1EC, 0xAE46}, //8282 #HANGUL SYLLABLE KIYEOK I CIEUC
+ {0xB1ED, 0xAE4A}, //8283 #HANGUL SYLLABLE KIYEOK I PHIEUPH
+ {0xB1EE, 0xAE4C}, //8284 #HANGUL SYLLABLE SSANGKIYEOK A
+ {0xB1EF, 0xAE4D}, //8285 #HANGUL SYLLABLE SSANGKIYEOK A KIYEOK
+ {0xB1F0, 0xAE4E}, //8286 #HANGUL SYLLABLE SSANGKIYEOK A SSANGKIYEOK
+ {0xB1F1, 0xAE50}, //8287 #HANGUL SYLLABLE SSANGKIYEOK A NIEUN
+ {0xB1F2, 0xAE54}, //8288 #HANGUL SYLLABLE SSANGKIYEOK A RIEUL
+ {0xB1F3, 0xAE56}, //8289 #HANGUL SYLLABLE SSANGKIYEOK A RIEULMIEUM
+ {0xB1F4, 0xAE5C}, //8290 #HANGUL SYLLABLE SSANGKIYEOK A MIEUM
+ {0xB1F5, 0xAE5D}, //8291 #HANGUL SYLLABLE SSANGKIYEOK A PIEUP
+ {0xB1F6, 0xAE5F}, //8292 #HANGUL SYLLABLE SSANGKIYEOK A SIOS
+ {0xB1F7, 0xAE60}, //8293 #HANGUL SYLLABLE SSANGKIYEOK A SSANGSIOS
+ {0xB1F8, 0xAE61}, //8294 #HANGUL SYLLABLE SSANGKIYEOK A IEUNG
+ {0xB1F9, 0xAE65}, //8295 #HANGUL SYLLABLE SSANGKIYEOK A THIEUTH
+ {0xB1FA, 0xAE68}, //8296 #HANGUL SYLLABLE SSANGKIYEOK AE
+ {0xB1FB, 0xAE69}, //8297 #HANGUL SYLLABLE SSANGKIYEOK AE KIYEOK
+ {0xB1FC, 0xAE6C}, //8298 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUN
+ {0xB1FD, 0xAE70}, //8299 #HANGUL SYLLABLE SSANGKIYEOK AE RIEUL
+ {0xB1FE, 0xAE78}, //8300 #HANGUL SYLLABLE SSANGKIYEOK AE MIEUM
+ {0xB241, 0xCF6D}, //8301 #HANGUL SYLLABLE KHIEUKH O THIEUTH
+ {0xB242, 0xCF6E}, //8302 #HANGUL SYLLABLE KHIEUKH O PHIEUPH
+ {0xB243, 0xCF6F}, //8303 #HANGUL SYLLABLE KHIEUKH O HIEUH
+ {0xB244, 0xCF72}, //8304 #HANGUL SYLLABLE KHIEUKH WA SSANGKIYEOK
+ {0xB245, 0xCF73}, //8305 #HANGUL SYLLABLE KHIEUKH WA KIYEOKSIOS
+ {0xB246, 0xCF75}, //8306 #HANGUL SYLLABLE KHIEUKH WA NIEUNCIEUC
+ {0xB247, 0xCF76}, //8307 #HANGUL SYLLABLE KHIEUKH WA NIEUNHIEUH
+ {0xB248, 0xCF77}, //8308 #HANGUL SYLLABLE KHIEUKH WA TIKEUT
+ {0xB249, 0xCF79}, //8309 #HANGUL SYLLABLE KHIEUKH WA RIEULKIYEOK
+ {0xB24A, 0xCF7A}, //8310 #HANGUL SYLLABLE KHIEUKH WA RIEULMIEUM
+ {0xB24B, 0xCF7B}, //8311 #HANGUL SYLLABLE KHIEUKH WA RIEULPIEUP
+ {0xB24C, 0xCF7C}, //8312 #HANGUL SYLLABLE KHIEUKH WA RIEULSIOS
+ {0xB24D, 0xCF7D}, //8313 #HANGUL SYLLABLE KHIEUKH WA RIEULTHIEUTH
+ {0xB24E, 0xCF7E}, //8314 #HANGUL SYLLABLE KHIEUKH WA RIEULPHIEUPH
+ {0xB24F, 0xCF7F}, //8315 #HANGUL SYLLABLE KHIEUKH WA RIEULHIEUH
+ {0xB250, 0xCF81}, //8316 #HANGUL SYLLABLE KHIEUKH WA PIEUP
+ {0xB251, 0xCF82}, //8317 #HANGUL SYLLABLE KHIEUKH WA PIEUPSIOS
+ {0xB252, 0xCF83}, //8318 #HANGUL SYLLABLE KHIEUKH WA SIOS
+ {0xB253, 0xCF84}, //8319 #HANGUL SYLLABLE KHIEUKH WA SSANGSIOS
+ {0xB254, 0xCF86}, //8320 #HANGUL SYLLABLE KHIEUKH WA CIEUC
+ {0xB255, 0xCF87}, //8321 #HANGUL SYLLABLE KHIEUKH WA CHIEUCH
+ {0xB256, 0xCF88}, //8322 #HANGUL SYLLABLE KHIEUKH WA KHIEUKH
+ {0xB257, 0xCF89}, //8323 #HANGUL SYLLABLE KHIEUKH WA THIEUTH
+ {0xB258, 0xCF8A}, //8324 #HANGUL SYLLABLE KHIEUKH WA PHIEUPH
+ {0xB259, 0xCF8B}, //8325 #HANGUL SYLLABLE KHIEUKH WA HIEUH
+ {0xB25A, 0xCF8D}, //8326 #HANGUL SYLLABLE KHIEUKH WAE KIYEOK
+ {0xB261, 0xCF8E}, //8327 #HANGUL SYLLABLE KHIEUKH WAE SSANGKIYEOK
+ {0xB262, 0xCF8F}, //8328 #HANGUL SYLLABLE KHIEUKH WAE KIYEOKSIOS
+ {0xB263, 0xCF90}, //8329 #HANGUL SYLLABLE KHIEUKH WAE NIEUN
+ {0xB264, 0xCF91}, //8330 #HANGUL SYLLABLE KHIEUKH WAE NIEUNCIEUC
+ {0xB265, 0xCF92}, //8331 #HANGUL SYLLABLE KHIEUKH WAE NIEUNHIEUH
+ {0xB266, 0xCF93}, //8332 #HANGUL SYLLABLE KHIEUKH WAE TIKEUT
+ {0xB267, 0xCF94}, //8333 #HANGUL SYLLABLE KHIEUKH WAE RIEUL
+ {0xB268, 0xCF95}, //8334 #HANGUL SYLLABLE KHIEUKH WAE RIEULKIYEOK
+ {0xB269, 0xCF96}, //8335 #HANGUL SYLLABLE KHIEUKH WAE RIEULMIEUM
+ {0xB26A, 0xCF97}, //8336 #HANGUL SYLLABLE KHIEUKH WAE RIEULPIEUP
+ {0xB26B, 0xCF98}, //8337 #HANGUL SYLLABLE KHIEUKH WAE RIEULSIOS
+ {0xB26C, 0xCF99}, //8338 #HANGUL SYLLABLE KHIEUKH WAE RIEULTHIEUTH
+ {0xB26D, 0xCF9A}, //8339 #HANGUL SYLLABLE KHIEUKH WAE RIEULPHIEUPH
+ {0xB26E, 0xCF9B}, //8340 #HANGUL SYLLABLE KHIEUKH WAE RIEULHIEUH
+ {0xB26F, 0xCF9C}, //8341 #HANGUL SYLLABLE KHIEUKH WAE MIEUM
+ {0xB270, 0xCF9D}, //8342 #HANGUL SYLLABLE KHIEUKH WAE PIEUP
+ {0xB271, 0xCF9E}, //8343 #HANGUL SYLLABLE KHIEUKH WAE PIEUPSIOS
+ {0xB272, 0xCF9F}, //8344 #HANGUL SYLLABLE KHIEUKH WAE SIOS
+ {0xB273, 0xCFA0}, //8345 #HANGUL SYLLABLE KHIEUKH WAE SSANGSIOS
+ {0xB274, 0xCFA2}, //8346 #HANGUL SYLLABLE KHIEUKH WAE CIEUC
+ {0xB275, 0xCFA3}, //8347 #HANGUL SYLLABLE KHIEUKH WAE CHIEUCH
+ {0xB276, 0xCFA4}, //8348 #HANGUL SYLLABLE KHIEUKH WAE KHIEUKH
+ {0xB277, 0xCFA5}, //8349 #HANGUL SYLLABLE KHIEUKH WAE THIEUTH
+ {0xB278, 0xCFA6}, //8350 #HANGUL SYLLABLE KHIEUKH WAE PHIEUPH
+ {0xB279, 0xCFA7}, //8351 #HANGUL SYLLABLE KHIEUKH WAE HIEUH
+ {0xB27A, 0xCFA9}, //8352 #HANGUL SYLLABLE KHIEUKH OE KIYEOK
+ {0xB281, 0xCFAA}, //8353 #HANGUL SYLLABLE KHIEUKH OE SSANGKIYEOK
+ {0xB282, 0xCFAB}, //8354 #HANGUL SYLLABLE KHIEUKH OE KIYEOKSIOS
+ {0xB283, 0xCFAC}, //8355 #HANGUL SYLLABLE KHIEUKH OE NIEUN
+ {0xB284, 0xCFAD}, //8356 #HANGUL SYLLABLE KHIEUKH OE NIEUNCIEUC
+ {0xB285, 0xCFAE}, //8357 #HANGUL SYLLABLE KHIEUKH OE NIEUNHIEUH
+ {0xB286, 0xCFAF}, //8358 #HANGUL SYLLABLE KHIEUKH OE TIKEUT
+ {0xB287, 0xCFB1}, //8359 #HANGUL SYLLABLE KHIEUKH OE RIEULKIYEOK
+ {0xB288, 0xCFB2}, //8360 #HANGUL SYLLABLE KHIEUKH OE RIEULMIEUM
+ {0xB289, 0xCFB3}, //8361 #HANGUL SYLLABLE KHIEUKH OE RIEULPIEUP
+ {0xB28A, 0xCFB4}, //8362 #HANGUL SYLLABLE KHIEUKH OE RIEULSIOS
+ {0xB28B, 0xCFB5}, //8363 #HANGUL SYLLABLE KHIEUKH OE RIEULTHIEUTH
+ {0xB28C, 0xCFB6}, //8364 #HANGUL SYLLABLE KHIEUKH OE RIEULPHIEUPH
+ {0xB28D, 0xCFB7}, //8365 #HANGUL SYLLABLE KHIEUKH OE RIEULHIEUH
+ {0xB28E, 0xCFB8}, //8366 #HANGUL SYLLABLE KHIEUKH OE MIEUM
+ {0xB28F, 0xCFB9}, //8367 #HANGUL SYLLABLE KHIEUKH OE PIEUP
+ {0xB290, 0xCFBA}, //8368 #HANGUL SYLLABLE KHIEUKH OE PIEUPSIOS
+ {0xB291, 0xCFBB}, //8369 #HANGUL SYLLABLE KHIEUKH OE SIOS
+ {0xB292, 0xCFBC}, //8370 #HANGUL SYLLABLE KHIEUKH OE SSANGSIOS
+ {0xB293, 0xCFBD}, //8371 #HANGUL SYLLABLE KHIEUKH OE IEUNG
+ {0xB294, 0xCFBE}, //8372 #HANGUL SYLLABLE KHIEUKH OE CIEUC
+ {0xB295, 0xCFBF}, //8373 #HANGUL SYLLABLE KHIEUKH OE CHIEUCH
+ {0xB296, 0xCFC0}, //8374 #HANGUL SYLLABLE KHIEUKH OE KHIEUKH
+ {0xB297, 0xCFC1}, //8375 #HANGUL SYLLABLE KHIEUKH OE THIEUTH
+ {0xB298, 0xCFC2}, //8376 #HANGUL SYLLABLE KHIEUKH OE PHIEUPH
+ {0xB299, 0xCFC3}, //8377 #HANGUL SYLLABLE KHIEUKH OE HIEUH
+ {0xB29A, 0xCFC5}, //8378 #HANGUL SYLLABLE KHIEUKH YO KIYEOK
+ {0xB29B, 0xCFC6}, //8379 #HANGUL SYLLABLE KHIEUKH YO SSANGKIYEOK
+ {0xB29C, 0xCFC7}, //8380 #HANGUL SYLLABLE KHIEUKH YO KIYEOKSIOS
+ {0xB29D, 0xCFC8}, //8381 #HANGUL SYLLABLE KHIEUKH YO NIEUN
+ {0xB29E, 0xCFC9}, //8382 #HANGUL SYLLABLE KHIEUKH YO NIEUNCIEUC
+ {0xB29F, 0xCFCA}, //8383 #HANGUL SYLLABLE KHIEUKH YO NIEUNHIEUH
+ {0xB2A0, 0xCFCB}, //8384 #HANGUL SYLLABLE KHIEUKH YO TIKEUT
+ {0xB2A1, 0xAE79}, //8385 #HANGUL SYLLABLE SSANGKIYEOK AE PIEUP
+ {0xB2A2, 0xAE7B}, //8386 #HANGUL SYLLABLE SSANGKIYEOK AE SIOS
+ {0xB2A3, 0xAE7C}, //8387 #HANGUL SYLLABLE SSANGKIYEOK AE SSANGSIOS
+ {0xB2A4, 0xAE7D}, //8388 #HANGUL SYLLABLE SSANGKIYEOK AE IEUNG
+ {0xB2A5, 0xAE84}, //8389 #HANGUL SYLLABLE SSANGKIYEOK YA
+ {0xB2A6, 0xAE85}, //8390 #HANGUL SYLLABLE SSANGKIYEOK YA KIYEOK
+ {0xB2A7, 0xAE8C}, //8391 #HANGUL SYLLABLE SSANGKIYEOK YA RIEUL
+ {0xB2A8, 0xAEBC}, //8392 #HANGUL SYLLABLE SSANGKIYEOK EO
+ {0xB2A9, 0xAEBD}, //8393 #HANGUL SYLLABLE SSANGKIYEOK EO KIYEOK
+ {0xB2AA, 0xAEBE}, //8394 #HANGUL SYLLABLE SSANGKIYEOK EO SSANGKIYEOK
+ {0xB2AB, 0xAEC0}, //8395 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUN
+ {0xB2AC, 0xAEC4}, //8396 #HANGUL SYLLABLE SSANGKIYEOK EO RIEUL
+ {0xB2AD, 0xAECC}, //8397 #HANGUL SYLLABLE SSANGKIYEOK EO MIEUM
+ {0xB2AE, 0xAECD}, //8398 #HANGUL SYLLABLE SSANGKIYEOK EO PIEUP
+ {0xB2AF, 0xAECF}, //8399 #HANGUL SYLLABLE SSANGKIYEOK EO SIOS
+ {0xB2B0, 0xAED0}, //8400 #HANGUL SYLLABLE SSANGKIYEOK EO SSANGSIOS
+ {0xB2B1, 0xAED1}, //8401 #HANGUL SYLLABLE SSANGKIYEOK EO IEUNG
+ {0xB2B2, 0xAED8}, //8402 #HANGUL SYLLABLE SSANGKIYEOK E
+ {0xB2B3, 0xAED9}, //8403 #HANGUL SYLLABLE SSANGKIYEOK E KIYEOK
+ {0xB2B4, 0xAEDC}, //8404 #HANGUL SYLLABLE SSANGKIYEOK E NIEUN
+ {0xB2B5, 0xAEE8}, //8405 #HANGUL SYLLABLE SSANGKIYEOK E MIEUM
+ {0xB2B6, 0xAEEB}, //8406 #HANGUL SYLLABLE SSANGKIYEOK E SIOS
+ {0xB2B7, 0xAEED}, //8407 #HANGUL SYLLABLE SSANGKIYEOK E IEUNG
+ {0xB2B8, 0xAEF4}, //8408 #HANGUL SYLLABLE SSANGKIYEOK YEO
+ {0xB2B9, 0xAEF8}, //8409 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUN
+ {0xB2BA, 0xAEFC}, //8410 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEUL
+ {0xB2BB, 0xAF07}, //8411 #HANGUL SYLLABLE SSANGKIYEOK YEO SIOS
+ {0xB2BC, 0xAF08}, //8412 #HANGUL SYLLABLE SSANGKIYEOK YEO SSANGSIOS
+ {0xB2BD, 0xAF0D}, //8413 #HANGUL SYLLABLE SSANGKIYEOK YEO THIEUTH
+ {0xB2BE, 0xAF10}, //8414 #HANGUL SYLLABLE SSANGKIYEOK YE
+ {0xB2BF, 0xAF2C}, //8415 #HANGUL SYLLABLE SSANGKIYEOK O
+ {0xB2C0, 0xAF2D}, //8416 #HANGUL SYLLABLE SSANGKIYEOK O KIYEOK
+ {0xB2C1, 0xAF30}, //8417 #HANGUL SYLLABLE SSANGKIYEOK O NIEUN
+ {0xB2C2, 0xAF32}, //8418 #HANGUL SYLLABLE SSANGKIYEOK O NIEUNHIEUH
+ {0xB2C3, 0xAF34}, //8419 #HANGUL SYLLABLE SSANGKIYEOK O RIEUL
+ {0xB2C4, 0xAF3C}, //8420 #HANGUL SYLLABLE SSANGKIYEOK O MIEUM
+ {0xB2C5, 0xAF3D}, //8421 #HANGUL SYLLABLE SSANGKIYEOK O PIEUP
+ {0xB2C6, 0xAF3F}, //8422 #HANGUL SYLLABLE SSANGKIYEOK O SIOS
+ {0xB2C7, 0xAF41}, //8423 #HANGUL SYLLABLE SSANGKIYEOK O IEUNG
+ {0xB2C8, 0xAF42}, //8424 #HANGUL SYLLABLE SSANGKIYEOK O CIEUC
+ {0xB2C9, 0xAF43}, //8425 #HANGUL SYLLABLE SSANGKIYEOK O CHIEUCH
+ {0xB2CA, 0xAF48}, //8426 #HANGUL SYLLABLE SSANGKIYEOK WA
+ {0xB2CB, 0xAF49}, //8427 #HANGUL SYLLABLE SSANGKIYEOK WA KIYEOK
+ {0xB2CC, 0xAF50}, //8428 #HANGUL SYLLABLE SSANGKIYEOK WA RIEUL
+ {0xB2CD, 0xAF5C}, //8429 #HANGUL SYLLABLE SSANGKIYEOK WA SSANGSIOS
+ {0xB2CE, 0xAF5D}, //8430 #HANGUL SYLLABLE SSANGKIYEOK WA IEUNG
+ {0xB2CF, 0xAF64}, //8431 #HANGUL SYLLABLE SSANGKIYEOK WAE
+ {0xB2D0, 0xAF65}, //8432 #HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOK
+ {0xB2D1, 0xAF79}, //8433 #HANGUL SYLLABLE SSANGKIYEOK WAE IEUNG
+ {0xB2D2, 0xAF80}, //8434 #HANGUL SYLLABLE SSANGKIYEOK OE
+ {0xB2D3, 0xAF84}, //8435 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUN
+ {0xB2D4, 0xAF88}, //8436 #HANGUL SYLLABLE SSANGKIYEOK OE RIEUL
+ {0xB2D5, 0xAF90}, //8437 #HANGUL SYLLABLE SSANGKIYEOK OE MIEUM
+ {0xB2D6, 0xAF91}, //8438 #HANGUL SYLLABLE SSANGKIYEOK OE PIEUP
+ {0xB2D7, 0xAF95}, //8439 #HANGUL SYLLABLE SSANGKIYEOK OE IEUNG
+ {0xB2D8, 0xAF9C}, //8440 #HANGUL SYLLABLE SSANGKIYEOK YO
+ {0xB2D9, 0xAFB8}, //8441 #HANGUL SYLLABLE SSANGKIYEOK U
+ {0xB2DA, 0xAFB9}, //8442 #HANGUL SYLLABLE SSANGKIYEOK U KIYEOK
+ {0xB2DB, 0xAFBC}, //8443 #HANGUL SYLLABLE SSANGKIYEOK U NIEUN
+ {0xB2DC, 0xAFC0}, //8444 #HANGUL SYLLABLE SSANGKIYEOK U RIEUL
+ {0xB2DD, 0xAFC7}, //8445 #HANGUL SYLLABLE SSANGKIYEOK U RIEULHIEUH
+ {0xB2DE, 0xAFC8}, //8446 #HANGUL SYLLABLE SSANGKIYEOK U MIEUM
+ {0xB2DF, 0xAFC9}, //8447 #HANGUL SYLLABLE SSANGKIYEOK U PIEUP
+ {0xB2E0, 0xAFCB}, //8448 #HANGUL SYLLABLE SSANGKIYEOK U SIOS
+ {0xB2E1, 0xAFCD}, //8449 #HANGUL SYLLABLE SSANGKIYEOK U IEUNG
+ {0xB2E2, 0xAFCE}, //8450 #HANGUL SYLLABLE SSANGKIYEOK U CIEUC
+ {0xB2E3, 0xAFD4}, //8451 #HANGUL SYLLABLE SSANGKIYEOK WEO
+ {0xB2E4, 0xAFDC}, //8452 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEUL
+ {0xB2E5, 0xAFE8}, //8453 #HANGUL SYLLABLE SSANGKIYEOK WEO SSANGSIOS
+ {0xB2E6, 0xAFE9}, //8454 #HANGUL SYLLABLE SSANGKIYEOK WEO IEUNG
+ {0xB2E7, 0xAFF0}, //8455 #HANGUL SYLLABLE SSANGKIYEOK WE
+ {0xB2E8, 0xAFF1}, //8456 #HANGUL SYLLABLE SSANGKIYEOK WE KIYEOK
+ {0xB2E9, 0xAFF4}, //8457 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUN
+ {0xB2EA, 0xAFF8}, //8458 #HANGUL SYLLABLE SSANGKIYEOK WE RIEUL
+ {0xB2EB, 0xB000}, //8459 #HANGUL SYLLABLE SSANGKIYEOK WE MIEUM
+ {0xB2EC, 0xB001}, //8460 #HANGUL SYLLABLE SSANGKIYEOK WE PIEUP
+ {0xB2ED, 0xB004}, //8461 #HANGUL SYLLABLE SSANGKIYEOK WE SSANGSIOS
+ {0xB2EE, 0xB00C}, //8462 #HANGUL SYLLABLE SSANGKIYEOK WI
+ {0xB2EF, 0xB010}, //8463 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUN
+ {0xB2F0, 0xB014}, //8464 #HANGUL SYLLABLE SSANGKIYEOK WI RIEUL
+ {0xB2F1, 0xB01C}, //8465 #HANGUL SYLLABLE SSANGKIYEOK WI MIEUM
+ {0xB2F2, 0xB01D}, //8466 #HANGUL SYLLABLE SSANGKIYEOK WI PIEUP
+ {0xB2F3, 0xB028}, //8467 #HANGUL SYLLABLE SSANGKIYEOK YU
+ {0xB2F4, 0xB044}, //8468 #HANGUL SYLLABLE SSANGKIYEOK EU
+ {0xB2F5, 0xB045}, //8469 #HANGUL SYLLABLE SSANGKIYEOK EU KIYEOK
+ {0xB2F6, 0xB048}, //8470 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUN
+ {0xB2F7, 0xB04A}, //8471 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUNHIEUH
+ {0xB2F8, 0xB04C}, //8472 #HANGUL SYLLABLE SSANGKIYEOK EU RIEUL
+ {0xB2F9, 0xB04E}, //8473 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULMIEUM
+ {0xB2FA, 0xB053}, //8474 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULHIEUH
+ {0xB2FB, 0xB054}, //8475 #HANGUL SYLLABLE SSANGKIYEOK EU MIEUM
+ {0xB2FC, 0xB055}, //8476 #HANGUL SYLLABLE SSANGKIYEOK EU PIEUP
+ {0xB2FD, 0xB057}, //8477 #HANGUL SYLLABLE SSANGKIYEOK EU SIOS
+ {0xB2FE, 0xB059}, //8478 #HANGUL SYLLABLE SSANGKIYEOK EU IEUNG
+ {0xB341, 0xCFCC}, //8479 #HANGUL SYLLABLE KHIEUKH YO RIEUL
+ {0xB342, 0xCFCD}, //8480 #HANGUL SYLLABLE KHIEUKH YO RIEULKIYEOK
+ {0xB343, 0xCFCE}, //8481 #HANGUL SYLLABLE KHIEUKH YO RIEULMIEUM
+ {0xB344, 0xCFCF}, //8482 #HANGUL SYLLABLE KHIEUKH YO RIEULPIEUP
+ {0xB345, 0xCFD0}, //8483 #HANGUL SYLLABLE KHIEUKH YO RIEULSIOS
+ {0xB346, 0xCFD1}, //8484 #HANGUL SYLLABLE KHIEUKH YO RIEULTHIEUTH
+ {0xB347, 0xCFD2}, //8485 #HANGUL SYLLABLE KHIEUKH YO RIEULPHIEUPH
+ {0xB348, 0xCFD3}, //8486 #HANGUL SYLLABLE KHIEUKH YO RIEULHIEUH
+ {0xB349, 0xCFD4}, //8487 #HANGUL SYLLABLE KHIEUKH YO MIEUM
+ {0xB34A, 0xCFD5}, //8488 #HANGUL SYLLABLE KHIEUKH YO PIEUP
+ {0xB34B, 0xCFD6}, //8489 #HANGUL SYLLABLE KHIEUKH YO PIEUPSIOS
+ {0xB34C, 0xCFD7}, //8490 #HANGUL SYLLABLE KHIEUKH YO SIOS
+ {0xB34D, 0xCFD8}, //8491 #HANGUL SYLLABLE KHIEUKH YO SSANGSIOS
+ {0xB34E, 0xCFD9}, //8492 #HANGUL SYLLABLE KHIEUKH YO IEUNG
+ {0xB34F, 0xCFDA}, //8493 #HANGUL SYLLABLE KHIEUKH YO CIEUC
+ {0xB350, 0xCFDB}, //8494 #HANGUL SYLLABLE KHIEUKH YO CHIEUCH
+ {0xB351, 0xCFDC}, //8495 #HANGUL SYLLABLE KHIEUKH YO KHIEUKH
+ {0xB352, 0xCFDD}, //8496 #HANGUL SYLLABLE KHIEUKH YO THIEUTH
+ {0xB353, 0xCFDE}, //8497 #HANGUL SYLLABLE KHIEUKH YO PHIEUPH
+ {0xB354, 0xCFDF}, //8498 #HANGUL SYLLABLE KHIEUKH YO HIEUH
+ {0xB355, 0xCFE2}, //8499 #HANGUL SYLLABLE KHIEUKH U SSANGKIYEOK
+ {0xB356, 0xCFE3}, //8500 #HANGUL SYLLABLE KHIEUKH U KIYEOKSIOS
+ {0xB357, 0xCFE5}, //8501 #HANGUL SYLLABLE KHIEUKH U NIEUNCIEUC
+ {0xB358, 0xCFE6}, //8502 #HANGUL SYLLABLE KHIEUKH U NIEUNHIEUH
+ {0xB359, 0xCFE7}, //8503 #HANGUL SYLLABLE KHIEUKH U TIKEUT
+ {0xB35A, 0xCFE9}, //8504 #HANGUL SYLLABLE KHIEUKH U RIEULKIYEOK
+ {0xB361, 0xCFEA}, //8505 #HANGUL SYLLABLE KHIEUKH U RIEULMIEUM
+ {0xB362, 0xCFEB}, //8506 #HANGUL SYLLABLE KHIEUKH U RIEULPIEUP
+ {0xB363, 0xCFEC}, //8507 #HANGUL SYLLABLE KHIEUKH U RIEULSIOS
+ {0xB364, 0xCFED}, //8508 #HANGUL SYLLABLE KHIEUKH U RIEULTHIEUTH
+ {0xB365, 0xCFEE}, //8509 #HANGUL SYLLABLE KHIEUKH U RIEULPHIEUPH
+ {0xB366, 0xCFEF}, //8510 #HANGUL SYLLABLE KHIEUKH U RIEULHIEUH
+ {0xB367, 0xCFF2}, //8511 #HANGUL SYLLABLE KHIEUKH U PIEUPSIOS
+ {0xB368, 0xCFF4}, //8512 #HANGUL SYLLABLE KHIEUKH U SSANGSIOS
+ {0xB369, 0xCFF6}, //8513 #HANGUL SYLLABLE KHIEUKH U CIEUC
+ {0xB36A, 0xCFF7}, //8514 #HANGUL SYLLABLE KHIEUKH U CHIEUCH
+ {0xB36B, 0xCFF8}, //8515 #HANGUL SYLLABLE KHIEUKH U KHIEUKH
+ {0xB36C, 0xCFF9}, //8516 #HANGUL SYLLABLE KHIEUKH U THIEUTH
+ {0xB36D, 0xCFFA}, //8517 #HANGUL SYLLABLE KHIEUKH U PHIEUPH
+ {0xB36E, 0xCFFB}, //8518 #HANGUL SYLLABLE KHIEUKH U HIEUH
+ {0xB36F, 0xCFFD}, //8519 #HANGUL SYLLABLE KHIEUKH WEO KIYEOK
+ {0xB370, 0xCFFE}, //8520 #HANGUL SYLLABLE KHIEUKH WEO SSANGKIYEOK
+ {0xB371, 0xCFFF}, //8521 #HANGUL SYLLABLE KHIEUKH WEO KIYEOKSIOS
+ {0xB372, 0xD001}, //8522 #HANGUL SYLLABLE KHIEUKH WEO NIEUNCIEUC
+ {0xB373, 0xD002}, //8523 #HANGUL SYLLABLE KHIEUKH WEO NIEUNHIEUH
+ {0xB374, 0xD003}, //8524 #HANGUL SYLLABLE KHIEUKH WEO TIKEUT
+ {0xB375, 0xD005}, //8525 #HANGUL SYLLABLE KHIEUKH WEO RIEULKIYEOK
+ {0xB376, 0xD006}, //8526 #HANGUL SYLLABLE KHIEUKH WEO RIEULMIEUM
+ {0xB377, 0xD007}, //8527 #HANGUL SYLLABLE KHIEUKH WEO RIEULPIEUP
+ {0xB378, 0xD008}, //8528 #HANGUL SYLLABLE KHIEUKH WEO RIEULSIOS
+ {0xB379, 0xD009}, //8529 #HANGUL SYLLABLE KHIEUKH WEO RIEULTHIEUTH
+ {0xB37A, 0xD00A}, //8530 #HANGUL SYLLABLE KHIEUKH WEO RIEULPHIEUPH
+ {0xB381, 0xD00B}, //8531 #HANGUL SYLLABLE KHIEUKH WEO RIEULHIEUH
+ {0xB382, 0xD00C}, //8532 #HANGUL SYLLABLE KHIEUKH WEO MIEUM
+ {0xB383, 0xD00D}, //8533 #HANGUL SYLLABLE KHIEUKH WEO PIEUP
+ {0xB384, 0xD00E}, //8534 #HANGUL SYLLABLE KHIEUKH WEO PIEUPSIOS
+ {0xB385, 0xD00F}, //8535 #HANGUL SYLLABLE KHIEUKH WEO SIOS
+ {0xB386, 0xD010}, //8536 #HANGUL SYLLABLE KHIEUKH WEO SSANGSIOS
+ {0xB387, 0xD012}, //8537 #HANGUL SYLLABLE KHIEUKH WEO CIEUC
+ {0xB388, 0xD013}, //8538 #HANGUL SYLLABLE KHIEUKH WEO CHIEUCH
+ {0xB389, 0xD014}, //8539 #HANGUL SYLLABLE KHIEUKH WEO KHIEUKH
+ {0xB38A, 0xD015}, //8540 #HANGUL SYLLABLE KHIEUKH WEO THIEUTH
+ {0xB38B, 0xD016}, //8541 #HANGUL SYLLABLE KHIEUKH WEO PHIEUPH
+ {0xB38C, 0xD017}, //8542 #HANGUL SYLLABLE KHIEUKH WEO HIEUH
+ {0xB38D, 0xD019}, //8543 #HANGUL SYLLABLE KHIEUKH WE KIYEOK
+ {0xB38E, 0xD01A}, //8544 #HANGUL SYLLABLE KHIEUKH WE SSANGKIYEOK
+ {0xB38F, 0xD01B}, //8545 #HANGUL SYLLABLE KHIEUKH WE KIYEOKSIOS
+ {0xB390, 0xD01C}, //8546 #HANGUL SYLLABLE KHIEUKH WE NIEUN
+ {0xB391, 0xD01D}, //8547 #HANGUL SYLLABLE KHIEUKH WE NIEUNCIEUC
+ {0xB392, 0xD01E}, //8548 #HANGUL SYLLABLE KHIEUKH WE NIEUNHIEUH
+ {0xB393, 0xD01F}, //8549 #HANGUL SYLLABLE KHIEUKH WE TIKEUT
+ {0xB394, 0xD020}, //8550 #HANGUL SYLLABLE KHIEUKH WE RIEUL
+ {0xB395, 0xD021}, //8551 #HANGUL SYLLABLE KHIEUKH WE RIEULKIYEOK
+ {0xB396, 0xD022}, //8552 #HANGUL SYLLABLE KHIEUKH WE RIEULMIEUM
+ {0xB397, 0xD023}, //8553 #HANGUL SYLLABLE KHIEUKH WE RIEULPIEUP
+ {0xB398, 0xD024}, //8554 #HANGUL SYLLABLE KHIEUKH WE RIEULSIOS
+ {0xB399, 0xD025}, //8555 #HANGUL SYLLABLE KHIEUKH WE RIEULTHIEUTH
+ {0xB39A, 0xD026}, //8556 #HANGUL SYLLABLE KHIEUKH WE RIEULPHIEUPH
+ {0xB39B, 0xD027}, //8557 #HANGUL SYLLABLE KHIEUKH WE RIEULHIEUH
+ {0xB39C, 0xD028}, //8558 #HANGUL SYLLABLE KHIEUKH WE MIEUM
+ {0xB39D, 0xD029}, //8559 #HANGUL SYLLABLE KHIEUKH WE PIEUP
+ {0xB39E, 0xD02A}, //8560 #HANGUL SYLLABLE KHIEUKH WE PIEUPSIOS
+ {0xB39F, 0xD02B}, //8561 #HANGUL SYLLABLE KHIEUKH WE SIOS
+ {0xB3A0, 0xD02C}, //8562 #HANGUL SYLLABLE KHIEUKH WE SSANGSIOS
+ {0xB3A1, 0xB05D}, //8563 #HANGUL SYLLABLE SSANGKIYEOK EU THIEUTH
+ {0xB3A2, 0xB07C}, //8564 #HANGUL SYLLABLE SSANGKIYEOK I
+ {0xB3A3, 0xB07D}, //8565 #HANGUL SYLLABLE SSANGKIYEOK I KIYEOK
+ {0xB3A4, 0xB080}, //8566 #HANGUL SYLLABLE SSANGKIYEOK I NIEUN
+ {0xB3A5, 0xB084}, //8567 #HANGUL SYLLABLE SSANGKIYEOK I RIEUL
+ {0xB3A6, 0xB08C}, //8568 #HANGUL SYLLABLE SSANGKIYEOK I MIEUM
+ {0xB3A7, 0xB08D}, //8569 #HANGUL SYLLABLE SSANGKIYEOK I PIEUP
+ {0xB3A8, 0xB08F}, //8570 #HANGUL SYLLABLE SSANGKIYEOK I SIOS
+ {0xB3A9, 0xB091}, //8571 #HANGUL SYLLABLE SSANGKIYEOK I IEUNG
+ {0xB3AA, 0xB098}, //8572 #HANGUL SYLLABLE NIEUN A
+ {0xB3AB, 0xB099}, //8573 #HANGUL SYLLABLE NIEUN A KIYEOK
+ {0xB3AC, 0xB09A}, //8574 #HANGUL SYLLABLE NIEUN A SSANGKIYEOK
+ {0xB3AD, 0xB09C}, //8575 #HANGUL SYLLABLE NIEUN A NIEUN
+ {0xB3AE, 0xB09F}, //8576 #HANGUL SYLLABLE NIEUN A TIKEUT
+ {0xB3AF, 0xB0A0}, //8577 #HANGUL SYLLABLE NIEUN A RIEUL
+ {0xB3B0, 0xB0A1}, //8578 #HANGUL SYLLABLE NIEUN A RIEULKIYEOK
+ {0xB3B1, 0xB0A2}, //8579 #HANGUL SYLLABLE NIEUN A RIEULMIEUM
+ {0xB3B2, 0xB0A8}, //8580 #HANGUL SYLLABLE NIEUN A MIEUM
+ {0xB3B3, 0xB0A9}, //8581 #HANGUL SYLLABLE NIEUN A PIEUP
+ {0xB3B4, 0xB0AB}, //8582 #HANGUL SYLLABLE NIEUN A SIOS
+ {0xB3B5, 0xB0AC}, //8583 #HANGUL SYLLABLE NIEUN A SSANGSIOS
+ {0xB3B6, 0xB0AD}, //8584 #HANGUL SYLLABLE NIEUN A IEUNG
+ {0xB3B7, 0xB0AE}, //8585 #HANGUL SYLLABLE NIEUN A CIEUC
+ {0xB3B8, 0xB0AF}, //8586 #HANGUL SYLLABLE NIEUN A CHIEUCH
+ {0xB3B9, 0xB0B1}, //8587 #HANGUL SYLLABLE NIEUN A THIEUTH
+ {0xB3BA, 0xB0B3}, //8588 #HANGUL SYLLABLE NIEUN A HIEUH
+ {0xB3BB, 0xB0B4}, //8589 #HANGUL SYLLABLE NIEUN AE
+ {0xB3BC, 0xB0B5}, //8590 #HANGUL SYLLABLE NIEUN AE KIYEOK
+ {0xB3BD, 0xB0B8}, //8591 #HANGUL SYLLABLE NIEUN AE NIEUN
+ {0xB3BE, 0xB0BC}, //8592 #HANGUL SYLLABLE NIEUN AE RIEUL
+ {0xB3BF, 0xB0C4}, //8593 #HANGUL SYLLABLE NIEUN AE MIEUM
+ {0xB3C0, 0xB0C5}, //8594 #HANGUL SYLLABLE NIEUN AE PIEUP
+ {0xB3C1, 0xB0C7}, //8595 #HANGUL SYLLABLE NIEUN AE SIOS
+ {0xB3C2, 0xB0C8}, //8596 #HANGUL SYLLABLE NIEUN AE SSANGSIOS
+ {0xB3C3, 0xB0C9}, //8597 #HANGUL SYLLABLE NIEUN AE IEUNG
+ {0xB3C4, 0xB0D0}, //8598 #HANGUL SYLLABLE NIEUN YA
+ {0xB3C5, 0xB0D1}, //8599 #HANGUL SYLLABLE NIEUN YA KIYEOK
+ {0xB3C6, 0xB0D4}, //8600 #HANGUL SYLLABLE NIEUN YA NIEUN
+ {0xB3C7, 0xB0D8}, //8601 #HANGUL SYLLABLE NIEUN YA RIEUL
+ {0xB3C8, 0xB0E0}, //8602 #HANGUL SYLLABLE NIEUN YA MIEUM
+ {0xB3C9, 0xB0E5}, //8603 #HANGUL SYLLABLE NIEUN YA IEUNG
+ {0xB3CA, 0xB108}, //8604 #HANGUL SYLLABLE NIEUN EO
+ {0xB3CB, 0xB109}, //8605 #HANGUL SYLLABLE NIEUN EO KIYEOK
+ {0xB3CC, 0xB10B}, //8606 #HANGUL SYLLABLE NIEUN EO KIYEOKSIOS
+ {0xB3CD, 0xB10C}, //8607 #HANGUL SYLLABLE NIEUN EO NIEUN
+ {0xB3CE, 0xB110}, //8608 #HANGUL SYLLABLE NIEUN EO RIEUL
+ {0xB3CF, 0xB112}, //8609 #HANGUL SYLLABLE NIEUN EO RIEULMIEUM
+ {0xB3D0, 0xB113}, //8610 #HANGUL SYLLABLE NIEUN EO RIEULPIEUP
+ {0xB3D1, 0xB118}, //8611 #HANGUL SYLLABLE NIEUN EO MIEUM
+ {0xB3D2, 0xB119}, //8612 #HANGUL SYLLABLE NIEUN EO PIEUP
+ {0xB3D3, 0xB11B}, //8613 #HANGUL SYLLABLE NIEUN EO SIOS
+ {0xB3D4, 0xB11C}, //8614 #HANGUL SYLLABLE NIEUN EO SSANGSIOS
+ {0xB3D5, 0xB11D}, //8615 #HANGUL SYLLABLE NIEUN EO IEUNG
+ {0xB3D6, 0xB123}, //8616 #HANGUL SYLLABLE NIEUN EO HIEUH
+ {0xB3D7, 0xB124}, //8617 #HANGUL SYLLABLE NIEUN E
+ {0xB3D8, 0xB125}, //8618 #HANGUL SYLLABLE NIEUN E KIYEOK
+ {0xB3D9, 0xB128}, //8619 #HANGUL SYLLABLE NIEUN E NIEUN
+ {0xB3DA, 0xB12C}, //8620 #HANGUL SYLLABLE NIEUN E RIEUL
+ {0xB3DB, 0xB134}, //8621 #HANGUL SYLLABLE NIEUN E MIEUM
+ {0xB3DC, 0xB135}, //8622 #HANGUL SYLLABLE NIEUN E PIEUP
+ {0xB3DD, 0xB137}, //8623 #HANGUL SYLLABLE NIEUN E SIOS
+ {0xB3DE, 0xB138}, //8624 #HANGUL SYLLABLE NIEUN E SSANGSIOS
+ {0xB3DF, 0xB139}, //8625 #HANGUL SYLLABLE NIEUN E IEUNG
+ {0xB3E0, 0xB140}, //8626 #HANGUL SYLLABLE NIEUN YEO
+ {0xB3E1, 0xB141}, //8627 #HANGUL SYLLABLE NIEUN YEO KIYEOK
+ {0xB3E2, 0xB144}, //8628 #HANGUL SYLLABLE NIEUN YEO NIEUN
+ {0xB3E3, 0xB148}, //8629 #HANGUL SYLLABLE NIEUN YEO RIEUL
+ {0xB3E4, 0xB150}, //8630 #HANGUL SYLLABLE NIEUN YEO MIEUM
+ {0xB3E5, 0xB151}, //8631 #HANGUL SYLLABLE NIEUN YEO PIEUP
+ {0xB3E6, 0xB154}, //8632 #HANGUL SYLLABLE NIEUN YEO SSANGSIOS
+ {0xB3E7, 0xB155}, //8633 #HANGUL SYLLABLE NIEUN YEO IEUNG
+ {0xB3E8, 0xB158}, //8634 #HANGUL SYLLABLE NIEUN YEO KHIEUKH
+ {0xB3E9, 0xB15C}, //8635 #HANGUL SYLLABLE NIEUN YE
+ {0xB3EA, 0xB160}, //8636 #HANGUL SYLLABLE NIEUN YE NIEUN
+ {0xB3EB, 0xB178}, //8637 #HANGUL SYLLABLE NIEUN O
+ {0xB3EC, 0xB179}, //8638 #HANGUL SYLLABLE NIEUN O KIYEOK
+ {0xB3ED, 0xB17C}, //8639 #HANGUL SYLLABLE NIEUN O NIEUN
+ {0xB3EE, 0xB180}, //8640 #HANGUL SYLLABLE NIEUN O RIEUL
+ {0xB3EF, 0xB182}, //8641 #HANGUL SYLLABLE NIEUN O RIEULMIEUM
+ {0xB3F0, 0xB188}, //8642 #HANGUL SYLLABLE NIEUN O MIEUM
+ {0xB3F1, 0xB189}, //8643 #HANGUL SYLLABLE NIEUN O PIEUP
+ {0xB3F2, 0xB18B}, //8644 #HANGUL SYLLABLE NIEUN O SIOS
+ {0xB3F3, 0xB18D}, //8645 #HANGUL SYLLABLE NIEUN O IEUNG
+ {0xB3F4, 0xB192}, //8646 #HANGUL SYLLABLE NIEUN O PHIEUPH
+ {0xB3F5, 0xB193}, //8647 #HANGUL SYLLABLE NIEUN O HIEUH
+ {0xB3F6, 0xB194}, //8648 #HANGUL SYLLABLE NIEUN WA
+ {0xB3F7, 0xB198}, //8649 #HANGUL SYLLABLE NIEUN WA NIEUN
+ {0xB3F8, 0xB19C}, //8650 #HANGUL SYLLABLE NIEUN WA RIEUL
+ {0xB3F9, 0xB1A8}, //8651 #HANGUL SYLLABLE NIEUN WA SSANGSIOS
+ {0xB3FA, 0xB1CC}, //8652 #HANGUL SYLLABLE NIEUN OE
+ {0xB3FB, 0xB1D0}, //8653 #HANGUL SYLLABLE NIEUN OE NIEUN
+ {0xB3FC, 0xB1D4}, //8654 #HANGUL SYLLABLE NIEUN OE RIEUL
+ {0xB3FD, 0xB1DC}, //8655 #HANGUL SYLLABLE NIEUN OE MIEUM
+ {0xB3FE, 0xB1DD}, //8656 #HANGUL SYLLABLE NIEUN OE PIEUP
+ {0xB441, 0xD02E}, //8657 #HANGUL SYLLABLE KHIEUKH WE CIEUC
+ {0xB442, 0xD02F}, //8658 #HANGUL SYLLABLE KHIEUKH WE CHIEUCH
+ {0xB443, 0xD030}, //8659 #HANGUL SYLLABLE KHIEUKH WE KHIEUKH
+ {0xB444, 0xD031}, //8660 #HANGUL SYLLABLE KHIEUKH WE THIEUTH
+ {0xB445, 0xD032}, //8661 #HANGUL SYLLABLE KHIEUKH WE PHIEUPH
+ {0xB446, 0xD033}, //8662 #HANGUL SYLLABLE KHIEUKH WE HIEUH
+ {0xB447, 0xD036}, //8663 #HANGUL SYLLABLE KHIEUKH WI SSANGKIYEOK
+ {0xB448, 0xD037}, //8664 #HANGUL SYLLABLE KHIEUKH WI KIYEOKSIOS
+ {0xB449, 0xD039}, //8665 #HANGUL SYLLABLE KHIEUKH WI NIEUNCIEUC
+ {0xB44A, 0xD03A}, //8666 #HANGUL SYLLABLE KHIEUKH WI NIEUNHIEUH
+ {0xB44B, 0xD03B}, //8667 #HANGUL SYLLABLE KHIEUKH WI TIKEUT
+ {0xB44C, 0xD03D}, //8668 #HANGUL SYLLABLE KHIEUKH WI RIEULKIYEOK
+ {0xB44D, 0xD03E}, //8669 #HANGUL SYLLABLE KHIEUKH WI RIEULMIEUM
+ {0xB44E, 0xD03F}, //8670 #HANGUL SYLLABLE KHIEUKH WI RIEULPIEUP
+ {0xB44F, 0xD040}, //8671 #HANGUL SYLLABLE KHIEUKH WI RIEULSIOS
+ {0xB450, 0xD041}, //8672 #HANGUL SYLLABLE KHIEUKH WI RIEULTHIEUTH
+ {0xB451, 0xD042}, //8673 #HANGUL SYLLABLE KHIEUKH WI RIEULPHIEUPH
+ {0xB452, 0xD043}, //8674 #HANGUL SYLLABLE KHIEUKH WI RIEULHIEUH
+ {0xB453, 0xD046}, //8675 #HANGUL SYLLABLE KHIEUKH WI PIEUPSIOS
+ {0xB454, 0xD048}, //8676 #HANGUL SYLLABLE KHIEUKH WI SSANGSIOS
+ {0xB455, 0xD04A}, //8677 #HANGUL SYLLABLE KHIEUKH WI CIEUC
+ {0xB456, 0xD04B}, //8678 #HANGUL SYLLABLE KHIEUKH WI CHIEUCH
+ {0xB457, 0xD04C}, //8679 #HANGUL SYLLABLE KHIEUKH WI KHIEUKH
+ {0xB458, 0xD04D}, //8680 #HANGUL SYLLABLE KHIEUKH WI THIEUTH
+ {0xB459, 0xD04E}, //8681 #HANGUL SYLLABLE KHIEUKH WI PHIEUPH
+ {0xB45A, 0xD04F}, //8682 #HANGUL SYLLABLE KHIEUKH WI HIEUH
+ {0xB461, 0xD051}, //8683 #HANGUL SYLLABLE KHIEUKH YU KIYEOK
+ {0xB462, 0xD052}, //8684 #HANGUL SYLLABLE KHIEUKH YU SSANGKIYEOK
+ {0xB463, 0xD053}, //8685 #HANGUL SYLLABLE KHIEUKH YU KIYEOKSIOS
+ {0xB464, 0xD055}, //8686 #HANGUL SYLLABLE KHIEUKH YU NIEUNCIEUC
+ {0xB465, 0xD056}, //8687 #HANGUL SYLLABLE KHIEUKH YU NIEUNHIEUH
+ {0xB466, 0xD057}, //8688 #HANGUL SYLLABLE KHIEUKH YU TIKEUT
+ {0xB467, 0xD059}, //8689 #HANGUL SYLLABLE KHIEUKH YU RIEULKIYEOK
+ {0xB468, 0xD05A}, //8690 #HANGUL SYLLABLE KHIEUKH YU RIEULMIEUM
+ {0xB469, 0xD05B}, //8691 #HANGUL SYLLABLE KHIEUKH YU RIEULPIEUP
+ {0xB46A, 0xD05C}, //8692 #HANGUL SYLLABLE KHIEUKH YU RIEULSIOS
+ {0xB46B, 0xD05D}, //8693 #HANGUL SYLLABLE KHIEUKH YU RIEULTHIEUTH
+ {0xB46C, 0xD05E}, //8694 #HANGUL SYLLABLE KHIEUKH YU RIEULPHIEUPH
+ {0xB46D, 0xD05F}, //8695 #HANGUL SYLLABLE KHIEUKH YU RIEULHIEUH
+ {0xB46E, 0xD061}, //8696 #HANGUL SYLLABLE KHIEUKH YU PIEUP
+ {0xB46F, 0xD062}, //8697 #HANGUL SYLLABLE KHIEUKH YU PIEUPSIOS
+ {0xB470, 0xD063}, //8698 #HANGUL SYLLABLE KHIEUKH YU SIOS
+ {0xB471, 0xD064}, //8699 #HANGUL SYLLABLE KHIEUKH YU SSANGSIOS
+ {0xB472, 0xD065}, //8700 #HANGUL SYLLABLE KHIEUKH YU IEUNG
+ {0xB473, 0xD066}, //8701 #HANGUL SYLLABLE KHIEUKH YU CIEUC
+ {0xB474, 0xD067}, //8702 #HANGUL SYLLABLE KHIEUKH YU CHIEUCH
+ {0xB475, 0xD068}, //8703 #HANGUL SYLLABLE KHIEUKH YU KHIEUKH
+ {0xB476, 0xD069}, //8704 #HANGUL SYLLABLE KHIEUKH YU THIEUTH
+ {0xB477, 0xD06A}, //8705 #HANGUL SYLLABLE KHIEUKH YU PHIEUPH
+ {0xB478, 0xD06B}, //8706 #HANGUL SYLLABLE KHIEUKH YU HIEUH
+ {0xB479, 0xD06E}, //8707 #HANGUL SYLLABLE KHIEUKH EU SSANGKIYEOK
+ {0xB47A, 0xD06F}, //8708 #HANGUL SYLLABLE KHIEUKH EU KIYEOKSIOS
+ {0xB481, 0xD071}, //8709 #HANGUL SYLLABLE KHIEUKH EU NIEUNCIEUC
+ {0xB482, 0xD072}, //8710 #HANGUL SYLLABLE KHIEUKH EU NIEUNHIEUH
+ {0xB483, 0xD073}, //8711 #HANGUL SYLLABLE KHIEUKH EU TIKEUT
+ {0xB484, 0xD075}, //8712 #HANGUL SYLLABLE KHIEUKH EU RIEULKIYEOK
+ {0xB485, 0xD076}, //8713 #HANGUL SYLLABLE KHIEUKH EU RIEULMIEUM
+ {0xB486, 0xD077}, //8714 #HANGUL SYLLABLE KHIEUKH EU RIEULPIEUP
+ {0xB487, 0xD078}, //8715 #HANGUL SYLLABLE KHIEUKH EU RIEULSIOS
+ {0xB488, 0xD079}, //8716 #HANGUL SYLLABLE KHIEUKH EU RIEULTHIEUTH
+ {0xB489, 0xD07A}, //8717 #HANGUL SYLLABLE KHIEUKH EU RIEULPHIEUPH
+ {0xB48A, 0xD07B}, //8718 #HANGUL SYLLABLE KHIEUKH EU RIEULHIEUH
+ {0xB48B, 0xD07E}, //8719 #HANGUL SYLLABLE KHIEUKH EU PIEUPSIOS
+ {0xB48C, 0xD07F}, //8720 #HANGUL SYLLABLE KHIEUKH EU SIOS
+ {0xB48D, 0xD080}, //8721 #HANGUL SYLLABLE KHIEUKH EU SSANGSIOS
+ {0xB48E, 0xD082}, //8722 #HANGUL SYLLABLE KHIEUKH EU CIEUC
+ {0xB48F, 0xD083}, //8723 #HANGUL SYLLABLE KHIEUKH EU CHIEUCH
+ {0xB490, 0xD084}, //8724 #HANGUL SYLLABLE KHIEUKH EU KHIEUKH
+ {0xB491, 0xD085}, //8725 #HANGUL SYLLABLE KHIEUKH EU THIEUTH
+ {0xB492, 0xD086}, //8726 #HANGUL SYLLABLE KHIEUKH EU PHIEUPH
+ {0xB493, 0xD087}, //8727 #HANGUL SYLLABLE KHIEUKH EU HIEUH
+ {0xB494, 0xD088}, //8728 #HANGUL SYLLABLE KHIEUKH YI
+ {0xB495, 0xD089}, //8729 #HANGUL SYLLABLE KHIEUKH YI KIYEOK
+ {0xB496, 0xD08A}, //8730 #HANGUL SYLLABLE KHIEUKH YI SSANGKIYEOK
+ {0xB497, 0xD08B}, //8731 #HANGUL SYLLABLE KHIEUKH YI KIYEOKSIOS
+ {0xB498, 0xD08C}, //8732 #HANGUL SYLLABLE KHIEUKH YI NIEUN
+ {0xB499, 0xD08D}, //8733 #HANGUL SYLLABLE KHIEUKH YI NIEUNCIEUC
+ {0xB49A, 0xD08E}, //8734 #HANGUL SYLLABLE KHIEUKH YI NIEUNHIEUH
+ {0xB49B, 0xD08F}, //8735 #HANGUL SYLLABLE KHIEUKH YI TIKEUT
+ {0xB49C, 0xD090}, //8736 #HANGUL SYLLABLE KHIEUKH YI RIEUL
+ {0xB49D, 0xD091}, //8737 #HANGUL SYLLABLE KHIEUKH YI RIEULKIYEOK
+ {0xB49E, 0xD092}, //8738 #HANGUL SYLLABLE KHIEUKH YI RIEULMIEUM
+ {0xB49F, 0xD093}, //8739 #HANGUL SYLLABLE KHIEUKH YI RIEULPIEUP
+ {0xB4A0, 0xD094}, //8740 #HANGUL SYLLABLE KHIEUKH YI RIEULSIOS
+ {0xB4A1, 0xB1DF}, //8741 #HANGUL SYLLABLE NIEUN OE SIOS
+ {0xB4A2, 0xB1E8}, //8742 #HANGUL SYLLABLE NIEUN YO
+ {0xB4A3, 0xB1E9}, //8743 #HANGUL SYLLABLE NIEUN YO KIYEOK
+ {0xB4A4, 0xB1EC}, //8744 #HANGUL SYLLABLE NIEUN YO NIEUN
+ {0xB4A5, 0xB1F0}, //8745 #HANGUL SYLLABLE NIEUN YO RIEUL
+ {0xB4A6, 0xB1F9}, //8746 #HANGUL SYLLABLE NIEUN YO PIEUP
+ {0xB4A7, 0xB1FB}, //8747 #HANGUL SYLLABLE NIEUN YO SIOS
+ {0xB4A8, 0xB1FD}, //8748 #HANGUL SYLLABLE NIEUN YO IEUNG
+ {0xB4A9, 0xB204}, //8749 #HANGUL SYLLABLE NIEUN U
+ {0xB4AA, 0xB205}, //8750 #HANGUL SYLLABLE NIEUN U KIYEOK
+ {0xB4AB, 0xB208}, //8751 #HANGUL SYLLABLE NIEUN U NIEUN
+ {0xB4AC, 0xB20B}, //8752 #HANGUL SYLLABLE NIEUN U TIKEUT
+ {0xB4AD, 0xB20C}, //8753 #HANGUL SYLLABLE NIEUN U RIEUL
+ {0xB4AE, 0xB214}, //8754 #HANGUL SYLLABLE NIEUN U MIEUM
+ {0xB4AF, 0xB215}, //8755 #HANGUL SYLLABLE NIEUN U PIEUP
+ {0xB4B0, 0xB217}, //8756 #HANGUL SYLLABLE NIEUN U SIOS
+ {0xB4B1, 0xB219}, //8757 #HANGUL SYLLABLE NIEUN U IEUNG
+ {0xB4B2, 0xB220}, //8758 #HANGUL SYLLABLE NIEUN WEO
+ {0xB4B3, 0xB234}, //8759 #HANGUL SYLLABLE NIEUN WEO SSANGSIOS
+ {0xB4B4, 0xB23C}, //8760 #HANGUL SYLLABLE NIEUN WE
+ {0xB4B5, 0xB258}, //8761 #HANGUL SYLLABLE NIEUN WI
+ {0xB4B6, 0xB25C}, //8762 #HANGUL SYLLABLE NIEUN WI NIEUN
+ {0xB4B7, 0xB260}, //8763 #HANGUL SYLLABLE NIEUN WI RIEUL
+ {0xB4B8, 0xB268}, //8764 #HANGUL SYLLABLE NIEUN WI MIEUM
+ {0xB4B9, 0xB269}, //8765 #HANGUL SYLLABLE NIEUN WI PIEUP
+ {0xB4BA, 0xB274}, //8766 #HANGUL SYLLABLE NIEUN YU
+ {0xB4BB, 0xB275}, //8767 #HANGUL SYLLABLE NIEUN YU KIYEOK
+ {0xB4BC, 0xB27C}, //8768 #HANGUL SYLLABLE NIEUN YU RIEUL
+ {0xB4BD, 0xB284}, //8769 #HANGUL SYLLABLE NIEUN YU MIEUM
+ {0xB4BE, 0xB285}, //8770 #HANGUL SYLLABLE NIEUN YU PIEUP
+ {0xB4BF, 0xB289}, //8771 #HANGUL SYLLABLE NIEUN YU IEUNG
+ {0xB4C0, 0xB290}, //8772 #HANGUL SYLLABLE NIEUN EU
+ {0xB4C1, 0xB291}, //8773 #HANGUL SYLLABLE NIEUN EU KIYEOK
+ {0xB4C2, 0xB294}, //8774 #HANGUL SYLLABLE NIEUN EU NIEUN
+ {0xB4C3, 0xB298}, //8775 #HANGUL SYLLABLE NIEUN EU RIEUL
+ {0xB4C4, 0xB299}, //8776 #HANGUL SYLLABLE NIEUN EU RIEULKIYEOK
+ {0xB4C5, 0xB29A}, //8777 #HANGUL SYLLABLE NIEUN EU RIEULMIEUM
+ {0xB4C6, 0xB2A0}, //8778 #HANGUL SYLLABLE NIEUN EU MIEUM
+ {0xB4C7, 0xB2A1}, //8779 #HANGUL SYLLABLE NIEUN EU PIEUP
+ {0xB4C8, 0xB2A3}, //8780 #HANGUL SYLLABLE NIEUN EU SIOS
+ {0xB4C9, 0xB2A5}, //8781 #HANGUL SYLLABLE NIEUN EU IEUNG
+ {0xB4CA, 0xB2A6}, //8782 #HANGUL SYLLABLE NIEUN EU CIEUC
+ {0xB4CB, 0xB2AA}, //8783 #HANGUL SYLLABLE NIEUN EU PHIEUPH
+ {0xB4CC, 0xB2AC}, //8784 #HANGUL SYLLABLE NIEUN YI
+ {0xB4CD, 0xB2B0}, //8785 #HANGUL SYLLABLE NIEUN YI NIEUN
+ {0xB4CE, 0xB2B4}, //8786 #HANGUL SYLLABLE NIEUN YI RIEUL
+ {0xB4CF, 0xB2C8}, //8787 #HANGUL SYLLABLE NIEUN I
+ {0xB4D0, 0xB2C9}, //8788 #HANGUL SYLLABLE NIEUN I KIYEOK
+ {0xB4D1, 0xB2CC}, //8789 #HANGUL SYLLABLE NIEUN I NIEUN
+ {0xB4D2, 0xB2D0}, //8790 #HANGUL SYLLABLE NIEUN I RIEUL
+ {0xB4D3, 0xB2D2}, //8791 #HANGUL SYLLABLE NIEUN I RIEULMIEUM
+ {0xB4D4, 0xB2D8}, //8792 #HANGUL SYLLABLE NIEUN I MIEUM
+ {0xB4D5, 0xB2D9}, //8793 #HANGUL SYLLABLE NIEUN I PIEUP
+ {0xB4D6, 0xB2DB}, //8794 #HANGUL SYLLABLE NIEUN I SIOS
+ {0xB4D7, 0xB2DD}, //8795 #HANGUL SYLLABLE NIEUN I IEUNG
+ {0xB4D8, 0xB2E2}, //8796 #HANGUL SYLLABLE NIEUN I PHIEUPH
+ {0xB4D9, 0xB2E4}, //8797 #HANGUL SYLLABLE TIKEUT A
+ {0xB4DA, 0xB2E5}, //8798 #HANGUL SYLLABLE TIKEUT A KIYEOK
+ {0xB4DB, 0xB2E6}, //8799 #HANGUL SYLLABLE TIKEUT A SSANGKIYEOK
+ {0xB4DC, 0xB2E8}, //8800 #HANGUL SYLLABLE TIKEUT A NIEUN
+ {0xB4DD, 0xB2EB}, //8801 #HANGUL SYLLABLE TIKEUT A TIKEUT
+ {0xB4DE, 0xB2EC}, //8802 #HANGUL SYLLABLE TIKEUT A RIEUL
+ {0xB4DF, 0xB2ED}, //8803 #HANGUL SYLLABLE TIKEUT A RIEULKIYEOK
+ {0xB4E0, 0xB2EE}, //8804 #HANGUL SYLLABLE TIKEUT A RIEULMIEUM
+ {0xB4E1, 0xB2EF}, //8805 #HANGUL SYLLABLE TIKEUT A RIEULPIEUP
+ {0xB4E2, 0xB2F3}, //8806 #HANGUL SYLLABLE TIKEUT A RIEULHIEUH
+ {0xB4E3, 0xB2F4}, //8807 #HANGUL SYLLABLE TIKEUT A MIEUM
+ {0xB4E4, 0xB2F5}, //8808 #HANGUL SYLLABLE TIKEUT A PIEUP
+ {0xB4E5, 0xB2F7}, //8809 #HANGUL SYLLABLE TIKEUT A SIOS
+ {0xB4E6, 0xB2F8}, //8810 #HANGUL SYLLABLE TIKEUT A SSANGSIOS
+ {0xB4E7, 0xB2F9}, //8811 #HANGUL SYLLABLE TIKEUT A IEUNG
+ {0xB4E8, 0xB2FA}, //8812 #HANGUL SYLLABLE TIKEUT A CIEUC
+ {0xB4E9, 0xB2FB}, //8813 #HANGUL SYLLABLE TIKEUT A CHIEUCH
+ {0xB4EA, 0xB2FF}, //8814 #HANGUL SYLLABLE TIKEUT A HIEUH
+ {0xB4EB, 0xB300}, //8815 #HANGUL SYLLABLE TIKEUT AE
+ {0xB4EC, 0xB301}, //8816 #HANGUL SYLLABLE TIKEUT AE KIYEOK
+ {0xB4ED, 0xB304}, //8817 #HANGUL SYLLABLE TIKEUT AE NIEUN
+ {0xB4EE, 0xB308}, //8818 #HANGUL SYLLABLE TIKEUT AE RIEUL
+ {0xB4EF, 0xB310}, //8819 #HANGUL SYLLABLE TIKEUT AE MIEUM
+ {0xB4F0, 0xB311}, //8820 #HANGUL SYLLABLE TIKEUT AE PIEUP
+ {0xB4F1, 0xB313}, //8821 #HANGUL SYLLABLE TIKEUT AE SIOS
+ {0xB4F2, 0xB314}, //8822 #HANGUL SYLLABLE TIKEUT AE SSANGSIOS
+ {0xB4F3, 0xB315}, //8823 #HANGUL SYLLABLE TIKEUT AE IEUNG
+ {0xB4F4, 0xB31C}, //8824 #HANGUL SYLLABLE TIKEUT YA
+ {0xB4F5, 0xB354}, //8825 #HANGUL SYLLABLE TIKEUT EO
+ {0xB4F6, 0xB355}, //8826 #HANGUL SYLLABLE TIKEUT EO KIYEOK
+ {0xB4F7, 0xB356}, //8827 #HANGUL SYLLABLE TIKEUT EO SSANGKIYEOK
+ {0xB4F8, 0xB358}, //8828 #HANGUL SYLLABLE TIKEUT EO NIEUN
+ {0xB4F9, 0xB35B}, //8829 #HANGUL SYLLABLE TIKEUT EO TIKEUT
+ {0xB4FA, 0xB35C}, //8830 #HANGUL SYLLABLE TIKEUT EO RIEUL
+ {0xB4FB, 0xB35E}, //8831 #HANGUL SYLLABLE TIKEUT EO RIEULMIEUM
+ {0xB4FC, 0xB35F}, //8832 #HANGUL SYLLABLE TIKEUT EO RIEULPIEUP
+ {0xB4FD, 0xB364}, //8833 #HANGUL SYLLABLE TIKEUT EO MIEUM
+ {0xB4FE, 0xB365}, //8834 #HANGUL SYLLABLE TIKEUT EO PIEUP
+ {0xB541, 0xD095}, //8835 #HANGUL SYLLABLE KHIEUKH YI RIEULTHIEUTH
+ {0xB542, 0xD096}, //8836 #HANGUL SYLLABLE KHIEUKH YI RIEULPHIEUPH
+ {0xB543, 0xD097}, //8837 #HANGUL SYLLABLE KHIEUKH YI RIEULHIEUH
+ {0xB544, 0xD098}, //8838 #HANGUL SYLLABLE KHIEUKH YI MIEUM
+ {0xB545, 0xD099}, //8839 #HANGUL SYLLABLE KHIEUKH YI PIEUP
+ {0xB546, 0xD09A}, //8840 #HANGUL SYLLABLE KHIEUKH YI PIEUPSIOS
+ {0xB547, 0xD09B}, //8841 #HANGUL SYLLABLE KHIEUKH YI SIOS
+ {0xB548, 0xD09C}, //8842 #HANGUL SYLLABLE KHIEUKH YI SSANGSIOS
+ {0xB549, 0xD09D}, //8843 #HANGUL SYLLABLE KHIEUKH YI IEUNG
+ {0xB54A, 0xD09E}, //8844 #HANGUL SYLLABLE KHIEUKH YI CIEUC
+ {0xB54B, 0xD09F}, //8845 #HANGUL SYLLABLE KHIEUKH YI CHIEUCH
+ {0xB54C, 0xD0A0}, //8846 #HANGUL SYLLABLE KHIEUKH YI KHIEUKH
+ {0xB54D, 0xD0A1}, //8847 #HANGUL SYLLABLE KHIEUKH YI THIEUTH
+ {0xB54E, 0xD0A2}, //8848 #HANGUL SYLLABLE KHIEUKH YI PHIEUPH
+ {0xB54F, 0xD0A3}, //8849 #HANGUL SYLLABLE KHIEUKH YI HIEUH
+ {0xB550, 0xD0A6}, //8850 #HANGUL SYLLABLE KHIEUKH I SSANGKIYEOK
+ {0xB551, 0xD0A7}, //8851 #HANGUL SYLLABLE KHIEUKH I KIYEOKSIOS
+ {0xB552, 0xD0A9}, //8852 #HANGUL SYLLABLE KHIEUKH I NIEUNCIEUC
+ {0xB553, 0xD0AA}, //8853 #HANGUL SYLLABLE KHIEUKH I NIEUNHIEUH
+ {0xB554, 0xD0AB}, //8854 #HANGUL SYLLABLE KHIEUKH I TIKEUT
+ {0xB555, 0xD0AD}, //8855 #HANGUL SYLLABLE KHIEUKH I RIEULKIYEOK
+ {0xB556, 0xD0AE}, //8856 #HANGUL SYLLABLE KHIEUKH I RIEULMIEUM
+ {0xB557, 0xD0AF}, //8857 #HANGUL SYLLABLE KHIEUKH I RIEULPIEUP
+ {0xB558, 0xD0B0}, //8858 #HANGUL SYLLABLE KHIEUKH I RIEULSIOS
+ {0xB559, 0xD0B1}, //8859 #HANGUL SYLLABLE KHIEUKH I RIEULTHIEUTH
+ {0xB55A, 0xD0B2}, //8860 #HANGUL SYLLABLE KHIEUKH I RIEULPHIEUPH
+ {0xB561, 0xD0B3}, //8861 #HANGUL SYLLABLE KHIEUKH I RIEULHIEUH
+ {0xB562, 0xD0B6}, //8862 #HANGUL SYLLABLE KHIEUKH I PIEUPSIOS
+ {0xB563, 0xD0B8}, //8863 #HANGUL SYLLABLE KHIEUKH I SSANGSIOS
+ {0xB564, 0xD0BA}, //8864 #HANGUL SYLLABLE KHIEUKH I CIEUC
+ {0xB565, 0xD0BB}, //8865 #HANGUL SYLLABLE KHIEUKH I CHIEUCH
+ {0xB566, 0xD0BC}, //8866 #HANGUL SYLLABLE KHIEUKH I KHIEUKH
+ {0xB567, 0xD0BD}, //8867 #HANGUL SYLLABLE KHIEUKH I THIEUTH
+ {0xB568, 0xD0BE}, //8868 #HANGUL SYLLABLE KHIEUKH I PHIEUPH
+ {0xB569, 0xD0BF}, //8869 #HANGUL SYLLABLE KHIEUKH I HIEUH
+ {0xB56A, 0xD0C2}, //8870 #HANGUL SYLLABLE THIEUTH A SSANGKIYEOK
+ {0xB56B, 0xD0C3}, //8871 #HANGUL SYLLABLE THIEUTH A KIYEOKSIOS
+ {0xB56C, 0xD0C5}, //8872 #HANGUL SYLLABLE THIEUTH A NIEUNCIEUC
+ {0xB56D, 0xD0C6}, //8873 #HANGUL SYLLABLE THIEUTH A NIEUNHIEUH
+ {0xB56E, 0xD0C7}, //8874 #HANGUL SYLLABLE THIEUTH A TIKEUT
+ {0xB56F, 0xD0CA}, //8875 #HANGUL SYLLABLE THIEUTH A RIEULMIEUM
+ {0xB570, 0xD0CB}, //8876 #HANGUL SYLLABLE THIEUTH A RIEULPIEUP
+ {0xB571, 0xD0CC}, //8877 #HANGUL SYLLABLE THIEUTH A RIEULSIOS
+ {0xB572, 0xD0CD}, //8878 #HANGUL SYLLABLE THIEUTH A RIEULTHIEUTH
+ {0xB573, 0xD0CE}, //8879 #HANGUL SYLLABLE THIEUTH A RIEULPHIEUPH
+ {0xB574, 0xD0CF}, //8880 #HANGUL SYLLABLE THIEUTH A RIEULHIEUH
+ {0xB575, 0xD0D2}, //8881 #HANGUL SYLLABLE THIEUTH A PIEUPSIOS
+ {0xB576, 0xD0D6}, //8882 #HANGUL SYLLABLE THIEUTH A CIEUC
+ {0xB577, 0xD0D7}, //8883 #HANGUL SYLLABLE THIEUTH A CHIEUCH
+ {0xB578, 0xD0D8}, //8884 #HANGUL SYLLABLE THIEUTH A KHIEUKH
+ {0xB579, 0xD0D9}, //8885 #HANGUL SYLLABLE THIEUTH A THIEUTH
+ {0xB57A, 0xD0DA}, //8886 #HANGUL SYLLABLE THIEUTH A PHIEUPH
+ {0xB581, 0xD0DB}, //8887 #HANGUL SYLLABLE THIEUTH A HIEUH
+ {0xB582, 0xD0DE}, //8888 #HANGUL SYLLABLE THIEUTH AE SSANGKIYEOK
+ {0xB583, 0xD0DF}, //8889 #HANGUL SYLLABLE THIEUTH AE KIYEOKSIOS
+ {0xB584, 0xD0E1}, //8890 #HANGUL SYLLABLE THIEUTH AE NIEUNCIEUC
+ {0xB585, 0xD0E2}, //8891 #HANGUL SYLLABLE THIEUTH AE NIEUNHIEUH
+ {0xB586, 0xD0E3}, //8892 #HANGUL SYLLABLE THIEUTH AE TIKEUT
+ {0xB587, 0xD0E5}, //8893 #HANGUL SYLLABLE THIEUTH AE RIEULKIYEOK
+ {0xB588, 0xD0E6}, //8894 #HANGUL SYLLABLE THIEUTH AE RIEULMIEUM
+ {0xB589, 0xD0E7}, //8895 #HANGUL SYLLABLE THIEUTH AE RIEULPIEUP
+ {0xB58A, 0xD0E8}, //8896 #HANGUL SYLLABLE THIEUTH AE RIEULSIOS
+ {0xB58B, 0xD0E9}, //8897 #HANGUL SYLLABLE THIEUTH AE RIEULTHIEUTH
+ {0xB58C, 0xD0EA}, //8898 #HANGUL SYLLABLE THIEUTH AE RIEULPHIEUPH
+ {0xB58D, 0xD0EB}, //8899 #HANGUL SYLLABLE THIEUTH AE RIEULHIEUH
+ {0xB58E, 0xD0EE}, //8900 #HANGUL SYLLABLE THIEUTH AE PIEUPSIOS
+ {0xB58F, 0xD0F2}, //8901 #HANGUL SYLLABLE THIEUTH AE CIEUC
+ {0xB590, 0xD0F3}, //8902 #HANGUL SYLLABLE THIEUTH AE CHIEUCH
+ {0xB591, 0xD0F4}, //8903 #HANGUL SYLLABLE THIEUTH AE KHIEUKH
+ {0xB592, 0xD0F5}, //8904 #HANGUL SYLLABLE THIEUTH AE THIEUTH
+ {0xB593, 0xD0F6}, //8905 #HANGUL SYLLABLE THIEUTH AE PHIEUPH
+ {0xB594, 0xD0F7}, //8906 #HANGUL SYLLABLE THIEUTH AE HIEUH
+ {0xB595, 0xD0F9}, //8907 #HANGUL SYLLABLE THIEUTH YA KIYEOK
+ {0xB596, 0xD0FA}, //8908 #HANGUL SYLLABLE THIEUTH YA SSANGKIYEOK
+ {0xB597, 0xD0FB}, //8909 #HANGUL SYLLABLE THIEUTH YA KIYEOKSIOS
+ {0xB598, 0xD0FC}, //8910 #HANGUL SYLLABLE THIEUTH YA NIEUN
+ {0xB599, 0xD0FD}, //8911 #HANGUL SYLLABLE THIEUTH YA NIEUNCIEUC
+ {0xB59A, 0xD0FE}, //8912 #HANGUL SYLLABLE THIEUTH YA NIEUNHIEUH
+ {0xB59B, 0xD0FF}, //8913 #HANGUL SYLLABLE THIEUTH YA TIKEUT
+ {0xB59C, 0xD100}, //8914 #HANGUL SYLLABLE THIEUTH YA RIEUL
+ {0xB59D, 0xD101}, //8915 #HANGUL SYLLABLE THIEUTH YA RIEULKIYEOK
+ {0xB59E, 0xD102}, //8916 #HANGUL SYLLABLE THIEUTH YA RIEULMIEUM
+ {0xB59F, 0xD103}, //8917 #HANGUL SYLLABLE THIEUTH YA RIEULPIEUP
+ {0xB5A0, 0xD104}, //8918 #HANGUL SYLLABLE THIEUTH YA RIEULSIOS
+ {0xB5A1, 0xB367}, //8919 #HANGUL SYLLABLE TIKEUT EO SIOS
+ {0xB5A2, 0xB369}, //8920 #HANGUL SYLLABLE TIKEUT EO IEUNG
+ {0xB5A3, 0xB36B}, //8921 #HANGUL SYLLABLE TIKEUT EO CHIEUCH
+ {0xB5A4, 0xB36E}, //8922 #HANGUL SYLLABLE TIKEUT EO PHIEUPH
+ {0xB5A5, 0xB370}, //8923 #HANGUL SYLLABLE TIKEUT E
+ {0xB5A6, 0xB371}, //8924 #HANGUL SYLLABLE TIKEUT E KIYEOK
+ {0xB5A7, 0xB374}, //8925 #HANGUL SYLLABLE TIKEUT E NIEUN
+ {0xB5A8, 0xB378}, //8926 #HANGUL SYLLABLE TIKEUT E RIEUL
+ {0xB5A9, 0xB380}, //8927 #HANGUL SYLLABLE TIKEUT E MIEUM
+ {0xB5AA, 0xB381}, //8928 #HANGUL SYLLABLE TIKEUT E PIEUP
+ {0xB5AB, 0xB383}, //8929 #HANGUL SYLLABLE TIKEUT E SIOS
+ {0xB5AC, 0xB384}, //8930 #HANGUL SYLLABLE TIKEUT E SSANGSIOS
+ {0xB5AD, 0xB385}, //8931 #HANGUL SYLLABLE TIKEUT E IEUNG
+ {0xB5AE, 0xB38C}, //8932 #HANGUL SYLLABLE TIKEUT YEO
+ {0xB5AF, 0xB390}, //8933 #HANGUL SYLLABLE TIKEUT YEO NIEUN
+ {0xB5B0, 0xB394}, //8934 #HANGUL SYLLABLE TIKEUT YEO RIEUL
+ {0xB5B1, 0xB3A0}, //8935 #HANGUL SYLLABLE TIKEUT YEO SSANGSIOS
+ {0xB5B2, 0xB3A1}, //8936 #HANGUL SYLLABLE TIKEUT YEO IEUNG
+ {0xB5B3, 0xB3A8}, //8937 #HANGUL SYLLABLE TIKEUT YE
+ {0xB5B4, 0xB3AC}, //8938 #HANGUL SYLLABLE TIKEUT YE NIEUN
+ {0xB5B5, 0xB3C4}, //8939 #HANGUL SYLLABLE TIKEUT O
+ {0xB5B6, 0xB3C5}, //8940 #HANGUL SYLLABLE TIKEUT O KIYEOK
+ {0xB5B7, 0xB3C8}, //8941 #HANGUL SYLLABLE TIKEUT O NIEUN
+ {0xB5B8, 0xB3CB}, //8942 #HANGUL SYLLABLE TIKEUT O TIKEUT
+ {0xB5B9, 0xB3CC}, //8943 #HANGUL SYLLABLE TIKEUT O RIEUL
+ {0xB5BA, 0xB3CE}, //8944 #HANGUL SYLLABLE TIKEUT O RIEULMIEUM
+ {0xB5BB, 0xB3D0}, //8945 #HANGUL SYLLABLE TIKEUT O RIEULSIOS
+ {0xB5BC, 0xB3D4}, //8946 #HANGUL SYLLABLE TIKEUT O MIEUM
+ {0xB5BD, 0xB3D5}, //8947 #HANGUL SYLLABLE TIKEUT O PIEUP
+ {0xB5BE, 0xB3D7}, //8948 #HANGUL SYLLABLE TIKEUT O SIOS
+ {0xB5BF, 0xB3D9}, //8949 #HANGUL SYLLABLE TIKEUT O IEUNG
+ {0xB5C0, 0xB3DB}, //8950 #HANGUL SYLLABLE TIKEUT O CHIEUCH
+ {0xB5C1, 0xB3DD}, //8951 #HANGUL SYLLABLE TIKEUT O THIEUTH
+ {0xB5C2, 0xB3E0}, //8952 #HANGUL SYLLABLE TIKEUT WA
+ {0xB5C3, 0xB3E4}, //8953 #HANGUL SYLLABLE TIKEUT WA NIEUN
+ {0xB5C4, 0xB3E8}, //8954 #HANGUL SYLLABLE TIKEUT WA RIEUL
+ {0xB5C5, 0xB3FC}, //8955 #HANGUL SYLLABLE TIKEUT WAE
+ {0xB5C6, 0xB410}, //8956 #HANGUL SYLLABLE TIKEUT WAE SSANGSIOS
+ {0xB5C7, 0xB418}, //8957 #HANGUL SYLLABLE TIKEUT OE
+ {0xB5C8, 0xB41C}, //8958 #HANGUL SYLLABLE TIKEUT OE NIEUN
+ {0xB5C9, 0xB420}, //8959 #HANGUL SYLLABLE TIKEUT OE RIEUL
+ {0xB5CA, 0xB428}, //8960 #HANGUL SYLLABLE TIKEUT OE MIEUM
+ {0xB5CB, 0xB429}, //8961 #HANGUL SYLLABLE TIKEUT OE PIEUP
+ {0xB5CC, 0xB42B}, //8962 #HANGUL SYLLABLE TIKEUT OE SIOS
+ {0xB5CD, 0xB434}, //8963 #HANGUL SYLLABLE TIKEUT YO
+ {0xB5CE, 0xB450}, //8964 #HANGUL SYLLABLE TIKEUT U
+ {0xB5CF, 0xB451}, //8965 #HANGUL SYLLABLE TIKEUT U KIYEOK
+ {0xB5D0, 0xB454}, //8966 #HANGUL SYLLABLE TIKEUT U NIEUN
+ {0xB5D1, 0xB458}, //8967 #HANGUL SYLLABLE TIKEUT U RIEUL
+ {0xB5D2, 0xB460}, //8968 #HANGUL SYLLABLE TIKEUT U MIEUM
+ {0xB5D3, 0xB461}, //8969 #HANGUL SYLLABLE TIKEUT U PIEUP
+ {0xB5D4, 0xB463}, //8970 #HANGUL SYLLABLE TIKEUT U SIOS
+ {0xB5D5, 0xB465}, //8971 #HANGUL SYLLABLE TIKEUT U IEUNG
+ {0xB5D6, 0xB46C}, //8972 #HANGUL SYLLABLE TIKEUT WEO
+ {0xB5D7, 0xB480}, //8973 #HANGUL SYLLABLE TIKEUT WEO SSANGSIOS
+ {0xB5D8, 0xB488}, //8974 #HANGUL SYLLABLE TIKEUT WE
+ {0xB5D9, 0xB49D}, //8975 #HANGUL SYLLABLE TIKEUT WE IEUNG
+ {0xB5DA, 0xB4A4}, //8976 #HANGUL SYLLABLE TIKEUT WI
+ {0xB5DB, 0xB4A8}, //8977 #HANGUL SYLLABLE TIKEUT WI NIEUN
+ {0xB5DC, 0xB4AC}, //8978 #HANGUL SYLLABLE TIKEUT WI RIEUL
+ {0xB5DD, 0xB4B5}, //8979 #HANGUL SYLLABLE TIKEUT WI PIEUP
+ {0xB5DE, 0xB4B7}, //8980 #HANGUL SYLLABLE TIKEUT WI SIOS
+ {0xB5DF, 0xB4B9}, //8981 #HANGUL SYLLABLE TIKEUT WI IEUNG
+ {0xB5E0, 0xB4C0}, //8982 #HANGUL SYLLABLE TIKEUT YU
+ {0xB5E1, 0xB4C4}, //8983 #HANGUL SYLLABLE TIKEUT YU NIEUN
+ {0xB5E2, 0xB4C8}, //8984 #HANGUL SYLLABLE TIKEUT YU RIEUL
+ {0xB5E3, 0xB4D0}, //8985 #HANGUL SYLLABLE TIKEUT YU MIEUM
+ {0xB5E4, 0xB4D5}, //8986 #HANGUL SYLLABLE TIKEUT YU IEUNG
+ {0xB5E5, 0xB4DC}, //8987 #HANGUL SYLLABLE TIKEUT EU
+ {0xB5E6, 0xB4DD}, //8988 #HANGUL SYLLABLE TIKEUT EU KIYEOK
+ {0xB5E7, 0xB4E0}, //8989 #HANGUL SYLLABLE TIKEUT EU NIEUN
+ {0xB5E8, 0xB4E3}, //8990 #HANGUL SYLLABLE TIKEUT EU TIKEUT
+ {0xB5E9, 0xB4E4}, //8991 #HANGUL SYLLABLE TIKEUT EU RIEUL
+ {0xB5EA, 0xB4E6}, //8992 #HANGUL SYLLABLE TIKEUT EU RIEULMIEUM
+ {0xB5EB, 0xB4EC}, //8993 #HANGUL SYLLABLE TIKEUT EU MIEUM
+ {0xB5EC, 0xB4ED}, //8994 #HANGUL SYLLABLE TIKEUT EU PIEUP
+ {0xB5ED, 0xB4EF}, //8995 #HANGUL SYLLABLE TIKEUT EU SIOS
+ {0xB5EE, 0xB4F1}, //8996 #HANGUL SYLLABLE TIKEUT EU IEUNG
+ {0xB5EF, 0xB4F8}, //8997 #HANGUL SYLLABLE TIKEUT YI
+ {0xB5F0, 0xB514}, //8998 #HANGUL SYLLABLE TIKEUT I
+ {0xB5F1, 0xB515}, //8999 #HANGUL SYLLABLE TIKEUT I KIYEOK
+ {0xB5F2, 0xB518}, //9000 #HANGUL SYLLABLE TIKEUT I NIEUN
+ {0xB5F3, 0xB51B}, //9001 #HANGUL SYLLABLE TIKEUT I TIKEUT
+ {0xB5F4, 0xB51C}, //9002 #HANGUL SYLLABLE TIKEUT I RIEUL
+ {0xB5F5, 0xB524}, //9003 #HANGUL SYLLABLE TIKEUT I MIEUM
+ {0xB5F6, 0xB525}, //9004 #HANGUL SYLLABLE TIKEUT I PIEUP
+ {0xB5F7, 0xB527}, //9005 #HANGUL SYLLABLE TIKEUT I SIOS
+ {0xB5F8, 0xB528}, //9006 #HANGUL SYLLABLE TIKEUT I SSANGSIOS
+ {0xB5F9, 0xB529}, //9007 #HANGUL SYLLABLE TIKEUT I IEUNG
+ {0xB5FA, 0xB52A}, //9008 #HANGUL SYLLABLE TIKEUT I CIEUC
+ {0xB5FB, 0xB530}, //9009 #HANGUL SYLLABLE SSANGTIKEUT A
+ {0xB5FC, 0xB531}, //9010 #HANGUL SYLLABLE SSANGTIKEUT A KIYEOK
+ {0xB5FD, 0xB534}, //9011 #HANGUL SYLLABLE SSANGTIKEUT A NIEUN
+ {0xB5FE, 0xB538}, //9012 #HANGUL SYLLABLE SSANGTIKEUT A RIEUL
+ {0xB641, 0xD105}, //9013 #HANGUL SYLLABLE THIEUTH YA RIEULTHIEUTH
+ {0xB642, 0xD106}, //9014 #HANGUL SYLLABLE THIEUTH YA RIEULPHIEUPH
+ {0xB643, 0xD107}, //9015 #HANGUL SYLLABLE THIEUTH YA RIEULHIEUH
+ {0xB644, 0xD108}, //9016 #HANGUL SYLLABLE THIEUTH YA MIEUM
+ {0xB645, 0xD109}, //9017 #HANGUL SYLLABLE THIEUTH YA PIEUP
+ {0xB646, 0xD10A}, //9018 #HANGUL SYLLABLE THIEUTH YA PIEUPSIOS
+ {0xB647, 0xD10B}, //9019 #HANGUL SYLLABLE THIEUTH YA SIOS
+ {0xB648, 0xD10C}, //9020 #HANGUL SYLLABLE THIEUTH YA SSANGSIOS
+ {0xB649, 0xD10E}, //9021 #HANGUL SYLLABLE THIEUTH YA CIEUC
+ {0xB64A, 0xD10F}, //9022 #HANGUL SYLLABLE THIEUTH YA CHIEUCH
+ {0xB64B, 0xD110}, //9023 #HANGUL SYLLABLE THIEUTH YA KHIEUKH
+ {0xB64C, 0xD111}, //9024 #HANGUL SYLLABLE THIEUTH YA THIEUTH
+ {0xB64D, 0xD112}, //9025 #HANGUL SYLLABLE THIEUTH YA PHIEUPH
+ {0xB64E, 0xD113}, //9026 #HANGUL SYLLABLE THIEUTH YA HIEUH
+ {0xB64F, 0xD114}, //9027 #HANGUL SYLLABLE THIEUTH YAE
+ {0xB650, 0xD115}, //9028 #HANGUL SYLLABLE THIEUTH YAE KIYEOK
+ {0xB651, 0xD116}, //9029 #HANGUL SYLLABLE THIEUTH YAE SSANGKIYEOK
+ {0xB652, 0xD117}, //9030 #HANGUL SYLLABLE THIEUTH YAE KIYEOKSIOS
+ {0xB653, 0xD118}, //9031 #HANGUL SYLLABLE THIEUTH YAE NIEUN
+ {0xB654, 0xD119}, //9032 #HANGUL SYLLABLE THIEUTH YAE NIEUNCIEUC
+ {0xB655, 0xD11A}, //9033 #HANGUL SYLLABLE THIEUTH YAE NIEUNHIEUH
+ {0xB656, 0xD11B}, //9034 #HANGUL SYLLABLE THIEUTH YAE TIKEUT
+ {0xB657, 0xD11C}, //9035 #HANGUL SYLLABLE THIEUTH YAE RIEUL
+ {0xB658, 0xD11D}, //9036 #HANGUL SYLLABLE THIEUTH YAE RIEULKIYEOK
+ {0xB659, 0xD11E}, //9037 #HANGUL SYLLABLE THIEUTH YAE RIEULMIEUM
+ {0xB65A, 0xD11F}, //9038 #HANGUL SYLLABLE THIEUTH YAE RIEULPIEUP
+ {0xB661, 0xD120}, //9039 #HANGUL SYLLABLE THIEUTH YAE RIEULSIOS
+ {0xB662, 0xD121}, //9040 #HANGUL SYLLABLE THIEUTH YAE RIEULTHIEUTH
+ {0xB663, 0xD122}, //9041 #HANGUL SYLLABLE THIEUTH YAE RIEULPHIEUPH
+ {0xB664, 0xD123}, //9042 #HANGUL SYLLABLE THIEUTH YAE RIEULHIEUH
+ {0xB665, 0xD124}, //9043 #HANGUL SYLLABLE THIEUTH YAE MIEUM
+ {0xB666, 0xD125}, //9044 #HANGUL SYLLABLE THIEUTH YAE PIEUP
+ {0xB667, 0xD126}, //9045 #HANGUL SYLLABLE THIEUTH YAE PIEUPSIOS
+ {0xB668, 0xD127}, //9046 #HANGUL SYLLABLE THIEUTH YAE SIOS
+ {0xB669, 0xD128}, //9047 #HANGUL SYLLABLE THIEUTH YAE SSANGSIOS
+ {0xB66A, 0xD129}, //9048 #HANGUL SYLLABLE THIEUTH YAE IEUNG
+ {0xB66B, 0xD12A}, //9049 #HANGUL SYLLABLE THIEUTH YAE CIEUC
+ {0xB66C, 0xD12B}, //9050 #HANGUL SYLLABLE THIEUTH YAE CHIEUCH
+ {0xB66D, 0xD12C}, //9051 #HANGUL SYLLABLE THIEUTH YAE KHIEUKH
+ {0xB66E, 0xD12D}, //9052 #HANGUL SYLLABLE THIEUTH YAE THIEUTH
+ {0xB66F, 0xD12E}, //9053 #HANGUL SYLLABLE THIEUTH YAE PHIEUPH
+ {0xB670, 0xD12F}, //9054 #HANGUL SYLLABLE THIEUTH YAE HIEUH
+ {0xB671, 0xD132}, //9055 #HANGUL SYLLABLE THIEUTH EO SSANGKIYEOK
+ {0xB672, 0xD133}, //9056 #HANGUL SYLLABLE THIEUTH EO KIYEOKSIOS
+ {0xB673, 0xD135}, //9057 #HANGUL SYLLABLE THIEUTH EO NIEUNCIEUC
+ {0xB674, 0xD136}, //9058 #HANGUL SYLLABLE THIEUTH EO NIEUNHIEUH
+ {0xB675, 0xD137}, //9059 #HANGUL SYLLABLE THIEUTH EO TIKEUT
+ {0xB676, 0xD139}, //9060 #HANGUL SYLLABLE THIEUTH EO RIEULKIYEOK
+ {0xB677, 0xD13B}, //9061 #HANGUL SYLLABLE THIEUTH EO RIEULPIEUP
+ {0xB678, 0xD13C}, //9062 #HANGUL SYLLABLE THIEUTH EO RIEULSIOS
+ {0xB679, 0xD13D}, //9063 #HANGUL SYLLABLE THIEUTH EO RIEULTHIEUTH
+ {0xB67A, 0xD13E}, //9064 #HANGUL SYLLABLE THIEUTH EO RIEULPHIEUPH
+ {0xB681, 0xD13F}, //9065 #HANGUL SYLLABLE THIEUTH EO RIEULHIEUH
+ {0xB682, 0xD142}, //9066 #HANGUL SYLLABLE THIEUTH EO PIEUPSIOS
+ {0xB683, 0xD146}, //9067 #HANGUL SYLLABLE THIEUTH EO CIEUC
+ {0xB684, 0xD147}, //9068 #HANGUL SYLLABLE THIEUTH EO CHIEUCH
+ {0xB685, 0xD148}, //9069 #HANGUL SYLLABLE THIEUTH EO KHIEUKH
+ {0xB686, 0xD149}, //9070 #HANGUL SYLLABLE THIEUTH EO THIEUTH
+ {0xB687, 0xD14A}, //9071 #HANGUL SYLLABLE THIEUTH EO PHIEUPH
+ {0xB688, 0xD14B}, //9072 #HANGUL SYLLABLE THIEUTH EO HIEUH
+ {0xB689, 0xD14E}, //9073 #HANGUL SYLLABLE THIEUTH E SSANGKIYEOK
+ {0xB68A, 0xD14F}, //9074 #HANGUL SYLLABLE THIEUTH E KIYEOKSIOS
+ {0xB68B, 0xD151}, //9075 #HANGUL SYLLABLE THIEUTH E NIEUNCIEUC
+ {0xB68C, 0xD152}, //9076 #HANGUL SYLLABLE THIEUTH E NIEUNHIEUH
+ {0xB68D, 0xD153}, //9077 #HANGUL SYLLABLE THIEUTH E TIKEUT
+ {0xB68E, 0xD155}, //9078 #HANGUL SYLLABLE THIEUTH E RIEULKIYEOK
+ {0xB68F, 0xD156}, //9079 #HANGUL SYLLABLE THIEUTH E RIEULMIEUM
+ {0xB690, 0xD157}, //9080 #HANGUL SYLLABLE THIEUTH E RIEULPIEUP
+ {0xB691, 0xD158}, //9081 #HANGUL SYLLABLE THIEUTH E RIEULSIOS
+ {0xB692, 0xD159}, //9082 #HANGUL SYLLABLE THIEUTH E RIEULTHIEUTH
+ {0xB693, 0xD15A}, //9083 #HANGUL SYLLABLE THIEUTH E RIEULPHIEUPH
+ {0xB694, 0xD15B}, //9084 #HANGUL SYLLABLE THIEUTH E RIEULHIEUH
+ {0xB695, 0xD15E}, //9085 #HANGUL SYLLABLE THIEUTH E PIEUPSIOS
+ {0xB696, 0xD160}, //9086 #HANGUL SYLLABLE THIEUTH E SSANGSIOS
+ {0xB697, 0xD162}, //9087 #HANGUL SYLLABLE THIEUTH E CIEUC
+ {0xB698, 0xD163}, //9088 #HANGUL SYLLABLE THIEUTH E CHIEUCH
+ {0xB699, 0xD164}, //9089 #HANGUL SYLLABLE THIEUTH E KHIEUKH
+ {0xB69A, 0xD165}, //9090 #HANGUL SYLLABLE THIEUTH E THIEUTH
+ {0xB69B, 0xD166}, //9091 #HANGUL SYLLABLE THIEUTH E PHIEUPH
+ {0xB69C, 0xD167}, //9092 #HANGUL SYLLABLE THIEUTH E HIEUH
+ {0xB69D, 0xD169}, //9093 #HANGUL SYLLABLE THIEUTH YEO KIYEOK
+ {0xB69E, 0xD16A}, //9094 #HANGUL SYLLABLE THIEUTH YEO SSANGKIYEOK
+ {0xB69F, 0xD16B}, //9095 #HANGUL SYLLABLE THIEUTH YEO KIYEOKSIOS
+ {0xB6A0, 0xD16D}, //9096 #HANGUL SYLLABLE THIEUTH YEO NIEUNCIEUC
+ {0xB6A1, 0xB540}, //9097 #HANGUL SYLLABLE SSANGTIKEUT A MIEUM
+ {0xB6A2, 0xB541}, //9098 #HANGUL SYLLABLE SSANGTIKEUT A PIEUP
+ {0xB6A3, 0xB543}, //9099 #HANGUL SYLLABLE SSANGTIKEUT A SIOS
+ {0xB6A4, 0xB544}, //9100 #HANGUL SYLLABLE SSANGTIKEUT A SSANGSIOS
+ {0xB6A5, 0xB545}, //9101 #HANGUL SYLLABLE SSANGTIKEUT A IEUNG
+ {0xB6A6, 0xB54B}, //9102 #HANGUL SYLLABLE SSANGTIKEUT A HIEUH
+ {0xB6A7, 0xB54C}, //9103 #HANGUL SYLLABLE SSANGTIKEUT AE
+ {0xB6A8, 0xB54D}, //9104 #HANGUL SYLLABLE SSANGTIKEUT AE KIYEOK
+ {0xB6A9, 0xB550}, //9105 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUN
+ {0xB6AA, 0xB554}, //9106 #HANGUL SYLLABLE SSANGTIKEUT AE RIEUL
+ {0xB6AB, 0xB55C}, //9107 #HANGUL SYLLABLE SSANGTIKEUT AE MIEUM
+ {0xB6AC, 0xB55D}, //9108 #HANGUL SYLLABLE SSANGTIKEUT AE PIEUP
+ {0xB6AD, 0xB55F}, //9109 #HANGUL SYLLABLE SSANGTIKEUT AE SIOS
+ {0xB6AE, 0xB560}, //9110 #HANGUL SYLLABLE SSANGTIKEUT AE SSANGSIOS
+ {0xB6AF, 0xB561}, //9111 #HANGUL SYLLABLE SSANGTIKEUT AE IEUNG
+ {0xB6B0, 0xB5A0}, //9112 #HANGUL SYLLABLE SSANGTIKEUT EO
+ {0xB6B1, 0xB5A1}, //9113 #HANGUL SYLLABLE SSANGTIKEUT EO KIYEOK
+ {0xB6B2, 0xB5A4}, //9114 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUN
+ {0xB6B3, 0xB5A8}, //9115 #HANGUL SYLLABLE SSANGTIKEUT EO RIEUL
+ {0xB6B4, 0xB5AA}, //9116 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULMIEUM
+ {0xB6B5, 0xB5AB}, //9117 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULPIEUP
+ {0xB6B6, 0xB5B0}, //9118 #HANGUL SYLLABLE SSANGTIKEUT EO MIEUM
+ {0xB6B7, 0xB5B1}, //9119 #HANGUL SYLLABLE SSANGTIKEUT EO PIEUP
+ {0xB6B8, 0xB5B3}, //9120 #HANGUL SYLLABLE SSANGTIKEUT EO SIOS
+ {0xB6B9, 0xB5B4}, //9121 #HANGUL SYLLABLE SSANGTIKEUT EO SSANGSIOS
+ {0xB6BA, 0xB5B5}, //9122 #HANGUL SYLLABLE SSANGTIKEUT EO IEUNG
+ {0xB6BB, 0xB5BB}, //9123 #HANGUL SYLLABLE SSANGTIKEUT EO HIEUH
+ {0xB6BC, 0xB5BC}, //9124 #HANGUL SYLLABLE SSANGTIKEUT E
+ {0xB6BD, 0xB5BD}, //9125 #HANGUL SYLLABLE SSANGTIKEUT E KIYEOK
+ {0xB6BE, 0xB5C0}, //9126 #HANGUL SYLLABLE SSANGTIKEUT E NIEUN
+ {0xB6BF, 0xB5C4}, //9127 #HANGUL SYLLABLE SSANGTIKEUT E RIEUL
+ {0xB6C0, 0xB5CC}, //9128 #HANGUL SYLLABLE SSANGTIKEUT E MIEUM
+ {0xB6C1, 0xB5CD}, //9129 #HANGUL SYLLABLE SSANGTIKEUT E PIEUP
+ {0xB6C2, 0xB5CF}, //9130 #HANGUL SYLLABLE SSANGTIKEUT E SIOS
+ {0xB6C3, 0xB5D0}, //9131 #HANGUL SYLLABLE SSANGTIKEUT E SSANGSIOS
+ {0xB6C4, 0xB5D1}, //9132 #HANGUL SYLLABLE SSANGTIKEUT E IEUNG
+ {0xB6C5, 0xB5D8}, //9133 #HANGUL SYLLABLE SSANGTIKEUT YEO
+ {0xB6C6, 0xB5EC}, //9134 #HANGUL SYLLABLE SSANGTIKEUT YEO SSANGSIOS
+ {0xB6C7, 0xB610}, //9135 #HANGUL SYLLABLE SSANGTIKEUT O
+ {0xB6C8, 0xB611}, //9136 #HANGUL SYLLABLE SSANGTIKEUT O KIYEOK
+ {0xB6C9, 0xB614}, //9137 #HANGUL SYLLABLE SSANGTIKEUT O NIEUN
+ {0xB6CA, 0xB618}, //9138 #HANGUL SYLLABLE SSANGTIKEUT O RIEUL
+ {0xB6CB, 0xB625}, //9139 #HANGUL SYLLABLE SSANGTIKEUT O IEUNG
+ {0xB6CC, 0xB62C}, //9140 #HANGUL SYLLABLE SSANGTIKEUT WA
+ {0xB6CD, 0xB634}, //9141 #HANGUL SYLLABLE SSANGTIKEUT WA RIEUL
+ {0xB6CE, 0xB648}, //9142 #HANGUL SYLLABLE SSANGTIKEUT WAE
+ {0xB6CF, 0xB664}, //9143 #HANGUL SYLLABLE SSANGTIKEUT OE
+ {0xB6D0, 0xB668}, //9144 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUN
+ {0xB6D1, 0xB69C}, //9145 #HANGUL SYLLABLE SSANGTIKEUT U
+ {0xB6D2, 0xB69D}, //9146 #HANGUL SYLLABLE SSANGTIKEUT U KIYEOK
+ {0xB6D3, 0xB6A0}, //9147 #HANGUL SYLLABLE SSANGTIKEUT U NIEUN
+ {0xB6D4, 0xB6A4}, //9148 #HANGUL SYLLABLE SSANGTIKEUT U RIEUL
+ {0xB6D5, 0xB6AB}, //9149 #HANGUL SYLLABLE SSANGTIKEUT U RIEULHIEUH
+ {0xB6D6, 0xB6AC}, //9150 #HANGUL SYLLABLE SSANGTIKEUT U MIEUM
+ {0xB6D7, 0xB6B1}, //9151 #HANGUL SYLLABLE SSANGTIKEUT U IEUNG
+ {0xB6D8, 0xB6D4}, //9152 #HANGUL SYLLABLE SSANGTIKEUT WE
+ {0xB6D9, 0xB6F0}, //9153 #HANGUL SYLLABLE SSANGTIKEUT WI
+ {0xB6DA, 0xB6F4}, //9154 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUN
+ {0xB6DB, 0xB6F8}, //9155 #HANGUL SYLLABLE SSANGTIKEUT WI RIEUL
+ {0xB6DC, 0xB700}, //9156 #HANGUL SYLLABLE SSANGTIKEUT WI MIEUM
+ {0xB6DD, 0xB701}, //9157 #HANGUL SYLLABLE SSANGTIKEUT WI PIEUP
+ {0xB6DE, 0xB705}, //9158 #HANGUL SYLLABLE SSANGTIKEUT WI IEUNG
+ {0xB6DF, 0xB728}, //9159 #HANGUL SYLLABLE SSANGTIKEUT EU
+ {0xB6E0, 0xB729}, //9160 #HANGUL SYLLABLE SSANGTIKEUT EU KIYEOK
+ {0xB6E1, 0xB72C}, //9161 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUN
+ {0xB6E2, 0xB72F}, //9162 #HANGUL SYLLABLE SSANGTIKEUT EU TIKEUT
+ {0xB6E3, 0xB730}, //9163 #HANGUL SYLLABLE SSANGTIKEUT EU RIEUL
+ {0xB6E4, 0xB738}, //9164 #HANGUL SYLLABLE SSANGTIKEUT EU MIEUM
+ {0xB6E5, 0xB739}, //9165 #HANGUL SYLLABLE SSANGTIKEUT EU PIEUP
+ {0xB6E6, 0xB73B}, //9166 #HANGUL SYLLABLE SSANGTIKEUT EU SIOS
+ {0xB6E7, 0xB744}, //9167 #HANGUL SYLLABLE SSANGTIKEUT YI
+ {0xB6E8, 0xB748}, //9168 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUN
+ {0xB6E9, 0xB74C}, //9169 #HANGUL SYLLABLE SSANGTIKEUT YI RIEUL
+ {0xB6EA, 0xB754}, //9170 #HANGUL SYLLABLE SSANGTIKEUT YI MIEUM
+ {0xB6EB, 0xB755}, //9171 #HANGUL SYLLABLE SSANGTIKEUT YI PIEUP
+ {0xB6EC, 0xB760}, //9172 #HANGUL SYLLABLE SSANGTIKEUT I
+ {0xB6ED, 0xB764}, //9173 #HANGUL SYLLABLE SSANGTIKEUT I NIEUN
+ {0xB6EE, 0xB768}, //9174 #HANGUL SYLLABLE SSANGTIKEUT I RIEUL
+ {0xB6EF, 0xB770}, //9175 #HANGUL SYLLABLE SSANGTIKEUT I MIEUM
+ {0xB6F0, 0xB771}, //9176 #HANGUL SYLLABLE SSANGTIKEUT I PIEUP
+ {0xB6F1, 0xB773}, //9177 #HANGUL SYLLABLE SSANGTIKEUT I SIOS
+ {0xB6F2, 0xB775}, //9178 #HANGUL SYLLABLE SSANGTIKEUT I IEUNG
+ {0xB6F3, 0xB77C}, //9179 #HANGUL SYLLABLE RIEUL A
+ {0xB6F4, 0xB77D}, //9180 #HANGUL SYLLABLE RIEUL A KIYEOK
+ {0xB6F5, 0xB780}, //9181 #HANGUL SYLLABLE RIEUL A NIEUN
+ {0xB6F6, 0xB784}, //9182 #HANGUL SYLLABLE RIEUL A RIEUL
+ {0xB6F7, 0xB78C}, //9183 #HANGUL SYLLABLE RIEUL A MIEUM
+ {0xB6F8, 0xB78D}, //9184 #HANGUL SYLLABLE RIEUL A PIEUP
+ {0xB6F9, 0xB78F}, //9185 #HANGUL SYLLABLE RIEUL A SIOS
+ {0xB6FA, 0xB790}, //9186 #HANGUL SYLLABLE RIEUL A SSANGSIOS
+ {0xB6FB, 0xB791}, //9187 #HANGUL SYLLABLE RIEUL A IEUNG
+ {0xB6FC, 0xB792}, //9188 #HANGUL SYLLABLE RIEUL A CIEUC
+ {0xB6FD, 0xB796}, //9189 #HANGUL SYLLABLE RIEUL A PHIEUPH
+ {0xB6FE, 0xB797}, //9190 #HANGUL SYLLABLE RIEUL A HIEUH
+ {0xB741, 0xD16E}, //9191 #HANGUL SYLLABLE THIEUTH YEO NIEUNHIEUH
+ {0xB742, 0xD16F}, //9192 #HANGUL SYLLABLE THIEUTH YEO TIKEUT
+ {0xB743, 0xD170}, //9193 #HANGUL SYLLABLE THIEUTH YEO RIEUL
+ {0xB744, 0xD171}, //9194 #HANGUL SYLLABLE THIEUTH YEO RIEULKIYEOK
+ {0xB745, 0xD172}, //9195 #HANGUL SYLLABLE THIEUTH YEO RIEULMIEUM
+ {0xB746, 0xD173}, //9196 #HANGUL SYLLABLE THIEUTH YEO RIEULPIEUP
+ {0xB747, 0xD174}, //9197 #HANGUL SYLLABLE THIEUTH YEO RIEULSIOS
+ {0xB748, 0xD175}, //9198 #HANGUL SYLLABLE THIEUTH YEO RIEULTHIEUTH
+ {0xB749, 0xD176}, //9199 #HANGUL SYLLABLE THIEUTH YEO RIEULPHIEUPH
+ {0xB74A, 0xD177}, //9200 #HANGUL SYLLABLE THIEUTH YEO RIEULHIEUH
+ {0xB74B, 0xD178}, //9201 #HANGUL SYLLABLE THIEUTH YEO MIEUM
+ {0xB74C, 0xD179}, //9202 #HANGUL SYLLABLE THIEUTH YEO PIEUP
+ {0xB74D, 0xD17A}, //9203 #HANGUL SYLLABLE THIEUTH YEO PIEUPSIOS
+ {0xB74E, 0xD17B}, //9204 #HANGUL SYLLABLE THIEUTH YEO SIOS
+ {0xB74F, 0xD17D}, //9205 #HANGUL SYLLABLE THIEUTH YEO IEUNG
+ {0xB750, 0xD17E}, //9206 #HANGUL SYLLABLE THIEUTH YEO CIEUC
+ {0xB751, 0xD17F}, //9207 #HANGUL SYLLABLE THIEUTH YEO CHIEUCH
+ {0xB752, 0xD180}, //9208 #HANGUL SYLLABLE THIEUTH YEO KHIEUKH
+ {0xB753, 0xD181}, //9209 #HANGUL SYLLABLE THIEUTH YEO THIEUTH
+ {0xB754, 0xD182}, //9210 #HANGUL SYLLABLE THIEUTH YEO PHIEUPH
+ {0xB755, 0xD183}, //9211 #HANGUL SYLLABLE THIEUTH YEO HIEUH
+ {0xB756, 0xD185}, //9212 #HANGUL SYLLABLE THIEUTH YE KIYEOK
+ {0xB757, 0xD186}, //9213 #HANGUL SYLLABLE THIEUTH YE SSANGKIYEOK
+ {0xB758, 0xD187}, //9214 #HANGUL SYLLABLE THIEUTH YE KIYEOKSIOS
+ {0xB759, 0xD189}, //9215 #HANGUL SYLLABLE THIEUTH YE NIEUNCIEUC
+ {0xB75A, 0xD18A}, //9216 #HANGUL SYLLABLE THIEUTH YE NIEUNHIEUH
+ {0xB761, 0xD18B}, //9217 #HANGUL SYLLABLE THIEUTH YE TIKEUT
+ {0xB762, 0xD18C}, //9218 #HANGUL SYLLABLE THIEUTH YE RIEUL
+ {0xB763, 0xD18D}, //9219 #HANGUL SYLLABLE THIEUTH YE RIEULKIYEOK
+ {0xB764, 0xD18E}, //9220 #HANGUL SYLLABLE THIEUTH YE RIEULMIEUM
+ {0xB765, 0xD18F}, //9221 #HANGUL SYLLABLE THIEUTH YE RIEULPIEUP
+ {0xB766, 0xD190}, //9222 #HANGUL SYLLABLE THIEUTH YE RIEULSIOS
+ {0xB767, 0xD191}, //9223 #HANGUL SYLLABLE THIEUTH YE RIEULTHIEUTH
+ {0xB768, 0xD192}, //9224 #HANGUL SYLLABLE THIEUTH YE RIEULPHIEUPH
+ {0xB769, 0xD193}, //9225 #HANGUL SYLLABLE THIEUTH YE RIEULHIEUH
+ {0xB76A, 0xD194}, //9226 #HANGUL SYLLABLE THIEUTH YE MIEUM
+ {0xB76B, 0xD195}, //9227 #HANGUL SYLLABLE THIEUTH YE PIEUP
+ {0xB76C, 0xD196}, //9228 #HANGUL SYLLABLE THIEUTH YE PIEUPSIOS
+ {0xB76D, 0xD197}, //9229 #HANGUL SYLLABLE THIEUTH YE SIOS
+ {0xB76E, 0xD198}, //9230 #HANGUL SYLLABLE THIEUTH YE SSANGSIOS
+ {0xB76F, 0xD199}, //9231 #HANGUL SYLLABLE THIEUTH YE IEUNG
+ {0xB770, 0xD19A}, //9232 #HANGUL SYLLABLE THIEUTH YE CIEUC
+ {0xB771, 0xD19B}, //9233 #HANGUL SYLLABLE THIEUTH YE CHIEUCH
+ {0xB772, 0xD19C}, //9234 #HANGUL SYLLABLE THIEUTH YE KHIEUKH
+ {0xB773, 0xD19D}, //9235 #HANGUL SYLLABLE THIEUTH YE THIEUTH
+ {0xB774, 0xD19E}, //9236 #HANGUL SYLLABLE THIEUTH YE PHIEUPH
+ {0xB775, 0xD19F}, //9237 #HANGUL SYLLABLE THIEUTH YE HIEUH
+ {0xB776, 0xD1A2}, //9238 #HANGUL SYLLABLE THIEUTH O SSANGKIYEOK
+ {0xB777, 0xD1A3}, //9239 #HANGUL SYLLABLE THIEUTH O KIYEOKSIOS
+ {0xB778, 0xD1A5}, //9240 #HANGUL SYLLABLE THIEUTH O NIEUNCIEUC
+ {0xB779, 0xD1A6}, //9241 #HANGUL SYLLABLE THIEUTH O NIEUNHIEUH
+ {0xB77A, 0xD1A7}, //9242 #HANGUL SYLLABLE THIEUTH O TIKEUT
+ {0xB781, 0xD1A9}, //9243 #HANGUL SYLLABLE THIEUTH O RIEULKIYEOK
+ {0xB782, 0xD1AA}, //9244 #HANGUL SYLLABLE THIEUTH O RIEULMIEUM
+ {0xB783, 0xD1AB}, //9245 #HANGUL SYLLABLE THIEUTH O RIEULPIEUP
+ {0xB784, 0xD1AC}, //9246 #HANGUL SYLLABLE THIEUTH O RIEULSIOS
+ {0xB785, 0xD1AD}, //9247 #HANGUL SYLLABLE THIEUTH O RIEULTHIEUTH
+ {0xB786, 0xD1AE}, //9248 #HANGUL SYLLABLE THIEUTH O RIEULPHIEUPH
+ {0xB787, 0xD1AF}, //9249 #HANGUL SYLLABLE THIEUTH O RIEULHIEUH
+ {0xB788, 0xD1B2}, //9250 #HANGUL SYLLABLE THIEUTH O PIEUPSIOS
+ {0xB789, 0xD1B4}, //9251 #HANGUL SYLLABLE THIEUTH O SSANGSIOS
+ {0xB78A, 0xD1B6}, //9252 #HANGUL SYLLABLE THIEUTH O CIEUC
+ {0xB78B, 0xD1B7}, //9253 #HANGUL SYLLABLE THIEUTH O CHIEUCH
+ {0xB78C, 0xD1B8}, //9254 #HANGUL SYLLABLE THIEUTH O KHIEUKH
+ {0xB78D, 0xD1B9}, //9255 #HANGUL SYLLABLE THIEUTH O THIEUTH
+ {0xB78E, 0xD1BB}, //9256 #HANGUL SYLLABLE THIEUTH O HIEUH
+ {0xB78F, 0xD1BD}, //9257 #HANGUL SYLLABLE THIEUTH WA KIYEOK
+ {0xB790, 0xD1BE}, //9258 #HANGUL SYLLABLE THIEUTH WA SSANGKIYEOK
+ {0xB791, 0xD1BF}, //9259 #HANGUL SYLLABLE THIEUTH WA KIYEOKSIOS
+ {0xB792, 0xD1C1}, //9260 #HANGUL SYLLABLE THIEUTH WA NIEUNCIEUC
+ {0xB793, 0xD1C2}, //9261 #HANGUL SYLLABLE THIEUTH WA NIEUNHIEUH
+ {0xB794, 0xD1C3}, //9262 #HANGUL SYLLABLE THIEUTH WA TIKEUT
+ {0xB795, 0xD1C4}, //9263 #HANGUL SYLLABLE THIEUTH WA RIEUL
+ {0xB796, 0xD1C5}, //9264 #HANGUL SYLLABLE THIEUTH WA RIEULKIYEOK
+ {0xB797, 0xD1C6}, //9265 #HANGUL SYLLABLE THIEUTH WA RIEULMIEUM
+ {0xB798, 0xD1C7}, //9266 #HANGUL SYLLABLE THIEUTH WA RIEULPIEUP
+ {0xB799, 0xD1C8}, //9267 #HANGUL SYLLABLE THIEUTH WA RIEULSIOS
+ {0xB79A, 0xD1C9}, //9268 #HANGUL SYLLABLE THIEUTH WA RIEULTHIEUTH
+ {0xB79B, 0xD1CA}, //9269 #HANGUL SYLLABLE THIEUTH WA RIEULPHIEUPH
+ {0xB79C, 0xD1CB}, //9270 #HANGUL SYLLABLE THIEUTH WA RIEULHIEUH
+ {0xB79D, 0xD1CC}, //9271 #HANGUL SYLLABLE THIEUTH WA MIEUM
+ {0xB79E, 0xD1CD}, //9272 #HANGUL SYLLABLE THIEUTH WA PIEUP
+ {0xB79F, 0xD1CE}, //9273 #HANGUL SYLLABLE THIEUTH WA PIEUPSIOS
+ {0xB7A0, 0xD1CF}, //9274 #HANGUL SYLLABLE THIEUTH WA SIOS
+ {0xB7A1, 0xB798}, //9275 #HANGUL SYLLABLE RIEUL AE
+ {0xB7A2, 0xB799}, //9276 #HANGUL SYLLABLE RIEUL AE KIYEOK
+ {0xB7A3, 0xB79C}, //9277 #HANGUL SYLLABLE RIEUL AE NIEUN
+ {0xB7A4, 0xB7A0}, //9278 #HANGUL SYLLABLE RIEUL AE RIEUL
+ {0xB7A5, 0xB7A8}, //9279 #HANGUL SYLLABLE RIEUL AE MIEUM
+ {0xB7A6, 0xB7A9}, //9280 #HANGUL SYLLABLE RIEUL AE PIEUP
+ {0xB7A7, 0xB7AB}, //9281 #HANGUL SYLLABLE RIEUL AE SIOS
+ {0xB7A8, 0xB7AC}, //9282 #HANGUL SYLLABLE RIEUL AE SSANGSIOS
+ {0xB7A9, 0xB7AD}, //9283 #HANGUL SYLLABLE RIEUL AE IEUNG
+ {0xB7AA, 0xB7B4}, //9284 #HANGUL SYLLABLE RIEUL YA
+ {0xB7AB, 0xB7B5}, //9285 #HANGUL SYLLABLE RIEUL YA KIYEOK
+ {0xB7AC, 0xB7B8}, //9286 #HANGUL SYLLABLE RIEUL YA NIEUN
+ {0xB7AD, 0xB7C7}, //9287 #HANGUL SYLLABLE RIEUL YA SIOS
+ {0xB7AE, 0xB7C9}, //9288 #HANGUL SYLLABLE RIEUL YA IEUNG
+ {0xB7AF, 0xB7EC}, //9289 #HANGUL SYLLABLE RIEUL EO
+ {0xB7B0, 0xB7ED}, //9290 #HANGUL SYLLABLE RIEUL EO KIYEOK
+ {0xB7B1, 0xB7F0}, //9291 #HANGUL SYLLABLE RIEUL EO NIEUN
+ {0xB7B2, 0xB7F4}, //9292 #HANGUL SYLLABLE RIEUL EO RIEUL
+ {0xB7B3, 0xB7FC}, //9293 #HANGUL SYLLABLE RIEUL EO MIEUM
+ {0xB7B4, 0xB7FD}, //9294 #HANGUL SYLLABLE RIEUL EO PIEUP
+ {0xB7B5, 0xB7FF}, //9295 #HANGUL SYLLABLE RIEUL EO SIOS
+ {0xB7B6, 0xB800}, //9296 #HANGUL SYLLABLE RIEUL EO SSANGSIOS
+ {0xB7B7, 0xB801}, //9297 #HANGUL SYLLABLE RIEUL EO IEUNG
+ {0xB7B8, 0xB807}, //9298 #HANGUL SYLLABLE RIEUL EO HIEUH
+ {0xB7B9, 0xB808}, //9299 #HANGUL SYLLABLE RIEUL E
+ {0xB7BA, 0xB809}, //9300 #HANGUL SYLLABLE RIEUL E KIYEOK
+ {0xB7BB, 0xB80C}, //9301 #HANGUL SYLLABLE RIEUL E NIEUN
+ {0xB7BC, 0xB810}, //9302 #HANGUL SYLLABLE RIEUL E RIEUL
+ {0xB7BD, 0xB818}, //9303 #HANGUL SYLLABLE RIEUL E MIEUM
+ {0xB7BE, 0xB819}, //9304 #HANGUL SYLLABLE RIEUL E PIEUP
+ {0xB7BF, 0xB81B}, //9305 #HANGUL SYLLABLE RIEUL E SIOS
+ {0xB7C0, 0xB81D}, //9306 #HANGUL SYLLABLE RIEUL E IEUNG
+ {0xB7C1, 0xB824}, //9307 #HANGUL SYLLABLE RIEUL YEO
+ {0xB7C2, 0xB825}, //9308 #HANGUL SYLLABLE RIEUL YEO KIYEOK
+ {0xB7C3, 0xB828}, //9309 #HANGUL SYLLABLE RIEUL YEO NIEUN
+ {0xB7C4, 0xB82C}, //9310 #HANGUL SYLLABLE RIEUL YEO RIEUL
+ {0xB7C5, 0xB834}, //9311 #HANGUL SYLLABLE RIEUL YEO MIEUM
+ {0xB7C6, 0xB835}, //9312 #HANGUL SYLLABLE RIEUL YEO PIEUP
+ {0xB7C7, 0xB837}, //9313 #HANGUL SYLLABLE RIEUL YEO SIOS
+ {0xB7C8, 0xB838}, //9314 #HANGUL SYLLABLE RIEUL YEO SSANGSIOS
+ {0xB7C9, 0xB839}, //9315 #HANGUL SYLLABLE RIEUL YEO IEUNG
+ {0xB7CA, 0xB840}, //9316 #HANGUL SYLLABLE RIEUL YE
+ {0xB7CB, 0xB844}, //9317 #HANGUL SYLLABLE RIEUL YE NIEUN
+ {0xB7CC, 0xB851}, //9318 #HANGUL SYLLABLE RIEUL YE PIEUP
+ {0xB7CD, 0xB853}, //9319 #HANGUL SYLLABLE RIEUL YE SIOS
+ {0xB7CE, 0xB85C}, //9320 #HANGUL SYLLABLE RIEUL O
+ {0xB7CF, 0xB85D}, //9321 #HANGUL SYLLABLE RIEUL O KIYEOK
+ {0xB7D0, 0xB860}, //9322 #HANGUL SYLLABLE RIEUL O NIEUN
+ {0xB7D1, 0xB864}, //9323 #HANGUL SYLLABLE RIEUL O RIEUL
+ {0xB7D2, 0xB86C}, //9324 #HANGUL SYLLABLE RIEUL O MIEUM
+ {0xB7D3, 0xB86D}, //9325 #HANGUL SYLLABLE RIEUL O PIEUP
+ {0xB7D4, 0xB86F}, //9326 #HANGUL SYLLABLE RIEUL O SIOS
+ {0xB7D5, 0xB871}, //9327 #HANGUL SYLLABLE RIEUL O IEUNG
+ {0xB7D6, 0xB878}, //9328 #HANGUL SYLLABLE RIEUL WA
+ {0xB7D7, 0xB87C}, //9329 #HANGUL SYLLABLE RIEUL WA NIEUN
+ {0xB7D8, 0xB88D}, //9330 #HANGUL SYLLABLE RIEUL WA IEUNG
+ {0xB7D9, 0xB8A8}, //9331 #HANGUL SYLLABLE RIEUL WAE SSANGSIOS
+ {0xB7DA, 0xB8B0}, //9332 #HANGUL SYLLABLE RIEUL OE
+ {0xB7DB, 0xB8B4}, //9333 #HANGUL SYLLABLE RIEUL OE NIEUN
+ {0xB7DC, 0xB8B8}, //9334 #HANGUL SYLLABLE RIEUL OE RIEUL
+ {0xB7DD, 0xB8C0}, //9335 #HANGUL SYLLABLE RIEUL OE MIEUM
+ {0xB7DE, 0xB8C1}, //9336 #HANGUL SYLLABLE RIEUL OE PIEUP
+ {0xB7DF, 0xB8C3}, //9337 #HANGUL SYLLABLE RIEUL OE SIOS
+ {0xB7E0, 0xB8C5}, //9338 #HANGUL SYLLABLE RIEUL OE IEUNG
+ {0xB7E1, 0xB8CC}, //9339 #HANGUL SYLLABLE RIEUL YO
+ {0xB7E2, 0xB8D0}, //9340 #HANGUL SYLLABLE RIEUL YO NIEUN
+ {0xB7E3, 0xB8D4}, //9341 #HANGUL SYLLABLE RIEUL YO RIEUL
+ {0xB7E4, 0xB8DD}, //9342 #HANGUL SYLLABLE RIEUL YO PIEUP
+ {0xB7E5, 0xB8DF}, //9343 #HANGUL SYLLABLE RIEUL YO SIOS
+ {0xB7E6, 0xB8E1}, //9344 #HANGUL SYLLABLE RIEUL YO IEUNG
+ {0xB7E7, 0xB8E8}, //9345 #HANGUL SYLLABLE RIEUL U
+ {0xB7E8, 0xB8E9}, //9346 #HANGUL SYLLABLE RIEUL U KIYEOK
+ {0xB7E9, 0xB8EC}, //9347 #HANGUL SYLLABLE RIEUL U NIEUN
+ {0xB7EA, 0xB8F0}, //9348 #HANGUL SYLLABLE RIEUL U RIEUL
+ {0xB7EB, 0xB8F8}, //9349 #HANGUL SYLLABLE RIEUL U MIEUM
+ {0xB7EC, 0xB8F9}, //9350 #HANGUL SYLLABLE RIEUL U PIEUP
+ {0xB7ED, 0xB8FB}, //9351 #HANGUL SYLLABLE RIEUL U SIOS
+ {0xB7EE, 0xB8FD}, //9352 #HANGUL SYLLABLE RIEUL U IEUNG
+ {0xB7EF, 0xB904}, //9353 #HANGUL SYLLABLE RIEUL WEO
+ {0xB7F0, 0xB918}, //9354 #HANGUL SYLLABLE RIEUL WEO SSANGSIOS
+ {0xB7F1, 0xB920}, //9355 #HANGUL SYLLABLE RIEUL WE
+ {0xB7F2, 0xB93C}, //9356 #HANGUL SYLLABLE RIEUL WI
+ {0xB7F3, 0xB93D}, //9357 #HANGUL SYLLABLE RIEUL WI KIYEOK
+ {0xB7F4, 0xB940}, //9358 #HANGUL SYLLABLE RIEUL WI NIEUN
+ {0xB7F5, 0xB944}, //9359 #HANGUL SYLLABLE RIEUL WI RIEUL
+ {0xB7F6, 0xB94C}, //9360 #HANGUL SYLLABLE RIEUL WI MIEUM
+ {0xB7F7, 0xB94F}, //9361 #HANGUL SYLLABLE RIEUL WI SIOS
+ {0xB7F8, 0xB951}, //9362 #HANGUL SYLLABLE RIEUL WI IEUNG
+ {0xB7F9, 0xB958}, //9363 #HANGUL SYLLABLE RIEUL YU
+ {0xB7FA, 0xB959}, //9364 #HANGUL SYLLABLE RIEUL YU KIYEOK
+ {0xB7FB, 0xB95C}, //9365 #HANGUL SYLLABLE RIEUL YU NIEUN
+ {0xB7FC, 0xB960}, //9366 #HANGUL SYLLABLE RIEUL YU RIEUL
+ {0xB7FD, 0xB968}, //9367 #HANGUL SYLLABLE RIEUL YU MIEUM
+ {0xB7FE, 0xB969}, //9368 #HANGUL SYLLABLE RIEUL YU PIEUP
+ {0xB841, 0xD1D0}, //9369 #HANGUL SYLLABLE THIEUTH WA SSANGSIOS
+ {0xB842, 0xD1D1}, //9370 #HANGUL SYLLABLE THIEUTH WA IEUNG
+ {0xB843, 0xD1D2}, //9371 #HANGUL SYLLABLE THIEUTH WA CIEUC
+ {0xB844, 0xD1D3}, //9372 #HANGUL SYLLABLE THIEUTH WA CHIEUCH
+ {0xB845, 0xD1D4}, //9373 #HANGUL SYLLABLE THIEUTH WA KHIEUKH
+ {0xB846, 0xD1D5}, //9374 #HANGUL SYLLABLE THIEUTH WA THIEUTH
+ {0xB847, 0xD1D6}, //9375 #HANGUL SYLLABLE THIEUTH WA PHIEUPH
+ {0xB848, 0xD1D7}, //9376 #HANGUL SYLLABLE THIEUTH WA HIEUH
+ {0xB849, 0xD1D9}, //9377 #HANGUL SYLLABLE THIEUTH WAE KIYEOK
+ {0xB84A, 0xD1DA}, //9378 #HANGUL SYLLABLE THIEUTH WAE SSANGKIYEOK
+ {0xB84B, 0xD1DB}, //9379 #HANGUL SYLLABLE THIEUTH WAE KIYEOKSIOS
+ {0xB84C, 0xD1DC}, //9380 #HANGUL SYLLABLE THIEUTH WAE NIEUN
+ {0xB84D, 0xD1DD}, //9381 #HANGUL SYLLABLE THIEUTH WAE NIEUNCIEUC
+ {0xB84E, 0xD1DE}, //9382 #HANGUL SYLLABLE THIEUTH WAE NIEUNHIEUH
+ {0xB84F, 0xD1DF}, //9383 #HANGUL SYLLABLE THIEUTH WAE TIKEUT
+ {0xB850, 0xD1E0}, //9384 #HANGUL SYLLABLE THIEUTH WAE RIEUL
+ {0xB851, 0xD1E1}, //9385 #HANGUL SYLLABLE THIEUTH WAE RIEULKIYEOK
+ {0xB852, 0xD1E2}, //9386 #HANGUL SYLLABLE THIEUTH WAE RIEULMIEUM
+ {0xB853, 0xD1E3}, //9387 #HANGUL SYLLABLE THIEUTH WAE RIEULPIEUP
+ {0xB854, 0xD1E4}, //9388 #HANGUL SYLLABLE THIEUTH WAE RIEULSIOS
+ {0xB855, 0xD1E5}, //9389 #HANGUL SYLLABLE THIEUTH WAE RIEULTHIEUTH
+ {0xB856, 0xD1E6}, //9390 #HANGUL SYLLABLE THIEUTH WAE RIEULPHIEUPH
+ {0xB857, 0xD1E7}, //9391 #HANGUL SYLLABLE THIEUTH WAE RIEULHIEUH
+ {0xB858, 0xD1E8}, //9392 #HANGUL SYLLABLE THIEUTH WAE MIEUM
+ {0xB859, 0xD1E9}, //9393 #HANGUL SYLLABLE THIEUTH WAE PIEUP
+ {0xB85A, 0xD1EA}, //9394 #HANGUL SYLLABLE THIEUTH WAE PIEUPSIOS
+ {0xB861, 0xD1EB}, //9395 #HANGUL SYLLABLE THIEUTH WAE SIOS
+ {0xB862, 0xD1EC}, //9396 #HANGUL SYLLABLE THIEUTH WAE SSANGSIOS
+ {0xB863, 0xD1ED}, //9397 #HANGUL SYLLABLE THIEUTH WAE IEUNG
+ {0xB864, 0xD1EE}, //9398 #HANGUL SYLLABLE THIEUTH WAE CIEUC
+ {0xB865, 0xD1EF}, //9399 #HANGUL SYLLABLE THIEUTH WAE CHIEUCH
+ {0xB866, 0xD1F0}, //9400 #HANGUL SYLLABLE THIEUTH WAE KHIEUKH
+ {0xB867, 0xD1F1}, //9401 #HANGUL SYLLABLE THIEUTH WAE THIEUTH
+ {0xB868, 0xD1F2}, //9402 #HANGUL SYLLABLE THIEUTH WAE PHIEUPH
+ {0xB869, 0xD1F3}, //9403 #HANGUL SYLLABLE THIEUTH WAE HIEUH
+ {0xB86A, 0xD1F5}, //9404 #HANGUL SYLLABLE THIEUTH OE KIYEOK
+ {0xB86B, 0xD1F6}, //9405 #HANGUL SYLLABLE THIEUTH OE SSANGKIYEOK
+ {0xB86C, 0xD1F7}, //9406 #HANGUL SYLLABLE THIEUTH OE KIYEOKSIOS
+ {0xB86D, 0xD1F9}, //9407 #HANGUL SYLLABLE THIEUTH OE NIEUNCIEUC
+ {0xB86E, 0xD1FA}, //9408 #HANGUL SYLLABLE THIEUTH OE NIEUNHIEUH
+ {0xB86F, 0xD1FB}, //9409 #HANGUL SYLLABLE THIEUTH OE TIKEUT
+ {0xB870, 0xD1FC}, //9410 #HANGUL SYLLABLE THIEUTH OE RIEUL
+ {0xB871, 0xD1FD}, //9411 #HANGUL SYLLABLE THIEUTH OE RIEULKIYEOK
+ {0xB872, 0xD1FE}, //9412 #HANGUL SYLLABLE THIEUTH OE RIEULMIEUM
+ {0xB873, 0xD1FF}, //9413 #HANGUL SYLLABLE THIEUTH OE RIEULPIEUP
+ {0xB874, 0xD200}, //9414 #HANGUL SYLLABLE THIEUTH OE RIEULSIOS
+ {0xB875, 0xD201}, //9415 #HANGUL SYLLABLE THIEUTH OE RIEULTHIEUTH
+ {0xB876, 0xD202}, //9416 #HANGUL SYLLABLE THIEUTH OE RIEULPHIEUPH
+ {0xB877, 0xD203}, //9417 #HANGUL SYLLABLE THIEUTH OE RIEULHIEUH
+ {0xB878, 0xD204}, //9418 #HANGUL SYLLABLE THIEUTH OE MIEUM
+ {0xB879, 0xD205}, //9419 #HANGUL SYLLABLE THIEUTH OE PIEUP
+ {0xB87A, 0xD206}, //9420 #HANGUL SYLLABLE THIEUTH OE PIEUPSIOS
+ {0xB881, 0xD208}, //9421 #HANGUL SYLLABLE THIEUTH OE SSANGSIOS
+ {0xB882, 0xD20A}, //9422 #HANGUL SYLLABLE THIEUTH OE CIEUC
+ {0xB883, 0xD20B}, //9423 #HANGUL SYLLABLE THIEUTH OE CHIEUCH
+ {0xB884, 0xD20C}, //9424 #HANGUL SYLLABLE THIEUTH OE KHIEUKH
+ {0xB885, 0xD20D}, //9425 #HANGUL SYLLABLE THIEUTH OE THIEUTH
+ {0xB886, 0xD20E}, //9426 #HANGUL SYLLABLE THIEUTH OE PHIEUPH
+ {0xB887, 0xD20F}, //9427 #HANGUL SYLLABLE THIEUTH OE HIEUH
+ {0xB888, 0xD211}, //9428 #HANGUL SYLLABLE THIEUTH YO KIYEOK
+ {0xB889, 0xD212}, //9429 #HANGUL SYLLABLE THIEUTH YO SSANGKIYEOK
+ {0xB88A, 0xD213}, //9430 #HANGUL SYLLABLE THIEUTH YO KIYEOKSIOS
+ {0xB88B, 0xD214}, //9431 #HANGUL SYLLABLE THIEUTH YO NIEUN
+ {0xB88C, 0xD215}, //9432 #HANGUL SYLLABLE THIEUTH YO NIEUNCIEUC
+ {0xB88D, 0xD216}, //9433 #HANGUL SYLLABLE THIEUTH YO NIEUNHIEUH
+ {0xB88E, 0xD217}, //9434 #HANGUL SYLLABLE THIEUTH YO TIKEUT
+ {0xB88F, 0xD218}, //9435 #HANGUL SYLLABLE THIEUTH YO RIEUL
+ {0xB890, 0xD219}, //9436 #HANGUL SYLLABLE THIEUTH YO RIEULKIYEOK
+ {0xB891, 0xD21A}, //9437 #HANGUL SYLLABLE THIEUTH YO RIEULMIEUM
+ {0xB892, 0xD21B}, //9438 #HANGUL SYLLABLE THIEUTH YO RIEULPIEUP
+ {0xB893, 0xD21C}, //9439 #HANGUL SYLLABLE THIEUTH YO RIEULSIOS
+ {0xB894, 0xD21D}, //9440 #HANGUL SYLLABLE THIEUTH YO RIEULTHIEUTH
+ {0xB895, 0xD21E}, //9441 #HANGUL SYLLABLE THIEUTH YO RIEULPHIEUPH
+ {0xB896, 0xD21F}, //9442 #HANGUL SYLLABLE THIEUTH YO RIEULHIEUH
+ {0xB897, 0xD220}, //9443 #HANGUL SYLLABLE THIEUTH YO MIEUM
+ {0xB898, 0xD221}, //9444 #HANGUL SYLLABLE THIEUTH YO PIEUP
+ {0xB899, 0xD222}, //9445 #HANGUL SYLLABLE THIEUTH YO PIEUPSIOS
+ {0xB89A, 0xD223}, //9446 #HANGUL SYLLABLE THIEUTH YO SIOS
+ {0xB89B, 0xD224}, //9447 #HANGUL SYLLABLE THIEUTH YO SSANGSIOS
+ {0xB89C, 0xD225}, //9448 #HANGUL SYLLABLE THIEUTH YO IEUNG
+ {0xB89D, 0xD226}, //9449 #HANGUL SYLLABLE THIEUTH YO CIEUC
+ {0xB89E, 0xD227}, //9450 #HANGUL SYLLABLE THIEUTH YO CHIEUCH
+ {0xB89F, 0xD228}, //9451 #HANGUL SYLLABLE THIEUTH YO KHIEUKH
+ {0xB8A0, 0xD229}, //9452 #HANGUL SYLLABLE THIEUTH YO THIEUTH
+ {0xB8A1, 0xB96B}, //9453 #HANGUL SYLLABLE RIEUL YU SIOS
+ {0xB8A2, 0xB96D}, //9454 #HANGUL SYLLABLE RIEUL YU IEUNG
+ {0xB8A3, 0xB974}, //9455 #HANGUL SYLLABLE RIEUL EU
+ {0xB8A4, 0xB975}, //9456 #HANGUL SYLLABLE RIEUL EU KIYEOK
+ {0xB8A5, 0xB978}, //9457 #HANGUL SYLLABLE RIEUL EU NIEUN
+ {0xB8A6, 0xB97C}, //9458 #HANGUL SYLLABLE RIEUL EU RIEUL
+ {0xB8A7, 0xB984}, //9459 #HANGUL SYLLABLE RIEUL EU MIEUM
+ {0xB8A8, 0xB985}, //9460 #HANGUL SYLLABLE RIEUL EU PIEUP
+ {0xB8A9, 0xB987}, //9461 #HANGUL SYLLABLE RIEUL EU SIOS
+ {0xB8AA, 0xB989}, //9462 #HANGUL SYLLABLE RIEUL EU IEUNG
+ {0xB8AB, 0xB98A}, //9463 #HANGUL SYLLABLE RIEUL EU CIEUC
+ {0xB8AC, 0xB98D}, //9464 #HANGUL SYLLABLE RIEUL EU THIEUTH
+ {0xB8AD, 0xB98E}, //9465 #HANGUL SYLLABLE RIEUL EU PHIEUPH
+ {0xB8AE, 0xB9AC}, //9466 #HANGUL SYLLABLE RIEUL I
+ {0xB8AF, 0xB9AD}, //9467 #HANGUL SYLLABLE RIEUL I KIYEOK
+ {0xB8B0, 0xB9B0}, //9468 #HANGUL SYLLABLE RIEUL I NIEUN
+ {0xB8B1, 0xB9B4}, //9469 #HANGUL SYLLABLE RIEUL I RIEUL
+ {0xB8B2, 0xB9BC}, //9470 #HANGUL SYLLABLE RIEUL I MIEUM
+ {0xB8B3, 0xB9BD}, //9471 #HANGUL SYLLABLE RIEUL I PIEUP
+ {0xB8B4, 0xB9BF}, //9472 #HANGUL SYLLABLE RIEUL I SIOS
+ {0xB8B5, 0xB9C1}, //9473 #HANGUL SYLLABLE RIEUL I IEUNG
+ {0xB8B6, 0xB9C8}, //9474 #HANGUL SYLLABLE MIEUM A
+ {0xB8B7, 0xB9C9}, //9475 #HANGUL SYLLABLE MIEUM A KIYEOK
+ {0xB8B8, 0xB9CC}, //9476 #HANGUL SYLLABLE MIEUM A NIEUN
+ {0xB8B9, 0xB9CE}, //9477 #HANGUL SYLLABLE MIEUM A NIEUNHIEUH
+ {0xB8BA, 0xB9CF}, //9478 #HANGUL SYLLABLE MIEUM A TIKEUT
+ {0xB8BB, 0xB9D0}, //9479 #HANGUL SYLLABLE MIEUM A RIEUL
+ {0xB8BC, 0xB9D1}, //9480 #HANGUL SYLLABLE MIEUM A RIEULKIYEOK
+ {0xB8BD, 0xB9D2}, //9481 #HANGUL SYLLABLE MIEUM A RIEULMIEUM
+ {0xB8BE, 0xB9D8}, //9482 #HANGUL SYLLABLE MIEUM A MIEUM
+ {0xB8BF, 0xB9D9}, //9483 #HANGUL SYLLABLE MIEUM A PIEUP
+ {0xB8C0, 0xB9DB}, //9484 #HANGUL SYLLABLE MIEUM A SIOS
+ {0xB8C1, 0xB9DD}, //9485 #HANGUL SYLLABLE MIEUM A IEUNG
+ {0xB8C2, 0xB9DE}, //9486 #HANGUL SYLLABLE MIEUM A CIEUC
+ {0xB8C3, 0xB9E1}, //9487 #HANGUL SYLLABLE MIEUM A THIEUTH
+ {0xB8C4, 0xB9E3}, //9488 #HANGUL SYLLABLE MIEUM A HIEUH
+ {0xB8C5, 0xB9E4}, //9489 #HANGUL SYLLABLE MIEUM AE
+ {0xB8C6, 0xB9E5}, //9490 #HANGUL SYLLABLE MIEUM AE KIYEOK
+ {0xB8C7, 0xB9E8}, //9491 #HANGUL SYLLABLE MIEUM AE NIEUN
+ {0xB8C8, 0xB9EC}, //9492 #HANGUL SYLLABLE MIEUM AE RIEUL
+ {0xB8C9, 0xB9F4}, //9493 #HANGUL SYLLABLE MIEUM AE MIEUM
+ {0xB8CA, 0xB9F5}, //9494 #HANGUL SYLLABLE MIEUM AE PIEUP
+ {0xB8CB, 0xB9F7}, //9495 #HANGUL SYLLABLE MIEUM AE SIOS
+ {0xB8CC, 0xB9F8}, //9496 #HANGUL SYLLABLE MIEUM AE SSANGSIOS
+ {0xB8CD, 0xB9F9}, //9497 #HANGUL SYLLABLE MIEUM AE IEUNG
+ {0xB8CE, 0xB9FA}, //9498 #HANGUL SYLLABLE MIEUM AE CIEUC
+ {0xB8CF, 0xBA00}, //9499 #HANGUL SYLLABLE MIEUM YA
+ {0xB8D0, 0xBA01}, //9500 #HANGUL SYLLABLE MIEUM YA KIYEOK
+ {0xB8D1, 0xBA08}, //9501 #HANGUL SYLLABLE MIEUM YA RIEUL
+ {0xB8D2, 0xBA15}, //9502 #HANGUL SYLLABLE MIEUM YA IEUNG
+ {0xB8D3, 0xBA38}, //9503 #HANGUL SYLLABLE MIEUM EO
+ {0xB8D4, 0xBA39}, //9504 #HANGUL SYLLABLE MIEUM EO KIYEOK
+ {0xB8D5, 0xBA3C}, //9505 #HANGUL SYLLABLE MIEUM EO NIEUN
+ {0xB8D6, 0xBA40}, //9506 #HANGUL SYLLABLE MIEUM EO RIEUL
+ {0xB8D7, 0xBA42}, //9507 #HANGUL SYLLABLE MIEUM EO RIEULMIEUM
+ {0xB8D8, 0xBA48}, //9508 #HANGUL SYLLABLE MIEUM EO MIEUM
+ {0xB8D9, 0xBA49}, //9509 #HANGUL SYLLABLE MIEUM EO PIEUP
+ {0xB8DA, 0xBA4B}, //9510 #HANGUL SYLLABLE MIEUM EO SIOS
+ {0xB8DB, 0xBA4D}, //9511 #HANGUL SYLLABLE MIEUM EO IEUNG
+ {0xB8DC, 0xBA4E}, //9512 #HANGUL SYLLABLE MIEUM EO CIEUC
+ {0xB8DD, 0xBA53}, //9513 #HANGUL SYLLABLE MIEUM EO HIEUH
+ {0xB8DE, 0xBA54}, //9514 #HANGUL SYLLABLE MIEUM E
+ {0xB8DF, 0xBA55}, //9515 #HANGUL SYLLABLE MIEUM E KIYEOK
+ {0xB8E0, 0xBA58}, //9516 #HANGUL SYLLABLE MIEUM E NIEUN
+ {0xB8E1, 0xBA5C}, //9517 #HANGUL SYLLABLE MIEUM E RIEUL
+ {0xB8E2, 0xBA64}, //9518 #HANGUL SYLLABLE MIEUM E MIEUM
+ {0xB8E3, 0xBA65}, //9519 #HANGUL SYLLABLE MIEUM E PIEUP
+ {0xB8E4, 0xBA67}, //9520 #HANGUL SYLLABLE MIEUM E SIOS
+ {0xB8E5, 0xBA68}, //9521 #HANGUL SYLLABLE MIEUM E SSANGSIOS
+ {0xB8E6, 0xBA69}, //9522 #HANGUL SYLLABLE MIEUM E IEUNG
+ {0xB8E7, 0xBA70}, //9523 #HANGUL SYLLABLE MIEUM YEO
+ {0xB8E8, 0xBA71}, //9524 #HANGUL SYLLABLE MIEUM YEO KIYEOK
+ {0xB8E9, 0xBA74}, //9525 #HANGUL SYLLABLE MIEUM YEO NIEUN
+ {0xB8EA, 0xBA78}, //9526 #HANGUL SYLLABLE MIEUM YEO RIEUL
+ {0xB8EB, 0xBA83}, //9527 #HANGUL SYLLABLE MIEUM YEO SIOS
+ {0xB8EC, 0xBA84}, //9528 #HANGUL SYLLABLE MIEUM YEO SSANGSIOS
+ {0xB8ED, 0xBA85}, //9529 #HANGUL SYLLABLE MIEUM YEO IEUNG
+ {0xB8EE, 0xBA87}, //9530 #HANGUL SYLLABLE MIEUM YEO CHIEUCH
+ {0xB8EF, 0xBA8C}, //9531 #HANGUL SYLLABLE MIEUM YE
+ {0xB8F0, 0xBAA8}, //9532 #HANGUL SYLLABLE MIEUM O
+ {0xB8F1, 0xBAA9}, //9533 #HANGUL SYLLABLE MIEUM O KIYEOK
+ {0xB8F2, 0xBAAB}, //9534 #HANGUL SYLLABLE MIEUM O KIYEOKSIOS
+ {0xB8F3, 0xBAAC}, //9535 #HANGUL SYLLABLE MIEUM O NIEUN
+ {0xB8F4, 0xBAB0}, //9536 #HANGUL SYLLABLE MIEUM O RIEUL
+ {0xB8F5, 0xBAB2}, //9537 #HANGUL SYLLABLE MIEUM O RIEULMIEUM
+ {0xB8F6, 0xBAB8}, //9538 #HANGUL SYLLABLE MIEUM O MIEUM
+ {0xB8F7, 0xBAB9}, //9539 #HANGUL SYLLABLE MIEUM O PIEUP
+ {0xB8F8, 0xBABB}, //9540 #HANGUL SYLLABLE MIEUM O SIOS
+ {0xB8F9, 0xBABD}, //9541 #HANGUL SYLLABLE MIEUM O IEUNG
+ {0xB8FA, 0xBAC4}, //9542 #HANGUL SYLLABLE MIEUM WA
+ {0xB8FB, 0xBAC8}, //9543 #HANGUL SYLLABLE MIEUM WA NIEUN
+ {0xB8FC, 0xBAD8}, //9544 #HANGUL SYLLABLE MIEUM WA SSANGSIOS
+ {0xB8FD, 0xBAD9}, //9545 #HANGUL SYLLABLE MIEUM WA IEUNG
+ {0xB8FE, 0xBAFC}, //9546 #HANGUL SYLLABLE MIEUM OE
+ {0xB941, 0xD22A}, //9547 #HANGUL SYLLABLE THIEUTH YO PHIEUPH
+ {0xB942, 0xD22B}, //9548 #HANGUL SYLLABLE THIEUTH YO HIEUH
+ {0xB943, 0xD22E}, //9549 #HANGUL SYLLABLE THIEUTH U SSANGKIYEOK
+ {0xB944, 0xD22F}, //9550 #HANGUL SYLLABLE THIEUTH U KIYEOKSIOS
+ {0xB945, 0xD231}, //9551 #HANGUL SYLLABLE THIEUTH U NIEUNCIEUC
+ {0xB946, 0xD232}, //9552 #HANGUL SYLLABLE THIEUTH U NIEUNHIEUH
+ {0xB947, 0xD233}, //9553 #HANGUL SYLLABLE THIEUTH U TIKEUT
+ {0xB948, 0xD235}, //9554 #HANGUL SYLLABLE THIEUTH U RIEULKIYEOK
+ {0xB949, 0xD236}, //9555 #HANGUL SYLLABLE THIEUTH U RIEULMIEUM
+ {0xB94A, 0xD237}, //9556 #HANGUL SYLLABLE THIEUTH U RIEULPIEUP
+ {0xB94B, 0xD238}, //9557 #HANGUL SYLLABLE THIEUTH U RIEULSIOS
+ {0xB94C, 0xD239}, //9558 #HANGUL SYLLABLE THIEUTH U RIEULTHIEUTH
+ {0xB94D, 0xD23A}, //9559 #HANGUL SYLLABLE THIEUTH U RIEULPHIEUPH
+ {0xB94E, 0xD23B}, //9560 #HANGUL SYLLABLE THIEUTH U RIEULHIEUH
+ {0xB94F, 0xD23E}, //9561 #HANGUL SYLLABLE THIEUTH U PIEUPSIOS
+ {0xB950, 0xD240}, //9562 #HANGUL SYLLABLE THIEUTH U SSANGSIOS
+ {0xB951, 0xD242}, //9563 #HANGUL SYLLABLE THIEUTH U CIEUC
+ {0xB952, 0xD243}, //9564 #HANGUL SYLLABLE THIEUTH U CHIEUCH
+ {0xB953, 0xD244}, //9565 #HANGUL SYLLABLE THIEUTH U KHIEUKH
+ {0xB954, 0xD245}, //9566 #HANGUL SYLLABLE THIEUTH U THIEUTH
+ {0xB955, 0xD246}, //9567 #HANGUL SYLLABLE THIEUTH U PHIEUPH
+ {0xB956, 0xD247}, //9568 #HANGUL SYLLABLE THIEUTH U HIEUH
+ {0xB957, 0xD249}, //9569 #HANGUL SYLLABLE THIEUTH WEO KIYEOK
+ {0xB958, 0xD24A}, //9570 #HANGUL SYLLABLE THIEUTH WEO SSANGKIYEOK
+ {0xB959, 0xD24B}, //9571 #HANGUL SYLLABLE THIEUTH WEO KIYEOKSIOS
+ {0xB95A, 0xD24C}, //9572 #HANGUL SYLLABLE THIEUTH WEO NIEUN
+ {0xB961, 0xD24D}, //9573 #HANGUL SYLLABLE THIEUTH WEO NIEUNCIEUC
+ {0xB962, 0xD24E}, //9574 #HANGUL SYLLABLE THIEUTH WEO NIEUNHIEUH
+ {0xB963, 0xD24F}, //9575 #HANGUL SYLLABLE THIEUTH WEO TIKEUT
+ {0xB964, 0xD250}, //9576 #HANGUL SYLLABLE THIEUTH WEO RIEUL
+ {0xB965, 0xD251}, //9577 #HANGUL SYLLABLE THIEUTH WEO RIEULKIYEOK
+ {0xB966, 0xD252}, //9578 #HANGUL SYLLABLE THIEUTH WEO RIEULMIEUM
+ {0xB967, 0xD253}, //9579 #HANGUL SYLLABLE THIEUTH WEO RIEULPIEUP
+ {0xB968, 0xD254}, //9580 #HANGUL SYLLABLE THIEUTH WEO RIEULSIOS
+ {0xB969, 0xD255}, //9581 #HANGUL SYLLABLE THIEUTH WEO RIEULTHIEUTH
+ {0xB96A, 0xD256}, //9582 #HANGUL SYLLABLE THIEUTH WEO RIEULPHIEUPH
+ {0xB96B, 0xD257}, //9583 #HANGUL SYLLABLE THIEUTH WEO RIEULHIEUH
+ {0xB96C, 0xD258}, //9584 #HANGUL SYLLABLE THIEUTH WEO MIEUM
+ {0xB96D, 0xD259}, //9585 #HANGUL SYLLABLE THIEUTH WEO PIEUP
+ {0xB96E, 0xD25A}, //9586 #HANGUL SYLLABLE THIEUTH WEO PIEUPSIOS
+ {0xB96F, 0xD25B}, //9587 #HANGUL SYLLABLE THIEUTH WEO SIOS
+ {0xB970, 0xD25D}, //9588 #HANGUL SYLLABLE THIEUTH WEO IEUNG
+ {0xB971, 0xD25E}, //9589 #HANGUL SYLLABLE THIEUTH WEO CIEUC
+ {0xB972, 0xD25F}, //9590 #HANGUL SYLLABLE THIEUTH WEO CHIEUCH
+ {0xB973, 0xD260}, //9591 #HANGUL SYLLABLE THIEUTH WEO KHIEUKH
+ {0xB974, 0xD261}, //9592 #HANGUL SYLLABLE THIEUTH WEO THIEUTH
+ {0xB975, 0xD262}, //9593 #HANGUL SYLLABLE THIEUTH WEO PHIEUPH
+ {0xB976, 0xD263}, //9594 #HANGUL SYLLABLE THIEUTH WEO HIEUH
+ {0xB977, 0xD265}, //9595 #HANGUL SYLLABLE THIEUTH WE KIYEOK
+ {0xB978, 0xD266}, //9596 #HANGUL SYLLABLE THIEUTH WE SSANGKIYEOK
+ {0xB979, 0xD267}, //9597 #HANGUL SYLLABLE THIEUTH WE KIYEOKSIOS
+ {0xB97A, 0xD268}, //9598 #HANGUL SYLLABLE THIEUTH WE NIEUN
+ {0xB981, 0xD269}, //9599 #HANGUL SYLLABLE THIEUTH WE NIEUNCIEUC
+ {0xB982, 0xD26A}, //9600 #HANGUL SYLLABLE THIEUTH WE NIEUNHIEUH
+ {0xB983, 0xD26B}, //9601 #HANGUL SYLLABLE THIEUTH WE TIKEUT
+ {0xB984, 0xD26C}, //9602 #HANGUL SYLLABLE THIEUTH WE RIEUL
+ {0xB985, 0xD26D}, //9603 #HANGUL SYLLABLE THIEUTH WE RIEULKIYEOK
+ {0xB986, 0xD26E}, //9604 #HANGUL SYLLABLE THIEUTH WE RIEULMIEUM
+ {0xB987, 0xD26F}, //9605 #HANGUL SYLLABLE THIEUTH WE RIEULPIEUP
+ {0xB988, 0xD270}, //9606 #HANGUL SYLLABLE THIEUTH WE RIEULSIOS
+ {0xB989, 0xD271}, //9607 #HANGUL SYLLABLE THIEUTH WE RIEULTHIEUTH
+ {0xB98A, 0xD272}, //9608 #HANGUL SYLLABLE THIEUTH WE RIEULPHIEUPH
+ {0xB98B, 0xD273}, //9609 #HANGUL SYLLABLE THIEUTH WE RIEULHIEUH
+ {0xB98C, 0xD274}, //9610 #HANGUL SYLLABLE THIEUTH WE MIEUM
+ {0xB98D, 0xD275}, //9611 #HANGUL SYLLABLE THIEUTH WE PIEUP
+ {0xB98E, 0xD276}, //9612 #HANGUL SYLLABLE THIEUTH WE PIEUPSIOS
+ {0xB98F, 0xD277}, //9613 #HANGUL SYLLABLE THIEUTH WE SIOS
+ {0xB990, 0xD278}, //9614 #HANGUL SYLLABLE THIEUTH WE SSANGSIOS
+ {0xB991, 0xD279}, //9615 #HANGUL SYLLABLE THIEUTH WE IEUNG
+ {0xB992, 0xD27A}, //9616 #HANGUL SYLLABLE THIEUTH WE CIEUC
+ {0xB993, 0xD27B}, //9617 #HANGUL SYLLABLE THIEUTH WE CHIEUCH
+ {0xB994, 0xD27C}, //9618 #HANGUL SYLLABLE THIEUTH WE KHIEUKH
+ {0xB995, 0xD27D}, //9619 #HANGUL SYLLABLE THIEUTH WE THIEUTH
+ {0xB996, 0xD27E}, //9620 #HANGUL SYLLABLE THIEUTH WE PHIEUPH
+ {0xB997, 0xD27F}, //9621 #HANGUL SYLLABLE THIEUTH WE HIEUH
+ {0xB998, 0xD282}, //9622 #HANGUL SYLLABLE THIEUTH WI SSANGKIYEOK
+ {0xB999, 0xD283}, //9623 #HANGUL SYLLABLE THIEUTH WI KIYEOKSIOS
+ {0xB99A, 0xD285}, //9624 #HANGUL SYLLABLE THIEUTH WI NIEUNCIEUC
+ {0xB99B, 0xD286}, //9625 #HANGUL SYLLABLE THIEUTH WI NIEUNHIEUH
+ {0xB99C, 0xD287}, //9626 #HANGUL SYLLABLE THIEUTH WI TIKEUT
+ {0xB99D, 0xD289}, //9627 #HANGUL SYLLABLE THIEUTH WI RIEULKIYEOK
+ {0xB99E, 0xD28A}, //9628 #HANGUL SYLLABLE THIEUTH WI RIEULMIEUM
+ {0xB99F, 0xD28B}, //9629 #HANGUL SYLLABLE THIEUTH WI RIEULPIEUP
+ {0xB9A0, 0xD28C}, //9630 #HANGUL SYLLABLE THIEUTH WI RIEULSIOS
+ {0xB9A1, 0xBB00}, //9631 #HANGUL SYLLABLE MIEUM OE NIEUN
+ {0xB9A2, 0xBB04}, //9632 #HANGUL SYLLABLE MIEUM OE RIEUL
+ {0xB9A3, 0xBB0D}, //9633 #HANGUL SYLLABLE MIEUM OE PIEUP
+ {0xB9A4, 0xBB0F}, //9634 #HANGUL SYLLABLE MIEUM OE SIOS
+ {0xB9A5, 0xBB11}, //9635 #HANGUL SYLLABLE MIEUM OE IEUNG
+ {0xB9A6, 0xBB18}, //9636 #HANGUL SYLLABLE MIEUM YO
+ {0xB9A7, 0xBB1C}, //9637 #HANGUL SYLLABLE MIEUM YO NIEUN
+ {0xB9A8, 0xBB20}, //9638 #HANGUL SYLLABLE MIEUM YO RIEUL
+ {0xB9A9, 0xBB29}, //9639 #HANGUL SYLLABLE MIEUM YO PIEUP
+ {0xB9AA, 0xBB2B}, //9640 #HANGUL SYLLABLE MIEUM YO SIOS
+ {0xB9AB, 0xBB34}, //9641 #HANGUL SYLLABLE MIEUM U
+ {0xB9AC, 0xBB35}, //9642 #HANGUL SYLLABLE MIEUM U KIYEOK
+ {0xB9AD, 0xBB36}, //9643 #HANGUL SYLLABLE MIEUM U SSANGKIYEOK
+ {0xB9AE, 0xBB38}, //9644 #HANGUL SYLLABLE MIEUM U NIEUN
+ {0xB9AF, 0xBB3B}, //9645 #HANGUL SYLLABLE MIEUM U TIKEUT
+ {0xB9B0, 0xBB3C}, //9646 #HANGUL SYLLABLE MIEUM U RIEUL
+ {0xB9B1, 0xBB3D}, //9647 #HANGUL SYLLABLE MIEUM U RIEULKIYEOK
+ {0xB9B2, 0xBB3E}, //9648 #HANGUL SYLLABLE MIEUM U RIEULMIEUM
+ {0xB9B3, 0xBB44}, //9649 #HANGUL SYLLABLE MIEUM U MIEUM
+ {0xB9B4, 0xBB45}, //9650 #HANGUL SYLLABLE MIEUM U PIEUP
+ {0xB9B5, 0xBB47}, //9651 #HANGUL SYLLABLE MIEUM U SIOS
+ {0xB9B6, 0xBB49}, //9652 #HANGUL SYLLABLE MIEUM U IEUNG
+ {0xB9B7, 0xBB4D}, //9653 #HANGUL SYLLABLE MIEUM U THIEUTH
+ {0xB9B8, 0xBB4F}, //9654 #HANGUL SYLLABLE MIEUM U HIEUH
+ {0xB9B9, 0xBB50}, //9655 #HANGUL SYLLABLE MIEUM WEO
+ {0xB9BA, 0xBB54}, //9656 #HANGUL SYLLABLE MIEUM WEO NIEUN
+ {0xB9BB, 0xBB58}, //9657 #HANGUL SYLLABLE MIEUM WEO RIEUL
+ {0xB9BC, 0xBB61}, //9658 #HANGUL SYLLABLE MIEUM WEO PIEUP
+ {0xB9BD, 0xBB63}, //9659 #HANGUL SYLLABLE MIEUM WEO SIOS
+ {0xB9BE, 0xBB6C}, //9660 #HANGUL SYLLABLE MIEUM WE
+ {0xB9BF, 0xBB88}, //9661 #HANGUL SYLLABLE MIEUM WI
+ {0xB9C0, 0xBB8C}, //9662 #HANGUL SYLLABLE MIEUM WI NIEUN
+ {0xB9C1, 0xBB90}, //9663 #HANGUL SYLLABLE MIEUM WI RIEUL
+ {0xB9C2, 0xBBA4}, //9664 #HANGUL SYLLABLE MIEUM YU
+ {0xB9C3, 0xBBA8}, //9665 #HANGUL SYLLABLE MIEUM YU NIEUN
+ {0xB9C4, 0xBBAC}, //9666 #HANGUL SYLLABLE MIEUM YU RIEUL
+ {0xB9C5, 0xBBB4}, //9667 #HANGUL SYLLABLE MIEUM YU MIEUM
+ {0xB9C6, 0xBBB7}, //9668 #HANGUL SYLLABLE MIEUM YU SIOS
+ {0xB9C7, 0xBBC0}, //9669 #HANGUL SYLLABLE MIEUM EU
+ {0xB9C8, 0xBBC4}, //9670 #HANGUL SYLLABLE MIEUM EU NIEUN
+ {0xB9C9, 0xBBC8}, //9671 #HANGUL SYLLABLE MIEUM EU RIEUL
+ {0xB9CA, 0xBBD0}, //9672 #HANGUL SYLLABLE MIEUM EU MIEUM
+ {0xB9CB, 0xBBD3}, //9673 #HANGUL SYLLABLE MIEUM EU SIOS
+ {0xB9CC, 0xBBF8}, //9674 #HANGUL SYLLABLE MIEUM I
+ {0xB9CD, 0xBBF9}, //9675 #HANGUL SYLLABLE MIEUM I KIYEOK
+ {0xB9CE, 0xBBFC}, //9676 #HANGUL SYLLABLE MIEUM I NIEUN
+ {0xB9CF, 0xBBFF}, //9677 #HANGUL SYLLABLE MIEUM I TIKEUT
+ {0xB9D0, 0xBC00}, //9678 #HANGUL SYLLABLE MIEUM I RIEUL
+ {0xB9D1, 0xBC02}, //9679 #HANGUL SYLLABLE MIEUM I RIEULMIEUM
+ {0xB9D2, 0xBC08}, //9680 #HANGUL SYLLABLE MIEUM I MIEUM
+ {0xB9D3, 0xBC09}, //9681 #HANGUL SYLLABLE MIEUM I PIEUP
+ {0xB9D4, 0xBC0B}, //9682 #HANGUL SYLLABLE MIEUM I SIOS
+ {0xB9D5, 0xBC0C}, //9683 #HANGUL SYLLABLE MIEUM I SSANGSIOS
+ {0xB9D6, 0xBC0D}, //9684 #HANGUL SYLLABLE MIEUM I IEUNG
+ {0xB9D7, 0xBC0F}, //9685 #HANGUL SYLLABLE MIEUM I CHIEUCH
+ {0xB9D8, 0xBC11}, //9686 #HANGUL SYLLABLE MIEUM I THIEUTH
+ {0xB9D9, 0xBC14}, //9687 #HANGUL SYLLABLE PIEUP A
+ {0xB9DA, 0xBC15}, //9688 #HANGUL SYLLABLE PIEUP A KIYEOK
+ {0xB9DB, 0xBC16}, //9689 #HANGUL SYLLABLE PIEUP A SSANGKIYEOK
+ {0xB9DC, 0xBC17}, //9690 #HANGUL SYLLABLE PIEUP A KIYEOKSIOS
+ {0xB9DD, 0xBC18}, //9691 #HANGUL SYLLABLE PIEUP A NIEUN
+ {0xB9DE, 0xBC1B}, //9692 #HANGUL SYLLABLE PIEUP A TIKEUT
+ {0xB9DF, 0xBC1C}, //9693 #HANGUL SYLLABLE PIEUP A RIEUL
+ {0xB9E0, 0xBC1D}, //9694 #HANGUL SYLLABLE PIEUP A RIEULKIYEOK
+ {0xB9E1, 0xBC1E}, //9695 #HANGUL SYLLABLE PIEUP A RIEULMIEUM
+ {0xB9E2, 0xBC1F}, //9696 #HANGUL SYLLABLE PIEUP A RIEULPIEUP
+ {0xB9E3, 0xBC24}, //9697 #HANGUL SYLLABLE PIEUP A MIEUM
+ {0xB9E4, 0xBC25}, //9698 #HANGUL SYLLABLE PIEUP A PIEUP
+ {0xB9E5, 0xBC27}, //9699 #HANGUL SYLLABLE PIEUP A SIOS
+ {0xB9E6, 0xBC29}, //9700 #HANGUL SYLLABLE PIEUP A IEUNG
+ {0xB9E7, 0xBC2D}, //9701 #HANGUL SYLLABLE PIEUP A THIEUTH
+ {0xB9E8, 0xBC30}, //9702 #HANGUL SYLLABLE PIEUP AE
+ {0xB9E9, 0xBC31}, //9703 #HANGUL SYLLABLE PIEUP AE KIYEOK
+ {0xB9EA, 0xBC34}, //9704 #HANGUL SYLLABLE PIEUP AE NIEUN
+ {0xB9EB, 0xBC38}, //9705 #HANGUL SYLLABLE PIEUP AE RIEUL
+ {0xB9EC, 0xBC40}, //9706 #HANGUL SYLLABLE PIEUP AE MIEUM
+ {0xB9ED, 0xBC41}, //9707 #HANGUL SYLLABLE PIEUP AE PIEUP
+ {0xB9EE, 0xBC43}, //9708 #HANGUL SYLLABLE PIEUP AE SIOS
+ {0xB9EF, 0xBC44}, //9709 #HANGUL SYLLABLE PIEUP AE SSANGSIOS
+ {0xB9F0, 0xBC45}, //9710 #HANGUL SYLLABLE PIEUP AE IEUNG
+ {0xB9F1, 0xBC49}, //9711 #HANGUL SYLLABLE PIEUP AE THIEUTH
+ {0xB9F2, 0xBC4C}, //9712 #HANGUL SYLLABLE PIEUP YA
+ {0xB9F3, 0xBC4D}, //9713 #HANGUL SYLLABLE PIEUP YA KIYEOK
+ {0xB9F4, 0xBC50}, //9714 #HANGUL SYLLABLE PIEUP YA NIEUN
+ {0xB9F5, 0xBC5D}, //9715 #HANGUL SYLLABLE PIEUP YA PIEUP
+ {0xB9F6, 0xBC84}, //9716 #HANGUL SYLLABLE PIEUP EO
+ {0xB9F7, 0xBC85}, //9717 #HANGUL SYLLABLE PIEUP EO KIYEOK
+ {0xB9F8, 0xBC88}, //9718 #HANGUL SYLLABLE PIEUP EO NIEUN
+ {0xB9F9, 0xBC8B}, //9719 #HANGUL SYLLABLE PIEUP EO TIKEUT
+ {0xB9FA, 0xBC8C}, //9720 #HANGUL SYLLABLE PIEUP EO RIEUL
+ {0xB9FB, 0xBC8E}, //9721 #HANGUL SYLLABLE PIEUP EO RIEULMIEUM
+ {0xB9FC, 0xBC94}, //9722 #HANGUL SYLLABLE PIEUP EO MIEUM
+ {0xB9FD, 0xBC95}, //9723 #HANGUL SYLLABLE PIEUP EO PIEUP
+ {0xB9FE, 0xBC97}, //9724 #HANGUL SYLLABLE PIEUP EO SIOS
+ {0xBA41, 0xD28D}, //9725 #HANGUL SYLLABLE THIEUTH WI RIEULTHIEUTH
+ {0xBA42, 0xD28E}, //9726 #HANGUL SYLLABLE THIEUTH WI RIEULPHIEUPH
+ {0xBA43, 0xD28F}, //9727 #HANGUL SYLLABLE THIEUTH WI RIEULHIEUH
+ {0xBA44, 0xD292}, //9728 #HANGUL SYLLABLE THIEUTH WI PIEUPSIOS
+ {0xBA45, 0xD293}, //9729 #HANGUL SYLLABLE THIEUTH WI SIOS
+ {0xBA46, 0xD294}, //9730 #HANGUL SYLLABLE THIEUTH WI SSANGSIOS
+ {0xBA47, 0xD296}, //9731 #HANGUL SYLLABLE THIEUTH WI CIEUC
+ {0xBA48, 0xD297}, //9732 #HANGUL SYLLABLE THIEUTH WI CHIEUCH
+ {0xBA49, 0xD298}, //9733 #HANGUL SYLLABLE THIEUTH WI KHIEUKH
+ {0xBA4A, 0xD299}, //9734 #HANGUL SYLLABLE THIEUTH WI THIEUTH
+ {0xBA4B, 0xD29A}, //9735 #HANGUL SYLLABLE THIEUTH WI PHIEUPH
+ {0xBA4C, 0xD29B}, //9736 #HANGUL SYLLABLE THIEUTH WI HIEUH
+ {0xBA4D, 0xD29D}, //9737 #HANGUL SYLLABLE THIEUTH YU KIYEOK
+ {0xBA4E, 0xD29E}, //9738 #HANGUL SYLLABLE THIEUTH YU SSANGKIYEOK
+ {0xBA4F, 0xD29F}, //9739 #HANGUL SYLLABLE THIEUTH YU KIYEOKSIOS
+ {0xBA50, 0xD2A1}, //9740 #HANGUL SYLLABLE THIEUTH YU NIEUNCIEUC
+ {0xBA51, 0xD2A2}, //9741 #HANGUL SYLLABLE THIEUTH YU NIEUNHIEUH
+ {0xBA52, 0xD2A3}, //9742 #HANGUL SYLLABLE THIEUTH YU TIKEUT
+ {0xBA53, 0xD2A5}, //9743 #HANGUL SYLLABLE THIEUTH YU RIEULKIYEOK
+ {0xBA54, 0xD2A6}, //9744 #HANGUL SYLLABLE THIEUTH YU RIEULMIEUM
+ {0xBA55, 0xD2A7}, //9745 #HANGUL SYLLABLE THIEUTH YU RIEULPIEUP
+ {0xBA56, 0xD2A8}, //9746 #HANGUL SYLLABLE THIEUTH YU RIEULSIOS
+ {0xBA57, 0xD2A9}, //9747 #HANGUL SYLLABLE THIEUTH YU RIEULTHIEUTH
+ {0xBA58, 0xD2AA}, //9748 #HANGUL SYLLABLE THIEUTH YU RIEULPHIEUPH
+ {0xBA59, 0xD2AB}, //9749 #HANGUL SYLLABLE THIEUTH YU RIEULHIEUH
+ {0xBA5A, 0xD2AD}, //9750 #HANGUL SYLLABLE THIEUTH YU PIEUP
+ {0xBA61, 0xD2AE}, //9751 #HANGUL SYLLABLE THIEUTH YU PIEUPSIOS
+ {0xBA62, 0xD2AF}, //9752 #HANGUL SYLLABLE THIEUTH YU SIOS
+ {0xBA63, 0xD2B0}, //9753 #HANGUL SYLLABLE THIEUTH YU SSANGSIOS
+ {0xBA64, 0xD2B2}, //9754 #HANGUL SYLLABLE THIEUTH YU CIEUC
+ {0xBA65, 0xD2B3}, //9755 #HANGUL SYLLABLE THIEUTH YU CHIEUCH
+ {0xBA66, 0xD2B4}, //9756 #HANGUL SYLLABLE THIEUTH YU KHIEUKH
+ {0xBA67, 0xD2B5}, //9757 #HANGUL SYLLABLE THIEUTH YU THIEUTH
+ {0xBA68, 0xD2B6}, //9758 #HANGUL SYLLABLE THIEUTH YU PHIEUPH
+ {0xBA69, 0xD2B7}, //9759 #HANGUL SYLLABLE THIEUTH YU HIEUH
+ {0xBA6A, 0xD2BA}, //9760 #HANGUL SYLLABLE THIEUTH EU SSANGKIYEOK
+ {0xBA6B, 0xD2BB}, //9761 #HANGUL SYLLABLE THIEUTH EU KIYEOKSIOS
+ {0xBA6C, 0xD2BD}, //9762 #HANGUL SYLLABLE THIEUTH EU NIEUNCIEUC
+ {0xBA6D, 0xD2BE}, //9763 #HANGUL SYLLABLE THIEUTH EU NIEUNHIEUH
+ {0xBA6E, 0xD2C1}, //9764 #HANGUL SYLLABLE THIEUTH EU RIEULKIYEOK
+ {0xBA6F, 0xD2C3}, //9765 #HANGUL SYLLABLE THIEUTH EU RIEULPIEUP
+ {0xBA70, 0xD2C4}, //9766 #HANGUL SYLLABLE THIEUTH EU RIEULSIOS
+ {0xBA71, 0xD2C5}, //9767 #HANGUL SYLLABLE THIEUTH EU RIEULTHIEUTH
+ {0xBA72, 0xD2C6}, //9768 #HANGUL SYLLABLE THIEUTH EU RIEULPHIEUPH
+ {0xBA73, 0xD2C7}, //9769 #HANGUL SYLLABLE THIEUTH EU RIEULHIEUH
+ {0xBA74, 0xD2CA}, //9770 #HANGUL SYLLABLE THIEUTH EU PIEUPSIOS
+ {0xBA75, 0xD2CC}, //9771 #HANGUL SYLLABLE THIEUTH EU SSANGSIOS
+ {0xBA76, 0xD2CD}, //9772 #HANGUL SYLLABLE THIEUTH EU IEUNG
+ {0xBA77, 0xD2CE}, //9773 #HANGUL SYLLABLE THIEUTH EU CIEUC
+ {0xBA78, 0xD2CF}, //9774 #HANGUL SYLLABLE THIEUTH EU CHIEUCH
+ {0xBA79, 0xD2D0}, //9775 #HANGUL SYLLABLE THIEUTH EU KHIEUKH
+ {0xBA7A, 0xD2D1}, //9776 #HANGUL SYLLABLE THIEUTH EU THIEUTH
+ {0xBA81, 0xD2D2}, //9777 #HANGUL SYLLABLE THIEUTH EU PHIEUPH
+ {0xBA82, 0xD2D3}, //9778 #HANGUL SYLLABLE THIEUTH EU HIEUH
+ {0xBA83, 0xD2D5}, //9779 #HANGUL SYLLABLE THIEUTH YI KIYEOK
+ {0xBA84, 0xD2D6}, //9780 #HANGUL SYLLABLE THIEUTH YI SSANGKIYEOK
+ {0xBA85, 0xD2D7}, //9781 #HANGUL SYLLABLE THIEUTH YI KIYEOKSIOS
+ {0xBA86, 0xD2D9}, //9782 #HANGUL SYLLABLE THIEUTH YI NIEUNCIEUC
+ {0xBA87, 0xD2DA}, //9783 #HANGUL SYLLABLE THIEUTH YI NIEUNHIEUH
+ {0xBA88, 0xD2DB}, //9784 #HANGUL SYLLABLE THIEUTH YI TIKEUT
+ {0xBA89, 0xD2DD}, //9785 #HANGUL SYLLABLE THIEUTH YI RIEULKIYEOK
+ {0xBA8A, 0xD2DE}, //9786 #HANGUL SYLLABLE THIEUTH YI RIEULMIEUM
+ {0xBA8B, 0xD2DF}, //9787 #HANGUL SYLLABLE THIEUTH YI RIEULPIEUP
+ {0xBA8C, 0xD2E0}, //9788 #HANGUL SYLLABLE THIEUTH YI RIEULSIOS
+ {0xBA8D, 0xD2E1}, //9789 #HANGUL SYLLABLE THIEUTH YI RIEULTHIEUTH
+ {0xBA8E, 0xD2E2}, //9790 #HANGUL SYLLABLE THIEUTH YI RIEULPHIEUPH
+ {0xBA8F, 0xD2E3}, //9791 #HANGUL SYLLABLE THIEUTH YI RIEULHIEUH
+ {0xBA90, 0xD2E6}, //9792 #HANGUL SYLLABLE THIEUTH YI PIEUPSIOS
+ {0xBA91, 0xD2E7}, //9793 #HANGUL SYLLABLE THIEUTH YI SIOS
+ {0xBA92, 0xD2E8}, //9794 #HANGUL SYLLABLE THIEUTH YI SSANGSIOS
+ {0xBA93, 0xD2E9}, //9795 #HANGUL SYLLABLE THIEUTH YI IEUNG
+ {0xBA94, 0xD2EA}, //9796 #HANGUL SYLLABLE THIEUTH YI CIEUC
+ {0xBA95, 0xD2EB}, //9797 #HANGUL SYLLABLE THIEUTH YI CHIEUCH
+ {0xBA96, 0xD2EC}, //9798 #HANGUL SYLLABLE THIEUTH YI KHIEUKH
+ {0xBA97, 0xD2ED}, //9799 #HANGUL SYLLABLE THIEUTH YI THIEUTH
+ {0xBA98, 0xD2EE}, //9800 #HANGUL SYLLABLE THIEUTH YI PHIEUPH
+ {0xBA99, 0xD2EF}, //9801 #HANGUL SYLLABLE THIEUTH YI HIEUH
+ {0xBA9A, 0xD2F2}, //9802 #HANGUL SYLLABLE THIEUTH I SSANGKIYEOK
+ {0xBA9B, 0xD2F3}, //9803 #HANGUL SYLLABLE THIEUTH I KIYEOKSIOS
+ {0xBA9C, 0xD2F5}, //9804 #HANGUL SYLLABLE THIEUTH I NIEUNCIEUC
+ {0xBA9D, 0xD2F6}, //9805 #HANGUL SYLLABLE THIEUTH I NIEUNHIEUH
+ {0xBA9E, 0xD2F7}, //9806 #HANGUL SYLLABLE THIEUTH I TIKEUT
+ {0xBA9F, 0xD2F9}, //9807 #HANGUL SYLLABLE THIEUTH I RIEULKIYEOK
+ {0xBAA0, 0xD2FA}, //9808 #HANGUL SYLLABLE THIEUTH I RIEULMIEUM
+ {0xBAA1, 0xBC99}, //9809 #HANGUL SYLLABLE PIEUP EO IEUNG
+ {0xBAA2, 0xBC9A}, //9810 #HANGUL SYLLABLE PIEUP EO CIEUC
+ {0xBAA3, 0xBCA0}, //9811 #HANGUL SYLLABLE PIEUP E
+ {0xBAA4, 0xBCA1}, //9812 #HANGUL SYLLABLE PIEUP E KIYEOK
+ {0xBAA5, 0xBCA4}, //9813 #HANGUL SYLLABLE PIEUP E NIEUN
+ {0xBAA6, 0xBCA7}, //9814 #HANGUL SYLLABLE PIEUP E TIKEUT
+ {0xBAA7, 0xBCA8}, //9815 #HANGUL SYLLABLE PIEUP E RIEUL
+ {0xBAA8, 0xBCB0}, //9816 #HANGUL SYLLABLE PIEUP E MIEUM
+ {0xBAA9, 0xBCB1}, //9817 #HANGUL SYLLABLE PIEUP E PIEUP
+ {0xBAAA, 0xBCB3}, //9818 #HANGUL SYLLABLE PIEUP E SIOS
+ {0xBAAB, 0xBCB4}, //9819 #HANGUL SYLLABLE PIEUP E SSANGSIOS
+ {0xBAAC, 0xBCB5}, //9820 #HANGUL SYLLABLE PIEUP E IEUNG
+ {0xBAAD, 0xBCBC}, //9821 #HANGUL SYLLABLE PIEUP YEO
+ {0xBAAE, 0xBCBD}, //9822 #HANGUL SYLLABLE PIEUP YEO KIYEOK
+ {0xBAAF, 0xBCC0}, //9823 #HANGUL SYLLABLE PIEUP YEO NIEUN
+ {0xBAB0, 0xBCC4}, //9824 #HANGUL SYLLABLE PIEUP YEO RIEUL
+ {0xBAB1, 0xBCCD}, //9825 #HANGUL SYLLABLE PIEUP YEO PIEUP
+ {0xBAB2, 0xBCCF}, //9826 #HANGUL SYLLABLE PIEUP YEO SIOS
+ {0xBAB3, 0xBCD0}, //9827 #HANGUL SYLLABLE PIEUP YEO SSANGSIOS
+ {0xBAB4, 0xBCD1}, //9828 #HANGUL SYLLABLE PIEUP YEO IEUNG
+ {0xBAB5, 0xBCD5}, //9829 #HANGUL SYLLABLE PIEUP YEO THIEUTH
+ {0xBAB6, 0xBCD8}, //9830 #HANGUL SYLLABLE PIEUP YE
+ {0xBAB7, 0xBCDC}, //9831 #HANGUL SYLLABLE PIEUP YE NIEUN
+ {0xBAB8, 0xBCF4}, //9832 #HANGUL SYLLABLE PIEUP O
+ {0xBAB9, 0xBCF5}, //9833 #HANGUL SYLLABLE PIEUP O KIYEOK
+ {0xBABA, 0xBCF6}, //9834 #HANGUL SYLLABLE PIEUP O SSANGKIYEOK
+ {0xBABB, 0xBCF8}, //9835 #HANGUL SYLLABLE PIEUP O NIEUN
+ {0xBABC, 0xBCFC}, //9836 #HANGUL SYLLABLE PIEUP O RIEUL
+ {0xBABD, 0xBD04}, //9837 #HANGUL SYLLABLE PIEUP O MIEUM
+ {0xBABE, 0xBD05}, //9838 #HANGUL SYLLABLE PIEUP O PIEUP
+ {0xBABF, 0xBD07}, //9839 #HANGUL SYLLABLE PIEUP O SIOS
+ {0xBAC0, 0xBD09}, //9840 #HANGUL SYLLABLE PIEUP O IEUNG
+ {0xBAC1, 0xBD10}, //9841 #HANGUL SYLLABLE PIEUP WA
+ {0xBAC2, 0xBD14}, //9842 #HANGUL SYLLABLE PIEUP WA NIEUN
+ {0xBAC3, 0xBD24}, //9843 #HANGUL SYLLABLE PIEUP WA SSANGSIOS
+ {0xBAC4, 0xBD2C}, //9844 #HANGUL SYLLABLE PIEUP WAE
+ {0xBAC5, 0xBD40}, //9845 #HANGUL SYLLABLE PIEUP WAE SSANGSIOS
+ {0xBAC6, 0xBD48}, //9846 #HANGUL SYLLABLE PIEUP OE
+ {0xBAC7, 0xBD49}, //9847 #HANGUL SYLLABLE PIEUP OE KIYEOK
+ {0xBAC8, 0xBD4C}, //9848 #HANGUL SYLLABLE PIEUP OE NIEUN
+ {0xBAC9, 0xBD50}, //9849 #HANGUL SYLLABLE PIEUP OE RIEUL
+ {0xBACA, 0xBD58}, //9850 #HANGUL SYLLABLE PIEUP OE MIEUM
+ {0xBACB, 0xBD59}, //9851 #HANGUL SYLLABLE PIEUP OE PIEUP
+ {0xBACC, 0xBD64}, //9852 #HANGUL SYLLABLE PIEUP YO
+ {0xBACD, 0xBD68}, //9853 #HANGUL SYLLABLE PIEUP YO NIEUN
+ {0xBACE, 0xBD80}, //9854 #HANGUL SYLLABLE PIEUP U
+ {0xBACF, 0xBD81}, //9855 #HANGUL SYLLABLE PIEUP U KIYEOK
+ {0xBAD0, 0xBD84}, //9856 #HANGUL SYLLABLE PIEUP U NIEUN
+ {0xBAD1, 0xBD87}, //9857 #HANGUL SYLLABLE PIEUP U TIKEUT
+ {0xBAD2, 0xBD88}, //9858 #HANGUL SYLLABLE PIEUP U RIEUL
+ {0xBAD3, 0xBD89}, //9859 #HANGUL SYLLABLE PIEUP U RIEULKIYEOK
+ {0xBAD4, 0xBD8A}, //9860 #HANGUL SYLLABLE PIEUP U RIEULMIEUM
+ {0xBAD5, 0xBD90}, //9861 #HANGUL SYLLABLE PIEUP U MIEUM
+ {0xBAD6, 0xBD91}, //9862 #HANGUL SYLLABLE PIEUP U PIEUP
+ {0xBAD7, 0xBD93}, //9863 #HANGUL SYLLABLE PIEUP U SIOS
+ {0xBAD8, 0xBD95}, //9864 #HANGUL SYLLABLE PIEUP U IEUNG
+ {0xBAD9, 0xBD99}, //9865 #HANGUL SYLLABLE PIEUP U THIEUTH
+ {0xBADA, 0xBD9A}, //9866 #HANGUL SYLLABLE PIEUP U PHIEUPH
+ {0xBADB, 0xBD9C}, //9867 #HANGUL SYLLABLE PIEUP WEO
+ {0xBADC, 0xBDA4}, //9868 #HANGUL SYLLABLE PIEUP WEO RIEUL
+ {0xBADD, 0xBDB0}, //9869 #HANGUL SYLLABLE PIEUP WEO SSANGSIOS
+ {0xBADE, 0xBDB8}, //9870 #HANGUL SYLLABLE PIEUP WE
+ {0xBADF, 0xBDD4}, //9871 #HANGUL SYLLABLE PIEUP WI
+ {0xBAE0, 0xBDD5}, //9872 #HANGUL SYLLABLE PIEUP WI KIYEOK
+ {0xBAE1, 0xBDD8}, //9873 #HANGUL SYLLABLE PIEUP WI NIEUN
+ {0xBAE2, 0xBDDC}, //9874 #HANGUL SYLLABLE PIEUP WI RIEUL
+ {0xBAE3, 0xBDE9}, //9875 #HANGUL SYLLABLE PIEUP WI IEUNG
+ {0xBAE4, 0xBDF0}, //9876 #HANGUL SYLLABLE PIEUP YU
+ {0xBAE5, 0xBDF4}, //9877 #HANGUL SYLLABLE PIEUP YU NIEUN
+ {0xBAE6, 0xBDF8}, //9878 #HANGUL SYLLABLE PIEUP YU RIEUL
+ {0xBAE7, 0xBE00}, //9879 #HANGUL SYLLABLE PIEUP YU MIEUM
+ {0xBAE8, 0xBE03}, //9880 #HANGUL SYLLABLE PIEUP YU SIOS
+ {0xBAE9, 0xBE05}, //9881 #HANGUL SYLLABLE PIEUP YU IEUNG
+ {0xBAEA, 0xBE0C}, //9882 #HANGUL SYLLABLE PIEUP EU
+ {0xBAEB, 0xBE0D}, //9883 #HANGUL SYLLABLE PIEUP EU KIYEOK
+ {0xBAEC, 0xBE10}, //9884 #HANGUL SYLLABLE PIEUP EU NIEUN
+ {0xBAED, 0xBE14}, //9885 #HANGUL SYLLABLE PIEUP EU RIEUL
+ {0xBAEE, 0xBE1C}, //9886 #HANGUL SYLLABLE PIEUP EU MIEUM
+ {0xBAEF, 0xBE1D}, //9887 #HANGUL SYLLABLE PIEUP EU PIEUP
+ {0xBAF0, 0xBE1F}, //9888 #HANGUL SYLLABLE PIEUP EU SIOS
+ {0xBAF1, 0xBE44}, //9889 #HANGUL SYLLABLE PIEUP I
+ {0xBAF2, 0xBE45}, //9890 #HANGUL SYLLABLE PIEUP I KIYEOK
+ {0xBAF3, 0xBE48}, //9891 #HANGUL SYLLABLE PIEUP I NIEUN
+ {0xBAF4, 0xBE4C}, //9892 #HANGUL SYLLABLE PIEUP I RIEUL
+ {0xBAF5, 0xBE4E}, //9893 #HANGUL SYLLABLE PIEUP I RIEULMIEUM
+ {0xBAF6, 0xBE54}, //9894 #HANGUL SYLLABLE PIEUP I MIEUM
+ {0xBAF7, 0xBE55}, //9895 #HANGUL SYLLABLE PIEUP I PIEUP
+ {0xBAF8, 0xBE57}, //9896 #HANGUL SYLLABLE PIEUP I SIOS
+ {0xBAF9, 0xBE59}, //9897 #HANGUL SYLLABLE PIEUP I IEUNG
+ {0xBAFA, 0xBE5A}, //9898 #HANGUL SYLLABLE PIEUP I CIEUC
+ {0xBAFB, 0xBE5B}, //9899 #HANGUL SYLLABLE PIEUP I CHIEUCH
+ {0xBAFC, 0xBE60}, //9900 #HANGUL SYLLABLE SSANGPIEUP A
+ {0xBAFD, 0xBE61}, //9901 #HANGUL SYLLABLE SSANGPIEUP A KIYEOK
+ {0xBAFE, 0xBE64}, //9902 #HANGUL SYLLABLE SSANGPIEUP A NIEUN
+ {0xBB41, 0xD2FB}, //9903 #HANGUL SYLLABLE THIEUTH I RIEULPIEUP
+ {0xBB42, 0xD2FC}, //9904 #HANGUL SYLLABLE THIEUTH I RIEULSIOS
+ {0xBB43, 0xD2FD}, //9905 #HANGUL SYLLABLE THIEUTH I RIEULTHIEUTH
+ {0xBB44, 0xD2FE}, //9906 #HANGUL SYLLABLE THIEUTH I RIEULPHIEUPH
+ {0xBB45, 0xD2FF}, //9907 #HANGUL SYLLABLE THIEUTH I RIEULHIEUH
+ {0xBB46, 0xD302}, //9908 #HANGUL SYLLABLE THIEUTH I PIEUPSIOS
+ {0xBB47, 0xD304}, //9909 #HANGUL SYLLABLE THIEUTH I SSANGSIOS
+ {0xBB48, 0xD306}, //9910 #HANGUL SYLLABLE THIEUTH I CIEUC
+ {0xBB49, 0xD307}, //9911 #HANGUL SYLLABLE THIEUTH I CHIEUCH
+ {0xBB4A, 0xD308}, //9912 #HANGUL SYLLABLE THIEUTH I KHIEUKH
+ {0xBB4B, 0xD309}, //9913 #HANGUL SYLLABLE THIEUTH I THIEUTH
+ {0xBB4C, 0xD30A}, //9914 #HANGUL SYLLABLE THIEUTH I PHIEUPH
+ {0xBB4D, 0xD30B}, //9915 #HANGUL SYLLABLE THIEUTH I HIEUH
+ {0xBB4E, 0xD30F}, //9916 #HANGUL SYLLABLE PHIEUPH A KIYEOKSIOS
+ {0xBB4F, 0xD311}, //9917 #HANGUL SYLLABLE PHIEUPH A NIEUNCIEUC
+ {0xBB50, 0xD312}, //9918 #HANGUL SYLLABLE PHIEUPH A NIEUNHIEUH
+ {0xBB51, 0xD313}, //9919 #HANGUL SYLLABLE PHIEUPH A TIKEUT
+ {0xBB52, 0xD315}, //9920 #HANGUL SYLLABLE PHIEUPH A RIEULKIYEOK
+ {0xBB53, 0xD317}, //9921 #HANGUL SYLLABLE PHIEUPH A RIEULPIEUP
+ {0xBB54, 0xD318}, //9922 #HANGUL SYLLABLE PHIEUPH A RIEULSIOS
+ {0xBB55, 0xD319}, //9923 #HANGUL SYLLABLE PHIEUPH A RIEULTHIEUTH
+ {0xBB56, 0xD31A}, //9924 #HANGUL SYLLABLE PHIEUPH A RIEULPHIEUPH
+ {0xBB57, 0xD31B}, //9925 #HANGUL SYLLABLE PHIEUPH A RIEULHIEUH
+ {0xBB58, 0xD31E}, //9926 #HANGUL SYLLABLE PHIEUPH A PIEUPSIOS
+ {0xBB59, 0xD322}, //9927 #HANGUL SYLLABLE PHIEUPH A CIEUC
+ {0xBB5A, 0xD323}, //9928 #HANGUL SYLLABLE PHIEUPH A CHIEUCH
+ {0xBB61, 0xD324}, //9929 #HANGUL SYLLABLE PHIEUPH A KHIEUKH
+ {0xBB62, 0xD326}, //9930 #HANGUL SYLLABLE PHIEUPH A PHIEUPH
+ {0xBB63, 0xD327}, //9931 #HANGUL SYLLABLE PHIEUPH A HIEUH
+ {0xBB64, 0xD32A}, //9932 #HANGUL SYLLABLE PHIEUPH AE SSANGKIYEOK
+ {0xBB65, 0xD32B}, //9933 #HANGUL SYLLABLE PHIEUPH AE KIYEOKSIOS
+ {0xBB66, 0xD32D}, //9934 #HANGUL SYLLABLE PHIEUPH AE NIEUNCIEUC
+ {0xBB67, 0xD32E}, //9935 #HANGUL SYLLABLE PHIEUPH AE NIEUNHIEUH
+ {0xBB68, 0xD32F}, //9936 #HANGUL SYLLABLE PHIEUPH AE TIKEUT
+ {0xBB69, 0xD331}, //9937 #HANGUL SYLLABLE PHIEUPH AE RIEULKIYEOK
+ {0xBB6A, 0xD332}, //9938 #HANGUL SYLLABLE PHIEUPH AE RIEULMIEUM
+ {0xBB6B, 0xD333}, //9939 #HANGUL SYLLABLE PHIEUPH AE RIEULPIEUP
+ {0xBB6C, 0xD334}, //9940 #HANGUL SYLLABLE PHIEUPH AE RIEULSIOS
+ {0xBB6D, 0xD335}, //9941 #HANGUL SYLLABLE PHIEUPH AE RIEULTHIEUTH
+ {0xBB6E, 0xD336}, //9942 #HANGUL SYLLABLE PHIEUPH AE RIEULPHIEUPH
+ {0xBB6F, 0xD337}, //9943 #HANGUL SYLLABLE PHIEUPH AE RIEULHIEUH
+ {0xBB70, 0xD33A}, //9944 #HANGUL SYLLABLE PHIEUPH AE PIEUPSIOS
+ {0xBB71, 0xD33E}, //9945 #HANGUL SYLLABLE PHIEUPH AE CIEUC
+ {0xBB72, 0xD33F}, //9946 #HANGUL SYLLABLE PHIEUPH AE CHIEUCH
+ {0xBB73, 0xD340}, //9947 #HANGUL SYLLABLE PHIEUPH AE KHIEUKH
+ {0xBB74, 0xD341}, //9948 #HANGUL SYLLABLE PHIEUPH AE THIEUTH
+ {0xBB75, 0xD342}, //9949 #HANGUL SYLLABLE PHIEUPH AE PHIEUPH
+ {0xBB76, 0xD343}, //9950 #HANGUL SYLLABLE PHIEUPH AE HIEUH
+ {0xBB77, 0xD346}, //9951 #HANGUL SYLLABLE PHIEUPH YA SSANGKIYEOK
+ {0xBB78, 0xD347}, //9952 #HANGUL SYLLABLE PHIEUPH YA KIYEOKSIOS
+ {0xBB79, 0xD348}, //9953 #HANGUL SYLLABLE PHIEUPH YA NIEUN
+ {0xBB7A, 0xD349}, //9954 #HANGUL SYLLABLE PHIEUPH YA NIEUNCIEUC
+ {0xBB81, 0xD34A}, //9955 #HANGUL SYLLABLE PHIEUPH YA NIEUNHIEUH
+ {0xBB82, 0xD34B}, //9956 #HANGUL SYLLABLE PHIEUPH YA TIKEUT
+ {0xBB83, 0xD34C}, //9957 #HANGUL SYLLABLE PHIEUPH YA RIEUL
+ {0xBB84, 0xD34D}, //9958 #HANGUL SYLLABLE PHIEUPH YA RIEULKIYEOK
+ {0xBB85, 0xD34E}, //9959 #HANGUL SYLLABLE PHIEUPH YA RIEULMIEUM
+ {0xBB86, 0xD34F}, //9960 #HANGUL SYLLABLE PHIEUPH YA RIEULPIEUP
+ {0xBB87, 0xD350}, //9961 #HANGUL SYLLABLE PHIEUPH YA RIEULSIOS
+ {0xBB88, 0xD351}, //9962 #HANGUL SYLLABLE PHIEUPH YA RIEULTHIEUTH
+ {0xBB89, 0xD352}, //9963 #HANGUL SYLLABLE PHIEUPH YA RIEULPHIEUPH
+ {0xBB8A, 0xD353}, //9964 #HANGUL SYLLABLE PHIEUPH YA RIEULHIEUH
+ {0xBB8B, 0xD354}, //9965 #HANGUL SYLLABLE PHIEUPH YA MIEUM
+ {0xBB8C, 0xD355}, //9966 #HANGUL SYLLABLE PHIEUPH YA PIEUP
+ {0xBB8D, 0xD356}, //9967 #HANGUL SYLLABLE PHIEUPH YA PIEUPSIOS
+ {0xBB8E, 0xD357}, //9968 #HANGUL SYLLABLE PHIEUPH YA SIOS
+ {0xBB8F, 0xD358}, //9969 #HANGUL SYLLABLE PHIEUPH YA SSANGSIOS
+ {0xBB90, 0xD359}, //9970 #HANGUL SYLLABLE PHIEUPH YA IEUNG
+ {0xBB91, 0xD35A}, //9971 #HANGUL SYLLABLE PHIEUPH YA CIEUC
+ {0xBB92, 0xD35B}, //9972 #HANGUL SYLLABLE PHIEUPH YA CHIEUCH
+ {0xBB93, 0xD35C}, //9973 #HANGUL SYLLABLE PHIEUPH YA KHIEUKH
+ {0xBB94, 0xD35D}, //9974 #HANGUL SYLLABLE PHIEUPH YA THIEUTH
+ {0xBB95, 0xD35E}, //9975 #HANGUL SYLLABLE PHIEUPH YA PHIEUPH
+ {0xBB96, 0xD35F}, //9976 #HANGUL SYLLABLE PHIEUPH YA HIEUH
+ {0xBB97, 0xD360}, //9977 #HANGUL SYLLABLE PHIEUPH YAE
+ {0xBB98, 0xD361}, //9978 #HANGUL SYLLABLE PHIEUPH YAE KIYEOK
+ {0xBB99, 0xD362}, //9979 #HANGUL SYLLABLE PHIEUPH YAE SSANGKIYEOK
+ {0xBB9A, 0xD363}, //9980 #HANGUL SYLLABLE PHIEUPH YAE KIYEOKSIOS
+ {0xBB9B, 0xD364}, //9981 #HANGUL SYLLABLE PHIEUPH YAE NIEUN
+ {0xBB9C, 0xD365}, //9982 #HANGUL SYLLABLE PHIEUPH YAE NIEUNCIEUC
+ {0xBB9D, 0xD366}, //9983 #HANGUL SYLLABLE PHIEUPH YAE NIEUNHIEUH
+ {0xBB9E, 0xD367}, //9984 #HANGUL SYLLABLE PHIEUPH YAE TIKEUT
+ {0xBB9F, 0xD368}, //9985 #HANGUL SYLLABLE PHIEUPH YAE RIEUL
+ {0xBBA0, 0xD369}, //9986 #HANGUL SYLLABLE PHIEUPH YAE RIEULKIYEOK
+ {0xBBA1, 0xBE68}, //9987 #HANGUL SYLLABLE SSANGPIEUP A RIEUL
+ {0xBBA2, 0xBE6A}, //9988 #HANGUL SYLLABLE SSANGPIEUP A RIEULMIEUM
+ {0xBBA3, 0xBE70}, //9989 #HANGUL SYLLABLE SSANGPIEUP A MIEUM
+ {0xBBA4, 0xBE71}, //9990 #HANGUL SYLLABLE SSANGPIEUP A PIEUP
+ {0xBBA5, 0xBE73}, //9991 #HANGUL SYLLABLE SSANGPIEUP A SIOS
+ {0xBBA6, 0xBE74}, //9992 #HANGUL SYLLABLE SSANGPIEUP A SSANGSIOS
+ {0xBBA7, 0xBE75}, //9993 #HANGUL SYLLABLE SSANGPIEUP A IEUNG
+ {0xBBA8, 0xBE7B}, //9994 #HANGUL SYLLABLE SSANGPIEUP A HIEUH
+ {0xBBA9, 0xBE7C}, //9995 #HANGUL SYLLABLE SSANGPIEUP AE
+ {0xBBAA, 0xBE7D}, //9996 #HANGUL SYLLABLE SSANGPIEUP AE KIYEOK
+ {0xBBAB, 0xBE80}, //9997 #HANGUL SYLLABLE SSANGPIEUP AE NIEUN
+ {0xBBAC, 0xBE84}, //9998 #HANGUL SYLLABLE SSANGPIEUP AE RIEUL
+ {0xBBAD, 0xBE8C}, //9999 #HANGUL SYLLABLE SSANGPIEUP AE MIEUM
+ {0xBBAE, 0xBE8D}, //10000 #HANGUL SYLLABLE SSANGPIEUP AE PIEUP
+ {0xBBAF, 0xBE8F}, //10001 #HANGUL SYLLABLE SSANGPIEUP AE SIOS
+ {0xBBB0, 0xBE90}, //10002 #HANGUL SYLLABLE SSANGPIEUP AE SSANGSIOS
+ {0xBBB1, 0xBE91}, //10003 #HANGUL SYLLABLE SSANGPIEUP AE IEUNG
+ {0xBBB2, 0xBE98}, //10004 #HANGUL SYLLABLE SSANGPIEUP YA
+ {0xBBB3, 0xBE99}, //10005 #HANGUL SYLLABLE SSANGPIEUP YA KIYEOK
+ {0xBBB4, 0xBEA8}, //10006 #HANGUL SYLLABLE SSANGPIEUP YA MIEUM
+ {0xBBB5, 0xBED0}, //10007 #HANGUL SYLLABLE SSANGPIEUP EO
+ {0xBBB6, 0xBED1}, //10008 #HANGUL SYLLABLE SSANGPIEUP EO KIYEOK
+ {0xBBB7, 0xBED4}, //10009 #HANGUL SYLLABLE SSANGPIEUP EO NIEUN
+ {0xBBB8, 0xBED7}, //10010 #HANGUL SYLLABLE SSANGPIEUP EO TIKEUT
+ {0xBBB9, 0xBED8}, //10011 #HANGUL SYLLABLE SSANGPIEUP EO RIEUL
+ {0xBBBA, 0xBEE0}, //10012 #HANGUL SYLLABLE SSANGPIEUP EO MIEUM
+ {0xBBBB, 0xBEE3}, //10013 #HANGUL SYLLABLE SSANGPIEUP EO SIOS
+ {0xBBBC, 0xBEE4}, //10014 #HANGUL SYLLABLE SSANGPIEUP EO SSANGSIOS
+ {0xBBBD, 0xBEE5}, //10015 #HANGUL SYLLABLE SSANGPIEUP EO IEUNG
+ {0xBBBE, 0xBEEC}, //10016 #HANGUL SYLLABLE SSANGPIEUP E
+ {0xBBBF, 0xBF01}, //10017 #HANGUL SYLLABLE SSANGPIEUP E IEUNG
+ {0xBBC0, 0xBF08}, //10018 #HANGUL SYLLABLE SSANGPIEUP YEO
+ {0xBBC1, 0xBF09}, //10019 #HANGUL SYLLABLE SSANGPIEUP YEO KIYEOK
+ {0xBBC2, 0xBF18}, //10020 #HANGUL SYLLABLE SSANGPIEUP YEO MIEUM
+ {0xBBC3, 0xBF19}, //10021 #HANGUL SYLLABLE SSANGPIEUP YEO PIEUP
+ {0xBBC4, 0xBF1B}, //10022 #HANGUL SYLLABLE SSANGPIEUP YEO SIOS
+ {0xBBC5, 0xBF1C}, //10023 #HANGUL SYLLABLE SSANGPIEUP YEO SSANGSIOS
+ {0xBBC6, 0xBF1D}, //10024 #HANGUL SYLLABLE SSANGPIEUP YEO IEUNG
+ {0xBBC7, 0xBF40}, //10025 #HANGUL SYLLABLE SSANGPIEUP O
+ {0xBBC8, 0xBF41}, //10026 #HANGUL SYLLABLE SSANGPIEUP O KIYEOK
+ {0xBBC9, 0xBF44}, //10027 #HANGUL SYLLABLE SSANGPIEUP O NIEUN
+ {0xBBCA, 0xBF48}, //10028 #HANGUL SYLLABLE SSANGPIEUP O RIEUL
+ {0xBBCB, 0xBF50}, //10029 #HANGUL SYLLABLE SSANGPIEUP O MIEUM
+ {0xBBCC, 0xBF51}, //10030 #HANGUL SYLLABLE SSANGPIEUP O PIEUP
+ {0xBBCD, 0xBF55}, //10031 #HANGUL SYLLABLE SSANGPIEUP O IEUNG
+ {0xBBCE, 0xBF94}, //10032 #HANGUL SYLLABLE SSANGPIEUP OE
+ {0xBBCF, 0xBFB0}, //10033 #HANGUL SYLLABLE SSANGPIEUP YO
+ {0xBBD0, 0xBFC5}, //10034 #HANGUL SYLLABLE SSANGPIEUP YO IEUNG
+ {0xBBD1, 0xBFCC}, //10035 #HANGUL SYLLABLE SSANGPIEUP U
+ {0xBBD2, 0xBFCD}, //10036 #HANGUL SYLLABLE SSANGPIEUP U KIYEOK
+ {0xBBD3, 0xBFD0}, //10037 #HANGUL SYLLABLE SSANGPIEUP U NIEUN
+ {0xBBD4, 0xBFD4}, //10038 #HANGUL SYLLABLE SSANGPIEUP U RIEUL
+ {0xBBD5, 0xBFDC}, //10039 #HANGUL SYLLABLE SSANGPIEUP U MIEUM
+ {0xBBD6, 0xBFDF}, //10040 #HANGUL SYLLABLE SSANGPIEUP U SIOS
+ {0xBBD7, 0xBFE1}, //10041 #HANGUL SYLLABLE SSANGPIEUP U IEUNG
+ {0xBBD8, 0xC03C}, //10042 #HANGUL SYLLABLE SSANGPIEUP YU
+ {0xBBD9, 0xC051}, //10043 #HANGUL SYLLABLE SSANGPIEUP YU IEUNG
+ {0xBBDA, 0xC058}, //10044 #HANGUL SYLLABLE SSANGPIEUP EU
+ {0xBBDB, 0xC05C}, //10045 #HANGUL SYLLABLE SSANGPIEUP EU NIEUN
+ {0xBBDC, 0xC060}, //10046 #HANGUL SYLLABLE SSANGPIEUP EU RIEUL
+ {0xBBDD, 0xC068}, //10047 #HANGUL SYLLABLE SSANGPIEUP EU MIEUM
+ {0xBBDE, 0xC069}, //10048 #HANGUL SYLLABLE SSANGPIEUP EU PIEUP
+ {0xBBDF, 0xC090}, //10049 #HANGUL SYLLABLE SSANGPIEUP I
+ {0xBBE0, 0xC091}, //10050 #HANGUL SYLLABLE SSANGPIEUP I KIYEOK
+ {0xBBE1, 0xC094}, //10051 #HANGUL SYLLABLE SSANGPIEUP I NIEUN
+ {0xBBE2, 0xC098}, //10052 #HANGUL SYLLABLE SSANGPIEUP I RIEUL
+ {0xBBE3, 0xC0A0}, //10053 #HANGUL SYLLABLE SSANGPIEUP I MIEUM
+ {0xBBE4, 0xC0A1}, //10054 #HANGUL SYLLABLE SSANGPIEUP I PIEUP
+ {0xBBE5, 0xC0A3}, //10055 #HANGUL SYLLABLE SSANGPIEUP I SIOS
+ {0xBBE6, 0xC0A5}, //10056 #HANGUL SYLLABLE SSANGPIEUP I IEUNG
+ {0xBBE7, 0xC0AC}, //10057 #HANGUL SYLLABLE SIOS A
+ {0xBBE8, 0xC0AD}, //10058 #HANGUL SYLLABLE SIOS A KIYEOK
+ {0xBBE9, 0xC0AF}, //10059 #HANGUL SYLLABLE SIOS A KIYEOKSIOS
+ {0xBBEA, 0xC0B0}, //10060 #HANGUL SYLLABLE SIOS A NIEUN
+ {0xBBEB, 0xC0B3}, //10061 #HANGUL SYLLABLE SIOS A TIKEUT
+ {0xBBEC, 0xC0B4}, //10062 #HANGUL SYLLABLE SIOS A RIEUL
+ {0xBBED, 0xC0B5}, //10063 #HANGUL SYLLABLE SIOS A RIEULKIYEOK
+ {0xBBEE, 0xC0B6}, //10064 #HANGUL SYLLABLE SIOS A RIEULMIEUM
+ {0xBBEF, 0xC0BC}, //10065 #HANGUL SYLLABLE SIOS A MIEUM
+ {0xBBF0, 0xC0BD}, //10066 #HANGUL SYLLABLE SIOS A PIEUP
+ {0xBBF1, 0xC0BF}, //10067 #HANGUL SYLLABLE SIOS A SIOS
+ {0xBBF2, 0xC0C0}, //10068 #HANGUL SYLLABLE SIOS A SSANGSIOS
+ {0xBBF3, 0xC0C1}, //10069 #HANGUL SYLLABLE SIOS A IEUNG
+ {0xBBF4, 0xC0C5}, //10070 #HANGUL SYLLABLE SIOS A THIEUTH
+ {0xBBF5, 0xC0C8}, //10071 #HANGUL SYLLABLE SIOS AE
+ {0xBBF6, 0xC0C9}, //10072 #HANGUL SYLLABLE SIOS AE KIYEOK
+ {0xBBF7, 0xC0CC}, //10073 #HANGUL SYLLABLE SIOS AE NIEUN
+ {0xBBF8, 0xC0D0}, //10074 #HANGUL SYLLABLE SIOS AE RIEUL
+ {0xBBF9, 0xC0D8}, //10075 #HANGUL SYLLABLE SIOS AE MIEUM
+ {0xBBFA, 0xC0D9}, //10076 #HANGUL SYLLABLE SIOS AE PIEUP
+ {0xBBFB, 0xC0DB}, //10077 #HANGUL SYLLABLE SIOS AE SIOS
+ {0xBBFC, 0xC0DC}, //10078 #HANGUL SYLLABLE SIOS AE SSANGSIOS
+ {0xBBFD, 0xC0DD}, //10079 #HANGUL SYLLABLE SIOS AE IEUNG
+ {0xBBFE, 0xC0E4}, //10080 #HANGUL SYLLABLE SIOS YA
+ {0xBC41, 0xD36A}, //10081 #HANGUL SYLLABLE PHIEUPH YAE RIEULMIEUM
+ {0xBC42, 0xD36B}, //10082 #HANGUL SYLLABLE PHIEUPH YAE RIEULPIEUP
+ {0xBC43, 0xD36C}, //10083 #HANGUL SYLLABLE PHIEUPH YAE RIEULSIOS
+ {0xBC44, 0xD36D}, //10084 #HANGUL SYLLABLE PHIEUPH YAE RIEULTHIEUTH
+ {0xBC45, 0xD36E}, //10085 #HANGUL SYLLABLE PHIEUPH YAE RIEULPHIEUPH
+ {0xBC46, 0xD36F}, //10086 #HANGUL SYLLABLE PHIEUPH YAE RIEULHIEUH
+ {0xBC47, 0xD370}, //10087 #HANGUL SYLLABLE PHIEUPH YAE MIEUM
+ {0xBC48, 0xD371}, //10088 #HANGUL SYLLABLE PHIEUPH YAE PIEUP
+ {0xBC49, 0xD372}, //10089 #HANGUL SYLLABLE PHIEUPH YAE PIEUPSIOS
+ {0xBC4A, 0xD373}, //10090 #HANGUL SYLLABLE PHIEUPH YAE SIOS
+ {0xBC4B, 0xD374}, //10091 #HANGUL SYLLABLE PHIEUPH YAE SSANGSIOS
+ {0xBC4C, 0xD375}, //10092 #HANGUL SYLLABLE PHIEUPH YAE IEUNG
+ {0xBC4D, 0xD376}, //10093 #HANGUL SYLLABLE PHIEUPH YAE CIEUC
+ {0xBC4E, 0xD377}, //10094 #HANGUL SYLLABLE PHIEUPH YAE CHIEUCH
+ {0xBC4F, 0xD378}, //10095 #HANGUL SYLLABLE PHIEUPH YAE KHIEUKH
+ {0xBC50, 0xD379}, //10096 #HANGUL SYLLABLE PHIEUPH YAE THIEUTH
+ {0xBC51, 0xD37A}, //10097 #HANGUL SYLLABLE PHIEUPH YAE PHIEUPH
+ {0xBC52, 0xD37B}, //10098 #HANGUL SYLLABLE PHIEUPH YAE HIEUH
+ {0xBC53, 0xD37E}, //10099 #HANGUL SYLLABLE PHIEUPH EO SSANGKIYEOK
+ {0xBC54, 0xD37F}, //10100 #HANGUL SYLLABLE PHIEUPH EO KIYEOKSIOS
+ {0xBC55, 0xD381}, //10101 #HANGUL SYLLABLE PHIEUPH EO NIEUNCIEUC
+ {0xBC56, 0xD382}, //10102 #HANGUL SYLLABLE PHIEUPH EO NIEUNHIEUH
+ {0xBC57, 0xD383}, //10103 #HANGUL SYLLABLE PHIEUPH EO TIKEUT
+ {0xBC58, 0xD385}, //10104 #HANGUL SYLLABLE PHIEUPH EO RIEULKIYEOK
+ {0xBC59, 0xD386}, //10105 #HANGUL SYLLABLE PHIEUPH EO RIEULMIEUM
+ {0xBC5A, 0xD387}, //10106 #HANGUL SYLLABLE PHIEUPH EO RIEULPIEUP
+ {0xBC61, 0xD388}, //10107 #HANGUL SYLLABLE PHIEUPH EO RIEULSIOS
+ {0xBC62, 0xD389}, //10108 #HANGUL SYLLABLE PHIEUPH EO RIEULTHIEUTH
+ {0xBC63, 0xD38A}, //10109 #HANGUL SYLLABLE PHIEUPH EO RIEULPHIEUPH
+ {0xBC64, 0xD38B}, //10110 #HANGUL SYLLABLE PHIEUPH EO RIEULHIEUH
+ {0xBC65, 0xD38E}, //10111 #HANGUL SYLLABLE PHIEUPH EO PIEUPSIOS
+ {0xBC66, 0xD392}, //10112 #HANGUL SYLLABLE PHIEUPH EO CIEUC
+ {0xBC67, 0xD393}, //10113 #HANGUL SYLLABLE PHIEUPH EO CHIEUCH
+ {0xBC68, 0xD394}, //10114 #HANGUL SYLLABLE PHIEUPH EO KHIEUKH
+ {0xBC69, 0xD395}, //10115 #HANGUL SYLLABLE PHIEUPH EO THIEUTH
+ {0xBC6A, 0xD396}, //10116 #HANGUL SYLLABLE PHIEUPH EO PHIEUPH
+ {0xBC6B, 0xD397}, //10117 #HANGUL SYLLABLE PHIEUPH EO HIEUH
+ {0xBC6C, 0xD39A}, //10118 #HANGUL SYLLABLE PHIEUPH E SSANGKIYEOK
+ {0xBC6D, 0xD39B}, //10119 #HANGUL SYLLABLE PHIEUPH E KIYEOKSIOS
+ {0xBC6E, 0xD39D}, //10120 #HANGUL SYLLABLE PHIEUPH E NIEUNCIEUC
+ {0xBC6F, 0xD39E}, //10121 #HANGUL SYLLABLE PHIEUPH E NIEUNHIEUH
+ {0xBC70, 0xD39F}, //10122 #HANGUL SYLLABLE PHIEUPH E TIKEUT
+ {0xBC71, 0xD3A1}, //10123 #HANGUL SYLLABLE PHIEUPH E RIEULKIYEOK
+ {0xBC72, 0xD3A2}, //10124 #HANGUL SYLLABLE PHIEUPH E RIEULMIEUM
+ {0xBC73, 0xD3A3}, //10125 #HANGUL SYLLABLE PHIEUPH E RIEULPIEUP
+ {0xBC74, 0xD3A4}, //10126 #HANGUL SYLLABLE PHIEUPH E RIEULSIOS
+ {0xBC75, 0xD3A5}, //10127 #HANGUL SYLLABLE PHIEUPH E RIEULTHIEUTH
+ {0xBC76, 0xD3A6}, //10128 #HANGUL SYLLABLE PHIEUPH E RIEULPHIEUPH
+ {0xBC77, 0xD3A7}, //10129 #HANGUL SYLLABLE PHIEUPH E RIEULHIEUH
+ {0xBC78, 0xD3AA}, //10130 #HANGUL SYLLABLE PHIEUPH E PIEUPSIOS
+ {0xBC79, 0xD3AC}, //10131 #HANGUL SYLLABLE PHIEUPH E SSANGSIOS
+ {0xBC7A, 0xD3AE}, //10132 #HANGUL SYLLABLE PHIEUPH E CIEUC
+ {0xBC81, 0xD3AF}, //10133 #HANGUL SYLLABLE PHIEUPH E CHIEUCH
+ {0xBC82, 0xD3B0}, //10134 #HANGUL SYLLABLE PHIEUPH E KHIEUKH
+ {0xBC83, 0xD3B1}, //10135 #HANGUL SYLLABLE PHIEUPH E THIEUTH
+ {0xBC84, 0xD3B2}, //10136 #HANGUL SYLLABLE PHIEUPH E PHIEUPH
+ {0xBC85, 0xD3B3}, //10137 #HANGUL SYLLABLE PHIEUPH E HIEUH
+ {0xBC86, 0xD3B5}, //10138 #HANGUL SYLLABLE PHIEUPH YEO KIYEOK
+ {0xBC87, 0xD3B6}, //10139 #HANGUL SYLLABLE PHIEUPH YEO SSANGKIYEOK
+ {0xBC88, 0xD3B7}, //10140 #HANGUL SYLLABLE PHIEUPH YEO KIYEOKSIOS
+ {0xBC89, 0xD3B9}, //10141 #HANGUL SYLLABLE PHIEUPH YEO NIEUNCIEUC
+ {0xBC8A, 0xD3BA}, //10142 #HANGUL SYLLABLE PHIEUPH YEO NIEUNHIEUH
+ {0xBC8B, 0xD3BB}, //10143 #HANGUL SYLLABLE PHIEUPH YEO TIKEUT
+ {0xBC8C, 0xD3BD}, //10144 #HANGUL SYLLABLE PHIEUPH YEO RIEULKIYEOK
+ {0xBC8D, 0xD3BE}, //10145 #HANGUL SYLLABLE PHIEUPH YEO RIEULMIEUM
+ {0xBC8E, 0xD3BF}, //10146 #HANGUL SYLLABLE PHIEUPH YEO RIEULPIEUP
+ {0xBC8F, 0xD3C0}, //10147 #HANGUL SYLLABLE PHIEUPH YEO RIEULSIOS
+ {0xBC90, 0xD3C1}, //10148 #HANGUL SYLLABLE PHIEUPH YEO RIEULTHIEUTH
+ {0xBC91, 0xD3C2}, //10149 #HANGUL SYLLABLE PHIEUPH YEO RIEULPHIEUPH
+ {0xBC92, 0xD3C3}, //10150 #HANGUL SYLLABLE PHIEUPH YEO RIEULHIEUH
+ {0xBC93, 0xD3C6}, //10151 #HANGUL SYLLABLE PHIEUPH YEO PIEUPSIOS
+ {0xBC94, 0xD3C7}, //10152 #HANGUL SYLLABLE PHIEUPH YEO SIOS
+ {0xBC95, 0xD3CA}, //10153 #HANGUL SYLLABLE PHIEUPH YEO CIEUC
+ {0xBC96, 0xD3CB}, //10154 #HANGUL SYLLABLE PHIEUPH YEO CHIEUCH
+ {0xBC97, 0xD3CC}, //10155 #HANGUL SYLLABLE PHIEUPH YEO KHIEUKH
+ {0xBC98, 0xD3CD}, //10156 #HANGUL SYLLABLE PHIEUPH YEO THIEUTH
+ {0xBC99, 0xD3CE}, //10157 #HANGUL SYLLABLE PHIEUPH YEO PHIEUPH
+ {0xBC9A, 0xD3CF}, //10158 #HANGUL SYLLABLE PHIEUPH YEO HIEUH
+ {0xBC9B, 0xD3D1}, //10159 #HANGUL SYLLABLE PHIEUPH YE KIYEOK
+ {0xBC9C, 0xD3D2}, //10160 #HANGUL SYLLABLE PHIEUPH YE SSANGKIYEOK
+ {0xBC9D, 0xD3D3}, //10161 #HANGUL SYLLABLE PHIEUPH YE KIYEOKSIOS
+ {0xBC9E, 0xD3D4}, //10162 #HANGUL SYLLABLE PHIEUPH YE NIEUN
+ {0xBC9F, 0xD3D5}, //10163 #HANGUL SYLLABLE PHIEUPH YE NIEUNCIEUC
+ {0xBCA0, 0xD3D6}, //10164 #HANGUL SYLLABLE PHIEUPH YE NIEUNHIEUH
+ {0xBCA1, 0xC0E5}, //10165 #HANGUL SYLLABLE SIOS YA KIYEOK
+ {0xBCA2, 0xC0E8}, //10166 #HANGUL SYLLABLE SIOS YA NIEUN
+ {0xBCA3, 0xC0EC}, //10167 #HANGUL SYLLABLE SIOS YA RIEUL
+ {0xBCA4, 0xC0F4}, //10168 #HANGUL SYLLABLE SIOS YA MIEUM
+ {0xBCA5, 0xC0F5}, //10169 #HANGUL SYLLABLE SIOS YA PIEUP
+ {0xBCA6, 0xC0F7}, //10170 #HANGUL SYLLABLE SIOS YA SIOS
+ {0xBCA7, 0xC0F9}, //10171 #HANGUL SYLLABLE SIOS YA IEUNG
+ {0xBCA8, 0xC100}, //10172 #HANGUL SYLLABLE SIOS YAE
+ {0xBCA9, 0xC104}, //10173 #HANGUL SYLLABLE SIOS YAE NIEUN
+ {0xBCAA, 0xC108}, //10174 #HANGUL SYLLABLE SIOS YAE RIEUL
+ {0xBCAB, 0xC110}, //10175 #HANGUL SYLLABLE SIOS YAE MIEUM
+ {0xBCAC, 0xC115}, //10176 #HANGUL SYLLABLE SIOS YAE IEUNG
+ {0xBCAD, 0xC11C}, //10177 #HANGUL SYLLABLE SIOS EO
+ {0xBCAE, 0xC11D}, //10178 #HANGUL SYLLABLE SIOS EO KIYEOK
+ {0xBCAF, 0xC11E}, //10179 #HANGUL SYLLABLE SIOS EO SSANGKIYEOK
+ {0xBCB0, 0xC11F}, //10180 #HANGUL SYLLABLE SIOS EO KIYEOKSIOS
+ {0xBCB1, 0xC120}, //10181 #HANGUL SYLLABLE SIOS EO NIEUN
+ {0xBCB2, 0xC123}, //10182 #HANGUL SYLLABLE SIOS EO TIKEUT
+ {0xBCB3, 0xC124}, //10183 #HANGUL SYLLABLE SIOS EO RIEUL
+ {0xBCB4, 0xC126}, //10184 #HANGUL SYLLABLE SIOS EO RIEULMIEUM
+ {0xBCB5, 0xC127}, //10185 #HANGUL SYLLABLE SIOS EO RIEULPIEUP
+ {0xBCB6, 0xC12C}, //10186 #HANGUL SYLLABLE SIOS EO MIEUM
+ {0xBCB7, 0xC12D}, //10187 #HANGUL SYLLABLE SIOS EO PIEUP
+ {0xBCB8, 0xC12F}, //10188 #HANGUL SYLLABLE SIOS EO SIOS
+ {0xBCB9, 0xC130}, //10189 #HANGUL SYLLABLE SIOS EO SSANGSIOS
+ {0xBCBA, 0xC131}, //10190 #HANGUL SYLLABLE SIOS EO IEUNG
+ {0xBCBB, 0xC136}, //10191 #HANGUL SYLLABLE SIOS EO PHIEUPH
+ {0xBCBC, 0xC138}, //10192 #HANGUL SYLLABLE SIOS E
+ {0xBCBD, 0xC139}, //10193 #HANGUL SYLLABLE SIOS E KIYEOK
+ {0xBCBE, 0xC13C}, //10194 #HANGUL SYLLABLE SIOS E NIEUN
+ {0xBCBF, 0xC140}, //10195 #HANGUL SYLLABLE SIOS E RIEUL
+ {0xBCC0, 0xC148}, //10196 #HANGUL SYLLABLE SIOS E MIEUM
+ {0xBCC1, 0xC149}, //10197 #HANGUL SYLLABLE SIOS E PIEUP
+ {0xBCC2, 0xC14B}, //10198 #HANGUL SYLLABLE SIOS E SIOS
+ {0xBCC3, 0xC14C}, //10199 #HANGUL SYLLABLE SIOS E SSANGSIOS
+ {0xBCC4, 0xC14D}, //10200 #HANGUL SYLLABLE SIOS E IEUNG
+ {0xBCC5, 0xC154}, //10201 #HANGUL SYLLABLE SIOS YEO
+ {0xBCC6, 0xC155}, //10202 #HANGUL SYLLABLE SIOS YEO KIYEOK
+ {0xBCC7, 0xC158}, //10203 #HANGUL SYLLABLE SIOS YEO NIEUN
+ {0xBCC8, 0xC15C}, //10204 #HANGUL SYLLABLE SIOS YEO RIEUL
+ {0xBCC9, 0xC164}, //10205 #HANGUL SYLLABLE SIOS YEO MIEUM
+ {0xBCCA, 0xC165}, //10206 #HANGUL SYLLABLE SIOS YEO PIEUP
+ {0xBCCB, 0xC167}, //10207 #HANGUL SYLLABLE SIOS YEO SIOS
+ {0xBCCC, 0xC168}, //10208 #HANGUL SYLLABLE SIOS YEO SSANGSIOS
+ {0xBCCD, 0xC169}, //10209 #HANGUL SYLLABLE SIOS YEO IEUNG
+ {0xBCCE, 0xC170}, //10210 #HANGUL SYLLABLE SIOS YE
+ {0xBCCF, 0xC174}, //10211 #HANGUL SYLLABLE SIOS YE NIEUN
+ {0xBCD0, 0xC178}, //10212 #HANGUL SYLLABLE SIOS YE RIEUL
+ {0xBCD1, 0xC185}, //10213 #HANGUL SYLLABLE SIOS YE IEUNG
+ {0xBCD2, 0xC18C}, //10214 #HANGUL SYLLABLE SIOS O
+ {0xBCD3, 0xC18D}, //10215 #HANGUL SYLLABLE SIOS O KIYEOK
+ {0xBCD4, 0xC18E}, //10216 #HANGUL SYLLABLE SIOS O SSANGKIYEOK
+ {0xBCD5, 0xC190}, //10217 #HANGUL SYLLABLE SIOS O NIEUN
+ {0xBCD6, 0xC194}, //10218 #HANGUL SYLLABLE SIOS O RIEUL
+ {0xBCD7, 0xC196}, //10219 #HANGUL SYLLABLE SIOS O RIEULMIEUM
+ {0xBCD8, 0xC19C}, //10220 #HANGUL SYLLABLE SIOS O MIEUM
+ {0xBCD9, 0xC19D}, //10221 #HANGUL SYLLABLE SIOS O PIEUP
+ {0xBCDA, 0xC19F}, //10222 #HANGUL SYLLABLE SIOS O SIOS
+ {0xBCDB, 0xC1A1}, //10223 #HANGUL SYLLABLE SIOS O IEUNG
+ {0xBCDC, 0xC1A5}, //10224 #HANGUL SYLLABLE SIOS O THIEUTH
+ {0xBCDD, 0xC1A8}, //10225 #HANGUL SYLLABLE SIOS WA
+ {0xBCDE, 0xC1A9}, //10226 #HANGUL SYLLABLE SIOS WA KIYEOK
+ {0xBCDF, 0xC1AC}, //10227 #HANGUL SYLLABLE SIOS WA NIEUN
+ {0xBCE0, 0xC1B0}, //10228 #HANGUL SYLLABLE SIOS WA RIEUL
+ {0xBCE1, 0xC1BD}, //10229 #HANGUL SYLLABLE SIOS WA IEUNG
+ {0xBCE2, 0xC1C4}, //10230 #HANGUL SYLLABLE SIOS WAE
+ {0xBCE3, 0xC1C8}, //10231 #HANGUL SYLLABLE SIOS WAE NIEUN
+ {0xBCE4, 0xC1CC}, //10232 #HANGUL SYLLABLE SIOS WAE RIEUL
+ {0xBCE5, 0xC1D4}, //10233 #HANGUL SYLLABLE SIOS WAE MIEUM
+ {0xBCE6, 0xC1D7}, //10234 #HANGUL SYLLABLE SIOS WAE SIOS
+ {0xBCE7, 0xC1D8}, //10235 #HANGUL SYLLABLE SIOS WAE SSANGSIOS
+ {0xBCE8, 0xC1E0}, //10236 #HANGUL SYLLABLE SIOS OE
+ {0xBCE9, 0xC1E4}, //10237 #HANGUL SYLLABLE SIOS OE NIEUN
+ {0xBCEA, 0xC1E8}, //10238 #HANGUL SYLLABLE SIOS OE RIEUL
+ {0xBCEB, 0xC1F0}, //10239 #HANGUL SYLLABLE SIOS OE MIEUM
+ {0xBCEC, 0xC1F1}, //10240 #HANGUL SYLLABLE SIOS OE PIEUP
+ {0xBCED, 0xC1F3}, //10241 #HANGUL SYLLABLE SIOS OE SIOS
+ {0xBCEE, 0xC1FC}, //10242 #HANGUL SYLLABLE SIOS YO
+ {0xBCEF, 0xC1FD}, //10243 #HANGUL SYLLABLE SIOS YO KIYEOK
+ {0xBCF0, 0xC200}, //10244 #HANGUL SYLLABLE SIOS YO NIEUN
+ {0xBCF1, 0xC204}, //10245 #HANGUL SYLLABLE SIOS YO RIEUL
+ {0xBCF2, 0xC20C}, //10246 #HANGUL SYLLABLE SIOS YO MIEUM
+ {0xBCF3, 0xC20D}, //10247 #HANGUL SYLLABLE SIOS YO PIEUP
+ {0xBCF4, 0xC20F}, //10248 #HANGUL SYLLABLE SIOS YO SIOS
+ {0xBCF5, 0xC211}, //10249 #HANGUL SYLLABLE SIOS YO IEUNG
+ {0xBCF6, 0xC218}, //10250 #HANGUL SYLLABLE SIOS U
+ {0xBCF7, 0xC219}, //10251 #HANGUL SYLLABLE SIOS U KIYEOK
+ {0xBCF8, 0xC21C}, //10252 #HANGUL SYLLABLE SIOS U NIEUN
+ {0xBCF9, 0xC21F}, //10253 #HANGUL SYLLABLE SIOS U TIKEUT
+ {0xBCFA, 0xC220}, //10254 #HANGUL SYLLABLE SIOS U RIEUL
+ {0xBCFB, 0xC228}, //10255 #HANGUL SYLLABLE SIOS U MIEUM
+ {0xBCFC, 0xC229}, //10256 #HANGUL SYLLABLE SIOS U PIEUP
+ {0xBCFD, 0xC22B}, //10257 #HANGUL SYLLABLE SIOS U SIOS
+ {0xBCFE, 0xC22D}, //10258 #HANGUL SYLLABLE SIOS U IEUNG
+ {0xBD41, 0xD3D7}, //10259 #HANGUL SYLLABLE PHIEUPH YE TIKEUT
+ {0xBD42, 0xD3D9}, //10260 #HANGUL SYLLABLE PHIEUPH YE RIEULKIYEOK
+ {0xBD43, 0xD3DA}, //10261 #HANGUL SYLLABLE PHIEUPH YE RIEULMIEUM
+ {0xBD44, 0xD3DB}, //10262 #HANGUL SYLLABLE PHIEUPH YE RIEULPIEUP
+ {0xBD45, 0xD3DC}, //10263 #HANGUL SYLLABLE PHIEUPH YE RIEULSIOS
+ {0xBD46, 0xD3DD}, //10264 #HANGUL SYLLABLE PHIEUPH YE RIEULTHIEUTH
+ {0xBD47, 0xD3DE}, //10265 #HANGUL SYLLABLE PHIEUPH YE RIEULPHIEUPH
+ {0xBD48, 0xD3DF}, //10266 #HANGUL SYLLABLE PHIEUPH YE RIEULHIEUH
+ {0xBD49, 0xD3E0}, //10267 #HANGUL SYLLABLE PHIEUPH YE MIEUM
+ {0xBD4A, 0xD3E2}, //10268 #HANGUL SYLLABLE PHIEUPH YE PIEUPSIOS
+ {0xBD4B, 0xD3E4}, //10269 #HANGUL SYLLABLE PHIEUPH YE SSANGSIOS
+ {0xBD4C, 0xD3E5}, //10270 #HANGUL SYLLABLE PHIEUPH YE IEUNG
+ {0xBD4D, 0xD3E6}, //10271 #HANGUL SYLLABLE PHIEUPH YE CIEUC
+ {0xBD4E, 0xD3E7}, //10272 #HANGUL SYLLABLE PHIEUPH YE CHIEUCH
+ {0xBD4F, 0xD3E8}, //10273 #HANGUL SYLLABLE PHIEUPH YE KHIEUKH
+ {0xBD50, 0xD3E9}, //10274 #HANGUL SYLLABLE PHIEUPH YE THIEUTH
+ {0xBD51, 0xD3EA}, //10275 #HANGUL SYLLABLE PHIEUPH YE PHIEUPH
+ {0xBD52, 0xD3EB}, //10276 #HANGUL SYLLABLE PHIEUPH YE HIEUH
+ {0xBD53, 0xD3EE}, //10277 #HANGUL SYLLABLE PHIEUPH O SSANGKIYEOK
+ {0xBD54, 0xD3EF}, //10278 #HANGUL SYLLABLE PHIEUPH O KIYEOKSIOS
+ {0xBD55, 0xD3F1}, //10279 #HANGUL SYLLABLE PHIEUPH O NIEUNCIEUC
+ {0xBD56, 0xD3F2}, //10280 #HANGUL SYLLABLE PHIEUPH O NIEUNHIEUH
+ {0xBD57, 0xD3F3}, //10281 #HANGUL SYLLABLE PHIEUPH O TIKEUT
+ {0xBD58, 0xD3F5}, //10282 #HANGUL SYLLABLE PHIEUPH O RIEULKIYEOK
+ {0xBD59, 0xD3F6}, //10283 #HANGUL SYLLABLE PHIEUPH O RIEULMIEUM
+ {0xBD5A, 0xD3F7}, //10284 #HANGUL SYLLABLE PHIEUPH O RIEULPIEUP
+ {0xBD61, 0xD3F8}, //10285 #HANGUL SYLLABLE PHIEUPH O RIEULSIOS
+ {0xBD62, 0xD3F9}, //10286 #HANGUL SYLLABLE PHIEUPH O RIEULTHIEUTH
+ {0xBD63, 0xD3FA}, //10287 #HANGUL SYLLABLE PHIEUPH O RIEULPHIEUPH
+ {0xBD64, 0xD3FB}, //10288 #HANGUL SYLLABLE PHIEUPH O RIEULHIEUH
+ {0xBD65, 0xD3FE}, //10289 #HANGUL SYLLABLE PHIEUPH O PIEUPSIOS
+ {0xBD66, 0xD400}, //10290 #HANGUL SYLLABLE PHIEUPH O SSANGSIOS
+ {0xBD67, 0xD402}, //10291 #HANGUL SYLLABLE PHIEUPH O CIEUC
+ {0xBD68, 0xD403}, //10292 #HANGUL SYLLABLE PHIEUPH O CHIEUCH
+ {0xBD69, 0xD404}, //10293 #HANGUL SYLLABLE PHIEUPH O KHIEUKH
+ {0xBD6A, 0xD405}, //10294 #HANGUL SYLLABLE PHIEUPH O THIEUTH
+ {0xBD6B, 0xD406}, //10295 #HANGUL SYLLABLE PHIEUPH O PHIEUPH
+ {0xBD6C, 0xD407}, //10296 #HANGUL SYLLABLE PHIEUPH O HIEUH
+ {0xBD6D, 0xD409}, //10297 #HANGUL SYLLABLE PHIEUPH WA KIYEOK
+ {0xBD6E, 0xD40A}, //10298 #HANGUL SYLLABLE PHIEUPH WA SSANGKIYEOK
+ {0xBD6F, 0xD40B}, //10299 #HANGUL SYLLABLE PHIEUPH WA KIYEOKSIOS
+ {0xBD70, 0xD40C}, //10300 #HANGUL SYLLABLE PHIEUPH WA NIEUN
+ {0xBD71, 0xD40D}, //10301 #HANGUL SYLLABLE PHIEUPH WA NIEUNCIEUC
+ {0xBD72, 0xD40E}, //10302 #HANGUL SYLLABLE PHIEUPH WA NIEUNHIEUH
+ {0xBD73, 0xD40F}, //10303 #HANGUL SYLLABLE PHIEUPH WA TIKEUT
+ {0xBD74, 0xD410}, //10304 #HANGUL SYLLABLE PHIEUPH WA RIEUL
+ {0xBD75, 0xD411}, //10305 #HANGUL SYLLABLE PHIEUPH WA RIEULKIYEOK
+ {0xBD76, 0xD412}, //10306 #HANGUL SYLLABLE PHIEUPH WA RIEULMIEUM
+ {0xBD77, 0xD413}, //10307 #HANGUL SYLLABLE PHIEUPH WA RIEULPIEUP
+ {0xBD78, 0xD414}, //10308 #HANGUL SYLLABLE PHIEUPH WA RIEULSIOS
+ {0xBD79, 0xD415}, //10309 #HANGUL SYLLABLE PHIEUPH WA RIEULTHIEUTH
+ {0xBD7A, 0xD416}, //10310 #HANGUL SYLLABLE PHIEUPH WA RIEULPHIEUPH
+ {0xBD81, 0xD417}, //10311 #HANGUL SYLLABLE PHIEUPH WA RIEULHIEUH
+ {0xBD82, 0xD418}, //10312 #HANGUL SYLLABLE PHIEUPH WA MIEUM
+ {0xBD83, 0xD419}, //10313 #HANGUL SYLLABLE PHIEUPH WA PIEUP
+ {0xBD84, 0xD41A}, //10314 #HANGUL SYLLABLE PHIEUPH WA PIEUPSIOS
+ {0xBD85, 0xD41B}, //10315 #HANGUL SYLLABLE PHIEUPH WA SIOS
+ {0xBD86, 0xD41C}, //10316 #HANGUL SYLLABLE PHIEUPH WA SSANGSIOS
+ {0xBD87, 0xD41E}, //10317 #HANGUL SYLLABLE PHIEUPH WA CIEUC
+ {0xBD88, 0xD41F}, //10318 #HANGUL SYLLABLE PHIEUPH WA CHIEUCH
+ {0xBD89, 0xD420}, //10319 #HANGUL SYLLABLE PHIEUPH WA KHIEUKH
+ {0xBD8A, 0xD421}, //10320 #HANGUL SYLLABLE PHIEUPH WA THIEUTH
+ {0xBD8B, 0xD422}, //10321 #HANGUL SYLLABLE PHIEUPH WA PHIEUPH
+ {0xBD8C, 0xD423}, //10322 #HANGUL SYLLABLE PHIEUPH WA HIEUH
+ {0xBD8D, 0xD424}, //10323 #HANGUL SYLLABLE PHIEUPH WAE
+ {0xBD8E, 0xD425}, //10324 #HANGUL SYLLABLE PHIEUPH WAE KIYEOK
+ {0xBD8F, 0xD426}, //10325 #HANGUL SYLLABLE PHIEUPH WAE SSANGKIYEOK
+ {0xBD90, 0xD427}, //10326 #HANGUL SYLLABLE PHIEUPH WAE KIYEOKSIOS
+ {0xBD91, 0xD428}, //10327 #HANGUL SYLLABLE PHIEUPH WAE NIEUN
+ {0xBD92, 0xD429}, //10328 #HANGUL SYLLABLE PHIEUPH WAE NIEUNCIEUC
+ {0xBD93, 0xD42A}, //10329 #HANGUL SYLLABLE PHIEUPH WAE NIEUNHIEUH
+ {0xBD94, 0xD42B}, //10330 #HANGUL SYLLABLE PHIEUPH WAE TIKEUT
+ {0xBD95, 0xD42C}, //10331 #HANGUL SYLLABLE PHIEUPH WAE RIEUL
+ {0xBD96, 0xD42D}, //10332 #HANGUL SYLLABLE PHIEUPH WAE RIEULKIYEOK
+ {0xBD97, 0xD42E}, //10333 #HANGUL SYLLABLE PHIEUPH WAE RIEULMIEUM
+ {0xBD98, 0xD42F}, //10334 #HANGUL SYLLABLE PHIEUPH WAE RIEULPIEUP
+ {0xBD99, 0xD430}, //10335 #HANGUL SYLLABLE PHIEUPH WAE RIEULSIOS
+ {0xBD9A, 0xD431}, //10336 #HANGUL SYLLABLE PHIEUPH WAE RIEULTHIEUTH
+ {0xBD9B, 0xD432}, //10337 #HANGUL SYLLABLE PHIEUPH WAE RIEULPHIEUPH
+ {0xBD9C, 0xD433}, //10338 #HANGUL SYLLABLE PHIEUPH WAE RIEULHIEUH
+ {0xBD9D, 0xD434}, //10339 #HANGUL SYLLABLE PHIEUPH WAE MIEUM
+ {0xBD9E, 0xD435}, //10340 #HANGUL SYLLABLE PHIEUPH WAE PIEUP
+ {0xBD9F, 0xD436}, //10341 #HANGUL SYLLABLE PHIEUPH WAE PIEUPSIOS
+ {0xBDA0, 0xD437}, //10342 #HANGUL SYLLABLE PHIEUPH WAE SIOS
+ {0xBDA1, 0xC22F}, //10343 #HANGUL SYLLABLE SIOS U CHIEUCH
+ {0xBDA2, 0xC231}, //10344 #HANGUL SYLLABLE SIOS U THIEUTH
+ {0xBDA3, 0xC232}, //10345 #HANGUL SYLLABLE SIOS U PHIEUPH
+ {0xBDA4, 0xC234}, //10346 #HANGUL SYLLABLE SIOS WEO
+ {0xBDA5, 0xC248}, //10347 #HANGUL SYLLABLE SIOS WEO SSANGSIOS
+ {0xBDA6, 0xC250}, //10348 #HANGUL SYLLABLE SIOS WE
+ {0xBDA7, 0xC251}, //10349 #HANGUL SYLLABLE SIOS WE KIYEOK
+ {0xBDA8, 0xC254}, //10350 #HANGUL SYLLABLE SIOS WE NIEUN
+ {0xBDA9, 0xC258}, //10351 #HANGUL SYLLABLE SIOS WE RIEUL
+ {0xBDAA, 0xC260}, //10352 #HANGUL SYLLABLE SIOS WE MIEUM
+ {0xBDAB, 0xC265}, //10353 #HANGUL SYLLABLE SIOS WE IEUNG
+ {0xBDAC, 0xC26C}, //10354 #HANGUL SYLLABLE SIOS WI
+ {0xBDAD, 0xC26D}, //10355 #HANGUL SYLLABLE SIOS WI KIYEOK
+ {0xBDAE, 0xC270}, //10356 #HANGUL SYLLABLE SIOS WI NIEUN
+ {0xBDAF, 0xC274}, //10357 #HANGUL SYLLABLE SIOS WI RIEUL
+ {0xBDB0, 0xC27C}, //10358 #HANGUL SYLLABLE SIOS WI MIEUM
+ {0xBDB1, 0xC27D}, //10359 #HANGUL SYLLABLE SIOS WI PIEUP
+ {0xBDB2, 0xC27F}, //10360 #HANGUL SYLLABLE SIOS WI SIOS
+ {0xBDB3, 0xC281}, //10361 #HANGUL SYLLABLE SIOS WI IEUNG
+ {0xBDB4, 0xC288}, //10362 #HANGUL SYLLABLE SIOS YU
+ {0xBDB5, 0xC289}, //10363 #HANGUL SYLLABLE SIOS YU KIYEOK
+ {0xBDB6, 0xC290}, //10364 #HANGUL SYLLABLE SIOS YU RIEUL
+ {0xBDB7, 0xC298}, //10365 #HANGUL SYLLABLE SIOS YU MIEUM
+ {0xBDB8, 0xC29B}, //10366 #HANGUL SYLLABLE SIOS YU SIOS
+ {0xBDB9, 0xC29D}, //10367 #HANGUL SYLLABLE SIOS YU IEUNG
+ {0xBDBA, 0xC2A4}, //10368 #HANGUL SYLLABLE SIOS EU
+ {0xBDBB, 0xC2A5}, //10369 #HANGUL SYLLABLE SIOS EU KIYEOK
+ {0xBDBC, 0xC2A8}, //10370 #HANGUL SYLLABLE SIOS EU NIEUN
+ {0xBDBD, 0xC2AC}, //10371 #HANGUL SYLLABLE SIOS EU RIEUL
+ {0xBDBE, 0xC2AD}, //10372 #HANGUL SYLLABLE SIOS EU RIEULKIYEOK
+ {0xBDBF, 0xC2B4}, //10373 #HANGUL SYLLABLE SIOS EU MIEUM
+ {0xBDC0, 0xC2B5}, //10374 #HANGUL SYLLABLE SIOS EU PIEUP
+ {0xBDC1, 0xC2B7}, //10375 #HANGUL SYLLABLE SIOS EU SIOS
+ {0xBDC2, 0xC2B9}, //10376 #HANGUL SYLLABLE SIOS EU IEUNG
+ {0xBDC3, 0xC2DC}, //10377 #HANGUL SYLLABLE SIOS I
+ {0xBDC4, 0xC2DD}, //10378 #HANGUL SYLLABLE SIOS I KIYEOK
+ {0xBDC5, 0xC2E0}, //10379 #HANGUL SYLLABLE SIOS I NIEUN
+ {0xBDC6, 0xC2E3}, //10380 #HANGUL SYLLABLE SIOS I TIKEUT
+ {0xBDC7, 0xC2E4}, //10381 #HANGUL SYLLABLE SIOS I RIEUL
+ {0xBDC8, 0xC2EB}, //10382 #HANGUL SYLLABLE SIOS I RIEULHIEUH
+ {0xBDC9, 0xC2EC}, //10383 #HANGUL SYLLABLE SIOS I MIEUM
+ {0xBDCA, 0xC2ED}, //10384 #HANGUL SYLLABLE SIOS I PIEUP
+ {0xBDCB, 0xC2EF}, //10385 #HANGUL SYLLABLE SIOS I SIOS
+ {0xBDCC, 0xC2F1}, //10386 #HANGUL SYLLABLE SIOS I IEUNG
+ {0xBDCD, 0xC2F6}, //10387 #HANGUL SYLLABLE SIOS I PHIEUPH
+ {0xBDCE, 0xC2F8}, //10388 #HANGUL SYLLABLE SSANGSIOS A
+ {0xBDCF, 0xC2F9}, //10389 #HANGUL SYLLABLE SSANGSIOS A KIYEOK
+ {0xBDD0, 0xC2FB}, //10390 #HANGUL SYLLABLE SSANGSIOS A KIYEOKSIOS
+ {0xBDD1, 0xC2FC}, //10391 #HANGUL SYLLABLE SSANGSIOS A NIEUN
+ {0xBDD2, 0xC300}, //10392 #HANGUL SYLLABLE SSANGSIOS A RIEUL
+ {0xBDD3, 0xC308}, //10393 #HANGUL SYLLABLE SSANGSIOS A MIEUM
+ {0xBDD4, 0xC309}, //10394 #HANGUL SYLLABLE SSANGSIOS A PIEUP
+ {0xBDD5, 0xC30C}, //10395 #HANGUL SYLLABLE SSANGSIOS A SSANGSIOS
+ {0xBDD6, 0xC30D}, //10396 #HANGUL SYLLABLE SSANGSIOS A IEUNG
+ {0xBDD7, 0xC313}, //10397 #HANGUL SYLLABLE SSANGSIOS A HIEUH
+ {0xBDD8, 0xC314}, //10398 #HANGUL SYLLABLE SSANGSIOS AE
+ {0xBDD9, 0xC315}, //10399 #HANGUL SYLLABLE SSANGSIOS AE KIYEOK
+ {0xBDDA, 0xC318}, //10400 #HANGUL SYLLABLE SSANGSIOS AE NIEUN
+ {0xBDDB, 0xC31C}, //10401 #HANGUL SYLLABLE SSANGSIOS AE RIEUL
+ {0xBDDC, 0xC324}, //10402 #HANGUL SYLLABLE SSANGSIOS AE MIEUM
+ {0xBDDD, 0xC325}, //10403 #HANGUL SYLLABLE SSANGSIOS AE PIEUP
+ {0xBDDE, 0xC328}, //10404 #HANGUL SYLLABLE SSANGSIOS AE SSANGSIOS
+ {0xBDDF, 0xC329}, //10405 #HANGUL SYLLABLE SSANGSIOS AE IEUNG
+ {0xBDE0, 0xC345}, //10406 #HANGUL SYLLABLE SSANGSIOS YA IEUNG
+ {0xBDE1, 0xC368}, //10407 #HANGUL SYLLABLE SSANGSIOS EO
+ {0xBDE2, 0xC369}, //10408 #HANGUL SYLLABLE SSANGSIOS EO KIYEOK
+ {0xBDE3, 0xC36C}, //10409 #HANGUL SYLLABLE SSANGSIOS EO NIEUN
+ {0xBDE4, 0xC370}, //10410 #HANGUL SYLLABLE SSANGSIOS EO RIEUL
+ {0xBDE5, 0xC372}, //10411 #HANGUL SYLLABLE SSANGSIOS EO RIEULMIEUM
+ {0xBDE6, 0xC378}, //10412 #HANGUL SYLLABLE SSANGSIOS EO MIEUM
+ {0xBDE7, 0xC379}, //10413 #HANGUL SYLLABLE SSANGSIOS EO PIEUP
+ {0xBDE8, 0xC37C}, //10414 #HANGUL SYLLABLE SSANGSIOS EO SSANGSIOS
+ {0xBDE9, 0xC37D}, //10415 #HANGUL SYLLABLE SSANGSIOS EO IEUNG
+ {0xBDEA, 0xC384}, //10416 #HANGUL SYLLABLE SSANGSIOS E
+ {0xBDEB, 0xC388}, //10417 #HANGUL SYLLABLE SSANGSIOS E NIEUN
+ {0xBDEC, 0xC38C}, //10418 #HANGUL SYLLABLE SSANGSIOS E RIEUL
+ {0xBDED, 0xC3C0}, //10419 #HANGUL SYLLABLE SSANGSIOS YE NIEUN
+ {0xBDEE, 0xC3D8}, //10420 #HANGUL SYLLABLE SSANGSIOS O
+ {0xBDEF, 0xC3D9}, //10421 #HANGUL SYLLABLE SSANGSIOS O KIYEOK
+ {0xBDF0, 0xC3DC}, //10422 #HANGUL SYLLABLE SSANGSIOS O NIEUN
+ {0xBDF1, 0xC3DF}, //10423 #HANGUL SYLLABLE SSANGSIOS O TIKEUT
+ {0xBDF2, 0xC3E0}, //10424 #HANGUL SYLLABLE SSANGSIOS O RIEUL
+ {0xBDF3, 0xC3E2}, //10425 #HANGUL SYLLABLE SSANGSIOS O RIEULMIEUM
+ {0xBDF4, 0xC3E8}, //10426 #HANGUL SYLLABLE SSANGSIOS O MIEUM
+ {0xBDF5, 0xC3E9}, //10427 #HANGUL SYLLABLE SSANGSIOS O PIEUP
+ {0xBDF6, 0xC3ED}, //10428 #HANGUL SYLLABLE SSANGSIOS O IEUNG
+ {0xBDF7, 0xC3F4}, //10429 #HANGUL SYLLABLE SSANGSIOS WA
+ {0xBDF8, 0xC3F5}, //10430 #HANGUL SYLLABLE SSANGSIOS WA KIYEOK
+ {0xBDF9, 0xC3F8}, //10431 #HANGUL SYLLABLE SSANGSIOS WA NIEUN
+ {0xBDFA, 0xC408}, //10432 #HANGUL SYLLABLE SSANGSIOS WA SSANGSIOS
+ {0xBDFB, 0xC410}, //10433 #HANGUL SYLLABLE SSANGSIOS WAE
+ {0xBDFC, 0xC424}, //10434 #HANGUL SYLLABLE SSANGSIOS WAE SSANGSIOS
+ {0xBDFD, 0xC42C}, //10435 #HANGUL SYLLABLE SSANGSIOS OE
+ {0xBDFE, 0xC430}, //10436 #HANGUL SYLLABLE SSANGSIOS OE NIEUN
+ {0xBE41, 0xD438}, //10437 #HANGUL SYLLABLE PHIEUPH WAE SSANGSIOS
+ {0xBE42, 0xD439}, //10438 #HANGUL SYLLABLE PHIEUPH WAE IEUNG
+ {0xBE43, 0xD43A}, //10439 #HANGUL SYLLABLE PHIEUPH WAE CIEUC
+ {0xBE44, 0xD43B}, //10440 #HANGUL SYLLABLE PHIEUPH WAE CHIEUCH
+ {0xBE45, 0xD43C}, //10441 #HANGUL SYLLABLE PHIEUPH WAE KHIEUKH
+ {0xBE46, 0xD43D}, //10442 #HANGUL SYLLABLE PHIEUPH WAE THIEUTH
+ {0xBE47, 0xD43E}, //10443 #HANGUL SYLLABLE PHIEUPH WAE PHIEUPH
+ {0xBE48, 0xD43F}, //10444 #HANGUL SYLLABLE PHIEUPH WAE HIEUH
+ {0xBE49, 0xD441}, //10445 #HANGUL SYLLABLE PHIEUPH OE KIYEOK
+ {0xBE4A, 0xD442}, //10446 #HANGUL SYLLABLE PHIEUPH OE SSANGKIYEOK
+ {0xBE4B, 0xD443}, //10447 #HANGUL SYLLABLE PHIEUPH OE KIYEOKSIOS
+ {0xBE4C, 0xD445}, //10448 #HANGUL SYLLABLE PHIEUPH OE NIEUNCIEUC
+ {0xBE4D, 0xD446}, //10449 #HANGUL SYLLABLE PHIEUPH OE NIEUNHIEUH
+ {0xBE4E, 0xD447}, //10450 #HANGUL SYLLABLE PHIEUPH OE TIKEUT
+ {0xBE4F, 0xD448}, //10451 #HANGUL SYLLABLE PHIEUPH OE RIEUL
+ {0xBE50, 0xD449}, //10452 #HANGUL SYLLABLE PHIEUPH OE RIEULKIYEOK
+ {0xBE51, 0xD44A}, //10453 #HANGUL SYLLABLE PHIEUPH OE RIEULMIEUM
+ {0xBE52, 0xD44B}, //10454 #HANGUL SYLLABLE PHIEUPH OE RIEULPIEUP
+ {0xBE53, 0xD44C}, //10455 #HANGUL SYLLABLE PHIEUPH OE RIEULSIOS
+ {0xBE54, 0xD44D}, //10456 #HANGUL SYLLABLE PHIEUPH OE RIEULTHIEUTH
+ {0xBE55, 0xD44E}, //10457 #HANGUL SYLLABLE PHIEUPH OE RIEULPHIEUPH
+ {0xBE56, 0xD44F}, //10458 #HANGUL SYLLABLE PHIEUPH OE RIEULHIEUH
+ {0xBE57, 0xD450}, //10459 #HANGUL SYLLABLE PHIEUPH OE MIEUM
+ {0xBE58, 0xD451}, //10460 #HANGUL SYLLABLE PHIEUPH OE PIEUP
+ {0xBE59, 0xD452}, //10461 #HANGUL SYLLABLE PHIEUPH OE PIEUPSIOS
+ {0xBE5A, 0xD453}, //10462 #HANGUL SYLLABLE PHIEUPH OE SIOS
+ {0xBE61, 0xD454}, //10463 #HANGUL SYLLABLE PHIEUPH OE SSANGSIOS
+ {0xBE62, 0xD455}, //10464 #HANGUL SYLLABLE PHIEUPH OE IEUNG
+ {0xBE63, 0xD456}, //10465 #HANGUL SYLLABLE PHIEUPH OE CIEUC
+ {0xBE64, 0xD457}, //10466 #HANGUL SYLLABLE PHIEUPH OE CHIEUCH
+ {0xBE65, 0xD458}, //10467 #HANGUL SYLLABLE PHIEUPH OE KHIEUKH
+ {0xBE66, 0xD459}, //10468 #HANGUL SYLLABLE PHIEUPH OE THIEUTH
+ {0xBE67, 0xD45A}, //10469 #HANGUL SYLLABLE PHIEUPH OE PHIEUPH
+ {0xBE68, 0xD45B}, //10470 #HANGUL SYLLABLE PHIEUPH OE HIEUH
+ {0xBE69, 0xD45D}, //10471 #HANGUL SYLLABLE PHIEUPH YO KIYEOK
+ {0xBE6A, 0xD45E}, //10472 #HANGUL SYLLABLE PHIEUPH YO SSANGKIYEOK
+ {0xBE6B, 0xD45F}, //10473 #HANGUL SYLLABLE PHIEUPH YO KIYEOKSIOS
+ {0xBE6C, 0xD461}, //10474 #HANGUL SYLLABLE PHIEUPH YO NIEUNCIEUC
+ {0xBE6D, 0xD462}, //10475 #HANGUL SYLLABLE PHIEUPH YO NIEUNHIEUH
+ {0xBE6E, 0xD463}, //10476 #HANGUL SYLLABLE PHIEUPH YO TIKEUT
+ {0xBE6F, 0xD465}, //10477 #HANGUL SYLLABLE PHIEUPH YO RIEULKIYEOK
+ {0xBE70, 0xD466}, //10478 #HANGUL SYLLABLE PHIEUPH YO RIEULMIEUM
+ {0xBE71, 0xD467}, //10479 #HANGUL SYLLABLE PHIEUPH YO RIEULPIEUP
+ {0xBE72, 0xD468}, //10480 #HANGUL SYLLABLE PHIEUPH YO RIEULSIOS
+ {0xBE73, 0xD469}, //10481 #HANGUL SYLLABLE PHIEUPH YO RIEULTHIEUTH
+ {0xBE74, 0xD46A}, //10482 #HANGUL SYLLABLE PHIEUPH YO RIEULPHIEUPH
+ {0xBE75, 0xD46B}, //10483 #HANGUL SYLLABLE PHIEUPH YO RIEULHIEUH
+ {0xBE76, 0xD46C}, //10484 #HANGUL SYLLABLE PHIEUPH YO MIEUM
+ {0xBE77, 0xD46E}, //10485 #HANGUL SYLLABLE PHIEUPH YO PIEUPSIOS
+ {0xBE78, 0xD470}, //10486 #HANGUL SYLLABLE PHIEUPH YO SSANGSIOS
+ {0xBE79, 0xD471}, //10487 #HANGUL SYLLABLE PHIEUPH YO IEUNG
+ {0xBE7A, 0xD472}, //10488 #HANGUL SYLLABLE PHIEUPH YO CIEUC
+ {0xBE81, 0xD473}, //10489 #HANGUL SYLLABLE PHIEUPH YO CHIEUCH
+ {0xBE82, 0xD474}, //10490 #HANGUL SYLLABLE PHIEUPH YO KHIEUKH
+ {0xBE83, 0xD475}, //10491 #HANGUL SYLLABLE PHIEUPH YO THIEUTH
+ {0xBE84, 0xD476}, //10492 #HANGUL SYLLABLE PHIEUPH YO PHIEUPH
+ {0xBE85, 0xD477}, //10493 #HANGUL SYLLABLE PHIEUPH YO HIEUH
+ {0xBE86, 0xD47A}, //10494 #HANGUL SYLLABLE PHIEUPH U SSANGKIYEOK
+ {0xBE87, 0xD47B}, //10495 #HANGUL SYLLABLE PHIEUPH U KIYEOKSIOS
+ {0xBE88, 0xD47D}, //10496 #HANGUL SYLLABLE PHIEUPH U NIEUNCIEUC
+ {0xBE89, 0xD47E}, //10497 #HANGUL SYLLABLE PHIEUPH U NIEUNHIEUH
+ {0xBE8A, 0xD481}, //10498 #HANGUL SYLLABLE PHIEUPH U RIEULKIYEOK
+ {0xBE8B, 0xD483}, //10499 #HANGUL SYLLABLE PHIEUPH U RIEULPIEUP
+ {0xBE8C, 0xD484}, //10500 #HANGUL SYLLABLE PHIEUPH U RIEULSIOS
+ {0xBE8D, 0xD485}, //10501 #HANGUL SYLLABLE PHIEUPH U RIEULTHIEUTH
+ {0xBE8E, 0xD486}, //10502 #HANGUL SYLLABLE PHIEUPH U RIEULPHIEUPH
+ {0xBE8F, 0xD487}, //10503 #HANGUL SYLLABLE PHIEUPH U RIEULHIEUH
+ {0xBE90, 0xD48A}, //10504 #HANGUL SYLLABLE PHIEUPH U PIEUPSIOS
+ {0xBE91, 0xD48C}, //10505 #HANGUL SYLLABLE PHIEUPH U SSANGSIOS
+ {0xBE92, 0xD48E}, //10506 #HANGUL SYLLABLE PHIEUPH U CIEUC
+ {0xBE93, 0xD48F}, //10507 #HANGUL SYLLABLE PHIEUPH U CHIEUCH
+ {0xBE94, 0xD490}, //10508 #HANGUL SYLLABLE PHIEUPH U KHIEUKH
+ {0xBE95, 0xD491}, //10509 #HANGUL SYLLABLE PHIEUPH U THIEUTH
+ {0xBE96, 0xD492}, //10510 #HANGUL SYLLABLE PHIEUPH U PHIEUPH
+ {0xBE97, 0xD493}, //10511 #HANGUL SYLLABLE PHIEUPH U HIEUH
+ {0xBE98, 0xD495}, //10512 #HANGUL SYLLABLE PHIEUPH WEO KIYEOK
+ {0xBE99, 0xD496}, //10513 #HANGUL SYLLABLE PHIEUPH WEO SSANGKIYEOK
+ {0xBE9A, 0xD497}, //10514 #HANGUL SYLLABLE PHIEUPH WEO KIYEOKSIOS
+ {0xBE9B, 0xD498}, //10515 #HANGUL SYLLABLE PHIEUPH WEO NIEUN
+ {0xBE9C, 0xD499}, //10516 #HANGUL SYLLABLE PHIEUPH WEO NIEUNCIEUC
+ {0xBE9D, 0xD49A}, //10517 #HANGUL SYLLABLE PHIEUPH WEO NIEUNHIEUH
+ {0xBE9E, 0xD49B}, //10518 #HANGUL SYLLABLE PHIEUPH WEO TIKEUT
+ {0xBE9F, 0xD49C}, //10519 #HANGUL SYLLABLE PHIEUPH WEO RIEUL
+ {0xBEA0, 0xD49D}, //10520 #HANGUL SYLLABLE PHIEUPH WEO RIEULKIYEOK
+ {0xBEA1, 0xC434}, //10521 #HANGUL SYLLABLE SSANGSIOS OE RIEUL
+ {0xBEA2, 0xC43C}, //10522 #HANGUL SYLLABLE SSANGSIOS OE MIEUM
+ {0xBEA3, 0xC43D}, //10523 #HANGUL SYLLABLE SSANGSIOS OE PIEUP
+ {0xBEA4, 0xC448}, //10524 #HANGUL SYLLABLE SSANGSIOS YO
+ {0xBEA5, 0xC464}, //10525 #HANGUL SYLLABLE SSANGSIOS U
+ {0xBEA6, 0xC465}, //10526 #HANGUL SYLLABLE SSANGSIOS U KIYEOK
+ {0xBEA7, 0xC468}, //10527 #HANGUL SYLLABLE SSANGSIOS U NIEUN
+ {0xBEA8, 0xC46C}, //10528 #HANGUL SYLLABLE SSANGSIOS U RIEUL
+ {0xBEA9, 0xC474}, //10529 #HANGUL SYLLABLE SSANGSIOS U MIEUM
+ {0xBEAA, 0xC475}, //10530 #HANGUL SYLLABLE SSANGSIOS U PIEUP
+ {0xBEAB, 0xC479}, //10531 #HANGUL SYLLABLE SSANGSIOS U IEUNG
+ {0xBEAC, 0xC480}, //10532 #HANGUL SYLLABLE SSANGSIOS WEO
+ {0xBEAD, 0xC494}, //10533 #HANGUL SYLLABLE SSANGSIOS WEO SSANGSIOS
+ {0xBEAE, 0xC49C}, //10534 #HANGUL SYLLABLE SSANGSIOS WE
+ {0xBEAF, 0xC4B8}, //10535 #HANGUL SYLLABLE SSANGSIOS WI
+ {0xBEB0, 0xC4BC}, //10536 #HANGUL SYLLABLE SSANGSIOS WI NIEUN
+ {0xBEB1, 0xC4E9}, //10537 #HANGUL SYLLABLE SSANGSIOS YU IEUNG
+ {0xBEB2, 0xC4F0}, //10538 #HANGUL SYLLABLE SSANGSIOS EU
+ {0xBEB3, 0xC4F1}, //10539 #HANGUL SYLLABLE SSANGSIOS EU KIYEOK
+ {0xBEB4, 0xC4F4}, //10540 #HANGUL SYLLABLE SSANGSIOS EU NIEUN
+ {0xBEB5, 0xC4F8}, //10541 #HANGUL SYLLABLE SSANGSIOS EU RIEUL
+ {0xBEB6, 0xC4FA}, //10542 #HANGUL SYLLABLE SSANGSIOS EU RIEULMIEUM
+ {0xBEB7, 0xC4FF}, //10543 #HANGUL SYLLABLE SSANGSIOS EU RIEULHIEUH
+ {0xBEB8, 0xC500}, //10544 #HANGUL SYLLABLE SSANGSIOS EU MIEUM
+ {0xBEB9, 0xC501}, //10545 #HANGUL SYLLABLE SSANGSIOS EU PIEUP
+ {0xBEBA, 0xC50C}, //10546 #HANGUL SYLLABLE SSANGSIOS YI
+ {0xBEBB, 0xC510}, //10547 #HANGUL SYLLABLE SSANGSIOS YI NIEUN
+ {0xBEBC, 0xC514}, //10548 #HANGUL SYLLABLE SSANGSIOS YI RIEUL
+ {0xBEBD, 0xC51C}, //10549 #HANGUL SYLLABLE SSANGSIOS YI MIEUM
+ {0xBEBE, 0xC528}, //10550 #HANGUL SYLLABLE SSANGSIOS I
+ {0xBEBF, 0xC529}, //10551 #HANGUL SYLLABLE SSANGSIOS I KIYEOK
+ {0xBEC0, 0xC52C}, //10552 #HANGUL SYLLABLE SSANGSIOS I NIEUN
+ {0xBEC1, 0xC530}, //10553 #HANGUL SYLLABLE SSANGSIOS I RIEUL
+ {0xBEC2, 0xC538}, //10554 #HANGUL SYLLABLE SSANGSIOS I MIEUM
+ {0xBEC3, 0xC539}, //10555 #HANGUL SYLLABLE SSANGSIOS I PIEUP
+ {0xBEC4, 0xC53B}, //10556 #HANGUL SYLLABLE SSANGSIOS I SIOS
+ {0xBEC5, 0xC53D}, //10557 #HANGUL SYLLABLE SSANGSIOS I IEUNG
+ {0xBEC6, 0xC544}, //10558 #HANGUL SYLLABLE IEUNG A
+ {0xBEC7, 0xC545}, //10559 #HANGUL SYLLABLE IEUNG A KIYEOK
+ {0xBEC8, 0xC548}, //10560 #HANGUL SYLLABLE IEUNG A NIEUN
+ {0xBEC9, 0xC549}, //10561 #HANGUL SYLLABLE IEUNG A NIEUNCIEUC
+ {0xBECA, 0xC54A}, //10562 #HANGUL SYLLABLE IEUNG A NIEUNHIEUH
+ {0xBECB, 0xC54C}, //10563 #HANGUL SYLLABLE IEUNG A RIEUL
+ {0xBECC, 0xC54D}, //10564 #HANGUL SYLLABLE IEUNG A RIEULKIYEOK
+ {0xBECD, 0xC54E}, //10565 #HANGUL SYLLABLE IEUNG A RIEULMIEUM
+ {0xBECE, 0xC553}, //10566 #HANGUL SYLLABLE IEUNG A RIEULHIEUH
+ {0xBECF, 0xC554}, //10567 #HANGUL SYLLABLE IEUNG A MIEUM
+ {0xBED0, 0xC555}, //10568 #HANGUL SYLLABLE IEUNG A PIEUP
+ {0xBED1, 0xC557}, //10569 #HANGUL SYLLABLE IEUNG A SIOS
+ {0xBED2, 0xC558}, //10570 #HANGUL SYLLABLE IEUNG A SSANGSIOS
+ {0xBED3, 0xC559}, //10571 #HANGUL SYLLABLE IEUNG A IEUNG
+ {0xBED4, 0xC55D}, //10572 #HANGUL SYLLABLE IEUNG A THIEUTH
+ {0xBED5, 0xC55E}, //10573 #HANGUL SYLLABLE IEUNG A PHIEUPH
+ {0xBED6, 0xC560}, //10574 #HANGUL SYLLABLE IEUNG AE
+ {0xBED7, 0xC561}, //10575 #HANGUL SYLLABLE IEUNG AE KIYEOK
+ {0xBED8, 0xC564}, //10576 #HANGUL SYLLABLE IEUNG AE NIEUN
+ {0xBED9, 0xC568}, //10577 #HANGUL SYLLABLE IEUNG AE RIEUL
+ {0xBEDA, 0xC570}, //10578 #HANGUL SYLLABLE IEUNG AE MIEUM
+ {0xBEDB, 0xC571}, //10579 #HANGUL SYLLABLE IEUNG AE PIEUP
+ {0xBEDC, 0xC573}, //10580 #HANGUL SYLLABLE IEUNG AE SIOS
+ {0xBEDD, 0xC574}, //10581 #HANGUL SYLLABLE IEUNG AE SSANGSIOS
+ {0xBEDE, 0xC575}, //10582 #HANGUL SYLLABLE IEUNG AE IEUNG
+ {0xBEDF, 0xC57C}, //10583 #HANGUL SYLLABLE IEUNG YA
+ {0xBEE0, 0xC57D}, //10584 #HANGUL SYLLABLE IEUNG YA KIYEOK
+ {0xBEE1, 0xC580}, //10585 #HANGUL SYLLABLE IEUNG YA NIEUN
+ {0xBEE2, 0xC584}, //10586 #HANGUL SYLLABLE IEUNG YA RIEUL
+ {0xBEE3, 0xC587}, //10587 #HANGUL SYLLABLE IEUNG YA RIEULPIEUP
+ {0xBEE4, 0xC58C}, //10588 #HANGUL SYLLABLE IEUNG YA MIEUM
+ {0xBEE5, 0xC58D}, //10589 #HANGUL SYLLABLE IEUNG YA PIEUP
+ {0xBEE6, 0xC58F}, //10590 #HANGUL SYLLABLE IEUNG YA SIOS
+ {0xBEE7, 0xC591}, //10591 #HANGUL SYLLABLE IEUNG YA IEUNG
+ {0xBEE8, 0xC595}, //10592 #HANGUL SYLLABLE IEUNG YA THIEUTH
+ {0xBEE9, 0xC597}, //10593 #HANGUL SYLLABLE IEUNG YA HIEUH
+ {0xBEEA, 0xC598}, //10594 #HANGUL SYLLABLE IEUNG YAE
+ {0xBEEB, 0xC59C}, //10595 #HANGUL SYLLABLE IEUNG YAE NIEUN
+ {0xBEEC, 0xC5A0}, //10596 #HANGUL SYLLABLE IEUNG YAE RIEUL
+ {0xBEED, 0xC5A9}, //10597 #HANGUL SYLLABLE IEUNG YAE PIEUP
+ {0xBEEE, 0xC5B4}, //10598 #HANGUL SYLLABLE IEUNG EO
+ {0xBEEF, 0xC5B5}, //10599 #HANGUL SYLLABLE IEUNG EO KIYEOK
+ {0xBEF0, 0xC5B8}, //10600 #HANGUL SYLLABLE IEUNG EO NIEUN
+ {0xBEF1, 0xC5B9}, //10601 #HANGUL SYLLABLE IEUNG EO NIEUNCIEUC
+ {0xBEF2, 0xC5BB}, //10602 #HANGUL SYLLABLE IEUNG EO TIKEUT
+ {0xBEF3, 0xC5BC}, //10603 #HANGUL SYLLABLE IEUNG EO RIEUL
+ {0xBEF4, 0xC5BD}, //10604 #HANGUL SYLLABLE IEUNG EO RIEULKIYEOK
+ {0xBEF5, 0xC5BE}, //10605 #HANGUL SYLLABLE IEUNG EO RIEULMIEUM
+ {0xBEF6, 0xC5C4}, //10606 #HANGUL SYLLABLE IEUNG EO MIEUM
+ {0xBEF7, 0xC5C5}, //10607 #HANGUL SYLLABLE IEUNG EO PIEUP
+ {0xBEF8, 0xC5C6}, //10608 #HANGUL SYLLABLE IEUNG EO PIEUPSIOS
+ {0xBEF9, 0xC5C7}, //10609 #HANGUL SYLLABLE IEUNG EO SIOS
+ {0xBEFA, 0xC5C8}, //10610 #HANGUL SYLLABLE IEUNG EO SSANGSIOS
+ {0xBEFB, 0xC5C9}, //10611 #HANGUL SYLLABLE IEUNG EO IEUNG
+ {0xBEFC, 0xC5CA}, //10612 #HANGUL SYLLABLE IEUNG EO CIEUC
+ {0xBEFD, 0xC5CC}, //10613 #HANGUL SYLLABLE IEUNG EO KHIEUKH
+ {0xBEFE, 0xC5CE}, //10614 #HANGUL SYLLABLE IEUNG EO PHIEUPH
+ {0xBF41, 0xD49E}, //10615 #HANGUL SYLLABLE PHIEUPH WEO RIEULMIEUM
+ {0xBF42, 0xD49F}, //10616 #HANGUL SYLLABLE PHIEUPH WEO RIEULPIEUP
+ {0xBF43, 0xD4A0}, //10617 #HANGUL SYLLABLE PHIEUPH WEO RIEULSIOS
+ {0xBF44, 0xD4A1}, //10618 #HANGUL SYLLABLE PHIEUPH WEO RIEULTHIEUTH
+ {0xBF45, 0xD4A2}, //10619 #HANGUL SYLLABLE PHIEUPH WEO RIEULPHIEUPH
+ {0xBF46, 0xD4A3}, //10620 #HANGUL SYLLABLE PHIEUPH WEO RIEULHIEUH
+ {0xBF47, 0xD4A4}, //10621 #HANGUL SYLLABLE PHIEUPH WEO MIEUM
+ {0xBF48, 0xD4A5}, //10622 #HANGUL SYLLABLE PHIEUPH WEO PIEUP
+ {0xBF49, 0xD4A6}, //10623 #HANGUL SYLLABLE PHIEUPH WEO PIEUPSIOS
+ {0xBF4A, 0xD4A7}, //10624 #HANGUL SYLLABLE PHIEUPH WEO SIOS
+ {0xBF4B, 0xD4A8}, //10625 #HANGUL SYLLABLE PHIEUPH WEO SSANGSIOS
+ {0xBF4C, 0xD4AA}, //10626 #HANGUL SYLLABLE PHIEUPH WEO CIEUC
+ {0xBF4D, 0xD4AB}, //10627 #HANGUL SYLLABLE PHIEUPH WEO CHIEUCH
+ {0xBF4E, 0xD4AC}, //10628 #HANGUL SYLLABLE PHIEUPH WEO KHIEUKH
+ {0xBF4F, 0xD4AD}, //10629 #HANGUL SYLLABLE PHIEUPH WEO THIEUTH
+ {0xBF50, 0xD4AE}, //10630 #HANGUL SYLLABLE PHIEUPH WEO PHIEUPH
+ {0xBF51, 0xD4AF}, //10631 #HANGUL SYLLABLE PHIEUPH WEO HIEUH
+ {0xBF52, 0xD4B0}, //10632 #HANGUL SYLLABLE PHIEUPH WE
+ {0xBF53, 0xD4B1}, //10633 #HANGUL SYLLABLE PHIEUPH WE KIYEOK
+ {0xBF54, 0xD4B2}, //10634 #HANGUL SYLLABLE PHIEUPH WE SSANGKIYEOK
+ {0xBF55, 0xD4B3}, //10635 #HANGUL SYLLABLE PHIEUPH WE KIYEOKSIOS
+ {0xBF56, 0xD4B4}, //10636 #HANGUL SYLLABLE PHIEUPH WE NIEUN
+ {0xBF57, 0xD4B5}, //10637 #HANGUL SYLLABLE PHIEUPH WE NIEUNCIEUC
+ {0xBF58, 0xD4B6}, //10638 #HANGUL SYLLABLE PHIEUPH WE NIEUNHIEUH
+ {0xBF59, 0xD4B7}, //10639 #HANGUL SYLLABLE PHIEUPH WE TIKEUT
+ {0xBF5A, 0xD4B8}, //10640 #HANGUL SYLLABLE PHIEUPH WE RIEUL
+ {0xBF61, 0xD4B9}, //10641 #HANGUL SYLLABLE PHIEUPH WE RIEULKIYEOK
+ {0xBF62, 0xD4BA}, //10642 #HANGUL SYLLABLE PHIEUPH WE RIEULMIEUM
+ {0xBF63, 0xD4BB}, //10643 #HANGUL SYLLABLE PHIEUPH WE RIEULPIEUP
+ {0xBF64, 0xD4BC}, //10644 #HANGUL SYLLABLE PHIEUPH WE RIEULSIOS
+ {0xBF65, 0xD4BD}, //10645 #HANGUL SYLLABLE PHIEUPH WE RIEULTHIEUTH
+ {0xBF66, 0xD4BE}, //10646 #HANGUL SYLLABLE PHIEUPH WE RIEULPHIEUPH
+ {0xBF67, 0xD4BF}, //10647 #HANGUL SYLLABLE PHIEUPH WE RIEULHIEUH
+ {0xBF68, 0xD4C0}, //10648 #HANGUL SYLLABLE PHIEUPH WE MIEUM
+ {0xBF69, 0xD4C1}, //10649 #HANGUL SYLLABLE PHIEUPH WE PIEUP
+ {0xBF6A, 0xD4C2}, //10650 #HANGUL SYLLABLE PHIEUPH WE PIEUPSIOS
+ {0xBF6B, 0xD4C3}, //10651 #HANGUL SYLLABLE PHIEUPH WE SIOS
+ {0xBF6C, 0xD4C4}, //10652 #HANGUL SYLLABLE PHIEUPH WE SSANGSIOS
+ {0xBF6D, 0xD4C5}, //10653 #HANGUL SYLLABLE PHIEUPH WE IEUNG
+ {0xBF6E, 0xD4C6}, //10654 #HANGUL SYLLABLE PHIEUPH WE CIEUC
+ {0xBF6F, 0xD4C7}, //10655 #HANGUL SYLLABLE PHIEUPH WE CHIEUCH
+ {0xBF70, 0xD4C8}, //10656 #HANGUL SYLLABLE PHIEUPH WE KHIEUKH
+ {0xBF71, 0xD4C9}, //10657 #HANGUL SYLLABLE PHIEUPH WE THIEUTH
+ {0xBF72, 0xD4CA}, //10658 #HANGUL SYLLABLE PHIEUPH WE PHIEUPH
+ {0xBF73, 0xD4CB}, //10659 #HANGUL SYLLABLE PHIEUPH WE HIEUH
+ {0xBF74, 0xD4CD}, //10660 #HANGUL SYLLABLE PHIEUPH WI KIYEOK
+ {0xBF75, 0xD4CE}, //10661 #HANGUL SYLLABLE PHIEUPH WI SSANGKIYEOK
+ {0xBF76, 0xD4CF}, //10662 #HANGUL SYLLABLE PHIEUPH WI KIYEOKSIOS
+ {0xBF77, 0xD4D1}, //10663 #HANGUL SYLLABLE PHIEUPH WI NIEUNCIEUC
+ {0xBF78, 0xD4D2}, //10664 #HANGUL SYLLABLE PHIEUPH WI NIEUNHIEUH
+ {0xBF79, 0xD4D3}, //10665 #HANGUL SYLLABLE PHIEUPH WI TIKEUT
+ {0xBF7A, 0xD4D5}, //10666 #HANGUL SYLLABLE PHIEUPH WI RIEULKIYEOK
+ {0xBF81, 0xD4D6}, //10667 #HANGUL SYLLABLE PHIEUPH WI RIEULMIEUM
+ {0xBF82, 0xD4D7}, //10668 #HANGUL SYLLABLE PHIEUPH WI RIEULPIEUP
+ {0xBF83, 0xD4D8}, //10669 #HANGUL SYLLABLE PHIEUPH WI RIEULSIOS
+ {0xBF84, 0xD4D9}, //10670 #HANGUL SYLLABLE PHIEUPH WI RIEULTHIEUTH
+ {0xBF85, 0xD4DA}, //10671 #HANGUL SYLLABLE PHIEUPH WI RIEULPHIEUPH
+ {0xBF86, 0xD4DB}, //10672 #HANGUL SYLLABLE PHIEUPH WI RIEULHIEUH
+ {0xBF87, 0xD4DD}, //10673 #HANGUL SYLLABLE PHIEUPH WI PIEUP
+ {0xBF88, 0xD4DE}, //10674 #HANGUL SYLLABLE PHIEUPH WI PIEUPSIOS
+ {0xBF89, 0xD4E0}, //10675 #HANGUL SYLLABLE PHIEUPH WI SSANGSIOS
+ {0xBF8A, 0xD4E1}, //10676 #HANGUL SYLLABLE PHIEUPH WI IEUNG
+ {0xBF8B, 0xD4E2}, //10677 #HANGUL SYLLABLE PHIEUPH WI CIEUC
+ {0xBF8C, 0xD4E3}, //10678 #HANGUL SYLLABLE PHIEUPH WI CHIEUCH
+ {0xBF8D, 0xD4E4}, //10679 #HANGUL SYLLABLE PHIEUPH WI KHIEUKH
+ {0xBF8E, 0xD4E5}, //10680 #HANGUL SYLLABLE PHIEUPH WI THIEUTH
+ {0xBF8F, 0xD4E6}, //10681 #HANGUL SYLLABLE PHIEUPH WI PHIEUPH
+ {0xBF90, 0xD4E7}, //10682 #HANGUL SYLLABLE PHIEUPH WI HIEUH
+ {0xBF91, 0xD4E9}, //10683 #HANGUL SYLLABLE PHIEUPH YU KIYEOK
+ {0xBF92, 0xD4EA}, //10684 #HANGUL SYLLABLE PHIEUPH YU SSANGKIYEOK
+ {0xBF93, 0xD4EB}, //10685 #HANGUL SYLLABLE PHIEUPH YU KIYEOKSIOS
+ {0xBF94, 0xD4ED}, //10686 #HANGUL SYLLABLE PHIEUPH YU NIEUNCIEUC
+ {0xBF95, 0xD4EE}, //10687 #HANGUL SYLLABLE PHIEUPH YU NIEUNHIEUH
+ {0xBF96, 0xD4EF}, //10688 #HANGUL SYLLABLE PHIEUPH YU TIKEUT
+ {0xBF97, 0xD4F1}, //10689 #HANGUL SYLLABLE PHIEUPH YU RIEULKIYEOK
+ {0xBF98, 0xD4F2}, //10690 #HANGUL SYLLABLE PHIEUPH YU RIEULMIEUM
+ {0xBF99, 0xD4F3}, //10691 #HANGUL SYLLABLE PHIEUPH YU RIEULPIEUP
+ {0xBF9A, 0xD4F4}, //10692 #HANGUL SYLLABLE PHIEUPH YU RIEULSIOS
+ {0xBF9B, 0xD4F5}, //10693 #HANGUL SYLLABLE PHIEUPH YU RIEULTHIEUTH
+ {0xBF9C, 0xD4F6}, //10694 #HANGUL SYLLABLE PHIEUPH YU RIEULPHIEUPH
+ {0xBF9D, 0xD4F7}, //10695 #HANGUL SYLLABLE PHIEUPH YU RIEULHIEUH
+ {0xBF9E, 0xD4F9}, //10696 #HANGUL SYLLABLE PHIEUPH YU PIEUP
+ {0xBF9F, 0xD4FA}, //10697 #HANGUL SYLLABLE PHIEUPH YU PIEUPSIOS
+ {0xBFA0, 0xD4FC}, //10698 #HANGUL SYLLABLE PHIEUPH YU SSANGSIOS
+ {0xBFA1, 0xC5D0}, //10699 #HANGUL SYLLABLE IEUNG E
+ {0xBFA2, 0xC5D1}, //10700 #HANGUL SYLLABLE IEUNG E KIYEOK
+ {0xBFA3, 0xC5D4}, //10701 #HANGUL SYLLABLE IEUNG E NIEUN
+ {0xBFA4, 0xC5D8}, //10702 #HANGUL SYLLABLE IEUNG E RIEUL
+ {0xBFA5, 0xC5E0}, //10703 #HANGUL SYLLABLE IEUNG E MIEUM
+ {0xBFA6, 0xC5E1}, //10704 #HANGUL SYLLABLE IEUNG E PIEUP
+ {0xBFA7, 0xC5E3}, //10705 #HANGUL SYLLABLE IEUNG E SIOS
+ {0xBFA8, 0xC5E5}, //10706 #HANGUL SYLLABLE IEUNG E IEUNG
+ {0xBFA9, 0xC5EC}, //10707 #HANGUL SYLLABLE IEUNG YEO
+ {0xBFAA, 0xC5ED}, //10708 #HANGUL SYLLABLE IEUNG YEO KIYEOK
+ {0xBFAB, 0xC5EE}, //10709 #HANGUL SYLLABLE IEUNG YEO SSANGKIYEOK
+ {0xBFAC, 0xC5F0}, //10710 #HANGUL SYLLABLE IEUNG YEO NIEUN
+ {0xBFAD, 0xC5F4}, //10711 #HANGUL SYLLABLE IEUNG YEO RIEUL
+ {0xBFAE, 0xC5F6}, //10712 #HANGUL SYLLABLE IEUNG YEO RIEULMIEUM
+ {0xBFAF, 0xC5F7}, //10713 #HANGUL SYLLABLE IEUNG YEO RIEULPIEUP
+ {0xBFB0, 0xC5FC}, //10714 #HANGUL SYLLABLE IEUNG YEO MIEUM
+ {0xBFB1, 0xC5FD}, //10715 #HANGUL SYLLABLE IEUNG YEO PIEUP
+ {0xBFB2, 0xC5FE}, //10716 #HANGUL SYLLABLE IEUNG YEO PIEUPSIOS
+ {0xBFB3, 0xC5FF}, //10717 #HANGUL SYLLABLE IEUNG YEO SIOS
+ {0xBFB4, 0xC600}, //10718 #HANGUL SYLLABLE IEUNG YEO SSANGSIOS
+ {0xBFB5, 0xC601}, //10719 #HANGUL SYLLABLE IEUNG YEO IEUNG
+ {0xBFB6, 0xC605}, //10720 #HANGUL SYLLABLE IEUNG YEO THIEUTH
+ {0xBFB7, 0xC606}, //10721 #HANGUL SYLLABLE IEUNG YEO PHIEUPH
+ {0xBFB8, 0xC607}, //10722 #HANGUL SYLLABLE IEUNG YEO HIEUH
+ {0xBFB9, 0xC608}, //10723 #HANGUL SYLLABLE IEUNG YE
+ {0xBFBA, 0xC60C}, //10724 #HANGUL SYLLABLE IEUNG YE NIEUN
+ {0xBFBB, 0xC610}, //10725 #HANGUL SYLLABLE IEUNG YE RIEUL
+ {0xBFBC, 0xC618}, //10726 #HANGUL SYLLABLE IEUNG YE MIEUM
+ {0xBFBD, 0xC619}, //10727 #HANGUL SYLLABLE IEUNG YE PIEUP
+ {0xBFBE, 0xC61B}, //10728 #HANGUL SYLLABLE IEUNG YE SIOS
+ {0xBFBF, 0xC61C}, //10729 #HANGUL SYLLABLE IEUNG YE SSANGSIOS
+ {0xBFC0, 0xC624}, //10730 #HANGUL SYLLABLE IEUNG O
+ {0xBFC1, 0xC625}, //10731 #HANGUL SYLLABLE IEUNG O KIYEOK
+ {0xBFC2, 0xC628}, //10732 #HANGUL SYLLABLE IEUNG O NIEUN
+ {0xBFC3, 0xC62C}, //10733 #HANGUL SYLLABLE IEUNG O RIEUL
+ {0xBFC4, 0xC62D}, //10734 #HANGUL SYLLABLE IEUNG O RIEULKIYEOK
+ {0xBFC5, 0xC62E}, //10735 #HANGUL SYLLABLE IEUNG O RIEULMIEUM
+ {0xBFC6, 0xC630}, //10736 #HANGUL SYLLABLE IEUNG O RIEULSIOS
+ {0xBFC7, 0xC633}, //10737 #HANGUL SYLLABLE IEUNG O RIEULHIEUH
+ {0xBFC8, 0xC634}, //10738 #HANGUL SYLLABLE IEUNG O MIEUM
+ {0xBFC9, 0xC635}, //10739 #HANGUL SYLLABLE IEUNG O PIEUP
+ {0xBFCA, 0xC637}, //10740 #HANGUL SYLLABLE IEUNG O SIOS
+ {0xBFCB, 0xC639}, //10741 #HANGUL SYLLABLE IEUNG O IEUNG
+ {0xBFCC, 0xC63B}, //10742 #HANGUL SYLLABLE IEUNG O CHIEUCH
+ {0xBFCD, 0xC640}, //10743 #HANGUL SYLLABLE IEUNG WA
+ {0xBFCE, 0xC641}, //10744 #HANGUL SYLLABLE IEUNG WA KIYEOK
+ {0xBFCF, 0xC644}, //10745 #HANGUL SYLLABLE IEUNG WA NIEUN
+ {0xBFD0, 0xC648}, //10746 #HANGUL SYLLABLE IEUNG WA RIEUL
+ {0xBFD1, 0xC650}, //10747 #HANGUL SYLLABLE IEUNG WA MIEUM
+ {0xBFD2, 0xC651}, //10748 #HANGUL SYLLABLE IEUNG WA PIEUP
+ {0xBFD3, 0xC653}, //10749 #HANGUL SYLLABLE IEUNG WA SIOS
+ {0xBFD4, 0xC654}, //10750 #HANGUL SYLLABLE IEUNG WA SSANGSIOS
+ {0xBFD5, 0xC655}, //10751 #HANGUL SYLLABLE IEUNG WA IEUNG
+ {0xBFD6, 0xC65C}, //10752 #HANGUL SYLLABLE IEUNG WAE
+ {0xBFD7, 0xC65D}, //10753 #HANGUL SYLLABLE IEUNG WAE KIYEOK
+ {0xBFD8, 0xC660}, //10754 #HANGUL SYLLABLE IEUNG WAE NIEUN
+ {0xBFD9, 0xC66C}, //10755 #HANGUL SYLLABLE IEUNG WAE MIEUM
+ {0xBFDA, 0xC66F}, //10756 #HANGUL SYLLABLE IEUNG WAE SIOS
+ {0xBFDB, 0xC671}, //10757 #HANGUL SYLLABLE IEUNG WAE IEUNG
+ {0xBFDC, 0xC678}, //10758 #HANGUL SYLLABLE IEUNG OE
+ {0xBFDD, 0xC679}, //10759 #HANGUL SYLLABLE IEUNG OE KIYEOK
+ {0xBFDE, 0xC67C}, //10760 #HANGUL SYLLABLE IEUNG OE NIEUN
+ {0xBFDF, 0xC680}, //10761 #HANGUL SYLLABLE IEUNG OE RIEUL
+ {0xBFE0, 0xC688}, //10762 #HANGUL SYLLABLE IEUNG OE MIEUM
+ {0xBFE1, 0xC689}, //10763 #HANGUL SYLLABLE IEUNG OE PIEUP
+ {0xBFE2, 0xC68B}, //10764 #HANGUL SYLLABLE IEUNG OE SIOS
+ {0xBFE3, 0xC68D}, //10765 #HANGUL SYLLABLE IEUNG OE IEUNG
+ {0xBFE4, 0xC694}, //10766 #HANGUL SYLLABLE IEUNG YO
+ {0xBFE5, 0xC695}, //10767 #HANGUL SYLLABLE IEUNG YO KIYEOK
+ {0xBFE6, 0xC698}, //10768 #HANGUL SYLLABLE IEUNG YO NIEUN
+ {0xBFE7, 0xC69C}, //10769 #HANGUL SYLLABLE IEUNG YO RIEUL
+ {0xBFE8, 0xC6A4}, //10770 #HANGUL SYLLABLE IEUNG YO MIEUM
+ {0xBFE9, 0xC6A5}, //10771 #HANGUL SYLLABLE IEUNG YO PIEUP
+ {0xBFEA, 0xC6A7}, //10772 #HANGUL SYLLABLE IEUNG YO SIOS
+ {0xBFEB, 0xC6A9}, //10773 #HANGUL SYLLABLE IEUNG YO IEUNG
+ {0xBFEC, 0xC6B0}, //10774 #HANGUL SYLLABLE IEUNG U
+ {0xBFED, 0xC6B1}, //10775 #HANGUL SYLLABLE IEUNG U KIYEOK
+ {0xBFEE, 0xC6B4}, //10776 #HANGUL SYLLABLE IEUNG U NIEUN
+ {0xBFEF, 0xC6B8}, //10777 #HANGUL SYLLABLE IEUNG U RIEUL
+ {0xBFF0, 0xC6B9}, //10778 #HANGUL SYLLABLE IEUNG U RIEULKIYEOK
+ {0xBFF1, 0xC6BA}, //10779 #HANGUL SYLLABLE IEUNG U RIEULMIEUM
+ {0xBFF2, 0xC6C0}, //10780 #HANGUL SYLLABLE IEUNG U MIEUM
+ {0xBFF3, 0xC6C1}, //10781 #HANGUL SYLLABLE IEUNG U PIEUP
+ {0xBFF4, 0xC6C3}, //10782 #HANGUL SYLLABLE IEUNG U SIOS
+ {0xBFF5, 0xC6C5}, //10783 #HANGUL SYLLABLE IEUNG U IEUNG
+ {0xBFF6, 0xC6CC}, //10784 #HANGUL SYLLABLE IEUNG WEO
+ {0xBFF7, 0xC6CD}, //10785 #HANGUL SYLLABLE IEUNG WEO KIYEOK
+ {0xBFF8, 0xC6D0}, //10786 #HANGUL SYLLABLE IEUNG WEO NIEUN
+ {0xBFF9, 0xC6D4}, //10787 #HANGUL SYLLABLE IEUNG WEO RIEUL
+ {0xBFFA, 0xC6DC}, //10788 #HANGUL SYLLABLE IEUNG WEO MIEUM
+ {0xBFFB, 0xC6DD}, //10789 #HANGUL SYLLABLE IEUNG WEO PIEUP
+ {0xBFFC, 0xC6E0}, //10790 #HANGUL SYLLABLE IEUNG WEO SSANGSIOS
+ {0xBFFD, 0xC6E1}, //10791 #HANGUL SYLLABLE IEUNG WEO IEUNG
+ {0xBFFE, 0xC6E8}, //10792 #HANGUL SYLLABLE IEUNG WE
+ {0xC041, 0xD4FE}, //10793 #HANGUL SYLLABLE PHIEUPH YU CIEUC
+ {0xC042, 0xD4FF}, //10794 #HANGUL SYLLABLE PHIEUPH YU CHIEUCH
+ {0xC043, 0xD500}, //10795 #HANGUL SYLLABLE PHIEUPH YU KHIEUKH
+ {0xC044, 0xD501}, //10796 #HANGUL SYLLABLE PHIEUPH YU THIEUTH
+ {0xC045, 0xD502}, //10797 #HANGUL SYLLABLE PHIEUPH YU PHIEUPH
+ {0xC046, 0xD503}, //10798 #HANGUL SYLLABLE PHIEUPH YU HIEUH
+ {0xC047, 0xD505}, //10799 #HANGUL SYLLABLE PHIEUPH EU KIYEOK
+ {0xC048, 0xD506}, //10800 #HANGUL SYLLABLE PHIEUPH EU SSANGKIYEOK
+ {0xC049, 0xD507}, //10801 #HANGUL SYLLABLE PHIEUPH EU KIYEOKSIOS
+ {0xC04A, 0xD509}, //10802 #HANGUL SYLLABLE PHIEUPH EU NIEUNCIEUC
+ {0xC04B, 0xD50A}, //10803 #HANGUL SYLLABLE PHIEUPH EU NIEUNHIEUH
+ {0xC04C, 0xD50B}, //10804 #HANGUL SYLLABLE PHIEUPH EU TIKEUT
+ {0xC04D, 0xD50D}, //10805 #HANGUL SYLLABLE PHIEUPH EU RIEULKIYEOK
+ {0xC04E, 0xD50E}, //10806 #HANGUL SYLLABLE PHIEUPH EU RIEULMIEUM
+ {0xC04F, 0xD50F}, //10807 #HANGUL SYLLABLE PHIEUPH EU RIEULPIEUP
+ {0xC050, 0xD510}, //10808 #HANGUL SYLLABLE PHIEUPH EU RIEULSIOS
+ {0xC051, 0xD511}, //10809 #HANGUL SYLLABLE PHIEUPH EU RIEULTHIEUTH
+ {0xC052, 0xD512}, //10810 #HANGUL SYLLABLE PHIEUPH EU RIEULPHIEUPH
+ {0xC053, 0xD513}, //10811 #HANGUL SYLLABLE PHIEUPH EU RIEULHIEUH
+ {0xC054, 0xD516}, //10812 #HANGUL SYLLABLE PHIEUPH EU PIEUPSIOS
+ {0xC055, 0xD518}, //10813 #HANGUL SYLLABLE PHIEUPH EU SSANGSIOS
+ {0xC056, 0xD519}, //10814 #HANGUL SYLLABLE PHIEUPH EU IEUNG
+ {0xC057, 0xD51A}, //10815 #HANGUL SYLLABLE PHIEUPH EU CIEUC
+ {0xC058, 0xD51B}, //10816 #HANGUL SYLLABLE PHIEUPH EU CHIEUCH
+ {0xC059, 0xD51C}, //10817 #HANGUL SYLLABLE PHIEUPH EU KHIEUKH
+ {0xC05A, 0xD51D}, //10818 #HANGUL SYLLABLE PHIEUPH EU THIEUTH
+ {0xC061, 0xD51E}, //10819 #HANGUL SYLLABLE PHIEUPH EU PHIEUPH
+ {0xC062, 0xD51F}, //10820 #HANGUL SYLLABLE PHIEUPH EU HIEUH
+ {0xC063, 0xD520}, //10821 #HANGUL SYLLABLE PHIEUPH YI
+ {0xC064, 0xD521}, //10822 #HANGUL SYLLABLE PHIEUPH YI KIYEOK
+ {0xC065, 0xD522}, //10823 #HANGUL SYLLABLE PHIEUPH YI SSANGKIYEOK
+ {0xC066, 0xD523}, //10824 #HANGUL SYLLABLE PHIEUPH YI KIYEOKSIOS
+ {0xC067, 0xD524}, //10825 #HANGUL SYLLABLE PHIEUPH YI NIEUN
+ {0xC068, 0xD525}, //10826 #HANGUL SYLLABLE PHIEUPH YI NIEUNCIEUC
+ {0xC069, 0xD526}, //10827 #HANGUL SYLLABLE PHIEUPH YI NIEUNHIEUH
+ {0xC06A, 0xD527}, //10828 #HANGUL SYLLABLE PHIEUPH YI TIKEUT
+ {0xC06B, 0xD528}, //10829 #HANGUL SYLLABLE PHIEUPH YI RIEUL
+ {0xC06C, 0xD529}, //10830 #HANGUL SYLLABLE PHIEUPH YI RIEULKIYEOK
+ {0xC06D, 0xD52A}, //10831 #HANGUL SYLLABLE PHIEUPH YI RIEULMIEUM
+ {0xC06E, 0xD52B}, //10832 #HANGUL SYLLABLE PHIEUPH YI RIEULPIEUP
+ {0xC06F, 0xD52C}, //10833 #HANGUL SYLLABLE PHIEUPH YI RIEULSIOS
+ {0xC070, 0xD52D}, //10834 #HANGUL SYLLABLE PHIEUPH YI RIEULTHIEUTH
+ {0xC071, 0xD52E}, //10835 #HANGUL SYLLABLE PHIEUPH YI RIEULPHIEUPH
+ {0xC072, 0xD52F}, //10836 #HANGUL SYLLABLE PHIEUPH YI RIEULHIEUH
+ {0xC073, 0xD530}, //10837 #HANGUL SYLLABLE PHIEUPH YI MIEUM
+ {0xC074, 0xD531}, //10838 #HANGUL SYLLABLE PHIEUPH YI PIEUP
+ {0xC075, 0xD532}, //10839 #HANGUL SYLLABLE PHIEUPH YI PIEUPSIOS
+ {0xC076, 0xD533}, //10840 #HANGUL SYLLABLE PHIEUPH YI SIOS
+ {0xC077, 0xD534}, //10841 #HANGUL SYLLABLE PHIEUPH YI SSANGSIOS
+ {0xC078, 0xD535}, //10842 #HANGUL SYLLABLE PHIEUPH YI IEUNG
+ {0xC079, 0xD536}, //10843 #HANGUL SYLLABLE PHIEUPH YI CIEUC
+ {0xC07A, 0xD537}, //10844 #HANGUL SYLLABLE PHIEUPH YI CHIEUCH
+ {0xC081, 0xD538}, //10845 #HANGUL SYLLABLE PHIEUPH YI KHIEUKH
+ {0xC082, 0xD539}, //10846 #HANGUL SYLLABLE PHIEUPH YI THIEUTH
+ {0xC083, 0xD53A}, //10847 #HANGUL SYLLABLE PHIEUPH YI PHIEUPH
+ {0xC084, 0xD53B}, //10848 #HANGUL SYLLABLE PHIEUPH YI HIEUH
+ {0xC085, 0xD53E}, //10849 #HANGUL SYLLABLE PHIEUPH I SSANGKIYEOK
+ {0xC086, 0xD53F}, //10850 #HANGUL SYLLABLE PHIEUPH I KIYEOKSIOS
+ {0xC087, 0xD541}, //10851 #HANGUL SYLLABLE PHIEUPH I NIEUNCIEUC
+ {0xC088, 0xD542}, //10852 #HANGUL SYLLABLE PHIEUPH I NIEUNHIEUH
+ {0xC089, 0xD543}, //10853 #HANGUL SYLLABLE PHIEUPH I TIKEUT
+ {0xC08A, 0xD545}, //10854 #HANGUL SYLLABLE PHIEUPH I RIEULKIYEOK
+ {0xC08B, 0xD546}, //10855 #HANGUL SYLLABLE PHIEUPH I RIEULMIEUM
+ {0xC08C, 0xD547}, //10856 #HANGUL SYLLABLE PHIEUPH I RIEULPIEUP
+ {0xC08D, 0xD548}, //10857 #HANGUL SYLLABLE PHIEUPH I RIEULSIOS
+ {0xC08E, 0xD549}, //10858 #HANGUL SYLLABLE PHIEUPH I RIEULTHIEUTH
+ {0xC08F, 0xD54A}, //10859 #HANGUL SYLLABLE PHIEUPH I RIEULPHIEUPH
+ {0xC090, 0xD54B}, //10860 #HANGUL SYLLABLE PHIEUPH I RIEULHIEUH
+ {0xC091, 0xD54E}, //10861 #HANGUL SYLLABLE PHIEUPH I PIEUPSIOS
+ {0xC092, 0xD550}, //10862 #HANGUL SYLLABLE PHIEUPH I SSANGSIOS
+ {0xC093, 0xD552}, //10863 #HANGUL SYLLABLE PHIEUPH I CIEUC
+ {0xC094, 0xD553}, //10864 #HANGUL SYLLABLE PHIEUPH I CHIEUCH
+ {0xC095, 0xD554}, //10865 #HANGUL SYLLABLE PHIEUPH I KHIEUKH
+ {0xC096, 0xD555}, //10866 #HANGUL SYLLABLE PHIEUPH I THIEUTH
+ {0xC097, 0xD556}, //10867 #HANGUL SYLLABLE PHIEUPH I PHIEUPH
+ {0xC098, 0xD557}, //10868 #HANGUL SYLLABLE PHIEUPH I HIEUH
+ {0xC099, 0xD55A}, //10869 #HANGUL SYLLABLE HIEUH A SSANGKIYEOK
+ {0xC09A, 0xD55B}, //10870 #HANGUL SYLLABLE HIEUH A KIYEOKSIOS
+ {0xC09B, 0xD55D}, //10871 #HANGUL SYLLABLE HIEUH A NIEUNCIEUC
+ {0xC09C, 0xD55E}, //10872 #HANGUL SYLLABLE HIEUH A NIEUNHIEUH
+ {0xC09D, 0xD55F}, //10873 #HANGUL SYLLABLE HIEUH A TIKEUT
+ {0xC09E, 0xD561}, //10874 #HANGUL SYLLABLE HIEUH A RIEULKIYEOK
+ {0xC09F, 0xD562}, //10875 #HANGUL SYLLABLE HIEUH A RIEULMIEUM
+ {0xC0A0, 0xD563}, //10876 #HANGUL SYLLABLE HIEUH A RIEULPIEUP
+ {0xC0A1, 0xC6E9}, //10877 #HANGUL SYLLABLE IEUNG WE KIYEOK
+ {0xC0A2, 0xC6EC}, //10878 #HANGUL SYLLABLE IEUNG WE NIEUN
+ {0xC0A3, 0xC6F0}, //10879 #HANGUL SYLLABLE IEUNG WE RIEUL
+ {0xC0A4, 0xC6F8}, //10880 #HANGUL SYLLABLE IEUNG WE MIEUM
+ {0xC0A5, 0xC6F9}, //10881 #HANGUL SYLLABLE IEUNG WE PIEUP
+ {0xC0A6, 0xC6FD}, //10882 #HANGUL SYLLABLE IEUNG WE IEUNG
+ {0xC0A7, 0xC704}, //10883 #HANGUL SYLLABLE IEUNG WI
+ {0xC0A8, 0xC705}, //10884 #HANGUL SYLLABLE IEUNG WI KIYEOK
+ {0xC0A9, 0xC708}, //10885 #HANGUL SYLLABLE IEUNG WI NIEUN
+ {0xC0AA, 0xC70C}, //10886 #HANGUL SYLLABLE IEUNG WI RIEUL
+ {0xC0AB, 0xC714}, //10887 #HANGUL SYLLABLE IEUNG WI MIEUM
+ {0xC0AC, 0xC715}, //10888 #HANGUL SYLLABLE IEUNG WI PIEUP
+ {0xC0AD, 0xC717}, //10889 #HANGUL SYLLABLE IEUNG WI SIOS
+ {0xC0AE, 0xC719}, //10890 #HANGUL SYLLABLE IEUNG WI IEUNG
+ {0xC0AF, 0xC720}, //10891 #HANGUL SYLLABLE IEUNG YU
+ {0xC0B0, 0xC721}, //10892 #HANGUL SYLLABLE IEUNG YU KIYEOK
+ {0xC0B1, 0xC724}, //10893 #HANGUL SYLLABLE IEUNG YU NIEUN
+ {0xC0B2, 0xC728}, //10894 #HANGUL SYLLABLE IEUNG YU RIEUL
+ {0xC0B3, 0xC730}, //10895 #HANGUL SYLLABLE IEUNG YU MIEUM
+ {0xC0B4, 0xC731}, //10896 #HANGUL SYLLABLE IEUNG YU PIEUP
+ {0xC0B5, 0xC733}, //10897 #HANGUL SYLLABLE IEUNG YU SIOS
+ {0xC0B6, 0xC735}, //10898 #HANGUL SYLLABLE IEUNG YU IEUNG
+ {0xC0B7, 0xC737}, //10899 #HANGUL SYLLABLE IEUNG YU CHIEUCH
+ {0xC0B8, 0xC73C}, //10900 #HANGUL SYLLABLE IEUNG EU
+ {0xC0B9, 0xC73D}, //10901 #HANGUL SYLLABLE IEUNG EU KIYEOK
+ {0xC0BA, 0xC740}, //10902 #HANGUL SYLLABLE IEUNG EU NIEUN
+ {0xC0BB, 0xC744}, //10903 #HANGUL SYLLABLE IEUNG EU RIEUL
+ {0xC0BC, 0xC74A}, //10904 #HANGUL SYLLABLE IEUNG EU RIEULPHIEUPH
+ {0xC0BD, 0xC74C}, //10905 #HANGUL SYLLABLE IEUNG EU MIEUM
+ {0xC0BE, 0xC74D}, //10906 #HANGUL SYLLABLE IEUNG EU PIEUP
+ {0xC0BF, 0xC74F}, //10907 #HANGUL SYLLABLE IEUNG EU SIOS
+ {0xC0C0, 0xC751}, //10908 #HANGUL SYLLABLE IEUNG EU IEUNG
+ {0xC0C1, 0xC752}, //10909 #HANGUL SYLLABLE IEUNG EU CIEUC
+ {0xC0C2, 0xC753}, //10910 #HANGUL SYLLABLE IEUNG EU CHIEUCH
+ {0xC0C3, 0xC754}, //10911 #HANGUL SYLLABLE IEUNG EU KHIEUKH
+ {0xC0C4, 0xC755}, //10912 #HANGUL SYLLABLE IEUNG EU THIEUTH
+ {0xC0C5, 0xC756}, //10913 #HANGUL SYLLABLE IEUNG EU PHIEUPH
+ {0xC0C6, 0xC757}, //10914 #HANGUL SYLLABLE IEUNG EU HIEUH
+ {0xC0C7, 0xC758}, //10915 #HANGUL SYLLABLE IEUNG YI
+ {0xC0C8, 0xC75C}, //10916 #HANGUL SYLLABLE IEUNG YI NIEUN
+ {0xC0C9, 0xC760}, //10917 #HANGUL SYLLABLE IEUNG YI RIEUL
+ {0xC0CA, 0xC768}, //10918 #HANGUL SYLLABLE IEUNG YI MIEUM
+ {0xC0CB, 0xC76B}, //10919 #HANGUL SYLLABLE IEUNG YI SIOS
+ {0xC0CC, 0xC774}, //10920 #HANGUL SYLLABLE IEUNG I
+ {0xC0CD, 0xC775}, //10921 #HANGUL SYLLABLE IEUNG I KIYEOK
+ {0xC0CE, 0xC778}, //10922 #HANGUL SYLLABLE IEUNG I NIEUN
+ {0xC0CF, 0xC77C}, //10923 #HANGUL SYLLABLE IEUNG I RIEUL
+ {0xC0D0, 0xC77D}, //10924 #HANGUL SYLLABLE IEUNG I RIEULKIYEOK
+ {0xC0D1, 0xC77E}, //10925 #HANGUL SYLLABLE IEUNG I RIEULMIEUM
+ {0xC0D2, 0xC783}, //10926 #HANGUL SYLLABLE IEUNG I RIEULHIEUH
+ {0xC0D3, 0xC784}, //10927 #HANGUL SYLLABLE IEUNG I MIEUM
+ {0xC0D4, 0xC785}, //10928 #HANGUL SYLLABLE IEUNG I PIEUP
+ {0xC0D5, 0xC787}, //10929 #HANGUL SYLLABLE IEUNG I SIOS
+ {0xC0D6, 0xC788}, //10930 #HANGUL SYLLABLE IEUNG I SSANGSIOS
+ {0xC0D7, 0xC789}, //10931 #HANGUL SYLLABLE IEUNG I IEUNG
+ {0xC0D8, 0xC78A}, //10932 #HANGUL SYLLABLE IEUNG I CIEUC
+ {0xC0D9, 0xC78E}, //10933 #HANGUL SYLLABLE IEUNG I PHIEUPH
+ {0xC0DA, 0xC790}, //10934 #HANGUL SYLLABLE CIEUC A
+ {0xC0DB, 0xC791}, //10935 #HANGUL SYLLABLE CIEUC A KIYEOK
+ {0xC0DC, 0xC794}, //10936 #HANGUL SYLLABLE CIEUC A NIEUN
+ {0xC0DD, 0xC796}, //10937 #HANGUL SYLLABLE CIEUC A NIEUNHIEUH
+ {0xC0DE, 0xC797}, //10938 #HANGUL SYLLABLE CIEUC A TIKEUT
+ {0xC0DF, 0xC798}, //10939 #HANGUL SYLLABLE CIEUC A RIEUL
+ {0xC0E0, 0xC79A}, //10940 #HANGUL SYLLABLE CIEUC A RIEULMIEUM
+ {0xC0E1, 0xC7A0}, //10941 #HANGUL SYLLABLE CIEUC A MIEUM
+ {0xC0E2, 0xC7A1}, //10942 #HANGUL SYLLABLE CIEUC A PIEUP
+ {0xC0E3, 0xC7A3}, //10943 #HANGUL SYLLABLE CIEUC A SIOS
+ {0xC0E4, 0xC7A4}, //10944 #HANGUL SYLLABLE CIEUC A SSANGSIOS
+ {0xC0E5, 0xC7A5}, //10945 #HANGUL SYLLABLE CIEUC A IEUNG
+ {0xC0E6, 0xC7A6}, //10946 #HANGUL SYLLABLE CIEUC A CIEUC
+ {0xC0E7, 0xC7AC}, //10947 #HANGUL SYLLABLE CIEUC AE
+ {0xC0E8, 0xC7AD}, //10948 #HANGUL SYLLABLE CIEUC AE KIYEOK
+ {0xC0E9, 0xC7B0}, //10949 #HANGUL SYLLABLE CIEUC AE NIEUN
+ {0xC0EA, 0xC7B4}, //10950 #HANGUL SYLLABLE CIEUC AE RIEUL
+ {0xC0EB, 0xC7BC}, //10951 #HANGUL SYLLABLE CIEUC AE MIEUM
+ {0xC0EC, 0xC7BD}, //10952 #HANGUL SYLLABLE CIEUC AE PIEUP
+ {0xC0ED, 0xC7BF}, //10953 #HANGUL SYLLABLE CIEUC AE SIOS
+ {0xC0EE, 0xC7C0}, //10954 #HANGUL SYLLABLE CIEUC AE SSANGSIOS
+ {0xC0EF, 0xC7C1}, //10955 #HANGUL SYLLABLE CIEUC AE IEUNG
+ {0xC0F0, 0xC7C8}, //10956 #HANGUL SYLLABLE CIEUC YA
+ {0xC0F1, 0xC7C9}, //10957 #HANGUL SYLLABLE CIEUC YA KIYEOK
+ {0xC0F2, 0xC7CC}, //10958 #HANGUL SYLLABLE CIEUC YA NIEUN
+ {0xC0F3, 0xC7CE}, //10959 #HANGUL SYLLABLE CIEUC YA NIEUNHIEUH
+ {0xC0F4, 0xC7D0}, //10960 #HANGUL SYLLABLE CIEUC YA RIEUL
+ {0xC0F5, 0xC7D8}, //10961 #HANGUL SYLLABLE CIEUC YA MIEUM
+ {0xC0F6, 0xC7DD}, //10962 #HANGUL SYLLABLE CIEUC YA IEUNG
+ {0xC0F7, 0xC7E4}, //10963 #HANGUL SYLLABLE CIEUC YAE
+ {0xC0F8, 0xC7E8}, //10964 #HANGUL SYLLABLE CIEUC YAE NIEUN
+ {0xC0F9, 0xC7EC}, //10965 #HANGUL SYLLABLE CIEUC YAE RIEUL
+ {0xC0FA, 0xC800}, //10966 #HANGUL SYLLABLE CIEUC EO
+ {0xC0FB, 0xC801}, //10967 #HANGUL SYLLABLE CIEUC EO KIYEOK
+ {0xC0FC, 0xC804}, //10968 #HANGUL SYLLABLE CIEUC EO NIEUN
+ {0xC0FD, 0xC808}, //10969 #HANGUL SYLLABLE CIEUC EO RIEUL
+ {0xC0FE, 0xC80A}, //10970 #HANGUL SYLLABLE CIEUC EO RIEULMIEUM
+ {0xC141, 0xD564}, //10971 #HANGUL SYLLABLE HIEUH A RIEULSIOS
+ {0xC142, 0xD566}, //10972 #HANGUL SYLLABLE HIEUH A RIEULPHIEUPH
+ {0xC143, 0xD567}, //10973 #HANGUL SYLLABLE HIEUH A RIEULHIEUH
+ {0xC144, 0xD56A}, //10974 #HANGUL SYLLABLE HIEUH A PIEUPSIOS
+ {0xC145, 0xD56C}, //10975 #HANGUL SYLLABLE HIEUH A SSANGSIOS
+ {0xC146, 0xD56E}, //10976 #HANGUL SYLLABLE HIEUH A CIEUC
+ {0xC147, 0xD56F}, //10977 #HANGUL SYLLABLE HIEUH A CHIEUCH
+ {0xC148, 0xD570}, //10978 #HANGUL SYLLABLE HIEUH A KHIEUKH
+ {0xC149, 0xD571}, //10979 #HANGUL SYLLABLE HIEUH A THIEUTH
+ {0xC14A, 0xD572}, //10980 #HANGUL SYLLABLE HIEUH A PHIEUPH
+ {0xC14B, 0xD573}, //10981 #HANGUL SYLLABLE HIEUH A HIEUH
+ {0xC14C, 0xD576}, //10982 #HANGUL SYLLABLE HIEUH AE SSANGKIYEOK
+ {0xC14D, 0xD577}, //10983 #HANGUL SYLLABLE HIEUH AE KIYEOKSIOS
+ {0xC14E, 0xD579}, //10984 #HANGUL SYLLABLE HIEUH AE NIEUNCIEUC
+ {0xC14F, 0xD57A}, //10985 #HANGUL SYLLABLE HIEUH AE NIEUNHIEUH
+ {0xC150, 0xD57B}, //10986 #HANGUL SYLLABLE HIEUH AE TIKEUT
+ {0xC151, 0xD57D}, //10987 #HANGUL SYLLABLE HIEUH AE RIEULKIYEOK
+ {0xC152, 0xD57E}, //10988 #HANGUL SYLLABLE HIEUH AE RIEULMIEUM
+ {0xC153, 0xD57F}, //10989 #HANGUL SYLLABLE HIEUH AE RIEULPIEUP
+ {0xC154, 0xD580}, //10990 #HANGUL SYLLABLE HIEUH AE RIEULSIOS
+ {0xC155, 0xD581}, //10991 #HANGUL SYLLABLE HIEUH AE RIEULTHIEUTH
+ {0xC156, 0xD582}, //10992 #HANGUL SYLLABLE HIEUH AE RIEULPHIEUPH
+ {0xC157, 0xD583}, //10993 #HANGUL SYLLABLE HIEUH AE RIEULHIEUH
+ {0xC158, 0xD586}, //10994 #HANGUL SYLLABLE HIEUH AE PIEUPSIOS
+ {0xC159, 0xD58A}, //10995 #HANGUL SYLLABLE HIEUH AE CIEUC
+ {0xC15A, 0xD58B}, //10996 #HANGUL SYLLABLE HIEUH AE CHIEUCH
+ {0xC161, 0xD58C}, //10997 #HANGUL SYLLABLE HIEUH AE KHIEUKH
+ {0xC162, 0xD58D}, //10998 #HANGUL SYLLABLE HIEUH AE THIEUTH
+ {0xC163, 0xD58E}, //10999 #HANGUL SYLLABLE HIEUH AE PHIEUPH
+ {0xC164, 0xD58F}, //11000 #HANGUL SYLLABLE HIEUH AE HIEUH
+ {0xC165, 0xD591}, //11001 #HANGUL SYLLABLE HIEUH YA KIYEOK
+ {0xC166, 0xD592}, //11002 #HANGUL SYLLABLE HIEUH YA SSANGKIYEOK
+ {0xC167, 0xD593}, //11003 #HANGUL SYLLABLE HIEUH YA KIYEOKSIOS
+ {0xC168, 0xD594}, //11004 #HANGUL SYLLABLE HIEUH YA NIEUN
+ {0xC169, 0xD595}, //11005 #HANGUL SYLLABLE HIEUH YA NIEUNCIEUC
+ {0xC16A, 0xD596}, //11006 #HANGUL SYLLABLE HIEUH YA NIEUNHIEUH
+ {0xC16B, 0xD597}, //11007 #HANGUL SYLLABLE HIEUH YA TIKEUT
+ {0xC16C, 0xD598}, //11008 #HANGUL SYLLABLE HIEUH YA RIEUL
+ {0xC16D, 0xD599}, //11009 #HANGUL SYLLABLE HIEUH YA RIEULKIYEOK
+ {0xC16E, 0xD59A}, //11010 #HANGUL SYLLABLE HIEUH YA RIEULMIEUM
+ {0xC16F, 0xD59B}, //11011 #HANGUL SYLLABLE HIEUH YA RIEULPIEUP
+ {0xC170, 0xD59C}, //11012 #HANGUL SYLLABLE HIEUH YA RIEULSIOS
+ {0xC171, 0xD59D}, //11013 #HANGUL SYLLABLE HIEUH YA RIEULTHIEUTH
+ {0xC172, 0xD59E}, //11014 #HANGUL SYLLABLE HIEUH YA RIEULPHIEUPH
+ {0xC173, 0xD59F}, //11015 #HANGUL SYLLABLE HIEUH YA RIEULHIEUH
+ {0xC174, 0xD5A0}, //11016 #HANGUL SYLLABLE HIEUH YA MIEUM
+ {0xC175, 0xD5A1}, //11017 #HANGUL SYLLABLE HIEUH YA PIEUP
+ {0xC176, 0xD5A2}, //11018 #HANGUL SYLLABLE HIEUH YA PIEUPSIOS
+ {0xC177, 0xD5A3}, //11019 #HANGUL SYLLABLE HIEUH YA SIOS
+ {0xC178, 0xD5A4}, //11020 #HANGUL SYLLABLE HIEUH YA SSANGSIOS
+ {0xC179, 0xD5A6}, //11021 #HANGUL SYLLABLE HIEUH YA CIEUC
+ {0xC17A, 0xD5A7}, //11022 #HANGUL SYLLABLE HIEUH YA CHIEUCH
+ {0xC181, 0xD5A8}, //11023 #HANGUL SYLLABLE HIEUH YA KHIEUKH
+ {0xC182, 0xD5A9}, //11024 #HANGUL SYLLABLE HIEUH YA THIEUTH
+ {0xC183, 0xD5AA}, //11025 #HANGUL SYLLABLE HIEUH YA PHIEUPH
+ {0xC184, 0xD5AB}, //11026 #HANGUL SYLLABLE HIEUH YA HIEUH
+ {0xC185, 0xD5AC}, //11027 #HANGUL SYLLABLE HIEUH YAE
+ {0xC186, 0xD5AD}, //11028 #HANGUL SYLLABLE HIEUH YAE KIYEOK
+ {0xC187, 0xD5AE}, //11029 #HANGUL SYLLABLE HIEUH YAE SSANGKIYEOK
+ {0xC188, 0xD5AF}, //11030 #HANGUL SYLLABLE HIEUH YAE KIYEOKSIOS
+ {0xC189, 0xD5B0}, //11031 #HANGUL SYLLABLE HIEUH YAE NIEUN
+ {0xC18A, 0xD5B1}, //11032 #HANGUL SYLLABLE HIEUH YAE NIEUNCIEUC
+ {0xC18B, 0xD5B2}, //11033 #HANGUL SYLLABLE HIEUH YAE NIEUNHIEUH
+ {0xC18C, 0xD5B3}, //11034 #HANGUL SYLLABLE HIEUH YAE TIKEUT
+ {0xC18D, 0xD5B4}, //11035 #HANGUL SYLLABLE HIEUH YAE RIEUL
+ {0xC18E, 0xD5B5}, //11036 #HANGUL SYLLABLE HIEUH YAE RIEULKIYEOK
+ {0xC18F, 0xD5B6}, //11037 #HANGUL SYLLABLE HIEUH YAE RIEULMIEUM
+ {0xC190, 0xD5B7}, //11038 #HANGUL SYLLABLE HIEUH YAE RIEULPIEUP
+ {0xC191, 0xD5B8}, //11039 #HANGUL SYLLABLE HIEUH YAE RIEULSIOS
+ {0xC192, 0xD5B9}, //11040 #HANGUL SYLLABLE HIEUH YAE RIEULTHIEUTH
+ {0xC193, 0xD5BA}, //11041 #HANGUL SYLLABLE HIEUH YAE RIEULPHIEUPH
+ {0xC194, 0xD5BB}, //11042 #HANGUL SYLLABLE HIEUH YAE RIEULHIEUH
+ {0xC195, 0xD5BC}, //11043 #HANGUL SYLLABLE HIEUH YAE MIEUM
+ {0xC196, 0xD5BD}, //11044 #HANGUL SYLLABLE HIEUH YAE PIEUP
+ {0xC197, 0xD5BE}, //11045 #HANGUL SYLLABLE HIEUH YAE PIEUPSIOS
+ {0xC198, 0xD5BF}, //11046 #HANGUL SYLLABLE HIEUH YAE SIOS
+ {0xC199, 0xD5C0}, //11047 #HANGUL SYLLABLE HIEUH YAE SSANGSIOS
+ {0xC19A, 0xD5C1}, //11048 #HANGUL SYLLABLE HIEUH YAE IEUNG
+ {0xC19B, 0xD5C2}, //11049 #HANGUL SYLLABLE HIEUH YAE CIEUC
+ {0xC19C, 0xD5C3}, //11050 #HANGUL SYLLABLE HIEUH YAE CHIEUCH
+ {0xC19D, 0xD5C4}, //11051 #HANGUL SYLLABLE HIEUH YAE KHIEUKH
+ {0xC19E, 0xD5C5}, //11052 #HANGUL SYLLABLE HIEUH YAE THIEUTH
+ {0xC19F, 0xD5C6}, //11053 #HANGUL SYLLABLE HIEUH YAE PHIEUPH
+ {0xC1A0, 0xD5C7}, //11054 #HANGUL SYLLABLE HIEUH YAE HIEUH
+ {0xC1A1, 0xC810}, //11055 #HANGUL SYLLABLE CIEUC EO MIEUM
+ {0xC1A2, 0xC811}, //11056 #HANGUL SYLLABLE CIEUC EO PIEUP
+ {0xC1A3, 0xC813}, //11057 #HANGUL SYLLABLE CIEUC EO SIOS
+ {0xC1A4, 0xC815}, //11058 #HANGUL SYLLABLE CIEUC EO IEUNG
+ {0xC1A5, 0xC816}, //11059 #HANGUL SYLLABLE CIEUC EO CIEUC
+ {0xC1A6, 0xC81C}, //11060 #HANGUL SYLLABLE CIEUC E
+ {0xC1A7, 0xC81D}, //11061 #HANGUL SYLLABLE CIEUC E KIYEOK
+ {0xC1A8, 0xC820}, //11062 #HANGUL SYLLABLE CIEUC E NIEUN
+ {0xC1A9, 0xC824}, //11063 #HANGUL SYLLABLE CIEUC E RIEUL
+ {0xC1AA, 0xC82C}, //11064 #HANGUL SYLLABLE CIEUC E MIEUM
+ {0xC1AB, 0xC82D}, //11065 #HANGUL SYLLABLE CIEUC E PIEUP
+ {0xC1AC, 0xC82F}, //11066 #HANGUL SYLLABLE CIEUC E SIOS
+ {0xC1AD, 0xC831}, //11067 #HANGUL SYLLABLE CIEUC E IEUNG
+ {0xC1AE, 0xC838}, //11068 #HANGUL SYLLABLE CIEUC YEO
+ {0xC1AF, 0xC83C}, //11069 #HANGUL SYLLABLE CIEUC YEO NIEUN
+ {0xC1B0, 0xC840}, //11070 #HANGUL SYLLABLE CIEUC YEO RIEUL
+ {0xC1B1, 0xC848}, //11071 #HANGUL SYLLABLE CIEUC YEO MIEUM
+ {0xC1B2, 0xC849}, //11072 #HANGUL SYLLABLE CIEUC YEO PIEUP
+ {0xC1B3, 0xC84C}, //11073 #HANGUL SYLLABLE CIEUC YEO SSANGSIOS
+ {0xC1B4, 0xC84D}, //11074 #HANGUL SYLLABLE CIEUC YEO IEUNG
+ {0xC1B5, 0xC854}, //11075 #HANGUL SYLLABLE CIEUC YE
+ {0xC1B6, 0xC870}, //11076 #HANGUL SYLLABLE CIEUC O
+ {0xC1B7, 0xC871}, //11077 #HANGUL SYLLABLE CIEUC O KIYEOK
+ {0xC1B8, 0xC874}, //11078 #HANGUL SYLLABLE CIEUC O NIEUN
+ {0xC1B9, 0xC878}, //11079 #HANGUL SYLLABLE CIEUC O RIEUL
+ {0xC1BA, 0xC87A}, //11080 #HANGUL SYLLABLE CIEUC O RIEULMIEUM
+ {0xC1BB, 0xC880}, //11081 #HANGUL SYLLABLE CIEUC O MIEUM
+ {0xC1BC, 0xC881}, //11082 #HANGUL SYLLABLE CIEUC O PIEUP
+ {0xC1BD, 0xC883}, //11083 #HANGUL SYLLABLE CIEUC O SIOS
+ {0xC1BE, 0xC885}, //11084 #HANGUL SYLLABLE CIEUC O IEUNG
+ {0xC1BF, 0xC886}, //11085 #HANGUL SYLLABLE CIEUC O CIEUC
+ {0xC1C0, 0xC887}, //11086 #HANGUL SYLLABLE CIEUC O CHIEUCH
+ {0xC1C1, 0xC88B}, //11087 #HANGUL SYLLABLE CIEUC O HIEUH
+ {0xC1C2, 0xC88C}, //11088 #HANGUL SYLLABLE CIEUC WA
+ {0xC1C3, 0xC88D}, //11089 #HANGUL SYLLABLE CIEUC WA KIYEOK
+ {0xC1C4, 0xC894}, //11090 #HANGUL SYLLABLE CIEUC WA RIEUL
+ {0xC1C5, 0xC89D}, //11091 #HANGUL SYLLABLE CIEUC WA PIEUP
+ {0xC1C6, 0xC89F}, //11092 #HANGUL SYLLABLE CIEUC WA SIOS
+ {0xC1C7, 0xC8A1}, //11093 #HANGUL SYLLABLE CIEUC WA IEUNG
+ {0xC1C8, 0xC8A8}, //11094 #HANGUL SYLLABLE CIEUC WAE
+ {0xC1C9, 0xC8BC}, //11095 #HANGUL SYLLABLE CIEUC WAE SSANGSIOS
+ {0xC1CA, 0xC8BD}, //11096 #HANGUL SYLLABLE CIEUC WAE IEUNG
+ {0xC1CB, 0xC8C4}, //11097 #HANGUL SYLLABLE CIEUC OE
+ {0xC1CC, 0xC8C8}, //11098 #HANGUL SYLLABLE CIEUC OE NIEUN
+ {0xC1CD, 0xC8CC}, //11099 #HANGUL SYLLABLE CIEUC OE RIEUL
+ {0xC1CE, 0xC8D4}, //11100 #HANGUL SYLLABLE CIEUC OE MIEUM
+ {0xC1CF, 0xC8D5}, //11101 #HANGUL SYLLABLE CIEUC OE PIEUP
+ {0xC1D0, 0xC8D7}, //11102 #HANGUL SYLLABLE CIEUC OE SIOS
+ {0xC1D1, 0xC8D9}, //11103 #HANGUL SYLLABLE CIEUC OE IEUNG
+ {0xC1D2, 0xC8E0}, //11104 #HANGUL SYLLABLE CIEUC YO
+ {0xC1D3, 0xC8E1}, //11105 #HANGUL SYLLABLE CIEUC YO KIYEOK
+ {0xC1D4, 0xC8E4}, //11106 #HANGUL SYLLABLE CIEUC YO NIEUN
+ {0xC1D5, 0xC8F5}, //11107 #HANGUL SYLLABLE CIEUC YO IEUNG
+ {0xC1D6, 0xC8FC}, //11108 #HANGUL SYLLABLE CIEUC U
+ {0xC1D7, 0xC8FD}, //11109 #HANGUL SYLLABLE CIEUC U KIYEOK
+ {0xC1D8, 0xC900}, //11110 #HANGUL SYLLABLE CIEUC U NIEUN
+ {0xC1D9, 0xC904}, //11111 #HANGUL SYLLABLE CIEUC U RIEUL
+ {0xC1DA, 0xC905}, //11112 #HANGUL SYLLABLE CIEUC U RIEULKIYEOK
+ {0xC1DB, 0xC906}, //11113 #HANGUL SYLLABLE CIEUC U RIEULMIEUM
+ {0xC1DC, 0xC90C}, //11114 #HANGUL SYLLABLE CIEUC U MIEUM
+ {0xC1DD, 0xC90D}, //11115 #HANGUL SYLLABLE CIEUC U PIEUP
+ {0xC1DE, 0xC90F}, //11116 #HANGUL SYLLABLE CIEUC U SIOS
+ {0xC1DF, 0xC911}, //11117 #HANGUL SYLLABLE CIEUC U IEUNG
+ {0xC1E0, 0xC918}, //11118 #HANGUL SYLLABLE CIEUC WEO
+ {0xC1E1, 0xC92C}, //11119 #HANGUL SYLLABLE CIEUC WEO SSANGSIOS
+ {0xC1E2, 0xC934}, //11120 #HANGUL SYLLABLE CIEUC WE
+ {0xC1E3, 0xC950}, //11121 #HANGUL SYLLABLE CIEUC WI
+ {0xC1E4, 0xC951}, //11122 #HANGUL SYLLABLE CIEUC WI KIYEOK
+ {0xC1E5, 0xC954}, //11123 #HANGUL SYLLABLE CIEUC WI NIEUN
+ {0xC1E6, 0xC958}, //11124 #HANGUL SYLLABLE CIEUC WI RIEUL
+ {0xC1E7, 0xC960}, //11125 #HANGUL SYLLABLE CIEUC WI MIEUM
+ {0xC1E8, 0xC961}, //11126 #HANGUL SYLLABLE CIEUC WI PIEUP
+ {0xC1E9, 0xC963}, //11127 #HANGUL SYLLABLE CIEUC WI SIOS
+ {0xC1EA, 0xC96C}, //11128 #HANGUL SYLLABLE CIEUC YU
+ {0xC1EB, 0xC970}, //11129 #HANGUL SYLLABLE CIEUC YU NIEUN
+ {0xC1EC, 0xC974}, //11130 #HANGUL SYLLABLE CIEUC YU RIEUL
+ {0xC1ED, 0xC97C}, //11131 #HANGUL SYLLABLE CIEUC YU MIEUM
+ {0xC1EE, 0xC988}, //11132 #HANGUL SYLLABLE CIEUC EU
+ {0xC1EF, 0xC989}, //11133 #HANGUL SYLLABLE CIEUC EU KIYEOK
+ {0xC1F0, 0xC98C}, //11134 #HANGUL SYLLABLE CIEUC EU NIEUN
+ {0xC1F1, 0xC990}, //11135 #HANGUL SYLLABLE CIEUC EU RIEUL
+ {0xC1F2, 0xC998}, //11136 #HANGUL SYLLABLE CIEUC EU MIEUM
+ {0xC1F3, 0xC999}, //11137 #HANGUL SYLLABLE CIEUC EU PIEUP
+ {0xC1F4, 0xC99B}, //11138 #HANGUL SYLLABLE CIEUC EU SIOS
+ {0xC1F5, 0xC99D}, //11139 #HANGUL SYLLABLE CIEUC EU IEUNG
+ {0xC1F6, 0xC9C0}, //11140 #HANGUL SYLLABLE CIEUC I
+ {0xC1F7, 0xC9C1}, //11141 #HANGUL SYLLABLE CIEUC I KIYEOK
+ {0xC1F8, 0xC9C4}, //11142 #HANGUL SYLLABLE CIEUC I NIEUN
+ {0xC1F9, 0xC9C7}, //11143 #HANGUL SYLLABLE CIEUC I TIKEUT
+ {0xC1FA, 0xC9C8}, //11144 #HANGUL SYLLABLE CIEUC I RIEUL
+ {0xC1FB, 0xC9CA}, //11145 #HANGUL SYLLABLE CIEUC I RIEULMIEUM
+ {0xC1FC, 0xC9D0}, //11146 #HANGUL SYLLABLE CIEUC I MIEUM
+ {0xC1FD, 0xC9D1}, //11147 #HANGUL SYLLABLE CIEUC I PIEUP
+ {0xC1FE, 0xC9D3}, //11148 #HANGUL SYLLABLE CIEUC I SIOS
+ {0xC241, 0xD5CA}, //11149 #HANGUL SYLLABLE HIEUH EO SSANGKIYEOK
+ {0xC242, 0xD5CB}, //11150 #HANGUL SYLLABLE HIEUH EO KIYEOKSIOS
+ {0xC243, 0xD5CD}, //11151 #HANGUL SYLLABLE HIEUH EO NIEUNCIEUC
+ {0xC244, 0xD5CE}, //11152 #HANGUL SYLLABLE HIEUH EO NIEUNHIEUH
+ {0xC245, 0xD5CF}, //11153 #HANGUL SYLLABLE HIEUH EO TIKEUT
+ {0xC246, 0xD5D1}, //11154 #HANGUL SYLLABLE HIEUH EO RIEULKIYEOK
+ {0xC247, 0xD5D3}, //11155 #HANGUL SYLLABLE HIEUH EO RIEULPIEUP
+ {0xC248, 0xD5D4}, //11156 #HANGUL SYLLABLE HIEUH EO RIEULSIOS
+ {0xC249, 0xD5D5}, //11157 #HANGUL SYLLABLE HIEUH EO RIEULTHIEUTH
+ {0xC24A, 0xD5D6}, //11158 #HANGUL SYLLABLE HIEUH EO RIEULPHIEUPH
+ {0xC24B, 0xD5D7}, //11159 #HANGUL SYLLABLE HIEUH EO RIEULHIEUH
+ {0xC24C, 0xD5DA}, //11160 #HANGUL SYLLABLE HIEUH EO PIEUPSIOS
+ {0xC24D, 0xD5DC}, //11161 #HANGUL SYLLABLE HIEUH EO SSANGSIOS
+ {0xC24E, 0xD5DE}, //11162 #HANGUL SYLLABLE HIEUH EO CIEUC
+ {0xC24F, 0xD5DF}, //11163 #HANGUL SYLLABLE HIEUH EO CHIEUCH
+ {0xC250, 0xD5E0}, //11164 #HANGUL SYLLABLE HIEUH EO KHIEUKH
+ {0xC251, 0xD5E1}, //11165 #HANGUL SYLLABLE HIEUH EO THIEUTH
+ {0xC252, 0xD5E2}, //11166 #HANGUL SYLLABLE HIEUH EO PHIEUPH
+ {0xC253, 0xD5E3}, //11167 #HANGUL SYLLABLE HIEUH EO HIEUH
+ {0xC254, 0xD5E6}, //11168 #HANGUL SYLLABLE HIEUH E SSANGKIYEOK
+ {0xC255, 0xD5E7}, //11169 #HANGUL SYLLABLE HIEUH E KIYEOKSIOS
+ {0xC256, 0xD5E9}, //11170 #HANGUL SYLLABLE HIEUH E NIEUNCIEUC
+ {0xC257, 0xD5EA}, //11171 #HANGUL SYLLABLE HIEUH E NIEUNHIEUH
+ {0xC258, 0xD5EB}, //11172 #HANGUL SYLLABLE HIEUH E TIKEUT
+ {0xC259, 0xD5ED}, //11173 #HANGUL SYLLABLE HIEUH E RIEULKIYEOK
+ {0xC25A, 0xD5EE}, //11174 #HANGUL SYLLABLE HIEUH E RIEULMIEUM
+ {0xC261, 0xD5EF}, //11175 #HANGUL SYLLABLE HIEUH E RIEULPIEUP
+ {0xC262, 0xD5F0}, //11176 #HANGUL SYLLABLE HIEUH E RIEULSIOS
+ {0xC263, 0xD5F1}, //11177 #HANGUL SYLLABLE HIEUH E RIEULTHIEUTH
+ {0xC264, 0xD5F2}, //11178 #HANGUL SYLLABLE HIEUH E RIEULPHIEUPH
+ {0xC265, 0xD5F3}, //11179 #HANGUL SYLLABLE HIEUH E RIEULHIEUH
+ {0xC266, 0xD5F6}, //11180 #HANGUL SYLLABLE HIEUH E PIEUPSIOS
+ {0xC267, 0xD5F8}, //11181 #HANGUL SYLLABLE HIEUH E SSANGSIOS
+ {0xC268, 0xD5FA}, //11182 #HANGUL SYLLABLE HIEUH E CIEUC
+ {0xC269, 0xD5FB}, //11183 #HANGUL SYLLABLE HIEUH E CHIEUCH
+ {0xC26A, 0xD5FC}, //11184 #HANGUL SYLLABLE HIEUH E KHIEUKH
+ {0xC26B, 0xD5FD}, //11185 #HANGUL SYLLABLE HIEUH E THIEUTH
+ {0xC26C, 0xD5FE}, //11186 #HANGUL SYLLABLE HIEUH E PHIEUPH
+ {0xC26D, 0xD5FF}, //11187 #HANGUL SYLLABLE HIEUH E HIEUH
+ {0xC26E, 0xD602}, //11188 #HANGUL SYLLABLE HIEUH YEO SSANGKIYEOK
+ {0xC26F, 0xD603}, //11189 #HANGUL SYLLABLE HIEUH YEO KIYEOKSIOS
+ {0xC270, 0xD605}, //11190 #HANGUL SYLLABLE HIEUH YEO NIEUNCIEUC
+ {0xC271, 0xD606}, //11191 #HANGUL SYLLABLE HIEUH YEO NIEUNHIEUH
+ {0xC272, 0xD607}, //11192 #HANGUL SYLLABLE HIEUH YEO TIKEUT
+ {0xC273, 0xD609}, //11193 #HANGUL SYLLABLE HIEUH YEO RIEULKIYEOK
+ {0xC274, 0xD60A}, //11194 #HANGUL SYLLABLE HIEUH YEO RIEULMIEUM
+ {0xC275, 0xD60B}, //11195 #HANGUL SYLLABLE HIEUH YEO RIEULPIEUP
+ {0xC276, 0xD60C}, //11196 #HANGUL SYLLABLE HIEUH YEO RIEULSIOS
+ {0xC277, 0xD60D}, //11197 #HANGUL SYLLABLE HIEUH YEO RIEULTHIEUTH
+ {0xC278, 0xD60E}, //11198 #HANGUL SYLLABLE HIEUH YEO RIEULPHIEUPH
+ {0xC279, 0xD60F}, //11199 #HANGUL SYLLABLE HIEUH YEO RIEULHIEUH
+ {0xC27A, 0xD612}, //11200 #HANGUL SYLLABLE HIEUH YEO PIEUPSIOS
+ {0xC281, 0xD616}, //11201 #HANGUL SYLLABLE HIEUH YEO CIEUC
+ {0xC282, 0xD617}, //11202 #HANGUL SYLLABLE HIEUH YEO CHIEUCH
+ {0xC283, 0xD618}, //11203 #HANGUL SYLLABLE HIEUH YEO KHIEUKH
+ {0xC284, 0xD619}, //11204 #HANGUL SYLLABLE HIEUH YEO THIEUTH
+ {0xC285, 0xD61A}, //11205 #HANGUL SYLLABLE HIEUH YEO PHIEUPH
+ {0xC286, 0xD61B}, //11206 #HANGUL SYLLABLE HIEUH YEO HIEUH
+ {0xC287, 0xD61D}, //11207 #HANGUL SYLLABLE HIEUH YE KIYEOK
+ {0xC288, 0xD61E}, //11208 #HANGUL SYLLABLE HIEUH YE SSANGKIYEOK
+ {0xC289, 0xD61F}, //11209 #HANGUL SYLLABLE HIEUH YE KIYEOKSIOS
+ {0xC28A, 0xD621}, //11210 #HANGUL SYLLABLE HIEUH YE NIEUNCIEUC
+ {0xC28B, 0xD622}, //11211 #HANGUL SYLLABLE HIEUH YE NIEUNHIEUH
+ {0xC28C, 0xD623}, //11212 #HANGUL SYLLABLE HIEUH YE TIKEUT
+ {0xC28D, 0xD625}, //11213 #HANGUL SYLLABLE HIEUH YE RIEULKIYEOK
+ {0xC28E, 0xD626}, //11214 #HANGUL SYLLABLE HIEUH YE RIEULMIEUM
+ {0xC28F, 0xD627}, //11215 #HANGUL SYLLABLE HIEUH YE RIEULPIEUP
+ {0xC290, 0xD628}, //11216 #HANGUL SYLLABLE HIEUH YE RIEULSIOS
+ {0xC291, 0xD629}, //11217 #HANGUL SYLLABLE HIEUH YE RIEULTHIEUTH
+ {0xC292, 0xD62A}, //11218 #HANGUL SYLLABLE HIEUH YE RIEULPHIEUPH
+ {0xC293, 0xD62B}, //11219 #HANGUL SYLLABLE HIEUH YE RIEULHIEUH
+ {0xC294, 0xD62C}, //11220 #HANGUL SYLLABLE HIEUH YE MIEUM
+ {0xC295, 0xD62E}, //11221 #HANGUL SYLLABLE HIEUH YE PIEUPSIOS
+ {0xC296, 0xD62F}, //11222 #HANGUL SYLLABLE HIEUH YE SIOS
+ {0xC297, 0xD630}, //11223 #HANGUL SYLLABLE HIEUH YE SSANGSIOS
+ {0xC298, 0xD631}, //11224 #HANGUL SYLLABLE HIEUH YE IEUNG
+ {0xC299, 0xD632}, //11225 #HANGUL SYLLABLE HIEUH YE CIEUC
+ {0xC29A, 0xD633}, //11226 #HANGUL SYLLABLE HIEUH YE CHIEUCH
+ {0xC29B, 0xD634}, //11227 #HANGUL SYLLABLE HIEUH YE KHIEUKH
+ {0xC29C, 0xD635}, //11228 #HANGUL SYLLABLE HIEUH YE THIEUTH
+ {0xC29D, 0xD636}, //11229 #HANGUL SYLLABLE HIEUH YE PHIEUPH
+ {0xC29E, 0xD637}, //11230 #HANGUL SYLLABLE HIEUH YE HIEUH
+ {0xC29F, 0xD63A}, //11231 #HANGUL SYLLABLE HIEUH O SSANGKIYEOK
+ {0xC2A0, 0xD63B}, //11232 #HANGUL SYLLABLE HIEUH O KIYEOKSIOS
+ {0xC2A1, 0xC9D5}, //11233 #HANGUL SYLLABLE CIEUC I IEUNG
+ {0xC2A2, 0xC9D6}, //11234 #HANGUL SYLLABLE CIEUC I CIEUC
+ {0xC2A3, 0xC9D9}, //11235 #HANGUL SYLLABLE CIEUC I THIEUTH
+ {0xC2A4, 0xC9DA}, //11236 #HANGUL SYLLABLE CIEUC I PHIEUPH
+ {0xC2A5, 0xC9DC}, //11237 #HANGUL SYLLABLE SSANGCIEUC A
+ {0xC2A6, 0xC9DD}, //11238 #HANGUL SYLLABLE SSANGCIEUC A KIYEOK
+ {0xC2A7, 0xC9E0}, //11239 #HANGUL SYLLABLE SSANGCIEUC A NIEUN
+ {0xC2A8, 0xC9E2}, //11240 #HANGUL SYLLABLE SSANGCIEUC A NIEUNHIEUH
+ {0xC2A9, 0xC9E4}, //11241 #HANGUL SYLLABLE SSANGCIEUC A RIEUL
+ {0xC2AA, 0xC9E7}, //11242 #HANGUL SYLLABLE SSANGCIEUC A RIEULPIEUP
+ {0xC2AB, 0xC9EC}, //11243 #HANGUL SYLLABLE SSANGCIEUC A MIEUM
+ {0xC2AC, 0xC9ED}, //11244 #HANGUL SYLLABLE SSANGCIEUC A PIEUP
+ {0xC2AD, 0xC9EF}, //11245 #HANGUL SYLLABLE SSANGCIEUC A SIOS
+ {0xC2AE, 0xC9F0}, //11246 #HANGUL SYLLABLE SSANGCIEUC A SSANGSIOS
+ {0xC2AF, 0xC9F1}, //11247 #HANGUL SYLLABLE SSANGCIEUC A IEUNG
+ {0xC2B0, 0xC9F8}, //11248 #HANGUL SYLLABLE SSANGCIEUC AE
+ {0xC2B1, 0xC9F9}, //11249 #HANGUL SYLLABLE SSANGCIEUC AE KIYEOK
+ {0xC2B2, 0xC9FC}, //11250 #HANGUL SYLLABLE SSANGCIEUC AE NIEUN
+ {0xC2B3, 0xCA00}, //11251 #HANGUL SYLLABLE SSANGCIEUC AE RIEUL
+ {0xC2B4, 0xCA08}, //11252 #HANGUL SYLLABLE SSANGCIEUC AE MIEUM
+ {0xC2B5, 0xCA09}, //11253 #HANGUL SYLLABLE SSANGCIEUC AE PIEUP
+ {0xC2B6, 0xCA0B}, //11254 #HANGUL SYLLABLE SSANGCIEUC AE SIOS
+ {0xC2B7, 0xCA0C}, //11255 #HANGUL SYLLABLE SSANGCIEUC AE SSANGSIOS
+ {0xC2B8, 0xCA0D}, //11256 #HANGUL SYLLABLE SSANGCIEUC AE IEUNG
+ {0xC2B9, 0xCA14}, //11257 #HANGUL SYLLABLE SSANGCIEUC YA
+ {0xC2BA, 0xCA18}, //11258 #HANGUL SYLLABLE SSANGCIEUC YA NIEUN
+ {0xC2BB, 0xCA29}, //11259 #HANGUL SYLLABLE SSANGCIEUC YA IEUNG
+ {0xC2BC, 0xCA4C}, //11260 #HANGUL SYLLABLE SSANGCIEUC EO
+ {0xC2BD, 0xCA4D}, //11261 #HANGUL SYLLABLE SSANGCIEUC EO KIYEOK
+ {0xC2BE, 0xCA50}, //11262 #HANGUL SYLLABLE SSANGCIEUC EO NIEUN
+ {0xC2BF, 0xCA54}, //11263 #HANGUL SYLLABLE SSANGCIEUC EO RIEUL
+ {0xC2C0, 0xCA5C}, //11264 #HANGUL SYLLABLE SSANGCIEUC EO MIEUM
+ {0xC2C1, 0xCA5D}, //11265 #HANGUL SYLLABLE SSANGCIEUC EO PIEUP
+ {0xC2C2, 0xCA5F}, //11266 #HANGUL SYLLABLE SSANGCIEUC EO SIOS
+ {0xC2C3, 0xCA60}, //11267 #HANGUL SYLLABLE SSANGCIEUC EO SSANGSIOS
+ {0xC2C4, 0xCA61}, //11268 #HANGUL SYLLABLE SSANGCIEUC EO IEUNG
+ {0xC2C5, 0xCA68}, //11269 #HANGUL SYLLABLE SSANGCIEUC E
+ {0xC2C6, 0xCA7D}, //11270 #HANGUL SYLLABLE SSANGCIEUC E IEUNG
+ {0xC2C7, 0xCA84}, //11271 #HANGUL SYLLABLE SSANGCIEUC YEO
+ {0xC2C8, 0xCA98}, //11272 #HANGUL SYLLABLE SSANGCIEUC YEO SSANGSIOS
+ {0xC2C9, 0xCABC}, //11273 #HANGUL SYLLABLE SSANGCIEUC O
+ {0xC2CA, 0xCABD}, //11274 #HANGUL SYLLABLE SSANGCIEUC O KIYEOK
+ {0xC2CB, 0xCAC0}, //11275 #HANGUL SYLLABLE SSANGCIEUC O NIEUN
+ {0xC2CC, 0xCAC4}, //11276 #HANGUL SYLLABLE SSANGCIEUC O RIEUL
+ {0xC2CD, 0xCACC}, //11277 #HANGUL SYLLABLE SSANGCIEUC O MIEUM
+ {0xC2CE, 0xCACD}, //11278 #HANGUL SYLLABLE SSANGCIEUC O PIEUP
+ {0xC2CF, 0xCACF}, //11279 #HANGUL SYLLABLE SSANGCIEUC O SIOS
+ {0xC2D0, 0xCAD1}, //11280 #HANGUL SYLLABLE SSANGCIEUC O IEUNG
+ {0xC2D1, 0xCAD3}, //11281 #HANGUL SYLLABLE SSANGCIEUC O CHIEUCH
+ {0xC2D2, 0xCAD8}, //11282 #HANGUL SYLLABLE SSANGCIEUC WA
+ {0xC2D3, 0xCAD9}, //11283 #HANGUL SYLLABLE SSANGCIEUC WA KIYEOK
+ {0xC2D4, 0xCAE0}, //11284 #HANGUL SYLLABLE SSANGCIEUC WA RIEUL
+ {0xC2D5, 0xCAEC}, //11285 #HANGUL SYLLABLE SSANGCIEUC WA SSANGSIOS
+ {0xC2D6, 0xCAF4}, //11286 #HANGUL SYLLABLE SSANGCIEUC WAE
+ {0xC2D7, 0xCB08}, //11287 #HANGUL SYLLABLE SSANGCIEUC WAE SSANGSIOS
+ {0xC2D8, 0xCB10}, //11288 #HANGUL SYLLABLE SSANGCIEUC OE
+ {0xC2D9, 0xCB14}, //11289 #HANGUL SYLLABLE SSANGCIEUC OE NIEUN
+ {0xC2DA, 0xCB18}, //11290 #HANGUL SYLLABLE SSANGCIEUC OE RIEUL
+ {0xC2DB, 0xCB20}, //11291 #HANGUL SYLLABLE SSANGCIEUC OE MIEUM
+ {0xC2DC, 0xCB21}, //11292 #HANGUL SYLLABLE SSANGCIEUC OE PIEUP
+ {0xC2DD, 0xCB41}, //11293 #HANGUL SYLLABLE SSANGCIEUC YO IEUNG
+ {0xC2DE, 0xCB48}, //11294 #HANGUL SYLLABLE SSANGCIEUC U
+ {0xC2DF, 0xCB49}, //11295 #HANGUL SYLLABLE SSANGCIEUC U KIYEOK
+ {0xC2E0, 0xCB4C}, //11296 #HANGUL SYLLABLE SSANGCIEUC U NIEUN
+ {0xC2E1, 0xCB50}, //11297 #HANGUL SYLLABLE SSANGCIEUC U RIEUL
+ {0xC2E2, 0xCB58}, //11298 #HANGUL SYLLABLE SSANGCIEUC U MIEUM
+ {0xC2E3, 0xCB59}, //11299 #HANGUL SYLLABLE SSANGCIEUC U PIEUP
+ {0xC2E4, 0xCB5D}, //11300 #HANGUL SYLLABLE SSANGCIEUC U IEUNG
+ {0xC2E5, 0xCB64}, //11301 #HANGUL SYLLABLE SSANGCIEUC WEO
+ {0xC2E6, 0xCB78}, //11302 #HANGUL SYLLABLE SSANGCIEUC WEO SSANGSIOS
+ {0xC2E7, 0xCB79}, //11303 #HANGUL SYLLABLE SSANGCIEUC WEO IEUNG
+ {0xC2E8, 0xCB9C}, //11304 #HANGUL SYLLABLE SSANGCIEUC WI
+ {0xC2E9, 0xCBB8}, //11305 #HANGUL SYLLABLE SSANGCIEUC YU
+ {0xC2EA, 0xCBD4}, //11306 #HANGUL SYLLABLE SSANGCIEUC EU
+ {0xC2EB, 0xCBE4}, //11307 #HANGUL SYLLABLE SSANGCIEUC EU MIEUM
+ {0xC2EC, 0xCBE7}, //11308 #HANGUL SYLLABLE SSANGCIEUC EU SIOS
+ {0xC2ED, 0xCBE9}, //11309 #HANGUL SYLLABLE SSANGCIEUC EU IEUNG
+ {0xC2EE, 0xCC0C}, //11310 #HANGUL SYLLABLE SSANGCIEUC I
+ {0xC2EF, 0xCC0D}, //11311 #HANGUL SYLLABLE SSANGCIEUC I KIYEOK
+ {0xC2F0, 0xCC10}, //11312 #HANGUL SYLLABLE SSANGCIEUC I NIEUN
+ {0xC2F1, 0xCC14}, //11313 #HANGUL SYLLABLE SSANGCIEUC I RIEUL
+ {0xC2F2, 0xCC1C}, //11314 #HANGUL SYLLABLE SSANGCIEUC I MIEUM
+ {0xC2F3, 0xCC1D}, //11315 #HANGUL SYLLABLE SSANGCIEUC I PIEUP
+ {0xC2F4, 0xCC21}, //11316 #HANGUL SYLLABLE SSANGCIEUC I IEUNG
+ {0xC2F5, 0xCC22}, //11317 #HANGUL SYLLABLE SSANGCIEUC I CIEUC
+ {0xC2F6, 0xCC27}, //11318 #HANGUL SYLLABLE SSANGCIEUC I HIEUH
+ {0xC2F7, 0xCC28}, //11319 #HANGUL SYLLABLE CHIEUCH A
+ {0xC2F8, 0xCC29}, //11320 #HANGUL SYLLABLE CHIEUCH A KIYEOK
+ {0xC2F9, 0xCC2C}, //11321 #HANGUL SYLLABLE CHIEUCH A NIEUN
+ {0xC2FA, 0xCC2E}, //11322 #HANGUL SYLLABLE CHIEUCH A NIEUNHIEUH
+ {0xC2FB, 0xCC30}, //11323 #HANGUL SYLLABLE CHIEUCH A RIEUL
+ {0xC2FC, 0xCC38}, //11324 #HANGUL SYLLABLE CHIEUCH A MIEUM
+ {0xC2FD, 0xCC39}, //11325 #HANGUL SYLLABLE CHIEUCH A PIEUP
+ {0xC2FE, 0xCC3B}, //11326 #HANGUL SYLLABLE CHIEUCH A SIOS
+ {0xC341, 0xD63D}, //11327 #HANGUL SYLLABLE HIEUH O NIEUNCIEUC
+ {0xC342, 0xD63E}, //11328 #HANGUL SYLLABLE HIEUH O NIEUNHIEUH
+ {0xC343, 0xD63F}, //11329 #HANGUL SYLLABLE HIEUH O TIKEUT
+ {0xC344, 0xD641}, //11330 #HANGUL SYLLABLE HIEUH O RIEULKIYEOK
+ {0xC345, 0xD642}, //11331 #HANGUL SYLLABLE HIEUH O RIEULMIEUM
+ {0xC346, 0xD643}, //11332 #HANGUL SYLLABLE HIEUH O RIEULPIEUP
+ {0xC347, 0xD644}, //11333 #HANGUL SYLLABLE HIEUH O RIEULSIOS
+ {0xC348, 0xD646}, //11334 #HANGUL SYLLABLE HIEUH O RIEULPHIEUPH
+ {0xC349, 0xD647}, //11335 #HANGUL SYLLABLE HIEUH O RIEULHIEUH
+ {0xC34A, 0xD64A}, //11336 #HANGUL SYLLABLE HIEUH O PIEUPSIOS
+ {0xC34B, 0xD64C}, //11337 #HANGUL SYLLABLE HIEUH O SSANGSIOS
+ {0xC34C, 0xD64E}, //11338 #HANGUL SYLLABLE HIEUH O CIEUC
+ {0xC34D, 0xD64F}, //11339 #HANGUL SYLLABLE HIEUH O CHIEUCH
+ {0xC34E, 0xD650}, //11340 #HANGUL SYLLABLE HIEUH O KHIEUKH
+ {0xC34F, 0xD652}, //11341 #HANGUL SYLLABLE HIEUH O PHIEUPH
+ {0xC350, 0xD653}, //11342 #HANGUL SYLLABLE HIEUH O HIEUH
+ {0xC351, 0xD656}, //11343 #HANGUL SYLLABLE HIEUH WA SSANGKIYEOK
+ {0xC352, 0xD657}, //11344 #HANGUL SYLLABLE HIEUH WA KIYEOKSIOS
+ {0xC353, 0xD659}, //11345 #HANGUL SYLLABLE HIEUH WA NIEUNCIEUC
+ {0xC354, 0xD65A}, //11346 #HANGUL SYLLABLE HIEUH WA NIEUNHIEUH
+ {0xC355, 0xD65B}, //11347 #HANGUL SYLLABLE HIEUH WA TIKEUT
+ {0xC356, 0xD65D}, //11348 #HANGUL SYLLABLE HIEUH WA RIEULKIYEOK
+ {0xC357, 0xD65E}, //11349 #HANGUL SYLLABLE HIEUH WA RIEULMIEUM
+ {0xC358, 0xD65F}, //11350 #HANGUL SYLLABLE HIEUH WA RIEULPIEUP
+ {0xC359, 0xD660}, //11351 #HANGUL SYLLABLE HIEUH WA RIEULSIOS
+ {0xC35A, 0xD661}, //11352 #HANGUL SYLLABLE HIEUH WA RIEULTHIEUTH
+ {0xC361, 0xD662}, //11353 #HANGUL SYLLABLE HIEUH WA RIEULPHIEUPH
+ {0xC362, 0xD663}, //11354 #HANGUL SYLLABLE HIEUH WA RIEULHIEUH
+ {0xC363, 0xD664}, //11355 #HANGUL SYLLABLE HIEUH WA MIEUM
+ {0xC364, 0xD665}, //11356 #HANGUL SYLLABLE HIEUH WA PIEUP
+ {0xC365, 0xD666}, //11357 #HANGUL SYLLABLE HIEUH WA PIEUPSIOS
+ {0xC366, 0xD668}, //11358 #HANGUL SYLLABLE HIEUH WA SSANGSIOS
+ {0xC367, 0xD66A}, //11359 #HANGUL SYLLABLE HIEUH WA CIEUC
+ {0xC368, 0xD66B}, //11360 #HANGUL SYLLABLE HIEUH WA CHIEUCH
+ {0xC369, 0xD66C}, //11361 #HANGUL SYLLABLE HIEUH WA KHIEUKH
+ {0xC36A, 0xD66D}, //11362 #HANGUL SYLLABLE HIEUH WA THIEUTH
+ {0xC36B, 0xD66E}, //11363 #HANGUL SYLLABLE HIEUH WA PHIEUPH
+ {0xC36C, 0xD66F}, //11364 #HANGUL SYLLABLE HIEUH WA HIEUH
+ {0xC36D, 0xD672}, //11365 #HANGUL SYLLABLE HIEUH WAE SSANGKIYEOK
+ {0xC36E, 0xD673}, //11366 #HANGUL SYLLABLE HIEUH WAE KIYEOKSIOS
+ {0xC36F, 0xD675}, //11367 #HANGUL SYLLABLE HIEUH WAE NIEUNCIEUC
+ {0xC370, 0xD676}, //11368 #HANGUL SYLLABLE HIEUH WAE NIEUNHIEUH
+ {0xC371, 0xD677}, //11369 #HANGUL SYLLABLE HIEUH WAE TIKEUT
+ {0xC372, 0xD678}, //11370 #HANGUL SYLLABLE HIEUH WAE RIEUL
+ {0xC373, 0xD679}, //11371 #HANGUL SYLLABLE HIEUH WAE RIEULKIYEOK
+ {0xC374, 0xD67A}, //11372 #HANGUL SYLLABLE HIEUH WAE RIEULMIEUM
+ {0xC375, 0xD67B}, //11373 #HANGUL SYLLABLE HIEUH WAE RIEULPIEUP
+ {0xC376, 0xD67C}, //11374 #HANGUL SYLLABLE HIEUH WAE RIEULSIOS
+ {0xC377, 0xD67D}, //11375 #HANGUL SYLLABLE HIEUH WAE RIEULTHIEUTH
+ {0xC378, 0xD67E}, //11376 #HANGUL SYLLABLE HIEUH WAE RIEULPHIEUPH
+ {0xC379, 0xD67F}, //11377 #HANGUL SYLLABLE HIEUH WAE RIEULHIEUH
+ {0xC37A, 0xD680}, //11378 #HANGUL SYLLABLE HIEUH WAE MIEUM
+ {0xC381, 0xD681}, //11379 #HANGUL SYLLABLE HIEUH WAE PIEUP
+ {0xC382, 0xD682}, //11380 #HANGUL SYLLABLE HIEUH WAE PIEUPSIOS
+ {0xC383, 0xD684}, //11381 #HANGUL SYLLABLE HIEUH WAE SSANGSIOS
+ {0xC384, 0xD686}, //11382 #HANGUL SYLLABLE HIEUH WAE CIEUC
+ {0xC385, 0xD687}, //11383 #HANGUL SYLLABLE HIEUH WAE CHIEUCH
+ {0xC386, 0xD688}, //11384 #HANGUL SYLLABLE HIEUH WAE KHIEUKH
+ {0xC387, 0xD689}, //11385 #HANGUL SYLLABLE HIEUH WAE THIEUTH
+ {0xC388, 0xD68A}, //11386 #HANGUL SYLLABLE HIEUH WAE PHIEUPH
+ {0xC389, 0xD68B}, //11387 #HANGUL SYLLABLE HIEUH WAE HIEUH
+ {0xC38A, 0xD68E}, //11388 #HANGUL SYLLABLE HIEUH OE SSANGKIYEOK
+ {0xC38B, 0xD68F}, //11389 #HANGUL SYLLABLE HIEUH OE KIYEOKSIOS
+ {0xC38C, 0xD691}, //11390 #HANGUL SYLLABLE HIEUH OE NIEUNCIEUC
+ {0xC38D, 0xD692}, //11391 #HANGUL SYLLABLE HIEUH OE NIEUNHIEUH
+ {0xC38E, 0xD693}, //11392 #HANGUL SYLLABLE HIEUH OE TIKEUT
+ {0xC38F, 0xD695}, //11393 #HANGUL SYLLABLE HIEUH OE RIEULKIYEOK
+ {0xC390, 0xD696}, //11394 #HANGUL SYLLABLE HIEUH OE RIEULMIEUM
+ {0xC391, 0xD697}, //11395 #HANGUL SYLLABLE HIEUH OE RIEULPIEUP
+ {0xC392, 0xD698}, //11396 #HANGUL SYLLABLE HIEUH OE RIEULSIOS
+ {0xC393, 0xD699}, //11397 #HANGUL SYLLABLE HIEUH OE RIEULTHIEUTH
+ {0xC394, 0xD69A}, //11398 #HANGUL SYLLABLE HIEUH OE RIEULPHIEUPH
+ {0xC395, 0xD69B}, //11399 #HANGUL SYLLABLE HIEUH OE RIEULHIEUH
+ {0xC396, 0xD69C}, //11400 #HANGUL SYLLABLE HIEUH OE MIEUM
+ {0xC397, 0xD69E}, //11401 #HANGUL SYLLABLE HIEUH OE PIEUPSIOS
+ {0xC398, 0xD6A0}, //11402 #HANGUL SYLLABLE HIEUH OE SSANGSIOS
+ {0xC399, 0xD6A2}, //11403 #HANGUL SYLLABLE HIEUH OE CIEUC
+ {0xC39A, 0xD6A3}, //11404 #HANGUL SYLLABLE HIEUH OE CHIEUCH
+ {0xC39B, 0xD6A4}, //11405 #HANGUL SYLLABLE HIEUH OE KHIEUKH
+ {0xC39C, 0xD6A5}, //11406 #HANGUL SYLLABLE HIEUH OE THIEUTH
+ {0xC39D, 0xD6A6}, //11407 #HANGUL SYLLABLE HIEUH OE PHIEUPH
+ {0xC39E, 0xD6A7}, //11408 #HANGUL SYLLABLE HIEUH OE HIEUH
+ {0xC39F, 0xD6A9}, //11409 #HANGUL SYLLABLE HIEUH YO KIYEOK
+ {0xC3A0, 0xD6AA}, //11410 #HANGUL SYLLABLE HIEUH YO SSANGKIYEOK
+ {0xC3A1, 0xCC3C}, //11411 #HANGUL SYLLABLE CHIEUCH A SSANGSIOS
+ {0xC3A2, 0xCC3D}, //11412 #HANGUL SYLLABLE CHIEUCH A IEUNG
+ {0xC3A3, 0xCC3E}, //11413 #HANGUL SYLLABLE CHIEUCH A CIEUC
+ {0xC3A4, 0xCC44}, //11414 #HANGUL SYLLABLE CHIEUCH AE
+ {0xC3A5, 0xCC45}, //11415 #HANGUL SYLLABLE CHIEUCH AE KIYEOK
+ {0xC3A6, 0xCC48}, //11416 #HANGUL SYLLABLE CHIEUCH AE NIEUN
+ {0xC3A7, 0xCC4C}, //11417 #HANGUL SYLLABLE CHIEUCH AE RIEUL
+ {0xC3A8, 0xCC54}, //11418 #HANGUL SYLLABLE CHIEUCH AE MIEUM
+ {0xC3A9, 0xCC55}, //11419 #HANGUL SYLLABLE CHIEUCH AE PIEUP
+ {0xC3AA, 0xCC57}, //11420 #HANGUL SYLLABLE CHIEUCH AE SIOS
+ {0xC3AB, 0xCC58}, //11421 #HANGUL SYLLABLE CHIEUCH AE SSANGSIOS
+ {0xC3AC, 0xCC59}, //11422 #HANGUL SYLLABLE CHIEUCH AE IEUNG
+ {0xC3AD, 0xCC60}, //11423 #HANGUL SYLLABLE CHIEUCH YA
+ {0xC3AE, 0xCC64}, //11424 #HANGUL SYLLABLE CHIEUCH YA NIEUN
+ {0xC3AF, 0xCC66}, //11425 #HANGUL SYLLABLE CHIEUCH YA NIEUNHIEUH
+ {0xC3B0, 0xCC68}, //11426 #HANGUL SYLLABLE CHIEUCH YA RIEUL
+ {0xC3B1, 0xCC70}, //11427 #HANGUL SYLLABLE CHIEUCH YA MIEUM
+ {0xC3B2, 0xCC75}, //11428 #HANGUL SYLLABLE CHIEUCH YA IEUNG
+ {0xC3B3, 0xCC98}, //11429 #HANGUL SYLLABLE CHIEUCH EO
+ {0xC3B4, 0xCC99}, //11430 #HANGUL SYLLABLE CHIEUCH EO KIYEOK
+ {0xC3B5, 0xCC9C}, //11431 #HANGUL SYLLABLE CHIEUCH EO NIEUN
+ {0xC3B6, 0xCCA0}, //11432 #HANGUL SYLLABLE CHIEUCH EO RIEUL
+ {0xC3B7, 0xCCA8}, //11433 #HANGUL SYLLABLE CHIEUCH EO MIEUM
+ {0xC3B8, 0xCCA9}, //11434 #HANGUL SYLLABLE CHIEUCH EO PIEUP
+ {0xC3B9, 0xCCAB}, //11435 #HANGUL SYLLABLE CHIEUCH EO SIOS
+ {0xC3BA, 0xCCAC}, //11436 #HANGUL SYLLABLE CHIEUCH EO SSANGSIOS
+ {0xC3BB, 0xCCAD}, //11437 #HANGUL SYLLABLE CHIEUCH EO IEUNG
+ {0xC3BC, 0xCCB4}, //11438 #HANGUL SYLLABLE CHIEUCH E
+ {0xC3BD, 0xCCB5}, //11439 #HANGUL SYLLABLE CHIEUCH E KIYEOK
+ {0xC3BE, 0xCCB8}, //11440 #HANGUL SYLLABLE CHIEUCH E NIEUN
+ {0xC3BF, 0xCCBC}, //11441 #HANGUL SYLLABLE CHIEUCH E RIEUL
+ {0xC3C0, 0xCCC4}, //11442 #HANGUL SYLLABLE CHIEUCH E MIEUM
+ {0xC3C1, 0xCCC5}, //11443 #HANGUL SYLLABLE CHIEUCH E PIEUP
+ {0xC3C2, 0xCCC7}, //11444 #HANGUL SYLLABLE CHIEUCH E SIOS
+ {0xC3C3, 0xCCC9}, //11445 #HANGUL SYLLABLE CHIEUCH E IEUNG
+ {0xC3C4, 0xCCD0}, //11446 #HANGUL SYLLABLE CHIEUCH YEO
+ {0xC3C5, 0xCCD4}, //11447 #HANGUL SYLLABLE CHIEUCH YEO NIEUN
+ {0xC3C6, 0xCCE4}, //11448 #HANGUL SYLLABLE CHIEUCH YEO SSANGSIOS
+ {0xC3C7, 0xCCEC}, //11449 #HANGUL SYLLABLE CHIEUCH YE
+ {0xC3C8, 0xCCF0}, //11450 #HANGUL SYLLABLE CHIEUCH YE NIEUN
+ {0xC3C9, 0xCD01}, //11451 #HANGUL SYLLABLE CHIEUCH YE IEUNG
+ {0xC3CA, 0xCD08}, //11452 #HANGUL SYLLABLE CHIEUCH O
+ {0xC3CB, 0xCD09}, //11453 #HANGUL SYLLABLE CHIEUCH O KIYEOK
+ {0xC3CC, 0xCD0C}, //11454 #HANGUL SYLLABLE CHIEUCH O NIEUN
+ {0xC3CD, 0xCD10}, //11455 #HANGUL SYLLABLE CHIEUCH O RIEUL
+ {0xC3CE, 0xCD18}, //11456 #HANGUL SYLLABLE CHIEUCH O MIEUM
+ {0xC3CF, 0xCD19}, //11457 #HANGUL SYLLABLE CHIEUCH O PIEUP
+ {0xC3D0, 0xCD1B}, //11458 #HANGUL SYLLABLE CHIEUCH O SIOS
+ {0xC3D1, 0xCD1D}, //11459 #HANGUL SYLLABLE CHIEUCH O IEUNG
+ {0xC3D2, 0xCD24}, //11460 #HANGUL SYLLABLE CHIEUCH WA
+ {0xC3D3, 0xCD28}, //11461 #HANGUL SYLLABLE CHIEUCH WA NIEUN
+ {0xC3D4, 0xCD2C}, //11462 #HANGUL SYLLABLE CHIEUCH WA RIEUL
+ {0xC3D5, 0xCD39}, //11463 #HANGUL SYLLABLE CHIEUCH WA IEUNG
+ {0xC3D6, 0xCD5C}, //11464 #HANGUL SYLLABLE CHIEUCH OE
+ {0xC3D7, 0xCD60}, //11465 #HANGUL SYLLABLE CHIEUCH OE NIEUN
+ {0xC3D8, 0xCD64}, //11466 #HANGUL SYLLABLE CHIEUCH OE RIEUL
+ {0xC3D9, 0xCD6C}, //11467 #HANGUL SYLLABLE CHIEUCH OE MIEUM
+ {0xC3DA, 0xCD6D}, //11468 #HANGUL SYLLABLE CHIEUCH OE PIEUP
+ {0xC3DB, 0xCD6F}, //11469 #HANGUL SYLLABLE CHIEUCH OE SIOS
+ {0xC3DC, 0xCD71}, //11470 #HANGUL SYLLABLE CHIEUCH OE IEUNG
+ {0xC3DD, 0xCD78}, //11471 #HANGUL SYLLABLE CHIEUCH YO
+ {0xC3DE, 0xCD88}, //11472 #HANGUL SYLLABLE CHIEUCH YO MIEUM
+ {0xC3DF, 0xCD94}, //11473 #HANGUL SYLLABLE CHIEUCH U
+ {0xC3E0, 0xCD95}, //11474 #HANGUL SYLLABLE CHIEUCH U KIYEOK
+ {0xC3E1, 0xCD98}, //11475 #HANGUL SYLLABLE CHIEUCH U NIEUN
+ {0xC3E2, 0xCD9C}, //11476 #HANGUL SYLLABLE CHIEUCH U RIEUL
+ {0xC3E3, 0xCDA4}, //11477 #HANGUL SYLLABLE CHIEUCH U MIEUM
+ {0xC3E4, 0xCDA5}, //11478 #HANGUL SYLLABLE CHIEUCH U PIEUP
+ {0xC3E5, 0xCDA7}, //11479 #HANGUL SYLLABLE CHIEUCH U SIOS
+ {0xC3E6, 0xCDA9}, //11480 #HANGUL SYLLABLE CHIEUCH U IEUNG
+ {0xC3E7, 0xCDB0}, //11481 #HANGUL SYLLABLE CHIEUCH WEO
+ {0xC3E8, 0xCDC4}, //11482 #HANGUL SYLLABLE CHIEUCH WEO SSANGSIOS
+ {0xC3E9, 0xCDCC}, //11483 #HANGUL SYLLABLE CHIEUCH WE
+ {0xC3EA, 0xCDD0}, //11484 #HANGUL SYLLABLE CHIEUCH WE NIEUN
+ {0xC3EB, 0xCDE8}, //11485 #HANGUL SYLLABLE CHIEUCH WI
+ {0xC3EC, 0xCDEC}, //11486 #HANGUL SYLLABLE CHIEUCH WI NIEUN
+ {0xC3ED, 0xCDF0}, //11487 #HANGUL SYLLABLE CHIEUCH WI RIEUL
+ {0xC3EE, 0xCDF8}, //11488 #HANGUL SYLLABLE CHIEUCH WI MIEUM
+ {0xC3EF, 0xCDF9}, //11489 #HANGUL SYLLABLE CHIEUCH WI PIEUP
+ {0xC3F0, 0xCDFB}, //11490 #HANGUL SYLLABLE CHIEUCH WI SIOS
+ {0xC3F1, 0xCDFD}, //11491 #HANGUL SYLLABLE CHIEUCH WI IEUNG
+ {0xC3F2, 0xCE04}, //11492 #HANGUL SYLLABLE CHIEUCH YU
+ {0xC3F3, 0xCE08}, //11493 #HANGUL SYLLABLE CHIEUCH YU NIEUN
+ {0xC3F4, 0xCE0C}, //11494 #HANGUL SYLLABLE CHIEUCH YU RIEUL
+ {0xC3F5, 0xCE14}, //11495 #HANGUL SYLLABLE CHIEUCH YU MIEUM
+ {0xC3F6, 0xCE19}, //11496 #HANGUL SYLLABLE CHIEUCH YU IEUNG
+ {0xC3F7, 0xCE20}, //11497 #HANGUL SYLLABLE CHIEUCH EU
+ {0xC3F8, 0xCE21}, //11498 #HANGUL SYLLABLE CHIEUCH EU KIYEOK
+ {0xC3F9, 0xCE24}, //11499 #HANGUL SYLLABLE CHIEUCH EU NIEUN
+ {0xC3FA, 0xCE28}, //11500 #HANGUL SYLLABLE CHIEUCH EU RIEUL
+ {0xC3FB, 0xCE30}, //11501 #HANGUL SYLLABLE CHIEUCH EU MIEUM
+ {0xC3FC, 0xCE31}, //11502 #HANGUL SYLLABLE CHIEUCH EU PIEUP
+ {0xC3FD, 0xCE33}, //11503 #HANGUL SYLLABLE CHIEUCH EU SIOS
+ {0xC3FE, 0xCE35}, //11504 #HANGUL SYLLABLE CHIEUCH EU IEUNG
+ {0xC441, 0xD6AB}, //11505 #HANGUL SYLLABLE HIEUH YO KIYEOKSIOS
+ {0xC442, 0xD6AD}, //11506 #HANGUL SYLLABLE HIEUH YO NIEUNCIEUC
+ {0xC443, 0xD6AE}, //11507 #HANGUL SYLLABLE HIEUH YO NIEUNHIEUH
+ {0xC444, 0xD6AF}, //11508 #HANGUL SYLLABLE HIEUH YO TIKEUT
+ {0xC445, 0xD6B1}, //11509 #HANGUL SYLLABLE HIEUH YO RIEULKIYEOK
+ {0xC446, 0xD6B2}, //11510 #HANGUL SYLLABLE HIEUH YO RIEULMIEUM
+ {0xC447, 0xD6B3}, //11511 #HANGUL SYLLABLE HIEUH YO RIEULPIEUP
+ {0xC448, 0xD6B4}, //11512 #HANGUL SYLLABLE HIEUH YO RIEULSIOS
+ {0xC449, 0xD6B5}, //11513 #HANGUL SYLLABLE HIEUH YO RIEULTHIEUTH
+ {0xC44A, 0xD6B6}, //11514 #HANGUL SYLLABLE HIEUH YO RIEULPHIEUPH
+ {0xC44B, 0xD6B7}, //11515 #HANGUL SYLLABLE HIEUH YO RIEULHIEUH
+ {0xC44C, 0xD6B8}, //11516 #HANGUL SYLLABLE HIEUH YO MIEUM
+ {0xC44D, 0xD6BA}, //11517 #HANGUL SYLLABLE HIEUH YO PIEUPSIOS
+ {0xC44E, 0xD6BC}, //11518 #HANGUL SYLLABLE HIEUH YO SSANGSIOS
+ {0xC44F, 0xD6BD}, //11519 #HANGUL SYLLABLE HIEUH YO IEUNG
+ {0xC450, 0xD6BE}, //11520 #HANGUL SYLLABLE HIEUH YO CIEUC
+ {0xC451, 0xD6BF}, //11521 #HANGUL SYLLABLE HIEUH YO CHIEUCH
+ {0xC452, 0xD6C0}, //11522 #HANGUL SYLLABLE HIEUH YO KHIEUKH
+ {0xC453, 0xD6C1}, //11523 #HANGUL SYLLABLE HIEUH YO THIEUTH
+ {0xC454, 0xD6C2}, //11524 #HANGUL SYLLABLE HIEUH YO PHIEUPH
+ {0xC455, 0xD6C3}, //11525 #HANGUL SYLLABLE HIEUH YO HIEUH
+ {0xC456, 0xD6C6}, //11526 #HANGUL SYLLABLE HIEUH U SSANGKIYEOK
+ {0xC457, 0xD6C7}, //11527 #HANGUL SYLLABLE HIEUH U KIYEOKSIOS
+ {0xC458, 0xD6C9}, //11528 #HANGUL SYLLABLE HIEUH U NIEUNCIEUC
+ {0xC459, 0xD6CA}, //11529 #HANGUL SYLLABLE HIEUH U NIEUNHIEUH
+ {0xC45A, 0xD6CB}, //11530 #HANGUL SYLLABLE HIEUH U TIKEUT
+ {0xC461, 0xD6CD}, //11531 #HANGUL SYLLABLE HIEUH U RIEULKIYEOK
+ {0xC462, 0xD6CE}, //11532 #HANGUL SYLLABLE HIEUH U RIEULMIEUM
+ {0xC463, 0xD6CF}, //11533 #HANGUL SYLLABLE HIEUH U RIEULPIEUP
+ {0xC464, 0xD6D0}, //11534 #HANGUL SYLLABLE HIEUH U RIEULSIOS
+ {0xC465, 0xD6D2}, //11535 #HANGUL SYLLABLE HIEUH U RIEULPHIEUPH
+ {0xC466, 0xD6D3}, //11536 #HANGUL SYLLABLE HIEUH U RIEULHIEUH
+ {0xC467, 0xD6D5}, //11537 #HANGUL SYLLABLE HIEUH U PIEUP
+ {0xC468, 0xD6D6}, //11538 #HANGUL SYLLABLE HIEUH U PIEUPSIOS
+ {0xC469, 0xD6D8}, //11539 #HANGUL SYLLABLE HIEUH U SSANGSIOS
+ {0xC46A, 0xD6DA}, //11540 #HANGUL SYLLABLE HIEUH U CIEUC
+ {0xC46B, 0xD6DB}, //11541 #HANGUL SYLLABLE HIEUH U CHIEUCH
+ {0xC46C, 0xD6DC}, //11542 #HANGUL SYLLABLE HIEUH U KHIEUKH
+ {0xC46D, 0xD6DD}, //11543 #HANGUL SYLLABLE HIEUH U THIEUTH
+ {0xC46E, 0xD6DE}, //11544 #HANGUL SYLLABLE HIEUH U PHIEUPH
+ {0xC46F, 0xD6DF}, //11545 #HANGUL SYLLABLE HIEUH U HIEUH
+ {0xC470, 0xD6E1}, //11546 #HANGUL SYLLABLE HIEUH WEO KIYEOK
+ {0xC471, 0xD6E2}, //11547 #HANGUL SYLLABLE HIEUH WEO SSANGKIYEOK
+ {0xC472, 0xD6E3}, //11548 #HANGUL SYLLABLE HIEUH WEO KIYEOKSIOS
+ {0xC473, 0xD6E5}, //11549 #HANGUL SYLLABLE HIEUH WEO NIEUNCIEUC
+ {0xC474, 0xD6E6}, //11550 #HANGUL SYLLABLE HIEUH WEO NIEUNHIEUH
+ {0xC475, 0xD6E7}, //11551 #HANGUL SYLLABLE HIEUH WEO TIKEUT
+ {0xC476, 0xD6E9}, //11552 #HANGUL SYLLABLE HIEUH WEO RIEULKIYEOK
+ {0xC477, 0xD6EA}, //11553 #HANGUL SYLLABLE HIEUH WEO RIEULMIEUM
+ {0xC478, 0xD6EB}, //11554 #HANGUL SYLLABLE HIEUH WEO RIEULPIEUP
+ {0xC479, 0xD6EC}, //11555 #HANGUL SYLLABLE HIEUH WEO RIEULSIOS
+ {0xC47A, 0xD6ED}, //11556 #HANGUL SYLLABLE HIEUH WEO RIEULTHIEUTH
+ {0xC481, 0xD6EE}, //11557 #HANGUL SYLLABLE HIEUH WEO RIEULPHIEUPH
+ {0xC482, 0xD6EF}, //11558 #HANGUL SYLLABLE HIEUH WEO RIEULHIEUH
+ {0xC483, 0xD6F1}, //11559 #HANGUL SYLLABLE HIEUH WEO PIEUP
+ {0xC484, 0xD6F2}, //11560 #HANGUL SYLLABLE HIEUH WEO PIEUPSIOS
+ {0xC485, 0xD6F3}, //11561 #HANGUL SYLLABLE HIEUH WEO SIOS
+ {0xC486, 0xD6F4}, //11562 #HANGUL SYLLABLE HIEUH WEO SSANGSIOS
+ {0xC487, 0xD6F6}, //11563 #HANGUL SYLLABLE HIEUH WEO CIEUC
+ {0xC488, 0xD6F7}, //11564 #HANGUL SYLLABLE HIEUH WEO CHIEUCH
+ {0xC489, 0xD6F8}, //11565 #HANGUL SYLLABLE HIEUH WEO KHIEUKH
+ {0xC48A, 0xD6F9}, //11566 #HANGUL SYLLABLE HIEUH WEO THIEUTH
+ {0xC48B, 0xD6FA}, //11567 #HANGUL SYLLABLE HIEUH WEO PHIEUPH
+ {0xC48C, 0xD6FB}, //11568 #HANGUL SYLLABLE HIEUH WEO HIEUH
+ {0xC48D, 0xD6FE}, //11569 #HANGUL SYLLABLE HIEUH WE SSANGKIYEOK
+ {0xC48E, 0xD6FF}, //11570 #HANGUL SYLLABLE HIEUH WE KIYEOKSIOS
+ {0xC48F, 0xD701}, //11571 #HANGUL SYLLABLE HIEUH WE NIEUNCIEUC
+ {0xC490, 0xD702}, //11572 #HANGUL SYLLABLE HIEUH WE NIEUNHIEUH
+ {0xC491, 0xD703}, //11573 #HANGUL SYLLABLE HIEUH WE TIKEUT
+ {0xC492, 0xD705}, //11574 #HANGUL SYLLABLE HIEUH WE RIEULKIYEOK
+ {0xC493, 0xD706}, //11575 #HANGUL SYLLABLE HIEUH WE RIEULMIEUM
+ {0xC494, 0xD707}, //11576 #HANGUL SYLLABLE HIEUH WE RIEULPIEUP
+ {0xC495, 0xD708}, //11577 #HANGUL SYLLABLE HIEUH WE RIEULSIOS
+ {0xC496, 0xD709}, //11578 #HANGUL SYLLABLE HIEUH WE RIEULTHIEUTH
+ {0xC497, 0xD70A}, //11579 #HANGUL SYLLABLE HIEUH WE RIEULPHIEUPH
+ {0xC498, 0xD70B}, //11580 #HANGUL SYLLABLE HIEUH WE RIEULHIEUH
+ {0xC499, 0xD70C}, //11581 #HANGUL SYLLABLE HIEUH WE MIEUM
+ {0xC49A, 0xD70D}, //11582 #HANGUL SYLLABLE HIEUH WE PIEUP
+ {0xC49B, 0xD70E}, //11583 #HANGUL SYLLABLE HIEUH WE PIEUPSIOS
+ {0xC49C, 0xD70F}, //11584 #HANGUL SYLLABLE HIEUH WE SIOS
+ {0xC49D, 0xD710}, //11585 #HANGUL SYLLABLE HIEUH WE SSANGSIOS
+ {0xC49E, 0xD712}, //11586 #HANGUL SYLLABLE HIEUH WE CIEUC
+ {0xC49F, 0xD713}, //11587 #HANGUL SYLLABLE HIEUH WE CHIEUCH
+ {0xC4A0, 0xD714}, //11588 #HANGUL SYLLABLE HIEUH WE KHIEUKH
+ {0xC4A1, 0xCE58}, //11589 #HANGUL SYLLABLE CHIEUCH I
+ {0xC4A2, 0xCE59}, //11590 #HANGUL SYLLABLE CHIEUCH I KIYEOK
+ {0xC4A3, 0xCE5C}, //11591 #HANGUL SYLLABLE CHIEUCH I NIEUN
+ {0xC4A4, 0xCE5F}, //11592 #HANGUL SYLLABLE CHIEUCH I TIKEUT
+ {0xC4A5, 0xCE60}, //11593 #HANGUL SYLLABLE CHIEUCH I RIEUL
+ {0xC4A6, 0xCE61}, //11594 #HANGUL SYLLABLE CHIEUCH I RIEULKIYEOK
+ {0xC4A7, 0xCE68}, //11595 #HANGUL SYLLABLE CHIEUCH I MIEUM
+ {0xC4A8, 0xCE69}, //11596 #HANGUL SYLLABLE CHIEUCH I PIEUP
+ {0xC4A9, 0xCE6B}, //11597 #HANGUL SYLLABLE CHIEUCH I SIOS
+ {0xC4AA, 0xCE6D}, //11598 #HANGUL SYLLABLE CHIEUCH I IEUNG
+ {0xC4AB, 0xCE74}, //11599 #HANGUL SYLLABLE KHIEUKH A
+ {0xC4AC, 0xCE75}, //11600 #HANGUL SYLLABLE KHIEUKH A KIYEOK
+ {0xC4AD, 0xCE78}, //11601 #HANGUL SYLLABLE KHIEUKH A NIEUN
+ {0xC4AE, 0xCE7C}, //11602 #HANGUL SYLLABLE KHIEUKH A RIEUL
+ {0xC4AF, 0xCE84}, //11603 #HANGUL SYLLABLE KHIEUKH A MIEUM
+ {0xC4B0, 0xCE85}, //11604 #HANGUL SYLLABLE KHIEUKH A PIEUP
+ {0xC4B1, 0xCE87}, //11605 #HANGUL SYLLABLE KHIEUKH A SIOS
+ {0xC4B2, 0xCE89}, //11606 #HANGUL SYLLABLE KHIEUKH A IEUNG
+ {0xC4B3, 0xCE90}, //11607 #HANGUL SYLLABLE KHIEUKH AE
+ {0xC4B4, 0xCE91}, //11608 #HANGUL SYLLABLE KHIEUKH AE KIYEOK
+ {0xC4B5, 0xCE94}, //11609 #HANGUL SYLLABLE KHIEUKH AE NIEUN
+ {0xC4B6, 0xCE98}, //11610 #HANGUL SYLLABLE KHIEUKH AE RIEUL
+ {0xC4B7, 0xCEA0}, //11611 #HANGUL SYLLABLE KHIEUKH AE MIEUM
+ {0xC4B8, 0xCEA1}, //11612 #HANGUL SYLLABLE KHIEUKH AE PIEUP
+ {0xC4B9, 0xCEA3}, //11613 #HANGUL SYLLABLE KHIEUKH AE SIOS
+ {0xC4BA, 0xCEA4}, //11614 #HANGUL SYLLABLE KHIEUKH AE SSANGSIOS
+ {0xC4BB, 0xCEA5}, //11615 #HANGUL SYLLABLE KHIEUKH AE IEUNG
+ {0xC4BC, 0xCEAC}, //11616 #HANGUL SYLLABLE KHIEUKH YA
+ {0xC4BD, 0xCEAD}, //11617 #HANGUL SYLLABLE KHIEUKH YA KIYEOK
+ {0xC4BE, 0xCEC1}, //11618 #HANGUL SYLLABLE KHIEUKH YA IEUNG
+ {0xC4BF, 0xCEE4}, //11619 #HANGUL SYLLABLE KHIEUKH EO
+ {0xC4C0, 0xCEE5}, //11620 #HANGUL SYLLABLE KHIEUKH EO KIYEOK
+ {0xC4C1, 0xCEE8}, //11621 #HANGUL SYLLABLE KHIEUKH EO NIEUN
+ {0xC4C2, 0xCEEB}, //11622 #HANGUL SYLLABLE KHIEUKH EO TIKEUT
+ {0xC4C3, 0xCEEC}, //11623 #HANGUL SYLLABLE KHIEUKH EO RIEUL
+ {0xC4C4, 0xCEF4}, //11624 #HANGUL SYLLABLE KHIEUKH EO MIEUM
+ {0xC4C5, 0xCEF5}, //11625 #HANGUL SYLLABLE KHIEUKH EO PIEUP
+ {0xC4C6, 0xCEF7}, //11626 #HANGUL SYLLABLE KHIEUKH EO SIOS
+ {0xC4C7, 0xCEF8}, //11627 #HANGUL SYLLABLE KHIEUKH EO SSANGSIOS
+ {0xC4C8, 0xCEF9}, //11628 #HANGUL SYLLABLE KHIEUKH EO IEUNG
+ {0xC4C9, 0xCF00}, //11629 #HANGUL SYLLABLE KHIEUKH E
+ {0xC4CA, 0xCF01}, //11630 #HANGUL SYLLABLE KHIEUKH E KIYEOK
+ {0xC4CB, 0xCF04}, //11631 #HANGUL SYLLABLE KHIEUKH E NIEUN
+ {0xC4CC, 0xCF08}, //11632 #HANGUL SYLLABLE KHIEUKH E RIEUL
+ {0xC4CD, 0xCF10}, //11633 #HANGUL SYLLABLE KHIEUKH E MIEUM
+ {0xC4CE, 0xCF11}, //11634 #HANGUL SYLLABLE KHIEUKH E PIEUP
+ {0xC4CF, 0xCF13}, //11635 #HANGUL SYLLABLE KHIEUKH E SIOS
+ {0xC4D0, 0xCF15}, //11636 #HANGUL SYLLABLE KHIEUKH E IEUNG
+ {0xC4D1, 0xCF1C}, //11637 #HANGUL SYLLABLE KHIEUKH YEO
+ {0xC4D2, 0xCF20}, //11638 #HANGUL SYLLABLE KHIEUKH YEO NIEUN
+ {0xC4D3, 0xCF24}, //11639 #HANGUL SYLLABLE KHIEUKH YEO RIEUL
+ {0xC4D4, 0xCF2C}, //11640 #HANGUL SYLLABLE KHIEUKH YEO MIEUM
+ {0xC4D5, 0xCF2D}, //11641 #HANGUL SYLLABLE KHIEUKH YEO PIEUP
+ {0xC4D6, 0xCF2F}, //11642 #HANGUL SYLLABLE KHIEUKH YEO SIOS
+ {0xC4D7, 0xCF30}, //11643 #HANGUL SYLLABLE KHIEUKH YEO SSANGSIOS
+ {0xC4D8, 0xCF31}, //11644 #HANGUL SYLLABLE KHIEUKH YEO IEUNG
+ {0xC4D9, 0xCF38}, //11645 #HANGUL SYLLABLE KHIEUKH YE
+ {0xC4DA, 0xCF54}, //11646 #HANGUL SYLLABLE KHIEUKH O
+ {0xC4DB, 0xCF55}, //11647 #HANGUL SYLLABLE KHIEUKH O KIYEOK
+ {0xC4DC, 0xCF58}, //11648 #HANGUL SYLLABLE KHIEUKH O NIEUN
+ {0xC4DD, 0xCF5C}, //11649 #HANGUL SYLLABLE KHIEUKH O RIEUL
+ {0xC4DE, 0xCF64}, //11650 #HANGUL SYLLABLE KHIEUKH O MIEUM
+ {0xC4DF, 0xCF65}, //11651 #HANGUL SYLLABLE KHIEUKH O PIEUP
+ {0xC4E0, 0xCF67}, //11652 #HANGUL SYLLABLE KHIEUKH O SIOS
+ {0xC4E1, 0xCF69}, //11653 #HANGUL SYLLABLE KHIEUKH O IEUNG
+ {0xC4E2, 0xCF70}, //11654 #HANGUL SYLLABLE KHIEUKH WA
+ {0xC4E3, 0xCF71}, //11655 #HANGUL SYLLABLE KHIEUKH WA KIYEOK
+ {0xC4E4, 0xCF74}, //11656 #HANGUL SYLLABLE KHIEUKH WA NIEUN
+ {0xC4E5, 0xCF78}, //11657 #HANGUL SYLLABLE KHIEUKH WA RIEUL
+ {0xC4E6, 0xCF80}, //11658 #HANGUL SYLLABLE KHIEUKH WA MIEUM
+ {0xC4E7, 0xCF85}, //11659 #HANGUL SYLLABLE KHIEUKH WA IEUNG
+ {0xC4E8, 0xCF8C}, //11660 #HANGUL SYLLABLE KHIEUKH WAE
+ {0xC4E9, 0xCFA1}, //11661 #HANGUL SYLLABLE KHIEUKH WAE IEUNG
+ {0xC4EA, 0xCFA8}, //11662 #HANGUL SYLLABLE KHIEUKH OE
+ {0xC4EB, 0xCFB0}, //11663 #HANGUL SYLLABLE KHIEUKH OE RIEUL
+ {0xC4EC, 0xCFC4}, //11664 #HANGUL SYLLABLE KHIEUKH YO
+ {0xC4ED, 0xCFE0}, //11665 #HANGUL SYLLABLE KHIEUKH U
+ {0xC4EE, 0xCFE1}, //11666 #HANGUL SYLLABLE KHIEUKH U KIYEOK
+ {0xC4EF, 0xCFE4}, //11667 #HANGUL SYLLABLE KHIEUKH U NIEUN
+ {0xC4F0, 0xCFE8}, //11668 #HANGUL SYLLABLE KHIEUKH U RIEUL
+ {0xC4F1, 0xCFF0}, //11669 #HANGUL SYLLABLE KHIEUKH U MIEUM
+ {0xC4F2, 0xCFF1}, //11670 #HANGUL SYLLABLE KHIEUKH U PIEUP
+ {0xC4F3, 0xCFF3}, //11671 #HANGUL SYLLABLE KHIEUKH U SIOS
+ {0xC4F4, 0xCFF5}, //11672 #HANGUL SYLLABLE KHIEUKH U IEUNG
+ {0xC4F5, 0xCFFC}, //11673 #HANGUL SYLLABLE KHIEUKH WEO
+ {0xC4F6, 0xD000}, //11674 #HANGUL SYLLABLE KHIEUKH WEO NIEUN
+ {0xC4F7, 0xD004}, //11675 #HANGUL SYLLABLE KHIEUKH WEO RIEUL
+ {0xC4F8, 0xD011}, //11676 #HANGUL SYLLABLE KHIEUKH WEO IEUNG
+ {0xC4F9, 0xD018}, //11677 #HANGUL SYLLABLE KHIEUKH WE
+ {0xC4FA, 0xD02D}, //11678 #HANGUL SYLLABLE KHIEUKH WE IEUNG
+ {0xC4FB, 0xD034}, //11679 #HANGUL SYLLABLE KHIEUKH WI
+ {0xC4FC, 0xD035}, //11680 #HANGUL SYLLABLE KHIEUKH WI KIYEOK
+ {0xC4FD, 0xD038}, //11681 #HANGUL SYLLABLE KHIEUKH WI NIEUN
+ {0xC4FE, 0xD03C}, //11682 #HANGUL SYLLABLE KHIEUKH WI RIEUL
+ {0xC541, 0xD715}, //11683 #HANGUL SYLLABLE HIEUH WE THIEUTH
+ {0xC542, 0xD716}, //11684 #HANGUL SYLLABLE HIEUH WE PHIEUPH
+ {0xC543, 0xD717}, //11685 #HANGUL SYLLABLE HIEUH WE HIEUH
+ {0xC544, 0xD71A}, //11686 #HANGUL SYLLABLE HIEUH WI SSANGKIYEOK
+ {0xC545, 0xD71B}, //11687 #HANGUL SYLLABLE HIEUH WI KIYEOKSIOS
+ {0xC546, 0xD71D}, //11688 #HANGUL SYLLABLE HIEUH WI NIEUNCIEUC
+ {0xC547, 0xD71E}, //11689 #HANGUL SYLLABLE HIEUH WI NIEUNHIEUH
+ {0xC548, 0xD71F}, //11690 #HANGUL SYLLABLE HIEUH WI TIKEUT
+ {0xC549, 0xD721}, //11691 #HANGUL SYLLABLE HIEUH WI RIEULKIYEOK
+ {0xC54A, 0xD722}, //11692 #HANGUL SYLLABLE HIEUH WI RIEULMIEUM
+ {0xC54B, 0xD723}, //11693 #HANGUL SYLLABLE HIEUH WI RIEULPIEUP
+ {0xC54C, 0xD724}, //11694 #HANGUL SYLLABLE HIEUH WI RIEULSIOS
+ {0xC54D, 0xD725}, //11695 #HANGUL SYLLABLE HIEUH WI RIEULTHIEUTH
+ {0xC54E, 0xD726}, //11696 #HANGUL SYLLABLE HIEUH WI RIEULPHIEUPH
+ {0xC54F, 0xD727}, //11697 #HANGUL SYLLABLE HIEUH WI RIEULHIEUH
+ {0xC550, 0xD72A}, //11698 #HANGUL SYLLABLE HIEUH WI PIEUPSIOS
+ {0xC551, 0xD72C}, //11699 #HANGUL SYLLABLE HIEUH WI SSANGSIOS
+ {0xC552, 0xD72E}, //11700 #HANGUL SYLLABLE HIEUH WI CIEUC
+ {0xC553, 0xD72F}, //11701 #HANGUL SYLLABLE HIEUH WI CHIEUCH
+ {0xC554, 0xD730}, //11702 #HANGUL SYLLABLE HIEUH WI KHIEUKH
+ {0xC555, 0xD731}, //11703 #HANGUL SYLLABLE HIEUH WI THIEUTH
+ {0xC556, 0xD732}, //11704 #HANGUL SYLLABLE HIEUH WI PHIEUPH
+ {0xC557, 0xD733}, //11705 #HANGUL SYLLABLE HIEUH WI HIEUH
+ {0xC558, 0xD736}, //11706 #HANGUL SYLLABLE HIEUH YU SSANGKIYEOK
+ {0xC559, 0xD737}, //11707 #HANGUL SYLLABLE HIEUH YU KIYEOKSIOS
+ {0xC55A, 0xD739}, //11708 #HANGUL SYLLABLE HIEUH YU NIEUNCIEUC
+ {0xC561, 0xD73A}, //11709 #HANGUL SYLLABLE HIEUH YU NIEUNHIEUH
+ {0xC562, 0xD73B}, //11710 #HANGUL SYLLABLE HIEUH YU TIKEUT
+ {0xC563, 0xD73D}, //11711 #HANGUL SYLLABLE HIEUH YU RIEULKIYEOK
+ {0xC564, 0xD73E}, //11712 #HANGUL SYLLABLE HIEUH YU RIEULMIEUM
+ {0xC565, 0xD73F}, //11713 #HANGUL SYLLABLE HIEUH YU RIEULPIEUP
+ {0xC566, 0xD740}, //11714 #HANGUL SYLLABLE HIEUH YU RIEULSIOS
+ {0xC567, 0xD741}, //11715 #HANGUL SYLLABLE HIEUH YU RIEULTHIEUTH
+ {0xC568, 0xD742}, //11716 #HANGUL SYLLABLE HIEUH YU RIEULPHIEUPH
+ {0xC569, 0xD743}, //11717 #HANGUL SYLLABLE HIEUH YU RIEULHIEUH
+ {0xC56A, 0xD745}, //11718 #HANGUL SYLLABLE HIEUH YU PIEUP
+ {0xC56B, 0xD746}, //11719 #HANGUL SYLLABLE HIEUH YU PIEUPSIOS
+ {0xC56C, 0xD748}, //11720 #HANGUL SYLLABLE HIEUH YU SSANGSIOS
+ {0xC56D, 0xD74A}, //11721 #HANGUL SYLLABLE HIEUH YU CIEUC
+ {0xC56E, 0xD74B}, //11722 #HANGUL SYLLABLE HIEUH YU CHIEUCH
+ {0xC56F, 0xD74C}, //11723 #HANGUL SYLLABLE HIEUH YU KHIEUKH
+ {0xC570, 0xD74D}, //11724 #HANGUL SYLLABLE HIEUH YU THIEUTH
+ {0xC571, 0xD74E}, //11725 #HANGUL SYLLABLE HIEUH YU PHIEUPH
+ {0xC572, 0xD74F}, //11726 #HANGUL SYLLABLE HIEUH YU HIEUH
+ {0xC573, 0xD752}, //11727 #HANGUL SYLLABLE HIEUH EU SSANGKIYEOK
+ {0xC574, 0xD753}, //11728 #HANGUL SYLLABLE HIEUH EU KIYEOKSIOS
+ {0xC575, 0xD755}, //11729 #HANGUL SYLLABLE HIEUH EU NIEUNCIEUC
+ {0xC576, 0xD75A}, //11730 #HANGUL SYLLABLE HIEUH EU RIEULMIEUM
+ {0xC577, 0xD75B}, //11731 #HANGUL SYLLABLE HIEUH EU RIEULPIEUP
+ {0xC578, 0xD75C}, //11732 #HANGUL SYLLABLE HIEUH EU RIEULSIOS
+ {0xC579, 0xD75D}, //11733 #HANGUL SYLLABLE HIEUH EU RIEULTHIEUTH
+ {0xC57A, 0xD75E}, //11734 #HANGUL SYLLABLE HIEUH EU RIEULPHIEUPH
+ {0xC581, 0xD75F}, //11735 #HANGUL SYLLABLE HIEUH EU RIEULHIEUH
+ {0xC582, 0xD762}, //11736 #HANGUL SYLLABLE HIEUH EU PIEUPSIOS
+ {0xC583, 0xD764}, //11737 #HANGUL SYLLABLE HIEUH EU SSANGSIOS
+ {0xC584, 0xD766}, //11738 #HANGUL SYLLABLE HIEUH EU CIEUC
+ {0xC585, 0xD767}, //11739 #HANGUL SYLLABLE HIEUH EU CHIEUCH
+ {0xC586, 0xD768}, //11740 #HANGUL SYLLABLE HIEUH EU KHIEUKH
+ {0xC587, 0xD76A}, //11741 #HANGUL SYLLABLE HIEUH EU PHIEUPH
+ {0xC588, 0xD76B}, //11742 #HANGUL SYLLABLE HIEUH EU HIEUH
+ {0xC589, 0xD76D}, //11743 #HANGUL SYLLABLE HIEUH YI KIYEOK
+ {0xC58A, 0xD76E}, //11744 #HANGUL SYLLABLE HIEUH YI SSANGKIYEOK
+ {0xC58B, 0xD76F}, //11745 #HANGUL SYLLABLE HIEUH YI KIYEOKSIOS
+ {0xC58C, 0xD771}, //11746 #HANGUL SYLLABLE HIEUH YI NIEUNCIEUC
+ {0xC58D, 0xD772}, //11747 #HANGUL SYLLABLE HIEUH YI NIEUNHIEUH
+ {0xC58E, 0xD773}, //11748 #HANGUL SYLLABLE HIEUH YI TIKEUT
+ {0xC58F, 0xD775}, //11749 #HANGUL SYLLABLE HIEUH YI RIEULKIYEOK
+ {0xC590, 0xD776}, //11750 #HANGUL SYLLABLE HIEUH YI RIEULMIEUM
+ {0xC591, 0xD777}, //11751 #HANGUL SYLLABLE HIEUH YI RIEULPIEUP
+ {0xC592, 0xD778}, //11752 #HANGUL SYLLABLE HIEUH YI RIEULSIOS
+ {0xC593, 0xD779}, //11753 #HANGUL SYLLABLE HIEUH YI RIEULTHIEUTH
+ {0xC594, 0xD77A}, //11754 #HANGUL SYLLABLE HIEUH YI RIEULPHIEUPH
+ {0xC595, 0xD77B}, //11755 #HANGUL SYLLABLE HIEUH YI RIEULHIEUH
+ {0xC596, 0xD77E}, //11756 #HANGUL SYLLABLE HIEUH YI PIEUPSIOS
+ {0xC597, 0xD77F}, //11757 #HANGUL SYLLABLE HIEUH YI SIOS
+ {0xC598, 0xD780}, //11758 #HANGUL SYLLABLE HIEUH YI SSANGSIOS
+ {0xC599, 0xD782}, //11759 #HANGUL SYLLABLE HIEUH YI CIEUC
+ {0xC59A, 0xD783}, //11760 #HANGUL SYLLABLE HIEUH YI CHIEUCH
+ {0xC59B, 0xD784}, //11761 #HANGUL SYLLABLE HIEUH YI KHIEUKH
+ {0xC59C, 0xD785}, //11762 #HANGUL SYLLABLE HIEUH YI THIEUTH
+ {0xC59D, 0xD786}, //11763 #HANGUL SYLLABLE HIEUH YI PHIEUPH
+ {0xC59E, 0xD787}, //11764 #HANGUL SYLLABLE HIEUH YI HIEUH
+ {0xC59F, 0xD78A}, //11765 #HANGUL SYLLABLE HIEUH I SSANGKIYEOK
+ {0xC5A0, 0xD78B}, //11766 #HANGUL SYLLABLE HIEUH I KIYEOKSIOS
+ {0xC5A1, 0xD044}, //11767 #HANGUL SYLLABLE KHIEUKH WI MIEUM
+ {0xC5A2, 0xD045}, //11768 #HANGUL SYLLABLE KHIEUKH WI PIEUP
+ {0xC5A3, 0xD047}, //11769 #HANGUL SYLLABLE KHIEUKH WI SIOS
+ {0xC5A4, 0xD049}, //11770 #HANGUL SYLLABLE KHIEUKH WI IEUNG
+ {0xC5A5, 0xD050}, //11771 #HANGUL SYLLABLE KHIEUKH YU
+ {0xC5A6, 0xD054}, //11772 #HANGUL SYLLABLE KHIEUKH YU NIEUN
+ {0xC5A7, 0xD058}, //11773 #HANGUL SYLLABLE KHIEUKH YU RIEUL
+ {0xC5A8, 0xD060}, //11774 #HANGUL SYLLABLE KHIEUKH YU MIEUM
+ {0xC5A9, 0xD06C}, //11775 #HANGUL SYLLABLE KHIEUKH EU
+ {0xC5AA, 0xD06D}, //11776 #HANGUL SYLLABLE KHIEUKH EU KIYEOK
+ {0xC5AB, 0xD070}, //11777 #HANGUL SYLLABLE KHIEUKH EU NIEUN
+ {0xC5AC, 0xD074}, //11778 #HANGUL SYLLABLE KHIEUKH EU RIEUL
+ {0xC5AD, 0xD07C}, //11779 #HANGUL SYLLABLE KHIEUKH EU MIEUM
+ {0xC5AE, 0xD07D}, //11780 #HANGUL SYLLABLE KHIEUKH EU PIEUP
+ {0xC5AF, 0xD081}, //11781 #HANGUL SYLLABLE KHIEUKH EU IEUNG
+ {0xC5B0, 0xD0A4}, //11782 #HANGUL SYLLABLE KHIEUKH I
+ {0xC5B1, 0xD0A5}, //11783 #HANGUL SYLLABLE KHIEUKH I KIYEOK
+ {0xC5B2, 0xD0A8}, //11784 #HANGUL SYLLABLE KHIEUKH I NIEUN
+ {0xC5B3, 0xD0AC}, //11785 #HANGUL SYLLABLE KHIEUKH I RIEUL
+ {0xC5B4, 0xD0B4}, //11786 #HANGUL SYLLABLE KHIEUKH I MIEUM
+ {0xC5B5, 0xD0B5}, //11787 #HANGUL SYLLABLE KHIEUKH I PIEUP
+ {0xC5B6, 0xD0B7}, //11788 #HANGUL SYLLABLE KHIEUKH I SIOS
+ {0xC5B7, 0xD0B9}, //11789 #HANGUL SYLLABLE KHIEUKH I IEUNG
+ {0xC5B8, 0xD0C0}, //11790 #HANGUL SYLLABLE THIEUTH A
+ {0xC5B9, 0xD0C1}, //11791 #HANGUL SYLLABLE THIEUTH A KIYEOK
+ {0xC5BA, 0xD0C4}, //11792 #HANGUL SYLLABLE THIEUTH A NIEUN
+ {0xC5BB, 0xD0C8}, //11793 #HANGUL SYLLABLE THIEUTH A RIEUL
+ {0xC5BC, 0xD0C9}, //11794 #HANGUL SYLLABLE THIEUTH A RIEULKIYEOK
+ {0xC5BD, 0xD0D0}, //11795 #HANGUL SYLLABLE THIEUTH A MIEUM
+ {0xC5BE, 0xD0D1}, //11796 #HANGUL SYLLABLE THIEUTH A PIEUP
+ {0xC5BF, 0xD0D3}, //11797 #HANGUL SYLLABLE THIEUTH A SIOS
+ {0xC5C0, 0xD0D4}, //11798 #HANGUL SYLLABLE THIEUTH A SSANGSIOS
+ {0xC5C1, 0xD0D5}, //11799 #HANGUL SYLLABLE THIEUTH A IEUNG
+ {0xC5C2, 0xD0DC}, //11800 #HANGUL SYLLABLE THIEUTH AE
+ {0xC5C3, 0xD0DD}, //11801 #HANGUL SYLLABLE THIEUTH AE KIYEOK
+ {0xC5C4, 0xD0E0}, //11802 #HANGUL SYLLABLE THIEUTH AE NIEUN
+ {0xC5C5, 0xD0E4}, //11803 #HANGUL SYLLABLE THIEUTH AE RIEUL
+ {0xC5C6, 0xD0EC}, //11804 #HANGUL SYLLABLE THIEUTH AE MIEUM
+ {0xC5C7, 0xD0ED}, //11805 #HANGUL SYLLABLE THIEUTH AE PIEUP
+ {0xC5C8, 0xD0EF}, //11806 #HANGUL SYLLABLE THIEUTH AE SIOS
+ {0xC5C9, 0xD0F0}, //11807 #HANGUL SYLLABLE THIEUTH AE SSANGSIOS
+ {0xC5CA, 0xD0F1}, //11808 #HANGUL SYLLABLE THIEUTH AE IEUNG
+ {0xC5CB, 0xD0F8}, //11809 #HANGUL SYLLABLE THIEUTH YA
+ {0xC5CC, 0xD10D}, //11810 #HANGUL SYLLABLE THIEUTH YA IEUNG
+ {0xC5CD, 0xD130}, //11811 #HANGUL SYLLABLE THIEUTH EO
+ {0xC5CE, 0xD131}, //11812 #HANGUL SYLLABLE THIEUTH EO KIYEOK
+ {0xC5CF, 0xD134}, //11813 #HANGUL SYLLABLE THIEUTH EO NIEUN
+ {0xC5D0, 0xD138}, //11814 #HANGUL SYLLABLE THIEUTH EO RIEUL
+ {0xC5D1, 0xD13A}, //11815 #HANGUL SYLLABLE THIEUTH EO RIEULMIEUM
+ {0xC5D2, 0xD140}, //11816 #HANGUL SYLLABLE THIEUTH EO MIEUM
+ {0xC5D3, 0xD141}, //11817 #HANGUL SYLLABLE THIEUTH EO PIEUP
+ {0xC5D4, 0xD143}, //11818 #HANGUL SYLLABLE THIEUTH EO SIOS
+ {0xC5D5, 0xD144}, //11819 #HANGUL SYLLABLE THIEUTH EO SSANGSIOS
+ {0xC5D6, 0xD145}, //11820 #HANGUL SYLLABLE THIEUTH EO IEUNG
+ {0xC5D7, 0xD14C}, //11821 #HANGUL SYLLABLE THIEUTH E
+ {0xC5D8, 0xD14D}, //11822 #HANGUL SYLLABLE THIEUTH E KIYEOK
+ {0xC5D9, 0xD150}, //11823 #HANGUL SYLLABLE THIEUTH E NIEUN
+ {0xC5DA, 0xD154}, //11824 #HANGUL SYLLABLE THIEUTH E RIEUL
+ {0xC5DB, 0xD15C}, //11825 #HANGUL SYLLABLE THIEUTH E MIEUM
+ {0xC5DC, 0xD15D}, //11826 #HANGUL SYLLABLE THIEUTH E PIEUP
+ {0xC5DD, 0xD15F}, //11827 #HANGUL SYLLABLE THIEUTH E SIOS
+ {0xC5DE, 0xD161}, //11828 #HANGUL SYLLABLE THIEUTH E IEUNG
+ {0xC5DF, 0xD168}, //11829 #HANGUL SYLLABLE THIEUTH YEO
+ {0xC5E0, 0xD16C}, //11830 #HANGUL SYLLABLE THIEUTH YEO NIEUN
+ {0xC5E1, 0xD17C}, //11831 #HANGUL SYLLABLE THIEUTH YEO SSANGSIOS
+ {0xC5E2, 0xD184}, //11832 #HANGUL SYLLABLE THIEUTH YE
+ {0xC5E3, 0xD188}, //11833 #HANGUL SYLLABLE THIEUTH YE NIEUN
+ {0xC5E4, 0xD1A0}, //11834 #HANGUL SYLLABLE THIEUTH O
+ {0xC5E5, 0xD1A1}, //11835 #HANGUL SYLLABLE THIEUTH O KIYEOK
+ {0xC5E6, 0xD1A4}, //11836 #HANGUL SYLLABLE THIEUTH O NIEUN
+ {0xC5E7, 0xD1A8}, //11837 #HANGUL SYLLABLE THIEUTH O RIEUL
+ {0xC5E8, 0xD1B0}, //11838 #HANGUL SYLLABLE THIEUTH O MIEUM
+ {0xC5E9, 0xD1B1}, //11839 #HANGUL SYLLABLE THIEUTH O PIEUP
+ {0xC5EA, 0xD1B3}, //11840 #HANGUL SYLLABLE THIEUTH O SIOS
+ {0xC5EB, 0xD1B5}, //11841 #HANGUL SYLLABLE THIEUTH O IEUNG
+ {0xC5EC, 0xD1BA}, //11842 #HANGUL SYLLABLE THIEUTH O PHIEUPH
+ {0xC5ED, 0xD1BC}, //11843 #HANGUL SYLLABLE THIEUTH WA
+ {0xC5EE, 0xD1C0}, //11844 #HANGUL SYLLABLE THIEUTH WA NIEUN
+ {0xC5EF, 0xD1D8}, //11845 #HANGUL SYLLABLE THIEUTH WAE
+ {0xC5F0, 0xD1F4}, //11846 #HANGUL SYLLABLE THIEUTH OE
+ {0xC5F1, 0xD1F8}, //11847 #HANGUL SYLLABLE THIEUTH OE NIEUN
+ {0xC5F2, 0xD207}, //11848 #HANGUL SYLLABLE THIEUTH OE SIOS
+ {0xC5F3, 0xD209}, //11849 #HANGUL SYLLABLE THIEUTH OE IEUNG
+ {0xC5F4, 0xD210}, //11850 #HANGUL SYLLABLE THIEUTH YO
+ {0xC5F5, 0xD22C}, //11851 #HANGUL SYLLABLE THIEUTH U
+ {0xC5F6, 0xD22D}, //11852 #HANGUL SYLLABLE THIEUTH U KIYEOK
+ {0xC5F7, 0xD230}, //11853 #HANGUL SYLLABLE THIEUTH U NIEUN
+ {0xC5F8, 0xD234}, //11854 #HANGUL SYLLABLE THIEUTH U RIEUL
+ {0xC5F9, 0xD23C}, //11855 #HANGUL SYLLABLE THIEUTH U MIEUM
+ {0xC5FA, 0xD23D}, //11856 #HANGUL SYLLABLE THIEUTH U PIEUP
+ {0xC5FB, 0xD23F}, //11857 #HANGUL SYLLABLE THIEUTH U SIOS
+ {0xC5FC, 0xD241}, //11858 #HANGUL SYLLABLE THIEUTH U IEUNG
+ {0xC5FD, 0xD248}, //11859 #HANGUL SYLLABLE THIEUTH WEO
+ {0xC5FE, 0xD25C}, //11860 #HANGUL SYLLABLE THIEUTH WEO SSANGSIOS
+ {0xC641, 0xD78D}, //11861 #HANGUL SYLLABLE HIEUH I NIEUNCIEUC
+ {0xC642, 0xD78E}, //11862 #HANGUL SYLLABLE HIEUH I NIEUNHIEUH
+ {0xC643, 0xD78F}, //11863 #HANGUL SYLLABLE HIEUH I TIKEUT
+ {0xC644, 0xD791}, //11864 #HANGUL SYLLABLE HIEUH I RIEULKIYEOK
+ {0xC645, 0xD792}, //11865 #HANGUL SYLLABLE HIEUH I RIEULMIEUM
+ {0xC646, 0xD793}, //11866 #HANGUL SYLLABLE HIEUH I RIEULPIEUP
+ {0xC647, 0xD794}, //11867 #HANGUL SYLLABLE HIEUH I RIEULSIOS
+ {0xC648, 0xD795}, //11868 #HANGUL SYLLABLE HIEUH I RIEULTHIEUTH
+ {0xC649, 0xD796}, //11869 #HANGUL SYLLABLE HIEUH I RIEULPHIEUPH
+ {0xC64A, 0xD797}, //11870 #HANGUL SYLLABLE HIEUH I RIEULHIEUH
+ {0xC64B, 0xD79A}, //11871 #HANGUL SYLLABLE HIEUH I PIEUPSIOS
+ {0xC64C, 0xD79C}, //11872 #HANGUL SYLLABLE HIEUH I SSANGSIOS
+ {0xC64D, 0xD79E}, //11873 #HANGUL SYLLABLE HIEUH I CIEUC
+ {0xC64E, 0xD79F}, //11874 #HANGUL SYLLABLE HIEUH I CHIEUCH
+ {0xC64F, 0xD7A0}, //11875 #HANGUL SYLLABLE HIEUH I KHIEUKH
+ {0xC650, 0xD7A1}, //11876 #HANGUL SYLLABLE HIEUH I THIEUTH
+ {0xC651, 0xD7A2}, //11877 #HANGUL SYLLABLE HIEUH I PHIEUPH
+ {0xC652, 0xD7A3}, //11878 #HANGUL SYLLABLE HIEUH I HIEUH
+ {0xC6A1, 0xD264}, //11879 #HANGUL SYLLABLE THIEUTH WE
+ {0xC6A2, 0xD280}, //11880 #HANGUL SYLLABLE THIEUTH WI
+ {0xC6A3, 0xD281}, //11881 #HANGUL SYLLABLE THIEUTH WI KIYEOK
+ {0xC6A4, 0xD284}, //11882 #HANGUL SYLLABLE THIEUTH WI NIEUN
+ {0xC6A5, 0xD288}, //11883 #HANGUL SYLLABLE THIEUTH WI RIEUL
+ {0xC6A6, 0xD290}, //11884 #HANGUL SYLLABLE THIEUTH WI MIEUM
+ {0xC6A7, 0xD291}, //11885 #HANGUL SYLLABLE THIEUTH WI PIEUP
+ {0xC6A8, 0xD295}, //11886 #HANGUL SYLLABLE THIEUTH WI IEUNG
+ {0xC6A9, 0xD29C}, //11887 #HANGUL SYLLABLE THIEUTH YU
+ {0xC6AA, 0xD2A0}, //11888 #HANGUL SYLLABLE THIEUTH YU NIEUN
+ {0xC6AB, 0xD2A4}, //11889 #HANGUL SYLLABLE THIEUTH YU RIEUL
+ {0xC6AC, 0xD2AC}, //11890 #HANGUL SYLLABLE THIEUTH YU MIEUM
+ {0xC6AD, 0xD2B1}, //11891 #HANGUL SYLLABLE THIEUTH YU IEUNG
+ {0xC6AE, 0xD2B8}, //11892 #HANGUL SYLLABLE THIEUTH EU
+ {0xC6AF, 0xD2B9}, //11893 #HANGUL SYLLABLE THIEUTH EU KIYEOK
+ {0xC6B0, 0xD2BC}, //11894 #HANGUL SYLLABLE THIEUTH EU NIEUN
+ {0xC6B1, 0xD2BF}, //11895 #HANGUL SYLLABLE THIEUTH EU TIKEUT
+ {0xC6B2, 0xD2C0}, //11896 #HANGUL SYLLABLE THIEUTH EU RIEUL
+ {0xC6B3, 0xD2C2}, //11897 #HANGUL SYLLABLE THIEUTH EU RIEULMIEUM
+ {0xC6B4, 0xD2C8}, //11898 #HANGUL SYLLABLE THIEUTH EU MIEUM
+ {0xC6B5, 0xD2C9}, //11899 #HANGUL SYLLABLE THIEUTH EU PIEUP
+ {0xC6B6, 0xD2CB}, //11900 #HANGUL SYLLABLE THIEUTH EU SIOS
+ {0xC6B7, 0xD2D4}, //11901 #HANGUL SYLLABLE THIEUTH YI
+ {0xC6B8, 0xD2D8}, //11902 #HANGUL SYLLABLE THIEUTH YI NIEUN
+ {0xC6B9, 0xD2DC}, //11903 #HANGUL SYLLABLE THIEUTH YI RIEUL
+ {0xC6BA, 0xD2E4}, //11904 #HANGUL SYLLABLE THIEUTH YI MIEUM
+ {0xC6BB, 0xD2E5}, //11905 #HANGUL SYLLABLE THIEUTH YI PIEUP
+ {0xC6BC, 0xD2F0}, //11906 #HANGUL SYLLABLE THIEUTH I
+ {0xC6BD, 0xD2F1}, //11907 #HANGUL SYLLABLE THIEUTH I KIYEOK
+ {0xC6BE, 0xD2F4}, //11908 #HANGUL SYLLABLE THIEUTH I NIEUN
+ {0xC6BF, 0xD2F8}, //11909 #HANGUL SYLLABLE THIEUTH I RIEUL
+ {0xC6C0, 0xD300}, //11910 #HANGUL SYLLABLE THIEUTH I MIEUM
+ {0xC6C1, 0xD301}, //11911 #HANGUL SYLLABLE THIEUTH I PIEUP
+ {0xC6C2, 0xD303}, //11912 #HANGUL SYLLABLE THIEUTH I SIOS
+ {0xC6C3, 0xD305}, //11913 #HANGUL SYLLABLE THIEUTH I IEUNG
+ {0xC6C4, 0xD30C}, //11914 #HANGUL SYLLABLE PHIEUPH A
+ {0xC6C5, 0xD30D}, //11915 #HANGUL SYLLABLE PHIEUPH A KIYEOK
+ {0xC6C6, 0xD30E}, //11916 #HANGUL SYLLABLE PHIEUPH A SSANGKIYEOK
+ {0xC6C7, 0xD310}, //11917 #HANGUL SYLLABLE PHIEUPH A NIEUN
+ {0xC6C8, 0xD314}, //11918 #HANGUL SYLLABLE PHIEUPH A RIEUL
+ {0xC6C9, 0xD316}, //11919 #HANGUL SYLLABLE PHIEUPH A RIEULMIEUM
+ {0xC6CA, 0xD31C}, //11920 #HANGUL SYLLABLE PHIEUPH A MIEUM
+ {0xC6CB, 0xD31D}, //11921 #HANGUL SYLLABLE PHIEUPH A PIEUP
+ {0xC6CC, 0xD31F}, //11922 #HANGUL SYLLABLE PHIEUPH A SIOS
+ {0xC6CD, 0xD320}, //11923 #HANGUL SYLLABLE PHIEUPH A SSANGSIOS
+ {0xC6CE, 0xD321}, //11924 #HANGUL SYLLABLE PHIEUPH A IEUNG
+ {0xC6CF, 0xD325}, //11925 #HANGUL SYLLABLE PHIEUPH A THIEUTH
+ {0xC6D0, 0xD328}, //11926 #HANGUL SYLLABLE PHIEUPH AE
+ {0xC6D1, 0xD329}, //11927 #HANGUL SYLLABLE PHIEUPH AE KIYEOK
+ {0xC6D2, 0xD32C}, //11928 #HANGUL SYLLABLE PHIEUPH AE NIEUN
+ {0xC6D3, 0xD330}, //11929 #HANGUL SYLLABLE PHIEUPH AE RIEUL
+ {0xC6D4, 0xD338}, //11930 #HANGUL SYLLABLE PHIEUPH AE MIEUM
+ {0xC6D5, 0xD339}, //11931 #HANGUL SYLLABLE PHIEUPH AE PIEUP
+ {0xC6D6, 0xD33B}, //11932 #HANGUL SYLLABLE PHIEUPH AE SIOS
+ {0xC6D7, 0xD33C}, //11933 #HANGUL SYLLABLE PHIEUPH AE SSANGSIOS
+ {0xC6D8, 0xD33D}, //11934 #HANGUL SYLLABLE PHIEUPH AE IEUNG
+ {0xC6D9, 0xD344}, //11935 #HANGUL SYLLABLE PHIEUPH YA
+ {0xC6DA, 0xD345}, //11936 #HANGUL SYLLABLE PHIEUPH YA KIYEOK
+ {0xC6DB, 0xD37C}, //11937 #HANGUL SYLLABLE PHIEUPH EO
+ {0xC6DC, 0xD37D}, //11938 #HANGUL SYLLABLE PHIEUPH EO KIYEOK
+ {0xC6DD, 0xD380}, //11939 #HANGUL SYLLABLE PHIEUPH EO NIEUN
+ {0xC6DE, 0xD384}, //11940 #HANGUL SYLLABLE PHIEUPH EO RIEUL
+ {0xC6DF, 0xD38C}, //11941 #HANGUL SYLLABLE PHIEUPH EO MIEUM
+ {0xC6E0, 0xD38D}, //11942 #HANGUL SYLLABLE PHIEUPH EO PIEUP
+ {0xC6E1, 0xD38F}, //11943 #HANGUL SYLLABLE PHIEUPH EO SIOS
+ {0xC6E2, 0xD390}, //11944 #HANGUL SYLLABLE PHIEUPH EO SSANGSIOS
+ {0xC6E3, 0xD391}, //11945 #HANGUL SYLLABLE PHIEUPH EO IEUNG
+ {0xC6E4, 0xD398}, //11946 #HANGUL SYLLABLE PHIEUPH E
+ {0xC6E5, 0xD399}, //11947 #HANGUL SYLLABLE PHIEUPH E KIYEOK
+ {0xC6E6, 0xD39C}, //11948 #HANGUL SYLLABLE PHIEUPH E NIEUN
+ {0xC6E7, 0xD3A0}, //11949 #HANGUL SYLLABLE PHIEUPH E RIEUL
+ {0xC6E8, 0xD3A8}, //11950 #HANGUL SYLLABLE PHIEUPH E MIEUM
+ {0xC6E9, 0xD3A9}, //11951 #HANGUL SYLLABLE PHIEUPH E PIEUP
+ {0xC6EA, 0xD3AB}, //11952 #HANGUL SYLLABLE PHIEUPH E SIOS
+ {0xC6EB, 0xD3AD}, //11953 #HANGUL SYLLABLE PHIEUPH E IEUNG
+ {0xC6EC, 0xD3B4}, //11954 #HANGUL SYLLABLE PHIEUPH YEO
+ {0xC6ED, 0xD3B8}, //11955 #HANGUL SYLLABLE PHIEUPH YEO NIEUN
+ {0xC6EE, 0xD3BC}, //11956 #HANGUL SYLLABLE PHIEUPH YEO RIEUL
+ {0xC6EF, 0xD3C4}, //11957 #HANGUL SYLLABLE PHIEUPH YEO MIEUM
+ {0xC6F0, 0xD3C5}, //11958 #HANGUL SYLLABLE PHIEUPH YEO PIEUP
+ {0xC6F1, 0xD3C8}, //11959 #HANGUL SYLLABLE PHIEUPH YEO SSANGSIOS
+ {0xC6F2, 0xD3C9}, //11960 #HANGUL SYLLABLE PHIEUPH YEO IEUNG
+ {0xC6F3, 0xD3D0}, //11961 #HANGUL SYLLABLE PHIEUPH YE
+ {0xC6F4, 0xD3D8}, //11962 #HANGUL SYLLABLE PHIEUPH YE RIEUL
+ {0xC6F5, 0xD3E1}, //11963 #HANGUL SYLLABLE PHIEUPH YE PIEUP
+ {0xC6F6, 0xD3E3}, //11964 #HANGUL SYLLABLE PHIEUPH YE SIOS
+ {0xC6F7, 0xD3EC}, //11965 #HANGUL SYLLABLE PHIEUPH O
+ {0xC6F8, 0xD3ED}, //11966 #HANGUL SYLLABLE PHIEUPH O KIYEOK
+ {0xC6F9, 0xD3F0}, //11967 #HANGUL SYLLABLE PHIEUPH O NIEUN
+ {0xC6FA, 0xD3F4}, //11968 #HANGUL SYLLABLE PHIEUPH O RIEUL
+ {0xC6FB, 0xD3FC}, //11969 #HANGUL SYLLABLE PHIEUPH O MIEUM
+ {0xC6FC, 0xD3FD}, //11970 #HANGUL SYLLABLE PHIEUPH O PIEUP
+ {0xC6FD, 0xD3FF}, //11971 #HANGUL SYLLABLE PHIEUPH O SIOS
+ {0xC6FE, 0xD401}, //11972 #HANGUL SYLLABLE PHIEUPH O IEUNG
+ {0xC7A1, 0xD408}, //11973 #HANGUL SYLLABLE PHIEUPH WA
+ {0xC7A2, 0xD41D}, //11974 #HANGUL SYLLABLE PHIEUPH WA IEUNG
+ {0xC7A3, 0xD440}, //11975 #HANGUL SYLLABLE PHIEUPH OE
+ {0xC7A4, 0xD444}, //11976 #HANGUL SYLLABLE PHIEUPH OE NIEUN
+ {0xC7A5, 0xD45C}, //11977 #HANGUL SYLLABLE PHIEUPH YO
+ {0xC7A6, 0xD460}, //11978 #HANGUL SYLLABLE PHIEUPH YO NIEUN
+ {0xC7A7, 0xD464}, //11979 #HANGUL SYLLABLE PHIEUPH YO RIEUL
+ {0xC7A8, 0xD46D}, //11980 #HANGUL SYLLABLE PHIEUPH YO PIEUP
+ {0xC7A9, 0xD46F}, //11981 #HANGUL SYLLABLE PHIEUPH YO SIOS
+ {0xC7AA, 0xD478}, //11982 #HANGUL SYLLABLE PHIEUPH U
+ {0xC7AB, 0xD479}, //11983 #HANGUL SYLLABLE PHIEUPH U KIYEOK
+ {0xC7AC, 0xD47C}, //11984 #HANGUL SYLLABLE PHIEUPH U NIEUN
+ {0xC7AD, 0xD47F}, //11985 #HANGUL SYLLABLE PHIEUPH U TIKEUT
+ {0xC7AE, 0xD480}, //11986 #HANGUL SYLLABLE PHIEUPH U RIEUL
+ {0xC7AF, 0xD482}, //11987 #HANGUL SYLLABLE PHIEUPH U RIEULMIEUM
+ {0xC7B0, 0xD488}, //11988 #HANGUL SYLLABLE PHIEUPH U MIEUM
+ {0xC7B1, 0xD489}, //11989 #HANGUL SYLLABLE PHIEUPH U PIEUP
+ {0xC7B2, 0xD48B}, //11990 #HANGUL SYLLABLE PHIEUPH U SIOS
+ {0xC7B3, 0xD48D}, //11991 #HANGUL SYLLABLE PHIEUPH U IEUNG
+ {0xC7B4, 0xD494}, //11992 #HANGUL SYLLABLE PHIEUPH WEO
+ {0xC7B5, 0xD4A9}, //11993 #HANGUL SYLLABLE PHIEUPH WEO IEUNG
+ {0xC7B6, 0xD4CC}, //11994 #HANGUL SYLLABLE PHIEUPH WI
+ {0xC7B7, 0xD4D0}, //11995 #HANGUL SYLLABLE PHIEUPH WI NIEUN
+ {0xC7B8, 0xD4D4}, //11996 #HANGUL SYLLABLE PHIEUPH WI RIEUL
+ {0xC7B9, 0xD4DC}, //11997 #HANGUL SYLLABLE PHIEUPH WI MIEUM
+ {0xC7BA, 0xD4DF}, //11998 #HANGUL SYLLABLE PHIEUPH WI SIOS
+ {0xC7BB, 0xD4E8}, //11999 #HANGUL SYLLABLE PHIEUPH YU
+ {0xC7BC, 0xD4EC}, //12000 #HANGUL SYLLABLE PHIEUPH YU NIEUN
+ {0xC7BD, 0xD4F0}, //12001 #HANGUL SYLLABLE PHIEUPH YU RIEUL
+ {0xC7BE, 0xD4F8}, //12002 #HANGUL SYLLABLE PHIEUPH YU MIEUM
+ {0xC7BF, 0xD4FB}, //12003 #HANGUL SYLLABLE PHIEUPH YU SIOS
+ {0xC7C0, 0xD4FD}, //12004 #HANGUL SYLLABLE PHIEUPH YU IEUNG
+ {0xC7C1, 0xD504}, //12005 #HANGUL SYLLABLE PHIEUPH EU
+ {0xC7C2, 0xD508}, //12006 #HANGUL SYLLABLE PHIEUPH EU NIEUN
+ {0xC7C3, 0xD50C}, //12007 #HANGUL SYLLABLE PHIEUPH EU RIEUL
+ {0xC7C4, 0xD514}, //12008 #HANGUL SYLLABLE PHIEUPH EU MIEUM
+ {0xC7C5, 0xD515}, //12009 #HANGUL SYLLABLE PHIEUPH EU PIEUP
+ {0xC7C6, 0xD517}, //12010 #HANGUL SYLLABLE PHIEUPH EU SIOS
+ {0xC7C7, 0xD53C}, //12011 #HANGUL SYLLABLE PHIEUPH I
+ {0xC7C8, 0xD53D}, //12012 #HANGUL SYLLABLE PHIEUPH I KIYEOK
+ {0xC7C9, 0xD540}, //12013 #HANGUL SYLLABLE PHIEUPH I NIEUN
+ {0xC7CA, 0xD544}, //12014 #HANGUL SYLLABLE PHIEUPH I RIEUL
+ {0xC7CB, 0xD54C}, //12015 #HANGUL SYLLABLE PHIEUPH I MIEUM
+ {0xC7CC, 0xD54D}, //12016 #HANGUL SYLLABLE PHIEUPH I PIEUP
+ {0xC7CD, 0xD54F}, //12017 #HANGUL SYLLABLE PHIEUPH I SIOS
+ {0xC7CE, 0xD551}, //12018 #HANGUL SYLLABLE PHIEUPH I IEUNG
+ {0xC7CF, 0xD558}, //12019 #HANGUL SYLLABLE HIEUH A
+ {0xC7D0, 0xD559}, //12020 #HANGUL SYLLABLE HIEUH A KIYEOK
+ {0xC7D1, 0xD55C}, //12021 #HANGUL SYLLABLE HIEUH A NIEUN
+ {0xC7D2, 0xD560}, //12022 #HANGUL SYLLABLE HIEUH A RIEUL
+ {0xC7D3, 0xD565}, //12023 #HANGUL SYLLABLE HIEUH A RIEULTHIEUTH
+ {0xC7D4, 0xD568}, //12024 #HANGUL SYLLABLE HIEUH A MIEUM
+ {0xC7D5, 0xD569}, //12025 #HANGUL SYLLABLE HIEUH A PIEUP
+ {0xC7D6, 0xD56B}, //12026 #HANGUL SYLLABLE HIEUH A SIOS
+ {0xC7D7, 0xD56D}, //12027 #HANGUL SYLLABLE HIEUH A IEUNG
+ {0xC7D8, 0xD574}, //12028 #HANGUL SYLLABLE HIEUH AE
+ {0xC7D9, 0xD575}, //12029 #HANGUL SYLLABLE HIEUH AE KIYEOK
+ {0xC7DA, 0xD578}, //12030 #HANGUL SYLLABLE HIEUH AE NIEUN
+ {0xC7DB, 0xD57C}, //12031 #HANGUL SYLLABLE HIEUH AE RIEUL
+ {0xC7DC, 0xD584}, //12032 #HANGUL SYLLABLE HIEUH AE MIEUM
+ {0xC7DD, 0xD585}, //12033 #HANGUL SYLLABLE HIEUH AE PIEUP
+ {0xC7DE, 0xD587}, //12034 #HANGUL SYLLABLE HIEUH AE SIOS
+ {0xC7DF, 0xD588}, //12035 #HANGUL SYLLABLE HIEUH AE SSANGSIOS
+ {0xC7E0, 0xD589}, //12036 #HANGUL SYLLABLE HIEUH AE IEUNG
+ {0xC7E1, 0xD590}, //12037 #HANGUL SYLLABLE HIEUH YA
+ {0xC7E2, 0xD5A5}, //12038 #HANGUL SYLLABLE HIEUH YA IEUNG
+ {0xC7E3, 0xD5C8}, //12039 #HANGUL SYLLABLE HIEUH EO
+ {0xC7E4, 0xD5C9}, //12040 #HANGUL SYLLABLE HIEUH EO KIYEOK
+ {0xC7E5, 0xD5CC}, //12041 #HANGUL SYLLABLE HIEUH EO NIEUN
+ {0xC7E6, 0xD5D0}, //12042 #HANGUL SYLLABLE HIEUH EO RIEUL
+ {0xC7E7, 0xD5D2}, //12043 #HANGUL SYLLABLE HIEUH EO RIEULMIEUM
+ {0xC7E8, 0xD5D8}, //12044 #HANGUL SYLLABLE HIEUH EO MIEUM
+ {0xC7E9, 0xD5D9}, //12045 #HANGUL SYLLABLE HIEUH EO PIEUP
+ {0xC7EA, 0xD5DB}, //12046 #HANGUL SYLLABLE HIEUH EO SIOS
+ {0xC7EB, 0xD5DD}, //12047 #HANGUL SYLLABLE HIEUH EO IEUNG
+ {0xC7EC, 0xD5E4}, //12048 #HANGUL SYLLABLE HIEUH E
+ {0xC7ED, 0xD5E5}, //12049 #HANGUL SYLLABLE HIEUH E KIYEOK
+ {0xC7EE, 0xD5E8}, //12050 #HANGUL SYLLABLE HIEUH E NIEUN
+ {0xC7EF, 0xD5EC}, //12051 #HANGUL SYLLABLE HIEUH E RIEUL
+ {0xC7F0, 0xD5F4}, //12052 #HANGUL SYLLABLE HIEUH E MIEUM
+ {0xC7F1, 0xD5F5}, //12053 #HANGUL SYLLABLE HIEUH E PIEUP
+ {0xC7F2, 0xD5F7}, //12054 #HANGUL SYLLABLE HIEUH E SIOS
+ {0xC7F3, 0xD5F9}, //12055 #HANGUL SYLLABLE HIEUH E IEUNG
+ {0xC7F4, 0xD600}, //12056 #HANGUL SYLLABLE HIEUH YEO
+ {0xC7F5, 0xD601}, //12057 #HANGUL SYLLABLE HIEUH YEO KIYEOK
+ {0xC7F6, 0xD604}, //12058 #HANGUL SYLLABLE HIEUH YEO NIEUN
+ {0xC7F7, 0xD608}, //12059 #HANGUL SYLLABLE HIEUH YEO RIEUL
+ {0xC7F8, 0xD610}, //12060 #HANGUL SYLLABLE HIEUH YEO MIEUM
+ {0xC7F9, 0xD611}, //12061 #HANGUL SYLLABLE HIEUH YEO PIEUP
+ {0xC7FA, 0xD613}, //12062 #HANGUL SYLLABLE HIEUH YEO SIOS
+ {0xC7FB, 0xD614}, //12063 #HANGUL SYLLABLE HIEUH YEO SSANGSIOS
+ {0xC7FC, 0xD615}, //12064 #HANGUL SYLLABLE HIEUH YEO IEUNG
+ {0xC7FD, 0xD61C}, //12065 #HANGUL SYLLABLE HIEUH YE
+ {0xC7FE, 0xD620}, //12066 #HANGUL SYLLABLE HIEUH YE NIEUN
+ {0xC8A1, 0xD624}, //12067 #HANGUL SYLLABLE HIEUH YE RIEUL
+ {0xC8A2, 0xD62D}, //12068 #HANGUL SYLLABLE HIEUH YE PIEUP
+ {0xC8A3, 0xD638}, //12069 #HANGUL SYLLABLE HIEUH O
+ {0xC8A4, 0xD639}, //12070 #HANGUL SYLLABLE HIEUH O KIYEOK
+ {0xC8A5, 0xD63C}, //12071 #HANGUL SYLLABLE HIEUH O NIEUN
+ {0xC8A6, 0xD640}, //12072 #HANGUL SYLLABLE HIEUH O RIEUL
+ {0xC8A7, 0xD645}, //12073 #HANGUL SYLLABLE HIEUH O RIEULTHIEUTH
+ {0xC8A8, 0xD648}, //12074 #HANGUL SYLLABLE HIEUH O MIEUM
+ {0xC8A9, 0xD649}, //12075 #HANGUL SYLLABLE HIEUH O PIEUP
+ {0xC8AA, 0xD64B}, //12076 #HANGUL SYLLABLE HIEUH O SIOS
+ {0xC8AB, 0xD64D}, //12077 #HANGUL SYLLABLE HIEUH O IEUNG
+ {0xC8AC, 0xD651}, //12078 #HANGUL SYLLABLE HIEUH O THIEUTH
+ {0xC8AD, 0xD654}, //12079 #HANGUL SYLLABLE HIEUH WA
+ {0xC8AE, 0xD655}, //12080 #HANGUL SYLLABLE HIEUH WA KIYEOK
+ {0xC8AF, 0xD658}, //12081 #HANGUL SYLLABLE HIEUH WA NIEUN
+ {0xC8B0, 0xD65C}, //12082 #HANGUL SYLLABLE HIEUH WA RIEUL
+ {0xC8B1, 0xD667}, //12083 #HANGUL SYLLABLE HIEUH WA SIOS
+ {0xC8B2, 0xD669}, //12084 #HANGUL SYLLABLE HIEUH WA IEUNG
+ {0xC8B3, 0xD670}, //12085 #HANGUL SYLLABLE HIEUH WAE
+ {0xC8B4, 0xD671}, //12086 #HANGUL SYLLABLE HIEUH WAE KIYEOK
+ {0xC8B5, 0xD674}, //12087 #HANGUL SYLLABLE HIEUH WAE NIEUN
+ {0xC8B6, 0xD683}, //12088 #HANGUL SYLLABLE HIEUH WAE SIOS
+ {0xC8B7, 0xD685}, //12089 #HANGUL SYLLABLE HIEUH WAE IEUNG
+ {0xC8B8, 0xD68C}, //12090 #HANGUL SYLLABLE HIEUH OE
+ {0xC8B9, 0xD68D}, //12091 #HANGUL SYLLABLE HIEUH OE KIYEOK
+ {0xC8BA, 0xD690}, //12092 #HANGUL SYLLABLE HIEUH OE NIEUN
+ {0xC8BB, 0xD694}, //12093 #HANGUL SYLLABLE HIEUH OE RIEUL
+ {0xC8BC, 0xD69D}, //12094 #HANGUL SYLLABLE HIEUH OE PIEUP
+ {0xC8BD, 0xD69F}, //12095 #HANGUL SYLLABLE HIEUH OE SIOS
+ {0xC8BE, 0xD6A1}, //12096 #HANGUL SYLLABLE HIEUH OE IEUNG
+ {0xC8BF, 0xD6A8}, //12097 #HANGUL SYLLABLE HIEUH YO
+ {0xC8C0, 0xD6AC}, //12098 #HANGUL SYLLABLE HIEUH YO NIEUN
+ {0xC8C1, 0xD6B0}, //12099 #HANGUL SYLLABLE HIEUH YO RIEUL
+ {0xC8C2, 0xD6B9}, //12100 #HANGUL SYLLABLE HIEUH YO PIEUP
+ {0xC8C3, 0xD6BB}, //12101 #HANGUL SYLLABLE HIEUH YO SIOS
+ {0xC8C4, 0xD6C4}, //12102 #HANGUL SYLLABLE HIEUH U
+ {0xC8C5, 0xD6C5}, //12103 #HANGUL SYLLABLE HIEUH U KIYEOK
+ {0xC8C6, 0xD6C8}, //12104 #HANGUL SYLLABLE HIEUH U NIEUN
+ {0xC8C7, 0xD6CC}, //12105 #HANGUL SYLLABLE HIEUH U RIEUL
+ {0xC8C8, 0xD6D1}, //12106 #HANGUL SYLLABLE HIEUH U RIEULTHIEUTH
+ {0xC8C9, 0xD6D4}, //12107 #HANGUL SYLLABLE HIEUH U MIEUM
+ {0xC8CA, 0xD6D7}, //12108 #HANGUL SYLLABLE HIEUH U SIOS
+ {0xC8CB, 0xD6D9}, //12109 #HANGUL SYLLABLE HIEUH U IEUNG
+ {0xC8CC, 0xD6E0}, //12110 #HANGUL SYLLABLE HIEUH WEO
+ {0xC8CD, 0xD6E4}, //12111 #HANGUL SYLLABLE HIEUH WEO NIEUN
+ {0xC8CE, 0xD6E8}, //12112 #HANGUL SYLLABLE HIEUH WEO RIEUL
+ {0xC8CF, 0xD6F0}, //12113 #HANGUL SYLLABLE HIEUH WEO MIEUM
+ {0xC8D0, 0xD6F5}, //12114 #HANGUL SYLLABLE HIEUH WEO IEUNG
+ {0xC8D1, 0xD6FC}, //12115 #HANGUL SYLLABLE HIEUH WE
+ {0xC8D2, 0xD6FD}, //12116 #HANGUL SYLLABLE HIEUH WE KIYEOK
+ {0xC8D3, 0xD700}, //12117 #HANGUL SYLLABLE HIEUH WE NIEUN
+ {0xC8D4, 0xD704}, //12118 #HANGUL SYLLABLE HIEUH WE RIEUL
+ {0xC8D5, 0xD711}, //12119 #HANGUL SYLLABLE HIEUH WE IEUNG
+ {0xC8D6, 0xD718}, //12120 #HANGUL SYLLABLE HIEUH WI
+ {0xC8D7, 0xD719}, //12121 #HANGUL SYLLABLE HIEUH WI KIYEOK
+ {0xC8D8, 0xD71C}, //12122 #HANGUL SYLLABLE HIEUH WI NIEUN
+ {0xC8D9, 0xD720}, //12123 #HANGUL SYLLABLE HIEUH WI RIEUL
+ {0xC8DA, 0xD728}, //12124 #HANGUL SYLLABLE HIEUH WI MIEUM
+ {0xC8DB, 0xD729}, //12125 #HANGUL SYLLABLE HIEUH WI PIEUP
+ {0xC8DC, 0xD72B}, //12126 #HANGUL SYLLABLE HIEUH WI SIOS
+ {0xC8DD, 0xD72D}, //12127 #HANGUL SYLLABLE HIEUH WI IEUNG
+ {0xC8DE, 0xD734}, //12128 #HANGUL SYLLABLE HIEUH YU
+ {0xC8DF, 0xD735}, //12129 #HANGUL SYLLABLE HIEUH YU KIYEOK
+ {0xC8E0, 0xD738}, //12130 #HANGUL SYLLABLE HIEUH YU NIEUN
+ {0xC8E1, 0xD73C}, //12131 #HANGUL SYLLABLE HIEUH YU RIEUL
+ {0xC8E2, 0xD744}, //12132 #HANGUL SYLLABLE HIEUH YU MIEUM
+ {0xC8E3, 0xD747}, //12133 #HANGUL SYLLABLE HIEUH YU SIOS
+ {0xC8E4, 0xD749}, //12134 #HANGUL SYLLABLE HIEUH YU IEUNG
+ {0xC8E5, 0xD750}, //12135 #HANGUL SYLLABLE HIEUH EU
+ {0xC8E6, 0xD751}, //12136 #HANGUL SYLLABLE HIEUH EU KIYEOK
+ {0xC8E7, 0xD754}, //12137 #HANGUL SYLLABLE HIEUH EU NIEUN
+ {0xC8E8, 0xD756}, //12138 #HANGUL SYLLABLE HIEUH EU NIEUNHIEUH
+ {0xC8E9, 0xD757}, //12139 #HANGUL SYLLABLE HIEUH EU TIKEUT
+ {0xC8EA, 0xD758}, //12140 #HANGUL SYLLABLE HIEUH EU RIEUL
+ {0xC8EB, 0xD759}, //12141 #HANGUL SYLLABLE HIEUH EU RIEULKIYEOK
+ {0xC8EC, 0xD760}, //12142 #HANGUL SYLLABLE HIEUH EU MIEUM
+ {0xC8ED, 0xD761}, //12143 #HANGUL SYLLABLE HIEUH EU PIEUP
+ {0xC8EE, 0xD763}, //12144 #HANGUL SYLLABLE HIEUH EU SIOS
+ {0xC8EF, 0xD765}, //12145 #HANGUL SYLLABLE HIEUH EU IEUNG
+ {0xC8F0, 0xD769}, //12146 #HANGUL SYLLABLE HIEUH EU THIEUTH
+ {0xC8F1, 0xD76C}, //12147 #HANGUL SYLLABLE HIEUH YI
+ {0xC8F2, 0xD770}, //12148 #HANGUL SYLLABLE HIEUH YI NIEUN
+ {0xC8F3, 0xD774}, //12149 #HANGUL SYLLABLE HIEUH YI RIEUL
+ {0xC8F4, 0xD77C}, //12150 #HANGUL SYLLABLE HIEUH YI MIEUM
+ {0xC8F5, 0xD77D}, //12151 #HANGUL SYLLABLE HIEUH YI PIEUP
+ {0xC8F6, 0xD781}, //12152 #HANGUL SYLLABLE HIEUH YI IEUNG
+ {0xC8F7, 0xD788}, //12153 #HANGUL SYLLABLE HIEUH I
+ {0xC8F8, 0xD789}, //12154 #HANGUL SYLLABLE HIEUH I KIYEOK
+ {0xC8F9, 0xD78C}, //12155 #HANGUL SYLLABLE HIEUH I NIEUN
+ {0xC8FA, 0xD790}, //12156 #HANGUL SYLLABLE HIEUH I RIEUL
+ {0xC8FB, 0xD798}, //12157 #HANGUL SYLLABLE HIEUH I MIEUM
+ {0xC8FC, 0xD799}, //12158 #HANGUL SYLLABLE HIEUH I PIEUP
+ {0xC8FD, 0xD79B}, //12159 #HANGUL SYLLABLE HIEUH I SIOS
+ {0xC8FE, 0xD79D}, //12160 #HANGUL SYLLABLE HIEUH I IEUNG
+ {0xCAA1, 0x4F3D}, //12161 #CJK UNIFIED IDEOGRAPH
+ {0xCAA2, 0x4F73}, //12162 #CJK UNIFIED IDEOGRAPH
+ {0xCAA3, 0x5047}, //12163 #CJK UNIFIED IDEOGRAPH
+ {0xCAA4, 0x50F9}, //12164 #CJK UNIFIED IDEOGRAPH
+ {0xCAA5, 0x52A0}, //12165 #CJK UNIFIED IDEOGRAPH
+ {0xCAA6, 0x53EF}, //12166 #CJK UNIFIED IDEOGRAPH
+ {0xCAA7, 0x5475}, //12167 #CJK UNIFIED IDEOGRAPH
+ {0xCAA8, 0x54E5}, //12168 #CJK UNIFIED IDEOGRAPH
+ {0xCAA9, 0x5609}, //12169 #CJK UNIFIED IDEOGRAPH
+ {0xCAAA, 0x5AC1}, //12170 #CJK UNIFIED IDEOGRAPH
+ {0xCAAB, 0x5BB6}, //12171 #CJK UNIFIED IDEOGRAPH
+ {0xCAAC, 0x6687}, //12172 #CJK UNIFIED IDEOGRAPH
+ {0xCAAD, 0x67B6}, //12173 #CJK UNIFIED IDEOGRAPH
+ {0xCAAE, 0x67B7}, //12174 #CJK UNIFIED IDEOGRAPH
+ {0xCAAF, 0x67EF}, //12175 #CJK UNIFIED IDEOGRAPH
+ {0xCAB0, 0x6B4C}, //12176 #CJK UNIFIED IDEOGRAPH
+ {0xCAB1, 0x73C2}, //12177 #CJK UNIFIED IDEOGRAPH
+ {0xCAB2, 0x75C2}, //12178 #CJK UNIFIED IDEOGRAPH
+ {0xCAB3, 0x7A3C}, //12179 #CJK UNIFIED IDEOGRAPH
+ {0xCAB4, 0x82DB}, //12180 #CJK UNIFIED IDEOGRAPH
+ {0xCAB5, 0x8304}, //12181 #CJK UNIFIED IDEOGRAPH
+ {0xCAB6, 0x8857}, //12182 #CJK UNIFIED IDEOGRAPH
+ {0xCAB7, 0x8888}, //12183 #CJK UNIFIED IDEOGRAPH
+ {0xCAB8, 0x8A36}, //12184 #CJK UNIFIED IDEOGRAPH
+ {0xCAB9, 0x8CC8}, //12185 #CJK UNIFIED IDEOGRAPH
+ {0xCABA, 0x8DCF}, //12186 #CJK UNIFIED IDEOGRAPH
+ {0xCABB, 0x8EFB}, //12187 #CJK UNIFIED IDEOGRAPH
+ {0xCABC, 0x8FE6}, //12188 #CJK UNIFIED IDEOGRAPH
+ {0xCABD, 0x99D5}, //12189 #CJK UNIFIED IDEOGRAPH
+ {0xCABE, 0x523B}, //12190 #CJK UNIFIED IDEOGRAPH
+ {0xCABF, 0x5374}, //12191 #CJK UNIFIED IDEOGRAPH
+ {0xCAC0, 0x5404}, //12192 #CJK UNIFIED IDEOGRAPH
+ {0xCAC1, 0x606A}, //12193 #CJK UNIFIED IDEOGRAPH
+ {0xCAC2, 0x6164}, //12194 #CJK UNIFIED IDEOGRAPH
+ {0xCAC3, 0x6BBC}, //12195 #CJK UNIFIED IDEOGRAPH
+ {0xCAC4, 0x73CF}, //12196 #CJK UNIFIED IDEOGRAPH
+ {0xCAC5, 0x811A}, //12197 #CJK UNIFIED IDEOGRAPH
+ {0xCAC6, 0x89BA}, //12198 #CJK UNIFIED IDEOGRAPH
+ {0xCAC7, 0x89D2}, //12199 #CJK UNIFIED IDEOGRAPH
+ {0xCAC8, 0x95A3}, //12200 #CJK UNIFIED IDEOGRAPH
+ {0xCAC9, 0x4F83}, //12201 #CJK UNIFIED IDEOGRAPH
+ {0xCACA, 0x520A}, //12202 #CJK UNIFIED IDEOGRAPH
+ {0xCACB, 0x58BE}, //12203 #CJK UNIFIED IDEOGRAPH
+ {0xCACC, 0x5978}, //12204 #CJK UNIFIED IDEOGRAPH
+ {0xCACD, 0x59E6}, //12205 #CJK UNIFIED IDEOGRAPH
+ {0xCACE, 0x5E72}, //12206 #CJK UNIFIED IDEOGRAPH
+ {0xCACF, 0x5E79}, //12207 #CJK UNIFIED IDEOGRAPH
+ {0xCAD0, 0x61C7}, //12208 #CJK UNIFIED IDEOGRAPH
+ {0xCAD1, 0x63C0}, //12209 #CJK UNIFIED IDEOGRAPH
+ {0xCAD2, 0x6746}, //12210 #CJK UNIFIED IDEOGRAPH
+ {0xCAD3, 0x67EC}, //12211 #CJK UNIFIED IDEOGRAPH
+ {0xCAD4, 0x687F}, //12212 #CJK UNIFIED IDEOGRAPH
+ {0xCAD5, 0x6F97}, //12213 #CJK UNIFIED IDEOGRAPH
+ {0xCAD6, 0x764E}, //12214 #CJK UNIFIED IDEOGRAPH
+ {0xCAD7, 0x770B}, //12215 #CJK UNIFIED IDEOGRAPH
+ {0xCAD8, 0x78F5}, //12216 #CJK UNIFIED IDEOGRAPH
+ {0xCAD9, 0x7A08}, //12217 #CJK UNIFIED IDEOGRAPH
+ {0xCADA, 0x7AFF}, //12218 #CJK UNIFIED IDEOGRAPH
+ {0xCADB, 0x7C21}, //12219 #CJK UNIFIED IDEOGRAPH
+ {0xCADC, 0x809D}, //12220 #CJK UNIFIED IDEOGRAPH
+ {0xCADD, 0x826E}, //12221 #CJK UNIFIED IDEOGRAPH
+ {0xCADE, 0x8271}, //12222 #CJK UNIFIED IDEOGRAPH
+ {0xCADF, 0x8AEB}, //12223 #CJK UNIFIED IDEOGRAPH
+ {0xCAE0, 0x9593}, //12224 #CJK UNIFIED IDEOGRAPH
+ {0xCAE1, 0x4E6B}, //12225 #CJK UNIFIED IDEOGRAPH
+ {0xCAE2, 0x559D}, //12226 #CJK UNIFIED IDEOGRAPH
+ {0xCAE3, 0x66F7}, //12227 #CJK UNIFIED IDEOGRAPH
+ {0xCAE4, 0x6E34}, //12228 #CJK UNIFIED IDEOGRAPH
+ {0xCAE5, 0x78A3}, //12229 #CJK UNIFIED IDEOGRAPH
+ {0xCAE6, 0x7AED}, //12230 #CJK UNIFIED IDEOGRAPH
+ {0xCAE7, 0x845B}, //12231 #CJK UNIFIED IDEOGRAPH
+ {0xCAE8, 0x8910}, //12232 #CJK UNIFIED IDEOGRAPH
+ {0xCAE9, 0x874E}, //12233 #CJK UNIFIED IDEOGRAPH
+ {0xCAEA, 0x97A8}, //12234 #CJK UNIFIED IDEOGRAPH
+ {0xCAEB, 0x52D8}, //12235 #CJK UNIFIED IDEOGRAPH
+ {0xCAEC, 0x574E}, //12236 #CJK UNIFIED IDEOGRAPH
+ {0xCAED, 0x582A}, //12237 #CJK UNIFIED IDEOGRAPH
+ {0xCAEE, 0x5D4C}, //12238 #CJK UNIFIED IDEOGRAPH
+ {0xCAEF, 0x611F}, //12239 #CJK UNIFIED IDEOGRAPH
+ {0xCAF0, 0x61BE}, //12240 #CJK UNIFIED IDEOGRAPH
+ {0xCAF1, 0x6221}, //12241 #CJK UNIFIED IDEOGRAPH
+ {0xCAF2, 0x6562}, //12242 #CJK UNIFIED IDEOGRAPH
+ {0xCAF3, 0x67D1}, //12243 #CJK UNIFIED IDEOGRAPH
+ {0xCAF4, 0x6A44}, //12244 #CJK UNIFIED IDEOGRAPH
+ {0xCAF5, 0x6E1B}, //12245 #CJK UNIFIED IDEOGRAPH
+ {0xCAF6, 0x7518}, //12246 #CJK UNIFIED IDEOGRAPH
+ {0xCAF7, 0x75B3}, //12247 #CJK UNIFIED IDEOGRAPH
+ {0xCAF8, 0x76E3}, //12248 #CJK UNIFIED IDEOGRAPH
+ {0xCAF9, 0x77B0}, //12249 #CJK UNIFIED IDEOGRAPH
+ {0xCAFA, 0x7D3A}, //12250 #CJK UNIFIED IDEOGRAPH
+ {0xCAFB, 0x90AF}, //12251 #CJK UNIFIED IDEOGRAPH
+ {0xCAFC, 0x9451}, //12252 #CJK UNIFIED IDEOGRAPH
+ {0xCAFD, 0x9452}, //12253 #CJK UNIFIED IDEOGRAPH
+ {0xCAFE, 0x9F95}, //12254 #CJK UNIFIED IDEOGRAPH
+ {0xCBA1, 0x5323}, //12255 #CJK UNIFIED IDEOGRAPH
+ {0xCBA2, 0x5CAC}, //12256 #CJK UNIFIED IDEOGRAPH
+ {0xCBA3, 0x7532}, //12257 #CJK UNIFIED IDEOGRAPH
+ {0xCBA4, 0x80DB}, //12258 #CJK UNIFIED IDEOGRAPH
+ {0xCBA5, 0x9240}, //12259 #CJK UNIFIED IDEOGRAPH
+ {0xCBA6, 0x9598}, //12260 #CJK UNIFIED IDEOGRAPH
+ {0xCBA7, 0x525B}, //12261 #CJK UNIFIED IDEOGRAPH
+ {0xCBA8, 0x5808}, //12262 #CJK UNIFIED IDEOGRAPH
+ {0xCBA9, 0x59DC}, //12263 #CJK UNIFIED IDEOGRAPH
+ {0xCBAA, 0x5CA1}, //12264 #CJK UNIFIED IDEOGRAPH
+ {0xCBAB, 0x5D17}, //12265 #CJK UNIFIED IDEOGRAPH
+ {0xCBAC, 0x5EB7}, //12266 #CJK UNIFIED IDEOGRAPH
+ {0xCBAD, 0x5F3A}, //12267 #CJK UNIFIED IDEOGRAPH
+ {0xCBAE, 0x5F4A}, //12268 #CJK UNIFIED IDEOGRAPH
+ {0xCBAF, 0x6177}, //12269 #CJK UNIFIED IDEOGRAPH
+ {0xCBB0, 0x6C5F}, //12270 #CJK UNIFIED IDEOGRAPH
+ {0xCBB1, 0x757A}, //12271 #CJK UNIFIED IDEOGRAPH
+ {0xCBB2, 0x7586}, //12272 #CJK UNIFIED IDEOGRAPH
+ {0xCBB3, 0x7CE0}, //12273 #CJK UNIFIED IDEOGRAPH
+ {0xCBB4, 0x7D73}, //12274 #CJK UNIFIED IDEOGRAPH
+ {0xCBB5, 0x7DB1}, //12275 #CJK UNIFIED IDEOGRAPH
+ {0xCBB6, 0x7F8C}, //12276 #CJK UNIFIED IDEOGRAPH
+ {0xCBB7, 0x8154}, //12277 #CJK UNIFIED IDEOGRAPH
+ {0xCBB8, 0x8221}, //12278 #CJK UNIFIED IDEOGRAPH
+ {0xCBB9, 0x8591}, //12279 #CJK UNIFIED IDEOGRAPH
+ {0xCBBA, 0x8941}, //12280 #CJK UNIFIED IDEOGRAPH
+ {0xCBBB, 0x8B1B}, //12281 #CJK UNIFIED IDEOGRAPH
+ {0xCBBC, 0x92FC}, //12282 #CJK UNIFIED IDEOGRAPH
+ {0xCBBD, 0x964D}, //12283 #CJK UNIFIED IDEOGRAPH
+ {0xCBBE, 0x9C47}, //12284 #CJK UNIFIED IDEOGRAPH
+ {0xCBBF, 0x4ECB}, //12285 #CJK UNIFIED IDEOGRAPH
+ {0xCBC0, 0x4EF7}, //12286 #CJK UNIFIED IDEOGRAPH
+ {0xCBC1, 0x500B}, //12287 #CJK UNIFIED IDEOGRAPH
+ {0xCBC2, 0x51F1}, //12288 #CJK UNIFIED IDEOGRAPH
+ {0xCBC3, 0x584F}, //12289 #CJK UNIFIED IDEOGRAPH
+ {0xCBC4, 0x6137}, //12290 #CJK UNIFIED IDEOGRAPH
+ {0xCBC5, 0x613E}, //12291 #CJK UNIFIED IDEOGRAPH
+ {0xCBC6, 0x6168}, //12292 #CJK UNIFIED IDEOGRAPH
+ {0xCBC7, 0x6539}, //12293 #CJK UNIFIED IDEOGRAPH
+ {0xCBC8, 0x69EA}, //12294 #CJK UNIFIED IDEOGRAPH
+ {0xCBC9, 0x6F11}, //12295 #CJK UNIFIED IDEOGRAPH
+ {0xCBCA, 0x75A5}, //12296 #CJK UNIFIED IDEOGRAPH
+ {0xCBCB, 0x7686}, //12297 #CJK UNIFIED IDEOGRAPH
+ {0xCBCC, 0x76D6}, //12298 #CJK UNIFIED IDEOGRAPH
+ {0xCBCD, 0x7B87}, //12299 #CJK UNIFIED IDEOGRAPH
+ {0xCBCE, 0x82A5}, //12300 #CJK UNIFIED IDEOGRAPH
+ {0xCBCF, 0x84CB}, //12301 #CJK UNIFIED IDEOGRAPH
+ {0xCBD0, 0xF900}, //12302 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCBD1, 0x93A7}, //12303 #CJK UNIFIED IDEOGRAPH
+ {0xCBD2, 0x958B}, //12304 #CJK UNIFIED IDEOGRAPH
+ {0xCBD3, 0x5580}, //12305 #CJK UNIFIED IDEOGRAPH
+ {0xCBD4, 0x5BA2}, //12306 #CJK UNIFIED IDEOGRAPH
+ {0xCBD5, 0x5751}, //12307 #CJK UNIFIED IDEOGRAPH
+ {0xCBD6, 0xF901}, //12308 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCBD7, 0x7CB3}, //12309 #CJK UNIFIED IDEOGRAPH
+ {0xCBD8, 0x7FB9}, //12310 #CJK UNIFIED IDEOGRAPH
+ {0xCBD9, 0x91B5}, //12311 #CJK UNIFIED IDEOGRAPH
+ {0xCBDA, 0x5028}, //12312 #CJK UNIFIED IDEOGRAPH
+ {0xCBDB, 0x53BB}, //12313 #CJK UNIFIED IDEOGRAPH
+ {0xCBDC, 0x5C45}, //12314 #CJK UNIFIED IDEOGRAPH
+ {0xCBDD, 0x5DE8}, //12315 #CJK UNIFIED IDEOGRAPH
+ {0xCBDE, 0x62D2}, //12316 #CJK UNIFIED IDEOGRAPH
+ {0xCBDF, 0x636E}, //12317 #CJK UNIFIED IDEOGRAPH
+ {0xCBE0, 0x64DA}, //12318 #CJK UNIFIED IDEOGRAPH
+ {0xCBE1, 0x64E7}, //12319 #CJK UNIFIED IDEOGRAPH
+ {0xCBE2, 0x6E20}, //12320 #CJK UNIFIED IDEOGRAPH
+ {0xCBE3, 0x70AC}, //12321 #CJK UNIFIED IDEOGRAPH
+ {0xCBE4, 0x795B}, //12322 #CJK UNIFIED IDEOGRAPH
+ {0xCBE5, 0x8DDD}, //12323 #CJK UNIFIED IDEOGRAPH
+ {0xCBE6, 0x8E1E}, //12324 #CJK UNIFIED IDEOGRAPH
+ {0xCBE7, 0xF902}, //12325 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCBE8, 0x907D}, //12326 #CJK UNIFIED IDEOGRAPH
+ {0xCBE9, 0x9245}, //12327 #CJK UNIFIED IDEOGRAPH
+ {0xCBEA, 0x92F8}, //12328 #CJK UNIFIED IDEOGRAPH
+ {0xCBEB, 0x4E7E}, //12329 #CJK UNIFIED IDEOGRAPH
+ {0xCBEC, 0x4EF6}, //12330 #CJK UNIFIED IDEOGRAPH
+ {0xCBED, 0x5065}, //12331 #CJK UNIFIED IDEOGRAPH
+ {0xCBEE, 0x5DFE}, //12332 #CJK UNIFIED IDEOGRAPH
+ {0xCBEF, 0x5EFA}, //12333 #CJK UNIFIED IDEOGRAPH
+ {0xCBF0, 0x6106}, //12334 #CJK UNIFIED IDEOGRAPH
+ {0xCBF1, 0x6957}, //12335 #CJK UNIFIED IDEOGRAPH
+ {0xCBF2, 0x8171}, //12336 #CJK UNIFIED IDEOGRAPH
+ {0xCBF3, 0x8654}, //12337 #CJK UNIFIED IDEOGRAPH
+ {0xCBF4, 0x8E47}, //12338 #CJK UNIFIED IDEOGRAPH
+ {0xCBF5, 0x9375}, //12339 #CJK UNIFIED IDEOGRAPH
+ {0xCBF6, 0x9A2B}, //12340 #CJK UNIFIED IDEOGRAPH
+ {0xCBF7, 0x4E5E}, //12341 #CJK UNIFIED IDEOGRAPH
+ {0xCBF8, 0x5091}, //12342 #CJK UNIFIED IDEOGRAPH
+ {0xCBF9, 0x6770}, //12343 #CJK UNIFIED IDEOGRAPH
+ {0xCBFA, 0x6840}, //12344 #CJK UNIFIED IDEOGRAPH
+ {0xCBFB, 0x5109}, //12345 #CJK UNIFIED IDEOGRAPH
+ {0xCBFC, 0x528D}, //12346 #CJK UNIFIED IDEOGRAPH
+ {0xCBFD, 0x5292}, //12347 #CJK UNIFIED IDEOGRAPH
+ {0xCBFE, 0x6AA2}, //12348 #CJK UNIFIED IDEOGRAPH
+ {0xCCA1, 0x77BC}, //12349 #CJK UNIFIED IDEOGRAPH
+ {0xCCA2, 0x9210}, //12350 #CJK UNIFIED IDEOGRAPH
+ {0xCCA3, 0x9ED4}, //12351 #CJK UNIFIED IDEOGRAPH
+ {0xCCA4, 0x52AB}, //12352 #CJK UNIFIED IDEOGRAPH
+ {0xCCA5, 0x602F}, //12353 #CJK UNIFIED IDEOGRAPH
+ {0xCCA6, 0x8FF2}, //12354 #CJK UNIFIED IDEOGRAPH
+ {0xCCA7, 0x5048}, //12355 #CJK UNIFIED IDEOGRAPH
+ {0xCCA8, 0x61A9}, //12356 #CJK UNIFIED IDEOGRAPH
+ {0xCCA9, 0x63ED}, //12357 #CJK UNIFIED IDEOGRAPH
+ {0xCCAA, 0x64CA}, //12358 #CJK UNIFIED IDEOGRAPH
+ {0xCCAB, 0x683C}, //12359 #CJK UNIFIED IDEOGRAPH
+ {0xCCAC, 0x6A84}, //12360 #CJK UNIFIED IDEOGRAPH
+ {0xCCAD, 0x6FC0}, //12361 #CJK UNIFIED IDEOGRAPH
+ {0xCCAE, 0x8188}, //12362 #CJK UNIFIED IDEOGRAPH
+ {0xCCAF, 0x89A1}, //12363 #CJK UNIFIED IDEOGRAPH
+ {0xCCB0, 0x9694}, //12364 #CJK UNIFIED IDEOGRAPH
+ {0xCCB1, 0x5805}, //12365 #CJK UNIFIED IDEOGRAPH
+ {0xCCB2, 0x727D}, //12366 #CJK UNIFIED IDEOGRAPH
+ {0xCCB3, 0x72AC}, //12367 #CJK UNIFIED IDEOGRAPH
+ {0xCCB4, 0x7504}, //12368 #CJK UNIFIED IDEOGRAPH
+ {0xCCB5, 0x7D79}, //12369 #CJK UNIFIED IDEOGRAPH
+ {0xCCB6, 0x7E6D}, //12370 #CJK UNIFIED IDEOGRAPH
+ {0xCCB7, 0x80A9}, //12371 #CJK UNIFIED IDEOGRAPH
+ {0xCCB8, 0x898B}, //12372 #CJK UNIFIED IDEOGRAPH
+ {0xCCB9, 0x8B74}, //12373 #CJK UNIFIED IDEOGRAPH
+ {0xCCBA, 0x9063}, //12374 #CJK UNIFIED IDEOGRAPH
+ {0xCCBB, 0x9D51}, //12375 #CJK UNIFIED IDEOGRAPH
+ {0xCCBC, 0x6289}, //12376 #CJK UNIFIED IDEOGRAPH
+ {0xCCBD, 0x6C7A}, //12377 #CJK UNIFIED IDEOGRAPH
+ {0xCCBE, 0x6F54}, //12378 #CJK UNIFIED IDEOGRAPH
+ {0xCCBF, 0x7D50}, //12379 #CJK UNIFIED IDEOGRAPH
+ {0xCCC0, 0x7F3A}, //12380 #CJK UNIFIED IDEOGRAPH
+ {0xCCC1, 0x8A23}, //12381 #CJK UNIFIED IDEOGRAPH
+ {0xCCC2, 0x517C}, //12382 #CJK UNIFIED IDEOGRAPH
+ {0xCCC3, 0x614A}, //12383 #CJK UNIFIED IDEOGRAPH
+ {0xCCC4, 0x7B9D}, //12384 #CJK UNIFIED IDEOGRAPH
+ {0xCCC5, 0x8B19}, //12385 #CJK UNIFIED IDEOGRAPH
+ {0xCCC6, 0x9257}, //12386 #CJK UNIFIED IDEOGRAPH
+ {0xCCC7, 0x938C}, //12387 #CJK UNIFIED IDEOGRAPH
+ {0xCCC8, 0x4EAC}, //12388 #CJK UNIFIED IDEOGRAPH
+ {0xCCC9, 0x4FD3}, //12389 #CJK UNIFIED IDEOGRAPH
+ {0xCCCA, 0x501E}, //12390 #CJK UNIFIED IDEOGRAPH
+ {0xCCCB, 0x50BE}, //12391 #CJK UNIFIED IDEOGRAPH
+ {0xCCCC, 0x5106}, //12392 #CJK UNIFIED IDEOGRAPH
+ {0xCCCD, 0x52C1}, //12393 #CJK UNIFIED IDEOGRAPH
+ {0xCCCE, 0x52CD}, //12394 #CJK UNIFIED IDEOGRAPH
+ {0xCCCF, 0x537F}, //12395 #CJK UNIFIED IDEOGRAPH
+ {0xCCD0, 0x5770}, //12396 #CJK UNIFIED IDEOGRAPH
+ {0xCCD1, 0x5883}, //12397 #CJK UNIFIED IDEOGRAPH
+ {0xCCD2, 0x5E9A}, //12398 #CJK UNIFIED IDEOGRAPH
+ {0xCCD3, 0x5F91}, //12399 #CJK UNIFIED IDEOGRAPH
+ {0xCCD4, 0x6176}, //12400 #CJK UNIFIED IDEOGRAPH
+ {0xCCD5, 0x61AC}, //12401 #CJK UNIFIED IDEOGRAPH
+ {0xCCD6, 0x64CE}, //12402 #CJK UNIFIED IDEOGRAPH
+ {0xCCD7, 0x656C}, //12403 #CJK UNIFIED IDEOGRAPH
+ {0xCCD8, 0x666F}, //12404 #CJK UNIFIED IDEOGRAPH
+ {0xCCD9, 0x66BB}, //12405 #CJK UNIFIED IDEOGRAPH
+ {0xCCDA, 0x66F4}, //12406 #CJK UNIFIED IDEOGRAPH
+ {0xCCDB, 0x6897}, //12407 #CJK UNIFIED IDEOGRAPH
+ {0xCCDC, 0x6D87}, //12408 #CJK UNIFIED IDEOGRAPH
+ {0xCCDD, 0x7085}, //12409 #CJK UNIFIED IDEOGRAPH
+ {0xCCDE, 0x70F1}, //12410 #CJK UNIFIED IDEOGRAPH
+ {0xCCDF, 0x749F}, //12411 #CJK UNIFIED IDEOGRAPH
+ {0xCCE0, 0x74A5}, //12412 #CJK UNIFIED IDEOGRAPH
+ {0xCCE1, 0x74CA}, //12413 #CJK UNIFIED IDEOGRAPH
+ {0xCCE2, 0x75D9}, //12414 #CJK UNIFIED IDEOGRAPH
+ {0xCCE3, 0x786C}, //12415 #CJK UNIFIED IDEOGRAPH
+ {0xCCE4, 0x78EC}, //12416 #CJK UNIFIED IDEOGRAPH
+ {0xCCE5, 0x7ADF}, //12417 #CJK UNIFIED IDEOGRAPH
+ {0xCCE6, 0x7AF6}, //12418 #CJK UNIFIED IDEOGRAPH
+ {0xCCE7, 0x7D45}, //12419 #CJK UNIFIED IDEOGRAPH
+ {0xCCE8, 0x7D93}, //12420 #CJK UNIFIED IDEOGRAPH
+ {0xCCE9, 0x8015}, //12421 #CJK UNIFIED IDEOGRAPH
+ {0xCCEA, 0x803F}, //12422 #CJK UNIFIED IDEOGRAPH
+ {0xCCEB, 0x811B}, //12423 #CJK UNIFIED IDEOGRAPH
+ {0xCCEC, 0x8396}, //12424 #CJK UNIFIED IDEOGRAPH
+ {0xCCED, 0x8B66}, //12425 #CJK UNIFIED IDEOGRAPH
+ {0xCCEE, 0x8F15}, //12426 #CJK UNIFIED IDEOGRAPH
+ {0xCCEF, 0x9015}, //12427 #CJK UNIFIED IDEOGRAPH
+ {0xCCF0, 0x93E1}, //12428 #CJK UNIFIED IDEOGRAPH
+ {0xCCF1, 0x9803}, //12429 #CJK UNIFIED IDEOGRAPH
+ {0xCCF2, 0x9838}, //12430 #CJK UNIFIED IDEOGRAPH
+ {0xCCF3, 0x9A5A}, //12431 #CJK UNIFIED IDEOGRAPH
+ {0xCCF4, 0x9BE8}, //12432 #CJK UNIFIED IDEOGRAPH
+ {0xCCF5, 0x4FC2}, //12433 #CJK UNIFIED IDEOGRAPH
+ {0xCCF6, 0x5553}, //12434 #CJK UNIFIED IDEOGRAPH
+ {0xCCF7, 0x583A}, //12435 #CJK UNIFIED IDEOGRAPH
+ {0xCCF8, 0x5951}, //12436 #CJK UNIFIED IDEOGRAPH
+ {0xCCF9, 0x5B63}, //12437 #CJK UNIFIED IDEOGRAPH
+ {0xCCFA, 0x5C46}, //12438 #CJK UNIFIED IDEOGRAPH
+ {0xCCFB, 0x60B8}, //12439 #CJK UNIFIED IDEOGRAPH
+ {0xCCFC, 0x6212}, //12440 #CJK UNIFIED IDEOGRAPH
+ {0xCCFD, 0x6842}, //12441 #CJK UNIFIED IDEOGRAPH
+ {0xCCFE, 0x68B0}, //12442 #CJK UNIFIED IDEOGRAPH
+ {0xCDA1, 0x68E8}, //12443 #CJK UNIFIED IDEOGRAPH
+ {0xCDA2, 0x6EAA}, //12444 #CJK UNIFIED IDEOGRAPH
+ {0xCDA3, 0x754C}, //12445 #CJK UNIFIED IDEOGRAPH
+ {0xCDA4, 0x7678}, //12446 #CJK UNIFIED IDEOGRAPH
+ {0xCDA5, 0x78CE}, //12447 #CJK UNIFIED IDEOGRAPH
+ {0xCDA6, 0x7A3D}, //12448 #CJK UNIFIED IDEOGRAPH
+ {0xCDA7, 0x7CFB}, //12449 #CJK UNIFIED IDEOGRAPH
+ {0xCDA8, 0x7E6B}, //12450 #CJK UNIFIED IDEOGRAPH
+ {0xCDA9, 0x7E7C}, //12451 #CJK UNIFIED IDEOGRAPH
+ {0xCDAA, 0x8A08}, //12452 #CJK UNIFIED IDEOGRAPH
+ {0xCDAB, 0x8AA1}, //12453 #CJK UNIFIED IDEOGRAPH
+ {0xCDAC, 0x8C3F}, //12454 #CJK UNIFIED IDEOGRAPH
+ {0xCDAD, 0x968E}, //12455 #CJK UNIFIED IDEOGRAPH
+ {0xCDAE, 0x9DC4}, //12456 #CJK UNIFIED IDEOGRAPH
+ {0xCDAF, 0x53E4}, //12457 #CJK UNIFIED IDEOGRAPH
+ {0xCDB0, 0x53E9}, //12458 #CJK UNIFIED IDEOGRAPH
+ {0xCDB1, 0x544A}, //12459 #CJK UNIFIED IDEOGRAPH
+ {0xCDB2, 0x5471}, //12460 #CJK UNIFIED IDEOGRAPH
+ {0xCDB3, 0x56FA}, //12461 #CJK UNIFIED IDEOGRAPH
+ {0xCDB4, 0x59D1}, //12462 #CJK UNIFIED IDEOGRAPH
+ {0xCDB5, 0x5B64}, //12463 #CJK UNIFIED IDEOGRAPH
+ {0xCDB6, 0x5C3B}, //12464 #CJK UNIFIED IDEOGRAPH
+ {0xCDB7, 0x5EAB}, //12465 #CJK UNIFIED IDEOGRAPH
+ {0xCDB8, 0x62F7}, //12466 #CJK UNIFIED IDEOGRAPH
+ {0xCDB9, 0x6537}, //12467 #CJK UNIFIED IDEOGRAPH
+ {0xCDBA, 0x6545}, //12468 #CJK UNIFIED IDEOGRAPH
+ {0xCDBB, 0x6572}, //12469 #CJK UNIFIED IDEOGRAPH
+ {0xCDBC, 0x66A0}, //12470 #CJK UNIFIED IDEOGRAPH
+ {0xCDBD, 0x67AF}, //12471 #CJK UNIFIED IDEOGRAPH
+ {0xCDBE, 0x69C1}, //12472 #CJK UNIFIED IDEOGRAPH
+ {0xCDBF, 0x6CBD}, //12473 #CJK UNIFIED IDEOGRAPH
+ {0xCDC0, 0x75FC}, //12474 #CJK UNIFIED IDEOGRAPH
+ {0xCDC1, 0x7690}, //12475 #CJK UNIFIED IDEOGRAPH
+ {0xCDC2, 0x777E}, //12476 #CJK UNIFIED IDEOGRAPH
+ {0xCDC3, 0x7A3F}, //12477 #CJK UNIFIED IDEOGRAPH
+ {0xCDC4, 0x7F94}, //12478 #CJK UNIFIED IDEOGRAPH
+ {0xCDC5, 0x8003}, //12479 #CJK UNIFIED IDEOGRAPH
+ {0xCDC6, 0x80A1}, //12480 #CJK UNIFIED IDEOGRAPH
+ {0xCDC7, 0x818F}, //12481 #CJK UNIFIED IDEOGRAPH
+ {0xCDC8, 0x82E6}, //12482 #CJK UNIFIED IDEOGRAPH
+ {0xCDC9, 0x82FD}, //12483 #CJK UNIFIED IDEOGRAPH
+ {0xCDCA, 0x83F0}, //12484 #CJK UNIFIED IDEOGRAPH
+ {0xCDCB, 0x85C1}, //12485 #CJK UNIFIED IDEOGRAPH
+ {0xCDCC, 0x8831}, //12486 #CJK UNIFIED IDEOGRAPH
+ {0xCDCD, 0x88B4}, //12487 #CJK UNIFIED IDEOGRAPH
+ {0xCDCE, 0x8AA5}, //12488 #CJK UNIFIED IDEOGRAPH
+ {0xCDCF, 0xF903}, //12489 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCDD0, 0x8F9C}, //12490 #CJK UNIFIED IDEOGRAPH
+ {0xCDD1, 0x932E}, //12491 #CJK UNIFIED IDEOGRAPH
+ {0xCDD2, 0x96C7}, //12492 #CJK UNIFIED IDEOGRAPH
+ {0xCDD3, 0x9867}, //12493 #CJK UNIFIED IDEOGRAPH
+ {0xCDD4, 0x9AD8}, //12494 #CJK UNIFIED IDEOGRAPH
+ {0xCDD5, 0x9F13}, //12495 #CJK UNIFIED IDEOGRAPH
+ {0xCDD6, 0x54ED}, //12496 #CJK UNIFIED IDEOGRAPH
+ {0xCDD7, 0x659B}, //12497 #CJK UNIFIED IDEOGRAPH
+ {0xCDD8, 0x66F2}, //12498 #CJK UNIFIED IDEOGRAPH
+ {0xCDD9, 0x688F}, //12499 #CJK UNIFIED IDEOGRAPH
+ {0xCDDA, 0x7A40}, //12500 #CJK UNIFIED IDEOGRAPH
+ {0xCDDB, 0x8C37}, //12501 #CJK UNIFIED IDEOGRAPH
+ {0xCDDC, 0x9D60}, //12502 #CJK UNIFIED IDEOGRAPH
+ {0xCDDD, 0x56F0}, //12503 #CJK UNIFIED IDEOGRAPH
+ {0xCDDE, 0x5764}, //12504 #CJK UNIFIED IDEOGRAPH
+ {0xCDDF, 0x5D11}, //12505 #CJK UNIFIED IDEOGRAPH
+ {0xCDE0, 0x6606}, //12506 #CJK UNIFIED IDEOGRAPH
+ {0xCDE1, 0x68B1}, //12507 #CJK UNIFIED IDEOGRAPH
+ {0xCDE2, 0x68CD}, //12508 #CJK UNIFIED IDEOGRAPH
+ {0xCDE3, 0x6EFE}, //12509 #CJK UNIFIED IDEOGRAPH
+ {0xCDE4, 0x7428}, //12510 #CJK UNIFIED IDEOGRAPH
+ {0xCDE5, 0x889E}, //12511 #CJK UNIFIED IDEOGRAPH
+ {0xCDE6, 0x9BE4}, //12512 #CJK UNIFIED IDEOGRAPH
+ {0xCDE7, 0x6C68}, //12513 #CJK UNIFIED IDEOGRAPH
+ {0xCDE8, 0xF904}, //12514 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCDE9, 0x9AA8}, //12515 #CJK UNIFIED IDEOGRAPH
+ {0xCDEA, 0x4F9B}, //12516 #CJK UNIFIED IDEOGRAPH
+ {0xCDEB, 0x516C}, //12517 #CJK UNIFIED IDEOGRAPH
+ {0xCDEC, 0x5171}, //12518 #CJK UNIFIED IDEOGRAPH
+ {0xCDED, 0x529F}, //12519 #CJK UNIFIED IDEOGRAPH
+ {0xCDEE, 0x5B54}, //12520 #CJK UNIFIED IDEOGRAPH
+ {0xCDEF, 0x5DE5}, //12521 #CJK UNIFIED IDEOGRAPH
+ {0xCDF0, 0x6050}, //12522 #CJK UNIFIED IDEOGRAPH
+ {0xCDF1, 0x606D}, //12523 #CJK UNIFIED IDEOGRAPH
+ {0xCDF2, 0x62F1}, //12524 #CJK UNIFIED IDEOGRAPH
+ {0xCDF3, 0x63A7}, //12525 #CJK UNIFIED IDEOGRAPH
+ {0xCDF4, 0x653B}, //12526 #CJK UNIFIED IDEOGRAPH
+ {0xCDF5, 0x73D9}, //12527 #CJK UNIFIED IDEOGRAPH
+ {0xCDF6, 0x7A7A}, //12528 #CJK UNIFIED IDEOGRAPH
+ {0xCDF7, 0x86A3}, //12529 #CJK UNIFIED IDEOGRAPH
+ {0xCDF8, 0x8CA2}, //12530 #CJK UNIFIED IDEOGRAPH
+ {0xCDF9, 0x978F}, //12531 #CJK UNIFIED IDEOGRAPH
+ {0xCDFA, 0x4E32}, //12532 #CJK UNIFIED IDEOGRAPH
+ {0xCDFB, 0x5BE1}, //12533 #CJK UNIFIED IDEOGRAPH
+ {0xCDFC, 0x6208}, //12534 #CJK UNIFIED IDEOGRAPH
+ {0xCDFD, 0x679C}, //12535 #CJK UNIFIED IDEOGRAPH
+ {0xCDFE, 0x74DC}, //12536 #CJK UNIFIED IDEOGRAPH
+ {0xCEA1, 0x79D1}, //12537 #CJK UNIFIED IDEOGRAPH
+ {0xCEA2, 0x83D3}, //12538 #CJK UNIFIED IDEOGRAPH
+ {0xCEA3, 0x8A87}, //12539 #CJK UNIFIED IDEOGRAPH
+ {0xCEA4, 0x8AB2}, //12540 #CJK UNIFIED IDEOGRAPH
+ {0xCEA5, 0x8DE8}, //12541 #CJK UNIFIED IDEOGRAPH
+ {0xCEA6, 0x904E}, //12542 #CJK UNIFIED IDEOGRAPH
+ {0xCEA7, 0x934B}, //12543 #CJK UNIFIED IDEOGRAPH
+ {0xCEA8, 0x9846}, //12544 #CJK UNIFIED IDEOGRAPH
+ {0xCEA9, 0x5ED3}, //12545 #CJK UNIFIED IDEOGRAPH
+ {0xCEAA, 0x69E8}, //12546 #CJK UNIFIED IDEOGRAPH
+ {0xCEAB, 0x85FF}, //12547 #CJK UNIFIED IDEOGRAPH
+ {0xCEAC, 0x90ED}, //12548 #CJK UNIFIED IDEOGRAPH
+ {0xCEAD, 0xF905}, //12549 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCEAE, 0x51A0}, //12550 #CJK UNIFIED IDEOGRAPH
+ {0xCEAF, 0x5B98}, //12551 #CJK UNIFIED IDEOGRAPH
+ {0xCEB0, 0x5BEC}, //12552 #CJK UNIFIED IDEOGRAPH
+ {0xCEB1, 0x6163}, //12553 #CJK UNIFIED IDEOGRAPH
+ {0xCEB2, 0x68FA}, //12554 #CJK UNIFIED IDEOGRAPH
+ {0xCEB3, 0x6B3E}, //12555 #CJK UNIFIED IDEOGRAPH
+ {0xCEB4, 0x704C}, //12556 #CJK UNIFIED IDEOGRAPH
+ {0xCEB5, 0x742F}, //12557 #CJK UNIFIED IDEOGRAPH
+ {0xCEB6, 0x74D8}, //12558 #CJK UNIFIED IDEOGRAPH
+ {0xCEB7, 0x7BA1}, //12559 #CJK UNIFIED IDEOGRAPH
+ {0xCEB8, 0x7F50}, //12560 #CJK UNIFIED IDEOGRAPH
+ {0xCEB9, 0x83C5}, //12561 #CJK UNIFIED IDEOGRAPH
+ {0xCEBA, 0x89C0}, //12562 #CJK UNIFIED IDEOGRAPH
+ {0xCEBB, 0x8CAB}, //12563 #CJK UNIFIED IDEOGRAPH
+ {0xCEBC, 0x95DC}, //12564 #CJK UNIFIED IDEOGRAPH
+ {0xCEBD, 0x9928}, //12565 #CJK UNIFIED IDEOGRAPH
+ {0xCEBE, 0x522E}, //12566 #CJK UNIFIED IDEOGRAPH
+ {0xCEBF, 0x605D}, //12567 #CJK UNIFIED IDEOGRAPH
+ {0xCEC0, 0x62EC}, //12568 #CJK UNIFIED IDEOGRAPH
+ {0xCEC1, 0x9002}, //12569 #CJK UNIFIED IDEOGRAPH
+ {0xCEC2, 0x4F8A}, //12570 #CJK UNIFIED IDEOGRAPH
+ {0xCEC3, 0x5149}, //12571 #CJK UNIFIED IDEOGRAPH
+ {0xCEC4, 0x5321}, //12572 #CJK UNIFIED IDEOGRAPH
+ {0xCEC5, 0x58D9}, //12573 #CJK UNIFIED IDEOGRAPH
+ {0xCEC6, 0x5EE3}, //12574 #CJK UNIFIED IDEOGRAPH
+ {0xCEC7, 0x66E0}, //12575 #CJK UNIFIED IDEOGRAPH
+ {0xCEC8, 0x6D38}, //12576 #CJK UNIFIED IDEOGRAPH
+ {0xCEC9, 0x709A}, //12577 #CJK UNIFIED IDEOGRAPH
+ {0xCECA, 0x72C2}, //12578 #CJK UNIFIED IDEOGRAPH
+ {0xCECB, 0x73D6}, //12579 #CJK UNIFIED IDEOGRAPH
+ {0xCECC, 0x7B50}, //12580 #CJK UNIFIED IDEOGRAPH
+ {0xCECD, 0x80F1}, //12581 #CJK UNIFIED IDEOGRAPH
+ {0xCECE, 0x945B}, //12582 #CJK UNIFIED IDEOGRAPH
+ {0xCECF, 0x5366}, //12583 #CJK UNIFIED IDEOGRAPH
+ {0xCED0, 0x639B}, //12584 #CJK UNIFIED IDEOGRAPH
+ {0xCED1, 0x7F6B}, //12585 #CJK UNIFIED IDEOGRAPH
+ {0xCED2, 0x4E56}, //12586 #CJK UNIFIED IDEOGRAPH
+ {0xCED3, 0x5080}, //12587 #CJK UNIFIED IDEOGRAPH
+ {0xCED4, 0x584A}, //12588 #CJK UNIFIED IDEOGRAPH
+ {0xCED5, 0x58DE}, //12589 #CJK UNIFIED IDEOGRAPH
+ {0xCED6, 0x602A}, //12590 #CJK UNIFIED IDEOGRAPH
+ {0xCED7, 0x6127}, //12591 #CJK UNIFIED IDEOGRAPH
+ {0xCED8, 0x62D0}, //12592 #CJK UNIFIED IDEOGRAPH
+ {0xCED9, 0x69D0}, //12593 #CJK UNIFIED IDEOGRAPH
+ {0xCEDA, 0x9B41}, //12594 #CJK UNIFIED IDEOGRAPH
+ {0xCEDB, 0x5B8F}, //12595 #CJK UNIFIED IDEOGRAPH
+ {0xCEDC, 0x7D18}, //12596 #CJK UNIFIED IDEOGRAPH
+ {0xCEDD, 0x80B1}, //12597 #CJK UNIFIED IDEOGRAPH
+ {0xCEDE, 0x8F5F}, //12598 #CJK UNIFIED IDEOGRAPH
+ {0xCEDF, 0x4EA4}, //12599 #CJK UNIFIED IDEOGRAPH
+ {0xCEE0, 0x50D1}, //12600 #CJK UNIFIED IDEOGRAPH
+ {0xCEE1, 0x54AC}, //12601 #CJK UNIFIED IDEOGRAPH
+ {0xCEE2, 0x55AC}, //12602 #CJK UNIFIED IDEOGRAPH
+ {0xCEE3, 0x5B0C}, //12603 #CJK UNIFIED IDEOGRAPH
+ {0xCEE4, 0x5DA0}, //12604 #CJK UNIFIED IDEOGRAPH
+ {0xCEE5, 0x5DE7}, //12605 #CJK UNIFIED IDEOGRAPH
+ {0xCEE6, 0x652A}, //12606 #CJK UNIFIED IDEOGRAPH
+ {0xCEE7, 0x654E}, //12607 #CJK UNIFIED IDEOGRAPH
+ {0xCEE8, 0x6821}, //12608 #CJK UNIFIED IDEOGRAPH
+ {0xCEE9, 0x6A4B}, //12609 #CJK UNIFIED IDEOGRAPH
+ {0xCEEA, 0x72E1}, //12610 #CJK UNIFIED IDEOGRAPH
+ {0xCEEB, 0x768E}, //12611 #CJK UNIFIED IDEOGRAPH
+ {0xCEEC, 0x77EF}, //12612 #CJK UNIFIED IDEOGRAPH
+ {0xCEED, 0x7D5E}, //12613 #CJK UNIFIED IDEOGRAPH
+ {0xCEEE, 0x7FF9}, //12614 #CJK UNIFIED IDEOGRAPH
+ {0xCEEF, 0x81A0}, //12615 #CJK UNIFIED IDEOGRAPH
+ {0xCEF0, 0x854E}, //12616 #CJK UNIFIED IDEOGRAPH
+ {0xCEF1, 0x86DF}, //12617 #CJK UNIFIED IDEOGRAPH
+ {0xCEF2, 0x8F03}, //12618 #CJK UNIFIED IDEOGRAPH
+ {0xCEF3, 0x8F4E}, //12619 #CJK UNIFIED IDEOGRAPH
+ {0xCEF4, 0x90CA}, //12620 #CJK UNIFIED IDEOGRAPH
+ {0xCEF5, 0x9903}, //12621 #CJK UNIFIED IDEOGRAPH
+ {0xCEF6, 0x9A55}, //12622 #CJK UNIFIED IDEOGRAPH
+ {0xCEF7, 0x9BAB}, //12623 #CJK UNIFIED IDEOGRAPH
+ {0xCEF8, 0x4E18}, //12624 #CJK UNIFIED IDEOGRAPH
+ {0xCEF9, 0x4E45}, //12625 #CJK UNIFIED IDEOGRAPH
+ {0xCEFA, 0x4E5D}, //12626 #CJK UNIFIED IDEOGRAPH
+ {0xCEFB, 0x4EC7}, //12627 #CJK UNIFIED IDEOGRAPH
+ {0xCEFC, 0x4FF1}, //12628 #CJK UNIFIED IDEOGRAPH
+ {0xCEFD, 0x5177}, //12629 #CJK UNIFIED IDEOGRAPH
+ {0xCEFE, 0x52FE}, //12630 #CJK UNIFIED IDEOGRAPH
+ {0xCFA1, 0x5340}, //12631 #CJK UNIFIED IDEOGRAPH
+ {0xCFA2, 0x53E3}, //12632 #CJK UNIFIED IDEOGRAPH
+ {0xCFA3, 0x53E5}, //12633 #CJK UNIFIED IDEOGRAPH
+ {0xCFA4, 0x548E}, //12634 #CJK UNIFIED IDEOGRAPH
+ {0xCFA5, 0x5614}, //12635 #CJK UNIFIED IDEOGRAPH
+ {0xCFA6, 0x5775}, //12636 #CJK UNIFIED IDEOGRAPH
+ {0xCFA7, 0x57A2}, //12637 #CJK UNIFIED IDEOGRAPH
+ {0xCFA8, 0x5BC7}, //12638 #CJK UNIFIED IDEOGRAPH
+ {0xCFA9, 0x5D87}, //12639 #CJK UNIFIED IDEOGRAPH
+ {0xCFAA, 0x5ED0}, //12640 #CJK UNIFIED IDEOGRAPH
+ {0xCFAB, 0x61FC}, //12641 #CJK UNIFIED IDEOGRAPH
+ {0xCFAC, 0x62D8}, //12642 #CJK UNIFIED IDEOGRAPH
+ {0xCFAD, 0x6551}, //12643 #CJK UNIFIED IDEOGRAPH
+ {0xCFAE, 0x67B8}, //12644 #CJK UNIFIED IDEOGRAPH
+ {0xCFAF, 0x67E9}, //12645 #CJK UNIFIED IDEOGRAPH
+ {0xCFB0, 0x69CB}, //12646 #CJK UNIFIED IDEOGRAPH
+ {0xCFB1, 0x6B50}, //12647 #CJK UNIFIED IDEOGRAPH
+ {0xCFB2, 0x6BC6}, //12648 #CJK UNIFIED IDEOGRAPH
+ {0xCFB3, 0x6BEC}, //12649 #CJK UNIFIED IDEOGRAPH
+ {0xCFB4, 0x6C42}, //12650 #CJK UNIFIED IDEOGRAPH
+ {0xCFB5, 0x6E9D}, //12651 #CJK UNIFIED IDEOGRAPH
+ {0xCFB6, 0x7078}, //12652 #CJK UNIFIED IDEOGRAPH
+ {0xCFB7, 0x72D7}, //12653 #CJK UNIFIED IDEOGRAPH
+ {0xCFB8, 0x7396}, //12654 #CJK UNIFIED IDEOGRAPH
+ {0xCFB9, 0x7403}, //12655 #CJK UNIFIED IDEOGRAPH
+ {0xCFBA, 0x77BF}, //12656 #CJK UNIFIED IDEOGRAPH
+ {0xCFBB, 0x77E9}, //12657 #CJK UNIFIED IDEOGRAPH
+ {0xCFBC, 0x7A76}, //12658 #CJK UNIFIED IDEOGRAPH
+ {0xCFBD, 0x7D7F}, //12659 #CJK UNIFIED IDEOGRAPH
+ {0xCFBE, 0x8009}, //12660 #CJK UNIFIED IDEOGRAPH
+ {0xCFBF, 0x81FC}, //12661 #CJK UNIFIED IDEOGRAPH
+ {0xCFC0, 0x8205}, //12662 #CJK UNIFIED IDEOGRAPH
+ {0xCFC1, 0x820A}, //12663 #CJK UNIFIED IDEOGRAPH
+ {0xCFC2, 0x82DF}, //12664 #CJK UNIFIED IDEOGRAPH
+ {0xCFC3, 0x8862}, //12665 #CJK UNIFIED IDEOGRAPH
+ {0xCFC4, 0x8B33}, //12666 #CJK UNIFIED IDEOGRAPH
+ {0xCFC5, 0x8CFC}, //12667 #CJK UNIFIED IDEOGRAPH
+ {0xCFC6, 0x8EC0}, //12668 #CJK UNIFIED IDEOGRAPH
+ {0xCFC7, 0x9011}, //12669 #CJK UNIFIED IDEOGRAPH
+ {0xCFC8, 0x90B1}, //12670 #CJK UNIFIED IDEOGRAPH
+ {0xCFC9, 0x9264}, //12671 #CJK UNIFIED IDEOGRAPH
+ {0xCFCA, 0x92B6}, //12672 #CJK UNIFIED IDEOGRAPH
+ {0xCFCB, 0x99D2}, //12673 #CJK UNIFIED IDEOGRAPH
+ {0xCFCC, 0x9A45}, //12674 #CJK UNIFIED IDEOGRAPH
+ {0xCFCD, 0x9CE9}, //12675 #CJK UNIFIED IDEOGRAPH
+ {0xCFCE, 0x9DD7}, //12676 #CJK UNIFIED IDEOGRAPH
+ {0xCFCF, 0x9F9C}, //12677 #CJK UNIFIED IDEOGRAPH
+ {0xCFD0, 0x570B}, //12678 #CJK UNIFIED IDEOGRAPH
+ {0xCFD1, 0x5C40}, //12679 #CJK UNIFIED IDEOGRAPH
+ {0xCFD2, 0x83CA}, //12680 #CJK UNIFIED IDEOGRAPH
+ {0xCFD3, 0x97A0}, //12681 #CJK UNIFIED IDEOGRAPH
+ {0xCFD4, 0x97AB}, //12682 #CJK UNIFIED IDEOGRAPH
+ {0xCFD5, 0x9EB4}, //12683 #CJK UNIFIED IDEOGRAPH
+ {0xCFD6, 0x541B}, //12684 #CJK UNIFIED IDEOGRAPH
+ {0xCFD7, 0x7A98}, //12685 #CJK UNIFIED IDEOGRAPH
+ {0xCFD8, 0x7FA4}, //12686 #CJK UNIFIED IDEOGRAPH
+ {0xCFD9, 0x88D9}, //12687 #CJK UNIFIED IDEOGRAPH
+ {0xCFDA, 0x8ECD}, //12688 #CJK UNIFIED IDEOGRAPH
+ {0xCFDB, 0x90E1}, //12689 #CJK UNIFIED IDEOGRAPH
+ {0xCFDC, 0x5800}, //12690 #CJK UNIFIED IDEOGRAPH
+ {0xCFDD, 0x5C48}, //12691 #CJK UNIFIED IDEOGRAPH
+ {0xCFDE, 0x6398}, //12692 #CJK UNIFIED IDEOGRAPH
+ {0xCFDF, 0x7A9F}, //12693 #CJK UNIFIED IDEOGRAPH
+ {0xCFE0, 0x5BAE}, //12694 #CJK UNIFIED IDEOGRAPH
+ {0xCFE1, 0x5F13}, //12695 #CJK UNIFIED IDEOGRAPH
+ {0xCFE2, 0x7A79}, //12696 #CJK UNIFIED IDEOGRAPH
+ {0xCFE3, 0x7AAE}, //12697 #CJK UNIFIED IDEOGRAPH
+ {0xCFE4, 0x828E}, //12698 #CJK UNIFIED IDEOGRAPH
+ {0xCFE5, 0x8EAC}, //12699 #CJK UNIFIED IDEOGRAPH
+ {0xCFE6, 0x5026}, //12700 #CJK UNIFIED IDEOGRAPH
+ {0xCFE7, 0x5238}, //12701 #CJK UNIFIED IDEOGRAPH
+ {0xCFE8, 0x52F8}, //12702 #CJK UNIFIED IDEOGRAPH
+ {0xCFE9, 0x5377}, //12703 #CJK UNIFIED IDEOGRAPH
+ {0xCFEA, 0x5708}, //12704 #CJK UNIFIED IDEOGRAPH
+ {0xCFEB, 0x62F3}, //12705 #CJK UNIFIED IDEOGRAPH
+ {0xCFEC, 0x6372}, //12706 #CJK UNIFIED IDEOGRAPH
+ {0xCFED, 0x6B0A}, //12707 #CJK UNIFIED IDEOGRAPH
+ {0xCFEE, 0x6DC3}, //12708 #CJK UNIFIED IDEOGRAPH
+ {0xCFEF, 0x7737}, //12709 #CJK UNIFIED IDEOGRAPH
+ {0xCFF0, 0x53A5}, //12710 #CJK UNIFIED IDEOGRAPH
+ {0xCFF1, 0x7357}, //12711 #CJK UNIFIED IDEOGRAPH
+ {0xCFF2, 0x8568}, //12712 #CJK UNIFIED IDEOGRAPH
+ {0xCFF3, 0x8E76}, //12713 #CJK UNIFIED IDEOGRAPH
+ {0xCFF4, 0x95D5}, //12714 #CJK UNIFIED IDEOGRAPH
+ {0xCFF5, 0x673A}, //12715 #CJK UNIFIED IDEOGRAPH
+ {0xCFF6, 0x6AC3}, //12716 #CJK UNIFIED IDEOGRAPH
+ {0xCFF7, 0x6F70}, //12717 #CJK UNIFIED IDEOGRAPH
+ {0xCFF8, 0x8A6D}, //12718 #CJK UNIFIED IDEOGRAPH
+ {0xCFF9, 0x8ECC}, //12719 #CJK UNIFIED IDEOGRAPH
+ {0xCFFA, 0x994B}, //12720 #CJK UNIFIED IDEOGRAPH
+ {0xCFFB, 0xF906}, //12721 #CJK COMPATIBILITY IDEOGRAPH
+ {0xCFFC, 0x6677}, //12722 #CJK UNIFIED IDEOGRAPH
+ {0xCFFD, 0x6B78}, //12723 #CJK UNIFIED IDEOGRAPH
+ {0xCFFE, 0x8CB4}, //12724 #CJK UNIFIED IDEOGRAPH
+ {0xD0A1, 0x9B3C}, //12725 #CJK UNIFIED IDEOGRAPH
+ {0xD0A2, 0xF907}, //12726 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD0A3, 0x53EB}, //12727 #CJK UNIFIED IDEOGRAPH
+ {0xD0A4, 0x572D}, //12728 #CJK UNIFIED IDEOGRAPH
+ {0xD0A5, 0x594E}, //12729 #CJK UNIFIED IDEOGRAPH
+ {0xD0A6, 0x63C6}, //12730 #CJK UNIFIED IDEOGRAPH
+ {0xD0A7, 0x69FB}, //12731 #CJK UNIFIED IDEOGRAPH
+ {0xD0A8, 0x73EA}, //12732 #CJK UNIFIED IDEOGRAPH
+ {0xD0A9, 0x7845}, //12733 #CJK UNIFIED IDEOGRAPH
+ {0xD0AA, 0x7ABA}, //12734 #CJK UNIFIED IDEOGRAPH
+ {0xD0AB, 0x7AC5}, //12735 #CJK UNIFIED IDEOGRAPH
+ {0xD0AC, 0x7CFE}, //12736 #CJK UNIFIED IDEOGRAPH
+ {0xD0AD, 0x8475}, //12737 #CJK UNIFIED IDEOGRAPH
+ {0xD0AE, 0x898F}, //12738 #CJK UNIFIED IDEOGRAPH
+ {0xD0AF, 0x8D73}, //12739 #CJK UNIFIED IDEOGRAPH
+ {0xD0B0, 0x9035}, //12740 #CJK UNIFIED IDEOGRAPH
+ {0xD0B1, 0x95A8}, //12741 #CJK UNIFIED IDEOGRAPH
+ {0xD0B2, 0x52FB}, //12742 #CJK UNIFIED IDEOGRAPH
+ {0xD0B3, 0x5747}, //12743 #CJK UNIFIED IDEOGRAPH
+ {0xD0B4, 0x7547}, //12744 #CJK UNIFIED IDEOGRAPH
+ {0xD0B5, 0x7B60}, //12745 #CJK UNIFIED IDEOGRAPH
+ {0xD0B6, 0x83CC}, //12746 #CJK UNIFIED IDEOGRAPH
+ {0xD0B7, 0x921E}, //12747 #CJK UNIFIED IDEOGRAPH
+ {0xD0B8, 0xF908}, //12748 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD0B9, 0x6A58}, //12749 #CJK UNIFIED IDEOGRAPH
+ {0xD0BA, 0x514B}, //12750 #CJK UNIFIED IDEOGRAPH
+ {0xD0BB, 0x524B}, //12751 #CJK UNIFIED IDEOGRAPH
+ {0xD0BC, 0x5287}, //12752 #CJK UNIFIED IDEOGRAPH
+ {0xD0BD, 0x621F}, //12753 #CJK UNIFIED IDEOGRAPH
+ {0xD0BE, 0x68D8}, //12754 #CJK UNIFIED IDEOGRAPH
+ {0xD0BF, 0x6975}, //12755 #CJK UNIFIED IDEOGRAPH
+ {0xD0C0, 0x9699}, //12756 #CJK UNIFIED IDEOGRAPH
+ {0xD0C1, 0x50C5}, //12757 #CJK UNIFIED IDEOGRAPH
+ {0xD0C2, 0x52A4}, //12758 #CJK UNIFIED IDEOGRAPH
+ {0xD0C3, 0x52E4}, //12759 #CJK UNIFIED IDEOGRAPH
+ {0xD0C4, 0x61C3}, //12760 #CJK UNIFIED IDEOGRAPH
+ {0xD0C5, 0x65A4}, //12761 #CJK UNIFIED IDEOGRAPH
+ {0xD0C6, 0x6839}, //12762 #CJK UNIFIED IDEOGRAPH
+ {0xD0C7, 0x69FF}, //12763 #CJK UNIFIED IDEOGRAPH
+ {0xD0C8, 0x747E}, //12764 #CJK UNIFIED IDEOGRAPH
+ {0xD0C9, 0x7B4B}, //12765 #CJK UNIFIED IDEOGRAPH
+ {0xD0CA, 0x82B9}, //12766 #CJK UNIFIED IDEOGRAPH
+ {0xD0CB, 0x83EB}, //12767 #CJK UNIFIED IDEOGRAPH
+ {0xD0CC, 0x89B2}, //12768 #CJK UNIFIED IDEOGRAPH
+ {0xD0CD, 0x8B39}, //12769 #CJK UNIFIED IDEOGRAPH
+ {0xD0CE, 0x8FD1}, //12770 #CJK UNIFIED IDEOGRAPH
+ {0xD0CF, 0x9949}, //12771 #CJK UNIFIED IDEOGRAPH
+ {0xD0D0, 0xF909}, //12772 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD0D1, 0x4ECA}, //12773 #CJK UNIFIED IDEOGRAPH
+ {0xD0D2, 0x5997}, //12774 #CJK UNIFIED IDEOGRAPH
+ {0xD0D3, 0x64D2}, //12775 #CJK UNIFIED IDEOGRAPH
+ {0xD0D4, 0x6611}, //12776 #CJK UNIFIED IDEOGRAPH
+ {0xD0D5, 0x6A8E}, //12777 #CJK UNIFIED IDEOGRAPH
+ {0xD0D6, 0x7434}, //12778 #CJK UNIFIED IDEOGRAPH
+ {0xD0D7, 0x7981}, //12779 #CJK UNIFIED IDEOGRAPH
+ {0xD0D8, 0x79BD}, //12780 #CJK UNIFIED IDEOGRAPH
+ {0xD0D9, 0x82A9}, //12781 #CJK UNIFIED IDEOGRAPH
+ {0xD0DA, 0x887E}, //12782 #CJK UNIFIED IDEOGRAPH
+ {0xD0DB, 0x887F}, //12783 #CJK UNIFIED IDEOGRAPH
+ {0xD0DC, 0x895F}, //12784 #CJK UNIFIED IDEOGRAPH
+ {0xD0DD, 0xF90A}, //12785 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD0DE, 0x9326}, //12786 #CJK UNIFIED IDEOGRAPH
+ {0xD0DF, 0x4F0B}, //12787 #CJK UNIFIED IDEOGRAPH
+ {0xD0E0, 0x53CA}, //12788 #CJK UNIFIED IDEOGRAPH
+ {0xD0E1, 0x6025}, //12789 #CJK UNIFIED IDEOGRAPH
+ {0xD0E2, 0x6271}, //12790 #CJK UNIFIED IDEOGRAPH
+ {0xD0E3, 0x6C72}, //12791 #CJK UNIFIED IDEOGRAPH
+ {0xD0E4, 0x7D1A}, //12792 #CJK UNIFIED IDEOGRAPH
+ {0xD0E5, 0x7D66}, //12793 #CJK UNIFIED IDEOGRAPH
+ {0xD0E6, 0x4E98}, //12794 #CJK UNIFIED IDEOGRAPH
+ {0xD0E7, 0x5162}, //12795 #CJK UNIFIED IDEOGRAPH
+ {0xD0E8, 0x77DC}, //12796 #CJK UNIFIED IDEOGRAPH
+ {0xD0E9, 0x80AF}, //12797 #CJK UNIFIED IDEOGRAPH
+ {0xD0EA, 0x4F01}, //12798 #CJK UNIFIED IDEOGRAPH
+ {0xD0EB, 0x4F0E}, //12799 #CJK UNIFIED IDEOGRAPH
+ {0xD0EC, 0x5176}, //12800 #CJK UNIFIED IDEOGRAPH
+ {0xD0ED, 0x5180}, //12801 #CJK UNIFIED IDEOGRAPH
+ {0xD0EE, 0x55DC}, //12802 #CJK UNIFIED IDEOGRAPH
+ {0xD0EF, 0x5668}, //12803 #CJK UNIFIED IDEOGRAPH
+ {0xD0F0, 0x573B}, //12804 #CJK UNIFIED IDEOGRAPH
+ {0xD0F1, 0x57FA}, //12805 #CJK UNIFIED IDEOGRAPH
+ {0xD0F2, 0x57FC}, //12806 #CJK UNIFIED IDEOGRAPH
+ {0xD0F3, 0x5914}, //12807 #CJK UNIFIED IDEOGRAPH
+ {0xD0F4, 0x5947}, //12808 #CJK UNIFIED IDEOGRAPH
+ {0xD0F5, 0x5993}, //12809 #CJK UNIFIED IDEOGRAPH
+ {0xD0F6, 0x5BC4}, //12810 #CJK UNIFIED IDEOGRAPH
+ {0xD0F7, 0x5C90}, //12811 #CJK UNIFIED IDEOGRAPH
+ {0xD0F8, 0x5D0E}, //12812 #CJK UNIFIED IDEOGRAPH
+ {0xD0F9, 0x5DF1}, //12813 #CJK UNIFIED IDEOGRAPH
+ {0xD0FA, 0x5E7E}, //12814 #CJK UNIFIED IDEOGRAPH
+ {0xD0FB, 0x5FCC}, //12815 #CJK UNIFIED IDEOGRAPH
+ {0xD0FC, 0x6280}, //12816 #CJK UNIFIED IDEOGRAPH
+ {0xD0FD, 0x65D7}, //12817 #CJK UNIFIED IDEOGRAPH
+ {0xD0FE, 0x65E3}, //12818 #CJK UNIFIED IDEOGRAPH
+ {0xD1A1, 0x671E}, //12819 #CJK UNIFIED IDEOGRAPH
+ {0xD1A2, 0x671F}, //12820 #CJK UNIFIED IDEOGRAPH
+ {0xD1A3, 0x675E}, //12821 #CJK UNIFIED IDEOGRAPH
+ {0xD1A4, 0x68CB}, //12822 #CJK UNIFIED IDEOGRAPH
+ {0xD1A5, 0x68C4}, //12823 #CJK UNIFIED IDEOGRAPH
+ {0xD1A6, 0x6A5F}, //12824 #CJK UNIFIED IDEOGRAPH
+ {0xD1A7, 0x6B3A}, //12825 #CJK UNIFIED IDEOGRAPH
+ {0xD1A8, 0x6C23}, //12826 #CJK UNIFIED IDEOGRAPH
+ {0xD1A9, 0x6C7D}, //12827 #CJK UNIFIED IDEOGRAPH
+ {0xD1AA, 0x6C82}, //12828 #CJK UNIFIED IDEOGRAPH
+ {0xD1AB, 0x6DC7}, //12829 #CJK UNIFIED IDEOGRAPH
+ {0xD1AC, 0x7398}, //12830 #CJK UNIFIED IDEOGRAPH
+ {0xD1AD, 0x7426}, //12831 #CJK UNIFIED IDEOGRAPH
+ {0xD1AE, 0x742A}, //12832 #CJK UNIFIED IDEOGRAPH
+ {0xD1AF, 0x7482}, //12833 #CJK UNIFIED IDEOGRAPH
+ {0xD1B0, 0x74A3}, //12834 #CJK UNIFIED IDEOGRAPH
+ {0xD1B1, 0x7578}, //12835 #CJK UNIFIED IDEOGRAPH
+ {0xD1B2, 0x757F}, //12836 #CJK UNIFIED IDEOGRAPH
+ {0xD1B3, 0x7881}, //12837 #CJK UNIFIED IDEOGRAPH
+ {0xD1B4, 0x78EF}, //12838 #CJK UNIFIED IDEOGRAPH
+ {0xD1B5, 0x7941}, //12839 #CJK UNIFIED IDEOGRAPH
+ {0xD1B6, 0x7947}, //12840 #CJK UNIFIED IDEOGRAPH
+ {0xD1B7, 0x7948}, //12841 #CJK UNIFIED IDEOGRAPH
+ {0xD1B8, 0x797A}, //12842 #CJK UNIFIED IDEOGRAPH
+ {0xD1B9, 0x7B95}, //12843 #CJK UNIFIED IDEOGRAPH
+ {0xD1BA, 0x7D00}, //12844 #CJK UNIFIED IDEOGRAPH
+ {0xD1BB, 0x7DBA}, //12845 #CJK UNIFIED IDEOGRAPH
+ {0xD1BC, 0x7F88}, //12846 #CJK UNIFIED IDEOGRAPH
+ {0xD1BD, 0x8006}, //12847 #CJK UNIFIED IDEOGRAPH
+ {0xD1BE, 0x802D}, //12848 #CJK UNIFIED IDEOGRAPH
+ {0xD1BF, 0x808C}, //12849 #CJK UNIFIED IDEOGRAPH
+ {0xD1C0, 0x8A18}, //12850 #CJK UNIFIED IDEOGRAPH
+ {0xD1C1, 0x8B4F}, //12851 #CJK UNIFIED IDEOGRAPH
+ {0xD1C2, 0x8C48}, //12852 #CJK UNIFIED IDEOGRAPH
+ {0xD1C3, 0x8D77}, //12853 #CJK UNIFIED IDEOGRAPH
+ {0xD1C4, 0x9321}, //12854 #CJK UNIFIED IDEOGRAPH
+ {0xD1C5, 0x9324}, //12855 #CJK UNIFIED IDEOGRAPH
+ {0xD1C6, 0x98E2}, //12856 #CJK UNIFIED IDEOGRAPH
+ {0xD1C7, 0x9951}, //12857 #CJK UNIFIED IDEOGRAPH
+ {0xD1C8, 0x9A0E}, //12858 #CJK UNIFIED IDEOGRAPH
+ {0xD1C9, 0x9A0F}, //12859 #CJK UNIFIED IDEOGRAPH
+ {0xD1CA, 0x9A65}, //12860 #CJK UNIFIED IDEOGRAPH
+ {0xD1CB, 0x9E92}, //12861 #CJK UNIFIED IDEOGRAPH
+ {0xD1CC, 0x7DCA}, //12862 #CJK UNIFIED IDEOGRAPH
+ {0xD1CD, 0x4F76}, //12863 #CJK UNIFIED IDEOGRAPH
+ {0xD1CE, 0x5409}, //12864 #CJK UNIFIED IDEOGRAPH
+ {0xD1CF, 0x62EE}, //12865 #CJK UNIFIED IDEOGRAPH
+ {0xD1D0, 0x6854}, //12866 #CJK UNIFIED IDEOGRAPH
+ {0xD1D1, 0x91D1}, //12867 #CJK UNIFIED IDEOGRAPH
+ {0xD1D2, 0x55AB}, //12868 #CJK UNIFIED IDEOGRAPH
+ {0xD1D3, 0x513A}, //12869 #CJK UNIFIED IDEOGRAPH
+ {0xD1D4, 0xF90B}, //12870 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1D5, 0xF90C}, //12871 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1D6, 0x5A1C}, //12872 #CJK UNIFIED IDEOGRAPH
+ {0xD1D7, 0x61E6}, //12873 #CJK UNIFIED IDEOGRAPH
+ {0xD1D8, 0xF90D}, //12874 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1D9, 0x62CF}, //12875 #CJK UNIFIED IDEOGRAPH
+ {0xD1DA, 0x62FF}, //12876 #CJK UNIFIED IDEOGRAPH
+ {0xD1DB, 0xF90E}, //12877 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1DC, 0xF90F}, //12878 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1DD, 0xF910}, //12879 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1DE, 0xF911}, //12880 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1DF, 0xF912}, //12881 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E0, 0xF913}, //12882 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E1, 0x90A3}, //12883 #CJK UNIFIED IDEOGRAPH
+ {0xD1E2, 0xF914}, //12884 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E3, 0xF915}, //12885 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E4, 0xF916}, //12886 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E5, 0xF917}, //12887 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E6, 0xF918}, //12888 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E7, 0x8AFE}, //12889 #CJK UNIFIED IDEOGRAPH
+ {0xD1E8, 0xF919}, //12890 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1E9, 0xF91A}, //12891 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1EA, 0xF91B}, //12892 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1EB, 0xF91C}, //12893 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1EC, 0x6696}, //12894 #CJK UNIFIED IDEOGRAPH
+ {0xD1ED, 0xF91D}, //12895 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1EE, 0x7156}, //12896 #CJK UNIFIED IDEOGRAPH
+ {0xD1EF, 0xF91E}, //12897 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1F0, 0xF91F}, //12898 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1F1, 0x96E3}, //12899 #CJK UNIFIED IDEOGRAPH
+ {0xD1F2, 0xF920}, //12900 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1F3, 0x634F}, //12901 #CJK UNIFIED IDEOGRAPH
+ {0xD1F4, 0x637A}, //12902 #CJK UNIFIED IDEOGRAPH
+ {0xD1F5, 0x5357}, //12903 #CJK UNIFIED IDEOGRAPH
+ {0xD1F6, 0xF921}, //12904 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1F7, 0x678F}, //12905 #CJK UNIFIED IDEOGRAPH
+ {0xD1F8, 0x6960}, //12906 #CJK UNIFIED IDEOGRAPH
+ {0xD1F9, 0x6E73}, //12907 #CJK UNIFIED IDEOGRAPH
+ {0xD1FA, 0xF922}, //12908 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1FB, 0x7537}, //12909 #CJK UNIFIED IDEOGRAPH
+ {0xD1FC, 0xF923}, //12910 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1FD, 0xF924}, //12911 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD1FE, 0xF925}, //12912 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2A1, 0x7D0D}, //12913 #CJK UNIFIED IDEOGRAPH
+ {0xD2A2, 0xF926}, //12914 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2A3, 0xF927}, //12915 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2A4, 0x8872}, //12916 #CJK UNIFIED IDEOGRAPH
+ {0xD2A5, 0x56CA}, //12917 #CJK UNIFIED IDEOGRAPH
+ {0xD2A6, 0x5A18}, //12918 #CJK UNIFIED IDEOGRAPH
+ {0xD2A7, 0xF928}, //12919 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2A8, 0xF929}, //12920 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2A9, 0xF92A}, //12921 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2AA, 0xF92B}, //12922 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2AB, 0xF92C}, //12923 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2AC, 0x4E43}, //12924 #CJK UNIFIED IDEOGRAPH
+ {0xD2AD, 0xF92D}, //12925 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2AE, 0x5167}, //12926 #CJK UNIFIED IDEOGRAPH
+ {0xD2AF, 0x5948}, //12927 #CJK UNIFIED IDEOGRAPH
+ {0xD2B0, 0x67F0}, //12928 #CJK UNIFIED IDEOGRAPH
+ {0xD2B1, 0x8010}, //12929 #CJK UNIFIED IDEOGRAPH
+ {0xD2B2, 0xF92E}, //12930 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2B3, 0x5973}, //12931 #CJK UNIFIED IDEOGRAPH
+ {0xD2B4, 0x5E74}, //12932 #CJK UNIFIED IDEOGRAPH
+ {0xD2B5, 0x649A}, //12933 #CJK UNIFIED IDEOGRAPH
+ {0xD2B6, 0x79CA}, //12934 #CJK UNIFIED IDEOGRAPH
+ {0xD2B7, 0x5FF5}, //12935 #CJK UNIFIED IDEOGRAPH
+ {0xD2B8, 0x606C}, //12936 #CJK UNIFIED IDEOGRAPH
+ {0xD2B9, 0x62C8}, //12937 #CJK UNIFIED IDEOGRAPH
+ {0xD2BA, 0x637B}, //12938 #CJK UNIFIED IDEOGRAPH
+ {0xD2BB, 0x5BE7}, //12939 #CJK UNIFIED IDEOGRAPH
+ {0xD2BC, 0x5BD7}, //12940 #CJK UNIFIED IDEOGRAPH
+ {0xD2BD, 0x52AA}, //12941 #CJK UNIFIED IDEOGRAPH
+ {0xD2BE, 0xF92F}, //12942 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2BF, 0x5974}, //12943 #CJK UNIFIED IDEOGRAPH
+ {0xD2C0, 0x5F29}, //12944 #CJK UNIFIED IDEOGRAPH
+ {0xD2C1, 0x6012}, //12945 #CJK UNIFIED IDEOGRAPH
+ {0xD2C2, 0xF930}, //12946 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2C3, 0xF931}, //12947 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2C4, 0xF932}, //12948 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2C5, 0x7459}, //12949 #CJK UNIFIED IDEOGRAPH
+ {0xD2C6, 0xF933}, //12950 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2C7, 0xF934}, //12951 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2C8, 0xF935}, //12952 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2C9, 0xF936}, //12953 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2CA, 0xF937}, //12954 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2CB, 0xF938}, //12955 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2CC, 0x99D1}, //12956 #CJK UNIFIED IDEOGRAPH
+ {0xD2CD, 0xF939}, //12957 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2CE, 0xF93A}, //12958 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2CF, 0xF93B}, //12959 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D0, 0xF93C}, //12960 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D1, 0xF93D}, //12961 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D2, 0xF93E}, //12962 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D3, 0xF93F}, //12963 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D4, 0xF940}, //12964 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D5, 0xF941}, //12965 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D6, 0xF942}, //12966 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D7, 0xF943}, //12967 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2D8, 0x6FC3}, //12968 #CJK UNIFIED IDEOGRAPH
+ {0xD2D9, 0xF944}, //12969 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2DA, 0xF945}, //12970 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2DB, 0x81BF}, //12971 #CJK UNIFIED IDEOGRAPH
+ {0xD2DC, 0x8FB2}, //12972 #CJK UNIFIED IDEOGRAPH
+ {0xD2DD, 0x60F1}, //12973 #CJK UNIFIED IDEOGRAPH
+ {0xD2DE, 0xF946}, //12974 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2DF, 0xF947}, //12975 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E0, 0x8166}, //12976 #CJK UNIFIED IDEOGRAPH
+ {0xD2E1, 0xF948}, //12977 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E2, 0xF949}, //12978 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E3, 0x5C3F}, //12979 #CJK UNIFIED IDEOGRAPH
+ {0xD2E4, 0xF94A}, //12980 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E5, 0xF94B}, //12981 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E6, 0xF94C}, //12982 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E7, 0xF94D}, //12983 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E8, 0xF94E}, //12984 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2E9, 0xF94F}, //12985 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2EA, 0xF950}, //12986 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2EB, 0xF951}, //12987 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2EC, 0x5AE9}, //12988 #CJK UNIFIED IDEOGRAPH
+ {0xD2ED, 0x8A25}, //12989 #CJK UNIFIED IDEOGRAPH
+ {0xD2EE, 0x677B}, //12990 #CJK UNIFIED IDEOGRAPH
+ {0xD2EF, 0x7D10}, //12991 #CJK UNIFIED IDEOGRAPH
+ {0xD2F0, 0xF952}, //12992 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F1, 0xF953}, //12993 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F2, 0xF954}, //12994 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F3, 0xF955}, //12995 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F4, 0xF956}, //12996 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F5, 0xF957}, //12997 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F6, 0x80FD}, //12998 #CJK UNIFIED IDEOGRAPH
+ {0xD2F7, 0xF958}, //12999 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F8, 0xF959}, //13000 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD2F9, 0x5C3C}, //13001 #CJK UNIFIED IDEOGRAPH
+ {0xD2FA, 0x6CE5}, //13002 #CJK UNIFIED IDEOGRAPH
+ {0xD2FB, 0x533F}, //13003 #CJK UNIFIED IDEOGRAPH
+ {0xD2FC, 0x6EBA}, //13004 #CJK UNIFIED IDEOGRAPH
+ {0xD2FD, 0x591A}, //13005 #CJK UNIFIED IDEOGRAPH
+ {0xD2FE, 0x8336}, //13006 #CJK UNIFIED IDEOGRAPH
+ {0xD3A1, 0x4E39}, //13007 #CJK UNIFIED IDEOGRAPH
+ {0xD3A2, 0x4EB6}, //13008 #CJK UNIFIED IDEOGRAPH
+ {0xD3A3, 0x4F46}, //13009 #CJK UNIFIED IDEOGRAPH
+ {0xD3A4, 0x55AE}, //13010 #CJK UNIFIED IDEOGRAPH
+ {0xD3A5, 0x5718}, //13011 #CJK UNIFIED IDEOGRAPH
+ {0xD3A6, 0x58C7}, //13012 #CJK UNIFIED IDEOGRAPH
+ {0xD3A7, 0x5F56}, //13013 #CJK UNIFIED IDEOGRAPH
+ {0xD3A8, 0x65B7}, //13014 #CJK UNIFIED IDEOGRAPH
+ {0xD3A9, 0x65E6}, //13015 #CJK UNIFIED IDEOGRAPH
+ {0xD3AA, 0x6A80}, //13016 #CJK UNIFIED IDEOGRAPH
+ {0xD3AB, 0x6BB5}, //13017 #CJK UNIFIED IDEOGRAPH
+ {0xD3AC, 0x6E4D}, //13018 #CJK UNIFIED IDEOGRAPH
+ {0xD3AD, 0x77ED}, //13019 #CJK UNIFIED IDEOGRAPH
+ {0xD3AE, 0x7AEF}, //13020 #CJK UNIFIED IDEOGRAPH
+ {0xD3AF, 0x7C1E}, //13021 #CJK UNIFIED IDEOGRAPH
+ {0xD3B0, 0x7DDE}, //13022 #CJK UNIFIED IDEOGRAPH
+ {0xD3B1, 0x86CB}, //13023 #CJK UNIFIED IDEOGRAPH
+ {0xD3B2, 0x8892}, //13024 #CJK UNIFIED IDEOGRAPH
+ {0xD3B3, 0x9132}, //13025 #CJK UNIFIED IDEOGRAPH
+ {0xD3B4, 0x935B}, //13026 #CJK UNIFIED IDEOGRAPH
+ {0xD3B5, 0x64BB}, //13027 #CJK UNIFIED IDEOGRAPH
+ {0xD3B6, 0x6FBE}, //13028 #CJK UNIFIED IDEOGRAPH
+ {0xD3B7, 0x737A}, //13029 #CJK UNIFIED IDEOGRAPH
+ {0xD3B8, 0x75B8}, //13030 #CJK UNIFIED IDEOGRAPH
+ {0xD3B9, 0x9054}, //13031 #CJK UNIFIED IDEOGRAPH
+ {0xD3BA, 0x5556}, //13032 #CJK UNIFIED IDEOGRAPH
+ {0xD3BB, 0x574D}, //13033 #CJK UNIFIED IDEOGRAPH
+ {0xD3BC, 0x61BA}, //13034 #CJK UNIFIED IDEOGRAPH
+ {0xD3BD, 0x64D4}, //13035 #CJK UNIFIED IDEOGRAPH
+ {0xD3BE, 0x66C7}, //13036 #CJK UNIFIED IDEOGRAPH
+ {0xD3BF, 0x6DE1}, //13037 #CJK UNIFIED IDEOGRAPH
+ {0xD3C0, 0x6E5B}, //13038 #CJK UNIFIED IDEOGRAPH
+ {0xD3C1, 0x6F6D}, //13039 #CJK UNIFIED IDEOGRAPH
+ {0xD3C2, 0x6FB9}, //13040 #CJK UNIFIED IDEOGRAPH
+ {0xD3C3, 0x75F0}, //13041 #CJK UNIFIED IDEOGRAPH
+ {0xD3C4, 0x8043}, //13042 #CJK UNIFIED IDEOGRAPH
+ {0xD3C5, 0x81BD}, //13043 #CJK UNIFIED IDEOGRAPH
+ {0xD3C6, 0x8541}, //13044 #CJK UNIFIED IDEOGRAPH
+ {0xD3C7, 0x8983}, //13045 #CJK UNIFIED IDEOGRAPH
+ {0xD3C8, 0x8AC7}, //13046 #CJK UNIFIED IDEOGRAPH
+ {0xD3C9, 0x8B5A}, //13047 #CJK UNIFIED IDEOGRAPH
+ {0xD3CA, 0x931F}, //13048 #CJK UNIFIED IDEOGRAPH
+ {0xD3CB, 0x6C93}, //13049 #CJK UNIFIED IDEOGRAPH
+ {0xD3CC, 0x7553}, //13050 #CJK UNIFIED IDEOGRAPH
+ {0xD3CD, 0x7B54}, //13051 #CJK UNIFIED IDEOGRAPH
+ {0xD3CE, 0x8E0F}, //13052 #CJK UNIFIED IDEOGRAPH
+ {0xD3CF, 0x905D}, //13053 #CJK UNIFIED IDEOGRAPH
+ {0xD3D0, 0x5510}, //13054 #CJK UNIFIED IDEOGRAPH
+ {0xD3D1, 0x5802}, //13055 #CJK UNIFIED IDEOGRAPH
+ {0xD3D2, 0x5858}, //13056 #CJK UNIFIED IDEOGRAPH
+ {0xD3D3, 0x5E62}, //13057 #CJK UNIFIED IDEOGRAPH
+ {0xD3D4, 0x6207}, //13058 #CJK UNIFIED IDEOGRAPH
+ {0xD3D5, 0x649E}, //13059 #CJK UNIFIED IDEOGRAPH
+ {0xD3D6, 0x68E0}, //13060 #CJK UNIFIED IDEOGRAPH
+ {0xD3D7, 0x7576}, //13061 #CJK UNIFIED IDEOGRAPH
+ {0xD3D8, 0x7CD6}, //13062 #CJK UNIFIED IDEOGRAPH
+ {0xD3D9, 0x87B3}, //13063 #CJK UNIFIED IDEOGRAPH
+ {0xD3DA, 0x9EE8}, //13064 #CJK UNIFIED IDEOGRAPH
+ {0xD3DB, 0x4EE3}, //13065 #CJK UNIFIED IDEOGRAPH
+ {0xD3DC, 0x5788}, //13066 #CJK UNIFIED IDEOGRAPH
+ {0xD3DD, 0x576E}, //13067 #CJK UNIFIED IDEOGRAPH
+ {0xD3DE, 0x5927}, //13068 #CJK UNIFIED IDEOGRAPH
+ {0xD3DF, 0x5C0D}, //13069 #CJK UNIFIED IDEOGRAPH
+ {0xD3E0, 0x5CB1}, //13070 #CJK UNIFIED IDEOGRAPH
+ {0xD3E1, 0x5E36}, //13071 #CJK UNIFIED IDEOGRAPH
+ {0xD3E2, 0x5F85}, //13072 #CJK UNIFIED IDEOGRAPH
+ {0xD3E3, 0x6234}, //13073 #CJK UNIFIED IDEOGRAPH
+ {0xD3E4, 0x64E1}, //13074 #CJK UNIFIED IDEOGRAPH
+ {0xD3E5, 0x73B3}, //13075 #CJK UNIFIED IDEOGRAPH
+ {0xD3E6, 0x81FA}, //13076 #CJK UNIFIED IDEOGRAPH
+ {0xD3E7, 0x888B}, //13077 #CJK UNIFIED IDEOGRAPH
+ {0xD3E8, 0x8CB8}, //13078 #CJK UNIFIED IDEOGRAPH
+ {0xD3E9, 0x968A}, //13079 #CJK UNIFIED IDEOGRAPH
+ {0xD3EA, 0x9EDB}, //13080 #CJK UNIFIED IDEOGRAPH
+ {0xD3EB, 0x5B85}, //13081 #CJK UNIFIED IDEOGRAPH
+ {0xD3EC, 0x5FB7}, //13082 #CJK UNIFIED IDEOGRAPH
+ {0xD3ED, 0x60B3}, //13083 #CJK UNIFIED IDEOGRAPH
+ {0xD3EE, 0x5012}, //13084 #CJK UNIFIED IDEOGRAPH
+ {0xD3EF, 0x5200}, //13085 #CJK UNIFIED IDEOGRAPH
+ {0xD3F0, 0x5230}, //13086 #CJK UNIFIED IDEOGRAPH
+ {0xD3F1, 0x5716}, //13087 #CJK UNIFIED IDEOGRAPH
+ {0xD3F2, 0x5835}, //13088 #CJK UNIFIED IDEOGRAPH
+ {0xD3F3, 0x5857}, //13089 #CJK UNIFIED IDEOGRAPH
+ {0xD3F4, 0x5C0E}, //13090 #CJK UNIFIED IDEOGRAPH
+ {0xD3F5, 0x5C60}, //13091 #CJK UNIFIED IDEOGRAPH
+ {0xD3F6, 0x5CF6}, //13092 #CJK UNIFIED IDEOGRAPH
+ {0xD3F7, 0x5D8B}, //13093 #CJK UNIFIED IDEOGRAPH
+ {0xD3F8, 0x5EA6}, //13094 #CJK UNIFIED IDEOGRAPH
+ {0xD3F9, 0x5F92}, //13095 #CJK UNIFIED IDEOGRAPH
+ {0xD3FA, 0x60BC}, //13096 #CJK UNIFIED IDEOGRAPH
+ {0xD3FB, 0x6311}, //13097 #CJK UNIFIED IDEOGRAPH
+ {0xD3FC, 0x6389}, //13098 #CJK UNIFIED IDEOGRAPH
+ {0xD3FD, 0x6417}, //13099 #CJK UNIFIED IDEOGRAPH
+ {0xD3FE, 0x6843}, //13100 #CJK UNIFIED IDEOGRAPH
+ {0xD4A1, 0x68F9}, //13101 #CJK UNIFIED IDEOGRAPH
+ {0xD4A2, 0x6AC2}, //13102 #CJK UNIFIED IDEOGRAPH
+ {0xD4A3, 0x6DD8}, //13103 #CJK UNIFIED IDEOGRAPH
+ {0xD4A4, 0x6E21}, //13104 #CJK UNIFIED IDEOGRAPH
+ {0xD4A5, 0x6ED4}, //13105 #CJK UNIFIED IDEOGRAPH
+ {0xD4A6, 0x6FE4}, //13106 #CJK UNIFIED IDEOGRAPH
+ {0xD4A7, 0x71FE}, //13107 #CJK UNIFIED IDEOGRAPH
+ {0xD4A8, 0x76DC}, //13108 #CJK UNIFIED IDEOGRAPH
+ {0xD4A9, 0x7779}, //13109 #CJK UNIFIED IDEOGRAPH
+ {0xD4AA, 0x79B1}, //13110 #CJK UNIFIED IDEOGRAPH
+ {0xD4AB, 0x7A3B}, //13111 #CJK UNIFIED IDEOGRAPH
+ {0xD4AC, 0x8404}, //13112 #CJK UNIFIED IDEOGRAPH
+ {0xD4AD, 0x89A9}, //13113 #CJK UNIFIED IDEOGRAPH
+ {0xD4AE, 0x8CED}, //13114 #CJK UNIFIED IDEOGRAPH
+ {0xD4AF, 0x8DF3}, //13115 #CJK UNIFIED IDEOGRAPH
+ {0xD4B0, 0x8E48}, //13116 #CJK UNIFIED IDEOGRAPH
+ {0xD4B1, 0x9003}, //13117 #CJK UNIFIED IDEOGRAPH
+ {0xD4B2, 0x9014}, //13118 #CJK UNIFIED IDEOGRAPH
+ {0xD4B3, 0x9053}, //13119 #CJK UNIFIED IDEOGRAPH
+ {0xD4B4, 0x90FD}, //13120 #CJK UNIFIED IDEOGRAPH
+ {0xD4B5, 0x934D}, //13121 #CJK UNIFIED IDEOGRAPH
+ {0xD4B6, 0x9676}, //13122 #CJK UNIFIED IDEOGRAPH
+ {0xD4B7, 0x97DC}, //13123 #CJK UNIFIED IDEOGRAPH
+ {0xD4B8, 0x6BD2}, //13124 #CJK UNIFIED IDEOGRAPH
+ {0xD4B9, 0x7006}, //13125 #CJK UNIFIED IDEOGRAPH
+ {0xD4BA, 0x7258}, //13126 #CJK UNIFIED IDEOGRAPH
+ {0xD4BB, 0x72A2}, //13127 #CJK UNIFIED IDEOGRAPH
+ {0xD4BC, 0x7368}, //13128 #CJK UNIFIED IDEOGRAPH
+ {0xD4BD, 0x7763}, //13129 #CJK UNIFIED IDEOGRAPH
+ {0xD4BE, 0x79BF}, //13130 #CJK UNIFIED IDEOGRAPH
+ {0xD4BF, 0x7BE4}, //13131 #CJK UNIFIED IDEOGRAPH
+ {0xD4C0, 0x7E9B}, //13132 #CJK UNIFIED IDEOGRAPH
+ {0xD4C1, 0x8B80}, //13133 #CJK UNIFIED IDEOGRAPH
+ {0xD4C2, 0x58A9}, //13134 #CJK UNIFIED IDEOGRAPH
+ {0xD4C3, 0x60C7}, //13135 #CJK UNIFIED IDEOGRAPH
+ {0xD4C4, 0x6566}, //13136 #CJK UNIFIED IDEOGRAPH
+ {0xD4C5, 0x65FD}, //13137 #CJK UNIFIED IDEOGRAPH
+ {0xD4C6, 0x66BE}, //13138 #CJK UNIFIED IDEOGRAPH
+ {0xD4C7, 0x6C8C}, //13139 #CJK UNIFIED IDEOGRAPH
+ {0xD4C8, 0x711E}, //13140 #CJK UNIFIED IDEOGRAPH
+ {0xD4C9, 0x71C9}, //13141 #CJK UNIFIED IDEOGRAPH
+ {0xD4CA, 0x8C5A}, //13142 #CJK UNIFIED IDEOGRAPH
+ {0xD4CB, 0x9813}, //13143 #CJK UNIFIED IDEOGRAPH
+ {0xD4CC, 0x4E6D}, //13144 #CJK UNIFIED IDEOGRAPH
+ {0xD4CD, 0x7A81}, //13145 #CJK UNIFIED IDEOGRAPH
+ {0xD4CE, 0x4EDD}, //13146 #CJK UNIFIED IDEOGRAPH
+ {0xD4CF, 0x51AC}, //13147 #CJK UNIFIED IDEOGRAPH
+ {0xD4D0, 0x51CD}, //13148 #CJK UNIFIED IDEOGRAPH
+ {0xD4D1, 0x52D5}, //13149 #CJK UNIFIED IDEOGRAPH
+ {0xD4D2, 0x540C}, //13150 #CJK UNIFIED IDEOGRAPH
+ {0xD4D3, 0x61A7}, //13151 #CJK UNIFIED IDEOGRAPH
+ {0xD4D4, 0x6771}, //13152 #CJK UNIFIED IDEOGRAPH
+ {0xD4D5, 0x6850}, //13153 #CJK UNIFIED IDEOGRAPH
+ {0xD4D6, 0x68DF}, //13154 #CJK UNIFIED IDEOGRAPH
+ {0xD4D7, 0x6D1E}, //13155 #CJK UNIFIED IDEOGRAPH
+ {0xD4D8, 0x6F7C}, //13156 #CJK UNIFIED IDEOGRAPH
+ {0xD4D9, 0x75BC}, //13157 #CJK UNIFIED IDEOGRAPH
+ {0xD4DA, 0x77B3}, //13158 #CJK UNIFIED IDEOGRAPH
+ {0xD4DB, 0x7AE5}, //13159 #CJK UNIFIED IDEOGRAPH
+ {0xD4DC, 0x80F4}, //13160 #CJK UNIFIED IDEOGRAPH
+ {0xD4DD, 0x8463}, //13161 #CJK UNIFIED IDEOGRAPH
+ {0xD4DE, 0x9285}, //13162 #CJK UNIFIED IDEOGRAPH
+ {0xD4DF, 0x515C}, //13163 #CJK UNIFIED IDEOGRAPH
+ {0xD4E0, 0x6597}, //13164 #CJK UNIFIED IDEOGRAPH
+ {0xD4E1, 0x675C}, //13165 #CJK UNIFIED IDEOGRAPH
+ {0xD4E2, 0x6793}, //13166 #CJK UNIFIED IDEOGRAPH
+ {0xD4E3, 0x75D8}, //13167 #CJK UNIFIED IDEOGRAPH
+ {0xD4E4, 0x7AC7}, //13168 #CJK UNIFIED IDEOGRAPH
+ {0xD4E5, 0x8373}, //13169 #CJK UNIFIED IDEOGRAPH
+ {0xD4E6, 0xF95A}, //13170 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD4E7, 0x8C46}, //13171 #CJK UNIFIED IDEOGRAPH
+ {0xD4E8, 0x9017}, //13172 #CJK UNIFIED IDEOGRAPH
+ {0xD4E9, 0x982D}, //13173 #CJK UNIFIED IDEOGRAPH
+ {0xD4EA, 0x5C6F}, //13174 #CJK UNIFIED IDEOGRAPH
+ {0xD4EB, 0x81C0}, //13175 #CJK UNIFIED IDEOGRAPH
+ {0xD4EC, 0x829A}, //13176 #CJK UNIFIED IDEOGRAPH
+ {0xD4ED, 0x9041}, //13177 #CJK UNIFIED IDEOGRAPH
+ {0xD4EE, 0x906F}, //13178 #CJK UNIFIED IDEOGRAPH
+ {0xD4EF, 0x920D}, //13179 #CJK UNIFIED IDEOGRAPH
+ {0xD4F0, 0x5F97}, //13180 #CJK UNIFIED IDEOGRAPH
+ {0xD4F1, 0x5D9D}, //13181 #CJK UNIFIED IDEOGRAPH
+ {0xD4F2, 0x6A59}, //13182 #CJK UNIFIED IDEOGRAPH
+ {0xD4F3, 0x71C8}, //13183 #CJK UNIFIED IDEOGRAPH
+ {0xD4F4, 0x767B}, //13184 #CJK UNIFIED IDEOGRAPH
+ {0xD4F5, 0x7B49}, //13185 #CJK UNIFIED IDEOGRAPH
+ {0xD4F6, 0x85E4}, //13186 #CJK UNIFIED IDEOGRAPH
+ {0xD4F7, 0x8B04}, //13187 #CJK UNIFIED IDEOGRAPH
+ {0xD4F8, 0x9127}, //13188 #CJK UNIFIED IDEOGRAPH
+ {0xD4F9, 0x9A30}, //13189 #CJK UNIFIED IDEOGRAPH
+ {0xD4FA, 0x5587}, //13190 #CJK UNIFIED IDEOGRAPH
+ {0xD4FB, 0x61F6}, //13191 #CJK UNIFIED IDEOGRAPH
+ {0xD4FC, 0xF95B}, //13192 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD4FD, 0x7669}, //13193 #CJK UNIFIED IDEOGRAPH
+ {0xD4FE, 0x7F85}, //13194 #CJK UNIFIED IDEOGRAPH
+ {0xD5A1, 0x863F}, //13195 #CJK UNIFIED IDEOGRAPH
+ {0xD5A2, 0x87BA}, //13196 #CJK UNIFIED IDEOGRAPH
+ {0xD5A3, 0x88F8}, //13197 #CJK UNIFIED IDEOGRAPH
+ {0xD5A4, 0x908F}, //13198 #CJK UNIFIED IDEOGRAPH
+ {0xD5A5, 0xF95C}, //13199 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD5A6, 0x6D1B}, //13200 #CJK UNIFIED IDEOGRAPH
+ {0xD5A7, 0x70D9}, //13201 #CJK UNIFIED IDEOGRAPH
+ {0xD5A8, 0x73DE}, //13202 #CJK UNIFIED IDEOGRAPH
+ {0xD5A9, 0x7D61}, //13203 #CJK UNIFIED IDEOGRAPH
+ {0xD5AA, 0x843D}, //13204 #CJK UNIFIED IDEOGRAPH
+ {0xD5AB, 0xF95D}, //13205 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD5AC, 0x916A}, //13206 #CJK UNIFIED IDEOGRAPH
+ {0xD5AD, 0x99F1}, //13207 #CJK UNIFIED IDEOGRAPH
+ {0xD5AE, 0xF95E}, //13208 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD5AF, 0x4E82}, //13209 #CJK UNIFIED IDEOGRAPH
+ {0xD5B0, 0x5375}, //13210 #CJK UNIFIED IDEOGRAPH
+ {0xD5B1, 0x6B04}, //13211 #CJK UNIFIED IDEOGRAPH
+ {0xD5B2, 0x6B12}, //13212 #CJK UNIFIED IDEOGRAPH
+ {0xD5B3, 0x703E}, //13213 #CJK UNIFIED IDEOGRAPH
+ {0xD5B4, 0x721B}, //13214 #CJK UNIFIED IDEOGRAPH
+ {0xD5B5, 0x862D}, //13215 #CJK UNIFIED IDEOGRAPH
+ {0xD5B6, 0x9E1E}, //13216 #CJK UNIFIED IDEOGRAPH
+ {0xD5B7, 0x524C}, //13217 #CJK UNIFIED IDEOGRAPH
+ {0xD5B8, 0x8FA3}, //13218 #CJK UNIFIED IDEOGRAPH
+ {0xD5B9, 0x5D50}, //13219 #CJK UNIFIED IDEOGRAPH
+ {0xD5BA, 0x64E5}, //13220 #CJK UNIFIED IDEOGRAPH
+ {0xD5BB, 0x652C}, //13221 #CJK UNIFIED IDEOGRAPH
+ {0xD5BC, 0x6B16}, //13222 #CJK UNIFIED IDEOGRAPH
+ {0xD5BD, 0x6FEB}, //13223 #CJK UNIFIED IDEOGRAPH
+ {0xD5BE, 0x7C43}, //13224 #CJK UNIFIED IDEOGRAPH
+ {0xD5BF, 0x7E9C}, //13225 #CJK UNIFIED IDEOGRAPH
+ {0xD5C0, 0x85CD}, //13226 #CJK UNIFIED IDEOGRAPH
+ {0xD5C1, 0x8964}, //13227 #CJK UNIFIED IDEOGRAPH
+ {0xD5C2, 0x89BD}, //13228 #CJK UNIFIED IDEOGRAPH
+ {0xD5C3, 0x62C9}, //13229 #CJK UNIFIED IDEOGRAPH
+ {0xD5C4, 0x81D8}, //13230 #CJK UNIFIED IDEOGRAPH
+ {0xD5C5, 0x881F}, //13231 #CJK UNIFIED IDEOGRAPH
+ {0xD5C6, 0x5ECA}, //13232 #CJK UNIFIED IDEOGRAPH
+ {0xD5C7, 0x6717}, //13233 #CJK UNIFIED IDEOGRAPH
+ {0xD5C8, 0x6D6A}, //13234 #CJK UNIFIED IDEOGRAPH
+ {0xD5C9, 0x72FC}, //13235 #CJK UNIFIED IDEOGRAPH
+ {0xD5CA, 0x7405}, //13236 #CJK UNIFIED IDEOGRAPH
+ {0xD5CB, 0x746F}, //13237 #CJK UNIFIED IDEOGRAPH
+ {0xD5CC, 0x8782}, //13238 #CJK UNIFIED IDEOGRAPH
+ {0xD5CD, 0x90DE}, //13239 #CJK UNIFIED IDEOGRAPH
+ {0xD5CE, 0x4F86}, //13240 #CJK UNIFIED IDEOGRAPH
+ {0xD5CF, 0x5D0D}, //13241 #CJK UNIFIED IDEOGRAPH
+ {0xD5D0, 0x5FA0}, //13242 #CJK UNIFIED IDEOGRAPH
+ {0xD5D1, 0x840A}, //13243 #CJK UNIFIED IDEOGRAPH
+ {0xD5D2, 0x51B7}, //13244 #CJK UNIFIED IDEOGRAPH
+ {0xD5D3, 0x63A0}, //13245 #CJK UNIFIED IDEOGRAPH
+ {0xD5D4, 0x7565}, //13246 #CJK UNIFIED IDEOGRAPH
+ {0xD5D5, 0x4EAE}, //13247 #CJK UNIFIED IDEOGRAPH
+ {0xD5D6, 0x5006}, //13248 #CJK UNIFIED IDEOGRAPH
+ {0xD5D7, 0x5169}, //13249 #CJK UNIFIED IDEOGRAPH
+ {0xD5D8, 0x51C9}, //13250 #CJK UNIFIED IDEOGRAPH
+ {0xD5D9, 0x6881}, //13251 #CJK UNIFIED IDEOGRAPH
+ {0xD5DA, 0x6A11}, //13252 #CJK UNIFIED IDEOGRAPH
+ {0xD5DB, 0x7CAE}, //13253 #CJK UNIFIED IDEOGRAPH
+ {0xD5DC, 0x7CB1}, //13254 #CJK UNIFIED IDEOGRAPH
+ {0xD5DD, 0x7CE7}, //13255 #CJK UNIFIED IDEOGRAPH
+ {0xD5DE, 0x826F}, //13256 #CJK UNIFIED IDEOGRAPH
+ {0xD5DF, 0x8AD2}, //13257 #CJK UNIFIED IDEOGRAPH
+ {0xD5E0, 0x8F1B}, //13258 #CJK UNIFIED IDEOGRAPH
+ {0xD5E1, 0x91CF}, //13259 #CJK UNIFIED IDEOGRAPH
+ {0xD5E2, 0x4FB6}, //13260 #CJK UNIFIED IDEOGRAPH
+ {0xD5E3, 0x5137}, //13261 #CJK UNIFIED IDEOGRAPH
+ {0xD5E4, 0x52F5}, //13262 #CJK UNIFIED IDEOGRAPH
+ {0xD5E5, 0x5442}, //13263 #CJK UNIFIED IDEOGRAPH
+ {0xD5E6, 0x5EEC}, //13264 #CJK UNIFIED IDEOGRAPH
+ {0xD5E7, 0x616E}, //13265 #CJK UNIFIED IDEOGRAPH
+ {0xD5E8, 0x623E}, //13266 #CJK UNIFIED IDEOGRAPH
+ {0xD5E9, 0x65C5}, //13267 #CJK UNIFIED IDEOGRAPH
+ {0xD5EA, 0x6ADA}, //13268 #CJK UNIFIED IDEOGRAPH
+ {0xD5EB, 0x6FFE}, //13269 #CJK UNIFIED IDEOGRAPH
+ {0xD5EC, 0x792A}, //13270 #CJK UNIFIED IDEOGRAPH
+ {0xD5ED, 0x85DC}, //13271 #CJK UNIFIED IDEOGRAPH
+ {0xD5EE, 0x8823}, //13272 #CJK UNIFIED IDEOGRAPH
+ {0xD5EF, 0x95AD}, //13273 #CJK UNIFIED IDEOGRAPH
+ {0xD5F0, 0x9A62}, //13274 #CJK UNIFIED IDEOGRAPH
+ {0xD5F1, 0x9A6A}, //13275 #CJK UNIFIED IDEOGRAPH
+ {0xD5F2, 0x9E97}, //13276 #CJK UNIFIED IDEOGRAPH
+ {0xD5F3, 0x9ECE}, //13277 #CJK UNIFIED IDEOGRAPH
+ {0xD5F4, 0x529B}, //13278 #CJK UNIFIED IDEOGRAPH
+ {0xD5F5, 0x66C6}, //13279 #CJK UNIFIED IDEOGRAPH
+ {0xD5F6, 0x6B77}, //13280 #CJK UNIFIED IDEOGRAPH
+ {0xD5F7, 0x701D}, //13281 #CJK UNIFIED IDEOGRAPH
+ {0xD5F8, 0x792B}, //13282 #CJK UNIFIED IDEOGRAPH
+ {0xD5F9, 0x8F62}, //13283 #CJK UNIFIED IDEOGRAPH
+ {0xD5FA, 0x9742}, //13284 #CJK UNIFIED IDEOGRAPH
+ {0xD5FB, 0x6190}, //13285 #CJK UNIFIED IDEOGRAPH
+ {0xD5FC, 0x6200}, //13286 #CJK UNIFIED IDEOGRAPH
+ {0xD5FD, 0x6523}, //13287 #CJK UNIFIED IDEOGRAPH
+ {0xD5FE, 0x6F23}, //13288 #CJK UNIFIED IDEOGRAPH
+ {0xD6A1, 0x7149}, //13289 #CJK UNIFIED IDEOGRAPH
+ {0xD6A2, 0x7489}, //13290 #CJK UNIFIED IDEOGRAPH
+ {0xD6A3, 0x7DF4}, //13291 #CJK UNIFIED IDEOGRAPH
+ {0xD6A4, 0x806F}, //13292 #CJK UNIFIED IDEOGRAPH
+ {0xD6A5, 0x84EE}, //13293 #CJK UNIFIED IDEOGRAPH
+ {0xD6A6, 0x8F26}, //13294 #CJK UNIFIED IDEOGRAPH
+ {0xD6A7, 0x9023}, //13295 #CJK UNIFIED IDEOGRAPH
+ {0xD6A8, 0x934A}, //13296 #CJK UNIFIED IDEOGRAPH
+ {0xD6A9, 0x51BD}, //13297 #CJK UNIFIED IDEOGRAPH
+ {0xD6AA, 0x5217}, //13298 #CJK UNIFIED IDEOGRAPH
+ {0xD6AB, 0x52A3}, //13299 #CJK UNIFIED IDEOGRAPH
+ {0xD6AC, 0x6D0C}, //13300 #CJK UNIFIED IDEOGRAPH
+ {0xD6AD, 0x70C8}, //13301 #CJK UNIFIED IDEOGRAPH
+ {0xD6AE, 0x88C2}, //13302 #CJK UNIFIED IDEOGRAPH
+ {0xD6AF, 0x5EC9}, //13303 #CJK UNIFIED IDEOGRAPH
+ {0xD6B0, 0x6582}, //13304 #CJK UNIFIED IDEOGRAPH
+ {0xD6B1, 0x6BAE}, //13305 #CJK UNIFIED IDEOGRAPH
+ {0xD6B2, 0x6FC2}, //13306 #CJK UNIFIED IDEOGRAPH
+ {0xD6B3, 0x7C3E}, //13307 #CJK UNIFIED IDEOGRAPH
+ {0xD6B4, 0x7375}, //13308 #CJK UNIFIED IDEOGRAPH
+ {0xD6B5, 0x4EE4}, //13309 #CJK UNIFIED IDEOGRAPH
+ {0xD6B6, 0x4F36}, //13310 #CJK UNIFIED IDEOGRAPH
+ {0xD6B7, 0x56F9}, //13311 #CJK UNIFIED IDEOGRAPH
+ {0xD6B8, 0xF95F}, //13312 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD6B9, 0x5CBA}, //13313 #CJK UNIFIED IDEOGRAPH
+ {0xD6BA, 0x5DBA}, //13314 #CJK UNIFIED IDEOGRAPH
+ {0xD6BB, 0x601C}, //13315 #CJK UNIFIED IDEOGRAPH
+ {0xD6BC, 0x73B2}, //13316 #CJK UNIFIED IDEOGRAPH
+ {0xD6BD, 0x7B2D}, //13317 #CJK UNIFIED IDEOGRAPH
+ {0xD6BE, 0x7F9A}, //13318 #CJK UNIFIED IDEOGRAPH
+ {0xD6BF, 0x7FCE}, //13319 #CJK UNIFIED IDEOGRAPH
+ {0xD6C0, 0x8046}, //13320 #CJK UNIFIED IDEOGRAPH
+ {0xD6C1, 0x901E}, //13321 #CJK UNIFIED IDEOGRAPH
+ {0xD6C2, 0x9234}, //13322 #CJK UNIFIED IDEOGRAPH
+ {0xD6C3, 0x96F6}, //13323 #CJK UNIFIED IDEOGRAPH
+ {0xD6C4, 0x9748}, //13324 #CJK UNIFIED IDEOGRAPH
+ {0xD6C5, 0x9818}, //13325 #CJK UNIFIED IDEOGRAPH
+ {0xD6C6, 0x9F61}, //13326 #CJK UNIFIED IDEOGRAPH
+ {0xD6C7, 0x4F8B}, //13327 #CJK UNIFIED IDEOGRAPH
+ {0xD6C8, 0x6FA7}, //13328 #CJK UNIFIED IDEOGRAPH
+ {0xD6C9, 0x79AE}, //13329 #CJK UNIFIED IDEOGRAPH
+ {0xD6CA, 0x91B4}, //13330 #CJK UNIFIED IDEOGRAPH
+ {0xD6CB, 0x96B7}, //13331 #CJK UNIFIED IDEOGRAPH
+ {0xD6CC, 0x52DE}, //13332 #CJK UNIFIED IDEOGRAPH
+ {0xD6CD, 0xF960}, //13333 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD6CE, 0x6488}, //13334 #CJK UNIFIED IDEOGRAPH
+ {0xD6CF, 0x64C4}, //13335 #CJK UNIFIED IDEOGRAPH
+ {0xD6D0, 0x6AD3}, //13336 #CJK UNIFIED IDEOGRAPH
+ {0xD6D1, 0x6F5E}, //13337 #CJK UNIFIED IDEOGRAPH
+ {0xD6D2, 0x7018}, //13338 #CJK UNIFIED IDEOGRAPH
+ {0xD6D3, 0x7210}, //13339 #CJK UNIFIED IDEOGRAPH
+ {0xD6D4, 0x76E7}, //13340 #CJK UNIFIED IDEOGRAPH
+ {0xD6D5, 0x8001}, //13341 #CJK UNIFIED IDEOGRAPH
+ {0xD6D6, 0x8606}, //13342 #CJK UNIFIED IDEOGRAPH
+ {0xD6D7, 0x865C}, //13343 #CJK UNIFIED IDEOGRAPH
+ {0xD6D8, 0x8DEF}, //13344 #CJK UNIFIED IDEOGRAPH
+ {0xD6D9, 0x8F05}, //13345 #CJK UNIFIED IDEOGRAPH
+ {0xD6DA, 0x9732}, //13346 #CJK UNIFIED IDEOGRAPH
+ {0xD6DB, 0x9B6F}, //13347 #CJK UNIFIED IDEOGRAPH
+ {0xD6DC, 0x9DFA}, //13348 #CJK UNIFIED IDEOGRAPH
+ {0xD6DD, 0x9E75}, //13349 #CJK UNIFIED IDEOGRAPH
+ {0xD6DE, 0x788C}, //13350 #CJK UNIFIED IDEOGRAPH
+ {0xD6DF, 0x797F}, //13351 #CJK UNIFIED IDEOGRAPH
+ {0xD6E0, 0x7DA0}, //13352 #CJK UNIFIED IDEOGRAPH
+ {0xD6E1, 0x83C9}, //13353 #CJK UNIFIED IDEOGRAPH
+ {0xD6E2, 0x9304}, //13354 #CJK UNIFIED IDEOGRAPH
+ {0xD6E3, 0x9E7F}, //13355 #CJK UNIFIED IDEOGRAPH
+ {0xD6E4, 0x9E93}, //13356 #CJK UNIFIED IDEOGRAPH
+ {0xD6E5, 0x8AD6}, //13357 #CJK UNIFIED IDEOGRAPH
+ {0xD6E6, 0x58DF}, //13358 #CJK UNIFIED IDEOGRAPH
+ {0xD6E7, 0x5F04}, //13359 #CJK UNIFIED IDEOGRAPH
+ {0xD6E8, 0x6727}, //13360 #CJK UNIFIED IDEOGRAPH
+ {0xD6E9, 0x7027}, //13361 #CJK UNIFIED IDEOGRAPH
+ {0xD6EA, 0x74CF}, //13362 #CJK UNIFIED IDEOGRAPH
+ {0xD6EB, 0x7C60}, //13363 #CJK UNIFIED IDEOGRAPH
+ {0xD6EC, 0x807E}, //13364 #CJK UNIFIED IDEOGRAPH
+ {0xD6ED, 0x5121}, //13365 #CJK UNIFIED IDEOGRAPH
+ {0xD6EE, 0x7028}, //13366 #CJK UNIFIED IDEOGRAPH
+ {0xD6EF, 0x7262}, //13367 #CJK UNIFIED IDEOGRAPH
+ {0xD6F0, 0x78CA}, //13368 #CJK UNIFIED IDEOGRAPH
+ {0xD6F1, 0x8CC2}, //13369 #CJK UNIFIED IDEOGRAPH
+ {0xD6F2, 0x8CDA}, //13370 #CJK UNIFIED IDEOGRAPH
+ {0xD6F3, 0x8CF4}, //13371 #CJK UNIFIED IDEOGRAPH
+ {0xD6F4, 0x96F7}, //13372 #CJK UNIFIED IDEOGRAPH
+ {0xD6F5, 0x4E86}, //13373 #CJK UNIFIED IDEOGRAPH
+ {0xD6F6, 0x50DA}, //13374 #CJK UNIFIED IDEOGRAPH
+ {0xD6F7, 0x5BEE}, //13375 #CJK UNIFIED IDEOGRAPH
+ {0xD6F8, 0x5ED6}, //13376 #CJK UNIFIED IDEOGRAPH
+ {0xD6F9, 0x6599}, //13377 #CJK UNIFIED IDEOGRAPH
+ {0xD6FA, 0x71CE}, //13378 #CJK UNIFIED IDEOGRAPH
+ {0xD6FB, 0x7642}, //13379 #CJK UNIFIED IDEOGRAPH
+ {0xD6FC, 0x77AD}, //13380 #CJK UNIFIED IDEOGRAPH
+ {0xD6FD, 0x804A}, //13381 #CJK UNIFIED IDEOGRAPH
+ {0xD6FE, 0x84FC}, //13382 #CJK UNIFIED IDEOGRAPH
+ {0xD7A1, 0x907C}, //13383 #CJK UNIFIED IDEOGRAPH
+ {0xD7A2, 0x9B27}, //13384 #CJK UNIFIED IDEOGRAPH
+ {0xD7A3, 0x9F8D}, //13385 #CJK UNIFIED IDEOGRAPH
+ {0xD7A4, 0x58D8}, //13386 #CJK UNIFIED IDEOGRAPH
+ {0xD7A5, 0x5A41}, //13387 #CJK UNIFIED IDEOGRAPH
+ {0xD7A6, 0x5C62}, //13388 #CJK UNIFIED IDEOGRAPH
+ {0xD7A7, 0x6A13}, //13389 #CJK UNIFIED IDEOGRAPH
+ {0xD7A8, 0x6DDA}, //13390 #CJK UNIFIED IDEOGRAPH
+ {0xD7A9, 0x6F0F}, //13391 #CJK UNIFIED IDEOGRAPH
+ {0xD7AA, 0x763B}, //13392 #CJK UNIFIED IDEOGRAPH
+ {0xD7AB, 0x7D2F}, //13393 #CJK UNIFIED IDEOGRAPH
+ {0xD7AC, 0x7E37}, //13394 #CJK UNIFIED IDEOGRAPH
+ {0xD7AD, 0x851E}, //13395 #CJK UNIFIED IDEOGRAPH
+ {0xD7AE, 0x8938}, //13396 #CJK UNIFIED IDEOGRAPH
+ {0xD7AF, 0x93E4}, //13397 #CJK UNIFIED IDEOGRAPH
+ {0xD7B0, 0x964B}, //13398 #CJK UNIFIED IDEOGRAPH
+ {0xD7B1, 0x5289}, //13399 #CJK UNIFIED IDEOGRAPH
+ {0xD7B2, 0x65D2}, //13400 #CJK UNIFIED IDEOGRAPH
+ {0xD7B3, 0x67F3}, //13401 #CJK UNIFIED IDEOGRAPH
+ {0xD7B4, 0x69B4}, //13402 #CJK UNIFIED IDEOGRAPH
+ {0xD7B5, 0x6D41}, //13403 #CJK UNIFIED IDEOGRAPH
+ {0xD7B6, 0x6E9C}, //13404 #CJK UNIFIED IDEOGRAPH
+ {0xD7B7, 0x700F}, //13405 #CJK UNIFIED IDEOGRAPH
+ {0xD7B8, 0x7409}, //13406 #CJK UNIFIED IDEOGRAPH
+ {0xD7B9, 0x7460}, //13407 #CJK UNIFIED IDEOGRAPH
+ {0xD7BA, 0x7559}, //13408 #CJK UNIFIED IDEOGRAPH
+ {0xD7BB, 0x7624}, //13409 #CJK UNIFIED IDEOGRAPH
+ {0xD7BC, 0x786B}, //13410 #CJK UNIFIED IDEOGRAPH
+ {0xD7BD, 0x8B2C}, //13411 #CJK UNIFIED IDEOGRAPH
+ {0xD7BE, 0x985E}, //13412 #CJK UNIFIED IDEOGRAPH
+ {0xD7BF, 0x516D}, //13413 #CJK UNIFIED IDEOGRAPH
+ {0xD7C0, 0x622E}, //13414 #CJK UNIFIED IDEOGRAPH
+ {0xD7C1, 0x9678}, //13415 #CJK UNIFIED IDEOGRAPH
+ {0xD7C2, 0x4F96}, //13416 #CJK UNIFIED IDEOGRAPH
+ {0xD7C3, 0x502B}, //13417 #CJK UNIFIED IDEOGRAPH
+ {0xD7C4, 0x5D19}, //13418 #CJK UNIFIED IDEOGRAPH
+ {0xD7C5, 0x6DEA}, //13419 #CJK UNIFIED IDEOGRAPH
+ {0xD7C6, 0x7DB8}, //13420 #CJK UNIFIED IDEOGRAPH
+ {0xD7C7, 0x8F2A}, //13421 #CJK UNIFIED IDEOGRAPH
+ {0xD7C8, 0x5F8B}, //13422 #CJK UNIFIED IDEOGRAPH
+ {0xD7C9, 0x6144}, //13423 #CJK UNIFIED IDEOGRAPH
+ {0xD7CA, 0x6817}, //13424 #CJK UNIFIED IDEOGRAPH
+ {0xD7CB, 0xF961}, //13425 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD7CC, 0x9686}, //13426 #CJK UNIFIED IDEOGRAPH
+ {0xD7CD, 0x52D2}, //13427 #CJK UNIFIED IDEOGRAPH
+ {0xD7CE, 0x808B}, //13428 #CJK UNIFIED IDEOGRAPH
+ {0xD7CF, 0x51DC}, //13429 #CJK UNIFIED IDEOGRAPH
+ {0xD7D0, 0x51CC}, //13430 #CJK UNIFIED IDEOGRAPH
+ {0xD7D1, 0x695E}, //13431 #CJK UNIFIED IDEOGRAPH
+ {0xD7D2, 0x7A1C}, //13432 #CJK UNIFIED IDEOGRAPH
+ {0xD7D3, 0x7DBE}, //13433 #CJK UNIFIED IDEOGRAPH
+ {0xD7D4, 0x83F1}, //13434 #CJK UNIFIED IDEOGRAPH
+ {0xD7D5, 0x9675}, //13435 #CJK UNIFIED IDEOGRAPH
+ {0xD7D6, 0x4FDA}, //13436 #CJK UNIFIED IDEOGRAPH
+ {0xD7D7, 0x5229}, //13437 #CJK UNIFIED IDEOGRAPH
+ {0xD7D8, 0x5398}, //13438 #CJK UNIFIED IDEOGRAPH
+ {0xD7D9, 0x540F}, //13439 #CJK UNIFIED IDEOGRAPH
+ {0xD7DA, 0x550E}, //13440 #CJK UNIFIED IDEOGRAPH
+ {0xD7DB, 0x5C65}, //13441 #CJK UNIFIED IDEOGRAPH
+ {0xD7DC, 0x60A7}, //13442 #CJK UNIFIED IDEOGRAPH
+ {0xD7DD, 0x674E}, //13443 #CJK UNIFIED IDEOGRAPH
+ {0xD7DE, 0x68A8}, //13444 #CJK UNIFIED IDEOGRAPH
+ {0xD7DF, 0x6D6C}, //13445 #CJK UNIFIED IDEOGRAPH
+ {0xD7E0, 0x7281}, //13446 #CJK UNIFIED IDEOGRAPH
+ {0xD7E1, 0x72F8}, //13447 #CJK UNIFIED IDEOGRAPH
+ {0xD7E2, 0x7406}, //13448 #CJK UNIFIED IDEOGRAPH
+ {0xD7E3, 0x7483}, //13449 #CJK UNIFIED IDEOGRAPH
+ {0xD7E4, 0xF962}, //13450 #CJK COMPATIBILITY IDEOGRAPH
+ {0xD7E5, 0x75E2}, //13451 #CJK UNIFIED IDEOGRAPH
+ {0xD7E6, 0x7C6C}, //13452 #CJK UNIFIED IDEOGRAPH
+ {0xD7E7, 0x7F79}, //13453 #CJK UNIFIED IDEOGRAPH
+ {0xD7E8, 0x7FB8}, //13454 #CJK UNIFIED IDEOGRAPH
+ {0xD7E9, 0x8389}, //13455 #CJK UNIFIED IDEOGRAPH
+ {0xD7EA, 0x88CF}, //13456 #CJK UNIFIED IDEOGRAPH
+ {0xD7EB, 0x88E1}, //13457 #CJK UNIFIED IDEOGRAPH
+ {0xD7EC, 0x91CC}, //13458 #CJK UNIFIED IDEOGRAPH
+ {0xD7ED, 0x91D0}, //13459 #CJK UNIFIED IDEOGRAPH
+ {0xD7EE, 0x96E2}, //13460 #CJK UNIFIED IDEOGRAPH
+ {0xD7EF, 0x9BC9}, //13461 #CJK UNIFIED IDEOGRAPH
+ {0xD7F0, 0x541D}, //13462 #CJK UNIFIED IDEOGRAPH
+ {0xD7F1, 0x6F7E}, //13463 #CJK UNIFIED IDEOGRAPH
+ {0xD7F2, 0x71D0}, //13464 #CJK UNIFIED IDEOGRAPH
+ {0xD7F3, 0x7498}, //13465 #CJK UNIFIED IDEOGRAPH
+ {0xD7F4, 0x85FA}, //13466 #CJK UNIFIED IDEOGRAPH
+ {0xD7F5, 0x8EAA}, //13467 #CJK UNIFIED IDEOGRAPH
+ {0xD7F6, 0x96A3}, //13468 #CJK UNIFIED IDEOGRAPH
+ {0xD7F7, 0x9C57}, //13469 #CJK UNIFIED IDEOGRAPH
+ {0xD7F8, 0x9E9F}, //13470 #CJK UNIFIED IDEOGRAPH
+ {0xD7F9, 0x6797}, //13471 #CJK UNIFIED IDEOGRAPH
+ {0xD7FA, 0x6DCB}, //13472 #CJK UNIFIED IDEOGRAPH
+ {0xD7FB, 0x7433}, //13473 #CJK UNIFIED IDEOGRAPH
+ {0xD7FC, 0x81E8}, //13474 #CJK UNIFIED IDEOGRAPH
+ {0xD7FD, 0x9716}, //13475 #CJK UNIFIED IDEOGRAPH
+ {0xD7FE, 0x782C}, //13476 #CJK UNIFIED IDEOGRAPH
+ {0xD8A1, 0x7ACB}, //13477 #CJK UNIFIED IDEOGRAPH
+ {0xD8A2, 0x7B20}, //13478 #CJK UNIFIED IDEOGRAPH
+ {0xD8A3, 0x7C92}, //13479 #CJK UNIFIED IDEOGRAPH
+ {0xD8A4, 0x6469}, //13480 #CJK UNIFIED IDEOGRAPH
+ {0xD8A5, 0x746A}, //13481 #CJK UNIFIED IDEOGRAPH
+ {0xD8A6, 0x75F2}, //13482 #CJK UNIFIED IDEOGRAPH
+ {0xD8A7, 0x78BC}, //13483 #CJK UNIFIED IDEOGRAPH
+ {0xD8A8, 0x78E8}, //13484 #CJK UNIFIED IDEOGRAPH
+ {0xD8A9, 0x99AC}, //13485 #CJK UNIFIED IDEOGRAPH
+ {0xD8AA, 0x9B54}, //13486 #CJK UNIFIED IDEOGRAPH
+ {0xD8AB, 0x9EBB}, //13487 #CJK UNIFIED IDEOGRAPH
+ {0xD8AC, 0x5BDE}, //13488 #CJK UNIFIED IDEOGRAPH
+ {0xD8AD, 0x5E55}, //13489 #CJK UNIFIED IDEOGRAPH
+ {0xD8AE, 0x6F20}, //13490 #CJK UNIFIED IDEOGRAPH
+ {0xD8AF, 0x819C}, //13491 #CJK UNIFIED IDEOGRAPH
+ {0xD8B0, 0x83AB}, //13492 #CJK UNIFIED IDEOGRAPH
+ {0xD8B1, 0x9088}, //13493 #CJK UNIFIED IDEOGRAPH
+ {0xD8B2, 0x4E07}, //13494 #CJK UNIFIED IDEOGRAPH
+ {0xD8B3, 0x534D}, //13495 #CJK UNIFIED IDEOGRAPH
+ {0xD8B4, 0x5A29}, //13496 #CJK UNIFIED IDEOGRAPH
+ {0xD8B5, 0x5DD2}, //13497 #CJK UNIFIED IDEOGRAPH
+ {0xD8B6, 0x5F4E}, //13498 #CJK UNIFIED IDEOGRAPH
+ {0xD8B7, 0x6162}, //13499 #CJK UNIFIED IDEOGRAPH
+ {0xD8B8, 0x633D}, //13500 #CJK UNIFIED IDEOGRAPH
+ {0xD8B9, 0x6669}, //13501 #CJK UNIFIED IDEOGRAPH
+ {0xD8BA, 0x66FC}, //13502 #CJK UNIFIED IDEOGRAPH
+ {0xD8BB, 0x6EFF}, //13503 #CJK UNIFIED IDEOGRAPH
+ {0xD8BC, 0x6F2B}, //13504 #CJK UNIFIED IDEOGRAPH
+ {0xD8BD, 0x7063}, //13505 #CJK UNIFIED IDEOGRAPH
+ {0xD8BE, 0x779E}, //13506 #CJK UNIFIED IDEOGRAPH
+ {0xD8BF, 0x842C}, //13507 #CJK UNIFIED IDEOGRAPH
+ {0xD8C0, 0x8513}, //13508 #CJK UNIFIED IDEOGRAPH
+ {0xD8C1, 0x883B}, //13509 #CJK UNIFIED IDEOGRAPH
+ {0xD8C2, 0x8F13}, //13510 #CJK UNIFIED IDEOGRAPH
+ {0xD8C3, 0x9945}, //13511 #CJK UNIFIED IDEOGRAPH
+ {0xD8C4, 0x9C3B}, //13512 #CJK UNIFIED IDEOGRAPH
+ {0xD8C5, 0x551C}, //13513 #CJK UNIFIED IDEOGRAPH
+ {0xD8C6, 0x62B9}, //13514 #CJK UNIFIED IDEOGRAPH
+ {0xD8C7, 0x672B}, //13515 #CJK UNIFIED IDEOGRAPH
+ {0xD8C8, 0x6CAB}, //13516 #CJK UNIFIED IDEOGRAPH
+ {0xD8C9, 0x8309}, //13517 #CJK UNIFIED IDEOGRAPH
+ {0xD8CA, 0x896A}, //13518 #CJK UNIFIED IDEOGRAPH
+ {0xD8CB, 0x977A}, //13519 #CJK UNIFIED IDEOGRAPH
+ {0xD8CC, 0x4EA1}, //13520 #CJK UNIFIED IDEOGRAPH
+ {0xD8CD, 0x5984}, //13521 #CJK UNIFIED IDEOGRAPH
+ {0xD8CE, 0x5FD8}, //13522 #CJK UNIFIED IDEOGRAPH
+ {0xD8CF, 0x5FD9}, //13523 #CJK UNIFIED IDEOGRAPH
+ {0xD8D0, 0x671B}, //13524 #CJK UNIFIED IDEOGRAPH
+ {0xD8D1, 0x7DB2}, //13525 #CJK UNIFIED IDEOGRAPH
+ {0xD8D2, 0x7F54}, //13526 #CJK UNIFIED IDEOGRAPH
+ {0xD8D3, 0x8292}, //13527 #CJK UNIFIED IDEOGRAPH
+ {0xD8D4, 0x832B}, //13528 #CJK UNIFIED IDEOGRAPH
+ {0xD8D5, 0x83BD}, //13529 #CJK UNIFIED IDEOGRAPH
+ {0xD8D6, 0x8F1E}, //13530 #CJK UNIFIED IDEOGRAPH
+ {0xD8D7, 0x9099}, //13531 #CJK UNIFIED IDEOGRAPH
+ {0xD8D8, 0x57CB}, //13532 #CJK UNIFIED IDEOGRAPH
+ {0xD8D9, 0x59B9}, //13533 #CJK UNIFIED IDEOGRAPH
+ {0xD8DA, 0x5A92}, //13534 #CJK UNIFIED IDEOGRAPH
+ {0xD8DB, 0x5BD0}, //13535 #CJK UNIFIED IDEOGRAPH
+ {0xD8DC, 0x6627}, //13536 #CJK UNIFIED IDEOGRAPH
+ {0xD8DD, 0x679A}, //13537 #CJK UNIFIED IDEOGRAPH
+ {0xD8DE, 0x6885}, //13538 #CJK UNIFIED IDEOGRAPH
+ {0xD8DF, 0x6BCF}, //13539 #CJK UNIFIED IDEOGRAPH
+ {0xD8E0, 0x7164}, //13540 #CJK UNIFIED IDEOGRAPH
+ {0xD8E1, 0x7F75}, //13541 #CJK UNIFIED IDEOGRAPH
+ {0xD8E2, 0x8CB7}, //13542 #CJK UNIFIED IDEOGRAPH
+ {0xD8E3, 0x8CE3}, //13543 #CJK UNIFIED IDEOGRAPH
+ {0xD8E4, 0x9081}, //13544 #CJK UNIFIED IDEOGRAPH
+ {0xD8E5, 0x9B45}, //13545 #CJK UNIFIED IDEOGRAPH
+ {0xD8E6, 0x8108}, //13546 #CJK UNIFIED IDEOGRAPH
+ {0xD8E7, 0x8C8A}, //13547 #CJK UNIFIED IDEOGRAPH
+ {0xD8E8, 0x964C}, //13548 #CJK UNIFIED IDEOGRAPH
+ {0xD8E9, 0x9A40}, //13549 #CJK UNIFIED IDEOGRAPH
+ {0xD8EA, 0x9EA5}, //13550 #CJK UNIFIED IDEOGRAPH
+ {0xD8EB, 0x5B5F}, //13551 #CJK UNIFIED IDEOGRAPH
+ {0xD8EC, 0x6C13}, //13552 #CJK UNIFIED IDEOGRAPH
+ {0xD8ED, 0x731B}, //13553 #CJK UNIFIED IDEOGRAPH
+ {0xD8EE, 0x76F2}, //13554 #CJK UNIFIED IDEOGRAPH
+ {0xD8EF, 0x76DF}, //13555 #CJK UNIFIED IDEOGRAPH
+ {0xD8F0, 0x840C}, //13556 #CJK UNIFIED IDEOGRAPH
+ {0xD8F1, 0x51AA}, //13557 #CJK UNIFIED IDEOGRAPH
+ {0xD8F2, 0x8993}, //13558 #CJK UNIFIED IDEOGRAPH
+ {0xD8F3, 0x514D}, //13559 #CJK UNIFIED IDEOGRAPH
+ {0xD8F4, 0x5195}, //13560 #CJK UNIFIED IDEOGRAPH
+ {0xD8F5, 0x52C9}, //13561 #CJK UNIFIED IDEOGRAPH
+ {0xD8F6, 0x68C9}, //13562 #CJK UNIFIED IDEOGRAPH
+ {0xD8F7, 0x6C94}, //13563 #CJK UNIFIED IDEOGRAPH
+ {0xD8F8, 0x7704}, //13564 #CJK UNIFIED IDEOGRAPH
+ {0xD8F9, 0x7720}, //13565 #CJK UNIFIED IDEOGRAPH
+ {0xD8FA, 0x7DBF}, //13566 #CJK UNIFIED IDEOGRAPH
+ {0xD8FB, 0x7DEC}, //13567 #CJK UNIFIED IDEOGRAPH
+ {0xD8FC, 0x9762}, //13568 #CJK UNIFIED IDEOGRAPH
+ {0xD8FD, 0x9EB5}, //13569 #CJK UNIFIED IDEOGRAPH
+ {0xD8FE, 0x6EC5}, //13570 #CJK UNIFIED IDEOGRAPH
+ {0xD9A1, 0x8511}, //13571 #CJK UNIFIED IDEOGRAPH
+ {0xD9A2, 0x51A5}, //13572 #CJK UNIFIED IDEOGRAPH
+ {0xD9A3, 0x540D}, //13573 #CJK UNIFIED IDEOGRAPH
+ {0xD9A4, 0x547D}, //13574 #CJK UNIFIED IDEOGRAPH
+ {0xD9A5, 0x660E}, //13575 #CJK UNIFIED IDEOGRAPH
+ {0xD9A6, 0x669D}, //13576 #CJK UNIFIED IDEOGRAPH
+ {0xD9A7, 0x6927}, //13577 #CJK UNIFIED IDEOGRAPH
+ {0xD9A8, 0x6E9F}, //13578 #CJK UNIFIED IDEOGRAPH
+ {0xD9A9, 0x76BF}, //13579 #CJK UNIFIED IDEOGRAPH
+ {0xD9AA, 0x7791}, //13580 #CJK UNIFIED IDEOGRAPH
+ {0xD9AB, 0x8317}, //13581 #CJK UNIFIED IDEOGRAPH
+ {0xD9AC, 0x84C2}, //13582 #CJK UNIFIED IDEOGRAPH
+ {0xD9AD, 0x879F}, //13583 #CJK UNIFIED IDEOGRAPH
+ {0xD9AE, 0x9169}, //13584 #CJK UNIFIED IDEOGRAPH
+ {0xD9AF, 0x9298}, //13585 #CJK UNIFIED IDEOGRAPH
+ {0xD9B0, 0x9CF4}, //13586 #CJK UNIFIED IDEOGRAPH
+ {0xD9B1, 0x8882}, //13587 #CJK UNIFIED IDEOGRAPH
+ {0xD9B2, 0x4FAE}, //13588 #CJK UNIFIED IDEOGRAPH
+ {0xD9B3, 0x5192}, //13589 #CJK UNIFIED IDEOGRAPH
+ {0xD9B4, 0x52DF}, //13590 #CJK UNIFIED IDEOGRAPH
+ {0xD9B5, 0x59C6}, //13591 #CJK UNIFIED IDEOGRAPH
+ {0xD9B6, 0x5E3D}, //13592 #CJK UNIFIED IDEOGRAPH
+ {0xD9B7, 0x6155}, //13593 #CJK UNIFIED IDEOGRAPH
+ {0xD9B8, 0x6478}, //13594 #CJK UNIFIED IDEOGRAPH
+ {0xD9B9, 0x6479}, //13595 #CJK UNIFIED IDEOGRAPH
+ {0xD9BA, 0x66AE}, //13596 #CJK UNIFIED IDEOGRAPH
+ {0xD9BB, 0x67D0}, //13597 #CJK UNIFIED IDEOGRAPH
+ {0xD9BC, 0x6A21}, //13598 #CJK UNIFIED IDEOGRAPH
+ {0xD9BD, 0x6BCD}, //13599 #CJK UNIFIED IDEOGRAPH
+ {0xD9BE, 0x6BDB}, //13600 #CJK UNIFIED IDEOGRAPH
+ {0xD9BF, 0x725F}, //13601 #CJK UNIFIED IDEOGRAPH
+ {0xD9C0, 0x7261}, //13602 #CJK UNIFIED IDEOGRAPH
+ {0xD9C1, 0x7441}, //13603 #CJK UNIFIED IDEOGRAPH
+ {0xD9C2, 0x7738}, //13604 #CJK UNIFIED IDEOGRAPH
+ {0xD9C3, 0x77DB}, //13605 #CJK UNIFIED IDEOGRAPH
+ {0xD9C4, 0x8017}, //13606 #CJK UNIFIED IDEOGRAPH
+ {0xD9C5, 0x82BC}, //13607 #CJK UNIFIED IDEOGRAPH
+ {0xD9C6, 0x8305}, //13608 #CJK UNIFIED IDEOGRAPH
+ {0xD9C7, 0x8B00}, //13609 #CJK UNIFIED IDEOGRAPH
+ {0xD9C8, 0x8B28}, //13610 #CJK UNIFIED IDEOGRAPH
+ {0xD9C9, 0x8C8C}, //13611 #CJK UNIFIED IDEOGRAPH
+ {0xD9CA, 0x6728}, //13612 #CJK UNIFIED IDEOGRAPH
+ {0xD9CB, 0x6C90}, //13613 #CJK UNIFIED IDEOGRAPH
+ {0xD9CC, 0x7267}, //13614 #CJK UNIFIED IDEOGRAPH
+ {0xD9CD, 0x76EE}, //13615 #CJK UNIFIED IDEOGRAPH
+ {0xD9CE, 0x7766}, //13616 #CJK UNIFIED IDEOGRAPH
+ {0xD9CF, 0x7A46}, //13617 #CJK UNIFIED IDEOGRAPH
+ {0xD9D0, 0x9DA9}, //13618 #CJK UNIFIED IDEOGRAPH
+ {0xD9D1, 0x6B7F}, //13619 #CJK UNIFIED IDEOGRAPH
+ {0xD9D2, 0x6C92}, //13620 #CJK UNIFIED IDEOGRAPH
+ {0xD9D3, 0x5922}, //13621 #CJK UNIFIED IDEOGRAPH
+ {0xD9D4, 0x6726}, //13622 #CJK UNIFIED IDEOGRAPH
+ {0xD9D5, 0x8499}, //13623 #CJK UNIFIED IDEOGRAPH
+ {0xD9D6, 0x536F}, //13624 #CJK UNIFIED IDEOGRAPH
+ {0xD9D7, 0x5893}, //13625 #CJK UNIFIED IDEOGRAPH
+ {0xD9D8, 0x5999}, //13626 #CJK UNIFIED IDEOGRAPH
+ {0xD9D9, 0x5EDF}, //13627 #CJK UNIFIED IDEOGRAPH
+ {0xD9DA, 0x63CF}, //13628 #CJK UNIFIED IDEOGRAPH
+ {0xD9DB, 0x6634}, //13629 #CJK UNIFIED IDEOGRAPH
+ {0xD9DC, 0x6773}, //13630 #CJK UNIFIED IDEOGRAPH
+ {0xD9DD, 0x6E3A}, //13631 #CJK UNIFIED IDEOGRAPH
+ {0xD9DE, 0x732B}, //13632 #CJK UNIFIED IDEOGRAPH
+ {0xD9DF, 0x7AD7}, //13633 #CJK UNIFIED IDEOGRAPH
+ {0xD9E0, 0x82D7}, //13634 #CJK UNIFIED IDEOGRAPH
+ {0xD9E1, 0x9328}, //13635 #CJK UNIFIED IDEOGRAPH
+ {0xD9E2, 0x52D9}, //13636 #CJK UNIFIED IDEOGRAPH
+ {0xD9E3, 0x5DEB}, //13637 #CJK UNIFIED IDEOGRAPH
+ {0xD9E4, 0x61AE}, //13638 #CJK UNIFIED IDEOGRAPH
+ {0xD9E5, 0x61CB}, //13639 #CJK UNIFIED IDEOGRAPH
+ {0xD9E6, 0x620A}, //13640 #CJK UNIFIED IDEOGRAPH
+ {0xD9E7, 0x62C7}, //13641 #CJK UNIFIED IDEOGRAPH
+ {0xD9E8, 0x64AB}, //13642 #CJK UNIFIED IDEOGRAPH
+ {0xD9E9, 0x65E0}, //13643 #CJK UNIFIED IDEOGRAPH
+ {0xD9EA, 0x6959}, //13644 #CJK UNIFIED IDEOGRAPH
+ {0xD9EB, 0x6B66}, //13645 #CJK UNIFIED IDEOGRAPH
+ {0xD9EC, 0x6BCB}, //13646 #CJK UNIFIED IDEOGRAPH
+ {0xD9ED, 0x7121}, //13647 #CJK UNIFIED IDEOGRAPH
+ {0xD9EE, 0x73F7}, //13648 #CJK UNIFIED IDEOGRAPH
+ {0xD9EF, 0x755D}, //13649 #CJK UNIFIED IDEOGRAPH
+ {0xD9F0, 0x7E46}, //13650 #CJK UNIFIED IDEOGRAPH
+ {0xD9F1, 0x821E}, //13651 #CJK UNIFIED IDEOGRAPH
+ {0xD9F2, 0x8302}, //13652 #CJK UNIFIED IDEOGRAPH
+ {0xD9F3, 0x856A}, //13653 #CJK UNIFIED IDEOGRAPH
+ {0xD9F4, 0x8AA3}, //13654 #CJK UNIFIED IDEOGRAPH
+ {0xD9F5, 0x8CBF}, //13655 #CJK UNIFIED IDEOGRAPH
+ {0xD9F6, 0x9727}, //13656 #CJK UNIFIED IDEOGRAPH
+ {0xD9F7, 0x9D61}, //13657 #CJK UNIFIED IDEOGRAPH
+ {0xD9F8, 0x58A8}, //13658 #CJK UNIFIED IDEOGRAPH
+ {0xD9F9, 0x9ED8}, //13659 #CJK UNIFIED IDEOGRAPH
+ {0xD9FA, 0x5011}, //13660 #CJK UNIFIED IDEOGRAPH
+ {0xD9FB, 0x520E}, //13661 #CJK UNIFIED IDEOGRAPH
+ {0xD9FC, 0x543B}, //13662 #CJK UNIFIED IDEOGRAPH
+ {0xD9FD, 0x554F}, //13663 #CJK UNIFIED IDEOGRAPH
+ {0xD9FE, 0x6587}, //13664 #CJK UNIFIED IDEOGRAPH
+ {0xDAA1, 0x6C76}, //13665 #CJK UNIFIED IDEOGRAPH
+ {0xDAA2, 0x7D0A}, //13666 #CJK UNIFIED IDEOGRAPH
+ {0xDAA3, 0x7D0B}, //13667 #CJK UNIFIED IDEOGRAPH
+ {0xDAA4, 0x805E}, //13668 #CJK UNIFIED IDEOGRAPH
+ {0xDAA5, 0x868A}, //13669 #CJK UNIFIED IDEOGRAPH
+ {0xDAA6, 0x9580}, //13670 #CJK UNIFIED IDEOGRAPH
+ {0xDAA7, 0x96EF}, //13671 #CJK UNIFIED IDEOGRAPH
+ {0xDAA8, 0x52FF}, //13672 #CJK UNIFIED IDEOGRAPH
+ {0xDAA9, 0x6C95}, //13673 #CJK UNIFIED IDEOGRAPH
+ {0xDAAA, 0x7269}, //13674 #CJK UNIFIED IDEOGRAPH
+ {0xDAAB, 0x5473}, //13675 #CJK UNIFIED IDEOGRAPH
+ {0xDAAC, 0x5A9A}, //13676 #CJK UNIFIED IDEOGRAPH
+ {0xDAAD, 0x5C3E}, //13677 #CJK UNIFIED IDEOGRAPH
+ {0xDAAE, 0x5D4B}, //13678 #CJK UNIFIED IDEOGRAPH
+ {0xDAAF, 0x5F4C}, //13679 #CJK UNIFIED IDEOGRAPH
+ {0xDAB0, 0x5FAE}, //13680 #CJK UNIFIED IDEOGRAPH
+ {0xDAB1, 0x672A}, //13681 #CJK UNIFIED IDEOGRAPH
+ {0xDAB2, 0x68B6}, //13682 #CJK UNIFIED IDEOGRAPH
+ {0xDAB3, 0x6963}, //13683 #CJK UNIFIED IDEOGRAPH
+ {0xDAB4, 0x6E3C}, //13684 #CJK UNIFIED IDEOGRAPH
+ {0xDAB5, 0x6E44}, //13685 #CJK UNIFIED IDEOGRAPH
+ {0xDAB6, 0x7709}, //13686 #CJK UNIFIED IDEOGRAPH
+ {0xDAB7, 0x7C73}, //13687 #CJK UNIFIED IDEOGRAPH
+ {0xDAB8, 0x7F8E}, //13688 #CJK UNIFIED IDEOGRAPH
+ {0xDAB9, 0x8587}, //13689 #CJK UNIFIED IDEOGRAPH
+ {0xDABA, 0x8B0E}, //13690 #CJK UNIFIED IDEOGRAPH
+ {0xDABB, 0x8FF7}, //13691 #CJK UNIFIED IDEOGRAPH
+ {0xDABC, 0x9761}, //13692 #CJK UNIFIED IDEOGRAPH
+ {0xDABD, 0x9EF4}, //13693 #CJK UNIFIED IDEOGRAPH
+ {0xDABE, 0x5CB7}, //13694 #CJK UNIFIED IDEOGRAPH
+ {0xDABF, 0x60B6}, //13695 #CJK UNIFIED IDEOGRAPH
+ {0xDAC0, 0x610D}, //13696 #CJK UNIFIED IDEOGRAPH
+ {0xDAC1, 0x61AB}, //13697 #CJK UNIFIED IDEOGRAPH
+ {0xDAC2, 0x654F}, //13698 #CJK UNIFIED IDEOGRAPH
+ {0xDAC3, 0x65FB}, //13699 #CJK UNIFIED IDEOGRAPH
+ {0xDAC4, 0x65FC}, //13700 #CJK UNIFIED IDEOGRAPH
+ {0xDAC5, 0x6C11}, //13701 #CJK UNIFIED IDEOGRAPH
+ {0xDAC6, 0x6CEF}, //13702 #CJK UNIFIED IDEOGRAPH
+ {0xDAC7, 0x739F}, //13703 #CJK UNIFIED IDEOGRAPH
+ {0xDAC8, 0x73C9}, //13704 #CJK UNIFIED IDEOGRAPH
+ {0xDAC9, 0x7DE1}, //13705 #CJK UNIFIED IDEOGRAPH
+ {0xDACA, 0x9594}, //13706 #CJK UNIFIED IDEOGRAPH
+ {0xDACB, 0x5BC6}, //13707 #CJK UNIFIED IDEOGRAPH
+ {0xDACC, 0x871C}, //13708 #CJK UNIFIED IDEOGRAPH
+ {0xDACD, 0x8B10}, //13709 #CJK UNIFIED IDEOGRAPH
+ {0xDACE, 0x525D}, //13710 #CJK UNIFIED IDEOGRAPH
+ {0xDACF, 0x535A}, //13711 #CJK UNIFIED IDEOGRAPH
+ {0xDAD0, 0x62CD}, //13712 #CJK UNIFIED IDEOGRAPH
+ {0xDAD1, 0x640F}, //13713 #CJK UNIFIED IDEOGRAPH
+ {0xDAD2, 0x64B2}, //13714 #CJK UNIFIED IDEOGRAPH
+ {0xDAD3, 0x6734}, //13715 #CJK UNIFIED IDEOGRAPH
+ {0xDAD4, 0x6A38}, //13716 #CJK UNIFIED IDEOGRAPH
+ {0xDAD5, 0x6CCA}, //13717 #CJK UNIFIED IDEOGRAPH
+ {0xDAD6, 0x73C0}, //13718 #CJK UNIFIED IDEOGRAPH
+ {0xDAD7, 0x749E}, //13719 #CJK UNIFIED IDEOGRAPH
+ {0xDAD8, 0x7B94}, //13720 #CJK UNIFIED IDEOGRAPH
+ {0xDAD9, 0x7C95}, //13721 #CJK UNIFIED IDEOGRAPH
+ {0xDADA, 0x7E1B}, //13722 #CJK UNIFIED IDEOGRAPH
+ {0xDADB, 0x818A}, //13723 #CJK UNIFIED IDEOGRAPH
+ {0xDADC, 0x8236}, //13724 #CJK UNIFIED IDEOGRAPH
+ {0xDADD, 0x8584}, //13725 #CJK UNIFIED IDEOGRAPH
+ {0xDADE, 0x8FEB}, //13726 #CJK UNIFIED IDEOGRAPH
+ {0xDADF, 0x96F9}, //13727 #CJK UNIFIED IDEOGRAPH
+ {0xDAE0, 0x99C1}, //13728 #CJK UNIFIED IDEOGRAPH
+ {0xDAE1, 0x4F34}, //13729 #CJK UNIFIED IDEOGRAPH
+ {0xDAE2, 0x534A}, //13730 #CJK UNIFIED IDEOGRAPH
+ {0xDAE3, 0x53CD}, //13731 #CJK UNIFIED IDEOGRAPH
+ {0xDAE4, 0x53DB}, //13732 #CJK UNIFIED IDEOGRAPH
+ {0xDAE5, 0x62CC}, //13733 #CJK UNIFIED IDEOGRAPH
+ {0xDAE6, 0x642C}, //13734 #CJK UNIFIED IDEOGRAPH
+ {0xDAE7, 0x6500}, //13735 #CJK UNIFIED IDEOGRAPH
+ {0xDAE8, 0x6591}, //13736 #CJK UNIFIED IDEOGRAPH
+ {0xDAE9, 0x69C3}, //13737 #CJK UNIFIED IDEOGRAPH
+ {0xDAEA, 0x6CEE}, //13738 #CJK UNIFIED IDEOGRAPH
+ {0xDAEB, 0x6F58}, //13739 #CJK UNIFIED IDEOGRAPH
+ {0xDAEC, 0x73ED}, //13740 #CJK UNIFIED IDEOGRAPH
+ {0xDAED, 0x7554}, //13741 #CJK UNIFIED IDEOGRAPH
+ {0xDAEE, 0x7622}, //13742 #CJK UNIFIED IDEOGRAPH
+ {0xDAEF, 0x76E4}, //13743 #CJK UNIFIED IDEOGRAPH
+ {0xDAF0, 0x76FC}, //13744 #CJK UNIFIED IDEOGRAPH
+ {0xDAF1, 0x78D0}, //13745 #CJK UNIFIED IDEOGRAPH
+ {0xDAF2, 0x78FB}, //13746 #CJK UNIFIED IDEOGRAPH
+ {0xDAF3, 0x792C}, //13747 #CJK UNIFIED IDEOGRAPH
+ {0xDAF4, 0x7D46}, //13748 #CJK UNIFIED IDEOGRAPH
+ {0xDAF5, 0x822C}, //13749 #CJK UNIFIED IDEOGRAPH
+ {0xDAF6, 0x87E0}, //13750 #CJK UNIFIED IDEOGRAPH
+ {0xDAF7, 0x8FD4}, //13751 #CJK UNIFIED IDEOGRAPH
+ {0xDAF8, 0x9812}, //13752 #CJK UNIFIED IDEOGRAPH
+ {0xDAF9, 0x98EF}, //13753 #CJK UNIFIED IDEOGRAPH
+ {0xDAFA, 0x52C3}, //13754 #CJK UNIFIED IDEOGRAPH
+ {0xDAFB, 0x62D4}, //13755 #CJK UNIFIED IDEOGRAPH
+ {0xDAFC, 0x64A5}, //13756 #CJK UNIFIED IDEOGRAPH
+ {0xDAFD, 0x6E24}, //13757 #CJK UNIFIED IDEOGRAPH
+ {0xDAFE, 0x6F51}, //13758 #CJK UNIFIED IDEOGRAPH
+ {0xDBA1, 0x767C}, //13759 #CJK UNIFIED IDEOGRAPH
+ {0xDBA2, 0x8DCB}, //13760 #CJK UNIFIED IDEOGRAPH
+ {0xDBA3, 0x91B1}, //13761 #CJK UNIFIED IDEOGRAPH
+ {0xDBA4, 0x9262}, //13762 #CJK UNIFIED IDEOGRAPH
+ {0xDBA5, 0x9AEE}, //13763 #CJK UNIFIED IDEOGRAPH
+ {0xDBA6, 0x9B43}, //13764 #CJK UNIFIED IDEOGRAPH
+ {0xDBA7, 0x5023}, //13765 #CJK UNIFIED IDEOGRAPH
+ {0xDBA8, 0x508D}, //13766 #CJK UNIFIED IDEOGRAPH
+ {0xDBA9, 0x574A}, //13767 #CJK UNIFIED IDEOGRAPH
+ {0xDBAA, 0x59A8}, //13768 #CJK UNIFIED IDEOGRAPH
+ {0xDBAB, 0x5C28}, //13769 #CJK UNIFIED IDEOGRAPH
+ {0xDBAC, 0x5E47}, //13770 #CJK UNIFIED IDEOGRAPH
+ {0xDBAD, 0x5F77}, //13771 #CJK UNIFIED IDEOGRAPH
+ {0xDBAE, 0x623F}, //13772 #CJK UNIFIED IDEOGRAPH
+ {0xDBAF, 0x653E}, //13773 #CJK UNIFIED IDEOGRAPH
+ {0xDBB0, 0x65B9}, //13774 #CJK UNIFIED IDEOGRAPH
+ {0xDBB1, 0x65C1}, //13775 #CJK UNIFIED IDEOGRAPH
+ {0xDBB2, 0x6609}, //13776 #CJK UNIFIED IDEOGRAPH
+ {0xDBB3, 0x678B}, //13777 #CJK UNIFIED IDEOGRAPH
+ {0xDBB4, 0x699C}, //13778 #CJK UNIFIED IDEOGRAPH
+ {0xDBB5, 0x6EC2}, //13779 #CJK UNIFIED IDEOGRAPH
+ {0xDBB6, 0x78C5}, //13780 #CJK UNIFIED IDEOGRAPH
+ {0xDBB7, 0x7D21}, //13781 #CJK UNIFIED IDEOGRAPH
+ {0xDBB8, 0x80AA}, //13782 #CJK UNIFIED IDEOGRAPH
+ {0xDBB9, 0x8180}, //13783 #CJK UNIFIED IDEOGRAPH
+ {0xDBBA, 0x822B}, //13784 #CJK UNIFIED IDEOGRAPH
+ {0xDBBB, 0x82B3}, //13785 #CJK UNIFIED IDEOGRAPH
+ {0xDBBC, 0x84A1}, //13786 #CJK UNIFIED IDEOGRAPH
+ {0xDBBD, 0x868C}, //13787 #CJK UNIFIED IDEOGRAPH
+ {0xDBBE, 0x8A2A}, //13788 #CJK UNIFIED IDEOGRAPH
+ {0xDBBF, 0x8B17}, //13789 #CJK UNIFIED IDEOGRAPH
+ {0xDBC0, 0x90A6}, //13790 #CJK UNIFIED IDEOGRAPH
+ {0xDBC1, 0x9632}, //13791 #CJK UNIFIED IDEOGRAPH
+ {0xDBC2, 0x9F90}, //13792 #CJK UNIFIED IDEOGRAPH
+ {0xDBC3, 0x500D}, //13793 #CJK UNIFIED IDEOGRAPH
+ {0xDBC4, 0x4FF3}, //13794 #CJK UNIFIED IDEOGRAPH
+ {0xDBC5, 0xF963}, //13795 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDBC6, 0x57F9}, //13796 #CJK UNIFIED IDEOGRAPH
+ {0xDBC7, 0x5F98}, //13797 #CJK UNIFIED IDEOGRAPH
+ {0xDBC8, 0x62DC}, //13798 #CJK UNIFIED IDEOGRAPH
+ {0xDBC9, 0x6392}, //13799 #CJK UNIFIED IDEOGRAPH
+ {0xDBCA, 0x676F}, //13800 #CJK UNIFIED IDEOGRAPH
+ {0xDBCB, 0x6E43}, //13801 #CJK UNIFIED IDEOGRAPH
+ {0xDBCC, 0x7119}, //13802 #CJK UNIFIED IDEOGRAPH
+ {0xDBCD, 0x76C3}, //13803 #CJK UNIFIED IDEOGRAPH
+ {0xDBCE, 0x80CC}, //13804 #CJK UNIFIED IDEOGRAPH
+ {0xDBCF, 0x80DA}, //13805 #CJK UNIFIED IDEOGRAPH
+ {0xDBD0, 0x88F4}, //13806 #CJK UNIFIED IDEOGRAPH
+ {0xDBD1, 0x88F5}, //13807 #CJK UNIFIED IDEOGRAPH
+ {0xDBD2, 0x8919}, //13808 #CJK UNIFIED IDEOGRAPH
+ {0xDBD3, 0x8CE0}, //13809 #CJK UNIFIED IDEOGRAPH
+ {0xDBD4, 0x8F29}, //13810 #CJK UNIFIED IDEOGRAPH
+ {0xDBD5, 0x914D}, //13811 #CJK UNIFIED IDEOGRAPH
+ {0xDBD6, 0x966A}, //13812 #CJK UNIFIED IDEOGRAPH
+ {0xDBD7, 0x4F2F}, //13813 #CJK UNIFIED IDEOGRAPH
+ {0xDBD8, 0x4F70}, //13814 #CJK UNIFIED IDEOGRAPH
+ {0xDBD9, 0x5E1B}, //13815 #CJK UNIFIED IDEOGRAPH
+ {0xDBDA, 0x67CF}, //13816 #CJK UNIFIED IDEOGRAPH
+ {0xDBDB, 0x6822}, //13817 #CJK UNIFIED IDEOGRAPH
+ {0xDBDC, 0x767D}, //13818 #CJK UNIFIED IDEOGRAPH
+ {0xDBDD, 0x767E}, //13819 #CJK UNIFIED IDEOGRAPH
+ {0xDBDE, 0x9B44}, //13820 #CJK UNIFIED IDEOGRAPH
+ {0xDBDF, 0x5E61}, //13821 #CJK UNIFIED IDEOGRAPH
+ {0xDBE0, 0x6A0A}, //13822 #CJK UNIFIED IDEOGRAPH
+ {0xDBE1, 0x7169}, //13823 #CJK UNIFIED IDEOGRAPH
+ {0xDBE2, 0x71D4}, //13824 #CJK UNIFIED IDEOGRAPH
+ {0xDBE3, 0x756A}, //13825 #CJK UNIFIED IDEOGRAPH
+ {0xDBE4, 0xF964}, //13826 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDBE5, 0x7E41}, //13827 #CJK UNIFIED IDEOGRAPH
+ {0xDBE6, 0x8543}, //13828 #CJK UNIFIED IDEOGRAPH
+ {0xDBE7, 0x85E9}, //13829 #CJK UNIFIED IDEOGRAPH
+ {0xDBE8, 0x98DC}, //13830 #CJK UNIFIED IDEOGRAPH
+ {0xDBE9, 0x4F10}, //13831 #CJK UNIFIED IDEOGRAPH
+ {0xDBEA, 0x7B4F}, //13832 #CJK UNIFIED IDEOGRAPH
+ {0xDBEB, 0x7F70}, //13833 #CJK UNIFIED IDEOGRAPH
+ {0xDBEC, 0x95A5}, //13834 #CJK UNIFIED IDEOGRAPH
+ {0xDBED, 0x51E1}, //13835 #CJK UNIFIED IDEOGRAPH
+ {0xDBEE, 0x5E06}, //13836 #CJK UNIFIED IDEOGRAPH
+ {0xDBEF, 0x68B5}, //13837 #CJK UNIFIED IDEOGRAPH
+ {0xDBF0, 0x6C3E}, //13838 #CJK UNIFIED IDEOGRAPH
+ {0xDBF1, 0x6C4E}, //13839 #CJK UNIFIED IDEOGRAPH
+ {0xDBF2, 0x6CDB}, //13840 #CJK UNIFIED IDEOGRAPH
+ {0xDBF3, 0x72AF}, //13841 #CJK UNIFIED IDEOGRAPH
+ {0xDBF4, 0x7BC4}, //13842 #CJK UNIFIED IDEOGRAPH
+ {0xDBF5, 0x8303}, //13843 #CJK UNIFIED IDEOGRAPH
+ {0xDBF6, 0x6CD5}, //13844 #CJK UNIFIED IDEOGRAPH
+ {0xDBF7, 0x743A}, //13845 #CJK UNIFIED IDEOGRAPH
+ {0xDBF8, 0x50FB}, //13846 #CJK UNIFIED IDEOGRAPH
+ {0xDBF9, 0x5288}, //13847 #CJK UNIFIED IDEOGRAPH
+ {0xDBFA, 0x58C1}, //13848 #CJK UNIFIED IDEOGRAPH
+ {0xDBFB, 0x64D8}, //13849 #CJK UNIFIED IDEOGRAPH
+ {0xDBFC, 0x6A97}, //13850 #CJK UNIFIED IDEOGRAPH
+ {0xDBFD, 0x74A7}, //13851 #CJK UNIFIED IDEOGRAPH
+ {0xDBFE, 0x7656}, //13852 #CJK UNIFIED IDEOGRAPH
+ {0xDCA1, 0x78A7}, //13853 #CJK UNIFIED IDEOGRAPH
+ {0xDCA2, 0x8617}, //13854 #CJK UNIFIED IDEOGRAPH
+ {0xDCA3, 0x95E2}, //13855 #CJK UNIFIED IDEOGRAPH
+ {0xDCA4, 0x9739}, //13856 #CJK UNIFIED IDEOGRAPH
+ {0xDCA5, 0xF965}, //13857 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDCA6, 0x535E}, //13858 #CJK UNIFIED IDEOGRAPH
+ {0xDCA7, 0x5F01}, //13859 #CJK UNIFIED IDEOGRAPH
+ {0xDCA8, 0x8B8A}, //13860 #CJK UNIFIED IDEOGRAPH
+ {0xDCA9, 0x8FA8}, //13861 #CJK UNIFIED IDEOGRAPH
+ {0xDCAA, 0x8FAF}, //13862 #CJK UNIFIED IDEOGRAPH
+ {0xDCAB, 0x908A}, //13863 #CJK UNIFIED IDEOGRAPH
+ {0xDCAC, 0x5225}, //13864 #CJK UNIFIED IDEOGRAPH
+ {0xDCAD, 0x77A5}, //13865 #CJK UNIFIED IDEOGRAPH
+ {0xDCAE, 0x9C49}, //13866 #CJK UNIFIED IDEOGRAPH
+ {0xDCAF, 0x9F08}, //13867 #CJK UNIFIED IDEOGRAPH
+ {0xDCB0, 0x4E19}, //13868 #CJK UNIFIED IDEOGRAPH
+ {0xDCB1, 0x5002}, //13869 #CJK UNIFIED IDEOGRAPH
+ {0xDCB2, 0x5175}, //13870 #CJK UNIFIED IDEOGRAPH
+ {0xDCB3, 0x5C5B}, //13871 #CJK UNIFIED IDEOGRAPH
+ {0xDCB4, 0x5E77}, //13872 #CJK UNIFIED IDEOGRAPH
+ {0xDCB5, 0x661E}, //13873 #CJK UNIFIED IDEOGRAPH
+ {0xDCB6, 0x663A}, //13874 #CJK UNIFIED IDEOGRAPH
+ {0xDCB7, 0x67C4}, //13875 #CJK UNIFIED IDEOGRAPH
+ {0xDCB8, 0x68C5}, //13876 #CJK UNIFIED IDEOGRAPH
+ {0xDCB9, 0x70B3}, //13877 #CJK UNIFIED IDEOGRAPH
+ {0xDCBA, 0x7501}, //13878 #CJK UNIFIED IDEOGRAPH
+ {0xDCBB, 0x75C5}, //13879 #CJK UNIFIED IDEOGRAPH
+ {0xDCBC, 0x79C9}, //13880 #CJK UNIFIED IDEOGRAPH
+ {0xDCBD, 0x7ADD}, //13881 #CJK UNIFIED IDEOGRAPH
+ {0xDCBE, 0x8F27}, //13882 #CJK UNIFIED IDEOGRAPH
+ {0xDCBF, 0x9920}, //13883 #CJK UNIFIED IDEOGRAPH
+ {0xDCC0, 0x9A08}, //13884 #CJK UNIFIED IDEOGRAPH
+ {0xDCC1, 0x4FDD}, //13885 #CJK UNIFIED IDEOGRAPH
+ {0xDCC2, 0x5821}, //13886 #CJK UNIFIED IDEOGRAPH
+ {0xDCC3, 0x5831}, //13887 #CJK UNIFIED IDEOGRAPH
+ {0xDCC4, 0x5BF6}, //13888 #CJK UNIFIED IDEOGRAPH
+ {0xDCC5, 0x666E}, //13889 #CJK UNIFIED IDEOGRAPH
+ {0xDCC6, 0x6B65}, //13890 #CJK UNIFIED IDEOGRAPH
+ {0xDCC7, 0x6D11}, //13891 #CJK UNIFIED IDEOGRAPH
+ {0xDCC8, 0x6E7A}, //13892 #CJK UNIFIED IDEOGRAPH
+ {0xDCC9, 0x6F7D}, //13893 #CJK UNIFIED IDEOGRAPH
+ {0xDCCA, 0x73E4}, //13894 #CJK UNIFIED IDEOGRAPH
+ {0xDCCB, 0x752B}, //13895 #CJK UNIFIED IDEOGRAPH
+ {0xDCCC, 0x83E9}, //13896 #CJK UNIFIED IDEOGRAPH
+ {0xDCCD, 0x88DC}, //13897 #CJK UNIFIED IDEOGRAPH
+ {0xDCCE, 0x8913}, //13898 #CJK UNIFIED IDEOGRAPH
+ {0xDCCF, 0x8B5C}, //13899 #CJK UNIFIED IDEOGRAPH
+ {0xDCD0, 0x8F14}, //13900 #CJK UNIFIED IDEOGRAPH
+ {0xDCD1, 0x4F0F}, //13901 #CJK UNIFIED IDEOGRAPH
+ {0xDCD2, 0x50D5}, //13902 #CJK UNIFIED IDEOGRAPH
+ {0xDCD3, 0x5310}, //13903 #CJK UNIFIED IDEOGRAPH
+ {0xDCD4, 0x535C}, //13904 #CJK UNIFIED IDEOGRAPH
+ {0xDCD5, 0x5B93}, //13905 #CJK UNIFIED IDEOGRAPH
+ {0xDCD6, 0x5FA9}, //13906 #CJK UNIFIED IDEOGRAPH
+ {0xDCD7, 0x670D}, //13907 #CJK UNIFIED IDEOGRAPH
+ {0xDCD8, 0x798F}, //13908 #CJK UNIFIED IDEOGRAPH
+ {0xDCD9, 0x8179}, //13909 #CJK UNIFIED IDEOGRAPH
+ {0xDCDA, 0x832F}, //13910 #CJK UNIFIED IDEOGRAPH
+ {0xDCDB, 0x8514}, //13911 #CJK UNIFIED IDEOGRAPH
+ {0xDCDC, 0x8907}, //13912 #CJK UNIFIED IDEOGRAPH
+ {0xDCDD, 0x8986}, //13913 #CJK UNIFIED IDEOGRAPH
+ {0xDCDE, 0x8F39}, //13914 #CJK UNIFIED IDEOGRAPH
+ {0xDCDF, 0x8F3B}, //13915 #CJK UNIFIED IDEOGRAPH
+ {0xDCE0, 0x99A5}, //13916 #CJK UNIFIED IDEOGRAPH
+ {0xDCE1, 0x9C12}, //13917 #CJK UNIFIED IDEOGRAPH
+ {0xDCE2, 0x672C}, //13918 #CJK UNIFIED IDEOGRAPH
+ {0xDCE3, 0x4E76}, //13919 #CJK UNIFIED IDEOGRAPH
+ {0xDCE4, 0x4FF8}, //13920 #CJK UNIFIED IDEOGRAPH
+ {0xDCE5, 0x5949}, //13921 #CJK UNIFIED IDEOGRAPH
+ {0xDCE6, 0x5C01}, //13922 #CJK UNIFIED IDEOGRAPH
+ {0xDCE7, 0x5CEF}, //13923 #CJK UNIFIED IDEOGRAPH
+ {0xDCE8, 0x5CF0}, //13924 #CJK UNIFIED IDEOGRAPH
+ {0xDCE9, 0x6367}, //13925 #CJK UNIFIED IDEOGRAPH
+ {0xDCEA, 0x68D2}, //13926 #CJK UNIFIED IDEOGRAPH
+ {0xDCEB, 0x70FD}, //13927 #CJK UNIFIED IDEOGRAPH
+ {0xDCEC, 0x71A2}, //13928 #CJK UNIFIED IDEOGRAPH
+ {0xDCED, 0x742B}, //13929 #CJK UNIFIED IDEOGRAPH
+ {0xDCEE, 0x7E2B}, //13930 #CJK UNIFIED IDEOGRAPH
+ {0xDCEF, 0x84EC}, //13931 #CJK UNIFIED IDEOGRAPH
+ {0xDCF0, 0x8702}, //13932 #CJK UNIFIED IDEOGRAPH
+ {0xDCF1, 0x9022}, //13933 #CJK UNIFIED IDEOGRAPH
+ {0xDCF2, 0x92D2}, //13934 #CJK UNIFIED IDEOGRAPH
+ {0xDCF3, 0x9CF3}, //13935 #CJK UNIFIED IDEOGRAPH
+ {0xDCF4, 0x4E0D}, //13936 #CJK UNIFIED IDEOGRAPH
+ {0xDCF5, 0x4ED8}, //13937 #CJK UNIFIED IDEOGRAPH
+ {0xDCF6, 0x4FEF}, //13938 #CJK UNIFIED IDEOGRAPH
+ {0xDCF7, 0x5085}, //13939 #CJK UNIFIED IDEOGRAPH
+ {0xDCF8, 0x5256}, //13940 #CJK UNIFIED IDEOGRAPH
+ {0xDCF9, 0x526F}, //13941 #CJK UNIFIED IDEOGRAPH
+ {0xDCFA, 0x5426}, //13942 #CJK UNIFIED IDEOGRAPH
+ {0xDCFB, 0x5490}, //13943 #CJK UNIFIED IDEOGRAPH
+ {0xDCFC, 0x57E0}, //13944 #CJK UNIFIED IDEOGRAPH
+ {0xDCFD, 0x592B}, //13945 #CJK UNIFIED IDEOGRAPH
+ {0xDCFE, 0x5A66}, //13946 #CJK UNIFIED IDEOGRAPH
+ {0xDDA1, 0x5B5A}, //13947 #CJK UNIFIED IDEOGRAPH
+ {0xDDA2, 0x5B75}, //13948 #CJK UNIFIED IDEOGRAPH
+ {0xDDA3, 0x5BCC}, //13949 #CJK UNIFIED IDEOGRAPH
+ {0xDDA4, 0x5E9C}, //13950 #CJK UNIFIED IDEOGRAPH
+ {0xDDA5, 0xF966}, //13951 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDDA6, 0x6276}, //13952 #CJK UNIFIED IDEOGRAPH
+ {0xDDA7, 0x6577}, //13953 #CJK UNIFIED IDEOGRAPH
+ {0xDDA8, 0x65A7}, //13954 #CJK UNIFIED IDEOGRAPH
+ {0xDDA9, 0x6D6E}, //13955 #CJK UNIFIED IDEOGRAPH
+ {0xDDAA, 0x6EA5}, //13956 #CJK UNIFIED IDEOGRAPH
+ {0xDDAB, 0x7236}, //13957 #CJK UNIFIED IDEOGRAPH
+ {0xDDAC, 0x7B26}, //13958 #CJK UNIFIED IDEOGRAPH
+ {0xDDAD, 0x7C3F}, //13959 #CJK UNIFIED IDEOGRAPH
+ {0xDDAE, 0x7F36}, //13960 #CJK UNIFIED IDEOGRAPH
+ {0xDDAF, 0x8150}, //13961 #CJK UNIFIED IDEOGRAPH
+ {0xDDB0, 0x8151}, //13962 #CJK UNIFIED IDEOGRAPH
+ {0xDDB1, 0x819A}, //13963 #CJK UNIFIED IDEOGRAPH
+ {0xDDB2, 0x8240}, //13964 #CJK UNIFIED IDEOGRAPH
+ {0xDDB3, 0x8299}, //13965 #CJK UNIFIED IDEOGRAPH
+ {0xDDB4, 0x83A9}, //13966 #CJK UNIFIED IDEOGRAPH
+ {0xDDB5, 0x8A03}, //13967 #CJK UNIFIED IDEOGRAPH
+ {0xDDB6, 0x8CA0}, //13968 #CJK UNIFIED IDEOGRAPH
+ {0xDDB7, 0x8CE6}, //13969 #CJK UNIFIED IDEOGRAPH
+ {0xDDB8, 0x8CFB}, //13970 #CJK UNIFIED IDEOGRAPH
+ {0xDDB9, 0x8D74}, //13971 #CJK UNIFIED IDEOGRAPH
+ {0xDDBA, 0x8DBA}, //13972 #CJK UNIFIED IDEOGRAPH
+ {0xDDBB, 0x90E8}, //13973 #CJK UNIFIED IDEOGRAPH
+ {0xDDBC, 0x91DC}, //13974 #CJK UNIFIED IDEOGRAPH
+ {0xDDBD, 0x961C}, //13975 #CJK UNIFIED IDEOGRAPH
+ {0xDDBE, 0x9644}, //13976 #CJK UNIFIED IDEOGRAPH
+ {0xDDBF, 0x99D9}, //13977 #CJK UNIFIED IDEOGRAPH
+ {0xDDC0, 0x9CE7}, //13978 #CJK UNIFIED IDEOGRAPH
+ {0xDDC1, 0x5317}, //13979 #CJK UNIFIED IDEOGRAPH
+ {0xDDC2, 0x5206}, //13980 #CJK UNIFIED IDEOGRAPH
+ {0xDDC3, 0x5429}, //13981 #CJK UNIFIED IDEOGRAPH
+ {0xDDC4, 0x5674}, //13982 #CJK UNIFIED IDEOGRAPH
+ {0xDDC5, 0x58B3}, //13983 #CJK UNIFIED IDEOGRAPH
+ {0xDDC6, 0x5954}, //13984 #CJK UNIFIED IDEOGRAPH
+ {0xDDC7, 0x596E}, //13985 #CJK UNIFIED IDEOGRAPH
+ {0xDDC8, 0x5FFF}, //13986 #CJK UNIFIED IDEOGRAPH
+ {0xDDC9, 0x61A4}, //13987 #CJK UNIFIED IDEOGRAPH
+ {0xDDCA, 0x626E}, //13988 #CJK UNIFIED IDEOGRAPH
+ {0xDDCB, 0x6610}, //13989 #CJK UNIFIED IDEOGRAPH
+ {0xDDCC, 0x6C7E}, //13990 #CJK UNIFIED IDEOGRAPH
+ {0xDDCD, 0x711A}, //13991 #CJK UNIFIED IDEOGRAPH
+ {0xDDCE, 0x76C6}, //13992 #CJK UNIFIED IDEOGRAPH
+ {0xDDCF, 0x7C89}, //13993 #CJK UNIFIED IDEOGRAPH
+ {0xDDD0, 0x7CDE}, //13994 #CJK UNIFIED IDEOGRAPH
+ {0xDDD1, 0x7D1B}, //13995 #CJK UNIFIED IDEOGRAPH
+ {0xDDD2, 0x82AC}, //13996 #CJK UNIFIED IDEOGRAPH
+ {0xDDD3, 0x8CC1}, //13997 #CJK UNIFIED IDEOGRAPH
+ {0xDDD4, 0x96F0}, //13998 #CJK UNIFIED IDEOGRAPH
+ {0xDDD5, 0xF967}, //13999 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDDD6, 0x4F5B}, //14000 #CJK UNIFIED IDEOGRAPH
+ {0xDDD7, 0x5F17}, //14001 #CJK UNIFIED IDEOGRAPH
+ {0xDDD8, 0x5F7F}, //14002 #CJK UNIFIED IDEOGRAPH
+ {0xDDD9, 0x62C2}, //14003 #CJK UNIFIED IDEOGRAPH
+ {0xDDDA, 0x5D29}, //14004 #CJK UNIFIED IDEOGRAPH
+ {0xDDDB, 0x670B}, //14005 #CJK UNIFIED IDEOGRAPH
+ {0xDDDC, 0x68DA}, //14006 #CJK UNIFIED IDEOGRAPH
+ {0xDDDD, 0x787C}, //14007 #CJK UNIFIED IDEOGRAPH
+ {0xDDDE, 0x7E43}, //14008 #CJK UNIFIED IDEOGRAPH
+ {0xDDDF, 0x9D6C}, //14009 #CJK UNIFIED IDEOGRAPH
+ {0xDDE0, 0x4E15}, //14010 #CJK UNIFIED IDEOGRAPH
+ {0xDDE1, 0x5099}, //14011 #CJK UNIFIED IDEOGRAPH
+ {0xDDE2, 0x5315}, //14012 #CJK UNIFIED IDEOGRAPH
+ {0xDDE3, 0x532A}, //14013 #CJK UNIFIED IDEOGRAPH
+ {0xDDE4, 0x5351}, //14014 #CJK UNIFIED IDEOGRAPH
+ {0xDDE5, 0x5983}, //14015 #CJK UNIFIED IDEOGRAPH
+ {0xDDE6, 0x5A62}, //14016 #CJK UNIFIED IDEOGRAPH
+ {0xDDE7, 0x5E87}, //14017 #CJK UNIFIED IDEOGRAPH
+ {0xDDE8, 0x60B2}, //14018 #CJK UNIFIED IDEOGRAPH
+ {0xDDE9, 0x618A}, //14019 #CJK UNIFIED IDEOGRAPH
+ {0xDDEA, 0x6249}, //14020 #CJK UNIFIED IDEOGRAPH
+ {0xDDEB, 0x6279}, //14021 #CJK UNIFIED IDEOGRAPH
+ {0xDDEC, 0x6590}, //14022 #CJK UNIFIED IDEOGRAPH
+ {0xDDED, 0x6787}, //14023 #CJK UNIFIED IDEOGRAPH
+ {0xDDEE, 0x69A7}, //14024 #CJK UNIFIED IDEOGRAPH
+ {0xDDEF, 0x6BD4}, //14025 #CJK UNIFIED IDEOGRAPH
+ {0xDDF0, 0x6BD6}, //14026 #CJK UNIFIED IDEOGRAPH
+ {0xDDF1, 0x6BD7}, //14027 #CJK UNIFIED IDEOGRAPH
+ {0xDDF2, 0x6BD8}, //14028 #CJK UNIFIED IDEOGRAPH
+ {0xDDF3, 0x6CB8}, //14029 #CJK UNIFIED IDEOGRAPH
+ {0xDDF4, 0xF968}, //14030 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDDF5, 0x7435}, //14031 #CJK UNIFIED IDEOGRAPH
+ {0xDDF6, 0x75FA}, //14032 #CJK UNIFIED IDEOGRAPH
+ {0xDDF7, 0x7812}, //14033 #CJK UNIFIED IDEOGRAPH
+ {0xDDF8, 0x7891}, //14034 #CJK UNIFIED IDEOGRAPH
+ {0xDDF9, 0x79D5}, //14035 #CJK UNIFIED IDEOGRAPH
+ {0xDDFA, 0x79D8}, //14036 #CJK UNIFIED IDEOGRAPH
+ {0xDDFB, 0x7C83}, //14037 #CJK UNIFIED IDEOGRAPH
+ {0xDDFC, 0x7DCB}, //14038 #CJK UNIFIED IDEOGRAPH
+ {0xDDFD, 0x7FE1}, //14039 #CJK UNIFIED IDEOGRAPH
+ {0xDDFE, 0x80A5}, //14040 #CJK UNIFIED IDEOGRAPH
+ {0xDEA1, 0x813E}, //14041 #CJK UNIFIED IDEOGRAPH
+ {0xDEA2, 0x81C2}, //14042 #CJK UNIFIED IDEOGRAPH
+ {0xDEA3, 0x83F2}, //14043 #CJK UNIFIED IDEOGRAPH
+ {0xDEA4, 0x871A}, //14044 #CJK UNIFIED IDEOGRAPH
+ {0xDEA5, 0x88E8}, //14045 #CJK UNIFIED IDEOGRAPH
+ {0xDEA6, 0x8AB9}, //14046 #CJK UNIFIED IDEOGRAPH
+ {0xDEA7, 0x8B6C}, //14047 #CJK UNIFIED IDEOGRAPH
+ {0xDEA8, 0x8CBB}, //14048 #CJK UNIFIED IDEOGRAPH
+ {0xDEA9, 0x9119}, //14049 #CJK UNIFIED IDEOGRAPH
+ {0xDEAA, 0x975E}, //14050 #CJK UNIFIED IDEOGRAPH
+ {0xDEAB, 0x98DB}, //14051 #CJK UNIFIED IDEOGRAPH
+ {0xDEAC, 0x9F3B}, //14052 #CJK UNIFIED IDEOGRAPH
+ {0xDEAD, 0x56AC}, //14053 #CJK UNIFIED IDEOGRAPH
+ {0xDEAE, 0x5B2A}, //14054 #CJK UNIFIED IDEOGRAPH
+ {0xDEAF, 0x5F6C}, //14055 #CJK UNIFIED IDEOGRAPH
+ {0xDEB0, 0x658C}, //14056 #CJK UNIFIED IDEOGRAPH
+ {0xDEB1, 0x6AB3}, //14057 #CJK UNIFIED IDEOGRAPH
+ {0xDEB2, 0x6BAF}, //14058 #CJK UNIFIED IDEOGRAPH
+ {0xDEB3, 0x6D5C}, //14059 #CJK UNIFIED IDEOGRAPH
+ {0xDEB4, 0x6FF1}, //14060 #CJK UNIFIED IDEOGRAPH
+ {0xDEB5, 0x7015}, //14061 #CJK UNIFIED IDEOGRAPH
+ {0xDEB6, 0x725D}, //14062 #CJK UNIFIED IDEOGRAPH
+ {0xDEB7, 0x73AD}, //14063 #CJK UNIFIED IDEOGRAPH
+ {0xDEB8, 0x8CA7}, //14064 #CJK UNIFIED IDEOGRAPH
+ {0xDEB9, 0x8CD3}, //14065 #CJK UNIFIED IDEOGRAPH
+ {0xDEBA, 0x983B}, //14066 #CJK UNIFIED IDEOGRAPH
+ {0xDEBB, 0x6191}, //14067 #CJK UNIFIED IDEOGRAPH
+ {0xDEBC, 0x6C37}, //14068 #CJK UNIFIED IDEOGRAPH
+ {0xDEBD, 0x8058}, //14069 #CJK UNIFIED IDEOGRAPH
+ {0xDEBE, 0x9A01}, //14070 #CJK UNIFIED IDEOGRAPH
+ {0xDEBF, 0x4E4D}, //14071 #CJK UNIFIED IDEOGRAPH
+ {0xDEC0, 0x4E8B}, //14072 #CJK UNIFIED IDEOGRAPH
+ {0xDEC1, 0x4E9B}, //14073 #CJK UNIFIED IDEOGRAPH
+ {0xDEC2, 0x4ED5}, //14074 #CJK UNIFIED IDEOGRAPH
+ {0xDEC3, 0x4F3A}, //14075 #CJK UNIFIED IDEOGRAPH
+ {0xDEC4, 0x4F3C}, //14076 #CJK UNIFIED IDEOGRAPH
+ {0xDEC5, 0x4F7F}, //14077 #CJK UNIFIED IDEOGRAPH
+ {0xDEC6, 0x4FDF}, //14078 #CJK UNIFIED IDEOGRAPH
+ {0xDEC7, 0x50FF}, //14079 #CJK UNIFIED IDEOGRAPH
+ {0xDEC8, 0x53F2}, //14080 #CJK UNIFIED IDEOGRAPH
+ {0xDEC9, 0x53F8}, //14081 #CJK UNIFIED IDEOGRAPH
+ {0xDECA, 0x5506}, //14082 #CJK UNIFIED IDEOGRAPH
+ {0xDECB, 0x55E3}, //14083 #CJK UNIFIED IDEOGRAPH
+ {0xDECC, 0x56DB}, //14084 #CJK UNIFIED IDEOGRAPH
+ {0xDECD, 0x58EB}, //14085 #CJK UNIFIED IDEOGRAPH
+ {0xDECE, 0x5962}, //14086 #CJK UNIFIED IDEOGRAPH
+ {0xDECF, 0x5A11}, //14087 #CJK UNIFIED IDEOGRAPH
+ {0xDED0, 0x5BEB}, //14088 #CJK UNIFIED IDEOGRAPH
+ {0xDED1, 0x5BFA}, //14089 #CJK UNIFIED IDEOGRAPH
+ {0xDED2, 0x5C04}, //14090 #CJK UNIFIED IDEOGRAPH
+ {0xDED3, 0x5DF3}, //14091 #CJK UNIFIED IDEOGRAPH
+ {0xDED4, 0x5E2B}, //14092 #CJK UNIFIED IDEOGRAPH
+ {0xDED5, 0x5F99}, //14093 #CJK UNIFIED IDEOGRAPH
+ {0xDED6, 0x601D}, //14094 #CJK UNIFIED IDEOGRAPH
+ {0xDED7, 0x6368}, //14095 #CJK UNIFIED IDEOGRAPH
+ {0xDED8, 0x659C}, //14096 #CJK UNIFIED IDEOGRAPH
+ {0xDED9, 0x65AF}, //14097 #CJK UNIFIED IDEOGRAPH
+ {0xDEDA, 0x67F6}, //14098 #CJK UNIFIED IDEOGRAPH
+ {0xDEDB, 0x67FB}, //14099 #CJK UNIFIED IDEOGRAPH
+ {0xDEDC, 0x68AD}, //14100 #CJK UNIFIED IDEOGRAPH
+ {0xDEDD, 0x6B7B}, //14101 #CJK UNIFIED IDEOGRAPH
+ {0xDEDE, 0x6C99}, //14102 #CJK UNIFIED IDEOGRAPH
+ {0xDEDF, 0x6CD7}, //14103 #CJK UNIFIED IDEOGRAPH
+ {0xDEE0, 0x6E23}, //14104 #CJK UNIFIED IDEOGRAPH
+ {0xDEE1, 0x7009}, //14105 #CJK UNIFIED IDEOGRAPH
+ {0xDEE2, 0x7345}, //14106 #CJK UNIFIED IDEOGRAPH
+ {0xDEE3, 0x7802}, //14107 #CJK UNIFIED IDEOGRAPH
+ {0xDEE4, 0x793E}, //14108 #CJK UNIFIED IDEOGRAPH
+ {0xDEE5, 0x7940}, //14109 #CJK UNIFIED IDEOGRAPH
+ {0xDEE6, 0x7960}, //14110 #CJK UNIFIED IDEOGRAPH
+ {0xDEE7, 0x79C1}, //14111 #CJK UNIFIED IDEOGRAPH
+ {0xDEE8, 0x7BE9}, //14112 #CJK UNIFIED IDEOGRAPH
+ {0xDEE9, 0x7D17}, //14113 #CJK UNIFIED IDEOGRAPH
+ {0xDEEA, 0x7D72}, //14114 #CJK UNIFIED IDEOGRAPH
+ {0xDEEB, 0x8086}, //14115 #CJK UNIFIED IDEOGRAPH
+ {0xDEEC, 0x820D}, //14116 #CJK UNIFIED IDEOGRAPH
+ {0xDEED, 0x838E}, //14117 #CJK UNIFIED IDEOGRAPH
+ {0xDEEE, 0x84D1}, //14118 #CJK UNIFIED IDEOGRAPH
+ {0xDEEF, 0x86C7}, //14119 #CJK UNIFIED IDEOGRAPH
+ {0xDEF0, 0x88DF}, //14120 #CJK UNIFIED IDEOGRAPH
+ {0xDEF1, 0x8A50}, //14121 #CJK UNIFIED IDEOGRAPH
+ {0xDEF2, 0x8A5E}, //14122 #CJK UNIFIED IDEOGRAPH
+ {0xDEF3, 0x8B1D}, //14123 #CJK UNIFIED IDEOGRAPH
+ {0xDEF4, 0x8CDC}, //14124 #CJK UNIFIED IDEOGRAPH
+ {0xDEF5, 0x8D66}, //14125 #CJK UNIFIED IDEOGRAPH
+ {0xDEF6, 0x8FAD}, //14126 #CJK UNIFIED IDEOGRAPH
+ {0xDEF7, 0x90AA}, //14127 #CJK UNIFIED IDEOGRAPH
+ {0xDEF8, 0x98FC}, //14128 #CJK UNIFIED IDEOGRAPH
+ {0xDEF9, 0x99DF}, //14129 #CJK UNIFIED IDEOGRAPH
+ {0xDEFA, 0x9E9D}, //14130 #CJK UNIFIED IDEOGRAPH
+ {0xDEFB, 0x524A}, //14131 #CJK UNIFIED IDEOGRAPH
+ {0xDEFC, 0xF969}, //14132 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDEFD, 0x6714}, //14133 #CJK UNIFIED IDEOGRAPH
+ {0xDEFE, 0xF96A}, //14134 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDFA1, 0x5098}, //14135 #CJK UNIFIED IDEOGRAPH
+ {0xDFA2, 0x522A}, //14136 #CJK UNIFIED IDEOGRAPH
+ {0xDFA3, 0x5C71}, //14137 #CJK UNIFIED IDEOGRAPH
+ {0xDFA4, 0x6563}, //14138 #CJK UNIFIED IDEOGRAPH
+ {0xDFA5, 0x6C55}, //14139 #CJK UNIFIED IDEOGRAPH
+ {0xDFA6, 0x73CA}, //14140 #CJK UNIFIED IDEOGRAPH
+ {0xDFA7, 0x7523}, //14141 #CJK UNIFIED IDEOGRAPH
+ {0xDFA8, 0x759D}, //14142 #CJK UNIFIED IDEOGRAPH
+ {0xDFA9, 0x7B97}, //14143 #CJK UNIFIED IDEOGRAPH
+ {0xDFAA, 0x849C}, //14144 #CJK UNIFIED IDEOGRAPH
+ {0xDFAB, 0x9178}, //14145 #CJK UNIFIED IDEOGRAPH
+ {0xDFAC, 0x9730}, //14146 #CJK UNIFIED IDEOGRAPH
+ {0xDFAD, 0x4E77}, //14147 #CJK UNIFIED IDEOGRAPH
+ {0xDFAE, 0x6492}, //14148 #CJK UNIFIED IDEOGRAPH
+ {0xDFAF, 0x6BBA}, //14149 #CJK UNIFIED IDEOGRAPH
+ {0xDFB0, 0x715E}, //14150 #CJK UNIFIED IDEOGRAPH
+ {0xDFB1, 0x85A9}, //14151 #CJK UNIFIED IDEOGRAPH
+ {0xDFB2, 0x4E09}, //14152 #CJK UNIFIED IDEOGRAPH
+ {0xDFB3, 0xF96B}, //14153 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDFB4, 0x6749}, //14154 #CJK UNIFIED IDEOGRAPH
+ {0xDFB5, 0x68EE}, //14155 #CJK UNIFIED IDEOGRAPH
+ {0xDFB6, 0x6E17}, //14156 #CJK UNIFIED IDEOGRAPH
+ {0xDFB7, 0x829F}, //14157 #CJK UNIFIED IDEOGRAPH
+ {0xDFB8, 0x8518}, //14158 #CJK UNIFIED IDEOGRAPH
+ {0xDFB9, 0x886B}, //14159 #CJK UNIFIED IDEOGRAPH
+ {0xDFBA, 0x63F7}, //14160 #CJK UNIFIED IDEOGRAPH
+ {0xDFBB, 0x6F81}, //14161 #CJK UNIFIED IDEOGRAPH
+ {0xDFBC, 0x9212}, //14162 #CJK UNIFIED IDEOGRAPH
+ {0xDFBD, 0x98AF}, //14163 #CJK UNIFIED IDEOGRAPH
+ {0xDFBE, 0x4E0A}, //14164 #CJK UNIFIED IDEOGRAPH
+ {0xDFBF, 0x50B7}, //14165 #CJK UNIFIED IDEOGRAPH
+ {0xDFC0, 0x50CF}, //14166 #CJK UNIFIED IDEOGRAPH
+ {0xDFC1, 0x511F}, //14167 #CJK UNIFIED IDEOGRAPH
+ {0xDFC2, 0x5546}, //14168 #CJK UNIFIED IDEOGRAPH
+ {0xDFC3, 0x55AA}, //14169 #CJK UNIFIED IDEOGRAPH
+ {0xDFC4, 0x5617}, //14170 #CJK UNIFIED IDEOGRAPH
+ {0xDFC5, 0x5B40}, //14171 #CJK UNIFIED IDEOGRAPH
+ {0xDFC6, 0x5C19}, //14172 #CJK UNIFIED IDEOGRAPH
+ {0xDFC7, 0x5CE0}, //14173 #CJK UNIFIED IDEOGRAPH
+ {0xDFC8, 0x5E38}, //14174 #CJK UNIFIED IDEOGRAPH
+ {0xDFC9, 0x5E8A}, //14175 #CJK UNIFIED IDEOGRAPH
+ {0xDFCA, 0x5EA0}, //14176 #CJK UNIFIED IDEOGRAPH
+ {0xDFCB, 0x5EC2}, //14177 #CJK UNIFIED IDEOGRAPH
+ {0xDFCC, 0x60F3}, //14178 #CJK UNIFIED IDEOGRAPH
+ {0xDFCD, 0x6851}, //14179 #CJK UNIFIED IDEOGRAPH
+ {0xDFCE, 0x6A61}, //14180 #CJK UNIFIED IDEOGRAPH
+ {0xDFCF, 0x6E58}, //14181 #CJK UNIFIED IDEOGRAPH
+ {0xDFD0, 0x723D}, //14182 #CJK UNIFIED IDEOGRAPH
+ {0xDFD1, 0x7240}, //14183 #CJK UNIFIED IDEOGRAPH
+ {0xDFD2, 0x72C0}, //14184 #CJK UNIFIED IDEOGRAPH
+ {0xDFD3, 0x76F8}, //14185 #CJK UNIFIED IDEOGRAPH
+ {0xDFD4, 0x7965}, //14186 #CJK UNIFIED IDEOGRAPH
+ {0xDFD5, 0x7BB1}, //14187 #CJK UNIFIED IDEOGRAPH
+ {0xDFD6, 0x7FD4}, //14188 #CJK UNIFIED IDEOGRAPH
+ {0xDFD7, 0x88F3}, //14189 #CJK UNIFIED IDEOGRAPH
+ {0xDFD8, 0x89F4}, //14190 #CJK UNIFIED IDEOGRAPH
+ {0xDFD9, 0x8A73}, //14191 #CJK UNIFIED IDEOGRAPH
+ {0xDFDA, 0x8C61}, //14192 #CJK UNIFIED IDEOGRAPH
+ {0xDFDB, 0x8CDE}, //14193 #CJK UNIFIED IDEOGRAPH
+ {0xDFDC, 0x971C}, //14194 #CJK UNIFIED IDEOGRAPH
+ {0xDFDD, 0x585E}, //14195 #CJK UNIFIED IDEOGRAPH
+ {0xDFDE, 0x74BD}, //14196 #CJK UNIFIED IDEOGRAPH
+ {0xDFDF, 0x8CFD}, //14197 #CJK UNIFIED IDEOGRAPH
+ {0xDFE0, 0x55C7}, //14198 #CJK UNIFIED IDEOGRAPH
+ {0xDFE1, 0xF96C}, //14199 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDFE2, 0x7A61}, //14200 #CJK UNIFIED IDEOGRAPH
+ {0xDFE3, 0x7D22}, //14201 #CJK UNIFIED IDEOGRAPH
+ {0xDFE4, 0x8272}, //14202 #CJK UNIFIED IDEOGRAPH
+ {0xDFE5, 0x7272}, //14203 #CJK UNIFIED IDEOGRAPH
+ {0xDFE6, 0x751F}, //14204 #CJK UNIFIED IDEOGRAPH
+ {0xDFE7, 0x7525}, //14205 #CJK UNIFIED IDEOGRAPH
+ {0xDFE8, 0xF96D}, //14206 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDFE9, 0x7B19}, //14207 #CJK UNIFIED IDEOGRAPH
+ {0xDFEA, 0x5885}, //14208 #CJK UNIFIED IDEOGRAPH
+ {0xDFEB, 0x58FB}, //14209 #CJK UNIFIED IDEOGRAPH
+ {0xDFEC, 0x5DBC}, //14210 #CJK UNIFIED IDEOGRAPH
+ {0xDFED, 0x5E8F}, //14211 #CJK UNIFIED IDEOGRAPH
+ {0xDFEE, 0x5EB6}, //14212 #CJK UNIFIED IDEOGRAPH
+ {0xDFEF, 0x5F90}, //14213 #CJK UNIFIED IDEOGRAPH
+ {0xDFF0, 0x6055}, //14214 #CJK UNIFIED IDEOGRAPH
+ {0xDFF1, 0x6292}, //14215 #CJK UNIFIED IDEOGRAPH
+ {0xDFF2, 0x637F}, //14216 #CJK UNIFIED IDEOGRAPH
+ {0xDFF3, 0x654D}, //14217 #CJK UNIFIED IDEOGRAPH
+ {0xDFF4, 0x6691}, //14218 #CJK UNIFIED IDEOGRAPH
+ {0xDFF5, 0x66D9}, //14219 #CJK UNIFIED IDEOGRAPH
+ {0xDFF6, 0x66F8}, //14220 #CJK UNIFIED IDEOGRAPH
+ {0xDFF7, 0x6816}, //14221 #CJK UNIFIED IDEOGRAPH
+ {0xDFF8, 0x68F2}, //14222 #CJK UNIFIED IDEOGRAPH
+ {0xDFF9, 0x7280}, //14223 #CJK UNIFIED IDEOGRAPH
+ {0xDFFA, 0x745E}, //14224 #CJK UNIFIED IDEOGRAPH
+ {0xDFFB, 0x7B6E}, //14225 #CJK UNIFIED IDEOGRAPH
+ {0xDFFC, 0x7D6E}, //14226 #CJK UNIFIED IDEOGRAPH
+ {0xDFFD, 0x7DD6}, //14227 #CJK UNIFIED IDEOGRAPH
+ {0xDFFE, 0x7F72}, //14228 #CJK UNIFIED IDEOGRAPH
+ {0xE0A1, 0x80E5}, //14229 #CJK UNIFIED IDEOGRAPH
+ {0xE0A2, 0x8212}, //14230 #CJK UNIFIED IDEOGRAPH
+ {0xE0A3, 0x85AF}, //14231 #CJK UNIFIED IDEOGRAPH
+ {0xE0A4, 0x897F}, //14232 #CJK UNIFIED IDEOGRAPH
+ {0xE0A5, 0x8A93}, //14233 #CJK UNIFIED IDEOGRAPH
+ {0xE0A6, 0x901D}, //14234 #CJK UNIFIED IDEOGRAPH
+ {0xE0A7, 0x92E4}, //14235 #CJK UNIFIED IDEOGRAPH
+ {0xE0A8, 0x9ECD}, //14236 #CJK UNIFIED IDEOGRAPH
+ {0xE0A9, 0x9F20}, //14237 #CJK UNIFIED IDEOGRAPH
+ {0xE0AA, 0x5915}, //14238 #CJK UNIFIED IDEOGRAPH
+ {0xE0AB, 0x596D}, //14239 #CJK UNIFIED IDEOGRAPH
+ {0xE0AC, 0x5E2D}, //14240 #CJK UNIFIED IDEOGRAPH
+ {0xE0AD, 0x60DC}, //14241 #CJK UNIFIED IDEOGRAPH
+ {0xE0AE, 0x6614}, //14242 #CJK UNIFIED IDEOGRAPH
+ {0xE0AF, 0x6673}, //14243 #CJK UNIFIED IDEOGRAPH
+ {0xE0B0, 0x6790}, //14244 #CJK UNIFIED IDEOGRAPH
+ {0xE0B1, 0x6C50}, //14245 #CJK UNIFIED IDEOGRAPH
+ {0xE0B2, 0x6DC5}, //14246 #CJK UNIFIED IDEOGRAPH
+ {0xE0B3, 0x6F5F}, //14247 #CJK UNIFIED IDEOGRAPH
+ {0xE0B4, 0x77F3}, //14248 #CJK UNIFIED IDEOGRAPH
+ {0xE0B5, 0x78A9}, //14249 #CJK UNIFIED IDEOGRAPH
+ {0xE0B6, 0x84C6}, //14250 #CJK UNIFIED IDEOGRAPH
+ {0xE0B7, 0x91CB}, //14251 #CJK UNIFIED IDEOGRAPH
+ {0xE0B8, 0x932B}, //14252 #CJK UNIFIED IDEOGRAPH
+ {0xE0B9, 0x4ED9}, //14253 #CJK UNIFIED IDEOGRAPH
+ {0xE0BA, 0x50CA}, //14254 #CJK UNIFIED IDEOGRAPH
+ {0xE0BB, 0x5148}, //14255 #CJK UNIFIED IDEOGRAPH
+ {0xE0BC, 0x5584}, //14256 #CJK UNIFIED IDEOGRAPH
+ {0xE0BD, 0x5B0B}, //14257 #CJK UNIFIED IDEOGRAPH
+ {0xE0BE, 0x5BA3}, //14258 #CJK UNIFIED IDEOGRAPH
+ {0xE0BF, 0x6247}, //14259 #CJK UNIFIED IDEOGRAPH
+ {0xE0C0, 0x657E}, //14260 #CJK UNIFIED IDEOGRAPH
+ {0xE0C1, 0x65CB}, //14261 #CJK UNIFIED IDEOGRAPH
+ {0xE0C2, 0x6E32}, //14262 #CJK UNIFIED IDEOGRAPH
+ {0xE0C3, 0x717D}, //14263 #CJK UNIFIED IDEOGRAPH
+ {0xE0C4, 0x7401}, //14264 #CJK UNIFIED IDEOGRAPH
+ {0xE0C5, 0x7444}, //14265 #CJK UNIFIED IDEOGRAPH
+ {0xE0C6, 0x7487}, //14266 #CJK UNIFIED IDEOGRAPH
+ {0xE0C7, 0x74BF}, //14267 #CJK UNIFIED IDEOGRAPH
+ {0xE0C8, 0x766C}, //14268 #CJK UNIFIED IDEOGRAPH
+ {0xE0C9, 0x79AA}, //14269 #CJK UNIFIED IDEOGRAPH
+ {0xE0CA, 0x7DDA}, //14270 #CJK UNIFIED IDEOGRAPH
+ {0xE0CB, 0x7E55}, //14271 #CJK UNIFIED IDEOGRAPH
+ {0xE0CC, 0x7FA8}, //14272 #CJK UNIFIED IDEOGRAPH
+ {0xE0CD, 0x817A}, //14273 #CJK UNIFIED IDEOGRAPH
+ {0xE0CE, 0x81B3}, //14274 #CJK UNIFIED IDEOGRAPH
+ {0xE0CF, 0x8239}, //14275 #CJK UNIFIED IDEOGRAPH
+ {0xE0D0, 0x861A}, //14276 #CJK UNIFIED IDEOGRAPH
+ {0xE0D1, 0x87EC}, //14277 #CJK UNIFIED IDEOGRAPH
+ {0xE0D2, 0x8A75}, //14278 #CJK UNIFIED IDEOGRAPH
+ {0xE0D3, 0x8DE3}, //14279 #CJK UNIFIED IDEOGRAPH
+ {0xE0D4, 0x9078}, //14280 #CJK UNIFIED IDEOGRAPH
+ {0xE0D5, 0x9291}, //14281 #CJK UNIFIED IDEOGRAPH
+ {0xE0D6, 0x9425}, //14282 #CJK UNIFIED IDEOGRAPH
+ {0xE0D7, 0x994D}, //14283 #CJK UNIFIED IDEOGRAPH
+ {0xE0D8, 0x9BAE}, //14284 #CJK UNIFIED IDEOGRAPH
+ {0xE0D9, 0x5368}, //14285 #CJK UNIFIED IDEOGRAPH
+ {0xE0DA, 0x5C51}, //14286 #CJK UNIFIED IDEOGRAPH
+ {0xE0DB, 0x6954}, //14287 #CJK UNIFIED IDEOGRAPH
+ {0xE0DC, 0x6CC4}, //14288 #CJK UNIFIED IDEOGRAPH
+ {0xE0DD, 0x6D29}, //14289 #CJK UNIFIED IDEOGRAPH
+ {0xE0DE, 0x6E2B}, //14290 #CJK UNIFIED IDEOGRAPH
+ {0xE0DF, 0x820C}, //14291 #CJK UNIFIED IDEOGRAPH
+ {0xE0E0, 0x859B}, //14292 #CJK UNIFIED IDEOGRAPH
+ {0xE0E1, 0x893B}, //14293 #CJK UNIFIED IDEOGRAPH
+ {0xE0E2, 0x8A2D}, //14294 #CJK UNIFIED IDEOGRAPH
+ {0xE0E3, 0x8AAA}, //14295 #CJK UNIFIED IDEOGRAPH
+ {0xE0E4, 0x96EA}, //14296 #CJK UNIFIED IDEOGRAPH
+ {0xE0E5, 0x9F67}, //14297 #CJK UNIFIED IDEOGRAPH
+ {0xE0E6, 0x5261}, //14298 #CJK UNIFIED IDEOGRAPH
+ {0xE0E7, 0x66B9}, //14299 #CJK UNIFIED IDEOGRAPH
+ {0xE0E8, 0x6BB2}, //14300 #CJK UNIFIED IDEOGRAPH
+ {0xE0E9, 0x7E96}, //14301 #CJK UNIFIED IDEOGRAPH
+ {0xE0EA, 0x87FE}, //14302 #CJK UNIFIED IDEOGRAPH
+ {0xE0EB, 0x8D0D}, //14303 #CJK UNIFIED IDEOGRAPH
+ {0xE0EC, 0x9583}, //14304 #CJK UNIFIED IDEOGRAPH
+ {0xE0ED, 0x965D}, //14305 #CJK UNIFIED IDEOGRAPH
+ {0xE0EE, 0x651D}, //14306 #CJK UNIFIED IDEOGRAPH
+ {0xE0EF, 0x6D89}, //14307 #CJK UNIFIED IDEOGRAPH
+ {0xE0F0, 0x71EE}, //14308 #CJK UNIFIED IDEOGRAPH
+ {0xE0F1, 0xF96E}, //14309 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE0F2, 0x57CE}, //14310 #CJK UNIFIED IDEOGRAPH
+ {0xE0F3, 0x59D3}, //14311 #CJK UNIFIED IDEOGRAPH
+ {0xE0F4, 0x5BAC}, //14312 #CJK UNIFIED IDEOGRAPH
+ {0xE0F5, 0x6027}, //14313 #CJK UNIFIED IDEOGRAPH
+ {0xE0F6, 0x60FA}, //14314 #CJK UNIFIED IDEOGRAPH
+ {0xE0F7, 0x6210}, //14315 #CJK UNIFIED IDEOGRAPH
+ {0xE0F8, 0x661F}, //14316 #CJK UNIFIED IDEOGRAPH
+ {0xE0F9, 0x665F}, //14317 #CJK UNIFIED IDEOGRAPH
+ {0xE0FA, 0x7329}, //14318 #CJK UNIFIED IDEOGRAPH
+ {0xE0FB, 0x73F9}, //14319 #CJK UNIFIED IDEOGRAPH
+ {0xE0FC, 0x76DB}, //14320 #CJK UNIFIED IDEOGRAPH
+ {0xE0FD, 0x7701}, //14321 #CJK UNIFIED IDEOGRAPH
+ {0xE0FE, 0x7B6C}, //14322 #CJK UNIFIED IDEOGRAPH
+ {0xE1A1, 0x8056}, //14323 #CJK UNIFIED IDEOGRAPH
+ {0xE1A2, 0x8072}, //14324 #CJK UNIFIED IDEOGRAPH
+ {0xE1A3, 0x8165}, //14325 #CJK UNIFIED IDEOGRAPH
+ {0xE1A4, 0x8AA0}, //14326 #CJK UNIFIED IDEOGRAPH
+ {0xE1A5, 0x9192}, //14327 #CJK UNIFIED IDEOGRAPH
+ {0xE1A6, 0x4E16}, //14328 #CJK UNIFIED IDEOGRAPH
+ {0xE1A7, 0x52E2}, //14329 #CJK UNIFIED IDEOGRAPH
+ {0xE1A8, 0x6B72}, //14330 #CJK UNIFIED IDEOGRAPH
+ {0xE1A9, 0x6D17}, //14331 #CJK UNIFIED IDEOGRAPH
+ {0xE1AA, 0x7A05}, //14332 #CJK UNIFIED IDEOGRAPH
+ {0xE1AB, 0x7B39}, //14333 #CJK UNIFIED IDEOGRAPH
+ {0xE1AC, 0x7D30}, //14334 #CJK UNIFIED IDEOGRAPH
+ {0xE1AD, 0xF96F}, //14335 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE1AE, 0x8CB0}, //14336 #CJK UNIFIED IDEOGRAPH
+ {0xE1AF, 0x53EC}, //14337 #CJK UNIFIED IDEOGRAPH
+ {0xE1B0, 0x562F}, //14338 #CJK UNIFIED IDEOGRAPH
+ {0xE1B1, 0x5851}, //14339 #CJK UNIFIED IDEOGRAPH
+ {0xE1B2, 0x5BB5}, //14340 #CJK UNIFIED IDEOGRAPH
+ {0xE1B3, 0x5C0F}, //14341 #CJK UNIFIED IDEOGRAPH
+ {0xE1B4, 0x5C11}, //14342 #CJK UNIFIED IDEOGRAPH
+ {0xE1B5, 0x5DE2}, //14343 #CJK UNIFIED IDEOGRAPH
+ {0xE1B6, 0x6240}, //14344 #CJK UNIFIED IDEOGRAPH
+ {0xE1B7, 0x6383}, //14345 #CJK UNIFIED IDEOGRAPH
+ {0xE1B8, 0x6414}, //14346 #CJK UNIFIED IDEOGRAPH
+ {0xE1B9, 0x662D}, //14347 #CJK UNIFIED IDEOGRAPH
+ {0xE1BA, 0x68B3}, //14348 #CJK UNIFIED IDEOGRAPH
+ {0xE1BB, 0x6CBC}, //14349 #CJK UNIFIED IDEOGRAPH
+ {0xE1BC, 0x6D88}, //14350 #CJK UNIFIED IDEOGRAPH
+ {0xE1BD, 0x6EAF}, //14351 #CJK UNIFIED IDEOGRAPH
+ {0xE1BE, 0x701F}, //14352 #CJK UNIFIED IDEOGRAPH
+ {0xE1BF, 0x70A4}, //14353 #CJK UNIFIED IDEOGRAPH
+ {0xE1C0, 0x71D2}, //14354 #CJK UNIFIED IDEOGRAPH
+ {0xE1C1, 0x7526}, //14355 #CJK UNIFIED IDEOGRAPH
+ {0xE1C2, 0x758F}, //14356 #CJK UNIFIED IDEOGRAPH
+ {0xE1C3, 0x758E}, //14357 #CJK UNIFIED IDEOGRAPH
+ {0xE1C4, 0x7619}, //14358 #CJK UNIFIED IDEOGRAPH
+ {0xE1C5, 0x7B11}, //14359 #CJK UNIFIED IDEOGRAPH
+ {0xE1C6, 0x7BE0}, //14360 #CJK UNIFIED IDEOGRAPH
+ {0xE1C7, 0x7C2B}, //14361 #CJK UNIFIED IDEOGRAPH
+ {0xE1C8, 0x7D20}, //14362 #CJK UNIFIED IDEOGRAPH
+ {0xE1C9, 0x7D39}, //14363 #CJK UNIFIED IDEOGRAPH
+ {0xE1CA, 0x852C}, //14364 #CJK UNIFIED IDEOGRAPH
+ {0xE1CB, 0x856D}, //14365 #CJK UNIFIED IDEOGRAPH
+ {0xE1CC, 0x8607}, //14366 #CJK UNIFIED IDEOGRAPH
+ {0xE1CD, 0x8A34}, //14367 #CJK UNIFIED IDEOGRAPH
+ {0xE1CE, 0x900D}, //14368 #CJK UNIFIED IDEOGRAPH
+ {0xE1CF, 0x9061}, //14369 #CJK UNIFIED IDEOGRAPH
+ {0xE1D0, 0x90B5}, //14370 #CJK UNIFIED IDEOGRAPH
+ {0xE1D1, 0x92B7}, //14371 #CJK UNIFIED IDEOGRAPH
+ {0xE1D2, 0x97F6}, //14372 #CJK UNIFIED IDEOGRAPH
+ {0xE1D3, 0x9A37}, //14373 #CJK UNIFIED IDEOGRAPH
+ {0xE1D4, 0x4FD7}, //14374 #CJK UNIFIED IDEOGRAPH
+ {0xE1D5, 0x5C6C}, //14375 #CJK UNIFIED IDEOGRAPH
+ {0xE1D6, 0x675F}, //14376 #CJK UNIFIED IDEOGRAPH
+ {0xE1D7, 0x6D91}, //14377 #CJK UNIFIED IDEOGRAPH
+ {0xE1D8, 0x7C9F}, //14378 #CJK UNIFIED IDEOGRAPH
+ {0xE1D9, 0x7E8C}, //14379 #CJK UNIFIED IDEOGRAPH
+ {0xE1DA, 0x8B16}, //14380 #CJK UNIFIED IDEOGRAPH
+ {0xE1DB, 0x8D16}, //14381 #CJK UNIFIED IDEOGRAPH
+ {0xE1DC, 0x901F}, //14382 #CJK UNIFIED IDEOGRAPH
+ {0xE1DD, 0x5B6B}, //14383 #CJK UNIFIED IDEOGRAPH
+ {0xE1DE, 0x5DFD}, //14384 #CJK UNIFIED IDEOGRAPH
+ {0xE1DF, 0x640D}, //14385 #CJK UNIFIED IDEOGRAPH
+ {0xE1E0, 0x84C0}, //14386 #CJK UNIFIED IDEOGRAPH
+ {0xE1E1, 0x905C}, //14387 #CJK UNIFIED IDEOGRAPH
+ {0xE1E2, 0x98E1}, //14388 #CJK UNIFIED IDEOGRAPH
+ {0xE1E3, 0x7387}, //14389 #CJK UNIFIED IDEOGRAPH
+ {0xE1E4, 0x5B8B}, //14390 #CJK UNIFIED IDEOGRAPH
+ {0xE1E5, 0x609A}, //14391 #CJK UNIFIED IDEOGRAPH
+ {0xE1E6, 0x677E}, //14392 #CJK UNIFIED IDEOGRAPH
+ {0xE1E7, 0x6DDE}, //14393 #CJK UNIFIED IDEOGRAPH
+ {0xE1E8, 0x8A1F}, //14394 #CJK UNIFIED IDEOGRAPH
+ {0xE1E9, 0x8AA6}, //14395 #CJK UNIFIED IDEOGRAPH
+ {0xE1EA, 0x9001}, //14396 #CJK UNIFIED IDEOGRAPH
+ {0xE1EB, 0x980C}, //14397 #CJK UNIFIED IDEOGRAPH
+ {0xE1EC, 0x5237}, //14398 #CJK UNIFIED IDEOGRAPH
+ {0xE1ED, 0xF970}, //14399 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE1EE, 0x7051}, //14400 #CJK UNIFIED IDEOGRAPH
+ {0xE1EF, 0x788E}, //14401 #CJK UNIFIED IDEOGRAPH
+ {0xE1F0, 0x9396}, //14402 #CJK UNIFIED IDEOGRAPH
+ {0xE1F1, 0x8870}, //14403 #CJK UNIFIED IDEOGRAPH
+ {0xE1F2, 0x91D7}, //14404 #CJK UNIFIED IDEOGRAPH
+ {0xE1F3, 0x4FEE}, //14405 #CJK UNIFIED IDEOGRAPH
+ {0xE1F4, 0x53D7}, //14406 #CJK UNIFIED IDEOGRAPH
+ {0xE1F5, 0x55FD}, //14407 #CJK UNIFIED IDEOGRAPH
+ {0xE1F6, 0x56DA}, //14408 #CJK UNIFIED IDEOGRAPH
+ {0xE1F7, 0x5782}, //14409 #CJK UNIFIED IDEOGRAPH
+ {0xE1F8, 0x58FD}, //14410 #CJK UNIFIED IDEOGRAPH
+ {0xE1F9, 0x5AC2}, //14411 #CJK UNIFIED IDEOGRAPH
+ {0xE1FA, 0x5B88}, //14412 #CJK UNIFIED IDEOGRAPH
+ {0xE1FB, 0x5CAB}, //14413 #CJK UNIFIED IDEOGRAPH
+ {0xE1FC, 0x5CC0}, //14414 #CJK UNIFIED IDEOGRAPH
+ {0xE1FD, 0x5E25}, //14415 #CJK UNIFIED IDEOGRAPH
+ {0xE1FE, 0x6101}, //14416 #CJK UNIFIED IDEOGRAPH
+ {0xE2A1, 0x620D}, //14417 #CJK UNIFIED IDEOGRAPH
+ {0xE2A2, 0x624B}, //14418 #CJK UNIFIED IDEOGRAPH
+ {0xE2A3, 0x6388}, //14419 #CJK UNIFIED IDEOGRAPH
+ {0xE2A4, 0x641C}, //14420 #CJK UNIFIED IDEOGRAPH
+ {0xE2A5, 0x6536}, //14421 #CJK UNIFIED IDEOGRAPH
+ {0xE2A6, 0x6578}, //14422 #CJK UNIFIED IDEOGRAPH
+ {0xE2A7, 0x6A39}, //14423 #CJK UNIFIED IDEOGRAPH
+ {0xE2A8, 0x6B8A}, //14424 #CJK UNIFIED IDEOGRAPH
+ {0xE2A9, 0x6C34}, //14425 #CJK UNIFIED IDEOGRAPH
+ {0xE2AA, 0x6D19}, //14426 #CJK UNIFIED IDEOGRAPH
+ {0xE2AB, 0x6F31}, //14427 #CJK UNIFIED IDEOGRAPH
+ {0xE2AC, 0x71E7}, //14428 #CJK UNIFIED IDEOGRAPH
+ {0xE2AD, 0x72E9}, //14429 #CJK UNIFIED IDEOGRAPH
+ {0xE2AE, 0x7378}, //14430 #CJK UNIFIED IDEOGRAPH
+ {0xE2AF, 0x7407}, //14431 #CJK UNIFIED IDEOGRAPH
+ {0xE2B0, 0x74B2}, //14432 #CJK UNIFIED IDEOGRAPH
+ {0xE2B1, 0x7626}, //14433 #CJK UNIFIED IDEOGRAPH
+ {0xE2B2, 0x7761}, //14434 #CJK UNIFIED IDEOGRAPH
+ {0xE2B3, 0x79C0}, //14435 #CJK UNIFIED IDEOGRAPH
+ {0xE2B4, 0x7A57}, //14436 #CJK UNIFIED IDEOGRAPH
+ {0xE2B5, 0x7AEA}, //14437 #CJK UNIFIED IDEOGRAPH
+ {0xE2B6, 0x7CB9}, //14438 #CJK UNIFIED IDEOGRAPH
+ {0xE2B7, 0x7D8F}, //14439 #CJK UNIFIED IDEOGRAPH
+ {0xE2B8, 0x7DAC}, //14440 #CJK UNIFIED IDEOGRAPH
+ {0xE2B9, 0x7E61}, //14441 #CJK UNIFIED IDEOGRAPH
+ {0xE2BA, 0x7F9E}, //14442 #CJK UNIFIED IDEOGRAPH
+ {0xE2BB, 0x8129}, //14443 #CJK UNIFIED IDEOGRAPH
+ {0xE2BC, 0x8331}, //14444 #CJK UNIFIED IDEOGRAPH
+ {0xE2BD, 0x8490}, //14445 #CJK UNIFIED IDEOGRAPH
+ {0xE2BE, 0x84DA}, //14446 #CJK UNIFIED IDEOGRAPH
+ {0xE2BF, 0x85EA}, //14447 #CJK UNIFIED IDEOGRAPH
+ {0xE2C0, 0x8896}, //14448 #CJK UNIFIED IDEOGRAPH
+ {0xE2C1, 0x8AB0}, //14449 #CJK UNIFIED IDEOGRAPH
+ {0xE2C2, 0x8B90}, //14450 #CJK UNIFIED IDEOGRAPH
+ {0xE2C3, 0x8F38}, //14451 #CJK UNIFIED IDEOGRAPH
+ {0xE2C4, 0x9042}, //14452 #CJK UNIFIED IDEOGRAPH
+ {0xE2C5, 0x9083}, //14453 #CJK UNIFIED IDEOGRAPH
+ {0xE2C6, 0x916C}, //14454 #CJK UNIFIED IDEOGRAPH
+ {0xE2C7, 0x9296}, //14455 #CJK UNIFIED IDEOGRAPH
+ {0xE2C8, 0x92B9}, //14456 #CJK UNIFIED IDEOGRAPH
+ {0xE2C9, 0x968B}, //14457 #CJK UNIFIED IDEOGRAPH
+ {0xE2CA, 0x96A7}, //14458 #CJK UNIFIED IDEOGRAPH
+ {0xE2CB, 0x96A8}, //14459 #CJK UNIFIED IDEOGRAPH
+ {0xE2CC, 0x96D6}, //14460 #CJK UNIFIED IDEOGRAPH
+ {0xE2CD, 0x9700}, //14461 #CJK UNIFIED IDEOGRAPH
+ {0xE2CE, 0x9808}, //14462 #CJK UNIFIED IDEOGRAPH
+ {0xE2CF, 0x9996}, //14463 #CJK UNIFIED IDEOGRAPH
+ {0xE2D0, 0x9AD3}, //14464 #CJK UNIFIED IDEOGRAPH
+ {0xE2D1, 0x9B1A}, //14465 #CJK UNIFIED IDEOGRAPH
+ {0xE2D2, 0x53D4}, //14466 #CJK UNIFIED IDEOGRAPH
+ {0xE2D3, 0x587E}, //14467 #CJK UNIFIED IDEOGRAPH
+ {0xE2D4, 0x5919}, //14468 #CJK UNIFIED IDEOGRAPH
+ {0xE2D5, 0x5B70}, //14469 #CJK UNIFIED IDEOGRAPH
+ {0xE2D6, 0x5BBF}, //14470 #CJK UNIFIED IDEOGRAPH
+ {0xE2D7, 0x6DD1}, //14471 #CJK UNIFIED IDEOGRAPH
+ {0xE2D8, 0x6F5A}, //14472 #CJK UNIFIED IDEOGRAPH
+ {0xE2D9, 0x719F}, //14473 #CJK UNIFIED IDEOGRAPH
+ {0xE2DA, 0x7421}, //14474 #CJK UNIFIED IDEOGRAPH
+ {0xE2DB, 0x74B9}, //14475 #CJK UNIFIED IDEOGRAPH
+ {0xE2DC, 0x8085}, //14476 #CJK UNIFIED IDEOGRAPH
+ {0xE2DD, 0x83FD}, //14477 #CJK UNIFIED IDEOGRAPH
+ {0xE2DE, 0x5DE1}, //14478 #CJK UNIFIED IDEOGRAPH
+ {0xE2DF, 0x5F87}, //14479 #CJK UNIFIED IDEOGRAPH
+ {0xE2E0, 0x5FAA}, //14480 #CJK UNIFIED IDEOGRAPH
+ {0xE2E1, 0x6042}, //14481 #CJK UNIFIED IDEOGRAPH
+ {0xE2E2, 0x65EC}, //14482 #CJK UNIFIED IDEOGRAPH
+ {0xE2E3, 0x6812}, //14483 #CJK UNIFIED IDEOGRAPH
+ {0xE2E4, 0x696F}, //14484 #CJK UNIFIED IDEOGRAPH
+ {0xE2E5, 0x6A53}, //14485 #CJK UNIFIED IDEOGRAPH
+ {0xE2E6, 0x6B89}, //14486 #CJK UNIFIED IDEOGRAPH
+ {0xE2E7, 0x6D35}, //14487 #CJK UNIFIED IDEOGRAPH
+ {0xE2E8, 0x6DF3}, //14488 #CJK UNIFIED IDEOGRAPH
+ {0xE2E9, 0x73E3}, //14489 #CJK UNIFIED IDEOGRAPH
+ {0xE2EA, 0x76FE}, //14490 #CJK UNIFIED IDEOGRAPH
+ {0xE2EB, 0x77AC}, //14491 #CJK UNIFIED IDEOGRAPH
+ {0xE2EC, 0x7B4D}, //14492 #CJK UNIFIED IDEOGRAPH
+ {0xE2ED, 0x7D14}, //14493 #CJK UNIFIED IDEOGRAPH
+ {0xE2EE, 0x8123}, //14494 #CJK UNIFIED IDEOGRAPH
+ {0xE2EF, 0x821C}, //14495 #CJK UNIFIED IDEOGRAPH
+ {0xE2F0, 0x8340}, //14496 #CJK UNIFIED IDEOGRAPH
+ {0xE2F1, 0x84F4}, //14497 #CJK UNIFIED IDEOGRAPH
+ {0xE2F2, 0x8563}, //14498 #CJK UNIFIED IDEOGRAPH
+ {0xE2F3, 0x8A62}, //14499 #CJK UNIFIED IDEOGRAPH
+ {0xE2F4, 0x8AC4}, //14500 #CJK UNIFIED IDEOGRAPH
+ {0xE2F5, 0x9187}, //14501 #CJK UNIFIED IDEOGRAPH
+ {0xE2F6, 0x931E}, //14502 #CJK UNIFIED IDEOGRAPH
+ {0xE2F7, 0x9806}, //14503 #CJK UNIFIED IDEOGRAPH
+ {0xE2F8, 0x99B4}, //14504 #CJK UNIFIED IDEOGRAPH
+ {0xE2F9, 0x620C}, //14505 #CJK UNIFIED IDEOGRAPH
+ {0xE2FA, 0x8853}, //14506 #CJK UNIFIED IDEOGRAPH
+ {0xE2FB, 0x8FF0}, //14507 #CJK UNIFIED IDEOGRAPH
+ {0xE2FC, 0x9265}, //14508 #CJK UNIFIED IDEOGRAPH
+ {0xE2FD, 0x5D07}, //14509 #CJK UNIFIED IDEOGRAPH
+ {0xE2FE, 0x5D27}, //14510 #CJK UNIFIED IDEOGRAPH
+ {0xE3A1, 0x5D69}, //14511 #CJK UNIFIED IDEOGRAPH
+ {0xE3A2, 0x745F}, //14512 #CJK UNIFIED IDEOGRAPH
+ {0xE3A3, 0x819D}, //14513 #CJK UNIFIED IDEOGRAPH
+ {0xE3A4, 0x8768}, //14514 #CJK UNIFIED IDEOGRAPH
+ {0xE3A5, 0x6FD5}, //14515 #CJK UNIFIED IDEOGRAPH
+ {0xE3A6, 0x62FE}, //14516 #CJK UNIFIED IDEOGRAPH
+ {0xE3A7, 0x7FD2}, //14517 #CJK UNIFIED IDEOGRAPH
+ {0xE3A8, 0x8936}, //14518 #CJK UNIFIED IDEOGRAPH
+ {0xE3A9, 0x8972}, //14519 #CJK UNIFIED IDEOGRAPH
+ {0xE3AA, 0x4E1E}, //14520 #CJK UNIFIED IDEOGRAPH
+ {0xE3AB, 0x4E58}, //14521 #CJK UNIFIED IDEOGRAPH
+ {0xE3AC, 0x50E7}, //14522 #CJK UNIFIED IDEOGRAPH
+ {0xE3AD, 0x52DD}, //14523 #CJK UNIFIED IDEOGRAPH
+ {0xE3AE, 0x5347}, //14524 #CJK UNIFIED IDEOGRAPH
+ {0xE3AF, 0x627F}, //14525 #CJK UNIFIED IDEOGRAPH
+ {0xE3B0, 0x6607}, //14526 #CJK UNIFIED IDEOGRAPH
+ {0xE3B1, 0x7E69}, //14527 #CJK UNIFIED IDEOGRAPH
+ {0xE3B2, 0x8805}, //14528 #CJK UNIFIED IDEOGRAPH
+ {0xE3B3, 0x965E}, //14529 #CJK UNIFIED IDEOGRAPH
+ {0xE3B4, 0x4F8D}, //14530 #CJK UNIFIED IDEOGRAPH
+ {0xE3B5, 0x5319}, //14531 #CJK UNIFIED IDEOGRAPH
+ {0xE3B6, 0x5636}, //14532 #CJK UNIFIED IDEOGRAPH
+ {0xE3B7, 0x59CB}, //14533 #CJK UNIFIED IDEOGRAPH
+ {0xE3B8, 0x5AA4}, //14534 #CJK UNIFIED IDEOGRAPH
+ {0xE3B9, 0x5C38}, //14535 #CJK UNIFIED IDEOGRAPH
+ {0xE3BA, 0x5C4E}, //14536 #CJK UNIFIED IDEOGRAPH
+ {0xE3BB, 0x5C4D}, //14537 #CJK UNIFIED IDEOGRAPH
+ {0xE3BC, 0x5E02}, //14538 #CJK UNIFIED IDEOGRAPH
+ {0xE3BD, 0x5F11}, //14539 #CJK UNIFIED IDEOGRAPH
+ {0xE3BE, 0x6043}, //14540 #CJK UNIFIED IDEOGRAPH
+ {0xE3BF, 0x65BD}, //14541 #CJK UNIFIED IDEOGRAPH
+ {0xE3C0, 0x662F}, //14542 #CJK UNIFIED IDEOGRAPH
+ {0xE3C1, 0x6642}, //14543 #CJK UNIFIED IDEOGRAPH
+ {0xE3C2, 0x67BE}, //14544 #CJK UNIFIED IDEOGRAPH
+ {0xE3C3, 0x67F4}, //14545 #CJK UNIFIED IDEOGRAPH
+ {0xE3C4, 0x731C}, //14546 #CJK UNIFIED IDEOGRAPH
+ {0xE3C5, 0x77E2}, //14547 #CJK UNIFIED IDEOGRAPH
+ {0xE3C6, 0x793A}, //14548 #CJK UNIFIED IDEOGRAPH
+ {0xE3C7, 0x7FC5}, //14549 #CJK UNIFIED IDEOGRAPH
+ {0xE3C8, 0x8494}, //14550 #CJK UNIFIED IDEOGRAPH
+ {0xE3C9, 0x84CD}, //14551 #CJK UNIFIED IDEOGRAPH
+ {0xE3CA, 0x8996}, //14552 #CJK UNIFIED IDEOGRAPH
+ {0xE3CB, 0x8A66}, //14553 #CJK UNIFIED IDEOGRAPH
+ {0xE3CC, 0x8A69}, //14554 #CJK UNIFIED IDEOGRAPH
+ {0xE3CD, 0x8AE1}, //14555 #CJK UNIFIED IDEOGRAPH
+ {0xE3CE, 0x8C55}, //14556 #CJK UNIFIED IDEOGRAPH
+ {0xE3CF, 0x8C7A}, //14557 #CJK UNIFIED IDEOGRAPH
+ {0xE3D0, 0x57F4}, //14558 #CJK UNIFIED IDEOGRAPH
+ {0xE3D1, 0x5BD4}, //14559 #CJK UNIFIED IDEOGRAPH
+ {0xE3D2, 0x5F0F}, //14560 #CJK UNIFIED IDEOGRAPH
+ {0xE3D3, 0x606F}, //14561 #CJK UNIFIED IDEOGRAPH
+ {0xE3D4, 0x62ED}, //14562 #CJK UNIFIED IDEOGRAPH
+ {0xE3D5, 0x690D}, //14563 #CJK UNIFIED IDEOGRAPH
+ {0xE3D6, 0x6B96}, //14564 #CJK UNIFIED IDEOGRAPH
+ {0xE3D7, 0x6E5C}, //14565 #CJK UNIFIED IDEOGRAPH
+ {0xE3D8, 0x7184}, //14566 #CJK UNIFIED IDEOGRAPH
+ {0xE3D9, 0x7BD2}, //14567 #CJK UNIFIED IDEOGRAPH
+ {0xE3DA, 0x8755}, //14568 #CJK UNIFIED IDEOGRAPH
+ {0xE3DB, 0x8B58}, //14569 #CJK UNIFIED IDEOGRAPH
+ {0xE3DC, 0x8EFE}, //14570 #CJK UNIFIED IDEOGRAPH
+ {0xE3DD, 0x98DF}, //14571 #CJK UNIFIED IDEOGRAPH
+ {0xE3DE, 0x98FE}, //14572 #CJK UNIFIED IDEOGRAPH
+ {0xE3DF, 0x4F38}, //14573 #CJK UNIFIED IDEOGRAPH
+ {0xE3E0, 0x4F81}, //14574 #CJK UNIFIED IDEOGRAPH
+ {0xE3E1, 0x4FE1}, //14575 #CJK UNIFIED IDEOGRAPH
+ {0xE3E2, 0x547B}, //14576 #CJK UNIFIED IDEOGRAPH
+ {0xE3E3, 0x5A20}, //14577 #CJK UNIFIED IDEOGRAPH
+ {0xE3E4, 0x5BB8}, //14578 #CJK UNIFIED IDEOGRAPH
+ {0xE3E5, 0x613C}, //14579 #CJK UNIFIED IDEOGRAPH
+ {0xE3E6, 0x65B0}, //14580 #CJK UNIFIED IDEOGRAPH
+ {0xE3E7, 0x6668}, //14581 #CJK UNIFIED IDEOGRAPH
+ {0xE3E8, 0x71FC}, //14582 #CJK UNIFIED IDEOGRAPH
+ {0xE3E9, 0x7533}, //14583 #CJK UNIFIED IDEOGRAPH
+ {0xE3EA, 0x795E}, //14584 #CJK UNIFIED IDEOGRAPH
+ {0xE3EB, 0x7D33}, //14585 #CJK UNIFIED IDEOGRAPH
+ {0xE3EC, 0x814E}, //14586 #CJK UNIFIED IDEOGRAPH
+ {0xE3ED, 0x81E3}, //14587 #CJK UNIFIED IDEOGRAPH
+ {0xE3EE, 0x8398}, //14588 #CJK UNIFIED IDEOGRAPH
+ {0xE3EF, 0x85AA}, //14589 #CJK UNIFIED IDEOGRAPH
+ {0xE3F0, 0x85CE}, //14590 #CJK UNIFIED IDEOGRAPH
+ {0xE3F1, 0x8703}, //14591 #CJK UNIFIED IDEOGRAPH
+ {0xE3F2, 0x8A0A}, //14592 #CJK UNIFIED IDEOGRAPH
+ {0xE3F3, 0x8EAB}, //14593 #CJK UNIFIED IDEOGRAPH
+ {0xE3F4, 0x8F9B}, //14594 #CJK UNIFIED IDEOGRAPH
+ {0xE3F5, 0xF971}, //14595 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE3F6, 0x8FC5}, //14596 #CJK UNIFIED IDEOGRAPH
+ {0xE3F7, 0x5931}, //14597 #CJK UNIFIED IDEOGRAPH
+ {0xE3F8, 0x5BA4}, //14598 #CJK UNIFIED IDEOGRAPH
+ {0xE3F9, 0x5BE6}, //14599 #CJK UNIFIED IDEOGRAPH
+ {0xE3FA, 0x6089}, //14600 #CJK UNIFIED IDEOGRAPH
+ {0xE3FB, 0x5BE9}, //14601 #CJK UNIFIED IDEOGRAPH
+ {0xE3FC, 0x5C0B}, //14602 #CJK UNIFIED IDEOGRAPH
+ {0xE3FD, 0x5FC3}, //14603 #CJK UNIFIED IDEOGRAPH
+ {0xE3FE, 0x6C81}, //14604 #CJK UNIFIED IDEOGRAPH
+ {0xE4A1, 0xF972}, //14605 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE4A2, 0x6DF1}, //14606 #CJK UNIFIED IDEOGRAPH
+ {0xE4A3, 0x700B}, //14607 #CJK UNIFIED IDEOGRAPH
+ {0xE4A4, 0x751A}, //14608 #CJK UNIFIED IDEOGRAPH
+ {0xE4A5, 0x82AF}, //14609 #CJK UNIFIED IDEOGRAPH
+ {0xE4A6, 0x8AF6}, //14610 #CJK UNIFIED IDEOGRAPH
+ {0xE4A7, 0x4EC0}, //14611 #CJK UNIFIED IDEOGRAPH
+ {0xE4A8, 0x5341}, //14612 #CJK UNIFIED IDEOGRAPH
+ {0xE4A9, 0xF973}, //14613 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE4AA, 0x96D9}, //14614 #CJK UNIFIED IDEOGRAPH
+ {0xE4AB, 0x6C0F}, //14615 #CJK UNIFIED IDEOGRAPH
+ {0xE4AC, 0x4E9E}, //14616 #CJK UNIFIED IDEOGRAPH
+ {0xE4AD, 0x4FC4}, //14617 #CJK UNIFIED IDEOGRAPH
+ {0xE4AE, 0x5152}, //14618 #CJK UNIFIED IDEOGRAPH
+ {0xE4AF, 0x555E}, //14619 #CJK UNIFIED IDEOGRAPH
+ {0xE4B0, 0x5A25}, //14620 #CJK UNIFIED IDEOGRAPH
+ {0xE4B1, 0x5CE8}, //14621 #CJK UNIFIED IDEOGRAPH
+ {0xE4B2, 0x6211}, //14622 #CJK UNIFIED IDEOGRAPH
+ {0xE4B3, 0x7259}, //14623 #CJK UNIFIED IDEOGRAPH
+ {0xE4B4, 0x82BD}, //14624 #CJK UNIFIED IDEOGRAPH
+ {0xE4B5, 0x83AA}, //14625 #CJK UNIFIED IDEOGRAPH
+ {0xE4B6, 0x86FE}, //14626 #CJK UNIFIED IDEOGRAPH
+ {0xE4B7, 0x8859}, //14627 #CJK UNIFIED IDEOGRAPH
+ {0xE4B8, 0x8A1D}, //14628 #CJK UNIFIED IDEOGRAPH
+ {0xE4B9, 0x963F}, //14629 #CJK UNIFIED IDEOGRAPH
+ {0xE4BA, 0x96C5}, //14630 #CJK UNIFIED IDEOGRAPH
+ {0xE4BB, 0x9913}, //14631 #CJK UNIFIED IDEOGRAPH
+ {0xE4BC, 0x9D09}, //14632 #CJK UNIFIED IDEOGRAPH
+ {0xE4BD, 0x9D5D}, //14633 #CJK UNIFIED IDEOGRAPH
+ {0xE4BE, 0x580A}, //14634 #CJK UNIFIED IDEOGRAPH
+ {0xE4BF, 0x5CB3}, //14635 #CJK UNIFIED IDEOGRAPH
+ {0xE4C0, 0x5DBD}, //14636 #CJK UNIFIED IDEOGRAPH
+ {0xE4C1, 0x5E44}, //14637 #CJK UNIFIED IDEOGRAPH
+ {0xE4C2, 0x60E1}, //14638 #CJK UNIFIED IDEOGRAPH
+ {0xE4C3, 0x6115}, //14639 #CJK UNIFIED IDEOGRAPH
+ {0xE4C4, 0x63E1}, //14640 #CJK UNIFIED IDEOGRAPH
+ {0xE4C5, 0x6A02}, //14641 #CJK UNIFIED IDEOGRAPH
+ {0xE4C6, 0x6E25}, //14642 #CJK UNIFIED IDEOGRAPH
+ {0xE4C7, 0x9102}, //14643 #CJK UNIFIED IDEOGRAPH
+ {0xE4C8, 0x9354}, //14644 #CJK UNIFIED IDEOGRAPH
+ {0xE4C9, 0x984E}, //14645 #CJK UNIFIED IDEOGRAPH
+ {0xE4CA, 0x9C10}, //14646 #CJK UNIFIED IDEOGRAPH
+ {0xE4CB, 0x9F77}, //14647 #CJK UNIFIED IDEOGRAPH
+ {0xE4CC, 0x5B89}, //14648 #CJK UNIFIED IDEOGRAPH
+ {0xE4CD, 0x5CB8}, //14649 #CJK UNIFIED IDEOGRAPH
+ {0xE4CE, 0x6309}, //14650 #CJK UNIFIED IDEOGRAPH
+ {0xE4CF, 0x664F}, //14651 #CJK UNIFIED IDEOGRAPH
+ {0xE4D0, 0x6848}, //14652 #CJK UNIFIED IDEOGRAPH
+ {0xE4D1, 0x773C}, //14653 #CJK UNIFIED IDEOGRAPH
+ {0xE4D2, 0x96C1}, //14654 #CJK UNIFIED IDEOGRAPH
+ {0xE4D3, 0x978D}, //14655 #CJK UNIFIED IDEOGRAPH
+ {0xE4D4, 0x9854}, //14656 #CJK UNIFIED IDEOGRAPH
+ {0xE4D5, 0x9B9F}, //14657 #CJK UNIFIED IDEOGRAPH
+ {0xE4D6, 0x65A1}, //14658 #CJK UNIFIED IDEOGRAPH
+ {0xE4D7, 0x8B01}, //14659 #CJK UNIFIED IDEOGRAPH
+ {0xE4D8, 0x8ECB}, //14660 #CJK UNIFIED IDEOGRAPH
+ {0xE4D9, 0x95BC}, //14661 #CJK UNIFIED IDEOGRAPH
+ {0xE4DA, 0x5535}, //14662 #CJK UNIFIED IDEOGRAPH
+ {0xE4DB, 0x5CA9}, //14663 #CJK UNIFIED IDEOGRAPH
+ {0xE4DC, 0x5DD6}, //14664 #CJK UNIFIED IDEOGRAPH
+ {0xE4DD, 0x5EB5}, //14665 #CJK UNIFIED IDEOGRAPH
+ {0xE4DE, 0x6697}, //14666 #CJK UNIFIED IDEOGRAPH
+ {0xE4DF, 0x764C}, //14667 #CJK UNIFIED IDEOGRAPH
+ {0xE4E0, 0x83F4}, //14668 #CJK UNIFIED IDEOGRAPH
+ {0xE4E1, 0x95C7}, //14669 #CJK UNIFIED IDEOGRAPH
+ {0xE4E2, 0x58D3}, //14670 #CJK UNIFIED IDEOGRAPH
+ {0xE4E3, 0x62BC}, //14671 #CJK UNIFIED IDEOGRAPH
+ {0xE4E4, 0x72CE}, //14672 #CJK UNIFIED IDEOGRAPH
+ {0xE4E5, 0x9D28}, //14673 #CJK UNIFIED IDEOGRAPH
+ {0xE4E6, 0x4EF0}, //14674 #CJK UNIFIED IDEOGRAPH
+ {0xE4E7, 0x592E}, //14675 #CJK UNIFIED IDEOGRAPH
+ {0xE4E8, 0x600F}, //14676 #CJK UNIFIED IDEOGRAPH
+ {0xE4E9, 0x663B}, //14677 #CJK UNIFIED IDEOGRAPH
+ {0xE4EA, 0x6B83}, //14678 #CJK UNIFIED IDEOGRAPH
+ {0xE4EB, 0x79E7}, //14679 #CJK UNIFIED IDEOGRAPH
+ {0xE4EC, 0x9D26}, //14680 #CJK UNIFIED IDEOGRAPH
+ {0xE4ED, 0x5393}, //14681 #CJK UNIFIED IDEOGRAPH
+ {0xE4EE, 0x54C0}, //14682 #CJK UNIFIED IDEOGRAPH
+ {0xE4EF, 0x57C3}, //14683 #CJK UNIFIED IDEOGRAPH
+ {0xE4F0, 0x5D16}, //14684 #CJK UNIFIED IDEOGRAPH
+ {0xE4F1, 0x611B}, //14685 #CJK UNIFIED IDEOGRAPH
+ {0xE4F2, 0x66D6}, //14686 #CJK UNIFIED IDEOGRAPH
+ {0xE4F3, 0x6DAF}, //14687 #CJK UNIFIED IDEOGRAPH
+ {0xE4F4, 0x788D}, //14688 #CJK UNIFIED IDEOGRAPH
+ {0xE4F5, 0x827E}, //14689 #CJK UNIFIED IDEOGRAPH
+ {0xE4F6, 0x9698}, //14690 #CJK UNIFIED IDEOGRAPH
+ {0xE4F7, 0x9744}, //14691 #CJK UNIFIED IDEOGRAPH
+ {0xE4F8, 0x5384}, //14692 #CJK UNIFIED IDEOGRAPH
+ {0xE4F9, 0x627C}, //14693 #CJK UNIFIED IDEOGRAPH
+ {0xE4FA, 0x6396}, //14694 #CJK UNIFIED IDEOGRAPH
+ {0xE4FB, 0x6DB2}, //14695 #CJK UNIFIED IDEOGRAPH
+ {0xE4FC, 0x7E0A}, //14696 #CJK UNIFIED IDEOGRAPH
+ {0xE4FD, 0x814B}, //14697 #CJK UNIFIED IDEOGRAPH
+ {0xE4FE, 0x984D}, //14698 #CJK UNIFIED IDEOGRAPH
+ {0xE5A1, 0x6AFB}, //14699 #CJK UNIFIED IDEOGRAPH
+ {0xE5A2, 0x7F4C}, //14700 #CJK UNIFIED IDEOGRAPH
+ {0xE5A3, 0x9DAF}, //14701 #CJK UNIFIED IDEOGRAPH
+ {0xE5A4, 0x9E1A}, //14702 #CJK UNIFIED IDEOGRAPH
+ {0xE5A5, 0x4E5F}, //14703 #CJK UNIFIED IDEOGRAPH
+ {0xE5A6, 0x503B}, //14704 #CJK UNIFIED IDEOGRAPH
+ {0xE5A7, 0x51B6}, //14705 #CJK UNIFIED IDEOGRAPH
+ {0xE5A8, 0x591C}, //14706 #CJK UNIFIED IDEOGRAPH
+ {0xE5A9, 0x60F9}, //14707 #CJK UNIFIED IDEOGRAPH
+ {0xE5AA, 0x63F6}, //14708 #CJK UNIFIED IDEOGRAPH
+ {0xE5AB, 0x6930}, //14709 #CJK UNIFIED IDEOGRAPH
+ {0xE5AC, 0x723A}, //14710 #CJK UNIFIED IDEOGRAPH
+ {0xE5AD, 0x8036}, //14711 #CJK UNIFIED IDEOGRAPH
+ {0xE5AE, 0xF974}, //14712 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5AF, 0x91CE}, //14713 #CJK UNIFIED IDEOGRAPH
+ {0xE5B0, 0x5F31}, //14714 #CJK UNIFIED IDEOGRAPH
+ {0xE5B1, 0xF975}, //14715 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5B2, 0xF976}, //14716 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5B3, 0x7D04}, //14717 #CJK UNIFIED IDEOGRAPH
+ {0xE5B4, 0x82E5}, //14718 #CJK UNIFIED IDEOGRAPH
+ {0xE5B5, 0x846F}, //14719 #CJK UNIFIED IDEOGRAPH
+ {0xE5B6, 0x84BB}, //14720 #CJK UNIFIED IDEOGRAPH
+ {0xE5B7, 0x85E5}, //14721 #CJK UNIFIED IDEOGRAPH
+ {0xE5B8, 0x8E8D}, //14722 #CJK UNIFIED IDEOGRAPH
+ {0xE5B9, 0xF977}, //14723 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5BA, 0x4F6F}, //14724 #CJK UNIFIED IDEOGRAPH
+ {0xE5BB, 0xF978}, //14725 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5BC, 0xF979}, //14726 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5BD, 0x58E4}, //14727 #CJK UNIFIED IDEOGRAPH
+ {0xE5BE, 0x5B43}, //14728 #CJK UNIFIED IDEOGRAPH
+ {0xE5BF, 0x6059}, //14729 #CJK UNIFIED IDEOGRAPH
+ {0xE5C0, 0x63DA}, //14730 #CJK UNIFIED IDEOGRAPH
+ {0xE5C1, 0x6518}, //14731 #CJK UNIFIED IDEOGRAPH
+ {0xE5C2, 0x656D}, //14732 #CJK UNIFIED IDEOGRAPH
+ {0xE5C3, 0x6698}, //14733 #CJK UNIFIED IDEOGRAPH
+ {0xE5C4, 0xF97A}, //14734 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5C5, 0x694A}, //14735 #CJK UNIFIED IDEOGRAPH
+ {0xE5C6, 0x6A23}, //14736 #CJK UNIFIED IDEOGRAPH
+ {0xE5C7, 0x6D0B}, //14737 #CJK UNIFIED IDEOGRAPH
+ {0xE5C8, 0x7001}, //14738 #CJK UNIFIED IDEOGRAPH
+ {0xE5C9, 0x716C}, //14739 #CJK UNIFIED IDEOGRAPH
+ {0xE5CA, 0x75D2}, //14740 #CJK UNIFIED IDEOGRAPH
+ {0xE5CB, 0x760D}, //14741 #CJK UNIFIED IDEOGRAPH
+ {0xE5CC, 0x79B3}, //14742 #CJK UNIFIED IDEOGRAPH
+ {0xE5CD, 0x7A70}, //14743 #CJK UNIFIED IDEOGRAPH
+ {0xE5CE, 0xF97B}, //14744 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5CF, 0x7F8A}, //14745 #CJK UNIFIED IDEOGRAPH
+ {0xE5D0, 0xF97C}, //14746 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5D1, 0x8944}, //14747 #CJK UNIFIED IDEOGRAPH
+ {0xE5D2, 0xF97D}, //14748 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5D3, 0x8B93}, //14749 #CJK UNIFIED IDEOGRAPH
+ {0xE5D4, 0x91C0}, //14750 #CJK UNIFIED IDEOGRAPH
+ {0xE5D5, 0x967D}, //14751 #CJK UNIFIED IDEOGRAPH
+ {0xE5D6, 0xF97E}, //14752 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5D7, 0x990A}, //14753 #CJK UNIFIED IDEOGRAPH
+ {0xE5D8, 0x5704}, //14754 #CJK UNIFIED IDEOGRAPH
+ {0xE5D9, 0x5FA1}, //14755 #CJK UNIFIED IDEOGRAPH
+ {0xE5DA, 0x65BC}, //14756 #CJK UNIFIED IDEOGRAPH
+ {0xE5DB, 0x6F01}, //14757 #CJK UNIFIED IDEOGRAPH
+ {0xE5DC, 0x7600}, //14758 #CJK UNIFIED IDEOGRAPH
+ {0xE5DD, 0x79A6}, //14759 #CJK UNIFIED IDEOGRAPH
+ {0xE5DE, 0x8A9E}, //14760 #CJK UNIFIED IDEOGRAPH
+ {0xE5DF, 0x99AD}, //14761 #CJK UNIFIED IDEOGRAPH
+ {0xE5E0, 0x9B5A}, //14762 #CJK UNIFIED IDEOGRAPH
+ {0xE5E1, 0x9F6C}, //14763 #CJK UNIFIED IDEOGRAPH
+ {0xE5E2, 0x5104}, //14764 #CJK UNIFIED IDEOGRAPH
+ {0xE5E3, 0x61B6}, //14765 #CJK UNIFIED IDEOGRAPH
+ {0xE5E4, 0x6291}, //14766 #CJK UNIFIED IDEOGRAPH
+ {0xE5E5, 0x6A8D}, //14767 #CJK UNIFIED IDEOGRAPH
+ {0xE5E6, 0x81C6}, //14768 #CJK UNIFIED IDEOGRAPH
+ {0xE5E7, 0x5043}, //14769 #CJK UNIFIED IDEOGRAPH
+ {0xE5E8, 0x5830}, //14770 #CJK UNIFIED IDEOGRAPH
+ {0xE5E9, 0x5F66}, //14771 #CJK UNIFIED IDEOGRAPH
+ {0xE5EA, 0x7109}, //14772 #CJK UNIFIED IDEOGRAPH
+ {0xE5EB, 0x8A00}, //14773 #CJK UNIFIED IDEOGRAPH
+ {0xE5EC, 0x8AFA}, //14774 #CJK UNIFIED IDEOGRAPH
+ {0xE5ED, 0x5B7C}, //14775 #CJK UNIFIED IDEOGRAPH
+ {0xE5EE, 0x8616}, //14776 #CJK UNIFIED IDEOGRAPH
+ {0xE5EF, 0x4FFA}, //14777 #CJK UNIFIED IDEOGRAPH
+ {0xE5F0, 0x513C}, //14778 #CJK UNIFIED IDEOGRAPH
+ {0xE5F1, 0x56B4}, //14779 #CJK UNIFIED IDEOGRAPH
+ {0xE5F2, 0x5944}, //14780 #CJK UNIFIED IDEOGRAPH
+ {0xE5F3, 0x63A9}, //14781 #CJK UNIFIED IDEOGRAPH
+ {0xE5F4, 0x6DF9}, //14782 #CJK UNIFIED IDEOGRAPH
+ {0xE5F5, 0x5DAA}, //14783 #CJK UNIFIED IDEOGRAPH
+ {0xE5F6, 0x696D}, //14784 #CJK UNIFIED IDEOGRAPH
+ {0xE5F7, 0x5186}, //14785 #CJK UNIFIED IDEOGRAPH
+ {0xE5F8, 0x4E88}, //14786 #CJK UNIFIED IDEOGRAPH
+ {0xE5F9, 0x4F59}, //14787 #CJK UNIFIED IDEOGRAPH
+ {0xE5FA, 0xF97F}, //14788 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5FB, 0xF980}, //14789 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5FC, 0xF981}, //14790 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE5FD, 0x5982}, //14791 #CJK UNIFIED IDEOGRAPH
+ {0xE5FE, 0xF982}, //14792 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6A1, 0xF983}, //14793 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6A2, 0x6B5F}, //14794 #CJK UNIFIED IDEOGRAPH
+ {0xE6A3, 0x6C5D}, //14795 #CJK UNIFIED IDEOGRAPH
+ {0xE6A4, 0xF984}, //14796 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6A5, 0x74B5}, //14797 #CJK UNIFIED IDEOGRAPH
+ {0xE6A6, 0x7916}, //14798 #CJK UNIFIED IDEOGRAPH
+ {0xE6A7, 0xF985}, //14799 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6A8, 0x8207}, //14800 #CJK UNIFIED IDEOGRAPH
+ {0xE6A9, 0x8245}, //14801 #CJK UNIFIED IDEOGRAPH
+ {0xE6AA, 0x8339}, //14802 #CJK UNIFIED IDEOGRAPH
+ {0xE6AB, 0x8F3F}, //14803 #CJK UNIFIED IDEOGRAPH
+ {0xE6AC, 0x8F5D}, //14804 #CJK UNIFIED IDEOGRAPH
+ {0xE6AD, 0xF986}, //14805 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6AE, 0x9918}, //14806 #CJK UNIFIED IDEOGRAPH
+ {0xE6AF, 0xF987}, //14807 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6B0, 0xF988}, //14808 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6B1, 0xF989}, //14809 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6B2, 0x4EA6}, //14810 #CJK UNIFIED IDEOGRAPH
+ {0xE6B3, 0xF98A}, //14811 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6B4, 0x57DF}, //14812 #CJK UNIFIED IDEOGRAPH
+ {0xE6B5, 0x5F79}, //14813 #CJK UNIFIED IDEOGRAPH
+ {0xE6B6, 0x6613}, //14814 #CJK UNIFIED IDEOGRAPH
+ {0xE6B7, 0xF98B}, //14815 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6B8, 0xF98C}, //14816 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6B9, 0x75AB}, //14817 #CJK UNIFIED IDEOGRAPH
+ {0xE6BA, 0x7E79}, //14818 #CJK UNIFIED IDEOGRAPH
+ {0xE6BB, 0x8B6F}, //14819 #CJK UNIFIED IDEOGRAPH
+ {0xE6BC, 0xF98D}, //14820 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6BD, 0x9006}, //14821 #CJK UNIFIED IDEOGRAPH
+ {0xE6BE, 0x9A5B}, //14822 #CJK UNIFIED IDEOGRAPH
+ {0xE6BF, 0x56A5}, //14823 #CJK UNIFIED IDEOGRAPH
+ {0xE6C0, 0x5827}, //14824 #CJK UNIFIED IDEOGRAPH
+ {0xE6C1, 0x59F8}, //14825 #CJK UNIFIED IDEOGRAPH
+ {0xE6C2, 0x5A1F}, //14826 #CJK UNIFIED IDEOGRAPH
+ {0xE6C3, 0x5BB4}, //14827 #CJK UNIFIED IDEOGRAPH
+ {0xE6C4, 0xF98E}, //14828 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6C5, 0x5EF6}, //14829 #CJK UNIFIED IDEOGRAPH
+ {0xE6C6, 0xF98F}, //14830 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6C7, 0xF990}, //14831 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6C8, 0x6350}, //14832 #CJK UNIFIED IDEOGRAPH
+ {0xE6C9, 0x633B}, //14833 #CJK UNIFIED IDEOGRAPH
+ {0xE6CA, 0xF991}, //14834 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6CB, 0x693D}, //14835 #CJK UNIFIED IDEOGRAPH
+ {0xE6CC, 0x6C87}, //14836 #CJK UNIFIED IDEOGRAPH
+ {0xE6CD, 0x6CBF}, //14837 #CJK UNIFIED IDEOGRAPH
+ {0xE6CE, 0x6D8E}, //14838 #CJK UNIFIED IDEOGRAPH
+ {0xE6CF, 0x6D93}, //14839 #CJK UNIFIED IDEOGRAPH
+ {0xE6D0, 0x6DF5}, //14840 #CJK UNIFIED IDEOGRAPH
+ {0xE6D1, 0x6F14}, //14841 #CJK UNIFIED IDEOGRAPH
+ {0xE6D2, 0xF992}, //14842 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6D3, 0x70DF}, //14843 #CJK UNIFIED IDEOGRAPH
+ {0xE6D4, 0x7136}, //14844 #CJK UNIFIED IDEOGRAPH
+ {0xE6D5, 0x7159}, //14845 #CJK UNIFIED IDEOGRAPH
+ {0xE6D6, 0xF993}, //14846 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6D7, 0x71C3}, //14847 #CJK UNIFIED IDEOGRAPH
+ {0xE6D8, 0x71D5}, //14848 #CJK UNIFIED IDEOGRAPH
+ {0xE6D9, 0xF994}, //14849 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6DA, 0x784F}, //14850 #CJK UNIFIED IDEOGRAPH
+ {0xE6DB, 0x786F}, //14851 #CJK UNIFIED IDEOGRAPH
+ {0xE6DC, 0xF995}, //14852 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6DD, 0x7B75}, //14853 #CJK UNIFIED IDEOGRAPH
+ {0xE6DE, 0x7DE3}, //14854 #CJK UNIFIED IDEOGRAPH
+ {0xE6DF, 0xF996}, //14855 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6E0, 0x7E2F}, //14856 #CJK UNIFIED IDEOGRAPH
+ {0xE6E1, 0xF997}, //14857 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6E2, 0x884D}, //14858 #CJK UNIFIED IDEOGRAPH
+ {0xE6E3, 0x8EDF}, //14859 #CJK UNIFIED IDEOGRAPH
+ {0xE6E4, 0xF998}, //14860 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6E5, 0xF999}, //14861 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6E6, 0xF99A}, //14862 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6E7, 0x925B}, //14863 #CJK UNIFIED IDEOGRAPH
+ {0xE6E8, 0xF99B}, //14864 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6E9, 0x9CF6}, //14865 #CJK UNIFIED IDEOGRAPH
+ {0xE6EA, 0xF99C}, //14866 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6EB, 0xF99D}, //14867 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6EC, 0xF99E}, //14868 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6ED, 0x6085}, //14869 #CJK UNIFIED IDEOGRAPH
+ {0xE6EE, 0x6D85}, //14870 #CJK UNIFIED IDEOGRAPH
+ {0xE6EF, 0xF99F}, //14871 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6F0, 0x71B1}, //14872 #CJK UNIFIED IDEOGRAPH
+ {0xE6F1, 0xF9A0}, //14873 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6F2, 0xF9A1}, //14874 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6F3, 0x95B1}, //14875 #CJK UNIFIED IDEOGRAPH
+ {0xE6F4, 0x53AD}, //14876 #CJK UNIFIED IDEOGRAPH
+ {0xE6F5, 0xF9A2}, //14877 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6F6, 0xF9A3}, //14878 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6F7, 0xF9A4}, //14879 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6F8, 0x67D3}, //14880 #CJK UNIFIED IDEOGRAPH
+ {0xE6F9, 0xF9A5}, //14881 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE6FA, 0x708E}, //14882 #CJK UNIFIED IDEOGRAPH
+ {0xE6FB, 0x7130}, //14883 #CJK UNIFIED IDEOGRAPH
+ {0xE6FC, 0x7430}, //14884 #CJK UNIFIED IDEOGRAPH
+ {0xE6FD, 0x8276}, //14885 #CJK UNIFIED IDEOGRAPH
+ {0xE6FE, 0x82D2}, //14886 #CJK UNIFIED IDEOGRAPH
+ {0xE7A1, 0xF9A6}, //14887 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7A2, 0x95BB}, //14888 #CJK UNIFIED IDEOGRAPH
+ {0xE7A3, 0x9AE5}, //14889 #CJK UNIFIED IDEOGRAPH
+ {0xE7A4, 0x9E7D}, //14890 #CJK UNIFIED IDEOGRAPH
+ {0xE7A5, 0x66C4}, //14891 #CJK UNIFIED IDEOGRAPH
+ {0xE7A6, 0xF9A7}, //14892 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7A7, 0x71C1}, //14893 #CJK UNIFIED IDEOGRAPH
+ {0xE7A8, 0x8449}, //14894 #CJK UNIFIED IDEOGRAPH
+ {0xE7A9, 0xF9A8}, //14895 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7AA, 0xF9A9}, //14896 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7AB, 0x584B}, //14897 #CJK UNIFIED IDEOGRAPH
+ {0xE7AC, 0xF9AA}, //14898 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7AD, 0xF9AB}, //14899 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7AE, 0x5DB8}, //14900 #CJK UNIFIED IDEOGRAPH
+ {0xE7AF, 0x5F71}, //14901 #CJK UNIFIED IDEOGRAPH
+ {0xE7B0, 0xF9AC}, //14902 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7B1, 0x6620}, //14903 #CJK UNIFIED IDEOGRAPH
+ {0xE7B2, 0x668E}, //14904 #CJK UNIFIED IDEOGRAPH
+ {0xE7B3, 0x6979}, //14905 #CJK UNIFIED IDEOGRAPH
+ {0xE7B4, 0x69AE}, //14906 #CJK UNIFIED IDEOGRAPH
+ {0xE7B5, 0x6C38}, //14907 #CJK UNIFIED IDEOGRAPH
+ {0xE7B6, 0x6CF3}, //14908 #CJK UNIFIED IDEOGRAPH
+ {0xE7B7, 0x6E36}, //14909 #CJK UNIFIED IDEOGRAPH
+ {0xE7B8, 0x6F41}, //14910 #CJK UNIFIED IDEOGRAPH
+ {0xE7B9, 0x6FDA}, //14911 #CJK UNIFIED IDEOGRAPH
+ {0xE7BA, 0x701B}, //14912 #CJK UNIFIED IDEOGRAPH
+ {0xE7BB, 0x702F}, //14913 #CJK UNIFIED IDEOGRAPH
+ {0xE7BC, 0x7150}, //14914 #CJK UNIFIED IDEOGRAPH
+ {0xE7BD, 0x71DF}, //14915 #CJK UNIFIED IDEOGRAPH
+ {0xE7BE, 0x7370}, //14916 #CJK UNIFIED IDEOGRAPH
+ {0xE7BF, 0xF9AD}, //14917 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7C0, 0x745B}, //14918 #CJK UNIFIED IDEOGRAPH
+ {0xE7C1, 0xF9AE}, //14919 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7C2, 0x74D4}, //14920 #CJK UNIFIED IDEOGRAPH
+ {0xE7C3, 0x76C8}, //14921 #CJK UNIFIED IDEOGRAPH
+ {0xE7C4, 0x7A4E}, //14922 #CJK UNIFIED IDEOGRAPH
+ {0xE7C5, 0x7E93}, //14923 #CJK UNIFIED IDEOGRAPH
+ {0xE7C6, 0xF9AF}, //14924 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7C7, 0xF9B0}, //14925 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7C8, 0x82F1}, //14926 #CJK UNIFIED IDEOGRAPH
+ {0xE7C9, 0x8A60}, //14927 #CJK UNIFIED IDEOGRAPH
+ {0xE7CA, 0x8FCE}, //14928 #CJK UNIFIED IDEOGRAPH
+ {0xE7CB, 0xF9B1}, //14929 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7CC, 0x9348}, //14930 #CJK UNIFIED IDEOGRAPH
+ {0xE7CD, 0xF9B2}, //14931 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7CE, 0x9719}, //14932 #CJK UNIFIED IDEOGRAPH
+ {0xE7CF, 0xF9B3}, //14933 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7D0, 0xF9B4}, //14934 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7D1, 0x4E42}, //14935 #CJK UNIFIED IDEOGRAPH
+ {0xE7D2, 0x502A}, //14936 #CJK UNIFIED IDEOGRAPH
+ {0xE7D3, 0xF9B5}, //14937 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7D4, 0x5208}, //14938 #CJK UNIFIED IDEOGRAPH
+ {0xE7D5, 0x53E1}, //14939 #CJK UNIFIED IDEOGRAPH
+ {0xE7D6, 0x66F3}, //14940 #CJK UNIFIED IDEOGRAPH
+ {0xE7D7, 0x6C6D}, //14941 #CJK UNIFIED IDEOGRAPH
+ {0xE7D8, 0x6FCA}, //14942 #CJK UNIFIED IDEOGRAPH
+ {0xE7D9, 0x730A}, //14943 #CJK UNIFIED IDEOGRAPH
+ {0xE7DA, 0x777F}, //14944 #CJK UNIFIED IDEOGRAPH
+ {0xE7DB, 0x7A62}, //14945 #CJK UNIFIED IDEOGRAPH
+ {0xE7DC, 0x82AE}, //14946 #CJK UNIFIED IDEOGRAPH
+ {0xE7DD, 0x85DD}, //14947 #CJK UNIFIED IDEOGRAPH
+ {0xE7DE, 0x8602}, //14948 #CJK UNIFIED IDEOGRAPH
+ {0xE7DF, 0xF9B6}, //14949 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7E0, 0x88D4}, //14950 #CJK UNIFIED IDEOGRAPH
+ {0xE7E1, 0x8A63}, //14951 #CJK UNIFIED IDEOGRAPH
+ {0xE7E2, 0x8B7D}, //14952 #CJK UNIFIED IDEOGRAPH
+ {0xE7E3, 0x8C6B}, //14953 #CJK UNIFIED IDEOGRAPH
+ {0xE7E4, 0xF9B7}, //14954 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7E5, 0x92B3}, //14955 #CJK UNIFIED IDEOGRAPH
+ {0xE7E6, 0xF9B8}, //14956 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7E7, 0x9713}, //14957 #CJK UNIFIED IDEOGRAPH
+ {0xE7E8, 0x9810}, //14958 #CJK UNIFIED IDEOGRAPH
+ {0xE7E9, 0x4E94}, //14959 #CJK UNIFIED IDEOGRAPH
+ {0xE7EA, 0x4F0D}, //14960 #CJK UNIFIED IDEOGRAPH
+ {0xE7EB, 0x4FC9}, //14961 #CJK UNIFIED IDEOGRAPH
+ {0xE7EC, 0x50B2}, //14962 #CJK UNIFIED IDEOGRAPH
+ {0xE7ED, 0x5348}, //14963 #CJK UNIFIED IDEOGRAPH
+ {0xE7EE, 0x543E}, //14964 #CJK UNIFIED IDEOGRAPH
+ {0xE7EF, 0x5433}, //14965 #CJK UNIFIED IDEOGRAPH
+ {0xE7F0, 0x55DA}, //14966 #CJK UNIFIED IDEOGRAPH
+ {0xE7F1, 0x5862}, //14967 #CJK UNIFIED IDEOGRAPH
+ {0xE7F2, 0x58BA}, //14968 #CJK UNIFIED IDEOGRAPH
+ {0xE7F3, 0x5967}, //14969 #CJK UNIFIED IDEOGRAPH
+ {0xE7F4, 0x5A1B}, //14970 #CJK UNIFIED IDEOGRAPH
+ {0xE7F5, 0x5BE4}, //14971 #CJK UNIFIED IDEOGRAPH
+ {0xE7F6, 0x609F}, //14972 #CJK UNIFIED IDEOGRAPH
+ {0xE7F7, 0xF9B9}, //14973 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE7F8, 0x61CA}, //14974 #CJK UNIFIED IDEOGRAPH
+ {0xE7F9, 0x6556}, //14975 #CJK UNIFIED IDEOGRAPH
+ {0xE7FA, 0x65FF}, //14976 #CJK UNIFIED IDEOGRAPH
+ {0xE7FB, 0x6664}, //14977 #CJK UNIFIED IDEOGRAPH
+ {0xE7FC, 0x68A7}, //14978 #CJK UNIFIED IDEOGRAPH
+ {0xE7FD, 0x6C5A}, //14979 #CJK UNIFIED IDEOGRAPH
+ {0xE7FE, 0x6FB3}, //14980 #CJK UNIFIED IDEOGRAPH
+ {0xE8A1, 0x70CF}, //14981 #CJK UNIFIED IDEOGRAPH
+ {0xE8A2, 0x71AC}, //14982 #CJK UNIFIED IDEOGRAPH
+ {0xE8A3, 0x7352}, //14983 #CJK UNIFIED IDEOGRAPH
+ {0xE8A4, 0x7B7D}, //14984 #CJK UNIFIED IDEOGRAPH
+ {0xE8A5, 0x8708}, //14985 #CJK UNIFIED IDEOGRAPH
+ {0xE8A6, 0x8AA4}, //14986 #CJK UNIFIED IDEOGRAPH
+ {0xE8A7, 0x9C32}, //14987 #CJK UNIFIED IDEOGRAPH
+ {0xE8A8, 0x9F07}, //14988 #CJK UNIFIED IDEOGRAPH
+ {0xE8A9, 0x5C4B}, //14989 #CJK UNIFIED IDEOGRAPH
+ {0xE8AA, 0x6C83}, //14990 #CJK UNIFIED IDEOGRAPH
+ {0xE8AB, 0x7344}, //14991 #CJK UNIFIED IDEOGRAPH
+ {0xE8AC, 0x7389}, //14992 #CJK UNIFIED IDEOGRAPH
+ {0xE8AD, 0x923A}, //14993 #CJK UNIFIED IDEOGRAPH
+ {0xE8AE, 0x6EAB}, //14994 #CJK UNIFIED IDEOGRAPH
+ {0xE8AF, 0x7465}, //14995 #CJK UNIFIED IDEOGRAPH
+ {0xE8B0, 0x761F}, //14996 #CJK UNIFIED IDEOGRAPH
+ {0xE8B1, 0x7A69}, //14997 #CJK UNIFIED IDEOGRAPH
+ {0xE8B2, 0x7E15}, //14998 #CJK UNIFIED IDEOGRAPH
+ {0xE8B3, 0x860A}, //14999 #CJK UNIFIED IDEOGRAPH
+ {0xE8B4, 0x5140}, //15000 #CJK UNIFIED IDEOGRAPH
+ {0xE8B5, 0x58C5}, //15001 #CJK UNIFIED IDEOGRAPH
+ {0xE8B6, 0x64C1}, //15002 #CJK UNIFIED IDEOGRAPH
+ {0xE8B7, 0x74EE}, //15003 #CJK UNIFIED IDEOGRAPH
+ {0xE8B8, 0x7515}, //15004 #CJK UNIFIED IDEOGRAPH
+ {0xE8B9, 0x7670}, //15005 #CJK UNIFIED IDEOGRAPH
+ {0xE8BA, 0x7FC1}, //15006 #CJK UNIFIED IDEOGRAPH
+ {0xE8BB, 0x9095}, //15007 #CJK UNIFIED IDEOGRAPH
+ {0xE8BC, 0x96CD}, //15008 #CJK UNIFIED IDEOGRAPH
+ {0xE8BD, 0x9954}, //15009 #CJK UNIFIED IDEOGRAPH
+ {0xE8BE, 0x6E26}, //15010 #CJK UNIFIED IDEOGRAPH
+ {0xE8BF, 0x74E6}, //15011 #CJK UNIFIED IDEOGRAPH
+ {0xE8C0, 0x7AA9}, //15012 #CJK UNIFIED IDEOGRAPH
+ {0xE8C1, 0x7AAA}, //15013 #CJK UNIFIED IDEOGRAPH
+ {0xE8C2, 0x81E5}, //15014 #CJK UNIFIED IDEOGRAPH
+ {0xE8C3, 0x86D9}, //15015 #CJK UNIFIED IDEOGRAPH
+ {0xE8C4, 0x8778}, //15016 #CJK UNIFIED IDEOGRAPH
+ {0xE8C5, 0x8A1B}, //15017 #CJK UNIFIED IDEOGRAPH
+ {0xE8C6, 0x5A49}, //15018 #CJK UNIFIED IDEOGRAPH
+ {0xE8C7, 0x5B8C}, //15019 #CJK UNIFIED IDEOGRAPH
+ {0xE8C8, 0x5B9B}, //15020 #CJK UNIFIED IDEOGRAPH
+ {0xE8C9, 0x68A1}, //15021 #CJK UNIFIED IDEOGRAPH
+ {0xE8CA, 0x6900}, //15022 #CJK UNIFIED IDEOGRAPH
+ {0xE8CB, 0x6D63}, //15023 #CJK UNIFIED IDEOGRAPH
+ {0xE8CC, 0x73A9}, //15024 #CJK UNIFIED IDEOGRAPH
+ {0xE8CD, 0x7413}, //15025 #CJK UNIFIED IDEOGRAPH
+ {0xE8CE, 0x742C}, //15026 #CJK UNIFIED IDEOGRAPH
+ {0xE8CF, 0x7897}, //15027 #CJK UNIFIED IDEOGRAPH
+ {0xE8D0, 0x7DE9}, //15028 #CJK UNIFIED IDEOGRAPH
+ {0xE8D1, 0x7FEB}, //15029 #CJK UNIFIED IDEOGRAPH
+ {0xE8D2, 0x8118}, //15030 #CJK UNIFIED IDEOGRAPH
+ {0xE8D3, 0x8155}, //15031 #CJK UNIFIED IDEOGRAPH
+ {0xE8D4, 0x839E}, //15032 #CJK UNIFIED IDEOGRAPH
+ {0xE8D5, 0x8C4C}, //15033 #CJK UNIFIED IDEOGRAPH
+ {0xE8D6, 0x962E}, //15034 #CJK UNIFIED IDEOGRAPH
+ {0xE8D7, 0x9811}, //15035 #CJK UNIFIED IDEOGRAPH
+ {0xE8D8, 0x66F0}, //15036 #CJK UNIFIED IDEOGRAPH
+ {0xE8D9, 0x5F80}, //15037 #CJK UNIFIED IDEOGRAPH
+ {0xE8DA, 0x65FA}, //15038 #CJK UNIFIED IDEOGRAPH
+ {0xE8DB, 0x6789}, //15039 #CJK UNIFIED IDEOGRAPH
+ {0xE8DC, 0x6C6A}, //15040 #CJK UNIFIED IDEOGRAPH
+ {0xE8DD, 0x738B}, //15041 #CJK UNIFIED IDEOGRAPH
+ {0xE8DE, 0x502D}, //15042 #CJK UNIFIED IDEOGRAPH
+ {0xE8DF, 0x5A03}, //15043 #CJK UNIFIED IDEOGRAPH
+ {0xE8E0, 0x6B6A}, //15044 #CJK UNIFIED IDEOGRAPH
+ {0xE8E1, 0x77EE}, //15045 #CJK UNIFIED IDEOGRAPH
+ {0xE8E2, 0x5916}, //15046 #CJK UNIFIED IDEOGRAPH
+ {0xE8E3, 0x5D6C}, //15047 #CJK UNIFIED IDEOGRAPH
+ {0xE8E4, 0x5DCD}, //15048 #CJK UNIFIED IDEOGRAPH
+ {0xE8E5, 0x7325}, //15049 #CJK UNIFIED IDEOGRAPH
+ {0xE8E6, 0x754F}, //15050 #CJK UNIFIED IDEOGRAPH
+ {0xE8E7, 0xF9BA}, //15051 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8E8, 0xF9BB}, //15052 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8E9, 0x50E5}, //15053 #CJK UNIFIED IDEOGRAPH
+ {0xE8EA, 0x51F9}, //15054 #CJK UNIFIED IDEOGRAPH
+ {0xE8EB, 0x582F}, //15055 #CJK UNIFIED IDEOGRAPH
+ {0xE8EC, 0x592D}, //15056 #CJK UNIFIED IDEOGRAPH
+ {0xE8ED, 0x5996}, //15057 #CJK UNIFIED IDEOGRAPH
+ {0xE8EE, 0x59DA}, //15058 #CJK UNIFIED IDEOGRAPH
+ {0xE8EF, 0x5BE5}, //15059 #CJK UNIFIED IDEOGRAPH
+ {0xE8F0, 0xF9BC}, //15060 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8F1, 0xF9BD}, //15061 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8F2, 0x5DA2}, //15062 #CJK UNIFIED IDEOGRAPH
+ {0xE8F3, 0x62D7}, //15063 #CJK UNIFIED IDEOGRAPH
+ {0xE8F4, 0x6416}, //15064 #CJK UNIFIED IDEOGRAPH
+ {0xE8F5, 0x6493}, //15065 #CJK UNIFIED IDEOGRAPH
+ {0xE8F6, 0x64FE}, //15066 #CJK UNIFIED IDEOGRAPH
+ {0xE8F7, 0xF9BE}, //15067 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8F8, 0x66DC}, //15068 #CJK UNIFIED IDEOGRAPH
+ {0xE8F9, 0xF9BF}, //15069 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8FA, 0x6A48}, //15070 #CJK UNIFIED IDEOGRAPH
+ {0xE8FB, 0xF9C0}, //15071 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE8FC, 0x71FF}, //15072 #CJK UNIFIED IDEOGRAPH
+ {0xE8FD, 0x7464}, //15073 #CJK UNIFIED IDEOGRAPH
+ {0xE8FE, 0xF9C1}, //15074 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE9A1, 0x7A88}, //15075 #CJK UNIFIED IDEOGRAPH
+ {0xE9A2, 0x7AAF}, //15076 #CJK UNIFIED IDEOGRAPH
+ {0xE9A3, 0x7E47}, //15077 #CJK UNIFIED IDEOGRAPH
+ {0xE9A4, 0x7E5E}, //15078 #CJK UNIFIED IDEOGRAPH
+ {0xE9A5, 0x8000}, //15079 #CJK UNIFIED IDEOGRAPH
+ {0xE9A6, 0x8170}, //15080 #CJK UNIFIED IDEOGRAPH
+ {0xE9A7, 0xF9C2}, //15081 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE9A8, 0x87EF}, //15082 #CJK UNIFIED IDEOGRAPH
+ {0xE9A9, 0x8981}, //15083 #CJK UNIFIED IDEOGRAPH
+ {0xE9AA, 0x8B20}, //15084 #CJK UNIFIED IDEOGRAPH
+ {0xE9AB, 0x9059}, //15085 #CJK UNIFIED IDEOGRAPH
+ {0xE9AC, 0xF9C3}, //15086 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE9AD, 0x9080}, //15087 #CJK UNIFIED IDEOGRAPH
+ {0xE9AE, 0x9952}, //15088 #CJK UNIFIED IDEOGRAPH
+ {0xE9AF, 0x617E}, //15089 #CJK UNIFIED IDEOGRAPH
+ {0xE9B0, 0x6B32}, //15090 #CJK UNIFIED IDEOGRAPH
+ {0xE9B1, 0x6D74}, //15091 #CJK UNIFIED IDEOGRAPH
+ {0xE9B2, 0x7E1F}, //15092 #CJK UNIFIED IDEOGRAPH
+ {0xE9B3, 0x8925}, //15093 #CJK UNIFIED IDEOGRAPH
+ {0xE9B4, 0x8FB1}, //15094 #CJK UNIFIED IDEOGRAPH
+ {0xE9B5, 0x4FD1}, //15095 #CJK UNIFIED IDEOGRAPH
+ {0xE9B6, 0x50AD}, //15096 #CJK UNIFIED IDEOGRAPH
+ {0xE9B7, 0x5197}, //15097 #CJK UNIFIED IDEOGRAPH
+ {0xE9B8, 0x52C7}, //15098 #CJK UNIFIED IDEOGRAPH
+ {0xE9B9, 0x57C7}, //15099 #CJK UNIFIED IDEOGRAPH
+ {0xE9BA, 0x5889}, //15100 #CJK UNIFIED IDEOGRAPH
+ {0xE9BB, 0x5BB9}, //15101 #CJK UNIFIED IDEOGRAPH
+ {0xE9BC, 0x5EB8}, //15102 #CJK UNIFIED IDEOGRAPH
+ {0xE9BD, 0x6142}, //15103 #CJK UNIFIED IDEOGRAPH
+ {0xE9BE, 0x6995}, //15104 #CJK UNIFIED IDEOGRAPH
+ {0xE9BF, 0x6D8C}, //15105 #CJK UNIFIED IDEOGRAPH
+ {0xE9C0, 0x6E67}, //15106 #CJK UNIFIED IDEOGRAPH
+ {0xE9C1, 0x6EB6}, //15107 #CJK UNIFIED IDEOGRAPH
+ {0xE9C2, 0x7194}, //15108 #CJK UNIFIED IDEOGRAPH
+ {0xE9C3, 0x7462}, //15109 #CJK UNIFIED IDEOGRAPH
+ {0xE9C4, 0x7528}, //15110 #CJK UNIFIED IDEOGRAPH
+ {0xE9C5, 0x752C}, //15111 #CJK UNIFIED IDEOGRAPH
+ {0xE9C6, 0x8073}, //15112 #CJK UNIFIED IDEOGRAPH
+ {0xE9C7, 0x8338}, //15113 #CJK UNIFIED IDEOGRAPH
+ {0xE9C8, 0x84C9}, //15114 #CJK UNIFIED IDEOGRAPH
+ {0xE9C9, 0x8E0A}, //15115 #CJK UNIFIED IDEOGRAPH
+ {0xE9CA, 0x9394}, //15116 #CJK UNIFIED IDEOGRAPH
+ {0xE9CB, 0x93DE}, //15117 #CJK UNIFIED IDEOGRAPH
+ {0xE9CC, 0xF9C4}, //15118 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE9CD, 0x4E8E}, //15119 #CJK UNIFIED IDEOGRAPH
+ {0xE9CE, 0x4F51}, //15120 #CJK UNIFIED IDEOGRAPH
+ {0xE9CF, 0x5076}, //15121 #CJK UNIFIED IDEOGRAPH
+ {0xE9D0, 0x512A}, //15122 #CJK UNIFIED IDEOGRAPH
+ {0xE9D1, 0x53C8}, //15123 #CJK UNIFIED IDEOGRAPH
+ {0xE9D2, 0x53CB}, //15124 #CJK UNIFIED IDEOGRAPH
+ {0xE9D3, 0x53F3}, //15125 #CJK UNIFIED IDEOGRAPH
+ {0xE9D4, 0x5B87}, //15126 #CJK UNIFIED IDEOGRAPH
+ {0xE9D5, 0x5BD3}, //15127 #CJK UNIFIED IDEOGRAPH
+ {0xE9D6, 0x5C24}, //15128 #CJK UNIFIED IDEOGRAPH
+ {0xE9D7, 0x611A}, //15129 #CJK UNIFIED IDEOGRAPH
+ {0xE9D8, 0x6182}, //15130 #CJK UNIFIED IDEOGRAPH
+ {0xE9D9, 0x65F4}, //15131 #CJK UNIFIED IDEOGRAPH
+ {0xE9DA, 0x725B}, //15132 #CJK UNIFIED IDEOGRAPH
+ {0xE9DB, 0x7397}, //15133 #CJK UNIFIED IDEOGRAPH
+ {0xE9DC, 0x7440}, //15134 #CJK UNIFIED IDEOGRAPH
+ {0xE9DD, 0x76C2}, //15135 #CJK UNIFIED IDEOGRAPH
+ {0xE9DE, 0x7950}, //15136 #CJK UNIFIED IDEOGRAPH
+ {0xE9DF, 0x7991}, //15137 #CJK UNIFIED IDEOGRAPH
+ {0xE9E0, 0x79B9}, //15138 #CJK UNIFIED IDEOGRAPH
+ {0xE9E1, 0x7D06}, //15139 #CJK UNIFIED IDEOGRAPH
+ {0xE9E2, 0x7FBD}, //15140 #CJK UNIFIED IDEOGRAPH
+ {0xE9E3, 0x828B}, //15141 #CJK UNIFIED IDEOGRAPH
+ {0xE9E4, 0x85D5}, //15142 #CJK UNIFIED IDEOGRAPH
+ {0xE9E5, 0x865E}, //15143 #CJK UNIFIED IDEOGRAPH
+ {0xE9E6, 0x8FC2}, //15144 #CJK UNIFIED IDEOGRAPH
+ {0xE9E7, 0x9047}, //15145 #CJK UNIFIED IDEOGRAPH
+ {0xE9E8, 0x90F5}, //15146 #CJK UNIFIED IDEOGRAPH
+ {0xE9E9, 0x91EA}, //15147 #CJK UNIFIED IDEOGRAPH
+ {0xE9EA, 0x9685}, //15148 #CJK UNIFIED IDEOGRAPH
+ {0xE9EB, 0x96E8}, //15149 #CJK UNIFIED IDEOGRAPH
+ {0xE9EC, 0x96E9}, //15150 #CJK UNIFIED IDEOGRAPH
+ {0xE9ED, 0x52D6}, //15151 #CJK UNIFIED IDEOGRAPH
+ {0xE9EE, 0x5F67}, //15152 #CJK UNIFIED IDEOGRAPH
+ {0xE9EF, 0x65ED}, //15153 #CJK UNIFIED IDEOGRAPH
+ {0xE9F0, 0x6631}, //15154 #CJK UNIFIED IDEOGRAPH
+ {0xE9F1, 0x682F}, //15155 #CJK UNIFIED IDEOGRAPH
+ {0xE9F2, 0x715C}, //15156 #CJK UNIFIED IDEOGRAPH
+ {0xE9F3, 0x7A36}, //15157 #CJK UNIFIED IDEOGRAPH
+ {0xE9F4, 0x90C1}, //15158 #CJK UNIFIED IDEOGRAPH
+ {0xE9F5, 0x980A}, //15159 #CJK UNIFIED IDEOGRAPH
+ {0xE9F6, 0x4E91}, //15160 #CJK UNIFIED IDEOGRAPH
+ {0xE9F7, 0xF9C5}, //15161 #CJK COMPATIBILITY IDEOGRAPH
+ {0xE9F8, 0x6A52}, //15162 #CJK UNIFIED IDEOGRAPH
+ {0xE9F9, 0x6B9E}, //15163 #CJK UNIFIED IDEOGRAPH
+ {0xE9FA, 0x6F90}, //15164 #CJK UNIFIED IDEOGRAPH
+ {0xE9FB, 0x7189}, //15165 #CJK UNIFIED IDEOGRAPH
+ {0xE9FC, 0x8018}, //15166 #CJK UNIFIED IDEOGRAPH
+ {0xE9FD, 0x82B8}, //15167 #CJK UNIFIED IDEOGRAPH
+ {0xE9FE, 0x8553}, //15168 #CJK UNIFIED IDEOGRAPH
+ {0xEAA1, 0x904B}, //15169 #CJK UNIFIED IDEOGRAPH
+ {0xEAA2, 0x9695}, //15170 #CJK UNIFIED IDEOGRAPH
+ {0xEAA3, 0x96F2}, //15171 #CJK UNIFIED IDEOGRAPH
+ {0xEAA4, 0x97FB}, //15172 #CJK UNIFIED IDEOGRAPH
+ {0xEAA5, 0x851A}, //15173 #CJK UNIFIED IDEOGRAPH
+ {0xEAA6, 0x9B31}, //15174 #CJK UNIFIED IDEOGRAPH
+ {0xEAA7, 0x4E90}, //15175 #CJK UNIFIED IDEOGRAPH
+ {0xEAA8, 0x718A}, //15176 #CJK UNIFIED IDEOGRAPH
+ {0xEAA9, 0x96C4}, //15177 #CJK UNIFIED IDEOGRAPH
+ {0xEAAA, 0x5143}, //15178 #CJK UNIFIED IDEOGRAPH
+ {0xEAAB, 0x539F}, //15179 #CJK UNIFIED IDEOGRAPH
+ {0xEAAC, 0x54E1}, //15180 #CJK UNIFIED IDEOGRAPH
+ {0xEAAD, 0x5713}, //15181 #CJK UNIFIED IDEOGRAPH
+ {0xEAAE, 0x5712}, //15182 #CJK UNIFIED IDEOGRAPH
+ {0xEAAF, 0x57A3}, //15183 #CJK UNIFIED IDEOGRAPH
+ {0xEAB0, 0x5A9B}, //15184 #CJK UNIFIED IDEOGRAPH
+ {0xEAB1, 0x5AC4}, //15185 #CJK UNIFIED IDEOGRAPH
+ {0xEAB2, 0x5BC3}, //15186 #CJK UNIFIED IDEOGRAPH
+ {0xEAB3, 0x6028}, //15187 #CJK UNIFIED IDEOGRAPH
+ {0xEAB4, 0x613F}, //15188 #CJK UNIFIED IDEOGRAPH
+ {0xEAB5, 0x63F4}, //15189 #CJK UNIFIED IDEOGRAPH
+ {0xEAB6, 0x6C85}, //15190 #CJK UNIFIED IDEOGRAPH
+ {0xEAB7, 0x6D39}, //15191 #CJK UNIFIED IDEOGRAPH
+ {0xEAB8, 0x6E72}, //15192 #CJK UNIFIED IDEOGRAPH
+ {0xEAB9, 0x6E90}, //15193 #CJK UNIFIED IDEOGRAPH
+ {0xEABA, 0x7230}, //15194 #CJK UNIFIED IDEOGRAPH
+ {0xEABB, 0x733F}, //15195 #CJK UNIFIED IDEOGRAPH
+ {0xEABC, 0x7457}, //15196 #CJK UNIFIED IDEOGRAPH
+ {0xEABD, 0x82D1}, //15197 #CJK UNIFIED IDEOGRAPH
+ {0xEABE, 0x8881}, //15198 #CJK UNIFIED IDEOGRAPH
+ {0xEABF, 0x8F45}, //15199 #CJK UNIFIED IDEOGRAPH
+ {0xEAC0, 0x9060}, //15200 #CJK UNIFIED IDEOGRAPH
+ {0xEAC1, 0xF9C6}, //15201 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEAC2, 0x9662}, //15202 #CJK UNIFIED IDEOGRAPH
+ {0xEAC3, 0x9858}, //15203 #CJK UNIFIED IDEOGRAPH
+ {0xEAC4, 0x9D1B}, //15204 #CJK UNIFIED IDEOGRAPH
+ {0xEAC5, 0x6708}, //15205 #CJK UNIFIED IDEOGRAPH
+ {0xEAC6, 0x8D8A}, //15206 #CJK UNIFIED IDEOGRAPH
+ {0xEAC7, 0x925E}, //15207 #CJK UNIFIED IDEOGRAPH
+ {0xEAC8, 0x4F4D}, //15208 #CJK UNIFIED IDEOGRAPH
+ {0xEAC9, 0x5049}, //15209 #CJK UNIFIED IDEOGRAPH
+ {0xEACA, 0x50DE}, //15210 #CJK UNIFIED IDEOGRAPH
+ {0xEACB, 0x5371}, //15211 #CJK UNIFIED IDEOGRAPH
+ {0xEACC, 0x570D}, //15212 #CJK UNIFIED IDEOGRAPH
+ {0xEACD, 0x59D4}, //15213 #CJK UNIFIED IDEOGRAPH
+ {0xEACE, 0x5A01}, //15214 #CJK UNIFIED IDEOGRAPH
+ {0xEACF, 0x5C09}, //15215 #CJK UNIFIED IDEOGRAPH
+ {0xEAD0, 0x6170}, //15216 #CJK UNIFIED IDEOGRAPH
+ {0xEAD1, 0x6690}, //15217 #CJK UNIFIED IDEOGRAPH
+ {0xEAD2, 0x6E2D}, //15218 #CJK UNIFIED IDEOGRAPH
+ {0xEAD3, 0x7232}, //15219 #CJK UNIFIED IDEOGRAPH
+ {0xEAD4, 0x744B}, //15220 #CJK UNIFIED IDEOGRAPH
+ {0xEAD5, 0x7DEF}, //15221 #CJK UNIFIED IDEOGRAPH
+ {0xEAD6, 0x80C3}, //15222 #CJK UNIFIED IDEOGRAPH
+ {0xEAD7, 0x840E}, //15223 #CJK UNIFIED IDEOGRAPH
+ {0xEAD8, 0x8466}, //15224 #CJK UNIFIED IDEOGRAPH
+ {0xEAD9, 0x853F}, //15225 #CJK UNIFIED IDEOGRAPH
+ {0xEADA, 0x875F}, //15226 #CJK UNIFIED IDEOGRAPH
+ {0xEADB, 0x885B}, //15227 #CJK UNIFIED IDEOGRAPH
+ {0xEADC, 0x8918}, //15228 #CJK UNIFIED IDEOGRAPH
+ {0xEADD, 0x8B02}, //15229 #CJK UNIFIED IDEOGRAPH
+ {0xEADE, 0x9055}, //15230 #CJK UNIFIED IDEOGRAPH
+ {0xEADF, 0x97CB}, //15231 #CJK UNIFIED IDEOGRAPH
+ {0xEAE0, 0x9B4F}, //15232 #CJK UNIFIED IDEOGRAPH
+ {0xEAE1, 0x4E73}, //15233 #CJK UNIFIED IDEOGRAPH
+ {0xEAE2, 0x4F91}, //15234 #CJK UNIFIED IDEOGRAPH
+ {0xEAE3, 0x5112}, //15235 #CJK UNIFIED IDEOGRAPH
+ {0xEAE4, 0x516A}, //15236 #CJK UNIFIED IDEOGRAPH
+ {0xEAE5, 0xF9C7}, //15237 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEAE6, 0x552F}, //15238 #CJK UNIFIED IDEOGRAPH
+ {0xEAE7, 0x55A9}, //15239 #CJK UNIFIED IDEOGRAPH
+ {0xEAE8, 0x5B7A}, //15240 #CJK UNIFIED IDEOGRAPH
+ {0xEAE9, 0x5BA5}, //15241 #CJK UNIFIED IDEOGRAPH
+ {0xEAEA, 0x5E7C}, //15242 #CJK UNIFIED IDEOGRAPH
+ {0xEAEB, 0x5E7D}, //15243 #CJK UNIFIED IDEOGRAPH
+ {0xEAEC, 0x5EBE}, //15244 #CJK UNIFIED IDEOGRAPH
+ {0xEAED, 0x60A0}, //15245 #CJK UNIFIED IDEOGRAPH
+ {0xEAEE, 0x60DF}, //15246 #CJK UNIFIED IDEOGRAPH
+ {0xEAEF, 0x6108}, //15247 #CJK UNIFIED IDEOGRAPH
+ {0xEAF0, 0x6109}, //15248 #CJK UNIFIED IDEOGRAPH
+ {0xEAF1, 0x63C4}, //15249 #CJK UNIFIED IDEOGRAPH
+ {0xEAF2, 0x6538}, //15250 #CJK UNIFIED IDEOGRAPH
+ {0xEAF3, 0x6709}, //15251 #CJK UNIFIED IDEOGRAPH
+ {0xEAF4, 0xF9C8}, //15252 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEAF5, 0x67D4}, //15253 #CJK UNIFIED IDEOGRAPH
+ {0xEAF6, 0x67DA}, //15254 #CJK UNIFIED IDEOGRAPH
+ {0xEAF7, 0xF9C9}, //15255 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEAF8, 0x6961}, //15256 #CJK UNIFIED IDEOGRAPH
+ {0xEAF9, 0x6962}, //15257 #CJK UNIFIED IDEOGRAPH
+ {0xEAFA, 0x6CB9}, //15258 #CJK UNIFIED IDEOGRAPH
+ {0xEAFB, 0x6D27}, //15259 #CJK UNIFIED IDEOGRAPH
+ {0xEAFC, 0xF9CA}, //15260 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEAFD, 0x6E38}, //15261 #CJK UNIFIED IDEOGRAPH
+ {0xEAFE, 0xF9CB}, //15262 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBA1, 0x6FE1}, //15263 #CJK UNIFIED IDEOGRAPH
+ {0xEBA2, 0x7336}, //15264 #CJK UNIFIED IDEOGRAPH
+ {0xEBA3, 0x7337}, //15265 #CJK UNIFIED IDEOGRAPH
+ {0xEBA4, 0xF9CC}, //15266 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBA5, 0x745C}, //15267 #CJK UNIFIED IDEOGRAPH
+ {0xEBA6, 0x7531}, //15268 #CJK UNIFIED IDEOGRAPH
+ {0xEBA7, 0xF9CD}, //15269 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBA8, 0x7652}, //15270 #CJK UNIFIED IDEOGRAPH
+ {0xEBA9, 0xF9CE}, //15271 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBAA, 0xF9CF}, //15272 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBAB, 0x7DAD}, //15273 #CJK UNIFIED IDEOGRAPH
+ {0xEBAC, 0x81FE}, //15274 #CJK UNIFIED IDEOGRAPH
+ {0xEBAD, 0x8438}, //15275 #CJK UNIFIED IDEOGRAPH
+ {0xEBAE, 0x88D5}, //15276 #CJK UNIFIED IDEOGRAPH
+ {0xEBAF, 0x8A98}, //15277 #CJK UNIFIED IDEOGRAPH
+ {0xEBB0, 0x8ADB}, //15278 #CJK UNIFIED IDEOGRAPH
+ {0xEBB1, 0x8AED}, //15279 #CJK UNIFIED IDEOGRAPH
+ {0xEBB2, 0x8E30}, //15280 #CJK UNIFIED IDEOGRAPH
+ {0xEBB3, 0x8E42}, //15281 #CJK UNIFIED IDEOGRAPH
+ {0xEBB4, 0x904A}, //15282 #CJK UNIFIED IDEOGRAPH
+ {0xEBB5, 0x903E}, //15283 #CJK UNIFIED IDEOGRAPH
+ {0xEBB6, 0x907A}, //15284 #CJK UNIFIED IDEOGRAPH
+ {0xEBB7, 0x9149}, //15285 #CJK UNIFIED IDEOGRAPH
+ {0xEBB8, 0x91C9}, //15286 #CJK UNIFIED IDEOGRAPH
+ {0xEBB9, 0x936E}, //15287 #CJK UNIFIED IDEOGRAPH
+ {0xEBBA, 0xF9D0}, //15288 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBBB, 0xF9D1}, //15289 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBBC, 0x5809}, //15290 #CJK UNIFIED IDEOGRAPH
+ {0xEBBD, 0xF9D2}, //15291 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBBE, 0x6BD3}, //15292 #CJK UNIFIED IDEOGRAPH
+ {0xEBBF, 0x8089}, //15293 #CJK UNIFIED IDEOGRAPH
+ {0xEBC0, 0x80B2}, //15294 #CJK UNIFIED IDEOGRAPH
+ {0xEBC1, 0xF9D3}, //15295 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBC2, 0xF9D4}, //15296 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBC3, 0x5141}, //15297 #CJK UNIFIED IDEOGRAPH
+ {0xEBC4, 0x596B}, //15298 #CJK UNIFIED IDEOGRAPH
+ {0xEBC5, 0x5C39}, //15299 #CJK UNIFIED IDEOGRAPH
+ {0xEBC6, 0xF9D5}, //15300 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBC7, 0xF9D6}, //15301 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBC8, 0x6F64}, //15302 #CJK UNIFIED IDEOGRAPH
+ {0xEBC9, 0x73A7}, //15303 #CJK UNIFIED IDEOGRAPH
+ {0xEBCA, 0x80E4}, //15304 #CJK UNIFIED IDEOGRAPH
+ {0xEBCB, 0x8D07}, //15305 #CJK UNIFIED IDEOGRAPH
+ {0xEBCC, 0xF9D7}, //15306 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBCD, 0x9217}, //15307 #CJK UNIFIED IDEOGRAPH
+ {0xEBCE, 0x958F}, //15308 #CJK UNIFIED IDEOGRAPH
+ {0xEBCF, 0xF9D8}, //15309 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBD0, 0xF9D9}, //15310 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBD1, 0xF9DA}, //15311 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBD2, 0xF9DB}, //15312 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBD3, 0x807F}, //15313 #CJK UNIFIED IDEOGRAPH
+ {0xEBD4, 0x620E}, //15314 #CJK UNIFIED IDEOGRAPH
+ {0xEBD5, 0x701C}, //15315 #CJK UNIFIED IDEOGRAPH
+ {0xEBD6, 0x7D68}, //15316 #CJK UNIFIED IDEOGRAPH
+ {0xEBD7, 0x878D}, //15317 #CJK UNIFIED IDEOGRAPH
+ {0xEBD8, 0xF9DC}, //15318 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEBD9, 0x57A0}, //15319 #CJK UNIFIED IDEOGRAPH
+ {0xEBDA, 0x6069}, //15320 #CJK UNIFIED IDEOGRAPH
+ {0xEBDB, 0x6147}, //15321 #CJK UNIFIED IDEOGRAPH
+ {0xEBDC, 0x6BB7}, //15322 #CJK UNIFIED IDEOGRAPH
+ {0xEBDD, 0x8ABE}, //15323 #CJK UNIFIED IDEOGRAPH
+ {0xEBDE, 0x9280}, //15324 #CJK UNIFIED IDEOGRAPH
+ {0xEBDF, 0x96B1}, //15325 #CJK UNIFIED IDEOGRAPH
+ {0xEBE0, 0x4E59}, //15326 #CJK UNIFIED IDEOGRAPH
+ {0xEBE1, 0x541F}, //15327 #CJK UNIFIED IDEOGRAPH
+ {0xEBE2, 0x6DEB}, //15328 #CJK UNIFIED IDEOGRAPH
+ {0xEBE3, 0x852D}, //15329 #CJK UNIFIED IDEOGRAPH
+ {0xEBE4, 0x9670}, //15330 #CJK UNIFIED IDEOGRAPH
+ {0xEBE5, 0x97F3}, //15331 #CJK UNIFIED IDEOGRAPH
+ {0xEBE6, 0x98EE}, //15332 #CJK UNIFIED IDEOGRAPH
+ {0xEBE7, 0x63D6}, //15333 #CJK UNIFIED IDEOGRAPH
+ {0xEBE8, 0x6CE3}, //15334 #CJK UNIFIED IDEOGRAPH
+ {0xEBE9, 0x9091}, //15335 #CJK UNIFIED IDEOGRAPH
+ {0xEBEA, 0x51DD}, //15336 #CJK UNIFIED IDEOGRAPH
+ {0xEBEB, 0x61C9}, //15337 #CJK UNIFIED IDEOGRAPH
+ {0xEBEC, 0x81BA}, //15338 #CJK UNIFIED IDEOGRAPH
+ {0xEBED, 0x9DF9}, //15339 #CJK UNIFIED IDEOGRAPH
+ {0xEBEE, 0x4F9D}, //15340 #CJK UNIFIED IDEOGRAPH
+ {0xEBEF, 0x501A}, //15341 #CJK UNIFIED IDEOGRAPH
+ {0xEBF0, 0x5100}, //15342 #CJK UNIFIED IDEOGRAPH
+ {0xEBF1, 0x5B9C}, //15343 #CJK UNIFIED IDEOGRAPH
+ {0xEBF2, 0x610F}, //15344 #CJK UNIFIED IDEOGRAPH
+ {0xEBF3, 0x61FF}, //15345 #CJK UNIFIED IDEOGRAPH
+ {0xEBF4, 0x64EC}, //15346 #CJK UNIFIED IDEOGRAPH
+ {0xEBF5, 0x6905}, //15347 #CJK UNIFIED IDEOGRAPH
+ {0xEBF6, 0x6BC5}, //15348 #CJK UNIFIED IDEOGRAPH
+ {0xEBF7, 0x7591}, //15349 #CJK UNIFIED IDEOGRAPH
+ {0xEBF8, 0x77E3}, //15350 #CJK UNIFIED IDEOGRAPH
+ {0xEBF9, 0x7FA9}, //15351 #CJK UNIFIED IDEOGRAPH
+ {0xEBFA, 0x8264}, //15352 #CJK UNIFIED IDEOGRAPH
+ {0xEBFB, 0x858F}, //15353 #CJK UNIFIED IDEOGRAPH
+ {0xEBFC, 0x87FB}, //15354 #CJK UNIFIED IDEOGRAPH
+ {0xEBFD, 0x8863}, //15355 #CJK UNIFIED IDEOGRAPH
+ {0xEBFE, 0x8ABC}, //15356 #CJK UNIFIED IDEOGRAPH
+ {0xECA1, 0x8B70}, //15357 #CJK UNIFIED IDEOGRAPH
+ {0xECA2, 0x91AB}, //15358 #CJK UNIFIED IDEOGRAPH
+ {0xECA3, 0x4E8C}, //15359 #CJK UNIFIED IDEOGRAPH
+ {0xECA4, 0x4EE5}, //15360 #CJK UNIFIED IDEOGRAPH
+ {0xECA5, 0x4F0A}, //15361 #CJK UNIFIED IDEOGRAPH
+ {0xECA6, 0xF9DD}, //15362 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECA7, 0xF9DE}, //15363 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECA8, 0x5937}, //15364 #CJK UNIFIED IDEOGRAPH
+ {0xECA9, 0x59E8}, //15365 #CJK UNIFIED IDEOGRAPH
+ {0xECAA, 0xF9DF}, //15366 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECAB, 0x5DF2}, //15367 #CJK UNIFIED IDEOGRAPH
+ {0xECAC, 0x5F1B}, //15368 #CJK UNIFIED IDEOGRAPH
+ {0xECAD, 0x5F5B}, //15369 #CJK UNIFIED IDEOGRAPH
+ {0xECAE, 0x6021}, //15370 #CJK UNIFIED IDEOGRAPH
+ {0xECAF, 0xF9E0}, //15371 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECB0, 0xF9E1}, //15372 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECB1, 0xF9E2}, //15373 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECB2, 0xF9E3}, //15374 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECB3, 0x723E}, //15375 #CJK UNIFIED IDEOGRAPH
+ {0xECB4, 0x73E5}, //15376 #CJK UNIFIED IDEOGRAPH
+ {0xECB5, 0xF9E4}, //15377 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECB6, 0x7570}, //15378 #CJK UNIFIED IDEOGRAPH
+ {0xECB7, 0x75CD}, //15379 #CJK UNIFIED IDEOGRAPH
+ {0xECB8, 0xF9E5}, //15380 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECB9, 0x79FB}, //15381 #CJK UNIFIED IDEOGRAPH
+ {0xECBA, 0xF9E6}, //15382 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECBB, 0x800C}, //15383 #CJK UNIFIED IDEOGRAPH
+ {0xECBC, 0x8033}, //15384 #CJK UNIFIED IDEOGRAPH
+ {0xECBD, 0x8084}, //15385 #CJK UNIFIED IDEOGRAPH
+ {0xECBE, 0x82E1}, //15386 #CJK UNIFIED IDEOGRAPH
+ {0xECBF, 0x8351}, //15387 #CJK UNIFIED IDEOGRAPH
+ {0xECC0, 0xF9E7}, //15388 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECC1, 0xF9E8}, //15389 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECC2, 0x8CBD}, //15390 #CJK UNIFIED IDEOGRAPH
+ {0xECC3, 0x8CB3}, //15391 #CJK UNIFIED IDEOGRAPH
+ {0xECC4, 0x9087}, //15392 #CJK UNIFIED IDEOGRAPH
+ {0xECC5, 0xF9E9}, //15393 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECC6, 0xF9EA}, //15394 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECC7, 0x98F4}, //15395 #CJK UNIFIED IDEOGRAPH
+ {0xECC8, 0x990C}, //15396 #CJK UNIFIED IDEOGRAPH
+ {0xECC9, 0xF9EB}, //15397 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECCA, 0xF9EC}, //15398 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECCB, 0x7037}, //15399 #CJK UNIFIED IDEOGRAPH
+ {0xECCC, 0x76CA}, //15400 #CJK UNIFIED IDEOGRAPH
+ {0xECCD, 0x7FCA}, //15401 #CJK UNIFIED IDEOGRAPH
+ {0xECCE, 0x7FCC}, //15402 #CJK UNIFIED IDEOGRAPH
+ {0xECCF, 0x7FFC}, //15403 #CJK UNIFIED IDEOGRAPH
+ {0xECD0, 0x8B1A}, //15404 #CJK UNIFIED IDEOGRAPH
+ {0xECD1, 0x4EBA}, //15405 #CJK UNIFIED IDEOGRAPH
+ {0xECD2, 0x4EC1}, //15406 #CJK UNIFIED IDEOGRAPH
+ {0xECD3, 0x5203}, //15407 #CJK UNIFIED IDEOGRAPH
+ {0xECD4, 0x5370}, //15408 #CJK UNIFIED IDEOGRAPH
+ {0xECD5, 0xF9ED}, //15409 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECD6, 0x54BD}, //15410 #CJK UNIFIED IDEOGRAPH
+ {0xECD7, 0x56E0}, //15411 #CJK UNIFIED IDEOGRAPH
+ {0xECD8, 0x59FB}, //15412 #CJK UNIFIED IDEOGRAPH
+ {0xECD9, 0x5BC5}, //15413 #CJK UNIFIED IDEOGRAPH
+ {0xECDA, 0x5F15}, //15414 #CJK UNIFIED IDEOGRAPH
+ {0xECDB, 0x5FCD}, //15415 #CJK UNIFIED IDEOGRAPH
+ {0xECDC, 0x6E6E}, //15416 #CJK UNIFIED IDEOGRAPH
+ {0xECDD, 0xF9EE}, //15417 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECDE, 0xF9EF}, //15418 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECDF, 0x7D6A}, //15419 #CJK UNIFIED IDEOGRAPH
+ {0xECE0, 0x8335}, //15420 #CJK UNIFIED IDEOGRAPH
+ {0xECE1, 0xF9F0}, //15421 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECE2, 0x8693}, //15422 #CJK UNIFIED IDEOGRAPH
+ {0xECE3, 0x8A8D}, //15423 #CJK UNIFIED IDEOGRAPH
+ {0xECE4, 0xF9F1}, //15424 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECE5, 0x976D}, //15425 #CJK UNIFIED IDEOGRAPH
+ {0xECE6, 0x9777}, //15426 #CJK UNIFIED IDEOGRAPH
+ {0xECE7, 0xF9F2}, //15427 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECE8, 0xF9F3}, //15428 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECE9, 0x4E00}, //15429 #CJK UNIFIED IDEOGRAPH
+ {0xECEA, 0x4F5A}, //15430 #CJK UNIFIED IDEOGRAPH
+ {0xECEB, 0x4F7E}, //15431 #CJK UNIFIED IDEOGRAPH
+ {0xECEC, 0x58F9}, //15432 #CJK UNIFIED IDEOGRAPH
+ {0xECED, 0x65E5}, //15433 #CJK UNIFIED IDEOGRAPH
+ {0xECEE, 0x6EA2}, //15434 #CJK UNIFIED IDEOGRAPH
+ {0xECEF, 0x9038}, //15435 #CJK UNIFIED IDEOGRAPH
+ {0xECF0, 0x93B0}, //15436 #CJK UNIFIED IDEOGRAPH
+ {0xECF1, 0x99B9}, //15437 #CJK UNIFIED IDEOGRAPH
+ {0xECF2, 0x4EFB}, //15438 #CJK UNIFIED IDEOGRAPH
+ {0xECF3, 0x58EC}, //15439 #CJK UNIFIED IDEOGRAPH
+ {0xECF4, 0x598A}, //15440 #CJK UNIFIED IDEOGRAPH
+ {0xECF5, 0x59D9}, //15441 #CJK UNIFIED IDEOGRAPH
+ {0xECF6, 0x6041}, //15442 #CJK UNIFIED IDEOGRAPH
+ {0xECF7, 0xF9F4}, //15443 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECF8, 0xF9F5}, //15444 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECF9, 0x7A14}, //15445 #CJK UNIFIED IDEOGRAPH
+ {0xECFA, 0xF9F6}, //15446 #CJK COMPATIBILITY IDEOGRAPH
+ {0xECFB, 0x834F}, //15447 #CJK UNIFIED IDEOGRAPH
+ {0xECFC, 0x8CC3}, //15448 #CJK UNIFIED IDEOGRAPH
+ {0xECFD, 0x5165}, //15449 #CJK UNIFIED IDEOGRAPH
+ {0xECFE, 0x5344}, //15450 #CJK UNIFIED IDEOGRAPH
+ {0xEDA1, 0xF9F7}, //15451 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDA2, 0xF9F8}, //15452 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDA3, 0xF9F9}, //15453 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDA4, 0x4ECD}, //15454 #CJK UNIFIED IDEOGRAPH
+ {0xEDA5, 0x5269}, //15455 #CJK UNIFIED IDEOGRAPH
+ {0xEDA6, 0x5B55}, //15456 #CJK UNIFIED IDEOGRAPH
+ {0xEDA7, 0x82BF}, //15457 #CJK UNIFIED IDEOGRAPH
+ {0xEDA8, 0x4ED4}, //15458 #CJK UNIFIED IDEOGRAPH
+ {0xEDA9, 0x523A}, //15459 #CJK UNIFIED IDEOGRAPH
+ {0xEDAA, 0x54A8}, //15460 #CJK UNIFIED IDEOGRAPH
+ {0xEDAB, 0x59C9}, //15461 #CJK UNIFIED IDEOGRAPH
+ {0xEDAC, 0x59FF}, //15462 #CJK UNIFIED IDEOGRAPH
+ {0xEDAD, 0x5B50}, //15463 #CJK UNIFIED IDEOGRAPH
+ {0xEDAE, 0x5B57}, //15464 #CJK UNIFIED IDEOGRAPH
+ {0xEDAF, 0x5B5C}, //15465 #CJK UNIFIED IDEOGRAPH
+ {0xEDB0, 0x6063}, //15466 #CJK UNIFIED IDEOGRAPH
+ {0xEDB1, 0x6148}, //15467 #CJK UNIFIED IDEOGRAPH
+ {0xEDB2, 0x6ECB}, //15468 #CJK UNIFIED IDEOGRAPH
+ {0xEDB3, 0x7099}, //15469 #CJK UNIFIED IDEOGRAPH
+ {0xEDB4, 0x716E}, //15470 #CJK UNIFIED IDEOGRAPH
+ {0xEDB5, 0x7386}, //15471 #CJK UNIFIED IDEOGRAPH
+ {0xEDB6, 0x74F7}, //15472 #CJK UNIFIED IDEOGRAPH
+ {0xEDB7, 0x75B5}, //15473 #CJK UNIFIED IDEOGRAPH
+ {0xEDB8, 0x78C1}, //15474 #CJK UNIFIED IDEOGRAPH
+ {0xEDB9, 0x7D2B}, //15475 #CJK UNIFIED IDEOGRAPH
+ {0xEDBA, 0x8005}, //15476 #CJK UNIFIED IDEOGRAPH
+ {0xEDBB, 0x81EA}, //15477 #CJK UNIFIED IDEOGRAPH
+ {0xEDBC, 0x8328}, //15478 #CJK UNIFIED IDEOGRAPH
+ {0xEDBD, 0x8517}, //15479 #CJK UNIFIED IDEOGRAPH
+ {0xEDBE, 0x85C9}, //15480 #CJK UNIFIED IDEOGRAPH
+ {0xEDBF, 0x8AEE}, //15481 #CJK UNIFIED IDEOGRAPH
+ {0xEDC0, 0x8CC7}, //15482 #CJK UNIFIED IDEOGRAPH
+ {0xEDC1, 0x96CC}, //15483 #CJK UNIFIED IDEOGRAPH
+ {0xEDC2, 0x4F5C}, //15484 #CJK UNIFIED IDEOGRAPH
+ {0xEDC3, 0x52FA}, //15485 #CJK UNIFIED IDEOGRAPH
+ {0xEDC4, 0x56BC}, //15486 #CJK UNIFIED IDEOGRAPH
+ {0xEDC5, 0x65AB}, //15487 #CJK UNIFIED IDEOGRAPH
+ {0xEDC6, 0x6628}, //15488 #CJK UNIFIED IDEOGRAPH
+ {0xEDC7, 0x707C}, //15489 #CJK UNIFIED IDEOGRAPH
+ {0xEDC8, 0x70B8}, //15490 #CJK UNIFIED IDEOGRAPH
+ {0xEDC9, 0x7235}, //15491 #CJK UNIFIED IDEOGRAPH
+ {0xEDCA, 0x7DBD}, //15492 #CJK UNIFIED IDEOGRAPH
+ {0xEDCB, 0x828D}, //15493 #CJK UNIFIED IDEOGRAPH
+ {0xEDCC, 0x914C}, //15494 #CJK UNIFIED IDEOGRAPH
+ {0xEDCD, 0x96C0}, //15495 #CJK UNIFIED IDEOGRAPH
+ {0xEDCE, 0x9D72}, //15496 #CJK UNIFIED IDEOGRAPH
+ {0xEDCF, 0x5B71}, //15497 #CJK UNIFIED IDEOGRAPH
+ {0xEDD0, 0x68E7}, //15498 #CJK UNIFIED IDEOGRAPH
+ {0xEDD1, 0x6B98}, //15499 #CJK UNIFIED IDEOGRAPH
+ {0xEDD2, 0x6F7A}, //15500 #CJK UNIFIED IDEOGRAPH
+ {0xEDD3, 0x76DE}, //15501 #CJK UNIFIED IDEOGRAPH
+ {0xEDD4, 0x5C91}, //15502 #CJK UNIFIED IDEOGRAPH
+ {0xEDD5, 0x66AB}, //15503 #CJK UNIFIED IDEOGRAPH
+ {0xEDD6, 0x6F5B}, //15504 #CJK UNIFIED IDEOGRAPH
+ {0xEDD7, 0x7BB4}, //15505 #CJK UNIFIED IDEOGRAPH
+ {0xEDD8, 0x7C2A}, //15506 #CJK UNIFIED IDEOGRAPH
+ {0xEDD9, 0x8836}, //15507 #CJK UNIFIED IDEOGRAPH
+ {0xEDDA, 0x96DC}, //15508 #CJK UNIFIED IDEOGRAPH
+ {0xEDDB, 0x4E08}, //15509 #CJK UNIFIED IDEOGRAPH
+ {0xEDDC, 0x4ED7}, //15510 #CJK UNIFIED IDEOGRAPH
+ {0xEDDD, 0x5320}, //15511 #CJK UNIFIED IDEOGRAPH
+ {0xEDDE, 0x5834}, //15512 #CJK UNIFIED IDEOGRAPH
+ {0xEDDF, 0x58BB}, //15513 #CJK UNIFIED IDEOGRAPH
+ {0xEDE0, 0x58EF}, //15514 #CJK UNIFIED IDEOGRAPH
+ {0xEDE1, 0x596C}, //15515 #CJK UNIFIED IDEOGRAPH
+ {0xEDE2, 0x5C07}, //15516 #CJK UNIFIED IDEOGRAPH
+ {0xEDE3, 0x5E33}, //15517 #CJK UNIFIED IDEOGRAPH
+ {0xEDE4, 0x5E84}, //15518 #CJK UNIFIED IDEOGRAPH
+ {0xEDE5, 0x5F35}, //15519 #CJK UNIFIED IDEOGRAPH
+ {0xEDE6, 0x638C}, //15520 #CJK UNIFIED IDEOGRAPH
+ {0xEDE7, 0x66B2}, //15521 #CJK UNIFIED IDEOGRAPH
+ {0xEDE8, 0x6756}, //15522 #CJK UNIFIED IDEOGRAPH
+ {0xEDE9, 0x6A1F}, //15523 #CJK UNIFIED IDEOGRAPH
+ {0xEDEA, 0x6AA3}, //15524 #CJK UNIFIED IDEOGRAPH
+ {0xEDEB, 0x6B0C}, //15525 #CJK UNIFIED IDEOGRAPH
+ {0xEDEC, 0x6F3F}, //15526 #CJK UNIFIED IDEOGRAPH
+ {0xEDED, 0x7246}, //15527 #CJK UNIFIED IDEOGRAPH
+ {0xEDEE, 0xF9FA}, //15528 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEDEF, 0x7350}, //15529 #CJK UNIFIED IDEOGRAPH
+ {0xEDF0, 0x748B}, //15530 #CJK UNIFIED IDEOGRAPH
+ {0xEDF1, 0x7AE0}, //15531 #CJK UNIFIED IDEOGRAPH
+ {0xEDF2, 0x7CA7}, //15532 #CJK UNIFIED IDEOGRAPH
+ {0xEDF3, 0x8178}, //15533 #CJK UNIFIED IDEOGRAPH
+ {0xEDF4, 0x81DF}, //15534 #CJK UNIFIED IDEOGRAPH
+ {0xEDF5, 0x81E7}, //15535 #CJK UNIFIED IDEOGRAPH
+ {0xEDF6, 0x838A}, //15536 #CJK UNIFIED IDEOGRAPH
+ {0xEDF7, 0x846C}, //15537 #CJK UNIFIED IDEOGRAPH
+ {0xEDF8, 0x8523}, //15538 #CJK UNIFIED IDEOGRAPH
+ {0xEDF9, 0x8594}, //15539 #CJK UNIFIED IDEOGRAPH
+ {0xEDFA, 0x85CF}, //15540 #CJK UNIFIED IDEOGRAPH
+ {0xEDFB, 0x88DD}, //15541 #CJK UNIFIED IDEOGRAPH
+ {0xEDFC, 0x8D13}, //15542 #CJK UNIFIED IDEOGRAPH
+ {0xEDFD, 0x91AC}, //15543 #CJK UNIFIED IDEOGRAPH
+ {0xEDFE, 0x9577}, //15544 #CJK UNIFIED IDEOGRAPH
+ {0xEEA1, 0x969C}, //15545 #CJK UNIFIED IDEOGRAPH
+ {0xEEA2, 0x518D}, //15546 #CJK UNIFIED IDEOGRAPH
+ {0xEEA3, 0x54C9}, //15547 #CJK UNIFIED IDEOGRAPH
+ {0xEEA4, 0x5728}, //15548 #CJK UNIFIED IDEOGRAPH
+ {0xEEA5, 0x5BB0}, //15549 #CJK UNIFIED IDEOGRAPH
+ {0xEEA6, 0x624D}, //15550 #CJK UNIFIED IDEOGRAPH
+ {0xEEA7, 0x6750}, //15551 #CJK UNIFIED IDEOGRAPH
+ {0xEEA8, 0x683D}, //15552 #CJK UNIFIED IDEOGRAPH
+ {0xEEA9, 0x6893}, //15553 #CJK UNIFIED IDEOGRAPH
+ {0xEEAA, 0x6E3D}, //15554 #CJK UNIFIED IDEOGRAPH
+ {0xEEAB, 0x6ED3}, //15555 #CJK UNIFIED IDEOGRAPH
+ {0xEEAC, 0x707D}, //15556 #CJK UNIFIED IDEOGRAPH
+ {0xEEAD, 0x7E21}, //15557 #CJK UNIFIED IDEOGRAPH
+ {0xEEAE, 0x88C1}, //15558 #CJK UNIFIED IDEOGRAPH
+ {0xEEAF, 0x8CA1}, //15559 #CJK UNIFIED IDEOGRAPH
+ {0xEEB0, 0x8F09}, //15560 #CJK UNIFIED IDEOGRAPH
+ {0xEEB1, 0x9F4B}, //15561 #CJK UNIFIED IDEOGRAPH
+ {0xEEB2, 0x9F4E}, //15562 #CJK UNIFIED IDEOGRAPH
+ {0xEEB3, 0x722D}, //15563 #CJK UNIFIED IDEOGRAPH
+ {0xEEB4, 0x7B8F}, //15564 #CJK UNIFIED IDEOGRAPH
+ {0xEEB5, 0x8ACD}, //15565 #CJK UNIFIED IDEOGRAPH
+ {0xEEB6, 0x931A}, //15566 #CJK UNIFIED IDEOGRAPH
+ {0xEEB7, 0x4F47}, //15567 #CJK UNIFIED IDEOGRAPH
+ {0xEEB8, 0x4F4E}, //15568 #CJK UNIFIED IDEOGRAPH
+ {0xEEB9, 0x5132}, //15569 #CJK UNIFIED IDEOGRAPH
+ {0xEEBA, 0x5480}, //15570 #CJK UNIFIED IDEOGRAPH
+ {0xEEBB, 0x59D0}, //15571 #CJK UNIFIED IDEOGRAPH
+ {0xEEBC, 0x5E95}, //15572 #CJK UNIFIED IDEOGRAPH
+ {0xEEBD, 0x62B5}, //15573 #CJK UNIFIED IDEOGRAPH
+ {0xEEBE, 0x6775}, //15574 #CJK UNIFIED IDEOGRAPH
+ {0xEEBF, 0x696E}, //15575 #CJK UNIFIED IDEOGRAPH
+ {0xEEC0, 0x6A17}, //15576 #CJK UNIFIED IDEOGRAPH
+ {0xEEC1, 0x6CAE}, //15577 #CJK UNIFIED IDEOGRAPH
+ {0xEEC2, 0x6E1A}, //15578 #CJK UNIFIED IDEOGRAPH
+ {0xEEC3, 0x72D9}, //15579 #CJK UNIFIED IDEOGRAPH
+ {0xEEC4, 0x732A}, //15580 #CJK UNIFIED IDEOGRAPH
+ {0xEEC5, 0x75BD}, //15581 #CJK UNIFIED IDEOGRAPH
+ {0xEEC6, 0x7BB8}, //15582 #CJK UNIFIED IDEOGRAPH
+ {0xEEC7, 0x7D35}, //15583 #CJK UNIFIED IDEOGRAPH
+ {0xEEC8, 0x82E7}, //15584 #CJK UNIFIED IDEOGRAPH
+ {0xEEC9, 0x83F9}, //15585 #CJK UNIFIED IDEOGRAPH
+ {0xEECA, 0x8457}, //15586 #CJK UNIFIED IDEOGRAPH
+ {0xEECB, 0x85F7}, //15587 #CJK UNIFIED IDEOGRAPH
+ {0xEECC, 0x8A5B}, //15588 #CJK UNIFIED IDEOGRAPH
+ {0xEECD, 0x8CAF}, //15589 #CJK UNIFIED IDEOGRAPH
+ {0xEECE, 0x8E87}, //15590 #CJK UNIFIED IDEOGRAPH
+ {0xEECF, 0x9019}, //15591 #CJK UNIFIED IDEOGRAPH
+ {0xEED0, 0x90B8}, //15592 #CJK UNIFIED IDEOGRAPH
+ {0xEED1, 0x96CE}, //15593 #CJK UNIFIED IDEOGRAPH
+ {0xEED2, 0x9F5F}, //15594 #CJK UNIFIED IDEOGRAPH
+ {0xEED3, 0x52E3}, //15595 #CJK UNIFIED IDEOGRAPH
+ {0xEED4, 0x540A}, //15596 #CJK UNIFIED IDEOGRAPH
+ {0xEED5, 0x5AE1}, //15597 #CJK UNIFIED IDEOGRAPH
+ {0xEED6, 0x5BC2}, //15598 #CJK UNIFIED IDEOGRAPH
+ {0xEED7, 0x6458}, //15599 #CJK UNIFIED IDEOGRAPH
+ {0xEED8, 0x6575}, //15600 #CJK UNIFIED IDEOGRAPH
+ {0xEED9, 0x6EF4}, //15601 #CJK UNIFIED IDEOGRAPH
+ {0xEEDA, 0x72C4}, //15602 #CJK UNIFIED IDEOGRAPH
+ {0xEEDB, 0xF9FB}, //15603 #CJK COMPATIBILITY IDEOGRAPH
+ {0xEEDC, 0x7684}, //15604 #CJK UNIFIED IDEOGRAPH
+ {0xEEDD, 0x7A4D}, //15605 #CJK UNIFIED IDEOGRAPH
+ {0xEEDE, 0x7B1B}, //15606 #CJK UNIFIED IDEOGRAPH
+ {0xEEDF, 0x7C4D}, //15607 #CJK UNIFIED IDEOGRAPH
+ {0xEEE0, 0x7E3E}, //15608 #CJK UNIFIED IDEOGRAPH
+ {0xEEE1, 0x7FDF}, //15609 #CJK UNIFIED IDEOGRAPH
+ {0xEEE2, 0x837B}, //15610 #CJK UNIFIED IDEOGRAPH
+ {0xEEE3, 0x8B2B}, //15611 #CJK UNIFIED IDEOGRAPH
+ {0xEEE4, 0x8CCA}, //15612 #CJK UNIFIED IDEOGRAPH
+ {0xEEE5, 0x8D64}, //15613 #CJK UNIFIED IDEOGRAPH
+ {0xEEE6, 0x8DE1}, //15614 #CJK UNIFIED IDEOGRAPH
+ {0xEEE7, 0x8E5F}, //15615 #CJK UNIFIED IDEOGRAPH
+ {0xEEE8, 0x8FEA}, //15616 #CJK UNIFIED IDEOGRAPH
+ {0xEEE9, 0x8FF9}, //15617 #CJK UNIFIED IDEOGRAPH
+ {0xEEEA, 0x9069}, //15618 #CJK UNIFIED IDEOGRAPH
+ {0xEEEB, 0x93D1}, //15619 #CJK UNIFIED IDEOGRAPH
+ {0xEEEC, 0x4F43}, //15620 #CJK UNIFIED IDEOGRAPH
+ {0xEEED, 0x4F7A}, //15621 #CJK UNIFIED IDEOGRAPH
+ {0xEEEE, 0x50B3}, //15622 #CJK UNIFIED IDEOGRAPH
+ {0xEEEF, 0x5168}, //15623 #CJK UNIFIED IDEOGRAPH
+ {0xEEF0, 0x5178}, //15624 #CJK UNIFIED IDEOGRAPH
+ {0xEEF1, 0x524D}, //15625 #CJK UNIFIED IDEOGRAPH
+ {0xEEF2, 0x526A}, //15626 #CJK UNIFIED IDEOGRAPH
+ {0xEEF3, 0x5861}, //15627 #CJK UNIFIED IDEOGRAPH
+ {0xEEF4, 0x587C}, //15628 #CJK UNIFIED IDEOGRAPH
+ {0xEEF5, 0x5960}, //15629 #CJK UNIFIED IDEOGRAPH
+ {0xEEF6, 0x5C08}, //15630 #CJK UNIFIED IDEOGRAPH
+ {0xEEF7, 0x5C55}, //15631 #CJK UNIFIED IDEOGRAPH
+ {0xEEF8, 0x5EDB}, //15632 #CJK UNIFIED IDEOGRAPH
+ {0xEEF9, 0x609B}, //15633 #CJK UNIFIED IDEOGRAPH
+ {0xEEFA, 0x6230}, //15634 #CJK UNIFIED IDEOGRAPH
+ {0xEEFB, 0x6813}, //15635 #CJK UNIFIED IDEOGRAPH
+ {0xEEFC, 0x6BBF}, //15636 #CJK UNIFIED IDEOGRAPH
+ {0xEEFD, 0x6C08}, //15637 #CJK UNIFIED IDEOGRAPH
+ {0xEEFE, 0x6FB1}, //15638 #CJK UNIFIED IDEOGRAPH
+ {0xEFA1, 0x714E}, //15639 #CJK UNIFIED IDEOGRAPH
+ {0xEFA2, 0x7420}, //15640 #CJK UNIFIED IDEOGRAPH
+ {0xEFA3, 0x7530}, //15641 #CJK UNIFIED IDEOGRAPH
+ {0xEFA4, 0x7538}, //15642 #CJK UNIFIED IDEOGRAPH
+ {0xEFA5, 0x7551}, //15643 #CJK UNIFIED IDEOGRAPH
+ {0xEFA6, 0x7672}, //15644 #CJK UNIFIED IDEOGRAPH
+ {0xEFA7, 0x7B4C}, //15645 #CJK UNIFIED IDEOGRAPH
+ {0xEFA8, 0x7B8B}, //15646 #CJK UNIFIED IDEOGRAPH
+ {0xEFA9, 0x7BAD}, //15647 #CJK UNIFIED IDEOGRAPH
+ {0xEFAA, 0x7BC6}, //15648 #CJK UNIFIED IDEOGRAPH
+ {0xEFAB, 0x7E8F}, //15649 #CJK UNIFIED IDEOGRAPH
+ {0xEFAC, 0x8A6E}, //15650 #CJK UNIFIED IDEOGRAPH
+ {0xEFAD, 0x8F3E}, //15651 #CJK UNIFIED IDEOGRAPH
+ {0xEFAE, 0x8F49}, //15652 #CJK UNIFIED IDEOGRAPH
+ {0xEFAF, 0x923F}, //15653 #CJK UNIFIED IDEOGRAPH
+ {0xEFB0, 0x9293}, //15654 #CJK UNIFIED IDEOGRAPH
+ {0xEFB1, 0x9322}, //15655 #CJK UNIFIED IDEOGRAPH
+ {0xEFB2, 0x942B}, //15656 #CJK UNIFIED IDEOGRAPH
+ {0xEFB3, 0x96FB}, //15657 #CJK UNIFIED IDEOGRAPH
+ {0xEFB4, 0x985A}, //15658 #CJK UNIFIED IDEOGRAPH
+ {0xEFB5, 0x986B}, //15659 #CJK UNIFIED IDEOGRAPH
+ {0xEFB6, 0x991E}, //15660 #CJK UNIFIED IDEOGRAPH
+ {0xEFB7, 0x5207}, //15661 #CJK UNIFIED IDEOGRAPH
+ {0xEFB8, 0x622A}, //15662 #CJK UNIFIED IDEOGRAPH
+ {0xEFB9, 0x6298}, //15663 #CJK UNIFIED IDEOGRAPH
+ {0xEFBA, 0x6D59}, //15664 #CJK UNIFIED IDEOGRAPH
+ {0xEFBB, 0x7664}, //15665 #CJK UNIFIED IDEOGRAPH
+ {0xEFBC, 0x7ACA}, //15666 #CJK UNIFIED IDEOGRAPH
+ {0xEFBD, 0x7BC0}, //15667 #CJK UNIFIED IDEOGRAPH
+ {0xEFBE, 0x7D76}, //15668 #CJK UNIFIED IDEOGRAPH
+ {0xEFBF, 0x5360}, //15669 #CJK UNIFIED IDEOGRAPH
+ {0xEFC0, 0x5CBE}, //15670 #CJK UNIFIED IDEOGRAPH
+ {0xEFC1, 0x5E97}, //15671 #CJK UNIFIED IDEOGRAPH
+ {0xEFC2, 0x6F38}, //15672 #CJK UNIFIED IDEOGRAPH
+ {0xEFC3, 0x70B9}, //15673 #CJK UNIFIED IDEOGRAPH
+ {0xEFC4, 0x7C98}, //15674 #CJK UNIFIED IDEOGRAPH
+ {0xEFC5, 0x9711}, //15675 #CJK UNIFIED IDEOGRAPH
+ {0xEFC6, 0x9B8E}, //15676 #CJK UNIFIED IDEOGRAPH
+ {0xEFC7, 0x9EDE}, //15677 #CJK UNIFIED IDEOGRAPH
+ {0xEFC8, 0x63A5}, //15678 #CJK UNIFIED IDEOGRAPH
+ {0xEFC9, 0x647A}, //15679 #CJK UNIFIED IDEOGRAPH
+ {0xEFCA, 0x8776}, //15680 #CJK UNIFIED IDEOGRAPH
+ {0xEFCB, 0x4E01}, //15681 #CJK UNIFIED IDEOGRAPH
+ {0xEFCC, 0x4E95}, //15682 #CJK UNIFIED IDEOGRAPH
+ {0xEFCD, 0x4EAD}, //15683 #CJK UNIFIED IDEOGRAPH
+ {0xEFCE, 0x505C}, //15684 #CJK UNIFIED IDEOGRAPH
+ {0xEFCF, 0x5075}, //15685 #CJK UNIFIED IDEOGRAPH
+ {0xEFD0, 0x5448}, //15686 #CJK UNIFIED IDEOGRAPH
+ {0xEFD1, 0x59C3}, //15687 #CJK UNIFIED IDEOGRAPH
+ {0xEFD2, 0x5B9A}, //15688 #CJK UNIFIED IDEOGRAPH
+ {0xEFD3, 0x5E40}, //15689 #CJK UNIFIED IDEOGRAPH
+ {0xEFD4, 0x5EAD}, //15690 #CJK UNIFIED IDEOGRAPH
+ {0xEFD5, 0x5EF7}, //15691 #CJK UNIFIED IDEOGRAPH
+ {0xEFD6, 0x5F81}, //15692 #CJK UNIFIED IDEOGRAPH
+ {0xEFD7, 0x60C5}, //15693 #CJK UNIFIED IDEOGRAPH
+ {0xEFD8, 0x633A}, //15694 #CJK UNIFIED IDEOGRAPH
+ {0xEFD9, 0x653F}, //15695 #CJK UNIFIED IDEOGRAPH
+ {0xEFDA, 0x6574}, //15696 #CJK UNIFIED IDEOGRAPH
+ {0xEFDB, 0x65CC}, //15697 #CJK UNIFIED IDEOGRAPH
+ {0xEFDC, 0x6676}, //15698 #CJK UNIFIED IDEOGRAPH
+ {0xEFDD, 0x6678}, //15699 #CJK UNIFIED IDEOGRAPH
+ {0xEFDE, 0x67FE}, //15700 #CJK UNIFIED IDEOGRAPH
+ {0xEFDF, 0x6968}, //15701 #CJK UNIFIED IDEOGRAPH
+ {0xEFE0, 0x6A89}, //15702 #CJK UNIFIED IDEOGRAPH
+ {0xEFE1, 0x6B63}, //15703 #CJK UNIFIED IDEOGRAPH
+ {0xEFE2, 0x6C40}, //15704 #CJK UNIFIED IDEOGRAPH
+ {0xEFE3, 0x6DC0}, //15705 #CJK UNIFIED IDEOGRAPH
+ {0xEFE4, 0x6DE8}, //15706 #CJK UNIFIED IDEOGRAPH
+ {0xEFE5, 0x6E1F}, //15707 #CJK UNIFIED IDEOGRAPH
+ {0xEFE6, 0x6E5E}, //15708 #CJK UNIFIED IDEOGRAPH
+ {0xEFE7, 0x701E}, //15709 #CJK UNIFIED IDEOGRAPH
+ {0xEFE8, 0x70A1}, //15710 #CJK UNIFIED IDEOGRAPH
+ {0xEFE9, 0x738E}, //15711 #CJK UNIFIED IDEOGRAPH
+ {0xEFEA, 0x73FD}, //15712 #CJK UNIFIED IDEOGRAPH
+ {0xEFEB, 0x753A}, //15713 #CJK UNIFIED IDEOGRAPH
+ {0xEFEC, 0x775B}, //15714 #CJK UNIFIED IDEOGRAPH
+ {0xEFED, 0x7887}, //15715 #CJK UNIFIED IDEOGRAPH
+ {0xEFEE, 0x798E}, //15716 #CJK UNIFIED IDEOGRAPH
+ {0xEFEF, 0x7A0B}, //15717 #CJK UNIFIED IDEOGRAPH
+ {0xEFF0, 0x7A7D}, //15718 #CJK UNIFIED IDEOGRAPH
+ {0xEFF1, 0x7CBE}, //15719 #CJK UNIFIED IDEOGRAPH
+ {0xEFF2, 0x7D8E}, //15720 #CJK UNIFIED IDEOGRAPH
+ {0xEFF3, 0x8247}, //15721 #CJK UNIFIED IDEOGRAPH
+ {0xEFF4, 0x8A02}, //15722 #CJK UNIFIED IDEOGRAPH
+ {0xEFF5, 0x8AEA}, //15723 #CJK UNIFIED IDEOGRAPH
+ {0xEFF6, 0x8C9E}, //15724 #CJK UNIFIED IDEOGRAPH
+ {0xEFF7, 0x912D}, //15725 #CJK UNIFIED IDEOGRAPH
+ {0xEFF8, 0x914A}, //15726 #CJK UNIFIED IDEOGRAPH
+ {0xEFF9, 0x91D8}, //15727 #CJK UNIFIED IDEOGRAPH
+ {0xEFFA, 0x9266}, //15728 #CJK UNIFIED IDEOGRAPH
+ {0xEFFB, 0x92CC}, //15729 #CJK UNIFIED IDEOGRAPH
+ {0xEFFC, 0x9320}, //15730 #CJK UNIFIED IDEOGRAPH
+ {0xEFFD, 0x9706}, //15731 #CJK UNIFIED IDEOGRAPH
+ {0xEFFE, 0x9756}, //15732 #CJK UNIFIED IDEOGRAPH
+ {0xF0A1, 0x975C}, //15733 #CJK UNIFIED IDEOGRAPH
+ {0xF0A2, 0x9802}, //15734 #CJK UNIFIED IDEOGRAPH
+ {0xF0A3, 0x9F0E}, //15735 #CJK UNIFIED IDEOGRAPH
+ {0xF0A4, 0x5236}, //15736 #CJK UNIFIED IDEOGRAPH
+ {0xF0A5, 0x5291}, //15737 #CJK UNIFIED IDEOGRAPH
+ {0xF0A6, 0x557C}, //15738 #CJK UNIFIED IDEOGRAPH
+ {0xF0A7, 0x5824}, //15739 #CJK UNIFIED IDEOGRAPH
+ {0xF0A8, 0x5E1D}, //15740 #CJK UNIFIED IDEOGRAPH
+ {0xF0A9, 0x5F1F}, //15741 #CJK UNIFIED IDEOGRAPH
+ {0xF0AA, 0x608C}, //15742 #CJK UNIFIED IDEOGRAPH
+ {0xF0AB, 0x63D0}, //15743 #CJK UNIFIED IDEOGRAPH
+ {0xF0AC, 0x68AF}, //15744 #CJK UNIFIED IDEOGRAPH
+ {0xF0AD, 0x6FDF}, //15745 #CJK UNIFIED IDEOGRAPH
+ {0xF0AE, 0x796D}, //15746 #CJK UNIFIED IDEOGRAPH
+ {0xF0AF, 0x7B2C}, //15747 #CJK UNIFIED IDEOGRAPH
+ {0xF0B0, 0x81CD}, //15748 #CJK UNIFIED IDEOGRAPH
+ {0xF0B1, 0x85BA}, //15749 #CJK UNIFIED IDEOGRAPH
+ {0xF0B2, 0x88FD}, //15750 #CJK UNIFIED IDEOGRAPH
+ {0xF0B3, 0x8AF8}, //15751 #CJK UNIFIED IDEOGRAPH
+ {0xF0B4, 0x8E44}, //15752 #CJK UNIFIED IDEOGRAPH
+ {0xF0B5, 0x918D}, //15753 #CJK UNIFIED IDEOGRAPH
+ {0xF0B6, 0x9664}, //15754 #CJK UNIFIED IDEOGRAPH
+ {0xF0B7, 0x969B}, //15755 #CJK UNIFIED IDEOGRAPH
+ {0xF0B8, 0x973D}, //15756 #CJK UNIFIED IDEOGRAPH
+ {0xF0B9, 0x984C}, //15757 #CJK UNIFIED IDEOGRAPH
+ {0xF0BA, 0x9F4A}, //15758 #CJK UNIFIED IDEOGRAPH
+ {0xF0BB, 0x4FCE}, //15759 #CJK UNIFIED IDEOGRAPH
+ {0xF0BC, 0x5146}, //15760 #CJK UNIFIED IDEOGRAPH
+ {0xF0BD, 0x51CB}, //15761 #CJK UNIFIED IDEOGRAPH
+ {0xF0BE, 0x52A9}, //15762 #CJK UNIFIED IDEOGRAPH
+ {0xF0BF, 0x5632}, //15763 #CJK UNIFIED IDEOGRAPH
+ {0xF0C0, 0x5F14}, //15764 #CJK UNIFIED IDEOGRAPH
+ {0xF0C1, 0x5F6B}, //15765 #CJK UNIFIED IDEOGRAPH
+ {0xF0C2, 0x63AA}, //15766 #CJK UNIFIED IDEOGRAPH
+ {0xF0C3, 0x64CD}, //15767 #CJK UNIFIED IDEOGRAPH
+ {0xF0C4, 0x65E9}, //15768 #CJK UNIFIED IDEOGRAPH
+ {0xF0C5, 0x6641}, //15769 #CJK UNIFIED IDEOGRAPH
+ {0xF0C6, 0x66FA}, //15770 #CJK UNIFIED IDEOGRAPH
+ {0xF0C7, 0x66F9}, //15771 #CJK UNIFIED IDEOGRAPH
+ {0xF0C8, 0x671D}, //15772 #CJK UNIFIED IDEOGRAPH
+ {0xF0C9, 0x689D}, //15773 #CJK UNIFIED IDEOGRAPH
+ {0xF0CA, 0x68D7}, //15774 #CJK UNIFIED IDEOGRAPH
+ {0xF0CB, 0x69FD}, //15775 #CJK UNIFIED IDEOGRAPH
+ {0xF0CC, 0x6F15}, //15776 #CJK UNIFIED IDEOGRAPH
+ {0xF0CD, 0x6F6E}, //15777 #CJK UNIFIED IDEOGRAPH
+ {0xF0CE, 0x7167}, //15778 #CJK UNIFIED IDEOGRAPH
+ {0xF0CF, 0x71E5}, //15779 #CJK UNIFIED IDEOGRAPH
+ {0xF0D0, 0x722A}, //15780 #CJK UNIFIED IDEOGRAPH
+ {0xF0D1, 0x74AA}, //15781 #CJK UNIFIED IDEOGRAPH
+ {0xF0D2, 0x773A}, //15782 #CJK UNIFIED IDEOGRAPH
+ {0xF0D3, 0x7956}, //15783 #CJK UNIFIED IDEOGRAPH
+ {0xF0D4, 0x795A}, //15784 #CJK UNIFIED IDEOGRAPH
+ {0xF0D5, 0x79DF}, //15785 #CJK UNIFIED IDEOGRAPH
+ {0xF0D6, 0x7A20}, //15786 #CJK UNIFIED IDEOGRAPH
+ {0xF0D7, 0x7A95}, //15787 #CJK UNIFIED IDEOGRAPH
+ {0xF0D8, 0x7C97}, //15788 #CJK UNIFIED IDEOGRAPH
+ {0xF0D9, 0x7CDF}, //15789 #CJK UNIFIED IDEOGRAPH
+ {0xF0DA, 0x7D44}, //15790 #CJK UNIFIED IDEOGRAPH
+ {0xF0DB, 0x7E70}, //15791 #CJK UNIFIED IDEOGRAPH
+ {0xF0DC, 0x8087}, //15792 #CJK UNIFIED IDEOGRAPH
+ {0xF0DD, 0x85FB}, //15793 #CJK UNIFIED IDEOGRAPH
+ {0xF0DE, 0x86A4}, //15794 #CJK UNIFIED IDEOGRAPH
+ {0xF0DF, 0x8A54}, //15795 #CJK UNIFIED IDEOGRAPH
+ {0xF0E0, 0x8ABF}, //15796 #CJK UNIFIED IDEOGRAPH
+ {0xF0E1, 0x8D99}, //15797 #CJK UNIFIED IDEOGRAPH
+ {0xF0E2, 0x8E81}, //15798 #CJK UNIFIED IDEOGRAPH
+ {0xF0E3, 0x9020}, //15799 #CJK UNIFIED IDEOGRAPH
+ {0xF0E4, 0x906D}, //15800 #CJK UNIFIED IDEOGRAPH
+ {0xF0E5, 0x91E3}, //15801 #CJK UNIFIED IDEOGRAPH
+ {0xF0E6, 0x963B}, //15802 #CJK UNIFIED IDEOGRAPH
+ {0xF0E7, 0x96D5}, //15803 #CJK UNIFIED IDEOGRAPH
+ {0xF0E8, 0x9CE5}, //15804 #CJK UNIFIED IDEOGRAPH
+ {0xF0E9, 0x65CF}, //15805 #CJK UNIFIED IDEOGRAPH
+ {0xF0EA, 0x7C07}, //15806 #CJK UNIFIED IDEOGRAPH
+ {0xF0EB, 0x8DB3}, //15807 #CJK UNIFIED IDEOGRAPH
+ {0xF0EC, 0x93C3}, //15808 #CJK UNIFIED IDEOGRAPH
+ {0xF0ED, 0x5B58}, //15809 #CJK UNIFIED IDEOGRAPH
+ {0xF0EE, 0x5C0A}, //15810 #CJK UNIFIED IDEOGRAPH
+ {0xF0EF, 0x5352}, //15811 #CJK UNIFIED IDEOGRAPH
+ {0xF0F0, 0x62D9}, //15812 #CJK UNIFIED IDEOGRAPH
+ {0xF0F1, 0x731D}, //15813 #CJK UNIFIED IDEOGRAPH
+ {0xF0F2, 0x5027}, //15814 #CJK UNIFIED IDEOGRAPH
+ {0xF0F3, 0x5B97}, //15815 #CJK UNIFIED IDEOGRAPH
+ {0xF0F4, 0x5F9E}, //15816 #CJK UNIFIED IDEOGRAPH
+ {0xF0F5, 0x60B0}, //15817 #CJK UNIFIED IDEOGRAPH
+ {0xF0F6, 0x616B}, //15818 #CJK UNIFIED IDEOGRAPH
+ {0xF0F7, 0x68D5}, //15819 #CJK UNIFIED IDEOGRAPH
+ {0xF0F8, 0x6DD9}, //15820 #CJK UNIFIED IDEOGRAPH
+ {0xF0F9, 0x742E}, //15821 #CJK UNIFIED IDEOGRAPH
+ {0xF0FA, 0x7A2E}, //15822 #CJK UNIFIED IDEOGRAPH
+ {0xF0FB, 0x7D42}, //15823 #CJK UNIFIED IDEOGRAPH
+ {0xF0FC, 0x7D9C}, //15824 #CJK UNIFIED IDEOGRAPH
+ {0xF0FD, 0x7E31}, //15825 #CJK UNIFIED IDEOGRAPH
+ {0xF0FE, 0x816B}, //15826 #CJK UNIFIED IDEOGRAPH
+ {0xF1A1, 0x8E2A}, //15827 #CJK UNIFIED IDEOGRAPH
+ {0xF1A2, 0x8E35}, //15828 #CJK UNIFIED IDEOGRAPH
+ {0xF1A3, 0x937E}, //15829 #CJK UNIFIED IDEOGRAPH
+ {0xF1A4, 0x9418}, //15830 #CJK UNIFIED IDEOGRAPH
+ {0xF1A5, 0x4F50}, //15831 #CJK UNIFIED IDEOGRAPH
+ {0xF1A6, 0x5750}, //15832 #CJK UNIFIED IDEOGRAPH
+ {0xF1A7, 0x5DE6}, //15833 #CJK UNIFIED IDEOGRAPH
+ {0xF1A8, 0x5EA7}, //15834 #CJK UNIFIED IDEOGRAPH
+ {0xF1A9, 0x632B}, //15835 #CJK UNIFIED IDEOGRAPH
+ {0xF1AA, 0x7F6A}, //15836 #CJK UNIFIED IDEOGRAPH
+ {0xF1AB, 0x4E3B}, //15837 #CJK UNIFIED IDEOGRAPH
+ {0xF1AC, 0x4F4F}, //15838 #CJK UNIFIED IDEOGRAPH
+ {0xF1AD, 0x4F8F}, //15839 #CJK UNIFIED IDEOGRAPH
+ {0xF1AE, 0x505A}, //15840 #CJK UNIFIED IDEOGRAPH
+ {0xF1AF, 0x59DD}, //15841 #CJK UNIFIED IDEOGRAPH
+ {0xF1B0, 0x80C4}, //15842 #CJK UNIFIED IDEOGRAPH
+ {0xF1B1, 0x546A}, //15843 #CJK UNIFIED IDEOGRAPH
+ {0xF1B2, 0x5468}, //15844 #CJK UNIFIED IDEOGRAPH
+ {0xF1B3, 0x55FE}, //15845 #CJK UNIFIED IDEOGRAPH
+ {0xF1B4, 0x594F}, //15846 #CJK UNIFIED IDEOGRAPH
+ {0xF1B5, 0x5B99}, //15847 #CJK UNIFIED IDEOGRAPH
+ {0xF1B6, 0x5DDE}, //15848 #CJK UNIFIED IDEOGRAPH
+ {0xF1B7, 0x5EDA}, //15849 #CJK UNIFIED IDEOGRAPH
+ {0xF1B8, 0x665D}, //15850 #CJK UNIFIED IDEOGRAPH
+ {0xF1B9, 0x6731}, //15851 #CJK UNIFIED IDEOGRAPH
+ {0xF1BA, 0x67F1}, //15852 #CJK UNIFIED IDEOGRAPH
+ {0xF1BB, 0x682A}, //15853 #CJK UNIFIED IDEOGRAPH
+ {0xF1BC, 0x6CE8}, //15854 #CJK UNIFIED IDEOGRAPH
+ {0xF1BD, 0x6D32}, //15855 #CJK UNIFIED IDEOGRAPH
+ {0xF1BE, 0x6E4A}, //15856 #CJK UNIFIED IDEOGRAPH
+ {0xF1BF, 0x6F8D}, //15857 #CJK UNIFIED IDEOGRAPH
+ {0xF1C0, 0x70B7}, //15858 #CJK UNIFIED IDEOGRAPH
+ {0xF1C1, 0x73E0}, //15859 #CJK UNIFIED IDEOGRAPH
+ {0xF1C2, 0x7587}, //15860 #CJK UNIFIED IDEOGRAPH
+ {0xF1C3, 0x7C4C}, //15861 #CJK UNIFIED IDEOGRAPH
+ {0xF1C4, 0x7D02}, //15862 #CJK UNIFIED IDEOGRAPH
+ {0xF1C5, 0x7D2C}, //15863 #CJK UNIFIED IDEOGRAPH
+ {0xF1C6, 0x7DA2}, //15864 #CJK UNIFIED IDEOGRAPH
+ {0xF1C7, 0x821F}, //15865 #CJK UNIFIED IDEOGRAPH
+ {0xF1C8, 0x86DB}, //15866 #CJK UNIFIED IDEOGRAPH
+ {0xF1C9, 0x8A3B}, //15867 #CJK UNIFIED IDEOGRAPH
+ {0xF1CA, 0x8A85}, //15868 #CJK UNIFIED IDEOGRAPH
+ {0xF1CB, 0x8D70}, //15869 #CJK UNIFIED IDEOGRAPH
+ {0xF1CC, 0x8E8A}, //15870 #CJK UNIFIED IDEOGRAPH
+ {0xF1CD, 0x8F33}, //15871 #CJK UNIFIED IDEOGRAPH
+ {0xF1CE, 0x9031}, //15872 #CJK UNIFIED IDEOGRAPH
+ {0xF1CF, 0x914E}, //15873 #CJK UNIFIED IDEOGRAPH
+ {0xF1D0, 0x9152}, //15874 #CJK UNIFIED IDEOGRAPH
+ {0xF1D1, 0x9444}, //15875 #CJK UNIFIED IDEOGRAPH
+ {0xF1D2, 0x99D0}, //15876 #CJK UNIFIED IDEOGRAPH
+ {0xF1D3, 0x7AF9}, //15877 #CJK UNIFIED IDEOGRAPH
+ {0xF1D4, 0x7CA5}, //15878 #CJK UNIFIED IDEOGRAPH
+ {0xF1D5, 0x4FCA}, //15879 #CJK UNIFIED IDEOGRAPH
+ {0xF1D6, 0x5101}, //15880 #CJK UNIFIED IDEOGRAPH
+ {0xF1D7, 0x51C6}, //15881 #CJK UNIFIED IDEOGRAPH
+ {0xF1D8, 0x57C8}, //15882 #CJK UNIFIED IDEOGRAPH
+ {0xF1D9, 0x5BEF}, //15883 #CJK UNIFIED IDEOGRAPH
+ {0xF1DA, 0x5CFB}, //15884 #CJK UNIFIED IDEOGRAPH
+ {0xF1DB, 0x6659}, //15885 #CJK UNIFIED IDEOGRAPH
+ {0xF1DC, 0x6A3D}, //15886 #CJK UNIFIED IDEOGRAPH
+ {0xF1DD, 0x6D5A}, //15887 #CJK UNIFIED IDEOGRAPH
+ {0xF1DE, 0x6E96}, //15888 #CJK UNIFIED IDEOGRAPH
+ {0xF1DF, 0x6FEC}, //15889 #CJK UNIFIED IDEOGRAPH
+ {0xF1E0, 0x710C}, //15890 #CJK UNIFIED IDEOGRAPH
+ {0xF1E1, 0x756F}, //15891 #CJK UNIFIED IDEOGRAPH
+ {0xF1E2, 0x7AE3}, //15892 #CJK UNIFIED IDEOGRAPH
+ {0xF1E3, 0x8822}, //15893 #CJK UNIFIED IDEOGRAPH
+ {0xF1E4, 0x9021}, //15894 #CJK UNIFIED IDEOGRAPH
+ {0xF1E5, 0x9075}, //15895 #CJK UNIFIED IDEOGRAPH
+ {0xF1E6, 0x96CB}, //15896 #CJK UNIFIED IDEOGRAPH
+ {0xF1E7, 0x99FF}, //15897 #CJK UNIFIED IDEOGRAPH
+ {0xF1E8, 0x8301}, //15898 #CJK UNIFIED IDEOGRAPH
+ {0xF1E9, 0x4E2D}, //15899 #CJK UNIFIED IDEOGRAPH
+ {0xF1EA, 0x4EF2}, //15900 #CJK UNIFIED IDEOGRAPH
+ {0xF1EB, 0x8846}, //15901 #CJK UNIFIED IDEOGRAPH
+ {0xF1EC, 0x91CD}, //15902 #CJK UNIFIED IDEOGRAPH
+ {0xF1ED, 0x537D}, //15903 #CJK UNIFIED IDEOGRAPH
+ {0xF1EE, 0x6ADB}, //15904 #CJK UNIFIED IDEOGRAPH
+ {0xF1EF, 0x696B}, //15905 #CJK UNIFIED IDEOGRAPH
+ {0xF1F0, 0x6C41}, //15906 #CJK UNIFIED IDEOGRAPH
+ {0xF1F1, 0x847A}, //15907 #CJK UNIFIED IDEOGRAPH
+ {0xF1F2, 0x589E}, //15908 #CJK UNIFIED IDEOGRAPH
+ {0xF1F3, 0x618E}, //15909 #CJK UNIFIED IDEOGRAPH
+ {0xF1F4, 0x66FE}, //15910 #CJK UNIFIED IDEOGRAPH
+ {0xF1F5, 0x62EF}, //15911 #CJK UNIFIED IDEOGRAPH
+ {0xF1F6, 0x70DD}, //15912 #CJK UNIFIED IDEOGRAPH
+ {0xF1F7, 0x7511}, //15913 #CJK UNIFIED IDEOGRAPH
+ {0xF1F8, 0x75C7}, //15914 #CJK UNIFIED IDEOGRAPH
+ {0xF1F9, 0x7E52}, //15915 #CJK UNIFIED IDEOGRAPH
+ {0xF1FA, 0x84B8}, //15916 #CJK UNIFIED IDEOGRAPH
+ {0xF1FB, 0x8B49}, //15917 #CJK UNIFIED IDEOGRAPH
+ {0xF1FC, 0x8D08}, //15918 #CJK UNIFIED IDEOGRAPH
+ {0xF1FD, 0x4E4B}, //15919 #CJK UNIFIED IDEOGRAPH
+ {0xF1FE, 0x53EA}, //15920 #CJK UNIFIED IDEOGRAPH
+ {0xF2A1, 0x54AB}, //15921 #CJK UNIFIED IDEOGRAPH
+ {0xF2A2, 0x5730}, //15922 #CJK UNIFIED IDEOGRAPH
+ {0xF2A3, 0x5740}, //15923 #CJK UNIFIED IDEOGRAPH
+ {0xF2A4, 0x5FD7}, //15924 #CJK UNIFIED IDEOGRAPH
+ {0xF2A5, 0x6301}, //15925 #CJK UNIFIED IDEOGRAPH
+ {0xF2A6, 0x6307}, //15926 #CJK UNIFIED IDEOGRAPH
+ {0xF2A7, 0x646F}, //15927 #CJK UNIFIED IDEOGRAPH
+ {0xF2A8, 0x652F}, //15928 #CJK UNIFIED IDEOGRAPH
+ {0xF2A9, 0x65E8}, //15929 #CJK UNIFIED IDEOGRAPH
+ {0xF2AA, 0x667A}, //15930 #CJK UNIFIED IDEOGRAPH
+ {0xF2AB, 0x679D}, //15931 #CJK UNIFIED IDEOGRAPH
+ {0xF2AC, 0x67B3}, //15932 #CJK UNIFIED IDEOGRAPH
+ {0xF2AD, 0x6B62}, //15933 #CJK UNIFIED IDEOGRAPH
+ {0xF2AE, 0x6C60}, //15934 #CJK UNIFIED IDEOGRAPH
+ {0xF2AF, 0x6C9A}, //15935 #CJK UNIFIED IDEOGRAPH
+ {0xF2B0, 0x6F2C}, //15936 #CJK UNIFIED IDEOGRAPH
+ {0xF2B1, 0x77E5}, //15937 #CJK UNIFIED IDEOGRAPH
+ {0xF2B2, 0x7825}, //15938 #CJK UNIFIED IDEOGRAPH
+ {0xF2B3, 0x7949}, //15939 #CJK UNIFIED IDEOGRAPH
+ {0xF2B4, 0x7957}, //15940 #CJK UNIFIED IDEOGRAPH
+ {0xF2B5, 0x7D19}, //15941 #CJK UNIFIED IDEOGRAPH
+ {0xF2B6, 0x80A2}, //15942 #CJK UNIFIED IDEOGRAPH
+ {0xF2B7, 0x8102}, //15943 #CJK UNIFIED IDEOGRAPH
+ {0xF2B8, 0x81F3}, //15944 #CJK UNIFIED IDEOGRAPH
+ {0xF2B9, 0x829D}, //15945 #CJK UNIFIED IDEOGRAPH
+ {0xF2BA, 0x82B7}, //15946 #CJK UNIFIED IDEOGRAPH
+ {0xF2BB, 0x8718}, //15947 #CJK UNIFIED IDEOGRAPH
+ {0xF2BC, 0x8A8C}, //15948 #CJK UNIFIED IDEOGRAPH
+ {0xF2BD, 0xF9FC}, //15949 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF2BE, 0x8D04}, //15950 #CJK UNIFIED IDEOGRAPH
+ {0xF2BF, 0x8DBE}, //15951 #CJK UNIFIED IDEOGRAPH
+ {0xF2C0, 0x9072}, //15952 #CJK UNIFIED IDEOGRAPH
+ {0xF2C1, 0x76F4}, //15953 #CJK UNIFIED IDEOGRAPH
+ {0xF2C2, 0x7A19}, //15954 #CJK UNIFIED IDEOGRAPH
+ {0xF2C3, 0x7A37}, //15955 #CJK UNIFIED IDEOGRAPH
+ {0xF2C4, 0x7E54}, //15956 #CJK UNIFIED IDEOGRAPH
+ {0xF2C5, 0x8077}, //15957 #CJK UNIFIED IDEOGRAPH
+ {0xF2C6, 0x5507}, //15958 #CJK UNIFIED IDEOGRAPH
+ {0xF2C7, 0x55D4}, //15959 #CJK UNIFIED IDEOGRAPH
+ {0xF2C8, 0x5875}, //15960 #CJK UNIFIED IDEOGRAPH
+ {0xF2C9, 0x632F}, //15961 #CJK UNIFIED IDEOGRAPH
+ {0xF2CA, 0x6422}, //15962 #CJK UNIFIED IDEOGRAPH
+ {0xF2CB, 0x6649}, //15963 #CJK UNIFIED IDEOGRAPH
+ {0xF2CC, 0x664B}, //15964 #CJK UNIFIED IDEOGRAPH
+ {0xF2CD, 0x686D}, //15965 #CJK UNIFIED IDEOGRAPH
+ {0xF2CE, 0x699B}, //15966 #CJK UNIFIED IDEOGRAPH
+ {0xF2CF, 0x6B84}, //15967 #CJK UNIFIED IDEOGRAPH
+ {0xF2D0, 0x6D25}, //15968 #CJK UNIFIED IDEOGRAPH
+ {0xF2D1, 0x6EB1}, //15969 #CJK UNIFIED IDEOGRAPH
+ {0xF2D2, 0x73CD}, //15970 #CJK UNIFIED IDEOGRAPH
+ {0xF2D3, 0x7468}, //15971 #CJK UNIFIED IDEOGRAPH
+ {0xF2D4, 0x74A1}, //15972 #CJK UNIFIED IDEOGRAPH
+ {0xF2D5, 0x755B}, //15973 #CJK UNIFIED IDEOGRAPH
+ {0xF2D6, 0x75B9}, //15974 #CJK UNIFIED IDEOGRAPH
+ {0xF2D7, 0x76E1}, //15975 #CJK UNIFIED IDEOGRAPH
+ {0xF2D8, 0x771E}, //15976 #CJK UNIFIED IDEOGRAPH
+ {0xF2D9, 0x778B}, //15977 #CJK UNIFIED IDEOGRAPH
+ {0xF2DA, 0x79E6}, //15978 #CJK UNIFIED IDEOGRAPH
+ {0xF2DB, 0x7E09}, //15979 #CJK UNIFIED IDEOGRAPH
+ {0xF2DC, 0x7E1D}, //15980 #CJK UNIFIED IDEOGRAPH
+ {0xF2DD, 0x81FB}, //15981 #CJK UNIFIED IDEOGRAPH
+ {0xF2DE, 0x852F}, //15982 #CJK UNIFIED IDEOGRAPH
+ {0xF2DF, 0x8897}, //15983 #CJK UNIFIED IDEOGRAPH
+ {0xF2E0, 0x8A3A}, //15984 #CJK UNIFIED IDEOGRAPH
+ {0xF2E1, 0x8CD1}, //15985 #CJK UNIFIED IDEOGRAPH
+ {0xF2E2, 0x8EEB}, //15986 #CJK UNIFIED IDEOGRAPH
+ {0xF2E3, 0x8FB0}, //15987 #CJK UNIFIED IDEOGRAPH
+ {0xF2E4, 0x9032}, //15988 #CJK UNIFIED IDEOGRAPH
+ {0xF2E5, 0x93AD}, //15989 #CJK UNIFIED IDEOGRAPH
+ {0xF2E6, 0x9663}, //15990 #CJK UNIFIED IDEOGRAPH
+ {0xF2E7, 0x9673}, //15991 #CJK UNIFIED IDEOGRAPH
+ {0xF2E8, 0x9707}, //15992 #CJK UNIFIED IDEOGRAPH
+ {0xF2E9, 0x4F84}, //15993 #CJK UNIFIED IDEOGRAPH
+ {0xF2EA, 0x53F1}, //15994 #CJK UNIFIED IDEOGRAPH
+ {0xF2EB, 0x59EA}, //15995 #CJK UNIFIED IDEOGRAPH
+ {0xF2EC, 0x5AC9}, //15996 #CJK UNIFIED IDEOGRAPH
+ {0xF2ED, 0x5E19}, //15997 #CJK UNIFIED IDEOGRAPH
+ {0xF2EE, 0x684E}, //15998 #CJK UNIFIED IDEOGRAPH
+ {0xF2EF, 0x74C6}, //15999 #CJK UNIFIED IDEOGRAPH
+ {0xF2F0, 0x75BE}, //16000 #CJK UNIFIED IDEOGRAPH
+ {0xF2F1, 0x79E9}, //16001 #CJK UNIFIED IDEOGRAPH
+ {0xF2F2, 0x7A92}, //16002 #CJK UNIFIED IDEOGRAPH
+ {0xF2F3, 0x81A3}, //16003 #CJK UNIFIED IDEOGRAPH
+ {0xF2F4, 0x86ED}, //16004 #CJK UNIFIED IDEOGRAPH
+ {0xF2F5, 0x8CEA}, //16005 #CJK UNIFIED IDEOGRAPH
+ {0xF2F6, 0x8DCC}, //16006 #CJK UNIFIED IDEOGRAPH
+ {0xF2F7, 0x8FED}, //16007 #CJK UNIFIED IDEOGRAPH
+ {0xF2F8, 0x659F}, //16008 #CJK UNIFIED IDEOGRAPH
+ {0xF2F9, 0x6715}, //16009 #CJK UNIFIED IDEOGRAPH
+ {0xF2FA, 0xF9FD}, //16010 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF2FB, 0x57F7}, //16011 #CJK UNIFIED IDEOGRAPH
+ {0xF2FC, 0x6F57}, //16012 #CJK UNIFIED IDEOGRAPH
+ {0xF2FD, 0x7DDD}, //16013 #CJK UNIFIED IDEOGRAPH
+ {0xF2FE, 0x8F2F}, //16014 #CJK UNIFIED IDEOGRAPH
+ {0xF3A1, 0x93F6}, //16015 #CJK UNIFIED IDEOGRAPH
+ {0xF3A2, 0x96C6}, //16016 #CJK UNIFIED IDEOGRAPH
+ {0xF3A3, 0x5FB5}, //16017 #CJK UNIFIED IDEOGRAPH
+ {0xF3A4, 0x61F2}, //16018 #CJK UNIFIED IDEOGRAPH
+ {0xF3A5, 0x6F84}, //16019 #CJK UNIFIED IDEOGRAPH
+ {0xF3A6, 0x4E14}, //16020 #CJK UNIFIED IDEOGRAPH
+ {0xF3A7, 0x4F98}, //16021 #CJK UNIFIED IDEOGRAPH
+ {0xF3A8, 0x501F}, //16022 #CJK UNIFIED IDEOGRAPH
+ {0xF3A9, 0x53C9}, //16023 #CJK UNIFIED IDEOGRAPH
+ {0xF3AA, 0x55DF}, //16024 #CJK UNIFIED IDEOGRAPH
+ {0xF3AB, 0x5D6F}, //16025 #CJK UNIFIED IDEOGRAPH
+ {0xF3AC, 0x5DEE}, //16026 #CJK UNIFIED IDEOGRAPH
+ {0xF3AD, 0x6B21}, //16027 #CJK UNIFIED IDEOGRAPH
+ {0xF3AE, 0x6B64}, //16028 #CJK UNIFIED IDEOGRAPH
+ {0xF3AF, 0x78CB}, //16029 #CJK UNIFIED IDEOGRAPH
+ {0xF3B0, 0x7B9A}, //16030 #CJK UNIFIED IDEOGRAPH
+ {0xF3B1, 0xF9FE}, //16031 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF3B2, 0x8E49}, //16032 #CJK UNIFIED IDEOGRAPH
+ {0xF3B3, 0x8ECA}, //16033 #CJK UNIFIED IDEOGRAPH
+ {0xF3B4, 0x906E}, //16034 #CJK UNIFIED IDEOGRAPH
+ {0xF3B5, 0x6349}, //16035 #CJK UNIFIED IDEOGRAPH
+ {0xF3B6, 0x643E}, //16036 #CJK UNIFIED IDEOGRAPH
+ {0xF3B7, 0x7740}, //16037 #CJK UNIFIED IDEOGRAPH
+ {0xF3B8, 0x7A84}, //16038 #CJK UNIFIED IDEOGRAPH
+ {0xF3B9, 0x932F}, //16039 #CJK UNIFIED IDEOGRAPH
+ {0xF3BA, 0x947F}, //16040 #CJK UNIFIED IDEOGRAPH
+ {0xF3BB, 0x9F6A}, //16041 #CJK UNIFIED IDEOGRAPH
+ {0xF3BC, 0x64B0}, //16042 #CJK UNIFIED IDEOGRAPH
+ {0xF3BD, 0x6FAF}, //16043 #CJK UNIFIED IDEOGRAPH
+ {0xF3BE, 0x71E6}, //16044 #CJK UNIFIED IDEOGRAPH
+ {0xF3BF, 0x74A8}, //16045 #CJK UNIFIED IDEOGRAPH
+ {0xF3C0, 0x74DA}, //16046 #CJK UNIFIED IDEOGRAPH
+ {0xF3C1, 0x7AC4}, //16047 #CJK UNIFIED IDEOGRAPH
+ {0xF3C2, 0x7C12}, //16048 #CJK UNIFIED IDEOGRAPH
+ {0xF3C3, 0x7E82}, //16049 #CJK UNIFIED IDEOGRAPH
+ {0xF3C4, 0x7CB2}, //16050 #CJK UNIFIED IDEOGRAPH
+ {0xF3C5, 0x7E98}, //16051 #CJK UNIFIED IDEOGRAPH
+ {0xF3C6, 0x8B9A}, //16052 #CJK UNIFIED IDEOGRAPH
+ {0xF3C7, 0x8D0A}, //16053 #CJK UNIFIED IDEOGRAPH
+ {0xF3C8, 0x947D}, //16054 #CJK UNIFIED IDEOGRAPH
+ {0xF3C9, 0x9910}, //16055 #CJK UNIFIED IDEOGRAPH
+ {0xF3CA, 0x994C}, //16056 #CJK UNIFIED IDEOGRAPH
+ {0xF3CB, 0x5239}, //16057 #CJK UNIFIED IDEOGRAPH
+ {0xF3CC, 0x5BDF}, //16058 #CJK UNIFIED IDEOGRAPH
+ {0xF3CD, 0x64E6}, //16059 #CJK UNIFIED IDEOGRAPH
+ {0xF3CE, 0x672D}, //16060 #CJK UNIFIED IDEOGRAPH
+ {0xF3CF, 0x7D2E}, //16061 #CJK UNIFIED IDEOGRAPH
+ {0xF3D0, 0x50ED}, //16062 #CJK UNIFIED IDEOGRAPH
+ {0xF3D1, 0x53C3}, //16063 #CJK UNIFIED IDEOGRAPH
+ {0xF3D2, 0x5879}, //16064 #CJK UNIFIED IDEOGRAPH
+ {0xF3D3, 0x6158}, //16065 #CJK UNIFIED IDEOGRAPH
+ {0xF3D4, 0x6159}, //16066 #CJK UNIFIED IDEOGRAPH
+ {0xF3D5, 0x61FA}, //16067 #CJK UNIFIED IDEOGRAPH
+ {0xF3D6, 0x65AC}, //16068 #CJK UNIFIED IDEOGRAPH
+ {0xF3D7, 0x7AD9}, //16069 #CJK UNIFIED IDEOGRAPH
+ {0xF3D8, 0x8B92}, //16070 #CJK UNIFIED IDEOGRAPH
+ {0xF3D9, 0x8B96}, //16071 #CJK UNIFIED IDEOGRAPH
+ {0xF3DA, 0x5009}, //16072 #CJK UNIFIED IDEOGRAPH
+ {0xF3DB, 0x5021}, //16073 #CJK UNIFIED IDEOGRAPH
+ {0xF3DC, 0x5275}, //16074 #CJK UNIFIED IDEOGRAPH
+ {0xF3DD, 0x5531}, //16075 #CJK UNIFIED IDEOGRAPH
+ {0xF3DE, 0x5A3C}, //16076 #CJK UNIFIED IDEOGRAPH
+ {0xF3DF, 0x5EE0}, //16077 #CJK UNIFIED IDEOGRAPH
+ {0xF3E0, 0x5F70}, //16078 #CJK UNIFIED IDEOGRAPH
+ {0xF3E1, 0x6134}, //16079 #CJK UNIFIED IDEOGRAPH
+ {0xF3E2, 0x655E}, //16080 #CJK UNIFIED IDEOGRAPH
+ {0xF3E3, 0x660C}, //16081 #CJK UNIFIED IDEOGRAPH
+ {0xF3E4, 0x6636}, //16082 #CJK UNIFIED IDEOGRAPH
+ {0xF3E5, 0x66A2}, //16083 #CJK UNIFIED IDEOGRAPH
+ {0xF3E6, 0x69CD}, //16084 #CJK UNIFIED IDEOGRAPH
+ {0xF3E7, 0x6EC4}, //16085 #CJK UNIFIED IDEOGRAPH
+ {0xF3E8, 0x6F32}, //16086 #CJK UNIFIED IDEOGRAPH
+ {0xF3E9, 0x7316}, //16087 #CJK UNIFIED IDEOGRAPH
+ {0xF3EA, 0x7621}, //16088 #CJK UNIFIED IDEOGRAPH
+ {0xF3EB, 0x7A93}, //16089 #CJK UNIFIED IDEOGRAPH
+ {0xF3EC, 0x8139}, //16090 #CJK UNIFIED IDEOGRAPH
+ {0xF3ED, 0x8259}, //16091 #CJK UNIFIED IDEOGRAPH
+ {0xF3EE, 0x83D6}, //16092 #CJK UNIFIED IDEOGRAPH
+ {0xF3EF, 0x84BC}, //16093 #CJK UNIFIED IDEOGRAPH
+ {0xF3F0, 0x50B5}, //16094 #CJK UNIFIED IDEOGRAPH
+ {0xF3F1, 0x57F0}, //16095 #CJK UNIFIED IDEOGRAPH
+ {0xF3F2, 0x5BC0}, //16096 #CJK UNIFIED IDEOGRAPH
+ {0xF3F3, 0x5BE8}, //16097 #CJK UNIFIED IDEOGRAPH
+ {0xF3F4, 0x5F69}, //16098 #CJK UNIFIED IDEOGRAPH
+ {0xF3F5, 0x63A1}, //16099 #CJK UNIFIED IDEOGRAPH
+ {0xF3F6, 0x7826}, //16100 #CJK UNIFIED IDEOGRAPH
+ {0xF3F7, 0x7DB5}, //16101 #CJK UNIFIED IDEOGRAPH
+ {0xF3F8, 0x83DC}, //16102 #CJK UNIFIED IDEOGRAPH
+ {0xF3F9, 0x8521}, //16103 #CJK UNIFIED IDEOGRAPH
+ {0xF3FA, 0x91C7}, //16104 #CJK UNIFIED IDEOGRAPH
+ {0xF3FB, 0x91F5}, //16105 #CJK UNIFIED IDEOGRAPH
+ {0xF3FC, 0x518A}, //16106 #CJK UNIFIED IDEOGRAPH
+ {0xF3FD, 0x67F5}, //16107 #CJK UNIFIED IDEOGRAPH
+ {0xF3FE, 0x7B56}, //16108 #CJK UNIFIED IDEOGRAPH
+ {0xF4A1, 0x8CAC}, //16109 #CJK UNIFIED IDEOGRAPH
+ {0xF4A2, 0x51C4}, //16110 #CJK UNIFIED IDEOGRAPH
+ {0xF4A3, 0x59BB}, //16111 #CJK UNIFIED IDEOGRAPH
+ {0xF4A4, 0x60BD}, //16112 #CJK UNIFIED IDEOGRAPH
+ {0xF4A5, 0x8655}, //16113 #CJK UNIFIED IDEOGRAPH
+ {0xF4A6, 0x501C}, //16114 #CJK UNIFIED IDEOGRAPH
+ {0xF4A7, 0xF9FF}, //16115 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF4A8, 0x5254}, //16116 #CJK UNIFIED IDEOGRAPH
+ {0xF4A9, 0x5C3A}, //16117 #CJK UNIFIED IDEOGRAPH
+ {0xF4AA, 0x617D}, //16118 #CJK UNIFIED IDEOGRAPH
+ {0xF4AB, 0x621A}, //16119 #CJK UNIFIED IDEOGRAPH
+ {0xF4AC, 0x62D3}, //16120 #CJK UNIFIED IDEOGRAPH
+ {0xF4AD, 0x64F2}, //16121 #CJK UNIFIED IDEOGRAPH
+ {0xF4AE, 0x65A5}, //16122 #CJK UNIFIED IDEOGRAPH
+ {0xF4AF, 0x6ECC}, //16123 #CJK UNIFIED IDEOGRAPH
+ {0xF4B0, 0x7620}, //16124 #CJK UNIFIED IDEOGRAPH
+ {0xF4B1, 0x810A}, //16125 #CJK UNIFIED IDEOGRAPH
+ {0xF4B2, 0x8E60}, //16126 #CJK UNIFIED IDEOGRAPH
+ {0xF4B3, 0x965F}, //16127 #CJK UNIFIED IDEOGRAPH
+ {0xF4B4, 0x96BB}, //16128 #CJK UNIFIED IDEOGRAPH
+ {0xF4B5, 0x4EDF}, //16129 #CJK UNIFIED IDEOGRAPH
+ {0xF4B6, 0x5343}, //16130 #CJK UNIFIED IDEOGRAPH
+ {0xF4B7, 0x5598}, //16131 #CJK UNIFIED IDEOGRAPH
+ {0xF4B8, 0x5929}, //16132 #CJK UNIFIED IDEOGRAPH
+ {0xF4B9, 0x5DDD}, //16133 #CJK UNIFIED IDEOGRAPH
+ {0xF4BA, 0x64C5}, //16134 #CJK UNIFIED IDEOGRAPH
+ {0xF4BB, 0x6CC9}, //16135 #CJK UNIFIED IDEOGRAPH
+ {0xF4BC, 0x6DFA}, //16136 #CJK UNIFIED IDEOGRAPH
+ {0xF4BD, 0x7394}, //16137 #CJK UNIFIED IDEOGRAPH
+ {0xF4BE, 0x7A7F}, //16138 #CJK UNIFIED IDEOGRAPH
+ {0xF4BF, 0x821B}, //16139 #CJK UNIFIED IDEOGRAPH
+ {0xF4C0, 0x85A6}, //16140 #CJK UNIFIED IDEOGRAPH
+ {0xF4C1, 0x8CE4}, //16141 #CJK UNIFIED IDEOGRAPH
+ {0xF4C2, 0x8E10}, //16142 #CJK UNIFIED IDEOGRAPH
+ {0xF4C3, 0x9077}, //16143 #CJK UNIFIED IDEOGRAPH
+ {0xF4C4, 0x91E7}, //16144 #CJK UNIFIED IDEOGRAPH
+ {0xF4C5, 0x95E1}, //16145 #CJK UNIFIED IDEOGRAPH
+ {0xF4C6, 0x9621}, //16146 #CJK UNIFIED IDEOGRAPH
+ {0xF4C7, 0x97C6}, //16147 #CJK UNIFIED IDEOGRAPH
+ {0xF4C8, 0x51F8}, //16148 #CJK UNIFIED IDEOGRAPH
+ {0xF4C9, 0x54F2}, //16149 #CJK UNIFIED IDEOGRAPH
+ {0xF4CA, 0x5586}, //16150 #CJK UNIFIED IDEOGRAPH
+ {0xF4CB, 0x5FB9}, //16151 #CJK UNIFIED IDEOGRAPH
+ {0xF4CC, 0x64A4}, //16152 #CJK UNIFIED IDEOGRAPH
+ {0xF4CD, 0x6F88}, //16153 #CJK UNIFIED IDEOGRAPH
+ {0xF4CE, 0x7DB4}, //16154 #CJK UNIFIED IDEOGRAPH
+ {0xF4CF, 0x8F1F}, //16155 #CJK UNIFIED IDEOGRAPH
+ {0xF4D0, 0x8F4D}, //16156 #CJK UNIFIED IDEOGRAPH
+ {0xF4D1, 0x9435}, //16157 #CJK UNIFIED IDEOGRAPH
+ {0xF4D2, 0x50C9}, //16158 #CJK UNIFIED IDEOGRAPH
+ {0xF4D3, 0x5C16}, //16159 #CJK UNIFIED IDEOGRAPH
+ {0xF4D4, 0x6CBE}, //16160 #CJK UNIFIED IDEOGRAPH
+ {0xF4D5, 0x6DFB}, //16161 #CJK UNIFIED IDEOGRAPH
+ {0xF4D6, 0x751B}, //16162 #CJK UNIFIED IDEOGRAPH
+ {0xF4D7, 0x77BB}, //16163 #CJK UNIFIED IDEOGRAPH
+ {0xF4D8, 0x7C3D}, //16164 #CJK UNIFIED IDEOGRAPH
+ {0xF4D9, 0x7C64}, //16165 #CJK UNIFIED IDEOGRAPH
+ {0xF4DA, 0x8A79}, //16166 #CJK UNIFIED IDEOGRAPH
+ {0xF4DB, 0x8AC2}, //16167 #CJK UNIFIED IDEOGRAPH
+ {0xF4DC, 0x581E}, //16168 #CJK UNIFIED IDEOGRAPH
+ {0xF4DD, 0x59BE}, //16169 #CJK UNIFIED IDEOGRAPH
+ {0xF4DE, 0x5E16}, //16170 #CJK UNIFIED IDEOGRAPH
+ {0xF4DF, 0x6377}, //16171 #CJK UNIFIED IDEOGRAPH
+ {0xF4E0, 0x7252}, //16172 #CJK UNIFIED IDEOGRAPH
+ {0xF4E1, 0x758A}, //16173 #CJK UNIFIED IDEOGRAPH
+ {0xF4E2, 0x776B}, //16174 #CJK UNIFIED IDEOGRAPH
+ {0xF4E3, 0x8ADC}, //16175 #CJK UNIFIED IDEOGRAPH
+ {0xF4E4, 0x8CBC}, //16176 #CJK UNIFIED IDEOGRAPH
+ {0xF4E5, 0x8F12}, //16177 #CJK UNIFIED IDEOGRAPH
+ {0xF4E6, 0x5EF3}, //16178 #CJK UNIFIED IDEOGRAPH
+ {0xF4E7, 0x6674}, //16179 #CJK UNIFIED IDEOGRAPH
+ {0xF4E8, 0x6DF8}, //16180 #CJK UNIFIED IDEOGRAPH
+ {0xF4E9, 0x807D}, //16181 #CJK UNIFIED IDEOGRAPH
+ {0xF4EA, 0x83C1}, //16182 #CJK UNIFIED IDEOGRAPH
+ {0xF4EB, 0x8ACB}, //16183 #CJK UNIFIED IDEOGRAPH
+ {0xF4EC, 0x9751}, //16184 #CJK UNIFIED IDEOGRAPH
+ {0xF4ED, 0x9BD6}, //16185 #CJK UNIFIED IDEOGRAPH
+ {0xF4EE, 0xFA00}, //16186 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF4EF, 0x5243}, //16187 #CJK UNIFIED IDEOGRAPH
+ {0xF4F0, 0x66FF}, //16188 #CJK UNIFIED IDEOGRAPH
+ {0xF4F1, 0x6D95}, //16189 #CJK UNIFIED IDEOGRAPH
+ {0xF4F2, 0x6EEF}, //16190 #CJK UNIFIED IDEOGRAPH
+ {0xF4F3, 0x7DE0}, //16191 #CJK UNIFIED IDEOGRAPH
+ {0xF4F4, 0x8AE6}, //16192 #CJK UNIFIED IDEOGRAPH
+ {0xF4F5, 0x902E}, //16193 #CJK UNIFIED IDEOGRAPH
+ {0xF4F6, 0x905E}, //16194 #CJK UNIFIED IDEOGRAPH
+ {0xF4F7, 0x9AD4}, //16195 #CJK UNIFIED IDEOGRAPH
+ {0xF4F8, 0x521D}, //16196 #CJK UNIFIED IDEOGRAPH
+ {0xF4F9, 0x527F}, //16197 #CJK UNIFIED IDEOGRAPH
+ {0xF4FA, 0x54E8}, //16198 #CJK UNIFIED IDEOGRAPH
+ {0xF4FB, 0x6194}, //16199 #CJK UNIFIED IDEOGRAPH
+ {0xF4FC, 0x6284}, //16200 #CJK UNIFIED IDEOGRAPH
+ {0xF4FD, 0x62DB}, //16201 #CJK UNIFIED IDEOGRAPH
+ {0xF4FE, 0x68A2}, //16202 #CJK UNIFIED IDEOGRAPH
+ {0xF5A1, 0x6912}, //16203 #CJK UNIFIED IDEOGRAPH
+ {0xF5A2, 0x695A}, //16204 #CJK UNIFIED IDEOGRAPH
+ {0xF5A3, 0x6A35}, //16205 #CJK UNIFIED IDEOGRAPH
+ {0xF5A4, 0x7092}, //16206 #CJK UNIFIED IDEOGRAPH
+ {0xF5A5, 0x7126}, //16207 #CJK UNIFIED IDEOGRAPH
+ {0xF5A6, 0x785D}, //16208 #CJK UNIFIED IDEOGRAPH
+ {0xF5A7, 0x7901}, //16209 #CJK UNIFIED IDEOGRAPH
+ {0xF5A8, 0x790E}, //16210 #CJK UNIFIED IDEOGRAPH
+ {0xF5A9, 0x79D2}, //16211 #CJK UNIFIED IDEOGRAPH
+ {0xF5AA, 0x7A0D}, //16212 #CJK UNIFIED IDEOGRAPH
+ {0xF5AB, 0x8096}, //16213 #CJK UNIFIED IDEOGRAPH
+ {0xF5AC, 0x8278}, //16214 #CJK UNIFIED IDEOGRAPH
+ {0xF5AD, 0x82D5}, //16215 #CJK UNIFIED IDEOGRAPH
+ {0xF5AE, 0x8349}, //16216 #CJK UNIFIED IDEOGRAPH
+ {0xF5AF, 0x8549}, //16217 #CJK UNIFIED IDEOGRAPH
+ {0xF5B0, 0x8C82}, //16218 #CJK UNIFIED IDEOGRAPH
+ {0xF5B1, 0x8D85}, //16219 #CJK UNIFIED IDEOGRAPH
+ {0xF5B2, 0x9162}, //16220 #CJK UNIFIED IDEOGRAPH
+ {0xF5B3, 0x918B}, //16221 #CJK UNIFIED IDEOGRAPH
+ {0xF5B4, 0x91AE}, //16222 #CJK UNIFIED IDEOGRAPH
+ {0xF5B5, 0x4FC3}, //16223 #CJK UNIFIED IDEOGRAPH
+ {0xF5B6, 0x56D1}, //16224 #CJK UNIFIED IDEOGRAPH
+ {0xF5B7, 0x71ED}, //16225 #CJK UNIFIED IDEOGRAPH
+ {0xF5B8, 0x77D7}, //16226 #CJK UNIFIED IDEOGRAPH
+ {0xF5B9, 0x8700}, //16227 #CJK UNIFIED IDEOGRAPH
+ {0xF5BA, 0x89F8}, //16228 #CJK UNIFIED IDEOGRAPH
+ {0xF5BB, 0x5BF8}, //16229 #CJK UNIFIED IDEOGRAPH
+ {0xF5BC, 0x5FD6}, //16230 #CJK UNIFIED IDEOGRAPH
+ {0xF5BD, 0x6751}, //16231 #CJK UNIFIED IDEOGRAPH
+ {0xF5BE, 0x90A8}, //16232 #CJK UNIFIED IDEOGRAPH
+ {0xF5BF, 0x53E2}, //16233 #CJK UNIFIED IDEOGRAPH
+ {0xF5C0, 0x585A}, //16234 #CJK UNIFIED IDEOGRAPH
+ {0xF5C1, 0x5BF5}, //16235 #CJK UNIFIED IDEOGRAPH
+ {0xF5C2, 0x60A4}, //16236 #CJK UNIFIED IDEOGRAPH
+ {0xF5C3, 0x6181}, //16237 #CJK UNIFIED IDEOGRAPH
+ {0xF5C4, 0x6460}, //16238 #CJK UNIFIED IDEOGRAPH
+ {0xF5C5, 0x7E3D}, //16239 #CJK UNIFIED IDEOGRAPH
+ {0xF5C6, 0x8070}, //16240 #CJK UNIFIED IDEOGRAPH
+ {0xF5C7, 0x8525}, //16241 #CJK UNIFIED IDEOGRAPH
+ {0xF5C8, 0x9283}, //16242 #CJK UNIFIED IDEOGRAPH
+ {0xF5C9, 0x64AE}, //16243 #CJK UNIFIED IDEOGRAPH
+ {0xF5CA, 0x50AC}, //16244 #CJK UNIFIED IDEOGRAPH
+ {0xF5CB, 0x5D14}, //16245 #CJK UNIFIED IDEOGRAPH
+ {0xF5CC, 0x6700}, //16246 #CJK UNIFIED IDEOGRAPH
+ {0xF5CD, 0x589C}, //16247 #CJK UNIFIED IDEOGRAPH
+ {0xF5CE, 0x62BD}, //16248 #CJK UNIFIED IDEOGRAPH
+ {0xF5CF, 0x63A8}, //16249 #CJK UNIFIED IDEOGRAPH
+ {0xF5D0, 0x690E}, //16250 #CJK UNIFIED IDEOGRAPH
+ {0xF5D1, 0x6978}, //16251 #CJK UNIFIED IDEOGRAPH
+ {0xF5D2, 0x6A1E}, //16252 #CJK UNIFIED IDEOGRAPH
+ {0xF5D3, 0x6E6B}, //16253 #CJK UNIFIED IDEOGRAPH
+ {0xF5D4, 0x76BA}, //16254 #CJK UNIFIED IDEOGRAPH
+ {0xF5D5, 0x79CB}, //16255 #CJK UNIFIED IDEOGRAPH
+ {0xF5D6, 0x82BB}, //16256 #CJK UNIFIED IDEOGRAPH
+ {0xF5D7, 0x8429}, //16257 #CJK UNIFIED IDEOGRAPH
+ {0xF5D8, 0x8ACF}, //16258 #CJK UNIFIED IDEOGRAPH
+ {0xF5D9, 0x8DA8}, //16259 #CJK UNIFIED IDEOGRAPH
+ {0xF5DA, 0x8FFD}, //16260 #CJK UNIFIED IDEOGRAPH
+ {0xF5DB, 0x9112}, //16261 #CJK UNIFIED IDEOGRAPH
+ {0xF5DC, 0x914B}, //16262 #CJK UNIFIED IDEOGRAPH
+ {0xF5DD, 0x919C}, //16263 #CJK UNIFIED IDEOGRAPH
+ {0xF5DE, 0x9310}, //16264 #CJK UNIFIED IDEOGRAPH
+ {0xF5DF, 0x9318}, //16265 #CJK UNIFIED IDEOGRAPH
+ {0xF5E0, 0x939A}, //16266 #CJK UNIFIED IDEOGRAPH
+ {0xF5E1, 0x96DB}, //16267 #CJK UNIFIED IDEOGRAPH
+ {0xF5E2, 0x9A36}, //16268 #CJK UNIFIED IDEOGRAPH
+ {0xF5E3, 0x9C0D}, //16269 #CJK UNIFIED IDEOGRAPH
+ {0xF5E4, 0x4E11}, //16270 #CJK UNIFIED IDEOGRAPH
+ {0xF5E5, 0x755C}, //16271 #CJK UNIFIED IDEOGRAPH
+ {0xF5E6, 0x795D}, //16272 #CJK UNIFIED IDEOGRAPH
+ {0xF5E7, 0x7AFA}, //16273 #CJK UNIFIED IDEOGRAPH
+ {0xF5E8, 0x7B51}, //16274 #CJK UNIFIED IDEOGRAPH
+ {0xF5E9, 0x7BC9}, //16275 #CJK UNIFIED IDEOGRAPH
+ {0xF5EA, 0x7E2E}, //16276 #CJK UNIFIED IDEOGRAPH
+ {0xF5EB, 0x84C4}, //16277 #CJK UNIFIED IDEOGRAPH
+ {0xF5EC, 0x8E59}, //16278 #CJK UNIFIED IDEOGRAPH
+ {0xF5ED, 0x8E74}, //16279 #CJK UNIFIED IDEOGRAPH
+ {0xF5EE, 0x8EF8}, //16280 #CJK UNIFIED IDEOGRAPH
+ {0xF5EF, 0x9010}, //16281 #CJK UNIFIED IDEOGRAPH
+ {0xF5F0, 0x6625}, //16282 #CJK UNIFIED IDEOGRAPH
+ {0xF5F1, 0x693F}, //16283 #CJK UNIFIED IDEOGRAPH
+ {0xF5F2, 0x7443}, //16284 #CJK UNIFIED IDEOGRAPH
+ {0xF5F3, 0x51FA}, //16285 #CJK UNIFIED IDEOGRAPH
+ {0xF5F4, 0x672E}, //16286 #CJK UNIFIED IDEOGRAPH
+ {0xF5F5, 0x9EDC}, //16287 #CJK UNIFIED IDEOGRAPH
+ {0xF5F6, 0x5145}, //16288 #CJK UNIFIED IDEOGRAPH
+ {0xF5F7, 0x5FE0}, //16289 #CJK UNIFIED IDEOGRAPH
+ {0xF5F8, 0x6C96}, //16290 #CJK UNIFIED IDEOGRAPH
+ {0xF5F9, 0x87F2}, //16291 #CJK UNIFIED IDEOGRAPH
+ {0xF5FA, 0x885D}, //16292 #CJK UNIFIED IDEOGRAPH
+ {0xF5FB, 0x8877}, //16293 #CJK UNIFIED IDEOGRAPH
+ {0xF5FC, 0x60B4}, //16294 #CJK UNIFIED IDEOGRAPH
+ {0xF5FD, 0x81B5}, //16295 #CJK UNIFIED IDEOGRAPH
+ {0xF5FE, 0x8403}, //16296 #CJK UNIFIED IDEOGRAPH
+ {0xF6A1, 0x8D05}, //16297 #CJK UNIFIED IDEOGRAPH
+ {0xF6A2, 0x53D6}, //16298 #CJK UNIFIED IDEOGRAPH
+ {0xF6A3, 0x5439}, //16299 #CJK UNIFIED IDEOGRAPH
+ {0xF6A4, 0x5634}, //16300 #CJK UNIFIED IDEOGRAPH
+ {0xF6A5, 0x5A36}, //16301 #CJK UNIFIED IDEOGRAPH
+ {0xF6A6, 0x5C31}, //16302 #CJK UNIFIED IDEOGRAPH
+ {0xF6A7, 0x708A}, //16303 #CJK UNIFIED IDEOGRAPH
+ {0xF6A8, 0x7FE0}, //16304 #CJK UNIFIED IDEOGRAPH
+ {0xF6A9, 0x805A}, //16305 #CJK UNIFIED IDEOGRAPH
+ {0xF6AA, 0x8106}, //16306 #CJK UNIFIED IDEOGRAPH
+ {0xF6AB, 0x81ED}, //16307 #CJK UNIFIED IDEOGRAPH
+ {0xF6AC, 0x8DA3}, //16308 #CJK UNIFIED IDEOGRAPH
+ {0xF6AD, 0x9189}, //16309 #CJK UNIFIED IDEOGRAPH
+ {0xF6AE, 0x9A5F}, //16310 #CJK UNIFIED IDEOGRAPH
+ {0xF6AF, 0x9DF2}, //16311 #CJK UNIFIED IDEOGRAPH
+ {0xF6B0, 0x5074}, //16312 #CJK UNIFIED IDEOGRAPH
+ {0xF6B1, 0x4EC4}, //16313 #CJK UNIFIED IDEOGRAPH
+ {0xF6B2, 0x53A0}, //16314 #CJK UNIFIED IDEOGRAPH
+ {0xF6B3, 0x60FB}, //16315 #CJK UNIFIED IDEOGRAPH
+ {0xF6B4, 0x6E2C}, //16316 #CJK UNIFIED IDEOGRAPH
+ {0xF6B5, 0x5C64}, //16317 #CJK UNIFIED IDEOGRAPH
+ {0xF6B6, 0x4F88}, //16318 #CJK UNIFIED IDEOGRAPH
+ {0xF6B7, 0x5024}, //16319 #CJK UNIFIED IDEOGRAPH
+ {0xF6B8, 0x55E4}, //16320 #CJK UNIFIED IDEOGRAPH
+ {0xF6B9, 0x5CD9}, //16321 #CJK UNIFIED IDEOGRAPH
+ {0xF6BA, 0x5E5F}, //16322 #CJK UNIFIED IDEOGRAPH
+ {0xF6BB, 0x6065}, //16323 #CJK UNIFIED IDEOGRAPH
+ {0xF6BC, 0x6894}, //16324 #CJK UNIFIED IDEOGRAPH
+ {0xF6BD, 0x6CBB}, //16325 #CJK UNIFIED IDEOGRAPH
+ {0xF6BE, 0x6DC4}, //16326 #CJK UNIFIED IDEOGRAPH
+ {0xF6BF, 0x71BE}, //16327 #CJK UNIFIED IDEOGRAPH
+ {0xF6C0, 0x75D4}, //16328 #CJK UNIFIED IDEOGRAPH
+ {0xF6C1, 0x75F4}, //16329 #CJK UNIFIED IDEOGRAPH
+ {0xF6C2, 0x7661}, //16330 #CJK UNIFIED IDEOGRAPH
+ {0xF6C3, 0x7A1A}, //16331 #CJK UNIFIED IDEOGRAPH
+ {0xF6C4, 0x7A49}, //16332 #CJK UNIFIED IDEOGRAPH
+ {0xF6C5, 0x7DC7}, //16333 #CJK UNIFIED IDEOGRAPH
+ {0xF6C6, 0x7DFB}, //16334 #CJK UNIFIED IDEOGRAPH
+ {0xF6C7, 0x7F6E}, //16335 #CJK UNIFIED IDEOGRAPH
+ {0xF6C8, 0x81F4}, //16336 #CJK UNIFIED IDEOGRAPH
+ {0xF6C9, 0x86A9}, //16337 #CJK UNIFIED IDEOGRAPH
+ {0xF6CA, 0x8F1C}, //16338 #CJK UNIFIED IDEOGRAPH
+ {0xF6CB, 0x96C9}, //16339 #CJK UNIFIED IDEOGRAPH
+ {0xF6CC, 0x99B3}, //16340 #CJK UNIFIED IDEOGRAPH
+ {0xF6CD, 0x9F52}, //16341 #CJK UNIFIED IDEOGRAPH
+ {0xF6CE, 0x5247}, //16342 #CJK UNIFIED IDEOGRAPH
+ {0xF6CF, 0x52C5}, //16343 #CJK UNIFIED IDEOGRAPH
+ {0xF6D0, 0x98ED}, //16344 #CJK UNIFIED IDEOGRAPH
+ {0xF6D1, 0x89AA}, //16345 #CJK UNIFIED IDEOGRAPH
+ {0xF6D2, 0x4E03}, //16346 #CJK UNIFIED IDEOGRAPH
+ {0xF6D3, 0x67D2}, //16347 #CJK UNIFIED IDEOGRAPH
+ {0xF6D4, 0x6F06}, //16348 #CJK UNIFIED IDEOGRAPH
+ {0xF6D5, 0x4FB5}, //16349 #CJK UNIFIED IDEOGRAPH
+ {0xF6D6, 0x5BE2}, //16350 #CJK UNIFIED IDEOGRAPH
+ {0xF6D7, 0x6795}, //16351 #CJK UNIFIED IDEOGRAPH
+ {0xF6D8, 0x6C88}, //16352 #CJK UNIFIED IDEOGRAPH
+ {0xF6D9, 0x6D78}, //16353 #CJK UNIFIED IDEOGRAPH
+ {0xF6DA, 0x741B}, //16354 #CJK UNIFIED IDEOGRAPH
+ {0xF6DB, 0x7827}, //16355 #CJK UNIFIED IDEOGRAPH
+ {0xF6DC, 0x91DD}, //16356 #CJK UNIFIED IDEOGRAPH
+ {0xF6DD, 0x937C}, //16357 #CJK UNIFIED IDEOGRAPH
+ {0xF6DE, 0x87C4}, //16358 #CJK UNIFIED IDEOGRAPH
+ {0xF6DF, 0x79E4}, //16359 #CJK UNIFIED IDEOGRAPH
+ {0xF6E0, 0x7A31}, //16360 #CJK UNIFIED IDEOGRAPH
+ {0xF6E1, 0x5FEB}, //16361 #CJK UNIFIED IDEOGRAPH
+ {0xF6E2, 0x4ED6}, //16362 #CJK UNIFIED IDEOGRAPH
+ {0xF6E3, 0x54A4}, //16363 #CJK UNIFIED IDEOGRAPH
+ {0xF6E4, 0x553E}, //16364 #CJK UNIFIED IDEOGRAPH
+ {0xF6E5, 0x58AE}, //16365 #CJK UNIFIED IDEOGRAPH
+ {0xF6E6, 0x59A5}, //16366 #CJK UNIFIED IDEOGRAPH
+ {0xF6E7, 0x60F0}, //16367 #CJK UNIFIED IDEOGRAPH
+ {0xF6E8, 0x6253}, //16368 #CJK UNIFIED IDEOGRAPH
+ {0xF6E9, 0x62D6}, //16369 #CJK UNIFIED IDEOGRAPH
+ {0xF6EA, 0x6736}, //16370 #CJK UNIFIED IDEOGRAPH
+ {0xF6EB, 0x6955}, //16371 #CJK UNIFIED IDEOGRAPH
+ {0xF6EC, 0x8235}, //16372 #CJK UNIFIED IDEOGRAPH
+ {0xF6ED, 0x9640}, //16373 #CJK UNIFIED IDEOGRAPH
+ {0xF6EE, 0x99B1}, //16374 #CJK UNIFIED IDEOGRAPH
+ {0xF6EF, 0x99DD}, //16375 #CJK UNIFIED IDEOGRAPH
+ {0xF6F0, 0x502C}, //16376 #CJK UNIFIED IDEOGRAPH
+ {0xF6F1, 0x5353}, //16377 #CJK UNIFIED IDEOGRAPH
+ {0xF6F2, 0x5544}, //16378 #CJK UNIFIED IDEOGRAPH
+ {0xF6F3, 0x577C}, //16379 #CJK UNIFIED IDEOGRAPH
+ {0xF6F4, 0xFA01}, //16380 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF6F5, 0x6258}, //16381 #CJK UNIFIED IDEOGRAPH
+ {0xF6F6, 0xFA02}, //16382 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF6F7, 0x64E2}, //16383 #CJK UNIFIED IDEOGRAPH
+ {0xF6F8, 0x666B}, //16384 #CJK UNIFIED IDEOGRAPH
+ {0xF6F9, 0x67DD}, //16385 #CJK UNIFIED IDEOGRAPH
+ {0xF6FA, 0x6FC1}, //16386 #CJK UNIFIED IDEOGRAPH
+ {0xF6FB, 0x6FEF}, //16387 #CJK UNIFIED IDEOGRAPH
+ {0xF6FC, 0x7422}, //16388 #CJK UNIFIED IDEOGRAPH
+ {0xF6FD, 0x7438}, //16389 #CJK UNIFIED IDEOGRAPH
+ {0xF6FE, 0x8A17}, //16390 #CJK UNIFIED IDEOGRAPH
+ {0xF7A1, 0x9438}, //16391 #CJK UNIFIED IDEOGRAPH
+ {0xF7A2, 0x5451}, //16392 #CJK UNIFIED IDEOGRAPH
+ {0xF7A3, 0x5606}, //16393 #CJK UNIFIED IDEOGRAPH
+ {0xF7A4, 0x5766}, //16394 #CJK UNIFIED IDEOGRAPH
+ {0xF7A5, 0x5F48}, //16395 #CJK UNIFIED IDEOGRAPH
+ {0xF7A6, 0x619A}, //16396 #CJK UNIFIED IDEOGRAPH
+ {0xF7A7, 0x6B4E}, //16397 #CJK UNIFIED IDEOGRAPH
+ {0xF7A8, 0x7058}, //16398 #CJK UNIFIED IDEOGRAPH
+ {0xF7A9, 0x70AD}, //16399 #CJK UNIFIED IDEOGRAPH
+ {0xF7AA, 0x7DBB}, //16400 #CJK UNIFIED IDEOGRAPH
+ {0xF7AB, 0x8A95}, //16401 #CJK UNIFIED IDEOGRAPH
+ {0xF7AC, 0x596A}, //16402 #CJK UNIFIED IDEOGRAPH
+ {0xF7AD, 0x812B}, //16403 #CJK UNIFIED IDEOGRAPH
+ {0xF7AE, 0x63A2}, //16404 #CJK UNIFIED IDEOGRAPH
+ {0xF7AF, 0x7708}, //16405 #CJK UNIFIED IDEOGRAPH
+ {0xF7B0, 0x803D}, //16406 #CJK UNIFIED IDEOGRAPH
+ {0xF7B1, 0x8CAA}, //16407 #CJK UNIFIED IDEOGRAPH
+ {0xF7B2, 0x5854}, //16408 #CJK UNIFIED IDEOGRAPH
+ {0xF7B3, 0x642D}, //16409 #CJK UNIFIED IDEOGRAPH
+ {0xF7B4, 0x69BB}, //16410 #CJK UNIFIED IDEOGRAPH
+ {0xF7B5, 0x5B95}, //16411 #CJK UNIFIED IDEOGRAPH
+ {0xF7B6, 0x5E11}, //16412 #CJK UNIFIED IDEOGRAPH
+ {0xF7B7, 0x6E6F}, //16413 #CJK UNIFIED IDEOGRAPH
+ {0xF7B8, 0xFA03}, //16414 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF7B9, 0x8569}, //16415 #CJK UNIFIED IDEOGRAPH
+ {0xF7BA, 0x514C}, //16416 #CJK UNIFIED IDEOGRAPH
+ {0xF7BB, 0x53F0}, //16417 #CJK UNIFIED IDEOGRAPH
+ {0xF7BC, 0x592A}, //16418 #CJK UNIFIED IDEOGRAPH
+ {0xF7BD, 0x6020}, //16419 #CJK UNIFIED IDEOGRAPH
+ {0xF7BE, 0x614B}, //16420 #CJK UNIFIED IDEOGRAPH
+ {0xF7BF, 0x6B86}, //16421 #CJK UNIFIED IDEOGRAPH
+ {0xF7C0, 0x6C70}, //16422 #CJK UNIFIED IDEOGRAPH
+ {0xF7C1, 0x6CF0}, //16423 #CJK UNIFIED IDEOGRAPH
+ {0xF7C2, 0x7B1E}, //16424 #CJK UNIFIED IDEOGRAPH
+ {0xF7C3, 0x80CE}, //16425 #CJK UNIFIED IDEOGRAPH
+ {0xF7C4, 0x82D4}, //16426 #CJK UNIFIED IDEOGRAPH
+ {0xF7C5, 0x8DC6}, //16427 #CJK UNIFIED IDEOGRAPH
+ {0xF7C6, 0x90B0}, //16428 #CJK UNIFIED IDEOGRAPH
+ {0xF7C7, 0x98B1}, //16429 #CJK UNIFIED IDEOGRAPH
+ {0xF7C8, 0xFA04}, //16430 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF7C9, 0x64C7}, //16431 #CJK UNIFIED IDEOGRAPH
+ {0xF7CA, 0x6FA4}, //16432 #CJK UNIFIED IDEOGRAPH
+ {0xF7CB, 0x6491}, //16433 #CJK UNIFIED IDEOGRAPH
+ {0xF7CC, 0x6504}, //16434 #CJK UNIFIED IDEOGRAPH
+ {0xF7CD, 0x514E}, //16435 #CJK UNIFIED IDEOGRAPH
+ {0xF7CE, 0x5410}, //16436 #CJK UNIFIED IDEOGRAPH
+ {0xF7CF, 0x571F}, //16437 #CJK UNIFIED IDEOGRAPH
+ {0xF7D0, 0x8A0E}, //16438 #CJK UNIFIED IDEOGRAPH
+ {0xF7D1, 0x615F}, //16439 #CJK UNIFIED IDEOGRAPH
+ {0xF7D2, 0x6876}, //16440 #CJK UNIFIED IDEOGRAPH
+ {0xF7D3, 0xFA05}, //16441 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF7D4, 0x75DB}, //16442 #CJK UNIFIED IDEOGRAPH
+ {0xF7D5, 0x7B52}, //16443 #CJK UNIFIED IDEOGRAPH
+ {0xF7D6, 0x7D71}, //16444 #CJK UNIFIED IDEOGRAPH
+ {0xF7D7, 0x901A}, //16445 #CJK UNIFIED IDEOGRAPH
+ {0xF7D8, 0x5806}, //16446 #CJK UNIFIED IDEOGRAPH
+ {0xF7D9, 0x69CC}, //16447 #CJK UNIFIED IDEOGRAPH
+ {0xF7DA, 0x817F}, //16448 #CJK UNIFIED IDEOGRAPH
+ {0xF7DB, 0x892A}, //16449 #CJK UNIFIED IDEOGRAPH
+ {0xF7DC, 0x9000}, //16450 #CJK UNIFIED IDEOGRAPH
+ {0xF7DD, 0x9839}, //16451 #CJK UNIFIED IDEOGRAPH
+ {0xF7DE, 0x5078}, //16452 #CJK UNIFIED IDEOGRAPH
+ {0xF7DF, 0x5957}, //16453 #CJK UNIFIED IDEOGRAPH
+ {0xF7E0, 0x59AC}, //16454 #CJK UNIFIED IDEOGRAPH
+ {0xF7E1, 0x6295}, //16455 #CJK UNIFIED IDEOGRAPH
+ {0xF7E2, 0x900F}, //16456 #CJK UNIFIED IDEOGRAPH
+ {0xF7E3, 0x9B2A}, //16457 #CJK UNIFIED IDEOGRAPH
+ {0xF7E4, 0x615D}, //16458 #CJK UNIFIED IDEOGRAPH
+ {0xF7E5, 0x7279}, //16459 #CJK UNIFIED IDEOGRAPH
+ {0xF7E6, 0x95D6}, //16460 #CJK UNIFIED IDEOGRAPH
+ {0xF7E7, 0x5761}, //16461 #CJK UNIFIED IDEOGRAPH
+ {0xF7E8, 0x5A46}, //16462 #CJK UNIFIED IDEOGRAPH
+ {0xF7E9, 0x5DF4}, //16463 #CJK UNIFIED IDEOGRAPH
+ {0xF7EA, 0x628A}, //16464 #CJK UNIFIED IDEOGRAPH
+ {0xF7EB, 0x64AD}, //16465 #CJK UNIFIED IDEOGRAPH
+ {0xF7EC, 0x64FA}, //16466 #CJK UNIFIED IDEOGRAPH
+ {0xF7ED, 0x6777}, //16467 #CJK UNIFIED IDEOGRAPH
+ {0xF7EE, 0x6CE2}, //16468 #CJK UNIFIED IDEOGRAPH
+ {0xF7EF, 0x6D3E}, //16469 #CJK UNIFIED IDEOGRAPH
+ {0xF7F0, 0x722C}, //16470 #CJK UNIFIED IDEOGRAPH
+ {0xF7F1, 0x7436}, //16471 #CJK UNIFIED IDEOGRAPH
+ {0xF7F2, 0x7834}, //16472 #CJK UNIFIED IDEOGRAPH
+ {0xF7F3, 0x7F77}, //16473 #CJK UNIFIED IDEOGRAPH
+ {0xF7F4, 0x82AD}, //16474 #CJK UNIFIED IDEOGRAPH
+ {0xF7F5, 0x8DDB}, //16475 #CJK UNIFIED IDEOGRAPH
+ {0xF7F6, 0x9817}, //16476 #CJK UNIFIED IDEOGRAPH
+ {0xF7F7, 0x5224}, //16477 #CJK UNIFIED IDEOGRAPH
+ {0xF7F8, 0x5742}, //16478 #CJK UNIFIED IDEOGRAPH
+ {0xF7F9, 0x677F}, //16479 #CJK UNIFIED IDEOGRAPH
+ {0xF7FA, 0x7248}, //16480 #CJK UNIFIED IDEOGRAPH
+ {0xF7FB, 0x74E3}, //16481 #CJK UNIFIED IDEOGRAPH
+ {0xF7FC, 0x8CA9}, //16482 #CJK UNIFIED IDEOGRAPH
+ {0xF7FD, 0x8FA6}, //16483 #CJK UNIFIED IDEOGRAPH
+ {0xF7FE, 0x9211}, //16484 #CJK UNIFIED IDEOGRAPH
+ {0xF8A1, 0x962A}, //16485 #CJK UNIFIED IDEOGRAPH
+ {0xF8A2, 0x516B}, //16486 #CJK UNIFIED IDEOGRAPH
+ {0xF8A3, 0x53ED}, //16487 #CJK UNIFIED IDEOGRAPH
+ {0xF8A4, 0x634C}, //16488 #CJK UNIFIED IDEOGRAPH
+ {0xF8A5, 0x4F69}, //16489 #CJK UNIFIED IDEOGRAPH
+ {0xF8A6, 0x5504}, //16490 #CJK UNIFIED IDEOGRAPH
+ {0xF8A7, 0x6096}, //16491 #CJK UNIFIED IDEOGRAPH
+ {0xF8A8, 0x6557}, //16492 #CJK UNIFIED IDEOGRAPH
+ {0xF8A9, 0x6C9B}, //16493 #CJK UNIFIED IDEOGRAPH
+ {0xF8AA, 0x6D7F}, //16494 #CJK UNIFIED IDEOGRAPH
+ {0xF8AB, 0x724C}, //16495 #CJK UNIFIED IDEOGRAPH
+ {0xF8AC, 0x72FD}, //16496 #CJK UNIFIED IDEOGRAPH
+ {0xF8AD, 0x7A17}, //16497 #CJK UNIFIED IDEOGRAPH
+ {0xF8AE, 0x8987}, //16498 #CJK UNIFIED IDEOGRAPH
+ {0xF8AF, 0x8C9D}, //16499 #CJK UNIFIED IDEOGRAPH
+ {0xF8B0, 0x5F6D}, //16500 #CJK UNIFIED IDEOGRAPH
+ {0xF8B1, 0x6F8E}, //16501 #CJK UNIFIED IDEOGRAPH
+ {0xF8B2, 0x70F9}, //16502 #CJK UNIFIED IDEOGRAPH
+ {0xF8B3, 0x81A8}, //16503 #CJK UNIFIED IDEOGRAPH
+ {0xF8B4, 0x610E}, //16504 #CJK UNIFIED IDEOGRAPH
+ {0xF8B5, 0x4FBF}, //16505 #CJK UNIFIED IDEOGRAPH
+ {0xF8B6, 0x504F}, //16506 #CJK UNIFIED IDEOGRAPH
+ {0xF8B7, 0x6241}, //16507 #CJK UNIFIED IDEOGRAPH
+ {0xF8B8, 0x7247}, //16508 #CJK UNIFIED IDEOGRAPH
+ {0xF8B9, 0x7BC7}, //16509 #CJK UNIFIED IDEOGRAPH
+ {0xF8BA, 0x7DE8}, //16510 #CJK UNIFIED IDEOGRAPH
+ {0xF8BB, 0x7FE9}, //16511 #CJK UNIFIED IDEOGRAPH
+ {0xF8BC, 0x904D}, //16512 #CJK UNIFIED IDEOGRAPH
+ {0xF8BD, 0x97AD}, //16513 #CJK UNIFIED IDEOGRAPH
+ {0xF8BE, 0x9A19}, //16514 #CJK UNIFIED IDEOGRAPH
+ {0xF8BF, 0x8CB6}, //16515 #CJK UNIFIED IDEOGRAPH
+ {0xF8C0, 0x576A}, //16516 #CJK UNIFIED IDEOGRAPH
+ {0xF8C1, 0x5E73}, //16517 #CJK UNIFIED IDEOGRAPH
+ {0xF8C2, 0x67B0}, //16518 #CJK UNIFIED IDEOGRAPH
+ {0xF8C3, 0x840D}, //16519 #CJK UNIFIED IDEOGRAPH
+ {0xF8C4, 0x8A55}, //16520 #CJK UNIFIED IDEOGRAPH
+ {0xF8C5, 0x5420}, //16521 #CJK UNIFIED IDEOGRAPH
+ {0xF8C6, 0x5B16}, //16522 #CJK UNIFIED IDEOGRAPH
+ {0xF8C7, 0x5E63}, //16523 #CJK UNIFIED IDEOGRAPH
+ {0xF8C8, 0x5EE2}, //16524 #CJK UNIFIED IDEOGRAPH
+ {0xF8C9, 0x5F0A}, //16525 #CJK UNIFIED IDEOGRAPH
+ {0xF8CA, 0x6583}, //16526 #CJK UNIFIED IDEOGRAPH
+ {0xF8CB, 0x80BA}, //16527 #CJK UNIFIED IDEOGRAPH
+ {0xF8CC, 0x853D}, //16528 #CJK UNIFIED IDEOGRAPH
+ {0xF8CD, 0x9589}, //16529 #CJK UNIFIED IDEOGRAPH
+ {0xF8CE, 0x965B}, //16530 #CJK UNIFIED IDEOGRAPH
+ {0xF8CF, 0x4F48}, //16531 #CJK UNIFIED IDEOGRAPH
+ {0xF8D0, 0x5305}, //16532 #CJK UNIFIED IDEOGRAPH
+ {0xF8D1, 0x530D}, //16533 #CJK UNIFIED IDEOGRAPH
+ {0xF8D2, 0x530F}, //16534 #CJK UNIFIED IDEOGRAPH
+ {0xF8D3, 0x5486}, //16535 #CJK UNIFIED IDEOGRAPH
+ {0xF8D4, 0x54FA}, //16536 #CJK UNIFIED IDEOGRAPH
+ {0xF8D5, 0x5703}, //16537 #CJK UNIFIED IDEOGRAPH
+ {0xF8D6, 0x5E03}, //16538 #CJK UNIFIED IDEOGRAPH
+ {0xF8D7, 0x6016}, //16539 #CJK UNIFIED IDEOGRAPH
+ {0xF8D8, 0x629B}, //16540 #CJK UNIFIED IDEOGRAPH
+ {0xF8D9, 0x62B1}, //16541 #CJK UNIFIED IDEOGRAPH
+ {0xF8DA, 0x6355}, //16542 #CJK UNIFIED IDEOGRAPH
+ {0xF8DB, 0xFA06}, //16543 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF8DC, 0x6CE1}, //16544 #CJK UNIFIED IDEOGRAPH
+ {0xF8DD, 0x6D66}, //16545 #CJK UNIFIED IDEOGRAPH
+ {0xF8DE, 0x75B1}, //16546 #CJK UNIFIED IDEOGRAPH
+ {0xF8DF, 0x7832}, //16547 #CJK UNIFIED IDEOGRAPH
+ {0xF8E0, 0x80DE}, //16548 #CJK UNIFIED IDEOGRAPH
+ {0xF8E1, 0x812F}, //16549 #CJK UNIFIED IDEOGRAPH
+ {0xF8E2, 0x82DE}, //16550 #CJK UNIFIED IDEOGRAPH
+ {0xF8E3, 0x8461}, //16551 #CJK UNIFIED IDEOGRAPH
+ {0xF8E4, 0x84B2}, //16552 #CJK UNIFIED IDEOGRAPH
+ {0xF8E5, 0x888D}, //16553 #CJK UNIFIED IDEOGRAPH
+ {0xF8E6, 0x8912}, //16554 #CJK UNIFIED IDEOGRAPH
+ {0xF8E7, 0x900B}, //16555 #CJK UNIFIED IDEOGRAPH
+ {0xF8E8, 0x92EA}, //16556 #CJK UNIFIED IDEOGRAPH
+ {0xF8E9, 0x98FD}, //16557 #CJK UNIFIED IDEOGRAPH
+ {0xF8EA, 0x9B91}, //16558 #CJK UNIFIED IDEOGRAPH
+ {0xF8EB, 0x5E45}, //16559 #CJK UNIFIED IDEOGRAPH
+ {0xF8EC, 0x66B4}, //16560 #CJK UNIFIED IDEOGRAPH
+ {0xF8ED, 0x66DD}, //16561 #CJK UNIFIED IDEOGRAPH
+ {0xF8EE, 0x7011}, //16562 #CJK UNIFIED IDEOGRAPH
+ {0xF8EF, 0x7206}, //16563 #CJK UNIFIED IDEOGRAPH
+ {0xF8F0, 0xFA07}, //16564 #CJK COMPATIBILITY IDEOGRAPH
+ {0xF8F1, 0x4FF5}, //16565 #CJK UNIFIED IDEOGRAPH
+ {0xF8F2, 0x527D}, //16566 #CJK UNIFIED IDEOGRAPH
+ {0xF8F3, 0x5F6A}, //16567 #CJK UNIFIED IDEOGRAPH
+ {0xF8F4, 0x6153}, //16568 #CJK UNIFIED IDEOGRAPH
+ {0xF8F5, 0x6753}, //16569 #CJK UNIFIED IDEOGRAPH
+ {0xF8F6, 0x6A19}, //16570 #CJK UNIFIED IDEOGRAPH
+ {0xF8F7, 0x6F02}, //16571 #CJK UNIFIED IDEOGRAPH
+ {0xF8F8, 0x74E2}, //16572 #CJK UNIFIED IDEOGRAPH
+ {0xF8F9, 0x7968}, //16573 #CJK UNIFIED IDEOGRAPH
+ {0xF8FA, 0x8868}, //16574 #CJK UNIFIED IDEOGRAPH
+ {0xF8FB, 0x8C79}, //16575 #CJK UNIFIED IDEOGRAPH
+ {0xF8FC, 0x98C7}, //16576 #CJK UNIFIED IDEOGRAPH
+ {0xF8FD, 0x98C4}, //16577 #CJK UNIFIED IDEOGRAPH
+ {0xF8FE, 0x9A43}, //16578 #CJK UNIFIED IDEOGRAPH
+ {0xF9A1, 0x54C1}, //16579 #CJK UNIFIED IDEOGRAPH
+ {0xF9A2, 0x7A1F}, //16580 #CJK UNIFIED IDEOGRAPH
+ {0xF9A3, 0x6953}, //16581 #CJK UNIFIED IDEOGRAPH
+ {0xF9A4, 0x8AF7}, //16582 #CJK UNIFIED IDEOGRAPH
+ {0xF9A5, 0x8C4A}, //16583 #CJK UNIFIED IDEOGRAPH
+ {0xF9A6, 0x98A8}, //16584 #CJK UNIFIED IDEOGRAPH
+ {0xF9A7, 0x99AE}, //16585 #CJK UNIFIED IDEOGRAPH
+ {0xF9A8, 0x5F7C}, //16586 #CJK UNIFIED IDEOGRAPH
+ {0xF9A9, 0x62AB}, //16587 #CJK UNIFIED IDEOGRAPH
+ {0xF9AA, 0x75B2}, //16588 #CJK UNIFIED IDEOGRAPH
+ {0xF9AB, 0x76AE}, //16589 #CJK UNIFIED IDEOGRAPH
+ {0xF9AC, 0x88AB}, //16590 #CJK UNIFIED IDEOGRAPH
+ {0xF9AD, 0x907F}, //16591 #CJK UNIFIED IDEOGRAPH
+ {0xF9AE, 0x9642}, //16592 #CJK UNIFIED IDEOGRAPH
+ {0xF9AF, 0x5339}, //16593 #CJK UNIFIED IDEOGRAPH
+ {0xF9B0, 0x5F3C}, //16594 #CJK UNIFIED IDEOGRAPH
+ {0xF9B1, 0x5FC5}, //16595 #CJK UNIFIED IDEOGRAPH
+ {0xF9B2, 0x6CCC}, //16596 #CJK UNIFIED IDEOGRAPH
+ {0xF9B3, 0x73CC}, //16597 #CJK UNIFIED IDEOGRAPH
+ {0xF9B4, 0x7562}, //16598 #CJK UNIFIED IDEOGRAPH
+ {0xF9B5, 0x758B}, //16599 #CJK UNIFIED IDEOGRAPH
+ {0xF9B6, 0x7B46}, //16600 #CJK UNIFIED IDEOGRAPH
+ {0xF9B7, 0x82FE}, //16601 #CJK UNIFIED IDEOGRAPH
+ {0xF9B8, 0x999D}, //16602 #CJK UNIFIED IDEOGRAPH
+ {0xF9B9, 0x4E4F}, //16603 #CJK UNIFIED IDEOGRAPH
+ {0xF9BA, 0x903C}, //16604 #CJK UNIFIED IDEOGRAPH
+ {0xF9BB, 0x4E0B}, //16605 #CJK UNIFIED IDEOGRAPH
+ {0xF9BC, 0x4F55}, //16606 #CJK UNIFIED IDEOGRAPH
+ {0xF9BD, 0x53A6}, //16607 #CJK UNIFIED IDEOGRAPH
+ {0xF9BE, 0x590F}, //16608 #CJK UNIFIED IDEOGRAPH
+ {0xF9BF, 0x5EC8}, //16609 #CJK UNIFIED IDEOGRAPH
+ {0xF9C0, 0x6630}, //16610 #CJK UNIFIED IDEOGRAPH
+ {0xF9C1, 0x6CB3}, //16611 #CJK UNIFIED IDEOGRAPH
+ {0xF9C2, 0x7455}, //16612 #CJK UNIFIED IDEOGRAPH
+ {0xF9C3, 0x8377}, //16613 #CJK UNIFIED IDEOGRAPH
+ {0xF9C4, 0x8766}, //16614 #CJK UNIFIED IDEOGRAPH
+ {0xF9C5, 0x8CC0}, //16615 #CJK UNIFIED IDEOGRAPH
+ {0xF9C6, 0x9050}, //16616 #CJK UNIFIED IDEOGRAPH
+ {0xF9C7, 0x971E}, //16617 #CJK UNIFIED IDEOGRAPH
+ {0xF9C8, 0x9C15}, //16618 #CJK UNIFIED IDEOGRAPH
+ {0xF9C9, 0x58D1}, //16619 #CJK UNIFIED IDEOGRAPH
+ {0xF9CA, 0x5B78}, //16620 #CJK UNIFIED IDEOGRAPH
+ {0xF9CB, 0x8650}, //16621 #CJK UNIFIED IDEOGRAPH
+ {0xF9CC, 0x8B14}, //16622 #CJK UNIFIED IDEOGRAPH
+ {0xF9CD, 0x9DB4}, //16623 #CJK UNIFIED IDEOGRAPH
+ {0xF9CE, 0x5BD2}, //16624 #CJK UNIFIED IDEOGRAPH
+ {0xF9CF, 0x6068}, //16625 #CJK UNIFIED IDEOGRAPH
+ {0xF9D0, 0x608D}, //16626 #CJK UNIFIED IDEOGRAPH
+ {0xF9D1, 0x65F1}, //16627 #CJK UNIFIED IDEOGRAPH
+ {0xF9D2, 0x6C57}, //16628 #CJK UNIFIED IDEOGRAPH
+ {0xF9D3, 0x6F22}, //16629 #CJK UNIFIED IDEOGRAPH
+ {0xF9D4, 0x6FA3}, //16630 #CJK UNIFIED IDEOGRAPH
+ {0xF9D5, 0x701A}, //16631 #CJK UNIFIED IDEOGRAPH
+ {0xF9D6, 0x7F55}, //16632 #CJK UNIFIED IDEOGRAPH
+ {0xF9D7, 0x7FF0}, //16633 #CJK UNIFIED IDEOGRAPH
+ {0xF9D8, 0x9591}, //16634 #CJK UNIFIED IDEOGRAPH
+ {0xF9D9, 0x9592}, //16635 #CJK UNIFIED IDEOGRAPH
+ {0xF9DA, 0x9650}, //16636 #CJK UNIFIED IDEOGRAPH
+ {0xF9DB, 0x97D3}, //16637 #CJK UNIFIED IDEOGRAPH
+ {0xF9DC, 0x5272}, //16638 #CJK UNIFIED IDEOGRAPH
+ {0xF9DD, 0x8F44}, //16639 #CJK UNIFIED IDEOGRAPH
+ {0xF9DE, 0x51FD}, //16640 #CJK UNIFIED IDEOGRAPH
+ {0xF9DF, 0x542B}, //16641 #CJK UNIFIED IDEOGRAPH
+ {0xF9E0, 0x54B8}, //16642 #CJK UNIFIED IDEOGRAPH
+ {0xF9E1, 0x5563}, //16643 #CJK UNIFIED IDEOGRAPH
+ {0xF9E2, 0x558A}, //16644 #CJK UNIFIED IDEOGRAPH
+ {0xF9E3, 0x6ABB}, //16645 #CJK UNIFIED IDEOGRAPH
+ {0xF9E4, 0x6DB5}, //16646 #CJK UNIFIED IDEOGRAPH
+ {0xF9E5, 0x7DD8}, //16647 #CJK UNIFIED IDEOGRAPH
+ {0xF9E6, 0x8266}, //16648 #CJK UNIFIED IDEOGRAPH
+ {0xF9E7, 0x929C}, //16649 #CJK UNIFIED IDEOGRAPH
+ {0xF9E8, 0x9677}, //16650 #CJK UNIFIED IDEOGRAPH
+ {0xF9E9, 0x9E79}, //16651 #CJK UNIFIED IDEOGRAPH
+ {0xF9EA, 0x5408}, //16652 #CJK UNIFIED IDEOGRAPH
+ {0xF9EB, 0x54C8}, //16653 #CJK UNIFIED IDEOGRAPH
+ {0xF9EC, 0x76D2}, //16654 #CJK UNIFIED IDEOGRAPH
+ {0xF9ED, 0x86E4}, //16655 #CJK UNIFIED IDEOGRAPH
+ {0xF9EE, 0x95A4}, //16656 #CJK UNIFIED IDEOGRAPH
+ {0xF9EF, 0x95D4}, //16657 #CJK UNIFIED IDEOGRAPH
+ {0xF9F0, 0x965C}, //16658 #CJK UNIFIED IDEOGRAPH
+ {0xF9F1, 0x4EA2}, //16659 #CJK UNIFIED IDEOGRAPH
+ {0xF9F2, 0x4F09}, //16660 #CJK UNIFIED IDEOGRAPH
+ {0xF9F3, 0x59EE}, //16661 #CJK UNIFIED IDEOGRAPH
+ {0xF9F4, 0x5AE6}, //16662 #CJK UNIFIED IDEOGRAPH
+ {0xF9F5, 0x5DF7}, //16663 #CJK UNIFIED IDEOGRAPH
+ {0xF9F6, 0x6052}, //16664 #CJK UNIFIED IDEOGRAPH
+ {0xF9F7, 0x6297}, //16665 #CJK UNIFIED IDEOGRAPH
+ {0xF9F8, 0x676D}, //16666 #CJK UNIFIED IDEOGRAPH
+ {0xF9F9, 0x6841}, //16667 #CJK UNIFIED IDEOGRAPH
+ {0xF9FA, 0x6C86}, //16668 #CJK UNIFIED IDEOGRAPH
+ {0xF9FB, 0x6E2F}, //16669 #CJK UNIFIED IDEOGRAPH
+ {0xF9FC, 0x7F38}, //16670 #CJK UNIFIED IDEOGRAPH
+ {0xF9FD, 0x809B}, //16671 #CJK UNIFIED IDEOGRAPH
+ {0xF9FE, 0x822A}, //16672 #CJK UNIFIED IDEOGRAPH
+ {0xFAA1, 0xFA08}, //16673 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAA2, 0xFA09}, //16674 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAA3, 0x9805}, //16675 #CJK UNIFIED IDEOGRAPH
+ {0xFAA4, 0x4EA5}, //16676 #CJK UNIFIED IDEOGRAPH
+ {0xFAA5, 0x5055}, //16677 #CJK UNIFIED IDEOGRAPH
+ {0xFAA6, 0x54B3}, //16678 #CJK UNIFIED IDEOGRAPH
+ {0xFAA7, 0x5793}, //16679 #CJK UNIFIED IDEOGRAPH
+ {0xFAA8, 0x595A}, //16680 #CJK UNIFIED IDEOGRAPH
+ {0xFAA9, 0x5B69}, //16681 #CJK UNIFIED IDEOGRAPH
+ {0xFAAA, 0x5BB3}, //16682 #CJK UNIFIED IDEOGRAPH
+ {0xFAAB, 0x61C8}, //16683 #CJK UNIFIED IDEOGRAPH
+ {0xFAAC, 0x6977}, //16684 #CJK UNIFIED IDEOGRAPH
+ {0xFAAD, 0x6D77}, //16685 #CJK UNIFIED IDEOGRAPH
+ {0xFAAE, 0x7023}, //16686 #CJK UNIFIED IDEOGRAPH
+ {0xFAAF, 0x87F9}, //16687 #CJK UNIFIED IDEOGRAPH
+ {0xFAB0, 0x89E3}, //16688 #CJK UNIFIED IDEOGRAPH
+ {0xFAB1, 0x8A72}, //16689 #CJK UNIFIED IDEOGRAPH
+ {0xFAB2, 0x8AE7}, //16690 #CJK UNIFIED IDEOGRAPH
+ {0xFAB3, 0x9082}, //16691 #CJK UNIFIED IDEOGRAPH
+ {0xFAB4, 0x99ED}, //16692 #CJK UNIFIED IDEOGRAPH
+ {0xFAB5, 0x9AB8}, //16693 #CJK UNIFIED IDEOGRAPH
+ {0xFAB6, 0x52BE}, //16694 #CJK UNIFIED IDEOGRAPH
+ {0xFAB7, 0x6838}, //16695 #CJK UNIFIED IDEOGRAPH
+ {0xFAB8, 0x5016}, //16696 #CJK UNIFIED IDEOGRAPH
+ {0xFAB9, 0x5E78}, //16697 #CJK UNIFIED IDEOGRAPH
+ {0xFABA, 0x674F}, //16698 #CJK UNIFIED IDEOGRAPH
+ {0xFABB, 0x8347}, //16699 #CJK UNIFIED IDEOGRAPH
+ {0xFABC, 0x884C}, //16700 #CJK UNIFIED IDEOGRAPH
+ {0xFABD, 0x4EAB}, //16701 #CJK UNIFIED IDEOGRAPH
+ {0xFABE, 0x5411}, //16702 #CJK UNIFIED IDEOGRAPH
+ {0xFABF, 0x56AE}, //16703 #CJK UNIFIED IDEOGRAPH
+ {0xFAC0, 0x73E6}, //16704 #CJK UNIFIED IDEOGRAPH
+ {0xFAC1, 0x9115}, //16705 #CJK UNIFIED IDEOGRAPH
+ {0xFAC2, 0x97FF}, //16706 #CJK UNIFIED IDEOGRAPH
+ {0xFAC3, 0x9909}, //16707 #CJK UNIFIED IDEOGRAPH
+ {0xFAC4, 0x9957}, //16708 #CJK UNIFIED IDEOGRAPH
+ {0xFAC5, 0x9999}, //16709 #CJK UNIFIED IDEOGRAPH
+ {0xFAC6, 0x5653}, //16710 #CJK UNIFIED IDEOGRAPH
+ {0xFAC7, 0x589F}, //16711 #CJK UNIFIED IDEOGRAPH
+ {0xFAC8, 0x865B}, //16712 #CJK UNIFIED IDEOGRAPH
+ {0xFAC9, 0x8A31}, //16713 #CJK UNIFIED IDEOGRAPH
+ {0xFACA, 0x61B2}, //16714 #CJK UNIFIED IDEOGRAPH
+ {0xFACB, 0x6AF6}, //16715 #CJK UNIFIED IDEOGRAPH
+ {0xFACC, 0x737B}, //16716 #CJK UNIFIED IDEOGRAPH
+ {0xFACD, 0x8ED2}, //16717 #CJK UNIFIED IDEOGRAPH
+ {0xFACE, 0x6B47}, //16718 #CJK UNIFIED IDEOGRAPH
+ {0xFACF, 0x96AA}, //16719 #CJK UNIFIED IDEOGRAPH
+ {0xFAD0, 0x9A57}, //16720 #CJK UNIFIED IDEOGRAPH
+ {0xFAD1, 0x5955}, //16721 #CJK UNIFIED IDEOGRAPH
+ {0xFAD2, 0x7200}, //16722 #CJK UNIFIED IDEOGRAPH
+ {0xFAD3, 0x8D6B}, //16723 #CJK UNIFIED IDEOGRAPH
+ {0xFAD4, 0x9769}, //16724 #CJK UNIFIED IDEOGRAPH
+ {0xFAD5, 0x4FD4}, //16725 #CJK UNIFIED IDEOGRAPH
+ {0xFAD6, 0x5CF4}, //16726 #CJK UNIFIED IDEOGRAPH
+ {0xFAD7, 0x5F26}, //16727 #CJK UNIFIED IDEOGRAPH
+ {0xFAD8, 0x61F8}, //16728 #CJK UNIFIED IDEOGRAPH
+ {0xFAD9, 0x665B}, //16729 #CJK UNIFIED IDEOGRAPH
+ {0xFADA, 0x6CEB}, //16730 #CJK UNIFIED IDEOGRAPH
+ {0xFADB, 0x70AB}, //16731 #CJK UNIFIED IDEOGRAPH
+ {0xFADC, 0x7384}, //16732 #CJK UNIFIED IDEOGRAPH
+ {0xFADD, 0x73B9}, //16733 #CJK UNIFIED IDEOGRAPH
+ {0xFADE, 0x73FE}, //16734 #CJK UNIFIED IDEOGRAPH
+ {0xFADF, 0x7729}, //16735 #CJK UNIFIED IDEOGRAPH
+ {0xFAE0, 0x774D}, //16736 #CJK UNIFIED IDEOGRAPH
+ {0xFAE1, 0x7D43}, //16737 #CJK UNIFIED IDEOGRAPH
+ {0xFAE2, 0x7D62}, //16738 #CJK UNIFIED IDEOGRAPH
+ {0xFAE3, 0x7E23}, //16739 #CJK UNIFIED IDEOGRAPH
+ {0xFAE4, 0x8237}, //16740 #CJK UNIFIED IDEOGRAPH
+ {0xFAE5, 0x8852}, //16741 #CJK UNIFIED IDEOGRAPH
+ {0xFAE6, 0xFA0A}, //16742 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFAE7, 0x8CE2}, //16743 #CJK UNIFIED IDEOGRAPH
+ {0xFAE8, 0x9249}, //16744 #CJK UNIFIED IDEOGRAPH
+ {0xFAE9, 0x986F}, //16745 #CJK UNIFIED IDEOGRAPH
+ {0xFAEA, 0x5B51}, //16746 #CJK UNIFIED IDEOGRAPH
+ {0xFAEB, 0x7A74}, //16747 #CJK UNIFIED IDEOGRAPH
+ {0xFAEC, 0x8840}, //16748 #CJK UNIFIED IDEOGRAPH
+ {0xFAED, 0x9801}, //16749 #CJK UNIFIED IDEOGRAPH
+ {0xFAEE, 0x5ACC}, //16750 #CJK UNIFIED IDEOGRAPH
+ {0xFAEF, 0x4FE0}, //16751 #CJK UNIFIED IDEOGRAPH
+ {0xFAF0, 0x5354}, //16752 #CJK UNIFIED IDEOGRAPH
+ {0xFAF1, 0x593E}, //16753 #CJK UNIFIED IDEOGRAPH
+ {0xFAF2, 0x5CFD}, //16754 #CJK UNIFIED IDEOGRAPH
+ {0xFAF3, 0x633E}, //16755 #CJK UNIFIED IDEOGRAPH
+ {0xFAF4, 0x6D79}, //16756 #CJK UNIFIED IDEOGRAPH
+ {0xFAF5, 0x72F9}, //16757 #CJK UNIFIED IDEOGRAPH
+ {0xFAF6, 0x8105}, //16758 #CJK UNIFIED IDEOGRAPH
+ {0xFAF7, 0x8107}, //16759 #CJK UNIFIED IDEOGRAPH
+ {0xFAF8, 0x83A2}, //16760 #CJK UNIFIED IDEOGRAPH
+ {0xFAF9, 0x92CF}, //16761 #CJK UNIFIED IDEOGRAPH
+ {0xFAFA, 0x9830}, //16762 #CJK UNIFIED IDEOGRAPH
+ {0xFAFB, 0x4EA8}, //16763 #CJK UNIFIED IDEOGRAPH
+ {0xFAFC, 0x5144}, //16764 #CJK UNIFIED IDEOGRAPH
+ {0xFAFD, 0x5211}, //16765 #CJK UNIFIED IDEOGRAPH
+ {0xFAFE, 0x578B}, //16766 #CJK UNIFIED IDEOGRAPH
+ {0xFBA1, 0x5F62}, //16767 #CJK UNIFIED IDEOGRAPH
+ {0xFBA2, 0x6CC2}, //16768 #CJK UNIFIED IDEOGRAPH
+ {0xFBA3, 0x6ECE}, //16769 #CJK UNIFIED IDEOGRAPH
+ {0xFBA4, 0x7005}, //16770 #CJK UNIFIED IDEOGRAPH
+ {0xFBA5, 0x7050}, //16771 #CJK UNIFIED IDEOGRAPH
+ {0xFBA6, 0x70AF}, //16772 #CJK UNIFIED IDEOGRAPH
+ {0xFBA7, 0x7192}, //16773 #CJK UNIFIED IDEOGRAPH
+ {0xFBA8, 0x73E9}, //16774 #CJK UNIFIED IDEOGRAPH
+ {0xFBA9, 0x7469}, //16775 #CJK UNIFIED IDEOGRAPH
+ {0xFBAA, 0x834A}, //16776 #CJK UNIFIED IDEOGRAPH
+ {0xFBAB, 0x87A2}, //16777 #CJK UNIFIED IDEOGRAPH
+ {0xFBAC, 0x8861}, //16778 #CJK UNIFIED IDEOGRAPH
+ {0xFBAD, 0x9008}, //16779 #CJK UNIFIED IDEOGRAPH
+ {0xFBAE, 0x90A2}, //16780 #CJK UNIFIED IDEOGRAPH
+ {0xFBAF, 0x93A3}, //16781 #CJK UNIFIED IDEOGRAPH
+ {0xFBB0, 0x99A8}, //16782 #CJK UNIFIED IDEOGRAPH
+ {0xFBB1, 0x516E}, //16783 #CJK UNIFIED IDEOGRAPH
+ {0xFBB2, 0x5F57}, //16784 #CJK UNIFIED IDEOGRAPH
+ {0xFBB3, 0x60E0}, //16785 #CJK UNIFIED IDEOGRAPH
+ {0xFBB4, 0x6167}, //16786 #CJK UNIFIED IDEOGRAPH
+ {0xFBB5, 0x66B3}, //16787 #CJK UNIFIED IDEOGRAPH
+ {0xFBB6, 0x8559}, //16788 #CJK UNIFIED IDEOGRAPH
+ {0xFBB7, 0x8E4A}, //16789 #CJK UNIFIED IDEOGRAPH
+ {0xFBB8, 0x91AF}, //16790 #CJK UNIFIED IDEOGRAPH
+ {0xFBB9, 0x978B}, //16791 #CJK UNIFIED IDEOGRAPH
+ {0xFBBA, 0x4E4E}, //16792 #CJK UNIFIED IDEOGRAPH
+ {0xFBBB, 0x4E92}, //16793 #CJK UNIFIED IDEOGRAPH
+ {0xFBBC, 0x547C}, //16794 #CJK UNIFIED IDEOGRAPH
+ {0xFBBD, 0x58D5}, //16795 #CJK UNIFIED IDEOGRAPH
+ {0xFBBE, 0x58FA}, //16796 #CJK UNIFIED IDEOGRAPH
+ {0xFBBF, 0x597D}, //16797 #CJK UNIFIED IDEOGRAPH
+ {0xFBC0, 0x5CB5}, //16798 #CJK UNIFIED IDEOGRAPH
+ {0xFBC1, 0x5F27}, //16799 #CJK UNIFIED IDEOGRAPH
+ {0xFBC2, 0x6236}, //16800 #CJK UNIFIED IDEOGRAPH
+ {0xFBC3, 0x6248}, //16801 #CJK UNIFIED IDEOGRAPH
+ {0xFBC4, 0x660A}, //16802 #CJK UNIFIED IDEOGRAPH
+ {0xFBC5, 0x6667}, //16803 #CJK UNIFIED IDEOGRAPH
+ {0xFBC6, 0x6BEB}, //16804 #CJK UNIFIED IDEOGRAPH
+ {0xFBC7, 0x6D69}, //16805 #CJK UNIFIED IDEOGRAPH
+ {0xFBC8, 0x6DCF}, //16806 #CJK UNIFIED IDEOGRAPH
+ {0xFBC9, 0x6E56}, //16807 #CJK UNIFIED IDEOGRAPH
+ {0xFBCA, 0x6EF8}, //16808 #CJK UNIFIED IDEOGRAPH
+ {0xFBCB, 0x6F94}, //16809 #CJK UNIFIED IDEOGRAPH
+ {0xFBCC, 0x6FE0}, //16810 #CJK UNIFIED IDEOGRAPH
+ {0xFBCD, 0x6FE9}, //16811 #CJK UNIFIED IDEOGRAPH
+ {0xFBCE, 0x705D}, //16812 #CJK UNIFIED IDEOGRAPH
+ {0xFBCF, 0x72D0}, //16813 #CJK UNIFIED IDEOGRAPH
+ {0xFBD0, 0x7425}, //16814 #CJK UNIFIED IDEOGRAPH
+ {0xFBD1, 0x745A}, //16815 #CJK UNIFIED IDEOGRAPH
+ {0xFBD2, 0x74E0}, //16816 #CJK UNIFIED IDEOGRAPH
+ {0xFBD3, 0x7693}, //16817 #CJK UNIFIED IDEOGRAPH
+ {0xFBD4, 0x795C}, //16818 #CJK UNIFIED IDEOGRAPH
+ {0xFBD5, 0x7CCA}, //16819 #CJK UNIFIED IDEOGRAPH
+ {0xFBD6, 0x7E1E}, //16820 #CJK UNIFIED IDEOGRAPH
+ {0xFBD7, 0x80E1}, //16821 #CJK UNIFIED IDEOGRAPH
+ {0xFBD8, 0x82A6}, //16822 #CJK UNIFIED IDEOGRAPH
+ {0xFBD9, 0x846B}, //16823 #CJK UNIFIED IDEOGRAPH
+ {0xFBDA, 0x84BF}, //16824 #CJK UNIFIED IDEOGRAPH
+ {0xFBDB, 0x864E}, //16825 #CJK UNIFIED IDEOGRAPH
+ {0xFBDC, 0x865F}, //16826 #CJK UNIFIED IDEOGRAPH
+ {0xFBDD, 0x8774}, //16827 #CJK UNIFIED IDEOGRAPH
+ {0xFBDE, 0x8B77}, //16828 #CJK UNIFIED IDEOGRAPH
+ {0xFBDF, 0x8C6A}, //16829 #CJK UNIFIED IDEOGRAPH
+ {0xFBE0, 0x93AC}, //16830 #CJK UNIFIED IDEOGRAPH
+ {0xFBE1, 0x9800}, //16831 #CJK UNIFIED IDEOGRAPH
+ {0xFBE2, 0x9865}, //16832 #CJK UNIFIED IDEOGRAPH
+ {0xFBE3, 0x60D1}, //16833 #CJK UNIFIED IDEOGRAPH
+ {0xFBE4, 0x6216}, //16834 #CJK UNIFIED IDEOGRAPH
+ {0xFBE5, 0x9177}, //16835 #CJK UNIFIED IDEOGRAPH
+ {0xFBE6, 0x5A5A}, //16836 #CJK UNIFIED IDEOGRAPH
+ {0xFBE7, 0x660F}, //16837 #CJK UNIFIED IDEOGRAPH
+ {0xFBE8, 0x6DF7}, //16838 #CJK UNIFIED IDEOGRAPH
+ {0xFBE9, 0x6E3E}, //16839 #CJK UNIFIED IDEOGRAPH
+ {0xFBEA, 0x743F}, //16840 #CJK UNIFIED IDEOGRAPH
+ {0xFBEB, 0x9B42}, //16841 #CJK UNIFIED IDEOGRAPH
+ {0xFBEC, 0x5FFD}, //16842 #CJK UNIFIED IDEOGRAPH
+ {0xFBED, 0x60DA}, //16843 #CJK UNIFIED IDEOGRAPH
+ {0xFBEE, 0x7B0F}, //16844 #CJK UNIFIED IDEOGRAPH
+ {0xFBEF, 0x54C4}, //16845 #CJK UNIFIED IDEOGRAPH
+ {0xFBF0, 0x5F18}, //16846 #CJK UNIFIED IDEOGRAPH
+ {0xFBF1, 0x6C5E}, //16847 #CJK UNIFIED IDEOGRAPH
+ {0xFBF2, 0x6CD3}, //16848 #CJK UNIFIED IDEOGRAPH
+ {0xFBF3, 0x6D2A}, //16849 #CJK UNIFIED IDEOGRAPH
+ {0xFBF4, 0x70D8}, //16850 #CJK UNIFIED IDEOGRAPH
+ {0xFBF5, 0x7D05}, //16851 #CJK UNIFIED IDEOGRAPH
+ {0xFBF6, 0x8679}, //16852 #CJK UNIFIED IDEOGRAPH
+ {0xFBF7, 0x8A0C}, //16853 #CJK UNIFIED IDEOGRAPH
+ {0xFBF8, 0x9D3B}, //16854 #CJK UNIFIED IDEOGRAPH
+ {0xFBF9, 0x5316}, //16855 #CJK UNIFIED IDEOGRAPH
+ {0xFBFA, 0x548C}, //16856 #CJK UNIFIED IDEOGRAPH
+ {0xFBFB, 0x5B05}, //16857 #CJK UNIFIED IDEOGRAPH
+ {0xFBFC, 0x6A3A}, //16858 #CJK UNIFIED IDEOGRAPH
+ {0xFBFD, 0x706B}, //16859 #CJK UNIFIED IDEOGRAPH
+ {0xFBFE, 0x7575}, //16860 #CJK UNIFIED IDEOGRAPH
+ {0xFCA1, 0x798D}, //16861 #CJK UNIFIED IDEOGRAPH
+ {0xFCA2, 0x79BE}, //16862 #CJK UNIFIED IDEOGRAPH
+ {0xFCA3, 0x82B1}, //16863 #CJK UNIFIED IDEOGRAPH
+ {0xFCA4, 0x83EF}, //16864 #CJK UNIFIED IDEOGRAPH
+ {0xFCA5, 0x8A71}, //16865 #CJK UNIFIED IDEOGRAPH
+ {0xFCA6, 0x8B41}, //16866 #CJK UNIFIED IDEOGRAPH
+ {0xFCA7, 0x8CA8}, //16867 #CJK UNIFIED IDEOGRAPH
+ {0xFCA8, 0x9774}, //16868 #CJK UNIFIED IDEOGRAPH
+ {0xFCA9, 0xFA0B}, //16869 #CJK COMPATIBILITY IDEOGRAPH
+ {0xFCAA, 0x64F4}, //16870 #CJK UNIFIED IDEOGRAPH
+ {0xFCAB, 0x652B}, //16871 #CJK UNIFIED IDEOGRAPH
+ {0xFCAC, 0x78BA}, //16872 #CJK UNIFIED IDEOGRAPH
+ {0xFCAD, 0x78BB}, //16873 #CJK UNIFIED IDEOGRAPH
+ {0xFCAE, 0x7A6B}, //16874 #CJK UNIFIED IDEOGRAPH
+ {0xFCAF, 0x4E38}, //16875 #CJK UNIFIED IDEOGRAPH
+ {0xFCB0, 0x559A}, //16876 #CJK UNIFIED IDEOGRAPH
+ {0xFCB1, 0x5950}, //16877 #CJK UNIFIED IDEOGRAPH
+ {0xFCB2, 0x5BA6}, //16878 #CJK UNIFIED IDEOGRAPH
+ {0xFCB3, 0x5E7B}, //16879 #CJK UNIFIED IDEOGRAPH
+ {0xFCB4, 0x60A3}, //16880 #CJK UNIFIED IDEOGRAPH
+ {0xFCB5, 0x63DB}, //16881 #CJK UNIFIED IDEOGRAPH
+ {0xFCB6, 0x6B61}, //16882 #CJK UNIFIED IDEOGRAPH
+ {0xFCB7, 0x6665}, //16883 #CJK UNIFIED IDEOGRAPH
+ {0xFCB8, 0x6853}, //16884 #CJK UNIFIED IDEOGRAPH
+ {0xFCB9, 0x6E19}, //16885 #CJK UNIFIED IDEOGRAPH
+ {0xFCBA, 0x7165}, //16886 #CJK UNIFIED IDEOGRAPH
+ {0xFCBB, 0x74B0}, //16887 #CJK UNIFIED IDEOGRAPH
+ {0xFCBC, 0x7D08}, //16888 #CJK UNIFIED IDEOGRAPH
+ {0xFCBD, 0x9084}, //16889 #CJK UNIFIED IDEOGRAPH
+ {0xFCBE, 0x9A69}, //16890 #CJK UNIFIED IDEOGRAPH
+ {0xFCBF, 0x9C25}, //16891 #CJK UNIFIED IDEOGRAPH
+ {0xFCC0, 0x6D3B}, //16892 #CJK UNIFIED IDEOGRAPH
+ {0xFCC1, 0x6ED1}, //16893 #CJK UNIFIED IDEOGRAPH
+ {0xFCC2, 0x733E}, //16894 #CJK UNIFIED IDEOGRAPH
+ {0xFCC3, 0x8C41}, //16895 #CJK UNIFIED IDEOGRAPH
+ {0xFCC4, 0x95CA}, //16896 #CJK UNIFIED IDEOGRAPH
+ {0xFCC5, 0x51F0}, //16897 #CJK UNIFIED IDEOGRAPH
+ {0xFCC6, 0x5E4C}, //16898 #CJK UNIFIED IDEOGRAPH
+ {0xFCC7, 0x5FA8}, //16899 #CJK UNIFIED IDEOGRAPH
+ {0xFCC8, 0x604D}, //16900 #CJK UNIFIED IDEOGRAPH
+ {0xFCC9, 0x60F6}, //16901 #CJK UNIFIED IDEOGRAPH
+ {0xFCCA, 0x6130}, //16902 #CJK UNIFIED IDEOGRAPH
+ {0xFCCB, 0x614C}, //16903 #CJK UNIFIED IDEOGRAPH
+ {0xFCCC, 0x6643}, //16904 #CJK UNIFIED IDEOGRAPH
+ {0xFCCD, 0x6644}, //16905 #CJK UNIFIED IDEOGRAPH
+ {0xFCCE, 0x69A5}, //16906 #CJK UNIFIED IDEOGRAPH
+ {0xFCCF, 0x6CC1}, //16907 #CJK UNIFIED IDEOGRAPH
+ {0xFCD0, 0x6E5F}, //16908 #CJK UNIFIED IDEOGRAPH
+ {0xFCD1, 0x6EC9}, //16909 #CJK UNIFIED IDEOGRAPH
+ {0xFCD2, 0x6F62}, //16910 #CJK UNIFIED IDEOGRAPH
+ {0xFCD3, 0x714C}, //16911 #CJK UNIFIED IDEOGRAPH
+ {0xFCD4, 0x749C}, //16912 #CJK UNIFIED IDEOGRAPH
+ {0xFCD5, 0x7687}, //16913 #CJK UNIFIED IDEOGRAPH
+ {0xFCD6, 0x7BC1}, //16914 #CJK UNIFIED IDEOGRAPH
+ {0xFCD7, 0x7C27}, //16915 #CJK UNIFIED IDEOGRAPH
+ {0xFCD8, 0x8352}, //16916 #CJK UNIFIED IDEOGRAPH
+ {0xFCD9, 0x8757}, //16917 #CJK UNIFIED IDEOGRAPH
+ {0xFCDA, 0x9051}, //16918 #CJK UNIFIED IDEOGRAPH
+ {0xFCDB, 0x968D}, //16919 #CJK UNIFIED IDEOGRAPH
+ {0xFCDC, 0x9EC3}, //16920 #CJK UNIFIED IDEOGRAPH
+ {0xFCDD, 0x532F}, //16921 #CJK UNIFIED IDEOGRAPH
+ {0xFCDE, 0x56DE}, //16922 #CJK UNIFIED IDEOGRAPH
+ {0xFCDF, 0x5EFB}, //16923 #CJK UNIFIED IDEOGRAPH
+ {0xFCE0, 0x5F8A}, //16924 #CJK UNIFIED IDEOGRAPH
+ {0xFCE1, 0x6062}, //16925 #CJK UNIFIED IDEOGRAPH
+ {0xFCE2, 0x6094}, //16926 #CJK UNIFIED IDEOGRAPH
+ {0xFCE3, 0x61F7}, //16927 #CJK UNIFIED IDEOGRAPH
+ {0xFCE4, 0x6666}, //16928 #CJK UNIFIED IDEOGRAPH
+ {0xFCE5, 0x6703}, //16929 #CJK UNIFIED IDEOGRAPH
+ {0xFCE6, 0x6A9C}, //16930 #CJK UNIFIED IDEOGRAPH
+ {0xFCE7, 0x6DEE}, //16931 #CJK UNIFIED IDEOGRAPH
+ {0xFCE8, 0x6FAE}, //16932 #CJK UNIFIED IDEOGRAPH
+ {0xFCE9, 0x7070}, //16933 #CJK UNIFIED IDEOGRAPH
+ {0xFCEA, 0x736A}, //16934 #CJK UNIFIED IDEOGRAPH
+ {0xFCEB, 0x7E6A}, //16935 #CJK UNIFIED IDEOGRAPH
+ {0xFCEC, 0x81BE}, //16936 #CJK UNIFIED IDEOGRAPH
+ {0xFCED, 0x8334}, //16937 #CJK UNIFIED IDEOGRAPH
+ {0xFCEE, 0x86D4}, //16938 #CJK UNIFIED IDEOGRAPH
+ {0xFCEF, 0x8AA8}, //16939 #CJK UNIFIED IDEOGRAPH
+ {0xFCF0, 0x8CC4}, //16940 #CJK UNIFIED IDEOGRAPH
+ {0xFCF1, 0x5283}, //16941 #CJK UNIFIED IDEOGRAPH
+ {0xFCF2, 0x7372}, //16942 #CJK UNIFIED IDEOGRAPH
+ {0xFCF3, 0x5B96}, //16943 #CJK UNIFIED IDEOGRAPH
+ {0xFCF4, 0x6A6B}, //16944 #CJK UNIFIED IDEOGRAPH
+ {0xFCF5, 0x9404}, //16945 #CJK UNIFIED IDEOGRAPH
+ {0xFCF6, 0x54EE}, //16946 #CJK UNIFIED IDEOGRAPH
+ {0xFCF7, 0x5686}, //16947 #CJK UNIFIED IDEOGRAPH
+ {0xFCF8, 0x5B5D}, //16948 #CJK UNIFIED IDEOGRAPH
+ {0xFCF9, 0x6548}, //16949 #CJK UNIFIED IDEOGRAPH
+ {0xFCFA, 0x6585}, //16950 #CJK UNIFIED IDEOGRAPH
+ {0xFCFB, 0x66C9}, //16951 #CJK UNIFIED IDEOGRAPH
+ {0xFCFC, 0x689F}, //16952 #CJK UNIFIED IDEOGRAPH
+ {0xFCFD, 0x6D8D}, //16953 #CJK UNIFIED IDEOGRAPH
+ {0xFCFE, 0x6DC6}, //16954 #CJK UNIFIED IDEOGRAPH
+ {0xFDA1, 0x723B}, //16955 #CJK UNIFIED IDEOGRAPH
+ {0xFDA2, 0x80B4}, //16956 #CJK UNIFIED IDEOGRAPH
+ {0xFDA3, 0x9175}, //16957 #CJK UNIFIED IDEOGRAPH
+ {0xFDA4, 0x9A4D}, //16958 #CJK UNIFIED IDEOGRAPH
+ {0xFDA5, 0x4FAF}, //16959 #CJK UNIFIED IDEOGRAPH
+ {0xFDA6, 0x5019}, //16960 #CJK UNIFIED IDEOGRAPH
+ {0xFDA7, 0x539A}, //16961 #CJK UNIFIED IDEOGRAPH
+ {0xFDA8, 0x540E}, //16962 #CJK UNIFIED IDEOGRAPH
+ {0xFDA9, 0x543C}, //16963 #CJK UNIFIED IDEOGRAPH
+ {0xFDAA, 0x5589}, //16964 #CJK UNIFIED IDEOGRAPH
+ {0xFDAB, 0x55C5}, //16965 #CJK UNIFIED IDEOGRAPH
+ {0xFDAC, 0x5E3F}, //16966 #CJK UNIFIED IDEOGRAPH
+ {0xFDAD, 0x5F8C}, //16967 #CJK UNIFIED IDEOGRAPH
+ {0xFDAE, 0x673D}, //16968 #CJK UNIFIED IDEOGRAPH
+ {0xFDAF, 0x7166}, //16969 #CJK UNIFIED IDEOGRAPH
+ {0xFDB0, 0x73DD}, //16970 #CJK UNIFIED IDEOGRAPH
+ {0xFDB1, 0x9005}, //16971 #CJK UNIFIED IDEOGRAPH
+ {0xFDB2, 0x52DB}, //16972 #CJK UNIFIED IDEOGRAPH
+ {0xFDB3, 0x52F3}, //16973 #CJK UNIFIED IDEOGRAPH
+ {0xFDB4, 0x5864}, //16974 #CJK UNIFIED IDEOGRAPH
+ {0xFDB5, 0x58CE}, //16975 #CJK UNIFIED IDEOGRAPH
+ {0xFDB6, 0x7104}, //16976 #CJK UNIFIED IDEOGRAPH
+ {0xFDB7, 0x718F}, //16977 #CJK UNIFIED IDEOGRAPH
+ {0xFDB8, 0x71FB}, //16978 #CJK UNIFIED IDEOGRAPH
+ {0xFDB9, 0x85B0}, //16979 #CJK UNIFIED IDEOGRAPH
+ {0xFDBA, 0x8A13}, //16980 #CJK UNIFIED IDEOGRAPH
+ {0xFDBB, 0x6688}, //16981 #CJK UNIFIED IDEOGRAPH
+ {0xFDBC, 0x85A8}, //16982 #CJK UNIFIED IDEOGRAPH
+ {0xFDBD, 0x55A7}, //16983 #CJK UNIFIED IDEOGRAPH
+ {0xFDBE, 0x6684}, //16984 #CJK UNIFIED IDEOGRAPH
+ {0xFDBF, 0x714A}, //16985 #CJK UNIFIED IDEOGRAPH
+ {0xFDC0, 0x8431}, //16986 #CJK UNIFIED IDEOGRAPH
+ {0xFDC1, 0x5349}, //16987 #CJK UNIFIED IDEOGRAPH
+ {0xFDC2, 0x5599}, //16988 #CJK UNIFIED IDEOGRAPH
+ {0xFDC3, 0x6BC1}, //16989 #CJK UNIFIED IDEOGRAPH
+ {0xFDC4, 0x5F59}, //16990 #CJK UNIFIED IDEOGRAPH
+ {0xFDC5, 0x5FBD}, //16991 #CJK UNIFIED IDEOGRAPH
+ {0xFDC6, 0x63EE}, //16992 #CJK UNIFIED IDEOGRAPH
+ {0xFDC7, 0x6689}, //16993 #CJK UNIFIED IDEOGRAPH
+ {0xFDC8, 0x7147}, //16994 #CJK UNIFIED IDEOGRAPH
+ {0xFDC9, 0x8AF1}, //16995 #CJK UNIFIED IDEOGRAPH
+ {0xFDCA, 0x8F1D}, //16996 #CJK UNIFIED IDEOGRAPH
+ {0xFDCB, 0x9EBE}, //16997 #CJK UNIFIED IDEOGRAPH
+ {0xFDCC, 0x4F11}, //16998 #CJK UNIFIED IDEOGRAPH
+ {0xFDCD, 0x643A}, //16999 #CJK UNIFIED IDEOGRAPH
+ {0xFDCE, 0x70CB}, //17000 #CJK UNIFIED IDEOGRAPH
+ {0xFDCF, 0x7566}, //17001 #CJK UNIFIED IDEOGRAPH
+ {0xFDD0, 0x8667}, //17002 #CJK UNIFIED IDEOGRAPH
+ {0xFDD1, 0x6064}, //17003 #CJK UNIFIED IDEOGRAPH
+ {0xFDD2, 0x8B4E}, //17004 #CJK UNIFIED IDEOGRAPH
+ {0xFDD3, 0x9DF8}, //17005 #CJK UNIFIED IDEOGRAPH
+ {0xFDD4, 0x5147}, //17006 #CJK UNIFIED IDEOGRAPH
+ {0xFDD5, 0x51F6}, //17007 #CJK UNIFIED IDEOGRAPH
+ {0xFDD6, 0x5308}, //17008 #CJK UNIFIED IDEOGRAPH
+ {0xFDD7, 0x6D36}, //17009 #CJK UNIFIED IDEOGRAPH
+ {0xFDD8, 0x80F8}, //17010 #CJK UNIFIED IDEOGRAPH
+ {0xFDD9, 0x9ED1}, //17011 #CJK UNIFIED IDEOGRAPH
+ {0xFDDA, 0x6615}, //17012 #CJK UNIFIED IDEOGRAPH
+ {0xFDDB, 0x6B23}, //17013 #CJK UNIFIED IDEOGRAPH
+ {0xFDDC, 0x7098}, //17014 #CJK UNIFIED IDEOGRAPH
+ {0xFDDD, 0x75D5}, //17015 #CJK UNIFIED IDEOGRAPH
+ {0xFDDE, 0x5403}, //17016 #CJK UNIFIED IDEOGRAPH
+ {0xFDDF, 0x5C79}, //17017 #CJK UNIFIED IDEOGRAPH
+ {0xFDE0, 0x7D07}, //17018 #CJK UNIFIED IDEOGRAPH
+ {0xFDE1, 0x8A16}, //17019 #CJK UNIFIED IDEOGRAPH
+ {0xFDE2, 0x6B20}, //17020 #CJK UNIFIED IDEOGRAPH
+ {0xFDE3, 0x6B3D}, //17021 #CJK UNIFIED IDEOGRAPH
+ {0xFDE4, 0x6B46}, //17022 #CJK UNIFIED IDEOGRAPH
+ {0xFDE5, 0x5438}, //17023 #CJK UNIFIED IDEOGRAPH
+ {0xFDE6, 0x6070}, //17024 #CJK UNIFIED IDEOGRAPH
+ {0xFDE7, 0x6D3D}, //17025 #CJK UNIFIED IDEOGRAPH
+ {0xFDE8, 0x7FD5}, //17026 #CJK UNIFIED IDEOGRAPH
+ {0xFDE9, 0x8208}, //17027 #CJK UNIFIED IDEOGRAPH
+ {0xFDEA, 0x50D6}, //17028 #CJK UNIFIED IDEOGRAPH
+ {0xFDEB, 0x51DE}, //17029 #CJK UNIFIED IDEOGRAPH
+ {0xFDEC, 0x559C}, //17030 #CJK UNIFIED IDEOGRAPH
+ {0xFDED, 0x566B}, //17031 #CJK UNIFIED IDEOGRAPH
+ {0xFDEE, 0x56CD}, //17032 #CJK UNIFIED IDEOGRAPH
+ {0xFDEF, 0x59EC}, //17033 #CJK UNIFIED IDEOGRAPH
+ {0xFDF0, 0x5B09}, //17034 #CJK UNIFIED IDEOGRAPH
+ {0xFDF1, 0x5E0C}, //17035 #CJK UNIFIED IDEOGRAPH
+ {0xFDF2, 0x6199}, //17036 #CJK UNIFIED IDEOGRAPH
+ {0xFDF3, 0x6198}, //17037 #CJK UNIFIED IDEOGRAPH
+ {0xFDF4, 0x6231}, //17038 #CJK UNIFIED IDEOGRAPH
+ {0xFDF5, 0x665E}, //17039 #CJK UNIFIED IDEOGRAPH
+ {0xFDF6, 0x66E6}, //17040 #CJK UNIFIED IDEOGRAPH
+ {0xFDF7, 0x7199}, //17041 #CJK UNIFIED IDEOGRAPH
+ {0xFDF8, 0x71B9}, //17042 #CJK UNIFIED IDEOGRAPH
+ {0xFDF9, 0x71BA}, //17043 #CJK UNIFIED IDEOGRAPH
+ {0xFDFA, 0x72A7}, //17044 #CJK UNIFIED IDEOGRAPH
+ {0xFDFB, 0x79A7}, //17045 #CJK UNIFIED IDEOGRAPH
+ {0xFDFC, 0x7A00}, //17046 #CJK UNIFIED IDEOGRAPH
+ {0xFDFD, 0x7FB2}, //17047 #CJK UNIFIED IDEOGRAPH
+ {0xFDFE, 0x8A70}, //17048 #CJK UNIFIED IDEOGRAPH
+};
+
+#endif // DRW_CPTABLE949_H
diff --git a/lib_dxf/intern/drw_cptable950.h b/lib_dxf/intern/drw_cptable950.h
new file mode 100644
index 0000000..2afb89d
--- /dev/null
+++ b/lib_dxf/intern/drw_cptable950.h
@@ -0,0 +1,13654 @@
+#ifndef DRW_CPTABLE950_H
+#define DRW_CPTABLE950_H
+
+//Chinese (Taiwan, Hong Kong SAR)
+
+//first entry in this table are 0x80
+#define CPOFFSET950 0x80
+#define CPLENGHT950 13503
+#define NOTFOUND950 0x003F
+
+//Table 950 one byte
+static const int DRW_Table950[1] = {
+};
+
+//Table 950 lead byte
+//pairs of start/end in DRW_DoubleTable950
+static const int DRW_LeadTable950[] = {
+ 0, //1#DBCS LEAD BYTE 0x81, empty
+ 0, //2#DBCS LEAD BYTE 0x82, empty
+ 0, //3#DBCS LEAD BYTE 0x83, empty
+ 0, //4#DBCS LEAD BYTE 0x84, empty
+ 0, //5#DBCS LEAD BYTE 0x85, empty
+ 0, //6#DBCS LEAD BYTE 0x86, empty
+ 0, //7#DBCS LEAD BYTE 0x87, empty
+ 0, //8#DBCS LEAD BYTE 0x88, empty
+ 0, //9#DBCS LEAD BYTE 0x89, empty
+ 0, //10#DBCS LEAD BYTE 0x8A, empty
+ 0, //11#DBCS LEAD BYTE 0x8B, empty
+ 0, //12#DBCS LEAD BYTE 0x8C, empty
+ 0, //13#DBCS LEAD BYTE 0x8D, empty
+ 0, //14#DBCS LEAD BYTE 0x8E, empty
+ 0, //15#DBCS LEAD BYTE 0x8F, empty
+ 0, //16#DBCS LEAD BYTE 0x90, empty
+ 0, //17#DBCS LEAD BYTE 0x91, empty
+ 0, //18#DBCS LEAD BYTE 0x92, empty
+ 0, //19#DBCS LEAD BYTE 0x93, empty
+ 0, //20#DBCS LEAD BYTE 0x94, empty
+ 0, //21#DBCS LEAD BYTE 0x95, empty
+ 0, //22#DBCS LEAD BYTE 0x96, empty
+ 0, //23#DBCS LEAD BYTE 0x97, empty
+ 0, //24#DBCS LEAD BYTE 0x98, empty
+ 0, //25#DBCS LEAD BYTE 0x99, empty
+ 0, //26#DBCS LEAD BYTE 0x9A, empty
+ 0, //27#DBCS LEAD BYTE 0x9B, empty
+ 0, //28#DBCS LEAD BYTE 0x9C, empty
+ 0, //29#DBCS LEAD BYTE 0x9D, empty
+ 0, //30#DBCS LEAD BYTE 0x9E, empty
+ 0, //31#DBCS LEAD BYTE 0x9F, empty
+ 0, //32#DBCS LEAD BYTE 0xA0, empty
+ 0, //33#DBCS LEAD BYTE 0xA1
+ 157, //34#DBCS LEAD BYTE 0xA2
+ 314, //35#DBCS LEAD BYTE 0xA3
+ 409, //36#DBCS LEAD BYTE 0xA4
+ 566, //37#DBCS LEAD BYTE 0xA5
+ 723, //38#DBCS LEAD BYTE 0xA6
+ 880, //39#DBCS LEAD BYTE 0xA7
+ 1037, //40#DBCS LEAD BYTE 0xA8
+ 1194, //41#DBCS LEAD BYTE 0xA9
+ 1351, //42#DBCS LEAD BYTE 0xAA
+ 1508, //43#DBCS LEAD BYTE 0xAB
+ 1665, //44#DBCS LEAD BYTE 0xAC
+ 1822, //45#DBCS LEAD BYTE 0xAD
+ 1979, //46#DBCS LEAD BYTE 0xAE
+ 2136, //47#DBCS LEAD BYTE 0xAF
+ 2293, //48#DBCS LEAD BYTE 0xB0
+ 2450, //49#DBCS LEAD BYTE 0xB1
+ 2607, //50#DBCS LEAD BYTE 0xB2
+ 2764, //51#DBCS LEAD BYTE 0xB3
+ 2921, //52#DBCS LEAD BYTE 0xB4
+ 3078, //53#DBCS LEAD BYTE 0xB5
+ 3235, //54#DBCS LEAD BYTE 0xB6
+ 3392, //55#DBCS LEAD BYTE 0xB7
+ 3549, //56#DBCS LEAD BYTE 0xB8
+ 3706, //57#DBCS LEAD BYTE 0xB9
+ 3863, //58#DBCS LEAD BYTE 0xBA
+ 4020, //59#DBCS LEAD BYTE 0xBB
+ 4177, //60#DBCS LEAD BYTE 0xBC
+ 4334, //61#DBCS LEAD BYTE 0xBD
+ 4491, //62#DBCS LEAD BYTE 0xBE
+ 4648, //63#DBCS LEAD BYTE 0xBF
+ 4805, //64#DBCS LEAD BYTE 0xC0
+ 4962, //65#DBCS LEAD BYTE 0xC1
+ 5119, //66#DBCS LEAD BYTE 0xC2
+ 5276, //67#DBCS LEAD BYTE 0xC3
+ 5443, //68#DBCS LEAD BYTE 0xC4
+ 5590, //69#DBCS LEAD BYTE 0xC5
+ 5747, //70#DBCS LEAD BYTE 0xC6
+ 5810, //71#DBCS LEAD BYTE 0xC7, empty
+ 5810, //72#DBCS LEAD BYTE 0xC8, empty
+ 5810, //73#DBCS LEAD BYTE 0xC9
+ 5967, //74#DBCS LEAD BYTE 0xCA
+ 6124, //75#DBCS LEAD BYTE 0xCB
+ 6281, //76#DBCS LEAD BYTE 0xCC
+ 6438, //77#DBCS LEAD BYTE 0xCD
+ 6595, //78#DBCS LEAD BYTE 0xCE
+ 6752, //79#DBCS LEAD BYTE 0xCF
+ 6909, //80#DBCS LEAD BYTE 0xD0
+ 7066, //81#DBCS LEAD BYTE 0xD1
+ 7223, //82#DBCS LEAD BYTE 0xD2
+ 7380, //83#DBCS LEAD BYTE 0xD3
+ 7537, //84#DBCS LEAD BYTE 0xD4
+ 7694, //85#DBCS LEAD BYTE 0xD5
+ 7851, //86#DBCS LEAD BYTE 0xD6
+ 8008, //87#DBCS LEAD BYTE 0xD7
+ 8165, //88#DBCS LEAD BYTE 0xD8
+ 8322, //89#DBCS LEAD BYTE 0xD9
+ 8479, //90#DBCS LEAD BYTE 0xDA
+ 8636, //91#DBCS LEAD BYTE 0xDB
+ 8793, //92#DBCS LEAD BYTE 0xDC
+ 8950, //93#DBCS LEAD BYTE 0xDD
+ 9107, //94#DBCS LEAD BYTE 0xDE
+ 9264, //95#DBCS LEAD BYTE 0xDF
+ 9421, //96#DBCS LEAD BYTE 0xE0
+ 9578, //97#DBCS LEAD BYTE 0xE1
+ 9735, //98#DBCS LEAD BYTE 0xE2
+ 9892, //99#DBCS LEAD BYTE 0xE3
+ 10049, //100#DBCS LEAD BYTE 0xE4
+ 10206, //101#DBCS LEAD BYTE 0xE5
+ 10363, //102#DBCS LEAD BYTE 0xE6
+ 10520, //103#DBCS LEAD BYTE 0xE7
+ 10677, //104#DBCS LEAD BYTE 0xE8
+ 10834, //105#DBCS LEAD BYTE 0xE9
+ 10991, //106#DBCS LEAD BYTE 0xEA
+ 11148, //107#DBCS LEAD BYTE 0xEB
+ 11305, //108#DBCS LEAD BYTE 0xEC
+ 11462, //109#DBCS LEAD BYTE 0xED
+ 11619, //110#DBCS LEAD BYTE 0xEE
+ 11776, //111#DBCS LEAD BYTE 0xEF
+ 11933, //112#DBCS LEAD BYTE 0xF0
+ 12090, //113#DBCS LEAD BYTE 0xF1
+ 12247, //114#DBCS LEAD BYTE 0xF2
+ 12404, //115#DBCS LEAD BYTE 0xF3
+ 12561, //116#DBCS LEAD BYTE 0xF4
+ 12718, //117#DBCS LEAD BYTE 0xF5
+ 12875, //118#DBCS LEAD BYTE 0xF6
+ 13032, //119#DBCS LEAD BYTE 0xF7
+ 13189, //120#DBCS LEAD BYTE 0xF8
+ 13346, //121#DBCS LEAD BYTE 0xF9
+ 13502, //122#DBCS LEAD BYTE 0xFA, empty
+ 13502, //123#DBCS LEAD BYTE 0xFB, empty
+ 13502, //124#DBCS LEAD BYTE 0xFC, empty
+ 13502, //125#DBCS LEAD BYTE 0xFD, empty
+ 13502, //126#DBCS LEAD BYTE 0xFE, empty
+ 13502, //127#UNDEFINED 0xFF, END OF TABLE
+};
+
+//Table 950 tail byte
+static const int DRW_DoubleTable950[][2] = {
+ {0xA140, 0x3000}, //1 #IDEOGRAPHIC SPACE
+ {0xA141, 0xFF0C}, //2 #FULLWIDTH COMMA
+ {0xA142, 0x3001}, //3 #IDEOGRAPHIC COMMA
+ {0xA143, 0x3002}, //4 #IDEOGRAPHIC FULL STOP
+ {0xA144, 0xFF0E}, //5 #FULLWIDTH FULL STOP
+ {0xA145, 0x2027}, //6 #HYPHENATION POINT
+ {0xA146, 0xFF1B}, //7 #FULLWIDTH SEMICOLON
+ {0xA147, 0xFF1A}, //8 #FULLWIDTH COLON
+ {0xA148, 0xFF1F}, //9 #FULLWIDTH QUESTION MARK
+ {0xA149, 0xFF01}, //10 #FULLWIDTH EXCLAMATION MARK
+ {0xA14A, 0xFE30}, //11 #PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ {0xA14B, 0x2026}, //12 #HORIZONTAL ELLIPSIS
+ {0xA14C, 0x2025}, //13 #TWO DOT LEADER
+ {0xA14D, 0xFE50}, //14 #SMALL COMMA
+ {0xA14E, 0xFE51}, //15 #SMALL IDEOGRAPHIC COMMA
+ {0xA14F, 0xFE52}, //16 #SMALL FULL STOP
+ {0xA150, 0x00B7}, //17 #MIDDLE DOT
+ {0xA151, 0xFE54}, //18 #SMALL SEMICOLON
+ {0xA152, 0xFE55}, //19 #SMALL COLON
+ {0xA153, 0xFE56}, //20 #SMALL QUESTION MARK
+ {0xA154, 0xFE57}, //21 #SMALL EXCLAMATION MARK
+ {0xA155, 0xFF5C}, //22 #FULLWIDTH VERTICAL LINE
+ {0xA156, 0x2013}, //23 #EN DASH
+ {0xA157, 0xFE31}, //24 #PRESENTATION FORM FOR VERTICAL EM DASH
+ {0xA158, 0x2014}, //25 #EM DASH
+ {0xA159, 0xFE33}, //26 #PRESENTATION FORM FOR VERTICAL LOW LINE
+ {0xA15A, 0x2574}, //27 #BOX DRAWINGS LIGHT LEFT
+ {0xA15B, 0xFE34}, //28 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+ {0xA15C, 0xFE4F}, //29 #WAVY LOW LINE
+ {0xA15D, 0xFF08}, //30 #FULLWIDTH LEFT PARENTHESIS
+ {0xA15E, 0xFF09}, //31 #FULLWIDTH RIGHT PARENTHESIS
+ {0xA15F, 0xFE35}, //32 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+ {0xA160, 0xFE36}, //33 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+ {0xA161, 0xFF5B}, //34 #FULLWIDTH LEFT CURLY BRACKET
+ {0xA162, 0xFF5D}, //35 #FULLWIDTH RIGHT CURLY BRACKET
+ {0xA163, 0xFE37}, //36 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+ {0xA164, 0xFE38}, //37 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+ {0xA165, 0x3014}, //38 #LEFT TORTOISE SHELL BRACKET
+ {0xA166, 0x3015}, //39 #RIGHT TORTOISE SHELL BRACKET
+ {0xA167, 0xFE39}, //40 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+ {0xA168, 0xFE3A}, //41 #PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+ {0xA169, 0x3010}, //42 #LEFT BLACK LENTICULAR BRACKET
+ {0xA16A, 0x3011}, //43 #RIGHT BLACK LENTICULAR BRACKET
+ {0xA16B, 0xFE3B}, //44 #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+ {0xA16C, 0xFE3C}, //45 #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+ {0xA16D, 0x300A}, //46 #LEFT DOUBLE ANGLE BRACKET
+ {0xA16E, 0x300B}, //47 #RIGHT DOUBLE ANGLE BRACKET
+ {0xA16F, 0xFE3D}, //48 #PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+ {0xA170, 0xFE3E}, //49 #PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+ {0xA171, 0x3008}, //50 #LEFT ANGLE BRACKET
+ {0xA172, 0x3009}, //51 #RIGHT ANGLE BRACKET
+ {0xA173, 0xFE3F}, //52 #PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+ {0xA174, 0xFE40}, //53 #PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+ {0xA175, 0x300C}, //54 #LEFT CORNER BRACKET
+ {0xA176, 0x300D}, //55 #RIGHT CORNER BRACKET
+ {0xA177, 0xFE41}, //56 #PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+ {0xA178, 0xFE42}, //57 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+ {0xA179, 0x300E}, //58 #LEFT WHITE CORNER BRACKET
+ {0xA17A, 0x300F}, //59 #RIGHT WHITE CORNER BRACKET
+ {0xA17B, 0xFE43}, //60 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+ {0xA17C, 0xFE44}, //61 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+ {0xA17D, 0xFE59}, //62 #SMALL LEFT PARENTHESIS
+ {0xA17E, 0xFE5A}, //63 #SMALL RIGHT PARENTHESIS
+ {0xA1A1, 0xFE5B}, //64 #SMALL LEFT CURLY BRACKET
+ {0xA1A2, 0xFE5C}, //65 #SMALL RIGHT CURLY BRACKET
+ {0xA1A3, 0xFE5D}, //66 #SMALL LEFT TORTOISE SHELL BRACKET
+ {0xA1A4, 0xFE5E}, //67 #SMALL RIGHT TORTOISE SHELL BRACKET
+ {0xA1A5, 0x2018}, //68 #LEFT SINGLE QUOTATION MARK
+ {0xA1A6, 0x2019}, //69 #RIGHT SINGLE QUOTATION MARK
+ {0xA1A7, 0x201C}, //70 #LEFT DOUBLE QUOTATION MARK
+ {0xA1A8, 0x201D}, //71 #RIGHT DOUBLE QUOTATION MARK
+ {0xA1A9, 0x301D}, //72 #REVERSED DOUBLE PRIME QUOTATION MARK
+ {0xA1AA, 0x301E}, //73 #DOUBLE PRIME QUOTATION MARK
+ {0xA1AB, 0x2035}, //74 #REVERSED PRIME
+ {0xA1AC, 0x2032}, //75 #PRIME
+ {0xA1AD, 0xFF03}, //76 #FULLWIDTH NUMBER SIGN
+ {0xA1AE, 0xFF06}, //77 #FULLWIDTH AMPERSAND
+ {0xA1AF, 0xFF0A}, //78 #FULLWIDTH ASTERISK
+ {0xA1B0, 0x203B}, //79 #REFERENCE MARK
+ {0xA1B1, 0x00A7}, //80 #SECTION SIGN
+ {0xA1B2, 0x3003}, //81 #DITTO MARK
+ {0xA1B3, 0x25CB}, //82 #WHITE CIRCLE
+ {0xA1B4, 0x25CF}, //83 #BLACK CIRCLE
+ {0xA1B5, 0x25B3}, //84 #WHITE UP-POINTING TRIANGLE
+ {0xA1B6, 0x25B2}, //85 #BLACK UP-POINTING TRIANGLE
+ {0xA1B7, 0x25CE}, //86 #BULLSEYE
+ {0xA1B8, 0x2606}, //87 #WHITE STAR
+ {0xA1B9, 0x2605}, //88 #BLACK STAR
+ {0xA1BA, 0x25C7}, //89 #WHITE DIAMOND
+ {0xA1BB, 0x25C6}, //90 #BLACK DIAMOND
+ {0xA1BC, 0x25A1}, //91 #WHITE SQUARE
+ {0xA1BD, 0x25A0}, //92 #BLACK SQUARE
+ {0xA1BE, 0x25BD}, //93 #WHITE DOWN-POINTING TRIANGLE
+ {0xA1BF, 0x25BC}, //94 #BLACK DOWN-POINTING TRIANGLE
+ {0xA1C0, 0x32A3}, //95 #CIRCLED IDEOGRAPH CORRECT
+ {0xA1C1, 0x2105}, //96 #CARE OF
+ {0xA1C2, 0x00AF}, //97 #MACRON
+ {0xA1C3, 0xFFE3}, //98 #FULLWIDTH MACRON
+ {0xA1C4, 0xFF3F}, //99 #FULLWIDTH LOW LINE
+ {0xA1C5, 0x02CD}, //100 #MODIFIER LETTER LOW MACRON
+ {0xA1C6, 0xFE49}, //101 #DASHED OVERLINE
+ {0xA1C7, 0xFE4A}, //102 #CENTRELINE OVERLINE
+ {0xA1C8, 0xFE4D}, //103 #DASHED LOW LINE
+ {0xA1C9, 0xFE4E}, //104 #CENTRELINE LOW LINE
+ {0xA1CA, 0xFE4B}, //105 #WAVY OVERLINE
+ {0xA1CB, 0xFE4C}, //106 #DOUBLE WAVY OVERLINE
+ {0xA1CC, 0xFE5F}, //107 #SMALL NUMBER SIGN
+ {0xA1CD, 0xFE60}, //108 #SMALL AMPERSAND
+ {0xA1CE, 0xFE61}, //109 #SMALL ASTERISK
+ {0xA1CF, 0xFF0B}, //110 #FULLWIDTH PLUS SIGN
+ {0xA1D0, 0xFF0D}, //111 #FULLWIDTH HYPHEN-MINUS
+ {0xA1D1, 0x00D7}, //112 #MULTIPLICATION SIGN
+ {0xA1D2, 0x00F7}, //113 #DIVISION SIGN
+ {0xA1D3, 0x00B1}, //114 #PLUS-MINUS SIGN
+ {0xA1D4, 0x221A}, //115 #SQUARE ROOT
+ {0xA1D5, 0xFF1C}, //116 #FULLWIDTH LESS-THAN SIGN
+ {0xA1D6, 0xFF1E}, //117 #FULLWIDTH GREATER-THAN SIGN
+ {0xA1D7, 0xFF1D}, //118 #FULLWIDTH EQUALS SIGN
+ {0xA1D8, 0x2266}, //119 #LESS-THAN OVER EQUAL TO
+ {0xA1D9, 0x2267}, //120 #GREATER-THAN OVER EQUAL TO
+ {0xA1DA, 0x2260}, //121 #NOT EQUAL TO
+ {0xA1DB, 0x221E}, //122 #INFINITY
+ {0xA1DC, 0x2252}, //123 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ {0xA1DD, 0x2261}, //124 #IDENTICAL TO
+ {0xA1DE, 0xFE62}, //125 #SMALL PLUS SIGN
+ {0xA1DF, 0xFE63}, //126 #SMALL HYPHEN-MINUS
+ {0xA1E0, 0xFE64}, //127 #SMALL LESS-THAN SIGN
+ {0xA1E1, 0xFE65}, //128 #SMALL GREATER-THAN SIGN
+ {0xA1E2, 0xFE66}, //129 #SMALL EQUALS SIGN
+ {0xA1E3, 0xFF5E}, //130 #FULLWIDTH TILDE
+ {0xA1E4, 0x2229}, //131 #INTERSECTION
+ {0xA1E5, 0x222A}, //132 #UNION
+ {0xA1E6, 0x22A5}, //133 #UP TACK
+ {0xA1E7, 0x2220}, //134 #ANGLE
+ {0xA1E8, 0x221F}, //135 #RIGHT ANGLE
+ {0xA1E9, 0x22BF}, //136 #RIGHT TRIANGLE
+ {0xA1EA, 0x33D2}, //137 #SQUARE LOG
+ {0xA1EB, 0x33D1}, //138 #SQUARE LN
+ {0xA1EC, 0x222B}, //139 #INTEGRAL
+ {0xA1ED, 0x222E}, //140 #CONTOUR INTEGRAL
+ {0xA1EE, 0x2235}, //141 #BECAUSE
+ {0xA1EF, 0x2234}, //142 #THEREFORE
+ {0xA1F0, 0x2640}, //143 #FEMALE SIGN
+ {0xA1F1, 0x2642}, //144 #MALE SIGN
+ {0xA1F2, 0x2295}, //145 #CIRCLED PLUS
+ {0xA1F3, 0x2299}, //146 #CIRCLED DOT OPERATOR
+ {0xA1F4, 0x2191}, //147 #UPWARDS ARROW
+ {0xA1F5, 0x2193}, //148 #DOWNWARDS ARROW
+ {0xA1F6, 0x2190}, //149 #LEFTWARDS ARROW
+ {0xA1F7, 0x2192}, //150 #RIGHTWARDS ARROW
+ {0xA1F8, 0x2196}, //151 #NORTH WEST ARROW
+ {0xA1F9, 0x2197}, //152 #NORTH EAST ARROW
+ {0xA1FA, 0x2199}, //153 #SOUTH WEST ARROW
+ {0xA1FB, 0x2198}, //154 #SOUTH EAST ARROW
+ {0xA1FC, 0x2225}, //155 #PARALLEL TO
+ {0xA1FD, 0x2223}, //156 #DIVIDES
+ {0xA1FE, 0xFF0F}, //157 #FULLWIDTH SOLIDUS
+ {0xA240, 0xFF3C}, //158 #FULLWIDTH REVERSE SOLIDUS
+ {0xA241, 0x2215}, //159 #DIVISION SLASH
+ {0xA242, 0xFE68}, //160 #SMALL REVERSE SOLIDUS
+ {0xA243, 0xFF04}, //161 #FULLWIDTH DOLLAR SIGN
+ {0xA244, 0xFFE5}, //162 #FULLWIDTH YEN SIGN
+ {0xA245, 0x3012}, //163 #POSTAL MARK
+ {0xA246, 0xFFE0}, //164 #FULLWIDTH CENT SIGN
+ {0xA247, 0xFFE1}, //165 #FULLWIDTH POUND SIGN
+ {0xA248, 0xFF05}, //166 #FULLWIDTH PERCENT SIGN
+ {0xA249, 0xFF20}, //167 #FULLWIDTH COMMERCIAL AT
+ {0xA24A, 0x2103}, //168 #DEGREE CELSIUS
+ {0xA24B, 0x2109}, //169 #DEGREE FAHRENHEIT
+ {0xA24C, 0xFE69}, //170 #SMALL DOLLAR SIGN
+ {0xA24D, 0xFE6A}, //171 #SMALL PERCENT SIGN
+ {0xA24E, 0xFE6B}, //172 #SMALL COMMERCIAL AT
+ {0xA24F, 0x33D5}, //173 #SQUARE MIL
+ {0xA250, 0x339C}, //174 #SQUARE MM
+ {0xA251, 0x339D}, //175 #SQUARE CM
+ {0xA252, 0x339E}, //176 #SQUARE KM
+ {0xA253, 0x33CE}, //177 #SQUARE KM CAPITAL
+ {0xA254, 0x33A1}, //178 #SQUARE M SQUARED
+ {0xA255, 0x338E}, //179 #SQUARE MG
+ {0xA256, 0x338F}, //180 #SQUARE KG
+ {0xA257, 0x33C4}, //181 #SQUARE CC
+ {0xA258, 0x00B0}, //182 #DEGREE SIGN
+ {0xA259, 0x5159}, //183 #CJK UNIFIED IDEOGRAPH
+ {0xA25A, 0x515B}, //184 #CJK UNIFIED IDEOGRAPH
+ {0xA25B, 0x515E}, //185 #CJK UNIFIED IDEOGRAPH
+ {0xA25C, 0x515D}, //186 #CJK UNIFIED IDEOGRAPH
+ {0xA25D, 0x5161}, //187 #CJK UNIFIED IDEOGRAPH
+ {0xA25E, 0x5163}, //188 #CJK UNIFIED IDEOGRAPH
+ {0xA25F, 0x55E7}, //189 #CJK UNIFIED IDEOGRAPH
+ {0xA260, 0x74E9}, //190 #CJK UNIFIED IDEOGRAPH
+ {0xA261, 0x7CCE}, //191 #CJK UNIFIED IDEOGRAPH
+ {0xA262, 0x2581}, //192 #LOWER ONE EIGHTH BLOCK
+ {0xA263, 0x2582}, //193 #LOWER ONE QUARTER BLOCK
+ {0xA264, 0x2583}, //194 #LOWER THREE EIGHTHS BLOCK
+ {0xA265, 0x2584}, //195 #LOWER HALF BLOCK
+ {0xA266, 0x2585}, //196 #LOWER FIVE EIGHTHS BLOCK
+ {0xA267, 0x2586}, //197 #LOWER THREE QUARTERS BLOCK
+ {0xA268, 0x2587}, //198 #LOWER SEVEN EIGHTHS BLOCK
+ {0xA269, 0x2588}, //199 #FULL BLOCK
+ {0xA26A, 0x258F}, //200 #LEFT ONE EIGHTH BLOCK
+ {0xA26B, 0x258E}, //201 #LEFT ONE QUARTER BLOCK
+ {0xA26C, 0x258D}, //202 #LEFT THREE EIGHTHS BLOCK
+ {0xA26D, 0x258C}, //203 #LEFT HALF BLOCK
+ {0xA26E, 0x258B}, //204 #LEFT FIVE EIGHTHS BLOCK
+ {0xA26F, 0x258A}, //205 #LEFT THREE QUARTERS BLOCK
+ {0xA270, 0x2589}, //206 #LEFT SEVEN EIGHTHS BLOCK
+ {0xA271, 0x253C}, //207 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ {0xA272, 0x2534}, //208 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ {0xA273, 0x252C}, //209 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ {0xA274, 0x2524}, //210 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ {0xA275, 0x251C}, //211 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ {0xA276, 0x2594}, //212 #UPPER ONE EIGHTH BLOCK
+ {0xA277, 0x2500}, //213 #BOX DRAWINGS LIGHT HORIZONTAL
+ {0xA278, 0x2502}, //214 #BOX DRAWINGS LIGHT VERTICAL
+ {0xA279, 0x2595}, //215 #RIGHT ONE EIGHTH BLOCK
+ {0xA27A, 0x250C}, //216 #BOX DRAWINGS LIGHT DOWN AND RIGHT
+ {0xA27B, 0x2510}, //217 #BOX DRAWINGS LIGHT DOWN AND LEFT
+ {0xA27C, 0x2514}, //218 #BOX DRAWINGS LIGHT UP AND RIGHT
+ {0xA27D, 0x2518}, //219 #BOX DRAWINGS LIGHT UP AND LEFT
+ {0xA27E, 0x256D}, //220 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+ {0xA2A1, 0x256E}, //221 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+ {0xA2A2, 0x2570}, //222 #BOX DRAWINGS LIGHT ARC UP AND RIGHT
+ {0xA2A3, 0x256F}, //223 #BOX DRAWINGS LIGHT ARC UP AND LEFT
+ {0xA2A4, 0x2550}, //224 #BOX DRAWINGS DOUBLE HORIZONTAL
+ {0xA2A5, 0x255E}, //225 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ {0xA2A6, 0x256A}, //226 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ {0xA2A7, 0x2561}, //227 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ {0xA2A8, 0x25E2}, //228 #BLACK LOWER RIGHT TRIANGLE
+ {0xA2A9, 0x25E3}, //229 #BLACK LOWER LEFT TRIANGLE
+ {0xA2AA, 0x25E5}, //230 #BLACK UPPER RIGHT TRIANGLE
+ {0xA2AB, 0x25E4}, //231 #BLACK UPPER LEFT TRIANGLE
+ {0xA2AC, 0x2571}, //232 #BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+ {0xA2AD, 0x2572}, //233 #BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+ {0xA2AE, 0x2573}, //234 #BOX DRAWINGS LIGHT DIAGONAL CROSS
+ {0xA2AF, 0xFF10}, //235 #FULLWIDTH DIGIT ZERO
+ {0xA2B0, 0xFF11}, //236 #FULLWIDTH DIGIT ONE
+ {0xA2B1, 0xFF12}, //237 #FULLWIDTH DIGIT TWO
+ {0xA2B2, 0xFF13}, //238 #FULLWIDTH DIGIT THREE
+ {0xA2B3, 0xFF14}, //239 #FULLWIDTH DIGIT FOUR
+ {0xA2B4, 0xFF15}, //240 #FULLWIDTH DIGIT FIVE
+ {0xA2B5, 0xFF16}, //241 #FULLWIDTH DIGIT SIX
+ {0xA2B6, 0xFF17}, //242 #FULLWIDTH DIGIT SEVEN
+ {0xA2B7, 0xFF18}, //243 #FULLWIDTH DIGIT EIGHT
+ {0xA2B8, 0xFF19}, //244 #FULLWIDTH DIGIT NINE
+ {0xA2B9, 0x2160}, //245 #ROMAN NUMERAL ONE
+ {0xA2BA, 0x2161}, //246 #ROMAN NUMERAL TWO
+ {0xA2BB, 0x2162}, //247 #ROMAN NUMERAL THREE
+ {0xA2BC, 0x2163}, //248 #ROMAN NUMERAL FOUR
+ {0xA2BD, 0x2164}, //249 #ROMAN NUMERAL FIVE
+ {0xA2BE, 0x2165}, //250 #ROMAN NUMERAL SIX
+ {0xA2BF, 0x2166}, //251 #ROMAN NUMERAL SEVEN
+ {0xA2C0, 0x2167}, //252 #ROMAN NUMERAL EIGHT
+ {0xA2C1, 0x2168}, //253 #ROMAN NUMERAL NINE
+ {0xA2C2, 0x2169}, //254 #ROMAN NUMERAL TEN
+ {0xA2C3, 0x3021}, //255 #HANGZHOU NUMERAL ONE
+ {0xA2C4, 0x3022}, //256 #HANGZHOU NUMERAL TWO
+ {0xA2C5, 0x3023}, //257 #HANGZHOU NUMERAL THREE
+ {0xA2C6, 0x3024}, //258 #HANGZHOU NUMERAL FOUR
+ {0xA2C7, 0x3025}, //259 #HANGZHOU NUMERAL FIVE
+ {0xA2C8, 0x3026}, //260 #HANGZHOU NUMERAL SIX
+ {0xA2C9, 0x3027}, //261 #HANGZHOU NUMERAL SEVEN
+ {0xA2CA, 0x3028}, //262 #HANGZHOU NUMERAL EIGHT
+ {0xA2CB, 0x3029}, //263 #HANGZHOU NUMERAL NINE
+ {0xA2CC, 0x5341}, //264 #CJK UNIFIED IDEOGRAPH
+ {0xA2CD, 0x5344}, //265 #CJK UNIFIED IDEOGRAPH
+ {0xA2CE, 0x5345}, //266 #CJK UNIFIED IDEOGRAPH
+ {0xA2CF, 0xFF21}, //267 #FULLWIDTH LATIN CAPITAL LETTER A
+ {0xA2D0, 0xFF22}, //268 #FULLWIDTH LATIN CAPITAL LETTER B
+ {0xA2D1, 0xFF23}, //269 #FULLWIDTH LATIN CAPITAL LETTER C
+ {0xA2D2, 0xFF24}, //270 #FULLWIDTH LATIN CAPITAL LETTER D
+ {0xA2D3, 0xFF25}, //271 #FULLWIDTH LATIN CAPITAL LETTER E
+ {0xA2D4, 0xFF26}, //272 #FULLWIDTH LATIN CAPITAL LETTER F
+ {0xA2D5, 0xFF27}, //273 #FULLWIDTH LATIN CAPITAL LETTER G
+ {0xA2D6, 0xFF28}, //274 #FULLWIDTH LATIN CAPITAL LETTER H
+ {0xA2D7, 0xFF29}, //275 #FULLWIDTH LATIN CAPITAL LETTER I
+ {0xA2D8, 0xFF2A}, //276 #FULLWIDTH LATIN CAPITAL LETTER J
+ {0xA2D9, 0xFF2B}, //277 #FULLWIDTH LATIN CAPITAL LETTER K
+ {0xA2DA, 0xFF2C}, //278 #FULLWIDTH LATIN CAPITAL LETTER L
+ {0xA2DB, 0xFF2D}, //279 #FULLWIDTH LATIN CAPITAL LETTER M
+ {0xA2DC, 0xFF2E}, //280 #FULLWIDTH LATIN CAPITAL LETTER N
+ {0xA2DD, 0xFF2F}, //281 #FULLWIDTH LATIN CAPITAL LETTER O
+ {0xA2DE, 0xFF30}, //282 #FULLWIDTH LATIN CAPITAL LETTER P
+ {0xA2DF, 0xFF31}, //283 #FULLWIDTH LATIN CAPITAL LETTER Q
+ {0xA2E0, 0xFF32}, //284 #FULLWIDTH LATIN CAPITAL LETTER R
+ {0xA2E1, 0xFF33}, //285 #FULLWIDTH LATIN CAPITAL LETTER S
+ {0xA2E2, 0xFF34}, //286 #FULLWIDTH LATIN CAPITAL LETTER T
+ {0xA2E3, 0xFF35}, //287 #FULLWIDTH LATIN CAPITAL LETTER U
+ {0xA2E4, 0xFF36}, //288 #FULLWIDTH LATIN CAPITAL LETTER V
+ {0xA2E5, 0xFF37}, //289 #FULLWIDTH LATIN CAPITAL LETTER W
+ {0xA2E6, 0xFF38}, //290 #FULLWIDTH LATIN CAPITAL LETTER X
+ {0xA2E7, 0xFF39}, //291 #FULLWIDTH LATIN CAPITAL LETTER Y
+ {0xA2E8, 0xFF3A}, //292 #FULLWIDTH LATIN CAPITAL LETTER Z
+ {0xA2E9, 0xFF41}, //293 #FULLWIDTH LATIN SMALL LETTER A
+ {0xA2EA, 0xFF42}, //294 #FULLWIDTH LATIN SMALL LETTER B
+ {0xA2EB, 0xFF43}, //295 #FULLWIDTH LATIN SMALL LETTER C
+ {0xA2EC, 0xFF44}, //296 #FULLWIDTH LATIN SMALL LETTER D
+ {0xA2ED, 0xFF45}, //297 #FULLWIDTH LATIN SMALL LETTER E
+ {0xA2EE, 0xFF46}, //298 #FULLWIDTH LATIN SMALL LETTER F
+ {0xA2EF, 0xFF47}, //299 #FULLWIDTH LATIN SMALL LETTER G
+ {0xA2F0, 0xFF48}, //300 #FULLWIDTH LATIN SMALL LETTER H
+ {0xA2F1, 0xFF49}, //301 #FULLWIDTH LATIN SMALL LETTER I
+ {0xA2F2, 0xFF4A}, //302 #FULLWIDTH LATIN SMALL LETTER J
+ {0xA2F3, 0xFF4B}, //303 #FULLWIDTH LATIN SMALL LETTER K
+ {0xA2F4, 0xFF4C}, //304 #FULLWIDTH LATIN SMALL LETTER L
+ {0xA2F5, 0xFF4D}, //305 #FULLWIDTH LATIN SMALL LETTER M
+ {0xA2F6, 0xFF4E}, //306 #FULLWIDTH LATIN SMALL LETTER N
+ {0xA2F7, 0xFF4F}, //307 #FULLWIDTH LATIN SMALL LETTER O
+ {0xA2F8, 0xFF50}, //308 #FULLWIDTH LATIN SMALL LETTER P
+ {0xA2F9, 0xFF51}, //309 #FULLWIDTH LATIN SMALL LETTER Q
+ {0xA2FA, 0xFF52}, //310 #FULLWIDTH LATIN SMALL LETTER R
+ {0xA2FB, 0xFF53}, //311 #FULLWIDTH LATIN SMALL LETTER S
+ {0xA2FC, 0xFF54}, //312 #FULLWIDTH LATIN SMALL LETTER T
+ {0xA2FD, 0xFF55}, //313 #FULLWIDTH LATIN SMALL LETTER U
+ {0xA2FE, 0xFF56}, //314 #FULLWIDTH LATIN SMALL LETTER V
+ {0xA340, 0xFF57}, //315 #FULLWIDTH LATIN SMALL LETTER W
+ {0xA341, 0xFF58}, //316 #FULLWIDTH LATIN SMALL LETTER X
+ {0xA342, 0xFF59}, //317 #FULLWIDTH LATIN SMALL LETTER Y
+ {0xA343, 0xFF5A}, //318 #FULLWIDTH LATIN SMALL LETTER Z
+ {0xA344, 0x0391}, //319 #GREEK CAPITAL LETTER ALPHA
+ {0xA345, 0x0392}, //320 #GREEK CAPITAL LETTER BETA
+ {0xA346, 0x0393}, //321 #GREEK CAPITAL LETTER GAMMA
+ {0xA347, 0x0394}, //322 #GREEK CAPITAL LETTER DELTA
+ {0xA348, 0x0395}, //323 #GREEK CAPITAL LETTER EPSILON
+ {0xA349, 0x0396}, //324 #GREEK CAPITAL LETTER ZETA
+ {0xA34A, 0x0397}, //325 #GREEK CAPITAL LETTER ETA
+ {0xA34B, 0x0398}, //326 #GREEK CAPITAL LETTER THETA
+ {0xA34C, 0x0399}, //327 #GREEK CAPITAL LETTER IOTA
+ {0xA34D, 0x039A}, //328 #GREEK CAPITAL LETTER KAPPA
+ {0xA34E, 0x039B}, //329 #GREEK CAPITAL LETTER LAMDA
+ {0xA34F, 0x039C}, //330 #GREEK CAPITAL LETTER MU
+ {0xA350, 0x039D}, //331 #GREEK CAPITAL LETTER NU
+ {0xA351, 0x039E}, //332 #GREEK CAPITAL LETTER XI
+ {0xA352, 0x039F}, //333 #GREEK CAPITAL LETTER OMICRON
+ {0xA353, 0x03A0}, //334 #GREEK CAPITAL LETTER PI
+ {0xA354, 0x03A1}, //335 #GREEK CAPITAL LETTER RHO
+ {0xA355, 0x03A3}, //336 #GREEK CAPITAL LETTER SIGMA
+ {0xA356, 0x03A4}, //337 #GREEK CAPITAL LETTER TAU
+ {0xA357, 0x03A5}, //338 #GREEK CAPITAL LETTER UPSILON
+ {0xA358, 0x03A6}, //339 #GREEK CAPITAL LETTER PHI
+ {0xA359, 0x03A7}, //340 #GREEK CAPITAL LETTER CHI
+ {0xA35A, 0x03A8}, //341 #GREEK CAPITAL LETTER PSI
+ {0xA35B, 0x03A9}, //342 #GREEK CAPITAL LETTER OMEGA
+ {0xA35C, 0x03B1}, //343 #GREEK SMALL LETTER ALPHA
+ {0xA35D, 0x03B2}, //344 #GREEK SMALL LETTER BETA
+ {0xA35E, 0x03B3}, //345 #GREEK SMALL LETTER GAMMA
+ {0xA35F, 0x03B4}, //346 #GREEK SMALL LETTER DELTA
+ {0xA360, 0x03B5}, //347 #GREEK SMALL LETTER EPSILON
+ {0xA361, 0x03B6}, //348 #GREEK SMALL LETTER ZETA
+ {0xA362, 0x03B7}, //349 #GREEK SMALL LETTER ETA
+ {0xA363, 0x03B8}, //350 #GREEK SMALL LETTER THETA
+ {0xA364, 0x03B9}, //351 #GREEK SMALL LETTER IOTA
+ {0xA365, 0x03BA}, //352 #GREEK SMALL LETTER KAPPA
+ {0xA366, 0x03BB}, //353 #GREEK SMALL LETTER LAMDA
+ {0xA367, 0x03BC}, //354 #GREEK SMALL LETTER MU
+ {0xA368, 0x03BD}, //355 #GREEK SMALL LETTER NU
+ {0xA369, 0x03BE}, //356 #GREEK SMALL LETTER XI
+ {0xA36A, 0x03BF}, //357 #GREEK SMALL LETTER OMICRON
+ {0xA36B, 0x03C0}, //358 #GREEK SMALL LETTER PI
+ {0xA36C, 0x03C1}, //359 #GREEK SMALL LETTER RHO
+ {0xA36D, 0x03C3}, //360 #GREEK SMALL LETTER SIGMA
+ {0xA36E, 0x03C4}, //361 #GREEK SMALL LETTER TAU
+ {0xA36F, 0x03C5}, //362 #GREEK SMALL LETTER UPSILON
+ {0xA370, 0x03C6}, //363 #GREEK SMALL LETTER PHI
+ {0xA371, 0x03C7}, //364 #GREEK SMALL LETTER CHI
+ {0xA372, 0x03C8}, //365 #GREEK SMALL LETTER PSI
+ {0xA373, 0x03C9}, //366 #GREEK SMALL LETTER OMEGA
+ {0xA374, 0x3105}, //367 #BOPOMOFO LETTER B
+ {0xA375, 0x3106}, //368 #BOPOMOFO LETTER P
+ {0xA376, 0x3107}, //369 #BOPOMOFO LETTER M
+ {0xA377, 0x3108}, //370 #BOPOMOFO LETTER F
+ {0xA378, 0x3109}, //371 #BOPOMOFO LETTER D
+ {0xA379, 0x310A}, //372 #BOPOMOFO LETTER T
+ {0xA37A, 0x310B}, //373 #BOPOMOFO LETTER N
+ {0xA37B, 0x310C}, //374 #BOPOMOFO LETTER L
+ {0xA37C, 0x310D}, //375 #BOPOMOFO LETTER G
+ {0xA37D, 0x310E}, //376 #BOPOMOFO LETTER K
+ {0xA37E, 0x310F}, //377 #BOPOMOFO LETTER H
+ {0xA3A1, 0x3110}, //378 #BOPOMOFO LETTER J
+ {0xA3A2, 0x3111}, //379 #BOPOMOFO LETTER Q
+ {0xA3A3, 0x3112}, //380 #BOPOMOFO LETTER X
+ {0xA3A4, 0x3113}, //381 #BOPOMOFO LETTER ZH
+ {0xA3A5, 0x3114}, //382 #BOPOMOFO LETTER CH
+ {0xA3A6, 0x3115}, //383 #BOPOMOFO LETTER SH
+ {0xA3A7, 0x3116}, //384 #BOPOMOFO LETTER R
+ {0xA3A8, 0x3117}, //385 #BOPOMOFO LETTER Z
+ {0xA3A9, 0x3118}, //386 #BOPOMOFO LETTER C
+ {0xA3AA, 0x3119}, //387 #BOPOMOFO LETTER S
+ {0xA3AB, 0x311A}, //388 #BOPOMOFO LETTER A
+ {0xA3AC, 0x311B}, //389 #BOPOMOFO LETTER O
+ {0xA3AD, 0x311C}, //390 #BOPOMOFO LETTER E
+ {0xA3AE, 0x311D}, //391 #BOPOMOFO LETTER EH
+ {0xA3AF, 0x311E}, //392 #BOPOMOFO LETTER AI
+ {0xA3B0, 0x311F}, //393 #BOPOMOFO LETTER EI
+ {0xA3B1, 0x3120}, //394 #BOPOMOFO LETTER AU
+ {0xA3B2, 0x3121}, //395 #BOPOMOFO LETTER OU
+ {0xA3B3, 0x3122}, //396 #BOPOMOFO LETTER AN
+ {0xA3B4, 0x3123}, //397 #BOPOMOFO LETTER EN
+ {0xA3B5, 0x3124}, //398 #BOPOMOFO LETTER ANG
+ {0xA3B6, 0x3125}, //399 #BOPOMOFO LETTER ENG
+ {0xA3B7, 0x3126}, //400 #BOPOMOFO LETTER ER
+ {0xA3B8, 0x3127}, //401 #BOPOMOFO LETTER I
+ {0xA3B9, 0x3128}, //402 #BOPOMOFO LETTER U
+ {0xA3BA, 0x3129}, //403 #BOPOMOFO LETTER IU
+ {0xA3BB, 0x02D9}, //404 #DOT ABOVE
+ {0xA3BC, 0x02C9}, //405 #MODIFIER LETTER MACRON
+ {0xA3BD, 0x02CA}, //406 #MODIFIER LETTER ACUTE ACCENT
+ {0xA3BE, 0x02C7}, //407 #CARON
+ {0xA3BF, 0x02CB}, //408 #MODIFIER LETTER GRAVE ACCENT
+ {0xA3E1, 0x20AC}, //409 #EURO SIGN
+ {0xA440, 0x4E00}, //410 #CJK UNIFIED IDEOGRAPH
+ {0xA441, 0x4E59}, //411 #CJK UNIFIED IDEOGRAPH
+ {0xA442, 0x4E01}, //412 #CJK UNIFIED IDEOGRAPH
+ {0xA443, 0x4E03}, //413 #CJK UNIFIED IDEOGRAPH
+ {0xA444, 0x4E43}, //414 #CJK UNIFIED IDEOGRAPH
+ {0xA445, 0x4E5D}, //415 #CJK UNIFIED IDEOGRAPH
+ {0xA446, 0x4E86}, //416 #CJK UNIFIED IDEOGRAPH
+ {0xA447, 0x4E8C}, //417 #CJK UNIFIED IDEOGRAPH
+ {0xA448, 0x4EBA}, //418 #CJK UNIFIED IDEOGRAPH
+ {0xA449, 0x513F}, //419 #CJK UNIFIED IDEOGRAPH
+ {0xA44A, 0x5165}, //420 #CJK UNIFIED IDEOGRAPH
+ {0xA44B, 0x516B}, //421 #CJK UNIFIED IDEOGRAPH
+ {0xA44C, 0x51E0}, //422 #CJK UNIFIED IDEOGRAPH
+ {0xA44D, 0x5200}, //423 #CJK UNIFIED IDEOGRAPH
+ {0xA44E, 0x5201}, //424 #CJK UNIFIED IDEOGRAPH
+ {0xA44F, 0x529B}, //425 #CJK UNIFIED IDEOGRAPH
+ {0xA450, 0x5315}, //426 #CJK UNIFIED IDEOGRAPH
+ {0xA451, 0x5341}, //427 #CJK UNIFIED IDEOGRAPH
+ {0xA452, 0x535C}, //428 #CJK UNIFIED IDEOGRAPH
+ {0xA453, 0x53C8}, //429 #CJK UNIFIED IDEOGRAPH
+ {0xA454, 0x4E09}, //430 #CJK UNIFIED IDEOGRAPH
+ {0xA455, 0x4E0B}, //431 #CJK UNIFIED IDEOGRAPH
+ {0xA456, 0x4E08}, //432 #CJK UNIFIED IDEOGRAPH
+ {0xA457, 0x4E0A}, //433 #CJK UNIFIED IDEOGRAPH
+ {0xA458, 0x4E2B}, //434 #CJK UNIFIED IDEOGRAPH
+ {0xA459, 0x4E38}, //435 #CJK UNIFIED IDEOGRAPH
+ {0xA45A, 0x51E1}, //436 #CJK UNIFIED IDEOGRAPH
+ {0xA45B, 0x4E45}, //437 #CJK UNIFIED IDEOGRAPH
+ {0xA45C, 0x4E48}, //438 #CJK UNIFIED IDEOGRAPH
+ {0xA45D, 0x4E5F}, //439 #CJK UNIFIED IDEOGRAPH
+ {0xA45E, 0x4E5E}, //440 #CJK UNIFIED IDEOGRAPH
+ {0xA45F, 0x4E8E}, //441 #CJK UNIFIED IDEOGRAPH
+ {0xA460, 0x4EA1}, //442 #CJK UNIFIED IDEOGRAPH
+ {0xA461, 0x5140}, //443 #CJK UNIFIED IDEOGRAPH
+ {0xA462, 0x5203}, //444 #CJK UNIFIED IDEOGRAPH
+ {0xA463, 0x52FA}, //445 #CJK UNIFIED IDEOGRAPH
+ {0xA464, 0x5343}, //446 #CJK UNIFIED IDEOGRAPH
+ {0xA465, 0x53C9}, //447 #CJK UNIFIED IDEOGRAPH
+ {0xA466, 0x53E3}, //448 #CJK UNIFIED IDEOGRAPH
+ {0xA467, 0x571F}, //449 #CJK UNIFIED IDEOGRAPH
+ {0xA468, 0x58EB}, //450 #CJK UNIFIED IDEOGRAPH
+ {0xA469, 0x5915}, //451 #CJK UNIFIED IDEOGRAPH
+ {0xA46A, 0x5927}, //452 #CJK UNIFIED IDEOGRAPH
+ {0xA46B, 0x5973}, //453 #CJK UNIFIED IDEOGRAPH
+ {0xA46C, 0x5B50}, //454 #CJK UNIFIED IDEOGRAPH
+ {0xA46D, 0x5B51}, //455 #CJK UNIFIED IDEOGRAPH
+ {0xA46E, 0x5B53}, //456 #CJK UNIFIED IDEOGRAPH
+ {0xA46F, 0x5BF8}, //457 #CJK UNIFIED IDEOGRAPH
+ {0xA470, 0x5C0F}, //458 #CJK UNIFIED IDEOGRAPH
+ {0xA471, 0x5C22}, //459 #CJK UNIFIED IDEOGRAPH
+ {0xA472, 0x5C38}, //460 #CJK UNIFIED IDEOGRAPH
+ {0xA473, 0x5C71}, //461 #CJK UNIFIED IDEOGRAPH
+ {0xA474, 0x5DDD}, //462 #CJK UNIFIED IDEOGRAPH
+ {0xA475, 0x5DE5}, //463 #CJK UNIFIED IDEOGRAPH
+ {0xA476, 0x5DF1}, //464 #CJK UNIFIED IDEOGRAPH
+ {0xA477, 0x5DF2}, //465 #CJK UNIFIED IDEOGRAPH
+ {0xA478, 0x5DF3}, //466 #CJK UNIFIED IDEOGRAPH
+ {0xA479, 0x5DFE}, //467 #CJK UNIFIED IDEOGRAPH
+ {0xA47A, 0x5E72}, //468 #CJK UNIFIED IDEOGRAPH
+ {0xA47B, 0x5EFE}, //469 #CJK UNIFIED IDEOGRAPH
+ {0xA47C, 0x5F0B}, //470 #CJK UNIFIED IDEOGRAPH
+ {0xA47D, 0x5F13}, //471 #CJK UNIFIED IDEOGRAPH
+ {0xA47E, 0x624D}, //472 #CJK UNIFIED IDEOGRAPH
+ {0xA4A1, 0x4E11}, //473 #CJK UNIFIED IDEOGRAPH
+ {0xA4A2, 0x4E10}, //474 #CJK UNIFIED IDEOGRAPH
+ {0xA4A3, 0x4E0D}, //475 #CJK UNIFIED IDEOGRAPH
+ {0xA4A4, 0x4E2D}, //476 #CJK UNIFIED IDEOGRAPH
+ {0xA4A5, 0x4E30}, //477 #CJK UNIFIED IDEOGRAPH
+ {0xA4A6, 0x4E39}, //478 #CJK UNIFIED IDEOGRAPH
+ {0xA4A7, 0x4E4B}, //479 #CJK UNIFIED IDEOGRAPH
+ {0xA4A8, 0x5C39}, //480 #CJK UNIFIED IDEOGRAPH
+ {0xA4A9, 0x4E88}, //481 #CJK UNIFIED IDEOGRAPH
+ {0xA4AA, 0x4E91}, //482 #CJK UNIFIED IDEOGRAPH
+ {0xA4AB, 0x4E95}, //483 #CJK UNIFIED IDEOGRAPH
+ {0xA4AC, 0x4E92}, //484 #CJK UNIFIED IDEOGRAPH
+ {0xA4AD, 0x4E94}, //485 #CJK UNIFIED IDEOGRAPH
+ {0xA4AE, 0x4EA2}, //486 #CJK UNIFIED IDEOGRAPH
+ {0xA4AF, 0x4EC1}, //487 #CJK UNIFIED IDEOGRAPH
+ {0xA4B0, 0x4EC0}, //488 #CJK UNIFIED IDEOGRAPH
+ {0xA4B1, 0x4EC3}, //489 #CJK UNIFIED IDEOGRAPH
+ {0xA4B2, 0x4EC6}, //490 #CJK UNIFIED IDEOGRAPH
+ {0xA4B3, 0x4EC7}, //491 #CJK UNIFIED IDEOGRAPH
+ {0xA4B4, 0x4ECD}, //492 #CJK UNIFIED IDEOGRAPH
+ {0xA4B5, 0x4ECA}, //493 #CJK UNIFIED IDEOGRAPH
+ {0xA4B6, 0x4ECB}, //494 #CJK UNIFIED IDEOGRAPH
+ {0xA4B7, 0x4EC4}, //495 #CJK UNIFIED IDEOGRAPH
+ {0xA4B8, 0x5143}, //496 #CJK UNIFIED IDEOGRAPH
+ {0xA4B9, 0x5141}, //497 #CJK UNIFIED IDEOGRAPH
+ {0xA4BA, 0x5167}, //498 #CJK UNIFIED IDEOGRAPH
+ {0xA4BB, 0x516D}, //499 #CJK UNIFIED IDEOGRAPH
+ {0xA4BC, 0x516E}, //500 #CJK UNIFIED IDEOGRAPH
+ {0xA4BD, 0x516C}, //501 #CJK UNIFIED IDEOGRAPH
+ {0xA4BE, 0x5197}, //502 #CJK UNIFIED IDEOGRAPH
+ {0xA4BF, 0x51F6}, //503 #CJK UNIFIED IDEOGRAPH
+ {0xA4C0, 0x5206}, //504 #CJK UNIFIED IDEOGRAPH
+ {0xA4C1, 0x5207}, //505 #CJK UNIFIED IDEOGRAPH
+ {0xA4C2, 0x5208}, //506 #CJK UNIFIED IDEOGRAPH
+ {0xA4C3, 0x52FB}, //507 #CJK UNIFIED IDEOGRAPH
+ {0xA4C4, 0x52FE}, //508 #CJK UNIFIED IDEOGRAPH
+ {0xA4C5, 0x52FF}, //509 #CJK UNIFIED IDEOGRAPH
+ {0xA4C6, 0x5316}, //510 #CJK UNIFIED IDEOGRAPH
+ {0xA4C7, 0x5339}, //511 #CJK UNIFIED IDEOGRAPH
+ {0xA4C8, 0x5348}, //512 #CJK UNIFIED IDEOGRAPH
+ {0xA4C9, 0x5347}, //513 #CJK UNIFIED IDEOGRAPH
+ {0xA4CA, 0x5345}, //514 #CJK UNIFIED IDEOGRAPH
+ {0xA4CB, 0x535E}, //515 #CJK UNIFIED IDEOGRAPH
+ {0xA4CC, 0x5384}, //516 #CJK UNIFIED IDEOGRAPH
+ {0xA4CD, 0x53CB}, //517 #CJK UNIFIED IDEOGRAPH
+ {0xA4CE, 0x53CA}, //518 #CJK UNIFIED IDEOGRAPH
+ {0xA4CF, 0x53CD}, //519 #CJK UNIFIED IDEOGRAPH
+ {0xA4D0, 0x58EC}, //520 #CJK UNIFIED IDEOGRAPH
+ {0xA4D1, 0x5929}, //521 #CJK UNIFIED IDEOGRAPH
+ {0xA4D2, 0x592B}, //522 #CJK UNIFIED IDEOGRAPH
+ {0xA4D3, 0x592A}, //523 #CJK UNIFIED IDEOGRAPH
+ {0xA4D4, 0x592D}, //524 #CJK UNIFIED IDEOGRAPH
+ {0xA4D5, 0x5B54}, //525 #CJK UNIFIED IDEOGRAPH
+ {0xA4D6, 0x5C11}, //526 #CJK UNIFIED IDEOGRAPH
+ {0xA4D7, 0x5C24}, //527 #CJK UNIFIED IDEOGRAPH
+ {0xA4D8, 0x5C3A}, //528 #CJK UNIFIED IDEOGRAPH
+ {0xA4D9, 0x5C6F}, //529 #CJK UNIFIED IDEOGRAPH
+ {0xA4DA, 0x5DF4}, //530 #CJK UNIFIED IDEOGRAPH
+ {0xA4DB, 0x5E7B}, //531 #CJK UNIFIED IDEOGRAPH
+ {0xA4DC, 0x5EFF}, //532 #CJK UNIFIED IDEOGRAPH
+ {0xA4DD, 0x5F14}, //533 #CJK UNIFIED IDEOGRAPH
+ {0xA4DE, 0x5F15}, //534 #CJK UNIFIED IDEOGRAPH
+ {0xA4DF, 0x5FC3}, //535 #CJK UNIFIED IDEOGRAPH
+ {0xA4E0, 0x6208}, //536 #CJK UNIFIED IDEOGRAPH
+ {0xA4E1, 0x6236}, //537 #CJK UNIFIED IDEOGRAPH
+ {0xA4E2, 0x624B}, //538 #CJK UNIFIED IDEOGRAPH
+ {0xA4E3, 0x624E}, //539 #CJK UNIFIED IDEOGRAPH
+ {0xA4E4, 0x652F}, //540 #CJK UNIFIED IDEOGRAPH
+ {0xA4E5, 0x6587}, //541 #CJK UNIFIED IDEOGRAPH
+ {0xA4E6, 0x6597}, //542 #CJK UNIFIED IDEOGRAPH
+ {0xA4E7, 0x65A4}, //543 #CJK UNIFIED IDEOGRAPH
+ {0xA4E8, 0x65B9}, //544 #CJK UNIFIED IDEOGRAPH
+ {0xA4E9, 0x65E5}, //545 #CJK UNIFIED IDEOGRAPH
+ {0xA4EA, 0x66F0}, //546 #CJK UNIFIED IDEOGRAPH
+ {0xA4EB, 0x6708}, //547 #CJK UNIFIED IDEOGRAPH
+ {0xA4EC, 0x6728}, //548 #CJK UNIFIED IDEOGRAPH
+ {0xA4ED, 0x6B20}, //549 #CJK UNIFIED IDEOGRAPH
+ {0xA4EE, 0x6B62}, //550 #CJK UNIFIED IDEOGRAPH
+ {0xA4EF, 0x6B79}, //551 #CJK UNIFIED IDEOGRAPH
+ {0xA4F0, 0x6BCB}, //552 #CJK UNIFIED IDEOGRAPH
+ {0xA4F1, 0x6BD4}, //553 #CJK UNIFIED IDEOGRAPH
+ {0xA4F2, 0x6BDB}, //554 #CJK UNIFIED IDEOGRAPH
+ {0xA4F3, 0x6C0F}, //555 #CJK UNIFIED IDEOGRAPH
+ {0xA4F4, 0x6C34}, //556 #CJK UNIFIED IDEOGRAPH
+ {0xA4F5, 0x706B}, //557 #CJK UNIFIED IDEOGRAPH
+ {0xA4F6, 0x722A}, //558 #CJK UNIFIED IDEOGRAPH
+ {0xA4F7, 0x7236}, //559 #CJK UNIFIED IDEOGRAPH
+ {0xA4F8, 0x723B}, //560 #CJK UNIFIED IDEOGRAPH
+ {0xA4F9, 0x7247}, //561 #CJK UNIFIED IDEOGRAPH
+ {0xA4FA, 0x7259}, //562 #CJK UNIFIED IDEOGRAPH
+ {0xA4FB, 0x725B}, //563 #CJK UNIFIED IDEOGRAPH
+ {0xA4FC, 0x72AC}, //564 #CJK UNIFIED IDEOGRAPH
+ {0xA4FD, 0x738B}, //565 #CJK UNIFIED IDEOGRAPH
+ {0xA4FE, 0x4E19}, //566 #CJK UNIFIED IDEOGRAPH
+ {0xA540, 0x4E16}, //567 #CJK UNIFIED IDEOGRAPH
+ {0xA541, 0x4E15}, //568 #CJK UNIFIED IDEOGRAPH
+ {0xA542, 0x4E14}, //569 #CJK UNIFIED IDEOGRAPH
+ {0xA543, 0x4E18}, //570 #CJK UNIFIED IDEOGRAPH
+ {0xA544, 0x4E3B}, //571 #CJK UNIFIED IDEOGRAPH
+ {0xA545, 0x4E4D}, //572 #CJK UNIFIED IDEOGRAPH
+ {0xA546, 0x4E4F}, //573 #CJK UNIFIED IDEOGRAPH
+ {0xA547, 0x4E4E}, //574 #CJK UNIFIED IDEOGRAPH
+ {0xA548, 0x4EE5}, //575 #CJK UNIFIED IDEOGRAPH
+ {0xA549, 0x4ED8}, //576 #CJK UNIFIED IDEOGRAPH
+ {0xA54A, 0x4ED4}, //577 #CJK UNIFIED IDEOGRAPH
+ {0xA54B, 0x4ED5}, //578 #CJK UNIFIED IDEOGRAPH
+ {0xA54C, 0x4ED6}, //579 #CJK UNIFIED IDEOGRAPH
+ {0xA54D, 0x4ED7}, //580 #CJK UNIFIED IDEOGRAPH
+ {0xA54E, 0x4EE3}, //581 #CJK UNIFIED IDEOGRAPH
+ {0xA54F, 0x4EE4}, //582 #CJK UNIFIED IDEOGRAPH
+ {0xA550, 0x4ED9}, //583 #CJK UNIFIED IDEOGRAPH
+ {0xA551, 0x4EDE}, //584 #CJK UNIFIED IDEOGRAPH
+ {0xA552, 0x5145}, //585 #CJK UNIFIED IDEOGRAPH
+ {0xA553, 0x5144}, //586 #CJK UNIFIED IDEOGRAPH
+ {0xA554, 0x5189}, //587 #CJK UNIFIED IDEOGRAPH
+ {0xA555, 0x518A}, //588 #CJK UNIFIED IDEOGRAPH
+ {0xA556, 0x51AC}, //589 #CJK UNIFIED IDEOGRAPH
+ {0xA557, 0x51F9}, //590 #CJK UNIFIED IDEOGRAPH
+ {0xA558, 0x51FA}, //591 #CJK UNIFIED IDEOGRAPH
+ {0xA559, 0x51F8}, //592 #CJK UNIFIED IDEOGRAPH
+ {0xA55A, 0x520A}, //593 #CJK UNIFIED IDEOGRAPH
+ {0xA55B, 0x52A0}, //594 #CJK UNIFIED IDEOGRAPH
+ {0xA55C, 0x529F}, //595 #CJK UNIFIED IDEOGRAPH
+ {0xA55D, 0x5305}, //596 #CJK UNIFIED IDEOGRAPH
+ {0xA55E, 0x5306}, //597 #CJK UNIFIED IDEOGRAPH
+ {0xA55F, 0x5317}, //598 #CJK UNIFIED IDEOGRAPH
+ {0xA560, 0x531D}, //599 #CJK UNIFIED IDEOGRAPH
+ {0xA561, 0x4EDF}, //600 #CJK UNIFIED IDEOGRAPH
+ {0xA562, 0x534A}, //601 #CJK UNIFIED IDEOGRAPH
+ {0xA563, 0x5349}, //602 #CJK UNIFIED IDEOGRAPH
+ {0xA564, 0x5361}, //603 #CJK UNIFIED IDEOGRAPH
+ {0xA565, 0x5360}, //604 #CJK UNIFIED IDEOGRAPH
+ {0xA566, 0x536F}, //605 #CJK UNIFIED IDEOGRAPH
+ {0xA567, 0x536E}, //606 #CJK UNIFIED IDEOGRAPH
+ {0xA568, 0x53BB}, //607 #CJK UNIFIED IDEOGRAPH
+ {0xA569, 0x53EF}, //608 #CJK UNIFIED IDEOGRAPH
+ {0xA56A, 0x53E4}, //609 #CJK UNIFIED IDEOGRAPH
+ {0xA56B, 0x53F3}, //610 #CJK UNIFIED IDEOGRAPH
+ {0xA56C, 0x53EC}, //611 #CJK UNIFIED IDEOGRAPH
+ {0xA56D, 0x53EE}, //612 #CJK UNIFIED IDEOGRAPH
+ {0xA56E, 0x53E9}, //613 #CJK UNIFIED IDEOGRAPH
+ {0xA56F, 0x53E8}, //614 #CJK UNIFIED IDEOGRAPH
+ {0xA570, 0x53FC}, //615 #CJK UNIFIED IDEOGRAPH
+ {0xA571, 0x53F8}, //616 #CJK UNIFIED IDEOGRAPH
+ {0xA572, 0x53F5}, //617 #CJK UNIFIED IDEOGRAPH
+ {0xA573, 0x53EB}, //618 #CJK UNIFIED IDEOGRAPH
+ {0xA574, 0x53E6}, //619 #CJK UNIFIED IDEOGRAPH
+ {0xA575, 0x53EA}, //620 #CJK UNIFIED IDEOGRAPH
+ {0xA576, 0x53F2}, //621 #CJK UNIFIED IDEOGRAPH
+ {0xA577, 0x53F1}, //622 #CJK UNIFIED IDEOGRAPH
+ {0xA578, 0x53F0}, //623 #CJK UNIFIED IDEOGRAPH
+ {0xA579, 0x53E5}, //624 #CJK UNIFIED IDEOGRAPH
+ {0xA57A, 0x53ED}, //625 #CJK UNIFIED IDEOGRAPH
+ {0xA57B, 0x53FB}, //626 #CJK UNIFIED IDEOGRAPH
+ {0xA57C, 0x56DB}, //627 #CJK UNIFIED IDEOGRAPH
+ {0xA57D, 0x56DA}, //628 #CJK UNIFIED IDEOGRAPH
+ {0xA57E, 0x5916}, //629 #CJK UNIFIED IDEOGRAPH
+ {0xA5A1, 0x592E}, //630 #CJK UNIFIED IDEOGRAPH
+ {0xA5A2, 0x5931}, //631 #CJK UNIFIED IDEOGRAPH
+ {0xA5A3, 0x5974}, //632 #CJK UNIFIED IDEOGRAPH
+ {0xA5A4, 0x5976}, //633 #CJK UNIFIED IDEOGRAPH
+ {0xA5A5, 0x5B55}, //634 #CJK UNIFIED IDEOGRAPH
+ {0xA5A6, 0x5B83}, //635 #CJK UNIFIED IDEOGRAPH
+ {0xA5A7, 0x5C3C}, //636 #CJK UNIFIED IDEOGRAPH
+ {0xA5A8, 0x5DE8}, //637 #CJK UNIFIED IDEOGRAPH
+ {0xA5A9, 0x5DE7}, //638 #CJK UNIFIED IDEOGRAPH
+ {0xA5AA, 0x5DE6}, //639 #CJK UNIFIED IDEOGRAPH
+ {0xA5AB, 0x5E02}, //640 #CJK UNIFIED IDEOGRAPH
+ {0xA5AC, 0x5E03}, //641 #CJK UNIFIED IDEOGRAPH
+ {0xA5AD, 0x5E73}, //642 #CJK UNIFIED IDEOGRAPH
+ {0xA5AE, 0x5E7C}, //643 #CJK UNIFIED IDEOGRAPH
+ {0xA5AF, 0x5F01}, //644 #CJK UNIFIED IDEOGRAPH
+ {0xA5B0, 0x5F18}, //645 #CJK UNIFIED IDEOGRAPH
+ {0xA5B1, 0x5F17}, //646 #CJK UNIFIED IDEOGRAPH
+ {0xA5B2, 0x5FC5}, //647 #CJK UNIFIED IDEOGRAPH
+ {0xA5B3, 0x620A}, //648 #CJK UNIFIED IDEOGRAPH
+ {0xA5B4, 0x6253}, //649 #CJK UNIFIED IDEOGRAPH
+ {0xA5B5, 0x6254}, //650 #CJK UNIFIED IDEOGRAPH
+ {0xA5B6, 0x6252}, //651 #CJK UNIFIED IDEOGRAPH
+ {0xA5B7, 0x6251}, //652 #CJK UNIFIED IDEOGRAPH
+ {0xA5B8, 0x65A5}, //653 #CJK UNIFIED IDEOGRAPH
+ {0xA5B9, 0x65E6}, //654 #CJK UNIFIED IDEOGRAPH
+ {0xA5BA, 0x672E}, //655 #CJK UNIFIED IDEOGRAPH
+ {0xA5BB, 0x672C}, //656 #CJK UNIFIED IDEOGRAPH
+ {0xA5BC, 0x672A}, //657 #CJK UNIFIED IDEOGRAPH
+ {0xA5BD, 0x672B}, //658 #CJK UNIFIED IDEOGRAPH
+ {0xA5BE, 0x672D}, //659 #CJK UNIFIED IDEOGRAPH
+ {0xA5BF, 0x6B63}, //660 #CJK UNIFIED IDEOGRAPH
+ {0xA5C0, 0x6BCD}, //661 #CJK UNIFIED IDEOGRAPH
+ {0xA5C1, 0x6C11}, //662 #CJK UNIFIED IDEOGRAPH
+ {0xA5C2, 0x6C10}, //663 #CJK UNIFIED IDEOGRAPH
+ {0xA5C3, 0x6C38}, //664 #CJK UNIFIED IDEOGRAPH
+ {0xA5C4, 0x6C41}, //665 #CJK UNIFIED IDEOGRAPH
+ {0xA5C5, 0x6C40}, //666 #CJK UNIFIED IDEOGRAPH
+ {0xA5C6, 0x6C3E}, //667 #CJK UNIFIED IDEOGRAPH
+ {0xA5C7, 0x72AF}, //668 #CJK UNIFIED IDEOGRAPH
+ {0xA5C8, 0x7384}, //669 #CJK UNIFIED IDEOGRAPH
+ {0xA5C9, 0x7389}, //670 #CJK UNIFIED IDEOGRAPH
+ {0xA5CA, 0x74DC}, //671 #CJK UNIFIED IDEOGRAPH
+ {0xA5CB, 0x74E6}, //672 #CJK UNIFIED IDEOGRAPH
+ {0xA5CC, 0x7518}, //673 #CJK UNIFIED IDEOGRAPH
+ {0xA5CD, 0x751F}, //674 #CJK UNIFIED IDEOGRAPH
+ {0xA5CE, 0x7528}, //675 #CJK UNIFIED IDEOGRAPH
+ {0xA5CF, 0x7529}, //676 #CJK UNIFIED IDEOGRAPH
+ {0xA5D0, 0x7530}, //677 #CJK UNIFIED IDEOGRAPH
+ {0xA5D1, 0x7531}, //678 #CJK UNIFIED IDEOGRAPH
+ {0xA5D2, 0x7532}, //679 #CJK UNIFIED IDEOGRAPH
+ {0xA5D3, 0x7533}, //680 #CJK UNIFIED IDEOGRAPH
+ {0xA5D4, 0x758B}, //681 #CJK UNIFIED IDEOGRAPH
+ {0xA5D5, 0x767D}, //682 #CJK UNIFIED IDEOGRAPH
+ {0xA5D6, 0x76AE}, //683 #CJK UNIFIED IDEOGRAPH
+ {0xA5D7, 0x76BF}, //684 #CJK UNIFIED IDEOGRAPH
+ {0xA5D8, 0x76EE}, //685 #CJK UNIFIED IDEOGRAPH
+ {0xA5D9, 0x77DB}, //686 #CJK UNIFIED IDEOGRAPH
+ {0xA5DA, 0x77E2}, //687 #CJK UNIFIED IDEOGRAPH
+ {0xA5DB, 0x77F3}, //688 #CJK UNIFIED IDEOGRAPH
+ {0xA5DC, 0x793A}, //689 #CJK UNIFIED IDEOGRAPH
+ {0xA5DD, 0x79BE}, //690 #CJK UNIFIED IDEOGRAPH
+ {0xA5DE, 0x7A74}, //691 #CJK UNIFIED IDEOGRAPH
+ {0xA5DF, 0x7ACB}, //692 #CJK UNIFIED IDEOGRAPH
+ {0xA5E0, 0x4E1E}, //693 #CJK UNIFIED IDEOGRAPH
+ {0xA5E1, 0x4E1F}, //694 #CJK UNIFIED IDEOGRAPH
+ {0xA5E2, 0x4E52}, //695 #CJK UNIFIED IDEOGRAPH
+ {0xA5E3, 0x4E53}, //696 #CJK UNIFIED IDEOGRAPH
+ {0xA5E4, 0x4E69}, //697 #CJK UNIFIED IDEOGRAPH
+ {0xA5E5, 0x4E99}, //698 #CJK UNIFIED IDEOGRAPH
+ {0xA5E6, 0x4EA4}, //699 #CJK UNIFIED IDEOGRAPH
+ {0xA5E7, 0x4EA6}, //700 #CJK UNIFIED IDEOGRAPH
+ {0xA5E8, 0x4EA5}, //701 #CJK UNIFIED IDEOGRAPH
+ {0xA5E9, 0x4EFF}, //702 #CJK UNIFIED IDEOGRAPH
+ {0xA5EA, 0x4F09}, //703 #CJK UNIFIED IDEOGRAPH
+ {0xA5EB, 0x4F19}, //704 #CJK UNIFIED IDEOGRAPH
+ {0xA5EC, 0x4F0A}, //705 #CJK UNIFIED IDEOGRAPH
+ {0xA5ED, 0x4F15}, //706 #CJK UNIFIED IDEOGRAPH
+ {0xA5EE, 0x4F0D}, //707 #CJK UNIFIED IDEOGRAPH
+ {0xA5EF, 0x4F10}, //708 #CJK UNIFIED IDEOGRAPH
+ {0xA5F0, 0x4F11}, //709 #CJK UNIFIED IDEOGRAPH
+ {0xA5F1, 0x4F0F}, //710 #CJK UNIFIED IDEOGRAPH
+ {0xA5F2, 0x4EF2}, //711 #CJK UNIFIED IDEOGRAPH
+ {0xA5F3, 0x4EF6}, //712 #CJK UNIFIED IDEOGRAPH
+ {0xA5F4, 0x4EFB}, //713 #CJK UNIFIED IDEOGRAPH
+ {0xA5F5, 0x4EF0}, //714 #CJK UNIFIED IDEOGRAPH
+ {0xA5F6, 0x4EF3}, //715 #CJK UNIFIED IDEOGRAPH
+ {0xA5F7, 0x4EFD}, //716 #CJK UNIFIED IDEOGRAPH
+ {0xA5F8, 0x4F01}, //717 #CJK UNIFIED IDEOGRAPH
+ {0xA5F9, 0x4F0B}, //718 #CJK UNIFIED IDEOGRAPH
+ {0xA5FA, 0x5149}, //719 #CJK UNIFIED IDEOGRAPH
+ {0xA5FB, 0x5147}, //720 #CJK UNIFIED IDEOGRAPH
+ {0xA5FC, 0x5146}, //721 #CJK UNIFIED IDEOGRAPH
+ {0xA5FD, 0x5148}, //722 #CJK UNIFIED IDEOGRAPH
+ {0xA5FE, 0x5168}, //723 #CJK UNIFIED IDEOGRAPH
+ {0xA640, 0x5171}, //724 #CJK UNIFIED IDEOGRAPH
+ {0xA641, 0x518D}, //725 #CJK UNIFIED IDEOGRAPH
+ {0xA642, 0x51B0}, //726 #CJK UNIFIED IDEOGRAPH
+ {0xA643, 0x5217}, //727 #CJK UNIFIED IDEOGRAPH
+ {0xA644, 0x5211}, //728 #CJK UNIFIED IDEOGRAPH
+ {0xA645, 0x5212}, //729 #CJK UNIFIED IDEOGRAPH
+ {0xA646, 0x520E}, //730 #CJK UNIFIED IDEOGRAPH
+ {0xA647, 0x5216}, //731 #CJK UNIFIED IDEOGRAPH
+ {0xA648, 0x52A3}, //732 #CJK UNIFIED IDEOGRAPH
+ {0xA649, 0x5308}, //733 #CJK UNIFIED IDEOGRAPH
+ {0xA64A, 0x5321}, //734 #CJK UNIFIED IDEOGRAPH
+ {0xA64B, 0x5320}, //735 #CJK UNIFIED IDEOGRAPH
+ {0xA64C, 0x5370}, //736 #CJK UNIFIED IDEOGRAPH
+ {0xA64D, 0x5371}, //737 #CJK UNIFIED IDEOGRAPH
+ {0xA64E, 0x5409}, //738 #CJK UNIFIED IDEOGRAPH
+ {0xA64F, 0x540F}, //739 #CJK UNIFIED IDEOGRAPH
+ {0xA650, 0x540C}, //740 #CJK UNIFIED IDEOGRAPH
+ {0xA651, 0x540A}, //741 #CJK UNIFIED IDEOGRAPH
+ {0xA652, 0x5410}, //742 #CJK UNIFIED IDEOGRAPH
+ {0xA653, 0x5401}, //743 #CJK UNIFIED IDEOGRAPH
+ {0xA654, 0x540B}, //744 #CJK UNIFIED IDEOGRAPH
+ {0xA655, 0x5404}, //745 #CJK UNIFIED IDEOGRAPH
+ {0xA656, 0x5411}, //746 #CJK UNIFIED IDEOGRAPH
+ {0xA657, 0x540D}, //747 #CJK UNIFIED IDEOGRAPH
+ {0xA658, 0x5408}, //748 #CJK UNIFIED IDEOGRAPH
+ {0xA659, 0x5403}, //749 #CJK UNIFIED IDEOGRAPH
+ {0xA65A, 0x540E}, //750 #CJK UNIFIED IDEOGRAPH
+ {0xA65B, 0x5406}, //751 #CJK UNIFIED IDEOGRAPH
+ {0xA65C, 0x5412}, //752 #CJK UNIFIED IDEOGRAPH
+ {0xA65D, 0x56E0}, //753 #CJK UNIFIED IDEOGRAPH
+ {0xA65E, 0x56DE}, //754 #CJK UNIFIED IDEOGRAPH
+ {0xA65F, 0x56DD}, //755 #CJK UNIFIED IDEOGRAPH
+ {0xA660, 0x5733}, //756 #CJK UNIFIED IDEOGRAPH
+ {0xA661, 0x5730}, //757 #CJK UNIFIED IDEOGRAPH
+ {0xA662, 0x5728}, //758 #CJK UNIFIED IDEOGRAPH
+ {0xA663, 0x572D}, //759 #CJK UNIFIED IDEOGRAPH
+ {0xA664, 0x572C}, //760 #CJK UNIFIED IDEOGRAPH
+ {0xA665, 0x572F}, //761 #CJK UNIFIED IDEOGRAPH
+ {0xA666, 0x5729}, //762 #CJK UNIFIED IDEOGRAPH
+ {0xA667, 0x5919}, //763 #CJK UNIFIED IDEOGRAPH
+ {0xA668, 0x591A}, //764 #CJK UNIFIED IDEOGRAPH
+ {0xA669, 0x5937}, //765 #CJK UNIFIED IDEOGRAPH
+ {0xA66A, 0x5938}, //766 #CJK UNIFIED IDEOGRAPH
+ {0xA66B, 0x5984}, //767 #CJK UNIFIED IDEOGRAPH
+ {0xA66C, 0x5978}, //768 #CJK UNIFIED IDEOGRAPH
+ {0xA66D, 0x5983}, //769 #CJK UNIFIED IDEOGRAPH
+ {0xA66E, 0x597D}, //770 #CJK UNIFIED IDEOGRAPH
+ {0xA66F, 0x5979}, //771 #CJK UNIFIED IDEOGRAPH
+ {0xA670, 0x5982}, //772 #CJK UNIFIED IDEOGRAPH
+ {0xA671, 0x5981}, //773 #CJK UNIFIED IDEOGRAPH
+ {0xA672, 0x5B57}, //774 #CJK UNIFIED IDEOGRAPH
+ {0xA673, 0x5B58}, //775 #CJK UNIFIED IDEOGRAPH
+ {0xA674, 0x5B87}, //776 #CJK UNIFIED IDEOGRAPH
+ {0xA675, 0x5B88}, //777 #CJK UNIFIED IDEOGRAPH
+ {0xA676, 0x5B85}, //778 #CJK UNIFIED IDEOGRAPH
+ {0xA677, 0x5B89}, //779 #CJK UNIFIED IDEOGRAPH
+ {0xA678, 0x5BFA}, //780 #CJK UNIFIED IDEOGRAPH
+ {0xA679, 0x5C16}, //781 #CJK UNIFIED IDEOGRAPH
+ {0xA67A, 0x5C79}, //782 #CJK UNIFIED IDEOGRAPH
+ {0xA67B, 0x5DDE}, //783 #CJK UNIFIED IDEOGRAPH
+ {0xA67C, 0x5E06}, //784 #CJK UNIFIED IDEOGRAPH
+ {0xA67D, 0x5E76}, //785 #CJK UNIFIED IDEOGRAPH
+ {0xA67E, 0x5E74}, //786 #CJK UNIFIED IDEOGRAPH
+ {0xA6A1, 0x5F0F}, //787 #CJK UNIFIED IDEOGRAPH
+ {0xA6A2, 0x5F1B}, //788 #CJK UNIFIED IDEOGRAPH
+ {0xA6A3, 0x5FD9}, //789 #CJK UNIFIED IDEOGRAPH
+ {0xA6A4, 0x5FD6}, //790 #CJK UNIFIED IDEOGRAPH
+ {0xA6A5, 0x620E}, //791 #CJK UNIFIED IDEOGRAPH
+ {0xA6A6, 0x620C}, //792 #CJK UNIFIED IDEOGRAPH
+ {0xA6A7, 0x620D}, //793 #CJK UNIFIED IDEOGRAPH
+ {0xA6A8, 0x6210}, //794 #CJK UNIFIED IDEOGRAPH
+ {0xA6A9, 0x6263}, //795 #CJK UNIFIED IDEOGRAPH
+ {0xA6AA, 0x625B}, //796 #CJK UNIFIED IDEOGRAPH
+ {0xA6AB, 0x6258}, //797 #CJK UNIFIED IDEOGRAPH
+ {0xA6AC, 0x6536}, //798 #CJK UNIFIED IDEOGRAPH
+ {0xA6AD, 0x65E9}, //799 #CJK UNIFIED IDEOGRAPH
+ {0xA6AE, 0x65E8}, //800 #CJK UNIFIED IDEOGRAPH
+ {0xA6AF, 0x65EC}, //801 #CJK UNIFIED IDEOGRAPH
+ {0xA6B0, 0x65ED}, //802 #CJK UNIFIED IDEOGRAPH
+ {0xA6B1, 0x66F2}, //803 #CJK UNIFIED IDEOGRAPH
+ {0xA6B2, 0x66F3}, //804 #CJK UNIFIED IDEOGRAPH
+ {0xA6B3, 0x6709}, //805 #CJK UNIFIED IDEOGRAPH
+ {0xA6B4, 0x673D}, //806 #CJK UNIFIED IDEOGRAPH
+ {0xA6B5, 0x6734}, //807 #CJK UNIFIED IDEOGRAPH
+ {0xA6B6, 0x6731}, //808 #CJK UNIFIED IDEOGRAPH
+ {0xA6B7, 0x6735}, //809 #CJK UNIFIED IDEOGRAPH
+ {0xA6B8, 0x6B21}, //810 #CJK UNIFIED IDEOGRAPH
+ {0xA6B9, 0x6B64}, //811 #CJK UNIFIED IDEOGRAPH
+ {0xA6BA, 0x6B7B}, //812 #CJK UNIFIED IDEOGRAPH
+ {0xA6BB, 0x6C16}, //813 #CJK UNIFIED IDEOGRAPH
+ {0xA6BC, 0x6C5D}, //814 #CJK UNIFIED IDEOGRAPH
+ {0xA6BD, 0x6C57}, //815 #CJK UNIFIED IDEOGRAPH
+ {0xA6BE, 0x6C59}, //816 #CJK UNIFIED IDEOGRAPH
+ {0xA6BF, 0x6C5F}, //817 #CJK UNIFIED IDEOGRAPH
+ {0xA6C0, 0x6C60}, //818 #CJK UNIFIED IDEOGRAPH
+ {0xA6C1, 0x6C50}, //819 #CJK UNIFIED IDEOGRAPH
+ {0xA6C2, 0x6C55}, //820 #CJK UNIFIED IDEOGRAPH
+ {0xA6C3, 0x6C61}, //821 #CJK UNIFIED IDEOGRAPH
+ {0xA6C4, 0x6C5B}, //822 #CJK UNIFIED IDEOGRAPH
+ {0xA6C5, 0x6C4D}, //823 #CJK UNIFIED IDEOGRAPH
+ {0xA6C6, 0x6C4E}, //824 #CJK UNIFIED IDEOGRAPH
+ {0xA6C7, 0x7070}, //825 #CJK UNIFIED IDEOGRAPH
+ {0xA6C8, 0x725F}, //826 #CJK UNIFIED IDEOGRAPH
+ {0xA6C9, 0x725D}, //827 #CJK UNIFIED IDEOGRAPH
+ {0xA6CA, 0x767E}, //828 #CJK UNIFIED IDEOGRAPH
+ {0xA6CB, 0x7AF9}, //829 #CJK UNIFIED IDEOGRAPH
+ {0xA6CC, 0x7C73}, //830 #CJK UNIFIED IDEOGRAPH
+ {0xA6CD, 0x7CF8}, //831 #CJK UNIFIED IDEOGRAPH
+ {0xA6CE, 0x7F36}, //832 #CJK UNIFIED IDEOGRAPH
+ {0xA6CF, 0x7F8A}, //833 #CJK UNIFIED IDEOGRAPH
+ {0xA6D0, 0x7FBD}, //834 #CJK UNIFIED IDEOGRAPH
+ {0xA6D1, 0x8001}, //835 #CJK UNIFIED IDEOGRAPH
+ {0xA6D2, 0x8003}, //836 #CJK UNIFIED IDEOGRAPH
+ {0xA6D3, 0x800C}, //837 #CJK UNIFIED IDEOGRAPH
+ {0xA6D4, 0x8012}, //838 #CJK UNIFIED IDEOGRAPH
+ {0xA6D5, 0x8033}, //839 #CJK UNIFIED IDEOGRAPH
+ {0xA6D6, 0x807F}, //840 #CJK UNIFIED IDEOGRAPH
+ {0xA6D7, 0x8089}, //841 #CJK UNIFIED IDEOGRAPH
+ {0xA6D8, 0x808B}, //842 #CJK UNIFIED IDEOGRAPH
+ {0xA6D9, 0x808C}, //843 #CJK UNIFIED IDEOGRAPH
+ {0xA6DA, 0x81E3}, //844 #CJK UNIFIED IDEOGRAPH
+ {0xA6DB, 0x81EA}, //845 #CJK UNIFIED IDEOGRAPH
+ {0xA6DC, 0x81F3}, //846 #CJK UNIFIED IDEOGRAPH
+ {0xA6DD, 0x81FC}, //847 #CJK UNIFIED IDEOGRAPH
+ {0xA6DE, 0x820C}, //848 #CJK UNIFIED IDEOGRAPH
+ {0xA6DF, 0x821B}, //849 #CJK UNIFIED IDEOGRAPH
+ {0xA6E0, 0x821F}, //850 #CJK UNIFIED IDEOGRAPH
+ {0xA6E1, 0x826E}, //851 #CJK UNIFIED IDEOGRAPH
+ {0xA6E2, 0x8272}, //852 #CJK UNIFIED IDEOGRAPH
+ {0xA6E3, 0x827E}, //853 #CJK UNIFIED IDEOGRAPH
+ {0xA6E4, 0x866B}, //854 #CJK UNIFIED IDEOGRAPH
+ {0xA6E5, 0x8840}, //855 #CJK UNIFIED IDEOGRAPH
+ {0xA6E6, 0x884C}, //856 #CJK UNIFIED IDEOGRAPH
+ {0xA6E7, 0x8863}, //857 #CJK UNIFIED IDEOGRAPH
+ {0xA6E8, 0x897F}, //858 #CJK UNIFIED IDEOGRAPH
+ {0xA6E9, 0x9621}, //859 #CJK UNIFIED IDEOGRAPH
+ {0xA6EA, 0x4E32}, //860 #CJK UNIFIED IDEOGRAPH
+ {0xA6EB, 0x4EA8}, //861 #CJK UNIFIED IDEOGRAPH
+ {0xA6EC, 0x4F4D}, //862 #CJK UNIFIED IDEOGRAPH
+ {0xA6ED, 0x4F4F}, //863 #CJK UNIFIED IDEOGRAPH
+ {0xA6EE, 0x4F47}, //864 #CJK UNIFIED IDEOGRAPH
+ {0xA6EF, 0x4F57}, //865 #CJK UNIFIED IDEOGRAPH
+ {0xA6F0, 0x4F5E}, //866 #CJK UNIFIED IDEOGRAPH
+ {0xA6F1, 0x4F34}, //867 #CJK UNIFIED IDEOGRAPH
+ {0xA6F2, 0x4F5B}, //868 #CJK UNIFIED IDEOGRAPH
+ {0xA6F3, 0x4F55}, //869 #CJK UNIFIED IDEOGRAPH
+ {0xA6F4, 0x4F30}, //870 #CJK UNIFIED IDEOGRAPH
+ {0xA6F5, 0x4F50}, //871 #CJK UNIFIED IDEOGRAPH
+ {0xA6F6, 0x4F51}, //872 #CJK UNIFIED IDEOGRAPH
+ {0xA6F7, 0x4F3D}, //873 #CJK UNIFIED IDEOGRAPH
+ {0xA6F8, 0x4F3A}, //874 #CJK UNIFIED IDEOGRAPH
+ {0xA6F9, 0x4F38}, //875 #CJK UNIFIED IDEOGRAPH
+ {0xA6FA, 0x4F43}, //876 #CJK UNIFIED IDEOGRAPH
+ {0xA6FB, 0x4F54}, //877 #CJK UNIFIED IDEOGRAPH
+ {0xA6FC, 0x4F3C}, //878 #CJK UNIFIED IDEOGRAPH
+ {0xA6FD, 0x4F46}, //879 #CJK UNIFIED IDEOGRAPH
+ {0xA6FE, 0x4F63}, //880 #CJK UNIFIED IDEOGRAPH
+ {0xA740, 0x4F5C}, //881 #CJK UNIFIED IDEOGRAPH
+ {0xA741, 0x4F60}, //882 #CJK UNIFIED IDEOGRAPH
+ {0xA742, 0x4F2F}, //883 #CJK UNIFIED IDEOGRAPH
+ {0xA743, 0x4F4E}, //884 #CJK UNIFIED IDEOGRAPH
+ {0xA744, 0x4F36}, //885 #CJK UNIFIED IDEOGRAPH
+ {0xA745, 0x4F59}, //886 #CJK UNIFIED IDEOGRAPH
+ {0xA746, 0x4F5D}, //887 #CJK UNIFIED IDEOGRAPH
+ {0xA747, 0x4F48}, //888 #CJK UNIFIED IDEOGRAPH
+ {0xA748, 0x4F5A}, //889 #CJK UNIFIED IDEOGRAPH
+ {0xA749, 0x514C}, //890 #CJK UNIFIED IDEOGRAPH
+ {0xA74A, 0x514B}, //891 #CJK UNIFIED IDEOGRAPH
+ {0xA74B, 0x514D}, //892 #CJK UNIFIED IDEOGRAPH
+ {0xA74C, 0x5175}, //893 #CJK UNIFIED IDEOGRAPH
+ {0xA74D, 0x51B6}, //894 #CJK UNIFIED IDEOGRAPH
+ {0xA74E, 0x51B7}, //895 #CJK UNIFIED IDEOGRAPH
+ {0xA74F, 0x5225}, //896 #CJK UNIFIED IDEOGRAPH
+ {0xA750, 0x5224}, //897 #CJK UNIFIED IDEOGRAPH
+ {0xA751, 0x5229}, //898 #CJK UNIFIED IDEOGRAPH
+ {0xA752, 0x522A}, //899 #CJK UNIFIED IDEOGRAPH
+ {0xA753, 0x5228}, //900 #CJK UNIFIED IDEOGRAPH
+ {0xA754, 0x52AB}, //901 #CJK UNIFIED IDEOGRAPH
+ {0xA755, 0x52A9}, //902 #CJK UNIFIED IDEOGRAPH
+ {0xA756, 0x52AA}, //903 #CJK UNIFIED IDEOGRAPH
+ {0xA757, 0x52AC}, //904 #CJK UNIFIED IDEOGRAPH
+ {0xA758, 0x5323}, //905 #CJK UNIFIED IDEOGRAPH
+ {0xA759, 0x5373}, //906 #CJK UNIFIED IDEOGRAPH
+ {0xA75A, 0x5375}, //907 #CJK UNIFIED IDEOGRAPH
+ {0xA75B, 0x541D}, //908 #CJK UNIFIED IDEOGRAPH
+ {0xA75C, 0x542D}, //909 #CJK UNIFIED IDEOGRAPH
+ {0xA75D, 0x541E}, //910 #CJK UNIFIED IDEOGRAPH
+ {0xA75E, 0x543E}, //911 #CJK UNIFIED IDEOGRAPH
+ {0xA75F, 0x5426}, //912 #CJK UNIFIED IDEOGRAPH
+ {0xA760, 0x544E}, //913 #CJK UNIFIED IDEOGRAPH
+ {0xA761, 0x5427}, //914 #CJK UNIFIED IDEOGRAPH
+ {0xA762, 0x5446}, //915 #CJK UNIFIED IDEOGRAPH
+ {0xA763, 0x5443}, //916 #CJK UNIFIED IDEOGRAPH
+ {0xA764, 0x5433}, //917 #CJK UNIFIED IDEOGRAPH
+ {0xA765, 0x5448}, //918 #CJK UNIFIED IDEOGRAPH
+ {0xA766, 0x5442}, //919 #CJK UNIFIED IDEOGRAPH
+ {0xA767, 0x541B}, //920 #CJK UNIFIED IDEOGRAPH
+ {0xA768, 0x5429}, //921 #CJK UNIFIED IDEOGRAPH
+ {0xA769, 0x544A}, //922 #CJK UNIFIED IDEOGRAPH
+ {0xA76A, 0x5439}, //923 #CJK UNIFIED IDEOGRAPH
+ {0xA76B, 0x543B}, //924 #CJK UNIFIED IDEOGRAPH
+ {0xA76C, 0x5438}, //925 #CJK UNIFIED IDEOGRAPH
+ {0xA76D, 0x542E}, //926 #CJK UNIFIED IDEOGRAPH
+ {0xA76E, 0x5435}, //927 #CJK UNIFIED IDEOGRAPH
+ {0xA76F, 0x5436}, //928 #CJK UNIFIED IDEOGRAPH
+ {0xA770, 0x5420}, //929 #CJK UNIFIED IDEOGRAPH
+ {0xA771, 0x543C}, //930 #CJK UNIFIED IDEOGRAPH
+ {0xA772, 0x5440}, //931 #CJK UNIFIED IDEOGRAPH
+ {0xA773, 0x5431}, //932 #CJK UNIFIED IDEOGRAPH
+ {0xA774, 0x542B}, //933 #CJK UNIFIED IDEOGRAPH
+ {0xA775, 0x541F}, //934 #CJK UNIFIED IDEOGRAPH
+ {0xA776, 0x542C}, //935 #CJK UNIFIED IDEOGRAPH
+ {0xA777, 0x56EA}, //936 #CJK UNIFIED IDEOGRAPH
+ {0xA778, 0x56F0}, //937 #CJK UNIFIED IDEOGRAPH
+ {0xA779, 0x56E4}, //938 #CJK UNIFIED IDEOGRAPH
+ {0xA77A, 0x56EB}, //939 #CJK UNIFIED IDEOGRAPH
+ {0xA77B, 0x574A}, //940 #CJK UNIFIED IDEOGRAPH
+ {0xA77C, 0x5751}, //941 #CJK UNIFIED IDEOGRAPH
+ {0xA77D, 0x5740}, //942 #CJK UNIFIED IDEOGRAPH
+ {0xA77E, 0x574D}, //943 #CJK UNIFIED IDEOGRAPH
+ {0xA7A1, 0x5747}, //944 #CJK UNIFIED IDEOGRAPH
+ {0xA7A2, 0x574E}, //945 #CJK UNIFIED IDEOGRAPH
+ {0xA7A3, 0x573E}, //946 #CJK UNIFIED IDEOGRAPH
+ {0xA7A4, 0x5750}, //947 #CJK UNIFIED IDEOGRAPH
+ {0xA7A5, 0x574F}, //948 #CJK UNIFIED IDEOGRAPH
+ {0xA7A6, 0x573B}, //949 #CJK UNIFIED IDEOGRAPH
+ {0xA7A7, 0x58EF}, //950 #CJK UNIFIED IDEOGRAPH
+ {0xA7A8, 0x593E}, //951 #CJK UNIFIED IDEOGRAPH
+ {0xA7A9, 0x599D}, //952 #CJK UNIFIED IDEOGRAPH
+ {0xA7AA, 0x5992}, //953 #CJK UNIFIED IDEOGRAPH
+ {0xA7AB, 0x59A8}, //954 #CJK UNIFIED IDEOGRAPH
+ {0xA7AC, 0x599E}, //955 #CJK UNIFIED IDEOGRAPH
+ {0xA7AD, 0x59A3}, //956 #CJK UNIFIED IDEOGRAPH
+ {0xA7AE, 0x5999}, //957 #CJK UNIFIED IDEOGRAPH
+ {0xA7AF, 0x5996}, //958 #CJK UNIFIED IDEOGRAPH
+ {0xA7B0, 0x598D}, //959 #CJK UNIFIED IDEOGRAPH
+ {0xA7B1, 0x59A4}, //960 #CJK UNIFIED IDEOGRAPH
+ {0xA7B2, 0x5993}, //961 #CJK UNIFIED IDEOGRAPH
+ {0xA7B3, 0x598A}, //962 #CJK UNIFIED IDEOGRAPH
+ {0xA7B4, 0x59A5}, //963 #CJK UNIFIED IDEOGRAPH
+ {0xA7B5, 0x5B5D}, //964 #CJK UNIFIED IDEOGRAPH
+ {0xA7B6, 0x5B5C}, //965 #CJK UNIFIED IDEOGRAPH
+ {0xA7B7, 0x5B5A}, //966 #CJK UNIFIED IDEOGRAPH
+ {0xA7B8, 0x5B5B}, //967 #CJK UNIFIED IDEOGRAPH
+ {0xA7B9, 0x5B8C}, //968 #CJK UNIFIED IDEOGRAPH
+ {0xA7BA, 0x5B8B}, //969 #CJK UNIFIED IDEOGRAPH
+ {0xA7BB, 0x5B8F}, //970 #CJK UNIFIED IDEOGRAPH
+ {0xA7BC, 0x5C2C}, //971 #CJK UNIFIED IDEOGRAPH
+ {0xA7BD, 0x5C40}, //972 #CJK UNIFIED IDEOGRAPH
+ {0xA7BE, 0x5C41}, //973 #CJK UNIFIED IDEOGRAPH
+ {0xA7BF, 0x5C3F}, //974 #CJK UNIFIED IDEOGRAPH
+ {0xA7C0, 0x5C3E}, //975 #CJK UNIFIED IDEOGRAPH
+ {0xA7C1, 0x5C90}, //976 #CJK UNIFIED IDEOGRAPH
+ {0xA7C2, 0x5C91}, //977 #CJK UNIFIED IDEOGRAPH
+ {0xA7C3, 0x5C94}, //978 #CJK UNIFIED IDEOGRAPH
+ {0xA7C4, 0x5C8C}, //979 #CJK UNIFIED IDEOGRAPH
+ {0xA7C5, 0x5DEB}, //980 #CJK UNIFIED IDEOGRAPH
+ {0xA7C6, 0x5E0C}, //981 #CJK UNIFIED IDEOGRAPH
+ {0xA7C7, 0x5E8F}, //982 #CJK UNIFIED IDEOGRAPH
+ {0xA7C8, 0x5E87}, //983 #CJK UNIFIED IDEOGRAPH
+ {0xA7C9, 0x5E8A}, //984 #CJK UNIFIED IDEOGRAPH
+ {0xA7CA, 0x5EF7}, //985 #CJK UNIFIED IDEOGRAPH
+ {0xA7CB, 0x5F04}, //986 #CJK UNIFIED IDEOGRAPH
+ {0xA7CC, 0x5F1F}, //987 #CJK UNIFIED IDEOGRAPH
+ {0xA7CD, 0x5F64}, //988 #CJK UNIFIED IDEOGRAPH
+ {0xA7CE, 0x5F62}, //989 #CJK UNIFIED IDEOGRAPH
+ {0xA7CF, 0x5F77}, //990 #CJK UNIFIED IDEOGRAPH
+ {0xA7D0, 0x5F79}, //991 #CJK UNIFIED IDEOGRAPH
+ {0xA7D1, 0x5FD8}, //992 #CJK UNIFIED IDEOGRAPH
+ {0xA7D2, 0x5FCC}, //993 #CJK UNIFIED IDEOGRAPH
+ {0xA7D3, 0x5FD7}, //994 #CJK UNIFIED IDEOGRAPH
+ {0xA7D4, 0x5FCD}, //995 #CJK UNIFIED IDEOGRAPH
+ {0xA7D5, 0x5FF1}, //996 #CJK UNIFIED IDEOGRAPH
+ {0xA7D6, 0x5FEB}, //997 #CJK UNIFIED IDEOGRAPH
+ {0xA7D7, 0x5FF8}, //998 #CJK UNIFIED IDEOGRAPH
+ {0xA7D8, 0x5FEA}, //999 #CJK UNIFIED IDEOGRAPH
+ {0xA7D9, 0x6212}, //1000 #CJK UNIFIED IDEOGRAPH
+ {0xA7DA, 0x6211}, //1001 #CJK UNIFIED IDEOGRAPH
+ {0xA7DB, 0x6284}, //1002 #CJK UNIFIED IDEOGRAPH
+ {0xA7DC, 0x6297}, //1003 #CJK UNIFIED IDEOGRAPH
+ {0xA7DD, 0x6296}, //1004 #CJK UNIFIED IDEOGRAPH
+ {0xA7DE, 0x6280}, //1005 #CJK UNIFIED IDEOGRAPH
+ {0xA7DF, 0x6276}, //1006 #CJK UNIFIED IDEOGRAPH
+ {0xA7E0, 0x6289}, //1007 #CJK UNIFIED IDEOGRAPH
+ {0xA7E1, 0x626D}, //1008 #CJK UNIFIED IDEOGRAPH
+ {0xA7E2, 0x628A}, //1009 #CJK UNIFIED IDEOGRAPH
+ {0xA7E3, 0x627C}, //1010 #CJK UNIFIED IDEOGRAPH
+ {0xA7E4, 0x627E}, //1011 #CJK UNIFIED IDEOGRAPH
+ {0xA7E5, 0x6279}, //1012 #CJK UNIFIED IDEOGRAPH
+ {0xA7E6, 0x6273}, //1013 #CJK UNIFIED IDEOGRAPH
+ {0xA7E7, 0x6292}, //1014 #CJK UNIFIED IDEOGRAPH
+ {0xA7E8, 0x626F}, //1015 #CJK UNIFIED IDEOGRAPH
+ {0xA7E9, 0x6298}, //1016 #CJK UNIFIED IDEOGRAPH
+ {0xA7EA, 0x626E}, //1017 #CJK UNIFIED IDEOGRAPH
+ {0xA7EB, 0x6295}, //1018 #CJK UNIFIED IDEOGRAPH
+ {0xA7EC, 0x6293}, //1019 #CJK UNIFIED IDEOGRAPH
+ {0xA7ED, 0x6291}, //1020 #CJK UNIFIED IDEOGRAPH
+ {0xA7EE, 0x6286}, //1021 #CJK UNIFIED IDEOGRAPH
+ {0xA7EF, 0x6539}, //1022 #CJK UNIFIED IDEOGRAPH
+ {0xA7F0, 0x653B}, //1023 #CJK UNIFIED IDEOGRAPH
+ {0xA7F1, 0x6538}, //1024 #CJK UNIFIED IDEOGRAPH
+ {0xA7F2, 0x65F1}, //1025 #CJK UNIFIED IDEOGRAPH
+ {0xA7F3, 0x66F4}, //1026 #CJK UNIFIED IDEOGRAPH
+ {0xA7F4, 0x675F}, //1027 #CJK UNIFIED IDEOGRAPH
+ {0xA7F5, 0x674E}, //1028 #CJK UNIFIED IDEOGRAPH
+ {0xA7F6, 0x674F}, //1029 #CJK UNIFIED IDEOGRAPH
+ {0xA7F7, 0x6750}, //1030 #CJK UNIFIED IDEOGRAPH
+ {0xA7F8, 0x6751}, //1031 #CJK UNIFIED IDEOGRAPH
+ {0xA7F9, 0x675C}, //1032 #CJK UNIFIED IDEOGRAPH
+ {0xA7FA, 0x6756}, //1033 #CJK UNIFIED IDEOGRAPH
+ {0xA7FB, 0x675E}, //1034 #CJK UNIFIED IDEOGRAPH
+ {0xA7FC, 0x6749}, //1035 #CJK UNIFIED IDEOGRAPH
+ {0xA7FD, 0x6746}, //1036 #CJK UNIFIED IDEOGRAPH
+ {0xA7FE, 0x6760}, //1037 #CJK UNIFIED IDEOGRAPH
+ {0xA840, 0x6753}, //1038 #CJK UNIFIED IDEOGRAPH
+ {0xA841, 0x6757}, //1039 #CJK UNIFIED IDEOGRAPH
+ {0xA842, 0x6B65}, //1040 #CJK UNIFIED IDEOGRAPH
+ {0xA843, 0x6BCF}, //1041 #CJK UNIFIED IDEOGRAPH
+ {0xA844, 0x6C42}, //1042 #CJK UNIFIED IDEOGRAPH
+ {0xA845, 0x6C5E}, //1043 #CJK UNIFIED IDEOGRAPH
+ {0xA846, 0x6C99}, //1044 #CJK UNIFIED IDEOGRAPH
+ {0xA847, 0x6C81}, //1045 #CJK UNIFIED IDEOGRAPH
+ {0xA848, 0x6C88}, //1046 #CJK UNIFIED IDEOGRAPH
+ {0xA849, 0x6C89}, //1047 #CJK UNIFIED IDEOGRAPH
+ {0xA84A, 0x6C85}, //1048 #CJK UNIFIED IDEOGRAPH
+ {0xA84B, 0x6C9B}, //1049 #CJK UNIFIED IDEOGRAPH
+ {0xA84C, 0x6C6A}, //1050 #CJK UNIFIED IDEOGRAPH
+ {0xA84D, 0x6C7A}, //1051 #CJK UNIFIED IDEOGRAPH
+ {0xA84E, 0x6C90}, //1052 #CJK UNIFIED IDEOGRAPH
+ {0xA84F, 0x6C70}, //1053 #CJK UNIFIED IDEOGRAPH
+ {0xA850, 0x6C8C}, //1054 #CJK UNIFIED IDEOGRAPH
+ {0xA851, 0x6C68}, //1055 #CJK UNIFIED IDEOGRAPH
+ {0xA852, 0x6C96}, //1056 #CJK UNIFIED IDEOGRAPH
+ {0xA853, 0x6C92}, //1057 #CJK UNIFIED IDEOGRAPH
+ {0xA854, 0x6C7D}, //1058 #CJK UNIFIED IDEOGRAPH
+ {0xA855, 0x6C83}, //1059 #CJK UNIFIED IDEOGRAPH
+ {0xA856, 0x6C72}, //1060 #CJK UNIFIED IDEOGRAPH
+ {0xA857, 0x6C7E}, //1061 #CJK UNIFIED IDEOGRAPH
+ {0xA858, 0x6C74}, //1062 #CJK UNIFIED IDEOGRAPH
+ {0xA859, 0x6C86}, //1063 #CJK UNIFIED IDEOGRAPH
+ {0xA85A, 0x6C76}, //1064 #CJK UNIFIED IDEOGRAPH
+ {0xA85B, 0x6C8D}, //1065 #CJK UNIFIED IDEOGRAPH
+ {0xA85C, 0x6C94}, //1066 #CJK UNIFIED IDEOGRAPH
+ {0xA85D, 0x6C98}, //1067 #CJK UNIFIED IDEOGRAPH
+ {0xA85E, 0x6C82}, //1068 #CJK UNIFIED IDEOGRAPH
+ {0xA85F, 0x7076}, //1069 #CJK UNIFIED IDEOGRAPH
+ {0xA860, 0x707C}, //1070 #CJK UNIFIED IDEOGRAPH
+ {0xA861, 0x707D}, //1071 #CJK UNIFIED IDEOGRAPH
+ {0xA862, 0x7078}, //1072 #CJK UNIFIED IDEOGRAPH
+ {0xA863, 0x7262}, //1073 #CJK UNIFIED IDEOGRAPH
+ {0xA864, 0x7261}, //1074 #CJK UNIFIED IDEOGRAPH
+ {0xA865, 0x7260}, //1075 #CJK UNIFIED IDEOGRAPH
+ {0xA866, 0x72C4}, //1076 #CJK UNIFIED IDEOGRAPH
+ {0xA867, 0x72C2}, //1077 #CJK UNIFIED IDEOGRAPH
+ {0xA868, 0x7396}, //1078 #CJK UNIFIED IDEOGRAPH
+ {0xA869, 0x752C}, //1079 #CJK UNIFIED IDEOGRAPH
+ {0xA86A, 0x752B}, //1080 #CJK UNIFIED IDEOGRAPH
+ {0xA86B, 0x7537}, //1081 #CJK UNIFIED IDEOGRAPH
+ {0xA86C, 0x7538}, //1082 #CJK UNIFIED IDEOGRAPH
+ {0xA86D, 0x7682}, //1083 #CJK UNIFIED IDEOGRAPH
+ {0xA86E, 0x76EF}, //1084 #CJK UNIFIED IDEOGRAPH
+ {0xA86F, 0x77E3}, //1085 #CJK UNIFIED IDEOGRAPH
+ {0xA870, 0x79C1}, //1086 #CJK UNIFIED IDEOGRAPH
+ {0xA871, 0x79C0}, //1087 #CJK UNIFIED IDEOGRAPH
+ {0xA872, 0x79BF}, //1088 #CJK UNIFIED IDEOGRAPH
+ {0xA873, 0x7A76}, //1089 #CJK UNIFIED IDEOGRAPH
+ {0xA874, 0x7CFB}, //1090 #CJK UNIFIED IDEOGRAPH
+ {0xA875, 0x7F55}, //1091 #CJK UNIFIED IDEOGRAPH
+ {0xA876, 0x8096}, //1092 #CJK UNIFIED IDEOGRAPH
+ {0xA877, 0x8093}, //1093 #CJK UNIFIED IDEOGRAPH
+ {0xA878, 0x809D}, //1094 #CJK UNIFIED IDEOGRAPH
+ {0xA879, 0x8098}, //1095 #CJK UNIFIED IDEOGRAPH
+ {0xA87A, 0x809B}, //1096 #CJK UNIFIED IDEOGRAPH
+ {0xA87B, 0x809A}, //1097 #CJK UNIFIED IDEOGRAPH
+ {0xA87C, 0x80B2}, //1098 #CJK UNIFIED IDEOGRAPH
+ {0xA87D, 0x826F}, //1099 #CJK UNIFIED IDEOGRAPH
+ {0xA87E, 0x8292}, //1100 #CJK UNIFIED IDEOGRAPH
+ {0xA8A1, 0x828B}, //1101 #CJK UNIFIED IDEOGRAPH
+ {0xA8A2, 0x828D}, //1102 #CJK UNIFIED IDEOGRAPH
+ {0xA8A3, 0x898B}, //1103 #CJK UNIFIED IDEOGRAPH
+ {0xA8A4, 0x89D2}, //1104 #CJK UNIFIED IDEOGRAPH
+ {0xA8A5, 0x8A00}, //1105 #CJK UNIFIED IDEOGRAPH
+ {0xA8A6, 0x8C37}, //1106 #CJK UNIFIED IDEOGRAPH
+ {0xA8A7, 0x8C46}, //1107 #CJK UNIFIED IDEOGRAPH
+ {0xA8A8, 0x8C55}, //1108 #CJK UNIFIED IDEOGRAPH
+ {0xA8A9, 0x8C9D}, //1109 #CJK UNIFIED IDEOGRAPH
+ {0xA8AA, 0x8D64}, //1110 #CJK UNIFIED IDEOGRAPH
+ {0xA8AB, 0x8D70}, //1111 #CJK UNIFIED IDEOGRAPH
+ {0xA8AC, 0x8DB3}, //1112 #CJK UNIFIED IDEOGRAPH
+ {0xA8AD, 0x8EAB}, //1113 #CJK UNIFIED IDEOGRAPH
+ {0xA8AE, 0x8ECA}, //1114 #CJK UNIFIED IDEOGRAPH
+ {0xA8AF, 0x8F9B}, //1115 #CJK UNIFIED IDEOGRAPH
+ {0xA8B0, 0x8FB0}, //1116 #CJK UNIFIED IDEOGRAPH
+ {0xA8B1, 0x8FC2}, //1117 #CJK UNIFIED IDEOGRAPH
+ {0xA8B2, 0x8FC6}, //1118 #CJK UNIFIED IDEOGRAPH
+ {0xA8B3, 0x8FC5}, //1119 #CJK UNIFIED IDEOGRAPH
+ {0xA8B4, 0x8FC4}, //1120 #CJK UNIFIED IDEOGRAPH
+ {0xA8B5, 0x5DE1}, //1121 #CJK UNIFIED IDEOGRAPH
+ {0xA8B6, 0x9091}, //1122 #CJK UNIFIED IDEOGRAPH
+ {0xA8B7, 0x90A2}, //1123 #CJK UNIFIED IDEOGRAPH
+ {0xA8B8, 0x90AA}, //1124 #CJK UNIFIED IDEOGRAPH
+ {0xA8B9, 0x90A6}, //1125 #CJK UNIFIED IDEOGRAPH
+ {0xA8BA, 0x90A3}, //1126 #CJK UNIFIED IDEOGRAPH
+ {0xA8BB, 0x9149}, //1127 #CJK UNIFIED IDEOGRAPH
+ {0xA8BC, 0x91C6}, //1128 #CJK UNIFIED IDEOGRAPH
+ {0xA8BD, 0x91CC}, //1129 #CJK UNIFIED IDEOGRAPH
+ {0xA8BE, 0x9632}, //1130 #CJK UNIFIED IDEOGRAPH
+ {0xA8BF, 0x962E}, //1131 #CJK UNIFIED IDEOGRAPH
+ {0xA8C0, 0x9631}, //1132 #CJK UNIFIED IDEOGRAPH
+ {0xA8C1, 0x962A}, //1133 #CJK UNIFIED IDEOGRAPH
+ {0xA8C2, 0x962C}, //1134 #CJK UNIFIED IDEOGRAPH
+ {0xA8C3, 0x4E26}, //1135 #CJK UNIFIED IDEOGRAPH
+ {0xA8C4, 0x4E56}, //1136 #CJK UNIFIED IDEOGRAPH
+ {0xA8C5, 0x4E73}, //1137 #CJK UNIFIED IDEOGRAPH
+ {0xA8C6, 0x4E8B}, //1138 #CJK UNIFIED IDEOGRAPH
+ {0xA8C7, 0x4E9B}, //1139 #CJK UNIFIED IDEOGRAPH
+ {0xA8C8, 0x4E9E}, //1140 #CJK UNIFIED IDEOGRAPH
+ {0xA8C9, 0x4EAB}, //1141 #CJK UNIFIED IDEOGRAPH
+ {0xA8CA, 0x4EAC}, //1142 #CJK UNIFIED IDEOGRAPH
+ {0xA8CB, 0x4F6F}, //1143 #CJK UNIFIED IDEOGRAPH
+ {0xA8CC, 0x4F9D}, //1144 #CJK UNIFIED IDEOGRAPH
+ {0xA8CD, 0x4F8D}, //1145 #CJK UNIFIED IDEOGRAPH
+ {0xA8CE, 0x4F73}, //1146 #CJK UNIFIED IDEOGRAPH
+ {0xA8CF, 0x4F7F}, //1147 #CJK UNIFIED IDEOGRAPH
+ {0xA8D0, 0x4F6C}, //1148 #CJK UNIFIED IDEOGRAPH
+ {0xA8D1, 0x4F9B}, //1149 #CJK UNIFIED IDEOGRAPH
+ {0xA8D2, 0x4F8B}, //1150 #CJK UNIFIED IDEOGRAPH
+ {0xA8D3, 0x4F86}, //1151 #CJK UNIFIED IDEOGRAPH
+ {0xA8D4, 0x4F83}, //1152 #CJK UNIFIED IDEOGRAPH
+ {0xA8D5, 0x4F70}, //1153 #CJK UNIFIED IDEOGRAPH
+ {0xA8D6, 0x4F75}, //1154 #CJK UNIFIED IDEOGRAPH
+ {0xA8D7, 0x4F88}, //1155 #CJK UNIFIED IDEOGRAPH
+ {0xA8D8, 0x4F69}, //1156 #CJK UNIFIED IDEOGRAPH
+ {0xA8D9, 0x4F7B}, //1157 #CJK UNIFIED IDEOGRAPH
+ {0xA8DA, 0x4F96}, //1158 #CJK UNIFIED IDEOGRAPH
+ {0xA8DB, 0x4F7E}, //1159 #CJK UNIFIED IDEOGRAPH
+ {0xA8DC, 0x4F8F}, //1160 #CJK UNIFIED IDEOGRAPH
+ {0xA8DD, 0x4F91}, //1161 #CJK UNIFIED IDEOGRAPH
+ {0xA8DE, 0x4F7A}, //1162 #CJK UNIFIED IDEOGRAPH
+ {0xA8DF, 0x5154}, //1163 #CJK UNIFIED IDEOGRAPH
+ {0xA8E0, 0x5152}, //1164 #CJK UNIFIED IDEOGRAPH
+ {0xA8E1, 0x5155}, //1165 #CJK UNIFIED IDEOGRAPH
+ {0xA8E2, 0x5169}, //1166 #CJK UNIFIED IDEOGRAPH
+ {0xA8E3, 0x5177}, //1167 #CJK UNIFIED IDEOGRAPH
+ {0xA8E4, 0x5176}, //1168 #CJK UNIFIED IDEOGRAPH
+ {0xA8E5, 0x5178}, //1169 #CJK UNIFIED IDEOGRAPH
+ {0xA8E6, 0x51BD}, //1170 #CJK UNIFIED IDEOGRAPH
+ {0xA8E7, 0x51FD}, //1171 #CJK UNIFIED IDEOGRAPH
+ {0xA8E8, 0x523B}, //1172 #CJK UNIFIED IDEOGRAPH
+ {0xA8E9, 0x5238}, //1173 #CJK UNIFIED IDEOGRAPH
+ {0xA8EA, 0x5237}, //1174 #CJK UNIFIED IDEOGRAPH
+ {0xA8EB, 0x523A}, //1175 #CJK UNIFIED IDEOGRAPH
+ {0xA8EC, 0x5230}, //1176 #CJK UNIFIED IDEOGRAPH
+ {0xA8ED, 0x522E}, //1177 #CJK UNIFIED IDEOGRAPH
+ {0xA8EE, 0x5236}, //1178 #CJK UNIFIED IDEOGRAPH
+ {0xA8EF, 0x5241}, //1179 #CJK UNIFIED IDEOGRAPH
+ {0xA8F0, 0x52BE}, //1180 #CJK UNIFIED IDEOGRAPH
+ {0xA8F1, 0x52BB}, //1181 #CJK UNIFIED IDEOGRAPH
+ {0xA8F2, 0x5352}, //1182 #CJK UNIFIED IDEOGRAPH
+ {0xA8F3, 0x5354}, //1183 #CJK UNIFIED IDEOGRAPH
+ {0xA8F4, 0x5353}, //1184 #CJK UNIFIED IDEOGRAPH
+ {0xA8F5, 0x5351}, //1185 #CJK UNIFIED IDEOGRAPH
+ {0xA8F6, 0x5366}, //1186 #CJK UNIFIED IDEOGRAPH
+ {0xA8F7, 0x5377}, //1187 #CJK UNIFIED IDEOGRAPH
+ {0xA8F8, 0x5378}, //1188 #CJK UNIFIED IDEOGRAPH
+ {0xA8F9, 0x5379}, //1189 #CJK UNIFIED IDEOGRAPH
+ {0xA8FA, 0x53D6}, //1190 #CJK UNIFIED IDEOGRAPH
+ {0xA8FB, 0x53D4}, //1191 #CJK UNIFIED IDEOGRAPH
+ {0xA8FC, 0x53D7}, //1192 #CJK UNIFIED IDEOGRAPH
+ {0xA8FD, 0x5473}, //1193 #CJK UNIFIED IDEOGRAPH
+ {0xA8FE, 0x5475}, //1194 #CJK UNIFIED IDEOGRAPH
+ {0xA940, 0x5496}, //1195 #CJK UNIFIED IDEOGRAPH
+ {0xA941, 0x5478}, //1196 #CJK UNIFIED IDEOGRAPH
+ {0xA942, 0x5495}, //1197 #CJK UNIFIED IDEOGRAPH
+ {0xA943, 0x5480}, //1198 #CJK UNIFIED IDEOGRAPH
+ {0xA944, 0x547B}, //1199 #CJK UNIFIED IDEOGRAPH
+ {0xA945, 0x5477}, //1200 #CJK UNIFIED IDEOGRAPH
+ {0xA946, 0x5484}, //1201 #CJK UNIFIED IDEOGRAPH
+ {0xA947, 0x5492}, //1202 #CJK UNIFIED IDEOGRAPH
+ {0xA948, 0x5486}, //1203 #CJK UNIFIED IDEOGRAPH
+ {0xA949, 0x547C}, //1204 #CJK UNIFIED IDEOGRAPH
+ {0xA94A, 0x5490}, //1205 #CJK UNIFIED IDEOGRAPH
+ {0xA94B, 0x5471}, //1206 #CJK UNIFIED IDEOGRAPH
+ {0xA94C, 0x5476}, //1207 #CJK UNIFIED IDEOGRAPH
+ {0xA94D, 0x548C}, //1208 #CJK UNIFIED IDEOGRAPH
+ {0xA94E, 0x549A}, //1209 #CJK UNIFIED IDEOGRAPH
+ {0xA94F, 0x5462}, //1210 #CJK UNIFIED IDEOGRAPH
+ {0xA950, 0x5468}, //1211 #CJK UNIFIED IDEOGRAPH
+ {0xA951, 0x548B}, //1212 #CJK UNIFIED IDEOGRAPH
+ {0xA952, 0x547D}, //1213 #CJK UNIFIED IDEOGRAPH
+ {0xA953, 0x548E}, //1214 #CJK UNIFIED IDEOGRAPH
+ {0xA954, 0x56FA}, //1215 #CJK UNIFIED IDEOGRAPH
+ {0xA955, 0x5783}, //1216 #CJK UNIFIED IDEOGRAPH
+ {0xA956, 0x5777}, //1217 #CJK UNIFIED IDEOGRAPH
+ {0xA957, 0x576A}, //1218 #CJK UNIFIED IDEOGRAPH
+ {0xA958, 0x5769}, //1219 #CJK UNIFIED IDEOGRAPH
+ {0xA959, 0x5761}, //1220 #CJK UNIFIED IDEOGRAPH
+ {0xA95A, 0x5766}, //1221 #CJK UNIFIED IDEOGRAPH
+ {0xA95B, 0x5764}, //1222 #CJK UNIFIED IDEOGRAPH
+ {0xA95C, 0x577C}, //1223 #CJK UNIFIED IDEOGRAPH
+ {0xA95D, 0x591C}, //1224 #CJK UNIFIED IDEOGRAPH
+ {0xA95E, 0x5949}, //1225 #CJK UNIFIED IDEOGRAPH
+ {0xA95F, 0x5947}, //1226 #CJK UNIFIED IDEOGRAPH
+ {0xA960, 0x5948}, //1227 #CJK UNIFIED IDEOGRAPH
+ {0xA961, 0x5944}, //1228 #CJK UNIFIED IDEOGRAPH
+ {0xA962, 0x5954}, //1229 #CJK UNIFIED IDEOGRAPH
+ {0xA963, 0x59BE}, //1230 #CJK UNIFIED IDEOGRAPH
+ {0xA964, 0x59BB}, //1231 #CJK UNIFIED IDEOGRAPH
+ {0xA965, 0x59D4}, //1232 #CJK UNIFIED IDEOGRAPH
+ {0xA966, 0x59B9}, //1233 #CJK UNIFIED IDEOGRAPH
+ {0xA967, 0x59AE}, //1234 #CJK UNIFIED IDEOGRAPH
+ {0xA968, 0x59D1}, //1235 #CJK UNIFIED IDEOGRAPH
+ {0xA969, 0x59C6}, //1236 #CJK UNIFIED IDEOGRAPH
+ {0xA96A, 0x59D0}, //1237 #CJK UNIFIED IDEOGRAPH
+ {0xA96B, 0x59CD}, //1238 #CJK UNIFIED IDEOGRAPH
+ {0xA96C, 0x59CB}, //1239 #CJK UNIFIED IDEOGRAPH
+ {0xA96D, 0x59D3}, //1240 #CJK UNIFIED IDEOGRAPH
+ {0xA96E, 0x59CA}, //1241 #CJK UNIFIED IDEOGRAPH
+ {0xA96F, 0x59AF}, //1242 #CJK UNIFIED IDEOGRAPH
+ {0xA970, 0x59B3}, //1243 #CJK UNIFIED IDEOGRAPH
+ {0xA971, 0x59D2}, //1244 #CJK UNIFIED IDEOGRAPH
+ {0xA972, 0x59C5}, //1245 #CJK UNIFIED IDEOGRAPH
+ {0xA973, 0x5B5F}, //1246 #CJK UNIFIED IDEOGRAPH
+ {0xA974, 0x5B64}, //1247 #CJK UNIFIED IDEOGRAPH
+ {0xA975, 0x5B63}, //1248 #CJK UNIFIED IDEOGRAPH
+ {0xA976, 0x5B97}, //1249 #CJK UNIFIED IDEOGRAPH
+ {0xA977, 0x5B9A}, //1250 #CJK UNIFIED IDEOGRAPH
+ {0xA978, 0x5B98}, //1251 #CJK UNIFIED IDEOGRAPH
+ {0xA979, 0x5B9C}, //1252 #CJK UNIFIED IDEOGRAPH
+ {0xA97A, 0x5B99}, //1253 #CJK UNIFIED IDEOGRAPH
+ {0xA97B, 0x5B9B}, //1254 #CJK UNIFIED IDEOGRAPH
+ {0xA97C, 0x5C1A}, //1255 #CJK UNIFIED IDEOGRAPH
+ {0xA97D, 0x5C48}, //1256 #CJK UNIFIED IDEOGRAPH
+ {0xA97E, 0x5C45}, //1257 #CJK UNIFIED IDEOGRAPH
+ {0xA9A1, 0x5C46}, //1258 #CJK UNIFIED IDEOGRAPH
+ {0xA9A2, 0x5CB7}, //1259 #CJK UNIFIED IDEOGRAPH
+ {0xA9A3, 0x5CA1}, //1260 #CJK UNIFIED IDEOGRAPH
+ {0xA9A4, 0x5CB8}, //1261 #CJK UNIFIED IDEOGRAPH
+ {0xA9A5, 0x5CA9}, //1262 #CJK UNIFIED IDEOGRAPH
+ {0xA9A6, 0x5CAB}, //1263 #CJK UNIFIED IDEOGRAPH
+ {0xA9A7, 0x5CB1}, //1264 #CJK UNIFIED IDEOGRAPH
+ {0xA9A8, 0x5CB3}, //1265 #CJK UNIFIED IDEOGRAPH
+ {0xA9A9, 0x5E18}, //1266 #CJK UNIFIED IDEOGRAPH
+ {0xA9AA, 0x5E1A}, //1267 #CJK UNIFIED IDEOGRAPH
+ {0xA9AB, 0x5E16}, //1268 #CJK UNIFIED IDEOGRAPH
+ {0xA9AC, 0x5E15}, //1269 #CJK UNIFIED IDEOGRAPH
+ {0xA9AD, 0x5E1B}, //1270 #CJK UNIFIED IDEOGRAPH
+ {0xA9AE, 0x5E11}, //1271 #CJK UNIFIED IDEOGRAPH
+ {0xA9AF, 0x5E78}, //1272 #CJK UNIFIED IDEOGRAPH
+ {0xA9B0, 0x5E9A}, //1273 #CJK UNIFIED IDEOGRAPH
+ {0xA9B1, 0x5E97}, //1274 #CJK UNIFIED IDEOGRAPH
+ {0xA9B2, 0x5E9C}, //1275 #CJK UNIFIED IDEOGRAPH
+ {0xA9B3, 0x5E95}, //1276 #CJK UNIFIED IDEOGRAPH
+ {0xA9B4, 0x5E96}, //1277 #CJK UNIFIED IDEOGRAPH
+ {0xA9B5, 0x5EF6}, //1278 #CJK UNIFIED IDEOGRAPH
+ {0xA9B6, 0x5F26}, //1279 #CJK UNIFIED IDEOGRAPH
+ {0xA9B7, 0x5F27}, //1280 #CJK UNIFIED IDEOGRAPH
+ {0xA9B8, 0x5F29}, //1281 #CJK UNIFIED IDEOGRAPH
+ {0xA9B9, 0x5F80}, //1282 #CJK UNIFIED IDEOGRAPH
+ {0xA9BA, 0x5F81}, //1283 #CJK UNIFIED IDEOGRAPH
+ {0xA9BB, 0x5F7F}, //1284 #CJK UNIFIED IDEOGRAPH
+ {0xA9BC, 0x5F7C}, //1285 #CJK UNIFIED IDEOGRAPH
+ {0xA9BD, 0x5FDD}, //1286 #CJK UNIFIED IDEOGRAPH
+ {0xA9BE, 0x5FE0}, //1287 #CJK UNIFIED IDEOGRAPH
+ {0xA9BF, 0x5FFD}, //1288 #CJK UNIFIED IDEOGRAPH
+ {0xA9C0, 0x5FF5}, //1289 #CJK UNIFIED IDEOGRAPH
+ {0xA9C1, 0x5FFF}, //1290 #CJK UNIFIED IDEOGRAPH
+ {0xA9C2, 0x600F}, //1291 #CJK UNIFIED IDEOGRAPH
+ {0xA9C3, 0x6014}, //1292 #CJK UNIFIED IDEOGRAPH
+ {0xA9C4, 0x602F}, //1293 #CJK UNIFIED IDEOGRAPH
+ {0xA9C5, 0x6035}, //1294 #CJK UNIFIED IDEOGRAPH
+ {0xA9C6, 0x6016}, //1295 #CJK UNIFIED IDEOGRAPH
+ {0xA9C7, 0x602A}, //1296 #CJK UNIFIED IDEOGRAPH
+ {0xA9C8, 0x6015}, //1297 #CJK UNIFIED IDEOGRAPH
+ {0xA9C9, 0x6021}, //1298 #CJK UNIFIED IDEOGRAPH
+ {0xA9CA, 0x6027}, //1299 #CJK UNIFIED IDEOGRAPH
+ {0xA9CB, 0x6029}, //1300 #CJK UNIFIED IDEOGRAPH
+ {0xA9CC, 0x602B}, //1301 #CJK UNIFIED IDEOGRAPH
+ {0xA9CD, 0x601B}, //1302 #CJK UNIFIED IDEOGRAPH
+ {0xA9CE, 0x6216}, //1303 #CJK UNIFIED IDEOGRAPH
+ {0xA9CF, 0x6215}, //1304 #CJK UNIFIED IDEOGRAPH
+ {0xA9D0, 0x623F}, //1305 #CJK UNIFIED IDEOGRAPH
+ {0xA9D1, 0x623E}, //1306 #CJK UNIFIED IDEOGRAPH
+ {0xA9D2, 0x6240}, //1307 #CJK UNIFIED IDEOGRAPH
+ {0xA9D3, 0x627F}, //1308 #CJK UNIFIED IDEOGRAPH
+ {0xA9D4, 0x62C9}, //1309 #CJK UNIFIED IDEOGRAPH
+ {0xA9D5, 0x62CC}, //1310 #CJK UNIFIED IDEOGRAPH
+ {0xA9D6, 0x62C4}, //1311 #CJK UNIFIED IDEOGRAPH
+ {0xA9D7, 0x62BF}, //1312 #CJK UNIFIED IDEOGRAPH
+ {0xA9D8, 0x62C2}, //1313 #CJK UNIFIED IDEOGRAPH
+ {0xA9D9, 0x62B9}, //1314 #CJK UNIFIED IDEOGRAPH
+ {0xA9DA, 0x62D2}, //1315 #CJK UNIFIED IDEOGRAPH
+ {0xA9DB, 0x62DB}, //1316 #CJK UNIFIED IDEOGRAPH
+ {0xA9DC, 0x62AB}, //1317 #CJK UNIFIED IDEOGRAPH
+ {0xA9DD, 0x62D3}, //1318 #CJK UNIFIED IDEOGRAPH
+ {0xA9DE, 0x62D4}, //1319 #CJK UNIFIED IDEOGRAPH
+ {0xA9DF, 0x62CB}, //1320 #CJK UNIFIED IDEOGRAPH
+ {0xA9E0, 0x62C8}, //1321 #CJK UNIFIED IDEOGRAPH
+ {0xA9E1, 0x62A8}, //1322 #CJK UNIFIED IDEOGRAPH
+ {0xA9E2, 0x62BD}, //1323 #CJK UNIFIED IDEOGRAPH
+ {0xA9E3, 0x62BC}, //1324 #CJK UNIFIED IDEOGRAPH
+ {0xA9E4, 0x62D0}, //1325 #CJK UNIFIED IDEOGRAPH
+ {0xA9E5, 0x62D9}, //1326 #CJK UNIFIED IDEOGRAPH
+ {0xA9E6, 0x62C7}, //1327 #CJK UNIFIED IDEOGRAPH
+ {0xA9E7, 0x62CD}, //1328 #CJK UNIFIED IDEOGRAPH
+ {0xA9E8, 0x62B5}, //1329 #CJK UNIFIED IDEOGRAPH
+ {0xA9E9, 0x62DA}, //1330 #CJK UNIFIED IDEOGRAPH
+ {0xA9EA, 0x62B1}, //1331 #CJK UNIFIED IDEOGRAPH
+ {0xA9EB, 0x62D8}, //1332 #CJK UNIFIED IDEOGRAPH
+ {0xA9EC, 0x62D6}, //1333 #CJK UNIFIED IDEOGRAPH
+ {0xA9ED, 0x62D7}, //1334 #CJK UNIFIED IDEOGRAPH
+ {0xA9EE, 0x62C6}, //1335 #CJK UNIFIED IDEOGRAPH
+ {0xA9EF, 0x62AC}, //1336 #CJK UNIFIED IDEOGRAPH
+ {0xA9F0, 0x62CE}, //1337 #CJK UNIFIED IDEOGRAPH
+ {0xA9F1, 0x653E}, //1338 #CJK UNIFIED IDEOGRAPH
+ {0xA9F2, 0x65A7}, //1339 #CJK UNIFIED IDEOGRAPH
+ {0xA9F3, 0x65BC}, //1340 #CJK UNIFIED IDEOGRAPH
+ {0xA9F4, 0x65FA}, //1341 #CJK UNIFIED IDEOGRAPH
+ {0xA9F5, 0x6614}, //1342 #CJK UNIFIED IDEOGRAPH
+ {0xA9F6, 0x6613}, //1343 #CJK UNIFIED IDEOGRAPH
+ {0xA9F7, 0x660C}, //1344 #CJK UNIFIED IDEOGRAPH
+ {0xA9F8, 0x6606}, //1345 #CJK UNIFIED IDEOGRAPH
+ {0xA9F9, 0x6602}, //1346 #CJK UNIFIED IDEOGRAPH
+ {0xA9FA, 0x660E}, //1347 #CJK UNIFIED IDEOGRAPH
+ {0xA9FB, 0x6600}, //1348 #CJK UNIFIED IDEOGRAPH
+ {0xA9FC, 0x660F}, //1349 #CJK UNIFIED IDEOGRAPH
+ {0xA9FD, 0x6615}, //1350 #CJK UNIFIED IDEOGRAPH
+ {0xA9FE, 0x660A}, //1351 #CJK UNIFIED IDEOGRAPH
+ {0xAA40, 0x6607}, //1352 #CJK UNIFIED IDEOGRAPH
+ {0xAA41, 0x670D}, //1353 #CJK UNIFIED IDEOGRAPH
+ {0xAA42, 0x670B}, //1354 #CJK UNIFIED IDEOGRAPH
+ {0xAA43, 0x676D}, //1355 #CJK UNIFIED IDEOGRAPH
+ {0xAA44, 0x678B}, //1356 #CJK UNIFIED IDEOGRAPH
+ {0xAA45, 0x6795}, //1357 #CJK UNIFIED IDEOGRAPH
+ {0xAA46, 0x6771}, //1358 #CJK UNIFIED IDEOGRAPH
+ {0xAA47, 0x679C}, //1359 #CJK UNIFIED IDEOGRAPH
+ {0xAA48, 0x6773}, //1360 #CJK UNIFIED IDEOGRAPH
+ {0xAA49, 0x6777}, //1361 #CJK UNIFIED IDEOGRAPH
+ {0xAA4A, 0x6787}, //1362 #CJK UNIFIED IDEOGRAPH
+ {0xAA4B, 0x679D}, //1363 #CJK UNIFIED IDEOGRAPH
+ {0xAA4C, 0x6797}, //1364 #CJK UNIFIED IDEOGRAPH
+ {0xAA4D, 0x676F}, //1365 #CJK UNIFIED IDEOGRAPH
+ {0xAA4E, 0x6770}, //1366 #CJK UNIFIED IDEOGRAPH
+ {0xAA4F, 0x677F}, //1367 #CJK UNIFIED IDEOGRAPH
+ {0xAA50, 0x6789}, //1368 #CJK UNIFIED IDEOGRAPH
+ {0xAA51, 0x677E}, //1369 #CJK UNIFIED IDEOGRAPH
+ {0xAA52, 0x6790}, //1370 #CJK UNIFIED IDEOGRAPH
+ {0xAA53, 0x6775}, //1371 #CJK UNIFIED IDEOGRAPH
+ {0xAA54, 0x679A}, //1372 #CJK UNIFIED IDEOGRAPH
+ {0xAA55, 0x6793}, //1373 #CJK UNIFIED IDEOGRAPH
+ {0xAA56, 0x677C}, //1374 #CJK UNIFIED IDEOGRAPH
+ {0xAA57, 0x676A}, //1375 #CJK UNIFIED IDEOGRAPH
+ {0xAA58, 0x6772}, //1376 #CJK UNIFIED IDEOGRAPH
+ {0xAA59, 0x6B23}, //1377 #CJK UNIFIED IDEOGRAPH
+ {0xAA5A, 0x6B66}, //1378 #CJK UNIFIED IDEOGRAPH
+ {0xAA5B, 0x6B67}, //1379 #CJK UNIFIED IDEOGRAPH
+ {0xAA5C, 0x6B7F}, //1380 #CJK UNIFIED IDEOGRAPH
+ {0xAA5D, 0x6C13}, //1381 #CJK UNIFIED IDEOGRAPH
+ {0xAA5E, 0x6C1B}, //1382 #CJK UNIFIED IDEOGRAPH
+ {0xAA5F, 0x6CE3}, //1383 #CJK UNIFIED IDEOGRAPH
+ {0xAA60, 0x6CE8}, //1384 #CJK UNIFIED IDEOGRAPH
+ {0xAA61, 0x6CF3}, //1385 #CJK UNIFIED IDEOGRAPH
+ {0xAA62, 0x6CB1}, //1386 #CJK UNIFIED IDEOGRAPH
+ {0xAA63, 0x6CCC}, //1387 #CJK UNIFIED IDEOGRAPH
+ {0xAA64, 0x6CE5}, //1388 #CJK UNIFIED IDEOGRAPH
+ {0xAA65, 0x6CB3}, //1389 #CJK UNIFIED IDEOGRAPH
+ {0xAA66, 0x6CBD}, //1390 #CJK UNIFIED IDEOGRAPH
+ {0xAA67, 0x6CBE}, //1391 #CJK UNIFIED IDEOGRAPH
+ {0xAA68, 0x6CBC}, //1392 #CJK UNIFIED IDEOGRAPH
+ {0xAA69, 0x6CE2}, //1393 #CJK UNIFIED IDEOGRAPH
+ {0xAA6A, 0x6CAB}, //1394 #CJK UNIFIED IDEOGRAPH
+ {0xAA6B, 0x6CD5}, //1395 #CJK UNIFIED IDEOGRAPH
+ {0xAA6C, 0x6CD3}, //1396 #CJK UNIFIED IDEOGRAPH
+ {0xAA6D, 0x6CB8}, //1397 #CJK UNIFIED IDEOGRAPH
+ {0xAA6E, 0x6CC4}, //1398 #CJK UNIFIED IDEOGRAPH
+ {0xAA6F, 0x6CB9}, //1399 #CJK UNIFIED IDEOGRAPH
+ {0xAA70, 0x6CC1}, //1400 #CJK UNIFIED IDEOGRAPH
+ {0xAA71, 0x6CAE}, //1401 #CJK UNIFIED IDEOGRAPH
+ {0xAA72, 0x6CD7}, //1402 #CJK UNIFIED IDEOGRAPH
+ {0xAA73, 0x6CC5}, //1403 #CJK UNIFIED IDEOGRAPH
+ {0xAA74, 0x6CF1}, //1404 #CJK UNIFIED IDEOGRAPH
+ {0xAA75, 0x6CBF}, //1405 #CJK UNIFIED IDEOGRAPH
+ {0xAA76, 0x6CBB}, //1406 #CJK UNIFIED IDEOGRAPH
+ {0xAA77, 0x6CE1}, //1407 #CJK UNIFIED IDEOGRAPH
+ {0xAA78, 0x6CDB}, //1408 #CJK UNIFIED IDEOGRAPH
+ {0xAA79, 0x6CCA}, //1409 #CJK UNIFIED IDEOGRAPH
+ {0xAA7A, 0x6CAC}, //1410 #CJK UNIFIED IDEOGRAPH
+ {0xAA7B, 0x6CEF}, //1411 #CJK UNIFIED IDEOGRAPH
+ {0xAA7C, 0x6CDC}, //1412 #CJK UNIFIED IDEOGRAPH
+ {0xAA7D, 0x6CD6}, //1413 #CJK UNIFIED IDEOGRAPH
+ {0xAA7E, 0x6CE0}, //1414 #CJK UNIFIED IDEOGRAPH
+ {0xAAA1, 0x7095}, //1415 #CJK UNIFIED IDEOGRAPH
+ {0xAAA2, 0x708E}, //1416 #CJK UNIFIED IDEOGRAPH
+ {0xAAA3, 0x7092}, //1417 #CJK UNIFIED IDEOGRAPH
+ {0xAAA4, 0x708A}, //1418 #CJK UNIFIED IDEOGRAPH
+ {0xAAA5, 0x7099}, //1419 #CJK UNIFIED IDEOGRAPH
+ {0xAAA6, 0x722C}, //1420 #CJK UNIFIED IDEOGRAPH
+ {0xAAA7, 0x722D}, //1421 #CJK UNIFIED IDEOGRAPH
+ {0xAAA8, 0x7238}, //1422 #CJK UNIFIED IDEOGRAPH
+ {0xAAA9, 0x7248}, //1423 #CJK UNIFIED IDEOGRAPH
+ {0xAAAA, 0x7267}, //1424 #CJK UNIFIED IDEOGRAPH
+ {0xAAAB, 0x7269}, //1425 #CJK UNIFIED IDEOGRAPH
+ {0xAAAC, 0x72C0}, //1426 #CJK UNIFIED IDEOGRAPH
+ {0xAAAD, 0x72CE}, //1427 #CJK UNIFIED IDEOGRAPH
+ {0xAAAE, 0x72D9}, //1428 #CJK UNIFIED IDEOGRAPH
+ {0xAAAF, 0x72D7}, //1429 #CJK UNIFIED IDEOGRAPH
+ {0xAAB0, 0x72D0}, //1430 #CJK UNIFIED IDEOGRAPH
+ {0xAAB1, 0x73A9}, //1431 #CJK UNIFIED IDEOGRAPH
+ {0xAAB2, 0x73A8}, //1432 #CJK UNIFIED IDEOGRAPH
+ {0xAAB3, 0x739F}, //1433 #CJK UNIFIED IDEOGRAPH
+ {0xAAB4, 0x73AB}, //1434 #CJK UNIFIED IDEOGRAPH
+ {0xAAB5, 0x73A5}, //1435 #CJK UNIFIED IDEOGRAPH
+ {0xAAB6, 0x753D}, //1436 #CJK UNIFIED IDEOGRAPH
+ {0xAAB7, 0x759D}, //1437 #CJK UNIFIED IDEOGRAPH
+ {0xAAB8, 0x7599}, //1438 #CJK UNIFIED IDEOGRAPH
+ {0xAAB9, 0x759A}, //1439 #CJK UNIFIED IDEOGRAPH
+ {0xAABA, 0x7684}, //1440 #CJK UNIFIED IDEOGRAPH
+ {0xAABB, 0x76C2}, //1441 #CJK UNIFIED IDEOGRAPH
+ {0xAABC, 0x76F2}, //1442 #CJK UNIFIED IDEOGRAPH
+ {0xAABD, 0x76F4}, //1443 #CJK UNIFIED IDEOGRAPH
+ {0xAABE, 0x77E5}, //1444 #CJK UNIFIED IDEOGRAPH
+ {0xAABF, 0x77FD}, //1445 #CJK UNIFIED IDEOGRAPH
+ {0xAAC0, 0x793E}, //1446 #CJK UNIFIED IDEOGRAPH
+ {0xAAC1, 0x7940}, //1447 #CJK UNIFIED IDEOGRAPH
+ {0xAAC2, 0x7941}, //1448 #CJK UNIFIED IDEOGRAPH
+ {0xAAC3, 0x79C9}, //1449 #CJK UNIFIED IDEOGRAPH
+ {0xAAC4, 0x79C8}, //1450 #CJK UNIFIED IDEOGRAPH
+ {0xAAC5, 0x7A7A}, //1451 #CJK UNIFIED IDEOGRAPH
+ {0xAAC6, 0x7A79}, //1452 #CJK UNIFIED IDEOGRAPH
+ {0xAAC7, 0x7AFA}, //1453 #CJK UNIFIED IDEOGRAPH
+ {0xAAC8, 0x7CFE}, //1454 #CJK UNIFIED IDEOGRAPH
+ {0xAAC9, 0x7F54}, //1455 #CJK UNIFIED IDEOGRAPH
+ {0xAACA, 0x7F8C}, //1456 #CJK UNIFIED IDEOGRAPH
+ {0xAACB, 0x7F8B}, //1457 #CJK UNIFIED IDEOGRAPH
+ {0xAACC, 0x8005}, //1458 #CJK UNIFIED IDEOGRAPH
+ {0xAACD, 0x80BA}, //1459 #CJK UNIFIED IDEOGRAPH
+ {0xAACE, 0x80A5}, //1460 #CJK UNIFIED IDEOGRAPH
+ {0xAACF, 0x80A2}, //1461 #CJK UNIFIED IDEOGRAPH
+ {0xAAD0, 0x80B1}, //1462 #CJK UNIFIED IDEOGRAPH
+ {0xAAD1, 0x80A1}, //1463 #CJK UNIFIED IDEOGRAPH
+ {0xAAD2, 0x80AB}, //1464 #CJK UNIFIED IDEOGRAPH
+ {0xAAD3, 0x80A9}, //1465 #CJK UNIFIED IDEOGRAPH
+ {0xAAD4, 0x80B4}, //1466 #CJK UNIFIED IDEOGRAPH
+ {0xAAD5, 0x80AA}, //1467 #CJK UNIFIED IDEOGRAPH
+ {0xAAD6, 0x80AF}, //1468 #CJK UNIFIED IDEOGRAPH
+ {0xAAD7, 0x81E5}, //1469 #CJK UNIFIED IDEOGRAPH
+ {0xAAD8, 0x81FE}, //1470 #CJK UNIFIED IDEOGRAPH
+ {0xAAD9, 0x820D}, //1471 #CJK UNIFIED IDEOGRAPH
+ {0xAADA, 0x82B3}, //1472 #CJK UNIFIED IDEOGRAPH
+ {0xAADB, 0x829D}, //1473 #CJK UNIFIED IDEOGRAPH
+ {0xAADC, 0x8299}, //1474 #CJK UNIFIED IDEOGRAPH
+ {0xAADD, 0x82AD}, //1475 #CJK UNIFIED IDEOGRAPH
+ {0xAADE, 0x82BD}, //1476 #CJK UNIFIED IDEOGRAPH
+ {0xAADF, 0x829F}, //1477 #CJK UNIFIED IDEOGRAPH
+ {0xAAE0, 0x82B9}, //1478 #CJK UNIFIED IDEOGRAPH
+ {0xAAE1, 0x82B1}, //1479 #CJK UNIFIED IDEOGRAPH
+ {0xAAE2, 0x82AC}, //1480 #CJK UNIFIED IDEOGRAPH
+ {0xAAE3, 0x82A5}, //1481 #CJK UNIFIED IDEOGRAPH
+ {0xAAE4, 0x82AF}, //1482 #CJK UNIFIED IDEOGRAPH
+ {0xAAE5, 0x82B8}, //1483 #CJK UNIFIED IDEOGRAPH
+ {0xAAE6, 0x82A3}, //1484 #CJK UNIFIED IDEOGRAPH
+ {0xAAE7, 0x82B0}, //1485 #CJK UNIFIED IDEOGRAPH
+ {0xAAE8, 0x82BE}, //1486 #CJK UNIFIED IDEOGRAPH
+ {0xAAE9, 0x82B7}, //1487 #CJK UNIFIED IDEOGRAPH
+ {0xAAEA, 0x864E}, //1488 #CJK UNIFIED IDEOGRAPH
+ {0xAAEB, 0x8671}, //1489 #CJK UNIFIED IDEOGRAPH
+ {0xAAEC, 0x521D}, //1490 #CJK UNIFIED IDEOGRAPH
+ {0xAAED, 0x8868}, //1491 #CJK UNIFIED IDEOGRAPH
+ {0xAAEE, 0x8ECB}, //1492 #CJK UNIFIED IDEOGRAPH
+ {0xAAEF, 0x8FCE}, //1493 #CJK UNIFIED IDEOGRAPH
+ {0xAAF0, 0x8FD4}, //1494 #CJK UNIFIED IDEOGRAPH
+ {0xAAF1, 0x8FD1}, //1495 #CJK UNIFIED IDEOGRAPH
+ {0xAAF2, 0x90B5}, //1496 #CJK UNIFIED IDEOGRAPH
+ {0xAAF3, 0x90B8}, //1497 #CJK UNIFIED IDEOGRAPH
+ {0xAAF4, 0x90B1}, //1498 #CJK UNIFIED IDEOGRAPH
+ {0xAAF5, 0x90B6}, //1499 #CJK UNIFIED IDEOGRAPH
+ {0xAAF6, 0x91C7}, //1500 #CJK UNIFIED IDEOGRAPH
+ {0xAAF7, 0x91D1}, //1501 #CJK UNIFIED IDEOGRAPH
+ {0xAAF8, 0x9577}, //1502 #CJK UNIFIED IDEOGRAPH
+ {0xAAF9, 0x9580}, //1503 #CJK UNIFIED IDEOGRAPH
+ {0xAAFA, 0x961C}, //1504 #CJK UNIFIED IDEOGRAPH
+ {0xAAFB, 0x9640}, //1505 #CJK UNIFIED IDEOGRAPH
+ {0xAAFC, 0x963F}, //1506 #CJK UNIFIED IDEOGRAPH
+ {0xAAFD, 0x963B}, //1507 #CJK UNIFIED IDEOGRAPH
+ {0xAAFE, 0x9644}, //1508 #CJK UNIFIED IDEOGRAPH
+ {0xAB40, 0x9642}, //1509 #CJK UNIFIED IDEOGRAPH
+ {0xAB41, 0x96B9}, //1510 #CJK UNIFIED IDEOGRAPH
+ {0xAB42, 0x96E8}, //1511 #CJK UNIFIED IDEOGRAPH
+ {0xAB43, 0x9752}, //1512 #CJK UNIFIED IDEOGRAPH
+ {0xAB44, 0x975E}, //1513 #CJK UNIFIED IDEOGRAPH
+ {0xAB45, 0x4E9F}, //1514 #CJK UNIFIED IDEOGRAPH
+ {0xAB46, 0x4EAD}, //1515 #CJK UNIFIED IDEOGRAPH
+ {0xAB47, 0x4EAE}, //1516 #CJK UNIFIED IDEOGRAPH
+ {0xAB48, 0x4FE1}, //1517 #CJK UNIFIED IDEOGRAPH
+ {0xAB49, 0x4FB5}, //1518 #CJK UNIFIED IDEOGRAPH
+ {0xAB4A, 0x4FAF}, //1519 #CJK UNIFIED IDEOGRAPH
+ {0xAB4B, 0x4FBF}, //1520 #CJK UNIFIED IDEOGRAPH
+ {0xAB4C, 0x4FE0}, //1521 #CJK UNIFIED IDEOGRAPH
+ {0xAB4D, 0x4FD1}, //1522 #CJK UNIFIED IDEOGRAPH
+ {0xAB4E, 0x4FCF}, //1523 #CJK UNIFIED IDEOGRAPH
+ {0xAB4F, 0x4FDD}, //1524 #CJK UNIFIED IDEOGRAPH
+ {0xAB50, 0x4FC3}, //1525 #CJK UNIFIED IDEOGRAPH
+ {0xAB51, 0x4FB6}, //1526 #CJK UNIFIED IDEOGRAPH
+ {0xAB52, 0x4FD8}, //1527 #CJK UNIFIED IDEOGRAPH
+ {0xAB53, 0x4FDF}, //1528 #CJK UNIFIED IDEOGRAPH
+ {0xAB54, 0x4FCA}, //1529 #CJK UNIFIED IDEOGRAPH
+ {0xAB55, 0x4FD7}, //1530 #CJK UNIFIED IDEOGRAPH
+ {0xAB56, 0x4FAE}, //1531 #CJK UNIFIED IDEOGRAPH
+ {0xAB57, 0x4FD0}, //1532 #CJK UNIFIED IDEOGRAPH
+ {0xAB58, 0x4FC4}, //1533 #CJK UNIFIED IDEOGRAPH
+ {0xAB59, 0x4FC2}, //1534 #CJK UNIFIED IDEOGRAPH
+ {0xAB5A, 0x4FDA}, //1535 #CJK UNIFIED IDEOGRAPH
+ {0xAB5B, 0x4FCE}, //1536 #CJK UNIFIED IDEOGRAPH
+ {0xAB5C, 0x4FDE}, //1537 #CJK UNIFIED IDEOGRAPH
+ {0xAB5D, 0x4FB7}, //1538 #CJK UNIFIED IDEOGRAPH
+ {0xAB5E, 0x5157}, //1539 #CJK UNIFIED IDEOGRAPH
+ {0xAB5F, 0x5192}, //1540 #CJK UNIFIED IDEOGRAPH
+ {0xAB60, 0x5191}, //1541 #CJK UNIFIED IDEOGRAPH
+ {0xAB61, 0x51A0}, //1542 #CJK UNIFIED IDEOGRAPH
+ {0xAB62, 0x524E}, //1543 #CJK UNIFIED IDEOGRAPH
+ {0xAB63, 0x5243}, //1544 #CJK UNIFIED IDEOGRAPH
+ {0xAB64, 0x524A}, //1545 #CJK UNIFIED IDEOGRAPH
+ {0xAB65, 0x524D}, //1546 #CJK UNIFIED IDEOGRAPH
+ {0xAB66, 0x524C}, //1547 #CJK UNIFIED IDEOGRAPH
+ {0xAB67, 0x524B}, //1548 #CJK UNIFIED IDEOGRAPH
+ {0xAB68, 0x5247}, //1549 #CJK UNIFIED IDEOGRAPH
+ {0xAB69, 0x52C7}, //1550 #CJK UNIFIED IDEOGRAPH
+ {0xAB6A, 0x52C9}, //1551 #CJK UNIFIED IDEOGRAPH
+ {0xAB6B, 0x52C3}, //1552 #CJK UNIFIED IDEOGRAPH
+ {0xAB6C, 0x52C1}, //1553 #CJK UNIFIED IDEOGRAPH
+ {0xAB6D, 0x530D}, //1554 #CJK UNIFIED IDEOGRAPH
+ {0xAB6E, 0x5357}, //1555 #CJK UNIFIED IDEOGRAPH
+ {0xAB6F, 0x537B}, //1556 #CJK UNIFIED IDEOGRAPH
+ {0xAB70, 0x539A}, //1557 #CJK UNIFIED IDEOGRAPH
+ {0xAB71, 0x53DB}, //1558 #CJK UNIFIED IDEOGRAPH
+ {0xAB72, 0x54AC}, //1559 #CJK UNIFIED IDEOGRAPH
+ {0xAB73, 0x54C0}, //1560 #CJK UNIFIED IDEOGRAPH
+ {0xAB74, 0x54A8}, //1561 #CJK UNIFIED IDEOGRAPH
+ {0xAB75, 0x54CE}, //1562 #CJK UNIFIED IDEOGRAPH
+ {0xAB76, 0x54C9}, //1563 #CJK UNIFIED IDEOGRAPH
+ {0xAB77, 0x54B8}, //1564 #CJK UNIFIED IDEOGRAPH
+ {0xAB78, 0x54A6}, //1565 #CJK UNIFIED IDEOGRAPH
+ {0xAB79, 0x54B3}, //1566 #CJK UNIFIED IDEOGRAPH
+ {0xAB7A, 0x54C7}, //1567 #CJK UNIFIED IDEOGRAPH
+ {0xAB7B, 0x54C2}, //1568 #CJK UNIFIED IDEOGRAPH
+ {0xAB7C, 0x54BD}, //1569 #CJK UNIFIED IDEOGRAPH
+ {0xAB7D, 0x54AA}, //1570 #CJK UNIFIED IDEOGRAPH
+ {0xAB7E, 0x54C1}, //1571 #CJK UNIFIED IDEOGRAPH
+ {0xABA1, 0x54C4}, //1572 #CJK UNIFIED IDEOGRAPH
+ {0xABA2, 0x54C8}, //1573 #CJK UNIFIED IDEOGRAPH
+ {0xABA3, 0x54AF}, //1574 #CJK UNIFIED IDEOGRAPH
+ {0xABA4, 0x54AB}, //1575 #CJK UNIFIED IDEOGRAPH
+ {0xABA5, 0x54B1}, //1576 #CJK UNIFIED IDEOGRAPH
+ {0xABA6, 0x54BB}, //1577 #CJK UNIFIED IDEOGRAPH
+ {0xABA7, 0x54A9}, //1578 #CJK UNIFIED IDEOGRAPH
+ {0xABA8, 0x54A7}, //1579 #CJK UNIFIED IDEOGRAPH
+ {0xABA9, 0x54BF}, //1580 #CJK UNIFIED IDEOGRAPH
+ {0xABAA, 0x56FF}, //1581 #CJK UNIFIED IDEOGRAPH
+ {0xABAB, 0x5782}, //1582 #CJK UNIFIED IDEOGRAPH
+ {0xABAC, 0x578B}, //1583 #CJK UNIFIED IDEOGRAPH
+ {0xABAD, 0x57A0}, //1584 #CJK UNIFIED IDEOGRAPH
+ {0xABAE, 0x57A3}, //1585 #CJK UNIFIED IDEOGRAPH
+ {0xABAF, 0x57A2}, //1586 #CJK UNIFIED IDEOGRAPH
+ {0xABB0, 0x57CE}, //1587 #CJK UNIFIED IDEOGRAPH
+ {0xABB1, 0x57AE}, //1588 #CJK UNIFIED IDEOGRAPH
+ {0xABB2, 0x5793}, //1589 #CJK UNIFIED IDEOGRAPH
+ {0xABB3, 0x5955}, //1590 #CJK UNIFIED IDEOGRAPH
+ {0xABB4, 0x5951}, //1591 #CJK UNIFIED IDEOGRAPH
+ {0xABB5, 0x594F}, //1592 #CJK UNIFIED IDEOGRAPH
+ {0xABB6, 0x594E}, //1593 #CJK UNIFIED IDEOGRAPH
+ {0xABB7, 0x5950}, //1594 #CJK UNIFIED IDEOGRAPH
+ {0xABB8, 0x59DC}, //1595 #CJK UNIFIED IDEOGRAPH
+ {0xABB9, 0x59D8}, //1596 #CJK UNIFIED IDEOGRAPH
+ {0xABBA, 0x59FF}, //1597 #CJK UNIFIED IDEOGRAPH
+ {0xABBB, 0x59E3}, //1598 #CJK UNIFIED IDEOGRAPH
+ {0xABBC, 0x59E8}, //1599 #CJK UNIFIED IDEOGRAPH
+ {0xABBD, 0x5A03}, //1600 #CJK UNIFIED IDEOGRAPH
+ {0xABBE, 0x59E5}, //1601 #CJK UNIFIED IDEOGRAPH
+ {0xABBF, 0x59EA}, //1602 #CJK UNIFIED IDEOGRAPH
+ {0xABC0, 0x59DA}, //1603 #CJK UNIFIED IDEOGRAPH
+ {0xABC1, 0x59E6}, //1604 #CJK UNIFIED IDEOGRAPH
+ {0xABC2, 0x5A01}, //1605 #CJK UNIFIED IDEOGRAPH
+ {0xABC3, 0x59FB}, //1606 #CJK UNIFIED IDEOGRAPH
+ {0xABC4, 0x5B69}, //1607 #CJK UNIFIED IDEOGRAPH
+ {0xABC5, 0x5BA3}, //1608 #CJK UNIFIED IDEOGRAPH
+ {0xABC6, 0x5BA6}, //1609 #CJK UNIFIED IDEOGRAPH
+ {0xABC7, 0x5BA4}, //1610 #CJK UNIFIED IDEOGRAPH
+ {0xABC8, 0x5BA2}, //1611 #CJK UNIFIED IDEOGRAPH
+ {0xABC9, 0x5BA5}, //1612 #CJK UNIFIED IDEOGRAPH
+ {0xABCA, 0x5C01}, //1613 #CJK UNIFIED IDEOGRAPH
+ {0xABCB, 0x5C4E}, //1614 #CJK UNIFIED IDEOGRAPH
+ {0xABCC, 0x5C4F}, //1615 #CJK UNIFIED IDEOGRAPH
+ {0xABCD, 0x5C4D}, //1616 #CJK UNIFIED IDEOGRAPH
+ {0xABCE, 0x5C4B}, //1617 #CJK UNIFIED IDEOGRAPH
+ {0xABCF, 0x5CD9}, //1618 #CJK UNIFIED IDEOGRAPH
+ {0xABD0, 0x5CD2}, //1619 #CJK UNIFIED IDEOGRAPH
+ {0xABD1, 0x5DF7}, //1620 #CJK UNIFIED IDEOGRAPH
+ {0xABD2, 0x5E1D}, //1621 #CJK UNIFIED IDEOGRAPH
+ {0xABD3, 0x5E25}, //1622 #CJK UNIFIED IDEOGRAPH
+ {0xABD4, 0x5E1F}, //1623 #CJK UNIFIED IDEOGRAPH
+ {0xABD5, 0x5E7D}, //1624 #CJK UNIFIED IDEOGRAPH
+ {0xABD6, 0x5EA0}, //1625 #CJK UNIFIED IDEOGRAPH
+ {0xABD7, 0x5EA6}, //1626 #CJK UNIFIED IDEOGRAPH
+ {0xABD8, 0x5EFA}, //1627 #CJK UNIFIED IDEOGRAPH
+ {0xABD9, 0x5F08}, //1628 #CJK UNIFIED IDEOGRAPH
+ {0xABDA, 0x5F2D}, //1629 #CJK UNIFIED IDEOGRAPH
+ {0xABDB, 0x5F65}, //1630 #CJK UNIFIED IDEOGRAPH
+ {0xABDC, 0x5F88}, //1631 #CJK UNIFIED IDEOGRAPH
+ {0xABDD, 0x5F85}, //1632 #CJK UNIFIED IDEOGRAPH
+ {0xABDE, 0x5F8A}, //1633 #CJK UNIFIED IDEOGRAPH
+ {0xABDF, 0x5F8B}, //1634 #CJK UNIFIED IDEOGRAPH
+ {0xABE0, 0x5F87}, //1635 #CJK UNIFIED IDEOGRAPH
+ {0xABE1, 0x5F8C}, //1636 #CJK UNIFIED IDEOGRAPH
+ {0xABE2, 0x5F89}, //1637 #CJK UNIFIED IDEOGRAPH
+ {0xABE3, 0x6012}, //1638 #CJK UNIFIED IDEOGRAPH
+ {0xABE4, 0x601D}, //1639 #CJK UNIFIED IDEOGRAPH
+ {0xABE5, 0x6020}, //1640 #CJK UNIFIED IDEOGRAPH
+ {0xABE6, 0x6025}, //1641 #CJK UNIFIED IDEOGRAPH
+ {0xABE7, 0x600E}, //1642 #CJK UNIFIED IDEOGRAPH
+ {0xABE8, 0x6028}, //1643 #CJK UNIFIED IDEOGRAPH
+ {0xABE9, 0x604D}, //1644 #CJK UNIFIED IDEOGRAPH
+ {0xABEA, 0x6070}, //1645 #CJK UNIFIED IDEOGRAPH
+ {0xABEB, 0x6068}, //1646 #CJK UNIFIED IDEOGRAPH
+ {0xABEC, 0x6062}, //1647 #CJK UNIFIED IDEOGRAPH
+ {0xABED, 0x6046}, //1648 #CJK UNIFIED IDEOGRAPH
+ {0xABEE, 0x6043}, //1649 #CJK UNIFIED IDEOGRAPH
+ {0xABEF, 0x606C}, //1650 #CJK UNIFIED IDEOGRAPH
+ {0xABF0, 0x606B}, //1651 #CJK UNIFIED IDEOGRAPH
+ {0xABF1, 0x606A}, //1652 #CJK UNIFIED IDEOGRAPH
+ {0xABF2, 0x6064}, //1653 #CJK UNIFIED IDEOGRAPH
+ {0xABF3, 0x6241}, //1654 #CJK UNIFIED IDEOGRAPH
+ {0xABF4, 0x62DC}, //1655 #CJK UNIFIED IDEOGRAPH
+ {0xABF5, 0x6316}, //1656 #CJK UNIFIED IDEOGRAPH
+ {0xABF6, 0x6309}, //1657 #CJK UNIFIED IDEOGRAPH
+ {0xABF7, 0x62FC}, //1658 #CJK UNIFIED IDEOGRAPH
+ {0xABF8, 0x62ED}, //1659 #CJK UNIFIED IDEOGRAPH
+ {0xABF9, 0x6301}, //1660 #CJK UNIFIED IDEOGRAPH
+ {0xABFA, 0x62EE}, //1661 #CJK UNIFIED IDEOGRAPH
+ {0xABFB, 0x62FD}, //1662 #CJK UNIFIED IDEOGRAPH
+ {0xABFC, 0x6307}, //1663 #CJK UNIFIED IDEOGRAPH
+ {0xABFD, 0x62F1}, //1664 #CJK UNIFIED IDEOGRAPH
+ {0xABFE, 0x62F7}, //1665 #CJK UNIFIED IDEOGRAPH
+ {0xAC40, 0x62EF}, //1666 #CJK UNIFIED IDEOGRAPH
+ {0xAC41, 0x62EC}, //1667 #CJK UNIFIED IDEOGRAPH
+ {0xAC42, 0x62FE}, //1668 #CJK UNIFIED IDEOGRAPH
+ {0xAC43, 0x62F4}, //1669 #CJK UNIFIED IDEOGRAPH
+ {0xAC44, 0x6311}, //1670 #CJK UNIFIED IDEOGRAPH
+ {0xAC45, 0x6302}, //1671 #CJK UNIFIED IDEOGRAPH
+ {0xAC46, 0x653F}, //1672 #CJK UNIFIED IDEOGRAPH
+ {0xAC47, 0x6545}, //1673 #CJK UNIFIED IDEOGRAPH
+ {0xAC48, 0x65AB}, //1674 #CJK UNIFIED IDEOGRAPH
+ {0xAC49, 0x65BD}, //1675 #CJK UNIFIED IDEOGRAPH
+ {0xAC4A, 0x65E2}, //1676 #CJK UNIFIED IDEOGRAPH
+ {0xAC4B, 0x6625}, //1677 #CJK UNIFIED IDEOGRAPH
+ {0xAC4C, 0x662D}, //1678 #CJK UNIFIED IDEOGRAPH
+ {0xAC4D, 0x6620}, //1679 #CJK UNIFIED IDEOGRAPH
+ {0xAC4E, 0x6627}, //1680 #CJK UNIFIED IDEOGRAPH
+ {0xAC4F, 0x662F}, //1681 #CJK UNIFIED IDEOGRAPH
+ {0xAC50, 0x661F}, //1682 #CJK UNIFIED IDEOGRAPH
+ {0xAC51, 0x6628}, //1683 #CJK UNIFIED IDEOGRAPH
+ {0xAC52, 0x6631}, //1684 #CJK UNIFIED IDEOGRAPH
+ {0xAC53, 0x6624}, //1685 #CJK UNIFIED IDEOGRAPH
+ {0xAC54, 0x66F7}, //1686 #CJK UNIFIED IDEOGRAPH
+ {0xAC55, 0x67FF}, //1687 #CJK UNIFIED IDEOGRAPH
+ {0xAC56, 0x67D3}, //1688 #CJK UNIFIED IDEOGRAPH
+ {0xAC57, 0x67F1}, //1689 #CJK UNIFIED IDEOGRAPH
+ {0xAC58, 0x67D4}, //1690 #CJK UNIFIED IDEOGRAPH
+ {0xAC59, 0x67D0}, //1691 #CJK UNIFIED IDEOGRAPH
+ {0xAC5A, 0x67EC}, //1692 #CJK UNIFIED IDEOGRAPH
+ {0xAC5B, 0x67B6}, //1693 #CJK UNIFIED IDEOGRAPH
+ {0xAC5C, 0x67AF}, //1694 #CJK UNIFIED IDEOGRAPH
+ {0xAC5D, 0x67F5}, //1695 #CJK UNIFIED IDEOGRAPH
+ {0xAC5E, 0x67E9}, //1696 #CJK UNIFIED IDEOGRAPH
+ {0xAC5F, 0x67EF}, //1697 #CJK UNIFIED IDEOGRAPH
+ {0xAC60, 0x67C4}, //1698 #CJK UNIFIED IDEOGRAPH
+ {0xAC61, 0x67D1}, //1699 #CJK UNIFIED IDEOGRAPH
+ {0xAC62, 0x67B4}, //1700 #CJK UNIFIED IDEOGRAPH
+ {0xAC63, 0x67DA}, //1701 #CJK UNIFIED IDEOGRAPH
+ {0xAC64, 0x67E5}, //1702 #CJK UNIFIED IDEOGRAPH
+ {0xAC65, 0x67B8}, //1703 #CJK UNIFIED IDEOGRAPH
+ {0xAC66, 0x67CF}, //1704 #CJK UNIFIED IDEOGRAPH
+ {0xAC67, 0x67DE}, //1705 #CJK UNIFIED IDEOGRAPH
+ {0xAC68, 0x67F3}, //1706 #CJK UNIFIED IDEOGRAPH
+ {0xAC69, 0x67B0}, //1707 #CJK UNIFIED IDEOGRAPH
+ {0xAC6A, 0x67D9}, //1708 #CJK UNIFIED IDEOGRAPH
+ {0xAC6B, 0x67E2}, //1709 #CJK UNIFIED IDEOGRAPH
+ {0xAC6C, 0x67DD}, //1710 #CJK UNIFIED IDEOGRAPH
+ {0xAC6D, 0x67D2}, //1711 #CJK UNIFIED IDEOGRAPH
+ {0xAC6E, 0x6B6A}, //1712 #CJK UNIFIED IDEOGRAPH
+ {0xAC6F, 0x6B83}, //1713 #CJK UNIFIED IDEOGRAPH
+ {0xAC70, 0x6B86}, //1714 #CJK UNIFIED IDEOGRAPH
+ {0xAC71, 0x6BB5}, //1715 #CJK UNIFIED IDEOGRAPH
+ {0xAC72, 0x6BD2}, //1716 #CJK UNIFIED IDEOGRAPH
+ {0xAC73, 0x6BD7}, //1717 #CJK UNIFIED IDEOGRAPH
+ {0xAC74, 0x6C1F}, //1718 #CJK UNIFIED IDEOGRAPH
+ {0xAC75, 0x6CC9}, //1719 #CJK UNIFIED IDEOGRAPH
+ {0xAC76, 0x6D0B}, //1720 #CJK UNIFIED IDEOGRAPH
+ {0xAC77, 0x6D32}, //1721 #CJK UNIFIED IDEOGRAPH
+ {0xAC78, 0x6D2A}, //1722 #CJK UNIFIED IDEOGRAPH
+ {0xAC79, 0x6D41}, //1723 #CJK UNIFIED IDEOGRAPH
+ {0xAC7A, 0x6D25}, //1724 #CJK UNIFIED IDEOGRAPH
+ {0xAC7B, 0x6D0C}, //1725 #CJK UNIFIED IDEOGRAPH
+ {0xAC7C, 0x6D31}, //1726 #CJK UNIFIED IDEOGRAPH
+ {0xAC7D, 0x6D1E}, //1727 #CJK UNIFIED IDEOGRAPH
+ {0xAC7E, 0x6D17}, //1728 #CJK UNIFIED IDEOGRAPH
+ {0xACA1, 0x6D3B}, //1729 #CJK UNIFIED IDEOGRAPH
+ {0xACA2, 0x6D3D}, //1730 #CJK UNIFIED IDEOGRAPH
+ {0xACA3, 0x6D3E}, //1731 #CJK UNIFIED IDEOGRAPH
+ {0xACA4, 0x6D36}, //1732 #CJK UNIFIED IDEOGRAPH
+ {0xACA5, 0x6D1B}, //1733 #CJK UNIFIED IDEOGRAPH
+ {0xACA6, 0x6CF5}, //1734 #CJK UNIFIED IDEOGRAPH
+ {0xACA7, 0x6D39}, //1735 #CJK UNIFIED IDEOGRAPH
+ {0xACA8, 0x6D27}, //1736 #CJK UNIFIED IDEOGRAPH
+ {0xACA9, 0x6D38}, //1737 #CJK UNIFIED IDEOGRAPH
+ {0xACAA, 0x6D29}, //1738 #CJK UNIFIED IDEOGRAPH
+ {0xACAB, 0x6D2E}, //1739 #CJK UNIFIED IDEOGRAPH
+ {0xACAC, 0x6D35}, //1740 #CJK UNIFIED IDEOGRAPH
+ {0xACAD, 0x6D0E}, //1741 #CJK UNIFIED IDEOGRAPH
+ {0xACAE, 0x6D2B}, //1742 #CJK UNIFIED IDEOGRAPH
+ {0xACAF, 0x70AB}, //1743 #CJK UNIFIED IDEOGRAPH
+ {0xACB0, 0x70BA}, //1744 #CJK UNIFIED IDEOGRAPH
+ {0xACB1, 0x70B3}, //1745 #CJK UNIFIED IDEOGRAPH
+ {0xACB2, 0x70AC}, //1746 #CJK UNIFIED IDEOGRAPH
+ {0xACB3, 0x70AF}, //1747 #CJK UNIFIED IDEOGRAPH
+ {0xACB4, 0x70AD}, //1748 #CJK UNIFIED IDEOGRAPH
+ {0xACB5, 0x70B8}, //1749 #CJK UNIFIED IDEOGRAPH
+ {0xACB6, 0x70AE}, //1750 #CJK UNIFIED IDEOGRAPH
+ {0xACB7, 0x70A4}, //1751 #CJK UNIFIED IDEOGRAPH
+ {0xACB8, 0x7230}, //1752 #CJK UNIFIED IDEOGRAPH
+ {0xACB9, 0x7272}, //1753 #CJK UNIFIED IDEOGRAPH
+ {0xACBA, 0x726F}, //1754 #CJK UNIFIED IDEOGRAPH
+ {0xACBB, 0x7274}, //1755 #CJK UNIFIED IDEOGRAPH
+ {0xACBC, 0x72E9}, //1756 #CJK UNIFIED IDEOGRAPH
+ {0xACBD, 0x72E0}, //1757 #CJK UNIFIED IDEOGRAPH
+ {0xACBE, 0x72E1}, //1758 #CJK UNIFIED IDEOGRAPH
+ {0xACBF, 0x73B7}, //1759 #CJK UNIFIED IDEOGRAPH
+ {0xACC0, 0x73CA}, //1760 #CJK UNIFIED IDEOGRAPH
+ {0xACC1, 0x73BB}, //1761 #CJK UNIFIED IDEOGRAPH
+ {0xACC2, 0x73B2}, //1762 #CJK UNIFIED IDEOGRAPH
+ {0xACC3, 0x73CD}, //1763 #CJK UNIFIED IDEOGRAPH
+ {0xACC4, 0x73C0}, //1764 #CJK UNIFIED IDEOGRAPH
+ {0xACC5, 0x73B3}, //1765 #CJK UNIFIED IDEOGRAPH
+ {0xACC6, 0x751A}, //1766 #CJK UNIFIED IDEOGRAPH
+ {0xACC7, 0x752D}, //1767 #CJK UNIFIED IDEOGRAPH
+ {0xACC8, 0x754F}, //1768 #CJK UNIFIED IDEOGRAPH
+ {0xACC9, 0x754C}, //1769 #CJK UNIFIED IDEOGRAPH
+ {0xACCA, 0x754E}, //1770 #CJK UNIFIED IDEOGRAPH
+ {0xACCB, 0x754B}, //1771 #CJK UNIFIED IDEOGRAPH
+ {0xACCC, 0x75AB}, //1772 #CJK UNIFIED IDEOGRAPH
+ {0xACCD, 0x75A4}, //1773 #CJK UNIFIED IDEOGRAPH
+ {0xACCE, 0x75A5}, //1774 #CJK UNIFIED IDEOGRAPH
+ {0xACCF, 0x75A2}, //1775 #CJK UNIFIED IDEOGRAPH
+ {0xACD0, 0x75A3}, //1776 #CJK UNIFIED IDEOGRAPH
+ {0xACD1, 0x7678}, //1777 #CJK UNIFIED IDEOGRAPH
+ {0xACD2, 0x7686}, //1778 #CJK UNIFIED IDEOGRAPH
+ {0xACD3, 0x7687}, //1779 #CJK UNIFIED IDEOGRAPH
+ {0xACD4, 0x7688}, //1780 #CJK UNIFIED IDEOGRAPH
+ {0xACD5, 0x76C8}, //1781 #CJK UNIFIED IDEOGRAPH
+ {0xACD6, 0x76C6}, //1782 #CJK UNIFIED IDEOGRAPH
+ {0xACD7, 0x76C3}, //1783 #CJK UNIFIED IDEOGRAPH
+ {0xACD8, 0x76C5}, //1784 #CJK UNIFIED IDEOGRAPH
+ {0xACD9, 0x7701}, //1785 #CJK UNIFIED IDEOGRAPH
+ {0xACDA, 0x76F9}, //1786 #CJK UNIFIED IDEOGRAPH
+ {0xACDB, 0x76F8}, //1787 #CJK UNIFIED IDEOGRAPH
+ {0xACDC, 0x7709}, //1788 #CJK UNIFIED IDEOGRAPH
+ {0xACDD, 0x770B}, //1789 #CJK UNIFIED IDEOGRAPH
+ {0xACDE, 0x76FE}, //1790 #CJK UNIFIED IDEOGRAPH
+ {0xACDF, 0x76FC}, //1791 #CJK UNIFIED IDEOGRAPH
+ {0xACE0, 0x7707}, //1792 #CJK UNIFIED IDEOGRAPH
+ {0xACE1, 0x77DC}, //1793 #CJK UNIFIED IDEOGRAPH
+ {0xACE2, 0x7802}, //1794 #CJK UNIFIED IDEOGRAPH
+ {0xACE3, 0x7814}, //1795 #CJK UNIFIED IDEOGRAPH
+ {0xACE4, 0x780C}, //1796 #CJK UNIFIED IDEOGRAPH
+ {0xACE5, 0x780D}, //1797 #CJK UNIFIED IDEOGRAPH
+ {0xACE6, 0x7946}, //1798 #CJK UNIFIED IDEOGRAPH
+ {0xACE7, 0x7949}, //1799 #CJK UNIFIED IDEOGRAPH
+ {0xACE8, 0x7948}, //1800 #CJK UNIFIED IDEOGRAPH
+ {0xACE9, 0x7947}, //1801 #CJK UNIFIED IDEOGRAPH
+ {0xACEA, 0x79B9}, //1802 #CJK UNIFIED IDEOGRAPH
+ {0xACEB, 0x79BA}, //1803 #CJK UNIFIED IDEOGRAPH
+ {0xACEC, 0x79D1}, //1804 #CJK UNIFIED IDEOGRAPH
+ {0xACED, 0x79D2}, //1805 #CJK UNIFIED IDEOGRAPH
+ {0xACEE, 0x79CB}, //1806 #CJK UNIFIED IDEOGRAPH
+ {0xACEF, 0x7A7F}, //1807 #CJK UNIFIED IDEOGRAPH
+ {0xACF0, 0x7A81}, //1808 #CJK UNIFIED IDEOGRAPH
+ {0xACF1, 0x7AFF}, //1809 #CJK UNIFIED IDEOGRAPH
+ {0xACF2, 0x7AFD}, //1810 #CJK UNIFIED IDEOGRAPH
+ {0xACF3, 0x7C7D}, //1811 #CJK UNIFIED IDEOGRAPH
+ {0xACF4, 0x7D02}, //1812 #CJK UNIFIED IDEOGRAPH
+ {0xACF5, 0x7D05}, //1813 #CJK UNIFIED IDEOGRAPH
+ {0xACF6, 0x7D00}, //1814 #CJK UNIFIED IDEOGRAPH
+ {0xACF7, 0x7D09}, //1815 #CJK UNIFIED IDEOGRAPH
+ {0xACF8, 0x7D07}, //1816 #CJK UNIFIED IDEOGRAPH
+ {0xACF9, 0x7D04}, //1817 #CJK UNIFIED IDEOGRAPH
+ {0xACFA, 0x7D06}, //1818 #CJK UNIFIED IDEOGRAPH
+ {0xACFB, 0x7F38}, //1819 #CJK UNIFIED IDEOGRAPH
+ {0xACFC, 0x7F8E}, //1820 #CJK UNIFIED IDEOGRAPH
+ {0xACFD, 0x7FBF}, //1821 #CJK UNIFIED IDEOGRAPH
+ {0xACFE, 0x8004}, //1822 #CJK UNIFIED IDEOGRAPH
+ {0xAD40, 0x8010}, //1823 #CJK UNIFIED IDEOGRAPH
+ {0xAD41, 0x800D}, //1824 #CJK UNIFIED IDEOGRAPH
+ {0xAD42, 0x8011}, //1825 #CJK UNIFIED IDEOGRAPH
+ {0xAD43, 0x8036}, //1826 #CJK UNIFIED IDEOGRAPH
+ {0xAD44, 0x80D6}, //1827 #CJK UNIFIED IDEOGRAPH
+ {0xAD45, 0x80E5}, //1828 #CJK UNIFIED IDEOGRAPH
+ {0xAD46, 0x80DA}, //1829 #CJK UNIFIED IDEOGRAPH
+ {0xAD47, 0x80C3}, //1830 #CJK UNIFIED IDEOGRAPH
+ {0xAD48, 0x80C4}, //1831 #CJK UNIFIED IDEOGRAPH
+ {0xAD49, 0x80CC}, //1832 #CJK UNIFIED IDEOGRAPH
+ {0xAD4A, 0x80E1}, //1833 #CJK UNIFIED IDEOGRAPH
+ {0xAD4B, 0x80DB}, //1834 #CJK UNIFIED IDEOGRAPH
+ {0xAD4C, 0x80CE}, //1835 #CJK UNIFIED IDEOGRAPH
+ {0xAD4D, 0x80DE}, //1836 #CJK UNIFIED IDEOGRAPH
+ {0xAD4E, 0x80E4}, //1837 #CJK UNIFIED IDEOGRAPH
+ {0xAD4F, 0x80DD}, //1838 #CJK UNIFIED IDEOGRAPH
+ {0xAD50, 0x81F4}, //1839 #CJK UNIFIED IDEOGRAPH
+ {0xAD51, 0x8222}, //1840 #CJK UNIFIED IDEOGRAPH
+ {0xAD52, 0x82E7}, //1841 #CJK UNIFIED IDEOGRAPH
+ {0xAD53, 0x8303}, //1842 #CJK UNIFIED IDEOGRAPH
+ {0xAD54, 0x8305}, //1843 #CJK UNIFIED IDEOGRAPH
+ {0xAD55, 0x82E3}, //1844 #CJK UNIFIED IDEOGRAPH
+ {0xAD56, 0x82DB}, //1845 #CJK UNIFIED IDEOGRAPH
+ {0xAD57, 0x82E6}, //1846 #CJK UNIFIED IDEOGRAPH
+ {0xAD58, 0x8304}, //1847 #CJK UNIFIED IDEOGRAPH
+ {0xAD59, 0x82E5}, //1848 #CJK UNIFIED IDEOGRAPH
+ {0xAD5A, 0x8302}, //1849 #CJK UNIFIED IDEOGRAPH
+ {0xAD5B, 0x8309}, //1850 #CJK UNIFIED IDEOGRAPH
+ {0xAD5C, 0x82D2}, //1851 #CJK UNIFIED IDEOGRAPH
+ {0xAD5D, 0x82D7}, //1852 #CJK UNIFIED IDEOGRAPH
+ {0xAD5E, 0x82F1}, //1853 #CJK UNIFIED IDEOGRAPH
+ {0xAD5F, 0x8301}, //1854 #CJK UNIFIED IDEOGRAPH
+ {0xAD60, 0x82DC}, //1855 #CJK UNIFIED IDEOGRAPH
+ {0xAD61, 0x82D4}, //1856 #CJK UNIFIED IDEOGRAPH
+ {0xAD62, 0x82D1}, //1857 #CJK UNIFIED IDEOGRAPH
+ {0xAD63, 0x82DE}, //1858 #CJK UNIFIED IDEOGRAPH
+ {0xAD64, 0x82D3}, //1859 #CJK UNIFIED IDEOGRAPH
+ {0xAD65, 0x82DF}, //1860 #CJK UNIFIED IDEOGRAPH
+ {0xAD66, 0x82EF}, //1861 #CJK UNIFIED IDEOGRAPH
+ {0xAD67, 0x8306}, //1862 #CJK UNIFIED IDEOGRAPH
+ {0xAD68, 0x8650}, //1863 #CJK UNIFIED IDEOGRAPH
+ {0xAD69, 0x8679}, //1864 #CJK UNIFIED IDEOGRAPH
+ {0xAD6A, 0x867B}, //1865 #CJK UNIFIED IDEOGRAPH
+ {0xAD6B, 0x867A}, //1866 #CJK UNIFIED IDEOGRAPH
+ {0xAD6C, 0x884D}, //1867 #CJK UNIFIED IDEOGRAPH
+ {0xAD6D, 0x886B}, //1868 #CJK UNIFIED IDEOGRAPH
+ {0xAD6E, 0x8981}, //1869 #CJK UNIFIED IDEOGRAPH
+ {0xAD6F, 0x89D4}, //1870 #CJK UNIFIED IDEOGRAPH
+ {0xAD70, 0x8A08}, //1871 #CJK UNIFIED IDEOGRAPH
+ {0xAD71, 0x8A02}, //1872 #CJK UNIFIED IDEOGRAPH
+ {0xAD72, 0x8A03}, //1873 #CJK UNIFIED IDEOGRAPH
+ {0xAD73, 0x8C9E}, //1874 #CJK UNIFIED IDEOGRAPH
+ {0xAD74, 0x8CA0}, //1875 #CJK UNIFIED IDEOGRAPH
+ {0xAD75, 0x8D74}, //1876 #CJK UNIFIED IDEOGRAPH
+ {0xAD76, 0x8D73}, //1877 #CJK UNIFIED IDEOGRAPH
+ {0xAD77, 0x8DB4}, //1878 #CJK UNIFIED IDEOGRAPH
+ {0xAD78, 0x8ECD}, //1879 #CJK UNIFIED IDEOGRAPH
+ {0xAD79, 0x8ECC}, //1880 #CJK UNIFIED IDEOGRAPH
+ {0xAD7A, 0x8FF0}, //1881 #CJK UNIFIED IDEOGRAPH
+ {0xAD7B, 0x8FE6}, //1882 #CJK UNIFIED IDEOGRAPH
+ {0xAD7C, 0x8FE2}, //1883 #CJK UNIFIED IDEOGRAPH
+ {0xAD7D, 0x8FEA}, //1884 #CJK UNIFIED IDEOGRAPH
+ {0xAD7E, 0x8FE5}, //1885 #CJK UNIFIED IDEOGRAPH
+ {0xADA1, 0x8FED}, //1886 #CJK UNIFIED IDEOGRAPH
+ {0xADA2, 0x8FEB}, //1887 #CJK UNIFIED IDEOGRAPH
+ {0xADA3, 0x8FE4}, //1888 #CJK UNIFIED IDEOGRAPH
+ {0xADA4, 0x8FE8}, //1889 #CJK UNIFIED IDEOGRAPH
+ {0xADA5, 0x90CA}, //1890 #CJK UNIFIED IDEOGRAPH
+ {0xADA6, 0x90CE}, //1891 #CJK UNIFIED IDEOGRAPH
+ {0xADA7, 0x90C1}, //1892 #CJK UNIFIED IDEOGRAPH
+ {0xADA8, 0x90C3}, //1893 #CJK UNIFIED IDEOGRAPH
+ {0xADA9, 0x914B}, //1894 #CJK UNIFIED IDEOGRAPH
+ {0xADAA, 0x914A}, //1895 #CJK UNIFIED IDEOGRAPH
+ {0xADAB, 0x91CD}, //1896 #CJK UNIFIED IDEOGRAPH
+ {0xADAC, 0x9582}, //1897 #CJK UNIFIED IDEOGRAPH
+ {0xADAD, 0x9650}, //1898 #CJK UNIFIED IDEOGRAPH
+ {0xADAE, 0x964B}, //1899 #CJK UNIFIED IDEOGRAPH
+ {0xADAF, 0x964C}, //1900 #CJK UNIFIED IDEOGRAPH
+ {0xADB0, 0x964D}, //1901 #CJK UNIFIED IDEOGRAPH
+ {0xADB1, 0x9762}, //1902 #CJK UNIFIED IDEOGRAPH
+ {0xADB2, 0x9769}, //1903 #CJK UNIFIED IDEOGRAPH
+ {0xADB3, 0x97CB}, //1904 #CJK UNIFIED IDEOGRAPH
+ {0xADB4, 0x97ED}, //1905 #CJK UNIFIED IDEOGRAPH
+ {0xADB5, 0x97F3}, //1906 #CJK UNIFIED IDEOGRAPH
+ {0xADB6, 0x9801}, //1907 #CJK UNIFIED IDEOGRAPH
+ {0xADB7, 0x98A8}, //1908 #CJK UNIFIED IDEOGRAPH
+ {0xADB8, 0x98DB}, //1909 #CJK UNIFIED IDEOGRAPH
+ {0xADB9, 0x98DF}, //1910 #CJK UNIFIED IDEOGRAPH
+ {0xADBA, 0x9996}, //1911 #CJK UNIFIED IDEOGRAPH
+ {0xADBB, 0x9999}, //1912 #CJK UNIFIED IDEOGRAPH
+ {0xADBC, 0x4E58}, //1913 #CJK UNIFIED IDEOGRAPH
+ {0xADBD, 0x4EB3}, //1914 #CJK UNIFIED IDEOGRAPH
+ {0xADBE, 0x500C}, //1915 #CJK UNIFIED IDEOGRAPH
+ {0xADBF, 0x500D}, //1916 #CJK UNIFIED IDEOGRAPH
+ {0xADC0, 0x5023}, //1917 #CJK UNIFIED IDEOGRAPH
+ {0xADC1, 0x4FEF}, //1918 #CJK UNIFIED IDEOGRAPH
+ {0xADC2, 0x5026}, //1919 #CJK UNIFIED IDEOGRAPH
+ {0xADC3, 0x5025}, //1920 #CJK UNIFIED IDEOGRAPH
+ {0xADC4, 0x4FF8}, //1921 #CJK UNIFIED IDEOGRAPH
+ {0xADC5, 0x5029}, //1922 #CJK UNIFIED IDEOGRAPH
+ {0xADC6, 0x5016}, //1923 #CJK UNIFIED IDEOGRAPH
+ {0xADC7, 0x5006}, //1924 #CJK UNIFIED IDEOGRAPH
+ {0xADC8, 0x503C}, //1925 #CJK UNIFIED IDEOGRAPH
+ {0xADC9, 0x501F}, //1926 #CJK UNIFIED IDEOGRAPH
+ {0xADCA, 0x501A}, //1927 #CJK UNIFIED IDEOGRAPH
+ {0xADCB, 0x5012}, //1928 #CJK UNIFIED IDEOGRAPH
+ {0xADCC, 0x5011}, //1929 #CJK UNIFIED IDEOGRAPH
+ {0xADCD, 0x4FFA}, //1930 #CJK UNIFIED IDEOGRAPH
+ {0xADCE, 0x5000}, //1931 #CJK UNIFIED IDEOGRAPH
+ {0xADCF, 0x5014}, //1932 #CJK UNIFIED IDEOGRAPH
+ {0xADD0, 0x5028}, //1933 #CJK UNIFIED IDEOGRAPH
+ {0xADD1, 0x4FF1}, //1934 #CJK UNIFIED IDEOGRAPH
+ {0xADD2, 0x5021}, //1935 #CJK UNIFIED IDEOGRAPH
+ {0xADD3, 0x500B}, //1936 #CJK UNIFIED IDEOGRAPH
+ {0xADD4, 0x5019}, //1937 #CJK UNIFIED IDEOGRAPH
+ {0xADD5, 0x5018}, //1938 #CJK UNIFIED IDEOGRAPH
+ {0xADD6, 0x4FF3}, //1939 #CJK UNIFIED IDEOGRAPH
+ {0xADD7, 0x4FEE}, //1940 #CJK UNIFIED IDEOGRAPH
+ {0xADD8, 0x502D}, //1941 #CJK UNIFIED IDEOGRAPH
+ {0xADD9, 0x502A}, //1942 #CJK UNIFIED IDEOGRAPH
+ {0xADDA, 0x4FFE}, //1943 #CJK UNIFIED IDEOGRAPH
+ {0xADDB, 0x502B}, //1944 #CJK UNIFIED IDEOGRAPH
+ {0xADDC, 0x5009}, //1945 #CJK UNIFIED IDEOGRAPH
+ {0xADDD, 0x517C}, //1946 #CJK UNIFIED IDEOGRAPH
+ {0xADDE, 0x51A4}, //1947 #CJK UNIFIED IDEOGRAPH
+ {0xADDF, 0x51A5}, //1948 #CJK UNIFIED IDEOGRAPH
+ {0xADE0, 0x51A2}, //1949 #CJK UNIFIED IDEOGRAPH
+ {0xADE1, 0x51CD}, //1950 #CJK UNIFIED IDEOGRAPH
+ {0xADE2, 0x51CC}, //1951 #CJK UNIFIED IDEOGRAPH
+ {0xADE3, 0x51C6}, //1952 #CJK UNIFIED IDEOGRAPH
+ {0xADE4, 0x51CB}, //1953 #CJK UNIFIED IDEOGRAPH
+ {0xADE5, 0x5256}, //1954 #CJK UNIFIED IDEOGRAPH
+ {0xADE6, 0x525C}, //1955 #CJK UNIFIED IDEOGRAPH
+ {0xADE7, 0x5254}, //1956 #CJK UNIFIED IDEOGRAPH
+ {0xADE8, 0x525B}, //1957 #CJK UNIFIED IDEOGRAPH
+ {0xADE9, 0x525D}, //1958 #CJK UNIFIED IDEOGRAPH
+ {0xADEA, 0x532A}, //1959 #CJK UNIFIED IDEOGRAPH
+ {0xADEB, 0x537F}, //1960 #CJK UNIFIED IDEOGRAPH
+ {0xADEC, 0x539F}, //1961 #CJK UNIFIED IDEOGRAPH
+ {0xADED, 0x539D}, //1962 #CJK UNIFIED IDEOGRAPH
+ {0xADEE, 0x53DF}, //1963 #CJK UNIFIED IDEOGRAPH
+ {0xADEF, 0x54E8}, //1964 #CJK UNIFIED IDEOGRAPH
+ {0xADF0, 0x5510}, //1965 #CJK UNIFIED IDEOGRAPH
+ {0xADF1, 0x5501}, //1966 #CJK UNIFIED IDEOGRAPH
+ {0xADF2, 0x5537}, //1967 #CJK UNIFIED IDEOGRAPH
+ {0xADF3, 0x54FC}, //1968 #CJK UNIFIED IDEOGRAPH
+ {0xADF4, 0x54E5}, //1969 #CJK UNIFIED IDEOGRAPH
+ {0xADF5, 0x54F2}, //1970 #CJK UNIFIED IDEOGRAPH
+ {0xADF6, 0x5506}, //1971 #CJK UNIFIED IDEOGRAPH
+ {0xADF7, 0x54FA}, //1972 #CJK UNIFIED IDEOGRAPH
+ {0xADF8, 0x5514}, //1973 #CJK UNIFIED IDEOGRAPH
+ {0xADF9, 0x54E9}, //1974 #CJK UNIFIED IDEOGRAPH
+ {0xADFA, 0x54ED}, //1975 #CJK UNIFIED IDEOGRAPH
+ {0xADFB, 0x54E1}, //1976 #CJK UNIFIED IDEOGRAPH
+ {0xADFC, 0x5509}, //1977 #CJK UNIFIED IDEOGRAPH
+ {0xADFD, 0x54EE}, //1978 #CJK UNIFIED IDEOGRAPH
+ {0xADFE, 0x54EA}, //1979 #CJK UNIFIED IDEOGRAPH
+ {0xAE40, 0x54E6}, //1980 #CJK UNIFIED IDEOGRAPH
+ {0xAE41, 0x5527}, //1981 #CJK UNIFIED IDEOGRAPH
+ {0xAE42, 0x5507}, //1982 #CJK UNIFIED IDEOGRAPH
+ {0xAE43, 0x54FD}, //1983 #CJK UNIFIED IDEOGRAPH
+ {0xAE44, 0x550F}, //1984 #CJK UNIFIED IDEOGRAPH
+ {0xAE45, 0x5703}, //1985 #CJK UNIFIED IDEOGRAPH
+ {0xAE46, 0x5704}, //1986 #CJK UNIFIED IDEOGRAPH
+ {0xAE47, 0x57C2}, //1987 #CJK UNIFIED IDEOGRAPH
+ {0xAE48, 0x57D4}, //1988 #CJK UNIFIED IDEOGRAPH
+ {0xAE49, 0x57CB}, //1989 #CJK UNIFIED IDEOGRAPH
+ {0xAE4A, 0x57C3}, //1990 #CJK UNIFIED IDEOGRAPH
+ {0xAE4B, 0x5809}, //1991 #CJK UNIFIED IDEOGRAPH
+ {0xAE4C, 0x590F}, //1992 #CJK UNIFIED IDEOGRAPH
+ {0xAE4D, 0x5957}, //1993 #CJK UNIFIED IDEOGRAPH
+ {0xAE4E, 0x5958}, //1994 #CJK UNIFIED IDEOGRAPH
+ {0xAE4F, 0x595A}, //1995 #CJK UNIFIED IDEOGRAPH
+ {0xAE50, 0x5A11}, //1996 #CJK UNIFIED IDEOGRAPH
+ {0xAE51, 0x5A18}, //1997 #CJK UNIFIED IDEOGRAPH
+ {0xAE52, 0x5A1C}, //1998 #CJK UNIFIED IDEOGRAPH
+ {0xAE53, 0x5A1F}, //1999 #CJK UNIFIED IDEOGRAPH
+ {0xAE54, 0x5A1B}, //2000 #CJK UNIFIED IDEOGRAPH
+ {0xAE55, 0x5A13}, //2001 #CJK UNIFIED IDEOGRAPH
+ {0xAE56, 0x59EC}, //2002 #CJK UNIFIED IDEOGRAPH
+ {0xAE57, 0x5A20}, //2003 #CJK UNIFIED IDEOGRAPH
+ {0xAE58, 0x5A23}, //2004 #CJK UNIFIED IDEOGRAPH
+ {0xAE59, 0x5A29}, //2005 #CJK UNIFIED IDEOGRAPH
+ {0xAE5A, 0x5A25}, //2006 #CJK UNIFIED IDEOGRAPH
+ {0xAE5B, 0x5A0C}, //2007 #CJK UNIFIED IDEOGRAPH
+ {0xAE5C, 0x5A09}, //2008 #CJK UNIFIED IDEOGRAPH
+ {0xAE5D, 0x5B6B}, //2009 #CJK UNIFIED IDEOGRAPH
+ {0xAE5E, 0x5C58}, //2010 #CJK UNIFIED IDEOGRAPH
+ {0xAE5F, 0x5BB0}, //2011 #CJK UNIFIED IDEOGRAPH
+ {0xAE60, 0x5BB3}, //2012 #CJK UNIFIED IDEOGRAPH
+ {0xAE61, 0x5BB6}, //2013 #CJK UNIFIED IDEOGRAPH
+ {0xAE62, 0x5BB4}, //2014 #CJK UNIFIED IDEOGRAPH
+ {0xAE63, 0x5BAE}, //2015 #CJK UNIFIED IDEOGRAPH
+ {0xAE64, 0x5BB5}, //2016 #CJK UNIFIED IDEOGRAPH
+ {0xAE65, 0x5BB9}, //2017 #CJK UNIFIED IDEOGRAPH
+ {0xAE66, 0x5BB8}, //2018 #CJK UNIFIED IDEOGRAPH
+ {0xAE67, 0x5C04}, //2019 #CJK UNIFIED IDEOGRAPH
+ {0xAE68, 0x5C51}, //2020 #CJK UNIFIED IDEOGRAPH
+ {0xAE69, 0x5C55}, //2021 #CJK UNIFIED IDEOGRAPH
+ {0xAE6A, 0x5C50}, //2022 #CJK UNIFIED IDEOGRAPH
+ {0xAE6B, 0x5CED}, //2023 #CJK UNIFIED IDEOGRAPH
+ {0xAE6C, 0x5CFD}, //2024 #CJK UNIFIED IDEOGRAPH
+ {0xAE6D, 0x5CFB}, //2025 #CJK UNIFIED IDEOGRAPH
+ {0xAE6E, 0x5CEA}, //2026 #CJK UNIFIED IDEOGRAPH
+ {0xAE6F, 0x5CE8}, //2027 #CJK UNIFIED IDEOGRAPH
+ {0xAE70, 0x5CF0}, //2028 #CJK UNIFIED IDEOGRAPH
+ {0xAE71, 0x5CF6}, //2029 #CJK UNIFIED IDEOGRAPH
+ {0xAE72, 0x5D01}, //2030 #CJK UNIFIED IDEOGRAPH
+ {0xAE73, 0x5CF4}, //2031 #CJK UNIFIED IDEOGRAPH
+ {0xAE74, 0x5DEE}, //2032 #CJK UNIFIED IDEOGRAPH
+ {0xAE75, 0x5E2D}, //2033 #CJK UNIFIED IDEOGRAPH
+ {0xAE76, 0x5E2B}, //2034 #CJK UNIFIED IDEOGRAPH
+ {0xAE77, 0x5EAB}, //2035 #CJK UNIFIED IDEOGRAPH
+ {0xAE78, 0x5EAD}, //2036 #CJK UNIFIED IDEOGRAPH
+ {0xAE79, 0x5EA7}, //2037 #CJK UNIFIED IDEOGRAPH
+ {0xAE7A, 0x5F31}, //2038 #CJK UNIFIED IDEOGRAPH
+ {0xAE7B, 0x5F92}, //2039 #CJK UNIFIED IDEOGRAPH
+ {0xAE7C, 0x5F91}, //2040 #CJK UNIFIED IDEOGRAPH
+ {0xAE7D, 0x5F90}, //2041 #CJK UNIFIED IDEOGRAPH
+ {0xAE7E, 0x6059}, //2042 #CJK UNIFIED IDEOGRAPH
+ {0xAEA1, 0x6063}, //2043 #CJK UNIFIED IDEOGRAPH
+ {0xAEA2, 0x6065}, //2044 #CJK UNIFIED IDEOGRAPH
+ {0xAEA3, 0x6050}, //2045 #CJK UNIFIED IDEOGRAPH
+ {0xAEA4, 0x6055}, //2046 #CJK UNIFIED IDEOGRAPH
+ {0xAEA5, 0x606D}, //2047 #CJK UNIFIED IDEOGRAPH
+ {0xAEA6, 0x6069}, //2048 #CJK UNIFIED IDEOGRAPH
+ {0xAEA7, 0x606F}, //2049 #CJK UNIFIED IDEOGRAPH
+ {0xAEA8, 0x6084}, //2050 #CJK UNIFIED IDEOGRAPH
+ {0xAEA9, 0x609F}, //2051 #CJK UNIFIED IDEOGRAPH
+ {0xAEAA, 0x609A}, //2052 #CJK UNIFIED IDEOGRAPH
+ {0xAEAB, 0x608D}, //2053 #CJK UNIFIED IDEOGRAPH
+ {0xAEAC, 0x6094}, //2054 #CJK UNIFIED IDEOGRAPH
+ {0xAEAD, 0x608C}, //2055 #CJK UNIFIED IDEOGRAPH
+ {0xAEAE, 0x6085}, //2056 #CJK UNIFIED IDEOGRAPH
+ {0xAEAF, 0x6096}, //2057 #CJK UNIFIED IDEOGRAPH
+ {0xAEB0, 0x6247}, //2058 #CJK UNIFIED IDEOGRAPH
+ {0xAEB1, 0x62F3}, //2059 #CJK UNIFIED IDEOGRAPH
+ {0xAEB2, 0x6308}, //2060 #CJK UNIFIED IDEOGRAPH
+ {0xAEB3, 0x62FF}, //2061 #CJK UNIFIED IDEOGRAPH
+ {0xAEB4, 0x634E}, //2062 #CJK UNIFIED IDEOGRAPH
+ {0xAEB5, 0x633E}, //2063 #CJK UNIFIED IDEOGRAPH
+ {0xAEB6, 0x632F}, //2064 #CJK UNIFIED IDEOGRAPH
+ {0xAEB7, 0x6355}, //2065 #CJK UNIFIED IDEOGRAPH
+ {0xAEB8, 0x6342}, //2066 #CJK UNIFIED IDEOGRAPH
+ {0xAEB9, 0x6346}, //2067 #CJK UNIFIED IDEOGRAPH
+ {0xAEBA, 0x634F}, //2068 #CJK UNIFIED IDEOGRAPH
+ {0xAEBB, 0x6349}, //2069 #CJK UNIFIED IDEOGRAPH
+ {0xAEBC, 0x633A}, //2070 #CJK UNIFIED IDEOGRAPH
+ {0xAEBD, 0x6350}, //2071 #CJK UNIFIED IDEOGRAPH
+ {0xAEBE, 0x633D}, //2072 #CJK UNIFIED IDEOGRAPH
+ {0xAEBF, 0x632A}, //2073 #CJK UNIFIED IDEOGRAPH
+ {0xAEC0, 0x632B}, //2074 #CJK UNIFIED IDEOGRAPH
+ {0xAEC1, 0x6328}, //2075 #CJK UNIFIED IDEOGRAPH
+ {0xAEC2, 0x634D}, //2076 #CJK UNIFIED IDEOGRAPH
+ {0xAEC3, 0x634C}, //2077 #CJK UNIFIED IDEOGRAPH
+ {0xAEC4, 0x6548}, //2078 #CJK UNIFIED IDEOGRAPH
+ {0xAEC5, 0x6549}, //2079 #CJK UNIFIED IDEOGRAPH
+ {0xAEC6, 0x6599}, //2080 #CJK UNIFIED IDEOGRAPH
+ {0xAEC7, 0x65C1}, //2081 #CJK UNIFIED IDEOGRAPH
+ {0xAEC8, 0x65C5}, //2082 #CJK UNIFIED IDEOGRAPH
+ {0xAEC9, 0x6642}, //2083 #CJK UNIFIED IDEOGRAPH
+ {0xAECA, 0x6649}, //2084 #CJK UNIFIED IDEOGRAPH
+ {0xAECB, 0x664F}, //2085 #CJK UNIFIED IDEOGRAPH
+ {0xAECC, 0x6643}, //2086 #CJK UNIFIED IDEOGRAPH
+ {0xAECD, 0x6652}, //2087 #CJK UNIFIED IDEOGRAPH
+ {0xAECE, 0x664C}, //2088 #CJK UNIFIED IDEOGRAPH
+ {0xAECF, 0x6645}, //2089 #CJK UNIFIED IDEOGRAPH
+ {0xAED0, 0x6641}, //2090 #CJK UNIFIED IDEOGRAPH
+ {0xAED1, 0x66F8}, //2091 #CJK UNIFIED IDEOGRAPH
+ {0xAED2, 0x6714}, //2092 #CJK UNIFIED IDEOGRAPH
+ {0xAED3, 0x6715}, //2093 #CJK UNIFIED IDEOGRAPH
+ {0xAED4, 0x6717}, //2094 #CJK UNIFIED IDEOGRAPH
+ {0xAED5, 0x6821}, //2095 #CJK UNIFIED IDEOGRAPH
+ {0xAED6, 0x6838}, //2096 #CJK UNIFIED IDEOGRAPH
+ {0xAED7, 0x6848}, //2097 #CJK UNIFIED IDEOGRAPH
+ {0xAED8, 0x6846}, //2098 #CJK UNIFIED IDEOGRAPH
+ {0xAED9, 0x6853}, //2099 #CJK UNIFIED IDEOGRAPH
+ {0xAEDA, 0x6839}, //2100 #CJK UNIFIED IDEOGRAPH
+ {0xAEDB, 0x6842}, //2101 #CJK UNIFIED IDEOGRAPH
+ {0xAEDC, 0x6854}, //2102 #CJK UNIFIED IDEOGRAPH
+ {0xAEDD, 0x6829}, //2103 #CJK UNIFIED IDEOGRAPH
+ {0xAEDE, 0x68B3}, //2104 #CJK UNIFIED IDEOGRAPH
+ {0xAEDF, 0x6817}, //2105 #CJK UNIFIED IDEOGRAPH
+ {0xAEE0, 0x684C}, //2106 #CJK UNIFIED IDEOGRAPH
+ {0xAEE1, 0x6851}, //2107 #CJK UNIFIED IDEOGRAPH
+ {0xAEE2, 0x683D}, //2108 #CJK UNIFIED IDEOGRAPH
+ {0xAEE3, 0x67F4}, //2109 #CJK UNIFIED IDEOGRAPH
+ {0xAEE4, 0x6850}, //2110 #CJK UNIFIED IDEOGRAPH
+ {0xAEE5, 0x6840}, //2111 #CJK UNIFIED IDEOGRAPH
+ {0xAEE6, 0x683C}, //2112 #CJK UNIFIED IDEOGRAPH
+ {0xAEE7, 0x6843}, //2113 #CJK UNIFIED IDEOGRAPH
+ {0xAEE8, 0x682A}, //2114 #CJK UNIFIED IDEOGRAPH
+ {0xAEE9, 0x6845}, //2115 #CJK UNIFIED IDEOGRAPH
+ {0xAEEA, 0x6813}, //2116 #CJK UNIFIED IDEOGRAPH
+ {0xAEEB, 0x6818}, //2117 #CJK UNIFIED IDEOGRAPH
+ {0xAEEC, 0x6841}, //2118 #CJK UNIFIED IDEOGRAPH
+ {0xAEED, 0x6B8A}, //2119 #CJK UNIFIED IDEOGRAPH
+ {0xAEEE, 0x6B89}, //2120 #CJK UNIFIED IDEOGRAPH
+ {0xAEEF, 0x6BB7}, //2121 #CJK UNIFIED IDEOGRAPH
+ {0xAEF0, 0x6C23}, //2122 #CJK UNIFIED IDEOGRAPH
+ {0xAEF1, 0x6C27}, //2123 #CJK UNIFIED IDEOGRAPH
+ {0xAEF2, 0x6C28}, //2124 #CJK UNIFIED IDEOGRAPH
+ {0xAEF3, 0x6C26}, //2125 #CJK UNIFIED IDEOGRAPH
+ {0xAEF4, 0x6C24}, //2126 #CJK UNIFIED IDEOGRAPH
+ {0xAEF5, 0x6CF0}, //2127 #CJK UNIFIED IDEOGRAPH
+ {0xAEF6, 0x6D6A}, //2128 #CJK UNIFIED IDEOGRAPH
+ {0xAEF7, 0x6D95}, //2129 #CJK UNIFIED IDEOGRAPH
+ {0xAEF8, 0x6D88}, //2130 #CJK UNIFIED IDEOGRAPH
+ {0xAEF9, 0x6D87}, //2131 #CJK UNIFIED IDEOGRAPH
+ {0xAEFA, 0x6D66}, //2132 #CJK UNIFIED IDEOGRAPH
+ {0xAEFB, 0x6D78}, //2133 #CJK UNIFIED IDEOGRAPH
+ {0xAEFC, 0x6D77}, //2134 #CJK UNIFIED IDEOGRAPH
+ {0xAEFD, 0x6D59}, //2135 #CJK UNIFIED IDEOGRAPH
+ {0xAEFE, 0x6D93}, //2136 #CJK UNIFIED IDEOGRAPH
+ {0xAF40, 0x6D6C}, //2137 #CJK UNIFIED IDEOGRAPH
+ {0xAF41, 0x6D89}, //2138 #CJK UNIFIED IDEOGRAPH
+ {0xAF42, 0x6D6E}, //2139 #CJK UNIFIED IDEOGRAPH
+ {0xAF43, 0x6D5A}, //2140 #CJK UNIFIED IDEOGRAPH
+ {0xAF44, 0x6D74}, //2141 #CJK UNIFIED IDEOGRAPH
+ {0xAF45, 0x6D69}, //2142 #CJK UNIFIED IDEOGRAPH
+ {0xAF46, 0x6D8C}, //2143 #CJK UNIFIED IDEOGRAPH
+ {0xAF47, 0x6D8A}, //2144 #CJK UNIFIED IDEOGRAPH
+ {0xAF48, 0x6D79}, //2145 #CJK UNIFIED IDEOGRAPH
+ {0xAF49, 0x6D85}, //2146 #CJK UNIFIED IDEOGRAPH
+ {0xAF4A, 0x6D65}, //2147 #CJK UNIFIED IDEOGRAPH
+ {0xAF4B, 0x6D94}, //2148 #CJK UNIFIED IDEOGRAPH
+ {0xAF4C, 0x70CA}, //2149 #CJK UNIFIED IDEOGRAPH
+ {0xAF4D, 0x70D8}, //2150 #CJK UNIFIED IDEOGRAPH
+ {0xAF4E, 0x70E4}, //2151 #CJK UNIFIED IDEOGRAPH
+ {0xAF4F, 0x70D9}, //2152 #CJK UNIFIED IDEOGRAPH
+ {0xAF50, 0x70C8}, //2153 #CJK UNIFIED IDEOGRAPH
+ {0xAF51, 0x70CF}, //2154 #CJK UNIFIED IDEOGRAPH
+ {0xAF52, 0x7239}, //2155 #CJK UNIFIED IDEOGRAPH
+ {0xAF53, 0x7279}, //2156 #CJK UNIFIED IDEOGRAPH
+ {0xAF54, 0x72FC}, //2157 #CJK UNIFIED IDEOGRAPH
+ {0xAF55, 0x72F9}, //2158 #CJK UNIFIED IDEOGRAPH
+ {0xAF56, 0x72FD}, //2159 #CJK UNIFIED IDEOGRAPH
+ {0xAF57, 0x72F8}, //2160 #CJK UNIFIED IDEOGRAPH
+ {0xAF58, 0x72F7}, //2161 #CJK UNIFIED IDEOGRAPH
+ {0xAF59, 0x7386}, //2162 #CJK UNIFIED IDEOGRAPH
+ {0xAF5A, 0x73ED}, //2163 #CJK UNIFIED IDEOGRAPH
+ {0xAF5B, 0x7409}, //2164 #CJK UNIFIED IDEOGRAPH
+ {0xAF5C, 0x73EE}, //2165 #CJK UNIFIED IDEOGRAPH
+ {0xAF5D, 0x73E0}, //2166 #CJK UNIFIED IDEOGRAPH
+ {0xAF5E, 0x73EA}, //2167 #CJK UNIFIED IDEOGRAPH
+ {0xAF5F, 0x73DE}, //2168 #CJK UNIFIED IDEOGRAPH
+ {0xAF60, 0x7554}, //2169 #CJK UNIFIED IDEOGRAPH
+ {0xAF61, 0x755D}, //2170 #CJK UNIFIED IDEOGRAPH
+ {0xAF62, 0x755C}, //2171 #CJK UNIFIED IDEOGRAPH
+ {0xAF63, 0x755A}, //2172 #CJK UNIFIED IDEOGRAPH
+ {0xAF64, 0x7559}, //2173 #CJK UNIFIED IDEOGRAPH
+ {0xAF65, 0x75BE}, //2174 #CJK UNIFIED IDEOGRAPH
+ {0xAF66, 0x75C5}, //2175 #CJK UNIFIED IDEOGRAPH
+ {0xAF67, 0x75C7}, //2176 #CJK UNIFIED IDEOGRAPH
+ {0xAF68, 0x75B2}, //2177 #CJK UNIFIED IDEOGRAPH
+ {0xAF69, 0x75B3}, //2178 #CJK UNIFIED IDEOGRAPH
+ {0xAF6A, 0x75BD}, //2179 #CJK UNIFIED IDEOGRAPH
+ {0xAF6B, 0x75BC}, //2180 #CJK UNIFIED IDEOGRAPH
+ {0xAF6C, 0x75B9}, //2181 #CJK UNIFIED IDEOGRAPH
+ {0xAF6D, 0x75C2}, //2182 #CJK UNIFIED IDEOGRAPH
+ {0xAF6E, 0x75B8}, //2183 #CJK UNIFIED IDEOGRAPH
+ {0xAF6F, 0x768B}, //2184 #CJK UNIFIED IDEOGRAPH
+ {0xAF70, 0x76B0}, //2185 #CJK UNIFIED IDEOGRAPH
+ {0xAF71, 0x76CA}, //2186 #CJK UNIFIED IDEOGRAPH
+ {0xAF72, 0x76CD}, //2187 #CJK UNIFIED IDEOGRAPH
+ {0xAF73, 0x76CE}, //2188 #CJK UNIFIED IDEOGRAPH
+ {0xAF74, 0x7729}, //2189 #CJK UNIFIED IDEOGRAPH
+ {0xAF75, 0x771F}, //2190 #CJK UNIFIED IDEOGRAPH
+ {0xAF76, 0x7720}, //2191 #CJK UNIFIED IDEOGRAPH
+ {0xAF77, 0x7728}, //2192 #CJK UNIFIED IDEOGRAPH
+ {0xAF78, 0x77E9}, //2193 #CJK UNIFIED IDEOGRAPH
+ {0xAF79, 0x7830}, //2194 #CJK UNIFIED IDEOGRAPH
+ {0xAF7A, 0x7827}, //2195 #CJK UNIFIED IDEOGRAPH
+ {0xAF7B, 0x7838}, //2196 #CJK UNIFIED IDEOGRAPH
+ {0xAF7C, 0x781D}, //2197 #CJK UNIFIED IDEOGRAPH
+ {0xAF7D, 0x7834}, //2198 #CJK UNIFIED IDEOGRAPH
+ {0xAF7E, 0x7837}, //2199 #CJK UNIFIED IDEOGRAPH
+ {0xAFA1, 0x7825}, //2200 #CJK UNIFIED IDEOGRAPH
+ {0xAFA2, 0x782D}, //2201 #CJK UNIFIED IDEOGRAPH
+ {0xAFA3, 0x7820}, //2202 #CJK UNIFIED IDEOGRAPH
+ {0xAFA4, 0x781F}, //2203 #CJK UNIFIED IDEOGRAPH
+ {0xAFA5, 0x7832}, //2204 #CJK UNIFIED IDEOGRAPH
+ {0xAFA6, 0x7955}, //2205 #CJK UNIFIED IDEOGRAPH
+ {0xAFA7, 0x7950}, //2206 #CJK UNIFIED IDEOGRAPH
+ {0xAFA8, 0x7960}, //2207 #CJK UNIFIED IDEOGRAPH
+ {0xAFA9, 0x795F}, //2208 #CJK UNIFIED IDEOGRAPH
+ {0xAFAA, 0x7956}, //2209 #CJK UNIFIED IDEOGRAPH
+ {0xAFAB, 0x795E}, //2210 #CJK UNIFIED IDEOGRAPH
+ {0xAFAC, 0x795D}, //2211 #CJK UNIFIED IDEOGRAPH
+ {0xAFAD, 0x7957}, //2212 #CJK UNIFIED IDEOGRAPH
+ {0xAFAE, 0x795A}, //2213 #CJK UNIFIED IDEOGRAPH
+ {0xAFAF, 0x79E4}, //2214 #CJK UNIFIED IDEOGRAPH
+ {0xAFB0, 0x79E3}, //2215 #CJK UNIFIED IDEOGRAPH
+ {0xAFB1, 0x79E7}, //2216 #CJK UNIFIED IDEOGRAPH
+ {0xAFB2, 0x79DF}, //2217 #CJK UNIFIED IDEOGRAPH
+ {0xAFB3, 0x79E6}, //2218 #CJK UNIFIED IDEOGRAPH
+ {0xAFB4, 0x79E9}, //2219 #CJK UNIFIED IDEOGRAPH
+ {0xAFB5, 0x79D8}, //2220 #CJK UNIFIED IDEOGRAPH
+ {0xAFB6, 0x7A84}, //2221 #CJK UNIFIED IDEOGRAPH
+ {0xAFB7, 0x7A88}, //2222 #CJK UNIFIED IDEOGRAPH
+ {0xAFB8, 0x7AD9}, //2223 #CJK UNIFIED IDEOGRAPH
+ {0xAFB9, 0x7B06}, //2224 #CJK UNIFIED IDEOGRAPH
+ {0xAFBA, 0x7B11}, //2225 #CJK UNIFIED IDEOGRAPH
+ {0xAFBB, 0x7C89}, //2226 #CJK UNIFIED IDEOGRAPH
+ {0xAFBC, 0x7D21}, //2227 #CJK UNIFIED IDEOGRAPH
+ {0xAFBD, 0x7D17}, //2228 #CJK UNIFIED IDEOGRAPH
+ {0xAFBE, 0x7D0B}, //2229 #CJK UNIFIED IDEOGRAPH
+ {0xAFBF, 0x7D0A}, //2230 #CJK UNIFIED IDEOGRAPH
+ {0xAFC0, 0x7D20}, //2231 #CJK UNIFIED IDEOGRAPH
+ {0xAFC1, 0x7D22}, //2232 #CJK UNIFIED IDEOGRAPH
+ {0xAFC2, 0x7D14}, //2233 #CJK UNIFIED IDEOGRAPH
+ {0xAFC3, 0x7D10}, //2234 #CJK UNIFIED IDEOGRAPH
+ {0xAFC4, 0x7D15}, //2235 #CJK UNIFIED IDEOGRAPH
+ {0xAFC5, 0x7D1A}, //2236 #CJK UNIFIED IDEOGRAPH
+ {0xAFC6, 0x7D1C}, //2237 #CJK UNIFIED IDEOGRAPH
+ {0xAFC7, 0x7D0D}, //2238 #CJK UNIFIED IDEOGRAPH
+ {0xAFC8, 0x7D19}, //2239 #CJK UNIFIED IDEOGRAPH
+ {0xAFC9, 0x7D1B}, //2240 #CJK UNIFIED IDEOGRAPH
+ {0xAFCA, 0x7F3A}, //2241 #CJK UNIFIED IDEOGRAPH
+ {0xAFCB, 0x7F5F}, //2242 #CJK UNIFIED IDEOGRAPH
+ {0xAFCC, 0x7F94}, //2243 #CJK UNIFIED IDEOGRAPH
+ {0xAFCD, 0x7FC5}, //2244 #CJK UNIFIED IDEOGRAPH
+ {0xAFCE, 0x7FC1}, //2245 #CJK UNIFIED IDEOGRAPH
+ {0xAFCF, 0x8006}, //2246 #CJK UNIFIED IDEOGRAPH
+ {0xAFD0, 0x8018}, //2247 #CJK UNIFIED IDEOGRAPH
+ {0xAFD1, 0x8015}, //2248 #CJK UNIFIED IDEOGRAPH
+ {0xAFD2, 0x8019}, //2249 #CJK UNIFIED IDEOGRAPH
+ {0xAFD3, 0x8017}, //2250 #CJK UNIFIED IDEOGRAPH
+ {0xAFD4, 0x803D}, //2251 #CJK UNIFIED IDEOGRAPH
+ {0xAFD5, 0x803F}, //2252 #CJK UNIFIED IDEOGRAPH
+ {0xAFD6, 0x80F1}, //2253 #CJK UNIFIED IDEOGRAPH
+ {0xAFD7, 0x8102}, //2254 #CJK UNIFIED IDEOGRAPH
+ {0xAFD8, 0x80F0}, //2255 #CJK UNIFIED IDEOGRAPH
+ {0xAFD9, 0x8105}, //2256 #CJK UNIFIED IDEOGRAPH
+ {0xAFDA, 0x80ED}, //2257 #CJK UNIFIED IDEOGRAPH
+ {0xAFDB, 0x80F4}, //2258 #CJK UNIFIED IDEOGRAPH
+ {0xAFDC, 0x8106}, //2259 #CJK UNIFIED IDEOGRAPH
+ {0xAFDD, 0x80F8}, //2260 #CJK UNIFIED IDEOGRAPH
+ {0xAFDE, 0x80F3}, //2261 #CJK UNIFIED IDEOGRAPH
+ {0xAFDF, 0x8108}, //2262 #CJK UNIFIED IDEOGRAPH
+ {0xAFE0, 0x80FD}, //2263 #CJK UNIFIED IDEOGRAPH
+ {0xAFE1, 0x810A}, //2264 #CJK UNIFIED IDEOGRAPH
+ {0xAFE2, 0x80FC}, //2265 #CJK UNIFIED IDEOGRAPH
+ {0xAFE3, 0x80EF}, //2266 #CJK UNIFIED IDEOGRAPH
+ {0xAFE4, 0x81ED}, //2267 #CJK UNIFIED IDEOGRAPH
+ {0xAFE5, 0x81EC}, //2268 #CJK UNIFIED IDEOGRAPH
+ {0xAFE6, 0x8200}, //2269 #CJK UNIFIED IDEOGRAPH
+ {0xAFE7, 0x8210}, //2270 #CJK UNIFIED IDEOGRAPH
+ {0xAFE8, 0x822A}, //2271 #CJK UNIFIED IDEOGRAPH
+ {0xAFE9, 0x822B}, //2272 #CJK UNIFIED IDEOGRAPH
+ {0xAFEA, 0x8228}, //2273 #CJK UNIFIED IDEOGRAPH
+ {0xAFEB, 0x822C}, //2274 #CJK UNIFIED IDEOGRAPH
+ {0xAFEC, 0x82BB}, //2275 #CJK UNIFIED IDEOGRAPH
+ {0xAFED, 0x832B}, //2276 #CJK UNIFIED IDEOGRAPH
+ {0xAFEE, 0x8352}, //2277 #CJK UNIFIED IDEOGRAPH
+ {0xAFEF, 0x8354}, //2278 #CJK UNIFIED IDEOGRAPH
+ {0xAFF0, 0x834A}, //2279 #CJK UNIFIED IDEOGRAPH
+ {0xAFF1, 0x8338}, //2280 #CJK UNIFIED IDEOGRAPH
+ {0xAFF2, 0x8350}, //2281 #CJK UNIFIED IDEOGRAPH
+ {0xAFF3, 0x8349}, //2282 #CJK UNIFIED IDEOGRAPH
+ {0xAFF4, 0x8335}, //2283 #CJK UNIFIED IDEOGRAPH
+ {0xAFF5, 0x8334}, //2284 #CJK UNIFIED IDEOGRAPH
+ {0xAFF6, 0x834F}, //2285 #CJK UNIFIED IDEOGRAPH
+ {0xAFF7, 0x8332}, //2286 #CJK UNIFIED IDEOGRAPH
+ {0xAFF8, 0x8339}, //2287 #CJK UNIFIED IDEOGRAPH
+ {0xAFF9, 0x8336}, //2288 #CJK UNIFIED IDEOGRAPH
+ {0xAFFA, 0x8317}, //2289 #CJK UNIFIED IDEOGRAPH
+ {0xAFFB, 0x8340}, //2290 #CJK UNIFIED IDEOGRAPH
+ {0xAFFC, 0x8331}, //2291 #CJK UNIFIED IDEOGRAPH
+ {0xAFFD, 0x8328}, //2292 #CJK UNIFIED IDEOGRAPH
+ {0xAFFE, 0x8343}, //2293 #CJK UNIFIED IDEOGRAPH
+ {0xB040, 0x8654}, //2294 #CJK UNIFIED IDEOGRAPH
+ {0xB041, 0x868A}, //2295 #CJK UNIFIED IDEOGRAPH
+ {0xB042, 0x86AA}, //2296 #CJK UNIFIED IDEOGRAPH
+ {0xB043, 0x8693}, //2297 #CJK UNIFIED IDEOGRAPH
+ {0xB044, 0x86A4}, //2298 #CJK UNIFIED IDEOGRAPH
+ {0xB045, 0x86A9}, //2299 #CJK UNIFIED IDEOGRAPH
+ {0xB046, 0x868C}, //2300 #CJK UNIFIED IDEOGRAPH
+ {0xB047, 0x86A3}, //2301 #CJK UNIFIED IDEOGRAPH
+ {0xB048, 0x869C}, //2302 #CJK UNIFIED IDEOGRAPH
+ {0xB049, 0x8870}, //2303 #CJK UNIFIED IDEOGRAPH
+ {0xB04A, 0x8877}, //2304 #CJK UNIFIED IDEOGRAPH
+ {0xB04B, 0x8881}, //2305 #CJK UNIFIED IDEOGRAPH
+ {0xB04C, 0x8882}, //2306 #CJK UNIFIED IDEOGRAPH
+ {0xB04D, 0x887D}, //2307 #CJK UNIFIED IDEOGRAPH
+ {0xB04E, 0x8879}, //2308 #CJK UNIFIED IDEOGRAPH
+ {0xB04F, 0x8A18}, //2309 #CJK UNIFIED IDEOGRAPH
+ {0xB050, 0x8A10}, //2310 #CJK UNIFIED IDEOGRAPH
+ {0xB051, 0x8A0E}, //2311 #CJK UNIFIED IDEOGRAPH
+ {0xB052, 0x8A0C}, //2312 #CJK UNIFIED IDEOGRAPH
+ {0xB053, 0x8A15}, //2313 #CJK UNIFIED IDEOGRAPH
+ {0xB054, 0x8A0A}, //2314 #CJK UNIFIED IDEOGRAPH
+ {0xB055, 0x8A17}, //2315 #CJK UNIFIED IDEOGRAPH
+ {0xB056, 0x8A13}, //2316 #CJK UNIFIED IDEOGRAPH
+ {0xB057, 0x8A16}, //2317 #CJK UNIFIED IDEOGRAPH
+ {0xB058, 0x8A0F}, //2318 #CJK UNIFIED IDEOGRAPH
+ {0xB059, 0x8A11}, //2319 #CJK UNIFIED IDEOGRAPH
+ {0xB05A, 0x8C48}, //2320 #CJK UNIFIED IDEOGRAPH
+ {0xB05B, 0x8C7A}, //2321 #CJK UNIFIED IDEOGRAPH
+ {0xB05C, 0x8C79}, //2322 #CJK UNIFIED IDEOGRAPH
+ {0xB05D, 0x8CA1}, //2323 #CJK UNIFIED IDEOGRAPH
+ {0xB05E, 0x8CA2}, //2324 #CJK UNIFIED IDEOGRAPH
+ {0xB05F, 0x8D77}, //2325 #CJK UNIFIED IDEOGRAPH
+ {0xB060, 0x8EAC}, //2326 #CJK UNIFIED IDEOGRAPH
+ {0xB061, 0x8ED2}, //2327 #CJK UNIFIED IDEOGRAPH
+ {0xB062, 0x8ED4}, //2328 #CJK UNIFIED IDEOGRAPH
+ {0xB063, 0x8ECF}, //2329 #CJK UNIFIED IDEOGRAPH
+ {0xB064, 0x8FB1}, //2330 #CJK UNIFIED IDEOGRAPH
+ {0xB065, 0x9001}, //2331 #CJK UNIFIED IDEOGRAPH
+ {0xB066, 0x9006}, //2332 #CJK UNIFIED IDEOGRAPH
+ {0xB067, 0x8FF7}, //2333 #CJK UNIFIED IDEOGRAPH
+ {0xB068, 0x9000}, //2334 #CJK UNIFIED IDEOGRAPH
+ {0xB069, 0x8FFA}, //2335 #CJK UNIFIED IDEOGRAPH
+ {0xB06A, 0x8FF4}, //2336 #CJK UNIFIED IDEOGRAPH
+ {0xB06B, 0x9003}, //2337 #CJK UNIFIED IDEOGRAPH
+ {0xB06C, 0x8FFD}, //2338 #CJK UNIFIED IDEOGRAPH
+ {0xB06D, 0x9005}, //2339 #CJK UNIFIED IDEOGRAPH
+ {0xB06E, 0x8FF8}, //2340 #CJK UNIFIED IDEOGRAPH
+ {0xB06F, 0x9095}, //2341 #CJK UNIFIED IDEOGRAPH
+ {0xB070, 0x90E1}, //2342 #CJK UNIFIED IDEOGRAPH
+ {0xB071, 0x90DD}, //2343 #CJK UNIFIED IDEOGRAPH
+ {0xB072, 0x90E2}, //2344 #CJK UNIFIED IDEOGRAPH
+ {0xB073, 0x9152}, //2345 #CJK UNIFIED IDEOGRAPH
+ {0xB074, 0x914D}, //2346 #CJK UNIFIED IDEOGRAPH
+ {0xB075, 0x914C}, //2347 #CJK UNIFIED IDEOGRAPH
+ {0xB076, 0x91D8}, //2348 #CJK UNIFIED IDEOGRAPH
+ {0xB077, 0x91DD}, //2349 #CJK UNIFIED IDEOGRAPH
+ {0xB078, 0x91D7}, //2350 #CJK UNIFIED IDEOGRAPH
+ {0xB079, 0x91DC}, //2351 #CJK UNIFIED IDEOGRAPH
+ {0xB07A, 0x91D9}, //2352 #CJK UNIFIED IDEOGRAPH
+ {0xB07B, 0x9583}, //2353 #CJK UNIFIED IDEOGRAPH
+ {0xB07C, 0x9662}, //2354 #CJK UNIFIED IDEOGRAPH
+ {0xB07D, 0x9663}, //2355 #CJK UNIFIED IDEOGRAPH
+ {0xB07E, 0x9661}, //2356 #CJK UNIFIED IDEOGRAPH
+ {0xB0A1, 0x965B}, //2357 #CJK UNIFIED IDEOGRAPH
+ {0xB0A2, 0x965D}, //2358 #CJK UNIFIED IDEOGRAPH
+ {0xB0A3, 0x9664}, //2359 #CJK UNIFIED IDEOGRAPH
+ {0xB0A4, 0x9658}, //2360 #CJK UNIFIED IDEOGRAPH
+ {0xB0A5, 0x965E}, //2361 #CJK UNIFIED IDEOGRAPH
+ {0xB0A6, 0x96BB}, //2362 #CJK UNIFIED IDEOGRAPH
+ {0xB0A7, 0x98E2}, //2363 #CJK UNIFIED IDEOGRAPH
+ {0xB0A8, 0x99AC}, //2364 #CJK UNIFIED IDEOGRAPH
+ {0xB0A9, 0x9AA8}, //2365 #CJK UNIFIED IDEOGRAPH
+ {0xB0AA, 0x9AD8}, //2366 #CJK UNIFIED IDEOGRAPH
+ {0xB0AB, 0x9B25}, //2367 #CJK UNIFIED IDEOGRAPH
+ {0xB0AC, 0x9B32}, //2368 #CJK UNIFIED IDEOGRAPH
+ {0xB0AD, 0x9B3C}, //2369 #CJK UNIFIED IDEOGRAPH
+ {0xB0AE, 0x4E7E}, //2370 #CJK UNIFIED IDEOGRAPH
+ {0xB0AF, 0x507A}, //2371 #CJK UNIFIED IDEOGRAPH
+ {0xB0B0, 0x507D}, //2372 #CJK UNIFIED IDEOGRAPH
+ {0xB0B1, 0x505C}, //2373 #CJK UNIFIED IDEOGRAPH
+ {0xB0B2, 0x5047}, //2374 #CJK UNIFIED IDEOGRAPH
+ {0xB0B3, 0x5043}, //2375 #CJK UNIFIED IDEOGRAPH
+ {0xB0B4, 0x504C}, //2376 #CJK UNIFIED IDEOGRAPH
+ {0xB0B5, 0x505A}, //2377 #CJK UNIFIED IDEOGRAPH
+ {0xB0B6, 0x5049}, //2378 #CJK UNIFIED IDEOGRAPH
+ {0xB0B7, 0x5065}, //2379 #CJK UNIFIED IDEOGRAPH
+ {0xB0B8, 0x5076}, //2380 #CJK UNIFIED IDEOGRAPH
+ {0xB0B9, 0x504E}, //2381 #CJK UNIFIED IDEOGRAPH
+ {0xB0BA, 0x5055}, //2382 #CJK UNIFIED IDEOGRAPH
+ {0xB0BB, 0x5075}, //2383 #CJK UNIFIED IDEOGRAPH
+ {0xB0BC, 0x5074}, //2384 #CJK UNIFIED IDEOGRAPH
+ {0xB0BD, 0x5077}, //2385 #CJK UNIFIED IDEOGRAPH
+ {0xB0BE, 0x504F}, //2386 #CJK UNIFIED IDEOGRAPH
+ {0xB0BF, 0x500F}, //2387 #CJK UNIFIED IDEOGRAPH
+ {0xB0C0, 0x506F}, //2388 #CJK UNIFIED IDEOGRAPH
+ {0xB0C1, 0x506D}, //2389 #CJK UNIFIED IDEOGRAPH
+ {0xB0C2, 0x515C}, //2390 #CJK UNIFIED IDEOGRAPH
+ {0xB0C3, 0x5195}, //2391 #CJK UNIFIED IDEOGRAPH
+ {0xB0C4, 0x51F0}, //2392 #CJK UNIFIED IDEOGRAPH
+ {0xB0C5, 0x526A}, //2393 #CJK UNIFIED IDEOGRAPH
+ {0xB0C6, 0x526F}, //2394 #CJK UNIFIED IDEOGRAPH
+ {0xB0C7, 0x52D2}, //2395 #CJK UNIFIED IDEOGRAPH
+ {0xB0C8, 0x52D9}, //2396 #CJK UNIFIED IDEOGRAPH
+ {0xB0C9, 0x52D8}, //2397 #CJK UNIFIED IDEOGRAPH
+ {0xB0CA, 0x52D5}, //2398 #CJK UNIFIED IDEOGRAPH
+ {0xB0CB, 0x5310}, //2399 #CJK UNIFIED IDEOGRAPH
+ {0xB0CC, 0x530F}, //2400 #CJK UNIFIED IDEOGRAPH
+ {0xB0CD, 0x5319}, //2401 #CJK UNIFIED IDEOGRAPH
+ {0xB0CE, 0x533F}, //2402 #CJK UNIFIED IDEOGRAPH
+ {0xB0CF, 0x5340}, //2403 #CJK UNIFIED IDEOGRAPH
+ {0xB0D0, 0x533E}, //2404 #CJK UNIFIED IDEOGRAPH
+ {0xB0D1, 0x53C3}, //2405 #CJK UNIFIED IDEOGRAPH
+ {0xB0D2, 0x66FC}, //2406 #CJK UNIFIED IDEOGRAPH
+ {0xB0D3, 0x5546}, //2407 #CJK UNIFIED IDEOGRAPH
+ {0xB0D4, 0x556A}, //2408 #CJK UNIFIED IDEOGRAPH
+ {0xB0D5, 0x5566}, //2409 #CJK UNIFIED IDEOGRAPH
+ {0xB0D6, 0x5544}, //2410 #CJK UNIFIED IDEOGRAPH
+ {0xB0D7, 0x555E}, //2411 #CJK UNIFIED IDEOGRAPH
+ {0xB0D8, 0x5561}, //2412 #CJK UNIFIED IDEOGRAPH
+ {0xB0D9, 0x5543}, //2413 #CJK UNIFIED IDEOGRAPH
+ {0xB0DA, 0x554A}, //2414 #CJK UNIFIED IDEOGRAPH
+ {0xB0DB, 0x5531}, //2415 #CJK UNIFIED IDEOGRAPH
+ {0xB0DC, 0x5556}, //2416 #CJK UNIFIED IDEOGRAPH
+ {0xB0DD, 0x554F}, //2417 #CJK UNIFIED IDEOGRAPH
+ {0xB0DE, 0x5555}, //2418 #CJK UNIFIED IDEOGRAPH
+ {0xB0DF, 0x552F}, //2419 #CJK UNIFIED IDEOGRAPH
+ {0xB0E0, 0x5564}, //2420 #CJK UNIFIED IDEOGRAPH
+ {0xB0E1, 0x5538}, //2421 #CJK UNIFIED IDEOGRAPH
+ {0xB0E2, 0x552E}, //2422 #CJK UNIFIED IDEOGRAPH
+ {0xB0E3, 0x555C}, //2423 #CJK UNIFIED IDEOGRAPH
+ {0xB0E4, 0x552C}, //2424 #CJK UNIFIED IDEOGRAPH
+ {0xB0E5, 0x5563}, //2425 #CJK UNIFIED IDEOGRAPH
+ {0xB0E6, 0x5533}, //2426 #CJK UNIFIED IDEOGRAPH
+ {0xB0E7, 0x5541}, //2427 #CJK UNIFIED IDEOGRAPH
+ {0xB0E8, 0x5557}, //2428 #CJK UNIFIED IDEOGRAPH
+ {0xB0E9, 0x5708}, //2429 #CJK UNIFIED IDEOGRAPH
+ {0xB0EA, 0x570B}, //2430 #CJK UNIFIED IDEOGRAPH
+ {0xB0EB, 0x5709}, //2431 #CJK UNIFIED IDEOGRAPH
+ {0xB0EC, 0x57DF}, //2432 #CJK UNIFIED IDEOGRAPH
+ {0xB0ED, 0x5805}, //2433 #CJK UNIFIED IDEOGRAPH
+ {0xB0EE, 0x580A}, //2434 #CJK UNIFIED IDEOGRAPH
+ {0xB0EF, 0x5806}, //2435 #CJK UNIFIED IDEOGRAPH
+ {0xB0F0, 0x57E0}, //2436 #CJK UNIFIED IDEOGRAPH
+ {0xB0F1, 0x57E4}, //2437 #CJK UNIFIED IDEOGRAPH
+ {0xB0F2, 0x57FA}, //2438 #CJK UNIFIED IDEOGRAPH
+ {0xB0F3, 0x5802}, //2439 #CJK UNIFIED IDEOGRAPH
+ {0xB0F4, 0x5835}, //2440 #CJK UNIFIED IDEOGRAPH
+ {0xB0F5, 0x57F7}, //2441 #CJK UNIFIED IDEOGRAPH
+ {0xB0F6, 0x57F9}, //2442 #CJK UNIFIED IDEOGRAPH
+ {0xB0F7, 0x5920}, //2443 #CJK UNIFIED IDEOGRAPH
+ {0xB0F8, 0x5962}, //2444 #CJK UNIFIED IDEOGRAPH
+ {0xB0F9, 0x5A36}, //2445 #CJK UNIFIED IDEOGRAPH
+ {0xB0FA, 0x5A41}, //2446 #CJK UNIFIED IDEOGRAPH
+ {0xB0FB, 0x5A49}, //2447 #CJK UNIFIED IDEOGRAPH
+ {0xB0FC, 0x5A66}, //2448 #CJK UNIFIED IDEOGRAPH
+ {0xB0FD, 0x5A6A}, //2449 #CJK UNIFIED IDEOGRAPH
+ {0xB0FE, 0x5A40}, //2450 #CJK UNIFIED IDEOGRAPH
+ {0xB140, 0x5A3C}, //2451 #CJK UNIFIED IDEOGRAPH
+ {0xB141, 0x5A62}, //2452 #CJK UNIFIED IDEOGRAPH
+ {0xB142, 0x5A5A}, //2453 #CJK UNIFIED IDEOGRAPH
+ {0xB143, 0x5A46}, //2454 #CJK UNIFIED IDEOGRAPH
+ {0xB144, 0x5A4A}, //2455 #CJK UNIFIED IDEOGRAPH
+ {0xB145, 0x5B70}, //2456 #CJK UNIFIED IDEOGRAPH
+ {0xB146, 0x5BC7}, //2457 #CJK UNIFIED IDEOGRAPH
+ {0xB147, 0x5BC5}, //2458 #CJK UNIFIED IDEOGRAPH
+ {0xB148, 0x5BC4}, //2459 #CJK UNIFIED IDEOGRAPH
+ {0xB149, 0x5BC2}, //2460 #CJK UNIFIED IDEOGRAPH
+ {0xB14A, 0x5BBF}, //2461 #CJK UNIFIED IDEOGRAPH
+ {0xB14B, 0x5BC6}, //2462 #CJK UNIFIED IDEOGRAPH
+ {0xB14C, 0x5C09}, //2463 #CJK UNIFIED IDEOGRAPH
+ {0xB14D, 0x5C08}, //2464 #CJK UNIFIED IDEOGRAPH
+ {0xB14E, 0x5C07}, //2465 #CJK UNIFIED IDEOGRAPH
+ {0xB14F, 0x5C60}, //2466 #CJK UNIFIED IDEOGRAPH
+ {0xB150, 0x5C5C}, //2467 #CJK UNIFIED IDEOGRAPH
+ {0xB151, 0x5C5D}, //2468 #CJK UNIFIED IDEOGRAPH
+ {0xB152, 0x5D07}, //2469 #CJK UNIFIED IDEOGRAPH
+ {0xB153, 0x5D06}, //2470 #CJK UNIFIED IDEOGRAPH
+ {0xB154, 0x5D0E}, //2471 #CJK UNIFIED IDEOGRAPH
+ {0xB155, 0x5D1B}, //2472 #CJK UNIFIED IDEOGRAPH
+ {0xB156, 0x5D16}, //2473 #CJK UNIFIED IDEOGRAPH
+ {0xB157, 0x5D22}, //2474 #CJK UNIFIED IDEOGRAPH
+ {0xB158, 0x5D11}, //2475 #CJK UNIFIED IDEOGRAPH
+ {0xB159, 0x5D29}, //2476 #CJK UNIFIED IDEOGRAPH
+ {0xB15A, 0x5D14}, //2477 #CJK UNIFIED IDEOGRAPH
+ {0xB15B, 0x5D19}, //2478 #CJK UNIFIED IDEOGRAPH
+ {0xB15C, 0x5D24}, //2479 #CJK UNIFIED IDEOGRAPH
+ {0xB15D, 0x5D27}, //2480 #CJK UNIFIED IDEOGRAPH
+ {0xB15E, 0x5D17}, //2481 #CJK UNIFIED IDEOGRAPH
+ {0xB15F, 0x5DE2}, //2482 #CJK UNIFIED IDEOGRAPH
+ {0xB160, 0x5E38}, //2483 #CJK UNIFIED IDEOGRAPH
+ {0xB161, 0x5E36}, //2484 #CJK UNIFIED IDEOGRAPH
+ {0xB162, 0x5E33}, //2485 #CJK UNIFIED IDEOGRAPH
+ {0xB163, 0x5E37}, //2486 #CJK UNIFIED IDEOGRAPH
+ {0xB164, 0x5EB7}, //2487 #CJK UNIFIED IDEOGRAPH
+ {0xB165, 0x5EB8}, //2488 #CJK UNIFIED IDEOGRAPH
+ {0xB166, 0x5EB6}, //2489 #CJK UNIFIED IDEOGRAPH
+ {0xB167, 0x5EB5}, //2490 #CJK UNIFIED IDEOGRAPH
+ {0xB168, 0x5EBE}, //2491 #CJK UNIFIED IDEOGRAPH
+ {0xB169, 0x5F35}, //2492 #CJK UNIFIED IDEOGRAPH
+ {0xB16A, 0x5F37}, //2493 #CJK UNIFIED IDEOGRAPH
+ {0xB16B, 0x5F57}, //2494 #CJK UNIFIED IDEOGRAPH
+ {0xB16C, 0x5F6C}, //2495 #CJK UNIFIED IDEOGRAPH
+ {0xB16D, 0x5F69}, //2496 #CJK UNIFIED IDEOGRAPH
+ {0xB16E, 0x5F6B}, //2497 #CJK UNIFIED IDEOGRAPH
+ {0xB16F, 0x5F97}, //2498 #CJK UNIFIED IDEOGRAPH
+ {0xB170, 0x5F99}, //2499 #CJK UNIFIED IDEOGRAPH
+ {0xB171, 0x5F9E}, //2500 #CJK UNIFIED IDEOGRAPH
+ {0xB172, 0x5F98}, //2501 #CJK UNIFIED IDEOGRAPH
+ {0xB173, 0x5FA1}, //2502 #CJK UNIFIED IDEOGRAPH
+ {0xB174, 0x5FA0}, //2503 #CJK UNIFIED IDEOGRAPH
+ {0xB175, 0x5F9C}, //2504 #CJK UNIFIED IDEOGRAPH
+ {0xB176, 0x607F}, //2505 #CJK UNIFIED IDEOGRAPH
+ {0xB177, 0x60A3}, //2506 #CJK UNIFIED IDEOGRAPH
+ {0xB178, 0x6089}, //2507 #CJK UNIFIED IDEOGRAPH
+ {0xB179, 0x60A0}, //2508 #CJK UNIFIED IDEOGRAPH
+ {0xB17A, 0x60A8}, //2509 #CJK UNIFIED IDEOGRAPH
+ {0xB17B, 0x60CB}, //2510 #CJK UNIFIED IDEOGRAPH
+ {0xB17C, 0x60B4}, //2511 #CJK UNIFIED IDEOGRAPH
+ {0xB17D, 0x60E6}, //2512 #CJK UNIFIED IDEOGRAPH
+ {0xB17E, 0x60BD}, //2513 #CJK UNIFIED IDEOGRAPH
+ {0xB1A1, 0x60C5}, //2514 #CJK UNIFIED IDEOGRAPH
+ {0xB1A2, 0x60BB}, //2515 #CJK UNIFIED IDEOGRAPH
+ {0xB1A3, 0x60B5}, //2516 #CJK UNIFIED IDEOGRAPH
+ {0xB1A4, 0x60DC}, //2517 #CJK UNIFIED IDEOGRAPH
+ {0xB1A5, 0x60BC}, //2518 #CJK UNIFIED IDEOGRAPH
+ {0xB1A6, 0x60D8}, //2519 #CJK UNIFIED IDEOGRAPH
+ {0xB1A7, 0x60D5}, //2520 #CJK UNIFIED IDEOGRAPH
+ {0xB1A8, 0x60C6}, //2521 #CJK UNIFIED IDEOGRAPH
+ {0xB1A9, 0x60DF}, //2522 #CJK UNIFIED IDEOGRAPH
+ {0xB1AA, 0x60B8}, //2523 #CJK UNIFIED IDEOGRAPH
+ {0xB1AB, 0x60DA}, //2524 #CJK UNIFIED IDEOGRAPH
+ {0xB1AC, 0x60C7}, //2525 #CJK UNIFIED IDEOGRAPH
+ {0xB1AD, 0x621A}, //2526 #CJK UNIFIED IDEOGRAPH
+ {0xB1AE, 0x621B}, //2527 #CJK UNIFIED IDEOGRAPH
+ {0xB1AF, 0x6248}, //2528 #CJK UNIFIED IDEOGRAPH
+ {0xB1B0, 0x63A0}, //2529 #CJK UNIFIED IDEOGRAPH
+ {0xB1B1, 0x63A7}, //2530 #CJK UNIFIED IDEOGRAPH
+ {0xB1B2, 0x6372}, //2531 #CJK UNIFIED IDEOGRAPH
+ {0xB1B3, 0x6396}, //2532 #CJK UNIFIED IDEOGRAPH
+ {0xB1B4, 0x63A2}, //2533 #CJK UNIFIED IDEOGRAPH
+ {0xB1B5, 0x63A5}, //2534 #CJK UNIFIED IDEOGRAPH
+ {0xB1B6, 0x6377}, //2535 #CJK UNIFIED IDEOGRAPH
+ {0xB1B7, 0x6367}, //2536 #CJK UNIFIED IDEOGRAPH
+ {0xB1B8, 0x6398}, //2537 #CJK UNIFIED IDEOGRAPH
+ {0xB1B9, 0x63AA}, //2538 #CJK UNIFIED IDEOGRAPH
+ {0xB1BA, 0x6371}, //2539 #CJK UNIFIED IDEOGRAPH
+ {0xB1BB, 0x63A9}, //2540 #CJK UNIFIED IDEOGRAPH
+ {0xB1BC, 0x6389}, //2541 #CJK UNIFIED IDEOGRAPH
+ {0xB1BD, 0x6383}, //2542 #CJK UNIFIED IDEOGRAPH
+ {0xB1BE, 0x639B}, //2543 #CJK UNIFIED IDEOGRAPH
+ {0xB1BF, 0x636B}, //2544 #CJK UNIFIED IDEOGRAPH
+ {0xB1C0, 0x63A8}, //2545 #CJK UNIFIED IDEOGRAPH
+ {0xB1C1, 0x6384}, //2546 #CJK UNIFIED IDEOGRAPH
+ {0xB1C2, 0x6388}, //2547 #CJK UNIFIED IDEOGRAPH
+ {0xB1C3, 0x6399}, //2548 #CJK UNIFIED IDEOGRAPH
+ {0xB1C4, 0x63A1}, //2549 #CJK UNIFIED IDEOGRAPH
+ {0xB1C5, 0x63AC}, //2550 #CJK UNIFIED IDEOGRAPH
+ {0xB1C6, 0x6392}, //2551 #CJK UNIFIED IDEOGRAPH
+ {0xB1C7, 0x638F}, //2552 #CJK UNIFIED IDEOGRAPH
+ {0xB1C8, 0x6380}, //2553 #CJK UNIFIED IDEOGRAPH
+ {0xB1C9, 0x637B}, //2554 #CJK UNIFIED IDEOGRAPH
+ {0xB1CA, 0x6369}, //2555 #CJK UNIFIED IDEOGRAPH
+ {0xB1CB, 0x6368}, //2556 #CJK UNIFIED IDEOGRAPH
+ {0xB1CC, 0x637A}, //2557 #CJK UNIFIED IDEOGRAPH
+ {0xB1CD, 0x655D}, //2558 #CJK UNIFIED IDEOGRAPH
+ {0xB1CE, 0x6556}, //2559 #CJK UNIFIED IDEOGRAPH
+ {0xB1CF, 0x6551}, //2560 #CJK UNIFIED IDEOGRAPH
+ {0xB1D0, 0x6559}, //2561 #CJK UNIFIED IDEOGRAPH
+ {0xB1D1, 0x6557}, //2562 #CJK UNIFIED IDEOGRAPH
+ {0xB1D2, 0x555F}, //2563 #CJK UNIFIED IDEOGRAPH
+ {0xB1D3, 0x654F}, //2564 #CJK UNIFIED IDEOGRAPH
+ {0xB1D4, 0x6558}, //2565 #CJK UNIFIED IDEOGRAPH
+ {0xB1D5, 0x6555}, //2566 #CJK UNIFIED IDEOGRAPH
+ {0xB1D6, 0x6554}, //2567 #CJK UNIFIED IDEOGRAPH
+ {0xB1D7, 0x659C}, //2568 #CJK UNIFIED IDEOGRAPH
+ {0xB1D8, 0x659B}, //2569 #CJK UNIFIED IDEOGRAPH
+ {0xB1D9, 0x65AC}, //2570 #CJK UNIFIED IDEOGRAPH
+ {0xB1DA, 0x65CF}, //2571 #CJK UNIFIED IDEOGRAPH
+ {0xB1DB, 0x65CB}, //2572 #CJK UNIFIED IDEOGRAPH
+ {0xB1DC, 0x65CC}, //2573 #CJK UNIFIED IDEOGRAPH
+ {0xB1DD, 0x65CE}, //2574 #CJK UNIFIED IDEOGRAPH
+ {0xB1DE, 0x665D}, //2575 #CJK UNIFIED IDEOGRAPH
+ {0xB1DF, 0x665A}, //2576 #CJK UNIFIED IDEOGRAPH
+ {0xB1E0, 0x6664}, //2577 #CJK UNIFIED IDEOGRAPH
+ {0xB1E1, 0x6668}, //2578 #CJK UNIFIED IDEOGRAPH
+ {0xB1E2, 0x6666}, //2579 #CJK UNIFIED IDEOGRAPH
+ {0xB1E3, 0x665E}, //2580 #CJK UNIFIED IDEOGRAPH
+ {0xB1E4, 0x66F9}, //2581 #CJK UNIFIED IDEOGRAPH
+ {0xB1E5, 0x52D7}, //2582 #CJK UNIFIED IDEOGRAPH
+ {0xB1E6, 0x671B}, //2583 #CJK UNIFIED IDEOGRAPH
+ {0xB1E7, 0x6881}, //2584 #CJK UNIFIED IDEOGRAPH
+ {0xB1E8, 0x68AF}, //2585 #CJK UNIFIED IDEOGRAPH
+ {0xB1E9, 0x68A2}, //2586 #CJK UNIFIED IDEOGRAPH
+ {0xB1EA, 0x6893}, //2587 #CJK UNIFIED IDEOGRAPH
+ {0xB1EB, 0x68B5}, //2588 #CJK UNIFIED IDEOGRAPH
+ {0xB1EC, 0x687F}, //2589 #CJK UNIFIED IDEOGRAPH
+ {0xB1ED, 0x6876}, //2590 #CJK UNIFIED IDEOGRAPH
+ {0xB1EE, 0x68B1}, //2591 #CJK UNIFIED IDEOGRAPH
+ {0xB1EF, 0x68A7}, //2592 #CJK UNIFIED IDEOGRAPH
+ {0xB1F0, 0x6897}, //2593 #CJK UNIFIED IDEOGRAPH
+ {0xB1F1, 0x68B0}, //2594 #CJK UNIFIED IDEOGRAPH
+ {0xB1F2, 0x6883}, //2595 #CJK UNIFIED IDEOGRAPH
+ {0xB1F3, 0x68C4}, //2596 #CJK UNIFIED IDEOGRAPH
+ {0xB1F4, 0x68AD}, //2597 #CJK UNIFIED IDEOGRAPH
+ {0xB1F5, 0x6886}, //2598 #CJK UNIFIED IDEOGRAPH
+ {0xB1F6, 0x6885}, //2599 #CJK UNIFIED IDEOGRAPH
+ {0xB1F7, 0x6894}, //2600 #CJK UNIFIED IDEOGRAPH
+ {0xB1F8, 0x689D}, //2601 #CJK UNIFIED IDEOGRAPH
+ {0xB1F9, 0x68A8}, //2602 #CJK UNIFIED IDEOGRAPH
+ {0xB1FA, 0x689F}, //2603 #CJK UNIFIED IDEOGRAPH
+ {0xB1FB, 0x68A1}, //2604 #CJK UNIFIED IDEOGRAPH
+ {0xB1FC, 0x6882}, //2605 #CJK UNIFIED IDEOGRAPH
+ {0xB1FD, 0x6B32}, //2606 #CJK UNIFIED IDEOGRAPH
+ {0xB1FE, 0x6BBA}, //2607 #CJK UNIFIED IDEOGRAPH
+ {0xB240, 0x6BEB}, //2608 #CJK UNIFIED IDEOGRAPH
+ {0xB241, 0x6BEC}, //2609 #CJK UNIFIED IDEOGRAPH
+ {0xB242, 0x6C2B}, //2610 #CJK UNIFIED IDEOGRAPH
+ {0xB243, 0x6D8E}, //2611 #CJK UNIFIED IDEOGRAPH
+ {0xB244, 0x6DBC}, //2612 #CJK UNIFIED IDEOGRAPH
+ {0xB245, 0x6DF3}, //2613 #CJK UNIFIED IDEOGRAPH
+ {0xB246, 0x6DD9}, //2614 #CJK UNIFIED IDEOGRAPH
+ {0xB247, 0x6DB2}, //2615 #CJK UNIFIED IDEOGRAPH
+ {0xB248, 0x6DE1}, //2616 #CJK UNIFIED IDEOGRAPH
+ {0xB249, 0x6DCC}, //2617 #CJK UNIFIED IDEOGRAPH
+ {0xB24A, 0x6DE4}, //2618 #CJK UNIFIED IDEOGRAPH
+ {0xB24B, 0x6DFB}, //2619 #CJK UNIFIED IDEOGRAPH
+ {0xB24C, 0x6DFA}, //2620 #CJK UNIFIED IDEOGRAPH
+ {0xB24D, 0x6E05}, //2621 #CJK UNIFIED IDEOGRAPH
+ {0xB24E, 0x6DC7}, //2622 #CJK UNIFIED IDEOGRAPH
+ {0xB24F, 0x6DCB}, //2623 #CJK UNIFIED IDEOGRAPH
+ {0xB250, 0x6DAF}, //2624 #CJK UNIFIED IDEOGRAPH
+ {0xB251, 0x6DD1}, //2625 #CJK UNIFIED IDEOGRAPH
+ {0xB252, 0x6DAE}, //2626 #CJK UNIFIED IDEOGRAPH
+ {0xB253, 0x6DDE}, //2627 #CJK UNIFIED IDEOGRAPH
+ {0xB254, 0x6DF9}, //2628 #CJK UNIFIED IDEOGRAPH
+ {0xB255, 0x6DB8}, //2629 #CJK UNIFIED IDEOGRAPH
+ {0xB256, 0x6DF7}, //2630 #CJK UNIFIED IDEOGRAPH
+ {0xB257, 0x6DF5}, //2631 #CJK UNIFIED IDEOGRAPH
+ {0xB258, 0x6DC5}, //2632 #CJK UNIFIED IDEOGRAPH
+ {0xB259, 0x6DD2}, //2633 #CJK UNIFIED IDEOGRAPH
+ {0xB25A, 0x6E1A}, //2634 #CJK UNIFIED IDEOGRAPH
+ {0xB25B, 0x6DB5}, //2635 #CJK UNIFIED IDEOGRAPH
+ {0xB25C, 0x6DDA}, //2636 #CJK UNIFIED IDEOGRAPH
+ {0xB25D, 0x6DEB}, //2637 #CJK UNIFIED IDEOGRAPH
+ {0xB25E, 0x6DD8}, //2638 #CJK UNIFIED IDEOGRAPH
+ {0xB25F, 0x6DEA}, //2639 #CJK UNIFIED IDEOGRAPH
+ {0xB260, 0x6DF1}, //2640 #CJK UNIFIED IDEOGRAPH
+ {0xB261, 0x6DEE}, //2641 #CJK UNIFIED IDEOGRAPH
+ {0xB262, 0x6DE8}, //2642 #CJK UNIFIED IDEOGRAPH
+ {0xB263, 0x6DC6}, //2643 #CJK UNIFIED IDEOGRAPH
+ {0xB264, 0x6DC4}, //2644 #CJK UNIFIED IDEOGRAPH
+ {0xB265, 0x6DAA}, //2645 #CJK UNIFIED IDEOGRAPH
+ {0xB266, 0x6DEC}, //2646 #CJK UNIFIED IDEOGRAPH
+ {0xB267, 0x6DBF}, //2647 #CJK UNIFIED IDEOGRAPH
+ {0xB268, 0x6DE6}, //2648 #CJK UNIFIED IDEOGRAPH
+ {0xB269, 0x70F9}, //2649 #CJK UNIFIED IDEOGRAPH
+ {0xB26A, 0x7109}, //2650 #CJK UNIFIED IDEOGRAPH
+ {0xB26B, 0x710A}, //2651 #CJK UNIFIED IDEOGRAPH
+ {0xB26C, 0x70FD}, //2652 #CJK UNIFIED IDEOGRAPH
+ {0xB26D, 0x70EF}, //2653 #CJK UNIFIED IDEOGRAPH
+ {0xB26E, 0x723D}, //2654 #CJK UNIFIED IDEOGRAPH
+ {0xB26F, 0x727D}, //2655 #CJK UNIFIED IDEOGRAPH
+ {0xB270, 0x7281}, //2656 #CJK UNIFIED IDEOGRAPH
+ {0xB271, 0x731C}, //2657 #CJK UNIFIED IDEOGRAPH
+ {0xB272, 0x731B}, //2658 #CJK UNIFIED IDEOGRAPH
+ {0xB273, 0x7316}, //2659 #CJK UNIFIED IDEOGRAPH
+ {0xB274, 0x7313}, //2660 #CJK UNIFIED IDEOGRAPH
+ {0xB275, 0x7319}, //2661 #CJK UNIFIED IDEOGRAPH
+ {0xB276, 0x7387}, //2662 #CJK UNIFIED IDEOGRAPH
+ {0xB277, 0x7405}, //2663 #CJK UNIFIED IDEOGRAPH
+ {0xB278, 0x740A}, //2664 #CJK UNIFIED IDEOGRAPH
+ {0xB279, 0x7403}, //2665 #CJK UNIFIED IDEOGRAPH
+ {0xB27A, 0x7406}, //2666 #CJK UNIFIED IDEOGRAPH
+ {0xB27B, 0x73FE}, //2667 #CJK UNIFIED IDEOGRAPH
+ {0xB27C, 0x740D}, //2668 #CJK UNIFIED IDEOGRAPH
+ {0xB27D, 0x74E0}, //2669 #CJK UNIFIED IDEOGRAPH
+ {0xB27E, 0x74F6}, //2670 #CJK UNIFIED IDEOGRAPH
+ {0xB2A1, 0x74F7}, //2671 #CJK UNIFIED IDEOGRAPH
+ {0xB2A2, 0x751C}, //2672 #CJK UNIFIED IDEOGRAPH
+ {0xB2A3, 0x7522}, //2673 #CJK UNIFIED IDEOGRAPH
+ {0xB2A4, 0x7565}, //2674 #CJK UNIFIED IDEOGRAPH
+ {0xB2A5, 0x7566}, //2675 #CJK UNIFIED IDEOGRAPH
+ {0xB2A6, 0x7562}, //2676 #CJK UNIFIED IDEOGRAPH
+ {0xB2A7, 0x7570}, //2677 #CJK UNIFIED IDEOGRAPH
+ {0xB2A8, 0x758F}, //2678 #CJK UNIFIED IDEOGRAPH
+ {0xB2A9, 0x75D4}, //2679 #CJK UNIFIED IDEOGRAPH
+ {0xB2AA, 0x75D5}, //2680 #CJK UNIFIED IDEOGRAPH
+ {0xB2AB, 0x75B5}, //2681 #CJK UNIFIED IDEOGRAPH
+ {0xB2AC, 0x75CA}, //2682 #CJK UNIFIED IDEOGRAPH
+ {0xB2AD, 0x75CD}, //2683 #CJK UNIFIED IDEOGRAPH
+ {0xB2AE, 0x768E}, //2684 #CJK UNIFIED IDEOGRAPH
+ {0xB2AF, 0x76D4}, //2685 #CJK UNIFIED IDEOGRAPH
+ {0xB2B0, 0x76D2}, //2686 #CJK UNIFIED IDEOGRAPH
+ {0xB2B1, 0x76DB}, //2687 #CJK UNIFIED IDEOGRAPH
+ {0xB2B2, 0x7737}, //2688 #CJK UNIFIED IDEOGRAPH
+ {0xB2B3, 0x773E}, //2689 #CJK UNIFIED IDEOGRAPH
+ {0xB2B4, 0x773C}, //2690 #CJK UNIFIED IDEOGRAPH
+ {0xB2B5, 0x7736}, //2691 #CJK UNIFIED IDEOGRAPH
+ {0xB2B6, 0x7738}, //2692 #CJK UNIFIED IDEOGRAPH
+ {0xB2B7, 0x773A}, //2693 #CJK UNIFIED IDEOGRAPH
+ {0xB2B8, 0x786B}, //2694 #CJK UNIFIED IDEOGRAPH
+ {0xB2B9, 0x7843}, //2695 #CJK UNIFIED IDEOGRAPH
+ {0xB2BA, 0x784E}, //2696 #CJK UNIFIED IDEOGRAPH
+ {0xB2BB, 0x7965}, //2697 #CJK UNIFIED IDEOGRAPH
+ {0xB2BC, 0x7968}, //2698 #CJK UNIFIED IDEOGRAPH
+ {0xB2BD, 0x796D}, //2699 #CJK UNIFIED IDEOGRAPH
+ {0xB2BE, 0x79FB}, //2700 #CJK UNIFIED IDEOGRAPH
+ {0xB2BF, 0x7A92}, //2701 #CJK UNIFIED IDEOGRAPH
+ {0xB2C0, 0x7A95}, //2702 #CJK UNIFIED IDEOGRAPH
+ {0xB2C1, 0x7B20}, //2703 #CJK UNIFIED IDEOGRAPH
+ {0xB2C2, 0x7B28}, //2704 #CJK UNIFIED IDEOGRAPH
+ {0xB2C3, 0x7B1B}, //2705 #CJK UNIFIED IDEOGRAPH
+ {0xB2C4, 0x7B2C}, //2706 #CJK UNIFIED IDEOGRAPH
+ {0xB2C5, 0x7B26}, //2707 #CJK UNIFIED IDEOGRAPH
+ {0xB2C6, 0x7B19}, //2708 #CJK UNIFIED IDEOGRAPH
+ {0xB2C7, 0x7B1E}, //2709 #CJK UNIFIED IDEOGRAPH
+ {0xB2C8, 0x7B2E}, //2710 #CJK UNIFIED IDEOGRAPH
+ {0xB2C9, 0x7C92}, //2711 #CJK UNIFIED IDEOGRAPH
+ {0xB2CA, 0x7C97}, //2712 #CJK UNIFIED IDEOGRAPH
+ {0xB2CB, 0x7C95}, //2713 #CJK UNIFIED IDEOGRAPH
+ {0xB2CC, 0x7D46}, //2714 #CJK UNIFIED IDEOGRAPH
+ {0xB2CD, 0x7D43}, //2715 #CJK UNIFIED IDEOGRAPH
+ {0xB2CE, 0x7D71}, //2716 #CJK UNIFIED IDEOGRAPH
+ {0xB2CF, 0x7D2E}, //2717 #CJK UNIFIED IDEOGRAPH
+ {0xB2D0, 0x7D39}, //2718 #CJK UNIFIED IDEOGRAPH
+ {0xB2D1, 0x7D3C}, //2719 #CJK UNIFIED IDEOGRAPH
+ {0xB2D2, 0x7D40}, //2720 #CJK UNIFIED IDEOGRAPH
+ {0xB2D3, 0x7D30}, //2721 #CJK UNIFIED IDEOGRAPH
+ {0xB2D4, 0x7D33}, //2722 #CJK UNIFIED IDEOGRAPH
+ {0xB2D5, 0x7D44}, //2723 #CJK UNIFIED IDEOGRAPH
+ {0xB2D6, 0x7D2F}, //2724 #CJK UNIFIED IDEOGRAPH
+ {0xB2D7, 0x7D42}, //2725 #CJK UNIFIED IDEOGRAPH
+ {0xB2D8, 0x7D32}, //2726 #CJK UNIFIED IDEOGRAPH
+ {0xB2D9, 0x7D31}, //2727 #CJK UNIFIED IDEOGRAPH
+ {0xB2DA, 0x7F3D}, //2728 #CJK UNIFIED IDEOGRAPH
+ {0xB2DB, 0x7F9E}, //2729 #CJK UNIFIED IDEOGRAPH
+ {0xB2DC, 0x7F9A}, //2730 #CJK UNIFIED IDEOGRAPH
+ {0xB2DD, 0x7FCC}, //2731 #CJK UNIFIED IDEOGRAPH
+ {0xB2DE, 0x7FCE}, //2732 #CJK UNIFIED IDEOGRAPH
+ {0xB2DF, 0x7FD2}, //2733 #CJK UNIFIED IDEOGRAPH
+ {0xB2E0, 0x801C}, //2734 #CJK UNIFIED IDEOGRAPH
+ {0xB2E1, 0x804A}, //2735 #CJK UNIFIED IDEOGRAPH
+ {0xB2E2, 0x8046}, //2736 #CJK UNIFIED IDEOGRAPH
+ {0xB2E3, 0x812F}, //2737 #CJK UNIFIED IDEOGRAPH
+ {0xB2E4, 0x8116}, //2738 #CJK UNIFIED IDEOGRAPH
+ {0xB2E5, 0x8123}, //2739 #CJK UNIFIED IDEOGRAPH
+ {0xB2E6, 0x812B}, //2740 #CJK UNIFIED IDEOGRAPH
+ {0xB2E7, 0x8129}, //2741 #CJK UNIFIED IDEOGRAPH
+ {0xB2E8, 0x8130}, //2742 #CJK UNIFIED IDEOGRAPH
+ {0xB2E9, 0x8124}, //2743 #CJK UNIFIED IDEOGRAPH
+ {0xB2EA, 0x8202}, //2744 #CJK UNIFIED IDEOGRAPH
+ {0xB2EB, 0x8235}, //2745 #CJK UNIFIED IDEOGRAPH
+ {0xB2EC, 0x8237}, //2746 #CJK UNIFIED IDEOGRAPH
+ {0xB2ED, 0x8236}, //2747 #CJK UNIFIED IDEOGRAPH
+ {0xB2EE, 0x8239}, //2748 #CJK UNIFIED IDEOGRAPH
+ {0xB2EF, 0x838E}, //2749 #CJK UNIFIED IDEOGRAPH
+ {0xB2F0, 0x839E}, //2750 #CJK UNIFIED IDEOGRAPH
+ {0xB2F1, 0x8398}, //2751 #CJK UNIFIED IDEOGRAPH
+ {0xB2F2, 0x8378}, //2752 #CJK UNIFIED IDEOGRAPH
+ {0xB2F3, 0x83A2}, //2753 #CJK UNIFIED IDEOGRAPH
+ {0xB2F4, 0x8396}, //2754 #CJK UNIFIED IDEOGRAPH
+ {0xB2F5, 0x83BD}, //2755 #CJK UNIFIED IDEOGRAPH
+ {0xB2F6, 0x83AB}, //2756 #CJK UNIFIED IDEOGRAPH
+ {0xB2F7, 0x8392}, //2757 #CJK UNIFIED IDEOGRAPH
+ {0xB2F8, 0x838A}, //2758 #CJK UNIFIED IDEOGRAPH
+ {0xB2F9, 0x8393}, //2759 #CJK UNIFIED IDEOGRAPH
+ {0xB2FA, 0x8389}, //2760 #CJK UNIFIED IDEOGRAPH
+ {0xB2FB, 0x83A0}, //2761 #CJK UNIFIED IDEOGRAPH
+ {0xB2FC, 0x8377}, //2762 #CJK UNIFIED IDEOGRAPH
+ {0xB2FD, 0x837B}, //2763 #CJK UNIFIED IDEOGRAPH
+ {0xB2FE, 0x837C}, //2764 #CJK UNIFIED IDEOGRAPH
+ {0xB340, 0x8386}, //2765 #CJK UNIFIED IDEOGRAPH
+ {0xB341, 0x83A7}, //2766 #CJK UNIFIED IDEOGRAPH
+ {0xB342, 0x8655}, //2767 #CJK UNIFIED IDEOGRAPH
+ {0xB343, 0x5F6A}, //2768 #CJK UNIFIED IDEOGRAPH
+ {0xB344, 0x86C7}, //2769 #CJK UNIFIED IDEOGRAPH
+ {0xB345, 0x86C0}, //2770 #CJK UNIFIED IDEOGRAPH
+ {0xB346, 0x86B6}, //2771 #CJK UNIFIED IDEOGRAPH
+ {0xB347, 0x86C4}, //2772 #CJK UNIFIED IDEOGRAPH
+ {0xB348, 0x86B5}, //2773 #CJK UNIFIED IDEOGRAPH
+ {0xB349, 0x86C6}, //2774 #CJK UNIFIED IDEOGRAPH
+ {0xB34A, 0x86CB}, //2775 #CJK UNIFIED IDEOGRAPH
+ {0xB34B, 0x86B1}, //2776 #CJK UNIFIED IDEOGRAPH
+ {0xB34C, 0x86AF}, //2777 #CJK UNIFIED IDEOGRAPH
+ {0xB34D, 0x86C9}, //2778 #CJK UNIFIED IDEOGRAPH
+ {0xB34E, 0x8853}, //2779 #CJK UNIFIED IDEOGRAPH
+ {0xB34F, 0x889E}, //2780 #CJK UNIFIED IDEOGRAPH
+ {0xB350, 0x8888}, //2781 #CJK UNIFIED IDEOGRAPH
+ {0xB351, 0x88AB}, //2782 #CJK UNIFIED IDEOGRAPH
+ {0xB352, 0x8892}, //2783 #CJK UNIFIED IDEOGRAPH
+ {0xB353, 0x8896}, //2784 #CJK UNIFIED IDEOGRAPH
+ {0xB354, 0x888D}, //2785 #CJK UNIFIED IDEOGRAPH
+ {0xB355, 0x888B}, //2786 #CJK UNIFIED IDEOGRAPH
+ {0xB356, 0x8993}, //2787 #CJK UNIFIED IDEOGRAPH
+ {0xB357, 0x898F}, //2788 #CJK UNIFIED IDEOGRAPH
+ {0xB358, 0x8A2A}, //2789 #CJK UNIFIED IDEOGRAPH
+ {0xB359, 0x8A1D}, //2790 #CJK UNIFIED IDEOGRAPH
+ {0xB35A, 0x8A23}, //2791 #CJK UNIFIED IDEOGRAPH
+ {0xB35B, 0x8A25}, //2792 #CJK UNIFIED IDEOGRAPH
+ {0xB35C, 0x8A31}, //2793 #CJK UNIFIED IDEOGRAPH
+ {0xB35D, 0x8A2D}, //2794 #CJK UNIFIED IDEOGRAPH
+ {0xB35E, 0x8A1F}, //2795 #CJK UNIFIED IDEOGRAPH
+ {0xB35F, 0x8A1B}, //2796 #CJK UNIFIED IDEOGRAPH
+ {0xB360, 0x8A22}, //2797 #CJK UNIFIED IDEOGRAPH
+ {0xB361, 0x8C49}, //2798 #CJK UNIFIED IDEOGRAPH
+ {0xB362, 0x8C5A}, //2799 #CJK UNIFIED IDEOGRAPH
+ {0xB363, 0x8CA9}, //2800 #CJK UNIFIED IDEOGRAPH
+ {0xB364, 0x8CAC}, //2801 #CJK UNIFIED IDEOGRAPH
+ {0xB365, 0x8CAB}, //2802 #CJK UNIFIED IDEOGRAPH
+ {0xB366, 0x8CA8}, //2803 #CJK UNIFIED IDEOGRAPH
+ {0xB367, 0x8CAA}, //2804 #CJK UNIFIED IDEOGRAPH
+ {0xB368, 0x8CA7}, //2805 #CJK UNIFIED IDEOGRAPH
+ {0xB369, 0x8D67}, //2806 #CJK UNIFIED IDEOGRAPH
+ {0xB36A, 0x8D66}, //2807 #CJK UNIFIED IDEOGRAPH
+ {0xB36B, 0x8DBE}, //2808 #CJK UNIFIED IDEOGRAPH
+ {0xB36C, 0x8DBA}, //2809 #CJK UNIFIED IDEOGRAPH
+ {0xB36D, 0x8EDB}, //2810 #CJK UNIFIED IDEOGRAPH
+ {0xB36E, 0x8EDF}, //2811 #CJK UNIFIED IDEOGRAPH
+ {0xB36F, 0x9019}, //2812 #CJK UNIFIED IDEOGRAPH
+ {0xB370, 0x900D}, //2813 #CJK UNIFIED IDEOGRAPH
+ {0xB371, 0x901A}, //2814 #CJK UNIFIED IDEOGRAPH
+ {0xB372, 0x9017}, //2815 #CJK UNIFIED IDEOGRAPH
+ {0xB373, 0x9023}, //2816 #CJK UNIFIED IDEOGRAPH
+ {0xB374, 0x901F}, //2817 #CJK UNIFIED IDEOGRAPH
+ {0xB375, 0x901D}, //2818 #CJK UNIFIED IDEOGRAPH
+ {0xB376, 0x9010}, //2819 #CJK UNIFIED IDEOGRAPH
+ {0xB377, 0x9015}, //2820 #CJK UNIFIED IDEOGRAPH
+ {0xB378, 0x901E}, //2821 #CJK UNIFIED IDEOGRAPH
+ {0xB379, 0x9020}, //2822 #CJK UNIFIED IDEOGRAPH
+ {0xB37A, 0x900F}, //2823 #CJK UNIFIED IDEOGRAPH
+ {0xB37B, 0x9022}, //2824 #CJK UNIFIED IDEOGRAPH
+ {0xB37C, 0x9016}, //2825 #CJK UNIFIED IDEOGRAPH
+ {0xB37D, 0x901B}, //2826 #CJK UNIFIED IDEOGRAPH
+ {0xB37E, 0x9014}, //2827 #CJK UNIFIED IDEOGRAPH
+ {0xB3A1, 0x90E8}, //2828 #CJK UNIFIED IDEOGRAPH
+ {0xB3A2, 0x90ED}, //2829 #CJK UNIFIED IDEOGRAPH
+ {0xB3A3, 0x90FD}, //2830 #CJK UNIFIED IDEOGRAPH
+ {0xB3A4, 0x9157}, //2831 #CJK UNIFIED IDEOGRAPH
+ {0xB3A5, 0x91CE}, //2832 #CJK UNIFIED IDEOGRAPH
+ {0xB3A6, 0x91F5}, //2833 #CJK UNIFIED IDEOGRAPH
+ {0xB3A7, 0x91E6}, //2834 #CJK UNIFIED IDEOGRAPH
+ {0xB3A8, 0x91E3}, //2835 #CJK UNIFIED IDEOGRAPH
+ {0xB3A9, 0x91E7}, //2836 #CJK UNIFIED IDEOGRAPH
+ {0xB3AA, 0x91ED}, //2837 #CJK UNIFIED IDEOGRAPH
+ {0xB3AB, 0x91E9}, //2838 #CJK UNIFIED IDEOGRAPH
+ {0xB3AC, 0x9589}, //2839 #CJK UNIFIED IDEOGRAPH
+ {0xB3AD, 0x966A}, //2840 #CJK UNIFIED IDEOGRAPH
+ {0xB3AE, 0x9675}, //2841 #CJK UNIFIED IDEOGRAPH
+ {0xB3AF, 0x9673}, //2842 #CJK UNIFIED IDEOGRAPH
+ {0xB3B0, 0x9678}, //2843 #CJK UNIFIED IDEOGRAPH
+ {0xB3B1, 0x9670}, //2844 #CJK UNIFIED IDEOGRAPH
+ {0xB3B2, 0x9674}, //2845 #CJK UNIFIED IDEOGRAPH
+ {0xB3B3, 0x9676}, //2846 #CJK UNIFIED IDEOGRAPH
+ {0xB3B4, 0x9677}, //2847 #CJK UNIFIED IDEOGRAPH
+ {0xB3B5, 0x966C}, //2848 #CJK UNIFIED IDEOGRAPH
+ {0xB3B6, 0x96C0}, //2849 #CJK UNIFIED IDEOGRAPH
+ {0xB3B7, 0x96EA}, //2850 #CJK UNIFIED IDEOGRAPH
+ {0xB3B8, 0x96E9}, //2851 #CJK UNIFIED IDEOGRAPH
+ {0xB3B9, 0x7AE0}, //2852 #CJK UNIFIED IDEOGRAPH
+ {0xB3BA, 0x7ADF}, //2853 #CJK UNIFIED IDEOGRAPH
+ {0xB3BB, 0x9802}, //2854 #CJK UNIFIED IDEOGRAPH
+ {0xB3BC, 0x9803}, //2855 #CJK UNIFIED IDEOGRAPH
+ {0xB3BD, 0x9B5A}, //2856 #CJK UNIFIED IDEOGRAPH
+ {0xB3BE, 0x9CE5}, //2857 #CJK UNIFIED IDEOGRAPH
+ {0xB3BF, 0x9E75}, //2858 #CJK UNIFIED IDEOGRAPH
+ {0xB3C0, 0x9E7F}, //2859 #CJK UNIFIED IDEOGRAPH
+ {0xB3C1, 0x9EA5}, //2860 #CJK UNIFIED IDEOGRAPH
+ {0xB3C2, 0x9EBB}, //2861 #CJK UNIFIED IDEOGRAPH
+ {0xB3C3, 0x50A2}, //2862 #CJK UNIFIED IDEOGRAPH
+ {0xB3C4, 0x508D}, //2863 #CJK UNIFIED IDEOGRAPH
+ {0xB3C5, 0x5085}, //2864 #CJK UNIFIED IDEOGRAPH
+ {0xB3C6, 0x5099}, //2865 #CJK UNIFIED IDEOGRAPH
+ {0xB3C7, 0x5091}, //2866 #CJK UNIFIED IDEOGRAPH
+ {0xB3C8, 0x5080}, //2867 #CJK UNIFIED IDEOGRAPH
+ {0xB3C9, 0x5096}, //2868 #CJK UNIFIED IDEOGRAPH
+ {0xB3CA, 0x5098}, //2869 #CJK UNIFIED IDEOGRAPH
+ {0xB3CB, 0x509A}, //2870 #CJK UNIFIED IDEOGRAPH
+ {0xB3CC, 0x6700}, //2871 #CJK UNIFIED IDEOGRAPH
+ {0xB3CD, 0x51F1}, //2872 #CJK UNIFIED IDEOGRAPH
+ {0xB3CE, 0x5272}, //2873 #CJK UNIFIED IDEOGRAPH
+ {0xB3CF, 0x5274}, //2874 #CJK UNIFIED IDEOGRAPH
+ {0xB3D0, 0x5275}, //2875 #CJK UNIFIED IDEOGRAPH
+ {0xB3D1, 0x5269}, //2876 #CJK UNIFIED IDEOGRAPH
+ {0xB3D2, 0x52DE}, //2877 #CJK UNIFIED IDEOGRAPH
+ {0xB3D3, 0x52DD}, //2878 #CJK UNIFIED IDEOGRAPH
+ {0xB3D4, 0x52DB}, //2879 #CJK UNIFIED IDEOGRAPH
+ {0xB3D5, 0x535A}, //2880 #CJK UNIFIED IDEOGRAPH
+ {0xB3D6, 0x53A5}, //2881 #CJK UNIFIED IDEOGRAPH
+ {0xB3D7, 0x557B}, //2882 #CJK UNIFIED IDEOGRAPH
+ {0xB3D8, 0x5580}, //2883 #CJK UNIFIED IDEOGRAPH
+ {0xB3D9, 0x55A7}, //2884 #CJK UNIFIED IDEOGRAPH
+ {0xB3DA, 0x557C}, //2885 #CJK UNIFIED IDEOGRAPH
+ {0xB3DB, 0x558A}, //2886 #CJK UNIFIED IDEOGRAPH
+ {0xB3DC, 0x559D}, //2887 #CJK UNIFIED IDEOGRAPH
+ {0xB3DD, 0x5598}, //2888 #CJK UNIFIED IDEOGRAPH
+ {0xB3DE, 0x5582}, //2889 #CJK UNIFIED IDEOGRAPH
+ {0xB3DF, 0x559C}, //2890 #CJK UNIFIED IDEOGRAPH
+ {0xB3E0, 0x55AA}, //2891 #CJK UNIFIED IDEOGRAPH
+ {0xB3E1, 0x5594}, //2892 #CJK UNIFIED IDEOGRAPH
+ {0xB3E2, 0x5587}, //2893 #CJK UNIFIED IDEOGRAPH
+ {0xB3E3, 0x558B}, //2894 #CJK UNIFIED IDEOGRAPH
+ {0xB3E4, 0x5583}, //2895 #CJK UNIFIED IDEOGRAPH
+ {0xB3E5, 0x55B3}, //2896 #CJK UNIFIED IDEOGRAPH
+ {0xB3E6, 0x55AE}, //2897 #CJK UNIFIED IDEOGRAPH
+ {0xB3E7, 0x559F}, //2898 #CJK UNIFIED IDEOGRAPH
+ {0xB3E8, 0x553E}, //2899 #CJK UNIFIED IDEOGRAPH
+ {0xB3E9, 0x55B2}, //2900 #CJK UNIFIED IDEOGRAPH
+ {0xB3EA, 0x559A}, //2901 #CJK UNIFIED IDEOGRAPH
+ {0xB3EB, 0x55BB}, //2902 #CJK UNIFIED IDEOGRAPH
+ {0xB3EC, 0x55AC}, //2903 #CJK UNIFIED IDEOGRAPH
+ {0xB3ED, 0x55B1}, //2904 #CJK UNIFIED IDEOGRAPH
+ {0xB3EE, 0x557E}, //2905 #CJK UNIFIED IDEOGRAPH
+ {0xB3EF, 0x5589}, //2906 #CJK UNIFIED IDEOGRAPH
+ {0xB3F0, 0x55AB}, //2907 #CJK UNIFIED IDEOGRAPH
+ {0xB3F1, 0x5599}, //2908 #CJK UNIFIED IDEOGRAPH
+ {0xB3F2, 0x570D}, //2909 #CJK UNIFIED IDEOGRAPH
+ {0xB3F3, 0x582F}, //2910 #CJK UNIFIED IDEOGRAPH
+ {0xB3F4, 0x582A}, //2911 #CJK UNIFIED IDEOGRAPH
+ {0xB3F5, 0x5834}, //2912 #CJK UNIFIED IDEOGRAPH
+ {0xB3F6, 0x5824}, //2913 #CJK UNIFIED IDEOGRAPH
+ {0xB3F7, 0x5830}, //2914 #CJK UNIFIED IDEOGRAPH
+ {0xB3F8, 0x5831}, //2915 #CJK UNIFIED IDEOGRAPH
+ {0xB3F9, 0x5821}, //2916 #CJK UNIFIED IDEOGRAPH
+ {0xB3FA, 0x581D}, //2917 #CJK UNIFIED IDEOGRAPH
+ {0xB3FB, 0x5820}, //2918 #CJK UNIFIED IDEOGRAPH
+ {0xB3FC, 0x58F9}, //2919 #CJK UNIFIED IDEOGRAPH
+ {0xB3FD, 0x58FA}, //2920 #CJK UNIFIED IDEOGRAPH
+ {0xB3FE, 0x5960}, //2921 #CJK UNIFIED IDEOGRAPH
+ {0xB440, 0x5A77}, //2922 #CJK UNIFIED IDEOGRAPH
+ {0xB441, 0x5A9A}, //2923 #CJK UNIFIED IDEOGRAPH
+ {0xB442, 0x5A7F}, //2924 #CJK UNIFIED IDEOGRAPH
+ {0xB443, 0x5A92}, //2925 #CJK UNIFIED IDEOGRAPH
+ {0xB444, 0x5A9B}, //2926 #CJK UNIFIED IDEOGRAPH
+ {0xB445, 0x5AA7}, //2927 #CJK UNIFIED IDEOGRAPH
+ {0xB446, 0x5B73}, //2928 #CJK UNIFIED IDEOGRAPH
+ {0xB447, 0x5B71}, //2929 #CJK UNIFIED IDEOGRAPH
+ {0xB448, 0x5BD2}, //2930 #CJK UNIFIED IDEOGRAPH
+ {0xB449, 0x5BCC}, //2931 #CJK UNIFIED IDEOGRAPH
+ {0xB44A, 0x5BD3}, //2932 #CJK UNIFIED IDEOGRAPH
+ {0xB44B, 0x5BD0}, //2933 #CJK UNIFIED IDEOGRAPH
+ {0xB44C, 0x5C0A}, //2934 #CJK UNIFIED IDEOGRAPH
+ {0xB44D, 0x5C0B}, //2935 #CJK UNIFIED IDEOGRAPH
+ {0xB44E, 0x5C31}, //2936 #CJK UNIFIED IDEOGRAPH
+ {0xB44F, 0x5D4C}, //2937 #CJK UNIFIED IDEOGRAPH
+ {0xB450, 0x5D50}, //2938 #CJK UNIFIED IDEOGRAPH
+ {0xB451, 0x5D34}, //2939 #CJK UNIFIED IDEOGRAPH
+ {0xB452, 0x5D47}, //2940 #CJK UNIFIED IDEOGRAPH
+ {0xB453, 0x5DFD}, //2941 #CJK UNIFIED IDEOGRAPH
+ {0xB454, 0x5E45}, //2942 #CJK UNIFIED IDEOGRAPH
+ {0xB455, 0x5E3D}, //2943 #CJK UNIFIED IDEOGRAPH
+ {0xB456, 0x5E40}, //2944 #CJK UNIFIED IDEOGRAPH
+ {0xB457, 0x5E43}, //2945 #CJK UNIFIED IDEOGRAPH
+ {0xB458, 0x5E7E}, //2946 #CJK UNIFIED IDEOGRAPH
+ {0xB459, 0x5ECA}, //2947 #CJK UNIFIED IDEOGRAPH
+ {0xB45A, 0x5EC1}, //2948 #CJK UNIFIED IDEOGRAPH
+ {0xB45B, 0x5EC2}, //2949 #CJK UNIFIED IDEOGRAPH
+ {0xB45C, 0x5EC4}, //2950 #CJK UNIFIED IDEOGRAPH
+ {0xB45D, 0x5F3C}, //2951 #CJK UNIFIED IDEOGRAPH
+ {0xB45E, 0x5F6D}, //2952 #CJK UNIFIED IDEOGRAPH
+ {0xB45F, 0x5FA9}, //2953 #CJK UNIFIED IDEOGRAPH
+ {0xB460, 0x5FAA}, //2954 #CJK UNIFIED IDEOGRAPH
+ {0xB461, 0x5FA8}, //2955 #CJK UNIFIED IDEOGRAPH
+ {0xB462, 0x60D1}, //2956 #CJK UNIFIED IDEOGRAPH
+ {0xB463, 0x60E1}, //2957 #CJK UNIFIED IDEOGRAPH
+ {0xB464, 0x60B2}, //2958 #CJK UNIFIED IDEOGRAPH
+ {0xB465, 0x60B6}, //2959 #CJK UNIFIED IDEOGRAPH
+ {0xB466, 0x60E0}, //2960 #CJK UNIFIED IDEOGRAPH
+ {0xB467, 0x611C}, //2961 #CJK UNIFIED IDEOGRAPH
+ {0xB468, 0x6123}, //2962 #CJK UNIFIED IDEOGRAPH
+ {0xB469, 0x60FA}, //2963 #CJK UNIFIED IDEOGRAPH
+ {0xB46A, 0x6115}, //2964 #CJK UNIFIED IDEOGRAPH
+ {0xB46B, 0x60F0}, //2965 #CJK UNIFIED IDEOGRAPH
+ {0xB46C, 0x60FB}, //2966 #CJK UNIFIED IDEOGRAPH
+ {0xB46D, 0x60F4}, //2967 #CJK UNIFIED IDEOGRAPH
+ {0xB46E, 0x6168}, //2968 #CJK UNIFIED IDEOGRAPH
+ {0xB46F, 0x60F1}, //2969 #CJK UNIFIED IDEOGRAPH
+ {0xB470, 0x610E}, //2970 #CJK UNIFIED IDEOGRAPH
+ {0xB471, 0x60F6}, //2971 #CJK UNIFIED IDEOGRAPH
+ {0xB472, 0x6109}, //2972 #CJK UNIFIED IDEOGRAPH
+ {0xB473, 0x6100}, //2973 #CJK UNIFIED IDEOGRAPH
+ {0xB474, 0x6112}, //2974 #CJK UNIFIED IDEOGRAPH
+ {0xB475, 0x621F}, //2975 #CJK UNIFIED IDEOGRAPH
+ {0xB476, 0x6249}, //2976 #CJK UNIFIED IDEOGRAPH
+ {0xB477, 0x63A3}, //2977 #CJK UNIFIED IDEOGRAPH
+ {0xB478, 0x638C}, //2978 #CJK UNIFIED IDEOGRAPH
+ {0xB479, 0x63CF}, //2979 #CJK UNIFIED IDEOGRAPH
+ {0xB47A, 0x63C0}, //2980 #CJK UNIFIED IDEOGRAPH
+ {0xB47B, 0x63E9}, //2981 #CJK UNIFIED IDEOGRAPH
+ {0xB47C, 0x63C9}, //2982 #CJK UNIFIED IDEOGRAPH
+ {0xB47D, 0x63C6}, //2983 #CJK UNIFIED IDEOGRAPH
+ {0xB47E, 0x63CD}, //2984 #CJK UNIFIED IDEOGRAPH
+ {0xB4A1, 0x63D2}, //2985 #CJK UNIFIED IDEOGRAPH
+ {0xB4A2, 0x63E3}, //2986 #CJK UNIFIED IDEOGRAPH
+ {0xB4A3, 0x63D0}, //2987 #CJK UNIFIED IDEOGRAPH
+ {0xB4A4, 0x63E1}, //2988 #CJK UNIFIED IDEOGRAPH
+ {0xB4A5, 0x63D6}, //2989 #CJK UNIFIED IDEOGRAPH
+ {0xB4A6, 0x63ED}, //2990 #CJK UNIFIED IDEOGRAPH
+ {0xB4A7, 0x63EE}, //2991 #CJK UNIFIED IDEOGRAPH
+ {0xB4A8, 0x6376}, //2992 #CJK UNIFIED IDEOGRAPH
+ {0xB4A9, 0x63F4}, //2993 #CJK UNIFIED IDEOGRAPH
+ {0xB4AA, 0x63EA}, //2994 #CJK UNIFIED IDEOGRAPH
+ {0xB4AB, 0x63DB}, //2995 #CJK UNIFIED IDEOGRAPH
+ {0xB4AC, 0x6452}, //2996 #CJK UNIFIED IDEOGRAPH
+ {0xB4AD, 0x63DA}, //2997 #CJK UNIFIED IDEOGRAPH
+ {0xB4AE, 0x63F9}, //2998 #CJK UNIFIED IDEOGRAPH
+ {0xB4AF, 0x655E}, //2999 #CJK UNIFIED IDEOGRAPH
+ {0xB4B0, 0x6566}, //3000 #CJK UNIFIED IDEOGRAPH
+ {0xB4B1, 0x6562}, //3001 #CJK UNIFIED IDEOGRAPH
+ {0xB4B2, 0x6563}, //3002 #CJK UNIFIED IDEOGRAPH
+ {0xB4B3, 0x6591}, //3003 #CJK UNIFIED IDEOGRAPH
+ {0xB4B4, 0x6590}, //3004 #CJK UNIFIED IDEOGRAPH
+ {0xB4B5, 0x65AF}, //3005 #CJK UNIFIED IDEOGRAPH
+ {0xB4B6, 0x666E}, //3006 #CJK UNIFIED IDEOGRAPH
+ {0xB4B7, 0x6670}, //3007 #CJK UNIFIED IDEOGRAPH
+ {0xB4B8, 0x6674}, //3008 #CJK UNIFIED IDEOGRAPH
+ {0xB4B9, 0x6676}, //3009 #CJK UNIFIED IDEOGRAPH
+ {0xB4BA, 0x666F}, //3010 #CJK UNIFIED IDEOGRAPH
+ {0xB4BB, 0x6691}, //3011 #CJK UNIFIED IDEOGRAPH
+ {0xB4BC, 0x667A}, //3012 #CJK UNIFIED IDEOGRAPH
+ {0xB4BD, 0x667E}, //3013 #CJK UNIFIED IDEOGRAPH
+ {0xB4BE, 0x6677}, //3014 #CJK UNIFIED IDEOGRAPH
+ {0xB4BF, 0x66FE}, //3015 #CJK UNIFIED IDEOGRAPH
+ {0xB4C0, 0x66FF}, //3016 #CJK UNIFIED IDEOGRAPH
+ {0xB4C1, 0x671F}, //3017 #CJK UNIFIED IDEOGRAPH
+ {0xB4C2, 0x671D}, //3018 #CJK UNIFIED IDEOGRAPH
+ {0xB4C3, 0x68FA}, //3019 #CJK UNIFIED IDEOGRAPH
+ {0xB4C4, 0x68D5}, //3020 #CJK UNIFIED IDEOGRAPH
+ {0xB4C5, 0x68E0}, //3021 #CJK UNIFIED IDEOGRAPH
+ {0xB4C6, 0x68D8}, //3022 #CJK UNIFIED IDEOGRAPH
+ {0xB4C7, 0x68D7}, //3023 #CJK UNIFIED IDEOGRAPH
+ {0xB4C8, 0x6905}, //3024 #CJK UNIFIED IDEOGRAPH
+ {0xB4C9, 0x68DF}, //3025 #CJK UNIFIED IDEOGRAPH
+ {0xB4CA, 0x68F5}, //3026 #CJK UNIFIED IDEOGRAPH
+ {0xB4CB, 0x68EE}, //3027 #CJK UNIFIED IDEOGRAPH
+ {0xB4CC, 0x68E7}, //3028 #CJK UNIFIED IDEOGRAPH
+ {0xB4CD, 0x68F9}, //3029 #CJK UNIFIED IDEOGRAPH
+ {0xB4CE, 0x68D2}, //3030 #CJK UNIFIED IDEOGRAPH
+ {0xB4CF, 0x68F2}, //3031 #CJK UNIFIED IDEOGRAPH
+ {0xB4D0, 0x68E3}, //3032 #CJK UNIFIED IDEOGRAPH
+ {0xB4D1, 0x68CB}, //3033 #CJK UNIFIED IDEOGRAPH
+ {0xB4D2, 0x68CD}, //3034 #CJK UNIFIED IDEOGRAPH
+ {0xB4D3, 0x690D}, //3035 #CJK UNIFIED IDEOGRAPH
+ {0xB4D4, 0x6912}, //3036 #CJK UNIFIED IDEOGRAPH
+ {0xB4D5, 0x690E}, //3037 #CJK UNIFIED IDEOGRAPH
+ {0xB4D6, 0x68C9}, //3038 #CJK UNIFIED IDEOGRAPH
+ {0xB4D7, 0x68DA}, //3039 #CJK UNIFIED IDEOGRAPH
+ {0xB4D8, 0x696E}, //3040 #CJK UNIFIED IDEOGRAPH
+ {0xB4D9, 0x68FB}, //3041 #CJK UNIFIED IDEOGRAPH
+ {0xB4DA, 0x6B3E}, //3042 #CJK UNIFIED IDEOGRAPH
+ {0xB4DB, 0x6B3A}, //3043 #CJK UNIFIED IDEOGRAPH
+ {0xB4DC, 0x6B3D}, //3044 #CJK UNIFIED IDEOGRAPH
+ {0xB4DD, 0x6B98}, //3045 #CJK UNIFIED IDEOGRAPH
+ {0xB4DE, 0x6B96}, //3046 #CJK UNIFIED IDEOGRAPH
+ {0xB4DF, 0x6BBC}, //3047 #CJK UNIFIED IDEOGRAPH
+ {0xB4E0, 0x6BEF}, //3048 #CJK UNIFIED IDEOGRAPH
+ {0xB4E1, 0x6C2E}, //3049 #CJK UNIFIED IDEOGRAPH
+ {0xB4E2, 0x6C2F}, //3050 #CJK UNIFIED IDEOGRAPH
+ {0xB4E3, 0x6C2C}, //3051 #CJK UNIFIED IDEOGRAPH
+ {0xB4E4, 0x6E2F}, //3052 #CJK UNIFIED IDEOGRAPH
+ {0xB4E5, 0x6E38}, //3053 #CJK UNIFIED IDEOGRAPH
+ {0xB4E6, 0x6E54}, //3054 #CJK UNIFIED IDEOGRAPH
+ {0xB4E7, 0x6E21}, //3055 #CJK UNIFIED IDEOGRAPH
+ {0xB4E8, 0x6E32}, //3056 #CJK UNIFIED IDEOGRAPH
+ {0xB4E9, 0x6E67}, //3057 #CJK UNIFIED IDEOGRAPH
+ {0xB4EA, 0x6E4A}, //3058 #CJK UNIFIED IDEOGRAPH
+ {0xB4EB, 0x6E20}, //3059 #CJK UNIFIED IDEOGRAPH
+ {0xB4EC, 0x6E25}, //3060 #CJK UNIFIED IDEOGRAPH
+ {0xB4ED, 0x6E23}, //3061 #CJK UNIFIED IDEOGRAPH
+ {0xB4EE, 0x6E1B}, //3062 #CJK UNIFIED IDEOGRAPH
+ {0xB4EF, 0x6E5B}, //3063 #CJK UNIFIED IDEOGRAPH
+ {0xB4F0, 0x6E58}, //3064 #CJK UNIFIED IDEOGRAPH
+ {0xB4F1, 0x6E24}, //3065 #CJK UNIFIED IDEOGRAPH
+ {0xB4F2, 0x6E56}, //3066 #CJK UNIFIED IDEOGRAPH
+ {0xB4F3, 0x6E6E}, //3067 #CJK UNIFIED IDEOGRAPH
+ {0xB4F4, 0x6E2D}, //3068 #CJK UNIFIED IDEOGRAPH
+ {0xB4F5, 0x6E26}, //3069 #CJK UNIFIED IDEOGRAPH
+ {0xB4F6, 0x6E6F}, //3070 #CJK UNIFIED IDEOGRAPH
+ {0xB4F7, 0x6E34}, //3071 #CJK UNIFIED IDEOGRAPH
+ {0xB4F8, 0x6E4D}, //3072 #CJK UNIFIED IDEOGRAPH
+ {0xB4F9, 0x6E3A}, //3073 #CJK UNIFIED IDEOGRAPH
+ {0xB4FA, 0x6E2C}, //3074 #CJK UNIFIED IDEOGRAPH
+ {0xB4FB, 0x6E43}, //3075 #CJK UNIFIED IDEOGRAPH
+ {0xB4FC, 0x6E1D}, //3076 #CJK UNIFIED IDEOGRAPH
+ {0xB4FD, 0x6E3E}, //3077 #CJK UNIFIED IDEOGRAPH
+ {0xB4FE, 0x6ECB}, //3078 #CJK UNIFIED IDEOGRAPH
+ {0xB540, 0x6E89}, //3079 #CJK UNIFIED IDEOGRAPH
+ {0xB541, 0x6E19}, //3080 #CJK UNIFIED IDEOGRAPH
+ {0xB542, 0x6E4E}, //3081 #CJK UNIFIED IDEOGRAPH
+ {0xB543, 0x6E63}, //3082 #CJK UNIFIED IDEOGRAPH
+ {0xB544, 0x6E44}, //3083 #CJK UNIFIED IDEOGRAPH
+ {0xB545, 0x6E72}, //3084 #CJK UNIFIED IDEOGRAPH
+ {0xB546, 0x6E69}, //3085 #CJK UNIFIED IDEOGRAPH
+ {0xB547, 0x6E5F}, //3086 #CJK UNIFIED IDEOGRAPH
+ {0xB548, 0x7119}, //3087 #CJK UNIFIED IDEOGRAPH
+ {0xB549, 0x711A}, //3088 #CJK UNIFIED IDEOGRAPH
+ {0xB54A, 0x7126}, //3089 #CJK UNIFIED IDEOGRAPH
+ {0xB54B, 0x7130}, //3090 #CJK UNIFIED IDEOGRAPH
+ {0xB54C, 0x7121}, //3091 #CJK UNIFIED IDEOGRAPH
+ {0xB54D, 0x7136}, //3092 #CJK UNIFIED IDEOGRAPH
+ {0xB54E, 0x716E}, //3093 #CJK UNIFIED IDEOGRAPH
+ {0xB54F, 0x711C}, //3094 #CJK UNIFIED IDEOGRAPH
+ {0xB550, 0x724C}, //3095 #CJK UNIFIED IDEOGRAPH
+ {0xB551, 0x7284}, //3096 #CJK UNIFIED IDEOGRAPH
+ {0xB552, 0x7280}, //3097 #CJK UNIFIED IDEOGRAPH
+ {0xB553, 0x7336}, //3098 #CJK UNIFIED IDEOGRAPH
+ {0xB554, 0x7325}, //3099 #CJK UNIFIED IDEOGRAPH
+ {0xB555, 0x7334}, //3100 #CJK UNIFIED IDEOGRAPH
+ {0xB556, 0x7329}, //3101 #CJK UNIFIED IDEOGRAPH
+ {0xB557, 0x743A}, //3102 #CJK UNIFIED IDEOGRAPH
+ {0xB558, 0x742A}, //3103 #CJK UNIFIED IDEOGRAPH
+ {0xB559, 0x7433}, //3104 #CJK UNIFIED IDEOGRAPH
+ {0xB55A, 0x7422}, //3105 #CJK UNIFIED IDEOGRAPH
+ {0xB55B, 0x7425}, //3106 #CJK UNIFIED IDEOGRAPH
+ {0xB55C, 0x7435}, //3107 #CJK UNIFIED IDEOGRAPH
+ {0xB55D, 0x7436}, //3108 #CJK UNIFIED IDEOGRAPH
+ {0xB55E, 0x7434}, //3109 #CJK UNIFIED IDEOGRAPH
+ {0xB55F, 0x742F}, //3110 #CJK UNIFIED IDEOGRAPH
+ {0xB560, 0x741B}, //3111 #CJK UNIFIED IDEOGRAPH
+ {0xB561, 0x7426}, //3112 #CJK UNIFIED IDEOGRAPH
+ {0xB562, 0x7428}, //3113 #CJK UNIFIED IDEOGRAPH
+ {0xB563, 0x7525}, //3114 #CJK UNIFIED IDEOGRAPH
+ {0xB564, 0x7526}, //3115 #CJK UNIFIED IDEOGRAPH
+ {0xB565, 0x756B}, //3116 #CJK UNIFIED IDEOGRAPH
+ {0xB566, 0x756A}, //3117 #CJK UNIFIED IDEOGRAPH
+ {0xB567, 0x75E2}, //3118 #CJK UNIFIED IDEOGRAPH
+ {0xB568, 0x75DB}, //3119 #CJK UNIFIED IDEOGRAPH
+ {0xB569, 0x75E3}, //3120 #CJK UNIFIED IDEOGRAPH
+ {0xB56A, 0x75D9}, //3121 #CJK UNIFIED IDEOGRAPH
+ {0xB56B, 0x75D8}, //3122 #CJK UNIFIED IDEOGRAPH
+ {0xB56C, 0x75DE}, //3123 #CJK UNIFIED IDEOGRAPH
+ {0xB56D, 0x75E0}, //3124 #CJK UNIFIED IDEOGRAPH
+ {0xB56E, 0x767B}, //3125 #CJK UNIFIED IDEOGRAPH
+ {0xB56F, 0x767C}, //3126 #CJK UNIFIED IDEOGRAPH
+ {0xB570, 0x7696}, //3127 #CJK UNIFIED IDEOGRAPH
+ {0xB571, 0x7693}, //3128 #CJK UNIFIED IDEOGRAPH
+ {0xB572, 0x76B4}, //3129 #CJK UNIFIED IDEOGRAPH
+ {0xB573, 0x76DC}, //3130 #CJK UNIFIED IDEOGRAPH
+ {0xB574, 0x774F}, //3131 #CJK UNIFIED IDEOGRAPH
+ {0xB575, 0x77ED}, //3132 #CJK UNIFIED IDEOGRAPH
+ {0xB576, 0x785D}, //3133 #CJK UNIFIED IDEOGRAPH
+ {0xB577, 0x786C}, //3134 #CJK UNIFIED IDEOGRAPH
+ {0xB578, 0x786F}, //3135 #CJK UNIFIED IDEOGRAPH
+ {0xB579, 0x7A0D}, //3136 #CJK UNIFIED IDEOGRAPH
+ {0xB57A, 0x7A08}, //3137 #CJK UNIFIED IDEOGRAPH
+ {0xB57B, 0x7A0B}, //3138 #CJK UNIFIED IDEOGRAPH
+ {0xB57C, 0x7A05}, //3139 #CJK UNIFIED IDEOGRAPH
+ {0xB57D, 0x7A00}, //3140 #CJK UNIFIED IDEOGRAPH
+ {0xB57E, 0x7A98}, //3141 #CJK UNIFIED IDEOGRAPH
+ {0xB5A1, 0x7A97}, //3142 #CJK UNIFIED IDEOGRAPH
+ {0xB5A2, 0x7A96}, //3143 #CJK UNIFIED IDEOGRAPH
+ {0xB5A3, 0x7AE5}, //3144 #CJK UNIFIED IDEOGRAPH
+ {0xB5A4, 0x7AE3}, //3145 #CJK UNIFIED IDEOGRAPH
+ {0xB5A5, 0x7B49}, //3146 #CJK UNIFIED IDEOGRAPH
+ {0xB5A6, 0x7B56}, //3147 #CJK UNIFIED IDEOGRAPH
+ {0xB5A7, 0x7B46}, //3148 #CJK UNIFIED IDEOGRAPH
+ {0xB5A8, 0x7B50}, //3149 #CJK UNIFIED IDEOGRAPH
+ {0xB5A9, 0x7B52}, //3150 #CJK UNIFIED IDEOGRAPH
+ {0xB5AA, 0x7B54}, //3151 #CJK UNIFIED IDEOGRAPH
+ {0xB5AB, 0x7B4D}, //3152 #CJK UNIFIED IDEOGRAPH
+ {0xB5AC, 0x7B4B}, //3153 #CJK UNIFIED IDEOGRAPH
+ {0xB5AD, 0x7B4F}, //3154 #CJK UNIFIED IDEOGRAPH
+ {0xB5AE, 0x7B51}, //3155 #CJK UNIFIED IDEOGRAPH
+ {0xB5AF, 0x7C9F}, //3156 #CJK UNIFIED IDEOGRAPH
+ {0xB5B0, 0x7CA5}, //3157 #CJK UNIFIED IDEOGRAPH
+ {0xB5B1, 0x7D5E}, //3158 #CJK UNIFIED IDEOGRAPH
+ {0xB5B2, 0x7D50}, //3159 #CJK UNIFIED IDEOGRAPH
+ {0xB5B3, 0x7D68}, //3160 #CJK UNIFIED IDEOGRAPH
+ {0xB5B4, 0x7D55}, //3161 #CJK UNIFIED IDEOGRAPH
+ {0xB5B5, 0x7D2B}, //3162 #CJK UNIFIED IDEOGRAPH
+ {0xB5B6, 0x7D6E}, //3163 #CJK UNIFIED IDEOGRAPH
+ {0xB5B7, 0x7D72}, //3164 #CJK UNIFIED IDEOGRAPH
+ {0xB5B8, 0x7D61}, //3165 #CJK UNIFIED IDEOGRAPH
+ {0xB5B9, 0x7D66}, //3166 #CJK UNIFIED IDEOGRAPH
+ {0xB5BA, 0x7D62}, //3167 #CJK UNIFIED IDEOGRAPH
+ {0xB5BB, 0x7D70}, //3168 #CJK UNIFIED IDEOGRAPH
+ {0xB5BC, 0x7D73}, //3169 #CJK UNIFIED IDEOGRAPH
+ {0xB5BD, 0x5584}, //3170 #CJK UNIFIED IDEOGRAPH
+ {0xB5BE, 0x7FD4}, //3171 #CJK UNIFIED IDEOGRAPH
+ {0xB5BF, 0x7FD5}, //3172 #CJK UNIFIED IDEOGRAPH
+ {0xB5C0, 0x800B}, //3173 #CJK UNIFIED IDEOGRAPH
+ {0xB5C1, 0x8052}, //3174 #CJK UNIFIED IDEOGRAPH
+ {0xB5C2, 0x8085}, //3175 #CJK UNIFIED IDEOGRAPH
+ {0xB5C3, 0x8155}, //3176 #CJK UNIFIED IDEOGRAPH
+ {0xB5C4, 0x8154}, //3177 #CJK UNIFIED IDEOGRAPH
+ {0xB5C5, 0x814B}, //3178 #CJK UNIFIED IDEOGRAPH
+ {0xB5C6, 0x8151}, //3179 #CJK UNIFIED IDEOGRAPH
+ {0xB5C7, 0x814E}, //3180 #CJK UNIFIED IDEOGRAPH
+ {0xB5C8, 0x8139}, //3181 #CJK UNIFIED IDEOGRAPH
+ {0xB5C9, 0x8146}, //3182 #CJK UNIFIED IDEOGRAPH
+ {0xB5CA, 0x813E}, //3183 #CJK UNIFIED IDEOGRAPH
+ {0xB5CB, 0x814C}, //3184 #CJK UNIFIED IDEOGRAPH
+ {0xB5CC, 0x8153}, //3185 #CJK UNIFIED IDEOGRAPH
+ {0xB5CD, 0x8174}, //3186 #CJK UNIFIED IDEOGRAPH
+ {0xB5CE, 0x8212}, //3187 #CJK UNIFIED IDEOGRAPH
+ {0xB5CF, 0x821C}, //3188 #CJK UNIFIED IDEOGRAPH
+ {0xB5D0, 0x83E9}, //3189 #CJK UNIFIED IDEOGRAPH
+ {0xB5D1, 0x8403}, //3190 #CJK UNIFIED IDEOGRAPH
+ {0xB5D2, 0x83F8}, //3191 #CJK UNIFIED IDEOGRAPH
+ {0xB5D3, 0x840D}, //3192 #CJK UNIFIED IDEOGRAPH
+ {0xB5D4, 0x83E0}, //3193 #CJK UNIFIED IDEOGRAPH
+ {0xB5D5, 0x83C5}, //3194 #CJK UNIFIED IDEOGRAPH
+ {0xB5D6, 0x840B}, //3195 #CJK UNIFIED IDEOGRAPH
+ {0xB5D7, 0x83C1}, //3196 #CJK UNIFIED IDEOGRAPH
+ {0xB5D8, 0x83EF}, //3197 #CJK UNIFIED IDEOGRAPH
+ {0xB5D9, 0x83F1}, //3198 #CJK UNIFIED IDEOGRAPH
+ {0xB5DA, 0x83F4}, //3199 #CJK UNIFIED IDEOGRAPH
+ {0xB5DB, 0x8457}, //3200 #CJK UNIFIED IDEOGRAPH
+ {0xB5DC, 0x840A}, //3201 #CJK UNIFIED IDEOGRAPH
+ {0xB5DD, 0x83F0}, //3202 #CJK UNIFIED IDEOGRAPH
+ {0xB5DE, 0x840C}, //3203 #CJK UNIFIED IDEOGRAPH
+ {0xB5DF, 0x83CC}, //3204 #CJK UNIFIED IDEOGRAPH
+ {0xB5E0, 0x83FD}, //3205 #CJK UNIFIED IDEOGRAPH
+ {0xB5E1, 0x83F2}, //3206 #CJK UNIFIED IDEOGRAPH
+ {0xB5E2, 0x83CA}, //3207 #CJK UNIFIED IDEOGRAPH
+ {0xB5E3, 0x8438}, //3208 #CJK UNIFIED IDEOGRAPH
+ {0xB5E4, 0x840E}, //3209 #CJK UNIFIED IDEOGRAPH
+ {0xB5E5, 0x8404}, //3210 #CJK UNIFIED IDEOGRAPH
+ {0xB5E6, 0x83DC}, //3211 #CJK UNIFIED IDEOGRAPH
+ {0xB5E7, 0x8407}, //3212 #CJK UNIFIED IDEOGRAPH
+ {0xB5E8, 0x83D4}, //3213 #CJK UNIFIED IDEOGRAPH
+ {0xB5E9, 0x83DF}, //3214 #CJK UNIFIED IDEOGRAPH
+ {0xB5EA, 0x865B}, //3215 #CJK UNIFIED IDEOGRAPH
+ {0xB5EB, 0x86DF}, //3216 #CJK UNIFIED IDEOGRAPH
+ {0xB5EC, 0x86D9}, //3217 #CJK UNIFIED IDEOGRAPH
+ {0xB5ED, 0x86ED}, //3218 #CJK UNIFIED IDEOGRAPH
+ {0xB5EE, 0x86D4}, //3219 #CJK UNIFIED IDEOGRAPH
+ {0xB5EF, 0x86DB}, //3220 #CJK UNIFIED IDEOGRAPH
+ {0xB5F0, 0x86E4}, //3221 #CJK UNIFIED IDEOGRAPH
+ {0xB5F1, 0x86D0}, //3222 #CJK UNIFIED IDEOGRAPH
+ {0xB5F2, 0x86DE}, //3223 #CJK UNIFIED IDEOGRAPH
+ {0xB5F3, 0x8857}, //3224 #CJK UNIFIED IDEOGRAPH
+ {0xB5F4, 0x88C1}, //3225 #CJK UNIFIED IDEOGRAPH
+ {0xB5F5, 0x88C2}, //3226 #CJK UNIFIED IDEOGRAPH
+ {0xB5F6, 0x88B1}, //3227 #CJK UNIFIED IDEOGRAPH
+ {0xB5F7, 0x8983}, //3228 #CJK UNIFIED IDEOGRAPH
+ {0xB5F8, 0x8996}, //3229 #CJK UNIFIED IDEOGRAPH
+ {0xB5F9, 0x8A3B}, //3230 #CJK UNIFIED IDEOGRAPH
+ {0xB5FA, 0x8A60}, //3231 #CJK UNIFIED IDEOGRAPH
+ {0xB5FB, 0x8A55}, //3232 #CJK UNIFIED IDEOGRAPH
+ {0xB5FC, 0x8A5E}, //3233 #CJK UNIFIED IDEOGRAPH
+ {0xB5FD, 0x8A3C}, //3234 #CJK UNIFIED IDEOGRAPH
+ {0xB5FE, 0x8A41}, //3235 #CJK UNIFIED IDEOGRAPH
+ {0xB640, 0x8A54}, //3236 #CJK UNIFIED IDEOGRAPH
+ {0xB641, 0x8A5B}, //3237 #CJK UNIFIED IDEOGRAPH
+ {0xB642, 0x8A50}, //3238 #CJK UNIFIED IDEOGRAPH
+ {0xB643, 0x8A46}, //3239 #CJK UNIFIED IDEOGRAPH
+ {0xB644, 0x8A34}, //3240 #CJK UNIFIED IDEOGRAPH
+ {0xB645, 0x8A3A}, //3241 #CJK UNIFIED IDEOGRAPH
+ {0xB646, 0x8A36}, //3242 #CJK UNIFIED IDEOGRAPH
+ {0xB647, 0x8A56}, //3243 #CJK UNIFIED IDEOGRAPH
+ {0xB648, 0x8C61}, //3244 #CJK UNIFIED IDEOGRAPH
+ {0xB649, 0x8C82}, //3245 #CJK UNIFIED IDEOGRAPH
+ {0xB64A, 0x8CAF}, //3246 #CJK UNIFIED IDEOGRAPH
+ {0xB64B, 0x8CBC}, //3247 #CJK UNIFIED IDEOGRAPH
+ {0xB64C, 0x8CB3}, //3248 #CJK UNIFIED IDEOGRAPH
+ {0xB64D, 0x8CBD}, //3249 #CJK UNIFIED IDEOGRAPH
+ {0xB64E, 0x8CC1}, //3250 #CJK UNIFIED IDEOGRAPH
+ {0xB64F, 0x8CBB}, //3251 #CJK UNIFIED IDEOGRAPH
+ {0xB650, 0x8CC0}, //3252 #CJK UNIFIED IDEOGRAPH
+ {0xB651, 0x8CB4}, //3253 #CJK UNIFIED IDEOGRAPH
+ {0xB652, 0x8CB7}, //3254 #CJK UNIFIED IDEOGRAPH
+ {0xB653, 0x8CB6}, //3255 #CJK UNIFIED IDEOGRAPH
+ {0xB654, 0x8CBF}, //3256 #CJK UNIFIED IDEOGRAPH
+ {0xB655, 0x8CB8}, //3257 #CJK UNIFIED IDEOGRAPH
+ {0xB656, 0x8D8A}, //3258 #CJK UNIFIED IDEOGRAPH
+ {0xB657, 0x8D85}, //3259 #CJK UNIFIED IDEOGRAPH
+ {0xB658, 0x8D81}, //3260 #CJK UNIFIED IDEOGRAPH
+ {0xB659, 0x8DCE}, //3261 #CJK UNIFIED IDEOGRAPH
+ {0xB65A, 0x8DDD}, //3262 #CJK UNIFIED IDEOGRAPH
+ {0xB65B, 0x8DCB}, //3263 #CJK UNIFIED IDEOGRAPH
+ {0xB65C, 0x8DDA}, //3264 #CJK UNIFIED IDEOGRAPH
+ {0xB65D, 0x8DD1}, //3265 #CJK UNIFIED IDEOGRAPH
+ {0xB65E, 0x8DCC}, //3266 #CJK UNIFIED IDEOGRAPH
+ {0xB65F, 0x8DDB}, //3267 #CJK UNIFIED IDEOGRAPH
+ {0xB660, 0x8DC6}, //3268 #CJK UNIFIED IDEOGRAPH
+ {0xB661, 0x8EFB}, //3269 #CJK UNIFIED IDEOGRAPH
+ {0xB662, 0x8EF8}, //3270 #CJK UNIFIED IDEOGRAPH
+ {0xB663, 0x8EFC}, //3271 #CJK UNIFIED IDEOGRAPH
+ {0xB664, 0x8F9C}, //3272 #CJK UNIFIED IDEOGRAPH
+ {0xB665, 0x902E}, //3273 #CJK UNIFIED IDEOGRAPH
+ {0xB666, 0x9035}, //3274 #CJK UNIFIED IDEOGRAPH
+ {0xB667, 0x9031}, //3275 #CJK UNIFIED IDEOGRAPH
+ {0xB668, 0x9038}, //3276 #CJK UNIFIED IDEOGRAPH
+ {0xB669, 0x9032}, //3277 #CJK UNIFIED IDEOGRAPH
+ {0xB66A, 0x9036}, //3278 #CJK UNIFIED IDEOGRAPH
+ {0xB66B, 0x9102}, //3279 #CJK UNIFIED IDEOGRAPH
+ {0xB66C, 0x90F5}, //3280 #CJK UNIFIED IDEOGRAPH
+ {0xB66D, 0x9109}, //3281 #CJK UNIFIED IDEOGRAPH
+ {0xB66E, 0x90FE}, //3282 #CJK UNIFIED IDEOGRAPH
+ {0xB66F, 0x9163}, //3283 #CJK UNIFIED IDEOGRAPH
+ {0xB670, 0x9165}, //3284 #CJK UNIFIED IDEOGRAPH
+ {0xB671, 0x91CF}, //3285 #CJK UNIFIED IDEOGRAPH
+ {0xB672, 0x9214}, //3286 #CJK UNIFIED IDEOGRAPH
+ {0xB673, 0x9215}, //3287 #CJK UNIFIED IDEOGRAPH
+ {0xB674, 0x9223}, //3288 #CJK UNIFIED IDEOGRAPH
+ {0xB675, 0x9209}, //3289 #CJK UNIFIED IDEOGRAPH
+ {0xB676, 0x921E}, //3290 #CJK UNIFIED IDEOGRAPH
+ {0xB677, 0x920D}, //3291 #CJK UNIFIED IDEOGRAPH
+ {0xB678, 0x9210}, //3292 #CJK UNIFIED IDEOGRAPH
+ {0xB679, 0x9207}, //3293 #CJK UNIFIED IDEOGRAPH
+ {0xB67A, 0x9211}, //3294 #CJK UNIFIED IDEOGRAPH
+ {0xB67B, 0x9594}, //3295 #CJK UNIFIED IDEOGRAPH
+ {0xB67C, 0x958F}, //3296 #CJK UNIFIED IDEOGRAPH
+ {0xB67D, 0x958B}, //3297 #CJK UNIFIED IDEOGRAPH
+ {0xB67E, 0x9591}, //3298 #CJK UNIFIED IDEOGRAPH
+ {0xB6A1, 0x9593}, //3299 #CJK UNIFIED IDEOGRAPH
+ {0xB6A2, 0x9592}, //3300 #CJK UNIFIED IDEOGRAPH
+ {0xB6A3, 0x958E}, //3301 #CJK UNIFIED IDEOGRAPH
+ {0xB6A4, 0x968A}, //3302 #CJK UNIFIED IDEOGRAPH
+ {0xB6A5, 0x968E}, //3303 #CJK UNIFIED IDEOGRAPH
+ {0xB6A6, 0x968B}, //3304 #CJK UNIFIED IDEOGRAPH
+ {0xB6A7, 0x967D}, //3305 #CJK UNIFIED IDEOGRAPH
+ {0xB6A8, 0x9685}, //3306 #CJK UNIFIED IDEOGRAPH
+ {0xB6A9, 0x9686}, //3307 #CJK UNIFIED IDEOGRAPH
+ {0xB6AA, 0x968D}, //3308 #CJK UNIFIED IDEOGRAPH
+ {0xB6AB, 0x9672}, //3309 #CJK UNIFIED IDEOGRAPH
+ {0xB6AC, 0x9684}, //3310 #CJK UNIFIED IDEOGRAPH
+ {0xB6AD, 0x96C1}, //3311 #CJK UNIFIED IDEOGRAPH
+ {0xB6AE, 0x96C5}, //3312 #CJK UNIFIED IDEOGRAPH
+ {0xB6AF, 0x96C4}, //3313 #CJK UNIFIED IDEOGRAPH
+ {0xB6B0, 0x96C6}, //3314 #CJK UNIFIED IDEOGRAPH
+ {0xB6B1, 0x96C7}, //3315 #CJK UNIFIED IDEOGRAPH
+ {0xB6B2, 0x96EF}, //3316 #CJK UNIFIED IDEOGRAPH
+ {0xB6B3, 0x96F2}, //3317 #CJK UNIFIED IDEOGRAPH
+ {0xB6B4, 0x97CC}, //3318 #CJK UNIFIED IDEOGRAPH
+ {0xB6B5, 0x9805}, //3319 #CJK UNIFIED IDEOGRAPH
+ {0xB6B6, 0x9806}, //3320 #CJK UNIFIED IDEOGRAPH
+ {0xB6B7, 0x9808}, //3321 #CJK UNIFIED IDEOGRAPH
+ {0xB6B8, 0x98E7}, //3322 #CJK UNIFIED IDEOGRAPH
+ {0xB6B9, 0x98EA}, //3323 #CJK UNIFIED IDEOGRAPH
+ {0xB6BA, 0x98EF}, //3324 #CJK UNIFIED IDEOGRAPH
+ {0xB6BB, 0x98E9}, //3325 #CJK UNIFIED IDEOGRAPH
+ {0xB6BC, 0x98F2}, //3326 #CJK UNIFIED IDEOGRAPH
+ {0xB6BD, 0x98ED}, //3327 #CJK UNIFIED IDEOGRAPH
+ {0xB6BE, 0x99AE}, //3328 #CJK UNIFIED IDEOGRAPH
+ {0xB6BF, 0x99AD}, //3329 #CJK UNIFIED IDEOGRAPH
+ {0xB6C0, 0x9EC3}, //3330 #CJK UNIFIED IDEOGRAPH
+ {0xB6C1, 0x9ECD}, //3331 #CJK UNIFIED IDEOGRAPH
+ {0xB6C2, 0x9ED1}, //3332 #CJK UNIFIED IDEOGRAPH
+ {0xB6C3, 0x4E82}, //3333 #CJK UNIFIED IDEOGRAPH
+ {0xB6C4, 0x50AD}, //3334 #CJK UNIFIED IDEOGRAPH
+ {0xB6C5, 0x50B5}, //3335 #CJK UNIFIED IDEOGRAPH
+ {0xB6C6, 0x50B2}, //3336 #CJK UNIFIED IDEOGRAPH
+ {0xB6C7, 0x50B3}, //3337 #CJK UNIFIED IDEOGRAPH
+ {0xB6C8, 0x50C5}, //3338 #CJK UNIFIED IDEOGRAPH
+ {0xB6C9, 0x50BE}, //3339 #CJK UNIFIED IDEOGRAPH
+ {0xB6CA, 0x50AC}, //3340 #CJK UNIFIED IDEOGRAPH
+ {0xB6CB, 0x50B7}, //3341 #CJK UNIFIED IDEOGRAPH
+ {0xB6CC, 0x50BB}, //3342 #CJK UNIFIED IDEOGRAPH
+ {0xB6CD, 0x50AF}, //3343 #CJK UNIFIED IDEOGRAPH
+ {0xB6CE, 0x50C7}, //3344 #CJK UNIFIED IDEOGRAPH
+ {0xB6CF, 0x527F}, //3345 #CJK UNIFIED IDEOGRAPH
+ {0xB6D0, 0x5277}, //3346 #CJK UNIFIED IDEOGRAPH
+ {0xB6D1, 0x527D}, //3347 #CJK UNIFIED IDEOGRAPH
+ {0xB6D2, 0x52DF}, //3348 #CJK UNIFIED IDEOGRAPH
+ {0xB6D3, 0x52E6}, //3349 #CJK UNIFIED IDEOGRAPH
+ {0xB6D4, 0x52E4}, //3350 #CJK UNIFIED IDEOGRAPH
+ {0xB6D5, 0x52E2}, //3351 #CJK UNIFIED IDEOGRAPH
+ {0xB6D6, 0x52E3}, //3352 #CJK UNIFIED IDEOGRAPH
+ {0xB6D7, 0x532F}, //3353 #CJK UNIFIED IDEOGRAPH
+ {0xB6D8, 0x55DF}, //3354 #CJK UNIFIED IDEOGRAPH
+ {0xB6D9, 0x55E8}, //3355 #CJK UNIFIED IDEOGRAPH
+ {0xB6DA, 0x55D3}, //3356 #CJK UNIFIED IDEOGRAPH
+ {0xB6DB, 0x55E6}, //3357 #CJK UNIFIED IDEOGRAPH
+ {0xB6DC, 0x55CE}, //3358 #CJK UNIFIED IDEOGRAPH
+ {0xB6DD, 0x55DC}, //3359 #CJK UNIFIED IDEOGRAPH
+ {0xB6DE, 0x55C7}, //3360 #CJK UNIFIED IDEOGRAPH
+ {0xB6DF, 0x55D1}, //3361 #CJK UNIFIED IDEOGRAPH
+ {0xB6E0, 0x55E3}, //3362 #CJK UNIFIED IDEOGRAPH
+ {0xB6E1, 0x55E4}, //3363 #CJK UNIFIED IDEOGRAPH
+ {0xB6E2, 0x55EF}, //3364 #CJK UNIFIED IDEOGRAPH
+ {0xB6E3, 0x55DA}, //3365 #CJK UNIFIED IDEOGRAPH
+ {0xB6E4, 0x55E1}, //3366 #CJK UNIFIED IDEOGRAPH
+ {0xB6E5, 0x55C5}, //3367 #CJK UNIFIED IDEOGRAPH
+ {0xB6E6, 0x55C6}, //3368 #CJK UNIFIED IDEOGRAPH
+ {0xB6E7, 0x55E5}, //3369 #CJK UNIFIED IDEOGRAPH
+ {0xB6E8, 0x55C9}, //3370 #CJK UNIFIED IDEOGRAPH
+ {0xB6E9, 0x5712}, //3371 #CJK UNIFIED IDEOGRAPH
+ {0xB6EA, 0x5713}, //3372 #CJK UNIFIED IDEOGRAPH
+ {0xB6EB, 0x585E}, //3373 #CJK UNIFIED IDEOGRAPH
+ {0xB6EC, 0x5851}, //3374 #CJK UNIFIED IDEOGRAPH
+ {0xB6ED, 0x5858}, //3375 #CJK UNIFIED IDEOGRAPH
+ {0xB6EE, 0x5857}, //3376 #CJK UNIFIED IDEOGRAPH
+ {0xB6EF, 0x585A}, //3377 #CJK UNIFIED IDEOGRAPH
+ {0xB6F0, 0x5854}, //3378 #CJK UNIFIED IDEOGRAPH
+ {0xB6F1, 0x586B}, //3379 #CJK UNIFIED IDEOGRAPH
+ {0xB6F2, 0x584C}, //3380 #CJK UNIFIED IDEOGRAPH
+ {0xB6F3, 0x586D}, //3381 #CJK UNIFIED IDEOGRAPH
+ {0xB6F4, 0x584A}, //3382 #CJK UNIFIED IDEOGRAPH
+ {0xB6F5, 0x5862}, //3383 #CJK UNIFIED IDEOGRAPH
+ {0xB6F6, 0x5852}, //3384 #CJK UNIFIED IDEOGRAPH
+ {0xB6F7, 0x584B}, //3385 #CJK UNIFIED IDEOGRAPH
+ {0xB6F8, 0x5967}, //3386 #CJK UNIFIED IDEOGRAPH
+ {0xB6F9, 0x5AC1}, //3387 #CJK UNIFIED IDEOGRAPH
+ {0xB6FA, 0x5AC9}, //3388 #CJK UNIFIED IDEOGRAPH
+ {0xB6FB, 0x5ACC}, //3389 #CJK UNIFIED IDEOGRAPH
+ {0xB6FC, 0x5ABE}, //3390 #CJK UNIFIED IDEOGRAPH
+ {0xB6FD, 0x5ABD}, //3391 #CJK UNIFIED IDEOGRAPH
+ {0xB6FE, 0x5ABC}, //3392 #CJK UNIFIED IDEOGRAPH
+ {0xB740, 0x5AB3}, //3393 #CJK UNIFIED IDEOGRAPH
+ {0xB741, 0x5AC2}, //3394 #CJK UNIFIED IDEOGRAPH
+ {0xB742, 0x5AB2}, //3395 #CJK UNIFIED IDEOGRAPH
+ {0xB743, 0x5D69}, //3396 #CJK UNIFIED IDEOGRAPH
+ {0xB744, 0x5D6F}, //3397 #CJK UNIFIED IDEOGRAPH
+ {0xB745, 0x5E4C}, //3398 #CJK UNIFIED IDEOGRAPH
+ {0xB746, 0x5E79}, //3399 #CJK UNIFIED IDEOGRAPH
+ {0xB747, 0x5EC9}, //3400 #CJK UNIFIED IDEOGRAPH
+ {0xB748, 0x5EC8}, //3401 #CJK UNIFIED IDEOGRAPH
+ {0xB749, 0x5F12}, //3402 #CJK UNIFIED IDEOGRAPH
+ {0xB74A, 0x5F59}, //3403 #CJK UNIFIED IDEOGRAPH
+ {0xB74B, 0x5FAC}, //3404 #CJK UNIFIED IDEOGRAPH
+ {0xB74C, 0x5FAE}, //3405 #CJK UNIFIED IDEOGRAPH
+ {0xB74D, 0x611A}, //3406 #CJK UNIFIED IDEOGRAPH
+ {0xB74E, 0x610F}, //3407 #CJK UNIFIED IDEOGRAPH
+ {0xB74F, 0x6148}, //3408 #CJK UNIFIED IDEOGRAPH
+ {0xB750, 0x611F}, //3409 #CJK UNIFIED IDEOGRAPH
+ {0xB751, 0x60F3}, //3410 #CJK UNIFIED IDEOGRAPH
+ {0xB752, 0x611B}, //3411 #CJK UNIFIED IDEOGRAPH
+ {0xB753, 0x60F9}, //3412 #CJK UNIFIED IDEOGRAPH
+ {0xB754, 0x6101}, //3413 #CJK UNIFIED IDEOGRAPH
+ {0xB755, 0x6108}, //3414 #CJK UNIFIED IDEOGRAPH
+ {0xB756, 0x614E}, //3415 #CJK UNIFIED IDEOGRAPH
+ {0xB757, 0x614C}, //3416 #CJK UNIFIED IDEOGRAPH
+ {0xB758, 0x6144}, //3417 #CJK UNIFIED IDEOGRAPH
+ {0xB759, 0x614D}, //3418 #CJK UNIFIED IDEOGRAPH
+ {0xB75A, 0x613E}, //3419 #CJK UNIFIED IDEOGRAPH
+ {0xB75B, 0x6134}, //3420 #CJK UNIFIED IDEOGRAPH
+ {0xB75C, 0x6127}, //3421 #CJK UNIFIED IDEOGRAPH
+ {0xB75D, 0x610D}, //3422 #CJK UNIFIED IDEOGRAPH
+ {0xB75E, 0x6106}, //3423 #CJK UNIFIED IDEOGRAPH
+ {0xB75F, 0x6137}, //3424 #CJK UNIFIED IDEOGRAPH
+ {0xB760, 0x6221}, //3425 #CJK UNIFIED IDEOGRAPH
+ {0xB761, 0x6222}, //3426 #CJK UNIFIED IDEOGRAPH
+ {0xB762, 0x6413}, //3427 #CJK UNIFIED IDEOGRAPH
+ {0xB763, 0x643E}, //3428 #CJK UNIFIED IDEOGRAPH
+ {0xB764, 0x641E}, //3429 #CJK UNIFIED IDEOGRAPH
+ {0xB765, 0x642A}, //3430 #CJK UNIFIED IDEOGRAPH
+ {0xB766, 0x642D}, //3431 #CJK UNIFIED IDEOGRAPH
+ {0xB767, 0x643D}, //3432 #CJK UNIFIED IDEOGRAPH
+ {0xB768, 0x642C}, //3433 #CJK UNIFIED IDEOGRAPH
+ {0xB769, 0x640F}, //3434 #CJK UNIFIED IDEOGRAPH
+ {0xB76A, 0x641C}, //3435 #CJK UNIFIED IDEOGRAPH
+ {0xB76B, 0x6414}, //3436 #CJK UNIFIED IDEOGRAPH
+ {0xB76C, 0x640D}, //3437 #CJK UNIFIED IDEOGRAPH
+ {0xB76D, 0x6436}, //3438 #CJK UNIFIED IDEOGRAPH
+ {0xB76E, 0x6416}, //3439 #CJK UNIFIED IDEOGRAPH
+ {0xB76F, 0x6417}, //3440 #CJK UNIFIED IDEOGRAPH
+ {0xB770, 0x6406}, //3441 #CJK UNIFIED IDEOGRAPH
+ {0xB771, 0x656C}, //3442 #CJK UNIFIED IDEOGRAPH
+ {0xB772, 0x659F}, //3443 #CJK UNIFIED IDEOGRAPH
+ {0xB773, 0x65B0}, //3444 #CJK UNIFIED IDEOGRAPH
+ {0xB774, 0x6697}, //3445 #CJK UNIFIED IDEOGRAPH
+ {0xB775, 0x6689}, //3446 #CJK UNIFIED IDEOGRAPH
+ {0xB776, 0x6687}, //3447 #CJK UNIFIED IDEOGRAPH
+ {0xB777, 0x6688}, //3448 #CJK UNIFIED IDEOGRAPH
+ {0xB778, 0x6696}, //3449 #CJK UNIFIED IDEOGRAPH
+ {0xB779, 0x6684}, //3450 #CJK UNIFIED IDEOGRAPH
+ {0xB77A, 0x6698}, //3451 #CJK UNIFIED IDEOGRAPH
+ {0xB77B, 0x668D}, //3452 #CJK UNIFIED IDEOGRAPH
+ {0xB77C, 0x6703}, //3453 #CJK UNIFIED IDEOGRAPH
+ {0xB77D, 0x6994}, //3454 #CJK UNIFIED IDEOGRAPH
+ {0xB77E, 0x696D}, //3455 #CJK UNIFIED IDEOGRAPH
+ {0xB7A1, 0x695A}, //3456 #CJK UNIFIED IDEOGRAPH
+ {0xB7A2, 0x6977}, //3457 #CJK UNIFIED IDEOGRAPH
+ {0xB7A3, 0x6960}, //3458 #CJK UNIFIED IDEOGRAPH
+ {0xB7A4, 0x6954}, //3459 #CJK UNIFIED IDEOGRAPH
+ {0xB7A5, 0x6975}, //3460 #CJK UNIFIED IDEOGRAPH
+ {0xB7A6, 0x6930}, //3461 #CJK UNIFIED IDEOGRAPH
+ {0xB7A7, 0x6982}, //3462 #CJK UNIFIED IDEOGRAPH
+ {0xB7A8, 0x694A}, //3463 #CJK UNIFIED IDEOGRAPH
+ {0xB7A9, 0x6968}, //3464 #CJK UNIFIED IDEOGRAPH
+ {0xB7AA, 0x696B}, //3465 #CJK UNIFIED IDEOGRAPH
+ {0xB7AB, 0x695E}, //3466 #CJK UNIFIED IDEOGRAPH
+ {0xB7AC, 0x6953}, //3467 #CJK UNIFIED IDEOGRAPH
+ {0xB7AD, 0x6979}, //3468 #CJK UNIFIED IDEOGRAPH
+ {0xB7AE, 0x6986}, //3469 #CJK UNIFIED IDEOGRAPH
+ {0xB7AF, 0x695D}, //3470 #CJK UNIFIED IDEOGRAPH
+ {0xB7B0, 0x6963}, //3471 #CJK UNIFIED IDEOGRAPH
+ {0xB7B1, 0x695B}, //3472 #CJK UNIFIED IDEOGRAPH
+ {0xB7B2, 0x6B47}, //3473 #CJK UNIFIED IDEOGRAPH
+ {0xB7B3, 0x6B72}, //3474 #CJK UNIFIED IDEOGRAPH
+ {0xB7B4, 0x6BC0}, //3475 #CJK UNIFIED IDEOGRAPH
+ {0xB7B5, 0x6BBF}, //3476 #CJK UNIFIED IDEOGRAPH
+ {0xB7B6, 0x6BD3}, //3477 #CJK UNIFIED IDEOGRAPH
+ {0xB7B7, 0x6BFD}, //3478 #CJK UNIFIED IDEOGRAPH
+ {0xB7B8, 0x6EA2}, //3479 #CJK UNIFIED IDEOGRAPH
+ {0xB7B9, 0x6EAF}, //3480 #CJK UNIFIED IDEOGRAPH
+ {0xB7BA, 0x6ED3}, //3481 #CJK UNIFIED IDEOGRAPH
+ {0xB7BB, 0x6EB6}, //3482 #CJK UNIFIED IDEOGRAPH
+ {0xB7BC, 0x6EC2}, //3483 #CJK UNIFIED IDEOGRAPH
+ {0xB7BD, 0x6E90}, //3484 #CJK UNIFIED IDEOGRAPH
+ {0xB7BE, 0x6E9D}, //3485 #CJK UNIFIED IDEOGRAPH
+ {0xB7BF, 0x6EC7}, //3486 #CJK UNIFIED IDEOGRAPH
+ {0xB7C0, 0x6EC5}, //3487 #CJK UNIFIED IDEOGRAPH
+ {0xB7C1, 0x6EA5}, //3488 #CJK UNIFIED IDEOGRAPH
+ {0xB7C2, 0x6E98}, //3489 #CJK UNIFIED IDEOGRAPH
+ {0xB7C3, 0x6EBC}, //3490 #CJK UNIFIED IDEOGRAPH
+ {0xB7C4, 0x6EBA}, //3491 #CJK UNIFIED IDEOGRAPH
+ {0xB7C5, 0x6EAB}, //3492 #CJK UNIFIED IDEOGRAPH
+ {0xB7C6, 0x6ED1}, //3493 #CJK UNIFIED IDEOGRAPH
+ {0xB7C7, 0x6E96}, //3494 #CJK UNIFIED IDEOGRAPH
+ {0xB7C8, 0x6E9C}, //3495 #CJK UNIFIED IDEOGRAPH
+ {0xB7C9, 0x6EC4}, //3496 #CJK UNIFIED IDEOGRAPH
+ {0xB7CA, 0x6ED4}, //3497 #CJK UNIFIED IDEOGRAPH
+ {0xB7CB, 0x6EAA}, //3498 #CJK UNIFIED IDEOGRAPH
+ {0xB7CC, 0x6EA7}, //3499 #CJK UNIFIED IDEOGRAPH
+ {0xB7CD, 0x6EB4}, //3500 #CJK UNIFIED IDEOGRAPH
+ {0xB7CE, 0x714E}, //3501 #CJK UNIFIED IDEOGRAPH
+ {0xB7CF, 0x7159}, //3502 #CJK UNIFIED IDEOGRAPH
+ {0xB7D0, 0x7169}, //3503 #CJK UNIFIED IDEOGRAPH
+ {0xB7D1, 0x7164}, //3504 #CJK UNIFIED IDEOGRAPH
+ {0xB7D2, 0x7149}, //3505 #CJK UNIFIED IDEOGRAPH
+ {0xB7D3, 0x7167}, //3506 #CJK UNIFIED IDEOGRAPH
+ {0xB7D4, 0x715C}, //3507 #CJK UNIFIED IDEOGRAPH
+ {0xB7D5, 0x716C}, //3508 #CJK UNIFIED IDEOGRAPH
+ {0xB7D6, 0x7166}, //3509 #CJK UNIFIED IDEOGRAPH
+ {0xB7D7, 0x714C}, //3510 #CJK UNIFIED IDEOGRAPH
+ {0xB7D8, 0x7165}, //3511 #CJK UNIFIED IDEOGRAPH
+ {0xB7D9, 0x715E}, //3512 #CJK UNIFIED IDEOGRAPH
+ {0xB7DA, 0x7146}, //3513 #CJK UNIFIED IDEOGRAPH
+ {0xB7DB, 0x7168}, //3514 #CJK UNIFIED IDEOGRAPH
+ {0xB7DC, 0x7156}, //3515 #CJK UNIFIED IDEOGRAPH
+ {0xB7DD, 0x723A}, //3516 #CJK UNIFIED IDEOGRAPH
+ {0xB7DE, 0x7252}, //3517 #CJK UNIFIED IDEOGRAPH
+ {0xB7DF, 0x7337}, //3518 #CJK UNIFIED IDEOGRAPH
+ {0xB7E0, 0x7345}, //3519 #CJK UNIFIED IDEOGRAPH
+ {0xB7E1, 0x733F}, //3520 #CJK UNIFIED IDEOGRAPH
+ {0xB7E2, 0x733E}, //3521 #CJK UNIFIED IDEOGRAPH
+ {0xB7E3, 0x746F}, //3522 #CJK UNIFIED IDEOGRAPH
+ {0xB7E4, 0x745A}, //3523 #CJK UNIFIED IDEOGRAPH
+ {0xB7E5, 0x7455}, //3524 #CJK UNIFIED IDEOGRAPH
+ {0xB7E6, 0x745F}, //3525 #CJK UNIFIED IDEOGRAPH
+ {0xB7E7, 0x745E}, //3526 #CJK UNIFIED IDEOGRAPH
+ {0xB7E8, 0x7441}, //3527 #CJK UNIFIED IDEOGRAPH
+ {0xB7E9, 0x743F}, //3528 #CJK UNIFIED IDEOGRAPH
+ {0xB7EA, 0x7459}, //3529 #CJK UNIFIED IDEOGRAPH
+ {0xB7EB, 0x745B}, //3530 #CJK UNIFIED IDEOGRAPH
+ {0xB7EC, 0x745C}, //3531 #CJK UNIFIED IDEOGRAPH
+ {0xB7ED, 0x7576}, //3532 #CJK UNIFIED IDEOGRAPH
+ {0xB7EE, 0x7578}, //3533 #CJK UNIFIED IDEOGRAPH
+ {0xB7EF, 0x7600}, //3534 #CJK UNIFIED IDEOGRAPH
+ {0xB7F0, 0x75F0}, //3535 #CJK UNIFIED IDEOGRAPH
+ {0xB7F1, 0x7601}, //3536 #CJK UNIFIED IDEOGRAPH
+ {0xB7F2, 0x75F2}, //3537 #CJK UNIFIED IDEOGRAPH
+ {0xB7F3, 0x75F1}, //3538 #CJK UNIFIED IDEOGRAPH
+ {0xB7F4, 0x75FA}, //3539 #CJK UNIFIED IDEOGRAPH
+ {0xB7F5, 0x75FF}, //3540 #CJK UNIFIED IDEOGRAPH
+ {0xB7F6, 0x75F4}, //3541 #CJK UNIFIED IDEOGRAPH
+ {0xB7F7, 0x75F3}, //3542 #CJK UNIFIED IDEOGRAPH
+ {0xB7F8, 0x76DE}, //3543 #CJK UNIFIED IDEOGRAPH
+ {0xB7F9, 0x76DF}, //3544 #CJK UNIFIED IDEOGRAPH
+ {0xB7FA, 0x775B}, //3545 #CJK UNIFIED IDEOGRAPH
+ {0xB7FB, 0x776B}, //3546 #CJK UNIFIED IDEOGRAPH
+ {0xB7FC, 0x7766}, //3547 #CJK UNIFIED IDEOGRAPH
+ {0xB7FD, 0x775E}, //3548 #CJK UNIFIED IDEOGRAPH
+ {0xB7FE, 0x7763}, //3549 #CJK UNIFIED IDEOGRAPH
+ {0xB840, 0x7779}, //3550 #CJK UNIFIED IDEOGRAPH
+ {0xB841, 0x776A}, //3551 #CJK UNIFIED IDEOGRAPH
+ {0xB842, 0x776C}, //3552 #CJK UNIFIED IDEOGRAPH
+ {0xB843, 0x775C}, //3553 #CJK UNIFIED IDEOGRAPH
+ {0xB844, 0x7765}, //3554 #CJK UNIFIED IDEOGRAPH
+ {0xB845, 0x7768}, //3555 #CJK UNIFIED IDEOGRAPH
+ {0xB846, 0x7762}, //3556 #CJK UNIFIED IDEOGRAPH
+ {0xB847, 0x77EE}, //3557 #CJK UNIFIED IDEOGRAPH
+ {0xB848, 0x788E}, //3558 #CJK UNIFIED IDEOGRAPH
+ {0xB849, 0x78B0}, //3559 #CJK UNIFIED IDEOGRAPH
+ {0xB84A, 0x7897}, //3560 #CJK UNIFIED IDEOGRAPH
+ {0xB84B, 0x7898}, //3561 #CJK UNIFIED IDEOGRAPH
+ {0xB84C, 0x788C}, //3562 #CJK UNIFIED IDEOGRAPH
+ {0xB84D, 0x7889}, //3563 #CJK UNIFIED IDEOGRAPH
+ {0xB84E, 0x787C}, //3564 #CJK UNIFIED IDEOGRAPH
+ {0xB84F, 0x7891}, //3565 #CJK UNIFIED IDEOGRAPH
+ {0xB850, 0x7893}, //3566 #CJK UNIFIED IDEOGRAPH
+ {0xB851, 0x787F}, //3567 #CJK UNIFIED IDEOGRAPH
+ {0xB852, 0x797A}, //3568 #CJK UNIFIED IDEOGRAPH
+ {0xB853, 0x797F}, //3569 #CJK UNIFIED IDEOGRAPH
+ {0xB854, 0x7981}, //3570 #CJK UNIFIED IDEOGRAPH
+ {0xB855, 0x842C}, //3571 #CJK UNIFIED IDEOGRAPH
+ {0xB856, 0x79BD}, //3572 #CJK UNIFIED IDEOGRAPH
+ {0xB857, 0x7A1C}, //3573 #CJK UNIFIED IDEOGRAPH
+ {0xB858, 0x7A1A}, //3574 #CJK UNIFIED IDEOGRAPH
+ {0xB859, 0x7A20}, //3575 #CJK UNIFIED IDEOGRAPH
+ {0xB85A, 0x7A14}, //3576 #CJK UNIFIED IDEOGRAPH
+ {0xB85B, 0x7A1F}, //3577 #CJK UNIFIED IDEOGRAPH
+ {0xB85C, 0x7A1E}, //3578 #CJK UNIFIED IDEOGRAPH
+ {0xB85D, 0x7A9F}, //3579 #CJK UNIFIED IDEOGRAPH
+ {0xB85E, 0x7AA0}, //3580 #CJK UNIFIED IDEOGRAPH
+ {0xB85F, 0x7B77}, //3581 #CJK UNIFIED IDEOGRAPH
+ {0xB860, 0x7BC0}, //3582 #CJK UNIFIED IDEOGRAPH
+ {0xB861, 0x7B60}, //3583 #CJK UNIFIED IDEOGRAPH
+ {0xB862, 0x7B6E}, //3584 #CJK UNIFIED IDEOGRAPH
+ {0xB863, 0x7B67}, //3585 #CJK UNIFIED IDEOGRAPH
+ {0xB864, 0x7CB1}, //3586 #CJK UNIFIED IDEOGRAPH
+ {0xB865, 0x7CB3}, //3587 #CJK UNIFIED IDEOGRAPH
+ {0xB866, 0x7CB5}, //3588 #CJK UNIFIED IDEOGRAPH
+ {0xB867, 0x7D93}, //3589 #CJK UNIFIED IDEOGRAPH
+ {0xB868, 0x7D79}, //3590 #CJK UNIFIED IDEOGRAPH
+ {0xB869, 0x7D91}, //3591 #CJK UNIFIED IDEOGRAPH
+ {0xB86A, 0x7D81}, //3592 #CJK UNIFIED IDEOGRAPH
+ {0xB86B, 0x7D8F}, //3593 #CJK UNIFIED IDEOGRAPH
+ {0xB86C, 0x7D5B}, //3594 #CJK UNIFIED IDEOGRAPH
+ {0xB86D, 0x7F6E}, //3595 #CJK UNIFIED IDEOGRAPH
+ {0xB86E, 0x7F69}, //3596 #CJK UNIFIED IDEOGRAPH
+ {0xB86F, 0x7F6A}, //3597 #CJK UNIFIED IDEOGRAPH
+ {0xB870, 0x7F72}, //3598 #CJK UNIFIED IDEOGRAPH
+ {0xB871, 0x7FA9}, //3599 #CJK UNIFIED IDEOGRAPH
+ {0xB872, 0x7FA8}, //3600 #CJK UNIFIED IDEOGRAPH
+ {0xB873, 0x7FA4}, //3601 #CJK UNIFIED IDEOGRAPH
+ {0xB874, 0x8056}, //3602 #CJK UNIFIED IDEOGRAPH
+ {0xB875, 0x8058}, //3603 #CJK UNIFIED IDEOGRAPH
+ {0xB876, 0x8086}, //3604 #CJK UNIFIED IDEOGRAPH
+ {0xB877, 0x8084}, //3605 #CJK UNIFIED IDEOGRAPH
+ {0xB878, 0x8171}, //3606 #CJK UNIFIED IDEOGRAPH
+ {0xB879, 0x8170}, //3607 #CJK UNIFIED IDEOGRAPH
+ {0xB87A, 0x8178}, //3608 #CJK UNIFIED IDEOGRAPH
+ {0xB87B, 0x8165}, //3609 #CJK UNIFIED IDEOGRAPH
+ {0xB87C, 0x816E}, //3610 #CJK UNIFIED IDEOGRAPH
+ {0xB87D, 0x8173}, //3611 #CJK UNIFIED IDEOGRAPH
+ {0xB87E, 0x816B}, //3612 #CJK UNIFIED IDEOGRAPH
+ {0xB8A1, 0x8179}, //3613 #CJK UNIFIED IDEOGRAPH
+ {0xB8A2, 0x817A}, //3614 #CJK UNIFIED IDEOGRAPH
+ {0xB8A3, 0x8166}, //3615 #CJK UNIFIED IDEOGRAPH
+ {0xB8A4, 0x8205}, //3616 #CJK UNIFIED IDEOGRAPH
+ {0xB8A5, 0x8247}, //3617 #CJK UNIFIED IDEOGRAPH
+ {0xB8A6, 0x8482}, //3618 #CJK UNIFIED IDEOGRAPH
+ {0xB8A7, 0x8477}, //3619 #CJK UNIFIED IDEOGRAPH
+ {0xB8A8, 0x843D}, //3620 #CJK UNIFIED IDEOGRAPH
+ {0xB8A9, 0x8431}, //3621 #CJK UNIFIED IDEOGRAPH
+ {0xB8AA, 0x8475}, //3622 #CJK UNIFIED IDEOGRAPH
+ {0xB8AB, 0x8466}, //3623 #CJK UNIFIED IDEOGRAPH
+ {0xB8AC, 0x846B}, //3624 #CJK UNIFIED IDEOGRAPH
+ {0xB8AD, 0x8449}, //3625 #CJK UNIFIED IDEOGRAPH
+ {0xB8AE, 0x846C}, //3626 #CJK UNIFIED IDEOGRAPH
+ {0xB8AF, 0x845B}, //3627 #CJK UNIFIED IDEOGRAPH
+ {0xB8B0, 0x843C}, //3628 #CJK UNIFIED IDEOGRAPH
+ {0xB8B1, 0x8435}, //3629 #CJK UNIFIED IDEOGRAPH
+ {0xB8B2, 0x8461}, //3630 #CJK UNIFIED IDEOGRAPH
+ {0xB8B3, 0x8463}, //3631 #CJK UNIFIED IDEOGRAPH
+ {0xB8B4, 0x8469}, //3632 #CJK UNIFIED IDEOGRAPH
+ {0xB8B5, 0x846D}, //3633 #CJK UNIFIED IDEOGRAPH
+ {0xB8B6, 0x8446}, //3634 #CJK UNIFIED IDEOGRAPH
+ {0xB8B7, 0x865E}, //3635 #CJK UNIFIED IDEOGRAPH
+ {0xB8B8, 0x865C}, //3636 #CJK UNIFIED IDEOGRAPH
+ {0xB8B9, 0x865F}, //3637 #CJK UNIFIED IDEOGRAPH
+ {0xB8BA, 0x86F9}, //3638 #CJK UNIFIED IDEOGRAPH
+ {0xB8BB, 0x8713}, //3639 #CJK UNIFIED IDEOGRAPH
+ {0xB8BC, 0x8708}, //3640 #CJK UNIFIED IDEOGRAPH
+ {0xB8BD, 0x8707}, //3641 #CJK UNIFIED IDEOGRAPH
+ {0xB8BE, 0x8700}, //3642 #CJK UNIFIED IDEOGRAPH
+ {0xB8BF, 0x86FE}, //3643 #CJK UNIFIED IDEOGRAPH
+ {0xB8C0, 0x86FB}, //3644 #CJK UNIFIED IDEOGRAPH
+ {0xB8C1, 0x8702}, //3645 #CJK UNIFIED IDEOGRAPH
+ {0xB8C2, 0x8703}, //3646 #CJK UNIFIED IDEOGRAPH
+ {0xB8C3, 0x8706}, //3647 #CJK UNIFIED IDEOGRAPH
+ {0xB8C4, 0x870A}, //3648 #CJK UNIFIED IDEOGRAPH
+ {0xB8C5, 0x8859}, //3649 #CJK UNIFIED IDEOGRAPH
+ {0xB8C6, 0x88DF}, //3650 #CJK UNIFIED IDEOGRAPH
+ {0xB8C7, 0x88D4}, //3651 #CJK UNIFIED IDEOGRAPH
+ {0xB8C8, 0x88D9}, //3652 #CJK UNIFIED IDEOGRAPH
+ {0xB8C9, 0x88DC}, //3653 #CJK UNIFIED IDEOGRAPH
+ {0xB8CA, 0x88D8}, //3654 #CJK UNIFIED IDEOGRAPH
+ {0xB8CB, 0x88DD}, //3655 #CJK UNIFIED IDEOGRAPH
+ {0xB8CC, 0x88E1}, //3656 #CJK UNIFIED IDEOGRAPH
+ {0xB8CD, 0x88CA}, //3657 #CJK UNIFIED IDEOGRAPH
+ {0xB8CE, 0x88D5}, //3658 #CJK UNIFIED IDEOGRAPH
+ {0xB8CF, 0x88D2}, //3659 #CJK UNIFIED IDEOGRAPH
+ {0xB8D0, 0x899C}, //3660 #CJK UNIFIED IDEOGRAPH
+ {0xB8D1, 0x89E3}, //3661 #CJK UNIFIED IDEOGRAPH
+ {0xB8D2, 0x8A6B}, //3662 #CJK UNIFIED IDEOGRAPH
+ {0xB8D3, 0x8A72}, //3663 #CJK UNIFIED IDEOGRAPH
+ {0xB8D4, 0x8A73}, //3664 #CJK UNIFIED IDEOGRAPH
+ {0xB8D5, 0x8A66}, //3665 #CJK UNIFIED IDEOGRAPH
+ {0xB8D6, 0x8A69}, //3666 #CJK UNIFIED IDEOGRAPH
+ {0xB8D7, 0x8A70}, //3667 #CJK UNIFIED IDEOGRAPH
+ {0xB8D8, 0x8A87}, //3668 #CJK UNIFIED IDEOGRAPH
+ {0xB8D9, 0x8A7C}, //3669 #CJK UNIFIED IDEOGRAPH
+ {0xB8DA, 0x8A63}, //3670 #CJK UNIFIED IDEOGRAPH
+ {0xB8DB, 0x8AA0}, //3671 #CJK UNIFIED IDEOGRAPH
+ {0xB8DC, 0x8A71}, //3672 #CJK UNIFIED IDEOGRAPH
+ {0xB8DD, 0x8A85}, //3673 #CJK UNIFIED IDEOGRAPH
+ {0xB8DE, 0x8A6D}, //3674 #CJK UNIFIED IDEOGRAPH
+ {0xB8DF, 0x8A62}, //3675 #CJK UNIFIED IDEOGRAPH
+ {0xB8E0, 0x8A6E}, //3676 #CJK UNIFIED IDEOGRAPH
+ {0xB8E1, 0x8A6C}, //3677 #CJK UNIFIED IDEOGRAPH
+ {0xB8E2, 0x8A79}, //3678 #CJK UNIFIED IDEOGRAPH
+ {0xB8E3, 0x8A7B}, //3679 #CJK UNIFIED IDEOGRAPH
+ {0xB8E4, 0x8A3E}, //3680 #CJK UNIFIED IDEOGRAPH
+ {0xB8E5, 0x8A68}, //3681 #CJK UNIFIED IDEOGRAPH
+ {0xB8E6, 0x8C62}, //3682 #CJK UNIFIED IDEOGRAPH
+ {0xB8E7, 0x8C8A}, //3683 #CJK UNIFIED IDEOGRAPH
+ {0xB8E8, 0x8C89}, //3684 #CJK UNIFIED IDEOGRAPH
+ {0xB8E9, 0x8CCA}, //3685 #CJK UNIFIED IDEOGRAPH
+ {0xB8EA, 0x8CC7}, //3686 #CJK UNIFIED IDEOGRAPH
+ {0xB8EB, 0x8CC8}, //3687 #CJK UNIFIED IDEOGRAPH
+ {0xB8EC, 0x8CC4}, //3688 #CJK UNIFIED IDEOGRAPH
+ {0xB8ED, 0x8CB2}, //3689 #CJK UNIFIED IDEOGRAPH
+ {0xB8EE, 0x8CC3}, //3690 #CJK UNIFIED IDEOGRAPH
+ {0xB8EF, 0x8CC2}, //3691 #CJK UNIFIED IDEOGRAPH
+ {0xB8F0, 0x8CC5}, //3692 #CJK UNIFIED IDEOGRAPH
+ {0xB8F1, 0x8DE1}, //3693 #CJK UNIFIED IDEOGRAPH
+ {0xB8F2, 0x8DDF}, //3694 #CJK UNIFIED IDEOGRAPH
+ {0xB8F3, 0x8DE8}, //3695 #CJK UNIFIED IDEOGRAPH
+ {0xB8F4, 0x8DEF}, //3696 #CJK UNIFIED IDEOGRAPH
+ {0xB8F5, 0x8DF3}, //3697 #CJK UNIFIED IDEOGRAPH
+ {0xB8F6, 0x8DFA}, //3698 #CJK UNIFIED IDEOGRAPH
+ {0xB8F7, 0x8DEA}, //3699 #CJK UNIFIED IDEOGRAPH
+ {0xB8F8, 0x8DE4}, //3700 #CJK UNIFIED IDEOGRAPH
+ {0xB8F9, 0x8DE6}, //3701 #CJK UNIFIED IDEOGRAPH
+ {0xB8FA, 0x8EB2}, //3702 #CJK UNIFIED IDEOGRAPH
+ {0xB8FB, 0x8F03}, //3703 #CJK UNIFIED IDEOGRAPH
+ {0xB8FC, 0x8F09}, //3704 #CJK UNIFIED IDEOGRAPH
+ {0xB8FD, 0x8EFE}, //3705 #CJK UNIFIED IDEOGRAPH
+ {0xB8FE, 0x8F0A}, //3706 #CJK UNIFIED IDEOGRAPH
+ {0xB940, 0x8F9F}, //3707 #CJK UNIFIED IDEOGRAPH
+ {0xB941, 0x8FB2}, //3708 #CJK UNIFIED IDEOGRAPH
+ {0xB942, 0x904B}, //3709 #CJK UNIFIED IDEOGRAPH
+ {0xB943, 0x904A}, //3710 #CJK UNIFIED IDEOGRAPH
+ {0xB944, 0x9053}, //3711 #CJK UNIFIED IDEOGRAPH
+ {0xB945, 0x9042}, //3712 #CJK UNIFIED IDEOGRAPH
+ {0xB946, 0x9054}, //3713 #CJK UNIFIED IDEOGRAPH
+ {0xB947, 0x903C}, //3714 #CJK UNIFIED IDEOGRAPH
+ {0xB948, 0x9055}, //3715 #CJK UNIFIED IDEOGRAPH
+ {0xB949, 0x9050}, //3716 #CJK UNIFIED IDEOGRAPH
+ {0xB94A, 0x9047}, //3717 #CJK UNIFIED IDEOGRAPH
+ {0xB94B, 0x904F}, //3718 #CJK UNIFIED IDEOGRAPH
+ {0xB94C, 0x904E}, //3719 #CJK UNIFIED IDEOGRAPH
+ {0xB94D, 0x904D}, //3720 #CJK UNIFIED IDEOGRAPH
+ {0xB94E, 0x9051}, //3721 #CJK UNIFIED IDEOGRAPH
+ {0xB94F, 0x903E}, //3722 #CJK UNIFIED IDEOGRAPH
+ {0xB950, 0x9041}, //3723 #CJK UNIFIED IDEOGRAPH
+ {0xB951, 0x9112}, //3724 #CJK UNIFIED IDEOGRAPH
+ {0xB952, 0x9117}, //3725 #CJK UNIFIED IDEOGRAPH
+ {0xB953, 0x916C}, //3726 #CJK UNIFIED IDEOGRAPH
+ {0xB954, 0x916A}, //3727 #CJK UNIFIED IDEOGRAPH
+ {0xB955, 0x9169}, //3728 #CJK UNIFIED IDEOGRAPH
+ {0xB956, 0x91C9}, //3729 #CJK UNIFIED IDEOGRAPH
+ {0xB957, 0x9237}, //3730 #CJK UNIFIED IDEOGRAPH
+ {0xB958, 0x9257}, //3731 #CJK UNIFIED IDEOGRAPH
+ {0xB959, 0x9238}, //3732 #CJK UNIFIED IDEOGRAPH
+ {0xB95A, 0x923D}, //3733 #CJK UNIFIED IDEOGRAPH
+ {0xB95B, 0x9240}, //3734 #CJK UNIFIED IDEOGRAPH
+ {0xB95C, 0x923E}, //3735 #CJK UNIFIED IDEOGRAPH
+ {0xB95D, 0x925B}, //3736 #CJK UNIFIED IDEOGRAPH
+ {0xB95E, 0x924B}, //3737 #CJK UNIFIED IDEOGRAPH
+ {0xB95F, 0x9264}, //3738 #CJK UNIFIED IDEOGRAPH
+ {0xB960, 0x9251}, //3739 #CJK UNIFIED IDEOGRAPH
+ {0xB961, 0x9234}, //3740 #CJK UNIFIED IDEOGRAPH
+ {0xB962, 0x9249}, //3741 #CJK UNIFIED IDEOGRAPH
+ {0xB963, 0x924D}, //3742 #CJK UNIFIED IDEOGRAPH
+ {0xB964, 0x9245}, //3743 #CJK UNIFIED IDEOGRAPH
+ {0xB965, 0x9239}, //3744 #CJK UNIFIED IDEOGRAPH
+ {0xB966, 0x923F}, //3745 #CJK UNIFIED IDEOGRAPH
+ {0xB967, 0x925A}, //3746 #CJK UNIFIED IDEOGRAPH
+ {0xB968, 0x9598}, //3747 #CJK UNIFIED IDEOGRAPH
+ {0xB969, 0x9698}, //3748 #CJK UNIFIED IDEOGRAPH
+ {0xB96A, 0x9694}, //3749 #CJK UNIFIED IDEOGRAPH
+ {0xB96B, 0x9695}, //3750 #CJK UNIFIED IDEOGRAPH
+ {0xB96C, 0x96CD}, //3751 #CJK UNIFIED IDEOGRAPH
+ {0xB96D, 0x96CB}, //3752 #CJK UNIFIED IDEOGRAPH
+ {0xB96E, 0x96C9}, //3753 #CJK UNIFIED IDEOGRAPH
+ {0xB96F, 0x96CA}, //3754 #CJK UNIFIED IDEOGRAPH
+ {0xB970, 0x96F7}, //3755 #CJK UNIFIED IDEOGRAPH
+ {0xB971, 0x96FB}, //3756 #CJK UNIFIED IDEOGRAPH
+ {0xB972, 0x96F9}, //3757 #CJK UNIFIED IDEOGRAPH
+ {0xB973, 0x96F6}, //3758 #CJK UNIFIED IDEOGRAPH
+ {0xB974, 0x9756}, //3759 #CJK UNIFIED IDEOGRAPH
+ {0xB975, 0x9774}, //3760 #CJK UNIFIED IDEOGRAPH
+ {0xB976, 0x9776}, //3761 #CJK UNIFIED IDEOGRAPH
+ {0xB977, 0x9810}, //3762 #CJK UNIFIED IDEOGRAPH
+ {0xB978, 0x9811}, //3763 #CJK UNIFIED IDEOGRAPH
+ {0xB979, 0x9813}, //3764 #CJK UNIFIED IDEOGRAPH
+ {0xB97A, 0x980A}, //3765 #CJK UNIFIED IDEOGRAPH
+ {0xB97B, 0x9812}, //3766 #CJK UNIFIED IDEOGRAPH
+ {0xB97C, 0x980C}, //3767 #CJK UNIFIED IDEOGRAPH
+ {0xB97D, 0x98FC}, //3768 #CJK UNIFIED IDEOGRAPH
+ {0xB97E, 0x98F4}, //3769 #CJK UNIFIED IDEOGRAPH
+ {0xB9A1, 0x98FD}, //3770 #CJK UNIFIED IDEOGRAPH
+ {0xB9A2, 0x98FE}, //3771 #CJK UNIFIED IDEOGRAPH
+ {0xB9A3, 0x99B3}, //3772 #CJK UNIFIED IDEOGRAPH
+ {0xB9A4, 0x99B1}, //3773 #CJK UNIFIED IDEOGRAPH
+ {0xB9A5, 0x99B4}, //3774 #CJK UNIFIED IDEOGRAPH
+ {0xB9A6, 0x9AE1}, //3775 #CJK UNIFIED IDEOGRAPH
+ {0xB9A7, 0x9CE9}, //3776 #CJK UNIFIED IDEOGRAPH
+ {0xB9A8, 0x9E82}, //3777 #CJK UNIFIED IDEOGRAPH
+ {0xB9A9, 0x9F0E}, //3778 #CJK UNIFIED IDEOGRAPH
+ {0xB9AA, 0x9F13}, //3779 #CJK UNIFIED IDEOGRAPH
+ {0xB9AB, 0x9F20}, //3780 #CJK UNIFIED IDEOGRAPH
+ {0xB9AC, 0x50E7}, //3781 #CJK UNIFIED IDEOGRAPH
+ {0xB9AD, 0x50EE}, //3782 #CJK UNIFIED IDEOGRAPH
+ {0xB9AE, 0x50E5}, //3783 #CJK UNIFIED IDEOGRAPH
+ {0xB9AF, 0x50D6}, //3784 #CJK UNIFIED IDEOGRAPH
+ {0xB9B0, 0x50ED}, //3785 #CJK UNIFIED IDEOGRAPH
+ {0xB9B1, 0x50DA}, //3786 #CJK UNIFIED IDEOGRAPH
+ {0xB9B2, 0x50D5}, //3787 #CJK UNIFIED IDEOGRAPH
+ {0xB9B3, 0x50CF}, //3788 #CJK UNIFIED IDEOGRAPH
+ {0xB9B4, 0x50D1}, //3789 #CJK UNIFIED IDEOGRAPH
+ {0xB9B5, 0x50F1}, //3790 #CJK UNIFIED IDEOGRAPH
+ {0xB9B6, 0x50CE}, //3791 #CJK UNIFIED IDEOGRAPH
+ {0xB9B7, 0x50E9}, //3792 #CJK UNIFIED IDEOGRAPH
+ {0xB9B8, 0x5162}, //3793 #CJK UNIFIED IDEOGRAPH
+ {0xB9B9, 0x51F3}, //3794 #CJK UNIFIED IDEOGRAPH
+ {0xB9BA, 0x5283}, //3795 #CJK UNIFIED IDEOGRAPH
+ {0xB9BB, 0x5282}, //3796 #CJK UNIFIED IDEOGRAPH
+ {0xB9BC, 0x5331}, //3797 #CJK UNIFIED IDEOGRAPH
+ {0xB9BD, 0x53AD}, //3798 #CJK UNIFIED IDEOGRAPH
+ {0xB9BE, 0x55FE}, //3799 #CJK UNIFIED IDEOGRAPH
+ {0xB9BF, 0x5600}, //3800 #CJK UNIFIED IDEOGRAPH
+ {0xB9C0, 0x561B}, //3801 #CJK UNIFIED IDEOGRAPH
+ {0xB9C1, 0x5617}, //3802 #CJK UNIFIED IDEOGRAPH
+ {0xB9C2, 0x55FD}, //3803 #CJK UNIFIED IDEOGRAPH
+ {0xB9C3, 0x5614}, //3804 #CJK UNIFIED IDEOGRAPH
+ {0xB9C4, 0x5606}, //3805 #CJK UNIFIED IDEOGRAPH
+ {0xB9C5, 0x5609}, //3806 #CJK UNIFIED IDEOGRAPH
+ {0xB9C6, 0x560D}, //3807 #CJK UNIFIED IDEOGRAPH
+ {0xB9C7, 0x560E}, //3808 #CJK UNIFIED IDEOGRAPH
+ {0xB9C8, 0x55F7}, //3809 #CJK UNIFIED IDEOGRAPH
+ {0xB9C9, 0x5616}, //3810 #CJK UNIFIED IDEOGRAPH
+ {0xB9CA, 0x561F}, //3811 #CJK UNIFIED IDEOGRAPH
+ {0xB9CB, 0x5608}, //3812 #CJK UNIFIED IDEOGRAPH
+ {0xB9CC, 0x5610}, //3813 #CJK UNIFIED IDEOGRAPH
+ {0xB9CD, 0x55F6}, //3814 #CJK UNIFIED IDEOGRAPH
+ {0xB9CE, 0x5718}, //3815 #CJK UNIFIED IDEOGRAPH
+ {0xB9CF, 0x5716}, //3816 #CJK UNIFIED IDEOGRAPH
+ {0xB9D0, 0x5875}, //3817 #CJK UNIFIED IDEOGRAPH
+ {0xB9D1, 0x587E}, //3818 #CJK UNIFIED IDEOGRAPH
+ {0xB9D2, 0x5883}, //3819 #CJK UNIFIED IDEOGRAPH
+ {0xB9D3, 0x5893}, //3820 #CJK UNIFIED IDEOGRAPH
+ {0xB9D4, 0x588A}, //3821 #CJK UNIFIED IDEOGRAPH
+ {0xB9D5, 0x5879}, //3822 #CJK UNIFIED IDEOGRAPH
+ {0xB9D6, 0x5885}, //3823 #CJK UNIFIED IDEOGRAPH
+ {0xB9D7, 0x587D}, //3824 #CJK UNIFIED IDEOGRAPH
+ {0xB9D8, 0x58FD}, //3825 #CJK UNIFIED IDEOGRAPH
+ {0xB9D9, 0x5925}, //3826 #CJK UNIFIED IDEOGRAPH
+ {0xB9DA, 0x5922}, //3827 #CJK UNIFIED IDEOGRAPH
+ {0xB9DB, 0x5924}, //3828 #CJK UNIFIED IDEOGRAPH
+ {0xB9DC, 0x596A}, //3829 #CJK UNIFIED IDEOGRAPH
+ {0xB9DD, 0x5969}, //3830 #CJK UNIFIED IDEOGRAPH
+ {0xB9DE, 0x5AE1}, //3831 #CJK UNIFIED IDEOGRAPH
+ {0xB9DF, 0x5AE6}, //3832 #CJK UNIFIED IDEOGRAPH
+ {0xB9E0, 0x5AE9}, //3833 #CJK UNIFIED IDEOGRAPH
+ {0xB9E1, 0x5AD7}, //3834 #CJK UNIFIED IDEOGRAPH
+ {0xB9E2, 0x5AD6}, //3835 #CJK UNIFIED IDEOGRAPH
+ {0xB9E3, 0x5AD8}, //3836 #CJK UNIFIED IDEOGRAPH
+ {0xB9E4, 0x5AE3}, //3837 #CJK UNIFIED IDEOGRAPH
+ {0xB9E5, 0x5B75}, //3838 #CJK UNIFIED IDEOGRAPH
+ {0xB9E6, 0x5BDE}, //3839 #CJK UNIFIED IDEOGRAPH
+ {0xB9E7, 0x5BE7}, //3840 #CJK UNIFIED IDEOGRAPH
+ {0xB9E8, 0x5BE1}, //3841 #CJK UNIFIED IDEOGRAPH
+ {0xB9E9, 0x5BE5}, //3842 #CJK UNIFIED IDEOGRAPH
+ {0xB9EA, 0x5BE6}, //3843 #CJK UNIFIED IDEOGRAPH
+ {0xB9EB, 0x5BE8}, //3844 #CJK UNIFIED IDEOGRAPH
+ {0xB9EC, 0x5BE2}, //3845 #CJK UNIFIED IDEOGRAPH
+ {0xB9ED, 0x5BE4}, //3846 #CJK UNIFIED IDEOGRAPH
+ {0xB9EE, 0x5BDF}, //3847 #CJK UNIFIED IDEOGRAPH
+ {0xB9EF, 0x5C0D}, //3848 #CJK UNIFIED IDEOGRAPH
+ {0xB9F0, 0x5C62}, //3849 #CJK UNIFIED IDEOGRAPH
+ {0xB9F1, 0x5D84}, //3850 #CJK UNIFIED IDEOGRAPH
+ {0xB9F2, 0x5D87}, //3851 #CJK UNIFIED IDEOGRAPH
+ {0xB9F3, 0x5E5B}, //3852 #CJK UNIFIED IDEOGRAPH
+ {0xB9F4, 0x5E63}, //3853 #CJK UNIFIED IDEOGRAPH
+ {0xB9F5, 0x5E55}, //3854 #CJK UNIFIED IDEOGRAPH
+ {0xB9F6, 0x5E57}, //3855 #CJK UNIFIED IDEOGRAPH
+ {0xB9F7, 0x5E54}, //3856 #CJK UNIFIED IDEOGRAPH
+ {0xB9F8, 0x5ED3}, //3857 #CJK UNIFIED IDEOGRAPH
+ {0xB9F9, 0x5ED6}, //3858 #CJK UNIFIED IDEOGRAPH
+ {0xB9FA, 0x5F0A}, //3859 #CJK UNIFIED IDEOGRAPH
+ {0xB9FB, 0x5F46}, //3860 #CJK UNIFIED IDEOGRAPH
+ {0xB9FC, 0x5F70}, //3861 #CJK UNIFIED IDEOGRAPH
+ {0xB9FD, 0x5FB9}, //3862 #CJK UNIFIED IDEOGRAPH
+ {0xB9FE, 0x6147}, //3863 #CJK UNIFIED IDEOGRAPH
+ {0xBA40, 0x613F}, //3864 #CJK UNIFIED IDEOGRAPH
+ {0xBA41, 0x614B}, //3865 #CJK UNIFIED IDEOGRAPH
+ {0xBA42, 0x6177}, //3866 #CJK UNIFIED IDEOGRAPH
+ {0xBA43, 0x6162}, //3867 #CJK UNIFIED IDEOGRAPH
+ {0xBA44, 0x6163}, //3868 #CJK UNIFIED IDEOGRAPH
+ {0xBA45, 0x615F}, //3869 #CJK UNIFIED IDEOGRAPH
+ {0xBA46, 0x615A}, //3870 #CJK UNIFIED IDEOGRAPH
+ {0xBA47, 0x6158}, //3871 #CJK UNIFIED IDEOGRAPH
+ {0xBA48, 0x6175}, //3872 #CJK UNIFIED IDEOGRAPH
+ {0xBA49, 0x622A}, //3873 #CJK UNIFIED IDEOGRAPH
+ {0xBA4A, 0x6487}, //3874 #CJK UNIFIED IDEOGRAPH
+ {0xBA4B, 0x6458}, //3875 #CJK UNIFIED IDEOGRAPH
+ {0xBA4C, 0x6454}, //3876 #CJK UNIFIED IDEOGRAPH
+ {0xBA4D, 0x64A4}, //3877 #CJK UNIFIED IDEOGRAPH
+ {0xBA4E, 0x6478}, //3878 #CJK UNIFIED IDEOGRAPH
+ {0xBA4F, 0x645F}, //3879 #CJK UNIFIED IDEOGRAPH
+ {0xBA50, 0x647A}, //3880 #CJK UNIFIED IDEOGRAPH
+ {0xBA51, 0x6451}, //3881 #CJK UNIFIED IDEOGRAPH
+ {0xBA52, 0x6467}, //3882 #CJK UNIFIED IDEOGRAPH
+ {0xBA53, 0x6434}, //3883 #CJK UNIFIED IDEOGRAPH
+ {0xBA54, 0x646D}, //3884 #CJK UNIFIED IDEOGRAPH
+ {0xBA55, 0x647B}, //3885 #CJK UNIFIED IDEOGRAPH
+ {0xBA56, 0x6572}, //3886 #CJK UNIFIED IDEOGRAPH
+ {0xBA57, 0x65A1}, //3887 #CJK UNIFIED IDEOGRAPH
+ {0xBA58, 0x65D7}, //3888 #CJK UNIFIED IDEOGRAPH
+ {0xBA59, 0x65D6}, //3889 #CJK UNIFIED IDEOGRAPH
+ {0xBA5A, 0x66A2}, //3890 #CJK UNIFIED IDEOGRAPH
+ {0xBA5B, 0x66A8}, //3891 #CJK UNIFIED IDEOGRAPH
+ {0xBA5C, 0x669D}, //3892 #CJK UNIFIED IDEOGRAPH
+ {0xBA5D, 0x699C}, //3893 #CJK UNIFIED IDEOGRAPH
+ {0xBA5E, 0x69A8}, //3894 #CJK UNIFIED IDEOGRAPH
+ {0xBA5F, 0x6995}, //3895 #CJK UNIFIED IDEOGRAPH
+ {0xBA60, 0x69C1}, //3896 #CJK UNIFIED IDEOGRAPH
+ {0xBA61, 0x69AE}, //3897 #CJK UNIFIED IDEOGRAPH
+ {0xBA62, 0x69D3}, //3898 #CJK UNIFIED IDEOGRAPH
+ {0xBA63, 0x69CB}, //3899 #CJK UNIFIED IDEOGRAPH
+ {0xBA64, 0x699B}, //3900 #CJK UNIFIED IDEOGRAPH
+ {0xBA65, 0x69B7}, //3901 #CJK UNIFIED IDEOGRAPH
+ {0xBA66, 0x69BB}, //3902 #CJK UNIFIED IDEOGRAPH
+ {0xBA67, 0x69AB}, //3903 #CJK UNIFIED IDEOGRAPH
+ {0xBA68, 0x69B4}, //3904 #CJK UNIFIED IDEOGRAPH
+ {0xBA69, 0x69D0}, //3905 #CJK UNIFIED IDEOGRAPH
+ {0xBA6A, 0x69CD}, //3906 #CJK UNIFIED IDEOGRAPH
+ {0xBA6B, 0x69AD}, //3907 #CJK UNIFIED IDEOGRAPH
+ {0xBA6C, 0x69CC}, //3908 #CJK UNIFIED IDEOGRAPH
+ {0xBA6D, 0x69A6}, //3909 #CJK UNIFIED IDEOGRAPH
+ {0xBA6E, 0x69C3}, //3910 #CJK UNIFIED IDEOGRAPH
+ {0xBA6F, 0x69A3}, //3911 #CJK UNIFIED IDEOGRAPH
+ {0xBA70, 0x6B49}, //3912 #CJK UNIFIED IDEOGRAPH
+ {0xBA71, 0x6B4C}, //3913 #CJK UNIFIED IDEOGRAPH
+ {0xBA72, 0x6C33}, //3914 #CJK UNIFIED IDEOGRAPH
+ {0xBA73, 0x6F33}, //3915 #CJK UNIFIED IDEOGRAPH
+ {0xBA74, 0x6F14}, //3916 #CJK UNIFIED IDEOGRAPH
+ {0xBA75, 0x6EFE}, //3917 #CJK UNIFIED IDEOGRAPH
+ {0xBA76, 0x6F13}, //3918 #CJK UNIFIED IDEOGRAPH
+ {0xBA77, 0x6EF4}, //3919 #CJK UNIFIED IDEOGRAPH
+ {0xBA78, 0x6F29}, //3920 #CJK UNIFIED IDEOGRAPH
+ {0xBA79, 0x6F3E}, //3921 #CJK UNIFIED IDEOGRAPH
+ {0xBA7A, 0x6F20}, //3922 #CJK UNIFIED IDEOGRAPH
+ {0xBA7B, 0x6F2C}, //3923 #CJK UNIFIED IDEOGRAPH
+ {0xBA7C, 0x6F0F}, //3924 #CJK UNIFIED IDEOGRAPH
+ {0xBA7D, 0x6F02}, //3925 #CJK UNIFIED IDEOGRAPH
+ {0xBA7E, 0x6F22}, //3926 #CJK UNIFIED IDEOGRAPH
+ {0xBAA1, 0x6EFF}, //3927 #CJK UNIFIED IDEOGRAPH
+ {0xBAA2, 0x6EEF}, //3928 #CJK UNIFIED IDEOGRAPH
+ {0xBAA3, 0x6F06}, //3929 #CJK UNIFIED IDEOGRAPH
+ {0xBAA4, 0x6F31}, //3930 #CJK UNIFIED IDEOGRAPH
+ {0xBAA5, 0x6F38}, //3931 #CJK UNIFIED IDEOGRAPH
+ {0xBAA6, 0x6F32}, //3932 #CJK UNIFIED IDEOGRAPH
+ {0xBAA7, 0x6F23}, //3933 #CJK UNIFIED IDEOGRAPH
+ {0xBAA8, 0x6F15}, //3934 #CJK UNIFIED IDEOGRAPH
+ {0xBAA9, 0x6F2B}, //3935 #CJK UNIFIED IDEOGRAPH
+ {0xBAAA, 0x6F2F}, //3936 #CJK UNIFIED IDEOGRAPH
+ {0xBAAB, 0x6F88}, //3937 #CJK UNIFIED IDEOGRAPH
+ {0xBAAC, 0x6F2A}, //3938 #CJK UNIFIED IDEOGRAPH
+ {0xBAAD, 0x6EEC}, //3939 #CJK UNIFIED IDEOGRAPH
+ {0xBAAE, 0x6F01}, //3940 #CJK UNIFIED IDEOGRAPH
+ {0xBAAF, 0x6EF2}, //3941 #CJK UNIFIED IDEOGRAPH
+ {0xBAB0, 0x6ECC}, //3942 #CJK UNIFIED IDEOGRAPH
+ {0xBAB1, 0x6EF7}, //3943 #CJK UNIFIED IDEOGRAPH
+ {0xBAB2, 0x7194}, //3944 #CJK UNIFIED IDEOGRAPH
+ {0xBAB3, 0x7199}, //3945 #CJK UNIFIED IDEOGRAPH
+ {0xBAB4, 0x717D}, //3946 #CJK UNIFIED IDEOGRAPH
+ {0xBAB5, 0x718A}, //3947 #CJK UNIFIED IDEOGRAPH
+ {0xBAB6, 0x7184}, //3948 #CJK UNIFIED IDEOGRAPH
+ {0xBAB7, 0x7192}, //3949 #CJK UNIFIED IDEOGRAPH
+ {0xBAB8, 0x723E}, //3950 #CJK UNIFIED IDEOGRAPH
+ {0xBAB9, 0x7292}, //3951 #CJK UNIFIED IDEOGRAPH
+ {0xBABA, 0x7296}, //3952 #CJK UNIFIED IDEOGRAPH
+ {0xBABB, 0x7344}, //3953 #CJK UNIFIED IDEOGRAPH
+ {0xBABC, 0x7350}, //3954 #CJK UNIFIED IDEOGRAPH
+ {0xBABD, 0x7464}, //3955 #CJK UNIFIED IDEOGRAPH
+ {0xBABE, 0x7463}, //3956 #CJK UNIFIED IDEOGRAPH
+ {0xBABF, 0x746A}, //3957 #CJK UNIFIED IDEOGRAPH
+ {0xBAC0, 0x7470}, //3958 #CJK UNIFIED IDEOGRAPH
+ {0xBAC1, 0x746D}, //3959 #CJK UNIFIED IDEOGRAPH
+ {0xBAC2, 0x7504}, //3960 #CJK UNIFIED IDEOGRAPH
+ {0xBAC3, 0x7591}, //3961 #CJK UNIFIED IDEOGRAPH
+ {0xBAC4, 0x7627}, //3962 #CJK UNIFIED IDEOGRAPH
+ {0xBAC5, 0x760D}, //3963 #CJK UNIFIED IDEOGRAPH
+ {0xBAC6, 0x760B}, //3964 #CJK UNIFIED IDEOGRAPH
+ {0xBAC7, 0x7609}, //3965 #CJK UNIFIED IDEOGRAPH
+ {0xBAC8, 0x7613}, //3966 #CJK UNIFIED IDEOGRAPH
+ {0xBAC9, 0x76E1}, //3967 #CJK UNIFIED IDEOGRAPH
+ {0xBACA, 0x76E3}, //3968 #CJK UNIFIED IDEOGRAPH
+ {0xBACB, 0x7784}, //3969 #CJK UNIFIED IDEOGRAPH
+ {0xBACC, 0x777D}, //3970 #CJK UNIFIED IDEOGRAPH
+ {0xBACD, 0x777F}, //3971 #CJK UNIFIED IDEOGRAPH
+ {0xBACE, 0x7761}, //3972 #CJK UNIFIED IDEOGRAPH
+ {0xBACF, 0x78C1}, //3973 #CJK UNIFIED IDEOGRAPH
+ {0xBAD0, 0x789F}, //3974 #CJK UNIFIED IDEOGRAPH
+ {0xBAD1, 0x78A7}, //3975 #CJK UNIFIED IDEOGRAPH
+ {0xBAD2, 0x78B3}, //3976 #CJK UNIFIED IDEOGRAPH
+ {0xBAD3, 0x78A9}, //3977 #CJK UNIFIED IDEOGRAPH
+ {0xBAD4, 0x78A3}, //3978 #CJK UNIFIED IDEOGRAPH
+ {0xBAD5, 0x798E}, //3979 #CJK UNIFIED IDEOGRAPH
+ {0xBAD6, 0x798F}, //3980 #CJK UNIFIED IDEOGRAPH
+ {0xBAD7, 0x798D}, //3981 #CJK UNIFIED IDEOGRAPH
+ {0xBAD8, 0x7A2E}, //3982 #CJK UNIFIED IDEOGRAPH
+ {0xBAD9, 0x7A31}, //3983 #CJK UNIFIED IDEOGRAPH
+ {0xBADA, 0x7AAA}, //3984 #CJK UNIFIED IDEOGRAPH
+ {0xBADB, 0x7AA9}, //3985 #CJK UNIFIED IDEOGRAPH
+ {0xBADC, 0x7AED}, //3986 #CJK UNIFIED IDEOGRAPH
+ {0xBADD, 0x7AEF}, //3987 #CJK UNIFIED IDEOGRAPH
+ {0xBADE, 0x7BA1}, //3988 #CJK UNIFIED IDEOGRAPH
+ {0xBADF, 0x7B95}, //3989 #CJK UNIFIED IDEOGRAPH
+ {0xBAE0, 0x7B8B}, //3990 #CJK UNIFIED IDEOGRAPH
+ {0xBAE1, 0x7B75}, //3991 #CJK UNIFIED IDEOGRAPH
+ {0xBAE2, 0x7B97}, //3992 #CJK UNIFIED IDEOGRAPH
+ {0xBAE3, 0x7B9D}, //3993 #CJK UNIFIED IDEOGRAPH
+ {0xBAE4, 0x7B94}, //3994 #CJK UNIFIED IDEOGRAPH
+ {0xBAE5, 0x7B8F}, //3995 #CJK UNIFIED IDEOGRAPH
+ {0xBAE6, 0x7BB8}, //3996 #CJK UNIFIED IDEOGRAPH
+ {0xBAE7, 0x7B87}, //3997 #CJK UNIFIED IDEOGRAPH
+ {0xBAE8, 0x7B84}, //3998 #CJK UNIFIED IDEOGRAPH
+ {0xBAE9, 0x7CB9}, //3999 #CJK UNIFIED IDEOGRAPH
+ {0xBAEA, 0x7CBD}, //4000 #CJK UNIFIED IDEOGRAPH
+ {0xBAEB, 0x7CBE}, //4001 #CJK UNIFIED IDEOGRAPH
+ {0xBAEC, 0x7DBB}, //4002 #CJK UNIFIED IDEOGRAPH
+ {0xBAED, 0x7DB0}, //4003 #CJK UNIFIED IDEOGRAPH
+ {0xBAEE, 0x7D9C}, //4004 #CJK UNIFIED IDEOGRAPH
+ {0xBAEF, 0x7DBD}, //4005 #CJK UNIFIED IDEOGRAPH
+ {0xBAF0, 0x7DBE}, //4006 #CJK UNIFIED IDEOGRAPH
+ {0xBAF1, 0x7DA0}, //4007 #CJK UNIFIED IDEOGRAPH
+ {0xBAF2, 0x7DCA}, //4008 #CJK UNIFIED IDEOGRAPH
+ {0xBAF3, 0x7DB4}, //4009 #CJK UNIFIED IDEOGRAPH
+ {0xBAF4, 0x7DB2}, //4010 #CJK UNIFIED IDEOGRAPH
+ {0xBAF5, 0x7DB1}, //4011 #CJK UNIFIED IDEOGRAPH
+ {0xBAF6, 0x7DBA}, //4012 #CJK UNIFIED IDEOGRAPH
+ {0xBAF7, 0x7DA2}, //4013 #CJK UNIFIED IDEOGRAPH
+ {0xBAF8, 0x7DBF}, //4014 #CJK UNIFIED IDEOGRAPH
+ {0xBAF9, 0x7DB5}, //4015 #CJK UNIFIED IDEOGRAPH
+ {0xBAFA, 0x7DB8}, //4016 #CJK UNIFIED IDEOGRAPH
+ {0xBAFB, 0x7DAD}, //4017 #CJK UNIFIED IDEOGRAPH
+ {0xBAFC, 0x7DD2}, //4018 #CJK UNIFIED IDEOGRAPH
+ {0xBAFD, 0x7DC7}, //4019 #CJK UNIFIED IDEOGRAPH
+ {0xBAFE, 0x7DAC}, //4020 #CJK UNIFIED IDEOGRAPH
+ {0xBB40, 0x7F70}, //4021 #CJK UNIFIED IDEOGRAPH
+ {0xBB41, 0x7FE0}, //4022 #CJK UNIFIED IDEOGRAPH
+ {0xBB42, 0x7FE1}, //4023 #CJK UNIFIED IDEOGRAPH
+ {0xBB43, 0x7FDF}, //4024 #CJK UNIFIED IDEOGRAPH
+ {0xBB44, 0x805E}, //4025 #CJK UNIFIED IDEOGRAPH
+ {0xBB45, 0x805A}, //4026 #CJK UNIFIED IDEOGRAPH
+ {0xBB46, 0x8087}, //4027 #CJK UNIFIED IDEOGRAPH
+ {0xBB47, 0x8150}, //4028 #CJK UNIFIED IDEOGRAPH
+ {0xBB48, 0x8180}, //4029 #CJK UNIFIED IDEOGRAPH
+ {0xBB49, 0x818F}, //4030 #CJK UNIFIED IDEOGRAPH
+ {0xBB4A, 0x8188}, //4031 #CJK UNIFIED IDEOGRAPH
+ {0xBB4B, 0x818A}, //4032 #CJK UNIFIED IDEOGRAPH
+ {0xBB4C, 0x817F}, //4033 #CJK UNIFIED IDEOGRAPH
+ {0xBB4D, 0x8182}, //4034 #CJK UNIFIED IDEOGRAPH
+ {0xBB4E, 0x81E7}, //4035 #CJK UNIFIED IDEOGRAPH
+ {0xBB4F, 0x81FA}, //4036 #CJK UNIFIED IDEOGRAPH
+ {0xBB50, 0x8207}, //4037 #CJK UNIFIED IDEOGRAPH
+ {0xBB51, 0x8214}, //4038 #CJK UNIFIED IDEOGRAPH
+ {0xBB52, 0x821E}, //4039 #CJK UNIFIED IDEOGRAPH
+ {0xBB53, 0x824B}, //4040 #CJK UNIFIED IDEOGRAPH
+ {0xBB54, 0x84C9}, //4041 #CJK UNIFIED IDEOGRAPH
+ {0xBB55, 0x84BF}, //4042 #CJK UNIFIED IDEOGRAPH
+ {0xBB56, 0x84C6}, //4043 #CJK UNIFIED IDEOGRAPH
+ {0xBB57, 0x84C4}, //4044 #CJK UNIFIED IDEOGRAPH
+ {0xBB58, 0x8499}, //4045 #CJK UNIFIED IDEOGRAPH
+ {0xBB59, 0x849E}, //4046 #CJK UNIFIED IDEOGRAPH
+ {0xBB5A, 0x84B2}, //4047 #CJK UNIFIED IDEOGRAPH
+ {0xBB5B, 0x849C}, //4048 #CJK UNIFIED IDEOGRAPH
+ {0xBB5C, 0x84CB}, //4049 #CJK UNIFIED IDEOGRAPH
+ {0xBB5D, 0x84B8}, //4050 #CJK UNIFIED IDEOGRAPH
+ {0xBB5E, 0x84C0}, //4051 #CJK UNIFIED IDEOGRAPH
+ {0xBB5F, 0x84D3}, //4052 #CJK UNIFIED IDEOGRAPH
+ {0xBB60, 0x8490}, //4053 #CJK UNIFIED IDEOGRAPH
+ {0xBB61, 0x84BC}, //4054 #CJK UNIFIED IDEOGRAPH
+ {0xBB62, 0x84D1}, //4055 #CJK UNIFIED IDEOGRAPH
+ {0xBB63, 0x84CA}, //4056 #CJK UNIFIED IDEOGRAPH
+ {0xBB64, 0x873F}, //4057 #CJK UNIFIED IDEOGRAPH
+ {0xBB65, 0x871C}, //4058 #CJK UNIFIED IDEOGRAPH
+ {0xBB66, 0x873B}, //4059 #CJK UNIFIED IDEOGRAPH
+ {0xBB67, 0x8722}, //4060 #CJK UNIFIED IDEOGRAPH
+ {0xBB68, 0x8725}, //4061 #CJK UNIFIED IDEOGRAPH
+ {0xBB69, 0x8734}, //4062 #CJK UNIFIED IDEOGRAPH
+ {0xBB6A, 0x8718}, //4063 #CJK UNIFIED IDEOGRAPH
+ {0xBB6B, 0x8755}, //4064 #CJK UNIFIED IDEOGRAPH
+ {0xBB6C, 0x8737}, //4065 #CJK UNIFIED IDEOGRAPH
+ {0xBB6D, 0x8729}, //4066 #CJK UNIFIED IDEOGRAPH
+ {0xBB6E, 0x88F3}, //4067 #CJK UNIFIED IDEOGRAPH
+ {0xBB6F, 0x8902}, //4068 #CJK UNIFIED IDEOGRAPH
+ {0xBB70, 0x88F4}, //4069 #CJK UNIFIED IDEOGRAPH
+ {0xBB71, 0x88F9}, //4070 #CJK UNIFIED IDEOGRAPH
+ {0xBB72, 0x88F8}, //4071 #CJK UNIFIED IDEOGRAPH
+ {0xBB73, 0x88FD}, //4072 #CJK UNIFIED IDEOGRAPH
+ {0xBB74, 0x88E8}, //4073 #CJK UNIFIED IDEOGRAPH
+ {0xBB75, 0x891A}, //4074 #CJK UNIFIED IDEOGRAPH
+ {0xBB76, 0x88EF}, //4075 #CJK UNIFIED IDEOGRAPH
+ {0xBB77, 0x8AA6}, //4076 #CJK UNIFIED IDEOGRAPH
+ {0xBB78, 0x8A8C}, //4077 #CJK UNIFIED IDEOGRAPH
+ {0xBB79, 0x8A9E}, //4078 #CJK UNIFIED IDEOGRAPH
+ {0xBB7A, 0x8AA3}, //4079 #CJK UNIFIED IDEOGRAPH
+ {0xBB7B, 0x8A8D}, //4080 #CJK UNIFIED IDEOGRAPH
+ {0xBB7C, 0x8AA1}, //4081 #CJK UNIFIED IDEOGRAPH
+ {0xBB7D, 0x8A93}, //4082 #CJK UNIFIED IDEOGRAPH
+ {0xBB7E, 0x8AA4}, //4083 #CJK UNIFIED IDEOGRAPH
+ {0xBBA1, 0x8AAA}, //4084 #CJK UNIFIED IDEOGRAPH
+ {0xBBA2, 0x8AA5}, //4085 #CJK UNIFIED IDEOGRAPH
+ {0xBBA3, 0x8AA8}, //4086 #CJK UNIFIED IDEOGRAPH
+ {0xBBA4, 0x8A98}, //4087 #CJK UNIFIED IDEOGRAPH
+ {0xBBA5, 0x8A91}, //4088 #CJK UNIFIED IDEOGRAPH
+ {0xBBA6, 0x8A9A}, //4089 #CJK UNIFIED IDEOGRAPH
+ {0xBBA7, 0x8AA7}, //4090 #CJK UNIFIED IDEOGRAPH
+ {0xBBA8, 0x8C6A}, //4091 #CJK UNIFIED IDEOGRAPH
+ {0xBBA9, 0x8C8D}, //4092 #CJK UNIFIED IDEOGRAPH
+ {0xBBAA, 0x8C8C}, //4093 #CJK UNIFIED IDEOGRAPH
+ {0xBBAB, 0x8CD3}, //4094 #CJK UNIFIED IDEOGRAPH
+ {0xBBAC, 0x8CD1}, //4095 #CJK UNIFIED IDEOGRAPH
+ {0xBBAD, 0x8CD2}, //4096 #CJK UNIFIED IDEOGRAPH
+ {0xBBAE, 0x8D6B}, //4097 #CJK UNIFIED IDEOGRAPH
+ {0xBBAF, 0x8D99}, //4098 #CJK UNIFIED IDEOGRAPH
+ {0xBBB0, 0x8D95}, //4099 #CJK UNIFIED IDEOGRAPH
+ {0xBBB1, 0x8DFC}, //4100 #CJK UNIFIED IDEOGRAPH
+ {0xBBB2, 0x8F14}, //4101 #CJK UNIFIED IDEOGRAPH
+ {0xBBB3, 0x8F12}, //4102 #CJK UNIFIED IDEOGRAPH
+ {0xBBB4, 0x8F15}, //4103 #CJK UNIFIED IDEOGRAPH
+ {0xBBB5, 0x8F13}, //4104 #CJK UNIFIED IDEOGRAPH
+ {0xBBB6, 0x8FA3}, //4105 #CJK UNIFIED IDEOGRAPH
+ {0xBBB7, 0x9060}, //4106 #CJK UNIFIED IDEOGRAPH
+ {0xBBB8, 0x9058}, //4107 #CJK UNIFIED IDEOGRAPH
+ {0xBBB9, 0x905C}, //4108 #CJK UNIFIED IDEOGRAPH
+ {0xBBBA, 0x9063}, //4109 #CJK UNIFIED IDEOGRAPH
+ {0xBBBB, 0x9059}, //4110 #CJK UNIFIED IDEOGRAPH
+ {0xBBBC, 0x905E}, //4111 #CJK UNIFIED IDEOGRAPH
+ {0xBBBD, 0x9062}, //4112 #CJK UNIFIED IDEOGRAPH
+ {0xBBBE, 0x905D}, //4113 #CJK UNIFIED IDEOGRAPH
+ {0xBBBF, 0x905B}, //4114 #CJK UNIFIED IDEOGRAPH
+ {0xBBC0, 0x9119}, //4115 #CJK UNIFIED IDEOGRAPH
+ {0xBBC1, 0x9118}, //4116 #CJK UNIFIED IDEOGRAPH
+ {0xBBC2, 0x911E}, //4117 #CJK UNIFIED IDEOGRAPH
+ {0xBBC3, 0x9175}, //4118 #CJK UNIFIED IDEOGRAPH
+ {0xBBC4, 0x9178}, //4119 #CJK UNIFIED IDEOGRAPH
+ {0xBBC5, 0x9177}, //4120 #CJK UNIFIED IDEOGRAPH
+ {0xBBC6, 0x9174}, //4121 #CJK UNIFIED IDEOGRAPH
+ {0xBBC7, 0x9278}, //4122 #CJK UNIFIED IDEOGRAPH
+ {0xBBC8, 0x9280}, //4123 #CJK UNIFIED IDEOGRAPH
+ {0xBBC9, 0x9285}, //4124 #CJK UNIFIED IDEOGRAPH
+ {0xBBCA, 0x9298}, //4125 #CJK UNIFIED IDEOGRAPH
+ {0xBBCB, 0x9296}, //4126 #CJK UNIFIED IDEOGRAPH
+ {0xBBCC, 0x927B}, //4127 #CJK UNIFIED IDEOGRAPH
+ {0xBBCD, 0x9293}, //4128 #CJK UNIFIED IDEOGRAPH
+ {0xBBCE, 0x929C}, //4129 #CJK UNIFIED IDEOGRAPH
+ {0xBBCF, 0x92A8}, //4130 #CJK UNIFIED IDEOGRAPH
+ {0xBBD0, 0x927C}, //4131 #CJK UNIFIED IDEOGRAPH
+ {0xBBD1, 0x9291}, //4132 #CJK UNIFIED IDEOGRAPH
+ {0xBBD2, 0x95A1}, //4133 #CJK UNIFIED IDEOGRAPH
+ {0xBBD3, 0x95A8}, //4134 #CJK UNIFIED IDEOGRAPH
+ {0xBBD4, 0x95A9}, //4135 #CJK UNIFIED IDEOGRAPH
+ {0xBBD5, 0x95A3}, //4136 #CJK UNIFIED IDEOGRAPH
+ {0xBBD6, 0x95A5}, //4137 #CJK UNIFIED IDEOGRAPH
+ {0xBBD7, 0x95A4}, //4138 #CJK UNIFIED IDEOGRAPH
+ {0xBBD8, 0x9699}, //4139 #CJK UNIFIED IDEOGRAPH
+ {0xBBD9, 0x969C}, //4140 #CJK UNIFIED IDEOGRAPH
+ {0xBBDA, 0x969B}, //4141 #CJK UNIFIED IDEOGRAPH
+ {0xBBDB, 0x96CC}, //4142 #CJK UNIFIED IDEOGRAPH
+ {0xBBDC, 0x96D2}, //4143 #CJK UNIFIED IDEOGRAPH
+ {0xBBDD, 0x9700}, //4144 #CJK UNIFIED IDEOGRAPH
+ {0xBBDE, 0x977C}, //4145 #CJK UNIFIED IDEOGRAPH
+ {0xBBDF, 0x9785}, //4146 #CJK UNIFIED IDEOGRAPH
+ {0xBBE0, 0x97F6}, //4147 #CJK UNIFIED IDEOGRAPH
+ {0xBBE1, 0x9817}, //4148 #CJK UNIFIED IDEOGRAPH
+ {0xBBE2, 0x9818}, //4149 #CJK UNIFIED IDEOGRAPH
+ {0xBBE3, 0x98AF}, //4150 #CJK UNIFIED IDEOGRAPH
+ {0xBBE4, 0x98B1}, //4151 #CJK UNIFIED IDEOGRAPH
+ {0xBBE5, 0x9903}, //4152 #CJK UNIFIED IDEOGRAPH
+ {0xBBE6, 0x9905}, //4153 #CJK UNIFIED IDEOGRAPH
+ {0xBBE7, 0x990C}, //4154 #CJK UNIFIED IDEOGRAPH
+ {0xBBE8, 0x9909}, //4155 #CJK UNIFIED IDEOGRAPH
+ {0xBBE9, 0x99C1}, //4156 #CJK UNIFIED IDEOGRAPH
+ {0xBBEA, 0x9AAF}, //4157 #CJK UNIFIED IDEOGRAPH
+ {0xBBEB, 0x9AB0}, //4158 #CJK UNIFIED IDEOGRAPH
+ {0xBBEC, 0x9AE6}, //4159 #CJK UNIFIED IDEOGRAPH
+ {0xBBED, 0x9B41}, //4160 #CJK UNIFIED IDEOGRAPH
+ {0xBBEE, 0x9B42}, //4161 #CJK UNIFIED IDEOGRAPH
+ {0xBBEF, 0x9CF4}, //4162 #CJK UNIFIED IDEOGRAPH
+ {0xBBF0, 0x9CF6}, //4163 #CJK UNIFIED IDEOGRAPH
+ {0xBBF1, 0x9CF3}, //4164 #CJK UNIFIED IDEOGRAPH
+ {0xBBF2, 0x9EBC}, //4165 #CJK UNIFIED IDEOGRAPH
+ {0xBBF3, 0x9F3B}, //4166 #CJK UNIFIED IDEOGRAPH
+ {0xBBF4, 0x9F4A}, //4167 #CJK UNIFIED IDEOGRAPH
+ {0xBBF5, 0x5104}, //4168 #CJK UNIFIED IDEOGRAPH
+ {0xBBF6, 0x5100}, //4169 #CJK UNIFIED IDEOGRAPH
+ {0xBBF7, 0x50FB}, //4170 #CJK UNIFIED IDEOGRAPH
+ {0xBBF8, 0x50F5}, //4171 #CJK UNIFIED IDEOGRAPH
+ {0xBBF9, 0x50F9}, //4172 #CJK UNIFIED IDEOGRAPH
+ {0xBBFA, 0x5102}, //4173 #CJK UNIFIED IDEOGRAPH
+ {0xBBFB, 0x5108}, //4174 #CJK UNIFIED IDEOGRAPH
+ {0xBBFC, 0x5109}, //4175 #CJK UNIFIED IDEOGRAPH
+ {0xBBFD, 0x5105}, //4176 #CJK UNIFIED IDEOGRAPH
+ {0xBBFE, 0x51DC}, //4177 #CJK UNIFIED IDEOGRAPH
+ {0xBC40, 0x5287}, //4178 #CJK UNIFIED IDEOGRAPH
+ {0xBC41, 0x5288}, //4179 #CJK UNIFIED IDEOGRAPH
+ {0xBC42, 0x5289}, //4180 #CJK UNIFIED IDEOGRAPH
+ {0xBC43, 0x528D}, //4181 #CJK UNIFIED IDEOGRAPH
+ {0xBC44, 0x528A}, //4182 #CJK UNIFIED IDEOGRAPH
+ {0xBC45, 0x52F0}, //4183 #CJK UNIFIED IDEOGRAPH
+ {0xBC46, 0x53B2}, //4184 #CJK UNIFIED IDEOGRAPH
+ {0xBC47, 0x562E}, //4185 #CJK UNIFIED IDEOGRAPH
+ {0xBC48, 0x563B}, //4186 #CJK UNIFIED IDEOGRAPH
+ {0xBC49, 0x5639}, //4187 #CJK UNIFIED IDEOGRAPH
+ {0xBC4A, 0x5632}, //4188 #CJK UNIFIED IDEOGRAPH
+ {0xBC4B, 0x563F}, //4189 #CJK UNIFIED IDEOGRAPH
+ {0xBC4C, 0x5634}, //4190 #CJK UNIFIED IDEOGRAPH
+ {0xBC4D, 0x5629}, //4191 #CJK UNIFIED IDEOGRAPH
+ {0xBC4E, 0x5653}, //4192 #CJK UNIFIED IDEOGRAPH
+ {0xBC4F, 0x564E}, //4193 #CJK UNIFIED IDEOGRAPH
+ {0xBC50, 0x5657}, //4194 #CJK UNIFIED IDEOGRAPH
+ {0xBC51, 0x5674}, //4195 #CJK UNIFIED IDEOGRAPH
+ {0xBC52, 0x5636}, //4196 #CJK UNIFIED IDEOGRAPH
+ {0xBC53, 0x562F}, //4197 #CJK UNIFIED IDEOGRAPH
+ {0xBC54, 0x5630}, //4198 #CJK UNIFIED IDEOGRAPH
+ {0xBC55, 0x5880}, //4199 #CJK UNIFIED IDEOGRAPH
+ {0xBC56, 0x589F}, //4200 #CJK UNIFIED IDEOGRAPH
+ {0xBC57, 0x589E}, //4201 #CJK UNIFIED IDEOGRAPH
+ {0xBC58, 0x58B3}, //4202 #CJK UNIFIED IDEOGRAPH
+ {0xBC59, 0x589C}, //4203 #CJK UNIFIED IDEOGRAPH
+ {0xBC5A, 0x58AE}, //4204 #CJK UNIFIED IDEOGRAPH
+ {0xBC5B, 0x58A9}, //4205 #CJK UNIFIED IDEOGRAPH
+ {0xBC5C, 0x58A6}, //4206 #CJK UNIFIED IDEOGRAPH
+ {0xBC5D, 0x596D}, //4207 #CJK UNIFIED IDEOGRAPH
+ {0xBC5E, 0x5B09}, //4208 #CJK UNIFIED IDEOGRAPH
+ {0xBC5F, 0x5AFB}, //4209 #CJK UNIFIED IDEOGRAPH
+ {0xBC60, 0x5B0B}, //4210 #CJK UNIFIED IDEOGRAPH
+ {0xBC61, 0x5AF5}, //4211 #CJK UNIFIED IDEOGRAPH
+ {0xBC62, 0x5B0C}, //4212 #CJK UNIFIED IDEOGRAPH
+ {0xBC63, 0x5B08}, //4213 #CJK UNIFIED IDEOGRAPH
+ {0xBC64, 0x5BEE}, //4214 #CJK UNIFIED IDEOGRAPH
+ {0xBC65, 0x5BEC}, //4215 #CJK UNIFIED IDEOGRAPH
+ {0xBC66, 0x5BE9}, //4216 #CJK UNIFIED IDEOGRAPH
+ {0xBC67, 0x5BEB}, //4217 #CJK UNIFIED IDEOGRAPH
+ {0xBC68, 0x5C64}, //4218 #CJK UNIFIED IDEOGRAPH
+ {0xBC69, 0x5C65}, //4219 #CJK UNIFIED IDEOGRAPH
+ {0xBC6A, 0x5D9D}, //4220 #CJK UNIFIED IDEOGRAPH
+ {0xBC6B, 0x5D94}, //4221 #CJK UNIFIED IDEOGRAPH
+ {0xBC6C, 0x5E62}, //4222 #CJK UNIFIED IDEOGRAPH
+ {0xBC6D, 0x5E5F}, //4223 #CJK UNIFIED IDEOGRAPH
+ {0xBC6E, 0x5E61}, //4224 #CJK UNIFIED IDEOGRAPH
+ {0xBC6F, 0x5EE2}, //4225 #CJK UNIFIED IDEOGRAPH
+ {0xBC70, 0x5EDA}, //4226 #CJK UNIFIED IDEOGRAPH
+ {0xBC71, 0x5EDF}, //4227 #CJK UNIFIED IDEOGRAPH
+ {0xBC72, 0x5EDD}, //4228 #CJK UNIFIED IDEOGRAPH
+ {0xBC73, 0x5EE3}, //4229 #CJK UNIFIED IDEOGRAPH
+ {0xBC74, 0x5EE0}, //4230 #CJK UNIFIED IDEOGRAPH
+ {0xBC75, 0x5F48}, //4231 #CJK UNIFIED IDEOGRAPH
+ {0xBC76, 0x5F71}, //4232 #CJK UNIFIED IDEOGRAPH
+ {0xBC77, 0x5FB7}, //4233 #CJK UNIFIED IDEOGRAPH
+ {0xBC78, 0x5FB5}, //4234 #CJK UNIFIED IDEOGRAPH
+ {0xBC79, 0x6176}, //4235 #CJK UNIFIED IDEOGRAPH
+ {0xBC7A, 0x6167}, //4236 #CJK UNIFIED IDEOGRAPH
+ {0xBC7B, 0x616E}, //4237 #CJK UNIFIED IDEOGRAPH
+ {0xBC7C, 0x615D}, //4238 #CJK UNIFIED IDEOGRAPH
+ {0xBC7D, 0x6155}, //4239 #CJK UNIFIED IDEOGRAPH
+ {0xBC7E, 0x6182}, //4240 #CJK UNIFIED IDEOGRAPH
+ {0xBCA1, 0x617C}, //4241 #CJK UNIFIED IDEOGRAPH
+ {0xBCA2, 0x6170}, //4242 #CJK UNIFIED IDEOGRAPH
+ {0xBCA3, 0x616B}, //4243 #CJK UNIFIED IDEOGRAPH
+ {0xBCA4, 0x617E}, //4244 #CJK UNIFIED IDEOGRAPH
+ {0xBCA5, 0x61A7}, //4245 #CJK UNIFIED IDEOGRAPH
+ {0xBCA6, 0x6190}, //4246 #CJK UNIFIED IDEOGRAPH
+ {0xBCA7, 0x61AB}, //4247 #CJK UNIFIED IDEOGRAPH
+ {0xBCA8, 0x618E}, //4248 #CJK UNIFIED IDEOGRAPH
+ {0xBCA9, 0x61AC}, //4249 #CJK UNIFIED IDEOGRAPH
+ {0xBCAA, 0x619A}, //4250 #CJK UNIFIED IDEOGRAPH
+ {0xBCAB, 0x61A4}, //4251 #CJK UNIFIED IDEOGRAPH
+ {0xBCAC, 0x6194}, //4252 #CJK UNIFIED IDEOGRAPH
+ {0xBCAD, 0x61AE}, //4253 #CJK UNIFIED IDEOGRAPH
+ {0xBCAE, 0x622E}, //4254 #CJK UNIFIED IDEOGRAPH
+ {0xBCAF, 0x6469}, //4255 #CJK UNIFIED IDEOGRAPH
+ {0xBCB0, 0x646F}, //4256 #CJK UNIFIED IDEOGRAPH
+ {0xBCB1, 0x6479}, //4257 #CJK UNIFIED IDEOGRAPH
+ {0xBCB2, 0x649E}, //4258 #CJK UNIFIED IDEOGRAPH
+ {0xBCB3, 0x64B2}, //4259 #CJK UNIFIED IDEOGRAPH
+ {0xBCB4, 0x6488}, //4260 #CJK UNIFIED IDEOGRAPH
+ {0xBCB5, 0x6490}, //4261 #CJK UNIFIED IDEOGRAPH
+ {0xBCB6, 0x64B0}, //4262 #CJK UNIFIED IDEOGRAPH
+ {0xBCB7, 0x64A5}, //4263 #CJK UNIFIED IDEOGRAPH
+ {0xBCB8, 0x6493}, //4264 #CJK UNIFIED IDEOGRAPH
+ {0xBCB9, 0x6495}, //4265 #CJK UNIFIED IDEOGRAPH
+ {0xBCBA, 0x64A9}, //4266 #CJK UNIFIED IDEOGRAPH
+ {0xBCBB, 0x6492}, //4267 #CJK UNIFIED IDEOGRAPH
+ {0xBCBC, 0x64AE}, //4268 #CJK UNIFIED IDEOGRAPH
+ {0xBCBD, 0x64AD}, //4269 #CJK UNIFIED IDEOGRAPH
+ {0xBCBE, 0x64AB}, //4270 #CJK UNIFIED IDEOGRAPH
+ {0xBCBF, 0x649A}, //4271 #CJK UNIFIED IDEOGRAPH
+ {0xBCC0, 0x64AC}, //4272 #CJK UNIFIED IDEOGRAPH
+ {0xBCC1, 0x6499}, //4273 #CJK UNIFIED IDEOGRAPH
+ {0xBCC2, 0x64A2}, //4274 #CJK UNIFIED IDEOGRAPH
+ {0xBCC3, 0x64B3}, //4275 #CJK UNIFIED IDEOGRAPH
+ {0xBCC4, 0x6575}, //4276 #CJK UNIFIED IDEOGRAPH
+ {0xBCC5, 0x6577}, //4277 #CJK UNIFIED IDEOGRAPH
+ {0xBCC6, 0x6578}, //4278 #CJK UNIFIED IDEOGRAPH
+ {0xBCC7, 0x66AE}, //4279 #CJK UNIFIED IDEOGRAPH
+ {0xBCC8, 0x66AB}, //4280 #CJK UNIFIED IDEOGRAPH
+ {0xBCC9, 0x66B4}, //4281 #CJK UNIFIED IDEOGRAPH
+ {0xBCCA, 0x66B1}, //4282 #CJK UNIFIED IDEOGRAPH
+ {0xBCCB, 0x6A23}, //4283 #CJK UNIFIED IDEOGRAPH
+ {0xBCCC, 0x6A1F}, //4284 #CJK UNIFIED IDEOGRAPH
+ {0xBCCD, 0x69E8}, //4285 #CJK UNIFIED IDEOGRAPH
+ {0xBCCE, 0x6A01}, //4286 #CJK UNIFIED IDEOGRAPH
+ {0xBCCF, 0x6A1E}, //4287 #CJK UNIFIED IDEOGRAPH
+ {0xBCD0, 0x6A19}, //4288 #CJK UNIFIED IDEOGRAPH
+ {0xBCD1, 0x69FD}, //4289 #CJK UNIFIED IDEOGRAPH
+ {0xBCD2, 0x6A21}, //4290 #CJK UNIFIED IDEOGRAPH
+ {0xBCD3, 0x6A13}, //4291 #CJK UNIFIED IDEOGRAPH
+ {0xBCD4, 0x6A0A}, //4292 #CJK UNIFIED IDEOGRAPH
+ {0xBCD5, 0x69F3}, //4293 #CJK UNIFIED IDEOGRAPH
+ {0xBCD6, 0x6A02}, //4294 #CJK UNIFIED IDEOGRAPH
+ {0xBCD7, 0x6A05}, //4295 #CJK UNIFIED IDEOGRAPH
+ {0xBCD8, 0x69ED}, //4296 #CJK UNIFIED IDEOGRAPH
+ {0xBCD9, 0x6A11}, //4297 #CJK UNIFIED IDEOGRAPH
+ {0xBCDA, 0x6B50}, //4298 #CJK UNIFIED IDEOGRAPH
+ {0xBCDB, 0x6B4E}, //4299 #CJK UNIFIED IDEOGRAPH
+ {0xBCDC, 0x6BA4}, //4300 #CJK UNIFIED IDEOGRAPH
+ {0xBCDD, 0x6BC5}, //4301 #CJK UNIFIED IDEOGRAPH
+ {0xBCDE, 0x6BC6}, //4302 #CJK UNIFIED IDEOGRAPH
+ {0xBCDF, 0x6F3F}, //4303 #CJK UNIFIED IDEOGRAPH
+ {0xBCE0, 0x6F7C}, //4304 #CJK UNIFIED IDEOGRAPH
+ {0xBCE1, 0x6F84}, //4305 #CJK UNIFIED IDEOGRAPH
+ {0xBCE2, 0x6F51}, //4306 #CJK UNIFIED IDEOGRAPH
+ {0xBCE3, 0x6F66}, //4307 #CJK UNIFIED IDEOGRAPH
+ {0xBCE4, 0x6F54}, //4308 #CJK UNIFIED IDEOGRAPH
+ {0xBCE5, 0x6F86}, //4309 #CJK UNIFIED IDEOGRAPH
+ {0xBCE6, 0x6F6D}, //4310 #CJK UNIFIED IDEOGRAPH
+ {0xBCE7, 0x6F5B}, //4311 #CJK UNIFIED IDEOGRAPH
+ {0xBCE8, 0x6F78}, //4312 #CJK UNIFIED IDEOGRAPH
+ {0xBCE9, 0x6F6E}, //4313 #CJK UNIFIED IDEOGRAPH
+ {0xBCEA, 0x6F8E}, //4314 #CJK UNIFIED IDEOGRAPH
+ {0xBCEB, 0x6F7A}, //4315 #CJK UNIFIED IDEOGRAPH
+ {0xBCEC, 0x6F70}, //4316 #CJK UNIFIED IDEOGRAPH
+ {0xBCED, 0x6F64}, //4317 #CJK UNIFIED IDEOGRAPH
+ {0xBCEE, 0x6F97}, //4318 #CJK UNIFIED IDEOGRAPH
+ {0xBCEF, 0x6F58}, //4319 #CJK UNIFIED IDEOGRAPH
+ {0xBCF0, 0x6ED5}, //4320 #CJK UNIFIED IDEOGRAPH
+ {0xBCF1, 0x6F6F}, //4321 #CJK UNIFIED IDEOGRAPH
+ {0xBCF2, 0x6F60}, //4322 #CJK UNIFIED IDEOGRAPH
+ {0xBCF3, 0x6F5F}, //4323 #CJK UNIFIED IDEOGRAPH
+ {0xBCF4, 0x719F}, //4324 #CJK UNIFIED IDEOGRAPH
+ {0xBCF5, 0x71AC}, //4325 #CJK UNIFIED IDEOGRAPH
+ {0xBCF6, 0x71B1}, //4326 #CJK UNIFIED IDEOGRAPH
+ {0xBCF7, 0x71A8}, //4327 #CJK UNIFIED IDEOGRAPH
+ {0xBCF8, 0x7256}, //4328 #CJK UNIFIED IDEOGRAPH
+ {0xBCF9, 0x729B}, //4329 #CJK UNIFIED IDEOGRAPH
+ {0xBCFA, 0x734E}, //4330 #CJK UNIFIED IDEOGRAPH
+ {0xBCFB, 0x7357}, //4331 #CJK UNIFIED IDEOGRAPH
+ {0xBCFC, 0x7469}, //4332 #CJK UNIFIED IDEOGRAPH
+ {0xBCFD, 0x748B}, //4333 #CJK UNIFIED IDEOGRAPH
+ {0xBCFE, 0x7483}, //4334 #CJK UNIFIED IDEOGRAPH
+ {0xBD40, 0x747E}, //4335 #CJK UNIFIED IDEOGRAPH
+ {0xBD41, 0x7480}, //4336 #CJK UNIFIED IDEOGRAPH
+ {0xBD42, 0x757F}, //4337 #CJK UNIFIED IDEOGRAPH
+ {0xBD43, 0x7620}, //4338 #CJK UNIFIED IDEOGRAPH
+ {0xBD44, 0x7629}, //4339 #CJK UNIFIED IDEOGRAPH
+ {0xBD45, 0x761F}, //4340 #CJK UNIFIED IDEOGRAPH
+ {0xBD46, 0x7624}, //4341 #CJK UNIFIED IDEOGRAPH
+ {0xBD47, 0x7626}, //4342 #CJK UNIFIED IDEOGRAPH
+ {0xBD48, 0x7621}, //4343 #CJK UNIFIED IDEOGRAPH
+ {0xBD49, 0x7622}, //4344 #CJK UNIFIED IDEOGRAPH
+ {0xBD4A, 0x769A}, //4345 #CJK UNIFIED IDEOGRAPH
+ {0xBD4B, 0x76BA}, //4346 #CJK UNIFIED IDEOGRAPH
+ {0xBD4C, 0x76E4}, //4347 #CJK UNIFIED IDEOGRAPH
+ {0xBD4D, 0x778E}, //4348 #CJK UNIFIED IDEOGRAPH
+ {0xBD4E, 0x7787}, //4349 #CJK UNIFIED IDEOGRAPH
+ {0xBD4F, 0x778C}, //4350 #CJK UNIFIED IDEOGRAPH
+ {0xBD50, 0x7791}, //4351 #CJK UNIFIED IDEOGRAPH
+ {0xBD51, 0x778B}, //4352 #CJK UNIFIED IDEOGRAPH
+ {0xBD52, 0x78CB}, //4353 #CJK UNIFIED IDEOGRAPH
+ {0xBD53, 0x78C5}, //4354 #CJK UNIFIED IDEOGRAPH
+ {0xBD54, 0x78BA}, //4355 #CJK UNIFIED IDEOGRAPH
+ {0xBD55, 0x78CA}, //4356 #CJK UNIFIED IDEOGRAPH
+ {0xBD56, 0x78BE}, //4357 #CJK UNIFIED IDEOGRAPH
+ {0xBD57, 0x78D5}, //4358 #CJK UNIFIED IDEOGRAPH
+ {0xBD58, 0x78BC}, //4359 #CJK UNIFIED IDEOGRAPH
+ {0xBD59, 0x78D0}, //4360 #CJK UNIFIED IDEOGRAPH
+ {0xBD5A, 0x7A3F}, //4361 #CJK UNIFIED IDEOGRAPH
+ {0xBD5B, 0x7A3C}, //4362 #CJK UNIFIED IDEOGRAPH
+ {0xBD5C, 0x7A40}, //4363 #CJK UNIFIED IDEOGRAPH
+ {0xBD5D, 0x7A3D}, //4364 #CJK UNIFIED IDEOGRAPH
+ {0xBD5E, 0x7A37}, //4365 #CJK UNIFIED IDEOGRAPH
+ {0xBD5F, 0x7A3B}, //4366 #CJK UNIFIED IDEOGRAPH
+ {0xBD60, 0x7AAF}, //4367 #CJK UNIFIED IDEOGRAPH
+ {0xBD61, 0x7AAE}, //4368 #CJK UNIFIED IDEOGRAPH
+ {0xBD62, 0x7BAD}, //4369 #CJK UNIFIED IDEOGRAPH
+ {0xBD63, 0x7BB1}, //4370 #CJK UNIFIED IDEOGRAPH
+ {0xBD64, 0x7BC4}, //4371 #CJK UNIFIED IDEOGRAPH
+ {0xBD65, 0x7BB4}, //4372 #CJK UNIFIED IDEOGRAPH
+ {0xBD66, 0x7BC6}, //4373 #CJK UNIFIED IDEOGRAPH
+ {0xBD67, 0x7BC7}, //4374 #CJK UNIFIED IDEOGRAPH
+ {0xBD68, 0x7BC1}, //4375 #CJK UNIFIED IDEOGRAPH
+ {0xBD69, 0x7BA0}, //4376 #CJK UNIFIED IDEOGRAPH
+ {0xBD6A, 0x7BCC}, //4377 #CJK UNIFIED IDEOGRAPH
+ {0xBD6B, 0x7CCA}, //4378 #CJK UNIFIED IDEOGRAPH
+ {0xBD6C, 0x7DE0}, //4379 #CJK UNIFIED IDEOGRAPH
+ {0xBD6D, 0x7DF4}, //4380 #CJK UNIFIED IDEOGRAPH
+ {0xBD6E, 0x7DEF}, //4381 #CJK UNIFIED IDEOGRAPH
+ {0xBD6F, 0x7DFB}, //4382 #CJK UNIFIED IDEOGRAPH
+ {0xBD70, 0x7DD8}, //4383 #CJK UNIFIED IDEOGRAPH
+ {0xBD71, 0x7DEC}, //4384 #CJK UNIFIED IDEOGRAPH
+ {0xBD72, 0x7DDD}, //4385 #CJK UNIFIED IDEOGRAPH
+ {0xBD73, 0x7DE8}, //4386 #CJK UNIFIED IDEOGRAPH
+ {0xBD74, 0x7DE3}, //4387 #CJK UNIFIED IDEOGRAPH
+ {0xBD75, 0x7DDA}, //4388 #CJK UNIFIED IDEOGRAPH
+ {0xBD76, 0x7DDE}, //4389 #CJK UNIFIED IDEOGRAPH
+ {0xBD77, 0x7DE9}, //4390 #CJK UNIFIED IDEOGRAPH
+ {0xBD78, 0x7D9E}, //4391 #CJK UNIFIED IDEOGRAPH
+ {0xBD79, 0x7DD9}, //4392 #CJK UNIFIED IDEOGRAPH
+ {0xBD7A, 0x7DF2}, //4393 #CJK UNIFIED IDEOGRAPH
+ {0xBD7B, 0x7DF9}, //4394 #CJK UNIFIED IDEOGRAPH
+ {0xBD7C, 0x7F75}, //4395 #CJK UNIFIED IDEOGRAPH
+ {0xBD7D, 0x7F77}, //4396 #CJK UNIFIED IDEOGRAPH
+ {0xBD7E, 0x7FAF}, //4397 #CJK UNIFIED IDEOGRAPH
+ {0xBDA1, 0x7FE9}, //4398 #CJK UNIFIED IDEOGRAPH
+ {0xBDA2, 0x8026}, //4399 #CJK UNIFIED IDEOGRAPH
+ {0xBDA3, 0x819B}, //4400 #CJK UNIFIED IDEOGRAPH
+ {0xBDA4, 0x819C}, //4401 #CJK UNIFIED IDEOGRAPH
+ {0xBDA5, 0x819D}, //4402 #CJK UNIFIED IDEOGRAPH
+ {0xBDA6, 0x81A0}, //4403 #CJK UNIFIED IDEOGRAPH
+ {0xBDA7, 0x819A}, //4404 #CJK UNIFIED IDEOGRAPH
+ {0xBDA8, 0x8198}, //4405 #CJK UNIFIED IDEOGRAPH
+ {0xBDA9, 0x8517}, //4406 #CJK UNIFIED IDEOGRAPH
+ {0xBDAA, 0x853D}, //4407 #CJK UNIFIED IDEOGRAPH
+ {0xBDAB, 0x851A}, //4408 #CJK UNIFIED IDEOGRAPH
+ {0xBDAC, 0x84EE}, //4409 #CJK UNIFIED IDEOGRAPH
+ {0xBDAD, 0x852C}, //4410 #CJK UNIFIED IDEOGRAPH
+ {0xBDAE, 0x852D}, //4411 #CJK UNIFIED IDEOGRAPH
+ {0xBDAF, 0x8513}, //4412 #CJK UNIFIED IDEOGRAPH
+ {0xBDB0, 0x8511}, //4413 #CJK UNIFIED IDEOGRAPH
+ {0xBDB1, 0x8523}, //4414 #CJK UNIFIED IDEOGRAPH
+ {0xBDB2, 0x8521}, //4415 #CJK UNIFIED IDEOGRAPH
+ {0xBDB3, 0x8514}, //4416 #CJK UNIFIED IDEOGRAPH
+ {0xBDB4, 0x84EC}, //4417 #CJK UNIFIED IDEOGRAPH
+ {0xBDB5, 0x8525}, //4418 #CJK UNIFIED IDEOGRAPH
+ {0xBDB6, 0x84FF}, //4419 #CJK UNIFIED IDEOGRAPH
+ {0xBDB7, 0x8506}, //4420 #CJK UNIFIED IDEOGRAPH
+ {0xBDB8, 0x8782}, //4421 #CJK UNIFIED IDEOGRAPH
+ {0xBDB9, 0x8774}, //4422 #CJK UNIFIED IDEOGRAPH
+ {0xBDBA, 0x8776}, //4423 #CJK UNIFIED IDEOGRAPH
+ {0xBDBB, 0x8760}, //4424 #CJK UNIFIED IDEOGRAPH
+ {0xBDBC, 0x8766}, //4425 #CJK UNIFIED IDEOGRAPH
+ {0xBDBD, 0x8778}, //4426 #CJK UNIFIED IDEOGRAPH
+ {0xBDBE, 0x8768}, //4427 #CJK UNIFIED IDEOGRAPH
+ {0xBDBF, 0x8759}, //4428 #CJK UNIFIED IDEOGRAPH
+ {0xBDC0, 0x8757}, //4429 #CJK UNIFIED IDEOGRAPH
+ {0xBDC1, 0x874C}, //4430 #CJK UNIFIED IDEOGRAPH
+ {0xBDC2, 0x8753}, //4431 #CJK UNIFIED IDEOGRAPH
+ {0xBDC3, 0x885B}, //4432 #CJK UNIFIED IDEOGRAPH
+ {0xBDC4, 0x885D}, //4433 #CJK UNIFIED IDEOGRAPH
+ {0xBDC5, 0x8910}, //4434 #CJK UNIFIED IDEOGRAPH
+ {0xBDC6, 0x8907}, //4435 #CJK UNIFIED IDEOGRAPH
+ {0xBDC7, 0x8912}, //4436 #CJK UNIFIED IDEOGRAPH
+ {0xBDC8, 0x8913}, //4437 #CJK UNIFIED IDEOGRAPH
+ {0xBDC9, 0x8915}, //4438 #CJK UNIFIED IDEOGRAPH
+ {0xBDCA, 0x890A}, //4439 #CJK UNIFIED IDEOGRAPH
+ {0xBDCB, 0x8ABC}, //4440 #CJK UNIFIED IDEOGRAPH
+ {0xBDCC, 0x8AD2}, //4441 #CJK UNIFIED IDEOGRAPH
+ {0xBDCD, 0x8AC7}, //4442 #CJK UNIFIED IDEOGRAPH
+ {0xBDCE, 0x8AC4}, //4443 #CJK UNIFIED IDEOGRAPH
+ {0xBDCF, 0x8A95}, //4444 #CJK UNIFIED IDEOGRAPH
+ {0xBDD0, 0x8ACB}, //4445 #CJK UNIFIED IDEOGRAPH
+ {0xBDD1, 0x8AF8}, //4446 #CJK UNIFIED IDEOGRAPH
+ {0xBDD2, 0x8AB2}, //4447 #CJK UNIFIED IDEOGRAPH
+ {0xBDD3, 0x8AC9}, //4448 #CJK UNIFIED IDEOGRAPH
+ {0xBDD4, 0x8AC2}, //4449 #CJK UNIFIED IDEOGRAPH
+ {0xBDD5, 0x8ABF}, //4450 #CJK UNIFIED IDEOGRAPH
+ {0xBDD6, 0x8AB0}, //4451 #CJK UNIFIED IDEOGRAPH
+ {0xBDD7, 0x8AD6}, //4452 #CJK UNIFIED IDEOGRAPH
+ {0xBDD8, 0x8ACD}, //4453 #CJK UNIFIED IDEOGRAPH
+ {0xBDD9, 0x8AB6}, //4454 #CJK UNIFIED IDEOGRAPH
+ {0xBDDA, 0x8AB9}, //4455 #CJK UNIFIED IDEOGRAPH
+ {0xBDDB, 0x8ADB}, //4456 #CJK UNIFIED IDEOGRAPH
+ {0xBDDC, 0x8C4C}, //4457 #CJK UNIFIED IDEOGRAPH
+ {0xBDDD, 0x8C4E}, //4458 #CJK UNIFIED IDEOGRAPH
+ {0xBDDE, 0x8C6C}, //4459 #CJK UNIFIED IDEOGRAPH
+ {0xBDDF, 0x8CE0}, //4460 #CJK UNIFIED IDEOGRAPH
+ {0xBDE0, 0x8CDE}, //4461 #CJK UNIFIED IDEOGRAPH
+ {0xBDE1, 0x8CE6}, //4462 #CJK UNIFIED IDEOGRAPH
+ {0xBDE2, 0x8CE4}, //4463 #CJK UNIFIED IDEOGRAPH
+ {0xBDE3, 0x8CEC}, //4464 #CJK UNIFIED IDEOGRAPH
+ {0xBDE4, 0x8CED}, //4465 #CJK UNIFIED IDEOGRAPH
+ {0xBDE5, 0x8CE2}, //4466 #CJK UNIFIED IDEOGRAPH
+ {0xBDE6, 0x8CE3}, //4467 #CJK UNIFIED IDEOGRAPH
+ {0xBDE7, 0x8CDC}, //4468 #CJK UNIFIED IDEOGRAPH
+ {0xBDE8, 0x8CEA}, //4469 #CJK UNIFIED IDEOGRAPH
+ {0xBDE9, 0x8CE1}, //4470 #CJK UNIFIED IDEOGRAPH
+ {0xBDEA, 0x8D6D}, //4471 #CJK UNIFIED IDEOGRAPH
+ {0xBDEB, 0x8D9F}, //4472 #CJK UNIFIED IDEOGRAPH
+ {0xBDEC, 0x8DA3}, //4473 #CJK UNIFIED IDEOGRAPH
+ {0xBDED, 0x8E2B}, //4474 #CJK UNIFIED IDEOGRAPH
+ {0xBDEE, 0x8E10}, //4475 #CJK UNIFIED IDEOGRAPH
+ {0xBDEF, 0x8E1D}, //4476 #CJK UNIFIED IDEOGRAPH
+ {0xBDF0, 0x8E22}, //4477 #CJK UNIFIED IDEOGRAPH
+ {0xBDF1, 0x8E0F}, //4478 #CJK UNIFIED IDEOGRAPH
+ {0xBDF2, 0x8E29}, //4479 #CJK UNIFIED IDEOGRAPH
+ {0xBDF3, 0x8E1F}, //4480 #CJK UNIFIED IDEOGRAPH
+ {0xBDF4, 0x8E21}, //4481 #CJK UNIFIED IDEOGRAPH
+ {0xBDF5, 0x8E1E}, //4482 #CJK UNIFIED IDEOGRAPH
+ {0xBDF6, 0x8EBA}, //4483 #CJK UNIFIED IDEOGRAPH
+ {0xBDF7, 0x8F1D}, //4484 #CJK UNIFIED IDEOGRAPH
+ {0xBDF8, 0x8F1B}, //4485 #CJK UNIFIED IDEOGRAPH
+ {0xBDF9, 0x8F1F}, //4486 #CJK UNIFIED IDEOGRAPH
+ {0xBDFA, 0x8F29}, //4487 #CJK UNIFIED IDEOGRAPH
+ {0xBDFB, 0x8F26}, //4488 #CJK UNIFIED IDEOGRAPH
+ {0xBDFC, 0x8F2A}, //4489 #CJK UNIFIED IDEOGRAPH
+ {0xBDFD, 0x8F1C}, //4490 #CJK UNIFIED IDEOGRAPH
+ {0xBDFE, 0x8F1E}, //4491 #CJK UNIFIED IDEOGRAPH
+ {0xBE40, 0x8F25}, //4492 #CJK UNIFIED IDEOGRAPH
+ {0xBE41, 0x9069}, //4493 #CJK UNIFIED IDEOGRAPH
+ {0xBE42, 0x906E}, //4494 #CJK UNIFIED IDEOGRAPH
+ {0xBE43, 0x9068}, //4495 #CJK UNIFIED IDEOGRAPH
+ {0xBE44, 0x906D}, //4496 #CJK UNIFIED IDEOGRAPH
+ {0xBE45, 0x9077}, //4497 #CJK UNIFIED IDEOGRAPH
+ {0xBE46, 0x9130}, //4498 #CJK UNIFIED IDEOGRAPH
+ {0xBE47, 0x912D}, //4499 #CJK UNIFIED IDEOGRAPH
+ {0xBE48, 0x9127}, //4500 #CJK UNIFIED IDEOGRAPH
+ {0xBE49, 0x9131}, //4501 #CJK UNIFIED IDEOGRAPH
+ {0xBE4A, 0x9187}, //4502 #CJK UNIFIED IDEOGRAPH
+ {0xBE4B, 0x9189}, //4503 #CJK UNIFIED IDEOGRAPH
+ {0xBE4C, 0x918B}, //4504 #CJK UNIFIED IDEOGRAPH
+ {0xBE4D, 0x9183}, //4505 #CJK UNIFIED IDEOGRAPH
+ {0xBE4E, 0x92C5}, //4506 #CJK UNIFIED IDEOGRAPH
+ {0xBE4F, 0x92BB}, //4507 #CJK UNIFIED IDEOGRAPH
+ {0xBE50, 0x92B7}, //4508 #CJK UNIFIED IDEOGRAPH
+ {0xBE51, 0x92EA}, //4509 #CJK UNIFIED IDEOGRAPH
+ {0xBE52, 0x92AC}, //4510 #CJK UNIFIED IDEOGRAPH
+ {0xBE53, 0x92E4}, //4511 #CJK UNIFIED IDEOGRAPH
+ {0xBE54, 0x92C1}, //4512 #CJK UNIFIED IDEOGRAPH
+ {0xBE55, 0x92B3}, //4513 #CJK UNIFIED IDEOGRAPH
+ {0xBE56, 0x92BC}, //4514 #CJK UNIFIED IDEOGRAPH
+ {0xBE57, 0x92D2}, //4515 #CJK UNIFIED IDEOGRAPH
+ {0xBE58, 0x92C7}, //4516 #CJK UNIFIED IDEOGRAPH
+ {0xBE59, 0x92F0}, //4517 #CJK UNIFIED IDEOGRAPH
+ {0xBE5A, 0x92B2}, //4518 #CJK UNIFIED IDEOGRAPH
+ {0xBE5B, 0x95AD}, //4519 #CJK UNIFIED IDEOGRAPH
+ {0xBE5C, 0x95B1}, //4520 #CJK UNIFIED IDEOGRAPH
+ {0xBE5D, 0x9704}, //4521 #CJK UNIFIED IDEOGRAPH
+ {0xBE5E, 0x9706}, //4522 #CJK UNIFIED IDEOGRAPH
+ {0xBE5F, 0x9707}, //4523 #CJK UNIFIED IDEOGRAPH
+ {0xBE60, 0x9709}, //4524 #CJK UNIFIED IDEOGRAPH
+ {0xBE61, 0x9760}, //4525 #CJK UNIFIED IDEOGRAPH
+ {0xBE62, 0x978D}, //4526 #CJK UNIFIED IDEOGRAPH
+ {0xBE63, 0x978B}, //4527 #CJK UNIFIED IDEOGRAPH
+ {0xBE64, 0x978F}, //4528 #CJK UNIFIED IDEOGRAPH
+ {0xBE65, 0x9821}, //4529 #CJK UNIFIED IDEOGRAPH
+ {0xBE66, 0x982B}, //4530 #CJK UNIFIED IDEOGRAPH
+ {0xBE67, 0x981C}, //4531 #CJK UNIFIED IDEOGRAPH
+ {0xBE68, 0x98B3}, //4532 #CJK UNIFIED IDEOGRAPH
+ {0xBE69, 0x990A}, //4533 #CJK UNIFIED IDEOGRAPH
+ {0xBE6A, 0x9913}, //4534 #CJK UNIFIED IDEOGRAPH
+ {0xBE6B, 0x9912}, //4535 #CJK UNIFIED IDEOGRAPH
+ {0xBE6C, 0x9918}, //4536 #CJK UNIFIED IDEOGRAPH
+ {0xBE6D, 0x99DD}, //4537 #CJK UNIFIED IDEOGRAPH
+ {0xBE6E, 0x99D0}, //4538 #CJK UNIFIED IDEOGRAPH
+ {0xBE6F, 0x99DF}, //4539 #CJK UNIFIED IDEOGRAPH
+ {0xBE70, 0x99DB}, //4540 #CJK UNIFIED IDEOGRAPH
+ {0xBE71, 0x99D1}, //4541 #CJK UNIFIED IDEOGRAPH
+ {0xBE72, 0x99D5}, //4542 #CJK UNIFIED IDEOGRAPH
+ {0xBE73, 0x99D2}, //4543 #CJK UNIFIED IDEOGRAPH
+ {0xBE74, 0x99D9}, //4544 #CJK UNIFIED IDEOGRAPH
+ {0xBE75, 0x9AB7}, //4545 #CJK UNIFIED IDEOGRAPH
+ {0xBE76, 0x9AEE}, //4546 #CJK UNIFIED IDEOGRAPH
+ {0xBE77, 0x9AEF}, //4547 #CJK UNIFIED IDEOGRAPH
+ {0xBE78, 0x9B27}, //4548 #CJK UNIFIED IDEOGRAPH
+ {0xBE79, 0x9B45}, //4549 #CJK UNIFIED IDEOGRAPH
+ {0xBE7A, 0x9B44}, //4550 #CJK UNIFIED IDEOGRAPH
+ {0xBE7B, 0x9B77}, //4551 #CJK UNIFIED IDEOGRAPH
+ {0xBE7C, 0x9B6F}, //4552 #CJK UNIFIED IDEOGRAPH
+ {0xBE7D, 0x9D06}, //4553 #CJK UNIFIED IDEOGRAPH
+ {0xBE7E, 0x9D09}, //4554 #CJK UNIFIED IDEOGRAPH
+ {0xBEA1, 0x9D03}, //4555 #CJK UNIFIED IDEOGRAPH
+ {0xBEA2, 0x9EA9}, //4556 #CJK UNIFIED IDEOGRAPH
+ {0xBEA3, 0x9EBE}, //4557 #CJK UNIFIED IDEOGRAPH
+ {0xBEA4, 0x9ECE}, //4558 #CJK UNIFIED IDEOGRAPH
+ {0xBEA5, 0x58A8}, //4559 #CJK UNIFIED IDEOGRAPH
+ {0xBEA6, 0x9F52}, //4560 #CJK UNIFIED IDEOGRAPH
+ {0xBEA7, 0x5112}, //4561 #CJK UNIFIED IDEOGRAPH
+ {0xBEA8, 0x5118}, //4562 #CJK UNIFIED IDEOGRAPH
+ {0xBEA9, 0x5114}, //4563 #CJK UNIFIED IDEOGRAPH
+ {0xBEAA, 0x5110}, //4564 #CJK UNIFIED IDEOGRAPH
+ {0xBEAB, 0x5115}, //4565 #CJK UNIFIED IDEOGRAPH
+ {0xBEAC, 0x5180}, //4566 #CJK UNIFIED IDEOGRAPH
+ {0xBEAD, 0x51AA}, //4567 #CJK UNIFIED IDEOGRAPH
+ {0xBEAE, 0x51DD}, //4568 #CJK UNIFIED IDEOGRAPH
+ {0xBEAF, 0x5291}, //4569 #CJK UNIFIED IDEOGRAPH
+ {0xBEB0, 0x5293}, //4570 #CJK UNIFIED IDEOGRAPH
+ {0xBEB1, 0x52F3}, //4571 #CJK UNIFIED IDEOGRAPH
+ {0xBEB2, 0x5659}, //4572 #CJK UNIFIED IDEOGRAPH
+ {0xBEB3, 0x566B}, //4573 #CJK UNIFIED IDEOGRAPH
+ {0xBEB4, 0x5679}, //4574 #CJK UNIFIED IDEOGRAPH
+ {0xBEB5, 0x5669}, //4575 #CJK UNIFIED IDEOGRAPH
+ {0xBEB6, 0x5664}, //4576 #CJK UNIFIED IDEOGRAPH
+ {0xBEB7, 0x5678}, //4577 #CJK UNIFIED IDEOGRAPH
+ {0xBEB8, 0x566A}, //4578 #CJK UNIFIED IDEOGRAPH
+ {0xBEB9, 0x5668}, //4579 #CJK UNIFIED IDEOGRAPH
+ {0xBEBA, 0x5665}, //4580 #CJK UNIFIED IDEOGRAPH
+ {0xBEBB, 0x5671}, //4581 #CJK UNIFIED IDEOGRAPH
+ {0xBEBC, 0x566F}, //4582 #CJK UNIFIED IDEOGRAPH
+ {0xBEBD, 0x566C}, //4583 #CJK UNIFIED IDEOGRAPH
+ {0xBEBE, 0x5662}, //4584 #CJK UNIFIED IDEOGRAPH
+ {0xBEBF, 0x5676}, //4585 #CJK UNIFIED IDEOGRAPH
+ {0xBEC0, 0x58C1}, //4586 #CJK UNIFIED IDEOGRAPH
+ {0xBEC1, 0x58BE}, //4587 #CJK UNIFIED IDEOGRAPH
+ {0xBEC2, 0x58C7}, //4588 #CJK UNIFIED IDEOGRAPH
+ {0xBEC3, 0x58C5}, //4589 #CJK UNIFIED IDEOGRAPH
+ {0xBEC4, 0x596E}, //4590 #CJK UNIFIED IDEOGRAPH
+ {0xBEC5, 0x5B1D}, //4591 #CJK UNIFIED IDEOGRAPH
+ {0xBEC6, 0x5B34}, //4592 #CJK UNIFIED IDEOGRAPH
+ {0xBEC7, 0x5B78}, //4593 #CJK UNIFIED IDEOGRAPH
+ {0xBEC8, 0x5BF0}, //4594 #CJK UNIFIED IDEOGRAPH
+ {0xBEC9, 0x5C0E}, //4595 #CJK UNIFIED IDEOGRAPH
+ {0xBECA, 0x5F4A}, //4596 #CJK UNIFIED IDEOGRAPH
+ {0xBECB, 0x61B2}, //4597 #CJK UNIFIED IDEOGRAPH
+ {0xBECC, 0x6191}, //4598 #CJK UNIFIED IDEOGRAPH
+ {0xBECD, 0x61A9}, //4599 #CJK UNIFIED IDEOGRAPH
+ {0xBECE, 0x618A}, //4600 #CJK UNIFIED IDEOGRAPH
+ {0xBECF, 0x61CD}, //4601 #CJK UNIFIED IDEOGRAPH
+ {0xBED0, 0x61B6}, //4602 #CJK UNIFIED IDEOGRAPH
+ {0xBED1, 0x61BE}, //4603 #CJK UNIFIED IDEOGRAPH
+ {0xBED2, 0x61CA}, //4604 #CJK UNIFIED IDEOGRAPH
+ {0xBED3, 0x61C8}, //4605 #CJK UNIFIED IDEOGRAPH
+ {0xBED4, 0x6230}, //4606 #CJK UNIFIED IDEOGRAPH
+ {0xBED5, 0x64C5}, //4607 #CJK UNIFIED IDEOGRAPH
+ {0xBED6, 0x64C1}, //4608 #CJK UNIFIED IDEOGRAPH
+ {0xBED7, 0x64CB}, //4609 #CJK UNIFIED IDEOGRAPH
+ {0xBED8, 0x64BB}, //4610 #CJK UNIFIED IDEOGRAPH
+ {0xBED9, 0x64BC}, //4611 #CJK UNIFIED IDEOGRAPH
+ {0xBEDA, 0x64DA}, //4612 #CJK UNIFIED IDEOGRAPH
+ {0xBEDB, 0x64C4}, //4613 #CJK UNIFIED IDEOGRAPH
+ {0xBEDC, 0x64C7}, //4614 #CJK UNIFIED IDEOGRAPH
+ {0xBEDD, 0x64C2}, //4615 #CJK UNIFIED IDEOGRAPH
+ {0xBEDE, 0x64CD}, //4616 #CJK UNIFIED IDEOGRAPH
+ {0xBEDF, 0x64BF}, //4617 #CJK UNIFIED IDEOGRAPH
+ {0xBEE0, 0x64D2}, //4618 #CJK UNIFIED IDEOGRAPH
+ {0xBEE1, 0x64D4}, //4619 #CJK UNIFIED IDEOGRAPH
+ {0xBEE2, 0x64BE}, //4620 #CJK UNIFIED IDEOGRAPH
+ {0xBEE3, 0x6574}, //4621 #CJK UNIFIED IDEOGRAPH
+ {0xBEE4, 0x66C6}, //4622 #CJK UNIFIED IDEOGRAPH
+ {0xBEE5, 0x66C9}, //4623 #CJK UNIFIED IDEOGRAPH
+ {0xBEE6, 0x66B9}, //4624 #CJK UNIFIED IDEOGRAPH
+ {0xBEE7, 0x66C4}, //4625 #CJK UNIFIED IDEOGRAPH
+ {0xBEE8, 0x66C7}, //4626 #CJK UNIFIED IDEOGRAPH
+ {0xBEE9, 0x66B8}, //4627 #CJK UNIFIED IDEOGRAPH
+ {0xBEEA, 0x6A3D}, //4628 #CJK UNIFIED IDEOGRAPH
+ {0xBEEB, 0x6A38}, //4629 #CJK UNIFIED IDEOGRAPH
+ {0xBEEC, 0x6A3A}, //4630 #CJK UNIFIED IDEOGRAPH
+ {0xBEED, 0x6A59}, //4631 #CJK UNIFIED IDEOGRAPH
+ {0xBEEE, 0x6A6B}, //4632 #CJK UNIFIED IDEOGRAPH
+ {0xBEEF, 0x6A58}, //4633 #CJK UNIFIED IDEOGRAPH
+ {0xBEF0, 0x6A39}, //4634 #CJK UNIFIED IDEOGRAPH
+ {0xBEF1, 0x6A44}, //4635 #CJK UNIFIED IDEOGRAPH
+ {0xBEF2, 0x6A62}, //4636 #CJK UNIFIED IDEOGRAPH
+ {0xBEF3, 0x6A61}, //4637 #CJK UNIFIED IDEOGRAPH
+ {0xBEF4, 0x6A4B}, //4638 #CJK UNIFIED IDEOGRAPH
+ {0xBEF5, 0x6A47}, //4639 #CJK UNIFIED IDEOGRAPH
+ {0xBEF6, 0x6A35}, //4640 #CJK UNIFIED IDEOGRAPH
+ {0xBEF7, 0x6A5F}, //4641 #CJK UNIFIED IDEOGRAPH
+ {0xBEF8, 0x6A48}, //4642 #CJK UNIFIED IDEOGRAPH
+ {0xBEF9, 0x6B59}, //4643 #CJK UNIFIED IDEOGRAPH
+ {0xBEFA, 0x6B77}, //4644 #CJK UNIFIED IDEOGRAPH
+ {0xBEFB, 0x6C05}, //4645 #CJK UNIFIED IDEOGRAPH
+ {0xBEFC, 0x6FC2}, //4646 #CJK UNIFIED IDEOGRAPH
+ {0xBEFD, 0x6FB1}, //4647 #CJK UNIFIED IDEOGRAPH
+ {0xBEFE, 0x6FA1}, //4648 #CJK UNIFIED IDEOGRAPH
+ {0xBF40, 0x6FC3}, //4649 #CJK UNIFIED IDEOGRAPH
+ {0xBF41, 0x6FA4}, //4650 #CJK UNIFIED IDEOGRAPH
+ {0xBF42, 0x6FC1}, //4651 #CJK UNIFIED IDEOGRAPH
+ {0xBF43, 0x6FA7}, //4652 #CJK UNIFIED IDEOGRAPH
+ {0xBF44, 0x6FB3}, //4653 #CJK UNIFIED IDEOGRAPH
+ {0xBF45, 0x6FC0}, //4654 #CJK UNIFIED IDEOGRAPH
+ {0xBF46, 0x6FB9}, //4655 #CJK UNIFIED IDEOGRAPH
+ {0xBF47, 0x6FB6}, //4656 #CJK UNIFIED IDEOGRAPH
+ {0xBF48, 0x6FA6}, //4657 #CJK UNIFIED IDEOGRAPH
+ {0xBF49, 0x6FA0}, //4658 #CJK UNIFIED IDEOGRAPH
+ {0xBF4A, 0x6FB4}, //4659 #CJK UNIFIED IDEOGRAPH
+ {0xBF4B, 0x71BE}, //4660 #CJK UNIFIED IDEOGRAPH
+ {0xBF4C, 0x71C9}, //4661 #CJK UNIFIED IDEOGRAPH
+ {0xBF4D, 0x71D0}, //4662 #CJK UNIFIED IDEOGRAPH
+ {0xBF4E, 0x71D2}, //4663 #CJK UNIFIED IDEOGRAPH
+ {0xBF4F, 0x71C8}, //4664 #CJK UNIFIED IDEOGRAPH
+ {0xBF50, 0x71D5}, //4665 #CJK UNIFIED IDEOGRAPH
+ {0xBF51, 0x71B9}, //4666 #CJK UNIFIED IDEOGRAPH
+ {0xBF52, 0x71CE}, //4667 #CJK UNIFIED IDEOGRAPH
+ {0xBF53, 0x71D9}, //4668 #CJK UNIFIED IDEOGRAPH
+ {0xBF54, 0x71DC}, //4669 #CJK UNIFIED IDEOGRAPH
+ {0xBF55, 0x71C3}, //4670 #CJK UNIFIED IDEOGRAPH
+ {0xBF56, 0x71C4}, //4671 #CJK UNIFIED IDEOGRAPH
+ {0xBF57, 0x7368}, //4672 #CJK UNIFIED IDEOGRAPH
+ {0xBF58, 0x749C}, //4673 #CJK UNIFIED IDEOGRAPH
+ {0xBF59, 0x74A3}, //4674 #CJK UNIFIED IDEOGRAPH
+ {0xBF5A, 0x7498}, //4675 #CJK UNIFIED IDEOGRAPH
+ {0xBF5B, 0x749F}, //4676 #CJK UNIFIED IDEOGRAPH
+ {0xBF5C, 0x749E}, //4677 #CJK UNIFIED IDEOGRAPH
+ {0xBF5D, 0x74E2}, //4678 #CJK UNIFIED IDEOGRAPH
+ {0xBF5E, 0x750C}, //4679 #CJK UNIFIED IDEOGRAPH
+ {0xBF5F, 0x750D}, //4680 #CJK UNIFIED IDEOGRAPH
+ {0xBF60, 0x7634}, //4681 #CJK UNIFIED IDEOGRAPH
+ {0xBF61, 0x7638}, //4682 #CJK UNIFIED IDEOGRAPH
+ {0xBF62, 0x763A}, //4683 #CJK UNIFIED IDEOGRAPH
+ {0xBF63, 0x76E7}, //4684 #CJK UNIFIED IDEOGRAPH
+ {0xBF64, 0x76E5}, //4685 #CJK UNIFIED IDEOGRAPH
+ {0xBF65, 0x77A0}, //4686 #CJK UNIFIED IDEOGRAPH
+ {0xBF66, 0x779E}, //4687 #CJK UNIFIED IDEOGRAPH
+ {0xBF67, 0x779F}, //4688 #CJK UNIFIED IDEOGRAPH
+ {0xBF68, 0x77A5}, //4689 #CJK UNIFIED IDEOGRAPH
+ {0xBF69, 0x78E8}, //4690 #CJK UNIFIED IDEOGRAPH
+ {0xBF6A, 0x78DA}, //4691 #CJK UNIFIED IDEOGRAPH
+ {0xBF6B, 0x78EC}, //4692 #CJK UNIFIED IDEOGRAPH
+ {0xBF6C, 0x78E7}, //4693 #CJK UNIFIED IDEOGRAPH
+ {0xBF6D, 0x79A6}, //4694 #CJK UNIFIED IDEOGRAPH
+ {0xBF6E, 0x7A4D}, //4695 #CJK UNIFIED IDEOGRAPH
+ {0xBF6F, 0x7A4E}, //4696 #CJK UNIFIED IDEOGRAPH
+ {0xBF70, 0x7A46}, //4697 #CJK UNIFIED IDEOGRAPH
+ {0xBF71, 0x7A4C}, //4698 #CJK UNIFIED IDEOGRAPH
+ {0xBF72, 0x7A4B}, //4699 #CJK UNIFIED IDEOGRAPH
+ {0xBF73, 0x7ABA}, //4700 #CJK UNIFIED IDEOGRAPH
+ {0xBF74, 0x7BD9}, //4701 #CJK UNIFIED IDEOGRAPH
+ {0xBF75, 0x7C11}, //4702 #CJK UNIFIED IDEOGRAPH
+ {0xBF76, 0x7BC9}, //4703 #CJK UNIFIED IDEOGRAPH
+ {0xBF77, 0x7BE4}, //4704 #CJK UNIFIED IDEOGRAPH
+ {0xBF78, 0x7BDB}, //4705 #CJK UNIFIED IDEOGRAPH
+ {0xBF79, 0x7BE1}, //4706 #CJK UNIFIED IDEOGRAPH
+ {0xBF7A, 0x7BE9}, //4707 #CJK UNIFIED IDEOGRAPH
+ {0xBF7B, 0x7BE6}, //4708 #CJK UNIFIED IDEOGRAPH
+ {0xBF7C, 0x7CD5}, //4709 #CJK UNIFIED IDEOGRAPH
+ {0xBF7D, 0x7CD6}, //4710 #CJK UNIFIED IDEOGRAPH
+ {0xBF7E, 0x7E0A}, //4711 #CJK UNIFIED IDEOGRAPH
+ {0xBFA1, 0x7E11}, //4712 #CJK UNIFIED IDEOGRAPH
+ {0xBFA2, 0x7E08}, //4713 #CJK UNIFIED IDEOGRAPH
+ {0xBFA3, 0x7E1B}, //4714 #CJK UNIFIED IDEOGRAPH
+ {0xBFA4, 0x7E23}, //4715 #CJK UNIFIED IDEOGRAPH
+ {0xBFA5, 0x7E1E}, //4716 #CJK UNIFIED IDEOGRAPH
+ {0xBFA6, 0x7E1D}, //4717 #CJK UNIFIED IDEOGRAPH
+ {0xBFA7, 0x7E09}, //4718 #CJK UNIFIED IDEOGRAPH
+ {0xBFA8, 0x7E10}, //4719 #CJK UNIFIED IDEOGRAPH
+ {0xBFA9, 0x7F79}, //4720 #CJK UNIFIED IDEOGRAPH
+ {0xBFAA, 0x7FB2}, //4721 #CJK UNIFIED IDEOGRAPH
+ {0xBFAB, 0x7FF0}, //4722 #CJK UNIFIED IDEOGRAPH
+ {0xBFAC, 0x7FF1}, //4723 #CJK UNIFIED IDEOGRAPH
+ {0xBFAD, 0x7FEE}, //4724 #CJK UNIFIED IDEOGRAPH
+ {0xBFAE, 0x8028}, //4725 #CJK UNIFIED IDEOGRAPH
+ {0xBFAF, 0x81B3}, //4726 #CJK UNIFIED IDEOGRAPH
+ {0xBFB0, 0x81A9}, //4727 #CJK UNIFIED IDEOGRAPH
+ {0xBFB1, 0x81A8}, //4728 #CJK UNIFIED IDEOGRAPH
+ {0xBFB2, 0x81FB}, //4729 #CJK UNIFIED IDEOGRAPH
+ {0xBFB3, 0x8208}, //4730 #CJK UNIFIED IDEOGRAPH
+ {0xBFB4, 0x8258}, //4731 #CJK UNIFIED IDEOGRAPH
+ {0xBFB5, 0x8259}, //4732 #CJK UNIFIED IDEOGRAPH
+ {0xBFB6, 0x854A}, //4733 #CJK UNIFIED IDEOGRAPH
+ {0xBFB7, 0x8559}, //4734 #CJK UNIFIED IDEOGRAPH
+ {0xBFB8, 0x8548}, //4735 #CJK UNIFIED IDEOGRAPH
+ {0xBFB9, 0x8568}, //4736 #CJK UNIFIED IDEOGRAPH
+ {0xBFBA, 0x8569}, //4737 #CJK UNIFIED IDEOGRAPH
+ {0xBFBB, 0x8543}, //4738 #CJK UNIFIED IDEOGRAPH
+ {0xBFBC, 0x8549}, //4739 #CJK UNIFIED IDEOGRAPH
+ {0xBFBD, 0x856D}, //4740 #CJK UNIFIED IDEOGRAPH
+ {0xBFBE, 0x856A}, //4741 #CJK UNIFIED IDEOGRAPH
+ {0xBFBF, 0x855E}, //4742 #CJK UNIFIED IDEOGRAPH
+ {0xBFC0, 0x8783}, //4743 #CJK UNIFIED IDEOGRAPH
+ {0xBFC1, 0x879F}, //4744 #CJK UNIFIED IDEOGRAPH
+ {0xBFC2, 0x879E}, //4745 #CJK UNIFIED IDEOGRAPH
+ {0xBFC3, 0x87A2}, //4746 #CJK UNIFIED IDEOGRAPH
+ {0xBFC4, 0x878D}, //4747 #CJK UNIFIED IDEOGRAPH
+ {0xBFC5, 0x8861}, //4748 #CJK UNIFIED IDEOGRAPH
+ {0xBFC6, 0x892A}, //4749 #CJK UNIFIED IDEOGRAPH
+ {0xBFC7, 0x8932}, //4750 #CJK UNIFIED IDEOGRAPH
+ {0xBFC8, 0x8925}, //4751 #CJK UNIFIED IDEOGRAPH
+ {0xBFC9, 0x892B}, //4752 #CJK UNIFIED IDEOGRAPH
+ {0xBFCA, 0x8921}, //4753 #CJK UNIFIED IDEOGRAPH
+ {0xBFCB, 0x89AA}, //4754 #CJK UNIFIED IDEOGRAPH
+ {0xBFCC, 0x89A6}, //4755 #CJK UNIFIED IDEOGRAPH
+ {0xBFCD, 0x8AE6}, //4756 #CJK UNIFIED IDEOGRAPH
+ {0xBFCE, 0x8AFA}, //4757 #CJK UNIFIED IDEOGRAPH
+ {0xBFCF, 0x8AEB}, //4758 #CJK UNIFIED IDEOGRAPH
+ {0xBFD0, 0x8AF1}, //4759 #CJK UNIFIED IDEOGRAPH
+ {0xBFD1, 0x8B00}, //4760 #CJK UNIFIED IDEOGRAPH
+ {0xBFD2, 0x8ADC}, //4761 #CJK UNIFIED IDEOGRAPH
+ {0xBFD3, 0x8AE7}, //4762 #CJK UNIFIED IDEOGRAPH
+ {0xBFD4, 0x8AEE}, //4763 #CJK UNIFIED IDEOGRAPH
+ {0xBFD5, 0x8AFE}, //4764 #CJK UNIFIED IDEOGRAPH
+ {0xBFD6, 0x8B01}, //4765 #CJK UNIFIED IDEOGRAPH
+ {0xBFD7, 0x8B02}, //4766 #CJK UNIFIED IDEOGRAPH
+ {0xBFD8, 0x8AF7}, //4767 #CJK UNIFIED IDEOGRAPH
+ {0xBFD9, 0x8AED}, //4768 #CJK UNIFIED IDEOGRAPH
+ {0xBFDA, 0x8AF3}, //4769 #CJK UNIFIED IDEOGRAPH
+ {0xBFDB, 0x8AF6}, //4770 #CJK UNIFIED IDEOGRAPH
+ {0xBFDC, 0x8AFC}, //4771 #CJK UNIFIED IDEOGRAPH
+ {0xBFDD, 0x8C6B}, //4772 #CJK UNIFIED IDEOGRAPH
+ {0xBFDE, 0x8C6D}, //4773 #CJK UNIFIED IDEOGRAPH
+ {0xBFDF, 0x8C93}, //4774 #CJK UNIFIED IDEOGRAPH
+ {0xBFE0, 0x8CF4}, //4775 #CJK UNIFIED IDEOGRAPH
+ {0xBFE1, 0x8E44}, //4776 #CJK UNIFIED IDEOGRAPH
+ {0xBFE2, 0x8E31}, //4777 #CJK UNIFIED IDEOGRAPH
+ {0xBFE3, 0x8E34}, //4778 #CJK UNIFIED IDEOGRAPH
+ {0xBFE4, 0x8E42}, //4779 #CJK UNIFIED IDEOGRAPH
+ {0xBFE5, 0x8E39}, //4780 #CJK UNIFIED IDEOGRAPH
+ {0xBFE6, 0x8E35}, //4781 #CJK UNIFIED IDEOGRAPH
+ {0xBFE7, 0x8F3B}, //4782 #CJK UNIFIED IDEOGRAPH
+ {0xBFE8, 0x8F2F}, //4783 #CJK UNIFIED IDEOGRAPH
+ {0xBFE9, 0x8F38}, //4784 #CJK UNIFIED IDEOGRAPH
+ {0xBFEA, 0x8F33}, //4785 #CJK UNIFIED IDEOGRAPH
+ {0xBFEB, 0x8FA8}, //4786 #CJK UNIFIED IDEOGRAPH
+ {0xBFEC, 0x8FA6}, //4787 #CJK UNIFIED IDEOGRAPH
+ {0xBFED, 0x9075}, //4788 #CJK UNIFIED IDEOGRAPH
+ {0xBFEE, 0x9074}, //4789 #CJK UNIFIED IDEOGRAPH
+ {0xBFEF, 0x9078}, //4790 #CJK UNIFIED IDEOGRAPH
+ {0xBFF0, 0x9072}, //4791 #CJK UNIFIED IDEOGRAPH
+ {0xBFF1, 0x907C}, //4792 #CJK UNIFIED IDEOGRAPH
+ {0xBFF2, 0x907A}, //4793 #CJK UNIFIED IDEOGRAPH
+ {0xBFF3, 0x9134}, //4794 #CJK UNIFIED IDEOGRAPH
+ {0xBFF4, 0x9192}, //4795 #CJK UNIFIED IDEOGRAPH
+ {0xBFF5, 0x9320}, //4796 #CJK UNIFIED IDEOGRAPH
+ {0xBFF6, 0x9336}, //4797 #CJK UNIFIED IDEOGRAPH
+ {0xBFF7, 0x92F8}, //4798 #CJK UNIFIED IDEOGRAPH
+ {0xBFF8, 0x9333}, //4799 #CJK UNIFIED IDEOGRAPH
+ {0xBFF9, 0x932F}, //4800 #CJK UNIFIED IDEOGRAPH
+ {0xBFFA, 0x9322}, //4801 #CJK UNIFIED IDEOGRAPH
+ {0xBFFB, 0x92FC}, //4802 #CJK UNIFIED IDEOGRAPH
+ {0xBFFC, 0x932B}, //4803 #CJK UNIFIED IDEOGRAPH
+ {0xBFFD, 0x9304}, //4804 #CJK UNIFIED IDEOGRAPH
+ {0xBFFE, 0x931A}, //4805 #CJK UNIFIED IDEOGRAPH
+ {0xC040, 0x9310}, //4806 #CJK UNIFIED IDEOGRAPH
+ {0xC041, 0x9326}, //4807 #CJK UNIFIED IDEOGRAPH
+ {0xC042, 0x9321}, //4808 #CJK UNIFIED IDEOGRAPH
+ {0xC043, 0x9315}, //4809 #CJK UNIFIED IDEOGRAPH
+ {0xC044, 0x932E}, //4810 #CJK UNIFIED IDEOGRAPH
+ {0xC045, 0x9319}, //4811 #CJK UNIFIED IDEOGRAPH
+ {0xC046, 0x95BB}, //4812 #CJK UNIFIED IDEOGRAPH
+ {0xC047, 0x96A7}, //4813 #CJK UNIFIED IDEOGRAPH
+ {0xC048, 0x96A8}, //4814 #CJK UNIFIED IDEOGRAPH
+ {0xC049, 0x96AA}, //4815 #CJK UNIFIED IDEOGRAPH
+ {0xC04A, 0x96D5}, //4816 #CJK UNIFIED IDEOGRAPH
+ {0xC04B, 0x970E}, //4817 #CJK UNIFIED IDEOGRAPH
+ {0xC04C, 0x9711}, //4818 #CJK UNIFIED IDEOGRAPH
+ {0xC04D, 0x9716}, //4819 #CJK UNIFIED IDEOGRAPH
+ {0xC04E, 0x970D}, //4820 #CJK UNIFIED IDEOGRAPH
+ {0xC04F, 0x9713}, //4821 #CJK UNIFIED IDEOGRAPH
+ {0xC050, 0x970F}, //4822 #CJK UNIFIED IDEOGRAPH
+ {0xC051, 0x975B}, //4823 #CJK UNIFIED IDEOGRAPH
+ {0xC052, 0x975C}, //4824 #CJK UNIFIED IDEOGRAPH
+ {0xC053, 0x9766}, //4825 #CJK UNIFIED IDEOGRAPH
+ {0xC054, 0x9798}, //4826 #CJK UNIFIED IDEOGRAPH
+ {0xC055, 0x9830}, //4827 #CJK UNIFIED IDEOGRAPH
+ {0xC056, 0x9838}, //4828 #CJK UNIFIED IDEOGRAPH
+ {0xC057, 0x983B}, //4829 #CJK UNIFIED IDEOGRAPH
+ {0xC058, 0x9837}, //4830 #CJK UNIFIED IDEOGRAPH
+ {0xC059, 0x982D}, //4831 #CJK UNIFIED IDEOGRAPH
+ {0xC05A, 0x9839}, //4832 #CJK UNIFIED IDEOGRAPH
+ {0xC05B, 0x9824}, //4833 #CJK UNIFIED IDEOGRAPH
+ {0xC05C, 0x9910}, //4834 #CJK UNIFIED IDEOGRAPH
+ {0xC05D, 0x9928}, //4835 #CJK UNIFIED IDEOGRAPH
+ {0xC05E, 0x991E}, //4836 #CJK UNIFIED IDEOGRAPH
+ {0xC05F, 0x991B}, //4837 #CJK UNIFIED IDEOGRAPH
+ {0xC060, 0x9921}, //4838 #CJK UNIFIED IDEOGRAPH
+ {0xC061, 0x991A}, //4839 #CJK UNIFIED IDEOGRAPH
+ {0xC062, 0x99ED}, //4840 #CJK UNIFIED IDEOGRAPH
+ {0xC063, 0x99E2}, //4841 #CJK UNIFIED IDEOGRAPH
+ {0xC064, 0x99F1}, //4842 #CJK UNIFIED IDEOGRAPH
+ {0xC065, 0x9AB8}, //4843 #CJK UNIFIED IDEOGRAPH
+ {0xC066, 0x9ABC}, //4844 #CJK UNIFIED IDEOGRAPH
+ {0xC067, 0x9AFB}, //4845 #CJK UNIFIED IDEOGRAPH
+ {0xC068, 0x9AED}, //4846 #CJK UNIFIED IDEOGRAPH
+ {0xC069, 0x9B28}, //4847 #CJK UNIFIED IDEOGRAPH
+ {0xC06A, 0x9B91}, //4848 #CJK UNIFIED IDEOGRAPH
+ {0xC06B, 0x9D15}, //4849 #CJK UNIFIED IDEOGRAPH
+ {0xC06C, 0x9D23}, //4850 #CJK UNIFIED IDEOGRAPH
+ {0xC06D, 0x9D26}, //4851 #CJK UNIFIED IDEOGRAPH
+ {0xC06E, 0x9D28}, //4852 #CJK UNIFIED IDEOGRAPH
+ {0xC06F, 0x9D12}, //4853 #CJK UNIFIED IDEOGRAPH
+ {0xC070, 0x9D1B}, //4854 #CJK UNIFIED IDEOGRAPH
+ {0xC071, 0x9ED8}, //4855 #CJK UNIFIED IDEOGRAPH
+ {0xC072, 0x9ED4}, //4856 #CJK UNIFIED IDEOGRAPH
+ {0xC073, 0x9F8D}, //4857 #CJK UNIFIED IDEOGRAPH
+ {0xC074, 0x9F9C}, //4858 #CJK UNIFIED IDEOGRAPH
+ {0xC075, 0x512A}, //4859 #CJK UNIFIED IDEOGRAPH
+ {0xC076, 0x511F}, //4860 #CJK UNIFIED IDEOGRAPH
+ {0xC077, 0x5121}, //4861 #CJK UNIFIED IDEOGRAPH
+ {0xC078, 0x5132}, //4862 #CJK UNIFIED IDEOGRAPH
+ {0xC079, 0x52F5}, //4863 #CJK UNIFIED IDEOGRAPH
+ {0xC07A, 0x568E}, //4864 #CJK UNIFIED IDEOGRAPH
+ {0xC07B, 0x5680}, //4865 #CJK UNIFIED IDEOGRAPH
+ {0xC07C, 0x5690}, //4866 #CJK UNIFIED IDEOGRAPH
+ {0xC07D, 0x5685}, //4867 #CJK UNIFIED IDEOGRAPH
+ {0xC07E, 0x5687}, //4868 #CJK UNIFIED IDEOGRAPH
+ {0xC0A1, 0x568F}, //4869 #CJK UNIFIED IDEOGRAPH
+ {0xC0A2, 0x58D5}, //4870 #CJK UNIFIED IDEOGRAPH
+ {0xC0A3, 0x58D3}, //4871 #CJK UNIFIED IDEOGRAPH
+ {0xC0A4, 0x58D1}, //4872 #CJK UNIFIED IDEOGRAPH
+ {0xC0A5, 0x58CE}, //4873 #CJK UNIFIED IDEOGRAPH
+ {0xC0A6, 0x5B30}, //4874 #CJK UNIFIED IDEOGRAPH
+ {0xC0A7, 0x5B2A}, //4875 #CJK UNIFIED IDEOGRAPH
+ {0xC0A8, 0x5B24}, //4876 #CJK UNIFIED IDEOGRAPH
+ {0xC0A9, 0x5B7A}, //4877 #CJK UNIFIED IDEOGRAPH
+ {0xC0AA, 0x5C37}, //4878 #CJK UNIFIED IDEOGRAPH
+ {0xC0AB, 0x5C68}, //4879 #CJK UNIFIED IDEOGRAPH
+ {0xC0AC, 0x5DBC}, //4880 #CJK UNIFIED IDEOGRAPH
+ {0xC0AD, 0x5DBA}, //4881 #CJK UNIFIED IDEOGRAPH
+ {0xC0AE, 0x5DBD}, //4882 #CJK UNIFIED IDEOGRAPH
+ {0xC0AF, 0x5DB8}, //4883 #CJK UNIFIED IDEOGRAPH
+ {0xC0B0, 0x5E6B}, //4884 #CJK UNIFIED IDEOGRAPH
+ {0xC0B1, 0x5F4C}, //4885 #CJK UNIFIED IDEOGRAPH
+ {0xC0B2, 0x5FBD}, //4886 #CJK UNIFIED IDEOGRAPH
+ {0xC0B3, 0x61C9}, //4887 #CJK UNIFIED IDEOGRAPH
+ {0xC0B4, 0x61C2}, //4888 #CJK UNIFIED IDEOGRAPH
+ {0xC0B5, 0x61C7}, //4889 #CJK UNIFIED IDEOGRAPH
+ {0xC0B6, 0x61E6}, //4890 #CJK UNIFIED IDEOGRAPH
+ {0xC0B7, 0x61CB}, //4891 #CJK UNIFIED IDEOGRAPH
+ {0xC0B8, 0x6232}, //4892 #CJK UNIFIED IDEOGRAPH
+ {0xC0B9, 0x6234}, //4893 #CJK UNIFIED IDEOGRAPH
+ {0xC0BA, 0x64CE}, //4894 #CJK UNIFIED IDEOGRAPH
+ {0xC0BB, 0x64CA}, //4895 #CJK UNIFIED IDEOGRAPH
+ {0xC0BC, 0x64D8}, //4896 #CJK UNIFIED IDEOGRAPH
+ {0xC0BD, 0x64E0}, //4897 #CJK UNIFIED IDEOGRAPH
+ {0xC0BE, 0x64F0}, //4898 #CJK UNIFIED IDEOGRAPH
+ {0xC0BF, 0x64E6}, //4899 #CJK UNIFIED IDEOGRAPH
+ {0xC0C0, 0x64EC}, //4900 #CJK UNIFIED IDEOGRAPH
+ {0xC0C1, 0x64F1}, //4901 #CJK UNIFIED IDEOGRAPH
+ {0xC0C2, 0x64E2}, //4902 #CJK UNIFIED IDEOGRAPH
+ {0xC0C3, 0x64ED}, //4903 #CJK UNIFIED IDEOGRAPH
+ {0xC0C4, 0x6582}, //4904 #CJK UNIFIED IDEOGRAPH
+ {0xC0C5, 0x6583}, //4905 #CJK UNIFIED IDEOGRAPH
+ {0xC0C6, 0x66D9}, //4906 #CJK UNIFIED IDEOGRAPH
+ {0xC0C7, 0x66D6}, //4907 #CJK UNIFIED IDEOGRAPH
+ {0xC0C8, 0x6A80}, //4908 #CJK UNIFIED IDEOGRAPH
+ {0xC0C9, 0x6A94}, //4909 #CJK UNIFIED IDEOGRAPH
+ {0xC0CA, 0x6A84}, //4910 #CJK UNIFIED IDEOGRAPH
+ {0xC0CB, 0x6AA2}, //4911 #CJK UNIFIED IDEOGRAPH
+ {0xC0CC, 0x6A9C}, //4912 #CJK UNIFIED IDEOGRAPH
+ {0xC0CD, 0x6ADB}, //4913 #CJK UNIFIED IDEOGRAPH
+ {0xC0CE, 0x6AA3}, //4914 #CJK UNIFIED IDEOGRAPH
+ {0xC0CF, 0x6A7E}, //4915 #CJK UNIFIED IDEOGRAPH
+ {0xC0D0, 0x6A97}, //4916 #CJK UNIFIED IDEOGRAPH
+ {0xC0D1, 0x6A90}, //4917 #CJK UNIFIED IDEOGRAPH
+ {0xC0D2, 0x6AA0}, //4918 #CJK UNIFIED IDEOGRAPH
+ {0xC0D3, 0x6B5C}, //4919 #CJK UNIFIED IDEOGRAPH
+ {0xC0D4, 0x6BAE}, //4920 #CJK UNIFIED IDEOGRAPH
+ {0xC0D5, 0x6BDA}, //4921 #CJK UNIFIED IDEOGRAPH
+ {0xC0D6, 0x6C08}, //4922 #CJK UNIFIED IDEOGRAPH
+ {0xC0D7, 0x6FD8}, //4923 #CJK UNIFIED IDEOGRAPH
+ {0xC0D8, 0x6FF1}, //4924 #CJK UNIFIED IDEOGRAPH
+ {0xC0D9, 0x6FDF}, //4925 #CJK UNIFIED IDEOGRAPH
+ {0xC0DA, 0x6FE0}, //4926 #CJK UNIFIED IDEOGRAPH
+ {0xC0DB, 0x6FDB}, //4927 #CJK UNIFIED IDEOGRAPH
+ {0xC0DC, 0x6FE4}, //4928 #CJK UNIFIED IDEOGRAPH
+ {0xC0DD, 0x6FEB}, //4929 #CJK UNIFIED IDEOGRAPH
+ {0xC0DE, 0x6FEF}, //4930 #CJK UNIFIED IDEOGRAPH
+ {0xC0DF, 0x6F80}, //4931 #CJK UNIFIED IDEOGRAPH
+ {0xC0E0, 0x6FEC}, //4932 #CJK UNIFIED IDEOGRAPH
+ {0xC0E1, 0x6FE1}, //4933 #CJK UNIFIED IDEOGRAPH
+ {0xC0E2, 0x6FE9}, //4934 #CJK UNIFIED IDEOGRAPH
+ {0xC0E3, 0x6FD5}, //4935 #CJK UNIFIED IDEOGRAPH
+ {0xC0E4, 0x6FEE}, //4936 #CJK UNIFIED IDEOGRAPH
+ {0xC0E5, 0x6FF0}, //4937 #CJK UNIFIED IDEOGRAPH
+ {0xC0E6, 0x71E7}, //4938 #CJK UNIFIED IDEOGRAPH
+ {0xC0E7, 0x71DF}, //4939 #CJK UNIFIED IDEOGRAPH
+ {0xC0E8, 0x71EE}, //4940 #CJK UNIFIED IDEOGRAPH
+ {0xC0E9, 0x71E6}, //4941 #CJK UNIFIED IDEOGRAPH
+ {0xC0EA, 0x71E5}, //4942 #CJK UNIFIED IDEOGRAPH
+ {0xC0EB, 0x71ED}, //4943 #CJK UNIFIED IDEOGRAPH
+ {0xC0EC, 0x71EC}, //4944 #CJK UNIFIED IDEOGRAPH
+ {0xC0ED, 0x71F4}, //4945 #CJK UNIFIED IDEOGRAPH
+ {0xC0EE, 0x71E0}, //4946 #CJK UNIFIED IDEOGRAPH
+ {0xC0EF, 0x7235}, //4947 #CJK UNIFIED IDEOGRAPH
+ {0xC0F0, 0x7246}, //4948 #CJK UNIFIED IDEOGRAPH
+ {0xC0F1, 0x7370}, //4949 #CJK UNIFIED IDEOGRAPH
+ {0xC0F2, 0x7372}, //4950 #CJK UNIFIED IDEOGRAPH
+ {0xC0F3, 0x74A9}, //4951 #CJK UNIFIED IDEOGRAPH
+ {0xC0F4, 0x74B0}, //4952 #CJK UNIFIED IDEOGRAPH
+ {0xC0F5, 0x74A6}, //4953 #CJK UNIFIED IDEOGRAPH
+ {0xC0F6, 0x74A8}, //4954 #CJK UNIFIED IDEOGRAPH
+ {0xC0F7, 0x7646}, //4955 #CJK UNIFIED IDEOGRAPH
+ {0xC0F8, 0x7642}, //4956 #CJK UNIFIED IDEOGRAPH
+ {0xC0F9, 0x764C}, //4957 #CJK UNIFIED IDEOGRAPH
+ {0xC0FA, 0x76EA}, //4958 #CJK UNIFIED IDEOGRAPH
+ {0xC0FB, 0x77B3}, //4959 #CJK UNIFIED IDEOGRAPH
+ {0xC0FC, 0x77AA}, //4960 #CJK UNIFIED IDEOGRAPH
+ {0xC0FD, 0x77B0}, //4961 #CJK UNIFIED IDEOGRAPH
+ {0xC0FE, 0x77AC}, //4962 #CJK UNIFIED IDEOGRAPH
+ {0xC140, 0x77A7}, //4963 #CJK UNIFIED IDEOGRAPH
+ {0xC141, 0x77AD}, //4964 #CJK UNIFIED IDEOGRAPH
+ {0xC142, 0x77EF}, //4965 #CJK UNIFIED IDEOGRAPH
+ {0xC143, 0x78F7}, //4966 #CJK UNIFIED IDEOGRAPH
+ {0xC144, 0x78FA}, //4967 #CJK UNIFIED IDEOGRAPH
+ {0xC145, 0x78F4}, //4968 #CJK UNIFIED IDEOGRAPH
+ {0xC146, 0x78EF}, //4969 #CJK UNIFIED IDEOGRAPH
+ {0xC147, 0x7901}, //4970 #CJK UNIFIED IDEOGRAPH
+ {0xC148, 0x79A7}, //4971 #CJK UNIFIED IDEOGRAPH
+ {0xC149, 0x79AA}, //4972 #CJK UNIFIED IDEOGRAPH
+ {0xC14A, 0x7A57}, //4973 #CJK UNIFIED IDEOGRAPH
+ {0xC14B, 0x7ABF}, //4974 #CJK UNIFIED IDEOGRAPH
+ {0xC14C, 0x7C07}, //4975 #CJK UNIFIED IDEOGRAPH
+ {0xC14D, 0x7C0D}, //4976 #CJK UNIFIED IDEOGRAPH
+ {0xC14E, 0x7BFE}, //4977 #CJK UNIFIED IDEOGRAPH
+ {0xC14F, 0x7BF7}, //4978 #CJK UNIFIED IDEOGRAPH
+ {0xC150, 0x7C0C}, //4979 #CJK UNIFIED IDEOGRAPH
+ {0xC151, 0x7BE0}, //4980 #CJK UNIFIED IDEOGRAPH
+ {0xC152, 0x7CE0}, //4981 #CJK UNIFIED IDEOGRAPH
+ {0xC153, 0x7CDC}, //4982 #CJK UNIFIED IDEOGRAPH
+ {0xC154, 0x7CDE}, //4983 #CJK UNIFIED IDEOGRAPH
+ {0xC155, 0x7CE2}, //4984 #CJK UNIFIED IDEOGRAPH
+ {0xC156, 0x7CDF}, //4985 #CJK UNIFIED IDEOGRAPH
+ {0xC157, 0x7CD9}, //4986 #CJK UNIFIED IDEOGRAPH
+ {0xC158, 0x7CDD}, //4987 #CJK UNIFIED IDEOGRAPH
+ {0xC159, 0x7E2E}, //4988 #CJK UNIFIED IDEOGRAPH
+ {0xC15A, 0x7E3E}, //4989 #CJK UNIFIED IDEOGRAPH
+ {0xC15B, 0x7E46}, //4990 #CJK UNIFIED IDEOGRAPH
+ {0xC15C, 0x7E37}, //4991 #CJK UNIFIED IDEOGRAPH
+ {0xC15D, 0x7E32}, //4992 #CJK UNIFIED IDEOGRAPH
+ {0xC15E, 0x7E43}, //4993 #CJK UNIFIED IDEOGRAPH
+ {0xC15F, 0x7E2B}, //4994 #CJK UNIFIED IDEOGRAPH
+ {0xC160, 0x7E3D}, //4995 #CJK UNIFIED IDEOGRAPH
+ {0xC161, 0x7E31}, //4996 #CJK UNIFIED IDEOGRAPH
+ {0xC162, 0x7E45}, //4997 #CJK UNIFIED IDEOGRAPH
+ {0xC163, 0x7E41}, //4998 #CJK UNIFIED IDEOGRAPH
+ {0xC164, 0x7E34}, //4999 #CJK UNIFIED IDEOGRAPH
+ {0xC165, 0x7E39}, //5000 #CJK UNIFIED IDEOGRAPH
+ {0xC166, 0x7E48}, //5001 #CJK UNIFIED IDEOGRAPH
+ {0xC167, 0x7E35}, //5002 #CJK UNIFIED IDEOGRAPH
+ {0xC168, 0x7E3F}, //5003 #CJK UNIFIED IDEOGRAPH
+ {0xC169, 0x7E2F}, //5004 #CJK UNIFIED IDEOGRAPH
+ {0xC16A, 0x7F44}, //5005 #CJK UNIFIED IDEOGRAPH
+ {0xC16B, 0x7FF3}, //5006 #CJK UNIFIED IDEOGRAPH
+ {0xC16C, 0x7FFC}, //5007 #CJK UNIFIED IDEOGRAPH
+ {0xC16D, 0x8071}, //5008 #CJK UNIFIED IDEOGRAPH
+ {0xC16E, 0x8072}, //5009 #CJK UNIFIED IDEOGRAPH
+ {0xC16F, 0x8070}, //5010 #CJK UNIFIED IDEOGRAPH
+ {0xC170, 0x806F}, //5011 #CJK UNIFIED IDEOGRAPH
+ {0xC171, 0x8073}, //5012 #CJK UNIFIED IDEOGRAPH
+ {0xC172, 0x81C6}, //5013 #CJK UNIFIED IDEOGRAPH
+ {0xC173, 0x81C3}, //5014 #CJK UNIFIED IDEOGRAPH
+ {0xC174, 0x81BA}, //5015 #CJK UNIFIED IDEOGRAPH
+ {0xC175, 0x81C2}, //5016 #CJK UNIFIED IDEOGRAPH
+ {0xC176, 0x81C0}, //5017 #CJK UNIFIED IDEOGRAPH
+ {0xC177, 0x81BF}, //5018 #CJK UNIFIED IDEOGRAPH
+ {0xC178, 0x81BD}, //5019 #CJK UNIFIED IDEOGRAPH
+ {0xC179, 0x81C9}, //5020 #CJK UNIFIED IDEOGRAPH
+ {0xC17A, 0x81BE}, //5021 #CJK UNIFIED IDEOGRAPH
+ {0xC17B, 0x81E8}, //5022 #CJK UNIFIED IDEOGRAPH
+ {0xC17C, 0x8209}, //5023 #CJK UNIFIED IDEOGRAPH
+ {0xC17D, 0x8271}, //5024 #CJK UNIFIED IDEOGRAPH
+ {0xC17E, 0x85AA}, //5025 #CJK UNIFIED IDEOGRAPH
+ {0xC1A1, 0x8584}, //5026 #CJK UNIFIED IDEOGRAPH
+ {0xC1A2, 0x857E}, //5027 #CJK UNIFIED IDEOGRAPH
+ {0xC1A3, 0x859C}, //5028 #CJK UNIFIED IDEOGRAPH
+ {0xC1A4, 0x8591}, //5029 #CJK UNIFIED IDEOGRAPH
+ {0xC1A5, 0x8594}, //5030 #CJK UNIFIED IDEOGRAPH
+ {0xC1A6, 0x85AF}, //5031 #CJK UNIFIED IDEOGRAPH
+ {0xC1A7, 0x859B}, //5032 #CJK UNIFIED IDEOGRAPH
+ {0xC1A8, 0x8587}, //5033 #CJK UNIFIED IDEOGRAPH
+ {0xC1A9, 0x85A8}, //5034 #CJK UNIFIED IDEOGRAPH
+ {0xC1AA, 0x858A}, //5035 #CJK UNIFIED IDEOGRAPH
+ {0xC1AB, 0x8667}, //5036 #CJK UNIFIED IDEOGRAPH
+ {0xC1AC, 0x87C0}, //5037 #CJK UNIFIED IDEOGRAPH
+ {0xC1AD, 0x87D1}, //5038 #CJK UNIFIED IDEOGRAPH
+ {0xC1AE, 0x87B3}, //5039 #CJK UNIFIED IDEOGRAPH
+ {0xC1AF, 0x87D2}, //5040 #CJK UNIFIED IDEOGRAPH
+ {0xC1B0, 0x87C6}, //5041 #CJK UNIFIED IDEOGRAPH
+ {0xC1B1, 0x87AB}, //5042 #CJK UNIFIED IDEOGRAPH
+ {0xC1B2, 0x87BB}, //5043 #CJK UNIFIED IDEOGRAPH
+ {0xC1B3, 0x87BA}, //5044 #CJK UNIFIED IDEOGRAPH
+ {0xC1B4, 0x87C8}, //5045 #CJK UNIFIED IDEOGRAPH
+ {0xC1B5, 0x87CB}, //5046 #CJK UNIFIED IDEOGRAPH
+ {0xC1B6, 0x893B}, //5047 #CJK UNIFIED IDEOGRAPH
+ {0xC1B7, 0x8936}, //5048 #CJK UNIFIED IDEOGRAPH
+ {0xC1B8, 0x8944}, //5049 #CJK UNIFIED IDEOGRAPH
+ {0xC1B9, 0x8938}, //5050 #CJK UNIFIED IDEOGRAPH
+ {0xC1BA, 0x893D}, //5051 #CJK UNIFIED IDEOGRAPH
+ {0xC1BB, 0x89AC}, //5052 #CJK UNIFIED IDEOGRAPH
+ {0xC1BC, 0x8B0E}, //5053 #CJK UNIFIED IDEOGRAPH
+ {0xC1BD, 0x8B17}, //5054 #CJK UNIFIED IDEOGRAPH
+ {0xC1BE, 0x8B19}, //5055 #CJK UNIFIED IDEOGRAPH
+ {0xC1BF, 0x8B1B}, //5056 #CJK UNIFIED IDEOGRAPH
+ {0xC1C0, 0x8B0A}, //5057 #CJK UNIFIED IDEOGRAPH
+ {0xC1C1, 0x8B20}, //5058 #CJK UNIFIED IDEOGRAPH
+ {0xC1C2, 0x8B1D}, //5059 #CJK UNIFIED IDEOGRAPH
+ {0xC1C3, 0x8B04}, //5060 #CJK UNIFIED IDEOGRAPH
+ {0xC1C4, 0x8B10}, //5061 #CJK UNIFIED IDEOGRAPH
+ {0xC1C5, 0x8C41}, //5062 #CJK UNIFIED IDEOGRAPH
+ {0xC1C6, 0x8C3F}, //5063 #CJK UNIFIED IDEOGRAPH
+ {0xC1C7, 0x8C73}, //5064 #CJK UNIFIED IDEOGRAPH
+ {0xC1C8, 0x8CFA}, //5065 #CJK UNIFIED IDEOGRAPH
+ {0xC1C9, 0x8CFD}, //5066 #CJK UNIFIED IDEOGRAPH
+ {0xC1CA, 0x8CFC}, //5067 #CJK UNIFIED IDEOGRAPH
+ {0xC1CB, 0x8CF8}, //5068 #CJK UNIFIED IDEOGRAPH
+ {0xC1CC, 0x8CFB}, //5069 #CJK UNIFIED IDEOGRAPH
+ {0xC1CD, 0x8DA8}, //5070 #CJK UNIFIED IDEOGRAPH
+ {0xC1CE, 0x8E49}, //5071 #CJK UNIFIED IDEOGRAPH
+ {0xC1CF, 0x8E4B}, //5072 #CJK UNIFIED IDEOGRAPH
+ {0xC1D0, 0x8E48}, //5073 #CJK UNIFIED IDEOGRAPH
+ {0xC1D1, 0x8E4A}, //5074 #CJK UNIFIED IDEOGRAPH
+ {0xC1D2, 0x8F44}, //5075 #CJK UNIFIED IDEOGRAPH
+ {0xC1D3, 0x8F3E}, //5076 #CJK UNIFIED IDEOGRAPH
+ {0xC1D4, 0x8F42}, //5077 #CJK UNIFIED IDEOGRAPH
+ {0xC1D5, 0x8F45}, //5078 #CJK UNIFIED IDEOGRAPH
+ {0xC1D6, 0x8F3F}, //5079 #CJK UNIFIED IDEOGRAPH
+ {0xC1D7, 0x907F}, //5080 #CJK UNIFIED IDEOGRAPH
+ {0xC1D8, 0x907D}, //5081 #CJK UNIFIED IDEOGRAPH
+ {0xC1D9, 0x9084}, //5082 #CJK UNIFIED IDEOGRAPH
+ {0xC1DA, 0x9081}, //5083 #CJK UNIFIED IDEOGRAPH
+ {0xC1DB, 0x9082}, //5084 #CJK UNIFIED IDEOGRAPH
+ {0xC1DC, 0x9080}, //5085 #CJK UNIFIED IDEOGRAPH
+ {0xC1DD, 0x9139}, //5086 #CJK UNIFIED IDEOGRAPH
+ {0xC1DE, 0x91A3}, //5087 #CJK UNIFIED IDEOGRAPH
+ {0xC1DF, 0x919E}, //5088 #CJK UNIFIED IDEOGRAPH
+ {0xC1E0, 0x919C}, //5089 #CJK UNIFIED IDEOGRAPH
+ {0xC1E1, 0x934D}, //5090 #CJK UNIFIED IDEOGRAPH
+ {0xC1E2, 0x9382}, //5091 #CJK UNIFIED IDEOGRAPH
+ {0xC1E3, 0x9328}, //5092 #CJK UNIFIED IDEOGRAPH
+ {0xC1E4, 0x9375}, //5093 #CJK UNIFIED IDEOGRAPH
+ {0xC1E5, 0x934A}, //5094 #CJK UNIFIED IDEOGRAPH
+ {0xC1E6, 0x9365}, //5095 #CJK UNIFIED IDEOGRAPH
+ {0xC1E7, 0x934B}, //5096 #CJK UNIFIED IDEOGRAPH
+ {0xC1E8, 0x9318}, //5097 #CJK UNIFIED IDEOGRAPH
+ {0xC1E9, 0x937E}, //5098 #CJK UNIFIED IDEOGRAPH
+ {0xC1EA, 0x936C}, //5099 #CJK UNIFIED IDEOGRAPH
+ {0xC1EB, 0x935B}, //5100 #CJK UNIFIED IDEOGRAPH
+ {0xC1EC, 0x9370}, //5101 #CJK UNIFIED IDEOGRAPH
+ {0xC1ED, 0x935A}, //5102 #CJK UNIFIED IDEOGRAPH
+ {0xC1EE, 0x9354}, //5103 #CJK UNIFIED IDEOGRAPH
+ {0xC1EF, 0x95CA}, //5104 #CJK UNIFIED IDEOGRAPH
+ {0xC1F0, 0x95CB}, //5105 #CJK UNIFIED IDEOGRAPH
+ {0xC1F1, 0x95CC}, //5106 #CJK UNIFIED IDEOGRAPH
+ {0xC1F2, 0x95C8}, //5107 #CJK UNIFIED IDEOGRAPH
+ {0xC1F3, 0x95C6}, //5108 #CJK UNIFIED IDEOGRAPH
+ {0xC1F4, 0x96B1}, //5109 #CJK UNIFIED IDEOGRAPH
+ {0xC1F5, 0x96B8}, //5110 #CJK UNIFIED IDEOGRAPH
+ {0xC1F6, 0x96D6}, //5111 #CJK UNIFIED IDEOGRAPH
+ {0xC1F7, 0x971C}, //5112 #CJK UNIFIED IDEOGRAPH
+ {0xC1F8, 0x971E}, //5113 #CJK UNIFIED IDEOGRAPH
+ {0xC1F9, 0x97A0}, //5114 #CJK UNIFIED IDEOGRAPH
+ {0xC1FA, 0x97D3}, //5115 #CJK UNIFIED IDEOGRAPH
+ {0xC1FB, 0x9846}, //5116 #CJK UNIFIED IDEOGRAPH
+ {0xC1FC, 0x98B6}, //5117 #CJK UNIFIED IDEOGRAPH
+ {0xC1FD, 0x9935}, //5118 #CJK UNIFIED IDEOGRAPH
+ {0xC1FE, 0x9A01}, //5119 #CJK UNIFIED IDEOGRAPH
+ {0xC240, 0x99FF}, //5120 #CJK UNIFIED IDEOGRAPH
+ {0xC241, 0x9BAE}, //5121 #CJK UNIFIED IDEOGRAPH
+ {0xC242, 0x9BAB}, //5122 #CJK UNIFIED IDEOGRAPH
+ {0xC243, 0x9BAA}, //5123 #CJK UNIFIED IDEOGRAPH
+ {0xC244, 0x9BAD}, //5124 #CJK UNIFIED IDEOGRAPH
+ {0xC245, 0x9D3B}, //5125 #CJK UNIFIED IDEOGRAPH
+ {0xC246, 0x9D3F}, //5126 #CJK UNIFIED IDEOGRAPH
+ {0xC247, 0x9E8B}, //5127 #CJK UNIFIED IDEOGRAPH
+ {0xC248, 0x9ECF}, //5128 #CJK UNIFIED IDEOGRAPH
+ {0xC249, 0x9EDE}, //5129 #CJK UNIFIED IDEOGRAPH
+ {0xC24A, 0x9EDC}, //5130 #CJK UNIFIED IDEOGRAPH
+ {0xC24B, 0x9EDD}, //5131 #CJK UNIFIED IDEOGRAPH
+ {0xC24C, 0x9EDB}, //5132 #CJK UNIFIED IDEOGRAPH
+ {0xC24D, 0x9F3E}, //5133 #CJK UNIFIED IDEOGRAPH
+ {0xC24E, 0x9F4B}, //5134 #CJK UNIFIED IDEOGRAPH
+ {0xC24F, 0x53E2}, //5135 #CJK UNIFIED IDEOGRAPH
+ {0xC250, 0x5695}, //5136 #CJK UNIFIED IDEOGRAPH
+ {0xC251, 0x56AE}, //5137 #CJK UNIFIED IDEOGRAPH
+ {0xC252, 0x58D9}, //5138 #CJK UNIFIED IDEOGRAPH
+ {0xC253, 0x58D8}, //5139 #CJK UNIFIED IDEOGRAPH
+ {0xC254, 0x5B38}, //5140 #CJK UNIFIED IDEOGRAPH
+ {0xC255, 0x5F5D}, //5141 #CJK UNIFIED IDEOGRAPH
+ {0xC256, 0x61E3}, //5142 #CJK UNIFIED IDEOGRAPH
+ {0xC257, 0x6233}, //5143 #CJK UNIFIED IDEOGRAPH
+ {0xC258, 0x64F4}, //5144 #CJK UNIFIED IDEOGRAPH
+ {0xC259, 0x64F2}, //5145 #CJK UNIFIED IDEOGRAPH
+ {0xC25A, 0x64FE}, //5146 #CJK UNIFIED IDEOGRAPH
+ {0xC25B, 0x6506}, //5147 #CJK UNIFIED IDEOGRAPH
+ {0xC25C, 0x64FA}, //5148 #CJK UNIFIED IDEOGRAPH
+ {0xC25D, 0x64FB}, //5149 #CJK UNIFIED IDEOGRAPH
+ {0xC25E, 0x64F7}, //5150 #CJK UNIFIED IDEOGRAPH
+ {0xC25F, 0x65B7}, //5151 #CJK UNIFIED IDEOGRAPH
+ {0xC260, 0x66DC}, //5152 #CJK UNIFIED IDEOGRAPH
+ {0xC261, 0x6726}, //5153 #CJK UNIFIED IDEOGRAPH
+ {0xC262, 0x6AB3}, //5154 #CJK UNIFIED IDEOGRAPH
+ {0xC263, 0x6AAC}, //5155 #CJK UNIFIED IDEOGRAPH
+ {0xC264, 0x6AC3}, //5156 #CJK UNIFIED IDEOGRAPH
+ {0xC265, 0x6ABB}, //5157 #CJK UNIFIED IDEOGRAPH
+ {0xC266, 0x6AB8}, //5158 #CJK UNIFIED IDEOGRAPH
+ {0xC267, 0x6AC2}, //5159 #CJK UNIFIED IDEOGRAPH
+ {0xC268, 0x6AAE}, //5160 #CJK UNIFIED IDEOGRAPH
+ {0xC269, 0x6AAF}, //5161 #CJK UNIFIED IDEOGRAPH
+ {0xC26A, 0x6B5F}, //5162 #CJK UNIFIED IDEOGRAPH
+ {0xC26B, 0x6B78}, //5163 #CJK UNIFIED IDEOGRAPH
+ {0xC26C, 0x6BAF}, //5164 #CJK UNIFIED IDEOGRAPH
+ {0xC26D, 0x7009}, //5165 #CJK UNIFIED IDEOGRAPH
+ {0xC26E, 0x700B}, //5166 #CJK UNIFIED IDEOGRAPH
+ {0xC26F, 0x6FFE}, //5167 #CJK UNIFIED IDEOGRAPH
+ {0xC270, 0x7006}, //5168 #CJK UNIFIED IDEOGRAPH
+ {0xC271, 0x6FFA}, //5169 #CJK UNIFIED IDEOGRAPH
+ {0xC272, 0x7011}, //5170 #CJK UNIFIED IDEOGRAPH
+ {0xC273, 0x700F}, //5171 #CJK UNIFIED IDEOGRAPH
+ {0xC274, 0x71FB}, //5172 #CJK UNIFIED IDEOGRAPH
+ {0xC275, 0x71FC}, //5173 #CJK UNIFIED IDEOGRAPH
+ {0xC276, 0x71FE}, //5174 #CJK UNIFIED IDEOGRAPH
+ {0xC277, 0x71F8}, //5175 #CJK UNIFIED IDEOGRAPH
+ {0xC278, 0x7377}, //5176 #CJK UNIFIED IDEOGRAPH
+ {0xC279, 0x7375}, //5177 #CJK UNIFIED IDEOGRAPH
+ {0xC27A, 0x74A7}, //5178 #CJK UNIFIED IDEOGRAPH
+ {0xC27B, 0x74BF}, //5179 #CJK UNIFIED IDEOGRAPH
+ {0xC27C, 0x7515}, //5180 #CJK UNIFIED IDEOGRAPH
+ {0xC27D, 0x7656}, //5181 #CJK UNIFIED IDEOGRAPH
+ {0xC27E, 0x7658}, //5182 #CJK UNIFIED IDEOGRAPH
+ {0xC2A1, 0x7652}, //5183 #CJK UNIFIED IDEOGRAPH
+ {0xC2A2, 0x77BD}, //5184 #CJK UNIFIED IDEOGRAPH
+ {0xC2A3, 0x77BF}, //5185 #CJK UNIFIED IDEOGRAPH
+ {0xC2A4, 0x77BB}, //5186 #CJK UNIFIED IDEOGRAPH
+ {0xC2A5, 0x77BC}, //5187 #CJK UNIFIED IDEOGRAPH
+ {0xC2A6, 0x790E}, //5188 #CJK UNIFIED IDEOGRAPH
+ {0xC2A7, 0x79AE}, //5189 #CJK UNIFIED IDEOGRAPH
+ {0xC2A8, 0x7A61}, //5190 #CJK UNIFIED IDEOGRAPH
+ {0xC2A9, 0x7A62}, //5191 #CJK UNIFIED IDEOGRAPH
+ {0xC2AA, 0x7A60}, //5192 #CJK UNIFIED IDEOGRAPH
+ {0xC2AB, 0x7AC4}, //5193 #CJK UNIFIED IDEOGRAPH
+ {0xC2AC, 0x7AC5}, //5194 #CJK UNIFIED IDEOGRAPH
+ {0xC2AD, 0x7C2B}, //5195 #CJK UNIFIED IDEOGRAPH
+ {0xC2AE, 0x7C27}, //5196 #CJK UNIFIED IDEOGRAPH
+ {0xC2AF, 0x7C2A}, //5197 #CJK UNIFIED IDEOGRAPH
+ {0xC2B0, 0x7C1E}, //5198 #CJK UNIFIED IDEOGRAPH
+ {0xC2B1, 0x7C23}, //5199 #CJK UNIFIED IDEOGRAPH
+ {0xC2B2, 0x7C21}, //5200 #CJK UNIFIED IDEOGRAPH
+ {0xC2B3, 0x7CE7}, //5201 #CJK UNIFIED IDEOGRAPH
+ {0xC2B4, 0x7E54}, //5202 #CJK UNIFIED IDEOGRAPH
+ {0xC2B5, 0x7E55}, //5203 #CJK UNIFIED IDEOGRAPH
+ {0xC2B6, 0x7E5E}, //5204 #CJK UNIFIED IDEOGRAPH
+ {0xC2B7, 0x7E5A}, //5205 #CJK UNIFIED IDEOGRAPH
+ {0xC2B8, 0x7E61}, //5206 #CJK UNIFIED IDEOGRAPH
+ {0xC2B9, 0x7E52}, //5207 #CJK UNIFIED IDEOGRAPH
+ {0xC2BA, 0x7E59}, //5208 #CJK UNIFIED IDEOGRAPH
+ {0xC2BB, 0x7F48}, //5209 #CJK UNIFIED IDEOGRAPH
+ {0xC2BC, 0x7FF9}, //5210 #CJK UNIFIED IDEOGRAPH
+ {0xC2BD, 0x7FFB}, //5211 #CJK UNIFIED IDEOGRAPH
+ {0xC2BE, 0x8077}, //5212 #CJK UNIFIED IDEOGRAPH
+ {0xC2BF, 0x8076}, //5213 #CJK UNIFIED IDEOGRAPH
+ {0xC2C0, 0x81CD}, //5214 #CJK UNIFIED IDEOGRAPH
+ {0xC2C1, 0x81CF}, //5215 #CJK UNIFIED IDEOGRAPH
+ {0xC2C2, 0x820A}, //5216 #CJK UNIFIED IDEOGRAPH
+ {0xC2C3, 0x85CF}, //5217 #CJK UNIFIED IDEOGRAPH
+ {0xC2C4, 0x85A9}, //5218 #CJK UNIFIED IDEOGRAPH
+ {0xC2C5, 0x85CD}, //5219 #CJK UNIFIED IDEOGRAPH
+ {0xC2C6, 0x85D0}, //5220 #CJK UNIFIED IDEOGRAPH
+ {0xC2C7, 0x85C9}, //5221 #CJK UNIFIED IDEOGRAPH
+ {0xC2C8, 0x85B0}, //5222 #CJK UNIFIED IDEOGRAPH
+ {0xC2C9, 0x85BA}, //5223 #CJK UNIFIED IDEOGRAPH
+ {0xC2CA, 0x85B9}, //5224 #CJK UNIFIED IDEOGRAPH
+ {0xC2CB, 0x85A6}, //5225 #CJK UNIFIED IDEOGRAPH
+ {0xC2CC, 0x87EF}, //5226 #CJK UNIFIED IDEOGRAPH
+ {0xC2CD, 0x87EC}, //5227 #CJK UNIFIED IDEOGRAPH
+ {0xC2CE, 0x87F2}, //5228 #CJK UNIFIED IDEOGRAPH
+ {0xC2CF, 0x87E0}, //5229 #CJK UNIFIED IDEOGRAPH
+ {0xC2D0, 0x8986}, //5230 #CJK UNIFIED IDEOGRAPH
+ {0xC2D1, 0x89B2}, //5231 #CJK UNIFIED IDEOGRAPH
+ {0xC2D2, 0x89F4}, //5232 #CJK UNIFIED IDEOGRAPH
+ {0xC2D3, 0x8B28}, //5233 #CJK UNIFIED IDEOGRAPH
+ {0xC2D4, 0x8B39}, //5234 #CJK UNIFIED IDEOGRAPH
+ {0xC2D5, 0x8B2C}, //5235 #CJK UNIFIED IDEOGRAPH
+ {0xC2D6, 0x8B2B}, //5236 #CJK UNIFIED IDEOGRAPH
+ {0xC2D7, 0x8C50}, //5237 #CJK UNIFIED IDEOGRAPH
+ {0xC2D8, 0x8D05}, //5238 #CJK UNIFIED IDEOGRAPH
+ {0xC2D9, 0x8E59}, //5239 #CJK UNIFIED IDEOGRAPH
+ {0xC2DA, 0x8E63}, //5240 #CJK UNIFIED IDEOGRAPH
+ {0xC2DB, 0x8E66}, //5241 #CJK UNIFIED IDEOGRAPH
+ {0xC2DC, 0x8E64}, //5242 #CJK UNIFIED IDEOGRAPH
+ {0xC2DD, 0x8E5F}, //5243 #CJK UNIFIED IDEOGRAPH
+ {0xC2DE, 0x8E55}, //5244 #CJK UNIFIED IDEOGRAPH
+ {0xC2DF, 0x8EC0}, //5245 #CJK UNIFIED IDEOGRAPH
+ {0xC2E0, 0x8F49}, //5246 #CJK UNIFIED IDEOGRAPH
+ {0xC2E1, 0x8F4D}, //5247 #CJK UNIFIED IDEOGRAPH
+ {0xC2E2, 0x9087}, //5248 #CJK UNIFIED IDEOGRAPH
+ {0xC2E3, 0x9083}, //5249 #CJK UNIFIED IDEOGRAPH
+ {0xC2E4, 0x9088}, //5250 #CJK UNIFIED IDEOGRAPH
+ {0xC2E5, 0x91AB}, //5251 #CJK UNIFIED IDEOGRAPH
+ {0xC2E6, 0x91AC}, //5252 #CJK UNIFIED IDEOGRAPH
+ {0xC2E7, 0x91D0}, //5253 #CJK UNIFIED IDEOGRAPH
+ {0xC2E8, 0x9394}, //5254 #CJK UNIFIED IDEOGRAPH
+ {0xC2E9, 0x938A}, //5255 #CJK UNIFIED IDEOGRAPH
+ {0xC2EA, 0x9396}, //5256 #CJK UNIFIED IDEOGRAPH
+ {0xC2EB, 0x93A2}, //5257 #CJK UNIFIED IDEOGRAPH
+ {0xC2EC, 0x93B3}, //5258 #CJK UNIFIED IDEOGRAPH
+ {0xC2ED, 0x93AE}, //5259 #CJK UNIFIED IDEOGRAPH
+ {0xC2EE, 0x93AC}, //5260 #CJK UNIFIED IDEOGRAPH
+ {0xC2EF, 0x93B0}, //5261 #CJK UNIFIED IDEOGRAPH
+ {0xC2F0, 0x9398}, //5262 #CJK UNIFIED IDEOGRAPH
+ {0xC2F1, 0x939A}, //5263 #CJK UNIFIED IDEOGRAPH
+ {0xC2F2, 0x9397}, //5264 #CJK UNIFIED IDEOGRAPH
+ {0xC2F3, 0x95D4}, //5265 #CJK UNIFIED IDEOGRAPH
+ {0xC2F4, 0x95D6}, //5266 #CJK UNIFIED IDEOGRAPH
+ {0xC2F5, 0x95D0}, //5267 #CJK UNIFIED IDEOGRAPH
+ {0xC2F6, 0x95D5}, //5268 #CJK UNIFIED IDEOGRAPH
+ {0xC2F7, 0x96E2}, //5269 #CJK UNIFIED IDEOGRAPH
+ {0xC2F8, 0x96DC}, //5270 #CJK UNIFIED IDEOGRAPH
+ {0xC2F9, 0x96D9}, //5271 #CJK UNIFIED IDEOGRAPH
+ {0xC2FA, 0x96DB}, //5272 #CJK UNIFIED IDEOGRAPH
+ {0xC2FB, 0x96DE}, //5273 #CJK UNIFIED IDEOGRAPH
+ {0xC2FC, 0x9724}, //5274 #CJK UNIFIED IDEOGRAPH
+ {0xC2FD, 0x97A3}, //5275 #CJK UNIFIED IDEOGRAPH
+ {0xC2FE, 0x97A6}, //5276 #CJK UNIFIED IDEOGRAPH
+ {0xC340, 0x97AD}, //5277 #CJK UNIFIED IDEOGRAPH
+ {0xC341, 0x97F9}, //5278 #CJK UNIFIED IDEOGRAPH
+ {0xC342, 0x984D}, //5279 #CJK UNIFIED IDEOGRAPH
+ {0xC343, 0x984F}, //5280 #CJK UNIFIED IDEOGRAPH
+ {0xC344, 0x984C}, //5281 #CJK UNIFIED IDEOGRAPH
+ {0xC345, 0x984E}, //5282 #CJK UNIFIED IDEOGRAPH
+ {0xC346, 0x9853}, //5283 #CJK UNIFIED IDEOGRAPH
+ {0xC347, 0x98BA}, //5284 #CJK UNIFIED IDEOGRAPH
+ {0xC348, 0x993E}, //5285 #CJK UNIFIED IDEOGRAPH
+ {0xC349, 0x993F}, //5286 #CJK UNIFIED IDEOGRAPH
+ {0xC34A, 0x993D}, //5287 #CJK UNIFIED IDEOGRAPH
+ {0xC34B, 0x992E}, //5288 #CJK UNIFIED IDEOGRAPH
+ {0xC34C, 0x99A5}, //5289 #CJK UNIFIED IDEOGRAPH
+ {0xC34D, 0x9A0E}, //5290 #CJK UNIFIED IDEOGRAPH
+ {0xC34E, 0x9AC1}, //5291 #CJK UNIFIED IDEOGRAPH
+ {0xC34F, 0x9B03}, //5292 #CJK UNIFIED IDEOGRAPH
+ {0xC350, 0x9B06}, //5293 #CJK UNIFIED IDEOGRAPH
+ {0xC351, 0x9B4F}, //5294 #CJK UNIFIED IDEOGRAPH
+ {0xC352, 0x9B4E}, //5295 #CJK UNIFIED IDEOGRAPH
+ {0xC353, 0x9B4D}, //5296 #CJK UNIFIED IDEOGRAPH
+ {0xC354, 0x9BCA}, //5297 #CJK UNIFIED IDEOGRAPH
+ {0xC355, 0x9BC9}, //5298 #CJK UNIFIED IDEOGRAPH
+ {0xC356, 0x9BFD}, //5299 #CJK UNIFIED IDEOGRAPH
+ {0xC357, 0x9BC8}, //5300 #CJK UNIFIED IDEOGRAPH
+ {0xC358, 0x9BC0}, //5301 #CJK UNIFIED IDEOGRAPH
+ {0xC359, 0x9D51}, //5302 #CJK UNIFIED IDEOGRAPH
+ {0xC35A, 0x9D5D}, //5303 #CJK UNIFIED IDEOGRAPH
+ {0xC35B, 0x9D60}, //5304 #CJK UNIFIED IDEOGRAPH
+ {0xC35C, 0x9EE0}, //5305 #CJK UNIFIED IDEOGRAPH
+ {0xC35D, 0x9F15}, //5306 #CJK UNIFIED IDEOGRAPH
+ {0xC35E, 0x9F2C}, //5307 #CJK UNIFIED IDEOGRAPH
+ {0xC35F, 0x5133}, //5308 #CJK UNIFIED IDEOGRAPH
+ {0xC360, 0x56A5}, //5309 #CJK UNIFIED IDEOGRAPH
+ {0xC361, 0x58DE}, //5310 #CJK UNIFIED IDEOGRAPH
+ {0xC362, 0x58DF}, //5311 #CJK UNIFIED IDEOGRAPH
+ {0xC363, 0x58E2}, //5312 #CJK UNIFIED IDEOGRAPH
+ {0xC364, 0x5BF5}, //5313 #CJK UNIFIED IDEOGRAPH
+ {0xC365, 0x9F90}, //5314 #CJK UNIFIED IDEOGRAPH
+ {0xC366, 0x5EEC}, //5315 #CJK UNIFIED IDEOGRAPH
+ {0xC367, 0x61F2}, //5316 #CJK UNIFIED IDEOGRAPH
+ {0xC368, 0x61F7}, //5317 #CJK UNIFIED IDEOGRAPH
+ {0xC369, 0x61F6}, //5318 #CJK UNIFIED IDEOGRAPH
+ {0xC36A, 0x61F5}, //5319 #CJK UNIFIED IDEOGRAPH
+ {0xC36B, 0x6500}, //5320 #CJK UNIFIED IDEOGRAPH
+ {0xC36C, 0x650F}, //5321 #CJK UNIFIED IDEOGRAPH
+ {0xC36D, 0x66E0}, //5322 #CJK UNIFIED IDEOGRAPH
+ {0xC36E, 0x66DD}, //5323 #CJK UNIFIED IDEOGRAPH
+ {0xC36F, 0x6AE5}, //5324 #CJK UNIFIED IDEOGRAPH
+ {0xC370, 0x6ADD}, //5325 #CJK UNIFIED IDEOGRAPH
+ {0xC371, 0x6ADA}, //5326 #CJK UNIFIED IDEOGRAPH
+ {0xC372, 0x6AD3}, //5327 #CJK UNIFIED IDEOGRAPH
+ {0xC373, 0x701B}, //5328 #CJK UNIFIED IDEOGRAPH
+ {0xC374, 0x701F}, //5329 #CJK UNIFIED IDEOGRAPH
+ {0xC375, 0x7028}, //5330 #CJK UNIFIED IDEOGRAPH
+ {0xC376, 0x701A}, //5331 #CJK UNIFIED IDEOGRAPH
+ {0xC377, 0x701D}, //5332 #CJK UNIFIED IDEOGRAPH
+ {0xC378, 0x7015}, //5333 #CJK UNIFIED IDEOGRAPH
+ {0xC379, 0x7018}, //5334 #CJK UNIFIED IDEOGRAPH
+ {0xC37A, 0x7206}, //5335 #CJK UNIFIED IDEOGRAPH
+ {0xC37B, 0x720D}, //5336 #CJK UNIFIED IDEOGRAPH
+ {0xC37C, 0x7258}, //5337 #CJK UNIFIED IDEOGRAPH
+ {0xC37D, 0x72A2}, //5338 #CJK UNIFIED IDEOGRAPH
+ {0xC37E, 0x7378}, //5339 #CJK UNIFIED IDEOGRAPH
+ {0xC3A1, 0x737A}, //5340 #CJK UNIFIED IDEOGRAPH
+ {0xC3A2, 0x74BD}, //5341 #CJK UNIFIED IDEOGRAPH
+ {0xC3A3, 0x74CA}, //5342 #CJK UNIFIED IDEOGRAPH
+ {0xC3A4, 0x74E3}, //5343 #CJK UNIFIED IDEOGRAPH
+ {0xC3A5, 0x7587}, //5344 #CJK UNIFIED IDEOGRAPH
+ {0xC3A6, 0x7586}, //5345 #CJK UNIFIED IDEOGRAPH
+ {0xC3A7, 0x765F}, //5346 #CJK UNIFIED IDEOGRAPH
+ {0xC3A8, 0x7661}, //5347 #CJK UNIFIED IDEOGRAPH
+ {0xC3A9, 0x77C7}, //5348 #CJK UNIFIED IDEOGRAPH
+ {0xC3AA, 0x7919}, //5349 #CJK UNIFIED IDEOGRAPH
+ {0xC3AB, 0x79B1}, //5350 #CJK UNIFIED IDEOGRAPH
+ {0xC3AC, 0x7A6B}, //5351 #CJK UNIFIED IDEOGRAPH
+ {0xC3AD, 0x7A69}, //5352 #CJK UNIFIED IDEOGRAPH
+ {0xC3AE, 0x7C3E}, //5353 #CJK UNIFIED IDEOGRAPH
+ {0xC3AF, 0x7C3F}, //5354 #CJK UNIFIED IDEOGRAPH
+ {0xC3B0, 0x7C38}, //5355 #CJK UNIFIED IDEOGRAPH
+ {0xC3B1, 0x7C3D}, //5356 #CJK UNIFIED IDEOGRAPH
+ {0xC3B2, 0x7C37}, //5357 #CJK UNIFIED IDEOGRAPH
+ {0xC3B3, 0x7C40}, //5358 #CJK UNIFIED IDEOGRAPH
+ {0xC3B4, 0x7E6B}, //5359 #CJK UNIFIED IDEOGRAPH
+ {0xC3B5, 0x7E6D}, //5360 #CJK UNIFIED IDEOGRAPH
+ {0xC3B6, 0x7E79}, //5361 #CJK UNIFIED IDEOGRAPH
+ {0xC3B7, 0x7E69}, //5362 #CJK UNIFIED IDEOGRAPH
+ {0xC3B8, 0x7E6A}, //5363 #CJK UNIFIED IDEOGRAPH
+ {0xC3B9, 0x7F85}, //5364 #CJK UNIFIED IDEOGRAPH
+ {0xC3BA, 0x7E73}, //5365 #CJK UNIFIED IDEOGRAPH
+ {0xC3BB, 0x7FB6}, //5366 #CJK UNIFIED IDEOGRAPH
+ {0xC3BC, 0x7FB9}, //5367 #CJK UNIFIED IDEOGRAPH
+ {0xC3BD, 0x7FB8}, //5368 #CJK UNIFIED IDEOGRAPH
+ {0xC3BE, 0x81D8}, //5369 #CJK UNIFIED IDEOGRAPH
+ {0xC3BF, 0x85E9}, //5370 #CJK UNIFIED IDEOGRAPH
+ {0xC3C0, 0x85DD}, //5371 #CJK UNIFIED IDEOGRAPH
+ {0xC3C1, 0x85EA}, //5372 #CJK UNIFIED IDEOGRAPH
+ {0xC3C2, 0x85D5}, //5373 #CJK UNIFIED IDEOGRAPH
+ {0xC3C3, 0x85E4}, //5374 #CJK UNIFIED IDEOGRAPH
+ {0xC3C4, 0x85E5}, //5375 #CJK UNIFIED IDEOGRAPH
+ {0xC3C5, 0x85F7}, //5376 #CJK UNIFIED IDEOGRAPH
+ {0xC3C6, 0x87FB}, //5377 #CJK UNIFIED IDEOGRAPH
+ {0xC3C7, 0x8805}, //5378 #CJK UNIFIED IDEOGRAPH
+ {0xC3C8, 0x880D}, //5379 #CJK UNIFIED IDEOGRAPH
+ {0xC3C9, 0x87F9}, //5380 #CJK UNIFIED IDEOGRAPH
+ {0xC3CA, 0x87FE}, //5381 #CJK UNIFIED IDEOGRAPH
+ {0xC3CB, 0x8960}, //5382 #CJK UNIFIED IDEOGRAPH
+ {0xC3CC, 0x895F}, //5383 #CJK UNIFIED IDEOGRAPH
+ {0xC3CD, 0x8956}, //5384 #CJK UNIFIED IDEOGRAPH
+ {0xC3CE, 0x895E}, //5385 #CJK UNIFIED IDEOGRAPH
+ {0xC3CF, 0x8B41}, //5386 #CJK UNIFIED IDEOGRAPH
+ {0xC3D0, 0x8B5C}, //5387 #CJK UNIFIED IDEOGRAPH
+ {0xC3D1, 0x8B58}, //5388 #CJK UNIFIED IDEOGRAPH
+ {0xC3D2, 0x8B49}, //5389 #CJK UNIFIED IDEOGRAPH
+ {0xC3D3, 0x8B5A}, //5390 #CJK UNIFIED IDEOGRAPH
+ {0xC3D4, 0x8B4E}, //5391 #CJK UNIFIED IDEOGRAPH
+ {0xC3D5, 0x8B4F}, //5392 #CJK UNIFIED IDEOGRAPH
+ {0xC3D6, 0x8B46}, //5393 #CJK UNIFIED IDEOGRAPH
+ {0xC3D7, 0x8B59}, //5394 #CJK UNIFIED IDEOGRAPH
+ {0xC3D8, 0x8D08}, //5395 #CJK UNIFIED IDEOGRAPH
+ {0xC3D9, 0x8D0A}, //5396 #CJK UNIFIED IDEOGRAPH
+ {0xC3DA, 0x8E7C}, //5397 #CJK UNIFIED IDEOGRAPH
+ {0xC3DB, 0x8E72}, //5398 #CJK UNIFIED IDEOGRAPH
+ {0xC3DC, 0x8E87}, //5399 #CJK UNIFIED IDEOGRAPH
+ {0xC3DD, 0x8E76}, //5400 #CJK UNIFIED IDEOGRAPH
+ {0xC3DE, 0x8E6C}, //5401 #CJK UNIFIED IDEOGRAPH
+ {0xC3DF, 0x8E7A}, //5402 #CJK UNIFIED IDEOGRAPH
+ {0xC3E0, 0x8E74}, //5403 #CJK UNIFIED IDEOGRAPH
+ {0xC3E1, 0x8F54}, //5404 #CJK UNIFIED IDEOGRAPH
+ {0xC3E2, 0x8F4E}, //5405 #CJK UNIFIED IDEOGRAPH
+ {0xC3E3, 0x8FAD}, //5406 #CJK UNIFIED IDEOGRAPH
+ {0xC3E4, 0x908A}, //5407 #CJK UNIFIED IDEOGRAPH
+ {0xC3E5, 0x908B}, //5408 #CJK UNIFIED IDEOGRAPH
+ {0xC3E6, 0x91B1}, //5409 #CJK UNIFIED IDEOGRAPH
+ {0xC3E7, 0x91AE}, //5410 #CJK UNIFIED IDEOGRAPH
+ {0xC3E8, 0x93E1}, //5411 #CJK UNIFIED IDEOGRAPH
+ {0xC3E9, 0x93D1}, //5412 #CJK UNIFIED IDEOGRAPH
+ {0xC3EA, 0x93DF}, //5413 #CJK UNIFIED IDEOGRAPH
+ {0xC3EB, 0x93C3}, //5414 #CJK UNIFIED IDEOGRAPH
+ {0xC3EC, 0x93C8}, //5415 #CJK UNIFIED IDEOGRAPH
+ {0xC3ED, 0x93DC}, //5416 #CJK UNIFIED IDEOGRAPH
+ {0xC3EE, 0x93DD}, //5417 #CJK UNIFIED IDEOGRAPH
+ {0xC3EF, 0x93D6}, //5418 #CJK UNIFIED IDEOGRAPH
+ {0xC3F0, 0x93E2}, //5419 #CJK UNIFIED IDEOGRAPH
+ {0xC3F1, 0x93CD}, //5420 #CJK UNIFIED IDEOGRAPH
+ {0xC3F2, 0x93D8}, //5421 #CJK UNIFIED IDEOGRAPH
+ {0xC3F3, 0x93E4}, //5422 #CJK UNIFIED IDEOGRAPH
+ {0xC3F4, 0x93D7}, //5423 #CJK UNIFIED IDEOGRAPH
+ {0xC3F5, 0x93E8}, //5424 #CJK UNIFIED IDEOGRAPH
+ {0xC3F6, 0x95DC}, //5425 #CJK UNIFIED IDEOGRAPH
+ {0xC3F7, 0x96B4}, //5426 #CJK UNIFIED IDEOGRAPH
+ {0xC3F8, 0x96E3}, //5427 #CJK UNIFIED IDEOGRAPH
+ {0xC3F9, 0x972A}, //5428 #CJK UNIFIED IDEOGRAPH
+ {0xC3FA, 0x9727}, //5429 #CJK UNIFIED IDEOGRAPH
+ {0xC3FB, 0x9761}, //5430 #CJK UNIFIED IDEOGRAPH
+ {0xC3FC, 0x97DC}, //5431 #CJK UNIFIED IDEOGRAPH
+ {0xC3FD, 0x97FB}, //5432 #CJK UNIFIED IDEOGRAPH
+ {0xC3FE, 0x985E}, //5433 #CJK UNIFIED IDEOGRAPH
+ {0xC440, 0x9858}, //5434 #CJK UNIFIED IDEOGRAPH
+ {0xC441, 0x985B}, //5435 #CJK UNIFIED IDEOGRAPH
+ {0xC442, 0x98BC}, //5436 #CJK UNIFIED IDEOGRAPH
+ {0xC443, 0x9945}, //5437 #CJK UNIFIED IDEOGRAPH
+ {0xC444, 0x9949}, //5438 #CJK UNIFIED IDEOGRAPH
+ {0xC445, 0x9A16}, //5439 #CJK UNIFIED IDEOGRAPH
+ {0xC446, 0x9A19}, //5440 #CJK UNIFIED IDEOGRAPH
+ {0xC447, 0x9B0D}, //5441 #CJK UNIFIED IDEOGRAPH
+ {0xC448, 0x9BE8}, //5442 #CJK UNIFIED IDEOGRAPH
+ {0xC449, 0x9BE7}, //5443 #CJK UNIFIED IDEOGRAPH
+ {0xC44A, 0x9BD6}, //5444 #CJK UNIFIED IDEOGRAPH
+ {0xC44B, 0x9BDB}, //5445 #CJK UNIFIED IDEOGRAPH
+ {0xC44C, 0x9D89}, //5446 #CJK UNIFIED IDEOGRAPH
+ {0xC44D, 0x9D61}, //5447 #CJK UNIFIED IDEOGRAPH
+ {0xC44E, 0x9D72}, //5448 #CJK UNIFIED IDEOGRAPH
+ {0xC44F, 0x9D6A}, //5449 #CJK UNIFIED IDEOGRAPH
+ {0xC450, 0x9D6C}, //5450 #CJK UNIFIED IDEOGRAPH
+ {0xC451, 0x9E92}, //5451 #CJK UNIFIED IDEOGRAPH
+ {0xC452, 0x9E97}, //5452 #CJK UNIFIED IDEOGRAPH
+ {0xC453, 0x9E93}, //5453 #CJK UNIFIED IDEOGRAPH
+ {0xC454, 0x9EB4}, //5454 #CJK UNIFIED IDEOGRAPH
+ {0xC455, 0x52F8}, //5455 #CJK UNIFIED IDEOGRAPH
+ {0xC456, 0x56A8}, //5456 #CJK UNIFIED IDEOGRAPH
+ {0xC457, 0x56B7}, //5457 #CJK UNIFIED IDEOGRAPH
+ {0xC458, 0x56B6}, //5458 #CJK UNIFIED IDEOGRAPH
+ {0xC459, 0x56B4}, //5459 #CJK UNIFIED IDEOGRAPH
+ {0xC45A, 0x56BC}, //5460 #CJK UNIFIED IDEOGRAPH
+ {0xC45B, 0x58E4}, //5461 #CJK UNIFIED IDEOGRAPH
+ {0xC45C, 0x5B40}, //5462 #CJK UNIFIED IDEOGRAPH
+ {0xC45D, 0x5B43}, //5463 #CJK UNIFIED IDEOGRAPH
+ {0xC45E, 0x5B7D}, //5464 #CJK UNIFIED IDEOGRAPH
+ {0xC45F, 0x5BF6}, //5465 #CJK UNIFIED IDEOGRAPH
+ {0xC460, 0x5DC9}, //5466 #CJK UNIFIED IDEOGRAPH
+ {0xC461, 0x61F8}, //5467 #CJK UNIFIED IDEOGRAPH
+ {0xC462, 0x61FA}, //5468 #CJK UNIFIED IDEOGRAPH
+ {0xC463, 0x6518}, //5469 #CJK UNIFIED IDEOGRAPH
+ {0xC464, 0x6514}, //5470 #CJK UNIFIED IDEOGRAPH
+ {0xC465, 0x6519}, //5471 #CJK UNIFIED IDEOGRAPH
+ {0xC466, 0x66E6}, //5472 #CJK UNIFIED IDEOGRAPH
+ {0xC467, 0x6727}, //5473 #CJK UNIFIED IDEOGRAPH
+ {0xC468, 0x6AEC}, //5474 #CJK UNIFIED IDEOGRAPH
+ {0xC469, 0x703E}, //5475 #CJK UNIFIED IDEOGRAPH
+ {0xC46A, 0x7030}, //5476 #CJK UNIFIED IDEOGRAPH
+ {0xC46B, 0x7032}, //5477 #CJK UNIFIED IDEOGRAPH
+ {0xC46C, 0x7210}, //5478 #CJK UNIFIED IDEOGRAPH
+ {0xC46D, 0x737B}, //5479 #CJK UNIFIED IDEOGRAPH
+ {0xC46E, 0x74CF}, //5480 #CJK UNIFIED IDEOGRAPH
+ {0xC46F, 0x7662}, //5481 #CJK UNIFIED IDEOGRAPH
+ {0xC470, 0x7665}, //5482 #CJK UNIFIED IDEOGRAPH
+ {0xC471, 0x7926}, //5483 #CJK UNIFIED IDEOGRAPH
+ {0xC472, 0x792A}, //5484 #CJK UNIFIED IDEOGRAPH
+ {0xC473, 0x792C}, //5485 #CJK UNIFIED IDEOGRAPH
+ {0xC474, 0x792B}, //5486 #CJK UNIFIED IDEOGRAPH
+ {0xC475, 0x7AC7}, //5487 #CJK UNIFIED IDEOGRAPH
+ {0xC476, 0x7AF6}, //5488 #CJK UNIFIED IDEOGRAPH
+ {0xC477, 0x7C4C}, //5489 #CJK UNIFIED IDEOGRAPH
+ {0xC478, 0x7C43}, //5490 #CJK UNIFIED IDEOGRAPH
+ {0xC479, 0x7C4D}, //5491 #CJK UNIFIED IDEOGRAPH
+ {0xC47A, 0x7CEF}, //5492 #CJK UNIFIED IDEOGRAPH
+ {0xC47B, 0x7CF0}, //5493 #CJK UNIFIED IDEOGRAPH
+ {0xC47C, 0x8FAE}, //5494 #CJK UNIFIED IDEOGRAPH
+ {0xC47D, 0x7E7D}, //5495 #CJK UNIFIED IDEOGRAPH
+ {0xC47E, 0x7E7C}, //5496 #CJK UNIFIED IDEOGRAPH
+ {0xC4A1, 0x7E82}, //5497 #CJK UNIFIED IDEOGRAPH
+ {0xC4A2, 0x7F4C}, //5498 #CJK UNIFIED IDEOGRAPH
+ {0xC4A3, 0x8000}, //5499 #CJK UNIFIED IDEOGRAPH
+ {0xC4A4, 0x81DA}, //5500 #CJK UNIFIED IDEOGRAPH
+ {0xC4A5, 0x8266}, //5501 #CJK UNIFIED IDEOGRAPH
+ {0xC4A6, 0x85FB}, //5502 #CJK UNIFIED IDEOGRAPH
+ {0xC4A7, 0x85F9}, //5503 #CJK UNIFIED IDEOGRAPH
+ {0xC4A8, 0x8611}, //5504 #CJK UNIFIED IDEOGRAPH
+ {0xC4A9, 0x85FA}, //5505 #CJK UNIFIED IDEOGRAPH
+ {0xC4AA, 0x8606}, //5506 #CJK UNIFIED IDEOGRAPH
+ {0xC4AB, 0x860B}, //5507 #CJK UNIFIED IDEOGRAPH
+ {0xC4AC, 0x8607}, //5508 #CJK UNIFIED IDEOGRAPH
+ {0xC4AD, 0x860A}, //5509 #CJK UNIFIED IDEOGRAPH
+ {0xC4AE, 0x8814}, //5510 #CJK UNIFIED IDEOGRAPH
+ {0xC4AF, 0x8815}, //5511 #CJK UNIFIED IDEOGRAPH
+ {0xC4B0, 0x8964}, //5512 #CJK UNIFIED IDEOGRAPH
+ {0xC4B1, 0x89BA}, //5513 #CJK UNIFIED IDEOGRAPH
+ {0xC4B2, 0x89F8}, //5514 #CJK UNIFIED IDEOGRAPH
+ {0xC4B3, 0x8B70}, //5515 #CJK UNIFIED IDEOGRAPH
+ {0xC4B4, 0x8B6C}, //5516 #CJK UNIFIED IDEOGRAPH
+ {0xC4B5, 0x8B66}, //5517 #CJK UNIFIED IDEOGRAPH
+ {0xC4B6, 0x8B6F}, //5518 #CJK UNIFIED IDEOGRAPH
+ {0xC4B7, 0x8B5F}, //5519 #CJK UNIFIED IDEOGRAPH
+ {0xC4B8, 0x8B6B}, //5520 #CJK UNIFIED IDEOGRAPH
+ {0xC4B9, 0x8D0F}, //5521 #CJK UNIFIED IDEOGRAPH
+ {0xC4BA, 0x8D0D}, //5522 #CJK UNIFIED IDEOGRAPH
+ {0xC4BB, 0x8E89}, //5523 #CJK UNIFIED IDEOGRAPH
+ {0xC4BC, 0x8E81}, //5524 #CJK UNIFIED IDEOGRAPH
+ {0xC4BD, 0x8E85}, //5525 #CJK UNIFIED IDEOGRAPH
+ {0xC4BE, 0x8E82}, //5526 #CJK UNIFIED IDEOGRAPH
+ {0xC4BF, 0x91B4}, //5527 #CJK UNIFIED IDEOGRAPH
+ {0xC4C0, 0x91CB}, //5528 #CJK UNIFIED IDEOGRAPH
+ {0xC4C1, 0x9418}, //5529 #CJK UNIFIED IDEOGRAPH
+ {0xC4C2, 0x9403}, //5530 #CJK UNIFIED IDEOGRAPH
+ {0xC4C3, 0x93FD}, //5531 #CJK UNIFIED IDEOGRAPH
+ {0xC4C4, 0x95E1}, //5532 #CJK UNIFIED IDEOGRAPH
+ {0xC4C5, 0x9730}, //5533 #CJK UNIFIED IDEOGRAPH
+ {0xC4C6, 0x98C4}, //5534 #CJK UNIFIED IDEOGRAPH
+ {0xC4C7, 0x9952}, //5535 #CJK UNIFIED IDEOGRAPH
+ {0xC4C8, 0x9951}, //5536 #CJK UNIFIED IDEOGRAPH
+ {0xC4C9, 0x99A8}, //5537 #CJK UNIFIED IDEOGRAPH
+ {0xC4CA, 0x9A2B}, //5538 #CJK UNIFIED IDEOGRAPH
+ {0xC4CB, 0x9A30}, //5539 #CJK UNIFIED IDEOGRAPH
+ {0xC4CC, 0x9A37}, //5540 #CJK UNIFIED IDEOGRAPH
+ {0xC4CD, 0x9A35}, //5541 #CJK UNIFIED IDEOGRAPH
+ {0xC4CE, 0x9C13}, //5542 #CJK UNIFIED IDEOGRAPH
+ {0xC4CF, 0x9C0D}, //5543 #CJK UNIFIED IDEOGRAPH
+ {0xC4D0, 0x9E79}, //5544 #CJK UNIFIED IDEOGRAPH
+ {0xC4D1, 0x9EB5}, //5545 #CJK UNIFIED IDEOGRAPH
+ {0xC4D2, 0x9EE8}, //5546 #CJK UNIFIED IDEOGRAPH
+ {0xC4D3, 0x9F2F}, //5547 #CJK UNIFIED IDEOGRAPH
+ {0xC4D4, 0x9F5F}, //5548 #CJK UNIFIED IDEOGRAPH
+ {0xC4D5, 0x9F63}, //5549 #CJK UNIFIED IDEOGRAPH
+ {0xC4D6, 0x9F61}, //5550 #CJK UNIFIED IDEOGRAPH
+ {0xC4D7, 0x5137}, //5551 #CJK UNIFIED IDEOGRAPH
+ {0xC4D8, 0x5138}, //5552 #CJK UNIFIED IDEOGRAPH
+ {0xC4D9, 0x56C1}, //5553 #CJK UNIFIED IDEOGRAPH
+ {0xC4DA, 0x56C0}, //5554 #CJK UNIFIED IDEOGRAPH
+ {0xC4DB, 0x56C2}, //5555 #CJK UNIFIED IDEOGRAPH
+ {0xC4DC, 0x5914}, //5556 #CJK UNIFIED IDEOGRAPH
+ {0xC4DD, 0x5C6C}, //5557 #CJK UNIFIED IDEOGRAPH
+ {0xC4DE, 0x5DCD}, //5558 #CJK UNIFIED IDEOGRAPH
+ {0xC4DF, 0x61FC}, //5559 #CJK UNIFIED IDEOGRAPH
+ {0xC4E0, 0x61FE}, //5560 #CJK UNIFIED IDEOGRAPH
+ {0xC4E1, 0x651D}, //5561 #CJK UNIFIED IDEOGRAPH
+ {0xC4E2, 0x651C}, //5562 #CJK UNIFIED IDEOGRAPH
+ {0xC4E3, 0x6595}, //5563 #CJK UNIFIED IDEOGRAPH
+ {0xC4E4, 0x66E9}, //5564 #CJK UNIFIED IDEOGRAPH
+ {0xC4E5, 0x6AFB}, //5565 #CJK UNIFIED IDEOGRAPH
+ {0xC4E6, 0x6B04}, //5566 #CJK UNIFIED IDEOGRAPH
+ {0xC4E7, 0x6AFA}, //5567 #CJK UNIFIED IDEOGRAPH
+ {0xC4E8, 0x6BB2}, //5568 #CJK UNIFIED IDEOGRAPH
+ {0xC4E9, 0x704C}, //5569 #CJK UNIFIED IDEOGRAPH
+ {0xC4EA, 0x721B}, //5570 #CJK UNIFIED IDEOGRAPH
+ {0xC4EB, 0x72A7}, //5571 #CJK UNIFIED IDEOGRAPH
+ {0xC4EC, 0x74D6}, //5572 #CJK UNIFIED IDEOGRAPH
+ {0xC4ED, 0x74D4}, //5573 #CJK UNIFIED IDEOGRAPH
+ {0xC4EE, 0x7669}, //5574 #CJK UNIFIED IDEOGRAPH
+ {0xC4EF, 0x77D3}, //5575 #CJK UNIFIED IDEOGRAPH
+ {0xC4F0, 0x7C50}, //5576 #CJK UNIFIED IDEOGRAPH
+ {0xC4F1, 0x7E8F}, //5577 #CJK UNIFIED IDEOGRAPH
+ {0xC4F2, 0x7E8C}, //5578 #CJK UNIFIED IDEOGRAPH
+ {0xC4F3, 0x7FBC}, //5579 #CJK UNIFIED IDEOGRAPH
+ {0xC4F4, 0x8617}, //5580 #CJK UNIFIED IDEOGRAPH
+ {0xC4F5, 0x862D}, //5581 #CJK UNIFIED IDEOGRAPH
+ {0xC4F6, 0x861A}, //5582 #CJK UNIFIED IDEOGRAPH
+ {0xC4F7, 0x8823}, //5583 #CJK UNIFIED IDEOGRAPH
+ {0xC4F8, 0x8822}, //5584 #CJK UNIFIED IDEOGRAPH
+ {0xC4F9, 0x8821}, //5585 #CJK UNIFIED IDEOGRAPH
+ {0xC4FA, 0x881F}, //5586 #CJK UNIFIED IDEOGRAPH
+ {0xC4FB, 0x896A}, //5587 #CJK UNIFIED IDEOGRAPH
+ {0xC4FC, 0x896C}, //5588 #CJK UNIFIED IDEOGRAPH
+ {0xC4FD, 0x89BD}, //5589 #CJK UNIFIED IDEOGRAPH
+ {0xC4FE, 0x8B74}, //5590 #CJK UNIFIED IDEOGRAPH
+ {0xC540, 0x8B77}, //5591 #CJK UNIFIED IDEOGRAPH
+ {0xC541, 0x8B7D}, //5592 #CJK UNIFIED IDEOGRAPH
+ {0xC542, 0x8D13}, //5593 #CJK UNIFIED IDEOGRAPH
+ {0xC543, 0x8E8A}, //5594 #CJK UNIFIED IDEOGRAPH
+ {0xC544, 0x8E8D}, //5595 #CJK UNIFIED IDEOGRAPH
+ {0xC545, 0x8E8B}, //5596 #CJK UNIFIED IDEOGRAPH
+ {0xC546, 0x8F5F}, //5597 #CJK UNIFIED IDEOGRAPH
+ {0xC547, 0x8FAF}, //5598 #CJK UNIFIED IDEOGRAPH
+ {0xC548, 0x91BA}, //5599 #CJK UNIFIED IDEOGRAPH
+ {0xC549, 0x942E}, //5600 #CJK UNIFIED IDEOGRAPH
+ {0xC54A, 0x9433}, //5601 #CJK UNIFIED IDEOGRAPH
+ {0xC54B, 0x9435}, //5602 #CJK UNIFIED IDEOGRAPH
+ {0xC54C, 0x943A}, //5603 #CJK UNIFIED IDEOGRAPH
+ {0xC54D, 0x9438}, //5604 #CJK UNIFIED IDEOGRAPH
+ {0xC54E, 0x9432}, //5605 #CJK UNIFIED IDEOGRAPH
+ {0xC54F, 0x942B}, //5606 #CJK UNIFIED IDEOGRAPH
+ {0xC550, 0x95E2}, //5607 #CJK UNIFIED IDEOGRAPH
+ {0xC551, 0x9738}, //5608 #CJK UNIFIED IDEOGRAPH
+ {0xC552, 0x9739}, //5609 #CJK UNIFIED IDEOGRAPH
+ {0xC553, 0x9732}, //5610 #CJK UNIFIED IDEOGRAPH
+ {0xC554, 0x97FF}, //5611 #CJK UNIFIED IDEOGRAPH
+ {0xC555, 0x9867}, //5612 #CJK UNIFIED IDEOGRAPH
+ {0xC556, 0x9865}, //5613 #CJK UNIFIED IDEOGRAPH
+ {0xC557, 0x9957}, //5614 #CJK UNIFIED IDEOGRAPH
+ {0xC558, 0x9A45}, //5615 #CJK UNIFIED IDEOGRAPH
+ {0xC559, 0x9A43}, //5616 #CJK UNIFIED IDEOGRAPH
+ {0xC55A, 0x9A40}, //5617 #CJK UNIFIED IDEOGRAPH
+ {0xC55B, 0x9A3E}, //5618 #CJK UNIFIED IDEOGRAPH
+ {0xC55C, 0x9ACF}, //5619 #CJK UNIFIED IDEOGRAPH
+ {0xC55D, 0x9B54}, //5620 #CJK UNIFIED IDEOGRAPH
+ {0xC55E, 0x9B51}, //5621 #CJK UNIFIED IDEOGRAPH
+ {0xC55F, 0x9C2D}, //5622 #CJK UNIFIED IDEOGRAPH
+ {0xC560, 0x9C25}, //5623 #CJK UNIFIED IDEOGRAPH
+ {0xC561, 0x9DAF}, //5624 #CJK UNIFIED IDEOGRAPH
+ {0xC562, 0x9DB4}, //5625 #CJK UNIFIED IDEOGRAPH
+ {0xC563, 0x9DC2}, //5626 #CJK UNIFIED IDEOGRAPH
+ {0xC564, 0x9DB8}, //5627 #CJK UNIFIED IDEOGRAPH
+ {0xC565, 0x9E9D}, //5628 #CJK UNIFIED IDEOGRAPH
+ {0xC566, 0x9EEF}, //5629 #CJK UNIFIED IDEOGRAPH
+ {0xC567, 0x9F19}, //5630 #CJK UNIFIED IDEOGRAPH
+ {0xC568, 0x9F5C}, //5631 #CJK UNIFIED IDEOGRAPH
+ {0xC569, 0x9F66}, //5632 #CJK UNIFIED IDEOGRAPH
+ {0xC56A, 0x9F67}, //5633 #CJK UNIFIED IDEOGRAPH
+ {0xC56B, 0x513C}, //5634 #CJK UNIFIED IDEOGRAPH
+ {0xC56C, 0x513B}, //5635 #CJK UNIFIED IDEOGRAPH
+ {0xC56D, 0x56C8}, //5636 #CJK UNIFIED IDEOGRAPH
+ {0xC56E, 0x56CA}, //5637 #CJK UNIFIED IDEOGRAPH
+ {0xC56F, 0x56C9}, //5638 #CJK UNIFIED IDEOGRAPH
+ {0xC570, 0x5B7F}, //5639 #CJK UNIFIED IDEOGRAPH
+ {0xC571, 0x5DD4}, //5640 #CJK UNIFIED IDEOGRAPH
+ {0xC572, 0x5DD2}, //5641 #CJK UNIFIED IDEOGRAPH
+ {0xC573, 0x5F4E}, //5642 #CJK UNIFIED IDEOGRAPH
+ {0xC574, 0x61FF}, //5643 #CJK UNIFIED IDEOGRAPH
+ {0xC575, 0x6524}, //5644 #CJK UNIFIED IDEOGRAPH
+ {0xC576, 0x6B0A}, //5645 #CJK UNIFIED IDEOGRAPH
+ {0xC577, 0x6B61}, //5646 #CJK UNIFIED IDEOGRAPH
+ {0xC578, 0x7051}, //5647 #CJK UNIFIED IDEOGRAPH
+ {0xC579, 0x7058}, //5648 #CJK UNIFIED IDEOGRAPH
+ {0xC57A, 0x7380}, //5649 #CJK UNIFIED IDEOGRAPH
+ {0xC57B, 0x74E4}, //5650 #CJK UNIFIED IDEOGRAPH
+ {0xC57C, 0x758A}, //5651 #CJK UNIFIED IDEOGRAPH
+ {0xC57D, 0x766E}, //5652 #CJK UNIFIED IDEOGRAPH
+ {0xC57E, 0x766C}, //5653 #CJK UNIFIED IDEOGRAPH
+ {0xC5A1, 0x79B3}, //5654 #CJK UNIFIED IDEOGRAPH
+ {0xC5A2, 0x7C60}, //5655 #CJK UNIFIED IDEOGRAPH
+ {0xC5A3, 0x7C5F}, //5656 #CJK UNIFIED IDEOGRAPH
+ {0xC5A4, 0x807E}, //5657 #CJK UNIFIED IDEOGRAPH
+ {0xC5A5, 0x807D}, //5658 #CJK UNIFIED IDEOGRAPH
+ {0xC5A6, 0x81DF}, //5659 #CJK UNIFIED IDEOGRAPH
+ {0xC5A7, 0x8972}, //5660 #CJK UNIFIED IDEOGRAPH
+ {0xC5A8, 0x896F}, //5661 #CJK UNIFIED IDEOGRAPH
+ {0xC5A9, 0x89FC}, //5662 #CJK UNIFIED IDEOGRAPH
+ {0xC5AA, 0x8B80}, //5663 #CJK UNIFIED IDEOGRAPH
+ {0xC5AB, 0x8D16}, //5664 #CJK UNIFIED IDEOGRAPH
+ {0xC5AC, 0x8D17}, //5665 #CJK UNIFIED IDEOGRAPH
+ {0xC5AD, 0x8E91}, //5666 #CJK UNIFIED IDEOGRAPH
+ {0xC5AE, 0x8E93}, //5667 #CJK UNIFIED IDEOGRAPH
+ {0xC5AF, 0x8F61}, //5668 #CJK UNIFIED IDEOGRAPH
+ {0xC5B0, 0x9148}, //5669 #CJK UNIFIED IDEOGRAPH
+ {0xC5B1, 0x9444}, //5670 #CJK UNIFIED IDEOGRAPH
+ {0xC5B2, 0x9451}, //5671 #CJK UNIFIED IDEOGRAPH
+ {0xC5B3, 0x9452}, //5672 #CJK UNIFIED IDEOGRAPH
+ {0xC5B4, 0x973D}, //5673 #CJK UNIFIED IDEOGRAPH
+ {0xC5B5, 0x973E}, //5674 #CJK UNIFIED IDEOGRAPH
+ {0xC5B6, 0x97C3}, //5675 #CJK UNIFIED IDEOGRAPH
+ {0xC5B7, 0x97C1}, //5676 #CJK UNIFIED IDEOGRAPH
+ {0xC5B8, 0x986B}, //5677 #CJK UNIFIED IDEOGRAPH
+ {0xC5B9, 0x9955}, //5678 #CJK UNIFIED IDEOGRAPH
+ {0xC5BA, 0x9A55}, //5679 #CJK UNIFIED IDEOGRAPH
+ {0xC5BB, 0x9A4D}, //5680 #CJK UNIFIED IDEOGRAPH
+ {0xC5BC, 0x9AD2}, //5681 #CJK UNIFIED IDEOGRAPH
+ {0xC5BD, 0x9B1A}, //5682 #CJK UNIFIED IDEOGRAPH
+ {0xC5BE, 0x9C49}, //5683 #CJK UNIFIED IDEOGRAPH
+ {0xC5BF, 0x9C31}, //5684 #CJK UNIFIED IDEOGRAPH
+ {0xC5C0, 0x9C3E}, //5685 #CJK UNIFIED IDEOGRAPH
+ {0xC5C1, 0x9C3B}, //5686 #CJK UNIFIED IDEOGRAPH
+ {0xC5C2, 0x9DD3}, //5687 #CJK UNIFIED IDEOGRAPH
+ {0xC5C3, 0x9DD7}, //5688 #CJK UNIFIED IDEOGRAPH
+ {0xC5C4, 0x9F34}, //5689 #CJK UNIFIED IDEOGRAPH
+ {0xC5C5, 0x9F6C}, //5690 #CJK UNIFIED IDEOGRAPH
+ {0xC5C6, 0x9F6A}, //5691 #CJK UNIFIED IDEOGRAPH
+ {0xC5C7, 0x9F94}, //5692 #CJK UNIFIED IDEOGRAPH
+ {0xC5C8, 0x56CC}, //5693 #CJK UNIFIED IDEOGRAPH
+ {0xC5C9, 0x5DD6}, //5694 #CJK UNIFIED IDEOGRAPH
+ {0xC5CA, 0x6200}, //5695 #CJK UNIFIED IDEOGRAPH
+ {0xC5CB, 0x6523}, //5696 #CJK UNIFIED IDEOGRAPH
+ {0xC5CC, 0x652B}, //5697 #CJK UNIFIED IDEOGRAPH
+ {0xC5CD, 0x652A}, //5698 #CJK UNIFIED IDEOGRAPH
+ {0xC5CE, 0x66EC}, //5699 #CJK UNIFIED IDEOGRAPH
+ {0xC5CF, 0x6B10}, //5700 #CJK UNIFIED IDEOGRAPH
+ {0xC5D0, 0x74DA}, //5701 #CJK UNIFIED IDEOGRAPH
+ {0xC5D1, 0x7ACA}, //5702 #CJK UNIFIED IDEOGRAPH
+ {0xC5D2, 0x7C64}, //5703 #CJK UNIFIED IDEOGRAPH
+ {0xC5D3, 0x7C63}, //5704 #CJK UNIFIED IDEOGRAPH
+ {0xC5D4, 0x7C65}, //5705 #CJK UNIFIED IDEOGRAPH
+ {0xC5D5, 0x7E93}, //5706 #CJK UNIFIED IDEOGRAPH
+ {0xC5D6, 0x7E96}, //5707 #CJK UNIFIED IDEOGRAPH
+ {0xC5D7, 0x7E94}, //5708 #CJK UNIFIED IDEOGRAPH
+ {0xC5D8, 0x81E2}, //5709 #CJK UNIFIED IDEOGRAPH
+ {0xC5D9, 0x8638}, //5710 #CJK UNIFIED IDEOGRAPH
+ {0xC5DA, 0x863F}, //5711 #CJK UNIFIED IDEOGRAPH
+ {0xC5DB, 0x8831}, //5712 #CJK UNIFIED IDEOGRAPH
+ {0xC5DC, 0x8B8A}, //5713 #CJK UNIFIED IDEOGRAPH
+ {0xC5DD, 0x9090}, //5714 #CJK UNIFIED IDEOGRAPH
+ {0xC5DE, 0x908F}, //5715 #CJK UNIFIED IDEOGRAPH
+ {0xC5DF, 0x9463}, //5716 #CJK UNIFIED IDEOGRAPH
+ {0xC5E0, 0x9460}, //5717 #CJK UNIFIED IDEOGRAPH
+ {0xC5E1, 0x9464}, //5718 #CJK UNIFIED IDEOGRAPH
+ {0xC5E2, 0x9768}, //5719 #CJK UNIFIED IDEOGRAPH
+ {0xC5E3, 0x986F}, //5720 #CJK UNIFIED IDEOGRAPH
+ {0xC5E4, 0x995C}, //5721 #CJK UNIFIED IDEOGRAPH
+ {0xC5E5, 0x9A5A}, //5722 #CJK UNIFIED IDEOGRAPH
+ {0xC5E6, 0x9A5B}, //5723 #CJK UNIFIED IDEOGRAPH
+ {0xC5E7, 0x9A57}, //5724 #CJK UNIFIED IDEOGRAPH
+ {0xC5E8, 0x9AD3}, //5725 #CJK UNIFIED IDEOGRAPH
+ {0xC5E9, 0x9AD4}, //5726 #CJK UNIFIED IDEOGRAPH
+ {0xC5EA, 0x9AD1}, //5727 #CJK UNIFIED IDEOGRAPH
+ {0xC5EB, 0x9C54}, //5728 #CJK UNIFIED IDEOGRAPH
+ {0xC5EC, 0x9C57}, //5729 #CJK UNIFIED IDEOGRAPH
+ {0xC5ED, 0x9C56}, //5730 #CJK UNIFIED IDEOGRAPH
+ {0xC5EE, 0x9DE5}, //5731 #CJK UNIFIED IDEOGRAPH
+ {0xC5EF, 0x9E9F}, //5732 #CJK UNIFIED IDEOGRAPH
+ {0xC5F0, 0x9EF4}, //5733 #CJK UNIFIED IDEOGRAPH
+ {0xC5F1, 0x56D1}, //5734 #CJK UNIFIED IDEOGRAPH
+ {0xC5F2, 0x58E9}, //5735 #CJK UNIFIED IDEOGRAPH
+ {0xC5F3, 0x652C}, //5736 #CJK UNIFIED IDEOGRAPH
+ {0xC5F4, 0x705E}, //5737 #CJK UNIFIED IDEOGRAPH
+ {0xC5F5, 0x7671}, //5738 #CJK UNIFIED IDEOGRAPH
+ {0xC5F6, 0x7672}, //5739 #CJK UNIFIED IDEOGRAPH
+ {0xC5F7, 0x77D7}, //5740 #CJK UNIFIED IDEOGRAPH
+ {0xC5F8, 0x7F50}, //5741 #CJK UNIFIED IDEOGRAPH
+ {0xC5F9, 0x7F88}, //5742 #CJK UNIFIED IDEOGRAPH
+ {0xC5FA, 0x8836}, //5743 #CJK UNIFIED IDEOGRAPH
+ {0xC5FB, 0x8839}, //5744 #CJK UNIFIED IDEOGRAPH
+ {0xC5FC, 0x8862}, //5745 #CJK UNIFIED IDEOGRAPH
+ {0xC5FD, 0x8B93}, //5746 #CJK UNIFIED IDEOGRAPH
+ {0xC5FE, 0x8B92}, //5747 #CJK UNIFIED IDEOGRAPH
+ {0xC640, 0x8B96}, //5748 #CJK UNIFIED IDEOGRAPH
+ {0xC641, 0x8277}, //5749 #CJK UNIFIED IDEOGRAPH
+ {0xC642, 0x8D1B}, //5750 #CJK UNIFIED IDEOGRAPH
+ {0xC643, 0x91C0}, //5751 #CJK UNIFIED IDEOGRAPH
+ {0xC644, 0x946A}, //5752 #CJK UNIFIED IDEOGRAPH
+ {0xC645, 0x9742}, //5753 #CJK UNIFIED IDEOGRAPH
+ {0xC646, 0x9748}, //5754 #CJK UNIFIED IDEOGRAPH
+ {0xC647, 0x9744}, //5755 #CJK UNIFIED IDEOGRAPH
+ {0xC648, 0x97C6}, //5756 #CJK UNIFIED IDEOGRAPH
+ {0xC649, 0x9870}, //5757 #CJK UNIFIED IDEOGRAPH
+ {0xC64A, 0x9A5F}, //5758 #CJK UNIFIED IDEOGRAPH
+ {0xC64B, 0x9B22}, //5759 #CJK UNIFIED IDEOGRAPH
+ {0xC64C, 0x9B58}, //5760 #CJK UNIFIED IDEOGRAPH
+ {0xC64D, 0x9C5F}, //5761 #CJK UNIFIED IDEOGRAPH
+ {0xC64E, 0x9DF9}, //5762 #CJK UNIFIED IDEOGRAPH
+ {0xC64F, 0x9DFA}, //5763 #CJK UNIFIED IDEOGRAPH
+ {0xC650, 0x9E7C}, //5764 #CJK UNIFIED IDEOGRAPH
+ {0xC651, 0x9E7D}, //5765 #CJK UNIFIED IDEOGRAPH
+ {0xC652, 0x9F07}, //5766 #CJK UNIFIED IDEOGRAPH
+ {0xC653, 0x9F77}, //5767 #CJK UNIFIED IDEOGRAPH
+ {0xC654, 0x9F72}, //5768 #CJK UNIFIED IDEOGRAPH
+ {0xC655, 0x5EF3}, //5769 #CJK UNIFIED IDEOGRAPH
+ {0xC656, 0x6B16}, //5770 #CJK UNIFIED IDEOGRAPH
+ {0xC657, 0x7063}, //5771 #CJK UNIFIED IDEOGRAPH
+ {0xC658, 0x7C6C}, //5772 #CJK UNIFIED IDEOGRAPH
+ {0xC659, 0x7C6E}, //5773 #CJK UNIFIED IDEOGRAPH
+ {0xC65A, 0x883B}, //5774 #CJK UNIFIED IDEOGRAPH
+ {0xC65B, 0x89C0}, //5775 #CJK UNIFIED IDEOGRAPH
+ {0xC65C, 0x8EA1}, //5776 #CJK UNIFIED IDEOGRAPH
+ {0xC65D, 0x91C1}, //5777 #CJK UNIFIED IDEOGRAPH
+ {0xC65E, 0x9472}, //5778 #CJK UNIFIED IDEOGRAPH
+ {0xC65F, 0x9470}, //5779 #CJK UNIFIED IDEOGRAPH
+ {0xC660, 0x9871}, //5780 #CJK UNIFIED IDEOGRAPH
+ {0xC661, 0x995E}, //5781 #CJK UNIFIED IDEOGRAPH
+ {0xC662, 0x9AD6}, //5782 #CJK UNIFIED IDEOGRAPH
+ {0xC663, 0x9B23}, //5783 #CJK UNIFIED IDEOGRAPH
+ {0xC664, 0x9ECC}, //5784 #CJK UNIFIED IDEOGRAPH
+ {0xC665, 0x7064}, //5785 #CJK UNIFIED IDEOGRAPH
+ {0xC666, 0x77DA}, //5786 #CJK UNIFIED IDEOGRAPH
+ {0xC667, 0x8B9A}, //5787 #CJK UNIFIED IDEOGRAPH
+ {0xC668, 0x9477}, //5788 #CJK UNIFIED IDEOGRAPH
+ {0xC669, 0x97C9}, //5789 #CJK UNIFIED IDEOGRAPH
+ {0xC66A, 0x9A62}, //5790 #CJK UNIFIED IDEOGRAPH
+ {0xC66B, 0x9A65}, //5791 #CJK UNIFIED IDEOGRAPH
+ {0xC66C, 0x7E9C}, //5792 #CJK UNIFIED IDEOGRAPH
+ {0xC66D, 0x8B9C}, //5793 #CJK UNIFIED IDEOGRAPH
+ {0xC66E, 0x8EAA}, //5794 #CJK UNIFIED IDEOGRAPH
+ {0xC66F, 0x91C5}, //5795 #CJK UNIFIED IDEOGRAPH
+ {0xC670, 0x947D}, //5796 #CJK UNIFIED IDEOGRAPH
+ {0xC671, 0x947E}, //5797 #CJK UNIFIED IDEOGRAPH
+ {0xC672, 0x947C}, //5798 #CJK UNIFIED IDEOGRAPH
+ {0xC673, 0x9C77}, //5799 #CJK UNIFIED IDEOGRAPH
+ {0xC674, 0x9C78}, //5800 #CJK UNIFIED IDEOGRAPH
+ {0xC675, 0x9EF7}, //5801 #CJK UNIFIED IDEOGRAPH
+ {0xC676, 0x8C54}, //5802 #CJK UNIFIED IDEOGRAPH
+ {0xC677, 0x947F}, //5803 #CJK UNIFIED IDEOGRAPH
+ {0xC678, 0x9E1A}, //5804 #CJK UNIFIED IDEOGRAPH
+ {0xC679, 0x7228}, //5805 #CJK UNIFIED IDEOGRAPH
+ {0xC67A, 0x9A6A}, //5806 #CJK UNIFIED IDEOGRAPH
+ {0xC67B, 0x9B31}, //5807 #CJK UNIFIED IDEOGRAPH
+ {0xC67C, 0x9E1B}, //5808 #CJK UNIFIED IDEOGRAPH
+ {0xC67D, 0x9E1E}, //5809 #CJK UNIFIED IDEOGRAPH
+ {0xC67E, 0x7C72}, //5810 #CJK UNIFIED IDEOGRAPH
+ {0xC940, 0x4E42}, //5811 #CJK UNIFIED IDEOGRAPH
+ {0xC941, 0x4E5C}, //5812 #CJK UNIFIED IDEOGRAPH
+ {0xC942, 0x51F5}, //5813 #CJK UNIFIED IDEOGRAPH
+ {0xC943, 0x531A}, //5814 #CJK UNIFIED IDEOGRAPH
+ {0xC944, 0x5382}, //5815 #CJK UNIFIED IDEOGRAPH
+ {0xC945, 0x4E07}, //5816 #CJK UNIFIED IDEOGRAPH
+ {0xC946, 0x4E0C}, //5817 #CJK UNIFIED IDEOGRAPH
+ {0xC947, 0x4E47}, //5818 #CJK UNIFIED IDEOGRAPH
+ {0xC948, 0x4E8D}, //5819 #CJK UNIFIED IDEOGRAPH
+ {0xC949, 0x56D7}, //5820 #CJK UNIFIED IDEOGRAPH
+ {0xC94A, 0xFA0C}, //5821 #CJK COMPATIBILITY IDEOGRAPH
+ {0xC94B, 0x5C6E}, //5822 #CJK UNIFIED IDEOGRAPH
+ {0xC94C, 0x5F73}, //5823 #CJK UNIFIED IDEOGRAPH
+ {0xC94D, 0x4E0F}, //5824 #CJK UNIFIED IDEOGRAPH
+ {0xC94E, 0x5187}, //5825 #CJK UNIFIED IDEOGRAPH
+ {0xC94F, 0x4E0E}, //5826 #CJK UNIFIED IDEOGRAPH
+ {0xC950, 0x4E2E}, //5827 #CJK UNIFIED IDEOGRAPH
+ {0xC951, 0x4E93}, //5828 #CJK UNIFIED IDEOGRAPH
+ {0xC952, 0x4EC2}, //5829 #CJK UNIFIED IDEOGRAPH
+ {0xC953, 0x4EC9}, //5830 #CJK UNIFIED IDEOGRAPH
+ {0xC954, 0x4EC8}, //5831 #CJK UNIFIED IDEOGRAPH
+ {0xC955, 0x5198}, //5832 #CJK UNIFIED IDEOGRAPH
+ {0xC956, 0x52FC}, //5833 #CJK UNIFIED IDEOGRAPH
+ {0xC957, 0x536C}, //5834 #CJK UNIFIED IDEOGRAPH
+ {0xC958, 0x53B9}, //5835 #CJK UNIFIED IDEOGRAPH
+ {0xC959, 0x5720}, //5836 #CJK UNIFIED IDEOGRAPH
+ {0xC95A, 0x5903}, //5837 #CJK UNIFIED IDEOGRAPH
+ {0xC95B, 0x592C}, //5838 #CJK UNIFIED IDEOGRAPH
+ {0xC95C, 0x5C10}, //5839 #CJK UNIFIED IDEOGRAPH
+ {0xC95D, 0x5DFF}, //5840 #CJK UNIFIED IDEOGRAPH
+ {0xC95E, 0x65E1}, //5841 #CJK UNIFIED IDEOGRAPH
+ {0xC95F, 0x6BB3}, //5842 #CJK UNIFIED IDEOGRAPH
+ {0xC960, 0x6BCC}, //5843 #CJK UNIFIED IDEOGRAPH
+ {0xC961, 0x6C14}, //5844 #CJK UNIFIED IDEOGRAPH
+ {0xC962, 0x723F}, //5845 #CJK UNIFIED IDEOGRAPH
+ {0xC963, 0x4E31}, //5846 #CJK UNIFIED IDEOGRAPH
+ {0xC964, 0x4E3C}, //5847 #CJK UNIFIED IDEOGRAPH
+ {0xC965, 0x4EE8}, //5848 #CJK UNIFIED IDEOGRAPH
+ {0xC966, 0x4EDC}, //5849 #CJK UNIFIED IDEOGRAPH
+ {0xC967, 0x4EE9}, //5850 #CJK UNIFIED IDEOGRAPH
+ {0xC968, 0x4EE1}, //5851 #CJK UNIFIED IDEOGRAPH
+ {0xC969, 0x4EDD}, //5852 #CJK UNIFIED IDEOGRAPH
+ {0xC96A, 0x4EDA}, //5853 #CJK UNIFIED IDEOGRAPH
+ {0xC96B, 0x520C}, //5854 #CJK UNIFIED IDEOGRAPH
+ {0xC96C, 0x531C}, //5855 #CJK UNIFIED IDEOGRAPH
+ {0xC96D, 0x534C}, //5856 #CJK UNIFIED IDEOGRAPH
+ {0xC96E, 0x5722}, //5857 #CJK UNIFIED IDEOGRAPH
+ {0xC96F, 0x5723}, //5858 #CJK UNIFIED IDEOGRAPH
+ {0xC970, 0x5917}, //5859 #CJK UNIFIED IDEOGRAPH
+ {0xC971, 0x592F}, //5860 #CJK UNIFIED IDEOGRAPH
+ {0xC972, 0x5B81}, //5861 #CJK UNIFIED IDEOGRAPH
+ {0xC973, 0x5B84}, //5862 #CJK UNIFIED IDEOGRAPH
+ {0xC974, 0x5C12}, //5863 #CJK UNIFIED IDEOGRAPH
+ {0xC975, 0x5C3B}, //5864 #CJK UNIFIED IDEOGRAPH
+ {0xC976, 0x5C74}, //5865 #CJK UNIFIED IDEOGRAPH
+ {0xC977, 0x5C73}, //5866 #CJK UNIFIED IDEOGRAPH
+ {0xC978, 0x5E04}, //5867 #CJK UNIFIED IDEOGRAPH
+ {0xC979, 0x5E80}, //5868 #CJK UNIFIED IDEOGRAPH
+ {0xC97A, 0x5E82}, //5869 #CJK UNIFIED IDEOGRAPH
+ {0xC97B, 0x5FC9}, //5870 #CJK UNIFIED IDEOGRAPH
+ {0xC97C, 0x6209}, //5871 #CJK UNIFIED IDEOGRAPH
+ {0xC97D, 0x6250}, //5872 #CJK UNIFIED IDEOGRAPH
+ {0xC97E, 0x6C15}, //5873 #CJK UNIFIED IDEOGRAPH
+ {0xC9A1, 0x6C36}, //5874 #CJK UNIFIED IDEOGRAPH
+ {0xC9A2, 0x6C43}, //5875 #CJK UNIFIED IDEOGRAPH
+ {0xC9A3, 0x6C3F}, //5876 #CJK UNIFIED IDEOGRAPH
+ {0xC9A4, 0x6C3B}, //5877 #CJK UNIFIED IDEOGRAPH
+ {0xC9A5, 0x72AE}, //5878 #CJK UNIFIED IDEOGRAPH
+ {0xC9A6, 0x72B0}, //5879 #CJK UNIFIED IDEOGRAPH
+ {0xC9A7, 0x738A}, //5880 #CJK UNIFIED IDEOGRAPH
+ {0xC9A8, 0x79B8}, //5881 #CJK UNIFIED IDEOGRAPH
+ {0xC9A9, 0x808A}, //5882 #CJK UNIFIED IDEOGRAPH
+ {0xC9AA, 0x961E}, //5883 #CJK UNIFIED IDEOGRAPH
+ {0xC9AB, 0x4F0E}, //5884 #CJK UNIFIED IDEOGRAPH
+ {0xC9AC, 0x4F18}, //5885 #CJK UNIFIED IDEOGRAPH
+ {0xC9AD, 0x4F2C}, //5886 #CJK UNIFIED IDEOGRAPH
+ {0xC9AE, 0x4EF5}, //5887 #CJK UNIFIED IDEOGRAPH
+ {0xC9AF, 0x4F14}, //5888 #CJK UNIFIED IDEOGRAPH
+ {0xC9B0, 0x4EF1}, //5889 #CJK UNIFIED IDEOGRAPH
+ {0xC9B1, 0x4F00}, //5890 #CJK UNIFIED IDEOGRAPH
+ {0xC9B2, 0x4EF7}, //5891 #CJK UNIFIED IDEOGRAPH
+ {0xC9B3, 0x4F08}, //5892 #CJK UNIFIED IDEOGRAPH
+ {0xC9B4, 0x4F1D}, //5893 #CJK UNIFIED IDEOGRAPH
+ {0xC9B5, 0x4F02}, //5894 #CJK UNIFIED IDEOGRAPH
+ {0xC9B6, 0x4F05}, //5895 #CJK UNIFIED IDEOGRAPH
+ {0xC9B7, 0x4F22}, //5896 #CJK UNIFIED IDEOGRAPH
+ {0xC9B8, 0x4F13}, //5897 #CJK UNIFIED IDEOGRAPH
+ {0xC9B9, 0x4F04}, //5898 #CJK UNIFIED IDEOGRAPH
+ {0xC9BA, 0x4EF4}, //5899 #CJK UNIFIED IDEOGRAPH
+ {0xC9BB, 0x4F12}, //5900 #CJK UNIFIED IDEOGRAPH
+ {0xC9BC, 0x51B1}, //5901 #CJK UNIFIED IDEOGRAPH
+ {0xC9BD, 0x5213}, //5902 #CJK UNIFIED IDEOGRAPH
+ {0xC9BE, 0x5209}, //5903 #CJK UNIFIED IDEOGRAPH
+ {0xC9BF, 0x5210}, //5904 #CJK UNIFIED IDEOGRAPH
+ {0xC9C0, 0x52A6}, //5905 #CJK UNIFIED IDEOGRAPH
+ {0xC9C1, 0x5322}, //5906 #CJK UNIFIED IDEOGRAPH
+ {0xC9C2, 0x531F}, //5907 #CJK UNIFIED IDEOGRAPH
+ {0xC9C3, 0x534D}, //5908 #CJK UNIFIED IDEOGRAPH
+ {0xC9C4, 0x538A}, //5909 #CJK UNIFIED IDEOGRAPH
+ {0xC9C5, 0x5407}, //5910 #CJK UNIFIED IDEOGRAPH
+ {0xC9C6, 0x56E1}, //5911 #CJK UNIFIED IDEOGRAPH
+ {0xC9C7, 0x56DF}, //5912 #CJK UNIFIED IDEOGRAPH
+ {0xC9C8, 0x572E}, //5913 #CJK UNIFIED IDEOGRAPH
+ {0xC9C9, 0x572A}, //5914 #CJK UNIFIED IDEOGRAPH
+ {0xC9CA, 0x5734}, //5915 #CJK UNIFIED IDEOGRAPH
+ {0xC9CB, 0x593C}, //5916 #CJK UNIFIED IDEOGRAPH
+ {0xC9CC, 0x5980}, //5917 #CJK UNIFIED IDEOGRAPH
+ {0xC9CD, 0x597C}, //5918 #CJK UNIFIED IDEOGRAPH
+ {0xC9CE, 0x5985}, //5919 #CJK UNIFIED IDEOGRAPH
+ {0xC9CF, 0x597B}, //5920 #CJK UNIFIED IDEOGRAPH
+ {0xC9D0, 0x597E}, //5921 #CJK UNIFIED IDEOGRAPH
+ {0xC9D1, 0x5977}, //5922 #CJK UNIFIED IDEOGRAPH
+ {0xC9D2, 0x597F}, //5923 #CJK UNIFIED IDEOGRAPH
+ {0xC9D3, 0x5B56}, //5924 #CJK UNIFIED IDEOGRAPH
+ {0xC9D4, 0x5C15}, //5925 #CJK UNIFIED IDEOGRAPH
+ {0xC9D5, 0x5C25}, //5926 #CJK UNIFIED IDEOGRAPH
+ {0xC9D6, 0x5C7C}, //5927 #CJK UNIFIED IDEOGRAPH
+ {0xC9D7, 0x5C7A}, //5928 #CJK UNIFIED IDEOGRAPH
+ {0xC9D8, 0x5C7B}, //5929 #CJK UNIFIED IDEOGRAPH
+ {0xC9D9, 0x5C7E}, //5930 #CJK UNIFIED IDEOGRAPH
+ {0xC9DA, 0x5DDF}, //5931 #CJK UNIFIED IDEOGRAPH
+ {0xC9DB, 0x5E75}, //5932 #CJK UNIFIED IDEOGRAPH
+ {0xC9DC, 0x5E84}, //5933 #CJK UNIFIED IDEOGRAPH
+ {0xC9DD, 0x5F02}, //5934 #CJK UNIFIED IDEOGRAPH
+ {0xC9DE, 0x5F1A}, //5935 #CJK UNIFIED IDEOGRAPH
+ {0xC9DF, 0x5F74}, //5936 #CJK UNIFIED IDEOGRAPH
+ {0xC9E0, 0x5FD5}, //5937 #CJK UNIFIED IDEOGRAPH
+ {0xC9E1, 0x5FD4}, //5938 #CJK UNIFIED IDEOGRAPH
+ {0xC9E2, 0x5FCF}, //5939 #CJK UNIFIED IDEOGRAPH
+ {0xC9E3, 0x625C}, //5940 #CJK UNIFIED IDEOGRAPH
+ {0xC9E4, 0x625E}, //5941 #CJK UNIFIED IDEOGRAPH
+ {0xC9E5, 0x6264}, //5942 #CJK UNIFIED IDEOGRAPH
+ {0xC9E6, 0x6261}, //5943 #CJK UNIFIED IDEOGRAPH
+ {0xC9E7, 0x6266}, //5944 #CJK UNIFIED IDEOGRAPH
+ {0xC9E8, 0x6262}, //5945 #CJK UNIFIED IDEOGRAPH
+ {0xC9E9, 0x6259}, //5946 #CJK UNIFIED IDEOGRAPH
+ {0xC9EA, 0x6260}, //5947 #CJK UNIFIED IDEOGRAPH
+ {0xC9EB, 0x625A}, //5948 #CJK UNIFIED IDEOGRAPH
+ {0xC9EC, 0x6265}, //5949 #CJK UNIFIED IDEOGRAPH
+ {0xC9ED, 0x65EF}, //5950 #CJK UNIFIED IDEOGRAPH
+ {0xC9EE, 0x65EE}, //5951 #CJK UNIFIED IDEOGRAPH
+ {0xC9EF, 0x673E}, //5952 #CJK UNIFIED IDEOGRAPH
+ {0xC9F0, 0x6739}, //5953 #CJK UNIFIED IDEOGRAPH
+ {0xC9F1, 0x6738}, //5954 #CJK UNIFIED IDEOGRAPH
+ {0xC9F2, 0x673B}, //5955 #CJK UNIFIED IDEOGRAPH
+ {0xC9F3, 0x673A}, //5956 #CJK UNIFIED IDEOGRAPH
+ {0xC9F4, 0x673F}, //5957 #CJK UNIFIED IDEOGRAPH
+ {0xC9F5, 0x673C}, //5958 #CJK UNIFIED IDEOGRAPH
+ {0xC9F6, 0x6733}, //5959 #CJK UNIFIED IDEOGRAPH
+ {0xC9F7, 0x6C18}, //5960 #CJK UNIFIED IDEOGRAPH
+ {0xC9F8, 0x6C46}, //5961 #CJK UNIFIED IDEOGRAPH
+ {0xC9F9, 0x6C52}, //5962 #CJK UNIFIED IDEOGRAPH
+ {0xC9FA, 0x6C5C}, //5963 #CJK UNIFIED IDEOGRAPH
+ {0xC9FB, 0x6C4F}, //5964 #CJK UNIFIED IDEOGRAPH
+ {0xC9FC, 0x6C4A}, //5965 #CJK UNIFIED IDEOGRAPH
+ {0xC9FD, 0x6C54}, //5966 #CJK UNIFIED IDEOGRAPH
+ {0xC9FE, 0x6C4B}, //5967 #CJK UNIFIED IDEOGRAPH
+ {0xCA40, 0x6C4C}, //5968 #CJK UNIFIED IDEOGRAPH
+ {0xCA41, 0x7071}, //5969 #CJK UNIFIED IDEOGRAPH
+ {0xCA42, 0x725E}, //5970 #CJK UNIFIED IDEOGRAPH
+ {0xCA43, 0x72B4}, //5971 #CJK UNIFIED IDEOGRAPH
+ {0xCA44, 0x72B5}, //5972 #CJK UNIFIED IDEOGRAPH
+ {0xCA45, 0x738E}, //5973 #CJK UNIFIED IDEOGRAPH
+ {0xCA46, 0x752A}, //5974 #CJK UNIFIED IDEOGRAPH
+ {0xCA47, 0x767F}, //5975 #CJK UNIFIED IDEOGRAPH
+ {0xCA48, 0x7A75}, //5976 #CJK UNIFIED IDEOGRAPH
+ {0xCA49, 0x7F51}, //5977 #CJK UNIFIED IDEOGRAPH
+ {0xCA4A, 0x8278}, //5978 #CJK UNIFIED IDEOGRAPH
+ {0xCA4B, 0x827C}, //5979 #CJK UNIFIED IDEOGRAPH
+ {0xCA4C, 0x8280}, //5980 #CJK UNIFIED IDEOGRAPH
+ {0xCA4D, 0x827D}, //5981 #CJK UNIFIED IDEOGRAPH
+ {0xCA4E, 0x827F}, //5982 #CJK UNIFIED IDEOGRAPH
+ {0xCA4F, 0x864D}, //5983 #CJK UNIFIED IDEOGRAPH
+ {0xCA50, 0x897E}, //5984 #CJK UNIFIED IDEOGRAPH
+ {0xCA51, 0x9099}, //5985 #CJK UNIFIED IDEOGRAPH
+ {0xCA52, 0x9097}, //5986 #CJK UNIFIED IDEOGRAPH
+ {0xCA53, 0x9098}, //5987 #CJK UNIFIED IDEOGRAPH
+ {0xCA54, 0x909B}, //5988 #CJK UNIFIED IDEOGRAPH
+ {0xCA55, 0x9094}, //5989 #CJK UNIFIED IDEOGRAPH
+ {0xCA56, 0x9622}, //5990 #CJK UNIFIED IDEOGRAPH
+ {0xCA57, 0x9624}, //5991 #CJK UNIFIED IDEOGRAPH
+ {0xCA58, 0x9620}, //5992 #CJK UNIFIED IDEOGRAPH
+ {0xCA59, 0x9623}, //5993 #CJK UNIFIED IDEOGRAPH
+ {0xCA5A, 0x4F56}, //5994 #CJK UNIFIED IDEOGRAPH
+ {0xCA5B, 0x4F3B}, //5995 #CJK UNIFIED IDEOGRAPH
+ {0xCA5C, 0x4F62}, //5996 #CJK UNIFIED IDEOGRAPH
+ {0xCA5D, 0x4F49}, //5997 #CJK UNIFIED IDEOGRAPH
+ {0xCA5E, 0x4F53}, //5998 #CJK UNIFIED IDEOGRAPH
+ {0xCA5F, 0x4F64}, //5999 #CJK UNIFIED IDEOGRAPH
+ {0xCA60, 0x4F3E}, //6000 #CJK UNIFIED IDEOGRAPH
+ {0xCA61, 0x4F67}, //6001 #CJK UNIFIED IDEOGRAPH
+ {0xCA62, 0x4F52}, //6002 #CJK UNIFIED IDEOGRAPH
+ {0xCA63, 0x4F5F}, //6003 #CJK UNIFIED IDEOGRAPH
+ {0xCA64, 0x4F41}, //6004 #CJK UNIFIED IDEOGRAPH
+ {0xCA65, 0x4F58}, //6005 #CJK UNIFIED IDEOGRAPH
+ {0xCA66, 0x4F2D}, //6006 #CJK UNIFIED IDEOGRAPH
+ {0xCA67, 0x4F33}, //6007 #CJK UNIFIED IDEOGRAPH
+ {0xCA68, 0x4F3F}, //6008 #CJK UNIFIED IDEOGRAPH
+ {0xCA69, 0x4F61}, //6009 #CJK UNIFIED IDEOGRAPH
+ {0xCA6A, 0x518F}, //6010 #CJK UNIFIED IDEOGRAPH
+ {0xCA6B, 0x51B9}, //6011 #CJK UNIFIED IDEOGRAPH
+ {0xCA6C, 0x521C}, //6012 #CJK UNIFIED IDEOGRAPH
+ {0xCA6D, 0x521E}, //6013 #CJK UNIFIED IDEOGRAPH
+ {0xCA6E, 0x5221}, //6014 #CJK UNIFIED IDEOGRAPH
+ {0xCA6F, 0x52AD}, //6015 #CJK UNIFIED IDEOGRAPH
+ {0xCA70, 0x52AE}, //6016 #CJK UNIFIED IDEOGRAPH
+ {0xCA71, 0x5309}, //6017 #CJK UNIFIED IDEOGRAPH
+ {0xCA72, 0x5363}, //6018 #CJK UNIFIED IDEOGRAPH
+ {0xCA73, 0x5372}, //6019 #CJK UNIFIED IDEOGRAPH
+ {0xCA74, 0x538E}, //6020 #CJK UNIFIED IDEOGRAPH
+ {0xCA75, 0x538F}, //6021 #CJK UNIFIED IDEOGRAPH
+ {0xCA76, 0x5430}, //6022 #CJK UNIFIED IDEOGRAPH
+ {0xCA77, 0x5437}, //6023 #CJK UNIFIED IDEOGRAPH
+ {0xCA78, 0x542A}, //6024 #CJK UNIFIED IDEOGRAPH
+ {0xCA79, 0x5454}, //6025 #CJK UNIFIED IDEOGRAPH
+ {0xCA7A, 0x5445}, //6026 #CJK UNIFIED IDEOGRAPH
+ {0xCA7B, 0x5419}, //6027 #CJK UNIFIED IDEOGRAPH
+ {0xCA7C, 0x541C}, //6028 #CJK UNIFIED IDEOGRAPH
+ {0xCA7D, 0x5425}, //6029 #CJK UNIFIED IDEOGRAPH
+ {0xCA7E, 0x5418}, //6030 #CJK UNIFIED IDEOGRAPH
+ {0xCAA1, 0x543D}, //6031 #CJK UNIFIED IDEOGRAPH
+ {0xCAA2, 0x544F}, //6032 #CJK UNIFIED IDEOGRAPH
+ {0xCAA3, 0x5441}, //6033 #CJK UNIFIED IDEOGRAPH
+ {0xCAA4, 0x5428}, //6034 #CJK UNIFIED IDEOGRAPH
+ {0xCAA5, 0x5424}, //6035 #CJK UNIFIED IDEOGRAPH
+ {0xCAA6, 0x5447}, //6036 #CJK UNIFIED IDEOGRAPH
+ {0xCAA7, 0x56EE}, //6037 #CJK UNIFIED IDEOGRAPH
+ {0xCAA8, 0x56E7}, //6038 #CJK UNIFIED IDEOGRAPH
+ {0xCAA9, 0x56E5}, //6039 #CJK UNIFIED IDEOGRAPH
+ {0xCAAA, 0x5741}, //6040 #CJK UNIFIED IDEOGRAPH
+ {0xCAAB, 0x5745}, //6041 #CJK UNIFIED IDEOGRAPH
+ {0xCAAC, 0x574C}, //6042 #CJK UNIFIED IDEOGRAPH
+ {0xCAAD, 0x5749}, //6043 #CJK UNIFIED IDEOGRAPH
+ {0xCAAE, 0x574B}, //6044 #CJK UNIFIED IDEOGRAPH
+ {0xCAAF, 0x5752}, //6045 #CJK UNIFIED IDEOGRAPH
+ {0xCAB0, 0x5906}, //6046 #CJK UNIFIED IDEOGRAPH
+ {0xCAB1, 0x5940}, //6047 #CJK UNIFIED IDEOGRAPH
+ {0xCAB2, 0x59A6}, //6048 #CJK UNIFIED IDEOGRAPH
+ {0xCAB3, 0x5998}, //6049 #CJK UNIFIED IDEOGRAPH
+ {0xCAB4, 0x59A0}, //6050 #CJK UNIFIED IDEOGRAPH
+ {0xCAB5, 0x5997}, //6051 #CJK UNIFIED IDEOGRAPH
+ {0xCAB6, 0x598E}, //6052 #CJK UNIFIED IDEOGRAPH
+ {0xCAB7, 0x59A2}, //6053 #CJK UNIFIED IDEOGRAPH
+ {0xCAB8, 0x5990}, //6054 #CJK UNIFIED IDEOGRAPH
+ {0xCAB9, 0x598F}, //6055 #CJK UNIFIED IDEOGRAPH
+ {0xCABA, 0x59A7}, //6056 #CJK UNIFIED IDEOGRAPH
+ {0xCABB, 0x59A1}, //6057 #CJK UNIFIED IDEOGRAPH
+ {0xCABC, 0x5B8E}, //6058 #CJK UNIFIED IDEOGRAPH
+ {0xCABD, 0x5B92}, //6059 #CJK UNIFIED IDEOGRAPH
+ {0xCABE, 0x5C28}, //6060 #CJK UNIFIED IDEOGRAPH
+ {0xCABF, 0x5C2A}, //6061 #CJK UNIFIED IDEOGRAPH
+ {0xCAC0, 0x5C8D}, //6062 #CJK UNIFIED IDEOGRAPH
+ {0xCAC1, 0x5C8F}, //6063 #CJK UNIFIED IDEOGRAPH
+ {0xCAC2, 0x5C88}, //6064 #CJK UNIFIED IDEOGRAPH
+ {0xCAC3, 0x5C8B}, //6065 #CJK UNIFIED IDEOGRAPH
+ {0xCAC4, 0x5C89}, //6066 #CJK UNIFIED IDEOGRAPH
+ {0xCAC5, 0x5C92}, //6067 #CJK UNIFIED IDEOGRAPH
+ {0xCAC6, 0x5C8A}, //6068 #CJK UNIFIED IDEOGRAPH
+ {0xCAC7, 0x5C86}, //6069 #CJK UNIFIED IDEOGRAPH
+ {0xCAC8, 0x5C93}, //6070 #CJK UNIFIED IDEOGRAPH
+ {0xCAC9, 0x5C95}, //6071 #CJK UNIFIED IDEOGRAPH
+ {0xCACA, 0x5DE0}, //6072 #CJK UNIFIED IDEOGRAPH
+ {0xCACB, 0x5E0A}, //6073 #CJK UNIFIED IDEOGRAPH
+ {0xCACC, 0x5E0E}, //6074 #CJK UNIFIED IDEOGRAPH
+ {0xCACD, 0x5E8B}, //6075 #CJK UNIFIED IDEOGRAPH
+ {0xCACE, 0x5E89}, //6076 #CJK UNIFIED IDEOGRAPH
+ {0xCACF, 0x5E8C}, //6077 #CJK UNIFIED IDEOGRAPH
+ {0xCAD0, 0x5E88}, //6078 #CJK UNIFIED IDEOGRAPH
+ {0xCAD1, 0x5E8D}, //6079 #CJK UNIFIED IDEOGRAPH
+ {0xCAD2, 0x5F05}, //6080 #CJK UNIFIED IDEOGRAPH
+ {0xCAD3, 0x5F1D}, //6081 #CJK UNIFIED IDEOGRAPH
+ {0xCAD4, 0x5F78}, //6082 #CJK UNIFIED IDEOGRAPH
+ {0xCAD5, 0x5F76}, //6083 #CJK UNIFIED IDEOGRAPH
+ {0xCAD6, 0x5FD2}, //6084 #CJK UNIFIED IDEOGRAPH
+ {0xCAD7, 0x5FD1}, //6085 #CJK UNIFIED IDEOGRAPH
+ {0xCAD8, 0x5FD0}, //6086 #CJK UNIFIED IDEOGRAPH
+ {0xCAD9, 0x5FED}, //6087 #CJK UNIFIED IDEOGRAPH
+ {0xCADA, 0x5FE8}, //6088 #CJK UNIFIED IDEOGRAPH
+ {0xCADB, 0x5FEE}, //6089 #CJK UNIFIED IDEOGRAPH
+ {0xCADC, 0x5FF3}, //6090 #CJK UNIFIED IDEOGRAPH
+ {0xCADD, 0x5FE1}, //6091 #CJK UNIFIED IDEOGRAPH
+ {0xCADE, 0x5FE4}, //6092 #CJK UNIFIED IDEOGRAPH
+ {0xCADF, 0x5FE3}, //6093 #CJK UNIFIED IDEOGRAPH
+ {0xCAE0, 0x5FFA}, //6094 #CJK UNIFIED IDEOGRAPH
+ {0xCAE1, 0x5FEF}, //6095 #CJK UNIFIED IDEOGRAPH
+ {0xCAE2, 0x5FF7}, //6096 #CJK UNIFIED IDEOGRAPH
+ {0xCAE3, 0x5FFB}, //6097 #CJK UNIFIED IDEOGRAPH
+ {0xCAE4, 0x6000}, //6098 #CJK UNIFIED IDEOGRAPH
+ {0xCAE5, 0x5FF4}, //6099 #CJK UNIFIED IDEOGRAPH
+ {0xCAE6, 0x623A}, //6100 #CJK UNIFIED IDEOGRAPH
+ {0xCAE7, 0x6283}, //6101 #CJK UNIFIED IDEOGRAPH
+ {0xCAE8, 0x628C}, //6102 #CJK UNIFIED IDEOGRAPH
+ {0xCAE9, 0x628E}, //6103 #CJK UNIFIED IDEOGRAPH
+ {0xCAEA, 0x628F}, //6104 #CJK UNIFIED IDEOGRAPH
+ {0xCAEB, 0x6294}, //6105 #CJK UNIFIED IDEOGRAPH
+ {0xCAEC, 0x6287}, //6106 #CJK UNIFIED IDEOGRAPH
+ {0xCAED, 0x6271}, //6107 #CJK UNIFIED IDEOGRAPH
+ {0xCAEE, 0x627B}, //6108 #CJK UNIFIED IDEOGRAPH
+ {0xCAEF, 0x627A}, //6109 #CJK UNIFIED IDEOGRAPH
+ {0xCAF0, 0x6270}, //6110 #CJK UNIFIED IDEOGRAPH
+ {0xCAF1, 0x6281}, //6111 #CJK UNIFIED IDEOGRAPH
+ {0xCAF2, 0x6288}, //6112 #CJK UNIFIED IDEOGRAPH
+ {0xCAF3, 0x6277}, //6113 #CJK UNIFIED IDEOGRAPH
+ {0xCAF4, 0x627D}, //6114 #CJK UNIFIED IDEOGRAPH
+ {0xCAF5, 0x6272}, //6115 #CJK UNIFIED IDEOGRAPH
+ {0xCAF6, 0x6274}, //6116 #CJK UNIFIED IDEOGRAPH
+ {0xCAF7, 0x6537}, //6117 #CJK UNIFIED IDEOGRAPH
+ {0xCAF8, 0x65F0}, //6118 #CJK UNIFIED IDEOGRAPH
+ {0xCAF9, 0x65F4}, //6119 #CJK UNIFIED IDEOGRAPH
+ {0xCAFA, 0x65F3}, //6120 #CJK UNIFIED IDEOGRAPH
+ {0xCAFB, 0x65F2}, //6121 #CJK UNIFIED IDEOGRAPH
+ {0xCAFC, 0x65F5}, //6122 #CJK UNIFIED IDEOGRAPH
+ {0xCAFD, 0x6745}, //6123 #CJK UNIFIED IDEOGRAPH
+ {0xCAFE, 0x6747}, //6124 #CJK UNIFIED IDEOGRAPH
+ {0xCB40, 0x6759}, //6125 #CJK UNIFIED IDEOGRAPH
+ {0xCB41, 0x6755}, //6126 #CJK UNIFIED IDEOGRAPH
+ {0xCB42, 0x674C}, //6127 #CJK UNIFIED IDEOGRAPH
+ {0xCB43, 0x6748}, //6128 #CJK UNIFIED IDEOGRAPH
+ {0xCB44, 0x675D}, //6129 #CJK UNIFIED IDEOGRAPH
+ {0xCB45, 0x674D}, //6130 #CJK UNIFIED IDEOGRAPH
+ {0xCB46, 0x675A}, //6131 #CJK UNIFIED IDEOGRAPH
+ {0xCB47, 0x674B}, //6132 #CJK UNIFIED IDEOGRAPH
+ {0xCB48, 0x6BD0}, //6133 #CJK UNIFIED IDEOGRAPH
+ {0xCB49, 0x6C19}, //6134 #CJK UNIFIED IDEOGRAPH
+ {0xCB4A, 0x6C1A}, //6135 #CJK UNIFIED IDEOGRAPH
+ {0xCB4B, 0x6C78}, //6136 #CJK UNIFIED IDEOGRAPH
+ {0xCB4C, 0x6C67}, //6137 #CJK UNIFIED IDEOGRAPH
+ {0xCB4D, 0x6C6B}, //6138 #CJK UNIFIED IDEOGRAPH
+ {0xCB4E, 0x6C84}, //6139 #CJK UNIFIED IDEOGRAPH
+ {0xCB4F, 0x6C8B}, //6140 #CJK UNIFIED IDEOGRAPH
+ {0xCB50, 0x6C8F}, //6141 #CJK UNIFIED IDEOGRAPH
+ {0xCB51, 0x6C71}, //6142 #CJK UNIFIED IDEOGRAPH
+ {0xCB52, 0x6C6F}, //6143 #CJK UNIFIED IDEOGRAPH
+ {0xCB53, 0x6C69}, //6144 #CJK UNIFIED IDEOGRAPH
+ {0xCB54, 0x6C9A}, //6145 #CJK UNIFIED IDEOGRAPH
+ {0xCB55, 0x6C6D}, //6146 #CJK UNIFIED IDEOGRAPH
+ {0xCB56, 0x6C87}, //6147 #CJK UNIFIED IDEOGRAPH
+ {0xCB57, 0x6C95}, //6148 #CJK UNIFIED IDEOGRAPH
+ {0xCB58, 0x6C9C}, //6149 #CJK UNIFIED IDEOGRAPH
+ {0xCB59, 0x6C66}, //6150 #CJK UNIFIED IDEOGRAPH
+ {0xCB5A, 0x6C73}, //6151 #CJK UNIFIED IDEOGRAPH
+ {0xCB5B, 0x6C65}, //6152 #CJK UNIFIED IDEOGRAPH
+ {0xCB5C, 0x6C7B}, //6153 #CJK UNIFIED IDEOGRAPH
+ {0xCB5D, 0x6C8E}, //6154 #CJK UNIFIED IDEOGRAPH
+ {0xCB5E, 0x7074}, //6155 #CJK UNIFIED IDEOGRAPH
+ {0xCB5F, 0x707A}, //6156 #CJK UNIFIED IDEOGRAPH
+ {0xCB60, 0x7263}, //6157 #CJK UNIFIED IDEOGRAPH
+ {0xCB61, 0x72BF}, //6158 #CJK UNIFIED IDEOGRAPH
+ {0xCB62, 0x72BD}, //6159 #CJK UNIFIED IDEOGRAPH
+ {0xCB63, 0x72C3}, //6160 #CJK UNIFIED IDEOGRAPH
+ {0xCB64, 0x72C6}, //6161 #CJK UNIFIED IDEOGRAPH
+ {0xCB65, 0x72C1}, //6162 #CJK UNIFIED IDEOGRAPH
+ {0xCB66, 0x72BA}, //6163 #CJK UNIFIED IDEOGRAPH
+ {0xCB67, 0x72C5}, //6164 #CJK UNIFIED IDEOGRAPH
+ {0xCB68, 0x7395}, //6165 #CJK UNIFIED IDEOGRAPH
+ {0xCB69, 0x7397}, //6166 #CJK UNIFIED IDEOGRAPH
+ {0xCB6A, 0x7393}, //6167 #CJK UNIFIED IDEOGRAPH
+ {0xCB6B, 0x7394}, //6168 #CJK UNIFIED IDEOGRAPH
+ {0xCB6C, 0x7392}, //6169 #CJK UNIFIED IDEOGRAPH
+ {0xCB6D, 0x753A}, //6170 #CJK UNIFIED IDEOGRAPH
+ {0xCB6E, 0x7539}, //6171 #CJK UNIFIED IDEOGRAPH
+ {0xCB6F, 0x7594}, //6172 #CJK UNIFIED IDEOGRAPH
+ {0xCB70, 0x7595}, //6173 #CJK UNIFIED IDEOGRAPH
+ {0xCB71, 0x7681}, //6174 #CJK UNIFIED IDEOGRAPH
+ {0xCB72, 0x793D}, //6175 #CJK UNIFIED IDEOGRAPH
+ {0xCB73, 0x8034}, //6176 #CJK UNIFIED IDEOGRAPH
+ {0xCB74, 0x8095}, //6177 #CJK UNIFIED IDEOGRAPH
+ {0xCB75, 0x8099}, //6178 #CJK UNIFIED IDEOGRAPH
+ {0xCB76, 0x8090}, //6179 #CJK UNIFIED IDEOGRAPH
+ {0xCB77, 0x8092}, //6180 #CJK UNIFIED IDEOGRAPH
+ {0xCB78, 0x809C}, //6181 #CJK UNIFIED IDEOGRAPH
+ {0xCB79, 0x8290}, //6182 #CJK UNIFIED IDEOGRAPH
+ {0xCB7A, 0x828F}, //6183 #CJK UNIFIED IDEOGRAPH
+ {0xCB7B, 0x8285}, //6184 #CJK UNIFIED IDEOGRAPH
+ {0xCB7C, 0x828E}, //6185 #CJK UNIFIED IDEOGRAPH
+ {0xCB7D, 0x8291}, //6186 #CJK UNIFIED IDEOGRAPH
+ {0xCB7E, 0x8293}, //6187 #CJK UNIFIED IDEOGRAPH
+ {0xCBA1, 0x828A}, //6188 #CJK UNIFIED IDEOGRAPH
+ {0xCBA2, 0x8283}, //6189 #CJK UNIFIED IDEOGRAPH
+ {0xCBA3, 0x8284}, //6190 #CJK UNIFIED IDEOGRAPH
+ {0xCBA4, 0x8C78}, //6191 #CJK UNIFIED IDEOGRAPH
+ {0xCBA5, 0x8FC9}, //6192 #CJK UNIFIED IDEOGRAPH
+ {0xCBA6, 0x8FBF}, //6193 #CJK UNIFIED IDEOGRAPH
+ {0xCBA7, 0x909F}, //6194 #CJK UNIFIED IDEOGRAPH
+ {0xCBA8, 0x90A1}, //6195 #CJK UNIFIED IDEOGRAPH
+ {0xCBA9, 0x90A5}, //6196 #CJK UNIFIED IDEOGRAPH
+ {0xCBAA, 0x909E}, //6197 #CJK UNIFIED IDEOGRAPH
+ {0xCBAB, 0x90A7}, //6198 #CJK UNIFIED IDEOGRAPH
+ {0xCBAC, 0x90A0}, //6199 #CJK UNIFIED IDEOGRAPH
+ {0xCBAD, 0x9630}, //6200 #CJK UNIFIED IDEOGRAPH
+ {0xCBAE, 0x9628}, //6201 #CJK UNIFIED IDEOGRAPH
+ {0xCBAF, 0x962F}, //6202 #CJK UNIFIED IDEOGRAPH
+ {0xCBB0, 0x962D}, //6203 #CJK UNIFIED IDEOGRAPH
+ {0xCBB1, 0x4E33}, //6204 #CJK UNIFIED IDEOGRAPH
+ {0xCBB2, 0x4F98}, //6205 #CJK UNIFIED IDEOGRAPH
+ {0xCBB3, 0x4F7C}, //6206 #CJK UNIFIED IDEOGRAPH
+ {0xCBB4, 0x4F85}, //6207 #CJK UNIFIED IDEOGRAPH
+ {0xCBB5, 0x4F7D}, //6208 #CJK UNIFIED IDEOGRAPH
+ {0xCBB6, 0x4F80}, //6209 #CJK UNIFIED IDEOGRAPH
+ {0xCBB7, 0x4F87}, //6210 #CJK UNIFIED IDEOGRAPH
+ {0xCBB8, 0x4F76}, //6211 #CJK UNIFIED IDEOGRAPH
+ {0xCBB9, 0x4F74}, //6212 #CJK UNIFIED IDEOGRAPH
+ {0xCBBA, 0x4F89}, //6213 #CJK UNIFIED IDEOGRAPH
+ {0xCBBB, 0x4F84}, //6214 #CJK UNIFIED IDEOGRAPH
+ {0xCBBC, 0x4F77}, //6215 #CJK UNIFIED IDEOGRAPH
+ {0xCBBD, 0x4F4C}, //6216 #CJK UNIFIED IDEOGRAPH
+ {0xCBBE, 0x4F97}, //6217 #CJK UNIFIED IDEOGRAPH
+ {0xCBBF, 0x4F6A}, //6218 #CJK UNIFIED IDEOGRAPH
+ {0xCBC0, 0x4F9A}, //6219 #CJK UNIFIED IDEOGRAPH
+ {0xCBC1, 0x4F79}, //6220 #CJK UNIFIED IDEOGRAPH
+ {0xCBC2, 0x4F81}, //6221 #CJK UNIFIED IDEOGRAPH
+ {0xCBC3, 0x4F78}, //6222 #CJK UNIFIED IDEOGRAPH
+ {0xCBC4, 0x4F90}, //6223 #CJK UNIFIED IDEOGRAPH
+ {0xCBC5, 0x4F9C}, //6224 #CJK UNIFIED IDEOGRAPH
+ {0xCBC6, 0x4F94}, //6225 #CJK UNIFIED IDEOGRAPH
+ {0xCBC7, 0x4F9E}, //6226 #CJK UNIFIED IDEOGRAPH
+ {0xCBC8, 0x4F92}, //6227 #CJK UNIFIED IDEOGRAPH
+ {0xCBC9, 0x4F82}, //6228 #CJK UNIFIED IDEOGRAPH
+ {0xCBCA, 0x4F95}, //6229 #CJK UNIFIED IDEOGRAPH
+ {0xCBCB, 0x4F6B}, //6230 #CJK UNIFIED IDEOGRAPH
+ {0xCBCC, 0x4F6E}, //6231 #CJK UNIFIED IDEOGRAPH
+ {0xCBCD, 0x519E}, //6232 #CJK UNIFIED IDEOGRAPH
+ {0xCBCE, 0x51BC}, //6233 #CJK UNIFIED IDEOGRAPH
+ {0xCBCF, 0x51BE}, //6234 #CJK UNIFIED IDEOGRAPH
+ {0xCBD0, 0x5235}, //6235 #CJK UNIFIED IDEOGRAPH
+ {0xCBD1, 0x5232}, //6236 #CJK UNIFIED IDEOGRAPH
+ {0xCBD2, 0x5233}, //6237 #CJK UNIFIED IDEOGRAPH
+ {0xCBD3, 0x5246}, //6238 #CJK UNIFIED IDEOGRAPH
+ {0xCBD4, 0x5231}, //6239 #CJK UNIFIED IDEOGRAPH
+ {0xCBD5, 0x52BC}, //6240 #CJK UNIFIED IDEOGRAPH
+ {0xCBD6, 0x530A}, //6241 #CJK UNIFIED IDEOGRAPH
+ {0xCBD7, 0x530B}, //6242 #CJK UNIFIED IDEOGRAPH
+ {0xCBD8, 0x533C}, //6243 #CJK UNIFIED IDEOGRAPH
+ {0xCBD9, 0x5392}, //6244 #CJK UNIFIED IDEOGRAPH
+ {0xCBDA, 0x5394}, //6245 #CJK UNIFIED IDEOGRAPH
+ {0xCBDB, 0x5487}, //6246 #CJK UNIFIED IDEOGRAPH
+ {0xCBDC, 0x547F}, //6247 #CJK UNIFIED IDEOGRAPH
+ {0xCBDD, 0x5481}, //6248 #CJK UNIFIED IDEOGRAPH
+ {0xCBDE, 0x5491}, //6249 #CJK UNIFIED IDEOGRAPH
+ {0xCBDF, 0x5482}, //6250 #CJK UNIFIED IDEOGRAPH
+ {0xCBE0, 0x5488}, //6251 #CJK UNIFIED IDEOGRAPH
+ {0xCBE1, 0x546B}, //6252 #CJK UNIFIED IDEOGRAPH
+ {0xCBE2, 0x547A}, //6253 #CJK UNIFIED IDEOGRAPH
+ {0xCBE3, 0x547E}, //6254 #CJK UNIFIED IDEOGRAPH
+ {0xCBE4, 0x5465}, //6255 #CJK UNIFIED IDEOGRAPH
+ {0xCBE5, 0x546C}, //6256 #CJK UNIFIED IDEOGRAPH
+ {0xCBE6, 0x5474}, //6257 #CJK UNIFIED IDEOGRAPH
+ {0xCBE7, 0x5466}, //6258 #CJK UNIFIED IDEOGRAPH
+ {0xCBE8, 0x548D}, //6259 #CJK UNIFIED IDEOGRAPH
+ {0xCBE9, 0x546F}, //6260 #CJK UNIFIED IDEOGRAPH
+ {0xCBEA, 0x5461}, //6261 #CJK UNIFIED IDEOGRAPH
+ {0xCBEB, 0x5460}, //6262 #CJK UNIFIED IDEOGRAPH
+ {0xCBEC, 0x5498}, //6263 #CJK UNIFIED IDEOGRAPH
+ {0xCBED, 0x5463}, //6264 #CJK UNIFIED IDEOGRAPH
+ {0xCBEE, 0x5467}, //6265 #CJK UNIFIED IDEOGRAPH
+ {0xCBEF, 0x5464}, //6266 #CJK UNIFIED IDEOGRAPH
+ {0xCBF0, 0x56F7}, //6267 #CJK UNIFIED IDEOGRAPH
+ {0xCBF1, 0x56F9}, //6268 #CJK UNIFIED IDEOGRAPH
+ {0xCBF2, 0x576F}, //6269 #CJK UNIFIED IDEOGRAPH
+ {0xCBF3, 0x5772}, //6270 #CJK UNIFIED IDEOGRAPH
+ {0xCBF4, 0x576D}, //6271 #CJK UNIFIED IDEOGRAPH
+ {0xCBF5, 0x576B}, //6272 #CJK UNIFIED IDEOGRAPH
+ {0xCBF6, 0x5771}, //6273 #CJK UNIFIED IDEOGRAPH
+ {0xCBF7, 0x5770}, //6274 #CJK UNIFIED IDEOGRAPH
+ {0xCBF8, 0x5776}, //6275 #CJK UNIFIED IDEOGRAPH
+ {0xCBF9, 0x5780}, //6276 #CJK UNIFIED IDEOGRAPH
+ {0xCBFA, 0x5775}, //6277 #CJK UNIFIED IDEOGRAPH
+ {0xCBFB, 0x577B}, //6278 #CJK UNIFIED IDEOGRAPH
+ {0xCBFC, 0x5773}, //6279 #CJK UNIFIED IDEOGRAPH
+ {0xCBFD, 0x5774}, //6280 #CJK UNIFIED IDEOGRAPH
+ {0xCBFE, 0x5762}, //6281 #CJK UNIFIED IDEOGRAPH
+ {0xCC40, 0x5768}, //6282 #CJK UNIFIED IDEOGRAPH
+ {0xCC41, 0x577D}, //6283 #CJK UNIFIED IDEOGRAPH
+ {0xCC42, 0x590C}, //6284 #CJK UNIFIED IDEOGRAPH
+ {0xCC43, 0x5945}, //6285 #CJK UNIFIED IDEOGRAPH
+ {0xCC44, 0x59B5}, //6286 #CJK UNIFIED IDEOGRAPH
+ {0xCC45, 0x59BA}, //6287 #CJK UNIFIED IDEOGRAPH
+ {0xCC46, 0x59CF}, //6288 #CJK UNIFIED IDEOGRAPH
+ {0xCC47, 0x59CE}, //6289 #CJK UNIFIED IDEOGRAPH
+ {0xCC48, 0x59B2}, //6290 #CJK UNIFIED IDEOGRAPH
+ {0xCC49, 0x59CC}, //6291 #CJK UNIFIED IDEOGRAPH
+ {0xCC4A, 0x59C1}, //6292 #CJK UNIFIED IDEOGRAPH
+ {0xCC4B, 0x59B6}, //6293 #CJK UNIFIED IDEOGRAPH
+ {0xCC4C, 0x59BC}, //6294 #CJK UNIFIED IDEOGRAPH
+ {0xCC4D, 0x59C3}, //6295 #CJK UNIFIED IDEOGRAPH
+ {0xCC4E, 0x59D6}, //6296 #CJK UNIFIED IDEOGRAPH
+ {0xCC4F, 0x59B1}, //6297 #CJK UNIFIED IDEOGRAPH
+ {0xCC50, 0x59BD}, //6298 #CJK UNIFIED IDEOGRAPH
+ {0xCC51, 0x59C0}, //6299 #CJK UNIFIED IDEOGRAPH
+ {0xCC52, 0x59C8}, //6300 #CJK UNIFIED IDEOGRAPH
+ {0xCC53, 0x59B4}, //6301 #CJK UNIFIED IDEOGRAPH
+ {0xCC54, 0x59C7}, //6302 #CJK UNIFIED IDEOGRAPH
+ {0xCC55, 0x5B62}, //6303 #CJK UNIFIED IDEOGRAPH
+ {0xCC56, 0x5B65}, //6304 #CJK UNIFIED IDEOGRAPH
+ {0xCC57, 0x5B93}, //6305 #CJK UNIFIED IDEOGRAPH
+ {0xCC58, 0x5B95}, //6306 #CJK UNIFIED IDEOGRAPH
+ {0xCC59, 0x5C44}, //6307 #CJK UNIFIED IDEOGRAPH
+ {0xCC5A, 0x5C47}, //6308 #CJK UNIFIED IDEOGRAPH
+ {0xCC5B, 0x5CAE}, //6309 #CJK UNIFIED IDEOGRAPH
+ {0xCC5C, 0x5CA4}, //6310 #CJK UNIFIED IDEOGRAPH
+ {0xCC5D, 0x5CA0}, //6311 #CJK UNIFIED IDEOGRAPH
+ {0xCC5E, 0x5CB5}, //6312 #CJK UNIFIED IDEOGRAPH
+ {0xCC5F, 0x5CAF}, //6313 #CJK UNIFIED IDEOGRAPH
+ {0xCC60, 0x5CA8}, //6314 #CJK UNIFIED IDEOGRAPH
+ {0xCC61, 0x5CAC}, //6315 #CJK UNIFIED IDEOGRAPH
+ {0xCC62, 0x5C9F}, //6316 #CJK UNIFIED IDEOGRAPH
+ {0xCC63, 0x5CA3}, //6317 #CJK UNIFIED IDEOGRAPH
+ {0xCC64, 0x5CAD}, //6318 #CJK UNIFIED IDEOGRAPH
+ {0xCC65, 0x5CA2}, //6319 #CJK UNIFIED IDEOGRAPH
+ {0xCC66, 0x5CAA}, //6320 #CJK UNIFIED IDEOGRAPH
+ {0xCC67, 0x5CA7}, //6321 #CJK UNIFIED IDEOGRAPH
+ {0xCC68, 0x5C9D}, //6322 #CJK UNIFIED IDEOGRAPH
+ {0xCC69, 0x5CA5}, //6323 #CJK UNIFIED IDEOGRAPH
+ {0xCC6A, 0x5CB6}, //6324 #CJK UNIFIED IDEOGRAPH
+ {0xCC6B, 0x5CB0}, //6325 #CJK UNIFIED IDEOGRAPH
+ {0xCC6C, 0x5CA6}, //6326 #CJK UNIFIED IDEOGRAPH
+ {0xCC6D, 0x5E17}, //6327 #CJK UNIFIED IDEOGRAPH
+ {0xCC6E, 0x5E14}, //6328 #CJK UNIFIED IDEOGRAPH
+ {0xCC6F, 0x5E19}, //6329 #CJK UNIFIED IDEOGRAPH
+ {0xCC70, 0x5F28}, //6330 #CJK UNIFIED IDEOGRAPH
+ {0xCC71, 0x5F22}, //6331 #CJK UNIFIED IDEOGRAPH
+ {0xCC72, 0x5F23}, //6332 #CJK UNIFIED IDEOGRAPH
+ {0xCC73, 0x5F24}, //6333 #CJK UNIFIED IDEOGRAPH
+ {0xCC74, 0x5F54}, //6334 #CJK UNIFIED IDEOGRAPH
+ {0xCC75, 0x5F82}, //6335 #CJK UNIFIED IDEOGRAPH
+ {0xCC76, 0x5F7E}, //6336 #CJK UNIFIED IDEOGRAPH
+ {0xCC77, 0x5F7D}, //6337 #CJK UNIFIED IDEOGRAPH
+ {0xCC78, 0x5FDE}, //6338 #CJK UNIFIED IDEOGRAPH
+ {0xCC79, 0x5FE5}, //6339 #CJK UNIFIED IDEOGRAPH
+ {0xCC7A, 0x602D}, //6340 #CJK UNIFIED IDEOGRAPH
+ {0xCC7B, 0x6026}, //6341 #CJK UNIFIED IDEOGRAPH
+ {0xCC7C, 0x6019}, //6342 #CJK UNIFIED IDEOGRAPH
+ {0xCC7D, 0x6032}, //6343 #CJK UNIFIED IDEOGRAPH
+ {0xCC7E, 0x600B}, //6344 #CJK UNIFIED IDEOGRAPH
+ {0xCCA1, 0x6034}, //6345 #CJK UNIFIED IDEOGRAPH
+ {0xCCA2, 0x600A}, //6346 #CJK UNIFIED IDEOGRAPH
+ {0xCCA3, 0x6017}, //6347 #CJK UNIFIED IDEOGRAPH
+ {0xCCA4, 0x6033}, //6348 #CJK UNIFIED IDEOGRAPH
+ {0xCCA5, 0x601A}, //6349 #CJK UNIFIED IDEOGRAPH
+ {0xCCA6, 0x601E}, //6350 #CJK UNIFIED IDEOGRAPH
+ {0xCCA7, 0x602C}, //6351 #CJK UNIFIED IDEOGRAPH
+ {0xCCA8, 0x6022}, //6352 #CJK UNIFIED IDEOGRAPH
+ {0xCCA9, 0x600D}, //6353 #CJK UNIFIED IDEOGRAPH
+ {0xCCAA, 0x6010}, //6354 #CJK UNIFIED IDEOGRAPH
+ {0xCCAB, 0x602E}, //6355 #CJK UNIFIED IDEOGRAPH
+ {0xCCAC, 0x6013}, //6356 #CJK UNIFIED IDEOGRAPH
+ {0xCCAD, 0x6011}, //6357 #CJK UNIFIED IDEOGRAPH
+ {0xCCAE, 0x600C}, //6358 #CJK UNIFIED IDEOGRAPH
+ {0xCCAF, 0x6009}, //6359 #CJK UNIFIED IDEOGRAPH
+ {0xCCB0, 0x601C}, //6360 #CJK UNIFIED IDEOGRAPH
+ {0xCCB1, 0x6214}, //6361 #CJK UNIFIED IDEOGRAPH
+ {0xCCB2, 0x623D}, //6362 #CJK UNIFIED IDEOGRAPH
+ {0xCCB3, 0x62AD}, //6363 #CJK UNIFIED IDEOGRAPH
+ {0xCCB4, 0x62B4}, //6364 #CJK UNIFIED IDEOGRAPH
+ {0xCCB5, 0x62D1}, //6365 #CJK UNIFIED IDEOGRAPH
+ {0xCCB6, 0x62BE}, //6366 #CJK UNIFIED IDEOGRAPH
+ {0xCCB7, 0x62AA}, //6367 #CJK UNIFIED IDEOGRAPH
+ {0xCCB8, 0x62B6}, //6368 #CJK UNIFIED IDEOGRAPH
+ {0xCCB9, 0x62CA}, //6369 #CJK UNIFIED IDEOGRAPH
+ {0xCCBA, 0x62AE}, //6370 #CJK UNIFIED IDEOGRAPH
+ {0xCCBB, 0x62B3}, //6371 #CJK UNIFIED IDEOGRAPH
+ {0xCCBC, 0x62AF}, //6372 #CJK UNIFIED IDEOGRAPH
+ {0xCCBD, 0x62BB}, //6373 #CJK UNIFIED IDEOGRAPH
+ {0xCCBE, 0x62A9}, //6374 #CJK UNIFIED IDEOGRAPH
+ {0xCCBF, 0x62B0}, //6375 #CJK UNIFIED IDEOGRAPH
+ {0xCCC0, 0x62B8}, //6376 #CJK UNIFIED IDEOGRAPH
+ {0xCCC1, 0x653D}, //6377 #CJK UNIFIED IDEOGRAPH
+ {0xCCC2, 0x65A8}, //6378 #CJK UNIFIED IDEOGRAPH
+ {0xCCC3, 0x65BB}, //6379 #CJK UNIFIED IDEOGRAPH
+ {0xCCC4, 0x6609}, //6380 #CJK UNIFIED IDEOGRAPH
+ {0xCCC5, 0x65FC}, //6381 #CJK UNIFIED IDEOGRAPH
+ {0xCCC6, 0x6604}, //6382 #CJK UNIFIED IDEOGRAPH
+ {0xCCC7, 0x6612}, //6383 #CJK UNIFIED IDEOGRAPH
+ {0xCCC8, 0x6608}, //6384 #CJK UNIFIED IDEOGRAPH
+ {0xCCC9, 0x65FB}, //6385 #CJK UNIFIED IDEOGRAPH
+ {0xCCCA, 0x6603}, //6386 #CJK UNIFIED IDEOGRAPH
+ {0xCCCB, 0x660B}, //6387 #CJK UNIFIED IDEOGRAPH
+ {0xCCCC, 0x660D}, //6388 #CJK UNIFIED IDEOGRAPH
+ {0xCCCD, 0x6605}, //6389 #CJK UNIFIED IDEOGRAPH
+ {0xCCCE, 0x65FD}, //6390 #CJK UNIFIED IDEOGRAPH
+ {0xCCCF, 0x6611}, //6391 #CJK UNIFIED IDEOGRAPH
+ {0xCCD0, 0x6610}, //6392 #CJK UNIFIED IDEOGRAPH
+ {0xCCD1, 0x66F6}, //6393 #CJK UNIFIED IDEOGRAPH
+ {0xCCD2, 0x670A}, //6394 #CJK UNIFIED IDEOGRAPH
+ {0xCCD3, 0x6785}, //6395 #CJK UNIFIED IDEOGRAPH
+ {0xCCD4, 0x676C}, //6396 #CJK UNIFIED IDEOGRAPH
+ {0xCCD5, 0x678E}, //6397 #CJK UNIFIED IDEOGRAPH
+ {0xCCD6, 0x6792}, //6398 #CJK UNIFIED IDEOGRAPH
+ {0xCCD7, 0x6776}, //6399 #CJK UNIFIED IDEOGRAPH
+ {0xCCD8, 0x677B}, //6400 #CJK UNIFIED IDEOGRAPH
+ {0xCCD9, 0x6798}, //6401 #CJK UNIFIED IDEOGRAPH
+ {0xCCDA, 0x6786}, //6402 #CJK UNIFIED IDEOGRAPH
+ {0xCCDB, 0x6784}, //6403 #CJK UNIFIED IDEOGRAPH
+ {0xCCDC, 0x6774}, //6404 #CJK UNIFIED IDEOGRAPH
+ {0xCCDD, 0x678D}, //6405 #CJK UNIFIED IDEOGRAPH
+ {0xCCDE, 0x678C}, //6406 #CJK UNIFIED IDEOGRAPH
+ {0xCCDF, 0x677A}, //6407 #CJK UNIFIED IDEOGRAPH
+ {0xCCE0, 0x679F}, //6408 #CJK UNIFIED IDEOGRAPH
+ {0xCCE1, 0x6791}, //6409 #CJK UNIFIED IDEOGRAPH
+ {0xCCE2, 0x6799}, //6410 #CJK UNIFIED IDEOGRAPH
+ {0xCCE3, 0x6783}, //6411 #CJK UNIFIED IDEOGRAPH
+ {0xCCE4, 0x677D}, //6412 #CJK UNIFIED IDEOGRAPH
+ {0xCCE5, 0x6781}, //6413 #CJK UNIFIED IDEOGRAPH
+ {0xCCE6, 0x6778}, //6414 #CJK UNIFIED IDEOGRAPH
+ {0xCCE7, 0x6779}, //6415 #CJK UNIFIED IDEOGRAPH
+ {0xCCE8, 0x6794}, //6416 #CJK UNIFIED IDEOGRAPH
+ {0xCCE9, 0x6B25}, //6417 #CJK UNIFIED IDEOGRAPH
+ {0xCCEA, 0x6B80}, //6418 #CJK UNIFIED IDEOGRAPH
+ {0xCCEB, 0x6B7E}, //6419 #CJK UNIFIED IDEOGRAPH
+ {0xCCEC, 0x6BDE}, //6420 #CJK UNIFIED IDEOGRAPH
+ {0xCCED, 0x6C1D}, //6421 #CJK UNIFIED IDEOGRAPH
+ {0xCCEE, 0x6C93}, //6422 #CJK UNIFIED IDEOGRAPH
+ {0xCCEF, 0x6CEC}, //6423 #CJK UNIFIED IDEOGRAPH
+ {0xCCF0, 0x6CEB}, //6424 #CJK UNIFIED IDEOGRAPH
+ {0xCCF1, 0x6CEE}, //6425 #CJK UNIFIED IDEOGRAPH
+ {0xCCF2, 0x6CD9}, //6426 #CJK UNIFIED IDEOGRAPH
+ {0xCCF3, 0x6CB6}, //6427 #CJK UNIFIED IDEOGRAPH
+ {0xCCF4, 0x6CD4}, //6428 #CJK UNIFIED IDEOGRAPH
+ {0xCCF5, 0x6CAD}, //6429 #CJK UNIFIED IDEOGRAPH
+ {0xCCF6, 0x6CE7}, //6430 #CJK UNIFIED IDEOGRAPH
+ {0xCCF7, 0x6CB7}, //6431 #CJK UNIFIED IDEOGRAPH
+ {0xCCF8, 0x6CD0}, //6432 #CJK UNIFIED IDEOGRAPH
+ {0xCCF9, 0x6CC2}, //6433 #CJK UNIFIED IDEOGRAPH
+ {0xCCFA, 0x6CBA}, //6434 #CJK UNIFIED IDEOGRAPH
+ {0xCCFB, 0x6CC3}, //6435 #CJK UNIFIED IDEOGRAPH
+ {0xCCFC, 0x6CC6}, //6436 #CJK UNIFIED IDEOGRAPH
+ {0xCCFD, 0x6CED}, //6437 #CJK UNIFIED IDEOGRAPH
+ {0xCCFE, 0x6CF2}, //6438 #CJK UNIFIED IDEOGRAPH
+ {0xCD40, 0x6CD2}, //6439 #CJK UNIFIED IDEOGRAPH
+ {0xCD41, 0x6CDD}, //6440 #CJK UNIFIED IDEOGRAPH
+ {0xCD42, 0x6CB4}, //6441 #CJK UNIFIED IDEOGRAPH
+ {0xCD43, 0x6C8A}, //6442 #CJK UNIFIED IDEOGRAPH
+ {0xCD44, 0x6C9D}, //6443 #CJK UNIFIED IDEOGRAPH
+ {0xCD45, 0x6C80}, //6444 #CJK UNIFIED IDEOGRAPH
+ {0xCD46, 0x6CDE}, //6445 #CJK UNIFIED IDEOGRAPH
+ {0xCD47, 0x6CC0}, //6446 #CJK UNIFIED IDEOGRAPH
+ {0xCD48, 0x6D30}, //6447 #CJK UNIFIED IDEOGRAPH
+ {0xCD49, 0x6CCD}, //6448 #CJK UNIFIED IDEOGRAPH
+ {0xCD4A, 0x6CC7}, //6449 #CJK UNIFIED IDEOGRAPH
+ {0xCD4B, 0x6CB0}, //6450 #CJK UNIFIED IDEOGRAPH
+ {0xCD4C, 0x6CF9}, //6451 #CJK UNIFIED IDEOGRAPH
+ {0xCD4D, 0x6CCF}, //6452 #CJK UNIFIED IDEOGRAPH
+ {0xCD4E, 0x6CE9}, //6453 #CJK UNIFIED IDEOGRAPH
+ {0xCD4F, 0x6CD1}, //6454 #CJK UNIFIED IDEOGRAPH
+ {0xCD50, 0x7094}, //6455 #CJK UNIFIED IDEOGRAPH
+ {0xCD51, 0x7098}, //6456 #CJK UNIFIED IDEOGRAPH
+ {0xCD52, 0x7085}, //6457 #CJK UNIFIED IDEOGRAPH
+ {0xCD53, 0x7093}, //6458 #CJK UNIFIED IDEOGRAPH
+ {0xCD54, 0x7086}, //6459 #CJK UNIFIED IDEOGRAPH
+ {0xCD55, 0x7084}, //6460 #CJK UNIFIED IDEOGRAPH
+ {0xCD56, 0x7091}, //6461 #CJK UNIFIED IDEOGRAPH
+ {0xCD57, 0x7096}, //6462 #CJK UNIFIED IDEOGRAPH
+ {0xCD58, 0x7082}, //6463 #CJK UNIFIED IDEOGRAPH
+ {0xCD59, 0x709A}, //6464 #CJK UNIFIED IDEOGRAPH
+ {0xCD5A, 0x7083}, //6465 #CJK UNIFIED IDEOGRAPH
+ {0xCD5B, 0x726A}, //6466 #CJK UNIFIED IDEOGRAPH
+ {0xCD5C, 0x72D6}, //6467 #CJK UNIFIED IDEOGRAPH
+ {0xCD5D, 0x72CB}, //6468 #CJK UNIFIED IDEOGRAPH
+ {0xCD5E, 0x72D8}, //6469 #CJK UNIFIED IDEOGRAPH
+ {0xCD5F, 0x72C9}, //6470 #CJK UNIFIED IDEOGRAPH
+ {0xCD60, 0x72DC}, //6471 #CJK UNIFIED IDEOGRAPH
+ {0xCD61, 0x72D2}, //6472 #CJK UNIFIED IDEOGRAPH
+ {0xCD62, 0x72D4}, //6473 #CJK UNIFIED IDEOGRAPH
+ {0xCD63, 0x72DA}, //6474 #CJK UNIFIED IDEOGRAPH
+ {0xCD64, 0x72CC}, //6475 #CJK UNIFIED IDEOGRAPH
+ {0xCD65, 0x72D1}, //6476 #CJK UNIFIED IDEOGRAPH
+ {0xCD66, 0x73A4}, //6477 #CJK UNIFIED IDEOGRAPH
+ {0xCD67, 0x73A1}, //6478 #CJK UNIFIED IDEOGRAPH
+ {0xCD68, 0x73AD}, //6479 #CJK UNIFIED IDEOGRAPH
+ {0xCD69, 0x73A6}, //6480 #CJK UNIFIED IDEOGRAPH
+ {0xCD6A, 0x73A2}, //6481 #CJK UNIFIED IDEOGRAPH
+ {0xCD6B, 0x73A0}, //6482 #CJK UNIFIED IDEOGRAPH
+ {0xCD6C, 0x73AC}, //6483 #CJK UNIFIED IDEOGRAPH
+ {0xCD6D, 0x739D}, //6484 #CJK UNIFIED IDEOGRAPH
+ {0xCD6E, 0x74DD}, //6485 #CJK UNIFIED IDEOGRAPH
+ {0xCD6F, 0x74E8}, //6486 #CJK UNIFIED IDEOGRAPH
+ {0xCD70, 0x753F}, //6487 #CJK UNIFIED IDEOGRAPH
+ {0xCD71, 0x7540}, //6488 #CJK UNIFIED IDEOGRAPH
+ {0xCD72, 0x753E}, //6489 #CJK UNIFIED IDEOGRAPH
+ {0xCD73, 0x758C}, //6490 #CJK UNIFIED IDEOGRAPH
+ {0xCD74, 0x7598}, //6491 #CJK UNIFIED IDEOGRAPH
+ {0xCD75, 0x76AF}, //6492 #CJK UNIFIED IDEOGRAPH
+ {0xCD76, 0x76F3}, //6493 #CJK UNIFIED IDEOGRAPH
+ {0xCD77, 0x76F1}, //6494 #CJK UNIFIED IDEOGRAPH
+ {0xCD78, 0x76F0}, //6495 #CJK UNIFIED IDEOGRAPH
+ {0xCD79, 0x76F5}, //6496 #CJK UNIFIED IDEOGRAPH
+ {0xCD7A, 0x77F8}, //6497 #CJK UNIFIED IDEOGRAPH
+ {0xCD7B, 0x77FC}, //6498 #CJK UNIFIED IDEOGRAPH
+ {0xCD7C, 0x77F9}, //6499 #CJK UNIFIED IDEOGRAPH
+ {0xCD7D, 0x77FB}, //6500 #CJK UNIFIED IDEOGRAPH
+ {0xCD7E, 0x77FA}, //6501 #CJK UNIFIED IDEOGRAPH
+ {0xCDA1, 0x77F7}, //6502 #CJK UNIFIED IDEOGRAPH
+ {0xCDA2, 0x7942}, //6503 #CJK UNIFIED IDEOGRAPH
+ {0xCDA3, 0x793F}, //6504 #CJK UNIFIED IDEOGRAPH
+ {0xCDA4, 0x79C5}, //6505 #CJK UNIFIED IDEOGRAPH
+ {0xCDA5, 0x7A78}, //6506 #CJK UNIFIED IDEOGRAPH
+ {0xCDA6, 0x7A7B}, //6507 #CJK UNIFIED IDEOGRAPH
+ {0xCDA7, 0x7AFB}, //6508 #CJK UNIFIED IDEOGRAPH
+ {0xCDA8, 0x7C75}, //6509 #CJK UNIFIED IDEOGRAPH
+ {0xCDA9, 0x7CFD}, //6510 #CJK UNIFIED IDEOGRAPH
+ {0xCDAA, 0x8035}, //6511 #CJK UNIFIED IDEOGRAPH
+ {0xCDAB, 0x808F}, //6512 #CJK UNIFIED IDEOGRAPH
+ {0xCDAC, 0x80AE}, //6513 #CJK UNIFIED IDEOGRAPH
+ {0xCDAD, 0x80A3}, //6514 #CJK UNIFIED IDEOGRAPH
+ {0xCDAE, 0x80B8}, //6515 #CJK UNIFIED IDEOGRAPH
+ {0xCDAF, 0x80B5}, //6516 #CJK UNIFIED IDEOGRAPH
+ {0xCDB0, 0x80AD}, //6517 #CJK UNIFIED IDEOGRAPH
+ {0xCDB1, 0x8220}, //6518 #CJK UNIFIED IDEOGRAPH
+ {0xCDB2, 0x82A0}, //6519 #CJK UNIFIED IDEOGRAPH
+ {0xCDB3, 0x82C0}, //6520 #CJK UNIFIED IDEOGRAPH
+ {0xCDB4, 0x82AB}, //6521 #CJK UNIFIED IDEOGRAPH
+ {0xCDB5, 0x829A}, //6522 #CJK UNIFIED IDEOGRAPH
+ {0xCDB6, 0x8298}, //6523 #CJK UNIFIED IDEOGRAPH
+ {0xCDB7, 0x829B}, //6524 #CJK UNIFIED IDEOGRAPH
+ {0xCDB8, 0x82B5}, //6525 #CJK UNIFIED IDEOGRAPH
+ {0xCDB9, 0x82A7}, //6526 #CJK UNIFIED IDEOGRAPH
+ {0xCDBA, 0x82AE}, //6527 #CJK UNIFIED IDEOGRAPH
+ {0xCDBB, 0x82BC}, //6528 #CJK UNIFIED IDEOGRAPH
+ {0xCDBC, 0x829E}, //6529 #CJK UNIFIED IDEOGRAPH
+ {0xCDBD, 0x82BA}, //6530 #CJK UNIFIED IDEOGRAPH
+ {0xCDBE, 0x82B4}, //6531 #CJK UNIFIED IDEOGRAPH
+ {0xCDBF, 0x82A8}, //6532 #CJK UNIFIED IDEOGRAPH
+ {0xCDC0, 0x82A1}, //6533 #CJK UNIFIED IDEOGRAPH
+ {0xCDC1, 0x82A9}, //6534 #CJK UNIFIED IDEOGRAPH
+ {0xCDC2, 0x82C2}, //6535 #CJK UNIFIED IDEOGRAPH
+ {0xCDC3, 0x82A4}, //6536 #CJK UNIFIED IDEOGRAPH
+ {0xCDC4, 0x82C3}, //6537 #CJK UNIFIED IDEOGRAPH
+ {0xCDC5, 0x82B6}, //6538 #CJK UNIFIED IDEOGRAPH
+ {0xCDC6, 0x82A2}, //6539 #CJK UNIFIED IDEOGRAPH
+ {0xCDC7, 0x8670}, //6540 #CJK UNIFIED IDEOGRAPH
+ {0xCDC8, 0x866F}, //6541 #CJK UNIFIED IDEOGRAPH
+ {0xCDC9, 0x866D}, //6542 #CJK UNIFIED IDEOGRAPH
+ {0xCDCA, 0x866E}, //6543 #CJK UNIFIED IDEOGRAPH
+ {0xCDCB, 0x8C56}, //6544 #CJK UNIFIED IDEOGRAPH
+ {0xCDCC, 0x8FD2}, //6545 #CJK UNIFIED IDEOGRAPH
+ {0xCDCD, 0x8FCB}, //6546 #CJK UNIFIED IDEOGRAPH
+ {0xCDCE, 0x8FD3}, //6547 #CJK UNIFIED IDEOGRAPH
+ {0xCDCF, 0x8FCD}, //6548 #CJK UNIFIED IDEOGRAPH
+ {0xCDD0, 0x8FD6}, //6549 #CJK UNIFIED IDEOGRAPH
+ {0xCDD1, 0x8FD5}, //6550 #CJK UNIFIED IDEOGRAPH
+ {0xCDD2, 0x8FD7}, //6551 #CJK UNIFIED IDEOGRAPH
+ {0xCDD3, 0x90B2}, //6552 #CJK UNIFIED IDEOGRAPH
+ {0xCDD4, 0x90B4}, //6553 #CJK UNIFIED IDEOGRAPH
+ {0xCDD5, 0x90AF}, //6554 #CJK UNIFIED IDEOGRAPH
+ {0xCDD6, 0x90B3}, //6555 #CJK UNIFIED IDEOGRAPH
+ {0xCDD7, 0x90B0}, //6556 #CJK UNIFIED IDEOGRAPH
+ {0xCDD8, 0x9639}, //6557 #CJK UNIFIED IDEOGRAPH
+ {0xCDD9, 0x963D}, //6558 #CJK UNIFIED IDEOGRAPH
+ {0xCDDA, 0x963C}, //6559 #CJK UNIFIED IDEOGRAPH
+ {0xCDDB, 0x963A}, //6560 #CJK UNIFIED IDEOGRAPH
+ {0xCDDC, 0x9643}, //6561 #CJK UNIFIED IDEOGRAPH
+ {0xCDDD, 0x4FCD}, //6562 #CJK UNIFIED IDEOGRAPH
+ {0xCDDE, 0x4FC5}, //6563 #CJK UNIFIED IDEOGRAPH
+ {0xCDDF, 0x4FD3}, //6564 #CJK UNIFIED IDEOGRAPH
+ {0xCDE0, 0x4FB2}, //6565 #CJK UNIFIED IDEOGRAPH
+ {0xCDE1, 0x4FC9}, //6566 #CJK UNIFIED IDEOGRAPH
+ {0xCDE2, 0x4FCB}, //6567 #CJK UNIFIED IDEOGRAPH
+ {0xCDE3, 0x4FC1}, //6568 #CJK UNIFIED IDEOGRAPH
+ {0xCDE4, 0x4FD4}, //6569 #CJK UNIFIED IDEOGRAPH
+ {0xCDE5, 0x4FDC}, //6570 #CJK UNIFIED IDEOGRAPH
+ {0xCDE6, 0x4FD9}, //6571 #CJK UNIFIED IDEOGRAPH
+ {0xCDE7, 0x4FBB}, //6572 #CJK UNIFIED IDEOGRAPH
+ {0xCDE8, 0x4FB3}, //6573 #CJK UNIFIED IDEOGRAPH
+ {0xCDE9, 0x4FDB}, //6574 #CJK UNIFIED IDEOGRAPH
+ {0xCDEA, 0x4FC7}, //6575 #CJK UNIFIED IDEOGRAPH
+ {0xCDEB, 0x4FD6}, //6576 #CJK UNIFIED IDEOGRAPH
+ {0xCDEC, 0x4FBA}, //6577 #CJK UNIFIED IDEOGRAPH
+ {0xCDED, 0x4FC0}, //6578 #CJK UNIFIED IDEOGRAPH
+ {0xCDEE, 0x4FB9}, //6579 #CJK UNIFIED IDEOGRAPH
+ {0xCDEF, 0x4FEC}, //6580 #CJK UNIFIED IDEOGRAPH
+ {0xCDF0, 0x5244}, //6581 #CJK UNIFIED IDEOGRAPH
+ {0xCDF1, 0x5249}, //6582 #CJK UNIFIED IDEOGRAPH
+ {0xCDF2, 0x52C0}, //6583 #CJK UNIFIED IDEOGRAPH
+ {0xCDF3, 0x52C2}, //6584 #CJK UNIFIED IDEOGRAPH
+ {0xCDF4, 0x533D}, //6585 #CJK UNIFIED IDEOGRAPH
+ {0xCDF5, 0x537C}, //6586 #CJK UNIFIED IDEOGRAPH
+ {0xCDF6, 0x5397}, //6587 #CJK UNIFIED IDEOGRAPH
+ {0xCDF7, 0x5396}, //6588 #CJK UNIFIED IDEOGRAPH
+ {0xCDF8, 0x5399}, //6589 #CJK UNIFIED IDEOGRAPH
+ {0xCDF9, 0x5398}, //6590 #CJK UNIFIED IDEOGRAPH
+ {0xCDFA, 0x54BA}, //6591 #CJK UNIFIED IDEOGRAPH
+ {0xCDFB, 0x54A1}, //6592 #CJK UNIFIED IDEOGRAPH
+ {0xCDFC, 0x54AD}, //6593 #CJK UNIFIED IDEOGRAPH
+ {0xCDFD, 0x54A5}, //6594 #CJK UNIFIED IDEOGRAPH
+ {0xCDFE, 0x54CF}, //6595 #CJK UNIFIED IDEOGRAPH
+ {0xCE40, 0x54C3}, //6596 #CJK UNIFIED IDEOGRAPH
+ {0xCE41, 0x830D}, //6597 #CJK UNIFIED IDEOGRAPH
+ {0xCE42, 0x54B7}, //6598 #CJK UNIFIED IDEOGRAPH
+ {0xCE43, 0x54AE}, //6599 #CJK UNIFIED IDEOGRAPH
+ {0xCE44, 0x54D6}, //6600 #CJK UNIFIED IDEOGRAPH
+ {0xCE45, 0x54B6}, //6601 #CJK UNIFIED IDEOGRAPH
+ {0xCE46, 0x54C5}, //6602 #CJK UNIFIED IDEOGRAPH
+ {0xCE47, 0x54C6}, //6603 #CJK UNIFIED IDEOGRAPH
+ {0xCE48, 0x54A0}, //6604 #CJK UNIFIED IDEOGRAPH
+ {0xCE49, 0x5470}, //6605 #CJK UNIFIED IDEOGRAPH
+ {0xCE4A, 0x54BC}, //6606 #CJK UNIFIED IDEOGRAPH
+ {0xCE4B, 0x54A2}, //6607 #CJK UNIFIED IDEOGRAPH
+ {0xCE4C, 0x54BE}, //6608 #CJK UNIFIED IDEOGRAPH
+ {0xCE4D, 0x5472}, //6609 #CJK UNIFIED IDEOGRAPH
+ {0xCE4E, 0x54DE}, //6610 #CJK UNIFIED IDEOGRAPH
+ {0xCE4F, 0x54B0}, //6611 #CJK UNIFIED IDEOGRAPH
+ {0xCE50, 0x57B5}, //6612 #CJK UNIFIED IDEOGRAPH
+ {0xCE51, 0x579E}, //6613 #CJK UNIFIED IDEOGRAPH
+ {0xCE52, 0x579F}, //6614 #CJK UNIFIED IDEOGRAPH
+ {0xCE53, 0x57A4}, //6615 #CJK UNIFIED IDEOGRAPH
+ {0xCE54, 0x578C}, //6616 #CJK UNIFIED IDEOGRAPH
+ {0xCE55, 0x5797}, //6617 #CJK UNIFIED IDEOGRAPH
+ {0xCE56, 0x579D}, //6618 #CJK UNIFIED IDEOGRAPH
+ {0xCE57, 0x579B}, //6619 #CJK UNIFIED IDEOGRAPH
+ {0xCE58, 0x5794}, //6620 #CJK UNIFIED IDEOGRAPH
+ {0xCE59, 0x5798}, //6621 #CJK UNIFIED IDEOGRAPH
+ {0xCE5A, 0x578F}, //6622 #CJK UNIFIED IDEOGRAPH
+ {0xCE5B, 0x5799}, //6623 #CJK UNIFIED IDEOGRAPH
+ {0xCE5C, 0x57A5}, //6624 #CJK UNIFIED IDEOGRAPH
+ {0xCE5D, 0x579A}, //6625 #CJK UNIFIED IDEOGRAPH
+ {0xCE5E, 0x5795}, //6626 #CJK UNIFIED IDEOGRAPH
+ {0xCE5F, 0x58F4}, //6627 #CJK UNIFIED IDEOGRAPH
+ {0xCE60, 0x590D}, //6628 #CJK UNIFIED IDEOGRAPH
+ {0xCE61, 0x5953}, //6629 #CJK UNIFIED IDEOGRAPH
+ {0xCE62, 0x59E1}, //6630 #CJK UNIFIED IDEOGRAPH
+ {0xCE63, 0x59DE}, //6631 #CJK UNIFIED IDEOGRAPH
+ {0xCE64, 0x59EE}, //6632 #CJK UNIFIED IDEOGRAPH
+ {0xCE65, 0x5A00}, //6633 #CJK UNIFIED IDEOGRAPH
+ {0xCE66, 0x59F1}, //6634 #CJK UNIFIED IDEOGRAPH
+ {0xCE67, 0x59DD}, //6635 #CJK UNIFIED IDEOGRAPH
+ {0xCE68, 0x59FA}, //6636 #CJK UNIFIED IDEOGRAPH
+ {0xCE69, 0x59FD}, //6637 #CJK UNIFIED IDEOGRAPH
+ {0xCE6A, 0x59FC}, //6638 #CJK UNIFIED IDEOGRAPH
+ {0xCE6B, 0x59F6}, //6639 #CJK UNIFIED IDEOGRAPH
+ {0xCE6C, 0x59E4}, //6640 #CJK UNIFIED IDEOGRAPH
+ {0xCE6D, 0x59F2}, //6641 #CJK UNIFIED IDEOGRAPH
+ {0xCE6E, 0x59F7}, //6642 #CJK UNIFIED IDEOGRAPH
+ {0xCE6F, 0x59DB}, //6643 #CJK UNIFIED IDEOGRAPH
+ {0xCE70, 0x59E9}, //6644 #CJK UNIFIED IDEOGRAPH
+ {0xCE71, 0x59F3}, //6645 #CJK UNIFIED IDEOGRAPH
+ {0xCE72, 0x59F5}, //6646 #CJK UNIFIED IDEOGRAPH
+ {0xCE73, 0x59E0}, //6647 #CJK UNIFIED IDEOGRAPH
+ {0xCE74, 0x59FE}, //6648 #CJK UNIFIED IDEOGRAPH
+ {0xCE75, 0x59F4}, //6649 #CJK UNIFIED IDEOGRAPH
+ {0xCE76, 0x59ED}, //6650 #CJK UNIFIED IDEOGRAPH
+ {0xCE77, 0x5BA8}, //6651 #CJK UNIFIED IDEOGRAPH
+ {0xCE78, 0x5C4C}, //6652 #CJK UNIFIED IDEOGRAPH
+ {0xCE79, 0x5CD0}, //6653 #CJK UNIFIED IDEOGRAPH
+ {0xCE7A, 0x5CD8}, //6654 #CJK UNIFIED IDEOGRAPH
+ {0xCE7B, 0x5CCC}, //6655 #CJK UNIFIED IDEOGRAPH
+ {0xCE7C, 0x5CD7}, //6656 #CJK UNIFIED IDEOGRAPH
+ {0xCE7D, 0x5CCB}, //6657 #CJK UNIFIED IDEOGRAPH
+ {0xCE7E, 0x5CDB}, //6658 #CJK UNIFIED IDEOGRAPH
+ {0xCEA1, 0x5CDE}, //6659 #CJK UNIFIED IDEOGRAPH
+ {0xCEA2, 0x5CDA}, //6660 #CJK UNIFIED IDEOGRAPH
+ {0xCEA3, 0x5CC9}, //6661 #CJK UNIFIED IDEOGRAPH
+ {0xCEA4, 0x5CC7}, //6662 #CJK UNIFIED IDEOGRAPH
+ {0xCEA5, 0x5CCA}, //6663 #CJK UNIFIED IDEOGRAPH
+ {0xCEA6, 0x5CD6}, //6664 #CJK UNIFIED IDEOGRAPH
+ {0xCEA7, 0x5CD3}, //6665 #CJK UNIFIED IDEOGRAPH
+ {0xCEA8, 0x5CD4}, //6666 #CJK UNIFIED IDEOGRAPH
+ {0xCEA9, 0x5CCF}, //6667 #CJK UNIFIED IDEOGRAPH
+ {0xCEAA, 0x5CC8}, //6668 #CJK UNIFIED IDEOGRAPH
+ {0xCEAB, 0x5CC6}, //6669 #CJK UNIFIED IDEOGRAPH
+ {0xCEAC, 0x5CCE}, //6670 #CJK UNIFIED IDEOGRAPH
+ {0xCEAD, 0x5CDF}, //6671 #CJK UNIFIED IDEOGRAPH
+ {0xCEAE, 0x5CF8}, //6672 #CJK UNIFIED IDEOGRAPH
+ {0xCEAF, 0x5DF9}, //6673 #CJK UNIFIED IDEOGRAPH
+ {0xCEB0, 0x5E21}, //6674 #CJK UNIFIED IDEOGRAPH
+ {0xCEB1, 0x5E22}, //6675 #CJK UNIFIED IDEOGRAPH
+ {0xCEB2, 0x5E23}, //6676 #CJK UNIFIED IDEOGRAPH
+ {0xCEB3, 0x5E20}, //6677 #CJK UNIFIED IDEOGRAPH
+ {0xCEB4, 0x5E24}, //6678 #CJK UNIFIED IDEOGRAPH
+ {0xCEB5, 0x5EB0}, //6679 #CJK UNIFIED IDEOGRAPH
+ {0xCEB6, 0x5EA4}, //6680 #CJK UNIFIED IDEOGRAPH
+ {0xCEB7, 0x5EA2}, //6681 #CJK UNIFIED IDEOGRAPH
+ {0xCEB8, 0x5E9B}, //6682 #CJK UNIFIED IDEOGRAPH
+ {0xCEB9, 0x5EA3}, //6683 #CJK UNIFIED IDEOGRAPH
+ {0xCEBA, 0x5EA5}, //6684 #CJK UNIFIED IDEOGRAPH
+ {0xCEBB, 0x5F07}, //6685 #CJK UNIFIED IDEOGRAPH
+ {0xCEBC, 0x5F2E}, //6686 #CJK UNIFIED IDEOGRAPH
+ {0xCEBD, 0x5F56}, //6687 #CJK UNIFIED IDEOGRAPH
+ {0xCEBE, 0x5F86}, //6688 #CJK UNIFIED IDEOGRAPH
+ {0xCEBF, 0x6037}, //6689 #CJK UNIFIED IDEOGRAPH
+ {0xCEC0, 0x6039}, //6690 #CJK UNIFIED IDEOGRAPH
+ {0xCEC1, 0x6054}, //6691 #CJK UNIFIED IDEOGRAPH
+ {0xCEC2, 0x6072}, //6692 #CJK UNIFIED IDEOGRAPH
+ {0xCEC3, 0x605E}, //6693 #CJK UNIFIED IDEOGRAPH
+ {0xCEC4, 0x6045}, //6694 #CJK UNIFIED IDEOGRAPH
+ {0xCEC5, 0x6053}, //6695 #CJK UNIFIED IDEOGRAPH
+ {0xCEC6, 0x6047}, //6696 #CJK UNIFIED IDEOGRAPH
+ {0xCEC7, 0x6049}, //6697 #CJK UNIFIED IDEOGRAPH
+ {0xCEC8, 0x605B}, //6698 #CJK UNIFIED IDEOGRAPH
+ {0xCEC9, 0x604C}, //6699 #CJK UNIFIED IDEOGRAPH
+ {0xCECA, 0x6040}, //6700 #CJK UNIFIED IDEOGRAPH
+ {0xCECB, 0x6042}, //6701 #CJK UNIFIED IDEOGRAPH
+ {0xCECC, 0x605F}, //6702 #CJK UNIFIED IDEOGRAPH
+ {0xCECD, 0x6024}, //6703 #CJK UNIFIED IDEOGRAPH
+ {0xCECE, 0x6044}, //6704 #CJK UNIFIED IDEOGRAPH
+ {0xCECF, 0x6058}, //6705 #CJK UNIFIED IDEOGRAPH
+ {0xCED0, 0x6066}, //6706 #CJK UNIFIED IDEOGRAPH
+ {0xCED1, 0x606E}, //6707 #CJK UNIFIED IDEOGRAPH
+ {0xCED2, 0x6242}, //6708 #CJK UNIFIED IDEOGRAPH
+ {0xCED3, 0x6243}, //6709 #CJK UNIFIED IDEOGRAPH
+ {0xCED4, 0x62CF}, //6710 #CJK UNIFIED IDEOGRAPH
+ {0xCED5, 0x630D}, //6711 #CJK UNIFIED IDEOGRAPH
+ {0xCED6, 0x630B}, //6712 #CJK UNIFIED IDEOGRAPH
+ {0xCED7, 0x62F5}, //6713 #CJK UNIFIED IDEOGRAPH
+ {0xCED8, 0x630E}, //6714 #CJK UNIFIED IDEOGRAPH
+ {0xCED9, 0x6303}, //6715 #CJK UNIFIED IDEOGRAPH
+ {0xCEDA, 0x62EB}, //6716 #CJK UNIFIED IDEOGRAPH
+ {0xCEDB, 0x62F9}, //6717 #CJK UNIFIED IDEOGRAPH
+ {0xCEDC, 0x630F}, //6718 #CJK UNIFIED IDEOGRAPH
+ {0xCEDD, 0x630C}, //6719 #CJK UNIFIED IDEOGRAPH
+ {0xCEDE, 0x62F8}, //6720 #CJK UNIFIED IDEOGRAPH
+ {0xCEDF, 0x62F6}, //6721 #CJK UNIFIED IDEOGRAPH
+ {0xCEE0, 0x6300}, //6722 #CJK UNIFIED IDEOGRAPH
+ {0xCEE1, 0x6313}, //6723 #CJK UNIFIED IDEOGRAPH
+ {0xCEE2, 0x6314}, //6724 #CJK UNIFIED IDEOGRAPH
+ {0xCEE3, 0x62FA}, //6725 #CJK UNIFIED IDEOGRAPH
+ {0xCEE4, 0x6315}, //6726 #CJK UNIFIED IDEOGRAPH
+ {0xCEE5, 0x62FB}, //6727 #CJK UNIFIED IDEOGRAPH
+ {0xCEE6, 0x62F0}, //6728 #CJK UNIFIED IDEOGRAPH
+ {0xCEE7, 0x6541}, //6729 #CJK UNIFIED IDEOGRAPH
+ {0xCEE8, 0x6543}, //6730 #CJK UNIFIED IDEOGRAPH
+ {0xCEE9, 0x65AA}, //6731 #CJK UNIFIED IDEOGRAPH
+ {0xCEEA, 0x65BF}, //6732 #CJK UNIFIED IDEOGRAPH
+ {0xCEEB, 0x6636}, //6733 #CJK UNIFIED IDEOGRAPH
+ {0xCEEC, 0x6621}, //6734 #CJK UNIFIED IDEOGRAPH
+ {0xCEED, 0x6632}, //6735 #CJK UNIFIED IDEOGRAPH
+ {0xCEEE, 0x6635}, //6736 #CJK UNIFIED IDEOGRAPH
+ {0xCEEF, 0x661C}, //6737 #CJK UNIFIED IDEOGRAPH
+ {0xCEF0, 0x6626}, //6738 #CJK UNIFIED IDEOGRAPH
+ {0xCEF1, 0x6622}, //6739 #CJK UNIFIED IDEOGRAPH
+ {0xCEF2, 0x6633}, //6740 #CJK UNIFIED IDEOGRAPH
+ {0xCEF3, 0x662B}, //6741 #CJK UNIFIED IDEOGRAPH
+ {0xCEF4, 0x663A}, //6742 #CJK UNIFIED IDEOGRAPH
+ {0xCEF5, 0x661D}, //6743 #CJK UNIFIED IDEOGRAPH
+ {0xCEF6, 0x6634}, //6744 #CJK UNIFIED IDEOGRAPH
+ {0xCEF7, 0x6639}, //6745 #CJK UNIFIED IDEOGRAPH
+ {0xCEF8, 0x662E}, //6746 #CJK UNIFIED IDEOGRAPH
+ {0xCEF9, 0x670F}, //6747 #CJK UNIFIED IDEOGRAPH
+ {0xCEFA, 0x6710}, //6748 #CJK UNIFIED IDEOGRAPH
+ {0xCEFB, 0x67C1}, //6749 #CJK UNIFIED IDEOGRAPH
+ {0xCEFC, 0x67F2}, //6750 #CJK UNIFIED IDEOGRAPH
+ {0xCEFD, 0x67C8}, //6751 #CJK UNIFIED IDEOGRAPH
+ {0xCEFE, 0x67BA}, //6752 #CJK UNIFIED IDEOGRAPH
+ {0xCF40, 0x67DC}, //6753 #CJK UNIFIED IDEOGRAPH
+ {0xCF41, 0x67BB}, //6754 #CJK UNIFIED IDEOGRAPH
+ {0xCF42, 0x67F8}, //6755 #CJK UNIFIED IDEOGRAPH
+ {0xCF43, 0x67D8}, //6756 #CJK UNIFIED IDEOGRAPH
+ {0xCF44, 0x67C0}, //6757 #CJK UNIFIED IDEOGRAPH
+ {0xCF45, 0x67B7}, //6758 #CJK UNIFIED IDEOGRAPH
+ {0xCF46, 0x67C5}, //6759 #CJK UNIFIED IDEOGRAPH
+ {0xCF47, 0x67EB}, //6760 #CJK UNIFIED IDEOGRAPH
+ {0xCF48, 0x67E4}, //6761 #CJK UNIFIED IDEOGRAPH
+ {0xCF49, 0x67DF}, //6762 #CJK UNIFIED IDEOGRAPH
+ {0xCF4A, 0x67B5}, //6763 #CJK UNIFIED IDEOGRAPH
+ {0xCF4B, 0x67CD}, //6764 #CJK UNIFIED IDEOGRAPH
+ {0xCF4C, 0x67B3}, //6765 #CJK UNIFIED IDEOGRAPH
+ {0xCF4D, 0x67F7}, //6766 #CJK UNIFIED IDEOGRAPH
+ {0xCF4E, 0x67F6}, //6767 #CJK UNIFIED IDEOGRAPH
+ {0xCF4F, 0x67EE}, //6768 #CJK UNIFIED IDEOGRAPH
+ {0xCF50, 0x67E3}, //6769 #CJK UNIFIED IDEOGRAPH
+ {0xCF51, 0x67C2}, //6770 #CJK UNIFIED IDEOGRAPH
+ {0xCF52, 0x67B9}, //6771 #CJK UNIFIED IDEOGRAPH
+ {0xCF53, 0x67CE}, //6772 #CJK UNIFIED IDEOGRAPH
+ {0xCF54, 0x67E7}, //6773 #CJK UNIFIED IDEOGRAPH
+ {0xCF55, 0x67F0}, //6774 #CJK UNIFIED IDEOGRAPH
+ {0xCF56, 0x67B2}, //6775 #CJK UNIFIED IDEOGRAPH
+ {0xCF57, 0x67FC}, //6776 #CJK UNIFIED IDEOGRAPH
+ {0xCF58, 0x67C6}, //6777 #CJK UNIFIED IDEOGRAPH
+ {0xCF59, 0x67ED}, //6778 #CJK UNIFIED IDEOGRAPH
+ {0xCF5A, 0x67CC}, //6779 #CJK UNIFIED IDEOGRAPH
+ {0xCF5B, 0x67AE}, //6780 #CJK UNIFIED IDEOGRAPH
+ {0xCF5C, 0x67E6}, //6781 #CJK UNIFIED IDEOGRAPH
+ {0xCF5D, 0x67DB}, //6782 #CJK UNIFIED IDEOGRAPH
+ {0xCF5E, 0x67FA}, //6783 #CJK UNIFIED IDEOGRAPH
+ {0xCF5F, 0x67C9}, //6784 #CJK UNIFIED IDEOGRAPH
+ {0xCF60, 0x67CA}, //6785 #CJK UNIFIED IDEOGRAPH
+ {0xCF61, 0x67C3}, //6786 #CJK UNIFIED IDEOGRAPH
+ {0xCF62, 0x67EA}, //6787 #CJK UNIFIED IDEOGRAPH
+ {0xCF63, 0x67CB}, //6788 #CJK UNIFIED IDEOGRAPH
+ {0xCF64, 0x6B28}, //6789 #CJK UNIFIED IDEOGRAPH
+ {0xCF65, 0x6B82}, //6790 #CJK UNIFIED IDEOGRAPH
+ {0xCF66, 0x6B84}, //6791 #CJK UNIFIED IDEOGRAPH
+ {0xCF67, 0x6BB6}, //6792 #CJK UNIFIED IDEOGRAPH
+ {0xCF68, 0x6BD6}, //6793 #CJK UNIFIED IDEOGRAPH
+ {0xCF69, 0x6BD8}, //6794 #CJK UNIFIED IDEOGRAPH
+ {0xCF6A, 0x6BE0}, //6795 #CJK UNIFIED IDEOGRAPH
+ {0xCF6B, 0x6C20}, //6796 #CJK UNIFIED IDEOGRAPH
+ {0xCF6C, 0x6C21}, //6797 #CJK UNIFIED IDEOGRAPH
+ {0xCF6D, 0x6D28}, //6798 #CJK UNIFIED IDEOGRAPH
+ {0xCF6E, 0x6D34}, //6799 #CJK UNIFIED IDEOGRAPH
+ {0xCF6F, 0x6D2D}, //6800 #CJK UNIFIED IDEOGRAPH
+ {0xCF70, 0x6D1F}, //6801 #CJK UNIFIED IDEOGRAPH
+ {0xCF71, 0x6D3C}, //6802 #CJK UNIFIED IDEOGRAPH
+ {0xCF72, 0x6D3F}, //6803 #CJK UNIFIED IDEOGRAPH
+ {0xCF73, 0x6D12}, //6804 #CJK UNIFIED IDEOGRAPH
+ {0xCF74, 0x6D0A}, //6805 #CJK UNIFIED IDEOGRAPH
+ {0xCF75, 0x6CDA}, //6806 #CJK UNIFIED IDEOGRAPH
+ {0xCF76, 0x6D33}, //6807 #CJK UNIFIED IDEOGRAPH
+ {0xCF77, 0x6D04}, //6808 #CJK UNIFIED IDEOGRAPH
+ {0xCF78, 0x6D19}, //6809 #CJK UNIFIED IDEOGRAPH
+ {0xCF79, 0x6D3A}, //6810 #CJK UNIFIED IDEOGRAPH
+ {0xCF7A, 0x6D1A}, //6811 #CJK UNIFIED IDEOGRAPH
+ {0xCF7B, 0x6D11}, //6812 #CJK UNIFIED IDEOGRAPH
+ {0xCF7C, 0x6D00}, //6813 #CJK UNIFIED IDEOGRAPH
+ {0xCF7D, 0x6D1D}, //6814 #CJK UNIFIED IDEOGRAPH
+ {0xCF7E, 0x6D42}, //6815 #CJK UNIFIED IDEOGRAPH
+ {0xCFA1, 0x6D01}, //6816 #CJK UNIFIED IDEOGRAPH
+ {0xCFA2, 0x6D18}, //6817 #CJK UNIFIED IDEOGRAPH
+ {0xCFA3, 0x6D37}, //6818 #CJK UNIFIED IDEOGRAPH
+ {0xCFA4, 0x6D03}, //6819 #CJK UNIFIED IDEOGRAPH
+ {0xCFA5, 0x6D0F}, //6820 #CJK UNIFIED IDEOGRAPH
+ {0xCFA6, 0x6D40}, //6821 #CJK UNIFIED IDEOGRAPH
+ {0xCFA7, 0x6D07}, //6822 #CJK UNIFIED IDEOGRAPH
+ {0xCFA8, 0x6D20}, //6823 #CJK UNIFIED IDEOGRAPH
+ {0xCFA9, 0x6D2C}, //6824 #CJK UNIFIED IDEOGRAPH
+ {0xCFAA, 0x6D08}, //6825 #CJK UNIFIED IDEOGRAPH
+ {0xCFAB, 0x6D22}, //6826 #CJK UNIFIED IDEOGRAPH
+ {0xCFAC, 0x6D09}, //6827 #CJK UNIFIED IDEOGRAPH
+ {0xCFAD, 0x6D10}, //6828 #CJK UNIFIED IDEOGRAPH
+ {0xCFAE, 0x70B7}, //6829 #CJK UNIFIED IDEOGRAPH
+ {0xCFAF, 0x709F}, //6830 #CJK UNIFIED IDEOGRAPH
+ {0xCFB0, 0x70BE}, //6831 #CJK UNIFIED IDEOGRAPH
+ {0xCFB1, 0x70B1}, //6832 #CJK UNIFIED IDEOGRAPH
+ {0xCFB2, 0x70B0}, //6833 #CJK UNIFIED IDEOGRAPH
+ {0xCFB3, 0x70A1}, //6834 #CJK UNIFIED IDEOGRAPH
+ {0xCFB4, 0x70B4}, //6835 #CJK UNIFIED IDEOGRAPH
+ {0xCFB5, 0x70B5}, //6836 #CJK UNIFIED IDEOGRAPH
+ {0xCFB6, 0x70A9}, //6837 #CJK UNIFIED IDEOGRAPH
+ {0xCFB7, 0x7241}, //6838 #CJK UNIFIED IDEOGRAPH
+ {0xCFB8, 0x7249}, //6839 #CJK UNIFIED IDEOGRAPH
+ {0xCFB9, 0x724A}, //6840 #CJK UNIFIED IDEOGRAPH
+ {0xCFBA, 0x726C}, //6841 #CJK UNIFIED IDEOGRAPH
+ {0xCFBB, 0x7270}, //6842 #CJK UNIFIED IDEOGRAPH
+ {0xCFBC, 0x7273}, //6843 #CJK UNIFIED IDEOGRAPH
+ {0xCFBD, 0x726E}, //6844 #CJK UNIFIED IDEOGRAPH
+ {0xCFBE, 0x72CA}, //6845 #CJK UNIFIED IDEOGRAPH
+ {0xCFBF, 0x72E4}, //6846 #CJK UNIFIED IDEOGRAPH
+ {0xCFC0, 0x72E8}, //6847 #CJK UNIFIED IDEOGRAPH
+ {0xCFC1, 0x72EB}, //6848 #CJK UNIFIED IDEOGRAPH
+ {0xCFC2, 0x72DF}, //6849 #CJK UNIFIED IDEOGRAPH
+ {0xCFC3, 0x72EA}, //6850 #CJK UNIFIED IDEOGRAPH
+ {0xCFC4, 0x72E6}, //6851 #CJK UNIFIED IDEOGRAPH
+ {0xCFC5, 0x72E3}, //6852 #CJK UNIFIED IDEOGRAPH
+ {0xCFC6, 0x7385}, //6853 #CJK UNIFIED IDEOGRAPH
+ {0xCFC7, 0x73CC}, //6854 #CJK UNIFIED IDEOGRAPH
+ {0xCFC8, 0x73C2}, //6855 #CJK UNIFIED IDEOGRAPH
+ {0xCFC9, 0x73C8}, //6856 #CJK UNIFIED IDEOGRAPH
+ {0xCFCA, 0x73C5}, //6857 #CJK UNIFIED IDEOGRAPH
+ {0xCFCB, 0x73B9}, //6858 #CJK UNIFIED IDEOGRAPH
+ {0xCFCC, 0x73B6}, //6859 #CJK UNIFIED IDEOGRAPH
+ {0xCFCD, 0x73B5}, //6860 #CJK UNIFIED IDEOGRAPH
+ {0xCFCE, 0x73B4}, //6861 #CJK UNIFIED IDEOGRAPH
+ {0xCFCF, 0x73EB}, //6862 #CJK UNIFIED IDEOGRAPH
+ {0xCFD0, 0x73BF}, //6863 #CJK UNIFIED IDEOGRAPH
+ {0xCFD1, 0x73C7}, //6864 #CJK UNIFIED IDEOGRAPH
+ {0xCFD2, 0x73BE}, //6865 #CJK UNIFIED IDEOGRAPH
+ {0xCFD3, 0x73C3}, //6866 #CJK UNIFIED IDEOGRAPH
+ {0xCFD4, 0x73C6}, //6867 #CJK UNIFIED IDEOGRAPH
+ {0xCFD5, 0x73B8}, //6868 #CJK UNIFIED IDEOGRAPH
+ {0xCFD6, 0x73CB}, //6869 #CJK UNIFIED IDEOGRAPH
+ {0xCFD7, 0x74EC}, //6870 #CJK UNIFIED IDEOGRAPH
+ {0xCFD8, 0x74EE}, //6871 #CJK UNIFIED IDEOGRAPH
+ {0xCFD9, 0x752E}, //6872 #CJK UNIFIED IDEOGRAPH
+ {0xCFDA, 0x7547}, //6873 #CJK UNIFIED IDEOGRAPH
+ {0xCFDB, 0x7548}, //6874 #CJK UNIFIED IDEOGRAPH
+ {0xCFDC, 0x75A7}, //6875 #CJK UNIFIED IDEOGRAPH
+ {0xCFDD, 0x75AA}, //6876 #CJK UNIFIED IDEOGRAPH
+ {0xCFDE, 0x7679}, //6877 #CJK UNIFIED IDEOGRAPH
+ {0xCFDF, 0x76C4}, //6878 #CJK UNIFIED IDEOGRAPH
+ {0xCFE0, 0x7708}, //6879 #CJK UNIFIED IDEOGRAPH
+ {0xCFE1, 0x7703}, //6880 #CJK UNIFIED IDEOGRAPH
+ {0xCFE2, 0x7704}, //6881 #CJK UNIFIED IDEOGRAPH
+ {0xCFE3, 0x7705}, //6882 #CJK UNIFIED IDEOGRAPH
+ {0xCFE4, 0x770A}, //6883 #CJK UNIFIED IDEOGRAPH
+ {0xCFE5, 0x76F7}, //6884 #CJK UNIFIED IDEOGRAPH
+ {0xCFE6, 0x76FB}, //6885 #CJK UNIFIED IDEOGRAPH
+ {0xCFE7, 0x76FA}, //6886 #CJK UNIFIED IDEOGRAPH
+ {0xCFE8, 0x77E7}, //6887 #CJK UNIFIED IDEOGRAPH
+ {0xCFE9, 0x77E8}, //6888 #CJK UNIFIED IDEOGRAPH
+ {0xCFEA, 0x7806}, //6889 #CJK UNIFIED IDEOGRAPH
+ {0xCFEB, 0x7811}, //6890 #CJK UNIFIED IDEOGRAPH
+ {0xCFEC, 0x7812}, //6891 #CJK UNIFIED IDEOGRAPH
+ {0xCFED, 0x7805}, //6892 #CJK UNIFIED IDEOGRAPH
+ {0xCFEE, 0x7810}, //6893 #CJK UNIFIED IDEOGRAPH
+ {0xCFEF, 0x780F}, //6894 #CJK UNIFIED IDEOGRAPH
+ {0xCFF0, 0x780E}, //6895 #CJK UNIFIED IDEOGRAPH
+ {0xCFF1, 0x7809}, //6896 #CJK UNIFIED IDEOGRAPH
+ {0xCFF2, 0x7803}, //6897 #CJK UNIFIED IDEOGRAPH
+ {0xCFF3, 0x7813}, //6898 #CJK UNIFIED IDEOGRAPH
+ {0xCFF4, 0x794A}, //6899 #CJK UNIFIED IDEOGRAPH
+ {0xCFF5, 0x794C}, //6900 #CJK UNIFIED IDEOGRAPH
+ {0xCFF6, 0x794B}, //6901 #CJK UNIFIED IDEOGRAPH
+ {0xCFF7, 0x7945}, //6902 #CJK UNIFIED IDEOGRAPH
+ {0xCFF8, 0x7944}, //6903 #CJK UNIFIED IDEOGRAPH
+ {0xCFF9, 0x79D5}, //6904 #CJK UNIFIED IDEOGRAPH
+ {0xCFFA, 0x79CD}, //6905 #CJK UNIFIED IDEOGRAPH
+ {0xCFFB, 0x79CF}, //6906 #CJK UNIFIED IDEOGRAPH
+ {0xCFFC, 0x79D6}, //6907 #CJK UNIFIED IDEOGRAPH
+ {0xCFFD, 0x79CE}, //6908 #CJK UNIFIED IDEOGRAPH
+ {0xCFFE, 0x7A80}, //6909 #CJK UNIFIED IDEOGRAPH
+ {0xD040, 0x7A7E}, //6910 #CJK UNIFIED IDEOGRAPH
+ {0xD041, 0x7AD1}, //6911 #CJK UNIFIED IDEOGRAPH
+ {0xD042, 0x7B00}, //6912 #CJK UNIFIED IDEOGRAPH
+ {0xD043, 0x7B01}, //6913 #CJK UNIFIED IDEOGRAPH
+ {0xD044, 0x7C7A}, //6914 #CJK UNIFIED IDEOGRAPH
+ {0xD045, 0x7C78}, //6915 #CJK UNIFIED IDEOGRAPH
+ {0xD046, 0x7C79}, //6916 #CJK UNIFIED IDEOGRAPH
+ {0xD047, 0x7C7F}, //6917 #CJK UNIFIED IDEOGRAPH
+ {0xD048, 0x7C80}, //6918 #CJK UNIFIED IDEOGRAPH
+ {0xD049, 0x7C81}, //6919 #CJK UNIFIED IDEOGRAPH
+ {0xD04A, 0x7D03}, //6920 #CJK UNIFIED IDEOGRAPH
+ {0xD04B, 0x7D08}, //6921 #CJK UNIFIED IDEOGRAPH
+ {0xD04C, 0x7D01}, //6922 #CJK UNIFIED IDEOGRAPH
+ {0xD04D, 0x7F58}, //6923 #CJK UNIFIED IDEOGRAPH
+ {0xD04E, 0x7F91}, //6924 #CJK UNIFIED IDEOGRAPH
+ {0xD04F, 0x7F8D}, //6925 #CJK UNIFIED IDEOGRAPH
+ {0xD050, 0x7FBE}, //6926 #CJK UNIFIED IDEOGRAPH
+ {0xD051, 0x8007}, //6927 #CJK UNIFIED IDEOGRAPH
+ {0xD052, 0x800E}, //6928 #CJK UNIFIED IDEOGRAPH
+ {0xD053, 0x800F}, //6929 #CJK UNIFIED IDEOGRAPH
+ {0xD054, 0x8014}, //6930 #CJK UNIFIED IDEOGRAPH
+ {0xD055, 0x8037}, //6931 #CJK UNIFIED IDEOGRAPH
+ {0xD056, 0x80D8}, //6932 #CJK UNIFIED IDEOGRAPH
+ {0xD057, 0x80C7}, //6933 #CJK UNIFIED IDEOGRAPH
+ {0xD058, 0x80E0}, //6934 #CJK UNIFIED IDEOGRAPH
+ {0xD059, 0x80D1}, //6935 #CJK UNIFIED IDEOGRAPH
+ {0xD05A, 0x80C8}, //6936 #CJK UNIFIED IDEOGRAPH
+ {0xD05B, 0x80C2}, //6937 #CJK UNIFIED IDEOGRAPH
+ {0xD05C, 0x80D0}, //6938 #CJK UNIFIED IDEOGRAPH
+ {0xD05D, 0x80C5}, //6939 #CJK UNIFIED IDEOGRAPH
+ {0xD05E, 0x80E3}, //6940 #CJK UNIFIED IDEOGRAPH
+ {0xD05F, 0x80D9}, //6941 #CJK UNIFIED IDEOGRAPH
+ {0xD060, 0x80DC}, //6942 #CJK UNIFIED IDEOGRAPH
+ {0xD061, 0x80CA}, //6943 #CJK UNIFIED IDEOGRAPH
+ {0xD062, 0x80D5}, //6944 #CJK UNIFIED IDEOGRAPH
+ {0xD063, 0x80C9}, //6945 #CJK UNIFIED IDEOGRAPH
+ {0xD064, 0x80CF}, //6946 #CJK UNIFIED IDEOGRAPH
+ {0xD065, 0x80D7}, //6947 #CJK UNIFIED IDEOGRAPH
+ {0xD066, 0x80E6}, //6948 #CJK UNIFIED IDEOGRAPH
+ {0xD067, 0x80CD}, //6949 #CJK UNIFIED IDEOGRAPH
+ {0xD068, 0x81FF}, //6950 #CJK UNIFIED IDEOGRAPH
+ {0xD069, 0x8221}, //6951 #CJK UNIFIED IDEOGRAPH
+ {0xD06A, 0x8294}, //6952 #CJK UNIFIED IDEOGRAPH
+ {0xD06B, 0x82D9}, //6953 #CJK UNIFIED IDEOGRAPH
+ {0xD06C, 0x82FE}, //6954 #CJK UNIFIED IDEOGRAPH
+ {0xD06D, 0x82F9}, //6955 #CJK UNIFIED IDEOGRAPH
+ {0xD06E, 0x8307}, //6956 #CJK UNIFIED IDEOGRAPH
+ {0xD06F, 0x82E8}, //6957 #CJK UNIFIED IDEOGRAPH
+ {0xD070, 0x8300}, //6958 #CJK UNIFIED IDEOGRAPH
+ {0xD071, 0x82D5}, //6959 #CJK UNIFIED IDEOGRAPH
+ {0xD072, 0x833A}, //6960 #CJK UNIFIED IDEOGRAPH
+ {0xD073, 0x82EB}, //6961 #CJK UNIFIED IDEOGRAPH
+ {0xD074, 0x82D6}, //6962 #CJK UNIFIED IDEOGRAPH
+ {0xD075, 0x82F4}, //6963 #CJK UNIFIED IDEOGRAPH
+ {0xD076, 0x82EC}, //6964 #CJK UNIFIED IDEOGRAPH
+ {0xD077, 0x82E1}, //6965 #CJK UNIFIED IDEOGRAPH
+ {0xD078, 0x82F2}, //6966 #CJK UNIFIED IDEOGRAPH
+ {0xD079, 0x82F5}, //6967 #CJK UNIFIED IDEOGRAPH
+ {0xD07A, 0x830C}, //6968 #CJK UNIFIED IDEOGRAPH
+ {0xD07B, 0x82FB}, //6969 #CJK UNIFIED IDEOGRAPH
+ {0xD07C, 0x82F6}, //6970 #CJK UNIFIED IDEOGRAPH
+ {0xD07D, 0x82F0}, //6971 #CJK UNIFIED IDEOGRAPH
+ {0xD07E, 0x82EA}, //6972 #CJK UNIFIED IDEOGRAPH
+ {0xD0A1, 0x82E4}, //6973 #CJK UNIFIED IDEOGRAPH
+ {0xD0A2, 0x82E0}, //6974 #CJK UNIFIED IDEOGRAPH
+ {0xD0A3, 0x82FA}, //6975 #CJK UNIFIED IDEOGRAPH
+ {0xD0A4, 0x82F3}, //6976 #CJK UNIFIED IDEOGRAPH
+ {0xD0A5, 0x82ED}, //6977 #CJK UNIFIED IDEOGRAPH
+ {0xD0A6, 0x8677}, //6978 #CJK UNIFIED IDEOGRAPH
+ {0xD0A7, 0x8674}, //6979 #CJK UNIFIED IDEOGRAPH
+ {0xD0A8, 0x867C}, //6980 #CJK UNIFIED IDEOGRAPH
+ {0xD0A9, 0x8673}, //6981 #CJK UNIFIED IDEOGRAPH
+ {0xD0AA, 0x8841}, //6982 #CJK UNIFIED IDEOGRAPH
+ {0xD0AB, 0x884E}, //6983 #CJK UNIFIED IDEOGRAPH
+ {0xD0AC, 0x8867}, //6984 #CJK UNIFIED IDEOGRAPH
+ {0xD0AD, 0x886A}, //6985 #CJK UNIFIED IDEOGRAPH
+ {0xD0AE, 0x8869}, //6986 #CJK UNIFIED IDEOGRAPH
+ {0xD0AF, 0x89D3}, //6987 #CJK UNIFIED IDEOGRAPH
+ {0xD0B0, 0x8A04}, //6988 #CJK UNIFIED IDEOGRAPH
+ {0xD0B1, 0x8A07}, //6989 #CJK UNIFIED IDEOGRAPH
+ {0xD0B2, 0x8D72}, //6990 #CJK UNIFIED IDEOGRAPH
+ {0xD0B3, 0x8FE3}, //6991 #CJK UNIFIED IDEOGRAPH
+ {0xD0B4, 0x8FE1}, //6992 #CJK UNIFIED IDEOGRAPH
+ {0xD0B5, 0x8FEE}, //6993 #CJK UNIFIED IDEOGRAPH
+ {0xD0B6, 0x8FE0}, //6994 #CJK UNIFIED IDEOGRAPH
+ {0xD0B7, 0x90F1}, //6995 #CJK UNIFIED IDEOGRAPH
+ {0xD0B8, 0x90BD}, //6996 #CJK UNIFIED IDEOGRAPH
+ {0xD0B9, 0x90BF}, //6997 #CJK UNIFIED IDEOGRAPH
+ {0xD0BA, 0x90D5}, //6998 #CJK UNIFIED IDEOGRAPH
+ {0xD0BB, 0x90C5}, //6999 #CJK UNIFIED IDEOGRAPH
+ {0xD0BC, 0x90BE}, //7000 #CJK UNIFIED IDEOGRAPH
+ {0xD0BD, 0x90C7}, //7001 #CJK UNIFIED IDEOGRAPH
+ {0xD0BE, 0x90CB}, //7002 #CJK UNIFIED IDEOGRAPH
+ {0xD0BF, 0x90C8}, //7003 #CJK UNIFIED IDEOGRAPH
+ {0xD0C0, 0x91D4}, //7004 #CJK UNIFIED IDEOGRAPH
+ {0xD0C1, 0x91D3}, //7005 #CJK UNIFIED IDEOGRAPH
+ {0xD0C2, 0x9654}, //7006 #CJK UNIFIED IDEOGRAPH
+ {0xD0C3, 0x964F}, //7007 #CJK UNIFIED IDEOGRAPH
+ {0xD0C4, 0x9651}, //7008 #CJK UNIFIED IDEOGRAPH
+ {0xD0C5, 0x9653}, //7009 #CJK UNIFIED IDEOGRAPH
+ {0xD0C6, 0x964A}, //7010 #CJK UNIFIED IDEOGRAPH
+ {0xD0C7, 0x964E}, //7011 #CJK UNIFIED IDEOGRAPH
+ {0xD0C8, 0x501E}, //7012 #CJK UNIFIED IDEOGRAPH
+ {0xD0C9, 0x5005}, //7013 #CJK UNIFIED IDEOGRAPH
+ {0xD0CA, 0x5007}, //7014 #CJK UNIFIED IDEOGRAPH
+ {0xD0CB, 0x5013}, //7015 #CJK UNIFIED IDEOGRAPH
+ {0xD0CC, 0x5022}, //7016 #CJK UNIFIED IDEOGRAPH
+ {0xD0CD, 0x5030}, //7017 #CJK UNIFIED IDEOGRAPH
+ {0xD0CE, 0x501B}, //7018 #CJK UNIFIED IDEOGRAPH
+ {0xD0CF, 0x4FF5}, //7019 #CJK UNIFIED IDEOGRAPH
+ {0xD0D0, 0x4FF4}, //7020 #CJK UNIFIED IDEOGRAPH
+ {0xD0D1, 0x5033}, //7021 #CJK UNIFIED IDEOGRAPH
+ {0xD0D2, 0x5037}, //7022 #CJK UNIFIED IDEOGRAPH
+ {0xD0D3, 0x502C}, //7023 #CJK UNIFIED IDEOGRAPH
+ {0xD0D4, 0x4FF6}, //7024 #CJK UNIFIED IDEOGRAPH
+ {0xD0D5, 0x4FF7}, //7025 #CJK UNIFIED IDEOGRAPH
+ {0xD0D6, 0x5017}, //7026 #CJK UNIFIED IDEOGRAPH
+ {0xD0D7, 0x501C}, //7027 #CJK UNIFIED IDEOGRAPH
+ {0xD0D8, 0x5020}, //7028 #CJK UNIFIED IDEOGRAPH
+ {0xD0D9, 0x5027}, //7029 #CJK UNIFIED IDEOGRAPH
+ {0xD0DA, 0x5035}, //7030 #CJK UNIFIED IDEOGRAPH
+ {0xD0DB, 0x502F}, //7031 #CJK UNIFIED IDEOGRAPH
+ {0xD0DC, 0x5031}, //7032 #CJK UNIFIED IDEOGRAPH
+ {0xD0DD, 0x500E}, //7033 #CJK UNIFIED IDEOGRAPH
+ {0xD0DE, 0x515A}, //7034 #CJK UNIFIED IDEOGRAPH
+ {0xD0DF, 0x5194}, //7035 #CJK UNIFIED IDEOGRAPH
+ {0xD0E0, 0x5193}, //7036 #CJK UNIFIED IDEOGRAPH
+ {0xD0E1, 0x51CA}, //7037 #CJK UNIFIED IDEOGRAPH
+ {0xD0E2, 0x51C4}, //7038 #CJK UNIFIED IDEOGRAPH
+ {0xD0E3, 0x51C5}, //7039 #CJK UNIFIED IDEOGRAPH
+ {0xD0E4, 0x51C8}, //7040 #CJK UNIFIED IDEOGRAPH
+ {0xD0E5, 0x51CE}, //7041 #CJK UNIFIED IDEOGRAPH
+ {0xD0E6, 0x5261}, //7042 #CJK UNIFIED IDEOGRAPH
+ {0xD0E7, 0x525A}, //7043 #CJK UNIFIED IDEOGRAPH
+ {0xD0E8, 0x5252}, //7044 #CJK UNIFIED IDEOGRAPH
+ {0xD0E9, 0x525E}, //7045 #CJK UNIFIED IDEOGRAPH
+ {0xD0EA, 0x525F}, //7046 #CJK UNIFIED IDEOGRAPH
+ {0xD0EB, 0x5255}, //7047 #CJK UNIFIED IDEOGRAPH
+ {0xD0EC, 0x5262}, //7048 #CJK UNIFIED IDEOGRAPH
+ {0xD0ED, 0x52CD}, //7049 #CJK UNIFIED IDEOGRAPH
+ {0xD0EE, 0x530E}, //7050 #CJK UNIFIED IDEOGRAPH
+ {0xD0EF, 0x539E}, //7051 #CJK UNIFIED IDEOGRAPH
+ {0xD0F0, 0x5526}, //7052 #CJK UNIFIED IDEOGRAPH
+ {0xD0F1, 0x54E2}, //7053 #CJK UNIFIED IDEOGRAPH
+ {0xD0F2, 0x5517}, //7054 #CJK UNIFIED IDEOGRAPH
+ {0xD0F3, 0x5512}, //7055 #CJK UNIFIED IDEOGRAPH
+ {0xD0F4, 0x54E7}, //7056 #CJK UNIFIED IDEOGRAPH
+ {0xD0F5, 0x54F3}, //7057 #CJK UNIFIED IDEOGRAPH
+ {0xD0F6, 0x54E4}, //7058 #CJK UNIFIED IDEOGRAPH
+ {0xD0F7, 0x551A}, //7059 #CJK UNIFIED IDEOGRAPH
+ {0xD0F8, 0x54FF}, //7060 #CJK UNIFIED IDEOGRAPH
+ {0xD0F9, 0x5504}, //7061 #CJK UNIFIED IDEOGRAPH
+ {0xD0FA, 0x5508}, //7062 #CJK UNIFIED IDEOGRAPH
+ {0xD0FB, 0x54EB}, //7063 #CJK UNIFIED IDEOGRAPH
+ {0xD0FC, 0x5511}, //7064 #CJK UNIFIED IDEOGRAPH
+ {0xD0FD, 0x5505}, //7065 #CJK UNIFIED IDEOGRAPH
+ {0xD0FE, 0x54F1}, //7066 #CJK UNIFIED IDEOGRAPH
+ {0xD140, 0x550A}, //7067 #CJK UNIFIED IDEOGRAPH
+ {0xD141, 0x54FB}, //7068 #CJK UNIFIED IDEOGRAPH
+ {0xD142, 0x54F7}, //7069 #CJK UNIFIED IDEOGRAPH
+ {0xD143, 0x54F8}, //7070 #CJK UNIFIED IDEOGRAPH
+ {0xD144, 0x54E0}, //7071 #CJK UNIFIED IDEOGRAPH
+ {0xD145, 0x550E}, //7072 #CJK UNIFIED IDEOGRAPH
+ {0xD146, 0x5503}, //7073 #CJK UNIFIED IDEOGRAPH
+ {0xD147, 0x550B}, //7074 #CJK UNIFIED IDEOGRAPH
+ {0xD148, 0x5701}, //7075 #CJK UNIFIED IDEOGRAPH
+ {0xD149, 0x5702}, //7076 #CJK UNIFIED IDEOGRAPH
+ {0xD14A, 0x57CC}, //7077 #CJK UNIFIED IDEOGRAPH
+ {0xD14B, 0x5832}, //7078 #CJK UNIFIED IDEOGRAPH
+ {0xD14C, 0x57D5}, //7079 #CJK UNIFIED IDEOGRAPH
+ {0xD14D, 0x57D2}, //7080 #CJK UNIFIED IDEOGRAPH
+ {0xD14E, 0x57BA}, //7081 #CJK UNIFIED IDEOGRAPH
+ {0xD14F, 0x57C6}, //7082 #CJK UNIFIED IDEOGRAPH
+ {0xD150, 0x57BD}, //7083 #CJK UNIFIED IDEOGRAPH
+ {0xD151, 0x57BC}, //7084 #CJK UNIFIED IDEOGRAPH
+ {0xD152, 0x57B8}, //7085 #CJK UNIFIED IDEOGRAPH
+ {0xD153, 0x57B6}, //7086 #CJK UNIFIED IDEOGRAPH
+ {0xD154, 0x57BF}, //7087 #CJK UNIFIED IDEOGRAPH
+ {0xD155, 0x57C7}, //7088 #CJK UNIFIED IDEOGRAPH
+ {0xD156, 0x57D0}, //7089 #CJK UNIFIED IDEOGRAPH
+ {0xD157, 0x57B9}, //7090 #CJK UNIFIED IDEOGRAPH
+ {0xD158, 0x57C1}, //7091 #CJK UNIFIED IDEOGRAPH
+ {0xD159, 0x590E}, //7092 #CJK UNIFIED IDEOGRAPH
+ {0xD15A, 0x594A}, //7093 #CJK UNIFIED IDEOGRAPH
+ {0xD15B, 0x5A19}, //7094 #CJK UNIFIED IDEOGRAPH
+ {0xD15C, 0x5A16}, //7095 #CJK UNIFIED IDEOGRAPH
+ {0xD15D, 0x5A2D}, //7096 #CJK UNIFIED IDEOGRAPH
+ {0xD15E, 0x5A2E}, //7097 #CJK UNIFIED IDEOGRAPH
+ {0xD15F, 0x5A15}, //7098 #CJK UNIFIED IDEOGRAPH
+ {0xD160, 0x5A0F}, //7099 #CJK UNIFIED IDEOGRAPH
+ {0xD161, 0x5A17}, //7100 #CJK UNIFIED IDEOGRAPH
+ {0xD162, 0x5A0A}, //7101 #CJK UNIFIED IDEOGRAPH
+ {0xD163, 0x5A1E}, //7102 #CJK UNIFIED IDEOGRAPH
+ {0xD164, 0x5A33}, //7103 #CJK UNIFIED IDEOGRAPH
+ {0xD165, 0x5B6C}, //7104 #CJK UNIFIED IDEOGRAPH
+ {0xD166, 0x5BA7}, //7105 #CJK UNIFIED IDEOGRAPH
+ {0xD167, 0x5BAD}, //7106 #CJK UNIFIED IDEOGRAPH
+ {0xD168, 0x5BAC}, //7107 #CJK UNIFIED IDEOGRAPH
+ {0xD169, 0x5C03}, //7108 #CJK UNIFIED IDEOGRAPH
+ {0xD16A, 0x5C56}, //7109 #CJK UNIFIED IDEOGRAPH
+ {0xD16B, 0x5C54}, //7110 #CJK UNIFIED IDEOGRAPH
+ {0xD16C, 0x5CEC}, //7111 #CJK UNIFIED IDEOGRAPH
+ {0xD16D, 0x5CFF}, //7112 #CJK UNIFIED IDEOGRAPH
+ {0xD16E, 0x5CEE}, //7113 #CJK UNIFIED IDEOGRAPH
+ {0xD16F, 0x5CF1}, //7114 #CJK UNIFIED IDEOGRAPH
+ {0xD170, 0x5CF7}, //7115 #CJK UNIFIED IDEOGRAPH
+ {0xD171, 0x5D00}, //7116 #CJK UNIFIED IDEOGRAPH
+ {0xD172, 0x5CF9}, //7117 #CJK UNIFIED IDEOGRAPH
+ {0xD173, 0x5E29}, //7118 #CJK UNIFIED IDEOGRAPH
+ {0xD174, 0x5E28}, //7119 #CJK UNIFIED IDEOGRAPH
+ {0xD175, 0x5EA8}, //7120 #CJK UNIFIED IDEOGRAPH
+ {0xD176, 0x5EAE}, //7121 #CJK UNIFIED IDEOGRAPH
+ {0xD177, 0x5EAA}, //7122 #CJK UNIFIED IDEOGRAPH
+ {0xD178, 0x5EAC}, //7123 #CJK UNIFIED IDEOGRAPH
+ {0xD179, 0x5F33}, //7124 #CJK UNIFIED IDEOGRAPH
+ {0xD17A, 0x5F30}, //7125 #CJK UNIFIED IDEOGRAPH
+ {0xD17B, 0x5F67}, //7126 #CJK UNIFIED IDEOGRAPH
+ {0xD17C, 0x605D}, //7127 #CJK UNIFIED IDEOGRAPH
+ {0xD17D, 0x605A}, //7128 #CJK UNIFIED IDEOGRAPH
+ {0xD17E, 0x6067}, //7129 #CJK UNIFIED IDEOGRAPH
+ {0xD1A1, 0x6041}, //7130 #CJK UNIFIED IDEOGRAPH
+ {0xD1A2, 0x60A2}, //7131 #CJK UNIFIED IDEOGRAPH
+ {0xD1A3, 0x6088}, //7132 #CJK UNIFIED IDEOGRAPH
+ {0xD1A4, 0x6080}, //7133 #CJK UNIFIED IDEOGRAPH
+ {0xD1A5, 0x6092}, //7134 #CJK UNIFIED IDEOGRAPH
+ {0xD1A6, 0x6081}, //7135 #CJK UNIFIED IDEOGRAPH
+ {0xD1A7, 0x609D}, //7136 #CJK UNIFIED IDEOGRAPH
+ {0xD1A8, 0x6083}, //7137 #CJK UNIFIED IDEOGRAPH
+ {0xD1A9, 0x6095}, //7138 #CJK UNIFIED IDEOGRAPH
+ {0xD1AA, 0x609B}, //7139 #CJK UNIFIED IDEOGRAPH
+ {0xD1AB, 0x6097}, //7140 #CJK UNIFIED IDEOGRAPH
+ {0xD1AC, 0x6087}, //7141 #CJK UNIFIED IDEOGRAPH
+ {0xD1AD, 0x609C}, //7142 #CJK UNIFIED IDEOGRAPH
+ {0xD1AE, 0x608E}, //7143 #CJK UNIFIED IDEOGRAPH
+ {0xD1AF, 0x6219}, //7144 #CJK UNIFIED IDEOGRAPH
+ {0xD1B0, 0x6246}, //7145 #CJK UNIFIED IDEOGRAPH
+ {0xD1B1, 0x62F2}, //7146 #CJK UNIFIED IDEOGRAPH
+ {0xD1B2, 0x6310}, //7147 #CJK UNIFIED IDEOGRAPH
+ {0xD1B3, 0x6356}, //7148 #CJK UNIFIED IDEOGRAPH
+ {0xD1B4, 0x632C}, //7149 #CJK UNIFIED IDEOGRAPH
+ {0xD1B5, 0x6344}, //7150 #CJK UNIFIED IDEOGRAPH
+ {0xD1B6, 0x6345}, //7151 #CJK UNIFIED IDEOGRAPH
+ {0xD1B7, 0x6336}, //7152 #CJK UNIFIED IDEOGRAPH
+ {0xD1B8, 0x6343}, //7153 #CJK UNIFIED IDEOGRAPH
+ {0xD1B9, 0x63E4}, //7154 #CJK UNIFIED IDEOGRAPH
+ {0xD1BA, 0x6339}, //7155 #CJK UNIFIED IDEOGRAPH
+ {0xD1BB, 0x634B}, //7156 #CJK UNIFIED IDEOGRAPH
+ {0xD1BC, 0x634A}, //7157 #CJK UNIFIED IDEOGRAPH
+ {0xD1BD, 0x633C}, //7158 #CJK UNIFIED IDEOGRAPH
+ {0xD1BE, 0x6329}, //7159 #CJK UNIFIED IDEOGRAPH
+ {0xD1BF, 0x6341}, //7160 #CJK UNIFIED IDEOGRAPH
+ {0xD1C0, 0x6334}, //7161 #CJK UNIFIED IDEOGRAPH
+ {0xD1C1, 0x6358}, //7162 #CJK UNIFIED IDEOGRAPH
+ {0xD1C2, 0x6354}, //7163 #CJK UNIFIED IDEOGRAPH
+ {0xD1C3, 0x6359}, //7164 #CJK UNIFIED IDEOGRAPH
+ {0xD1C4, 0x632D}, //7165 #CJK UNIFIED IDEOGRAPH
+ {0xD1C5, 0x6347}, //7166 #CJK UNIFIED IDEOGRAPH
+ {0xD1C6, 0x6333}, //7167 #CJK UNIFIED IDEOGRAPH
+ {0xD1C7, 0x635A}, //7168 #CJK UNIFIED IDEOGRAPH
+ {0xD1C8, 0x6351}, //7169 #CJK UNIFIED IDEOGRAPH
+ {0xD1C9, 0x6338}, //7170 #CJK UNIFIED IDEOGRAPH
+ {0xD1CA, 0x6357}, //7171 #CJK UNIFIED IDEOGRAPH
+ {0xD1CB, 0x6340}, //7172 #CJK UNIFIED IDEOGRAPH
+ {0xD1CC, 0x6348}, //7173 #CJK UNIFIED IDEOGRAPH
+ {0xD1CD, 0x654A}, //7174 #CJK UNIFIED IDEOGRAPH
+ {0xD1CE, 0x6546}, //7175 #CJK UNIFIED IDEOGRAPH
+ {0xD1CF, 0x65C6}, //7176 #CJK UNIFIED IDEOGRAPH
+ {0xD1D0, 0x65C3}, //7177 #CJK UNIFIED IDEOGRAPH
+ {0xD1D1, 0x65C4}, //7178 #CJK UNIFIED IDEOGRAPH
+ {0xD1D2, 0x65C2}, //7179 #CJK UNIFIED IDEOGRAPH
+ {0xD1D3, 0x664A}, //7180 #CJK UNIFIED IDEOGRAPH
+ {0xD1D4, 0x665F}, //7181 #CJK UNIFIED IDEOGRAPH
+ {0xD1D5, 0x6647}, //7182 #CJK UNIFIED IDEOGRAPH
+ {0xD1D6, 0x6651}, //7183 #CJK UNIFIED IDEOGRAPH
+ {0xD1D7, 0x6712}, //7184 #CJK UNIFIED IDEOGRAPH
+ {0xD1D8, 0x6713}, //7185 #CJK UNIFIED IDEOGRAPH
+ {0xD1D9, 0x681F}, //7186 #CJK UNIFIED IDEOGRAPH
+ {0xD1DA, 0x681A}, //7187 #CJK UNIFIED IDEOGRAPH
+ {0xD1DB, 0x6849}, //7188 #CJK UNIFIED IDEOGRAPH
+ {0xD1DC, 0x6832}, //7189 #CJK UNIFIED IDEOGRAPH
+ {0xD1DD, 0x6833}, //7190 #CJK UNIFIED IDEOGRAPH
+ {0xD1DE, 0x683B}, //7191 #CJK UNIFIED IDEOGRAPH
+ {0xD1DF, 0x684B}, //7192 #CJK UNIFIED IDEOGRAPH
+ {0xD1E0, 0x684F}, //7193 #CJK UNIFIED IDEOGRAPH
+ {0xD1E1, 0x6816}, //7194 #CJK UNIFIED IDEOGRAPH
+ {0xD1E2, 0x6831}, //7195 #CJK UNIFIED IDEOGRAPH
+ {0xD1E3, 0x681C}, //7196 #CJK UNIFIED IDEOGRAPH
+ {0xD1E4, 0x6835}, //7197 #CJK UNIFIED IDEOGRAPH
+ {0xD1E5, 0x682B}, //7198 #CJK UNIFIED IDEOGRAPH
+ {0xD1E6, 0x682D}, //7199 #CJK UNIFIED IDEOGRAPH
+ {0xD1E7, 0x682F}, //7200 #CJK UNIFIED IDEOGRAPH
+ {0xD1E8, 0x684E}, //7201 #CJK UNIFIED IDEOGRAPH
+ {0xD1E9, 0x6844}, //7202 #CJK UNIFIED IDEOGRAPH
+ {0xD1EA, 0x6834}, //7203 #CJK UNIFIED IDEOGRAPH
+ {0xD1EB, 0x681D}, //7204 #CJK UNIFIED IDEOGRAPH
+ {0xD1EC, 0x6812}, //7205 #CJK UNIFIED IDEOGRAPH
+ {0xD1ED, 0x6814}, //7206 #CJK UNIFIED IDEOGRAPH
+ {0xD1EE, 0x6826}, //7207 #CJK UNIFIED IDEOGRAPH
+ {0xD1EF, 0x6828}, //7208 #CJK UNIFIED IDEOGRAPH
+ {0xD1F0, 0x682E}, //7209 #CJK UNIFIED IDEOGRAPH
+ {0xD1F1, 0x684D}, //7210 #CJK UNIFIED IDEOGRAPH
+ {0xD1F2, 0x683A}, //7211 #CJK UNIFIED IDEOGRAPH
+ {0xD1F3, 0x6825}, //7212 #CJK UNIFIED IDEOGRAPH
+ {0xD1F4, 0x6820}, //7213 #CJK UNIFIED IDEOGRAPH
+ {0xD1F5, 0x6B2C}, //7214 #CJK UNIFIED IDEOGRAPH
+ {0xD1F6, 0x6B2F}, //7215 #CJK UNIFIED IDEOGRAPH
+ {0xD1F7, 0x6B2D}, //7216 #CJK UNIFIED IDEOGRAPH
+ {0xD1F8, 0x6B31}, //7217 #CJK UNIFIED IDEOGRAPH
+ {0xD1F9, 0x6B34}, //7218 #CJK UNIFIED IDEOGRAPH
+ {0xD1FA, 0x6B6D}, //7219 #CJK UNIFIED IDEOGRAPH
+ {0xD1FB, 0x8082}, //7220 #CJK UNIFIED IDEOGRAPH
+ {0xD1FC, 0x6B88}, //7221 #CJK UNIFIED IDEOGRAPH
+ {0xD1FD, 0x6BE6}, //7222 #CJK UNIFIED IDEOGRAPH
+ {0xD1FE, 0x6BE4}, //7223 #CJK UNIFIED IDEOGRAPH
+ {0xD240, 0x6BE8}, //7224 #CJK UNIFIED IDEOGRAPH
+ {0xD241, 0x6BE3}, //7225 #CJK UNIFIED IDEOGRAPH
+ {0xD242, 0x6BE2}, //7226 #CJK UNIFIED IDEOGRAPH
+ {0xD243, 0x6BE7}, //7227 #CJK UNIFIED IDEOGRAPH
+ {0xD244, 0x6C25}, //7228 #CJK UNIFIED IDEOGRAPH
+ {0xD245, 0x6D7A}, //7229 #CJK UNIFIED IDEOGRAPH
+ {0xD246, 0x6D63}, //7230 #CJK UNIFIED IDEOGRAPH
+ {0xD247, 0x6D64}, //7231 #CJK UNIFIED IDEOGRAPH
+ {0xD248, 0x6D76}, //7232 #CJK UNIFIED IDEOGRAPH
+ {0xD249, 0x6D0D}, //7233 #CJK UNIFIED IDEOGRAPH
+ {0xD24A, 0x6D61}, //7234 #CJK UNIFIED IDEOGRAPH
+ {0xD24B, 0x6D92}, //7235 #CJK UNIFIED IDEOGRAPH
+ {0xD24C, 0x6D58}, //7236 #CJK UNIFIED IDEOGRAPH
+ {0xD24D, 0x6D62}, //7237 #CJK UNIFIED IDEOGRAPH
+ {0xD24E, 0x6D6D}, //7238 #CJK UNIFIED IDEOGRAPH
+ {0xD24F, 0x6D6F}, //7239 #CJK UNIFIED IDEOGRAPH
+ {0xD250, 0x6D91}, //7240 #CJK UNIFIED IDEOGRAPH
+ {0xD251, 0x6D8D}, //7241 #CJK UNIFIED IDEOGRAPH
+ {0xD252, 0x6DEF}, //7242 #CJK UNIFIED IDEOGRAPH
+ {0xD253, 0x6D7F}, //7243 #CJK UNIFIED IDEOGRAPH
+ {0xD254, 0x6D86}, //7244 #CJK UNIFIED IDEOGRAPH
+ {0xD255, 0x6D5E}, //7245 #CJK UNIFIED IDEOGRAPH
+ {0xD256, 0x6D67}, //7246 #CJK UNIFIED IDEOGRAPH
+ {0xD257, 0x6D60}, //7247 #CJK UNIFIED IDEOGRAPH
+ {0xD258, 0x6D97}, //7248 #CJK UNIFIED IDEOGRAPH
+ {0xD259, 0x6D70}, //7249 #CJK UNIFIED IDEOGRAPH
+ {0xD25A, 0x6D7C}, //7250 #CJK UNIFIED IDEOGRAPH
+ {0xD25B, 0x6D5F}, //7251 #CJK UNIFIED IDEOGRAPH
+ {0xD25C, 0x6D82}, //7252 #CJK UNIFIED IDEOGRAPH
+ {0xD25D, 0x6D98}, //7253 #CJK UNIFIED IDEOGRAPH
+ {0xD25E, 0x6D2F}, //7254 #CJK UNIFIED IDEOGRAPH
+ {0xD25F, 0x6D68}, //7255 #CJK UNIFIED IDEOGRAPH
+ {0xD260, 0x6D8B}, //7256 #CJK UNIFIED IDEOGRAPH
+ {0xD261, 0x6D7E}, //7257 #CJK UNIFIED IDEOGRAPH
+ {0xD262, 0x6D80}, //7258 #CJK UNIFIED IDEOGRAPH
+ {0xD263, 0x6D84}, //7259 #CJK UNIFIED IDEOGRAPH
+ {0xD264, 0x6D16}, //7260 #CJK UNIFIED IDEOGRAPH
+ {0xD265, 0x6D83}, //7261 #CJK UNIFIED IDEOGRAPH
+ {0xD266, 0x6D7B}, //7262 #CJK UNIFIED IDEOGRAPH
+ {0xD267, 0x6D7D}, //7263 #CJK UNIFIED IDEOGRAPH
+ {0xD268, 0x6D75}, //7264 #CJK UNIFIED IDEOGRAPH
+ {0xD269, 0x6D90}, //7265 #CJK UNIFIED IDEOGRAPH
+ {0xD26A, 0x70DC}, //7266 #CJK UNIFIED IDEOGRAPH
+ {0xD26B, 0x70D3}, //7267 #CJK UNIFIED IDEOGRAPH
+ {0xD26C, 0x70D1}, //7268 #CJK UNIFIED IDEOGRAPH
+ {0xD26D, 0x70DD}, //7269 #CJK UNIFIED IDEOGRAPH
+ {0xD26E, 0x70CB}, //7270 #CJK UNIFIED IDEOGRAPH
+ {0xD26F, 0x7F39}, //7271 #CJK UNIFIED IDEOGRAPH
+ {0xD270, 0x70E2}, //7272 #CJK UNIFIED IDEOGRAPH
+ {0xD271, 0x70D7}, //7273 #CJK UNIFIED IDEOGRAPH
+ {0xD272, 0x70D2}, //7274 #CJK UNIFIED IDEOGRAPH
+ {0xD273, 0x70DE}, //7275 #CJK UNIFIED IDEOGRAPH
+ {0xD274, 0x70E0}, //7276 #CJK UNIFIED IDEOGRAPH
+ {0xD275, 0x70D4}, //7277 #CJK UNIFIED IDEOGRAPH
+ {0xD276, 0x70CD}, //7278 #CJK UNIFIED IDEOGRAPH
+ {0xD277, 0x70C5}, //7279 #CJK UNIFIED IDEOGRAPH
+ {0xD278, 0x70C6}, //7280 #CJK UNIFIED IDEOGRAPH
+ {0xD279, 0x70C7}, //7281 #CJK UNIFIED IDEOGRAPH
+ {0xD27A, 0x70DA}, //7282 #CJK UNIFIED IDEOGRAPH
+ {0xD27B, 0x70CE}, //7283 #CJK UNIFIED IDEOGRAPH
+ {0xD27C, 0x70E1}, //7284 #CJK UNIFIED IDEOGRAPH
+ {0xD27D, 0x7242}, //7285 #CJK UNIFIED IDEOGRAPH
+ {0xD27E, 0x7278}, //7286 #CJK UNIFIED IDEOGRAPH
+ {0xD2A1, 0x7277}, //7287 #CJK UNIFIED IDEOGRAPH
+ {0xD2A2, 0x7276}, //7288 #CJK UNIFIED IDEOGRAPH
+ {0xD2A3, 0x7300}, //7289 #CJK UNIFIED IDEOGRAPH
+ {0xD2A4, 0x72FA}, //7290 #CJK UNIFIED IDEOGRAPH
+ {0xD2A5, 0x72F4}, //7291 #CJK UNIFIED IDEOGRAPH
+ {0xD2A6, 0x72FE}, //7292 #CJK UNIFIED IDEOGRAPH
+ {0xD2A7, 0x72F6}, //7293 #CJK UNIFIED IDEOGRAPH
+ {0xD2A8, 0x72F3}, //7294 #CJK UNIFIED IDEOGRAPH
+ {0xD2A9, 0x72FB}, //7295 #CJK UNIFIED IDEOGRAPH
+ {0xD2AA, 0x7301}, //7296 #CJK UNIFIED IDEOGRAPH
+ {0xD2AB, 0x73D3}, //7297 #CJK UNIFIED IDEOGRAPH
+ {0xD2AC, 0x73D9}, //7298 #CJK UNIFIED IDEOGRAPH
+ {0xD2AD, 0x73E5}, //7299 #CJK UNIFIED IDEOGRAPH
+ {0xD2AE, 0x73D6}, //7300 #CJK UNIFIED IDEOGRAPH
+ {0xD2AF, 0x73BC}, //7301 #CJK UNIFIED IDEOGRAPH
+ {0xD2B0, 0x73E7}, //7302 #CJK UNIFIED IDEOGRAPH
+ {0xD2B1, 0x73E3}, //7303 #CJK UNIFIED IDEOGRAPH
+ {0xD2B2, 0x73E9}, //7304 #CJK UNIFIED IDEOGRAPH
+ {0xD2B3, 0x73DC}, //7305 #CJK UNIFIED IDEOGRAPH
+ {0xD2B4, 0x73D2}, //7306 #CJK UNIFIED IDEOGRAPH
+ {0xD2B5, 0x73DB}, //7307 #CJK UNIFIED IDEOGRAPH
+ {0xD2B6, 0x73D4}, //7308 #CJK UNIFIED IDEOGRAPH
+ {0xD2B7, 0x73DD}, //7309 #CJK UNIFIED IDEOGRAPH
+ {0xD2B8, 0x73DA}, //7310 #CJK UNIFIED IDEOGRAPH
+ {0xD2B9, 0x73D7}, //7311 #CJK UNIFIED IDEOGRAPH
+ {0xD2BA, 0x73D8}, //7312 #CJK UNIFIED IDEOGRAPH
+ {0xD2BB, 0x73E8}, //7313 #CJK UNIFIED IDEOGRAPH
+ {0xD2BC, 0x74DE}, //7314 #CJK UNIFIED IDEOGRAPH
+ {0xD2BD, 0x74DF}, //7315 #CJK UNIFIED IDEOGRAPH
+ {0xD2BE, 0x74F4}, //7316 #CJK UNIFIED IDEOGRAPH
+ {0xD2BF, 0x74F5}, //7317 #CJK UNIFIED IDEOGRAPH
+ {0xD2C0, 0x7521}, //7318 #CJK UNIFIED IDEOGRAPH
+ {0xD2C1, 0x755B}, //7319 #CJK UNIFIED IDEOGRAPH
+ {0xD2C2, 0x755F}, //7320 #CJK UNIFIED IDEOGRAPH
+ {0xD2C3, 0x75B0}, //7321 #CJK UNIFIED IDEOGRAPH
+ {0xD2C4, 0x75C1}, //7322 #CJK UNIFIED IDEOGRAPH
+ {0xD2C5, 0x75BB}, //7323 #CJK UNIFIED IDEOGRAPH
+ {0xD2C6, 0x75C4}, //7324 #CJK UNIFIED IDEOGRAPH
+ {0xD2C7, 0x75C0}, //7325 #CJK UNIFIED IDEOGRAPH
+ {0xD2C8, 0x75BF}, //7326 #CJK UNIFIED IDEOGRAPH
+ {0xD2C9, 0x75B6}, //7327 #CJK UNIFIED IDEOGRAPH
+ {0xD2CA, 0x75BA}, //7328 #CJK UNIFIED IDEOGRAPH
+ {0xD2CB, 0x768A}, //7329 #CJK UNIFIED IDEOGRAPH
+ {0xD2CC, 0x76C9}, //7330 #CJK UNIFIED IDEOGRAPH
+ {0xD2CD, 0x771D}, //7331 #CJK UNIFIED IDEOGRAPH
+ {0xD2CE, 0x771B}, //7332 #CJK UNIFIED IDEOGRAPH
+ {0xD2CF, 0x7710}, //7333 #CJK UNIFIED IDEOGRAPH
+ {0xD2D0, 0x7713}, //7334 #CJK UNIFIED IDEOGRAPH
+ {0xD2D1, 0x7712}, //7335 #CJK UNIFIED IDEOGRAPH
+ {0xD2D2, 0x7723}, //7336 #CJK UNIFIED IDEOGRAPH
+ {0xD2D3, 0x7711}, //7337 #CJK UNIFIED IDEOGRAPH
+ {0xD2D4, 0x7715}, //7338 #CJK UNIFIED IDEOGRAPH
+ {0xD2D5, 0x7719}, //7339 #CJK UNIFIED IDEOGRAPH
+ {0xD2D6, 0x771A}, //7340 #CJK UNIFIED IDEOGRAPH
+ {0xD2D7, 0x7722}, //7341 #CJK UNIFIED IDEOGRAPH
+ {0xD2D8, 0x7727}, //7342 #CJK UNIFIED IDEOGRAPH
+ {0xD2D9, 0x7823}, //7343 #CJK UNIFIED IDEOGRAPH
+ {0xD2DA, 0x782C}, //7344 #CJK UNIFIED IDEOGRAPH
+ {0xD2DB, 0x7822}, //7345 #CJK UNIFIED IDEOGRAPH
+ {0xD2DC, 0x7835}, //7346 #CJK UNIFIED IDEOGRAPH
+ {0xD2DD, 0x782F}, //7347 #CJK UNIFIED IDEOGRAPH
+ {0xD2DE, 0x7828}, //7348 #CJK UNIFIED IDEOGRAPH
+ {0xD2DF, 0x782E}, //7349 #CJK UNIFIED IDEOGRAPH
+ {0xD2E0, 0x782B}, //7350 #CJK UNIFIED IDEOGRAPH
+ {0xD2E1, 0x7821}, //7351 #CJK UNIFIED IDEOGRAPH
+ {0xD2E2, 0x7829}, //7352 #CJK UNIFIED IDEOGRAPH
+ {0xD2E3, 0x7833}, //7353 #CJK UNIFIED IDEOGRAPH
+ {0xD2E4, 0x782A}, //7354 #CJK UNIFIED IDEOGRAPH
+ {0xD2E5, 0x7831}, //7355 #CJK UNIFIED IDEOGRAPH
+ {0xD2E6, 0x7954}, //7356 #CJK UNIFIED IDEOGRAPH
+ {0xD2E7, 0x795B}, //7357 #CJK UNIFIED IDEOGRAPH
+ {0xD2E8, 0x794F}, //7358 #CJK UNIFIED IDEOGRAPH
+ {0xD2E9, 0x795C}, //7359 #CJK UNIFIED IDEOGRAPH
+ {0xD2EA, 0x7953}, //7360 #CJK UNIFIED IDEOGRAPH
+ {0xD2EB, 0x7952}, //7361 #CJK UNIFIED IDEOGRAPH
+ {0xD2EC, 0x7951}, //7362 #CJK UNIFIED IDEOGRAPH
+ {0xD2ED, 0x79EB}, //7363 #CJK UNIFIED IDEOGRAPH
+ {0xD2EE, 0x79EC}, //7364 #CJK UNIFIED IDEOGRAPH
+ {0xD2EF, 0x79E0}, //7365 #CJK UNIFIED IDEOGRAPH
+ {0xD2F0, 0x79EE}, //7366 #CJK UNIFIED IDEOGRAPH
+ {0xD2F1, 0x79ED}, //7367 #CJK UNIFIED IDEOGRAPH
+ {0xD2F2, 0x79EA}, //7368 #CJK UNIFIED IDEOGRAPH
+ {0xD2F3, 0x79DC}, //7369 #CJK UNIFIED IDEOGRAPH
+ {0xD2F4, 0x79DE}, //7370 #CJK UNIFIED IDEOGRAPH
+ {0xD2F5, 0x79DD}, //7371 #CJK UNIFIED IDEOGRAPH
+ {0xD2F6, 0x7A86}, //7372 #CJK UNIFIED IDEOGRAPH
+ {0xD2F7, 0x7A89}, //7373 #CJK UNIFIED IDEOGRAPH
+ {0xD2F8, 0x7A85}, //7374 #CJK UNIFIED IDEOGRAPH
+ {0xD2F9, 0x7A8B}, //7375 #CJK UNIFIED IDEOGRAPH
+ {0xD2FA, 0x7A8C}, //7376 #CJK UNIFIED IDEOGRAPH
+ {0xD2FB, 0x7A8A}, //7377 #CJK UNIFIED IDEOGRAPH
+ {0xD2FC, 0x7A87}, //7378 #CJK UNIFIED IDEOGRAPH
+ {0xD2FD, 0x7AD8}, //7379 #CJK UNIFIED IDEOGRAPH
+ {0xD2FE, 0x7B10}, //7380 #CJK UNIFIED IDEOGRAPH
+ {0xD340, 0x7B04}, //7381 #CJK UNIFIED IDEOGRAPH
+ {0xD341, 0x7B13}, //7382 #CJK UNIFIED IDEOGRAPH
+ {0xD342, 0x7B05}, //7383 #CJK UNIFIED IDEOGRAPH
+ {0xD343, 0x7B0F}, //7384 #CJK UNIFIED IDEOGRAPH
+ {0xD344, 0x7B08}, //7385 #CJK UNIFIED IDEOGRAPH
+ {0xD345, 0x7B0A}, //7386 #CJK UNIFIED IDEOGRAPH
+ {0xD346, 0x7B0E}, //7387 #CJK UNIFIED IDEOGRAPH
+ {0xD347, 0x7B09}, //7388 #CJK UNIFIED IDEOGRAPH
+ {0xD348, 0x7B12}, //7389 #CJK UNIFIED IDEOGRAPH
+ {0xD349, 0x7C84}, //7390 #CJK UNIFIED IDEOGRAPH
+ {0xD34A, 0x7C91}, //7391 #CJK UNIFIED IDEOGRAPH
+ {0xD34B, 0x7C8A}, //7392 #CJK UNIFIED IDEOGRAPH
+ {0xD34C, 0x7C8C}, //7393 #CJK UNIFIED IDEOGRAPH
+ {0xD34D, 0x7C88}, //7394 #CJK UNIFIED IDEOGRAPH
+ {0xD34E, 0x7C8D}, //7395 #CJK UNIFIED IDEOGRAPH
+ {0xD34F, 0x7C85}, //7396 #CJK UNIFIED IDEOGRAPH
+ {0xD350, 0x7D1E}, //7397 #CJK UNIFIED IDEOGRAPH
+ {0xD351, 0x7D1D}, //7398 #CJK UNIFIED IDEOGRAPH
+ {0xD352, 0x7D11}, //7399 #CJK UNIFIED IDEOGRAPH
+ {0xD353, 0x7D0E}, //7400 #CJK UNIFIED IDEOGRAPH
+ {0xD354, 0x7D18}, //7401 #CJK UNIFIED IDEOGRAPH
+ {0xD355, 0x7D16}, //7402 #CJK UNIFIED IDEOGRAPH
+ {0xD356, 0x7D13}, //7403 #CJK UNIFIED IDEOGRAPH
+ {0xD357, 0x7D1F}, //7404 #CJK UNIFIED IDEOGRAPH
+ {0xD358, 0x7D12}, //7405 #CJK UNIFIED IDEOGRAPH
+ {0xD359, 0x7D0F}, //7406 #CJK UNIFIED IDEOGRAPH
+ {0xD35A, 0x7D0C}, //7407 #CJK UNIFIED IDEOGRAPH
+ {0xD35B, 0x7F5C}, //7408 #CJK UNIFIED IDEOGRAPH
+ {0xD35C, 0x7F61}, //7409 #CJK UNIFIED IDEOGRAPH
+ {0xD35D, 0x7F5E}, //7410 #CJK UNIFIED IDEOGRAPH
+ {0xD35E, 0x7F60}, //7411 #CJK UNIFIED IDEOGRAPH
+ {0xD35F, 0x7F5D}, //7412 #CJK UNIFIED IDEOGRAPH
+ {0xD360, 0x7F5B}, //7413 #CJK UNIFIED IDEOGRAPH
+ {0xD361, 0x7F96}, //7414 #CJK UNIFIED IDEOGRAPH
+ {0xD362, 0x7F92}, //7415 #CJK UNIFIED IDEOGRAPH
+ {0xD363, 0x7FC3}, //7416 #CJK UNIFIED IDEOGRAPH
+ {0xD364, 0x7FC2}, //7417 #CJK UNIFIED IDEOGRAPH
+ {0xD365, 0x7FC0}, //7418 #CJK UNIFIED IDEOGRAPH
+ {0xD366, 0x8016}, //7419 #CJK UNIFIED IDEOGRAPH
+ {0xD367, 0x803E}, //7420 #CJK UNIFIED IDEOGRAPH
+ {0xD368, 0x8039}, //7421 #CJK UNIFIED IDEOGRAPH
+ {0xD369, 0x80FA}, //7422 #CJK UNIFIED IDEOGRAPH
+ {0xD36A, 0x80F2}, //7423 #CJK UNIFIED IDEOGRAPH
+ {0xD36B, 0x80F9}, //7424 #CJK UNIFIED IDEOGRAPH
+ {0xD36C, 0x80F5}, //7425 #CJK UNIFIED IDEOGRAPH
+ {0xD36D, 0x8101}, //7426 #CJK UNIFIED IDEOGRAPH
+ {0xD36E, 0x80FB}, //7427 #CJK UNIFIED IDEOGRAPH
+ {0xD36F, 0x8100}, //7428 #CJK UNIFIED IDEOGRAPH
+ {0xD370, 0x8201}, //7429 #CJK UNIFIED IDEOGRAPH
+ {0xD371, 0x822F}, //7430 #CJK UNIFIED IDEOGRAPH
+ {0xD372, 0x8225}, //7431 #CJK UNIFIED IDEOGRAPH
+ {0xD373, 0x8333}, //7432 #CJK UNIFIED IDEOGRAPH
+ {0xD374, 0x832D}, //7433 #CJK UNIFIED IDEOGRAPH
+ {0xD375, 0x8344}, //7434 #CJK UNIFIED IDEOGRAPH
+ {0xD376, 0x8319}, //7435 #CJK UNIFIED IDEOGRAPH
+ {0xD377, 0x8351}, //7436 #CJK UNIFIED IDEOGRAPH
+ {0xD378, 0x8325}, //7437 #CJK UNIFIED IDEOGRAPH
+ {0xD379, 0x8356}, //7438 #CJK UNIFIED IDEOGRAPH
+ {0xD37A, 0x833F}, //7439 #CJK UNIFIED IDEOGRAPH
+ {0xD37B, 0x8341}, //7440 #CJK UNIFIED IDEOGRAPH
+ {0xD37C, 0x8326}, //7441 #CJK UNIFIED IDEOGRAPH
+ {0xD37D, 0x831C}, //7442 #CJK UNIFIED IDEOGRAPH
+ {0xD37E, 0x8322}, //7443 #CJK UNIFIED IDEOGRAPH
+ {0xD3A1, 0x8342}, //7444 #CJK UNIFIED IDEOGRAPH
+ {0xD3A2, 0x834E}, //7445 #CJK UNIFIED IDEOGRAPH
+ {0xD3A3, 0x831B}, //7446 #CJK UNIFIED IDEOGRAPH
+ {0xD3A4, 0x832A}, //7447 #CJK UNIFIED IDEOGRAPH
+ {0xD3A5, 0x8308}, //7448 #CJK UNIFIED IDEOGRAPH
+ {0xD3A6, 0x833C}, //7449 #CJK UNIFIED IDEOGRAPH
+ {0xD3A7, 0x834D}, //7450 #CJK UNIFIED IDEOGRAPH
+ {0xD3A8, 0x8316}, //7451 #CJK UNIFIED IDEOGRAPH
+ {0xD3A9, 0x8324}, //7452 #CJK UNIFIED IDEOGRAPH
+ {0xD3AA, 0x8320}, //7453 #CJK UNIFIED IDEOGRAPH
+ {0xD3AB, 0x8337}, //7454 #CJK UNIFIED IDEOGRAPH
+ {0xD3AC, 0x832F}, //7455 #CJK UNIFIED IDEOGRAPH
+ {0xD3AD, 0x8329}, //7456 #CJK UNIFIED IDEOGRAPH
+ {0xD3AE, 0x8347}, //7457 #CJK UNIFIED IDEOGRAPH
+ {0xD3AF, 0x8345}, //7458 #CJK UNIFIED IDEOGRAPH
+ {0xD3B0, 0x834C}, //7459 #CJK UNIFIED IDEOGRAPH
+ {0xD3B1, 0x8353}, //7460 #CJK UNIFIED IDEOGRAPH
+ {0xD3B2, 0x831E}, //7461 #CJK UNIFIED IDEOGRAPH
+ {0xD3B3, 0x832C}, //7462 #CJK UNIFIED IDEOGRAPH
+ {0xD3B4, 0x834B}, //7463 #CJK UNIFIED IDEOGRAPH
+ {0xD3B5, 0x8327}, //7464 #CJK UNIFIED IDEOGRAPH
+ {0xD3B6, 0x8348}, //7465 #CJK UNIFIED IDEOGRAPH
+ {0xD3B7, 0x8653}, //7466 #CJK UNIFIED IDEOGRAPH
+ {0xD3B8, 0x8652}, //7467 #CJK UNIFIED IDEOGRAPH
+ {0xD3B9, 0x86A2}, //7468 #CJK UNIFIED IDEOGRAPH
+ {0xD3BA, 0x86A8}, //7469 #CJK UNIFIED IDEOGRAPH
+ {0xD3BB, 0x8696}, //7470 #CJK UNIFIED IDEOGRAPH
+ {0xD3BC, 0x868D}, //7471 #CJK UNIFIED IDEOGRAPH
+ {0xD3BD, 0x8691}, //7472 #CJK UNIFIED IDEOGRAPH
+ {0xD3BE, 0x869E}, //7473 #CJK UNIFIED IDEOGRAPH
+ {0xD3BF, 0x8687}, //7474 #CJK UNIFIED IDEOGRAPH
+ {0xD3C0, 0x8697}, //7475 #CJK UNIFIED IDEOGRAPH
+ {0xD3C1, 0x8686}, //7476 #CJK UNIFIED IDEOGRAPH
+ {0xD3C2, 0x868B}, //7477 #CJK UNIFIED IDEOGRAPH
+ {0xD3C3, 0x869A}, //7478 #CJK UNIFIED IDEOGRAPH
+ {0xD3C4, 0x8685}, //7479 #CJK UNIFIED IDEOGRAPH
+ {0xD3C5, 0x86A5}, //7480 #CJK UNIFIED IDEOGRAPH
+ {0xD3C6, 0x8699}, //7481 #CJK UNIFIED IDEOGRAPH
+ {0xD3C7, 0x86A1}, //7482 #CJK UNIFIED IDEOGRAPH
+ {0xD3C8, 0x86A7}, //7483 #CJK UNIFIED IDEOGRAPH
+ {0xD3C9, 0x8695}, //7484 #CJK UNIFIED IDEOGRAPH
+ {0xD3CA, 0x8698}, //7485 #CJK UNIFIED IDEOGRAPH
+ {0xD3CB, 0x868E}, //7486 #CJK UNIFIED IDEOGRAPH
+ {0xD3CC, 0x869D}, //7487 #CJK UNIFIED IDEOGRAPH
+ {0xD3CD, 0x8690}, //7488 #CJK UNIFIED IDEOGRAPH
+ {0xD3CE, 0x8694}, //7489 #CJK UNIFIED IDEOGRAPH
+ {0xD3CF, 0x8843}, //7490 #CJK UNIFIED IDEOGRAPH
+ {0xD3D0, 0x8844}, //7491 #CJK UNIFIED IDEOGRAPH
+ {0xD3D1, 0x886D}, //7492 #CJK UNIFIED IDEOGRAPH
+ {0xD3D2, 0x8875}, //7493 #CJK UNIFIED IDEOGRAPH
+ {0xD3D3, 0x8876}, //7494 #CJK UNIFIED IDEOGRAPH
+ {0xD3D4, 0x8872}, //7495 #CJK UNIFIED IDEOGRAPH
+ {0xD3D5, 0x8880}, //7496 #CJK UNIFIED IDEOGRAPH
+ {0xD3D6, 0x8871}, //7497 #CJK UNIFIED IDEOGRAPH
+ {0xD3D7, 0x887F}, //7498 #CJK UNIFIED IDEOGRAPH
+ {0xD3D8, 0x886F}, //7499 #CJK UNIFIED IDEOGRAPH
+ {0xD3D9, 0x8883}, //7500 #CJK UNIFIED IDEOGRAPH
+ {0xD3DA, 0x887E}, //7501 #CJK UNIFIED IDEOGRAPH
+ {0xD3DB, 0x8874}, //7502 #CJK UNIFIED IDEOGRAPH
+ {0xD3DC, 0x887C}, //7503 #CJK UNIFIED IDEOGRAPH
+ {0xD3DD, 0x8A12}, //7504 #CJK UNIFIED IDEOGRAPH
+ {0xD3DE, 0x8C47}, //7505 #CJK UNIFIED IDEOGRAPH
+ {0xD3DF, 0x8C57}, //7506 #CJK UNIFIED IDEOGRAPH
+ {0xD3E0, 0x8C7B}, //7507 #CJK UNIFIED IDEOGRAPH
+ {0xD3E1, 0x8CA4}, //7508 #CJK UNIFIED IDEOGRAPH
+ {0xD3E2, 0x8CA3}, //7509 #CJK UNIFIED IDEOGRAPH
+ {0xD3E3, 0x8D76}, //7510 #CJK UNIFIED IDEOGRAPH
+ {0xD3E4, 0x8D78}, //7511 #CJK UNIFIED IDEOGRAPH
+ {0xD3E5, 0x8DB5}, //7512 #CJK UNIFIED IDEOGRAPH
+ {0xD3E6, 0x8DB7}, //7513 #CJK UNIFIED IDEOGRAPH
+ {0xD3E7, 0x8DB6}, //7514 #CJK UNIFIED IDEOGRAPH
+ {0xD3E8, 0x8ED1}, //7515 #CJK UNIFIED IDEOGRAPH
+ {0xD3E9, 0x8ED3}, //7516 #CJK UNIFIED IDEOGRAPH
+ {0xD3EA, 0x8FFE}, //7517 #CJK UNIFIED IDEOGRAPH
+ {0xD3EB, 0x8FF5}, //7518 #CJK UNIFIED IDEOGRAPH
+ {0xD3EC, 0x9002}, //7519 #CJK UNIFIED IDEOGRAPH
+ {0xD3ED, 0x8FFF}, //7520 #CJK UNIFIED IDEOGRAPH
+ {0xD3EE, 0x8FFB}, //7521 #CJK UNIFIED IDEOGRAPH
+ {0xD3EF, 0x9004}, //7522 #CJK UNIFIED IDEOGRAPH
+ {0xD3F0, 0x8FFC}, //7523 #CJK UNIFIED IDEOGRAPH
+ {0xD3F1, 0x8FF6}, //7524 #CJK UNIFIED IDEOGRAPH
+ {0xD3F2, 0x90D6}, //7525 #CJK UNIFIED IDEOGRAPH
+ {0xD3F3, 0x90E0}, //7526 #CJK UNIFIED IDEOGRAPH
+ {0xD3F4, 0x90D9}, //7527 #CJK UNIFIED IDEOGRAPH
+ {0xD3F5, 0x90DA}, //7528 #CJK UNIFIED IDEOGRAPH
+ {0xD3F6, 0x90E3}, //7529 #CJK UNIFIED IDEOGRAPH
+ {0xD3F7, 0x90DF}, //7530 #CJK UNIFIED IDEOGRAPH
+ {0xD3F8, 0x90E5}, //7531 #CJK UNIFIED IDEOGRAPH
+ {0xD3F9, 0x90D8}, //7532 #CJK UNIFIED IDEOGRAPH
+ {0xD3FA, 0x90DB}, //7533 #CJK UNIFIED IDEOGRAPH
+ {0xD3FB, 0x90D7}, //7534 #CJK UNIFIED IDEOGRAPH
+ {0xD3FC, 0x90DC}, //7535 #CJK UNIFIED IDEOGRAPH
+ {0xD3FD, 0x90E4}, //7536 #CJK UNIFIED IDEOGRAPH
+ {0xD3FE, 0x9150}, //7537 #CJK UNIFIED IDEOGRAPH
+ {0xD440, 0x914E}, //7538 #CJK UNIFIED IDEOGRAPH
+ {0xD441, 0x914F}, //7539 #CJK UNIFIED IDEOGRAPH
+ {0xD442, 0x91D5}, //7540 #CJK UNIFIED IDEOGRAPH
+ {0xD443, 0x91E2}, //7541 #CJK UNIFIED IDEOGRAPH
+ {0xD444, 0x91DA}, //7542 #CJK UNIFIED IDEOGRAPH
+ {0xD445, 0x965C}, //7543 #CJK UNIFIED IDEOGRAPH
+ {0xD446, 0x965F}, //7544 #CJK UNIFIED IDEOGRAPH
+ {0xD447, 0x96BC}, //7545 #CJK UNIFIED IDEOGRAPH
+ {0xD448, 0x98E3}, //7546 #CJK UNIFIED IDEOGRAPH
+ {0xD449, 0x9ADF}, //7547 #CJK UNIFIED IDEOGRAPH
+ {0xD44A, 0x9B2F}, //7548 #CJK UNIFIED IDEOGRAPH
+ {0xD44B, 0x4E7F}, //7549 #CJK UNIFIED IDEOGRAPH
+ {0xD44C, 0x5070}, //7550 #CJK UNIFIED IDEOGRAPH
+ {0xD44D, 0x506A}, //7551 #CJK UNIFIED IDEOGRAPH
+ {0xD44E, 0x5061}, //7552 #CJK UNIFIED IDEOGRAPH
+ {0xD44F, 0x505E}, //7553 #CJK UNIFIED IDEOGRAPH
+ {0xD450, 0x5060}, //7554 #CJK UNIFIED IDEOGRAPH
+ {0xD451, 0x5053}, //7555 #CJK UNIFIED IDEOGRAPH
+ {0xD452, 0x504B}, //7556 #CJK UNIFIED IDEOGRAPH
+ {0xD453, 0x505D}, //7557 #CJK UNIFIED IDEOGRAPH
+ {0xD454, 0x5072}, //7558 #CJK UNIFIED IDEOGRAPH
+ {0xD455, 0x5048}, //7559 #CJK UNIFIED IDEOGRAPH
+ {0xD456, 0x504D}, //7560 #CJK UNIFIED IDEOGRAPH
+ {0xD457, 0x5041}, //7561 #CJK UNIFIED IDEOGRAPH
+ {0xD458, 0x505B}, //7562 #CJK UNIFIED IDEOGRAPH
+ {0xD459, 0x504A}, //7563 #CJK UNIFIED IDEOGRAPH
+ {0xD45A, 0x5062}, //7564 #CJK UNIFIED IDEOGRAPH
+ {0xD45B, 0x5015}, //7565 #CJK UNIFIED IDEOGRAPH
+ {0xD45C, 0x5045}, //7566 #CJK UNIFIED IDEOGRAPH
+ {0xD45D, 0x505F}, //7567 #CJK UNIFIED IDEOGRAPH
+ {0xD45E, 0x5069}, //7568 #CJK UNIFIED IDEOGRAPH
+ {0xD45F, 0x506B}, //7569 #CJK UNIFIED IDEOGRAPH
+ {0xD460, 0x5063}, //7570 #CJK UNIFIED IDEOGRAPH
+ {0xD461, 0x5064}, //7571 #CJK UNIFIED IDEOGRAPH
+ {0xD462, 0x5046}, //7572 #CJK UNIFIED IDEOGRAPH
+ {0xD463, 0x5040}, //7573 #CJK UNIFIED IDEOGRAPH
+ {0xD464, 0x506E}, //7574 #CJK UNIFIED IDEOGRAPH
+ {0xD465, 0x5073}, //7575 #CJK UNIFIED IDEOGRAPH
+ {0xD466, 0x5057}, //7576 #CJK UNIFIED IDEOGRAPH
+ {0xD467, 0x5051}, //7577 #CJK UNIFIED IDEOGRAPH
+ {0xD468, 0x51D0}, //7578 #CJK UNIFIED IDEOGRAPH
+ {0xD469, 0x526B}, //7579 #CJK UNIFIED IDEOGRAPH
+ {0xD46A, 0x526D}, //7580 #CJK UNIFIED IDEOGRAPH
+ {0xD46B, 0x526C}, //7581 #CJK UNIFIED IDEOGRAPH
+ {0xD46C, 0x526E}, //7582 #CJK UNIFIED IDEOGRAPH
+ {0xD46D, 0x52D6}, //7583 #CJK UNIFIED IDEOGRAPH
+ {0xD46E, 0x52D3}, //7584 #CJK UNIFIED IDEOGRAPH
+ {0xD46F, 0x532D}, //7585 #CJK UNIFIED IDEOGRAPH
+ {0xD470, 0x539C}, //7586 #CJK UNIFIED IDEOGRAPH
+ {0xD471, 0x5575}, //7587 #CJK UNIFIED IDEOGRAPH
+ {0xD472, 0x5576}, //7588 #CJK UNIFIED IDEOGRAPH
+ {0xD473, 0x553C}, //7589 #CJK UNIFIED IDEOGRAPH
+ {0xD474, 0x554D}, //7590 #CJK UNIFIED IDEOGRAPH
+ {0xD475, 0x5550}, //7591 #CJK UNIFIED IDEOGRAPH
+ {0xD476, 0x5534}, //7592 #CJK UNIFIED IDEOGRAPH
+ {0xD477, 0x552A}, //7593 #CJK UNIFIED IDEOGRAPH
+ {0xD478, 0x5551}, //7594 #CJK UNIFIED IDEOGRAPH
+ {0xD479, 0x5562}, //7595 #CJK UNIFIED IDEOGRAPH
+ {0xD47A, 0x5536}, //7596 #CJK UNIFIED IDEOGRAPH
+ {0xD47B, 0x5535}, //7597 #CJK UNIFIED IDEOGRAPH
+ {0xD47C, 0x5530}, //7598 #CJK UNIFIED IDEOGRAPH
+ {0xD47D, 0x5552}, //7599 #CJK UNIFIED IDEOGRAPH
+ {0xD47E, 0x5545}, //7600 #CJK UNIFIED IDEOGRAPH
+ {0xD4A1, 0x550C}, //7601 #CJK UNIFIED IDEOGRAPH
+ {0xD4A2, 0x5532}, //7602 #CJK UNIFIED IDEOGRAPH
+ {0xD4A3, 0x5565}, //7603 #CJK UNIFIED IDEOGRAPH
+ {0xD4A4, 0x554E}, //7604 #CJK UNIFIED IDEOGRAPH
+ {0xD4A5, 0x5539}, //7605 #CJK UNIFIED IDEOGRAPH
+ {0xD4A6, 0x5548}, //7606 #CJK UNIFIED IDEOGRAPH
+ {0xD4A7, 0x552D}, //7607 #CJK UNIFIED IDEOGRAPH
+ {0xD4A8, 0x553B}, //7608 #CJK UNIFIED IDEOGRAPH
+ {0xD4A9, 0x5540}, //7609 #CJK UNIFIED IDEOGRAPH
+ {0xD4AA, 0x554B}, //7610 #CJK UNIFIED IDEOGRAPH
+ {0xD4AB, 0x570A}, //7611 #CJK UNIFIED IDEOGRAPH
+ {0xD4AC, 0x5707}, //7612 #CJK UNIFIED IDEOGRAPH
+ {0xD4AD, 0x57FB}, //7613 #CJK UNIFIED IDEOGRAPH
+ {0xD4AE, 0x5814}, //7614 #CJK UNIFIED IDEOGRAPH
+ {0xD4AF, 0x57E2}, //7615 #CJK UNIFIED IDEOGRAPH
+ {0xD4B0, 0x57F6}, //7616 #CJK UNIFIED IDEOGRAPH
+ {0xD4B1, 0x57DC}, //7617 #CJK UNIFIED IDEOGRAPH
+ {0xD4B2, 0x57F4}, //7618 #CJK UNIFIED IDEOGRAPH
+ {0xD4B3, 0x5800}, //7619 #CJK UNIFIED IDEOGRAPH
+ {0xD4B4, 0x57ED}, //7620 #CJK UNIFIED IDEOGRAPH
+ {0xD4B5, 0x57FD}, //7621 #CJK UNIFIED IDEOGRAPH
+ {0xD4B6, 0x5808}, //7622 #CJK UNIFIED IDEOGRAPH
+ {0xD4B7, 0x57F8}, //7623 #CJK UNIFIED IDEOGRAPH
+ {0xD4B8, 0x580B}, //7624 #CJK UNIFIED IDEOGRAPH
+ {0xD4B9, 0x57F3}, //7625 #CJK UNIFIED IDEOGRAPH
+ {0xD4BA, 0x57CF}, //7626 #CJK UNIFIED IDEOGRAPH
+ {0xD4BB, 0x5807}, //7627 #CJK UNIFIED IDEOGRAPH
+ {0xD4BC, 0x57EE}, //7628 #CJK UNIFIED IDEOGRAPH
+ {0xD4BD, 0x57E3}, //7629 #CJK UNIFIED IDEOGRAPH
+ {0xD4BE, 0x57F2}, //7630 #CJK UNIFIED IDEOGRAPH
+ {0xD4BF, 0x57E5}, //7631 #CJK UNIFIED IDEOGRAPH
+ {0xD4C0, 0x57EC}, //7632 #CJK UNIFIED IDEOGRAPH
+ {0xD4C1, 0x57E1}, //7633 #CJK UNIFIED IDEOGRAPH
+ {0xD4C2, 0x580E}, //7634 #CJK UNIFIED IDEOGRAPH
+ {0xD4C3, 0x57FC}, //7635 #CJK UNIFIED IDEOGRAPH
+ {0xD4C4, 0x5810}, //7636 #CJK UNIFIED IDEOGRAPH
+ {0xD4C5, 0x57E7}, //7637 #CJK UNIFIED IDEOGRAPH
+ {0xD4C6, 0x5801}, //7638 #CJK UNIFIED IDEOGRAPH
+ {0xD4C7, 0x580C}, //7639 #CJK UNIFIED IDEOGRAPH
+ {0xD4C8, 0x57F1}, //7640 #CJK UNIFIED IDEOGRAPH
+ {0xD4C9, 0x57E9}, //7641 #CJK UNIFIED IDEOGRAPH
+ {0xD4CA, 0x57F0}, //7642 #CJK UNIFIED IDEOGRAPH
+ {0xD4CB, 0x580D}, //7643 #CJK UNIFIED IDEOGRAPH
+ {0xD4CC, 0x5804}, //7644 #CJK UNIFIED IDEOGRAPH
+ {0xD4CD, 0x595C}, //7645 #CJK UNIFIED IDEOGRAPH
+ {0xD4CE, 0x5A60}, //7646 #CJK UNIFIED IDEOGRAPH
+ {0xD4CF, 0x5A58}, //7647 #CJK UNIFIED IDEOGRAPH
+ {0xD4D0, 0x5A55}, //7648 #CJK UNIFIED IDEOGRAPH
+ {0xD4D1, 0x5A67}, //7649 #CJK UNIFIED IDEOGRAPH
+ {0xD4D2, 0x5A5E}, //7650 #CJK UNIFIED IDEOGRAPH
+ {0xD4D3, 0x5A38}, //7651 #CJK UNIFIED IDEOGRAPH
+ {0xD4D4, 0x5A35}, //7652 #CJK UNIFIED IDEOGRAPH
+ {0xD4D5, 0x5A6D}, //7653 #CJK UNIFIED IDEOGRAPH
+ {0xD4D6, 0x5A50}, //7654 #CJK UNIFIED IDEOGRAPH
+ {0xD4D7, 0x5A5F}, //7655 #CJK UNIFIED IDEOGRAPH
+ {0xD4D8, 0x5A65}, //7656 #CJK UNIFIED IDEOGRAPH
+ {0xD4D9, 0x5A6C}, //7657 #CJK UNIFIED IDEOGRAPH
+ {0xD4DA, 0x5A53}, //7658 #CJK UNIFIED IDEOGRAPH
+ {0xD4DB, 0x5A64}, //7659 #CJK UNIFIED IDEOGRAPH
+ {0xD4DC, 0x5A57}, //7660 #CJK UNIFIED IDEOGRAPH
+ {0xD4DD, 0x5A43}, //7661 #CJK UNIFIED IDEOGRAPH
+ {0xD4DE, 0x5A5D}, //7662 #CJK UNIFIED IDEOGRAPH
+ {0xD4DF, 0x5A52}, //7663 #CJK UNIFIED IDEOGRAPH
+ {0xD4E0, 0x5A44}, //7664 #CJK UNIFIED IDEOGRAPH
+ {0xD4E1, 0x5A5B}, //7665 #CJK UNIFIED IDEOGRAPH
+ {0xD4E2, 0x5A48}, //7666 #CJK UNIFIED IDEOGRAPH
+ {0xD4E3, 0x5A8E}, //7667 #CJK UNIFIED IDEOGRAPH
+ {0xD4E4, 0x5A3E}, //7668 #CJK UNIFIED IDEOGRAPH
+ {0xD4E5, 0x5A4D}, //7669 #CJK UNIFIED IDEOGRAPH
+ {0xD4E6, 0x5A39}, //7670 #CJK UNIFIED IDEOGRAPH
+ {0xD4E7, 0x5A4C}, //7671 #CJK UNIFIED IDEOGRAPH
+ {0xD4E8, 0x5A70}, //7672 #CJK UNIFIED IDEOGRAPH
+ {0xD4E9, 0x5A69}, //7673 #CJK UNIFIED IDEOGRAPH
+ {0xD4EA, 0x5A47}, //7674 #CJK UNIFIED IDEOGRAPH
+ {0xD4EB, 0x5A51}, //7675 #CJK UNIFIED IDEOGRAPH
+ {0xD4EC, 0x5A56}, //7676 #CJK UNIFIED IDEOGRAPH
+ {0xD4ED, 0x5A42}, //7677 #CJK UNIFIED IDEOGRAPH
+ {0xD4EE, 0x5A5C}, //7678 #CJK UNIFIED IDEOGRAPH
+ {0xD4EF, 0x5B72}, //7679 #CJK UNIFIED IDEOGRAPH
+ {0xD4F0, 0x5B6E}, //7680 #CJK UNIFIED IDEOGRAPH
+ {0xD4F1, 0x5BC1}, //7681 #CJK UNIFIED IDEOGRAPH
+ {0xD4F2, 0x5BC0}, //7682 #CJK UNIFIED IDEOGRAPH
+ {0xD4F3, 0x5C59}, //7683 #CJK UNIFIED IDEOGRAPH
+ {0xD4F4, 0x5D1E}, //7684 #CJK UNIFIED IDEOGRAPH
+ {0xD4F5, 0x5D0B}, //7685 #CJK UNIFIED IDEOGRAPH
+ {0xD4F6, 0x5D1D}, //7686 #CJK UNIFIED IDEOGRAPH
+ {0xD4F7, 0x5D1A}, //7687 #CJK UNIFIED IDEOGRAPH
+ {0xD4F8, 0x5D20}, //7688 #CJK UNIFIED IDEOGRAPH
+ {0xD4F9, 0x5D0C}, //7689 #CJK UNIFIED IDEOGRAPH
+ {0xD4FA, 0x5D28}, //7690 #CJK UNIFIED IDEOGRAPH
+ {0xD4FB, 0x5D0D}, //7691 #CJK UNIFIED IDEOGRAPH
+ {0xD4FC, 0x5D26}, //7692 #CJK UNIFIED IDEOGRAPH
+ {0xD4FD, 0x5D25}, //7693 #CJK UNIFIED IDEOGRAPH
+ {0xD4FE, 0x5D0F}, //7694 #CJK UNIFIED IDEOGRAPH
+ {0xD540, 0x5D30}, //7695 #CJK UNIFIED IDEOGRAPH
+ {0xD541, 0x5D12}, //7696 #CJK UNIFIED IDEOGRAPH
+ {0xD542, 0x5D23}, //7697 #CJK UNIFIED IDEOGRAPH
+ {0xD543, 0x5D1F}, //7698 #CJK UNIFIED IDEOGRAPH
+ {0xD544, 0x5D2E}, //7699 #CJK UNIFIED IDEOGRAPH
+ {0xD545, 0x5E3E}, //7700 #CJK UNIFIED IDEOGRAPH
+ {0xD546, 0x5E34}, //7701 #CJK UNIFIED IDEOGRAPH
+ {0xD547, 0x5EB1}, //7702 #CJK UNIFIED IDEOGRAPH
+ {0xD548, 0x5EB4}, //7703 #CJK UNIFIED IDEOGRAPH
+ {0xD549, 0x5EB9}, //7704 #CJK UNIFIED IDEOGRAPH
+ {0xD54A, 0x5EB2}, //7705 #CJK UNIFIED IDEOGRAPH
+ {0xD54B, 0x5EB3}, //7706 #CJK UNIFIED IDEOGRAPH
+ {0xD54C, 0x5F36}, //7707 #CJK UNIFIED IDEOGRAPH
+ {0xD54D, 0x5F38}, //7708 #CJK UNIFIED IDEOGRAPH
+ {0xD54E, 0x5F9B}, //7709 #CJK UNIFIED IDEOGRAPH
+ {0xD54F, 0x5F96}, //7710 #CJK UNIFIED IDEOGRAPH
+ {0xD550, 0x5F9F}, //7711 #CJK UNIFIED IDEOGRAPH
+ {0xD551, 0x608A}, //7712 #CJK UNIFIED IDEOGRAPH
+ {0xD552, 0x6090}, //7713 #CJK UNIFIED IDEOGRAPH
+ {0xD553, 0x6086}, //7714 #CJK UNIFIED IDEOGRAPH
+ {0xD554, 0x60BE}, //7715 #CJK UNIFIED IDEOGRAPH
+ {0xD555, 0x60B0}, //7716 #CJK UNIFIED IDEOGRAPH
+ {0xD556, 0x60BA}, //7717 #CJK UNIFIED IDEOGRAPH
+ {0xD557, 0x60D3}, //7718 #CJK UNIFIED IDEOGRAPH
+ {0xD558, 0x60D4}, //7719 #CJK UNIFIED IDEOGRAPH
+ {0xD559, 0x60CF}, //7720 #CJK UNIFIED IDEOGRAPH
+ {0xD55A, 0x60E4}, //7721 #CJK UNIFIED IDEOGRAPH
+ {0xD55B, 0x60D9}, //7722 #CJK UNIFIED IDEOGRAPH
+ {0xD55C, 0x60DD}, //7723 #CJK UNIFIED IDEOGRAPH
+ {0xD55D, 0x60C8}, //7724 #CJK UNIFIED IDEOGRAPH
+ {0xD55E, 0x60B1}, //7725 #CJK UNIFIED IDEOGRAPH
+ {0xD55F, 0x60DB}, //7726 #CJK UNIFIED IDEOGRAPH
+ {0xD560, 0x60B7}, //7727 #CJK UNIFIED IDEOGRAPH
+ {0xD561, 0x60CA}, //7728 #CJK UNIFIED IDEOGRAPH
+ {0xD562, 0x60BF}, //7729 #CJK UNIFIED IDEOGRAPH
+ {0xD563, 0x60C3}, //7730 #CJK UNIFIED IDEOGRAPH
+ {0xD564, 0x60CD}, //7731 #CJK UNIFIED IDEOGRAPH
+ {0xD565, 0x60C0}, //7732 #CJK UNIFIED IDEOGRAPH
+ {0xD566, 0x6332}, //7733 #CJK UNIFIED IDEOGRAPH
+ {0xD567, 0x6365}, //7734 #CJK UNIFIED IDEOGRAPH
+ {0xD568, 0x638A}, //7735 #CJK UNIFIED IDEOGRAPH
+ {0xD569, 0x6382}, //7736 #CJK UNIFIED IDEOGRAPH
+ {0xD56A, 0x637D}, //7737 #CJK UNIFIED IDEOGRAPH
+ {0xD56B, 0x63BD}, //7738 #CJK UNIFIED IDEOGRAPH
+ {0xD56C, 0x639E}, //7739 #CJK UNIFIED IDEOGRAPH
+ {0xD56D, 0x63AD}, //7740 #CJK UNIFIED IDEOGRAPH
+ {0xD56E, 0x639D}, //7741 #CJK UNIFIED IDEOGRAPH
+ {0xD56F, 0x6397}, //7742 #CJK UNIFIED IDEOGRAPH
+ {0xD570, 0x63AB}, //7743 #CJK UNIFIED IDEOGRAPH
+ {0xD571, 0x638E}, //7744 #CJK UNIFIED IDEOGRAPH
+ {0xD572, 0x636F}, //7745 #CJK UNIFIED IDEOGRAPH
+ {0xD573, 0x6387}, //7746 #CJK UNIFIED IDEOGRAPH
+ {0xD574, 0x6390}, //7747 #CJK UNIFIED IDEOGRAPH
+ {0xD575, 0x636E}, //7748 #CJK UNIFIED IDEOGRAPH
+ {0xD576, 0x63AF}, //7749 #CJK UNIFIED IDEOGRAPH
+ {0xD577, 0x6375}, //7750 #CJK UNIFIED IDEOGRAPH
+ {0xD578, 0x639C}, //7751 #CJK UNIFIED IDEOGRAPH
+ {0xD579, 0x636D}, //7752 #CJK UNIFIED IDEOGRAPH
+ {0xD57A, 0x63AE}, //7753 #CJK UNIFIED IDEOGRAPH
+ {0xD57B, 0x637C}, //7754 #CJK UNIFIED IDEOGRAPH
+ {0xD57C, 0x63A4}, //7755 #CJK UNIFIED IDEOGRAPH
+ {0xD57D, 0x633B}, //7756 #CJK UNIFIED IDEOGRAPH
+ {0xD57E, 0x639F}, //7757 #CJK UNIFIED IDEOGRAPH
+ {0xD5A1, 0x6378}, //7758 #CJK UNIFIED IDEOGRAPH
+ {0xD5A2, 0x6385}, //7759 #CJK UNIFIED IDEOGRAPH
+ {0xD5A3, 0x6381}, //7760 #CJK UNIFIED IDEOGRAPH
+ {0xD5A4, 0x6391}, //7761 #CJK UNIFIED IDEOGRAPH
+ {0xD5A5, 0x638D}, //7762 #CJK UNIFIED IDEOGRAPH
+ {0xD5A6, 0x6370}, //7763 #CJK UNIFIED IDEOGRAPH
+ {0xD5A7, 0x6553}, //7764 #CJK UNIFIED IDEOGRAPH
+ {0xD5A8, 0x65CD}, //7765 #CJK UNIFIED IDEOGRAPH
+ {0xD5A9, 0x6665}, //7766 #CJK UNIFIED IDEOGRAPH
+ {0xD5AA, 0x6661}, //7767 #CJK UNIFIED IDEOGRAPH
+ {0xD5AB, 0x665B}, //7768 #CJK UNIFIED IDEOGRAPH
+ {0xD5AC, 0x6659}, //7769 #CJK UNIFIED IDEOGRAPH
+ {0xD5AD, 0x665C}, //7770 #CJK UNIFIED IDEOGRAPH
+ {0xD5AE, 0x6662}, //7771 #CJK UNIFIED IDEOGRAPH
+ {0xD5AF, 0x6718}, //7772 #CJK UNIFIED IDEOGRAPH
+ {0xD5B0, 0x6879}, //7773 #CJK UNIFIED IDEOGRAPH
+ {0xD5B1, 0x6887}, //7774 #CJK UNIFIED IDEOGRAPH
+ {0xD5B2, 0x6890}, //7775 #CJK UNIFIED IDEOGRAPH
+ {0xD5B3, 0x689C}, //7776 #CJK UNIFIED IDEOGRAPH
+ {0xD5B4, 0x686D}, //7777 #CJK UNIFIED IDEOGRAPH
+ {0xD5B5, 0x686E}, //7778 #CJK UNIFIED IDEOGRAPH
+ {0xD5B6, 0x68AE}, //7779 #CJK UNIFIED IDEOGRAPH
+ {0xD5B7, 0x68AB}, //7780 #CJK UNIFIED IDEOGRAPH
+ {0xD5B8, 0x6956}, //7781 #CJK UNIFIED IDEOGRAPH
+ {0xD5B9, 0x686F}, //7782 #CJK UNIFIED IDEOGRAPH
+ {0xD5BA, 0x68A3}, //7783 #CJK UNIFIED IDEOGRAPH
+ {0xD5BB, 0x68AC}, //7784 #CJK UNIFIED IDEOGRAPH
+ {0xD5BC, 0x68A9}, //7785 #CJK UNIFIED IDEOGRAPH
+ {0xD5BD, 0x6875}, //7786 #CJK UNIFIED IDEOGRAPH
+ {0xD5BE, 0x6874}, //7787 #CJK UNIFIED IDEOGRAPH
+ {0xD5BF, 0x68B2}, //7788 #CJK UNIFIED IDEOGRAPH
+ {0xD5C0, 0x688F}, //7789 #CJK UNIFIED IDEOGRAPH
+ {0xD5C1, 0x6877}, //7790 #CJK UNIFIED IDEOGRAPH
+ {0xD5C2, 0x6892}, //7791 #CJK UNIFIED IDEOGRAPH
+ {0xD5C3, 0x687C}, //7792 #CJK UNIFIED IDEOGRAPH
+ {0xD5C4, 0x686B}, //7793 #CJK UNIFIED IDEOGRAPH
+ {0xD5C5, 0x6872}, //7794 #CJK UNIFIED IDEOGRAPH
+ {0xD5C6, 0x68AA}, //7795 #CJK UNIFIED IDEOGRAPH
+ {0xD5C7, 0x6880}, //7796 #CJK UNIFIED IDEOGRAPH
+ {0xD5C8, 0x6871}, //7797 #CJK UNIFIED IDEOGRAPH
+ {0xD5C9, 0x687E}, //7798 #CJK UNIFIED IDEOGRAPH
+ {0xD5CA, 0x689B}, //7799 #CJK UNIFIED IDEOGRAPH
+ {0xD5CB, 0x6896}, //7800 #CJK UNIFIED IDEOGRAPH
+ {0xD5CC, 0x688B}, //7801 #CJK UNIFIED IDEOGRAPH
+ {0xD5CD, 0x68A0}, //7802 #CJK UNIFIED IDEOGRAPH
+ {0xD5CE, 0x6889}, //7803 #CJK UNIFIED IDEOGRAPH
+ {0xD5CF, 0x68A4}, //7804 #CJK UNIFIED IDEOGRAPH
+ {0xD5D0, 0x6878}, //7805 #CJK UNIFIED IDEOGRAPH
+ {0xD5D1, 0x687B}, //7806 #CJK UNIFIED IDEOGRAPH
+ {0xD5D2, 0x6891}, //7807 #CJK UNIFIED IDEOGRAPH
+ {0xD5D3, 0x688C}, //7808 #CJK UNIFIED IDEOGRAPH
+ {0xD5D4, 0x688A}, //7809 #CJK UNIFIED IDEOGRAPH
+ {0xD5D5, 0x687D}, //7810 #CJK UNIFIED IDEOGRAPH
+ {0xD5D6, 0x6B36}, //7811 #CJK UNIFIED IDEOGRAPH
+ {0xD5D7, 0x6B33}, //7812 #CJK UNIFIED IDEOGRAPH
+ {0xD5D8, 0x6B37}, //7813 #CJK UNIFIED IDEOGRAPH
+ {0xD5D9, 0x6B38}, //7814 #CJK UNIFIED IDEOGRAPH
+ {0xD5DA, 0x6B91}, //7815 #CJK UNIFIED IDEOGRAPH
+ {0xD5DB, 0x6B8F}, //7816 #CJK UNIFIED IDEOGRAPH
+ {0xD5DC, 0x6B8D}, //7817 #CJK UNIFIED IDEOGRAPH
+ {0xD5DD, 0x6B8E}, //7818 #CJK UNIFIED IDEOGRAPH
+ {0xD5DE, 0x6B8C}, //7819 #CJK UNIFIED IDEOGRAPH
+ {0xD5DF, 0x6C2A}, //7820 #CJK UNIFIED IDEOGRAPH
+ {0xD5E0, 0x6DC0}, //7821 #CJK UNIFIED IDEOGRAPH
+ {0xD5E1, 0x6DAB}, //7822 #CJK UNIFIED IDEOGRAPH
+ {0xD5E2, 0x6DB4}, //7823 #CJK UNIFIED IDEOGRAPH
+ {0xD5E3, 0x6DB3}, //7824 #CJK UNIFIED IDEOGRAPH
+ {0xD5E4, 0x6E74}, //7825 #CJK UNIFIED IDEOGRAPH
+ {0xD5E5, 0x6DAC}, //7826 #CJK UNIFIED IDEOGRAPH
+ {0xD5E6, 0x6DE9}, //7827 #CJK UNIFIED IDEOGRAPH
+ {0xD5E7, 0x6DE2}, //7828 #CJK UNIFIED IDEOGRAPH
+ {0xD5E8, 0x6DB7}, //7829 #CJK UNIFIED IDEOGRAPH
+ {0xD5E9, 0x6DF6}, //7830 #CJK UNIFIED IDEOGRAPH
+ {0xD5EA, 0x6DD4}, //7831 #CJK UNIFIED IDEOGRAPH
+ {0xD5EB, 0x6E00}, //7832 #CJK UNIFIED IDEOGRAPH
+ {0xD5EC, 0x6DC8}, //7833 #CJK UNIFIED IDEOGRAPH
+ {0xD5ED, 0x6DE0}, //7834 #CJK UNIFIED IDEOGRAPH
+ {0xD5EE, 0x6DDF}, //7835 #CJK UNIFIED IDEOGRAPH
+ {0xD5EF, 0x6DD6}, //7836 #CJK UNIFIED IDEOGRAPH
+ {0xD5F0, 0x6DBE}, //7837 #CJK UNIFIED IDEOGRAPH
+ {0xD5F1, 0x6DE5}, //7838 #CJK UNIFIED IDEOGRAPH
+ {0xD5F2, 0x6DDC}, //7839 #CJK UNIFIED IDEOGRAPH
+ {0xD5F3, 0x6DDD}, //7840 #CJK UNIFIED IDEOGRAPH
+ {0xD5F4, 0x6DDB}, //7841 #CJK UNIFIED IDEOGRAPH
+ {0xD5F5, 0x6DF4}, //7842 #CJK UNIFIED IDEOGRAPH
+ {0xD5F6, 0x6DCA}, //7843 #CJK UNIFIED IDEOGRAPH
+ {0xD5F7, 0x6DBD}, //7844 #CJK UNIFIED IDEOGRAPH
+ {0xD5F8, 0x6DED}, //7845 #CJK UNIFIED IDEOGRAPH
+ {0xD5F9, 0x6DF0}, //7846 #CJK UNIFIED IDEOGRAPH
+ {0xD5FA, 0x6DBA}, //7847 #CJK UNIFIED IDEOGRAPH
+ {0xD5FB, 0x6DD5}, //7848 #CJK UNIFIED IDEOGRAPH
+ {0xD5FC, 0x6DC2}, //7849 #CJK UNIFIED IDEOGRAPH
+ {0xD5FD, 0x6DCF}, //7850 #CJK UNIFIED IDEOGRAPH
+ {0xD5FE, 0x6DC9}, //7851 #CJK UNIFIED IDEOGRAPH
+ {0xD640, 0x6DD0}, //7852 #CJK UNIFIED IDEOGRAPH
+ {0xD641, 0x6DF2}, //7853 #CJK UNIFIED IDEOGRAPH
+ {0xD642, 0x6DD3}, //7854 #CJK UNIFIED IDEOGRAPH
+ {0xD643, 0x6DFD}, //7855 #CJK UNIFIED IDEOGRAPH
+ {0xD644, 0x6DD7}, //7856 #CJK UNIFIED IDEOGRAPH
+ {0xD645, 0x6DCD}, //7857 #CJK UNIFIED IDEOGRAPH
+ {0xD646, 0x6DE3}, //7858 #CJK UNIFIED IDEOGRAPH
+ {0xD647, 0x6DBB}, //7859 #CJK UNIFIED IDEOGRAPH
+ {0xD648, 0x70FA}, //7860 #CJK UNIFIED IDEOGRAPH
+ {0xD649, 0x710D}, //7861 #CJK UNIFIED IDEOGRAPH
+ {0xD64A, 0x70F7}, //7862 #CJK UNIFIED IDEOGRAPH
+ {0xD64B, 0x7117}, //7863 #CJK UNIFIED IDEOGRAPH
+ {0xD64C, 0x70F4}, //7864 #CJK UNIFIED IDEOGRAPH
+ {0xD64D, 0x710C}, //7865 #CJK UNIFIED IDEOGRAPH
+ {0xD64E, 0x70F0}, //7866 #CJK UNIFIED IDEOGRAPH
+ {0xD64F, 0x7104}, //7867 #CJK UNIFIED IDEOGRAPH
+ {0xD650, 0x70F3}, //7868 #CJK UNIFIED IDEOGRAPH
+ {0xD651, 0x7110}, //7869 #CJK UNIFIED IDEOGRAPH
+ {0xD652, 0x70FC}, //7870 #CJK UNIFIED IDEOGRAPH
+ {0xD653, 0x70FF}, //7871 #CJK UNIFIED IDEOGRAPH
+ {0xD654, 0x7106}, //7872 #CJK UNIFIED IDEOGRAPH
+ {0xD655, 0x7113}, //7873 #CJK UNIFIED IDEOGRAPH
+ {0xD656, 0x7100}, //7874 #CJK UNIFIED IDEOGRAPH
+ {0xD657, 0x70F8}, //7875 #CJK UNIFIED IDEOGRAPH
+ {0xD658, 0x70F6}, //7876 #CJK UNIFIED IDEOGRAPH
+ {0xD659, 0x710B}, //7877 #CJK UNIFIED IDEOGRAPH
+ {0xD65A, 0x7102}, //7878 #CJK UNIFIED IDEOGRAPH
+ {0xD65B, 0x710E}, //7879 #CJK UNIFIED IDEOGRAPH
+ {0xD65C, 0x727E}, //7880 #CJK UNIFIED IDEOGRAPH
+ {0xD65D, 0x727B}, //7881 #CJK UNIFIED IDEOGRAPH
+ {0xD65E, 0x727C}, //7882 #CJK UNIFIED IDEOGRAPH
+ {0xD65F, 0x727F}, //7883 #CJK UNIFIED IDEOGRAPH
+ {0xD660, 0x731D}, //7884 #CJK UNIFIED IDEOGRAPH
+ {0xD661, 0x7317}, //7885 #CJK UNIFIED IDEOGRAPH
+ {0xD662, 0x7307}, //7886 #CJK UNIFIED IDEOGRAPH
+ {0xD663, 0x7311}, //7887 #CJK UNIFIED IDEOGRAPH
+ {0xD664, 0x7318}, //7888 #CJK UNIFIED IDEOGRAPH
+ {0xD665, 0x730A}, //7889 #CJK UNIFIED IDEOGRAPH
+ {0xD666, 0x7308}, //7890 #CJK UNIFIED IDEOGRAPH
+ {0xD667, 0x72FF}, //7891 #CJK UNIFIED IDEOGRAPH
+ {0xD668, 0x730F}, //7892 #CJK UNIFIED IDEOGRAPH
+ {0xD669, 0x731E}, //7893 #CJK UNIFIED IDEOGRAPH
+ {0xD66A, 0x7388}, //7894 #CJK UNIFIED IDEOGRAPH
+ {0xD66B, 0x73F6}, //7895 #CJK UNIFIED IDEOGRAPH
+ {0xD66C, 0x73F8}, //7896 #CJK UNIFIED IDEOGRAPH
+ {0xD66D, 0x73F5}, //7897 #CJK UNIFIED IDEOGRAPH
+ {0xD66E, 0x7404}, //7898 #CJK UNIFIED IDEOGRAPH
+ {0xD66F, 0x7401}, //7899 #CJK UNIFIED IDEOGRAPH
+ {0xD670, 0x73FD}, //7900 #CJK UNIFIED IDEOGRAPH
+ {0xD671, 0x7407}, //7901 #CJK UNIFIED IDEOGRAPH
+ {0xD672, 0x7400}, //7902 #CJK UNIFIED IDEOGRAPH
+ {0xD673, 0x73FA}, //7903 #CJK UNIFIED IDEOGRAPH
+ {0xD674, 0x73FC}, //7904 #CJK UNIFIED IDEOGRAPH
+ {0xD675, 0x73FF}, //7905 #CJK UNIFIED IDEOGRAPH
+ {0xD676, 0x740C}, //7906 #CJK UNIFIED IDEOGRAPH
+ {0xD677, 0x740B}, //7907 #CJK UNIFIED IDEOGRAPH
+ {0xD678, 0x73F4}, //7908 #CJK UNIFIED IDEOGRAPH
+ {0xD679, 0x7408}, //7909 #CJK UNIFIED IDEOGRAPH
+ {0xD67A, 0x7564}, //7910 #CJK UNIFIED IDEOGRAPH
+ {0xD67B, 0x7563}, //7911 #CJK UNIFIED IDEOGRAPH
+ {0xD67C, 0x75CE}, //7912 #CJK UNIFIED IDEOGRAPH
+ {0xD67D, 0x75D2}, //7913 #CJK UNIFIED IDEOGRAPH
+ {0xD67E, 0x75CF}, //7914 #CJK UNIFIED IDEOGRAPH
+ {0xD6A1, 0x75CB}, //7915 #CJK UNIFIED IDEOGRAPH
+ {0xD6A2, 0x75CC}, //7916 #CJK UNIFIED IDEOGRAPH
+ {0xD6A3, 0x75D1}, //7917 #CJK UNIFIED IDEOGRAPH
+ {0xD6A4, 0x75D0}, //7918 #CJK UNIFIED IDEOGRAPH
+ {0xD6A5, 0x768F}, //7919 #CJK UNIFIED IDEOGRAPH
+ {0xD6A6, 0x7689}, //7920 #CJK UNIFIED IDEOGRAPH
+ {0xD6A7, 0x76D3}, //7921 #CJK UNIFIED IDEOGRAPH
+ {0xD6A8, 0x7739}, //7922 #CJK UNIFIED IDEOGRAPH
+ {0xD6A9, 0x772F}, //7923 #CJK UNIFIED IDEOGRAPH
+ {0xD6AA, 0x772D}, //7924 #CJK UNIFIED IDEOGRAPH
+ {0xD6AB, 0x7731}, //7925 #CJK UNIFIED IDEOGRAPH
+ {0xD6AC, 0x7732}, //7926 #CJK UNIFIED IDEOGRAPH
+ {0xD6AD, 0x7734}, //7927 #CJK UNIFIED IDEOGRAPH
+ {0xD6AE, 0x7733}, //7928 #CJK UNIFIED IDEOGRAPH
+ {0xD6AF, 0x773D}, //7929 #CJK UNIFIED IDEOGRAPH
+ {0xD6B0, 0x7725}, //7930 #CJK UNIFIED IDEOGRAPH
+ {0xD6B1, 0x773B}, //7931 #CJK UNIFIED IDEOGRAPH
+ {0xD6B2, 0x7735}, //7932 #CJK UNIFIED IDEOGRAPH
+ {0xD6B3, 0x7848}, //7933 #CJK UNIFIED IDEOGRAPH
+ {0xD6B4, 0x7852}, //7934 #CJK UNIFIED IDEOGRAPH
+ {0xD6B5, 0x7849}, //7935 #CJK UNIFIED IDEOGRAPH
+ {0xD6B6, 0x784D}, //7936 #CJK UNIFIED IDEOGRAPH
+ {0xD6B7, 0x784A}, //7937 #CJK UNIFIED IDEOGRAPH
+ {0xD6B8, 0x784C}, //7938 #CJK UNIFIED IDEOGRAPH
+ {0xD6B9, 0x7826}, //7939 #CJK UNIFIED IDEOGRAPH
+ {0xD6BA, 0x7845}, //7940 #CJK UNIFIED IDEOGRAPH
+ {0xD6BB, 0x7850}, //7941 #CJK UNIFIED IDEOGRAPH
+ {0xD6BC, 0x7964}, //7942 #CJK UNIFIED IDEOGRAPH
+ {0xD6BD, 0x7967}, //7943 #CJK UNIFIED IDEOGRAPH
+ {0xD6BE, 0x7969}, //7944 #CJK UNIFIED IDEOGRAPH
+ {0xD6BF, 0x796A}, //7945 #CJK UNIFIED IDEOGRAPH
+ {0xD6C0, 0x7963}, //7946 #CJK UNIFIED IDEOGRAPH
+ {0xD6C1, 0x796B}, //7947 #CJK UNIFIED IDEOGRAPH
+ {0xD6C2, 0x7961}, //7948 #CJK UNIFIED IDEOGRAPH
+ {0xD6C3, 0x79BB}, //7949 #CJK UNIFIED IDEOGRAPH
+ {0xD6C4, 0x79FA}, //7950 #CJK UNIFIED IDEOGRAPH
+ {0xD6C5, 0x79F8}, //7951 #CJK UNIFIED IDEOGRAPH
+ {0xD6C6, 0x79F6}, //7952 #CJK UNIFIED IDEOGRAPH
+ {0xD6C7, 0x79F7}, //7953 #CJK UNIFIED IDEOGRAPH
+ {0xD6C8, 0x7A8F}, //7954 #CJK UNIFIED IDEOGRAPH
+ {0xD6C9, 0x7A94}, //7955 #CJK UNIFIED IDEOGRAPH
+ {0xD6CA, 0x7A90}, //7956 #CJK UNIFIED IDEOGRAPH
+ {0xD6CB, 0x7B35}, //7957 #CJK UNIFIED IDEOGRAPH
+ {0xD6CC, 0x7B47}, //7958 #CJK UNIFIED IDEOGRAPH
+ {0xD6CD, 0x7B34}, //7959 #CJK UNIFIED IDEOGRAPH
+ {0xD6CE, 0x7B25}, //7960 #CJK UNIFIED IDEOGRAPH
+ {0xD6CF, 0x7B30}, //7961 #CJK UNIFIED IDEOGRAPH
+ {0xD6D0, 0x7B22}, //7962 #CJK UNIFIED IDEOGRAPH
+ {0xD6D1, 0x7B24}, //7963 #CJK UNIFIED IDEOGRAPH
+ {0xD6D2, 0x7B33}, //7964 #CJK UNIFIED IDEOGRAPH
+ {0xD6D3, 0x7B18}, //7965 #CJK UNIFIED IDEOGRAPH
+ {0xD6D4, 0x7B2A}, //7966 #CJK UNIFIED IDEOGRAPH
+ {0xD6D5, 0x7B1D}, //7967 #CJK UNIFIED IDEOGRAPH
+ {0xD6D6, 0x7B31}, //7968 #CJK UNIFIED IDEOGRAPH
+ {0xD6D7, 0x7B2B}, //7969 #CJK UNIFIED IDEOGRAPH
+ {0xD6D8, 0x7B2D}, //7970 #CJK UNIFIED IDEOGRAPH
+ {0xD6D9, 0x7B2F}, //7971 #CJK UNIFIED IDEOGRAPH
+ {0xD6DA, 0x7B32}, //7972 #CJK UNIFIED IDEOGRAPH
+ {0xD6DB, 0x7B38}, //7973 #CJK UNIFIED IDEOGRAPH
+ {0xD6DC, 0x7B1A}, //7974 #CJK UNIFIED IDEOGRAPH
+ {0xD6DD, 0x7B23}, //7975 #CJK UNIFIED IDEOGRAPH
+ {0xD6DE, 0x7C94}, //7976 #CJK UNIFIED IDEOGRAPH
+ {0xD6DF, 0x7C98}, //7977 #CJK UNIFIED IDEOGRAPH
+ {0xD6E0, 0x7C96}, //7978 #CJK UNIFIED IDEOGRAPH
+ {0xD6E1, 0x7CA3}, //7979 #CJK UNIFIED IDEOGRAPH
+ {0xD6E2, 0x7D35}, //7980 #CJK UNIFIED IDEOGRAPH
+ {0xD6E3, 0x7D3D}, //7981 #CJK UNIFIED IDEOGRAPH
+ {0xD6E4, 0x7D38}, //7982 #CJK UNIFIED IDEOGRAPH
+ {0xD6E5, 0x7D36}, //7983 #CJK UNIFIED IDEOGRAPH
+ {0xD6E6, 0x7D3A}, //7984 #CJK UNIFIED IDEOGRAPH
+ {0xD6E7, 0x7D45}, //7985 #CJK UNIFIED IDEOGRAPH
+ {0xD6E8, 0x7D2C}, //7986 #CJK UNIFIED IDEOGRAPH
+ {0xD6E9, 0x7D29}, //7987 #CJK UNIFIED IDEOGRAPH
+ {0xD6EA, 0x7D41}, //7988 #CJK UNIFIED IDEOGRAPH
+ {0xD6EB, 0x7D47}, //7989 #CJK UNIFIED IDEOGRAPH
+ {0xD6EC, 0x7D3E}, //7990 #CJK UNIFIED IDEOGRAPH
+ {0xD6ED, 0x7D3F}, //7991 #CJK UNIFIED IDEOGRAPH
+ {0xD6EE, 0x7D4A}, //7992 #CJK UNIFIED IDEOGRAPH
+ {0xD6EF, 0x7D3B}, //7993 #CJK UNIFIED IDEOGRAPH
+ {0xD6F0, 0x7D28}, //7994 #CJK UNIFIED IDEOGRAPH
+ {0xD6F1, 0x7F63}, //7995 #CJK UNIFIED IDEOGRAPH
+ {0xD6F2, 0x7F95}, //7996 #CJK UNIFIED IDEOGRAPH
+ {0xD6F3, 0x7F9C}, //7997 #CJK UNIFIED IDEOGRAPH
+ {0xD6F4, 0x7F9D}, //7998 #CJK UNIFIED IDEOGRAPH
+ {0xD6F5, 0x7F9B}, //7999 #CJK UNIFIED IDEOGRAPH
+ {0xD6F6, 0x7FCA}, //8000 #CJK UNIFIED IDEOGRAPH
+ {0xD6F7, 0x7FCB}, //8001 #CJK UNIFIED IDEOGRAPH
+ {0xD6F8, 0x7FCD}, //8002 #CJK UNIFIED IDEOGRAPH
+ {0xD6F9, 0x7FD0}, //8003 #CJK UNIFIED IDEOGRAPH
+ {0xD6FA, 0x7FD1}, //8004 #CJK UNIFIED IDEOGRAPH
+ {0xD6FB, 0x7FC7}, //8005 #CJK UNIFIED IDEOGRAPH
+ {0xD6FC, 0x7FCF}, //8006 #CJK UNIFIED IDEOGRAPH
+ {0xD6FD, 0x7FC9}, //8007 #CJK UNIFIED IDEOGRAPH
+ {0xD6FE, 0x801F}, //8008 #CJK UNIFIED IDEOGRAPH
+ {0xD740, 0x801E}, //8009 #CJK UNIFIED IDEOGRAPH
+ {0xD741, 0x801B}, //8010 #CJK UNIFIED IDEOGRAPH
+ {0xD742, 0x8047}, //8011 #CJK UNIFIED IDEOGRAPH
+ {0xD743, 0x8043}, //8012 #CJK UNIFIED IDEOGRAPH
+ {0xD744, 0x8048}, //8013 #CJK UNIFIED IDEOGRAPH
+ {0xD745, 0x8118}, //8014 #CJK UNIFIED IDEOGRAPH
+ {0xD746, 0x8125}, //8015 #CJK UNIFIED IDEOGRAPH
+ {0xD747, 0x8119}, //8016 #CJK UNIFIED IDEOGRAPH
+ {0xD748, 0x811B}, //8017 #CJK UNIFIED IDEOGRAPH
+ {0xD749, 0x812D}, //8018 #CJK UNIFIED IDEOGRAPH
+ {0xD74A, 0x811F}, //8019 #CJK UNIFIED IDEOGRAPH
+ {0xD74B, 0x812C}, //8020 #CJK UNIFIED IDEOGRAPH
+ {0xD74C, 0x811E}, //8021 #CJK UNIFIED IDEOGRAPH
+ {0xD74D, 0x8121}, //8022 #CJK UNIFIED IDEOGRAPH
+ {0xD74E, 0x8115}, //8023 #CJK UNIFIED IDEOGRAPH
+ {0xD74F, 0x8127}, //8024 #CJK UNIFIED IDEOGRAPH
+ {0xD750, 0x811D}, //8025 #CJK UNIFIED IDEOGRAPH
+ {0xD751, 0x8122}, //8026 #CJK UNIFIED IDEOGRAPH
+ {0xD752, 0x8211}, //8027 #CJK UNIFIED IDEOGRAPH
+ {0xD753, 0x8238}, //8028 #CJK UNIFIED IDEOGRAPH
+ {0xD754, 0x8233}, //8029 #CJK UNIFIED IDEOGRAPH
+ {0xD755, 0x823A}, //8030 #CJK UNIFIED IDEOGRAPH
+ {0xD756, 0x8234}, //8031 #CJK UNIFIED IDEOGRAPH
+ {0xD757, 0x8232}, //8032 #CJK UNIFIED IDEOGRAPH
+ {0xD758, 0x8274}, //8033 #CJK UNIFIED IDEOGRAPH
+ {0xD759, 0x8390}, //8034 #CJK UNIFIED IDEOGRAPH
+ {0xD75A, 0x83A3}, //8035 #CJK UNIFIED IDEOGRAPH
+ {0xD75B, 0x83A8}, //8036 #CJK UNIFIED IDEOGRAPH
+ {0xD75C, 0x838D}, //8037 #CJK UNIFIED IDEOGRAPH
+ {0xD75D, 0x837A}, //8038 #CJK UNIFIED IDEOGRAPH
+ {0xD75E, 0x8373}, //8039 #CJK UNIFIED IDEOGRAPH
+ {0xD75F, 0x83A4}, //8040 #CJK UNIFIED IDEOGRAPH
+ {0xD760, 0x8374}, //8041 #CJK UNIFIED IDEOGRAPH
+ {0xD761, 0x838F}, //8042 #CJK UNIFIED IDEOGRAPH
+ {0xD762, 0x8381}, //8043 #CJK UNIFIED IDEOGRAPH
+ {0xD763, 0x8395}, //8044 #CJK UNIFIED IDEOGRAPH
+ {0xD764, 0x8399}, //8045 #CJK UNIFIED IDEOGRAPH
+ {0xD765, 0x8375}, //8046 #CJK UNIFIED IDEOGRAPH
+ {0xD766, 0x8394}, //8047 #CJK UNIFIED IDEOGRAPH
+ {0xD767, 0x83A9}, //8048 #CJK UNIFIED IDEOGRAPH
+ {0xD768, 0x837D}, //8049 #CJK UNIFIED IDEOGRAPH
+ {0xD769, 0x8383}, //8050 #CJK UNIFIED IDEOGRAPH
+ {0xD76A, 0x838C}, //8051 #CJK UNIFIED IDEOGRAPH
+ {0xD76B, 0x839D}, //8052 #CJK UNIFIED IDEOGRAPH
+ {0xD76C, 0x839B}, //8053 #CJK UNIFIED IDEOGRAPH
+ {0xD76D, 0x83AA}, //8054 #CJK UNIFIED IDEOGRAPH
+ {0xD76E, 0x838B}, //8055 #CJK UNIFIED IDEOGRAPH
+ {0xD76F, 0x837E}, //8056 #CJK UNIFIED IDEOGRAPH
+ {0xD770, 0x83A5}, //8057 #CJK UNIFIED IDEOGRAPH
+ {0xD771, 0x83AF}, //8058 #CJK UNIFIED IDEOGRAPH
+ {0xD772, 0x8388}, //8059 #CJK UNIFIED IDEOGRAPH
+ {0xD773, 0x8397}, //8060 #CJK UNIFIED IDEOGRAPH
+ {0xD774, 0x83B0}, //8061 #CJK UNIFIED IDEOGRAPH
+ {0xD775, 0x837F}, //8062 #CJK UNIFIED IDEOGRAPH
+ {0xD776, 0x83A6}, //8063 #CJK UNIFIED IDEOGRAPH
+ {0xD777, 0x8387}, //8064 #CJK UNIFIED IDEOGRAPH
+ {0xD778, 0x83AE}, //8065 #CJK UNIFIED IDEOGRAPH
+ {0xD779, 0x8376}, //8066 #CJK UNIFIED IDEOGRAPH
+ {0xD77A, 0x839A}, //8067 #CJK UNIFIED IDEOGRAPH
+ {0xD77B, 0x8659}, //8068 #CJK UNIFIED IDEOGRAPH
+ {0xD77C, 0x8656}, //8069 #CJK UNIFIED IDEOGRAPH
+ {0xD77D, 0x86BF}, //8070 #CJK UNIFIED IDEOGRAPH
+ {0xD77E, 0x86B7}, //8071 #CJK UNIFIED IDEOGRAPH
+ {0xD7A1, 0x86C2}, //8072 #CJK UNIFIED IDEOGRAPH
+ {0xD7A2, 0x86C1}, //8073 #CJK UNIFIED IDEOGRAPH
+ {0xD7A3, 0x86C5}, //8074 #CJK UNIFIED IDEOGRAPH
+ {0xD7A4, 0x86BA}, //8075 #CJK UNIFIED IDEOGRAPH
+ {0xD7A5, 0x86B0}, //8076 #CJK UNIFIED IDEOGRAPH
+ {0xD7A6, 0x86C8}, //8077 #CJK UNIFIED IDEOGRAPH
+ {0xD7A7, 0x86B9}, //8078 #CJK UNIFIED IDEOGRAPH
+ {0xD7A8, 0x86B3}, //8079 #CJK UNIFIED IDEOGRAPH
+ {0xD7A9, 0x86B8}, //8080 #CJK UNIFIED IDEOGRAPH
+ {0xD7AA, 0x86CC}, //8081 #CJK UNIFIED IDEOGRAPH
+ {0xD7AB, 0x86B4}, //8082 #CJK UNIFIED IDEOGRAPH
+ {0xD7AC, 0x86BB}, //8083 #CJK UNIFIED IDEOGRAPH
+ {0xD7AD, 0x86BC}, //8084 #CJK UNIFIED IDEOGRAPH
+ {0xD7AE, 0x86C3}, //8085 #CJK UNIFIED IDEOGRAPH
+ {0xD7AF, 0x86BD}, //8086 #CJK UNIFIED IDEOGRAPH
+ {0xD7B0, 0x86BE}, //8087 #CJK UNIFIED IDEOGRAPH
+ {0xD7B1, 0x8852}, //8088 #CJK UNIFIED IDEOGRAPH
+ {0xD7B2, 0x8889}, //8089 #CJK UNIFIED IDEOGRAPH
+ {0xD7B3, 0x8895}, //8090 #CJK UNIFIED IDEOGRAPH
+ {0xD7B4, 0x88A8}, //8091 #CJK UNIFIED IDEOGRAPH
+ {0xD7B5, 0x88A2}, //8092 #CJK UNIFIED IDEOGRAPH
+ {0xD7B6, 0x88AA}, //8093 #CJK UNIFIED IDEOGRAPH
+ {0xD7B7, 0x889A}, //8094 #CJK UNIFIED IDEOGRAPH
+ {0xD7B8, 0x8891}, //8095 #CJK UNIFIED IDEOGRAPH
+ {0xD7B9, 0x88A1}, //8096 #CJK UNIFIED IDEOGRAPH
+ {0xD7BA, 0x889F}, //8097 #CJK UNIFIED IDEOGRAPH
+ {0xD7BB, 0x8898}, //8098 #CJK UNIFIED IDEOGRAPH
+ {0xD7BC, 0x88A7}, //8099 #CJK UNIFIED IDEOGRAPH
+ {0xD7BD, 0x8899}, //8100 #CJK UNIFIED IDEOGRAPH
+ {0xD7BE, 0x889B}, //8101 #CJK UNIFIED IDEOGRAPH
+ {0xD7BF, 0x8897}, //8102 #CJK UNIFIED IDEOGRAPH
+ {0xD7C0, 0x88A4}, //8103 #CJK UNIFIED IDEOGRAPH
+ {0xD7C1, 0x88AC}, //8104 #CJK UNIFIED IDEOGRAPH
+ {0xD7C2, 0x888C}, //8105 #CJK UNIFIED IDEOGRAPH
+ {0xD7C3, 0x8893}, //8106 #CJK UNIFIED IDEOGRAPH
+ {0xD7C4, 0x888E}, //8107 #CJK UNIFIED IDEOGRAPH
+ {0xD7C5, 0x8982}, //8108 #CJK UNIFIED IDEOGRAPH
+ {0xD7C6, 0x89D6}, //8109 #CJK UNIFIED IDEOGRAPH
+ {0xD7C7, 0x89D9}, //8110 #CJK UNIFIED IDEOGRAPH
+ {0xD7C8, 0x89D5}, //8111 #CJK UNIFIED IDEOGRAPH
+ {0xD7C9, 0x8A30}, //8112 #CJK UNIFIED IDEOGRAPH
+ {0xD7CA, 0x8A27}, //8113 #CJK UNIFIED IDEOGRAPH
+ {0xD7CB, 0x8A2C}, //8114 #CJK UNIFIED IDEOGRAPH
+ {0xD7CC, 0x8A1E}, //8115 #CJK UNIFIED IDEOGRAPH
+ {0xD7CD, 0x8C39}, //8116 #CJK UNIFIED IDEOGRAPH
+ {0xD7CE, 0x8C3B}, //8117 #CJK UNIFIED IDEOGRAPH
+ {0xD7CF, 0x8C5C}, //8118 #CJK UNIFIED IDEOGRAPH
+ {0xD7D0, 0x8C5D}, //8119 #CJK UNIFIED IDEOGRAPH
+ {0xD7D1, 0x8C7D}, //8120 #CJK UNIFIED IDEOGRAPH
+ {0xD7D2, 0x8CA5}, //8121 #CJK UNIFIED IDEOGRAPH
+ {0xD7D3, 0x8D7D}, //8122 #CJK UNIFIED IDEOGRAPH
+ {0xD7D4, 0x8D7B}, //8123 #CJK UNIFIED IDEOGRAPH
+ {0xD7D5, 0x8D79}, //8124 #CJK UNIFIED IDEOGRAPH
+ {0xD7D6, 0x8DBC}, //8125 #CJK UNIFIED IDEOGRAPH
+ {0xD7D7, 0x8DC2}, //8126 #CJK UNIFIED IDEOGRAPH
+ {0xD7D8, 0x8DB9}, //8127 #CJK UNIFIED IDEOGRAPH
+ {0xD7D9, 0x8DBF}, //8128 #CJK UNIFIED IDEOGRAPH
+ {0xD7DA, 0x8DC1}, //8129 #CJK UNIFIED IDEOGRAPH
+ {0xD7DB, 0x8ED8}, //8130 #CJK UNIFIED IDEOGRAPH
+ {0xD7DC, 0x8EDE}, //8131 #CJK UNIFIED IDEOGRAPH
+ {0xD7DD, 0x8EDD}, //8132 #CJK UNIFIED IDEOGRAPH
+ {0xD7DE, 0x8EDC}, //8133 #CJK UNIFIED IDEOGRAPH
+ {0xD7DF, 0x8ED7}, //8134 #CJK UNIFIED IDEOGRAPH
+ {0xD7E0, 0x8EE0}, //8135 #CJK UNIFIED IDEOGRAPH
+ {0xD7E1, 0x8EE1}, //8136 #CJK UNIFIED IDEOGRAPH
+ {0xD7E2, 0x9024}, //8137 #CJK UNIFIED IDEOGRAPH
+ {0xD7E3, 0x900B}, //8138 #CJK UNIFIED IDEOGRAPH
+ {0xD7E4, 0x9011}, //8139 #CJK UNIFIED IDEOGRAPH
+ {0xD7E5, 0x901C}, //8140 #CJK UNIFIED IDEOGRAPH
+ {0xD7E6, 0x900C}, //8141 #CJK UNIFIED IDEOGRAPH
+ {0xD7E7, 0x9021}, //8142 #CJK UNIFIED IDEOGRAPH
+ {0xD7E8, 0x90EF}, //8143 #CJK UNIFIED IDEOGRAPH
+ {0xD7E9, 0x90EA}, //8144 #CJK UNIFIED IDEOGRAPH
+ {0xD7EA, 0x90F0}, //8145 #CJK UNIFIED IDEOGRAPH
+ {0xD7EB, 0x90F4}, //8146 #CJK UNIFIED IDEOGRAPH
+ {0xD7EC, 0x90F2}, //8147 #CJK UNIFIED IDEOGRAPH
+ {0xD7ED, 0x90F3}, //8148 #CJK UNIFIED IDEOGRAPH
+ {0xD7EE, 0x90D4}, //8149 #CJK UNIFIED IDEOGRAPH
+ {0xD7EF, 0x90EB}, //8150 #CJK UNIFIED IDEOGRAPH
+ {0xD7F0, 0x90EC}, //8151 #CJK UNIFIED IDEOGRAPH
+ {0xD7F1, 0x90E9}, //8152 #CJK UNIFIED IDEOGRAPH
+ {0xD7F2, 0x9156}, //8153 #CJK UNIFIED IDEOGRAPH
+ {0xD7F3, 0x9158}, //8154 #CJK UNIFIED IDEOGRAPH
+ {0xD7F4, 0x915A}, //8155 #CJK UNIFIED IDEOGRAPH
+ {0xD7F5, 0x9153}, //8156 #CJK UNIFIED IDEOGRAPH
+ {0xD7F6, 0x9155}, //8157 #CJK UNIFIED IDEOGRAPH
+ {0xD7F7, 0x91EC}, //8158 #CJK UNIFIED IDEOGRAPH
+ {0xD7F8, 0x91F4}, //8159 #CJK UNIFIED IDEOGRAPH
+ {0xD7F9, 0x91F1}, //8160 #CJK UNIFIED IDEOGRAPH
+ {0xD7FA, 0x91F3}, //8161 #CJK UNIFIED IDEOGRAPH
+ {0xD7FB, 0x91F8}, //8162 #CJK UNIFIED IDEOGRAPH
+ {0xD7FC, 0x91E4}, //8163 #CJK UNIFIED IDEOGRAPH
+ {0xD7FD, 0x91F9}, //8164 #CJK UNIFIED IDEOGRAPH
+ {0xD7FE, 0x91EA}, //8165 #CJK UNIFIED IDEOGRAPH
+ {0xD840, 0x91EB}, //8166 #CJK UNIFIED IDEOGRAPH
+ {0xD841, 0x91F7}, //8167 #CJK UNIFIED IDEOGRAPH
+ {0xD842, 0x91E8}, //8168 #CJK UNIFIED IDEOGRAPH
+ {0xD843, 0x91EE}, //8169 #CJK UNIFIED IDEOGRAPH
+ {0xD844, 0x957A}, //8170 #CJK UNIFIED IDEOGRAPH
+ {0xD845, 0x9586}, //8171 #CJK UNIFIED IDEOGRAPH
+ {0xD846, 0x9588}, //8172 #CJK UNIFIED IDEOGRAPH
+ {0xD847, 0x967C}, //8173 #CJK UNIFIED IDEOGRAPH
+ {0xD848, 0x966D}, //8174 #CJK UNIFIED IDEOGRAPH
+ {0xD849, 0x966B}, //8175 #CJK UNIFIED IDEOGRAPH
+ {0xD84A, 0x9671}, //8176 #CJK UNIFIED IDEOGRAPH
+ {0xD84B, 0x966F}, //8177 #CJK UNIFIED IDEOGRAPH
+ {0xD84C, 0x96BF}, //8178 #CJK UNIFIED IDEOGRAPH
+ {0xD84D, 0x976A}, //8179 #CJK UNIFIED IDEOGRAPH
+ {0xD84E, 0x9804}, //8180 #CJK UNIFIED IDEOGRAPH
+ {0xD84F, 0x98E5}, //8181 #CJK UNIFIED IDEOGRAPH
+ {0xD850, 0x9997}, //8182 #CJK UNIFIED IDEOGRAPH
+ {0xD851, 0x509B}, //8183 #CJK UNIFIED IDEOGRAPH
+ {0xD852, 0x5095}, //8184 #CJK UNIFIED IDEOGRAPH
+ {0xD853, 0x5094}, //8185 #CJK UNIFIED IDEOGRAPH
+ {0xD854, 0x509E}, //8186 #CJK UNIFIED IDEOGRAPH
+ {0xD855, 0x508B}, //8187 #CJK UNIFIED IDEOGRAPH
+ {0xD856, 0x50A3}, //8188 #CJK UNIFIED IDEOGRAPH
+ {0xD857, 0x5083}, //8189 #CJK UNIFIED IDEOGRAPH
+ {0xD858, 0x508C}, //8190 #CJK UNIFIED IDEOGRAPH
+ {0xD859, 0x508E}, //8191 #CJK UNIFIED IDEOGRAPH
+ {0xD85A, 0x509D}, //8192 #CJK UNIFIED IDEOGRAPH
+ {0xD85B, 0x5068}, //8193 #CJK UNIFIED IDEOGRAPH
+ {0xD85C, 0x509C}, //8194 #CJK UNIFIED IDEOGRAPH
+ {0xD85D, 0x5092}, //8195 #CJK UNIFIED IDEOGRAPH
+ {0xD85E, 0x5082}, //8196 #CJK UNIFIED IDEOGRAPH
+ {0xD85F, 0x5087}, //8197 #CJK UNIFIED IDEOGRAPH
+ {0xD860, 0x515F}, //8198 #CJK UNIFIED IDEOGRAPH
+ {0xD861, 0x51D4}, //8199 #CJK UNIFIED IDEOGRAPH
+ {0xD862, 0x5312}, //8200 #CJK UNIFIED IDEOGRAPH
+ {0xD863, 0x5311}, //8201 #CJK UNIFIED IDEOGRAPH
+ {0xD864, 0x53A4}, //8202 #CJK UNIFIED IDEOGRAPH
+ {0xD865, 0x53A7}, //8203 #CJK UNIFIED IDEOGRAPH
+ {0xD866, 0x5591}, //8204 #CJK UNIFIED IDEOGRAPH
+ {0xD867, 0x55A8}, //8205 #CJK UNIFIED IDEOGRAPH
+ {0xD868, 0x55A5}, //8206 #CJK UNIFIED IDEOGRAPH
+ {0xD869, 0x55AD}, //8207 #CJK UNIFIED IDEOGRAPH
+ {0xD86A, 0x5577}, //8208 #CJK UNIFIED IDEOGRAPH
+ {0xD86B, 0x5645}, //8209 #CJK UNIFIED IDEOGRAPH
+ {0xD86C, 0x55A2}, //8210 #CJK UNIFIED IDEOGRAPH
+ {0xD86D, 0x5593}, //8211 #CJK UNIFIED IDEOGRAPH
+ {0xD86E, 0x5588}, //8212 #CJK UNIFIED IDEOGRAPH
+ {0xD86F, 0x558F}, //8213 #CJK UNIFIED IDEOGRAPH
+ {0xD870, 0x55B5}, //8214 #CJK UNIFIED IDEOGRAPH
+ {0xD871, 0x5581}, //8215 #CJK UNIFIED IDEOGRAPH
+ {0xD872, 0x55A3}, //8216 #CJK UNIFIED IDEOGRAPH
+ {0xD873, 0x5592}, //8217 #CJK UNIFIED IDEOGRAPH
+ {0xD874, 0x55A4}, //8218 #CJK UNIFIED IDEOGRAPH
+ {0xD875, 0x557D}, //8219 #CJK UNIFIED IDEOGRAPH
+ {0xD876, 0x558C}, //8220 #CJK UNIFIED IDEOGRAPH
+ {0xD877, 0x55A6}, //8221 #CJK UNIFIED IDEOGRAPH
+ {0xD878, 0x557F}, //8222 #CJK UNIFIED IDEOGRAPH
+ {0xD879, 0x5595}, //8223 #CJK UNIFIED IDEOGRAPH
+ {0xD87A, 0x55A1}, //8224 #CJK UNIFIED IDEOGRAPH
+ {0xD87B, 0x558E}, //8225 #CJK UNIFIED IDEOGRAPH
+ {0xD87C, 0x570C}, //8226 #CJK UNIFIED IDEOGRAPH
+ {0xD87D, 0x5829}, //8227 #CJK UNIFIED IDEOGRAPH
+ {0xD87E, 0x5837}, //8228 #CJK UNIFIED IDEOGRAPH
+ {0xD8A1, 0x5819}, //8229 #CJK UNIFIED IDEOGRAPH
+ {0xD8A2, 0x581E}, //8230 #CJK UNIFIED IDEOGRAPH
+ {0xD8A3, 0x5827}, //8231 #CJK UNIFIED IDEOGRAPH
+ {0xD8A4, 0x5823}, //8232 #CJK UNIFIED IDEOGRAPH
+ {0xD8A5, 0x5828}, //8233 #CJK UNIFIED IDEOGRAPH
+ {0xD8A6, 0x57F5}, //8234 #CJK UNIFIED IDEOGRAPH
+ {0xD8A7, 0x5848}, //8235 #CJK UNIFIED IDEOGRAPH
+ {0xD8A8, 0x5825}, //8236 #CJK UNIFIED IDEOGRAPH
+ {0xD8A9, 0x581C}, //8237 #CJK UNIFIED IDEOGRAPH
+ {0xD8AA, 0x581B}, //8238 #CJK UNIFIED IDEOGRAPH
+ {0xD8AB, 0x5833}, //8239 #CJK UNIFIED IDEOGRAPH
+ {0xD8AC, 0x583F}, //8240 #CJK UNIFIED IDEOGRAPH
+ {0xD8AD, 0x5836}, //8241 #CJK UNIFIED IDEOGRAPH
+ {0xD8AE, 0x582E}, //8242 #CJK UNIFIED IDEOGRAPH
+ {0xD8AF, 0x5839}, //8243 #CJK UNIFIED IDEOGRAPH
+ {0xD8B0, 0x5838}, //8244 #CJK UNIFIED IDEOGRAPH
+ {0xD8B1, 0x582D}, //8245 #CJK UNIFIED IDEOGRAPH
+ {0xD8B2, 0x582C}, //8246 #CJK UNIFIED IDEOGRAPH
+ {0xD8B3, 0x583B}, //8247 #CJK UNIFIED IDEOGRAPH
+ {0xD8B4, 0x5961}, //8248 #CJK UNIFIED IDEOGRAPH
+ {0xD8B5, 0x5AAF}, //8249 #CJK UNIFIED IDEOGRAPH
+ {0xD8B6, 0x5A94}, //8250 #CJK UNIFIED IDEOGRAPH
+ {0xD8B7, 0x5A9F}, //8251 #CJK UNIFIED IDEOGRAPH
+ {0xD8B8, 0x5A7A}, //8252 #CJK UNIFIED IDEOGRAPH
+ {0xD8B9, 0x5AA2}, //8253 #CJK UNIFIED IDEOGRAPH
+ {0xD8BA, 0x5A9E}, //8254 #CJK UNIFIED IDEOGRAPH
+ {0xD8BB, 0x5A78}, //8255 #CJK UNIFIED IDEOGRAPH
+ {0xD8BC, 0x5AA6}, //8256 #CJK UNIFIED IDEOGRAPH
+ {0xD8BD, 0x5A7C}, //8257 #CJK UNIFIED IDEOGRAPH
+ {0xD8BE, 0x5AA5}, //8258 #CJK UNIFIED IDEOGRAPH
+ {0xD8BF, 0x5AAC}, //8259 #CJK UNIFIED IDEOGRAPH
+ {0xD8C0, 0x5A95}, //8260 #CJK UNIFIED IDEOGRAPH
+ {0xD8C1, 0x5AAE}, //8261 #CJK UNIFIED IDEOGRAPH
+ {0xD8C2, 0x5A37}, //8262 #CJK UNIFIED IDEOGRAPH
+ {0xD8C3, 0x5A84}, //8263 #CJK UNIFIED IDEOGRAPH
+ {0xD8C4, 0x5A8A}, //8264 #CJK UNIFIED IDEOGRAPH
+ {0xD8C5, 0x5A97}, //8265 #CJK UNIFIED IDEOGRAPH
+ {0xD8C6, 0x5A83}, //8266 #CJK UNIFIED IDEOGRAPH
+ {0xD8C7, 0x5A8B}, //8267 #CJK UNIFIED IDEOGRAPH
+ {0xD8C8, 0x5AA9}, //8268 #CJK UNIFIED IDEOGRAPH
+ {0xD8C9, 0x5A7B}, //8269 #CJK UNIFIED IDEOGRAPH
+ {0xD8CA, 0x5A7D}, //8270 #CJK UNIFIED IDEOGRAPH
+ {0xD8CB, 0x5A8C}, //8271 #CJK UNIFIED IDEOGRAPH
+ {0xD8CC, 0x5A9C}, //8272 #CJK UNIFIED IDEOGRAPH
+ {0xD8CD, 0x5A8F}, //8273 #CJK UNIFIED IDEOGRAPH
+ {0xD8CE, 0x5A93}, //8274 #CJK UNIFIED IDEOGRAPH
+ {0xD8CF, 0x5A9D}, //8275 #CJK UNIFIED IDEOGRAPH
+ {0xD8D0, 0x5BEA}, //8276 #CJK UNIFIED IDEOGRAPH
+ {0xD8D1, 0x5BCD}, //8277 #CJK UNIFIED IDEOGRAPH
+ {0xD8D2, 0x5BCB}, //8278 #CJK UNIFIED IDEOGRAPH
+ {0xD8D3, 0x5BD4}, //8279 #CJK UNIFIED IDEOGRAPH
+ {0xD8D4, 0x5BD1}, //8280 #CJK UNIFIED IDEOGRAPH
+ {0xD8D5, 0x5BCA}, //8281 #CJK UNIFIED IDEOGRAPH
+ {0xD8D6, 0x5BCE}, //8282 #CJK UNIFIED IDEOGRAPH
+ {0xD8D7, 0x5C0C}, //8283 #CJK UNIFIED IDEOGRAPH
+ {0xD8D8, 0x5C30}, //8284 #CJK UNIFIED IDEOGRAPH
+ {0xD8D9, 0x5D37}, //8285 #CJK UNIFIED IDEOGRAPH
+ {0xD8DA, 0x5D43}, //8286 #CJK UNIFIED IDEOGRAPH
+ {0xD8DB, 0x5D6B}, //8287 #CJK UNIFIED IDEOGRAPH
+ {0xD8DC, 0x5D41}, //8288 #CJK UNIFIED IDEOGRAPH
+ {0xD8DD, 0x5D4B}, //8289 #CJK UNIFIED IDEOGRAPH
+ {0xD8DE, 0x5D3F}, //8290 #CJK UNIFIED IDEOGRAPH
+ {0xD8DF, 0x5D35}, //8291 #CJK UNIFIED IDEOGRAPH
+ {0xD8E0, 0x5D51}, //8292 #CJK UNIFIED IDEOGRAPH
+ {0xD8E1, 0x5D4E}, //8293 #CJK UNIFIED IDEOGRAPH
+ {0xD8E2, 0x5D55}, //8294 #CJK UNIFIED IDEOGRAPH
+ {0xD8E3, 0x5D33}, //8295 #CJK UNIFIED IDEOGRAPH
+ {0xD8E4, 0x5D3A}, //8296 #CJK UNIFIED IDEOGRAPH
+ {0xD8E5, 0x5D52}, //8297 #CJK UNIFIED IDEOGRAPH
+ {0xD8E6, 0x5D3D}, //8298 #CJK UNIFIED IDEOGRAPH
+ {0xD8E7, 0x5D31}, //8299 #CJK UNIFIED IDEOGRAPH
+ {0xD8E8, 0x5D59}, //8300 #CJK UNIFIED IDEOGRAPH
+ {0xD8E9, 0x5D42}, //8301 #CJK UNIFIED IDEOGRAPH
+ {0xD8EA, 0x5D39}, //8302 #CJK UNIFIED IDEOGRAPH
+ {0xD8EB, 0x5D49}, //8303 #CJK UNIFIED IDEOGRAPH
+ {0xD8EC, 0x5D38}, //8304 #CJK UNIFIED IDEOGRAPH
+ {0xD8ED, 0x5D3C}, //8305 #CJK UNIFIED IDEOGRAPH
+ {0xD8EE, 0x5D32}, //8306 #CJK UNIFIED IDEOGRAPH
+ {0xD8EF, 0x5D36}, //8307 #CJK UNIFIED IDEOGRAPH
+ {0xD8F0, 0x5D40}, //8308 #CJK UNIFIED IDEOGRAPH
+ {0xD8F1, 0x5D45}, //8309 #CJK UNIFIED IDEOGRAPH
+ {0xD8F2, 0x5E44}, //8310 #CJK UNIFIED IDEOGRAPH
+ {0xD8F3, 0x5E41}, //8311 #CJK UNIFIED IDEOGRAPH
+ {0xD8F4, 0x5F58}, //8312 #CJK UNIFIED IDEOGRAPH
+ {0xD8F5, 0x5FA6}, //8313 #CJK UNIFIED IDEOGRAPH
+ {0xD8F6, 0x5FA5}, //8314 #CJK UNIFIED IDEOGRAPH
+ {0xD8F7, 0x5FAB}, //8315 #CJK UNIFIED IDEOGRAPH
+ {0xD8F8, 0x60C9}, //8316 #CJK UNIFIED IDEOGRAPH
+ {0xD8F9, 0x60B9}, //8317 #CJK UNIFIED IDEOGRAPH
+ {0xD8FA, 0x60CC}, //8318 #CJK UNIFIED IDEOGRAPH
+ {0xD8FB, 0x60E2}, //8319 #CJK UNIFIED IDEOGRAPH
+ {0xD8FC, 0x60CE}, //8320 #CJK UNIFIED IDEOGRAPH
+ {0xD8FD, 0x60C4}, //8321 #CJK UNIFIED IDEOGRAPH
+ {0xD8FE, 0x6114}, //8322 #CJK UNIFIED IDEOGRAPH
+ {0xD940, 0x60F2}, //8323 #CJK UNIFIED IDEOGRAPH
+ {0xD941, 0x610A}, //8324 #CJK UNIFIED IDEOGRAPH
+ {0xD942, 0x6116}, //8325 #CJK UNIFIED IDEOGRAPH
+ {0xD943, 0x6105}, //8326 #CJK UNIFIED IDEOGRAPH
+ {0xD944, 0x60F5}, //8327 #CJK UNIFIED IDEOGRAPH
+ {0xD945, 0x6113}, //8328 #CJK UNIFIED IDEOGRAPH
+ {0xD946, 0x60F8}, //8329 #CJK UNIFIED IDEOGRAPH
+ {0xD947, 0x60FC}, //8330 #CJK UNIFIED IDEOGRAPH
+ {0xD948, 0x60FE}, //8331 #CJK UNIFIED IDEOGRAPH
+ {0xD949, 0x60C1}, //8332 #CJK UNIFIED IDEOGRAPH
+ {0xD94A, 0x6103}, //8333 #CJK UNIFIED IDEOGRAPH
+ {0xD94B, 0x6118}, //8334 #CJK UNIFIED IDEOGRAPH
+ {0xD94C, 0x611D}, //8335 #CJK UNIFIED IDEOGRAPH
+ {0xD94D, 0x6110}, //8336 #CJK UNIFIED IDEOGRAPH
+ {0xD94E, 0x60FF}, //8337 #CJK UNIFIED IDEOGRAPH
+ {0xD94F, 0x6104}, //8338 #CJK UNIFIED IDEOGRAPH
+ {0xD950, 0x610B}, //8339 #CJK UNIFIED IDEOGRAPH
+ {0xD951, 0x624A}, //8340 #CJK UNIFIED IDEOGRAPH
+ {0xD952, 0x6394}, //8341 #CJK UNIFIED IDEOGRAPH
+ {0xD953, 0x63B1}, //8342 #CJK UNIFIED IDEOGRAPH
+ {0xD954, 0x63B0}, //8343 #CJK UNIFIED IDEOGRAPH
+ {0xD955, 0x63CE}, //8344 #CJK UNIFIED IDEOGRAPH
+ {0xD956, 0x63E5}, //8345 #CJK UNIFIED IDEOGRAPH
+ {0xD957, 0x63E8}, //8346 #CJK UNIFIED IDEOGRAPH
+ {0xD958, 0x63EF}, //8347 #CJK UNIFIED IDEOGRAPH
+ {0xD959, 0x63C3}, //8348 #CJK UNIFIED IDEOGRAPH
+ {0xD95A, 0x649D}, //8349 #CJK UNIFIED IDEOGRAPH
+ {0xD95B, 0x63F3}, //8350 #CJK UNIFIED IDEOGRAPH
+ {0xD95C, 0x63CA}, //8351 #CJK UNIFIED IDEOGRAPH
+ {0xD95D, 0x63E0}, //8352 #CJK UNIFIED IDEOGRAPH
+ {0xD95E, 0x63F6}, //8353 #CJK UNIFIED IDEOGRAPH
+ {0xD95F, 0x63D5}, //8354 #CJK UNIFIED IDEOGRAPH
+ {0xD960, 0x63F2}, //8355 #CJK UNIFIED IDEOGRAPH
+ {0xD961, 0x63F5}, //8356 #CJK UNIFIED IDEOGRAPH
+ {0xD962, 0x6461}, //8357 #CJK UNIFIED IDEOGRAPH
+ {0xD963, 0x63DF}, //8358 #CJK UNIFIED IDEOGRAPH
+ {0xD964, 0x63BE}, //8359 #CJK UNIFIED IDEOGRAPH
+ {0xD965, 0x63DD}, //8360 #CJK UNIFIED IDEOGRAPH
+ {0xD966, 0x63DC}, //8361 #CJK UNIFIED IDEOGRAPH
+ {0xD967, 0x63C4}, //8362 #CJK UNIFIED IDEOGRAPH
+ {0xD968, 0x63D8}, //8363 #CJK UNIFIED IDEOGRAPH
+ {0xD969, 0x63D3}, //8364 #CJK UNIFIED IDEOGRAPH
+ {0xD96A, 0x63C2}, //8365 #CJK UNIFIED IDEOGRAPH
+ {0xD96B, 0x63C7}, //8366 #CJK UNIFIED IDEOGRAPH
+ {0xD96C, 0x63CC}, //8367 #CJK UNIFIED IDEOGRAPH
+ {0xD96D, 0x63CB}, //8368 #CJK UNIFIED IDEOGRAPH
+ {0xD96E, 0x63C8}, //8369 #CJK UNIFIED IDEOGRAPH
+ {0xD96F, 0x63F0}, //8370 #CJK UNIFIED IDEOGRAPH
+ {0xD970, 0x63D7}, //8371 #CJK UNIFIED IDEOGRAPH
+ {0xD971, 0x63D9}, //8372 #CJK UNIFIED IDEOGRAPH
+ {0xD972, 0x6532}, //8373 #CJK UNIFIED IDEOGRAPH
+ {0xD973, 0x6567}, //8374 #CJK UNIFIED IDEOGRAPH
+ {0xD974, 0x656A}, //8375 #CJK UNIFIED IDEOGRAPH
+ {0xD975, 0x6564}, //8376 #CJK UNIFIED IDEOGRAPH
+ {0xD976, 0x655C}, //8377 #CJK UNIFIED IDEOGRAPH
+ {0xD977, 0x6568}, //8378 #CJK UNIFIED IDEOGRAPH
+ {0xD978, 0x6565}, //8379 #CJK UNIFIED IDEOGRAPH
+ {0xD979, 0x658C}, //8380 #CJK UNIFIED IDEOGRAPH
+ {0xD97A, 0x659D}, //8381 #CJK UNIFIED IDEOGRAPH
+ {0xD97B, 0x659E}, //8382 #CJK UNIFIED IDEOGRAPH
+ {0xD97C, 0x65AE}, //8383 #CJK UNIFIED IDEOGRAPH
+ {0xD97D, 0x65D0}, //8384 #CJK UNIFIED IDEOGRAPH
+ {0xD97E, 0x65D2}, //8385 #CJK UNIFIED IDEOGRAPH
+ {0xD9A1, 0x667C}, //8386 #CJK UNIFIED IDEOGRAPH
+ {0xD9A2, 0x666C}, //8387 #CJK UNIFIED IDEOGRAPH
+ {0xD9A3, 0x667B}, //8388 #CJK UNIFIED IDEOGRAPH
+ {0xD9A4, 0x6680}, //8389 #CJK UNIFIED IDEOGRAPH
+ {0xD9A5, 0x6671}, //8390 #CJK UNIFIED IDEOGRAPH
+ {0xD9A6, 0x6679}, //8391 #CJK UNIFIED IDEOGRAPH
+ {0xD9A7, 0x666A}, //8392 #CJK UNIFIED IDEOGRAPH
+ {0xD9A8, 0x6672}, //8393 #CJK UNIFIED IDEOGRAPH
+ {0xD9A9, 0x6701}, //8394 #CJK UNIFIED IDEOGRAPH
+ {0xD9AA, 0x690C}, //8395 #CJK UNIFIED IDEOGRAPH
+ {0xD9AB, 0x68D3}, //8396 #CJK UNIFIED IDEOGRAPH
+ {0xD9AC, 0x6904}, //8397 #CJK UNIFIED IDEOGRAPH
+ {0xD9AD, 0x68DC}, //8398 #CJK UNIFIED IDEOGRAPH
+ {0xD9AE, 0x692A}, //8399 #CJK UNIFIED IDEOGRAPH
+ {0xD9AF, 0x68EC}, //8400 #CJK UNIFIED IDEOGRAPH
+ {0xD9B0, 0x68EA}, //8401 #CJK UNIFIED IDEOGRAPH
+ {0xD9B1, 0x68F1}, //8402 #CJK UNIFIED IDEOGRAPH
+ {0xD9B2, 0x690F}, //8403 #CJK UNIFIED IDEOGRAPH
+ {0xD9B3, 0x68D6}, //8404 #CJK UNIFIED IDEOGRAPH
+ {0xD9B4, 0x68F7}, //8405 #CJK UNIFIED IDEOGRAPH
+ {0xD9B5, 0x68EB}, //8406 #CJK UNIFIED IDEOGRAPH
+ {0xD9B6, 0x68E4}, //8407 #CJK UNIFIED IDEOGRAPH
+ {0xD9B7, 0x68F6}, //8408 #CJK UNIFIED IDEOGRAPH
+ {0xD9B8, 0x6913}, //8409 #CJK UNIFIED IDEOGRAPH
+ {0xD9B9, 0x6910}, //8410 #CJK UNIFIED IDEOGRAPH
+ {0xD9BA, 0x68F3}, //8411 #CJK UNIFIED IDEOGRAPH
+ {0xD9BB, 0x68E1}, //8412 #CJK UNIFIED IDEOGRAPH
+ {0xD9BC, 0x6907}, //8413 #CJK UNIFIED IDEOGRAPH
+ {0xD9BD, 0x68CC}, //8414 #CJK UNIFIED IDEOGRAPH
+ {0xD9BE, 0x6908}, //8415 #CJK UNIFIED IDEOGRAPH
+ {0xD9BF, 0x6970}, //8416 #CJK UNIFIED IDEOGRAPH
+ {0xD9C0, 0x68B4}, //8417 #CJK UNIFIED IDEOGRAPH
+ {0xD9C1, 0x6911}, //8418 #CJK UNIFIED IDEOGRAPH
+ {0xD9C2, 0x68EF}, //8419 #CJK UNIFIED IDEOGRAPH
+ {0xD9C3, 0x68C6}, //8420 #CJK UNIFIED IDEOGRAPH
+ {0xD9C4, 0x6914}, //8421 #CJK UNIFIED IDEOGRAPH
+ {0xD9C5, 0x68F8}, //8422 #CJK UNIFIED IDEOGRAPH
+ {0xD9C6, 0x68D0}, //8423 #CJK UNIFIED IDEOGRAPH
+ {0xD9C7, 0x68FD}, //8424 #CJK UNIFIED IDEOGRAPH
+ {0xD9C8, 0x68FC}, //8425 #CJK UNIFIED IDEOGRAPH
+ {0xD9C9, 0x68E8}, //8426 #CJK UNIFIED IDEOGRAPH
+ {0xD9CA, 0x690B}, //8427 #CJK UNIFIED IDEOGRAPH
+ {0xD9CB, 0x690A}, //8428 #CJK UNIFIED IDEOGRAPH
+ {0xD9CC, 0x6917}, //8429 #CJK UNIFIED IDEOGRAPH
+ {0xD9CD, 0x68CE}, //8430 #CJK UNIFIED IDEOGRAPH
+ {0xD9CE, 0x68C8}, //8431 #CJK UNIFIED IDEOGRAPH
+ {0xD9CF, 0x68DD}, //8432 #CJK UNIFIED IDEOGRAPH
+ {0xD9D0, 0x68DE}, //8433 #CJK UNIFIED IDEOGRAPH
+ {0xD9D1, 0x68E6}, //8434 #CJK UNIFIED IDEOGRAPH
+ {0xD9D2, 0x68F4}, //8435 #CJK UNIFIED IDEOGRAPH
+ {0xD9D3, 0x68D1}, //8436 #CJK UNIFIED IDEOGRAPH
+ {0xD9D4, 0x6906}, //8437 #CJK UNIFIED IDEOGRAPH
+ {0xD9D5, 0x68D4}, //8438 #CJK UNIFIED IDEOGRAPH
+ {0xD9D6, 0x68E9}, //8439 #CJK UNIFIED IDEOGRAPH
+ {0xD9D7, 0x6915}, //8440 #CJK UNIFIED IDEOGRAPH
+ {0xD9D8, 0x6925}, //8441 #CJK UNIFIED IDEOGRAPH
+ {0xD9D9, 0x68C7}, //8442 #CJK UNIFIED IDEOGRAPH
+ {0xD9DA, 0x6B39}, //8443 #CJK UNIFIED IDEOGRAPH
+ {0xD9DB, 0x6B3B}, //8444 #CJK UNIFIED IDEOGRAPH
+ {0xD9DC, 0x6B3F}, //8445 #CJK UNIFIED IDEOGRAPH
+ {0xD9DD, 0x6B3C}, //8446 #CJK UNIFIED IDEOGRAPH
+ {0xD9DE, 0x6B94}, //8447 #CJK UNIFIED IDEOGRAPH
+ {0xD9DF, 0x6B97}, //8448 #CJK UNIFIED IDEOGRAPH
+ {0xD9E0, 0x6B99}, //8449 #CJK UNIFIED IDEOGRAPH
+ {0xD9E1, 0x6B95}, //8450 #CJK UNIFIED IDEOGRAPH
+ {0xD9E2, 0x6BBD}, //8451 #CJK UNIFIED IDEOGRAPH
+ {0xD9E3, 0x6BF0}, //8452 #CJK UNIFIED IDEOGRAPH
+ {0xD9E4, 0x6BF2}, //8453 #CJK UNIFIED IDEOGRAPH
+ {0xD9E5, 0x6BF3}, //8454 #CJK UNIFIED IDEOGRAPH
+ {0xD9E6, 0x6C30}, //8455 #CJK UNIFIED IDEOGRAPH
+ {0xD9E7, 0x6DFC}, //8456 #CJK UNIFIED IDEOGRAPH
+ {0xD9E8, 0x6E46}, //8457 #CJK UNIFIED IDEOGRAPH
+ {0xD9E9, 0x6E47}, //8458 #CJK UNIFIED IDEOGRAPH
+ {0xD9EA, 0x6E1F}, //8459 #CJK UNIFIED IDEOGRAPH
+ {0xD9EB, 0x6E49}, //8460 #CJK UNIFIED IDEOGRAPH
+ {0xD9EC, 0x6E88}, //8461 #CJK UNIFIED IDEOGRAPH
+ {0xD9ED, 0x6E3C}, //8462 #CJK UNIFIED IDEOGRAPH
+ {0xD9EE, 0x6E3D}, //8463 #CJK UNIFIED IDEOGRAPH
+ {0xD9EF, 0x6E45}, //8464 #CJK UNIFIED IDEOGRAPH
+ {0xD9F0, 0x6E62}, //8465 #CJK UNIFIED IDEOGRAPH
+ {0xD9F1, 0x6E2B}, //8466 #CJK UNIFIED IDEOGRAPH
+ {0xD9F2, 0x6E3F}, //8467 #CJK UNIFIED IDEOGRAPH
+ {0xD9F3, 0x6E41}, //8468 #CJK UNIFIED IDEOGRAPH
+ {0xD9F4, 0x6E5D}, //8469 #CJK UNIFIED IDEOGRAPH
+ {0xD9F5, 0x6E73}, //8470 #CJK UNIFIED IDEOGRAPH
+ {0xD9F6, 0x6E1C}, //8471 #CJK UNIFIED IDEOGRAPH
+ {0xD9F7, 0x6E33}, //8472 #CJK UNIFIED IDEOGRAPH
+ {0xD9F8, 0x6E4B}, //8473 #CJK UNIFIED IDEOGRAPH
+ {0xD9F9, 0x6E40}, //8474 #CJK UNIFIED IDEOGRAPH
+ {0xD9FA, 0x6E51}, //8475 #CJK UNIFIED IDEOGRAPH
+ {0xD9FB, 0x6E3B}, //8476 #CJK UNIFIED IDEOGRAPH
+ {0xD9FC, 0x6E03}, //8477 #CJK UNIFIED IDEOGRAPH
+ {0xD9FD, 0x6E2E}, //8478 #CJK UNIFIED IDEOGRAPH
+ {0xD9FE, 0x6E5E}, //8479 #CJK UNIFIED IDEOGRAPH
+ {0xDA40, 0x6E68}, //8480 #CJK UNIFIED IDEOGRAPH
+ {0xDA41, 0x6E5C}, //8481 #CJK UNIFIED IDEOGRAPH
+ {0xDA42, 0x6E61}, //8482 #CJK UNIFIED IDEOGRAPH
+ {0xDA43, 0x6E31}, //8483 #CJK UNIFIED IDEOGRAPH
+ {0xDA44, 0x6E28}, //8484 #CJK UNIFIED IDEOGRAPH
+ {0xDA45, 0x6E60}, //8485 #CJK UNIFIED IDEOGRAPH
+ {0xDA46, 0x6E71}, //8486 #CJK UNIFIED IDEOGRAPH
+ {0xDA47, 0x6E6B}, //8487 #CJK UNIFIED IDEOGRAPH
+ {0xDA48, 0x6E39}, //8488 #CJK UNIFIED IDEOGRAPH
+ {0xDA49, 0x6E22}, //8489 #CJK UNIFIED IDEOGRAPH
+ {0xDA4A, 0x6E30}, //8490 #CJK UNIFIED IDEOGRAPH
+ {0xDA4B, 0x6E53}, //8491 #CJK UNIFIED IDEOGRAPH
+ {0xDA4C, 0x6E65}, //8492 #CJK UNIFIED IDEOGRAPH
+ {0xDA4D, 0x6E27}, //8493 #CJK UNIFIED IDEOGRAPH
+ {0xDA4E, 0x6E78}, //8494 #CJK UNIFIED IDEOGRAPH
+ {0xDA4F, 0x6E64}, //8495 #CJK UNIFIED IDEOGRAPH
+ {0xDA50, 0x6E77}, //8496 #CJK UNIFIED IDEOGRAPH
+ {0xDA51, 0x6E55}, //8497 #CJK UNIFIED IDEOGRAPH
+ {0xDA52, 0x6E79}, //8498 #CJK UNIFIED IDEOGRAPH
+ {0xDA53, 0x6E52}, //8499 #CJK UNIFIED IDEOGRAPH
+ {0xDA54, 0x6E66}, //8500 #CJK UNIFIED IDEOGRAPH
+ {0xDA55, 0x6E35}, //8501 #CJK UNIFIED IDEOGRAPH
+ {0xDA56, 0x6E36}, //8502 #CJK UNIFIED IDEOGRAPH
+ {0xDA57, 0x6E5A}, //8503 #CJK UNIFIED IDEOGRAPH
+ {0xDA58, 0x7120}, //8504 #CJK UNIFIED IDEOGRAPH
+ {0xDA59, 0x711E}, //8505 #CJK UNIFIED IDEOGRAPH
+ {0xDA5A, 0x712F}, //8506 #CJK UNIFIED IDEOGRAPH
+ {0xDA5B, 0x70FB}, //8507 #CJK UNIFIED IDEOGRAPH
+ {0xDA5C, 0x712E}, //8508 #CJK UNIFIED IDEOGRAPH
+ {0xDA5D, 0x7131}, //8509 #CJK UNIFIED IDEOGRAPH
+ {0xDA5E, 0x7123}, //8510 #CJK UNIFIED IDEOGRAPH
+ {0xDA5F, 0x7125}, //8511 #CJK UNIFIED IDEOGRAPH
+ {0xDA60, 0x7122}, //8512 #CJK UNIFIED IDEOGRAPH
+ {0xDA61, 0x7132}, //8513 #CJK UNIFIED IDEOGRAPH
+ {0xDA62, 0x711F}, //8514 #CJK UNIFIED IDEOGRAPH
+ {0xDA63, 0x7128}, //8515 #CJK UNIFIED IDEOGRAPH
+ {0xDA64, 0x713A}, //8516 #CJK UNIFIED IDEOGRAPH
+ {0xDA65, 0x711B}, //8517 #CJK UNIFIED IDEOGRAPH
+ {0xDA66, 0x724B}, //8518 #CJK UNIFIED IDEOGRAPH
+ {0xDA67, 0x725A}, //8519 #CJK UNIFIED IDEOGRAPH
+ {0xDA68, 0x7288}, //8520 #CJK UNIFIED IDEOGRAPH
+ {0xDA69, 0x7289}, //8521 #CJK UNIFIED IDEOGRAPH
+ {0xDA6A, 0x7286}, //8522 #CJK UNIFIED IDEOGRAPH
+ {0xDA6B, 0x7285}, //8523 #CJK UNIFIED IDEOGRAPH
+ {0xDA6C, 0x728B}, //8524 #CJK UNIFIED IDEOGRAPH
+ {0xDA6D, 0x7312}, //8525 #CJK UNIFIED IDEOGRAPH
+ {0xDA6E, 0x730B}, //8526 #CJK UNIFIED IDEOGRAPH
+ {0xDA6F, 0x7330}, //8527 #CJK UNIFIED IDEOGRAPH
+ {0xDA70, 0x7322}, //8528 #CJK UNIFIED IDEOGRAPH
+ {0xDA71, 0x7331}, //8529 #CJK UNIFIED IDEOGRAPH
+ {0xDA72, 0x7333}, //8530 #CJK UNIFIED IDEOGRAPH
+ {0xDA73, 0x7327}, //8531 #CJK UNIFIED IDEOGRAPH
+ {0xDA74, 0x7332}, //8532 #CJK UNIFIED IDEOGRAPH
+ {0xDA75, 0x732D}, //8533 #CJK UNIFIED IDEOGRAPH
+ {0xDA76, 0x7326}, //8534 #CJK UNIFIED IDEOGRAPH
+ {0xDA77, 0x7323}, //8535 #CJK UNIFIED IDEOGRAPH
+ {0xDA78, 0x7335}, //8536 #CJK UNIFIED IDEOGRAPH
+ {0xDA79, 0x730C}, //8537 #CJK UNIFIED IDEOGRAPH
+ {0xDA7A, 0x742E}, //8538 #CJK UNIFIED IDEOGRAPH
+ {0xDA7B, 0x742C}, //8539 #CJK UNIFIED IDEOGRAPH
+ {0xDA7C, 0x7430}, //8540 #CJK UNIFIED IDEOGRAPH
+ {0xDA7D, 0x742B}, //8541 #CJK UNIFIED IDEOGRAPH
+ {0xDA7E, 0x7416}, //8542 #CJK UNIFIED IDEOGRAPH
+ {0xDAA1, 0x741A}, //8543 #CJK UNIFIED IDEOGRAPH
+ {0xDAA2, 0x7421}, //8544 #CJK UNIFIED IDEOGRAPH
+ {0xDAA3, 0x742D}, //8545 #CJK UNIFIED IDEOGRAPH
+ {0xDAA4, 0x7431}, //8546 #CJK UNIFIED IDEOGRAPH
+ {0xDAA5, 0x7424}, //8547 #CJK UNIFIED IDEOGRAPH
+ {0xDAA6, 0x7423}, //8548 #CJK UNIFIED IDEOGRAPH
+ {0xDAA7, 0x741D}, //8549 #CJK UNIFIED IDEOGRAPH
+ {0xDAA8, 0x7429}, //8550 #CJK UNIFIED IDEOGRAPH
+ {0xDAA9, 0x7420}, //8551 #CJK UNIFIED IDEOGRAPH
+ {0xDAAA, 0x7432}, //8552 #CJK UNIFIED IDEOGRAPH
+ {0xDAAB, 0x74FB}, //8553 #CJK UNIFIED IDEOGRAPH
+ {0xDAAC, 0x752F}, //8554 #CJK UNIFIED IDEOGRAPH
+ {0xDAAD, 0x756F}, //8555 #CJK UNIFIED IDEOGRAPH
+ {0xDAAE, 0x756C}, //8556 #CJK UNIFIED IDEOGRAPH
+ {0xDAAF, 0x75E7}, //8557 #CJK UNIFIED IDEOGRAPH
+ {0xDAB0, 0x75DA}, //8558 #CJK UNIFIED IDEOGRAPH
+ {0xDAB1, 0x75E1}, //8559 #CJK UNIFIED IDEOGRAPH
+ {0xDAB2, 0x75E6}, //8560 #CJK UNIFIED IDEOGRAPH
+ {0xDAB3, 0x75DD}, //8561 #CJK UNIFIED IDEOGRAPH
+ {0xDAB4, 0x75DF}, //8562 #CJK UNIFIED IDEOGRAPH
+ {0xDAB5, 0x75E4}, //8563 #CJK UNIFIED IDEOGRAPH
+ {0xDAB6, 0x75D7}, //8564 #CJK UNIFIED IDEOGRAPH
+ {0xDAB7, 0x7695}, //8565 #CJK UNIFIED IDEOGRAPH
+ {0xDAB8, 0x7692}, //8566 #CJK UNIFIED IDEOGRAPH
+ {0xDAB9, 0x76DA}, //8567 #CJK UNIFIED IDEOGRAPH
+ {0xDABA, 0x7746}, //8568 #CJK UNIFIED IDEOGRAPH
+ {0xDABB, 0x7747}, //8569 #CJK UNIFIED IDEOGRAPH
+ {0xDABC, 0x7744}, //8570 #CJK UNIFIED IDEOGRAPH
+ {0xDABD, 0x774D}, //8571 #CJK UNIFIED IDEOGRAPH
+ {0xDABE, 0x7745}, //8572 #CJK UNIFIED IDEOGRAPH
+ {0xDABF, 0x774A}, //8573 #CJK UNIFIED IDEOGRAPH
+ {0xDAC0, 0x774E}, //8574 #CJK UNIFIED IDEOGRAPH
+ {0xDAC1, 0x774B}, //8575 #CJK UNIFIED IDEOGRAPH
+ {0xDAC2, 0x774C}, //8576 #CJK UNIFIED IDEOGRAPH
+ {0xDAC3, 0x77DE}, //8577 #CJK UNIFIED IDEOGRAPH
+ {0xDAC4, 0x77EC}, //8578 #CJK UNIFIED IDEOGRAPH
+ {0xDAC5, 0x7860}, //8579 #CJK UNIFIED IDEOGRAPH
+ {0xDAC6, 0x7864}, //8580 #CJK UNIFIED IDEOGRAPH
+ {0xDAC7, 0x7865}, //8581 #CJK UNIFIED IDEOGRAPH
+ {0xDAC8, 0x785C}, //8582 #CJK UNIFIED IDEOGRAPH
+ {0xDAC9, 0x786D}, //8583 #CJK UNIFIED IDEOGRAPH
+ {0xDACA, 0x7871}, //8584 #CJK UNIFIED IDEOGRAPH
+ {0xDACB, 0x786A}, //8585 #CJK UNIFIED IDEOGRAPH
+ {0xDACC, 0x786E}, //8586 #CJK UNIFIED IDEOGRAPH
+ {0xDACD, 0x7870}, //8587 #CJK UNIFIED IDEOGRAPH
+ {0xDACE, 0x7869}, //8588 #CJK UNIFIED IDEOGRAPH
+ {0xDACF, 0x7868}, //8589 #CJK UNIFIED IDEOGRAPH
+ {0xDAD0, 0x785E}, //8590 #CJK UNIFIED IDEOGRAPH
+ {0xDAD1, 0x7862}, //8591 #CJK UNIFIED IDEOGRAPH
+ {0xDAD2, 0x7974}, //8592 #CJK UNIFIED IDEOGRAPH
+ {0xDAD3, 0x7973}, //8593 #CJK UNIFIED IDEOGRAPH
+ {0xDAD4, 0x7972}, //8594 #CJK UNIFIED IDEOGRAPH
+ {0xDAD5, 0x7970}, //8595 #CJK UNIFIED IDEOGRAPH
+ {0xDAD6, 0x7A02}, //8596 #CJK UNIFIED IDEOGRAPH
+ {0xDAD7, 0x7A0A}, //8597 #CJK UNIFIED IDEOGRAPH
+ {0xDAD8, 0x7A03}, //8598 #CJK UNIFIED IDEOGRAPH
+ {0xDAD9, 0x7A0C}, //8599 #CJK UNIFIED IDEOGRAPH
+ {0xDADA, 0x7A04}, //8600 #CJK UNIFIED IDEOGRAPH
+ {0xDADB, 0x7A99}, //8601 #CJK UNIFIED IDEOGRAPH
+ {0xDADC, 0x7AE6}, //8602 #CJK UNIFIED IDEOGRAPH
+ {0xDADD, 0x7AE4}, //8603 #CJK UNIFIED IDEOGRAPH
+ {0xDADE, 0x7B4A}, //8604 #CJK UNIFIED IDEOGRAPH
+ {0xDADF, 0x7B3B}, //8605 #CJK UNIFIED IDEOGRAPH
+ {0xDAE0, 0x7B44}, //8606 #CJK UNIFIED IDEOGRAPH
+ {0xDAE1, 0x7B48}, //8607 #CJK UNIFIED IDEOGRAPH
+ {0xDAE2, 0x7B4C}, //8608 #CJK UNIFIED IDEOGRAPH
+ {0xDAE3, 0x7B4E}, //8609 #CJK UNIFIED IDEOGRAPH
+ {0xDAE4, 0x7B40}, //8610 #CJK UNIFIED IDEOGRAPH
+ {0xDAE5, 0x7B58}, //8611 #CJK UNIFIED IDEOGRAPH
+ {0xDAE6, 0x7B45}, //8612 #CJK UNIFIED IDEOGRAPH
+ {0xDAE7, 0x7CA2}, //8613 #CJK UNIFIED IDEOGRAPH
+ {0xDAE8, 0x7C9E}, //8614 #CJK UNIFIED IDEOGRAPH
+ {0xDAE9, 0x7CA8}, //8615 #CJK UNIFIED IDEOGRAPH
+ {0xDAEA, 0x7CA1}, //8616 #CJK UNIFIED IDEOGRAPH
+ {0xDAEB, 0x7D58}, //8617 #CJK UNIFIED IDEOGRAPH
+ {0xDAEC, 0x7D6F}, //8618 #CJK UNIFIED IDEOGRAPH
+ {0xDAED, 0x7D63}, //8619 #CJK UNIFIED IDEOGRAPH
+ {0xDAEE, 0x7D53}, //8620 #CJK UNIFIED IDEOGRAPH
+ {0xDAEF, 0x7D56}, //8621 #CJK UNIFIED IDEOGRAPH
+ {0xDAF0, 0x7D67}, //8622 #CJK UNIFIED IDEOGRAPH
+ {0xDAF1, 0x7D6A}, //8623 #CJK UNIFIED IDEOGRAPH
+ {0xDAF2, 0x7D4F}, //8624 #CJK UNIFIED IDEOGRAPH
+ {0xDAF3, 0x7D6D}, //8625 #CJK UNIFIED IDEOGRAPH
+ {0xDAF4, 0x7D5C}, //8626 #CJK UNIFIED IDEOGRAPH
+ {0xDAF5, 0x7D6B}, //8627 #CJK UNIFIED IDEOGRAPH
+ {0xDAF6, 0x7D52}, //8628 #CJK UNIFIED IDEOGRAPH
+ {0xDAF7, 0x7D54}, //8629 #CJK UNIFIED IDEOGRAPH
+ {0xDAF8, 0x7D69}, //8630 #CJK UNIFIED IDEOGRAPH
+ {0xDAF9, 0x7D51}, //8631 #CJK UNIFIED IDEOGRAPH
+ {0xDAFA, 0x7D5F}, //8632 #CJK UNIFIED IDEOGRAPH
+ {0xDAFB, 0x7D4E}, //8633 #CJK UNIFIED IDEOGRAPH
+ {0xDAFC, 0x7F3E}, //8634 #CJK UNIFIED IDEOGRAPH
+ {0xDAFD, 0x7F3F}, //8635 #CJK UNIFIED IDEOGRAPH
+ {0xDAFE, 0x7F65}, //8636 #CJK UNIFIED IDEOGRAPH
+ {0xDB40, 0x7F66}, //8637 #CJK UNIFIED IDEOGRAPH
+ {0xDB41, 0x7FA2}, //8638 #CJK UNIFIED IDEOGRAPH
+ {0xDB42, 0x7FA0}, //8639 #CJK UNIFIED IDEOGRAPH
+ {0xDB43, 0x7FA1}, //8640 #CJK UNIFIED IDEOGRAPH
+ {0xDB44, 0x7FD7}, //8641 #CJK UNIFIED IDEOGRAPH
+ {0xDB45, 0x8051}, //8642 #CJK UNIFIED IDEOGRAPH
+ {0xDB46, 0x804F}, //8643 #CJK UNIFIED IDEOGRAPH
+ {0xDB47, 0x8050}, //8644 #CJK UNIFIED IDEOGRAPH
+ {0xDB48, 0x80FE}, //8645 #CJK UNIFIED IDEOGRAPH
+ {0xDB49, 0x80D4}, //8646 #CJK UNIFIED IDEOGRAPH
+ {0xDB4A, 0x8143}, //8647 #CJK UNIFIED IDEOGRAPH
+ {0xDB4B, 0x814A}, //8648 #CJK UNIFIED IDEOGRAPH
+ {0xDB4C, 0x8152}, //8649 #CJK UNIFIED IDEOGRAPH
+ {0xDB4D, 0x814F}, //8650 #CJK UNIFIED IDEOGRAPH
+ {0xDB4E, 0x8147}, //8651 #CJK UNIFIED IDEOGRAPH
+ {0xDB4F, 0x813D}, //8652 #CJK UNIFIED IDEOGRAPH
+ {0xDB50, 0x814D}, //8653 #CJK UNIFIED IDEOGRAPH
+ {0xDB51, 0x813A}, //8654 #CJK UNIFIED IDEOGRAPH
+ {0xDB52, 0x81E6}, //8655 #CJK UNIFIED IDEOGRAPH
+ {0xDB53, 0x81EE}, //8656 #CJK UNIFIED IDEOGRAPH
+ {0xDB54, 0x81F7}, //8657 #CJK UNIFIED IDEOGRAPH
+ {0xDB55, 0x81F8}, //8658 #CJK UNIFIED IDEOGRAPH
+ {0xDB56, 0x81F9}, //8659 #CJK UNIFIED IDEOGRAPH
+ {0xDB57, 0x8204}, //8660 #CJK UNIFIED IDEOGRAPH
+ {0xDB58, 0x823C}, //8661 #CJK UNIFIED IDEOGRAPH
+ {0xDB59, 0x823D}, //8662 #CJK UNIFIED IDEOGRAPH
+ {0xDB5A, 0x823F}, //8663 #CJK UNIFIED IDEOGRAPH
+ {0xDB5B, 0x8275}, //8664 #CJK UNIFIED IDEOGRAPH
+ {0xDB5C, 0x833B}, //8665 #CJK UNIFIED IDEOGRAPH
+ {0xDB5D, 0x83CF}, //8666 #CJK UNIFIED IDEOGRAPH
+ {0xDB5E, 0x83F9}, //8667 #CJK UNIFIED IDEOGRAPH
+ {0xDB5F, 0x8423}, //8668 #CJK UNIFIED IDEOGRAPH
+ {0xDB60, 0x83C0}, //8669 #CJK UNIFIED IDEOGRAPH
+ {0xDB61, 0x83E8}, //8670 #CJK UNIFIED IDEOGRAPH
+ {0xDB62, 0x8412}, //8671 #CJK UNIFIED IDEOGRAPH
+ {0xDB63, 0x83E7}, //8672 #CJK UNIFIED IDEOGRAPH
+ {0xDB64, 0x83E4}, //8673 #CJK UNIFIED IDEOGRAPH
+ {0xDB65, 0x83FC}, //8674 #CJK UNIFIED IDEOGRAPH
+ {0xDB66, 0x83F6}, //8675 #CJK UNIFIED IDEOGRAPH
+ {0xDB67, 0x8410}, //8676 #CJK UNIFIED IDEOGRAPH
+ {0xDB68, 0x83C6}, //8677 #CJK UNIFIED IDEOGRAPH
+ {0xDB69, 0x83C8}, //8678 #CJK UNIFIED IDEOGRAPH
+ {0xDB6A, 0x83EB}, //8679 #CJK UNIFIED IDEOGRAPH
+ {0xDB6B, 0x83E3}, //8680 #CJK UNIFIED IDEOGRAPH
+ {0xDB6C, 0x83BF}, //8681 #CJK UNIFIED IDEOGRAPH
+ {0xDB6D, 0x8401}, //8682 #CJK UNIFIED IDEOGRAPH
+ {0xDB6E, 0x83DD}, //8683 #CJK UNIFIED IDEOGRAPH
+ {0xDB6F, 0x83E5}, //8684 #CJK UNIFIED IDEOGRAPH
+ {0xDB70, 0x83D8}, //8685 #CJK UNIFIED IDEOGRAPH
+ {0xDB71, 0x83FF}, //8686 #CJK UNIFIED IDEOGRAPH
+ {0xDB72, 0x83E1}, //8687 #CJK UNIFIED IDEOGRAPH
+ {0xDB73, 0x83CB}, //8688 #CJK UNIFIED IDEOGRAPH
+ {0xDB74, 0x83CE}, //8689 #CJK UNIFIED IDEOGRAPH
+ {0xDB75, 0x83D6}, //8690 #CJK UNIFIED IDEOGRAPH
+ {0xDB76, 0x83F5}, //8691 #CJK UNIFIED IDEOGRAPH
+ {0xDB77, 0x83C9}, //8692 #CJK UNIFIED IDEOGRAPH
+ {0xDB78, 0x8409}, //8693 #CJK UNIFIED IDEOGRAPH
+ {0xDB79, 0x840F}, //8694 #CJK UNIFIED IDEOGRAPH
+ {0xDB7A, 0x83DE}, //8695 #CJK UNIFIED IDEOGRAPH
+ {0xDB7B, 0x8411}, //8696 #CJK UNIFIED IDEOGRAPH
+ {0xDB7C, 0x8406}, //8697 #CJK UNIFIED IDEOGRAPH
+ {0xDB7D, 0x83C2}, //8698 #CJK UNIFIED IDEOGRAPH
+ {0xDB7E, 0x83F3}, //8699 #CJK UNIFIED IDEOGRAPH
+ {0xDBA1, 0x83D5}, //8700 #CJK UNIFIED IDEOGRAPH
+ {0xDBA2, 0x83FA}, //8701 #CJK UNIFIED IDEOGRAPH
+ {0xDBA3, 0x83C7}, //8702 #CJK UNIFIED IDEOGRAPH
+ {0xDBA4, 0x83D1}, //8703 #CJK UNIFIED IDEOGRAPH
+ {0xDBA5, 0x83EA}, //8704 #CJK UNIFIED IDEOGRAPH
+ {0xDBA6, 0x8413}, //8705 #CJK UNIFIED IDEOGRAPH
+ {0xDBA7, 0x83C3}, //8706 #CJK UNIFIED IDEOGRAPH
+ {0xDBA8, 0x83EC}, //8707 #CJK UNIFIED IDEOGRAPH
+ {0xDBA9, 0x83EE}, //8708 #CJK UNIFIED IDEOGRAPH
+ {0xDBAA, 0x83C4}, //8709 #CJK UNIFIED IDEOGRAPH
+ {0xDBAB, 0x83FB}, //8710 #CJK UNIFIED IDEOGRAPH
+ {0xDBAC, 0x83D7}, //8711 #CJK UNIFIED IDEOGRAPH
+ {0xDBAD, 0x83E2}, //8712 #CJK UNIFIED IDEOGRAPH
+ {0xDBAE, 0x841B}, //8713 #CJK UNIFIED IDEOGRAPH
+ {0xDBAF, 0x83DB}, //8714 #CJK UNIFIED IDEOGRAPH
+ {0xDBB0, 0x83FE}, //8715 #CJK UNIFIED IDEOGRAPH
+ {0xDBB1, 0x86D8}, //8716 #CJK UNIFIED IDEOGRAPH
+ {0xDBB2, 0x86E2}, //8717 #CJK UNIFIED IDEOGRAPH
+ {0xDBB3, 0x86E6}, //8718 #CJK UNIFIED IDEOGRAPH
+ {0xDBB4, 0x86D3}, //8719 #CJK UNIFIED IDEOGRAPH
+ {0xDBB5, 0x86E3}, //8720 #CJK UNIFIED IDEOGRAPH
+ {0xDBB6, 0x86DA}, //8721 #CJK UNIFIED IDEOGRAPH
+ {0xDBB7, 0x86EA}, //8722 #CJK UNIFIED IDEOGRAPH
+ {0xDBB8, 0x86DD}, //8723 #CJK UNIFIED IDEOGRAPH
+ {0xDBB9, 0x86EB}, //8724 #CJK UNIFIED IDEOGRAPH
+ {0xDBBA, 0x86DC}, //8725 #CJK UNIFIED IDEOGRAPH
+ {0xDBBB, 0x86EC}, //8726 #CJK UNIFIED IDEOGRAPH
+ {0xDBBC, 0x86E9}, //8727 #CJK UNIFIED IDEOGRAPH
+ {0xDBBD, 0x86D7}, //8728 #CJK UNIFIED IDEOGRAPH
+ {0xDBBE, 0x86E8}, //8729 #CJK UNIFIED IDEOGRAPH
+ {0xDBBF, 0x86D1}, //8730 #CJK UNIFIED IDEOGRAPH
+ {0xDBC0, 0x8848}, //8731 #CJK UNIFIED IDEOGRAPH
+ {0xDBC1, 0x8856}, //8732 #CJK UNIFIED IDEOGRAPH
+ {0xDBC2, 0x8855}, //8733 #CJK UNIFIED IDEOGRAPH
+ {0xDBC3, 0x88BA}, //8734 #CJK UNIFIED IDEOGRAPH
+ {0xDBC4, 0x88D7}, //8735 #CJK UNIFIED IDEOGRAPH
+ {0xDBC5, 0x88B9}, //8736 #CJK UNIFIED IDEOGRAPH
+ {0xDBC6, 0x88B8}, //8737 #CJK UNIFIED IDEOGRAPH
+ {0xDBC7, 0x88C0}, //8738 #CJK UNIFIED IDEOGRAPH
+ {0xDBC8, 0x88BE}, //8739 #CJK UNIFIED IDEOGRAPH
+ {0xDBC9, 0x88B6}, //8740 #CJK UNIFIED IDEOGRAPH
+ {0xDBCA, 0x88BC}, //8741 #CJK UNIFIED IDEOGRAPH
+ {0xDBCB, 0x88B7}, //8742 #CJK UNIFIED IDEOGRAPH
+ {0xDBCC, 0x88BD}, //8743 #CJK UNIFIED IDEOGRAPH
+ {0xDBCD, 0x88B2}, //8744 #CJK UNIFIED IDEOGRAPH
+ {0xDBCE, 0x8901}, //8745 #CJK UNIFIED IDEOGRAPH
+ {0xDBCF, 0x88C9}, //8746 #CJK UNIFIED IDEOGRAPH
+ {0xDBD0, 0x8995}, //8747 #CJK UNIFIED IDEOGRAPH
+ {0xDBD1, 0x8998}, //8748 #CJK UNIFIED IDEOGRAPH
+ {0xDBD2, 0x8997}, //8749 #CJK UNIFIED IDEOGRAPH
+ {0xDBD3, 0x89DD}, //8750 #CJK UNIFIED IDEOGRAPH
+ {0xDBD4, 0x89DA}, //8751 #CJK UNIFIED IDEOGRAPH
+ {0xDBD5, 0x89DB}, //8752 #CJK UNIFIED IDEOGRAPH
+ {0xDBD6, 0x8A4E}, //8753 #CJK UNIFIED IDEOGRAPH
+ {0xDBD7, 0x8A4D}, //8754 #CJK UNIFIED IDEOGRAPH
+ {0xDBD8, 0x8A39}, //8755 #CJK UNIFIED IDEOGRAPH
+ {0xDBD9, 0x8A59}, //8756 #CJK UNIFIED IDEOGRAPH
+ {0xDBDA, 0x8A40}, //8757 #CJK UNIFIED IDEOGRAPH
+ {0xDBDB, 0x8A57}, //8758 #CJK UNIFIED IDEOGRAPH
+ {0xDBDC, 0x8A58}, //8759 #CJK UNIFIED IDEOGRAPH
+ {0xDBDD, 0x8A44}, //8760 #CJK UNIFIED IDEOGRAPH
+ {0xDBDE, 0x8A45}, //8761 #CJK UNIFIED IDEOGRAPH
+ {0xDBDF, 0x8A52}, //8762 #CJK UNIFIED IDEOGRAPH
+ {0xDBE0, 0x8A48}, //8763 #CJK UNIFIED IDEOGRAPH
+ {0xDBE1, 0x8A51}, //8764 #CJK UNIFIED IDEOGRAPH
+ {0xDBE2, 0x8A4A}, //8765 #CJK UNIFIED IDEOGRAPH
+ {0xDBE3, 0x8A4C}, //8766 #CJK UNIFIED IDEOGRAPH
+ {0xDBE4, 0x8A4F}, //8767 #CJK UNIFIED IDEOGRAPH
+ {0xDBE5, 0x8C5F}, //8768 #CJK UNIFIED IDEOGRAPH
+ {0xDBE6, 0x8C81}, //8769 #CJK UNIFIED IDEOGRAPH
+ {0xDBE7, 0x8C80}, //8770 #CJK UNIFIED IDEOGRAPH
+ {0xDBE8, 0x8CBA}, //8771 #CJK UNIFIED IDEOGRAPH
+ {0xDBE9, 0x8CBE}, //8772 #CJK UNIFIED IDEOGRAPH
+ {0xDBEA, 0x8CB0}, //8773 #CJK UNIFIED IDEOGRAPH
+ {0xDBEB, 0x8CB9}, //8774 #CJK UNIFIED IDEOGRAPH
+ {0xDBEC, 0x8CB5}, //8775 #CJK UNIFIED IDEOGRAPH
+ {0xDBED, 0x8D84}, //8776 #CJK UNIFIED IDEOGRAPH
+ {0xDBEE, 0x8D80}, //8777 #CJK UNIFIED IDEOGRAPH
+ {0xDBEF, 0x8D89}, //8778 #CJK UNIFIED IDEOGRAPH
+ {0xDBF0, 0x8DD8}, //8779 #CJK UNIFIED IDEOGRAPH
+ {0xDBF1, 0x8DD3}, //8780 #CJK UNIFIED IDEOGRAPH
+ {0xDBF2, 0x8DCD}, //8781 #CJK UNIFIED IDEOGRAPH
+ {0xDBF3, 0x8DC7}, //8782 #CJK UNIFIED IDEOGRAPH
+ {0xDBF4, 0x8DD6}, //8783 #CJK UNIFIED IDEOGRAPH
+ {0xDBF5, 0x8DDC}, //8784 #CJK UNIFIED IDEOGRAPH
+ {0xDBF6, 0x8DCF}, //8785 #CJK UNIFIED IDEOGRAPH
+ {0xDBF7, 0x8DD5}, //8786 #CJK UNIFIED IDEOGRAPH
+ {0xDBF8, 0x8DD9}, //8787 #CJK UNIFIED IDEOGRAPH
+ {0xDBF9, 0x8DC8}, //8788 #CJK UNIFIED IDEOGRAPH
+ {0xDBFA, 0x8DD7}, //8789 #CJK UNIFIED IDEOGRAPH
+ {0xDBFB, 0x8DC5}, //8790 #CJK UNIFIED IDEOGRAPH
+ {0xDBFC, 0x8EEF}, //8791 #CJK UNIFIED IDEOGRAPH
+ {0xDBFD, 0x8EF7}, //8792 #CJK UNIFIED IDEOGRAPH
+ {0xDBFE, 0x8EFA}, //8793 #CJK UNIFIED IDEOGRAPH
+ {0xDC40, 0x8EF9}, //8794 #CJK UNIFIED IDEOGRAPH
+ {0xDC41, 0x8EE6}, //8795 #CJK UNIFIED IDEOGRAPH
+ {0xDC42, 0x8EEE}, //8796 #CJK UNIFIED IDEOGRAPH
+ {0xDC43, 0x8EE5}, //8797 #CJK UNIFIED IDEOGRAPH
+ {0xDC44, 0x8EF5}, //8798 #CJK UNIFIED IDEOGRAPH
+ {0xDC45, 0x8EE7}, //8799 #CJK UNIFIED IDEOGRAPH
+ {0xDC46, 0x8EE8}, //8800 #CJK UNIFIED IDEOGRAPH
+ {0xDC47, 0x8EF6}, //8801 #CJK UNIFIED IDEOGRAPH
+ {0xDC48, 0x8EEB}, //8802 #CJK UNIFIED IDEOGRAPH
+ {0xDC49, 0x8EF1}, //8803 #CJK UNIFIED IDEOGRAPH
+ {0xDC4A, 0x8EEC}, //8804 #CJK UNIFIED IDEOGRAPH
+ {0xDC4B, 0x8EF4}, //8805 #CJK UNIFIED IDEOGRAPH
+ {0xDC4C, 0x8EE9}, //8806 #CJK UNIFIED IDEOGRAPH
+ {0xDC4D, 0x902D}, //8807 #CJK UNIFIED IDEOGRAPH
+ {0xDC4E, 0x9034}, //8808 #CJK UNIFIED IDEOGRAPH
+ {0xDC4F, 0x902F}, //8809 #CJK UNIFIED IDEOGRAPH
+ {0xDC50, 0x9106}, //8810 #CJK UNIFIED IDEOGRAPH
+ {0xDC51, 0x912C}, //8811 #CJK UNIFIED IDEOGRAPH
+ {0xDC52, 0x9104}, //8812 #CJK UNIFIED IDEOGRAPH
+ {0xDC53, 0x90FF}, //8813 #CJK UNIFIED IDEOGRAPH
+ {0xDC54, 0x90FC}, //8814 #CJK UNIFIED IDEOGRAPH
+ {0xDC55, 0x9108}, //8815 #CJK UNIFIED IDEOGRAPH
+ {0xDC56, 0x90F9}, //8816 #CJK UNIFIED IDEOGRAPH
+ {0xDC57, 0x90FB}, //8817 #CJK UNIFIED IDEOGRAPH
+ {0xDC58, 0x9101}, //8818 #CJK UNIFIED IDEOGRAPH
+ {0xDC59, 0x9100}, //8819 #CJK UNIFIED IDEOGRAPH
+ {0xDC5A, 0x9107}, //8820 #CJK UNIFIED IDEOGRAPH
+ {0xDC5B, 0x9105}, //8821 #CJK UNIFIED IDEOGRAPH
+ {0xDC5C, 0x9103}, //8822 #CJK UNIFIED IDEOGRAPH
+ {0xDC5D, 0x9161}, //8823 #CJK UNIFIED IDEOGRAPH
+ {0xDC5E, 0x9164}, //8824 #CJK UNIFIED IDEOGRAPH
+ {0xDC5F, 0x915F}, //8825 #CJK UNIFIED IDEOGRAPH
+ {0xDC60, 0x9162}, //8826 #CJK UNIFIED IDEOGRAPH
+ {0xDC61, 0x9160}, //8827 #CJK UNIFIED IDEOGRAPH
+ {0xDC62, 0x9201}, //8828 #CJK UNIFIED IDEOGRAPH
+ {0xDC63, 0x920A}, //8829 #CJK UNIFIED IDEOGRAPH
+ {0xDC64, 0x9225}, //8830 #CJK UNIFIED IDEOGRAPH
+ {0xDC65, 0x9203}, //8831 #CJK UNIFIED IDEOGRAPH
+ {0xDC66, 0x921A}, //8832 #CJK UNIFIED IDEOGRAPH
+ {0xDC67, 0x9226}, //8833 #CJK UNIFIED IDEOGRAPH
+ {0xDC68, 0x920F}, //8834 #CJK UNIFIED IDEOGRAPH
+ {0xDC69, 0x920C}, //8835 #CJK UNIFIED IDEOGRAPH
+ {0xDC6A, 0x9200}, //8836 #CJK UNIFIED IDEOGRAPH
+ {0xDC6B, 0x9212}, //8837 #CJK UNIFIED IDEOGRAPH
+ {0xDC6C, 0x91FF}, //8838 #CJK UNIFIED IDEOGRAPH
+ {0xDC6D, 0x91FD}, //8839 #CJK UNIFIED IDEOGRAPH
+ {0xDC6E, 0x9206}, //8840 #CJK UNIFIED IDEOGRAPH
+ {0xDC6F, 0x9204}, //8841 #CJK UNIFIED IDEOGRAPH
+ {0xDC70, 0x9227}, //8842 #CJK UNIFIED IDEOGRAPH
+ {0xDC71, 0x9202}, //8843 #CJK UNIFIED IDEOGRAPH
+ {0xDC72, 0x921C}, //8844 #CJK UNIFIED IDEOGRAPH
+ {0xDC73, 0x9224}, //8845 #CJK UNIFIED IDEOGRAPH
+ {0xDC74, 0x9219}, //8846 #CJK UNIFIED IDEOGRAPH
+ {0xDC75, 0x9217}, //8847 #CJK UNIFIED IDEOGRAPH
+ {0xDC76, 0x9205}, //8848 #CJK UNIFIED IDEOGRAPH
+ {0xDC77, 0x9216}, //8849 #CJK UNIFIED IDEOGRAPH
+ {0xDC78, 0x957B}, //8850 #CJK UNIFIED IDEOGRAPH
+ {0xDC79, 0x958D}, //8851 #CJK UNIFIED IDEOGRAPH
+ {0xDC7A, 0x958C}, //8852 #CJK UNIFIED IDEOGRAPH
+ {0xDC7B, 0x9590}, //8853 #CJK UNIFIED IDEOGRAPH
+ {0xDC7C, 0x9687}, //8854 #CJK UNIFIED IDEOGRAPH
+ {0xDC7D, 0x967E}, //8855 #CJK UNIFIED IDEOGRAPH
+ {0xDC7E, 0x9688}, //8856 #CJK UNIFIED IDEOGRAPH
+ {0xDCA1, 0x9689}, //8857 #CJK UNIFIED IDEOGRAPH
+ {0xDCA2, 0x9683}, //8858 #CJK UNIFIED IDEOGRAPH
+ {0xDCA3, 0x9680}, //8859 #CJK UNIFIED IDEOGRAPH
+ {0xDCA4, 0x96C2}, //8860 #CJK UNIFIED IDEOGRAPH
+ {0xDCA5, 0x96C8}, //8861 #CJK UNIFIED IDEOGRAPH
+ {0xDCA6, 0x96C3}, //8862 #CJK UNIFIED IDEOGRAPH
+ {0xDCA7, 0x96F1}, //8863 #CJK UNIFIED IDEOGRAPH
+ {0xDCA8, 0x96F0}, //8864 #CJK UNIFIED IDEOGRAPH
+ {0xDCA9, 0x976C}, //8865 #CJK UNIFIED IDEOGRAPH
+ {0xDCAA, 0x9770}, //8866 #CJK UNIFIED IDEOGRAPH
+ {0xDCAB, 0x976E}, //8867 #CJK UNIFIED IDEOGRAPH
+ {0xDCAC, 0x9807}, //8868 #CJK UNIFIED IDEOGRAPH
+ {0xDCAD, 0x98A9}, //8869 #CJK UNIFIED IDEOGRAPH
+ {0xDCAE, 0x98EB}, //8870 #CJK UNIFIED IDEOGRAPH
+ {0xDCAF, 0x9CE6}, //8871 #CJK UNIFIED IDEOGRAPH
+ {0xDCB0, 0x9EF9}, //8872 #CJK UNIFIED IDEOGRAPH
+ {0xDCB1, 0x4E83}, //8873 #CJK UNIFIED IDEOGRAPH
+ {0xDCB2, 0x4E84}, //8874 #CJK UNIFIED IDEOGRAPH
+ {0xDCB3, 0x4EB6}, //8875 #CJK UNIFIED IDEOGRAPH
+ {0xDCB4, 0x50BD}, //8876 #CJK UNIFIED IDEOGRAPH
+ {0xDCB5, 0x50BF}, //8877 #CJK UNIFIED IDEOGRAPH
+ {0xDCB6, 0x50C6}, //8878 #CJK UNIFIED IDEOGRAPH
+ {0xDCB7, 0x50AE}, //8879 #CJK UNIFIED IDEOGRAPH
+ {0xDCB8, 0x50C4}, //8880 #CJK UNIFIED IDEOGRAPH
+ {0xDCB9, 0x50CA}, //8881 #CJK UNIFIED IDEOGRAPH
+ {0xDCBA, 0x50B4}, //8882 #CJK UNIFIED IDEOGRAPH
+ {0xDCBB, 0x50C8}, //8883 #CJK UNIFIED IDEOGRAPH
+ {0xDCBC, 0x50C2}, //8884 #CJK UNIFIED IDEOGRAPH
+ {0xDCBD, 0x50B0}, //8885 #CJK UNIFIED IDEOGRAPH
+ {0xDCBE, 0x50C1}, //8886 #CJK UNIFIED IDEOGRAPH
+ {0xDCBF, 0x50BA}, //8887 #CJK UNIFIED IDEOGRAPH
+ {0xDCC0, 0x50B1}, //8888 #CJK UNIFIED IDEOGRAPH
+ {0xDCC1, 0x50CB}, //8889 #CJK UNIFIED IDEOGRAPH
+ {0xDCC2, 0x50C9}, //8890 #CJK UNIFIED IDEOGRAPH
+ {0xDCC3, 0x50B6}, //8891 #CJK UNIFIED IDEOGRAPH
+ {0xDCC4, 0x50B8}, //8892 #CJK UNIFIED IDEOGRAPH
+ {0xDCC5, 0x51D7}, //8893 #CJK UNIFIED IDEOGRAPH
+ {0xDCC6, 0x527A}, //8894 #CJK UNIFIED IDEOGRAPH
+ {0xDCC7, 0x5278}, //8895 #CJK UNIFIED IDEOGRAPH
+ {0xDCC8, 0x527B}, //8896 #CJK UNIFIED IDEOGRAPH
+ {0xDCC9, 0x527C}, //8897 #CJK UNIFIED IDEOGRAPH
+ {0xDCCA, 0x55C3}, //8898 #CJK UNIFIED IDEOGRAPH
+ {0xDCCB, 0x55DB}, //8899 #CJK UNIFIED IDEOGRAPH
+ {0xDCCC, 0x55CC}, //8900 #CJK UNIFIED IDEOGRAPH
+ {0xDCCD, 0x55D0}, //8901 #CJK UNIFIED IDEOGRAPH
+ {0xDCCE, 0x55CB}, //8902 #CJK UNIFIED IDEOGRAPH
+ {0xDCCF, 0x55CA}, //8903 #CJK UNIFIED IDEOGRAPH
+ {0xDCD0, 0x55DD}, //8904 #CJK UNIFIED IDEOGRAPH
+ {0xDCD1, 0x55C0}, //8905 #CJK UNIFIED IDEOGRAPH
+ {0xDCD2, 0x55D4}, //8906 #CJK UNIFIED IDEOGRAPH
+ {0xDCD3, 0x55C4}, //8907 #CJK UNIFIED IDEOGRAPH
+ {0xDCD4, 0x55E9}, //8908 #CJK UNIFIED IDEOGRAPH
+ {0xDCD5, 0x55BF}, //8909 #CJK UNIFIED IDEOGRAPH
+ {0xDCD6, 0x55D2}, //8910 #CJK UNIFIED IDEOGRAPH
+ {0xDCD7, 0x558D}, //8911 #CJK UNIFIED IDEOGRAPH
+ {0xDCD8, 0x55CF}, //8912 #CJK UNIFIED IDEOGRAPH
+ {0xDCD9, 0x55D5}, //8913 #CJK UNIFIED IDEOGRAPH
+ {0xDCDA, 0x55E2}, //8914 #CJK UNIFIED IDEOGRAPH
+ {0xDCDB, 0x55D6}, //8915 #CJK UNIFIED IDEOGRAPH
+ {0xDCDC, 0x55C8}, //8916 #CJK UNIFIED IDEOGRAPH
+ {0xDCDD, 0x55F2}, //8917 #CJK UNIFIED IDEOGRAPH
+ {0xDCDE, 0x55CD}, //8918 #CJK UNIFIED IDEOGRAPH
+ {0xDCDF, 0x55D9}, //8919 #CJK UNIFIED IDEOGRAPH
+ {0xDCE0, 0x55C2}, //8920 #CJK UNIFIED IDEOGRAPH
+ {0xDCE1, 0x5714}, //8921 #CJK UNIFIED IDEOGRAPH
+ {0xDCE2, 0x5853}, //8922 #CJK UNIFIED IDEOGRAPH
+ {0xDCE3, 0x5868}, //8923 #CJK UNIFIED IDEOGRAPH
+ {0xDCE4, 0x5864}, //8924 #CJK UNIFIED IDEOGRAPH
+ {0xDCE5, 0x584F}, //8925 #CJK UNIFIED IDEOGRAPH
+ {0xDCE6, 0x584D}, //8926 #CJK UNIFIED IDEOGRAPH
+ {0xDCE7, 0x5849}, //8927 #CJK UNIFIED IDEOGRAPH
+ {0xDCE8, 0x586F}, //8928 #CJK UNIFIED IDEOGRAPH
+ {0xDCE9, 0x5855}, //8929 #CJK UNIFIED IDEOGRAPH
+ {0xDCEA, 0x584E}, //8930 #CJK UNIFIED IDEOGRAPH
+ {0xDCEB, 0x585D}, //8931 #CJK UNIFIED IDEOGRAPH
+ {0xDCEC, 0x5859}, //8932 #CJK UNIFIED IDEOGRAPH
+ {0xDCED, 0x5865}, //8933 #CJK UNIFIED IDEOGRAPH
+ {0xDCEE, 0x585B}, //8934 #CJK UNIFIED IDEOGRAPH
+ {0xDCEF, 0x583D}, //8935 #CJK UNIFIED IDEOGRAPH
+ {0xDCF0, 0x5863}, //8936 #CJK UNIFIED IDEOGRAPH
+ {0xDCF1, 0x5871}, //8937 #CJK UNIFIED IDEOGRAPH
+ {0xDCF2, 0x58FC}, //8938 #CJK UNIFIED IDEOGRAPH
+ {0xDCF3, 0x5AC7}, //8939 #CJK UNIFIED IDEOGRAPH
+ {0xDCF4, 0x5AC4}, //8940 #CJK UNIFIED IDEOGRAPH
+ {0xDCF5, 0x5ACB}, //8941 #CJK UNIFIED IDEOGRAPH
+ {0xDCF6, 0x5ABA}, //8942 #CJK UNIFIED IDEOGRAPH
+ {0xDCF7, 0x5AB8}, //8943 #CJK UNIFIED IDEOGRAPH
+ {0xDCF8, 0x5AB1}, //8944 #CJK UNIFIED IDEOGRAPH
+ {0xDCF9, 0x5AB5}, //8945 #CJK UNIFIED IDEOGRAPH
+ {0xDCFA, 0x5AB0}, //8946 #CJK UNIFIED IDEOGRAPH
+ {0xDCFB, 0x5ABF}, //8947 #CJK UNIFIED IDEOGRAPH
+ {0xDCFC, 0x5AC8}, //8948 #CJK UNIFIED IDEOGRAPH
+ {0xDCFD, 0x5ABB}, //8949 #CJK UNIFIED IDEOGRAPH
+ {0xDCFE, 0x5AC6}, //8950 #CJK UNIFIED IDEOGRAPH
+ {0xDD40, 0x5AB7}, //8951 #CJK UNIFIED IDEOGRAPH
+ {0xDD41, 0x5AC0}, //8952 #CJK UNIFIED IDEOGRAPH
+ {0xDD42, 0x5ACA}, //8953 #CJK UNIFIED IDEOGRAPH
+ {0xDD43, 0x5AB4}, //8954 #CJK UNIFIED IDEOGRAPH
+ {0xDD44, 0x5AB6}, //8955 #CJK UNIFIED IDEOGRAPH
+ {0xDD45, 0x5ACD}, //8956 #CJK UNIFIED IDEOGRAPH
+ {0xDD46, 0x5AB9}, //8957 #CJK UNIFIED IDEOGRAPH
+ {0xDD47, 0x5A90}, //8958 #CJK UNIFIED IDEOGRAPH
+ {0xDD48, 0x5BD6}, //8959 #CJK UNIFIED IDEOGRAPH
+ {0xDD49, 0x5BD8}, //8960 #CJK UNIFIED IDEOGRAPH
+ {0xDD4A, 0x5BD9}, //8961 #CJK UNIFIED IDEOGRAPH
+ {0xDD4B, 0x5C1F}, //8962 #CJK UNIFIED IDEOGRAPH
+ {0xDD4C, 0x5C33}, //8963 #CJK UNIFIED IDEOGRAPH
+ {0xDD4D, 0x5D71}, //8964 #CJK UNIFIED IDEOGRAPH
+ {0xDD4E, 0x5D63}, //8965 #CJK UNIFIED IDEOGRAPH
+ {0xDD4F, 0x5D4A}, //8966 #CJK UNIFIED IDEOGRAPH
+ {0xDD50, 0x5D65}, //8967 #CJK UNIFIED IDEOGRAPH
+ {0xDD51, 0x5D72}, //8968 #CJK UNIFIED IDEOGRAPH
+ {0xDD52, 0x5D6C}, //8969 #CJK UNIFIED IDEOGRAPH
+ {0xDD53, 0x5D5E}, //8970 #CJK UNIFIED IDEOGRAPH
+ {0xDD54, 0x5D68}, //8971 #CJK UNIFIED IDEOGRAPH
+ {0xDD55, 0x5D67}, //8972 #CJK UNIFIED IDEOGRAPH
+ {0xDD56, 0x5D62}, //8973 #CJK UNIFIED IDEOGRAPH
+ {0xDD57, 0x5DF0}, //8974 #CJK UNIFIED IDEOGRAPH
+ {0xDD58, 0x5E4F}, //8975 #CJK UNIFIED IDEOGRAPH
+ {0xDD59, 0x5E4E}, //8976 #CJK UNIFIED IDEOGRAPH
+ {0xDD5A, 0x5E4A}, //8977 #CJK UNIFIED IDEOGRAPH
+ {0xDD5B, 0x5E4D}, //8978 #CJK UNIFIED IDEOGRAPH
+ {0xDD5C, 0x5E4B}, //8979 #CJK UNIFIED IDEOGRAPH
+ {0xDD5D, 0x5EC5}, //8980 #CJK UNIFIED IDEOGRAPH
+ {0xDD5E, 0x5ECC}, //8981 #CJK UNIFIED IDEOGRAPH
+ {0xDD5F, 0x5EC6}, //8982 #CJK UNIFIED IDEOGRAPH
+ {0xDD60, 0x5ECB}, //8983 #CJK UNIFIED IDEOGRAPH
+ {0xDD61, 0x5EC7}, //8984 #CJK UNIFIED IDEOGRAPH
+ {0xDD62, 0x5F40}, //8985 #CJK UNIFIED IDEOGRAPH
+ {0xDD63, 0x5FAF}, //8986 #CJK UNIFIED IDEOGRAPH
+ {0xDD64, 0x5FAD}, //8987 #CJK UNIFIED IDEOGRAPH
+ {0xDD65, 0x60F7}, //8988 #CJK UNIFIED IDEOGRAPH
+ {0xDD66, 0x6149}, //8989 #CJK UNIFIED IDEOGRAPH
+ {0xDD67, 0x614A}, //8990 #CJK UNIFIED IDEOGRAPH
+ {0xDD68, 0x612B}, //8991 #CJK UNIFIED IDEOGRAPH
+ {0xDD69, 0x6145}, //8992 #CJK UNIFIED IDEOGRAPH
+ {0xDD6A, 0x6136}, //8993 #CJK UNIFIED IDEOGRAPH
+ {0xDD6B, 0x6132}, //8994 #CJK UNIFIED IDEOGRAPH
+ {0xDD6C, 0x612E}, //8995 #CJK UNIFIED IDEOGRAPH
+ {0xDD6D, 0x6146}, //8996 #CJK UNIFIED IDEOGRAPH
+ {0xDD6E, 0x612F}, //8997 #CJK UNIFIED IDEOGRAPH
+ {0xDD6F, 0x614F}, //8998 #CJK UNIFIED IDEOGRAPH
+ {0xDD70, 0x6129}, //8999 #CJK UNIFIED IDEOGRAPH
+ {0xDD71, 0x6140}, //9000 #CJK UNIFIED IDEOGRAPH
+ {0xDD72, 0x6220}, //9001 #CJK UNIFIED IDEOGRAPH
+ {0xDD73, 0x9168}, //9002 #CJK UNIFIED IDEOGRAPH
+ {0xDD74, 0x6223}, //9003 #CJK UNIFIED IDEOGRAPH
+ {0xDD75, 0x6225}, //9004 #CJK UNIFIED IDEOGRAPH
+ {0xDD76, 0x6224}, //9005 #CJK UNIFIED IDEOGRAPH
+ {0xDD77, 0x63C5}, //9006 #CJK UNIFIED IDEOGRAPH
+ {0xDD78, 0x63F1}, //9007 #CJK UNIFIED IDEOGRAPH
+ {0xDD79, 0x63EB}, //9008 #CJK UNIFIED IDEOGRAPH
+ {0xDD7A, 0x6410}, //9009 #CJK UNIFIED IDEOGRAPH
+ {0xDD7B, 0x6412}, //9010 #CJK UNIFIED IDEOGRAPH
+ {0xDD7C, 0x6409}, //9011 #CJK UNIFIED IDEOGRAPH
+ {0xDD7D, 0x6420}, //9012 #CJK UNIFIED IDEOGRAPH
+ {0xDD7E, 0x6424}, //9013 #CJK UNIFIED IDEOGRAPH
+ {0xDDA1, 0x6433}, //9014 #CJK UNIFIED IDEOGRAPH
+ {0xDDA2, 0x6443}, //9015 #CJK UNIFIED IDEOGRAPH
+ {0xDDA3, 0x641F}, //9016 #CJK UNIFIED IDEOGRAPH
+ {0xDDA4, 0x6415}, //9017 #CJK UNIFIED IDEOGRAPH
+ {0xDDA5, 0x6418}, //9018 #CJK UNIFIED IDEOGRAPH
+ {0xDDA6, 0x6439}, //9019 #CJK UNIFIED IDEOGRAPH
+ {0xDDA7, 0x6437}, //9020 #CJK UNIFIED IDEOGRAPH
+ {0xDDA8, 0x6422}, //9021 #CJK UNIFIED IDEOGRAPH
+ {0xDDA9, 0x6423}, //9022 #CJK UNIFIED IDEOGRAPH
+ {0xDDAA, 0x640C}, //9023 #CJK UNIFIED IDEOGRAPH
+ {0xDDAB, 0x6426}, //9024 #CJK UNIFIED IDEOGRAPH
+ {0xDDAC, 0x6430}, //9025 #CJK UNIFIED IDEOGRAPH
+ {0xDDAD, 0x6428}, //9026 #CJK UNIFIED IDEOGRAPH
+ {0xDDAE, 0x6441}, //9027 #CJK UNIFIED IDEOGRAPH
+ {0xDDAF, 0x6435}, //9028 #CJK UNIFIED IDEOGRAPH
+ {0xDDB0, 0x642F}, //9029 #CJK UNIFIED IDEOGRAPH
+ {0xDDB1, 0x640A}, //9030 #CJK UNIFIED IDEOGRAPH
+ {0xDDB2, 0x641A}, //9031 #CJK UNIFIED IDEOGRAPH
+ {0xDDB3, 0x6440}, //9032 #CJK UNIFIED IDEOGRAPH
+ {0xDDB4, 0x6425}, //9033 #CJK UNIFIED IDEOGRAPH
+ {0xDDB5, 0x6427}, //9034 #CJK UNIFIED IDEOGRAPH
+ {0xDDB6, 0x640B}, //9035 #CJK UNIFIED IDEOGRAPH
+ {0xDDB7, 0x63E7}, //9036 #CJK UNIFIED IDEOGRAPH
+ {0xDDB8, 0x641B}, //9037 #CJK UNIFIED IDEOGRAPH
+ {0xDDB9, 0x642E}, //9038 #CJK UNIFIED IDEOGRAPH
+ {0xDDBA, 0x6421}, //9039 #CJK UNIFIED IDEOGRAPH
+ {0xDDBB, 0x640E}, //9040 #CJK UNIFIED IDEOGRAPH
+ {0xDDBC, 0x656F}, //9041 #CJK UNIFIED IDEOGRAPH
+ {0xDDBD, 0x6592}, //9042 #CJK UNIFIED IDEOGRAPH
+ {0xDDBE, 0x65D3}, //9043 #CJK UNIFIED IDEOGRAPH
+ {0xDDBF, 0x6686}, //9044 #CJK UNIFIED IDEOGRAPH
+ {0xDDC0, 0x668C}, //9045 #CJK UNIFIED IDEOGRAPH
+ {0xDDC1, 0x6695}, //9046 #CJK UNIFIED IDEOGRAPH
+ {0xDDC2, 0x6690}, //9047 #CJK UNIFIED IDEOGRAPH
+ {0xDDC3, 0x668B}, //9048 #CJK UNIFIED IDEOGRAPH
+ {0xDDC4, 0x668A}, //9049 #CJK UNIFIED IDEOGRAPH
+ {0xDDC5, 0x6699}, //9050 #CJK UNIFIED IDEOGRAPH
+ {0xDDC6, 0x6694}, //9051 #CJK UNIFIED IDEOGRAPH
+ {0xDDC7, 0x6678}, //9052 #CJK UNIFIED IDEOGRAPH
+ {0xDDC8, 0x6720}, //9053 #CJK UNIFIED IDEOGRAPH
+ {0xDDC9, 0x6966}, //9054 #CJK UNIFIED IDEOGRAPH
+ {0xDDCA, 0x695F}, //9055 #CJK UNIFIED IDEOGRAPH
+ {0xDDCB, 0x6938}, //9056 #CJK UNIFIED IDEOGRAPH
+ {0xDDCC, 0x694E}, //9057 #CJK UNIFIED IDEOGRAPH
+ {0xDDCD, 0x6962}, //9058 #CJK UNIFIED IDEOGRAPH
+ {0xDDCE, 0x6971}, //9059 #CJK UNIFIED IDEOGRAPH
+ {0xDDCF, 0x693F}, //9060 #CJK UNIFIED IDEOGRAPH
+ {0xDDD0, 0x6945}, //9061 #CJK UNIFIED IDEOGRAPH
+ {0xDDD1, 0x696A}, //9062 #CJK UNIFIED IDEOGRAPH
+ {0xDDD2, 0x6939}, //9063 #CJK UNIFIED IDEOGRAPH
+ {0xDDD3, 0x6942}, //9064 #CJK UNIFIED IDEOGRAPH
+ {0xDDD4, 0x6957}, //9065 #CJK UNIFIED IDEOGRAPH
+ {0xDDD5, 0x6959}, //9066 #CJK UNIFIED IDEOGRAPH
+ {0xDDD6, 0x697A}, //9067 #CJK UNIFIED IDEOGRAPH
+ {0xDDD7, 0x6948}, //9068 #CJK UNIFIED IDEOGRAPH
+ {0xDDD8, 0x6949}, //9069 #CJK UNIFIED IDEOGRAPH
+ {0xDDD9, 0x6935}, //9070 #CJK UNIFIED IDEOGRAPH
+ {0xDDDA, 0x696C}, //9071 #CJK UNIFIED IDEOGRAPH
+ {0xDDDB, 0x6933}, //9072 #CJK UNIFIED IDEOGRAPH
+ {0xDDDC, 0x693D}, //9073 #CJK UNIFIED IDEOGRAPH
+ {0xDDDD, 0x6965}, //9074 #CJK UNIFIED IDEOGRAPH
+ {0xDDDE, 0x68F0}, //9075 #CJK UNIFIED IDEOGRAPH
+ {0xDDDF, 0x6978}, //9076 #CJK UNIFIED IDEOGRAPH
+ {0xDDE0, 0x6934}, //9077 #CJK UNIFIED IDEOGRAPH
+ {0xDDE1, 0x6969}, //9078 #CJK UNIFIED IDEOGRAPH
+ {0xDDE2, 0x6940}, //9079 #CJK UNIFIED IDEOGRAPH
+ {0xDDE3, 0x696F}, //9080 #CJK UNIFIED IDEOGRAPH
+ {0xDDE4, 0x6944}, //9081 #CJK UNIFIED IDEOGRAPH
+ {0xDDE5, 0x6976}, //9082 #CJK UNIFIED IDEOGRAPH
+ {0xDDE6, 0x6958}, //9083 #CJK UNIFIED IDEOGRAPH
+ {0xDDE7, 0x6941}, //9084 #CJK UNIFIED IDEOGRAPH
+ {0xDDE8, 0x6974}, //9085 #CJK UNIFIED IDEOGRAPH
+ {0xDDE9, 0x694C}, //9086 #CJK UNIFIED IDEOGRAPH
+ {0xDDEA, 0x693B}, //9087 #CJK UNIFIED IDEOGRAPH
+ {0xDDEB, 0x694B}, //9088 #CJK UNIFIED IDEOGRAPH
+ {0xDDEC, 0x6937}, //9089 #CJK UNIFIED IDEOGRAPH
+ {0xDDED, 0x695C}, //9090 #CJK UNIFIED IDEOGRAPH
+ {0xDDEE, 0x694F}, //9091 #CJK UNIFIED IDEOGRAPH
+ {0xDDEF, 0x6951}, //9092 #CJK UNIFIED IDEOGRAPH
+ {0xDDF0, 0x6932}, //9093 #CJK UNIFIED IDEOGRAPH
+ {0xDDF1, 0x6952}, //9094 #CJK UNIFIED IDEOGRAPH
+ {0xDDF2, 0x692F}, //9095 #CJK UNIFIED IDEOGRAPH
+ {0xDDF3, 0x697B}, //9096 #CJK UNIFIED IDEOGRAPH
+ {0xDDF4, 0x693C}, //9097 #CJK UNIFIED IDEOGRAPH
+ {0xDDF5, 0x6B46}, //9098 #CJK UNIFIED IDEOGRAPH
+ {0xDDF6, 0x6B45}, //9099 #CJK UNIFIED IDEOGRAPH
+ {0xDDF7, 0x6B43}, //9100 #CJK UNIFIED IDEOGRAPH
+ {0xDDF8, 0x6B42}, //9101 #CJK UNIFIED IDEOGRAPH
+ {0xDDF9, 0x6B48}, //9102 #CJK UNIFIED IDEOGRAPH
+ {0xDDFA, 0x6B41}, //9103 #CJK UNIFIED IDEOGRAPH
+ {0xDDFB, 0x6B9B}, //9104 #CJK UNIFIED IDEOGRAPH
+ {0xDDFC, 0xFA0D}, //9105 #CJK COMPATIBILITY IDEOGRAPH
+ {0xDDFD, 0x6BFB}, //9106 #CJK UNIFIED IDEOGRAPH
+ {0xDDFE, 0x6BFC}, //9107 #CJK UNIFIED IDEOGRAPH
+ {0xDE40, 0x6BF9}, //9108 #CJK UNIFIED IDEOGRAPH
+ {0xDE41, 0x6BF7}, //9109 #CJK UNIFIED IDEOGRAPH
+ {0xDE42, 0x6BF8}, //9110 #CJK UNIFIED IDEOGRAPH
+ {0xDE43, 0x6E9B}, //9111 #CJK UNIFIED IDEOGRAPH
+ {0xDE44, 0x6ED6}, //9112 #CJK UNIFIED IDEOGRAPH
+ {0xDE45, 0x6EC8}, //9113 #CJK UNIFIED IDEOGRAPH
+ {0xDE46, 0x6E8F}, //9114 #CJK UNIFIED IDEOGRAPH
+ {0xDE47, 0x6EC0}, //9115 #CJK UNIFIED IDEOGRAPH
+ {0xDE48, 0x6E9F}, //9116 #CJK UNIFIED IDEOGRAPH
+ {0xDE49, 0x6E93}, //9117 #CJK UNIFIED IDEOGRAPH
+ {0xDE4A, 0x6E94}, //9118 #CJK UNIFIED IDEOGRAPH
+ {0xDE4B, 0x6EA0}, //9119 #CJK UNIFIED IDEOGRAPH
+ {0xDE4C, 0x6EB1}, //9120 #CJK UNIFIED IDEOGRAPH
+ {0xDE4D, 0x6EB9}, //9121 #CJK UNIFIED IDEOGRAPH
+ {0xDE4E, 0x6EC6}, //9122 #CJK UNIFIED IDEOGRAPH
+ {0xDE4F, 0x6ED2}, //9123 #CJK UNIFIED IDEOGRAPH
+ {0xDE50, 0x6EBD}, //9124 #CJK UNIFIED IDEOGRAPH
+ {0xDE51, 0x6EC1}, //9125 #CJK UNIFIED IDEOGRAPH
+ {0xDE52, 0x6E9E}, //9126 #CJK UNIFIED IDEOGRAPH
+ {0xDE53, 0x6EC9}, //9127 #CJK UNIFIED IDEOGRAPH
+ {0xDE54, 0x6EB7}, //9128 #CJK UNIFIED IDEOGRAPH
+ {0xDE55, 0x6EB0}, //9129 #CJK UNIFIED IDEOGRAPH
+ {0xDE56, 0x6ECD}, //9130 #CJK UNIFIED IDEOGRAPH
+ {0xDE57, 0x6EA6}, //9131 #CJK UNIFIED IDEOGRAPH
+ {0xDE58, 0x6ECF}, //9132 #CJK UNIFIED IDEOGRAPH
+ {0xDE59, 0x6EB2}, //9133 #CJK UNIFIED IDEOGRAPH
+ {0xDE5A, 0x6EBE}, //9134 #CJK UNIFIED IDEOGRAPH
+ {0xDE5B, 0x6EC3}, //9135 #CJK UNIFIED IDEOGRAPH
+ {0xDE5C, 0x6EDC}, //9136 #CJK UNIFIED IDEOGRAPH
+ {0xDE5D, 0x6ED8}, //9137 #CJK UNIFIED IDEOGRAPH
+ {0xDE5E, 0x6E99}, //9138 #CJK UNIFIED IDEOGRAPH
+ {0xDE5F, 0x6E92}, //9139 #CJK UNIFIED IDEOGRAPH
+ {0xDE60, 0x6E8E}, //9140 #CJK UNIFIED IDEOGRAPH
+ {0xDE61, 0x6E8D}, //9141 #CJK UNIFIED IDEOGRAPH
+ {0xDE62, 0x6EA4}, //9142 #CJK UNIFIED IDEOGRAPH
+ {0xDE63, 0x6EA1}, //9143 #CJK UNIFIED IDEOGRAPH
+ {0xDE64, 0x6EBF}, //9144 #CJK UNIFIED IDEOGRAPH
+ {0xDE65, 0x6EB3}, //9145 #CJK UNIFIED IDEOGRAPH
+ {0xDE66, 0x6ED0}, //9146 #CJK UNIFIED IDEOGRAPH
+ {0xDE67, 0x6ECA}, //9147 #CJK UNIFIED IDEOGRAPH
+ {0xDE68, 0x6E97}, //9148 #CJK UNIFIED IDEOGRAPH
+ {0xDE69, 0x6EAE}, //9149 #CJK UNIFIED IDEOGRAPH
+ {0xDE6A, 0x6EA3}, //9150 #CJK UNIFIED IDEOGRAPH
+ {0xDE6B, 0x7147}, //9151 #CJK UNIFIED IDEOGRAPH
+ {0xDE6C, 0x7154}, //9152 #CJK UNIFIED IDEOGRAPH
+ {0xDE6D, 0x7152}, //9153 #CJK UNIFIED IDEOGRAPH
+ {0xDE6E, 0x7163}, //9154 #CJK UNIFIED IDEOGRAPH
+ {0xDE6F, 0x7160}, //9155 #CJK UNIFIED IDEOGRAPH
+ {0xDE70, 0x7141}, //9156 #CJK UNIFIED IDEOGRAPH
+ {0xDE71, 0x715D}, //9157 #CJK UNIFIED IDEOGRAPH
+ {0xDE72, 0x7162}, //9158 #CJK UNIFIED IDEOGRAPH
+ {0xDE73, 0x7172}, //9159 #CJK UNIFIED IDEOGRAPH
+ {0xDE74, 0x7178}, //9160 #CJK UNIFIED IDEOGRAPH
+ {0xDE75, 0x716A}, //9161 #CJK UNIFIED IDEOGRAPH
+ {0xDE76, 0x7161}, //9162 #CJK UNIFIED IDEOGRAPH
+ {0xDE77, 0x7142}, //9163 #CJK UNIFIED IDEOGRAPH
+ {0xDE78, 0x7158}, //9164 #CJK UNIFIED IDEOGRAPH
+ {0xDE79, 0x7143}, //9165 #CJK UNIFIED IDEOGRAPH
+ {0xDE7A, 0x714B}, //9166 #CJK UNIFIED IDEOGRAPH
+ {0xDE7B, 0x7170}, //9167 #CJK UNIFIED IDEOGRAPH
+ {0xDE7C, 0x715F}, //9168 #CJK UNIFIED IDEOGRAPH
+ {0xDE7D, 0x7150}, //9169 #CJK UNIFIED IDEOGRAPH
+ {0xDE7E, 0x7153}, //9170 #CJK UNIFIED IDEOGRAPH
+ {0xDEA1, 0x7144}, //9171 #CJK UNIFIED IDEOGRAPH
+ {0xDEA2, 0x714D}, //9172 #CJK UNIFIED IDEOGRAPH
+ {0xDEA3, 0x715A}, //9173 #CJK UNIFIED IDEOGRAPH
+ {0xDEA4, 0x724F}, //9174 #CJK UNIFIED IDEOGRAPH
+ {0xDEA5, 0x728D}, //9175 #CJK UNIFIED IDEOGRAPH
+ {0xDEA6, 0x728C}, //9176 #CJK UNIFIED IDEOGRAPH
+ {0xDEA7, 0x7291}, //9177 #CJK UNIFIED IDEOGRAPH
+ {0xDEA8, 0x7290}, //9178 #CJK UNIFIED IDEOGRAPH
+ {0xDEA9, 0x728E}, //9179 #CJK UNIFIED IDEOGRAPH
+ {0xDEAA, 0x733C}, //9180 #CJK UNIFIED IDEOGRAPH
+ {0xDEAB, 0x7342}, //9181 #CJK UNIFIED IDEOGRAPH
+ {0xDEAC, 0x733B}, //9182 #CJK UNIFIED IDEOGRAPH
+ {0xDEAD, 0x733A}, //9183 #CJK UNIFIED IDEOGRAPH
+ {0xDEAE, 0x7340}, //9184 #CJK UNIFIED IDEOGRAPH
+ {0xDEAF, 0x734A}, //9185 #CJK UNIFIED IDEOGRAPH
+ {0xDEB0, 0x7349}, //9186 #CJK UNIFIED IDEOGRAPH
+ {0xDEB1, 0x7444}, //9187 #CJK UNIFIED IDEOGRAPH
+ {0xDEB2, 0x744A}, //9188 #CJK UNIFIED IDEOGRAPH
+ {0xDEB3, 0x744B}, //9189 #CJK UNIFIED IDEOGRAPH
+ {0xDEB4, 0x7452}, //9190 #CJK UNIFIED IDEOGRAPH
+ {0xDEB5, 0x7451}, //9191 #CJK UNIFIED IDEOGRAPH
+ {0xDEB6, 0x7457}, //9192 #CJK UNIFIED IDEOGRAPH
+ {0xDEB7, 0x7440}, //9193 #CJK UNIFIED IDEOGRAPH
+ {0xDEB8, 0x744F}, //9194 #CJK UNIFIED IDEOGRAPH
+ {0xDEB9, 0x7450}, //9195 #CJK UNIFIED IDEOGRAPH
+ {0xDEBA, 0x744E}, //9196 #CJK UNIFIED IDEOGRAPH
+ {0xDEBB, 0x7442}, //9197 #CJK UNIFIED IDEOGRAPH
+ {0xDEBC, 0x7446}, //9198 #CJK UNIFIED IDEOGRAPH
+ {0xDEBD, 0x744D}, //9199 #CJK UNIFIED IDEOGRAPH
+ {0xDEBE, 0x7454}, //9200 #CJK UNIFIED IDEOGRAPH
+ {0xDEBF, 0x74E1}, //9201 #CJK UNIFIED IDEOGRAPH
+ {0xDEC0, 0x74FF}, //9202 #CJK UNIFIED IDEOGRAPH
+ {0xDEC1, 0x74FE}, //9203 #CJK UNIFIED IDEOGRAPH
+ {0xDEC2, 0x74FD}, //9204 #CJK UNIFIED IDEOGRAPH
+ {0xDEC3, 0x751D}, //9205 #CJK UNIFIED IDEOGRAPH
+ {0xDEC4, 0x7579}, //9206 #CJK UNIFIED IDEOGRAPH
+ {0xDEC5, 0x7577}, //9207 #CJK UNIFIED IDEOGRAPH
+ {0xDEC6, 0x6983}, //9208 #CJK UNIFIED IDEOGRAPH
+ {0xDEC7, 0x75EF}, //9209 #CJK UNIFIED IDEOGRAPH
+ {0xDEC8, 0x760F}, //9210 #CJK UNIFIED IDEOGRAPH
+ {0xDEC9, 0x7603}, //9211 #CJK UNIFIED IDEOGRAPH
+ {0xDECA, 0x75F7}, //9212 #CJK UNIFIED IDEOGRAPH
+ {0xDECB, 0x75FE}, //9213 #CJK UNIFIED IDEOGRAPH
+ {0xDECC, 0x75FC}, //9214 #CJK UNIFIED IDEOGRAPH
+ {0xDECD, 0x75F9}, //9215 #CJK UNIFIED IDEOGRAPH
+ {0xDECE, 0x75F8}, //9216 #CJK UNIFIED IDEOGRAPH
+ {0xDECF, 0x7610}, //9217 #CJK UNIFIED IDEOGRAPH
+ {0xDED0, 0x75FB}, //9218 #CJK UNIFIED IDEOGRAPH
+ {0xDED1, 0x75F6}, //9219 #CJK UNIFIED IDEOGRAPH
+ {0xDED2, 0x75ED}, //9220 #CJK UNIFIED IDEOGRAPH
+ {0xDED3, 0x75F5}, //9221 #CJK UNIFIED IDEOGRAPH
+ {0xDED4, 0x75FD}, //9222 #CJK UNIFIED IDEOGRAPH
+ {0xDED5, 0x7699}, //9223 #CJK UNIFIED IDEOGRAPH
+ {0xDED6, 0x76B5}, //9224 #CJK UNIFIED IDEOGRAPH
+ {0xDED7, 0x76DD}, //9225 #CJK UNIFIED IDEOGRAPH
+ {0xDED8, 0x7755}, //9226 #CJK UNIFIED IDEOGRAPH
+ {0xDED9, 0x775F}, //9227 #CJK UNIFIED IDEOGRAPH
+ {0xDEDA, 0x7760}, //9228 #CJK UNIFIED IDEOGRAPH
+ {0xDEDB, 0x7752}, //9229 #CJK UNIFIED IDEOGRAPH
+ {0xDEDC, 0x7756}, //9230 #CJK UNIFIED IDEOGRAPH
+ {0xDEDD, 0x775A}, //9231 #CJK UNIFIED IDEOGRAPH
+ {0xDEDE, 0x7769}, //9232 #CJK UNIFIED IDEOGRAPH
+ {0xDEDF, 0x7767}, //9233 #CJK UNIFIED IDEOGRAPH
+ {0xDEE0, 0x7754}, //9234 #CJK UNIFIED IDEOGRAPH
+ {0xDEE1, 0x7759}, //9235 #CJK UNIFIED IDEOGRAPH
+ {0xDEE2, 0x776D}, //9236 #CJK UNIFIED IDEOGRAPH
+ {0xDEE3, 0x77E0}, //9237 #CJK UNIFIED IDEOGRAPH
+ {0xDEE4, 0x7887}, //9238 #CJK UNIFIED IDEOGRAPH
+ {0xDEE5, 0x789A}, //9239 #CJK UNIFIED IDEOGRAPH
+ {0xDEE6, 0x7894}, //9240 #CJK UNIFIED IDEOGRAPH
+ {0xDEE7, 0x788F}, //9241 #CJK UNIFIED IDEOGRAPH
+ {0xDEE8, 0x7884}, //9242 #CJK UNIFIED IDEOGRAPH
+ {0xDEE9, 0x7895}, //9243 #CJK UNIFIED IDEOGRAPH
+ {0xDEEA, 0x7885}, //9244 #CJK UNIFIED IDEOGRAPH
+ {0xDEEB, 0x7886}, //9245 #CJK UNIFIED IDEOGRAPH
+ {0xDEEC, 0x78A1}, //9246 #CJK UNIFIED IDEOGRAPH
+ {0xDEED, 0x7883}, //9247 #CJK UNIFIED IDEOGRAPH
+ {0xDEEE, 0x7879}, //9248 #CJK UNIFIED IDEOGRAPH
+ {0xDEEF, 0x7899}, //9249 #CJK UNIFIED IDEOGRAPH
+ {0xDEF0, 0x7880}, //9250 #CJK UNIFIED IDEOGRAPH
+ {0xDEF1, 0x7896}, //9251 #CJK UNIFIED IDEOGRAPH
+ {0xDEF2, 0x787B}, //9252 #CJK UNIFIED IDEOGRAPH
+ {0xDEF3, 0x797C}, //9253 #CJK UNIFIED IDEOGRAPH
+ {0xDEF4, 0x7982}, //9254 #CJK UNIFIED IDEOGRAPH
+ {0xDEF5, 0x797D}, //9255 #CJK UNIFIED IDEOGRAPH
+ {0xDEF6, 0x7979}, //9256 #CJK UNIFIED IDEOGRAPH
+ {0xDEF7, 0x7A11}, //9257 #CJK UNIFIED IDEOGRAPH
+ {0xDEF8, 0x7A18}, //9258 #CJK UNIFIED IDEOGRAPH
+ {0xDEF9, 0x7A19}, //9259 #CJK UNIFIED IDEOGRAPH
+ {0xDEFA, 0x7A12}, //9260 #CJK UNIFIED IDEOGRAPH
+ {0xDEFB, 0x7A17}, //9261 #CJK UNIFIED IDEOGRAPH
+ {0xDEFC, 0x7A15}, //9262 #CJK UNIFIED IDEOGRAPH
+ {0xDEFD, 0x7A22}, //9263 #CJK UNIFIED IDEOGRAPH
+ {0xDEFE, 0x7A13}, //9264 #CJK UNIFIED IDEOGRAPH
+ {0xDF40, 0x7A1B}, //9265 #CJK UNIFIED IDEOGRAPH
+ {0xDF41, 0x7A10}, //9266 #CJK UNIFIED IDEOGRAPH
+ {0xDF42, 0x7AA3}, //9267 #CJK UNIFIED IDEOGRAPH
+ {0xDF43, 0x7AA2}, //9268 #CJK UNIFIED IDEOGRAPH
+ {0xDF44, 0x7A9E}, //9269 #CJK UNIFIED IDEOGRAPH
+ {0xDF45, 0x7AEB}, //9270 #CJK UNIFIED IDEOGRAPH
+ {0xDF46, 0x7B66}, //9271 #CJK UNIFIED IDEOGRAPH
+ {0xDF47, 0x7B64}, //9272 #CJK UNIFIED IDEOGRAPH
+ {0xDF48, 0x7B6D}, //9273 #CJK UNIFIED IDEOGRAPH
+ {0xDF49, 0x7B74}, //9274 #CJK UNIFIED IDEOGRAPH
+ {0xDF4A, 0x7B69}, //9275 #CJK UNIFIED IDEOGRAPH
+ {0xDF4B, 0x7B72}, //9276 #CJK UNIFIED IDEOGRAPH
+ {0xDF4C, 0x7B65}, //9277 #CJK UNIFIED IDEOGRAPH
+ {0xDF4D, 0x7B73}, //9278 #CJK UNIFIED IDEOGRAPH
+ {0xDF4E, 0x7B71}, //9279 #CJK UNIFIED IDEOGRAPH
+ {0xDF4F, 0x7B70}, //9280 #CJK UNIFIED IDEOGRAPH
+ {0xDF50, 0x7B61}, //9281 #CJK UNIFIED IDEOGRAPH
+ {0xDF51, 0x7B78}, //9282 #CJK UNIFIED IDEOGRAPH
+ {0xDF52, 0x7B76}, //9283 #CJK UNIFIED IDEOGRAPH
+ {0xDF53, 0x7B63}, //9284 #CJK UNIFIED IDEOGRAPH
+ {0xDF54, 0x7CB2}, //9285 #CJK UNIFIED IDEOGRAPH
+ {0xDF55, 0x7CB4}, //9286 #CJK UNIFIED IDEOGRAPH
+ {0xDF56, 0x7CAF}, //9287 #CJK UNIFIED IDEOGRAPH
+ {0xDF57, 0x7D88}, //9288 #CJK UNIFIED IDEOGRAPH
+ {0xDF58, 0x7D86}, //9289 #CJK UNIFIED IDEOGRAPH
+ {0xDF59, 0x7D80}, //9290 #CJK UNIFIED IDEOGRAPH
+ {0xDF5A, 0x7D8D}, //9291 #CJK UNIFIED IDEOGRAPH
+ {0xDF5B, 0x7D7F}, //9292 #CJK UNIFIED IDEOGRAPH
+ {0xDF5C, 0x7D85}, //9293 #CJK UNIFIED IDEOGRAPH
+ {0xDF5D, 0x7D7A}, //9294 #CJK UNIFIED IDEOGRAPH
+ {0xDF5E, 0x7D8E}, //9295 #CJK UNIFIED IDEOGRAPH
+ {0xDF5F, 0x7D7B}, //9296 #CJK UNIFIED IDEOGRAPH
+ {0xDF60, 0x7D83}, //9297 #CJK UNIFIED IDEOGRAPH
+ {0xDF61, 0x7D7C}, //9298 #CJK UNIFIED IDEOGRAPH
+ {0xDF62, 0x7D8C}, //9299 #CJK UNIFIED IDEOGRAPH
+ {0xDF63, 0x7D94}, //9300 #CJK UNIFIED IDEOGRAPH
+ {0xDF64, 0x7D84}, //9301 #CJK UNIFIED IDEOGRAPH
+ {0xDF65, 0x7D7D}, //9302 #CJK UNIFIED IDEOGRAPH
+ {0xDF66, 0x7D92}, //9303 #CJK UNIFIED IDEOGRAPH
+ {0xDF67, 0x7F6D}, //9304 #CJK UNIFIED IDEOGRAPH
+ {0xDF68, 0x7F6B}, //9305 #CJK UNIFIED IDEOGRAPH
+ {0xDF69, 0x7F67}, //9306 #CJK UNIFIED IDEOGRAPH
+ {0xDF6A, 0x7F68}, //9307 #CJK UNIFIED IDEOGRAPH
+ {0xDF6B, 0x7F6C}, //9308 #CJK UNIFIED IDEOGRAPH
+ {0xDF6C, 0x7FA6}, //9309 #CJK UNIFIED IDEOGRAPH
+ {0xDF6D, 0x7FA5}, //9310 #CJK UNIFIED IDEOGRAPH
+ {0xDF6E, 0x7FA7}, //9311 #CJK UNIFIED IDEOGRAPH
+ {0xDF6F, 0x7FDB}, //9312 #CJK UNIFIED IDEOGRAPH
+ {0xDF70, 0x7FDC}, //9313 #CJK UNIFIED IDEOGRAPH
+ {0xDF71, 0x8021}, //9314 #CJK UNIFIED IDEOGRAPH
+ {0xDF72, 0x8164}, //9315 #CJK UNIFIED IDEOGRAPH
+ {0xDF73, 0x8160}, //9316 #CJK UNIFIED IDEOGRAPH
+ {0xDF74, 0x8177}, //9317 #CJK UNIFIED IDEOGRAPH
+ {0xDF75, 0x815C}, //9318 #CJK UNIFIED IDEOGRAPH
+ {0xDF76, 0x8169}, //9319 #CJK UNIFIED IDEOGRAPH
+ {0xDF77, 0x815B}, //9320 #CJK UNIFIED IDEOGRAPH
+ {0xDF78, 0x8162}, //9321 #CJK UNIFIED IDEOGRAPH
+ {0xDF79, 0x8172}, //9322 #CJK UNIFIED IDEOGRAPH
+ {0xDF7A, 0x6721}, //9323 #CJK UNIFIED IDEOGRAPH
+ {0xDF7B, 0x815E}, //9324 #CJK UNIFIED IDEOGRAPH
+ {0xDF7C, 0x8176}, //9325 #CJK UNIFIED IDEOGRAPH
+ {0xDF7D, 0x8167}, //9326 #CJK UNIFIED IDEOGRAPH
+ {0xDF7E, 0x816F}, //9327 #CJK UNIFIED IDEOGRAPH
+ {0xDFA1, 0x8144}, //9328 #CJK UNIFIED IDEOGRAPH
+ {0xDFA2, 0x8161}, //9329 #CJK UNIFIED IDEOGRAPH
+ {0xDFA3, 0x821D}, //9330 #CJK UNIFIED IDEOGRAPH
+ {0xDFA4, 0x8249}, //9331 #CJK UNIFIED IDEOGRAPH
+ {0xDFA5, 0x8244}, //9332 #CJK UNIFIED IDEOGRAPH
+ {0xDFA6, 0x8240}, //9333 #CJK UNIFIED IDEOGRAPH
+ {0xDFA7, 0x8242}, //9334 #CJK UNIFIED IDEOGRAPH
+ {0xDFA8, 0x8245}, //9335 #CJK UNIFIED IDEOGRAPH
+ {0xDFA9, 0x84F1}, //9336 #CJK UNIFIED IDEOGRAPH
+ {0xDFAA, 0x843F}, //9337 #CJK UNIFIED IDEOGRAPH
+ {0xDFAB, 0x8456}, //9338 #CJK UNIFIED IDEOGRAPH
+ {0xDFAC, 0x8476}, //9339 #CJK UNIFIED IDEOGRAPH
+ {0xDFAD, 0x8479}, //9340 #CJK UNIFIED IDEOGRAPH
+ {0xDFAE, 0x848F}, //9341 #CJK UNIFIED IDEOGRAPH
+ {0xDFAF, 0x848D}, //9342 #CJK UNIFIED IDEOGRAPH
+ {0xDFB0, 0x8465}, //9343 #CJK UNIFIED IDEOGRAPH
+ {0xDFB1, 0x8451}, //9344 #CJK UNIFIED IDEOGRAPH
+ {0xDFB2, 0x8440}, //9345 #CJK UNIFIED IDEOGRAPH
+ {0xDFB3, 0x8486}, //9346 #CJK UNIFIED IDEOGRAPH
+ {0xDFB4, 0x8467}, //9347 #CJK UNIFIED IDEOGRAPH
+ {0xDFB5, 0x8430}, //9348 #CJK UNIFIED IDEOGRAPH
+ {0xDFB6, 0x844D}, //9349 #CJK UNIFIED IDEOGRAPH
+ {0xDFB7, 0x847D}, //9350 #CJK UNIFIED IDEOGRAPH
+ {0xDFB8, 0x845A}, //9351 #CJK UNIFIED IDEOGRAPH
+ {0xDFB9, 0x8459}, //9352 #CJK UNIFIED IDEOGRAPH
+ {0xDFBA, 0x8474}, //9353 #CJK UNIFIED IDEOGRAPH
+ {0xDFBB, 0x8473}, //9354 #CJK UNIFIED IDEOGRAPH
+ {0xDFBC, 0x845D}, //9355 #CJK UNIFIED IDEOGRAPH
+ {0xDFBD, 0x8507}, //9356 #CJK UNIFIED IDEOGRAPH
+ {0xDFBE, 0x845E}, //9357 #CJK UNIFIED IDEOGRAPH
+ {0xDFBF, 0x8437}, //9358 #CJK UNIFIED IDEOGRAPH
+ {0xDFC0, 0x843A}, //9359 #CJK UNIFIED IDEOGRAPH
+ {0xDFC1, 0x8434}, //9360 #CJK UNIFIED IDEOGRAPH
+ {0xDFC2, 0x847A}, //9361 #CJK UNIFIED IDEOGRAPH
+ {0xDFC3, 0x8443}, //9362 #CJK UNIFIED IDEOGRAPH
+ {0xDFC4, 0x8478}, //9363 #CJK UNIFIED IDEOGRAPH
+ {0xDFC5, 0x8432}, //9364 #CJK UNIFIED IDEOGRAPH
+ {0xDFC6, 0x8445}, //9365 #CJK UNIFIED IDEOGRAPH
+ {0xDFC7, 0x8429}, //9366 #CJK UNIFIED IDEOGRAPH
+ {0xDFC8, 0x83D9}, //9367 #CJK UNIFIED IDEOGRAPH
+ {0xDFC9, 0x844B}, //9368 #CJK UNIFIED IDEOGRAPH
+ {0xDFCA, 0x842F}, //9369 #CJK UNIFIED IDEOGRAPH
+ {0xDFCB, 0x8442}, //9370 #CJK UNIFIED IDEOGRAPH
+ {0xDFCC, 0x842D}, //9371 #CJK UNIFIED IDEOGRAPH
+ {0xDFCD, 0x845F}, //9372 #CJK UNIFIED IDEOGRAPH
+ {0xDFCE, 0x8470}, //9373 #CJK UNIFIED IDEOGRAPH
+ {0xDFCF, 0x8439}, //9374 #CJK UNIFIED IDEOGRAPH
+ {0xDFD0, 0x844E}, //9375 #CJK UNIFIED IDEOGRAPH
+ {0xDFD1, 0x844C}, //9376 #CJK UNIFIED IDEOGRAPH
+ {0xDFD2, 0x8452}, //9377 #CJK UNIFIED IDEOGRAPH
+ {0xDFD3, 0x846F}, //9378 #CJK UNIFIED IDEOGRAPH
+ {0xDFD4, 0x84C5}, //9379 #CJK UNIFIED IDEOGRAPH
+ {0xDFD5, 0x848E}, //9380 #CJK UNIFIED IDEOGRAPH
+ {0xDFD6, 0x843B}, //9381 #CJK UNIFIED IDEOGRAPH
+ {0xDFD7, 0x8447}, //9382 #CJK UNIFIED IDEOGRAPH
+ {0xDFD8, 0x8436}, //9383 #CJK UNIFIED IDEOGRAPH
+ {0xDFD9, 0x8433}, //9384 #CJK UNIFIED IDEOGRAPH
+ {0xDFDA, 0x8468}, //9385 #CJK UNIFIED IDEOGRAPH
+ {0xDFDB, 0x847E}, //9386 #CJK UNIFIED IDEOGRAPH
+ {0xDFDC, 0x8444}, //9387 #CJK UNIFIED IDEOGRAPH
+ {0xDFDD, 0x842B}, //9388 #CJK UNIFIED IDEOGRAPH
+ {0xDFDE, 0x8460}, //9389 #CJK UNIFIED IDEOGRAPH
+ {0xDFDF, 0x8454}, //9390 #CJK UNIFIED IDEOGRAPH
+ {0xDFE0, 0x846E}, //9391 #CJK UNIFIED IDEOGRAPH
+ {0xDFE1, 0x8450}, //9392 #CJK UNIFIED IDEOGRAPH
+ {0xDFE2, 0x870B}, //9393 #CJK UNIFIED IDEOGRAPH
+ {0xDFE3, 0x8704}, //9394 #CJK UNIFIED IDEOGRAPH
+ {0xDFE4, 0x86F7}, //9395 #CJK UNIFIED IDEOGRAPH
+ {0xDFE5, 0x870C}, //9396 #CJK UNIFIED IDEOGRAPH
+ {0xDFE6, 0x86FA}, //9397 #CJK UNIFIED IDEOGRAPH
+ {0xDFE7, 0x86D6}, //9398 #CJK UNIFIED IDEOGRAPH
+ {0xDFE8, 0x86F5}, //9399 #CJK UNIFIED IDEOGRAPH
+ {0xDFE9, 0x874D}, //9400 #CJK UNIFIED IDEOGRAPH
+ {0xDFEA, 0x86F8}, //9401 #CJK UNIFIED IDEOGRAPH
+ {0xDFEB, 0x870E}, //9402 #CJK UNIFIED IDEOGRAPH
+ {0xDFEC, 0x8709}, //9403 #CJK UNIFIED IDEOGRAPH
+ {0xDFED, 0x8701}, //9404 #CJK UNIFIED IDEOGRAPH
+ {0xDFEE, 0x86F6}, //9405 #CJK UNIFIED IDEOGRAPH
+ {0xDFEF, 0x870D}, //9406 #CJK UNIFIED IDEOGRAPH
+ {0xDFF0, 0x8705}, //9407 #CJK UNIFIED IDEOGRAPH
+ {0xDFF1, 0x88D6}, //9408 #CJK UNIFIED IDEOGRAPH
+ {0xDFF2, 0x88CB}, //9409 #CJK UNIFIED IDEOGRAPH
+ {0xDFF3, 0x88CD}, //9410 #CJK UNIFIED IDEOGRAPH
+ {0xDFF4, 0x88CE}, //9411 #CJK UNIFIED IDEOGRAPH
+ {0xDFF5, 0x88DE}, //9412 #CJK UNIFIED IDEOGRAPH
+ {0xDFF6, 0x88DB}, //9413 #CJK UNIFIED IDEOGRAPH
+ {0xDFF7, 0x88DA}, //9414 #CJK UNIFIED IDEOGRAPH
+ {0xDFF8, 0x88CC}, //9415 #CJK UNIFIED IDEOGRAPH
+ {0xDFF9, 0x88D0}, //9416 #CJK UNIFIED IDEOGRAPH
+ {0xDFFA, 0x8985}, //9417 #CJK UNIFIED IDEOGRAPH
+ {0xDFFB, 0x899B}, //9418 #CJK UNIFIED IDEOGRAPH
+ {0xDFFC, 0x89DF}, //9419 #CJK UNIFIED IDEOGRAPH
+ {0xDFFD, 0x89E5}, //9420 #CJK UNIFIED IDEOGRAPH
+ {0xDFFE, 0x89E4}, //9421 #CJK UNIFIED IDEOGRAPH
+ {0xE040, 0x89E1}, //9422 #CJK UNIFIED IDEOGRAPH
+ {0xE041, 0x89E0}, //9423 #CJK UNIFIED IDEOGRAPH
+ {0xE042, 0x89E2}, //9424 #CJK UNIFIED IDEOGRAPH
+ {0xE043, 0x89DC}, //9425 #CJK UNIFIED IDEOGRAPH
+ {0xE044, 0x89E6}, //9426 #CJK UNIFIED IDEOGRAPH
+ {0xE045, 0x8A76}, //9427 #CJK UNIFIED IDEOGRAPH
+ {0xE046, 0x8A86}, //9428 #CJK UNIFIED IDEOGRAPH
+ {0xE047, 0x8A7F}, //9429 #CJK UNIFIED IDEOGRAPH
+ {0xE048, 0x8A61}, //9430 #CJK UNIFIED IDEOGRAPH
+ {0xE049, 0x8A3F}, //9431 #CJK UNIFIED IDEOGRAPH
+ {0xE04A, 0x8A77}, //9432 #CJK UNIFIED IDEOGRAPH
+ {0xE04B, 0x8A82}, //9433 #CJK UNIFIED IDEOGRAPH
+ {0xE04C, 0x8A84}, //9434 #CJK UNIFIED IDEOGRAPH
+ {0xE04D, 0x8A75}, //9435 #CJK UNIFIED IDEOGRAPH
+ {0xE04E, 0x8A83}, //9436 #CJK UNIFIED IDEOGRAPH
+ {0xE04F, 0x8A81}, //9437 #CJK UNIFIED IDEOGRAPH
+ {0xE050, 0x8A74}, //9438 #CJK UNIFIED IDEOGRAPH
+ {0xE051, 0x8A7A}, //9439 #CJK UNIFIED IDEOGRAPH
+ {0xE052, 0x8C3C}, //9440 #CJK UNIFIED IDEOGRAPH
+ {0xE053, 0x8C4B}, //9441 #CJK UNIFIED IDEOGRAPH
+ {0xE054, 0x8C4A}, //9442 #CJK UNIFIED IDEOGRAPH
+ {0xE055, 0x8C65}, //9443 #CJK UNIFIED IDEOGRAPH
+ {0xE056, 0x8C64}, //9444 #CJK UNIFIED IDEOGRAPH
+ {0xE057, 0x8C66}, //9445 #CJK UNIFIED IDEOGRAPH
+ {0xE058, 0x8C86}, //9446 #CJK UNIFIED IDEOGRAPH
+ {0xE059, 0x8C84}, //9447 #CJK UNIFIED IDEOGRAPH
+ {0xE05A, 0x8C85}, //9448 #CJK UNIFIED IDEOGRAPH
+ {0xE05B, 0x8CCC}, //9449 #CJK UNIFIED IDEOGRAPH
+ {0xE05C, 0x8D68}, //9450 #CJK UNIFIED IDEOGRAPH
+ {0xE05D, 0x8D69}, //9451 #CJK UNIFIED IDEOGRAPH
+ {0xE05E, 0x8D91}, //9452 #CJK UNIFIED IDEOGRAPH
+ {0xE05F, 0x8D8C}, //9453 #CJK UNIFIED IDEOGRAPH
+ {0xE060, 0x8D8E}, //9454 #CJK UNIFIED IDEOGRAPH
+ {0xE061, 0x8D8F}, //9455 #CJK UNIFIED IDEOGRAPH
+ {0xE062, 0x8D8D}, //9456 #CJK UNIFIED IDEOGRAPH
+ {0xE063, 0x8D93}, //9457 #CJK UNIFIED IDEOGRAPH
+ {0xE064, 0x8D94}, //9458 #CJK UNIFIED IDEOGRAPH
+ {0xE065, 0x8D90}, //9459 #CJK UNIFIED IDEOGRAPH
+ {0xE066, 0x8D92}, //9460 #CJK UNIFIED IDEOGRAPH
+ {0xE067, 0x8DF0}, //9461 #CJK UNIFIED IDEOGRAPH
+ {0xE068, 0x8DE0}, //9462 #CJK UNIFIED IDEOGRAPH
+ {0xE069, 0x8DEC}, //9463 #CJK UNIFIED IDEOGRAPH
+ {0xE06A, 0x8DF1}, //9464 #CJK UNIFIED IDEOGRAPH
+ {0xE06B, 0x8DEE}, //9465 #CJK UNIFIED IDEOGRAPH
+ {0xE06C, 0x8DD0}, //9466 #CJK UNIFIED IDEOGRAPH
+ {0xE06D, 0x8DE9}, //9467 #CJK UNIFIED IDEOGRAPH
+ {0xE06E, 0x8DE3}, //9468 #CJK UNIFIED IDEOGRAPH
+ {0xE06F, 0x8DE2}, //9469 #CJK UNIFIED IDEOGRAPH
+ {0xE070, 0x8DE7}, //9470 #CJK UNIFIED IDEOGRAPH
+ {0xE071, 0x8DF2}, //9471 #CJK UNIFIED IDEOGRAPH
+ {0xE072, 0x8DEB}, //9472 #CJK UNIFIED IDEOGRAPH
+ {0xE073, 0x8DF4}, //9473 #CJK UNIFIED IDEOGRAPH
+ {0xE074, 0x8F06}, //9474 #CJK UNIFIED IDEOGRAPH
+ {0xE075, 0x8EFF}, //9475 #CJK UNIFIED IDEOGRAPH
+ {0xE076, 0x8F01}, //9476 #CJK UNIFIED IDEOGRAPH
+ {0xE077, 0x8F00}, //9477 #CJK UNIFIED IDEOGRAPH
+ {0xE078, 0x8F05}, //9478 #CJK UNIFIED IDEOGRAPH
+ {0xE079, 0x8F07}, //9479 #CJK UNIFIED IDEOGRAPH
+ {0xE07A, 0x8F08}, //9480 #CJK UNIFIED IDEOGRAPH
+ {0xE07B, 0x8F02}, //9481 #CJK UNIFIED IDEOGRAPH
+ {0xE07C, 0x8F0B}, //9482 #CJK UNIFIED IDEOGRAPH
+ {0xE07D, 0x9052}, //9483 #CJK UNIFIED IDEOGRAPH
+ {0xE07E, 0x903F}, //9484 #CJK UNIFIED IDEOGRAPH
+ {0xE0A1, 0x9044}, //9485 #CJK UNIFIED IDEOGRAPH
+ {0xE0A2, 0x9049}, //9486 #CJK UNIFIED IDEOGRAPH
+ {0xE0A3, 0x903D}, //9487 #CJK UNIFIED IDEOGRAPH
+ {0xE0A4, 0x9110}, //9488 #CJK UNIFIED IDEOGRAPH
+ {0xE0A5, 0x910D}, //9489 #CJK UNIFIED IDEOGRAPH
+ {0xE0A6, 0x910F}, //9490 #CJK UNIFIED IDEOGRAPH
+ {0xE0A7, 0x9111}, //9491 #CJK UNIFIED IDEOGRAPH
+ {0xE0A8, 0x9116}, //9492 #CJK UNIFIED IDEOGRAPH
+ {0xE0A9, 0x9114}, //9493 #CJK UNIFIED IDEOGRAPH
+ {0xE0AA, 0x910B}, //9494 #CJK UNIFIED IDEOGRAPH
+ {0xE0AB, 0x910E}, //9495 #CJK UNIFIED IDEOGRAPH
+ {0xE0AC, 0x916E}, //9496 #CJK UNIFIED IDEOGRAPH
+ {0xE0AD, 0x916F}, //9497 #CJK UNIFIED IDEOGRAPH
+ {0xE0AE, 0x9248}, //9498 #CJK UNIFIED IDEOGRAPH
+ {0xE0AF, 0x9252}, //9499 #CJK UNIFIED IDEOGRAPH
+ {0xE0B0, 0x9230}, //9500 #CJK UNIFIED IDEOGRAPH
+ {0xE0B1, 0x923A}, //9501 #CJK UNIFIED IDEOGRAPH
+ {0xE0B2, 0x9266}, //9502 #CJK UNIFIED IDEOGRAPH
+ {0xE0B3, 0x9233}, //9503 #CJK UNIFIED IDEOGRAPH
+ {0xE0B4, 0x9265}, //9504 #CJK UNIFIED IDEOGRAPH
+ {0xE0B5, 0x925E}, //9505 #CJK UNIFIED IDEOGRAPH
+ {0xE0B6, 0x9283}, //9506 #CJK UNIFIED IDEOGRAPH
+ {0xE0B7, 0x922E}, //9507 #CJK UNIFIED IDEOGRAPH
+ {0xE0B8, 0x924A}, //9508 #CJK UNIFIED IDEOGRAPH
+ {0xE0B9, 0x9246}, //9509 #CJK UNIFIED IDEOGRAPH
+ {0xE0BA, 0x926D}, //9510 #CJK UNIFIED IDEOGRAPH
+ {0xE0BB, 0x926C}, //9511 #CJK UNIFIED IDEOGRAPH
+ {0xE0BC, 0x924F}, //9512 #CJK UNIFIED IDEOGRAPH
+ {0xE0BD, 0x9260}, //9513 #CJK UNIFIED IDEOGRAPH
+ {0xE0BE, 0x9267}, //9514 #CJK UNIFIED IDEOGRAPH
+ {0xE0BF, 0x926F}, //9515 #CJK UNIFIED IDEOGRAPH
+ {0xE0C0, 0x9236}, //9516 #CJK UNIFIED IDEOGRAPH
+ {0xE0C1, 0x9261}, //9517 #CJK UNIFIED IDEOGRAPH
+ {0xE0C2, 0x9270}, //9518 #CJK UNIFIED IDEOGRAPH
+ {0xE0C3, 0x9231}, //9519 #CJK UNIFIED IDEOGRAPH
+ {0xE0C4, 0x9254}, //9520 #CJK UNIFIED IDEOGRAPH
+ {0xE0C5, 0x9263}, //9521 #CJK UNIFIED IDEOGRAPH
+ {0xE0C6, 0x9250}, //9522 #CJK UNIFIED IDEOGRAPH
+ {0xE0C7, 0x9272}, //9523 #CJK UNIFIED IDEOGRAPH
+ {0xE0C8, 0x924E}, //9524 #CJK UNIFIED IDEOGRAPH
+ {0xE0C9, 0x9253}, //9525 #CJK UNIFIED IDEOGRAPH
+ {0xE0CA, 0x924C}, //9526 #CJK UNIFIED IDEOGRAPH
+ {0xE0CB, 0x9256}, //9527 #CJK UNIFIED IDEOGRAPH
+ {0xE0CC, 0x9232}, //9528 #CJK UNIFIED IDEOGRAPH
+ {0xE0CD, 0x959F}, //9529 #CJK UNIFIED IDEOGRAPH
+ {0xE0CE, 0x959C}, //9530 #CJK UNIFIED IDEOGRAPH
+ {0xE0CF, 0x959E}, //9531 #CJK UNIFIED IDEOGRAPH
+ {0xE0D0, 0x959B}, //9532 #CJK UNIFIED IDEOGRAPH
+ {0xE0D1, 0x9692}, //9533 #CJK UNIFIED IDEOGRAPH
+ {0xE0D2, 0x9693}, //9534 #CJK UNIFIED IDEOGRAPH
+ {0xE0D3, 0x9691}, //9535 #CJK UNIFIED IDEOGRAPH
+ {0xE0D4, 0x9697}, //9536 #CJK UNIFIED IDEOGRAPH
+ {0xE0D5, 0x96CE}, //9537 #CJK UNIFIED IDEOGRAPH
+ {0xE0D6, 0x96FA}, //9538 #CJK UNIFIED IDEOGRAPH
+ {0xE0D7, 0x96FD}, //9539 #CJK UNIFIED IDEOGRAPH
+ {0xE0D8, 0x96F8}, //9540 #CJK UNIFIED IDEOGRAPH
+ {0xE0D9, 0x96F5}, //9541 #CJK UNIFIED IDEOGRAPH
+ {0xE0DA, 0x9773}, //9542 #CJK UNIFIED IDEOGRAPH
+ {0xE0DB, 0x9777}, //9543 #CJK UNIFIED IDEOGRAPH
+ {0xE0DC, 0x9778}, //9544 #CJK UNIFIED IDEOGRAPH
+ {0xE0DD, 0x9772}, //9545 #CJK UNIFIED IDEOGRAPH
+ {0xE0DE, 0x980F}, //9546 #CJK UNIFIED IDEOGRAPH
+ {0xE0DF, 0x980D}, //9547 #CJK UNIFIED IDEOGRAPH
+ {0xE0E0, 0x980E}, //9548 #CJK UNIFIED IDEOGRAPH
+ {0xE0E1, 0x98AC}, //9549 #CJK UNIFIED IDEOGRAPH
+ {0xE0E2, 0x98F6}, //9550 #CJK UNIFIED IDEOGRAPH
+ {0xE0E3, 0x98F9}, //9551 #CJK UNIFIED IDEOGRAPH
+ {0xE0E4, 0x99AF}, //9552 #CJK UNIFIED IDEOGRAPH
+ {0xE0E5, 0x99B2}, //9553 #CJK UNIFIED IDEOGRAPH
+ {0xE0E6, 0x99B0}, //9554 #CJK UNIFIED IDEOGRAPH
+ {0xE0E7, 0x99B5}, //9555 #CJK UNIFIED IDEOGRAPH
+ {0xE0E8, 0x9AAD}, //9556 #CJK UNIFIED IDEOGRAPH
+ {0xE0E9, 0x9AAB}, //9557 #CJK UNIFIED IDEOGRAPH
+ {0xE0EA, 0x9B5B}, //9558 #CJK UNIFIED IDEOGRAPH
+ {0xE0EB, 0x9CEA}, //9559 #CJK UNIFIED IDEOGRAPH
+ {0xE0EC, 0x9CED}, //9560 #CJK UNIFIED IDEOGRAPH
+ {0xE0ED, 0x9CE7}, //9561 #CJK UNIFIED IDEOGRAPH
+ {0xE0EE, 0x9E80}, //9562 #CJK UNIFIED IDEOGRAPH
+ {0xE0EF, 0x9EFD}, //9563 #CJK UNIFIED IDEOGRAPH
+ {0xE0F0, 0x50E6}, //9564 #CJK UNIFIED IDEOGRAPH
+ {0xE0F1, 0x50D4}, //9565 #CJK UNIFIED IDEOGRAPH
+ {0xE0F2, 0x50D7}, //9566 #CJK UNIFIED IDEOGRAPH
+ {0xE0F3, 0x50E8}, //9567 #CJK UNIFIED IDEOGRAPH
+ {0xE0F4, 0x50F3}, //9568 #CJK UNIFIED IDEOGRAPH
+ {0xE0F5, 0x50DB}, //9569 #CJK UNIFIED IDEOGRAPH
+ {0xE0F6, 0x50EA}, //9570 #CJK UNIFIED IDEOGRAPH
+ {0xE0F7, 0x50DD}, //9571 #CJK UNIFIED IDEOGRAPH
+ {0xE0F8, 0x50E4}, //9572 #CJK UNIFIED IDEOGRAPH
+ {0xE0F9, 0x50D3}, //9573 #CJK UNIFIED IDEOGRAPH
+ {0xE0FA, 0x50EC}, //9574 #CJK UNIFIED IDEOGRAPH
+ {0xE0FB, 0x50F0}, //9575 #CJK UNIFIED IDEOGRAPH
+ {0xE0FC, 0x50EF}, //9576 #CJK UNIFIED IDEOGRAPH
+ {0xE0FD, 0x50E3}, //9577 #CJK UNIFIED IDEOGRAPH
+ {0xE0FE, 0x50E0}, //9578 #CJK UNIFIED IDEOGRAPH
+ {0xE140, 0x51D8}, //9579 #CJK UNIFIED IDEOGRAPH
+ {0xE141, 0x5280}, //9580 #CJK UNIFIED IDEOGRAPH
+ {0xE142, 0x5281}, //9581 #CJK UNIFIED IDEOGRAPH
+ {0xE143, 0x52E9}, //9582 #CJK UNIFIED IDEOGRAPH
+ {0xE144, 0x52EB}, //9583 #CJK UNIFIED IDEOGRAPH
+ {0xE145, 0x5330}, //9584 #CJK UNIFIED IDEOGRAPH
+ {0xE146, 0x53AC}, //9585 #CJK UNIFIED IDEOGRAPH
+ {0xE147, 0x5627}, //9586 #CJK UNIFIED IDEOGRAPH
+ {0xE148, 0x5615}, //9587 #CJK UNIFIED IDEOGRAPH
+ {0xE149, 0x560C}, //9588 #CJK UNIFIED IDEOGRAPH
+ {0xE14A, 0x5612}, //9589 #CJK UNIFIED IDEOGRAPH
+ {0xE14B, 0x55FC}, //9590 #CJK UNIFIED IDEOGRAPH
+ {0xE14C, 0x560F}, //9591 #CJK UNIFIED IDEOGRAPH
+ {0xE14D, 0x561C}, //9592 #CJK UNIFIED IDEOGRAPH
+ {0xE14E, 0x5601}, //9593 #CJK UNIFIED IDEOGRAPH
+ {0xE14F, 0x5613}, //9594 #CJK UNIFIED IDEOGRAPH
+ {0xE150, 0x5602}, //9595 #CJK UNIFIED IDEOGRAPH
+ {0xE151, 0x55FA}, //9596 #CJK UNIFIED IDEOGRAPH
+ {0xE152, 0x561D}, //9597 #CJK UNIFIED IDEOGRAPH
+ {0xE153, 0x5604}, //9598 #CJK UNIFIED IDEOGRAPH
+ {0xE154, 0x55FF}, //9599 #CJK UNIFIED IDEOGRAPH
+ {0xE155, 0x55F9}, //9600 #CJK UNIFIED IDEOGRAPH
+ {0xE156, 0x5889}, //9601 #CJK UNIFIED IDEOGRAPH
+ {0xE157, 0x587C}, //9602 #CJK UNIFIED IDEOGRAPH
+ {0xE158, 0x5890}, //9603 #CJK UNIFIED IDEOGRAPH
+ {0xE159, 0x5898}, //9604 #CJK UNIFIED IDEOGRAPH
+ {0xE15A, 0x5886}, //9605 #CJK UNIFIED IDEOGRAPH
+ {0xE15B, 0x5881}, //9606 #CJK UNIFIED IDEOGRAPH
+ {0xE15C, 0x587F}, //9607 #CJK UNIFIED IDEOGRAPH
+ {0xE15D, 0x5874}, //9608 #CJK UNIFIED IDEOGRAPH
+ {0xE15E, 0x588B}, //9609 #CJK UNIFIED IDEOGRAPH
+ {0xE15F, 0x587A}, //9610 #CJK UNIFIED IDEOGRAPH
+ {0xE160, 0x5887}, //9611 #CJK UNIFIED IDEOGRAPH
+ {0xE161, 0x5891}, //9612 #CJK UNIFIED IDEOGRAPH
+ {0xE162, 0x588E}, //9613 #CJK UNIFIED IDEOGRAPH
+ {0xE163, 0x5876}, //9614 #CJK UNIFIED IDEOGRAPH
+ {0xE164, 0x5882}, //9615 #CJK UNIFIED IDEOGRAPH
+ {0xE165, 0x5888}, //9616 #CJK UNIFIED IDEOGRAPH
+ {0xE166, 0x587B}, //9617 #CJK UNIFIED IDEOGRAPH
+ {0xE167, 0x5894}, //9618 #CJK UNIFIED IDEOGRAPH
+ {0xE168, 0x588F}, //9619 #CJK UNIFIED IDEOGRAPH
+ {0xE169, 0x58FE}, //9620 #CJK UNIFIED IDEOGRAPH
+ {0xE16A, 0x596B}, //9621 #CJK UNIFIED IDEOGRAPH
+ {0xE16B, 0x5ADC}, //9622 #CJK UNIFIED IDEOGRAPH
+ {0xE16C, 0x5AEE}, //9623 #CJK UNIFIED IDEOGRAPH
+ {0xE16D, 0x5AE5}, //9624 #CJK UNIFIED IDEOGRAPH
+ {0xE16E, 0x5AD5}, //9625 #CJK UNIFIED IDEOGRAPH
+ {0xE16F, 0x5AEA}, //9626 #CJK UNIFIED IDEOGRAPH
+ {0xE170, 0x5ADA}, //9627 #CJK UNIFIED IDEOGRAPH
+ {0xE171, 0x5AED}, //9628 #CJK UNIFIED IDEOGRAPH
+ {0xE172, 0x5AEB}, //9629 #CJK UNIFIED IDEOGRAPH
+ {0xE173, 0x5AF3}, //9630 #CJK UNIFIED IDEOGRAPH
+ {0xE174, 0x5AE2}, //9631 #CJK UNIFIED IDEOGRAPH
+ {0xE175, 0x5AE0}, //9632 #CJK UNIFIED IDEOGRAPH
+ {0xE176, 0x5ADB}, //9633 #CJK UNIFIED IDEOGRAPH
+ {0xE177, 0x5AEC}, //9634 #CJK UNIFIED IDEOGRAPH
+ {0xE178, 0x5ADE}, //9635 #CJK UNIFIED IDEOGRAPH
+ {0xE179, 0x5ADD}, //9636 #CJK UNIFIED IDEOGRAPH
+ {0xE17A, 0x5AD9}, //9637 #CJK UNIFIED IDEOGRAPH
+ {0xE17B, 0x5AE8}, //9638 #CJK UNIFIED IDEOGRAPH
+ {0xE17C, 0x5ADF}, //9639 #CJK UNIFIED IDEOGRAPH
+ {0xE17D, 0x5B77}, //9640 #CJK UNIFIED IDEOGRAPH
+ {0xE17E, 0x5BE0}, //9641 #CJK UNIFIED IDEOGRAPH
+ {0xE1A1, 0x5BE3}, //9642 #CJK UNIFIED IDEOGRAPH
+ {0xE1A2, 0x5C63}, //9643 #CJK UNIFIED IDEOGRAPH
+ {0xE1A3, 0x5D82}, //9644 #CJK UNIFIED IDEOGRAPH
+ {0xE1A4, 0x5D80}, //9645 #CJK UNIFIED IDEOGRAPH
+ {0xE1A5, 0x5D7D}, //9646 #CJK UNIFIED IDEOGRAPH
+ {0xE1A6, 0x5D86}, //9647 #CJK UNIFIED IDEOGRAPH
+ {0xE1A7, 0x5D7A}, //9648 #CJK UNIFIED IDEOGRAPH
+ {0xE1A8, 0x5D81}, //9649 #CJK UNIFIED IDEOGRAPH
+ {0xE1A9, 0x5D77}, //9650 #CJK UNIFIED IDEOGRAPH
+ {0xE1AA, 0x5D8A}, //9651 #CJK UNIFIED IDEOGRAPH
+ {0xE1AB, 0x5D89}, //9652 #CJK UNIFIED IDEOGRAPH
+ {0xE1AC, 0x5D88}, //9653 #CJK UNIFIED IDEOGRAPH
+ {0xE1AD, 0x5D7E}, //9654 #CJK UNIFIED IDEOGRAPH
+ {0xE1AE, 0x5D7C}, //9655 #CJK UNIFIED IDEOGRAPH
+ {0xE1AF, 0x5D8D}, //9656 #CJK UNIFIED IDEOGRAPH
+ {0xE1B0, 0x5D79}, //9657 #CJK UNIFIED IDEOGRAPH
+ {0xE1B1, 0x5D7F}, //9658 #CJK UNIFIED IDEOGRAPH
+ {0xE1B2, 0x5E58}, //9659 #CJK UNIFIED IDEOGRAPH
+ {0xE1B3, 0x5E59}, //9660 #CJK UNIFIED IDEOGRAPH
+ {0xE1B4, 0x5E53}, //9661 #CJK UNIFIED IDEOGRAPH
+ {0xE1B5, 0x5ED8}, //9662 #CJK UNIFIED IDEOGRAPH
+ {0xE1B6, 0x5ED1}, //9663 #CJK UNIFIED IDEOGRAPH
+ {0xE1B7, 0x5ED7}, //9664 #CJK UNIFIED IDEOGRAPH
+ {0xE1B8, 0x5ECE}, //9665 #CJK UNIFIED IDEOGRAPH
+ {0xE1B9, 0x5EDC}, //9666 #CJK UNIFIED IDEOGRAPH
+ {0xE1BA, 0x5ED5}, //9667 #CJK UNIFIED IDEOGRAPH
+ {0xE1BB, 0x5ED9}, //9668 #CJK UNIFIED IDEOGRAPH
+ {0xE1BC, 0x5ED2}, //9669 #CJK UNIFIED IDEOGRAPH
+ {0xE1BD, 0x5ED4}, //9670 #CJK UNIFIED IDEOGRAPH
+ {0xE1BE, 0x5F44}, //9671 #CJK UNIFIED IDEOGRAPH
+ {0xE1BF, 0x5F43}, //9672 #CJK UNIFIED IDEOGRAPH
+ {0xE1C0, 0x5F6F}, //9673 #CJK UNIFIED IDEOGRAPH
+ {0xE1C1, 0x5FB6}, //9674 #CJK UNIFIED IDEOGRAPH
+ {0xE1C2, 0x612C}, //9675 #CJK UNIFIED IDEOGRAPH
+ {0xE1C3, 0x6128}, //9676 #CJK UNIFIED IDEOGRAPH
+ {0xE1C4, 0x6141}, //9677 #CJK UNIFIED IDEOGRAPH
+ {0xE1C5, 0x615E}, //9678 #CJK UNIFIED IDEOGRAPH
+ {0xE1C6, 0x6171}, //9679 #CJK UNIFIED IDEOGRAPH
+ {0xE1C7, 0x6173}, //9680 #CJK UNIFIED IDEOGRAPH
+ {0xE1C8, 0x6152}, //9681 #CJK UNIFIED IDEOGRAPH
+ {0xE1C9, 0x6153}, //9682 #CJK UNIFIED IDEOGRAPH
+ {0xE1CA, 0x6172}, //9683 #CJK UNIFIED IDEOGRAPH
+ {0xE1CB, 0x616C}, //9684 #CJK UNIFIED IDEOGRAPH
+ {0xE1CC, 0x6180}, //9685 #CJK UNIFIED IDEOGRAPH
+ {0xE1CD, 0x6174}, //9686 #CJK UNIFIED IDEOGRAPH
+ {0xE1CE, 0x6154}, //9687 #CJK UNIFIED IDEOGRAPH
+ {0xE1CF, 0x617A}, //9688 #CJK UNIFIED IDEOGRAPH
+ {0xE1D0, 0x615B}, //9689 #CJK UNIFIED IDEOGRAPH
+ {0xE1D1, 0x6165}, //9690 #CJK UNIFIED IDEOGRAPH
+ {0xE1D2, 0x613B}, //9691 #CJK UNIFIED IDEOGRAPH
+ {0xE1D3, 0x616A}, //9692 #CJK UNIFIED IDEOGRAPH
+ {0xE1D4, 0x6161}, //9693 #CJK UNIFIED IDEOGRAPH
+ {0xE1D5, 0x6156}, //9694 #CJK UNIFIED IDEOGRAPH
+ {0xE1D6, 0x6229}, //9695 #CJK UNIFIED IDEOGRAPH
+ {0xE1D7, 0x6227}, //9696 #CJK UNIFIED IDEOGRAPH
+ {0xE1D8, 0x622B}, //9697 #CJK UNIFIED IDEOGRAPH
+ {0xE1D9, 0x642B}, //9698 #CJK UNIFIED IDEOGRAPH
+ {0xE1DA, 0x644D}, //9699 #CJK UNIFIED IDEOGRAPH
+ {0xE1DB, 0x645B}, //9700 #CJK UNIFIED IDEOGRAPH
+ {0xE1DC, 0x645D}, //9701 #CJK UNIFIED IDEOGRAPH
+ {0xE1DD, 0x6474}, //9702 #CJK UNIFIED IDEOGRAPH
+ {0xE1DE, 0x6476}, //9703 #CJK UNIFIED IDEOGRAPH
+ {0xE1DF, 0x6472}, //9704 #CJK UNIFIED IDEOGRAPH
+ {0xE1E0, 0x6473}, //9705 #CJK UNIFIED IDEOGRAPH
+ {0xE1E1, 0x647D}, //9706 #CJK UNIFIED IDEOGRAPH
+ {0xE1E2, 0x6475}, //9707 #CJK UNIFIED IDEOGRAPH
+ {0xE1E3, 0x6466}, //9708 #CJK UNIFIED IDEOGRAPH
+ {0xE1E4, 0x64A6}, //9709 #CJK UNIFIED IDEOGRAPH
+ {0xE1E5, 0x644E}, //9710 #CJK UNIFIED IDEOGRAPH
+ {0xE1E6, 0x6482}, //9711 #CJK UNIFIED IDEOGRAPH
+ {0xE1E7, 0x645E}, //9712 #CJK UNIFIED IDEOGRAPH
+ {0xE1E8, 0x645C}, //9713 #CJK UNIFIED IDEOGRAPH
+ {0xE1E9, 0x644B}, //9714 #CJK UNIFIED IDEOGRAPH
+ {0xE1EA, 0x6453}, //9715 #CJK UNIFIED IDEOGRAPH
+ {0xE1EB, 0x6460}, //9716 #CJK UNIFIED IDEOGRAPH
+ {0xE1EC, 0x6450}, //9717 #CJK UNIFIED IDEOGRAPH
+ {0xE1ED, 0x647F}, //9718 #CJK UNIFIED IDEOGRAPH
+ {0xE1EE, 0x643F}, //9719 #CJK UNIFIED IDEOGRAPH
+ {0xE1EF, 0x646C}, //9720 #CJK UNIFIED IDEOGRAPH
+ {0xE1F0, 0x646B}, //9721 #CJK UNIFIED IDEOGRAPH
+ {0xE1F1, 0x6459}, //9722 #CJK UNIFIED IDEOGRAPH
+ {0xE1F2, 0x6465}, //9723 #CJK UNIFIED IDEOGRAPH
+ {0xE1F3, 0x6477}, //9724 #CJK UNIFIED IDEOGRAPH
+ {0xE1F4, 0x6573}, //9725 #CJK UNIFIED IDEOGRAPH
+ {0xE1F5, 0x65A0}, //9726 #CJK UNIFIED IDEOGRAPH
+ {0xE1F6, 0x66A1}, //9727 #CJK UNIFIED IDEOGRAPH
+ {0xE1F7, 0x66A0}, //9728 #CJK UNIFIED IDEOGRAPH
+ {0xE1F8, 0x669F}, //9729 #CJK UNIFIED IDEOGRAPH
+ {0xE1F9, 0x6705}, //9730 #CJK UNIFIED IDEOGRAPH
+ {0xE1FA, 0x6704}, //9731 #CJK UNIFIED IDEOGRAPH
+ {0xE1FB, 0x6722}, //9732 #CJK UNIFIED IDEOGRAPH
+ {0xE1FC, 0x69B1}, //9733 #CJK UNIFIED IDEOGRAPH
+ {0xE1FD, 0x69B6}, //9734 #CJK UNIFIED IDEOGRAPH
+ {0xE1FE, 0x69C9}, //9735 #CJK UNIFIED IDEOGRAPH
+ {0xE240, 0x69A0}, //9736 #CJK UNIFIED IDEOGRAPH
+ {0xE241, 0x69CE}, //9737 #CJK UNIFIED IDEOGRAPH
+ {0xE242, 0x6996}, //9738 #CJK UNIFIED IDEOGRAPH
+ {0xE243, 0x69B0}, //9739 #CJK UNIFIED IDEOGRAPH
+ {0xE244, 0x69AC}, //9740 #CJK UNIFIED IDEOGRAPH
+ {0xE245, 0x69BC}, //9741 #CJK UNIFIED IDEOGRAPH
+ {0xE246, 0x6991}, //9742 #CJK UNIFIED IDEOGRAPH
+ {0xE247, 0x6999}, //9743 #CJK UNIFIED IDEOGRAPH
+ {0xE248, 0x698E}, //9744 #CJK UNIFIED IDEOGRAPH
+ {0xE249, 0x69A7}, //9745 #CJK UNIFIED IDEOGRAPH
+ {0xE24A, 0x698D}, //9746 #CJK UNIFIED IDEOGRAPH
+ {0xE24B, 0x69A9}, //9747 #CJK UNIFIED IDEOGRAPH
+ {0xE24C, 0x69BE}, //9748 #CJK UNIFIED IDEOGRAPH
+ {0xE24D, 0x69AF}, //9749 #CJK UNIFIED IDEOGRAPH
+ {0xE24E, 0x69BF}, //9750 #CJK UNIFIED IDEOGRAPH
+ {0xE24F, 0x69C4}, //9751 #CJK UNIFIED IDEOGRAPH
+ {0xE250, 0x69BD}, //9752 #CJK UNIFIED IDEOGRAPH
+ {0xE251, 0x69A4}, //9753 #CJK UNIFIED IDEOGRAPH
+ {0xE252, 0x69D4}, //9754 #CJK UNIFIED IDEOGRAPH
+ {0xE253, 0x69B9}, //9755 #CJK UNIFIED IDEOGRAPH
+ {0xE254, 0x69CA}, //9756 #CJK UNIFIED IDEOGRAPH
+ {0xE255, 0x699A}, //9757 #CJK UNIFIED IDEOGRAPH
+ {0xE256, 0x69CF}, //9758 #CJK UNIFIED IDEOGRAPH
+ {0xE257, 0x69B3}, //9759 #CJK UNIFIED IDEOGRAPH
+ {0xE258, 0x6993}, //9760 #CJK UNIFIED IDEOGRAPH
+ {0xE259, 0x69AA}, //9761 #CJK UNIFIED IDEOGRAPH
+ {0xE25A, 0x69A1}, //9762 #CJK UNIFIED IDEOGRAPH
+ {0xE25B, 0x699E}, //9763 #CJK UNIFIED IDEOGRAPH
+ {0xE25C, 0x69D9}, //9764 #CJK UNIFIED IDEOGRAPH
+ {0xE25D, 0x6997}, //9765 #CJK UNIFIED IDEOGRAPH
+ {0xE25E, 0x6990}, //9766 #CJK UNIFIED IDEOGRAPH
+ {0xE25F, 0x69C2}, //9767 #CJK UNIFIED IDEOGRAPH
+ {0xE260, 0x69B5}, //9768 #CJK UNIFIED IDEOGRAPH
+ {0xE261, 0x69A5}, //9769 #CJK UNIFIED IDEOGRAPH
+ {0xE262, 0x69C6}, //9770 #CJK UNIFIED IDEOGRAPH
+ {0xE263, 0x6B4A}, //9771 #CJK UNIFIED IDEOGRAPH
+ {0xE264, 0x6B4D}, //9772 #CJK UNIFIED IDEOGRAPH
+ {0xE265, 0x6B4B}, //9773 #CJK UNIFIED IDEOGRAPH
+ {0xE266, 0x6B9E}, //9774 #CJK UNIFIED IDEOGRAPH
+ {0xE267, 0x6B9F}, //9775 #CJK UNIFIED IDEOGRAPH
+ {0xE268, 0x6BA0}, //9776 #CJK UNIFIED IDEOGRAPH
+ {0xE269, 0x6BC3}, //9777 #CJK UNIFIED IDEOGRAPH
+ {0xE26A, 0x6BC4}, //9778 #CJK UNIFIED IDEOGRAPH
+ {0xE26B, 0x6BFE}, //9779 #CJK UNIFIED IDEOGRAPH
+ {0xE26C, 0x6ECE}, //9780 #CJK UNIFIED IDEOGRAPH
+ {0xE26D, 0x6EF5}, //9781 #CJK UNIFIED IDEOGRAPH
+ {0xE26E, 0x6EF1}, //9782 #CJK UNIFIED IDEOGRAPH
+ {0xE26F, 0x6F03}, //9783 #CJK UNIFIED IDEOGRAPH
+ {0xE270, 0x6F25}, //9784 #CJK UNIFIED IDEOGRAPH
+ {0xE271, 0x6EF8}, //9785 #CJK UNIFIED IDEOGRAPH
+ {0xE272, 0x6F37}, //9786 #CJK UNIFIED IDEOGRAPH
+ {0xE273, 0x6EFB}, //9787 #CJK UNIFIED IDEOGRAPH
+ {0xE274, 0x6F2E}, //9788 #CJK UNIFIED IDEOGRAPH
+ {0xE275, 0x6F09}, //9789 #CJK UNIFIED IDEOGRAPH
+ {0xE276, 0x6F4E}, //9790 #CJK UNIFIED IDEOGRAPH
+ {0xE277, 0x6F19}, //9791 #CJK UNIFIED IDEOGRAPH
+ {0xE278, 0x6F1A}, //9792 #CJK UNIFIED IDEOGRAPH
+ {0xE279, 0x6F27}, //9793 #CJK UNIFIED IDEOGRAPH
+ {0xE27A, 0x6F18}, //9794 #CJK UNIFIED IDEOGRAPH
+ {0xE27B, 0x6F3B}, //9795 #CJK UNIFIED IDEOGRAPH
+ {0xE27C, 0x6F12}, //9796 #CJK UNIFIED IDEOGRAPH
+ {0xE27D, 0x6EED}, //9797 #CJK UNIFIED IDEOGRAPH
+ {0xE27E, 0x6F0A}, //9798 #CJK UNIFIED IDEOGRAPH
+ {0xE2A1, 0x6F36}, //9799 #CJK UNIFIED IDEOGRAPH
+ {0xE2A2, 0x6F73}, //9800 #CJK UNIFIED IDEOGRAPH
+ {0xE2A3, 0x6EF9}, //9801 #CJK UNIFIED IDEOGRAPH
+ {0xE2A4, 0x6EEE}, //9802 #CJK UNIFIED IDEOGRAPH
+ {0xE2A5, 0x6F2D}, //9803 #CJK UNIFIED IDEOGRAPH
+ {0xE2A6, 0x6F40}, //9804 #CJK UNIFIED IDEOGRAPH
+ {0xE2A7, 0x6F30}, //9805 #CJK UNIFIED IDEOGRAPH
+ {0xE2A8, 0x6F3C}, //9806 #CJK UNIFIED IDEOGRAPH
+ {0xE2A9, 0x6F35}, //9807 #CJK UNIFIED IDEOGRAPH
+ {0xE2AA, 0x6EEB}, //9808 #CJK UNIFIED IDEOGRAPH
+ {0xE2AB, 0x6F07}, //9809 #CJK UNIFIED IDEOGRAPH
+ {0xE2AC, 0x6F0E}, //9810 #CJK UNIFIED IDEOGRAPH
+ {0xE2AD, 0x6F43}, //9811 #CJK UNIFIED IDEOGRAPH
+ {0xE2AE, 0x6F05}, //9812 #CJK UNIFIED IDEOGRAPH
+ {0xE2AF, 0x6EFD}, //9813 #CJK UNIFIED IDEOGRAPH
+ {0xE2B0, 0x6EF6}, //9814 #CJK UNIFIED IDEOGRAPH
+ {0xE2B1, 0x6F39}, //9815 #CJK UNIFIED IDEOGRAPH
+ {0xE2B2, 0x6F1C}, //9816 #CJK UNIFIED IDEOGRAPH
+ {0xE2B3, 0x6EFC}, //9817 #CJK UNIFIED IDEOGRAPH
+ {0xE2B4, 0x6F3A}, //9818 #CJK UNIFIED IDEOGRAPH
+ {0xE2B5, 0x6F1F}, //9819 #CJK UNIFIED IDEOGRAPH
+ {0xE2B6, 0x6F0D}, //9820 #CJK UNIFIED IDEOGRAPH
+ {0xE2B7, 0x6F1E}, //9821 #CJK UNIFIED IDEOGRAPH
+ {0xE2B8, 0x6F08}, //9822 #CJK UNIFIED IDEOGRAPH
+ {0xE2B9, 0x6F21}, //9823 #CJK UNIFIED IDEOGRAPH
+ {0xE2BA, 0x7187}, //9824 #CJK UNIFIED IDEOGRAPH
+ {0xE2BB, 0x7190}, //9825 #CJK UNIFIED IDEOGRAPH
+ {0xE2BC, 0x7189}, //9826 #CJK UNIFIED IDEOGRAPH
+ {0xE2BD, 0x7180}, //9827 #CJK UNIFIED IDEOGRAPH
+ {0xE2BE, 0x7185}, //9828 #CJK UNIFIED IDEOGRAPH
+ {0xE2BF, 0x7182}, //9829 #CJK UNIFIED IDEOGRAPH
+ {0xE2C0, 0x718F}, //9830 #CJK UNIFIED IDEOGRAPH
+ {0xE2C1, 0x717B}, //9831 #CJK UNIFIED IDEOGRAPH
+ {0xE2C2, 0x7186}, //9832 #CJK UNIFIED IDEOGRAPH
+ {0xE2C3, 0x7181}, //9833 #CJK UNIFIED IDEOGRAPH
+ {0xE2C4, 0x7197}, //9834 #CJK UNIFIED IDEOGRAPH
+ {0xE2C5, 0x7244}, //9835 #CJK UNIFIED IDEOGRAPH
+ {0xE2C6, 0x7253}, //9836 #CJK UNIFIED IDEOGRAPH
+ {0xE2C7, 0x7297}, //9837 #CJK UNIFIED IDEOGRAPH
+ {0xE2C8, 0x7295}, //9838 #CJK UNIFIED IDEOGRAPH
+ {0xE2C9, 0x7293}, //9839 #CJK UNIFIED IDEOGRAPH
+ {0xE2CA, 0x7343}, //9840 #CJK UNIFIED IDEOGRAPH
+ {0xE2CB, 0x734D}, //9841 #CJK UNIFIED IDEOGRAPH
+ {0xE2CC, 0x7351}, //9842 #CJK UNIFIED IDEOGRAPH
+ {0xE2CD, 0x734C}, //9843 #CJK UNIFIED IDEOGRAPH
+ {0xE2CE, 0x7462}, //9844 #CJK UNIFIED IDEOGRAPH
+ {0xE2CF, 0x7473}, //9845 #CJK UNIFIED IDEOGRAPH
+ {0xE2D0, 0x7471}, //9846 #CJK UNIFIED IDEOGRAPH
+ {0xE2D1, 0x7475}, //9847 #CJK UNIFIED IDEOGRAPH
+ {0xE2D2, 0x7472}, //9848 #CJK UNIFIED IDEOGRAPH
+ {0xE2D3, 0x7467}, //9849 #CJK UNIFIED IDEOGRAPH
+ {0xE2D4, 0x746E}, //9850 #CJK UNIFIED IDEOGRAPH
+ {0xE2D5, 0x7500}, //9851 #CJK UNIFIED IDEOGRAPH
+ {0xE2D6, 0x7502}, //9852 #CJK UNIFIED IDEOGRAPH
+ {0xE2D7, 0x7503}, //9853 #CJK UNIFIED IDEOGRAPH
+ {0xE2D8, 0x757D}, //9854 #CJK UNIFIED IDEOGRAPH
+ {0xE2D9, 0x7590}, //9855 #CJK UNIFIED IDEOGRAPH
+ {0xE2DA, 0x7616}, //9856 #CJK UNIFIED IDEOGRAPH
+ {0xE2DB, 0x7608}, //9857 #CJK UNIFIED IDEOGRAPH
+ {0xE2DC, 0x760C}, //9858 #CJK UNIFIED IDEOGRAPH
+ {0xE2DD, 0x7615}, //9859 #CJK UNIFIED IDEOGRAPH
+ {0xE2DE, 0x7611}, //9860 #CJK UNIFIED IDEOGRAPH
+ {0xE2DF, 0x760A}, //9861 #CJK UNIFIED IDEOGRAPH
+ {0xE2E0, 0x7614}, //9862 #CJK UNIFIED IDEOGRAPH
+ {0xE2E1, 0x76B8}, //9863 #CJK UNIFIED IDEOGRAPH
+ {0xE2E2, 0x7781}, //9864 #CJK UNIFIED IDEOGRAPH
+ {0xE2E3, 0x777C}, //9865 #CJK UNIFIED IDEOGRAPH
+ {0xE2E4, 0x7785}, //9866 #CJK UNIFIED IDEOGRAPH
+ {0xE2E5, 0x7782}, //9867 #CJK UNIFIED IDEOGRAPH
+ {0xE2E6, 0x776E}, //9868 #CJK UNIFIED IDEOGRAPH
+ {0xE2E7, 0x7780}, //9869 #CJK UNIFIED IDEOGRAPH
+ {0xE2E8, 0x776F}, //9870 #CJK UNIFIED IDEOGRAPH
+ {0xE2E9, 0x777E}, //9871 #CJK UNIFIED IDEOGRAPH
+ {0xE2EA, 0x7783}, //9872 #CJK UNIFIED IDEOGRAPH
+ {0xE2EB, 0x78B2}, //9873 #CJK UNIFIED IDEOGRAPH
+ {0xE2EC, 0x78AA}, //9874 #CJK UNIFIED IDEOGRAPH
+ {0xE2ED, 0x78B4}, //9875 #CJK UNIFIED IDEOGRAPH
+ {0xE2EE, 0x78AD}, //9876 #CJK UNIFIED IDEOGRAPH
+ {0xE2EF, 0x78A8}, //9877 #CJK UNIFIED IDEOGRAPH
+ {0xE2F0, 0x787E}, //9878 #CJK UNIFIED IDEOGRAPH
+ {0xE2F1, 0x78AB}, //9879 #CJK UNIFIED IDEOGRAPH
+ {0xE2F2, 0x789E}, //9880 #CJK UNIFIED IDEOGRAPH
+ {0xE2F3, 0x78A5}, //9881 #CJK UNIFIED IDEOGRAPH
+ {0xE2F4, 0x78A0}, //9882 #CJK UNIFIED IDEOGRAPH
+ {0xE2F5, 0x78AC}, //9883 #CJK UNIFIED IDEOGRAPH
+ {0xE2F6, 0x78A2}, //9884 #CJK UNIFIED IDEOGRAPH
+ {0xE2F7, 0x78A4}, //9885 #CJK UNIFIED IDEOGRAPH
+ {0xE2F8, 0x7998}, //9886 #CJK UNIFIED IDEOGRAPH
+ {0xE2F9, 0x798A}, //9887 #CJK UNIFIED IDEOGRAPH
+ {0xE2FA, 0x798B}, //9888 #CJK UNIFIED IDEOGRAPH
+ {0xE2FB, 0x7996}, //9889 #CJK UNIFIED IDEOGRAPH
+ {0xE2FC, 0x7995}, //9890 #CJK UNIFIED IDEOGRAPH
+ {0xE2FD, 0x7994}, //9891 #CJK UNIFIED IDEOGRAPH
+ {0xE2FE, 0x7993}, //9892 #CJK UNIFIED IDEOGRAPH
+ {0xE340, 0x7997}, //9893 #CJK UNIFIED IDEOGRAPH
+ {0xE341, 0x7988}, //9894 #CJK UNIFIED IDEOGRAPH
+ {0xE342, 0x7992}, //9895 #CJK UNIFIED IDEOGRAPH
+ {0xE343, 0x7990}, //9896 #CJK UNIFIED IDEOGRAPH
+ {0xE344, 0x7A2B}, //9897 #CJK UNIFIED IDEOGRAPH
+ {0xE345, 0x7A4A}, //9898 #CJK UNIFIED IDEOGRAPH
+ {0xE346, 0x7A30}, //9899 #CJK UNIFIED IDEOGRAPH
+ {0xE347, 0x7A2F}, //9900 #CJK UNIFIED IDEOGRAPH
+ {0xE348, 0x7A28}, //9901 #CJK UNIFIED IDEOGRAPH
+ {0xE349, 0x7A26}, //9902 #CJK UNIFIED IDEOGRAPH
+ {0xE34A, 0x7AA8}, //9903 #CJK UNIFIED IDEOGRAPH
+ {0xE34B, 0x7AAB}, //9904 #CJK UNIFIED IDEOGRAPH
+ {0xE34C, 0x7AAC}, //9905 #CJK UNIFIED IDEOGRAPH
+ {0xE34D, 0x7AEE}, //9906 #CJK UNIFIED IDEOGRAPH
+ {0xE34E, 0x7B88}, //9907 #CJK UNIFIED IDEOGRAPH
+ {0xE34F, 0x7B9C}, //9908 #CJK UNIFIED IDEOGRAPH
+ {0xE350, 0x7B8A}, //9909 #CJK UNIFIED IDEOGRAPH
+ {0xE351, 0x7B91}, //9910 #CJK UNIFIED IDEOGRAPH
+ {0xE352, 0x7B90}, //9911 #CJK UNIFIED IDEOGRAPH
+ {0xE353, 0x7B96}, //9912 #CJK UNIFIED IDEOGRAPH
+ {0xE354, 0x7B8D}, //9913 #CJK UNIFIED IDEOGRAPH
+ {0xE355, 0x7B8C}, //9914 #CJK UNIFIED IDEOGRAPH
+ {0xE356, 0x7B9B}, //9915 #CJK UNIFIED IDEOGRAPH
+ {0xE357, 0x7B8E}, //9916 #CJK UNIFIED IDEOGRAPH
+ {0xE358, 0x7B85}, //9917 #CJK UNIFIED IDEOGRAPH
+ {0xE359, 0x7B98}, //9918 #CJK UNIFIED IDEOGRAPH
+ {0xE35A, 0x5284}, //9919 #CJK UNIFIED IDEOGRAPH
+ {0xE35B, 0x7B99}, //9920 #CJK UNIFIED IDEOGRAPH
+ {0xE35C, 0x7BA4}, //9921 #CJK UNIFIED IDEOGRAPH
+ {0xE35D, 0x7B82}, //9922 #CJK UNIFIED IDEOGRAPH
+ {0xE35E, 0x7CBB}, //9923 #CJK UNIFIED IDEOGRAPH
+ {0xE35F, 0x7CBF}, //9924 #CJK UNIFIED IDEOGRAPH
+ {0xE360, 0x7CBC}, //9925 #CJK UNIFIED IDEOGRAPH
+ {0xE361, 0x7CBA}, //9926 #CJK UNIFIED IDEOGRAPH
+ {0xE362, 0x7DA7}, //9927 #CJK UNIFIED IDEOGRAPH
+ {0xE363, 0x7DB7}, //9928 #CJK UNIFIED IDEOGRAPH
+ {0xE364, 0x7DC2}, //9929 #CJK UNIFIED IDEOGRAPH
+ {0xE365, 0x7DA3}, //9930 #CJK UNIFIED IDEOGRAPH
+ {0xE366, 0x7DAA}, //9931 #CJK UNIFIED IDEOGRAPH
+ {0xE367, 0x7DC1}, //9932 #CJK UNIFIED IDEOGRAPH
+ {0xE368, 0x7DC0}, //9933 #CJK UNIFIED IDEOGRAPH
+ {0xE369, 0x7DC5}, //9934 #CJK UNIFIED IDEOGRAPH
+ {0xE36A, 0x7D9D}, //9935 #CJK UNIFIED IDEOGRAPH
+ {0xE36B, 0x7DCE}, //9936 #CJK UNIFIED IDEOGRAPH
+ {0xE36C, 0x7DC4}, //9937 #CJK UNIFIED IDEOGRAPH
+ {0xE36D, 0x7DC6}, //9938 #CJK UNIFIED IDEOGRAPH
+ {0xE36E, 0x7DCB}, //9939 #CJK UNIFIED IDEOGRAPH
+ {0xE36F, 0x7DCC}, //9940 #CJK UNIFIED IDEOGRAPH
+ {0xE370, 0x7DAF}, //9941 #CJK UNIFIED IDEOGRAPH
+ {0xE371, 0x7DB9}, //9942 #CJK UNIFIED IDEOGRAPH
+ {0xE372, 0x7D96}, //9943 #CJK UNIFIED IDEOGRAPH
+ {0xE373, 0x7DBC}, //9944 #CJK UNIFIED IDEOGRAPH
+ {0xE374, 0x7D9F}, //9945 #CJK UNIFIED IDEOGRAPH
+ {0xE375, 0x7DA6}, //9946 #CJK UNIFIED IDEOGRAPH
+ {0xE376, 0x7DAE}, //9947 #CJK UNIFIED IDEOGRAPH
+ {0xE377, 0x7DA9}, //9948 #CJK UNIFIED IDEOGRAPH
+ {0xE378, 0x7DA1}, //9949 #CJK UNIFIED IDEOGRAPH
+ {0xE379, 0x7DC9}, //9950 #CJK UNIFIED IDEOGRAPH
+ {0xE37A, 0x7F73}, //9951 #CJK UNIFIED IDEOGRAPH
+ {0xE37B, 0x7FE2}, //9952 #CJK UNIFIED IDEOGRAPH
+ {0xE37C, 0x7FE3}, //9953 #CJK UNIFIED IDEOGRAPH
+ {0xE37D, 0x7FE5}, //9954 #CJK UNIFIED IDEOGRAPH
+ {0xE37E, 0x7FDE}, //9955 #CJK UNIFIED IDEOGRAPH
+ {0xE3A1, 0x8024}, //9956 #CJK UNIFIED IDEOGRAPH
+ {0xE3A2, 0x805D}, //9957 #CJK UNIFIED IDEOGRAPH
+ {0xE3A3, 0x805C}, //9958 #CJK UNIFIED IDEOGRAPH
+ {0xE3A4, 0x8189}, //9959 #CJK UNIFIED IDEOGRAPH
+ {0xE3A5, 0x8186}, //9960 #CJK UNIFIED IDEOGRAPH
+ {0xE3A6, 0x8183}, //9961 #CJK UNIFIED IDEOGRAPH
+ {0xE3A7, 0x8187}, //9962 #CJK UNIFIED IDEOGRAPH
+ {0xE3A8, 0x818D}, //9963 #CJK UNIFIED IDEOGRAPH
+ {0xE3A9, 0x818C}, //9964 #CJK UNIFIED IDEOGRAPH
+ {0xE3AA, 0x818B}, //9965 #CJK UNIFIED IDEOGRAPH
+ {0xE3AB, 0x8215}, //9966 #CJK UNIFIED IDEOGRAPH
+ {0xE3AC, 0x8497}, //9967 #CJK UNIFIED IDEOGRAPH
+ {0xE3AD, 0x84A4}, //9968 #CJK UNIFIED IDEOGRAPH
+ {0xE3AE, 0x84A1}, //9969 #CJK UNIFIED IDEOGRAPH
+ {0xE3AF, 0x849F}, //9970 #CJK UNIFIED IDEOGRAPH
+ {0xE3B0, 0x84BA}, //9971 #CJK UNIFIED IDEOGRAPH
+ {0xE3B1, 0x84CE}, //9972 #CJK UNIFIED IDEOGRAPH
+ {0xE3B2, 0x84C2}, //9973 #CJK UNIFIED IDEOGRAPH
+ {0xE3B3, 0x84AC}, //9974 #CJK UNIFIED IDEOGRAPH
+ {0xE3B4, 0x84AE}, //9975 #CJK UNIFIED IDEOGRAPH
+ {0xE3B5, 0x84AB}, //9976 #CJK UNIFIED IDEOGRAPH
+ {0xE3B6, 0x84B9}, //9977 #CJK UNIFIED IDEOGRAPH
+ {0xE3B7, 0x84B4}, //9978 #CJK UNIFIED IDEOGRAPH
+ {0xE3B8, 0x84C1}, //9979 #CJK UNIFIED IDEOGRAPH
+ {0xE3B9, 0x84CD}, //9980 #CJK UNIFIED IDEOGRAPH
+ {0xE3BA, 0x84AA}, //9981 #CJK UNIFIED IDEOGRAPH
+ {0xE3BB, 0x849A}, //9982 #CJK UNIFIED IDEOGRAPH
+ {0xE3BC, 0x84B1}, //9983 #CJK UNIFIED IDEOGRAPH
+ {0xE3BD, 0x84D0}, //9984 #CJK UNIFIED IDEOGRAPH
+ {0xE3BE, 0x849D}, //9985 #CJK UNIFIED IDEOGRAPH
+ {0xE3BF, 0x84A7}, //9986 #CJK UNIFIED IDEOGRAPH
+ {0xE3C0, 0x84BB}, //9987 #CJK UNIFIED IDEOGRAPH
+ {0xE3C1, 0x84A2}, //9988 #CJK UNIFIED IDEOGRAPH
+ {0xE3C2, 0x8494}, //9989 #CJK UNIFIED IDEOGRAPH
+ {0xE3C3, 0x84C7}, //9990 #CJK UNIFIED IDEOGRAPH
+ {0xE3C4, 0x84CC}, //9991 #CJK UNIFIED IDEOGRAPH
+ {0xE3C5, 0x849B}, //9992 #CJK UNIFIED IDEOGRAPH
+ {0xE3C6, 0x84A9}, //9993 #CJK UNIFIED IDEOGRAPH
+ {0xE3C7, 0x84AF}, //9994 #CJK UNIFIED IDEOGRAPH
+ {0xE3C8, 0x84A8}, //9995 #CJK UNIFIED IDEOGRAPH
+ {0xE3C9, 0x84D6}, //9996 #CJK UNIFIED IDEOGRAPH
+ {0xE3CA, 0x8498}, //9997 #CJK UNIFIED IDEOGRAPH
+ {0xE3CB, 0x84B6}, //9998 #CJK UNIFIED IDEOGRAPH
+ {0xE3CC, 0x84CF}, //9999 #CJK UNIFIED IDEOGRAPH
+ {0xE3CD, 0x84A0}, //10000 #CJK UNIFIED IDEOGRAPH
+ {0xE3CE, 0x84D7}, //10001 #CJK UNIFIED IDEOGRAPH
+ {0xE3CF, 0x84D4}, //10002 #CJK UNIFIED IDEOGRAPH
+ {0xE3D0, 0x84D2}, //10003 #CJK UNIFIED IDEOGRAPH
+ {0xE3D1, 0x84DB}, //10004 #CJK UNIFIED IDEOGRAPH
+ {0xE3D2, 0x84B0}, //10005 #CJK UNIFIED IDEOGRAPH
+ {0xE3D3, 0x8491}, //10006 #CJK UNIFIED IDEOGRAPH
+ {0xE3D4, 0x8661}, //10007 #CJK UNIFIED IDEOGRAPH
+ {0xE3D5, 0x8733}, //10008 #CJK UNIFIED IDEOGRAPH
+ {0xE3D6, 0x8723}, //10009 #CJK UNIFIED IDEOGRAPH
+ {0xE3D7, 0x8728}, //10010 #CJK UNIFIED IDEOGRAPH
+ {0xE3D8, 0x876B}, //10011 #CJK UNIFIED IDEOGRAPH
+ {0xE3D9, 0x8740}, //10012 #CJK UNIFIED IDEOGRAPH
+ {0xE3DA, 0x872E}, //10013 #CJK UNIFIED IDEOGRAPH
+ {0xE3DB, 0x871E}, //10014 #CJK UNIFIED IDEOGRAPH
+ {0xE3DC, 0x8721}, //10015 #CJK UNIFIED IDEOGRAPH
+ {0xE3DD, 0x8719}, //10016 #CJK UNIFIED IDEOGRAPH
+ {0xE3DE, 0x871B}, //10017 #CJK UNIFIED IDEOGRAPH
+ {0xE3DF, 0x8743}, //10018 #CJK UNIFIED IDEOGRAPH
+ {0xE3E0, 0x872C}, //10019 #CJK UNIFIED IDEOGRAPH
+ {0xE3E1, 0x8741}, //10020 #CJK UNIFIED IDEOGRAPH
+ {0xE3E2, 0x873E}, //10021 #CJK UNIFIED IDEOGRAPH
+ {0xE3E3, 0x8746}, //10022 #CJK UNIFIED IDEOGRAPH
+ {0xE3E4, 0x8720}, //10023 #CJK UNIFIED IDEOGRAPH
+ {0xE3E5, 0x8732}, //10024 #CJK UNIFIED IDEOGRAPH
+ {0xE3E6, 0x872A}, //10025 #CJK UNIFIED IDEOGRAPH
+ {0xE3E7, 0x872D}, //10026 #CJK UNIFIED IDEOGRAPH
+ {0xE3E8, 0x873C}, //10027 #CJK UNIFIED IDEOGRAPH
+ {0xE3E9, 0x8712}, //10028 #CJK UNIFIED IDEOGRAPH
+ {0xE3EA, 0x873A}, //10029 #CJK UNIFIED IDEOGRAPH
+ {0xE3EB, 0x8731}, //10030 #CJK UNIFIED IDEOGRAPH
+ {0xE3EC, 0x8735}, //10031 #CJK UNIFIED IDEOGRAPH
+ {0xE3ED, 0x8742}, //10032 #CJK UNIFIED IDEOGRAPH
+ {0xE3EE, 0x8726}, //10033 #CJK UNIFIED IDEOGRAPH
+ {0xE3EF, 0x8727}, //10034 #CJK UNIFIED IDEOGRAPH
+ {0xE3F0, 0x8738}, //10035 #CJK UNIFIED IDEOGRAPH
+ {0xE3F1, 0x8724}, //10036 #CJK UNIFIED IDEOGRAPH
+ {0xE3F2, 0x871A}, //10037 #CJK UNIFIED IDEOGRAPH
+ {0xE3F3, 0x8730}, //10038 #CJK UNIFIED IDEOGRAPH
+ {0xE3F4, 0x8711}, //10039 #CJK UNIFIED IDEOGRAPH
+ {0xE3F5, 0x88F7}, //10040 #CJK UNIFIED IDEOGRAPH
+ {0xE3F6, 0x88E7}, //10041 #CJK UNIFIED IDEOGRAPH
+ {0xE3F7, 0x88F1}, //10042 #CJK UNIFIED IDEOGRAPH
+ {0xE3F8, 0x88F2}, //10043 #CJK UNIFIED IDEOGRAPH
+ {0xE3F9, 0x88FA}, //10044 #CJK UNIFIED IDEOGRAPH
+ {0xE3FA, 0x88FE}, //10045 #CJK UNIFIED IDEOGRAPH
+ {0xE3FB, 0x88EE}, //10046 #CJK UNIFIED IDEOGRAPH
+ {0xE3FC, 0x88FC}, //10047 #CJK UNIFIED IDEOGRAPH
+ {0xE3FD, 0x88F6}, //10048 #CJK UNIFIED IDEOGRAPH
+ {0xE3FE, 0x88FB}, //10049 #CJK UNIFIED IDEOGRAPH
+ {0xE440, 0x88F0}, //10050 #CJK UNIFIED IDEOGRAPH
+ {0xE441, 0x88EC}, //10051 #CJK UNIFIED IDEOGRAPH
+ {0xE442, 0x88EB}, //10052 #CJK UNIFIED IDEOGRAPH
+ {0xE443, 0x899D}, //10053 #CJK UNIFIED IDEOGRAPH
+ {0xE444, 0x89A1}, //10054 #CJK UNIFIED IDEOGRAPH
+ {0xE445, 0x899F}, //10055 #CJK UNIFIED IDEOGRAPH
+ {0xE446, 0x899E}, //10056 #CJK UNIFIED IDEOGRAPH
+ {0xE447, 0x89E9}, //10057 #CJK UNIFIED IDEOGRAPH
+ {0xE448, 0x89EB}, //10058 #CJK UNIFIED IDEOGRAPH
+ {0xE449, 0x89E8}, //10059 #CJK UNIFIED IDEOGRAPH
+ {0xE44A, 0x8AAB}, //10060 #CJK UNIFIED IDEOGRAPH
+ {0xE44B, 0x8A99}, //10061 #CJK UNIFIED IDEOGRAPH
+ {0xE44C, 0x8A8B}, //10062 #CJK UNIFIED IDEOGRAPH
+ {0xE44D, 0x8A92}, //10063 #CJK UNIFIED IDEOGRAPH
+ {0xE44E, 0x8A8F}, //10064 #CJK UNIFIED IDEOGRAPH
+ {0xE44F, 0x8A96}, //10065 #CJK UNIFIED IDEOGRAPH
+ {0xE450, 0x8C3D}, //10066 #CJK UNIFIED IDEOGRAPH
+ {0xE451, 0x8C68}, //10067 #CJK UNIFIED IDEOGRAPH
+ {0xE452, 0x8C69}, //10068 #CJK UNIFIED IDEOGRAPH
+ {0xE453, 0x8CD5}, //10069 #CJK UNIFIED IDEOGRAPH
+ {0xE454, 0x8CCF}, //10070 #CJK UNIFIED IDEOGRAPH
+ {0xE455, 0x8CD7}, //10071 #CJK UNIFIED IDEOGRAPH
+ {0xE456, 0x8D96}, //10072 #CJK UNIFIED IDEOGRAPH
+ {0xE457, 0x8E09}, //10073 #CJK UNIFIED IDEOGRAPH
+ {0xE458, 0x8E02}, //10074 #CJK UNIFIED IDEOGRAPH
+ {0xE459, 0x8DFF}, //10075 #CJK UNIFIED IDEOGRAPH
+ {0xE45A, 0x8E0D}, //10076 #CJK UNIFIED IDEOGRAPH
+ {0xE45B, 0x8DFD}, //10077 #CJK UNIFIED IDEOGRAPH
+ {0xE45C, 0x8E0A}, //10078 #CJK UNIFIED IDEOGRAPH
+ {0xE45D, 0x8E03}, //10079 #CJK UNIFIED IDEOGRAPH
+ {0xE45E, 0x8E07}, //10080 #CJK UNIFIED IDEOGRAPH
+ {0xE45F, 0x8E06}, //10081 #CJK UNIFIED IDEOGRAPH
+ {0xE460, 0x8E05}, //10082 #CJK UNIFIED IDEOGRAPH
+ {0xE461, 0x8DFE}, //10083 #CJK UNIFIED IDEOGRAPH
+ {0xE462, 0x8E00}, //10084 #CJK UNIFIED IDEOGRAPH
+ {0xE463, 0x8E04}, //10085 #CJK UNIFIED IDEOGRAPH
+ {0xE464, 0x8F10}, //10086 #CJK UNIFIED IDEOGRAPH
+ {0xE465, 0x8F11}, //10087 #CJK UNIFIED IDEOGRAPH
+ {0xE466, 0x8F0E}, //10088 #CJK UNIFIED IDEOGRAPH
+ {0xE467, 0x8F0D}, //10089 #CJK UNIFIED IDEOGRAPH
+ {0xE468, 0x9123}, //10090 #CJK UNIFIED IDEOGRAPH
+ {0xE469, 0x911C}, //10091 #CJK UNIFIED IDEOGRAPH
+ {0xE46A, 0x9120}, //10092 #CJK UNIFIED IDEOGRAPH
+ {0xE46B, 0x9122}, //10093 #CJK UNIFIED IDEOGRAPH
+ {0xE46C, 0x911F}, //10094 #CJK UNIFIED IDEOGRAPH
+ {0xE46D, 0x911D}, //10095 #CJK UNIFIED IDEOGRAPH
+ {0xE46E, 0x911A}, //10096 #CJK UNIFIED IDEOGRAPH
+ {0xE46F, 0x9124}, //10097 #CJK UNIFIED IDEOGRAPH
+ {0xE470, 0x9121}, //10098 #CJK UNIFIED IDEOGRAPH
+ {0xE471, 0x911B}, //10099 #CJK UNIFIED IDEOGRAPH
+ {0xE472, 0x917A}, //10100 #CJK UNIFIED IDEOGRAPH
+ {0xE473, 0x9172}, //10101 #CJK UNIFIED IDEOGRAPH
+ {0xE474, 0x9179}, //10102 #CJK UNIFIED IDEOGRAPH
+ {0xE475, 0x9173}, //10103 #CJK UNIFIED IDEOGRAPH
+ {0xE476, 0x92A5}, //10104 #CJK UNIFIED IDEOGRAPH
+ {0xE477, 0x92A4}, //10105 #CJK UNIFIED IDEOGRAPH
+ {0xE478, 0x9276}, //10106 #CJK UNIFIED IDEOGRAPH
+ {0xE479, 0x929B}, //10107 #CJK UNIFIED IDEOGRAPH
+ {0xE47A, 0x927A}, //10108 #CJK UNIFIED IDEOGRAPH
+ {0xE47B, 0x92A0}, //10109 #CJK UNIFIED IDEOGRAPH
+ {0xE47C, 0x9294}, //10110 #CJK UNIFIED IDEOGRAPH
+ {0xE47D, 0x92AA}, //10111 #CJK UNIFIED IDEOGRAPH
+ {0xE47E, 0x928D}, //10112 #CJK UNIFIED IDEOGRAPH
+ {0xE4A1, 0x92A6}, //10113 #CJK UNIFIED IDEOGRAPH
+ {0xE4A2, 0x929A}, //10114 #CJK UNIFIED IDEOGRAPH
+ {0xE4A3, 0x92AB}, //10115 #CJK UNIFIED IDEOGRAPH
+ {0xE4A4, 0x9279}, //10116 #CJK UNIFIED IDEOGRAPH
+ {0xE4A5, 0x9297}, //10117 #CJK UNIFIED IDEOGRAPH
+ {0xE4A6, 0x927F}, //10118 #CJK UNIFIED IDEOGRAPH
+ {0xE4A7, 0x92A3}, //10119 #CJK UNIFIED IDEOGRAPH
+ {0xE4A8, 0x92EE}, //10120 #CJK UNIFIED IDEOGRAPH
+ {0xE4A9, 0x928E}, //10121 #CJK UNIFIED IDEOGRAPH
+ {0xE4AA, 0x9282}, //10122 #CJK UNIFIED IDEOGRAPH
+ {0xE4AB, 0x9295}, //10123 #CJK UNIFIED IDEOGRAPH
+ {0xE4AC, 0x92A2}, //10124 #CJK UNIFIED IDEOGRAPH
+ {0xE4AD, 0x927D}, //10125 #CJK UNIFIED IDEOGRAPH
+ {0xE4AE, 0x9288}, //10126 #CJK UNIFIED IDEOGRAPH
+ {0xE4AF, 0x92A1}, //10127 #CJK UNIFIED IDEOGRAPH
+ {0xE4B0, 0x928A}, //10128 #CJK UNIFIED IDEOGRAPH
+ {0xE4B1, 0x9286}, //10129 #CJK UNIFIED IDEOGRAPH
+ {0xE4B2, 0x928C}, //10130 #CJK UNIFIED IDEOGRAPH
+ {0xE4B3, 0x9299}, //10131 #CJK UNIFIED IDEOGRAPH
+ {0xE4B4, 0x92A7}, //10132 #CJK UNIFIED IDEOGRAPH
+ {0xE4B5, 0x927E}, //10133 #CJK UNIFIED IDEOGRAPH
+ {0xE4B6, 0x9287}, //10134 #CJK UNIFIED IDEOGRAPH
+ {0xE4B7, 0x92A9}, //10135 #CJK UNIFIED IDEOGRAPH
+ {0xE4B8, 0x929D}, //10136 #CJK UNIFIED IDEOGRAPH
+ {0xE4B9, 0x928B}, //10137 #CJK UNIFIED IDEOGRAPH
+ {0xE4BA, 0x922D}, //10138 #CJK UNIFIED IDEOGRAPH
+ {0xE4BB, 0x969E}, //10139 #CJK UNIFIED IDEOGRAPH
+ {0xE4BC, 0x96A1}, //10140 #CJK UNIFIED IDEOGRAPH
+ {0xE4BD, 0x96FF}, //10141 #CJK UNIFIED IDEOGRAPH
+ {0xE4BE, 0x9758}, //10142 #CJK UNIFIED IDEOGRAPH
+ {0xE4BF, 0x977D}, //10143 #CJK UNIFIED IDEOGRAPH
+ {0xE4C0, 0x977A}, //10144 #CJK UNIFIED IDEOGRAPH
+ {0xE4C1, 0x977E}, //10145 #CJK UNIFIED IDEOGRAPH
+ {0xE4C2, 0x9783}, //10146 #CJK UNIFIED IDEOGRAPH
+ {0xE4C3, 0x9780}, //10147 #CJK UNIFIED IDEOGRAPH
+ {0xE4C4, 0x9782}, //10148 #CJK UNIFIED IDEOGRAPH
+ {0xE4C5, 0x977B}, //10149 #CJK UNIFIED IDEOGRAPH
+ {0xE4C6, 0x9784}, //10150 #CJK UNIFIED IDEOGRAPH
+ {0xE4C7, 0x9781}, //10151 #CJK UNIFIED IDEOGRAPH
+ {0xE4C8, 0x977F}, //10152 #CJK UNIFIED IDEOGRAPH
+ {0xE4C9, 0x97CE}, //10153 #CJK UNIFIED IDEOGRAPH
+ {0xE4CA, 0x97CD}, //10154 #CJK UNIFIED IDEOGRAPH
+ {0xE4CB, 0x9816}, //10155 #CJK UNIFIED IDEOGRAPH
+ {0xE4CC, 0x98AD}, //10156 #CJK UNIFIED IDEOGRAPH
+ {0xE4CD, 0x98AE}, //10157 #CJK UNIFIED IDEOGRAPH
+ {0xE4CE, 0x9902}, //10158 #CJK UNIFIED IDEOGRAPH
+ {0xE4CF, 0x9900}, //10159 #CJK UNIFIED IDEOGRAPH
+ {0xE4D0, 0x9907}, //10160 #CJK UNIFIED IDEOGRAPH
+ {0xE4D1, 0x999D}, //10161 #CJK UNIFIED IDEOGRAPH
+ {0xE4D2, 0x999C}, //10162 #CJK UNIFIED IDEOGRAPH
+ {0xE4D3, 0x99C3}, //10163 #CJK UNIFIED IDEOGRAPH
+ {0xE4D4, 0x99B9}, //10164 #CJK UNIFIED IDEOGRAPH
+ {0xE4D5, 0x99BB}, //10165 #CJK UNIFIED IDEOGRAPH
+ {0xE4D6, 0x99BA}, //10166 #CJK UNIFIED IDEOGRAPH
+ {0xE4D7, 0x99C2}, //10167 #CJK UNIFIED IDEOGRAPH
+ {0xE4D8, 0x99BD}, //10168 #CJK UNIFIED IDEOGRAPH
+ {0xE4D9, 0x99C7}, //10169 #CJK UNIFIED IDEOGRAPH
+ {0xE4DA, 0x9AB1}, //10170 #CJK UNIFIED IDEOGRAPH
+ {0xE4DB, 0x9AE3}, //10171 #CJK UNIFIED IDEOGRAPH
+ {0xE4DC, 0x9AE7}, //10172 #CJK UNIFIED IDEOGRAPH
+ {0xE4DD, 0x9B3E}, //10173 #CJK UNIFIED IDEOGRAPH
+ {0xE4DE, 0x9B3F}, //10174 #CJK UNIFIED IDEOGRAPH
+ {0xE4DF, 0x9B60}, //10175 #CJK UNIFIED IDEOGRAPH
+ {0xE4E0, 0x9B61}, //10176 #CJK UNIFIED IDEOGRAPH
+ {0xE4E1, 0x9B5F}, //10177 #CJK UNIFIED IDEOGRAPH
+ {0xE4E2, 0x9CF1}, //10178 #CJK UNIFIED IDEOGRAPH
+ {0xE4E3, 0x9CF2}, //10179 #CJK UNIFIED IDEOGRAPH
+ {0xE4E4, 0x9CF5}, //10180 #CJK UNIFIED IDEOGRAPH
+ {0xE4E5, 0x9EA7}, //10181 #CJK UNIFIED IDEOGRAPH
+ {0xE4E6, 0x50FF}, //10182 #CJK UNIFIED IDEOGRAPH
+ {0xE4E7, 0x5103}, //10183 #CJK UNIFIED IDEOGRAPH
+ {0xE4E8, 0x5130}, //10184 #CJK UNIFIED IDEOGRAPH
+ {0xE4E9, 0x50F8}, //10185 #CJK UNIFIED IDEOGRAPH
+ {0xE4EA, 0x5106}, //10186 #CJK UNIFIED IDEOGRAPH
+ {0xE4EB, 0x5107}, //10187 #CJK UNIFIED IDEOGRAPH
+ {0xE4EC, 0x50F6}, //10188 #CJK UNIFIED IDEOGRAPH
+ {0xE4ED, 0x50FE}, //10189 #CJK UNIFIED IDEOGRAPH
+ {0xE4EE, 0x510B}, //10190 #CJK UNIFIED IDEOGRAPH
+ {0xE4EF, 0x510C}, //10191 #CJK UNIFIED IDEOGRAPH
+ {0xE4F0, 0x50FD}, //10192 #CJK UNIFIED IDEOGRAPH
+ {0xE4F1, 0x510A}, //10193 #CJK UNIFIED IDEOGRAPH
+ {0xE4F2, 0x528B}, //10194 #CJK UNIFIED IDEOGRAPH
+ {0xE4F3, 0x528C}, //10195 #CJK UNIFIED IDEOGRAPH
+ {0xE4F4, 0x52F1}, //10196 #CJK UNIFIED IDEOGRAPH
+ {0xE4F5, 0x52EF}, //10197 #CJK UNIFIED IDEOGRAPH
+ {0xE4F6, 0x5648}, //10198 #CJK UNIFIED IDEOGRAPH
+ {0xE4F7, 0x5642}, //10199 #CJK UNIFIED IDEOGRAPH
+ {0xE4F8, 0x564C}, //10200 #CJK UNIFIED IDEOGRAPH
+ {0xE4F9, 0x5635}, //10201 #CJK UNIFIED IDEOGRAPH
+ {0xE4FA, 0x5641}, //10202 #CJK UNIFIED IDEOGRAPH
+ {0xE4FB, 0x564A}, //10203 #CJK UNIFIED IDEOGRAPH
+ {0xE4FC, 0x5649}, //10204 #CJK UNIFIED IDEOGRAPH
+ {0xE4FD, 0x5646}, //10205 #CJK UNIFIED IDEOGRAPH
+ {0xE4FE, 0x5658}, //10206 #CJK UNIFIED IDEOGRAPH
+ {0xE540, 0x565A}, //10207 #CJK UNIFIED IDEOGRAPH
+ {0xE541, 0x5640}, //10208 #CJK UNIFIED IDEOGRAPH
+ {0xE542, 0x5633}, //10209 #CJK UNIFIED IDEOGRAPH
+ {0xE543, 0x563D}, //10210 #CJK UNIFIED IDEOGRAPH
+ {0xE544, 0x562C}, //10211 #CJK UNIFIED IDEOGRAPH
+ {0xE545, 0x563E}, //10212 #CJK UNIFIED IDEOGRAPH
+ {0xE546, 0x5638}, //10213 #CJK UNIFIED IDEOGRAPH
+ {0xE547, 0x562A}, //10214 #CJK UNIFIED IDEOGRAPH
+ {0xE548, 0x563A}, //10215 #CJK UNIFIED IDEOGRAPH
+ {0xE549, 0x571A}, //10216 #CJK UNIFIED IDEOGRAPH
+ {0xE54A, 0x58AB}, //10217 #CJK UNIFIED IDEOGRAPH
+ {0xE54B, 0x589D}, //10218 #CJK UNIFIED IDEOGRAPH
+ {0xE54C, 0x58B1}, //10219 #CJK UNIFIED IDEOGRAPH
+ {0xE54D, 0x58A0}, //10220 #CJK UNIFIED IDEOGRAPH
+ {0xE54E, 0x58A3}, //10221 #CJK UNIFIED IDEOGRAPH
+ {0xE54F, 0x58AF}, //10222 #CJK UNIFIED IDEOGRAPH
+ {0xE550, 0x58AC}, //10223 #CJK UNIFIED IDEOGRAPH
+ {0xE551, 0x58A5}, //10224 #CJK UNIFIED IDEOGRAPH
+ {0xE552, 0x58A1}, //10225 #CJK UNIFIED IDEOGRAPH
+ {0xE553, 0x58FF}, //10226 #CJK UNIFIED IDEOGRAPH
+ {0xE554, 0x5AFF}, //10227 #CJK UNIFIED IDEOGRAPH
+ {0xE555, 0x5AF4}, //10228 #CJK UNIFIED IDEOGRAPH
+ {0xE556, 0x5AFD}, //10229 #CJK UNIFIED IDEOGRAPH
+ {0xE557, 0x5AF7}, //10230 #CJK UNIFIED IDEOGRAPH
+ {0xE558, 0x5AF6}, //10231 #CJK UNIFIED IDEOGRAPH
+ {0xE559, 0x5B03}, //10232 #CJK UNIFIED IDEOGRAPH
+ {0xE55A, 0x5AF8}, //10233 #CJK UNIFIED IDEOGRAPH
+ {0xE55B, 0x5B02}, //10234 #CJK UNIFIED IDEOGRAPH
+ {0xE55C, 0x5AF9}, //10235 #CJK UNIFIED IDEOGRAPH
+ {0xE55D, 0x5B01}, //10236 #CJK UNIFIED IDEOGRAPH
+ {0xE55E, 0x5B07}, //10237 #CJK UNIFIED IDEOGRAPH
+ {0xE55F, 0x5B05}, //10238 #CJK UNIFIED IDEOGRAPH
+ {0xE560, 0x5B0F}, //10239 #CJK UNIFIED IDEOGRAPH
+ {0xE561, 0x5C67}, //10240 #CJK UNIFIED IDEOGRAPH
+ {0xE562, 0x5D99}, //10241 #CJK UNIFIED IDEOGRAPH
+ {0xE563, 0x5D97}, //10242 #CJK UNIFIED IDEOGRAPH
+ {0xE564, 0x5D9F}, //10243 #CJK UNIFIED IDEOGRAPH
+ {0xE565, 0x5D92}, //10244 #CJK UNIFIED IDEOGRAPH
+ {0xE566, 0x5DA2}, //10245 #CJK UNIFIED IDEOGRAPH
+ {0xE567, 0x5D93}, //10246 #CJK UNIFIED IDEOGRAPH
+ {0xE568, 0x5D95}, //10247 #CJK UNIFIED IDEOGRAPH
+ {0xE569, 0x5DA0}, //10248 #CJK UNIFIED IDEOGRAPH
+ {0xE56A, 0x5D9C}, //10249 #CJK UNIFIED IDEOGRAPH
+ {0xE56B, 0x5DA1}, //10250 #CJK UNIFIED IDEOGRAPH
+ {0xE56C, 0x5D9A}, //10251 #CJK UNIFIED IDEOGRAPH
+ {0xE56D, 0x5D9E}, //10252 #CJK UNIFIED IDEOGRAPH
+ {0xE56E, 0x5E69}, //10253 #CJK UNIFIED IDEOGRAPH
+ {0xE56F, 0x5E5D}, //10254 #CJK UNIFIED IDEOGRAPH
+ {0xE570, 0x5E60}, //10255 #CJK UNIFIED IDEOGRAPH
+ {0xE571, 0x5E5C}, //10256 #CJK UNIFIED IDEOGRAPH
+ {0xE572, 0x7DF3}, //10257 #CJK UNIFIED IDEOGRAPH
+ {0xE573, 0x5EDB}, //10258 #CJK UNIFIED IDEOGRAPH
+ {0xE574, 0x5EDE}, //10259 #CJK UNIFIED IDEOGRAPH
+ {0xE575, 0x5EE1}, //10260 #CJK UNIFIED IDEOGRAPH
+ {0xE576, 0x5F49}, //10261 #CJK UNIFIED IDEOGRAPH
+ {0xE577, 0x5FB2}, //10262 #CJK UNIFIED IDEOGRAPH
+ {0xE578, 0x618B}, //10263 #CJK UNIFIED IDEOGRAPH
+ {0xE579, 0x6183}, //10264 #CJK UNIFIED IDEOGRAPH
+ {0xE57A, 0x6179}, //10265 #CJK UNIFIED IDEOGRAPH
+ {0xE57B, 0x61B1}, //10266 #CJK UNIFIED IDEOGRAPH
+ {0xE57C, 0x61B0}, //10267 #CJK UNIFIED IDEOGRAPH
+ {0xE57D, 0x61A2}, //10268 #CJK UNIFIED IDEOGRAPH
+ {0xE57E, 0x6189}, //10269 #CJK UNIFIED IDEOGRAPH
+ {0xE5A1, 0x619B}, //10270 #CJK UNIFIED IDEOGRAPH
+ {0xE5A2, 0x6193}, //10271 #CJK UNIFIED IDEOGRAPH
+ {0xE5A3, 0x61AF}, //10272 #CJK UNIFIED IDEOGRAPH
+ {0xE5A4, 0x61AD}, //10273 #CJK UNIFIED IDEOGRAPH
+ {0xE5A5, 0x619F}, //10274 #CJK UNIFIED IDEOGRAPH
+ {0xE5A6, 0x6192}, //10275 #CJK UNIFIED IDEOGRAPH
+ {0xE5A7, 0x61AA}, //10276 #CJK UNIFIED IDEOGRAPH
+ {0xE5A8, 0x61A1}, //10277 #CJK UNIFIED IDEOGRAPH
+ {0xE5A9, 0x618D}, //10278 #CJK UNIFIED IDEOGRAPH
+ {0xE5AA, 0x6166}, //10279 #CJK UNIFIED IDEOGRAPH
+ {0xE5AB, 0x61B3}, //10280 #CJK UNIFIED IDEOGRAPH
+ {0xE5AC, 0x622D}, //10281 #CJK UNIFIED IDEOGRAPH
+ {0xE5AD, 0x646E}, //10282 #CJK UNIFIED IDEOGRAPH
+ {0xE5AE, 0x6470}, //10283 #CJK UNIFIED IDEOGRAPH
+ {0xE5AF, 0x6496}, //10284 #CJK UNIFIED IDEOGRAPH
+ {0xE5B0, 0x64A0}, //10285 #CJK UNIFIED IDEOGRAPH
+ {0xE5B1, 0x6485}, //10286 #CJK UNIFIED IDEOGRAPH
+ {0xE5B2, 0x6497}, //10287 #CJK UNIFIED IDEOGRAPH
+ {0xE5B3, 0x649C}, //10288 #CJK UNIFIED IDEOGRAPH
+ {0xE5B4, 0x648F}, //10289 #CJK UNIFIED IDEOGRAPH
+ {0xE5B5, 0x648B}, //10290 #CJK UNIFIED IDEOGRAPH
+ {0xE5B6, 0x648A}, //10291 #CJK UNIFIED IDEOGRAPH
+ {0xE5B7, 0x648C}, //10292 #CJK UNIFIED IDEOGRAPH
+ {0xE5B8, 0x64A3}, //10293 #CJK UNIFIED IDEOGRAPH
+ {0xE5B9, 0x649F}, //10294 #CJK UNIFIED IDEOGRAPH
+ {0xE5BA, 0x6468}, //10295 #CJK UNIFIED IDEOGRAPH
+ {0xE5BB, 0x64B1}, //10296 #CJK UNIFIED IDEOGRAPH
+ {0xE5BC, 0x6498}, //10297 #CJK UNIFIED IDEOGRAPH
+ {0xE5BD, 0x6576}, //10298 #CJK UNIFIED IDEOGRAPH
+ {0xE5BE, 0x657A}, //10299 #CJK UNIFIED IDEOGRAPH
+ {0xE5BF, 0x6579}, //10300 #CJK UNIFIED IDEOGRAPH
+ {0xE5C0, 0x657B}, //10301 #CJK UNIFIED IDEOGRAPH
+ {0xE5C1, 0x65B2}, //10302 #CJK UNIFIED IDEOGRAPH
+ {0xE5C2, 0x65B3}, //10303 #CJK UNIFIED IDEOGRAPH
+ {0xE5C3, 0x66B5}, //10304 #CJK UNIFIED IDEOGRAPH
+ {0xE5C4, 0x66B0}, //10305 #CJK UNIFIED IDEOGRAPH
+ {0xE5C5, 0x66A9}, //10306 #CJK UNIFIED IDEOGRAPH
+ {0xE5C6, 0x66B2}, //10307 #CJK UNIFIED IDEOGRAPH
+ {0xE5C7, 0x66B7}, //10308 #CJK UNIFIED IDEOGRAPH
+ {0xE5C8, 0x66AA}, //10309 #CJK UNIFIED IDEOGRAPH
+ {0xE5C9, 0x66AF}, //10310 #CJK UNIFIED IDEOGRAPH
+ {0xE5CA, 0x6A00}, //10311 #CJK UNIFIED IDEOGRAPH
+ {0xE5CB, 0x6A06}, //10312 #CJK UNIFIED IDEOGRAPH
+ {0xE5CC, 0x6A17}, //10313 #CJK UNIFIED IDEOGRAPH
+ {0xE5CD, 0x69E5}, //10314 #CJK UNIFIED IDEOGRAPH
+ {0xE5CE, 0x69F8}, //10315 #CJK UNIFIED IDEOGRAPH
+ {0xE5CF, 0x6A15}, //10316 #CJK UNIFIED IDEOGRAPH
+ {0xE5D0, 0x69F1}, //10317 #CJK UNIFIED IDEOGRAPH
+ {0xE5D1, 0x69E4}, //10318 #CJK UNIFIED IDEOGRAPH
+ {0xE5D2, 0x6A20}, //10319 #CJK UNIFIED IDEOGRAPH
+ {0xE5D3, 0x69FF}, //10320 #CJK UNIFIED IDEOGRAPH
+ {0xE5D4, 0x69EC}, //10321 #CJK UNIFIED IDEOGRAPH
+ {0xE5D5, 0x69E2}, //10322 #CJK UNIFIED IDEOGRAPH
+ {0xE5D6, 0x6A1B}, //10323 #CJK UNIFIED IDEOGRAPH
+ {0xE5D7, 0x6A1D}, //10324 #CJK UNIFIED IDEOGRAPH
+ {0xE5D8, 0x69FE}, //10325 #CJK UNIFIED IDEOGRAPH
+ {0xE5D9, 0x6A27}, //10326 #CJK UNIFIED IDEOGRAPH
+ {0xE5DA, 0x69F2}, //10327 #CJK UNIFIED IDEOGRAPH
+ {0xE5DB, 0x69EE}, //10328 #CJK UNIFIED IDEOGRAPH
+ {0xE5DC, 0x6A14}, //10329 #CJK UNIFIED IDEOGRAPH
+ {0xE5DD, 0x69F7}, //10330 #CJK UNIFIED IDEOGRAPH
+ {0xE5DE, 0x69E7}, //10331 #CJK UNIFIED IDEOGRAPH
+ {0xE5DF, 0x6A40}, //10332 #CJK UNIFIED IDEOGRAPH
+ {0xE5E0, 0x6A08}, //10333 #CJK UNIFIED IDEOGRAPH
+ {0xE5E1, 0x69E6}, //10334 #CJK UNIFIED IDEOGRAPH
+ {0xE5E2, 0x69FB}, //10335 #CJK UNIFIED IDEOGRAPH
+ {0xE5E3, 0x6A0D}, //10336 #CJK UNIFIED IDEOGRAPH
+ {0xE5E4, 0x69FC}, //10337 #CJK UNIFIED IDEOGRAPH
+ {0xE5E5, 0x69EB}, //10338 #CJK UNIFIED IDEOGRAPH
+ {0xE5E6, 0x6A09}, //10339 #CJK UNIFIED IDEOGRAPH
+ {0xE5E7, 0x6A04}, //10340 #CJK UNIFIED IDEOGRAPH
+ {0xE5E8, 0x6A18}, //10341 #CJK UNIFIED IDEOGRAPH
+ {0xE5E9, 0x6A25}, //10342 #CJK UNIFIED IDEOGRAPH
+ {0xE5EA, 0x6A0F}, //10343 #CJK UNIFIED IDEOGRAPH
+ {0xE5EB, 0x69F6}, //10344 #CJK UNIFIED IDEOGRAPH
+ {0xE5EC, 0x6A26}, //10345 #CJK UNIFIED IDEOGRAPH
+ {0xE5ED, 0x6A07}, //10346 #CJK UNIFIED IDEOGRAPH
+ {0xE5EE, 0x69F4}, //10347 #CJK UNIFIED IDEOGRAPH
+ {0xE5EF, 0x6A16}, //10348 #CJK UNIFIED IDEOGRAPH
+ {0xE5F0, 0x6B51}, //10349 #CJK UNIFIED IDEOGRAPH
+ {0xE5F1, 0x6BA5}, //10350 #CJK UNIFIED IDEOGRAPH
+ {0xE5F2, 0x6BA3}, //10351 #CJK UNIFIED IDEOGRAPH
+ {0xE5F3, 0x6BA2}, //10352 #CJK UNIFIED IDEOGRAPH
+ {0xE5F4, 0x6BA6}, //10353 #CJK UNIFIED IDEOGRAPH
+ {0xE5F5, 0x6C01}, //10354 #CJK UNIFIED IDEOGRAPH
+ {0xE5F6, 0x6C00}, //10355 #CJK UNIFIED IDEOGRAPH
+ {0xE5F7, 0x6BFF}, //10356 #CJK UNIFIED IDEOGRAPH
+ {0xE5F8, 0x6C02}, //10357 #CJK UNIFIED IDEOGRAPH
+ {0xE5F9, 0x6F41}, //10358 #CJK UNIFIED IDEOGRAPH
+ {0xE5FA, 0x6F26}, //10359 #CJK UNIFIED IDEOGRAPH
+ {0xE5FB, 0x6F7E}, //10360 #CJK UNIFIED IDEOGRAPH
+ {0xE5FC, 0x6F87}, //10361 #CJK UNIFIED IDEOGRAPH
+ {0xE5FD, 0x6FC6}, //10362 #CJK UNIFIED IDEOGRAPH
+ {0xE5FE, 0x6F92}, //10363 #CJK UNIFIED IDEOGRAPH
+ {0xE640, 0x6F8D}, //10364 #CJK UNIFIED IDEOGRAPH
+ {0xE641, 0x6F89}, //10365 #CJK UNIFIED IDEOGRAPH
+ {0xE642, 0x6F8C}, //10366 #CJK UNIFIED IDEOGRAPH
+ {0xE643, 0x6F62}, //10367 #CJK UNIFIED IDEOGRAPH
+ {0xE644, 0x6F4F}, //10368 #CJK UNIFIED IDEOGRAPH
+ {0xE645, 0x6F85}, //10369 #CJK UNIFIED IDEOGRAPH
+ {0xE646, 0x6F5A}, //10370 #CJK UNIFIED IDEOGRAPH
+ {0xE647, 0x6F96}, //10371 #CJK UNIFIED IDEOGRAPH
+ {0xE648, 0x6F76}, //10372 #CJK UNIFIED IDEOGRAPH
+ {0xE649, 0x6F6C}, //10373 #CJK UNIFIED IDEOGRAPH
+ {0xE64A, 0x6F82}, //10374 #CJK UNIFIED IDEOGRAPH
+ {0xE64B, 0x6F55}, //10375 #CJK UNIFIED IDEOGRAPH
+ {0xE64C, 0x6F72}, //10376 #CJK UNIFIED IDEOGRAPH
+ {0xE64D, 0x6F52}, //10377 #CJK UNIFIED IDEOGRAPH
+ {0xE64E, 0x6F50}, //10378 #CJK UNIFIED IDEOGRAPH
+ {0xE64F, 0x6F57}, //10379 #CJK UNIFIED IDEOGRAPH
+ {0xE650, 0x6F94}, //10380 #CJK UNIFIED IDEOGRAPH
+ {0xE651, 0x6F93}, //10381 #CJK UNIFIED IDEOGRAPH
+ {0xE652, 0x6F5D}, //10382 #CJK UNIFIED IDEOGRAPH
+ {0xE653, 0x6F00}, //10383 #CJK UNIFIED IDEOGRAPH
+ {0xE654, 0x6F61}, //10384 #CJK UNIFIED IDEOGRAPH
+ {0xE655, 0x6F6B}, //10385 #CJK UNIFIED IDEOGRAPH
+ {0xE656, 0x6F7D}, //10386 #CJK UNIFIED IDEOGRAPH
+ {0xE657, 0x6F67}, //10387 #CJK UNIFIED IDEOGRAPH
+ {0xE658, 0x6F90}, //10388 #CJK UNIFIED IDEOGRAPH
+ {0xE659, 0x6F53}, //10389 #CJK UNIFIED IDEOGRAPH
+ {0xE65A, 0x6F8B}, //10390 #CJK UNIFIED IDEOGRAPH
+ {0xE65B, 0x6F69}, //10391 #CJK UNIFIED IDEOGRAPH
+ {0xE65C, 0x6F7F}, //10392 #CJK UNIFIED IDEOGRAPH
+ {0xE65D, 0x6F95}, //10393 #CJK UNIFIED IDEOGRAPH
+ {0xE65E, 0x6F63}, //10394 #CJK UNIFIED IDEOGRAPH
+ {0xE65F, 0x6F77}, //10395 #CJK UNIFIED IDEOGRAPH
+ {0xE660, 0x6F6A}, //10396 #CJK UNIFIED IDEOGRAPH
+ {0xE661, 0x6F7B}, //10397 #CJK UNIFIED IDEOGRAPH
+ {0xE662, 0x71B2}, //10398 #CJK UNIFIED IDEOGRAPH
+ {0xE663, 0x71AF}, //10399 #CJK UNIFIED IDEOGRAPH
+ {0xE664, 0x719B}, //10400 #CJK UNIFIED IDEOGRAPH
+ {0xE665, 0x71B0}, //10401 #CJK UNIFIED IDEOGRAPH
+ {0xE666, 0x71A0}, //10402 #CJK UNIFIED IDEOGRAPH
+ {0xE667, 0x719A}, //10403 #CJK UNIFIED IDEOGRAPH
+ {0xE668, 0x71A9}, //10404 #CJK UNIFIED IDEOGRAPH
+ {0xE669, 0x71B5}, //10405 #CJK UNIFIED IDEOGRAPH
+ {0xE66A, 0x719D}, //10406 #CJK UNIFIED IDEOGRAPH
+ {0xE66B, 0x71A5}, //10407 #CJK UNIFIED IDEOGRAPH
+ {0xE66C, 0x719E}, //10408 #CJK UNIFIED IDEOGRAPH
+ {0xE66D, 0x71A4}, //10409 #CJK UNIFIED IDEOGRAPH
+ {0xE66E, 0x71A1}, //10410 #CJK UNIFIED IDEOGRAPH
+ {0xE66F, 0x71AA}, //10411 #CJK UNIFIED IDEOGRAPH
+ {0xE670, 0x719C}, //10412 #CJK UNIFIED IDEOGRAPH
+ {0xE671, 0x71A7}, //10413 #CJK UNIFIED IDEOGRAPH
+ {0xE672, 0x71B3}, //10414 #CJK UNIFIED IDEOGRAPH
+ {0xE673, 0x7298}, //10415 #CJK UNIFIED IDEOGRAPH
+ {0xE674, 0x729A}, //10416 #CJK UNIFIED IDEOGRAPH
+ {0xE675, 0x7358}, //10417 #CJK UNIFIED IDEOGRAPH
+ {0xE676, 0x7352}, //10418 #CJK UNIFIED IDEOGRAPH
+ {0xE677, 0x735E}, //10419 #CJK UNIFIED IDEOGRAPH
+ {0xE678, 0x735F}, //10420 #CJK UNIFIED IDEOGRAPH
+ {0xE679, 0x7360}, //10421 #CJK UNIFIED IDEOGRAPH
+ {0xE67A, 0x735D}, //10422 #CJK UNIFIED IDEOGRAPH
+ {0xE67B, 0x735B}, //10423 #CJK UNIFIED IDEOGRAPH
+ {0xE67C, 0x7361}, //10424 #CJK UNIFIED IDEOGRAPH
+ {0xE67D, 0x735A}, //10425 #CJK UNIFIED IDEOGRAPH
+ {0xE67E, 0x7359}, //10426 #CJK UNIFIED IDEOGRAPH
+ {0xE6A1, 0x7362}, //10427 #CJK UNIFIED IDEOGRAPH
+ {0xE6A2, 0x7487}, //10428 #CJK UNIFIED IDEOGRAPH
+ {0xE6A3, 0x7489}, //10429 #CJK UNIFIED IDEOGRAPH
+ {0xE6A4, 0x748A}, //10430 #CJK UNIFIED IDEOGRAPH
+ {0xE6A5, 0x7486}, //10431 #CJK UNIFIED IDEOGRAPH
+ {0xE6A6, 0x7481}, //10432 #CJK UNIFIED IDEOGRAPH
+ {0xE6A7, 0x747D}, //10433 #CJK UNIFIED IDEOGRAPH
+ {0xE6A8, 0x7485}, //10434 #CJK UNIFIED IDEOGRAPH
+ {0xE6A9, 0x7488}, //10435 #CJK UNIFIED IDEOGRAPH
+ {0xE6AA, 0x747C}, //10436 #CJK UNIFIED IDEOGRAPH
+ {0xE6AB, 0x7479}, //10437 #CJK UNIFIED IDEOGRAPH
+ {0xE6AC, 0x7508}, //10438 #CJK UNIFIED IDEOGRAPH
+ {0xE6AD, 0x7507}, //10439 #CJK UNIFIED IDEOGRAPH
+ {0xE6AE, 0x757E}, //10440 #CJK UNIFIED IDEOGRAPH
+ {0xE6AF, 0x7625}, //10441 #CJK UNIFIED IDEOGRAPH
+ {0xE6B0, 0x761E}, //10442 #CJK UNIFIED IDEOGRAPH
+ {0xE6B1, 0x7619}, //10443 #CJK UNIFIED IDEOGRAPH
+ {0xE6B2, 0x761D}, //10444 #CJK UNIFIED IDEOGRAPH
+ {0xE6B3, 0x761C}, //10445 #CJK UNIFIED IDEOGRAPH
+ {0xE6B4, 0x7623}, //10446 #CJK UNIFIED IDEOGRAPH
+ {0xE6B5, 0x761A}, //10447 #CJK UNIFIED IDEOGRAPH
+ {0xE6B6, 0x7628}, //10448 #CJK UNIFIED IDEOGRAPH
+ {0xE6B7, 0x761B}, //10449 #CJK UNIFIED IDEOGRAPH
+ {0xE6B8, 0x769C}, //10450 #CJK UNIFIED IDEOGRAPH
+ {0xE6B9, 0x769D}, //10451 #CJK UNIFIED IDEOGRAPH
+ {0xE6BA, 0x769E}, //10452 #CJK UNIFIED IDEOGRAPH
+ {0xE6BB, 0x769B}, //10453 #CJK UNIFIED IDEOGRAPH
+ {0xE6BC, 0x778D}, //10454 #CJK UNIFIED IDEOGRAPH
+ {0xE6BD, 0x778F}, //10455 #CJK UNIFIED IDEOGRAPH
+ {0xE6BE, 0x7789}, //10456 #CJK UNIFIED IDEOGRAPH
+ {0xE6BF, 0x7788}, //10457 #CJK UNIFIED IDEOGRAPH
+ {0xE6C0, 0x78CD}, //10458 #CJK UNIFIED IDEOGRAPH
+ {0xE6C1, 0x78BB}, //10459 #CJK UNIFIED IDEOGRAPH
+ {0xE6C2, 0x78CF}, //10460 #CJK UNIFIED IDEOGRAPH
+ {0xE6C3, 0x78CC}, //10461 #CJK UNIFIED IDEOGRAPH
+ {0xE6C4, 0x78D1}, //10462 #CJK UNIFIED IDEOGRAPH
+ {0xE6C5, 0x78CE}, //10463 #CJK UNIFIED IDEOGRAPH
+ {0xE6C6, 0x78D4}, //10464 #CJK UNIFIED IDEOGRAPH
+ {0xE6C7, 0x78C8}, //10465 #CJK UNIFIED IDEOGRAPH
+ {0xE6C8, 0x78C3}, //10466 #CJK UNIFIED IDEOGRAPH
+ {0xE6C9, 0x78C4}, //10467 #CJK UNIFIED IDEOGRAPH
+ {0xE6CA, 0x78C9}, //10468 #CJK UNIFIED IDEOGRAPH
+ {0xE6CB, 0x799A}, //10469 #CJK UNIFIED IDEOGRAPH
+ {0xE6CC, 0x79A1}, //10470 #CJK UNIFIED IDEOGRAPH
+ {0xE6CD, 0x79A0}, //10471 #CJK UNIFIED IDEOGRAPH
+ {0xE6CE, 0x799C}, //10472 #CJK UNIFIED IDEOGRAPH
+ {0xE6CF, 0x79A2}, //10473 #CJK UNIFIED IDEOGRAPH
+ {0xE6D0, 0x799B}, //10474 #CJK UNIFIED IDEOGRAPH
+ {0xE6D1, 0x6B76}, //10475 #CJK UNIFIED IDEOGRAPH
+ {0xE6D2, 0x7A39}, //10476 #CJK UNIFIED IDEOGRAPH
+ {0xE6D3, 0x7AB2}, //10477 #CJK UNIFIED IDEOGRAPH
+ {0xE6D4, 0x7AB4}, //10478 #CJK UNIFIED IDEOGRAPH
+ {0xE6D5, 0x7AB3}, //10479 #CJK UNIFIED IDEOGRAPH
+ {0xE6D6, 0x7BB7}, //10480 #CJK UNIFIED IDEOGRAPH
+ {0xE6D7, 0x7BCB}, //10481 #CJK UNIFIED IDEOGRAPH
+ {0xE6D8, 0x7BBE}, //10482 #CJK UNIFIED IDEOGRAPH
+ {0xE6D9, 0x7BAC}, //10483 #CJK UNIFIED IDEOGRAPH
+ {0xE6DA, 0x7BCE}, //10484 #CJK UNIFIED IDEOGRAPH
+ {0xE6DB, 0x7BAF}, //10485 #CJK UNIFIED IDEOGRAPH
+ {0xE6DC, 0x7BB9}, //10486 #CJK UNIFIED IDEOGRAPH
+ {0xE6DD, 0x7BCA}, //10487 #CJK UNIFIED IDEOGRAPH
+ {0xE6DE, 0x7BB5}, //10488 #CJK UNIFIED IDEOGRAPH
+ {0xE6DF, 0x7CC5}, //10489 #CJK UNIFIED IDEOGRAPH
+ {0xE6E0, 0x7CC8}, //10490 #CJK UNIFIED IDEOGRAPH
+ {0xE6E1, 0x7CCC}, //10491 #CJK UNIFIED IDEOGRAPH
+ {0xE6E2, 0x7CCB}, //10492 #CJK UNIFIED IDEOGRAPH
+ {0xE6E3, 0x7DF7}, //10493 #CJK UNIFIED IDEOGRAPH
+ {0xE6E4, 0x7DDB}, //10494 #CJK UNIFIED IDEOGRAPH
+ {0xE6E5, 0x7DEA}, //10495 #CJK UNIFIED IDEOGRAPH
+ {0xE6E6, 0x7DE7}, //10496 #CJK UNIFIED IDEOGRAPH
+ {0xE6E7, 0x7DD7}, //10497 #CJK UNIFIED IDEOGRAPH
+ {0xE6E8, 0x7DE1}, //10498 #CJK UNIFIED IDEOGRAPH
+ {0xE6E9, 0x7E03}, //10499 #CJK UNIFIED IDEOGRAPH
+ {0xE6EA, 0x7DFA}, //10500 #CJK UNIFIED IDEOGRAPH
+ {0xE6EB, 0x7DE6}, //10501 #CJK UNIFIED IDEOGRAPH
+ {0xE6EC, 0x7DF6}, //10502 #CJK UNIFIED IDEOGRAPH
+ {0xE6ED, 0x7DF1}, //10503 #CJK UNIFIED IDEOGRAPH
+ {0xE6EE, 0x7DF0}, //10504 #CJK UNIFIED IDEOGRAPH
+ {0xE6EF, 0x7DEE}, //10505 #CJK UNIFIED IDEOGRAPH
+ {0xE6F0, 0x7DDF}, //10506 #CJK UNIFIED IDEOGRAPH
+ {0xE6F1, 0x7F76}, //10507 #CJK UNIFIED IDEOGRAPH
+ {0xE6F2, 0x7FAC}, //10508 #CJK UNIFIED IDEOGRAPH
+ {0xE6F3, 0x7FB0}, //10509 #CJK UNIFIED IDEOGRAPH
+ {0xE6F4, 0x7FAD}, //10510 #CJK UNIFIED IDEOGRAPH
+ {0xE6F5, 0x7FED}, //10511 #CJK UNIFIED IDEOGRAPH
+ {0xE6F6, 0x7FEB}, //10512 #CJK UNIFIED IDEOGRAPH
+ {0xE6F7, 0x7FEA}, //10513 #CJK UNIFIED IDEOGRAPH
+ {0xE6F8, 0x7FEC}, //10514 #CJK UNIFIED IDEOGRAPH
+ {0xE6F9, 0x7FE6}, //10515 #CJK UNIFIED IDEOGRAPH
+ {0xE6FA, 0x7FE8}, //10516 #CJK UNIFIED IDEOGRAPH
+ {0xE6FB, 0x8064}, //10517 #CJK UNIFIED IDEOGRAPH
+ {0xE6FC, 0x8067}, //10518 #CJK UNIFIED IDEOGRAPH
+ {0xE6FD, 0x81A3}, //10519 #CJK UNIFIED IDEOGRAPH
+ {0xE6FE, 0x819F}, //10520 #CJK UNIFIED IDEOGRAPH
+ {0xE740, 0x819E}, //10521 #CJK UNIFIED IDEOGRAPH
+ {0xE741, 0x8195}, //10522 #CJK UNIFIED IDEOGRAPH
+ {0xE742, 0x81A2}, //10523 #CJK UNIFIED IDEOGRAPH
+ {0xE743, 0x8199}, //10524 #CJK UNIFIED IDEOGRAPH
+ {0xE744, 0x8197}, //10525 #CJK UNIFIED IDEOGRAPH
+ {0xE745, 0x8216}, //10526 #CJK UNIFIED IDEOGRAPH
+ {0xE746, 0x824F}, //10527 #CJK UNIFIED IDEOGRAPH
+ {0xE747, 0x8253}, //10528 #CJK UNIFIED IDEOGRAPH
+ {0xE748, 0x8252}, //10529 #CJK UNIFIED IDEOGRAPH
+ {0xE749, 0x8250}, //10530 #CJK UNIFIED IDEOGRAPH
+ {0xE74A, 0x824E}, //10531 #CJK UNIFIED IDEOGRAPH
+ {0xE74B, 0x8251}, //10532 #CJK UNIFIED IDEOGRAPH
+ {0xE74C, 0x8524}, //10533 #CJK UNIFIED IDEOGRAPH
+ {0xE74D, 0x853B}, //10534 #CJK UNIFIED IDEOGRAPH
+ {0xE74E, 0x850F}, //10535 #CJK UNIFIED IDEOGRAPH
+ {0xE74F, 0x8500}, //10536 #CJK UNIFIED IDEOGRAPH
+ {0xE750, 0x8529}, //10537 #CJK UNIFIED IDEOGRAPH
+ {0xE751, 0x850E}, //10538 #CJK UNIFIED IDEOGRAPH
+ {0xE752, 0x8509}, //10539 #CJK UNIFIED IDEOGRAPH
+ {0xE753, 0x850D}, //10540 #CJK UNIFIED IDEOGRAPH
+ {0xE754, 0x851F}, //10541 #CJK UNIFIED IDEOGRAPH
+ {0xE755, 0x850A}, //10542 #CJK UNIFIED IDEOGRAPH
+ {0xE756, 0x8527}, //10543 #CJK UNIFIED IDEOGRAPH
+ {0xE757, 0x851C}, //10544 #CJK UNIFIED IDEOGRAPH
+ {0xE758, 0x84FB}, //10545 #CJK UNIFIED IDEOGRAPH
+ {0xE759, 0x852B}, //10546 #CJK UNIFIED IDEOGRAPH
+ {0xE75A, 0x84FA}, //10547 #CJK UNIFIED IDEOGRAPH
+ {0xE75B, 0x8508}, //10548 #CJK UNIFIED IDEOGRAPH
+ {0xE75C, 0x850C}, //10549 #CJK UNIFIED IDEOGRAPH
+ {0xE75D, 0x84F4}, //10550 #CJK UNIFIED IDEOGRAPH
+ {0xE75E, 0x852A}, //10551 #CJK UNIFIED IDEOGRAPH
+ {0xE75F, 0x84F2}, //10552 #CJK UNIFIED IDEOGRAPH
+ {0xE760, 0x8515}, //10553 #CJK UNIFIED IDEOGRAPH
+ {0xE761, 0x84F7}, //10554 #CJK UNIFIED IDEOGRAPH
+ {0xE762, 0x84EB}, //10555 #CJK UNIFIED IDEOGRAPH
+ {0xE763, 0x84F3}, //10556 #CJK UNIFIED IDEOGRAPH
+ {0xE764, 0x84FC}, //10557 #CJK UNIFIED IDEOGRAPH
+ {0xE765, 0x8512}, //10558 #CJK UNIFIED IDEOGRAPH
+ {0xE766, 0x84EA}, //10559 #CJK UNIFIED IDEOGRAPH
+ {0xE767, 0x84E9}, //10560 #CJK UNIFIED IDEOGRAPH
+ {0xE768, 0x8516}, //10561 #CJK UNIFIED IDEOGRAPH
+ {0xE769, 0x84FE}, //10562 #CJK UNIFIED IDEOGRAPH
+ {0xE76A, 0x8528}, //10563 #CJK UNIFIED IDEOGRAPH
+ {0xE76B, 0x851D}, //10564 #CJK UNIFIED IDEOGRAPH
+ {0xE76C, 0x852E}, //10565 #CJK UNIFIED IDEOGRAPH
+ {0xE76D, 0x8502}, //10566 #CJK UNIFIED IDEOGRAPH
+ {0xE76E, 0x84FD}, //10567 #CJK UNIFIED IDEOGRAPH
+ {0xE76F, 0x851E}, //10568 #CJK UNIFIED IDEOGRAPH
+ {0xE770, 0x84F6}, //10569 #CJK UNIFIED IDEOGRAPH
+ {0xE771, 0x8531}, //10570 #CJK UNIFIED IDEOGRAPH
+ {0xE772, 0x8526}, //10571 #CJK UNIFIED IDEOGRAPH
+ {0xE773, 0x84E7}, //10572 #CJK UNIFIED IDEOGRAPH
+ {0xE774, 0x84E8}, //10573 #CJK UNIFIED IDEOGRAPH
+ {0xE775, 0x84F0}, //10574 #CJK UNIFIED IDEOGRAPH
+ {0xE776, 0x84EF}, //10575 #CJK UNIFIED IDEOGRAPH
+ {0xE777, 0x84F9}, //10576 #CJK UNIFIED IDEOGRAPH
+ {0xE778, 0x8518}, //10577 #CJK UNIFIED IDEOGRAPH
+ {0xE779, 0x8520}, //10578 #CJK UNIFIED IDEOGRAPH
+ {0xE77A, 0x8530}, //10579 #CJK UNIFIED IDEOGRAPH
+ {0xE77B, 0x850B}, //10580 #CJK UNIFIED IDEOGRAPH
+ {0xE77C, 0x8519}, //10581 #CJK UNIFIED IDEOGRAPH
+ {0xE77D, 0x852F}, //10582 #CJK UNIFIED IDEOGRAPH
+ {0xE77E, 0x8662}, //10583 #CJK UNIFIED IDEOGRAPH
+ {0xE7A1, 0x8756}, //10584 #CJK UNIFIED IDEOGRAPH
+ {0xE7A2, 0x8763}, //10585 #CJK UNIFIED IDEOGRAPH
+ {0xE7A3, 0x8764}, //10586 #CJK UNIFIED IDEOGRAPH
+ {0xE7A4, 0x8777}, //10587 #CJK UNIFIED IDEOGRAPH
+ {0xE7A5, 0x87E1}, //10588 #CJK UNIFIED IDEOGRAPH
+ {0xE7A6, 0x8773}, //10589 #CJK UNIFIED IDEOGRAPH
+ {0xE7A7, 0x8758}, //10590 #CJK UNIFIED IDEOGRAPH
+ {0xE7A8, 0x8754}, //10591 #CJK UNIFIED IDEOGRAPH
+ {0xE7A9, 0x875B}, //10592 #CJK UNIFIED IDEOGRAPH
+ {0xE7AA, 0x8752}, //10593 #CJK UNIFIED IDEOGRAPH
+ {0xE7AB, 0x8761}, //10594 #CJK UNIFIED IDEOGRAPH
+ {0xE7AC, 0x875A}, //10595 #CJK UNIFIED IDEOGRAPH
+ {0xE7AD, 0x8751}, //10596 #CJK UNIFIED IDEOGRAPH
+ {0xE7AE, 0x875E}, //10597 #CJK UNIFIED IDEOGRAPH
+ {0xE7AF, 0x876D}, //10598 #CJK UNIFIED IDEOGRAPH
+ {0xE7B0, 0x876A}, //10599 #CJK UNIFIED IDEOGRAPH
+ {0xE7B1, 0x8750}, //10600 #CJK UNIFIED IDEOGRAPH
+ {0xE7B2, 0x874E}, //10601 #CJK UNIFIED IDEOGRAPH
+ {0xE7B3, 0x875F}, //10602 #CJK UNIFIED IDEOGRAPH
+ {0xE7B4, 0x875D}, //10603 #CJK UNIFIED IDEOGRAPH
+ {0xE7B5, 0x876F}, //10604 #CJK UNIFIED IDEOGRAPH
+ {0xE7B6, 0x876C}, //10605 #CJK UNIFIED IDEOGRAPH
+ {0xE7B7, 0x877A}, //10606 #CJK UNIFIED IDEOGRAPH
+ {0xE7B8, 0x876E}, //10607 #CJK UNIFIED IDEOGRAPH
+ {0xE7B9, 0x875C}, //10608 #CJK UNIFIED IDEOGRAPH
+ {0xE7BA, 0x8765}, //10609 #CJK UNIFIED IDEOGRAPH
+ {0xE7BB, 0x874F}, //10610 #CJK UNIFIED IDEOGRAPH
+ {0xE7BC, 0x877B}, //10611 #CJK UNIFIED IDEOGRAPH
+ {0xE7BD, 0x8775}, //10612 #CJK UNIFIED IDEOGRAPH
+ {0xE7BE, 0x8762}, //10613 #CJK UNIFIED IDEOGRAPH
+ {0xE7BF, 0x8767}, //10614 #CJK UNIFIED IDEOGRAPH
+ {0xE7C0, 0x8769}, //10615 #CJK UNIFIED IDEOGRAPH
+ {0xE7C1, 0x885A}, //10616 #CJK UNIFIED IDEOGRAPH
+ {0xE7C2, 0x8905}, //10617 #CJK UNIFIED IDEOGRAPH
+ {0xE7C3, 0x890C}, //10618 #CJK UNIFIED IDEOGRAPH
+ {0xE7C4, 0x8914}, //10619 #CJK UNIFIED IDEOGRAPH
+ {0xE7C5, 0x890B}, //10620 #CJK UNIFIED IDEOGRAPH
+ {0xE7C6, 0x8917}, //10621 #CJK UNIFIED IDEOGRAPH
+ {0xE7C7, 0x8918}, //10622 #CJK UNIFIED IDEOGRAPH
+ {0xE7C8, 0x8919}, //10623 #CJK UNIFIED IDEOGRAPH
+ {0xE7C9, 0x8906}, //10624 #CJK UNIFIED IDEOGRAPH
+ {0xE7CA, 0x8916}, //10625 #CJK UNIFIED IDEOGRAPH
+ {0xE7CB, 0x8911}, //10626 #CJK UNIFIED IDEOGRAPH
+ {0xE7CC, 0x890E}, //10627 #CJK UNIFIED IDEOGRAPH
+ {0xE7CD, 0x8909}, //10628 #CJK UNIFIED IDEOGRAPH
+ {0xE7CE, 0x89A2}, //10629 #CJK UNIFIED IDEOGRAPH
+ {0xE7CF, 0x89A4}, //10630 #CJK UNIFIED IDEOGRAPH
+ {0xE7D0, 0x89A3}, //10631 #CJK UNIFIED IDEOGRAPH
+ {0xE7D1, 0x89ED}, //10632 #CJK UNIFIED IDEOGRAPH
+ {0xE7D2, 0x89F0}, //10633 #CJK UNIFIED IDEOGRAPH
+ {0xE7D3, 0x89EC}, //10634 #CJK UNIFIED IDEOGRAPH
+ {0xE7D4, 0x8ACF}, //10635 #CJK UNIFIED IDEOGRAPH
+ {0xE7D5, 0x8AC6}, //10636 #CJK UNIFIED IDEOGRAPH
+ {0xE7D6, 0x8AB8}, //10637 #CJK UNIFIED IDEOGRAPH
+ {0xE7D7, 0x8AD3}, //10638 #CJK UNIFIED IDEOGRAPH
+ {0xE7D8, 0x8AD1}, //10639 #CJK UNIFIED IDEOGRAPH
+ {0xE7D9, 0x8AD4}, //10640 #CJK UNIFIED IDEOGRAPH
+ {0xE7DA, 0x8AD5}, //10641 #CJK UNIFIED IDEOGRAPH
+ {0xE7DB, 0x8ABB}, //10642 #CJK UNIFIED IDEOGRAPH
+ {0xE7DC, 0x8AD7}, //10643 #CJK UNIFIED IDEOGRAPH
+ {0xE7DD, 0x8ABE}, //10644 #CJK UNIFIED IDEOGRAPH
+ {0xE7DE, 0x8AC0}, //10645 #CJK UNIFIED IDEOGRAPH
+ {0xE7DF, 0x8AC5}, //10646 #CJK UNIFIED IDEOGRAPH
+ {0xE7E0, 0x8AD8}, //10647 #CJK UNIFIED IDEOGRAPH
+ {0xE7E1, 0x8AC3}, //10648 #CJK UNIFIED IDEOGRAPH
+ {0xE7E2, 0x8ABA}, //10649 #CJK UNIFIED IDEOGRAPH
+ {0xE7E3, 0x8ABD}, //10650 #CJK UNIFIED IDEOGRAPH
+ {0xE7E4, 0x8AD9}, //10651 #CJK UNIFIED IDEOGRAPH
+ {0xE7E5, 0x8C3E}, //10652 #CJK UNIFIED IDEOGRAPH
+ {0xE7E6, 0x8C4D}, //10653 #CJK UNIFIED IDEOGRAPH
+ {0xE7E7, 0x8C8F}, //10654 #CJK UNIFIED IDEOGRAPH
+ {0xE7E8, 0x8CE5}, //10655 #CJK UNIFIED IDEOGRAPH
+ {0xE7E9, 0x8CDF}, //10656 #CJK UNIFIED IDEOGRAPH
+ {0xE7EA, 0x8CD9}, //10657 #CJK UNIFIED IDEOGRAPH
+ {0xE7EB, 0x8CE8}, //10658 #CJK UNIFIED IDEOGRAPH
+ {0xE7EC, 0x8CDA}, //10659 #CJK UNIFIED IDEOGRAPH
+ {0xE7ED, 0x8CDD}, //10660 #CJK UNIFIED IDEOGRAPH
+ {0xE7EE, 0x8CE7}, //10661 #CJK UNIFIED IDEOGRAPH
+ {0xE7EF, 0x8DA0}, //10662 #CJK UNIFIED IDEOGRAPH
+ {0xE7F0, 0x8D9C}, //10663 #CJK UNIFIED IDEOGRAPH
+ {0xE7F1, 0x8DA1}, //10664 #CJK UNIFIED IDEOGRAPH
+ {0xE7F2, 0x8D9B}, //10665 #CJK UNIFIED IDEOGRAPH
+ {0xE7F3, 0x8E20}, //10666 #CJK UNIFIED IDEOGRAPH
+ {0xE7F4, 0x8E23}, //10667 #CJK UNIFIED IDEOGRAPH
+ {0xE7F5, 0x8E25}, //10668 #CJK UNIFIED IDEOGRAPH
+ {0xE7F6, 0x8E24}, //10669 #CJK UNIFIED IDEOGRAPH
+ {0xE7F7, 0x8E2E}, //10670 #CJK UNIFIED IDEOGRAPH
+ {0xE7F8, 0x8E15}, //10671 #CJK UNIFIED IDEOGRAPH
+ {0xE7F9, 0x8E1B}, //10672 #CJK UNIFIED IDEOGRAPH
+ {0xE7FA, 0x8E16}, //10673 #CJK UNIFIED IDEOGRAPH
+ {0xE7FB, 0x8E11}, //10674 #CJK UNIFIED IDEOGRAPH
+ {0xE7FC, 0x8E19}, //10675 #CJK UNIFIED IDEOGRAPH
+ {0xE7FD, 0x8E26}, //10676 #CJK UNIFIED IDEOGRAPH
+ {0xE7FE, 0x8E27}, //10677 #CJK UNIFIED IDEOGRAPH
+ {0xE840, 0x8E14}, //10678 #CJK UNIFIED IDEOGRAPH
+ {0xE841, 0x8E12}, //10679 #CJK UNIFIED IDEOGRAPH
+ {0xE842, 0x8E18}, //10680 #CJK UNIFIED IDEOGRAPH
+ {0xE843, 0x8E13}, //10681 #CJK UNIFIED IDEOGRAPH
+ {0xE844, 0x8E1C}, //10682 #CJK UNIFIED IDEOGRAPH
+ {0xE845, 0x8E17}, //10683 #CJK UNIFIED IDEOGRAPH
+ {0xE846, 0x8E1A}, //10684 #CJK UNIFIED IDEOGRAPH
+ {0xE847, 0x8F2C}, //10685 #CJK UNIFIED IDEOGRAPH
+ {0xE848, 0x8F24}, //10686 #CJK UNIFIED IDEOGRAPH
+ {0xE849, 0x8F18}, //10687 #CJK UNIFIED IDEOGRAPH
+ {0xE84A, 0x8F1A}, //10688 #CJK UNIFIED IDEOGRAPH
+ {0xE84B, 0x8F20}, //10689 #CJK UNIFIED IDEOGRAPH
+ {0xE84C, 0x8F23}, //10690 #CJK UNIFIED IDEOGRAPH
+ {0xE84D, 0x8F16}, //10691 #CJK UNIFIED IDEOGRAPH
+ {0xE84E, 0x8F17}, //10692 #CJK UNIFIED IDEOGRAPH
+ {0xE84F, 0x9073}, //10693 #CJK UNIFIED IDEOGRAPH
+ {0xE850, 0x9070}, //10694 #CJK UNIFIED IDEOGRAPH
+ {0xE851, 0x906F}, //10695 #CJK UNIFIED IDEOGRAPH
+ {0xE852, 0x9067}, //10696 #CJK UNIFIED IDEOGRAPH
+ {0xE853, 0x906B}, //10697 #CJK UNIFIED IDEOGRAPH
+ {0xE854, 0x912F}, //10698 #CJK UNIFIED IDEOGRAPH
+ {0xE855, 0x912B}, //10699 #CJK UNIFIED IDEOGRAPH
+ {0xE856, 0x9129}, //10700 #CJK UNIFIED IDEOGRAPH
+ {0xE857, 0x912A}, //10701 #CJK UNIFIED IDEOGRAPH
+ {0xE858, 0x9132}, //10702 #CJK UNIFIED IDEOGRAPH
+ {0xE859, 0x9126}, //10703 #CJK UNIFIED IDEOGRAPH
+ {0xE85A, 0x912E}, //10704 #CJK UNIFIED IDEOGRAPH
+ {0xE85B, 0x9185}, //10705 #CJK UNIFIED IDEOGRAPH
+ {0xE85C, 0x9186}, //10706 #CJK UNIFIED IDEOGRAPH
+ {0xE85D, 0x918A}, //10707 #CJK UNIFIED IDEOGRAPH
+ {0xE85E, 0x9181}, //10708 #CJK UNIFIED IDEOGRAPH
+ {0xE85F, 0x9182}, //10709 #CJK UNIFIED IDEOGRAPH
+ {0xE860, 0x9184}, //10710 #CJK UNIFIED IDEOGRAPH
+ {0xE861, 0x9180}, //10711 #CJK UNIFIED IDEOGRAPH
+ {0xE862, 0x92D0}, //10712 #CJK UNIFIED IDEOGRAPH
+ {0xE863, 0x92C3}, //10713 #CJK UNIFIED IDEOGRAPH
+ {0xE864, 0x92C4}, //10714 #CJK UNIFIED IDEOGRAPH
+ {0xE865, 0x92C0}, //10715 #CJK UNIFIED IDEOGRAPH
+ {0xE866, 0x92D9}, //10716 #CJK UNIFIED IDEOGRAPH
+ {0xE867, 0x92B6}, //10717 #CJK UNIFIED IDEOGRAPH
+ {0xE868, 0x92CF}, //10718 #CJK UNIFIED IDEOGRAPH
+ {0xE869, 0x92F1}, //10719 #CJK UNIFIED IDEOGRAPH
+ {0xE86A, 0x92DF}, //10720 #CJK UNIFIED IDEOGRAPH
+ {0xE86B, 0x92D8}, //10721 #CJK UNIFIED IDEOGRAPH
+ {0xE86C, 0x92E9}, //10722 #CJK UNIFIED IDEOGRAPH
+ {0xE86D, 0x92D7}, //10723 #CJK UNIFIED IDEOGRAPH
+ {0xE86E, 0x92DD}, //10724 #CJK UNIFIED IDEOGRAPH
+ {0xE86F, 0x92CC}, //10725 #CJK UNIFIED IDEOGRAPH
+ {0xE870, 0x92EF}, //10726 #CJK UNIFIED IDEOGRAPH
+ {0xE871, 0x92C2}, //10727 #CJK UNIFIED IDEOGRAPH
+ {0xE872, 0x92E8}, //10728 #CJK UNIFIED IDEOGRAPH
+ {0xE873, 0x92CA}, //10729 #CJK UNIFIED IDEOGRAPH
+ {0xE874, 0x92C8}, //10730 #CJK UNIFIED IDEOGRAPH
+ {0xE875, 0x92CE}, //10731 #CJK UNIFIED IDEOGRAPH
+ {0xE876, 0x92E6}, //10732 #CJK UNIFIED IDEOGRAPH
+ {0xE877, 0x92CD}, //10733 #CJK UNIFIED IDEOGRAPH
+ {0xE878, 0x92D5}, //10734 #CJK UNIFIED IDEOGRAPH
+ {0xE879, 0x92C9}, //10735 #CJK UNIFIED IDEOGRAPH
+ {0xE87A, 0x92E0}, //10736 #CJK UNIFIED IDEOGRAPH
+ {0xE87B, 0x92DE}, //10737 #CJK UNIFIED IDEOGRAPH
+ {0xE87C, 0x92E7}, //10738 #CJK UNIFIED IDEOGRAPH
+ {0xE87D, 0x92D1}, //10739 #CJK UNIFIED IDEOGRAPH
+ {0xE87E, 0x92D3}, //10740 #CJK UNIFIED IDEOGRAPH
+ {0xE8A1, 0x92B5}, //10741 #CJK UNIFIED IDEOGRAPH
+ {0xE8A2, 0x92E1}, //10742 #CJK UNIFIED IDEOGRAPH
+ {0xE8A3, 0x92C6}, //10743 #CJK UNIFIED IDEOGRAPH
+ {0xE8A4, 0x92B4}, //10744 #CJK UNIFIED IDEOGRAPH
+ {0xE8A5, 0x957C}, //10745 #CJK UNIFIED IDEOGRAPH
+ {0xE8A6, 0x95AC}, //10746 #CJK UNIFIED IDEOGRAPH
+ {0xE8A7, 0x95AB}, //10747 #CJK UNIFIED IDEOGRAPH
+ {0xE8A8, 0x95AE}, //10748 #CJK UNIFIED IDEOGRAPH
+ {0xE8A9, 0x95B0}, //10749 #CJK UNIFIED IDEOGRAPH
+ {0xE8AA, 0x96A4}, //10750 #CJK UNIFIED IDEOGRAPH
+ {0xE8AB, 0x96A2}, //10751 #CJK UNIFIED IDEOGRAPH
+ {0xE8AC, 0x96D3}, //10752 #CJK UNIFIED IDEOGRAPH
+ {0xE8AD, 0x9705}, //10753 #CJK UNIFIED IDEOGRAPH
+ {0xE8AE, 0x9708}, //10754 #CJK UNIFIED IDEOGRAPH
+ {0xE8AF, 0x9702}, //10755 #CJK UNIFIED IDEOGRAPH
+ {0xE8B0, 0x975A}, //10756 #CJK UNIFIED IDEOGRAPH
+ {0xE8B1, 0x978A}, //10757 #CJK UNIFIED IDEOGRAPH
+ {0xE8B2, 0x978E}, //10758 #CJK UNIFIED IDEOGRAPH
+ {0xE8B3, 0x9788}, //10759 #CJK UNIFIED IDEOGRAPH
+ {0xE8B4, 0x97D0}, //10760 #CJK UNIFIED IDEOGRAPH
+ {0xE8B5, 0x97CF}, //10761 #CJK UNIFIED IDEOGRAPH
+ {0xE8B6, 0x981E}, //10762 #CJK UNIFIED IDEOGRAPH
+ {0xE8B7, 0x981D}, //10763 #CJK UNIFIED IDEOGRAPH
+ {0xE8B8, 0x9826}, //10764 #CJK UNIFIED IDEOGRAPH
+ {0xE8B9, 0x9829}, //10765 #CJK UNIFIED IDEOGRAPH
+ {0xE8BA, 0x9828}, //10766 #CJK UNIFIED IDEOGRAPH
+ {0xE8BB, 0x9820}, //10767 #CJK UNIFIED IDEOGRAPH
+ {0xE8BC, 0x981B}, //10768 #CJK UNIFIED IDEOGRAPH
+ {0xE8BD, 0x9827}, //10769 #CJK UNIFIED IDEOGRAPH
+ {0xE8BE, 0x98B2}, //10770 #CJK UNIFIED IDEOGRAPH
+ {0xE8BF, 0x9908}, //10771 #CJK UNIFIED IDEOGRAPH
+ {0xE8C0, 0x98FA}, //10772 #CJK UNIFIED IDEOGRAPH
+ {0xE8C1, 0x9911}, //10773 #CJK UNIFIED IDEOGRAPH
+ {0xE8C2, 0x9914}, //10774 #CJK UNIFIED IDEOGRAPH
+ {0xE8C3, 0x9916}, //10775 #CJK UNIFIED IDEOGRAPH
+ {0xE8C4, 0x9917}, //10776 #CJK UNIFIED IDEOGRAPH
+ {0xE8C5, 0x9915}, //10777 #CJK UNIFIED IDEOGRAPH
+ {0xE8C6, 0x99DC}, //10778 #CJK UNIFIED IDEOGRAPH
+ {0xE8C7, 0x99CD}, //10779 #CJK UNIFIED IDEOGRAPH
+ {0xE8C8, 0x99CF}, //10780 #CJK UNIFIED IDEOGRAPH
+ {0xE8C9, 0x99D3}, //10781 #CJK UNIFIED IDEOGRAPH
+ {0xE8CA, 0x99D4}, //10782 #CJK UNIFIED IDEOGRAPH
+ {0xE8CB, 0x99CE}, //10783 #CJK UNIFIED IDEOGRAPH
+ {0xE8CC, 0x99C9}, //10784 #CJK UNIFIED IDEOGRAPH
+ {0xE8CD, 0x99D6}, //10785 #CJK UNIFIED IDEOGRAPH
+ {0xE8CE, 0x99D8}, //10786 #CJK UNIFIED IDEOGRAPH
+ {0xE8CF, 0x99CB}, //10787 #CJK UNIFIED IDEOGRAPH
+ {0xE8D0, 0x99D7}, //10788 #CJK UNIFIED IDEOGRAPH
+ {0xE8D1, 0x99CC}, //10789 #CJK UNIFIED IDEOGRAPH
+ {0xE8D2, 0x9AB3}, //10790 #CJK UNIFIED IDEOGRAPH
+ {0xE8D3, 0x9AEC}, //10791 #CJK UNIFIED IDEOGRAPH
+ {0xE8D4, 0x9AEB}, //10792 #CJK UNIFIED IDEOGRAPH
+ {0xE8D5, 0x9AF3}, //10793 #CJK UNIFIED IDEOGRAPH
+ {0xE8D6, 0x9AF2}, //10794 #CJK UNIFIED IDEOGRAPH
+ {0xE8D7, 0x9AF1}, //10795 #CJK UNIFIED IDEOGRAPH
+ {0xE8D8, 0x9B46}, //10796 #CJK UNIFIED IDEOGRAPH
+ {0xE8D9, 0x9B43}, //10797 #CJK UNIFIED IDEOGRAPH
+ {0xE8DA, 0x9B67}, //10798 #CJK UNIFIED IDEOGRAPH
+ {0xE8DB, 0x9B74}, //10799 #CJK UNIFIED IDEOGRAPH
+ {0xE8DC, 0x9B71}, //10800 #CJK UNIFIED IDEOGRAPH
+ {0xE8DD, 0x9B66}, //10801 #CJK UNIFIED IDEOGRAPH
+ {0xE8DE, 0x9B76}, //10802 #CJK UNIFIED IDEOGRAPH
+ {0xE8DF, 0x9B75}, //10803 #CJK UNIFIED IDEOGRAPH
+ {0xE8E0, 0x9B70}, //10804 #CJK UNIFIED IDEOGRAPH
+ {0xE8E1, 0x9B68}, //10805 #CJK UNIFIED IDEOGRAPH
+ {0xE8E2, 0x9B64}, //10806 #CJK UNIFIED IDEOGRAPH
+ {0xE8E3, 0x9B6C}, //10807 #CJK UNIFIED IDEOGRAPH
+ {0xE8E4, 0x9CFC}, //10808 #CJK UNIFIED IDEOGRAPH
+ {0xE8E5, 0x9CFA}, //10809 #CJK UNIFIED IDEOGRAPH
+ {0xE8E6, 0x9CFD}, //10810 #CJK UNIFIED IDEOGRAPH
+ {0xE8E7, 0x9CFF}, //10811 #CJK UNIFIED IDEOGRAPH
+ {0xE8E8, 0x9CF7}, //10812 #CJK UNIFIED IDEOGRAPH
+ {0xE8E9, 0x9D07}, //10813 #CJK UNIFIED IDEOGRAPH
+ {0xE8EA, 0x9D00}, //10814 #CJK UNIFIED IDEOGRAPH
+ {0xE8EB, 0x9CF9}, //10815 #CJK UNIFIED IDEOGRAPH
+ {0xE8EC, 0x9CFB}, //10816 #CJK UNIFIED IDEOGRAPH
+ {0xE8ED, 0x9D08}, //10817 #CJK UNIFIED IDEOGRAPH
+ {0xE8EE, 0x9D05}, //10818 #CJK UNIFIED IDEOGRAPH
+ {0xE8EF, 0x9D04}, //10819 #CJK UNIFIED IDEOGRAPH
+ {0xE8F0, 0x9E83}, //10820 #CJK UNIFIED IDEOGRAPH
+ {0xE8F1, 0x9ED3}, //10821 #CJK UNIFIED IDEOGRAPH
+ {0xE8F2, 0x9F0F}, //10822 #CJK UNIFIED IDEOGRAPH
+ {0xE8F3, 0x9F10}, //10823 #CJK UNIFIED IDEOGRAPH
+ {0xE8F4, 0x511C}, //10824 #CJK UNIFIED IDEOGRAPH
+ {0xE8F5, 0x5113}, //10825 #CJK UNIFIED IDEOGRAPH
+ {0xE8F6, 0x5117}, //10826 #CJK UNIFIED IDEOGRAPH
+ {0xE8F7, 0x511A}, //10827 #CJK UNIFIED IDEOGRAPH
+ {0xE8F8, 0x5111}, //10828 #CJK UNIFIED IDEOGRAPH
+ {0xE8F9, 0x51DE}, //10829 #CJK UNIFIED IDEOGRAPH
+ {0xE8FA, 0x5334}, //10830 #CJK UNIFIED IDEOGRAPH
+ {0xE8FB, 0x53E1}, //10831 #CJK UNIFIED IDEOGRAPH
+ {0xE8FC, 0x5670}, //10832 #CJK UNIFIED IDEOGRAPH
+ {0xE8FD, 0x5660}, //10833 #CJK UNIFIED IDEOGRAPH
+ {0xE8FE, 0x566E}, //10834 #CJK UNIFIED IDEOGRAPH
+ {0xE940, 0x5673}, //10835 #CJK UNIFIED IDEOGRAPH
+ {0xE941, 0x5666}, //10836 #CJK UNIFIED IDEOGRAPH
+ {0xE942, 0x5663}, //10837 #CJK UNIFIED IDEOGRAPH
+ {0xE943, 0x566D}, //10838 #CJK UNIFIED IDEOGRAPH
+ {0xE944, 0x5672}, //10839 #CJK UNIFIED IDEOGRAPH
+ {0xE945, 0x565E}, //10840 #CJK UNIFIED IDEOGRAPH
+ {0xE946, 0x5677}, //10841 #CJK UNIFIED IDEOGRAPH
+ {0xE947, 0x571C}, //10842 #CJK UNIFIED IDEOGRAPH
+ {0xE948, 0x571B}, //10843 #CJK UNIFIED IDEOGRAPH
+ {0xE949, 0x58C8}, //10844 #CJK UNIFIED IDEOGRAPH
+ {0xE94A, 0x58BD}, //10845 #CJK UNIFIED IDEOGRAPH
+ {0xE94B, 0x58C9}, //10846 #CJK UNIFIED IDEOGRAPH
+ {0xE94C, 0x58BF}, //10847 #CJK UNIFIED IDEOGRAPH
+ {0xE94D, 0x58BA}, //10848 #CJK UNIFIED IDEOGRAPH
+ {0xE94E, 0x58C2}, //10849 #CJK UNIFIED IDEOGRAPH
+ {0xE94F, 0x58BC}, //10850 #CJK UNIFIED IDEOGRAPH
+ {0xE950, 0x58C6}, //10851 #CJK UNIFIED IDEOGRAPH
+ {0xE951, 0x5B17}, //10852 #CJK UNIFIED IDEOGRAPH
+ {0xE952, 0x5B19}, //10853 #CJK UNIFIED IDEOGRAPH
+ {0xE953, 0x5B1B}, //10854 #CJK UNIFIED IDEOGRAPH
+ {0xE954, 0x5B21}, //10855 #CJK UNIFIED IDEOGRAPH
+ {0xE955, 0x5B14}, //10856 #CJK UNIFIED IDEOGRAPH
+ {0xE956, 0x5B13}, //10857 #CJK UNIFIED IDEOGRAPH
+ {0xE957, 0x5B10}, //10858 #CJK UNIFIED IDEOGRAPH
+ {0xE958, 0x5B16}, //10859 #CJK UNIFIED IDEOGRAPH
+ {0xE959, 0x5B28}, //10860 #CJK UNIFIED IDEOGRAPH
+ {0xE95A, 0x5B1A}, //10861 #CJK UNIFIED IDEOGRAPH
+ {0xE95B, 0x5B20}, //10862 #CJK UNIFIED IDEOGRAPH
+ {0xE95C, 0x5B1E}, //10863 #CJK UNIFIED IDEOGRAPH
+ {0xE95D, 0x5BEF}, //10864 #CJK UNIFIED IDEOGRAPH
+ {0xE95E, 0x5DAC}, //10865 #CJK UNIFIED IDEOGRAPH
+ {0xE95F, 0x5DB1}, //10866 #CJK UNIFIED IDEOGRAPH
+ {0xE960, 0x5DA9}, //10867 #CJK UNIFIED IDEOGRAPH
+ {0xE961, 0x5DA7}, //10868 #CJK UNIFIED IDEOGRAPH
+ {0xE962, 0x5DB5}, //10869 #CJK UNIFIED IDEOGRAPH
+ {0xE963, 0x5DB0}, //10870 #CJK UNIFIED IDEOGRAPH
+ {0xE964, 0x5DAE}, //10871 #CJK UNIFIED IDEOGRAPH
+ {0xE965, 0x5DAA}, //10872 #CJK UNIFIED IDEOGRAPH
+ {0xE966, 0x5DA8}, //10873 #CJK UNIFIED IDEOGRAPH
+ {0xE967, 0x5DB2}, //10874 #CJK UNIFIED IDEOGRAPH
+ {0xE968, 0x5DAD}, //10875 #CJK UNIFIED IDEOGRAPH
+ {0xE969, 0x5DAF}, //10876 #CJK UNIFIED IDEOGRAPH
+ {0xE96A, 0x5DB4}, //10877 #CJK UNIFIED IDEOGRAPH
+ {0xE96B, 0x5E67}, //10878 #CJK UNIFIED IDEOGRAPH
+ {0xE96C, 0x5E68}, //10879 #CJK UNIFIED IDEOGRAPH
+ {0xE96D, 0x5E66}, //10880 #CJK UNIFIED IDEOGRAPH
+ {0xE96E, 0x5E6F}, //10881 #CJK UNIFIED IDEOGRAPH
+ {0xE96F, 0x5EE9}, //10882 #CJK UNIFIED IDEOGRAPH
+ {0xE970, 0x5EE7}, //10883 #CJK UNIFIED IDEOGRAPH
+ {0xE971, 0x5EE6}, //10884 #CJK UNIFIED IDEOGRAPH
+ {0xE972, 0x5EE8}, //10885 #CJK UNIFIED IDEOGRAPH
+ {0xE973, 0x5EE5}, //10886 #CJK UNIFIED IDEOGRAPH
+ {0xE974, 0x5F4B}, //10887 #CJK UNIFIED IDEOGRAPH
+ {0xE975, 0x5FBC}, //10888 #CJK UNIFIED IDEOGRAPH
+ {0xE976, 0x619D}, //10889 #CJK UNIFIED IDEOGRAPH
+ {0xE977, 0x61A8}, //10890 #CJK UNIFIED IDEOGRAPH
+ {0xE978, 0x6196}, //10891 #CJK UNIFIED IDEOGRAPH
+ {0xE979, 0x61C5}, //10892 #CJK UNIFIED IDEOGRAPH
+ {0xE97A, 0x61B4}, //10893 #CJK UNIFIED IDEOGRAPH
+ {0xE97B, 0x61C6}, //10894 #CJK UNIFIED IDEOGRAPH
+ {0xE97C, 0x61C1}, //10895 #CJK UNIFIED IDEOGRAPH
+ {0xE97D, 0x61CC}, //10896 #CJK UNIFIED IDEOGRAPH
+ {0xE97E, 0x61BA}, //10897 #CJK UNIFIED IDEOGRAPH
+ {0xE9A1, 0x61BF}, //10898 #CJK UNIFIED IDEOGRAPH
+ {0xE9A2, 0x61B8}, //10899 #CJK UNIFIED IDEOGRAPH
+ {0xE9A3, 0x618C}, //10900 #CJK UNIFIED IDEOGRAPH
+ {0xE9A4, 0x64D7}, //10901 #CJK UNIFIED IDEOGRAPH
+ {0xE9A5, 0x64D6}, //10902 #CJK UNIFIED IDEOGRAPH
+ {0xE9A6, 0x64D0}, //10903 #CJK UNIFIED IDEOGRAPH
+ {0xE9A7, 0x64CF}, //10904 #CJK UNIFIED IDEOGRAPH
+ {0xE9A8, 0x64C9}, //10905 #CJK UNIFIED IDEOGRAPH
+ {0xE9A9, 0x64BD}, //10906 #CJK UNIFIED IDEOGRAPH
+ {0xE9AA, 0x6489}, //10907 #CJK UNIFIED IDEOGRAPH
+ {0xE9AB, 0x64C3}, //10908 #CJK UNIFIED IDEOGRAPH
+ {0xE9AC, 0x64DB}, //10909 #CJK UNIFIED IDEOGRAPH
+ {0xE9AD, 0x64F3}, //10910 #CJK UNIFIED IDEOGRAPH
+ {0xE9AE, 0x64D9}, //10911 #CJK UNIFIED IDEOGRAPH
+ {0xE9AF, 0x6533}, //10912 #CJK UNIFIED IDEOGRAPH
+ {0xE9B0, 0x657F}, //10913 #CJK UNIFIED IDEOGRAPH
+ {0xE9B1, 0x657C}, //10914 #CJK UNIFIED IDEOGRAPH
+ {0xE9B2, 0x65A2}, //10915 #CJK UNIFIED IDEOGRAPH
+ {0xE9B3, 0x66C8}, //10916 #CJK UNIFIED IDEOGRAPH
+ {0xE9B4, 0x66BE}, //10917 #CJK UNIFIED IDEOGRAPH
+ {0xE9B5, 0x66C0}, //10918 #CJK UNIFIED IDEOGRAPH
+ {0xE9B6, 0x66CA}, //10919 #CJK UNIFIED IDEOGRAPH
+ {0xE9B7, 0x66CB}, //10920 #CJK UNIFIED IDEOGRAPH
+ {0xE9B8, 0x66CF}, //10921 #CJK UNIFIED IDEOGRAPH
+ {0xE9B9, 0x66BD}, //10922 #CJK UNIFIED IDEOGRAPH
+ {0xE9BA, 0x66BB}, //10923 #CJK UNIFIED IDEOGRAPH
+ {0xE9BB, 0x66BA}, //10924 #CJK UNIFIED IDEOGRAPH
+ {0xE9BC, 0x66CC}, //10925 #CJK UNIFIED IDEOGRAPH
+ {0xE9BD, 0x6723}, //10926 #CJK UNIFIED IDEOGRAPH
+ {0xE9BE, 0x6A34}, //10927 #CJK UNIFIED IDEOGRAPH
+ {0xE9BF, 0x6A66}, //10928 #CJK UNIFIED IDEOGRAPH
+ {0xE9C0, 0x6A49}, //10929 #CJK UNIFIED IDEOGRAPH
+ {0xE9C1, 0x6A67}, //10930 #CJK UNIFIED IDEOGRAPH
+ {0xE9C2, 0x6A32}, //10931 #CJK UNIFIED IDEOGRAPH
+ {0xE9C3, 0x6A68}, //10932 #CJK UNIFIED IDEOGRAPH
+ {0xE9C4, 0x6A3E}, //10933 #CJK UNIFIED IDEOGRAPH
+ {0xE9C5, 0x6A5D}, //10934 #CJK UNIFIED IDEOGRAPH
+ {0xE9C6, 0x6A6D}, //10935 #CJK UNIFIED IDEOGRAPH
+ {0xE9C7, 0x6A76}, //10936 #CJK UNIFIED IDEOGRAPH
+ {0xE9C8, 0x6A5B}, //10937 #CJK UNIFIED IDEOGRAPH
+ {0xE9C9, 0x6A51}, //10938 #CJK UNIFIED IDEOGRAPH
+ {0xE9CA, 0x6A28}, //10939 #CJK UNIFIED IDEOGRAPH
+ {0xE9CB, 0x6A5A}, //10940 #CJK UNIFIED IDEOGRAPH
+ {0xE9CC, 0x6A3B}, //10941 #CJK UNIFIED IDEOGRAPH
+ {0xE9CD, 0x6A3F}, //10942 #CJK UNIFIED IDEOGRAPH
+ {0xE9CE, 0x6A41}, //10943 #CJK UNIFIED IDEOGRAPH
+ {0xE9CF, 0x6A6A}, //10944 #CJK UNIFIED IDEOGRAPH
+ {0xE9D0, 0x6A64}, //10945 #CJK UNIFIED IDEOGRAPH
+ {0xE9D1, 0x6A50}, //10946 #CJK UNIFIED IDEOGRAPH
+ {0xE9D2, 0x6A4F}, //10947 #CJK UNIFIED IDEOGRAPH
+ {0xE9D3, 0x6A54}, //10948 #CJK UNIFIED IDEOGRAPH
+ {0xE9D4, 0x6A6F}, //10949 #CJK UNIFIED IDEOGRAPH
+ {0xE9D5, 0x6A69}, //10950 #CJK UNIFIED IDEOGRAPH
+ {0xE9D6, 0x6A60}, //10951 #CJK UNIFIED IDEOGRAPH
+ {0xE9D7, 0x6A3C}, //10952 #CJK UNIFIED IDEOGRAPH
+ {0xE9D8, 0x6A5E}, //10953 #CJK UNIFIED IDEOGRAPH
+ {0xE9D9, 0x6A56}, //10954 #CJK UNIFIED IDEOGRAPH
+ {0xE9DA, 0x6A55}, //10955 #CJK UNIFIED IDEOGRAPH
+ {0xE9DB, 0x6A4D}, //10956 #CJK UNIFIED IDEOGRAPH
+ {0xE9DC, 0x6A4E}, //10957 #CJK UNIFIED IDEOGRAPH
+ {0xE9DD, 0x6A46}, //10958 #CJK UNIFIED IDEOGRAPH
+ {0xE9DE, 0x6B55}, //10959 #CJK UNIFIED IDEOGRAPH
+ {0xE9DF, 0x6B54}, //10960 #CJK UNIFIED IDEOGRAPH
+ {0xE9E0, 0x6B56}, //10961 #CJK UNIFIED IDEOGRAPH
+ {0xE9E1, 0x6BA7}, //10962 #CJK UNIFIED IDEOGRAPH
+ {0xE9E2, 0x6BAA}, //10963 #CJK UNIFIED IDEOGRAPH
+ {0xE9E3, 0x6BAB}, //10964 #CJK UNIFIED IDEOGRAPH
+ {0xE9E4, 0x6BC8}, //10965 #CJK UNIFIED IDEOGRAPH
+ {0xE9E5, 0x6BC7}, //10966 #CJK UNIFIED IDEOGRAPH
+ {0xE9E6, 0x6C04}, //10967 #CJK UNIFIED IDEOGRAPH
+ {0xE9E7, 0x6C03}, //10968 #CJK UNIFIED IDEOGRAPH
+ {0xE9E8, 0x6C06}, //10969 #CJK UNIFIED IDEOGRAPH
+ {0xE9E9, 0x6FAD}, //10970 #CJK UNIFIED IDEOGRAPH
+ {0xE9EA, 0x6FCB}, //10971 #CJK UNIFIED IDEOGRAPH
+ {0xE9EB, 0x6FA3}, //10972 #CJK UNIFIED IDEOGRAPH
+ {0xE9EC, 0x6FC7}, //10973 #CJK UNIFIED IDEOGRAPH
+ {0xE9ED, 0x6FBC}, //10974 #CJK UNIFIED IDEOGRAPH
+ {0xE9EE, 0x6FCE}, //10975 #CJK UNIFIED IDEOGRAPH
+ {0xE9EF, 0x6FC8}, //10976 #CJK UNIFIED IDEOGRAPH
+ {0xE9F0, 0x6F5E}, //10977 #CJK UNIFIED IDEOGRAPH
+ {0xE9F1, 0x6FC4}, //10978 #CJK UNIFIED IDEOGRAPH
+ {0xE9F2, 0x6FBD}, //10979 #CJK UNIFIED IDEOGRAPH
+ {0xE9F3, 0x6F9E}, //10980 #CJK UNIFIED IDEOGRAPH
+ {0xE9F4, 0x6FCA}, //10981 #CJK UNIFIED IDEOGRAPH
+ {0xE9F5, 0x6FA8}, //10982 #CJK UNIFIED IDEOGRAPH
+ {0xE9F6, 0x7004}, //10983 #CJK UNIFIED IDEOGRAPH
+ {0xE9F7, 0x6FA5}, //10984 #CJK UNIFIED IDEOGRAPH
+ {0xE9F8, 0x6FAE}, //10985 #CJK UNIFIED IDEOGRAPH
+ {0xE9F9, 0x6FBA}, //10986 #CJK UNIFIED IDEOGRAPH
+ {0xE9FA, 0x6FAC}, //10987 #CJK UNIFIED IDEOGRAPH
+ {0xE9FB, 0x6FAA}, //10988 #CJK UNIFIED IDEOGRAPH
+ {0xE9FC, 0x6FCF}, //10989 #CJK UNIFIED IDEOGRAPH
+ {0xE9FD, 0x6FBF}, //10990 #CJK UNIFIED IDEOGRAPH
+ {0xE9FE, 0x6FB8}, //10991 #CJK UNIFIED IDEOGRAPH
+ {0xEA40, 0x6FA2}, //10992 #CJK UNIFIED IDEOGRAPH
+ {0xEA41, 0x6FC9}, //10993 #CJK UNIFIED IDEOGRAPH
+ {0xEA42, 0x6FAB}, //10994 #CJK UNIFIED IDEOGRAPH
+ {0xEA43, 0x6FCD}, //10995 #CJK UNIFIED IDEOGRAPH
+ {0xEA44, 0x6FAF}, //10996 #CJK UNIFIED IDEOGRAPH
+ {0xEA45, 0x6FB2}, //10997 #CJK UNIFIED IDEOGRAPH
+ {0xEA46, 0x6FB0}, //10998 #CJK UNIFIED IDEOGRAPH
+ {0xEA47, 0x71C5}, //10999 #CJK UNIFIED IDEOGRAPH
+ {0xEA48, 0x71C2}, //11000 #CJK UNIFIED IDEOGRAPH
+ {0xEA49, 0x71BF}, //11001 #CJK UNIFIED IDEOGRAPH
+ {0xEA4A, 0x71B8}, //11002 #CJK UNIFIED IDEOGRAPH
+ {0xEA4B, 0x71D6}, //11003 #CJK UNIFIED IDEOGRAPH
+ {0xEA4C, 0x71C0}, //11004 #CJK UNIFIED IDEOGRAPH
+ {0xEA4D, 0x71C1}, //11005 #CJK UNIFIED IDEOGRAPH
+ {0xEA4E, 0x71CB}, //11006 #CJK UNIFIED IDEOGRAPH
+ {0xEA4F, 0x71D4}, //11007 #CJK UNIFIED IDEOGRAPH
+ {0xEA50, 0x71CA}, //11008 #CJK UNIFIED IDEOGRAPH
+ {0xEA51, 0x71C7}, //11009 #CJK UNIFIED IDEOGRAPH
+ {0xEA52, 0x71CF}, //11010 #CJK UNIFIED IDEOGRAPH
+ {0xEA53, 0x71BD}, //11011 #CJK UNIFIED IDEOGRAPH
+ {0xEA54, 0x71D8}, //11012 #CJK UNIFIED IDEOGRAPH
+ {0xEA55, 0x71BC}, //11013 #CJK UNIFIED IDEOGRAPH
+ {0xEA56, 0x71C6}, //11014 #CJK UNIFIED IDEOGRAPH
+ {0xEA57, 0x71DA}, //11015 #CJK UNIFIED IDEOGRAPH
+ {0xEA58, 0x71DB}, //11016 #CJK UNIFIED IDEOGRAPH
+ {0xEA59, 0x729D}, //11017 #CJK UNIFIED IDEOGRAPH
+ {0xEA5A, 0x729E}, //11018 #CJK UNIFIED IDEOGRAPH
+ {0xEA5B, 0x7369}, //11019 #CJK UNIFIED IDEOGRAPH
+ {0xEA5C, 0x7366}, //11020 #CJK UNIFIED IDEOGRAPH
+ {0xEA5D, 0x7367}, //11021 #CJK UNIFIED IDEOGRAPH
+ {0xEA5E, 0x736C}, //11022 #CJK UNIFIED IDEOGRAPH
+ {0xEA5F, 0x7365}, //11023 #CJK UNIFIED IDEOGRAPH
+ {0xEA60, 0x736B}, //11024 #CJK UNIFIED IDEOGRAPH
+ {0xEA61, 0x736A}, //11025 #CJK UNIFIED IDEOGRAPH
+ {0xEA62, 0x747F}, //11026 #CJK UNIFIED IDEOGRAPH
+ {0xEA63, 0x749A}, //11027 #CJK UNIFIED IDEOGRAPH
+ {0xEA64, 0x74A0}, //11028 #CJK UNIFIED IDEOGRAPH
+ {0xEA65, 0x7494}, //11029 #CJK UNIFIED IDEOGRAPH
+ {0xEA66, 0x7492}, //11030 #CJK UNIFIED IDEOGRAPH
+ {0xEA67, 0x7495}, //11031 #CJK UNIFIED IDEOGRAPH
+ {0xEA68, 0x74A1}, //11032 #CJK UNIFIED IDEOGRAPH
+ {0xEA69, 0x750B}, //11033 #CJK UNIFIED IDEOGRAPH
+ {0xEA6A, 0x7580}, //11034 #CJK UNIFIED IDEOGRAPH
+ {0xEA6B, 0x762F}, //11035 #CJK UNIFIED IDEOGRAPH
+ {0xEA6C, 0x762D}, //11036 #CJK UNIFIED IDEOGRAPH
+ {0xEA6D, 0x7631}, //11037 #CJK UNIFIED IDEOGRAPH
+ {0xEA6E, 0x763D}, //11038 #CJK UNIFIED IDEOGRAPH
+ {0xEA6F, 0x7633}, //11039 #CJK UNIFIED IDEOGRAPH
+ {0xEA70, 0x763C}, //11040 #CJK UNIFIED IDEOGRAPH
+ {0xEA71, 0x7635}, //11041 #CJK UNIFIED IDEOGRAPH
+ {0xEA72, 0x7632}, //11042 #CJK UNIFIED IDEOGRAPH
+ {0xEA73, 0x7630}, //11043 #CJK UNIFIED IDEOGRAPH
+ {0xEA74, 0x76BB}, //11044 #CJK UNIFIED IDEOGRAPH
+ {0xEA75, 0x76E6}, //11045 #CJK UNIFIED IDEOGRAPH
+ {0xEA76, 0x779A}, //11046 #CJK UNIFIED IDEOGRAPH
+ {0xEA77, 0x779D}, //11047 #CJK UNIFIED IDEOGRAPH
+ {0xEA78, 0x77A1}, //11048 #CJK UNIFIED IDEOGRAPH
+ {0xEA79, 0x779C}, //11049 #CJK UNIFIED IDEOGRAPH
+ {0xEA7A, 0x779B}, //11050 #CJK UNIFIED IDEOGRAPH
+ {0xEA7B, 0x77A2}, //11051 #CJK UNIFIED IDEOGRAPH
+ {0xEA7C, 0x77A3}, //11052 #CJK UNIFIED IDEOGRAPH
+ {0xEA7D, 0x7795}, //11053 #CJK UNIFIED IDEOGRAPH
+ {0xEA7E, 0x7799}, //11054 #CJK UNIFIED IDEOGRAPH
+ {0xEAA1, 0x7797}, //11055 #CJK UNIFIED IDEOGRAPH
+ {0xEAA2, 0x78DD}, //11056 #CJK UNIFIED IDEOGRAPH
+ {0xEAA3, 0x78E9}, //11057 #CJK UNIFIED IDEOGRAPH
+ {0xEAA4, 0x78E5}, //11058 #CJK UNIFIED IDEOGRAPH
+ {0xEAA5, 0x78EA}, //11059 #CJK UNIFIED IDEOGRAPH
+ {0xEAA6, 0x78DE}, //11060 #CJK UNIFIED IDEOGRAPH
+ {0xEAA7, 0x78E3}, //11061 #CJK UNIFIED IDEOGRAPH
+ {0xEAA8, 0x78DB}, //11062 #CJK UNIFIED IDEOGRAPH
+ {0xEAA9, 0x78E1}, //11063 #CJK UNIFIED IDEOGRAPH
+ {0xEAAA, 0x78E2}, //11064 #CJK UNIFIED IDEOGRAPH
+ {0xEAAB, 0x78ED}, //11065 #CJK UNIFIED IDEOGRAPH
+ {0xEAAC, 0x78DF}, //11066 #CJK UNIFIED IDEOGRAPH
+ {0xEAAD, 0x78E0}, //11067 #CJK UNIFIED IDEOGRAPH
+ {0xEAAE, 0x79A4}, //11068 #CJK UNIFIED IDEOGRAPH
+ {0xEAAF, 0x7A44}, //11069 #CJK UNIFIED IDEOGRAPH
+ {0xEAB0, 0x7A48}, //11070 #CJK UNIFIED IDEOGRAPH
+ {0xEAB1, 0x7A47}, //11071 #CJK UNIFIED IDEOGRAPH
+ {0xEAB2, 0x7AB6}, //11072 #CJK UNIFIED IDEOGRAPH
+ {0xEAB3, 0x7AB8}, //11073 #CJK UNIFIED IDEOGRAPH
+ {0xEAB4, 0x7AB5}, //11074 #CJK UNIFIED IDEOGRAPH
+ {0xEAB5, 0x7AB1}, //11075 #CJK UNIFIED IDEOGRAPH
+ {0xEAB6, 0x7AB7}, //11076 #CJK UNIFIED IDEOGRAPH
+ {0xEAB7, 0x7BDE}, //11077 #CJK UNIFIED IDEOGRAPH
+ {0xEAB8, 0x7BE3}, //11078 #CJK UNIFIED IDEOGRAPH
+ {0xEAB9, 0x7BE7}, //11079 #CJK UNIFIED IDEOGRAPH
+ {0xEABA, 0x7BDD}, //11080 #CJK UNIFIED IDEOGRAPH
+ {0xEABB, 0x7BD5}, //11081 #CJK UNIFIED IDEOGRAPH
+ {0xEABC, 0x7BE5}, //11082 #CJK UNIFIED IDEOGRAPH
+ {0xEABD, 0x7BDA}, //11083 #CJK UNIFIED IDEOGRAPH
+ {0xEABE, 0x7BE8}, //11084 #CJK UNIFIED IDEOGRAPH
+ {0xEABF, 0x7BF9}, //11085 #CJK UNIFIED IDEOGRAPH
+ {0xEAC0, 0x7BD4}, //11086 #CJK UNIFIED IDEOGRAPH
+ {0xEAC1, 0x7BEA}, //11087 #CJK UNIFIED IDEOGRAPH
+ {0xEAC2, 0x7BE2}, //11088 #CJK UNIFIED IDEOGRAPH
+ {0xEAC3, 0x7BDC}, //11089 #CJK UNIFIED IDEOGRAPH
+ {0xEAC4, 0x7BEB}, //11090 #CJK UNIFIED IDEOGRAPH
+ {0xEAC5, 0x7BD8}, //11091 #CJK UNIFIED IDEOGRAPH
+ {0xEAC6, 0x7BDF}, //11092 #CJK UNIFIED IDEOGRAPH
+ {0xEAC7, 0x7CD2}, //11093 #CJK UNIFIED IDEOGRAPH
+ {0xEAC8, 0x7CD4}, //11094 #CJK UNIFIED IDEOGRAPH
+ {0xEAC9, 0x7CD7}, //11095 #CJK UNIFIED IDEOGRAPH
+ {0xEACA, 0x7CD0}, //11096 #CJK UNIFIED IDEOGRAPH
+ {0xEACB, 0x7CD1}, //11097 #CJK UNIFIED IDEOGRAPH
+ {0xEACC, 0x7E12}, //11098 #CJK UNIFIED IDEOGRAPH
+ {0xEACD, 0x7E21}, //11099 #CJK UNIFIED IDEOGRAPH
+ {0xEACE, 0x7E17}, //11100 #CJK UNIFIED IDEOGRAPH
+ {0xEACF, 0x7E0C}, //11101 #CJK UNIFIED IDEOGRAPH
+ {0xEAD0, 0x7E1F}, //11102 #CJK UNIFIED IDEOGRAPH
+ {0xEAD1, 0x7E20}, //11103 #CJK UNIFIED IDEOGRAPH
+ {0xEAD2, 0x7E13}, //11104 #CJK UNIFIED IDEOGRAPH
+ {0xEAD3, 0x7E0E}, //11105 #CJK UNIFIED IDEOGRAPH
+ {0xEAD4, 0x7E1C}, //11106 #CJK UNIFIED IDEOGRAPH
+ {0xEAD5, 0x7E15}, //11107 #CJK UNIFIED IDEOGRAPH
+ {0xEAD6, 0x7E1A}, //11108 #CJK UNIFIED IDEOGRAPH
+ {0xEAD7, 0x7E22}, //11109 #CJK UNIFIED IDEOGRAPH
+ {0xEAD8, 0x7E0B}, //11110 #CJK UNIFIED IDEOGRAPH
+ {0xEAD9, 0x7E0F}, //11111 #CJK UNIFIED IDEOGRAPH
+ {0xEADA, 0x7E16}, //11112 #CJK UNIFIED IDEOGRAPH
+ {0xEADB, 0x7E0D}, //11113 #CJK UNIFIED IDEOGRAPH
+ {0xEADC, 0x7E14}, //11114 #CJK UNIFIED IDEOGRAPH
+ {0xEADD, 0x7E25}, //11115 #CJK UNIFIED IDEOGRAPH
+ {0xEADE, 0x7E24}, //11116 #CJK UNIFIED IDEOGRAPH
+ {0xEADF, 0x7F43}, //11117 #CJK UNIFIED IDEOGRAPH
+ {0xEAE0, 0x7F7B}, //11118 #CJK UNIFIED IDEOGRAPH
+ {0xEAE1, 0x7F7C}, //11119 #CJK UNIFIED IDEOGRAPH
+ {0xEAE2, 0x7F7A}, //11120 #CJK UNIFIED IDEOGRAPH
+ {0xEAE3, 0x7FB1}, //11121 #CJK UNIFIED IDEOGRAPH
+ {0xEAE4, 0x7FEF}, //11122 #CJK UNIFIED IDEOGRAPH
+ {0xEAE5, 0x802A}, //11123 #CJK UNIFIED IDEOGRAPH
+ {0xEAE6, 0x8029}, //11124 #CJK UNIFIED IDEOGRAPH
+ {0xEAE7, 0x806C}, //11125 #CJK UNIFIED IDEOGRAPH
+ {0xEAE8, 0x81B1}, //11126 #CJK UNIFIED IDEOGRAPH
+ {0xEAE9, 0x81A6}, //11127 #CJK UNIFIED IDEOGRAPH
+ {0xEAEA, 0x81AE}, //11128 #CJK UNIFIED IDEOGRAPH
+ {0xEAEB, 0x81B9}, //11129 #CJK UNIFIED IDEOGRAPH
+ {0xEAEC, 0x81B5}, //11130 #CJK UNIFIED IDEOGRAPH
+ {0xEAED, 0x81AB}, //11131 #CJK UNIFIED IDEOGRAPH
+ {0xEAEE, 0x81B0}, //11132 #CJK UNIFIED IDEOGRAPH
+ {0xEAEF, 0x81AC}, //11133 #CJK UNIFIED IDEOGRAPH
+ {0xEAF0, 0x81B4}, //11134 #CJK UNIFIED IDEOGRAPH
+ {0xEAF1, 0x81B2}, //11135 #CJK UNIFIED IDEOGRAPH
+ {0xEAF2, 0x81B7}, //11136 #CJK UNIFIED IDEOGRAPH
+ {0xEAF3, 0x81A7}, //11137 #CJK UNIFIED IDEOGRAPH
+ {0xEAF4, 0x81F2}, //11138 #CJK UNIFIED IDEOGRAPH
+ {0xEAF5, 0x8255}, //11139 #CJK UNIFIED IDEOGRAPH
+ {0xEAF6, 0x8256}, //11140 #CJK UNIFIED IDEOGRAPH
+ {0xEAF7, 0x8257}, //11141 #CJK UNIFIED IDEOGRAPH
+ {0xEAF8, 0x8556}, //11142 #CJK UNIFIED IDEOGRAPH
+ {0xEAF9, 0x8545}, //11143 #CJK UNIFIED IDEOGRAPH
+ {0xEAFA, 0x856B}, //11144 #CJK UNIFIED IDEOGRAPH
+ {0xEAFB, 0x854D}, //11145 #CJK UNIFIED IDEOGRAPH
+ {0xEAFC, 0x8553}, //11146 #CJK UNIFIED IDEOGRAPH
+ {0xEAFD, 0x8561}, //11147 #CJK UNIFIED IDEOGRAPH
+ {0xEAFE, 0x8558}, //11148 #CJK UNIFIED IDEOGRAPH
+ {0xEB40, 0x8540}, //11149 #CJK UNIFIED IDEOGRAPH
+ {0xEB41, 0x8546}, //11150 #CJK UNIFIED IDEOGRAPH
+ {0xEB42, 0x8564}, //11151 #CJK UNIFIED IDEOGRAPH
+ {0xEB43, 0x8541}, //11152 #CJK UNIFIED IDEOGRAPH
+ {0xEB44, 0x8562}, //11153 #CJK UNIFIED IDEOGRAPH
+ {0xEB45, 0x8544}, //11154 #CJK UNIFIED IDEOGRAPH
+ {0xEB46, 0x8551}, //11155 #CJK UNIFIED IDEOGRAPH
+ {0xEB47, 0x8547}, //11156 #CJK UNIFIED IDEOGRAPH
+ {0xEB48, 0x8563}, //11157 #CJK UNIFIED IDEOGRAPH
+ {0xEB49, 0x853E}, //11158 #CJK UNIFIED IDEOGRAPH
+ {0xEB4A, 0x855B}, //11159 #CJK UNIFIED IDEOGRAPH
+ {0xEB4B, 0x8571}, //11160 #CJK UNIFIED IDEOGRAPH
+ {0xEB4C, 0x854E}, //11161 #CJK UNIFIED IDEOGRAPH
+ {0xEB4D, 0x856E}, //11162 #CJK UNIFIED IDEOGRAPH
+ {0xEB4E, 0x8575}, //11163 #CJK UNIFIED IDEOGRAPH
+ {0xEB4F, 0x8555}, //11164 #CJK UNIFIED IDEOGRAPH
+ {0xEB50, 0x8567}, //11165 #CJK UNIFIED IDEOGRAPH
+ {0xEB51, 0x8560}, //11166 #CJK UNIFIED IDEOGRAPH
+ {0xEB52, 0x858C}, //11167 #CJK UNIFIED IDEOGRAPH
+ {0xEB53, 0x8566}, //11168 #CJK UNIFIED IDEOGRAPH
+ {0xEB54, 0x855D}, //11169 #CJK UNIFIED IDEOGRAPH
+ {0xEB55, 0x8554}, //11170 #CJK UNIFIED IDEOGRAPH
+ {0xEB56, 0x8565}, //11171 #CJK UNIFIED IDEOGRAPH
+ {0xEB57, 0x856C}, //11172 #CJK UNIFIED IDEOGRAPH
+ {0xEB58, 0x8663}, //11173 #CJK UNIFIED IDEOGRAPH
+ {0xEB59, 0x8665}, //11174 #CJK UNIFIED IDEOGRAPH
+ {0xEB5A, 0x8664}, //11175 #CJK UNIFIED IDEOGRAPH
+ {0xEB5B, 0x879B}, //11176 #CJK UNIFIED IDEOGRAPH
+ {0xEB5C, 0x878F}, //11177 #CJK UNIFIED IDEOGRAPH
+ {0xEB5D, 0x8797}, //11178 #CJK UNIFIED IDEOGRAPH
+ {0xEB5E, 0x8793}, //11179 #CJK UNIFIED IDEOGRAPH
+ {0xEB5F, 0x8792}, //11180 #CJK UNIFIED IDEOGRAPH
+ {0xEB60, 0x8788}, //11181 #CJK UNIFIED IDEOGRAPH
+ {0xEB61, 0x8781}, //11182 #CJK UNIFIED IDEOGRAPH
+ {0xEB62, 0x8796}, //11183 #CJK UNIFIED IDEOGRAPH
+ {0xEB63, 0x8798}, //11184 #CJK UNIFIED IDEOGRAPH
+ {0xEB64, 0x8779}, //11185 #CJK UNIFIED IDEOGRAPH
+ {0xEB65, 0x8787}, //11186 #CJK UNIFIED IDEOGRAPH
+ {0xEB66, 0x87A3}, //11187 #CJK UNIFIED IDEOGRAPH
+ {0xEB67, 0x8785}, //11188 #CJK UNIFIED IDEOGRAPH
+ {0xEB68, 0x8790}, //11189 #CJK UNIFIED IDEOGRAPH
+ {0xEB69, 0x8791}, //11190 #CJK UNIFIED IDEOGRAPH
+ {0xEB6A, 0x879D}, //11191 #CJK UNIFIED IDEOGRAPH
+ {0xEB6B, 0x8784}, //11192 #CJK UNIFIED IDEOGRAPH
+ {0xEB6C, 0x8794}, //11193 #CJK UNIFIED IDEOGRAPH
+ {0xEB6D, 0x879C}, //11194 #CJK UNIFIED IDEOGRAPH
+ {0xEB6E, 0x879A}, //11195 #CJK UNIFIED IDEOGRAPH
+ {0xEB6F, 0x8789}, //11196 #CJK UNIFIED IDEOGRAPH
+ {0xEB70, 0x891E}, //11197 #CJK UNIFIED IDEOGRAPH
+ {0xEB71, 0x8926}, //11198 #CJK UNIFIED IDEOGRAPH
+ {0xEB72, 0x8930}, //11199 #CJK UNIFIED IDEOGRAPH
+ {0xEB73, 0x892D}, //11200 #CJK UNIFIED IDEOGRAPH
+ {0xEB74, 0x892E}, //11201 #CJK UNIFIED IDEOGRAPH
+ {0xEB75, 0x8927}, //11202 #CJK UNIFIED IDEOGRAPH
+ {0xEB76, 0x8931}, //11203 #CJK UNIFIED IDEOGRAPH
+ {0xEB77, 0x8922}, //11204 #CJK UNIFIED IDEOGRAPH
+ {0xEB78, 0x8929}, //11205 #CJK UNIFIED IDEOGRAPH
+ {0xEB79, 0x8923}, //11206 #CJK UNIFIED IDEOGRAPH
+ {0xEB7A, 0x892F}, //11207 #CJK UNIFIED IDEOGRAPH
+ {0xEB7B, 0x892C}, //11208 #CJK UNIFIED IDEOGRAPH
+ {0xEB7C, 0x891F}, //11209 #CJK UNIFIED IDEOGRAPH
+ {0xEB7D, 0x89F1}, //11210 #CJK UNIFIED IDEOGRAPH
+ {0xEB7E, 0x8AE0}, //11211 #CJK UNIFIED IDEOGRAPH
+ {0xEBA1, 0x8AE2}, //11212 #CJK UNIFIED IDEOGRAPH
+ {0xEBA2, 0x8AF2}, //11213 #CJK UNIFIED IDEOGRAPH
+ {0xEBA3, 0x8AF4}, //11214 #CJK UNIFIED IDEOGRAPH
+ {0xEBA4, 0x8AF5}, //11215 #CJK UNIFIED IDEOGRAPH
+ {0xEBA5, 0x8ADD}, //11216 #CJK UNIFIED IDEOGRAPH
+ {0xEBA6, 0x8B14}, //11217 #CJK UNIFIED IDEOGRAPH
+ {0xEBA7, 0x8AE4}, //11218 #CJK UNIFIED IDEOGRAPH
+ {0xEBA8, 0x8ADF}, //11219 #CJK UNIFIED IDEOGRAPH
+ {0xEBA9, 0x8AF0}, //11220 #CJK UNIFIED IDEOGRAPH
+ {0xEBAA, 0x8AC8}, //11221 #CJK UNIFIED IDEOGRAPH
+ {0xEBAB, 0x8ADE}, //11222 #CJK UNIFIED IDEOGRAPH
+ {0xEBAC, 0x8AE1}, //11223 #CJK UNIFIED IDEOGRAPH
+ {0xEBAD, 0x8AE8}, //11224 #CJK UNIFIED IDEOGRAPH
+ {0xEBAE, 0x8AFF}, //11225 #CJK UNIFIED IDEOGRAPH
+ {0xEBAF, 0x8AEF}, //11226 #CJK UNIFIED IDEOGRAPH
+ {0xEBB0, 0x8AFB}, //11227 #CJK UNIFIED IDEOGRAPH
+ {0xEBB1, 0x8C91}, //11228 #CJK UNIFIED IDEOGRAPH
+ {0xEBB2, 0x8C92}, //11229 #CJK UNIFIED IDEOGRAPH
+ {0xEBB3, 0x8C90}, //11230 #CJK UNIFIED IDEOGRAPH
+ {0xEBB4, 0x8CF5}, //11231 #CJK UNIFIED IDEOGRAPH
+ {0xEBB5, 0x8CEE}, //11232 #CJK UNIFIED IDEOGRAPH
+ {0xEBB6, 0x8CF1}, //11233 #CJK UNIFIED IDEOGRAPH
+ {0xEBB7, 0x8CF0}, //11234 #CJK UNIFIED IDEOGRAPH
+ {0xEBB8, 0x8CF3}, //11235 #CJK UNIFIED IDEOGRAPH
+ {0xEBB9, 0x8D6C}, //11236 #CJK UNIFIED IDEOGRAPH
+ {0xEBBA, 0x8D6E}, //11237 #CJK UNIFIED IDEOGRAPH
+ {0xEBBB, 0x8DA5}, //11238 #CJK UNIFIED IDEOGRAPH
+ {0xEBBC, 0x8DA7}, //11239 #CJK UNIFIED IDEOGRAPH
+ {0xEBBD, 0x8E33}, //11240 #CJK UNIFIED IDEOGRAPH
+ {0xEBBE, 0x8E3E}, //11241 #CJK UNIFIED IDEOGRAPH
+ {0xEBBF, 0x8E38}, //11242 #CJK UNIFIED IDEOGRAPH
+ {0xEBC0, 0x8E40}, //11243 #CJK UNIFIED IDEOGRAPH
+ {0xEBC1, 0x8E45}, //11244 #CJK UNIFIED IDEOGRAPH
+ {0xEBC2, 0x8E36}, //11245 #CJK UNIFIED IDEOGRAPH
+ {0xEBC3, 0x8E3C}, //11246 #CJK UNIFIED IDEOGRAPH
+ {0xEBC4, 0x8E3D}, //11247 #CJK UNIFIED IDEOGRAPH
+ {0xEBC5, 0x8E41}, //11248 #CJK UNIFIED IDEOGRAPH
+ {0xEBC6, 0x8E30}, //11249 #CJK UNIFIED IDEOGRAPH
+ {0xEBC7, 0x8E3F}, //11250 #CJK UNIFIED IDEOGRAPH
+ {0xEBC8, 0x8EBD}, //11251 #CJK UNIFIED IDEOGRAPH
+ {0xEBC9, 0x8F36}, //11252 #CJK UNIFIED IDEOGRAPH
+ {0xEBCA, 0x8F2E}, //11253 #CJK UNIFIED IDEOGRAPH
+ {0xEBCB, 0x8F35}, //11254 #CJK UNIFIED IDEOGRAPH
+ {0xEBCC, 0x8F32}, //11255 #CJK UNIFIED IDEOGRAPH
+ {0xEBCD, 0x8F39}, //11256 #CJK UNIFIED IDEOGRAPH
+ {0xEBCE, 0x8F37}, //11257 #CJK UNIFIED IDEOGRAPH
+ {0xEBCF, 0x8F34}, //11258 #CJK UNIFIED IDEOGRAPH
+ {0xEBD0, 0x9076}, //11259 #CJK UNIFIED IDEOGRAPH
+ {0xEBD1, 0x9079}, //11260 #CJK UNIFIED IDEOGRAPH
+ {0xEBD2, 0x907B}, //11261 #CJK UNIFIED IDEOGRAPH
+ {0xEBD3, 0x9086}, //11262 #CJK UNIFIED IDEOGRAPH
+ {0xEBD4, 0x90FA}, //11263 #CJK UNIFIED IDEOGRAPH
+ {0xEBD5, 0x9133}, //11264 #CJK UNIFIED IDEOGRAPH
+ {0xEBD6, 0x9135}, //11265 #CJK UNIFIED IDEOGRAPH
+ {0xEBD7, 0x9136}, //11266 #CJK UNIFIED IDEOGRAPH
+ {0xEBD8, 0x9193}, //11267 #CJK UNIFIED IDEOGRAPH
+ {0xEBD9, 0x9190}, //11268 #CJK UNIFIED IDEOGRAPH
+ {0xEBDA, 0x9191}, //11269 #CJK UNIFIED IDEOGRAPH
+ {0xEBDB, 0x918D}, //11270 #CJK UNIFIED IDEOGRAPH
+ {0xEBDC, 0x918F}, //11271 #CJK UNIFIED IDEOGRAPH
+ {0xEBDD, 0x9327}, //11272 #CJK UNIFIED IDEOGRAPH
+ {0xEBDE, 0x931E}, //11273 #CJK UNIFIED IDEOGRAPH
+ {0xEBDF, 0x9308}, //11274 #CJK UNIFIED IDEOGRAPH
+ {0xEBE0, 0x931F}, //11275 #CJK UNIFIED IDEOGRAPH
+ {0xEBE1, 0x9306}, //11276 #CJK UNIFIED IDEOGRAPH
+ {0xEBE2, 0x930F}, //11277 #CJK UNIFIED IDEOGRAPH
+ {0xEBE3, 0x937A}, //11278 #CJK UNIFIED IDEOGRAPH
+ {0xEBE4, 0x9338}, //11279 #CJK UNIFIED IDEOGRAPH
+ {0xEBE5, 0x933C}, //11280 #CJK UNIFIED IDEOGRAPH
+ {0xEBE6, 0x931B}, //11281 #CJK UNIFIED IDEOGRAPH
+ {0xEBE7, 0x9323}, //11282 #CJK UNIFIED IDEOGRAPH
+ {0xEBE8, 0x9312}, //11283 #CJK UNIFIED IDEOGRAPH
+ {0xEBE9, 0x9301}, //11284 #CJK UNIFIED IDEOGRAPH
+ {0xEBEA, 0x9346}, //11285 #CJK UNIFIED IDEOGRAPH
+ {0xEBEB, 0x932D}, //11286 #CJK UNIFIED IDEOGRAPH
+ {0xEBEC, 0x930E}, //11287 #CJK UNIFIED IDEOGRAPH
+ {0xEBED, 0x930D}, //11288 #CJK UNIFIED IDEOGRAPH
+ {0xEBEE, 0x92CB}, //11289 #CJK UNIFIED IDEOGRAPH
+ {0xEBEF, 0x931D}, //11290 #CJK UNIFIED IDEOGRAPH
+ {0xEBF0, 0x92FA}, //11291 #CJK UNIFIED IDEOGRAPH
+ {0xEBF1, 0x9325}, //11292 #CJK UNIFIED IDEOGRAPH
+ {0xEBF2, 0x9313}, //11293 #CJK UNIFIED IDEOGRAPH
+ {0xEBF3, 0x92F9}, //11294 #CJK UNIFIED IDEOGRAPH
+ {0xEBF4, 0x92F7}, //11295 #CJK UNIFIED IDEOGRAPH
+ {0xEBF5, 0x9334}, //11296 #CJK UNIFIED IDEOGRAPH
+ {0xEBF6, 0x9302}, //11297 #CJK UNIFIED IDEOGRAPH
+ {0xEBF7, 0x9324}, //11298 #CJK UNIFIED IDEOGRAPH
+ {0xEBF8, 0x92FF}, //11299 #CJK UNIFIED IDEOGRAPH
+ {0xEBF9, 0x9329}, //11300 #CJK UNIFIED IDEOGRAPH
+ {0xEBFA, 0x9339}, //11301 #CJK UNIFIED IDEOGRAPH
+ {0xEBFB, 0x9335}, //11302 #CJK UNIFIED IDEOGRAPH
+ {0xEBFC, 0x932A}, //11303 #CJK UNIFIED IDEOGRAPH
+ {0xEBFD, 0x9314}, //11304 #CJK UNIFIED IDEOGRAPH
+ {0xEBFE, 0x930C}, //11305 #CJK UNIFIED IDEOGRAPH
+ {0xEC40, 0x930B}, //11306 #CJK UNIFIED IDEOGRAPH
+ {0xEC41, 0x92FE}, //11307 #CJK UNIFIED IDEOGRAPH
+ {0xEC42, 0x9309}, //11308 #CJK UNIFIED IDEOGRAPH
+ {0xEC43, 0x9300}, //11309 #CJK UNIFIED IDEOGRAPH
+ {0xEC44, 0x92FB}, //11310 #CJK UNIFIED IDEOGRAPH
+ {0xEC45, 0x9316}, //11311 #CJK UNIFIED IDEOGRAPH
+ {0xEC46, 0x95BC}, //11312 #CJK UNIFIED IDEOGRAPH
+ {0xEC47, 0x95CD}, //11313 #CJK UNIFIED IDEOGRAPH
+ {0xEC48, 0x95BE}, //11314 #CJK UNIFIED IDEOGRAPH
+ {0xEC49, 0x95B9}, //11315 #CJK UNIFIED IDEOGRAPH
+ {0xEC4A, 0x95BA}, //11316 #CJK UNIFIED IDEOGRAPH
+ {0xEC4B, 0x95B6}, //11317 #CJK UNIFIED IDEOGRAPH
+ {0xEC4C, 0x95BF}, //11318 #CJK UNIFIED IDEOGRAPH
+ {0xEC4D, 0x95B5}, //11319 #CJK UNIFIED IDEOGRAPH
+ {0xEC4E, 0x95BD}, //11320 #CJK UNIFIED IDEOGRAPH
+ {0xEC4F, 0x96A9}, //11321 #CJK UNIFIED IDEOGRAPH
+ {0xEC50, 0x96D4}, //11322 #CJK UNIFIED IDEOGRAPH
+ {0xEC51, 0x970B}, //11323 #CJK UNIFIED IDEOGRAPH
+ {0xEC52, 0x9712}, //11324 #CJK UNIFIED IDEOGRAPH
+ {0xEC53, 0x9710}, //11325 #CJK UNIFIED IDEOGRAPH
+ {0xEC54, 0x9799}, //11326 #CJK UNIFIED IDEOGRAPH
+ {0xEC55, 0x9797}, //11327 #CJK UNIFIED IDEOGRAPH
+ {0xEC56, 0x9794}, //11328 #CJK UNIFIED IDEOGRAPH
+ {0xEC57, 0x97F0}, //11329 #CJK UNIFIED IDEOGRAPH
+ {0xEC58, 0x97F8}, //11330 #CJK UNIFIED IDEOGRAPH
+ {0xEC59, 0x9835}, //11331 #CJK UNIFIED IDEOGRAPH
+ {0xEC5A, 0x982F}, //11332 #CJK UNIFIED IDEOGRAPH
+ {0xEC5B, 0x9832}, //11333 #CJK UNIFIED IDEOGRAPH
+ {0xEC5C, 0x9924}, //11334 #CJK UNIFIED IDEOGRAPH
+ {0xEC5D, 0x991F}, //11335 #CJK UNIFIED IDEOGRAPH
+ {0xEC5E, 0x9927}, //11336 #CJK UNIFIED IDEOGRAPH
+ {0xEC5F, 0x9929}, //11337 #CJK UNIFIED IDEOGRAPH
+ {0xEC60, 0x999E}, //11338 #CJK UNIFIED IDEOGRAPH
+ {0xEC61, 0x99EE}, //11339 #CJK UNIFIED IDEOGRAPH
+ {0xEC62, 0x99EC}, //11340 #CJK UNIFIED IDEOGRAPH
+ {0xEC63, 0x99E5}, //11341 #CJK UNIFIED IDEOGRAPH
+ {0xEC64, 0x99E4}, //11342 #CJK UNIFIED IDEOGRAPH
+ {0xEC65, 0x99F0}, //11343 #CJK UNIFIED IDEOGRAPH
+ {0xEC66, 0x99E3}, //11344 #CJK UNIFIED IDEOGRAPH
+ {0xEC67, 0x99EA}, //11345 #CJK UNIFIED IDEOGRAPH
+ {0xEC68, 0x99E9}, //11346 #CJK UNIFIED IDEOGRAPH
+ {0xEC69, 0x99E7}, //11347 #CJK UNIFIED IDEOGRAPH
+ {0xEC6A, 0x9AB9}, //11348 #CJK UNIFIED IDEOGRAPH
+ {0xEC6B, 0x9ABF}, //11349 #CJK UNIFIED IDEOGRAPH
+ {0xEC6C, 0x9AB4}, //11350 #CJK UNIFIED IDEOGRAPH
+ {0xEC6D, 0x9ABB}, //11351 #CJK UNIFIED IDEOGRAPH
+ {0xEC6E, 0x9AF6}, //11352 #CJK UNIFIED IDEOGRAPH
+ {0xEC6F, 0x9AFA}, //11353 #CJK UNIFIED IDEOGRAPH
+ {0xEC70, 0x9AF9}, //11354 #CJK UNIFIED IDEOGRAPH
+ {0xEC71, 0x9AF7}, //11355 #CJK UNIFIED IDEOGRAPH
+ {0xEC72, 0x9B33}, //11356 #CJK UNIFIED IDEOGRAPH
+ {0xEC73, 0x9B80}, //11357 #CJK UNIFIED IDEOGRAPH
+ {0xEC74, 0x9B85}, //11358 #CJK UNIFIED IDEOGRAPH
+ {0xEC75, 0x9B87}, //11359 #CJK UNIFIED IDEOGRAPH
+ {0xEC76, 0x9B7C}, //11360 #CJK UNIFIED IDEOGRAPH
+ {0xEC77, 0x9B7E}, //11361 #CJK UNIFIED IDEOGRAPH
+ {0xEC78, 0x9B7B}, //11362 #CJK UNIFIED IDEOGRAPH
+ {0xEC79, 0x9B82}, //11363 #CJK UNIFIED IDEOGRAPH
+ {0xEC7A, 0x9B93}, //11364 #CJK UNIFIED IDEOGRAPH
+ {0xEC7B, 0x9B92}, //11365 #CJK UNIFIED IDEOGRAPH
+ {0xEC7C, 0x9B90}, //11366 #CJK UNIFIED IDEOGRAPH
+ {0xEC7D, 0x9B7A}, //11367 #CJK UNIFIED IDEOGRAPH
+ {0xEC7E, 0x9B95}, //11368 #CJK UNIFIED IDEOGRAPH
+ {0xECA1, 0x9B7D}, //11369 #CJK UNIFIED IDEOGRAPH
+ {0xECA2, 0x9B88}, //11370 #CJK UNIFIED IDEOGRAPH
+ {0xECA3, 0x9D25}, //11371 #CJK UNIFIED IDEOGRAPH
+ {0xECA4, 0x9D17}, //11372 #CJK UNIFIED IDEOGRAPH
+ {0xECA5, 0x9D20}, //11373 #CJK UNIFIED IDEOGRAPH
+ {0xECA6, 0x9D1E}, //11374 #CJK UNIFIED IDEOGRAPH
+ {0xECA7, 0x9D14}, //11375 #CJK UNIFIED IDEOGRAPH
+ {0xECA8, 0x9D29}, //11376 #CJK UNIFIED IDEOGRAPH
+ {0xECA9, 0x9D1D}, //11377 #CJK UNIFIED IDEOGRAPH
+ {0xECAA, 0x9D18}, //11378 #CJK UNIFIED IDEOGRAPH
+ {0xECAB, 0x9D22}, //11379 #CJK UNIFIED IDEOGRAPH
+ {0xECAC, 0x9D10}, //11380 #CJK UNIFIED IDEOGRAPH
+ {0xECAD, 0x9D19}, //11381 #CJK UNIFIED IDEOGRAPH
+ {0xECAE, 0x9D1F}, //11382 #CJK UNIFIED IDEOGRAPH
+ {0xECAF, 0x9E88}, //11383 #CJK UNIFIED IDEOGRAPH
+ {0xECB0, 0x9E86}, //11384 #CJK UNIFIED IDEOGRAPH
+ {0xECB1, 0x9E87}, //11385 #CJK UNIFIED IDEOGRAPH
+ {0xECB2, 0x9EAE}, //11386 #CJK UNIFIED IDEOGRAPH
+ {0xECB3, 0x9EAD}, //11387 #CJK UNIFIED IDEOGRAPH
+ {0xECB4, 0x9ED5}, //11388 #CJK UNIFIED IDEOGRAPH
+ {0xECB5, 0x9ED6}, //11389 #CJK UNIFIED IDEOGRAPH
+ {0xECB6, 0x9EFA}, //11390 #CJK UNIFIED IDEOGRAPH
+ {0xECB7, 0x9F12}, //11391 #CJK UNIFIED IDEOGRAPH
+ {0xECB8, 0x9F3D}, //11392 #CJK UNIFIED IDEOGRAPH
+ {0xECB9, 0x5126}, //11393 #CJK UNIFIED IDEOGRAPH
+ {0xECBA, 0x5125}, //11394 #CJK UNIFIED IDEOGRAPH
+ {0xECBB, 0x5122}, //11395 #CJK UNIFIED IDEOGRAPH
+ {0xECBC, 0x5124}, //11396 #CJK UNIFIED IDEOGRAPH
+ {0xECBD, 0x5120}, //11397 #CJK UNIFIED IDEOGRAPH
+ {0xECBE, 0x5129}, //11398 #CJK UNIFIED IDEOGRAPH
+ {0xECBF, 0x52F4}, //11399 #CJK UNIFIED IDEOGRAPH
+ {0xECC0, 0x5693}, //11400 #CJK UNIFIED IDEOGRAPH
+ {0xECC1, 0x568C}, //11401 #CJK UNIFIED IDEOGRAPH
+ {0xECC2, 0x568D}, //11402 #CJK UNIFIED IDEOGRAPH
+ {0xECC3, 0x5686}, //11403 #CJK UNIFIED IDEOGRAPH
+ {0xECC4, 0x5684}, //11404 #CJK UNIFIED IDEOGRAPH
+ {0xECC5, 0x5683}, //11405 #CJK UNIFIED IDEOGRAPH
+ {0xECC6, 0x567E}, //11406 #CJK UNIFIED IDEOGRAPH
+ {0xECC7, 0x5682}, //11407 #CJK UNIFIED IDEOGRAPH
+ {0xECC8, 0x567F}, //11408 #CJK UNIFIED IDEOGRAPH
+ {0xECC9, 0x5681}, //11409 #CJK UNIFIED IDEOGRAPH
+ {0xECCA, 0x58D6}, //11410 #CJK UNIFIED IDEOGRAPH
+ {0xECCB, 0x58D4}, //11411 #CJK UNIFIED IDEOGRAPH
+ {0xECCC, 0x58CF}, //11412 #CJK UNIFIED IDEOGRAPH
+ {0xECCD, 0x58D2}, //11413 #CJK UNIFIED IDEOGRAPH
+ {0xECCE, 0x5B2D}, //11414 #CJK UNIFIED IDEOGRAPH
+ {0xECCF, 0x5B25}, //11415 #CJK UNIFIED IDEOGRAPH
+ {0xECD0, 0x5B32}, //11416 #CJK UNIFIED IDEOGRAPH
+ {0xECD1, 0x5B23}, //11417 #CJK UNIFIED IDEOGRAPH
+ {0xECD2, 0x5B2C}, //11418 #CJK UNIFIED IDEOGRAPH
+ {0xECD3, 0x5B27}, //11419 #CJK UNIFIED IDEOGRAPH
+ {0xECD4, 0x5B26}, //11420 #CJK UNIFIED IDEOGRAPH
+ {0xECD5, 0x5B2F}, //11421 #CJK UNIFIED IDEOGRAPH
+ {0xECD6, 0x5B2E}, //11422 #CJK UNIFIED IDEOGRAPH
+ {0xECD7, 0x5B7B}, //11423 #CJK UNIFIED IDEOGRAPH
+ {0xECD8, 0x5BF1}, //11424 #CJK UNIFIED IDEOGRAPH
+ {0xECD9, 0x5BF2}, //11425 #CJK UNIFIED IDEOGRAPH
+ {0xECDA, 0x5DB7}, //11426 #CJK UNIFIED IDEOGRAPH
+ {0xECDB, 0x5E6C}, //11427 #CJK UNIFIED IDEOGRAPH
+ {0xECDC, 0x5E6A}, //11428 #CJK UNIFIED IDEOGRAPH
+ {0xECDD, 0x5FBE}, //11429 #CJK UNIFIED IDEOGRAPH
+ {0xECDE, 0x5FBB}, //11430 #CJK UNIFIED IDEOGRAPH
+ {0xECDF, 0x61C3}, //11431 #CJK UNIFIED IDEOGRAPH
+ {0xECE0, 0x61B5}, //11432 #CJK UNIFIED IDEOGRAPH
+ {0xECE1, 0x61BC}, //11433 #CJK UNIFIED IDEOGRAPH
+ {0xECE2, 0x61E7}, //11434 #CJK UNIFIED IDEOGRAPH
+ {0xECE3, 0x61E0}, //11435 #CJK UNIFIED IDEOGRAPH
+ {0xECE4, 0x61E5}, //11436 #CJK UNIFIED IDEOGRAPH
+ {0xECE5, 0x61E4}, //11437 #CJK UNIFIED IDEOGRAPH
+ {0xECE6, 0x61E8}, //11438 #CJK UNIFIED IDEOGRAPH
+ {0xECE7, 0x61DE}, //11439 #CJK UNIFIED IDEOGRAPH
+ {0xECE8, 0x64EF}, //11440 #CJK UNIFIED IDEOGRAPH
+ {0xECE9, 0x64E9}, //11441 #CJK UNIFIED IDEOGRAPH
+ {0xECEA, 0x64E3}, //11442 #CJK UNIFIED IDEOGRAPH
+ {0xECEB, 0x64EB}, //11443 #CJK UNIFIED IDEOGRAPH
+ {0xECEC, 0x64E4}, //11444 #CJK UNIFIED IDEOGRAPH
+ {0xECED, 0x64E8}, //11445 #CJK UNIFIED IDEOGRAPH
+ {0xECEE, 0x6581}, //11446 #CJK UNIFIED IDEOGRAPH
+ {0xECEF, 0x6580}, //11447 #CJK UNIFIED IDEOGRAPH
+ {0xECF0, 0x65B6}, //11448 #CJK UNIFIED IDEOGRAPH
+ {0xECF1, 0x65DA}, //11449 #CJK UNIFIED IDEOGRAPH
+ {0xECF2, 0x66D2}, //11450 #CJK UNIFIED IDEOGRAPH
+ {0xECF3, 0x6A8D}, //11451 #CJK UNIFIED IDEOGRAPH
+ {0xECF4, 0x6A96}, //11452 #CJK UNIFIED IDEOGRAPH
+ {0xECF5, 0x6A81}, //11453 #CJK UNIFIED IDEOGRAPH
+ {0xECF6, 0x6AA5}, //11454 #CJK UNIFIED IDEOGRAPH
+ {0xECF7, 0x6A89}, //11455 #CJK UNIFIED IDEOGRAPH
+ {0xECF8, 0x6A9F}, //11456 #CJK UNIFIED IDEOGRAPH
+ {0xECF9, 0x6A9B}, //11457 #CJK UNIFIED IDEOGRAPH
+ {0xECFA, 0x6AA1}, //11458 #CJK UNIFIED IDEOGRAPH
+ {0xECFB, 0x6A9E}, //11459 #CJK UNIFIED IDEOGRAPH
+ {0xECFC, 0x6A87}, //11460 #CJK UNIFIED IDEOGRAPH
+ {0xECFD, 0x6A93}, //11461 #CJK UNIFIED IDEOGRAPH
+ {0xECFE, 0x6A8E}, //11462 #CJK UNIFIED IDEOGRAPH
+ {0xED40, 0x6A95}, //11463 #CJK UNIFIED IDEOGRAPH
+ {0xED41, 0x6A83}, //11464 #CJK UNIFIED IDEOGRAPH
+ {0xED42, 0x6AA8}, //11465 #CJK UNIFIED IDEOGRAPH
+ {0xED43, 0x6AA4}, //11466 #CJK UNIFIED IDEOGRAPH
+ {0xED44, 0x6A91}, //11467 #CJK UNIFIED IDEOGRAPH
+ {0xED45, 0x6A7F}, //11468 #CJK UNIFIED IDEOGRAPH
+ {0xED46, 0x6AA6}, //11469 #CJK UNIFIED IDEOGRAPH
+ {0xED47, 0x6A9A}, //11470 #CJK UNIFIED IDEOGRAPH
+ {0xED48, 0x6A85}, //11471 #CJK UNIFIED IDEOGRAPH
+ {0xED49, 0x6A8C}, //11472 #CJK UNIFIED IDEOGRAPH
+ {0xED4A, 0x6A92}, //11473 #CJK UNIFIED IDEOGRAPH
+ {0xED4B, 0x6B5B}, //11474 #CJK UNIFIED IDEOGRAPH
+ {0xED4C, 0x6BAD}, //11475 #CJK UNIFIED IDEOGRAPH
+ {0xED4D, 0x6C09}, //11476 #CJK UNIFIED IDEOGRAPH
+ {0xED4E, 0x6FCC}, //11477 #CJK UNIFIED IDEOGRAPH
+ {0xED4F, 0x6FA9}, //11478 #CJK UNIFIED IDEOGRAPH
+ {0xED50, 0x6FF4}, //11479 #CJK UNIFIED IDEOGRAPH
+ {0xED51, 0x6FD4}, //11480 #CJK UNIFIED IDEOGRAPH
+ {0xED52, 0x6FE3}, //11481 #CJK UNIFIED IDEOGRAPH
+ {0xED53, 0x6FDC}, //11482 #CJK UNIFIED IDEOGRAPH
+ {0xED54, 0x6FED}, //11483 #CJK UNIFIED IDEOGRAPH
+ {0xED55, 0x6FE7}, //11484 #CJK UNIFIED IDEOGRAPH
+ {0xED56, 0x6FE6}, //11485 #CJK UNIFIED IDEOGRAPH
+ {0xED57, 0x6FDE}, //11486 #CJK UNIFIED IDEOGRAPH
+ {0xED58, 0x6FF2}, //11487 #CJK UNIFIED IDEOGRAPH
+ {0xED59, 0x6FDD}, //11488 #CJK UNIFIED IDEOGRAPH
+ {0xED5A, 0x6FE2}, //11489 #CJK UNIFIED IDEOGRAPH
+ {0xED5B, 0x6FE8}, //11490 #CJK UNIFIED IDEOGRAPH
+ {0xED5C, 0x71E1}, //11491 #CJK UNIFIED IDEOGRAPH
+ {0xED5D, 0x71F1}, //11492 #CJK UNIFIED IDEOGRAPH
+ {0xED5E, 0x71E8}, //11493 #CJK UNIFIED IDEOGRAPH
+ {0xED5F, 0x71F2}, //11494 #CJK UNIFIED IDEOGRAPH
+ {0xED60, 0x71E4}, //11495 #CJK UNIFIED IDEOGRAPH
+ {0xED61, 0x71F0}, //11496 #CJK UNIFIED IDEOGRAPH
+ {0xED62, 0x71E2}, //11497 #CJK UNIFIED IDEOGRAPH
+ {0xED63, 0x7373}, //11498 #CJK UNIFIED IDEOGRAPH
+ {0xED64, 0x736E}, //11499 #CJK UNIFIED IDEOGRAPH
+ {0xED65, 0x736F}, //11500 #CJK UNIFIED IDEOGRAPH
+ {0xED66, 0x7497}, //11501 #CJK UNIFIED IDEOGRAPH
+ {0xED67, 0x74B2}, //11502 #CJK UNIFIED IDEOGRAPH
+ {0xED68, 0x74AB}, //11503 #CJK UNIFIED IDEOGRAPH
+ {0xED69, 0x7490}, //11504 #CJK UNIFIED IDEOGRAPH
+ {0xED6A, 0x74AA}, //11505 #CJK UNIFIED IDEOGRAPH
+ {0xED6B, 0x74AD}, //11506 #CJK UNIFIED IDEOGRAPH
+ {0xED6C, 0x74B1}, //11507 #CJK UNIFIED IDEOGRAPH
+ {0xED6D, 0x74A5}, //11508 #CJK UNIFIED IDEOGRAPH
+ {0xED6E, 0x74AF}, //11509 #CJK UNIFIED IDEOGRAPH
+ {0xED6F, 0x7510}, //11510 #CJK UNIFIED IDEOGRAPH
+ {0xED70, 0x7511}, //11511 #CJK UNIFIED IDEOGRAPH
+ {0xED71, 0x7512}, //11512 #CJK UNIFIED IDEOGRAPH
+ {0xED72, 0x750F}, //11513 #CJK UNIFIED IDEOGRAPH
+ {0xED73, 0x7584}, //11514 #CJK UNIFIED IDEOGRAPH
+ {0xED74, 0x7643}, //11515 #CJK UNIFIED IDEOGRAPH
+ {0xED75, 0x7648}, //11516 #CJK UNIFIED IDEOGRAPH
+ {0xED76, 0x7649}, //11517 #CJK UNIFIED IDEOGRAPH
+ {0xED77, 0x7647}, //11518 #CJK UNIFIED IDEOGRAPH
+ {0xED78, 0x76A4}, //11519 #CJK UNIFIED IDEOGRAPH
+ {0xED79, 0x76E9}, //11520 #CJK UNIFIED IDEOGRAPH
+ {0xED7A, 0x77B5}, //11521 #CJK UNIFIED IDEOGRAPH
+ {0xED7B, 0x77AB}, //11522 #CJK UNIFIED IDEOGRAPH
+ {0xED7C, 0x77B2}, //11523 #CJK UNIFIED IDEOGRAPH
+ {0xED7D, 0x77B7}, //11524 #CJK UNIFIED IDEOGRAPH
+ {0xED7E, 0x77B6}, //11525 #CJK UNIFIED IDEOGRAPH
+ {0xEDA1, 0x77B4}, //11526 #CJK UNIFIED IDEOGRAPH
+ {0xEDA2, 0x77B1}, //11527 #CJK UNIFIED IDEOGRAPH
+ {0xEDA3, 0x77A8}, //11528 #CJK UNIFIED IDEOGRAPH
+ {0xEDA4, 0x77F0}, //11529 #CJK UNIFIED IDEOGRAPH
+ {0xEDA5, 0x78F3}, //11530 #CJK UNIFIED IDEOGRAPH
+ {0xEDA6, 0x78FD}, //11531 #CJK UNIFIED IDEOGRAPH
+ {0xEDA7, 0x7902}, //11532 #CJK UNIFIED IDEOGRAPH
+ {0xEDA8, 0x78FB}, //11533 #CJK UNIFIED IDEOGRAPH
+ {0xEDA9, 0x78FC}, //11534 #CJK UNIFIED IDEOGRAPH
+ {0xEDAA, 0x78F2}, //11535 #CJK UNIFIED IDEOGRAPH
+ {0xEDAB, 0x7905}, //11536 #CJK UNIFIED IDEOGRAPH
+ {0xEDAC, 0x78F9}, //11537 #CJK UNIFIED IDEOGRAPH
+ {0xEDAD, 0x78FE}, //11538 #CJK UNIFIED IDEOGRAPH
+ {0xEDAE, 0x7904}, //11539 #CJK UNIFIED IDEOGRAPH
+ {0xEDAF, 0x79AB}, //11540 #CJK UNIFIED IDEOGRAPH
+ {0xEDB0, 0x79A8}, //11541 #CJK UNIFIED IDEOGRAPH
+ {0xEDB1, 0x7A5C}, //11542 #CJK UNIFIED IDEOGRAPH
+ {0xEDB2, 0x7A5B}, //11543 #CJK UNIFIED IDEOGRAPH
+ {0xEDB3, 0x7A56}, //11544 #CJK UNIFIED IDEOGRAPH
+ {0xEDB4, 0x7A58}, //11545 #CJK UNIFIED IDEOGRAPH
+ {0xEDB5, 0x7A54}, //11546 #CJK UNIFIED IDEOGRAPH
+ {0xEDB6, 0x7A5A}, //11547 #CJK UNIFIED IDEOGRAPH
+ {0xEDB7, 0x7ABE}, //11548 #CJK UNIFIED IDEOGRAPH
+ {0xEDB8, 0x7AC0}, //11549 #CJK UNIFIED IDEOGRAPH
+ {0xEDB9, 0x7AC1}, //11550 #CJK UNIFIED IDEOGRAPH
+ {0xEDBA, 0x7C05}, //11551 #CJK UNIFIED IDEOGRAPH
+ {0xEDBB, 0x7C0F}, //11552 #CJK UNIFIED IDEOGRAPH
+ {0xEDBC, 0x7BF2}, //11553 #CJK UNIFIED IDEOGRAPH
+ {0xEDBD, 0x7C00}, //11554 #CJK UNIFIED IDEOGRAPH
+ {0xEDBE, 0x7BFF}, //11555 #CJK UNIFIED IDEOGRAPH
+ {0xEDBF, 0x7BFB}, //11556 #CJK UNIFIED IDEOGRAPH
+ {0xEDC0, 0x7C0E}, //11557 #CJK UNIFIED IDEOGRAPH
+ {0xEDC1, 0x7BF4}, //11558 #CJK UNIFIED IDEOGRAPH
+ {0xEDC2, 0x7C0B}, //11559 #CJK UNIFIED IDEOGRAPH
+ {0xEDC3, 0x7BF3}, //11560 #CJK UNIFIED IDEOGRAPH
+ {0xEDC4, 0x7C02}, //11561 #CJK UNIFIED IDEOGRAPH
+ {0xEDC5, 0x7C09}, //11562 #CJK UNIFIED IDEOGRAPH
+ {0xEDC6, 0x7C03}, //11563 #CJK UNIFIED IDEOGRAPH
+ {0xEDC7, 0x7C01}, //11564 #CJK UNIFIED IDEOGRAPH
+ {0xEDC8, 0x7BF8}, //11565 #CJK UNIFIED IDEOGRAPH
+ {0xEDC9, 0x7BFD}, //11566 #CJK UNIFIED IDEOGRAPH
+ {0xEDCA, 0x7C06}, //11567 #CJK UNIFIED IDEOGRAPH
+ {0xEDCB, 0x7BF0}, //11568 #CJK UNIFIED IDEOGRAPH
+ {0xEDCC, 0x7BF1}, //11569 #CJK UNIFIED IDEOGRAPH
+ {0xEDCD, 0x7C10}, //11570 #CJK UNIFIED IDEOGRAPH
+ {0xEDCE, 0x7C0A}, //11571 #CJK UNIFIED IDEOGRAPH
+ {0xEDCF, 0x7CE8}, //11572 #CJK UNIFIED IDEOGRAPH
+ {0xEDD0, 0x7E2D}, //11573 #CJK UNIFIED IDEOGRAPH
+ {0xEDD1, 0x7E3C}, //11574 #CJK UNIFIED IDEOGRAPH
+ {0xEDD2, 0x7E42}, //11575 #CJK UNIFIED IDEOGRAPH
+ {0xEDD3, 0x7E33}, //11576 #CJK UNIFIED IDEOGRAPH
+ {0xEDD4, 0x9848}, //11577 #CJK UNIFIED IDEOGRAPH
+ {0xEDD5, 0x7E38}, //11578 #CJK UNIFIED IDEOGRAPH
+ {0xEDD6, 0x7E2A}, //11579 #CJK UNIFIED IDEOGRAPH
+ {0xEDD7, 0x7E49}, //11580 #CJK UNIFIED IDEOGRAPH
+ {0xEDD8, 0x7E40}, //11581 #CJK UNIFIED IDEOGRAPH
+ {0xEDD9, 0x7E47}, //11582 #CJK UNIFIED IDEOGRAPH
+ {0xEDDA, 0x7E29}, //11583 #CJK UNIFIED IDEOGRAPH
+ {0xEDDB, 0x7E4C}, //11584 #CJK UNIFIED IDEOGRAPH
+ {0xEDDC, 0x7E30}, //11585 #CJK UNIFIED IDEOGRAPH
+ {0xEDDD, 0x7E3B}, //11586 #CJK UNIFIED IDEOGRAPH
+ {0xEDDE, 0x7E36}, //11587 #CJK UNIFIED IDEOGRAPH
+ {0xEDDF, 0x7E44}, //11588 #CJK UNIFIED IDEOGRAPH
+ {0xEDE0, 0x7E3A}, //11589 #CJK UNIFIED IDEOGRAPH
+ {0xEDE1, 0x7F45}, //11590 #CJK UNIFIED IDEOGRAPH
+ {0xEDE2, 0x7F7F}, //11591 #CJK UNIFIED IDEOGRAPH
+ {0xEDE3, 0x7F7E}, //11592 #CJK UNIFIED IDEOGRAPH
+ {0xEDE4, 0x7F7D}, //11593 #CJK UNIFIED IDEOGRAPH
+ {0xEDE5, 0x7FF4}, //11594 #CJK UNIFIED IDEOGRAPH
+ {0xEDE6, 0x7FF2}, //11595 #CJK UNIFIED IDEOGRAPH
+ {0xEDE7, 0x802C}, //11596 #CJK UNIFIED IDEOGRAPH
+ {0xEDE8, 0x81BB}, //11597 #CJK UNIFIED IDEOGRAPH
+ {0xEDE9, 0x81C4}, //11598 #CJK UNIFIED IDEOGRAPH
+ {0xEDEA, 0x81CC}, //11599 #CJK UNIFIED IDEOGRAPH
+ {0xEDEB, 0x81CA}, //11600 #CJK UNIFIED IDEOGRAPH
+ {0xEDEC, 0x81C5}, //11601 #CJK UNIFIED IDEOGRAPH
+ {0xEDED, 0x81C7}, //11602 #CJK UNIFIED IDEOGRAPH
+ {0xEDEE, 0x81BC}, //11603 #CJK UNIFIED IDEOGRAPH
+ {0xEDEF, 0x81E9}, //11604 #CJK UNIFIED IDEOGRAPH
+ {0xEDF0, 0x825B}, //11605 #CJK UNIFIED IDEOGRAPH
+ {0xEDF1, 0x825A}, //11606 #CJK UNIFIED IDEOGRAPH
+ {0xEDF2, 0x825C}, //11607 #CJK UNIFIED IDEOGRAPH
+ {0xEDF3, 0x8583}, //11608 #CJK UNIFIED IDEOGRAPH
+ {0xEDF4, 0x8580}, //11609 #CJK UNIFIED IDEOGRAPH
+ {0xEDF5, 0x858F}, //11610 #CJK UNIFIED IDEOGRAPH
+ {0xEDF6, 0x85A7}, //11611 #CJK UNIFIED IDEOGRAPH
+ {0xEDF7, 0x8595}, //11612 #CJK UNIFIED IDEOGRAPH
+ {0xEDF8, 0x85A0}, //11613 #CJK UNIFIED IDEOGRAPH
+ {0xEDF9, 0x858B}, //11614 #CJK UNIFIED IDEOGRAPH
+ {0xEDFA, 0x85A3}, //11615 #CJK UNIFIED IDEOGRAPH
+ {0xEDFB, 0x857B}, //11616 #CJK UNIFIED IDEOGRAPH
+ {0xEDFC, 0x85A4}, //11617 #CJK UNIFIED IDEOGRAPH
+ {0xEDFD, 0x859A}, //11618 #CJK UNIFIED IDEOGRAPH
+ {0xEDFE, 0x859E}, //11619 #CJK UNIFIED IDEOGRAPH
+ {0xEE40, 0x8577}, //11620 #CJK UNIFIED IDEOGRAPH
+ {0xEE41, 0x857C}, //11621 #CJK UNIFIED IDEOGRAPH
+ {0xEE42, 0x8589}, //11622 #CJK UNIFIED IDEOGRAPH
+ {0xEE43, 0x85A1}, //11623 #CJK UNIFIED IDEOGRAPH
+ {0xEE44, 0x857A}, //11624 #CJK UNIFIED IDEOGRAPH
+ {0xEE45, 0x8578}, //11625 #CJK UNIFIED IDEOGRAPH
+ {0xEE46, 0x8557}, //11626 #CJK UNIFIED IDEOGRAPH
+ {0xEE47, 0x858E}, //11627 #CJK UNIFIED IDEOGRAPH
+ {0xEE48, 0x8596}, //11628 #CJK UNIFIED IDEOGRAPH
+ {0xEE49, 0x8586}, //11629 #CJK UNIFIED IDEOGRAPH
+ {0xEE4A, 0x858D}, //11630 #CJK UNIFIED IDEOGRAPH
+ {0xEE4B, 0x8599}, //11631 #CJK UNIFIED IDEOGRAPH
+ {0xEE4C, 0x859D}, //11632 #CJK UNIFIED IDEOGRAPH
+ {0xEE4D, 0x8581}, //11633 #CJK UNIFIED IDEOGRAPH
+ {0xEE4E, 0x85A2}, //11634 #CJK UNIFIED IDEOGRAPH
+ {0xEE4F, 0x8582}, //11635 #CJK UNIFIED IDEOGRAPH
+ {0xEE50, 0x8588}, //11636 #CJK UNIFIED IDEOGRAPH
+ {0xEE51, 0x8585}, //11637 #CJK UNIFIED IDEOGRAPH
+ {0xEE52, 0x8579}, //11638 #CJK UNIFIED IDEOGRAPH
+ {0xEE53, 0x8576}, //11639 #CJK UNIFIED IDEOGRAPH
+ {0xEE54, 0x8598}, //11640 #CJK UNIFIED IDEOGRAPH
+ {0xEE55, 0x8590}, //11641 #CJK UNIFIED IDEOGRAPH
+ {0xEE56, 0x859F}, //11642 #CJK UNIFIED IDEOGRAPH
+ {0xEE57, 0x8668}, //11643 #CJK UNIFIED IDEOGRAPH
+ {0xEE58, 0x87BE}, //11644 #CJK UNIFIED IDEOGRAPH
+ {0xEE59, 0x87AA}, //11645 #CJK UNIFIED IDEOGRAPH
+ {0xEE5A, 0x87AD}, //11646 #CJK UNIFIED IDEOGRAPH
+ {0xEE5B, 0x87C5}, //11647 #CJK UNIFIED IDEOGRAPH
+ {0xEE5C, 0x87B0}, //11648 #CJK UNIFIED IDEOGRAPH
+ {0xEE5D, 0x87AC}, //11649 #CJK UNIFIED IDEOGRAPH
+ {0xEE5E, 0x87B9}, //11650 #CJK UNIFIED IDEOGRAPH
+ {0xEE5F, 0x87B5}, //11651 #CJK UNIFIED IDEOGRAPH
+ {0xEE60, 0x87BC}, //11652 #CJK UNIFIED IDEOGRAPH
+ {0xEE61, 0x87AE}, //11653 #CJK UNIFIED IDEOGRAPH
+ {0xEE62, 0x87C9}, //11654 #CJK UNIFIED IDEOGRAPH
+ {0xEE63, 0x87C3}, //11655 #CJK UNIFIED IDEOGRAPH
+ {0xEE64, 0x87C2}, //11656 #CJK UNIFIED IDEOGRAPH
+ {0xEE65, 0x87CC}, //11657 #CJK UNIFIED IDEOGRAPH
+ {0xEE66, 0x87B7}, //11658 #CJK UNIFIED IDEOGRAPH
+ {0xEE67, 0x87AF}, //11659 #CJK UNIFIED IDEOGRAPH
+ {0xEE68, 0x87C4}, //11660 #CJK UNIFIED IDEOGRAPH
+ {0xEE69, 0x87CA}, //11661 #CJK UNIFIED IDEOGRAPH
+ {0xEE6A, 0x87B4}, //11662 #CJK UNIFIED IDEOGRAPH
+ {0xEE6B, 0x87B6}, //11663 #CJK UNIFIED IDEOGRAPH
+ {0xEE6C, 0x87BF}, //11664 #CJK UNIFIED IDEOGRAPH
+ {0xEE6D, 0x87B8}, //11665 #CJK UNIFIED IDEOGRAPH
+ {0xEE6E, 0x87BD}, //11666 #CJK UNIFIED IDEOGRAPH
+ {0xEE6F, 0x87DE}, //11667 #CJK UNIFIED IDEOGRAPH
+ {0xEE70, 0x87B2}, //11668 #CJK UNIFIED IDEOGRAPH
+ {0xEE71, 0x8935}, //11669 #CJK UNIFIED IDEOGRAPH
+ {0xEE72, 0x8933}, //11670 #CJK UNIFIED IDEOGRAPH
+ {0xEE73, 0x893C}, //11671 #CJK UNIFIED IDEOGRAPH
+ {0xEE74, 0x893E}, //11672 #CJK UNIFIED IDEOGRAPH
+ {0xEE75, 0x8941}, //11673 #CJK UNIFIED IDEOGRAPH
+ {0xEE76, 0x8952}, //11674 #CJK UNIFIED IDEOGRAPH
+ {0xEE77, 0x8937}, //11675 #CJK UNIFIED IDEOGRAPH
+ {0xEE78, 0x8942}, //11676 #CJK UNIFIED IDEOGRAPH
+ {0xEE79, 0x89AD}, //11677 #CJK UNIFIED IDEOGRAPH
+ {0xEE7A, 0x89AF}, //11678 #CJK UNIFIED IDEOGRAPH
+ {0xEE7B, 0x89AE}, //11679 #CJK UNIFIED IDEOGRAPH
+ {0xEE7C, 0x89F2}, //11680 #CJK UNIFIED IDEOGRAPH
+ {0xEE7D, 0x89F3}, //11681 #CJK UNIFIED IDEOGRAPH
+ {0xEE7E, 0x8B1E}, //11682 #CJK UNIFIED IDEOGRAPH
+ {0xEEA1, 0x8B18}, //11683 #CJK UNIFIED IDEOGRAPH
+ {0xEEA2, 0x8B16}, //11684 #CJK UNIFIED IDEOGRAPH
+ {0xEEA3, 0x8B11}, //11685 #CJK UNIFIED IDEOGRAPH
+ {0xEEA4, 0x8B05}, //11686 #CJK UNIFIED IDEOGRAPH
+ {0xEEA5, 0x8B0B}, //11687 #CJK UNIFIED IDEOGRAPH
+ {0xEEA6, 0x8B22}, //11688 #CJK UNIFIED IDEOGRAPH
+ {0xEEA7, 0x8B0F}, //11689 #CJK UNIFIED IDEOGRAPH
+ {0xEEA8, 0x8B12}, //11690 #CJK UNIFIED IDEOGRAPH
+ {0xEEA9, 0x8B15}, //11691 #CJK UNIFIED IDEOGRAPH
+ {0xEEAA, 0x8B07}, //11692 #CJK UNIFIED IDEOGRAPH
+ {0xEEAB, 0x8B0D}, //11693 #CJK UNIFIED IDEOGRAPH
+ {0xEEAC, 0x8B08}, //11694 #CJK UNIFIED IDEOGRAPH
+ {0xEEAD, 0x8B06}, //11695 #CJK UNIFIED IDEOGRAPH
+ {0xEEAE, 0x8B1C}, //11696 #CJK UNIFIED IDEOGRAPH
+ {0xEEAF, 0x8B13}, //11697 #CJK UNIFIED IDEOGRAPH
+ {0xEEB0, 0x8B1A}, //11698 #CJK UNIFIED IDEOGRAPH
+ {0xEEB1, 0x8C4F}, //11699 #CJK UNIFIED IDEOGRAPH
+ {0xEEB2, 0x8C70}, //11700 #CJK UNIFIED IDEOGRAPH
+ {0xEEB3, 0x8C72}, //11701 #CJK UNIFIED IDEOGRAPH
+ {0xEEB4, 0x8C71}, //11702 #CJK UNIFIED IDEOGRAPH
+ {0xEEB5, 0x8C6F}, //11703 #CJK UNIFIED IDEOGRAPH
+ {0xEEB6, 0x8C95}, //11704 #CJK UNIFIED IDEOGRAPH
+ {0xEEB7, 0x8C94}, //11705 #CJK UNIFIED IDEOGRAPH
+ {0xEEB8, 0x8CF9}, //11706 #CJK UNIFIED IDEOGRAPH
+ {0xEEB9, 0x8D6F}, //11707 #CJK UNIFIED IDEOGRAPH
+ {0xEEBA, 0x8E4E}, //11708 #CJK UNIFIED IDEOGRAPH
+ {0xEEBB, 0x8E4D}, //11709 #CJK UNIFIED IDEOGRAPH
+ {0xEEBC, 0x8E53}, //11710 #CJK UNIFIED IDEOGRAPH
+ {0xEEBD, 0x8E50}, //11711 #CJK UNIFIED IDEOGRAPH
+ {0xEEBE, 0x8E4C}, //11712 #CJK UNIFIED IDEOGRAPH
+ {0xEEBF, 0x8E47}, //11713 #CJK UNIFIED IDEOGRAPH
+ {0xEEC0, 0x8F43}, //11714 #CJK UNIFIED IDEOGRAPH
+ {0xEEC1, 0x8F40}, //11715 #CJK UNIFIED IDEOGRAPH
+ {0xEEC2, 0x9085}, //11716 #CJK UNIFIED IDEOGRAPH
+ {0xEEC3, 0x907E}, //11717 #CJK UNIFIED IDEOGRAPH
+ {0xEEC4, 0x9138}, //11718 #CJK UNIFIED IDEOGRAPH
+ {0xEEC5, 0x919A}, //11719 #CJK UNIFIED IDEOGRAPH
+ {0xEEC6, 0x91A2}, //11720 #CJK UNIFIED IDEOGRAPH
+ {0xEEC7, 0x919B}, //11721 #CJK UNIFIED IDEOGRAPH
+ {0xEEC8, 0x9199}, //11722 #CJK UNIFIED IDEOGRAPH
+ {0xEEC9, 0x919F}, //11723 #CJK UNIFIED IDEOGRAPH
+ {0xEECA, 0x91A1}, //11724 #CJK UNIFIED IDEOGRAPH
+ {0xEECB, 0x919D}, //11725 #CJK UNIFIED IDEOGRAPH
+ {0xEECC, 0x91A0}, //11726 #CJK UNIFIED IDEOGRAPH
+ {0xEECD, 0x93A1}, //11727 #CJK UNIFIED IDEOGRAPH
+ {0xEECE, 0x9383}, //11728 #CJK UNIFIED IDEOGRAPH
+ {0xEECF, 0x93AF}, //11729 #CJK UNIFIED IDEOGRAPH
+ {0xEED0, 0x9364}, //11730 #CJK UNIFIED IDEOGRAPH
+ {0xEED1, 0x9356}, //11731 #CJK UNIFIED IDEOGRAPH
+ {0xEED2, 0x9347}, //11732 #CJK UNIFIED IDEOGRAPH
+ {0xEED3, 0x937C}, //11733 #CJK UNIFIED IDEOGRAPH
+ {0xEED4, 0x9358}, //11734 #CJK UNIFIED IDEOGRAPH
+ {0xEED5, 0x935C}, //11735 #CJK UNIFIED IDEOGRAPH
+ {0xEED6, 0x9376}, //11736 #CJK UNIFIED IDEOGRAPH
+ {0xEED7, 0x9349}, //11737 #CJK UNIFIED IDEOGRAPH
+ {0xEED8, 0x9350}, //11738 #CJK UNIFIED IDEOGRAPH
+ {0xEED9, 0x9351}, //11739 #CJK UNIFIED IDEOGRAPH
+ {0xEEDA, 0x9360}, //11740 #CJK UNIFIED IDEOGRAPH
+ {0xEEDB, 0x936D}, //11741 #CJK UNIFIED IDEOGRAPH
+ {0xEEDC, 0x938F}, //11742 #CJK UNIFIED IDEOGRAPH
+ {0xEEDD, 0x934C}, //11743 #CJK UNIFIED IDEOGRAPH
+ {0xEEDE, 0x936A}, //11744 #CJK UNIFIED IDEOGRAPH
+ {0xEEDF, 0x9379}, //11745 #CJK UNIFIED IDEOGRAPH
+ {0xEEE0, 0x9357}, //11746 #CJK UNIFIED IDEOGRAPH
+ {0xEEE1, 0x9355}, //11747 #CJK UNIFIED IDEOGRAPH
+ {0xEEE2, 0x9352}, //11748 #CJK UNIFIED IDEOGRAPH
+ {0xEEE3, 0x934F}, //11749 #CJK UNIFIED IDEOGRAPH
+ {0xEEE4, 0x9371}, //11750 #CJK UNIFIED IDEOGRAPH
+ {0xEEE5, 0x9377}, //11751 #CJK UNIFIED IDEOGRAPH
+ {0xEEE6, 0x937B}, //11752 #CJK UNIFIED IDEOGRAPH
+ {0xEEE7, 0x9361}, //11753 #CJK UNIFIED IDEOGRAPH
+ {0xEEE8, 0x935E}, //11754 #CJK UNIFIED IDEOGRAPH
+ {0xEEE9, 0x9363}, //11755 #CJK UNIFIED IDEOGRAPH
+ {0xEEEA, 0x9367}, //11756 #CJK UNIFIED IDEOGRAPH
+ {0xEEEB, 0x9380}, //11757 #CJK UNIFIED IDEOGRAPH
+ {0xEEEC, 0x934E}, //11758 #CJK UNIFIED IDEOGRAPH
+ {0xEEED, 0x9359}, //11759 #CJK UNIFIED IDEOGRAPH
+ {0xEEEE, 0x95C7}, //11760 #CJK UNIFIED IDEOGRAPH
+ {0xEEEF, 0x95C0}, //11761 #CJK UNIFIED IDEOGRAPH
+ {0xEEF0, 0x95C9}, //11762 #CJK UNIFIED IDEOGRAPH
+ {0xEEF1, 0x95C3}, //11763 #CJK UNIFIED IDEOGRAPH
+ {0xEEF2, 0x95C5}, //11764 #CJK UNIFIED IDEOGRAPH
+ {0xEEF3, 0x95B7}, //11765 #CJK UNIFIED IDEOGRAPH
+ {0xEEF4, 0x96AE}, //11766 #CJK UNIFIED IDEOGRAPH
+ {0xEEF5, 0x96B0}, //11767 #CJK UNIFIED IDEOGRAPH
+ {0xEEF6, 0x96AC}, //11768 #CJK UNIFIED IDEOGRAPH
+ {0xEEF7, 0x9720}, //11769 #CJK UNIFIED IDEOGRAPH
+ {0xEEF8, 0x971F}, //11770 #CJK UNIFIED IDEOGRAPH
+ {0xEEF9, 0x9718}, //11771 #CJK UNIFIED IDEOGRAPH
+ {0xEEFA, 0x971D}, //11772 #CJK UNIFIED IDEOGRAPH
+ {0xEEFB, 0x9719}, //11773 #CJK UNIFIED IDEOGRAPH
+ {0xEEFC, 0x979A}, //11774 #CJK UNIFIED IDEOGRAPH
+ {0xEEFD, 0x97A1}, //11775 #CJK UNIFIED IDEOGRAPH
+ {0xEEFE, 0x979C}, //11776 #CJK UNIFIED IDEOGRAPH
+ {0xEF40, 0x979E}, //11777 #CJK UNIFIED IDEOGRAPH
+ {0xEF41, 0x979D}, //11778 #CJK UNIFIED IDEOGRAPH
+ {0xEF42, 0x97D5}, //11779 #CJK UNIFIED IDEOGRAPH
+ {0xEF43, 0x97D4}, //11780 #CJK UNIFIED IDEOGRAPH
+ {0xEF44, 0x97F1}, //11781 #CJK UNIFIED IDEOGRAPH
+ {0xEF45, 0x9841}, //11782 #CJK UNIFIED IDEOGRAPH
+ {0xEF46, 0x9844}, //11783 #CJK UNIFIED IDEOGRAPH
+ {0xEF47, 0x984A}, //11784 #CJK UNIFIED IDEOGRAPH
+ {0xEF48, 0x9849}, //11785 #CJK UNIFIED IDEOGRAPH
+ {0xEF49, 0x9845}, //11786 #CJK UNIFIED IDEOGRAPH
+ {0xEF4A, 0x9843}, //11787 #CJK UNIFIED IDEOGRAPH
+ {0xEF4B, 0x9925}, //11788 #CJK UNIFIED IDEOGRAPH
+ {0xEF4C, 0x992B}, //11789 #CJK UNIFIED IDEOGRAPH
+ {0xEF4D, 0x992C}, //11790 #CJK UNIFIED IDEOGRAPH
+ {0xEF4E, 0x992A}, //11791 #CJK UNIFIED IDEOGRAPH
+ {0xEF4F, 0x9933}, //11792 #CJK UNIFIED IDEOGRAPH
+ {0xEF50, 0x9932}, //11793 #CJK UNIFIED IDEOGRAPH
+ {0xEF51, 0x992F}, //11794 #CJK UNIFIED IDEOGRAPH
+ {0xEF52, 0x992D}, //11795 #CJK UNIFIED IDEOGRAPH
+ {0xEF53, 0x9931}, //11796 #CJK UNIFIED IDEOGRAPH
+ {0xEF54, 0x9930}, //11797 #CJK UNIFIED IDEOGRAPH
+ {0xEF55, 0x9998}, //11798 #CJK UNIFIED IDEOGRAPH
+ {0xEF56, 0x99A3}, //11799 #CJK UNIFIED IDEOGRAPH
+ {0xEF57, 0x99A1}, //11800 #CJK UNIFIED IDEOGRAPH
+ {0xEF58, 0x9A02}, //11801 #CJK UNIFIED IDEOGRAPH
+ {0xEF59, 0x99FA}, //11802 #CJK UNIFIED IDEOGRAPH
+ {0xEF5A, 0x99F4}, //11803 #CJK UNIFIED IDEOGRAPH
+ {0xEF5B, 0x99F7}, //11804 #CJK UNIFIED IDEOGRAPH
+ {0xEF5C, 0x99F9}, //11805 #CJK UNIFIED IDEOGRAPH
+ {0xEF5D, 0x99F8}, //11806 #CJK UNIFIED IDEOGRAPH
+ {0xEF5E, 0x99F6}, //11807 #CJK UNIFIED IDEOGRAPH
+ {0xEF5F, 0x99FB}, //11808 #CJK UNIFIED IDEOGRAPH
+ {0xEF60, 0x99FD}, //11809 #CJK UNIFIED IDEOGRAPH
+ {0xEF61, 0x99FE}, //11810 #CJK UNIFIED IDEOGRAPH
+ {0xEF62, 0x99FC}, //11811 #CJK UNIFIED IDEOGRAPH
+ {0xEF63, 0x9A03}, //11812 #CJK UNIFIED IDEOGRAPH
+ {0xEF64, 0x9ABE}, //11813 #CJK UNIFIED IDEOGRAPH
+ {0xEF65, 0x9AFE}, //11814 #CJK UNIFIED IDEOGRAPH
+ {0xEF66, 0x9AFD}, //11815 #CJK UNIFIED IDEOGRAPH
+ {0xEF67, 0x9B01}, //11816 #CJK UNIFIED IDEOGRAPH
+ {0xEF68, 0x9AFC}, //11817 #CJK UNIFIED IDEOGRAPH
+ {0xEF69, 0x9B48}, //11818 #CJK UNIFIED IDEOGRAPH
+ {0xEF6A, 0x9B9A}, //11819 #CJK UNIFIED IDEOGRAPH
+ {0xEF6B, 0x9BA8}, //11820 #CJK UNIFIED IDEOGRAPH
+ {0xEF6C, 0x9B9E}, //11821 #CJK UNIFIED IDEOGRAPH
+ {0xEF6D, 0x9B9B}, //11822 #CJK UNIFIED IDEOGRAPH
+ {0xEF6E, 0x9BA6}, //11823 #CJK UNIFIED IDEOGRAPH
+ {0xEF6F, 0x9BA1}, //11824 #CJK UNIFIED IDEOGRAPH
+ {0xEF70, 0x9BA5}, //11825 #CJK UNIFIED IDEOGRAPH
+ {0xEF71, 0x9BA4}, //11826 #CJK UNIFIED IDEOGRAPH
+ {0xEF72, 0x9B86}, //11827 #CJK UNIFIED IDEOGRAPH
+ {0xEF73, 0x9BA2}, //11828 #CJK UNIFIED IDEOGRAPH
+ {0xEF74, 0x9BA0}, //11829 #CJK UNIFIED IDEOGRAPH
+ {0xEF75, 0x9BAF}, //11830 #CJK UNIFIED IDEOGRAPH
+ {0xEF76, 0x9D33}, //11831 #CJK UNIFIED IDEOGRAPH
+ {0xEF77, 0x9D41}, //11832 #CJK UNIFIED IDEOGRAPH
+ {0xEF78, 0x9D67}, //11833 #CJK UNIFIED IDEOGRAPH
+ {0xEF79, 0x9D36}, //11834 #CJK UNIFIED IDEOGRAPH
+ {0xEF7A, 0x9D2E}, //11835 #CJK UNIFIED IDEOGRAPH
+ {0xEF7B, 0x9D2F}, //11836 #CJK UNIFIED IDEOGRAPH
+ {0xEF7C, 0x9D31}, //11837 #CJK UNIFIED IDEOGRAPH
+ {0xEF7D, 0x9D38}, //11838 #CJK UNIFIED IDEOGRAPH
+ {0xEF7E, 0x9D30}, //11839 #CJK UNIFIED IDEOGRAPH
+ {0xEFA1, 0x9D45}, //11840 #CJK UNIFIED IDEOGRAPH
+ {0xEFA2, 0x9D42}, //11841 #CJK UNIFIED IDEOGRAPH
+ {0xEFA3, 0x9D43}, //11842 #CJK UNIFIED IDEOGRAPH
+ {0xEFA4, 0x9D3E}, //11843 #CJK UNIFIED IDEOGRAPH
+ {0xEFA5, 0x9D37}, //11844 #CJK UNIFIED IDEOGRAPH
+ {0xEFA6, 0x9D40}, //11845 #CJK UNIFIED IDEOGRAPH
+ {0xEFA7, 0x9D3D}, //11846 #CJK UNIFIED IDEOGRAPH
+ {0xEFA8, 0x7FF5}, //11847 #CJK UNIFIED IDEOGRAPH
+ {0xEFA9, 0x9D2D}, //11848 #CJK UNIFIED IDEOGRAPH
+ {0xEFAA, 0x9E8A}, //11849 #CJK UNIFIED IDEOGRAPH
+ {0xEFAB, 0x9E89}, //11850 #CJK UNIFIED IDEOGRAPH
+ {0xEFAC, 0x9E8D}, //11851 #CJK UNIFIED IDEOGRAPH
+ {0xEFAD, 0x9EB0}, //11852 #CJK UNIFIED IDEOGRAPH
+ {0xEFAE, 0x9EC8}, //11853 #CJK UNIFIED IDEOGRAPH
+ {0xEFAF, 0x9EDA}, //11854 #CJK UNIFIED IDEOGRAPH
+ {0xEFB0, 0x9EFB}, //11855 #CJK UNIFIED IDEOGRAPH
+ {0xEFB1, 0x9EFF}, //11856 #CJK UNIFIED IDEOGRAPH
+ {0xEFB2, 0x9F24}, //11857 #CJK UNIFIED IDEOGRAPH
+ {0xEFB3, 0x9F23}, //11858 #CJK UNIFIED IDEOGRAPH
+ {0xEFB4, 0x9F22}, //11859 #CJK UNIFIED IDEOGRAPH
+ {0xEFB5, 0x9F54}, //11860 #CJK UNIFIED IDEOGRAPH
+ {0xEFB6, 0x9FA0}, //11861 #CJK UNIFIED IDEOGRAPH
+ {0xEFB7, 0x5131}, //11862 #CJK UNIFIED IDEOGRAPH
+ {0xEFB8, 0x512D}, //11863 #CJK UNIFIED IDEOGRAPH
+ {0xEFB9, 0x512E}, //11864 #CJK UNIFIED IDEOGRAPH
+ {0xEFBA, 0x5698}, //11865 #CJK UNIFIED IDEOGRAPH
+ {0xEFBB, 0x569C}, //11866 #CJK UNIFIED IDEOGRAPH
+ {0xEFBC, 0x5697}, //11867 #CJK UNIFIED IDEOGRAPH
+ {0xEFBD, 0x569A}, //11868 #CJK UNIFIED IDEOGRAPH
+ {0xEFBE, 0x569D}, //11869 #CJK UNIFIED IDEOGRAPH
+ {0xEFBF, 0x5699}, //11870 #CJK UNIFIED IDEOGRAPH
+ {0xEFC0, 0x5970}, //11871 #CJK UNIFIED IDEOGRAPH
+ {0xEFC1, 0x5B3C}, //11872 #CJK UNIFIED IDEOGRAPH
+ {0xEFC2, 0x5C69}, //11873 #CJK UNIFIED IDEOGRAPH
+ {0xEFC3, 0x5C6A}, //11874 #CJK UNIFIED IDEOGRAPH
+ {0xEFC4, 0x5DC0}, //11875 #CJK UNIFIED IDEOGRAPH
+ {0xEFC5, 0x5E6D}, //11876 #CJK UNIFIED IDEOGRAPH
+ {0xEFC6, 0x5E6E}, //11877 #CJK UNIFIED IDEOGRAPH
+ {0xEFC7, 0x61D8}, //11878 #CJK UNIFIED IDEOGRAPH
+ {0xEFC8, 0x61DF}, //11879 #CJK UNIFIED IDEOGRAPH
+ {0xEFC9, 0x61ED}, //11880 #CJK UNIFIED IDEOGRAPH
+ {0xEFCA, 0x61EE}, //11881 #CJK UNIFIED IDEOGRAPH
+ {0xEFCB, 0x61F1}, //11882 #CJK UNIFIED IDEOGRAPH
+ {0xEFCC, 0x61EA}, //11883 #CJK UNIFIED IDEOGRAPH
+ {0xEFCD, 0x61F0}, //11884 #CJK UNIFIED IDEOGRAPH
+ {0xEFCE, 0x61EB}, //11885 #CJK UNIFIED IDEOGRAPH
+ {0xEFCF, 0x61D6}, //11886 #CJK UNIFIED IDEOGRAPH
+ {0xEFD0, 0x61E9}, //11887 #CJK UNIFIED IDEOGRAPH
+ {0xEFD1, 0x64FF}, //11888 #CJK UNIFIED IDEOGRAPH
+ {0xEFD2, 0x6504}, //11889 #CJK UNIFIED IDEOGRAPH
+ {0xEFD3, 0x64FD}, //11890 #CJK UNIFIED IDEOGRAPH
+ {0xEFD4, 0x64F8}, //11891 #CJK UNIFIED IDEOGRAPH
+ {0xEFD5, 0x6501}, //11892 #CJK UNIFIED IDEOGRAPH
+ {0xEFD6, 0x6503}, //11893 #CJK UNIFIED IDEOGRAPH
+ {0xEFD7, 0x64FC}, //11894 #CJK UNIFIED IDEOGRAPH
+ {0xEFD8, 0x6594}, //11895 #CJK UNIFIED IDEOGRAPH
+ {0xEFD9, 0x65DB}, //11896 #CJK UNIFIED IDEOGRAPH
+ {0xEFDA, 0x66DA}, //11897 #CJK UNIFIED IDEOGRAPH
+ {0xEFDB, 0x66DB}, //11898 #CJK UNIFIED IDEOGRAPH
+ {0xEFDC, 0x66D8}, //11899 #CJK UNIFIED IDEOGRAPH
+ {0xEFDD, 0x6AC5}, //11900 #CJK UNIFIED IDEOGRAPH
+ {0xEFDE, 0x6AB9}, //11901 #CJK UNIFIED IDEOGRAPH
+ {0xEFDF, 0x6ABD}, //11902 #CJK UNIFIED IDEOGRAPH
+ {0xEFE0, 0x6AE1}, //11903 #CJK UNIFIED IDEOGRAPH
+ {0xEFE1, 0x6AC6}, //11904 #CJK UNIFIED IDEOGRAPH
+ {0xEFE2, 0x6ABA}, //11905 #CJK UNIFIED IDEOGRAPH
+ {0xEFE3, 0x6AB6}, //11906 #CJK UNIFIED IDEOGRAPH
+ {0xEFE4, 0x6AB7}, //11907 #CJK UNIFIED IDEOGRAPH
+ {0xEFE5, 0x6AC7}, //11908 #CJK UNIFIED IDEOGRAPH
+ {0xEFE6, 0x6AB4}, //11909 #CJK UNIFIED IDEOGRAPH
+ {0xEFE7, 0x6AAD}, //11910 #CJK UNIFIED IDEOGRAPH
+ {0xEFE8, 0x6B5E}, //11911 #CJK UNIFIED IDEOGRAPH
+ {0xEFE9, 0x6BC9}, //11912 #CJK UNIFIED IDEOGRAPH
+ {0xEFEA, 0x6C0B}, //11913 #CJK UNIFIED IDEOGRAPH
+ {0xEFEB, 0x7007}, //11914 #CJK UNIFIED IDEOGRAPH
+ {0xEFEC, 0x700C}, //11915 #CJK UNIFIED IDEOGRAPH
+ {0xEFED, 0x700D}, //11916 #CJK UNIFIED IDEOGRAPH
+ {0xEFEE, 0x7001}, //11917 #CJK UNIFIED IDEOGRAPH
+ {0xEFEF, 0x7005}, //11918 #CJK UNIFIED IDEOGRAPH
+ {0xEFF0, 0x7014}, //11919 #CJK UNIFIED IDEOGRAPH
+ {0xEFF1, 0x700E}, //11920 #CJK UNIFIED IDEOGRAPH
+ {0xEFF2, 0x6FFF}, //11921 #CJK UNIFIED IDEOGRAPH
+ {0xEFF3, 0x7000}, //11922 #CJK UNIFIED IDEOGRAPH
+ {0xEFF4, 0x6FFB}, //11923 #CJK UNIFIED IDEOGRAPH
+ {0xEFF5, 0x7026}, //11924 #CJK UNIFIED IDEOGRAPH
+ {0xEFF6, 0x6FFC}, //11925 #CJK UNIFIED IDEOGRAPH
+ {0xEFF7, 0x6FF7}, //11926 #CJK UNIFIED IDEOGRAPH
+ {0xEFF8, 0x700A}, //11927 #CJK UNIFIED IDEOGRAPH
+ {0xEFF9, 0x7201}, //11928 #CJK UNIFIED IDEOGRAPH
+ {0xEFFA, 0x71FF}, //11929 #CJK UNIFIED IDEOGRAPH
+ {0xEFFB, 0x71F9}, //11930 #CJK UNIFIED IDEOGRAPH
+ {0xEFFC, 0x7203}, //11931 #CJK UNIFIED IDEOGRAPH
+ {0xEFFD, 0x71FD}, //11932 #CJK UNIFIED IDEOGRAPH
+ {0xEFFE, 0x7376}, //11933 #CJK UNIFIED IDEOGRAPH
+ {0xF040, 0x74B8}, //11934 #CJK UNIFIED IDEOGRAPH
+ {0xF041, 0x74C0}, //11935 #CJK UNIFIED IDEOGRAPH
+ {0xF042, 0x74B5}, //11936 #CJK UNIFIED IDEOGRAPH
+ {0xF043, 0x74C1}, //11937 #CJK UNIFIED IDEOGRAPH
+ {0xF044, 0x74BE}, //11938 #CJK UNIFIED IDEOGRAPH
+ {0xF045, 0x74B6}, //11939 #CJK UNIFIED IDEOGRAPH
+ {0xF046, 0x74BB}, //11940 #CJK UNIFIED IDEOGRAPH
+ {0xF047, 0x74C2}, //11941 #CJK UNIFIED IDEOGRAPH
+ {0xF048, 0x7514}, //11942 #CJK UNIFIED IDEOGRAPH
+ {0xF049, 0x7513}, //11943 #CJK UNIFIED IDEOGRAPH
+ {0xF04A, 0x765C}, //11944 #CJK UNIFIED IDEOGRAPH
+ {0xF04B, 0x7664}, //11945 #CJK UNIFIED IDEOGRAPH
+ {0xF04C, 0x7659}, //11946 #CJK UNIFIED IDEOGRAPH
+ {0xF04D, 0x7650}, //11947 #CJK UNIFIED IDEOGRAPH
+ {0xF04E, 0x7653}, //11948 #CJK UNIFIED IDEOGRAPH
+ {0xF04F, 0x7657}, //11949 #CJK UNIFIED IDEOGRAPH
+ {0xF050, 0x765A}, //11950 #CJK UNIFIED IDEOGRAPH
+ {0xF051, 0x76A6}, //11951 #CJK UNIFIED IDEOGRAPH
+ {0xF052, 0x76BD}, //11952 #CJK UNIFIED IDEOGRAPH
+ {0xF053, 0x76EC}, //11953 #CJK UNIFIED IDEOGRAPH
+ {0xF054, 0x77C2}, //11954 #CJK UNIFIED IDEOGRAPH
+ {0xF055, 0x77BA}, //11955 #CJK UNIFIED IDEOGRAPH
+ {0xF056, 0x78FF}, //11956 #CJK UNIFIED IDEOGRAPH
+ {0xF057, 0x790C}, //11957 #CJK UNIFIED IDEOGRAPH
+ {0xF058, 0x7913}, //11958 #CJK UNIFIED IDEOGRAPH
+ {0xF059, 0x7914}, //11959 #CJK UNIFIED IDEOGRAPH
+ {0xF05A, 0x7909}, //11960 #CJK UNIFIED IDEOGRAPH
+ {0xF05B, 0x7910}, //11961 #CJK UNIFIED IDEOGRAPH
+ {0xF05C, 0x7912}, //11962 #CJK UNIFIED IDEOGRAPH
+ {0xF05D, 0x7911}, //11963 #CJK UNIFIED IDEOGRAPH
+ {0xF05E, 0x79AD}, //11964 #CJK UNIFIED IDEOGRAPH
+ {0xF05F, 0x79AC}, //11965 #CJK UNIFIED IDEOGRAPH
+ {0xF060, 0x7A5F}, //11966 #CJK UNIFIED IDEOGRAPH
+ {0xF061, 0x7C1C}, //11967 #CJK UNIFIED IDEOGRAPH
+ {0xF062, 0x7C29}, //11968 #CJK UNIFIED IDEOGRAPH
+ {0xF063, 0x7C19}, //11969 #CJK UNIFIED IDEOGRAPH
+ {0xF064, 0x7C20}, //11970 #CJK UNIFIED IDEOGRAPH
+ {0xF065, 0x7C1F}, //11971 #CJK UNIFIED IDEOGRAPH
+ {0xF066, 0x7C2D}, //11972 #CJK UNIFIED IDEOGRAPH
+ {0xF067, 0x7C1D}, //11973 #CJK UNIFIED IDEOGRAPH
+ {0xF068, 0x7C26}, //11974 #CJK UNIFIED IDEOGRAPH
+ {0xF069, 0x7C28}, //11975 #CJK UNIFIED IDEOGRAPH
+ {0xF06A, 0x7C22}, //11976 #CJK UNIFIED IDEOGRAPH
+ {0xF06B, 0x7C25}, //11977 #CJK UNIFIED IDEOGRAPH
+ {0xF06C, 0x7C30}, //11978 #CJK UNIFIED IDEOGRAPH
+ {0xF06D, 0x7E5C}, //11979 #CJK UNIFIED IDEOGRAPH
+ {0xF06E, 0x7E50}, //11980 #CJK UNIFIED IDEOGRAPH
+ {0xF06F, 0x7E56}, //11981 #CJK UNIFIED IDEOGRAPH
+ {0xF070, 0x7E63}, //11982 #CJK UNIFIED IDEOGRAPH
+ {0xF071, 0x7E58}, //11983 #CJK UNIFIED IDEOGRAPH
+ {0xF072, 0x7E62}, //11984 #CJK UNIFIED IDEOGRAPH
+ {0xF073, 0x7E5F}, //11985 #CJK UNIFIED IDEOGRAPH
+ {0xF074, 0x7E51}, //11986 #CJK UNIFIED IDEOGRAPH
+ {0xF075, 0x7E60}, //11987 #CJK UNIFIED IDEOGRAPH
+ {0xF076, 0x7E57}, //11988 #CJK UNIFIED IDEOGRAPH
+ {0xF077, 0x7E53}, //11989 #CJK UNIFIED IDEOGRAPH
+ {0xF078, 0x7FB5}, //11990 #CJK UNIFIED IDEOGRAPH
+ {0xF079, 0x7FB3}, //11991 #CJK UNIFIED IDEOGRAPH
+ {0xF07A, 0x7FF7}, //11992 #CJK UNIFIED IDEOGRAPH
+ {0xF07B, 0x7FF8}, //11993 #CJK UNIFIED IDEOGRAPH
+ {0xF07C, 0x8075}, //11994 #CJK UNIFIED IDEOGRAPH
+ {0xF07D, 0x81D1}, //11995 #CJK UNIFIED IDEOGRAPH
+ {0xF07E, 0x81D2}, //11996 #CJK UNIFIED IDEOGRAPH
+ {0xF0A1, 0x81D0}, //11997 #CJK UNIFIED IDEOGRAPH
+ {0xF0A2, 0x825F}, //11998 #CJK UNIFIED IDEOGRAPH
+ {0xF0A3, 0x825E}, //11999 #CJK UNIFIED IDEOGRAPH
+ {0xF0A4, 0x85B4}, //12000 #CJK UNIFIED IDEOGRAPH
+ {0xF0A5, 0x85C6}, //12001 #CJK UNIFIED IDEOGRAPH
+ {0xF0A6, 0x85C0}, //12002 #CJK UNIFIED IDEOGRAPH
+ {0xF0A7, 0x85C3}, //12003 #CJK UNIFIED IDEOGRAPH
+ {0xF0A8, 0x85C2}, //12004 #CJK UNIFIED IDEOGRAPH
+ {0xF0A9, 0x85B3}, //12005 #CJK UNIFIED IDEOGRAPH
+ {0xF0AA, 0x85B5}, //12006 #CJK UNIFIED IDEOGRAPH
+ {0xF0AB, 0x85BD}, //12007 #CJK UNIFIED IDEOGRAPH
+ {0xF0AC, 0x85C7}, //12008 #CJK UNIFIED IDEOGRAPH
+ {0xF0AD, 0x85C4}, //12009 #CJK UNIFIED IDEOGRAPH
+ {0xF0AE, 0x85BF}, //12010 #CJK UNIFIED IDEOGRAPH
+ {0xF0AF, 0x85CB}, //12011 #CJK UNIFIED IDEOGRAPH
+ {0xF0B0, 0x85CE}, //12012 #CJK UNIFIED IDEOGRAPH
+ {0xF0B1, 0x85C8}, //12013 #CJK UNIFIED IDEOGRAPH
+ {0xF0B2, 0x85C5}, //12014 #CJK UNIFIED IDEOGRAPH
+ {0xF0B3, 0x85B1}, //12015 #CJK UNIFIED IDEOGRAPH
+ {0xF0B4, 0x85B6}, //12016 #CJK UNIFIED IDEOGRAPH
+ {0xF0B5, 0x85D2}, //12017 #CJK UNIFIED IDEOGRAPH
+ {0xF0B6, 0x8624}, //12018 #CJK UNIFIED IDEOGRAPH
+ {0xF0B7, 0x85B8}, //12019 #CJK UNIFIED IDEOGRAPH
+ {0xF0B8, 0x85B7}, //12020 #CJK UNIFIED IDEOGRAPH
+ {0xF0B9, 0x85BE}, //12021 #CJK UNIFIED IDEOGRAPH
+ {0xF0BA, 0x8669}, //12022 #CJK UNIFIED IDEOGRAPH
+ {0xF0BB, 0x87E7}, //12023 #CJK UNIFIED IDEOGRAPH
+ {0xF0BC, 0x87E6}, //12024 #CJK UNIFIED IDEOGRAPH
+ {0xF0BD, 0x87E2}, //12025 #CJK UNIFIED IDEOGRAPH
+ {0xF0BE, 0x87DB}, //12026 #CJK UNIFIED IDEOGRAPH
+ {0xF0BF, 0x87EB}, //12027 #CJK UNIFIED IDEOGRAPH
+ {0xF0C0, 0x87EA}, //12028 #CJK UNIFIED IDEOGRAPH
+ {0xF0C1, 0x87E5}, //12029 #CJK UNIFIED IDEOGRAPH
+ {0xF0C2, 0x87DF}, //12030 #CJK UNIFIED IDEOGRAPH
+ {0xF0C3, 0x87F3}, //12031 #CJK UNIFIED IDEOGRAPH
+ {0xF0C4, 0x87E4}, //12032 #CJK UNIFIED IDEOGRAPH
+ {0xF0C5, 0x87D4}, //12033 #CJK UNIFIED IDEOGRAPH
+ {0xF0C6, 0x87DC}, //12034 #CJK UNIFIED IDEOGRAPH
+ {0xF0C7, 0x87D3}, //12035 #CJK UNIFIED IDEOGRAPH
+ {0xF0C8, 0x87ED}, //12036 #CJK UNIFIED IDEOGRAPH
+ {0xF0C9, 0x87D8}, //12037 #CJK UNIFIED IDEOGRAPH
+ {0xF0CA, 0x87E3}, //12038 #CJK UNIFIED IDEOGRAPH
+ {0xF0CB, 0x87A4}, //12039 #CJK UNIFIED IDEOGRAPH
+ {0xF0CC, 0x87D7}, //12040 #CJK UNIFIED IDEOGRAPH
+ {0xF0CD, 0x87D9}, //12041 #CJK UNIFIED IDEOGRAPH
+ {0xF0CE, 0x8801}, //12042 #CJK UNIFIED IDEOGRAPH
+ {0xF0CF, 0x87F4}, //12043 #CJK UNIFIED IDEOGRAPH
+ {0xF0D0, 0x87E8}, //12044 #CJK UNIFIED IDEOGRAPH
+ {0xF0D1, 0x87DD}, //12045 #CJK UNIFIED IDEOGRAPH
+ {0xF0D2, 0x8953}, //12046 #CJK UNIFIED IDEOGRAPH
+ {0xF0D3, 0x894B}, //12047 #CJK UNIFIED IDEOGRAPH
+ {0xF0D4, 0x894F}, //12048 #CJK UNIFIED IDEOGRAPH
+ {0xF0D5, 0x894C}, //12049 #CJK UNIFIED IDEOGRAPH
+ {0xF0D6, 0x8946}, //12050 #CJK UNIFIED IDEOGRAPH
+ {0xF0D7, 0x8950}, //12051 #CJK UNIFIED IDEOGRAPH
+ {0xF0D8, 0x8951}, //12052 #CJK UNIFIED IDEOGRAPH
+ {0xF0D9, 0x8949}, //12053 #CJK UNIFIED IDEOGRAPH
+ {0xF0DA, 0x8B2A}, //12054 #CJK UNIFIED IDEOGRAPH
+ {0xF0DB, 0x8B27}, //12055 #CJK UNIFIED IDEOGRAPH
+ {0xF0DC, 0x8B23}, //12056 #CJK UNIFIED IDEOGRAPH
+ {0xF0DD, 0x8B33}, //12057 #CJK UNIFIED IDEOGRAPH
+ {0xF0DE, 0x8B30}, //12058 #CJK UNIFIED IDEOGRAPH
+ {0xF0DF, 0x8B35}, //12059 #CJK UNIFIED IDEOGRAPH
+ {0xF0E0, 0x8B47}, //12060 #CJK UNIFIED IDEOGRAPH
+ {0xF0E1, 0x8B2F}, //12061 #CJK UNIFIED IDEOGRAPH
+ {0xF0E2, 0x8B3C}, //12062 #CJK UNIFIED IDEOGRAPH
+ {0xF0E3, 0x8B3E}, //12063 #CJK UNIFIED IDEOGRAPH
+ {0xF0E4, 0x8B31}, //12064 #CJK UNIFIED IDEOGRAPH
+ {0xF0E5, 0x8B25}, //12065 #CJK UNIFIED IDEOGRAPH
+ {0xF0E6, 0x8B37}, //12066 #CJK UNIFIED IDEOGRAPH
+ {0xF0E7, 0x8B26}, //12067 #CJK UNIFIED IDEOGRAPH
+ {0xF0E8, 0x8B36}, //12068 #CJK UNIFIED IDEOGRAPH
+ {0xF0E9, 0x8B2E}, //12069 #CJK UNIFIED IDEOGRAPH
+ {0xF0EA, 0x8B24}, //12070 #CJK UNIFIED IDEOGRAPH
+ {0xF0EB, 0x8B3B}, //12071 #CJK UNIFIED IDEOGRAPH
+ {0xF0EC, 0x8B3D}, //12072 #CJK UNIFIED IDEOGRAPH
+ {0xF0ED, 0x8B3A}, //12073 #CJK UNIFIED IDEOGRAPH
+ {0xF0EE, 0x8C42}, //12074 #CJK UNIFIED IDEOGRAPH
+ {0xF0EF, 0x8C75}, //12075 #CJK UNIFIED IDEOGRAPH
+ {0xF0F0, 0x8C99}, //12076 #CJK UNIFIED IDEOGRAPH
+ {0xF0F1, 0x8C98}, //12077 #CJK UNIFIED IDEOGRAPH
+ {0xF0F2, 0x8C97}, //12078 #CJK UNIFIED IDEOGRAPH
+ {0xF0F3, 0x8CFE}, //12079 #CJK UNIFIED IDEOGRAPH
+ {0xF0F4, 0x8D04}, //12080 #CJK UNIFIED IDEOGRAPH
+ {0xF0F5, 0x8D02}, //12081 #CJK UNIFIED IDEOGRAPH
+ {0xF0F6, 0x8D00}, //12082 #CJK UNIFIED IDEOGRAPH
+ {0xF0F7, 0x8E5C}, //12083 #CJK UNIFIED IDEOGRAPH
+ {0xF0F8, 0x8E62}, //12084 #CJK UNIFIED IDEOGRAPH
+ {0xF0F9, 0x8E60}, //12085 #CJK UNIFIED IDEOGRAPH
+ {0xF0FA, 0x8E57}, //12086 #CJK UNIFIED IDEOGRAPH
+ {0xF0FB, 0x8E56}, //12087 #CJK UNIFIED IDEOGRAPH
+ {0xF0FC, 0x8E5E}, //12088 #CJK UNIFIED IDEOGRAPH
+ {0xF0FD, 0x8E65}, //12089 #CJK UNIFIED IDEOGRAPH
+ {0xF0FE, 0x8E67}, //12090 #CJK UNIFIED IDEOGRAPH
+ {0xF140, 0x8E5B}, //12091 #CJK UNIFIED IDEOGRAPH
+ {0xF141, 0x8E5A}, //12092 #CJK UNIFIED IDEOGRAPH
+ {0xF142, 0x8E61}, //12093 #CJK UNIFIED IDEOGRAPH
+ {0xF143, 0x8E5D}, //12094 #CJK UNIFIED IDEOGRAPH
+ {0xF144, 0x8E69}, //12095 #CJK UNIFIED IDEOGRAPH
+ {0xF145, 0x8E54}, //12096 #CJK UNIFIED IDEOGRAPH
+ {0xF146, 0x8F46}, //12097 #CJK UNIFIED IDEOGRAPH
+ {0xF147, 0x8F47}, //12098 #CJK UNIFIED IDEOGRAPH
+ {0xF148, 0x8F48}, //12099 #CJK UNIFIED IDEOGRAPH
+ {0xF149, 0x8F4B}, //12100 #CJK UNIFIED IDEOGRAPH
+ {0xF14A, 0x9128}, //12101 #CJK UNIFIED IDEOGRAPH
+ {0xF14B, 0x913A}, //12102 #CJK UNIFIED IDEOGRAPH
+ {0xF14C, 0x913B}, //12103 #CJK UNIFIED IDEOGRAPH
+ {0xF14D, 0x913E}, //12104 #CJK UNIFIED IDEOGRAPH
+ {0xF14E, 0x91A8}, //12105 #CJK UNIFIED IDEOGRAPH
+ {0xF14F, 0x91A5}, //12106 #CJK UNIFIED IDEOGRAPH
+ {0xF150, 0x91A7}, //12107 #CJK UNIFIED IDEOGRAPH
+ {0xF151, 0x91AF}, //12108 #CJK UNIFIED IDEOGRAPH
+ {0xF152, 0x91AA}, //12109 #CJK UNIFIED IDEOGRAPH
+ {0xF153, 0x93B5}, //12110 #CJK UNIFIED IDEOGRAPH
+ {0xF154, 0x938C}, //12111 #CJK UNIFIED IDEOGRAPH
+ {0xF155, 0x9392}, //12112 #CJK UNIFIED IDEOGRAPH
+ {0xF156, 0x93B7}, //12113 #CJK UNIFIED IDEOGRAPH
+ {0xF157, 0x939B}, //12114 #CJK UNIFIED IDEOGRAPH
+ {0xF158, 0x939D}, //12115 #CJK UNIFIED IDEOGRAPH
+ {0xF159, 0x9389}, //12116 #CJK UNIFIED IDEOGRAPH
+ {0xF15A, 0x93A7}, //12117 #CJK UNIFIED IDEOGRAPH
+ {0xF15B, 0x938E}, //12118 #CJK UNIFIED IDEOGRAPH
+ {0xF15C, 0x93AA}, //12119 #CJK UNIFIED IDEOGRAPH
+ {0xF15D, 0x939E}, //12120 #CJK UNIFIED IDEOGRAPH
+ {0xF15E, 0x93A6}, //12121 #CJK UNIFIED IDEOGRAPH
+ {0xF15F, 0x9395}, //12122 #CJK UNIFIED IDEOGRAPH
+ {0xF160, 0x9388}, //12123 #CJK UNIFIED IDEOGRAPH
+ {0xF161, 0x9399}, //12124 #CJK UNIFIED IDEOGRAPH
+ {0xF162, 0x939F}, //12125 #CJK UNIFIED IDEOGRAPH
+ {0xF163, 0x938D}, //12126 #CJK UNIFIED IDEOGRAPH
+ {0xF164, 0x93B1}, //12127 #CJK UNIFIED IDEOGRAPH
+ {0xF165, 0x9391}, //12128 #CJK UNIFIED IDEOGRAPH
+ {0xF166, 0x93B2}, //12129 #CJK UNIFIED IDEOGRAPH
+ {0xF167, 0x93A4}, //12130 #CJK UNIFIED IDEOGRAPH
+ {0xF168, 0x93A8}, //12131 #CJK UNIFIED IDEOGRAPH
+ {0xF169, 0x93B4}, //12132 #CJK UNIFIED IDEOGRAPH
+ {0xF16A, 0x93A3}, //12133 #CJK UNIFIED IDEOGRAPH
+ {0xF16B, 0x93A5}, //12134 #CJK UNIFIED IDEOGRAPH
+ {0xF16C, 0x95D2}, //12135 #CJK UNIFIED IDEOGRAPH
+ {0xF16D, 0x95D3}, //12136 #CJK UNIFIED IDEOGRAPH
+ {0xF16E, 0x95D1}, //12137 #CJK UNIFIED IDEOGRAPH
+ {0xF16F, 0x96B3}, //12138 #CJK UNIFIED IDEOGRAPH
+ {0xF170, 0x96D7}, //12139 #CJK UNIFIED IDEOGRAPH
+ {0xF171, 0x96DA}, //12140 #CJK UNIFIED IDEOGRAPH
+ {0xF172, 0x5DC2}, //12141 #CJK UNIFIED IDEOGRAPH
+ {0xF173, 0x96DF}, //12142 #CJK UNIFIED IDEOGRAPH
+ {0xF174, 0x96D8}, //12143 #CJK UNIFIED IDEOGRAPH
+ {0xF175, 0x96DD}, //12144 #CJK UNIFIED IDEOGRAPH
+ {0xF176, 0x9723}, //12145 #CJK UNIFIED IDEOGRAPH
+ {0xF177, 0x9722}, //12146 #CJK UNIFIED IDEOGRAPH
+ {0xF178, 0x9725}, //12147 #CJK UNIFIED IDEOGRAPH
+ {0xF179, 0x97AC}, //12148 #CJK UNIFIED IDEOGRAPH
+ {0xF17A, 0x97AE}, //12149 #CJK UNIFIED IDEOGRAPH
+ {0xF17B, 0x97A8}, //12150 #CJK UNIFIED IDEOGRAPH
+ {0xF17C, 0x97AB}, //12151 #CJK UNIFIED IDEOGRAPH
+ {0xF17D, 0x97A4}, //12152 #CJK UNIFIED IDEOGRAPH
+ {0xF17E, 0x97AA}, //12153 #CJK UNIFIED IDEOGRAPH
+ {0xF1A1, 0x97A2}, //12154 #CJK UNIFIED IDEOGRAPH
+ {0xF1A2, 0x97A5}, //12155 #CJK UNIFIED IDEOGRAPH
+ {0xF1A3, 0x97D7}, //12156 #CJK UNIFIED IDEOGRAPH
+ {0xF1A4, 0x97D9}, //12157 #CJK UNIFIED IDEOGRAPH
+ {0xF1A5, 0x97D6}, //12158 #CJK UNIFIED IDEOGRAPH
+ {0xF1A6, 0x97D8}, //12159 #CJK UNIFIED IDEOGRAPH
+ {0xF1A7, 0x97FA}, //12160 #CJK UNIFIED IDEOGRAPH
+ {0xF1A8, 0x9850}, //12161 #CJK UNIFIED IDEOGRAPH
+ {0xF1A9, 0x9851}, //12162 #CJK UNIFIED IDEOGRAPH
+ {0xF1AA, 0x9852}, //12163 #CJK UNIFIED IDEOGRAPH
+ {0xF1AB, 0x98B8}, //12164 #CJK UNIFIED IDEOGRAPH
+ {0xF1AC, 0x9941}, //12165 #CJK UNIFIED IDEOGRAPH
+ {0xF1AD, 0x993C}, //12166 #CJK UNIFIED IDEOGRAPH
+ {0xF1AE, 0x993A}, //12167 #CJK UNIFIED IDEOGRAPH
+ {0xF1AF, 0x9A0F}, //12168 #CJK UNIFIED IDEOGRAPH
+ {0xF1B0, 0x9A0B}, //12169 #CJK UNIFIED IDEOGRAPH
+ {0xF1B1, 0x9A09}, //12170 #CJK UNIFIED IDEOGRAPH
+ {0xF1B2, 0x9A0D}, //12171 #CJK UNIFIED IDEOGRAPH
+ {0xF1B3, 0x9A04}, //12172 #CJK UNIFIED IDEOGRAPH
+ {0xF1B4, 0x9A11}, //12173 #CJK UNIFIED IDEOGRAPH
+ {0xF1B5, 0x9A0A}, //12174 #CJK UNIFIED IDEOGRAPH
+ {0xF1B6, 0x9A05}, //12175 #CJK UNIFIED IDEOGRAPH
+ {0xF1B7, 0x9A07}, //12176 #CJK UNIFIED IDEOGRAPH
+ {0xF1B8, 0x9A06}, //12177 #CJK UNIFIED IDEOGRAPH
+ {0xF1B9, 0x9AC0}, //12178 #CJK UNIFIED IDEOGRAPH
+ {0xF1BA, 0x9ADC}, //12179 #CJK UNIFIED IDEOGRAPH
+ {0xF1BB, 0x9B08}, //12180 #CJK UNIFIED IDEOGRAPH
+ {0xF1BC, 0x9B04}, //12181 #CJK UNIFIED IDEOGRAPH
+ {0xF1BD, 0x9B05}, //12182 #CJK UNIFIED IDEOGRAPH
+ {0xF1BE, 0x9B29}, //12183 #CJK UNIFIED IDEOGRAPH
+ {0xF1BF, 0x9B35}, //12184 #CJK UNIFIED IDEOGRAPH
+ {0xF1C0, 0x9B4A}, //12185 #CJK UNIFIED IDEOGRAPH
+ {0xF1C1, 0x9B4C}, //12186 #CJK UNIFIED IDEOGRAPH
+ {0xF1C2, 0x9B4B}, //12187 #CJK UNIFIED IDEOGRAPH
+ {0xF1C3, 0x9BC7}, //12188 #CJK UNIFIED IDEOGRAPH
+ {0xF1C4, 0x9BC6}, //12189 #CJK UNIFIED IDEOGRAPH
+ {0xF1C5, 0x9BC3}, //12190 #CJK UNIFIED IDEOGRAPH
+ {0xF1C6, 0x9BBF}, //12191 #CJK UNIFIED IDEOGRAPH
+ {0xF1C7, 0x9BC1}, //12192 #CJK UNIFIED IDEOGRAPH
+ {0xF1C8, 0x9BB5}, //12193 #CJK UNIFIED IDEOGRAPH
+ {0xF1C9, 0x9BB8}, //12194 #CJK UNIFIED IDEOGRAPH
+ {0xF1CA, 0x9BD3}, //12195 #CJK UNIFIED IDEOGRAPH
+ {0xF1CB, 0x9BB6}, //12196 #CJK UNIFIED IDEOGRAPH
+ {0xF1CC, 0x9BC4}, //12197 #CJK UNIFIED IDEOGRAPH
+ {0xF1CD, 0x9BB9}, //12198 #CJK UNIFIED IDEOGRAPH
+ {0xF1CE, 0x9BBD}, //12199 #CJK UNIFIED IDEOGRAPH
+ {0xF1CF, 0x9D5C}, //12200 #CJK UNIFIED IDEOGRAPH
+ {0xF1D0, 0x9D53}, //12201 #CJK UNIFIED IDEOGRAPH
+ {0xF1D1, 0x9D4F}, //12202 #CJK UNIFIED IDEOGRAPH
+ {0xF1D2, 0x9D4A}, //12203 #CJK UNIFIED IDEOGRAPH
+ {0xF1D3, 0x9D5B}, //12204 #CJK UNIFIED IDEOGRAPH
+ {0xF1D4, 0x9D4B}, //12205 #CJK UNIFIED IDEOGRAPH
+ {0xF1D5, 0x9D59}, //12206 #CJK UNIFIED IDEOGRAPH
+ {0xF1D6, 0x9D56}, //12207 #CJK UNIFIED IDEOGRAPH
+ {0xF1D7, 0x9D4C}, //12208 #CJK UNIFIED IDEOGRAPH
+ {0xF1D8, 0x9D57}, //12209 #CJK UNIFIED IDEOGRAPH
+ {0xF1D9, 0x9D52}, //12210 #CJK UNIFIED IDEOGRAPH
+ {0xF1DA, 0x9D54}, //12211 #CJK UNIFIED IDEOGRAPH
+ {0xF1DB, 0x9D5F}, //12212 #CJK UNIFIED IDEOGRAPH
+ {0xF1DC, 0x9D58}, //12213 #CJK UNIFIED IDEOGRAPH
+ {0xF1DD, 0x9D5A}, //12214 #CJK UNIFIED IDEOGRAPH
+ {0xF1DE, 0x9E8E}, //12215 #CJK UNIFIED IDEOGRAPH
+ {0xF1DF, 0x9E8C}, //12216 #CJK UNIFIED IDEOGRAPH
+ {0xF1E0, 0x9EDF}, //12217 #CJK UNIFIED IDEOGRAPH
+ {0xF1E1, 0x9F01}, //12218 #CJK UNIFIED IDEOGRAPH
+ {0xF1E2, 0x9F00}, //12219 #CJK UNIFIED IDEOGRAPH
+ {0xF1E3, 0x9F16}, //12220 #CJK UNIFIED IDEOGRAPH
+ {0xF1E4, 0x9F25}, //12221 #CJK UNIFIED IDEOGRAPH
+ {0xF1E5, 0x9F2B}, //12222 #CJK UNIFIED IDEOGRAPH
+ {0xF1E6, 0x9F2A}, //12223 #CJK UNIFIED IDEOGRAPH
+ {0xF1E7, 0x9F29}, //12224 #CJK UNIFIED IDEOGRAPH
+ {0xF1E8, 0x9F28}, //12225 #CJK UNIFIED IDEOGRAPH
+ {0xF1E9, 0x9F4C}, //12226 #CJK UNIFIED IDEOGRAPH
+ {0xF1EA, 0x9F55}, //12227 #CJK UNIFIED IDEOGRAPH
+ {0xF1EB, 0x5134}, //12228 #CJK UNIFIED IDEOGRAPH
+ {0xF1EC, 0x5135}, //12229 #CJK UNIFIED IDEOGRAPH
+ {0xF1ED, 0x5296}, //12230 #CJK UNIFIED IDEOGRAPH
+ {0xF1EE, 0x52F7}, //12231 #CJK UNIFIED IDEOGRAPH
+ {0xF1EF, 0x53B4}, //12232 #CJK UNIFIED IDEOGRAPH
+ {0xF1F0, 0x56AB}, //12233 #CJK UNIFIED IDEOGRAPH
+ {0xF1F1, 0x56AD}, //12234 #CJK UNIFIED IDEOGRAPH
+ {0xF1F2, 0x56A6}, //12235 #CJK UNIFIED IDEOGRAPH
+ {0xF1F3, 0x56A7}, //12236 #CJK UNIFIED IDEOGRAPH
+ {0xF1F4, 0x56AA}, //12237 #CJK UNIFIED IDEOGRAPH
+ {0xF1F5, 0x56AC}, //12238 #CJK UNIFIED IDEOGRAPH
+ {0xF1F6, 0x58DA}, //12239 #CJK UNIFIED IDEOGRAPH
+ {0xF1F7, 0x58DD}, //12240 #CJK UNIFIED IDEOGRAPH
+ {0xF1F8, 0x58DB}, //12241 #CJK UNIFIED IDEOGRAPH
+ {0xF1F9, 0x5912}, //12242 #CJK UNIFIED IDEOGRAPH
+ {0xF1FA, 0x5B3D}, //12243 #CJK UNIFIED IDEOGRAPH
+ {0xF1FB, 0x5B3E}, //12244 #CJK UNIFIED IDEOGRAPH
+ {0xF1FC, 0x5B3F}, //12245 #CJK UNIFIED IDEOGRAPH
+ {0xF1FD, 0x5DC3}, //12246 #CJK UNIFIED IDEOGRAPH
+ {0xF1FE, 0x5E70}, //12247 #CJK UNIFIED IDEOGRAPH
+ {0xF240, 0x5FBF}, //12248 #CJK UNIFIED IDEOGRAPH
+ {0xF241, 0x61FB}, //12249 #CJK UNIFIED IDEOGRAPH
+ {0xF242, 0x6507}, //12250 #CJK UNIFIED IDEOGRAPH
+ {0xF243, 0x6510}, //12251 #CJK UNIFIED IDEOGRAPH
+ {0xF244, 0x650D}, //12252 #CJK UNIFIED IDEOGRAPH
+ {0xF245, 0x6509}, //12253 #CJK UNIFIED IDEOGRAPH
+ {0xF246, 0x650C}, //12254 #CJK UNIFIED IDEOGRAPH
+ {0xF247, 0x650E}, //12255 #CJK UNIFIED IDEOGRAPH
+ {0xF248, 0x6584}, //12256 #CJK UNIFIED IDEOGRAPH
+ {0xF249, 0x65DE}, //12257 #CJK UNIFIED IDEOGRAPH
+ {0xF24A, 0x65DD}, //12258 #CJK UNIFIED IDEOGRAPH
+ {0xF24B, 0x66DE}, //12259 #CJK UNIFIED IDEOGRAPH
+ {0xF24C, 0x6AE7}, //12260 #CJK UNIFIED IDEOGRAPH
+ {0xF24D, 0x6AE0}, //12261 #CJK UNIFIED IDEOGRAPH
+ {0xF24E, 0x6ACC}, //12262 #CJK UNIFIED IDEOGRAPH
+ {0xF24F, 0x6AD1}, //12263 #CJK UNIFIED IDEOGRAPH
+ {0xF250, 0x6AD9}, //12264 #CJK UNIFIED IDEOGRAPH
+ {0xF251, 0x6ACB}, //12265 #CJK UNIFIED IDEOGRAPH
+ {0xF252, 0x6ADF}, //12266 #CJK UNIFIED IDEOGRAPH
+ {0xF253, 0x6ADC}, //12267 #CJK UNIFIED IDEOGRAPH
+ {0xF254, 0x6AD0}, //12268 #CJK UNIFIED IDEOGRAPH
+ {0xF255, 0x6AEB}, //12269 #CJK UNIFIED IDEOGRAPH
+ {0xF256, 0x6ACF}, //12270 #CJK UNIFIED IDEOGRAPH
+ {0xF257, 0x6ACD}, //12271 #CJK UNIFIED IDEOGRAPH
+ {0xF258, 0x6ADE}, //12272 #CJK UNIFIED IDEOGRAPH
+ {0xF259, 0x6B60}, //12273 #CJK UNIFIED IDEOGRAPH
+ {0xF25A, 0x6BB0}, //12274 #CJK UNIFIED IDEOGRAPH
+ {0xF25B, 0x6C0C}, //12275 #CJK UNIFIED IDEOGRAPH
+ {0xF25C, 0x7019}, //12276 #CJK UNIFIED IDEOGRAPH
+ {0xF25D, 0x7027}, //12277 #CJK UNIFIED IDEOGRAPH
+ {0xF25E, 0x7020}, //12278 #CJK UNIFIED IDEOGRAPH
+ {0xF25F, 0x7016}, //12279 #CJK UNIFIED IDEOGRAPH
+ {0xF260, 0x702B}, //12280 #CJK UNIFIED IDEOGRAPH
+ {0xF261, 0x7021}, //12281 #CJK UNIFIED IDEOGRAPH
+ {0xF262, 0x7022}, //12282 #CJK UNIFIED IDEOGRAPH
+ {0xF263, 0x7023}, //12283 #CJK UNIFIED IDEOGRAPH
+ {0xF264, 0x7029}, //12284 #CJK UNIFIED IDEOGRAPH
+ {0xF265, 0x7017}, //12285 #CJK UNIFIED IDEOGRAPH
+ {0xF266, 0x7024}, //12286 #CJK UNIFIED IDEOGRAPH
+ {0xF267, 0x701C}, //12287 #CJK UNIFIED IDEOGRAPH
+ {0xF268, 0x702A}, //12288 #CJK UNIFIED IDEOGRAPH
+ {0xF269, 0x720C}, //12289 #CJK UNIFIED IDEOGRAPH
+ {0xF26A, 0x720A}, //12290 #CJK UNIFIED IDEOGRAPH
+ {0xF26B, 0x7207}, //12291 #CJK UNIFIED IDEOGRAPH
+ {0xF26C, 0x7202}, //12292 #CJK UNIFIED IDEOGRAPH
+ {0xF26D, 0x7205}, //12293 #CJK UNIFIED IDEOGRAPH
+ {0xF26E, 0x72A5}, //12294 #CJK UNIFIED IDEOGRAPH
+ {0xF26F, 0x72A6}, //12295 #CJK UNIFIED IDEOGRAPH
+ {0xF270, 0x72A4}, //12296 #CJK UNIFIED IDEOGRAPH
+ {0xF271, 0x72A3}, //12297 #CJK UNIFIED IDEOGRAPH
+ {0xF272, 0x72A1}, //12298 #CJK UNIFIED IDEOGRAPH
+ {0xF273, 0x74CB}, //12299 #CJK UNIFIED IDEOGRAPH
+ {0xF274, 0x74C5}, //12300 #CJK UNIFIED IDEOGRAPH
+ {0xF275, 0x74B7}, //12301 #CJK UNIFIED IDEOGRAPH
+ {0xF276, 0x74C3}, //12302 #CJK UNIFIED IDEOGRAPH
+ {0xF277, 0x7516}, //12303 #CJK UNIFIED IDEOGRAPH
+ {0xF278, 0x7660}, //12304 #CJK UNIFIED IDEOGRAPH
+ {0xF279, 0x77C9}, //12305 #CJK UNIFIED IDEOGRAPH
+ {0xF27A, 0x77CA}, //12306 #CJK UNIFIED IDEOGRAPH
+ {0xF27B, 0x77C4}, //12307 #CJK UNIFIED IDEOGRAPH
+ {0xF27C, 0x77F1}, //12308 #CJK UNIFIED IDEOGRAPH
+ {0xF27D, 0x791D}, //12309 #CJK UNIFIED IDEOGRAPH
+ {0xF27E, 0x791B}, //12310 #CJK UNIFIED IDEOGRAPH
+ {0xF2A1, 0x7921}, //12311 #CJK UNIFIED IDEOGRAPH
+ {0xF2A2, 0x791C}, //12312 #CJK UNIFIED IDEOGRAPH
+ {0xF2A3, 0x7917}, //12313 #CJK UNIFIED IDEOGRAPH
+ {0xF2A4, 0x791E}, //12314 #CJK UNIFIED IDEOGRAPH
+ {0xF2A5, 0x79B0}, //12315 #CJK UNIFIED IDEOGRAPH
+ {0xF2A6, 0x7A67}, //12316 #CJK UNIFIED IDEOGRAPH
+ {0xF2A7, 0x7A68}, //12317 #CJK UNIFIED IDEOGRAPH
+ {0xF2A8, 0x7C33}, //12318 #CJK UNIFIED IDEOGRAPH
+ {0xF2A9, 0x7C3C}, //12319 #CJK UNIFIED IDEOGRAPH
+ {0xF2AA, 0x7C39}, //12320 #CJK UNIFIED IDEOGRAPH
+ {0xF2AB, 0x7C2C}, //12321 #CJK UNIFIED IDEOGRAPH
+ {0xF2AC, 0x7C3B}, //12322 #CJK UNIFIED IDEOGRAPH
+ {0xF2AD, 0x7CEC}, //12323 #CJK UNIFIED IDEOGRAPH
+ {0xF2AE, 0x7CEA}, //12324 #CJK UNIFIED IDEOGRAPH
+ {0xF2AF, 0x7E76}, //12325 #CJK UNIFIED IDEOGRAPH
+ {0xF2B0, 0x7E75}, //12326 #CJK UNIFIED IDEOGRAPH
+ {0xF2B1, 0x7E78}, //12327 #CJK UNIFIED IDEOGRAPH
+ {0xF2B2, 0x7E70}, //12328 #CJK UNIFIED IDEOGRAPH
+ {0xF2B3, 0x7E77}, //12329 #CJK UNIFIED IDEOGRAPH
+ {0xF2B4, 0x7E6F}, //12330 #CJK UNIFIED IDEOGRAPH
+ {0xF2B5, 0x7E7A}, //12331 #CJK UNIFIED IDEOGRAPH
+ {0xF2B6, 0x7E72}, //12332 #CJK UNIFIED IDEOGRAPH
+ {0xF2B7, 0x7E74}, //12333 #CJK UNIFIED IDEOGRAPH
+ {0xF2B8, 0x7E68}, //12334 #CJK UNIFIED IDEOGRAPH
+ {0xF2B9, 0x7F4B}, //12335 #CJK UNIFIED IDEOGRAPH
+ {0xF2BA, 0x7F4A}, //12336 #CJK UNIFIED IDEOGRAPH
+ {0xF2BB, 0x7F83}, //12337 #CJK UNIFIED IDEOGRAPH
+ {0xF2BC, 0x7F86}, //12338 #CJK UNIFIED IDEOGRAPH
+ {0xF2BD, 0x7FB7}, //12339 #CJK UNIFIED IDEOGRAPH
+ {0xF2BE, 0x7FFD}, //12340 #CJK UNIFIED IDEOGRAPH
+ {0xF2BF, 0x7FFE}, //12341 #CJK UNIFIED IDEOGRAPH
+ {0xF2C0, 0x8078}, //12342 #CJK UNIFIED IDEOGRAPH
+ {0xF2C1, 0x81D7}, //12343 #CJK UNIFIED IDEOGRAPH
+ {0xF2C2, 0x81D5}, //12344 #CJK UNIFIED IDEOGRAPH
+ {0xF2C3, 0x8264}, //12345 #CJK UNIFIED IDEOGRAPH
+ {0xF2C4, 0x8261}, //12346 #CJK UNIFIED IDEOGRAPH
+ {0xF2C5, 0x8263}, //12347 #CJK UNIFIED IDEOGRAPH
+ {0xF2C6, 0x85EB}, //12348 #CJK UNIFIED IDEOGRAPH
+ {0xF2C7, 0x85F1}, //12349 #CJK UNIFIED IDEOGRAPH
+ {0xF2C8, 0x85ED}, //12350 #CJK UNIFIED IDEOGRAPH
+ {0xF2C9, 0x85D9}, //12351 #CJK UNIFIED IDEOGRAPH
+ {0xF2CA, 0x85E1}, //12352 #CJK UNIFIED IDEOGRAPH
+ {0xF2CB, 0x85E8}, //12353 #CJK UNIFIED IDEOGRAPH
+ {0xF2CC, 0x85DA}, //12354 #CJK UNIFIED IDEOGRAPH
+ {0xF2CD, 0x85D7}, //12355 #CJK UNIFIED IDEOGRAPH
+ {0xF2CE, 0x85EC}, //12356 #CJK UNIFIED IDEOGRAPH
+ {0xF2CF, 0x85F2}, //12357 #CJK UNIFIED IDEOGRAPH
+ {0xF2D0, 0x85F8}, //12358 #CJK UNIFIED IDEOGRAPH
+ {0xF2D1, 0x85D8}, //12359 #CJK UNIFIED IDEOGRAPH
+ {0xF2D2, 0x85DF}, //12360 #CJK UNIFIED IDEOGRAPH
+ {0xF2D3, 0x85E3}, //12361 #CJK UNIFIED IDEOGRAPH
+ {0xF2D4, 0x85DC}, //12362 #CJK UNIFIED IDEOGRAPH
+ {0xF2D5, 0x85D1}, //12363 #CJK UNIFIED IDEOGRAPH
+ {0xF2D6, 0x85F0}, //12364 #CJK UNIFIED IDEOGRAPH
+ {0xF2D7, 0x85E6}, //12365 #CJK UNIFIED IDEOGRAPH
+ {0xF2D8, 0x85EF}, //12366 #CJK UNIFIED IDEOGRAPH
+ {0xF2D9, 0x85DE}, //12367 #CJK UNIFIED IDEOGRAPH
+ {0xF2DA, 0x85E2}, //12368 #CJK UNIFIED IDEOGRAPH
+ {0xF2DB, 0x8800}, //12369 #CJK UNIFIED IDEOGRAPH
+ {0xF2DC, 0x87FA}, //12370 #CJK UNIFIED IDEOGRAPH
+ {0xF2DD, 0x8803}, //12371 #CJK UNIFIED IDEOGRAPH
+ {0xF2DE, 0x87F6}, //12372 #CJK UNIFIED IDEOGRAPH
+ {0xF2DF, 0x87F7}, //12373 #CJK UNIFIED IDEOGRAPH
+ {0xF2E0, 0x8809}, //12374 #CJK UNIFIED IDEOGRAPH
+ {0xF2E1, 0x880C}, //12375 #CJK UNIFIED IDEOGRAPH
+ {0xF2E2, 0x880B}, //12376 #CJK UNIFIED IDEOGRAPH
+ {0xF2E3, 0x8806}, //12377 #CJK UNIFIED IDEOGRAPH
+ {0xF2E4, 0x87FC}, //12378 #CJK UNIFIED IDEOGRAPH
+ {0xF2E5, 0x8808}, //12379 #CJK UNIFIED IDEOGRAPH
+ {0xF2E6, 0x87FF}, //12380 #CJK UNIFIED IDEOGRAPH
+ {0xF2E7, 0x880A}, //12381 #CJK UNIFIED IDEOGRAPH
+ {0xF2E8, 0x8802}, //12382 #CJK UNIFIED IDEOGRAPH
+ {0xF2E9, 0x8962}, //12383 #CJK UNIFIED IDEOGRAPH
+ {0xF2EA, 0x895A}, //12384 #CJK UNIFIED IDEOGRAPH
+ {0xF2EB, 0x895B}, //12385 #CJK UNIFIED IDEOGRAPH
+ {0xF2EC, 0x8957}, //12386 #CJK UNIFIED IDEOGRAPH
+ {0xF2ED, 0x8961}, //12387 #CJK UNIFIED IDEOGRAPH
+ {0xF2EE, 0x895C}, //12388 #CJK UNIFIED IDEOGRAPH
+ {0xF2EF, 0x8958}, //12389 #CJK UNIFIED IDEOGRAPH
+ {0xF2F0, 0x895D}, //12390 #CJK UNIFIED IDEOGRAPH
+ {0xF2F1, 0x8959}, //12391 #CJK UNIFIED IDEOGRAPH
+ {0xF2F2, 0x8988}, //12392 #CJK UNIFIED IDEOGRAPH
+ {0xF2F3, 0x89B7}, //12393 #CJK UNIFIED IDEOGRAPH
+ {0xF2F4, 0x89B6}, //12394 #CJK UNIFIED IDEOGRAPH
+ {0xF2F5, 0x89F6}, //12395 #CJK UNIFIED IDEOGRAPH
+ {0xF2F6, 0x8B50}, //12396 #CJK UNIFIED IDEOGRAPH
+ {0xF2F7, 0x8B48}, //12397 #CJK UNIFIED IDEOGRAPH
+ {0xF2F8, 0x8B4A}, //12398 #CJK UNIFIED IDEOGRAPH
+ {0xF2F9, 0x8B40}, //12399 #CJK UNIFIED IDEOGRAPH
+ {0xF2FA, 0x8B53}, //12400 #CJK UNIFIED IDEOGRAPH
+ {0xF2FB, 0x8B56}, //12401 #CJK UNIFIED IDEOGRAPH
+ {0xF2FC, 0x8B54}, //12402 #CJK UNIFIED IDEOGRAPH
+ {0xF2FD, 0x8B4B}, //12403 #CJK UNIFIED IDEOGRAPH
+ {0xF2FE, 0x8B55}, //12404 #CJK UNIFIED IDEOGRAPH
+ {0xF340, 0x8B51}, //12405 #CJK UNIFIED IDEOGRAPH
+ {0xF341, 0x8B42}, //12406 #CJK UNIFIED IDEOGRAPH
+ {0xF342, 0x8B52}, //12407 #CJK UNIFIED IDEOGRAPH
+ {0xF343, 0x8B57}, //12408 #CJK UNIFIED IDEOGRAPH
+ {0xF344, 0x8C43}, //12409 #CJK UNIFIED IDEOGRAPH
+ {0xF345, 0x8C77}, //12410 #CJK UNIFIED IDEOGRAPH
+ {0xF346, 0x8C76}, //12411 #CJK UNIFIED IDEOGRAPH
+ {0xF347, 0x8C9A}, //12412 #CJK UNIFIED IDEOGRAPH
+ {0xF348, 0x8D06}, //12413 #CJK UNIFIED IDEOGRAPH
+ {0xF349, 0x8D07}, //12414 #CJK UNIFIED IDEOGRAPH
+ {0xF34A, 0x8D09}, //12415 #CJK UNIFIED IDEOGRAPH
+ {0xF34B, 0x8DAC}, //12416 #CJK UNIFIED IDEOGRAPH
+ {0xF34C, 0x8DAA}, //12417 #CJK UNIFIED IDEOGRAPH
+ {0xF34D, 0x8DAD}, //12418 #CJK UNIFIED IDEOGRAPH
+ {0xF34E, 0x8DAB}, //12419 #CJK UNIFIED IDEOGRAPH
+ {0xF34F, 0x8E6D}, //12420 #CJK UNIFIED IDEOGRAPH
+ {0xF350, 0x8E78}, //12421 #CJK UNIFIED IDEOGRAPH
+ {0xF351, 0x8E73}, //12422 #CJK UNIFIED IDEOGRAPH
+ {0xF352, 0x8E6A}, //12423 #CJK UNIFIED IDEOGRAPH
+ {0xF353, 0x8E6F}, //12424 #CJK UNIFIED IDEOGRAPH
+ {0xF354, 0x8E7B}, //12425 #CJK UNIFIED IDEOGRAPH
+ {0xF355, 0x8EC2}, //12426 #CJK UNIFIED IDEOGRAPH
+ {0xF356, 0x8F52}, //12427 #CJK UNIFIED IDEOGRAPH
+ {0xF357, 0x8F51}, //12428 #CJK UNIFIED IDEOGRAPH
+ {0xF358, 0x8F4F}, //12429 #CJK UNIFIED IDEOGRAPH
+ {0xF359, 0x8F50}, //12430 #CJK UNIFIED IDEOGRAPH
+ {0xF35A, 0x8F53}, //12431 #CJK UNIFIED IDEOGRAPH
+ {0xF35B, 0x8FB4}, //12432 #CJK UNIFIED IDEOGRAPH
+ {0xF35C, 0x9140}, //12433 #CJK UNIFIED IDEOGRAPH
+ {0xF35D, 0x913F}, //12434 #CJK UNIFIED IDEOGRAPH
+ {0xF35E, 0x91B0}, //12435 #CJK UNIFIED IDEOGRAPH
+ {0xF35F, 0x91AD}, //12436 #CJK UNIFIED IDEOGRAPH
+ {0xF360, 0x93DE}, //12437 #CJK UNIFIED IDEOGRAPH
+ {0xF361, 0x93C7}, //12438 #CJK UNIFIED IDEOGRAPH
+ {0xF362, 0x93CF}, //12439 #CJK UNIFIED IDEOGRAPH
+ {0xF363, 0x93C2}, //12440 #CJK UNIFIED IDEOGRAPH
+ {0xF364, 0x93DA}, //12441 #CJK UNIFIED IDEOGRAPH
+ {0xF365, 0x93D0}, //12442 #CJK UNIFIED IDEOGRAPH
+ {0xF366, 0x93F9}, //12443 #CJK UNIFIED IDEOGRAPH
+ {0xF367, 0x93EC}, //12444 #CJK UNIFIED IDEOGRAPH
+ {0xF368, 0x93CC}, //12445 #CJK UNIFIED IDEOGRAPH
+ {0xF369, 0x93D9}, //12446 #CJK UNIFIED IDEOGRAPH
+ {0xF36A, 0x93A9}, //12447 #CJK UNIFIED IDEOGRAPH
+ {0xF36B, 0x93E6}, //12448 #CJK UNIFIED IDEOGRAPH
+ {0xF36C, 0x93CA}, //12449 #CJK UNIFIED IDEOGRAPH
+ {0xF36D, 0x93D4}, //12450 #CJK UNIFIED IDEOGRAPH
+ {0xF36E, 0x93EE}, //12451 #CJK UNIFIED IDEOGRAPH
+ {0xF36F, 0x93E3}, //12452 #CJK UNIFIED IDEOGRAPH
+ {0xF370, 0x93D5}, //12453 #CJK UNIFIED IDEOGRAPH
+ {0xF371, 0x93C4}, //12454 #CJK UNIFIED IDEOGRAPH
+ {0xF372, 0x93CE}, //12455 #CJK UNIFIED IDEOGRAPH
+ {0xF373, 0x93C0}, //12456 #CJK UNIFIED IDEOGRAPH
+ {0xF374, 0x93D2}, //12457 #CJK UNIFIED IDEOGRAPH
+ {0xF375, 0x93E7}, //12458 #CJK UNIFIED IDEOGRAPH
+ {0xF376, 0x957D}, //12459 #CJK UNIFIED IDEOGRAPH
+ {0xF377, 0x95DA}, //12460 #CJK UNIFIED IDEOGRAPH
+ {0xF378, 0x95DB}, //12461 #CJK UNIFIED IDEOGRAPH
+ {0xF379, 0x96E1}, //12462 #CJK UNIFIED IDEOGRAPH
+ {0xF37A, 0x9729}, //12463 #CJK UNIFIED IDEOGRAPH
+ {0xF37B, 0x972B}, //12464 #CJK UNIFIED IDEOGRAPH
+ {0xF37C, 0x972C}, //12465 #CJK UNIFIED IDEOGRAPH
+ {0xF37D, 0x9728}, //12466 #CJK UNIFIED IDEOGRAPH
+ {0xF37E, 0x9726}, //12467 #CJK UNIFIED IDEOGRAPH
+ {0xF3A1, 0x97B3}, //12468 #CJK UNIFIED IDEOGRAPH
+ {0xF3A2, 0x97B7}, //12469 #CJK UNIFIED IDEOGRAPH
+ {0xF3A3, 0x97B6}, //12470 #CJK UNIFIED IDEOGRAPH
+ {0xF3A4, 0x97DD}, //12471 #CJK UNIFIED IDEOGRAPH
+ {0xF3A5, 0x97DE}, //12472 #CJK UNIFIED IDEOGRAPH
+ {0xF3A6, 0x97DF}, //12473 #CJK UNIFIED IDEOGRAPH
+ {0xF3A7, 0x985C}, //12474 #CJK UNIFIED IDEOGRAPH
+ {0xF3A8, 0x9859}, //12475 #CJK UNIFIED IDEOGRAPH
+ {0xF3A9, 0x985D}, //12476 #CJK UNIFIED IDEOGRAPH
+ {0xF3AA, 0x9857}, //12477 #CJK UNIFIED IDEOGRAPH
+ {0xF3AB, 0x98BF}, //12478 #CJK UNIFIED IDEOGRAPH
+ {0xF3AC, 0x98BD}, //12479 #CJK UNIFIED IDEOGRAPH
+ {0xF3AD, 0x98BB}, //12480 #CJK UNIFIED IDEOGRAPH
+ {0xF3AE, 0x98BE}, //12481 #CJK UNIFIED IDEOGRAPH
+ {0xF3AF, 0x9948}, //12482 #CJK UNIFIED IDEOGRAPH
+ {0xF3B0, 0x9947}, //12483 #CJK UNIFIED IDEOGRAPH
+ {0xF3B1, 0x9943}, //12484 #CJK UNIFIED IDEOGRAPH
+ {0xF3B2, 0x99A6}, //12485 #CJK UNIFIED IDEOGRAPH
+ {0xF3B3, 0x99A7}, //12486 #CJK UNIFIED IDEOGRAPH
+ {0xF3B4, 0x9A1A}, //12487 #CJK UNIFIED IDEOGRAPH
+ {0xF3B5, 0x9A15}, //12488 #CJK UNIFIED IDEOGRAPH
+ {0xF3B6, 0x9A25}, //12489 #CJK UNIFIED IDEOGRAPH
+ {0xF3B7, 0x9A1D}, //12490 #CJK UNIFIED IDEOGRAPH
+ {0xF3B8, 0x9A24}, //12491 #CJK UNIFIED IDEOGRAPH
+ {0xF3B9, 0x9A1B}, //12492 #CJK UNIFIED IDEOGRAPH
+ {0xF3BA, 0x9A22}, //12493 #CJK UNIFIED IDEOGRAPH
+ {0xF3BB, 0x9A20}, //12494 #CJK UNIFIED IDEOGRAPH
+ {0xF3BC, 0x9A27}, //12495 #CJK UNIFIED IDEOGRAPH
+ {0xF3BD, 0x9A23}, //12496 #CJK UNIFIED IDEOGRAPH
+ {0xF3BE, 0x9A1E}, //12497 #CJK UNIFIED IDEOGRAPH
+ {0xF3BF, 0x9A1C}, //12498 #CJK UNIFIED IDEOGRAPH
+ {0xF3C0, 0x9A14}, //12499 #CJK UNIFIED IDEOGRAPH
+ {0xF3C1, 0x9AC2}, //12500 #CJK UNIFIED IDEOGRAPH
+ {0xF3C2, 0x9B0B}, //12501 #CJK UNIFIED IDEOGRAPH
+ {0xF3C3, 0x9B0A}, //12502 #CJK UNIFIED IDEOGRAPH
+ {0xF3C4, 0x9B0E}, //12503 #CJK UNIFIED IDEOGRAPH
+ {0xF3C5, 0x9B0C}, //12504 #CJK UNIFIED IDEOGRAPH
+ {0xF3C6, 0x9B37}, //12505 #CJK UNIFIED IDEOGRAPH
+ {0xF3C7, 0x9BEA}, //12506 #CJK UNIFIED IDEOGRAPH
+ {0xF3C8, 0x9BEB}, //12507 #CJK UNIFIED IDEOGRAPH
+ {0xF3C9, 0x9BE0}, //12508 #CJK UNIFIED IDEOGRAPH
+ {0xF3CA, 0x9BDE}, //12509 #CJK UNIFIED IDEOGRAPH
+ {0xF3CB, 0x9BE4}, //12510 #CJK UNIFIED IDEOGRAPH
+ {0xF3CC, 0x9BE6}, //12511 #CJK UNIFIED IDEOGRAPH
+ {0xF3CD, 0x9BE2}, //12512 #CJK UNIFIED IDEOGRAPH
+ {0xF3CE, 0x9BF0}, //12513 #CJK UNIFIED IDEOGRAPH
+ {0xF3CF, 0x9BD4}, //12514 #CJK UNIFIED IDEOGRAPH
+ {0xF3D0, 0x9BD7}, //12515 #CJK UNIFIED IDEOGRAPH
+ {0xF3D1, 0x9BEC}, //12516 #CJK UNIFIED IDEOGRAPH
+ {0xF3D2, 0x9BDC}, //12517 #CJK UNIFIED IDEOGRAPH
+ {0xF3D3, 0x9BD9}, //12518 #CJK UNIFIED IDEOGRAPH
+ {0xF3D4, 0x9BE5}, //12519 #CJK UNIFIED IDEOGRAPH
+ {0xF3D5, 0x9BD5}, //12520 #CJK UNIFIED IDEOGRAPH
+ {0xF3D6, 0x9BE1}, //12521 #CJK UNIFIED IDEOGRAPH
+ {0xF3D7, 0x9BDA}, //12522 #CJK UNIFIED IDEOGRAPH
+ {0xF3D8, 0x9D77}, //12523 #CJK UNIFIED IDEOGRAPH
+ {0xF3D9, 0x9D81}, //12524 #CJK UNIFIED IDEOGRAPH
+ {0xF3DA, 0x9D8A}, //12525 #CJK UNIFIED IDEOGRAPH
+ {0xF3DB, 0x9D84}, //12526 #CJK UNIFIED IDEOGRAPH
+ {0xF3DC, 0x9D88}, //12527 #CJK UNIFIED IDEOGRAPH
+ {0xF3DD, 0x9D71}, //12528 #CJK UNIFIED IDEOGRAPH
+ {0xF3DE, 0x9D80}, //12529 #CJK UNIFIED IDEOGRAPH
+ {0xF3DF, 0x9D78}, //12530 #CJK UNIFIED IDEOGRAPH
+ {0xF3E0, 0x9D86}, //12531 #CJK UNIFIED IDEOGRAPH
+ {0xF3E1, 0x9D8B}, //12532 #CJK UNIFIED IDEOGRAPH
+ {0xF3E2, 0x9D8C}, //12533 #CJK UNIFIED IDEOGRAPH
+ {0xF3E3, 0x9D7D}, //12534 #CJK UNIFIED IDEOGRAPH
+ {0xF3E4, 0x9D6B}, //12535 #CJK UNIFIED IDEOGRAPH
+ {0xF3E5, 0x9D74}, //12536 #CJK UNIFIED IDEOGRAPH
+ {0xF3E6, 0x9D75}, //12537 #CJK UNIFIED IDEOGRAPH
+ {0xF3E7, 0x9D70}, //12538 #CJK UNIFIED IDEOGRAPH
+ {0xF3E8, 0x9D69}, //12539 #CJK UNIFIED IDEOGRAPH
+ {0xF3E9, 0x9D85}, //12540 #CJK UNIFIED IDEOGRAPH
+ {0xF3EA, 0x9D73}, //12541 #CJK UNIFIED IDEOGRAPH
+ {0xF3EB, 0x9D7B}, //12542 #CJK UNIFIED IDEOGRAPH
+ {0xF3EC, 0x9D82}, //12543 #CJK UNIFIED IDEOGRAPH
+ {0xF3ED, 0x9D6F}, //12544 #CJK UNIFIED IDEOGRAPH
+ {0xF3EE, 0x9D79}, //12545 #CJK UNIFIED IDEOGRAPH
+ {0xF3EF, 0x9D7F}, //12546 #CJK UNIFIED IDEOGRAPH
+ {0xF3F0, 0x9D87}, //12547 #CJK UNIFIED IDEOGRAPH
+ {0xF3F1, 0x9D68}, //12548 #CJK UNIFIED IDEOGRAPH
+ {0xF3F2, 0x9E94}, //12549 #CJK UNIFIED IDEOGRAPH
+ {0xF3F3, 0x9E91}, //12550 #CJK UNIFIED IDEOGRAPH
+ {0xF3F4, 0x9EC0}, //12551 #CJK UNIFIED IDEOGRAPH
+ {0xF3F5, 0x9EFC}, //12552 #CJK UNIFIED IDEOGRAPH
+ {0xF3F6, 0x9F2D}, //12553 #CJK UNIFIED IDEOGRAPH
+ {0xF3F7, 0x9F40}, //12554 #CJK UNIFIED IDEOGRAPH
+ {0xF3F8, 0x9F41}, //12555 #CJK UNIFIED IDEOGRAPH
+ {0xF3F9, 0x9F4D}, //12556 #CJK UNIFIED IDEOGRAPH
+ {0xF3FA, 0x9F56}, //12557 #CJK UNIFIED IDEOGRAPH
+ {0xF3FB, 0x9F57}, //12558 #CJK UNIFIED IDEOGRAPH
+ {0xF3FC, 0x9F58}, //12559 #CJK UNIFIED IDEOGRAPH
+ {0xF3FD, 0x5337}, //12560 #CJK UNIFIED IDEOGRAPH
+ {0xF3FE, 0x56B2}, //12561 #CJK UNIFIED IDEOGRAPH
+ {0xF440, 0x56B5}, //12562 #CJK UNIFIED IDEOGRAPH
+ {0xF441, 0x56B3}, //12563 #CJK UNIFIED IDEOGRAPH
+ {0xF442, 0x58E3}, //12564 #CJK UNIFIED IDEOGRAPH
+ {0xF443, 0x5B45}, //12565 #CJK UNIFIED IDEOGRAPH
+ {0xF444, 0x5DC6}, //12566 #CJK UNIFIED IDEOGRAPH
+ {0xF445, 0x5DC7}, //12567 #CJK UNIFIED IDEOGRAPH
+ {0xF446, 0x5EEE}, //12568 #CJK UNIFIED IDEOGRAPH
+ {0xF447, 0x5EEF}, //12569 #CJK UNIFIED IDEOGRAPH
+ {0xF448, 0x5FC0}, //12570 #CJK UNIFIED IDEOGRAPH
+ {0xF449, 0x5FC1}, //12571 #CJK UNIFIED IDEOGRAPH
+ {0xF44A, 0x61F9}, //12572 #CJK UNIFIED IDEOGRAPH
+ {0xF44B, 0x6517}, //12573 #CJK UNIFIED IDEOGRAPH
+ {0xF44C, 0x6516}, //12574 #CJK UNIFIED IDEOGRAPH
+ {0xF44D, 0x6515}, //12575 #CJK UNIFIED IDEOGRAPH
+ {0xF44E, 0x6513}, //12576 #CJK UNIFIED IDEOGRAPH
+ {0xF44F, 0x65DF}, //12577 #CJK UNIFIED IDEOGRAPH
+ {0xF450, 0x66E8}, //12578 #CJK UNIFIED IDEOGRAPH
+ {0xF451, 0x66E3}, //12579 #CJK UNIFIED IDEOGRAPH
+ {0xF452, 0x66E4}, //12580 #CJK UNIFIED IDEOGRAPH
+ {0xF453, 0x6AF3}, //12581 #CJK UNIFIED IDEOGRAPH
+ {0xF454, 0x6AF0}, //12582 #CJK UNIFIED IDEOGRAPH
+ {0xF455, 0x6AEA}, //12583 #CJK UNIFIED IDEOGRAPH
+ {0xF456, 0x6AE8}, //12584 #CJK UNIFIED IDEOGRAPH
+ {0xF457, 0x6AF9}, //12585 #CJK UNIFIED IDEOGRAPH
+ {0xF458, 0x6AF1}, //12586 #CJK UNIFIED IDEOGRAPH
+ {0xF459, 0x6AEE}, //12587 #CJK UNIFIED IDEOGRAPH
+ {0xF45A, 0x6AEF}, //12588 #CJK UNIFIED IDEOGRAPH
+ {0xF45B, 0x703C}, //12589 #CJK UNIFIED IDEOGRAPH
+ {0xF45C, 0x7035}, //12590 #CJK UNIFIED IDEOGRAPH
+ {0xF45D, 0x702F}, //12591 #CJK UNIFIED IDEOGRAPH
+ {0xF45E, 0x7037}, //12592 #CJK UNIFIED IDEOGRAPH
+ {0xF45F, 0x7034}, //12593 #CJK UNIFIED IDEOGRAPH
+ {0xF460, 0x7031}, //12594 #CJK UNIFIED IDEOGRAPH
+ {0xF461, 0x7042}, //12595 #CJK UNIFIED IDEOGRAPH
+ {0xF462, 0x7038}, //12596 #CJK UNIFIED IDEOGRAPH
+ {0xF463, 0x703F}, //12597 #CJK UNIFIED IDEOGRAPH
+ {0xF464, 0x703A}, //12598 #CJK UNIFIED IDEOGRAPH
+ {0xF465, 0x7039}, //12599 #CJK UNIFIED IDEOGRAPH
+ {0xF466, 0x7040}, //12600 #CJK UNIFIED IDEOGRAPH
+ {0xF467, 0x703B}, //12601 #CJK UNIFIED IDEOGRAPH
+ {0xF468, 0x7033}, //12602 #CJK UNIFIED IDEOGRAPH
+ {0xF469, 0x7041}, //12603 #CJK UNIFIED IDEOGRAPH
+ {0xF46A, 0x7213}, //12604 #CJK UNIFIED IDEOGRAPH
+ {0xF46B, 0x7214}, //12605 #CJK UNIFIED IDEOGRAPH
+ {0xF46C, 0x72A8}, //12606 #CJK UNIFIED IDEOGRAPH
+ {0xF46D, 0x737D}, //12607 #CJK UNIFIED IDEOGRAPH
+ {0xF46E, 0x737C}, //12608 #CJK UNIFIED IDEOGRAPH
+ {0xF46F, 0x74BA}, //12609 #CJK UNIFIED IDEOGRAPH
+ {0xF470, 0x76AB}, //12610 #CJK UNIFIED IDEOGRAPH
+ {0xF471, 0x76AA}, //12611 #CJK UNIFIED IDEOGRAPH
+ {0xF472, 0x76BE}, //12612 #CJK UNIFIED IDEOGRAPH
+ {0xF473, 0x76ED}, //12613 #CJK UNIFIED IDEOGRAPH
+ {0xF474, 0x77CC}, //12614 #CJK UNIFIED IDEOGRAPH
+ {0xF475, 0x77CE}, //12615 #CJK UNIFIED IDEOGRAPH
+ {0xF476, 0x77CF}, //12616 #CJK UNIFIED IDEOGRAPH
+ {0xF477, 0x77CD}, //12617 #CJK UNIFIED IDEOGRAPH
+ {0xF478, 0x77F2}, //12618 #CJK UNIFIED IDEOGRAPH
+ {0xF479, 0x7925}, //12619 #CJK UNIFIED IDEOGRAPH
+ {0xF47A, 0x7923}, //12620 #CJK UNIFIED IDEOGRAPH
+ {0xF47B, 0x7927}, //12621 #CJK UNIFIED IDEOGRAPH
+ {0xF47C, 0x7928}, //12622 #CJK UNIFIED IDEOGRAPH
+ {0xF47D, 0x7924}, //12623 #CJK UNIFIED IDEOGRAPH
+ {0xF47E, 0x7929}, //12624 #CJK UNIFIED IDEOGRAPH
+ {0xF4A1, 0x79B2}, //12625 #CJK UNIFIED IDEOGRAPH
+ {0xF4A2, 0x7A6E}, //12626 #CJK UNIFIED IDEOGRAPH
+ {0xF4A3, 0x7A6C}, //12627 #CJK UNIFIED IDEOGRAPH
+ {0xF4A4, 0x7A6D}, //12628 #CJK UNIFIED IDEOGRAPH
+ {0xF4A5, 0x7AF7}, //12629 #CJK UNIFIED IDEOGRAPH
+ {0xF4A6, 0x7C49}, //12630 #CJK UNIFIED IDEOGRAPH
+ {0xF4A7, 0x7C48}, //12631 #CJK UNIFIED IDEOGRAPH
+ {0xF4A8, 0x7C4A}, //12632 #CJK UNIFIED IDEOGRAPH
+ {0xF4A9, 0x7C47}, //12633 #CJK UNIFIED IDEOGRAPH
+ {0xF4AA, 0x7C45}, //12634 #CJK UNIFIED IDEOGRAPH
+ {0xF4AB, 0x7CEE}, //12635 #CJK UNIFIED IDEOGRAPH
+ {0xF4AC, 0x7E7B}, //12636 #CJK UNIFIED IDEOGRAPH
+ {0xF4AD, 0x7E7E}, //12637 #CJK UNIFIED IDEOGRAPH
+ {0xF4AE, 0x7E81}, //12638 #CJK UNIFIED IDEOGRAPH
+ {0xF4AF, 0x7E80}, //12639 #CJK UNIFIED IDEOGRAPH
+ {0xF4B0, 0x7FBA}, //12640 #CJK UNIFIED IDEOGRAPH
+ {0xF4B1, 0x7FFF}, //12641 #CJK UNIFIED IDEOGRAPH
+ {0xF4B2, 0x8079}, //12642 #CJK UNIFIED IDEOGRAPH
+ {0xF4B3, 0x81DB}, //12643 #CJK UNIFIED IDEOGRAPH
+ {0xF4B4, 0x81D9}, //12644 #CJK UNIFIED IDEOGRAPH
+ {0xF4B5, 0x820B}, //12645 #CJK UNIFIED IDEOGRAPH
+ {0xF4B6, 0x8268}, //12646 #CJK UNIFIED IDEOGRAPH
+ {0xF4B7, 0x8269}, //12647 #CJK UNIFIED IDEOGRAPH
+ {0xF4B8, 0x8622}, //12648 #CJK UNIFIED IDEOGRAPH
+ {0xF4B9, 0x85FF}, //12649 #CJK UNIFIED IDEOGRAPH
+ {0xF4BA, 0x8601}, //12650 #CJK UNIFIED IDEOGRAPH
+ {0xF4BB, 0x85FE}, //12651 #CJK UNIFIED IDEOGRAPH
+ {0xF4BC, 0x861B}, //12652 #CJK UNIFIED IDEOGRAPH
+ {0xF4BD, 0x8600}, //12653 #CJK UNIFIED IDEOGRAPH
+ {0xF4BE, 0x85F6}, //12654 #CJK UNIFIED IDEOGRAPH
+ {0xF4BF, 0x8604}, //12655 #CJK UNIFIED IDEOGRAPH
+ {0xF4C0, 0x8609}, //12656 #CJK UNIFIED IDEOGRAPH
+ {0xF4C1, 0x8605}, //12657 #CJK UNIFIED IDEOGRAPH
+ {0xF4C2, 0x860C}, //12658 #CJK UNIFIED IDEOGRAPH
+ {0xF4C3, 0x85FD}, //12659 #CJK UNIFIED IDEOGRAPH
+ {0xF4C4, 0x8819}, //12660 #CJK UNIFIED IDEOGRAPH
+ {0xF4C5, 0x8810}, //12661 #CJK UNIFIED IDEOGRAPH
+ {0xF4C6, 0x8811}, //12662 #CJK UNIFIED IDEOGRAPH
+ {0xF4C7, 0x8817}, //12663 #CJK UNIFIED IDEOGRAPH
+ {0xF4C8, 0x8813}, //12664 #CJK UNIFIED IDEOGRAPH
+ {0xF4C9, 0x8816}, //12665 #CJK UNIFIED IDEOGRAPH
+ {0xF4CA, 0x8963}, //12666 #CJK UNIFIED IDEOGRAPH
+ {0xF4CB, 0x8966}, //12667 #CJK UNIFIED IDEOGRAPH
+ {0xF4CC, 0x89B9}, //12668 #CJK UNIFIED IDEOGRAPH
+ {0xF4CD, 0x89F7}, //12669 #CJK UNIFIED IDEOGRAPH
+ {0xF4CE, 0x8B60}, //12670 #CJK UNIFIED IDEOGRAPH
+ {0xF4CF, 0x8B6A}, //12671 #CJK UNIFIED IDEOGRAPH
+ {0xF4D0, 0x8B5D}, //12672 #CJK UNIFIED IDEOGRAPH
+ {0xF4D1, 0x8B68}, //12673 #CJK UNIFIED IDEOGRAPH
+ {0xF4D2, 0x8B63}, //12674 #CJK UNIFIED IDEOGRAPH
+ {0xF4D3, 0x8B65}, //12675 #CJK UNIFIED IDEOGRAPH
+ {0xF4D4, 0x8B67}, //12676 #CJK UNIFIED IDEOGRAPH
+ {0xF4D5, 0x8B6D}, //12677 #CJK UNIFIED IDEOGRAPH
+ {0xF4D6, 0x8DAE}, //12678 #CJK UNIFIED IDEOGRAPH
+ {0xF4D7, 0x8E86}, //12679 #CJK UNIFIED IDEOGRAPH
+ {0xF4D8, 0x8E88}, //12680 #CJK UNIFIED IDEOGRAPH
+ {0xF4D9, 0x8E84}, //12681 #CJK UNIFIED IDEOGRAPH
+ {0xF4DA, 0x8F59}, //12682 #CJK UNIFIED IDEOGRAPH
+ {0xF4DB, 0x8F56}, //12683 #CJK UNIFIED IDEOGRAPH
+ {0xF4DC, 0x8F57}, //12684 #CJK UNIFIED IDEOGRAPH
+ {0xF4DD, 0x8F55}, //12685 #CJK UNIFIED IDEOGRAPH
+ {0xF4DE, 0x8F58}, //12686 #CJK UNIFIED IDEOGRAPH
+ {0xF4DF, 0x8F5A}, //12687 #CJK UNIFIED IDEOGRAPH
+ {0xF4E0, 0x908D}, //12688 #CJK UNIFIED IDEOGRAPH
+ {0xF4E1, 0x9143}, //12689 #CJK UNIFIED IDEOGRAPH
+ {0xF4E2, 0x9141}, //12690 #CJK UNIFIED IDEOGRAPH
+ {0xF4E3, 0x91B7}, //12691 #CJK UNIFIED IDEOGRAPH
+ {0xF4E4, 0x91B5}, //12692 #CJK UNIFIED IDEOGRAPH
+ {0xF4E5, 0x91B2}, //12693 #CJK UNIFIED IDEOGRAPH
+ {0xF4E6, 0x91B3}, //12694 #CJK UNIFIED IDEOGRAPH
+ {0xF4E7, 0x940B}, //12695 #CJK UNIFIED IDEOGRAPH
+ {0xF4E8, 0x9413}, //12696 #CJK UNIFIED IDEOGRAPH
+ {0xF4E9, 0x93FB}, //12697 #CJK UNIFIED IDEOGRAPH
+ {0xF4EA, 0x9420}, //12698 #CJK UNIFIED IDEOGRAPH
+ {0xF4EB, 0x940F}, //12699 #CJK UNIFIED IDEOGRAPH
+ {0xF4EC, 0x9414}, //12700 #CJK UNIFIED IDEOGRAPH
+ {0xF4ED, 0x93FE}, //12701 #CJK UNIFIED IDEOGRAPH
+ {0xF4EE, 0x9415}, //12702 #CJK UNIFIED IDEOGRAPH
+ {0xF4EF, 0x9410}, //12703 #CJK UNIFIED IDEOGRAPH
+ {0xF4F0, 0x9428}, //12704 #CJK UNIFIED IDEOGRAPH
+ {0xF4F1, 0x9419}, //12705 #CJK UNIFIED IDEOGRAPH
+ {0xF4F2, 0x940D}, //12706 #CJK UNIFIED IDEOGRAPH
+ {0xF4F3, 0x93F5}, //12707 #CJK UNIFIED IDEOGRAPH
+ {0xF4F4, 0x9400}, //12708 #CJK UNIFIED IDEOGRAPH
+ {0xF4F5, 0x93F7}, //12709 #CJK UNIFIED IDEOGRAPH
+ {0xF4F6, 0x9407}, //12710 #CJK UNIFIED IDEOGRAPH
+ {0xF4F7, 0x940E}, //12711 #CJK UNIFIED IDEOGRAPH
+ {0xF4F8, 0x9416}, //12712 #CJK UNIFIED IDEOGRAPH
+ {0xF4F9, 0x9412}, //12713 #CJK UNIFIED IDEOGRAPH
+ {0xF4FA, 0x93FA}, //12714 #CJK UNIFIED IDEOGRAPH
+ {0xF4FB, 0x9409}, //12715 #CJK UNIFIED IDEOGRAPH
+ {0xF4FC, 0x93F8}, //12716 #CJK UNIFIED IDEOGRAPH
+ {0xF4FD, 0x940A}, //12717 #CJK UNIFIED IDEOGRAPH
+ {0xF4FE, 0x93FF}, //12718 #CJK UNIFIED IDEOGRAPH
+ {0xF540, 0x93FC}, //12719 #CJK UNIFIED IDEOGRAPH
+ {0xF541, 0x940C}, //12720 #CJK UNIFIED IDEOGRAPH
+ {0xF542, 0x93F6}, //12721 #CJK UNIFIED IDEOGRAPH
+ {0xF543, 0x9411}, //12722 #CJK UNIFIED IDEOGRAPH
+ {0xF544, 0x9406}, //12723 #CJK UNIFIED IDEOGRAPH
+ {0xF545, 0x95DE}, //12724 #CJK UNIFIED IDEOGRAPH
+ {0xF546, 0x95E0}, //12725 #CJK UNIFIED IDEOGRAPH
+ {0xF547, 0x95DF}, //12726 #CJK UNIFIED IDEOGRAPH
+ {0xF548, 0x972E}, //12727 #CJK UNIFIED IDEOGRAPH
+ {0xF549, 0x972F}, //12728 #CJK UNIFIED IDEOGRAPH
+ {0xF54A, 0x97B9}, //12729 #CJK UNIFIED IDEOGRAPH
+ {0xF54B, 0x97BB}, //12730 #CJK UNIFIED IDEOGRAPH
+ {0xF54C, 0x97FD}, //12731 #CJK UNIFIED IDEOGRAPH
+ {0xF54D, 0x97FE}, //12732 #CJK UNIFIED IDEOGRAPH
+ {0xF54E, 0x9860}, //12733 #CJK UNIFIED IDEOGRAPH
+ {0xF54F, 0x9862}, //12734 #CJK UNIFIED IDEOGRAPH
+ {0xF550, 0x9863}, //12735 #CJK UNIFIED IDEOGRAPH
+ {0xF551, 0x985F}, //12736 #CJK UNIFIED IDEOGRAPH
+ {0xF552, 0x98C1}, //12737 #CJK UNIFIED IDEOGRAPH
+ {0xF553, 0x98C2}, //12738 #CJK UNIFIED IDEOGRAPH
+ {0xF554, 0x9950}, //12739 #CJK UNIFIED IDEOGRAPH
+ {0xF555, 0x994E}, //12740 #CJK UNIFIED IDEOGRAPH
+ {0xF556, 0x9959}, //12741 #CJK UNIFIED IDEOGRAPH
+ {0xF557, 0x994C}, //12742 #CJK UNIFIED IDEOGRAPH
+ {0xF558, 0x994B}, //12743 #CJK UNIFIED IDEOGRAPH
+ {0xF559, 0x9953}, //12744 #CJK UNIFIED IDEOGRAPH
+ {0xF55A, 0x9A32}, //12745 #CJK UNIFIED IDEOGRAPH
+ {0xF55B, 0x9A34}, //12746 #CJK UNIFIED IDEOGRAPH
+ {0xF55C, 0x9A31}, //12747 #CJK UNIFIED IDEOGRAPH
+ {0xF55D, 0x9A2C}, //12748 #CJK UNIFIED IDEOGRAPH
+ {0xF55E, 0x9A2A}, //12749 #CJK UNIFIED IDEOGRAPH
+ {0xF55F, 0x9A36}, //12750 #CJK UNIFIED IDEOGRAPH
+ {0xF560, 0x9A29}, //12751 #CJK UNIFIED IDEOGRAPH
+ {0xF561, 0x9A2E}, //12752 #CJK UNIFIED IDEOGRAPH
+ {0xF562, 0x9A38}, //12753 #CJK UNIFIED IDEOGRAPH
+ {0xF563, 0x9A2D}, //12754 #CJK UNIFIED IDEOGRAPH
+ {0xF564, 0x9AC7}, //12755 #CJK UNIFIED IDEOGRAPH
+ {0xF565, 0x9ACA}, //12756 #CJK UNIFIED IDEOGRAPH
+ {0xF566, 0x9AC6}, //12757 #CJK UNIFIED IDEOGRAPH
+ {0xF567, 0x9B10}, //12758 #CJK UNIFIED IDEOGRAPH
+ {0xF568, 0x9B12}, //12759 #CJK UNIFIED IDEOGRAPH
+ {0xF569, 0x9B11}, //12760 #CJK UNIFIED IDEOGRAPH
+ {0xF56A, 0x9C0B}, //12761 #CJK UNIFIED IDEOGRAPH
+ {0xF56B, 0x9C08}, //12762 #CJK UNIFIED IDEOGRAPH
+ {0xF56C, 0x9BF7}, //12763 #CJK UNIFIED IDEOGRAPH
+ {0xF56D, 0x9C05}, //12764 #CJK UNIFIED IDEOGRAPH
+ {0xF56E, 0x9C12}, //12765 #CJK UNIFIED IDEOGRAPH
+ {0xF56F, 0x9BF8}, //12766 #CJK UNIFIED IDEOGRAPH
+ {0xF570, 0x9C40}, //12767 #CJK UNIFIED IDEOGRAPH
+ {0xF571, 0x9C07}, //12768 #CJK UNIFIED IDEOGRAPH
+ {0xF572, 0x9C0E}, //12769 #CJK UNIFIED IDEOGRAPH
+ {0xF573, 0x9C06}, //12770 #CJK UNIFIED IDEOGRAPH
+ {0xF574, 0x9C17}, //12771 #CJK UNIFIED IDEOGRAPH
+ {0xF575, 0x9C14}, //12772 #CJK UNIFIED IDEOGRAPH
+ {0xF576, 0x9C09}, //12773 #CJK UNIFIED IDEOGRAPH
+ {0xF577, 0x9D9F}, //12774 #CJK UNIFIED IDEOGRAPH
+ {0xF578, 0x9D99}, //12775 #CJK UNIFIED IDEOGRAPH
+ {0xF579, 0x9DA4}, //12776 #CJK UNIFIED IDEOGRAPH
+ {0xF57A, 0x9D9D}, //12777 #CJK UNIFIED IDEOGRAPH
+ {0xF57B, 0x9D92}, //12778 #CJK UNIFIED IDEOGRAPH
+ {0xF57C, 0x9D98}, //12779 #CJK UNIFIED IDEOGRAPH
+ {0xF57D, 0x9D90}, //12780 #CJK UNIFIED IDEOGRAPH
+ {0xF57E, 0x9D9B}, //12781 #CJK UNIFIED IDEOGRAPH
+ {0xF5A1, 0x9DA0}, //12782 #CJK UNIFIED IDEOGRAPH
+ {0xF5A2, 0x9D94}, //12783 #CJK UNIFIED IDEOGRAPH
+ {0xF5A3, 0x9D9C}, //12784 #CJK UNIFIED IDEOGRAPH
+ {0xF5A4, 0x9DAA}, //12785 #CJK UNIFIED IDEOGRAPH
+ {0xF5A5, 0x9D97}, //12786 #CJK UNIFIED IDEOGRAPH
+ {0xF5A6, 0x9DA1}, //12787 #CJK UNIFIED IDEOGRAPH
+ {0xF5A7, 0x9D9A}, //12788 #CJK UNIFIED IDEOGRAPH
+ {0xF5A8, 0x9DA2}, //12789 #CJK UNIFIED IDEOGRAPH
+ {0xF5A9, 0x9DA8}, //12790 #CJK UNIFIED IDEOGRAPH
+ {0xF5AA, 0x9D9E}, //12791 #CJK UNIFIED IDEOGRAPH
+ {0xF5AB, 0x9DA3}, //12792 #CJK UNIFIED IDEOGRAPH
+ {0xF5AC, 0x9DBF}, //12793 #CJK UNIFIED IDEOGRAPH
+ {0xF5AD, 0x9DA9}, //12794 #CJK UNIFIED IDEOGRAPH
+ {0xF5AE, 0x9D96}, //12795 #CJK UNIFIED IDEOGRAPH
+ {0xF5AF, 0x9DA6}, //12796 #CJK UNIFIED IDEOGRAPH
+ {0xF5B0, 0x9DA7}, //12797 #CJK UNIFIED IDEOGRAPH
+ {0xF5B1, 0x9E99}, //12798 #CJK UNIFIED IDEOGRAPH
+ {0xF5B2, 0x9E9B}, //12799 #CJK UNIFIED IDEOGRAPH
+ {0xF5B3, 0x9E9A}, //12800 #CJK UNIFIED IDEOGRAPH
+ {0xF5B4, 0x9EE5}, //12801 #CJK UNIFIED IDEOGRAPH
+ {0xF5B5, 0x9EE4}, //12802 #CJK UNIFIED IDEOGRAPH
+ {0xF5B6, 0x9EE7}, //12803 #CJK UNIFIED IDEOGRAPH
+ {0xF5B7, 0x9EE6}, //12804 #CJK UNIFIED IDEOGRAPH
+ {0xF5B8, 0x9F30}, //12805 #CJK UNIFIED IDEOGRAPH
+ {0xF5B9, 0x9F2E}, //12806 #CJK UNIFIED IDEOGRAPH
+ {0xF5BA, 0x9F5B}, //12807 #CJK UNIFIED IDEOGRAPH
+ {0xF5BB, 0x9F60}, //12808 #CJK UNIFIED IDEOGRAPH
+ {0xF5BC, 0x9F5E}, //12809 #CJK UNIFIED IDEOGRAPH
+ {0xF5BD, 0x9F5D}, //12810 #CJK UNIFIED IDEOGRAPH
+ {0xF5BE, 0x9F59}, //12811 #CJK UNIFIED IDEOGRAPH
+ {0xF5BF, 0x9F91}, //12812 #CJK UNIFIED IDEOGRAPH
+ {0xF5C0, 0x513A}, //12813 #CJK UNIFIED IDEOGRAPH
+ {0xF5C1, 0x5139}, //12814 #CJK UNIFIED IDEOGRAPH
+ {0xF5C2, 0x5298}, //12815 #CJK UNIFIED IDEOGRAPH
+ {0xF5C3, 0x5297}, //12816 #CJK UNIFIED IDEOGRAPH
+ {0xF5C4, 0x56C3}, //12817 #CJK UNIFIED IDEOGRAPH
+ {0xF5C5, 0x56BD}, //12818 #CJK UNIFIED IDEOGRAPH
+ {0xF5C6, 0x56BE}, //12819 #CJK UNIFIED IDEOGRAPH
+ {0xF5C7, 0x5B48}, //12820 #CJK UNIFIED IDEOGRAPH
+ {0xF5C8, 0x5B47}, //12821 #CJK UNIFIED IDEOGRAPH
+ {0xF5C9, 0x5DCB}, //12822 #CJK UNIFIED IDEOGRAPH
+ {0xF5CA, 0x5DCF}, //12823 #CJK UNIFIED IDEOGRAPH
+ {0xF5CB, 0x5EF1}, //12824 #CJK UNIFIED IDEOGRAPH
+ {0xF5CC, 0x61FD}, //12825 #CJK UNIFIED IDEOGRAPH
+ {0xF5CD, 0x651B}, //12826 #CJK UNIFIED IDEOGRAPH
+ {0xF5CE, 0x6B02}, //12827 #CJK UNIFIED IDEOGRAPH
+ {0xF5CF, 0x6AFC}, //12828 #CJK UNIFIED IDEOGRAPH
+ {0xF5D0, 0x6B03}, //12829 #CJK UNIFIED IDEOGRAPH
+ {0xF5D1, 0x6AF8}, //12830 #CJK UNIFIED IDEOGRAPH
+ {0xF5D2, 0x6B00}, //12831 #CJK UNIFIED IDEOGRAPH
+ {0xF5D3, 0x7043}, //12832 #CJK UNIFIED IDEOGRAPH
+ {0xF5D4, 0x7044}, //12833 #CJK UNIFIED IDEOGRAPH
+ {0xF5D5, 0x704A}, //12834 #CJK UNIFIED IDEOGRAPH
+ {0xF5D6, 0x7048}, //12835 #CJK UNIFIED IDEOGRAPH
+ {0xF5D7, 0x7049}, //12836 #CJK UNIFIED IDEOGRAPH
+ {0xF5D8, 0x7045}, //12837 #CJK UNIFIED IDEOGRAPH
+ {0xF5D9, 0x7046}, //12838 #CJK UNIFIED IDEOGRAPH
+ {0xF5DA, 0x721D}, //12839 #CJK UNIFIED IDEOGRAPH
+ {0xF5DB, 0x721A}, //12840 #CJK UNIFIED IDEOGRAPH
+ {0xF5DC, 0x7219}, //12841 #CJK UNIFIED IDEOGRAPH
+ {0xF5DD, 0x737E}, //12842 #CJK UNIFIED IDEOGRAPH
+ {0xF5DE, 0x7517}, //12843 #CJK UNIFIED IDEOGRAPH
+ {0xF5DF, 0x766A}, //12844 #CJK UNIFIED IDEOGRAPH
+ {0xF5E0, 0x77D0}, //12845 #CJK UNIFIED IDEOGRAPH
+ {0xF5E1, 0x792D}, //12846 #CJK UNIFIED IDEOGRAPH
+ {0xF5E2, 0x7931}, //12847 #CJK UNIFIED IDEOGRAPH
+ {0xF5E3, 0x792F}, //12848 #CJK UNIFIED IDEOGRAPH
+ {0xF5E4, 0x7C54}, //12849 #CJK UNIFIED IDEOGRAPH
+ {0xF5E5, 0x7C53}, //12850 #CJK UNIFIED IDEOGRAPH
+ {0xF5E6, 0x7CF2}, //12851 #CJK UNIFIED IDEOGRAPH
+ {0xF5E7, 0x7E8A}, //12852 #CJK UNIFIED IDEOGRAPH
+ {0xF5E8, 0x7E87}, //12853 #CJK UNIFIED IDEOGRAPH
+ {0xF5E9, 0x7E88}, //12854 #CJK UNIFIED IDEOGRAPH
+ {0xF5EA, 0x7E8B}, //12855 #CJK UNIFIED IDEOGRAPH
+ {0xF5EB, 0x7E86}, //12856 #CJK UNIFIED IDEOGRAPH
+ {0xF5EC, 0x7E8D}, //12857 #CJK UNIFIED IDEOGRAPH
+ {0xF5ED, 0x7F4D}, //12858 #CJK UNIFIED IDEOGRAPH
+ {0xF5EE, 0x7FBB}, //12859 #CJK UNIFIED IDEOGRAPH
+ {0xF5EF, 0x8030}, //12860 #CJK UNIFIED IDEOGRAPH
+ {0xF5F0, 0x81DD}, //12861 #CJK UNIFIED IDEOGRAPH
+ {0xF5F1, 0x8618}, //12862 #CJK UNIFIED IDEOGRAPH
+ {0xF5F2, 0x862A}, //12863 #CJK UNIFIED IDEOGRAPH
+ {0xF5F3, 0x8626}, //12864 #CJK UNIFIED IDEOGRAPH
+ {0xF5F4, 0x861F}, //12865 #CJK UNIFIED IDEOGRAPH
+ {0xF5F5, 0x8623}, //12866 #CJK UNIFIED IDEOGRAPH
+ {0xF5F6, 0x861C}, //12867 #CJK UNIFIED IDEOGRAPH
+ {0xF5F7, 0x8619}, //12868 #CJK UNIFIED IDEOGRAPH
+ {0xF5F8, 0x8627}, //12869 #CJK UNIFIED IDEOGRAPH
+ {0xF5F9, 0x862E}, //12870 #CJK UNIFIED IDEOGRAPH
+ {0xF5FA, 0x8621}, //12871 #CJK UNIFIED IDEOGRAPH
+ {0xF5FB, 0x8620}, //12872 #CJK UNIFIED IDEOGRAPH
+ {0xF5FC, 0x8629}, //12873 #CJK UNIFIED IDEOGRAPH
+ {0xF5FD, 0x861E}, //12874 #CJK UNIFIED IDEOGRAPH
+ {0xF5FE, 0x8625}, //12875 #CJK UNIFIED IDEOGRAPH
+ {0xF640, 0x8829}, //12876 #CJK UNIFIED IDEOGRAPH
+ {0xF641, 0x881D}, //12877 #CJK UNIFIED IDEOGRAPH
+ {0xF642, 0x881B}, //12878 #CJK UNIFIED IDEOGRAPH
+ {0xF643, 0x8820}, //12879 #CJK UNIFIED IDEOGRAPH
+ {0xF644, 0x8824}, //12880 #CJK UNIFIED IDEOGRAPH
+ {0xF645, 0x881C}, //12881 #CJK UNIFIED IDEOGRAPH
+ {0xF646, 0x882B}, //12882 #CJK UNIFIED IDEOGRAPH
+ {0xF647, 0x884A}, //12883 #CJK UNIFIED IDEOGRAPH
+ {0xF648, 0x896D}, //12884 #CJK UNIFIED IDEOGRAPH
+ {0xF649, 0x8969}, //12885 #CJK UNIFIED IDEOGRAPH
+ {0xF64A, 0x896E}, //12886 #CJK UNIFIED IDEOGRAPH
+ {0xF64B, 0x896B}, //12887 #CJK UNIFIED IDEOGRAPH
+ {0xF64C, 0x89FA}, //12888 #CJK UNIFIED IDEOGRAPH
+ {0xF64D, 0x8B79}, //12889 #CJK UNIFIED IDEOGRAPH
+ {0xF64E, 0x8B78}, //12890 #CJK UNIFIED IDEOGRAPH
+ {0xF64F, 0x8B45}, //12891 #CJK UNIFIED IDEOGRAPH
+ {0xF650, 0x8B7A}, //12892 #CJK UNIFIED IDEOGRAPH
+ {0xF651, 0x8B7B}, //12893 #CJK UNIFIED IDEOGRAPH
+ {0xF652, 0x8D10}, //12894 #CJK UNIFIED IDEOGRAPH
+ {0xF653, 0x8D14}, //12895 #CJK UNIFIED IDEOGRAPH
+ {0xF654, 0x8DAF}, //12896 #CJK UNIFIED IDEOGRAPH
+ {0xF655, 0x8E8E}, //12897 #CJK UNIFIED IDEOGRAPH
+ {0xF656, 0x8E8C}, //12898 #CJK UNIFIED IDEOGRAPH
+ {0xF657, 0x8F5E}, //12899 #CJK UNIFIED IDEOGRAPH
+ {0xF658, 0x8F5B}, //12900 #CJK UNIFIED IDEOGRAPH
+ {0xF659, 0x8F5D}, //12901 #CJK UNIFIED IDEOGRAPH
+ {0xF65A, 0x9146}, //12902 #CJK UNIFIED IDEOGRAPH
+ {0xF65B, 0x9144}, //12903 #CJK UNIFIED IDEOGRAPH
+ {0xF65C, 0x9145}, //12904 #CJK UNIFIED IDEOGRAPH
+ {0xF65D, 0x91B9}, //12905 #CJK UNIFIED IDEOGRAPH
+ {0xF65E, 0x943F}, //12906 #CJK UNIFIED IDEOGRAPH
+ {0xF65F, 0x943B}, //12907 #CJK UNIFIED IDEOGRAPH
+ {0xF660, 0x9436}, //12908 #CJK UNIFIED IDEOGRAPH
+ {0xF661, 0x9429}, //12909 #CJK UNIFIED IDEOGRAPH
+ {0xF662, 0x943D}, //12910 #CJK UNIFIED IDEOGRAPH
+ {0xF663, 0x943C}, //12911 #CJK UNIFIED IDEOGRAPH
+ {0xF664, 0x9430}, //12912 #CJK UNIFIED IDEOGRAPH
+ {0xF665, 0x9439}, //12913 #CJK UNIFIED IDEOGRAPH
+ {0xF666, 0x942A}, //12914 #CJK UNIFIED IDEOGRAPH
+ {0xF667, 0x9437}, //12915 #CJK UNIFIED IDEOGRAPH
+ {0xF668, 0x942C}, //12916 #CJK UNIFIED IDEOGRAPH
+ {0xF669, 0x9440}, //12917 #CJK UNIFIED IDEOGRAPH
+ {0xF66A, 0x9431}, //12918 #CJK UNIFIED IDEOGRAPH
+ {0xF66B, 0x95E5}, //12919 #CJK UNIFIED IDEOGRAPH
+ {0xF66C, 0x95E4}, //12920 #CJK UNIFIED IDEOGRAPH
+ {0xF66D, 0x95E3}, //12921 #CJK UNIFIED IDEOGRAPH
+ {0xF66E, 0x9735}, //12922 #CJK UNIFIED IDEOGRAPH
+ {0xF66F, 0x973A}, //12923 #CJK UNIFIED IDEOGRAPH
+ {0xF670, 0x97BF}, //12924 #CJK UNIFIED IDEOGRAPH
+ {0xF671, 0x97E1}, //12925 #CJK UNIFIED IDEOGRAPH
+ {0xF672, 0x9864}, //12926 #CJK UNIFIED IDEOGRAPH
+ {0xF673, 0x98C9}, //12927 #CJK UNIFIED IDEOGRAPH
+ {0xF674, 0x98C6}, //12928 #CJK UNIFIED IDEOGRAPH
+ {0xF675, 0x98C0}, //12929 #CJK UNIFIED IDEOGRAPH
+ {0xF676, 0x9958}, //12930 #CJK UNIFIED IDEOGRAPH
+ {0xF677, 0x9956}, //12931 #CJK UNIFIED IDEOGRAPH
+ {0xF678, 0x9A39}, //12932 #CJK UNIFIED IDEOGRAPH
+ {0xF679, 0x9A3D}, //12933 #CJK UNIFIED IDEOGRAPH
+ {0xF67A, 0x9A46}, //12934 #CJK UNIFIED IDEOGRAPH
+ {0xF67B, 0x9A44}, //12935 #CJK UNIFIED IDEOGRAPH
+ {0xF67C, 0x9A42}, //12936 #CJK UNIFIED IDEOGRAPH
+ {0xF67D, 0x9A41}, //12937 #CJK UNIFIED IDEOGRAPH
+ {0xF67E, 0x9A3A}, //12938 #CJK UNIFIED IDEOGRAPH
+ {0xF6A1, 0x9A3F}, //12939 #CJK UNIFIED IDEOGRAPH
+ {0xF6A2, 0x9ACD}, //12940 #CJK UNIFIED IDEOGRAPH
+ {0xF6A3, 0x9B15}, //12941 #CJK UNIFIED IDEOGRAPH
+ {0xF6A4, 0x9B17}, //12942 #CJK UNIFIED IDEOGRAPH
+ {0xF6A5, 0x9B18}, //12943 #CJK UNIFIED IDEOGRAPH
+ {0xF6A6, 0x9B16}, //12944 #CJK UNIFIED IDEOGRAPH
+ {0xF6A7, 0x9B3A}, //12945 #CJK UNIFIED IDEOGRAPH
+ {0xF6A8, 0x9B52}, //12946 #CJK UNIFIED IDEOGRAPH
+ {0xF6A9, 0x9C2B}, //12947 #CJK UNIFIED IDEOGRAPH
+ {0xF6AA, 0x9C1D}, //12948 #CJK UNIFIED IDEOGRAPH
+ {0xF6AB, 0x9C1C}, //12949 #CJK UNIFIED IDEOGRAPH
+ {0xF6AC, 0x9C2C}, //12950 #CJK UNIFIED IDEOGRAPH
+ {0xF6AD, 0x9C23}, //12951 #CJK UNIFIED IDEOGRAPH
+ {0xF6AE, 0x9C28}, //12952 #CJK UNIFIED IDEOGRAPH
+ {0xF6AF, 0x9C29}, //12953 #CJK UNIFIED IDEOGRAPH
+ {0xF6B0, 0x9C24}, //12954 #CJK UNIFIED IDEOGRAPH
+ {0xF6B1, 0x9C21}, //12955 #CJK UNIFIED IDEOGRAPH
+ {0xF6B2, 0x9DB7}, //12956 #CJK UNIFIED IDEOGRAPH
+ {0xF6B3, 0x9DB6}, //12957 #CJK UNIFIED IDEOGRAPH
+ {0xF6B4, 0x9DBC}, //12958 #CJK UNIFIED IDEOGRAPH
+ {0xF6B5, 0x9DC1}, //12959 #CJK UNIFIED IDEOGRAPH
+ {0xF6B6, 0x9DC7}, //12960 #CJK UNIFIED IDEOGRAPH
+ {0xF6B7, 0x9DCA}, //12961 #CJK UNIFIED IDEOGRAPH
+ {0xF6B8, 0x9DCF}, //12962 #CJK UNIFIED IDEOGRAPH
+ {0xF6B9, 0x9DBE}, //12963 #CJK UNIFIED IDEOGRAPH
+ {0xF6BA, 0x9DC5}, //12964 #CJK UNIFIED IDEOGRAPH
+ {0xF6BB, 0x9DC3}, //12965 #CJK UNIFIED IDEOGRAPH
+ {0xF6BC, 0x9DBB}, //12966 #CJK UNIFIED IDEOGRAPH
+ {0xF6BD, 0x9DB5}, //12967 #CJK UNIFIED IDEOGRAPH
+ {0xF6BE, 0x9DCE}, //12968 #CJK UNIFIED IDEOGRAPH
+ {0xF6BF, 0x9DB9}, //12969 #CJK UNIFIED IDEOGRAPH
+ {0xF6C0, 0x9DBA}, //12970 #CJK UNIFIED IDEOGRAPH
+ {0xF6C1, 0x9DAC}, //12971 #CJK UNIFIED IDEOGRAPH
+ {0xF6C2, 0x9DC8}, //12972 #CJK UNIFIED IDEOGRAPH
+ {0xF6C3, 0x9DB1}, //12973 #CJK UNIFIED IDEOGRAPH
+ {0xF6C4, 0x9DAD}, //12974 #CJK UNIFIED IDEOGRAPH
+ {0xF6C5, 0x9DCC}, //12975 #CJK UNIFIED IDEOGRAPH
+ {0xF6C6, 0x9DB3}, //12976 #CJK UNIFIED IDEOGRAPH
+ {0xF6C7, 0x9DCD}, //12977 #CJK UNIFIED IDEOGRAPH
+ {0xF6C8, 0x9DB2}, //12978 #CJK UNIFIED IDEOGRAPH
+ {0xF6C9, 0x9E7A}, //12979 #CJK UNIFIED IDEOGRAPH
+ {0xF6CA, 0x9E9C}, //12980 #CJK UNIFIED IDEOGRAPH
+ {0xF6CB, 0x9EEB}, //12981 #CJK UNIFIED IDEOGRAPH
+ {0xF6CC, 0x9EEE}, //12982 #CJK UNIFIED IDEOGRAPH
+ {0xF6CD, 0x9EED}, //12983 #CJK UNIFIED IDEOGRAPH
+ {0xF6CE, 0x9F1B}, //12984 #CJK UNIFIED IDEOGRAPH
+ {0xF6CF, 0x9F18}, //12985 #CJK UNIFIED IDEOGRAPH
+ {0xF6D0, 0x9F1A}, //12986 #CJK UNIFIED IDEOGRAPH
+ {0xF6D1, 0x9F31}, //12987 #CJK UNIFIED IDEOGRAPH
+ {0xF6D2, 0x9F4E}, //12988 #CJK UNIFIED IDEOGRAPH
+ {0xF6D3, 0x9F65}, //12989 #CJK UNIFIED IDEOGRAPH
+ {0xF6D4, 0x9F64}, //12990 #CJK UNIFIED IDEOGRAPH
+ {0xF6D5, 0x9F92}, //12991 #CJK UNIFIED IDEOGRAPH
+ {0xF6D6, 0x4EB9}, //12992 #CJK UNIFIED IDEOGRAPH
+ {0xF6D7, 0x56C6}, //12993 #CJK UNIFIED IDEOGRAPH
+ {0xF6D8, 0x56C5}, //12994 #CJK UNIFIED IDEOGRAPH
+ {0xF6D9, 0x56CB}, //12995 #CJK UNIFIED IDEOGRAPH
+ {0xF6DA, 0x5971}, //12996 #CJK UNIFIED IDEOGRAPH
+ {0xF6DB, 0x5B4B}, //12997 #CJK UNIFIED IDEOGRAPH
+ {0xF6DC, 0x5B4C}, //12998 #CJK UNIFIED IDEOGRAPH
+ {0xF6DD, 0x5DD5}, //12999 #CJK UNIFIED IDEOGRAPH
+ {0xF6DE, 0x5DD1}, //13000 #CJK UNIFIED IDEOGRAPH
+ {0xF6DF, 0x5EF2}, //13001 #CJK UNIFIED IDEOGRAPH
+ {0xF6E0, 0x6521}, //13002 #CJK UNIFIED IDEOGRAPH
+ {0xF6E1, 0x6520}, //13003 #CJK UNIFIED IDEOGRAPH
+ {0xF6E2, 0x6526}, //13004 #CJK UNIFIED IDEOGRAPH
+ {0xF6E3, 0x6522}, //13005 #CJK UNIFIED IDEOGRAPH
+ {0xF6E4, 0x6B0B}, //13006 #CJK UNIFIED IDEOGRAPH
+ {0xF6E5, 0x6B08}, //13007 #CJK UNIFIED IDEOGRAPH
+ {0xF6E6, 0x6B09}, //13008 #CJK UNIFIED IDEOGRAPH
+ {0xF6E7, 0x6C0D}, //13009 #CJK UNIFIED IDEOGRAPH
+ {0xF6E8, 0x7055}, //13010 #CJK UNIFIED IDEOGRAPH
+ {0xF6E9, 0x7056}, //13011 #CJK UNIFIED IDEOGRAPH
+ {0xF6EA, 0x7057}, //13012 #CJK UNIFIED IDEOGRAPH
+ {0xF6EB, 0x7052}, //13013 #CJK UNIFIED IDEOGRAPH
+ {0xF6EC, 0x721E}, //13014 #CJK UNIFIED IDEOGRAPH
+ {0xF6ED, 0x721F}, //13015 #CJK UNIFIED IDEOGRAPH
+ {0xF6EE, 0x72A9}, //13016 #CJK UNIFIED IDEOGRAPH
+ {0xF6EF, 0x737F}, //13017 #CJK UNIFIED IDEOGRAPH
+ {0xF6F0, 0x74D8}, //13018 #CJK UNIFIED IDEOGRAPH
+ {0xF6F1, 0x74D5}, //13019 #CJK UNIFIED IDEOGRAPH
+ {0xF6F2, 0x74D9}, //13020 #CJK UNIFIED IDEOGRAPH
+ {0xF6F3, 0x74D7}, //13021 #CJK UNIFIED IDEOGRAPH
+ {0xF6F4, 0x766D}, //13022 #CJK UNIFIED IDEOGRAPH
+ {0xF6F5, 0x76AD}, //13023 #CJK UNIFIED IDEOGRAPH
+ {0xF6F6, 0x7935}, //13024 #CJK UNIFIED IDEOGRAPH
+ {0xF6F7, 0x79B4}, //13025 #CJK UNIFIED IDEOGRAPH
+ {0xF6F8, 0x7A70}, //13026 #CJK UNIFIED IDEOGRAPH
+ {0xF6F9, 0x7A71}, //13027 #CJK UNIFIED IDEOGRAPH
+ {0xF6FA, 0x7C57}, //13028 #CJK UNIFIED IDEOGRAPH
+ {0xF6FB, 0x7C5C}, //13029 #CJK UNIFIED IDEOGRAPH
+ {0xF6FC, 0x7C59}, //13030 #CJK UNIFIED IDEOGRAPH
+ {0xF6FD, 0x7C5B}, //13031 #CJK UNIFIED IDEOGRAPH
+ {0xF6FE, 0x7C5A}, //13032 #CJK UNIFIED IDEOGRAPH
+ {0xF740, 0x7CF4}, //13033 #CJK UNIFIED IDEOGRAPH
+ {0xF741, 0x7CF1}, //13034 #CJK UNIFIED IDEOGRAPH
+ {0xF742, 0x7E91}, //13035 #CJK UNIFIED IDEOGRAPH
+ {0xF743, 0x7F4F}, //13036 #CJK UNIFIED IDEOGRAPH
+ {0xF744, 0x7F87}, //13037 #CJK UNIFIED IDEOGRAPH
+ {0xF745, 0x81DE}, //13038 #CJK UNIFIED IDEOGRAPH
+ {0xF746, 0x826B}, //13039 #CJK UNIFIED IDEOGRAPH
+ {0xF747, 0x8634}, //13040 #CJK UNIFIED IDEOGRAPH
+ {0xF748, 0x8635}, //13041 #CJK UNIFIED IDEOGRAPH
+ {0xF749, 0x8633}, //13042 #CJK UNIFIED IDEOGRAPH
+ {0xF74A, 0x862C}, //13043 #CJK UNIFIED IDEOGRAPH
+ {0xF74B, 0x8632}, //13044 #CJK UNIFIED IDEOGRAPH
+ {0xF74C, 0x8636}, //13045 #CJK UNIFIED IDEOGRAPH
+ {0xF74D, 0x882C}, //13046 #CJK UNIFIED IDEOGRAPH
+ {0xF74E, 0x8828}, //13047 #CJK UNIFIED IDEOGRAPH
+ {0xF74F, 0x8826}, //13048 #CJK UNIFIED IDEOGRAPH
+ {0xF750, 0x882A}, //13049 #CJK UNIFIED IDEOGRAPH
+ {0xF751, 0x8825}, //13050 #CJK UNIFIED IDEOGRAPH
+ {0xF752, 0x8971}, //13051 #CJK UNIFIED IDEOGRAPH
+ {0xF753, 0x89BF}, //13052 #CJK UNIFIED IDEOGRAPH
+ {0xF754, 0x89BE}, //13053 #CJK UNIFIED IDEOGRAPH
+ {0xF755, 0x89FB}, //13054 #CJK UNIFIED IDEOGRAPH
+ {0xF756, 0x8B7E}, //13055 #CJK UNIFIED IDEOGRAPH
+ {0xF757, 0x8B84}, //13056 #CJK UNIFIED IDEOGRAPH
+ {0xF758, 0x8B82}, //13057 #CJK UNIFIED IDEOGRAPH
+ {0xF759, 0x8B86}, //13058 #CJK UNIFIED IDEOGRAPH
+ {0xF75A, 0x8B85}, //13059 #CJK UNIFIED IDEOGRAPH
+ {0xF75B, 0x8B7F}, //13060 #CJK UNIFIED IDEOGRAPH
+ {0xF75C, 0x8D15}, //13061 #CJK UNIFIED IDEOGRAPH
+ {0xF75D, 0x8E95}, //13062 #CJK UNIFIED IDEOGRAPH
+ {0xF75E, 0x8E94}, //13063 #CJK UNIFIED IDEOGRAPH
+ {0xF75F, 0x8E9A}, //13064 #CJK UNIFIED IDEOGRAPH
+ {0xF760, 0x8E92}, //13065 #CJK UNIFIED IDEOGRAPH
+ {0xF761, 0x8E90}, //13066 #CJK UNIFIED IDEOGRAPH
+ {0xF762, 0x8E96}, //13067 #CJK UNIFIED IDEOGRAPH
+ {0xF763, 0x8E97}, //13068 #CJK UNIFIED IDEOGRAPH
+ {0xF764, 0x8F60}, //13069 #CJK UNIFIED IDEOGRAPH
+ {0xF765, 0x8F62}, //13070 #CJK UNIFIED IDEOGRAPH
+ {0xF766, 0x9147}, //13071 #CJK UNIFIED IDEOGRAPH
+ {0xF767, 0x944C}, //13072 #CJK UNIFIED IDEOGRAPH
+ {0xF768, 0x9450}, //13073 #CJK UNIFIED IDEOGRAPH
+ {0xF769, 0x944A}, //13074 #CJK UNIFIED IDEOGRAPH
+ {0xF76A, 0x944B}, //13075 #CJK UNIFIED IDEOGRAPH
+ {0xF76B, 0x944F}, //13076 #CJK UNIFIED IDEOGRAPH
+ {0xF76C, 0x9447}, //13077 #CJK UNIFIED IDEOGRAPH
+ {0xF76D, 0x9445}, //13078 #CJK UNIFIED IDEOGRAPH
+ {0xF76E, 0x9448}, //13079 #CJK UNIFIED IDEOGRAPH
+ {0xF76F, 0x9449}, //13080 #CJK UNIFIED IDEOGRAPH
+ {0xF770, 0x9446}, //13081 #CJK UNIFIED IDEOGRAPH
+ {0xF771, 0x973F}, //13082 #CJK UNIFIED IDEOGRAPH
+ {0xF772, 0x97E3}, //13083 #CJK UNIFIED IDEOGRAPH
+ {0xF773, 0x986A}, //13084 #CJK UNIFIED IDEOGRAPH
+ {0xF774, 0x9869}, //13085 #CJK UNIFIED IDEOGRAPH
+ {0xF775, 0x98CB}, //13086 #CJK UNIFIED IDEOGRAPH
+ {0xF776, 0x9954}, //13087 #CJK UNIFIED IDEOGRAPH
+ {0xF777, 0x995B}, //13088 #CJK UNIFIED IDEOGRAPH
+ {0xF778, 0x9A4E}, //13089 #CJK UNIFIED IDEOGRAPH
+ {0xF779, 0x9A53}, //13090 #CJK UNIFIED IDEOGRAPH
+ {0xF77A, 0x9A54}, //13091 #CJK UNIFIED IDEOGRAPH
+ {0xF77B, 0x9A4C}, //13092 #CJK UNIFIED IDEOGRAPH
+ {0xF77C, 0x9A4F}, //13093 #CJK UNIFIED IDEOGRAPH
+ {0xF77D, 0x9A48}, //13094 #CJK UNIFIED IDEOGRAPH
+ {0xF77E, 0x9A4A}, //13095 #CJK UNIFIED IDEOGRAPH
+ {0xF7A1, 0x9A49}, //13096 #CJK UNIFIED IDEOGRAPH
+ {0xF7A2, 0x9A52}, //13097 #CJK UNIFIED IDEOGRAPH
+ {0xF7A3, 0x9A50}, //13098 #CJK UNIFIED IDEOGRAPH
+ {0xF7A4, 0x9AD0}, //13099 #CJK UNIFIED IDEOGRAPH
+ {0xF7A5, 0x9B19}, //13100 #CJK UNIFIED IDEOGRAPH
+ {0xF7A6, 0x9B2B}, //13101 #CJK UNIFIED IDEOGRAPH
+ {0xF7A7, 0x9B3B}, //13102 #CJK UNIFIED IDEOGRAPH
+ {0xF7A8, 0x9B56}, //13103 #CJK UNIFIED IDEOGRAPH
+ {0xF7A9, 0x9B55}, //13104 #CJK UNIFIED IDEOGRAPH
+ {0xF7AA, 0x9C46}, //13105 #CJK UNIFIED IDEOGRAPH
+ {0xF7AB, 0x9C48}, //13106 #CJK UNIFIED IDEOGRAPH
+ {0xF7AC, 0x9C3F}, //13107 #CJK UNIFIED IDEOGRAPH
+ {0xF7AD, 0x9C44}, //13108 #CJK UNIFIED IDEOGRAPH
+ {0xF7AE, 0x9C39}, //13109 #CJK UNIFIED IDEOGRAPH
+ {0xF7AF, 0x9C33}, //13110 #CJK UNIFIED IDEOGRAPH
+ {0xF7B0, 0x9C41}, //13111 #CJK UNIFIED IDEOGRAPH
+ {0xF7B1, 0x9C3C}, //13112 #CJK UNIFIED IDEOGRAPH
+ {0xF7B2, 0x9C37}, //13113 #CJK UNIFIED IDEOGRAPH
+ {0xF7B3, 0x9C34}, //13114 #CJK UNIFIED IDEOGRAPH
+ {0xF7B4, 0x9C32}, //13115 #CJK UNIFIED IDEOGRAPH
+ {0xF7B5, 0x9C3D}, //13116 #CJK UNIFIED IDEOGRAPH
+ {0xF7B6, 0x9C36}, //13117 #CJK UNIFIED IDEOGRAPH
+ {0xF7B7, 0x9DDB}, //13118 #CJK UNIFIED IDEOGRAPH
+ {0xF7B8, 0x9DD2}, //13119 #CJK UNIFIED IDEOGRAPH
+ {0xF7B9, 0x9DDE}, //13120 #CJK UNIFIED IDEOGRAPH
+ {0xF7BA, 0x9DDA}, //13121 #CJK UNIFIED IDEOGRAPH
+ {0xF7BB, 0x9DCB}, //13122 #CJK UNIFIED IDEOGRAPH
+ {0xF7BC, 0x9DD0}, //13123 #CJK UNIFIED IDEOGRAPH
+ {0xF7BD, 0x9DDC}, //13124 #CJK UNIFIED IDEOGRAPH
+ {0xF7BE, 0x9DD1}, //13125 #CJK UNIFIED IDEOGRAPH
+ {0xF7BF, 0x9DDF}, //13126 #CJK UNIFIED IDEOGRAPH
+ {0xF7C0, 0x9DE9}, //13127 #CJK UNIFIED IDEOGRAPH
+ {0xF7C1, 0x9DD9}, //13128 #CJK UNIFIED IDEOGRAPH
+ {0xF7C2, 0x9DD8}, //13129 #CJK UNIFIED IDEOGRAPH
+ {0xF7C3, 0x9DD6}, //13130 #CJK UNIFIED IDEOGRAPH
+ {0xF7C4, 0x9DF5}, //13131 #CJK UNIFIED IDEOGRAPH
+ {0xF7C5, 0x9DD5}, //13132 #CJK UNIFIED IDEOGRAPH
+ {0xF7C6, 0x9DDD}, //13133 #CJK UNIFIED IDEOGRAPH
+ {0xF7C7, 0x9EB6}, //13134 #CJK UNIFIED IDEOGRAPH
+ {0xF7C8, 0x9EF0}, //13135 #CJK UNIFIED IDEOGRAPH
+ {0xF7C9, 0x9F35}, //13136 #CJK UNIFIED IDEOGRAPH
+ {0xF7CA, 0x9F33}, //13137 #CJK UNIFIED IDEOGRAPH
+ {0xF7CB, 0x9F32}, //13138 #CJK UNIFIED IDEOGRAPH
+ {0xF7CC, 0x9F42}, //13139 #CJK UNIFIED IDEOGRAPH
+ {0xF7CD, 0x9F6B}, //13140 #CJK UNIFIED IDEOGRAPH
+ {0xF7CE, 0x9F95}, //13141 #CJK UNIFIED IDEOGRAPH
+ {0xF7CF, 0x9FA2}, //13142 #CJK UNIFIED IDEOGRAPH
+ {0xF7D0, 0x513D}, //13143 #CJK UNIFIED IDEOGRAPH
+ {0xF7D1, 0x5299}, //13144 #CJK UNIFIED IDEOGRAPH
+ {0xF7D2, 0x58E8}, //13145 #CJK UNIFIED IDEOGRAPH
+ {0xF7D3, 0x58E7}, //13146 #CJK UNIFIED IDEOGRAPH
+ {0xF7D4, 0x5972}, //13147 #CJK UNIFIED IDEOGRAPH
+ {0xF7D5, 0x5B4D}, //13148 #CJK UNIFIED IDEOGRAPH
+ {0xF7D6, 0x5DD8}, //13149 #CJK UNIFIED IDEOGRAPH
+ {0xF7D7, 0x882F}, //13150 #CJK UNIFIED IDEOGRAPH
+ {0xF7D8, 0x5F4F}, //13151 #CJK UNIFIED IDEOGRAPH
+ {0xF7D9, 0x6201}, //13152 #CJK UNIFIED IDEOGRAPH
+ {0xF7DA, 0x6203}, //13153 #CJK UNIFIED IDEOGRAPH
+ {0xF7DB, 0x6204}, //13154 #CJK UNIFIED IDEOGRAPH
+ {0xF7DC, 0x6529}, //13155 #CJK UNIFIED IDEOGRAPH
+ {0xF7DD, 0x6525}, //13156 #CJK UNIFIED IDEOGRAPH
+ {0xF7DE, 0x6596}, //13157 #CJK UNIFIED IDEOGRAPH
+ {0xF7DF, 0x66EB}, //13158 #CJK UNIFIED IDEOGRAPH
+ {0xF7E0, 0x6B11}, //13159 #CJK UNIFIED IDEOGRAPH
+ {0xF7E1, 0x6B12}, //13160 #CJK UNIFIED IDEOGRAPH
+ {0xF7E2, 0x6B0F}, //13161 #CJK UNIFIED IDEOGRAPH
+ {0xF7E3, 0x6BCA}, //13162 #CJK UNIFIED IDEOGRAPH
+ {0xF7E4, 0x705B}, //13163 #CJK UNIFIED IDEOGRAPH
+ {0xF7E5, 0x705A}, //13164 #CJK UNIFIED IDEOGRAPH
+ {0xF7E6, 0x7222}, //13165 #CJK UNIFIED IDEOGRAPH
+ {0xF7E7, 0x7382}, //13166 #CJK UNIFIED IDEOGRAPH
+ {0xF7E8, 0x7381}, //13167 #CJK UNIFIED IDEOGRAPH
+ {0xF7E9, 0x7383}, //13168 #CJK UNIFIED IDEOGRAPH
+ {0xF7EA, 0x7670}, //13169 #CJK UNIFIED IDEOGRAPH
+ {0xF7EB, 0x77D4}, //13170 #CJK UNIFIED IDEOGRAPH
+ {0xF7EC, 0x7C67}, //13171 #CJK UNIFIED IDEOGRAPH
+ {0xF7ED, 0x7C66}, //13172 #CJK UNIFIED IDEOGRAPH
+ {0xF7EE, 0x7E95}, //13173 #CJK UNIFIED IDEOGRAPH
+ {0xF7EF, 0x826C}, //13174 #CJK UNIFIED IDEOGRAPH
+ {0xF7F0, 0x863A}, //13175 #CJK UNIFIED IDEOGRAPH
+ {0xF7F1, 0x8640}, //13176 #CJK UNIFIED IDEOGRAPH
+ {0xF7F2, 0x8639}, //13177 #CJK UNIFIED IDEOGRAPH
+ {0xF7F3, 0x863C}, //13178 #CJK UNIFIED IDEOGRAPH
+ {0xF7F4, 0x8631}, //13179 #CJK UNIFIED IDEOGRAPH
+ {0xF7F5, 0x863B}, //13180 #CJK UNIFIED IDEOGRAPH
+ {0xF7F6, 0x863E}, //13181 #CJK UNIFIED IDEOGRAPH
+ {0xF7F7, 0x8830}, //13182 #CJK UNIFIED IDEOGRAPH
+ {0xF7F8, 0x8832}, //13183 #CJK UNIFIED IDEOGRAPH
+ {0xF7F9, 0x882E}, //13184 #CJK UNIFIED IDEOGRAPH
+ {0xF7FA, 0x8833}, //13185 #CJK UNIFIED IDEOGRAPH
+ {0xF7FB, 0x8976}, //13186 #CJK UNIFIED IDEOGRAPH
+ {0xF7FC, 0x8974}, //13187 #CJK UNIFIED IDEOGRAPH
+ {0xF7FD, 0x8973}, //13188 #CJK UNIFIED IDEOGRAPH
+ {0xF7FE, 0x89FE}, //13189 #CJK UNIFIED IDEOGRAPH
+ {0xF840, 0x8B8C}, //13190 #CJK UNIFIED IDEOGRAPH
+ {0xF841, 0x8B8E}, //13191 #CJK UNIFIED IDEOGRAPH
+ {0xF842, 0x8B8B}, //13192 #CJK UNIFIED IDEOGRAPH
+ {0xF843, 0x8B88}, //13193 #CJK UNIFIED IDEOGRAPH
+ {0xF844, 0x8C45}, //13194 #CJK UNIFIED IDEOGRAPH
+ {0xF845, 0x8D19}, //13195 #CJK UNIFIED IDEOGRAPH
+ {0xF846, 0x8E98}, //13196 #CJK UNIFIED IDEOGRAPH
+ {0xF847, 0x8F64}, //13197 #CJK UNIFIED IDEOGRAPH
+ {0xF848, 0x8F63}, //13198 #CJK UNIFIED IDEOGRAPH
+ {0xF849, 0x91BC}, //13199 #CJK UNIFIED IDEOGRAPH
+ {0xF84A, 0x9462}, //13200 #CJK UNIFIED IDEOGRAPH
+ {0xF84B, 0x9455}, //13201 #CJK UNIFIED IDEOGRAPH
+ {0xF84C, 0x945D}, //13202 #CJK UNIFIED IDEOGRAPH
+ {0xF84D, 0x9457}, //13203 #CJK UNIFIED IDEOGRAPH
+ {0xF84E, 0x945E}, //13204 #CJK UNIFIED IDEOGRAPH
+ {0xF84F, 0x97C4}, //13205 #CJK UNIFIED IDEOGRAPH
+ {0xF850, 0x97C5}, //13206 #CJK UNIFIED IDEOGRAPH
+ {0xF851, 0x9800}, //13207 #CJK UNIFIED IDEOGRAPH
+ {0xF852, 0x9A56}, //13208 #CJK UNIFIED IDEOGRAPH
+ {0xF853, 0x9A59}, //13209 #CJK UNIFIED IDEOGRAPH
+ {0xF854, 0x9B1E}, //13210 #CJK UNIFIED IDEOGRAPH
+ {0xF855, 0x9B1F}, //13211 #CJK UNIFIED IDEOGRAPH
+ {0xF856, 0x9B20}, //13212 #CJK UNIFIED IDEOGRAPH
+ {0xF857, 0x9C52}, //13213 #CJK UNIFIED IDEOGRAPH
+ {0xF858, 0x9C58}, //13214 #CJK UNIFIED IDEOGRAPH
+ {0xF859, 0x9C50}, //13215 #CJK UNIFIED IDEOGRAPH
+ {0xF85A, 0x9C4A}, //13216 #CJK UNIFIED IDEOGRAPH
+ {0xF85B, 0x9C4D}, //13217 #CJK UNIFIED IDEOGRAPH
+ {0xF85C, 0x9C4B}, //13218 #CJK UNIFIED IDEOGRAPH
+ {0xF85D, 0x9C55}, //13219 #CJK UNIFIED IDEOGRAPH
+ {0xF85E, 0x9C59}, //13220 #CJK UNIFIED IDEOGRAPH
+ {0xF85F, 0x9C4C}, //13221 #CJK UNIFIED IDEOGRAPH
+ {0xF860, 0x9C4E}, //13222 #CJK UNIFIED IDEOGRAPH
+ {0xF861, 0x9DFB}, //13223 #CJK UNIFIED IDEOGRAPH
+ {0xF862, 0x9DF7}, //13224 #CJK UNIFIED IDEOGRAPH
+ {0xF863, 0x9DEF}, //13225 #CJK UNIFIED IDEOGRAPH
+ {0xF864, 0x9DE3}, //13226 #CJK UNIFIED IDEOGRAPH
+ {0xF865, 0x9DEB}, //13227 #CJK UNIFIED IDEOGRAPH
+ {0xF866, 0x9DF8}, //13228 #CJK UNIFIED IDEOGRAPH
+ {0xF867, 0x9DE4}, //13229 #CJK UNIFIED IDEOGRAPH
+ {0xF868, 0x9DF6}, //13230 #CJK UNIFIED IDEOGRAPH
+ {0xF869, 0x9DE1}, //13231 #CJK UNIFIED IDEOGRAPH
+ {0xF86A, 0x9DEE}, //13232 #CJK UNIFIED IDEOGRAPH
+ {0xF86B, 0x9DE6}, //13233 #CJK UNIFIED IDEOGRAPH
+ {0xF86C, 0x9DF2}, //13234 #CJK UNIFIED IDEOGRAPH
+ {0xF86D, 0x9DF0}, //13235 #CJK UNIFIED IDEOGRAPH
+ {0xF86E, 0x9DE2}, //13236 #CJK UNIFIED IDEOGRAPH
+ {0xF86F, 0x9DEC}, //13237 #CJK UNIFIED IDEOGRAPH
+ {0xF870, 0x9DF4}, //13238 #CJK UNIFIED IDEOGRAPH
+ {0xF871, 0x9DF3}, //13239 #CJK UNIFIED IDEOGRAPH
+ {0xF872, 0x9DE8}, //13240 #CJK UNIFIED IDEOGRAPH
+ {0xF873, 0x9DED}, //13241 #CJK UNIFIED IDEOGRAPH
+ {0xF874, 0x9EC2}, //13242 #CJK UNIFIED IDEOGRAPH
+ {0xF875, 0x9ED0}, //13243 #CJK UNIFIED IDEOGRAPH
+ {0xF876, 0x9EF2}, //13244 #CJK UNIFIED IDEOGRAPH
+ {0xF877, 0x9EF3}, //13245 #CJK UNIFIED IDEOGRAPH
+ {0xF878, 0x9F06}, //13246 #CJK UNIFIED IDEOGRAPH
+ {0xF879, 0x9F1C}, //13247 #CJK UNIFIED IDEOGRAPH
+ {0xF87A, 0x9F38}, //13248 #CJK UNIFIED IDEOGRAPH
+ {0xF87B, 0x9F37}, //13249 #CJK UNIFIED IDEOGRAPH
+ {0xF87C, 0x9F36}, //13250 #CJK UNIFIED IDEOGRAPH
+ {0xF87D, 0x9F43}, //13251 #CJK UNIFIED IDEOGRAPH
+ {0xF87E, 0x9F4F}, //13252 #CJK UNIFIED IDEOGRAPH
+ {0xF8A1, 0x9F71}, //13253 #CJK UNIFIED IDEOGRAPH
+ {0xF8A2, 0x9F70}, //13254 #CJK UNIFIED IDEOGRAPH
+ {0xF8A3, 0x9F6E}, //13255 #CJK UNIFIED IDEOGRAPH
+ {0xF8A4, 0x9F6F}, //13256 #CJK UNIFIED IDEOGRAPH
+ {0xF8A5, 0x56D3}, //13257 #CJK UNIFIED IDEOGRAPH
+ {0xF8A6, 0x56CD}, //13258 #CJK UNIFIED IDEOGRAPH
+ {0xF8A7, 0x5B4E}, //13259 #CJK UNIFIED IDEOGRAPH
+ {0xF8A8, 0x5C6D}, //13260 #CJK UNIFIED IDEOGRAPH
+ {0xF8A9, 0x652D}, //13261 #CJK UNIFIED IDEOGRAPH
+ {0xF8AA, 0x66ED}, //13262 #CJK UNIFIED IDEOGRAPH
+ {0xF8AB, 0x66EE}, //13263 #CJK UNIFIED IDEOGRAPH
+ {0xF8AC, 0x6B13}, //13264 #CJK UNIFIED IDEOGRAPH
+ {0xF8AD, 0x705F}, //13265 #CJK UNIFIED IDEOGRAPH
+ {0xF8AE, 0x7061}, //13266 #CJK UNIFIED IDEOGRAPH
+ {0xF8AF, 0x705D}, //13267 #CJK UNIFIED IDEOGRAPH
+ {0xF8B0, 0x7060}, //13268 #CJK UNIFIED IDEOGRAPH
+ {0xF8B1, 0x7223}, //13269 #CJK UNIFIED IDEOGRAPH
+ {0xF8B2, 0x74DB}, //13270 #CJK UNIFIED IDEOGRAPH
+ {0xF8B3, 0x74E5}, //13271 #CJK UNIFIED IDEOGRAPH
+ {0xF8B4, 0x77D5}, //13272 #CJK UNIFIED IDEOGRAPH
+ {0xF8B5, 0x7938}, //13273 #CJK UNIFIED IDEOGRAPH
+ {0xF8B6, 0x79B7}, //13274 #CJK UNIFIED IDEOGRAPH
+ {0xF8B7, 0x79B6}, //13275 #CJK UNIFIED IDEOGRAPH
+ {0xF8B8, 0x7C6A}, //13276 #CJK UNIFIED IDEOGRAPH
+ {0xF8B9, 0x7E97}, //13277 #CJK UNIFIED IDEOGRAPH
+ {0xF8BA, 0x7F89}, //13278 #CJK UNIFIED IDEOGRAPH
+ {0xF8BB, 0x826D}, //13279 #CJK UNIFIED IDEOGRAPH
+ {0xF8BC, 0x8643}, //13280 #CJK UNIFIED IDEOGRAPH
+ {0xF8BD, 0x8838}, //13281 #CJK UNIFIED IDEOGRAPH
+ {0xF8BE, 0x8837}, //13282 #CJK UNIFIED IDEOGRAPH
+ {0xF8BF, 0x8835}, //13283 #CJK UNIFIED IDEOGRAPH
+ {0xF8C0, 0x884B}, //13284 #CJK UNIFIED IDEOGRAPH
+ {0xF8C1, 0x8B94}, //13285 #CJK UNIFIED IDEOGRAPH
+ {0xF8C2, 0x8B95}, //13286 #CJK UNIFIED IDEOGRAPH
+ {0xF8C3, 0x8E9E}, //13287 #CJK UNIFIED IDEOGRAPH
+ {0xF8C4, 0x8E9F}, //13288 #CJK UNIFIED IDEOGRAPH
+ {0xF8C5, 0x8EA0}, //13289 #CJK UNIFIED IDEOGRAPH
+ {0xF8C6, 0x8E9D}, //13290 #CJK UNIFIED IDEOGRAPH
+ {0xF8C7, 0x91BE}, //13291 #CJK UNIFIED IDEOGRAPH
+ {0xF8C8, 0x91BD}, //13292 #CJK UNIFIED IDEOGRAPH
+ {0xF8C9, 0x91C2}, //13293 #CJK UNIFIED IDEOGRAPH
+ {0xF8CA, 0x946B}, //13294 #CJK UNIFIED IDEOGRAPH
+ {0xF8CB, 0x9468}, //13295 #CJK UNIFIED IDEOGRAPH
+ {0xF8CC, 0x9469}, //13296 #CJK UNIFIED IDEOGRAPH
+ {0xF8CD, 0x96E5}, //13297 #CJK UNIFIED IDEOGRAPH
+ {0xF8CE, 0x9746}, //13298 #CJK UNIFIED IDEOGRAPH
+ {0xF8CF, 0x9743}, //13299 #CJK UNIFIED IDEOGRAPH
+ {0xF8D0, 0x9747}, //13300 #CJK UNIFIED IDEOGRAPH
+ {0xF8D1, 0x97C7}, //13301 #CJK UNIFIED IDEOGRAPH
+ {0xF8D2, 0x97E5}, //13302 #CJK UNIFIED IDEOGRAPH
+ {0xF8D3, 0x9A5E}, //13303 #CJK UNIFIED IDEOGRAPH
+ {0xF8D4, 0x9AD5}, //13304 #CJK UNIFIED IDEOGRAPH
+ {0xF8D5, 0x9B59}, //13305 #CJK UNIFIED IDEOGRAPH
+ {0xF8D6, 0x9C63}, //13306 #CJK UNIFIED IDEOGRAPH
+ {0xF8D7, 0x9C67}, //13307 #CJK UNIFIED IDEOGRAPH
+ {0xF8D8, 0x9C66}, //13308 #CJK UNIFIED IDEOGRAPH
+ {0xF8D9, 0x9C62}, //13309 #CJK UNIFIED IDEOGRAPH
+ {0xF8DA, 0x9C5E}, //13310 #CJK UNIFIED IDEOGRAPH
+ {0xF8DB, 0x9C60}, //13311 #CJK UNIFIED IDEOGRAPH
+ {0xF8DC, 0x9E02}, //13312 #CJK UNIFIED IDEOGRAPH
+ {0xF8DD, 0x9DFE}, //13313 #CJK UNIFIED IDEOGRAPH
+ {0xF8DE, 0x9E07}, //13314 #CJK UNIFIED IDEOGRAPH
+ {0xF8DF, 0x9E03}, //13315 #CJK UNIFIED IDEOGRAPH
+ {0xF8E0, 0x9E06}, //13316 #CJK UNIFIED IDEOGRAPH
+ {0xF8E1, 0x9E05}, //13317 #CJK UNIFIED IDEOGRAPH
+ {0xF8E2, 0x9E00}, //13318 #CJK UNIFIED IDEOGRAPH
+ {0xF8E3, 0x9E01}, //13319 #CJK UNIFIED IDEOGRAPH
+ {0xF8E4, 0x9E09}, //13320 #CJK UNIFIED IDEOGRAPH
+ {0xF8E5, 0x9DFF}, //13321 #CJK UNIFIED IDEOGRAPH
+ {0xF8E6, 0x9DFD}, //13322 #CJK UNIFIED IDEOGRAPH
+ {0xF8E7, 0x9E04}, //13323 #CJK UNIFIED IDEOGRAPH
+ {0xF8E8, 0x9EA0}, //13324 #CJK UNIFIED IDEOGRAPH
+ {0xF8E9, 0x9F1E}, //13325 #CJK UNIFIED IDEOGRAPH
+ {0xF8EA, 0x9F46}, //13326 #CJK UNIFIED IDEOGRAPH
+ {0xF8EB, 0x9F74}, //13327 #CJK UNIFIED IDEOGRAPH
+ {0xF8EC, 0x9F75}, //13328 #CJK UNIFIED IDEOGRAPH
+ {0xF8ED, 0x9F76}, //13329 #CJK UNIFIED IDEOGRAPH
+ {0xF8EE, 0x56D4}, //13330 #CJK UNIFIED IDEOGRAPH
+ {0xF8EF, 0x652E}, //13331 #CJK UNIFIED IDEOGRAPH
+ {0xF8F0, 0x65B8}, //13332 #CJK UNIFIED IDEOGRAPH
+ {0xF8F1, 0x6B18}, //13333 #CJK UNIFIED IDEOGRAPH
+ {0xF8F2, 0x6B19}, //13334 #CJK UNIFIED IDEOGRAPH
+ {0xF8F3, 0x6B17}, //13335 #CJK UNIFIED IDEOGRAPH
+ {0xF8F4, 0x6B1A}, //13336 #CJK UNIFIED IDEOGRAPH
+ {0xF8F5, 0x7062}, //13337 #CJK UNIFIED IDEOGRAPH
+ {0xF8F6, 0x7226}, //13338 #CJK UNIFIED IDEOGRAPH
+ {0xF8F7, 0x72AA}, //13339 #CJK UNIFIED IDEOGRAPH
+ {0xF8F8, 0x77D8}, //13340 #CJK UNIFIED IDEOGRAPH
+ {0xF8F9, 0x77D9}, //13341 #CJK UNIFIED IDEOGRAPH
+ {0xF8FA, 0x7939}, //13342 #CJK UNIFIED IDEOGRAPH
+ {0xF8FB, 0x7C69}, //13343 #CJK UNIFIED IDEOGRAPH
+ {0xF8FC, 0x7C6B}, //13344 #CJK UNIFIED IDEOGRAPH
+ {0xF8FD, 0x7CF6}, //13345 #CJK UNIFIED IDEOGRAPH
+ {0xF8FE, 0x7E9A}, //13346 #CJK UNIFIED IDEOGRAPH
+ {0xF940, 0x7E98}, //13347 #CJK UNIFIED IDEOGRAPH
+ {0xF941, 0x7E9B}, //13348 #CJK UNIFIED IDEOGRAPH
+ {0xF942, 0x7E99}, //13349 #CJK UNIFIED IDEOGRAPH
+ {0xF943, 0x81E0}, //13350 #CJK UNIFIED IDEOGRAPH
+ {0xF944, 0x81E1}, //13351 #CJK UNIFIED IDEOGRAPH
+ {0xF945, 0x8646}, //13352 #CJK UNIFIED IDEOGRAPH
+ {0xF946, 0x8647}, //13353 #CJK UNIFIED IDEOGRAPH
+ {0xF947, 0x8648}, //13354 #CJK UNIFIED IDEOGRAPH
+ {0xF948, 0x8979}, //13355 #CJK UNIFIED IDEOGRAPH
+ {0xF949, 0x897A}, //13356 #CJK UNIFIED IDEOGRAPH
+ {0xF94A, 0x897C}, //13357 #CJK UNIFIED IDEOGRAPH
+ {0xF94B, 0x897B}, //13358 #CJK UNIFIED IDEOGRAPH
+ {0xF94C, 0x89FF}, //13359 #CJK UNIFIED IDEOGRAPH
+ {0xF94D, 0x8B98}, //13360 #CJK UNIFIED IDEOGRAPH
+ {0xF94E, 0x8B99}, //13361 #CJK UNIFIED IDEOGRAPH
+ {0xF94F, 0x8EA5}, //13362 #CJK UNIFIED IDEOGRAPH
+ {0xF950, 0x8EA4}, //13363 #CJK UNIFIED IDEOGRAPH
+ {0xF951, 0x8EA3}, //13364 #CJK UNIFIED IDEOGRAPH
+ {0xF952, 0x946E}, //13365 #CJK UNIFIED IDEOGRAPH
+ {0xF953, 0x946D}, //13366 #CJK UNIFIED IDEOGRAPH
+ {0xF954, 0x946F}, //13367 #CJK UNIFIED IDEOGRAPH
+ {0xF955, 0x9471}, //13368 #CJK UNIFIED IDEOGRAPH
+ {0xF956, 0x9473}, //13369 #CJK UNIFIED IDEOGRAPH
+ {0xF957, 0x9749}, //13370 #CJK UNIFIED IDEOGRAPH
+ {0xF958, 0x9872}, //13371 #CJK UNIFIED IDEOGRAPH
+ {0xF959, 0x995F}, //13372 #CJK UNIFIED IDEOGRAPH
+ {0xF95A, 0x9C68}, //13373 #CJK UNIFIED IDEOGRAPH
+ {0xF95B, 0x9C6E}, //13374 #CJK UNIFIED IDEOGRAPH
+ {0xF95C, 0x9C6D}, //13375 #CJK UNIFIED IDEOGRAPH
+ {0xF95D, 0x9E0B}, //13376 #CJK UNIFIED IDEOGRAPH
+ {0xF95E, 0x9E0D}, //13377 #CJK UNIFIED IDEOGRAPH
+ {0xF95F, 0x9E10}, //13378 #CJK UNIFIED IDEOGRAPH
+ {0xF960, 0x9E0F}, //13379 #CJK UNIFIED IDEOGRAPH
+ {0xF961, 0x9E12}, //13380 #CJK UNIFIED IDEOGRAPH
+ {0xF962, 0x9E11}, //13381 #CJK UNIFIED IDEOGRAPH
+ {0xF963, 0x9EA1}, //13382 #CJK UNIFIED IDEOGRAPH
+ {0xF964, 0x9EF5}, //13383 #CJK UNIFIED IDEOGRAPH
+ {0xF965, 0x9F09}, //13384 #CJK UNIFIED IDEOGRAPH
+ {0xF966, 0x9F47}, //13385 #CJK UNIFIED IDEOGRAPH
+ {0xF967, 0x9F78}, //13386 #CJK UNIFIED IDEOGRAPH
+ {0xF968, 0x9F7B}, //13387 #CJK UNIFIED IDEOGRAPH
+ {0xF969, 0x9F7A}, //13388 #CJK UNIFIED IDEOGRAPH
+ {0xF96A, 0x9F79}, //13389 #CJK UNIFIED IDEOGRAPH
+ {0xF96B, 0x571E}, //13390 #CJK UNIFIED IDEOGRAPH
+ {0xF96C, 0x7066}, //13391 #CJK UNIFIED IDEOGRAPH
+ {0xF96D, 0x7C6F}, //13392 #CJK UNIFIED IDEOGRAPH
+ {0xF96E, 0x883C}, //13393 #CJK UNIFIED IDEOGRAPH
+ {0xF96F, 0x8DB2}, //13394 #CJK UNIFIED IDEOGRAPH
+ {0xF970, 0x8EA6}, //13395 #CJK UNIFIED IDEOGRAPH
+ {0xF971, 0x91C3}, //13396 #CJK UNIFIED IDEOGRAPH
+ {0xF972, 0x9474}, //13397 #CJK UNIFIED IDEOGRAPH
+ {0xF973, 0x9478}, //13398 #CJK UNIFIED IDEOGRAPH
+ {0xF974, 0x9476}, //13399 #CJK UNIFIED IDEOGRAPH
+ {0xF975, 0x9475}, //13400 #CJK UNIFIED IDEOGRAPH
+ {0xF976, 0x9A60}, //13401 #CJK UNIFIED IDEOGRAPH
+ {0xF977, 0x9C74}, //13402 #CJK UNIFIED IDEOGRAPH
+ {0xF978, 0x9C73}, //13403 #CJK UNIFIED IDEOGRAPH
+ {0xF979, 0x9C71}, //13404 #CJK UNIFIED IDEOGRAPH
+ {0xF97A, 0x9C75}, //13405 #CJK UNIFIED IDEOGRAPH
+ {0xF97B, 0x9E14}, //13406 #CJK UNIFIED IDEOGRAPH
+ {0xF97C, 0x9E13}, //13407 #CJK UNIFIED IDEOGRAPH
+ {0xF97D, 0x9EF6}, //13408 #CJK UNIFIED IDEOGRAPH
+ {0xF97E, 0x9F0A}, //13409 #CJK UNIFIED IDEOGRAPH
+ {0xF9A1, 0x9FA4}, //13410 #CJK UNIFIED IDEOGRAPH
+ {0xF9A2, 0x7068}, //13411 #CJK UNIFIED IDEOGRAPH
+ {0xF9A3, 0x7065}, //13412 #CJK UNIFIED IDEOGRAPH
+ {0xF9A4, 0x7CF7}, //13413 #CJK UNIFIED IDEOGRAPH
+ {0xF9A5, 0x866A}, //13414 #CJK UNIFIED IDEOGRAPH
+ {0xF9A6, 0x883E}, //13415 #CJK UNIFIED IDEOGRAPH
+ {0xF9A7, 0x883D}, //13416 #CJK UNIFIED IDEOGRAPH
+ {0xF9A8, 0x883F}, //13417 #CJK UNIFIED IDEOGRAPH
+ {0xF9A9, 0x8B9E}, //13418 #CJK UNIFIED IDEOGRAPH
+ {0xF9AA, 0x8C9C}, //13419 #CJK UNIFIED IDEOGRAPH
+ {0xF9AB, 0x8EA9}, //13420 #CJK UNIFIED IDEOGRAPH
+ {0xF9AC, 0x8EC9}, //13421 #CJK UNIFIED IDEOGRAPH
+ {0xF9AD, 0x974B}, //13422 #CJK UNIFIED IDEOGRAPH
+ {0xF9AE, 0x9873}, //13423 #CJK UNIFIED IDEOGRAPH
+ {0xF9AF, 0x9874}, //13424 #CJK UNIFIED IDEOGRAPH
+ {0xF9B0, 0x98CC}, //13425 #CJK UNIFIED IDEOGRAPH
+ {0xF9B1, 0x9961}, //13426 #CJK UNIFIED IDEOGRAPH
+ {0xF9B2, 0x99AB}, //13427 #CJK UNIFIED IDEOGRAPH
+ {0xF9B3, 0x9A64}, //13428 #CJK UNIFIED IDEOGRAPH
+ {0xF9B4, 0x9A66}, //13429 #CJK UNIFIED IDEOGRAPH
+ {0xF9B5, 0x9A67}, //13430 #CJK UNIFIED IDEOGRAPH
+ {0xF9B6, 0x9B24}, //13431 #CJK UNIFIED IDEOGRAPH
+ {0xF9B7, 0x9E15}, //13432 #CJK UNIFIED IDEOGRAPH
+ {0xF9B8, 0x9E17}, //13433 #CJK UNIFIED IDEOGRAPH
+ {0xF9B9, 0x9F48}, //13434 #CJK UNIFIED IDEOGRAPH
+ {0xF9BA, 0x6207}, //13435 #CJK UNIFIED IDEOGRAPH
+ {0xF9BB, 0x6B1E}, //13436 #CJK UNIFIED IDEOGRAPH
+ {0xF9BC, 0x7227}, //13437 #CJK UNIFIED IDEOGRAPH
+ {0xF9BD, 0x864C}, //13438 #CJK UNIFIED IDEOGRAPH
+ {0xF9BE, 0x8EA8}, //13439 #CJK UNIFIED IDEOGRAPH
+ {0xF9BF, 0x9482}, //13440 #CJK UNIFIED IDEOGRAPH
+ {0xF9C0, 0x9480}, //13441 #CJK UNIFIED IDEOGRAPH
+ {0xF9C1, 0x9481}, //13442 #CJK UNIFIED IDEOGRAPH
+ {0xF9C2, 0x9A69}, //13443 #CJK UNIFIED IDEOGRAPH
+ {0xF9C3, 0x9A68}, //13444 #CJK UNIFIED IDEOGRAPH
+ {0xF9C4, 0x9B2E}, //13445 #CJK UNIFIED IDEOGRAPH
+ {0xF9C5, 0x9E19}, //13446 #CJK UNIFIED IDEOGRAPH
+ {0xF9C6, 0x7229}, //13447 #CJK UNIFIED IDEOGRAPH
+ {0xF9C7, 0x864B}, //13448 #CJK UNIFIED IDEOGRAPH
+ {0xF9C8, 0x8B9F}, //13449 #CJK UNIFIED IDEOGRAPH
+ {0xF9C9, 0x9483}, //13450 #CJK UNIFIED IDEOGRAPH
+ {0xF9CA, 0x9C79}, //13451 #CJK UNIFIED IDEOGRAPH
+ {0xF9CB, 0x9EB7}, //13452 #CJK UNIFIED IDEOGRAPH
+ {0xF9CC, 0x7675}, //13453 #CJK UNIFIED IDEOGRAPH
+ {0xF9CD, 0x9A6B}, //13454 #CJK UNIFIED IDEOGRAPH
+ {0xF9CE, 0x9C7A}, //13455 #CJK UNIFIED IDEOGRAPH
+ {0xF9CF, 0x9E1D}, //13456 #CJK UNIFIED IDEOGRAPH
+ {0xF9D0, 0x7069}, //13457 #CJK UNIFIED IDEOGRAPH
+ {0xF9D1, 0x706A}, //13458 #CJK UNIFIED IDEOGRAPH
+ {0xF9D2, 0x9EA4}, //13459 #CJK UNIFIED IDEOGRAPH
+ {0xF9D3, 0x9F7E}, //13460 #CJK UNIFIED IDEOGRAPH
+ {0xF9D4, 0x9F49}, //13461 #CJK UNIFIED IDEOGRAPH
+ {0xF9D5, 0x9F98}, //13462 #CJK UNIFIED IDEOGRAPH
+ {0xF9D6, 0x7881}, //13463 #CJK UNIFIED IDEOGRAPH
+ {0xF9D7, 0x92B9}, //13464 #CJK UNIFIED IDEOGRAPH
+ {0xF9D8, 0x88CF}, //13465 #CJK UNIFIED IDEOGRAPH
+ {0xF9D9, 0x58BB}, //13466 #CJK UNIFIED IDEOGRAPH
+ {0xF9DA, 0x6052}, //13467 #CJK UNIFIED IDEOGRAPH
+ {0xF9DB, 0x7CA7}, //13468 #CJK UNIFIED IDEOGRAPH
+ {0xF9DC, 0x5AFA}, //13469 #CJK UNIFIED IDEOGRAPH
+ {0xF9DD, 0x2554}, //13470 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ {0xF9DE, 0x2566}, //13471 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ {0xF9DF, 0x2557}, //13472 #BOX DRAWINGS DOUBLE DOWN AND LEFT
+ {0xF9E0, 0x2560}, //13473 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ {0xF9E1, 0x256C}, //13474 #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ {0xF9E2, 0x2563}, //13475 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ {0xF9E3, 0x255A}, //13476 #BOX DRAWINGS DOUBLE UP AND RIGHT
+ {0xF9E4, 0x2569}, //13477 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ {0xF9E5, 0x255D}, //13478 #BOX DRAWINGS DOUBLE UP AND LEFT
+ {0xF9E6, 0x2552}, //13479 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ {0xF9E7, 0x2564}, //13480 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ {0xF9E8, 0x2555}, //13481 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ {0xF9E9, 0x255E}, //13482 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ {0xF9EA, 0x256A}, //13483 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ {0xF9EB, 0x2561}, //13484 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ {0xF9EC, 0x2558}, //13485 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ {0xF9ED, 0x2567}, //13486 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ {0xF9EE, 0x255B}, //13487 #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ {0xF9EF, 0x2553}, //13488 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ {0xF9F0, 0x2565}, //13489 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ {0xF9F1, 0x2556}, //13490 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ {0xF9F2, 0x255F}, //13491 #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ {0xF9F3, 0x256B}, //13492 #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ {0xF9F4, 0x2562}, //13493 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ {0xF9F5, 0x2559}, //13494 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ {0xF9F6, 0x2568}, //13495 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ {0xF9F7, 0x255C}, //13496 #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ {0xF9F8, 0x2551}, //13497 #BOX DRAWINGS DOUBLE VERTICAL
+ {0xF9F9, 0x2550}, //13498 #BOX DRAWINGS DOUBLE HORIZONTAL
+ {0xF9FA, 0x256D}, //13499 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+ {0xF9FB, 0x256E}, //13500 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+ {0xF9FC, 0x2570}, //13501 #BOX DRAWINGS LIGHT ARC UP AND RIGHT
+ {0xF9FD, 0x256F}, //13502 #BOX DRAWINGS LIGHT ARC UP AND LEFT
+ {0xF9FE, 0x2593}, //13503 #DARK SHADE
+};
+
+#endif // DRW_CPTABLE950_H
diff --git a/lib_dxf/intern/drw_cptables.h b/lib_dxf/intern/drw_cptables.h
new file mode 100644
index 0000000..2f7d758
--- /dev/null
+++ b/lib_dxf/intern/drw_cptables.h
@@ -0,0 +1,1330 @@
+#ifndef DRW_CPTABLES_H
+#define DRW_CPTABLES_H
+
+//first entry in all tables are 0x80
+#define CPOFFSET 0x80
+#define CPLENGHTCOMMON 128
+
+//Table 874
+static const int DRW_Table874[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00 , //2 #UNDEFINED
+ 0x00 , //3 #UNDEFINED
+ 0x00 , //4 #UNDEFINED
+ 0x00 , //5 #UNDEFINED
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x00 , //7 #UNDEFINED
+ 0x00 , //8 #UNDEFINED
+ 0x00 , //9 #UNDEFINED
+ 0x00 , //10 #UNDEFINED
+ 0x00 , //11 #UNDEFINED
+ 0x00 , //12 #UNDEFINED
+ 0x00 , //13 #UNDEFINED
+ 0x00 , //14 #UNDEFINED
+ 0x00 , //15 #UNDEFINED
+ 0x00 , //16 #UNDEFINED
+ 0x00 , //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x00 , //25 #UNDEFINED
+ 0x00 , //26 #UNDEFINED
+ 0x00 , //27 #UNDEFINED
+ 0x00 , //28 #UNDEFINED
+ 0x00 , //29 #UNDEFINED
+ 0x00 , //30 #UNDEFINED
+ 0x00 , //31 #UNDEFINED
+ 0x00 , //32 #UNDEFINED
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x0E01, //34 #THAI CHARACTER KO KAI
+ 0x0E02, //35 #THAI CHARACTER KHO KHAI
+ 0x0E03, //36 #THAI CHARACTER KHO KHUAT
+ 0x0E04, //37 #THAI CHARACTER KHO KHWAI
+ 0x0E05, //38 #THAI CHARACTER KHO KHON
+ 0x0E06, //39 #THAI CHARACTER KHO RAKHANG
+ 0x0E07, //40 #THAI CHARACTER NGO NGU
+ 0x0E08, //41 #THAI CHARACTER CHO CHAN
+ 0x0E09, //42 #THAI CHARACTER CHO CHING
+ 0x0E0A, //43 #THAI CHARACTER CHO CHANG
+ 0x0E0B, //44 #THAI CHARACTER SO SO
+ 0x0E0C, //45 #THAI CHARACTER CHO CHOE
+ 0x0E0D, //46 #THAI CHARACTER YO YING
+ 0x0E0E, //47 #THAI CHARACTER DO CHADA
+ 0x0E0F, //48 #THAI CHARACTER TO PATAK
+ 0x0E10, //49 #THAI CHARACTER THO THAN
+ 0x0E11, //50 #THAI CHARACTER THO NANGMONTHO
+ 0x0E12, //51 #THAI CHARACTER THO PHUTHAO
+ 0x0E13, //52 #THAI CHARACTER NO NEN
+ 0x0E14, //53 #THAI CHARACTER DO DEK
+ 0x0E15, //54 #THAI CHARACTER TO TAO
+ 0x0E16, //55 #THAI CHARACTER THO THUNG
+ 0x0E17, //56 #THAI CHARACTER THO THAHAN
+ 0x0E18, //57 #THAI CHARACTER THO THONG
+ 0x0E19, //58 #THAI CHARACTER NO NU
+ 0x0E1A, //59 #THAI CHARACTER BO BAIMAI
+ 0x0E1B, //60 #THAI CHARACTER PO PLA
+ 0x0E1C, //61 #THAI CHARACTER PHO PHUNG
+ 0x0E1D, //62 #THAI CHARACTER FO FA
+ 0x0E1E, //63 #THAI CHARACTER PHO PHAN
+ 0x0E1F, //64 #THAI CHARACTER FO FAN
+ 0x0E20, //65 #THAI CHARACTER PHO SAMPHAO
+ 0x0E21, //66 #THAI CHARACTER MO MA
+ 0x0E22, //67 #THAI CHARACTER YO YAK
+ 0x0E23, //68 #THAI CHARACTER RO RUA
+ 0x0E24, //69 #THAI CHARACTER RU
+ 0x0E25, //70 #THAI CHARACTER LO LING
+ 0x0E26, //71 #THAI CHARACTER LU
+ 0x0E27, //72 #THAI CHARACTER WO WAEN
+ 0x0E28, //73 #THAI CHARACTER SO SALA
+ 0x0E29, //74 #THAI CHARACTER SO RUSI
+ 0x0E2A, //75 #THAI CHARACTER SO SUA
+ 0x0E2B, //76 #THAI CHARACTER HO HIP
+ 0x0E2C, //77 #THAI CHARACTER LO CHULA
+ 0x0E2D, //78 #THAI CHARACTER O ANG
+ 0x0E2E, //79 #THAI CHARACTER HO NOKHUK
+ 0x0E2F, //80 #THAI CHARACTER PAIYANNOI
+ 0x0E30, //81 #THAI CHARACTER SARA A
+ 0x0E31, //82 #THAI CHARACTER MAI HAN-AKAT
+ 0x0E32, //83 #THAI CHARACTER SARA AA
+ 0x0E33, //84 #THAI CHARACTER SARA AM
+ 0x0E34, //85 #THAI CHARACTER SARA I
+ 0x0E35, //86 #THAI CHARACTER SARA II
+ 0x0E36, //87 #THAI CHARACTER SARA UE
+ 0x0E37, //88 #THAI CHARACTER SARA UEE
+ 0x0E38, //89 #THAI CHARACTER SARA U
+ 0x0E39, //90 #THAI CHARACTER SARA UU
+ 0x0E3A, //91 #THAI CHARACTER PHINTHU
+ 0x00 , //92 #UNDEFINED
+ 0x00 , //93 #UNDEFINED
+ 0x00 , //94 #UNDEFINED
+ 0x00 , //95 #UNDEFINED
+ 0x0E3F, //96 #THAI CURRENCY SYMBOL BAHT
+ 0x0E40, //97 #THAI CHARACTER SARA E
+ 0x0E41, //98 #THAI CHARACTER SARA AE
+ 0x0E42, //99 #THAI CHARACTER SARA O
+ 0x0E43, //100 #THAI CHARACTER SARA AI MAIMUAN
+ 0x0E44, //101 #THAI CHARACTER SARA AI MAIMALAI
+ 0x0E45, //102 #THAI CHARACTER LAKKHANGYAO
+ 0x0E46, //103 #THAI CHARACTER MAIYAMOK
+ 0x0E47, //104 #THAI CHARACTER MAITAIKHU
+ 0x0E48, //105 #THAI CHARACTER MAI EK
+ 0x0E49, //106 #THAI CHARACTER MAI THO
+ 0x0E4A, //107 #THAI CHARACTER MAI TRI
+ 0x0E4B, //108 #THAI CHARACTER MAI CHATTAWA
+ 0x0E4C, //109 #THAI CHARACTER THANTHAKHAT
+ 0x0E4D, //110 #THAI CHARACTER NIKHAHIT
+ 0x0E4E, //111 #THAI CHARACTER YAMAKKAN
+ 0x0E4F, //112 #THAI CHARACTER FONGMAN
+ 0x0E50, //113 #THAI DIGIT ZERO
+ 0x0E51, //114 #THAI DIGIT ONE
+ 0x0E52, //115 #THAI DIGIT TWO
+ 0x0E53, //116 #THAI DIGIT THREE
+ 0x0E54, //117 #THAI DIGIT FOUR
+ 0x0E55, //118 #THAI DIGIT FIVE
+ 0x0E56, //119 #THAI DIGIT SIX
+ 0x0E57, //120 #THAI DIGIT SEVEN
+ 0x0E58, //121 #THAI DIGIT EIGHT
+ 0x0E59, //122 #THAI DIGIT NINE
+ 0x0E5A, //123 #THAI CHARACTER ANGKHANKHU
+ 0x0E5B, //124 #THAI CHARACTER KHOMUT
+ 0x00 , //125 #UNDEFINED
+ 0x00 , //126 #UNDEFINED
+ 0x00 , //127 #UNDEFINED
+ 0x00 //128 #UNDEFINED
+};
+
+//Table 1250
+static const int DRW_Table1250[] = {
+0x20AC, //1 #EURO SIGN
+0x00, //2 #UNDEFINED
+0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+0x00, //4 #UNDEFINED
+0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+0x2026, //6 #HORIZONTAL ELLIPSIS
+0x2020, //7 #DAGGER
+0x2021, //8 #DOUBLE DAGGER
+0x00, //9 #UNDEFINED
+0x2030, //10 #PER MILLE SIGN
+0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON
+0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x015A, //13 #LATIN CAPITAL LETTER S WITH ACUTE
+0x0164, //14 #LATIN CAPITAL LETTER T WITH CARON
+0x017D, //15 #LATIN CAPITAL LETTER Z WITH CARON
+0x0179, //16 #LATIN CAPITAL LETTER Z WITH ACUTE
+0x00, //17 #UNDEFINED
+0x2018, //18 #LEFT SINGLE QUOTATION MARK
+0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+0x2022, //22 #BULLET
+0x2013, //23 #EN DASH
+0x2014, //24 #EM DASH
+0x00, //25 #UNDEFINED
+0x2122, //26 #TRADE MARK SIGN
+0x0161, //27 #LATIN SMALL LETTER S WITH CARON
+0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x015B, //29 #LATIN SMALL LETTER S WITH ACUTE
+0x0165, //30 #LATIN SMALL LETTER T WITH CARON
+0x017E, //31 #LATIN SMALL LETTER Z WITH CARON
+0x017A, //32 #LATIN SMALL LETTER Z WITH ACUTE
+0x00A0, //33 #NO-BREAK SPACE
+0x02C7, //34 #CARON
+0x02D8, //35 #BREVE
+0x0141, //36 #LATIN CAPITAL LETTER L WITH STROKE
+0x00A4, //37 #CURRENCY SIGN
+0x0104, //38 #LATIN CAPITAL LETTER A WITH OGONEK
+0x00A6, //39 #BROKEN BAR
+0x00A7, //40 #SECTION SIGN
+0x00A8, //41 #DIAERESIS
+0x00A9, //42 #COPYRIGHT SIGN
+0x015E, //43 #LATIN CAPITAL LETTER S WITH CEDILLA
+0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x00AC, //45 #NOT SIGN
+0x00AD, //46 #SOFT HYPHEN
+0x00AE, //47 #REGISTERED SIGN
+0x017B, //48 #LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0x00B0, //49 #DEGREE SIGN
+0x00B1, //50 #PLUS-MINUS SIGN
+0x02DB, //51 #OGONEK
+0x0142, //52 #LATIN SMALL LETTER L WITH STROKE
+0x00B4, //53 #ACUTE ACCENT
+0x00B5, //54 #MICRO SIGN
+0x00B6, //55 #PILCROW SIGN
+0x00B7, //56 #MIDDLE DOT
+0x00B8, //57 #CEDILLA
+0x0105, //58 #LATIN SMALL LETTER A WITH OGONEK
+0x015F, //59 #LATIN SMALL LETTER S WITH CEDILLA
+0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x013D, //61 #LATIN CAPITAL LETTER L WITH CARON
+0x02DD, //62 #DOUBLE ACUTE ACCENT
+0x013E, //63 #LATIN SMALL LETTER L WITH CARON
+0x017C, //64 #LATIN SMALL LETTER Z WITH DOT ABOVE
+0x0154, //65 #LATIN CAPITAL LETTER R WITH ACUTE
+0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE
+0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0x0102, //68 #LATIN CAPITAL LETTER A WITH BREVE
+0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS
+0x0139, //70 #LATIN CAPITAL LETTER L WITH ACUTE
+0x0106, //71 #LATIN CAPITAL LETTER C WITH ACUTE
+0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA
+0x010C, //73 #LATIN CAPITAL LETTER C WITH CARON
+0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE
+0x0118, //75 #LATIN CAPITAL LETTER E WITH OGONEK
+0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS
+0x011A, //77 #LATIN CAPITAL LETTER E WITH CARON
+0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE
+0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0x010E, //80 #LATIN CAPITAL LETTER D WITH CARON
+0x0110, //81 #LATIN CAPITAL LETTER D WITH STROKE
+0x0143, //82 #LATIN CAPITAL LETTER N WITH ACUTE
+0x0147, //83 #LATIN CAPITAL LETTER N WITH CARON
+0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE
+0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0x0150, //86 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS
+0x00D7, //88 #MULTIPLICATION SIGN
+0x0158, //89 #LATIN CAPITAL LETTER R WITH CARON
+0x016E, //90 #LATIN CAPITAL LETTER U WITH RING ABOVE
+0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE
+0x0170, //92 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS
+0x00DD, //94 #LATIN CAPITAL LETTER Y WITH ACUTE
+0x0162, //95 #LATIN CAPITAL LETTER T WITH CEDILLA
+0x00DF, //96 #LATIN SMALL LETTER SHARP S
+0x0155, //97 #LATIN SMALL LETTER R WITH ACUTE
+0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE
+0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x0103, //100 #LATIN SMALL LETTER A WITH BREVE
+0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS
+0x013A, //102 #LATIN SMALL LETTER L WITH ACUTE
+0x0107, //103 #LATIN SMALL LETTER C WITH ACUTE
+0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA
+0x010D, //105 #LATIN SMALL LETTER C WITH CARON
+0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE
+0x0119, //107 #LATIN SMALL LETTER E WITH OGONEK
+0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS
+0x011B, //109 #LATIN SMALL LETTER E WITH CARON
+0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE
+0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x010F, //112 #LATIN SMALL LETTER D WITH CARON
+0x0111, //113 #LATIN SMALL LETTER D WITH STROKE
+0x0144, //114 #LATIN SMALL LETTER N WITH ACUTE
+0x0148, //115 #LATIN SMALL LETTER N WITH CARON
+0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE
+0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x0151, //118 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS
+0x00F7, //120 #DIVISION SIGN
+0x0159, //121 #LATIN SMALL LETTER R WITH CARON
+0x016F, //122 #LATIN SMALL LETTER U WITH RING ABOVE
+0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE
+0x0171, //124 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS
+0x00FD, //126 #LATIN SMALL LETTER Y WITH ACUTE
+0x0163, //127 #LATIN SMALL LETTER T WITH CEDILLA
+0x02D9 //128 #DOT ABOVE
+};
+
+
+//Table 1251
+static const int DRW_Table1251[] = {
+ 0x0402, //1 #CYRILLIC CAPITAL LETTER DJE
+ 0x0403, //2 #CYRILLIC CAPITAL LETTER GJE
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0453, //4 #CYRILLIC SMALL LETTER GJE
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x20AC, //9 #EURO SIGN
+ 0x2030, //10 #PER MILLE SIGN
+ 0x0409, //11 #CYRILLIC CAPITAL LETTER LJE
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x040A, //13 #CYRILLIC CAPITAL LETTER NJE
+ 0x040C, //14 #CYRILLIC CAPITAL LETTER KJE
+ 0x040B, //15 #CYRILLIC CAPITAL LETTER TSHE
+ 0x040F, //16 #CYRILLIC CAPITAL LETTER DZHE
+ 0x0452, //17 #CYRILLIC SMALL LETTER DJE
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x00, //25 #UNDEFINED
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x0459, //27 #CYRILLIC SMALL LETTER LJE
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x045A, //29 #CYRILLIC SMALL LETTER NJE
+ 0x045C, //30 #CYRILLIC SMALL LETTER KJE
+ 0x045B, //31 #CYRILLIC SMALL LETTER TSHE
+ 0x045F, //32 #CYRILLIC SMALL LETTER DZHE
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x040E, //34 #CYRILLIC CAPITAL LETTER SHORT U
+ 0x045E, //35 #CYRILLIC SMALL LETTER SHORT U
+ 0x0408, //36 #CYRILLIC CAPITAL LETTER JE
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x0490, //38 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x0401, //41 #CYRILLIC CAPITAL LETTER IO
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x0404, //43 #CYRILLIC CAPITAL LETTER UKRAINIAN IE
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x0407, //48 #CYRILLIC CAPITAL LETTER YI
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x0406, //51 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ 0x0456, //52 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ 0x0491, //53 #CYRILLIC SMALL LETTER GHE WITH UPTURN
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x0451, //57 #CYRILLIC SMALL LETTER IO
+ 0x2116, //58 #NUMERO SIGN
+ 0x0454, //59 #CYRILLIC SMALL LETTER UKRAINIAN IE
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x0458, //61 #CYRILLIC SMALL LETTER JE
+ 0x0405, //62 #CYRILLIC CAPITAL LETTER DZE
+ 0x0455, //63 #CYRILLIC SMALL LETTER DZE
+ 0x0457, //64 #CYRILLIC SMALL LETTER YI
+ 0x0410, //65 #CYRILLIC CAPITAL LETTER A
+ 0x0411, //66 #CYRILLIC CAPITAL LETTER BE
+ 0x0412, //67 #CYRILLIC CAPITAL LETTER VE
+ 0x0413, //68 #CYRILLIC CAPITAL LETTER GHE
+ 0x0414, //69 #CYRILLIC CAPITAL LETTER DE
+ 0x0415, //70 #CYRILLIC CAPITAL LETTER IE
+ 0x0416, //71 #CYRILLIC CAPITAL LETTER ZHE
+ 0x0417, //72 #CYRILLIC CAPITAL LETTER ZE
+ 0x0418, //73 #CYRILLIC CAPITAL LETTER I
+ 0x0419, //74 #CYRILLIC CAPITAL LETTER SHORT I
+ 0x041A, //75 #CYRILLIC CAPITAL LETTER KA
+ 0x041B, //76 #CYRILLIC CAPITAL LETTER EL
+ 0x041C, //77 #CYRILLIC CAPITAL LETTER EM
+ 0x041D, //78 #CYRILLIC CAPITAL LETTER EN
+ 0x041E, //79 #CYRILLIC CAPITAL LETTER O
+ 0x041F, //80 #CYRILLIC CAPITAL LETTER PE
+ 0x0420, //81 #CYRILLIC CAPITAL LETTER ER
+ 0x0421, //82 #CYRILLIC CAPITAL LETTER ES
+ 0x0422, //83 #CYRILLIC CAPITAL LETTER TE
+ 0x0423, //84 #CYRILLIC CAPITAL LETTER U
+ 0x0424, //85 #CYRILLIC CAPITAL LETTER EF
+ 0x0425, //86 #CYRILLIC CAPITAL LETTER HA
+ 0x0426, //87 #CYRILLIC CAPITAL LETTER TSE
+ 0x0427, //88 #CYRILLIC CAPITAL LETTER CHE
+ 0x0428, //89 #CYRILLIC CAPITAL LETTER SHA
+ 0x0429, //90 #CYRILLIC CAPITAL LETTER SHCHA
+ 0x042A, //91 #CYRILLIC CAPITAL LETTER HARD SIGN
+ 0x042B, //92 #CYRILLIC CAPITAL LETTER YERU
+ 0x042C, //93 #CYRILLIC CAPITAL LETTER SOFT SIGN
+ 0x042D, //94 #CYRILLIC CAPITAL LETTER E
+ 0x042E, //95 #CYRILLIC CAPITAL LETTER YU
+ 0x042F, //96 #CYRILLIC CAPITAL LETTER YA
+ 0x0430, //97 #CYRILLIC SMALL LETTER A
+ 0x0431, //98 #CYRILLIC SMALL LETTER BE
+ 0x0432, //99 #CYRILLIC SMALL LETTER VE
+ 0x0433, //100 #CYRILLIC SMALL LETTER GHE
+ 0x0434, //101 #CYRILLIC SMALL LETTER DE
+ 0x0435, //102 #CYRILLIC SMALL LETTER IE
+ 0x0436, //103 #CYRILLIC SMALL LETTER ZHE
+ 0x0437, //104 #CYRILLIC SMALL LETTER ZE
+ 0x0438, //105 #CYRILLIC SMALL LETTER I
+ 0x0439, //106 #CYRILLIC SMALL LETTER SHORT I
+ 0x043A, //107 #CYRILLIC SMALL LETTER KA
+ 0x043B, //108 #CYRILLIC SMALL LETTER EL
+ 0x043C, //109 #CYRILLIC SMALL LETTER EM
+ 0x043D, //110 #CYRILLIC SMALL LETTER EN
+ 0x043E, //111 #CYRILLIC SMALL LETTER O
+ 0x043F, //112 #CYRILLIC SMALL LETTER PE
+ 0x0440, //113 #CYRILLIC SMALL LETTER ER
+ 0x0441, //114 #CYRILLIC SMALL LETTER ES
+ 0x0442, //115 #CYRILLIC SMALL LETTER TE
+ 0x0443, //116 #CYRILLIC SMALL LETTER U
+ 0x0444, //117 #CYRILLIC SMALL LETTER EF
+ 0x0445, //118 #CYRILLIC SMALL LETTER HA
+ 0x0446, //119 #CYRILLIC SMALL LETTER TSE
+ 0x0447, //120 #CYRILLIC SMALL LETTER CHE
+ 0x0448, //121 #CYRILLIC SMALL LETTER SHA
+ 0x0449, //122 #CYRILLIC SMALL LETTER SHCHA
+ 0x044A, //123 #CYRILLIC SMALL LETTER HARD SIGN
+ 0x044B, //124 #CYRILLIC SMALL LETTER YERU
+ 0x044C, //125 #CYRILLIC SMALL LETTER SOFT SIGN
+ 0x044D, //126 #CYRILLIC SMALL LETTER E
+ 0x044E, //127 #CYRILLIC SMALL LETTER YU
+ 0x044F //128 #CYRILLIC SMALL LETTER YA
+};
+
+
+//Table 1252
+static const int DRW_Table1252[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00, //2 #UNDEFINED
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT
+ 0x2030, //10 #PER MILLE SIGN
+ 0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x0152, //13 #LATIN CAPITAL LIGATURE OE
+ 0x00, //14 #UNDEFINED
+ 0x017D, //15 #LATIN CAPITAL LETTER Z WITH CARON
+ 0x00, //16 #UNDEFINED
+ 0x00, //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x02DC, //25 #SMALL TILDE
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x0161, //27 #LATIN SMALL LETTER S WITH CARON
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x0153, //29 #LATIN SMALL LIGATURE OE
+ 0x00, //30 #UNDEFINED
+ 0x017E, //31 #LATIN SMALL LETTER Z WITH CARON
+ 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x00A1, //34 #INVERTED EXCLAMATION MARK
+ 0x00A2, //35 #CENT SIGN
+ 0x00A3, //36 #POUND SIGN
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x00A5, //38 #YEN SIGN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00A8, //41 #DIAERESIS
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x00AA, //43 #FEMININE ORDINAL INDICATOR
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x00AF, //48 #MACRON
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x00B4, //53 #ACUTE ACCENT
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x00B8, //57 #CEDILLA
+ 0x00B9, //58 #SUPERSCRIPT ONE
+ 0x00BA, //59 #MASCULINE ORDINAL INDICATOR
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00BC, //61 #VULGAR FRACTION ONE QUARTER
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS
+ 0x00BF, //64 #INVERTED QUESTION MARK
+ 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE
+ 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE
+ 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 0x00C3, //68 #LATIN CAPITAL LETTER A WITH TILDE
+ 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS
+ 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE
+ 0x00C6, //71 #LATIN CAPITAL LETTER AE
+ 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA
+ 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE
+ 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE
+ 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS
+ 0x00CC, //77 #LATIN CAPITAL LETTER I WITH GRAVE
+ 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE
+ 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS
+ 0x00D0, //81 #LATIN CAPITAL LETTER ETH
+ 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE
+ 0x00D2, //83 #LATIN CAPITAL LETTER O WITH GRAVE
+ 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE
+ 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE
+ 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS
+ 0x00D7, //88 #MULTIPLICATION SIGN
+ 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE
+ 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE
+ 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE
+ 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS
+ 0x00DD, //94 #LATIN CAPITAL LETTER Y WITH ACUTE
+ 0x00DE, //95 #LATIN CAPITAL LETTER THORN
+ 0x00DF, //96 #LATIN SMALL LETTER SHARP S
+ 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE
+ 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE
+ 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 0x00E3, //100 #LATIN SMALL LETTER A WITH TILDE
+ 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS
+ 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE
+ 0x00E6, //103 #LATIN SMALL LETTER AE
+ 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA
+ 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE
+ 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE
+ 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS
+ 0x00EC, //109 #LATIN SMALL LETTER I WITH GRAVE
+ 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE
+ 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS
+ 0x00F0, //113 #LATIN SMALL LETTER ETH
+ 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE
+ 0x00F2, //115 #LATIN SMALL LETTER O WITH GRAVE
+ 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE
+ 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE
+ 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS
+ 0x00F7, //120 #DIVISION SIGN
+ 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE
+ 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE
+ 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE
+ 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS
+ 0x00FD, //126 #LATIN SMALL LETTER Y WITH ACUTE
+ 0x00FE, //127 #LATIN SMALL LETTER THORN
+ 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS
+};
+
+//Table 1253
+static const int DRW_Table1253[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00 , //2 #UNDEFINED
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x00 , //9 #UNDEFINED
+ 0x2030, //10 #PER MILLE SIGN
+ 0x00 , //11 #UNDEFINED
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x00 , //13 #UNDEFINED
+ 0x00 , //14 #UNDEFINED
+ 0x00 , //15 #UNDEFINED
+ 0x00 , //16 #UNDEFINED
+ 0x00 , //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x00 , //25 #UNDEFINED
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x00 , //27 #UNDEFINED
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x00 , //29 #UNDEFINED
+ 0x00 , //30 #UNDEFINED
+ 0x00 , //31 #UNDEFINED
+ 0x00 , //32 #UNDEFINED
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x0385, //34 #GREEK DIALYTIKA TONOS
+ 0x0386, //35 #GREEK CAPITAL LETTER ALPHA WITH TONOS
+ 0x00A3, //36 #POUND SIGN
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x00A5, //38 #YEN SIGN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00A8, //41 #DIAERESIS
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x00 , //43 #UNDEFINED
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x2015, //48 #HORIZONTAL BAR
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x0384, //53 #GREEK TONOS
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x0388, //57 #GREEK CAPITAL LETTER EPSILON WITH TONOS
+ 0x0389, //58 #GREEK CAPITAL LETTER ETA WITH TONOS
+ 0x038A, //59 #GREEK CAPITAL LETTER IOTA WITH TONOS
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x038C, //61 #GREEK CAPITAL LETTER OMICRON WITH TONOS
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x038E, //63 #GREEK CAPITAL LETTER UPSILON WITH TONOS
+ 0x038F, //64 #GREEK CAPITAL LETTER OMEGA WITH TONOS
+ 0x0390, //65 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ 0x0391, //66 #GREEK CAPITAL LETTER ALPHA
+ 0x0392, //67 #GREEK CAPITAL LETTER BETA
+ 0x0393, //68 #GREEK CAPITAL LETTER GAMMA
+ 0x0394, //69 #GREEK CAPITAL LETTER DELTA
+ 0x0395, //70 #GREEK CAPITAL LETTER EPSILON
+ 0x0396, //71 #GREEK CAPITAL LETTER ZETA
+ 0x0397, //72 #GREEK CAPITAL LETTER ETA
+ 0x0398, //73 #GREEK CAPITAL LETTER THETA
+ 0x0399, //74 #GREEK CAPITAL LETTER IOTA
+ 0x039A, //75 #GREEK CAPITAL LETTER KAPPA
+ 0x039B, //76 #GREEK CAPITAL LETTER LAMDA
+ 0x039C, //77 #GREEK CAPITAL LETTER MU
+ 0x039D, //78 #GREEK CAPITAL LETTER NU
+ 0x039E, //79 #GREEK CAPITAL LETTER XI
+ 0x039F, //80 #GREEK CAPITAL LETTER OMICRON
+ 0x03A0, //81 #GREEK CAPITAL LETTER PI
+ 0x03A1, //82 #GREEK CAPITAL LETTER RHO
+ 0x00 , //83 #UNDEFINED
+ 0x03A3, //84 #GREEK CAPITAL LETTER SIGMA
+ 0x03A4, //85 #GREEK CAPITAL LETTER TAU
+ 0x03A5, //86 #GREEK CAPITAL LETTER UPSILON
+ 0x03A6, //87 #GREEK CAPITAL LETTER PHI
+ 0x03A7, //88 #GREEK CAPITAL LETTER CHI
+ 0x03A8, //89 #GREEK CAPITAL LETTER PSI
+ 0x03A9, //90 #GREEK CAPITAL LETTER OMEGA
+ 0x03AA, //91 #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+ 0x03AB, //92 #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ 0x03AC, //93 #GREEK SMALL LETTER ALPHA WITH TONOS
+ 0x03AD, //94 #GREEK SMALL LETTER EPSILON WITH TONOS
+ 0x03AE, //95 #GREEK SMALL LETTER ETA WITH TONOS
+ 0x03AF, //96 #GREEK SMALL LETTER IOTA WITH TONOS
+ 0x03B0, //97 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+ 0x03B1, //98 #GREEK SMALL LETTER ALPHA
+ 0x03B2, //99 #GREEK SMALL LETTER BETA
+ 0x03B3, //100 #GREEK SMALL LETTER GAMMA
+ 0x03B4, //101 #GREEK SMALL LETTER DELTA
+ 0x03B5, //102 #GREEK SMALL LETTER EPSILON
+ 0x03B6, //103 #GREEK SMALL LETTER ZETA
+ 0x03B7, //104 #GREEK SMALL LETTER ETA
+ 0x03B8, //105 #GREEK SMALL LETTER THETA
+ 0x03B9, //106 #GREEK SMALL LETTER IOTA
+ 0x03BA, //107 #GREEK SMALL LETTER KAPPA
+ 0x03BB, //108 #GREEK SMALL LETTER LAMDA
+ 0x03BC, //109 #GREEK SMALL LETTER MU
+ 0x03BD, //110 #GREEK SMALL LETTER NU
+ 0x03BE, //111 #GREEK SMALL LETTER XI
+ 0x03BF, //112 #GREEK SMALL LETTER OMICRON
+ 0x03C0, //113 #GREEK SMALL LETTER PI
+ 0x03C1, //114 #GREEK SMALL LETTER RHO
+ 0x03C2, //115 #GREEK SMALL LETTER FINAL SIGMA
+ 0x03C3, //116 #GREEK SMALL LETTER SIGMA
+ 0x03C4, //117 #GREEK SMALL LETTER TAU
+ 0x03C5, //118 #GREEK SMALL LETTER UPSILON
+ 0x03C6, //119 #GREEK SMALL LETTER PHI
+ 0x03C7, //120 #GREEK SMALL LETTER CHI
+ 0x03C8, //121 #GREEK SMALL LETTER PSI
+ 0x03C9, //122 #GREEK SMALL LETTER OMEGA
+ 0x03CA, //123 #GREEK SMALL LETTER IOTA WITH DIALYTIKA
+ 0x03CB, //124 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ 0x03CC, //125 #GREEK SMALL LETTER OMICRON WITH TONOS
+ 0x03CD, //126 #GREEK SMALL LETTER UPSILON WITH TONOS
+ 0x03CE, //127 #GREEK SMALL LETTER OMEGA WITH TONOS
+ 0x00 //128 #UNDEFINED
+};
+
+//Table 1254
+static const int DRW_Table1254[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00 , //2 #UNDEFINED
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT
+ 0x2030, //10 #PER MILLE SIGN
+ 0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x0152, //13 #LATIN CAPITAL LIGATURE OE
+ 0x00 , //14 #UNDEFINED
+ 0x00 , //15 #UNDEFINED
+ 0x00 , //16 #UNDEFINED
+ 0x00 , //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x02DC, //25 #SMALL TILDE
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x0161, //27 #LATIN SMALL LETTER S WITH CARON
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x0153, //29 #LATIN SMALL LIGATURE OE
+ 0x00 , //30 #UNDEFINED
+ 0x00 , //31 #UNDEFINED
+ 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x00A1, //34 #INVERTED EXCLAMATION MARK
+ 0x00A2, //35 #CENT SIGN
+ 0x00A3, //36 #POUND SIGN
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x00A5, //38 #YEN SIGN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00A8, //41 #DIAERESIS
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x00AA, //43 #FEMININE ORDINAL INDICATOR
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x00AF, //48 #MACRON
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x00B4, //53 #ACUTE ACCENT
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x00B8, //57 #CEDILLA
+ 0x00B9, //58 #SUPERSCRIPT ONE
+ 0x00BA, //59 #MASCULINE ORDINAL INDICATOR
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00BC, //61 #VULGAR FRACTION ONE QUARTER
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS
+ 0x00BF, //64 #INVERTED QUESTION MARK
+ 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE
+ 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE
+ 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 0x00C3, //68 #LATIN CAPITAL LETTER A WITH TILDE
+ 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS
+ 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE
+ 0x00C6, //71 #LATIN CAPITAL LETTER AE
+ 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA
+ 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE
+ 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE
+ 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS
+ 0x00CC, //77 #LATIN CAPITAL LETTER I WITH GRAVE
+ 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE
+ 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS
+ 0x011E, //81 #LATIN CAPITAL LETTER G WITH BREVE
+ 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE
+ 0x00D2, //83 #LATIN CAPITAL LETTER O WITH GRAVE
+ 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE
+ 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE
+ 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS
+ 0x00D7, //88 #MULTIPLICATION SIGN
+ 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE
+ 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE
+ 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE
+ 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS
+ 0x0130, //94 #LATIN CAPITAL LETTER I WITH DOT ABOVE
+ 0x015E, //95 #LATIN CAPITAL LETTER S WITH CEDILLA
+ 0x00DF, //96 #LATIN SMALL LETTER SHARP S
+ 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE
+ 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE
+ 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 0x00E3, //100 #LATIN SMALL LETTER A WITH TILDE
+ 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS
+ 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE
+ 0x00E6, //103 #LATIN SMALL LETTER AE
+ 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA
+ 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE
+ 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE
+ 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS
+ 0x00EC, //109 #LATIN SMALL LETTER I WITH GRAVE
+ 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE
+ 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS
+ 0x011F, //113 #LATIN SMALL LETTER G WITH BREVE
+ 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE
+ 0x00F2, //115 #LATIN SMALL LETTER O WITH GRAVE
+ 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE
+ 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE
+ 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS
+ 0x00F7, //120 #DIVISION SIGN
+ 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE
+ 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE
+ 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE
+ 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS
+ 0x0131, //126 #LATIN SMALL LETTER DOTLESS I
+ 0x015F, //127 #LATIN SMALL LETTER S WITH CEDILLA
+ 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS
+};
+
+//Table 1255
+static const int DRW_Table1255[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00 , //2 #UNDEFINED
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT
+ 0x2030, //10 #PER MILLE SIGN
+ 0x00 , //11 #UNDEFINED
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x00 , //13 #UNDEFINED
+ 0x00 , //14 #UNDEFINED
+ 0x00 , //15 #UNDEFINED
+ 0x00 , //16 #UNDEFINED
+ 0x00 , //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x02DC, //25 #SMALL TILDE
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x00 , //27 #UNDEFINED
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x00 , //29 #UNDEFINED
+ 0x00 , //30 #UNDEFINED
+ 0x00 , //31 #UNDEFINED
+ 0x00 , //32 #UNDEFINED
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x00A1, //34 #INVERTED EXCLAMATION MARK
+ 0x00A2, //35 #CENT SIGN
+ 0x00A3, //36 #POUND SIGN
+ 0x20AA, //37 #NEW SHEQEL SIGN
+ 0x00A5, //38 #YEN SIGN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00A8, //41 #DIAERESIS
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x00D7, //43 #MULTIPLICATION SIGN
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x00AF, //48 #MACRON
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x00B4, //53 #ACUTE ACCENT
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x00B8, //57 #CEDILLA
+ 0x00B9, //58 #SUPERSCRIPT ONE
+ 0x00F7, //59 #DIVISION SIGN
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00BC, //61 #VULGAR FRACTION ONE QUARTER
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS
+ 0x00BF, //64 #INVERTED QUESTION MARK
+ 0x05B0, //65 #HEBREW POINT SHEVA
+ 0x05B1, //66 #HEBREW POINT HATAF SEGOL
+ 0x05B2, //67 #HEBREW POINT HATAF PATAH
+ 0x05B3, //68 #HEBREW POINT HATAF QAMATS
+ 0x05B4, //69 #HEBREW POINT HIRIQ
+ 0x05B5, //70 #HEBREW POINT TSERE
+ 0x05B6, //71 #HEBREW POINT SEGOL
+ 0x05B7, //72 #HEBREW POINT PATAH
+ 0x05B8, //73 #HEBREW POINT QAMATS
+ 0x05B9, //74 #HEBREW POINT HOLAM
+ 0x00 , //75 #UNDEFINED
+ 0x05BB, //76 #HEBREW POINT QUBUTS
+ 0x05BC, //77 #HEBREW POINT DAGESH OR MAPIQ
+ 0x05BD, //78 #HEBREW POINT METEG
+ 0x05BE, //79 #HEBREW PUNCTUATION MAQAF
+ 0x05BF, //80 #HEBREW POINT RAFE
+ 0x05C0, //81 #HEBREW PUNCTUATION PASEQ
+ 0x05C1, //82 #HEBREW POINT SHIN DOT
+ 0x05C2, //83 #HEBREW POINT SIN DOT
+ 0x05C3, //84 #HEBREW PUNCTUATION SOF PASUQ
+ 0x05F0, //85 #HEBREW LIGATURE YIDDISH DOUBLE VAV
+ 0x05F1, //86 #HEBREW LIGATURE YIDDISH VAV YOD
+ 0x05F2, //87 #HEBREW LIGATURE YIDDISH DOUBLE YOD
+ 0x05F3, //88 #HEBREW PUNCTUATION GERESH
+ 0x05F4, //89 #HEBREW PUNCTUATION GERSHAYIM
+ 0x00 , //90 #UNDEFINED
+ 0x00 , //91 #UNDEFINED
+ 0x00 , //92 #UNDEFINED
+ 0x00 , //93 #UNDEFINED
+ 0x00 , //94 #UNDEFINED
+ 0x00 , //95 #UNDEFINED
+ 0x00 , //96 #UNDEFINED
+ 0x05D0, //97 #HEBREW LETTER ALEF
+ 0x05D1, //98 #HEBREW LETTER BET
+ 0x05D2, //99 #HEBREW LETTER GIMEL
+ 0x05D3, //100 #HEBREW LETTER DALET
+ 0x05D4, //101 #HEBREW LETTER HE
+ 0x05D5, //102 #HEBREW LETTER VAV
+ 0x05D6, //103 #HEBREW LETTER ZAYIN
+ 0x05D7, //104 #HEBREW LETTER HET
+ 0x05D8, //105 #HEBREW LETTER TET
+ 0x05D9, //106 #HEBREW LETTER YOD
+ 0x05DA, //107 #HEBREW LETTER FINAL KAF
+ 0x05DB, //108 #HEBREW LETTER KAF
+ 0x05DC, //109 #HEBREW LETTER LAMED
+ 0x05DD, //110 #HEBREW LETTER FINAL MEM
+ 0x05DE, //111 #HEBREW LETTER MEM
+ 0x05DF, //112 #HEBREW LETTER FINAL NUN
+ 0x05E0, //113 #HEBREW LETTER NUN
+ 0x05E1, //114 #HEBREW LETTER SAMEKH
+ 0x05E2, //115 #HEBREW LETTER AYIN
+ 0x05E3, //116 #HEBREW LETTER FINAL PE
+ 0x05E4, //117 #HEBREW LETTER PE
+ 0x05E5, //118 #HEBREW LETTER FINAL TSADI
+ 0x05E6, //119 #HEBREW LETTER TSADI
+ 0x05E7, //120 #HEBREW LETTER QOF
+ 0x05E8, //121 #HEBREW LETTER RESH
+ 0x05E9, //122 #HEBREW LETTER SHIN
+ 0x05EA, //123 #HEBREW LETTER TAV
+ 0x00 , //124 #UNDEFINED
+ 0x00 , //125 #UNDEFINED
+ 0x200E, //126 #LEFT-TO-RIGHT MARK
+ 0x200F, //127 #RIGHT-TO-LEFT MARK
+ 0x00 //128 #UNDEFINED
+};
+
+//Table 1256
+static const int DRW_Table1256[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x067E, //2 #ARABIC LETTER PEH
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT
+ 0x2030, //10 #PER MILLE SIGN
+ 0x0679, //11 #ARABIC LETTER TTEH
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x0152, //13 #LATIN CAPITAL LIGATURE OE
+ 0x0686, //14 #ARABIC LETTER TCHEH
+ 0x0698, //15 #ARABIC LETTER JEH
+ 0x0688, //16 #ARABIC LETTER DDAL
+ 0x06AF, //17 #ARABIC LETTER GAF
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x06A9, //25 #ARABIC LETTER KEHEH
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x0691, //27 #ARABIC LETTER RREH
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x0153, //29 #LATIN SMALL LIGATURE OE
+ 0x200C, //30 #ZERO WIDTH NON-JOINER
+ 0x200D, //31 #ZERO WIDTH JOINER
+ 0x06BA, //32 #ARABIC LETTER NOON GHUNNA
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x060C, //34 #ARABIC COMMA
+ 0x00A2, //35 #CENT SIGN
+ 0x00A3, //36 #POUND SIGN
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x00A5, //38 #YEN SIGN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00A8, //41 #DIAERESIS
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x06BE, //43 #ARABIC LETTER HEH DOACHASHMEE
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x00AF, //48 #MACRON
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x00B4, //53 #ACUTE ACCENT
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x00B8, //57 #CEDILLA
+ 0x00B9, //58 #SUPERSCRIPT ONE
+ 0x061B, //59 #ARABIC SEMICOLON
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00BC, //61 #VULGAR FRACTION ONE QUARTER
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS
+ 0x061F, //64 #ARABIC QUESTION MARK
+ 0x06C1, //65 #ARABIC LETTER HEH GOAL
+ 0x0621, //66 #ARABIC LETTER HAMZA
+ 0x0622, //67 #ARABIC LETTER ALEF WITH MADDA ABOVE
+ 0x0623, //68 #ARABIC LETTER ALEF WITH HAMZA ABOVE
+ 0x0624, //69 #ARABIC LETTER WAW WITH HAMZA ABOVE
+ 0x0625, //70 #ARABIC LETTER ALEF WITH HAMZA BELOW
+ 0x0626, //71 #ARABIC LETTER YEH WITH HAMZA ABOVE
+ 0x0627, //72 #ARABIC LETTER ALEF
+ 0x0628, //73 #ARABIC LETTER BEH
+ 0x0629, //74 #ARABIC LETTER TEH MARBUTA
+ 0x062A, //75 #ARABIC LETTER TEH
+ 0x062B, //76 #ARABIC LETTER THEH
+ 0x062C, //77 #ARABIC LETTER JEEM
+ 0x062D, //78 #ARABIC LETTER HAH
+ 0x062E, //79 #ARABIC LETTER KHAH
+ 0x062F, //80 #ARABIC LETTER DAL
+ 0x0630, //81 #ARABIC LETTER THAL
+ 0x0631, //82 #ARABIC LETTER REH
+ 0x0632, //83 #ARABIC LETTER ZAIN
+ 0x0633, //84 #ARABIC LETTER SEEN
+ 0x0634, //85 #ARABIC LETTER SHEEN
+ 0x0635, //86 #ARABIC LETTER SAD
+ 0x0636, //87 #ARABIC LETTER DAD
+ 0x00D7, //88 #MULTIPLICATION SIGN
+ 0x0637, //89 #ARABIC LETTER TAH
+ 0x0638, //90 #ARABIC LETTER ZAH
+ 0x0639, //91 #ARABIC LETTER AIN
+ 0x063A, //92 #ARABIC LETTER GHAIN
+ 0x0640, //93 #ARABIC TATWEEL
+ 0x0641, //94 #ARABIC LETTER FEH
+ 0x0642, //95 #ARABIC LETTER QAF
+ 0x0643, //96 #ARABIC LETTER KAF
+ 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE
+ 0x0644, //98 #ARABIC LETTER LAM
+ 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 0x0645, //100 #ARABIC LETTER MEEM
+ 0x0646, //101 #ARABIC LETTER NOON
+ 0x0647, //102 #ARABIC LETTER HEH
+ 0x0648, //103 #ARABIC LETTER WAW
+ 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA
+ 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE
+ 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE
+ 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS
+ 0x0649, //109 #ARABIC LETTER ALEF MAKSURA
+ 0x064A, //110 #ARABIC LETTER YEH
+ 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS
+ 0x064B, //113 #ARABIC FATHATAN
+ 0x064C, //114 #ARABIC DAMMATAN
+ 0x064D, //115 #ARABIC KASRATAN
+ 0x064E, //116 #ARABIC FATHA
+ 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 0x064F, //118 #ARABIC DAMMA
+ 0x0650, //119 #ARABIC KASRA
+ 0x00F7, //120 #DIVISION SIGN
+ 0x0651, //121 #ARABIC SHADDA
+ 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE
+ 0x0652, //123 #ARABIC SUKUN
+ 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS
+ 0x200E, //126 #LEFT-TO-RIGHT MARK
+ 0x200F, //127 #RIGHT-TO-LEFT MARK
+ 0x06D2 //128 #ARABIC LETTER YEH BARREE
+};
+
+//Table 1257
+static const int DRW_Table1257[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00 , //2 #UNDEFINED
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x00 , //4 #UNDEFINED
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x00 , //9 #UNDEFINED
+ 0x2030, //10 #PER MILLE SIGN
+ 0x00 , //11 #UNDEFINED
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x00 , //13 #UNDEFINED
+ 0x00A8, //14 #DIAERESIS
+ 0x02C7, //15 #CARON
+ 0x00B8, //16 #CEDILLA
+ 0x00 , //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x00 , //25 #UNDEFINED
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x00 , //27 #UNDEFINED
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x00 , //29 #UNDEFINED
+ 0x00AF, //30 #MACRON
+ 0x02DB, //31 #OGONEK
+ 0x00 , //32 #UNDEFINED
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x00 , //34 #UNDEFINED
+ 0x00A2, //35 #CENT SIGN
+ 0x00A3, //36 #POUND SIGN
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x00 , //38 #UNDEFINED
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00D8, //41 #LATIN CAPITAL LETTER O WITH STROKE
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x0156, //43 #LATIN CAPITAL LETTER R WITH CEDILLA
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x00C6, //48 #LATIN CAPITAL LETTER AE
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x00B4, //53 #ACUTE ACCENT
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x00F8, //57 #LATIN SMALL LETTER O WITH STROKE
+ 0x00B9, //58 #SUPERSCRIPT ONE
+ 0x0157, //59 #LATIN SMALL LETTER R WITH CEDILLA
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00BC, //61 #VULGAR FRACTION ONE QUARTER
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS
+ 0x00E6, //64 #LATIN SMALL LETTER AE
+ 0x0104, //65 #LATIN CAPITAL LETTER A WITH OGONEK
+ 0x012E, //66 #LATIN CAPITAL LETTER I WITH OGONEK
+ 0x0100, //67 #LATIN CAPITAL LETTER A WITH MACRON
+ 0x0106, //68 #LATIN CAPITAL LETTER C WITH ACUTE
+ 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS
+ 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE
+ 0x0118, //71 #LATIN CAPITAL LETTER E WITH OGONEK
+ 0x0112, //72 #LATIN CAPITAL LETTER E WITH MACRON
+ 0x010C, //73 #LATIN CAPITAL LETTER C WITH CARON
+ 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE
+ 0x0179, //75 #LATIN CAPITAL LETTER Z WITH ACUTE
+ 0x0116, //76 #LATIN CAPITAL LETTER E WITH DOT ABOVE
+ 0x0122, //77 #LATIN CAPITAL LETTER G WITH CEDILLA
+ 0x0136, //78 #LATIN CAPITAL LETTER K WITH CEDILLA
+ 0x012A, //79 #LATIN CAPITAL LETTER I WITH MACRON
+ 0x013B, //80 #LATIN CAPITAL LETTER L WITH CEDILLA
+ 0x0160, //81 #LATIN CAPITAL LETTER S WITH CARON
+ 0x0143, //82 #LATIN CAPITAL LETTER N WITH ACUTE
+ 0x0145, //83 #LATIN CAPITAL LETTER N WITH CEDILLA
+ 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE
+ 0x014C, //85 #LATIN CAPITAL LETTER O WITH MACRON
+ 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE
+ 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS
+ 0x00D7, //88 #MULTIPLICATION SIGN
+ 0x0172, //89 #LATIN CAPITAL LETTER U WITH OGONEK
+ 0x0141, //90 #LATIN CAPITAL LETTER L WITH STROKE
+ 0x015A, //91 #LATIN CAPITAL LETTER S WITH ACUTE
+ 0x016A, //92 #LATIN CAPITAL LETTER U WITH MACRON
+ 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS
+ 0x017B, //94 #LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ 0x017D, //95 #LATIN CAPITAL LETTER Z WITH CARON
+ 0x00DF, //96 #LATIN SMALL LETTER SHARP S
+ 0x0105, //97 #LATIN SMALL LETTER A WITH OGONEK
+ 0x012F, //98 #LATIN SMALL LETTER I WITH OGONEK
+ 0x0101, //99 #LATIN SMALL LETTER A WITH MACRON
+ 0x0107, //100 #LATIN SMALL LETTER C WITH ACUTE
+ 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS
+ 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE
+ 0x0119, //103 #LATIN SMALL LETTER E WITH OGONEK
+ 0x0113, //104 #LATIN SMALL LETTER E WITH MACRON
+ 0x010D, //105 #LATIN SMALL LETTER C WITH CARON
+ 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE
+ 0x017A, //107 #LATIN SMALL LETTER Z WITH ACUTE
+ 0x0117, //108 #LATIN SMALL LETTER E WITH DOT ABOVE
+ 0x0123, //109 #LATIN SMALL LETTER G WITH CEDILLA
+ 0x0137, //110 #LATIN SMALL LETTER K WITH CEDILLA
+ 0x012B, //111 #LATIN SMALL LETTER I WITH MACRON
+ 0x013C, //112 #LATIN SMALL LETTER L WITH CEDILLA
+ 0x0161, //113 #LATIN SMALL LETTER S WITH CARON
+ 0x0144, //114 #LATIN SMALL LETTER N WITH ACUTE
+ 0x0146, //115 #LATIN SMALL LETTER N WITH CEDILLA
+ 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE
+ 0x014D, //117 #LATIN SMALL LETTER O WITH MACRON
+ 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE
+ 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS
+ 0x00F7, //120 #DIVISION SIGN
+ 0x0173, //121 #LATIN SMALL LETTER U WITH OGONEK
+ 0x0142, //122 #LATIN SMALL LETTER L WITH STROKE
+ 0x015B, //123 #LATIN SMALL LETTER S WITH ACUTE
+ 0x016B, //124 #LATIN SMALL LETTER U WITH MACRON
+ 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS
+ 0x017C, //126 #LATIN SMALL LETTER Z WITH DOT ABOVE
+ 0x017E, //127 #LATIN SMALL LETTER Z WITH CARON
+ 0x02D9 //128 #DOT ABOVE
+};
+
+//Table 1258
+static const int DRW_Table1258[] = {
+ 0x20AC, //1 #EURO SIGN
+ 0x00 , //2 #UNDEFINED
+ 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK
+ 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK
+ 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK
+ 0x2026, //6 #HORIZONTAL ELLIPSIS
+ 0x2020, //7 #DAGGER
+ 0x2021, //8 #DOUBLE DAGGER
+ 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT
+ 0x2030, //10 #PER MILLE SIGN
+ 0x00 , //11 #UNDEFINED
+ 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 0x0152, //13 #LATIN CAPITAL LIGATURE OE
+ 0x00 , //14 #UNDEFINED
+ 0x00 , //15 #UNDEFINED
+ 0x00 , //16 #UNDEFINED
+ 0x00 , //17 #UNDEFINED
+ 0x2018, //18 #LEFT SINGLE QUOTATION MARK
+ 0x2019, //19 #RIGHT SINGLE QUOTATION MARK
+ 0x201C, //20 #LEFT DOUBLE QUOTATION MARK
+ 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK
+ 0x2022, //22 #BULLET
+ 0x2013, //23 #EN DASH
+ 0x2014, //24 #EM DASH
+ 0x02DC, //25 #SMALL TILDE
+ 0x2122, //26 #TRADE MARK SIGN
+ 0x00 , //27 #UNDEFINED
+ 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 0x0153, //29 #LATIN SMALL LIGATURE OE
+ 0x00 , //30 #UNDEFINED
+ 0x00 , //31 #UNDEFINED
+ 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS
+ 0x00A0, //33 #NO-BREAK SPACE
+ 0x00A1, //34 #INVERTED EXCLAMATION MARK
+ 0x00A2, //35 #CENT SIGN
+ 0x00A3, //36 #POUND SIGN
+ 0x00A4, //37 #CURRENCY SIGN
+ 0x00A5, //38 #YEN SIGN
+ 0x00A6, //39 #BROKEN BAR
+ 0x00A7, //40 #SECTION SIGN
+ 0x00A8, //41 #DIAERESIS
+ 0x00A9, //42 #COPYRIGHT SIGN
+ 0x00AA, //43 #FEMININE ORDINAL INDICATOR
+ 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00AC, //45 #NOT SIGN
+ 0x00AD, //46 #SOFT HYPHEN
+ 0x00AE, //47 #REGISTERED SIGN
+ 0x00AF, //48 #MACRON
+ 0x00B0, //49 #DEGREE SIGN
+ 0x00B1, //50 #PLUS-MINUS SIGN
+ 0x00B2, //51 #SUPERSCRIPT TWO
+ 0x00B3, //52 #SUPERSCRIPT THREE
+ 0x00B4, //53 #ACUTE ACCENT
+ 0x00B5, //54 #MICRO SIGN
+ 0x00B6, //55 #PILCROW SIGN
+ 0x00B7, //56 #MIDDLE DOT
+ 0x00B8, //57 #CEDILLA
+ 0x00B9, //58 #SUPERSCRIPT ONE
+ 0x00BA, //59 #MASCULINE ORDINAL INDICATOR
+ 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 0x00BC, //61 #VULGAR FRACTION ONE QUARTER
+ 0x00BD, //62 #VULGAR FRACTION ONE HALF
+ 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS
+ 0x00BF, //64 #INVERTED QUESTION MARK
+ 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE
+ 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE
+ 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 0x0102, //68 #LATIN CAPITAL LETTER A WITH BREVE
+ 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS
+ 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE
+ 0x00C6, //71 #LATIN CAPITAL LETTER AE
+ 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA
+ 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE
+ 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE
+ 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS
+ 0x0300, //77 #COMBINING GRAVE ACCENT
+ 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE
+ 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS
+ 0x0110, //81 #LATIN CAPITAL LETTER D WITH STROKE
+ 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE
+ 0x0309, //83 #COMBINING HOOK ABOVE
+ 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE
+ 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 0x01A0, //86 #LATIN CAPITAL LETTER O WITH HORN
+ 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS
+ 0x00D7, //88 #MULTIPLICATION SIGN
+ 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE
+ 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE
+ 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE
+ 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS
+ 0x01AF, //94 #LATIN CAPITAL LETTER U WITH HORN
+ 0x0303, //95 #COMBINING TILDE
+ 0x00DF, //96 #LATIN SMALL LETTER SHARP S
+ 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE
+ 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE
+ 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 0x0103, //100 #LATIN SMALL LETTER A WITH BREVE
+ 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS
+ 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE
+ 0x00E6, //103 #LATIN SMALL LETTER AE
+ 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA
+ 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE
+ 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE
+ 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS
+ 0x0301, //109 #COMBINING ACUTE ACCENT
+ 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE
+ 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS
+ 0x0111, //113 #LATIN SMALL LETTER D WITH STROKE
+ 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE
+ 0x0323, //115 #COMBINING DOT BELOW
+ 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE
+ 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 0x01A1, //118 #LATIN SMALL LETTER O WITH HORN
+ 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS
+ 0x00F7, //120 #DIVISION SIGN
+ 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE
+ 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE
+ 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE
+ 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS
+ 0x01B0, //126 #LATIN SMALL LETTER U WITH HORN
+ 0x20AB, //127 #DONG SIGN
+ 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS
+};
+
+#endif // DRW_CPTABLES_H
diff --git a/lib_dxf/intern/drw_textcodec.cpp b/lib_dxf/intern/drw_textcodec.cpp
new file mode 100644
index 0000000..b640bc9
--- /dev/null
+++ b/lib_dxf/intern/drw_textcodec.cpp
@@ -0,0 +1,693 @@
+#include "drw_textcodec.h"
+#include <sstream>
+#include <iomanip>
+#include <algorithm>
+#include "../drw_base.h"
+#include "drw_cptables.h"
+#include "drw_cptable932.h"
+#include "drw_cptable936.h"
+#include "drw_cptable949.h"
+#include "drw_cptable950.h"
+
+DRW_TextCodec::DRW_TextCodec()
+{
+ version = DRW::AC1021;
+ conv = new DRW_Converter( NULL, 0 );
+}
+
+
+DRW_TextCodec::~DRW_TextCodec()
+{
+ delete conv;
+}
+
+
+void DRW_TextCodec::setVersion( std::string* v )
+{
+ std::string versionStr = *v;
+
+ if( versionStr == "AC1009" || versionStr == "AC1006" )
+ {
+ version = DRW::AC1009;
+ cp = "ANSI_1252";
+ setCodePage( &cp );
+ }
+ else if( versionStr == "AC1012" || versionStr == "AC1014"
+ || versionStr == "AC1015" || versionStr == "AC1018" )
+ {
+ version = DRW::AC1015;
+
+ if( cp.empty() ) // codepage not set, initialize
+ {
+ cp = "ANSI_1252";
+ setCodePage( &cp );
+ }
+ }
+ else
+ {
+ version = DRW::AC1021;
+ cp = "ANSI_1252";
+ }
+}
+
+
+void DRW_TextCodec::setCodePage( std::string* c )
+{
+ cp = correctCodePage( *c );
+ delete conv;
+
+ if( version == DRW::AC1009 || version == DRW::AC1015 )
+ {
+ if( cp == "ANSI_874" )
+ conv = new DRW_ConvTable( DRW_Table874, CPLENGHTCOMMON );
+ else if( cp == "ANSI_932" )
+ conv = new DRW_Conv932Table( DRW_Table932, DRW_LeadTable932,
+ DRW_DoubleTable932, CPLENGHT932 );
+ else if( cp == "ANSI_936" )
+ conv = new DRW_ConvDBCSTable( DRW_Table936, DRW_LeadTable936,
+ DRW_DoubleTable936, CPLENGHT936 );
+ else if( cp == "ANSI_949" )
+ conv = new DRW_ConvDBCSTable( DRW_Table949, DRW_LeadTable949,
+ DRW_DoubleTable949, CPLENGHT949 );
+ else if( cp == "ANSI_950" )
+ conv = new DRW_ConvDBCSTable( DRW_Table950, DRW_LeadTable950,
+ DRW_DoubleTable950, CPLENGHT950 );
+ else if( cp == "ANSI_1250" )
+ conv = new DRW_ConvTable( DRW_Table1250, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1251" )
+ conv = new DRW_ConvTable( DRW_Table1251, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1253" )
+ conv = new DRW_ConvTable( DRW_Table1253, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1254" )
+ conv = new DRW_ConvTable( DRW_Table1254, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1255" )
+ conv = new DRW_ConvTable( DRW_Table1255, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1256" )
+ conv = new DRW_ConvTable( DRW_Table1256, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1257" )
+ conv = new DRW_ConvTable( DRW_Table1257, CPLENGHTCOMMON );
+ else if( cp == "ANSI_1258" )
+ conv = new DRW_ConvTable( DRW_Table1258, CPLENGHTCOMMON );
+ else if( cp == "UTF-8" ) // DXF older than 2007 are write in win codepages
+ {
+ cp = "ANSI_1252";
+ conv = new DRW_Converter( NULL, 0 );
+ }
+ else
+ conv = new DRW_ConvTable( DRW_Table1252, CPLENGHTCOMMON );
+ }
+ else
+ {
+ conv = new DRW_Converter( NULL, 0 );
+ }
+}
+
+
+std::string DRW_TextCodec::toUtf8( std::string s )
+{
+ return conv->toUtf8( &s );
+}
+
+
+std::string DRW_TextCodec::fromUtf8( std::string s )
+{
+ return conv->fromUtf8( &s );
+}
+
+
+std::string DRW_Converter::toUtf8( std::string* s )
+{
+ std::string result;
+ int j = 0;
+ unsigned int i = 0;
+
+ for( i = 0; i < s->length(); i++ )
+ {
+ unsigned char c = s->at( i );
+
+ if( c < 0x80 ) // ascii check for /U+????
+ {
+ if( c == '\\' && i + 6 < s->length() && s->at( i + 1 ) == 'U' && s->at( i + 2 ) == '+' )
+ {
+ result += s->substr( j, i - j );
+ result += encodeText( s->substr( i, 7 ) );
+ i += 6;
+ j = i + 1;
+ }
+ }
+ else if( c < 0xE0 ) // 2 bits
+ {
+ i++;
+ }
+ else if( c < 0xF0 ) // 3 bits
+ {
+ i += 2;
+ }
+ else if( c < 0xF8 ) // 4 bits
+ {
+ i += 3;
+ }
+ }
+
+ result += s->substr( j );
+
+ return result;
+}
+
+
+std::string DRW_ConvTable::fromUtf8( std::string* s )
+{
+ std::string result;
+ bool notFound;
+ int code;
+
+ int j = 0;
+
+ for( unsigned int i = 0; i < s->length(); i++ )
+ {
+ unsigned char c = s->at( i );
+
+ if( c > 0x7F ) // need to decode
+ {
+ result += s->substr( j, i - j );
+ std::string part1 = s->substr( i, 4 );
+ int l;
+ code = decodeNum( part1, &l );
+ j = i + l;
+ i = j - 1;
+ notFound = true;
+
+ for( int k = 0; k<cpLenght; k++ )
+ {
+ if( table[k] == code )
+ {
+ result += CPOFFSET + k; // translate from table
+ notFound = false;
+ break;
+ }
+ }
+
+ if( notFound )
+ result += decodeText( code );
+ }
+ }
+
+ result += s->substr( j );
+
+ return result;
+}
+
+
+std::string DRW_ConvTable::toUtf8( std::string* s )
+{
+ std::string res;
+ std::string::iterator it;
+
+ for( it = s->begin(); it < s->end(); ++it )
+ {
+ unsigned char c = *it;
+
+ if( c < 0x80 )
+ {
+ // check for \U+ encoded text
+ if( c == '\\' )
+ {
+ if( it + 6 < s->end() && *(it + 1) == 'U' && *(it + 2) == '+' )
+ {
+ res += encodeText( std::string( it, it + 7 ) );
+ it += 6;
+ }
+ else
+ {
+ res += c; // no \U+ encoded text write
+ }
+ }
+ else
+ res += c; // c!='\' ascii char write
+ }
+ else // end c < 0x80
+ {
+ res += encodeNum( table[c - 0x80] ); // translate from table
+ }
+ } // end for
+
+ return res;
+}
+
+
+std::string DRW_Converter::encodeText( std::string stmp )
+{
+ int code;
+
+#if defined(__APPLE__)
+ int Succeeded = sscanf( &( stmp.substr( 3, 4 )[0]), "%x", &code );
+
+ if( !Succeeded || Succeeded == EOF )
+ code = 0;
+
+#else
+ std::istringstream sd( stmp.substr( 3, 4 ) );
+ sd >> std::hex >> code;
+#endif
+ return encodeNum( code );
+}
+
+
+std::string DRW_Converter::decodeText( int c )
+{
+ std::string res = "\\U+";
+ std::string num;
+
+#if defined(__APPLE__)
+ std::string str( 16, '\0' );
+ snprintf( &(str[0]), 16, "%04X", c );
+ num = str;
+#else
+ std::stringstream ss;
+ ss << std::uppercase << std::setfill( '0' ) << std::setw( 4 ) << std::hex << c;
+ ss >> num;
+#endif
+ res += num;
+ return res;
+}
+
+
+std::string DRW_Converter::encodeNum( int c )
+{
+ unsigned char ret[5];
+
+ if( c < 128 ) // 0-7F US-ASCII 7 bits
+ {
+ ret[0] = c;
+ ret[1] = 0;
+ }
+ else if( c < 0x800 ) // 80-07FF 2 bytes
+ {
+ ret[0] = 0xC0 | (c >> 6);
+ ret[1] = 0x80 | (c & 0x3f);
+ ret[2] = 0;
+ }
+ else if( c< 0x10000 ) // 800-FFFF 3 bytes
+ {
+ ret[0] = 0xe0 | (c >> 12);
+ ret[1] = 0x80 | ( (c >> 6) & 0x3f );
+ ret[2] = 0x80 | (c & 0x3f);
+ ret[3] = 0;
+ }
+ else // 10000-10FFFF 4 bytes
+ {
+ ret[0] = 0xf0 | (c >> 18);
+ ret[1] = 0x80 | ( (c >> 12) & 0x3f );
+ ret[2] = 0x80 | ( (c >> 6) & 0x3f );
+ ret[3] = 0x80 | (c & 0x3f);
+ ret[4] = 0;
+ }
+
+ return std::string( (char*) ret );
+}
+
+
+/** 's' is a string with at least 4 bytes lenght
+** returned 'b' is byte lenght of encoded char: 2,3 or 4
+**/
+int DRW_Converter::decodeNum( std::string s, int* b )
+{
+ int code = 0;
+ unsigned char c = s.at( 0 );
+
+ if( (c & 0xE0) == 0xC0 ) // 2 bytes
+ {
+ code = ( c & 0x1F) << 6;
+ code = (s.at( 1 ) & 0x3F) | code;
+ *b = 2;
+ }
+ else if( (c & 0xF0) == 0xE0 ) // 3 bytes
+ {
+ code = ( c & 0x0F) << 12;
+ code = ( (s.at( 1 ) & 0x3F) << 6 ) | code;
+ code = (s.at( 2 ) & 0x3F) | code;
+ *b = 3;
+ }
+ else if( (c & 0xF8) == 0xF0 ) // 4 bytes
+ {
+ code = ( c & 0x07) << 18;
+ code = ( (s.at( 1 ) & 0x3F) << 12 ) | code;
+ code = ( (s.at( 2 ) & 0x3F) << 6 ) | code;
+ code = (s.at( 3 ) & 0x3F) | code;
+ *b = 4;
+ }
+
+ return code;
+}
+
+
+std::string DRW_ConvDBCSTable::fromUtf8( std::string* s )
+{
+ std::string result;
+ bool notFound;
+ int code;
+
+ int j = 0;
+
+ for( unsigned int i = 0; i < s->length(); i++ )
+ {
+ unsigned char c = s->at( i );
+
+ if( c > 0x7F ) // need to decode
+ {
+ result += s->substr( j, i - j );
+ std::string part1 = s->substr( i, 4 );
+ int l;
+ code = decodeNum( part1, &l );
+ j = i + l;
+ i = j - 1;
+ notFound = true;
+
+ for( int k = 0; k<cpLenght; k++ )
+ {
+ if( doubleTable[k][1] == code )
+ {
+ int data = doubleTable[k][0];
+ char d[3];
+ d[0] = data >> 8;
+ d[1] = data & 0xFF;
+ d[2] = '\0';
+ result += d; // translate from table
+ notFound = false;
+ break;
+ }
+ }
+
+ if( notFound )
+ result += decodeText( code );
+ } // direct conversion
+ }
+
+ result += s->substr( j );
+
+ return result;
+}
+
+
+std::string DRW_ConvDBCSTable::toUtf8( std::string* s )
+{
+ std::string res;
+ std::string::iterator it;
+
+ for( it = s->begin(); it < s->end(); ++it )
+ {
+ bool notFound = true;
+ unsigned char c = *it;
+
+ if( c < 0x80 )
+ {
+ notFound = false;
+
+ // check for \U+ encoded text
+ if( c == '\\' )
+ {
+ if( it + 6 < s->end() && *(it + 1) == 'U' && *(it + 2) == '+' )
+ {
+ res += encodeText( std::string( it, it + 7 ) );
+ it += 6;
+ }
+ else
+ {
+ res += c; // no \U+ encoded text write
+ }
+ }
+ else
+ res += c; // c!='\' ascii char write
+ }
+ else if( c == 0x80 ) // 1 byte table
+ {
+ notFound = false;
+ res += encodeNum( 0x20AC ); // euro sign
+ }
+ else // 2 bytes
+ {
+ ++it;
+ int code = (c << 8) | (unsigned char) (*it);
+ int sta = leadTable[c - 0x81];
+ int end = leadTable[c - 0x80];
+
+ for( int k = sta; k<end; k++ )
+ {
+ if( doubleTable[k][0] == code )
+ {
+ res += encodeNum( doubleTable[k][1] ); // translate from table
+ notFound = false;
+ break;
+ }
+ }
+ }
+
+ // not found
+ if( notFound )
+ res += encodeNum( NOTFOUND936 );
+ } // end for
+
+ return res;
+}
+
+
+std::string DRW_Conv932Table::fromUtf8( std::string* s )
+{
+ std::string result;
+ bool notFound;
+ int code;
+
+ int j = 0;
+
+ for( unsigned int i = 0; i < s->length(); i++ )
+ {
+ unsigned char c = s->at( i );
+
+ if( c > 0x7F ) // need to decode
+ {
+ result += s->substr( j, i - j );
+ std::string part1 = s->substr( i, 4 );
+ int l;
+ code = decodeNum( part1, &l );
+ j = i + l;
+ i = j - 1;
+ notFound = true;
+
+ // 1 byte table
+ if( code > 0xff60 && code < 0xFFA0 )
+ {
+ result += code - CPOFFSET932; // translate from table
+ notFound = false;
+ }
+
+ if( notFound && ( code<0xF8 || (code>0x390 && code<0x542)
+ || (code>0x200F && code<0x9FA1) || code>0xF928 ) )
+ {
+ for( int k = 0; k<cpLenght; k++ )
+ {
+ if( doubleTable[k][1] == code )
+ {
+ int data = doubleTable[k][0];
+ char d[3];
+ d[0] = data >> 8;
+ d[1] = data & 0xFF;
+ d[2] = '\0';
+ result += d; // translate from table
+ notFound = false;
+ break;
+ }
+ }
+ }
+
+ if( notFound )
+ result += decodeText( code );
+ } // direct conversion
+ }
+
+ result += s->substr( j );
+
+ return result;
+}
+
+
+std::string DRW_Conv932Table::toUtf8( std::string* s )
+{
+ std::string res;
+ std::string::iterator it;
+
+ for( it = s->begin(); it < s->end(); ++it )
+ {
+ bool notFound = true;
+ unsigned char c = *it;
+
+ if( c < 0x80 )
+ {
+ notFound = false;
+
+ // check for \U+ encoded text
+ if( c == '\\' )
+ {
+ if( it + 6 < s->end() && *(it + 1) == 'U' && *(it + 2) == '+' )
+ {
+ res += encodeText( std::string( it, it + 7 ) );
+ it += 6;
+ }
+ else
+ {
+ res += c; // no \U+ encoded text write
+ }
+ }
+ else
+ res += c; // c!='\' ascii char write
+ }
+ else if( c > 0xA0 && c < 0xE0 ) // 1 byte table
+ {
+ notFound = false;
+ res += encodeNum( c + CPOFFSET932 ); // translate from table
+ }
+ else // 2 bytes
+ {
+ ++it;
+ int code = (c << 8) | (unsigned char) (*it);
+ int sta;
+ int end = 0;
+
+ if( c > 0x80 && c < 0xA0 )
+ {
+ sta = DRW_LeadTable932[c - 0x81];
+ end = DRW_LeadTable932[c - 0x80];
+ }
+ else if( c > 0xDF && c < 0xFD )
+ {
+ sta = DRW_LeadTable932[c - 0xC1];
+ end = DRW_LeadTable932[c - 0xC0];
+ }
+
+ if( end > 0 )
+ {
+ for( int k = sta; k<end; k++ )
+ {
+ if( DRW_DoubleTable932[k][0] == code )
+ {
+ res += encodeNum( DRW_DoubleTable932[k][1] ); // translate from table
+ notFound = false;
+ break;
+ }
+ }
+ }
+ }
+
+ // not found
+ if( notFound )
+ res += encodeNum( NOTFOUND932 );
+ } // end for
+
+ return res;
+}
+
+
+std::string DRW_TextCodec::correctCodePage( const std::string& s )
+{
+ // stringstream cause crash in OS/X, bug#3597944
+ std::string cp = s;
+
+ transform( cp.begin(), cp.end(), cp.begin(), toupper );
+
+ // Latin/Thai
+ if( cp=="ANSI_874" || cp=="CP874" || cp=="ISO8859-11" || cp=="TIS-620" )
+ {
+ return "ANSI_874";
+ // Central Europe and Eastern Europe
+ }
+ else if( cp=="ANSI_1250" || cp=="CP1250" || cp=="ISO8859-2" )
+ {
+ return "ANSI_1250";
+ // Cyrillic script
+ }
+ else if( cp=="ANSI_1251" || cp=="CP1251" || cp=="ISO8859-5" || cp=="KOI8-R"
+ || cp=="KOI8-U" || cp=="IBM 866" )
+ {
+ return "ANSI_1251";
+ // Western Europe
+ }
+ else if( cp=="ANSI_1252" || cp=="CP1252" || cp=="LATIN1" || cp=="ISO-8859-1"
+ || cp=="CP819" || cp=="CSISO" || cp=="IBM819" || cp=="ISO_8859-1" || cp=="APPLE ROMAN"
+ || cp=="ISO8859-1" || cp=="ISO8859-15" || cp=="ISO-IR-100" || cp=="L1" || cp==
+ "IBM 850" )
+ {
+ return "ANSI_1252";
+ // Greek
+ }
+ else if( cp=="ANSI_1253" || cp=="CP1253" || cp=="iso8859-7" )
+ {
+ return "ANSI_1253";
+ // Turkish
+ }
+ else if( cp=="ANSI_1254" || cp=="CP1254" || cp=="iso8859-9" || cp=="iso8859-3" )
+ {
+ return "ANSI_1254";
+ // Hebrew
+ }
+ else if( cp=="ANSI_1255" || cp=="CP1255" || cp=="iso8859-8" )
+ {
+ return "ANSI_1255";
+ // Arabic
+ }
+ else if( cp=="ANSI_1256" || cp=="CP1256" || cp=="ISO8859-6" )
+ {
+ return "ANSI_1256";
+ // Baltic
+ }
+ else if( cp=="ANSI_1257" || cp=="CP1257" || cp=="ISO8859-4" || cp=="ISO8859-10" || cp==
+ "ISO8859-13" )
+ {
+ return "ANSI_1257";
+ // Vietnamese
+ }
+ else if( cp=="ANSI_1258" || cp=="CP1258" )
+ {
+ return "ANSI_1258";
+
+ // Japanese
+ }
+ else if( cp=="ANSI_932" || cp=="SHIFT-JIS" || cp=="SHIFT_JIS" || cp=="CSSHIFTJIS"
+ || cp=="CSWINDOWS31J" || cp=="MS_KANJI" || cp=="X-MS-CP932" || cp=="X-SJIS"
+ || cp=="EUCJP" || cp=="EUC-JP" || cp=="CSEUCPKDFMTJAPANESE" || cp=="X-EUC"
+ || cp=="X-EUC-JP" || cp=="JIS7" )
+ {
+ return "ANSI_932";
+ // Chinese PRC GBK (XGB) simplified
+ }
+ else if( cp=="ANSI_936" || cp=="GBK" || cp=="GB2312" || cp=="CHINESE" || cp=="CN-GB"
+ || cp=="CSGB2312" || cp=="CSGB231280" || cp=="CSISO58BG231280"
+ || cp=="GB_2312-80" || cp=="GB231280" || cp=="GB2312-80"
+ || cp=="ISO-IR-58" || cp=="GB18030" )
+ {
+ return "ANSI_936";
+ // Korean
+ }
+ else if( cp=="ANSI_949" || cp=="EUCKR" )
+ {
+ return "ANSI_949";
+ // Chinese Big5 (Taiwan, Hong Kong SAR)
+ }
+ else if( cp=="ANSI_950" || cp=="BIG5" || cp=="CN-BIG5" || cp=="CSBIG5"
+ || cp=="X-X-BIG5" || cp=="BIG5-HKSCS" )
+ {
+ return "ANSI_950";
+
+// celtic
+/* } else if (cp=="ISO8859-14") {
+ * return "ISO8859-14";
+ * } else if (cp=="TSCII") {
+ * return "TSCII"; //tamil
+ * } else if (cp=="UTF16") {
+ * return "UTF16"; */
+ }
+ else if( cp=="UTF-8" || cp=="UTF8" || cp=="UTF88-BIT" )
+ {
+ return "UTF-8";
+ }
+
+ return "ANSI_1252";
+}
diff --git a/lib_dxf/intern/drw_textcodec.h b/lib_dxf/intern/drw_textcodec.h
new file mode 100644
index 0000000..1a8c56a
--- /dev/null
+++ b/lib_dxf/intern/drw_textcodec.h
@@ -0,0 +1,99 @@
+#ifndef DRW_TEXTCODEC_H
+#define DRW_TEXTCODEC_H
+
+#include <string>
+
+class DRW_Converter;
+
+class DRW_TextCodec
+{
+public:
+ DRW_TextCodec();
+ ~DRW_TextCodec();
+ std::string fromUtf8( std::string s );
+ std::string toUtf8( std::string s );
+
+ int getVersion() { return version; }
+ void setVersion( std::string* v );
+
+ void setVersion( int v ) { version = v; }
+ void setCodePage( std::string* c );
+
+ void setCodePage( std::string c ) { setCodePage( &c ); }
+ std::string getCodePage() { return cp; }
+
+private:
+ std::string correctCodePage( const std::string& s );
+
+private:
+ int version;
+ std::string cp;
+ DRW_Converter* conv;
+};
+
+class DRW_Converter
+{
+public:
+ DRW_Converter( const int* t, int l )
+ {
+ table = t;
+ cpLenght = l;
+ }
+
+ virtual ~DRW_Converter() {}
+ virtual std::string fromUtf8( std::string* s ) { return *s; }
+ virtual std::string toUtf8( std::string* s );
+ std::string encodeText( std::string stmp );
+ std::string decodeText( int c );
+ std::string encodeNum( int c );
+ int decodeNum( std::string s, int* b );
+
+ const int* table;
+ int cpLenght;
+};
+
+class DRW_ConvTable : public DRW_Converter
+{
+public:
+ DRW_ConvTable( const int* t, int l ) : DRW_Converter( t, l ) {}
+ virtual std::string fromUtf8( std::string* s );
+ virtual std::string toUtf8( std::string* s );
+};
+
+class DRW_ConvDBCSTable : public DRW_Converter
+{
+public:
+ DRW_ConvDBCSTable( const int* t, const int* lt, const int dt[][2], int l ) : DRW_Converter( t,
+ l )
+ {
+ leadTable = lt;
+ doubleTable = dt;
+ }
+
+ virtual std::string fromUtf8( std::string* s );
+ virtual std::string toUtf8( std::string* s );
+
+private:
+ const int* leadTable;
+ const int (*doubleTable)[2];
+};
+
+class DRW_Conv932Table : public DRW_Converter
+{
+public:
+ DRW_Conv932Table( const int* t, const int* lt, const int dt[][2], int l ) : DRW_Converter( t,
+ l )
+ {
+ leadTable = lt;
+ doubleTable = dt;
+ }
+
+ virtual std::string fromUtf8( std::string* s );
+ virtual std::string toUtf8( std::string* s );
+
+private:
+ const int* leadTable;
+ const int (*doubleTable)[2];
+};
+
+#endif // DRW_TEXTCODEC_H
diff --git a/lib_dxf/intern/dxfreader.cpp b/lib_dxf/intern/dxfreader.cpp
new file mode 100644
index 0000000..5ca2df0
--- /dev/null
+++ b/lib_dxf/intern/dxfreader.cpp
@@ -0,0 +1,333 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#include <stdlib.h>
+#include <fstream>
+#include <string>
+#include <sstream>
+#include "dxfreader.h"
+#include "drw_textcodec.h"
+
+#ifdef DRW_DBG
+#include <iostream> // for debug
+#define DBG( a ) std::cerr << a
+#else
+#define DBG( a )
+#endif
+
+bool dxfReader::readRec( int* codeData, bool skip )
+{
+// std::string text;
+ int code;
+
+#ifdef DRW_DBG
+ count = count + 2; // DBG
+/* if (count > 10250)
+ * DBG("line 10256");*/
+#endif
+
+ if( !readCode( &code ) )
+ return false;
+
+ *codeData = code;
+
+ if( code < 10 )
+ readString();
+ else if( code < 60 )
+ readDouble();
+ else if( code < 80 )
+ readInt();
+ else if( code > 89 && code < 100 ) // TODO this is an int 32b
+ readInt32();
+ else if( code == 100 || code == 102 || code == 105 )
+ readString();
+ else if( code > 109 && code < 150 ) // skip not used at the v2012
+ readDouble();
+ else if( code > 159 && code < 170 ) // skip not used at the v2012
+ readInt64();
+ else if( code < 180 )
+ readInt();
+ else if( code > 209 && code < 240 ) // skip not used at the v2012
+ readDouble();
+ else if( code > 269 && code < 290 ) // skip not used at the v2012
+ readInt();
+ else if( code < 300 ) // TODO this is a boolean indicator, int in Binary?
+ readBool();
+ else if( code < 370 )
+ readString();
+ else if( code < 390 )
+ readInt();
+ else if( code < 400 )
+ readString();
+ else if( code < 410 )
+ readInt();
+ else if( code < 420 )
+ readString();
+ else if( code < 430 ) // TODO this is an int 32b
+ readInt32();
+ else if( code < 440 )
+ readString();
+ else if( code < 450 ) // TODO this is an int 32b
+ readInt32();
+ else if( code < 460 ) // TODO this is long??
+ readInt();
+ else if( code < 470 ) // TODO this is a floating point double precision??
+ readDouble();
+ else if( code < 481 )
+ readString();
+ else if( code > 998 && code < 1009 ) // skip not used at the v2012
+ readString();
+ else if( code < 1060 ) // TODO this is a floating point double precision??
+ readDouble();
+ else if( code < 1071 )
+ readInt();
+ else if( code == 1071 ) // TODO this is an int 32b
+ readInt32();
+ else if( skip )
+ // skip safely this dxf entry ( ok for ascii dxf)
+ readString();
+ else
+ // break in binary files because the conduct is unpredictable
+ return false;
+
+ return filestr->good();
+}
+
+
+int dxfReader::getHandleString()
+{
+ int res;
+
+#if defined(__APPLE__)
+ int Succeeded = sscanf( strData.c_str(), "%x", &res );
+
+ if( !Succeeded || Succeeded == EOF )
+ res = 0;
+
+#else
+ std::istringstream Convert( strData );
+
+ if( !(Convert >> std::hex >> res) )
+ res = 0;
+
+#endif
+ return res;
+}
+
+
+bool dxfReaderBinary::readCode( int* code )
+{
+ unsigned short* int16p;
+ char buffer[2];
+
+ filestr->read( buffer, 2 );
+ int16p = (unsigned short*) buffer;
+
+// exist a 32bits int (code 90) with 2 bytes???
+ if( (*code == 90) && (*int16p>2000) )
+ {
+ DBG( *code ); DBG( " de 16bits\n" );
+ filestr->seekg( -4, std::ios_base::cur );
+ filestr->read( buffer, 2 );
+ int16p = (unsigned short*) buffer;
+ }
+
+ *code = *int16p;
+ DBG( *code ); DBG( "\n" );
+
+ return filestr->good();
+}
+
+
+bool dxfReaderBinary::readString()
+{
+ std::getline( *filestr, strData, '\0' );
+
+ DBG( strData ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderBinary::readString( std::string* text )
+{
+ std::getline( *filestr, *text, '\0' );
+
+ DBG( *text ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderBinary::readInt()
+{
+ char buffer[2];
+
+ filestr->read( buffer, 2 );
+ intData = (int) ( (buffer[1] << 8) | buffer[0] );
+ DBG( intData ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderBinary::readInt32()
+{
+ unsigned int* int32p;
+ char buffer[4];
+
+ filestr->read( buffer, 4 );
+ int32p = (unsigned int*) buffer;
+ intData = *int32p;
+ DBG( intData ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderBinary::readInt64()
+{
+ unsigned long long int* int64p; // 64 bits integer pointer
+ char buffer[8];
+
+ filestr->read( buffer, 8 );
+ int64p = (unsigned long long int*) buffer;
+ int64 = *int64p;
+ DBG( int64 ); DBG( " int64\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderBinary::readDouble()
+{
+ double* result;
+ char buffer[8];
+
+ filestr->read( buffer, 8 );
+ result = (double*) buffer;
+ doubleData = *result;
+ DBG( doubleData ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+// saved as int or add a bool member??
+bool dxfReaderBinary::readBool()
+{
+ char buffer[1];
+
+ filestr->read( buffer, 1 );
+ intData = (int) (buffer[0]);
+ DBG( intData ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderAscii::readCode( int* code )
+{
+ std::string text;
+ std::getline( *filestr, text );
+
+ *code = atoi( text.c_str() );
+ DBG( *code ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderAscii::readString( std::string* text )
+{
+ std::getline( *filestr, *text );
+
+ if( !text->empty() && text->at( text->size() - 1 ) == '\r' )
+ text->erase( text->size() - 1 );
+
+ return filestr->good();
+}
+
+
+bool dxfReaderAscii::readString()
+{
+ std::getline( *filestr, strData );
+
+ if( !strData.empty() && strData.at( strData.size() - 1 ) == '\r' )
+ strData.erase( strData.size() - 1 );
+
+ DBG( strData ); DBG( "\n" );
+ return filestr->good();
+}
+
+
+bool dxfReaderAscii::readInt()
+{
+ std::string text;
+
+ if( readString( &text ) )
+ {
+ intData = atoi( text.c_str() );
+ DBG( intData ); DBG( "\n" );
+ return true;
+ }
+ else
+ return false;
+}
+
+
+bool dxfReaderAscii::readInt32()
+{
+ return readInt();
+}
+
+
+bool dxfReaderAscii::readInt64()
+{
+ return readInt();
+}
+
+
+bool dxfReaderAscii::readDouble()
+{
+ std::string text;
+
+ if( readString( &text ) )
+ {
+#if defined(__APPLE__)
+ int succeeded = sscanf( &(text[0]), "%lg", &doubleData );
+
+ if( succeeded != 1 )
+ {
+ DBG( "dxfReaderAscii::readDouble(): reading double error: " );
+ DBG( text );
+ DBG( '\n' );
+ }
+
+#else
+ std::istringstream sd( text );
+ sd >> doubleData;
+ DBG( doubleData ); DBG( '\n' );
+#endif
+ return true;
+ }
+ else
+ return false;
+}
+
+
+// saved as int or add a bool member??
+bool dxfReaderAscii::readBool()
+{
+ std::string text;
+
+ if( readString( &text ) )
+ {
+ intData = atoi( text.c_str() );
+ DBG( intData ); DBG( "\n" );
+ return true;
+ }
+ else
+ return false;
+}
diff --git a/lib_dxf/intern/dxfreader.h b/lib_dxf/intern/dxfreader.h
new file mode 100644
index 0000000..8452449
--- /dev/null
+++ b/lib_dxf/intern/dxfreader.h
@@ -0,0 +1,101 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef DXFREADER_H
+#define DXFREADER_H
+
+#include "drw_textcodec.h"
+
+class dxfReader
+{
+public:
+ dxfReader( std::ifstream* stream )
+ {
+ filestr = stream;
+ doubleData = 0.0;
+ intData = 0;
+ int64 = 0;
+#ifdef DRW_DBG
+ count = 0;
+#endif
+ }
+
+ virtual ~dxfReader() {}
+ virtual bool readCode( int* code ) = 0; // return true if sucesful (not EOF)
+ virtual bool readString( std::string* text ) = 0;
+ virtual bool readString() = 0;
+ bool readRec( int* code, bool skip );
+ virtual bool readInt() = 0;
+ virtual bool readInt32() = 0;
+ virtual bool readInt64() = 0;
+ virtual bool readDouble() = 0;
+ virtual bool readBool() = 0;
+
+ std::string getString() { return strData; }
+ int getHandleString(); // Convert hex string to int
+
+ std::string toUtf8String( std::string t ) { return decoder.toUtf8( t ); }
+ std::string getUtf8String() { return decoder.toUtf8( strData ); }
+ double getDouble() { return doubleData; }
+ int getInt32() { return intData; }
+ unsigned long long int getInt64() { return int64; }
+ bool getBool() { return (intData==0) ? false : true; }
+ int getVersion() { return decoder.getVersion(); }
+ void setVersion( std::string* v ) { decoder.setVersion( v ); }
+ void setCodePage( std::string* c ) { decoder.setCodePage( c ); }
+ std::string getCodePage() { return decoder.getCodePage(); }
+#ifdef DRW_DBG
+ int count; // DBG
+#endif
+
+protected:
+ std::ifstream* filestr;
+ std::string strData;
+ double doubleData;
+ signed int intData; // 32 bits integer
+ unsigned long long int int64; // 64 bits integer
+
+private:
+ DRW_TextCodec decoder;
+};
+
+class dxfReaderBinary : public dxfReader
+{
+public:
+ dxfReaderBinary( std::ifstream* stream ) : dxfReader( stream ) {}
+ virtual ~dxfReaderBinary() {}
+ virtual bool readCode( int* code );
+ virtual bool readString( std::string* text );
+ virtual bool readString();
+ virtual bool readInt();
+ virtual bool readInt32();
+ virtual bool readInt64();
+ virtual bool readDouble();
+ virtual bool readBool();
+};
+
+class dxfReaderAscii : public dxfReader
+{
+public:
+ dxfReaderAscii( std::ifstream* stream ) : dxfReader( stream ) {}
+ virtual ~dxfReaderAscii() {}
+ virtual bool readCode( int* code );
+ virtual bool readString( std::string* text );
+ virtual bool readString();
+ virtual bool readInt();
+ virtual bool readDouble();
+ virtual bool readInt32();
+ virtual bool readInt64();
+ virtual bool readBool();
+};
+
+#endif // DXFREADER_H
diff --git a/lib_dxf/intern/dxfwriter.cpp b/lib_dxf/intern/dxfwriter.cpp
new file mode 100644
index 0000000..fcd9fe7
--- /dev/null
+++ b/lib_dxf/intern/dxfwriter.cpp
@@ -0,0 +1,319 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#include <stdlib.h>
+#include <fstream>
+#include <string>
+#include <algorithm>
+#include "dxfwriter.h"
+
+#ifdef DRW_DBG
+#include <iostream> // for debug
+#define DBG( a ) std::cerr << a
+#else
+#define DBG( a )
+#endif
+
+// RLZ TODO change std::endl to x0D x0A (13 10)
+/*bool dxfWriter::readRec(int *codeData, bool skip) {
+ * // std::string text;
+ * int code;
+ *
+ * #ifdef DRW_DBG
+ * count = count+2; //DBG
+ * #endif
+ *
+ * if (!readCode(&code))
+ * return false;
+ * codeData = code;
+ *
+ * if (code < 10)
+ * readString();
+ * else if (code < 60)
+ * readDouble();
+ * else if (code < 80)
+ * readInt();
+ * else if (code > 89 && code < 100) //TODO this is an int 32b
+ * readInt32();
+ * else if (code == 100 || code == 102 || code == 105)
+ * readString();
+ * else if (code > 109 && code < 150) //skip not used at the v2012
+ * readDouble();
+ * else if (code > 159 && code < 170) //skip not used at the v2012
+ * readInt64();
+ * else if (code < 180)
+ * readInt();
+ * else if (code > 209 && code < 240) //skip not used at the v2012
+ * readDouble();
+ * else if (code > 269 && code < 290) //skip not used at the v2012
+ * readInt();
+ * else if (code < 300) //TODO this is a boolean indicator, int in Binary?
+ * readBool();
+ * else if (code < 370)
+ * readString();
+ * else if (code < 390)
+ * readInt();
+ * else if (code < 400)
+ * readString();
+ * else if (code < 410)
+ * readInt();
+ * else if (code < 420)
+ * readString();
+ * else if (code < 430) //TODO this is an int 32b
+ * readInt32();
+ * else if (code < 440)
+ * readString();
+ * else if (code < 450) //TODO this is an int 32b
+ * readInt32();
+ * else if (code < 460) //TODO this is long??
+ * readInt();
+ * else if (code < 470) //TODO this is a floating point double precision??
+ * readDouble();
+ * else if (code < 481)
+ * readString();
+ * else if (code > 998 && code < 1009) //skip not used at the v2012
+ * readString();
+ * else if (code < 1060) //TODO this is a floating point double precision??
+ * readDouble();
+ * else if (code < 1071)
+ * readInt();
+ * else if (code == 1071) //TODO this is an int 32b
+ * readInt32();
+ * else if (skip)
+ * //skip safely this dxf entry ( ok for ascii dxf)
+ * readString();
+ * else
+ * //break in binary files because the conduct is unpredictable
+ * return false;
+ *
+ * return (filestr->good());
+ * }*/
+
+bool dxfWriter::writeUtf8String( int code, std::string text )
+{
+ std::string t = encoder.fromUtf8( text );
+
+ return writeString( code, t );
+}
+
+
+bool dxfWriter::writeUtf8Caps( int code, std::string text )
+{
+ std::string strname = text;
+ std::transform( strname.begin(), strname.end(), strname.begin(), ::toupper );
+ std::string t = encoder.fromUtf8( strname );
+
+ return writeString( code, t );
+}
+
+
+bool dxfWriterBinary::writeString( int code, std::string text )
+{
+ char bufcode[2];
+
+ bufcode[0] = code & 0xFF;
+ bufcode[1] = code >> 8;
+ filestr->write( bufcode, 2 );
+ *filestr << text << '\0';
+ return filestr->good();
+}
+
+
+/*bool dxfWriterBinary::readCode(int *code) {
+ * unsigned short *int16p;
+ * char buffer[2];
+ * filestr->read(buffer,2);
+ * int16p = (unsigned short *) buffer;
+ * //exist a 32bits int (code 90) with 2 bytes???
+ * if ((*code == 90) && (*int16p>2000)){
+ * DBG(*code); DBG(" de 16bits\n");
+ * filestr->seekg(-4, std::ios_base::cur);
+ * filestr->read(buffer,2);
+ * int16p = (unsigned short *) buffer;
+ * }
+ * code = *int16p;
+ * DBG(*code); DBG("\n");
+ *
+ * return (filestr->good());
+ * }*/
+
+/*bool dxfWriterBinary::readString() {
+ * std::getline(*filestr, strData, '\0');
+ * DBG(strData); DBG("\n");
+ * return (filestr->good());
+ * }*/
+
+/*bool dxfWriterBinary::readString(std::string *text) {
+ * std::getline(*filestr, *text, '\0');
+ * DBG(*text); DBG("\n");
+ * return (filestr->good());
+ * }*/
+
+bool dxfWriterBinary::writeInt16( int code, int data )
+{
+ char bufcode[2];
+ char buffer[2];
+
+ bufcode[0] = code & 0xFF;
+ bufcode[1] = code >> 8;
+ buffer[0] = data & 0xFF;
+ buffer[1] = data >> 8;
+ filestr->write( bufcode, 2 );
+ filestr->write( buffer, 2 );
+ return filestr->good();
+}
+
+
+bool dxfWriterBinary::writeInt32( int code, int data )
+{
+ char buffer[4];
+
+ buffer[0] = code & 0xFF;
+ buffer[1] = code >> 8;
+ filestr->write( buffer, 2 );
+
+ buffer[0] = data & 0xFF;
+ buffer[1] = data >> 8;
+ buffer[2] = data >> 16;
+ buffer[3] = data >> 24;
+ filestr->write( buffer, 4 );
+ return filestr->good();
+}
+
+
+bool dxfWriterBinary::writeInt64( int code, unsigned long long int data )
+{
+ char buffer[8];
+
+ buffer[0] = code & 0xFF;
+ buffer[1] = code >> 8;
+ filestr->write( buffer, 2 );
+
+ buffer[0] = data & 0xFF;
+ buffer[1] = data >> 8;
+ buffer[2] = data >> 16;
+ buffer[3] = data >> 24;
+ buffer[4] = data >> 32;
+ buffer[5] = data >> 40;
+ buffer[6] = data >> 48;
+ buffer[7] = data >> 56;
+ filestr->write( buffer, 8 );
+ return filestr->good();
+}
+
+
+bool dxfWriterBinary::writeDouble( int code, double data )
+{
+ char bufcode[2];
+ char buffer[8];
+
+ bufcode[0] = code & 0xFF;
+ bufcode[1] = code >> 8;
+ filestr->write( bufcode, 2 );
+
+ unsigned char* val;
+ val = (unsigned char*) &data;
+
+ for( int i = 0; i<8; i++ )
+ {
+ buffer[i] = val[i];
+ }
+
+ filestr->write( buffer, 8 );
+ return filestr->good();
+}
+
+
+// saved as int or add a bool member??
+bool dxfWriterBinary::writeBool( int code, bool data )
+{
+ char buffer[1];
+ char bufcode[2];
+
+ bufcode[0] = code & 0xFF;
+ bufcode[1] = code >> 8;
+ filestr->write( bufcode, 2 );
+ buffer[0] = data;
+ filestr->write( buffer, 1 );
+ return filestr->good();
+}
+
+
+bool dxfWriterAscii::writeString( int code, std::string text )
+{
+ *filestr << code << std::endl << text << std::endl;
+ /* std::getline(*filestr, strData, '\0');
+ * DBG(strData); DBG("\n");*/
+ return filestr->good();
+}
+
+
+/*bool dxfWriterAscii::readCode(int *code) {
+ * std::string text;
+ * std::getline(*filestr, text);
+ * code = atoi(text.c_str());
+ * DBG(*code); DBG("\n");
+ * return (filestr->good());
+ * }*/
+/*bool dxfWriterAscii::readString(std::string *text) {
+ * std::getline(*filestr, *text);
+ * if (text->at(text->size()-1) == '\r')
+ * text->erase(text->size()-1);
+ * return (filestr->good());
+ * }*/
+
+/*bool dxfWriterAscii::readString() {
+ * std::getline(*filestr, strData);
+ * if (strData.at(strData.size()-1) == '\r')
+ * strData.erase(strData.size()-1);
+ * DBG(strData); DBG("\n");
+ * return (filestr->good());
+ * }*/
+
+bool dxfWriterAscii::writeInt16( int code, int data )
+{
+// *filestr << code << "\r\n" << data << "\r\n";
+ *filestr << code << std::endl << data << std::endl;
+ return filestr->good();
+}
+
+
+bool dxfWriterAscii::writeInt32( int code, int data )
+{
+ return writeInt16( code, data );
+}
+
+
+bool dxfWriterAscii::writeInt64( int code, unsigned long long int data )
+{
+ *filestr << code << std::endl << data << std::endl;
+ return filestr->good();
+}
+
+
+bool dxfWriterAscii::writeDouble( int code, double data )
+{
+ std::streamsize prec = filestr->precision();
+
+ filestr->precision( 12 );
+ *filestr << code << std::endl << data << std::endl;
+ filestr->precision( prec );
+ return filestr->good();
+}
+
+
+// saved as int or add a bool member??
+bool dxfWriterAscii::writeBool( int code, bool data )
+{
+ *filestr << code << std::endl << data << std::endl;
+ return filestr->good();
+}
diff --git a/lib_dxf/intern/dxfwriter.h b/lib_dxf/intern/dxfwriter.h
new file mode 100644
index 0000000..cd9f0bb
--- /dev/null
+++ b/lib_dxf/intern/dxfwriter.h
@@ -0,0 +1,71 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef DXFWRITER_H
+#define DXFWRITER_H
+
+#include "drw_textcodec.h"
+
+class dxfWriter
+{
+public:
+ dxfWriter( std::ofstream* stream ) { filestr = stream; /*count =0;*/ }
+ virtual ~dxfWriter() {}
+ virtual bool writeString( int code, std::string text ) = 0;
+ bool writeUtf8String( int code, std::string text );
+ bool writeUtf8Caps( int code, std::string text );
+
+ std::string fromUtf8String( std::string t ) { return encoder.fromUtf8( t ); }
+ virtual bool writeInt16( int code, int data ) = 0;
+ virtual bool writeInt32( int code, int data ) = 0;
+ virtual bool writeInt64( int code, unsigned long long int data ) = 0;
+ virtual bool writeDouble( int code, double data ) = 0;
+ virtual bool writeBool( int code, bool data ) = 0;
+
+ void setVersion( std::string* v ) { encoder.setVersion( v ); }
+ void setCodePage( std::string* c ) { encoder.setCodePage( c ); }
+ std::string getCodePage() { return encoder.getCodePage(); }
+
+protected:
+ std::ofstream* filestr;
+
+private:
+ DRW_TextCodec encoder;
+};
+
+class dxfWriterBinary : public dxfWriter
+{
+public:
+ dxfWriterBinary( std::ofstream* stream ) : dxfWriter( stream ) {}
+ virtual ~dxfWriterBinary() {}
+ virtual bool writeString( int code, std::string text );
+ virtual bool writeInt16( int code, int data );
+ virtual bool writeInt32( int code, int data );
+ virtual bool writeInt64( int code, unsigned long long int data );
+ virtual bool writeDouble( int code, double data );
+ virtual bool writeBool( int code, bool data );
+};
+
+class dxfWriterAscii : public dxfWriter
+{
+public:
+ dxfWriterAscii( std::ofstream* stream ) : dxfWriter( stream ) {}
+ virtual ~dxfWriterAscii() {}
+ virtual bool writeString( int code, std::string text );
+ virtual bool writeInt16( int code, int data );
+ virtual bool writeInt32( int code, int data );
+ virtual bool writeInt64( int code, unsigned long long int data );
+ virtual bool writeDouble( int code, double data );
+ virtual bool writeBool( int code, bool data );
+};
+
+#endif // DXFWRITER_H
diff --git a/lib_dxf/libdxfrw.cpp b/lib_dxf/libdxfrw.cpp
new file mode 100644
index 0000000..adc8b61
--- /dev/null
+++ b/lib_dxf/libdxfrw.cpp
@@ -0,0 +1,3985 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+
+#include "libdxfrw.h"
+#include <fstream>
+#include <algorithm>
+#include <sstream>
+#include "intern/drw_textcodec.h"
+#include "intern/dxfreader.h"
+#include "intern/dxfwriter.h"
+#include <assert.h>
+
+#ifdef DRW_DBG
+#include <iostream> // for debug
+#define DBG( a ) std::cerr << a
+#else
+#define DBG( a )
+#endif
+
+#define FIRSTHANDLE 48
+
+/*enum sections {
+ * secUnknown,
+ * secHeader,
+ * secTables,
+ * secBlocks,
+ * secEntities,
+ * secObjects
+ * };*/
+
+dxfRW::dxfRW( const char* name )
+{
+ fileName = name;
+ reader = NULL;
+ writer = NULL;
+ applyExt = false;
+ elParts = 128; // parts munber when convert ellipse to polyline
+
+ version = DRW::UNKNOWNV;
+
+ binary = false;
+ iface = NULL;
+ entCount = 0;
+ wlayer0 = false;
+ dimstyleStd = false;
+ writingBlock = false;
+ currHandle = 0;
+}
+
+
+dxfRW::~dxfRW()
+{
+ if( reader != NULL )
+ delete reader;
+
+ if( writer != NULL )
+ delete writer;
+
+ for( std::vector<DRW_ImageDef*>::iterator it = imageDef.begin(); it!=imageDef.end(); ++it )
+ delete *it;
+
+ imageDef.clear();
+}
+
+
+bool dxfRW::read( DRW_Interface* interface_, bool ext )
+{
+ assert( fileName.empty() == false );
+ bool isOk = false;
+ applyExt = ext;
+ std::ifstream filestr;
+
+ if( interface_ == NULL )
+ return isOk;
+
+ DBG( "dxfRW::read 1def\n" );
+ filestr.open( fileName.c_str(), std::ios_base::in | std::ios::binary );
+
+ if( !filestr.is_open() )
+ return isOk;
+
+ if( !filestr.good() )
+ return isOk;
+
+ char line[22];
+ char line2[22] = "AutoCAD Binary DXF\r\n";
+ line2[20] = (char) 26;
+ line2[21] = '\0';
+ filestr.read( line, 22 );
+ filestr.close();
+ iface = interface_;
+ DBG( "dxfRW::read 2\n" );
+
+ if( strcmp( line, line2 ) == 0 )
+ {
+ filestr.open( fileName.c_str(), std::ios_base::in | std::ios::binary );
+ binary = true;
+ // skip sentinel
+ filestr.seekg( 22, std::ios::beg );
+ reader = new dxfReaderBinary( &filestr );
+ DBG( "dxfRW::read binary file\n" );
+ }
+ else
+ {
+ binary = false;
+ filestr.open( fileName.c_str(), std::ios_base::in );
+ reader = new dxfReaderAscii( &filestr );
+ }
+
+ isOk = processDxf();
+ filestr.close();
+ delete reader;
+ reader = NULL;
+ return isOk;
+}
+
+
+bool dxfRW::write( DRW_Interface* interface_, DRW::Version ver, bool bin )
+{
+ bool isOk = false;
+ std::ofstream filestr;
+
+ version = ver;
+ binary = bin;
+ iface = interface_;
+
+ if( binary )
+ {
+ filestr.open( fileName.c_str(), std::ios_base::out | std::ios::binary | std::ios::trunc );
+ // write sentinel
+ filestr << "AutoCAD Binary DXF\r\n" << (char) 26 << '\0';
+ writer = new dxfWriterBinary( &filestr );
+ DBG( "dxfRW::read binary file\n" );
+ }
+ else
+ {
+ filestr.open( fileName.c_str(), std::ios_base::out | std::ios::trunc );
+ writer = new dxfWriterAscii( &filestr );
+ std::string comm = std::string( "dxfrw " ) + std::string( DRW_VERSION );
+ writer->writeString( 999, comm );
+ }
+
+ DRW_Header header;
+ iface->writeHeader( header );
+ writer->writeString( 0, "SECTION" );
+ entCount = FIRSTHANDLE;
+ header.write( writer, version );
+ writer->writeString( 0, "ENDSEC" );
+ writer->writeString( 0, "SECTION" );
+ writer->writeString( 2, "CLASSES" );
+ writer->writeString( 0, "ENDSEC" );
+ writer->writeString( 0, "SECTION" );
+ writer->writeString( 2, "TABLES" );
+ writeTables();
+ writer->writeString( 0, "ENDSEC" );
+ writer->writeString( 0, "SECTION" );
+ writer->writeString( 2, "BLOCKS" );
+ writeBlocks();
+ writer->writeString( 0, "ENDSEC" );
+
+ writer->writeString( 0, "SECTION" );
+ writer->writeString( 2, "ENTITIES" );
+ iface->writeEntities();
+ writer->writeString( 0, "ENDSEC" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "SECTION" );
+ writer->writeString( 2, "OBJECTS" );
+ writeObjects();
+ writer->writeString( 0, "ENDSEC" );
+ }
+
+ writer->writeString( 0, "EOF" );
+ filestr.flush();
+ filestr.close();
+ isOk = true;
+ delete writer;
+ writer = NULL;
+ return isOk;
+}
+
+
+bool dxfRW::writeEntity( DRW_Entity* ent )
+{
+ ent->handle = ++entCount;
+ writer->writeString( 5, toHexStr( ent->handle ) );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ if( ent->space == 1 )
+ writer->writeInt16( 67, 1 );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeUtf8String( 8, ent->layer );
+ writer->writeUtf8String( 6, ent->lineType );
+ }
+ else
+ {
+ writer->writeUtf8Caps( 8, ent->layer );
+ writer->writeUtf8Caps( 6, ent->lineType );
+ }
+
+ writer->writeInt16( 62, ent->color );
+
+ if( version > DRW::AC1015 && ent->color24 >= 0 )
+ {
+ writer->writeInt32( 420, ent->color24 );
+ }
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeInt16( 370, DRW_LW_Conv::lineWidth2dxfInt( ent->lWeight ) );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeLineType( DRW_LType* ent )
+{
+ std::string strname = ent->name;
+
+ transform( strname.begin(), strname.end(), strname.begin(), ::toupper );
+
+// do not write linetypes handled by library
+ if( strname == "BYLAYER" || strname == "BYBLOCK" || strname == "CONTINUOUS" )
+ {
+ return true;
+ }
+
+ writer->writeString( 0, "LTYPE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( ++entCount ) );
+
+ if( version > DRW::AC1012 )
+ {
+ writer->writeString( 330, "5" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbLinetypeTableRecord" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ writer->writeUtf8Caps( 2, ent->name );
+
+ writer->writeInt16( 70, ent->flags );
+ writer->writeUtf8String( 3, ent->desc );
+ ent->update();
+ writer->writeInt16( 72, 65 );
+ writer->writeInt16( 73, ent->size );
+ writer->writeDouble( 40, ent->length );
+
+ for( unsigned int i = 0; i< ent->path.size(); i++ )
+ {
+ writer->writeDouble( 49, ent->path.at( i ) );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeInt16( 74, 0 );
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeLayer( DRW_Layer* ent )
+{
+ writer->writeString( 0, "LAYER" );
+
+ if( !wlayer0 && ent->name == "0" )
+ {
+ wlayer0 = true;
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "10" );
+ }
+ }
+ else
+ {
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( ++entCount ) );
+ }
+ }
+
+ if( version > DRW::AC1012 )
+ {
+ writer->writeString( 330, "2" );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbLayerTableRecord" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ {
+ writer->writeUtf8Caps( 2, ent->name );
+ }
+
+ writer->writeInt16( 70, ent->flags );
+ writer->writeInt16( 62, ent->color );
+
+ if( version > DRW::AC1015 && ent->color24 >= 0 )
+ {
+ writer->writeInt32( 420, ent->color24 );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeUtf8String( 6, ent->lineType );
+
+ if( !ent->plotF )
+ writer->writeBool( 290, ent->plotF );
+
+ writer->writeInt16( 370, DRW_LW_Conv::lineWidth2dxfInt( ent->lWeight ) );
+ writer->writeString( 390, "F" );
+ }
+ else
+ writer->writeUtf8Caps( 6, ent->lineType );
+
+ if( !ent->extData.empty() )
+ {
+ writeExtData( ent->extData );
+ }
+
+// writer->writeString(347, "10012");
+ return true;
+}
+
+
+bool dxfRW::writeTextstyle( DRW_Textstyle* ent )
+{
+ writer->writeString( 0, "STYLE" );
+
+ if( !dimstyleStd )
+ {
+ // stringstream cause crash in OS/X, bug#3597944
+ std::string name = ent->name;
+ transform( name.begin(), name.end(), name.begin(), toupper );
+
+ if( name == "STANDARD" )
+ dimstyleStd = true;
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( ++entCount ) );
+ }
+
+ if( version > DRW::AC1012 )
+ {
+ writer->writeString( 330, "2" );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbTextStyleTableRecord" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ {
+ writer->writeUtf8Caps( 2, ent->name );
+ }
+
+ writer->writeInt16( 70, ent->flags );
+ writer->writeDouble( 40, ent->height );
+ writer->writeDouble( 41, ent->width );
+ writer->writeDouble( 50, ent->oblique );
+ writer->writeInt16( 71, ent->genFlag );
+ writer->writeDouble( 42, ent->lastHeight );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeUtf8String( 3, ent->font );
+ writer->writeUtf8String( 4, ent->bigFont );
+
+ if( ent->fontFamily != 0 )
+ writer->writeInt32( 1071, ent->fontFamily );
+ }
+ else
+ {
+ writer->writeUtf8Caps( 3, ent->font );
+ writer->writeUtf8Caps( 4, ent->bigFont );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeVport( DRW_Vport* ent )
+{
+ if( !dimstyleStd )
+ {
+ ent->name = "*ACTIVE";
+ dimstyleStd = true;
+ }
+
+ writer->writeString( 0, "VPORT" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( ++entCount ) );
+
+ if( version > DRW::AC1012 )
+ writer->writeString( 330, "2" );
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbViewportTableRecord" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ writer->writeUtf8Caps( 2, ent->name );
+
+ writer->writeInt16( 70, ent->flags );
+ writer->writeDouble( 10, ent->lowerLeft.x );
+ writer->writeDouble( 20, ent->lowerLeft.y );
+ writer->writeDouble( 11, ent->UpperRight.x );
+ writer->writeDouble( 21, ent->UpperRight.y );
+ writer->writeDouble( 12, ent->center.x );
+ writer->writeDouble( 22, ent->center.y );
+ writer->writeDouble( 13, ent->snapBase.x );
+ writer->writeDouble( 23, ent->snapBase.y );
+ writer->writeDouble( 14, ent->snapSpacing.x );
+ writer->writeDouble( 24, ent->snapSpacing.y );
+ writer->writeDouble( 15, ent->gridSpacing.x );
+ writer->writeDouble( 25, ent->gridSpacing.y );
+ writer->writeDouble( 16, ent->viewDir.x );
+ writer->writeDouble( 26, ent->viewDir.y );
+ writer->writeDouble( 36, ent->viewDir.z );
+ writer->writeDouble( 17, ent->viewTarget.z );
+ writer->writeDouble( 27, ent->viewTarget.z );
+ writer->writeDouble( 37, ent->viewTarget.z );
+ writer->writeDouble( 40, ent->height );
+ writer->writeDouble( 41, ent->ratio );
+ writer->writeDouble( 42, ent->lensHeight );
+ writer->writeDouble( 43, ent->frontClip );
+ writer->writeDouble( 44, ent->backClip );
+ writer->writeDouble( 50, ent->snapAngle );
+ writer->writeDouble( 51, ent->twistAngle );
+ writer->writeInt16( 71, ent->viewMode );
+ writer->writeInt16( 72, ent->circleZoom );
+ writer->writeInt16( 73, ent->fastZoom );
+ writer->writeInt16( 74, ent->ucsIcon );
+ writer->writeInt16( 75, ent->snap );
+ writer->writeInt16( 76, ent->grid );
+ writer->writeInt16( 77, ent->snapStyle );
+ writer->writeInt16( 78, ent->snapIsopair );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeInt16( 281, 0 );
+ writer->writeInt16( 65, 1 );
+ writer->writeDouble( 110, 0.0 );
+ writer->writeDouble( 120, 0.0 );
+ writer->writeDouble( 130, 0.0 );
+ writer->writeDouble( 111, 1.0 );
+ writer->writeDouble( 121, 0.0 );
+ writer->writeDouble( 131, 0.0 );
+ writer->writeDouble( 112, 0.0 );
+ writer->writeDouble( 122, 1.0 );
+ writer->writeDouble( 132, 0.0 );
+ writer->writeInt16( 79, 0 );
+ writer->writeDouble( 146, 0.0 );
+
+ if( version > DRW::AC1018 )
+ {
+ writer->writeString( 348, "10020" );
+ writer->writeInt16( 60, ent->gridBehavior ); // v2007 undocummented see DRW_Vport class
+ writer->writeInt16( 61, 5 );
+ writer->writeBool( 292, 1 );
+ writer->writeInt16( 282, 1 );
+ writer->writeDouble( 141, 0.0 );
+ writer->writeDouble( 142, 0.0 );
+ writer->writeInt16( 63, 250 );
+ writer->writeInt32( 421, 3358443 );
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeDimstyle( DRW_Dimstyle* ent )
+{
+ writer->writeString( 0, "DIMSTYLE" );
+
+ if( !dimstyleStd )
+ {
+ std::string name = ent->name;
+ std::transform( name.begin(), name.end(), name.begin(), ::toupper );
+
+ if( name == "STANDARD" )
+ dimstyleStd = true;
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 105, toHexStr( ++entCount ) );
+ }
+
+ if( version > DRW::AC1012 )
+ {
+ writer->writeString( 330, "A" );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbDimStyleTableRecord" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ writer->writeUtf8Caps( 2, ent->name );
+
+ writer->writeInt16( 70, ent->flags );
+
+ if( version == DRW::AC1009 || !( ent->dimpost.empty() ) )
+ writer->writeUtf8String( 3, ent->dimpost );
+
+ if( version == DRW::AC1009 || !( ent->dimapost.empty() ) )
+ writer->writeUtf8String( 4, ent->dimapost );
+
+ if( version == DRW::AC1009 || !( ent->dimblk.empty() ) )
+ writer->writeUtf8String( 5, ent->dimblk );
+
+ if( version == DRW::AC1009 || !( ent->dimblk1.empty() ) )
+ writer->writeUtf8String( 6, ent->dimblk1 );
+
+ if( version == DRW::AC1009 || !( ent->dimblk2.empty() ) )
+ writer->writeUtf8String( 7, ent->dimblk2 );
+
+ writer->writeDouble( 40, ent->dimscale );
+ writer->writeDouble( 41, ent->dimasz );
+ writer->writeDouble( 42, ent->dimexo );
+ writer->writeDouble( 43, ent->dimdli );
+ writer->writeDouble( 44, ent->dimexe );
+ writer->writeDouble( 45, ent->dimrnd );
+ writer->writeDouble( 46, ent->dimdle );
+ writer->writeDouble( 47, ent->dimtp );
+ writer->writeDouble( 48, ent->dimtm );
+ writer->writeDouble( 140, ent->dimtxt );
+ writer->writeDouble( 141, ent->dimcen );
+ writer->writeDouble( 142, ent->dimtsz );
+ writer->writeDouble( 143, ent->dimaltf );
+ writer->writeDouble( 144, ent->dimlfac );
+ writer->writeDouble( 145, ent->dimtvp );
+ writer->writeDouble( 146, ent->dimtfac );
+ writer->writeDouble( 147, ent->dimgap );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeDouble( 148, ent->dimaltrnd );
+ }
+
+ writer->writeInt16( 71, ent->dimtol );
+ writer->writeInt16( 72, ent->dimlim );
+ writer->writeInt16( 73, ent->dimtih );
+ writer->writeInt16( 74, ent->dimtoh );
+ writer->writeInt16( 75, ent->dimse1 );
+ writer->writeInt16( 76, ent->dimse2 );
+ writer->writeInt16( 77, ent->dimtad );
+ writer->writeInt16( 78, ent->dimzin );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeInt16( 79, ent->dimazin );
+ }
+
+ writer->writeInt16( 170, ent->dimalt );
+ writer->writeInt16( 171, ent->dimaltd );
+ writer->writeInt16( 172, ent->dimtofl );
+ writer->writeInt16( 173, ent->dimsah );
+ writer->writeInt16( 174, ent->dimtix );
+ writer->writeInt16( 175, ent->dimsoxd );
+ writer->writeInt16( 176, ent->dimclrd );
+ writer->writeInt16( 177, ent->dimclre );
+ writer->writeInt16( 178, ent->dimclrt );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeInt16( 179, ent->dimadec );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ if( version < DRW::AC1015 )
+ writer->writeInt16( 270, ent->dimunit );
+
+ writer->writeInt16( 271, ent->dimdec );
+ writer->writeInt16( 272, ent->dimtdec );
+ writer->writeInt16( 273, ent->dimaltu );
+ writer->writeInt16( 274, ent->dimalttd );
+ writer->writeInt16( 275, ent->dimaunit );
+ }
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeInt16( 276, ent->dimfrac );
+ writer->writeInt16( 277, ent->dimlunit );
+ writer->writeInt16( 278, ent->dimdsep );
+ writer->writeInt16( 279, ent->dimtmove );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeInt16( 280, ent->dimjust );
+ writer->writeInt16( 281, ent->dimsd1 );
+ writer->writeInt16( 282, ent->dimsd2 );
+ writer->writeInt16( 283, ent->dimtolj );
+ writer->writeInt16( 284, ent->dimtzin );
+ writer->writeInt16( 285, ent->dimaltz );
+ writer->writeInt16( 286, ent->dimaltttz );
+
+ if( version < DRW::AC1015 )
+ writer->writeInt16( 287, ent->dimfit );
+
+ writer->writeInt16( 288, ent->dimupt );
+ }
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeInt16( 289, ent->dimatfit );
+ }
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeUtf8String( 340, ent->dimtxsty );
+ }
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeUtf8String( 341, ent->dimldrblk );
+ writer->writeInt16( 371, ent->dimlwd );
+ writer->writeInt16( 372, ent->dimlwe );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeAppId( DRW_AppId* ent )
+{
+ writer->writeString( 0, "APPID" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( ++entCount ) );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "9" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbRegAppTableRecord" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ {
+ writer->writeUtf8Caps( 2, ent->name );
+ }
+
+ writer->writeInt16( 70, ent->flags );
+ return true;
+}
+
+
+bool dxfRW::writePoint( DRW_Point* ent )
+{
+ writer->writeString( 0, "POINT" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbPoint" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, ent->basePoint.z );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeLine( DRW_Line* ent )
+{
+ writer->writeString( 0, "LINE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbLine" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ }
+ else
+ {
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeRay( DRW_Ray* ent )
+{
+ writer->writeString( 0, "RAY" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbRay" );
+ }
+
+ DRW_Coord crd = ent->secPoint;
+ crd.unitize();
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, crd.x );
+ writer->writeDouble( 21, crd.y );
+ writer->writeDouble( 31, crd.z );
+ }
+ else
+ {
+ writer->writeDouble( 11, crd.x );
+ writer->writeDouble( 21, crd.y );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeXline( DRW_Xline* ent )
+{
+ writer->writeString( 0, "XLINE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbXline" );
+ }
+
+ DRW_Coord crd = ent->secPoint;
+ crd.unitize();
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, crd.x );
+ writer->writeDouble( 21, crd.y );
+ writer->writeDouble( 31, crd.z );
+ }
+ else
+ {
+ writer->writeDouble( 11, crd.x );
+ writer->writeDouble( 21, crd.y );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeCircle( DRW_Circle* ent )
+{
+ writer->writeString( 0, "CIRCLE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbCircle" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, ent->basePoint.z );
+ }
+
+ writer->writeDouble( 40, ent->radious );
+ return true;
+}
+
+
+bool dxfRW::writeArc( DRW_Arc* ent )
+{
+ writer->writeString( 0, "ARC" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbCircle" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, ent->basePoint.z );
+ }
+
+ writer->writeDouble( 40, ent->radious );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbArc" );
+ }
+
+ writer->writeDouble( 50, ent->staangle * ARAD );
+ writer->writeDouble( 51, ent->endangle * ARAD );
+ return true;
+}
+
+
+bool dxfRW::writeEllipse( DRW_Ellipse* ent )
+{
+ // verify axis/ratio and params for full ellipse
+ ent->correctAxis();
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "ELLIPSE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbEllipse" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ writer->writeDouble( 40, ent->ratio );
+ writer->writeDouble( 41, ent->staparam );
+ writer->writeDouble( 42, ent->endparam );
+ }
+ else
+ {
+ DRW_Polyline pol;
+ // RLZ: copy properties
+ ent->toPolyline( &pol, elParts );
+ writePolyline( &pol );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeTrace( DRW_Trace* ent )
+{
+ writer->writeString( 0, "TRACE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbTrace" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ writer->writeDouble( 12, ent->thirdPoint.x );
+ writer->writeDouble( 22, ent->thirdPoint.y );
+ writer->writeDouble( 32, ent->thirdPoint.z );
+ writer->writeDouble( 13, ent->fourPoint.x );
+ writer->writeDouble( 23, ent->fourPoint.y );
+ writer->writeDouble( 33, ent->fourPoint.z );
+ return true;
+}
+
+
+bool dxfRW::writeSolid( DRW_Solid* ent )
+{
+ writer->writeString( 0, "SOLID" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbTrace" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ writer->writeDouble( 12, ent->thirdPoint.x );
+ writer->writeDouble( 22, ent->thirdPoint.y );
+ writer->writeDouble( 32, ent->thirdPoint.z );
+ writer->writeDouble( 13, ent->fourPoint.x );
+ writer->writeDouble( 23, ent->fourPoint.y );
+ writer->writeDouble( 33, ent->fourPoint.z );
+ return true;
+}
+
+
+bool dxfRW::write3dface( DRW_3Dface* ent )
+{
+ writer->writeString( 0, "3DFACE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbFace" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ writer->writeDouble( 12, ent->thirdPoint.x );
+ writer->writeDouble( 22, ent->thirdPoint.y );
+ writer->writeDouble( 32, ent->thirdPoint.z );
+ writer->writeDouble( 13, ent->fourPoint.x );
+ writer->writeDouble( 23, ent->fourPoint.y );
+ writer->writeDouble( 33, ent->fourPoint.z );
+ writer->writeInt16( 70, ent->invisibleflag );
+ return true;
+}
+
+
+bool dxfRW::writeLWPolyline( DRW_LWPolyline* ent )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "LWPOLYLINE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbPolyline" );
+ }
+
+ ent->vertexnum = ent->vertlist.size();
+ writer->writeInt32( 90, ent->vertexnum );
+ writer->writeInt16( 70, ent->flags );
+ writer->writeDouble( 43, ent->width );
+
+ if( ent->elevation != 0 )
+ writer->writeDouble( 38, ent->elevation );
+
+ if( ent->thickness != 0 )
+ writer->writeDouble( 39, ent->thickness );
+
+ for( int i = 0; i< ent->vertexnum; i++ )
+ {
+ DRW_Vertex2D* v = ent->vertlist.at( i );
+ writer->writeDouble( 10, v->x );
+ writer->writeDouble( 20, v->y );
+
+ if( v->stawidth != 0 )
+ writer->writeDouble( 40, v->stawidth );
+
+ if( v->endwidth != 0 )
+ writer->writeDouble( 41, v->endwidth );
+
+ if( v->bulge != 0 )
+ writer->writeDouble( 42, v->bulge );
+ }
+ }
+ else
+ {
+ // RLZ: TODO convert lwpolyline in polyline (not exist in acad 12)
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writePolyline( DRW_Polyline* ent )
+{
+ writer->writeString( 0, "POLYLINE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ if( ent->flags & 8 || ent->flags & 16 )
+ writer->writeString( 100, "AcDb2dPolyline" );
+ else
+ writer->writeString( 100, "AcDb3dPolyline" );
+ }
+ else
+ writer->writeInt16( 66, 1 );
+
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ writer->writeDouble( 30, ent->basePoint.z );
+
+ if( ent->thickness != 0 )
+ {
+ writer->writeDouble( 39, ent->thickness );
+ }
+
+ writer->writeInt16( 70, ent->flags );
+
+ if( ent->defstawidth != 0 )
+ {
+ writer->writeDouble( 40, ent->defstawidth );
+ }
+
+ if( ent->defendwidth != 0 )
+ {
+ writer->writeDouble( 41, ent->defendwidth );
+ }
+
+ if( ent->flags & 16 || ent->flags & 32 )
+ {
+ writer->writeInt16( 71, ent->vertexcount );
+ writer->writeInt16( 72, ent->facecount );
+ }
+
+ if( ent->smoothM != 0 )
+ {
+ writer->writeInt16( 73, ent->smoothM );
+ }
+
+ if( ent->smoothN != 0 )
+ {
+ writer->writeInt16( 74, ent->smoothN );
+ }
+
+ if( ent->curvetype != 0 )
+ {
+ writer->writeInt16( 75, ent->curvetype );
+ }
+
+ DRW_Coord crd = ent->extPoint;
+
+ if( crd.x != 0 || crd.y != 0 || crd.z != 1 )
+ {
+ writer->writeDouble( 210, crd.x );
+ writer->writeDouble( 220, crd.y );
+ writer->writeDouble( 230, crd.z );
+ }
+
+ int vertexnum = ent->vertlist.size();
+
+ for( int i = 0; i< vertexnum; i++ )
+ {
+ DRW_Vertex* v = ent->vertlist.at( i );
+ writer->writeString( 0, "VERTEX" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ writer->writeString( 100, "AcDbVertex" );
+
+ if( (v->flags & 128) && !(v->flags & 64) )
+ {
+ writer->writeDouble( 10, 0 );
+ writer->writeDouble( 20, 0 );
+ writer->writeDouble( 30, 0 );
+ }
+ else
+ {
+ writer->writeDouble( 10, v->basePoint.x );
+ writer->writeDouble( 20, v->basePoint.y );
+ writer->writeDouble( 30, v->basePoint.z );
+ }
+
+ if( v->stawidth != 0 )
+ writer->writeDouble( 40, v->stawidth );
+
+ if( v->endwidth != 0 )
+ writer->writeDouble( 41, v->endwidth );
+
+ if( v->bulge != 0 )
+ writer->writeDouble( 42, v->bulge );
+
+ if( v->flags != 0 )
+ {
+ writer->writeInt16( 70, ent->flags );
+ }
+
+ if( v->flags & 2 )
+ {
+ writer->writeDouble( 50, v->tgdir );
+ }
+
+ if( v->flags & 128 )
+ {
+ if( v->vindex1 != 0 )
+ {
+ writer->writeInt16( 71, v->vindex1 );
+ }
+
+ if( v->vindex2 != 0 )
+ {
+ writer->writeInt16( 72, v->vindex2 );
+ }
+
+ if( v->vindex3 != 0 )
+ {
+ writer->writeInt16( 73, v->vindex3 );
+ }
+
+ if( v->vindex4 != 0 )
+ {
+ writer->writeInt16( 74, v->vindex4 );
+ }
+
+ if( !(v->flags & 64) )
+ {
+ writer->writeInt32( 91, v->identifier );
+ }
+ }
+ }
+
+ writer->writeString( 0, "SEQEND" );
+ writeEntity( ent );
+ return true;
+}
+
+
+bool dxfRW::writeSpline( DRW_Spline* ent )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "SPLINE" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbSpline" );
+ }
+
+ writer->writeDouble( 210, ent->ex );
+ writer->writeDouble( 220, ent->ey );
+ writer->writeDouble( 230, ent->ez );
+ writer->writeInt16( 70, ent->flags );
+ writer->writeInt16( 71, ent->degree );
+ writer->writeInt16( 72, ent->nknots );
+ writer->writeInt16( 73, ent->ncontrol );
+ writer->writeInt16( 74, ent->nfit );
+ writer->writeDouble( 42, ent->tolknot );
+ writer->writeDouble( 43, ent->tolcontrol );
+
+ // RLZ: warning check if nknots are correct and ncontrol
+ for( int i = 0; i< ent->nknots; i++ )
+ {
+ writer->writeDouble( 40, ent->knotslist.at( i ) );
+ }
+
+ for( int i = 0; i< ent->ncontrol; i++ )
+ {
+ DRW_Coord* crd = ent->controllist.at( i );
+ writer->writeDouble( 10, crd->x );
+ writer->writeDouble( 20, crd->y );
+ writer->writeDouble( 30, crd->z );
+ }
+ }
+ else
+ {
+ // RLZ: TODO convert spline in polyline (not exist in acad 12)
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeHatch( DRW_Hatch* ent )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "HATCH" );
+ writeEntity( ent );
+ writer->writeString( 100, "AcDbHatch" );
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 210, ent->extPoint.x );
+ writer->writeDouble( 220, ent->extPoint.y );
+ writer->writeDouble( 230, ent->extPoint.z );
+ writer->writeString( 2, ent->name );
+ writer->writeInt16( 70, ent->solid );
+ writer->writeInt16( 71, ent->associative );
+ ent->loopsnum = ent->looplist.size();
+ writer->writeInt16( 91, ent->loopsnum );
+
+ // write paths data
+ for( int i = 0; i< ent->loopsnum; i++ )
+ {
+ DRW_HatchLoop* loop = ent->looplist.at( i );
+ writer->writeInt16( 92, loop->type );
+
+ if( (loop->type & 2) == 2 )
+ {
+ // RLZ: polyline boundary writeme
+ }
+ else
+ {
+ // boundary path
+ loop->update();
+ writer->writeInt16( 93, loop->numedges );
+
+ for( int j = 0; j<loop->numedges; ++j )
+ {
+ switch( ( loop->objlist.at( j ) )->eType )
+ {
+ case DRW::LINE:
+ {
+ writer->writeInt16( 72, 1 );
+ DRW_Line* l = (DRW_Line*) loop->objlist.at( j );
+ writer->writeDouble( 10, l->basePoint.x );
+ writer->writeDouble( 20, l->basePoint.y );
+ writer->writeDouble( 11, l->secPoint.x );
+ writer->writeDouble( 21, l->secPoint.y );
+ break;
+ }
+
+ case DRW::ARC:
+ {
+ writer->writeInt16( 72, 2 );
+ DRW_Arc* a = (DRW_Arc*) loop->objlist.at( j );
+ writer->writeDouble( 10, a->basePoint.x );
+ writer->writeDouble( 20, a->basePoint.y );
+ writer->writeDouble( 40, a->radious );
+ writer->writeDouble( 50, a->staangle * ARAD );
+ writer->writeDouble( 51, a->endangle * ARAD );
+ writer->writeInt16( 73, a->isccw );
+ break;
+ }
+
+ case DRW::ELLIPSE:
+ {
+ writer->writeInt16( 72, 3 );
+ DRW_Ellipse* a = (DRW_Ellipse*) loop->objlist.at( j );
+ a->correctAxis();
+ writer->writeDouble( 10, a->basePoint.x );
+ writer->writeDouble( 20, a->basePoint.y );
+ writer->writeDouble( 11, a->secPoint.x );
+ writer->writeDouble( 21, a->secPoint.y );
+ writer->writeDouble( 40, a->ratio );
+ writer->writeDouble( 50, a->staparam * ARAD );
+ writer->writeDouble( 51, a->endparam * ARAD );
+ writer->writeInt16( 73, a->isccw );
+ break;
+ }
+
+ case DRW::SPLINE:
+ // RLZ: spline boundary writeme
+// writer->writeInt16(72, 4);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ writer->writeInt16( 97, 0 );
+ }
+ }
+
+ writer->writeInt16( 75, ent->hstyle );
+ writer->writeInt16( 76, ent->hpattern );
+
+ if( !ent->solid )
+ {
+ writer->writeDouble( 52, ent->angle );
+ writer->writeDouble( 41, ent->scale );
+ writer->writeInt16( 77, ent->doubleflag );
+ writer->writeInt16( 78, ent->deflines );
+ }
+
+/* if (ent->deflines > 0){
+ * writer->writeInt16(78, ent->deflines);
+ * }*/
+ writer->writeInt32( 98, 0 );
+ }
+ else
+ {
+ // RLZ: TODO verify in acad12
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeLeader( DRW_Leader* ent )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "LEADER" );
+ writeEntity( ent );
+ writer->writeString( 100, "AcDbLeader" );
+ writer->writeUtf8String( 3, ent->style );
+ writer->writeInt16( 71, ent->arrow );
+ writer->writeInt16( 72, ent->leadertype );
+ writer->writeInt16( 73, ent->flag );
+ writer->writeInt16( 74, ent->hookline );
+ writer->writeInt16( 75, ent->hookflag );
+ writer->writeDouble( 40, ent->textheight );
+ writer->writeDouble( 41, ent->textwidth );
+ writer->writeDouble( 76, ent->vertnum );
+ writer->writeDouble( 76, ent->vertexlist.size() );
+
+ for( unsigned int i = 0; i<ent->vertexlist.size(); i++ )
+ {
+ DRW_Coord* vert = ent->vertexlist.at( i );
+ writer->writeDouble( 10, vert->x );
+ writer->writeDouble( 20, vert->y );
+ writer->writeDouble( 30, vert->z );
+ }
+ }
+ else
+ {
+ // RLZ: todo not supported by acad 12 saved as unnamed block
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeDimension( DRW_Dimension* ent )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "DIMENSION" );
+ writeEntity( ent );
+ writer->writeString( 100, "AcDbDimension" );
+
+ if( !ent->getName().empty() )
+ {
+ writer->writeString( 2, ent->getName() );
+ }
+
+ writer->writeDouble( 10, ent->getDefPoint().x );
+ writer->writeDouble( 20, ent->getDefPoint().y );
+ writer->writeDouble( 30, ent->getDefPoint().z );
+ writer->writeDouble( 11, ent->getTextPoint().x );
+ writer->writeDouble( 21, ent->getTextPoint().y );
+ writer->writeDouble( 31, ent->getTextPoint().z );
+
+ if( !(ent->type & 32) )
+ ent->type = ent->type + 32;
+
+ writer->writeInt16( 70, ent->type );
+
+ if( !( ent->getText().empty() ) )
+ writer->writeUtf8String( 1, ent->getText() );
+
+ writer->writeInt16( 71, ent->getAlign() );
+
+ if( ent->getTextLineStyle() != 1 )
+ writer->writeInt16( 72, ent->getTextLineStyle() );
+
+ if( ent->getTextLineFactor() != 1 )
+ writer->writeDouble( 41, ent->getTextLineFactor() );
+
+ writer->writeUtf8String( 3, ent->getStyle() );
+
+ if( ent->getDir() != 0 )
+ writer->writeDouble( 53, ent->getDir() );
+
+ writer->writeDouble( 210, ent->getExtrusion().x );
+ writer->writeDouble( 220, ent->getExtrusion().y );
+ writer->writeDouble( 230, ent->getExtrusion().z );
+
+ switch( ent->eType )
+ {
+ case DRW::DIMALIGNED:
+ case DRW::DIMLINEAR:
+ {
+ DRW_DimAligned* dd = (DRW_DimAligned*) ent;
+ writer->writeString( 100, "AcDbAlignedDimension" );
+ DRW_Coord crd = dd->getClonepoint();
+
+ if( crd.x != 0 || crd.y != 0 || crd.z != 0 )
+ {
+ writer->writeDouble( 12, crd.x );
+ writer->writeDouble( 22, crd.y );
+ writer->writeDouble( 32, crd.z );
+ }
+
+ writer->writeDouble( 13, dd->getDef1Point().x );
+ writer->writeDouble( 23, dd->getDef1Point().y );
+ writer->writeDouble( 33, dd->getDef1Point().z );
+ writer->writeDouble( 14, dd->getDef2Point().x );
+ writer->writeDouble( 24, dd->getDef2Point().y );
+ writer->writeDouble( 34, dd->getDef2Point().z );
+
+ if( ent->eType == DRW::DIMLINEAR )
+ {
+ DRW_DimLinear* dl = (DRW_DimLinear*) ent;
+
+ if( dl->getAngle() != 0 )
+ writer->writeDouble( 50, dl->getAngle() );
+
+ if( dl->getOblique() != 0 )
+ writer->writeDouble( 52, dl->getOblique() );
+
+ writer->writeString( 100, "AcDbRotatedDimension" );
+ }
+
+ break;
+ }
+
+ case DRW::DIMRADIAL:
+ {
+ DRW_DimRadial* dd = (DRW_DimRadial*) ent;
+ writer->writeString( 100, "AcDbRadialDimension" );
+ writer->writeDouble( 15, dd->getDiameterPoint().x );
+ writer->writeDouble( 25, dd->getDiameterPoint().y );
+ writer->writeDouble( 35, dd->getDiameterPoint().z );
+ writer->writeDouble( 40, dd->getLeaderLength() );
+ break;
+ }
+
+ case DRW::DIMDIAMETRIC:
+ {
+ DRW_DimDiametric* dd = (DRW_DimDiametric*) ent;
+ writer->writeString( 100, "AcDbDiametricDimension" );
+ writer->writeDouble( 15, dd->getDiameter1Point().x );
+ writer->writeDouble( 25, dd->getDiameter1Point().y );
+ writer->writeDouble( 35, dd->getDiameter1Point().z );
+ writer->writeDouble( 40, dd->getLeaderLength() );
+ break;
+ }
+
+ case DRW::DIMANGULAR:
+ {
+ DRW_DimAngular* dd = (DRW_DimAngular*) ent;
+ writer->writeString( 100, "AcDb2LineAngularDimension" );
+ writer->writeDouble( 13, dd->getFirstLine1().x );
+ writer->writeDouble( 23, dd->getFirstLine1().y );
+ writer->writeDouble( 33, dd->getFirstLine1().z );
+ writer->writeDouble( 14, dd->getFirstLine2().x );
+ writer->writeDouble( 24, dd->getFirstLine2().y );
+ writer->writeDouble( 34, dd->getFirstLine2().z );
+ writer->writeDouble( 15, dd->getSecondLine1().x );
+ writer->writeDouble( 25, dd->getSecondLine1().y );
+ writer->writeDouble( 35, dd->getSecondLine1().z );
+ writer->writeDouble( 16, dd->getDimPoint().x );
+ writer->writeDouble( 26, dd->getDimPoint().y );
+ writer->writeDouble( 36, dd->getDimPoint().z );
+ break;
+ }
+
+ case DRW::DIMANGULAR3P:
+ {
+ DRW_DimAngular3p* dd = (DRW_DimAngular3p*) ent;
+ writer->writeDouble( 13, dd->getFirstLine().x );
+ writer->writeDouble( 23, dd->getFirstLine().y );
+ writer->writeDouble( 33, dd->getFirstLine().z );
+ writer->writeDouble( 14, dd->getSecondLine().x );
+ writer->writeDouble( 24, dd->getSecondLine().y );
+ writer->writeDouble( 34, dd->getSecondLine().z );
+ writer->writeDouble( 15, dd->getVertexPoint().x );
+ writer->writeDouble( 25, dd->getVertexPoint().y );
+ writer->writeDouble( 35, dd->getVertexPoint().z );
+ break;
+ }
+
+ case DRW::DIMORDINATE:
+ {
+ DRW_DimOrdinate* dd = (DRW_DimOrdinate*) ent;
+ writer->writeString( 100, "AcDbOrdinateDimension" );
+ writer->writeDouble( 13, dd->getFirstLine().x );
+ writer->writeDouble( 23, dd->getFirstLine().y );
+ writer->writeDouble( 33, dd->getFirstLine().z );
+ writer->writeDouble( 14, dd->getSecondLine().x );
+ writer->writeDouble( 24, dd->getSecondLine().y );
+ writer->writeDouble( 34, dd->getSecondLine().z );
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+ else
+ {
+ // RLZ: todo not supported by acad 12 saved as unnamed block
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeInsert( DRW_Insert* ent )
+{
+ writer->writeString( 0, "INSERT" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbBlockReference" );
+ writer->writeUtf8String( 2, ent->name );
+ }
+ else
+ writer->writeUtf8Caps( 2, ent->name );
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 41, ent->xscale );
+ writer->writeDouble( 42, ent->yscale );
+ writer->writeDouble( 43, ent->zscale );
+ writer->writeDouble( 50, ent->angle );
+ writer->writeInt16( 70, ent->colcount );
+ writer->writeInt16( 71, ent->rowcount );
+ writer->writeDouble( 44, ent->colspace );
+ writer->writeDouble( 45, ent->rowspace );
+ return true;
+}
+
+
+bool dxfRW::writeText( DRW_Text* ent )
+{
+ writer->writeString( 0, "TEXT" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbText" );
+ }
+
+// writer->writeDouble(39, ent->thickness);
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 40, ent->height );
+ writer->writeUtf8String( 1, ent->text );
+ writer->writeDouble( 50, ent->angle );
+ writer->writeDouble( 41, ent->widthscale );
+ writer->writeDouble( 51, ent->oblique );
+
+ if( version > DRW::AC1009 )
+ writer->writeUtf8String( 7, ent->style );
+ else
+ writer->writeUtf8Caps( 7, ent->style );
+
+ writer->writeInt16( 71, ent->textgen );
+
+ if( ent->alignH != DRW_Text::HLeft )
+ {
+ writer->writeInt16( 72, ent->alignH );
+ }
+
+ if( ent->alignH != DRW_Text::HLeft || ent->alignV != DRW_Text::VBaseLine )
+ {
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ }
+
+ writer->writeDouble( 210, ent->extPoint.x );
+ writer->writeDouble( 220, ent->extPoint.y );
+ writer->writeDouble( 230, ent->extPoint.z );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbText" );
+ }
+
+ if( ent->alignV != DRW_Text::VBaseLine )
+ {
+ writer->writeInt16( 73, ent->alignV );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeMText( DRW_MText* ent )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "MTEXT" );
+ writeEntity( ent );
+ writer->writeString( 100, "AcDbMText" );
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 40, ent->height );
+ writer->writeDouble( 41, ent->widthscale );
+ writer->writeInt16( 71, ent->textgen );
+ writer->writeInt16( 72, ent->alignH );
+ std::string text = writer->fromUtf8String( ent->text );
+
+ int i;
+
+ for( i = 0; (text.size() - i) > 250; )
+ {
+ writer->writeString( 3, text.substr( i, 250 ) );
+ i += 250;
+ }
+
+ writer->writeString( 1, text.substr( i ) );
+ writer->writeString( 7, ent->style );
+ writer->writeDouble( 210, ent->extPoint.x );
+ writer->writeDouble( 220, ent->extPoint.y );
+ writer->writeDouble( 230, ent->extPoint.z );
+ writer->writeDouble( 50, ent->angle );
+ writer->writeInt16( 73, ent->alignV );
+ writer->writeDouble( 44, ent->interlin );
+// RLZ ... 11, 21, 31 needed?
+ }
+ else
+ {
+ // RLZ: TODO convert mtext in text lines (not exist in acad 12)
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeViewport( DRW_Viewport* ent )
+{
+ writer->writeString( 0, "VIEWPORT" );
+ writeEntity( ent );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbViewport" );
+ }
+
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+
+ if( ent->basePoint.z != 0.0 )
+ writer->writeDouble( 30, ent->basePoint.z );
+
+ writer->writeDouble( 40, ent->pswidth );
+ writer->writeDouble( 41, ent->psheight );
+ writer->writeInt16( 68, ent->vpstatus );
+ writer->writeInt16( 69, ent->vpID );
+ writer->writeDouble( 12, ent->centerPX ); // RLZ: verify if exist in V12
+ writer->writeDouble( 22, ent->centerPY ); // RLZ: verify if exist in V12
+ return true;
+}
+
+
+DRW_ImageDef* dxfRW::writeImage( DRW_Image* ent, std::string name )
+{
+ if( version > DRW::AC1009 )
+ {
+ // search if exist imagedef with this mane (image inserted more than 1 time)
+ // RLZ: imagedef_reactor seem needed to read in acad
+ DRW_ImageDef* id = NULL;
+
+ for( unsigned int i = 0; i<imageDef.size(); i++ )
+ {
+ if( imageDef.at( i )->name == name )
+ {
+ id = imageDef.at( i );
+ continue;
+ }
+ }
+
+ if( id == NULL )
+ {
+ id = new DRW_ImageDef();
+ imageDef.push_back( id );
+ id->handle = toHexStr( ++entCount );
+ }
+
+ id->name = name;
+ std::string idReactor = toHexStr( ++entCount );
+
+ writer->writeString( 0, "IMAGE" );
+ writeEntity( ent );
+ writer->writeString( 100, "AcDbRasterImage" );
+ writer->writeDouble( 10, ent->basePoint.x );
+ writer->writeDouble( 20, ent->basePoint.y );
+ writer->writeDouble( 30, ent->basePoint.z );
+ writer->writeDouble( 11, ent->secPoint.x );
+ writer->writeDouble( 21, ent->secPoint.y );
+ writer->writeDouble( 31, ent->secPoint.z );
+ writer->writeDouble( 12, ent->vx );
+ writer->writeDouble( 22, ent->vy );
+ writer->writeDouble( 32, ent->vz );
+ writer->writeDouble( 13, ent->sizeu );
+ writer->writeDouble( 23, ent->sizev );
+ writer->writeString( 340, id->handle );
+ writer->writeInt16( 70, 1 );
+ writer->writeInt16( 280, ent->clip );
+ writer->writeInt16( 281, ent->brightness );
+ writer->writeInt16( 282, ent->contrast );
+ writer->writeInt16( 283, ent->fade );
+ writer->writeString( 360, idReactor );
+ id->reactors[idReactor] = toHexStr( ent->handle );
+ return id;
+ }
+
+ return NULL; // not exist in acad 12
+}
+
+
+bool dxfRW::writeBlockRecord( std::string name )
+{
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "BLOCK_RECORD" );
+ writer->writeString( 5, toHexStr( ++entCount ) );
+
+ blockMap[name] = entCount;
+ entCount = 2 + entCount; // reserve 2 for BLOCK & ENDBLOCK
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbBlockTableRecord" );
+ writer->writeUtf8String( 2, name );
+
+ if( version > DRW::AC1018 )
+ {
+ // writer->writeInt16(340, 22);
+ writer->writeInt16( 70, 0 );
+ writer->writeInt16( 280, 1 );
+ writer->writeInt16( 281, 0 );
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeBlock( DRW_Block* bk )
+{
+ if( writingBlock )
+ {
+ writer->writeString( 0, "ENDBLK" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( currHandle + 2 ) );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, toHexStr( currHandle ) );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbBlockEnd" );
+ }
+ }
+
+ writingBlock = true;
+ writer->writeString( 0, "BLOCK" );
+
+ if( version > DRW::AC1009 )
+ {
+ currHandle = ( *( blockMap.find( bk->name ) ) ).second;
+ writer->writeString( 5, toHexStr( currHandle + 1 ) );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, toHexStr( currHandle ) );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbBlockBegin" );
+ writer->writeUtf8String( 2, bk->name );
+ }
+ else
+ writer->writeUtf8Caps( 2, bk->name );
+
+ writer->writeInt16( 70, bk->flags );
+ writer->writeDouble( 10, bk->basePoint.x );
+ writer->writeDouble( 20, bk->basePoint.y );
+
+ if( bk->basePoint.z != 0.0 )
+ {
+ writer->writeDouble( 30, bk->basePoint.z );
+ }
+
+ if( version > DRW::AC1009 )
+ writer->writeUtf8String( 3, bk->name );
+ else
+ writer->writeUtf8Caps( 3, bk->name );
+
+ writer->writeString( 1, "" );
+
+ return true;
+}
+
+
+bool dxfRW::writeTables()
+{
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "VPORT" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "8" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 1 ); // end table def
+/*** VPORT ***/
+ dimstyleStd = false;
+ iface->writeVports();
+
+ if( !dimstyleStd )
+ {
+ DRW_Vport portact;
+ portact.name = "*ACTIVE";
+ writeVport( &portact );
+ }
+
+ writer->writeString( 0, "ENDTAB" );
+/*** LTYPE ***/
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "LTYPE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "5" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 4 ); // end table def
+// Mandatory linetypes
+ writer->writeString( 0, "LTYPE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "14" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "5" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbLinetypeTableRecord" );
+ writer->writeString( 2, "ByBlock" );
+ }
+ else
+ writer->writeString( 2, "BYBLOCK" );
+
+ writer->writeInt16( 70, 0 );
+ writer->writeString( 3, "" );
+ writer->writeInt16( 72, 65 );
+ writer->writeInt16( 73, 0 );
+ writer->writeDouble( 40, 0.0 );
+
+ writer->writeString( 0, "LTYPE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "15" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "5" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbLinetypeTableRecord" );
+ writer->writeString( 2, "ByLayer" );
+ }
+ else
+ writer->writeString( 2, "BYLAYER" );
+
+ writer->writeInt16( 70, 0 );
+ writer->writeString( 3, "" );
+ writer->writeInt16( 72, 65 );
+ writer->writeInt16( 73, 0 );
+ writer->writeDouble( 40, 0.0 );
+
+ writer->writeString( 0, "LTYPE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "16" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "5" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbLinetypeTableRecord" );
+ writer->writeString( 2, "Continuous" );
+ }
+ else
+ {
+ writer->writeString( 2, "CONTINUOUS" );
+ }
+
+ writer->writeInt16( 70, 0 );
+ writer->writeString( 3, "Solid line" );
+ writer->writeInt16( 72, 65 );
+ writer->writeInt16( 73, 0 );
+ writer->writeDouble( 40, 0.0 );
+// Aplication linetypes
+ iface->writeLTypes();
+ writer->writeString( 0, "ENDTAB" );
+/*** LAYER ***/
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "LAYER" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "2" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 1 ); // end table def
+ wlayer0 = false;
+ iface->writeLayers();
+
+ if( !wlayer0 )
+ {
+ DRW_Layer lay0;
+ lay0.name = "0";
+ writeLayer( &lay0 );
+ }
+
+ writer->writeString( 0, "ENDTAB" );
+/*** STYLE ***/
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "STYLE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "3" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 3 ); // end table def
+ dimstyleStd = false;
+ iface->writeTextstyles();
+
+ if( !dimstyleStd )
+ {
+ DRW_Textstyle tsty;
+ tsty.name = "Standard";
+ writeTextstyle( &tsty );
+ }
+
+ writer->writeString( 0, "ENDTAB" );
+
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "VIEW" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "6" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 0 ); // end table def
+ writer->writeString( 0, "ENDTAB" );
+
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "UCS" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "7" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 0 ); // end table def
+ writer->writeString( 0, "ENDTAB" );
+
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "APPID" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "9" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 1 ); // end table def
+ writer->writeString( 0, "APPID" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "12" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "9" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbRegAppTableRecord" );
+ }
+
+ writer->writeString( 2, "ACAD" );
+ writer->writeInt16( 70, 0 );
+ iface->writeAppId();
+ writer->writeString( 0, "ENDTAB" );
+
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "DIMSTYLE" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "A" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ }
+
+ writer->writeInt16( 70, 1 ); // end table def
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 100, "AcDbDimStyleTable" );
+ writer->writeInt16( 71, 1 ); // end table def
+ }
+
+ dimstyleStd = false;
+ iface->writeDimstyles();
+
+ if( !dimstyleStd )
+ {
+ DRW_Dimstyle dsty;
+ dsty.name = "Standard";
+ writeDimstyle( &dsty );
+ }
+
+ writer->writeString( 0, "ENDTAB" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "TABLE" );
+ writer->writeString( 2, "BLOCK_RECORD" );
+ writer->writeString( 5, "1" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTable" );
+ writer->writeInt16( 70, 2 ); // end table def
+ writer->writeString( 0, "BLOCK_RECORD" );
+ writer->writeString( 5, "1F" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbBlockTableRecord" );
+ writer->writeString( 2, "*Model_Space" );
+
+ if( version > DRW::AC1018 )
+ {
+ // writer->writeInt16(340, 22);
+ writer->writeInt16( 70, 0 );
+ writer->writeInt16( 280, 1 );
+ writer->writeInt16( 281, 0 );
+ }
+
+ writer->writeString( 0, "BLOCK_RECORD" );
+ writer->writeString( 5, "1E" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1" );
+ }
+
+ writer->writeString( 100, "AcDbSymbolTableRecord" );
+ writer->writeString( 100, "AcDbBlockTableRecord" );
+ writer->writeString( 2, "*Paper_Space" );
+
+ if( version > DRW::AC1018 )
+ {
+ // writer->writeInt16(340, 22);
+ writer->writeInt16( 70, 0 );
+ writer->writeInt16( 280, 1 );
+ writer->writeInt16( 281, 0 );
+ }
+ }
+
+ /* allways call writeBlockRecords to iface for prepare unnamed blocks */
+ iface->writeBlockRecords();
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 0, "ENDTAB" );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeBlocks()
+{
+ writer->writeString( 0, "BLOCK" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "20" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1F" );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbBlockBegin" );
+ writer->writeString( 2, "*Model_Space" );
+ }
+ else
+ writer->writeString( 2, "$MODEL_SPACE" );
+
+ writer->writeInt16( 70, 0 );
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ writer->writeDouble( 30, 0.0 );
+
+ if( version > DRW::AC1009 )
+ writer->writeString( 3, "*Model_Space" );
+ else
+ writer->writeString( 3, "$MODEL_SPACE" );
+
+ writer->writeString( 1, "" );
+ writer->writeString( 0, "ENDBLK" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "21" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1F" );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ writer->writeString( 100, "AcDbBlockEnd" );
+
+ writer->writeString( 0, "BLOCK" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "1C" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1B" );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 100, "AcDbBlockBegin" );
+ writer->writeString( 2, "*Paper_Space" );
+ }
+ else
+ writer->writeString( 2, "$PAPER_SPACE" );
+
+ writer->writeInt16( 70, 0 );
+ writer->writeDouble( 10, 0.0 );
+ writer->writeDouble( 20, 0.0 );
+ writer->writeDouble( 30, 0.0 );
+
+ if( version > DRW::AC1009 )
+ writer->writeString( 3, "*Paper_Space" );
+ else
+ writer->writeString( 3, "$PAPER_SPACE" );
+
+ writer->writeString( 1, "" );
+ writer->writeString( 0, "ENDBLK" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, "1D" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "1F" );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ writer->writeString( 100, "AcDbBlockEnd" );
+
+ writingBlock = false;
+ iface->writeBlocks();
+
+ if( writingBlock )
+ {
+ writingBlock = false;
+ writer->writeString( 0, "ENDBLK" );
+
+ if( version > DRW::AC1009 )
+ {
+ writer->writeString( 5, toHexStr( currHandle + 2 ) );
+
+// writer->writeString(5, "1D");
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, toHexStr( currHandle ) );
+ }
+
+ writer->writeString( 100, "AcDbEntity" );
+ }
+
+ writer->writeString( 8, "0" );
+
+ if( version > DRW::AC1009 )
+ writer->writeString( 100, "AcDbBlockEnd" );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeObjects()
+{
+ writer->writeString( 0, "DICTIONARY" );
+ std::string imgDictH;
+ writer->writeString( 5, "C" );
+
+ if( version > DRW::AC1014 )
+ {
+ writer->writeString( 330, "0" );
+ }
+
+ writer->writeString( 100, "AcDbDictionary" );
+ writer->writeInt16( 281, 1 );
+ writer->writeString( 3, "ACAD_GROUP" );
+ writer->writeString( 350, "D" );
+
+ if( imageDef.size() != 0 )
+ {
+ writer->writeString( 3, "ACAD_IMAGE_DICT" );
+ imgDictH = toHexStr( ++entCount );
+ writer->writeString( 350, imgDictH );
+ }
+
+ writer->writeString( 0, "DICTIONARY" );
+ writer->writeString( 5, "D" );
+ writer->writeString( 330, "C" );
+ writer->writeString( 100, "AcDbDictionary" );
+ writer->writeInt16( 281, 1 );
+
+// write IMAGEDEF_REACTOR
+ for( unsigned int i = 0; i<imageDef.size(); i++ )
+ {
+ DRW_ImageDef* id = imageDef.at( i );
+ std::map<std::string, std::string>::iterator it;
+
+ for( it = id->reactors.begin(); it != id->reactors.end(); ++it )
+ {
+ writer->writeString( 0, "IMAGEDEF_REACTOR" );
+ writer->writeString( 5, (*it).first );
+ writer->writeString( 330, (*it).second );
+ writer->writeString( 100, "AcDbRasterImageDefReactor" );
+ writer->writeInt16( 90, 2 ); // version 2=R14 to v2010
+ writer->writeString( 330, (*it).second );
+ }
+ }
+
+ if( imageDef.size() != 0 )
+ {
+ writer->writeString( 0, "DICTIONARY" );
+ writer->writeString( 5, imgDictH );
+ writer->writeString( 330, "C" );
+ writer->writeString( 100, "AcDbDictionary" );
+ writer->writeInt16( 281, 1 );
+
+ for( unsigned int i = 0; i<imageDef.size(); i++ )
+ {
+ size_t f1, f2;
+ f1 = imageDef.at( i )->name.find_last_of( "/\\" );
+ f2 = imageDef.at( i )->name.find_last_of( '.' );
+ ++f1;
+ writer->writeString( 3, imageDef.at( i )->name.substr( f1, f2 - f1 ) );
+ writer->writeString( 350, imageDef.at( i )->handle );
+ }
+ }
+
+ for( unsigned int i = 0; i<imageDef.size(); i++ )
+ {
+ DRW_ImageDef* id = imageDef.at( i );
+ writer->writeString( 0, "IMAGEDEF" );
+ writer->writeString( 5, id->handle );
+
+ if( version > DRW::AC1014 )
+ {
+// writer->writeString(330, "0"); handle to DICTIONARY
+ }
+
+ writer->writeString( 102, "{ACAD_REACTORS" );
+ std::map<std::string, std::string>::iterator it;
+
+ for( it = id->reactors.begin(); it != id->reactors.end(); ++it )
+ {
+ writer->writeString( 330, (*it).first );
+ }
+
+ writer->writeString( 102, "}" );
+ writer->writeString( 100, "AcDbRasterImageDef" );
+ writer->writeInt16( 90, 0 ); // version 0=R14 to v2010
+ writer->writeUtf8String( 1, id->name );
+ writer->writeDouble( 10, id->u );
+ writer->writeDouble( 20, id->v );
+ writer->writeDouble( 11, id->up );
+ writer->writeDouble( 21, id->vp );
+ writer->writeInt16( 280, id->loaded );
+ writer->writeInt16( 281, id->resolution );
+ }
+
+ // no more needed imageDef, delete it
+ while( !imageDef.empty() )
+ {
+ imageDef.pop_back();
+ }
+
+ return true;
+}
+
+
+bool dxfRW::writeExtData( const std::vector<DRW_Variant*>& ed )
+{
+ for( std::vector<DRW_Variant*>::const_iterator it = ed.begin(); it!=ed.end(); ++it )
+ {
+ switch( (*it)->code )
+ {
+ case 1000:
+ case 1001:
+ case 1002:
+ case 1003:
+ case 1004:
+ case 1005:
+ {
+ int cc = (*it)->code;
+
+ if( (*it)->type == DRW_Variant::STRING )
+ writer->writeUtf8String( cc, *(*it)->content.s );
+
+// writer->writeUtf8String((*it)->code, (*it)->content.s);
+ break;
+ }
+
+ case 1010:
+ case 1011:
+ case 1012:
+ case 1013:
+
+ if( (*it)->type == DRW_Variant::COORD )
+ {
+ writer->writeDouble( (*it)->code, (*it)->content.v->x );
+ writer->writeDouble( (*it)->code + 10, (*it)->content.v->y );
+ writer->writeDouble( (*it)->code + 20, (*it)->content.v->z );
+ }
+
+ break;
+
+ case 1040:
+ case 1041:
+ case 1042:
+
+ if( (*it)->type == DRW_Variant::DOUBLE )
+ writer->writeDouble( (*it)->code, (*it)->content.d );
+
+ break;
+
+ case 1070:
+
+ if( (*it)->type == DRW_Variant::INTEGER )
+ writer->writeInt16( (*it)->code, (*it)->content.i );
+
+ break;
+
+ case 1071:
+
+ if( (*it)->type == DRW_Variant::INTEGER )
+ writer->writeInt32( (*it)->code, (*it)->content.i );
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+/********* Reader Process *********/
+
+bool dxfRW::processDxf()
+{
+ DBG( "dxfRW::processDxf() start processing dxf\n" );
+ int code;
+ bool more = true;
+ std::string sectionstr;
+
+// section = secUnknown;
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( " processDxf\n" );
+
+ if( code == 999 )
+ {
+ header.addComment( reader->getString() );
+ }
+ else if( code == 0 )
+ {
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( " processDxf\n" );
+
+ if( sectionstr == "EOF" )
+ {
+ return true; // found EOF terminate
+ }
+
+ if( sectionstr == "SECTION" )
+ {
+ more = reader->readRec( &code, !binary );
+ DBG( code ); DBG( " processDxf\n" );
+
+ if( !more )
+ return false; // wrong dxf file
+
+ if( code == 2 )
+ {
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( " processDxf\n" );
+
+ // found section, process it
+ if( sectionstr == "HEADER" )
+ {
+ processHeader();
+ }
+ else if( sectionstr == "CLASSES" )
+ {
+// processClasses();
+ }
+ else if( sectionstr == "TABLES" )
+ {
+ processTables();
+ }
+ else if( sectionstr == "BLOCKS" )
+ {
+ processBlocks();
+ }
+ else if( sectionstr == "ENTITIES" )
+ {
+ processEntities( false );
+ }
+ else if( sectionstr == "OBJECTS" )
+ {
+ processObjects();
+ }
+ }
+ }
+ }
+
+/* if (!more)
+ * return true;*/
+ }
+
+ return true;
+}
+
+
+/********* Header Section *********/
+
+bool dxfRW::processHeader()
+{
+ DBG( "dxfRW::processHeader\n" );
+ int code;
+ std::string sectionstr;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( " processHeader\n" );
+
+ if( code == 0 )
+ {
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( " processHeader\n\n" );
+
+ if( sectionstr == "ENDSEC" )
+ {
+ iface->addHeader( &header );
+ return true; // found ENDSEC terminate
+ }
+ }
+ else
+ header.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+/********* Tables Section *********/
+
+bool dxfRW::processTables()
+{
+ DBG( "dxfRW::processTables\n" );
+ int code;
+ std::string sectionstr;
+ bool more = true;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( " processHeader\n\n" );
+
+ if( sectionstr == "TABLE" )
+ {
+ more = reader->readRec( &code, !binary );
+ DBG( code ); DBG( "\n" );
+
+ if( !more )
+ return false; // wrong dxf file
+
+ if( code == 2 )
+ {
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( " processHeader\n\n" );
+
+ // found section, process it
+ if( sectionstr == "LTYPE" )
+ {
+ processLType();
+ }
+ else if( sectionstr == "LAYER" )
+ {
+ processLayer();
+ }
+ else if( sectionstr == "STYLE" )
+ {
+ processTextStyle();
+ }
+ else if( sectionstr == "VPORT" )
+ {
+ processVports();
+ }
+ else if( sectionstr == "VIEW" )
+ {
+// processView();
+ }
+ else if( sectionstr == "UCS" )
+ {
+// processUCS();
+ }
+ else if( sectionstr == "APPID" )
+ {
+ processAppId();
+ }
+ else if( sectionstr == "DIMSTYLE" )
+ {
+ processDimStyle();
+ }
+ else if( sectionstr == "BLOCK_RECORD" )
+ {
+// processBlockRecord();
+ }
+ }
+ }
+ else if( sectionstr == "ENDSEC" )
+ {
+ return true; // found ENDSEC terminate
+ }
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processLType()
+{
+ DBG( "dxfRW::processLType\n" );
+ int code;
+ std::string sectionstr;
+ bool reading = false;
+ DRW_LType ltype;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ if( reading )
+ {
+ ltype.update();
+ iface->addLType( ltype );
+ }
+
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "LTYPE" )
+ {
+ reading = true;
+ ltype.reset();
+ }
+ else if( sectionstr == "ENDTAB" )
+ {
+ return true; // found ENDTAB terminate
+ }
+ }
+ else if( reading )
+ ltype.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processLayer()
+{
+ DBG( "dxfRW::processLayer\n" );
+ int code;
+ std::string sectionstr;
+ bool reading = false;
+ DRW_Layer layer;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ if( reading )
+ iface->addLayer( layer );
+
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "LAYER" )
+ {
+ reading = true;
+ layer.reset();
+ }
+ else if( sectionstr == "ENDTAB" )
+ {
+ return true; // found ENDTAB terminate
+ }
+ }
+ else if( reading )
+ layer.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processDimStyle()
+{
+ DBG( "dxfRW::processDimStyle" );
+ int code;
+ std::string sectionstr;
+ bool reading = false;
+ DRW_Dimstyle dimSty;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ if( reading )
+ iface->addDimStyle( dimSty );
+
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "DIMSTYLE" )
+ {
+ reading = true;
+ dimSty.reset();
+ }
+ else if( sectionstr == "ENDTAB" )
+ {
+ return true; // found ENDTAB terminate
+ }
+ }
+ else if( reading )
+ dimSty.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processTextStyle()
+{
+ DBG( "dxfRW::processTextStyle" );
+ int code;
+ std::string sectionstr;
+ bool reading = false;
+ DRW_Textstyle TxtSty;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ if( reading )
+ iface->addTextStyle( TxtSty );
+
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "STYLE" )
+ {
+ reading = true;
+ TxtSty.reset();
+ }
+ else if( sectionstr == "ENDTAB" )
+ {
+ return true; // found ENDTAB terminate
+ }
+ }
+ else if( reading )
+ TxtSty.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processVports()
+{
+ DBG( "dxfRW::processVports" );
+ int code;
+ std::string sectionstr;
+ bool reading = false;
+ DRW_Vport vp;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ if( reading )
+ iface->addVport( vp );
+
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "VPORT" )
+ {
+ reading = true;
+ vp.reset();
+ }
+ else if( sectionstr == "ENDTAB" )
+ {
+ return true; // found ENDTAB terminate
+ }
+ }
+ else if( reading )
+ vp.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processAppId()
+{
+ DBG( "dxfRW::processAppId" );
+ int code;
+ std::string sectionstr;
+ bool reading = false;
+ DRW_AppId vp;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ if( reading )
+ iface->addAppId( vp );
+
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "APPID" )
+ {
+ reading = true;
+ vp.reset();
+ }
+ else if( sectionstr == "ENDTAB" )
+ {
+ return true; // found ENDTAB terminate
+ }
+ }
+ else if( reading )
+ vp.parseCode( code, reader );
+ }
+
+ return true;
+}
+
+
+/********* Block Section *********/
+
+bool dxfRW::processBlocks()
+{
+ DBG( "dxfRW::processBlocks\n" );
+ int code;
+ std::string sectionstr;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ if( code == 0 )
+ {
+ sectionstr = reader->getString();
+ DBG( sectionstr ); DBG( "\n" );
+
+ if( sectionstr == "BLOCK" )
+ {
+ processBlock();
+ }
+ else if( sectionstr == "ENDSEC" )
+ {
+ return true; // found ENDSEC terminate
+ }
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processBlock()
+{
+ DBG( "dxfRW::processBlock" );
+ int code;
+ DRW_Block block;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addBlock( block );
+
+ if( nextentity == "ENDBLK" )
+ {
+ iface->endBlock();
+ return true; // found ENDBLK, terminate
+ }
+ else
+ {
+ processEntities( true );
+ iface->endBlock();
+ return true; // found ENDBLK, terminate
+ }
+ }
+
+ default:
+ block.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+/********* Entities Section *********/
+
+bool dxfRW::processEntities( bool isblock )
+{
+ DBG( "dxfRW::processEntities\n" );
+ int code;
+
+ if( !reader->readRec( &code, !binary ) )
+ {
+ return false;
+ }
+
+ bool next = true;
+
+ if( code == 0 )
+ {
+ nextentity = reader->getString();
+ }
+ else if( !isblock )
+ {
+ return false; // first record in entities is 0
+ }
+
+ do {
+ if( nextentity == "ENDSEC" || nextentity == "ENDBLK" )
+ {
+ return true; // found ENDSEC or ENDBLK terminate
+ }
+ else if( nextentity == "POINT" )
+ {
+ processPoint();
+ }
+ else if( nextentity == "LINE" )
+ {
+ processLine();
+ }
+ else if( nextentity == "CIRCLE" )
+ {
+ processCircle();
+ }
+ else if( nextentity == "ARC" )
+ {
+ processArc();
+ }
+ else if( nextentity == "ELLIPSE" )
+ {
+ processEllipse();
+ }
+ else if( nextentity == "TRACE" )
+ {
+ processTrace();
+ }
+ else if( nextentity == "SOLID" )
+ {
+ processSolid();
+ }
+ else if( nextentity == "INSERT" )
+ {
+ processInsert();
+ }
+ else if( nextentity == "LWPOLYLINE" )
+ {
+ processLWPolyline();
+ }
+ else if( nextentity == "POLYLINE" )
+ {
+ processPolyline();
+ }
+ else if( nextentity == "TEXT" )
+ {
+ processText();
+ }
+ else if( nextentity == "MTEXT" )
+ {
+ processMText();
+ }
+ else if( nextentity == "HATCH" )
+ {
+ processHatch();
+ }
+ else if( nextentity == "SPLINE" )
+ {
+ processSpline();
+ }
+ else if( nextentity == "3DFACE" )
+ {
+ process3dface();
+ }
+ else if( nextentity == "VIEWPORT" )
+ {
+ processViewport();
+ }
+ else if( nextentity == "IMAGE" )
+ {
+ processImage();
+ }
+ else if( nextentity == "DIMENSION" )
+ {
+ processDimension();
+ }
+ else if( nextentity == "LEADER" )
+ {
+ processLeader();
+ }
+ else if( nextentity == "RAY" )
+ {
+ processRay();
+ }
+ else if( nextentity == "XLINE" )
+ {
+ processXline();
+ }
+ else
+ {
+ if( reader->readRec( &code, !binary ) )
+ {
+ if( code == 0 )
+ nextentity = reader->getString();
+ }
+ else
+ return false; // end of file without ENDSEC
+ }
+ } while( next );
+
+ return true;
+}
+
+
+bool dxfRW::processEllipse()
+{
+ DBG( "dxfRW::processEllipse" );
+ int code;
+ DRW_Ellipse ellipse;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( applyExt )
+ ellipse.applyExtrusion();
+
+ iface->addEllipse( ellipse );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ ellipse.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processTrace()
+{
+ DBG( "dxfRW::processTrace" );
+ int code;
+ DRW_Trace trace;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( applyExt )
+ trace.applyExtrusion();
+
+ iface->addTrace( trace );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ trace.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processSolid()
+{
+ DBG( "dxfRW::processSolid" );
+ int code;
+ DRW_Solid solid;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( applyExt )
+ solid.applyExtrusion();
+
+ iface->addSolid( solid );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ solid.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::process3dface()
+{
+ DBG( "dxfRW::process3dface" );
+ int code;
+ DRW_3Dface face;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->add3dFace( face );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ face.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processViewport()
+{
+ DBG( "dxfRW::processViewport" );
+ int code;
+ DRW_Viewport vp;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addViewport( vp );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ vp.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processPoint()
+{
+ DBG( "dxfRW::processPoint\n" );
+ int code;
+ DRW_Point point;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addPoint( point );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ point.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processLine()
+{
+ DBG( "dxfRW::processLine\n" );
+ int code;
+ DRW_Line line;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addLine( line );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ line.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processRay()
+{
+ DBG( "dxfRW::processRay\n" );
+ int code;
+ DRW_Ray line;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addRay( line );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ line.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processXline()
+{
+ DBG( "dxfRW::processXline\n" );
+ int code;
+ DRW_Xline line;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addXline( line );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ line.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processCircle()
+{
+ DBG( "dxfRW::processPoint\n" );
+ int code;
+ DRW_Circle circle;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( applyExt )
+ circle.applyExtrusion();
+
+ iface->addCircle( circle );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ circle.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processArc()
+{
+ DBG( "dxfRW::processPoint\n" );
+ int code;
+ DRW_Arc arc;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( applyExt )
+ arc.applyExtrusion();
+
+ iface->addArc( arc );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ arc.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processInsert()
+{
+ DBG( "dxfRW::processInsert" );
+ int code;
+ DRW_Insert insert;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addInsert( insert );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ insert.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processLWPolyline()
+{
+ DBG( "dxfRW::processLWPolyline" );
+ int code;
+ DRW_LWPolyline pl;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( applyExt )
+ pl.applyExtrusion();
+
+ iface->addLWPolyline( pl );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ pl.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processPolyline()
+{
+ DBG( "dxfRW::processPolyline" );
+ int code;
+ DRW_Polyline pl;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( nextentity != "VERTEX" )
+ {
+ iface->addPolyline( pl );
+ return true; // found new entity or ENDSEC, terminate
+ }
+ else
+ {
+ processVertex( &pl );
+ }
+ }
+ // Fall through
+ default:
+ pl.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processVertex( DRW_Polyline* pl )
+{
+ DBG( "dxfRW::processVertex" );
+ int code;
+ DRW_Vertex* v = new DRW_Vertex();
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ pl->appendVertex( v );
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+
+ if( nextentity == "SEQEND" )
+ {
+ return true; // found SEQEND no more vertex, terminate
+ }
+ else if( nextentity == "VERTEX" )
+ {
+ v = new DRW_Vertex(); // another vertex
+ }
+ }
+ // Fall through
+ default:
+ v->parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processText()
+{
+ DBG( "dxfRW::processText" );
+ int code;
+ DRW_Text txt;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addText( txt );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ txt.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processMText()
+{
+ DBG( "dxfRW::processMText" );
+ int code;
+ DRW_MText txt;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ txt.updateAngle();
+ iface->addMText( txt );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ txt.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processHatch()
+{
+ DBG( "dxfRW::processHatch" );
+ int code;
+ DRW_Hatch hatch;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addHatch( &hatch );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ hatch.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processSpline()
+{
+ DBG( "dxfRW::processSpline" );
+ int code;
+ DRW_Spline sp;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addSpline( &sp );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ sp.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processImage()
+{
+ DBG( "dxfRW::processImage" );
+ int code;
+ DRW_Image img;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addImage( &img );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ img.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processDimension()
+{
+ DBG( "dxfRW::processDimension" );
+ int code;
+ DRW_Dimension dim;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ int type = dim.type & 0x0F;
+
+ switch( type )
+ {
+ case 0:
+ {
+ DRW_DimLinear d( dim );
+ iface->addDimLinear( &d );
+ break;
+ }
+
+ case 1:
+ {
+ DRW_DimAligned d( dim );
+ iface->addDimAlign( &d );
+ break;
+ }
+
+ case 2:
+ {
+ DRW_DimAngular d( dim );
+ iface->addDimAngular( &d );
+ break;
+ }
+
+ case 3:
+ {
+ DRW_DimDiametric d( dim );
+ iface->addDimDiametric( &d );
+ break;
+ }
+
+ case 4:
+ {
+ DRW_DimRadial d( dim );
+ iface->addDimRadial( &d );
+ break;
+ }
+
+ case 5:
+ {
+ DRW_DimAngular3p d( dim );
+ iface->addDimAngular3P( &d );
+ break;
+ }
+
+ case 6:
+ {
+ DRW_DimOrdinate d( dim );
+ iface->addDimOrdinate( &d );
+ break;
+ }
+ }
+
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ dim.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+bool dxfRW::processLeader()
+{
+ DBG( "dxfRW::processLeader" );
+ int code;
+ DRW_Leader leader;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->addLeader( &leader );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ leader.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+/********* Objects Section *********/
+
+bool dxfRW::processObjects()
+{
+ DBG( "dxfRW::processObjects\n" );
+ int code;
+
+ if( !reader->readRec( &code, !binary ) )
+ {
+ return false;
+ }
+
+ bool next = true;
+
+ if( code == 0 )
+ {
+ nextentity = reader->getString();
+ }
+ else
+ {
+ return false; // first record in objects is 0
+ }
+
+ do {
+ if( nextentity == "ENDSEC" )
+ {
+ return true; // found ENDSEC terminate
+ }
+ else if( nextentity == "IMAGEDEF" )
+ {
+ processImageDef();
+ }
+ else
+ {
+ if( reader->readRec( &code, !binary ) )
+ {
+ if( code == 0 )
+ nextentity = reader->getString();
+ }
+ else
+ return false; // end of file without ENDSEC
+ }
+ } while( next );
+
+ return true;
+}
+
+
+bool dxfRW::processImageDef()
+{
+ DBG( "dxfRW::processImageDef" );
+ int code;
+ DRW_ImageDef img;
+
+ while( reader->readRec( &code, !binary ) )
+ {
+ DBG( code ); DBG( "\n" );
+
+ switch( code )
+ {
+ case 0:
+ {
+ nextentity = reader->getString();
+ DBG( nextentity ); DBG( "\n" );
+ iface->linkImage( &img );
+ return true; // found new entity or ENDSEC, terminate
+ }
+
+ default:
+ img.parseCode( code, reader );
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+/** utility function
+ * convert a int to string in hex
+ **/
+std::string dxfRW::toHexStr( int n )
+{
+#if defined(__APPLE__)
+ char buffer[9] = { '\0' };
+ snprintf( buffer, sizeof(buffer), "%X", n );
+ return std::string( buffer );
+#else
+ std::ostringstream Convert;
+ Convert << std::uppercase << std::hex << n;
+ return Convert.str();
+#endif
+}
diff --git a/lib_dxf/libdxfrw.h b/lib_dxf/libdxfrw.h
new file mode 100644
index 0000000..c37dcb2
--- /dev/null
+++ b/lib_dxf/libdxfrw.h
@@ -0,0 +1,147 @@
+/******************************************************************************
+** libDXFrw - Library to read/write DXF files (ascii & binary) **
+** **
+** Copyright (C) 2011 Rallaz, rallazz@gmail.com **
+** **
+** This library is free software, licensed under the terms of the GNU **
+** General Public License as published by the Free Software Foundation, **
+** either version 2 of the License, or (at your option) any later version. **
+** You should have received a copy of the GNU General Public License **
+** along with this program. If not, see <http://www.gnu.org/licenses/>. **
+******************************************************************************/
+
+#ifndef LIBDXFRW_H
+#define LIBDXFRW_H
+
+#include <string>
+#include "drw_entities.h"
+#include "drw_objects.h"
+#include "drw_interface.h"
+
+
+class dxfReader;
+class dxfWriter;
+
+class dxfRW
+{
+public:
+ dxfRW( const char* name );
+ ~dxfRW();
+ /// reads the file specified in constructor
+ /*!
+ * An interface must be provided. It is used by the class to signal various
+ * components being added.
+ * @param interface_ the interface to use
+ * @param ext should the extrusion be applied to convert in 2D?
+ * @return true for success
+ */
+ bool read( DRW_Interface* interface_, bool ext );
+
+ void setBinary( bool b ) { binary = b; }
+
+ bool write( DRW_Interface* interface_, DRW::Version ver, bool bin );
+ bool writeLineType( DRW_LType* ent );
+ bool writeLayer( DRW_Layer* ent );
+ bool writeDimstyle( DRW_Dimstyle* ent );
+ bool writeTextstyle( DRW_Textstyle* ent );
+ bool writeVport( DRW_Vport* ent );
+ bool writeAppId( DRW_AppId* ent );
+ bool writePoint( DRW_Point* ent );
+ bool writeLine( DRW_Line* ent );
+ bool writeRay( DRW_Ray* ent );
+ bool writeXline( DRW_Xline* ent );
+ bool writeCircle( DRW_Circle* ent );
+ bool writeArc( DRW_Arc* ent );
+ bool writeEllipse( DRW_Ellipse* ent );
+ bool writeTrace( DRW_Trace* ent );
+ bool writeSolid( DRW_Solid* ent );
+ bool write3dface( DRW_3Dface* ent );
+ bool writeLWPolyline( DRW_LWPolyline* ent );
+ bool writePolyline( DRW_Polyline* ent );
+ bool writeSpline( DRW_Spline* ent );
+ bool writeBlockRecord( std::string name );
+ bool writeBlock( DRW_Block* ent );
+ bool writeInsert( DRW_Insert* ent );
+ bool writeMText( DRW_MText* ent );
+ bool writeText( DRW_Text* ent );
+ bool writeHatch( DRW_Hatch* ent );
+ bool writeViewport( DRW_Viewport* ent );
+ DRW_ImageDef* writeImage( DRW_Image* ent, std::string name );
+ bool writeLeader( DRW_Leader* ent );
+ bool writeDimension( DRW_Dimension* ent );
+
+ void setEllipseParts( int parts ) { elParts = parts; } /*!< set parts munber when convert ellipse to polyline */
+
+private:
+ /// used by read() to parse the content of the file
+ bool processDxf();
+ bool processHeader();
+ bool processTables();
+ bool processBlocks();
+ bool processBlock();
+ bool processEntities( bool isblock );
+ bool processObjects();
+
+ bool processLType();
+ bool processLayer();
+ bool processDimStyle();
+ bool processTextStyle();
+ bool processVports();
+ bool processAppId();
+
+ bool processPoint();
+ bool processLine();
+ bool processRay();
+ bool processXline();
+ bool processCircle();
+ bool processArc();
+ bool processEllipse();
+ bool processTrace();
+ bool processSolid();
+ bool processInsert();
+ bool processLWPolyline();
+ bool processPolyline();
+ bool processVertex( DRW_Polyline* pl );
+ bool processText();
+ bool processMText();
+ bool processHatch();
+ bool processSpline();
+ bool process3dface();
+ bool processViewport();
+ bool processImage();
+ bool processImageDef();
+ bool processDimension();
+ bool processLeader();
+
+// bool writeHeader();
+ bool writeEntity( DRW_Entity* ent );
+ bool writeTables();
+ bool writeBlocks();
+ bool writeObjects();
+ bool writeExtData( const std::vector<DRW_Variant*>& ed );
+ std::string toHexStr( int n );
+
+private:
+ DRW::Version version;
+ std::string fileName;
+ std::string codePage;
+ bool binary;
+ dxfReader* reader;
+ dxfWriter* writer;
+ DRW_Interface* iface;
+ DRW_Header header;
+// int section;
+ std::string nextentity;
+ int entCount;
+ bool wlayer0;
+ bool dimstyleStd;
+ bool applyExt;
+ bool writingBlock;
+ int elParts; /*!< parts munber when convert ellipse to polyline */
+ std::map<std::string, int> blockMap;
+ std::vector<DRW_ImageDef*> imageDef; /*!< imageDef list */
+
+ int currHandle;
+};
+
+#endif // LIBDXFRW_H
diff --git a/new/CMakeLists.txt b/new/CMakeLists.txt
new file mode 100644
index 0000000..11a686b
--- /dev/null
+++ b/new/CMakeLists.txt
@@ -0,0 +1,251 @@
+
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+# Copyright (C) 2011 Kicad Developers, see change_log.txt for contributors#.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you may find one here:
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# or you may search the http://www.gnu.org website for the version 2 license,
+# or you may write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+# for now, this is a stand alone project
+if( 1 )
+
+ project(kicad-new)
+
+ cmake_minimum_required( VERSION 2.8 FATAL_ERROR )
+
+ set( PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ )
+
+ # message( "PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}" )
+
+ # Path to local CMake modules.
+ set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules )
+
+ include( CheckFindPackageResult )
+
+ find_package(Doxygen)
+
+ # On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
+ if(APPLE)
+ find_package(wxWidgets COMPONENTS gl adv html core net base xml QUIET )
+ else()
+ find_package(wxWidgets COMPONENTS gl adv html core net base xml aui QUIET )
+ endif()
+
+ check_find_package_result( wxWidgets_FOUND "wxWidgets" )
+
+ # make config.h
+ include( PerformFeatureChecks )
+ perform_feature_checks()
+
+ # Include wxWidgets macros.
+ include( ${wxWidgets_USE_FILE} )
+
+ include_directories( ${PROJECT_SOURCE_DIR}/include )
+
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ # Set default flags for Release build.
+ set(CMAKE_C_FLAGS_RELEASE "-Wall -O2 -DNDEBUG ")
+ set(CMAKE_CXX_FLAGS_RELEASE "-Wall -O2 -DNDEBUG")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-s -static-libgcc")
+
+ # Set default flags for Debug build.
+ set(CMAKE_C_FLAGS_DEBUG "-Wall -g3 -ggdb3 -DDEBUG")
+ set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g3 -ggdb3 -DDEBUG")
+ endif(CMAKE_COMPILER_IS_GNUCXX)
+
+ include(Functions)
+
+endif()
+
+
+#================================================
+# Doxygen Output
+#================================================
+if(DOXYGEN_FOUND)
+ add_custom_target( new-docs ${DOXYGEN_EXECUTABLE}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS Doxyfile )
+else(DOXYGEN_FOUND)
+ message( STATUS "WARNING: Doxygen not found - new-docs (Source Docs) target not created" )
+endif()
+
+
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR} )
+include_directories( ${CMAKE_BINARY_DIR} )
+
+#=====<on standby for possible C++ unit testing>================================
+if( false )
+
+ add_executable( test_dir_lib_source
+ sch_dir_lib_source.cpp
+ )
+ target_link_libraries( test_dir_lib_source ${wxWidgets_LIBRARIES} )
+
+ add_executable( test_sch_part sch_part.cpp )
+ target_link_libraries( test_sch_part ${wxWidgets_LIBRARIES} )
+
+ add_executable( test_lpid
+ sch_lpid.cpp
+ )
+ target_link_libraries( test_lpid ${wxWidgets_LIBRARIES} )
+
+endif( false )
+
+#=====</on standby for possible C++ unit testing>===============================
+
+
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/sch_lib_table.keywords
+ ${CMAKE_CURRENT_SOURCE_DIR}/sch_lib_table_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/sch_lib_table_keywords.cpp
+ LT
+ )
+
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/sweet.keywords
+ ${CMAKE_CURRENT_SOURCE_DIR}/sweet_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/sweet_keywords.cpp
+ PR
+ )
+
+
+add_library( sweet SHARED
+ sch_lib_table.cpp
+ sch_lib_table_keywords.cpp
+ sch_lib.cpp
+ sch_lpid.cpp
+ sch_dir_lib_source.cpp
+ sch_part.cpp
+ sch_sweet_parser.cpp
+ sweet_keywords.cpp
+ ${PROJECT_SOURCE_DIR}/common/richio.cpp
+ ${PROJECT_SOURCE_DIR}/common/dsnlexer.cpp
+ )
+target_link_libraries( sweet ${wxWidgets_LIBRARIES} )
+
+# talk to import_export.h
+set_target_properties( sweet PROPERTIES
+ DEFINE_SYMBOL COMPILING_DLL
+ )
+
+add_executable( test_sch_lib_table test_sch_lib_table.cpp )
+if( MINGW )
+ set_target_properties( test_sch_lib_table PROPERTIES
+ LINK_FLAGS -Wl,--enable-auto-import
+ )
+endif()
+target_link_libraries( test_sch_lib_table sweet )
+
+
+if( 1 )
+
+ find_library( gal_LIBRARY "libgal.a"
+ PATHS
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../kicad-gal/build"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../../kicad-gal/build"
+ DOC
+ "Where is the static GAL library"
+ )
+ find_path( gal_ROOT NAMES "README.txt"
+ PATHS
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../kicad-gal"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../../kicad-gal"
+ DOC
+ "Where is the base include directory for the GAL library"
+ )
+
+else()
+
+ # we build the GAL library, therefore we know where it is, no need to find_library() it.
+ set( gal_ROOT "${CMAKE_CURRENT_BINARY_DIR}/gal-src" )
+ set( gal_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/gal-src/libgal.a" )
+
+ include( ExternalProject )
+ ExternalProject_Add( ki_gal
+ # skip the install step, build in source, use from source
+ SOURCE_DIR "${gal_ROOT}"
+ STAMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/gal-stamps"
+ TIMEOUT 120
+ DOWNLOAD_COMMAND bzr export ${gal_ROOT} lp:~kicad-testing-committers/kicad/kicad-gal
+ CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ${gal_ROOT}
+ BUILD_IN_SOURCE 1
+ BUILD_COMMAND make
+ INSTALL_COMMAND ""
+ )
+endif()
+
+include_directories( "${gal_ROOT}" )
+
+# Find pkg-config in order find cairo.
+find_package( PkgConfig REQUIRED )
+
+# Find cairo.
+#pkg_search_module( CAIRO REQUIRED cairo>=1.8.1 )
+#include_directories( ${CAIRO_INCLUDE_DIRS} )
+
+
+# Find the OpenGL libraries (gl and glu)
+find_package( OpenGL )
+
+
+# Find GLEW
+pkg_search_module( GLEW REQUIRED glew>=1.5.0 )
+include_directories( ${GLEW_INCLUDE_DIRS} )
+
+
+include_directories( ${gal_ROOT} )
+
+add_executable( sweet_edit sweet_edit.cpp sweet_editor_panel.cpp sch_canvas.cpp )
+
+target_link_libraries( sweet_edit
+ sweet
+ ${OPENGL_LIBRARIES}
+ ${gal_LIBRARY}
+ ${wxWidgets_LIBRARIES}
+ ${GLEW_LIBRARIES}
+ ${GDI_PLUS_LIBRARIES}
+ )
+
+
+#=====<USE_SWIG>============================================================
+# if you want a Python scripting layer on top for unit testing or driving.
+# reference: http://www.swig.org/Doc1.3/Introduction.html#Introduction_build_system
+
+option( USE_SWIG "Use SWIG to build a python scripting interface (default OFF)." OFF)
+if( USE_SWIG )
+
+ find_package( SWIG REQUIRED )
+ include( ${SWIG_USE_FILE} )
+
+ # first install "python-dev" linux package for this:
+ find_package( PythonLibs )
+ include_directories( ${PYTHON_INCLUDE_PATH} )
+
+ set( CMAKE_SWIG_FLAGS "" )
+
+ set_source_files_properties( sweet.i PROPERTIES CPLUSPLUS ON )
+ #set_source_files_properties( sweet.i PROPERTIES SWIG_FLAGS "-includeall" )
+
+ swig_add_module( sweet python sweet.i )
+ swig_link_libraries( sweet ${PYTHON_LIBRARIES} sweet )
+
+ # @todo need a separate interface for each DSNLEXER
+
+endif()
+
diff --git a/new/Doxyfile b/new/Doxyfile
new file mode 100644
index 0000000..2f60321
--- /dev/null
+++ b/new/Doxyfile
@@ -0,0 +1,1552 @@
+# Doxyfile 1.6.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "Distributed Library & EESchema Parts List Design"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = .
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = YES
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text "
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = .
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = *.h \
+ *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = build
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = YES
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = YES
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = pdf
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH = .
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS = *.h
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/new/design.h b/new/design.h
new file mode 100644
index 0000000..3b3e4b0
--- /dev/null
+++ b/new/design.h
@@ -0,0 +1,476 @@
+
+namespace SCH {
+
+/** @mainpage
+
+This file describes the design of a new Distributed Library System for KiCad's
+EESCHEMA. Many of the concepts can be adapted with modest modification to PCBNEW
+also, in the future.
+
+@author Dick Hollenbeck <dick@softplc.com>
+
+@date October 2010 - January 2011
+
+@section intr_sec Introduction
+
+Schematic <b>parts</b> are frequently needed to complete a circuit design
+schematic. Computer data entry of parts can be a rate limiting step in the
+design of an overall PCB. Having ready made access to all needed parts in a
+design significantly improves the productivity of a circuit designer. Sharing
+parts within an organization is one step in the right direction, but there is
+opportunity to share across organizational boundaries to improve productivity
+even more. Using a part that someone else in another organization has already
+entered into the computer can eliminate the first data input process for that
+part. The more complicated the part and the board, the larger the positive
+impact on productivity because the larger the time savings.
+
+<p> Sharing parts within an organization is best done by directly accessing a
+known internal source for those parts, say on a company network. Sharing parts
+across organizational boundaries is best done using the Internet in real-time.
+Having the ability to search for a part based on arbitrary search criteria can
+speed up the pace at which new parts are found and used.
+
+<p> Electronic component manufacturers need and look for ways to differentiate
+their products from their competitors. With this Distributed Library System
+facility in KiCad, one way for manufacturers to differentiate themselves and
+their parts is to publish a part library on the Internet and save their
+customers the work of doing the data entry of the part into the KiCad design
+system.
+
+<p> Maintaining a comprehensive part library is a fairly labor intensive
+activity. New parts come into the market everyday. By being able to publish a
+superior library on the Internet, it may be possible to make a for profit
+business out of doing this. The KiCad eco-system would benefit should this
+happen, and there could even be competition between such businesses. Or there
+can be library specializations or niches.
+
+<p> Often a found part is close to what is needed but not exactly what is
+needed. This Distributed Library System design incorporates the concept of part
+inheritance using a part description language called <b>Sweet</b>. Sweet is
+based on s-expression syntax. Inheritance is the ability to incrementally change
+an existing part without completely re-designing it. It is sometimes easier to
+modify an existing part than it is to create the new part entirely from scratch.
+
+<p> This Distributed Library System design will have the capability to
+significantly benefit the KiCad eco-system, and that should mean expanding the
+numbers of users and contributors to the project, and hopefully making for a
+better KiCad tool-set for all.
+
+
+@section definitions Definitions
+
+Only new terms or changes in the definition of terms are given here.
+
+<dl>
+
+<dt>S-Expression</dt><dd>This is a syntactical textual envelop in the same vain as
+XML. It may be used to express any number of domain specific grammars. It uses
+parentheses to indicate the start and end of an element. A domain specific
+grammar is a set of rules that dictate what keywords may be used, and in what
+context. A grammar also establishes the allowed places and types of constants.
+There can be any number of grammars which all use s-expressions to hold the
+individual elements within the grammar. A grammar is at a higher level than
+s-expressions, in the same way that a sentence will have grammatical rules which
+are at a higher level than the rules used to spell words. Technically, grammars
+nest within grammars. So once you are inside a grammatical element, it will have
+its own set of rules as to which nested elements it may hold, and once you enter
+one of those nested elements, then that nested element's grammar pertains,
+etc.<p> In the case of the grammar for a part, the grammar itself is being given
+the name Sweet. The name does not extend to the grammar for the schematic,
+only the part grammar.</dd>
+
+<dt>Schematic</dt><dd>This consists of one or more sheets and will be different
+in three ways from existing schematics. <ul>
+
+ <li>All sheets will be in one file, thus the entire schematic is in one file.
+
+ <li>The schematic file will have its own s-expression grammar.
+
+ <li> There will be a <b>parts list</b> within the schematic, and within the
+ parts list will be <b>all</b> the parts for the schematic. yes <b>all</b> of
+ them. See class PARTS_LIST.</ul>
+
+Within the sheets of the schematic will be components.</dd>
+
+<dt>Component</dt><dd>A component is an instantiated part. The keyword for
+component is (comp). A component does not have any of its own properties other
+than: <ul> <li>rerence designator <li>part pointer or reference into the parts
+list <li>location <li>rotation <li>stuff i.e. DNS or do stuff the part
+<li>visual textual effect overrides </ul> Note that the (comp) may not have any
+properties or fields of its own, and that it may not exist without a
+corresponding part in the parts_list. A reason for this is to ensure that a
+BOM can be made simply from the parts_list.</dd>
+
+<dt>Component, again for good measure.</dt><dd>A component is an instantiation
+of a part. A component exists within a schematic which has a parts list
+containing the part from which the component is instantiated. A component has a
+unique reference designator, part ref, its own location, orientation,
+stuff/DNS, and text attributes but <b>not</b> its own text fields/strings (other
+than reference designator). The part which is instantiated must exist in the
+parts list of the same schematic.</dd>
+
+<dt>Inheritance</dt><dd>Is the ability to mimic form and function from another
+entity. In our case we use it only for parts. One part may "inherit from" or
+"extend" another single part.</dd>
+
+<dt>Part</dt><dd>A part is a symbolic schematic circuit element found within an
+EESCHEMA library (or within a parts list). It is re-usable and may be
+instantiated more than once within a schematic. For it to be instantiated, it
+must be copied or inherited into the parts list of the instantiating schematic.
+If inherited into the parts list, then only a concise reference is needed into
+the originating library. If instead it is copied into the parts list, then the
+part is fully autonomous and need have no reference to its original copy.</dd>
+
+<dt>Parts List</dt><dd>A parts list, keyword (parts_list), is an entirely new
+construct. It exists within a schematic and is the complete set of parts used
+within a particular schematic. Each schematic has exactly one parts list
+contained within it. A parts list is also a library source and a library sink
+for the current schematic. A parts list in any schematic may also be a library
+source for any other schematic, but not a library sink. The parts list construct
+makes it almost wholly unnecessary to write to other types of library
+sinks.</dd>
+
+<dt>Library</dt><dd>A library is no longer a file. It is a memory cache of
+parts, consistent with the normal definition of memory cache. Each library is
+backed up with a <b>library source</b>. In rare cases, some libraries may also
+have a <b>library sink</b>.</dd>
+
+<dt>Library Source</dt><dd>A library source is an abstract read only repository
+of parts. The repository itself might exist on the moon. The difference between
+a library source and a library sink is that a source is a readable entity.</dd>
+
+<dt>Library Sink</dt><dd>A library sink is an abstract place that parts can be
+written to for future reading. The difference between a library source and a
+library sink is that a library sink is a writable entity.</dd>
+
+<dt>Symbol</dt><dd>The term "symbol" is not used in a specific way in this
+document. There is no symbol in any of the grammars, so use of it on the
+developers list will not be understood without explanation. Of course it is
+possible to have multiple parts all extend a common base part, and you can think
+of the base part as having most if not all the graphical lines for any
+derivatives. But we do not need to use the term symbol to describe that
+relationship, the term "part" is sufficient.</dd>
+
+<dt>LPID</dt><dd>This stands for "Logical Part ID", and is a reference to any
+part within any known library. The term "logical" is used because the contained
+library name is logical, not a full library name. The LPID consists of 3 main
+portions: logical library name, part name, and revision number.</dd>
+
+<dt>Library Table</dt><dd>This is a lookup table that maps a logical library
+name (i.e. a short name) into a fully specified library name and library type.
+An applicable library table consists of rows from (at least) two sources:<ol>
+<li>A schematic resident library table.
+<li>A personal library table.
+</ol>
+
+These rows from the two sources are conceptually concatonated (although they may
+not be physically concatonated in the implementation, TBD). The schematic
+resident rows take presedence over the personal library table if there are
+logical library names duplicately defined. (Or we will simply ask that any remote
+(i.e. public) libraries use uppercase first letters in logical names, TBD.)
+
+<p> Eventually there will be an external publicly available internet based
+logical library table also, but this will need to be glued down at a hard coded
+URL that we have control over. The internet based library table allows us to
+advertise remote libraries without having to issue an update to KiCad.</dd>
+
+<dt>Query Language</dt><dd>This is a means of searching for something that is
+contained within a container. Since some library sources are remote, it is
+important to be able to ask the library source for a part that matches some
+criteria, for performance reasons.</dd>
+
+</dl>
+
+
+
+@section changes Required Changes
+
+In order fulfill the vision embodied by this Distributed Library System design,
+it will be necessary to change many APIs and file formats within EESCHEMA. In
+fact, the entire schematic file format will be new, based on s-expressions,
+the schematic grammar, and the Sweet language for parts.
+
+Here are some of the changes required: <ul>
+
+<li> All sheets which make up a schematic will go into a single s-expression
+file. The multiple sheet support will still exist, but all the sheets for a
+single schematic are all in a single file.
+
+<li> A "library" is a collection of "parts". The unit of retrieval from a
+library is a part as a textual string in the Sweet language. Sweet is a
+particular "grammar" expressed in s-expression form, and can be used to fully
+describe parts. Because EESCHEMA does not actually see a "library file",
+(remember, EESCHEMA can only ask for a part), the actual file format for a
+library is no longer pertinent nor visible to the core of EESCHEMA. The unit of
+retrieval from the API is the part, so EESCHEMA gets an entire part s-expression
+and must then parse it as a RAM resident Sweet string.
+
+<li>EESCHEMA knows of no library files, instead there is a library API which
+abstracts the actual part storage strategy used within any library
+implementation. The API can be implemented by anyone wanting to provide a
+library under a given storage strategy. The API provides a storage strategy
+abstraction in classes LIB_SOURCE and LIB_SINK. The actual storage strategy used
+in any particular library implementation is not technically part of the
+conceptual core of EESCHEMA. This is an important concept to grasp. Eventually
+the library implementations may be jetisoned into a plug-in structure, but
+initially they are statically linked into EESCHEMA. Should the plug-in strategy
+ever get done, the boundary of the plug-in interface will remain the C++ library
+API as given here (mostly in class LIB_SOURCE). The only reason to introduce a
+plug-in design is to allow proprietary closed source library implementations,
+and this could eventually come about if a part vendor wanted to provide one for
+the KiCad project. If a Texas Instruments type of company wants to maintain a
+KiCad library, we will be positioned to accommodate them. Until then, the
+LIB_SOURCE implementations can be statically linked into EESCHEMA and there is
+no conceptual disruption either way.
+
+<li> Most library implementations are read only. There are only two library
+types that are writable, the "dir" type, and the "parts list". All other types
+are read only from the perspective of the API. Stuffing those read only
+libraries and maintaining them will be done using the normal update mechanisms
+pertinent to the library's respective type of repository. The most common place
+to do incremental enhancements to a part before using it is not in the external
+library, but now in the parts list with this new design.
+
+<li> The design will support classical clipboard usage. The part in the Sweet
+language can be placed onto the clipboard for use by other applications and
+instances of EESCHEMA. Eventually larger blocks of components may also be
+supported on the clipboard, since the Sweet language allows these blocks to be
+descributed textually in a very readable fashion. (Clipboard support beyond part
+manipulation is not currently in this revision of the design however, it can be
+a future separate enhancement. Perhaps someday complete sheets may be passed
+through the clipboard.)
+
+<li> The cumulative set of required changes are significant, and are tantamount
+to saying that EESCHEMA will need its part handling foundations re-written. A
+conversion program will convert everything over to the new architecture. The
+conversion program can simplify things by simply putting all schematic parts
+into a parts list within each schematic.
+
+<li> An Internet connection is required to use some of the library sources. It
+will be possible to omit these library sources and run KiCad by doing a
+configuration change. Eventually, some library sources will spring up and will
+not technically be part of the KiCad project, so they will remain remote, but
+fully usable to those with an internet connection and permission from the
+library source's owner.
+
+<li>By far, even as radical as the distributed library concept is, complete with
+remote access, the most significant conceptual change is the introduction of the
+<b>parts list</b>. This is a special library that exists in a schematic, and is
+the complete record of all parts used within that same schematic. It is
+impossible to put a component into a schematic without that component's part
+first existing within the parts list of that schematic.
+
+<li> Because of inheritance, multi-body-form parts, alternate body styles, see
+also references, and other needs, it is necessary to have a <b>part reference
+mechanism</b>. A component has to reference a part, the one it "is". A part has
+to be able to reference another part, either in the same library or elsewhere.
+Enter the Logical Part ID, or LPID to serve this need. An LPID consists of a
+logical library name, a part name, and an optional revision. It is used to
+reference parts, from anywhere. If the reference is from a sheet's component,
+then the logical library name of the LPID is not needed. Why? Well if you've
+been paying attention you know. A comp can only be based on a part that exists
+within the parts_list of the same schematic in which it resides. Likewise, a
+part within any library that references another part in that <b>same</b> library
+will also omit the logical library name from the LPID, and it must omit it. Why?
+Well because it makes renaming the library easier, for one. Two, the logical
+library name is only a lookup key into a "library table". The library table maps
+the logical library name into an actual library source [and sink, iff writable].
+See LIB_SOURCE and LIB_SINK.
+
+<p> In the case of the component referencing the part that it "is", there is no
+revision number allowed in the LPID. This is because that reference is to the
+part in the parts list, and the parts list only holds a single revision of any
+part (where "revision" is what you understand from version control systems).
+
+<li> There needs to be a new query language designed and each library source
+needs to support it. See LIB_SOURCE::FindParts() for a brief description of one.
+
+</ul>
+
+
+@section philosophy Design Philosophies
+
+<p> Class names are chosen to be as concise as possible. Separate namespaces can be
+used should these same class names be needed in both EESCHEMA and PCBNEW (later).
+However, this design does not yet address PCBNEW. Suggested namespaces are
+SCH for EESCHEMA, and PCB for PCBNEW.
+
+<p> Since most if not all the APIs deal with file or non-volatile storage, only
+8 bit string types are used. For international strings, UTF-8 is used, and
+that is what is currently in use within the KiCad file storage formats.
+
+<p> The typedef <b>STRINGS</b> is used frequently as a holder for multiple
+std::strings. After some research, I chose std::dequeue<STRING> to hold a list of
+STRINGs. I thought it best when considering overall speed, memory
+fragmentation, memory efficiency, and speed of insertion and expansion.
+
+<p> A part description language is introduced called <b>(Sweet)</b>. It supports
+inheritance and its syntax is based on s-expressions.
+
+<p> Since a part can be based on another part using inheritance, it is important
+to understand the idea of library dependencies. A part in one library can be
+dependent on another part in another library, or on another part in the same
+library as itself. There are several library sources, some far away and some
+very close to the schematic. The closest library to the schematic is the
+<b>(parts list)</b> class PARTS_LIST. Circular dependencies are not allowed. All
+dependencies must be resolvable in a straight forward way. This means that a
+part in a remote library cannot be dependent on any part which is not always
+resolvable.
+
+<p> NRVO described:
+ http://msdn.microsoft.com/en-us/library/ms364057%28VS.80%29.aspx
+
+Even with NRVO provided by most C++ compilers, I don't see it being as lean as
+having class LIB keep expanded members STRING fetch and STRINGS vfetch for the
+aResults values. But at the topmost API, client convenience is worth a minor
+sacrifice in speed, so the topmost API does return these complex string objects
+for convenience. So there is a different strategy underneath the hood than what
+is used on the hood ornament. When aResults pointer is passed as an argument, I
+won't refer to this as 'returning' a value, but rather 'fetching' a result to
+distinguish between the two strategies.
+
+<p> Functions named as lookupSomething() or LookupSomething() are to be understood
+as "find and load if needed". This is different than a simple find operation only, in
+that an implied load operation is also done, but only if needed.
+
+
+@section architecture Architecture
+
+This document set later shows some <b>library sources</b> derived from class
+LIB_SOURCE. A library source is the backing to a library. The class name for a
+library in the new design is LIB.
+
+<p>
+<IMG SRC="../drawing.png" ALT="You should see design architecture here">
+
+*/
+
+
+
+/**
+ * @defgroup string_types STRING Types
+ * Provide some string types for use within the API.
+ */
+
+
+/**
+ * @defgroup exception_types Exception Types
+ * Provide some exception types for use within the API.
+ */
+
+
+/**
+ * Class HTTP_LIB_SOURCE
+ * implements a LIB_SOURCE to access a remote document root repository using http protocol.
+ */
+class HTTP_LIB_SOURCE : public LIB_SOURCE
+{
+ friend class LIB_TABLE; ///< constructor the LIB uses these functions.
+
+protected:
+
+ /**
+ * Constructor ( const STRING& aHttpURL )
+ * sets up a LIB_SOURCE using aHttpURI which points to a subversion
+ * repository.
+ * @see LIB_TABLE::LookupPart()
+ *
+ * @param aHttpURL is a full URL of a document root repo directory. Example might
+ * be "http://kicad.org/libs"
+ *
+ * @param aOptions is the options string from the library table. It can be any
+ * string that the LIB_SOURCE can parse and understand, perhaps using comma separation
+ * between options. Options and their syntax is LIB_SOURCE implementation specific.
+ */
+ HTTP_LIB_SOURCE( const STRING& aHttpURL, const STRING& aOptions ) throws( IO_ERROR );
+};
+
+
+/**
+ * Class SVN_LIB_SOURCE
+ * implements a LIB_SOURCE to access a [remote or local] subversion repository
+ * using subversion client protocol.
+ */
+class SVN_LIB_SOURCE : public LIB_SOURCE
+{
+ friend class LIB_TABLE; ///< constructor the LIB uses these functions.
+
+protected:
+
+ /**
+ * Constructor SVN_LIB_SOURCE( const STRING& aSvnURL )
+ * sets up a LIB_SOURCE using aSvnURI which points to a subversion
+ * repository.
+ * @see LIB_TABLE::LookupPart().
+ *
+ * @param aSvnURL is a full URL of a subversion repo directory. Example might
+ * be "svn://kicad.org/repos/library/trunk"
+ *
+ * @param aOptions is the options string from the library table. It can be any
+ * string that the LIB_SOURCE can parse and understand, perhaps using comma separation
+ * between options. Options and their syntax is LIB_SOURCE implementation specific.
+ */
+ SVN_LIB_SOURCE( const STRING& aSvnURL, const STRING& aOptions ) throws( IO_ERROR );
+};
+
+
+/**
+ * Class SCHEMATIC_LIB_SOURCE
+ * implements a LIB_SOURCE in by reading a parts list from schematic file
+ * unrelated to the schematic currently being edited.
+ */
+class SCHEMATIC_LIB_SOURCE : public LIB_SOURCE
+{
+ friend class LIB_TABLE; ///< constructor the LIB uses these functions.
+
+protected:
+
+ /**
+ * Constructor SCHEMATIC_LIB_SOURCE( const STRING& aSchematicFile )
+ * sets up a LIB_SOURCE using aSchematicFile which is a full path and filename
+ * for a schematic not related to the schematic being editing in
+ * this EESCHEMA session.
+ * @see LIB_TABLE::LookupPart().
+ *
+ * @param aSchematicFile is a full path and filename. Example:
+ * "/home/user/kicadproject/design.sch"
+ *
+ * @param aOptions is the options string from the library table. It can be any
+ * string that the LIB_SOURCE can parse and understand, perhaps using comma separation
+ * between options. Options and their syntax is LIB_SOURCE implementation specific.
+ */
+ SCHEMATIC_LIB_SOURCE( const STRING& aSchematicFile, const STRING& aOptions ) throws( IO_ERROR );
+};
+
+
+/**
+ * Class PARTS_LIST
+ * is a LIB which resides in a SCHEMATIC, and it is a table model for a
+ * spread sheet both. When columns are added or removed to/from the spreadsheet,
+ * this is adding or removing fields/properties to/from ALL the contained PARTS.
+ */
+class PARTS_LIST : public LIB
+{
+public:
+
+ /**
+ * Function GetModel
+ * returns a spreadsheet table model that allows both reading and writing to
+ * rows in a spreadsheet. The UI holds the actual screen widgets, but
+ * this is the table model, i.e. the PARTS_LIST is.
+ */
+ SPREADSHEET_TABLE_MODEL* GetModel();
+};
+
+
+
+} // namespace SCH
+
+
+/// @todo remove endsWithRev() in favor of EndsWithRev(), find home for it.
+
+/// @todo add simple unit test infrastructure.
+
+/// @todo review: http://www.sfml-dev.org/tutorials/1.2/graphics-wxwidgets.php
+
+// EOF
diff --git a/new/drawing.png b/new/drawing.png
new file mode 100644
index 0000000..eea6114
--- /dev/null
+++ b/new/drawing.png
Binary files differ
diff --git a/new/drawing.svg b/new/drawing.svg
new file mode 100644
index 0000000..1afc681
--- /dev/null
+++ b/new/drawing.svg
@@ -0,0 +1,964 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1012.09"
+ height="754.09998"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="drawing.svg"
+ inkscape:export-filename="/svn/kicad/new_design/new/drawing.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lend"
+ style="overflow:visible;">
+ <path
+ id="path3674"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) rotate(180) translate(1,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective2852"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective2885"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective2932"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective2965"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective4115"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-9"
+ style="overflow:visible">
+ <path
+ id="path3674-3"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <inkscape:perspective
+ id="perspective4352"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective4990"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="575.26689"
+ inkscape:cy="1269.5904"
+ inkscape:document-units="px"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1119"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="in"
+ inkscape:snap-global="false"
+ objecttolerance="10000"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-bbox="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2955"
+ empspacing="10"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ spacingx="10px"
+ spacingy="10px"
+ dotted="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <rect
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:1.10099995;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3942"
+ width="168.57143"
+ height="41.42857"
+ x="556.42859"
+ y="688.38568" />
+ <rect
+ style="fill:#00bad5;fill-opacity:0.9605735;stroke:#000000;stroke-width:0.95887607;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect4976"
+ width="234.49751"
+ height="98.013084"
+ x="755.58539"
+ y="508.26596" />
+ <rect
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:1.29770339;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect5805"
+ width="188.37473"
+ height="93.374725"
+ x="793.24127"
+ y="650.91266" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-298.25658)" />
+ <rect
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1.6983366px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2816"
+ width="872.59253"
+ height="273.89703"
+ x="95.277359"
+ y="22.688547"
+ sodipodi:insensitive="true" />
+ <text
+ xml:space="preserve"
+ style="font-size:44.65415192px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="329.44296"
+ y="69.284828"
+ id="text2818"
+ transform="scale(1.086331,0.92052975)"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ x="329.44296"
+ y="69.284828"
+ id="tspan2828">schematic</tspan></text>
+ <rect
+ style="fill:#00bad5;fill-rule:evenodd;stroke:#000000;stroke-width:1.41801190000000021px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.96057349"
+ id="rect2826"
+ width="452.43915"
+ height="129.58199"
+ x="90.923286"
+ y="508.6037" />
+ <text
+ xml:space="preserve"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="175.85715"
+ y="657.25031"
+ id="text2828"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2830"
+ x="175.85715"
+ y="657.25031">HTTP_LIB_SOURCE</tspan></text>
+ <g
+ id="g3856">
+ <g
+ transform="translate(18,0)"
+ id="g3851">
+ <rect
+ style="fill:#ff8080;stroke:#000000;stroke-width:0.76680511;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2833"
+ width="67.913422"
+ height="40.639297"
+ x="130.19307"
+ y="73.140556" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="138.37057"
+ y="97.500824"
+ id="text2835"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="138.37057"
+ y="97.500824"
+ id="tspan2839">comp</tspan></text>
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="big blocks" />
+ <g
+ id="g3790"
+ transform="translate(60,-0.71428569)"
+ sodipodi:insensitive="true">
+ <rect
+ y="204.09998"
+ x="77.85714"
+ height="75"
+ width="801.42859"
+ id="rect2988"
+ style="fill:#f4d7d7;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3786"
+ y="221.24283"
+ x="440"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="221.24283"
+ x="440"
+ id="tspan3788"
+ sodipodi:role="line">parts_list</tspan></text>
+ </g>
+ <g
+ id="g3822">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g3801">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3795"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text3797"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3799"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3828"
+ transform="translate(133.32018,-0.3941193)">
+ <g
+ id="g3830"
+ transform="translate(-12.857147,6.4285736)">
+ <rect
+ y="222.563"
+ x="164.8916"
+ height="39.502518"
+ width="56.64537"
+ id="rect3832"
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3834"
+ y="247.6714"
+ x="172.85715"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="247.6714"
+ x="172.85715"
+ id="tspan3836"
+ sodipodi:role="line">part</tspan></text>
+ </g>
+ </g>
+ <g
+ transform="translate(259.32018,-0.3941193)"
+ id="g3838">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g3840">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3842"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text3844"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3846"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3862"
+ transform="translate(130,0)">
+ <g
+ id="g3864"
+ transform="translate(18,0)">
+ <rect
+ y="73.140556"
+ x="130.19307"
+ height="40.639297"
+ width="67.913422"
+ id="rect3866"
+ style="fill:#ff8080;stroke:#000000;stroke-width:0.76680511;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3868"
+ y="97.500824"
+ x="138.37057"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan3870"
+ y="97.500824"
+ x="138.37057"
+ sodipodi:role="line">comp</tspan></text>
+ </g>
+ </g>
+ <g
+ transform="translate(256,0)"
+ id="g3872">
+ <g
+ transform="translate(18,0)"
+ id="g3874">
+ <rect
+ style="fill:#ff8080;stroke:#000000;stroke-width:0.76680511;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3876"
+ width="67.913422"
+ height="40.639297"
+ x="130.19307"
+ y="73.140556" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="138.37057"
+ y="97.500824"
+ id="text3878"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="138.37057"
+ y="97.500824"
+ id="tspan3880">comp</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3882"
+ transform="translate(471.32018,-0.3941193)">
+ <g
+ id="g3884"
+ transform="translate(-12.857147,6.4285736)">
+ <rect
+ y="222.563"
+ x="164.8916"
+ height="39.502518"
+ width="56.64537"
+ id="rect3886"
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3888"
+ y="247.6714"
+ x="172.85715"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="247.6714"
+ x="172.85715"
+ id="tspan3890"
+ sodipodi:role="line">part</tspan></text>
+ </g>
+ </g>
+ <rect
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:1.11650062;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3894"
+ width="473.64505"
+ height="82.716003"
+ x="493.0127"
+ y="368.03632" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="684.51794"
+ y="389.21155"
+ id="text3896"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3898"
+ x="684.51794"
+ y="389.21155">LIBS manager</tspan></text>
+ <g
+ id="g4102">
+ <path
+ id="path2876"
+ d="M 179.80715,116.16834 180,226.09998"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4098"
+ y="157.6049"
+ x="181.70563"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="157.6049"
+ x="181.70563"
+ id="tspan4100"
+ sodipodi:role="line">is</tspan></text>
+ </g>
+ <g
+ transform="translate(134,-4e-6)"
+ id="g4102-9">
+ <path
+ id="path2876-0"
+ d="M 179.80715,116.16834 180,226.09998"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4098-8"
+ y="157.6049"
+ x="181.70563"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="157.6049"
+ x="181.70563"
+ id="tspan4100-8"
+ sodipodi:role="line">is</tspan></text>
+ </g>
+ <g
+ id="g4144"
+ transform="translate(260,-4e-6)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Lend)"
+ d="M 179.80715,116.16834 180,226.09998"
+ id="path4146" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="181.70563"
+ y="157.6049"
+ id="text4148"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4150"
+ x="181.70563"
+ y="157.6049">is</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 439.67732,268.09998 0.32268,46 210,0 0,-40"
+ id="path4152" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="520.22858"
+ y="330.28006"
+ id="text4340"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4342"
+ x="520.22858"
+ y="330.28006">extends</tspan></text>
+ <g
+ id="g3828-4"
+ transform="translate(133.32018,329.60589)">
+ <g
+ id="g3830-8"
+ transform="translate(-12.857147,6.4285736)">
+ <rect
+ y="222.563"
+ x="164.8916"
+ height="39.502518"
+ width="56.64537"
+ id="rect3832-1"
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3834-0"
+ y="247.6714"
+ x="172.85715"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="247.6714"
+ x="172.85715"
+ id="tspan3836-3"
+ sodipodi:role="line">part</tspan></text>
+ </g>
+ </g>
+ <g
+ transform="translate(-2.67982,329.60589)"
+ id="g4378">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g4380">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect4382"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text4384"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4386"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <g
+ transform="translate(267.32018,329.60589)"
+ id="g4388">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g4390">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect4392"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text4394"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4396"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.101;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend-9)"
+ d="M 180.35714,268.49409 180,554.09998"
+ id="path4398" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 313.67732,268.09998 0,290.49749"
+ id="path4400" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4774"
+ y="354.28006"
+ x="184.22858"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="354.28006"
+ x="184.22858"
+ id="tspan4776"
+ sodipodi:role="line">extends</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="316.22858"
+ y="354.28006"
+ id="text4778"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4780"
+ x="316.22858"
+ y="354.28006">extends</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 313.9049,598.53648 0,48.73986 137.63329,0.25254 0.25254,-48.73986"
+ id="path4782" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4970"
+ y="664.28003"
+ x="348.22858"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="664.28003"
+ x="348.22858"
+ id="tspan4972"
+ sodipodi:role="line">extends</tspan></text>
+ <rect
+ style="fill:#00bad5;fill-opacity:0.9605735;stroke:#000000;stroke-width:1.10099995;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect4974"
+ width="145.46196"
+ height="128.28937"
+ x="564.67529"
+ y="508.6329" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4978"
+ y="661.25031"
+ x="581.85718"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="661.25031"
+ x="581.85718"
+ id="tspan4980"
+ sodipodi:role="line">DIR_LIB_SOURCE</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4978-6"
+ y="631.6189"
+ x="792.89563"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="631.6189"
+ x="792.89563"
+ id="tspan4980-2"
+ sodipodi:role="line">SCHEMATIC_LIB_SOURCE</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 512.14734,451.05421 -0.50507,55.05331"
+ id="path5007" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 637.91133,451.55929 -0.50507,55.05331"
+ id="path5009" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 849.03322,450.54913 0,55.55839"
+ id="path5011" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 740,298.38569 0,67.14286"
+ id="path5571" />
+ <g
+ id="g5759"
+ transform="translate(457.32018,329.60589)">
+ <g
+ id="g5761"
+ transform="translate(-12.857147,6.4285736)">
+ <rect
+ y="222.563"
+ x="164.8916"
+ height="39.502518"
+ width="56.64537"
+ id="rect5763"
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text5765"
+ y="247.6714"
+ x="172.85715"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="247.6714"
+ x="172.85715"
+ id="tspan5767"
+ sodipodi:role="line">part</tspan></text>
+ </g>
+ </g>
+ <g
+ transform="translate(447.32018,339.60589)"
+ id="g5779">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g5781">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect5783"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text5785"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5787"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="567.28571"
+ y="139.38568"
+ id="text5799"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5801"
+ x="567.28571"
+ y="139.38568">All sheets are in one schematic object</tspan></text>
+ <rect
+ style="fill:#f4d7d7;fill-opacity:1;stroke:#000000;stroke-width:1.10099995;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect5803"
+ width="123.57143"
+ height="63.57143"
+ x="814.57141"
+ y="673.95709" />
+ <g
+ transform="translate(703.32018,451.60589)"
+ id="g5769">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g5771">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect5773"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text5775"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5777"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g5789"
+ transform="translate(693.32018,461.60589)">
+ <g
+ id="g5791"
+ transform="translate(-12.857147,6.4285736)">
+ <rect
+ y="222.563"
+ x="164.8916"
+ height="39.502518"
+ width="56.64537"
+ id="rect5793"
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text5795"
+ y="247.6714"
+ x="172.85715"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="247.6714"
+ x="172.85715"
+ id="tspan5797"
+ sodipodi:role="line">part</tspan></text>
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="826.71429"
+ y="663.95709"
+ id="text5807"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5809"
+ x="826.71429"
+ y="663.95709">other schematic</tspan></text>
+ <rect
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:1.10099995;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect5811"
+ width="154.28572"
+ height="57.142857"
+ x="167.85715"
+ y="676.24286" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="202.85715"
+ y="711.24286"
+ id="text5813"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5815"
+ x="202.85715"
+ y="711.24286">Internet</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 245,638.38569 -0.71428,37.14286"
+ id="path5817" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="495.57144"
+ y="527.95709"
+ id="text2962"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2964"
+ x="495.57144"
+ y="527.95709">LIB</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 638.57143,638.38569 -0.71429,47.14286"
+ id="path2966" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="566"
+ y="712.95709"
+ id="text3938"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3940"
+ x="566"
+ y="712.95709">part files in a dir</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text3944"
+ y="527.95709"
+ x="669.57141"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="527.95709"
+ x="669.57141"
+ id="tspan3946"
+ sodipodi:role="line">LIB</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3948"
+ style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Bitstream Vera Sans;font-style:normal;font-weight:normal;font-size:18px;-inkscape-font-specification:Bitstream Vera Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%"><flowRegion
+ id="flowRegion3950"><rect
+ id="rect3952"
+ width="240.71428"
+ height="148.57143"
+ x="740"
+ y="508.38568" /></flowRegion><flowPara
+ id="flowPara3954" /></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="953.57141"
+ y="527.95709"
+ id="text3956"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3958"
+ x="953.57141"
+ y="527.95709">LIB</tspan></text>
+ <g
+ transform="translate(695.32018,305.60589)"
+ id="g3960">
+ <g
+ transform="translate(-12.857147,6.4285736)"
+ id="g3962">
+ <rect
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3964"
+ width="56.64537"
+ height="39.502518"
+ x="164.8916"
+ y="222.563" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="172.85715"
+ y="247.6714"
+ id="text3966"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3968"
+ x="172.85715"
+ y="247.6714">part</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3970"
+ transform="translate(685.32018,315.60589)">
+ <g
+ id="g3972"
+ transform="translate(-12.857147,6.4285736)">
+ <rect
+ y="222.563"
+ x="164.8916"
+ height="39.502518"
+ width="56.64537"
+ id="rect3974"
+ style="fill:#999999;stroke:#000000;stroke-width:0.78319448;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3976"
+ y="247.6714"
+ x="172.85715"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="247.6714"
+ x="172.85715"
+ id="tspan3978"
+ sodipodi:role="line">part</tspan></text>
+ </g>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="m 877.85714,607.6714 0,41.42858"
+ id="path3980" />
+ <text
+ xml:space="preserve"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="840.89563"
+ y="219.6189"
+ id="text4168"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4170"
+ x="840.89563"
+ y="219.6189">LIB</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.26530874px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-9)"
+ d="M 851.17116,365.3959 850.285,225.65964"
+ id="path4172" />
+</svg>
diff --git a/new/make-dir-lib-source-test-data.sh b/new/make-dir-lib-source-test-data.sh
new file mode 100755
index 0000000..84f93c2
--- /dev/null
+++ b/new/make-dir-lib-source-test-data.sh
@@ -0,0 +1,150 @@
+#!/bin/sh
+
+BASEDIR=/tmp/eeschema-lib
+
+CATEGORIES="lions tigers kitties"
+
+PARTS="eyes ears feet"
+
+REVS="rev1 rev5 rev10"
+
+
+REFERENCE="
+ (reference U?
+ (effects (at 12 13 180)(font (size 7 10))(visible yes))
+ )"
+
+LINE="
+ (line
+ (pts (xy 12 13)(xy 12 20))(stroke 1.5)
+ )"
+
+RECT="
+ (rectangle
+ (start 4 5)(end 6 8)(stroke 2.3)(fill transparent)
+ )"
+
+CIRCLE="
+ (circle
+ (center 1 0)(radius 5)(stroke 2.1)(fill none)
+ )"
+
+ARC="
+ (arc
+ (pos 22 33)(radius 12)(start 2 4)(end 13 33)(stroke 2.3)(fill filled)
+ )"
+
+BEZIER="
+ (bezier
+ (fill none)(stroke 2.0)(pts (xy 0 1)(xy 2 4))
+ )"
+
+TEXT="
+ (text (at 23 23 90.0) \"This is some text\" (justify left bottom)(visible yes)(fill filled)
+ (font arial (size 8 12))
+ )"
+
+PIN1="
+ (pin out line (at 7 8 90)
+ (signal #WE (font (size 8 10) bold)(visible no))
+ (pad A23 (font (size 9 11) italic bold))
+ )"
+
+PIN2="
+ (pin in line (at 8 8)(visible yes)
+ (signal #WAIT (visible yes))
+ (pad A24 (visible yes))
+ )"
+
+PIN3="
+ (pin (pad A25))"
+
+PINS="
+ (pin (pad Z12))(pin (pad Y14))(pin (pad Z13))(pin (pad Y15))"
+
+
+PIN_SWAP="
+ (pin_swap A23 A24)"
+
+PIN_RENUM="
+ (pin_renum A24 B24)"
+
+PIN_RENAME="
+ (pin_rename B24 LED)"
+
+PIN_DELETE="
+ (pin_del B24)"
+
+PIN_MERGE="(pin_merge A23 (pads Z12 Y14))(pin_merge A25 (pads Z13 Y15))"
+
+
+PROP1="
+ (property mWatts 12
+ (effects (at 1 34 270)(font (size 5 9) italic bold)(visible no))
+ )"
+
+KEYWORDS="
+ (keywords varistor batcave einstein)"
+
+ALTERNATES="
+ (alternates 7400/7400_b 7400/7400_c)"
+
+
+
+for C in ${CATEGORIES}; do
+
+ mkdir -p $BASEDIR/$C
+
+ for P in ${PARTS}; do
+
+ for R in ${REVS}; do
+ echo "(part $C/$P (value 22)(footprint SM0805)(model Airplane)(datasheet http://favorite.pdf)
+ $REFERENCE
+ $LINE
+ $RECT
+ $CIRCLE
+ $ARC
+ $BEZIER
+ $TEXT
+ $PIN1
+ $PIN2
+ $PIN3
+ $PINS
+ $PROP1
+ $KEYWORDS
+ $ALTERNATES
+ $PIN_SWAP
+ $PIN_RENUM
+ $PIN_RENAME
+ $PIN_DELETE
+ $PIN_MERGE
+ )" > $BASEDIR/$C/$P.part.$R
+ done
+
+ # also make the part without a rev:
+ echo "(part $C/$P (value 22)(footprint SM0805)(model Airplane)(datasheet http://favorite.pdf)
+ $REFERENCE
+ $LINE
+ $RECT
+ $CIRCLE
+ $ARC
+ $BEZIER
+ $TEXT
+ $PIN1
+ $PIN2
+ $PIN3
+ $PINS
+ $PROP1
+ $KEYWORDS
+ $ALTERNATES
+ $PIN_SWAP
+ $PIN_RENUM
+ $PIN_RENAME
+ $PIN_DELETE
+ $PIN_MERGE
+ )" > $BASEDIR/$C/$P.part
+
+ done
+
+done
+
diff --git a/new/make-html.sh b/new/make-html.sh
new file mode 100755
index 0000000..67f03c4
--- /dev/null
+++ b/new/make-html.sh
@@ -0,0 +1,3 @@
+
+# run this from the <kicad>/new directory
+doxygen
diff --git a/new/sch_canvas.cpp b/new/sch_canvas.cpp
new file mode 100644
index 0000000..776306c
--- /dev/null
+++ b/new/sch_canvas.cpp
@@ -0,0 +1,148 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <sch_canvas.h>
+#include <sch_part.h>
+#include <gal/font/newstroke_font.h>
+
+
+#define SWEET_UNIT 50 ///< world units comprizing a sweet grid cell
+
+
+
+namespace SCH {
+
+
+CANVAS::CANVAS( wxWindow* aParent ) :
+ OPENGL_GAL( aParent, NULL, this ) // I am my own PaintListener
+{
+ Connect( EVT_GAL_REDRAW, wxCommandEventHandler( CANVAS::onRedraw ) );
+
+ // Set the world unit length
+ SetWorldUnitLength( 0.01 );
+
+ SetScreenDPI( 100 );
+
+ ComputeWorldScreenMatrix();
+
+ // Set the world unit length
+ // SetLookAtPoint( VECTOR2D( size.x / 2, size.y / 2 ) );
+
+ // Load Font
+ if( !m_font.LoadNewStrokeFont( newstroke_font, newstroke_font_bufsize ) )
+ {
+ printf( "Loading of the font failed.\n" );
+ }
+
+ m_font.SetGraphicsAbstractionLayer( this );
+}
+
+
+void CANVAS::onRedraw( wxCommandEvent& event )
+{
+ PaintScene();
+}
+
+
+void CANVAS::PaintScene()
+{
+ BeginDrawing();
+
+ SetBackgroundColor( COLOR4D( 0x6c/255.0, 0x53/255.0, 0x53/255.0, 1.0 ) );
+
+ ClearScreen();
+
+ SetLayerDepth( -10 );
+
+ SetGridSize( VECTOR2D( SWEET_UNIT, SWEET_UNIT ) );
+
+ DrawGrid();
+
+ PaintRectangle();
+
+ SetLayerDepth( 0 );
+
+ Flush();
+ EndDrawing();
+}
+
+
+void CANVAS::PaintRectangle()
+{
+ VECTOR2D worldSize = GetSize();
+
+#if 1
+
+ SetLineWidth( 1 );
+
+ SetIsFill( true );
+ SetIsStroke( true );
+
+ SetFillColor( COLOR4D( 1, 1, 1, 1 ) );
+
+ SetStrokeColor( COLOR4D( 0, 0, 0, 1 ) );
+
+ DrawRectangle( VECTOR2D( worldSize.x/4, worldSize.y/4 ), VECTOR2D( 3*worldSize.x/4, 3*worldSize.y/4 ) );
+
+#else
+
+ D( cout << worldSize << endl; )
+
+ int k = 0;
+ double alpha = 0;
+ for( double y = 0; y < worldSize.y - worldSize.y / 4; y += worldSize.y / 8 )
+ {
+ double index = 1;
+ double y2 = y;
+
+ for( double x = 0; x < worldSize.x - worldSize.x / 4; x += worldSize.x / 8 )
+ {
+ SetLineWidth( index + 1 );
+
+ SetIsFill( ( k == 1 ) || ( k == 2 ) );
+
+ SetIsStroke( ( k == 0 ) || ( k == 2 ) );
+
+ SetFillColor( COLOR4D( 1 - alpha, 1, 1, 1 - alpha ) );
+ SetStrokeColor( COLOR4D( alpha, alpha, 1 - alpha, alpha ) );
+
+ DrawRectangle( VECTOR2D( x, y2 ), VECTOR2D( x + index * 10, y2 + index * 10 ) );
+
+ x += index * 5;
+ y2 += index * 5;
+
+ index += 1;
+ }
+
+ k = ( k + 1 ) % 3;
+ alpha += 0.1;
+ }
+#endif
+
+}
+
+
+
+} // namespace SCH
diff --git a/new/sch_canvas.h b/new/sch_canvas.h
new file mode 100644
index 0000000..37405bd
--- /dev/null
+++ b/new/sch_canvas.h
@@ -0,0 +1,69 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SCH_CANVAS_H_
+#define SCH_CANVAS_H_
+
+#include <gal/opengl/opengl_gal.h>
+#include <gal/common/stroke_font.h>
+
+
+namespace SCH {
+
+class PART;
+
+class CANVAS : public OPENGL_GAL
+{
+
+protected:
+ PART* m_part; ///< which PART to draw
+ STROKE_FONT m_font;
+
+ void onRedraw( wxCommandEvent& event );
+
+public:
+
+ CANVAS( wxWindow* aParent );
+
+ /**
+ * Function SetPart
+ * sets the PART to draw, returns the previous PART.
+ */
+ PART* SetPart( PART* aPart )
+ {
+ PART* ret = m_part;
+ m_part = aPart;
+ return ret;
+ }
+
+ void PaintScene();
+
+ void PaintRectangle();
+};
+
+
+} // namespace SCH
+
+#endif // SCH_PART_H_
+
diff --git a/new/sch_dir_lib_source.cpp b/new/sch_dir_lib_source.cpp
new file mode 100644
index 0000000..c91e1b5
--- /dev/null
+++ b/new/sch_dir_lib_source.cpp
@@ -0,0 +1,732 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+
+/* Note: this LIB_SOURCE implementation relies on the posix specified opendir() and
+ related functions rather than wx functions which might do the same thing. This
+ is because I did not want to become very dependent on wxWidgets at such a low
+ level as this, in case someday this code needs to be used on kde or whatever.
+
+ Mingw and unix, linux, & osx will all have these posix functions.
+ MS Visual Studio may need the posix compatible opendir() functions brought in
+ http://www.softagalleria.net/dirent.php
+ wx has these but they are based on wxString which can be wchar_t based and wx should
+ not be introduced at a level this low.
+
+ Part files: have the general form partname.part[.revN...]
+ Categories: are any subdirectories immediately below the sourceURI, one level only.
+ Part names: [category/]partname[/revN...]
+*/
+
+
+#include <dirent.h>
+#include <sys/stat.h>
+#include <cstring>
+#include <cstdio>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <assert.h>
+
+#include <sch_dir_lib_source.h>
+using namespace SCH;
+
+
+/**
+ * Class DIR_WRAP
+ * provides a destructor which is invoked if an exception is thrown.
+ */
+class DIR_WRAP
+{
+ DIR* dir;
+
+public:
+ DIR_WRAP( DIR* aDir ) : dir( aDir ) {}
+
+ ~DIR_WRAP()
+ {
+ if( dir )
+ closedir( dir );
+ }
+
+ DIR* operator->() { return dir; }
+ DIR* operator*() { return dir; }
+ operator bool () { return dir!=0; }
+};
+
+
+/**
+ * Class FILE_WRAP
+ * provides a destructor which is invoked if an exception is thrown.
+ */
+class FILE_WRAP
+{
+ int fh;
+
+public:
+ FILE_WRAP( int aFileHandle ) : fh( aFileHandle ) {}
+ ~FILE_WRAP()
+ {
+ if( fh != -1 )
+ close( fh );
+ }
+
+ operator int () { return fh; }
+};
+
+
+/**
+ * Function strrstr
+ * finds the last instance of needle in haystack, if any.
+ */
+static const char* strrstr( const char* haystack, const char* needle )
+{
+ const char* ret = 0;
+ const char* next = haystack;
+
+ // find last instance of haystack
+ while( (next = strstr( next, needle )) != 0 )
+ {
+ ret = next;
+ ++next; // don't keep finding the same one.
+ }
+
+ return ret;
+}
+
+#if 1 // @todo switch over to EndsWithRev() global
+
+static inline bool isDigit( char c )
+{
+ return c >= '0' && c <= '9';
+}
+
+
+/**
+ * Function endsWithRev
+ * returns a pointer to the final string segment: "revN[N..]" or NULL if none.
+ * @param start is the beginning of string segment to test, the partname or
+ * any middle portion of it.
+ * @param tail is a pointer to the terminating nul, or one past inclusive end of
+ * segment, i.e. the string segment of interest is [start,tail)
+ * @param separator is the separating byte, expected: '.' or '/', depending on context.
+ */
+static const char* endsWithRev( const char* start, const char* tail, char separator = '/' )
+{
+ bool sawDigit = false;
+
+ while( tail > start && isDigit( *--tail ) )
+ {
+ sawDigit = true;
+ }
+
+ // if sawDigit, tail points to the 'v' here.
+
+ if( sawDigit && tail-3 >= start )
+ {
+ tail -= 3;
+
+ if( tail[0]==separator && tail[1]=='r' && tail[2]=='e' && tail[3]=='v' )
+ {
+ return tail+1; // omit separator, return "revN[N..]"
+ }
+ }
+
+ return 0;
+}
+
+static inline const char* endsWithRev( const STRING& aPartName, char separator = '/' )
+{
+ return endsWithRev( aPartName.c_str(), aPartName.c_str()+aPartName.size(), separator );
+}
+
+#endif
+
+
+// see struct BY_REV
+bool BY_REV::operator() ( const STRING& s1, const STRING& s2 ) const
+{
+ // avoid instantiating new STRINGs, and thank goodness that c_str() is const.
+
+ const char* rev1 = endsWithRev( s1 );
+ const char* rev2 = endsWithRev( s2 );
+
+ int rootLen1 = rev1 ? rev1 - s1.c_str() : s1.size();
+ int rootLen2 = rev2 ? rev2 - s2.c_str() : s2.size();
+
+ int r = memcmp( s1.c_str(), s2.c_str(), min( rootLen1, rootLen2 ) );
+
+ if( r )
+ {
+ return r < 0;
+ }
+
+ if( rootLen1 != rootLen2 )
+ {
+ return rootLen1 < rootLen2;
+ }
+
+ // root strings match at this point, compare the revision number numerically,
+ // and chose the higher numbered version as "less", according to std::set lingo.
+
+ if( bool(rev1) != bool(rev2) )
+ {
+ return bool(rev1) < bool(rev2);
+ }
+
+ if( rev1 && rev2 )
+ {
+ int rnum1 = atoi( rev1+3 );
+ int rnum2 = atoi( rev2+3 );
+
+ // higher numbered revs are "less" so that they bubble to top.
+ return rnum1 > rnum2;
+ }
+
+ return false; // strings are equal, and they don't have a rev
+}
+
+
+bool DIR_LIB_SOURCE::makePartName( STRING* aPartName, const char* aEntry,
+ const STRING& aCategory )
+{
+ const char* cp = strrstr( aEntry, SWEET_EXT );
+
+ // if base name is not empty, contains SWEET_EXT, && cp is not NULL
+ if( cp > aEntry )
+ {
+ const char* limit = cp + strlen( cp );
+
+ // If versioning, then must find a trailing "revN.." type of string.
+ if( useVersioning )
+ {
+ const char* rev = endsWithRev( cp + SWEET_EXTZ, limit, '.' );
+ if( rev )
+ {
+ if( aCategory.size() )
+ *aPartName = aCategory + "/";
+ else
+ aPartName->clear();
+
+ aPartName->append( aEntry, cp - aEntry );
+ aPartName->append( "/" );
+ aPartName->append( rev );
+ return true;
+ }
+ }
+
+ // If using versioning, then all valid partnames must have a rev string,
+ // so we don't even bother to try and load any other partfile down here.
+ else
+ {
+ // if file extension is exactly SWEET_EXT, and no rev
+ if( cp==limit-5 )
+ {
+ if( aCategory.size() )
+ *aPartName = aCategory + "/";
+ else
+ aPartName->clear();
+
+ aPartName->append( aEntry, cp - aEntry );
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+
+STRING DIR_LIB_SOURCE::makeFileName( const STRING& aPartName )
+{
+ // create a fileName for the sweet string, using a reversible
+ // partname <-> fileName conversion protocol:
+
+ STRING fileName = sourceURI + "/";
+
+ const char* rev = endsWithRev( aPartName );
+
+ if( rev )
+ {
+ int basePartLen = rev - aPartName.c_str() - 1; // omit '/' separator
+ fileName.append( aPartName, 0, basePartLen );
+ fileName += SWEET_EXT;
+ fileName += '.';
+ fileName += rev;
+ }
+ else
+ {
+ fileName += aPartName;
+ fileName += SWEET_EXT;
+ }
+
+ return fileName;
+}
+
+
+void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName ) throw( IO_ERROR )
+{
+ FILE_WRAP fw = open( aFileName.c_str(), O_RDONLY );
+
+ if( fw == -1 )
+ {
+ STRING msg = strerror( errno );
+ msg += "; cannot open(O_RDONLY) file " + aFileName;
+ THROW_IO_ERROR( msg );
+ }
+
+ struct stat fs;
+
+ fstat( fw, &fs );
+
+ // sanity check on file size
+ if( fs.st_size > (1*1024*1024) )
+ {
+ STRING msg = aFileName;
+ msg += " seems too big. ( > 1 mbyte )";
+ THROW_IO_ERROR( msg );
+ }
+
+#if 0
+ // I read somewhere on the Internet that std::string chars are not guaranteed
+ // (over time) to be contiguous in future implementations of C++, so this
+ // strategy is here for that eventuality. We buffer through readBuffer here.
+
+ // reuse same readBuffer, which is not thread safe, but the API
+ // is not advertising thread safe (yet, if ever).
+ if( (int) fs.st_size > (int) readBuffer.size() )
+ readBuffer.resize( fs.st_size + 1000 );
+
+ int count = read( fw, &readBuffer[0], fs.st_size );
+ if( count != (int) fs.st_size )
+ {
+ STRING msg = strerror( errno );
+ msg += "; cannot read file " + aFileName;
+ THROW_IO_ERROR( msg );
+ }
+
+ aResult->assign( &readBuffer[0], count );
+#else
+
+ // read into the string directly
+ aResult->resize( fs.st_size );
+
+ int count = read( fw, &(*aResult)[0], fs.st_size );
+ if( count != (int) fs.st_size )
+ {
+ STRING msg = strerror( errno );
+ msg += "; cannot read file " + aFileName;
+ THROW_IO_ERROR( msg );
+ }
+
+ // test trailing nul is there, which should have been put there with resize() above
+ // printf( "'%s'\n", aResult->c_str() ); // checked OK.
+#endif
+
+}
+
+
+void DIR_LIB_SOURCE::cache() throw( IO_ERROR )
+{
+ partnames.clear();
+ categories.clear();
+
+ cacheOneDir( "" );
+}
+
+
+DIR_LIB_SOURCE::DIR_LIB_SOURCE( const STRING& aDirectoryPath,
+ const STRING& aOptions ) throw( IO_ERROR ) :
+ useVersioning( strstr( aOptions.c_str(), "useVersioning" ) )
+{
+ sourceURI = aDirectoryPath;
+ sourceType = "dir";
+
+ if( sourceURI.size() == 0 )
+ {
+ THROW_IO_ERROR( STRING("aDirectoryPath cannot be empty") );
+ }
+
+ // remove any trailing separator, so we can add it back later without ambiguity
+ if( strchr( "/\\", sourceURI[sourceURI.size()-1] ) )
+ sourceURI.erase( sourceURI.size()-1 );
+
+ cache();
+}
+
+
+DIR_LIB_SOURCE::~DIR_LIB_SOURCE()
+{
+}
+
+
+void DIR_LIB_SOURCE::GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory )
+ throw( IO_ERROR )
+{
+ PN_ITER end = aCategory.size() ?
+ partnames.lower_bound( aCategory + char( '/' + 1 ) ) :
+ partnames.end();
+
+ PN_ITER it = aCategory.size() ?
+ partnames.upper_bound( aCategory + "/" ) :
+ partnames.begin();
+
+ aResults->clear();
+
+ if( useVersioning )
+ {
+ STRING partName;
+
+ while( it != end )
+ {
+ const char* rev = endsWithRev( *it );
+
+ // all cached partnames have a rev string in useVersioning mode
+ assert( rev );
+
+ // partName is substring which omits the rev AND the rev separator
+ partName.assign( *it, 0, rev - it->c_str() - 1 );
+
+ aResults->push_back( partName );
+
+ // skip over all other versions of the same partName.
+ it = partnames.lower_bound( partName + char( '/' + 1 ) );
+ }
+
+ }
+
+ else
+ {
+ while( it != end )
+ aResults->push_back( *it++ );
+ }
+}
+
+
+void DIR_LIB_SOURCE::GetRevisions( STRINGS* aResults, const STRING& aPartName )
+ throw( IO_ERROR )
+{
+ aResults->clear();
+
+ if( useVersioning )
+ {
+ STRING partName;
+
+ const char* rev = endsWithRev( aPartName );
+ if( rev )
+ // partName is substring which omits the rev and the separator
+ partName.assign( aPartName, 0, rev - aPartName.c_str() - 1 );
+ else
+ partName = aPartName;
+
+ PN_ITER it = partnames.upper_bound( partName +'/' );
+ PN_ITER end = partnames.lower_bound( partName + char( '/' +1 ) );
+
+ for( ; it != end; ++it )
+ {
+ const char* rev = endsWithRev( *it );
+ assert( rev );
+ aResults->push_back( it->substr( rev - it->c_str() ) );
+ }
+ }
+
+ else
+ {
+ // In non-version mode, there were no revisions read in, only part
+ // files without a revision. But clients higher up expect to see
+ // at least one revision in order for the API to work, so we return
+ // a revision ""
+ aResults->push_back( "" );
+ }
+}
+
+
+void DIR_LIB_SOURCE::ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev )
+ throw( IO_ERROR )
+{
+ STRING partName = aPartName;
+ const char* hasRev = endsWithRev( partName );
+
+ if( useVersioning )
+ {
+ if( aRev.size() )
+ {
+ // a supplied rev replaces any in aPartName
+ if( hasRev )
+ partName.resize( hasRev - partName.c_str() - 1 );
+
+ partName += '/';
+ partName + aRev;
+
+ // find this exact revision
+
+ PN_ITER it = partnames.find( partName );
+
+ if( it == partnames.end() ) // part not found
+ {
+ partName += " not found.";
+ THROW_IO_ERROR( partName );
+ }
+
+ readString( aResult, makeFileName( partName ) );
+ }
+
+ else
+ {
+ // There's no rev on partName string. Find the most recent rev, i.e. highest,
+ // which will be first because of the BY_REV compare method, which treats
+ // higher numbered revs as first.
+
+ STRING search = partName + '/';
+
+ // There's no rev on partName string. Find the most recent rev, i.e. highest,
+ // which will be first because of the BY_REV compare method, which treats
+ // higher numbered revs as first.
+ PN_ITER it = partnames.upper_bound( search );
+
+ // verify that this one that is greater than partName is a match and not
+ // some unrelated name that is larger.
+ if( it == partnames.end() ||
+ it->compare( 0, search.size(), search ) != 0 )
+ {
+ partName += " is not present without a revision.";
+ THROW_IO_ERROR( partName );
+ }
+
+ readString( aResult, makeFileName( *it ) );
+ }
+ }
+
+ else // !useVersioning
+ {
+#if 1
+ if( hasRev || aRev.size() )
+ {
+ STRING msg = "this type 'dir' LIB_SOURCE not using 'useVersioning' option, cannot ask for a revision";
+ THROW_IO_ERROR( msg );
+ }
+#else
+ // no revisions allowed, strip it
+ if( hasRev )
+ partName.resize( hasRev - partName.c_str() - 1 );
+#endif
+
+ // find the part name without any revision
+
+ PN_ITER it = partnames.find( partName );
+
+ if( it == partnames.end() ) // part not found
+ {
+ partName += " not found.";
+ THROW_IO_ERROR( partName );
+ }
+
+ readString( aResult, makeFileName( partName ) );
+ }
+}
+
+
+void DIR_LIB_SOURCE::ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
+ throw( IO_ERROR )
+{
+ aResults->clear();
+
+ for( STRINGS::const_iterator n = aPartNames.begin(); n!=aPartNames.end(); ++n )
+ {
+ aResults->push_back( STRING() );
+ ReadPart( &aResults->back(), *n );
+ }
+}
+
+
+void DIR_LIB_SOURCE::GetCategories( STRINGS* aResults ) throw( IO_ERROR )
+{
+ aResults->clear();
+
+ // caller fetches them sorted.
+ for( NAME_CACHE::const_iterator it = categories.begin(); it!=categories.end(); ++it )
+ {
+ aResults->push_back( *it );
+ }
+}
+
+
+#if defined(DEBUG)
+
+void DIR_LIB_SOURCE::Show()
+{
+ printf( "Show categories:\n" );
+ for( NAME_CACHE::const_iterator it = categories.begin(); it!=categories.end(); ++it )
+ printf( " '%s'\n", it->c_str() );
+
+ printf( "\n" );
+ printf( "Show parts:\n" );
+ for( PART_CACHE::const_iterator it = partnames.begin(); it != partnames.end(); ++it )
+ {
+ printf( " '%s'\n", it->c_str() );
+ }
+}
+
+#endif
+
+
+void DIR_LIB_SOURCE::cacheOneDir( const STRING& aCategory ) throw( IO_ERROR )
+{
+ STRING curDir = sourceURI;
+
+ if( aCategory.size() )
+ curDir += "/" + aCategory;
+
+ DIR_WRAP dir = opendir( curDir.c_str() );
+
+ if( !dir )
+ {
+ STRING msg = strerror( errno );
+ msg += "; scanning directory " + curDir;
+ THROW_IO_ERROR( msg );
+ }
+
+ struct stat fs;
+ STRING partName;
+ STRING fileName;
+ dirent* entry;
+
+ while( (entry = readdir( *dir )) != NULL )
+ {
+ if( !strcmp( ".", entry->d_name ) || !strcmp( "..", entry->d_name ) )
+ continue;
+
+ fileName = curDir + "/" + entry->d_name;
+
+ if( !stat( fileName.c_str(), &fs ) )
+ {
+ // is this a valid part name?
+ if( S_ISREG( fs.st_mode ) && makePartName( &partName, entry->d_name, aCategory ) )
+ {
+ std::pair<NAME_CACHE::iterator, bool> pair = partnames.insert( partName );
+
+ if( !pair.second )
+ {
+ STRING msg = partName;
+ msg += " has already been encountered";
+ THROW_IO_ERROR( msg );
+ }
+ }
+
+ // is this an acceptable category name?
+ else if( S_ISDIR( fs.st_mode ) && !aCategory.size() && isCategoryName( entry->d_name ) )
+ {
+ // only one level of recursion is used, controlled by the
+ // emptiness of aCategory.
+ categories.insert( entry->d_name );
+
+ // somebody needs to test Windows (mingw), make sure it can
+ // handle opendir() recursively
+ cacheOneDir( entry->d_name );
+ }
+ else
+ {
+ //D( printf( "ignoring %s\n", entry->d_name );)
+ }
+ }
+ }
+}
+
+
+#if 0 && defined(DEBUG)
+
+void DIR_LIB_SOURCE::Test( int argc, char** argv )
+{
+ STRINGS partnames;
+ STRINGS sweets;
+
+ try
+ {
+ STRINGS::const_iterator pn;
+
+// DIR_LIB_SOURCE uut( argv[1] ? argv[1] : "", "" );
+ DIR_LIB_SOURCE uut( argv[1] ? argv[1] : "", "useVersioning" );
+
+ // show the cached content, only the directory information is cached,
+ // parts are cached in class LIB, not down here.
+ uut.Show();
+
+ uut.GetCategoricalPartNames( &partnames, "lions" );
+
+ printf( "\nGetCategoricalPartNames( aCatagory = 'lions' ):\n" );
+ for( STRINGS::const_iterator it = partnames.begin(); it!=partnames.end(); ++it )
+ {
+ printf( " '%s'\n", it->c_str() );
+ }
+
+ uut.ReadParts( &sweets, partnames );
+
+ printf( "\nSweets for Category = 'lions' parts:\n" );
+ pn = partnames.begin();
+ for( STRINGS::const_iterator it = sweets.begin(); it!=sweets.end(); ++it, ++pn )
+ {
+ printf( " %s: %s", pn->c_str(), it->c_str() );
+ }
+
+ // fetch the part names for ALL categories.
+ uut.GetCategoricalPartNames( &partnames );
+
+ printf( "\nGetCategoricalPartNames( aCategory = '' i.e. ALL):\n" );
+ for( STRINGS::const_iterator it = partnames.begin(); it!=partnames.end(); ++it )
+ {
+ printf( " '%s'\n", it->c_str() );
+ }
+
+ uut.ReadParts( &sweets, partnames );
+
+ printf( "\nSweets for ALL parts:\n" );
+ pn = partnames.begin();
+ for( STRINGS::const_iterator it = sweets.begin(); it!=sweets.end(); ++it, ++pn )
+ {
+ printf( " %s: %s", pn->c_str(), it->c_str() );
+ }
+ }
+
+ catch( std::exception& ex )
+ {
+ printf( "std::exception\n" );
+ }
+
+ catch( const IO_ERROR& ioe )
+ {
+ printf( "exception: %s\n", (const char*) ioe.errorText.ToUTF8() ) );
+ }
+}
+
+
+int main( int argc, char** argv )
+{
+ DIR_LIB_SOURCE::Test( argc, argv );
+ return 0;
+}
+
+#endif
diff --git a/new/sch_dir_lib_source.h b/new/sch_dir_lib_source.h
new file mode 100644
index 0000000..9d39352
--- /dev/null
+++ b/new/sch_dir_lib_source.h
@@ -0,0 +1,202 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef DIR_LIB_SOURCE_H_
+#define DIR_LIB_SOURCE_H_
+
+
+#include <set>
+#include <vector>
+
+#include <sch_lib.h>
+
+
+/// This file extension is an implementation detail specific to this LIB_SOURCE
+/// and to a corresponding LIB_SINK.
+/// Core EESCHEMA should never have to see this.
+#define SWEET_EXT ".part"
+#define SWEET_EXTZ (sizeof(SWEET_EXT)-1)
+
+
+/**
+ * struct BY_REV
+ * is here to provide a custom way to compare STRINGs. Namely, the revN[N..]
+ * string if present, is collated according to a 'higher revision first', but
+ * any part string without a revision, is even 'before' that.
+ */
+struct BY_REV
+{
+ bool operator() ( const STRING& s1, const STRING& s2 ) const;
+};
+
+
+/**
+ * Type PART_CACHE
+ * holds a set of part names in sorted order, according to the sort
+ * order given by struct BY_REV.
+ */
+typedef std::set< STRING, BY_REV > PART_CACHE;
+
+
+/**
+ * Type NAME_CACHE
+ * holds a set of categories in sorted order.
+ */
+typedef std::set< STRING > NAME_CACHE;
+
+
+namespace SCH {
+
+/**
+ * Class DIR_LIB_SOURCE
+ * implements a LIB_SOURCE in a file system directory.
+ *
+ * @author Dick Hollenbeck
+ */
+class DIR_LIB_SOURCE : public LIB_SOURCE
+{
+ friend class LIB_TABLE; ///< constructor is protected, LIB_TABLE can construct
+
+ bool useVersioning; ///< use files with extension ".revNNN..", else not
+
+ /// normal partnames, some of which may be prefixed with a category,
+ /// and some of which may have legal "revN[N..]" type strings.
+ PART_CACHE partnames;
+
+ typedef PART_CACHE::const_iterator PN_ITER;
+
+ /// categories which we expect to find in the set of @a partnames
+ NAME_CACHE categories;
+
+ std::vector<char> readBuffer; ///< used by readString()
+
+ /**
+ * Function cache
+ * [re-]loads the directory cache(s).
+ */
+ void cache() throw( IO_ERROR );
+
+ /**
+ * Function isCategoryName
+ * returns true iff aName is a valid category name.
+ */
+ bool isCategoryName( const char* aName )
+ {
+ return true;
+ }
+
+ /**
+ * Function makePartName
+ * returns true iff aEntry holds a valid part filename, in the form of
+ * "someroot.part[.revNNNN]" where NNN are number characters [0-9]
+ * @param aEntry is the raw directory entry without path information.
+ * @param aCategory is the last portion of the directory path.
+ * @param aPartName is where to put a part name, assuming @a aEntry is legal.
+ * @return bool - true only if aEntry is a legal part file name.
+ */
+ bool makePartName( STRING* aPartName, const char* aEntry, const STRING& aCategory );
+
+ /**
+ * Function readString
+ * reads a Sweet string into aResult. Candidate for virtual function later.
+ */
+ void readString( STRING* aResult, const STRING& aFileName ) throw( IO_ERROR );
+
+ /**
+ * Function cacheOneDir
+ * loads part names [and categories] from a directory given by
+ * "sourceURI + '/' + category"
+ * Categories are only loaded if processing the top most directory because
+ * only one level of categories is supported. We know we are in the
+ * top most directory if aCategory is empty.
+ */
+ void cacheOneDir( const STRING& aCategory ) throw( IO_ERROR );
+
+ /**
+ * Function makeFileName
+ * converts a part name into a filename and returns it.
+ */
+ STRING makeFileName( const STRING& aPartName );
+
+protected:
+
+ /**
+ * Constructor DIR_LIB_SOURCE( const STRING& aDirectoryPath )
+ * sets up a LIB_SOURCE using aDirectoryPath in a file system.
+ * @see LIB_TABLE::LookupPart().
+ *
+ * @param aDirectoryPath is a full file pathname of a directory which contains
+ * the library source of part files. Examples might be "C:\kicad_data\mylib" or
+ * "/home/designer/mylibdir". This is not a URI, but an OS specific path that
+ * can be given to opendir().
+ *
+ * @param aOptions is the options string from the library table, currently
+ * the only supported option, that this LIB_SOURCE knows about is
+ * "useVersioning". If present means support versioning in the directory
+ * tree, otherwise only a single version of each part is recognized, namely the
+ * one without the ".revN[N..]" trailer.
+ */
+ DIR_LIB_SOURCE( const STRING& aDirectoryPath, const STRING& aOptions = "" ) throw( IO_ERROR );
+
+ ~DIR_LIB_SOURCE();
+
+ //-----<LIB_SOURCE implementation functions >------------------------------
+
+ void ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev = "" )
+ throw( IO_ERROR );
+
+ void ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
+ throw( IO_ERROR );
+
+ void GetCategories( STRINGS* aResults ) throw( IO_ERROR );
+
+ void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory = "" )
+ throw( IO_ERROR );
+
+ void GetRevisions( STRINGS* aResults, const STRING& aPartName )
+ throw( IO_ERROR );
+
+ void FindParts( STRINGS* aResults, const STRING& aQuery ) throw( IO_ERROR )
+ {
+ // @todo
+ }
+
+ //-----</LIB_SOURCE implementation functions >------------------------------
+
+#if defined(DEBUG)
+ /**
+ * Function Show
+ * will output a debug dump of contents.
+ */
+ void Show();
+
+public:
+ static void Test( int argc, char** argv );
+
+#endif
+};
+
+} // namespace SCH
+
+#endif // DIR_LIB_SOURCE_H_
diff --git a/new/sch_lib.cpp b/new/sch_lib.cpp
new file mode 100644
index 0000000..a5464fa
--- /dev/null
+++ b/new/sch_lib.cpp
@@ -0,0 +1,278 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <memory> // std::auto_ptr
+#include <wx/string.h>
+
+
+#include <sch_lib.h>
+#include <sch_lpid.h>
+#include <sch_part.h>
+#include <sch_sweet_parser.h>
+#include <sch_lib_table.h>
+
+
+#if 1
+
+#include <map>
+
+/*
+
+The LIB part cache consists of a std::map of partnames without revisions at the
+top level. Each top level map entry can point to another std::map which it owns
+and which holds all the revisions for that part name. At any point in the tree,
+there can be NULL pointers which allow for lazy loading, including the very top
+most root pointer itself, which is PARTS* parts. We use the key to hold the
+partName at one level, and revision at the deeper nested level.
+
+1) Only things which are asked for are done.
+2) Anything we learn we remember.
+
+*/
+
+namespace SCH {
+
+
+/**
+ * Struct LTREV
+ * is for PART_REVS, and provides a custom way to compare rev STRINGs.
+ * Namely, the revN[N..] string if present, is collated according to a
+ * 'higher revision first'.
+ */
+struct LTREV
+{
+ bool operator() ( const STRING& s1, const STRING& s2 ) const
+ {
+ return RevCmp( s1.c_str(), s2.c_str() ) < 0;
+ }
+};
+
+
+/**
+ * Class PART_REVS
+ * contains the collection of revisions for a particular part name, in the
+ * form of cached PARTs. The tuple consists of a rev string and a PART pointer.
+ * The rev string is like "rev1", the PART pointer will be NULL until the PART
+ * gets loaded, lazily.
+ */
+class PART_REVS : public std::map< STRING, PART*, LTREV >
+{
+public:
+ ~PART_REVS()
+ {
+ for( iterator it = begin(); it != end(); ++it )
+ {
+ delete it->second; // second may be NULL, no problem
+ }
+ }
+};
+
+
+/**
+ * Class PARTS
+ * contains the collection of PART_REVS for all PARTs in the lib.
+ * The tuple consists of a part name and a PART_REVS pointer.
+ * The part name does not have the revision attached (of course this is understood
+ * by definition of "part name"). The PART_REVS pointer will be NULL until a client
+ * askes about the revisions for a part name, so the loading is done lazily.
+ */
+class PARTS : public std::map< STRING, PART_REVS* >
+{
+public:
+ ~PARTS()
+ {
+ for( iterator it = begin(); it != end(); ++it )
+ {
+ delete it->second; // second may be NULL, no problem
+ }
+ }
+};
+
+} // namespace SCH
+
+
+#else // was nothing but grief:
+
+#include <boost/ptr_container/ptr_map.hpp>
+
+namespace SCH {
+
+/// PARTS' key is revision, like "rev12", PART pointer may be null until loaded.
+typedef boost::ptr_map< STRING, boost::nullable<PART> > PARTS;
+typedef PARTS::iterator PARTS_ITER;
+typedef PARTS::const_iterator PARTS_CITER;
+
+
+/// PART_REVS' key is part name, w/o rev, PART pointer may be null until loaded.
+typedef boost::ptr_map< STRING, boost::nullable<PARTS> > PART_REVS;
+typedef PART_REVS::iterator PART_REVS_ITER;
+typedef PART_REVS::const_iterator PART_REVS_CITER;
+
+} // namespace SCH
+
+#endif
+
+
+using namespace SCH;
+
+
+LIB::LIB( const STRING& aLogicalLibrary, LIB_SOURCE* aSource, LIB_SINK* aSink ) :
+ logicalName( aLogicalLibrary ),
+ source( aSource ),
+ sink( aSink ),
+ cachedCategories( false ),
+ parts( 0 )
+{
+}
+
+
+LIB::~LIB()
+{
+ delete source;
+ delete sink;
+ delete parts;
+}
+
+
+const PART* LIB::lookupPart( const LPID& aLPID ) throw( IO_ERROR )
+{
+ if( !parts )
+ {
+ parts = new PARTS;
+
+ source->GetCategoricalPartNames( &vfetch );
+
+ // insert a PART_REVS for each part name
+ for( STRINGS::const_iterator it = vfetch.begin(); it!=vfetch.end(); ++it )
+ {
+ D(printf("lookupPart:%s\n", it->c_str() );)
+ (*parts)[*it] = new PART_REVS;
+ }
+ }
+
+ // load all the revisions for this part name, only if it has any
+ PARTS::iterator pi = parts->find( aLPID.GetPartName() );
+
+ PART_REVS* revs = pi != parts->end() ? pi->second : NULL;
+
+ // D(printf("revs:%p partName:%s\n", revs, aLPID.GetPartName().c_str() );)
+
+ // if the key for parts has no aLPID.GetPartName() the part is not in this lib
+ if( revs )
+ {
+ if( revs->size() == 0 ) // assume rev list has not been loaded yet
+ {
+ // load all the revisions for this part.
+ source->GetRevisions( &vfetch, aLPID.GetPartName() );
+
+ // create a PART_REV entry for each revision, but leave the PART* NULL
+ for( STRINGS::const_iterator it = vfetch.begin(); it!=vfetch.end(); ++it )
+ {
+ D(printf("lookupPartRev:%s\n", it->c_str() );)
+ (*revs)[*it] = 0;
+ }
+ }
+
+ PART_REVS::iterator rev;
+
+ // If caller did not say what revision, find the highest numbered one and return that.
+ if( !aLPID.GetRevision().size() && revs->size() )
+ {
+ rev = revs->begin(); // sort order has highest rev first
+
+ if( !rev->second ) // the PART has never been instantiated before
+ {
+ rev->second = new PART( this, LPID::Format( "", aLPID.GetPartName(), rev->first ) );
+ }
+
+ D(printf("lookupPartLatestRev:%s\n", rev->second->partNameAndRev.c_str() );)
+ return rev->second;
+ }
+ else
+ {
+ rev = revs->find( aLPID.GetRevision() );
+
+ if( rev != revs->end() )
+ {
+ if( !rev->second ) // the PART has never been instantiated before
+ {
+ rev->second = new PART( this, aLPID.GetPartNameAndRev() );
+ }
+ return rev->second;
+ }
+ }
+ }
+
+ return 0; // no such part name in this lib
+}
+
+
+PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable ) throw( IO_ERROR )
+{
+ PART* part = (PART*) lookupPart( aLPID );
+
+ if( !part ) // part does not exist in this lib
+ {
+ wxString msg = wxString::Format( _("part '%s' not found in lib %s" ),
+ wxString::FromUTF8( aLPID.GetPartNameAndRev().c_str() ).GetData(),
+ wxString::FromUTF8( logicalName.c_str() ).GetData() );
+ THROW_IO_ERROR( msg );
+ }
+
+ if( part->body.empty() )
+ {
+ // load body
+ source->ReadPart( &part->body, aLPID.GetPartName(), aLPID.GetRevision() );
+
+#if 0 && defined(DEBUG)
+ const STRING& body = part->body;
+ printf( "body: %s", body.c_str() );
+ if( !body.size() || body[body.size()-1] != '\n' )
+ printf( "\n" );
+#endif
+
+ // @todo consider changing ReadPart to return a "source"
+ SWEET_PARSER sp( part->body, wxString::FromUTF8( aLPID.Format().c_str() ) );
+
+ part->Parse( &sp, aLibTable );
+ }
+
+ return part;
+}
+
+
+#if 0 && defined(DEBUG)
+
+void LIB::Test( int argc, char** argv ) throw( IO_ERROR );
+{
+}
+
+int main( int argc, char** argv )
+{
+ LIB::Test( argc, argv );
+
+ return 0;
+}
+
+#endif
diff --git a/new/sch_lib.h b/new/sch_lib.h
new file mode 100644
index 0000000..9a383c3
--- /dev/null
+++ b/new/sch_lib.h
@@ -0,0 +1,365 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SCH_LIB_H_
+#define SCH_LIB_H_
+
+#include <utf8.h>
+#include <richio.h>
+#include <import_export.h>
+
+
+namespace SCH {
+
+class LPID;
+class PART;
+class LIB_TABLE;
+
+/**
+ * Class LIB_SOURCE
+ * is an abstract class from which implementation specific LIB_SOURCEs
+ * may be derived, one for each kind of library type allowed in the library table.
+ * The class name stems from the fact that this interface only provides READ ONLY
+ * functions.
+ *
+ * @author Dick Hollenbeck
+ */
+class LIB_SOURCE
+{
+ friend class LIB; ///< the LIB uses these functions.
+
+protected: ///< derived classes must implement
+
+ /**
+ * Function GetSourceType
+ * returns the library table entry's type for this library source.
+ */
+ const STRING& GetSourceType() { return sourceType; }
+
+ /**
+ * Function GetSourceURI
+ * returns absolute location of the library source.
+ */
+ const STRING& GetSourceURI() { return sourceURI; }
+
+ //-----<abstract for implementors>---------------------------------------
+
+ /**
+ * Function ReadPart
+ * fetches @a aPartName's s-expression into @a aResult after clear()ing aResult.
+ */
+ virtual void ReadPart( STR_UTF* aResult, const STRING& aPartName, const STRING& aRev = "" )
+ throw( IO_ERROR ) = 0;
+
+ /**
+ * Function ReadParts
+ * fetches the s-expressions for each part given in @a aPartNames, into @a aResults,
+ * honoring the array indices respectfully.
+ * @param aPartNames is a list of part names, one name per list element. If a part name
+ * does not have a version string, then the most recent version is fetched.
+ * @param aResults receives the s-expressions
+ */
+ virtual void ReadParts( STR_UTFS* aResults, const STRINGS& aPartNames )
+ throw( IO_ERROR ) = 0;
+
+ /**
+ * Function GetCategories
+ * fetches all categories present in the library source into @a aResults
+ */
+ virtual void GetCategories( STRINGS* aResults )
+ throw( IO_ERROR ) = 0;
+
+ /**
+ * Function GetCategoricalPartNames
+ * fetches all the part names for @a aCategory, which was returned by GetCategories().
+ *
+ * @param aCategory is a subdividing navigator within the library source,
+ * but may default to empty which will be taken to mean all categories.
+ *
+ * @param aResults is a place to put the fetched result, one category per STRING.
+ */
+ virtual void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory="" )
+ throw( IO_ERROR ) = 0;
+
+ /**
+ * Function GetRevisions
+ * fetches all revisions for @a aPartName into @a aResults. Revisions are strings
+ * like "rev12", "rev279", and are library source agnostic. These do not have to be
+ * in a contiguous order, but the first 3 characters must be "rev" and subsequent
+ * characters must consist of at least one decimal digit. If the LIB_SOURCE
+ * does not support revisions, it is allowed to return a single "" string as
+ * the only result. This means aPartName is present in the libsource, only once
+ * without a revision. This is a special case.
+ */
+ virtual void GetRevisions( STRINGS* aResults, const STRING& aPartName )
+ throw( IO_ERROR ) = 0;
+
+ /**
+ * Function FindParts
+ * fetches part names for all parts matching the criteria given in @a
+ * aQuery, into @a aResults. The query string is designed to be easily marshalled,
+ * i.e. serialized, so that long distance queries can be made with minimal overhead.
+ * The library source needs to have an intelligent friend on the other end if
+ * the actual library data is remotely located, otherwise it will be too slow
+ * to honor this portion of the API contract.
+ *
+ * @param aQuery is a string holding a domain specific query language expression.
+ * One candidate here is an s-expression that uses (and ..) and (or ..) operators
+ * and uses them as RPN. For example "(and (footprint 0805)(value 33ohm)(category passives))".
+ * The UI can shield the user from this if it wants.
+ *
+ * @param aResults is a place to put the fetched part names, one part per STRING.
+ */
+ virtual void FindParts( STRINGS* aResults, const STRING& aQuery )
+ throw( IO_ERROR ) = 0;
+
+ //-----</abstract for implementors>--------------------------------------
+
+
+protected:
+ STRING sourceType;
+ STRING sourceURI;
+};
+
+
+/**
+ * Class LIB_SINK
+ * is an abstract class from which implementation specific LIB_SINKs
+ * may be derived, one for each kind of library type in the library table that
+ * supports writing. The class name stems from the fact that this interface
+ * only provides WRITE functions.
+ *
+ * @author Dick Hollenbeck
+ */
+class LIB_SINK
+{
+ friend class LIB; ///< only the LIB uses these functions.
+
+protected: ///< derived classes must implement
+
+ /**
+ * Function GetSinkType
+ * returns the library table entry's type for this library sink.
+ */
+ const STRING& GetSinkType() { return sinkType; }
+
+ /**
+ * Function GetSinkURI
+ * returns absolute location of the library sink.
+ */
+ const STRING& GetSinkURI() { return sinkURI; }
+
+ /**
+ * Function WritePart
+ * saves the part to non-volatile storage. @a aPartName may have the revision
+ * portion present. If it is not present, and a overwrite of an existhing
+ * part is done, then LIB::ReloadPart() must be called on this same part
+ * and all parts that inherit it must be reparsed.
+ * @return STRING - if the LIB_SINK support revision numbering, then return a
+ * revision name that was next in the sequence, e.g. "rev22", else "".
+ */
+ virtual STRING WritePart( const STRING& aPartName, const STRING& aSExpression )
+ throw( IO_ERROR ) = 0;
+
+protected:
+ STRING sinkType;
+ STRING sinkURI;
+};
+
+
+class PARTS;
+
+
+/**
+ * Class LIB
+ * is a cache of parts, and because the LIB_SOURCE is abstracted, there
+ * should be no need to extend from this class in any case except for the
+ * PARTS_LIST.
+ *
+ * @author Dick Hollenbeck
+ */
+class MY_API LIB
+{
+ friend class LIB_TABLE; ///< protected constructor, LIB_TABLE may construct
+
+protected: // constructor is not public, called from LIB_TABLE only.
+
+ /**
+ * Constructor LIB
+ * is not public and is only called from class LIB_TABLE
+ *
+ * @param aLogicalLibrary is the name of a well known logical library, and is
+ * known because it already exists in the library table.
+ *
+ * @param aSource is an open LIB_SOURCE whose ownership is
+ * given over to this LIB.
+ *
+ * @param aSink is an open LIB_SINK whose ownership is given over
+ * to this LIB, and it is normally NULL.
+ */
+ LIB( const STRING& aLogicalLibrary, LIB_SOURCE* aSource, LIB_SINK* aSink = NULL );
+
+public:
+
+ ~LIB();
+
+ /**
+ * Function HasSink
+ * returns true if this library has write/save capability. Most LIBs
+ * are read only.
+ */
+ bool HasSink() { return sink != NULL; }
+
+ /**
+ * Function LogicalName
+ * returns the logical name of this LIB.
+ */
+ STRING LogicalName();
+
+ //-----<use delegates: source and sink>---------------------------------
+
+ /**
+ * Function LookupPart
+ * returns a PART given @a aPartName, such as "passives/R". No ownership
+ * is given to the PART, it stays in the cache that is this LIB.
+ *
+ * @param aLPID is the part to lookup. The logicalLibName can be empty in it
+ * since yes, we know which LIB is in play.
+ *
+ * @param aLibTable is the LIB_TABLE view that is in effect for inheritance,
+ * and comes from the big containing SCHEMATIC object.
+ *
+ * @return PART* - The desired PART and will never be NULL. No ownership is
+ * given to caller. PARTs always reside in the cache that is a LIB.
+ *
+ * @throw IO_ERROR if the part cannot be found or loaded.
+ */
+ PART* LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable )
+ throw( IO_ERROR );
+
+ /**
+ * Function ReloadPart
+ * will reload the part assuming the library source has a changed content
+ * for it.
+ */
+ void ReloadPart( PART* aPart ) throw( IO_ERROR );
+
+ /**
+ * Function GetCategories
+ * returns all categories of parts within this LIB into @a aResults.
+ */
+ STRINGS GetCategories() throw( IO_ERROR );
+
+ /**
+ * Function GetCategoricalPartNames
+ * returns the part names for @a aCategory, and at the same time
+ * creates cache entries for the very same parts if they do not already exist
+ * in this LIB (i.e. cache).
+ */
+ STRINGS GetCategoricalPartNames( const STRING& aCategory = "" ) throw( IO_ERROR );
+
+
+ //-----<.use delegates: source and sink>--------------------------------
+
+ /**
+ * Function WritePart
+ * saves the part to non-volatile storage and returns the next new revision
+ * name in the sequence established by the LIB_SINK.
+ */
+ STRING WritePart( PART* aPart ) throw( IO_ERROR );
+
+ void SetPartBody( PART* aPart, const STRING& aSExpression ) throw( IO_ERROR );
+
+ /**
+ * Function GetRevisions
+ * returns the revisions of @a aPartName that are present in this LIB.
+ * The returned STRINGS will look like "rev1", "rev2", etc.
+ */
+ STRINGS GetRevisions( const STRING& aPartName ) throw( IO_ERROR );
+
+ /**
+ * Function FindParts
+ * returns part names for all parts matching the criteria given in @a
+ * aQuery, into @a aResults. The query string is designed to be easily marshalled,
+ * i.e. serialized, so that long distance queries can be made with minimal overhead.
+ * The library source needs to have an intelligent friend on the other end if
+ * the actual library data is remotely located, otherwise it will be too slow
+ * to honor this portion of the API contract.
+ *
+ * @param aQuery is a string holding a domain specific language expression. One candidate
+ * here is an RPN s-expression that uses (and ..) and (or ..) operators. For example
+ * "(and (footprint 0805)(value 33ohm)(category passives))"
+ */
+ STRINGS FindParts( const STRING& aQuery ) throw( IO_ERROR )
+ {
+ // run the query on the cached data first for any PARTS which are fully
+ // parsed (i.e. cached), then on the LIB_SOURCE to find any that
+ // are not fully parsed, then unify the results.
+
+ return STRINGS();
+ }
+
+#if defined(DEBUG)
+ static void Test( int argc, char** argv ) throw( IO_ERROR );
+#endif
+
+protected:
+
+ STR_UTF fetch; // scratch, used to fetch things, grows to worst case size.
+ STR_UTFS vfetch; // scratch, used to fetch things.
+
+ STRING logicalName;
+ LIB_SOURCE* source;
+ LIB_SINK* sink;
+
+ STRINGS categories;
+ bool cachedCategories; /// < is true only after reading categories
+
+
+ /** parts are in various states of readiness:
+ * 1) not even loaded (if cachedParts is false)
+ * 2) present, but without member 'body' having been read() yet.
+ * 3) body has been read, but not parsed yet.
+ * 4) parsed and inheritance if any has been applied.
+ */
+ PARTS* parts;
+
+ /**
+ * Function lookupPart
+ * looks up a PART, returns NULL if cannot find in source. Does not parse
+ * the part. Does not even load the part's Sweet string. No ownership
+ * is given to the PART, it stays in the cache that is this LIB.
+ *
+ * @throw IO_ERROR if there is some kind of communications error reading
+ * the original list of parts.
+ *
+ * @return PART* - the cached PART, or NULL if not found. No ownership transferred.
+ */
+ const PART* lookupPart( const LPID& aLPID ) throw( IO_ERROR );
+};
+
+
+} // namespace SCH
+
+#endif // SCH_LIB_H_
diff --git a/new/sch_lib_table.cpp b/new/sch_lib_table.cpp
new file mode 100644
index 0000000..0e4fbb0
--- /dev/null
+++ b/new/sch_lib_table.cpp
@@ -0,0 +1,341 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <set>
+#include <assert.h>
+
+#include <sch_lib_table_lexer.h>
+#include <sch_lpid.h>
+#include <sch_lib_table.h>
+#include <sch_dir_lib_source.h>
+
+
+using namespace SCH;
+using namespace LT; // tokens, enum T for LIB_TABLE
+
+
+LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ) :
+ fallBack( aFallBackTable )
+{
+ // not copying fall back, simply search aFallBackTable separately
+ // if "logicalName not found".
+}
+
+
+void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
+{
+ /* grammar:
+
+ (lib_table
+ (lib (logical LOGICAL)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ (lib (logical LOGICAL)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ (lib (logical LOGICAL)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ )
+
+ note: "(lib_table" has already been read in.
+ */
+
+ T tok;
+
+ while( ( tok = in->NextTok() ) != T_RIGHT )
+ {
+ // (lib (logical "LOGICAL")(type "TYPE")(full_uri "FULL_URI")(options "OPTIONS"))
+
+ if( tok == T_EOF )
+ in->Expecting( T_RIGHT );
+
+ if( tok != T_LEFT )
+ in->Expecting( T_LEFT );
+
+ if( ( tok = in->NextTok() ) != T_lib )
+ in->Expecting( T_lib );
+
+ in->NeedLEFT();
+
+ if( ( tok = in->NextTok() ) != T_logical )
+ in->Expecting( T_logical );
+
+ in->NeedSYMBOLorNUMBER();
+
+ std::auto_ptr<ROW> row( new ROW( this ) );
+
+ row->SetLogicalName( in->CurText() );
+
+ in->NeedRIGHT();
+ in->NeedLEFT();
+
+ if( ( tok = in->NextTok() ) != T_type )
+ in->Expecting( T_type );
+
+ in->NeedSYMBOLorNUMBER();
+
+ // verify that type is one of: {dir, schematic, subversion, http}
+ if( strcmp( in->CurText(), "dir" ) &&
+ strcmp( in->CurText(), "schematic" ) &&
+ strcmp( in->CurText(), "subversion" ) &&
+ strcmp( in->CurText(), "http" ) )
+ {
+ in->Expecting( "dir|schematic|subversion|http" );
+ }
+
+ row->SetType( in->CurText() );
+
+ in->NeedRIGHT();
+ in->NeedLEFT();
+
+ if( ( tok = in->NextTok() ) != T_full_uri )
+ in->Expecting( T_full_uri );
+
+ in->NeedSYMBOLorNUMBER();
+
+ row->SetFullURI( in->CurText() );
+
+ in->NeedRIGHT();
+ in->NeedLEFT();
+
+ if( ( tok = in->NextTok() ) != T_options )
+ in->Expecting( T_options );
+
+ in->NeedSYMBOLorNUMBER();
+
+ row->SetOptions( in->CurText() );
+
+ in->NeedRIGHT();
+ in->NeedRIGHT(); // terminate the (lib..)
+
+ // all logicalNames within this table fragment must be unique, so we do not
+ // use doReplace in InsertRow(). However a fallBack table can have a
+ // conflicting logicalName and ours will supercede that one since in
+ // FindLib() we search this table before any fall back.
+ if( !InsertRow( row ) )
+ {
+ STRING msg;
+
+ msg += '\'';
+ msg += row->logicalName;
+ msg += '\'';
+ msg += " is a duplicate logical lib name";
+ THROW_IO_ERROR( msg );
+ }
+ }
+}
+
+
+void LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR )
+{
+ out->Print( nestLevel, "(lib_table\n" );
+ for( ROWS_CITER it = rows.begin(); it != rows.end(); ++it )
+ it->second->Format( out, nestLevel+1 );
+ out->Print( nestLevel, ")\n" );
+}
+
+
+void LIB_TABLE::ROW::Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR )
+{
+ out->Print( nestLevel, "(lib (logical %s)(type %s)(full_uri %s)(options %s))\n",
+ out->Quotes( logicalName ).c_str(),
+ out->Quotes( libType ).c_str(),
+ out->Quotes( fullURI ).c_str(),
+ out->Quotes( options ).c_str()
+ );
+}
+
+
+STRINGS LIB_TABLE::GetLogicalLibs()
+{
+ // Only return unique logical library names. Use std::set::insert() to
+ // quietly reject any duplicates, which can happen when encountering a duplicate
+ // logical lib name from one of the fall back table(s).
+
+ std::set<STRING> unique;
+ STRINGS ret;
+ const LIB_TABLE* cur = this;
+
+ do
+ {
+ for( ROWS_CITER it = cur->rows.begin(); it!=cur->rows.end(); ++it )
+ {
+ unique.insert( it->second->logicalName );
+ }
+
+ } while( ( cur = cur->fallBack ) != 0 );
+
+ // return a sorted, unique set of logical lib name STRINGS to caller
+ for( std::set<STRING>::const_iterator it = unique.begin(); it!=unique.end(); ++it )
+ ret.push_back( *it );
+
+ return ret;
+}
+
+
+PART* LIB_TABLE::LookupPart( const LPID& aLPID, LIB* aLocalLib )
+ throw( IO_ERROR )
+{
+ LIB* lib = lookupLib( aLPID, aLocalLib );
+
+ return lib->LookupPart( aLPID, this );
+}
+
+
+LIB* LIB_TABLE::lookupLib( const LPID& aLPID, LIB* aFallBackLib )
+ throw( IO_ERROR )
+{
+ if( aLPID.GetLogicalLib().size() )
+ {
+ ROW* row = FindRow( aLPID.GetLogicalLib() );
+ if( !row )
+ {
+ STRING msg = "lib table contains no logical lib '";
+ msg += aLPID.GetLogicalLib();
+ msg += '\'';
+ THROW_IO_ERROR( msg );
+ }
+
+ if( !row->lib )
+ {
+ loadLib( row );
+ }
+
+ assert( row->lib ); // fix loadLib() to throw if cannot load
+
+ return row->lib;
+ }
+
+ if( aFallBackLib )
+ {
+ return aFallBackLib;
+ }
+
+ STRING msg = "lookupLib() requires logicalLibName or a fallback lib";
+ THROW_IO_ERROR( msg );
+}
+
+
+void LIB_TABLE::loadLib( ROW* aRow ) throw( IO_ERROR )
+{
+ assert( !aRow->lib ); // caller should know better.
+
+ const STRING& libType = aRow->GetType();
+
+ if( !libType.compare( "dir" ) )
+ {
+ // autor_ptr wrap source while we create sink, in case sink throws.
+ std::auto_ptr<LIB_SOURCE> source(
+ new DIR_LIB_SOURCE(
+ aRow->GetFullURI(),
+ aRow->GetOptions() ) );
+
+ /* @todo load LIB_SINK
+ std::auto_ptr<LIB_SINK> sink(
+ new DIR_LIB_SINK(
+ aRow->GetFullURI(),
+ aRow->GetOptions() ) );
+ */
+
+ // LIB::LIB( const STRING& aLogicalLibrary, LIB_SOURCE* aSource, LIB_SINK* aSink = NULL );
+ aRow->lib = new LIB( aRow->GetLogicalName(), source.release(), NULL );
+ }
+
+/*
+ else if( !libType.compare( "schematic" ) )
+ {
+ // @todo code and load SCHEMATIC_LIB_SOURCE
+ }
+
+ else if( !libType.compare( "subversion" ) )
+ {
+ // @todo code and load SVN_LIB_SOURCE
+ }
+
+ else if( !libType.compare( "http" ) )
+ {
+ // @todo code and load HTTP_LIB_SOURCE
+ }
+*/
+ else
+ {
+ STRING msg = "cannot load unknown libType: '";
+ msg += libType;
+ msg += '\'';
+ THROW_IO_ERROR( msg );
+ }
+}
+
+
+LIB_TABLE::ROW* LIB_TABLE::FindRow( const STRING& aLogicalName ) const
+{
+ // this function must be *super* fast, so therefore should not instantiate
+ // anything which would require using the heap. This function is the reason
+ // ptr_map<> was used instead of ptr_set<>, which would have required
+ // instantiating a ROW just to find a ROW.
+ const LIB_TABLE* cur = this;
+
+ do
+ {
+ ROWS_CITER it = cur->rows.find( aLogicalName );
+
+ if( it != cur->rows.end() )
+ {
+ // reference: http://myitcorner.com/blog/?p=361
+ return (LIB_TABLE::ROW*) it->second; // found
+ }
+
+ // not found, search fall back table(s), if any
+ } while( ( cur = cur->fallBack ) != 0 );
+
+ return 0; // not found
+}
+
+
+bool LIB_TABLE::InsertRow( std::auto_ptr<ROW>& aRow, bool doReplace )
+{
+ // this does not need to be super fast.
+
+ ROWS_CITER it = rows.find( aRow->logicalName );
+
+ if( it == rows.end() )
+ {
+ // be careful here, key is needed because aRow can be
+ // release()ed before logicalName is captured.
+ const STRING& key = aRow->logicalName;
+ rows.insert( key, aRow );
+ return true;
+ }
+
+ if( doReplace )
+ {
+ rows.erase( aRow->logicalName );
+
+ // be careful here, key is needed because aRow can be
+ // release()ed before logicalName is captured.
+ const STRING& key = aRow->logicalName;
+ rows.insert( key, aRow );
+ return true;
+ }
+
+ return false;
+}
+
diff --git a/new/sch_lib_table.h b/new/sch_lib_table.h
new file mode 100644
index 0000000..d05dfdb
--- /dev/null
+++ b/new/sch_lib_table.h
@@ -0,0 +1,388 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SCH_LIB_TABLE_H_
+#define SCH_LIB_TABLE_H_
+
+#include <string>
+#include <boost/ptr_container/ptr_map.hpp>
+
+#include <import_export.h>
+#include <sch_lib.h>
+
+class OUTPUTFORMATTER;
+class SCH_LIB_TABLE_LEXER;
+
+
+namespace SCH {
+
+class LPID;
+class PART;
+
+/**
+ * Class LIB_TABLE
+ * holds LIB_TABLE::ROW records, and can be searched in a very high speed
+ * way based on logical library name.
+ * <p>
+ * This class owns the <b>library table</b>, which is like fstab in concept and maps logical
+ * library name to library URI, type, and options. It has the following columns:
+ * <ul>
+ * <li> Logical Library Name
+ * <li> Library Type
+ * <li> Library URI. The full URI to the library source, form dependent on Type.
+ * <li> Options, used for access, such as password
+ * </ul>
+ * <p>
+ * The Library Type can be one of:
+ * <ul>
+ * <li> "dir"
+ * <li> "schematic" i.e. a parts list from another schematic.
+ * <li> "subversion"
+ * <li> "http"
+ * </ul>
+ * <p>
+ * For now, the Library URI types needed to support the various types can be one of those
+ * shown below, which are typical of each type:
+ * <ul>
+ * <li> "file://C:/mylibdir"
+ * <li> "file://home/user/kicadwork/jtagboard.sch"
+ * <li> "svn://kicad.org/partlib/trunk"
+ * <li> "http://kicad.org/partlib"
+ * </ul>
+ * <p>
+ * The applicable library table is built up from several additive rows (table fragments),
+ * and the final table is a (conceptual) merging of the table fragments. Two
+ * anticipated sources of the rows are a personal table, and a schematic resident
+ * table. The schematic resident table rows are considered a higher priority in
+ * the final dynamically assembled library table. A row in the schematic
+ * contribution to the library table takes precedence over the personal table
+ * if there is a collision on logical library name, otherwise the rows simply
+ * combine without issue to make up the applicable library table.
+ *
+ * @author Dick Hollenbeck
+ */
+class MY_API LIB_TABLE
+{
+public:
+
+ /**
+ * Class ROW
+ * holds a record identifying a LIB in the LIB_TABLE.
+ */
+ class ROW
+ {
+ friend class LIB_TABLE;
+
+ public:
+
+ /**
+ * Function GetLogicalName
+ * returns the logical name of this library table entry.
+ */
+ const STRING& GetLogicalName() const
+ {
+ return logicalName;
+ }
+
+ /**
+ * Function GetType
+ * returns the type of LIB represented by this record.
+ */
+ const STRING& GetType() const
+ {
+ return libType;
+ }
+
+ /**
+ * Function GetFullURI
+ * returns the full location specifying URI for the LIB.
+ */
+ const STRING& GetFullURI() const
+ {
+ return fullURI;
+ }
+
+ /**
+ * Function GetOptions
+ * returns the options string, which may hold a password or anything else needed to
+ * instantiate the underlying LIB_SOURCE.
+ */
+ const STRING& GetOptions() const
+ {
+ return options;
+ }
+
+ ~ROW()
+ {
+ delete lib;
+ }
+
+ /**
+ * Function Format
+ * serializes this object as utf8 text to an OUTPUTFORMATTER, and tries to
+ * make it look good using multiple lines and indentation.
+ * @param out is an OUTPUTFORMATTER
+ * @param nestLevel is the indentation level to base all lines of the output.
+ * Actual indentation will be 2 spaces for each nestLevel.
+ */
+ void Format( OUTPUTFORMATTER* out, int nestLevel ) const
+ throw( IO_ERROR );
+
+ protected:
+
+ ROW( LIB_TABLE* aOwner ) :
+ owner( aOwner ),
+ lib( 0 )
+ {}
+
+ /**
+ * Function SetLogicalName
+ * changes the logical name of this library, useful for an editor.
+ */
+ void SetLogicalName( const STRING& aLogicalName )
+ {
+ logicalName = aLogicalName;
+ }
+
+ /**
+ * Function SetType
+ * changes the type represented by this record.
+ */
+ void SetType( const STRING& aType )
+ {
+ libType = aType;
+ }
+
+ /**
+ * Function SetFullURI
+ * changes the full URI for the library, useful from a library table editor.
+ */
+ void SetFullURI( const STRING& aFullURI )
+ {
+ fullURI = aFullURI;
+ }
+
+ /**
+ * Function SetOptions
+ * changes the options string for this record, and is useful from
+ * the library table editor.
+ */
+ void SetOptions( const STRING& aOptions )
+ {
+ options = aOptions;
+ }
+
+ private:
+ LIB_TABLE* owner;
+ STRING logicalName;
+ STRING libType;
+ STRING fullURI;
+ STRING options;
+
+ LIB* lib; ///< ownership of the loaded LIB is here
+ };
+
+ /**
+ * Constructor LIB_TABLE
+ * builds a library table by pre-pending this table fragment in front of
+ * @a aFallBackTable. Loading of this table fragment is done by using Parse().
+ *
+ * @param aFallBackTable is another LIB_TABLE which is searched only when
+ * a record is not found in this table. No ownership is taken of aFallBackTable.
+ */
+ LIB_TABLE( LIB_TABLE* aFallBackTable = NULL );
+
+ /**
+ * Function Parse
+ * fills this table fragment from information in the input stream \a aParser, which
+ * is a DSNLEXER customized for the grammar needed to describe instances of this object.
+ * The entire textual element spec is <br>
+ *
+ * <pre>
+ * (lib_table
+ * (lib (logical LOGICAL)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ * (lib (logical LOGICAL)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ * (lib (logical LOGICAL)(type TYPE)(full_uri FULL_URI)(options OPTIONS))
+ * )
+ * </pre>
+ *
+ * When this function is called, the input token stream given by \a aParser
+ * is assumed to be positioned at the '^' in the following example, i.e. just
+ * after the identifying keyword and before the content specifying stuff.
+ * <br>
+ * (lib_table ^ (....) )
+ *
+ * @param aParser is the input token stream of keywords and symbols.
+ */
+ void Parse( SCH_LIB_TABLE_LEXER* aParser ) throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * Function Format
+ * serializes this object as utf8 text to an OUTPUTFORMATTER, and tries to
+ * make it look good using multiple lines and indentation.
+ *
+ * @param out is an OUTPUTFORMATTER
+ * @param nestLevel is the indentation level to base all lines of the output.
+ * Actual indentation will be 2 spaces for each nestLevel.
+ */
+ void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+
+ /**
+ * Function LookupPart
+ * finds and loads a PART, and parses it. As long as the part is
+ * accessible in any LIB_SOURCE, opened or not opened, this function
+ * will find it and load it into its containing LIB, even if that means
+ * having to open a LIB in this table that was not previously opened.
+ *
+ * @param aLogicalPartID holds the partName and may also hold the logicalLibName. If
+ * logicalLibName is empty, then @a aFallBackLib should not be NULL.
+ *
+ * @param aFallBackLib is used only if aLogicalPartID has an empty logicalLibName.
+ * This is for the case when an LPID has no logicalLibName because the LPID is using
+ * a partName from the same LIB as was the referring content.
+ *
+ * @return PART* - this will never be NULL, and no ownership is transfered because
+ * all PARTs live in LIBs. You only get to point to them in some LIB. If the PART
+ * cannot be found, then an exception is thrown.
+ *
+ * @throw IO_ERROR if any problem occurs or if the part cannot be found.
+ */
+ PART* LookupPart( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL ) throw( IO_ERROR );
+
+ /**
+ * Function GetLogicalLibs
+ * returns the logical library names, all of them that are in pertinent to
+ * a lookup done on this LIB_TABLE.
+ */
+ STRINGS GetLogicalLibs();
+
+ //----<read accessors>----------------------------------------------------
+ // the returning of a const STRING* tells if not found, but might be too
+ // promiscuous?
+
+ /**
+ * Function GetLibURI
+ * returns the full library path from a logical library name.
+ * @param aLogicalLibraryName is the short name for the library of interest.
+ * @return const STRING* - or NULL if not found.
+ */
+ const STRING* GetLibURI( const STRING& aLogicalLibraryName ) const
+ {
+ const ROW* row = FindRow( aLogicalLibraryName );
+ return row ? &row->fullURI : 0;
+ }
+
+ /**
+ * Function GetLibType
+ * returns the type of a logical library.
+ * @param aLogicalLibraryName is the short name for the library of interest.
+ * @return const STRING* - or NULL if not found.
+ */
+ const STRING* GetLibType( const STRING& aLogicalLibraryName ) const
+ {
+ const ROW* row = FindRow( aLogicalLibraryName );
+ return row ? &row->libType : 0;
+ }
+
+ /**
+ * Function GetLibOptions
+ * returns the options string for \a aLogicalLibraryName.
+ * @param aLogicalLibraryName is the short name for the library of interest.
+ * @return const STRING* - or NULL if not found.
+ */
+ const STRING* GetLibOptions( const STRING& aLogicalLibraryName ) const
+ {
+ const ROW* row = FindRow( aLogicalLibraryName );
+ return row ? &row->options : 0;
+ }
+
+ //----</read accessors>---------------------------------------------------
+
+#if 1 || defined(DEBUG)
+ /// implement the tests in here so we can honor the priviledge levels of the
+ /// accessors, something difficult to do from int main(int, char**)
+ void Test();
+#endif
+
+protected: // only a table editor can use these
+
+ /**
+ * Function InsertRow
+ * adds aRow if it does not already exist or if doReplace is true. If doReplace
+ * is not true and the key for aRow already exists, the function fails and returns false.
+ * The key for the table is the logicalName, and all in this table must be unique.
+ * @param aRow is the new row to insert, or to forcibly add if doReplace is true.
+ * @param doReplace if true, means insert regardless of whether aRow's key already
+ * exists. If false, then fail if the key already exists.
+ * @return bool - true if the operation succeeded.
+ */
+ bool InsertRow( std::auto_ptr<ROW>& aRow, bool doReplace = false );
+
+ /**
+ * Function FindRow
+ * returns a ROW* if aLogicalName is found in this table or in any chained
+ * fallBack table fragment, else NULL.
+ */
+ ROW* FindRow( const STRING& aLogicalName ) const;
+
+private:
+
+ /**
+ * Function lookupLib
+ * finds or loads a LIB based on @a aLogicalPartID or @a aFallBackLib.
+ * If the LIB is already loaded then it is returned as is, else it is loaded.
+ *
+ * @param aLogicalPartID holds the partName and may also hold the logicalLibName. If
+ * logicalLibName is empty, then @a aFallBackLib should not be NULL.
+ *
+ * @param aFallBackLib is used only if aLogicalPartID has an empty logicalLibName.
+ * This is for the case when an LPID has no logicalLibName because the LPID is using
+ * a partName from the same LIB as was the referring content.
+ *
+ * @return LIB* - this will never be NULL, and no ownership is transfered because
+ * all LIBs live in the LIB_TABLEs. You only get to point to them in some LIB_TABLE.
+ * If the LIB cannot be found, then an exception is thrown.
+ *
+ * @throw IO_ERROR if any problem occurs or if the LIB cannot be found or cannot be loaded.
+ */
+ LIB* lookupLib( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL ) throw( IO_ERROR );
+
+ /**
+ * Function loadLib
+ * loads a LIB using information in @a aRow. Call only if LIB not
+ * already loaded.
+ */
+ void loadLib( ROW* aRow ) throw( IO_ERROR );
+
+ typedef boost::ptr_map<STRING, ROW> ROWS;
+ typedef ROWS::iterator ROWS_ITER;
+ typedef ROWS::const_iterator ROWS_CITER;
+
+ ROWS rows;
+ LIB_TABLE* fallBack;
+};
+
+} // namespace SCH
+
+#endif // SCH_LIB_TABLE_H_
diff --git a/new/sch_lib_table.keywords b/new/sch_lib_table.keywords
new file mode 100644
index 0000000..df56bba
--- /dev/null
+++ b/new/sch_lib_table.keywords
@@ -0,0 +1,6 @@
+lib_table
+logical
+type
+full_uri
+options
+lib
diff --git a/new/sch_lpid.cpp b/new/sch_lpid.cpp
new file mode 100644
index 0000000..e475779
--- /dev/null
+++ b/new/sch_lpid.cpp
@@ -0,0 +1,501 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <cstring>
+#include <wx/wx.h> // _()
+
+#include <sch_lpid.h>
+
+using namespace SCH;
+
+static inline bool isDigit( char c )
+{
+ return c >= '0' && c <= '9';
+}
+
+const char* EndsWithRev( const char* start, const char* tail, char separator )
+{
+ bool sawDigit = false;
+
+ while( tail > start && isDigit( *--tail ) )
+ {
+ sawDigit = true;
+ }
+
+ // if sawDigit, tail points to the 'v' here.
+
+ if( sawDigit && tail-3 >= start )
+ {
+ tail -= 3;
+
+ if( tail[0]==separator && tail[1]=='r' && tail[2]=='e' && tail[3]=='v' )
+ {
+ return tail+1; // omit separator, return "revN[N..]"
+ }
+ }
+
+ return 0;
+}
+
+int RevCmp( const char* s1, const char* s2 )
+{
+ int r = strncmp( s1, s2, 3 );
+
+ if( r || strlen(s1)<4 || strlen(s2)<4 )
+ {
+ return r;
+ }
+
+ int rnum1 = atoi( s1+3 );
+ int rnum2 = atoi( s2+3 );
+
+ return -(rnum1 - rnum2); // swap the sign, higher revs first
+}
+
+//----<Policy and field test functions>-------------------------------------
+
+// These all return -1 on success, or >= 0 if there is an error at a
+// particular character offset into their respective arguments. If >=0,
+// then that return value gives the character offset of the error.
+
+static inline int okLogical( const STRING& aField )
+{
+ // std::string::npos is largest positive number, casting to int makes it -1.
+ // Returning that means success.
+ return int( aField.find_first_of( ":/" ) );
+}
+
+static inline int okBase( const STRING& aField )
+{
+ int offset = int( aField.find_first_of( ":/" ) );
+ if( offset != -1 )
+ return offset;
+
+ // cannot be empty
+ if( !aField.size() )
+ return 0;
+
+ return offset; // ie. -1
+}
+
+static inline int okCategory( const STRING& aField )
+{
+ return int( aField.find_first_of( ":/" ) );
+}
+
+static int okRevision( const STRING& aField )
+{
+ char rev[32]; // C string for speed
+
+ if( aField.size() >= 4 )
+ {
+ strcpy( rev, "x/" );
+ strcat( rev, aField.c_str() );
+
+ if( EndsWithRev( rev, rev + strlen(rev) ) == rev+2 )
+ return -1; // success
+ }
+
+ return 0; // first character position "is in error", is best we can do.
+}
+
+//----</Policy and field test functions>-------------------------------------
+
+
+void LPID::clear()
+{
+ logical.clear();
+ category.clear();
+ baseName.clear();
+ partName.clear();
+ revision.clear();
+}
+
+
+int LPID::Parse( const STRING& aLPID )
+{
+ clear();
+
+ const char* rev = EndsWithRev( aLPID );
+ size_t revNdx;
+ size_t partNdx;
+ size_t baseNdx;
+ int offset;
+
+ //=====<revision>=========================================
+ if( rev )
+ {
+ revNdx = rev - aLPID.c_str();
+
+ // no need to check revision, EndsWithRev did that.
+ revision = aLPID.substr( revNdx );
+ --revNdx; // back up to omit the '/' which preceeds the rev
+ }
+ else
+ revNdx = aLPID.size();
+
+ //=====<logical>==========================================
+ if( ( partNdx = aLPID.find( ':' ) ) != aLPID.npos )
+ {
+ offset = SetLogicalLib( aLPID.substr( 0, partNdx ) );
+ if( offset > -1 )
+ {
+ return offset;
+ }
+ ++partNdx; // skip ':'
+ }
+ else
+ partNdx = 0;
+
+ //=====<rawName && category>==============================
+ // "length limited" search:
+ const char* base = (const char*) memchr( aLPID.c_str() + partNdx, '/', revNdx - partNdx );
+
+ if( base )
+ {
+ baseNdx = base - aLPID.c_str();
+ offset = SetCategory( aLPID.substr( partNdx, baseNdx - partNdx ) );
+ if( offset > -1 )
+ {
+ return offset + partNdx;
+ }
+ ++baseNdx; // skip '/'
+ }
+ else
+ {
+ baseNdx = partNdx;
+ }
+
+ //=====<baseName>==========================================
+ offset = SetBaseName( aLPID.substr( baseNdx, revNdx - baseNdx ) );
+ if( offset > -1 )
+ {
+ return offset + baseNdx;
+ }
+
+ return -1;
+}
+
+
+LPID::LPID( const STRING& aLPID ) throw( PARSE_ERROR )
+{
+ int offset = Parse( aLPID );
+
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR(
+ _( "Illegal character found in LPID string" ),
+ wxString::FromUTF8( aLPID.c_str() ),
+ aLPID.c_str(),
+ 0,
+ offset
+ );
+ }
+}
+
+
+int LPID::SetLogicalLib( const STRING& aLogical )
+{
+ int offset = okLogical( aLogical );
+ if( offset == -1 )
+ {
+ logical = aLogical;
+ }
+ return offset;
+}
+
+
+int LPID::SetCategory( const STRING& aCategory )
+{
+ int offset = okCategory( aCategory );
+ if( offset == -1 )
+ {
+ category = aCategory;
+
+ // set the partName too
+ if( category.size() )
+ {
+ partName = category;
+ partName += '/';
+ partName += baseName;
+ }
+ else
+ partName = baseName;
+
+ }
+ return offset;
+}
+
+
+int LPID::SetBaseName( const STRING& aBaseName )
+{
+ int offset = okBase( aBaseName );
+ if( offset == -1 )
+ {
+ baseName = aBaseName;
+
+ // set the partName too
+ if( category.size() )
+ {
+ partName = category;
+ partName += '/';
+ partName += baseName;
+ }
+ else
+ partName = baseName;
+ }
+ return offset;
+}
+
+
+int LPID::SetPartName( const STRING& aPartName )
+{
+ STRING category;
+ STRING base;
+ int offset;
+ int separation = int( aPartName.find_first_of( "/" ) );
+
+ if( separation != -1 )
+ {
+ category = aPartName.substr( 0, separation );
+ base = aPartName.substr( separation+1 );
+ }
+ else
+ {
+ // leave category empty
+ base = aPartName;
+ }
+
+ if( (offset = SetCategory( category )) != -1 )
+ return offset;
+
+ if( (offset = SetBaseName( base )) != -1 )
+ {
+ return offset + separation + 1;
+ }
+
+ return -1;
+}
+
+
+int LPID::SetRevision( const STRING& aRevision )
+{
+ int offset = okRevision( aRevision );
+ if( offset == -1 )
+ {
+ revision = aRevision;
+ }
+ return offset;
+}
+
+
+STRING LPID::Format() const
+{
+ STRING ret;
+
+ if( logical.size() )
+ {
+ ret += logical;
+ ret += ':';
+ }
+
+ if( category.size() )
+ {
+ ret += category;
+ ret += '/';
+ }
+
+ ret += baseName;
+
+ if( revision.size() )
+ {
+ ret += '/';
+ ret += revision;
+ }
+
+ return ret;
+}
+
+
+STRING LPID::GetPartNameAndRev() const
+{
+ STRING ret;
+
+ if( category.size() )
+ {
+ ret += category;
+ ret += '/';
+ }
+
+ ret += baseName;
+
+ if( revision.size() )
+ {
+ ret += '/';
+ ret += revision;
+ }
+
+ return ret;
+}
+
+
+STRING LPID::Format( const STRING& aLogicalLib, const STRING& aPartName, const STRING& aRevision )
+ throw( PARSE_ERROR )
+{
+ STRING ret;
+ int offset;
+
+ if( aLogicalLib.size() )
+ {
+ offset = okLogical( aLogicalLib );
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR(
+ _( "Illegal character found in logical lib name" ),
+ wxString::FromUTF8( aLogicalLib.c_str() ),
+ aLogicalLib.c_str(),
+ 0,
+ offset
+ );
+ }
+ ret += aLogicalLib;
+ ret += ':';
+ }
+
+ {
+ STRING category;
+ STRING base;
+
+ int separation = int( aPartName.find_first_of( "/" ) );
+
+ if( separation != -1 )
+ {
+ category = aPartName.substr( 0, separation );
+ base = aPartName.substr( separation+1 );
+ }
+ else
+ {
+ // leave category empty
+ base = aPartName;
+ }
+
+ if( (offset = okCategory( category )) != -1 )
+ {
+ THROW_PARSE_ERROR(
+ _( "Illegal character found in category" ),
+ wxString::FromUTF8( aRevision.c_str() ),
+ aRevision.c_str(),
+ 0,
+ offset
+ );
+ }
+
+ if( (offset = okBase( base )) != -1 )
+ {
+ THROW_PARSE_ERROR(
+ _( "Illegal character found in base name" ),
+ wxString::FromUTF8( aRevision.c_str() ),
+ aRevision.c_str(),
+ 0,
+ offset + separation + 1
+ );
+ }
+
+ if( category.size() )
+ {
+ ret += category;
+ ret += '/';
+ }
+
+ ret += base;
+ }
+
+ if( aRevision.size() )
+ {
+ offset = okRevision( aRevision );
+ if( offset != -1 )
+ {
+ THROW_PARSE_ERROR(
+ _( "Illegal character found in revision" ),
+ wxString::FromUTF8( aRevision.c_str() ),
+ aRevision.c_str(),
+ 0,
+ offset
+ );
+ }
+
+ ret += '/';
+ ret += aRevision;
+ }
+
+ return ret;
+}
+
+
+#if 0 && defined(DEBUG)
+
+// build this with Debug CMAKE_BUILD_TYPE
+
+void LPID::Test()
+{
+ static const char* lpids[] = {
+ "me:passives/R/rev0",
+ "passives/R/rev2",
+ ":passives/R/rev3",
+ "C/rev22",
+ "passives/C22",
+ "R",
+ "me:R",
+ // most difficult:
+ "me:/R/rev0",
+ "me:R/rev0",
+ };
+
+ for( unsigned i=0; i<sizeof(lpids)/sizeof(lpids[0]); ++i )
+ {
+ // test some round tripping
+
+ LPID lpid( lpids[i] ); // parse
+
+ // format
+ printf( "input:'%s' full:'%s' base:'%s' partName:'%s' cat:'%s' rev:'%s'\n",
+ lpids[i],
+ lpid.Format().c_str(),
+ lpid.GetBaseName().c_str(),
+ lpid.GetPartName().c_str(),
+ lpid.GetCategory().c_str(),
+ lpid.GetRevision().c_str()
+ );
+ }
+}
+
+
+int main( int argc, char** argv )
+{
+ LPID::Test();
+
+ return 0;
+}
+
+#endif
diff --git a/new/sch_lpid.h b/new/sch_lpid.h
new file mode 100644
index 0000000..97fdf77
--- /dev/null
+++ b/new/sch_lpid.h
@@ -0,0 +1,245 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SCH_LPID_H_
+#define SCH_LPID_H_
+
+#include <utf8.h>
+#include <richio.h>
+
+namespace SCH {
+
+
+/**
+ * Class LPID
+ * (aka GUID) is a Logical Part ID and consists of various portions much like a URI.
+ * It is a container for the separated portions of a logical part id STRING so they
+ * can be accessed individually. The various portions of an LPID are:
+ * logicalLibraryName, category, baseName, and revision. Only the baseName is
+ * mandatory. There is another construct called "partName" which consists of
+ * [category/]baseName. That is the category followed by a slash, but only if
+ * the category is not empty.
+ * <p>
+ * partName = [category/]baseName
+ * <p>
+ * Example LPID string:
+ * "kicad:passives/R/rev6".
+ * <p>
+ * <ul>
+ * <li> "kicad" is the logical library name.
+ * <li> "passives" is the category.
+ * <li> "passives/R" is the partname.
+ * <li> "rev6" is the revision, which is optional. If missing then its
+ * / delimiter should also not be present. A revision must begin with
+ * "rev" and be followed by at least one or more decimal digits.
+ * </ul>
+ * @author Dick Hollenbeck
+ */
+class LPID // aka GUID
+{
+public:
+
+ LPID() {}
+
+ /**
+ * Constructor LPID
+ * takes aLPID string and parses it. A typical LPID string uses a logical
+ * library name followed by a part name.
+ * e.g.: "kicad:passives/R/rev2", or
+ * e.g.: "mylib:R33"
+ */
+ LPID( const STRING& aLPID ) throw( PARSE_ERROR );
+
+ /**
+ * Function Parse
+ * [re-]stuffs this LPID with the information from @a aLPID.
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the
+ * character offset into aLPID at which an error was detected.
+ */
+ int Parse( const STRING& aLPID );
+
+ /**
+ * Function GetLogicalLib
+ * returns the logical library portion of a LPID. There is not Set accessor
+ * for this portion since it comes from the library table and is considered
+ * read only here.
+ */
+ const STRING& GetLogicalLib() const
+ {
+ return logical;
+ }
+
+ /**
+ * Function SetCategory
+ * overrides the logical lib name portion of the LPID to @a aLogical, and can be empty.
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the
+ * character offset into the parameter at which an error was detected, usually
+ * because it contained '/' or ':'.
+ */
+ int SetLogicalLib( const STRING& aLogical );
+
+ /**
+ * Function GetCategory
+ * returns the category of this part id, "passives" in the example at the
+ * top of the class description.
+ */
+ const STRING& GetCategory() const
+ {
+ return category;
+ }
+
+ /**
+ * Function SetCategory
+ * overrides the category portion of the LPID to @a aCategory and is typically
+ * either the empty string or a single word like "passives".
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the
+ * character offset into the parameter at which an error was detected, usually
+ * because it contained '/' or ':'.
+ */
+ int SetCategory( const STRING& aCategory );
+
+ /**
+ * Function GetBaseName
+ * returns the part name without the category.
+ */
+ const STRING& GetBaseName() const
+ {
+ return baseName;
+ }
+
+ /**
+ * Function SetBaseName
+ * overrides the base name portion of the LPID to @a aBaseName
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the
+ * character offset into the parameter at which an error was detected, usually
+ * because it contained '/' or ':', or is blank.
+ */
+ int SetBaseName( const STRING& aBaseName );
+
+ /**
+ * Function GetPartName
+ * returns the part name, i.e. category/baseName without revision.
+ */
+ const STRING& GetPartName() const
+ {
+ return partName;
+ }
+
+ /**
+ * Function GetPartNameAndRev
+ * returns the part name with revision if any, i.e. [category/]baseName[/revN..]
+ */
+ STRING GetPartNameAndRev() const;
+
+ /**
+ * Function SetPartName
+ * overrides the part name portion of the LPID to @a aPartName
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the
+ * character offset into the parameter at which an error was detected, usually
+ * because it contained more than one '/', or one or more ':', or is blank.
+ * A single '/' is allowed, since that is used to separate the category from the
+ * base name.
+ */
+ int SetPartName( const STRING& aPartName );
+
+ /**
+ * Function GetRevision
+ * returns the revision portion of the LPID.
+ */
+ const STRING& GetRevision() const
+ {
+ return revision;
+ }
+
+ /**
+ * Function SetRevision
+ * overrides the revision portion of the LPID to @a aRevision and must
+ * be in the form "rev<num>" where "<num>" is "1", "2", etc.
+ * @return int - minus 1 (i.e. -1) means success, >= 0 indicates the
+ * character offset into the parameter at which an error was detected,
+ * because it did not look like "rev23"
+ */
+ int SetRevision( const STRING& aRevision );
+
+ /**
+ * Function Format
+ * returns the full text of the LPID.
+ */
+ STRING Format() const;
+
+ /**
+ * Function Format
+ * returns a STRING in the proper format as an LPID for a combination of
+ * aLogicalLib, aPartName, and aRevision.
+ * @throw PARSE_ERROR if any of the pieces are illegal.
+ */
+ static STRING Format( const STRING& aLogicalLib, const STRING& aPartName, const STRING& aRevision="" )
+ throw( PARSE_ERROR );
+
+ void clear();
+
+#if defined(DEBUG)
+ static void Test();
+#endif
+
+protected:
+ STRING logical; ///< logical lib name or empty
+ STRING category; ///< or empty
+ STRING baseName; ///< without category
+ STRING revision; ///< "revN[N..]" or empty
+ STRING partName; ///< cannot be set directory, set via SetBaseName() & SetCategory()
+};
+
+} // namespace SCH
+
+/**
+ * Function EndsWithRev
+ * returns a pointer to the final string segment: "revN[N..]" or NULL if none.
+ * @param start is the beginning of string segment to test, the partname or
+ * any middle portion of it.
+ * @param tail is a pointer to the terminating nul, or one past inclusive end of
+ * segment, i.e. the string segment of interest is [start,tail)
+ * @param separator is the separating byte, expected: '.' or '/', depending on context.
+ */
+const char* EndsWithRev( const char* start, const char* tail, char separator = '/' );
+
+static inline const char* EndsWithRev( const STRING& aPartName, char separator = '/' )
+{
+ return EndsWithRev( aPartName.c_str(), aPartName.c_str()+aPartName.size(), separator );
+}
+
+
+/**
+ * Function RevCmp
+ * compares two rev strings in a way like strcmp() except that the highest numbered
+ * revision is considered first in the sort order. The function probably won't work
+ * unless you give it two rev strings.
+ * @param s1 is a rev string like "rev10"
+ * @param s2 is a rev string like "rev1".
+ * @return int - either negative, zero, or positive depending on whether the revision
+ * is greater, equal, or less on the left hand side.
+ */
+int RevCmp( const char* s1, const char* s2 );
+
+#endif // SCH_LPID_H_
diff --git a/new/sch_part.cpp b/new/sch_part.cpp
new file mode 100644
index 0000000..730ded9
--- /dev/null
+++ b/new/sch_part.cpp
@@ -0,0 +1,675 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/wx.h> // _()
+
+#include <sch_part.h>
+#include <sch_sweet_parser.h>
+#include <sch_lpid.h>
+#include <sch_lib_table.h>
+#include <macros.h>
+
+
+
+/**
+ * Function formatAt
+ * outputs a formatted "(at X Y [ANGLE])" s-expression
+ */
+ static void formatAt( OUTPUTFORMATTER* out, const SCH::POINT& aPos, ANGLE aAngle, int indent=0 )
+ throw( IO_ERROR )
+{
+ // if( aPos.x || aPos.y || aAngle )
+ {
+ out->Print( indent, aAngle!=0.0 ? "(at %.6g %.6g %.6g)" : "(at %.6g %.6g)",
+ InternalToLogical( aPos.x ), InternalToLogical( aPos.y ),
+ double( aAngle ) );
+ }
+}
+
+static void formatStroke( OUTPUTFORMATTER* out, STROKE aStroke, int indent=0 )
+ throw( IO_ERROR )
+{
+ if( aStroke == STROKE_DEFAULT )
+ out->Print( indent, "(stroke %.6g)", InternalToWidth( aStroke ) );
+}
+
+
+using namespace SCH;
+
+
+PART::PART( LIB* aOwner, const STRING& aPartNameAndRev ) :
+ owner( aOwner ),
+ contains( 0 ),
+ partNameAndRev( aPartNameAndRev ),
+ extends( 0 ),
+ base( 0 )
+{
+ // Our goal is to have class LIB only instantiate what is needed, so print here
+ // what it is doing. It is the only class where PART can be instantiated.
+ D(printf("PART::PART(%s)\n", aPartNameAndRev.c_str() );)
+
+ for( int i=REFERENCE; i<END; ++i )
+ mandatory[i] = 0;
+}
+
+
+void PART::clear()
+{
+ if( extends )
+ {
+ delete extends;
+ extends = 0;
+ }
+
+ // clear the mandatory fields
+ for( int ndx = REFERENCE; ndx < END; ++ndx )
+ {
+ delete mandatory[ndx];
+ mandatory[ndx] = 0;
+ }
+
+ // delete properties I own, since their container will not destroy them:
+ for( PROPERTIES::iterator it = properties.begin(); it != properties.end(); ++it )
+ delete *it;
+ properties.clear();
+
+ // delete graphics I own, since their container will not destroy them:
+ for( GRAPHICS::iterator it = graphics.begin(); it != graphics.end(); ++it )
+ delete *it;
+ graphics.clear();
+
+ // delete PINs I own, since their container will not destroy them.
+ for( PINS::iterator it = pins.begin(); it != pins.end(); ++it )
+ delete *it;
+ pins.clear();
+
+ alternates.clear();
+
+ keywords.clear();
+
+ pin_merges.clear();
+
+ contains = 0;
+}
+
+
+PROPERTY* PART::FieldLookup( PROP_ID aPropertyId )
+{
+ wxASSERT( unsigned(aPropertyId) < unsigned(END) );
+
+ PROPERTY* p = mandatory[aPropertyId];
+
+ if( !p )
+ {
+ switch( aPropertyId )
+ {
+ case REFERENCE:
+ p = new PROPERTY( this, wxT( "reference" ) );
+ p->text = wxT( "U?" );
+ break;
+
+ case VALUE:
+ p = new PROPERTY( this, wxT( "value" ) );
+ break;
+
+ case FOOTPRINT:
+ p = new PROPERTY( this, wxT( "footprint" ) );
+ break;
+
+ case DATASHEET:
+ p = new PROPERTY( this, wxT( "datasheet" ) );
+ break;
+
+ case MODEL:
+ p = new PROPERTY( this, wxT( "model" ) );
+ break;
+
+ default:
+ ;
+ }
+
+ mandatory[aPropertyId] = p;
+ }
+
+ return p;
+}
+
+
+PROPERTY& PROPERTY::operator = ( const PROPERTY& r )
+{
+ *(BASE_GRAPHIC*) this = (BASE_GRAPHIC&) r;
+
+ name = r.name;
+ text = r.text;
+
+ delete effects;
+
+ if( r.effects )
+ effects = new TEXT_EFFECTS( *r.effects );
+ else
+ effects = 0;
+
+ return *this;
+}
+
+
+PINS::iterator PART::pinFindByPad( const wxString& aPad )
+{
+ PINS::iterator it;
+
+ for( it = pins.begin(); it != pins.end(); ++it )
+ {
+ if( (*it)->pad.text == aPad )
+ break;
+ }
+
+ return it;
+}
+
+
+void PART::PinsFindBySignal( PIN_LIST* aResults, const wxString& aSignal )
+{
+ for( PINS::const_iterator it = pins.begin(); it != pins.end(); ++it )
+ {
+ if( (*it)->signal.text == aSignal )
+ {
+ aResults->push_back( *it );
+ }
+ }
+}
+
+
+bool PART::PinDelete( const wxString& aPad )
+{
+ PINS::iterator it = pinFindByPad( aPad );
+ if( it != pins.end() )
+ {
+ delete *it;
+ pins.erase( it );
+ return true;
+ }
+
+ // there is only one reason this can fail: not found:
+ return false;
+}
+
+
+PART::~PART()
+{
+ clear();
+}
+
+
+void PART::setExtends( LPID* aLPID )
+{
+ delete extends;
+ extends = aLPID;
+}
+
+
+void PART::inherit( const PART& r )
+{
+ // Inherit can be called at any time, even from an interactive text
+ // editor, so cannot assume 'this' object is new. Clear it.
+ clear();
+
+ // copy anything inherited, such as drawables, properties, pins, etc. here
+ contains = r.contains;
+
+ base = &r;
+
+ anchor = r.anchor;
+
+ for( int i=REFERENCE; i<END; ++i )
+ {
+ if( r.mandatory[i] )
+ mandatory[i] = (PROPERTY*) r.mandatory[i]->Clone( this );
+ }
+
+ for( PROPERTIES::const_iterator it = r.properties.begin(); it != r.properties.end(); ++it )
+ properties.push_back( (PROPERTY*) (*it)->Clone( this ) );
+
+ for( GRAPHICS::const_iterator it = r.graphics.begin(); it != r.graphics.end(); ++it )
+ graphics.push_back( (*it)->Clone( this ) );
+
+ for( PINS::const_iterator it = r.pins.begin(); it != r.pins.end(); ++it )
+ pins.push_back( (PIN*) (*it)->Clone( this ) );
+
+ /* not sure about this concept yet:
+ for( PART_REFS::const_iterator it = r.alternates.begin(); it != r.alternates.end(); ++it )
+ alternates.push_back( *it );
+ */
+
+ for( KEYWORDS::const_iterator it = r.keywords.begin(); it != r.keywords.end(); ++it )
+ keywords.insert( *it );
+
+ for( MERGE_SETS::const_iterator it = r.pin_merges.begin(); it != r.pin_merges.end(); ++it )
+ {
+ pin_merges[ *it->first ] = * new MERGE_SET( *it->second );
+ }
+}
+
+
+PART& PART::operator=( const PART& r )
+{
+ // maintain in concert with inherit(), which is a partial assignment operator.
+ inherit( r );
+
+ owner = r.owner;
+ partNameAndRev = r.partNameAndRev;
+ body = r.body;
+ base = r.base;
+
+ setExtends( r.extends ? new LPID( *r.extends ) : 0 );
+
+ return *this;
+}
+
+
+void PART::Parse( SWEET_PARSER* aParser , LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_ERROR )
+{
+ aParser->Parse( this, aTable );
+}
+
+
+bool PART::PropDelete( const wxString& aPropertyName )
+{
+ PROPERTIES::iterator it = propertyFind( aPropertyName );
+ if( it != properties.end() )
+ {
+ delete *it;
+ properties.erase( it );
+ return true;
+ }
+
+ return false;
+}
+
+
+PROPERTIES::iterator PART::propertyFind( const wxString& aPropertyName )
+{
+ PROPERTIES::iterator it;
+ for( it = properties.begin(); it!=properties.end(); ++it )
+ if( (*it)->name == aPropertyName )
+ break;
+ return it;
+}
+
+
+void PART::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ out->Print( indent, "(part %s", partNameAndRev.c_str() );
+
+ if( extends )
+ out->Print( 0, " inherits %s", extends->Format().c_str() );
+
+ out->Print( 0, "\n" );
+
+ for( int i = REFERENCE; i < END; ++i )
+ {
+ PROPERTY* prop = Field( PROP_ID( i ) );
+ if( prop )
+ prop->Format( out, indent+1, ctl );
+ }
+
+ for( PROPERTIES::const_iterator it = properties.begin(); it != properties.end(); ++it )
+ {
+ (*it)->Format( out, indent+1, ctl );
+ }
+
+ if( anchor.x || anchor.y )
+ {
+ out->Print( indent+1, "(anchor (at %.6g %.6g))\n",
+ InternalToLogical( anchor.x ),
+ InternalToLogical( anchor.y ) );
+ }
+
+ if( keywords.size() )
+ {
+ out->Print( indent+1, "(keywords" );
+ for( KEYWORDS::iterator it = keywords.begin(); it != keywords.end(); ++it )
+ out->Print( 0, " %s", out->Quotew( *it ).c_str() );
+ out->Print( 0, ")\n" );
+ }
+
+ for( GRAPHICS::const_iterator it = graphics.begin(); it != graphics.end(); ++it )
+ {
+ (*it)->Format( out, indent+1, ctl );
+ }
+
+ for( PINS::const_iterator it = pins.begin(); it != pins.end(); ++it )
+ {
+ (*it)->Format( out, indent+1, ctl );
+ }
+
+ if( alternates.size() )
+ {
+ out->Print( indent+1, "(alternates" );
+ for( PART_REFS::const_iterator it = alternates.begin(); it!=alternates.end(); ++it )
+ out->Print( 0, " %s", out->Quotes( it->Format() ).c_str() );
+ out->Print( 0, ")\n" );
+ }
+
+ for( MERGE_SETS::const_iterator mit = pin_merges.begin(); mit != pin_merges.end(); ++mit )
+ {
+ out->Print( indent+1, "(pin_merge %s (pads", out->Quotew( mit->first ).c_str() );
+
+ const MERGE_SET& mset = *mit->second;
+ for( MERGE_SET::const_iterator pit = mset.begin(); pit != mset.end(); ++pit )
+ {
+ out->Print( 0, " %s", out->Quotew( *pit ).c_str() );
+ }
+ out->Print( 0, "))\n" );
+ }
+
+ out->Print( indent, ")\n" );
+}
+
+
+//-----< PART objects >------------------------------------------------------
+
+
+void PROPERTY::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ wxASSERT( owner ); // all PROPERTYs should have an owner.
+
+ int i;
+ for( i = PART::REFERENCE; i < PART::END; ++i )
+ {
+ if( owner->Field( PART::PROP_ID(i) ) == this )
+ break;
+ }
+
+ if( i < PART::END ) // is a field not a property
+ out->Print( indent, "(%s", TO_UTF8( name ) );
+ else
+ out->Print( indent, "(property %s", out->Quotew( name ).c_str() );
+
+ if( effects )
+ {
+ out->Print( 0, " %s\n", out->Quotew( text ).c_str() );
+ effects->Format( out, indent+1, ctl | CTL_OMIT_NL );
+ out->Print( 0, ")\n" );
+ }
+ else
+ {
+ out->Print( 0, " %s)\n", out->Quotew( text ).c_str() );
+ }
+}
+
+
+TEXT_EFFECTS* PROPERTY::EffectsLookup()
+{
+ if( !effects )
+ {
+ effects = new TEXT_EFFECTS();
+ }
+
+ return effects;
+}
+
+
+void TEXT_EFFECTS::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ if( propName.IsEmpty() )
+ out->Print( indent, "(effects " );
+ else
+ out->Print( indent, "(effects %s ", out->Quotew( propName ).c_str() );
+
+ formatAt( out, pos, angle );
+
+ font.Format( out, 0, ctl | CTL_OMIT_NL );
+
+ out->Print( 0, "(visible %s))%s",
+ isVisible ? "yes" : "no",
+ ctl & CTL_OMIT_NL ? "" : "\n" );
+}
+
+
+void FONT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ if( italic || bold || !name.IsEmpty() || size.height != FONTZ_DEFAULT || size.width != FONTZ_DEFAULT )
+ {
+ if( name.IsEmpty() )
+ out->Print( indent, "(font " );
+ else
+ out->Print( indent, "(font %s ", out->Quotew( name ).c_str() );
+
+ out->Print( 0, "(size %.6g %.6g)",
+ InternalToFontz( size.height ),
+ InternalToFontz( size.width ) );
+
+ if( italic )
+ out->Print( 0, " italic" );
+
+ if( bold )
+ out->Print( 0, " bold" );
+
+ out->Print( 0, ")%s", (ctl & CTL_OMIT_NL) ? "" : "\n" );
+ }
+}
+
+
+void PIN::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ bool hasSignal = !signal.text.IsEmpty();
+ bool hasPad = !pad.text.IsEmpty();
+
+ out->Print( indent, "(pin" );
+
+ if( connectionType != PIN_CONN_DEFAULT )
+ out->Print( 0, " %s", ShowType() );
+
+ if( shape != PIN_SHAPE_DEFAULT )
+ out->Print( 0, " %s", ShowShape() );
+
+ out->Print( 0, " " );
+
+ if( pos.x || pos.y || angle )
+ formatAt( out, pos, angle );
+
+ if( length != PIN_LEN_DEFAULT )
+ out->Print( 0, "(length %.6g)", InternalToLogical( length ) );
+
+ if( !isVisible )
+ out->Print( 0, "(visible %s)", isVisible ? "yes" : "no" );
+
+ if( hasSignal )
+ signal.Format( out, "signal", 0, CTL_OMIT_NL );
+
+ if( hasPad )
+ pad.Format( out, "pad", 0, CTL_OMIT_NL );
+
+ out->Print( 0, ")\n" );
+}
+
+
+PIN::~PIN()
+{
+}
+
+
+void PINTEXT::Format( OUTPUTFORMATTER* out, const char* aElement, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ out->Print( indent, "(%s %s", aElement, out->Quotew( text ).c_str() );
+
+ font.Format( out, 0, CTL_OMIT_NL );
+
+ if( !isVisible )
+ out->Print( 0, " (visible %s)", isVisible ? "yes" : "no" );
+
+ out->Print( 0, ")%s", ctl & CTL_OMIT_NL ? "" : "\n" );
+}
+
+
+void POLY_LINE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ out->Print( indent, "(%s ", pts.size() == 2 ? "line" : "polyline" );
+ formatContents( out, indent, ctl );
+}
+
+
+void POLY_LINE::formatContents( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ formatStroke( out, stroke );
+
+ if( fillType != PR::T_none )
+ out->Print( 0, "(fill %s)", ShowFill( fillType ) );
+
+ out->Print( 0, "\n" );
+
+ if( pts.size() )
+ {
+ const int maxLength = 75;
+ int len = 10;
+
+ len += out->Print( indent+1, "(pts " );
+
+ for( POINTS::const_iterator it = pts.begin(); it != pts.end(); ++it )
+ {
+ if( len > maxLength )
+ {
+ len = 10;
+ out->Print( 0, "\n" );
+ out->Print( indent+2, "(xy %.6g %.6g)",
+ InternalToLogical( it->x ), InternalToLogical( it->y ) );
+ }
+ else
+ out->Print( 0, "(xy %.6g %.6g)",
+ InternalToLogical( it->x ), InternalToLogical( it->y ) );
+ }
+
+ out->Print( 0, ")" );
+ }
+
+ out->Print( 0, ")\n" );
+}
+
+
+void BEZIER::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ out->Print( indent, "(bezier " );
+ formatContents( out, indent, ctl ); // inherited from POLY_LINE
+}
+
+
+void RECTANGLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ // (rectangle (start X Y) (end X Y) [(stroke WIDTH)] (fill FILL_TYPE))
+
+ out->Print( indent, "(rectangle (start %.6g %.6g)(end %.6g %.6g)",
+ InternalToLogical( start.x ), InternalToLogical( start.y ),
+ InternalToLogical( end.x ), InternalToLogical( end.y )
+ );
+
+ formatStroke( out, stroke );
+
+ if( fillType != PR::T_none )
+ out->Print( 0, "(fill %s)", ShowFill( fillType ) );
+
+ out->Print( 0, ")\n" );
+}
+
+
+void CIRCLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ /*
+ (circle (center X Y)(radius LENGTH) [(stroke WIDTH)] (fill FILL_TYPE))
+ */
+
+ out->Print( indent, "(circle (center %.6g %.6g)(radius %.6g)",
+ InternalToLogical( center.x ), InternalToLogical( center.y ),
+ InternalToLogical( radius) );
+
+ formatStroke( out, stroke );
+
+ if( fillType != PR::T_none )
+ out->Print( 0, "(fill %s)", ShowFill( fillType ) );
+
+ out->Print( 0, ")\n" );
+}
+
+
+void ARC::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ /*
+ (arc (pos X Y)(radius RADIUS)(start X Y)(end X Y) [(stroke WIDTH)] (fill FILL_TYPE))
+ */
+
+ out->Print( indent, "(arc (pos %.6g %.6g)(radius %.6g)(start %.6g %.6g)(end %.6g %.6g)",
+ InternalToLogical( pos.x ), InternalToLogical( pos.y ),
+ InternalToLogical( radius),
+ InternalToLogical( start.x ), InternalToLogical( start.y ),
+ InternalToLogical( end.x ), InternalToLogical( end.y )
+ );
+
+ formatStroke( out, stroke );
+
+ if( fillType != PR::T_none )
+ out->Print( 0, "(fill %s)", ShowFill( fillType ) );
+
+ out->Print( 0, ")\n" );
+}
+
+
+void GR_TEXT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
+ throw( IO_ERROR )
+{
+ /*
+ (text "This is the text that gets drawn."
+ (at X Y [ANGLE])(justify HORIZONTAL_JUSTIFY VERTICAL_JUSTIFY)(visible YES)(fill FILL_TYPE)
+ (font [FONT] (size HEIGHT WIDTH) [italic] [bold])
+ )
+ */
+
+ out->Print( indent, "(text %s\n", out->Quotew( text ).c_str() );
+
+ formatAt( out, pos, angle, indent+1 );
+
+ if( hjustify != PR::T_left || vjustify != PR::T_bottom )
+ out->Print( 0, "(justify %s %s)",
+ ShowJustify( hjustify ), ShowJustify( vjustify ) );
+
+ if( !isVisible )
+ out->Print( 0, "(visible %s)", isVisible ? "yes" : "no" );
+
+ if( fillType != PR::T_filled )
+ out->Print( 0, "(fill %s)", ShowFill( fillType ) );
+
+ font.Format( out, 0, CTL_OMIT_NL );
+ out->Print( 0, ")\n" );
+}
+
diff --git a/new/sch_part.h b/new/sch_part.h
new file mode 100644
index 0000000..2340ff4
--- /dev/null
+++ b/new/sch_part.h
@@ -0,0 +1,908 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef SCH_PART_H_
+#define SCH_PART_H_
+
+#include <sch_lib.h>
+#include <sch_lib_table.h>
+#include <sch_lpid.h>
+//#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
+
+
+#define INTERNAL_PER_LOGICAL 10000 ///< no. internal units per logical unit
+
+
+/**
+ * Function InternalToLogical
+ * converts an internal coordinate to a logical coordinate. Logical coordinates
+ * are defined as the standard distance between pins being equal to one.
+ * Internal coordinates are currently INTERNAL_PER_LOGICAL times that.
+ */
+static inline double InternalToLogical( int aCoord )
+{
+ return double( aCoord ) / INTERNAL_PER_LOGICAL;
+}
+
+
+/**
+ * Function LogicalToInternal
+ * converts a logical coordinate to an internal coordinate. Logical coordinates
+ * are defined as the standard distance between pins being equal to one.
+ * Internal coordinates are currently INTERNAL_PER_LOGICAL times that.
+ */
+static inline int LogicalToInternal( double aCoord )
+{
+ return int( aCoord * INTERNAL_PER_LOGICAL );
+}
+
+static inline int WidthToInternal( double aWidth )
+{
+ // sweet line widths are a "percent of a logical unit"
+ return LogicalToInternal( aWidth ) / 100;
+}
+
+static inline double InternalToWidth( int aWidth )
+{
+ // sweet line widths are a "percent of a logical unit"
+ return InternalToLogical( aWidth ) * 100;
+}
+
+static inline int FontzToInternal( double aFontSize )
+{
+ // sweet font sizes are deci-pins
+ return LogicalToInternal( aFontSize ) / 10;
+}
+
+static inline double InternalToFontz( int aFontSize )
+{
+ // sweet font sizes are deci-pins
+ return InternalToLogical( aFontSize ) * 10;
+}
+
+
+//-----<temporary home for PART sub objects, move after stable>------------------
+
+#include <wx/gdicmn.h>
+#include <deque>
+#include <vector>
+#include <set>
+#include <sweet_lexer.h>
+
+class OUTPUTFORMATTER;
+
+/// Control Bits for Format() functions
+#define CTL_OMIT_NL (1<<0) ///< omit new line in Format()s.
+
+namespace SCH {
+
+class PART;
+class SWEET_PARSER;
+class PROPERTY;
+
+class POINT : public wxPoint
+{
+public:
+ POINT( int x, int y ) :
+ wxPoint( x, y )
+ {}
+
+ POINT( const POINT& r ) :
+ wxPoint( r )
+ {}
+
+ POINT() :
+ wxPoint()
+ {}
+
+ // assume assignment operator is inherited.
+};
+
+};
+
+/// a set of pin padnames that are electrically equivalent for a PART.
+typedef std::set< wxString > MERGE_SET;
+
+/// The key is the VISIBLE_PIN from
+/// (pin_merge VISIBLE_PIN (hide HIDDEN_PIN1 HIDDEN_PIN2...))
+typedef boost::ptr_map< wxString, MERGE_SET > MERGE_SETS;
+
+
+/**
+ * Class FONTZ
+ * is the size of a font, and comes with a constructor which initializes
+ * height and width to special values which defer font size decision to
+ * a higher control.
+ */
+class FONTZ
+{
+public:
+
+#define FONTZ_DEFAULT -1 ///< when size defers to higher control
+
+ FONTZ() :
+ height( FONTZ_DEFAULT ),
+ width( FONTZ_DEFAULT )
+ {}
+
+ int height;
+ int width;
+};
+
+
+typedef float ANGLE;
+typedef int STROKE; ///< will be a class someday, currently only line width
+
+
+namespace SCH {
+
+class FONT
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ wxString name; ///< name or other id such as number, TBD
+ FONTZ size;
+
+ bool italic;
+ bool bold;
+
+public:
+ FONT() :
+ italic( false ),
+ bold( false )
+ {}
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ // trust compiler to write its own assignment operator for this class OK.
+};
+
+
+struct TEXT_EFFECTS
+{
+ POINT pos;
+ ANGLE angle;
+ FONT font;
+ bool isVisible;
+
+ PROPERTY* property; ///< only used from a COMPONENT, specifies PROPERTY in PART
+ wxString propName; ///< only used from a COMPONENT, specifies PROPERTY in PART
+
+ TEXT_EFFECTS() :
+ angle( 0 ),
+ isVisible( false ),
+ property( 0 )
+ {}
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ // trust compiler to write its own assignment operator for this class OK.
+};
+
+
+#define STROKE_DEFAULT -1 ///< defer line width decision to higher control
+
+#define FILL_TYPE_DEFAULT PR::T_none ///< fillType defaut
+
+class BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ PART* owner;
+ PART* birthplace; ///< at which PART in inheritance chain was 'this' added
+
+public:
+ BASE_GRAPHIC( PART* aOwner ) :
+ owner( aOwner ),
+ birthplace( aOwner )
+ {}
+
+ virtual ~BASE_GRAPHIC() {}
+
+ /**
+ * Function Clone
+ * invokes the copy constructor on a heap allocated object of this same
+ * type and creates a deep copy of 'this' into it
+ * @param aOwner is the owner of the returned, new object.
+ */
+ virtual BASE_GRAPHIC* Clone( PART* aOwner ) const = 0;
+
+ static const char* ShowFill( int aFillType )
+ {
+ return SWEET_LEXER::TokenName( PR::T( aFillType ) );
+ }
+
+ /**
+ * Function Format
+ * outputs this object to @a aFormatter in s-expression form.
+ */
+ virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR )
+ {}
+};
+
+
+typedef std::deque<POINT> POINTS;
+
+class POLY_LINE : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ STROKE stroke;
+ int fillType; // T_none, T_filled, or T_transparent
+ POINTS pts;
+
+ void formatContents( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+public:
+ POLY_LINE( PART* aOwner ) :
+ BASE_GRAPHIC( aOwner ),
+ stroke( STROKE_DEFAULT ),
+ fillType( PR::T_none )
+ {
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ POLY_LINE* n = new POLY_LINE( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+class BEZIER : public POLY_LINE
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+public:
+ BEZIER( PART* aOwner ) :
+ POLY_LINE( aOwner )
+ {
+ stroke = STROKE_DEFAULT;
+ fillType = PR::T_none;
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ BEZIER* n = new BEZIER( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+class RECTANGLE : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ STROKE stroke;
+ int fillType; // T_none, T_filled, or T_transparent
+ POINT start;
+ POINT end;
+
+public:
+ RECTANGLE( PART* aOwner ) :
+ BASE_GRAPHIC( aOwner ),
+ stroke( STROKE_DEFAULT ),
+ fillType( FILL_TYPE_DEFAULT )
+ {
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ RECTANGLE* n = new RECTANGLE( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+class CIRCLE : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ POINT center;
+ int radius;
+ STROKE stroke;
+ int fillType; // T_none, T_filled, or T_transparent
+
+public:
+ CIRCLE( PART* aOwner ) :
+ BASE_GRAPHIC( aOwner ),
+ radius( LogicalToInternal( 0.5 ) ),
+ stroke( STROKE_DEFAULT ),
+ fillType( FILL_TYPE_DEFAULT )
+ {
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ CIRCLE* n = new CIRCLE( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+class ARC : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ POINT pos;
+ STROKE stroke;
+ int fillType; // T_none, T_filled, or T_transparent
+ int radius;
+ POINT start;
+ POINT end;
+
+public:
+ ARC( PART* aOwner ) :
+ BASE_GRAPHIC( aOwner ),
+ stroke( STROKE_DEFAULT ),
+ fillType( FILL_TYPE_DEFAULT ),
+ radius( LogicalToInternal( 0.5 ) )
+ {
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ ARC* n = new ARC( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+class GR_TEXT : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ POINT pos;
+ ANGLE angle;
+
+ int fillType; ///< T_none, T_filled, or T_transparent
+
+ int hjustify; ///< T_center, T_right, or T_left
+ int vjustify; ///< T_center, T_top, or T_bottom
+
+ bool isVisible;
+ wxString text;
+ FONT font;
+
+public:
+ GR_TEXT( PART* aOwner ) :
+ BASE_GRAPHIC( aOwner ),
+ angle( 0 ),
+ fillType( PR::T_filled ),
+ hjustify( PR::T_left ),
+ vjustify( PR::T_bottom ),
+ isVisible( true )
+ {}
+
+ static const char* ShowJustify( int aJustify )
+ {
+ return SWEET_LEXER::TokenName( PR::T( aJustify ) );
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ GR_TEXT* n = new GR_TEXT( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+class PROPERTY : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+protected:
+ wxString name;
+ wxString text;
+ TEXT_EFFECTS* effects;
+
+ void clear()
+ {
+ delete effects;
+ effects = 0;
+
+ name = wxEmptyString;
+ text = wxEmptyString;
+ }
+
+public:
+ PROPERTY( PART* aOwner, const wxChar* aName = wxT( "" ) ) :
+ BASE_GRAPHIC( aOwner ),
+ name( aName ),
+ effects( 0 )
+ {}
+
+ PROPERTY( const PROPERTY& r ) :
+ BASE_GRAPHIC( NULL ),
+ effects( 0 )
+ {
+ // use assignment operator
+ *this = r;
+ }
+
+ PROPERTY& operator = ( const PROPERTY& r ); // @todo
+
+ ~PROPERTY()
+ {
+ clear();
+ }
+
+ /**
+ * Function Effects
+ * returns a pointer to the TEXT_EFFECTS object for this PROPERTY, and optionally
+ * will lazily allocate one if it did not exist previously.
+ * @param doAlloc if true, means do an allocation of a new TEXT_EFFECTS if one
+ * currently does not exist, otherwise return NULL if non-existent.
+ */
+ TEXT_EFFECTS* EffectsLookup();
+ TEXT_EFFECTS* Effects() const
+ {
+ return effects;
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ PROPERTY* n = new PROPERTY( *this );
+ n->owner = aOwner;
+ return n;
+ }
+};
+
+
+struct PINTEXT
+{
+ wxString text;
+ FONT font;
+ bool isVisible;
+
+ PINTEXT() :
+ isVisible( true )
+ {}
+
+ void Format( OUTPUTFORMATTER* aFormatter, const char* aElement, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+};
+
+
+#define PIN_LEN_DEFAULT -1 ///< use standard pin length for given type
+#define PIN_SHAPE_DEFAULT PR::T_line ///< use standard pin shape
+#define PIN_CONN_DEFAULT PR::T_in ///< use standard pin connection type
+
+class PIN : public BASE_GRAPHIC
+{
+ friend class PART;
+ friend class SWEET_PARSER;
+
+public:
+ PIN( PART* aOwner ) :
+ BASE_GRAPHIC( aOwner ),
+ angle( 0 ),
+ connectionType( PIN_CONN_DEFAULT ),
+ shape( PIN_SHAPE_DEFAULT ),
+ length( PIN_LEN_DEFAULT ),
+ isVisible( true )
+ {}
+
+ ~PIN();
+
+ const char* ShowType() const
+ {
+ return SWEET_LEXER::TokenName( PR::T( connectionType ) );
+ }
+
+ const char* ShowShape() const
+ {
+ return SWEET_LEXER::TokenName( PR::T( shape ) );
+ }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
+ throw( IO_ERROR );
+
+ BASE_GRAPHIC* Clone( PART* aOwner ) const
+ {
+ PIN* n = new PIN( *this );
+ n->owner = aOwner;
+ return n;
+ }
+
+protected:
+ POINT pos;
+ ANGLE angle;
+
+ PINTEXT pad;
+ PINTEXT signal;
+
+ int connectionType; ///< T_in, T_out, T_inout, T_tristate, T_passive, T_unspecified,
+ ///< T_power_in, T_power_out, T_open_collector, T_open_emitter, or T_unconnected.
+
+ int shape; ///< T_none, T_line, T_inverted, T_clock, T_inverted_clk, T_input_low, T_clock_low,
+ ///< T_falling_edge, T_non_logic.
+
+ int length; ///< length of pin in internal units
+ bool isVisible; ///< pin is visible
+
+ wxString pin_merge; ///< pad of (pin_merge ...) that I am a member of, else empty if none
+};
+
+
+/**
+ * Class PART_REF
+ * is an LPID with a pointer to the "looked up" PART, which is looked up lazily.
+ */
+class PART_REF : public LPID
+{
+public:
+ PART_REF() :
+ LPID(),
+ part(0)
+ {}
+
+ /**
+ * Constructor LPID
+ * takes aLPID string and parses it. A typical LPID string uses a logical
+ * library name followed by a part name.
+ * e.g.: "kicad:passives/R/rev2", or
+ * e.g.: "mylib:R33"
+ */
+ PART_REF( const STRING& aLPID ) throw( PARSE_ERROR ) :
+ LPID( aLPID ),
+ part(0)
+ {
+ }
+
+ /**
+ * Function Lookup
+ * returns the PART that this LPID refers to. Never returns NULL, because
+ * instead an exception would be thrown.
+ * @throw IO_ERROR if any problem occurs or if the part cannot be found.
+ */
+ PART* Lookup( LIB_TABLE* aLibTable, LIB* aFallBackLib ) throw( IO_ERROR )
+ {
+ if( !part )
+ {
+ part = aLibTable->LookupPart( *this, aFallBackLib );
+ }
+ return part;
+ }
+
+protected:
+ PART* part; ///< The looked-up PART,
+ ///< no ownership (duh, PARTs are always owned by a LIB)
+};
+
+typedef std::vector<PART_REF> PART_REFS;
+
+} // namespace SCH
+
+
+//-----</temporary home for PART sub objects, move after stable>-----------------
+
+
+typedef std::set< wxString > KEYWORDS;
+
+namespace SCH {
+
+typedef std::vector< BASE_GRAPHIC* > GRAPHICS;
+typedef std::vector< PROPERTY* > PROPERTIES;
+
+typedef std::vector< PIN* > PINS;
+typedef std::vector< PIN* > PIN_LIST; ///< no ownership, used for searches
+
+
+class LPID;
+class SWEET_PARSER;
+
+
+/**
+ * Class PART
+ * will have to be unified with what Wayne is doing. I want a separate copy
+
+ * here until I can get the state management correct. Since a PART only lives
+ * within a cache called a LIB, its constructor is private (only a LIB
+ * can instantiate one), and it exists in various states of freshness and
+ * completeness relative to the LIB_SOURCE within the LIB.
+ */
+class PART
+{
+ friend class LIB; // is the owner of all PARTS, afterall
+ friend class SWEET_PARSER;
+
+public:
+
+ /**
+ * Enum PROP_ID
+ * is the set of "mandatory" properties within a PART. These are used by
+ * class PART as array indices into PART::mandatory[].
+ */
+ enum PROP_ID
+ {
+ REFERENCE, ///< reference prefix, a template for instantiation at COMPONENT level
+ VALUE, ///< value, e.g. "3.3K"
+ FOOTPRINT, ///< name of PCB module, e.g. "16DIP300"
+ DATASHEET, ///< URI of datasheet
+ MODEL, ///< spice model name
+ END ///< array sentinel, not a valid index
+ };
+
+ virtual ~PART();
+
+ PART& operator = ( const PART& other );
+
+ /**
+ * Function Owner
+ * returns the LIB* owner of this part.
+ */
+ LIB* Owner() { return owner; }
+
+ /**
+ * Function Parse
+ * translates a Sweet string into a binary form that is represented
+ * by the normal fields of this class. Parse is expected to call Inherit()
+ * if this part extends any other.
+ *
+ * @param aParser is an instance of SWEET_PARSER, rewound at the first line.
+ *
+ * @param aLibTable is the LIB_TABLE "view" that is in effect for inheritance,
+ * and comes from the big containing SCHEMATIC object.
+ */
+ void Parse( SWEET_PARSER* aParser, LIB_TABLE* aLibTable ) throw( IO_ERROR, PARSE_ERROR );
+
+ /**
+ * Function Format
+ * outputs this PART in UTF8 encoded s-expression format to @a aFormatter.
+ * @param aFormatter is the output sink to write to.
+ * @param aNestLevel is the initial indent level
+ * @param aControlBits are bit flags ORed together which control how the output
+ * is done.
+ */
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits = 0 ) const
+ throw( IO_ERROR );
+
+ /**
+ * Function PropDelete
+ * deletes the property with aPropertyName if found and returns true, else false
+ * if not found.
+ */
+ bool PropDelete( const wxString& aPropertyName );
+
+ /**
+ * Function Field
+ * returns a pointer to one of the mandatory properties, or NULL
+ * if non-existent. Use FieldLookup() to potentially allocate it.
+ */
+ PROPERTY* Field( PROP_ID aPropertyId ) const
+ {
+ wxASSERT( unsigned(aPropertyId) < unsigned(END) );
+ return mandatory[aPropertyId];
+ }
+
+ /**
+ * Function FieldLookup
+ * returns a pointer to one of the mandatory properties, which is lazily
+ * constructed by this function if need be.
+ * @param aPropertyId tells which field.
+ */
+ PROPERTY* FieldLookup( PROP_ID aPropertyId );
+
+ /**
+ * Function PinFindByPad
+ * finds a PIN based on aPad or returns NULL if not found.
+ * @param aPad is the pin to find
+ * @return PIN* - the found PIN or NULL if not found.
+ */
+ PIN* PinFindByPad( const wxString& aPad )
+ {
+ PINS::iterator it = pinFindByPad( aPad );
+ return it != pins.end() ? *it : NULL;
+ }
+
+ /**
+ * Function PinsFindBySignal
+ * fetches all the pins matching aSignal into aResults.
+ */
+ void PinsFindBySignal( PIN_LIST* aResults, const wxString& aSignal );
+
+ /**
+ * Function PinDelete
+ * deletes the pin with aPad if found and returns true, else false
+ * if not found.
+ */
+ bool PinDelete( const wxString& aPad );
+
+
+/*
+ void SetValue( const wxString& aValue )
+ {
+ value = aValue;
+ }
+ const wxString& GetValue()
+ {
+ return value;
+ }
+
+ void SetFootprint( const wxString& aFootprint )
+ {
+ footprint = aFootprint;
+ }
+ const wxString& GetFootprint()
+ {
+ return footprint;
+ }
+
+ void SetModel( const wxString& aModel )
+ {
+ model = aModel;
+ }
+ const wxString& GetModel()
+ {
+ return model;
+ }
+*/
+
+/*
+ void SetBody( const STR_UTF& aSExpression )
+ {
+ body = aSExpression;
+ }
+*/
+
+
+protected: // not likely to have C++ descendants, but protected none-the-less.
+
+ /// a protected constructor, only a LIB can instantiate a PART.
+ PART( LIB* aOwner, const STRING& aPartNameAndRev );
+
+ /**
+ * Function destroy
+ * clears out this object, deleting everything that this PART owns and
+ * initializing values back to a state as if the object was just constructed
+ * empty.
+ */
+ void clear();
+
+ /**
+ * Function inherit
+ * is a specialized assignment function that copies a specific subset, enough
+ * to fulfill the requirements of the Sweet s-expression language.
+ */
+ void inherit( const PART& aBasePart );
+
+ /**
+ * Function propertyFind
+ * searches for aPropertyName and returns a PROPERTIES::iterator which
+ * is the found item or properties.end() if not found.
+ */
+ PROPERTIES::iterator propertyFind( const wxString& aPropertyName );
+
+ /**
+ * Function pinFindByPad
+ * searches for a PIN with aPad and returns a PROPERTIES::iterator which
+ * is the found item or pins.end() if not found.
+ */
+ PINS::iterator pinFindByPad( const wxString& aPad );
+
+ LIB* owner; ///< which LIB am I a part of (pun if you want)
+ int contains; ///< has bits from Enum PartParts
+
+ STRING partNameAndRev; ///< example "passives/R[/revN..]", immutable.
+
+ LPID* extends; ///< of base part, NULL if none, otherwise I own it.
+ const PART* base; ///< which PART am I extending, if any. no ownership.
+
+ POINT anchor;
+
+ /// encapsulate the old version deletion, take ownership of @a aLPID
+ void setExtends( LPID* aLPID );
+
+ /// s-expression text for the part, initially empty, and read in as this part
+ /// actually becomes cached in RAM.
+ STRING body;
+
+ /// mandatory properties, aka fields. Index into mandatory[] is PROP_ID.
+ PROPERTY* mandatory[END];
+
+ /**
+ * Member properties
+ * holds the non-mandatory properties.
+ */
+ PROPERTIES properties;
+
+ /**
+ * Member graphics
+ * owns : POLY_LINE, RECTANGLE, CIRCLE, ARC, BEZIER, and GR_TEXT objects.
+ */
+ GRAPHICS graphics;
+
+ /**
+ * Member pins
+ * owns all the PINs in pins.
+ */
+ PINS pins;
+
+ /// Alternate body forms.
+ PART_REFS alternates;
+
+ /// searching aids
+ KEYWORDS keywords;
+
+ /**
+ * A pin_merge set is a set of pins that are all electrically equivalent
+ * and whose anchor pin is the only one visible. The visible pin is the
+ * key in the MERGE_SETS boost::ptr_map::map
+ */
+ MERGE_SETS pin_merges;
+};
+
+} // namespace PART
+
+#endif // SCH_PART_
diff --git a/new/sch_sweet_parser.cpp b/new/sch_sweet_parser.cpp
new file mode 100644
index 0000000..f0be7bd
--- /dev/null
+++ b/new/sch_sweet_parser.cpp
@@ -0,0 +1,1561 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <sch_sweet_parser.h>
+#include <sch_part.h>
+#include <sch_lib_table.h>
+#include <sch_lpid.h>
+
+#include <macros.h>
+
+using namespace SCH;
+using namespace PR;
+
+
+#define MAX_INHERITANCE_NESTING 6 ///< max depth of inheritance, no problem going larger
+
+
+static inline int internal( const STRING& aCoord )
+{
+ return LogicalToInternal( strtod( aCoord.c_str(), NULL ) );
+}
+
+static inline int fromWidth( const STRING& aWidth )
+{
+ return WidthToInternal( strtod( aWidth.c_str(), NULL ) );
+}
+
+static inline int fromFontz( const STRING& aFontSize )
+{
+ return FontzToInternal( strtod( aFontSize.c_str(), NULL ) );
+}
+
+
+/**
+ * Enum PartBit
+ * is a set of bit positions that can be used to create flag bits within
+ * PART::contains to indicate what state the PART is in and what it contains, i.e.
+ * whether the PART has been parsed, and what the PART contains, categorically.
+ */
+enum PartBit
+{
+ parsed, ///< have parsed this part already, otherwise 'body' text must be parsed
+ extends, ///< saw "extends" keyword, inheriting from another PART
+ value,
+ anchor,
+ reference,
+ footprint,
+ datasheet,
+ model,
+ keywords,
+};
+
+
+/// Function PB
+/// is a PartBit shifter for PART::contains field.
+static inline const int PB( PartBit oneBitOnly )
+{
+ return ( 1 << oneBitOnly );
+}
+
+
+void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_ERROR )
+{
+ T tok;
+
+ libs = aTable;
+
+ // empty everything out, could be re-parsing this object and it may not be empty.
+ me->clear();
+
+#if 0
+ // Be flexible regarding the starting point of the stream.
+ // Caller may not have read the first two tokens out of the
+ // stream: T_LEFT and T_part, so ignore them if seen here.
+ // The 1st two tokens T_LEFT and T_part are then optional in the grammar.
+ if( ( tok = NextTok() ) == T_LEFT )
+ {
+ if( ( tok = NextTok() ) != T_part )
+ Expecting( T_part );
+ }
+
+#else
+ // "( part" are not optional
+ NeedLEFT();
+
+ if( ( tok = NextTok() ) != T_part )
+ Expecting( T_part );
+#endif
+
+ NeedSYMBOLorNUMBER(); // toss NAME_HINT
+ tok = NextTok();
+
+ // extends must be _first_ thing, if it is present at all, after NAME_HINT
+ if( tok == T_extends )
+ {
+ parseExtends( me );
+ tok = NextTok();
+ }
+
+ for( ; tok!=T_RIGHT; tok = NextTok() )
+ {
+ if( tok == T_LEFT )
+ {
+ PROPERTY* prop;
+
+ tok = NextTok();
+
+ // because exceptions are thrown, any 'new' allocation has to be stored
+ // somewhere other than on the stack, ASAP.
+
+ switch( tok )
+ {
+ default:
+ // describe what we expect at this level
+ Expecting(
+ "anchor|value|footprint|model|keywords|alternates\n"
+ "|property\n"
+ " |property_del\n"
+ "|pin\n"
+ " |pin_merge|pin_swap|pin_renum|pin_rename|route_pin_swap\n"
+ "|polyline|line|rectangle|circle|arc|bezier|text"
+ );
+ break;
+
+ case T_anchor:
+ if( contains & PB(anchor) )
+ Duplicate( tok );
+ NeedNUMBER( "anchor x" );
+ me->anchor.x = internal( CurText() );
+ NeedNUMBER( "anchor y" );
+ me->anchor.y = internal( CurText() );
+ contains |= PB(anchor);
+ break;
+
+ case T_line:
+ case T_polyline:
+ POLY_LINE* pl;
+ pl = new POLY_LINE( me );
+ me->graphics.push_back( pl );
+ parsePolyLine( pl );
+ break;
+
+ case T_rectangle:
+ RECTANGLE* rect;
+ rect = new RECTANGLE( me );
+ me->graphics.push_back( rect );
+ parseRectangle( rect );
+ break;
+
+ case T_circle:
+ CIRCLE* circ;
+ circ = new CIRCLE( me );
+ me->graphics.push_back( circ );
+ parseCircle( circ );
+ break;
+
+ case T_arc:
+ ARC* arc;
+ arc = new ARC( me );
+ me->graphics.push_back( arc );
+ parseArc( arc );
+ break;
+
+ case T_bezier:
+ BEZIER* bezier;
+ bezier = new BEZIER( me );
+ me->graphics.push_back( bezier );
+ parseBezier( bezier );
+ break;
+
+ case T_text:
+ GR_TEXT* text;
+ text = new GR_TEXT( me );
+ me->graphics.push_back( text );
+ parseText( text );
+ break;
+
+ case T_property:
+ prop = new PROPERTY( me );
+ // @todo check for uniqueness
+ me->properties.push_back( prop );
+ NeedSYMBOLorNUMBER();
+ prop->name = FromUTF8();
+
+ L_prop:
+ NeedSYMBOLorNUMBER();
+ prop->text = FromUTF8();
+ tok = NextTok();
+ if( tok == T_LEFT )
+ {
+ tok = NextTok();
+ if( tok != T_effects )
+ Expecting( T_effects );
+ parseTextEffects( prop->EffectsLookup() );
+ NeedRIGHT();
+ }
+ else if( tok != T_RIGHT )
+ Expecting( ") | effects" );
+ break;
+
+ case T_property_del:
+ parsePropertyDel( me );
+ break;
+
+ // reference in a PART is incomplete, it is just the prefix of an
+ // unannotated reference. Only components have full reference designators.
+ case T_reference:
+ if( contains & PB(reference) )
+ Duplicate( tok );
+ contains |= PB(reference);
+ prop = me->FieldLookup( PART::REFERENCE );
+ goto L_prop;
+
+ case T_value:
+ if( contains & PB(value) )
+ Duplicate( tok );
+ contains |= PB(value);
+ prop = me->FieldLookup( PART::VALUE );
+ goto L_prop;
+
+ case T_footprint:
+ if( contains & PB(footprint) )
+ Duplicate( tok );
+ contains |= PB(footprint);
+ prop = me->FieldLookup( PART::FOOTPRINT );
+ goto L_prop;
+
+ case T_datasheet:
+ if( contains & PB(datasheet) )
+ Duplicate( tok );
+ contains |= PB(datasheet);
+ prop = me->FieldLookup( PART::DATASHEET );
+ goto L_prop;
+
+ case T_model:
+ if( contains & PB(model) )
+ Duplicate( tok );
+ contains |= PB(model);
+ prop = me->FieldLookup( PART::MODEL );
+ goto L_prop;
+
+ case T_keywords:
+ parseKeywords( me );
+ break;
+
+ case T_alternates:
+ // @todo: do we want to inherit alternates?
+ parseAlternates( me );
+ break;
+
+ case T_pin:
+ // @todo PADNAMEs must be unique
+ PIN* pin;
+ pin = new PIN( me );
+ me->pins.push_back( pin );
+ parsePin( pin );
+ break;
+
+ case T_pin_del:
+ parsePinDel( me );
+ break;
+
+ case T_pin_swap:
+ parsePinSwap( me );
+ break;
+
+ case T_pin_renum:
+ parsePinRenum( me );
+ break;
+
+ case T_pin_rename:
+ parsePinRename( me );
+ break;
+
+ case T_pin_merge:
+ parsePinMerge( me );
+ break;
+
+ /*
+ @todo
+
+ case T_route_pin_swap:
+ break;
+ */
+ }
+ }
+
+ else
+ {
+ switch( tok )
+ {
+ default:
+ Unexpected( tok );
+ }
+ }
+ }
+
+ contains |= PB(parsed);
+
+ me->contains |= contains;
+}
+
+
+void SWEET_PARSER::parseExtends( PART* me )
+{
+ PART* base;
+ int offset;
+
+ if( contains & PB(extends) )
+ Duplicate( T_extends );
+
+ NeedSYMBOLorNUMBER();
+ me->setExtends( new LPID() );
+
+ offset = me->extends->Parse( CurText() );
+ if( offset > -1 ) // -1 is success
+ THROW_PARSE_ERROR( _("invalid extends LPID"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() + offset );
+
+ base = libs->LookupPart( *me->extends, me->Owner() );
+
+ // we could be going in circles here, recursively, or too deep, set limits
+ // and disallow extending from self (even indirectly)
+ int extendsDepth = 0;
+ for( const PART* ancestor = base; ancestor && extendsDepth<MAX_INHERITANCE_NESTING;
+ ++extendsDepth, ancestor = ancestor->base )
+ {
+ if( ancestor == me )
+ {
+ THROW_PARSE_ERROR( _("'extends' may not have self as any ancestor"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+ }
+
+ if( extendsDepth == MAX_INHERITANCE_NESTING )
+ {
+ THROW_PARSE_ERROR( _("max allowed extends depth exceeded"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ me->inherit( *base );
+ me->base = base;
+ contains |= PB(extends);
+}
+
+
+void SWEET_PARSER::parseAlternates( PART* me )
+{
+ T tok;
+ PART_REF lpid;
+ int offset;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( !IsSymbol( tok ) && tok != T_NUMBER )
+ Expecting( "lpid" );
+
+ // lpid.clear(); Parse does this
+
+ offset = lpid.Parse( CurText() );
+ if( offset > -1 )
+ THROW_PARSE_ERROR( _("invalid alternates LPID"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() + offset );
+
+ // PART_REF assignment should be OK, it contains no ownership
+ me->alternates.push_back( lpid );
+ }
+}
+
+
+void SWEET_PARSER::parseKeywords( PART* me )
+{
+ T tok;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( !IsSymbol( tok ) && tok!=T_NUMBER )
+ Expecting( "symbol|number" );
+
+ // just insert them, duplicates are silently removed and tossed.
+ me->keywords.insert( FromUTF8() );
+ }
+}
+
+
+void SWEET_PARSER::parseFont( FONT* me )
+{
+ /*
+ # The FONT value needs to be defined. Currently, EESchema does not support
+ # different fonts. In the future this feature may be implemented and at
+ # that time FONT will have to be defined. Initially, only the font size and
+ # style are required. Italic and bold styles are optional. The font size
+ # height and width are in units yet to be determined.
+ (font [FONT] (size HEIGHT WIDTH) [italic] [bold])
+ */
+
+ // handle the [FONT] 'position dependently', i.e. first
+ T tok = NextTok();
+ bool sawBold = false;
+ bool sawItalic = false;
+ bool sawSize = false;
+
+ if( IsSymbol( tok ) )
+ {
+ me->name = FromUTF8();
+ tok = NextTok();
+ }
+
+ for( ; tok != T_RIGHT; tok = NextTok() )
+ {
+ if( tok == T_LEFT )
+ {
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_size:
+ if( sawSize )
+ Duplicate( T_size );
+ sawSize = true;
+
+ NeedNUMBER( "size height" );
+ me->size.height = fromFontz( CurText() );
+
+ NeedNUMBER( "size width" );
+ me->size.width = fromFontz( CurText() );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "size" );
+ }
+ }
+ else
+ {
+ switch( tok )
+ {
+ case T_bold:
+ if( sawBold )
+ Duplicate( T_bold );
+ sawBold = true;
+ me->bold = true;
+ break;
+
+ case T_italic:
+ if( sawItalic )
+ Duplicate( T_italic );
+ sawItalic = true;
+ me->italic = true;
+ break;
+
+ default:
+ Unexpected( "bold|italic" );
+ }
+ }
+ }
+}
+
+
+void SWEET_PARSER::parseBool( bool* aBool )
+{
+ T tok = NeedSYMBOL();
+
+ switch( tok )
+ {
+ case T_yes:
+ case T_no:
+ *aBool = (tok == T_yes);
+ break;
+ default:
+ Expecting( "yes|no" );
+ }
+}
+
+
+void SWEET_PARSER::parseStroke( STROKE* me )
+{
+ /*
+ (stroke [WIDTH] [(style [(dashed...)]...)])
+
+ future place holder for arrow heads, dashed lines, all line glamour
+ */
+
+ NeedNUMBER( "stroke" );
+ *me = fromWidth( CurText() );
+ NeedRIGHT();
+}
+
+
+void SWEET_PARSER::parsePinText( PINTEXT* me )
+{
+ /* either:
+ (signal SIGNAL (font [FONT] (size HEIGHT WIDTH) [italic] [bold])(visible YES))
+ or
+ (pad PADNAME (font [FONT] (size HEIGHT WIDTH) [italic] [bold])(visible YES))
+ */
+ T tok;
+ bool sawFont = false;
+ bool sawVis = false;
+
+ // pad or signal text
+ NeedSYMBOLorNUMBER();
+ me->text = FromUTF8();
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok == T_LEFT )
+ {
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_font:
+ if( sawFont )
+ Duplicate( tok );
+ sawFont = true;
+ parseFont( &me->font );
+ break;
+
+ case T_visible:
+ if( sawVis )
+ Duplicate( tok );
+ sawVis = true;
+ parseBool( &me->isVisible );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "font" );
+ }
+ }
+
+ else
+ {
+ switch( tok )
+ {
+ default:
+ Expecting( T_LEFT );
+ }
+ }
+ }
+}
+
+
+void SWEET_PARSER::parsePin( PIN* me )
+{
+ /*
+ (pin TYPE SHAPE
+ (at X Y [ANGLE])
+ (length LENGTH)
+ (signal NAME (font [FONT] (size HEIGHT WIDTH) [italic] [bold])(visible YES))
+ (pad NUMBER (font [FONT] (size HEIGHT WIDTH) [italic] [bold] (visible YES))
+ (visible YES)
+ )
+ */
+
+ T tok;
+ bool sawShape = false;
+ bool sawType = false;
+ bool sawAt = false;
+ bool sawLen = false;
+ bool sawSignal = false;
+ bool sawPad = false;
+ bool sawVis = false;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok == T_LEFT )
+ {
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_at:
+ if( sawAt )
+ Duplicate( tok );
+ sawAt = true;
+ parseAt( &me->pos, &me->angle );
+ break;
+
+ case T_length:
+ if( sawLen )
+ Duplicate( tok );
+ sawLen = true;
+ NeedNUMBER( "length" );
+ me->length = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ case T_signal:
+ if( sawSignal )
+ Duplicate( tok );
+ sawSignal = true;
+ parsePinText( &me->signal );
+ break;
+
+ case T_pad:
+ if( sawPad )
+ Duplicate( tok );
+ sawPad = true;
+ parsePinText( &me->pad );
+ break;
+
+ case T_visible:
+ if( sawVis )
+ Duplicate( tok );
+ sawVis = true;
+ parseBool( &me->isVisible );
+ NeedRIGHT();
+ break;
+
+ default:
+ Unexpected( tok );
+ }
+ }
+
+ else // not wrapped in parentheses
+ {
+ switch( tok )
+ {
+ case T_in:
+ case T_out:
+ case T_inout:
+ case T_tristate:
+ case T_passive:
+ case T_unspecified:
+ case T_power_in:
+ case T_power_out:
+ case T_open_collector:
+ case T_open_emitter:
+ case T_unconnected:
+ if( sawType )
+ Duplicate( tok );
+ sawType = true;
+ me->connectionType = tok;
+ break;
+
+ case T_none:
+ case T_line:
+ case T_inverted:
+ case T_clock:
+ case T_inverted_clk:
+ case T_input_low:
+ case T_clock_low:
+ case T_falling_edge:
+ case T_non_logic:
+ if( sawShape )
+ Duplicate( tok );
+ sawShape = true;
+ me->shape = tok;
+ break;
+
+ default:
+ Unexpected( tok );
+ }
+ }
+ }
+}
+
+
+void SWEET_PARSER::parsePinDel( PART* me )
+{
+ wxString pad;
+
+ // we do this somewhat unorthodoxically because we want to avoid doing two lookups,
+ // which would need to be done to 1) find pin, and 2) delete pin. Only one
+ // lookup is needed with this scheme.
+
+ NeedSYMBOLorNUMBER();
+ pad = FromUTF8();
+
+ // lookup now while CurOffset() is still meaningful.
+ PINS::iterator it = me->pinFindByPad( pad );
+ if( it == me->pins.end() )
+ {
+ THROW_PARSE_ERROR( _("undefined pin"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+/* enable in future, but not now while testing
+ if( (*it)->birthplace == me )
+ {
+ THROW_PARSE_ERROR( _("pin_del allowed for inherited pins only"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+*/
+
+ NeedRIGHT();
+
+ delete *it; // good thing I'm a friend.
+ me->pins.erase( it );
+}
+
+
+void SWEET_PARSER::parsePinSwap( PART* me )
+{
+ PIN* pin1;
+ PIN* pin2;
+
+ wxString pad;
+
+ NeedSYMBOLorNUMBER();
+ pad = FromUTF8();
+
+ // lookup now while CurOffset() is still meaningful.
+ pin1 = me->PinFindByPad( pad );
+ if( !pin1 )
+ {
+ THROW_PARSE_ERROR( _("undefined pin"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ NeedSYMBOLorNUMBER();
+ pad = FromUTF8();
+
+ pin2 = me->PinFindByPad( pad );
+ if( !pin2 )
+ {
+ THROW_PARSE_ERROR( _("undefined pin"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ NeedRIGHT();
+
+ // swap only the text, but might want to swap entire PIN_TEXTs
+ pin2->pad.text = pin1->pad.text;
+ pin1->pad.text = pad;
+}
+
+
+void SWEET_PARSER::parsePinRenum( PART* me )
+{
+ PIN* pin;
+
+ wxString oldPad;
+ wxString newPad;
+
+ NeedSYMBOLorNUMBER();
+ oldPad = FromUTF8();
+
+ // lookup now while CurOffset() is still meaningful.
+ pin = me->PinFindByPad( oldPad );
+ if( !pin )
+ {
+ THROW_PARSE_ERROR( _("undefined pin"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ NeedSYMBOLorNUMBER();
+ newPad = FromUTF8();
+
+ NeedRIGHT();
+
+ // @todo: check for pad legalities
+ pin->pad.text = newPad;
+}
+
+
+void SWEET_PARSER::parsePinRename( PART* me )
+{
+ PIN* pin;
+
+ wxString pad;
+ wxString newSignal;
+
+ NeedSYMBOLorNUMBER();
+ pad = FromUTF8();
+
+ // lookup now while CurOffset() is still meaningful.
+ pin = me->PinFindByPad( pad );
+ if( !pin )
+ {
+ THROW_PARSE_ERROR( _("undefined pin"),
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ NeedSYMBOLorNUMBER();
+ newSignal = FromUTF8();
+
+ NeedRIGHT();
+
+ pin->signal.text = newSignal;
+}
+
+
+void SWEET_PARSER::parsePinMerge( PART* me )
+{
+ T tok;
+ wxString pad;
+ wxString signal;
+ wxString msg;
+
+ NeedSYMBOLorNUMBER();
+
+ wxString anchorPad = FromUTF8();
+
+ // lookup now while CurOffset() is still good.
+ PINS::iterator pit = me->pinFindByPad( anchorPad );
+ if( pit == me->pins.end() )
+ {
+ msg.Printf( _( "undefined pin %s" ), anchorPad.GetData() );
+ THROW_PARSE_ERROR( msg,
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ if( !(*pit)->pin_merge.IsEmpty() && anchorPad != (*pit)->pin_merge )
+ {
+ msg.Printf( _( "pin %s already in pin_merge group %s" ),
+ anchorPad.GetData(), (*pit)->pin_merge.GetData() );
+
+ THROW_PARSE_ERROR( msg,
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ (*pit)->isVisible = true;
+ (*pit)->pin_merge = anchorPad;
+
+ // allocate or find a MERGE_SET;
+ MERGE_SET& ms = me->pin_merges[anchorPad];
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok == T_LEFT )
+ {
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_signals:
+ {
+ PINS sigPins; // no ownership
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( !IsSymbol( tok ) && tok != T_NUMBER )
+ Expecting( "signal" );
+
+ signal = FromUTF8();
+
+ sigPins.clear();
+
+ me->PinsFindBySignal( &sigPins, signal );
+
+ if( !sigPins.size() )
+ {
+ msg.Printf( _( "no pins with signal %s" ), signal.GetData() );
+ THROW_PARSE_ERROR( msg,
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ for( pit = sigPins.begin(); pit != sigPins.end(); ++pit )
+ {
+ if( !(*pit)->pin_merge.IsEmpty() && anchorPad != (*pit)->pin_merge )
+ {
+ msg.Printf( _( "signal pin %s already in pin_merge group %s" ),
+ pad.GetData(), (*pit)->pin_merge.GetData() );
+
+ THROW_PARSE_ERROR( msg,
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ (*pit)->isVisible = true;
+ (*pit)->pin_merge = anchorPad;
+ ms.insert( pad );
+ }
+ }
+ }
+ break;
+
+ case T_pads:
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( !IsSymbol( tok ) && tok != T_NUMBER )
+ Expecting( "pad" );
+
+ pad = FromUTF8();
+
+ D(printf("pad=%s\n", TO_UTF8( pad ) );)
+
+ // find the PIN and mark it as being in this MERGE_SET or throw
+ // error if already in another MERGET_SET.
+
+ pit = me->pinFindByPad( pad );
+ if( pit == me->pins.end() )
+ {
+ msg.Printf( _( "undefined pin %s" ), pad.GetData() );
+ THROW_PARSE_ERROR( msg,
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ if( !(*pit)->pin_merge.IsEmpty() /* && anchorPad != (*pit)->pin_merge */ )
+ {
+ msg.Printf( _( "pin %s already in pin_merge group %s" ),
+ pad.GetData(), (*pit)->pin_merge.GetData() );
+
+ THROW_PARSE_ERROR( msg,
+ CurSource(),
+ CurLine(),
+ CurLineNumber(),
+ CurOffset() );
+ }
+
+ (*pit)->isVisible = false;
+ (*pit)->pin_merge = anchorPad;
+
+ ms.insert( pad );
+ }
+ break;
+
+ default:
+ Expecting( "pads|signals" );
+ break;
+ }
+ }
+ else
+ {
+ Expecting( T_LEFT );
+ }
+ }
+}
+
+
+void SWEET_PARSER::parsePropertyDel( PART* me )
+{
+ NeedSYMBOLorNUMBER();
+
+ wxString propertyName = FromUTF8();
+
+ if( !me->PropDelete( propertyName ) )
+ {
+ wxString msg;
+ msg.Printf( _( "Unable to find property: %s" ), propertyName.GetData() );
+ THROW_IO_ERROR( msg );
+ }
+ NeedRIGHT();
+}
+
+
+void SWEET_PARSER::parseTextEffects( TEXT_EFFECTS* me )
+{
+ /*
+ (effects [PROPERTY]
+
+ # Position requires X and Y coordinates. Position coordinates can be
+ # non-intergr. Angle is in degrees and defaults to 0 if not defined.
+ (at X Y [ANGLE])
+
+ # The FONT value needs to be defined. Currently, EESchema does not support
+ # different fonts. In the future this feature may be implemented and at
+ # that time FONT will have to be defined. Initially, only the font size and
+ # style are required. Italic and bold styles are optional. The font size
+ # height and width are in units yet to be determined.
+ (font [FONT] (size HEIGHT WIDTH) [italic] [bold])
+
+ # Valid visibility values are yes and no.
+ (visible YES)
+ )
+ */
+
+ bool sawFont = false;
+ bool sawAt = false;
+ bool sawVis = false;
+
+ T tok = NextTok();
+
+ if( IsSymbol( tok ) )
+ {
+ me->propName = FromUTF8();
+ tok = NextTok();
+ }
+
+ for( ; tok != T_RIGHT; tok = NextTok() )
+ {
+ if( tok != T_LEFT )
+ Expecting( T_LEFT );
+
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_at:
+ if( sawAt )
+ Duplicate( tok );
+ sawAt = true;
+ parseAt( &me->pos, &me->angle );
+ break;
+
+ case T_font:
+ if( sawFont )
+ Duplicate( tok );
+ sawFont = true;
+ parseFont( &me->font );
+ break;
+
+ case T_visible:
+ if( sawVis )
+ Duplicate( sawVis );
+ sawVis = true;
+ parseBool( &me->isVisible );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "at|font|visible" );
+ }
+ }
+}
+
+
+void SWEET_PARSER::parsePolyLine( POLY_LINE* me )
+{
+ /*
+ (polyline|line
+ (pts (xy X Y) (xy X Y) (xy X Y) (xy X Y) (xy X Y))
+
+ # Line widths are in percent of a pin delta
+ [(stroke [WIDTH] [(style [(dashed...)]...)])]
+
+
+ # Valid fill types are none, filled, and transparent.
+ (fill FILL_TYPE)
+ )
+ */
+
+ T tok;
+ int count = 0;
+ bool sawStroke = false;
+ bool sawFill = false;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok != T_LEFT )
+ Expecting( T_LEFT );
+
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_stroke:
+ if( sawStroke )
+ Duplicate( tok );
+ sawStroke = true;
+ parseStroke( &me->stroke );
+ break;
+
+ case T_pts:
+ if( count )
+ Duplicate( tok );
+ for( ; ( tok = NextTok() ) != T_RIGHT; ++count )
+ {
+ if( tok != T_LEFT )
+ Expecting( T_LEFT );
+
+ tok = NeedSYMBOL();
+ if( tok != T_xy )
+ Expecting( T_xy );
+
+ me->pts.push_back( POINT() );
+
+ NeedNUMBER( "x" );
+ me->pts.back().x = internal( CurText() );
+
+ NeedNUMBER( "y" );
+ me->pts.back().y = internal( CurText() );
+
+ NeedRIGHT();
+ }
+ if( count < 2 )
+ Expecting( ">= 2 pts" );
+ break;
+
+ case T_fill:
+ if( sawFill )
+ Duplicate( tok );
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_none:
+ case T_filled:
+ case T_transparent:
+ me->fillType = tok;
+ break;
+ default:
+ Expecting( "none|filled|transparent" );
+ }
+ NeedRIGHT();
+ sawFill = true;
+ break;
+
+ default:
+ Expecting( "pts|stroke|fill" );
+ }
+ }
+}
+
+
+void SWEET_PARSER::parseBezier( BEZIER* me )
+{
+ parsePolyLine( me );
+}
+
+
+void SWEET_PARSER::parseRectangle( RECTANGLE* me )
+{
+ /*
+ (rectangle (start X Y) (end X Y) (stroke WIDTH) (fill FILL_TYPE))
+ */
+
+ T tok;
+ bool sawStart = false;
+ bool sawEnd = false;
+ bool sawStroke = false;
+ bool sawFill = false;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok != T_LEFT )
+ Expecting( T_LEFT );
+
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_stroke:
+ if( sawStroke )
+ Duplicate( tok );
+ sawStroke = true;
+ parseStroke( &me->stroke );
+ break;
+
+ case T_fill:
+ if( sawFill )
+ Duplicate( tok );
+ sawFill = true;
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_none:
+ case T_filled:
+ case T_transparent:
+ me->fillType = tok;
+ break;
+ default:
+ Expecting( "none|filled|transparent" );
+ }
+ NeedRIGHT();
+ break;
+
+ case T_start:
+ if( sawStart )
+ Duplicate( tok );
+ sawStart = true;
+ NeedNUMBER( "x" );
+ me->start.x = internal( CurText() );
+ NeedNUMBER( "y" );
+ me->start.y = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ case T_end:
+ if( sawEnd )
+ Duplicate( tok );
+ sawEnd = true;
+ NeedNUMBER( "x" );
+ me->end.x = internal( CurText() );
+ NeedNUMBER( "y" );
+ me->end.y = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "start|end|stroke|fill" );
+ }
+ }
+}
+
+
+void SWEET_PARSER::parseCircle( CIRCLE* me )
+{
+ /*
+ (circle (center X Y)
+ # Radius length is in units if defined or mils.
+ (radius LENGTH)
+ (stroke WIDTH)
+ (fill FILL_TYPE)
+ )
+ */
+
+ T tok;
+ bool sawCenter = false;
+ bool sawRadius = false;
+ bool sawStroke = false;
+ bool sawFill = false;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok != T_LEFT )
+ Expecting( T_LEFT );
+
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_stroke:
+ if( sawStroke )
+ Duplicate( tok );
+ sawStroke = true;
+ parseStroke( &me->stroke );
+ break;
+
+ case T_fill:
+ if( sawFill )
+ Duplicate( tok );
+ sawFill = true;
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_none:
+ case T_filled:
+ case T_transparent:
+ me->fillType = tok;
+ break;
+ default:
+ Expecting( "none|filled|transparent" );
+ }
+ NeedRIGHT();
+ break;
+
+ case T_center:
+ if( sawCenter )
+ Duplicate( tok );
+ sawCenter = true;
+ NeedNUMBER( "center x" );
+ me->center.x = internal( CurText() );
+ NeedNUMBER( "center y" );
+ me->center.y = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ case T_radius:
+ if( sawRadius )
+ Duplicate( tok );
+ sawRadius = true;
+ NeedNUMBER( "radius" );
+ me->radius = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "center|radius|stroke|fill" );
+ }
+ }
+}
+
+
+void SWEET_PARSER::parseArc( ARC* me )
+{
+ /*
+ (arc (pos X Y) (radius RADIUS) (start X Y) (end X Y)
+ (stroke WIDTH)
+ (fill FILL_TYPE)
+ )
+ */
+
+ T tok;
+ bool sawPos = false;
+ bool sawStart = false;
+ bool sawEnd = false;
+ bool sawRadius = false;
+ bool sawStroke = false;
+ bool sawFill = false;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok != T_LEFT )
+ Expecting( T_LEFT );
+
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_stroke:
+ if( sawStroke )
+ Duplicate( tok );
+ sawStroke = true;
+ parseStroke( &me->stroke );
+ break;
+
+ case T_fill:
+ if( sawFill )
+ Duplicate( tok );
+ sawFill = true;
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_none:
+ case T_filled:
+ case T_transparent:
+ me->fillType = tok;
+ break;
+ default:
+ Expecting( "none|filled|transparent" );
+ }
+ NeedRIGHT();
+ break;
+
+ case T_pos:
+ if( sawPos )
+ Duplicate( tok );
+ sawPos = true;
+ NeedNUMBER( "pos x" );
+ me->pos.x = internal( CurText() );
+ NeedNUMBER( "pos y" );
+ me->pos.y = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ case T_radius:
+ if( sawRadius )
+ Duplicate( tok );
+ sawRadius = true;
+ NeedNUMBER( "radius" );
+ me->radius = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ case T_start:
+ if( sawStart )
+ Duplicate( tok );
+ sawStart = true;
+ NeedNUMBER( "start x" );
+ me->start.x = internal( CurText() );
+ NeedNUMBER( "start y" );
+ me->start.y = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ case T_end:
+ if( sawEnd )
+ Duplicate( tok );
+ sawEnd = true;
+ NeedNUMBER( "end x" );
+ me->end.x = internal( CurText() );
+ NeedNUMBER( "end y" );
+ me->end.y = internal( CurText() );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "center|radius|stroke|fill" );
+ }
+ }
+}
+
+
+void SWEET_PARSER::parseAt( POINT* pos, float* angle )
+{
+ T tok;
+
+ NeedNUMBER( "at x" );
+ pos->x = internal( CurText() );
+
+ NeedNUMBER( "at y" );
+ pos->y = internal( CurText() );
+
+ tok = NextTok();
+ if( angle && tok == T_NUMBER )
+ {
+ *angle = strtod( CurText(), NULL );
+ tok = NextTok();
+ }
+ if( tok != T_RIGHT )
+ Expecting( T_RIGHT );
+}
+
+
+void SWEET_PARSER::parseText( GR_TEXT* me )
+{
+ /*
+ (text "This is the text that gets drawn."
+ (at X Y [ANGLE])
+
+ # Valid horizontal justification values are center, right, and left. Valid
+ # vertical justification values are center, top, bottom.
+ (justify HORIZONTAL_JUSTIFY VERTICAL_JUSTIFY)
+ (font [FONT] (size HEIGHT WIDTH) [italic] [bold])
+ (visible YES)
+ (fill FILL_TYPE)
+ )
+ */
+
+ T tok;
+ bool sawAt = false;
+ bool sawFill = false;
+ bool sawFont = false;
+ bool sawVis = false;
+ bool sawJust = false;
+ bool sawText = false;
+
+ while( ( tok = NextTok() ) != T_RIGHT )
+ {
+ if( tok == T_LEFT )
+ {
+ tok = NextTok();
+
+ switch( tok )
+ {
+ case T_at:
+ if( sawAt )
+ Duplicate( tok );
+ parseAt( &me->pos, &me->angle );
+ sawAt = true;
+ break;
+
+ case T_fill:
+ if( sawFill )
+ Duplicate( tok );
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_none:
+ case T_filled:
+ case T_transparent:
+ me->fillType = tok;
+ break;
+ default:
+ Expecting( "none|filled|transparent" );
+ }
+ NeedRIGHT();
+ sawFill = true;
+ break;
+
+ case T_justify:
+ if( sawJust )
+ Duplicate( tok );
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_center:
+ case T_right:
+ case T_left:
+ me->hjustify = tok;
+ break;
+ default:
+ Expecting( "center|right|left" );
+ }
+
+ tok = NeedSYMBOL();
+ switch( tok )
+ {
+ case T_center:
+ case T_top:
+ case T_bottom:
+ me->vjustify = tok;
+ break;
+ default:
+ Expecting( "center|top|bottom" );
+ }
+ NeedRIGHT();
+ sawJust = true;
+ break;
+
+ case T_visible:
+ if( sawVis )
+ Duplicate( tok );
+ parseBool( &me->isVisible );
+ NeedRIGHT();
+ sawVis = true;
+ break;
+
+ case T_font:
+ if( sawFont )
+ Duplicate( tok );
+ sawFont = true;
+ parseFont( &me->font );
+ break;
+
+ default:
+ Expecting( "at|justify|font|visible|fill" );
+ }
+ }
+ else
+ {
+ if( !IsSymbol( tok ) && tok != T_NUMBER )
+ Expecting( T_STRING );
+
+ if( sawText )
+ Duplicate( tok );
+ sawText = true;
+
+ me->text = wxString::FromUTF8( CurText() );
+ }
+ }
+}
+
diff --git a/new/sch_sweet_parser.h b/new/sch_sweet_parser.h
new file mode 100644
index 0000000..d5424f9
--- /dev/null
+++ b/new/sch_sweet_parser.h
@@ -0,0 +1,132 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef SCH_SWEET_PARSER_H_
+#define SCH_SWEET_PARSER_H_
+
+#include <utf8.h>
+#include <sweet_lexer.h>
+
+
+typedef int STROKE;
+
+namespace SCH {
+
+class LIB_TABLE;
+class PART;
+class POINT;
+
+
+// GRAPHICS
+class POLY_LINE;
+class RECTANGLE;
+class CIRCLE;
+class ARC;
+class BEZIER;
+class GR_TEXT;
+class PIN;
+class FONT;
+class PROPERTY;
+
+struct PINTEXT;
+struct TEXT_EFFECTS;
+
+
+/**
+ * Class SWEET_PARSER
+ * scans a Sweet string as input and stuffs a PART.
+ * <p>
+ * Most functions in this class throw IO_ERROR and PARSE_ERROR. The IO_ERROR can
+ * happen if there is difficulty reading the input stream.
+ */
+class SWEET_PARSER : public SWEET_LEXER
+{
+ LIB_TABLE* libs;
+ int contains; // separate from PART::contains until done
+ // so we can see what we inherited from base PART
+
+ // all these private functions rely on libs having been set via the public API, Parse( PART*)
+
+ void parseExtends( PART* me );
+
+ void parsePolyLine( POLY_LINE* me );
+ void parseBezier( BEZIER* me );
+ void parseRectangle( RECTANGLE* me );
+ void parseCircle( CIRCLE* me );
+ void parseArc( ARC* me );
+ void parseText( GR_TEXT* me );
+ void parseAt( POINT* pos, float* angle );
+ void parseBool( bool* aBool );
+ void parseFont( FONT* me );
+ void parsePinText( PINTEXT* me );
+ void parseTextEffects( TEXT_EFFECTS* me );
+ void parseKeywords( PART* me );
+ void parseAlternates( PART* me );
+ void parsePropertyDel( PART* me );
+
+ void parsePin( PIN* me );
+ void parsePinDel( PART* me );
+ void parsePinSwap( PART* me );
+ void parsePinRenum( PART* me );
+ void parsePinRename( PART* me );
+ void parsePinMerge( PART* me );
+ void parseStroke( STROKE* me );
+
+public:
+
+ /**
+ * Constructor SWEET_PARSER
+ * takes aSweet string and gets ready to parse it.
+ * @param aSweet is the full description of a PART.
+ * @param aSource is used in error reporting and describes where the Sweet
+ * string came from in any appropriate way.
+ */
+ SWEET_PARSER( const STRING& aSweet, const wxString& aSource = wxEmptyString ) :
+ SWEET_LEXER( aSweet, aSource ),
+ libs( 0 ),
+ contains( 0 )
+ {
+ }
+
+ SWEET_PARSER( LINE_READER* aLineReader ) :
+ SWEET_LEXER( aLineReader ),
+ libs( 0 ),
+ contains( 0 )
+ {
+ }
+
+ /**
+ * Function Parse
+ * stuffs @a aPart with data from this SWEET_LEXER, which has its own
+ * sweet string source.
+ * @param aPart is what is to be stuffed.
+ * @param aTable is the view of the LIBs in play.
+ */
+ void Parse( PART* aPart, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_ERROR );
+};
+
+} // namespace SCH
+
+#endif // SCH_SWEET_PARSER_H_
+
diff --git a/new/sweet.i b/new/sweet.i
new file mode 100644
index 0000000..2ce1ad9
--- /dev/null
+++ b/new/sweet.i
@@ -0,0 +1,38 @@
+/**
+ * Interface Sweet
+ * is a Python interface file for SWIG. Languages other than Python can
+ * possibly also be supported with little addtional work.
+ */
+%module sweet
+
+%{
+
+#include <dsnlexer.h>
+#include <sch_lib_table_lexer.h>
+#include <sch_lib_table.h>
+#include <sch_lpid.h>
+#include <sweet_lexer.h>
+#include <sch_part.h>
+
+%}
+
+%include "std_string.i"
+%include "std_deque.i"
+%include "utf8.h"
+
+%ignore LINE_READER::operator char* () const;
+
+namespace SCH {
+%ignore PART::operator=( const PART& other );
+}
+
+%include "import_export.h"
+%include "richio.h"
+%include "dsnlexer.h"
+//%include "sch_lib_table_lexer.h"
+%include "sch_lpid.h"
+%include "sch_lib.h"
+%include "sch_lib_table.h"
+%include "sweet_lexer.h"
+
+%include "sch_part.h"
diff --git a/new/sweet.keywords b/new/sweet.keywords
new file mode 100644
index 0000000..88e23fe
--- /dev/null
+++ b/new/sweet.keywords
@@ -0,0 +1,81 @@
+alternates
+anchor
+arc
+at
+bezier
+bold
+bottom
+center
+circle
+clock
+clock_low
+datasheet
+effects
+end
+end_angle
+extends
+falling_edge
+fill
+filled
+font
+footprint
+hide
+in
+inout
+input_low
+inverted
+inverted_clk
+italic
+justify
+keywords
+left
+length
+line
+model
+no
+non_logic
+none
+open_collector
+open_emitter
+out
+pad
+pads
+part
+passive
+pin
+pin_del
+pin_merge
+pin_rename
+pin_renum
+pin_swap
+polyline
+pos
+power_in
+power_out
+property
+property_del
+pts
+radius
+rectangle
+reference
+right
+route_alt_swap
+route_pin_swap
+signal
+signals
+size
+start
+start_angle
+stroke
+text
+top
+transparent
+tristate
+unconnected
+units
+unspecified
+value
+visible
+xy
+yes
+
diff --git a/new/sweet_edit.cpp b/new/sweet_edit.cpp
new file mode 100644
index 0000000..86c2039
--- /dev/null
+++ b/new/sweet_edit.cpp
@@ -0,0 +1,244 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+// wxWidgets imports
+#include <wx/wx.h>
+#include <wx/graphics.h>
+#include <wx/timer.h>
+#include <wx/event.h>
+#include <wx/wxprec.h>
+#include <wx/cmdline.h>
+
+// Graphics Abstraction Layer imports
+#include <gal/common/definitions.h>
+#include <gal/common/graphics_abstraction_layer.h>
+#include <gal/opengl/opengl_gal.h>
+#include <gal/common/stroke_font.h>
+#include <gal/common/color4d.h>
+#include <gal/font/newstroke_font.h>
+
+#include <math/vector2d.h>
+#include <math/matrix3x3.h>
+
+#include <sweet_editor_panel.h>
+
+#define screenSizeX 640
+#define screenSizeY 480
+
+
+
+/**
+ * Class SWEET_EDIT
+ * implements an editor for SWEET, including support for inheritance and
+ * LIB_TABLE configuration.
+ */
+class SWEET_FRAME: public wxFrame
+{
+public:
+ // @brief Constructor
+ SWEET_FRAME( wxWindow* parent, wxWindowID id, const wxString& title,
+ const wxPoint& pos, const wxSize& size );
+
+ // @brief Destructor
+ ~SWEET_FRAME();
+
+private:
+ bool m_isReady;
+ bool m_isPanning;
+
+ SCH::CANVAS* m_gal;
+
+ wxSize m_screenSize;
+ VECTOR2D m_worldSize;
+ VECTOR2D m_startMousePoint;
+ VECTOR2D m_startLookAtPoint;
+
+ /*
+ double m_alpha;
+
+ MATRIX3x3D m_startMatrix;
+
+ STROKE_FONT m_font;
+ */
+
+ // Event handlers
+ void OnMotion( wxMouseEvent& event );
+ void OnMouseWheel( wxMouseEvent& event );
+ void OnRightDown( wxMouseEvent& event );
+ void OnRightUp( wxMouseEvent& event );
+// void OnRedraw( wxCommandEvent& event );
+};
+
+
+SWEET_FRAME::SWEET_FRAME( wxWindow* parent, wxWindowID id, const wxString& title,
+ const wxPoint& pos, const wxSize& size ) :
+ wxFrame( parent, id, title, pos, size ),
+ m_screenSize( size.x, size.y )
+{
+ m_isPanning = false;
+
+ SWEET_EDITOR_PANEL* panel =
+ new SWEET_EDITOR_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), wxSize( -1, -1 ), 0 );
+
+ m_gal = (SCH::CANVAS*) panel->FindWindowByName( wxT( "GLCanvas" ), panel );
+
+ wxASSERT( m_gal );
+
+ m_gal->SetMouseListener( this );
+
+ Connect( wxEVT_MOTION, wxMouseEventHandler( SWEET_FRAME::OnMotion ) );
+ Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( SWEET_FRAME::OnMouseWheel ) );
+ Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( SWEET_FRAME::OnRightDown ) );
+ Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( SWEET_FRAME::OnRightUp ) );
+}
+
+
+SWEET_FRAME::~SWEET_FRAME()
+{
+ delete m_gal;
+}
+
+
+void SWEET_FRAME::OnMotion( wxMouseEvent& event )
+{
+ VECTOR2D mousePoint( event.GetX(), event.GetY() );
+
+ if( event.Dragging() )
+ {
+ if( m_isPanning )
+ {
+ MATRIX3x3D matrix = m_gal->GetWorldScreenMatrix().Inverse();
+ VECTOR2D delta = matrix.GetScale().x * ( m_startMousePoint - mousePoint );
+
+ m_gal->SetLookAtPoint( m_startLookAtPoint + delta );
+
+ m_gal->PaintScene();
+ }
+ }
+ else
+ {
+ m_gal->DrawCursor( mousePoint );
+ }
+}
+
+
+void SWEET_FRAME::OnMouseWheel( wxMouseEvent& event )
+{
+ double zoomScale = ( event.GetWheelRotation() > 0.0 ) ? 1.1 : 0.9;
+
+ m_gal->SetZoomFactor( m_gal->GetZoomFactor() * zoomScale );
+ m_gal->PaintScene();
+}
+
+
+void SWEET_FRAME::OnRightDown( wxMouseEvent& event )
+{
+ m_isPanning = true;
+ m_startMousePoint = VECTOR2D( event.GetX(), event.GetY() );
+ m_startLookAtPoint = m_gal->GetLookAtPoint();
+}
+
+
+void SWEET_FRAME::OnRightUp( wxMouseEvent& event )
+{
+ m_isPanning = false;
+}
+
+
+static const wxCmdLineEntryDesc g_cmdLineDesc[] = {
+ {
+ wxCMD_LINE_PARAM,
+ NULL,
+ NULL,
+ "filename of libtable",
+ wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE
+ },
+ { wxCMD_LINE_NONE }
+};
+
+
+class GAL_TEST_APPLICATION: public wxApp
+{
+public:
+ GAL_TEST_APPLICATION();
+
+private:
+ virtual bool OnInit();
+ virtual int OnExit();
+ virtual int OnRun();
+ virtual void OnInitCmdLine( wxCmdLineParser& aParser );
+ virtual bool OnCmdLineParsed( wxCmdLineParser& aParser );
+};
+
+
+GAL_TEST_APPLICATION::GAL_TEST_APPLICATION()
+{
+}
+
+
+bool GAL_TEST_APPLICATION::OnInit()
+{
+ if ( !wxApp::OnInit() )
+ return false;
+
+ SWEET_FRAME* frame = new SWEET_FRAME( (wxFrame *) NULL,
+ -1, wxT( "SWEET Editor" ),
+ wxPoint( screenSizeX + 10, 0 ),
+ wxSize( screenSizeX, screenSizeY ) );
+
+ frame->Show( true );
+
+ return true;
+}
+
+
+int GAL_TEST_APPLICATION::OnExit()
+{
+ return 0;
+}
+
+
+int GAL_TEST_APPLICATION::OnRun()
+{
+ int exitcode = wxApp::OnRun();
+ return exitcode;
+}
+
+
+void GAL_TEST_APPLICATION::OnInitCmdLine( wxCmdLineParser& parser )
+{
+ parser.SetDesc( g_cmdLineDesc );
+ parser.SetSwitchChars( wxT( "-" ) );
+}
+
+
+bool GAL_TEST_APPLICATION::OnCmdLineParsed( wxCmdLineParser& parser )
+{
+ return true;
+}
+
+
+DECLARE_APP( GAL_TEST_APPLICATION )
+
+IMPLEMENT_APP( GAL_TEST_APPLICATION )
diff --git a/new/sweet_editor_panel.cpp b/new/sweet_editor_panel.cpp
new file mode 100644
index 0000000..db2fbda
--- /dev/null
+++ b/new/sweet_editor_panel.cpp
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 6 2011)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include <sweet_editor_panel.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+SWEET_EDITOR_PANEL::SWEET_EDITOR_PANEL( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+ wxBoxSizer* bSizer2;
+ bSizer2 = new wxBoxSizer( wxVERTICAL );
+
+ m_top_bottom = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
+ m_top_bottom->SetSashGravity( 1 );
+ m_top_bottom->Connect( wxEVT_IDLE, wxIdleEventHandler( SWEET_EDITOR_PANEL::m_top_bottomOnIdle ), NULL, this );
+
+ m_panel9 = new wxPanel( m_top_bottom, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer10;
+ bSizer10 = new wxBoxSizer( wxVERTICAL );
+
+ m_splitter3 = new wxSplitterWindow( m_panel9, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
+ m_splitter3->Connect( wxEVT_IDLE, wxIdleEventHandler( SWEET_EDITOR_PANEL::m_splitter3OnIdle ), NULL, this );
+
+ m_scrolledTextWindow = new wxScrolledWindow( m_splitter3, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_scrolledTextWindow->SetScrollRate( 5, 5 );
+ wxStaticBoxSizer* m_scrolledTextSizer;
+ m_scrolledTextSizer = new wxStaticBoxSizer( new wxStaticBox( m_scrolledTextWindow, wxID_ANY, _("Sweet") ), wxVERTICAL );
+
+ m_sweet_scroll_window = new wxTextCtrl( m_scrolledTextWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxALWAYS_SHOW_SB );
+ m_scrolledTextSizer->Add( m_sweet_scroll_window, 1, wxALL|wxEXPAND, 5 );
+
+ m_scrolledTextWindow->SetSizer( m_scrolledTextSizer );
+ m_scrolledTextWindow->Layout();
+ m_scrolledTextSizer->Fit( m_scrolledTextWindow );
+ m_gal_scrolled_window = new wxScrolledWindow( m_splitter3, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE|wxHSCROLL|wxVSCROLL );
+ m_gal_scrolled_window->SetScrollRate( 5, 5 );
+ wxStaticBoxSizer* m_gal_sizer;
+ m_gal_sizer = new wxStaticBoxSizer( new wxStaticBox( m_gal_scrolled_window, wxID_ANY, _("Visual Part") ), wxVERTICAL );
+
+ m_gal = new SCH::CANVAS( m_gal_scrolled_window );
+ m_gal_sizer->Add( m_gal, 1, wxEXPAND, 5 );
+
+ m_gal_scrolled_window->SetSizer( m_gal_sizer );
+ m_gal_scrolled_window->Layout();
+ m_gal_sizer->Fit( m_gal_scrolled_window );
+ m_splitter3->SplitVertically( m_scrolledTextWindow, m_gal_scrolled_window, 0 );
+ bSizer10->Add( m_splitter3, 1, wxEXPAND, 5 );
+
+ m_panel9->SetSizer( bSizer10 );
+ m_panel9->Layout();
+ bSizer10->Fit( m_panel9 );
+ m_scrolledWindow3 = new wxScrolledWindow( m_top_bottom, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow3->SetScrollRate( 5, 5 );
+ wxStaticBoxSizer* sbSizer1;
+ sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_scrolledWindow3, wxID_ANY, _("Parsing Errors") ), wxVERTICAL );
+
+ m_htmlWin2 = new wxHtmlWindow( m_scrolledWindow3, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO );
+ sbSizer1->Add( m_htmlWin2, 1, wxALL|wxEXPAND, 5 );
+
+ m_scrolledWindow3->SetSizer( sbSizer1 );
+ m_scrolledWindow3->Layout();
+ sbSizer1->Fit( m_scrolledWindow3 );
+ m_top_bottom->SplitHorizontally( m_panel9, m_scrolledWindow3, 0 );
+ bSizer2->Add( m_top_bottom, 1, wxEXPAND, 5 );
+
+ this->SetSizer( bSizer2 );
+ this->Layout();
+}
+
+SWEET_EDITOR_PANEL::~SWEET_EDITOR_PANEL()
+{
+}
diff --git a/new/sweet_editor_panel.fbp b/new/sweet_editor_panel.fbp
new file mode 100644
index 0000000..29fd265
--- /dev/null
+++ b/new/sweet_editor_panel.fbp
@@ -0,0 +1,938 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="10" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">sweet_editor_panel</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">MyProject1</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Panel" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_managed">0</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">SWEET_EDITOR_PANEL</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="show">1</property>
+ <property name="size">500,300</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxTAB_TRAVERSAL</property>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer2</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxSplitterWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_pane_size">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_top_bottom</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="sashgravity">1</property>
+ <property name="sashpos">0</property>
+ <property name="sashsize">-1</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="splitmode">wxSPLIT_HORIZONTAL</property>
+ <property name="style">wxSP_3D</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnSplitterDClick"></event>
+ <event name="OnSplitterSashPosChanged"></event>
+ <event name="OnSplitterSashPosChanging"></event>
+ <event name="OnSplitterUnsplit"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="splitteritem" expanded="1">
+ <object class="wxPanel" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_panel9</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxTAB_TRAVERSAL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer10</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxSplitterWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_pane_size">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_splitter3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="sashgravity">0.0</property>
+ <property name="sashpos">0</property>
+ <property name="sashsize">-1</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="splitmode">wxSPLIT_VERTICAL</property>
+ <property name="style">wxSP_3D</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnSplitterDClick"></event>
+ <event name="OnSplitterSashPosChanged"></event>
+ <event name="OnSplitterSashPosChanging"></event>
+ <event name="OnSplitterUnsplit"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="splitteritem" expanded="1">
+ <object class="wxScrolledWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_scrolledTextWindow</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="scroll_rate_x">5</property>
+ <property name="scroll_rate_y">5</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxHSCROLL|wxVSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxStaticBoxSizer" expanded="0">
+ <property name="id">wxID_ANY</property>
+ <property name="label">Sweet</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_scrolledTextSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <event name="OnUpdateUI"></event>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength">0</property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_sweet_scroll_window</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_MULTILINE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxALWAYS_SHOW_SB</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="splitteritem" expanded="0">
+ <object class="wxScrolledWindow" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_gal_scrolled_window</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="scroll_rate_x">5</property>
+ <property name="scroll_rate_y">5</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxHSCROLL|wxVSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxStaticBoxSizer" expanded="0">
+ <property name="id">wxID_ANY</property>
+ <property name="label">Visual Part</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_gal_sizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <event name="OnUpdateUI"></event>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="CustomControl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="class">SCH::CANVAS</property>
+ <property name="close_button">1</property>
+ <property name="construction">m_gal = new SCH::CANVAS( m_gal_scrolled_window );</property>
+ <property name="context_help"></property>
+ <property name="context_menu">0</property>
+ <property name="declaration">SCH::CANVAS* m_gal;</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="include">#include &lt;sch_canvas.h&gt;</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_gal</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="settings"></property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxFULL_REPAINT_ON_RESIZE</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="splitteritem" expanded="1">
+ <object class="wxScrolledWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_scrolledWindow3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="scroll_rate_x">5</property>
+ <property name="scroll_rate_y">5</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxHSCROLL|wxVSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxStaticBoxSizer" expanded="1">
+ <property name="id">wxID_ANY</property>
+ <property name="label">Parsing Errors</property>
+ <property name="minimum_size"></property>
+ <property name="name">sbSizer1</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <event name="OnUpdateUI"></event>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxHtmlWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_name"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="layer"></property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_htmlWin2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="position"></property>
+ <property name="resize">Resizable</property>
+ <property name="row"></property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxHW_SCROLLBAR_AUTO</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHtmlCellClicked"></event>
+ <event name="OnHtmlCellHover"></event>
+ <event name="OnHtmlLinkClicked"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/new/sweet_editor_panel.h b/new/sweet_editor_panel.h
new file mode 100644
index 0000000..37033f8
--- /dev/null
+++ b/new/sweet_editor_panel.h
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 6 2011)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __sweet_editor_panel__
+#define __sweet_editor_panel__
+
+#include <wx/intl.h>
+
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/sizer.h>
+#include <wx/statbox.h>
+#include <wx/scrolwin.h>
+#include <sch_canvas.h>
+#include <wx/splitter.h>
+#include <wx/panel.h>
+#include <wx/html/htmlwin.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class SWEET_EDITOR_PANEL
+///////////////////////////////////////////////////////////////////////////////
+class SWEET_EDITOR_PANEL : public wxPanel
+{
+ private:
+
+ protected:
+ wxSplitterWindow* m_top_bottom;
+ wxPanel* m_panel9;
+ wxSplitterWindow* m_splitter3;
+ wxScrolledWindow* m_scrolledTextWindow;
+ wxTextCtrl* m_sweet_scroll_window;
+ wxScrolledWindow* m_gal_scrolled_window;
+ SCH::CANVAS* m_gal;
+ wxScrolledWindow* m_scrolledWindow3;
+ wxHtmlWindow* m_htmlWin2;
+
+ public:
+
+ SWEET_EDITOR_PANEL( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL );
+ ~SWEET_EDITOR_PANEL();
+
+ void m_top_bottomOnIdle( wxIdleEvent& )
+ {
+ m_top_bottom->SetSashPosition( 0 );
+ m_top_bottom->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SWEET_EDITOR_PANEL::m_top_bottomOnIdle ), NULL, this );
+ }
+
+ void m_splitter3OnIdle( wxIdleEvent& )
+ {
+ m_splitter3->SetSashPosition( 0 );
+ m_splitter3->Disconnect( wxEVT_IDLE, wxIdleEventHandler( SWEET_EDITOR_PANEL::m_splitter3OnIdle ), NULL, this );
+ }
+
+};
+
+#endif //__sweet_editor_panel__
diff --git a/new/sweet_spec_for_schematic_parts_EN.fodt b/new/sweet_spec_for_schematic_parts_EN.fodt
new file mode 100644
index 0000000..c149969
--- /dev/null
+++ b/new/sweet_spec_for_schematic_parts_EN.fodt
@@ -0,0 +1,732 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta>
+ <meta:creation-date>2011-04-18T01:23:31</meta:creation-date>
+ <meta:editing-duration>PT17M33S</meta:editing-duration>
+ <meta:editing-cycles>4</meta:editing-cycles>
+ <meta:generator>LibreOffice/3.4$Unix LibreOffice_project/340m1$Build-301</meta:generator>
+
+
+
+
+ <dc:date>2011-08-25T22:29:36</dc:date><dc:creator>Dick Hollenbeck</dc:creator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="11" meta:paragraph-count="340" meta:word-count="2770" meta:character-count="17364" meta:non-whitespace-character-count="13943"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">65</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">23670</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">12026</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">8008</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">11061</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">65</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">23668</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">12090</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">3</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">205</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <ooo:library-embedded ooo:name="Standard"/>
+ </ooo:libraries>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Tahoma1" svg:font-family="Tahoma"/>
+ <style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="&apos;Bitstream Vera Sans Mono&apos;" style:font-adornments="Roman" style:font-family-generic="modern" style:font-pitch="fixed"/>
+ <style:font-face style:name="Times New Roman" svg:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Lucida Sans Unicode" svg:font-family="&apos;Lucida Sans Unicode&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties fo:wrap-option="wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Lucida Sans Unicode" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Arial" fo:font-size="14pt" style:font-name-asian="Lucida Sans Unicode" style:font-size-asian="14pt" style:font-name-complex="Tahoma" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0835in"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-name-complex="Tahoma1"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Tahoma1" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-name-complex="Tahoma1"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="1" style:class="text">
+ <style:text-properties fo:font-size="115%" fo:font-weight="bold" style:font-size-asian="115%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.1965in" fo:margin-right="0in" fo:text-indent="-0.1965in" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="code0" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="chapter">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0201in">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" fo:font-size="10pt"/>
+ </style:style>
+ <style:style style:name="comment" style:family="paragraph" style:parent-style-name="code0" style:class="chapter">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0201in"/>
+ <style:text-properties fo:color="#006b6b"/>
+ </style:style>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Table_20_Heading" style:display-name="Table Heading" style:family="paragraph" style:parent-style-name="Table_20_Contents" style:class="extra">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="2" style:class="text">
+ <style:text-properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="14pt" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-style-complex="italic" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="3" style:class="text">
+ <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_4" style:display-name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="4" style:class="text">
+ <style:text-properties fo:font-size="85%" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="85%" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="85%" style:font-style-complex="italic" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_5" style:display-name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="5" style:class="text">
+ <style:text-properties fo:font-size="85%" fo:font-weight="bold" style:font-size-asian="85%" style:font-weight-asian="bold" style:font-size-complex="85%" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_6" style:display-name="Heading 6" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="6" style:class="text">
+ <style:text-properties fo:font-size="75%" fo:font-weight="bold" style:font-size-asian="75%" style:font-weight-asian="bold" style:font-size-complex="75%" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Footnote_20_Symbol" style:display-name="Footnote Symbol" style:family="text"/>
+ <style:style style:name="Footnote_20_anchor" style:display-name="Footnote anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
+ <style:text-properties fo:color="#000080" fo:language="zxx" fo:country="none" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:language-asian="zxx" style:country-asian="none" style:language-complex="zxx" style:country-complex="none"/>
+ </style:style>
+ <style:style style:name="Visited_20_Internet_20_Link" style:display-name="Visited Internet Link" style:family="text">
+ <style:text-properties fo:color="#800000" fo:language="zxx" fo:country="none" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:language-asian="zxx" style:country-asian="none" style:language-complex="zxx" style:country-complex="none"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.3in" fo:text-indent="-0.3in" fo:margin-left="0.3in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.4in" fo:text-indent="-0.4in" fo:margin-left="0.4in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.5in" fo:text-indent="-0.5in" fo:margin-left="0.5in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.6in" fo:text-indent="-0.6in" fo:margin-left="0.6in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.7in" fo:text-indent="-0.7in" fo:margin-left="0.7in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.8in" fo:text-indent="-0.8in" fo:margin-left="0.8in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.9in" fo:text-indent="-0.9in" fo:margin-left="0.9in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1in" fo:text-indent="-1in" fo:margin-left="1in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.1in" fo:text-indent="-1.1in" fo:margin-left="1.1in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.2in" fo:text-indent="-1.2in" fo:margin-left="1.2in"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" text:citation-style-name="Footnote_20_Symbol" text:citation-body-style-name="Footnote_20_anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <style:default-page-layout>
+ <style:page-layout-properties style:writing-mode="lr-tb" style:layout-grid-standard-mode="true"/>
+ </style:default-page-layout>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="code0">
+ <style:text-properties fo:color="#000000"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="code0">
+ <style:text-properties style:use-window-font-color="true"/>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph" style:parent-style-name="comment">
+ <style:text-properties fo:color="#800000"/>
+ </style:style>
+ <style:style style:name="P4" style:family="paragraph" style:parent-style-name="comment">
+ <style:text-properties fo:color="#008080"/>
+ </style:style>
+ <style:style style:name="P5" style:family="paragraph" style:parent-style-name="code0">
+ <style:paragraph-properties fo:break-before="page"/>
+ </style:style>
+ <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Heading_20_1">
+ <style:paragraph-properties fo:break-before="page"/>
+ </style:style>
+ <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Heading_20_1">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name=""/>
+ <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Heading_20_1">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Heading_20_1" style:list-style-name="">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Heading_20_1">
+ <style:paragraph-properties fo:break-before="page"/>
+ </style:style>
+ <style:style style:name="T1" style:family="text">
+ <style:text-properties fo:color="#0000ff"/>
+ </style:style>
+ <style:style style:name="T2" style:family="text">
+ <style:text-properties fo:color="#800000"/>
+ </style:style>
+ <style:style style:name="T3" style:family="text">
+ <style:text-properties fo:color="#006b6b"/>
+ </style:style>
+ <style:style style:name="T4" style:family="text">
+ <style:text-properties fo:color="#000000"/>
+ </style:style>
+ <style:style style:name="T5" style:family="text">
+ <style:text-properties style:use-window-font-color="true"/>
+ </style:style>
+ <style:style style:name="T6" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="8.5in" fo:page-height="11in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:footnote-max-height="0in">
+ <style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text text:use-soft-page-breaks="true">
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ </text:sequence-decls>
+ <text:h text:style-name="P7" text:outline-level="1">SWEET <text:s/>S-Expression Grammar Describing a </text:h>
+ <text:h text:style-name="P10" text:outline-level="1">Schematic Part String Format Specification </text:h>
+ <text:h text:style-name="P7" text:outline-level="1"/>
+ <text:h text:style-name="P8" text:outline-level="1">Authors:</text:h>
+ <text:h text:style-name="P8" text:outline-level="1">Wayne Stambaugh</text:h>
+ <text:h text:style-name="P8" text:outline-level="1">Dick Hollenbeck</text:h>
+ <text:h text:style-name="P8" text:outline-level="1"/>
+ <text:h text:style-name="P8" text:outline-level="1"/>
+ <text:h text:style-name="P8" text:outline-level="1">Original Edits: <text:tab/>January 2011</text:h>
+ <text:h text:style-name="P8" text:outline-level="1">Latest Edits:<text:tab/> <text:tab/>August 2011</text:h>
+ <text:h text:style-name="P8" text:outline-level="1"/>
+ <text:h text:style-name="P6" text:outline-level="1">Introduction</text:h>
+ <text:p text:style-name="Text_20_body">The purpose of this document is to define the new format for the Kicad schematic part descriptions, as expressed using the new SWEET grammar. <text:s/>This format supersedes the old file format defined in the file “library_file_format_EN.odt. <text:s/>The idea of component library files is no longer valid. <text:s/>The unit of retrieval from the new distributed library system is the part, not a library. <text:s text:c="2"/>To learn more about the new distributed library system see the design.h document in the Kicad source tree, or better yet, the Doxygen generated material therefrom.</text:p>
+ <text:p text:style-name="Text_20_body">The SWEET grammar format is based on the Specttra DSN lexer<text:note text:id="ftn1" text:note-class="footnote"><text:note-citation>1</text:note-citation><text:note-body>
+ <text:p text:style-name="Footnote">See source files dsnlexer.cpp and dsnlexer.h in the Kicad source code for more information about how the DSN lexer works.</text:p></text:note-body></text:note> work graciously coded and contributed by Dick Hollenbeck. <text:s/>For those not familiar with the DSN format, it is very similar the the LISP programming language in that keywords are delimited by braces. <text:s/>It is also known as an S-expression format. <text:s/>A keyword may have zero or more tokens that behave like parameters for the keyword. <text:s/>Tokens may be defined as additional keywords creating a programming language like structure. <text:s/>The decision to change to this format is driven by a desire to provide a more robust file lexer, a human readable file format, better retrieval error reporting, and improved extensibility. <text:s/>The other driving factor is to provide a more robust format for handling the various requirements of the component library developers.</text:p>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1">Front Matter</text:h>
+ <text:p text:style-name="Text_20_body">This is a living document designed to be kept synchronized with the actual source code. <text:s/>If you modify the lexer, please update this specification as courtesy to other developers. <text:s/>There are many third party tools that are used to generate, manipulate, and parse component library files. <text:s/>Keeping this document current is vital to developers of these tools.</text:p>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1">Formatting</text:h>
+ <text:p text:style-name="Text_20_body">The DSN lexer enforces strict formatting requirements. <text:s/>Files must be encoded in UTF8 format. <text:s/>All lexer keywords are comprised of lower case letters, numbers, and underscores. <text:s/>Tokens may be any alphanumeric character delimited by a white space character. <text:s/>Each new delimited level of keywords is indented to make files easier to read and edit with a plain text editor. <text:s/>Comments are supported as separate lines indented at the same level as the current keyword delimiter and begin with the # character. <text:s/>In line comments are not allowed. <text:s/>There is more information on s-expression support in the Kicad source tree in file Documentation/s-expressions.txt.</text:p>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1">Using this document</text:h>
+ <text:p text:style-name="Text_20_body">This document is nothing more than several well commented part files. <text:s/>You should always be able to copy the text from the opening delimiter “(“ to the closing delimeter “)†into a file and open it with the library part file editor or library part viewer in Kicad&apos;s schematic capture program EESchema. <text:s/>It may not actually draw a useful component or be a very useful part but it should always be syntactically correct. <text:s/>The comments for a specific keyword always appears above the keyword it describes. <text:s/>Keywords defined within brackets [] are optional. <text:s/>A simple syntax coloring scheme has been employed to make this document more readable. <text:s/>Keywords are highlighted in <text:span text:style-name="T1">blue</text:span>, <text:s/>comments are highlighted in <text:span text:style-name="T3">turquoise</text:span>, and strings are highlighted in <text:span text:style-name="T2">red</text:span>.</text:p>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1"><text:soft-page-break/>Logical coordinates.</text:h>
+ <text:p text:style-name="Text_20_body">The SWEET grammar expresses schematic parts using a coordinate system without units of measure. <text:s/>That is, logical coordinates used and are dimensionless. <text:s/>The advantage of having coordinates without units is any item that has an integer (non-fractional) coordinate in x and y, will be “on gridâ€. <text:s/>This helps ensure all connectable items such as pins, wires, junctions, etc., can be easily connected using normal grid snap. <text:s/>The normal spacing between neighboring part pins is 1 logical unit, and it is dimensionless. <text:s/>In fact, this is the definition of what a logical unit is, the normal spacing between two neighboring pins. <text:s text:c="3"/>Only non-connectable objects (e.g. arcs, text, etc.) should have non-integer coordinates. <text:s/>The zoom factor at time of printing or plotting determines the physical size of any drawing output.</text:p>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1">Line Widths</text:h>
+ <text:p text:style-name="Text_20_body">Line widths are given as a percent of a logical unit. <text:s/>In other words, a line width of 1 means 1/100<text:span text:style-name="T6">th</text:span> of a logical unit. <text:s/>Recall that a logical unit of 1 is the normal spacing between two neighboring schematic pins. <text:s text:c="2"/>So a line width of 50 would mean 50/100 of a pin interval, or half the normal space between two pins. <text:s/>A line width of 50 represents a very wide line indeed, a more normal line width would be about 1-5 <text:s/>(percent).</text:p>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1">An example file showing syntax for all drawable item types.</text:h>
+ <text:p text:style-name="comment"># The schematic part element is the largest entity addressed by the SWEET grammar.</text:p>
+ <text:p text:style-name="comment"># A schematic part can be inherited from another part by using the “extendsâ€</text:p>
+ <text:p text:style-name="comment"># keyword.</text:p>
+ <text:p text:style-name="comment"># The part name is normally the file name, although SWEET parts will not always</text:p>
+ <text:p text:style-name="comment"># exist as mere files. <text:s/>They are actually best thought of as strings held in a</text:p>
+ <text:p text:style-name="comment"># a container called a lib_source. The NAME_HINT is to be used in a manner yet to</text:p>
+ <text:p text:style-name="comment"># be determined, depending on the context from which the SWEET part came from.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T5">NAME_HINT [</text:span><text:span text:style-name="T1">extends</text:span> <text:span text:style-name="T5">LPID]</text:span> </text:p>
+ <text:p text:style-name="P2"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Change the anchor position to something other than 0, 0. <text:s/>Anchor coordinates</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># must be integers.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">anchor</text:span> (<text:span text:style-name="T1">at </text:span>X Y))]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># The reference token is a reserved property. <text:s/>Other reserved properties are</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># value, footprint, datasheet, model, and keywords.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">reference</text:span> <text:span text:style-name="T5">REF</text:span> </text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Effects define how a property is displayed. <text:s/>If no effect is defined then</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># the property is not displayed. <text:s/>Effects can also be used to override the</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># effects of a property in an inherited part. <text:s/>When (effects...) is used</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># in a COMPONENT to override the effects of a PART, the PROPERTY </text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># specifier must be present.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[<text:bookmark-start text:name="__DdeLink__1991_2022311872"/>(<text:span text:style-name="T1">effects</text:span> [PROPERTY]</text:p>
+ <text:p text:style-name="P3"/>
+ <text:p text:style-name="comment"><text:s text:c="6"/># Position requires an X and Y coordinate. <text:s/>Position coordinates can be</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># non-integer. <text:s/>Angle is in degrees and defaults to 0 if not defined.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="6"/>(<text:span text:style-name="T1">at </text:span>X Y [ANGLE])</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="6"/><text:bookmark-start text:name="__DdeLink__1994_2124759253"/># The FONT value needs to be defined. <text:s/>Currently, EESchema does not support</text:p>
+ <text:p text:style-name="comment"><text:soft-page-break/><text:s text:c="6"/># different fonts. <text:s/>In the future this feature may be implemented and at</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># that time FONT will have to be defined. <text:s/>Initially, only the font size &amp;</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># style are required. <text:s/>Italic and bold styles are optional. <text:s/>The font size</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># height and width are in units yet to be determined. <text:s/>Only a variance</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># from defaults needs to be stated.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="6"/>[(<text:span text:style-name="T1">font</text:span> <text:span text:style-name="T5">[</text:span>FONT] (<text:span text:style-name="T1">size </text:span>HEIGHT WIDTH) [italic] [bold])<text:bookmark-end text:name="__DdeLink__1994_2124759253"/>]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="6"/># Default visibility for fields is no, only a variance from the</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># the default needs to be stated.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="6"/>[(<text:span text:style-name="T1">visible yes</text:span>)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>)<text:bookmark-end text:name="__DdeLink__1991_2022311872"/>]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Add a new user defined property to this part. <text:s/>Also can be used to override</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># a property defined in an inherited part.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">property</text:span> <text:span text:style-name="T5">NAME VALUE</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="4"/>[(</text:span><text:span text:style-name="T1">effects</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="6"/></text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">X Y [ANGLE])</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="6"/></text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font</text:span> <text:span text:style-name="T5">[</text:span>FONT] (<text:span text:style-name="T1">size </text:span>HEIGHT WIDTH) [italic] [bold])</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="6"/># Default visibility for fields is no, only a variance from the</text:p>
+ <text:p text:style-name="comment"><text:s text:c="6"/># the default needs to be stated.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="6"/>[(<text:span text:style-name="T1">visible yes</text:span>)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)]</text:p>
+ <text:p text:style-name="comment"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Either polyline or line can be used to define a line or series of lines.</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Coordinates can be non-integer.</text:p>
+ <text:p text:style-name="code0"><text:bookmark-start text:name="__DdeLink__1984_2124759253"/><text:s text:c="2"/>(<text:span text:style-name="T1">polyline</text:span> <text:span text:style-name="T5">or</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">line</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">pts</text:span> (<text:span text:style-name="T1">xy </text:span>X Y)(<text:span text:style-name="T1">xy </text:span>X Y)(<text:span text:style-name="T1">xy </text:span>X Y)(<text:span text:style-name="T1">xy </text:span>X Y)(<text:span text:style-name="T1">xy </text:span>X Y))</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Line widths are in units as defined above.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(stroke [WIDTH] <text:bookmark-start text:name="__DdeLink__2025_599115402"/>[(style [(dashed...)]...)]<text:bookmark-end text:name="__DdeLink__2025_599115402"/>)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Valid fill types are none, filled, and transparent. <text:s/>Default fill for</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># a poly_line is none. <text:s/>Only a variance from the default needs to be stated.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">fill </text:span>FILL_TYPE)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)<text:bookmark-end text:name="__DdeLink__1984_2124759253"/> </text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="code0"><text:s text:c="2"/><text:bookmark-start text:name="__DdeLink__1986_2124759253"/>(<text:span text:style-name="T1">rectangle </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">start </text:span>X Y) (<text:span text:style-name="T1">end </text:span>X Y) (<text:span text:style-name="T1">stroke </text:span>WIDTH) (<text:span text:style-name="T1">fill </text:span>FILL_TYPE))<text:bookmark-end text:name="__DdeLink__1986_2124759253"/> </text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="code0"><text:s/><text:bookmark-start text:name="__DdeLink__1988_2124759253"/><text:s/>(<text:span text:style-name="T1">circle</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">center</text:span> X Y)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">radius </text:span>LENGTH)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">stroke </text:span>WIDTH)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">fill </text:span>FILL_TYPE)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)<text:bookmark-end text:name="__DdeLink__1988_2124759253"/> </text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="code0"><text:s text:c="2"/><text:bookmark-start text:name="__DdeLink__1990_2124759253"/>(<text:span text:style-name="T1">arc</text:span> <text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">pos</text:span> <text:span text:style-name="T5">X Y) (</text:span><text:span text:style-name="T1">radius</text:span> <text:span text:style-name="T5">RADIUS) (</text:span><text:span text:style-name="T1">start</text:span> X Y) (<text:span text:style-name="T1">end</text:span> X Y)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">stroke </text:span>WIDTH)</text:p>
+ <text:p text:style-name="code0"><text:soft-page-break/><text:s text:c="4"/>(<text:span text:style-name="T1">fill </text:span>FILL_TYPE)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="3"/>)<text:bookmark-end text:name="__DdeLink__1990_2124759253"/> </text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">bezier</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">pts </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">xy </text:span>X Y) (<text:span text:style-name="T1">xy </text:span>X Y) (<text:span text:style-name="T1">xy </text:span>X Y) (<text:span text:style-name="T1">xy </text:span>X Y) (<text:span text:style-name="T1">xy </text:span>X Y) (<text:span text:style-name="T1">xy </text:span>X Y))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="5"/>(<text:span text:style-name="T1">stroke </text:span>WIDTH)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">fill </text:span>FILL_TYPE)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="code0"><text:bookmark-start text:name="__DdeLink__1992_2124759253"/><text:s text:c="2"/>(<text:span text:style-name="T1">text</text:span> <text:span text:style-name="T2">“This is the text that gets drawn.â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T4"><text:s text:c="4"/>(</text:span><text:span text:style-name="T1">at </text:span><text:span text:style-name="T4">X Y [ANGLE])</text:span> </text:p>
+ <text:p text:style-name="P1"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Valid horizontal justification values are center, right, and left. <text:s/>Valid</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># vertical justification values are center, top, bottom. <text:s/>Defaults are</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># left and bottom. <text:s/>Only need to state a non-default.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">justify [</text:span>HORIZONTAL_JUSTIFY] [VERTICAL_JUSTIFY])]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">font</text:span> <text:span text:style-name="T5">[</text:span>FONT] (<text:span text:style-name="T1">size </text:span>HEIGHT WIDTH) [italic] [bold])]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># default visibility is yes, only need to state a variance from this default.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">visible no</text:span>)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># default fill type for text is filled, only need to state a non-default</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">fill </text:span>FILL_TYPE)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)<text:bookmark-end text:name="__DdeLink__1992_2124759253"/> </text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># A pin&apos;s type is it&apos;s electrical connection. <text:s/>Valid connection types are</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># input, output, bidirectional, tristate, passive, unspecified, power_in,</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># power_out, open_collector, open_emitter, unconnected. <text:s/>Valid pin shape</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># values are none, line, inverted, clock, inverted_clk, input_low, clock_low,</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># falling_edge, and non_logic.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">TYPE SHAPE</text:span> </text:p>
+ <text:p text:style-name="P2"/>
+ <text:p text:style-name="P4"><text:s text:c="4"/># Pin coordinates must be integers. <text:s/>The angle values 0, 180, 90, and 270</text:p>
+ <text:p text:style-name="P4"><text:s text:c="4"/># replace the current right, left, up, and down specifiers respectively,</text:p>
+ <text:p text:style-name="P4"><text:s text:c="4"/># and are the only angles currently supported.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">at </text:span>X Y [ANGLE])</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Length of the pin in logical units. <text:s/>This is optional, depending on </text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># SHAPE, which in some cases may imply a fixed length</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">length</text:span> LENGTH)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Use signal to describe the purpose of the pin. <text:s/>Signals do not have to be</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># uniquely named within a part. <text:s/>Signal can be blank.</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>[</text:span> <text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">signal</text:span> <text:span text:style-name="T2">“NAME†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font</text:span> <text:span text:style-name="T5">[</text:span>FONT] (<text:span text:style-name="T1">size </text:span>HEIGHT WIDTH) [italic][bold]) </text:p>
+ <text:p text:style-name="code0"><text:s text:c="6"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">YES</text:span>))]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="4"/># Use pad to uniquely identify the pin, according to the pin number</text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># in the datasheet for the part. <text:s/>Padnames may not be blank and must be</text:p>
+ <text:p text:style-name="comment"><text:bookmark-start text:name="__DdeLink__2027_599115402"/><text:s text:c="4"/># be unique within the part.</text:p>
+ <text:p text:style-name="code0"><text:bookmark-end text:name="__DdeLink__2027_599115402"/><text:s text:c="2"/><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“NUMBER†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font</text:span> <text:span text:style-name="T5">[</text:span>FONT] (<text:span text:style-name="T1">size </text:span>HEIGHT WIDTH) [italic][bold])</text:p>
+ <text:p text:style-name="code0"><text:soft-page-break/><text:s text:c="6"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">YES</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s/></text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># default visibility for pins is yes, so only a deviation from the </text:p>
+ <text:p text:style-name="comment"><text:s text:c="4"/># the default needs to be stated.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>[(<text:span text:style-name="T1">visible no</text:span>)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="3"/>)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="P5"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Pin merge is used to group a number of pins that are connected to the same</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># net externally and show only one pin symbolizing the group. <text:s/>The group is</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># called a merge set or merge group. <text:s/>It is typically used to hide all but </text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># one power pin on parts that have a large number of power connections </text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># such as FPGAs and micro-contollers. <text:s/>VISIBLE_PAD is the pad of</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># the one pin which remains visible within the merge set. <text:s/>Pins with pads</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># listed within the (pads...) element are all made invisible, and so</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># are are all pins which may have any of the signal names listed in the </text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># (signals...) element. <text:s/>A pin may only exist within one merge group.</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Any number of (pin_merge...) statements maybe made, including more than</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># one re-stating the same VISIBLE_PAD, which is the anchor pin for the </text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># merge set.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">pin_merge</text:span> VISIBLE_PAD </text:p>
+ <text:p text:style-name="code0"><text:tab/>[(pads HIDDEN_PAD1 …)][(signals HIDDEN_SIGNAL1 …)])]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># The pin swap hinting flag is used to indicate to an external tool ( i.e. an</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># auto router ) that the pins defined are functionally equivalent and</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># interchangeable.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">hint_pin_swap</text:span> NUMBER1 NUMBER2 ...)]</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1">Inheritance syntax example file.</text:h>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T5">NAME_HINT </text:span><text:span text:style-name="T1">extends</text:span> <text:span text:style-name="T5">LPID</text:span> </text:p>
+ <text:p text:style-name="comment"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Remove pin PAD defined in the base part. <text:s/>Only valid for extended parts.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">pin_del </text:span>PAD)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Swap pin PAD1 and pin PAD2 in the base part. <text:s/></text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Only valid for extended parts.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">pin_swap </text:span>PAD1 PAD2)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Change the pad of pin OLDPAD to NEWPAD in the base part.</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Only valid for extended parts.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">pin_renum</text:span> OLDPAD NEWPAD)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Change the signal of pin PAD to NEWSIGNAL in the base part. <text:s/></text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Only valid for extended parts.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">pin_rename</text:span> PAD NEWSIGNAL)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Remove property NAME from the base part. <text:s/>Only valid for extended parts.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">property_del </text:span>NAME)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Alternates are used to define multiple part per package devices and/or</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># alternate body styles (DeMorgan). <text:s/>Parts must be defined in order. <text:s/>There</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># can more than one alternates defined.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">alternates </text:span>LP<text:span text:style-name="T5">ID [LPID...]</text:span>)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># Add a new property to this part. <text:s/>Also can be use to override a property</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># defined in the base part.</text:p>
+ <text:p text:style-name="code0"><text:soft-page-break/><text:s text:c="6"/>[(<text:span text:style-name="T1">property</text:span> <text:span text:style-name="T5">NAME VALUE</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="4"/>[(</text:span><text:span text:style-name="T1">effects </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">X Y [ANGLE])</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="6"/>(</text:span><text:span text:style-name="T1">font</text:span> <text:span text:style-name="T5">[</text:span>FONT] (<text:span text:style-name="T1">size </text:span>HEIGHT WIDTH) [italic] [bold])</text:p>
+ <text:p text:style-name="code0"><text:s text:c="6"/>(<text:span text:style-name="T1">visible </text:span>YES)]</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)]</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"><text:s text:c="2"/># The alternates swap hinting flag is used to indicate to an external tool</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># that the parts defined in the alternates list are functionally equivalent</text:p>
+ <text:p text:style-name="comment"><text:s text:c="2"/># and interchangeable.</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>[(<text:span text:style-name="T1">hint_alt_swap</text:span> LPID1 LPID2 ...)]</text:p>
+ <text:p text:style-name="Text_20_body">)</text:p>
+ <text:p text:style-name="Text_20_body"/>
+ <text:p text:style-name="comment"># This is an example of a dual input NAND gate A of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_aâ€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">reference</text:span> <text:span text:style-name="T2">“Uâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">arc (pos</text:span> <text:span text:style-name="T5">2 0) (</text:span><text:span text:style-name="T1">radius</text:span> <text:span text:style-name="T5">0.4) (</text:span><text:span text:style-name="T1">start</text:span> <text:span text:style-name="T5">2</text:span> -4) (<text:span text:style-name="T1">start_angle</text:span> -90) (<text:span text:style-name="T1">end</text:span> <text:span text:style-name="T5">2</text:span> 4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">end_angle</text:span> 90)<text:span text:style-name="T1"> </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">stroke</text:span> <text:span text:style-name="T5">0</text:span>) (<text:span text:style-name="T1">fill</text:span> <text:span text:style-name="T5">none</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">polyline</text:span> (<text:span text:style-name="T1">xy</text:span> <text:span text:style-name="T5">2</text:span> 4) (<text:span text:style-name="T1">xy </text:span>-6 4) (<text:span text:style-name="T1">xy </text:span>-6 -4) (<text:span text:style-name="T1">xy </text:span>2 -4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">stroke </text:span>0) (<text:span text:style-name="T1">fill </text:span>none))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">input</text:span> line (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-12</text:span> 2 3.6 180)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">Ҡ</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“1†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">input</text:span> line (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-12</text:span> -2 3.6)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">Ҡ</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“2†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">output</text:span> line (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-12</text:span> 0)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">Ҡ</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“3†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">power_in</text:span> none (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-4</text:span> -4 90)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">“GND†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“7†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">power_in</text:span> none (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-4</text:span> 4 90)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">“VCC†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“7†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">hint_pin_swap</text:span> <text:span text:style-name="T2">“1â€</text:span> <text:span text:style-name="T2">“2â€</text:span>)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># All LPIDs below this point assume that the base part is located in the same</text:p>
+ <text:p text:style-name="comment"># library as the parts that are derived from them. <text:s/>See the “Distributed Library</text:p>
+ <text:p text:style-name="comment"># &amp; EESchema Parts List Design Documentation†in the Kicad source file “design.hâ€</text:p>
+ <text:p text:style-name="comment"># for more information on LPIDs.</text:p>
+ <text:p text:style-name="comment"/>
+ <text:p text:style-name="comment"># This is the B gate of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_bâ€</text:span> <text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“dual_in_nand_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 7)</text:p>
+ <text:p text:style-name="code0"><text:soft-page-break/><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 14)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 1 4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 2 5)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 3 6)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is the C gate of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_câ€</text:span> <text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“dual_in_nand_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 7)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 14)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 8 4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 9 5)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 10 6)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is the D gate of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_bâ€</text:span> <text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“dual_in_nand_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 7)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 14)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 1 11)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 2 12)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 3 13)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is a DeMorgan representation of a dual input NAND gate A.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_</text:span> <text:span text:style-name="T2">demorgan</text:span> <text:span text:style-name="T2">_aâ€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">reference</text:span> <text:span text:style-name="T2">“Uâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">arc (pos</text:span> <text:span text:style-name="T5">-9.3 0) (</text:span><text:span text:style-name="T1">radius</text:span> <text:span text:style-name="T5">0.518) (</text:span><text:span text:style-name="T1">start</text:span> <text:span text:style-name="T5">-6</text:span> 4) (<text:span text:style-name="T1">start_angle</text:span> 50.4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">end</text:span> <text:span text:style-name="T5">-6</text:span> -4) (<text:span text:style-name="T1">end_angle</text:span> -50.4)<text:span text:style-name="T1"> </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">stroke</text:span> <text:span text:style-name="T5">0</text:span>) (<text:span text:style-name="T1">fill</text:span> <text:span text:style-name="T5">none</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">arc (pos</text:span> <text:span text:style-name="T5">-0.22 2.86) (</text:span><text:span text:style-name="T1">radius</text:span> <text:span text:style-name="T5">7.06) (</text:span><text:span text:style-name="T1">start</text:span> <text:span text:style-name="T5">0</text:span> -200) (<text:span text:style-name="T1">start_angle</text:span> -88.1)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">end</text:span> <text:span text:style-name="T5">6</text:span> 0) (<text:span text:style-name="T1">end_angle</text:span> -24.6)<text:span text:style-name="T1"> </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">stroke</text:span> <text:span text:style-name="T5">0</text:span>) (<text:span text:style-name="T1">fill</text:span> <text:span text:style-name="T5">none</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">arc (pos</text:span> <text:span text:style-name="T5">-0.2 2.82) (</text:span><text:span text:style-name="T1">radius</text:span> <text:span text:style-name="T5">6.8) (</text:span><text:span text:style-name="T1">start</text:span> <text:span text:style-name="T5">6</text:span> 0) (<text:span text:style-name="T1">start_angle</text:span> -24.4) (<text:span text:style-name="T1">end</text:span> <text:span text:style-name="T5">0</text:span> 4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">end_angle</text:span> 88.3)<text:span text:style-name="T1"> </text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">stroke</text:span> <text:span text:style-name="T5">0</text:span>) (<text:span text:style-name="T1">fill</text:span> <text:span text:style-name="T5">none</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">polyline</text:span> (<text:span text:style-name="T1">xy</text:span> <text:span text:style-name="T5">-6</text:span> 4) (<text:span text:style-name="T1">xy </text:span>0 4) (<text:span text:style-name="T1">xy </text:span>0 -4) (<text:span text:style-name="T1">xy</text:span> <text:span text:style-name="T5">-6</text:span> -4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">stroke </text:span>0) (<text:span text:style-name="T1">fill </text:span>none))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">input</text:span> line (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-12</text:span> 2 180) (<text:span text:style-name="T1">length</text:span> 6)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">Ҡ</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“1†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">input</text:span> line (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-12</text:span> -2 180) (<text:span text:style-name="T1">length</text:span> 6)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">Ҡ</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“2†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">output</text:span> line (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-12</text:span> 0) (<text:span text:style-name="T1">length</text:span> 7.4)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">Ҡ</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“3†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> 1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">yes</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">power_in</text:span> none (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-4</text:span> -4 90) (<text:span text:style-name="T1">length</text:span> 0)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">“GND†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“7†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:soft-page-break/><text:s text:c="6"/>(<text:span text:style-name="T1">pin</text:span> <text:span text:style-name="T5">power_in</text:span> none (<text:span text:style-name="T1">at</text:span> <text:span text:style-name="T5">-4</text:span> 4 90) (<text:span text:style-name="T1">length</text:span> 0)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/></text:span><text:span text:style-name="T5">(signal</text:span> <text:span text:style-name="T2">“VCC†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size </text:span>1.2 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T1"><text:s text:c="4"/>(pad</text:span> <text:span text:style-name="T2">“7†</text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">font </text:span>(<text:span text:style-name="T1">size</text:span> <text:span text:style-name="T5">1.2</text:span> 1.2)) (<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/>(<text:span text:style-name="T1">visible </text:span><text:span text:style-name="T4">no</text:span>))</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">hint_pin_swap</text:span> 1 2)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is the DeMorgan representation of gate B of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_demorgan_bâ€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/><text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“dual_in_nand_demorgan_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 7)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 14)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 1 4)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 2 5)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 3 6)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_rename</text:span> 1 <text:span text:style-name="T2">“Dâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_rename</text:span> 2 <text:span text:style-name="T2">“Eâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_rename</text:span> 3 <text:span text:style-name="T2">“Fâ€</text:span>)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is the DeMorgan representation of gate C of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_demorgan_câ€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/><text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“dual_in_nand_demorgan_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 7)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 14)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 1 8)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 2 9)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 3 10)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is the DeMorgan representation of gate D of a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“dual_input_nand_demorgan_dâ€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/><text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“dual_in_nand_demorgan_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 7)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_del</text:span> 14)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 1 11)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 2 12)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">pin_renum</text:span> 3 13)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># An example of putting it all together to create a 7400.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“7400â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">value</text:span> <text:span text:style-name="T2">“7400â€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">alternates</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_b/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_c/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_d/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">alternates</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_demorgan_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:soft-page-break/><text:s text:c="8"/><text:span text:style-name="T2">“dual_in_nand_demorgan_b/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_demorgan_c/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_demorgan_d/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)</text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>(<text:span text:style-name="T1">hint_alt_swap</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_a/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_b/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_c/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="4"/><text:span text:style-name="T2">“dual_in_nand_d/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:s text:c="2"/>)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># A 74LS00 is as simple as this.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“74LS00â€</text:span> <text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“7400/rev1â€</text:span> <text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">value</text:span> <text:span text:style-name="T2">“74LS00â€</text:span> <text:span text:style-name="T5">)</text:span>)</text:p>
+ <text:p text:style-name="code0"/>
+ <text:p text:style-name="comment"># This is a so called heavy weight part definition of a Texas Instruments</text:p>
+ <text:p text:style-name="comment"># part number SN74HCT00NSR.</text:p>
+ <text:p text:style-name="code0">(<text:span text:style-name="T1">part</text:span> <text:span text:style-name="T2">“SN74HCT00NSRâ€</text:span> <text:span text:style-name="T1">inherits</text:span> <text:span text:style-name="T2">“7400/rev1â€</text:span> </text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T2"><text:s text:c="2"/></text:span><text:span text:style-name="T5">(</text:span><text:span text:style-name="T1">value</text:span> <text:span text:style-name="T2">“SN74HCT00NSRâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">footprint</text:span> <text:span text:style-name="T2">“14-SOPâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">datasheet</text:span> <text:span text:style-name="T2">“http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=sn74hct00&amp;fileType=pdfâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">keywords</text:span> <text:span text:style-name="T2">“LOGIC†“NANDâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">property</text:span> <text:span text:style-name="T2">“Descriptionâ€</text:span> <text:span text:style-name="T2">“IC GATE POS-NAND QD 2IN 14-SOPâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">property</text:span> <text:span text:style-name="T2">“Manufacturerâ€</text:span> <text:span text:style-name="T2">“Texas Instrumentsâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">property</text:span> <text:span text:style-name="T2">“Vendorâ€</text:span> <text:span text:style-name="T2">“Digikeyâ€</text:span>)</text:p>
+ <text:p text:style-name="code0"><text:span text:style-name="T5"><text:s text:c="2"/>(</text:span><text:span text:style-name="T1">property</text:span> <text:span text:style-name="T2">“Vendor Part Numberâ€</text:span> <text:span text:style-name="T2">“SN74HCT00NSR-NDâ€</text:span>)</text:p>
+ <text:p text:style-name="code0">)</text:p>
+ <text:p text:style-name="code0"/>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/new/test_sch_lib_table.cpp b/new/test_sch_lib_table.cpp
new file mode 100644
index 0000000..a385794
--- /dev/null
+++ b/new/test_sch_lib_table.cpp
@@ -0,0 +1,128 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2010 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <sch_lib_table.h>
+#include <sch_lib_table_lexer.h>
+#include <sch_lpid.h>
+#include <sch_part.h>
+
+using namespace SCH;
+
+
+// If LIB_TABLE::Test() is conditioned on DEBUG being defined, build with
+// CMAKE_BUILD_TYPE=Debug, otherwise don't worry about it, because it will work
+// on any CMAKE_BUILD_TYPE, including Release.
+void LIB_TABLE::Test()
+{
+ SCH_LIB_TABLE_LEXER slr(
+ "(lib_table \n"
+ " (lib (logical www) (type http) (full_uri http://kicad.org/libs) (options \"\"))\n"
+ " (lib (logical meparts) (type dir) (full_uri /tmp/eeschema-lib) (options useVersioning))\n"
+// " (lib (logical meparts) (type dir) (full_uri /tmp/eeschema-lib) (options \"\"))\n"
+ " (lib (logical old-project) (type schematic)(full_uri /tmp/old-schematic.sch) (options \"\"))\n"
+ ")\n"
+ ,
+
+ wxT( "inline text" ) // source
+ );
+
+ // read the "( lib_table" pair of tokens
+ slr.NextTok();
+ slr.NextTok();
+
+ // parse the rest of input to slr
+ Parse( &slr );
+
+ STRING_FORMATTER sf;
+
+ // format this whole table into sf, it will be sorted by logicalName.
+ Format( &sf, 0 );
+
+ printf( "test 'Parse() <-> Format()' round tripping:\n" );
+ printf( "%s", sf.GetString().c_str() );
+
+ printf( "\ntest a lookup of 'www':\n" );
+ const LIB_TABLE::ROW* www = FindRow( "www" );
+ if( www )
+ {
+ // found, print it just to prove it.
+ sf.Clear();
+
+ www->Format( &sf, 1 );
+ printf( "%s", sf.GetString().c_str() );
+ }
+ else
+ printf( "not found\n" );
+
+ printf( "\nlist of logical libraries:\n" );
+
+ STRINGS logNames = GetLogicalLibs();
+ for( STRINGS::const_iterator it = logNames.begin(); it!=logNames.end(); ++it )
+ {
+ printf( "logicalName: %s\n", it->c_str() );
+ }
+
+ // find a part
+ LPID lpid( "meparts:tigers/ears" );
+
+ PART* part = LookupPart( lpid );
+
+ sf.Clear();
+ part->Format( &sf, 0, 0 );
+
+ printf( "%s", sf.GetString().c_str() );
+}
+
+
+int main( int argc, char** argv )
+{
+ LIB_TABLE lib_table;
+
+ try
+ {
+ // test exceptions:
+ // THROW_PARSE_ERROR( wxT("test problem"), wxT("input"), 23, 46 );
+ //THROW_IO_ERROR( wxT("io test") );
+
+ lib_table.Test();
+ }
+ catch( PARSE_ERROR& ioe ) // most derived class first
+ {
+ printf( "%s\n", (const char*) ioe.errorText.ToUTF8() );
+
+ printf( "%s%s",
+ ioe.inputLine.c_str(),
+ ioe.inputLine.empty() || *ioe.inputLine.rbegin() != '\n' ?
+ "\n" : "" ); // rare not to have \n at end
+
+ printf( "%*s^\n", ioe.byteIndex>=1 ? ioe.byteIndex-1 : 0, "" );
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ printf( "%s\n", (const char*) ioe.errorText.ToUTF8() );
+ }
+
+ return 0;
+}
+
diff --git a/new/toolchain-mingw32.cmake b/new/toolchain-mingw32.cmake
new file mode 100644
index 0000000..3e902ac
--- /dev/null
+++ b/new/toolchain-mingw32.cmake
@@ -0,0 +1,45 @@
+
+# This is a CMake toolchain file so we can using Mingw to build Windows32 binaries.
+# http://vtk.org/Wiki/CMake_Cross_Compiling
+
+# usage
+# cmake -DCMAKE_TOOLCHAIN_FILE=./toolchain-mingw32.cmake ../
+
+set( CMAKE_SYSTEM_NAME Windows )
+set( CMAKE_SYSTEM_PROCESSOR i686 )
+
+#-----<configuration>-----------------------------------------------
+
+# configure only the lines within this <configure> block, typically
+
+set( TC_PATH /usr/bin )
+set( CROSS_COMPILE x86_64-w64-mingw32- )
+
+# specify the cross compiler
+set( CMAKE_C_COMPILER ${TC_PATH}/${CROSS_COMPILE}gcc )
+set( CMAKE_CXX_COMPILER ${TC_PATH}/${CROSS_COMPILE}g++ )
+set( CMAKE_RC_COMPILER ${TC_PATH}/${CROSS_COMPILE}windres )
+
+# One compiler generates either 32 bit or 64 bit code, -m32 says generate 32 bit:
+set( CMAKE_CXX_FLAGS_INIT "-m32" CACHE STRING "C++ flag which generates 32 bit code." )
+set( CMAKE_C_FLAGS_INIT "-m32" CACHE STRING "C flag which generates 32 bit code." )
+set( CMAKE_SHARED_LINKER_FLAGS "-m32" CACHE STRING "Linker flag which finds 32 bit code." )
+set( CMAKE_MODULE_LINKER_FLAGS "-m32" CACHE STRING "Linker flag which finds 32 bit code." )
+set( CMAKE_EXE_LINKER_FLAGS "-m32" CACHE STRING "Linker flag which finds 32 bit code." )
+
+# Tell the 64 bit toolchain to generate a PE32 object file when running windres:
+set( CMAKE_RC_FLAGS "-F pe-i386" CACHE STRING "windres flag which generates 32 bit code." )
+
+
+# where is the target environment
+set( CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 )
+
+#-----</configuration>-----------------------------------------------
+
+# search for programs in the build host directories
+set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
+
+# for libraries and headers in the target directories
+set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+
diff --git a/new/toolchain-mingw64.cmake b/new/toolchain-mingw64.cmake
new file mode 100644
index 0000000..bf4a366
--- /dev/null
+++ b/new/toolchain-mingw64.cmake
@@ -0,0 +1,35 @@
+
+# This is a CMake toolchain file so we can run Mingw64 to build a Windows64 binaries.
+# http://vtk.org/Wiki/CMake_Cross_Compiling
+
+# usage
+# cmake -DCMAKE_TOOLCHAIN_FILE=./toolchain-mingw64.cmake ../
+
+
+set( CMAKE_SYSTEM_NAME Windows )
+set( CMAKE_SYSTEM_PROCESSOR x86_64 )
+
+#-----<configuration>-----------------------------------------------
+
+# configure only the lines within this <configure> block, typically
+
+set( TC_PATH /usr/bin )
+set( CROSS_COMPILE x86_64-w64-mingw32- )
+
+# specify the cross compiler
+set( CMAKE_C_COMPILER ${TC_PATH}/${CROSS_COMPILE}gcc )
+set( CMAKE_CXX_COMPILER ${TC_PATH}/${CROSS_COMPILE}g++ )
+set( CMAKE_RC_COMPILER ${TC_PATH}/${CROSS_COMPILE}windres )
+
+# where is the target environment
+set( CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 )
+
+#-----</configuration>-----------------------------------------------
+
+# search for programs in the build host directories
+set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
+
+# for libraries and headers in the target directories
+set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+
diff --git a/new/utf8.h b/new/utf8.h
new file mode 100644
index 0000000..046d880
--- /dev/null
+++ b/new/utf8.h
@@ -0,0 +1,59 @@
+
+#ifndef UTF8_H_
+#define UTF8_H_
+
+#include <string>
+#include <deque>
+
+/**
+ * @ingroup string_types
+ * @{
+ */
+
+
+/**
+ * Type STRING
+ * holds a sequence of 8 bit bytes that represent a sequence of variable
+ * length multi-byte international characters, with unspecified encoding.
+ */
+typedef std::string STRING;
+
+/**
+ * Type STRINGS
+ * is an "array like" list of STRINGs
+ */
+typedef std::deque<STRING> STRINGS;
+
+/**
+ * Type STR_UTF
+ * holds a UTF8 encoded sequence of 8 bit bytes that represent a sequence
+ * of variable multi-byte international characters. UTF8 is the chosen encoding
+ * for all KiCad data files so that they can be transported from one nation to another
+ * without ambiguity. Data files are those where KiCad controls the content.
+ * This is not the same thing as filenames, which are not file content.
+ * Filenames may be encoded on disk using an encoding chosen by the host operating
+ * system. Nonetheless, KiCad data file _content_ is always UTF8 encoded, regardless
+ * of host operating system.
+ * STR_UTF is UTF8 encoded, by definition.
+ */
+typedef STRING STR_UTF;
+
+/**
+ * Type STR_UTFS
+ * is an "array like" list of STR_UTFs
+ */
+typedef std::deque<STRING> STR_UTFS;
+
+/** @} string_types */
+
+
+// @todo this does not belong here
+#ifndef D
+#ifdef DEBUG
+#define D(x) x
+#else
+#define D(x) // nothing
+#endif
+#endif
+
+#endif // UTF8_H_
diff --git a/packaging/mac-osx/dmg-generator/AdiumApplescriptRunner b/packaging/mac-osx/dmg-generator/AdiumApplescriptRunner
new file mode 100755
index 0000000..4665eee
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/AdiumApplescriptRunner
Binary files differ
diff --git a/packaging/mac-osx/dmg-generator/Artwork/Anonymous_aiga_left_arrow.svg b/packaging/mac-osx/dmg-generator/Artwork/Anonymous_aiga_left_arrow.svg
new file mode 100644
index 0000000..d91b1c3
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/Artwork/Anonymous_aiga_left_arrow.svg
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg height="360.609" id="svg3578" inkscape:version="0.41" sodipodi:docbase="/datas/Projs/Cliparts Stocker/tmp/AIGA" sodipodi:docname="AIGA_Left_Arrow_1.svg" sodipodi:version="0.32" width="431.322" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
+ <metadata>
+ <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <cc:Work rdf:about="">
+ <dc:title>AIGA_Symbol_Signs</dc:title>
+ <dc:description>EPS converted from http://aiga.org</dc:description>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>symbol</rdf:li>
+ <rdf:li>mapsym</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:publisher>
+ <cc:Agent rdf:about="http://www.openclipart.org/">
+ <dc:title>Open Clip Art Library</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jean-Victor Balin</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>Jean-Victor Balin</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:date/>
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
+ <dc:language>en</dc:language>
+ </cc:Work>
+ <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
+ <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+ <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+ <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="svg3578" inkscape:cx="305.25953" inkscape:cy="417.84947" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="543" inkscape:window-width="640" inkscape:window-x="5" inkscape:window-y="70" inkscape:zoom="0.43415836" pagecolor="#ffffff"/>
+ <defs id="defs3580">
+ <marker id="ArrowEnd" markerHeight="3" markerUnits="strokeWidth" markerWidth="4" orient="auto" refX="0" refY="5" viewBox="0 0 10 10">
+ <path d="M 0 0 L 10 5 L 0 10 z" id="path3583"/>
+ </marker>
+ <marker id="ArrowStart" markerHeight="3" markerUnits="strokeWidth" markerWidth="4" orient="auto" refX="10" refY="5" viewBox="0 0 10 10">
+ <path d="M 10 0 L 0 5 L 10 10 z" id="path3586"/>
+ </marker>
+ </defs>
+ <g id="g3588">
+ <path d="M 180.199 360.396L 0 180.197L 180.199 0L 299.048 0L 161.988 137.066L 431.322 137.066L 431.322 224.288L 162.946 224.288L 299.263 360.609L 180.199 360.396z" id="path3590" style="stroke: none; fill: rgb(0, 0, 0);"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/packaging/mac-osx/dmg-generator/Artwork/dmgBackground.png b/packaging/mac-osx/dmg-generator/Artwork/dmgBackground.png
new file mode 100644
index 0000000..d793778
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/Artwork/dmgBackground.png
Binary files differ
diff --git a/packaging/mac-osx/dmg-generator/Artwork/dmgBackground.svg b/packaging/mac-osx/dmg-generator/Artwork/dmgBackground.svg
new file mode 100644
index 0000000..2077006
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/Artwork/dmgBackground.svg
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ width="600"
+ height="400"
+ id="svg2826"
+ inkscape:version="0.47pre2 r22153"
+ sodipodi:docname="dmgBackground.svg"
+ inkscape:export-filename="/Users/jerry/Repositories/kicad/kicad/packaging/mac-osx/Artwork/dmgBackground.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <metadata
+ id="metadata3059">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="706"
+ id="namedview3057"
+ showgrid="false"
+ inkscape:zoom="1.52"
+ inkscape:cx="238.73307"
+ inkscape:cy="136.65089"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2826" />
+ <defs
+ id="defs2828">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 200 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="600 : 200 : 1"
+ inkscape:persp3d-origin="300 : 133.33333 : 1"
+ id="perspective3061" />
+ <linearGradient
+ id="linearGradient5348">
+ <stop
+ id="stop5350"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop5352"
+ style="stop-color:#000000;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="201.60388"
+ y1="60.693924"
+ x2="631.60358"
+ y2="60.693924"
+ id="linearGradient5356"
+ xlink:href="#linearGradient5348"
+ gradientUnits="userSpaceOnUse" />
+ <inkscape:perspective
+ id="perspective181503"
+ inkscape:persp3d-origin="478.34647 : 224.40944 : 1"
+ inkscape:vp_z="956.69293 : 336.61417 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 336.61417 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective550892"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective550919"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3781"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <marker
+ viewBox="0 0 10 10"
+ refY="5"
+ refX="10"
+ orient="auto"
+ markerWidth="4"
+ markerUnits="strokeWidth"
+ markerHeight="3"
+ id="ArrowStart">
+ <path
+ id="path3586"
+ d="M 10 0 L 0 5 L 10 10 z" />
+ </marker>
+ <marker
+ viewBox="0 0 10 10"
+ refY="5"
+ refX="0"
+ orient="auto"
+ markerWidth="4"
+ markerUnits="strokeWidth"
+ markerHeight="3"
+ id="ArrowEnd">
+ <path
+ id="path3583"
+ d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <inkscape:perspective
+ id="perspective3885"
+ inkscape:persp3d-origin="215.661 : 120.203 : 1"
+ inkscape:vp_z="431.32199 : 180.3045 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 180.3045 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <image
+ sodipodi:absref="/Applications/Inkscape.app/inkscape_pasted_image_20100116_171239.png"
+ y="-18.414894"
+ x="-113.0907"
+ id="image550894"
+ height="642"
+ width="889"
+ xlink:href="/Applications/Inkscape.app/inkscape_pasted_image_20100116_171239.png"
+ style="opacity:0.67901234"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ transform="translate(0,-200)"
+ id="layer1">
+ <text
+ x="83.225609"
+ y="267.271"
+ transform="scale(1.0020366,0.99796753)"
+ id="text2836"
+ xml:space="preserve"
+ style="font-size:55.88646698px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#8f8f8f;fill-opacity:1;stroke:#000000;stroke-width:0.99797261;stroke-opacity:1;font-family:Chalkboard;-inkscape-font-specification:Bitstream Vera Sans Bold"><tspan
+ x="83.225609"
+ y="267.271"
+ id="tspan2838"
+ style="fill:#8f8f8f;fill-opacity:1;stroke:#000000;stroke-width:0.99797261;stroke-opacity:1">KiCad EDA Suite</tspan></text>
+ </g>
+ <rect
+ style="opacity:0.77800000000000002;fill:#8f8f8f;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3811"
+ width="221.02962"
+ height="132.76646"
+ x="40.985184"
+ y="101.25256"
+ rx="1.0058786"
+ ry="0.37196189" />
+ <rect
+ style="opacity:0.778;fill:#8f8f8f;fill-opacity:1;stroke:#000000;stroke-width:2.11835647;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3813"
+ width="89.881645"
+ height="79.88163"
+ x="109.05918"
+ y="299.05923"
+ rx="1.1279253"
+ ry="0.38347483" />
+ <g
+ id="g3588"
+ transform="matrix(0,-0.1247889,0.1247889,0,128.5,294.01714)">
+ <path
+ style="fill:#000000;stroke:none"
+ id="path3590"
+ d="M 180.199,360.396 0,180.197 180.199,0 l 118.849,0 -137.06,137.066 269.334,0 0,87.222 -268.376,0 136.317,136.321 -119.064,-0.213 z" />
+ </g>
+</svg>
diff --git a/packaging/mac-osx/dmg-generator/Makefile b/packaging/mac-osx/dmg-generator/Makefile
new file mode 100644
index 0000000..c214afe
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/Makefile
@@ -0,0 +1,40 @@
+###########
+# KiCad OSX DMG packaging
+# Create a bin directory and copy the .app files in
+# Create a build directory
+# Then execute the makefile
+#
+# Original credits by Adium developers !
+# http://www.adium.im
+###########
+VERSION=`date +%Y%m%d`
+
+###########
+# Variables
+###########
+BUILD_DIR=build
+APP_DIR=release
+KICAD_DIR=$(BUILD_DIR)
+RELEASE_NAME=kicad-$(VERSION)
+
+###########
+# Targets
+###########
+all:
+ echo "Copying application bundles"
+ mkdir release
+ cp -R ../../../*/*.app release
+ echo "Building kicad-${VERSION}.dmg"
+ rm -rfv build
+ mkdir build
+
+ cp -r $(APP_DIR)/* $(BUILD_DIR)
+ mkdir -p $(BUILD_DIR)/.background
+ cp Artwork/dmgBackground.png $(BUILD_DIR)/.background
+ ./mkalias -r /Applications $(BUILD_DIR)/Applications
+
+ mkdir -p $(BUILD_DIR)/.background
+
+ ./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_NAME).dmg $(KICAD_DIR) "KiCad" dmg_kicad.scpt $(ART_DIR)
+
+ @echo "Build finished. `md5 $(BUILD_DIR)/$(RELEASE_NAME).dmg`"
diff --git a/packaging/mac-osx/dmg-generator/RightDS_Store b/packaging/mac-osx/dmg-generator/RightDS_Store
new file mode 100644
index 0000000..ab19329
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/RightDS_Store
Binary files differ
diff --git a/packaging/mac-osx/dmg-generator/dmg_kicad.scpt b/packaging/mac-osx/dmg-generator/dmg_kicad.scpt
new file mode 100644
index 0000000..9e72fbe
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/dmg_kicad.scpt
Binary files differ
diff --git a/packaging/mac-osx/dmg-generator/make-diskimage.sh b/packaging/mac-osx/dmg-generator/make-diskimage.sh
new file mode 100755
index 0000000..062992b
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/make-diskimage.sh
@@ -0,0 +1,78 @@
+# Create a read-only disk image of the contents of a folder
+#
+# Usage: make-diskimage <image_file>
+# <src_folder>
+# <volume_name>
+# <applescript>
+# <artpath>
+# <eula_resource_file>
+
+set -e;
+
+DMG_DIRNAME=`dirname $1`
+DMG_DIR=`cd $DMG_DIRNAME > /dev/null; pwd`
+DMG_NAME=`basename $1`
+DMG_TEMP_NAME=${DMG_DIR}/rw.${DMG_NAME}
+SRC_FOLDER=`cd $2 > /dev/null; pwd`
+VOLUME_NAME=$3
+
+# optional arguments
+APPLESCRIPT=$4
+ART_PATH=$5
+EULA_RSRC=$6
+
+# Create the image
+echo "Creating disk image..."
+rm -f "${DMG_TEMP_NAME}"
+hdiutil create -srcfolder "${SRC_FOLDER}" -volname "${VOLUME_NAME}" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW "${DMG_TEMP_NAME}"
+
+# mount it
+echo "Mounting disk image..."
+MOUNT_DIR="/Volumes/${VOLUME_NAME}"
+DEV_NAME=`hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}'`
+
+cp RightDS_Store "/Volumes/${VOLUME_NAME}/.DS_Store"
+
+# run applescript
+if [ ! -z "${APPLESCRIPT}" -a "${APPLESCRIPT}" != "-null-" ]; then
+# osascript "${APPLESCRIPT}"
+ # pass the applescript our volume name and our artwork path, to its process_disk_image function
+ echo "Running Applescript: ./AdiumApplescriptRunner \"${APPLESCRIPT}\" process_disk_image \"${VOLUME_NAME}\""
+ ./AdiumApplescriptRunner "${APPLESCRIPT}" process_disk_image "${VOLUME_NAME}" "${ART_PATH}" || true
+ echo "Done running the applescript..."
+fi
+
+
+# run shell script
+# if [ ! -z "${SHELLSCRIPT}" -a "${SHELLSCRIPT}" != "-null-" ]; then
+# ./${SHELLSCRIPT} \"${VOLUME_NAME}\"
+# fi
+
+# make sure it's not world writeable
+echo "Fixing permissions..."
+chmod -Rf go-w "${MOUNT_DIR}" || true
+
+# make the top window open itself on mount:
+if [ -x /usr/local/bin/openUp ]; then
+ /usr/local/bin/openUp "${MOUNT_DIR}"
+fi
+
+# unmount
+echo "Unmounting disk image..."
+hdiutil detach "${DEV_NAME}"
+
+# compress image
+echo "Compressing disk image..."
+hdiutil convert "${DMG_TEMP_NAME}" -format UDBZ -o "${DMG_DIR}/${DMG_NAME}"
+rm -f "${DMG_TEMP_NAME}"
+
+# adding EULA resources
+if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then
+ echo "adding EULA resources"
+ hdiutil unflatten "${DMG_DIR}/${DMG_NAME}"
+ /Developer/Tools/ResMerger -a "${EULA_RSRC}" -o "${DMG_DIR}/${DMG_NAME}"
+ hdiutil flatten "${DMG_DIR}/${DMG_NAME}"
+fi
+
+echo "Disk image done"
+exit 0
diff --git a/packaging/mac-osx/dmg-generator/mkalias b/packaging/mac-osx/dmg-generator/mkalias
new file mode 100755
index 0000000..69a5fd9
--- /dev/null
+++ b/packaging/mac-osx/dmg-generator/mkalias
Binary files differ
diff --git a/packaging/windows/nsis/Dutch.nsh b/packaging/windows/nsis/Dutch.nsh
new file mode 100644
index 0000000..3a28300
--- /dev/null
+++ b/packaging/windows/nsis/Dutch.nsh
@@ -0,0 +1,28 @@
+;Additional text definitions for Dutch
+
+;File name of license file
+LicenseLangString MUILicense ${LANG_DUTCH} "..\COPYRIGHT.txt"
+
+;Component option
+LangString TITLE_SEC01 ${LANG_DUTCH} "Hoofdprogramma"
+LangString TITLE_SEC02 ${LANG_DUTCH} "Bibliotheken en componenten"
+LangString TITLE_SEC03 ${LANG_DUTCH} "Voorbeeld projecten"
+LangString TITLE_SEC04 ${LANG_DUTCH} "Help bestanden"
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_DUTCH} "Hoofdprogramma bestanden."
+LangString DESC_SEC02 ${LANG_DUTCH} "Libraries and components are required unless they have been previously installed."
+LangString DESC_SEC03 ${LANG_DUTCH} "Verschillende voorbeelden en tutorials."
+LangString DESC_SEC04 ${LANG_DUTCH} "Help bestanden in pdf formaat."
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_DUTCH} "Voor het bewerken of creeeren van 3D modellen moet u Wings3D installeren. \
+Wings3D en de gebruikershandleiding kunt u vrij downloaden van de Wings3D webpagina Check this box to open the Wings3D web page"
+
+LangString UNINST_PROMPT ${LANG_DUTCH} "Are you sure you want to completely remove $(^Name) and all of its components? $\n\
+This will also remove all modified and new files, libraries and modules in the program directory"
+
+LangString UNINST_SUCCESS ${LANG_DUTCH} "$(^Name) was succesvol verwijderd van uw computer."
+LangString INSTALLER_RUNNING ${LANG_DUTCH} "De installer is al actief."
+LangString UNINSTALLER_RUNNING ${LANG_DUTCH} "De uninstaller is al actief."
+LangString ALREADY_INSTALLED ${LANG_DUTCH} "${PRODUCT_NAME} is al geinstalleerd. Installatie van dit pakket overschrijft de bestaande versie. Wilt u doorgaan?"
diff --git a/packaging/windows/nsis/English.nsh b/packaging/windows/nsis/English.nsh
new file mode 100644
index 0000000..c3b5263
--- /dev/null
+++ b/packaging/windows/nsis/English.nsh
@@ -0,0 +1,28 @@
+;Additional text definitions for English
+
+;File name of license file
+LicenseLangString MUILicense ${LANG_ENGLISH} "..\COPYRIGHT.txt"
+
+;Component option
+LangString TITLE_SEC01 ${LANG_ENGLISH} "Main application"
+LangString TITLE_SEC02 ${LANG_ENGLISH} "Libraries and components"
+LangString TITLE_SEC03 ${LANG_ENGLISH} "Demonstration projects"
+LangString TITLE_SEC04 ${LANG_ENGLISH} "Help files"
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_ENGLISH} "Main application files."
+LangString DESC_SEC02 ${LANG_ENGLISH} "Libraries and components are required unless they have been previously installed."
+LangString DESC_SEC03 ${LANG_ENGLISH} "Some demonstration projects and tutorials."
+LangString DESC_SEC04 ${LANG_ENGLISH} "Help files in pdf format."
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_ENGLISH} "To edit or create 3D object models you need to install Wings3D. \
+Wings3D and user manual can be download free from the Wings3D web page Check this box to open the Wings3D web page"
+
+LangString UNINST_PROMPT ${LANG_ENGLISH} "Are you sure you want to completely remove $(^Name) and all of its components? $\n\
+This will also remove all modified and new files, libraries and modules in the program directory"
+
+LangString UNINST_SUCCESS ${LANG_ENGLISH} "$(^Name) was successfully removed from your computer."
+LangString INSTALLER_RUNNING ${LANG_ENGLISH} "The installer is already running."
+LangString UNINSTALLER_RUNNING ${LANG_ENGLISH} "The uninstaller is already running."
+LangString ALREADY_INSTALLED ${LANG_ENGLISH} "${PRODUCT_NAME} is already installed. Install this package will overwrite existing files. Do you want to continue?"
diff --git a/packaging/windows/nsis/French.nsh b/packaging/windows/nsis/French.nsh
new file mode 100644
index 0000000..22e455c
--- /dev/null
+++ b/packaging/windows/nsis/French.nsh
@@ -0,0 +1,31 @@
+;Additional text definitions for French
+;These text definition have been translated from English using an automated translation tool
+;Please correct as required
+
+;file name of license file
+LicenseLangString MUILicense ${LANG_FRENCH} "..\COPYRIGHT.txt"
+
+;Component options
+LangString TITLE_SEC01 ${LANG_FRENCH} "Application principale"
+LangString TITLE_SEC02 ${LANG_FRENCH} "Bibliothèques et composants"
+LangString TITLE_SEC03 ${LANG_FRENCH} "Demos"
+LangString TITLE_SEC04 ${LANG_FRENCH} "Dossiers d'aide"
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_FRENCH} "Dossiers de base."
+LangString DESC_SEC02 ${LANG_FRENCH} "Les bibliothèques sont nécessaires à moins d'avoir été précédemment installées."
+LangString DESC_SEC03 ${LANG_FRENCH} "Quelques dossiers de demonstration."
+LangString DESC_SEC04 ${LANG_FRENCH} "Dossiers d'aide."
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_FRENCH} "Pour éditer ou créer des modèles 3D des modules PCB, vous devez installer Wings3D. \
+Wings3D et manuel d'utilisateur peuvent être téléchargement librement de la page Web de Wings3D.\
+Cochez cette boîte pour acceder à la page Web de Wings3D."
+
+LangString UNINST_PROMPT ${LANG_FRENCH} "Êtes-vous sûr de vouloir enlever complètement ${PRODUCT_NAME} et tous ses composants ? $\n\
+Ceci enlèvera également tous les dossiers, bibliothèques et modules modifiés et nouveaux dans le repertoire $(^name)"
+
+LangString UNINST_SUCCESS ${LANG_FRENCH} "$(^Name) a été avec succès enlevé à partir de votre ordinateur."
+LangString INSTALLER_RUNNING ${LANG_FRENCH} "L'installateur fonctionne déjà."
+LangString UNINSTALLER_RUNNING ${LANG_FRENCH} "Le desinstalleur fonctionne déjà."
+LangString ALREADY_INSTALLED ${LANG_FRENCH} "${PRODUCT_NAME} est déjà installé. Installer ce paquet remplacera les dossiers existants. Voulez-vous continuer ?"
diff --git a/packaging/windows/nsis/Installer Docs.odt b/packaging/windows/nsis/Installer Docs.odt
new file mode 100644
index 0000000..ede456e
--- /dev/null
+++ b/packaging/windows/nsis/Installer Docs.odt
Binary files differ
diff --git a/packaging/windows/nsis/Italian.nsh b/packaging/windows/nsis/Italian.nsh
new file mode 100644
index 0000000..606c066
--- /dev/null
+++ b/packaging/windows/nsis/Italian.nsh
@@ -0,0 +1,31 @@
+;Additional text definitions for Italian
+;These text definition have been translated from English using an automated translation tool
+;Please correct as required
+
+;File name of license file
+LicenseLangString MUILicense ${LANG_ITALIAN} "..\COPYRIGHT.txt"
+
+;Component option
+LangString TITLE_SEC01 ${LANG_ITALIAN} "Applicazione principale"
+LangString TITLE_SEC02 ${LANG_ITALIAN} "Biblioteche e componenti"
+LangString TITLE_SEC03 ${LANG_ITALIAN} "Progetti Demostration"
+LangString TITLE_SEC04 ${LANG_ITALIAN} "Lime di aiuto"
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_ITALIAN} "Lime di applicazione principale."
+LangString DESC_SEC02 ${LANG_ITALIAN} "Le biblioteche ed i componenti sono richiesti a meno che precedentemente siano state installate."
+LangString DESC_SEC03 ${LANG_ITALIAN} "Alcuni progetti e lezioni private di demostration."
+LangString DESC_SEC04 ${LANG_ITALIAN} "Lime di aiuto."
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_ITALIAN} "Per pubblicare o generare i modelli che dell'oggetto 3D dovete installare Wings3D. \
+Wings3D ed il manuale di utente possono provenire trasferimento dal sistema centrale verso i satelliti liberamente dal Web \
+page di Wings3D. Controlli questa scatola per aprire il Web page di Wings3D."
+
+LangString UNINST_PROMPT ${LANG_ITALIAN} "Siete sicuri voi desiderate completamente rimuovere $(^name) e tutti i relativi componenti? $\n\
+Ciò inoltre rimuoverà tutti i lime, biblioteche e moduli modificati e nuovi nell'indice di programma"
+
+LangString UNINST_SUCCESS ${LANG_ITALIAN} "$(^Name) con successo è stato rimosso dal vostro calcolatore."
+LangString INSTALLER_RUNNING ${LANG_ITALIAN} "L'installatore già sta funzionando."
+LangString UNINSTALLER_RUNNING ${LANG_ITALIAN} "Il uninstaller già sta funzionando."
+LangString ALREADY_INSTALLED ${LANG_ITALIAN} "${product_name} già è installato. Installi questo pacchetto scriverà sopra le lime attuali. Desiderate continuare?"
diff --git a/packaging/windows/nsis/Japanese.nsh b/packaging/windows/nsis/Japanese.nsh
new file mode 100644
index 0000000..97cb0ae
--- /dev/null
+++ b/packaging/windows/nsis/Japanese.nsh
@@ -0,0 +1,28 @@
+;Additional text definitions for Japanese
+
+;File name of license file
+LicenseLangString MUILicense ${LANG_JAPANESE} "..\COPYRIGHT.txt"
+
+;Component option
+LangString TITLE_SEC01 ${LANG_JAPANESE} "ƒƒCƒ“ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“"
+LangString TITLE_SEC02 ${LANG_JAPANESE} "ƒ‰ƒCƒuƒ‰ƒŠ‚ƃRƒ“ƒ|[ƒlƒ“ƒg"
+LangString TITLE_SEC03 ${LANG_JAPANESE} "ƒfƒ‚ƒ“ƒXƒgƒŒ[ƒVƒ‡ƒ“ ƒvƒƒWƒFƒNƒg"
+LangString TITLE_SEC04 ${LANG_JAPANESE} "ƒwƒ‹ƒv ƒtƒ@ƒCƒ‹"
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_JAPANESE} "ƒƒCƒ“ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒtƒ@ƒCƒ‹"
+LangString DESC_SEC02 ${LANG_JAPANESE} "ƒ‰ƒCƒuƒ‰ƒŠ‚ƃRƒ“ƒ|[ƒlƒ“ƒg‚͈ȑOƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚È‚¢ê‡•K—v‚Å‚·B"
+LangString DESC_SEC03 ${LANG_JAPANESE} "ƒfƒ‚ƒ“ƒXƒgƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚ƃ`ƒ…[ƒgƒŠƒAƒ‹"
+LangString DESC_SEC04 ${LANG_JAPANESE} "PDFŒ`Ž®‚̃wƒ‹ƒvƒtƒ@ƒCƒ‹"
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_JAPANESE} "3DƒIƒuƒWƒFƒNƒgƒ‚ƒfƒ‹‚Ìì¬A•ÒW‚ðs‚¤‚½‚ß‚É‚Í Wings3D‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B\
+Wings3D ‚ƃ†[ƒU[ƒ}ƒjƒ…ƒAƒ‹‚ÍA‚±‚̃{ƒbƒNƒX‚Ƀ`ƒFƒbƒN‚ð“ü‚ê‚Ä Wings3D ƒEƒFƒuƒy[ƒW ‚ðŠJ‚­‚±‚ƂŃ_ƒEƒ“ƒ[ƒh‚Å‚«‚Ü‚·B"
+
+LangString UNINST_PROMPT ${LANG_JAPANESE} "$(^Name) ‚Æ‘S‚ẴRƒ“ƒ|[ƒlƒ“ƒg‚ðŠ®‘S‚É휂µ‚Ü‚·B‹X‚µ‚¢‚Å‚·‚© $\n\
+‚±‚Ì‘€ì‚Í‘S‚Ä‚ÌV‚µ‚¢ƒtƒ@ƒCƒ‹AC³‚³‚ꂽƒtƒ@ƒCƒ‹AƒvƒƒOƒ‰ƒ€ƒfƒBƒŒƒNƒgƒŠ’†‚̃‰ƒCƒuƒ‰ƒŠ‚ƃ‚ƒWƒ…[ƒ‹‚à휂µ‚Ü‚·B"
+
+LangString UNINST_SUCCESS ${LANG_JAPANESE} "$(^Name) ‚Í‚ ‚È‚½‚̃Rƒ“ƒsƒ…[ƒ^‚©‚犮‘S‚É휂³‚ê‚Ü‚µ‚½B"
+LangString INSTALLER_RUNNING ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‰‚ÍŠù‚É‹N“®‚³‚ê‚Ä‚¢‚Ü‚·B"
+LangString UNINSTALLER_RUNNING ${LANG_JAPANESE} "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‰‚ÍŠù‚É‹N“®‚³‚ê‚Ä‚¢‚Ü‚·B"
+LangString ALREADY_INSTALLED ${LANG_JAPANESE} "${PRODUCT_NAME} ‚ÍŠù‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚̃pƒbƒP[ƒWƒCƒ“ƒXƒg[ƒ‹‚ÍŠù‘¶‚̃tƒ@ƒCƒ‹‚ðã‘‚«‚µ‚Ü‚·Bì‹Æ‚𑱂¯‚Ü‚·‚©H"
diff --git a/packaging/windows/nsis/Polish.nsh b/packaging/windows/nsis/Polish.nsh
new file mode 100644
index 0000000..74a4525
--- /dev/null
+++ b/packaging/windows/nsis/Polish.nsh
@@ -0,0 +1,28 @@
+;Additional text definitions for Polish
+
+;File name of license file
+LicenseLangString MUILicense ${LANG_POLISH} "..\COPYRIGHT.txt"
+
+;Component option
+LangString TITLE_SEC01 ${LANG_POLISH} "Pliki aplikacji"
+LangString TITLE_SEC02 ${LANG_POLISH} "Biblioteki i elementy"
+LangString TITLE_SEC03 ${LANG_POLISH} "Przyk³adowe projekty"
+LangString TITLE_SEC04 ${LANG_POLISH} "Pliki pomocy."
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_POLISH} "G³ówne pliki aplikacji."
+LangString DESC_SEC02 ${LANG_POLISH} "Biblioteki i elementy s¹ potrzebne je¿eli wczeœniej nie zosta³y zainstalowane."
+LangString DESC_SEC03 ${LANG_POLISH} "Kilka przyk³adowych projektów i tutoriali."
+LangString DESC_SEC04 ${LANG_POLISH} "Pliki pomocy."
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_POLISH} "Aby edytowaæ lub tworzyæ modele obiektów 3D musisz zainstalowaæ Wings3D. \
+Wings3D oraz instrukcja obs³ugi mog¹ zostaæ pobrane za darmo ze strony Wings3D. Zaznacz tê opcjê, aby otworzyæ stronê g³ówn¹ Wings3D"
+
+LangString UNINST_PROMPT ${LANG_POLISH} "Czy jesteœ pewny, ¿e chcesz usun¹æ $(^Name) i jego wszystkie komponenty? $\n\
+Zostan¹ równie¿ usuniête wszystkie zmodyfikowane i nowe pliki, biblioteki i modu³y znajduj¹ce siê w katalogu programu"
+
+LangString UNINST_SUCCESS ${LANG_POLISH} "$(^Name) zosta³ pomyœlnie usuniêty z twojego komputera."
+LangString INSTALLER_RUNNING ${LANG_POLISH} "Instalator jest ju¿ uruchomiony."
+LangString UNINSTALLER_RUNNING ${LANG_POLISH} "Deinstalator jest ju¿ uruchomiony."
+LangString ALREADY_INSTALLED ${LANG_POLISH} "${PRODUCT_NAME} jest ju¿ zainstalowany. Ponowna instalacja nadpisze istniej¹ce pliki. Czy kontynuowaæ?"
diff --git a/packaging/windows/nsis/Portuguese.nsh b/packaging/windows/nsis/Portuguese.nsh
new file mode 100644
index 0000000..860f156
--- /dev/null
+++ b/packaging/windows/nsis/Portuguese.nsh
@@ -0,0 +1,30 @@
+;Additional text definitions for Portuguese
+;These text definition have been translated from English using an automated translation tool
+;Please correct as required
+
+;File name of license file
+LicenseLangString MUILicense ${LANG_PORTUGUESE} "..\COPYRIGHT.txt"
+
+;Component option
+LangString TITLE_SEC01 ${LANG_PORTUGUESE} "Aplicativo principal"
+LangString TITLE_SEC02 ${LANG_PORTUGUESE} "Bibliotecas e componentes"
+LangString TITLE_SEC03 ${LANG_PORTUGUESE} "Projetos de Demostração"
+LangString TITLE_SEC04 ${LANG_PORTUGUESE} "Arquivos de ajuda"
+
+;Component option descriptions
+LangString DESC_SEC01 ${LANG_PORTUGUESE} "Arquivos do aplicativo principal."
+LangString DESC_SEC02 ${LANG_PORTUGUESE} "As bibliotecas e os componentes são necessários, a menos se já foram instalados previamente."
+LangString DESC_SEC03 ${LANG_PORTUGUESE} "Alguns projetos e tutoriais de demonstração."
+LangString DESC_SEC04 ${LANG_PORTUGUESE} "Arquivos de ajuda."
+
+;General messages
+LangString WINGS3D_PROMPT ${LANG_PORTUGUESE} "Para editar ou criar modelos de objetos 3D você necessita instalar o Wings3D. \
+Wings3D e o manual de usuário podem ser baixados livremente da Web page do Wings3D. Marque esta caixa para abrir a Web page do Wings3D."
+
+LangString UNINST_PROMPT ${LANG_PORTUGUESE} "Você está certo que quer remover completamente $(^Name) e todos seus componentes? $\n\
+Isto removerá também todos os arquivos, bibliotecas e módulos modificados, e novos no diretório do programa"
+
+LangString UNINST_SUCCESS ${LANG_PORTUGUESE} "$(^Name) foi removido com sucesso de seu computador."
+LangString INSTALLER_RUNNING ${LANG_PORTUGUESE} "O instalador já está executando."
+LangString UNINSTALLER_RUNNING ${LANG_PORTUGUESE} "O uninstaller já está executando."
+LangString ALREADY_INSTALLED ${LANG_PORTUGUESE} "${product_name} já está instalado. Instalar este pacote irá sobrepor os arquivos existentes. Você quer continuar?"
diff --git a/packaging/windows/nsis/Russian.nsh b/packaging/windows/nsis/Russian.nsh
new file mode 100644
index 0000000..c5e5c1c
--- /dev/null
+++ b/packaging/windows/nsis/Russian.nsh
@@ -0,0 +1,30 @@
+;Additional text definitions for French
+
+;file name of license file
+LicenseLangString MUILicense ${LANG_RUSSIAN} "..\COPYRIGHT.txt"
+
+;component option
+LangString TITLE_SEC01 ${LANG_RUSSIAN} "Ãëàâíàÿ ïðîãðàììà"
+LangString TITLE_SEC02 ${LANG_RUSSIAN} "Àðõèâû è êîìïîíåíòû"
+LangString TITLE_SEC03 ${LANG_RUSSIAN} "Ïðîåêòû äåìîíñòðàöèè"
+LangString TITLE_SEC04 ${LANG_RUSSIAN} "Àðõèâû ïîìîùè"
+
+;component option descriptions
+LangString DESC_SEC01 ${LANG_RUSSIAN} "Àðõèâû ãëàâíîé ïðîãðàììû."
+LangString DESC_SEC02 ${LANG_RUSSIAN} "Àðõèâû è êîìïîíåíòû íåîáõîäèìû åñëè îíè ðàíåå íå óñòàíîâèòü."
+LangString DESC_SEC03 ${LANG_RUSSIAN} "Íåêîòîðûå ïðîåêòû è êîíñóëüòàöèè äåìîíñòðàöèè."
+LangString DESC_SEC04 ${LANG_RUSSIAN} "Àðõèâû ïîìîùè."
+
+;warning messages
+LangString WINGS3D_PROMPT ${LANG_RUSSIAN} "Ðåäàêòèðîâàòü èëè ñîçäàâàòü ìîäåëè ïðåäìåòà, êîòîð 3D âû óñòàíîâèòü Wings3D. \
+Wings3D è ðóêîâîäñòâî ïîòðåáèòåëÿ ìîãóò áûòü download ñâîáîäíî îò ïðîâåðêè web page Wings3D ýòà êîðîáêà äëÿ òîãî ÷òîáû \
+ðàñêðûòü web page Wings3D."
+
+LangString UNINST_PROMPT ${LANG_RUSSIAN} "Âû óâåðåíû âû õîòèòå âïîëíå èçâëå÷ü $(^name) è âåñü èç ñâîèõ êîìïîíåíòîâ? $\n \
+Ýòî òàêæå èçâëåêàåò âñå äîðàáîòàííûå è íîâûå àðõèâû, àðõèâû è ìîäóëè â äèðåêòîðèè ïðîãðàììû"
+
+LangString UNINST_SUCCESS ${LANG_RUSSIAN} "$(^name) óñïåøíî èçâëåêëîñü îò âàøåãî êîìïüþòåðà."
+LangString INSTALLER_RUNNING ${LANG_RUSSIAN} "Óñòàíîâèòåëü óæå áåæèò."
+LangString UNINSTALLER_RUNNING ${LANG_RUSSIAN} "Óñòàíîâèòåëü óæå áåæèò."
+LangString ALREADY_INSTALLED ${LANG_RUSSIAN} "${product_name} óæå óñòàíîâëåíî. Óñòàíîâèòå ýòîò ïàêåò overwrite existing àðõèâû. \
+Âû õîòèòå ïðîäîëæàòü?"
diff --git a/packaging/windows/nsis/Spanish.nsh b/packaging/windows/nsis/Spanish.nsh
new file mode 100644
index 0000000..1c023de
--- /dev/null
+++ b/packaging/windows/nsis/Spanish.nsh
@@ -0,0 +1,31 @@
+;Additional text definitions for Spanish
+;These text definition have been translated from English using an automated translation tool
+;Please correct as required
+
+;file name of license file
+LicenseLangString MUILicense ${LANG_SPANISH} "..\COPYRIGHT.txt"
+
+;component option
+LangString TITLE_SEC01 ${LANG_SPANISH} "Uso principal"
+LangString TITLE_SEC02 ${LANG_SPANISH} "Bibliotecas y componentes"
+LangString TITLE_SEC03 ${LANG_SPANISH} "Proyectos de Demostration"
+LangString TITLE_SEC04 ${LANG_SPANISH} "Archivos de la ayuda"
+
+;component option descriptions
+LangString DESC_SEC01 ${LANG_SPANISH} "Archivos del uso principal."
+LangString DESC_SEC02 ${LANG_SPANISH} "Se requieren las bibliotecas y los componentes a menos que hayan estado instaladas previamente."
+LangString DESC_SEC03 ${LANG_SPANISH} "Algunos proyectos y clases particulares del demostration."
+LangString DESC_SEC04 ${LANG_SPANISH} "Archivos de la ayuda."
+
+;warning messages
+LangString WINGS3D_PROMPT ${LANG_SPANISH} "Para corregir o crear modelos del objeto 3D que usted necesita instalar Wings3D. \
+Wings3D y el manual de usuario pueden ser transferencia directa libremente del Web page de Wings3D. Compruebe esta caja \
+para abrir el Web page de Wings3D."
+
+LangString UNINST_PROMPT ${LANG_SPANISH} "¿Es usted seguro usted desea quitar totalmente $(^name) y todos sus componentes? $\n\
+Esto también quitará todos los archivos, bibliotecas y módulos modificados y nuevos en el directorio del programa."
+
+LangString UNINST_SUCCESS ${LANG_SPANISH} "$(^Name) fue quitado con éxito de su computadora."
+LangString INSTALLER_RUNNING ${LANG_SPANISH} "El instalador está funcionando ya."
+LangString UNINSTALLER_RUNNING ${LANG_SPANISH} "El uninstaller está funcionando ya."
+LangString ALREADY_INSTALLED ${LANG_SPANISH} "${product_name} está instalado ya. Instale este paquete sobreescribirá archivos existentes. ¿Usted desea continuar?"
diff --git a/packaging/windows/nsis/install.ico b/packaging/windows/nsis/install.ico
new file mode 100644
index 0000000..bc25e62
--- /dev/null
+++ b/packaging/windows/nsis/install.ico
Binary files differ
diff --git a/packaging/windows/nsis/install.nsi b/packaging/windows/nsis/install.nsi
new file mode 100644
index 0000000..5e93e99
--- /dev/null
+++ b/packaging/windows/nsis/install.nsi
@@ -0,0 +1,304 @@
+; Installation script for KiCad generated by Alastair Hoyle
+;
+; This installation script requires NSIS (Nullsoft Scriptable Install System) version 2.18 http://nsis.sourceforge.net/Main_Page
+; This script was created with HM NIS Edit version 2.0.3 http://hmne.sourceforge.net/
+;
+; This script is provided as is with no warranties and has only been tested on Windows XP.
+; Copyright (C) 2006 Alastair Hoyle <ahoyle@hoylesolutions.co.uk>
+; This program is free software; you can redistribute it and/or modify it under the terms of the
+; GNU General Public License as published by the Free Software Foundation. This program is distributed
+; in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+;
+; This script should be in a subdirectory of the full build directory (Kicad/NSIS by default)
+; When the build is updated the product and installer versions should be updated before recompiling the installation file
+;
+; This script expects the install.ico, uninstall.ico, language and license files to be in the same directory as this script
+
+; General Product Description Definitions
+!define PRODUCT_NAME "KiCad"
+!define PRODUCT_VERSION "2014.03.05"
+!define ALT_DOWNLOAD_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/"
+!define LIBRARIES_WEB_SITE "https://github.com/KiCad/"
+!define KICAD_MAIN_SITE "www.kicad-pcb.org/"
+!define COMPANY_NAME ""
+!define TRADE_MARKS ""
+!define COPYRIGHT "Kicad Developers Team"
+!define COMMENTS ""
+!define HELP_WEB_SITE "http://groups.yahoo.com/group/kicad-users/"
+!define DEVEL_WEB_SITE "https://launchpad.net/kicad/"
+!define WINGS3D_WEB_SITE "http://www.wings3d.com"
+
+!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
+!define UNINST_ROOT "HKLM"
+
+
+;Comment out the following SetCompressor command while testing this script
+;SetCompressor /final /solid lzma
+
+CRCCheck force
+XPStyle on
+Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
+OutFile "${PRODUCT_NAME}_stable-${PRODUCT_VERSION}-BZR4xxx_Win_full_version.exe"
+;InstallDir "$PROGRAMFILES\KiCad"
+InstallDir "C:\KiCad"
+ShowInstDetails hide
+ShowUnInstDetails hide
+
+; MUI 1.67 compatible ------
+!include "MUI.nsh"
+
+; MUI Settings
+!define MUI_ABORTWARNING
+!define MUI_ICON "install.ico"
+!define MUI_UNICON "uninstall.ico"
+
+; Language Selection Dialog Settings
+!define MUI_LANGDLL_REGISTRY_ROOT "${UNINST_ROOT}"
+!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
+!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
+
+; Installer pages
+!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
+!define MUI_CUSTOMFUNCTION_UNGUIINIT un.myGuiInit
+!insertmacro MUI_PAGE_WELCOME
+!insertmacro MUI_PAGE_LICENSE $(MUILicense)
+!insertmacro MUI_PAGE_COMPONENTS
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+!define MUI_FINISHPAGE_SHOWREADME ${WINGS3D_WEB_SITE}
+!define MUI_FINISHPAGE_SHOWREADME_TEXT "text"
+!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+!define MUI_PAGE_CUSTOMFUNCTION_PRE ModifyFinishPage
+!insertmacro MUI_PAGE_FINISH
+
+; Uninstaller pages
+!insertmacro MUI_UNPAGE_INSTFILES
+
+; Language files
+; - To add another language; add an insert macro line here and include a language file as below
+; - This must be after all page macros have been inserted
+!insertmacro MUI_LANGUAGE "English" ;first language is the default language
+!insertmacro MUI_LANGUAGE "French"
+!insertmacro MUI_LANGUAGE "Italian"
+!insertmacro MUI_LANGUAGE "Polish"
+!insertmacro MUI_LANGUAGE "Portuguese"
+!insertmacro MUI_LANGUAGE "Dutch"
+!insertmacro MUI_LANGUAGE "Russian"
+!insertmacro MUI_LANGUAGE "Japanese"
+
+!include "English.nsh"
+!include "French.nsh"
+!include "Dutch.nsh"
+!include "Italian.nsh"
+!include "Japanese.nsh"
+!include "Polish.nsh"
+!include "Portuguese.nsh"
+!include "Russian.nsh"
+
+; MUI end ------
+
+Function .onInit
+ ReserveFile "install.ico"
+ ReserveFile "uninstall.ico"
+ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
+ ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
+ ReserveFile "${NSISDIR}\Plugins\System.dll"
+ ReserveFile "${NSISDIR}\Contrib\Modern UI\ioSpecial.ini"
+ !insertmacro MUI_LANGDLL_DISPLAY
+FunctionEnd
+
+Function myGuiInit
+ Call PreventMultiInstances
+ Call CheckAlreadyInstalled
+FunctionEnd
+
+Function ModifyFinishPage
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Text" $(WINGS3D_PROMPT)
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" 168 ;make more space for prompt
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "CancelShow" "0" ;hide cancel button - already installed!!
+FunctionEnd
+
+Section $(TITLE_SEC01) SEC01
+ SectionIn RO
+ SetOverwrite try
+ SetOutPath "$INSTDIR"
+ File /nonfatal "..\AUTHORS.txt"
+ File /nonfatal "..\COPYRIGHT.txt"
+ File /nonfatal "..\license_for_documentation.txt"
+ SetOutPath "$INSTDIR\share\kicad\template"
+ File /nonfatal /r "..\share\kicad\template\*"
+ SetOutPath "$INSTDIR\bin"
+ File /r "..\bin\*"
+ SetOutPath "$INSTDIR\share\kicad\internat"
+ File /r "..\share\kicad\internat\*"
+SectionEnd
+
+Section $(TITLE_SEC02) SEC02
+ SetOverwrite try
+ SetOutPath "$INSTDIR\share\library"
+ File /nonfatal /r "..\share\library\*"
+ SetOutPath "$INSTDIR\share\modules"
+ File /nonfatal /r "..\share\modules\*"
+SectionEnd
+
+Section $(TITLE_SEC03) SEC03
+ SetOverwrite try
+ SetOutPath "$INSTDIR\share\kicad\demos"
+ File /nonfatal /r "..\share\kicad\demos\*"
+ SetOutPath "$INSTDIR\share\doc\kicad\tutorials"
+ File /nonfatal /r "..\share\doc\kicad\tutorials\*"
+SectionEnd
+
+Section $(TITLE_SEC04) SEC04
+ SetOverwrite try
+ SetOutPath "$INSTDIR\share\doc\kicad\help"
+ File /nonfatal /r "..\share\doc\kicad\help\*"
+SectionEnd
+
+Section -CreateShortcuts
+ SetOutPath $INSTDIR
+ WriteIniStr "$INSTDIR\HomePage.url" "InternetShortcut" "URL" "${KICAD_MAIN_SITE}"
+ WriteIniStr "$INSTDIR\AltDownloadSite.url" "InternetShortcut" "URL" "${ALT_DOWNLOAD_WEB_SITE}"
+ WriteIniStr "$INSTDIR\UserGroup.url" "InternetShortcut" "URL" "${HELP_WEB_SITE}"
+ WriteIniStr "$INSTDIR\DevelGroup.url" "InternetShortcut" "URL" "${DEVEL_WEB_SITE}"
+ WriteIniStr "$INSTDIR\LibrariesGroup.url" "InternetShortcut" "URL" "${LIBRARIES_WEB_SITE}"
+ WriteIniStr "$INSTDIR\Wings3D.url" "InternetShortcut" "URL" "${WINGS3D_WEB_SITE}"
+ SetShellVarContext all
+ CreateDirectory "$SMPROGRAMS\KiCad"
+ CreateShortCut "$SMPROGRAMS\KiCad\Home Page.lnk" "$INSTDIR\HomePage.url"
+ CreateShortCut "$SMPROGRAMS\KiCad\Kicad Alternate Download.lnk" "$INSTDIR\AltDownloadSite.url"
+ CreateShortCut "$SMPROGRAMS\KiCad\Kicad Libraries.lnk" "$INSTDIR\LibrariesGroup.url"
+ CreateShortCut "$SMPROGRAMS\KiCad\Wings3D.lnk" "$INSTDIR\Wings3D.url"
+ CreateShortCut "$SMPROGRAMS\KiCad\User Group.lnk" "$INSTDIR\UserGroup.url"
+ CreateShortCut "$SMPROGRAMS\KiCad\Devel Group.lnk" "$INSTDIR\DevelGroup.url"
+ CreateShortCut "$SMPROGRAMS\KiCad\Uninstall.lnk" "$INSTDIR\uninstaller.exe"
+ CreateShortCut "$SMPROGRAMS\KiCad\KiCad.lnk" "$INSTDIR\bin\kicad.exe"
+ CreateShortCut "$DESKTOP\KiCad.lnk" "$INSTDIR\bin\kicad.exe"
+SectionEnd
+
+Section -CreateAddRemoveEntry
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY_NAME}"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstaller.exe"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${KICAD_MAIN_SITE}"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\kicad.exe"
+ WriteRegDWORD ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "NoModify" "1"
+ WriteRegDWORD ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "NoRepair" "1"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "Comments" "${COMMENTS}"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "HelpLink" "${HELP_WEB_SITE}"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "${KICAD_MAIN_SITE}"
+ WriteRegStr ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR"
+
+ WriteUninstaller "$INSTDIR\uninstaller.exe"
+SectionEnd
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} $(DESC_SEC01)
+ !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} $(DESC_SEC02)
+ !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(DESC_SEC03)
+ !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $(DESC_SEC04)
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+Function un.onInit
+ !insertmacro MUI_UNGETLANGUAGE
+FunctionEnd
+
+Function un.myGuiInit
+ Call un.PreventMultiInstances
+ MessageBox MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON2 $(UNINST_PROMPT) /SD IDYES IDYES +2
+ Abort
+FunctionEnd
+
+Function un.onUninstSuccess
+ HideWindow
+ MessageBox MB_ICONINFORMATION|MB_OK $(UNINST_SUCCESS) /SD IDOK
+FunctionEnd
+
+Section Uninstall
+ ;delete uninstaller first
+ Delete "$INSTDIR\uninstaller.exe"
+
+ ;remove start menu shortcuts and web page links
+ SetShellVarContext all
+ Delete "$SMPROGRAMS\KiCad\Home Page.lnk"
+ Delete "$SMPROGRAMS\KiCad\Kicad Libraries.lnk"
+ Delete "$SMPROGRAMS\KiCad\Kicad Alternate Download.lnk"
+ Delete "$SMPROGRAMS\KiCad\Devel Group.lnk"
+ Delete "$SMPROGRAMS\KiCad\User Group.lnk"
+ Delete "$SMPROGRAMS\KiCad\Uninstall.lnk"
+ Delete "$SMPROGRAMS\KiCad\KiCad.lnk"
+ Delete "$SMPROGRAMS\KiCad\Wings3D.lnk"
+ Delete "$DESKTOP\KiCad.lnk"
+ Delete "$INSTDIR\Wings3D.url"
+ Delete "$INSTDIR\HomePage.url"
+ Delete "$INSTDIR\UserGroup.url"
+ Delete "$INSTDIR\AltDownloadSite.url"
+ Delete "$INSTDIR\DevelGroup.url"
+ Delete "$INSTDIR\LibrariesGroup.url"
+ RMDir "$SMPROGRAMS\KiCad"
+
+ ;remove all program files now
+ RMDir /r "$INSTDIR\bin"
+ RMDir /r "$INSTDIR\library"
+ RMDir /r "$INSTDIR\modules"
+ RMDir /r "$INSTDIR\template"
+ RMDir /r "$INSTDIR\internat"
+ RMDir /r "$INSTDIR\demos"
+ RMDir /r "$INSTDIR\tutorials"
+ RMDir /r "$INSTDIR\help"
+ RMDir /r "$INSTDIR\share\library"
+ RMDir /r "$INSTDIR\share\modules"
+ RMDir /r "$INSTDIR\share\kicad\template"
+ RMDir /r "$INSTDIR\share\kicad\internat"
+ RMDir /r "$INSTDIR\share\kicad\demos"
+ RMDir /r "$INSTDIR\share\doc\kicad\tutorials"
+ RMDir /r "$INSTDIR\share\doc\kicad\help"
+ RMDir /r "$INSTDIR\wings3d"
+ ;don't remove $INSTDIR recursively just in case the user has installed it in c:\ or
+ ;c:\program files as this would attempt to delete a lot more than just this package
+ Delete "$INSTDIR\*.txt"
+ RMDir "$INSTDIR"
+
+ ;Note - application registry keys are stored in the users individual registry hive (HKCU\Software\kicad".
+ ;It might be possible to remove these keys as well but it would require a lot of testing of permissions
+ ;and access to other people's registry entries. So for now we will leave the application registry keys.
+
+ ;remove installation registary keys
+ DeleteRegKey ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}"
+ SetAutoClose true
+SectionEnd
+
+;Setup.exe file version information
+ VIProductVersion "${PRODUCT_VERSION}.01" ;must be in x.x.x.x format - product version plus last digit for installer version number
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${PRODUCT_NAME}"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "${COMMENTS}"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${COMPANY_NAME}"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "${TRADE_MARKS}"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© ${COPYRIGHT}"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${PRODUCT_NAME} Installer"
+ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}"
+
+Function PreventMultiInstances
+ System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
+ Pop $R0
+ StrCmp $R0 0 +3
+ MessageBox MB_OK|MB_ICONEXCLAMATION $(INSTALLER_RUNNING) /SD IDOK
+ Abort
+FunctionEnd
+
+Function un.PreventMultiInstances
+ System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
+ Pop $R0
+ StrCmp $R0 0 +3
+ MessageBox MB_OK|MB_ICONEXCLAMATION $(UNINSTALLER_RUNNING) /SD IDOK
+ Abort
+FunctionEnd
+
+Function CheckAlreadyInstalled
+ ReadRegStr $R0 ${UNINST_ROOT} "${PRODUCT_UNINST_KEY}" "DisplayName"
+ StrCmp $R0 "" +3
+ MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(ALREADY_INSTALLED) /SD IDOK IDOK +2
+ Abort
+FunctionEnd
diff --git a/packaging/windows/nsis/uninstall.ico b/packaging/windows/nsis/uninstall.ico
new file mode 100644
index 0000000..84cce22
--- /dev/null
+++ b/packaging/windows/nsis/uninstall.ico
Binary files differ
diff --git a/pagelayout_editor/CMakeLists.txt b/pagelayout_editor/CMakeLists.txt
new file mode 100644
index 0000000..5177c56
--- /dev/null
+++ b/pagelayout_editor/CMakeLists.txt
@@ -0,0 +1,165 @@
+# the map generation creates on Windows/gcc a lot of useless warnings
+# so disable it on windows
+if( WIN32 AND NOT CMAKE_CROSSCOMPILING )
+ set( MAKE_LINK_MAPS false )
+else()
+ set( MAKE_LINK_MAPS true )
+endif()
+
+add_definitions(-DPL_EDITOR)
+
+include_directories(BEFORE ${INC_BEFORE})
+include_directories(
+ dialogs
+ ../common/dialogs
+ ${INC_AFTER}
+ )
+
+set( PL_EDITOR_SRCS
+ dialogs/properties_frame_base.cpp
+ dialogs/dialogs_for_printing.cpp
+ dialogs/dialog_new_dataitem_base.cpp
+ dialogs/dialog_new_dataitem.cpp
+ class_pl_editor_screen.cpp
+ class_pl_editor_layout.cpp
+ design_tree_frame.cpp
+ events_functions.cpp
+ controle.cpp
+ files.cpp
+ onleftclick.cpp
+ onrightclick.cpp
+ page_layout_writer.cpp
+ pl_editor_config.cpp
+ pl_editor_frame.cpp
+ pl_editor_undo_redo.cpp
+ properties_frame.cpp
+ hotkeys.cpp
+ menubar.cpp
+ toolbars_pl_editor.cpp
+ )
+
+set( PL_EDITOR_EXTRA_SRCS
+ ../common/base_screen.cpp
+ ../common/base_units.cpp
+ ../common/eda_text.cpp
+ ../common/class_page_info.cpp
+ ../common/dialogs/dialog_page_settings.cpp
+)
+
+
+if( MINGW )
+ # PL_EDITOR_RESOURCES variable is set by the macro.
+ mingw_resource_compiler( pl_editor )
+else()
+ set( PL_EDITOR_RESOURCES pl_editor.rc )
+endif()
+
+
+if( APPLE )
+ # setup bundle
+ set( PL_EDITOR_RESOURCES pl_editor.icns pl_editor_doc.icns )
+ set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pl_editor.icns" PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources
+ )
+ set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pl_editor_doc.icns" PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources
+ )
+ set( MACOSX_BUNDLE_ICON_FILE pl_editor.icns )
+ set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-pcb.kicad )
+ set( MACOSX_BUNDLE_NAME pl_editor )
+endif()
+
+# a very small program launcher for pl_editor_kiface
+add_executable( pl_editor WIN32 MACOSX_BUNDLE
+ ../common/single_top.cpp
+ ../common/pgm_base.cpp
+ ${PL_EDITOR_RESOURCES}
+ )
+set_source_files_properties( ../common/single_top.cpp PROPERTIES
+ COMPILE_DEFINITIONS "TOP_FRAME=FRAME_PL_EDITOR;PGM_DATA_FILE_EXT=\"kicad_wks\";BUILD_KIWAY_DLL"
+ )
+target_link_libraries( pl_editor
+ #singletop # replaces common, giving us restrictive control and link warnings.
+ # There's way too much crap coming in from common yet.
+ common
+ bitmaps
+ ${wxWidgets_LIBRARIES}
+ )
+
+if( MAKE_LINK_MAPS )
+ set_target_properties( pl_editor PROPERTIES
+ LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=pl_editor.map" )
+endif()
+
+# the main pl_editor program, in DSO form.
+add_library( pl_editor_kiface MODULE
+ pl_editor.cpp
+ ${PL_EDITOR_SRCS}
+ ${DIALOGS_SRCS}
+ ${PL_EDITOR_EXTRA_SRCS}
+ )
+target_link_libraries( pl_editor_kiface
+ common
+ polygon
+ bitmaps
+ gal
+ ${wxWidgets_LIBRARIES}
+ ${GDI_PLUS_LIBRARIES}
+ )
+set_target_properties( pl_editor_kiface PROPERTIES
+ OUTPUT_NAME pl_editor
+ PREFIX ${KIFACE_PREFIX}
+ SUFFIX ${KIFACE_SUFFIX}
+ )
+set_source_files_properties( pl_editor.cpp PROPERTIES
+ # The KIFACE is in pcbnew.cpp, export it:
+ COMPILE_DEFINITIONS "BUILD_KIWAY_DLL;COMPILING_DLL"
+ )
+
+if( MAKE_LINK_MAPS )
+ set_target_properties( pl_editor_kiface PROPERTIES
+ LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=_pl_editor.kiface.map" )
+endif()
+
+# if building pl_editor, then also build pl_editor_kiface if out of date.
+add_dependencies( pl_editor pl_editor_kiface )
+
+# these 2 binaries are a matched set, keep them together:
+if( APPLE )
+ set_target_properties( pl_editor PROPERTIES
+ MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
+ )
+
+ # puts binaries into the *.app bundle while linking
+ set_target_properties( pl_editor_kiface PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
+ )
+
+ # put individual bundle outside of main bundle as a first step
+ # will be pulled into the main bundle when creating main bundle
+ install( TARGETS pl_editor
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+ install( CODE "
+ # override default embedded path settings
+ ${OSX_BUNDLE_OVERRIDE_PATHS}
+
+ # do all the work
+ include( BundleUtilities )
+ fixup_bundle( ${KICAD_BIN}/pl_editor.app/Contents/MacOS/pl_editor
+ \"\"
+ \"\"
+ )
+ " COMPONENT Runtime
+ )
+else()
+ install( TARGETS pl_editor
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+ install( TARGETS pl_editor_kiface
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+endif()
diff --git a/pagelayout_editor/Info.plist b/pagelayout_editor/Info.plist
new file mode 100644
index 0000000..169550f
--- /dev/null
+++ b/pagelayout_editor/Info.plist
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeRole</key> <string>Editor</string>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>kicad_wks</string>
+ </array>
+ <key>CFBundleTypeIconFile</key> <string>pl_editor_doc.icns</string>
+ <key>CFBundleTypeName</key> <string>pl_editor document</string>
+ <key>LSHandlerRank</key> <string>Owner</string>
+ </dict>
+ </array>
+ <key>CFBundleDevelopmentRegion</key> <string>English</string>
+ <key>CFBundleExecutable</key> <string>pl_editor</string>
+ <key>CFBundleGetInfoString</key> <string></string>
+ <key>CFBundleIconFile</key> <string>pl_editor.icns</string>
+ <key>CFBundleIdentifier</key> <string>org.kicad-pcb.pl_editor</string>
+ <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string>
+ <key>CFBundleLongVersionString</key> <string></string>
+ <key>CFBundleName</key> <string>pl_editor</string>
+ <key>CFBundlePackageType</key> <string>APPL</string>
+ <key>CFBundleShortVersionString</key> <string></string>
+ <key>CFBundleSignature</key> <string>????</string>
+ <key>CFBundleVersion</key> <string></string>
+ <key>CSResourcesFileMapped</key> <true/>
+ <key>LSRequiresCarbon</key> <true/>
+ <key>NSHumanReadableCopyright</key> <string></string>
+ <key>NSHighResolutionCapable</key> <string>True</string>
+</dict>
+</plist>
diff --git a/pagelayout_editor/class_pl_editor_layout.cpp b/pagelayout_editor/class_pl_editor_layout.cpp
new file mode 100644
index 0000000..a40de53
--- /dev/null
+++ b/pagelayout_editor/class_pl_editor_layout.cpp
@@ -0,0 +1,53 @@
+/**
+ * @file class_pl_editor_layout.cpp
+ * @brief PL_EDITOR_LAYOUT class functions.
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <limits.h>
+#include <algorithm>
+
+#include <fctsys.h>
+#include <common.h>
+#include <class_pl_editor_layout.h>
+
+PL_EDITOR_LAYOUT::PL_EDITOR_LAYOUT()
+{
+ PAGE_INFO pageInfo( wxT( "A4" ) );
+ SetPageSettings( pageInfo );
+}
+
+
+PL_EDITOR_LAYOUT::~PL_EDITOR_LAYOUT()
+{
+}
+
+EDA_RECT PL_EDITOR_LAYOUT::ComputeBoundingBox()
+{
+ EDA_RECT bbox;
+
+ SetBoundingBox( bbox );
+ return bbox;
+}
diff --git a/pagelayout_editor/class_pl_editor_layout.h b/pagelayout_editor/class_pl_editor_layout.h
new file mode 100644
index 0000000..db04fcc
--- /dev/null
+++ b/pagelayout_editor/class_pl_editor_layout.h
@@ -0,0 +1,97 @@
+/**
+ * @file class_pl_editor_layout.h
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef CLASS_PL_EDITOR_LAYOUT_H
+#define CLASS_PL_EDITOR_LAYOUT_H
+
+#include <base_struct.h>
+#include <class_page_info.h>
+#include <class_title_block.h>
+
+class EDA_DRAW_PANEL;
+
+
+/**
+ * Class PL_EDITOR_LAYOUT
+ * holds list of GERBER_DRAW_ITEM currently loaded.
+ */
+class PL_EDITOR_LAYOUT
+{
+private:
+ EDA_RECT m_BoundingBox;
+ PAGE_INFO m_paper;
+ TITLE_BLOCK m_titles;
+
+public:
+ PL_EDITOR_LAYOUT();
+ ~PL_EDITOR_LAYOUT();
+
+ const PAGE_INFO& GetPageSettings() const { return m_paper; }
+ void SetPageSettings( const PAGE_INFO& aPageSettings )
+ {
+ m_paper = aPageSettings;
+ }
+
+ const wxPoint& GetAuxOrigin() const
+ {
+ static wxPoint zero( 0, 0 );
+ return zero;
+ }
+
+ const TITLE_BLOCK& GetTitleBlock() const
+ {
+ return m_titles;
+ }
+
+ void SetTitleBlock( const TITLE_BLOCK& aTitleBlock )
+ {
+ m_titles = aTitleBlock;
+ }
+
+ /**
+ * Function ComputeBoundingBox
+ * calculates the bounding box containing all Gerber items.
+ * @return EDA_RECT - the full item list bounding box
+ */
+ EDA_RECT ComputeBoundingBox();
+
+ /**
+ * Function GetBoundingBox
+ * may be called soon after ComputeBoundingBox() to return the same EDA_RECT,
+ * as long as the CLASS_PL_EDITOR_LAYOUT has not changed.
+ */
+ const EDA_RECT GetBoundingBox() const { return m_BoundingBox; } // override
+
+ void SetBoundingBox( const EDA_RECT& aBox ) { m_BoundingBox = aBox; }
+
+#if defined(DEBUG)
+ void Show( int nestLevel, std::ostream& os ) const; // overload
+
+#endif
+};
+
+#endif // #ifndef CLASS_PL_EDITOR_LAYOUT_H
diff --git a/pagelayout_editor/class_pl_editor_screen.cpp b/pagelayout_editor/class_pl_editor_screen.cpp
new file mode 100644
index 0000000..66a0840
--- /dev/null
+++ b/pagelayout_editor/class_pl_editor_screen.cpp
@@ -0,0 +1,140 @@
+/**
+ * @file class_pl_editor_screen.cpp
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <macros.h>
+#include <class_pl_editor_screen.h>
+#include <base_units.h>
+#include <pl_editor_id.h>
+
+
+#define MM_GRID( x ) wxRealPoint( x * IU_PER_MM, x * IU_PER_MM )
+#define ZOOM_FACTOR( x ) ( x * IU_PER_MM / 1000 )
+
+
+/**
+ Default zoom values.
+ Roughly a 1.5 progression.
+*/
+static const double pl_editorZoomList[] =
+{
+ ZOOM_FACTOR( 5 ),
+ ZOOM_FACTOR( 7.0 ),
+ ZOOM_FACTOR( 10.0 ),
+ ZOOM_FACTOR( 15.0 ),
+ ZOOM_FACTOR( 22.0 ),
+ ZOOM_FACTOR( 35.0 ),
+ ZOOM_FACTOR( 50.0 ),
+ ZOOM_FACTOR( 80.0 ),
+ ZOOM_FACTOR( 120.0 ),
+ ZOOM_FACTOR( 160.0 ),
+ ZOOM_FACTOR( 230.0 ),
+ ZOOM_FACTOR( 290.0 ),
+ ZOOM_FACTOR( 380.0 ),
+ ZOOM_FACTOR( 500.0 ),
+ ZOOM_FACTOR( 750.0 ),
+ ZOOM_FACTOR( 1000.0 ),
+ ZOOM_FACTOR( 1500.0 ),
+ ZOOM_FACTOR( 2000.0 ),
+ ZOOM_FACTOR( 3000.0 ),
+};
+
+
+// Default grid sizes for PCB editor screens.
+static GRID_TYPE pl_editorGridList[] =
+{
+ // predefined grid list in mm
+ { ID_POPUP_GRID_LEVEL_1MM, MM_GRID( 1.0 ) },
+ { ID_POPUP_GRID_LEVEL_0_5MM, MM_GRID( 0.5 ) },
+ { ID_POPUP_GRID_LEVEL_0_25MM, MM_GRID( 0.25 ) },
+ { ID_POPUP_GRID_LEVEL_0_2MM, MM_GRID( 0.2 ) },
+ { ID_POPUP_GRID_LEVEL_0_1MM, MM_GRID( 0.1 ) },
+};
+
+
+PL_EDITOR_SCREEN::PL_EDITOR_SCREEN( const wxSize& aPageSizeIU ) :
+ BASE_SCREEN( SCREEN_T )
+{
+ for( unsigned i = 0; i < DIM( pl_editorZoomList ); ++i )
+ m_ZoomList.push_back( pl_editorZoomList[i] );
+
+ for( unsigned i = 0; i < DIM( pl_editorGridList ); ++i )
+ AddGrid( pl_editorGridList[i] );
+
+ // pl_editor uses the same frame position as schematic and board editors
+ m_Center = false;
+
+ // Set the working grid size to a reasonable value
+ SetGrid( MM_GRID( 1.0 ) );
+
+ SetZoom( ZOOM_FACTOR( 350 ) ); // a default value for zoom
+
+ InitDataPoints( aPageSizeIU );
+ m_NumberOfScreens = 2;
+}
+
+
+PL_EDITOR_SCREEN::~PL_EDITOR_SCREEN()
+{
+ ClearUndoRedoList();
+}
+
+
+// virtual function
+int PL_EDITOR_SCREEN::MilsToIuScalar()
+{
+ return (int)IU_PER_MILS;
+}
+
+
+/* Virtual function needed by classes derived from BASE_SCREEN
+ * this is a virtual pure function in BASE_SCREEN
+ */
+void PL_EDITOR_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList,
+ int aItemCount )
+{
+ if( aItemCount == 0 )
+ return;
+
+ unsigned icnt = aList.m_CommandsList.size();
+
+ if( aItemCount > 0 )
+ icnt = aItemCount;
+
+ for( unsigned ii = 0; ii < icnt; ii++ )
+ {
+ if( aList.m_CommandsList.size() == 0 )
+ break;
+
+ PICKED_ITEMS_LIST* curr_cmd = aList.m_CommandsList[0];
+ aList.m_CommandsList.erase( aList.m_CommandsList.begin() );
+
+ curr_cmd->ClearListAndDeleteItems();
+ delete curr_cmd; // Delete command
+ }
+}
diff --git a/pagelayout_editor/class_pl_editor_screen.h b/pagelayout_editor/class_pl_editor_screen.h
new file mode 100644
index 0000000..957180f
--- /dev/null
+++ b/pagelayout_editor/class_pl_editor_screen.h
@@ -0,0 +1,80 @@
+/**
+ * @file class_pl_editor_screen.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef CLASS_PL_EDITOR_SCREEN_H_
+#define CLASS_PL_EDITOR_SCREEN_H_
+
+
+#include <base_units.h>
+#include <class_base_screen.h>
+
+class WORKSHEET_DATAITEM;
+
+
+/* Handle info to display a board */
+class PL_EDITOR_SCREEN : public BASE_SCREEN
+{
+public:
+ /**
+ * Constructor
+ * @param aPageSizeIU is the size of the initial paper page in internal units.
+ */
+ PL_EDITOR_SCREEN( const wxSize& aPageSizeIU );
+
+ ~PL_EDITOR_SCREEN();
+
+ virtual int MilsToIuScalar();
+
+ /**
+ * Function ClearUndoORRedoList
+ * virtual pure in BASE_SCREEN, so it must be defined here
+ */
+
+ void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
+ /**
+ * Function GetCurItem
+ * returns the currently selected WORKSHEET_DATAITEM, overriding
+ * BASE_SCREEN::GetCurItem().
+ * @return WORKSHEET_DATAITEM* - the one selected, or NULL.
+ */
+
+ WORKSHEET_DATAITEM* GetCurItem() const
+ {
+ return (WORKSHEET_DATAITEM*) BASE_SCREEN::GetCurItem();
+ }
+
+ /**
+ * Function SetCurItem
+ * sets the currently selected object, m_CurrentItem.
+ * @param aItem Any object derived from WORKSHEET_DATAITEM
+ */
+ void SetCurItem( WORKSHEET_DATAITEM* aItem ) { BASE_SCREEN::SetCurItem( (EDA_ITEM*)aItem ); }
+};
+
+
+#endif // CLASS_PL_EDITOR_SCREEN_H_
diff --git a/pagelayout_editor/controle.cpp b/pagelayout_editor/controle.cpp
new file mode 100644
index 0000000..e14c18d
--- /dev/null
+++ b/pagelayout_editor/controle.cpp
@@ -0,0 +1,62 @@
+/**
+ * @file pagelayout_editor/controle.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <class_drawpanel.h>
+#include <pl_editor_frame.h>
+
+
+bool PL_EDITOR_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey )
+{
+ bool eventHandled = true;
+
+ // Filter out the 'fake' mouse motion after a keyboard movement
+ if( !aHotKey && m_movingCursorWithKeyboard )
+ {
+ m_movingCursorWithKeyboard = false;
+ return false;
+ }
+
+ wxPoint pos = aPosition;
+ wxPoint oldpos = GetCrossHairPosition();
+ GeneralControlKeyMovement( aHotKey, &pos, true );
+
+ // Update cursor position.
+ SetCrossHairPosition( pos, true );
+ RefreshCrossHair( oldpos, aPosition, aDC );
+
+ if( aHotKey )
+ {
+ eventHandled = OnHotKey( aDC, aHotKey, aPosition );
+ }
+
+ UpdateStatusBar();
+
+ return eventHandled;
+}
diff --git a/pagelayout_editor/design_tree_frame.cpp b/pagelayout_editor/design_tree_frame.cpp
new file mode 100644
index 0000000..59fe1e0
--- /dev/null
+++ b/pagelayout_editor/design_tree_frame.cpp
@@ -0,0 +1,291 @@
+/**
+ * @file design_tree_frame.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/imaglist.h>
+#include <wx/wupdlock.h>
+#include <fctsys.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <pl_editor_id.h>
+#include <design_tree_frame.h>
+
+/* XPM
+ * This bitmap is used to show item types
+ */
+static const char* root_xpm[] =
+{
+ "12 12 2 1",
+ " c None",
+ "x c #008080",
+ " xxxx ",
+ " xxx ",
+ " xxx ",
+ " xxx ",
+ "xxxxxxxxxxx ",
+ "xxxxxxxxxxxx",
+ "xxxxxxxxxxx ",
+ " xxx ",
+ " xxx ",
+ " xxx ",
+ " xxxx ",
+ " "
+};
+
+static const char* line_xpm[] =
+{
+ "12 12 2 1",
+ " c None",
+ "x c #008080",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xx ",
+ "xxxxxxxxxxxx",
+ "xxxxxxxxxxxx"
+};
+
+static const char* rect_xpm[] =
+{
+ "12 12 2 1",
+ " c None",
+ "x c #000080",
+ "xxxxxxxxxxxx",
+ "xxxxxxxxxxxx",
+ "xx xx",
+ "xx xx",
+ "xx xx",
+ "xx xx",
+ "xx xx",
+ "xx xx",
+ "xx xx",
+ "xx xx",
+ "xxxxxxxxxxxx",
+ "xxxxxxxxxxxx"
+};
+
+static const char* text_xpm[] =
+{
+ "12 12 2 1",
+ " c None",
+ "x c #800000",
+ " xxxxxxxxxx ",
+ "xxxxxxxxxxxx",
+ "xx xx xx",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xxxx ",
+ " xxxxxx "
+};
+
+static const char* poly_xpm[] =
+{
+ "12 12 2 1",
+ " c None",
+ "x c #008000",
+ " xx ",
+ " xxxx ",
+ " xxxxxx ",
+ " xxxxxxxx ",
+ " xxxxxxxxxx ",
+ "xxxxxxxxxxxx",
+ "xxxxxxxxxxxx",
+ " xxxxxxxxxx ",
+ " xxxxxxxx ",
+ " xxxxxx ",
+ " xxxx ",
+ " xx "
+};
+
+static const char* img_xpm[] =
+{
+ "12 12 2 1",
+ " c None",
+ "x c #800000",
+ " xx ",
+ " xxxxxx ",
+ " xx xx ",
+ "xx xx",
+ "xx xx",
+ " xx xx ",
+ " xxxxxx ",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xx ",
+ " xx "
+};
+
+// Event table:
+
+
+DESIGN_TREE_FRAME::DESIGN_TREE_FRAME( PL_EDITOR_FRAME* aParent ) :
+ wxTreeCtrl( aParent, ID_DESIGN_TREE_FRAME )
+{
+ // icons size is not know (depending on they are built)
+ // so get it:
+ wxSize iconsize;
+ wxBitmap root_bm( root_xpm );
+
+ iconsize.x = root_bm.GetWidth();
+ iconsize.y = root_bm.GetHeight();
+
+ // Make an image list containing small icons
+ m_imageList = new wxImageList( iconsize.x, iconsize.y, true, 6 );
+
+ m_imageList->Add( root_bm ); // root symbol
+ m_imageList->Add( wxBitmap( line_xpm ) ); // line item
+ m_imageList->Add( wxBitmap( rect_xpm ) ); // rect item
+ m_imageList->Add( wxBitmap( text_xpm ) ); // text item
+ m_imageList->Add( wxBitmap( poly_xpm ) ); // poly item
+ m_imageList->Add( wxBitmap( img_xpm ) ); // bitmap item
+
+ SetImageList( m_imageList );
+}
+
+
+DESIGN_TREE_FRAME::~DESIGN_TREE_FRAME()
+{
+ delete m_imageList;
+}
+
+
+wxSize DESIGN_TREE_FRAME::GetMinSize() const
+{
+ return wxSize( 100, -1 );
+}
+
+
+void DESIGN_TREE_FRAME::ReCreateDesignTree()
+{
+ wxWindowUpdateLocker dummy(this); // Avoid flicker when rebuilding the tree
+
+ DeleteAllItems();
+
+ const WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+
+ // root tree:
+ wxFileName fn( ((PL_EDITOR_FRAME*) GetParent())->GetCurrFileName() );
+ wxTreeItemId rootitem;
+
+ if( fn.GetName().IsEmpty() )
+ rootitem = AddRoot( wxT( "<default>" ), 0, 0 );
+ else
+ rootitem = AddRoot( fn.GetName(), 0, 0 );
+
+ SetItemBold( rootitem, true );
+
+ // Now adding all current items
+ for( unsigned ii = 0; ii < pglayout.GetCount(); ii++ )
+ {
+ WORKSHEET_DATAITEM* item = pglayout.GetItem( ii );
+ int img = 0;
+ switch( item->GetType() )
+ {
+ case WORKSHEET_DATAITEM::WS_SEGMENT: img = 1; break;
+ case WORKSHEET_DATAITEM::WS_RECT: img = 2; break;
+ case WORKSHEET_DATAITEM::WS_TEXT: img = 3; break;
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON: img = 4; break;
+ case WORKSHEET_DATAITEM::WS_BITMAP: img = 5; break;
+ }
+ wxTreeItemId cell= AppendItem( rootitem, item->m_Name, img, img );
+ DESIGN_TREE_ITEM_DATA* data = new DESIGN_TREE_ITEM_DATA( item );
+ SetItemData( cell, data );
+ }
+
+ Expand( rootitem );
+}
+
+
+// Select the tree item corresponding to the WORKSHEET_DATAITEM aItem
+void DESIGN_TREE_FRAME::SelectCell( WORKSHEET_DATAITEM* aItem )
+{
+ wxTreeItemId rootcell = GetRootItem();
+ wxTreeItemIdValue cookie;
+
+ wxTreeItemId cell = GetFirstChild( rootcell, cookie );
+
+ while( cell.IsOk() )
+ {
+ DESIGN_TREE_ITEM_DATA* data = (DESIGN_TREE_ITEM_DATA*) GetItemData( cell );
+
+ if( data->GetItem() == aItem )
+ {
+ SelectItem( cell );
+ return;
+ }
+
+ cell = GetNextChild( rootcell, cookie );
+ }
+}
+
+//return the page layout item managed by the cell
+WORKSHEET_DATAITEM* DESIGN_TREE_FRAME::GetPageLayoutItem( wxTreeItemId aCell ) const
+{
+ DESIGN_TREE_ITEM_DATA* data = (DESIGN_TREE_ITEM_DATA*) GetItemData( aCell );
+ if( data )
+ return data->GetItem();
+ else
+ return NULL;
+}
+
+/* return the page layout item managed by the selected cell (or NULL)
+ */
+WORKSHEET_DATAITEM* DESIGN_TREE_FRAME::GetPageLayoutSelectedItem() const
+{
+ wxTreeItemId cell;
+ cell = GetSelection();
+
+ if( cell.IsOk() )
+ return GetPageLayoutItem( cell );
+
+ return NULL;
+}
+
+/* return the page layout item index managed by the selected cell (or -1)
+ */
+int DESIGN_TREE_FRAME::GetSelectedItemIndex()
+{
+ WORKSHEET_DATAITEM*item = GetPageLayoutSelectedItem();
+
+ if( item == NULL )
+ return -1;
+
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ return pglayout.GetItemIndex( item );
+}
diff --git a/pagelayout_editor/design_tree_frame.h b/pagelayout_editor/design_tree_frame.h
new file mode 100644
index 0000000..1ff901e
--- /dev/null
+++ b/pagelayout_editor/design_tree_frame.h
@@ -0,0 +1,108 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file design_tree_frame.h
+ */
+
+#ifndef _DESIGN_TREE_FRAME_H
+#define _DESIGN_TREE_FRAME_H
+
+#include <wx/treectrl.h>
+
+#include <pl_editor_frame.h>
+
+class WORKSHEET_DATAITEM;
+
+/** class DESIGN_TREE_ITEM
+ * Handle one item for the page layoiut design
+ */
+class DESIGN_TREE_ITEM_DATA : public wxTreeItemData
+{
+private:
+ WORKSHEET_DATAITEM* m_wsItem; // the page layout item owned by me
+
+public:
+
+ DESIGN_TREE_ITEM_DATA( WORKSHEET_DATAITEM* aItem = NULL )
+ {
+ m_wsItem = aItem;
+ }
+
+ /** @return the item managed by the cell
+ */
+ WORKSHEET_DATAITEM* GetItem() const
+ {
+ return m_wsItem;
+ }
+
+ /** Set the link to the item managed by the cell
+ */
+ void SetItem( WORKSHEET_DATAITEM* aItem )
+ {
+ m_wsItem = aItem;
+ }
+};
+
+
+/**
+ * Class DESIGN_TREE_FRAME is the left window showing the list of items
+ */
+
+class DESIGN_TREE_FRAME : protected wxTreeCtrl
+{
+ friend class PL_EDITOR_FRAME;
+
+private:
+ wxImageList* m_imageList;
+
+public:
+ DESIGN_TREE_FRAME( PL_EDITOR_FRAME* aParent );
+ ~DESIGN_TREE_FRAME();
+
+ void ReCreateDesignTree();
+ wxSize GetMinSize() const;
+
+ /** @return the page layout item managed by the cell
+ */
+ WORKSHEET_DATAITEM* GetPageLayoutItem(wxTreeItemId aCell) const;
+
+ /** @return the page layout item managed by the selected cell (or NULL)
+ */
+ WORKSHEET_DATAITEM* GetPageLayoutSelectedItem() const;
+
+ /** @return the page layout item index managed by the selected cell (or -1)
+ */
+ int GetSelectedItemIndex();
+
+ // Select the tree item corresponding to the WORKSHEET_DATAITEM aItem
+ void SelectCell( WORKSHEET_DATAITEM* aItem );
+
+ void SelectCell( const wxTreeItemId &aTreeItem, bool aSelect=true )
+ {
+ SelectItem( aTreeItem, aSelect );
+ }
+};
+
+#endif /* _DESIGN_TREE_FRAME_H */
diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem.cpp b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
new file mode 100644
index 0000000..12a6744
--- /dev/null
+++ b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
@@ -0,0 +1,185 @@
+/**
+ * @file dialog_new_dataitem.cpp
+ * @brief a dialog called on creating a new plage layout data item.
+*/
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <class_drawpanel.h>
+
+#include <pl_editor_frame.h>
+#include <class_worksheet_dataitem.h>
+#include <dialog_new_dataitem_base.h>
+
+class DIALOG_NEW_DATAITEM : public DIALOG_NEW_DATAITEM_BASE
+{
+ WORKSHEET_DATAITEM* m_item;
+
+public:
+ DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem );
+
+private:
+ void OnCancelClick( wxCommandEvent& event );
+ void OnOKClick( wxCommandEvent& event );
+
+ void initDlg();
+};
+
+
+int InvokeDialogNewItem( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem )
+{
+ DIALOG_NEW_DATAITEM dlg( aCaller, aItem );
+ return dlg.ShowModal();
+}
+
+DIALOG_NEW_DATAITEM::DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller,
+ WORKSHEET_DATAITEM* aItem )
+ : DIALOG_NEW_DATAITEM_BASE( aCaller )
+{
+ m_item = aItem;
+ initDlg();
+
+ GetSizer()->SetSizeHints( this );
+ Centre();
+}
+
+void DIALOG_NEW_DATAITEM::OnCancelClick( wxCommandEvent& event )
+{
+ EndModal( wxID_CANCEL);
+}
+
+void DIALOG_NEW_DATAITEM::OnOKClick( wxCommandEvent& event )
+{
+ if( m_item->GetType() == WORKSHEET_DATAITEM::WS_TEXT )
+ {
+ WORKSHEET_DATAITEM_TEXT* text = ((WORKSHEET_DATAITEM_TEXT*)m_item);
+ text->m_TextBase = m_textCtrlText->GetValue();
+ // For multiline texts, replace the '\n' char by the "\\n" sequence",
+ // in internal string
+ text->m_TextBase.Replace( wxT("\n"), wxT("\\n") );
+ }
+
+ wxString msg;
+
+ // Import Start point
+ double dtmp;
+ msg = m_textCtrlPosX->GetValue();
+ msg.ToDouble( &dtmp );
+ m_item->m_Pos.m_Pos.x = dtmp;
+
+ msg = m_textCtrlPosY->GetValue();
+ msg.ToDouble( &dtmp );
+ m_item->m_Pos.m_Pos.y = dtmp;
+
+ switch( m_choiceCornerPos->GetSelection() )
+ {
+ case 2: m_item->m_Pos.m_Anchor = RB_CORNER; break;
+ case 0: m_item->m_Pos.m_Anchor = RT_CORNER; break;
+ case 3: m_item->m_Pos.m_Anchor = LB_CORNER; break;
+ case 1: m_item->m_Pos.m_Anchor = LT_CORNER; break;
+ }
+
+ // Import End point
+ msg = m_textCtrlEndX->GetValue();
+ msg.ToDouble( &dtmp );
+ m_item->m_End.m_Pos.x = dtmp;
+
+ msg = m_textCtrlEndY->GetValue();
+ msg.ToDouble( &dtmp );
+ m_item->m_End.m_Pos.y = dtmp;
+
+ switch( m_choiceCornerEnd->GetSelection() )
+ {
+ case 2: m_item->m_End.m_Anchor = RB_CORNER; break;
+ case 0: m_item->m_End.m_Anchor = RT_CORNER; break;
+ case 3: m_item->m_End.m_Anchor = LB_CORNER; break;
+ case 1: m_item->m_End.m_Anchor = LT_CORNER; break;
+ }
+
+ EndModal( wxID_OK);
+}
+
+void DIALOG_NEW_DATAITEM::initDlg()
+{
+ // Disable useless widgets, depending on WORKSHEET_DATAITEM type
+ switch( m_item->GetType() )
+ {
+ case WORKSHEET_DATAITEM::WS_SEGMENT:
+ case WORKSHEET_DATAITEM::WS_RECT:
+ m_textCtrlText->Enable( false );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_BITMAP:
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
+ m_textCtrlText->Enable( false );
+ // fall through
+ case WORKSHEET_DATAITEM::WS_TEXT:
+ m_textCtrlEndX->Enable( false );
+ m_textCtrlEndY->Enable( false );
+ m_choiceCornerEnd->Enable( false );
+ break;
+ }
+
+ wxString msg;
+
+ // Position/ start point
+ msg.Printf( wxT("%.3f"), m_item->m_Pos.m_Pos.x );
+ m_textCtrlPosX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), m_item->m_Pos.m_Pos.y );
+ m_textCtrlPosY->SetValue( msg );
+ switch( m_item->m_Pos.m_Anchor )
+ {
+ case RB_CORNER: // right bottom corner
+ m_choiceCornerPos->SetSelection( 2 ); break;
+ case RT_CORNER: // right top corner
+ m_choiceCornerPos->SetSelection( 0 ); break;
+ case LB_CORNER: // left bottom corner
+ m_choiceCornerPos->SetSelection( 3 ); break;
+ case LT_CORNER: // left top corner
+ m_choiceCornerPos->SetSelection( 1 ); break;
+ }
+
+ // End point
+ msg.Printf( wxT("%.3f"), m_item->m_End.m_Pos.x );
+ m_textCtrlEndX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), m_item->m_End.m_Pos.y );
+ m_textCtrlEndY->SetValue( msg );
+ switch( m_item->m_End.m_Anchor )
+ {
+ case RB_CORNER: // right bottom corner
+ m_choiceCornerEnd->SetSelection( 2 ); break;
+ case RT_CORNER: // right top corner
+ m_choiceCornerEnd->SetSelection( 0 ); break;
+ case LB_CORNER: // left bottom corner
+ m_choiceCornerEnd->SetSelection( 3 ); break;
+ case LT_CORNER: // left top corner
+ m_choiceCornerEnd->SetSelection( 1 ); break;
+ }
+
+ if( m_item->GetType() == WORKSHEET_DATAITEM::WS_TEXT )
+ m_textCtrlText->SetValue( ((WORKSHEET_DATAITEM_TEXT*)m_item)->m_TextBase );
+}
diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp b/pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp
new file mode 100644
index 0000000..0bb94bc
--- /dev/null
+++ b/pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp
@@ -0,0 +1,157 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Oct 8 2012)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_new_dataitem_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_NEW_DATAITEM_BASE::DIALOG_NEW_DATAITEM_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizerMain;
+ bSizerMain = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerUpper;
+ bSizerUpper = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerPos;
+ bSizerPos = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerPosXY;
+ bSizerPosXY = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextPosX = new wxStaticText( this, wxID_ANY, _("Pos X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPosX->Wrap( -1 );
+ bSizerPosXY->Add( m_staticTextPosX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlPosX = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerPosXY->Add( m_textCtrlPosX, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_staticTextPosY = new wxStaticText( this, wxID_ANY, _("Pos Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPosY->Wrap( -1 );
+ bSizerPosXY->Add( m_staticTextPosY, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlPosY = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerPosXY->Add( m_textCtrlPosY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerPos->Add( bSizerPosXY, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer6;
+ bSizer6 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextOrgPos = new wxStaticText( this, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextOrgPos->Wrap( -1 );
+ bSizer6->Add( m_staticTextOrgPos, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxString m_choiceCornerPosChoices[] = { _("Upper Right"), _("Upper Left"), _("Lower Right"), _("Lower Left") };
+ int m_choiceCornerPosNChoices = sizeof( m_choiceCornerPosChoices ) / sizeof( wxString );
+ m_choiceCornerPos = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCornerPosNChoices, m_choiceCornerPosChoices, 0 );
+ m_choiceCornerPos->SetSelection( 2 );
+ bSizer6->Add( m_choiceCornerPos, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerPos->Add( bSizer6, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerUpper->Add( bSizerPos, 1, wxEXPAND, 5 );
+
+ m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerUpper->Add( m_staticline2, 0, wxEXPAND | wxALL, 5 );
+
+ m_SizerEndPosition = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerEndXY;
+ bSizerEndXY = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextEndX = new wxStaticText( this, wxID_ANY, _("End X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextEndX->Wrap( -1 );
+ bSizerEndXY->Add( m_staticTextEndX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlEndX = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerEndXY->Add( m_textCtrlEndX, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_staticTextEndY = new wxStaticText( this, wxID_ANY, _("End Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextEndY->Wrap( -1 );
+ bSizerEndXY->Add( m_staticTextEndY, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlEndY = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerEndXY->Add( m_textCtrlEndY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ m_SizerEndPosition->Add( bSizerEndXY, 1, 0, 5 );
+
+ wxBoxSizer* bSizer61;
+ bSizer61 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextOrgPos1 = new wxStaticText( this, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextOrgPos1->Wrap( -1 );
+ bSizer61->Add( m_staticTextOrgPos1, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxString m_choiceCornerEndChoices[] = { _("Upper Right"), _("Upper Left"), _("Lower Right"), _("Lower Left") };
+ int m_choiceCornerEndNChoices = sizeof( m_choiceCornerEndChoices ) / sizeof( wxString );
+ m_choiceCornerEnd = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCornerEndNChoices, m_choiceCornerEndChoices, 0 );
+ m_choiceCornerEnd->SetSelection( 2 );
+ bSizer61->Add( m_choiceCornerEnd, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ m_SizerEndPosition->Add( bSizer61, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerUpper->Add( m_SizerEndPosition, 1, wxEXPAND, 5 );
+
+ m_staticlineEndXY = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerUpper->Add( m_staticlineEndXY, 0, wxEXPAND | wxALL, 5 );
+
+ m_SizerText = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextTitle = new wxStaticText( this, wxID_ANY, _("Text"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTitle->Wrap( -1 );
+ m_SizerText->Add( m_staticTextTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
+ m_textCtrlText->SetMinSize( wxSize( 300,-1 ) );
+
+ m_SizerText->Add( m_textCtrlText, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_SizerText->Add( m_staticline3, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerUpper->Add( m_SizerText, 1, wxEXPAND, 5 );
+
+
+ bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
+
+ m_sdbSizerButtons = new wxStdDialogButtonSizer();
+ m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
+ m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
+ m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
+ m_sdbSizerButtons->Realize();
+
+ bSizerMain->Add( m_sdbSizerButtons, 0, wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizerMain );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ m_sdbSizerButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnCancelClick ), NULL, this );
+ m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnOKClick ), NULL, this );
+}
+
+DIALOG_NEW_DATAITEM_BASE::~DIALOG_NEW_DATAITEM_BASE()
+{
+ // Disconnect Events
+ m_sdbSizerButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnCancelClick ), NULL, this );
+ m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnOKClick ), NULL, this );
+
+}
diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp b/pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp
new file mode 100644
index 0000000..01f823f
--- /dev/null
+++ b/pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp
@@ -0,0 +1,1666 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="11" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_new_dataitem_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">dialog_new_dataitem_base</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="use_enum">0</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center">wxBOTH</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">DIALOG_NEW_DATAITEM_BASE</property>
+ <property name="pos"></property>
+ <property name="size">328,335</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+ <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+ <property name="title">New Item</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerMain</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerUpper</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerPos</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerPosXY</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Pos X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPosX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlPosX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Pos Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPosY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlPosY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer6</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Origin</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextOrgPos</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Upper Right&quot; &quot;Upper Left&quot; &quot;Lower Right&quot; &quot;Lower Left&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_choiceCornerPos</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">2</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerEndPosition</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerEndXY</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">End X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextEndX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlEndX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">End Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextEndY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlEndY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer61</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Origin</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextOrgPos1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Upper Right&quot; &quot;Upper Left&quot; &quot;Lower Right&quot; &quot;Lower Left&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_choiceCornerEnd</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">2</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticlineEndXY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerText</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextTitle</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">300,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlText</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_MULTILINE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline3</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">1</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizerButtons</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick">OnCancelClick</event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick">OnOKClick</event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem_base.h b/pagelayout_editor/dialogs/dialog_new_dataitem_base.h
new file mode 100644
index 0000000..8716392
--- /dev/null
+++ b/pagelayout_editor/dialogs/dialog_new_dataitem_base.h
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Oct 8 2012)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_NEW_DATAITEM_BASE_H__
+#define __DIALOG_NEW_DATAITEM_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/textctrl.h>
+#include <wx/sizer.h>
+#include <wx/choice.h>
+#include <wx/statline.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_NEW_DATAITEM_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_NEW_DATAITEM_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxStaticText* m_staticTextPosX;
+ wxTextCtrl* m_textCtrlPosX;
+ wxStaticText* m_staticTextPosY;
+ wxTextCtrl* m_textCtrlPosY;
+ wxStaticText* m_staticTextOrgPos;
+ wxChoice* m_choiceCornerPos;
+ wxStaticLine* m_staticline2;
+ wxBoxSizer* m_SizerEndPosition;
+ wxStaticText* m_staticTextEndX;
+ wxTextCtrl* m_textCtrlEndX;
+ wxStaticText* m_staticTextEndY;
+ wxTextCtrl* m_textCtrlEndY;
+ wxStaticText* m_staticTextOrgPos1;
+ wxChoice* m_choiceCornerEnd;
+ wxStaticLine* m_staticlineEndXY;
+ wxBoxSizer* m_SizerText;
+ wxStaticText* m_staticTextTitle;
+ wxTextCtrl* m_textCtrlText;
+ wxStaticLine* m_staticline3;
+ wxStdDialogButtonSizer* m_sdbSizerButtons;
+ wxButton* m_sdbSizerButtonsOK;
+ wxButton* m_sdbSizerButtonsCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOKClick( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_NEW_DATAITEM_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("New Item"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 328,335 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_NEW_DATAITEM_BASE();
+
+};
+
+#endif //__DIALOG_NEW_DATAITEM_BASE_H__
diff --git a/pagelayout_editor/dialogs/dialogs_for_printing.cpp b/pagelayout_editor/dialogs/dialogs_for_printing.cpp
new file mode 100644
index 0000000..5ed93f4
--- /dev/null
+++ b/pagelayout_editor/dialogs/dialogs_for_printing.cpp
@@ -0,0 +1,251 @@
+/**
+ * @file dialogs_for_printing.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <gr_basic.h>
+#include <class_drawpanel.h>
+#include <base_units.h>
+
+#include <pl_editor_frame.h>
+#include <pl_editor_id.h>
+#include <dialog_helpers.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <dialog_page_settings.h>
+#include <invoke_pl_editor_dialog.h>
+
+/**
+ * Custom print out for printing schematics.
+ */
+class PLEDITOR_PRINTOUT : public wxPrintout
+{
+private:
+ PL_EDITOR_FRAME* m_parent;
+
+public:
+ PLEDITOR_PRINTOUT( PL_EDITOR_FRAME* aParent, const wxString& aTitle ) :
+ wxPrintout( aTitle )
+ {
+ wxASSERT( aParent != NULL );
+ m_parent = aParent;
+ }
+
+ bool OnPrintPage( int aPageNum );
+ bool HasPage( int aPageNum ) { return ( aPageNum <= 2 ); }
+ void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
+ void DrawPage( int aPageNum );
+};
+
+/**
+ * Custom print preview frame.
+ */
+class PLEDITOR_PREVIEW_FRAME : public wxPreviewFrame
+{
+ PL_EDITOR_FRAME* m_parent;
+
+public:
+ PLEDITOR_PREVIEW_FRAME( wxPrintPreview* aPreview, PL_EDITOR_FRAME* aParent,
+ const wxString& aTitle, const wxPoint& aPos = wxDefaultPosition,
+ const wxSize& aSize = wxDefaultSize ) :
+ wxPreviewFrame( aPreview, aParent, aTitle, aPos, aSize )
+ {
+ m_parent = aParent;
+ }
+
+ bool Show( bool show ) // overload
+ {
+ bool ret;
+
+ // Show or hide the window. If hiding, save current position and size.
+ // If showing, use previous position and size.
+ if( show )
+ {
+ bool centre = false;
+ if( s_size.x == 0 || s_size.y == 0 )
+ {
+ s_size = (m_parent->GetSize() * 3) / 4;
+ s_pos = wxDefaultPosition;
+ centre = true;
+ }
+
+ SetSize( s_pos.x, s_pos.y, s_size.x, s_size.y, 0 );
+
+ if( centre )
+ Center();
+
+ ret = wxPreviewFrame::Show( show );
+ }
+ else
+ {
+ // Save the dialog's position & size before hiding
+ s_size = GetSize();
+ s_pos = GetPosition();
+
+ ret = wxPreviewFrame::Show( show );
+ }
+ return ret;
+ }
+
+private:
+ static wxPoint s_pos;
+ static wxSize s_size;
+
+ DECLARE_CLASS( PLEDITOR_PREVIEW_FRAME )
+ DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS( PLEDITOR_PREVIEW_FRAME )
+};
+
+wxPoint PLEDITOR_PREVIEW_FRAME::s_pos;
+wxSize PLEDITOR_PREVIEW_FRAME::s_size;
+
+IMPLEMENT_CLASS( PLEDITOR_PREVIEW_FRAME, wxPreviewFrame )
+
+BEGIN_EVENT_TABLE( PLEDITOR_PREVIEW_FRAME, wxPreviewFrame )
+ EVT_CLOSE( PLEDITOR_PREVIEW_FRAME::OnCloseWindow )
+END_EVENT_TABLE()
+
+
+bool PLEDITOR_PRINTOUT::OnPrintPage( int aPageNum )
+{
+ DrawPage( aPageNum );
+ return true;
+}
+
+
+void PLEDITOR_PRINTOUT::GetPageInfo( int* minPage, int* maxPage,
+ int* selPageFrom, int* selPageTo )
+{
+ *minPage = *selPageFrom = 1;
+ *maxPage = *selPageTo = 2;
+}
+
+/*
+ * This is the real print function: print the active screen
+ */
+void PLEDITOR_PRINTOUT::DrawPage( int aPageNum )
+{
+ int oldZoom;
+ wxPoint tmp_startvisu;
+ wxSize pageSizeIU; // Page size in internal units
+ wxPoint old_org;
+ EDA_RECT oldClipBox;
+ wxRect fitRect;
+ wxDC* dc = GetDC();
+ EDA_DRAW_PANEL* panel = m_parent->GetCanvas();
+ PL_EDITOR_SCREEN* screen = m_parent->GetScreen();
+
+ // Save current scale factor, offsets, and clip box.
+ tmp_startvisu = screen->m_StartVisu;
+ oldZoom = screen->GetZoom();
+ old_org = screen->m_DrawOrg;
+
+ oldClipBox = *panel->GetClipBox();
+
+ // Change clip box to print the whole page.
+ #define MAX_VALUE (INT_MAX/2) // MAX_VALUE is the max we can use in an integer
+ // and that allows calculations without overflow
+ panel->SetClipBox( EDA_RECT( wxPoint( 0, 0 ), wxSize( MAX_VALUE, MAX_VALUE ) ) );
+
+ // Change scale factor and offset to print the whole page.
+
+ pageSizeIU = m_parent->GetPageSettings().GetSizeIU();
+ FitThisSizeToPaper( pageSizeIU );
+ fitRect = GetLogicalPaperRect();
+
+ int xoffset = ( fitRect.width - pageSizeIU.x ) / 2;
+ int yoffset = ( fitRect.height - pageSizeIU.y ) / 2;
+
+ OffsetLogicalOrigin( xoffset, yoffset );
+
+ GRResetPenAndBrush( dc );
+ GRForceBlackPen( true );
+ screen->m_IsPrinting = true;
+
+ EDA_COLOR_T bg_color = m_parent->GetDrawBgColor();
+ m_parent->SetDrawBgColor( WHITE );
+
+ screen->m_ScreenNumber = aPageNum;
+ m_parent->DrawWorkSheet( dc, screen, 0, IU_PER_MILS, wxEmptyString );
+
+ m_parent->SetDrawBgColor( bg_color );
+ screen->m_IsPrinting = false;
+ panel->SetClipBox( oldClipBox );
+
+ GRForceBlackPen( false );
+
+ screen->m_StartVisu = tmp_startvisu;
+ screen->m_DrawOrg = old_org;
+ screen->SetZoom( oldZoom );
+}
+
+
+int InvokeDialogPrint( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData,
+ wxPageSetupDialogData* aPageSetupData )
+{
+ int pageCount = 2;
+
+ wxPrintDialogData printDialogData( *aPrintData );
+ printDialogData.SetMaxPage( pageCount );
+
+ if( pageCount > 1 )
+ printDialogData.EnablePageNumbers( true );
+
+ wxPrinter printer( &printDialogData );
+ PLEDITOR_PRINTOUT printout( aCaller, _( "Print Page Layout" ) );
+
+ if( !printer.Print( aCaller, &printout, true ) )
+ {
+ if( wxPrinter::GetLastError() == wxPRINTER_ERROR )
+ wxMessageBox( _( "An error occurred attempting to print the page layout." ),
+ _( "Printing" ), wxOK );
+ return 0;
+ }
+
+ *aPageSetupData = printer.GetPrintDialogData().GetPrintData();
+
+ return 1;
+}
+
+int InvokeDialogPrintPreview( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData )
+{
+ // Pass two printout objects: for preview, and possible printing.
+ wxString title = _( "Preview" );
+ wxPrintPreview* preview = new wxPrintPreview( new PLEDITOR_PRINTOUT( aCaller, title ),
+ new PLEDITOR_PRINTOUT( aCaller, title ),
+ aPrintData );
+
+ preview->SetZoom( 70 );
+
+ PLEDITOR_PREVIEW_FRAME* frame = new PLEDITOR_PREVIEW_FRAME( preview, aCaller, title );
+
+ frame->Initialize();
+ frame->Show( true );
+
+ return 1;
+}
+
diff --git a/pagelayout_editor/dialogs/properties_frame_base.cpp b/pagelayout_editor/dialogs/properties_frame_base.cpp
new file mode 100644
index 0000000..f4075f9
--- /dev/null
+++ b/pagelayout_editor/dialogs/properties_frame_base.cpp
@@ -0,0 +1,638 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar 9 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "properties_frame_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+PANEL_PROPERTIES_BASE::PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+ wxBoxSizer* bSizerpanel;
+ bSizerpanel = new wxBoxSizer( wxVERTICAL );
+
+ m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_swItemProperties = new wxScrolledWindow( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxTAB_TRAVERSAL|wxVSCROLL );
+ m_swItemProperties->SetScrollRate( 5, 5 );
+ wxBoxSizer* bSizerMain;
+ bSizerMain = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerButt;
+ bSizerButt = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerType;
+ bSizerType = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextType = new wxStaticText( m_swItemProperties, wxID_ANY, _("Type"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextType->Wrap( -1 );
+ m_staticTextType->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerType->Add( m_staticTextType, 0, wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlType = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
+ bSizerType->Add( m_textCtrlType, 0, wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerButt->Add( bSizerType, 0, 0, 5 );
+
+ wxBoxSizer* bSizerPageOpt;
+ bSizerPageOpt = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextPageOpt = new wxStaticText( m_swItemProperties, wxID_ANY, _("Page 1 option"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPageOpt->Wrap( -1 );
+ m_staticTextPageOpt->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
+
+ bSizerPageOpt->Add( m_staticTextPageOpt, 0, wxLEFT|wxRIGHT, 5 );
+
+ wxString m_choicePageOptChoices[] = { _("None"), _("Page 1 only"), _("Not on page 1") };
+ int m_choicePageOptNChoices = sizeof( m_choicePageOptChoices ) / sizeof( wxString );
+ m_choicePageOpt = new wxChoice( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePageOptNChoices, m_choicePageOptChoices, 0 );
+ m_choicePageOpt->SetSelection( 0 );
+ bSizerPageOpt->Add( m_choicePageOpt, 0, wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerButt->Add( bSizerPageOpt, 0, 0, 5 );
+
+
+ bSizerMain->Add( bSizerButt, 0, 0, 5 );
+
+ m_staticline5 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerMain->Add( m_staticline5, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_SizerTextOptions = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextText = new wxStaticText( m_swItemProperties, wxID_ANY, _("Text"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextText->Wrap( -1 );
+ m_SizerTextOptions->Add( m_staticTextText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlText = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
+ m_SizerTextOptions->Add( m_textCtrlText, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerFontOpt;
+ bSizerFontOpt = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerJustify;
+ bSizerJustify = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextHjust = new wxStaticText( m_swItemProperties, wxID_ANY, _("H justification"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHjust->Wrap( -1 );
+ bSizerJustify->Add( m_staticTextHjust, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ wxString m_choiceHjustifyChoices[] = { _("Left"), _("Center"), _("Right") };
+ int m_choiceHjustifyNChoices = sizeof( m_choiceHjustifyChoices ) / sizeof( wxString );
+ m_choiceHjustify = new wxChoice( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHjustifyNChoices, m_choiceHjustifyChoices, 0 );
+ m_choiceHjustify->SetSelection( 0 );
+ bSizerJustify->Add( m_choiceHjustify, 0, wxEXPAND|wxALL, 5 );
+
+ m_checkBoxBold = new wxCheckBox( m_swItemProperties, wxID_ANY, _("Bold"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerJustify->Add( m_checkBoxBold, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerFontOpt->Add( bSizerJustify, 0, 0, 5 );
+
+ wxBoxSizer* bSizerBoldItalic;
+ bSizerBoldItalic = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextVjust = new wxStaticText( m_swItemProperties, wxID_ANY, _("V justification"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextVjust->Wrap( -1 );
+ bSizerBoldItalic->Add( m_staticTextVjust, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ wxString m_choiceVjustifyChoices[] = { _("Top"), _("Center"), _("Bottom") };
+ int m_choiceVjustifyNChoices = sizeof( m_choiceVjustifyChoices ) / sizeof( wxString );
+ m_choiceVjustify = new wxChoice( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVjustifyNChoices, m_choiceVjustifyChoices, 0 );
+ m_choiceVjustify->SetSelection( 1 );
+ bSizerBoldItalic->Add( m_choiceVjustify, 0, wxEXPAND|wxALL, 5 );
+
+ m_checkBoxItalic = new wxCheckBox( m_swItemProperties, wxID_ANY, _("Italic"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerBoldItalic->Add( m_checkBoxItalic, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerFontOpt->Add( bSizerBoldItalic, 1, 0, 5 );
+
+
+ m_SizerTextOptions->Add( bSizerFontOpt, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerTextSize;
+ bSizerTextSize = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerTsizeX;
+ bSizerTsizeX = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTexTsizeX = new wxStaticText( m_swItemProperties, wxID_ANY, _("Text Width (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTexTsizeX->Wrap( -1 );
+ bSizerTsizeX->Add( m_staticTexTsizeX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlTextSizeX = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerTsizeX->Add( m_textCtrlTextSizeX, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerTextSize->Add( bSizerTsizeX, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerTsizeY;
+ bSizerTsizeY = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextTsizeY = new wxStaticText( m_swItemProperties, wxID_ANY, _("Text Height (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTsizeY->Wrap( -1 );
+ bSizerTsizeY->Add( m_staticTextTsizeY, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlTextSizeY = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerTsizeY->Add( m_textCtrlTextSizeY, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerTextSize->Add( bSizerTsizeY, 1, wxEXPAND, 5 );
+
+
+ m_SizerTextOptions->Add( bSizerTextSize, 0, 0, 5 );
+
+ m_staticTextConstraints = new wxStaticText( m_swItemProperties, wxID_ANY, _("Constraints:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextConstraints->Wrap( -1 );
+ m_SizerTextOptions->Add( m_staticTextConstraints, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerConstraints;
+ bSizerConstraints = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer42;
+ bSizer42 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextConstraintX = new wxStaticText( m_swItemProperties, wxID_ANY, _("Max Size X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextConstraintX->Wrap( -1 );
+ bSizer42->Add( m_staticTextConstraintX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlConstraintX = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer42->Add( m_textCtrlConstraintX, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerConstraints->Add( bSizer42, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer52;
+ bSizer52 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextConstraintY = new wxStaticText( m_swItemProperties, wxID_ANY, _("Max Size Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextConstraintY->Wrap( -1 );
+ bSizer52->Add( m_staticTextConstraintY, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlConstraintY = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer52->Add( m_textCtrlConstraintY, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerConstraints->Add( bSizer52, 1, wxEXPAND, 5 );
+
+
+ m_SizerTextOptions->Add( bSizerConstraints, 0, 0, 5 );
+
+ m_staticline6 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_SizerTextOptions->Add( m_staticline6, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerMain->Add( m_SizerTextOptions, 0, wxEXPAND, 5 );
+
+ m_buttonOK = new wxButton( m_swItemProperties, wxID_ANY, _("Accept"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonOK->SetDefault();
+ bSizerMain->Add( m_buttonOK, 0, wxALL|wxEXPAND, 5 );
+
+ m_staticline8 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerMain->Add( m_staticline8, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextComment = new wxStaticText( m_swItemProperties, wxID_ANY, _("Comment"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextComment->Wrap( -1 );
+ bSizerMain->Add( m_staticTextComment, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlComment = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerMain->Add( m_textCtrlComment, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_staticline2 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerMain->Add( m_staticline2, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerPos;
+ bSizerPos = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerPosXY;
+ bSizerPosXY = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer4;
+ bSizer4 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextPosX = new wxStaticText( m_swItemProperties, wxID_ANY, _("Pos X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPosX->Wrap( -1 );
+ bSizer4->Add( m_staticTextPosX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlPosX = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer4->Add( m_textCtrlPosX, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerPosXY->Add( bSizer4, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer5;
+ bSizer5 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextPosY = new wxStaticText( m_swItemProperties, wxID_ANY, _("Pos Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPosY->Wrap( -1 );
+ bSizer5->Add( m_staticTextPosY, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlPosY = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer5->Add( m_textCtrlPosY, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerPosXY->Add( bSizer5, 1, wxEXPAND, 5 );
+
+
+ bSizerPos->Add( bSizerPosXY, 1, 0, 5 );
+
+ wxBoxSizer* bSizer6;
+ bSizer6 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextOrgPos = new wxStaticText( m_swItemProperties, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextOrgPos->Wrap( -1 );
+ bSizer6->Add( m_staticTextOrgPos, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_comboBoxCornerPos = new wxComboBox( m_swItemProperties, wxID_ANY, _("Lower Right"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ m_comboBoxCornerPos->Append( _("Upper Right") );
+ m_comboBoxCornerPos->Append( _("Upper Left") );
+ m_comboBoxCornerPos->Append( _("Lower Right") );
+ m_comboBoxCornerPos->Append( _("Lower Left") );
+ m_comboBoxCornerPos->SetSelection( 2 );
+ bSizer6->Add( m_comboBoxCornerPos, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerPos->Add( bSizer6, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerMain->Add( bSizerPos, 0, 0, 5 );
+
+ m_SizerEndPosition = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerEndXY;
+ bSizerEndXY = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer41;
+ bSizer41 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextEndX = new wxStaticText( m_swItemProperties, wxID_ANY, _("End X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextEndX->Wrap( -1 );
+ bSizer41->Add( m_staticTextEndX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlEndX = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer41->Add( m_textCtrlEndX, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerEndXY->Add( bSizer41, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer51;
+ bSizer51 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextEndY = new wxStaticText( m_swItemProperties, wxID_ANY, _("End Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextEndY->Wrap( -1 );
+ bSizer51->Add( m_staticTextEndY, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlEndY = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer51->Add( m_textCtrlEndY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerEndXY->Add( bSizer51, 1, wxEXPAND, 5 );
+
+
+ m_SizerEndPosition->Add( bSizerEndXY, 1, 0, 5 );
+
+ wxBoxSizer* bSizer61;
+ bSizer61 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextOrgEnd = new wxStaticText( m_swItemProperties, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextOrgEnd->Wrap( -1 );
+ bSizer61->Add( m_staticTextOrgEnd, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_comboBoxCornerEnd = new wxComboBox( m_swItemProperties, wxID_ANY, _("Lower Right"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ m_comboBoxCornerEnd->Append( _("Upper Right") );
+ m_comboBoxCornerEnd->Append( _("Upper Left") );
+ m_comboBoxCornerEnd->Append( _("Lower Right") );
+ m_comboBoxCornerEnd->Append( _("Lower Left") );
+ m_comboBoxCornerEnd->SetSelection( 2 );
+ bSizer61->Add( m_comboBoxCornerEnd, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ m_SizerEndPosition->Add( bSizer61, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerMain->Add( m_SizerEndPosition, 0, 0, 5 );
+
+ m_SizerLineThickness = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerThickness;
+ bSizerThickness = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextThickness = new wxStaticText( m_swItemProperties, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextThickness->Wrap( -1 );
+ bSizerThickness->Add( m_staticTextThickness, 0, wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlThickness = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerThickness->Add( m_textCtrlThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ m_SizerLineThickness->Add( bSizerThickness, 0, wxEXPAND, 5 );
+
+ m_staticTextInfoThickness = new wxStaticText( m_swItemProperties, wxID_ANY, _("Set to 0 to use default"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextInfoThickness->Wrap( -1 );
+ m_SizerLineThickness->Add( m_staticTextInfoThickness, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerMain->Add( m_SizerLineThickness, 0, 0, 5 );
+
+ m_SizerRotation = new wxBoxSizer( wxVERTICAL );
+
+ m_staticline1 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_SizerRotation->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerRotation;
+ bSizerRotation = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextRot = new wxStaticText( m_swItemProperties, wxID_ANY, _("Rotation"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRot->Wrap( -1 );
+ bSizerRotation->Add( m_staticTextRot, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlRotation = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerRotation->Add( m_textCtrlRotation, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_SizerRotation->Add( bSizerRotation, 0, wxEXPAND, 5 );
+
+
+ bSizerMain->Add( m_SizerRotation, 0, wxEXPAND, 5 );
+
+ m_SizerBitmapPPI = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextBitmapPPI = new wxStaticText( m_swItemProperties, wxID_ANY, _("Bitmap PPI"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextBitmapPPI->Wrap( -1 );
+ m_SizerBitmapPPI->Add( m_staticTextBitmapPPI, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlBitmapPPI = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_SizerBitmapPPI->Add( m_textCtrlBitmapPPI, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerMain->Add( m_SizerBitmapPPI, 0, wxEXPAND, 5 );
+
+ m_staticline4 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerMain->Add( m_staticline4, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextRepeatPrms = new wxStaticText( m_swItemProperties, wxID_ANY, _("Repeat parameters:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRepeatPrms->Wrap( -1 );
+ bSizerMain->Add( m_staticTextRepeatPrms, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer20;
+ bSizer20 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer611;
+ bSizer611 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextRepeatCnt = new wxStaticText( m_swItemProperties, wxID_ANY, _("Repeat count"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRepeatCnt->Wrap( -1 );
+ bSizer611->Add( m_staticTextRepeatCnt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlRepeatCount = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer611->Add( m_textCtrlRepeatCount, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizer20->Add( bSizer611, 1, 0, 5 );
+
+ m_SizerTextIncrementLabel = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextInclabel = new wxStaticText( m_swItemProperties, wxID_ANY, _("Text Increment"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextInclabel->Wrap( -1 );
+ m_SizerTextIncrementLabel->Add( m_staticTextInclabel, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlTextIncrement = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_SizerTextIncrementLabel->Add( m_textCtrlTextIncrement, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizer20->Add( m_SizerTextIncrementLabel, 1, wxEXPAND, 5 );
+
+
+ bSizerMain->Add( bSizer20, 0, 0, 5 );
+
+ wxBoxSizer* bSizerPosY1;
+ bSizerPosY1 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer411;
+ bSizer411 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextStepX = new wxStaticText( m_swItemProperties, wxID_ANY, _("Step X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStepX->Wrap( -1 );
+ bSizer411->Add( m_staticTextStepX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlStepX = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer411->Add( m_textCtrlStepX, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerPosY1->Add( bSizer411, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer511;
+ bSizer511 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextStepY = new wxStaticText( m_swItemProperties, wxID_ANY, _("Step Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStepY->Wrap( -1 );
+ bSizer511->Add( m_staticTextStepY, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlStepY = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer511->Add( m_textCtrlStepY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerPosY1->Add( bSizer511, 1, wxEXPAND, 5 );
+
+
+ bSizerMain->Add( bSizerPosY1, 0, 0, 5 );
+
+
+ m_swItemProperties->SetSizer( bSizerMain );
+ m_swItemProperties->Layout();
+ bSizerMain->Fit( m_swItemProperties );
+ m_notebook->AddPage( m_swItemProperties, _("Item Properties"), true );
+ m_swGeneralOpts = new wxScrolledWindow( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxTAB_TRAVERSAL|wxVSCROLL );
+ m_swGeneralOpts->SetScrollRate( 5, 5 );
+ wxBoxSizer* bSizerGeneralOpts;
+ bSizerGeneralOpts = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerGeneralOpts1;
+ bSizerGeneralOpts1 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDefVal = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Default Values:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDefVal->Wrap( -1 );
+ bSizerGeneralOpts1->Add( m_staticTextDefVal, 0, wxALL, 5 );
+
+ wxBoxSizer* bSizerDefTextSize;
+ bSizerDefTextSize = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerDefTsizeX;
+ bSizerDefTsizeX = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDefTsX = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Text Size X (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDefTsX->Wrap( -1 );
+ bSizerDefTsizeX->Add( m_staticTextDefTsX, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlDefaultTextSizeX = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDefTsizeX->Add( m_textCtrlDefaultTextSizeX, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefTextSize->Add( bSizerDefTsizeX, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerDefTsizeY;
+ bSizerDefTsizeY = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDefTsY = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Text Size Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDefTsY->Wrap( -1 );
+ bSizerDefTsizeY->Add( m_staticTextDefTsY, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlDefaultTextSizeY = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDefTsizeY->Add( m_textCtrlDefaultTextSizeY, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefTextSize->Add( bSizerDefTsizeY, 1, wxEXPAND, 5 );
+
+
+ bSizerGeneralOpts1->Add( bSizerDefTextSize, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerDefLineWidth;
+ bSizerDefLineWidth = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer25;
+ bSizer25 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDefLineW = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Line Thickness (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDefLineW->Wrap( -1 );
+ bSizer25->Add( m_staticTextDefLineW, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlDefaultLineWidth = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer25->Add( m_textCtrlDefaultLineWidth, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefLineWidth->Add( bSizer25, 1, 0, 5 );
+
+ wxBoxSizer* bSizerDefTextThickness;
+ bSizerDefTextThickness = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText22 = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Text Thickness"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText22->Wrap( -1 );
+ bSizerDefTextThickness->Add( m_staticText22, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlDefaultTextThickness = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDefTextThickness->Add( m_textCtrlDefaultTextThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefLineWidth->Add( bSizerDefTextThickness, 1, 0, 5 );
+
+
+ bSizerGeneralOpts1->Add( bSizerDefLineWidth, 0, wxEXPAND, 5 );
+
+
+ bSizerGeneralOpts->Add( bSizerGeneralOpts1, 0, 0, 5 );
+
+ m_buttonDefault = new wxButton( m_swGeneralOpts, wxID_ANY, _("Set to Default"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerGeneralOpts->Add( m_buttonDefault, 0, wxALL|wxEXPAND, 5 );
+
+ m_staticline9 = new wxStaticLine( m_swGeneralOpts, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerGeneralOpts->Add( m_staticline9, 0, wxEXPAND | wxALL, 5 );
+
+ wxBoxSizer* bSizerGeneraMargins;
+ bSizerGeneraMargins = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextMargins = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Page Margins"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextMargins->Wrap( -1 );
+ bSizerGeneraMargins->Add( m_staticTextMargins, 0, wxALL, 5 );
+
+ wxBoxSizer* bSizerDefLRMargins;
+ bSizerDefLRMargins = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerDefLeftMargin;
+ bSizerDefLeftMargin = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextLeftMargin = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Left Margin (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextLeftMargin->Wrap( -1 );
+ bSizerDefLeftMargin->Add( m_staticTextLeftMargin, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlLeftMargin = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDefLeftMargin->Add( m_textCtrlLeftMargin, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefLRMargins->Add( bSizerDefLeftMargin, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerDefTsizeY1;
+ bSizerDefTsizeY1 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDefRightMargin = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Right Margin (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDefRightMargin->Wrap( -1 );
+ bSizerDefTsizeY1->Add( m_staticTextDefRightMargin, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlRightMargin = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDefTsizeY1->Add( m_textCtrlRightMargin, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefLRMargins->Add( bSizerDefTsizeY1, 1, wxEXPAND, 5 );
+
+
+ bSizerGeneraMargins->Add( bSizerDefLRMargins, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerDefTBMargins;
+ bSizerDefTBMargins = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerTopMargin;
+ bSizerTopMargin = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextTopMargin = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Top Margin (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTopMargin->Wrap( -1 );
+ bSizerTopMargin->Add( m_staticTextTopMargin, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlTopMargin = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerTopMargin->Add( m_textCtrlTopMargin, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefTBMargins->Add( bSizerTopMargin, 1, 0, 5 );
+
+ wxBoxSizer* bSizerDefBottomMargin;
+ bSizerDefBottomMargin = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextBottomMargin = new wxStaticText( m_swGeneralOpts, wxID_ANY, _("Bottom Margin (mm)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextBottomMargin->Wrap( -1 );
+ bSizerDefBottomMargin->Add( m_staticTextBottomMargin, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlDefaultBottomMargin = new wxTextCtrl( m_swGeneralOpts, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDefBottomMargin->Add( m_textCtrlDefaultBottomMargin, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizerDefTBMargins->Add( bSizerDefBottomMargin, 1, 0, 5 );
+
+
+ bSizerGeneraMargins->Add( bSizerDefTBMargins, 0, wxEXPAND, 5 );
+
+
+ bSizerGeneralOpts->Add( bSizerGeneraMargins, 0, 0, 5 );
+
+ m_buttonGeneralOptsOK = new wxButton( m_swGeneralOpts, wxID_ANY, _("Accept"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonGeneralOptsOK->SetDefault();
+ bSizerGeneralOpts->Add( m_buttonGeneralOptsOK, 0, wxALL|wxEXPAND, 5 );
+
+
+ m_swGeneralOpts->SetSizer( bSizerGeneralOpts );
+ m_swGeneralOpts->Layout();
+ bSizerGeneralOpts->Fit( m_swGeneralOpts );
+ m_notebook->AddPage( m_swGeneralOpts, _("General Options"), false );
+
+ bSizerpanel->Add( m_notebook, 1, wxEXPAND | wxALL, 5 );
+
+
+ this->SetSizer( bSizerpanel );
+ this->Layout();
+
+ // Connect Events
+ m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnAcceptPrms ), NULL, this );
+ m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnSetDefaultValues ), NULL, this );
+ m_buttonGeneralOptsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnAcceptPrms ), NULL, this );
+}
+
+PANEL_PROPERTIES_BASE::~PANEL_PROPERTIES_BASE()
+{
+ // Disconnect Events
+ m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnAcceptPrms ), NULL, this );
+ m_buttonDefault->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnSetDefaultValues ), NULL, this );
+ m_buttonGeneralOptsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnAcceptPrms ), NULL, this );
+
+}
diff --git a/pagelayout_editor/dialogs/properties_frame_base.fbp b/pagelayout_editor/dialogs/properties_frame_base.fbp
new file mode 100644
index 0000000..335e750
--- /dev/null
+++ b/pagelayout_editor/dialogs/properties_frame_base.fbp
@@ -0,0 +1,7684 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">properties_frame_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">properties_frame</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">1</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Panel" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size"></property>
+ <property name="name">PANEL_PROPERTIES_BASE</property>
+ <property name="pos"></property>
+ <property name="size">315,782</property>
+ <property name="subclass"></property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxTAB_TRAVERSAL</property>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerpanel</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">1</property>
+ <object class="wxNotebook" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmapsize"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_notebook</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnNotebookPageChanged"></event>
+ <event name="OnNotebookPageChanging"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="notebookpage" expanded="1">
+ <property name="bitmap"></property>
+ <property name="label">Item Properties</property>
+ <property name="select">1</property>
+ <object class="wxScrolledWindow" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_swItemProperties</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="scroll_rate_x">5</property>
+ <property name="scroll_rate_y">5</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxHSCROLL|wxTAB_TRAVERSAL|wxVSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerMain</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerButt</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerType</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font">,90,92,-1,70,0</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Type</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextType</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlType</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_READONLY</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerPageOpt</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font">,90,90,-1,70,0</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Page 1 option</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPageOpt</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;None&quot; &quot;Page 1 only&quot; &quot;Not on page 1&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_choicePageOpt</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">0</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline5</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerTextOptions</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextText</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlText</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxTE_MULTILINE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerFontOpt</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerJustify</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">H justification</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextHjust</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Left&quot; &quot;Center&quot; &quot;Right&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_choiceHjustify</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">0</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Bold</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxBold</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerBoldItalic</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">V justification</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextVjust</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxChoice" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Top&quot; &quot;Center&quot; &quot;Bottom&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_choiceVjustify</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">1</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnChoice"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxCheckBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="checked">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Italic</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_checkBoxItalic</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCheckBox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerTextSize</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerTsizeX</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text Width (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTexTsizeX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlTextSizeX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerTsizeY</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text Height (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextTsizeY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlTextSizeY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Constraints:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextConstraints</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerConstraints</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer42</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Max Size X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextConstraintX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlConstraintX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer52</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Max Size Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextConstraintY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlConstraintY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline6</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Accept</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonOK</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnAcceptPrms</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline8</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Comment</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextComment</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlComment</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerPos</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerPosXY</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer4</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Pos X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPosX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">1</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlPosX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer5</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Pos Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextPosY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlPosY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer6</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Origin</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextOrgPos</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxComboBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Upper Right&quot; &quot;Upper Left&quot; &quot;Lower Right&quot; &quot;Lower Left&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_comboBoxCornerPos</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">2</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value">Lower Right</property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCombobox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerEndPosition</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerEndXY</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer41</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">End X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextEndX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlEndX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer51</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">End Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextEndY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlEndY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer61</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Origin</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextOrgEnd</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxComboBox" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="choices">&quot;Upper Right&quot; &quot;Upper Left&quot; &quot;Lower Right&quot; &quot;Lower Left&quot;</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_comboBoxCornerEnd</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="selection">2</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value">Lower Right</property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnCombobox"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerLineThickness</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerThickness</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Thickness</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextThickness</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlThickness</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Set to 0 to use default</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextInfoThickness</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerRotation</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerRotation</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Rotation</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextRot</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlRotation</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerBitmapPPI</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Bitmap PPI</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextBitmapPPI</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlBitmapPPI</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline4</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Repeat parameters:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextRepeatPrms</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer20</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer611</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Repeat count</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextRepeatCnt</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlRepeatCount</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">m_SizerTextIncrementLabel</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">protected</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text Increment</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextInclabel</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlTextIncrement</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerPosY1</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer411</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Step X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextStepX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlStepX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer511</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Step Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextStepY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlStepY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="notebookpage" expanded="0">
+ <property name="bitmap"></property>
+ <property name="label">General Options</property>
+ <property name="select">0</property>
+ <object class="wxScrolledWindow" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_swGeneralOpts</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="scroll_rate_x">5</property>
+ <property name="scroll_rate_y">5</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style">wxHSCROLL|wxTAB_TRAVERSAL|wxVSCROLL</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerGeneralOpts</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerGeneralOpts1</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Default Values:</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextDefVal</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefTextSize</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefTsizeX</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text Size X (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextDefTsX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlDefaultTextSizeX</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefTsizeY</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text Size Y (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextDefTsY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlDefaultTextSizeY</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefLineWidth</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer25</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Line Thickness (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextDefLineW</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlDefaultLineWidth</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefTextThickness</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Text Thickness</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText22</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlDefaultTextThickness</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">0</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Set to Default</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonDefault</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnSetDefaultValues</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline9</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerGeneraMargins</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Page Margins</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextMargins</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefLRMargins</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefLeftMargin</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Left Margin (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextLeftMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlLeftMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefTsizeY1</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Right Margin (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextDefRightMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlRightMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefTBMargins</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerTopMargin</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Top Margin (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextTopMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlTopMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag"></property>
+ <property name="proportion">1</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizerDefBottomMargin</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Bottom Margin (mm)</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextBottomMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_textCtrlDefaultBottomMargin</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxButton" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Accept</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_buttonGeneralOptsOK</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnButtonClick">OnAcceptPrms</event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/pagelayout_editor/dialogs/properties_frame_base.h b/pagelayout_editor/dialogs/properties_frame_base.h
new file mode 100644
index 0000000..28ab1f4
--- /dev/null
+++ b/pagelayout_editor/dialogs/properties_frame_base.h
@@ -0,0 +1,145 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar 9 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __PROPERTIES_FRAME_BASE_H__
+#define __PROPERTIES_FRAME_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/textctrl.h>
+#include <wx/sizer.h>
+#include <wx/choice.h>
+#include <wx/statline.h>
+#include <wx/checkbox.h>
+#include <wx/button.h>
+#include <wx/combobox.h>
+#include <wx/scrolwin.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class PANEL_PROPERTIES_BASE
+///////////////////////////////////////////////////////////////////////////////
+class PANEL_PROPERTIES_BASE : public wxPanel
+{
+ private:
+
+ protected:
+ wxNotebook* m_notebook;
+ wxScrolledWindow* m_swItemProperties;
+ wxStaticText* m_staticTextType;
+ wxTextCtrl* m_textCtrlType;
+ wxStaticText* m_staticTextPageOpt;
+ wxChoice* m_choicePageOpt;
+ wxStaticLine* m_staticline5;
+ wxBoxSizer* m_SizerTextOptions;
+ wxStaticText* m_staticTextText;
+ wxTextCtrl* m_textCtrlText;
+ wxStaticText* m_staticTextHjust;
+ wxChoice* m_choiceHjustify;
+ wxCheckBox* m_checkBoxBold;
+ wxStaticText* m_staticTextVjust;
+ wxChoice* m_choiceVjustify;
+ wxCheckBox* m_checkBoxItalic;
+ wxStaticText* m_staticTexTsizeX;
+ wxTextCtrl* m_textCtrlTextSizeX;
+ wxStaticText* m_staticTextTsizeY;
+ wxTextCtrl* m_textCtrlTextSizeY;
+ wxStaticText* m_staticTextConstraints;
+ wxStaticText* m_staticTextConstraintX;
+ wxTextCtrl* m_textCtrlConstraintX;
+ wxStaticText* m_staticTextConstraintY;
+ wxTextCtrl* m_textCtrlConstraintY;
+ wxStaticLine* m_staticline6;
+ wxButton* m_buttonOK;
+ wxStaticLine* m_staticline8;
+ wxStaticText* m_staticTextComment;
+ wxTextCtrl* m_textCtrlComment;
+ wxStaticLine* m_staticline2;
+ wxStaticText* m_staticTextPosX;
+ wxTextCtrl* m_textCtrlPosX;
+ wxStaticText* m_staticTextPosY;
+ wxTextCtrl* m_textCtrlPosY;
+ wxStaticText* m_staticTextOrgPos;
+ wxComboBox* m_comboBoxCornerPos;
+ wxBoxSizer* m_SizerEndPosition;
+ wxStaticText* m_staticTextEndX;
+ wxTextCtrl* m_textCtrlEndX;
+ wxStaticText* m_staticTextEndY;
+ wxTextCtrl* m_textCtrlEndY;
+ wxStaticText* m_staticTextOrgEnd;
+ wxComboBox* m_comboBoxCornerEnd;
+ wxBoxSizer* m_SizerLineThickness;
+ wxStaticText* m_staticTextThickness;
+ wxTextCtrl* m_textCtrlThickness;
+ wxStaticText* m_staticTextInfoThickness;
+ wxBoxSizer* m_SizerRotation;
+ wxStaticLine* m_staticline1;
+ wxStaticText* m_staticTextRot;
+ wxTextCtrl* m_textCtrlRotation;
+ wxBoxSizer* m_SizerBitmapPPI;
+ wxStaticText* m_staticTextBitmapPPI;
+ wxTextCtrl* m_textCtrlBitmapPPI;
+ wxStaticLine* m_staticline4;
+ wxStaticText* m_staticTextRepeatPrms;
+ wxStaticText* m_staticTextRepeatCnt;
+ wxTextCtrl* m_textCtrlRepeatCount;
+ wxBoxSizer* m_SizerTextIncrementLabel;
+ wxStaticText* m_staticTextInclabel;
+ wxTextCtrl* m_textCtrlTextIncrement;
+ wxStaticText* m_staticTextStepX;
+ wxTextCtrl* m_textCtrlStepX;
+ wxStaticText* m_staticTextStepY;
+ wxTextCtrl* m_textCtrlStepY;
+ wxScrolledWindow* m_swGeneralOpts;
+ wxStaticText* m_staticTextDefVal;
+ wxStaticText* m_staticTextDefTsX;
+ wxTextCtrl* m_textCtrlDefaultTextSizeX;
+ wxStaticText* m_staticTextDefTsY;
+ wxTextCtrl* m_textCtrlDefaultTextSizeY;
+ wxStaticText* m_staticTextDefLineW;
+ wxTextCtrl* m_textCtrlDefaultLineWidth;
+ wxStaticText* m_staticText22;
+ wxTextCtrl* m_textCtrlDefaultTextThickness;
+ wxButton* m_buttonDefault;
+ wxStaticLine* m_staticline9;
+ wxStaticText* m_staticTextMargins;
+ wxStaticText* m_staticTextLeftMargin;
+ wxTextCtrl* m_textCtrlLeftMargin;
+ wxStaticText* m_staticTextDefRightMargin;
+ wxTextCtrl* m_textCtrlRightMargin;
+ wxStaticText* m_staticTextTopMargin;
+ wxTextCtrl* m_textCtrlTopMargin;
+ wxStaticText* m_staticTextBottomMargin;
+ wxTextCtrl* m_textCtrlDefaultBottomMargin;
+ wxButton* m_buttonGeneralOptsOK;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnAcceptPrms( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSetDefaultValues( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 315,782 ), long style = wxTAB_TRAVERSAL );
+ ~PANEL_PROPERTIES_BASE();
+
+};
+
+#endif //__PROPERTIES_FRAME_BASE_H__
diff --git a/pagelayout_editor/events_functions.cpp b/pagelayout_editor/events_functions.cpp
new file mode 100644
index 0000000..1c6ec10
--- /dev/null
+++ b/pagelayout_editor/events_functions.cpp
@@ -0,0 +1,589 @@
+/**
+ * @file pagelayout_editor/events_functions.cpp
+ * @brief page layout editor command event functions.
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <wx/treectrl.h>
+#include <pgm_base.h>
+#include <class_drawpanel.h>
+#include <common.h>
+#include <macros.h>
+
+#include <pl_editor_frame.h>
+#include <kicad_device_context.h>
+#include <pl_editor_id.h>
+#include <dialog_helpers.h>
+#include <menus_helpers.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <design_tree_frame.h>
+#include <properties_frame.h>
+#include <dialog_page_settings.h>
+#include <invoke_pl_editor_dialog.h>
+
+
+BEGIN_EVENT_TABLE( PL_EDITOR_FRAME, EDA_DRAW_FRAME )
+ EVT_CLOSE( PL_EDITOR_FRAME::OnCloseWindow )
+
+ // Desing tree event:
+ EVT_TREE_SEL_CHANGED( ID_DESIGN_TREE_FRAME, PL_EDITOR_FRAME::OnTreeSelection )
+ EVT_TREE_ITEM_MIDDLE_CLICK( ID_DESIGN_TREE_FRAME, PL_EDITOR_FRAME::OnTreeMiddleClick )
+ EVT_TREE_ITEM_RIGHT_CLICK( ID_DESIGN_TREE_FRAME, PL_EDITOR_FRAME::OnTreeRightClick )
+
+ // Menu Files:
+ EVT_MENU( wxID_NEW, PL_EDITOR_FRAME::Files_io )
+ EVT_MENU( wxID_OPEN, PL_EDITOR_FRAME::Files_io )
+ EVT_MENU( wxID_SAVE, PL_EDITOR_FRAME::Files_io )
+ EVT_MENU( wxID_SAVEAS, PL_EDITOR_FRAME::Files_io )
+ EVT_MENU( wxID_FILE, PL_EDITOR_FRAME::Files_io )
+ EVT_MENU( ID_LOAD_DEFAULT_PAGE_LAYOUT, PL_EDITOR_FRAME::Files_io )
+ EVT_MENU( ID_APPEND_DESCR_FILE, PL_EDITOR_FRAME::Files_io )
+
+ EVT_MENU( ID_GEN_PLOT, PL_EDITOR_FRAME::ToPlotter )
+
+ EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, PL_EDITOR_FRAME::OnFileHistory )
+
+ EVT_MENU( wxID_EXIT, PL_EDITOR_FRAME::OnQuit )
+
+ // menu Preferences
+ EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, ID_PREFERENCES_HOTKEY_END, PL_EDITOR_FRAME::Process_Config )
+ EVT_MENU( ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR, EDA_BASE_FRAME::OnSelectPreferredEditor )
+ EVT_MENU( wxID_PREFERENCES, PL_EDITOR_FRAME::Process_Config )
+ EVT_MENU( ID_MENU_SWITCH_BGCOLOR, PL_EDITOR_FRAME::Process_Config )
+ EVT_MENU( ID_MENU_GRID_ONOFF, PL_EDITOR_FRAME::Process_Config )
+
+ // Menu Help
+ EVT_MENU( wxID_HELP, EDA_DRAW_FRAME::GetKicadHelp )
+ EVT_MENU( wxID_INDEX, EDA_DRAW_FRAME::GetKicadHelp )
+ EVT_MENU( wxID_ABOUT, EDA_DRAW_FRAME::GetKicadAbout )
+
+ EVT_TOOL( wxID_CUT, PL_EDITOR_FRAME::Process_Special_Functions )
+ EVT_TOOL( wxID_UNDO, PL_EDITOR_FRAME::GetLayoutFromUndoList )
+ EVT_TOOL( wxID_REDO, PL_EDITOR_FRAME::GetLayoutFromRedoList )
+ EVT_TOOL( wxID_PRINT, PL_EDITOR_FRAME::ToPrinter )
+ EVT_TOOL( wxID_PREVIEW, PL_EDITOR_FRAME::ToPrinter )
+ EVT_TOOL( ID_SHEET_SET, PL_EDITOR_FRAME::Process_Special_Functions )
+ EVT_TOOL( ID_SHOW_REAL_MODE, PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode )
+ EVT_TOOL( ID_SHOW_PL_EDITOR_MODE, PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode )
+ EVT_CHOICE( ID_SELECT_COORDINATE_ORIGIN, PL_EDITOR_FRAME::OnSelectCoordOriginCorner)
+ EVT_CHOICE( ID_SELECT_PAGE_NUMBER, PL_EDITOR_FRAME::Process_Special_Functions)
+
+ // Vertical toolbar:
+ EVT_TOOL( ID_NO_TOOL_SELECTED, PL_EDITOR_FRAME::Process_Special_Functions )
+
+ EVT_MENU_RANGE( ID_POPUP_START_RANGE, ID_POPUP_END_RANGE,
+ PL_EDITOR_FRAME::Process_Special_Functions )
+
+ EVT_UPDATE_UI( ID_SHOW_REAL_MODE, PL_EDITOR_FRAME::OnUpdateTitleBlockDisplayNormalMode )
+ EVT_UPDATE_UI( ID_SHOW_PL_EDITOR_MODE, PL_EDITOR_FRAME::OnUpdateTitleBlockDisplaySpecialMode )
+
+END_EVENT_TABLE()
+
+
+/* Handles the selection of tools, menu, and popup menu commands.
+ */
+void PL_EDITOR_FRAME::Process_Special_Functions( wxCommandEvent& event )
+{
+ int id = event.GetId();
+ int idx;
+ wxString msg;
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ WORKSHEET_DATAITEM* item = NULL;
+ wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
+ cmd.SetEventObject( this );
+
+ switch( id )
+ {
+ case ID_NO_TOOL_SELECTED:
+ SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString );
+ break;
+
+ case ID_SELECT_PAGE_NUMBER:
+ m_canvas->Refresh();
+ break;
+
+ case ID_SHEET_SET:
+ {
+ DIALOG_PAGES_SETTINGS dlg( this );
+ dlg.SetWksFileName( GetCurrFileName() );
+ dlg.EnableWksFileNamePicker( false );
+ dlg.ShowModal();
+
+ cmd.SetId( ID_ZOOM_PAGE );
+ wxPostEvent( this, cmd );
+ }
+ break;
+
+ case ID_POPUP_CANCEL_CURRENT_COMMAND:
+ break;
+
+ case ID_POPUP_DESIGN_TREE_ITEM_DELETE:
+ case ID_POPUP_ITEM_DELETE:
+ case wxID_CUT:
+ // Delete item, and select the previous item
+ item = m_treePagelayout->GetPageLayoutSelectedItem();
+
+ if( item == NULL )
+ break;
+
+ SaveCopyInUndoList();
+ idx = pglayout.GetItemIndex( item );
+ pglayout.Remove( item );
+ RebuildDesignTree();
+
+ if( id == ID_POPUP_DESIGN_TREE_ITEM_DELETE )
+ {
+ item = pglayout.GetItem( (unsigned) (idx-1) );
+
+ if( item )
+ m_treePagelayout->SelectCell( item );
+ }
+
+ item = NULL;
+ OnModify();
+ m_canvas->Refresh();
+ break;
+
+ case ID_POPUP_ITEM_ADD_LINE:
+ SaveCopyInUndoList();
+ idx = m_treePagelayout->GetSelectedItemIndex();
+ item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_SEGMENT, idx );
+
+ if( InvokeDialogNewItem( this, item ) == wxID_CANCEL )
+ {
+ RemoveLastCommandInUndoList();
+ pglayout.Remove( item );
+ RebuildDesignTree();
+ item = NULL;
+ }
+ else
+ {
+ // Put the new item in move mode, after putting the cursor
+ // on the start point:
+ wxPoint position = item->GetStartPosUi();
+ SetCrossHairPosition( position, false );
+ position = GetCrossHairPosition();
+
+ if( m_canvas->IsPointOnDisplay( position ) )
+ m_canvas->MoveCursorToCrossHair();
+ else
+ RedrawScreen( position, true );
+
+ item->SetFlags( NEW_ITEM );
+ MoveItem( item );
+ }
+ break;
+
+ case ID_POPUP_ITEM_ADD_RECT:
+ SaveCopyInUndoList();
+ idx = m_treePagelayout->GetSelectedItemIndex();
+ item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_RECT, idx );
+
+ if( InvokeDialogNewItem( this, item ) == wxID_CANCEL )
+ {
+ RemoveLastCommandInUndoList();
+ pglayout.Remove( item );
+ RebuildDesignTree();
+ item = NULL;
+ }
+ else
+ {
+ // Put the new item in move mode, after putting the cursor
+ // on the start point:
+ wxPoint position = item->GetStartPosUi();
+ SetCrossHairPosition( position, false );
+ position = GetCrossHairPosition();
+
+ if( m_canvas->IsPointOnDisplay( position ) )
+ m_canvas->MoveCursorToCrossHair();
+ else
+ RedrawScreen( position, true );
+
+ item->SetFlags( NEW_ITEM );
+ MoveItem( item );
+ }
+ break;
+
+ case ID_POPUP_ITEM_ADD_TEXT:
+ SaveCopyInUndoList();
+ idx = m_treePagelayout->GetSelectedItemIndex();
+ item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_TEXT, idx );
+ if( InvokeDialogNewItem( this, item ) == wxID_CANCEL )
+ {
+ RemoveLastCommandInUndoList();
+ pglayout.Remove( item );
+ RebuildDesignTree();
+ item = NULL;
+ }
+ else
+ {
+ // Put the new text in move mode:
+ item->SetFlags( NEW_ITEM | LOCATE_STARTPOINT );
+ MoveItem( item );
+ }
+ break;
+
+ case ID_POPUP_ITEM_ADD_BITMAP:
+ SaveCopyInUndoList();
+ idx = m_treePagelayout->GetSelectedItemIndex();
+ item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_BITMAP, idx );
+ if( item && InvokeDialogNewItem( this, item ) == wxID_CANCEL )
+ {
+ RemoveLastCommandInUndoList();
+ pglayout.Remove( item );
+ RebuildDesignTree();
+ item = NULL;
+ }
+ if( item )
+ {
+ // Put the new text in move mode:
+ item->SetFlags( NEW_ITEM | LOCATE_STARTPOINT );
+ MoveItem( item );
+ }
+ break;
+
+ case ID_POPUP_ITEM_APPEND_PAGE_LAYOUT:
+ cmd.SetId( ID_APPEND_DESCR_FILE );
+ wxPostEvent( this, cmd );
+ break;
+
+ case ID_POPUP_ITEM_PLACE:
+ item = GetScreen()->GetCurItem();
+ PlaceItem( item );
+ break;
+
+ case ID_POPUP_ITEM_PLACE_CANCEL:
+ if( m_canvas->IsMouseCaptured() )
+ m_canvas->EndMouseCapture();
+ break;
+
+ case ID_POPUP_ITEM_MOVE_START_POINT:
+ item = m_treePagelayout->GetPageLayoutSelectedItem();
+ // Ensure flags are properly set
+ item->ClearFlags( LOCATE_ENDPOINT );
+ item->SetFlags( LOCATE_STARTPOINT );
+ MoveItem( item );
+ break;
+
+ case ID_POPUP_ITEM_MOVE_END_POINT:
+ item = m_treePagelayout->GetPageLayoutSelectedItem();
+ // Ensure flags are properly set
+ item->ClearFlags( LOCATE_STARTPOINT );
+ item->SetFlags( LOCATE_ENDPOINT );
+ MoveItem( item );
+ break;
+
+ case ID_POPUP_ITEM_MOVE:
+ item = m_treePagelayout->GetPageLayoutSelectedItem();
+ item->ClearFlags( LOCATE_ENDPOINT|LOCATE_STARTPOINT );
+ MoveItem( item );
+ break;
+
+ default:
+ wxMessageBox( wxT( "PL_EDITOR_FRAME::Process_Special_Functions error" ) );
+ break;
+ }
+
+ if( item )
+ {
+ OnModify();
+ m_propertiesPagelayout->CopyPrmsFromItemToPanel( item );
+ m_treePagelayout->SelectCell( item );
+ }
+
+}
+
+
+/*
+ * Function moveItem: called when the mouse cursor is moving
+ * moves the item currently selected (or the start point or the end point)
+ * to the cursor position
+ */
+DPOINT initialPosition; // The initial position of the item to move, in mm
+wxPoint initialPositionUi; // The initial position of the item to move, in Ui
+wxPoint initialCursorPosition; // The initial position of the cursor
+
+static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase )
+{
+ PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) aPanel->GetScreen();
+ WORKSHEET_DATAITEM *item = screen->GetCurItem();
+
+ wxCHECK_RET( (item != NULL), wxT( "Cannot move NULL item." ) );
+ wxPoint position = aPanel->GetParent()->GetCrossHairPosition()
+ - ( initialCursorPosition - initialPositionUi );
+ wxPoint previous_position;
+
+ if( (item->GetFlags() & LOCATE_STARTPOINT) )
+ {
+ previous_position = item->GetStartPosUi();
+ item->MoveStartPointToUi( position );
+ }
+ else if( (item->GetFlags() & LOCATE_ENDPOINT) )
+ {
+ previous_position = item->GetEndPosUi();
+ item->MoveEndPointToUi( position );
+ }
+ else
+ {
+ previous_position = item->GetStartPosUi();
+ item->MoveToUi( position );
+ }
+
+ // Draw the item item at it's new position, if it is modified,
+ // (does not happen each time the mouse is moved, because the
+ // item is placed on grid)
+ // to avoid useless computation time.
+ if( previous_position != position )
+ aPanel->Refresh();
+}
+
+
+/*
+ * Function abortMoveItem: called when an item is currently moving,
+ * and when the user aborts the move command.
+ * Restores the initial position of the item
+ */
+static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
+{
+ PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) aPanel->GetScreen();
+ WORKSHEET_DATAITEM *item = screen->GetCurItem();
+
+ if( item->GetFlags() & NEW_ITEM )
+ {
+ PL_EDITOR_FRAME* plframe = (PL_EDITOR_FRAME*) aPanel->GetParent();
+ plframe->RemoveLastCommandInUndoList();
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ pglayout.Remove( item );
+ plframe->RebuildDesignTree();
+ }
+ else
+ {
+ if( (item->GetFlags() & LOCATE_STARTPOINT) )
+ {
+ item->MoveStartPointTo( initialPosition );
+ }
+ else if( (item->GetFlags() & LOCATE_ENDPOINT) )
+ {
+ item->MoveEndPointTo( initialPosition );
+ }
+ else
+ item->MoveTo( initialPosition );
+ }
+
+ aPanel->SetMouseCapture( NULL, NULL );
+ screen->SetCurItem( NULL );
+ aPanel->Refresh();
+}
+
+
+void PL_EDITOR_FRAME::MoveItem( WORKSHEET_DATAITEM* aItem )
+{
+ wxCHECK_RET( aItem != NULL, wxT( "Cannot move NULL item" ) );
+ initialPosition = aItem->GetStartPos();
+ initialPositionUi = aItem->GetStartPosUi();
+ initialCursorPosition = GetCrossHairPosition();
+
+ if( (aItem->GetFlags() & LOCATE_ENDPOINT) )
+ {
+ initialPosition = aItem->GetEndPos();
+ initialPositionUi = aItem->GetEndPosUi();
+ }
+
+ if( aItem->GetFlags() & (LOCATE_STARTPOINT|LOCATE_ENDPOINT) )
+ {
+ SetCrossHairPosition( initialPositionUi, false );
+ initialCursorPosition = GetCrossHairPosition();
+
+ if( m_canvas->IsPointOnDisplay( initialCursorPosition ) )
+ {
+ m_canvas->MoveCursorToCrossHair();
+ m_canvas->Refresh();
+ }
+ else
+ {
+ RedrawScreen( initialCursorPosition, true );
+ }
+ }
+
+ m_canvas->SetMouseCapture( moveItem, abortMoveItem );
+ GetScreen()->SetCurItem( aItem );
+}
+
+
+/**
+* Save in Undo list the layout, and place an item being moved.
+* @param aItem is the item moved
+*/
+void PL_EDITOR_FRAME::PlaceItem( WORKSHEET_DATAITEM* aItem )
+{
+ DPOINT currStartPos = aItem->GetStartPos();
+ DPOINT currEndPos = aItem->GetEndPos();
+
+ aItem->ClearFlags( NEW_ITEM );
+
+ // Save the curren layout before changes
+ if( (aItem->GetFlags() & LOCATE_STARTPOINT) )
+ {
+ aItem->MoveStartPointTo( initialPosition );
+ }
+ else if( aItem->GetFlags() & LOCATE_ENDPOINT )
+ {
+ aItem->MoveEndPointTo( initialPosition );
+ }
+ else
+ aItem->MoveTo( initialPosition );
+
+ SaveCopyInUndoList();
+
+ // Re-place the item
+ aItem->MoveStartPointTo( currStartPos );
+ aItem->MoveEndPointTo( currEndPos );
+
+ m_canvas->SetMouseCapture( NULL, NULL );
+ GetScreen()->SetCurItem( NULL );
+}
+
+
+/* called when the user select one of the 4 page corner as corner
+ * reference (or the left top paper corner)
+ */
+void PL_EDITOR_FRAME::OnSelectCoordOriginCorner( wxCommandEvent& event )
+{
+ m_originSelectChoice = m_originSelectBox->GetSelection();
+ UpdateStatusBar(); // Update grid origin
+ m_canvas->Refresh();
+}
+
+
+void PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode( wxCommandEvent& event )
+{
+ WORKSHEET_DATAITEM::m_SpecialMode = (event.GetId() == ID_SHOW_PL_EDITOR_MODE);
+ m_canvas->Refresh();
+}
+
+
+void PL_EDITOR_FRAME::OnQuit( wxCommandEvent& event )
+{
+ Close( true );
+}
+
+
+void PL_EDITOR_FRAME::ToPlotter(wxCommandEvent& event)
+{
+ wxMessageBox( wxT( "Not yet available" ) );
+}
+
+
+void PL_EDITOR_FRAME::ToPrinter(wxCommandEvent& event)
+{
+ // static print data and page setup data, to remember settings during the session
+ static wxPrintData* s_PrintData;
+ static wxPageSetupDialogData* s_pageSetupData = (wxPageSetupDialogData*) NULL;
+
+ const PAGE_INFO& pageInfo = GetPageSettings();
+
+ if( s_PrintData == NULL ) // First print
+ {
+ s_PrintData = new wxPrintData();
+ s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGH;
+ }
+
+ if( !s_PrintData->Ok() )
+ {
+ wxMessageBox( _( "Error Init Printer info" ) );
+ return;
+ }
+
+ if( s_pageSetupData == NULL )
+ s_pageSetupData = new wxPageSetupDialogData( *s_PrintData );
+
+ s_pageSetupData->SetPaperId( pageInfo.GetPaperId() );
+ s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() );
+
+ if( pageInfo.IsCustom() )
+ {
+ if( pageInfo.IsPortrait() )
+ s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ),
+ Mils2mm( pageInfo.GetHeightMils() ) ) );
+ else
+ s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ),
+ Mils2mm( pageInfo.GetWidthMils() ) ) );
+ }
+
+ *s_PrintData = s_pageSetupData->GetPrintData();
+
+ if( event.GetId() == wxID_PREVIEW )
+ InvokeDialogPrintPreview( this, s_PrintData );
+ else
+ InvokeDialogPrint( this, s_PrintData, s_pageSetupData );
+}
+
+
+void PL_EDITOR_FRAME::OnTreeSelection( wxTreeEvent& event )
+{
+ WORKSHEET_DATAITEM* item = GetSelectedItem();
+
+ if( item )
+ m_propertiesPagelayout->CopyPrmsFromItemToPanel( item );
+
+ m_canvas->Refresh();
+}
+
+
+void PL_EDITOR_FRAME::OnTreeMiddleClick( wxTreeEvent& event )
+{
+}
+
+
+extern void AddNewItemsCommand( wxMenu* aMainMenu );
+
+
+void PL_EDITOR_FRAME::OnTreeRightClick( wxTreeEvent& event )
+{
+ m_treePagelayout->SelectCell( event.GetItem() );
+
+ wxMenu popMenu;
+ AddNewItemsCommand( &popMenu );
+
+ popMenu.AppendSeparator();
+ AddMenuItem( &popMenu, ID_POPUP_DESIGN_TREE_ITEM_DELETE, _( "Delete" ),
+ KiBitmap( delete_xpm ) );
+
+ PopupMenu( &popMenu );
+}
+
+
+void PL_EDITOR_FRAME::OnUpdateTitleBlockDisplayNormalMode( wxUpdateUIEvent& event )
+{
+ event.Check( WORKSHEET_DATAITEM::m_SpecialMode == false );
+}
+
+
+void PL_EDITOR_FRAME::OnUpdateTitleBlockDisplaySpecialMode( wxUpdateUIEvent& event )
+{
+ event.Check( WORKSHEET_DATAITEM::m_SpecialMode == true );
+}
diff --git a/pagelayout_editor/files.cpp b/pagelayout_editor/files.cpp
new file mode 100644
index 0000000..b161125
--- /dev/null
+++ b/pagelayout_editor/files.cpp
@@ -0,0 +1,260 @@
+/**
+ * @file pagelayout_editor/files.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <class_drawpanel.h>
+#include <confirm.h>
+#include <gestfich.h>
+#include <macros.h>
+#include <worksheet_shape_builder.h>
+
+#include <pl_editor_frame.h>
+#include <properties_frame.h>
+#include <pl_editor_id.h>
+#include <wildcards_and_files_ext.h>
+
+void PL_EDITOR_FRAME::OnFileHistory( wxCommandEvent& event )
+{
+ wxString filename;
+
+ filename = GetFileFromHistory( event.GetId(), _( "Page Layout Description File" ) );
+
+ if( filename != wxEmptyString )
+ {
+ if( GetScreen()->IsModify() && !IsOK( this,
+ _( "The current page layout has been modified.\n"
+ "Do you wish to discard the changes?" ) ) )
+ return;
+
+ m_canvas->EndMouseCapture( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor() );
+ ::wxSetWorkingDirectory( ::wxPathOnly( filename ) );
+ if( LoadPageLayoutDescrFile( filename ) )
+ {
+ wxString msg;
+ msg.Printf( _("File <%s> loaded"), GetChars( filename ) );
+ SetStatusText( msg );
+ }
+
+ OnNewPageLayout();
+ }
+}
+
+/* File commands. */
+void PL_EDITOR_FRAME::Files_io( wxCommandEvent& event )
+{
+ wxString msg;
+ int id = event.GetId();
+ wxString filename = GetCurrFileName();
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+
+ if( filename.IsEmpty() && id == wxID_SAVE )
+ id = wxID_SAVEAS;
+
+ switch( id )
+ {
+ case ID_LOAD_DEFAULT_PAGE_LAYOUT:
+ case wxID_NEW:
+ case wxID_OPEN:
+ if( GetScreen()->IsModify() && !IsOK( this,
+ _( "The current page layout has been modified.\n"
+ "Do you wish to discard the changes?" ) ) )
+ return;
+ break;
+
+ default:
+ break;
+ }
+
+
+ switch( id )
+ {
+ case ID_LOAD_DEFAULT_PAGE_LAYOUT:
+ pglayout.SetPageLayout();
+ OnNewPageLayout();
+ break;
+
+ case wxID_NEW:
+ pglayout.AllowVoidList( true );
+ SetCurrFileName( wxEmptyString );
+ pglayout.ClearList();
+ OnNewPageLayout();
+ break;
+
+ case ID_APPEND_DESCR_FILE:
+ {
+ wxFileDialog openFileDialog(this, _("Append Page Layout Descr File"),
+ wxEmptyString,
+ wxEmptyString, PageLayoutDescrFileWildcard, wxFD_OPEN);
+
+ if (openFileDialog.ShowModal() == wxID_CANCEL)
+ return;
+
+ filename = openFileDialog.GetPath();
+ if( ! InsertPageLayoutDescrFile( filename ) )
+ {
+ wxString msg;
+ msg.Printf( _("Unable to load %s file"), GetChars( filename ) );
+ wxMessageBox( msg );
+ }
+ else
+ {
+ GetScreen()->SetModify();
+ RebuildDesignTree();
+ m_canvas->Refresh();
+ msg.Printf( _("File <%s> inserted"), GetChars( filename ) );
+ SetStatusText( msg );
+ }
+ }
+ break;
+
+ case wxID_OPEN:
+ {
+ wxFileDialog openFileDialog(this, _("Open file"), wxEmptyString,
+ wxEmptyString, PageLayoutDescrFileWildcard, wxFD_OPEN);
+
+ if (openFileDialog.ShowModal() == wxID_CANCEL)
+ return;
+
+ filename = openFileDialog.GetPath();
+ if( ! LoadPageLayoutDescrFile( filename ) )
+ {
+ wxString msg;
+ msg.Printf( _("Unable to load %s file"), GetChars( filename ) );
+ wxMessageBox( msg );
+ }
+ else
+ {
+ OnNewPageLayout();
+ msg.Printf( _("File <%s> loaded"), GetChars( filename ) );
+ SetStatusText( msg );
+ }
+ }
+ break;
+
+ case wxID_SAVE:
+ if( !SavePageLayoutDescrFile( filename ) )
+ {
+ msg.Printf( _("Unable to write <%s>"), GetChars( filename ) );
+ wxMessageBox( msg );
+ }
+ else
+ {
+ msg.Printf( _("File <%s> written"), GetChars( filename ) );
+ SetStatusText( msg );
+ }
+ break;
+
+ case wxID_SAVEAS:
+ {
+ wxFileDialog openFileDialog(this, _("Create file"), wxEmptyString,
+ wxEmptyString, PageLayoutDescrFileWildcard, wxFD_SAVE);
+
+ if (openFileDialog.ShowModal() == wxID_CANCEL)
+ return;
+
+ filename = openFileDialog.GetPath();
+ // Ensure the file has the right extension:
+ // because a name like name.subname.subsubname is legal,
+ // add the right extension without replacing the wxFileName
+ // extension
+ wxFileName fn(filename);
+
+ if( fn.GetExt() != PageLayoutDescrFileExtension )
+ filename << wxT(".") << PageLayoutDescrFileExtension;
+
+ if( !SavePageLayoutDescrFile( filename ) )
+ {
+ wxString msg;
+ msg.Printf( _("Unable to create <%s>"), GetChars( filename ) );
+ wxMessageBox( msg );
+ }
+
+ else
+ {
+ msg.Printf( _("File <%s> written"), GetChars( filename ) );
+ SetStatusText( msg );
+ if( GetCurrFileName().IsEmpty() )
+ SetCurrFileName( filename );
+ }
+ }
+ break;
+
+ default:
+ wxMessageBox( wxT( "File_io: unexpected command id" ) );
+ break;
+ }
+}
+
+/* Loads a .kicad_wks page layout descr file
+ */
+bool PL_EDITOR_FRAME::LoadPageLayoutDescrFile( const wxString& aFullFileName )
+{
+ if( wxFileExists( aFullFileName ) )
+ {
+ WORKSHEET_LAYOUT::GetTheInstance().SetPageLayout( aFullFileName );
+ SetCurrFileName( aFullFileName );
+ UpdateFileHistory( aFullFileName );
+ GetScreen()->ClrModify();
+ return true;
+ }
+
+ return false;
+}
+
+/* Inserts a .kicad_wks page layout descr file
+ * same as LoadPageLayoutDescrFile, but the new data is added
+ * to the previous data.
+ */
+bool PL_EDITOR_FRAME::InsertPageLayoutDescrFile( const wxString& aFullFileName )
+{
+ if( wxFileExists( aFullFileName ) )
+ {
+ const bool append = true;
+ SaveCopyInUndoList();
+ WORKSHEET_LAYOUT::GetTheInstance().SetPageLayout( aFullFileName, append );
+ return true;
+ }
+
+ return false;
+}
+
+
+/* Save the current layout in a .kicad_wks page layout descr file
+ */
+bool PL_EDITOR_FRAME::SavePageLayoutDescrFile( const wxString& aFullFileName )
+{
+ if( ! aFullFileName.IsEmpty() )
+ {
+ WORKSHEET_LAYOUT::GetTheInstance().Save( aFullFileName );
+ GetScreen()->ClrModify();
+ return true;
+ }
+
+ return false;
+}
diff --git a/pagelayout_editor/hotkeys.cpp b/pagelayout_editor/hotkeys.cpp
new file mode 100644
index 0000000..095553e
--- /dev/null
+++ b/pagelayout_editor/hotkeys.cpp
@@ -0,0 +1,256 @@
+/**
+ * @file pagelayout_editor/hotkeys.cpp
+ */
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <kicad_device_context.h>
+#include <id.h>
+
+#include <class_drawpanel.h>
+#include <pl_editor_frame.h>
+#include <design_tree_frame.h>
+#include <class_worksheet_dataitem.h>
+#include <hotkeys.h>
+#include <pl_editor_id.h>
+
+
+// Remark: the hotkey message info is used as keyword in hotkey config files and
+// as comments in help windows, therefore translated only when displayed
+// they are marked _HKI to be extracted by translation tools
+// See hotkeys_basic.h for more info
+
+
+/* How to add a new hotkey:
+ * add a new id in the enum hotkey_id_commnand like MY_NEW_ID_FUNCTION.
+ * add a new EDA_HOTKEY entry like:
+ * static EDA_HOTKEY HkMyNewEntry(_HKI("Command Label"), MY_NEW_ID_FUNCTION, default key value);
+ * 'Command Label' is the name used in hotkey list display, and the identifier in the
+ * hotkey list file
+ * 'MY_NEW_ID_FUNCTION' is the id event function used in the switch in OnHotKey() function.
+ * 'Default key value' is the default hotkey for this command.
+ * Can be overrided by the user hotkey list
+ * Add the 'HkMyNewEntry' pointer in the s_PlEditor_Hotkey_List list
+ * Add the new code in the switch in OnHotKey() function.
+ *
+ * Note: If an hotkey is a special key, be sure the corresponding wxWidget keycode (WXK_XXXX)
+ * is handled in the hotkey_name_descr s_Hotkey_Name_List list (see hotkeys_basic.cpp)
+ * and see this list for some ascii keys (space ...)
+ */
+
+// Hotkey list:
+
+// mouse click command:
+static EDA_HOTKEY HkMouseLeftClick( _HKI( "Mouse Left Click" ), HK_LEFT_CLICK, WXK_RETURN, 0 );
+static EDA_HOTKEY HkMouseLeftDClick( _HKI( "Mouse Left Double Click" ), HK_LEFT_DCLICK, WXK_END, 0 );
+
+static EDA_HOTKEY HkResetLocalCoord( _HKI( "Reset Local Coordinates" ),
+ HK_RESET_LOCAL_COORD, ' ' );
+static EDA_HOTKEY HkZoomAuto( _HKI( "Zoom Auto" ), HK_ZOOM_AUTO, WXK_HOME, ID_ZOOM_PAGE );
+static EDA_HOTKEY HkZoomCenter( _HKI( "Zoom Center" ), HK_ZOOM_CENTER, WXK_F4,
+ ID_POPUP_ZOOM_CENTER );
+static EDA_HOTKEY HkZoomRedraw( _HKI( "Zoom Redraw" ), HK_ZOOM_REDRAW, WXK_F3, ID_ZOOM_REDRAW );
+static EDA_HOTKEY HkZoomOut( _HKI( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2, ID_POPUP_ZOOM_OUT );
+static EDA_HOTKEY HkZoomIn( _HKI( "Zoom In" ), HK_ZOOM_IN, WXK_F1, ID_POPUP_ZOOM_IN );
+static EDA_HOTKEY HkHelp( _HKI( "Help (this window)" ), HK_HELP, '?' );
+static EDA_HOTKEY HkMoveItem( _HKI( "Move Item" ), HK_MOVE_ITEM, 'M', ID_POPUP_ITEM_MOVE );
+static EDA_HOTKEY HkPlaceItem( _HKI( "Place Item" ), HK_PLACE_ITEM, 'P', ID_POPUP_ITEM_PLACE );
+static EDA_HOTKEY HkMoveStartPoint( _HKI( "Move Start Point" ), HK_MOVE_START_POINT, 'S',
+ ID_POPUP_ITEM_MOVE_START_POINT );
+static EDA_HOTKEY HkMoveEndPoint( _HKI( "Move End Point" ), HK_MOVE_END_POINT, 'E',
+ ID_POPUP_ITEM_MOVE_END_POINT );
+static EDA_HOTKEY HkDeleteItem( _HKI( "Delete Item" ), HK_DELETE_ITEM, WXK_DELETE,
+ ID_POPUP_ITEM_DELETE );
+
+// Undo Redo
+static EDA_HOTKEY HkUndo( _HKI( "Undo" ), HK_UNDO, GR_KB_CTRL + 'Z', (int) wxID_UNDO );
+static EDA_HOTKEY HkRedo( _HKI( "Redo" ), HK_REDO, GR_KB_CTRL + 'Y', (int) wxID_REDO );
+
+// List of common hotkey descriptors
+EDA_HOTKEY* s_Common_Hotkey_List[] =
+{
+ &HkHelp,
+ &HkZoomIn, &HkZoomOut, &HkZoomRedraw, &HkZoomCenter,
+ &HkZoomAuto, &HkResetLocalCoord,
+ &HkUndo, &HkRedo,
+ &HkMouseLeftClick,
+ &HkMouseLeftDClick,
+ NULL
+};
+
+EDA_HOTKEY* s_PlEditor_Hotkey_List[] =
+{
+ &HkMoveItem, &HkMoveStartPoint,
+ &HkMoveEndPoint,
+ &HkPlaceItem,
+ &HkDeleteItem,
+ NULL
+};
+
+// Titles for hotkey editor and hotkey display
+static wxString commonSectionTitle( _HKI( "Common" ) );
+
+// list of sections and corresponding hotkey list for Pl_Editor
+// (used to create an hotkey config file)
+static wxString s_PlEditorSectionTag( wxT( "[pl_editor]" ) );
+static wxString s_PlEditorSectionTitle( _HKI( "Page Layout Editor" ) );
+
+struct EDA_HOTKEY_CONFIG PlEditorHokeysDescr[] =
+{
+ { &g_CommonSectionTag, s_Common_Hotkey_List, &commonSectionTitle },
+ { &s_PlEditorSectionTag, s_PlEditor_Hotkey_List, &s_PlEditorSectionTitle },
+ { NULL, NULL, NULL }
+};
+
+
+EDA_HOTKEY* PL_EDITOR_FRAME::GetHotKeyDescription( int aCommand ) const
+{
+ EDA_HOTKEY* HK_Descr = GetDescriptorFromCommand( aCommand, s_Common_Hotkey_List );
+
+ if( HK_Descr == NULL )
+ HK_Descr = GetDescriptorFromCommand( aCommand, s_PlEditor_Hotkey_List );
+
+ return HK_Descr;
+}
+
+
+bool PL_EDITOR_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode,
+ const wxPoint& aPosition, EDA_ITEM* aItem )
+{
+ bool busy = GetScreen()->GetCurItem() != NULL;
+ wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
+ cmd.SetEventObject( this );
+
+ /* Convert lower to upper case (the usual toupper function has problem with non ascii
+ * codes like function keys */
+ if( (aHotkeyCode >= 'a') && (aHotkeyCode <= 'z') )
+ aHotkeyCode += 'A' - 'a';
+
+ EDA_HOTKEY * HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, s_PlEditor_Hotkey_List );
+
+ if( HK_Descr == NULL )
+ HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, s_Common_Hotkey_List );
+
+ if( HK_Descr == NULL )
+ return false;
+
+ WORKSHEET_DATAITEM* item;
+
+ switch( HK_Descr->m_Idcommand )
+ {
+ case HK_NOT_FOUND:
+ return false;
+
+ case HK_LEFT_CLICK:
+ OnLeftClick( aDC, aPosition );
+ break;
+
+ case HK_LEFT_DCLICK: // Simulate a double left click: generate 2 events
+ OnLeftClick( aDC, aPosition );
+ OnLeftDClick( aDC, aPosition );
+ break;
+
+ case HK_HELP: // Display Current hotkey list
+ DisplayHotkeyList( this, PlEditorHokeysDescr );
+ break;
+
+ case HK_UNDO:
+ case HK_REDO:
+ if( busy )
+ break;
+ cmd.SetId( HK_Descr->m_IdMenuEvent );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_ZOOM_IN:
+ cmd.SetId( ID_POPUP_ZOOM_IN );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_ZOOM_OUT:
+ cmd.SetId( ID_POPUP_ZOOM_OUT );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_ZOOM_REDRAW:
+ cmd.SetId( ID_ZOOM_REDRAW );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_ZOOM_CENTER:
+ cmd.SetId( ID_POPUP_ZOOM_CENTER );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_ZOOM_AUTO:
+ cmd.SetId( ID_ZOOM_PAGE );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_RESET_LOCAL_COORD: // Reset the relative coord
+ GetScreen()->m_O_Curseur = GetCrossHairPosition();
+ break;
+
+ case HK_SET_GRID_ORIGIN:
+ SetGridOrigin( GetCrossHairPosition() );
+ break;
+
+ case HK_MOVE_ITEM:
+ case HK_MOVE_START_POINT:
+ case HK_MOVE_END_POINT:
+ case HK_DELETE_ITEM:
+ if( busy )
+ break;
+
+ if( (item = Locate( aPosition )) == NULL )
+ break;
+
+ // Only rect and lines have a end point.
+ if( HK_Descr->m_Idcommand == HK_MOVE_END_POINT && !item->HasEndPoint() )
+ break;
+
+ if( m_treePagelayout->GetPageLayoutSelectedItem() != item )
+ m_treePagelayout->SelectCell( item );
+
+ cmd.SetId( HK_Descr->m_IdMenuEvent );
+ GetEventHandler()->ProcessEvent( cmd );
+ break;
+
+ case HK_PLACE_ITEM:
+ if( busy )
+ {
+ cmd.SetId( HK_Descr->m_IdMenuEvent );
+ GetEventHandler()->ProcessEvent( cmd );
+ }
+ break;
+
+ default:
+ wxMessageBox( wxT( "Unknown hotkey" ) );
+ return false;
+ }
+
+ return true;
+}
diff --git a/pagelayout_editor/hotkeys.h b/pagelayout_editor/hotkeys.h
new file mode 100644
index 0000000..92c6e53
--- /dev/null
+++ b/pagelayout_editor/hotkeys.h
@@ -0,0 +1,51 @@
+/**
+ * @file pagelayout_editor/hotkeys.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef PL_EDITOR_KOTKEYS_H_
+#define PL_EDITOR_KOTKEYS_H_
+
+#include <hotkeys_basic.h>
+
+// List of hot keys id.
+// see also enum common_hotkey_id_commnand in hotkeys_basic.h
+// for shared hotkeys id
+enum hotkey_id_commnand {
+ HK_SWITCH_UNITS = HK_COMMON_END,
+ HK_MOVE_ITEM,
+ HK_MOVE_START_POINT,
+ HK_MOVE_END_POINT,
+ HK_PLACE_ITEM,
+ HK_DELETE_ITEM,
+ HK_LEFT_CLICK,
+ HK_LEFT_DCLICK
+};
+
+// List of hotkey descriptors for PlEditor.
+extern struct EDA_HOTKEY_CONFIG PlEditorHokeysDescr[];
+
+#endif // PL_EDITOR_KOTKEYS_H_
diff --git a/pagelayout_editor/invoke_pl_editor_dialog.h b/pagelayout_editor/invoke_pl_editor_dialog.h
new file mode 100644
index 0000000..ecd4b96
--- /dev/null
+++ b/pagelayout_editor/invoke_pl_editor_dialog.h
@@ -0,0 +1,67 @@
+/**
+ * @file invoke_pl_editor_dialog.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2013 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+// This header is an insolation layer between top most frames and any number of
+// DIALOG classes which can be called from a frame window.
+// It is a place to put invocation functions for [modal] dialogs, with benefits:
+//
+// 1) The information about each dialog class is not exposed to the frame.
+// So therefore the DIALOG class can often be kept out of a header file entirely.
+//
+// 2) The information about the calling frame is not necessarily exposed to
+// to the called dialog class, at least not in here.
+
+// The actual InvokeDialog<class>() function is usually coded at the bottom of the
+// DIALOG_<class>.cpp file.
+
+
+#ifndef INVOKE_PL_EDITOR_DIALOG_H_
+#define INVOKE_PL_EDITOR_DIALOG_H_
+
+// Often this is not used in the prototypes, since wxFrame is good enough and would
+// represent maximum information hiding.
+class PL_EDITOR_FRAME;
+class WORKSHEET_DATAITEM;
+class wxPrintData;
+class wxPageSetupDialogData;
+
+
+/// Create and show DIALOG_NEW_DATAITEM and return whatever
+/// DIALOG_NEW_DATAITEM::ShowModal() returns.
+int InvokeDialogNewItem( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem );
+
+/// Create and show a print dialog
+/// returns 1 if OK, 0 , there is a problem.
+int InvokeDialogPrint( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData,
+ wxPageSetupDialogData* aPageSetupData );
+
+/// Create and show a print preview dialog
+/// returns 1 if OK, 0 , there is a problem.
+int InvokeDialogPrintPreview( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData );
+
+#endif // INVOKE_PL_EDITOR_DIALOG_H_
diff --git a/pagelayout_editor/menubar.cpp b/pagelayout_editor/menubar.cpp
new file mode 100644
index 0000000..090bc18
--- /dev/null
+++ b/pagelayout_editor/menubar.cpp
@@ -0,0 +1,183 @@
+/**
+ * @file pagelayout_editor/menubar.cpp
+ * @brief (Re)Create the main menubar for Pl_Editor
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+
+#include <pgm_base.h>
+#include <kiface_i.h>
+#include <pl_editor_frame.h>
+#include <pl_editor_id.h>
+#include <hotkeys.h>
+#include <menus_helpers.h>
+
+
+void PL_EDITOR_FRAME::ReCreateMenuBar()
+{
+ // Create and try to get the current menubar
+ wxMenuBar* menuBar = GetMenuBar();
+
+ if( !menuBar )
+ menuBar = new wxMenuBar();
+
+ // Delete all existing menus so they can be rebuilt.
+ // This allows language changes of the menu text on the fly.
+ menuBar->Freeze();
+
+ while( menuBar->GetMenuCount() )
+ delete menuBar->Remove( 0 );
+
+ // Recreate all menus:
+
+ // Menu File:
+ wxMenu* fileMenu = new wxMenu;
+
+ // Load
+ AddMenuItem( fileMenu, wxID_NEW,
+ _( "&New Page Layout Design" ),
+ wxEmptyString, KiBitmap( pagelayout_new_xpm ) );
+ AddMenuItem( fileMenu, wxID_OPEN,
+ _( "Load Page Layout &File" ),
+ wxEmptyString, KiBitmap( pagelayout_load_xpm ) );
+ AddMenuItem( fileMenu, ID_LOAD_DEFAULT_PAGE_LAYOUT,
+ _( "Load &Default Page Layout" ),
+ wxEmptyString, KiBitmap( pagelayout_load_default_xpm ) );
+
+ // Recent gerber files
+ static wxMenu* openRecentMenu;
+
+ // Add this menu to list menu managed by m_fileHistory
+ // (the file history will be updated when adding/removing files in history
+ if( openRecentMenu )
+ Kiface().GetFileHistory().RemoveMenu( openRecentMenu );
+
+ openRecentMenu = new wxMenu();
+
+ Kiface().GetFileHistory().UseMenu( openRecentMenu );
+ Kiface().GetFileHistory().AddFilesToMenu();
+
+ AddMenuItem( fileMenu, openRecentMenu,
+ wxID_ANY, _( "Open &Recent Page Layout File" ),
+ wxEmptyString, KiBitmap( pagelayout_recent_xpm ) );
+
+ fileMenu->AppendSeparator();
+ // Save current sheet
+ AddMenuItem( fileMenu, wxID_SAVE,
+ _( "&Save Page Layout Design" ),
+ wxEmptyString, KiBitmap( save_xpm ) );
+
+ // Save current sheet as
+ AddMenuItem( fileMenu, wxID_SAVEAS,
+ _( "Save Page Layout Design &As" ),
+ wxEmptyString, KiBitmap( save_as_xpm ) );
+
+ // Print
+ fileMenu->AppendSeparator();
+ AddMenuItem( fileMenu, wxID_PRINT, _( "&Print" ),
+ wxEmptyString, KiBitmap( print_button_xpm ) );
+ AddMenuItem( fileMenu, wxID_PREVIEW, _( "Print Pre&view" ),
+ wxEmptyString, KiBitmap( print_button_xpm ) );
+
+ // Separator
+ fileMenu->AppendSeparator();
+
+ // Exit
+ AddMenuItem( fileMenu, wxID_EXIT,
+ _( "&Close" ),
+ _( "&Close Page Layout Editor" ),
+ KiBitmap( exit_xpm ) );
+
+ // Menu for preferences
+ wxMenu* preferencesMenu = new wxMenu;
+
+ AddMenuItem( preferencesMenu,
+ ID_MENU_SWITCH_BGCOLOR,
+ GetDrawBgColor() == WHITE ?
+ _( "&Background Black" ) : _( "&Background White" ),
+ wxEmptyString, KiBitmap( palette_xpm ) );
+
+ AddMenuItem( preferencesMenu,
+ ID_MENU_GRID_ONOFF,
+ IsGridVisible() ? _( "Hide &Grid" ) : _( "Show &Grid" ),
+ wxEmptyString, KiBitmap( grid_xpm ) );
+
+ // Text editor selection
+ AddMenuItem( preferencesMenu,
+ ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR,
+ _( "&Text Editor" ),
+ _( "Select your preferred text editor" ),
+ KiBitmap( editor_xpm ) );
+
+ // Language submenu
+ Pgm().AddMenuLanguageList( preferencesMenu );
+
+ // Hotkey submenu
+ AddHotkeyConfigMenu( preferencesMenu );
+
+ // Menu Help
+ wxMenu* helpMenu = new wxMenu;
+
+ // Version info
+ AddHelpVersionInfoMenuEntry( helpMenu );
+
+ // Contents
+ AddMenuItem( helpMenu,
+ wxID_HELP,
+ _( "Page Layout Editor &Manual" ),
+ _( "Open the Page Layout Editor Manual" ),
+ KiBitmap( online_help_xpm ) );
+
+ AddMenuItem( helpMenu,
+ wxID_INDEX,
+ _( "&Getting Started in KiCad" ),
+ _( "Open \"Getting Started in KiCad\" guide for beginners" ),
+ KiBitmap( help_xpm ) );
+
+ // Separator
+ helpMenu->AppendSeparator();
+
+ // About Kicad
+ AddMenuItem( helpMenu,
+ wxID_ABOUT,
+ _( "&About Kicad" ),
+ _( "About KiCad" ),
+ KiBitmap( info_xpm ) );
+
+ // Append menus to the menubar
+ menuBar->Append( fileMenu, _( "&File" ) );
+ menuBar->Append( preferencesMenu, _( "&Preferences" ) );
+ menuBar->Append( helpMenu, _( "&Help" ) );
+
+ menuBar->Thaw();
+
+ // Associate the menu bar with the frame, if no previous menubar
+ if( GetMenuBar() == NULL )
+ SetMenuBar( menuBar );
+ else
+ menuBar->Refresh();
+}
diff --git a/pagelayout_editor/onleftclick.cpp b/pagelayout_editor/onleftclick.cpp
new file mode 100644
index 0000000..ed467ee
--- /dev/null
+++ b/pagelayout_editor/onleftclick.cpp
@@ -0,0 +1,77 @@
+/**
+ * @file pagelayout_editor/onleftclick.cpp
+ * @brief functions called on left or double left click mouse event
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2013 CERN
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include <fctsys.h>
+#include <class_drawpanel.h>
+#include <common.h>
+
+#include <pl_editor_frame.h>
+#include <pl_editor_id.h>
+#include <design_tree_frame.h>
+#include <properties_frame.h>
+#include <dialog_helpers.h>
+#include <class_worksheet_dataitem.h>
+
+/* Process the command triggered by the left button of the mouse when a tool
+ * is already selected.
+ */
+void PL_EDITOR_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
+{
+ WORKSHEET_DATAITEM* item = GetScreen()->GetCurItem();
+
+ if( item ) // An item is currently in edit: place it
+ {
+ PlaceItem( item );
+ m_propertiesPagelayout->CopyPrmsFromItemToPanel( item );
+ m_canvas->Refresh();
+ return;
+ }
+
+ item = m_treePagelayout->GetPageLayoutSelectedItem();
+ WORKSHEET_DATAITEM* newitem = Locate( aPosition );
+
+ if( newitem == NULL )
+ return;
+
+ if( newitem != item )
+ {
+ item = newitem;
+ m_treePagelayout->SelectCell( item );
+ m_canvas->Refresh();
+ }
+}
+
+
+/* Called on a double click of left mouse button.
+ */
+void PL_EDITOR_FRAME::OnLeftDClick( wxDC* aDC, const wxPoint& aPosition )
+{
+ // Currently: no nothing
+}
diff --git a/pagelayout_editor/onrightclick.cpp b/pagelayout_editor/onrightclick.cpp
new file mode 100644
index 0000000..bcb7a19
--- /dev/null
+++ b/pagelayout_editor/onrightclick.cpp
@@ -0,0 +1,127 @@
+/**
+ * @file pagelayout_editor/onrightclick.cpp
+ * @brief functions called on rigth click mouse event
+*/
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2013 CERN
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <class_drawpanel.h>
+#include <pl_editor_id.h>
+
+#include <pl_editor_frame.h>
+#include <design_tree_frame.h>
+#include <properties_frame.h>
+#include <menus_helpers.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <hotkeys.h>
+
+// Helper function to add menuitems relative to items creation
+void AddNewItemsCommand( wxMenu* aMainMenu )
+{
+ AddMenuItem( aMainMenu, ID_POPUP_ITEM_ADD_LINE, _( "Add Line" ),
+ KiBitmap( add_dashed_line_xpm ) );
+ AddMenuItem( aMainMenu, ID_POPUP_ITEM_ADD_RECT, _( "Add Rectangle" ),
+ KiBitmap( add_rectangle_xpm ) );
+ AddMenuItem( aMainMenu, ID_POPUP_ITEM_ADD_TEXT, _( "Add Text" ),
+ KiBitmap( add_text_xpm ) );
+ AddMenuItem( aMainMenu, ID_POPUP_ITEM_APPEND_PAGE_LAYOUT,
+ _( "Append Page Layout Descr File" ),
+ KiBitmap( import_xpm ) );
+ AddMenuItem( aMainMenu, ID_POPUP_ITEM_ADD_BITMAP,
+ _( "Add Bitmap" ),
+ KiBitmap( image_xpm ) );
+}
+
+/* Prepare the right-click pullup menu.
+ * The menu already has a list of zoom commands.
+ */
+bool PL_EDITOR_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* aPopMenu )
+{
+ bool busy = GetScreen()->GetCurItem() != NULL;
+ wxString msg;
+
+ if( ! busy ) // No item currently edited
+ {
+ WORKSHEET_DATAITEM* old_item = m_treePagelayout->GetPageLayoutSelectedItem();
+ WORKSHEET_DATAITEM* item = Locate( aPosition );
+
+ if( item && old_item != item )
+ {
+ m_treePagelayout->SelectCell( item );
+ m_canvas->Refresh();
+ }
+
+ // Add menus to edit and delete the item
+ if( item )
+ {
+ if( (item->GetFlags() & LOCATE_STARTPOINT) )
+ {
+ msg = AddHotkeyName( _( "Move Start Point" ), PlEditorHokeysDescr,
+ HK_MOVE_START_POINT );
+ AddMenuItem( aPopMenu, ID_POPUP_ITEM_MOVE_START_POINT, msg,
+ KiBitmap( move_xpm ) );
+ }
+
+ if( (item->GetFlags() & LOCATE_ENDPOINT ) )
+ {
+ msg = AddHotkeyName( _( "Move End Point" ), PlEditorHokeysDescr,
+ HK_MOVE_END_POINT );
+ AddMenuItem( aPopMenu, ID_POPUP_ITEM_MOVE_END_POINT, msg,
+ KiBitmap( move_xpm ) );
+ }
+
+ msg = AddHotkeyName( _( "Move Item" ), PlEditorHokeysDescr,
+ HK_MOVE_ITEM );
+ AddMenuItem( aPopMenu, ID_POPUP_ITEM_MOVE, msg,
+ KiBitmap( move_xpm ) );
+ aPopMenu->AppendSeparator();
+
+ msg = AddHotkeyName( _( "Delete" ), PlEditorHokeysDescr,
+ HK_DELETE_ITEM );
+ AddMenuItem( aPopMenu, ID_POPUP_ITEM_DELETE, msg, KiBitmap( delete_xpm ) );
+ aPopMenu->AppendSeparator();
+ }
+ }
+ else // An item is currently in edit
+ {
+ msg = AddHotkeyName( _( "Place Item" ), PlEditorHokeysDescr,
+ HK_PLACE_ITEM );
+ AddMenuItem( aPopMenu, ID_POPUP_ITEM_PLACE, msg,
+ KiBitmap( move_xpm ) );
+ AddMenuItem( aPopMenu, ID_POPUP_ITEM_PLACE_CANCEL, _( "Cancel" ),
+ KiBitmap( cancel_xpm ) );
+ aPopMenu->AppendSeparator();
+ }
+
+ if( ! busy )
+ {
+ AddNewItemsCommand( aPopMenu );
+ aPopMenu->AppendSeparator();
+ }
+
+ return true;
+}
diff --git a/pagelayout_editor/page_layout_writer.cpp b/pagelayout_editor/page_layout_writer.cpp
new file mode 100644
index 0000000..1ddba50
--- /dev/null
+++ b/pagelayout_editor/page_layout_writer.cpp
@@ -0,0 +1,472 @@
+/**
+ * @file page_layout_writer.cpp
+ * @brief write an S expression of description of graphic items and texts
+ * to build a title block and page layout
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <base_struct.h>
+#include <worksheet.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <math/vector2d.h>
+#include <page_layout_reader_lexer.h>
+#include <macros.h>
+#include <convert_to_biu.h>
+
+
+using namespace TB_READER_T;
+
+#define double2Str Double2Str
+
+// A helper function to write tokens:
+static const char* getTokenName( T aTok )
+{
+ return PAGE_LAYOUT_READER_LEXER::TokenName( aTok );
+}
+
+// A basic helper class to write a page layout description
+// Not used alone, a file writer or a string writer should be
+// derived to use it
+// Therefore the constructor is protected
+class WORKSHEET_LAYOUT_IO
+{
+protected:
+ OUTPUTFORMATTER* m_out;
+
+ WORKSHEET_LAYOUT_IO() { m_out = NULL; }
+ virtual ~WORKSHEET_LAYOUT_IO() {}
+
+public:
+ void Format( WORKSHEET_LAYOUT* aPageLayout ) const
+ throw( IO_ERROR );
+
+ void Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
+ throw( IO_ERROR );
+
+private:
+ void format( WORKSHEET_LAYOUT* aPageLayout ) const
+ throw( IO_ERROR );
+
+ void format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const throw( IO_ERROR );
+ void format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const throw( IO_ERROR );
+ void format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel )
+ const throw( IO_ERROR );
+ void format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const
+ throw( IO_ERROR );
+ void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const
+ throw( IO_ERROR );
+ void formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR );
+ void formatOptions( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR );
+};
+
+// A helper class to write a page layout description to a file
+class WORKSHEET_LAYOUT_FILEIO: public WORKSHEET_LAYOUT_IO
+{
+ FILE_OUTPUTFORMATTER * m_fileout;
+
+public:
+ WORKSHEET_LAYOUT_FILEIO( const wxString& aFilename ):
+ WORKSHEET_LAYOUT_IO()
+ {
+ try
+ {
+ m_fileout = new FILE_OUTPUTFORMATTER( aFilename );
+ m_out = m_fileout;
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxMessageBox( ioe.errorText, _("Error writing page layout descr file" ) );
+ }
+ }
+
+ ~WORKSHEET_LAYOUT_FILEIO()
+ {
+ delete m_fileout;
+ }
+};
+
+// A helper class to write a page layout description to a string
+class WORKSHEET_LAYOUT_STRINGIO: public WORKSHEET_LAYOUT_IO
+{
+ STRING_FORMATTER * m_writer;
+ wxString & m_output;
+
+public:
+ WORKSHEET_LAYOUT_STRINGIO( wxString& aOutputString ):
+ WORKSHEET_LAYOUT_IO(), m_output( aOutputString )
+ {
+ try
+ {
+ m_writer = new STRING_FORMATTER();
+ m_out = m_writer;
+ }
+ catch( const IO_ERROR& ioe )
+ {
+ wxMessageBox( ioe.errorText, _("Error writing page layout descr file" ) );
+ }
+ }
+
+ ~WORKSHEET_LAYOUT_STRINGIO()
+ {
+ m_output = FROM_UTF8( m_writer->GetString().c_str() );
+ delete m_writer;
+ }
+};
+
+/*
+ * Save the description in a file
+ */
+void WORKSHEET_LAYOUT::Save( const wxString& aFullFileName )
+{
+ WORKSHEET_LAYOUT_FILEIO writer( aFullFileName );
+ writer.Format( this );
+}
+
+/* Save the description in a buffer
+ */
+void WORKSHEET_LAYOUT::SaveInString( wxString& aOutputString )
+{
+ WORKSHEET_LAYOUT_STRINGIO writer( aOutputString );
+ writer.Format( this );
+}
+
+
+void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
+ throw( IO_ERROR )
+{
+ switch( aItem->GetType() )
+ {
+ case WORKSHEET_DATAITEM::WS_TEXT:
+ format( (WORKSHEET_DATAITEM_TEXT*) aItem, aNestLevel );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_SEGMENT:
+ case WORKSHEET_DATAITEM::WS_RECT:
+ format( aItem, aNestLevel );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
+ format( (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem, aNestLevel );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_BITMAP:
+ format( (WORKSHEET_DATAITEM_BITMAP*) aItem, aNestLevel );
+ break;
+
+ default:
+ wxFAIL_MSG( wxT( "Cannot format item" ) );
+ }
+}
+
+void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_LAYOUT* aPageLayout ) const
+ throw( IO_ERROR )
+{
+ LOCALE_IO toggle; // switch on/off the locale "C" notation
+
+ m_out->Print( 0, "(page_layout\n" );
+
+ // Setup
+ int nestLevel = 1;
+ // Write default values:
+ m_out->Print( nestLevel, "(%s ", getTokenName( T_setup ) );
+ m_out->Print( 0, "(textsize %s %s)",
+ double2Str( WORKSHEET_DATAITEM::m_DefaultTextSize.x ).c_str(),
+ double2Str( WORKSHEET_DATAITEM::m_DefaultTextSize.y ).c_str() );
+ m_out->Print( 0, "(linewidth %s)", double2Str( WORKSHEET_DATAITEM::m_DefaultLineWidth ).c_str() );
+ m_out->Print( 0, "(textlinewidth %s)", double2Str( WORKSHEET_DATAITEM::m_DefaultTextThickness ).c_str() );
+ m_out->Print( 0, "\n" );
+
+ // Write margin values
+ m_out->Print( nestLevel, "(%s %s)", getTokenName( T_left_margin ),
+ double2Str( aPageLayout->GetLeftMargin() ).c_str() );
+ m_out->Print( 0, "(%s %s)", getTokenName( T_right_margin ),
+ double2Str( aPageLayout->GetRightMargin() ).c_str() );
+ m_out->Print( 0, "(%s %s)", getTokenName( T_top_margin ),
+ double2Str( aPageLayout->GetTopMargin() ).c_str() );
+ m_out->Print( 0, "(%s %s)", getTokenName( T_bottom_margin ),
+ double2Str( aPageLayout->GetBottomMargin() ).c_str() );
+ m_out->Print( 0, ")\n" );
+
+ // Save the graphical items on the page layout
+ for( unsigned ii = 0; ii < aPageLayout->GetCount(); ii++ )
+ {
+ WORKSHEET_DATAITEM* item = aPageLayout->GetItem( ii );
+ Format( item, nestLevel );
+ }
+
+ m_out->Print( 0, ")\n" );
+}
+
+void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const
+ throw( IO_ERROR )
+{
+ m_out->Print( aNestLevel, "(%s", getTokenName( T_tbtext ) );
+ m_out->Print( 0, " %s", m_out->Quotew( aItem->m_TextBase ).c_str() );
+ m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
+ m_out->Quotew( aItem->m_Name ).c_str() );
+
+ formatCoordinate( getTokenName( T_pos ), aItem->m_Pos );
+ formatOptions( aItem );
+
+ if( aItem->m_Orient )
+ m_out->Print( 0, " (%s %s)", getTokenName( T_rotate ),
+ double2Str(aItem->m_Orient ).c_str() );
+
+ // Write font info, only if it is not the default setup
+ bool write_size = aItem->m_TextSize.x != 0.0 || aItem->m_TextSize.y != 0.0;
+ bool write_thickness = aItem->m_LineWidth != 0.0;
+
+ if( write_thickness || write_size || aItem->IsBold() || aItem->IsItalic() )
+ {
+ m_out->Print( 0, " (%s", getTokenName( T_font ) );
+
+ if( write_thickness )
+ {
+ m_out->Print( 0, " (%s %s)", getTokenName( T_linewidth ),
+ double2Str(aItem->m_LineWidth ).c_str() );
+ }
+
+ if( write_size )
+ {
+ m_out->Print( 0, " (%s %s %s)", getTokenName( T_size ),
+ double2Str(aItem->m_TextSize.x ).c_str(),
+ double2Str(aItem->m_TextSize.y ).c_str() );
+ }
+ if( aItem->IsBold() )
+ m_out->Print( 0, " %s", getTokenName( T_bold ) );
+
+ if( aItem->IsItalic() )
+ m_out->Print( 0, " %s", getTokenName( T_italic ) );
+
+ m_out->Print( 0, ")" );
+ }
+
+ // Write text justification
+ if( aItem->m_Hjustify != GR_TEXT_HJUSTIFY_LEFT ||
+ aItem->m_Vjustify != GR_TEXT_VJUSTIFY_CENTER )
+ {
+ m_out->Print( 0, " (%s", getTokenName( T_justify ) );
+
+ // Write T_center opt first, because it is
+ // also a center for both m_Hjustify and m_Vjustify
+ if( aItem->m_Hjustify == GR_TEXT_HJUSTIFY_CENTER )
+ m_out->Print( 0, " %s", getTokenName( T_center ) );
+
+ if( aItem->m_Hjustify == GR_TEXT_HJUSTIFY_RIGHT )
+ m_out->Print( 0, " %s", getTokenName( T_right ) );
+
+ if( aItem->m_Vjustify == GR_TEXT_VJUSTIFY_TOP )
+ m_out->Print( 0, " %s", getTokenName( T_top ) );
+
+ if( aItem->m_Vjustify == GR_TEXT_VJUSTIFY_BOTTOM )
+ m_out->Print( 0, " %s", getTokenName( T_bottom ) );
+
+ m_out->Print( 0, ")" );
+ }
+
+ // write constraints
+ if( aItem->m_BoundingBoxSize.x )
+ m_out->Print( 0, " (%s %s)", getTokenName( T_maxlen ),
+ double2Str(aItem->m_BoundingBoxSize.x ).c_str() );
+
+ if( aItem->m_BoundingBoxSize.y )
+ m_out->Print( 0, " (%s %s)", getTokenName( T_maxheight ),
+ double2Str(aItem->m_BoundingBoxSize.y ).c_str() );
+
+ formatRepeatParameters( aItem );
+
+ m_out->Print( 0, ")\n" );
+}
+
+void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
+ throw( IO_ERROR )
+{
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_RECT )
+ m_out->Print( aNestLevel, "(%s", getTokenName( T_rect ) );
+ else
+ m_out->Print( aNestLevel, "(%s", getTokenName( T_line ) );
+
+ m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
+ m_out->Quotew( aItem->m_Name ).c_str() );
+
+ formatCoordinate( getTokenName( T_start ), aItem->m_Pos );
+ formatCoordinate( getTokenName( T_end ), aItem->m_End );
+ formatOptions( aItem );
+
+ if( aItem->m_LineWidth && aItem->m_LineWidth != aItem->m_DefaultLineWidth )
+ m_out->Print( 0, " (linewidth %s)", double2Str( aItem->m_LineWidth ).c_str() );
+
+ formatRepeatParameters( aItem );
+
+ m_out->Print( 0, ")\n" );
+}
+
+
+void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel ) const
+ throw( IO_ERROR )
+{
+ m_out->Print( aNestLevel, "(%s", getTokenName( T_polygon ) );
+ m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
+ m_out->Quotew( aItem->m_Name ).c_str() );
+ formatCoordinate( getTokenName( T_pos ), aItem->m_Pos );
+ formatOptions( aItem );
+
+ formatRepeatParameters( aItem );
+
+ if( aItem->m_Orient )
+ m_out->Print( 0, " (%s %s)", getTokenName( T_rotate ),
+ double2Str(aItem->m_Orient ).c_str() );
+
+ if( aItem->m_LineWidth )
+ m_out->Print( 0, " (linewidth %s)\n", double2Str( aItem->m_LineWidth ).c_str() );
+
+ // Write polygon corners list
+ for( int kk = 0; kk < aItem->GetPolyCount(); kk++ )
+ {
+ m_out->Print( aNestLevel+1, "(%s", getTokenName( T_pts ) );
+ // Create current polygon corners list
+ unsigned ist = aItem->GetPolyIndexStart( kk );
+ unsigned iend = aItem->GetPolyIndexEnd( kk );
+ int ii = 0;
+ while( ist <= iend )
+ {
+ DPOINT pos = aItem->m_Corners[ist++];
+ int nestLevel = 0;
+
+ if( ii++ > 4)
+ {
+ m_out->Print( 0, "\n" );
+ nestLevel = aNestLevel+2;
+ ii = 0;
+ }
+ m_out->Print( nestLevel, " (%s %s %s)", getTokenName( T_xy ),
+ double2Str( pos.x ).c_str(),
+ double2Str( pos.y ).c_str() );
+ }
+ m_out->Print( 0, ")\n" );
+ }
+
+ m_out->Print( aNestLevel, ")\n" );
+}
+
+void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const
+ throw( IO_ERROR )
+{
+ m_out->Print( aNestLevel, "(%s", getTokenName( T_bitmap ) );
+ m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
+ m_out->Quotew( aItem->m_Name ).c_str() );
+ formatCoordinate( getTokenName( T_pos ), aItem->m_Pos );
+ formatOptions( aItem );
+
+ m_out->Print( 0, " (%s %s)", getTokenName( T_scale ),
+ double2Str(aItem->m_ImageBitmap->m_Scale ).c_str() );
+
+ formatRepeatParameters( aItem );
+ m_out->Print( 0,"\n");
+
+ // Write image in png readable format
+ m_out->Print( aNestLevel, "(%s\n", getTokenName( T_pngdata ) );
+ wxArrayString pngStrings;
+ aItem->m_ImageBitmap->SaveData( pngStrings );
+
+ for( unsigned ii = 0; ii < pngStrings.GetCount(); ii++ )
+ m_out->Print( aNestLevel+1, "(data \"%s\")\n", TO_UTF8(pngStrings[ii]) );
+
+ m_out->Print( aNestLevel+1, ")\n" );
+
+ m_out->Print( aNestLevel, ")\n" );
+}
+
+void WORKSHEET_LAYOUT_IO::formatCoordinate( const char * aToken,
+ POINT_COORD & aCoord ) const
+ throw( IO_ERROR )
+{
+ m_out->Print( 0, " (%s %s %s", aToken,
+ double2Str( aCoord.m_Pos.x ).c_str(),
+ double2Str( aCoord.m_Pos.y ).c_str() );
+
+ switch( aCoord.m_Anchor )
+ {
+ case RB_CORNER:
+ break;
+
+ case LT_CORNER:
+ m_out->Print( 0, " %s", getTokenName(T_ltcorner ) );
+ break;
+
+ case LB_CORNER:
+ m_out->Print( 0, " %s", getTokenName(T_lbcorner ) );
+ break;
+
+ case RT_CORNER:
+ m_out->Print( 0, " %s", getTokenName(T_rtcorner ) );
+ break;
+ }
+
+ m_out->Print( 0, ")" );
+}
+
+void WORKSHEET_LAYOUT_IO::formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const
+ throw( IO_ERROR )
+{
+ if( aItem->m_RepeatCount <= 1 )
+ return;
+
+ m_out->Print( 0, " (repeat %d)", aItem->m_RepeatCount );
+
+ if( aItem->m_IncrementVector.x )
+ m_out->Print( 0, " (incrx %s)", double2Str(aItem-> m_IncrementVector.x ).c_str() );
+
+ if( aItem->m_IncrementVector.y )
+ m_out->Print( 0, " (incry %s)", double2Str( aItem->m_IncrementVector.y ).c_str() );
+
+ if( aItem->m_IncrementLabel != 1 &&
+ aItem->GetType() == WORKSHEET_DATAITEM::WS_TEXT )
+ m_out->Print( 0, " (incrlabel %d)", aItem->m_IncrementLabel );
+}
+
+void WORKSHEET_LAYOUT_IO::formatOptions( WORKSHEET_DATAITEM* aItem ) const
+ throw( IO_ERROR )
+{
+ switch( aItem->GetPage1Option() )
+ {
+ default:
+ case 0:
+ break;
+
+ case 1:
+ m_out->Print( 0, " (%s %s)", getTokenName(T_option ),
+ getTokenName(T_page1only ) );
+ break;
+
+ case -1:
+ m_out->Print( 0, " (%s %s)", getTokenName(T_option ),
+ getTokenName(T_notonpage1 ) );
+ break;
+ }
+}
diff --git a/pagelayout_editor/pl_editor.cpp b/pagelayout_editor/pl_editor.cpp
new file mode 100644
index 0000000..c55f9aa
--- /dev/null
+++ b/pagelayout_editor/pl_editor.cpp
@@ -0,0 +1,206 @@
+/**
+ * @file pl_editor.cpp
+ * @brief page layout editor main file.
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <kiface_i.h>
+#include <confirm.h>
+#include <gestfich.h>
+#include <worksheet_shape_builder.h>
+#include <pl_editor_frame.h>
+#include <hotkeys.h>
+
+#include <build_version.h>
+
+#include <wx/file.h>
+#include <wx/snglinst.h>
+
+
+namespace PGE {
+
+static struct IFACE : public KIFACE_I
+{
+ // Of course all are virtual overloads, implementations of the KIFACE.
+
+ IFACE( const char* aName, KIWAY::FACE_T aType ) :
+ KIFACE_I( aName, aType )
+ {}
+
+ bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+
+ void OnKifaceEnd();
+
+ wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+ {
+ switch( aClassId )
+ {
+ case FRAME_PL_EDITOR:
+ {
+ PL_EDITOR_FRAME* frame = new PL_EDITOR_FRAME( aKiway, aParent );
+ return frame;
+ }
+ break;
+
+ default:
+ ;
+ }
+
+ return NULL;
+ }
+
+ /**
+ * Function IfaceOrAddress
+ * return a pointer to the requested object. The safest way to use this
+ * is to retrieve a pointer to a static instance of an interface, similar to
+ * how the KIFACE interface is exported. But if you know what you are doing
+ * use it to retrieve anything you want.
+ *
+ * @param aDataId identifies which object you want the address of.
+ *
+ * @return void* - and must be cast into the know type.
+ */
+ void* IfaceOrAddress( int aDataId )
+ {
+ return NULL;
+ }
+
+} kiface( "pl_editor", KIWAY::FACE_PL_EDITOR );
+
+} // namespace
+
+using namespace PGE;
+
+static PGM_BASE* process;
+
+KIFACE_I& Kiface() { return kiface; }
+
+
+// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
+// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
+MY_API( KIFACE* ) KIFACE_GETTER( int* aKIFACEversion, int aKiwayVersion, PGM_BASE* aProgram )
+{
+ process = (PGM_BASE*) aProgram;
+ return &kiface;
+}
+
+
+PGM_BASE& Pgm()
+{
+ wxASSERT( process ); // KIFACE_GETTER has already been called.
+ return *process;
+}
+
+
+bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
+{
+ start_common( aCtlBits );
+
+ // Must be called before creating the main frame in order to
+ // display the real hotkeys in menus or tool tips
+ ReadHotkeyConfig( PL_EDITOR_FRAME_NAME, PlEditorHokeysDescr );
+
+ g_UserUnit = MILLIMETRES;
+
+ return true;
+}
+
+
+void IFACE::OnKifaceEnd()
+{
+ end_common();
+}
+
+
+#if 0
+bool MYFACE::OnKifaceStart( PGM_BASE* aProgram )
+
+{
+ wxFileName fn;
+
+ InitEDA_Appl( wxT( "pl_editor" ), APP_PL_EDITOR_T );
+
+ if( m_Checker && m_Checker->IsAnotherRunning() )
+ {
+ if( !IsOK( NULL, _( "pl_editor is already running. Continue?" ) ) )
+ return false;
+ }
+
+ g_UserUnit = MILLIMETRES;
+
+ // read current setup and reopen last directory if no filename to open in
+ // command line
+ bool reopenLastUsedDirectory = argc == 1;
+ GetSettings( reopenLastUsedDirectory );
+
+ // Must be called before creating the main frame in order to
+ // display the real hotkeys in menus or tool tips
+ ReadHotkeyConfig( PL_EDITOR_FRAME_NAME, s_PlEditor_Hokeys_Descr );
+
+ PL_EDITOR_FRAME * frame = new PL_EDITOR_FRAME( NULL, wxT( "PlEditorFrame" ), wxPoint( 0, 0 ), wxSize( 600, 400 ) );
+
+ // frame title:
+ frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() );
+
+ SetTopWindow( frame );
+ frame->Show( true );
+ frame->Zoom_Automatique( true ); // Zoom fit in frame
+ frame->GetScreen()->m_FirstRedraw = false;
+
+
+ bool descrLoaded = false;
+ if( argc > 1 )
+ {
+ fn = argv[1];
+
+ if( fn.IsOk() )
+ {
+ bool success = frame->LoadPageLayoutDescrFile( fn.GetFullPath() );
+ if( !success )
+ {
+ wxString msg;
+ msg.Printf( _("Error when loading file <%s>"),
+ fn.GetFullPath().GetData() );
+ wxMessageBox( msg );
+ }
+ else
+ {
+ descrLoaded = true;
+ frame->OnNewPageLayout();
+ }
+ }
+ }
+
+ if( !descrLoaded )
+ {
+ WORKSHEET_LAYOUT::GetTheInstance().SetPageLayout();
+ frame->OnNewPageLayout();
+ }
+
+ return true;
+}
+#endif
diff --git a/pagelayout_editor/pl_editor.icns b/pagelayout_editor/pl_editor.icns
new file mode 100644
index 0000000..c84b0a1
--- /dev/null
+++ b/pagelayout_editor/pl_editor.icns
Binary files differ
diff --git a/pagelayout_editor/pl_editor.rc b/pagelayout_editor/pl_editor.rc
new file mode 100644
index 0000000..885f0e6
--- /dev/null
+++ b/pagelayout_editor/pl_editor.rc
@@ -0,0 +1,3 @@
+icon_pagelayout_editor ICON "../bitmaps_png/icons/icon_pagelayout_editor.ico"
+
+#include "wx/msw/wx.rc"
diff --git a/pagelayout_editor/pl_editor_config.cpp b/pagelayout_editor/pl_editor_config.cpp
new file mode 100644
index 0000000..d3cfca9
--- /dev/null
+++ b/pagelayout_editor/pl_editor_config.cpp
@@ -0,0 +1,104 @@
+/**
+ * @file pl_editor_config.cpp
+ * @brief page layout editor configuration.
+*/
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <common.h>
+#include <class_drawpanel.h>
+#include <gestfich.h>
+#include <config_params.h>
+
+#include <pl_editor_frame.h>
+#include <hotkeys.h>
+#include <dialog_hotkeys_editor.h>
+#include <pl_editor_id.h>
+
+#define GROUP wxT("/pl_editor")
+
+
+void PL_EDITOR_FRAME::Process_Config( wxCommandEvent& event )
+{
+ int id = event.GetId();
+
+ switch( id )
+ {
+ case ID_MENU_SWITCH_BGCOLOR:
+ if( GetDrawBgColor() == WHITE )
+ SetDrawBgColor( BLACK );
+ else
+ SetDrawBgColor( WHITE );
+
+ GetMenuBar()->SetLabel( ID_MENU_SWITCH_BGCOLOR,
+ GetDrawBgColor() == WHITE ?
+ _( "&Background Black" ) :
+ _( "&Background White" ) );
+ m_canvas->Refresh();
+ break;
+
+ case ID_MENU_GRID_ONOFF:
+ SetGridVisibility( ! IsGridVisible() );
+ GetMenuBar()->SetLabel( ID_MENU_GRID_ONOFF,
+ IsGridVisible() ? _( "Hide &Grid" ) :
+ _( "Show &Grid" ) );
+ m_canvas->Refresh();
+ break;
+
+ // Standard basic hotkey IDs
+ case ID_PREFERENCES_HOTKEY_SHOW_EDITOR:
+ InstallHotkeyFrame( this, PlEditorHokeysDescr );
+ break;
+
+ case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
+ ExportHotkeyConfigToFile( PlEditorHokeysDescr, wxT( "pl_editor" ) );
+ break;
+
+ case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
+ ImportHotkeyConfigFromFile( PlEditorHokeysDescr, wxT( "pl_editor" ) );
+ break;
+
+ case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST:
+ DisplayHotkeyList( this, PlEditorHokeysDescr );
+ break;
+
+ default:
+ wxMessageBox( wxT( "PL_EDITOR_FRAME::Process_Config error" ) );
+ break;
+ }
+}
+
+
+PARAM_CFG_ARRAY& PL_EDITOR_FRAME::GetConfigurationSettings()
+{
+ if( !m_configSettings.empty() )
+ return m_configSettings;
+
+ m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Units" ),
+ (int*) &g_UserUnit, 0, 0, 1 ) );
+
+ return m_configSettings;
+}
diff --git a/pagelayout_editor/pl_editor_doc.icns b/pagelayout_editor/pl_editor_doc.icns
new file mode 100644
index 0000000..6760a09
--- /dev/null
+++ b/pagelayout_editor/pl_editor_doc.icns
Binary files differ
diff --git a/pagelayout_editor/pl_editor_frame.cpp b/pagelayout_editor/pl_editor_frame.cpp
new file mode 100644
index 0000000..8f1ac4f
--- /dev/null
+++ b/pagelayout_editor/pl_editor_frame.cpp
@@ -0,0 +1,786 @@
+/**
+ * @file pl_editor_frame.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <kiface_i.h>
+#include <class_drawpanel.h>
+#include <build_version.h>
+#include <macros.h>
+#include <base_units.h>
+#include <msgpanel.h>
+
+#include <pl_editor_frame.h>
+#include <pl_editor_id.h>
+#include <hotkeys.h>
+#include <class_pl_editor_screen.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <design_tree_frame.h>
+#include <properties_frame.h>
+
+#include <wildcards_and_files_ext.h>
+#include <confirm.h>
+
+/*************************/
+/* class PL_EDITOR_FRAME */
+/*************************/
+
+PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
+ EDA_DRAW_FRAME( aKiway, aParent, FRAME_PL_EDITOR, wxT( "PlEditorFrame" ),
+ wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME )
+{
+ m_zoomLevelCoeff = 290.0; // Adjusted to roughly displays zoom level = 1
+ // when the screen shows a 1:1 image
+ // obviously depends on the monitor,
+ // but this is an acceptable value
+
+ m_showAxis = false; // true to show X and Y axis on screen
+ m_showGridAxis = true;
+ m_showBorderAndTitleBlock = true; // true for reference drawings.
+ m_hotkeysDescrList = PlEditorHokeysDescr;
+ m_originSelectChoice = 0;
+ SetDrawBgColor( WHITE ); // default value, user option (WHITE/BLACK)
+ SetShowPageLimits( true );
+
+ m_designTreeWidth = 150;
+ m_propertiesFrameWidth = 200;
+
+ if( m_canvas )
+ m_canvas->SetEnableBlockCommands( false );
+
+ // Give an icon
+ wxIcon icon;
+ icon.CopyFromBitmap( KiBitmap( icon_pagelayout_editor_xpm ) );
+ SetIcon( icon );
+ wxSize pageSizeIU = GetPageLayout().GetPageSettings().GetSizeIU();
+ SetScreen( new PL_EDITOR_SCREEN( pageSizeIU ) );
+
+ LoadSettings( config() );
+ SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
+
+ if( ! GetScreen()->GridExists( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 ) )
+ m_LastGridSizeId = ID_POPUP_GRID_LEVEL_1MM - ID_POPUP_GRID_LEVEL_1000;
+
+ GetScreen()->SetGrid( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 );
+
+ ReCreateMenuBar();
+ ReCreateHToolbar();
+ ReCreateOptToolbar();
+
+ wxWindow* stsbar = GetStatusBar();
+ int dims[] = {
+
+ // balance of status bar on far left is set to a default or whatever is left over.
+ -1,
+
+ // When using GetTextSize() remember the width of '1' is not the same
+ // as the width of '0' unless the font is fixed width, and it usually won't be.
+
+ // zoom:
+ GetTextSize( wxT( "Z 762000" ), stsbar ).x + 10,
+
+ // cursor coords
+ GetTextSize( wxT( "X 0234.567 Y 0234.567" ), stsbar ).x + 10,
+
+ // delta distances
+ GetTextSize( wxT( "dx 0234.567 dx 0234.567" ), stsbar ).x + 10,
+
+ // Coord origin (use the bigger message)
+ GetTextSize( _( "coord origin: Right Bottom page corner" ), stsbar ).x + 10,
+
+ // units display, Inches is bigger than mm
+ GetTextSize( _( "Inches" ), stsbar ).x + 10
+ };
+
+ SetStatusWidths( DIM( dims ), dims );
+
+
+ m_auimgr.SetManagedWindow( this );
+
+ EDA_PANEINFO horiz;
+ horiz.HorizontalToolbarPane();
+
+ EDA_PANEINFO vert;
+ vert.VerticalToolbarPane();
+
+ EDA_PANEINFO mesg;
+ mesg.MessageToolbarPane();
+
+ m_propertiesPagelayout = new PROPERTIES_FRAME( this );
+ EDA_PANEINFO props;
+ props.LayersToolbarPane();
+ props.MinSize( m_propertiesPagelayout->GetMinSize() );
+ props.BestSize( m_propertiesFrameWidth, -1 );
+ props.Caption( _( "Properties" ) );
+
+ m_treePagelayout = new DESIGN_TREE_FRAME( this );
+ EDA_PANEINFO tree;
+ tree.LayersToolbarPane();
+ tree.MinSize( m_treePagelayout->GetMinSize() );
+ tree.BestSize( m_designTreeWidth, -1 );
+ tree.Caption( _( "Design" ) );
+
+ if( m_mainToolBar )
+ m_auimgr.AddPane( m_mainToolBar,
+ wxAuiPaneInfo( horiz ).Name( wxT( "m_mainToolBar" ) ).Top().Row( 0 ) );
+
+ if( m_drawToolBar )
+ m_auimgr.AddPane( m_drawToolBar,
+ wxAuiPaneInfo( vert ).Name( wxT( "m_drawToolBar" ) ).Right().Row( 1 ) );
+
+ m_auimgr.AddPane( m_propertiesPagelayout,
+ props.Name( wxT( "m_propertiesPagelayout" ) ).Right().Layer( 1 ) );
+
+ m_auimgr.AddPane( m_treePagelayout,
+ tree.Name( wxT( "m_treePagelayout" ) ).Left().Layer( 0 ) );
+
+ if( m_optionsToolBar )
+ m_auimgr.AddPane( m_optionsToolBar,
+ wxAuiPaneInfo( vert ).Name( wxT( "m_optionsToolBar" ) ).Left() );
+
+ if( m_canvas )
+ m_auimgr.AddPane( m_canvas,
+ wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane().Layer( 5 ) );
+
+ if( m_messagePanel )
+ m_auimgr.AddPane( m_messagePanel,
+ wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer( 10 ) );
+
+ m_auimgr.Update();
+
+ // Initialize the current page layout
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+#if 0 //start with empty layout
+ pglayout.AllowVoidList( true );
+ pglayout.ClearList();
+#else // start with the default Kicad layout
+ pglayout.SetPageLayout();
+#endif
+ OnNewPageLayout();
+}
+
+
+PL_EDITOR_FRAME::~PL_EDITOR_FRAME()
+{
+}
+
+
+bool PL_EDITOR_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl )
+{
+ wxString fn = aFileSet[0];
+
+ if( !LoadPageLayoutDescrFile( fn ) )
+ {
+ wxString msg = wxString::Format(
+ _( "Error when loading file '%s'" ),
+ GetChars( fn )
+ );
+
+ wxMessageBox( msg );
+ return false;
+ }
+ else
+ {
+ OnNewPageLayout();
+ return true;
+ }
+}
+
+
+void PL_EDITOR_FRAME::OnCloseWindow( wxCloseEvent& Event )
+{
+ if( GetScreen()->IsModify() )
+ {
+ wxString msg;
+ wxString filename = GetCurrFileName();
+ if( filename.IsEmpty() )
+ msg = _("Save changes in a new file before closing?");
+ else
+ msg.Printf( _("Save the changes in\n<%s>\nbefore closing?"),
+ GetChars( filename ) );
+
+ int ii = DisplayExitDialog( this, msg );
+
+ switch( ii )
+ {
+ case wxID_CANCEL:
+ Event.Veto();
+ return;
+
+ case wxID_NO:
+ break;
+
+ case wxID_OK:
+ case wxID_YES:
+ {
+ if( filename.IsEmpty() )
+ {
+ wxFileDialog openFileDialog(this, _("Create file"), wxEmptyString,
+ wxEmptyString, PageLayoutDescrFileWildcard, wxFD_SAVE);
+
+ if (openFileDialog.ShowModal() == wxID_CANCEL)
+ return;
+
+ filename = openFileDialog.GetPath();
+ }
+
+ if( !SavePageLayoutDescrFile( filename ) )
+ {
+ wxString msg;
+ msg.Printf( _("Unable to create <%s>"), GetChars( filename ) );
+ wxMessageBox( msg );
+ }
+ }
+ break;
+ }
+ }
+
+ // do not show the window because we do not want any paint event
+ Show( false );
+
+ // was: Pgm().SaveCurrentSetupValues( m_configSettings );
+ wxConfigSaveSetups( Kiface().KifaceSettings(), m_configSettings );
+
+ // On Linux, m_propertiesPagelayout must be destroyed
+ // before deleting the main frame to avoid a crash when closing
+ m_propertiesPagelayout->Destroy();
+ Destroy();
+}
+
+
+double PL_EDITOR_FRAME::BestZoom()
+{
+ int dx, dy;
+ wxSize size;
+
+ dx = GetPageLayout().GetPageSettings().GetWidthIU();
+ dy = GetPageLayout().GetPageSettings().GetHeightIU();
+
+ size = m_canvas->GetClientSize();
+
+ // Reserve no margin because best zoom shows the full page
+ // and margins are already included in function that draws the sheet refernces
+ double margin_scale_factor = 1.0;
+ double zx =(double) dx / ( margin_scale_factor * (double)size.x );
+ double zy = (double) dy / ( margin_scale_factor * (double)size.y );
+
+ double bestzoom = std::max( zx, zy );
+
+ SetScrollCenterPosition( wxPoint( dx / 2, dy / 2 ) );
+
+ return bestzoom;
+}
+
+static const wxChar designTreeWidthKey[] = wxT("DesignTreeWidth");
+static const wxChar propertiesFrameWidthKey[] = wxT("PropertiesFrameWidth");
+static const wxChar cornerOriginChoiceKey[] = wxT("CornerOriginChoice");
+static const wxChar blackBgColorKey[] = wxT( "BlackBgColor" );
+
+void PL_EDITOR_FRAME::LoadSettings( wxConfigBase* aCfg )
+{
+ EDA_DRAW_FRAME::LoadSettings( aCfg );
+
+ aCfg->Read( designTreeWidthKey, &m_designTreeWidth, 100);
+ aCfg->Read( propertiesFrameWidthKey, &m_propertiesFrameWidth, 150);
+ aCfg->Read( cornerOriginChoiceKey, &m_originSelectChoice );
+ bool tmp;
+ aCfg->Read( blackBgColorKey, &tmp, false );
+ SetDrawBgColor( tmp ? BLACK : WHITE );
+}
+
+
+void PL_EDITOR_FRAME::SaveSettings( wxConfigBase* aCfg )
+{
+ EDA_DRAW_FRAME::SaveSettings( aCfg );
+
+ m_designTreeWidth = m_treePagelayout->GetSize().x;
+ m_propertiesFrameWidth = m_propertiesPagelayout->GetSize().x;
+
+ aCfg->Write( designTreeWidthKey, m_designTreeWidth);
+ aCfg->Write( propertiesFrameWidthKey, m_propertiesFrameWidth);
+ aCfg->Write( cornerOriginChoiceKey, m_originSelectChoice );
+ aCfg->Write( blackBgColorKey, GetDrawBgColor() == BLACK );
+
+ // was: wxGetApp().SaveCurrentSetupValues( GetConfigurationSettings() );
+ wxConfigSaveSetups( aCfg, GetConfigurationSettings() );
+}
+
+
+/*
+ * Function UpdateTitleAndInfo
+ * displays the filename (if exists) of the current page layout descr file.
+ */
+void PL_EDITOR_FRAME::UpdateTitleAndInfo()
+{
+ wxString title;
+ title.Printf( wxT( "Pl_Editor %s [%s]" ), GetChars( GetBuildVersion() ),
+ GetChars( GetCurrFileName() ) );
+ SetTitle( title );
+}
+
+/* return the filename of the current layout descr file
+ */
+const wxString& PL_EDITOR_FRAME::GetCurrFileName() const
+{
+ return BASE_SCREEN::m_PageLayoutDescrFileName;
+}
+
+/* Stores the current layout descr file filename
+ */
+void PL_EDITOR_FRAME::SetCurrFileName( const wxString& aName )
+{
+ BASE_SCREEN::m_PageLayoutDescrFileName = aName;
+}
+
+void PL_EDITOR_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
+{
+ m_pageLayout.SetPageSettings( aPageSettings );
+
+ if( GetScreen() )
+ GetScreen()->InitDataPoints( aPageSettings.GetSizeIU() );
+}
+
+
+const PAGE_INFO& PL_EDITOR_FRAME::GetPageSettings() const
+{
+ return m_pageLayout.GetPageSettings();
+}
+
+
+const wxSize PL_EDITOR_FRAME::GetPageSizeIU() const
+{
+ // this function is only needed because EDA_DRAW_FRAME is not compiled
+ // with either -DPCBNEW or -DEESCHEMA, so the virtual is used to route
+ // into an application specific source file.
+ return m_pageLayout.GetPageSettings().GetSizeIU();
+}
+
+
+const TITLE_BLOCK& PL_EDITOR_FRAME::GetTitleBlock() const
+{
+ return GetPageLayout().GetTitleBlock();
+}
+
+
+void PL_EDITOR_FRAME::SetTitleBlock( const TITLE_BLOCK& aTitleBlock )
+{
+ m_pageLayout.SetTitleBlock( aTitleBlock );
+}
+
+
+/*
+ * Update the status bar information.
+ */
+void PL_EDITOR_FRAME::UpdateStatusBar()
+{
+ PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) GetScreen();
+
+ if( !screen )
+ return;
+
+ // Display Zoom level:
+ EDA_DRAW_FRAME::UpdateStatusBar();
+
+ // coodinate origin can be the paper Top Left corner,
+ // or each of 4 page corners
+ // We know the origin, and the orientation of axis
+ wxPoint originCoord;
+ int Xsign = 1;
+ int Ysign = 1;
+
+ WORKSHEET_DATAITEM dummy( WORKSHEET_DATAITEM::WS_SEGMENT );
+
+ switch( m_originSelectChoice )
+ {
+ default:
+ case 0: // Origin = paper Left Top corner
+ break;
+
+ case 1: // Origin = page Right Bottom corner
+ Xsign = -1;
+ Ysign = -1;
+ dummy.SetStart( 0, 0, RB_CORNER );
+ originCoord = dummy.GetStartPosUi();
+ break;
+
+ case 2: // Origin = page Left Bottom corner
+ Ysign = -1;
+ dummy.SetStart( 0, 0, LB_CORNER );
+ originCoord = dummy.GetStartPosUi();
+ break;
+
+ case 3: // Origin = page Right Top corner
+ Xsign = -1;
+ dummy.SetStart( 0, 0, RT_CORNER );
+ originCoord = dummy.GetStartPosUi();
+ break;
+
+ case 4: // Origin = page Left Top corner
+ dummy.SetStart( 0, 0, LT_CORNER );
+ originCoord = dummy.GetStartPosUi();
+ break;
+ }
+
+ SetGridOrigin( originCoord );
+
+ // Display absolute coordinates:
+ wxPoint coord = GetCrossHairPosition() - originCoord;
+ double dXpos = To_User_Unit( g_UserUnit, coord.x*Xsign );
+ double dYpos = To_User_Unit( g_UserUnit, coord.y*Ysign );
+
+ wxString pagesizeformatter = _( "Page size: width %.4g height %.4g" );
+ wxString absformatter = wxT( "X %.4g Y %.4g" );
+ wxString locformatter = wxT( "dx %.4g dy %.4g" );
+
+ switch( g_UserUnit )
+ {
+ case INCHES: // Should not be used in page layout editor
+ SetStatusText( _("inches"), 5 );
+ break;
+
+ case MILLIMETRES:
+ SetStatusText( _("mm"), 5 );
+ break;
+
+ case UNSCALED_UNITS:
+ SetStatusText( wxEmptyString, 5 );
+ break;
+
+ case DEGREES:
+ wxASSERT( false );
+ break;
+ }
+
+ wxString line;
+
+ // Display page size
+ #define milsTomm (25.4/1000)
+ DSIZE size = GetPageSettings().GetSizeMils();
+ size = size * milsTomm;
+ line.Printf( pagesizeformatter, size.x, size.y );
+ SetStatusText( line, 0 );
+
+ // Display abs coordinates
+ line.Printf( absformatter, dXpos, dYpos );
+ SetStatusText( line, 2 );
+
+ // Display relative coordinates:
+ int dx = GetCrossHairPosition().x - screen->m_O_Curseur.x;
+ int dy = GetCrossHairPosition().y - screen->m_O_Curseur.y;
+ dXpos = To_User_Unit( g_UserUnit, dx * Xsign );
+ dYpos = To_User_Unit( g_UserUnit, dy * Ysign );
+ line.Printf( locformatter, dXpos, dYpos );
+ SetStatusText( line, 3 );
+
+ // Display corner reference for coord origin
+ line.Printf( _("coord origin: %s"),
+ m_originSelectBox->GetString( m_originSelectChoice ). GetData() );
+ SetStatusText( line, 4 );
+
+ // Display units
+}
+
+void PL_EDITOR_FRAME::PrintPage( wxDC* aDC, LSET aPrintMasklayer,
+ bool aPrintMirrorMode, void * aData )
+{
+ GetScreen()-> m_ScreenNumber = GetPageNumberOption() ? 1 : 2;
+ DrawWorkSheet( aDC, GetScreen(), 0, IU_PER_MILS, wxEmptyString );
+}
+
+void PL_EDITOR_FRAME::RedrawActiveWindow( wxDC* aDC, bool aEraseBg )
+{
+
+ GetScreen()-> m_ScreenNumber = GetPageNumberOption() ? 1 : 2;
+
+ if( aEraseBg )
+ m_canvas->EraseScreen( aDC );
+
+ m_canvas->DrawBackGround( aDC );
+
+ const WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ WORKSHEET_DATAITEM* selecteditem = GetSelectedItem();
+
+ // the color to draw selected items
+ if( GetDrawBgColor() == WHITE )
+ WORKSHEET_DATAITEM::m_SelectedColor = DARKCYAN;
+ else
+ WORKSHEET_DATAITEM::m_SelectedColor = YELLOW;
+
+ for( unsigned ii = 0; ; ii++ )
+ {
+ WORKSHEET_DATAITEM* item = pglayout.GetItem( ii );
+
+ if( item == NULL )
+ break;
+
+ item->SetSelected( item == selecteditem );
+ }
+
+ DrawWorkSheet( aDC, GetScreen(), 0, IU_PER_MILS, GetCurrFileName() );
+
+#ifdef USE_WX_OVERLAY
+ if( IsShown() )
+ {
+ m_overlay.Reset();
+ wxDCOverlay overlaydc( m_overlay, (wxWindowDC*)aDC );
+ overlaydc.Clear();
+ }
+#endif
+
+ if( m_canvas->IsMouseCaptured() )
+ m_canvas->CallMouseCapture( aDC, wxDefaultPosition, false );
+
+ m_canvas->DrawCrossHair( aDC );
+
+ // Display the filename
+ UpdateTitleAndInfo();
+}
+
+void PL_EDITOR_FRAME::RebuildDesignTree()
+{
+ const WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ int rectId = 0;
+ int lineId = 0;
+ int textId = 0;
+ int polyId = 0;
+ int bitmapId = 0;
+
+ for( unsigned ii = 0; ii < pglayout.GetCount(); ii++ )
+ {
+ WORKSHEET_DATAITEM* item = pglayout.GetItem( ii );
+ switch( item->GetType() )
+ {
+ case WORKSHEET_DATAITEM::WS_TEXT:
+ item->m_Name = wxString::Format( wxT("text%d:%s"), ++textId,
+ GetChars(item->GetClassName()) );
+ break;
+
+ case WORKSHEET_DATAITEM:: WS_SEGMENT:
+ item->m_Name = wxString::Format( wxT("segm%d:%s"), ++lineId,
+ GetChars(item->GetClassName()) );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_RECT:
+ item->m_Name = wxString::Format( wxT("rect%d:%s"), ++rectId,
+ GetChars(item->GetClassName()) );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
+ item->m_Name = wxString::Format( wxT("poly%d:%s"), ++polyId,
+ GetChars(item->GetClassName()) );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_BITMAP:
+ item->m_Name = wxString::Format( wxT("bm%d:%s"), ++bitmapId,
+ GetChars(item->GetClassName()) );
+ break;
+ }
+ }
+
+ m_treePagelayout->ReCreateDesignTree();
+}
+
+/* Add a new item to the page layout item list.
+ * aType = WS_TEXT, WS_SEGMENT, WS_RECT, WS_POLYPOLYGON
+ */
+WORKSHEET_DATAITEM * PL_EDITOR_FRAME::AddPageLayoutItem( int aType, int aIdx )
+{
+ WORKSHEET_DATAITEM * item = NULL;
+
+ switch( aType )
+ {
+ case WORKSHEET_DATAITEM::WS_TEXT:
+ item = new WORKSHEET_DATAITEM_TEXT( wxT("Text") );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_SEGMENT:
+ item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_SEGMENT );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_RECT:
+ item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_RECT );
+ break;
+
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
+ item = new WORKSHEET_DATAITEM_POLYPOLYGON();
+ break;
+
+ case WORKSHEET_DATAITEM::WS_BITMAP:
+ {
+ wxFileDialog fileDlg( this, _( "Choose Image" ), wxEmptyString, wxEmptyString,
+ _( "Image Files " ) + wxImage::GetImageExtWildcard(),
+ wxFD_OPEN );
+
+ if( fileDlg.ShowModal() != wxID_OK )
+ return NULL;
+
+ wxString fullFilename = fileDlg.GetPath();
+
+ if( !wxFileExists( fullFilename ) )
+ {
+ wxMessageBox( _( "Couldn't load image from <%s>" ), GetChars( fullFilename ) );
+ break;
+ }
+ BITMAP_BASE* image = new BITMAP_BASE();
+
+ if( !image->ReadImageFile( fullFilename ) )
+ {
+ wxMessageBox( _( "Couldn't load image from <%s>" ),
+ GetChars( fullFilename ) );
+ delete image;
+ break;
+ }
+ item = new WORKSHEET_DATAITEM_BITMAP( image );
+ }
+ break;
+ }
+
+ if( item == NULL )
+ return NULL;
+
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ pglayout.Insert( item, aIdx );
+ RebuildDesignTree();
+
+ return item;
+}
+
+/* returns the current selected item, or NULL
+ */
+WORKSHEET_DATAITEM * PL_EDITOR_FRAME::GetSelectedItem()
+{
+ WORKSHEET_DATAITEM* item = m_treePagelayout->GetPageLayoutSelectedItem();
+ return item;
+}
+
+/* return the page layout item found at position aPosition
+ * aPosition = the position (in user units) of the reference point
+ */
+WORKSHEET_DATAITEM* PL_EDITOR_FRAME::Locate( const wxPoint& aPosition )
+{
+ const PAGE_INFO& pageInfo = GetPageSettings();
+ TITLE_BLOCK t_block = GetTitleBlock();
+ EDA_COLOR_T color = RED; // Needed, not used
+ PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) GetScreen();
+
+ screen-> m_ScreenNumber = GetPageNumberOption() ? 1 : 2;
+
+ WS_DRAW_ITEM_LIST drawList;
+ drawList.SetPenSize( 0 );
+ drawList.SetMilsToIUfactor( IU_PER_MILS );
+ drawList.SetSheetNumber( screen->m_ScreenNumber );
+ drawList.SetSheetCount( screen->m_NumberOfScreens );
+ drawList.SetFileName( GetCurrFileName() );
+ // GetScreenDesc() returns a temporary string. Store it to avoid issues.
+ wxString descr = GetScreenDesc();
+ drawList.SetSheetName( descr );
+
+ drawList.BuildWorkSheetGraphicList( pageInfo, t_block, color, color );
+
+ // locate items.
+ // We do not use here the COLLECTOR classes in use in pcbnew and eeschema
+ // because the locate requirements are very basic.
+ std::vector <WS_DRAW_ITEM_BASE*> list;
+ drawList.Locate( list, aPosition );
+
+ if( list.size() == 0 )
+ return NULL;
+
+ WS_DRAW_ITEM_BASE* drawitem = list[0];
+
+ // Choose item in list if more than 1 item
+ if( list.size() > 1 )
+ {
+ wxArrayString choices;
+ wxString text;
+ wxPoint cursPos = GetCrossHairPosition();
+
+ for( unsigned ii = 0; ii < list.size(); ++ii )
+ {
+ wxString text;
+ drawitem = list[ii];
+ text = drawitem->GetParent()->m_Name;
+
+ if( (drawitem->m_Flags & (LOCATE_STARTPOINT|LOCATE_ENDPOINT))
+ == (LOCATE_STARTPOINT|LOCATE_ENDPOINT) )
+ text << wxT(" ") << _("(start or end point)");
+ else
+ {
+ if( (drawitem->m_Flags & LOCATE_STARTPOINT) )
+ text << wxT(" ") << _("(start point)");
+
+ if( (drawitem->m_Flags & LOCATE_ENDPOINT) )
+ text << wxT(" ") << _("(end point)");
+ }
+
+ if( ! drawitem->GetParent()->m_Info.IsEmpty() )
+ text << wxT(" \"") << drawitem->GetParent()->m_Info << wxT("\"");
+
+ choices.Add( text );
+ }
+ int selection = wxGetSingleChoiceIndex ( wxEmptyString,
+ _( "Selection Clarification" ),
+ choices, this );
+ if( selection < 0 )
+ return NULL;
+
+ SetCrossHairPosition( cursPos );
+ m_canvas->MoveCursorToCrossHair();
+ drawitem = list[selection];
+ }
+
+ WORKSHEET_DATAITEM* item = drawitem->GetParent();
+ item->ClearFlags(LOCATE_STARTPOINT|LOCATE_ENDPOINT);
+
+ if( (drawitem->m_Flags & LOCATE_STARTPOINT) )
+ item->SetFlags( LOCATE_STARTPOINT );
+
+ if( (drawitem->m_Flags & LOCATE_ENDPOINT) )
+ item->SetFlags( LOCATE_ENDPOINT );
+
+ return item;
+}
+
+/* Must be called to initialize parameters when a new page layout
+ * description is loaded
+ */
+void PL_EDITOR_FRAME::OnNewPageLayout()
+{
+ GetScreen()->ClearUndoRedoList();
+ GetScreen()->ClrModify();
+ m_propertiesPagelayout->CopyPrmsFromGeneralToPanel();
+ RebuildDesignTree();
+ Zoom_Automatique( false );
+ m_canvas->Refresh();
+}
+
+
+const wxString PL_EDITOR_FRAME::GetZoomLevelIndicator() const
+{
+ return EDA_DRAW_FRAME::GetZoomLevelIndicator();
+}
diff --git a/pagelayout_editor/pl_editor_frame.h b/pagelayout_editor/pl_editor_frame.h
new file mode 100644
index 0000000..ba3b7ae
--- /dev/null
+++ b/pagelayout_editor/pl_editor_frame.h
@@ -0,0 +1,374 @@
+/**
+ * @file pl_editor_frame.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _PL_EDITOR_FRAME_H
+#define _PL_EDITOR_FRAME_H
+
+
+#include <config_params.h>
+#include <draw_frame.h>
+#include <class_drawpanel.h>
+#include <class_pl_editor_screen.h>
+#include <class_pl_editor_layout.h>
+
+class PROPERTIES_FRAME;
+class DESIGN_TREE_FRAME;
+class WORKSHEET_DATAITEM;
+
+
+/**
+ * Class PL_EDITOR_FRAME
+ * is the main window used in the page layout editor.
+ */
+#define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" )
+
+class PL_EDITOR_FRAME : public EDA_DRAW_FRAME
+{
+ PL_EDITOR_LAYOUT m_pageLayout;
+
+ int m_designTreeWidth; // the last width (in pixels) of m_treePagelayout
+ int m_propertiesFrameWidth; // the last width (in pixels) of m_propertiesPagelayout
+
+ wxChoice* m_originSelectBox; // Corner origin choice for coordinates
+ int m_originSelectChoice; // the last choice for m_originSelectBox
+ wxChoice* m_pageSelectBox; // The page number sel'ector (page 1 or other pages
+ // usefull when there are some items which are
+ // only on page 1, not on page 1
+
+ wxPoint m_grid_origin;
+
+protected:
+ /// The last filename chosen to be proposed to the user
+ wxString m_lastFileName;
+ DESIGN_TREE_FRAME* m_treePagelayout;
+ PROPERTIES_FRAME* m_propertiesPagelayout;
+
+private:
+ // list of PARAM_CFG_xxx to read/write parameters saved in config
+ PARAM_CFG_ARRAY m_configSettings;
+
+public:
+ PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent );
+ ~PL_EDITOR_FRAME();
+
+ bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl ); // overload KIWAY_PLAYER
+
+ /**
+ * Function LoadPageLayoutDescrFile
+ * Loads a .kicad_wks page layout descr file
+ * @param aFullFileName = the filename.
+ */
+ bool LoadPageLayoutDescrFile( const wxString& aFullFileName );
+
+ /**
+ * Function SavePageLayoutDescrFile
+ * Save the current layout in a .kicad_wks page layout descr file
+ * @param aFullFileName = the filename.
+ */
+ bool SavePageLayoutDescrFile( const wxString& aFullFileName );
+
+ /**
+ * Function InsertPageLayoutDescrFile
+ * Loads a .kicad_wks page layout descr file, and add items
+ * to the current layout list
+ * @param aFullFileName = the filename.
+ */
+ bool InsertPageLayoutDescrFile( const wxString& aFullFileName );
+
+ void OnCloseWindow( wxCloseEvent& Event );
+
+ // Virtual basic functions:
+ void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+ void ReCreateHToolbar();
+
+ void SetPageSettings(const PAGE_INFO&);
+ const PAGE_INFO& GetPageSettings () const; // overload EDA_DRAW_FRAME
+ const wxSize GetPageSizeIU() const; // overload EDA_DRAW_FRAME
+
+ /**
+ * Function GetZoomLevelIndicator
+ * returns a human readable value which can be displayed as zoom
+ * level indicator in dialogs.
+ * Virtual from the base class
+ */
+ const wxString GetZoomLevelIndicator() const;
+
+ PL_EDITOR_SCREEN* GetScreen() const // overload EDA_DRAW_FRAME
+ {
+ return (PL_EDITOR_SCREEN*) EDA_DRAW_FRAME::GetScreen();
+ }
+
+ const wxPoint& GetAuxOrigin() const // overload EDA_DRAW_FRAME
+ {
+ static wxPoint dummy; // ( 0,0 );
+ return dummy;
+ }
+ void SetAuxOrigin( const wxPoint& aPosition ) {} // overload EDA_DRAW_FRAME
+
+ const wxPoint& GetGridOrigin() const // overload EDA_DRAW_FRAME
+ {
+ return m_grid_origin;
+ }
+ void SetGridOrigin( const wxPoint& aPoint ) // overload EDA_DRAW_FRAME
+ {
+ m_grid_origin = aPoint;
+ }
+
+ const TITLE_BLOCK& GetTitleBlock() const; // overload EDA_DRAW_FRAME
+ void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ); // overload EDA_DRAW_FRAME
+
+ void UpdateStatusBar(); // overload EDA_DRAW_FRAME
+
+ /**
+ * Must be called to initialize parameters when a new page layout
+ * description is loaded
+ */
+ void OnNewPageLayout();
+
+ /**
+ * creates or updates the right vertical toolbar.
+ * @note This is currently not used.
+ */
+ void ReCreateVToolbar();
+
+ /**
+ * Create or update the left vertical toolbar (option toolbar
+ * @note This is currently not used.
+ */
+ void ReCreateOptToolbar();
+
+ void ReCreateMenuBar();
+ void OnLeftClick( wxDC* aDC, const wxPoint& aMousePos );
+ void OnLeftDClick( wxDC* aDC, const wxPoint& aMousePos );
+ bool OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
+ double BestZoom();
+
+ // Events created by clicking on the design tree list:
+ void OnTreeSelection( wxTreeEvent& event );
+ void OnTreeMiddleClick( wxTreeEvent& event );
+ void OnTreeRightClick( wxTreeEvent& event );
+
+ const PL_EDITOR_LAYOUT& GetPageLayout() const { return m_pageLayout; }
+
+ /**
+ * Page layout editor can show the title block using a page number
+ * 1 or an other number.
+ * This is because some items can be shown (or not) only on page 1
+ * (a feature which look like word processing option
+ * "page 1 differs from other pages".
+ * @return true if the page 1 is selected, and false if not
+ */
+ bool GetPageNumberOption() const
+ {
+ return m_pageSelectBox->GetSelection() == 0;
+ }
+
+ /**
+ * Displays the short filename (if exists) loaded file
+ * on the caption of the main window
+ */
+ void UpdateTitleAndInfo();
+
+ /**
+ * Populates the applicatios settings list.
+ * (list of parameters that must be saved in project parameters)
+ * Currently, only the settings that are needed at start up by the main window are
+ * defined here. There are other locally used settings scattered throughout the
+ * source code (mainly in dialogs). If you need to define a configuration
+ * setting that need to be loaded at run time, this is the place to define it.
+ */
+ PARAM_CFG_ARRAY& GetConfigurationSettings( void );
+
+ void LoadSettings( wxConfigBase* aCfg ); // override virtual
+
+ void SaveSettings( wxConfigBase* aCfg ); // override virtual
+
+ void Process_Special_Functions( wxCommandEvent& event );
+ void OnSelectOptionToolbar( wxCommandEvent& event );
+
+ /**
+ * called when the user select one of the 4 page corner as corner
+ * reference (or the left top paper corner)
+ */
+ void OnSelectCoordOriginCorner( wxCommandEvent& event );
+
+ /**
+ * Toggle the display mode between the normal mode and the editor mode:
+ * In normal mode, title block texts are shown like they will be
+ * shown in other kicad applications: the format symbols in texts
+ * are replaced by the actual text.
+ * In editor mode, the format symbols in texts are not replaced
+ * by the actual text, and therefore format symbols are displayed.
+ */
+ void OnSelectTitleBlockDisplayMode( wxCommandEvent& event );
+
+ void OnUpdateTitleBlockDisplayNormalMode( wxUpdateUIEvent& event );
+ void OnUpdateTitleBlockDisplaySpecialMode( wxUpdateUIEvent& event );
+
+ /**
+ * Function OnQuit
+ * called on request of application quit
+ */
+ void OnQuit( wxCommandEvent& event );
+
+ ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
+ EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+
+ /**
+ * Function OnHotKey.
+ * ** Commands are case insensitive **
+ * Some commands are relatives to the item under the mouse cursor
+ * @param aDC = current device context
+ * @param aHotkeyCode = hotkey code (ascii or wxWidget code for special keys)
+ * @param aPosition The cursor position in logical (drawing) units.
+ * @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor
+ */
+ bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+
+ void Process_Settings( wxCommandEvent& event );
+ void Process_Config( wxCommandEvent& event );
+
+ /**
+ * Function ToPlotter
+ * Open a dialog frame to create plot and drill files
+ * relative to the current board
+ */
+ void ToPlotter( wxCommandEvent& event );
+
+ /**
+ * Function ToPrinter
+ * Open a dialog frame to print layers
+ */
+ void ToPrinter( wxCommandEvent& event );
+
+ void Files_io( wxCommandEvent& event );
+ bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+
+ /** Virtual function PrintPage
+ * used to print a page
+ * @param aDC = wxDC given by the calling print function
+ * @param aPrintMasklayer = a 32 bits mask: bit n = 1 -> layer n is printed
+ * @param aPrintMirrorMode = not used here (Set when printing in mirror mode)
+ * @param aData = a pointer on an auxiliary data (not always used, NULL if not used)
+ */
+ virtual void PrintPage( wxDC* aDC, LSET aPrintMasklayer,
+ bool aPrintMirrorMode, void * aData );
+
+ void OnFileHistory( wxCommandEvent& event );
+
+ /**
+ * @return the filename of the current layout descr file
+ * If this is the default (no loaded file) returns a emtpy name
+ * or a new design.
+ */
+ const wxString& GetCurrFileName() const;
+
+ /**
+ * Stores the current layout descr file filename
+ */
+ void SetCurrFileName( const wxString& aName );
+
+ /**
+ * Function RebuildDesignTree
+ * Re creates the design graphic tree list items,
+ * and ensures each item has an unique name
+ */
+ void RebuildDesignTree();
+
+ /**
+ * Function AddPageLayoutItem
+ * Add a new item to the page layout item list.
+ * @param aType = the type of item:
+ * WS_TEXT, WS_SEGMENT, WS_RECT, WS_POLYPOLYGON
+ * @param aIdx = the position in list to insert the new item.
+ * @return a reference to the new item
+ */
+ WORKSHEET_DATAITEM * AddPageLayoutItem( int aType, int aIdx = -1 );
+
+ /**
+ * Function GetSelectedItem
+ * @return the current selected item, or NULL
+ */
+ WORKSHEET_DATAITEM * GetSelectedItem();
+
+ /**
+ * Function Locate
+ * @return the page layout item found at position aPosition
+ * @param aPosition = the position (in user units) of the reference point
+ */
+ WORKSHEET_DATAITEM *Locate( const wxPoint& aPosition );
+
+ /**
+ * Initialize a move item command
+ * @param aItem is the item to move
+ */
+ void MoveItem( WORKSHEET_DATAITEM* aItem );
+
+ /**
+ * Save in Undo list the layout, and place an item being moved.
+ * @param aItem is the item moved
+ */
+ void PlaceItem( WORKSHEET_DATAITEM* aItem );
+
+ /**
+ * Must be called after a change
+ * in order to set the "modify" flag of the current screen
+ */
+ void OnModify()
+ {
+ GetScreen()->SetModify();
+ }
+
+ /**
+ * Save a copy of the description (in a S expr string)
+ * for Undo/redo commands
+ */
+ void SaveCopyInUndoList();
+
+ /** Redo the last edition:
+ * - Place the current edited layout in undo list
+ * - Get the previous version of the current edited layput
+ */
+ void GetLayoutFromRedoList( wxCommandEvent& event );
+
+ /** Undo the last edition:
+ * - Place the current layout in Redo list
+ * - Get the previous version of the current edited layout
+ */
+ void GetLayoutFromUndoList( wxCommandEvent& event );
+
+ /**
+ * Remove the last command in Undo List.
+ * Used to clean the Undo stack after a cancel command
+ */
+ void RemoveLastCommandInUndoList();
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif /* _PL_EDITOR_FRAME_H */
diff --git a/pagelayout_editor/pl_editor_id.h b/pagelayout_editor/pl_editor_id.h
new file mode 100644
index 0000000..8c08a5a
--- /dev/null
+++ b/pagelayout_editor/pl_editor_id.h
@@ -0,0 +1,79 @@
+/**
+ * @file pl_editor_id.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _PL_EDITOR_ID_H_
+#define _PL_EDITOR_ID_H_
+
+#include <id.h>
+
+/**
+ * Command IDs for the printed circuit board editor.
+ *
+ * Please add IDs that are unique to the page layout editor (pl_editor) here and not in
+ * the global id.h file. This will prevent the entire project from being rebuilt when
+ * adding new commands to the page layout editor.
+ */
+
+enum pl_editor_ids
+{
+ ID_MAIN_MENUBAR = ID_END_LIST,
+
+ ID_PL_EDITOR_SHOW_SOURCE,
+ ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR,
+ ID_MENU_SWITCH_BGCOLOR,
+ ID_MENU_GRID_ONOFF,
+ ID_DESIGN_TREE_FRAME,
+
+ ID_SHOW_REAL_MODE,
+ ID_SHOW_PL_EDITOR_MODE,
+ ID_SELECT_COORDINATE_ORIGIN,
+ ID_LOAD_DEFAULT_PAGE_LAYOUT,
+ ID_SELECT_PAGE_NUMBER,
+
+ ID_APPEND_DESCR_FILE,
+
+ ID_POPUP_START_RANGE,
+ ID_POPUP_ITEM_DELETE,
+ ID_POPUP_DESIGN_TREE_ITEM_DELETE,
+ ID_POPUP_ITEM_ADD_LINE,
+ ID_POPUP_ITEM_ADD_RECT,
+ ID_POPUP_ITEM_ADD_TEXT,
+ ID_POPUP_ITEM_ADD_BITMAP,
+ ID_POPUP_ITEM_APPEND_PAGE_LAYOUT,
+ ID_POPUP_ITEM_MOVE,
+ ID_POPUP_ITEM_PLACE,
+ ID_POPUP_ITEM_MOVE_START_POINT,
+ ID_POPUP_ITEM_MOVE_END_POINT,
+ ID_POPUP_ITEM_PLACE_CANCEL,
+ ID_POPUP_ITEM_EDIT_BITMAP,
+ ID_POPUP_END_RANGE,
+
+ ID_PLEDITOR_END_LIST
+};
+
+#endif /* _PL_EDITOR_IDS_H_ */
diff --git a/pagelayout_editor/pl_editor_undo_redo.cpp b/pagelayout_editor/pl_editor_undo_redo.cpp
new file mode 100644
index 0000000..d1711e7
--- /dev/null
+++ b/pagelayout_editor/pl_editor_undo_redo.cpp
@@ -0,0 +1,161 @@
+/**
+ * @file pl_editor_undo_redo.cpp
+ * @brief page layout editor: undo and redo functions
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <class_drawpanel.h>
+#include <macros.h>
+#include <worksheet_shape_builder.h>
+
+#include <pl_editor_frame.h>
+
+/* Note: the Undo/redo commands use a "brute" method:
+ * the full page layout is converted to a S expression, and saved as string.
+ * When a previous version is needed, the old string is parsed,
+ * and the description replaces the current desc, just like reading a new file
+ *
+ * This is not optimal from the memory point of view, but:
+ * - the descriptions are never very long (max few thousand of bytes)
+ * - this is very easy to code
+ */
+
+// A helper class used in undo/redo commad:
+class PL_ITEM_LAYOUT: public EDA_ITEM
+{
+public:
+ wxString m_Layout;
+
+public:
+ PL_ITEM_LAYOUT() : EDA_ITEM( TYPE_PL_EDITOR_LAYOUT ) {}
+
+ // Required to keep compiler happy on debug builds.
+#if defined(DEBUG)
+ virtual void Show( int nestLevel, std::ostream& os ) const {}
+#endif
+
+ /** Get class name
+ * @return string "PL_ITEM_LAYOUT"
+ */
+ virtual wxString GetClass() const
+ {
+ return wxT( "PL_ITEM_LAYOUT" );
+ }
+};
+
+void PL_EDITOR_FRAME::SaveCopyInUndoList()
+{
+ PL_ITEM_LAYOUT* copyItem = new PL_ITEM_LAYOUT;
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ pglayout.SaveInString( copyItem->m_Layout );
+
+ PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
+ ITEM_PICKER wrapper( copyItem, UR_LIBEDIT );
+ lastcmd->PushItem(wrapper);
+ GetScreen()->PushCommandToUndoList( lastcmd );
+
+ // Clear redo list, because after new save there is no redo to do.
+ GetScreen()->ClearUndoORRedoList( GetScreen()->m_RedoList );
+}
+
+
+/* Redo the last edition:
+ * - Place the current edited layout in undo list
+ * - Get previous version of the current edited layput
+ */
+void PL_EDITOR_FRAME::GetLayoutFromRedoList( wxCommandEvent& event )
+{
+ if ( GetScreen()->GetRedoCommandCount() <= 0 )
+ return;
+
+ PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
+ PL_ITEM_LAYOUT* copyItem = new PL_ITEM_LAYOUT;
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ pglayout.SaveInString( copyItem->m_Layout );
+
+ ITEM_PICKER wrapper( copyItem, UR_LIBEDIT );
+
+ lastcmd->PushItem( wrapper );
+ GetScreen()->PushCommandToUndoList( lastcmd );
+
+ lastcmd = GetScreen()->PopCommandFromRedoList();
+
+ wrapper = lastcmd->PopItem();
+ copyItem = (PL_ITEM_LAYOUT*)wrapper.GetItem();
+ pglayout.SetPageLayout( TO_UTF8(copyItem->m_Layout) );
+ delete copyItem;
+
+ OnModify();
+ RebuildDesignTree();
+ m_canvas->Refresh();
+}
+
+
+/* Undo the last edition:
+ * - Place the current layout in Redo list
+ * - Get previous version of the current edited layout
+ */
+void PL_EDITOR_FRAME::GetLayoutFromUndoList( wxCommandEvent& event )
+{
+ if ( GetScreen()->GetUndoCommandCount() <= 0 )
+ return;
+
+ PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
+ PL_ITEM_LAYOUT* copyItem = new PL_ITEM_LAYOUT;
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ pglayout.SaveInString( copyItem->m_Layout );
+
+ ITEM_PICKER wrapper( copyItem, UR_LIBEDIT );
+ lastcmd->PushItem( wrapper );
+ GetScreen()->PushCommandToRedoList( lastcmd );
+
+ lastcmd = GetScreen()->PopCommandFromUndoList();
+
+ wrapper = lastcmd->PopItem();
+ copyItem = (PL_ITEM_LAYOUT*)wrapper.GetItem();
+ pglayout.SetPageLayout( TO_UTF8(copyItem->m_Layout) );
+ delete copyItem;
+
+ OnModify();
+ RebuildDesignTree();
+ m_canvas->Refresh();
+}
+
+/* Remove the last command in Undo List.
+ * Used to clean the uUndo stack after a cancel command
+ */
+void PL_EDITOR_FRAME::RemoveLastCommandInUndoList()
+{
+ if ( GetScreen()->GetUndoCommandCount() <= 0 )
+ return;
+
+ PICKED_ITEMS_LIST* lastcmd = GetScreen()->PopCommandFromUndoList();
+
+ ITEM_PICKER wrapper = lastcmd->PopItem();
+ PL_ITEM_LAYOUT* copyItem = (PL_ITEM_LAYOUT*)wrapper.GetItem();
+ delete copyItem;
+}
diff --git a/pagelayout_editor/properties_frame.cpp b/pagelayout_editor/properties_frame.cpp
new file mode 100644
index 0000000..71ab5db
--- /dev/null
+++ b/pagelayout_editor/properties_frame.cpp
@@ -0,0 +1,493 @@
+/**
+ * @file properties_frame.cpp
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+#include <wxstruct.h>
+#include <class_drawpanel.h>
+#include <worksheet_shape_builder.h>
+#include <class_worksheet_dataitem.h>
+#include <properties_frame.h>
+
+PROPERTIES_FRAME::PROPERTIES_FRAME( PL_EDITOR_FRAME* aParent ):
+ PANEL_PROPERTIES_BASE( aParent )
+{
+ m_parent = aParent;
+}
+
+
+PROPERTIES_FRAME::~PROPERTIES_FRAME()
+{
+}
+
+wxSize PROPERTIES_FRAME::GetMinSize() const
+{
+ return wxSize( 150, -1 );
+}
+
+
+// Data transfert from general properties to widgets
+void PROPERTIES_FRAME::CopyPrmsFromGeneralToPanel()
+{
+ wxString msg;
+
+ // Set default parameters
+ msg.Printf( wxT("%.3f"), WORKSHEET_DATAITEM::m_DefaultLineWidth );
+ m_textCtrlDefaultLineWidth->SetValue( msg );
+
+ msg.Printf( wxT("%.3f"), WORKSHEET_DATAITEM::m_DefaultTextSize.x );
+ m_textCtrlDefaultTextSizeX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), WORKSHEET_DATAITEM::m_DefaultTextSize.y );
+ m_textCtrlDefaultTextSizeY->SetValue( msg );
+
+ msg.Printf( wxT("%.3f"), WORKSHEET_DATAITEM::m_DefaultTextThickness );
+ m_textCtrlDefaultTextThickness->SetValue( msg );
+
+ // Set page margins values
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+ msg.Printf( wxT("%.3f"), pglayout.GetRightMargin() );
+ m_textCtrlRightMargin->SetValue( msg );
+ msg.Printf( wxT("%.3f"), pglayout.GetBottomMargin() );
+ m_textCtrlDefaultBottomMargin->SetValue( msg );
+
+ msg.Printf( wxT("%.3f"), pglayout.GetLeftMargin() );
+ m_textCtrlLeftMargin->SetValue( msg );
+ msg.Printf( wxT("%.3f"), pglayout.GetTopMargin() );
+ m_textCtrlTopMargin->SetValue( msg );
+}
+
+// Data transfert from widgets to general properties
+bool PROPERTIES_FRAME::CopyPrmsFromPanelToGeneral()
+{
+ double dtmp;
+ wxString msg;
+
+ // Import default parameters from widgets
+ msg = m_textCtrlDefaultLineWidth->GetValue();
+ msg.ToDouble( &dtmp );
+ WORKSHEET_DATAITEM::m_DefaultLineWidth = dtmp;
+
+ msg = m_textCtrlDefaultTextSizeX->GetValue();
+ msg.ToDouble( &dtmp );
+ WORKSHEET_DATAITEM::m_DefaultTextSize.x = dtmp;
+ msg = m_textCtrlDefaultTextSizeY->GetValue();
+ msg.ToDouble( &dtmp );
+ WORKSHEET_DATAITEM::m_DefaultTextSize.y = dtmp;
+
+ msg = m_textCtrlDefaultTextThickness->GetValue();
+ msg.ToDouble( &dtmp );
+ WORKSHEET_DATAITEM::m_DefaultTextThickness = dtmp;
+
+ // Get page margins values
+ WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance();
+
+ msg = m_textCtrlRightMargin->GetValue();
+ msg.ToDouble( &dtmp );
+ pglayout.SetRightMargin( dtmp );
+ msg = m_textCtrlDefaultBottomMargin->GetValue();
+ msg.ToDouble( &dtmp );
+ pglayout.SetBottomMargin( dtmp );
+
+ // cordinates of the left top corner are the left and top margins
+ msg = m_textCtrlLeftMargin->GetValue();
+ msg.ToDouble( &dtmp );
+ pglayout.SetLeftMargin( dtmp );
+ msg = m_textCtrlTopMargin->GetValue();
+ msg.ToDouble( &dtmp );
+ pglayout.SetTopMargin( dtmp );
+
+ return true;
+}
+
+// Data transfert from item to widgets in properties frame
+void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem )
+{
+ wxString msg;
+
+ // Set parameters common to all WORKSHEET_DATAITEM types
+ m_textCtrlType->SetValue( aItem->GetClassName() );
+ m_textCtrlComment->SetValue( aItem->m_Info );
+
+ switch( aItem->GetPage1Option() )
+ {
+ default:
+ case 0:
+ m_choicePageOpt->SetSelection( 0 );
+ break;
+
+ case 1:
+ m_choicePageOpt->SetSelection( 1 );
+ break;
+
+ case -1:
+ m_choicePageOpt->SetSelection( 2 );
+ break;
+ }
+
+ // Position/ start point
+ msg.Printf( wxT("%.3f"), aItem->m_Pos.m_Pos.x );
+ m_textCtrlPosX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), aItem->m_Pos.m_Pos.y );
+ m_textCtrlPosY->SetValue( msg );
+
+ switch( aItem->m_Pos.m_Anchor )
+ {
+ case RB_CORNER: // right bottom corner
+ m_comboBoxCornerPos->SetSelection( 2 ); break;
+ case RT_CORNER: // right top corner
+ m_comboBoxCornerPos->SetSelection( 0 ); break;
+ case LB_CORNER: // left bottom corner
+ m_comboBoxCornerPos->SetSelection( 3 ); break;
+ case LT_CORNER: // left top corner
+ m_comboBoxCornerPos->SetSelection( 1 ); break;
+ }
+
+ // End point
+ msg.Printf( wxT("%.3f"), aItem->m_End.m_Pos.x );
+ m_textCtrlEndX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), aItem->m_End.m_Pos.y );
+ m_textCtrlEndY->SetValue( msg );
+
+ switch( aItem->m_End.m_Anchor )
+ {
+ case RB_CORNER: // right bottom corner
+ m_comboBoxCornerEnd->SetSelection( 2 ); break;
+ case RT_CORNER: // right top corner
+ m_comboBoxCornerEnd->SetSelection( 0 ); break;
+ case LB_CORNER: // left bottom corner
+ m_comboBoxCornerEnd->SetSelection( 3 ); break;
+ case LT_CORNER: // left top corner
+ m_comboBoxCornerEnd->SetSelection( 1 ); break;
+ }
+
+ msg.Printf( wxT("%.3f"), aItem->m_LineWidth );
+ m_textCtrlThickness->SetValue( msg );
+
+ // Now, set prms more specific to WORKSHEET_DATAITEM types
+ // For a given type, disable widgets which are not relevant,
+ // and be sure widgets which are relevant are enabled
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_TEXT )
+ {
+ m_SizerTextOptions->Show(true);
+ m_SizerTextIncrementLabel->Show( true );
+
+ WORKSHEET_DATAITEM_TEXT* item = (WORKSHEET_DATAITEM_TEXT*) aItem;
+ item->m_FullText = item->m_TextBase;
+ // Replace our '\' 'n' sequence by the EOL char
+ item->ReplaceAntiSlashSequence();
+ m_textCtrlText->SetValue( item->m_FullText );
+
+ msg.Printf( wxT("%d"), item->m_IncrementLabel );
+ m_textCtrlTextIncrement->SetValue( msg );
+
+ // Rotation (poly and text)
+ msg.Printf( wxT("%.3f"), item->m_Orient );
+ m_textCtrlRotation->SetValue( msg );
+
+ // Constraints:
+ msg.Printf( wxT("%.3f"), item->m_BoundingBoxSize.x );
+ m_textCtrlConstraintX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), item->m_BoundingBoxSize.y );
+ m_textCtrlConstraintY->SetValue( msg );
+
+ // Font Options
+ m_checkBoxBold->SetValue( item->IsBold() );
+ m_checkBoxItalic->SetValue( item->IsItalic() );
+ switch( item->m_Hjustify )
+ {
+ case GR_TEXT_HJUSTIFY_LEFT: m_choiceHjustify->SetSelection( 0 ); break;
+ case GR_TEXT_HJUSTIFY_CENTER: m_choiceHjustify->SetSelection( 1 ); break;
+ case GR_TEXT_HJUSTIFY_RIGHT: m_choiceHjustify->SetSelection( 2 ); break;
+ }
+ switch( item->m_Vjustify )
+ {
+ case GR_TEXT_VJUSTIFY_TOP: m_choiceVjustify->SetSelection( 0 ); break;
+ case GR_TEXT_VJUSTIFY_CENTER: m_choiceVjustify->SetSelection( 1 ); break;
+ case GR_TEXT_VJUSTIFY_BOTTOM: m_choiceVjustify->SetSelection( 2 ); break;
+ }
+
+ // Text size
+ msg.Printf( wxT("%.3f"), item->m_TextSize.x );
+ m_textCtrlTextSizeX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), item->m_TextSize.y );
+ m_textCtrlTextSizeY->SetValue( msg );
+ }
+ else
+ {
+ m_SizerTextOptions->Show(false);
+ m_SizerTextIncrementLabel->Show(false);
+ }
+
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_POLYPOLYGON )
+ {
+ WORKSHEET_DATAITEM_POLYPOLYGON* item = (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem;
+ // Rotation (poly and text)
+ msg.Printf( wxT("%.3f"), item->m_Orient );
+ m_textCtrlRotation->SetValue( msg );
+ }
+
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_BITMAP )
+ {
+ WORKSHEET_DATAITEM_BITMAP* item = (WORKSHEET_DATAITEM_BITMAP*) aItem;
+ // select definition in PPI
+ msg.Printf( wxT("%d"), item->GetPPI() );
+ m_textCtrlBitmapPPI->SetValue( msg );
+ }
+
+ switch( aItem->GetType() )
+ {
+ case WORKSHEET_DATAITEM::WS_SEGMENT:
+ case WORKSHEET_DATAITEM::WS_RECT:
+ m_SizerBitmapPPI->Show( false );
+ m_SizerLineThickness->Show( true );
+ m_staticTextInfoThickness->Show( true );
+ m_SizerRotation->Show( false );
+ m_SizerEndPosition->Show(true);
+ break;
+
+ case WORKSHEET_DATAITEM::WS_TEXT:
+ m_SizerBitmapPPI->Show( false );
+ m_SizerLineThickness->Show( true );
+ m_staticTextInfoThickness->Show( true );
+ m_SizerRotation->Show( true );
+ m_SizerEndPosition->Show(false);
+ break;
+
+ case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
+ m_SizerBitmapPPI->Show( false );
+ m_SizerLineThickness->Show( true );
+ m_staticTextInfoThickness->Show( false ); // No defaut value for thickness
+ m_SizerRotation->Show( true );
+ m_SizerEndPosition->Show(false);
+ break;
+
+ case WORKSHEET_DATAITEM::WS_BITMAP:
+ m_SizerBitmapPPI->Show( true );
+ m_SizerLineThickness->Show( false );
+ m_SizerRotation->Show( false );
+ m_SizerEndPosition->Show(false);
+ break;
+ }
+
+ // Repeat parameters
+ msg.Printf( wxT("%d"), aItem->m_RepeatCount );
+ m_textCtrlRepeatCount->SetValue( msg );
+ msg.Printf( wxT("%.3f"), aItem->m_IncrementVector.x );
+ m_textCtrlStepX->SetValue( msg );
+ msg.Printf( wxT("%.3f"), aItem->m_IncrementVector.y );
+ m_textCtrlStepY->SetValue( msg );
+
+ // The number of widgets was modified
+ m_swItemProperties->Layout();
+ m_swItemProperties->Refresh();
+}
+
+// Event function called by clicking on the OK button
+void PROPERTIES_FRAME::OnAcceptPrms( wxCommandEvent& event )
+{
+ m_parent->SaveCopyInUndoList();
+
+ WORKSHEET_DATAITEM* item = m_parent->GetSelectedItem();
+ if( item )
+ {
+ CopyPrmsFromPanelToItem( item );
+ // Be sure what is displayed is waht is set for item
+ // (mainly, texts can be modified if they contain "\n")
+ CopyPrmsFromItemToPanel( item );
+ }
+
+ CopyPrmsFromPanelToGeneral();
+
+ m_parent->OnModify();
+ m_parent->GetCanvas()->Refresh();
+}
+
+void PROPERTIES_FRAME::OnSetDefaultValues( wxCommandEvent& event )
+{
+ WORKSHEET_DATAITEM::m_DefaultTextSize =
+ DSIZE( TB_DEFAULT_TEXTSIZE, TB_DEFAULT_TEXTSIZE );
+ // default thickness in mm
+ WORKSHEET_DATAITEM::m_DefaultLineWidth = 0.15;
+ WORKSHEET_DATAITEM::m_DefaultTextThickness = 0.15;
+
+ CopyPrmsFromGeneralToPanel();
+ m_parent->GetCanvas()->Refresh();
+}
+
+
+// Data transfert from properties frame to item parameters
+bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem )
+{
+ if( aItem == NULL )
+ return false;
+
+ double dtmp;
+ wxString msg;
+
+ // Import common parameters:
+ aItem->m_Info = m_textCtrlComment->GetValue();
+
+ switch( m_choicePageOpt->GetSelection() )
+ {
+ default:
+ case 0:
+ aItem->SetPage1Option( 0 );
+ break;
+
+ case 1:
+ aItem->SetPage1Option( 1 );
+ break;
+
+ case 2:
+ aItem->SetPage1Option( -1 );
+ break;
+ }
+
+ // Import thickness
+ msg = m_textCtrlThickness->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_LineWidth = dtmp;
+
+ // Import Start point
+ msg = m_textCtrlPosX->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_Pos.m_Pos.x = dtmp;
+
+ msg = m_textCtrlPosY->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_Pos.m_Pos.y = dtmp;
+
+ switch( m_comboBoxCornerPos->GetSelection() )
+ {
+ case 2: aItem->m_Pos.m_Anchor = RB_CORNER; break;
+ case 0: aItem->m_Pos.m_Anchor = RT_CORNER; break;
+ case 3: aItem->m_Pos.m_Anchor = LB_CORNER; break;
+ case 1: aItem->m_Pos.m_Anchor = LT_CORNER; break;
+ }
+
+ // Import End point
+ msg = m_textCtrlEndX->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_End.m_Pos.x = dtmp;
+
+ msg = m_textCtrlEndY->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_End.m_Pos.y = dtmp;
+
+ switch( m_comboBoxCornerEnd->GetSelection() )
+ {
+ case 2: aItem->m_End.m_Anchor = RB_CORNER; break;
+ case 0: aItem->m_End.m_Anchor = RT_CORNER; break;
+ case 3: aItem->m_End.m_Anchor = LB_CORNER; break;
+ case 1: aItem->m_End.m_Anchor = LT_CORNER; break;
+ }
+
+ // Import Repeat prms
+ long itmp;
+ msg = m_textCtrlRepeatCount->GetValue();
+ msg.ToLong( &itmp );
+ aItem->m_RepeatCount = itmp;
+
+ msg = m_textCtrlStepX->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_IncrementVector.x = dtmp;
+
+ msg = m_textCtrlStepY->GetValue();
+ msg.ToDouble( &dtmp );
+ aItem->m_IncrementVector.y = dtmp;
+
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_TEXT )
+ {
+ WORKSHEET_DATAITEM_TEXT* item = (WORKSHEET_DATAITEM_TEXT*) aItem;
+
+ item->m_TextBase = m_textCtrlText->GetValue();
+
+ msg = m_textCtrlTextIncrement->GetValue();
+ msg.ToLong( &itmp );
+ item->m_IncrementLabel = itmp;
+
+ item->SetBold( m_checkBoxBold->IsChecked() );
+ item->SetItalic( m_checkBoxItalic->IsChecked() );
+
+ switch( m_choiceHjustify->GetSelection() )
+ {
+ case 0: item->m_Hjustify = GR_TEXT_HJUSTIFY_LEFT; break;
+ case 1: item->m_Hjustify = GR_TEXT_HJUSTIFY_CENTER; break;
+ case 2: item->m_Hjustify = GR_TEXT_HJUSTIFY_RIGHT; break;
+ }
+ switch( m_choiceVjustify->GetSelection() )
+ {
+ case 0: item->m_Vjustify = GR_TEXT_VJUSTIFY_TOP; break;
+ case 1: item->m_Vjustify = GR_TEXT_VJUSTIFY_CENTER; break;
+ case 2: item->m_Vjustify = GR_TEXT_VJUSTIFY_BOTTOM; break;
+ }
+
+ msg = m_textCtrlRotation->GetValue();
+ msg.ToDouble( &dtmp );
+ item->m_Orient = dtmp;
+
+ // Import text size
+ msg = m_textCtrlTextSizeX->GetValue();
+ msg.ToDouble( &dtmp );
+ item->m_TextSize.x = dtmp;
+
+ msg = m_textCtrlTextSizeY->GetValue();
+ msg.ToDouble( &dtmp );
+ item->m_TextSize.y = dtmp;
+
+ // Import constraints:
+ msg = m_textCtrlConstraintX->GetValue();
+ msg.ToDouble( &dtmp );
+ item->m_BoundingBoxSize.x = dtmp;
+
+ msg = m_textCtrlConstraintY->GetValue();
+ msg.ToDouble( &dtmp );
+ item->m_BoundingBoxSize.y = dtmp;
+ }
+
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_POLYPOLYGON )
+ {
+ WORKSHEET_DATAITEM_POLYPOLYGON* item = (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem;
+
+ msg = m_textCtrlRotation->GetValue();
+ msg.ToDouble( &dtmp );
+ item->m_Orient = dtmp;
+ }
+
+ if( aItem->GetType() == WORKSHEET_DATAITEM::WS_BITMAP )
+ {
+ WORKSHEET_DATAITEM_BITMAP* item = (WORKSHEET_DATAITEM_BITMAP*) aItem;
+ // Set definition in PPI
+ long value;
+ msg = m_textCtrlBitmapPPI->GetValue();
+ if( msg.ToLong( &value ) )
+ item->SetPPI( (int)value );
+ }
+
+ return true;
+}
+
diff --git a/pagelayout_editor/properties_frame.h b/pagelayout_editor/properties_frame.h
new file mode 100644
index 0000000..208bdc1
--- /dev/null
+++ b/pagelayout_editor/properties_frame.h
@@ -0,0 +1,70 @@
+/**
+ * @file properties_frame.h
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _PROPERTIES_FRAME_H
+#define _PROPERTIES_FRAME_H
+
+#include <wxstruct.h>
+#include <pl_editor_frame.h>
+#include <dialogs/properties_frame_base.h>
+
+class WORKSHEET_DATAITEM;
+
+/**
+ * Class PROPERTIES_FRAME display properties of the current item.
+ */
+
+class PROPERTIES_FRAME : public PANEL_PROPERTIES_BASE
+{
+ PL_EDITOR_FRAME* m_parent;
+
+public:
+ PROPERTIES_FRAME( PL_EDITOR_FRAME* aParent );
+ ~PROPERTIES_FRAME();
+
+ // Event functions
+ void OnAcceptPrms( wxCommandEvent& event );
+ void OnSetDefaultValues( wxCommandEvent& event );
+
+
+ // Data transfert from general properties to widgets
+ void CopyPrmsFromGeneralToPanel();
+
+ // Data transfert from widgets to general properties
+ bool CopyPrmsFromPanelToGeneral();
+
+ // Data transfert from item to widgets in properties frame
+ void CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem );
+
+ // Data transfert from widgets in properties frame to item
+ bool CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem );
+
+ wxSize GetMinSize() const;
+};
+
+#endif /* _PROPERTIES_FRAME_H */
diff --git a/pagelayout_editor/toolbars_pl_editor.cpp b/pagelayout_editor/toolbars_pl_editor.cpp
new file mode 100644
index 0000000..ceac7fb
--- /dev/null
+++ b/pagelayout_editor/toolbars_pl_editor.cpp
@@ -0,0 +1,167 @@
+/**
+ * @file toolbars_pl_editor.cpp
+ * @brief Build tool bars
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <fctsys.h>
+
+#include <common.h>
+#include <macros.h>
+#include <bitmaps.h>
+#include <pl_editor_id.h>
+#include <pl_editor_frame.h>
+#include <hotkeys.h>
+
+void PL_EDITOR_FRAME::ReCreateHToolbar( void )
+{
+ if( m_mainToolBar != NULL )
+ return;
+
+ wxString msg;
+
+ // Standard file commands
+ m_mainToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
+ wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT );
+
+ m_mainToolBar->AddTool( wxID_NEW, wxEmptyString, KiBitmap( pagelayout_new_xpm ),
+ _( "New page layout design" ) );
+
+ m_mainToolBar->AddTool( wxID_OPEN, wxEmptyString, KiBitmap( pagelayout_load_xpm ),
+ _( "Load a page layout file. Previous data will be deleted" ) );
+
+ m_mainToolBar->AddTool( wxID_SAVE, wxEmptyString, KiBitmap( save_project_xpm ),
+ _( "Save page layout design" ) );
+
+ m_mainToolBar->AddSeparator();
+ m_mainToolBar->AddTool( ID_SHEET_SET, wxEmptyString, KiBitmap( sheetset_xpm ),
+ _( "Page settings" ) );
+
+ m_mainToolBar->AddTool( wxID_PRINT, wxEmptyString, KiBitmap( print_button_xpm ),
+ _( "Print page layout" ) );
+
+ m_mainToolBar->AddSeparator();
+ m_mainToolBar->AddTool( wxID_CUT, wxEmptyString, KiBitmap( delete_xpm ),
+ _( "Delete selected item" ) );
+
+ m_mainToolBar->AddSeparator();
+ m_mainToolBar->AddTool( wxID_UNDO, wxEmptyString,
+ KiBitmap( undo_xpm ), wxEmptyString );
+ m_mainToolBar->AddTool( wxID_REDO, wxEmptyString,
+ KiBitmap( redo_xpm ), wxEmptyString );
+
+ // Standard Zoom controls:
+ m_mainToolBar->AddSeparator();
+ msg = AddHotkeyName( _( "Zoom in" ), PlEditorHokeysDescr, HK_ZOOM_IN, IS_COMMENT );
+ m_mainToolBar->AddTool( ID_ZOOM_IN, wxEmptyString, KiBitmap( zoom_in_xpm ), msg );
+
+ msg = AddHotkeyName( _( "Zoom out" ), PlEditorHokeysDescr, HK_ZOOM_OUT, IS_COMMENT );
+ m_mainToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString, KiBitmap( zoom_out_xpm ), msg );
+
+ msg = AddHotkeyName( _( "Redraw view" ), PlEditorHokeysDescr, HK_ZOOM_REDRAW, IS_COMMENT );
+ m_mainToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString, KiBitmap( zoom_redraw_xpm ), msg );
+
+ msg = AddHotkeyName( _( "Zoom auto" ), PlEditorHokeysDescr, HK_ZOOM_AUTO, IS_COMMENT );
+ m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ), msg );
+
+ // Display mode switch
+ m_mainToolBar->AddSeparator();
+ m_mainToolBar->AddTool( ID_SHOW_REAL_MODE, wxEmptyString,
+ KiBitmap( pagelayout_normal_view_mode_xpm ),
+ _( "Show title block like it will be displayed in applications\n"
+ "texts with format are replaced by the full text"),
+ wxITEM_CHECK );
+ m_mainToolBar->AddTool( ID_SHOW_PL_EDITOR_MODE,
+ wxEmptyString, KiBitmap( pagelayout_special_view_mode_xpm ),
+ _( "Show title block in edit mode: texts are shown as is:\n"
+ "texts with format are displayed with no change"),
+ wxITEM_CHECK );
+
+ m_mainToolBar->AddSeparator();
+
+ wxString choiceList[5] =
+ {
+ _("Left Top paper corner"),
+ _("Right Bottom page corner"),
+ _("Left Bottom page corner"),
+ _("Right Top page corner"),
+ _("Left Top page corner")
+ };
+
+ m_originSelectBox = new wxChoice( m_mainToolBar, ID_SELECT_COORDINATE_ORIGIN,
+ wxDefaultPosition, wxDefaultSize,
+ 5, choiceList );
+ m_mainToolBar->AddControl( m_originSelectBox );
+ m_originSelectBox->SetToolTip( _(" Origin of coordinates displayed to the status bar") );
+
+ int minwidth = 0;
+ for( int ii = 0; ii < 5; ii++ )
+ {
+ int width = GetTextSize( choiceList[ii], m_originSelectBox ).x;
+ minwidth = std::max( minwidth, width );
+ }
+ m_originSelectBox->SetMinSize( wxSize( minwidth, -1 ) );
+ m_originSelectBox->SetSelection( m_originSelectChoice );
+
+ wxString pageList[5] =
+ {
+ _("Page 1"),
+ _("Other pages")
+ };
+
+ m_pageSelectBox = new wxChoice( m_mainToolBar, ID_SELECT_PAGE_NUMBER,
+ wxDefaultPosition, wxDefaultSize,
+ 2, pageList );
+ m_mainToolBar->AddControl( m_pageSelectBox );
+ m_pageSelectBox->SetToolTip( _("Simulate page 1 or other pages to show how items\n"\
+ "which are not on all page are displayed") );
+ m_pageSelectBox->SetSelection( 0 );
+
+
+ // after adding the buttons to the toolbar, must call Realize() to reflect the changes
+ m_mainToolBar->Realize();
+}
+
+
+void PL_EDITOR_FRAME::ReCreateVToolbar( void )
+{
+ if( m_drawToolBar )
+ return;
+
+ m_drawToolBar = new wxAuiToolBar( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
+ wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_VERTICAL );
+
+ // Set up toolbar
+ m_drawToolBar->AddTool( ID_NO_TOOL_SELECTED, wxEmptyString, KiBitmap( cursor_xpm ) );
+ m_drawToolBar->AddSeparator();
+
+ m_drawToolBar->Realize();
+}
+
+
+void PL_EDITOR_FRAME::ReCreateOptToolbar( void )
+{
+}